{"version":3,"file":"static/js/139.2a949404.chunk.js?cb=1792096182968","sources":["../node_modules/react/jsx-runtime.js","../node_modules/react/index.js","../node_modules/immutable/dist/immutable.es.js","../node_modules/@redux-saga/core/dist/redux-saga-effects.esm.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/ats-framework/src/constants/index.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/utils/batch.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/react-redux/es/hooks/useReduxContext.js","../node_modules/react-redux/es/hooks/useStore.js","../node_modules/react-redux/es/hooks/useDispatch.js","../node_modules/react-redux/es/hooks/useSelector.js","../node_modules/react-redux/es/index.js","../node_modules/reselect/es/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/ats-framework/src/modules/ApplicationModule/actions.ts","../node_modules/react-i18next/dist/es/context.js","../node_modules/react-i18next/dist/es/utils.js","../node_modules/react-i18next/dist/es/Trans.js","../node_modules/react-i18next/dist/es/useTranslation.js","../node_modules/react-i18next/dist/es/withTranslation.js","../node_modules/react-i18next/dist/es/I18nextProvider.js","../node_modules/redux-form/immutable.js","../node_modules/ats-framework/src/modules/AtsModule/selectors.ts","../node_modules/ats-framework/src/modules/AccountModule/actions.ts","../node_modules/redux-form/es/index.js","../node_modules/ats-framework/src/modules/AtsModule/actions.ts","../node_modules/redux/es/redux.js","../node_modules/tslib/tslib.es6.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@material-ui/core/esm/Grid/Grid.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/ats-framework/src/modules/PimModule/actions.ts","../node_modules/ats-framework/src/modules/SpecModule/actions.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/ats-framework/src/modules/AtsModule/sseSessionSaga.ts","../node_modules/ats-framework/src/utils/appTokenRefresh/index.ts","../node_modules/ats-framework/src/modules/AtsModule/helpers.ts","../node_modules/ats-framework/src/modules/AtsModule/saga.ts","../node_modules/prop-types/index.js","../node_modules/ats-framework/src/modules/ProjectModule/actions.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../../../src/utils/base64.ts","../../../src/utils/pdfDocEncoding.ts","../../../src/utils/arrays.ts","../../../src/utils/async.ts","../../../src/utils/numbers.ts","../../../src/utils/errors.ts","../../../src/utils/objects.ts","../../../src/utils/validators.ts","../../../src/utils/Cache.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/DefaultTextFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/TextFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/DateRangeFilterRenderer/validate.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/DateRangeFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/DateFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/LocationFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/SelectFilterRenderer/validate.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/BuildingFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/AmountFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/AmountRangeFilterRenderer/validate.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/AmountRangeFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/SelectFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/DataSelectFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/TrackedUserAndOfficeSelectRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/DataUserSelectFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/CollaboratorFilterRenderer/index.tsx","../node_modules/react-select/async/dist/react-select.browser.esm.js","../node_modules/@material-ui/icons/esm/ArrowDropUp.js","../node_modules/@material-ui/icons/esm/ArrowDropDown.js","../node_modules/ats-framework/src/components/QuoteCustomers/discount.tsx","../node_modules/ats-framework/src/components/QuoteCustomers/customer.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/AutoCompleteSelectRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/ComponentToFilterRendererMap.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/CheckboxFilterRenderer/index.tsx","../node_modules/ats-framework/src/components/_FilterEditRenderer/index.tsx","../node_modules/ats-framework/src/components/GridBlock/index.tsx","../node_modules/ats-framework/src/components/LinkButton/index.tsx","../node_modules/ats-framework/src/components/CallToActionWidgetContent/index.tsx","../node_modules/ats-framework/src/components/CategorySelectOption/index.tsx","../node_modules/ats-framework/src/components/ControlledToggle/index.tsx","../node_modules/ats-framework/src/components/FilterEditor/index.tsx","../node_modules/ats-framework/src/components/FlatPanel/index.tsx","../node_modules/ats-framework/src/components/ImageIcon/index.tsx","../node_modules/ats-framework/src/components/IconWithLabel/index.tsx","../node_modules/ats-framework/src/components/MainMenuItemCollapsible/index.tsx","../node_modules/@material-ui/core/esm/CardActionArea/CardActionArea.js","../node_modules/ats-framework/src/components/MediaCard/index.tsx","../node_modules/ats-framework/src/components/ProductSelectOption/index.tsx","../node_modules/ats-framework/src/components/ProductStep/index.tsx","../node_modules/ats-framework/src/components/SeriesSelectOption/index.tsx","../node_modules/ats-framework/src/components/QuickSearchInput/MenuListComponent.tsx","../node_modules/ats-framework/src/components/QuickSearchInput/index.tsx","../node_modules/ats-framework/src/components/RoundShadowImage/index.tsx","../node_modules/ats-framework/src/components/RoutePartialPath/index.tsx","../node_modules/ats-framework/src/components/RouteWithProps/index.tsx","../node_modules/ats-framework/src/components/SelectableCard/index.tsx","../node_modules/ats-framework/src/components/StyleTest/index.tsx","../node_modules/ats-framework/src/components/CustomizedSnackbar/index.ts","../node_modules/@material-ui/lab/esm/SpeedDialAction/SpeedDialAction.js","../node_modules/@material-ui/lab/esm/SpeedDial/SpeedDial.js","../node_modules/ats-framework/src/components/SpeedDialCustom/index.tsx","../node_modules/ats-framework/src/components/StatusChipPim/index.ts","../node_modules/ats-framework/src/components/TableActions/index.ts","../node_modules/ats-framework/src/components/TogglePath/index.tsx","../node_modules/ats-framework/src/components/TruncateText/index.ts","../node_modules/ats-framework/src/images/detailWidgets/underConstruction.png","../node_modules/ats-framework/src/components/UnderConstruction/index.tsx","../node_modules/ats-framework/src/components/WidgetHeaderEndStyle/index.ts","../node_modules/ats-framework/src/components/WidgetHeaderStyle/index.tsx","../node_modules/ats-framework/src/components/WidgetIconContainer/index.tsx","../node_modules/ats-framework/src/components/WidgetLoaderStyle/index.tsx","../node_modules/ats-framework/src/components/LoadingModal/index.ts","../node_modules/ats-framework/src/components/Winamp/index.ts","../node_modules/ats-framework/src/components/ConditionalTooltip/index.tsx","../node_modules/ats-framework/src/components/Formik/defaultComponents/ErrorField.tsx","../node_modules/ats-framework/src/components/Formik/Field.tsx","../node_modules/ats-framework/src/modules/ProductModule/actions.ts","../node_modules/ats-framework/src/modules/AccountModule/selectors.ts","../node_modules/i18next/dist/es/logger.js","../node_modules/i18next/dist/es/EventEmitter.js","../node_modules/i18next/dist/es/utils.js","../node_modules/i18next/dist/es/ResourceStore.js","../node_modules/i18next/dist/es/postProcessor.js","../node_modules/i18next/dist/es/Translator.js","../node_modules/i18next/dist/es/LanguageUtils.js","../node_modules/i18next/dist/es/PluralResolver.js","../node_modules/i18next/dist/es/Interpolator.js","../node_modules/i18next/dist/es/BackendConnector.js","../node_modules/i18next/dist/es/defaults.js","../node_modules/i18next/dist/es/i18next.js","../node_modules/i18next/dist/es/index.js","../node_modules/@material-ui/core/esm/Typography/Typography.js","../../../../src/core/document/PDFHeader.ts","../../../../src/core/objects/PDFNumber.ts","../../../../src/core/objects/PDFArray.ts","../../../../src/core/objects/PDFBool.ts","../../../../src/core/syntax/Delimiters.ts","../../../../src/core/syntax/Whitespace.ts","../../../../src/core/syntax/Irregular.ts","../../../../src/core/objects/PDFName.ts","../../../../src/core/operators/PDFOperatorNames.ts","../../../../src/core/objects/PDFNull.ts","../../../../src/core/objects/PDFDict.ts","../../../../src/core/objects/PDFStream.ts","../../../../src/core/objects/PDFRawStream.ts","../../../../src/core/objects/PDFRef.ts","../../../../src/core/operators/PDFOperator.ts","../../../../src/core/structures/PDFCrossRefStream.ts","../../../../src/core/structures/PDFFlateStream.ts","../../../../src/core/structures/PDFContentStream.ts","../../../src/utils/rng.ts","../../../src/core/PDFContext.ts","../../../../src/core/structures/PDFPageLeaf.ts","../../../src/core/PDFObjectCopier.ts","../../../../src/core/document/PDFCrossRefSection.ts","../../../../src/core/document/PDFTrailer.ts","../../../../src/core/document/PDFTrailerDict.ts","../../../../src/core/structures/PDFObjectStream.ts","../../../../src/core/writers/PDFWriter.ts","../../../../src/core/objects/PDFInvalidObject.ts","../../../../src/core/embedders/JpegEmbedder.ts","../../../../src/core/writers/PDFStreamWriter.ts","../../../../src/core/embedders/StandardFontEmbedder.ts","../../../../src/core/embedders/CMap.ts","../../../../src/core/embedders/FontFlags.ts","../../../../src/core/embedders/CustomFontEmbedder.ts","../../../../src/core/embedders/CustomFontSubsetEmbedder.ts","../node_modules/@pdf-lib/upng/UPNG.js","../../../src/utils/png.ts","../../../../src/core/interactive/ViewerPreferences.ts","../../../../src/core/embedders/PngEmbedder.ts","../../../../src/core/streams/Stream.ts","../../../../src/core/streams/DecodeStream.ts","../../../../src/core/streams/Ascii85Stream.ts","../../../../src/core/streams/AsciiHexStream.ts","../../../../src/core/streams/FlateStream.ts","../../../../src/core/streams/LZWStream.ts","../../../../src/core/streams/RunLengthStream.ts","../../../../src/core/streams/decode.ts","../../../../src/core/embedders/PDFPageEmbedder.ts","../../../../src/core/acroform/flags.ts","../../../../src/core/acroform/PDFAcroField.ts","../../../../src/core/annotation/BorderStyle.ts","../../../../src/core/annotation/PDFAnnotation.ts","../../../../src/core/annotation/AppearanceCharacteristics.ts","../../../../src/core/annotation/PDFWidgetAnnotation.ts","../../../../src/core/acroform/PDFAcroTerminal.ts","../../../../src/core/acroform/PDFAcroButton.ts","../../../../src/core/acroform/PDFAcroCheckBox.ts","../../../../src/core/acroform/PDFAcroChoice.ts","../../../../src/core/acroform/PDFAcroComboBox.ts","../../../../src/core/acroform/PDFAcroNonTerminal.ts","../../../../src/core/acroform/PDFAcroSignature.ts","../../../../src/core/acroform/PDFAcroText.ts","../../../../src/core/acroform/PDFAcroPushButton.ts","../../../../src/core/acroform/PDFAcroRadioButton.ts","../../../../src/core/acroform/PDFAcroListBox.ts","../../../../src/core/acroform/utils.ts","../../../../src/core/acroform/PDFAcroForm.ts","../../../../src/core/structures/PDFCatalog.ts","../../../../src/core/structures/PDFPageTree.ts","../../../../src/core/syntax/Numeric.ts","../../../../src/core/parser/BaseParser.ts","../../../../src/core/annotation/flags.ts","../../../../src/core/parser/ByteStream.ts","../../../../src/core/syntax/Keywords.ts","../../../../src/core/parser/PDFObjectParser.ts","../../../../src/core/parser/PDFObjectStreamParser.ts","../../../../src/core/parser/PDFXRefStreamParser.ts","../../../../src/core/parser/PDFParser.ts","../node_modules/lodash/lodash.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/ats-framework/src/modules/SpecModule/selectors.ts","../../../../src/core/syntax/CharCodes.ts","../node_modules/ats-framework/src/validators/makeDateValidator/index.ts","../node_modules/ats-framework/src/validators/index.ts","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../src/utils/result-builder.ts","../../../../src/utils/uuid.ts","../../../../src/plugins/destination.ts","../../../src/event.ts","../../../src/messages.ts","../../../../src/utils/chunk.ts","../../../../src/utils/valid-properties.ts","../../../src/identify.ts","../../../src/revenue.ts","../../../src/timeline.ts","../../../../src/utils/event-builder.ts","../../../src/core-client.ts","../../../../src/plugins/identity.ts","../../../src/default-tracking.ts","../../../src/session.ts","../../../../src/utils/snippet-helper.ts","../../../src/language.ts","../../../../src/plugins/context.ts","../../../src/version.ts","../../../../src/storage/memory.ts","../../../src/cookie-name.ts","../../../src/query-params.ts","../../../../src/storage/cookie.ts","../../../../src/storage/browser-storage.ts","../../../../src/storage/local-storage.ts","../../../../src/storage/session-storage.ts","../../../../src/transports/xhr.ts","../../../../src/transports/send-beacon.ts","../../../../src/cookie-migration/index.ts","../../../src/constants.ts","../../../src/config.ts","../../../../src/attribution/constants.ts","../../../../src/attribution/campaign-parser.ts","../../../src/helpers.ts","../../../src/web-attribution.ts","../../../src/utils.ts","../../../src/page-view-tracking.ts","../../../../src/plugins/form-interaction-tracking.ts","../../../../src/plugins/file-download-tracking.ts","../../../src/det-notification.ts","../../../../src/plugins/network-connectivity-checker.ts","../../../src/browser-client.ts","../../../src/offline.ts","../../../src/browser-client-factory.ts","../../../src/index.ts","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@material-ui/core/esm/styles/withStyles.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/ats-framework/src/modules/ApplicationModule/selectors.ts","../node_modules/classnames/index.js","../node_modules/ats-framework/src/modules/QuoteModule/actions.ts","../node_modules/@material-ui/icons/utils/createSvgIcon.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/ats-utils/src/camelize/index.js","../node_modules/ats-utils/src/isArray/index.js","../node_modules/ats-utils/src/singleOrArray/index.ts","../node_modules/ats-utils/src/stringReplace/index.js","../node_modules/ats-utils/src/safeStringify/index.js","../node_modules/ats-utils/src/isElement/index.js","../node_modules/ats-utils/src/isNode/index.js","../node_modules/ats-utils/src/matchPathPartial/index.ts","../node_modules/ats-utils/src/parseDate/index.js","../node_modules/ats-utils/src/checkStore/index.js","../node_modules/ats-utils/src/debugLog/index.js","../node_modules/ats-utils/src/callFunctions/index.js","../node_modules/ats-utils/src/parseQueryString/index.js","../node_modules/ats-utils/src/stringifyQueryParams/index.js","../node_modules/ats-utils/src/rfIsEvent/index.ts","../node_modules/ats-utils/src/rfIsReactNative/index.ts","../node_modules/ats-utils/src/rfGetValue/index.ts","../node_modules/ats-utils/src/rfOnChangeValue/index.ts","../node_modules/ats-framework/src/modules/ProjectModule/selectors.ts","../node_modules/ats-framework/src/hoc/withAmplitudeData/index.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/ats-framework/src/modules/PrintModule/actions.ts","../node_modules/ats-framework/src/models/AclRoles/index.ts","../node_modules/ats-framework/src/models/AclItem/index.tsx","../node_modules/ats-framework/src/models/AiExclusionItem/index.ts","../node_modules/ats-framework/src/models/Address/index.tsx","../node_modules/ats-framework/src/models/AlternativeProduct/index.ts","../node_modules/ats-framework/src/models/AiExclusion/index.ts","../node_modules/ats-framework/src/models/Dashboard/index.ts","../node_modules/ats-framework/src/models/Attribute/index.ts","../node_modules/ats-framework/src/models/AttributeValue/index.ts","../node_modules/ats-framework/src/models/Authentication/index.ts","../node_modules/ats-framework/src/models/AuthObject/index.ts","../node_modules/ats-framework/src/models/AuthUser/index.ts","../node_modules/ats-framework/src/models/AuthUserClaims/index.ts","../node_modules/ats-framework/src/models/AuthUserUser/index.ts","../node_modules/ats-framework/src/models/ContactListItem/index.ts","../node_modules/ats-framework/src/models/BuildingClassListItem/index.ts","../node_modules/ats-framework/src/models/Category/index.ts","../node_modules/ats-framework/src/models/Collaborator/index.ts","../node_modules/ats-framework/src/models/Contact/index.ts","../node_modules/ats-framework/src/models/Error/index.ts","../node_modules/ats-framework/src/models/Filter/index.ts","../node_modules/ats-framework/src/models/KeyContact/index.ts","../node_modules/ats-framework/src/models/HasStringId/index.ts","../node_modules/ats-framework/src/models/MatchingProduct/index.ts","../node_modules/ats-framework/src/models/HasUuid/index.ts","../node_modules/ats-framework/src/models/Identity/index.ts","../node_modules/ats-framework/src/models/LocalFile/index.ts","../node_modules/ats-framework/src/models/Manufacturer/index.ts","../node_modules/ats-framework/src/models/MissingRule/index.ts","../node_modules/ats-framework/src/models/Option/index.ts","../node_modules/ats-framework/src/models/Office/index.ts","../node_modules/ats-framework/src/models/Opportunity/index.tsx","../node_modules/ats-framework/src/models/OpportunityLabelProducts/index.tsx","../node_modules/ats-framework/src/models/OpportunityStatusAction/index.ts","../node_modules/ats-framework/src/models/OpportunityStatusListItem/index.ts","../node_modules/ats-framework/src/models/PageData/index.ts","../node_modules/ats-framework/src/models/Package/index.ts","../node_modules/ats-framework/src/models/Price/index.tsx","../node_modules/ats-framework/src/models/ProductCategory/index.ts","../node_modules/ats-framework/src/models/Product/index.ts","../node_modules/ats-framework/src/models/Project/index.ts","../node_modules/ats-framework/src/models/Quote/index.ts","../node_modules/ats-framework/src/models/ProjectSpec/index.ts","../node_modules/ats-framework/src/models/ProjectTrackStatus/index.ts","../node_modules/ats-framework/src/models/PureAttribute/index.tsx","../node_modules/ats-framework/src/models/PureAttributeOption/index.tsx","../node_modules/ats-framework/src/models/PureName/index.tsx","../node_modules/ats-framework/src/models/RegionsList/index.tsx","../node_modules/ats-framework/src/models/SearchArgs/index.ts","../node_modules/ats-framework/src/models/Series/index.ts","../node_modules/ats-framework/src/models/ServerError/index.ts","../node_modules/ats-framework/src/models/Spec/index.ts","../node_modules/ats-framework/src/models/WidgetLayoutData/index.ts","../node_modules/ats-framework/src/models/Status/index.ts","../node_modules/ats-framework/src/models/TableColumnConfig/index.ts","../node_modules/ats-framework/src/models/User/index.ts","../node_modules/ats-framework/src/models/XrefProduct/index.ts","../node_modules/ats-framework/src/models/XrefPackageProduct/index.ts","../node_modules/ats-framework/src/models/XrefData/index.ts","../node_modules/ats-framework/src/models/XrefType/index.ts","../node_modules/ats-framework/src/models/XrefCategory/index.ts","../node_modules/ats-framework/src/modules/QuoteEditModule/actions.ts","../node_modules/ats-framework/src/modules/CrossRefModule/actions.ts","../node_modules/ats-framework/src/modules/ProductModule/selectors.ts","../node_modules/moment/moment.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/ats-framework/src/modules/PimModule/selectors.ts","../node_modules/ats-framework/src/components/FieldCheckbox/index.tsx","../node_modules/ats-framework/src/modules/QuoteModule/selectors.ts","../node_modules/@material-ui/icons/Close.js","../node_modules/@material-ui/icons/Delete.js","../node_modules/ats-framework/src/components/FieldTextField/index.tsx","../node_modules/ats-framework/src/components/LoadingModal/Component.tsx","../node_modules/@redux-saga/core/dist/io-6de156f3.js","../node_modules/ats-framework/src/modules/QuoteEditModule/selectors.ts","../node_modules/ats-framework/src/modules/QuoteEditModule/constants.ts","../node_modules/connected-react-router/immutable.js","../node_modules/@material-ui/styles/esm/ServerStyleSheets/ServerStyleSheets.js","../node_modules/@material-ui/styles/esm/withTheme/withTheme.js","../node_modules/ats-framework/src/modules/ProjectLocationModule/actions.ts","../node_modules/ats-framework/src/components/DrawerRow/index.tsx","../node_modules/@loadable/component/dist/loadable.esm.js","../node_modules/react-router/esm/react-router.js","../node_modules/ats-framework/src/components/AtsSvg/AtsSvg404/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgAtWork/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgBuildSizer/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgBulkEdit/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEdit/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgNewProject/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgNewSpec/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgXref/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgPackage/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgDownload/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgDrawing/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgMove/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgPreparingDoc/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgFolder/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEmptySpecListWidget/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgSpec/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEmptyProductList/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgDrawingCompleted/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEmptyDashboard/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgProduct/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgSeries/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgNewMaster/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgContact/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgStep1/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgStep2/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgTestProject/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgPushpinRounded/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEmptyFeaturesOptions/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgEmptyAttachment/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgTag/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgCreateNewProject/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgCategory/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgRequestMaster/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgAltXrefLogo/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgUpload/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgDiscontinued/index.tsx","../node_modules/@material-ui/core/esm/utils/capitalize.js","../node_modules/ats-framework/src/contexts/AtsApiContext/index.tsx","../node_modules/@fortawesome/react-fontawesome/index.es.js","../node_modules/ats-framework/src/utils/reducerInjectors/index.ts","../node_modules/ats-framework/src/utils/injectReducer/index.tsx","../node_modules/ats-framework/src/utils/sagaInjectors/constants.ts","../node_modules/ats-framework/src/utils/sagaInjectors/index.ts","../node_modules/ats-framework/src/utils/injectSaga/index.tsx","../node_modules/ats-framework/src/utils/serialization/index.ts","../node_modules/ats-framework/src/utils/index.ts","../node_modules/ats-framework/src/components/FieldDatePickerV2/index.tsx","../node_modules/@material-ui/core/esm/Button/Button.js","../node_modules/@material-ui/core/esm/Tooltip/Tooltip.js","../node_modules/react-dom/index.js","../../../src/core/errors.ts","../../../src/debug-build.ts","../node_modules/ats-framework/src/modules/ProjectLocationModule/selectors.ts","../node_modules/ats-framework/src/components/ProjectDetail/helpers.ts","../node_modules/ats-framework/src/constants/quote/index.ts","../node_modules/@material-ui/icons/esm/utils/createSvgIcon.js","../node_modules/ats-framework/src/modules/RouterModule/selectors.ts","../node_modules/ats-framework/src/modules/RouterModule/constants.ts","../node_modules/@material-ui/core/esm/styles/colorManipulator.js","../node_modules/ats-framework/src/components/_CellRenderers/LinkCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/TextCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/QuotesCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/TrackProjectButton/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/ContactsCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/CollaborationIconCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/ListCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/RegionCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/IconCell/index.tsx","../node_modules/ats-framework/src/components/_CellRenderers/MultiTextCell/index.tsx","../node_modules/ats-framework/src/models/Base/index.tsx","../node_modules/ats-framework/src/containers/QuoteTemplate/utils.ts","../node_modules/ats-framework/src/modules/TaskModule/actions.ts","../node_modules/ats-framework/src/modules/LocationModule/actions.ts","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/ats-framework/src/hoc/withReduxFormValidationTranslation/index.tsx","../node_modules/@material-ui/icons/Warning.js","../node_modules/@babel/runtime/helpers/extends.js","../node_modules/use-memo-one/dist/use-memo-one.esm.js","../node_modules/@babel/runtime-corejs2/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime-corejs2/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime-corejs2/helpers/esm/extends.js","../node_modules/css-box-model/dist/css-box-model.esm.js","../node_modules/raf-schd/dist/raf-schd.esm.js","../node_modules/react-beautiful-dnd/dist/react-beautiful-dnd.esm.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/ats-framework/src/contexts/index.ts","../node_modules/ats-framework/src/modules/ProductModule/constants.ts","../node_modules/ats-framework/src/containers/Debug/index.tsx","../node_modules/ats-framework/src/containers/MyContactsPage/constants.ts","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../src/models/StyleTags.js","../../src/models/ThemeProvider.js","../../src/models/StyleSheetManager.js","../../src/models/GlobalStyle.js","../node_modules/ats-framework/src/utils/apiClient.ts","../node_modules/ats-framework/src/components/ProductDrawerEdit/PriceExpansionPanel.tsx","../node_modules/ats-framework/src/components/ProductDrawerEdit/SpecSheetUpload.tsx","../node_modules/ats-framework/src/components/ProductDrawerEdit/MediaRow.tsx","../node_modules/ats-framework/src/utils/duplicateFirmProduct/index.ts","../node_modules/ats-framework/src/components/ProductDrawerEdit/LinkConfirmationDialog.tsx","../node_modules/ats-framework/src/components/ProductDrawerEdit/InheritenceSettingDialog.tsx","../node_modules/ats-framework/src/components/ProductDrawerEdit/UnlinkConfirmationDialog.tsx","../node_modules/ats-framework/src/components/_RowRenderer/ComponentToEditRowRendererMap.ts","../node_modules/ats-framework/src/components/_RowRenderer/TextEditRenderer/index.tsx","../node_modules/ats-framework/src/components/_RowRenderer/SingleSelectEditRenderer/index.tsx","../node_modules/ats-framework/src/components/_RowRenderer/index.tsx","../node_modules/ats-framework/src/components/ProductDrawerEdit/index.tsx","../node_modules/ats-framework/src/components/ProductDrawerView/PriceTableItem.tsx","../node_modules/ats-framework/src/hooks/useDrawerExpanded.ts","../node_modules/ats-framework/src/utils/getMostRecentPricingUpdate.ts","../node_modules/ats-framework/src/components/ProductDrawerView/index.tsx","../node_modules/ats-framework/src/components/ProductDrawer/index.tsx","../node_modules/react-router-dom/esm/react-router-dom.js","../../../../src/browser/types.ts","../node_modules/@emotion/utils/dist/utils.browser.esm.js","../node_modules/@emotion/core/dist/emotion-element-57a3a7a3.browser.esm.js","../node_modules/@emotion/core/dist/core.browser.esm.js","../node_modules/ats-framework/src/modules/ListModule/actions.ts","../node_modules/babel-runtime/helpers/extends.js","../../../src/utils/strings.ts","../node_modules/@redux-saga/is/dist/redux-saga-is.esm.js","../node_modules/redux-form/es/actions.js","../node_modules/@material-ui/core/esm/IconButton/IconButton.js","../node_modules/@material-ui/utils/esm/chainPropTypes.js","../node_modules/@material-ui/utils/esm/elementAcceptingRef.js","../node_modules/@material-ui/utils/esm/elementTypeAcceptingRef.js","../node_modules/@material-ui/utils/esm/exactProp.js","../node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js","../node_modules/@material-ui/utils/esm/getDisplayName.js","../node_modules/@material-ui/utils/esm/HTMLElementType.js","../node_modules/@material-ui/utils/esm/ponyfillGlobal.js","../node_modules/@material-ui/utils/esm/refType.js","../node_modules/@material-ui/core/esm/utils/useForkRef.js","../node_modules/ats-framework/src/modules/NotificationModule/actions.ts","../node_modules/ats-framework/src/components/TogglePath/utils.ts","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../../src/worldwide.ts","../node_modules/ats-framework/src/store/index.ts","../node_modules/ats-framework/src/components/FieldAutoSuggest/index.tsx","../node_modules/ats-framework/src/models/HasId/index.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/ats-framework/src/hooks/useFileUpload.tsx","../node_modules/ats-framework/src/modules/LanguageModule/selectors.ts","../node_modules/ats-framework/src/modules/DashboardModule/actions.ts","../../../../src/core/objects/PDFHexString.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","../node_modules/ats-framework/src/components/FieldReactSelect/index.tsx","../node_modules/ats-framework/src/modules/ErrorModule/actions.ts","../node_modules/ats-framework/src/modules/BuildingModule/actions.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../src/components/HiddenText/HiddenText.tsx","../../src/components/LiveRegion/LiveRegion.tsx","../../src/store/actions.ts","../../src/components/Accessibility/defaults.ts","../../src/utilities/other/getValueIndex.ts","../../src/utilities/other/noop.ts","../../src/utilities/other/omit.ts","../../src/store/context.ts","../../src/utilities/coordinates/constants.ts","../../src/utilities/coordinates/distanceBetweenPoints.ts","../../src/utilities/coordinates/getEventCoordinates.ts","../../src/utilities/event/isTouchEvent.ts","../../src/utilities/event/isMouseEvent.ts","../../src/utilities/coordinates/getRelativeTransformOrigin.ts","../../src/utilities/algorithms/closestCenter.ts","../../src/utilities/rect/rectAdjustment.ts","../../src/types/direction.ts","../../src/utilities/scroll/getScrollableAncestors.ts","../../src/utilities/scroll/isScrollable.ts","../../src/utilities/scroll/getScrollableElement.ts","../../src/utilities/scroll/getScrollCoordinates.ts","../../src/utilities/scroll/getScrollPosition.ts","../../src/utilities/scroll/documentScrollingElement.ts","../../src/utilities/scroll/getScrollDirectionAndSpeed.ts","../../src/utilities/scroll/getScrollElementRect.ts","../../src/utilities/scroll/getScrollOffsets.ts","../../src/utilities/rect/getRect.ts","../../src/utilities/rect/isViewRect.ts","../../src/utilities/algorithms/closestCorners.ts","../../src/utilities/algorithms/rectIntersection.ts","../../src/utilities/document/getOwnerDocument.ts","../../src/store/reducer.ts","../../src/hooks/monitor/useDndMonitor.ts","../../src/hooks/utilities/useAutoScroller.ts","../../src/hooks/utilities/useLayoutMeasuring.ts","../../src/components/Accessibility/Accessibility.tsx","../../src/hooks/useAnnouncement.ts","../../src/hooks/utilities/useData.ts","../../src/hooks/utilities/useScrollableAncestors.ts","../../src/hooks/utilities/useRect.ts","../../src/sensors/useSensor.ts","../../src/sensors/useSensors.ts","../../src/sensors/keyboard/types.ts","../../src/sensors/utilities/Listeners.ts","../../src/sensors/utilities/getEventListenerTarget.ts","../../src/sensors/utilities/hasExceededDistance.ts","../../src/sensors/keyboard/defaults.ts","../../src/sensors/pointer/AbstractPointerSensor.ts","../../src/sensors/keyboard/KeyboardSensor.ts","../../src/utilities/document/getWindow.ts","../../src/sensors/pointer/PointerSensor.ts","../../src/sensors/mouse/MouseSensor.ts","../../src/sensors/touch/TouchSensor.ts","../../src/modifiers/applyModifiers.ts","../../src/components/DndContext/DndContext.tsx","../../src/utilities/rect/getRectDelta.ts","../../src/hooks/utilities/useCachedNode.ts","../../src/hooks/utilities/useScrollOffsets.ts","../../src/utilities/rect/adjustScale.ts","../../src/hooks/utilities/useCombineActivators.ts","../../src/hooks/useDraggable.ts","../../src/hooks/utilities/useSyntheticListeners.ts","../../src/hooks/useDndContext.ts","../../src/hooks/useDroppable.ts","../../src/components/DragOverlay/DragOverlay.tsx","../../src/components/DragOverlay/hooks/useDerivedTransform.ts","../../src/components/DragOverlay/hooks/useDropAnimation.ts","../node_modules/@material-ui/icons/Add.js","../node_modules/babel-runtime/helpers/classCallCheck.js","../node_modules/uuid/v1.js","../node_modules/ats-utils/src/utcToLocal/index.js","../node_modules/@material-ui/icons/WarningRounded.js","../node_modules/@material-ui/core/esm/styles/useTheme.js","../../../src/hub.ts","../node_modules/reactcss/lib/index.js","../node_modules/babel-runtime/helpers/createClass.js","../node_modules/@material-ui/icons/Search.js","../node_modules/ats-framework/src/components/DrawerTextFieldRow/index.tsx","../node_modules/ats-framework/src/modules/BuildingModule/constants.ts","../node_modules/ats-framework/src/modules/ListModule/selectors.ts","../../src/hooks/useCombinedRefs.ts","../../src/execution-context.ts","../../src/hooks/useIsomorphicLayoutEffect.ts","../../src/hooks/useInterval.ts","../../src/hooks/useLazyMemo.ts","../../src/hooks/useNodeRef.ts","../../src/hooks/useUniqueId.ts","../../src/adjustment.ts","../../src/css.ts","../node_modules/@material-ui/icons/Info.js","../node_modules/ats-framework/src/pages/SeriesEditPage/SeriesInfo/index.tsx","../node_modules/react-select/dist/chunk-5d200a41.browser.esm.js","../node_modules/redux-form/es/actionTypes.js","../node_modules/ats-framework/src/components/Image/BackgroundImage/index.ts","../node_modules/ats-framework/src/components/Image/AsyncImage/index.tsx","../node_modules/ats-framework/src/components/Image/LocalImage/index.tsx","../node_modules/ats-framework/src/components/Image/ImageContainer/index.tsx","../node_modules/ats-framework/src/components/Image/index.tsx","../../../../src/core/objects/PDFString.ts","../node_modules/ats-framework/src/containers/CreateNewProjectModal/constants.ts","../node_modules/ats-framework/src/images/package.svg","../node_modules/ats-framework/src/components/PackageDrawerView/index.tsx","../node_modules/ats-framework/src/components/PackageDrawerEdit/index.tsx","../node_modules/ats-framework/src/components/PackageDrawer/index.tsx","../node_modules/ats-framework/src/components/Hide/index.tsx","../node_modules/babel-runtime/helpers/possibleConstructorReturn.js","../node_modules/ats-framework/src/components/ProductBrochureBeta/PrintHeader/index.tsx","../node_modules/@babel/runtime/helpers/objectSpread.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/@material-ui/core/esm/TableCell/TableCell.js","../node_modules/@material-ui/icons/Check.js","../node_modules/ats-framework/src/components/FieldDropzone/index.tsx","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/ats-framework/src/containers/ProjectList/ProjectListFilter/index.tsx","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../../../../src/utils/spanUtils.ts","../../../src/is.ts","../node_modules/@redux-saga/symbols/dist/redux-saga-symbols.esm.js","../../../src/logger.ts","../node_modules/@material-ui/icons/FileCopy.js","../node_modules/ats-framework/src/components/EmptyView/index.tsx","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/ats-framework/src/components/FieldRadio/index.tsx","../node_modules/ats-framework/src/components/QuoteForm/QuoteFormUtil.tsx","../node_modules/@material-ui/icons/ExpandMore.js","../node_modules/tiny-warning/dist/tiny-warning.esm.js","../node_modules/ats-framework/src/utils/parseFormulaFields.ts","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../src/object.ts","../../../../src/instrument/_handlers.ts","../node_modules/@material-ui/core/esm/utils/useEventCallback.js","../node_modules/ats-framework/src/components/FieldSwitch/index.tsx","../node_modules/ats-framework/src/components/DeleteModalDialog/index.tsx","../node_modules/ats-framework/src/components/FieldAutocomplete/index.tsx","../node_modules/babel-runtime/core-js/object/get-prototype-of.js","../node_modules/babel-runtime/helpers/inherits.js","../../../../src/core/objects/PDFObject.ts","../node_modules/ats-framework/src/utils/Xhr/index.tsx","../node_modules/ats-framework/src/modules/CrossRefModule/selectors.ts","../node_modules/ats-framework/src/modules/AccountModule/constants.ts","../../../src/misc.ts","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/ats-framework/src/containers/Acl/index.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/reducer.ts","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/DuplicateModal.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/index.tsx","../node_modules/ats-framework/src/containers/CrossReferenceSearchContainer/CompetitorFilter.tsx","../node_modules/ats-framework/src/containers/CrossReferenceRecommendedProductsContainer/index.tsx","../node_modules/ats-framework/src/containers/CrossReferenceSearchContainer/CompetitorProductCard.tsx","../node_modules/ats-framework/src/containers/CrossReferenceSearchContainer/index.tsx","../node_modules/ats-framework/src/containers/Dashboard/index.ts","../node_modules/ats-framework/src/containers/DataFieldAutoSuggest/index.tsx","../node_modules/ats-framework/src/containers/NewProjectTabs/index.tsx","../node_modules/ats-framework/src/containers/Pagination/index.ts","../node_modules/ats-framework/src/containers/ScrollTabContainer/index.ts","../node_modules/ats-framework/src/containers/Redirect/index.ts","../node_modules/ats-framework/src/containers/OpportunityAddEditModal/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsActionBlock/index.tsx","../node_modules/@material-ui/core/esm/styles/makeStyles.js","../node_modules/ats-framework/src/modules/LocationModule/selectors.ts","../node_modules/@material-ui/core/esm/internal/svg-icons/createSvgIcon.js","../../../../src/common/debug-build.ts","../node_modules/ats-framework/src/components/GuestLoginModal/SignUpStep1.tsx","../node_modules/ats-framework/src/components/GuestLoginModal/SignUpStep2.tsx","../node_modules/ats-framework/src/components/GuestLoginModal/SignUpStep3.tsx","../node_modules/ats-framework/src/components/GuestLoginModal/index.tsx","../node_modules/@material-ui/core/esm/MenuItem/MenuItem.js","../node_modules/@material-ui/icons/EditRounded.js","../node_modules/ats-framework/src/components/NotFound/index.tsx","../node_modules/ats-framework/src/images/loadingCart.svg","../node_modules/ats-framework/src/components/detailPageComponents/context/viewContext.tsx","../node_modules/ats-framework/src/modules/BuildingModule/selectors.ts","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/AttachmentWidget/ApplyAttachmentTemplateModal/index.tsx","../node_modules/ats-framework/src/modules/ProjectModule/saga.ts","../node_modules/ats-framework/src/components/PrintDescriptionModal/Component.tsx","../node_modules/ats-framework/src/components/ResponsiveMenu/constants.ts","../node_modules/redux-form/lib/structure/immutable/index.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/inheritsLoose.js","../node_modules/ats-framework/src/components/DrawerEditHeader/index.tsx","../node_modules/webpack/buildin/global.js","../node_modules/core-js/library/modules/_core.js","../node_modules/react-color/lib/components/common/index.js","../node_modules/@material-ui/icons/Edit.js","../node_modules/ats-framework/src/models/Preferences/index.ts","../node_modules/ats-framework/src/utils/safeStorage/index.ts","../node_modules/@material-ui/icons/Visibility.js","../node_modules/ats-framework/src/components/FileLocalizationSelector/index.tsx","../node_modules/@material-ui/core/esm/utils/ownerDocument.js","../node_modules/@material-ui/icons/KeyboardArrowDownRounded.js","../node_modules/ats-framework/src/modules/QuoteModule/utils.ts","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/Options/OptionValues.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/Options/index.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Component.tsx","../node_modules/@material-ui/core/esm/Paper/Paper.js","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/SendPricingRequestsWidgetUtil.tsx","../node_modules/@material-ui/icons/Description.js","../node_modules/@material-ui/core/esm/styles/transitions.js","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/constants.ts","../node_modules/redux-react-local/lib/index.js","../node_modules/react-select/dist/chunk-e8ae4b0f.browser.esm.js","../node_modules/ats-framework/src/modules/DashboardModule/selectors.ts","../node_modules/react-is/index.js","../node_modules/ats-framework/src/modules/PrintModule/selectors.ts","../node_modules/ats-framework/src/images/productSelectionPage/usFlag.png","../node_modules/ats-framework/src/images/productSelectionPage/canFlag.png","../node_modules/ats-framework/src/components/AlternativeDropDown/index.tsx","../node_modules/ats-framework/src/containers/AlternativesModal/Components/ProductCard.tsx","../node_modules/ats-framework/src/containers/AlternativesModal/Components/ManufacturerCard.tsx","../node_modules/ats-framework/src/containers/AlternativesModal/index.tsx","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/ats-framework/src/utils/filterSpecDrawingsByProductName.ts","../node_modules/ats-framework/src/containers/CopyModal/ProjectRow.tsx","../node_modules/ats-framework/src/containers/CopyModal/CopyToProject.tsx","../node_modules/ats-framework/src/containers/CopyModal/SpecificationRow.tsx","../node_modules/ats-framework/src/containers/CopyModal/CopyToSpec.tsx","../node_modules/ats-framework/src/containers/CopyModal/CopyToMaster.tsx","../node_modules/ats-framework/src/containers/CopyModal/index.tsx","../node_modules/ats-framework/src/utils/format-number.ts","../node_modules/ats-framework/src/modules/CrossRefModule/constants.ts","../node_modules/ats-framework/src/constants/countries.ts","../../../src/semanticAttributes.ts","../node_modules/@material-ui/core/esm/styles/createStyles.js","../node_modules/@material-ui/core/esm/FormHelperText/FormHelperText.js","../node_modules/@material-ui/core/esm/ListItem/ListItem.js","../node_modules/connected-react-router/esm/actions.js","../node_modules/lodash/isObject.js","../node_modules/ats-framework/src/hoc/withMediaQuery/index.tsx","../node_modules/ats-framework/src/hoc/catchForwardedRef/index.tsx","../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@material-ui/icons/CheckCircle.js","../node_modules/@material-ui/icons/Person.js","../node_modules/lodash-es/_root.js","../node_modules/jss/dist/jss.esm.js","../../../src/exports.ts","../node_modules/@material-ui/core/esm/utils/setRef.js","../node_modules/redux-form/es/structure/plain/splice.js","../node_modules/redux-form/es/structure/plain/getIn.js","../node_modules/redux-form/es/structure/plain/setIn.js","../node_modules/redux-form/es/structure/plain/deepEqual.js","../node_modules/redux-form/es/structure/plain/deleteIn.js","../node_modules/redux-form/es/structure/plain/keys.js","../node_modules/redux-form/es/structure/plain/index.js","../node_modules/ats-framework/src/components/SuccessDrawer/index.tsx","../node_modules/ats-framework/src/containers/AutoQuotationBidDetail/BidDetailConstant.ts","../node_modules/ats-framework/src/components/PimCrossReferenceProductDrawer/constants.ts","../node_modules/@material-ui/core/esm/FormControl/FormControl.js","../node_modules/ats-framework/src/modules/QuoteConnectService/BidInvitationServiceApi.ts","../node_modules/invariant/browser.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/constants.ts","../node_modules/ats-framework/src/images/printPage/pdfIcon.svg","../node_modules/ats-framework/src/components/detailPageComponents/helpers.ts","../node_modules/ats-framework/src/components/DownloadView/constant.ts","../node_modules/@material-ui/core/esm/transitions/utils.js","../node_modules/ats-framework/src/utils/helpers.tsx","../node_modules/ats-framework/src/components/QuoteCustomersWithBid/BidNoteModal/index.tsx","../node_modules/ats-framework/src/components/QuoteCustomersWithBid/index.tsx","../node_modules/@material-ui/core/esm/Link/Link.js","../node_modules/ats-framework/src/components/ToolBar/index.tsx","../node_modules/ats-framework/src/models/ListItem/index.ts","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../node_modules/ats-framework/src/modules/PrintModule/saga.ts","../node_modules/ats-framework/src/containers/CrossReferenceStepper/XrefBreadcrumb.tsx","../node_modules/ats-framework/src/containers/CrossReferenceStepper/Header.tsx","../node_modules/ats-framework/src/containers/CrossReferenceStepper/ConditionalPaper.tsx","../node_modules/@material-ui/icons/esm/Mail.js","../node_modules/ats-framework/src/components/RequestCrossReference/index.tsx","../node_modules/ats-framework/src/components/LocaleSelector/index.tsx","../node_modules/ats-framework/src/containers/CrossReferenceStepper/index.tsx","../node_modules/ats-framework/src/containers/CrossReferenceModal/index.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/AttributesListFilter/index.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/_CustomCellRenderers/AtsAttributeCell.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/_CustomCellRenderers/AttributeNameCell.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/_CustomCellRenderers/CreateOverrideCell.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/index.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/AttributeDialog/index.tsx","../node_modules/ats-framework/src/images/SpecToolLogo-Colour.svg","../node_modules/ats-framework/src/images/AutoQuoteLogo-Colour.svg","../node_modules/ats-framework/src/images/PIMToolLogo-Colour.svg","../node_modules/ats-framework/src/images/AmpLogo-Colour.svg","../node_modules/ats-framework/src/hooks/useNotSupportedBrowserWarning.ts","../node_modules/ats-framework/src/hooks/useSite.ts","../node_modules/ats-framework/src/pages/AuthPages/LoginPage/index.tsx","../node_modules/resolve-pathname/index.js","../node_modules/value-equal/index.js","../node_modules/history/esm/history.js","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/DynamicColumn/TableDynamicCell.tsx","../../src/index.ts","../node_modules/@material-ui/icons/esm/AccountTree.js","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/ProductAssetsConfirmDialog.tsx","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/index.tsx","../node_modules/lodash/merge.js","../node_modules/ats-framework/src/components/FieldSelect/index.tsx","../../src/utilities/arrayMove.ts","../../src/utilities/isValidIndex.ts","../../src/strategies/rectSorting.ts","../../src/strategies/verticalListSorting.ts","../../src/components/SortableContext.tsx","../../src/utilities/getSortedRects.ts","../../src/hooks/defaults.ts","../../src/hooks/useSortable.ts","../../src/hooks/utilities/useDerivedTransform.ts","../../src/sensors/keyboard/sortableKeyboardCoordinates.ts","../node_modules/ats-framework/src/components/ProjectDetail/common/helpers.tsx","../node_modules/@material-ui/icons/ThumbUp.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../../src/MuiPickersUtilsProvider.tsx","../../../src/_shared/hooks/useUtils.ts","../node_modules/react-virtualized/dist/es/Grid/utils/calculateSizeAndPositionDataAndUpdateScrollOffset.js","../node_modules/react-virtualized/dist/es/Grid/utils/CellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/Grid/utils/maxElementSize.js","../node_modules/react-virtualized/dist/es/Grid/utils/ScalingCellSizeAndPositionManager.js","../node_modules/react-virtualized/dist/es/utils/createCallbackMemoizer.js","../node_modules/react-virtualized/dist/es/Grid/utils/updateScrollIndexHelper.js","../node_modules/react-virtualized/dist/es/utils/animationFrame.js","../node_modules/react-virtualized/dist/es/utils/requestAnimationTimeout.js","../node_modules/react-virtualized/dist/es/Grid/Grid.js","../node_modules/react-virtualized/dist/es/Grid/defaultOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/Grid/defaultCellRangeRenderer.js","../node_modules/react-virtualized/dist/es/Grid/accessibilityOverscanIndicesGetter.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/types.js","../node_modules/react-virtualized/dist/es/ArrowKeyStepper/ArrowKeyStepper.js","../node_modules/react-virtualized/dist/es/AutoSizer/AutoSizer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurer.js","../node_modules/react-virtualized/dist/es/CellMeasurer/CellMeasurerCache.js","../node_modules/react-virtualized/dist/es/CellMeasurer/index.js","../node_modules/react-virtualized/dist/es/Collection/CollectionView.js","../node_modules/react-virtualized/dist/es/Collection/Section.js","../node_modules/react-virtualized/dist/es/Collection/SectionManager.js","../node_modules/react-virtualized/dist/es/utils/getUpdatedOffsetForIndex.js","../node_modules/react-virtualized/dist/es/Collection/Collection.js","../node_modules/react-virtualized/dist/es/Collection/utils/calculateSizeAndPositionData.js","../node_modules/react-virtualized/dist/es/Collection/index.js","../node_modules/react-virtualized/dist/es/ColumnSizer/ColumnSizer.js","../node_modules/react-virtualized/dist/es/ColumnSizer/index.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/InfiniteLoader.js","../node_modules/react-virtualized/dist/es/InfiniteLoader/index.js","../node_modules/react-virtualized/dist/es/List/List.js","../node_modules/react-virtualized/dist/es/vendor/binarySearchBounds.js","../node_modules/react-virtualized/dist/es/vendor/intervalTree.js","../node_modules/react-virtualized/dist/es/Masonry/PositionCache.js","../node_modules/react-virtualized/dist/es/Masonry/Masonry.js","../node_modules/react-virtualized/dist/es/Masonry/index.js","../node_modules/react-virtualized/dist/es/MultiGrid/CellMeasurerCacheDecorator.js","../node_modules/react-virtualized/dist/es/MultiGrid/MultiGrid.js","../node_modules/react-virtualized/dist/es/ScrollSync/ScrollSync.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/SortDirection.js","../node_modules/react-virtualized/dist/es/Table/SortIndicator.js","../node_modules/react-virtualized/dist/es/Table/defaultHeaderRenderer.js","../node_modules/react-virtualized/dist/es/Table/defaultRowRenderer.js","../node_modules/react-virtualized/dist/es/Table/Column.js","../node_modules/react-virtualized/dist/es/Table/defaultCellDataGetter.js","../node_modules/react-virtualized/dist/es/Table/defaultCellRenderer.js","../node_modules/react-virtualized/dist/es/Table/Table.js","../node_modules/react-virtualized/dist/es/Table/index.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/onScroll.js","../node_modules/react-virtualized/dist/es/WindowScroller/utils/dimensions.js","../node_modules/react-virtualized/dist/es/WindowScroller/WindowScroller.js","../node_modules/ats-framework/src/modules/QuoteModule/constants.ts","../node_modules/ats-framework/src/modules/ApplicationModule/reducer.ts","../node_modules/ats-framework/src/auth/spec.ts","../node_modules/lodash/isArray.js","../node_modules/ats-framework/src/containers/PimCrossReferenceListPage/XrefListFilter/index.tsx","../node_modules/ats-framework/src/components/FilterChipsBar/index.tsx","../node_modules/@material-ui/icons/Widgets.js","../node_modules/@material-ui/icons/CloudUpload.js","../node_modules/ats-framework/src/components/DrawerEditCTA/index.tsx","../node_modules/pdfjs-dist/legacy/build/pdf.js","../node_modules/ats-framework/src/utils/reduxForm/index.ts","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/DeactivateModal.tsx","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/ActivateModal.tsx","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/index.tsx","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/DescriptionDialog/index.tsx","../node_modules/ats-framework/src/containers/CreateNewMasterFormStepper/actions.ts","../node_modules/ats-framework/src/pages/SeriesEditPage/Attachments/UploadFileItem.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attachments/FullMediaItem.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attachments/index.tsx","../node_modules/ats-framework/src/utils/drawerExpanded.ts","../../../src/parse.ts","../../../src/fetch.ts","../node_modules/ats-framework/src/services/sse/sseClient.ts","../node_modules/ats-framework/src/components/DownloadView/types.ts","../node_modules/ats-framework/src/modules/DashboardModule/constants.ts","../node_modules/ats-framework/src/modules/QuoteEditModule/utils.ts","../node_modules/ats-framework/src/utils/uploadResponse/index.ts","../node_modules/@material-ui/icons/AttachFile.js","../node_modules/ats-framework/src/utils/camelizeString.ts","../node_modules/ats-framework/src/pages/SeriesEditPage/Attachments/EditLink.tsx","../node_modules/ats-framework/src/modules/NotificationModule/selectors.ts","../node_modules/ats-framework/src/modules/ContactModule/selectors.ts","../node_modules/ats-framework/src/modules/ContactModule/constants.ts","../node_modules/@babel/runtime/helpers/esm/objectSpread.js","../node_modules/ats-framework/src/modules/QuoteConnectService/QuoteConnectUtil.ts","../node_modules/ats-framework/src/pages/SpecDetail/helpers.ts","../node_modules/@material-ui/core/esm/CircularProgress/CircularProgress.js","../node_modules/core-js/library/modules/_export.js","../node_modules/core-js/library/modules/_global.js","../node_modules/core-js/library/modules/_wks.js","../node_modules/ats-framework/src/components/_FilterEditRenderer/utils.ts","../node_modules/@material-ui/icons/ExpandLess.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@material-ui/icons/Clear.js","../node_modules/@material-ui/icons/Email.js","../node_modules/@material-ui/lab/esm/internal/svg-icons/createSvgIcon.js","../node_modules/@material-ui/icons/Shuffle.js","../node_modules/@material-ui/icons/AccountTree.js","../node_modules/ats-framework/src/components/ColumnsSelector/PortalAwareItem/index.tsx","../node_modules/ats-framework/src/components/ColumnsSelector/index.tsx","../node_modules/ats-framework/src/components/TeamManagementUserEditDrawer/asyncValidate.ts","../node_modules/ats-framework/src/components/TeamManagementUserEditDrawer/Component.tsx","../node_modules/ats-framework/src/utils/quoteConnect/quoteConnectHelp.ts","../node_modules/ats-framework/src/containers/Quote/utils.ts","../node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js","../node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js","../node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js","../node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js","../node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js","../node_modules/react-select/dist/react-select.browser.esm.js","../node_modules/ats-framework/src/modules/LanguageModule/actions.ts","../node_modules/ats-framework/src/modules/LanguageModule/constants.ts","../node_modules/@material-ui/icons/Error.js","../node_modules/@material-ui/core/esm/utils/useControlled.js","../node_modules/@material-ui/core/esm/FormControl/useFormControl.js","../node_modules/@material-ui/core/esm/utils/createChainedFunction.js","../node_modules/ats-framework/src/containers/Expansion/CountryFlag.tsx","../node_modules/use-context-selector/dist/index.js","../node_modules/ats-framework/src/pages/SeriesDetailPage/SeriesHeader/SeriesPublishStatus/MergeProductsDialog.tsx","../node_modules/@material-ui/icons/esm/Texture.js","../node_modules/@material-ui/icons/esm/AttachMoney.js","../node_modules/ats-framework/src/pages/SeriesDetailPage/SeriesHeader/SeriesPublishStatus/ConfirmDuplicateValuesDialog.tsx","../node_modules/ats-framework/src/pages/SeriesDetailPage/SeriesHeader/SeriesPublishStatus/index.tsx","../node_modules/ats-framework/src/pages/SeriesDetailPage/SeriesHeader/index.tsx","../node_modules/ats-framework/src/components/StatusChipPim/Component.tsx","../node_modules/ats-framework/src/models/Criteria/index.ts","../node_modules/ats-framework/src/components/DownloadView/selection.ts","../../../../../../../src/browser/web-vitals/lib/polyfills/interactionCountPolyfill.ts","../../../../src/browser/instrument.ts","../../../../../../src/browser/web-vitals/lib/bindReporter.ts","../../../../../../src/browser/web-vitals/lib/getActivationStart.ts","../../../../../../src/browser/web-vitals/lib/initMetric.ts","../../../../../../src/browser/web-vitals/lib/generateUniqueID.ts","../../../../../../src/browser/web-vitals/lib/observe.ts","../../../../../src/browser/web-vitals/getINP.ts","../../../../../src/browser/web-vitals/getLCP.ts","../../../../../src/browser/web-vitals/onTTFB.ts","../../../../../src/browser/web-vitals/getCLS.ts","../../../../../src/browser/web-vitals/getFID.ts","../node_modules/ats-framework/src/pages/SeriesDetailPage/WidgetWrapper.tsx","../node_modules/ats-framework/src/components/ProductAndPackageList/ProductsListFilter/Component.tsx","../node_modules/@material-ui/core/esm/Dialog/Dialog.js","../node_modules/@material-ui/core/esm/DialogContent/DialogContent.js","../node_modules/@material-ui/core/esm/withWidth/withWidth.js","../node_modules/@material-ui/core/esm/DialogContentText/DialogContentText.js","../node_modules/lodash/toPath.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/ats-framework/src/modules/ThemeModule/actions.ts","../node_modules/ats-framework/src/components/ControlledModal/index.tsx","../node_modules/ats-framework/src/components/DraftStatusChip/index.tsx","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/lodash/isFunction.js","../node_modules/@material-ui/core/esm/FormControl/formControlState.js","../node_modules/ats-framework/src/components/DrawerViewHeader/index.tsx","../node_modules/@material-ui/icons/PhoneEnabled.js","../node_modules/@material-ui/icons/LocalOffer.js","../node_modules/@material-ui/icons/RemoveCircle.js","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/NoOptionsMessage.tsx","../node_modules/ats-framework/src/modules/QuoteTemplateModule/selectors.ts","../node_modules/ats-framework/src/modules/QuoteTemplateModule/constants.ts","../node_modules/ats-framework/src/containers/Pagination/constants.ts","../../../src/string.ts","../node_modules/ats-framework/src/components/ButtonTab/index.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/actions.ts","../node_modules/@material-ui/core/esm/TextField/TextField.js","../../../src/status.ts","../node_modules/@material-ui/core/esm/DialogActions/DialogActions.js","../node_modules/lodash/_root.js","../node_modules/react-color/lib/helpers/color.js","../node_modules/ats-framework/src/contexts/StoreContext/index.tsx","../node_modules/ats-framework/src/modules/TaskModule/selectors.ts","../node_modules/ats-framework/src/containers/DataFieldSelect/index.tsx","../node_modules/@material-ui/core/esm/utils/debounce.js","../node_modules/@material-ui/icons/DragIndicator.js","../node_modules/ats-framework/src/utils/useFileSrc.tsx","../node_modules/ats-framework/src/components/BreadcrumbProjectSpecBar/index.tsx","../node_modules/ats-framework/src/utils/getContactDisplayText.ts","../node_modules/ats-framework/src/index.ts","../node_modules/ats-framework/src/components/FieldTextFieldDebounced/index.tsx","../node_modules/@material-ui/icons/VisibilityOffRounded.js","../../../src/integration.ts","../node_modules/@material-ui/core/esm/styles/createBreakpoints.js","../../../../src/utils/return-wrapper.ts","../node_modules/lodash/isObjectLike.js","../node_modules/@babel/runtime/helpers/interopRequireWildcard.js","../node_modules/core-js/library/modules/_an-object.js","../node_modules/core-js/library/modules/_descriptors.js","../node_modules/ats-framework/src/hoc/withUserPermissions/index.tsx","../node_modules/@emotion/css/dist/css.browser.esm.js","../node_modules/ats-framework/src/modules/DebugModule/actions.ts","../node_modules/@material-ui/icons/PeopleRounded.js","../node_modules/@material-ui/icons/PersonRounded.js","../node_modules/@material-ui/icons/MonetizationOn.js","../node_modules/@material-ui/icons/MoreVert.js","../node_modules/ats-framework/src/modules/ErrorModule/selectors.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/ats-framework/src/hoc/withSpecId/index.tsx","../../../../../../src/browser/web-vitals/lib/onHidden.ts","../node_modules/ats-framework/src/modules/AtsModule/constants.ts","../node_modules/@material-ui/core/esm/Table/Tablelvl2Context.js","../node_modules/@material-ui/icons/Star.js","../node_modules/@material-ui/icons/AttachMoney.js","../node_modules/@material-ui/icons/Publish.js","../node_modules/@material-ui/icons/Create.js","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/ImportSelectedDrawingsContext.tsx","../node_modules/ats-framework/src/pages/SpecDetail/layout/ViewContainer.tsx","../node_modules/ats-framework/src/containers/AttachmentFoldersPage/index.tsx","../node_modules/ats-framework/src/pages/FirmDetailPage/OfficesInfo/BrandTags/AddBrandTagDialog.tsx","../node_modules/@material-ui/icons/esm/Search.js","../node_modules/ats-framework/src/pages/FirmDetailPage/OfficesInfo/BrandTags/DeleteDialog.tsx","../node_modules/ats-framework/src/pages/FirmDetailPage/OfficesInfo/BrandTags/DeleteAllDialog.tsx","../node_modules/ats-framework/src/pages/FirmDetailPage/OfficesInfo/BrandTags/index.tsx","../node_modules/ats-framework/src/utils/downloadBlob.ts","../node_modules/ats-framework/src/components/BulkImportExport/CircularProgressWithLabels/index.tsx","../node_modules/ats-framework/src/components/BulkImportExport/DragAndDropWithLabels/index.tsx","../node_modules/ats-framework/src/components/BulkImportExport/Summary/index.tsx","../node_modules/ats-framework/src/containers/UserUploadStepperView/index.tsx","../node_modules/ats-framework/src/pages/UserUploadPage/Component.tsx","../node_modules/ats-framework/src/modules/AccountModule/saga.ts","../node_modules/@material-ui/core/esm/FormControl/FormControlContext.js","../node_modules/@material-ui/core/esm/List/ListContext.js","../node_modules/ats-framework/src/components/CollapsibleCard/index.tsx","../node_modules/ats-framework/src/modules/PackageModule/actions.ts","../node_modules/ats-framework/src/containers/PimSeriesListPage/PublishDialog/index.tsx","../node_modules/@material-ui/icons/Texture.js","../node_modules/@material-ui/icons/AddCircle.js","../node_modules/@material-ui/icons/Layers.js","../node_modules/ats-framework/src/containers/Forms/SignUpOrganizationForm/index.tsx","../node_modules/ats-framework/src/containers/CreateNewSpecModal/constants.ts","../node_modules/ats-framework/src/modules/ContactModule/actions.ts","../node_modules/ats-framework/src/hoc/withConfiguratorSeries/index.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/SeriesInfo/index.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/ProductNumberGenerator/index.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/exclusionAttributeOptions.ts","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/ExclusionDialog.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/WholeExclusionDialog.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/OptionDialog/SuffixAndPrices.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/OptionDialog/NewOptionDescriptionItem.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/OptionDialog/Component.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/Component.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/Options.tsx","../node_modules/ats-framework/src/pages/ProductConfiguratorPage/OptionsWidget/index.tsx","../node_modules/@pdf-lib/standard-fonts/es/utils.js","../node_modules/@pdf-lib/standard-fonts/es/Font.js","../node_modules/@pdf-lib/standard-fonts/es/Encoding.js","../node_modules/ats-framework/src/modules/QuoteModule/saga.ts","../../../src/time.ts","../node_modules/@material-ui/core/esm/Drawer/Drawer.js","../node_modules/redux-form/lib/structure/plain/index.js","../node_modules/core-js/library/modules/_object-dp.js","../node_modules/core-js/library/modules/_is-object.js","../node_modules/ats-framework/src/components/FieldListItemReactSelect/index.tsx","../node_modules/is-promise/index.js","../node_modules/react-select/dist/base/dist/react-select-a34e9d12.browser.esm.js","../node_modules/ats-framework/src/modules/ThemeModule/constants.ts","../node_modules/ats-framework/src/modules/SpecModule/saga.ts","../node_modules/ats-framework/src/containers/Expansion/SeriesPanel.tsx","../node_modules/ats-framework/src/containers/Expansion/AttributeItem.tsx","../node_modules/ats-framework/src/utils/shareLinkUtmParams.ts","../node_modules/ats-framework/src/images/WaterSense_logo.svg","../node_modules/ats-framework/src/components/CopyLinkButton/CopyLinkButton.tsx","../../../../src/tracing/dynamicSamplingContext.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/slicedToArray.js","../node_modules/@material-ui/icons/Update.js","../node_modules/ats-framework/src/containers/Forms/NewMasterModalForm/index.tsx","../node_modules/ats-framework/src/containers/PimAttributesListPage/_CustomCellRenderers/DropDownCell.tsx","../node_modules/ats-framework/src/modules/AccountModule/AccountServiceApi.ts","../node_modules/@material-ui/icons/KeyboardArrowUp.js","../node_modules/@material-ui/icons/KeyboardArrowDown.js","../node_modules/@material-ui/icons/Folder.js","../node_modules/ats-framework/src/containers/Forms/NewProjectKeyContactsForm/AddKeyContacts/index.ts","../node_modules/ats-framework/src/containers/Forms/NewProjectKeyContactsForm/KeyContactsAddedToProject/Component.tsx","../node_modules/ats-framework/src/containers/Forms/NewProjectKeyContactsForm/index.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../node_modules/ats-framework/src/modules/QuickTextModule/selectors.ts","../node_modules/ats-framework/src/modules/QuickTextModule/constants.ts","../node_modules/babel-runtime/helpers/objectWithoutProperties.js","../node_modules/babel-runtime/core-js/object/keys.js","../node_modules/ats-framework/src/containers/PimSeriesListPage/SeriesListFilter/index.tsx","../node_modules/lodash-es/_nodeUtil.js","../node_modules/ats-framework/src/components/ProjectDetailSpecDrawingProduct/index.tsx","../node_modules/ats-framework/src/components/SpecificationBookletBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/specBookletSample.png","../node_modules/ats-framework/src/components/SpecificationBookletBeta/LixilPrintSpecDetail/index.tsx","../node_modules/ats-framework/src/images/projectDetail/success.svg","../node_modules/ats-framework/src/components/SpecificationBookletBeta/UploadCoverDrawer/index.tsx","../node_modules/ats-framework/src/components/SpecificationBookletBeta/UserSearchInput/index.ts","../node_modules/ats-framework/src/components/SpecificationBookletBeta/ContactSearchInput/index.ts","../node_modules/moment-timezone/index.js","../node_modules/ats-framework/node_modules/react-sortable-hoc/dist/react-sortable-hoc.umd.js","../node_modules/@material-ui/styles/esm/withStyles/withStyles.js","../node_modules/@material-ui/core/esm/List/List.js","../node_modules/@material-ui/core/esm/Select/SelectInput.js","../node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js","../node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js","../node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js","../node_modules/@material-ui/core/esm/Select/Select.js","../node_modules/redux-form/lib/ReduxFormContext.js","../node_modules/@material-ui/core/esm/SvgIcon/index.js","../node_modules/core-js/library/modules/_to-iobject.js","../node_modules/pako/lib/utils/common.js","../node_modules/lodash/map.js","../node_modules/ats-framework/src/components/UserContactDrawerDetailsContact/index.tsx","../node_modules/ats-framework/src/components/UserContactDrawerDetails/index.tsx","../node_modules/ats-framework/src/containers/ThemeProvider/index.tsx","../node_modules/lodash/isEqualWith.js","../node_modules/ats-framework/src/modules/DebugModule/selectors.ts","../node_modules/ats-framework/src/hoc/withProjectId/index.tsx","../node_modules/@material-ui/icons/CheckCircleRounded.js","../node_modules/ats-framework/src/components/_CellRenderers/ActionButton/index.tsx","../node_modules/@material-ui/icons/ArrowForward.js","../node_modules/ats-framework/src/pages/FirmDetailPage/OfficesInfo/BrandTags/VirtualizedList.tsx","../node_modules/@material-ui/icons/Language.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../../../src/browser/web-vitals/lib/getNavigationEntry.ts","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/ats-framework/src/modules/ProjectModule/constants.ts","../node_modules/ats-framework/src/models/Task/index.ts","../node_modules/ats-framework/src/modules/ApplicationModule/constants.ts","../node_modules/ats-framework/src/modules/SpecModule/constants.ts","../node_modules/@material-ui/core/esm/styles/defaultTheme.js","../node_modules/@material-ui/core/esm/utils/ownerWindow.js","../node_modules/@material-ui/core/esm/utils/focusVisible.js","../node_modules/ats-framework/src/utils/uniqueId.ts","../node_modules/ats-framework/src/modules/LocationModule/constants.ts","../node_modules/ats-framework/src/components/WidgetMenuItem/index.tsx","../node_modules/ats-framework/src/modules/TaskModule/constants.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/DateFilterRenderer/validate.ts","../node_modules/ats-framework/src/modules/ProjectLocationModule/constants.ts","../node_modules/ats-framework/src/components/_FilterEditRenderer/AmountFilterRenderer/validate.ts","../node_modules/@material-ui/icons/Room.js","../node_modules/ats-framework/src/components/CrossReferenceTypesInfoPopup/Component.tsx","../node_modules/ats-framework/src/images/expansion/loadingFile.svg","../node_modules/@material-ui/icons/CancelRounded.js","../node_modules/@material-ui/icons/ApartmentRounded.js","../node_modules/@material-ui/icons/PhoneAndroid.js","../node_modules/ats-framework/src/modules/PimModule/constants.ts","../node_modules/ats-framework/src/utils/productSharing.ts","../node_modules/@material-ui/icons/ArrowDropDown.js","../node_modules/@material-ui/icons/ZoomIn.js","../node_modules/ats-framework/src/modules/MsAiService/AiService.ts","../node_modules/ats-framework/src/containers/CreateNewMasterModal/constants.ts","../node_modules/ats-framework/src/containers/Forms/NewProjectBuildingSelectionForm/index.tsx","../node_modules/ats-framework/src/components/CurrencySelector/index.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/NoAttributesFound.tsx","../node_modules/@material-ui/icons/Height.js","../node_modules/@material-ui/icons/Flag.js","../node_modules/@material-ui/icons/CloudDownload.js","../node_modules/pako/index.js","../node_modules/ats-framework/src/components/ResponsiveMenu/index.tsx","../node_modules/ats-framework/src/modules/NotificationModule/constants.ts","../node_modules/ats-framework/src/modules/ErrorModule/constants.ts","../node_modules/ats-framework/src/themes/base.ts","../node_modules/ats-framework/src/containers/CreateNewTemplateModal/constants.ts","../node_modules/ats-framework/src/modules/PrintModule/constants.ts","../node_modules/ats-framework/src/components/detailPageComponents/TopBar/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/Breadcrumbs/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/EmptySpec/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/Loading/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/SpecContext/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/DrawerBusyContext.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/ShareVendorQuoteUtil.ts","../node_modules/ats-framework/src/containers/ShareVendorQuote/ShareQuoteConstant.ts","../node_modules/ats-framework/src/containers/ShareVendorQuote/ShareVendorQuoteContextProvider.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/StepperBar.tsx","../node_modules/ats-framework/src/components/FileUpload/FileDropZone.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/AttachmentsAndComments.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/ApplyCustomerDiscount.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/BidInvitationListItem.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/BidInvitationList.tsx","../node_modules/ats-framework/src/containers/ShareVendorQuote/index.tsx","../node_modules/ats-framework/src/components/QuotePrint/utils.ts","../node_modules/ats-framework/src/components/QuotePrint/index.tsx","../node_modules/ats-framework/src/components/ShopDrawingPrint/index.tsx","../node_modules/@material-ui/icons/esm/CloudUpload.js","../node_modules/ats-framework/src/components/ShopDrawingPrint/ActionCell.tsx","../node_modules/@material-ui/icons/esm/Warning.js","../node_modules/ats-framework/src/components/ShopDrawingPrint/FileCell.tsx","../node_modules/ats-framework/src/containers/QuoteDownloadPreview/QuoteDownloadPreviewUtil.ts","../node_modules/ats-framework/src/components/QuoteEmailModal/QuoteEmailUtil.ts","../node_modules/ats-framework/src/components/QuoteEmailModal/QuoteEmailContext.tsx","../node_modules/ats-framework/src/components/QuoteEmailModal/SelectCustomersStep.tsx","../node_modules/ats-framework/src/images/printPage/DownloadLoading.gif","../node_modules/ats-framework/src/images/printPage/DownloadReady.svg","../node_modules/ats-framework/src/components/QuoteEmailModal/DownloadStep.tsx","../node_modules/ats-framework/src/modules/NotificationModule/NotificationServiceApi.ts","../node_modules/ats-framework/src/components/QuoteEmailModal/SendEmailForm.tsx","../node_modules/ats-framework/src/components/QuoteEmailModal/EmailSent.tsx","../node_modules/ats-framework/src/components/QuoteEmailModal/EmailError.tsx","../node_modules/ats-framework/src/components/QuoteEmailModal/index.tsx","../node_modules/ats-framework/src/pages/FirmDetailPage/EmailSetting/EmailSettingUtil.ts","../node_modules/ats-framework/src/components/DuplicateProductDialog/QuoteAddProductDuplicateDialog.tsx","../node_modules/ats-framework/src/components/SalesOrderModal/index.tsx","../node_modules/ats-framework/src/components/SpecToQuote/helpers/initQuoteFormFromSpecToQuoteDraft.ts","../node_modules/ats-framework/src/components/QuoteSectionTemplate/column.tsx","../node_modules/ats-framework/src/components/QuoteSectionTemplate/index.tsx","../node_modules/ats-framework/src/components/QuoteSectionComponents/index.tsx","../node_modules/ats-framework/src/components/QuoteCustomSectionComponents/CustomValue.tsx","../node_modules/ats-framework/src/components/QuoteCustomSectionComponents/CustomFormula.tsx","../node_modules/ats-framework/src/components/QuoteCustomSectionComponents/SectionCalculation.tsx","../node_modules/ats-framework/src/containers/QuoteTemplate/index.tsx","../node_modules/ats-framework/src/modules/QuoteConnectService/BidQuoteServiceApi.ts","../node_modules/ats-framework/src/containers/Quote/Quote.tsx","../node_modules/pdfjs-dist/legacy/build/pdf.worker.js","../node_modules/make-event-props/dist/esm/index.js","../node_modules/make-cancellable-promise/dist/esm/index.js","../node_modules/merge-class-names/dist/esm/index.js","../node_modules/react-pdf/dist/esm/DocumentContext.js","../node_modules/react-pdf/dist/esm/Message.js","../node_modules/react-pdf/dist/esm/LinkService.js","../node_modules/react-pdf/dist/esm/PasswordResponses.js","../node_modules/react-pdf/dist/esm/shared/utils.js","../node_modules/react-pdf/dist/esm/shared/propTypes.js","../node_modules/react-pdf/dist/esm/Document.js","../node_modules/react-pdf/dist/esm/OutlineContext.js","../node_modules/react-pdf/dist/esm/Ref.js","../node_modules/react-pdf/dist/esm/OutlineItem.js","../node_modules/react-pdf/dist/esm/Outline.js","../node_modules/merge-refs/dist/esm/index.js","../node_modules/react-pdf/dist/esm/PageContext.js","../node_modules/react-pdf/dist/esm/Page/PageCanvas.js","../node_modules/react-pdf/dist/esm/Page/PageSVG.js","../node_modules/react-pdf/dist/esm/Page/TextLayerItem.js","../node_modules/react-pdf/dist/esm/Page/TextLayer.js","../node_modules/react-pdf/dist/esm/Page/AnnotationLayer.js","../node_modules/react-pdf/dist/esm/Page.js","../node_modules/react-pdf/dist/esm/entry.webpack.js","../node_modules/ats-framework/src/components/PDFViewer/ZoomInMap.tsx","../node_modules/ats-framework/src/components/PDFViewer/loadPdfData.ts","../node_modules/ats-framework/src/components/PDFViewer/index.tsx","../node_modules/ats-framework/src/components/PDFModal/index.tsx","../node_modules/ats-framework/src/components/ProjectDetailSpecDrawing/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductGroupContent/ActionMenu/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductCard/AddAlternateButton/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductCard/AlternativeProductCard/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductCard/index.tsx","../node_modules/react-grid-dnd/esm/swap.js","../node_modules/react-grid-dnd/esm/helpers.js","../node_modules/react-grid-dnd/esm/GridContext.js","../node_modules/react-grid-dnd/esm/GridItemContext.js","../node_modules/react-grid-dnd/esm/GridDropZone.js","../node_modules/react-grid-dnd/esm/use-measure.js","../node_modules/react-gesture-responder/esm/mouse-enabled.js","../node_modules/react-gesture-responder/esm/index.js","../node_modules/react-grid-dnd/esm/GridItem.js","../node_modules/ats-framework/src/components/detailPageComponents/ProductGroupContent/Drawing/index.tsx","../node_modules/ats-framework/src/hooks/useIsOnScreen.ts","../node_modules/ats-framework/src/pages/SpecDetail/DraggableDrawing/index.tsx","../node_modules/ats-framework/src/pages/SpecDetail/DraggableListItem/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductGroupContent/index.tsx","../node_modules/ats-framework/src/utils/productCompliance.ts","../node_modules/ats-framework/src/containers/ProductSelection/PsychrometricsAnalysisModal/constants.ts","../node_modules/ats-framework/src/images/bariatricIcon.svg","../node_modules/ats-framework/src/images/childHeightIcon.svg","../node_modules/ats-framework/src/containers/ProductSelectionControl/BarrierFreeButton.tsx","../node_modules/ats-framework/src/containers/ProductSelection/CurvePreviewModal/index.ts","../node_modules/ats-framework/src/containers/ProductSelection/PipeFilterModal/index.ts","../node_modules/ats-framework/src/containers/Sizer/categoriesConstants.ts","../node_modules/ats-framework/src/constants/units.ts","../node_modules/ats-framework/src/containers/ProductSelection/VentilatorFilterModal/constants.ts","../node_modules/ats-framework/src/containers/ProductSelection/ventilatorToolConstants.ts","../node_modules/ats-framework/src/containers/ProductSelection/VentilatorFilterModal/Component.tsx","../node_modules/ats-framework/src/containers/ProductSelection/PsychrometricsAnalysisModal/CalculatedResult.tsx","../node_modules/ats-framework/src/containers/ProductSelection/PsychrometricsAnalysisModal/SeasonSection.tsx","../node_modules/ats-framework/src/containers/ProductSelection/PsychrometricsAnalysisModal/Component.tsx","../node_modules/ats-framework/src/containers/ProductSelectionControl/index.tsx","../node_modules/ats-framework/src/containers/Forms/NewSpecModalForm/index.tsx","../node_modules/ats-framework/src/containers/CreateNewSpecModal/index.tsx","../node_modules/ats-framework/src/components/QuoteConnect/FieldFilterUtil.ts","../node_modules/ats-framework/src/containers/AutoQuotationDashboard/BidInvitationUtil.ts","../node_modules/ats-framework/src/components/detailPageComponents/ProductGroupContent/SpecAssistButton/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ActionBar/index.tsx","../../../src/eventProcessors.ts","../node_modules/scheduler/index.js","../node_modules/ats-framework/src/components/UserOfficeDisplay/index.tsx","../node_modules/ats-framework/src/modules/QuoteTemplateModule/actions.ts","../node_modules/@material-ui/icons/UnfoldLess.js","../node_modules/ats-framework/src/modules/NoteModule/actions.ts","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/@emotion/serialize/dist/serialize.browser.esm.js","../node_modules/@material-ui/core/esm/SvgIcon/SvgIcon.js","../node_modules/@fortawesome/fontawesome-svg-core/index.es.js","../node_modules/ats-framework/src/components/ProductAndPackageList/productFilterUtils.ts","../node_modules/ats-framework/src/utils/specToQuote/index.ts","../node_modules/ats-framework/src/modules/ProductModule/callNewSearch.ts","../node_modules/ats-framework/src/images/projectDetail/trophy.svg","../node_modules/ats-framework/src/components/QuoteCustomersTable/index.tsx","../node_modules/ats-framework/src/components/PricingRequest/BidStatusBar.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/BidComponentUtil.tsx","../../../src/normalize.ts","../node_modules/@material-ui/core/esm/Divider/Divider.js","../node_modules/@material-ui/core/esm/FormControlLabel/FormControlLabel.js","../node_modules/@material-ui/core/esm/InputLabel/InputLabel.js","../node_modules/@material-ui/core/esm/ListItemText/ListItemText.js","../node_modules/lodash/isArrayLike.js","../node_modules/webpack/buildin/module.js","../node_modules/process/browser.js","../node_modules/lodash/_baseGetTag.js","../node_modules/redux-form/lib/util/validateComponentProp.js","../node_modules/lodash/_getNative.js","../node_modules/core-js/library/modules/_hide.js","../node_modules/core-js/library/modules/_has.js","../node_modules/ats-framework/src/utils/setUsetifulTags.ts","../node_modules/ats-framework/src/modules/ThemeModule/selectors.ts","../node_modules/ats-framework/src/utils/fetchWithDefaultHeadersAndToken/index.ts","../node_modules/ats-framework/src/reducers.ts","../node_modules/ats-framework/src/modules/DebugModule/constants.ts","../node_modules/@material-ui/icons/ArrowBack.js","../node_modules/ats-framework/src/components/Loading/index.tsx","../node_modules/ats-framework/src/images/loader.gif","../../../../src/utils/getRootSpan.ts","../node_modules/@material-ui/core/esm/InputBase/utils.js","../node_modules/ats-framework/src/components/MainMenuItem/index.tsx","../node_modules/ats-framework/src/components/DropdownContainer/index.tsx","../node_modules/@material-ui/icons/PeopleAltRounded.js","../node_modules/@material-ui/icons/Launch.js","../node_modules/ats-framework/src/modules/QuickTextModule/actions.ts","../node_modules/uuid/index.js","../node_modules/ats-framework/src/containers/Forms/NewMasterCollaboratorsForm/index.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/PimIntegrationDialog/index.tsx","../../../src/utils/unicode.ts","../../../src/scope.ts","../node_modules/is-in-browser/dist/module.js","../node_modules/ats-framework/src/containers/CrossReferenceStepper/constants.ts","../node_modules/@material-ui/icons/BugReport.js","../node_modules/ats-framework/src/components/TooltipTab/index.tsx","../node_modules/ats-framework/src/modules/PimModule/ProductSearchServiceApi.ts","../node_modules/ats-framework/src/modules/ProductModule/ProductSearchGatewayApi.ts","../node_modules/ats-framework/src/utils/parseFiltersAndOptions/index.tsx","../node_modules/ats-framework/src/models/Notification/index.ts","../node_modules/ats-framework/src/components/GuestEmailSubmissionModal/index.tsx","../node_modules/ats-framework/src/modules/PackageModule/selectors.ts","../node_modules/ats-framework/src/modules/PackageModule/constants.ts","../node_modules/ats-framework/src/containers/ProductSelection/CurvePreviewModal/Component.tsx","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@material-ui/core/esm/CardContent/CardContent.js","../node_modules/@material-ui/core/esm/TableRow/TableRow.js","../node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js","../node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@material-ui/core/esm/Checkbox/Checkbox.js","../node_modules/lodash/keys.js","../node_modules/webpack/buildin/harmony-module.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_toKey.js","../node_modules/core-js/library/modules/_ctx.js","../node_modules/core-js/library/modules/_fails.js","../node_modules/core-js/library/modules/_object-keys.js","../node_modules/core-js/library/modules/_to-object.js","../node_modules/core-js/library/modules/_iterators.js","../node_modules/ats-framework/src/containers/ErrorHandler/index.tsx","../node_modules/ats-framework/src/modules/NoteModule/selectors.ts","../node_modules/ats-framework/src/images/dashboard/alpha.svg","../node_modules/ats-framework/src/images/dashboard/beta.svg","../node_modules/ats-framework/src/images/ATSIcon-Colour.svg","../node_modules/ats-framework/src/images/logo/QuoteConnect_Mobile.svg","../node_modules/ats-framework/src/images/ats-project-tracker-white.svg","../node_modules/ats-framework/src/modules/NoteModule/constants.ts","../node_modules/ats-framework/src/images/notes.svg","../node_modules/ats-framework/src/components/NotesViewDrawerDetails/View/index.tsx","../node_modules/ats-framework/src/components/NotesViewDrawerDetails/Edit/index.tsx","../node_modules/ats-framework/src/components/NotesViewDrawerDetails/index.tsx","../node_modules/ats-framework/src/components/BidStatusViewDrawerDetails/index.tsx","../node_modules/ats-framework/src/containers/AppGlobalComponents/index.tsx","../node_modules/ats-framework/src/containers/LogInAsModal/index.tsx","../node_modules/ats-framework/src/components/LoginAsButtonDropdown/index.tsx","../node_modules/ats-framework/src/components/NotificationList/NotificationListItem/index.tsx","../node_modules/ats-framework/src/components/NotificationList/index.tsx","../node_modules/ats-framework/src/components/GuestLoginButton/index.tsx","../node_modules/ats-framework/src/components/GuestSignUpButton/index.tsx","../node_modules/ats-framework/src/components/TakeoffList/index.tsx","../node_modules/ats-framework/src/containers/AppMenu/index.tsx","../node_modules/ats-framework/src/components/TeamManagementUserEditDrawer/index.tsx","../node_modules/ats-framework/src/components/TeamManagementUserDrawer/View.tsx","../node_modules/ats-framework/src/components/TeamManagementUserDrawer/index.tsx","../node_modules/ats-framework/src/style/mixins.ts","../node_modules/ats-framework/src/style/index.ts","../node_modules/ats-framework/src/containers/LanguageProvider/i18n.ts","../node_modules/ats-framework/src/containers/LanguageProvider/index.tsx","../node_modules/ats-utils/src/isValidDate/index.js","../node_modules/lodash/mapValues.js","../node_modules/@date-io/moment/build/index.esm.js","../node_modules/ats-framework/src/components/AppStyle/index.tsx","../node_modules/ats-framework/src/components/DuplicateProductDialog/index.tsx","../node_modules/ats-framework/src/components/PaddedMessage/index.tsx","../node_modules/@material-ui/icons/Cancel.js","../../../../src/core/embedders/FileEmbedder.ts","../node_modules/ats-framework/src/components/InfoBar/index.tsx","../node_modules/@material-ui/lab/esm/internal/svg-icons/Star.js","../node_modules/@material-ui/lab/esm/Rating/Rating.js","../node_modules/ats-framework/src/components/CrossReferenceFeedback/index.tsx","../node_modules/ats-framework/src/containers/XrefExpansion/ExpansionItem.tsx","../node_modules/ats-framework/src/containers/XrefExpansion/index.tsx","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../../../../../src/browser/web-vitals/lib/getVisibilityWatcher.ts","../node_modules/ats-utils/src/isEmail/index.ts","../node_modules/ats-framework/src/containers/QuoteListPage/QuoteList/utils.ts","../node_modules/@material-ui/core/esm/internal/SwitchBase.js","../node_modules/@material-ui/icons/LockRounded.js","../node_modules/@material-ui/icons/ChevronLeftRounded.js","../node_modules/@material-ui/icons/ChevronRightRounded.js","../node_modules/@material-ui/icons/CalendarTodayRounded.js","../node_modules/react-autosuggest/dist/index.js","../node_modules/autosuggest-highlight/match/index.js","../node_modules/autosuggest-highlight/parse/index.js","../node_modules/@material-ui/icons/Build.js","../node_modules/ats-framework/src/images/undefined.png","../node_modules/@material-ui/icons/KeyboardArrowUpRounded.js","../node_modules/ats-framework/src/components/QuoteInfo/QuoteContactsForm.tsx","../node_modules/ats-framework/src/modules/QuoteConnectService/ImportPricingServiceApi.ts","../node_modules/ats-framework/src/images/project.svg","../node_modules/ats-framework/src/components/_CellRenderers/RegionCell/RegionFlags.tsx","../../src/timer.js","../../src/domHelpers.js","../../src/createGridComponent.js","../../src/createListComponent.js","../../src/VariableSizeList.js","../../src/FixedSizeList.js","../node_modules/ats-framework/src/hooks/useToggle.tsx","../node_modules/@material-ui/icons/Restore.js","../node_modules/@material-ui/icons/Link.js","../node_modules/ats-framework/src/components/QuoteProductConfigurator/index.tsx","../node_modules/@material-ui/icons/ListAltRounded.js","../node_modules/@material-ui/icons/VpnKeyRounded.js","../node_modules/ats-framework/src/containers/Forms/NewTemplateModalForm/index.tsx","../node_modules/ats-framework/src/images/barrierFreeIcon.svg","../node_modules/ats-framework/src/containers/SignUpFirstStep/index.tsx","../node_modules/ats-framework/src/images/login/ats_portal_graphic.svg","../node_modules/ats-framework/src/components/detailPageComponents/MoreVertButton/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/Header/index.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DefaultView/EmptyView/index.tsx","../node_modules/ats-framework/src/components/detailPageComponents/SortProductGroupsModal/index.tsx","../node_modules/ats-framework/src/components/BobrickCSIMasterSpecBeta/index.tsx","../node_modules/ats-framework/src/components/BobrickPlanningGuideBeta/index.tsx","../node_modules/redux-form/es/events/isEvent.js","../node_modules/redux-form/es/defaultShouldValidate.js","../node_modules/ats-framework/src/images/projectGreen.svg","../node_modules/ats-framework/src/containers/CreateNewProjectModal/CreationMethodSelector/index.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/CreationProgressModal.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/utils.ts","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/useExtraction.ts","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ProjectCardDropzone.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/SortableFileItem.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/DocumentTypeSelect.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ProjectCard.styles.ts","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/FileProgressBar.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ProjectCardUpload.tsx","../node_modules/@material-ui/core/esm/colors/amber.js","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ContactSearchField.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ExtractionReviewForm.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/ProjectCardReview.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/AiPath/index.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/index.tsx","../node_modules/ats-framework/src/containers/ProjectList/_CustomCellRenderers/AssignProjectToModal.tsx","../node_modules/ats-framework/src/containers/ProjectList/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/containers/ProjectList/ProjectHeaderTabs.tsx","../node_modules/ats-framework/src/containers/ProjectList/ProjectUtil.ts","../node_modules/ats-framework/src/containers/ProjectList/PricingRequest/PricingRequestFilter.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/DynamicColumn/TableDynamicHeader.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/SendPricingRequestsProjectTable.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/BidResponseProjectListTable.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/SendPricingRequestsProjectWidget.tsx","../node_modules/ats-framework/src/containers/ProjectList/PricingRequest/PricingRequestFilterChipsBar.tsx","../node_modules/ats-framework/src/containers/ProjectList/_CustomCellRenderers/ProjectSourceIcon.tsx","../node_modules/ats-framework/src/containers/ProjectList/_CustomCellRenderers/ProjectSourceCell.tsx","../node_modules/ats-framework/src/containers/ProjectList/_CustomCellRenderers/AssignedToCell.tsx","../node_modules/ats-framework/src/containers/ProjectList/index.tsx","../../../src/file.ts","../../../src/file-selector.ts","../node_modules/react-dropzone/dist/es/utils/index.js","../node_modules/react-dropzone/dist/es/index.js","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DefaultView/DropdownMenu/index.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DefaultView/NewDefaultView.tsx","../node_modules/ats-framework/src/components/ProjectDetail/DownloadWarningModal.tsx","../node_modules/ats-framework/src/components/ProjectDetail/ProjectContext/index.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DefaultView/index.tsx","../node_modules/ats-framework/src/components/IconButton/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/SpecSelector/iconButtons/EditButton.tsx","../node_modules/ats-framework/src/components/ProjectDetail/SpecSelector/iconButtons/DeleteButton.tsx","../node_modules/ats-framework/src/components/ProjectDetail/SpecSelector/ProductGroupTab.tsx","../node_modules/ats-framework/src/components/detailPageComponents/ProductGroupTabs/index.tsx","../node_modules/ats-framework/src/images/tasks.svg","../node_modules/ats-framework/src/components/TaskViewDrawerDetailsTask/index.tsx","../node_modules/ats-framework/src/components/TaskViewDrawerDetailsEdit/index.tsx","../node_modules/ats-framework/src/components/TaskViewDrawerDetails/index.tsx","../node_modules/@redux-saga/deferred/dist/redux-saga-deferred.esm.js","../node_modules/@redux-saga/core/dist/redux-saga-core.esm.js","../node_modules/redux-saga/dist/redux-saga-core-npm-proxy.esm.js","../node_modules/ats-framework/src/containers/CreateNewMasterFromTemplateModal/useStepper.tsx","../node_modules/ats-framework/src/containers/CreateNewMasterFromTemplateModal/Stepper/index.tsx","../node_modules/ats-framework/src/containers/CreateNewMasterFromTemplateModal/index.tsx","../node_modules/@material-ui/core/esm/CssBaseline/CssBaseline.js","../node_modules/ats-framework/src/components/ControlledDrawer/index.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/UnlistedAttributesWidget/UnlistedAttributes.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/UnlistedAttributesWidget/MandatoryRows.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/OptionsDialog/CutsheetUpload.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/OptionsDialog/CutsheetDisplay.tsx","../../../../src/utils/applyScopeDataToEvent.ts","../node_modules/ats-framework/src/models/CategoryDisplayTypeListItem/index.ts","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/ats-framework/src/components/ConsentModal/ConsentModalContent.tsx","../node_modules/@material-ui/core/esm/utils/isMuiElement.js","../../../src/global-scope.ts","../node_modules/ats-framework/src/components/FieldDatePickerV2/types.ts","../node_modules/ats-framework/src/modules/ListModule/constants.ts","../node_modules/ats-framework/src/components/UserContactDrawerDetailsContactEdit/index.tsx","../node_modules/ats-framework/src/modules/ProjectLocationModule/countryFilter.ts","../node_modules/ats-framework/src/pages/SeriesEditPage/FeaturesDialog/index.tsx","../node_modules/ats-framework/src/modules/PimModule/PimServiceApi.ts","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DownloadView/helpers.ts","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/ats-framework/src/components/QuoteContactsDropdown/index.tsx","../node_modules/ats-framework/src/hooks/useMinWidth.ts","../node_modules/@material-ui/core/esm/colors/grey.js","../node_modules/@material-ui/core/esm/Menu/Menu.js","../node_modules/react-ga4/dist/index.js","../node_modules/@material-ui/styles/esm/styled/styled.js","../node_modules/@material-ui/core/esm/Popper/Popper.js","../node_modules/@material-ui/core/esm/Collapse/Collapse.js","../node_modules/@material-ui/core/esm/NoSsr/NoSsr.js","../node_modules/@material-ui/core/esm/ButtonBase/Ripple.js","../node_modules/@material-ui/core/esm/ButtonBase/TouchRipple.js","../node_modules/@material-ui/core/esm/ButtonBase/ButtonBase.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_copyObject.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_baseAssign.js","../node_modules/lodash-es/_nativeKeysIn.js","../node_modules/lodash-es/_baseKeysIn.js","../node_modules/lodash-es/keysIn.js","../node_modules/lodash-es/_baseAssignIn.js","../node_modules/lodash-es/_copyArray.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_copySymbols.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/_getSymbolsIn.js","../node_modules/lodash-es/_copySymbolsIn.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_getAllKeysIn.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_initCloneArray.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/lodash-es/_cloneDataView.js","../node_modules/lodash-es/_cloneRegExp.js","../node_modules/lodash-es/_cloneSymbol.js","../node_modules/lodash-es/_cloneTypedArray.js","../node_modules/lodash-es/_initCloneByTag.js","../node_modules/lodash-es/_baseCreate.js","../node_modules/lodash-es/_initCloneObject.js","../node_modules/lodash-es/_baseIsMap.js","../node_modules/lodash-es/isMap.js","../node_modules/lodash-es/_baseIsSet.js","../node_modules/lodash-es/isSet.js","../node_modules/lodash-es/_baseClone.js","../node_modules/lodash-es/clone.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/toPath.js","../node_modules/lodash-es/cloneDeep.js","../../src/utils.ts","../../src/FormikContext.tsx","../../src/Formik.tsx","../../src/Field.tsx","../../src/connect.tsx","../../src/FieldArray.tsx","../../src/ErrorMessage.tsx","../node_modules/lodash/_copyObject.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isBuffer.js","../node_modules/redux-form/lib/util/prefixName.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/eq.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/keysIn.js","../node_modules/@material-ui/styles/esm/StylesProvider/index.js","../node_modules/core-js/library/modules/_property-desc.js","../node_modules/core-js/library/modules/_cof.js","../node_modules/core-js/library/modules/_library.js","../node_modules/core-js/library/modules/_object-pie.js","../node_modules/core-js/library/modules/es6.string.iterator.js","../node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js","../node_modules/ats-framework/src/contexts/WindowSizeContext/index.tsx","../node_modules/ats-framework/src/containers/Sizer/index.tsx","../node_modules/ats-framework/src/containers/BuildSizerModal/index.tsx","../node_modules/ats-framework/src/actions/index.ts","../node_modules/ats-framework/src/components/MainMenuItems/index.tsx","../node_modules/ats-framework/src/components/DebugStyle/index.tsx","../node_modules/ats-framework/src/components/MenuItemOverride/index.tsx","../node_modules/core-js/library/fn/object/assign.js","../node_modules/redux-form/es/defaultShouldError.js","../node_modules/redux-form/es/defaultShouldWarn.js","../node_modules/@emotion/stylis/dist/stylis.browser.esm.js","../node_modules/@emotion/cache/dist/cache.browser.esm.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/path-to-regexp/index.js","../node_modules/ats-framework/src/modules/AccountModule/types.ts","../node_modules/ats-framework/src/components/ConsentModal/UserConsentModal.tsx","../node_modules/ats-framework/src/configureStore.ts","../node_modules/@material-ui/core/esm/internal/svg-icons/KeyboardArrowLeft.js","../node_modules/@material-ui/core/esm/internal/svg-icons/KeyboardArrowRight.js","../node_modules/ats-framework/src/components/QuoteDetails/ProductSection.tsx","../node_modules/ats-framework/src/utils/includesIgnoreCase.ts","../node_modules/dom-helpers/util/scrollbarSize.js","../node_modules/@material-ui/icons/CheckBox.js","../node_modules/@material-ui/icons/RadioButtonChecked.js","../node_modules/ats-framework/src/containers/MasterList/MasterListFilter/index.tsx","../node_modules/ats-framework/src/containers/TemplateList/MasterTemplateFilter/index.tsx","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/DescriptionsListFilter/index.tsx","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/MediaUpload.tsx","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/FullMediaUpload.tsx","../node_modules/ats-framework/src/components/SpecToQuote/CreateAiXrefModal.tsx","../node_modules/ats-framework/src/components/SalesOrderModal/Component.tsx","../node_modules/ats-framework/src/containers/Forms/NewProjectCollaboratorsForm/index.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/constants.ts","../node_modules/ats-framework/src/modules/PimModule/mapNewSearchFirmProducts.ts","../node_modules/ats-framework/src/containers/RequestMasterModal/index.tsx","../node_modules/@material-ui/icons/ArrowForwardRounded.js","../node_modules/redux-form/es/ReduxFormContext.js","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/ProjectRow.tsx","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/AddToProject.tsx","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/SpecificationRow.tsx","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/AddToSpec.tsx","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/AddToMaster.tsx","../node_modules/ats-framework/src/containers/AddProductToDrawingModal/index.tsx","../node_modules/ats-framework/src/modules/AtsModule/reducer.ts","../node_modules/ats-framework/src/modules/AtsModule/AtsModuleDebug.tsx","../node_modules/ats-framework/src/modules/AtsModule/AtsModule.tsx","../node_modules/ats-framework/src/modules/AtsModule/index.ts","../node_modules/ats-framework/src/containers/ProductCategoryListComponent/index.tsx","../node_modules/ats-framework/src/utils/useImageSrc.tsx","../node_modules/ats-framework/src/containers/ProductCategorySelection/GuestPageHeader.tsx","../node_modules/ats-framework/src/containers/ProductCategorySelection/index.tsx","../node_modules/ats-framework/src/components/FieldMultiSelect/index.tsx","../node_modules/ats-framework/src/components/FieldMultiTextField/index.tsx","../node_modules/ats-framework/src/containers/Forms/NewProjectModalForm/index.tsx","../node_modules/ats-framework/src/images/printPage/quoteSample.png","../node_modules/ats-framework/src/components/QuotePrintFormat/ProductRow.tsx","../node_modules/ats-framework/src/components/QuotePrintFormat/index.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/OptionsDialog/DescriptionsFieldArray.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/OptionsDialog/index.tsx","../../../src/syncpromise.ts","../node_modules/@babel/runtime-corejs2/core-js/object/keys.js","../node_modules/babel-runtime/helpers/defineProperty.js","../node_modules/ats-framework/src/components/ProductAndPackageList/PackageListFilter/Component.tsx","../node_modules/ats-framework/src/components/ProductAndPackageList/ConfigListFilter/Component.tsx","../pdfjs-dist/web/pdf_viewer/webpack/universalModuleDefinition","../pdfjs-dist/web/pdf_viewer/web/default_factory.js","../pdfjs-dist/web/pdf_viewer/web/annotation_layer_builder.js","../pdfjs-dist/web/pdf_viewer/node_modules/@babel/runtime/regenerator/index.js","../pdfjs-dist/web/pdf_viewer/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../pdfjs-dist/web/pdf_viewer/web/pdfjs.js","../pdfjs-dist/web/pdf_viewer/web/l10n_utils.js","../pdfjs-dist/web/pdf_viewer/web/pdf_link_service.js","../pdfjs-dist/web/pdf_viewer/web/ui_utils.js","../pdfjs-dist/web/pdf_viewer/web/struct_tree_layer_builder.js","../pdfjs-dist/web/pdf_viewer/web/text_layer_builder.js","../pdfjs-dist/web/pdf_viewer/web/xfa_layer_builder.js","../pdfjs-dist/web/pdf_viewer/web/pdf_viewer.js","../pdfjs-dist/web/pdf_viewer/web/base_viewer.js","../pdfjs-dist/web/pdf_viewer/web/pdf_page_view.js","../pdfjs-dist/web/pdf_viewer/web/app_options.js","../pdfjs-dist/web/pdf_viewer/web/pdf_rendering_queue.js","../pdfjs-dist/web/pdf_viewer/web/text_highlighter.js","../pdfjs-dist/web/pdf_viewer/web/download_manager.js","../pdfjs-dist/web/pdf_viewer/web/event_utils.js","../pdfjs-dist/web/pdf_viewer/web/genericl10n.js","../pdfjs-dist/web/pdf_viewer/external/webL10n/l10n.js","../pdfjs-dist/web/pdf_viewer/web/pdf_find_controller.js","../pdfjs-dist/web/pdf_viewer/web/pdf_find_utils.js","../pdfjs-dist/web/pdf_viewer/web/pdf_history.js","../pdfjs-dist/web/pdf_viewer/web/pdf_scripting_manager.js","../pdfjs-dist/web/pdf_viewer/web/generic_scripting.js","../pdfjs-dist/web/pdf_viewer/webpack/bootstrap","../webpack:/pdfjs-dist/web/pdf_viewer/webpack/runtime/node module decorator","../pdfjs-dist/web/pdf_viewer/web/pdf_viewer.component.js","../node_modules/react-spring/web.js","../node_modules/@material-ui/styles/esm/useTheme/useTheme.js","../node_modules/@material-ui/core/esm/Card/Card.js","../node_modules/@material-ui/core/esm/LinearProgress/LinearProgress.js","../node_modules/@material-ui/lab/esm/internal/svg-icons/ArrowDropDown.js","../node_modules/@material-ui/lab/esm/Autocomplete/Autocomplete.js","../node_modules/ats-framework/src/containers/Dashboard/DashboardCanvas/DashboardCanvasWidget/LoadingSpinner/index.tsx","../node_modules/lodash/_isPrototype.js","../node_modules/ats-framework/src/utils/imageFileUrl/index.ts","../node_modules/ats-framework/src/components/InputButton/index.tsx","../node_modules/@material-ui/icons/Save.js","../node_modules/@material-ui/icons/OpenInNew.js","../node_modules/object-assign/index.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_castPath.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/identity.js","../node_modules/redux-react-local/lib/tree.js","../node_modules/connected-react-router/lib/actions.js","../node_modules/ats-framework/src/containers/Pagination/actions.ts","../node_modules/ats-framework/src/hoc/withForwardedRef/index.tsx","../node_modules/core-js/library/modules/_a-function.js","../node_modules/core-js/library/modules/_uid.js","../node_modules/core-js/library/modules/_set-to-string-tag.js","../node_modules/core-js/library/modules/web.dom.iterable.js","../node_modules/ats-framework/src/containers/PimAttributesListPage/TagPopper/index.tsx","../node_modules/react-draggable/build/cjs/utils/shims.js","../node_modules/@material-ui/icons/InsertDriveFile.js","../node_modules/ats-framework/src/components/DialogComponent/localReducer.ts","../node_modules/ats-framework/src/components/DialogComponent/index.tsx","../node_modules/@redux-saga/delay-p/dist/redux-saga-delay-p.esm.js","../node_modules/ats-utils/src/isPlainObject/index.ts","../node_modules/ats-utils/src/reduxClassActionMiddleware/index.ts","../node_modules/lodash/isNil.js","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgMaster/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgQuote/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgAtsLogo/index.tsx","../node_modules/ats-framework/src/images/quoteTakeoffRobot.svg","../node_modules/raf/index.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/react-input-autosize/lib/AutosizeInput.js","../node_modules/ats-framework/src/components/DiscontinuedProductsGuard/index.tsx","../node_modules/ats-framework/src/components/DiscontinuedProductsModal/index.tsx","../node_modules/ats-framework/src/components/ErrorBoundary/index.tsx","../node_modules/@material-ui/icons/BusinessCenter.js","../node_modules/@material-ui/icons/People.js","../node_modules/ats-framework/src/components/Tooltip/index.tsx","../node_modules/ats-framework/src/components/VsbRedirectDialog/index.tsx","../node_modules/ats-framework/src/components/GenericDrawer/index.tsx","../node_modules/ats-framework/src/containers/VirtualizedTable/index.ts","../node_modules/ats-framework/src/pages/AuthPages/LoginPage/Login/index.tsx","../node_modules/redux-form/es/SubmissionError.js","../node_modules/redux-form/es/defaultShouldAsyncValidate.js","../node_modules/ats-framework/src/modules/QuoteBuildingModule/actions.ts","../node_modules/ats-framework/src/modules/QuoteBuildingModule/selectors.ts","../node_modules/ats-framework/src/modules/QuoteBuildingModule/constants.ts","../node_modules/ats-framework/src/components/QuoteProjectInfo/index.tsx","../node_modules/ats-framework/src/components/ValidityDate/index.tsx","../node_modules/ats-framework/src/components/ShippingAddress/index.tsx","../node_modules/ats-framework/src/components/QuoteInfo/QuoteInfo.tsx","../node_modules/ats-framework/src/components/QuoteInfo/index.ts","../node_modules/ats-framework/src/hooks/useFocused.tsx","../node_modules/ats-framework/src/modules/QuoteModule/reducer.ts","../node_modules/ats-framework/src/components/CharCountAdornment/index.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/QuickEntry.tsx","../node_modules/ats-framework/src/components/QuoteTermsConditions/QuoteTermsConditions.tsx","../node_modules/ats-framework/src/components/QuoteTermsConditions/index.tsx","../node_modules/ats-framework/src/components/ChargeDiscountTaxEditor/ChargeDiscountTaxEditor.tsx","../node_modules/ats-framework/src/components/ChargeDiscountTaxEditor/index.ts","../node_modules/ats-framework/src/components/QuoteChargeDiscount/QuoteChargeDiscount.tsx","../node_modules/ats-framework/src/components/QuoteChargeDiscount/index.ts","../node_modules/ats-framework/src/components/QuoteForm/GrandTotals.tsx","../node_modules/@material-ui/icons/esm/Cancel.js","../node_modules/@material-ui/icons/esm/NavigateNext.js","../node_modules/ats-framework/src/components/FirmProductPackageAutocompleteOption/index.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/useStyles.ts","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/AC.tsx","../node_modules/ats-framework/src/containers/AutoQuotationBidDetail/BidInvitationUtil.ts","../node_modules/ats-framework/src/components/QuoteForm/ImportPricingStepper.tsx","../node_modules/ats-framework/src/components/QuoteForm/VendorQuotationsModalContentView.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/BulkEditDialog.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/BulkMoveDialog.tsx","../../src/utilities/restrictToBoundingRect.ts","../../src/restrictToParentElement.ts","../../src/restrictToVerticalAxis.ts","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/SortableItem.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/SortBySectionDialog.tsx","../node_modules/ats-framework/src/images/request_page.svg","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/BulkCopyDialog.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/BulkTemplateUpdateDialog.tsx","../node_modules/@material-ui/icons/esm/RemoveCircle.js","../node_modules/@material-ui/icons/esm/RemoveCircleOutline.js","../node_modules/ats-framework/src/components/DebouncedTextField/index.tsx","../node_modules/@material-ui/icons/esm/ChevronRight.js","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/ReusableMenu.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/SectionsMenu.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/ExpandIcon.tsx","../node_modules/ats-framework/src/components/SpecToQuote/interfaces.ts","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/SectionListCmponentUtil.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/CellThing.tsx","../node_modules/@material-ui/icons/esm/CompareArrows.js","../node_modules/@material-ui/icons/esm/ShuffleRounded.js","../node_modules/@material-ui/icons/esm/Widgets.js","../node_modules/@material-ui/icons/esm/NearMe.js","../node_modules/@material-ui/icons/esm/CancelOutlined.js","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/PricingComparison.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/ActionCell.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/RowThing.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/PresentationalRowThing.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/TestComp.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/hooks.ts","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/AddSection.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/Pagination.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/SectionListEdit.tsx","../node_modules/ats-framework/src/components/QuoteForm/SectionListEdit/DnDMenu.tsx","../node_modules/ats-framework/src/components/Prompt/index.tsx","../node_modules/ats-framework/src/components/QuoteForm/QuoteForm.tsx","../node_modules/ats-framework/src/components/QuoteForm/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/Component.tsx","../node_modules/ats-framework/src/components/ProductAndPackageList/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/components/ProductAndPackageList/ProductsListFilter/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/PackageListFilter/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/ConfigListFilter/index.ts","../node_modules/ats-framework/src/modules/ProductModule/ImageCreateApi.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/BulkImportExport/ExportFields/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/BulkImportExport/Loading/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/BulkImportExport/Summary/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/BulkImportExport/Conflict/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/BulkImportExport/DownloadTemplate/index.ts","../node_modules/@material-ui/icons/esm/InfoRounded.js","../node_modules/ats-framework/src/components/ProductAndPackageList/QCProductEditModal/index.ts","../node_modules/ats-framework/src/components/ProductAndPackageList/_CustomCellRenderers/CustomParentFirmProductActionButton.tsx","../node_modules/ats-framework/src/components/QuoteDetails/QuoteContactsPreview.tsx","../node_modules/ats-framework/src/components/QuoteDetails/QuoteInfo.tsx","../node_modules/ats-framework/src/components/QuoteDetails/ProductList.tsx","../node_modules/ats-framework/src/components/QuoteDetails/RevisionItemContent.tsx","../node_modules/ats-framework/src/components/QuoteDetails/ProjectInfo.tsx","../node_modules/ats-framework/src/containers/QuoteListPage/QuoteList/OpportunityValuesAndStatusDialog.tsx","../node_modules/ats-framework/src/components/QuoteDetails/QuoteDetails.tsx","../node_modules/ats-framework/src/components/QuoteDetails/index.ts","../node_modules/@material-ui/core/esm/CardActions/CardActions.js","../node_modules/ats-framework/src/images/printPage/lochinvarSubmittalSample.png","../node_modules/ats-framework/src/components/SpecificationBookletBeta/ContactCard/CardImage/index.tsx","../node_modules/ats-framework/src/components/SpecificationBookletBeta/ContactCard/CardContactInfo/index.tsx","../node_modules/ats-framework/src/components/LochinvarSubmittal/ContactSearchInput/index.ts","../node_modules/ats-framework/src/components/LochinvarSubmittal/index.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/index.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/CategoryFilter/index.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/_CustomCellRenderers/StatusCell.tsx","../node_modules/ats-framework/src/containers/PimSeriesListPage/DuplicateDialog/index.tsx","../node_modules/ats-framework/src/components/NestedMenu/atsSubMenu.tsx","../node_modules/ats-framework/src/components/NestedMenu/atsMenu.tsx","../node_modules/ats-framework/src/components/NestedMenu/index.ts","../node_modules/ats-framework/src/pages/NotFoundPage/index.ts","../node_modules/ats-framework/src/components/SettingsMenu/index.tsx","../node_modules/ats-framework/src/containers/ProjectSelector/ProjectSelector.tsx","../node_modules/ats-framework/src/containers/ProjectSelector/index.ts","../node_modules/ats-framework/src/components/StatusChip/StatusChip.tsx","../node_modules/ats-framework/src/components/StatusChip/index.ts","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../src/utils/prepareEvent.ts","../node_modules/i18next-browser-languagedetector/index.js","../node_modules/i18next-xhr-backend/index.js","../node_modules/ats-framework/src/utils/directApiEndpoint/index.ts","../node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js","../node_modules/@material-ui/styles/esm/ThemeProvider/nested.js","../node_modules/@material-ui/core/esm/styles/zIndex.js","../node_modules/@material-ui/core/esm/utils/getScrollbarSize.js","../node_modules/@material-ui/core/esm/RadioGroup/RadioGroupContext.js","../node_modules/hot-formula-parser/dist/formula-parser.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/@emotion/memoize/dist/memoize.browser.esm.js","../node_modules/@emotion/sheet/dist/sheet.browser.esm.js","../node_modules/react-select/dist/chunk-b36baf1a.browser.esm.js","../node_modules/ats-framework/src/modules/QuoteModule/QuoteServiceApi.ts","../node_modules/@material-ui/core/esm/Table/TableContext.js","../node_modules/ats-framework/src/hooks/useTogglePaper.tsx","../node_modules/@material-ui/lab/esm/internal/svg-icons/Close.js","../node_modules/@material-ui/core/esm/ExpansionPanel/ExpansionPanelContext.js","../node_modules/lodash.debounce/index.js","../node_modules/ats-framework/src/utils/copyToClipboard/index.ts","../node_modules/@material-ui/icons/Brush.js","../node_modules/ats-framework/src/components/CrossReferenceTypesInfoPopup/index.tsx","../node_modules/ats-framework/src/components/SpecToolXrefButton/index.tsx","../node_modules/ats-framework/src/components/SpecToQuote/tableCells/ImageCell.tsx","../node_modules/ats-framework/src/components/ScrollTop/index.ts","../node_modules/core-js/library/fn/object/set-prototype-of.js","../node_modules/ats-framework/src/components/QuoteCustomers/index.tsx","../node_modules/@material-ui/icons/FolderSharedRounded.js","../node_modules/@material-ui/icons/Note.js","../node_modules/@material-ui/icons/LocalShipping.js","../node_modules/@material-ui/icons/LibraryAdd.js","../node_modules/@material-ui/icons/MoneyOffRounded.js","../node_modules/ats-framework/src/components/DrawerExpandButton/index.tsx","../node_modules/@material-ui/icons/Remove.js","../node_modules/babel-runtime/core-js/object/assign.js","../node_modules/react-virtualized/dist/es/vendor/detectElementResize.js","../node_modules/ats-framework/src/hooks/useFileUploadByAny.tsx","../node_modules/@material-ui/icons/Cached.js","../node_modules/ats-framework/src/components/QuoteInfo/AssignedTo.tsx","../node_modules/ats-framework/src/hooks/useTightTooltip.ts","../node_modules/@material-ui/icons/Http.js","../node_modules/@material-ui/icons/AttachFileRounded.js","../node_modules/@material-ui/icons/NoteAdd.js","../node_modules/ats-framework/src/components/SuccessDrawer/SavedSuccessfully/index.ts","../node_modules/ats-framework/src/components/FilterList/index.ts","../node_modules/@material-ui/icons/ViewColumnRounded.js","../node_modules/ats-framework/src/images/productSelectionPage/mexicoFlag.png","../node_modules/@material-ui/icons/KeyboardArrowLeft.js","../node_modules/@material-ui/icons/KeyboardArrowRight.js","../node_modules/@material-ui/icons/ZoomOut.js","../node_modules/@material-ui/icons/Share.js","../node_modules/ats-framework/src/containers/PimSeriesListPage/_CustomCellRenderers/SeriesTypeCell.tsx","../node_modules/@material-ui/icons/ThumbUpAltRounded.js","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/EmptyWidgetContent/index.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/UnlistedAttributesWidget/RecommendedRows.tsx","../node_modules/@material-ui/icons/ArrowDownward.js","../node_modules/ats-framework/src/containers/PimDescriptionsListPage/DescriptionDialog/OptionFields.tsx","../node_modules/ats-framework/src/components/PrintDescriptionModal/index.ts","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/ProductNumberDialog.tsx","../node_modules/@material-ui/icons/InfoOutlined.js","../node_modules/ats-framework/src/components/PimProductDrawer/PimProductDrawerEdit/LinkItem.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/UnlistedAttributesWidget/index.tsx","../node_modules/@material-ui/icons/DiscFull.js","../node_modules/ats-framework/src/components/ImageViewer/index.tsx","../node_modules/@material-ui/icons/RadioButtonUnchecked.js","../node_modules/@material-ui/icons/LinkOff.js","../node_modules/@material-ui/icons/UnfoldMore.js","../node_modules/@material-ui/icons/ThumbUpAltOutlined.js","../node_modules/@material-ui/icons/ThumbDownAltOutlined.js","../node_modules/@material-ui/icons/Attachment.js","../node_modules/ats-framework/src/images/printPage/Error.svg","../node_modules/@material-ui/icons/ArrowLeft.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/isBuffer.js","../node_modules/@material-ui/icons/AssignmentTurnedIn.js","../node_modules/@material-ui/icons/AccountCircleRounded.js","../node_modules/@material-ui/icons/WatchLater.js","../node_modules/@material-ui/icons/NoteRounded.js","../node_modules/@material-ui/icons/QuestionAnswer.js","../node_modules/ats-framework/src/containers/CreateNewProjectFormStepper/selectors.ts","../node_modules/@material-ui/icons/FilterList.js","../node_modules/ats-framework/src/themes/whiteLoading.ts","../node_modules/@material-ui/icons/HomeWork.js","../node_modules/ats-framework/src/components/ConsentModal/index.tsx","../node_modules/@material-ui/icons/DoneAllRounded.js","../node_modules/ats-framework/src/pages/AuthPages/shared/SideDiv.tsx","../node_modules/ats-framework/src/hooks/useAppConfig.ts","../node_modules/ats-framework/src/pages/SpecDetail/DroppableDrawingList/DroppableDrawingList.tsx","../node_modules/ats-framework/src/images/printPage/revitSVG.svg","../node_modules/ats-framework/src/images/printPage/autocad-icon.svg","../node_modules/ats-framework/src/components/DownloadView/hooks/index.tsx","../node_modules/ats-framework/src/components/LixirBooklet/index.tsx","../../../../src/lib/get-bounding-rect.ts","../../../../src/lib/optimize-client-rects.ts","../../../../src/lib/get-client-rects.ts","../../../../src/lib/pdfjs-dom.ts","../../../../src/lib/get-area-as-png.ts","../../../../src/components/TipContainer.tsx","../../../../src/components/MouseSelection.tsx","../../../../src/lib/coordinates.ts","../../../../src/components/PdfHighlighter.tsx","../../../../src/components/Tip.tsx","../../../../src/components/Highlight.tsx","../../../../src/components/MouseMonitor.tsx","../../../../src/components/Popup.tsx","../node_modules/re-resizable/lib/resizer.js","../node_modules/re-resizable/lib/index.js","../node_modules/react-rnd/lib/index.js","../../../../src/components/AreaHighlight.tsx","../../../../src/components/PdfLoader.tsx","../node_modules/ats-framework/src/components/PDFEditorModal/types.ts","../node_modules/ats-framework/src/components/PDFEditorModal/utils.ts","../node_modules/ats-framework/src/components/PDFEditorModal/styles.ts","../node_modules/ats-framework/src/components/PDFEditorModal/OverlayLayer.tsx","../node_modules/ats-framework/src/components/PDFEditorModal/DrawLayer.tsx","../node_modules/ats-framework/src/components/PDFEditorModal/pdfGeneration.ts","../node_modules/ats-framework/src/components/PDFEditorModal/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/SearchField.tsx","../../node_modules/tslib/tslib.es6.js","../../node_modules/throttle-debounce/dist/index.esm.js","../node_modules/ats-framework/src/components/ProjectDetail/SpecMenu.tsx","../node_modules/ats-framework/src/components/ProjectDetail/Row.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/Drawing/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/CollapseTableRow.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/ImportSelectedDrawingsBar.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/tables/MasterTable.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/tabs/MasterTab.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/tables/TemplateTable.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/tabs/TemplateTab.tsx","../node_modules/ats-framework/src/components/ProjectDetail/TabContext/index.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/tabs/PinTab.tsx","../node_modules/ats-framework/src/components/ProjectDetail/MasterAndTemplateDrawer/index.jsx.tsx","../node_modules/ats-framework/src/images/printPage/revitDownloadSample.jpg","../node_modules/ats-framework/src/components/RevitFilesBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/cad-sample.jpg","../node_modules/ats-framework/src/components/AutoCadFilesBeta/index.tsx","../node_modules/ats-framework/src/components/WattsCSIBeta/index.tsx","../node_modules/ats-framework/src/components/DownloadView/GridFileName.tsx","../node_modules/ats-framework/src/components/DownloadView/LoadingScreen.tsx","../node_modules/ats-framework/src/components/DownloadView/index.tsx","../node_modules/ats-framework/src/containers/Forms/TemplateSelectionForm/ProductsContainer.tsx","../node_modules/ats-framework/src/containers/Forms/TemplateSelectionForm/Drawing.tsx","../node_modules/ats-framework/src/containers/Forms/TemplateSelectionForm/Modal.tsx","../node_modules/ats-framework/src/containers/Forms/TemplateSelectionForm/TemplateSelectionTable.tsx","../node_modules/ats-framework/src/containers/Forms/TemplateSelectionForm/index.tsx","../node_modules/ats-framework/src/images/printPage/submittalSample.png","../node_modules/ats-framework/src/components/SubmittalBeta/ContactSearchInput/index.ts","../node_modules/ats-framework/src/components/SubmittalBeta/ContactCard/index.tsx","../node_modules/ats-framework/src/components/SubmittalBeta/index.tsx","../node_modules/ats-framework/src/containers/ProjectAndTestProjectList/Component.tsx","../node_modules/ats-framework/src/containers/ProjectAndTestProjectList/ProjectListFilter/index.tsx","../node_modules/ats-framework/src/containers/ProjectAndTestProjectList/_CustomCellRenderers/CustomProjectActionButton.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/FeaturesWidget/FeatureRows.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/FeaturesWidget/Features.tsx","../node_modules/ats-framework/src/pages/SeriesEditPage/Attributes/FeaturesWidget/index.tsx","../../../src/stacktrace.ts","../node_modules/ats-framework/src/components/QuoteDiscountsTabs/ManufacturerDiscountsTab.tsx","../node_modules/ats-framework/src/components/QuoteDiscountsTabs/index.tsx","../node_modules/ats-framework/src/components/QuoteGrandTotal/QuoteGrandTotal.tsx","../node_modules/ats-framework/src/components/QuoteGrandTotal/index.ts","../node_modules/ats-framework/src/utils/buildUserSearchFilters.ts","../node_modules/ats-framework/src/hooks/useAssignableUserSearch.ts","../node_modules/redux-form/es/hasError.js","../node_modules/redux-form/es/selectors/isValid.js","../node_modules/ats-framework/src/pages/SpecDetail/buttons/TooltipButton.tsx","../node_modules/ats-framework/src/components/detailPageComponents/DownloadSpecBookletButton/index.tsx","../node_modules/ats-framework/src/images/printPage/productBrochureSample.jpg","../node_modules/ats-framework/src/components/ProductBrochureBeta/index.tsx","../node_modules/ats-framework/src/components/SpecificationBookletBeta/SelectableCard/index.tsx","../node_modules/ats-framework/src/components/SpecificationBookletBeta/CoverImageComp/index.tsx","../node_modules/ats-framework/src/images/printPage/scheduleSample.jpg","../node_modules/ats-framework/src/components/ScheduleBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/longSpecSample.jpg","../node_modules/ats-framework/src/components/LongSpecBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/shortSpecSample.jpg","../node_modules/ats-framework/src/components/ShortSpecBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/manufacturerSpecSheetSample.jpg","../node_modules/ats-framework/src/components/ManufacturerSpecSheetBeta/index.tsx","../node_modules/ats-framework/src/images/printPage/CSISample.jpg","../node_modules/ats-framework/src/components/CSIFormattedSpecs/index.tsx","../../../src/dsn.ts","../node_modules/@material-ui/core/esm/colors/red.js","../node_modules/@material-ui/core/esm/colors/green.js","../node_modules/@material-ui/icons/UnfoldMoreRounded.js","../node_modules/@material-ui/icons/ImportExport.js","../node_modules/react-fast-compare/index.js","../node_modules/deepmerge/dist/cjs.js","../node_modules/redux-form/es/util/isHotReloading.js","../node_modules/ats-api/src/utils/fetchWithDefaultHeaders/index.js","../node_modules/ats-api/src/classes/Api/endpointData.js","../node_modules/ats-api/src/classes/SwaggerParser/index.ts","../node_modules/ats-api/src/classes/Api/index.ts","../node_modules/ats-api/src/index.ts","../node_modules/@material-ui/core/esm/Input/Input.js","../node_modules/@material-ui/core/esm/Popover/Popover.js","../node_modules/@material-ui/core/esm/ListItemIcon/ListItemIcon.js","../node_modules/@material-ui/core/esm/InputAdornment/InputAdornment.js","../node_modules/@material-ui/core/esm/Switch/Switch.js","../node_modules/@material-ui/icons/esm/Delete.js","../node_modules/@material-ui/core/esm/Modal/ModalManager.js","../node_modules/@material-ui/core/esm/Modal/TrapFocus.js","../node_modules/@material-ui/core/esm/Modal/SimpleBackdrop.js","../node_modules/@material-ui/core/esm/Modal/Modal.js","../node_modules/lodash/_assignValue.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/lodash/isLength.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/qs/lib/utils.js","../node_modules/redux-form/lib/actionTypes.js","../node_modules/redux-form/lib/events/isEvent.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_baseGet.js","../node_modules/lodash/_isKey.js","../node_modules/lodash/_baseForOwn.js","../node_modules/redux-form/lib/selectors/isValid.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/lodash/_getPrototype.js","../node_modules/react-autowhatever/dist/compareObjects.js","../node_modules/core-js/library/modules/_dom-create.js","../node_modules/core-js/library/modules/_to-primitive.js","../node_modules/core-js/library/modules/_object-create.js","../node_modules/core-js/library/modules/_defined.js","../node_modules/core-js/library/modules/_to-length.js","../node_modules/core-js/library/modules/_to-integer.js","../node_modules/core-js/library/modules/_shared-key.js","../node_modules/core-js/library/modules/_shared.js","../node_modules/core-js/library/modules/_enum-bug-keys.js","../node_modules/core-js/library/modules/_object-gopd.js","../node_modules/core-js/library/modules/_object-gops.js","../node_modules/core-js/library/modules/_object-sap.js","../node_modules/core-js/library/modules/_wks-ext.js","../node_modules/core-js/library/modules/_wks-define.js","../node_modules/core-js/library/modules/_classof.js","../node_modules/core-js/library/modules/core.get-iterator-method.js","../node_modules/core-js/library/modules/_new-promise-capability.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/react-draggable/build/cjs/utils/domFns.js","../node_modules/pako/lib/zlib/messages.js","../node_modules/lodash/forOwn.js","../node_modules/react-color/lib/components/common/Checkboard.js","../node_modules/ats-framework/src/components/SpecificationBookletBeta/ContactCard/Component.tsx","../node_modules/es6-error/es6/index.js","../node_modules/core-js/library/fn/object/create.js","../node_modules/ats-framework/src/components/UserContactDrawerDetailsContactEdit/VirtualizedList/index.tsx","../node_modules/redux-auth-wrapper/history4/locationHelper.js","../node_modules/@material-ui/icons/Block.js","../node_modules/@material-ui/icons/Assignment.js","../node_modules/redux-form/es/createFieldProps.js","../node_modules/redux-form/es/events/getValue.js","../node_modules/redux-form/es/isReactNative.js","../node_modules/redux-form/es/events/onChangeValue.js","../node_modules/redux-form/es/util/eventConsts.js","../node_modules/redux-form/es/util/validateComponentProp.js","../node_modules/redux-form/es/ConnectedField.js","../node_modules/redux-form/es/util/shallowCompare.js","../node_modules/redux-form/es/util/prefixName.js","../node_modules/redux-form/es/createField.js","../node_modules/redux-form/es/Field.js","../node_modules/redux-form/es/handleSubmit.js","../node_modules/redux-form/es/asyncValidation.js","../node_modules/redux-form/es/events/silenceEvent.js","../node_modules/redux-form/es/events/silenceEvents.js","../node_modules/redux-form/es/generateValidator.js","../node_modules/redux-form/es/util/getDisplayName.js","../node_modules/redux-form/es/createReduxForm.js","../node_modules/redux-form/es/reduxForm.js","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/NoImagePlaceholder.tsx","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/DeleteButton.tsx","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/EditButton.tsx","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/FullName.tsx","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/CollaboratorsCheckBox.tsx","../node_modules/ats-framework/src/components/_VirtualizedTableRenderers/LogInAsModalCell.tsx","../node_modules/ats-framework/src/containers/VirtualizedTable/VirtualizedTable.tsx","../../../src/baggage.ts","../node_modules/symbol-observable/es/index.js","../stylis.js","../../../src/analytics-connector.ts","../node_modules/@babel/runtime-corejs2/core-js/date/now.js","../node_modules/@babel/runtime-corejs2/core-js/object/assign.js","../node_modules/@material-ui/icons/ShowChart.js","../node_modules/@material-ui/icons/Message.js","../node_modules/@material-ui/icons/Repeat.js","../node_modules/@material-ui/icons/AddBoxRounded.js","../node_modules/@material-ui/icons/Straighten.js","../node_modules/redux-auth-wrapper/history4/redirect.js","../node_modules/@material-ui/icons/KeyboardArrowRightRounded.js","../node_modules/ats-framework/src/containers/QuickSpecList/index.ts","../node_modules/@material-ui/icons/LayersRounded.js","../node_modules/@material-ui/core/esm/styles/createMixins.js","../node_modules/@material-ui/core/esm/colors/common.js","../node_modules/@material-ui/core/esm/colors/indigo.js","../node_modules/@material-ui/core/esm/colors/pink.js","../node_modules/@material-ui/core/esm/colors/orange.js","../node_modules/@material-ui/core/esm/colors/blue.js","../node_modules/@material-ui/core/esm/styles/createPalette.js","../node_modules/@material-ui/core/esm/styles/createTypography.js","../node_modules/@material-ui/core/esm/styles/shadows.js","../node_modules/@material-ui/core/esm/styles/shape.js","../node_modules/@material-ui/core/esm/styles/createSpacing.js","../node_modules/@material-ui/core/esm/styles/createMuiTheme.js","../node_modules/ats-framework/src/modules/ThemeModule/reducer.ts","../node_modules/ats-framework/src/modules/ThemeModule/ThemeModule.tsx","../node_modules/ats-framework/src/modules/ThemeModule/index.ts","../node_modules/ats-framework/src/components/CustomizedSnackbar/Component.tsx","../node_modules/ats-framework/src/components/CustomizedSnackbar/ErpContent.tsx","../node_modules/ats-framework/src/components/CustomizedSnackbar/PricingUpdateError.tsx","../node_modules/ats-framework/src/containers/TemplateList/_CustomCellRenderers/CustomActionButtonForTemplate.tsx","../node_modules/ats-framework/src/containers/TemplateList/index.tsx","../node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js","../node_modules/@material-ui/core/esm/Fade/Fade.js","../node_modules/@material-ui/core/esm/Backdrop/Backdrop.js","../node_modules/@material-ui/core/esm/Grow/Grow.js","../node_modules/@material-ui/core/esm/DialogTitle/DialogTitle.js","../node_modules/@material-ui/core/esm/Toolbar/Toolbar.js","../node_modules/@material-ui/core/esm/AppBar/AppBar.js","../node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js","../node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js","../node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js","../node_modules/hyphenate-style-name/index.js","../node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js","../node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js","../node_modules/css-vendor/dist/css-vendor.esm.js","../node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js","../node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js","../node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js","../node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonUnchecked.js","../node_modules/@material-ui/core/esm/internal/svg-icons/RadioButtonChecked.js","../node_modules/@material-ui/core/esm/Radio/RadioButtonIcon.js","../node_modules/@material-ui/core/esm/Radio/Radio.js","../node_modules/@material-ui/core/esm/RadioGroup/useRadioGroup.js","../node_modules/@material-ui/core/esm/internal/svg-icons/MoreHoriz.js","../node_modules/@material-ui/core/esm/Breadcrumbs/BreadcrumbCollapsed.js","../node_modules/@material-ui/core/esm/Breadcrumbs/Breadcrumbs.js","../node_modules/@material-ui/core/esm/Hidden/HiddenJs.js","../node_modules/@material-ui/core/esm/Hidden/HiddenCss.js","../node_modules/@material-ui/core/esm/Hidden/Hidden.js","../node_modules/@material-ui/core/esm/internal/svg-icons/Person.js","../node_modules/@material-ui/core/esm/Avatar/Avatar.js","../node_modules/@material-ui/core/esm/internal/svg-icons/Cancel.js","../node_modules/@material-ui/core/esm/Chip/Chip.js","../node_modules/ats-framework/src/components/Formik/defaultComponents/TextField.tsx","../node_modules/lodash/_baseIteratee.js","../node_modules/ats-framework/src/components/TableContainer/ListTableCell/index.tsx","../node_modules/ats-framework/src/containers/MyContactsPage/AvatarOrLogo/index.ts","../node_modules/react-draggable/build/cjs/cjs.js","../node_modules/lodash/debounce.js","../node_modules/ats-framework/src/containers/Dashboard/DashboardCanvas/DashboardCanvasWidget/index.ts","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/BidInvitationsWidget/BidInvitationWidgetUtil.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgDashboardEditLayout/index.tsx","../node_modules/ats-framework/src/utils/generateLinkParams/index.ts","../node_modules/ats-framework/src/utils/fetchAppVersion/index.ts","../node_modules/ats-framework/src/components/TableContainer/EnhancedTableHead/index.ts","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/index.ts","../node_modules/ats-framework/src/components/TablePaginationActions/index.ts","../node_modules/ats-framework/src/components/TableContainer/index.ts","../node_modules/ats-framework/src/containers/Dashboard/DashboardCanvas/index.ts","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/index.ts","../../src/resize-detector.js","../../src/with-size.js","../../src/component.js","../../src/index.js","../node_modules/ats-framework/src/components/TeamManagementOfficeDrawer/Content.tsx","../node_modules/ats-framework/src/components/TeamManagementOfficeDrawer/index.tsx","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/isarray/index.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_overArg.js","../node_modules/qs/lib/formats.js","../node_modules/uuid/lib/rng-browser.js","../node_modules/uuid/lib/bytesToUuid.js","../node_modules/redux-form/lib/actions.js","../node_modules/redux-form/lib/defaultShouldAsyncValidate.js","../node_modules/redux-form/lib/defaultShouldValidate.js","../node_modules/redux-form/lib/defaultShouldError.js","../node_modules/redux-form/lib/defaultShouldWarn.js","../node_modules/redux-form/lib/SubmissionError.js","../node_modules/redux-form/lib/createFieldProps.js","../node_modules/redux-form/lib/events/onChangeValue.js","../node_modules/redux-form/lib/isReactNative.js","../node_modules/redux-form/lib/structure/plain/getIn.js","../node_modules/lodash/_stringToPath.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/toString.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/stubArray.js","../node_modules/redux-form/lib/structure/plain/keys.js","../node_modules/redux-form/lib/util/shallowCompare.js","../node_modules/lodash/get.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/hasIn.js","../node_modules/redux-form/lib/selectors/isPristine.js","../node_modules/lodash/_assignMergeValue.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/_safeGet.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_setToString.js","../node_modules/redux-form/lib/events/silenceEvent.js","../node_modules/@material-ui/utils/esm/deepmerge.js","../node_modules/whatwg-fetch/fetch.js","../../../src/utilities/getStateName.js","../node_modules/redux-react-local/lib/actions.js","../node_modules/connected-react-router/lib/selectors.js","../node_modules/ats-framework/src/components/_FilterEditRenderer/TextFilterRenderer/validate.ts","../node_modules/ats-framework/src/components/FieldAutocomplete/AtsAutocomplete.tsx","../node_modules/ats-framework/src/containers/Pagination/localReducer.ts","../node_modules/core-js/library/modules/_ie8-dom-define.js","../node_modules/core-js/library/modules/_object-keys-internal.js","../node_modules/core-js/library/modules/_iobject.js","../node_modules/core-js/library/modules/_html.js","../node_modules/core-js/library/fn/object/keys.js","../node_modules/core-js/library/modules/_object-gpo.js","../node_modules/babel-runtime/core-js/object/define-property.js","../node_modules/babel-runtime/helpers/typeof.js","../node_modules/core-js/library/modules/_iter-define.js","../node_modules/core-js/library/modules/_redefine.js","../node_modules/core-js/library/modules/_object-gopn.js","../node_modules/core-js/library/modules/_iter-call.js","../node_modules/core-js/library/modules/_is-array-iter.js","../node_modules/core-js/library/modules/_species-constructor.js","../node_modules/core-js/library/modules/_task.js","../node_modules/core-js/library/modules/_perform.js","../node_modules/core-js/library/modules/_promise-resolve.js","../node_modules/core-js/library/modules/_iter-detect.js","../node_modules/ats-framework/src/components/QuoteForm/ProductSearchDropdown.tsx","../node_modules/@material-ui/icons/StorageRounded.js","../node_modules/@material-ui/icons/Lock.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/objectSpread2.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/slicedToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/createClass.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/createSuper.js","../node_modules/react-draggable/build/cjs/utils/positionFns.js","../node_modules/react-draggable/build/cjs/utils/log.js","../node_modules/pako/lib/zlib/adler32.js","../node_modules/pako/lib/zlib/crc32.js","../node_modules/pako/lib/utils/strings.js","../node_modules/pako/lib/zlib/zstream.js","../node_modules/pako/lib/zlib/constants.js","../node_modules/lodash/_castFunction.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_arrayEach.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/react-color/lib/components/common/ColorWrap.js","../node_modules/material-colors/dist/colors.es2015.js","../node_modules/@material-ui/icons/Settings.js","../node_modules/redux-form/es/isValid.js","../node_modules/ats-framework/src/selectors.ts","../node_modules/ats-framework/src/containers/AppWrapper/index.tsx","../node_modules/warning/browser.js","../node_modules/element-resize-detector/src/collection-utils.js","../node_modules/element-resize-detector/src/browser-detector.js","../node_modules/bowser/es5.js","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/BidResponseTable.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/BidResponseMenu.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/widget/BidStatusSummaryBar.tsx","../node_modules/ats-framework/src/containers/AutoQuotationBidDetail/DeclineDialog.tsx","../../../src/api/rotations.ts","../../../src/api/objects.ts","../../../src/api/operators.ts","../../../src/api/colors.ts","../../../../src/api/text/alignment.ts","../../../src/api/svgPath.ts","../../../src/api/operations.ts","../../../src/api/errors.ts","../../../../src/api/text/layout.ts","../../../../src/api/image/alignment.ts","../../../../src/api/form/appearances.ts","../../../src/api/PDFEmbeddedPage.ts","../../../src/api/PDFFont.ts","../../../src/api/PDFImage.ts","../../../../src/api/form/PDFField.ts","../../../src/api/StandardFonts.ts","../../../../src/api/form/PDFCheckBox.ts","../../../../src/api/form/PDFDropdown.ts","../../../../src/api/form/PDFOptionList.ts","../../../../src/api/form/PDFRadioGroup.ts","../../../../src/api/form/PDFSignature.ts","../../../../src/api/form/PDFTextField.ts","../../../../src/api/form/PDFForm.ts","../../../src/api/PDFDocumentOptions.ts","../../../src/api/sizes.ts","../../../src/api/PDFPageOptions.ts","../../../src/api/PDFEmbeddedFile.ts","../../../src/api/PDFJavaScript.ts","../../../../src/core/embedders/JavaScriptEmbedder.ts","../../../src/api/PDFDocument.ts","../../../src/api/PDFPage.ts","../../../../src/api/form/PDFButton.ts","../node_modules/ats-framework/src/themes/lightDefault.ts","../node_modules/ats-framework/src/themes/index.ts","../node_modules/ats-framework/src/components/TakeoffDrawerView/index.tsx","../node_modules/ats-framework/src/components/TakeoffDrawer/index.tsx","../../../src/browser.ts","../../../src/memo.ts","../../../src/supports.ts","../../../src/error.ts","../../../src/envelope.ts","../../../src/env.ts","../../../src/api.ts","../../../src/node.ts","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/html-parse-stringify2/index.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/lodash/conformsTo.js","../node_modules/qs/lib/index.js","../node_modules/mini-create-react-context/dist/esm/index.js","../node_modules/stylis-rule-sheet/index.js","../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../../../src/utils/isBrowser.js","../../../src/utils/debounce.js","../../../src/utils/isFunction.js","../../../src/utils/getStyleComputedProperty.js","../../../src/utils/getParentNode.js","../../../src/utils/getScrollParent.js","../../../src/utils/getReferenceNode.js","../../../src/utils/isIE.js","../../../src/utils/getOffsetParent.js","../../../src/utils/getRoot.js","../../../src/utils/findCommonOffsetParent.js","../../../src/utils/isOffsetContainer.js","../../../src/utils/getScroll.js","../../../src/utils/includeScroll.js","../../../src/utils/getBordersSize.js","../../../src/utils/getWindowSizes.js","../../../src/utils/getClientRect.js","../../../src/utils/getBoundingClientRect.js","../../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../../src/utils/isFixed.js","../../../src/utils/getFixedPositionOffsetParent.js","../../../src/utils/getBoundaries.js","../../../src/utils/computeAutoPlacement.js","../../../src/utils/getReferenceOffsets.js","../../../src/utils/getOuterSizes.js","../../../src/utils/getOppositePlacement.js","../../../src/utils/getPopperOffsets.js","../../../src/utils/find.js","../../../src/utils/runModifiers.js","../../../src/utils/findIndex.js","../../../src/methods/update.js","../../../src/utils/isModifierEnabled.js","../../../src/utils/getSupportedPropertyName.js","../../../src/methods/destroy.js","../../../src/utils/getWindow.js","../../../src/utils/setupEventListeners.js","../../../src/methods/enableEventListeners.js","../../../src/methods/disableEventListeners.js","../../../src/utils/removeEventListeners.js","../../../src/utils/isNumeric.js","../../../src/utils/setStyles.js","../../../src/modifiers/computeStyle.js","../../../src/utils/isModifierRequired.js","../../../src/methods/placements.js","../../../src/utils/clockwise.js","../../../src/modifiers/flip.js","../../../src/modifiers/offset.js","../../../src/modifiers/index.js","../../../src/modifiers/shift.js","../../../src/modifiers/preventOverflow.js","../../../src/modifiers/keepTogether.js","../../../src/modifiers/arrow.js","../../../src/utils/getOppositeVariation.js","../../../src/modifiers/inner.js","../../../src/modifiers/hide.js","../../../src/utils/getRoundedOffsets.js","../../../src/modifiers/applyStyle.js","../../../src/utils/setAttributes.js","../../../src/methods/defaults.js","../../../src/index.js","../node_modules/fuse.js/dist/fuse.js","../node_modules/lodash/pick.js","../node_modules/@material-ui/icons/Dashboard.js","../node_modules/@material-ui/icons/Dns.js","../node_modules/@material-ui/icons/Category.js","../node_modules/react-lazy-load/lib/LazyLoad.js","../node_modules/@material-ui/icons/CheckCircleOutlineRounded.js","../node_modules/@material-ui/icons/FeedbackOutlined.js","../node_modules/@material-ui/icons/LockOpenRounded.js","../node_modules/@material-ui/core/SvgIcon/SvgIcon.js","../node_modules/@babel/runtime-corejs2/core-js/object/values.js","../node_modules/@babel/runtime-corejs2/core-js/number/is-integer.js","../node_modules/attr-accept/dist/es/index.js","../node_modules/linear-layout-vector/index.js","../node_modules/babel-runtime/core-js/promise.js","../node_modules/babel-runtime/helpers/toConsumableArray.js","../node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js","../node_modules/babel-runtime/helpers/slicedToArray.js","../node_modules/@material-ui/icons/Done.js","../node_modules/@material-ui/icons/Tune.js","../node_modules/@material-ui/icons/FilterListRounded.js","../node_modules/@material-ui/icons/Bookmark.js","../node_modules/@material-ui/icons/BookmarkBorder.js","../node_modules/@material-ui/icons/ZoomOutMap.js","../node_modules/@material-ui/icons/FindInPage.js","../node_modules/@material-ui/icons/CreateNewFolder.js","../node_modules/@material-ui/icons/Eco.js","../node_modules/@material-ui/icons/ThumbUpRounded.js","../node_modules/@material-ui/icons/ViewListOutlined.js","../node_modules/@material-ui/icons/DoneAll.js","../node_modules/@material-ui/icons/Beenhere.js","../node_modules/react-color/lib/index.js","../node_modules/@material-ui/icons/ArrowUpward.js","../node_modules/@material-ui/icons/Crop169.js","../node_modules/@material-ui/icons/Undo.js","../node_modules/@material-ui/icons/BorderColor.js","../node_modules/@material-ui/icons/TextFields.js","../node_modules/@material-ui/icons/FormatStrikethrough.js","../node_modules/@material-ui/icons/FormatUnderlined.js","../node_modules/@material-ui/icons/TouchApp.js","../node_modules/@material-ui/icons/SaveAlt.js","../node_modules/@material-ui/icons/ShoppingCart.js","../node_modules/@material-ui/icons/DescriptionOutlined.js","../node_modules/@material-ui/icons/LabelSharp.js","../node_modules/@material-ui/icons/FirstPage.js","../node_modules/@material-ui/icons/LastPage.js","../node_modules/@material-ui/icons/PictureAsPdf.js","../node_modules/@material-ui/icons/Image.js","../node_modules/@material-ui/icons/GridOn.js","../node_modules/ats-framework/src/containers/ScrollTabContainer/ScrollTabContainer.tsx","../node_modules/@material-ui/icons/ExitToApp.js","../node_modules/@material-ui/icons/History.js","../node_modules/@material-ui/icons/CheckBoxOutlineBlank.js","../node_modules/@material-ui/icons/NotificationImportant.js","../node_modules/@material-ui/icons/ArrowRight.js","../node_modules/@material-ui/icons/AddRounded.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/_cloneBuffer.js","../node_modules/@material-ui/icons/RadioButtonUncheckedRounded.js","../node_modules/@material-ui/icons/PlayCircleFilledRounded.js","../node_modules/@material-ui/icons/VpnKey.js","../node_modules/@material-ui/icons/Notifications.js","../node_modules/ats-framework/src/utils/domTranslationGuard/index.ts","../node_modules/jss-compose/lib/index.js","../node_modules/jss-extend/lib/index.js","../node_modules/@material-ui/icons/DeleteRounded.js","../node_modules/@material-ui/icons/WbSunny.js","../node_modules/@material-ui/icons/AcUnit.js","../node_modules/@material-ui/icons/ArrowBackIos.js","../node_modules/ats-framework/src/pages/AuthPages/ForgetPasswordPage/index.tsx","../node_modules/ats-framework/src/components/AddDrawingRulesModal/index.tsx","../node_modules/ats-framework/src/components/TokenExpireModal/index.tsx","../node_modules/ats-framework/src/containers/CreateNewSpecModal/Toggle.tsx","../node_modules/ats-framework/src/containers/CreateNewProjectModal/Toggle.tsx","../node_modules/@material-ui/icons/SwapVert.js","../node_modules/@material-ui/icons/SyncAltRounded.js","../node_modules/@material-ui/icons/CallSplit.js","../node_modules/ats-framework/src/containers/MyContactsPage/index.tsx","../node_modules/ats-framework/src/containers/ProjectAndTestProjectList/index.ts","../node_modules/ats-framework/src/containers/CollaboratorPermission/index.tsx","../node_modules/ats-framework/src/containers/UserProfile/index.tsx","../node_modules/ats-framework/src/containers/ChangeUserPassword/index.tsx","../node_modules/ats-framework/src/containers/Dashboard/WidgetLoader/TeamManagementWidgets/index.ts","../node_modules/ats-framework/src/containers/SpecAssistPreferences/index.tsx","../node_modules/ats-framework/src/components/GuestSpecExpireModal/index.tsx","../node_modules/@material-ui/icons/DashboardRounded.js","../node_modules/@material-ui/icons/BallotRounded.js","../node_modules/@material-ui/icons/HelpRounded.js","../node_modules/@material-ui/icons/AccountBalanceRounded.js","../node_modules/@material-ui/icons/Report.js","../node_modules/@material-ui/icons/Inbox.js","../node_modules/ats-framework/src/containers/PageSubmit/index.tsx","../node_modules/ats-framework/src/containers/ResetPassword/index.tsx","../node_modules/@material-ui/icons/ReportProblem.js","../node_modules/ats-framework/src/components/WindowFocusAppVersionChecker/index.tsx","../node_modules/ats-framework/src/images/logo/ATS_full_logo.svg","../node_modules/ats-framework/src/modules/DashboardModule/reducer.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/createWidgetIfRequired.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/fetchWidgetDataWithOptions.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/fetchWidgetData.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/fetchWidgetsData.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/fetchWidgetLayoutData.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/fetchWidgetDataIfRequired.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/loadDashboard.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/updateLayout.ts","../node_modules/ats-framework/src/modules/DashboardModule/sagas/updateWidgetData.ts","../node_modules/ats-framework/src/modules/DashboardModule/saga.ts","../node_modules/ats-framework/src/modules/DashboardModule/DashboardModule.tsx","../node_modules/ats-framework/src/modules/DashboardModule/index.ts","../node_modules/ats-framework/src/pages/SpecDetail/TooltipInfo.tsx","../node_modules/ats-framework/src/pages/SpecDetail/Title.tsx","../node_modules/ats-framework/src/pages/SpecDetail/Download.tsx","../node_modules/ats-framework/src/pages/SpecDetail/DownloadView.tsx","../node_modules/ats-framework/src/pages/SpecDetail/LixirSpecBookletView.tsx","../node_modules/ats-framework/src/pages/SpecDetail/ActionMenu.tsx","../node_modules/ats-framework/src/pages/SpecDetail/Header.tsx","../node_modules/ats-framework/src/components/ExpiringCountDown/index.tsx","../node_modules/ats-framework/src/pages/SpecDetail/DefaultView/NewDefaultView.tsx","../node_modules/ats-framework/src/pages/SpecDetail/DefaultView/index.tsx","../node_modules/ats-framework/src/pages/SpecDetail/SpecDetail.tsx","../node_modules/ats-framework/src/pages/SpecDetail/index.ts","../node_modules/ats-framework/src/modules/PimModule/reducer.ts","../node_modules/ats-framework/src/components/LibraryProductDrawer/SuccessDrawer.tsx","../node_modules/ats-framework/src/components/LibraryProductDrawer/SpecSheetUpload.tsx","../node_modules/ats-framework/src/components/LibraryProductDrawer/MediaRow.tsx","../node_modules/ats-framework/src/components/LibraryProductDrawer/DrawerView.tsx","../node_modules/ats-framework/src/components/LibraryProductDrawer/index.tsx","../node_modules/ats-framework/src/modules/PimModule/helpers.ts","../node_modules/ats-framework/src/modules/PimModule/saga.ts","../node_modules/ats-framework/src/modules/PimModule/PimModule.tsx","../node_modules/ats-framework/src/modules/PimModule/index.ts","../node_modules/ats-framework/src/modules/NotificationModule/reducer.ts","../node_modules/ats-framework/src/modules/NotificationModule/notificationBroadcast.ts","../node_modules/ats-framework/src/modules/NotificationModule/notificationEventChannel.ts","../node_modules/ats-framework/src/images/campaignIcon.svg","../node_modules/ats-framework/src/modules/NotificationModule/noteRefreshTarget.ts","../node_modules/ats-framework/src/modules/NotificationModule/saga.ts","../node_modules/ats-framework/src/modules/NotificationModule/NotificationModule.tsx","../node_modules/ats-framework/src/modules/NotificationModule/index.ts","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DownloadView/Download.tsx","../node_modules/ats-framework/src/components/ProjectDetail/TooltipInfo/ProjectTooltipInfo.tsx","../node_modules/ats-framework/src/components/ProjectDetail/Title/index.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/DownloadView/index.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/LixirSpecBookletView/index.tsx","../node_modules/ats-framework/src/containers/CopyModal/useSelectAllDrawingsEffect.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/ProjectSpecDetail.tsx","../node_modules/ats-framework/src/pages/ProjectSpecDetail/index.ts","../node_modules/ats-framework/src/containers/ProductSelectionGroupDrawingSettings/index.tsx","../node_modules/ats-framework/src/components/RangeSlider/index.tsx","../node_modules/ats-framework/src/containers/ProductSelectionGroup/index.tsx","../node_modules/ats-framework/src/containers/ProductSelection/ProductView.tsx","../node_modules/ats-framework/src/containers/ProductSelection/ProductTable.tsx","../node_modules/ats-framework/src/containers/ProductSelection/index.tsx","../node_modules/ats-framework/src/containers/CreateNewTemplateFormStepper/actions.ts","../node_modules/ats-framework/src/containers/CreateNewTemplateFormStepper/constants.ts","../node_modules/ats-framework/src/containers/CreateNewTemplateFormStepper/reducer.ts","../node_modules/ats-framework/src/containers/CreateNewTemplateFormStepper/selectors.ts","../node_modules/ats-framework/src/containers/CreateNewTemplateFormStepper/index.tsx","../node_modules/ats-framework/src/containers/CreateNewTemplateModal/index.tsx","../node_modules/ats-framework/src/modules/CrossRefModule/reducer.ts","../node_modules/ats-framework/src/modules/CrossRefModule/helper.ts","../node_modules/ats-framework/src/modules/CrossRefModule/saga.ts","../node_modules/ats-framework/src/modules/CrossRefModule/CrossRefModule.tsx","../node_modules/ats-framework/src/modules/CrossRefModule/index.ts","../node_modules/ats-framework/src/components/TakeoffList/JobItem.tsx","../node_modules/ats-framework/src/modules/MsNotificationService/PrintServiceApi.ts","../node_modules/ats-framework/src/components/TakeoffList/progressMerge.ts","../node_modules/ats-framework/src/hooks/useLatest.ts","../node_modules/ats-framework/src/components/TakeoffList/Component.tsx","../node_modules/ats-framework/src/containers/CreateNewMasterFormStepper/constants.ts","../node_modules/ats-framework/src/containers/CreateNewMasterFormStepper/reducer.ts","../node_modules/ats-framework/src/containers/CreateNewMasterFormStepper/selectors.ts","../node_modules/ats-framework/src/containers/CreateNewMasterFormStepper/index.tsx","../node_modules/ats-framework/src/containers/CreateNewMasterModal/index.tsx","../node_modules/@fortawesome/free-regular-svg-icons/index.es.js","../node_modules/@fortawesome/free-solid-svg-icons/index.es.js","../node_modules/@fortawesome/free-brands-svg-icons/index.es.js","../node_modules/ats-framework/src/initFontAwesome.ts","../node_modules/ats-framework/src/modules/BuildingModule/reducer.ts","../node_modules/ats-framework/src/modules/BuildingModule/saga.ts","../node_modules/ats-framework/src/modules/BuildingModule/BuildingModule.tsx","../node_modules/ats-framework/src/modules/BuildingModule/index.ts","../node_modules/ats-framework/src/modules/ErrorModule/reducer.ts","../node_modules/ats-framework/src/modules/ErrorModule/saga.ts","../node_modules/ats-framework/src/modules/ErrorModule/ErrorModule.tsx","../node_modules/ats-framework/src/modules/ErrorModule/index.ts","../node_modules/ats-framework/src/modules/ProjectLocationModule/reducer.ts","../node_modules/ats-framework/src/modules/ProjectLocationModule/saga.ts","../node_modules/ats-framework/src/modules/ProjectLocationModule/ProjectLocation.tsx","../node_modules/ats-framework/src/modules/ProjectLocationModule/index.ts","../node_modules/ats-framework/src/modules/ProductModule/reducer.ts","../node_modules/ats-framework/src/modules/ProductModule/saga.ts","../node_modules/ats-framework/src/modules/ProductModule/ProductModule.tsx","../node_modules/ats-framework/src/modules/ProductModule/index.ts","../node_modules/ats-framework/src/modules/TaskModule/reducer.ts","../node_modules/ats-framework/src/modules/TaskModule/saga.ts","../node_modules/ats-framework/src/modules/TaskModule/TaskModule.tsx","../node_modules/ats-framework/src/modules/TaskModule/index.ts","../node_modules/ats-framework/src/modules/LocationModule/reducer.ts","../node_modules/ats-framework/src/modules/LocationModule/saga.ts","../node_modules/ats-framework/src/modules/LocationModule/LocationModule.tsx","../node_modules/ats-framework/src/modules/LocationModule/index.ts","../node_modules/ats-framework/src/pages/MasterDetailPage/DefaultView/DropdownMenu/index.tsx","../node_modules/ats-framework/src/pages/MasterDetailPage/DefaultView/NewView.tsx","../node_modules/ats-framework/src/pages/MasterDetailPage/DefaultView/index.tsx","../node_modules/ats-framework/src/pages/MasterDetailPage/index.tsx","../node_modules/ats-framework/src/pages/TemplateDetailPage/DefaultView/DropdownMenu/index.tsx","../node_modules/ats-framework/src/pages/TemplateDetailPage/DefaultView/NewView.tsx","../node_modules/ats-framework/src/pages/TemplateDetailPage/DefaultView/index.tsx","../node_modules/ats-framework/src/pages/TemplateDetailPage/index.tsx","../node_modules/ats-framework/src/modules/ProjectModule/reducer.ts","../node_modules/ats-framework/src/modules/ProjectModule/ProjectModule.tsx","../node_modules/ats-framework/src/modules/ProjectModule/index.ts","../node_modules/ats-framework/src/modules/ApplicationModule/saga.ts","../node_modules/ats-framework/src/modules/ApplicationModule/ApplicationModule.tsx","../node_modules/ats-framework/src/modules/ApplicationModule/index.ts","../node_modules/ats-framework/src/modules/LanguageModule/reducer.ts","../node_modules/ats-framework/src/modules/LanguageModule/LanguageModule.tsx","../node_modules/ats-framework/src/modules/LanguageModule/index.ts","../node_modules/ats-framework/src/modules/DebugModule/reducer.ts","../node_modules/ats-framework/src/modules/DebugModule/DebugModule.tsx","../node_modules/ats-framework/src/modules/DebugModule/index.ts","../node_modules/ats-framework/src/modules/SpecModule/reducer.ts","../node_modules/ats-framework/src/modules/SpecModule/SpecModule.tsx","../node_modules/ats-framework/src/modules/SpecModule/index.ts","../node_modules/ats-framework/src/modules/AccountModule/reducer.ts","../node_modules/ats-framework/src/modules/AccountModule/AccountModule.tsx","../node_modules/ats-framework/src/modules/AccountModule/index.ts","../node_modules/ats-framework/src/modules/PrintModule/reducer.ts","../node_modules/ats-framework/src/modules/PrintModule/PrintModule.tsx","../node_modules/ats-framework/src/modules/PrintModule/index.ts","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgCheckmark/index.tsx","../node_modules/ats-framework/src/components/AtsSvg/AtsSvgSignupFooter/index.tsx","../node_modules/ats-framework/src/containers/SignUpSecondStep/index.tsx","../node_modules/ats-framework/src/modules/ListModule/reducer.ts","../node_modules/ats-framework/src/modules/ListModule/saga.ts","../node_modules/ats-framework/src/modules/ListModule/ListModule.tsx","../node_modules/ats-framework/src/components/ProductBrochureSpecDrawingProduct/index.tsx","../node_modules/ats-framework/src/components/ProductBrochurePages/index.tsx","../node_modules/ats-framework/src/containers/ProductBrochure/index.tsx","../node_modules/ats-framework/src/containers/AlternativeVisibilityPreferences/EditModal.tsx","../node_modules/ats-framework/src/containers/AlternativeVisibilityPreferences/TableView.tsx","../node_modules/ats-framework/src/containers/AlternativeVisibilityPreferences/index.tsx","../node_modules/ats-framework/src/components/OfflineErrorModal/Detector.tsx","../node_modules/ats-framework/src/components/OfflineErrorModal/index.tsx","../node_modules/ats-framework/src/pages/DashboardPage/Component.tsx","../node_modules/ats-framework/src/pages/DashboardPage/index.ts","../node_modules/ats-framework/src/containers/MasterList/_CustomCellRenderers/CustomActionButton.tsx","../node_modules/ats-framework/src/containers/MasterList/index.tsx","../node_modules/ats-framework/src/containers/ProductSelection/PipeFilterModal/constants.ts","../node_modules/ats-framework/src/containers/ProductSelection/PipeFilterModal/Component.tsx","../node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js","../node_modules/@material-ui/core/esm/useMediaQuery/useMediaQuery.js","../node_modules/@material-ui/core/esm/Slide/Slide.js","../node_modules/@material-ui/core/esm/Table/Table.js","../node_modules/@material-ui/core/esm/TableHead/TableHead.js","../node_modules/@material-ui/core/esm/TableBody/TableBody.js","../node_modules/@material-ui/core/esm/RootRef/RootRef.js","../node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js","../node_modules/@material-ui/core/esm/ClickAwayListener/ClickAwayListener.js","../node_modules/@material-ui/core/esm/ListItemSecondaryAction/ListItemSecondaryAction.js","../node_modules/@material-ui/core/esm/Step/Step.js","../node_modules/@material-ui/core/esm/Snackbar/Snackbar.js","../node_modules/@material-ui/core/esm/internal/svg-icons/CheckCircle.js","../node_modules/@material-ui/core/esm/internal/svg-icons/Warning.js","../node_modules/@material-ui/core/esm/StepIcon/StepIcon.js","../node_modules/@material-ui/core/esm/StepLabel/StepLabel.js","../node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js","../node_modules/@material-ui/core/esm/InputBase/InputBase.js","../node_modules/ats-framework/src/images/dashboard/empty-project.svg","../node_modules/lodash/isString.js","../node_modules/lodash/_createAssigner.js","../node_modules/@material-ui/core/styles/withStyles.js","../node_modules/lodash/toNumber.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/nonIterableRest.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/index.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/utils.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/cookie.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/querystring.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/localStorage.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/navigator.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/htmlTag.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/path.js","../node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/subdomain.js","../node_modules/i18next-xhr-backend/dist/commonjs/index.js","../node_modules/i18next-xhr-backend/dist/commonjs/utils.js","../node_modules/i18next-xhr-backend/dist/commonjs/ajax.js","../node_modules/html-parse-stringify2/lib/parse.js","../node_modules/html-parse-stringify2/lib/parse-tag.js","../node_modules/void-elements/index.js","../node_modules/html-parse-stringify2/lib/stringify.js","../node_modules/lodash/_baseConformsTo.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_nativeKeys.js","../node_modules/qs/lib/stringify.js","../node_modules/qs/lib/parse.js","../node_modules/redux-form/lib/immutable.js","../node_modules/redux-form/lib/Form.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/redux-form/lib/FormName.js","../node_modules/redux-form/lib/FormSection.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/redux-form/lib/propTypes.js","../node_modules/redux-form/lib/immutable/Field.js","../node_modules/redux-form/lib/createField.js","../node_modules/redux-form/lib/ConnectedField.js","../node_modules/redux-form/lib/events/getValue.js","../node_modules/redux-form/lib/util/eventConsts.js","../node_modules/redux-form/lib/structure/plain/splice.js","../node_modules/lodash/_memoizeCapped.js","../node_modules/lodash/memoize.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_baseToString.js","../node_modules/redux-form/lib/structure/plain/setIn.js","../node_modules/redux-form/lib/structure/plain/deepEqual.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/redux-form/lib/structure/plain/deleteIn.js","../node_modules/redux-form/lib/structure/immutable/deepEqual.js","../node_modules/redux-form/lib/structure/immutable/keys.js","../node_modules/redux-form/lib/structure/immutable/setIn.js","../node_modules/redux-form/lib/structure/immutable/splice.js","../node_modules/redux-form/lib/immutable/Fields.js","../node_modules/redux-form/lib/createFields.js","../node_modules/redux-form/lib/ConnectedFields.js","../node_modules/redux-form/lib/immutable/FieldArray.js","../node_modules/redux-form/lib/createFieldArray.js","../node_modules/redux-form/lib/ConnectedFieldArray.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/property.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/redux-form/lib/createFieldArrayProps.js","../node_modules/redux-form/lib/immutable/formValueSelector.js","../node_modules/redux-form/lib/createFormValueSelector.js","../node_modules/redux-form/lib/immutable/formValues.js","../node_modules/redux-form/lib/createFormValues.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/isEmpty.js","../node_modules/redux-form/lib/immutable/getFormError.js","../node_modules/redux-form/lib/selectors/getFormError.js","../node_modules/redux-form/lib/immutable/getFormNames.js","../node_modules/redux-form/lib/selectors/getFormNames.js","../node_modules/redux-form/lib/immutable/getFormValues.js","../node_modules/redux-form/lib/selectors/getFormValues.js","../node_modules/redux-form/lib/immutable/getFormInitialValues.js","../node_modules/redux-form/lib/selectors/getFormInitialValues.js","../node_modules/redux-form/lib/immutable/getFormSyncErrors.js","../node_modules/redux-form/lib/selectors/getFormSyncErrors.js","../node_modules/redux-form/lib/immutable/getFormMeta.js","../node_modules/redux-form/lib/selectors/getFormMeta.js","../node_modules/redux-form/lib/immutable/getFormAsyncErrors.js","../node_modules/redux-form/lib/selectors/getFormAsyncErrors.js","../node_modules/redux-form/lib/immutable/getFormSyncWarnings.js","../node_modules/redux-form/lib/selectors/getFormSyncWarnings.js","../node_modules/redux-form/lib/immutable/getFormSubmitErrors.js","../node_modules/redux-form/lib/selectors/getFormSubmitErrors.js","../node_modules/redux-form/lib/immutable/isAsyncValidating.js","../node_modules/redux-form/lib/selectors/isAsyncValidating.js","../node_modules/redux-form/lib/immutable/isDirty.js","../node_modules/redux-form/lib/selectors/isDirty.js","../node_modules/redux-form/lib/immutable/isInvalid.js","../node_modules/redux-form/lib/selectors/isInvalid.js","../node_modules/redux-form/lib/hasError.js","../node_modules/redux-form/lib/immutable/isPristine.js","../node_modules/redux-form/lib/immutable/isValid.js","../node_modules/redux-form/lib/immutable/isSubmitting.js","../node_modules/redux-form/lib/selectors/isSubmitting.js","../node_modules/redux-form/lib/immutable/hasSubmitSucceeded.js","../node_modules/redux-form/lib/selectors/hasSubmitSucceeded.js","../node_modules/redux-form/lib/immutable/hasSubmitFailed.js","../node_modules/redux-form/lib/selectors/hasSubmitFailed.js","../node_modules/redux-form/lib/immutable/reduxForm.js","../node_modules/redux-form/lib/createReduxForm.js","../node_modules/lodash/_baseMerge.js","../node_modules/lodash/_baseMergeDeep.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/toPlainObject.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/constant.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/redux-form/lib/asyncValidation.js","../node_modules/redux-form/lib/events/silenceEvents.js","../node_modules/redux-form/lib/generateValidator.js","../node_modules/redux-form/lib/handleSubmit.js","../node_modules/redux-form/lib/util/getDisplayName.js","../node_modules/redux-form/lib/util/isHotReloading.js","../node_modules/redux-form/lib/immutable/reducer.js","../node_modules/redux-form/lib/createReducer.js","../node_modules/redux-form/lib/deleteInWithCleanUp.js","../node_modules/redux-form/lib/immutable/values.js","../node_modules/redux-form/lib/createValues.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../src/combineReducers.js","../../../src/utilities/index.js","../../../src/utilities/getUnexpectedInvocationParameterMessage.js","../../../src/utilities/validateNextState.js","../node_modules/redux-react-local/lib/decorator.js","../node_modules/redux-react-local/lib/reducer.js","../node_modules/redux-react-local/lib/hash.js","../node_modules/redux-react-local/lib/server.js","../node_modules/redux-react-local/lib/root.js","../node_modules/redux-react-local/lib/utils.js","../node_modules/connected-react-router/lib/immutable.js","../node_modules/connected-react-router/lib/ConnectedRouter.js","../node_modules/connected-react-router/lib/reducer.js","../node_modules/connected-react-router/lib/structure/immutable/index.js","../node_modules/connected-react-router/lib/structure/immutable/getIn.js","../node_modules/connected-react-router/lib/structure/plain/getIn.js","../node_modules/connected-react-router/lib/middleware.js","../node_modules/timers-browserify/main.js","../node_modules/setimmediate/setImmediate.js","../node_modules/moment-timezone/moment-timezone.js","../node_modules/react-autosuggest/dist/Autosuggest.js","../node_modules/shallow-equal/arrays/index.js","../node_modules/react-autowhatever/dist/index.js","../node_modules/react-autowhatever/dist/Autowhatever.js","../node_modules/section-iterator/dist/index.js","../node_modules/react-themeable/dist/index.js","../node_modules/react-autowhatever/dist/SectionTitle.js","../node_modules/react-autowhatever/dist/ItemsList.js","../node_modules/react-autowhatever/dist/Item.js","../node_modules/react-autosuggest/dist/theme.js","../node_modules/diacritic/diacritics.js","../../src/performance-now.coffee","../node_modules/lodash/_basePick.js","../node_modules/lodash/_basePickBy.js","../node_modules/lodash/_baseSet.js","../node_modules/lodash/_flatRest.js","../node_modules/lodash/flatten.js","../node_modules/lodash/_baseFlatten.js","../node_modules/lodash/_isFlattenable.js","../node_modules/eventlistener/eventlistener.js","../node_modules/lodash.throttle/index.js","../node_modules/react-lazy-load/lib/utils/parentScroll.js","../node_modules/react-lazy-load/lib/utils/inViewport.js","../node_modules/react-lazy-load/lib/utils/getElementPosition.js","../node_modules/@material-ui/core/styles/defaultTheme.js","../node_modules/@material-ui/core/styles/createMuiTheme.js","../node_modules/@material-ui/core/styles/createBreakpoints.js","../node_modules/@material-ui/core/styles/createMixins.js","../node_modules/@material-ui/core/styles/createPalette.js","../node_modules/@material-ui/core/colors/common.js","../node_modules/@material-ui/core/colors/grey.js","../node_modules/@material-ui/core/colors/indigo.js","../node_modules/@material-ui/core/colors/pink.js","../node_modules/@material-ui/core/colors/red.js","../node_modules/@material-ui/core/colors/orange.js","../node_modules/@material-ui/core/colors/blue.js","../node_modules/@material-ui/core/colors/green.js","../node_modules/@material-ui/core/styles/colorManipulator.js","../node_modules/@material-ui/core/styles/createTypography.js","../node_modules/@material-ui/core/styles/shadows.js","../node_modules/@material-ui/core/styles/shape.js","../node_modules/@material-ui/core/styles/createSpacing.js","../node_modules/@material-ui/core/styles/transitions.js","../node_modules/@material-ui/core/styles/zIndex.js","../node_modules/@material-ui/core/utils/capitalize.js","../node_modules/core-js/library/modules/es6.object.create.js","../node_modules/core-js/library/modules/_object-dps.js","../node_modules/core-js/library/modules/_array-includes.js","../node_modules/core-js/library/modules/_to-absolute-index.js","../node_modules/core-js/library/modules/es6.object.set-prototype-of.js","../node_modules/core-js/library/modules/_set-proto.js","../node_modules/core-js/library/modules/es6.object.assign.js","../node_modules/core-js/library/modules/_object-assign.js","../node_modules/core-js/library/fn/object/values.js","../node_modules/core-js/library/modules/es7.object.values.js","../node_modules/core-js/library/modules/_object-to-array.js","../node_modules/core-js/library/modules/es6.object.keys.js","../node_modules/core-js/library/fn/date/now.js","../node_modules/core-js/library/modules/es6.date.now.js","../node_modules/core-js/library/fn/number/is-integer.js","../node_modules/core-js/library/modules/es6.number.is-integer.js","../node_modules/core-js/library/modules/_is-integer.js","../node_modules/core-js/library/fn/object/get-prototype-of.js","../node_modules/core-js/library/modules/es6.object.get-prototype-of.js","../node_modules/core-js/library/fn/object/define-property.js","../node_modules/core-js/library/modules/es6.object.define-property.js","../node_modules/babel-runtime/core-js/symbol/iterator.js","../node_modules/core-js/library/fn/symbol/iterator.js","../node_modules/core-js/library/modules/_string-at.js","../node_modules/core-js/library/modules/_iter-create.js","../node_modules/core-js/library/modules/es6.array.iterator.js","../node_modules/core-js/library/modules/_add-to-unscopables.js","../node_modules/core-js/library/modules/_iter-step.js","../node_modules/babel-runtime/core-js/symbol.js","../node_modules/core-js/library/fn/symbol/index.js","../node_modules/core-js/library/modules/es6.symbol.js","../node_modules/core-js/library/modules/_meta.js","../node_modules/core-js/library/modules/_enum-keys.js","../node_modules/core-js/library/modules/_is-array.js","../node_modules/core-js/library/modules/_object-gopn-ext.js","../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../node_modules/core-js/library/modules/es7.symbol.observable.js","../node_modules/babel-runtime/core-js/object/set-prototype-of.js","../node_modules/babel-runtime/core-js/object/create.js","../node_modules/dom-helpers/util/inDOM.js","../node_modules/core-js/library/fn/promise.js","../node_modules/core-js/library/modules/es6.promise.js","../node_modules/core-js/library/modules/_an-instance.js","../node_modules/core-js/library/modules/_for-of.js","../node_modules/core-js/library/modules/_invoke.js","../node_modules/core-js/library/modules/_microtask.js","../node_modules/core-js/library/modules/_user-agent.js","../node_modules/core-js/library/modules/_redefine-all.js","../node_modules/core-js/library/modules/_set-species.js","../node_modules/core-js/library/modules/es7.promise.finally.js","../node_modules/core-js/library/modules/es7.promise.try.js","../node_modules/babel-runtime/core-js/array/from.js","../node_modules/core-js/library/fn/array/from.js","../node_modules/core-js/library/modules/es6.array.from.js","../node_modules/core-js/library/modules/_create-property.js","../node_modules/core-js/library/fn/object/get-own-property-descriptor.js","../node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","../node_modules/babel-runtime/core-js/is-iterable.js","../node_modules/core-js/library/fn/is-iterable.js","../node_modules/core-js/library/modules/core.is-iterable.js","../node_modules/babel-runtime/core-js/get-iterator.js","../node_modules/core-js/library/fn/get-iterator.js","../node_modules/core-js/library/modules/core.get-iterator.js","../node_modules/uuid/v4.js","../node_modules/buffer/index.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/react-draggable/build/cjs/Draggable.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/arrayWithHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/nonIterableRest.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/react-draggable/build/cjs/utils/getPrefix.js","../node_modules/react-draggable/build/cjs/DraggableCore.js","../node_modules/pako/lib/deflate.js","../node_modules/pako/lib/zlib/deflate.js","../node_modules/pako/lib/zlib/trees.js","../node_modules/pako/lib/inflate.js","../node_modules/pako/lib/zlib/inflate.js","../node_modules/pako/lib/zlib/inffast.js","../node_modules/pako/lib/zlib/inftrees.js","../node_modules/pako/lib/zlib/gzheader.js","../node_modules/react-color/lib/components/alpha/Alpha.js","../node_modules/reactcss/lib/flattenNames.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_createBaseEach.js","../node_modules/reactcss/lib/mergeClasses.js","../node_modules/lodash/cloneDeep.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/isMap.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/isSet.js","../node_modules/lodash/_baseIsSet.js","../node_modules/reactcss/lib/autoprefix.js","../node_modules/reactcss/lib/components/hover.js","../node_modules/reactcss/lib/components/active.js","../node_modules/reactcss/lib/loop.js","../node_modules/react-color/lib/components/common/Alpha.js","../node_modules/react-color/lib/helpers/alpha.js","../node_modules/react-color/lib/helpers/checkboard.js","../node_modules/react-color/lib/components/common/EditableInput.js","../node_modules/react-color/lib/components/common/Hue.js","../node_modules/react-color/lib/helpers/hue.js","../node_modules/react-color/lib/components/common/Raised.js","../node_modules/react-color/lib/components/common/Saturation.js","../node_modules/lodash/throttle.js","../node_modules/lodash/now.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/react-color/lib/helpers/saturation.js","../node_modules/lodash/each.js","../node_modules/lodash/forEach.js","../node_modules/tinycolor2/cjs/tinycolor.js","../node_modules/react-color/lib/components/common/Swatch.js","../node_modules/react-color/lib/helpers/interaction.js","../node_modules/react-color/lib/components/alpha/AlphaPointer.js","../node_modules/react-color/lib/components/block/Block.js","../node_modules/react-color/lib/components/block/BlockSwatches.js","../node_modules/react-color/lib/components/circle/Circle.js","../node_modules/react-color/lib/components/circle/CircleSwatch.js","../node_modules/react-color/lib/components/chrome/Chrome.js","../node_modules/react-color/lib/components/chrome/ChromeFields.js","../node_modules/@icons/material/UnfoldMoreHorizontalIcon.js","../node_modules/react-color/lib/components/chrome/ChromePointer.js","../node_modules/react-color/lib/components/chrome/ChromePointerCircle.js","../node_modules/react-color/lib/components/compact/Compact.js","../node_modules/react-color/lib/components/compact/CompactColor.js","../node_modules/react-color/lib/components/compact/CompactFields.js","../node_modules/react-color/lib/components/github/Github.js","../node_modules/react-color/lib/components/github/GithubSwatch.js","../node_modules/react-color/lib/components/hue/Hue.js","../node_modules/react-color/lib/components/hue/HuePointer.js","../node_modules/react-color/lib/components/material/Material.js","../node_modules/react-color/lib/components/photoshop/Photoshop.js","../node_modules/react-color/lib/components/photoshop/PhotoshopFields.js","../node_modules/react-color/lib/components/photoshop/PhotoshopPointerCircle.js","../node_modules/react-color/lib/components/photoshop/PhotoshopPointer.js","../node_modules/react-color/lib/components/photoshop/PhotoshopButton.js","../node_modules/react-color/lib/components/photoshop/PhotoshopPreviews.js","../node_modules/react-color/lib/components/sketch/Sketch.js","../node_modules/react-color/lib/components/sketch/SketchFields.js","../node_modules/react-color/lib/components/sketch/SketchPresetColors.js","../node_modules/react-color/lib/components/slider/Slider.js","../node_modules/react-color/lib/components/slider/SliderSwatches.js","../node_modules/react-color/lib/components/slider/SliderSwatch.js","../node_modules/react-color/lib/components/slider/SliderPointer.js","../node_modules/react-color/lib/components/swatches/Swatches.js","../node_modules/react-color/lib/components/swatches/SwatchesGroup.js","../node_modules/react-color/lib/components/swatches/SwatchesColor.js","../node_modules/@icons/material/CheckIcon.js","../node_modules/react-color/lib/components/twitter/Twitter.js","../node_modules/element-resize-detector/src/element-resize-detector.js","../node_modules/element-resize-detector/src/element-utils.js","../node_modules/element-resize-detector/src/listener-handler.js","../node_modules/element-resize-detector/src/id-generator.js","../node_modules/element-resize-detector/src/id-handler.js","../node_modules/element-resize-detector/src/reporter.js","../node_modules/batch-processor/src/batch-processor.js","../node_modules/batch-processor/src/utils.js","../node_modules/element-resize-detector/src/state-handler.js","../node_modules/element-resize-detector/src/detection-strategy/object.js","../node_modules/element-resize-detector/src/detection-strategy/scroll.js","../throttle.js","../debounce.js","../node_modules/shallowequal/index.js","../node_modules/url/url.js","../node_modules/node-libs-browser/node_modules/punycode/punycode.js","../node_modules/url/util.js","../node_modules/querystring-es3/index.js","../node_modules/querystring-es3/decode.js","../node_modules/querystring-es3/encode.js","../node_modules/query-string/index.js","../node_modules/strict-uri-encode/index.js","../node_modules/decode-uri-component/index.js","../node_modules/redux-auth-wrapper/helper/redirect.js","../node_modules/redux-auth-wrapper/authWrapper.js","../node_modules/redux-auth-wrapper/redirect.js","../node_modules/react-ga4/dist/ga4.js","../node_modules/react-ga4/dist/gtag.js","../node_modules/react-ga4/dist/format.js","../../../src/tracing.ts","../node_modules/@material-ui/core/esm/Portal/Portal.js","../node_modules/@material-ui/core/esm/RadioGroup/RadioGroup.js","../node_modules/@material-ui/core/esm/FormGroup/FormGroup.js","../node_modules/@material-ui/styles/esm/createStyles/createStyles.js","../node_modules/@material-ui/core/esm/FilledInput/FilledInput.js","../node_modules/@material-ui/core/esm/FormLabel/FormLabel.js","../node_modules/@material-ui/core/esm/MenuList/MenuList.js","../../../../src/transports/base.ts","../node_modules/@material-ui/core/esm/CardHeader/CardHeader.js","../node_modules/@material-ui/core/esm/ExpansionPanelDetails/ExpansionPanelDetails.js","../node_modules/@material-ui/core/esm/ExpansionPanelSummary/ExpansionPanelSummary.js","../node_modules/@material-ui/core/esm/Tab/Tab.js","../node_modules/@material-ui/core/esm/Fab/Fab.js","../node_modules/@material-ui/core/esm/Stepper/Stepper.js","../node_modules/@material-ui/core/esm/StepConnector/StepConnector.js","../node_modules/@material-ui/core/esm/StepContent/StepContent.js","../node_modules/@material-ui/core/esm/Badge/Badge.js","../node_modules/@material-ui/core/esm/SnackbarContent/SnackbarContent.js","../node_modules/@material-ui/icons/esm/KeyboardArrowUp.js","../node_modules/@material-ui/icons/esm/KeyboardArrowDown.js","../node_modules/@material-ui/system/esm/merge.js","../node_modules/@material-ui/system/esm/styleFunctionSx.js","../node_modules/@material-ui/system/esm/compose.js","../node_modules/@material-ui/system/esm/breakpoints.js","../node_modules/@material-ui/system/esm/style.js","../node_modules/@material-ui/system/esm/borders.js","../node_modules/@material-ui/system/esm/display.js","../node_modules/@material-ui/system/esm/flexbox.js","../node_modules/@material-ui/system/esm/positions.js","../node_modules/@material-ui/system/esm/palette.js","../node_modules/@material-ui/system/esm/shadows.js","../node_modules/@material-ui/system/esm/sizing.js","../node_modules/@material-ui/system/esm/spacing.js","../node_modules/@material-ui/system/esm/memoize.js","../node_modules/@material-ui/system/esm/typography.js","../node_modules/@material-ui/core/esm/styles/styled.js","../node_modules/@material-ui/core/esm/Box/Box.js","../../../src/_helpers/utils.ts","../../../src/wrappers/StaticWrapper.tsx","../../../src/constants/dimensions.ts","../../../src/_shared/ModalDialog.tsx","../../../src/_shared/hooks/useKeyDown.ts","../../../src/wrappers/ModalWrapper.tsx","../../../src/wrappers/InlineWrapper.tsx","../../../src/wrappers/Wrapper.tsx","../node_modules/rifm/dist/rifm.esm.js","../../../src/views/Calendar/Day.tsx","../node_modules/react-transition-group/node_modules/dom-helpers/esm/removeClass.js","../node_modules/react-transition-group/esm/CSSTransition.js","../node_modules/react-transition-group/node_modules/dom-helpers/esm/addClass.js","../node_modules/react-transition-group/node_modules/dom-helpers/esm/hasClass.js","../../../src/_helpers/date-utils.ts","../../../src/views/Calendar/DayWrapper.tsx","../../../src/views/Calendar/SlideTransition.tsx","../../../src/views/Calendar/CalendarHeader.tsx","../../../src/_shared/icons/ArrowLeftIcon.tsx","../../../src/_shared/icons/ArrowRightIcon.tsx","../../../src/_shared/WithUtils.tsx","../../../src/views/Calendar/Calendar.tsx","../../../src/constants/ClockType.ts","../../../src/views/Clock/ClockPointer.tsx","../../../src/_helpers/time-utils.ts","../../../src/views/Clock/Clock.tsx","../../../src/views/Clock/ClockNumber.tsx","../../../src/views/Clock/ClockNumbers.tsx","../../../src/views/Clock/ClockView.tsx","../../../src/constants/prop-types.ts","../../../src/views/Year/Year.tsx","../../../src/views/Year/YearView.tsx","../../../src/views/Month/Month.tsx","../../../src/views/Month/MonthView.tsx","../../../src/_shared/hooks/useIsLandscape.tsx","../../../src/Picker/Picker.tsx","../../../src/_shared/hooks/useViews.tsx","../../../src/_shared/ToolbarText.tsx","../../../src/_shared/ToolbarButton.tsx","../../../src/_shared/PickerToolbar.tsx","../../../src/_shared/PureDateInput.tsx","../../../src/_shared/icons/KeyboardIcon.tsx","../../../src/_helpers/text-field-helper.ts","../../../src/_shared/KeyboardDateInput.tsx","../../../src/_shared/hooks/usePickerState.ts","../../../src/_shared/hooks/useOpenState.ts","../../../src/Picker/makePickerWithState.tsx","../../../src/DatePicker/DatePickerToolbar.tsx","../../../src/DatePicker/DatePicker.tsx","../../../src/_shared/hooks/useKeyboardPickerState.ts","../node_modules/normalize-scroll-left/esm/main.js","../node_modules/@material-ui/core/esm/internal/animate.js","../node_modules/@material-ui/core/esm/Tabs/ScrollbarSize.js","../node_modules/@material-ui/core/esm/Tabs/TabIndicator.js","../node_modules/@material-ui/core/esm/Tabs/TabScrollButton.js","../node_modules/@material-ui/core/esm/Tabs/Tabs.js","../node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js","../node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js","../node_modules/@material-ui/core/esm/ExpansionPanel/ExpansionPanel.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../../../../src/instrument/dom.ts","../../../../src/instrument/xhr.ts","../../../../src/instrument/fetch.ts","../../../src/url.ts","../../../../src/instrument/globalError.ts","../../../../src/instrument/globalUnhandledRejection.ts","../../../src/ratelimit.ts","../node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js","../../../../src/transports/fetch.ts","../../../../src/utils/debug.ts","../node_modules/@material-ui/lab/esm/useAutocomplete/useAutocomplete.js","../node_modules/@material-ui/core/esm/ListSubheader/ListSubheader.js","../node_modules/@material-ui/core/esm/TableContainer/TableContainer.js","../node_modules/@material-ui/icons/esm/KeyboardArrowRight.js","../node_modules/@material-ui/icons/esm/Edit.js","../node_modules/@material-ui/icons/esm/AttachFile.js","../node_modules/@material-ui/icons/esm/Info.js","../node_modules/@material-ui/icons/esm/Check.js","../node_modules/@material-ui/icons/esm/Height.js","../node_modules/@material-ui/icons/esm/CheckCircle.js","../node_modules/@material-ui/core/esm/Zoom/Zoom.js","../node_modules/@material-ui/icons/esm/CheckCircleOutline.js","../node_modules/@material-ui/icons/esm/ErrorOutline.js","../node_modules/@material-ui/icons/esm/Error.js","../node_modules/@material-ui/icons/esm/KeyboardArrowLeft.js","../node_modules/@material-ui/core/esm/TableFooter/TableFooter.js","../../../src/server-zone.ts","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/@amplitude/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/@amplitude/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/@amplitude/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../node_modules/@amplitude/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js","../node_modules/@amplitude/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__funcToSource.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/@amplitude/rrweb/es/rrweb/ext/fflate/esm/browser.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/packer/base.js","../../../../src/typings/session-replay.ts","../node_modules/idb-keyval/dist/compat.js","../node_modules/@amplitude/rrweb/es/rrweb/packages/rrweb/src/packer/pack.js","../../../src/session-idb-store.ts","../../../src/track-destination.ts","../../../src/events-manager.ts","../../../src/identifiers.ts","../../../src/session-replay.ts","../../../src/session-replay-factory.ts","../../../../src/integrations/inboundfilters.ts","../../../../src/integrations/functiontostring.ts","../../../src/sdk.ts","../../../../src/utils/sdkMetadata.ts","../../../../src/debug-build.ts","../../../../src/eventbuilder.ts","../../../../src/helpers.ts","../../../../src/client.ts","../../../../src/userfeedback.ts","../../../src/clientreport.ts","../../../../src/instrument/console.ts","../../../src/severity.ts","../../../../../src/integrations/breadcrumbs.ts","../../../../../src/integrations/dedupe.ts","../../../../../src/integrations/globalhandlers.ts","../../../../../src/integrations/httpcontext.ts","../../../src/aggregate-errors.ts","../../../../../src/integrations/linkederrors.ts","../../../../../src/integrations/trycatch.ts","../../../../src/stack-parsers.ts","../../../src/promisebuffer.ts","../../../../../src/transports/utils.ts","../../../../../src/transports/fetch.ts","../../../../../src/transports/xhr.ts","../../../../src/sdk.ts","../../../../src/utils/hasTracingEnabled.ts","../../../../src/tracing/trace.ts","../../../../src/metrics/metric-summary.ts","../../../../src/tracing/spanstatus.ts","../../../../src/tracing/span.ts","../../../../src/tracing/transaction.ts","../../../../src/tracing/idletransaction.ts","../../../../src/tracing/utils.ts","../../../../src/tracing/errors.ts","../../../../src/tracing/sampling.ts","../../../../src/tracing/hubextensions.ts","../../../../src/browser/backgroundtab.ts","../../../src/span.ts","../../../../../src/browser/metrics/utils.ts","../../../../../src/browser/metrics/index.ts","../../../../src/tracing/measurement.ts","../../../../src/common/fetch.ts","../../../../src/browser/request.ts","../../../../src/browser/browserTracingIntegration.ts","../../../../src/buildPolyfills/_optionalChain.ts","../../../../src/utils/isSentryRequestUrl.ts","../../../src/isBrowser.ts","../node_modules/@sentry/replay/esm/index.js","../../../../src/buildPolyfills/_nullishCoalesce.ts","../node_modules/@material-ui/lab/esm/internal/svg-icons/SuccessOutlined.js","../node_modules/@material-ui/lab/esm/internal/svg-icons/ReportProblemOutlined.js","../node_modules/@material-ui/lab/esm/internal/svg-icons/ErrorOutline.js","../node_modules/@material-ui/lab/esm/internal/svg-icons/InfoOutlined.js","../node_modules/@material-ui/lab/esm/Alert/Alert.js","../../../../src/metrics/envelope.ts","../../../../src/metrics/utils.ts","../../../src/baseclient.ts","../../../../src/vendor/supportsHistory.ts","../../../../src/instrument/history.ts","../node_modules/@material-ui/core/esm/TablePagination/TablePaginationActions.js","../node_modules/@material-ui/core/esm/TablePagination/TablePagination.js","../node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDownward.js","../node_modules/@material-ui/core/esm/TableSortLabel/TableSortLabel.js","../node_modules/@material-ui/core/esm/Slider/ValueLabel.js","../node_modules/@material-ui/core/esm/Slider/Slider.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js"],"sourceRoot":"","sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Used for setting prototype methods that IE8 chokes on.\nvar DELETE = 'delete';\n\n// Constants describing the size of trie nodes.\nvar SHIFT = 5; // Resulted in best performance after ______?\nvar SIZE = 1 << SHIFT;\nvar MASK = SIZE - 1;\n\n// A consistent shared value representing \"not set\" which equals nothing other\n// than itself, and nothing that could be provided externally.\nvar NOT_SET = {};\n\n// Boolean references, Rough equivalent of `bool &`.\nfunction MakeRef() {\n  return { value: false };\n}\n\nfunction SetRef(ref) {\n  if (ref) {\n    ref.value = true;\n  }\n}\n\n// A function which returns a value representing an \"owner\" for transient writes\n// to tries. The return value will only ever equal itself, and will not equal\n// the return of any subsequent call of this function.\nfunction OwnerID() {}\n\nfunction ensureSize(iter) {\n  if (iter.size === undefined) {\n    iter.size = iter.__iterate(returnTrue);\n  }\n  return iter.size;\n}\n\nfunction wrapIndex(iter, index) {\n  // This implements \"is array index\" which the ECMAString spec defines as:\n  //\n  //     A String property name P is an array index if and only if\n  //     ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n  //     to 2^32−1.\n  //\n  // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n  if (typeof index !== 'number') {\n    var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n    if ('' + uint32Index !== index || uint32Index === 4294967295) {\n      return NaN;\n    }\n    index = uint32Index;\n  }\n  return index < 0 ? ensureSize(iter) + index : index;\n}\n\nfunction returnTrue() {\n  return true;\n}\n\nfunction wholeSlice(begin, end, size) {\n  return (\n    ((begin === 0 && !isNeg(begin)) ||\n      (size !== undefined && begin <= -size)) &&\n    (end === undefined || (size !== undefined && end >= size))\n  );\n}\n\nfunction resolveBegin(begin, size) {\n  return resolveIndex(begin, size, 0);\n}\n\nfunction resolveEnd(end, size) {\n  return resolveIndex(end, size, size);\n}\n\nfunction resolveIndex(index, size, defaultIndex) {\n  // Sanitize indices using this shorthand for ToInt32(argument)\n  // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n  return index === undefined\n    ? defaultIndex\n    : isNeg(index)\n      ? size === Infinity\n        ? size\n        : Math.max(0, size + index) | 0\n      : size === undefined || size === index\n        ? index\n        : Math.min(size, index) | 0;\n}\n\nfunction isNeg(value) {\n  // Account for -0 which is negative, but not less than 0.\n  return value < 0 || (value === 0 && 1 / value === -Infinity);\n}\n\n// Note: value is unchanged to not break immutable-devtools.\nvar IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@';\n\nfunction isCollection(maybeCollection) {\n  return Boolean(maybeCollection && maybeCollection[IS_COLLECTION_SYMBOL]);\n}\n\nvar IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@';\n\nfunction isKeyed(maybeKeyed) {\n  return Boolean(maybeKeyed && maybeKeyed[IS_KEYED_SYMBOL]);\n}\n\nvar IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@';\n\nfunction isIndexed(maybeIndexed) {\n  return Boolean(maybeIndexed && maybeIndexed[IS_INDEXED_SYMBOL]);\n}\n\nfunction isAssociative(maybeAssociative) {\n  return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n}\n\nvar Collection = function Collection(value) {\n  return isCollection(value) ? value : Seq(value);\n};\n\nvar KeyedCollection = /*@__PURE__*/(function (Collection) {\n  function KeyedCollection(value) {\n    return isKeyed(value) ? value : KeyedSeq(value);\n  }\n\n  if ( Collection ) KeyedCollection.__proto__ = Collection;\n  KeyedCollection.prototype = Object.create( Collection && Collection.prototype );\n  KeyedCollection.prototype.constructor = KeyedCollection;\n\n  return KeyedCollection;\n}(Collection));\n\nvar IndexedCollection = /*@__PURE__*/(function (Collection) {\n  function IndexedCollection(value) {\n    return isIndexed(value) ? value : IndexedSeq(value);\n  }\n\n  if ( Collection ) IndexedCollection.__proto__ = Collection;\n  IndexedCollection.prototype = Object.create( Collection && Collection.prototype );\n  IndexedCollection.prototype.constructor = IndexedCollection;\n\n  return IndexedCollection;\n}(Collection));\n\nvar SetCollection = /*@__PURE__*/(function (Collection) {\n  function SetCollection(value) {\n    return isCollection(value) && !isAssociative(value) ? value : SetSeq(value);\n  }\n\n  if ( Collection ) SetCollection.__proto__ = Collection;\n  SetCollection.prototype = Object.create( Collection && Collection.prototype );\n  SetCollection.prototype.constructor = SetCollection;\n\n  return SetCollection;\n}(Collection));\n\nCollection.Keyed = KeyedCollection;\nCollection.Indexed = IndexedCollection;\nCollection.Set = SetCollection;\n\nvar IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@';\n\nfunction isSeq(maybeSeq) {\n  return Boolean(maybeSeq && maybeSeq[IS_SEQ_SYMBOL]);\n}\n\nvar IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@';\n\nfunction isRecord(maybeRecord) {\n  return Boolean(maybeRecord && maybeRecord[IS_RECORD_SYMBOL]);\n}\n\nfunction isImmutable(maybeImmutable) {\n  return isCollection(maybeImmutable) || isRecord(maybeImmutable);\n}\n\nvar IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@';\n\nfunction isOrdered(maybeOrdered) {\n  return Boolean(maybeOrdered && maybeOrdered[IS_ORDERED_SYMBOL]);\n}\n\nvar ITERATE_KEYS = 0;\nvar ITERATE_VALUES = 1;\nvar ITERATE_ENTRIES = 2;\n\nvar REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\n\nvar ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n\nvar Iterator = function Iterator(next) {\n  this.next = next;\n};\n\nIterator.prototype.toString = function toString () {\n  return '[Iterator]';\n};\n\nIterator.KEYS = ITERATE_KEYS;\nIterator.VALUES = ITERATE_VALUES;\nIterator.ENTRIES = ITERATE_ENTRIES;\n\nIterator.prototype.inspect = Iterator.prototype.toSource = function() {\n  return this.toString();\n};\nIterator.prototype[ITERATOR_SYMBOL] = function() {\n  return this;\n};\n\nfunction iteratorValue(type, k, v, iteratorResult) {\n  var value = type === 0 ? k : type === 1 ? v : [k, v];\n  iteratorResult\n    ? (iteratorResult.value = value)\n    : (iteratorResult = {\n        value: value,\n        done: false,\n      });\n  return iteratorResult;\n}\n\nfunction iteratorDone() {\n  return { value: undefined, done: true };\n}\n\nfunction hasIterator(maybeIterable) {\n  return !!getIteratorFn(maybeIterable);\n}\n\nfunction isIterator(maybeIterator) {\n  return maybeIterator && typeof maybeIterator.next === 'function';\n}\n\nfunction getIterator(iterable) {\n  var iteratorFn = getIteratorFn(iterable);\n  return iteratorFn && iteratorFn.call(iterable);\n}\n\nfunction getIteratorFn(iterable) {\n  var iteratorFn =\n    iterable &&\n    ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) ||\n      iterable[FAUX_ITERATOR_SYMBOL]);\n  if (typeof iteratorFn === 'function') {\n    return iteratorFn;\n  }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isArrayLike(value) {\n  if (Array.isArray(value) || typeof value === 'string') {\n    return true;\n  }\n\n  return (\n    value &&\n    typeof value === 'object' &&\n    Number.isInteger(value.length) &&\n    value.length >= 0 &&\n    (value.length === 0\n      ? // Only {length: 0} is considered Array-like.\n        Object.keys(value).length === 1\n      : // An object is only Array-like if it has a property where the last value\n        // in the array-like may be found (which could be undefined).\n        value.hasOwnProperty(value.length - 1))\n  );\n}\n\nvar Seq = /*@__PURE__*/(function (Collection$$1) {\n  function Seq(value) {\n    return value === null || value === undefined\n      ? emptySequence()\n      : isImmutable(value)\n        ? value.toSeq()\n        : seqFromValue(value);\n  }\n\n  if ( Collection$$1 ) Seq.__proto__ = Collection$$1;\n  Seq.prototype = Object.create( Collection$$1 && Collection$$1.prototype );\n  Seq.prototype.constructor = Seq;\n\n  Seq.prototype.toSeq = function toSeq () {\n    return this;\n  };\n\n  Seq.prototype.toString = function toString () {\n    return this.__toString('Seq {', '}');\n  };\n\n  Seq.prototype.cacheResult = function cacheResult () {\n    if (!this._cache && this.__iterateUncached) {\n      this._cache = this.entrySeq().toArray();\n      this.size = this._cache.length;\n    }\n    return this;\n  };\n\n  // abstract __iterateUncached(fn, reverse)\n\n  Seq.prototype.__iterate = function __iterate (fn, reverse) {\n    var cache = this._cache;\n    if (cache) {\n      var size = cache.length;\n      var i = 0;\n      while (i !== size) {\n        var entry = cache[reverse ? size - ++i : i++];\n        if (fn(entry[1], entry[0], this) === false) {\n          break;\n        }\n      }\n      return i;\n    }\n    return this.__iterateUncached(fn, reverse);\n  };\n\n  // abstract __iteratorUncached(type, reverse)\n\n  Seq.prototype.__iterator = function __iterator (type, reverse) {\n    var cache = this._cache;\n    if (cache) {\n      var size = cache.length;\n      var i = 0;\n      return new Iterator(function () {\n        if (i === size) {\n          return iteratorDone();\n        }\n        var entry = cache[reverse ? size - ++i : i++];\n        return iteratorValue(type, entry[0], entry[1]);\n      });\n    }\n    return this.__iteratorUncached(type, reverse);\n  };\n\n  return Seq;\n}(Collection));\n\nvar KeyedSeq = /*@__PURE__*/(function (Seq) {\n  function KeyedSeq(value) {\n    return value === null || value === undefined\n      ? emptySequence().toKeyedSeq()\n      : isCollection(value)\n        ? isKeyed(value)\n          ? value.toSeq()\n          : value.fromEntrySeq()\n        : isRecord(value)\n          ? value.toSeq()\n          : keyedSeqFromValue(value);\n  }\n\n  if ( Seq ) KeyedSeq.__proto__ = Seq;\n  KeyedSeq.prototype = Object.create( Seq && Seq.prototype );\n  KeyedSeq.prototype.constructor = KeyedSeq;\n\n  KeyedSeq.prototype.toKeyedSeq = function toKeyedSeq () {\n    return this;\n  };\n\n  return KeyedSeq;\n}(Seq));\n\nvar IndexedSeq = /*@__PURE__*/(function (Seq) {\n  function IndexedSeq(value) {\n    return value === null || value === undefined\n      ? emptySequence()\n      : isCollection(value)\n        ? isKeyed(value)\n          ? value.entrySeq()\n          : value.toIndexedSeq()\n        : isRecord(value)\n          ? value.toSeq().entrySeq()\n          : indexedSeqFromValue(value);\n  }\n\n  if ( Seq ) IndexedSeq.__proto__ = Seq;\n  IndexedSeq.prototype = Object.create( Seq && Seq.prototype );\n  IndexedSeq.prototype.constructor = IndexedSeq;\n\n  IndexedSeq.of = function of (/*...values*/) {\n    return IndexedSeq(arguments);\n  };\n\n  IndexedSeq.prototype.toIndexedSeq = function toIndexedSeq () {\n    return this;\n  };\n\n  IndexedSeq.prototype.toString = function toString () {\n    return this.__toString('Seq [', ']');\n  };\n\n  return IndexedSeq;\n}(Seq));\n\nvar SetSeq = /*@__PURE__*/(function (Seq) {\n  function SetSeq(value) {\n    return (isCollection(value) && !isAssociative(value)\n      ? value\n      : IndexedSeq(value)\n    ).toSetSeq();\n  }\n\n  if ( Seq ) SetSeq.__proto__ = Seq;\n  SetSeq.prototype = Object.create( Seq && Seq.prototype );\n  SetSeq.prototype.constructor = SetSeq;\n\n  SetSeq.of = function of (/*...values*/) {\n    return SetSeq(arguments);\n  };\n\n  SetSeq.prototype.toSetSeq = function toSetSeq () {\n    return this;\n  };\n\n  return SetSeq;\n}(Seq));\n\nSeq.isSeq = isSeq;\nSeq.Keyed = KeyedSeq;\nSeq.Set = SetSeq;\nSeq.Indexed = IndexedSeq;\n\nSeq.prototype[IS_SEQ_SYMBOL] = true;\n\n// #pragma Root Sequences\n\nvar ArraySeq = /*@__PURE__*/(function (IndexedSeq) {\n  function ArraySeq(array) {\n    this._array = array;\n    this.size = array.length;\n  }\n\n  if ( IndexedSeq ) ArraySeq.__proto__ = IndexedSeq;\n  ArraySeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  ArraySeq.prototype.constructor = ArraySeq;\n\n  ArraySeq.prototype.get = function get (index, notSetValue) {\n    return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n  };\n\n  ArraySeq.prototype.__iterate = function __iterate (fn, reverse) {\n    var array = this._array;\n    var size = array.length;\n    var i = 0;\n    while (i !== size) {\n      var ii = reverse ? size - ++i : i++;\n      if (fn(array[ii], ii, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  ArraySeq.prototype.__iterator = function __iterator (type, reverse) {\n    var array = this._array;\n    var size = array.length;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var ii = reverse ? size - ++i : i++;\n      return iteratorValue(type, ii, array[ii]);\n    });\n  };\n\n  return ArraySeq;\n}(IndexedSeq));\n\nvar ObjectSeq = /*@__PURE__*/(function (KeyedSeq) {\n  function ObjectSeq(object) {\n    var keys = Object.keys(object);\n    this._object = object;\n    this._keys = keys;\n    this.size = keys.length;\n  }\n\n  if ( KeyedSeq ) ObjectSeq.__proto__ = KeyedSeq;\n  ObjectSeq.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );\n  ObjectSeq.prototype.constructor = ObjectSeq;\n\n  ObjectSeq.prototype.get = function get (key, notSetValue) {\n    if (notSetValue !== undefined && !this.has(key)) {\n      return notSetValue;\n    }\n    return this._object[key];\n  };\n\n  ObjectSeq.prototype.has = function has (key) {\n    return hasOwnProperty.call(this._object, key);\n  };\n\n  ObjectSeq.prototype.__iterate = function __iterate (fn, reverse) {\n    var object = this._object;\n    var keys = this._keys;\n    var size = keys.length;\n    var i = 0;\n    while (i !== size) {\n      var key = keys[reverse ? size - ++i : i++];\n      if (fn(object[key], key, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  ObjectSeq.prototype.__iterator = function __iterator (type, reverse) {\n    var object = this._object;\n    var keys = this._keys;\n    var size = keys.length;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var key = keys[reverse ? size - ++i : i++];\n      return iteratorValue(type, key, object[key]);\n    });\n  };\n\n  return ObjectSeq;\n}(KeyedSeq));\nObjectSeq.prototype[IS_ORDERED_SYMBOL] = true;\n\nvar CollectionSeq = /*@__PURE__*/(function (IndexedSeq) {\n  function CollectionSeq(collection) {\n    this._collection = collection;\n    this.size = collection.length || collection.size;\n  }\n\n  if ( IndexedSeq ) CollectionSeq.__proto__ = IndexedSeq;\n  CollectionSeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  CollectionSeq.prototype.constructor = CollectionSeq;\n\n  CollectionSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var collection = this._collection;\n    var iterator = getIterator(collection);\n    var iterations = 0;\n    if (isIterator(iterator)) {\n      var step;\n      while (!(step = iterator.next()).done) {\n        if (fn(step.value, iterations++, this) === false) {\n          break;\n        }\n      }\n    }\n    return iterations;\n  };\n\n  CollectionSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var collection = this._collection;\n    var iterator = getIterator(collection);\n    if (!isIterator(iterator)) {\n      return new Iterator(iteratorDone);\n    }\n    var iterations = 0;\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done ? step : iteratorValue(type, iterations++, step.value);\n    });\n  };\n\n  return CollectionSeq;\n}(IndexedSeq));\n\n// # pragma Helper functions\n\nvar EMPTY_SEQ;\n\nfunction emptySequence() {\n  return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n}\n\nfunction keyedSeqFromValue(value) {\n  var seq = Array.isArray(value)\n    ? new ArraySeq(value)\n    : hasIterator(value)\n      ? new CollectionSeq(value)\n      : undefined;\n  if (seq) {\n    return seq.fromEntrySeq();\n  }\n  if (typeof value === 'object') {\n    return new ObjectSeq(value);\n  }\n  throw new TypeError(\n    'Expected Array or collection object of [k, v] entries, or keyed object: ' +\n      value\n  );\n}\n\nfunction indexedSeqFromValue(value) {\n  var seq = maybeIndexedSeqFromValue(value);\n  if (seq) {\n    return seq;\n  }\n  throw new TypeError(\n    'Expected Array or collection object of values: ' + value\n  );\n}\n\nfunction seqFromValue(value) {\n  var seq = maybeIndexedSeqFromValue(value);\n  if (seq) {\n    return seq;\n  }\n  if (typeof value === 'object') {\n    return new ObjectSeq(value);\n  }\n  throw new TypeError(\n    'Expected Array or collection object of values, or keyed object: ' + value\n  );\n}\n\nfunction maybeIndexedSeqFromValue(value) {\n  return isArrayLike(value)\n    ? new ArraySeq(value)\n    : hasIterator(value)\n      ? new CollectionSeq(value)\n      : undefined;\n}\n\nvar IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@';\n\nfunction isMap(maybeMap) {\n  return Boolean(maybeMap && maybeMap[IS_MAP_SYMBOL]);\n}\n\nfunction isOrderedMap(maybeOrderedMap) {\n  return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n}\n\nfunction isValueObject(maybeValue) {\n  return Boolean(\n    maybeValue &&\n      typeof maybeValue.equals === 'function' &&\n      typeof maybeValue.hashCode === 'function'\n  );\n}\n\n/**\n * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n *\n * NaN is considered the same as NaN, however -0 and 0 are considered the same\n * value, which is different from the algorithm described by\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n *\n * This is extended further to allow Objects to describe the values they\n * represent, by way of `valueOf` or `equals` (and `hashCode`).\n *\n * Note: because of this extension, the key equality of Immutable.Map and the\n * value equality of Immutable.Set will differ from ES6 Map and Set.\n *\n * ### Defining custom values\n *\n * The easiest way to describe the value an object represents is by implementing\n * `valueOf`. For example, `Date` represents a value by returning a unix\n * timestamp for `valueOf`:\n *\n *     var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n *     var date2 = new Date(1234567890000);\n *     date1.valueOf(); // 1234567890000\n *     assert( date1 !== date2 );\n *     assert( Immutable.is( date1, date2 ) );\n *\n * Note: overriding `valueOf` may have other implications if you use this object\n * where JavaScript expects a primitive, such as implicit string coercion.\n *\n * For more complex types, especially collections, implementing `valueOf` may\n * not be performant. An alternative is to implement `equals` and `hashCode`.\n *\n * `equals` takes another object, presumably of similar type, and returns true\n * if it is equal. Equality is symmetrical, so the same result should be\n * returned if this and the argument are flipped.\n *\n *     assert( a.equals(b) === b.equals(a) );\n *\n * `hashCode` returns a 32bit integer number representing the object which will\n * be used to determine how to store the value object in a Map or Set. You must\n * provide both or neither methods, one must not exist without the other.\n *\n * Also, an important relationship between these methods must be upheld: if two\n * values are equal, they *must* return the same hashCode. If the values are not\n * equal, they might have the same hashCode; this is called a hash collision,\n * and while undesirable for performance reasons, it is acceptable.\n *\n *     if (a.equals(b)) {\n *       assert( a.hashCode() === b.hashCode() );\n *     }\n *\n * All Immutable collections are Value Objects: they implement `equals()`\n * and `hashCode()`.\n */\nfunction is(valueA, valueB) {\n  if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n    return true;\n  }\n  if (!valueA || !valueB) {\n    return false;\n  }\n  if (\n    typeof valueA.valueOf === 'function' &&\n    typeof valueB.valueOf === 'function'\n  ) {\n    valueA = valueA.valueOf();\n    valueB = valueB.valueOf();\n    if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n      return true;\n    }\n    if (!valueA || !valueB) {\n      return false;\n    }\n  }\n  return !!(\n    isValueObject(valueA) &&\n    isValueObject(valueB) &&\n    valueA.equals(valueB)\n  );\n}\n\nvar imul =\n  typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2\n    ? Math.imul\n    : function imul(a, b) {\n        a |= 0; // int\n        b |= 0; // int\n        var c = a & 0xffff;\n        var d = b & 0xffff;\n        // Shift by 0 fixes the sign on the high part.\n        return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int\n      };\n\n// v8 has an optimization for storing 31-bit signed numbers.\n// Values which have either 00 or 11 as the high order bits qualify.\n// This function drops the highest order bit in a signed number, maintaining\n// the sign bit.\nfunction smi(i32) {\n  return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff);\n}\n\nvar defaultValueOf = Object.prototype.valueOf;\n\nfunction hash(o) {\n  switch (typeof o) {\n    case 'boolean':\n      // The hash values for built-in constants are a 1 value for each 5-byte\n      // shift region expect for the first, which encodes the value. This\n      // reduces the odds of a hash collision for these common values.\n      return o ? 0x42108421 : 0x42108420;\n    case 'number':\n      return hashNumber(o);\n    case 'string':\n      return o.length > STRING_HASH_CACHE_MIN_STRLEN\n        ? cachedHashString(o)\n        : hashString(o);\n    case 'object':\n    case 'function':\n      if (o === null) {\n        return 0x42108422;\n      }\n      if (typeof o.hashCode === 'function') {\n        // Drop any high bits from accidentally long hash codes.\n        return smi(o.hashCode(o));\n      }\n      if (o.valueOf !== defaultValueOf && typeof o.valueOf === 'function') {\n        o = o.valueOf(o);\n      }\n      return hashJSObj(o);\n    case 'undefined':\n      return 0x42108423;\n    default:\n      if (typeof o.toString === 'function') {\n        return hashString(o.toString());\n      }\n      throw new Error('Value type ' + typeof o + ' cannot be hashed.');\n  }\n}\n\n// Compress arbitrarily large numbers into smi hashes.\nfunction hashNumber(n) {\n  if (n !== n || n === Infinity) {\n    return 0;\n  }\n  var hash = n | 0;\n  if (hash !== n) {\n    hash ^= n * 0xffffffff;\n  }\n  while (n > 0xffffffff) {\n    n /= 0xffffffff;\n    hash ^= n;\n  }\n  return smi(hash);\n}\n\nfunction cachedHashString(string) {\n  var hashed = stringHashCache[string];\n  if (hashed === undefined) {\n    hashed = hashString(string);\n    if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n      STRING_HASH_CACHE_SIZE = 0;\n      stringHashCache = {};\n    }\n    STRING_HASH_CACHE_SIZE++;\n    stringHashCache[string] = hashed;\n  }\n  return hashed;\n}\n\n// http://jsperf.com/hashing-strings\nfunction hashString(string) {\n  // This is the hash from JVM\n  // The hash code for a string is computed as\n  // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n  // where s[i] is the ith character of the string and n is the length of\n  // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n  // (exclusive) by dropping high bits.\n  var hashed = 0;\n  for (var ii = 0; ii < string.length; ii++) {\n    hashed = (31 * hashed + string.charCodeAt(ii)) | 0;\n  }\n  return smi(hashed);\n}\n\nfunction hashJSObj(obj) {\n  var hashed;\n  if (usingWeakMap) {\n    hashed = weakMap.get(obj);\n    if (hashed !== undefined) {\n      return hashed;\n    }\n  }\n\n  hashed = obj[UID_HASH_KEY];\n  if (hashed !== undefined) {\n    return hashed;\n  }\n\n  if (!canDefineProperty) {\n    hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n    if (hashed !== undefined) {\n      return hashed;\n    }\n\n    hashed = getIENodeHash(obj);\n    if (hashed !== undefined) {\n      return hashed;\n    }\n  }\n\n  hashed = ++objHashUID;\n  if (objHashUID & 0x40000000) {\n    objHashUID = 0;\n  }\n\n  if (usingWeakMap) {\n    weakMap.set(obj, hashed);\n  } else if (isExtensible !== undefined && isExtensible(obj) === false) {\n    throw new Error('Non-extensible objects are not allowed as keys.');\n  } else if (canDefineProperty) {\n    Object.defineProperty(obj, UID_HASH_KEY, {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: hashed,\n    });\n  } else if (\n    obj.propertyIsEnumerable !== undefined &&\n    obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable\n  ) {\n    // Since we can't define a non-enumerable property on the object\n    // we'll hijack one of the less-used non-enumerable properties to\n    // save our hash on it. Since this is a function it will not show up in\n    // `JSON.stringify` which is what we want.\n    obj.propertyIsEnumerable = function() {\n      return this.constructor.prototype.propertyIsEnumerable.apply(\n        this,\n        arguments\n      );\n    };\n    obj.propertyIsEnumerable[UID_HASH_KEY] = hashed;\n  } else if (obj.nodeType !== undefined) {\n    // At this point we couldn't get the IE `uniqueID` to use as a hash\n    // and we couldn't use a non-enumerable property to exploit the\n    // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n    // itself.\n    obj[UID_HASH_KEY] = hashed;\n  } else {\n    throw new Error('Unable to set a non-enumerable property on object.');\n  }\n\n  return hashed;\n}\n\n// Get references to ES5 object methods.\nvar isExtensible = Object.isExtensible;\n\n// True if Object.defineProperty works as expected. IE8 fails this test.\nvar canDefineProperty = (function() {\n  try {\n    Object.defineProperty({}, '@', {});\n    return true;\n  } catch (e) {\n    return false;\n  }\n})();\n\n// IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n// and avoid memory leaks from the IE cloneNode bug.\nfunction getIENodeHash(node) {\n  if (node && node.nodeType > 0) {\n    switch (node.nodeType) {\n      case 1: // Element\n        return node.uniqueID;\n      case 9: // Document\n        return node.documentElement && node.documentElement.uniqueID;\n    }\n  }\n}\n\n// If possible, use a WeakMap.\nvar usingWeakMap = typeof WeakMap === 'function';\nvar weakMap;\nif (usingWeakMap) {\n  weakMap = new WeakMap();\n}\n\nvar objHashUID = 0;\n\nvar UID_HASH_KEY = '__immutablehash__';\nif (typeof Symbol === 'function') {\n  UID_HASH_KEY = Symbol(UID_HASH_KEY);\n}\n\nvar STRING_HASH_CACHE_MIN_STRLEN = 16;\nvar STRING_HASH_CACHE_MAX_SIZE = 255;\nvar STRING_HASH_CACHE_SIZE = 0;\nvar stringHashCache = {};\n\nvar ToKeyedSequence = /*@__PURE__*/(function (KeyedSeq$$1) {\n  function ToKeyedSequence(indexed, useKeys) {\n    this._iter = indexed;\n    this._useKeys = useKeys;\n    this.size = indexed.size;\n  }\n\n  if ( KeyedSeq$$1 ) ToKeyedSequence.__proto__ = KeyedSeq$$1;\n  ToKeyedSequence.prototype = Object.create( KeyedSeq$$1 && KeyedSeq$$1.prototype );\n  ToKeyedSequence.prototype.constructor = ToKeyedSequence;\n\n  ToKeyedSequence.prototype.get = function get (key, notSetValue) {\n    return this._iter.get(key, notSetValue);\n  };\n\n  ToKeyedSequence.prototype.has = function has (key) {\n    return this._iter.has(key);\n  };\n\n  ToKeyedSequence.prototype.valueSeq = function valueSeq () {\n    return this._iter.valueSeq();\n  };\n\n  ToKeyedSequence.prototype.reverse = function reverse () {\n    var this$1 = this;\n\n    var reversedSequence = reverseFactory(this, true);\n    if (!this._useKeys) {\n      reversedSequence.valueSeq = function () { return this$1._iter.toSeq().reverse(); };\n    }\n    return reversedSequence;\n  };\n\n  ToKeyedSequence.prototype.map = function map (mapper, context) {\n    var this$1 = this;\n\n    var mappedSequence = mapFactory(this, mapper, context);\n    if (!this._useKeys) {\n      mappedSequence.valueSeq = function () { return this$1._iter.toSeq().map(mapper, context); };\n    }\n    return mappedSequence;\n  };\n\n  ToKeyedSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    return this._iter.__iterate(function (v, k) { return fn(v, k, this$1); }, reverse);\n  };\n\n  ToKeyedSequence.prototype.__iterator = function __iterator (type, reverse) {\n    return this._iter.__iterator(type, reverse);\n  };\n\n  return ToKeyedSequence;\n}(KeyedSeq));\nToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true;\n\nvar ToIndexedSequence = /*@__PURE__*/(function (IndexedSeq$$1) {\n  function ToIndexedSequence(iter) {\n    this._iter = iter;\n    this.size = iter.size;\n  }\n\n  if ( IndexedSeq$$1 ) ToIndexedSequence.__proto__ = IndexedSeq$$1;\n  ToIndexedSequence.prototype = Object.create( IndexedSeq$$1 && IndexedSeq$$1.prototype );\n  ToIndexedSequence.prototype.constructor = ToIndexedSequence;\n\n  ToIndexedSequence.prototype.includes = function includes (value) {\n    return this._iter.includes(value);\n  };\n\n  ToIndexedSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    var i = 0;\n    reverse && ensureSize(this);\n    return this._iter.__iterate(\n      function (v) { return fn(v, reverse ? this$1.size - ++i : i++, this$1); },\n      reverse\n    );\n  };\n\n  ToIndexedSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var this$1 = this;\n\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    var i = 0;\n    reverse && ensureSize(this);\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done\n        ? step\n        : iteratorValue(\n            type,\n            reverse ? this$1.size - ++i : i++,\n            step.value,\n            step\n          );\n    });\n  };\n\n  return ToIndexedSequence;\n}(IndexedSeq));\n\nvar ToSetSequence = /*@__PURE__*/(function (SetSeq$$1) {\n  function ToSetSequence(iter) {\n    this._iter = iter;\n    this.size = iter.size;\n  }\n\n  if ( SetSeq$$1 ) ToSetSequence.__proto__ = SetSeq$$1;\n  ToSetSequence.prototype = Object.create( SetSeq$$1 && SetSeq$$1.prototype );\n  ToSetSequence.prototype.constructor = ToSetSequence;\n\n  ToSetSequence.prototype.has = function has (key) {\n    return this._iter.includes(key);\n  };\n\n  ToSetSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    return this._iter.__iterate(function (v) { return fn(v, v, this$1); }, reverse);\n  };\n\n  ToSetSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done\n        ? step\n        : iteratorValue(type, step.value, step.value, step);\n    });\n  };\n\n  return ToSetSequence;\n}(SetSeq));\n\nvar FromEntriesSequence = /*@__PURE__*/(function (KeyedSeq$$1) {\n  function FromEntriesSequence(entries) {\n    this._iter = entries;\n    this.size = entries.size;\n  }\n\n  if ( KeyedSeq$$1 ) FromEntriesSequence.__proto__ = KeyedSeq$$1;\n  FromEntriesSequence.prototype = Object.create( KeyedSeq$$1 && KeyedSeq$$1.prototype );\n  FromEntriesSequence.prototype.constructor = FromEntriesSequence;\n\n  FromEntriesSequence.prototype.entrySeq = function entrySeq () {\n    return this._iter.toSeq();\n  };\n\n  FromEntriesSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    return this._iter.__iterate(function (entry) {\n      // Check if entry exists first so array access doesn't throw for holes\n      // in the parent iteration.\n      if (entry) {\n        validateEntry(entry);\n        var indexedCollection = isCollection(entry);\n        return fn(\n          indexedCollection ? entry.get(1) : entry[1],\n          indexedCollection ? entry.get(0) : entry[0],\n          this$1\n        );\n      }\n    }, reverse);\n  };\n\n  FromEntriesSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    return new Iterator(function () {\n      while (true) {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        // Check if entry exists first so array access doesn't throw for holes\n        // in the parent iteration.\n        if (entry) {\n          validateEntry(entry);\n          var indexedCollection = isCollection(entry);\n          return iteratorValue(\n            type,\n            indexedCollection ? entry.get(0) : entry[0],\n            indexedCollection ? entry.get(1) : entry[1],\n            step\n          );\n        }\n      }\n    });\n  };\n\n  return FromEntriesSequence;\n}(KeyedSeq));\n\nToIndexedSequence.prototype.cacheResult = ToKeyedSequence.prototype.cacheResult = ToSetSequence.prototype.cacheResult = FromEntriesSequence.prototype.cacheResult = cacheResultThrough;\n\nfunction flipFactory(collection) {\n  var flipSequence = makeSequence(collection);\n  flipSequence._iter = collection;\n  flipSequence.size = collection.size;\n  flipSequence.flip = function () { return collection; };\n  flipSequence.reverse = function() {\n    var reversedSequence = collection.reverse.apply(this); // super.reverse()\n    reversedSequence.flip = function () { return collection.reverse(); };\n    return reversedSequence;\n  };\n  flipSequence.has = function (key) { return collection.includes(key); };\n  flipSequence.includes = function (key) { return collection.has(key); };\n  flipSequence.cacheResult = cacheResultThrough;\n  flipSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    return collection.__iterate(function (v, k) { return fn(k, v, this$1) !== false; }, reverse);\n  };\n  flipSequence.__iteratorUncached = function(type, reverse) {\n    if (type === ITERATE_ENTRIES) {\n      var iterator = collection.__iterator(type, reverse);\n      return new Iterator(function () {\n        var step = iterator.next();\n        if (!step.done) {\n          var k = step.value[0];\n          step.value[0] = step.value[1];\n          step.value[1] = k;\n        }\n        return step;\n      });\n    }\n    return collection.__iterator(\n      type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,\n      reverse\n    );\n  };\n  return flipSequence;\n}\n\nfunction mapFactory(collection, mapper, context) {\n  var mappedSequence = makeSequence(collection);\n  mappedSequence.size = collection.size;\n  mappedSequence.has = function (key) { return collection.has(key); };\n  mappedSequence.get = function (key, notSetValue) {\n    var v = collection.get(key, NOT_SET);\n    return v === NOT_SET\n      ? notSetValue\n      : mapper.call(context, v, key, collection);\n  };\n  mappedSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    return collection.__iterate(\n      function (v, k, c) { return fn(mapper.call(context, v, k, c), k, this$1) !== false; },\n      reverse\n    );\n  };\n  mappedSequence.__iteratorUncached = function(type, reverse) {\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      var key = entry[0];\n      return iteratorValue(\n        type,\n        key,\n        mapper.call(context, entry[1], key, collection),\n        step\n      );\n    });\n  };\n  return mappedSequence;\n}\n\nfunction reverseFactory(collection, useKeys) {\n  var this$1 = this;\n\n  var reversedSequence = makeSequence(collection);\n  reversedSequence._iter = collection;\n  reversedSequence.size = collection.size;\n  reversedSequence.reverse = function () { return collection; };\n  if (collection.flip) {\n    reversedSequence.flip = function() {\n      var flipSequence = flipFactory(collection);\n      flipSequence.reverse = function () { return collection.flip(); };\n      return flipSequence;\n    };\n  }\n  reversedSequence.get = function (key, notSetValue) { return collection.get(useKeys ? key : -1 - key, notSetValue); };\n  reversedSequence.has = function (key) { return collection.has(useKeys ? key : -1 - key); };\n  reversedSequence.includes = function (value) { return collection.includes(value); };\n  reversedSequence.cacheResult = cacheResultThrough;\n  reversedSequence.__iterate = function(fn, reverse) {\n    var this$1 = this;\n\n    var i = 0;\n    reverse && ensureSize(collection);\n    return collection.__iterate(\n      function (v, k) { return fn(v, useKeys ? k : reverse ? this$1.size - ++i : i++, this$1); },\n      !reverse\n    );\n  };\n  reversedSequence.__iterator = function (type, reverse) {\n    var i = 0;\n    reverse && ensureSize(collection);\n    var iterator = collection.__iterator(ITERATE_ENTRIES, !reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      return iteratorValue(\n        type,\n        useKeys ? entry[0] : reverse ? this$1.size - ++i : i++,\n        entry[1],\n        step\n      );\n    });\n  };\n  return reversedSequence;\n}\n\nfunction filterFactory(collection, predicate, context, useKeys) {\n  var filterSequence = makeSequence(collection);\n  if (useKeys) {\n    filterSequence.has = function (key) {\n      var v = collection.get(key, NOT_SET);\n      return v !== NOT_SET && !!predicate.call(context, v, key, collection);\n    };\n    filterSequence.get = function (key, notSetValue) {\n      var v = collection.get(key, NOT_SET);\n      return v !== NOT_SET && predicate.call(context, v, key, collection)\n        ? v\n        : notSetValue;\n    };\n  }\n  filterSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    var iterations = 0;\n    collection.__iterate(function (v, k, c) {\n      if (predicate.call(context, v, k, c)) {\n        iterations++;\n        return fn(v, useKeys ? k : iterations - 1, this$1);\n      }\n    }, reverse);\n    return iterations;\n  };\n  filterSequence.__iteratorUncached = function(type, reverse) {\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var iterations = 0;\n    return new Iterator(function () {\n      while (true) {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var key = entry[0];\n        var value = entry[1];\n        if (predicate.call(context, value, key, collection)) {\n          return iteratorValue(type, useKeys ? key : iterations++, value, step);\n        }\n      }\n    });\n  };\n  return filterSequence;\n}\n\nfunction countByFactory(collection, grouper, context) {\n  var groups = Map().asMutable();\n  collection.__iterate(function (v, k) {\n    groups.update(grouper.call(context, v, k, collection), 0, function (a) { return a + 1; });\n  });\n  return groups.asImmutable();\n}\n\nfunction groupByFactory(collection, grouper, context) {\n  var isKeyedIter = isKeyed(collection);\n  var groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable();\n  collection.__iterate(function (v, k) {\n    groups.update(\n      grouper.call(context, v, k, collection),\n      function (a) { return ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a); }\n    );\n  });\n  var coerce = collectionClass(collection);\n  return groups.map(function (arr) { return reify(collection, coerce(arr)); }).asImmutable();\n}\n\nfunction sliceFactory(collection, begin, end, useKeys) {\n  var originalSize = collection.size;\n\n  if (wholeSlice(begin, end, originalSize)) {\n    return collection;\n  }\n\n  var resolvedBegin = resolveBegin(begin, originalSize);\n  var resolvedEnd = resolveEnd(end, originalSize);\n\n  // begin or end will be NaN if they were provided as negative numbers and\n  // this collection's size is unknown. In that case, cache first so there is\n  // a known size and these do not resolve to NaN.\n  if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {\n    return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys);\n  }\n\n  // Note: resolvedEnd is undefined when the original sequence's length is\n  // unknown and this slice did not supply an end and should contain all\n  // elements after resolvedBegin.\n  // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n  var resolvedSize = resolvedEnd - resolvedBegin;\n  var sliceSize;\n  if (resolvedSize === resolvedSize) {\n    sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n  }\n\n  var sliceSeq = makeSequence(collection);\n\n  // If collection.size is undefined, the size of the realized sliceSeq is\n  // unknown at this point unless the number of items to slice is 0\n  sliceSeq.size =\n    sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined;\n\n  if (!useKeys && isSeq(collection) && sliceSize >= 0) {\n    sliceSeq.get = function(index, notSetValue) {\n      index = wrapIndex(this, index);\n      return index >= 0 && index < sliceSize\n        ? collection.get(index + resolvedBegin, notSetValue)\n        : notSetValue;\n    };\n  }\n\n  sliceSeq.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    if (sliceSize === 0) {\n      return 0;\n    }\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var skipped = 0;\n    var isSkipping = true;\n    var iterations = 0;\n    collection.__iterate(function (v, k) {\n      if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n        iterations++;\n        return (\n          fn(v, useKeys ? k : iterations - 1, this$1) !== false &&\n          iterations !== sliceSize\n        );\n      }\n    });\n    return iterations;\n  };\n\n  sliceSeq.__iteratorUncached = function(type, reverse) {\n    if (sliceSize !== 0 && reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    // Don't bother instantiating parent iterator if taking 0.\n    if (sliceSize === 0) {\n      return new Iterator(iteratorDone);\n    }\n    var iterator = collection.__iterator(type, reverse);\n    var skipped = 0;\n    var iterations = 0;\n    return new Iterator(function () {\n      while (skipped++ < resolvedBegin) {\n        iterator.next();\n      }\n      if (++iterations > sliceSize) {\n        return iteratorDone();\n      }\n      var step = iterator.next();\n      if (useKeys || type === ITERATE_VALUES || step.done) {\n        return step;\n      }\n      if (type === ITERATE_KEYS) {\n        return iteratorValue(type, iterations - 1, undefined, step);\n      }\n      return iteratorValue(type, iterations - 1, step.value[1], step);\n    });\n  };\n\n  return sliceSeq;\n}\n\nfunction takeWhileFactory(collection, predicate, context) {\n  var takeSequence = makeSequence(collection);\n  takeSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var iterations = 0;\n    collection.__iterate(\n      function (v, k, c) { return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$1); }\n    );\n    return iterations;\n  };\n  takeSequence.__iteratorUncached = function(type, reverse) {\n    var this$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var iterating = true;\n    return new Iterator(function () {\n      if (!iterating) {\n        return iteratorDone();\n      }\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      var k = entry[0];\n      var v = entry[1];\n      if (!predicate.call(context, v, k, this$1)) {\n        iterating = false;\n        return iteratorDone();\n      }\n      return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n    });\n  };\n  return takeSequence;\n}\n\nfunction skipWhileFactory(collection, predicate, context, useKeys) {\n  var skipSequence = makeSequence(collection);\n  skipSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var isSkipping = true;\n    var iterations = 0;\n    collection.__iterate(function (v, k, c) {\n      if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n        iterations++;\n        return fn(v, useKeys ? k : iterations - 1, this$1);\n      }\n    });\n    return iterations;\n  };\n  skipSequence.__iteratorUncached = function(type, reverse) {\n    var this$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var skipping = true;\n    var iterations = 0;\n    return new Iterator(function () {\n      var step;\n      var k;\n      var v;\n      do {\n        step = iterator.next();\n        if (step.done) {\n          if (useKeys || type === ITERATE_VALUES) {\n            return step;\n          }\n          if (type === ITERATE_KEYS) {\n            return iteratorValue(type, iterations++, undefined, step);\n          }\n          return iteratorValue(type, iterations++, step.value[1], step);\n        }\n        var entry = step.value;\n        k = entry[0];\n        v = entry[1];\n        skipping && (skipping = predicate.call(context, v, k, this$1));\n      } while (skipping);\n      return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n    });\n  };\n  return skipSequence;\n}\n\nfunction concatFactory(collection, values) {\n  var isKeyedCollection = isKeyed(collection);\n  var iters = [collection]\n    .concat(values)\n    .map(function (v) {\n      if (!isCollection(v)) {\n        v = isKeyedCollection\n          ? keyedSeqFromValue(v)\n          : indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n      } else if (isKeyedCollection) {\n        v = KeyedCollection(v);\n      }\n      return v;\n    })\n    .filter(function (v) { return v.size !== 0; });\n\n  if (iters.length === 0) {\n    return collection;\n  }\n\n  if (iters.length === 1) {\n    var singleton = iters[0];\n    if (\n      singleton === collection ||\n      (isKeyedCollection && isKeyed(singleton)) ||\n      (isIndexed(collection) && isIndexed(singleton))\n    ) {\n      return singleton;\n    }\n  }\n\n  var concatSeq = new ArraySeq(iters);\n  if (isKeyedCollection) {\n    concatSeq = concatSeq.toKeyedSeq();\n  } else if (!isIndexed(collection)) {\n    concatSeq = concatSeq.toSetSeq();\n  }\n  concatSeq = concatSeq.flatten(true);\n  concatSeq.size = iters.reduce(function (sum, seq) {\n    if (sum !== undefined) {\n      var size = seq.size;\n      if (size !== undefined) {\n        return sum + size;\n      }\n    }\n  }, 0);\n  return concatSeq;\n}\n\nfunction flattenFactory(collection, depth, useKeys) {\n  var flatSequence = makeSequence(collection);\n  flatSequence.__iterateUncached = function(fn, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var iterations = 0;\n    var stopped = false;\n    function flatDeep(iter, currentDepth) {\n      iter.__iterate(function (v, k) {\n        if ((!depth || currentDepth < depth) && isCollection(v)) {\n          flatDeep(v, currentDepth + 1);\n        } else {\n          iterations++;\n          if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) {\n            stopped = true;\n          }\n        }\n        return !stopped;\n      }, reverse);\n    }\n    flatDeep(collection, 0);\n    return iterations;\n  };\n  flatSequence.__iteratorUncached = function(type, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(type, reverse);\n    var stack = [];\n    var iterations = 0;\n    return new Iterator(function () {\n      while (iterator) {\n        var step = iterator.next();\n        if (step.done !== false) {\n          iterator = stack.pop();\n          continue;\n        }\n        var v = step.value;\n        if (type === ITERATE_ENTRIES) {\n          v = v[1];\n        }\n        if ((!depth || stack.length < depth) && isCollection(v)) {\n          stack.push(iterator);\n          iterator = v.__iterator(type, reverse);\n        } else {\n          return useKeys ? step : iteratorValue(type, iterations++, v, step);\n        }\n      }\n      return iteratorDone();\n    });\n  };\n  return flatSequence;\n}\n\nfunction flatMapFactory(collection, mapper, context) {\n  var coerce = collectionClass(collection);\n  return collection\n    .toSeq()\n    .map(function (v, k) { return coerce(mapper.call(context, v, k, collection)); })\n    .flatten(true);\n}\n\nfunction interposeFactory(collection, separator) {\n  var interposedSequence = makeSequence(collection);\n  interposedSequence.size = collection.size && collection.size * 2 - 1;\n  interposedSequence.__iterateUncached = function(fn, reverse) {\n    var this$1 = this;\n\n    var iterations = 0;\n    collection.__iterate(\n      function (v) { return (!iterations || fn(separator, iterations++, this$1) !== false) &&\n        fn(v, iterations++, this$1) !== false; },\n      reverse\n    );\n    return iterations;\n  };\n  interposedSequence.__iteratorUncached = function(type, reverse) {\n    var iterator = collection.__iterator(ITERATE_VALUES, reverse);\n    var iterations = 0;\n    var step;\n    return new Iterator(function () {\n      if (!step || iterations % 2) {\n        step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n      }\n      return iterations % 2\n        ? iteratorValue(type, iterations++, separator)\n        : iteratorValue(type, iterations++, step.value, step);\n    });\n  };\n  return interposedSequence;\n}\n\nfunction sortFactory(collection, comparator, mapper) {\n  if (!comparator) {\n    comparator = defaultComparator;\n  }\n  var isKeyedCollection = isKeyed(collection);\n  var index = 0;\n  var entries = collection\n    .toSeq()\n    .map(function (v, k) { return [k, v, index++, mapper ? mapper(v, k, collection) : v]; })\n    .valueSeq()\n    .toArray();\n  entries.sort(function (a, b) { return comparator(a[3], b[3]) || a[2] - b[2]; }).forEach(\n    isKeyedCollection\n      ? function (v, i) {\n          entries[i].length = 2;\n        }\n      : function (v, i) {\n          entries[i] = v[1];\n        }\n  );\n  return isKeyedCollection\n    ? KeyedSeq(entries)\n    : isIndexed(collection)\n      ? IndexedSeq(entries)\n      : SetSeq(entries);\n}\n\nfunction maxFactory(collection, comparator, mapper) {\n  if (!comparator) {\n    comparator = defaultComparator;\n  }\n  if (mapper) {\n    var entry = collection\n      .toSeq()\n      .map(function (v, k) { return [v, mapper(v, k, collection)]; })\n      .reduce(function (a, b) { return (maxCompare(comparator, a[1], b[1]) ? b : a); });\n    return entry && entry[0];\n  }\n  return collection.reduce(function (a, b) { return (maxCompare(comparator, a, b) ? b : a); });\n}\n\nfunction maxCompare(comparator, a, b) {\n  var comp = comparator(b, a);\n  // b is considered the new max if the comparator declares them equal, but\n  // they are not equal and b is in fact a nullish value.\n  return (\n    (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) ||\n    comp > 0\n  );\n}\n\nfunction zipWithFactory(keyIter, zipper, iters, zipAll) {\n  var zipSequence = makeSequence(keyIter);\n  var sizes = new ArraySeq(iters).map(function (i) { return i.size; });\n  zipSequence.size = zipAll ? sizes.max() : sizes.min();\n  // Note: this a generic base implementation of __iterate in terms of\n  // __iterator which may be more generically useful in the future.\n  zipSequence.__iterate = function(fn, reverse) {\n    /* generic:\n    var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n    var step;\n    var iterations = 0;\n    while (!(step = iterator.next()).done) {\n      iterations++;\n      if (fn(step.value[1], step.value[0], this) === false) {\n        break;\n      }\n    }\n    return iterations;\n    */\n    // indexed:\n    var iterator = this.__iterator(ITERATE_VALUES, reverse);\n    var step;\n    var iterations = 0;\n    while (!(step = iterator.next()).done) {\n      if (fn(step.value, iterations++, this) === false) {\n        break;\n      }\n    }\n    return iterations;\n  };\n  zipSequence.__iteratorUncached = function(type, reverse) {\n    var iterators = iters.map(\n      function (i) { return ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)); }\n    );\n    var iterations = 0;\n    var isDone = false;\n    return new Iterator(function () {\n      var steps;\n      if (!isDone) {\n        steps = iterators.map(function (i) { return i.next(); });\n        isDone = zipAll ? steps.every(function (s) { return s.done; }) : steps.some(function (s) { return s.done; });\n      }\n      if (isDone) {\n        return iteratorDone();\n      }\n      return iteratorValue(\n        type,\n        iterations++,\n        zipper.apply(null, steps.map(function (s) { return s.value; }))\n      );\n    });\n  };\n  return zipSequence;\n}\n\n// #pragma Helper Functions\n\nfunction reify(iter, seq) {\n  return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq);\n}\n\nfunction validateEntry(entry) {\n  if (entry !== Object(entry)) {\n    throw new TypeError('Expected [K, V] tuple: ' + entry);\n  }\n}\n\nfunction collectionClass(collection) {\n  return isKeyed(collection)\n    ? KeyedCollection\n    : isIndexed(collection)\n      ? IndexedCollection\n      : SetCollection;\n}\n\nfunction makeSequence(collection) {\n  return Object.create(\n    (isKeyed(collection)\n      ? KeyedSeq\n      : isIndexed(collection)\n        ? IndexedSeq\n        : SetSeq\n    ).prototype\n  );\n}\n\nfunction cacheResultThrough() {\n  if (this._iter.cacheResult) {\n    this._iter.cacheResult();\n    this.size = this._iter.size;\n    return this;\n  }\n  return Seq.prototype.cacheResult.call(this);\n}\n\nfunction defaultComparator(a, b) {\n  if (a === undefined && b === undefined) {\n    return 0;\n  }\n\n  if (a === undefined) {\n    return 1;\n  }\n\n  if (b === undefined) {\n    return -1;\n  }\n\n  return a > b ? 1 : a < b ? -1 : 0;\n}\n\n// http://jsperf.com/copy-array-inline\nfunction arrCopy(arr, offset) {\n  offset = offset || 0;\n  var len = Math.max(0, arr.length - offset);\n  var newArr = new Array(len);\n  for (var ii = 0; ii < len; ii++) {\n    newArr[ii] = arr[ii + offset];\n  }\n  return newArr;\n}\n\nfunction invariant(condition, error) {\n  if (!condition) { throw new Error(error); }\n}\n\nfunction assertNotInfinite(size) {\n  invariant(\n    size !== Infinity,\n    'Cannot perform this action with an infinite size.'\n  );\n}\n\nfunction coerceKeyPath(keyPath) {\n  if (isArrayLike(keyPath) && typeof keyPath !== 'string') {\n    return keyPath;\n  }\n  if (isOrdered(keyPath)) {\n    return keyPath.toArray();\n  }\n  throw new TypeError(\n    'Invalid keyPath: expected Ordered Collection or Array: ' + keyPath\n  );\n}\n\nfunction isPlainObj(value) {\n  return (\n    value &&\n    (typeof value.constructor !== 'function' ||\n      value.constructor.name === 'Object')\n  );\n}\n\n/**\n * Returns true if the value is a potentially-persistent data structure, either\n * provided by Immutable.js or a plain Array or Object.\n */\nfunction isDataStructure(value) {\n  return (\n    typeof value === 'object' &&\n    (isImmutable(value) || Array.isArray(value) || isPlainObj(value))\n  );\n}\n\n/**\n * Converts a value to a string, adding quotes if a string was provided.\n */\nfunction quoteString(value) {\n  try {\n    return typeof value === 'string' ? JSON.stringify(value) : String(value);\n  } catch (_ignoreError) {\n    return JSON.stringify(value);\n  }\n}\n\nfunction has(collection, key) {\n  return isImmutable(collection)\n    ? collection.has(key)\n    : isDataStructure(collection) && hasOwnProperty.call(collection, key);\n}\n\nfunction get(collection, key, notSetValue) {\n  return isImmutable(collection)\n    ? collection.get(key, notSetValue)\n    : !has(collection, key)\n      ? notSetValue\n      : typeof collection.get === 'function'\n        ? collection.get(key)\n        : collection[key];\n}\n\nfunction shallowCopy(from) {\n  if (Array.isArray(from)) {\n    return arrCopy(from);\n  }\n  var to = {};\n  for (var key in from) {\n    if (hasOwnProperty.call(from, key)) {\n      to[key] = from[key];\n    }\n  }\n  return to;\n}\n\nfunction remove(collection, key) {\n  if (!isDataStructure(collection)) {\n    throw new TypeError(\n      'Cannot update non-data-structure value: ' + collection\n    );\n  }\n  if (isImmutable(collection)) {\n    if (!collection.remove) {\n      throw new TypeError(\n        'Cannot update immutable value without .remove() method: ' + collection\n      );\n    }\n    return collection.remove(key);\n  }\n  if (!hasOwnProperty.call(collection, key)) {\n    return collection;\n  }\n  var collectionCopy = shallowCopy(collection);\n  if (Array.isArray(collectionCopy)) {\n    collectionCopy.splice(key, 1);\n  } else {\n    delete collectionCopy[key];\n  }\n  return collectionCopy;\n}\n\nfunction set(collection, key, value) {\n  if (!isDataStructure(collection)) {\n    throw new TypeError(\n      'Cannot update non-data-structure value: ' + collection\n    );\n  }\n  if (isImmutable(collection)) {\n    if (!collection.set) {\n      throw new TypeError(\n        'Cannot update immutable value without .set() method: ' + collection\n      );\n    }\n    return collection.set(key, value);\n  }\n  if (hasOwnProperty.call(collection, key) && value === collection[key]) {\n    return collection;\n  }\n  var collectionCopy = shallowCopy(collection);\n  collectionCopy[key] = value;\n  return collectionCopy;\n}\n\nfunction updateIn(collection, keyPath, notSetValue, updater) {\n  if (!updater) {\n    updater = notSetValue;\n    notSetValue = undefined;\n  }\n  var updatedValue = updateInDeeply(\n    isImmutable(collection),\n    collection,\n    coerceKeyPath(keyPath),\n    0,\n    notSetValue,\n    updater\n  );\n  return updatedValue === NOT_SET ? notSetValue : updatedValue;\n}\n\nfunction updateInDeeply(\n  inImmutable,\n  existing,\n  keyPath,\n  i,\n  notSetValue,\n  updater\n) {\n  var wasNotSet = existing === NOT_SET;\n  if (i === keyPath.length) {\n    var existingValue = wasNotSet ? notSetValue : existing;\n    var newValue = updater(existingValue);\n    return newValue === existingValue ? existing : newValue;\n  }\n  if (!wasNotSet && !isDataStructure(existing)) {\n    throw new TypeError(\n      'Cannot update within non-data-structure value in path [' +\n        keyPath.slice(0, i).map(quoteString) +\n        ']: ' +\n        existing\n    );\n  }\n  var key = keyPath[i];\n  var nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET);\n  var nextUpdated = updateInDeeply(\n    nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting),\n    nextExisting,\n    keyPath,\n    i + 1,\n    notSetValue,\n    updater\n  );\n  return nextUpdated === nextExisting\n    ? existing\n    : nextUpdated === NOT_SET\n      ? remove(existing, key)\n      : set(\n          wasNotSet ? (inImmutable ? emptyMap() : {}) : existing,\n          key,\n          nextUpdated\n        );\n}\n\nfunction setIn(collection, keyPath, value) {\n  return updateIn(collection, keyPath, NOT_SET, function () { return value; });\n}\n\nfunction setIn$1(keyPath, v) {\n  return setIn(this, keyPath, v);\n}\n\nfunction removeIn(collection, keyPath) {\n  return updateIn(collection, keyPath, function () { return NOT_SET; });\n}\n\nfunction deleteIn(keyPath) {\n  return removeIn(this, keyPath);\n}\n\nfunction update(collection, key, notSetValue, updater) {\n  return updateIn(collection, [key], notSetValue, updater);\n}\n\nfunction update$1(key, notSetValue, updater) {\n  return arguments.length === 1\n    ? key(this)\n    : update(this, key, notSetValue, updater);\n}\n\nfunction updateIn$1(keyPath, notSetValue, updater) {\n  return updateIn(this, keyPath, notSetValue, updater);\n}\n\nfunction merge() {\n  var iters = [], len = arguments.length;\n  while ( len-- ) iters[ len ] = arguments[ len ];\n\n  return mergeIntoKeyedWith(this, iters);\n}\n\nfunction mergeWith(merger) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  if (typeof merger !== 'function') {\n    throw new TypeError('Invalid merger function: ' + merger);\n  }\n  return mergeIntoKeyedWith(this, iters, merger);\n}\n\nfunction mergeIntoKeyedWith(collection, collections, merger) {\n  var iters = [];\n  for (var ii = 0; ii < collections.length; ii++) {\n    var collection$1 = KeyedCollection(collections[ii]);\n    if (collection$1.size !== 0) {\n      iters.push(collection$1);\n    }\n  }\n  if (iters.length === 0) {\n    return collection;\n  }\n  if (\n    collection.toSeq().size === 0 &&\n    !collection.__ownerID &&\n    iters.length === 1\n  ) {\n    return collection.constructor(iters[0]);\n  }\n  return collection.withMutations(function (collection) {\n    var mergeIntoCollection = merger\n      ? function (value, key) {\n          update(\n            collection,\n            key,\n            NOT_SET,\n            function (oldVal) { return (oldVal === NOT_SET ? value : merger(oldVal, value, key)); }\n          );\n        }\n      : function (value, key) {\n          collection.set(key, value);\n        };\n    for (var ii = 0; ii < iters.length; ii++) {\n      iters[ii].forEach(mergeIntoCollection);\n    }\n  });\n}\n\nfunction merge$1(collection) {\n  var sources = [], len = arguments.length - 1;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n  return mergeWithSources(collection, sources);\n}\n\nfunction mergeWith$1(merger, collection) {\n  var sources = [], len = arguments.length - 2;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ];\n\n  return mergeWithSources(collection, sources, merger);\n}\n\nfunction mergeDeep(collection) {\n  var sources = [], len = arguments.length - 1;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n  return mergeDeepWithSources(collection, sources);\n}\n\nfunction mergeDeepWith(merger, collection) {\n  var sources = [], len = arguments.length - 2;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ];\n\n  return mergeDeepWithSources(collection, sources, merger);\n}\n\nfunction mergeDeepWithSources(collection, sources, merger) {\n  return mergeWithSources(collection, sources, deepMergerWith(merger));\n}\n\nfunction mergeWithSources(collection, sources, merger) {\n  if (!isDataStructure(collection)) {\n    throw new TypeError(\n      'Cannot merge into non-data-structure value: ' + collection\n    );\n  }\n  if (isImmutable(collection)) {\n    return typeof merger === 'function' && collection.mergeWith\n      ? collection.mergeWith.apply(collection, [ merger ].concat( sources ))\n      : collection.merge\n        ? collection.merge.apply(collection, sources)\n        : collection.concat.apply(collection, sources);\n  }\n  var isArray = Array.isArray(collection);\n  var merged = collection;\n  var Collection$$1 = isArray ? IndexedCollection : KeyedCollection;\n  var mergeItem = isArray\n    ? function (value) {\n        // Copy on write\n        if (merged === collection) {\n          merged = shallowCopy(merged);\n        }\n        merged.push(value);\n      }\n    : function (value, key) {\n        var hasVal = hasOwnProperty.call(merged, key);\n        var nextVal =\n          hasVal && merger ? merger(merged[key], value, key) : value;\n        if (!hasVal || nextVal !== merged[key]) {\n          // Copy on write\n          if (merged === collection) {\n            merged = shallowCopy(merged);\n          }\n          merged[key] = nextVal;\n        }\n      };\n  for (var i = 0; i < sources.length; i++) {\n    Collection$$1(sources[i]).forEach(mergeItem);\n  }\n  return merged;\n}\n\nfunction deepMergerWith(merger) {\n  function deepMerger(oldValue, newValue, key) {\n    return isDataStructure(oldValue) && isDataStructure(newValue)\n      ? mergeWithSources(oldValue, [newValue], deepMerger)\n      : merger\n        ? merger(oldValue, newValue, key)\n        : newValue;\n  }\n  return deepMerger;\n}\n\nfunction mergeDeep$1() {\n  var iters = [], len = arguments.length;\n  while ( len-- ) iters[ len ] = arguments[ len ];\n\n  return mergeDeepWithSources(this, iters);\n}\n\nfunction mergeDeepWith$1(merger) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return mergeDeepWithSources(this, iters, merger);\n}\n\nfunction mergeIn(keyPath) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return updateIn(this, keyPath, emptyMap(), function (m) { return mergeWithSources(m, iters); });\n}\n\nfunction mergeDeepIn(keyPath) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return updateIn(this, keyPath, emptyMap(), function (m) { return mergeDeepWithSources(m, iters); }\n  );\n}\n\nfunction withMutations(fn) {\n  var mutable = this.asMutable();\n  fn(mutable);\n  return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n}\n\nfunction asMutable() {\n  return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n}\n\nfunction asImmutable() {\n  return this.__ensureOwner();\n}\n\nfunction wasAltered() {\n  return this.__altered;\n}\n\nvar Map = /*@__PURE__*/(function (KeyedCollection$$1) {\n  function Map(value) {\n    return value === null || value === undefined\n      ? emptyMap()\n      : isMap(value) && !isOrdered(value)\n        ? value\n        : emptyMap().withMutations(function (map) {\n            var iter = KeyedCollection$$1(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v, k) { return map.set(k, v); });\n          });\n  }\n\n  if ( KeyedCollection$$1 ) Map.__proto__ = KeyedCollection$$1;\n  Map.prototype = Object.create( KeyedCollection$$1 && KeyedCollection$$1.prototype );\n  Map.prototype.constructor = Map;\n\n  Map.of = function of () {\n    var keyValues = [], len = arguments.length;\n    while ( len-- ) keyValues[ len ] = arguments[ len ];\n\n    return emptyMap().withMutations(function (map) {\n      for (var i = 0; i < keyValues.length; i += 2) {\n        if (i + 1 >= keyValues.length) {\n          throw new Error('Missing value for key: ' + keyValues[i]);\n        }\n        map.set(keyValues[i], keyValues[i + 1]);\n      }\n    });\n  };\n\n  Map.prototype.toString = function toString () {\n    return this.__toString('Map {', '}');\n  };\n\n  // @pragma Access\n\n  Map.prototype.get = function get (k, notSetValue) {\n    return this._root\n      ? this._root.get(0, undefined, k, notSetValue)\n      : notSetValue;\n  };\n\n  // @pragma Modification\n\n  Map.prototype.set = function set (k, v) {\n    return updateMap(this, k, v);\n  };\n\n  Map.prototype.remove = function remove (k) {\n    return updateMap(this, k, NOT_SET);\n  };\n\n  Map.prototype.deleteAll = function deleteAll (keys) {\n    var collection = Collection(keys);\n\n    if (collection.size === 0) {\n      return this;\n    }\n\n    return this.withMutations(function (map) {\n      collection.forEach(function (key) { return map.remove(key); });\n    });\n  };\n\n  Map.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._root = null;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyMap();\n  };\n\n  // @pragma Composition\n\n  Map.prototype.sort = function sort (comparator) {\n    // Late binding\n    return OrderedMap(sortFactory(this, comparator));\n  };\n\n  Map.prototype.sortBy = function sortBy (mapper, comparator) {\n    // Late binding\n    return OrderedMap(sortFactory(this, comparator, mapper));\n  };\n\n  Map.prototype.map = function map (mapper, context) {\n    return this.withMutations(function (map) {\n      map.forEach(function (value, key) {\n        map.set(key, mapper.call(context, value, key, map));\n      });\n    });\n  };\n\n  // @pragma Mutability\n\n  Map.prototype.__iterator = function __iterator (type, reverse) {\n    return new MapIterator(this, type, reverse);\n  };\n\n  Map.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    var iterations = 0;\n    this._root &&\n      this._root.iterate(function (entry) {\n        iterations++;\n        return fn(entry[1], entry[0], this$1);\n      }, reverse);\n    return iterations;\n  };\n\n  Map.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyMap();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeMap(this.size, this._root, ownerID, this.__hash);\n  };\n\n  return Map;\n}(KeyedCollection));\n\nMap.isMap = isMap;\n\nvar MapPrototype = Map.prototype;\nMapPrototype[IS_MAP_SYMBOL] = true;\nMapPrototype[DELETE] = MapPrototype.remove;\nMapPrototype.removeAll = MapPrototype.deleteAll;\nMapPrototype.setIn = setIn$1;\nMapPrototype.removeIn = MapPrototype.deleteIn = deleteIn;\nMapPrototype.update = update$1;\nMapPrototype.updateIn = updateIn$1;\nMapPrototype.merge = MapPrototype.concat = merge;\nMapPrototype.mergeWith = mergeWith;\nMapPrototype.mergeDeep = mergeDeep$1;\nMapPrototype.mergeDeepWith = mergeDeepWith$1;\nMapPrototype.mergeIn = mergeIn;\nMapPrototype.mergeDeepIn = mergeDeepIn;\nMapPrototype.withMutations = withMutations;\nMapPrototype.wasAltered = wasAltered;\nMapPrototype.asImmutable = asImmutable;\nMapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable;\nMapPrototype['@@transducer/step'] = function(result, arr) {\n  return result.set(arr[0], arr[1]);\n};\nMapPrototype['@@transducer/result'] = function(obj) {\n  return obj.asImmutable();\n};\n\n// #pragma Trie Nodes\n\nvar ArrayMapNode = function ArrayMapNode(ownerID, entries) {\n  this.ownerID = ownerID;\n  this.entries = entries;\n};\n\nArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  var entries = this.entries;\n  for (var ii = 0, len = entries.length; ii < len; ii++) {\n    if (is(key, entries[ii][0])) {\n      return entries[ii][1];\n    }\n  }\n  return notSetValue;\n};\n\nArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  var removed = value === NOT_SET;\n\n  var entries = this.entries;\n  var idx = 0;\n  var len = entries.length;\n  for (; idx < len; idx++) {\n    if (is(key, entries[idx][0])) {\n      break;\n    }\n  }\n  var exists = idx < len;\n\n  if (exists ? entries[idx][1] === value : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n  (removed || !exists) && SetRef(didChangeSize);\n\n  if (removed && entries.length === 1) {\n    return; // undefined\n  }\n\n  if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n    return createNodes(ownerID, entries, key, value);\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newEntries = isEditable ? entries : arrCopy(entries);\n\n  if (exists) {\n    if (removed) {\n      idx === len - 1\n        ? newEntries.pop()\n        : (newEntries[idx] = newEntries.pop());\n    } else {\n      newEntries[idx] = [key, value];\n    }\n  } else {\n    newEntries.push([key, value]);\n  }\n\n  if (isEditable) {\n    this.entries = newEntries;\n    return this;\n  }\n\n  return new ArrayMapNode(ownerID, newEntries);\n};\n\nvar BitmapIndexedNode = function BitmapIndexedNode(ownerID, bitmap, nodes) {\n  this.ownerID = ownerID;\n  this.bitmap = bitmap;\n  this.nodes = nodes;\n};\n\nBitmapIndexedNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK);\n  var bitmap = this.bitmap;\n  return (bitmap & bit) === 0\n    ? notSetValue\n    : this.nodes[popCount(bitmap & (bit - 1))].get(\n        shift + SHIFT,\n        keyHash,\n        key,\n        notSetValue\n      );\n};\n\nBitmapIndexedNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var bit = 1 << keyHashFrag;\n  var bitmap = this.bitmap;\n  var exists = (bitmap & bit) !== 0;\n\n  if (!exists && value === NOT_SET) {\n    return this;\n  }\n\n  var idx = popCount(bitmap & (bit - 1));\n  var nodes = this.nodes;\n  var node = exists ? nodes[idx] : undefined;\n  var newNode = updateNode(\n    node,\n    ownerID,\n    shift + SHIFT,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n\n  if (newNode === node) {\n    return this;\n  }\n\n  if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n    return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n  }\n\n  if (\n    exists &&\n    !newNode &&\n    nodes.length === 2 &&\n    isLeafNode(nodes[idx ^ 1])\n  ) {\n    return nodes[idx ^ 1];\n  }\n\n  if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n    return newNode;\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit;\n  var newNodes = exists\n    ? newNode\n      ? setAt(nodes, idx, newNode, isEditable)\n      : spliceOut(nodes, idx, isEditable)\n    : spliceIn(nodes, idx, newNode, isEditable);\n\n  if (isEditable) {\n    this.bitmap = newBitmap;\n    this.nodes = newNodes;\n    return this;\n  }\n\n  return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n};\n\nvar HashArrayMapNode = function HashArrayMapNode(ownerID, count, nodes) {\n  this.ownerID = ownerID;\n  this.count = count;\n  this.nodes = nodes;\n};\n\nHashArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var node = this.nodes[idx];\n  return node\n    ? node.get(shift + SHIFT, keyHash, key, notSetValue)\n    : notSetValue;\n};\n\nHashArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var removed = value === NOT_SET;\n  var nodes = this.nodes;\n  var node = nodes[idx];\n\n  if (removed && !node) {\n    return this;\n  }\n\n  var newNode = updateNode(\n    node,\n    ownerID,\n    shift + SHIFT,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n  if (newNode === node) {\n    return this;\n  }\n\n  var newCount = this.count;\n  if (!node) {\n    newCount++;\n  } else if (!newNode) {\n    newCount--;\n    if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n      return packNodes(ownerID, nodes, newCount, idx);\n    }\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newNodes = setAt(nodes, idx, newNode, isEditable);\n\n  if (isEditable) {\n    this.count = newCount;\n    this.nodes = newNodes;\n    return this;\n  }\n\n  return new HashArrayMapNode(ownerID, newCount, newNodes);\n};\n\nvar HashCollisionNode = function HashCollisionNode(ownerID, keyHash, entries) {\n  this.ownerID = ownerID;\n  this.keyHash = keyHash;\n  this.entries = entries;\n};\n\nHashCollisionNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  var entries = this.entries;\n  for (var ii = 0, len = entries.length; ii < len; ii++) {\n    if (is(key, entries[ii][0])) {\n      return entries[ii][1];\n    }\n  }\n  return notSetValue;\n};\n\nHashCollisionNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n\n  var removed = value === NOT_SET;\n\n  if (keyHash !== this.keyHash) {\n    if (removed) {\n      return this;\n    }\n    SetRef(didAlter);\n    SetRef(didChangeSize);\n    return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n  }\n\n  var entries = this.entries;\n  var idx = 0;\n  var len = entries.length;\n  for (; idx < len; idx++) {\n    if (is(key, entries[idx][0])) {\n      break;\n    }\n  }\n  var exists = idx < len;\n\n  if (exists ? entries[idx][1] === value : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n  (removed || !exists) && SetRef(didChangeSize);\n\n  if (removed && len === 2) {\n    return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newEntries = isEditable ? entries : arrCopy(entries);\n\n  if (exists) {\n    if (removed) {\n      idx === len - 1\n        ? newEntries.pop()\n        : (newEntries[idx] = newEntries.pop());\n    } else {\n      newEntries[idx] = [key, value];\n    }\n  } else {\n    newEntries.push([key, value]);\n  }\n\n  if (isEditable) {\n    this.entries = newEntries;\n    return this;\n  }\n\n  return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n};\n\nvar ValueNode = function ValueNode(ownerID, keyHash, entry) {\n  this.ownerID = ownerID;\n  this.keyHash = keyHash;\n  this.entry = entry;\n};\n\nValueNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n};\n\nValueNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  var removed = value === NOT_SET;\n  var keyMatch = is(key, this.entry[0]);\n  if (keyMatch ? value === this.entry[1] : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n\n  if (removed) {\n    SetRef(didChangeSize);\n    return; // undefined\n  }\n\n  if (keyMatch) {\n    if (ownerID && ownerID === this.ownerID) {\n      this.entry[1] = value;\n      return this;\n    }\n    return new ValueNode(ownerID, this.keyHash, [key, value]);\n  }\n\n  SetRef(didChangeSize);\n  return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n};\n\n// #pragma Iterators\n\nArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = function(\n  fn,\n  reverse\n) {\n  var entries = this.entries;\n  for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n    if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n      return false;\n    }\n  }\n};\n\nBitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = function(\n  fn,\n  reverse\n) {\n  var nodes = this.nodes;\n  for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n    var node = nodes[reverse ? maxIndex - ii : ii];\n    if (node && node.iterate(fn, reverse) === false) {\n      return false;\n    }\n  }\n};\n\n// eslint-disable-next-line no-unused-vars\nValueNode.prototype.iterate = function(fn, reverse) {\n  return fn(this.entry);\n};\n\nvar MapIterator = /*@__PURE__*/(function (Iterator$$1) {\n  function MapIterator(map, type, reverse) {\n    this._type = type;\n    this._reverse = reverse;\n    this._stack = map._root && mapIteratorFrame(map._root);\n  }\n\n  if ( Iterator$$1 ) MapIterator.__proto__ = Iterator$$1;\n  MapIterator.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );\n  MapIterator.prototype.constructor = MapIterator;\n\n  MapIterator.prototype.next = function next () {\n    var type = this._type;\n    var stack = this._stack;\n    while (stack) {\n      var node = stack.node;\n      var index = stack.index++;\n      var maxIndex = (void 0);\n      if (node.entry) {\n        if (index === 0) {\n          return mapIteratorValue(type, node.entry);\n        }\n      } else if (node.entries) {\n        maxIndex = node.entries.length - 1;\n        if (index <= maxIndex) {\n          return mapIteratorValue(\n            type,\n            node.entries[this._reverse ? maxIndex - index : index]\n          );\n        }\n      } else {\n        maxIndex = node.nodes.length - 1;\n        if (index <= maxIndex) {\n          var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n          if (subNode) {\n            if (subNode.entry) {\n              return mapIteratorValue(type, subNode.entry);\n            }\n            stack = this._stack = mapIteratorFrame(subNode, stack);\n          }\n          continue;\n        }\n      }\n      stack = this._stack = this._stack.__prev;\n    }\n    return iteratorDone();\n  };\n\n  return MapIterator;\n}(Iterator));\n\nfunction mapIteratorValue(type, entry) {\n  return iteratorValue(type, entry[0], entry[1]);\n}\n\nfunction mapIteratorFrame(node, prev) {\n  return {\n    node: node,\n    index: 0,\n    __prev: prev,\n  };\n}\n\nfunction makeMap(size, root, ownerID, hash$$1) {\n  var map = Object.create(MapPrototype);\n  map.size = size;\n  map._root = root;\n  map.__ownerID = ownerID;\n  map.__hash = hash$$1;\n  map.__altered = false;\n  return map;\n}\n\nvar EMPTY_MAP;\nfunction emptyMap() {\n  return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n}\n\nfunction updateMap(map, k, v) {\n  var newRoot;\n  var newSize;\n  if (!map._root) {\n    if (v === NOT_SET) {\n      return map;\n    }\n    newSize = 1;\n    newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n  } else {\n    var didChangeSize = MakeRef();\n    var didAlter = MakeRef();\n    newRoot = updateNode(\n      map._root,\n      map.__ownerID,\n      0,\n      undefined,\n      k,\n      v,\n      didChangeSize,\n      didAlter\n    );\n    if (!didAlter.value) {\n      return map;\n    }\n    newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0);\n  }\n  if (map.__ownerID) {\n    map.size = newSize;\n    map._root = newRoot;\n    map.__hash = undefined;\n    map.__altered = true;\n    return map;\n  }\n  return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n}\n\nfunction updateNode(\n  node,\n  ownerID,\n  shift,\n  keyHash,\n  key,\n  value,\n  didChangeSize,\n  didAlter\n) {\n  if (!node) {\n    if (value === NOT_SET) {\n      return node;\n    }\n    SetRef(didAlter);\n    SetRef(didChangeSize);\n    return new ValueNode(ownerID, keyHash, [key, value]);\n  }\n  return node.update(\n    ownerID,\n    shift,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n}\n\nfunction isLeafNode(node) {\n  return (\n    node.constructor === ValueNode || node.constructor === HashCollisionNode\n  );\n}\n\nfunction mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n  if (node.keyHash === keyHash) {\n    return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n  }\n\n  var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n  var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n\n  var newNode;\n  var nodes =\n    idx1 === idx2\n      ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)]\n      : ((newNode = new ValueNode(ownerID, keyHash, entry)),\n        idx1 < idx2 ? [node, newNode] : [newNode, node]);\n\n  return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes);\n}\n\nfunction createNodes(ownerID, entries, key, value) {\n  if (!ownerID) {\n    ownerID = new OwnerID();\n  }\n  var node = new ValueNode(ownerID, hash(key), [key, value]);\n  for (var ii = 0; ii < entries.length; ii++) {\n    var entry = entries[ii];\n    node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n  }\n  return node;\n}\n\nfunction packNodes(ownerID, nodes, count, excluding) {\n  var bitmap = 0;\n  var packedII = 0;\n  var packedNodes = new Array(count);\n  for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n    var node = nodes[ii];\n    if (node !== undefined && ii !== excluding) {\n      bitmap |= bit;\n      packedNodes[packedII++] = node;\n    }\n  }\n  return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n}\n\nfunction expandNodes(ownerID, nodes, bitmap, including, node) {\n  var count = 0;\n  var expandedNodes = new Array(SIZE);\n  for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n    expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n  }\n  expandedNodes[including] = node;\n  return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n}\n\nfunction popCount(x) {\n  x -= (x >> 1) & 0x55555555;\n  x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n  x = (x + (x >> 4)) & 0x0f0f0f0f;\n  x += x >> 8;\n  x += x >> 16;\n  return x & 0x7f;\n}\n\nfunction setAt(array, idx, val, canEdit) {\n  var newArray = canEdit ? array : arrCopy(array);\n  newArray[idx] = val;\n  return newArray;\n}\n\nfunction spliceIn(array, idx, val, canEdit) {\n  var newLen = array.length + 1;\n  if (canEdit && idx + 1 === newLen) {\n    array[idx] = val;\n    return array;\n  }\n  var newArray = new Array(newLen);\n  var after = 0;\n  for (var ii = 0; ii < newLen; ii++) {\n    if (ii === idx) {\n      newArray[ii] = val;\n      after = -1;\n    } else {\n      newArray[ii] = array[ii + after];\n    }\n  }\n  return newArray;\n}\n\nfunction spliceOut(array, idx, canEdit) {\n  var newLen = array.length - 1;\n  if (canEdit && idx === newLen) {\n    array.pop();\n    return array;\n  }\n  var newArray = new Array(newLen);\n  var after = 0;\n  for (var ii = 0; ii < newLen; ii++) {\n    if (ii === idx) {\n      after = 1;\n    }\n    newArray[ii] = array[ii + after];\n  }\n  return newArray;\n}\n\nvar MAX_ARRAY_MAP_SIZE = SIZE / 4;\nvar MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\nvar MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n\nvar IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@';\n\nfunction isList(maybeList) {\n  return Boolean(maybeList && maybeList[IS_LIST_SYMBOL]);\n}\n\nvar List = /*@__PURE__*/(function (IndexedCollection$$1) {\n  function List(value) {\n    var empty = emptyList();\n    if (value === null || value === undefined) {\n      return empty;\n    }\n    if (isList(value)) {\n      return value;\n    }\n    var iter = IndexedCollection$$1(value);\n    var size = iter.size;\n    if (size === 0) {\n      return empty;\n    }\n    assertNotInfinite(size);\n    if (size > 0 && size < SIZE) {\n      return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n    }\n    return empty.withMutations(function (list) {\n      list.setSize(size);\n      iter.forEach(function (v, i) { return list.set(i, v); });\n    });\n  }\n\n  if ( IndexedCollection$$1 ) List.__proto__ = IndexedCollection$$1;\n  List.prototype = Object.create( IndexedCollection$$1 && IndexedCollection$$1.prototype );\n  List.prototype.constructor = List;\n\n  List.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  List.prototype.toString = function toString () {\n    return this.__toString('List [', ']');\n  };\n\n  // @pragma Access\n\n  List.prototype.get = function get (index, notSetValue) {\n    index = wrapIndex(this, index);\n    if (index >= 0 && index < this.size) {\n      index += this._origin;\n      var node = listNodeFor(this, index);\n      return node && node.array[index & MASK];\n    }\n    return notSetValue;\n  };\n\n  // @pragma Modification\n\n  List.prototype.set = function set (index, value) {\n    return updateList(this, index, value);\n  };\n\n  List.prototype.remove = function remove (index) {\n    return !this.has(index)\n      ? this\n      : index === 0\n        ? this.shift()\n        : index === this.size - 1\n          ? this.pop()\n          : this.splice(index, 1);\n  };\n\n  List.prototype.insert = function insert (index, value) {\n    return this.splice(index, 0, value);\n  };\n\n  List.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = this._origin = this._capacity = 0;\n      this._level = SHIFT;\n      this._root = this._tail = null;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyList();\n  };\n\n  List.prototype.push = function push (/*...values*/) {\n    var values = arguments;\n    var oldSize = this.size;\n    return this.withMutations(function (list) {\n      setListBounds(list, 0, oldSize + values.length);\n      for (var ii = 0; ii < values.length; ii++) {\n        list.set(oldSize + ii, values[ii]);\n      }\n    });\n  };\n\n  List.prototype.pop = function pop () {\n    return setListBounds(this, 0, -1);\n  };\n\n  List.prototype.unshift = function unshift (/*...values*/) {\n    var values = arguments;\n    return this.withMutations(function (list) {\n      setListBounds(list, -values.length);\n      for (var ii = 0; ii < values.length; ii++) {\n        list.set(ii, values[ii]);\n      }\n    });\n  };\n\n  List.prototype.shift = function shift () {\n    return setListBounds(this, 1);\n  };\n\n  // @pragma Composition\n\n  List.prototype.concat = function concat (/*...collections*/) {\n    var arguments$1 = arguments;\n\n    var seqs = [];\n    for (var i = 0; i < arguments.length; i++) {\n      var argument = arguments$1[i];\n      var seq = IndexedCollection$$1(\n        typeof argument !== 'string' && hasIterator(argument)\n          ? argument\n          : [argument]\n      );\n      if (seq.size !== 0) {\n        seqs.push(seq);\n      }\n    }\n    if (seqs.length === 0) {\n      return this;\n    }\n    if (this.size === 0 && !this.__ownerID && seqs.length === 1) {\n      return this.constructor(seqs[0]);\n    }\n    return this.withMutations(function (list) {\n      seqs.forEach(function (seq) { return seq.forEach(function (value) { return list.push(value); }); });\n    });\n  };\n\n  List.prototype.setSize = function setSize (size) {\n    return setListBounds(this, 0, size);\n  };\n\n  List.prototype.map = function map (mapper, context) {\n    var this$1 = this;\n\n    return this.withMutations(function (list) {\n      for (var i = 0; i < this$1.size; i++) {\n        list.set(i, mapper.call(context, list.get(i), i, list));\n      }\n    });\n  };\n\n  // @pragma Iteration\n\n  List.prototype.slice = function slice (begin, end) {\n    var size = this.size;\n    if (wholeSlice(begin, end, size)) {\n      return this;\n    }\n    return setListBounds(\n      this,\n      resolveBegin(begin, size),\n      resolveEnd(end, size)\n    );\n  };\n\n  List.prototype.__iterator = function __iterator (type, reverse) {\n    var index = reverse ? this.size : 0;\n    var values = iterateList(this, reverse);\n    return new Iterator(function () {\n      var value = values();\n      return value === DONE\n        ? iteratorDone()\n        : iteratorValue(type, reverse ? --index : index++, value);\n    });\n  };\n\n  List.prototype.__iterate = function __iterate (fn, reverse) {\n    var index = reverse ? this.size : 0;\n    var values = iterateList(this, reverse);\n    var value;\n    while ((value = values()) !== DONE) {\n      if (fn(value, reverse ? --index : index++, this) === false) {\n        break;\n      }\n    }\n    return index;\n  };\n\n  List.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyList();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeList(\n      this._origin,\n      this._capacity,\n      this._level,\n      this._root,\n      this._tail,\n      ownerID,\n      this.__hash\n    );\n  };\n\n  return List;\n}(IndexedCollection));\n\nList.isList = isList;\n\nvar ListPrototype = List.prototype;\nListPrototype[IS_LIST_SYMBOL] = true;\nListPrototype[DELETE] = ListPrototype.remove;\nListPrototype.merge = ListPrototype.concat;\nListPrototype.setIn = setIn$1;\nListPrototype.deleteIn = ListPrototype.removeIn = deleteIn;\nListPrototype.update = update$1;\nListPrototype.updateIn = updateIn$1;\nListPrototype.mergeIn = mergeIn;\nListPrototype.mergeDeepIn = mergeDeepIn;\nListPrototype.withMutations = withMutations;\nListPrototype.wasAltered = wasAltered;\nListPrototype.asImmutable = asImmutable;\nListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable;\nListPrototype['@@transducer/step'] = function(result, arr) {\n  return result.push(arr);\n};\nListPrototype['@@transducer/result'] = function(obj) {\n  return obj.asImmutable();\n};\n\nvar VNode = function VNode(array, ownerID) {\n  this.array = array;\n  this.ownerID = ownerID;\n};\n\n// TODO: seems like these methods are very similar\n\nVNode.prototype.removeBefore = function removeBefore (ownerID, level, index) {\n  if (index === level ? 1 << level : this.array.length === 0) {\n    return this;\n  }\n  var originIndex = (index >>> level) & MASK;\n  if (originIndex >= this.array.length) {\n    return new VNode([], ownerID);\n  }\n  var removingFirst = originIndex === 0;\n  var newChild;\n  if (level > 0) {\n    var oldChild = this.array[originIndex];\n    newChild =\n      oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n    if (newChild === oldChild && removingFirst) {\n      return this;\n    }\n  }\n  if (removingFirst && !newChild) {\n    return this;\n  }\n  var editable = editableVNode(this, ownerID);\n  if (!removingFirst) {\n    for (var ii = 0; ii < originIndex; ii++) {\n      editable.array[ii] = undefined;\n    }\n  }\n  if (newChild) {\n    editable.array[originIndex] = newChild;\n  }\n  return editable;\n};\n\nVNode.prototype.removeAfter = function removeAfter (ownerID, level, index) {\n  if (index === (level ? 1 << level : 0) || this.array.length === 0) {\n    return this;\n  }\n  var sizeIndex = ((index - 1) >>> level) & MASK;\n  if (sizeIndex >= this.array.length) {\n    return this;\n  }\n\n  var newChild;\n  if (level > 0) {\n    var oldChild = this.array[sizeIndex];\n    newChild =\n      oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n    if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n      return this;\n    }\n  }\n\n  var editable = editableVNode(this, ownerID);\n  editable.array.splice(sizeIndex + 1);\n  if (newChild) {\n    editable.array[sizeIndex] = newChild;\n  }\n  return editable;\n};\n\nvar DONE = {};\n\nfunction iterateList(list, reverse) {\n  var left = list._origin;\n  var right = list._capacity;\n  var tailPos = getTailOffset(right);\n  var tail = list._tail;\n\n  return iterateNodeOrLeaf(list._root, list._level, 0);\n\n  function iterateNodeOrLeaf(node, level, offset) {\n    return level === 0\n      ? iterateLeaf(node, offset)\n      : iterateNode(node, level, offset);\n  }\n\n  function iterateLeaf(node, offset) {\n    var array = offset === tailPos ? tail && tail.array : node && node.array;\n    var from = offset > left ? 0 : left - offset;\n    var to = right - offset;\n    if (to > SIZE) {\n      to = SIZE;\n    }\n    return function () {\n      if (from === to) {\n        return DONE;\n      }\n      var idx = reverse ? --to : from++;\n      return array && array[idx];\n    };\n  }\n\n  function iterateNode(node, level, offset) {\n    var values;\n    var array = node && node.array;\n    var from = offset > left ? 0 : (left - offset) >> level;\n    var to = ((right - offset) >> level) + 1;\n    if (to > SIZE) {\n      to = SIZE;\n    }\n    return function () {\n      while (true) {\n        if (values) {\n          var value = values();\n          if (value !== DONE) {\n            return value;\n          }\n          values = null;\n        }\n        if (from === to) {\n          return DONE;\n        }\n        var idx = reverse ? --to : from++;\n        values = iterateNodeOrLeaf(\n          array && array[idx],\n          level - SHIFT,\n          offset + (idx << level)\n        );\n      }\n    };\n  }\n}\n\nfunction makeList(origin, capacity, level, root, tail, ownerID, hash) {\n  var list = Object.create(ListPrototype);\n  list.size = capacity - origin;\n  list._origin = origin;\n  list._capacity = capacity;\n  list._level = level;\n  list._root = root;\n  list._tail = tail;\n  list.__ownerID = ownerID;\n  list.__hash = hash;\n  list.__altered = false;\n  return list;\n}\n\nvar EMPTY_LIST;\nfunction emptyList() {\n  return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT));\n}\n\nfunction updateList(list, index, value) {\n  index = wrapIndex(list, index);\n\n  if (index !== index) {\n    return list;\n  }\n\n  if (index >= list.size || index < 0) {\n    return list.withMutations(function (list) {\n      index < 0\n        ? setListBounds(list, index).set(0, value)\n        : setListBounds(list, 0, index + 1).set(index, value);\n    });\n  }\n\n  index += list._origin;\n\n  var newTail = list._tail;\n  var newRoot = list._root;\n  var didAlter = MakeRef();\n  if (index >= getTailOffset(list._capacity)) {\n    newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n  } else {\n    newRoot = updateVNode(\n      newRoot,\n      list.__ownerID,\n      list._level,\n      index,\n      value,\n      didAlter\n    );\n  }\n\n  if (!didAlter.value) {\n    return list;\n  }\n\n  if (list.__ownerID) {\n    list._root = newRoot;\n    list._tail = newTail;\n    list.__hash = undefined;\n    list.__altered = true;\n    return list;\n  }\n  return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n}\n\nfunction updateVNode(node, ownerID, level, index, value, didAlter) {\n  var idx = (index >>> level) & MASK;\n  var nodeHas = node && idx < node.array.length;\n  if (!nodeHas && value === undefined) {\n    return node;\n  }\n\n  var newNode;\n\n  if (level > 0) {\n    var lowerNode = node && node.array[idx];\n    var newLowerNode = updateVNode(\n      lowerNode,\n      ownerID,\n      level - SHIFT,\n      index,\n      value,\n      didAlter\n    );\n    if (newLowerNode === lowerNode) {\n      return node;\n    }\n    newNode = editableVNode(node, ownerID);\n    newNode.array[idx] = newLowerNode;\n    return newNode;\n  }\n\n  if (nodeHas && node.array[idx] === value) {\n    return node;\n  }\n\n  if (didAlter) {\n    SetRef(didAlter);\n  }\n\n  newNode = editableVNode(node, ownerID);\n  if (value === undefined && idx === newNode.array.length - 1) {\n    newNode.array.pop();\n  } else {\n    newNode.array[idx] = value;\n  }\n  return newNode;\n}\n\nfunction editableVNode(node, ownerID) {\n  if (ownerID && node && ownerID === node.ownerID) {\n    return node;\n  }\n  return new VNode(node ? node.array.slice() : [], ownerID);\n}\n\nfunction listNodeFor(list, rawIndex) {\n  if (rawIndex >= getTailOffset(list._capacity)) {\n    return list._tail;\n  }\n  if (rawIndex < 1 << (list._level + SHIFT)) {\n    var node = list._root;\n    var level = list._level;\n    while (node && level > 0) {\n      node = node.array[(rawIndex >>> level) & MASK];\n      level -= SHIFT;\n    }\n    return node;\n  }\n}\n\nfunction setListBounds(list, begin, end) {\n  // Sanitize begin & end using this shorthand for ToInt32(argument)\n  // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n  if (begin !== undefined) {\n    begin |= 0;\n  }\n  if (end !== undefined) {\n    end |= 0;\n  }\n  var owner = list.__ownerID || new OwnerID();\n  var oldOrigin = list._origin;\n  var oldCapacity = list._capacity;\n  var newOrigin = oldOrigin + begin;\n  var newCapacity =\n    end === undefined\n      ? oldCapacity\n      : end < 0\n        ? oldCapacity + end\n        : oldOrigin + end;\n  if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n    return list;\n  }\n\n  // If it's going to end after it starts, it's empty.\n  if (newOrigin >= newCapacity) {\n    return list.clear();\n  }\n\n  var newLevel = list._level;\n  var newRoot = list._root;\n\n  // New origin might need creating a higher root.\n  var offsetShift = 0;\n  while (newOrigin + offsetShift < 0) {\n    newRoot = new VNode(\n      newRoot && newRoot.array.length ? [undefined, newRoot] : [],\n      owner\n    );\n    newLevel += SHIFT;\n    offsetShift += 1 << newLevel;\n  }\n  if (offsetShift) {\n    newOrigin += offsetShift;\n    oldOrigin += offsetShift;\n    newCapacity += offsetShift;\n    oldCapacity += offsetShift;\n  }\n\n  var oldTailOffset = getTailOffset(oldCapacity);\n  var newTailOffset = getTailOffset(newCapacity);\n\n  // New size might need creating a higher root.\n  while (newTailOffset >= 1 << (newLevel + SHIFT)) {\n    newRoot = new VNode(\n      newRoot && newRoot.array.length ? [newRoot] : [],\n      owner\n    );\n    newLevel += SHIFT;\n  }\n\n  // Locate or create the new tail.\n  var oldTail = list._tail;\n  var newTail =\n    newTailOffset < oldTailOffset\n      ? listNodeFor(list, newCapacity - 1)\n      : newTailOffset > oldTailOffset\n        ? new VNode([], owner)\n        : oldTail;\n\n  // Merge Tail into tree.\n  if (\n    oldTail &&\n    newTailOffset > oldTailOffset &&\n    newOrigin < oldCapacity &&\n    oldTail.array.length\n  ) {\n    newRoot = editableVNode(newRoot, owner);\n    var node = newRoot;\n    for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n      var idx = (oldTailOffset >>> level) & MASK;\n      node = node.array[idx] = editableVNode(node.array[idx], owner);\n    }\n    node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail;\n  }\n\n  // If the size has been reduced, there's a chance the tail needs to be trimmed.\n  if (newCapacity < oldCapacity) {\n    newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n  }\n\n  // If the new origin is within the tail, then we do not need a root.\n  if (newOrigin >= newTailOffset) {\n    newOrigin -= newTailOffset;\n    newCapacity -= newTailOffset;\n    newLevel = SHIFT;\n    newRoot = null;\n    newTail = newTail && newTail.removeBefore(owner, 0, newOrigin);\n\n    // Otherwise, if the root has been trimmed, garbage collect.\n  } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n    offsetShift = 0;\n\n    // Identify the new top root node of the subtree of the old root.\n    while (newRoot) {\n      var beginIndex = (newOrigin >>> newLevel) & MASK;\n      if ((beginIndex !== newTailOffset >>> newLevel) & MASK) {\n        break;\n      }\n      if (beginIndex) {\n        offsetShift += (1 << newLevel) * beginIndex;\n      }\n      newLevel -= SHIFT;\n      newRoot = newRoot.array[beginIndex];\n    }\n\n    // Trim the new sides of the new root.\n    if (newRoot && newOrigin > oldOrigin) {\n      newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n    }\n    if (newRoot && newTailOffset < oldTailOffset) {\n      newRoot = newRoot.removeAfter(\n        owner,\n        newLevel,\n        newTailOffset - offsetShift\n      );\n    }\n    if (offsetShift) {\n      newOrigin -= offsetShift;\n      newCapacity -= offsetShift;\n    }\n  }\n\n  if (list.__ownerID) {\n    list.size = newCapacity - newOrigin;\n    list._origin = newOrigin;\n    list._capacity = newCapacity;\n    list._level = newLevel;\n    list._root = newRoot;\n    list._tail = newTail;\n    list.__hash = undefined;\n    list.__altered = true;\n    return list;\n  }\n  return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n}\n\nfunction getTailOffset(size) {\n  return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT;\n}\n\nvar OrderedMap = /*@__PURE__*/(function (Map$$1) {\n  function OrderedMap(value) {\n    return value === null || value === undefined\n      ? emptyOrderedMap()\n      : isOrderedMap(value)\n        ? value\n        : emptyOrderedMap().withMutations(function (map) {\n            var iter = KeyedCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v, k) { return map.set(k, v); });\n          });\n  }\n\n  if ( Map$$1 ) OrderedMap.__proto__ = Map$$1;\n  OrderedMap.prototype = Object.create( Map$$1 && Map$$1.prototype );\n  OrderedMap.prototype.constructor = OrderedMap;\n\n  OrderedMap.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  OrderedMap.prototype.toString = function toString () {\n    return this.__toString('OrderedMap {', '}');\n  };\n\n  // @pragma Access\n\n  OrderedMap.prototype.get = function get (k, notSetValue) {\n    var index = this._map.get(k);\n    return index !== undefined ? this._list.get(index)[1] : notSetValue;\n  };\n\n  // @pragma Modification\n\n  OrderedMap.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._map.clear();\n      this._list.clear();\n      return this;\n    }\n    return emptyOrderedMap();\n  };\n\n  OrderedMap.prototype.set = function set (k, v) {\n    return updateOrderedMap(this, k, v);\n  };\n\n  OrderedMap.prototype.remove = function remove (k) {\n    return updateOrderedMap(this, k, NOT_SET);\n  };\n\n  OrderedMap.prototype.wasAltered = function wasAltered () {\n    return this._map.wasAltered() || this._list.wasAltered();\n  };\n\n  OrderedMap.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    return this._list.__iterate(\n      function (entry) { return entry && fn(entry[1], entry[0], this$1); },\n      reverse\n    );\n  };\n\n  OrderedMap.prototype.__iterator = function __iterator (type, reverse) {\n    return this._list.fromEntrySeq().__iterator(type, reverse);\n  };\n\n  OrderedMap.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    var newMap = this._map.__ensureOwner(ownerID);\n    var newList = this._list.__ensureOwner(ownerID);\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyOrderedMap();\n      }\n      this.__ownerID = ownerID;\n      this._map = newMap;\n      this._list = newList;\n      return this;\n    }\n    return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n  };\n\n  return OrderedMap;\n}(Map));\n\nOrderedMap.isOrderedMap = isOrderedMap;\n\nOrderedMap.prototype[IS_ORDERED_SYMBOL] = true;\nOrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\nfunction makeOrderedMap(map, list, ownerID, hash) {\n  var omap = Object.create(OrderedMap.prototype);\n  omap.size = map ? map.size : 0;\n  omap._map = map;\n  omap._list = list;\n  omap.__ownerID = ownerID;\n  omap.__hash = hash;\n  return omap;\n}\n\nvar EMPTY_ORDERED_MAP;\nfunction emptyOrderedMap() {\n  return (\n    EMPTY_ORDERED_MAP ||\n    (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()))\n  );\n}\n\nfunction updateOrderedMap(omap, k, v) {\n  var map = omap._map;\n  var list = omap._list;\n  var i = map.get(k);\n  var has = i !== undefined;\n  var newMap;\n  var newList;\n  if (v === NOT_SET) {\n    // removed\n    if (!has) {\n      return omap;\n    }\n    if (list.size >= SIZE && list.size >= map.size * 2) {\n      newList = list.filter(function (entry, idx) { return entry !== undefined && i !== idx; });\n      newMap = newList\n        .toKeyedSeq()\n        .map(function (entry) { return entry[0]; })\n        .flip()\n        .toMap();\n      if (omap.__ownerID) {\n        newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n      }\n    } else {\n      newMap = map.remove(k);\n      newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n    }\n  } else if (has) {\n    if (v === list.get(i)[1]) {\n      return omap;\n    }\n    newMap = map;\n    newList = list.set(i, [k, v]);\n  } else {\n    newMap = map.set(k, list.size);\n    newList = list.set(list.size, [k, v]);\n  }\n  if (omap.__ownerID) {\n    omap.size = newMap.size;\n    omap._map = newMap;\n    omap._list = newList;\n    omap.__hash = undefined;\n    return omap;\n  }\n  return makeOrderedMap(newMap, newList);\n}\n\nvar IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@';\n\nfunction isStack(maybeStack) {\n  return Boolean(maybeStack && maybeStack[IS_STACK_SYMBOL]);\n}\n\nvar Stack = /*@__PURE__*/(function (IndexedCollection$$1) {\n  function Stack(value) {\n    return value === null || value === undefined\n      ? emptyStack()\n      : isStack(value)\n        ? value\n        : emptyStack().pushAll(value);\n  }\n\n  if ( IndexedCollection$$1 ) Stack.__proto__ = IndexedCollection$$1;\n  Stack.prototype = Object.create( IndexedCollection$$1 && IndexedCollection$$1.prototype );\n  Stack.prototype.constructor = Stack;\n\n  Stack.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  Stack.prototype.toString = function toString () {\n    return this.__toString('Stack [', ']');\n  };\n\n  // @pragma Access\n\n  Stack.prototype.get = function get (index, notSetValue) {\n    var head = this._head;\n    index = wrapIndex(this, index);\n    while (head && index--) {\n      head = head.next;\n    }\n    return head ? head.value : notSetValue;\n  };\n\n  Stack.prototype.peek = function peek () {\n    return this._head && this._head.value;\n  };\n\n  // @pragma Modification\n\n  Stack.prototype.push = function push (/*...values*/) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 0) {\n      return this;\n    }\n    var newSize = this.size + arguments.length;\n    var head = this._head;\n    for (var ii = arguments.length - 1; ii >= 0; ii--) {\n      head = {\n        value: arguments$1[ii],\n        next: head,\n      };\n    }\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  Stack.prototype.pushAll = function pushAll (iter) {\n    iter = IndexedCollection$$1(iter);\n    if (iter.size === 0) {\n      return this;\n    }\n    if (this.size === 0 && isStack(iter)) {\n      return iter;\n    }\n    assertNotInfinite(iter.size);\n    var newSize = this.size;\n    var head = this._head;\n    iter.__iterate(function (value) {\n      newSize++;\n      head = {\n        value: value,\n        next: head,\n      };\n    }, /* reverse */ true);\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  Stack.prototype.pop = function pop () {\n    return this.slice(1);\n  };\n\n  Stack.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._head = undefined;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyStack();\n  };\n\n  Stack.prototype.slice = function slice (begin, end) {\n    if (wholeSlice(begin, end, this.size)) {\n      return this;\n    }\n    var resolvedBegin = resolveBegin(begin, this.size);\n    var resolvedEnd = resolveEnd(end, this.size);\n    if (resolvedEnd !== this.size) {\n      // super.slice(begin, end);\n      return IndexedCollection$$1.prototype.slice.call(this, begin, end);\n    }\n    var newSize = this.size - resolvedBegin;\n    var head = this._head;\n    while (resolvedBegin--) {\n      head = head.next;\n    }\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  // @pragma Mutability\n\n  Stack.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyStack();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeStack(this.size, this._head, ownerID, this.__hash);\n  };\n\n  // @pragma Iteration\n\n  Stack.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    if (reverse) {\n      return new ArraySeq(this.toArray()).__iterate(\n        function (v, k) { return fn(v, k, this$1); },\n        reverse\n      );\n    }\n    var iterations = 0;\n    var node = this._head;\n    while (node) {\n      if (fn(node.value, iterations++, this) === false) {\n        break;\n      }\n      node = node.next;\n    }\n    return iterations;\n  };\n\n  Stack.prototype.__iterator = function __iterator (type, reverse) {\n    if (reverse) {\n      return new ArraySeq(this.toArray()).__iterator(type, reverse);\n    }\n    var iterations = 0;\n    var node = this._head;\n    return new Iterator(function () {\n      if (node) {\n        var value = node.value;\n        node = node.next;\n        return iteratorValue(type, iterations++, value);\n      }\n      return iteratorDone();\n    });\n  };\n\n  return Stack;\n}(IndexedCollection));\n\nStack.isStack = isStack;\n\nvar StackPrototype = Stack.prototype;\nStackPrototype[IS_STACK_SYMBOL] = true;\nStackPrototype.shift = StackPrototype.pop;\nStackPrototype.unshift = StackPrototype.push;\nStackPrototype.unshiftAll = StackPrototype.pushAll;\nStackPrototype.withMutations = withMutations;\nStackPrototype.wasAltered = wasAltered;\nStackPrototype.asImmutable = asImmutable;\nStackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable;\nStackPrototype['@@transducer/step'] = function(result, arr) {\n  return result.unshift(arr);\n};\nStackPrototype['@@transducer/result'] = function(obj) {\n  return obj.asImmutable();\n};\n\nfunction makeStack(size, head, ownerID, hash) {\n  var map = Object.create(StackPrototype);\n  map.size = size;\n  map._head = head;\n  map.__ownerID = ownerID;\n  map.__hash = hash;\n  map.__altered = false;\n  return map;\n}\n\nvar EMPTY_STACK;\nfunction emptyStack() {\n  return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n}\n\nvar IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@';\n\nfunction isSet(maybeSet) {\n  return Boolean(maybeSet && maybeSet[IS_SET_SYMBOL]);\n}\n\nfunction isOrderedSet(maybeOrderedSet) {\n  return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n}\n\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (\n    !isCollection(b) ||\n    (a.size !== undefined && b.size !== undefined && a.size !== b.size) ||\n    (a.__hash !== undefined &&\n      b.__hash !== undefined &&\n      a.__hash !== b.__hash) ||\n    isKeyed(a) !== isKeyed(b) ||\n    isIndexed(a) !== isIndexed(b) ||\n    isOrdered(a) !== isOrdered(b)\n  ) {\n    return false;\n  }\n\n  if (a.size === 0 && b.size === 0) {\n    return true;\n  }\n\n  var notAssociative = !isAssociative(a);\n\n  if (isOrdered(a)) {\n    var entries = a.entries();\n    return (\n      b.every(function (v, k) {\n        var entry = entries.next().value;\n        return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n      }) && entries.next().done\n    );\n  }\n\n  var flipped = false;\n\n  if (a.size === undefined) {\n    if (b.size === undefined) {\n      if (typeof a.cacheResult === 'function') {\n        a.cacheResult();\n      }\n    } else {\n      flipped = true;\n      var _ = a;\n      a = b;\n      b = _;\n    }\n  }\n\n  var allEqual = true;\n  var bSize = b.__iterate(function (v, k) {\n    if (\n      notAssociative\n        ? !a.has(v)\n        : flipped\n          ? !is(v, a.get(k, NOT_SET))\n          : !is(a.get(k, NOT_SET), v)\n    ) {\n      allEqual = false;\n      return false;\n    }\n  });\n\n  return allEqual && a.size === bSize;\n}\n\n/**\n * Contributes additional methods to a constructor\n */\nfunction mixin(ctor, methods) {\n  var keyCopier = function (key) {\n    ctor.prototype[key] = methods[key];\n  };\n  Object.keys(methods).forEach(keyCopier);\n  Object.getOwnPropertySymbols &&\n    Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n  return ctor;\n}\n\nfunction toJS(value) {\n  if (!value || typeof value !== 'object') {\n    return value;\n  }\n  if (!isCollection(value)) {\n    if (!isDataStructure(value)) {\n      return value;\n    }\n    value = Seq(value);\n  }\n  if (isKeyed(value)) {\n    var result$1 = {};\n    value.__iterate(function (v, k) {\n      result$1[k] = toJS(v);\n    });\n    return result$1;\n  }\n  var result = [];\n  value.__iterate(function (v) {\n    result.push(toJS(v));\n  });\n  return result;\n}\n\nvar Set = /*@__PURE__*/(function (SetCollection$$1) {\n  function Set(value) {\n    return value === null || value === undefined\n      ? emptySet()\n      : isSet(value) && !isOrdered(value)\n        ? value\n        : emptySet().withMutations(function (set) {\n            var iter = SetCollection$$1(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v) { return set.add(v); });\n          });\n  }\n\n  if ( SetCollection$$1 ) Set.__proto__ = SetCollection$$1;\n  Set.prototype = Object.create( SetCollection$$1 && SetCollection$$1.prototype );\n  Set.prototype.constructor = Set;\n\n  Set.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  Set.fromKeys = function fromKeys (value) {\n    return this(KeyedCollection(value).keySeq());\n  };\n\n  Set.intersect = function intersect (sets) {\n    sets = Collection(sets).toArray();\n    return sets.length\n      ? SetPrototype.intersect.apply(Set(sets.pop()), sets)\n      : emptySet();\n  };\n\n  Set.union = function union (sets) {\n    sets = Collection(sets).toArray();\n    return sets.length\n      ? SetPrototype.union.apply(Set(sets.pop()), sets)\n      : emptySet();\n  };\n\n  Set.prototype.toString = function toString () {\n    return this.__toString('Set {', '}');\n  };\n\n  // @pragma Access\n\n  Set.prototype.has = function has (value) {\n    return this._map.has(value);\n  };\n\n  // @pragma Modification\n\n  Set.prototype.add = function add (value) {\n    return updateSet(this, this._map.set(value, value));\n  };\n\n  Set.prototype.remove = function remove (value) {\n    return updateSet(this, this._map.remove(value));\n  };\n\n  Set.prototype.clear = function clear () {\n    return updateSet(this, this._map.clear());\n  };\n\n  // @pragma Composition\n\n  Set.prototype.map = function map (mapper, context) {\n    var this$1 = this;\n\n    var removes = [];\n    var adds = [];\n    this.forEach(function (value) {\n      var mapped = mapper.call(context, value, value, this$1);\n      if (mapped !== value) {\n        removes.push(value);\n        adds.push(mapped);\n      }\n    });\n    return this.withMutations(function (set) {\n      removes.forEach(function (value) { return set.remove(value); });\n      adds.forEach(function (value) { return set.add(value); });\n    });\n  };\n\n  Set.prototype.union = function union () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    iters = iters.filter(function (x) { return x.size !== 0; });\n    if (iters.length === 0) {\n      return this;\n    }\n    if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n      return this.constructor(iters[0]);\n    }\n    return this.withMutations(function (set) {\n      for (var ii = 0; ii < iters.length; ii++) {\n        SetCollection$$1(iters[ii]).forEach(function (value) { return set.add(value); });\n      }\n    });\n  };\n\n  Set.prototype.intersect = function intersect () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    if (iters.length === 0) {\n      return this;\n    }\n    iters = iters.map(function (iter) { return SetCollection$$1(iter); });\n    var toRemove = [];\n    this.forEach(function (value) {\n      if (!iters.every(function (iter) { return iter.includes(value); })) {\n        toRemove.push(value);\n      }\n    });\n    return this.withMutations(function (set) {\n      toRemove.forEach(function (value) {\n        set.remove(value);\n      });\n    });\n  };\n\n  Set.prototype.subtract = function subtract () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    if (iters.length === 0) {\n      return this;\n    }\n    iters = iters.map(function (iter) { return SetCollection$$1(iter); });\n    var toRemove = [];\n    this.forEach(function (value) {\n      if (iters.some(function (iter) { return iter.includes(value); })) {\n        toRemove.push(value);\n      }\n    });\n    return this.withMutations(function (set) {\n      toRemove.forEach(function (value) {\n        set.remove(value);\n      });\n    });\n  };\n\n  Set.prototype.sort = function sort (comparator) {\n    // Late binding\n    return OrderedSet(sortFactory(this, comparator));\n  };\n\n  Set.prototype.sortBy = function sortBy (mapper, comparator) {\n    // Late binding\n    return OrderedSet(sortFactory(this, comparator, mapper));\n  };\n\n  Set.prototype.wasAltered = function wasAltered () {\n    return this._map.wasAltered();\n  };\n\n  Set.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1 = this;\n\n    return this._map.__iterate(function (k) { return fn(k, k, this$1); }, reverse);\n  };\n\n  Set.prototype.__iterator = function __iterator (type, reverse) {\n    return this._map.__iterator(type, reverse);\n  };\n\n  Set.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    var newMap = this._map.__ensureOwner(ownerID);\n    if (!ownerID) {\n      if (this.size === 0) {\n        return this.__empty();\n      }\n      this.__ownerID = ownerID;\n      this._map = newMap;\n      return this;\n    }\n    return this.__make(newMap, ownerID);\n  };\n\n  return Set;\n}(SetCollection));\n\nSet.isSet = isSet;\n\nvar SetPrototype = Set.prototype;\nSetPrototype[IS_SET_SYMBOL] = true;\nSetPrototype[DELETE] = SetPrototype.remove;\nSetPrototype.merge = SetPrototype.concat = SetPrototype.union;\nSetPrototype.withMutations = withMutations;\nSetPrototype.asImmutable = asImmutable;\nSetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable;\nSetPrototype['@@transducer/step'] = function(result, arr) {\n  return result.add(arr);\n};\nSetPrototype['@@transducer/result'] = function(obj) {\n  return obj.asImmutable();\n};\n\nSetPrototype.__empty = emptySet;\nSetPrototype.__make = makeSet;\n\nfunction updateSet(set, newMap) {\n  if (set.__ownerID) {\n    set.size = newMap.size;\n    set._map = newMap;\n    return set;\n  }\n  return newMap === set._map\n    ? set\n    : newMap.size === 0\n      ? set.__empty()\n      : set.__make(newMap);\n}\n\nfunction makeSet(map, ownerID) {\n  var set = Object.create(SetPrototype);\n  set.size = map ? map.size : 0;\n  set._map = map;\n  set.__ownerID = ownerID;\n  return set;\n}\n\nvar EMPTY_SET;\nfunction emptySet() {\n  return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n}\n\n/**\n * Returns a lazy seq of nums from start (inclusive) to end\n * (exclusive), by step, where start defaults to 0, step to 1, and end to\n * infinity. When start is equal to end, returns empty list.\n */\nvar Range = /*@__PURE__*/(function (IndexedSeq$$1) {\n  function Range(start, end, step) {\n    if (!(this instanceof Range)) {\n      return new Range(start, end, step);\n    }\n    invariant(step !== 0, 'Cannot step a Range by 0');\n    start = start || 0;\n    if (end === undefined) {\n      end = Infinity;\n    }\n    step = step === undefined ? 1 : Math.abs(step);\n    if (end < start) {\n      step = -step;\n    }\n    this._start = start;\n    this._end = end;\n    this._step = step;\n    this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n    if (this.size === 0) {\n      if (EMPTY_RANGE) {\n        return EMPTY_RANGE;\n      }\n      EMPTY_RANGE = this;\n    }\n  }\n\n  if ( IndexedSeq$$1 ) Range.__proto__ = IndexedSeq$$1;\n  Range.prototype = Object.create( IndexedSeq$$1 && IndexedSeq$$1.prototype );\n  Range.prototype.constructor = Range;\n\n  Range.prototype.toString = function toString () {\n    if (this.size === 0) {\n      return 'Range []';\n    }\n    return (\n      'Range [ ' +\n      this._start +\n      '...' +\n      this._end +\n      (this._step !== 1 ? ' by ' + this._step : '') +\n      ' ]'\n    );\n  };\n\n  Range.prototype.get = function get (index, notSetValue) {\n    return this.has(index)\n      ? this._start + wrapIndex(this, index) * this._step\n      : notSetValue;\n  };\n\n  Range.prototype.includes = function includes (searchValue) {\n    var possibleIndex = (searchValue - this._start) / this._step;\n    return (\n      possibleIndex >= 0 &&\n      possibleIndex < this.size &&\n      possibleIndex === Math.floor(possibleIndex)\n    );\n  };\n\n  Range.prototype.slice = function slice (begin, end) {\n    if (wholeSlice(begin, end, this.size)) {\n      return this;\n    }\n    begin = resolveBegin(begin, this.size);\n    end = resolveEnd(end, this.size);\n    if (end <= begin) {\n      return new Range(0, 0);\n    }\n    return new Range(\n      this.get(begin, this._end),\n      this.get(end, this._end),\n      this._step\n    );\n  };\n\n  Range.prototype.indexOf = function indexOf (searchValue) {\n    var offsetValue = searchValue - this._start;\n    if (offsetValue % this._step === 0) {\n      var index = offsetValue / this._step;\n      if (index >= 0 && index < this.size) {\n        return index;\n      }\n    }\n    return -1;\n  };\n\n  Range.prototype.lastIndexOf = function lastIndexOf (searchValue) {\n    return this.indexOf(searchValue);\n  };\n\n  Range.prototype.__iterate = function __iterate (fn, reverse) {\n    var size = this.size;\n    var step = this._step;\n    var value = reverse ? this._start + (size - 1) * step : this._start;\n    var i = 0;\n    while (i !== size) {\n      if (fn(value, reverse ? size - ++i : i++, this) === false) {\n        break;\n      }\n      value += reverse ? -step : step;\n    }\n    return i;\n  };\n\n  Range.prototype.__iterator = function __iterator (type, reverse) {\n    var size = this.size;\n    var step = this._step;\n    var value = reverse ? this._start + (size - 1) * step : this._start;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var v = value;\n      value += reverse ? -step : step;\n      return iteratorValue(type, reverse ? size - ++i : i++, v);\n    });\n  };\n\n  Range.prototype.equals = function equals (other) {\n    return other instanceof Range\n      ? this._start === other._start &&\n          this._end === other._end &&\n          this._step === other._step\n      : deepEqual(this, other);\n  };\n\n  return Range;\n}(IndexedSeq));\n\nvar EMPTY_RANGE;\n\nfunction getIn(collection, searchKeyPath, notSetValue) {\n  var keyPath = coerceKeyPath(searchKeyPath);\n  var i = 0;\n  while (i !== keyPath.length) {\n    collection = get(collection, keyPath[i++], NOT_SET);\n    if (collection === NOT_SET) {\n      return notSetValue;\n    }\n  }\n  return collection;\n}\n\nfunction getIn$1(searchKeyPath, notSetValue) {\n  return getIn(this, searchKeyPath, notSetValue);\n}\n\nfunction hasIn(collection, keyPath) {\n  return getIn(collection, keyPath, NOT_SET) !== NOT_SET;\n}\n\nfunction hasIn$1(searchKeyPath) {\n  return hasIn(this, searchKeyPath);\n}\n\nfunction toObject() {\n  assertNotInfinite(this.size);\n  var object = {};\n  this.__iterate(function (v, k) {\n    object[k] = v;\n  });\n  return object;\n}\n\n// Note: all of these methods are deprecated.\nCollection.isIterable = isCollection;\nCollection.isKeyed = isKeyed;\nCollection.isIndexed = isIndexed;\nCollection.isAssociative = isAssociative;\nCollection.isOrdered = isOrdered;\n\nCollection.Iterator = Iterator;\n\nmixin(Collection, {\n  // ### Conversion to other types\n\n  toArray: function toArray() {\n    assertNotInfinite(this.size);\n    var array = new Array(this.size || 0);\n    var useTuples = isKeyed(this);\n    var i = 0;\n    this.__iterate(function (v, k) {\n      // Keyed collections produce an array of tuples.\n      array[i++] = useTuples ? [k, v] : v;\n    });\n    return array;\n  },\n\n  toIndexedSeq: function toIndexedSeq() {\n    return new ToIndexedSequence(this);\n  },\n\n  toJS: function toJS$1() {\n    return toJS(this);\n  },\n\n  toKeyedSeq: function toKeyedSeq() {\n    return new ToKeyedSequence(this, true);\n  },\n\n  toMap: function toMap() {\n    // Use Late Binding here to solve the circular dependency.\n    return Map(this.toKeyedSeq());\n  },\n\n  toObject: toObject,\n\n  toOrderedMap: function toOrderedMap() {\n    // Use Late Binding here to solve the circular dependency.\n    return OrderedMap(this.toKeyedSeq());\n  },\n\n  toOrderedSet: function toOrderedSet() {\n    // Use Late Binding here to solve the circular dependency.\n    return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toSet: function toSet() {\n    // Use Late Binding here to solve the circular dependency.\n    return Set(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toSetSeq: function toSetSeq() {\n    return new ToSetSequence(this);\n  },\n\n  toSeq: function toSeq() {\n    return isIndexed(this)\n      ? this.toIndexedSeq()\n      : isKeyed(this)\n        ? this.toKeyedSeq()\n        : this.toSetSeq();\n  },\n\n  toStack: function toStack() {\n    // Use Late Binding here to solve the circular dependency.\n    return Stack(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toList: function toList() {\n    // Use Late Binding here to solve the circular dependency.\n    return List(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  // ### Common JavaScript methods and properties\n\n  toString: function toString() {\n    return '[Collection]';\n  },\n\n  __toString: function __toString(head, tail) {\n    if (this.size === 0) {\n      return head + tail;\n    }\n    return (\n      head +\n      ' ' +\n      this.toSeq()\n        .map(this.__toStringMapper)\n        .join(', ') +\n      ' ' +\n      tail\n    );\n  },\n\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  concat: function concat() {\n    var values = [], len = arguments.length;\n    while ( len-- ) values[ len ] = arguments[ len ];\n\n    return reify(this, concatFactory(this, values));\n  },\n\n  includes: function includes(searchValue) {\n    return this.some(function (value) { return is(value, searchValue); });\n  },\n\n  entries: function entries() {\n    return this.__iterator(ITERATE_ENTRIES);\n  },\n\n  every: function every(predicate, context) {\n    assertNotInfinite(this.size);\n    var returnValue = true;\n    this.__iterate(function (v, k, c) {\n      if (!predicate.call(context, v, k, c)) {\n        returnValue = false;\n        return false;\n      }\n    });\n    return returnValue;\n  },\n\n  filter: function filter(predicate, context) {\n    return reify(this, filterFactory(this, predicate, context, true));\n  },\n\n  find: function find(predicate, context, notSetValue) {\n    var entry = this.findEntry(predicate, context);\n    return entry ? entry[1] : notSetValue;\n  },\n\n  forEach: function forEach(sideEffect, context) {\n    assertNotInfinite(this.size);\n    return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n  },\n\n  join: function join(separator) {\n    assertNotInfinite(this.size);\n    separator = separator !== undefined ? '' + separator : ',';\n    var joined = '';\n    var isFirst = true;\n    this.__iterate(function (v) {\n      isFirst ? (isFirst = false) : (joined += separator);\n      joined += v !== null && v !== undefined ? v.toString() : '';\n    });\n    return joined;\n  },\n\n  keys: function keys() {\n    return this.__iterator(ITERATE_KEYS);\n  },\n\n  map: function map(mapper, context) {\n    return reify(this, mapFactory(this, mapper, context));\n  },\n\n  reduce: function reduce$1(reducer, initialReduction, context) {\n    return reduce(\n      this,\n      reducer,\n      initialReduction,\n      context,\n      arguments.length < 2,\n      false\n    );\n  },\n\n  reduceRight: function reduceRight(reducer, initialReduction, context) {\n    return reduce(\n      this,\n      reducer,\n      initialReduction,\n      context,\n      arguments.length < 2,\n      true\n    );\n  },\n\n  reverse: function reverse() {\n    return reify(this, reverseFactory(this, true));\n  },\n\n  slice: function slice(begin, end) {\n    return reify(this, sliceFactory(this, begin, end, true));\n  },\n\n  some: function some(predicate, context) {\n    return !this.every(not(predicate), context);\n  },\n\n  sort: function sort(comparator) {\n    return reify(this, sortFactory(this, comparator));\n  },\n\n  values: function values() {\n    return this.__iterator(ITERATE_VALUES);\n  },\n\n  // ### More sequential methods\n\n  butLast: function butLast() {\n    return this.slice(0, -1);\n  },\n\n  isEmpty: function isEmpty() {\n    return this.size !== undefined ? this.size === 0 : !this.some(function () { return true; });\n  },\n\n  count: function count(predicate, context) {\n    return ensureSize(\n      predicate ? this.toSeq().filter(predicate, context) : this\n    );\n  },\n\n  countBy: function countBy(grouper, context) {\n    return countByFactory(this, grouper, context);\n  },\n\n  equals: function equals(other) {\n    return deepEqual(this, other);\n  },\n\n  entrySeq: function entrySeq() {\n    var collection = this;\n    if (collection._cache) {\n      // We cache as an entries array, so we can just return the cache!\n      return new ArraySeq(collection._cache);\n    }\n    var entriesSequence = collection\n      .toSeq()\n      .map(entryMapper)\n      .toIndexedSeq();\n    entriesSequence.fromEntrySeq = function () { return collection.toSeq(); };\n    return entriesSequence;\n  },\n\n  filterNot: function filterNot(predicate, context) {\n    return this.filter(not(predicate), context);\n  },\n\n  findEntry: function findEntry(predicate, context, notSetValue) {\n    var found = notSetValue;\n    this.__iterate(function (v, k, c) {\n      if (predicate.call(context, v, k, c)) {\n        found = [k, v];\n        return false;\n      }\n    });\n    return found;\n  },\n\n  findKey: function findKey(predicate, context) {\n    var entry = this.findEntry(predicate, context);\n    return entry && entry[0];\n  },\n\n  findLast: function findLast(predicate, context, notSetValue) {\n    return this.toKeyedSeq()\n      .reverse()\n      .find(predicate, context, notSetValue);\n  },\n\n  findLastEntry: function findLastEntry(predicate, context, notSetValue) {\n    return this.toKeyedSeq()\n      .reverse()\n      .findEntry(predicate, context, notSetValue);\n  },\n\n  findLastKey: function findLastKey(predicate, context) {\n    return this.toKeyedSeq()\n      .reverse()\n      .findKey(predicate, context);\n  },\n\n  first: function first(notSetValue) {\n    return this.find(returnTrue, null, notSetValue);\n  },\n\n  flatMap: function flatMap(mapper, context) {\n    return reify(this, flatMapFactory(this, mapper, context));\n  },\n\n  flatten: function flatten(depth) {\n    return reify(this, flattenFactory(this, depth, true));\n  },\n\n  fromEntrySeq: function fromEntrySeq() {\n    return new FromEntriesSequence(this);\n  },\n\n  get: function get(searchKey, notSetValue) {\n    return this.find(function (_, key) { return is(key, searchKey); }, undefined, notSetValue);\n  },\n\n  getIn: getIn$1,\n\n  groupBy: function groupBy(grouper, context) {\n    return groupByFactory(this, grouper, context);\n  },\n\n  has: function has(searchKey) {\n    return this.get(searchKey, NOT_SET) !== NOT_SET;\n  },\n\n  hasIn: hasIn$1,\n\n  isSubset: function isSubset(iter) {\n    iter = typeof iter.includes === 'function' ? iter : Collection(iter);\n    return this.every(function (value) { return iter.includes(value); });\n  },\n\n  isSuperset: function isSuperset(iter) {\n    iter = typeof iter.isSubset === 'function' ? iter : Collection(iter);\n    return iter.isSubset(this);\n  },\n\n  keyOf: function keyOf(searchValue) {\n    return this.findKey(function (value) { return is(value, searchValue); });\n  },\n\n  keySeq: function keySeq() {\n    return this.toSeq()\n      .map(keyMapper)\n      .toIndexedSeq();\n  },\n\n  last: function last(notSetValue) {\n    return this.toSeq()\n      .reverse()\n      .first(notSetValue);\n  },\n\n  lastKeyOf: function lastKeyOf(searchValue) {\n    return this.toKeyedSeq()\n      .reverse()\n      .keyOf(searchValue);\n  },\n\n  max: function max(comparator) {\n    return maxFactory(this, comparator);\n  },\n\n  maxBy: function maxBy(mapper, comparator) {\n    return maxFactory(this, comparator, mapper);\n  },\n\n  min: function min(comparator) {\n    return maxFactory(\n      this,\n      comparator ? neg(comparator) : defaultNegComparator\n    );\n  },\n\n  minBy: function minBy(mapper, comparator) {\n    return maxFactory(\n      this,\n      comparator ? neg(comparator) : defaultNegComparator,\n      mapper\n    );\n  },\n\n  rest: function rest() {\n    return this.slice(1);\n  },\n\n  skip: function skip(amount) {\n    return amount === 0 ? this : this.slice(Math.max(0, amount));\n  },\n\n  skipLast: function skipLast(amount) {\n    return amount === 0 ? this : this.slice(0, -Math.max(0, amount));\n  },\n\n  skipWhile: function skipWhile(predicate, context) {\n    return reify(this, skipWhileFactory(this, predicate, context, true));\n  },\n\n  skipUntil: function skipUntil(predicate, context) {\n    return this.skipWhile(not(predicate), context);\n  },\n\n  sortBy: function sortBy(mapper, comparator) {\n    return reify(this, sortFactory(this, comparator, mapper));\n  },\n\n  take: function take(amount) {\n    return this.slice(0, Math.max(0, amount));\n  },\n\n  takeLast: function takeLast(amount) {\n    return this.slice(-Math.max(0, amount));\n  },\n\n  takeWhile: function takeWhile(predicate, context) {\n    return reify(this, takeWhileFactory(this, predicate, context));\n  },\n\n  takeUntil: function takeUntil(predicate, context) {\n    return this.takeWhile(not(predicate), context);\n  },\n\n  update: function update(fn) {\n    return fn(this);\n  },\n\n  valueSeq: function valueSeq() {\n    return this.toIndexedSeq();\n  },\n\n  // ### Hashable Object\n\n  hashCode: function hashCode() {\n    return this.__hash || (this.__hash = hashCollection(this));\n  },\n\n  // ### Internal\n\n  // abstract __iterate(fn, reverse)\n\n  // abstract __iterator(type, reverse)\n});\n\nvar CollectionPrototype = Collection.prototype;\nCollectionPrototype[IS_COLLECTION_SYMBOL] = true;\nCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values;\nCollectionPrototype.toJSON = CollectionPrototype.toArray;\nCollectionPrototype.__toStringMapper = quoteString;\nCollectionPrototype.inspect = CollectionPrototype.toSource = function() {\n  return this.toString();\n};\nCollectionPrototype.chain = CollectionPrototype.flatMap;\nCollectionPrototype.contains = CollectionPrototype.includes;\n\nmixin(KeyedCollection, {\n  // ### More sequential methods\n\n  flip: function flip() {\n    return reify(this, flipFactory(this));\n  },\n\n  mapEntries: function mapEntries(mapper, context) {\n    var this$1 = this;\n\n    var iterations = 0;\n    return reify(\n      this,\n      this.toSeq()\n        .map(function (v, k) { return mapper.call(context, [k, v], iterations++, this$1); })\n        .fromEntrySeq()\n    );\n  },\n\n  mapKeys: function mapKeys(mapper, context) {\n    var this$1 = this;\n\n    return reify(\n      this,\n      this.toSeq()\n        .flip()\n        .map(function (k, v) { return mapper.call(context, k, v, this$1); })\n        .flip()\n    );\n  },\n});\n\nvar KeyedCollectionPrototype = KeyedCollection.prototype;\nKeyedCollectionPrototype[IS_KEYED_SYMBOL] = true;\nKeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries;\nKeyedCollectionPrototype.toJSON = toObject;\nKeyedCollectionPrototype.__toStringMapper = function (v, k) { return quoteString(k) + ': ' + quoteString(v); };\n\nmixin(IndexedCollection, {\n  // ### Conversion to other types\n\n  toKeyedSeq: function toKeyedSeq() {\n    return new ToKeyedSequence(this, false);\n  },\n\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  filter: function filter(predicate, context) {\n    return reify(this, filterFactory(this, predicate, context, false));\n  },\n\n  findIndex: function findIndex(predicate, context) {\n    var entry = this.findEntry(predicate, context);\n    return entry ? entry[0] : -1;\n  },\n\n  indexOf: function indexOf(searchValue) {\n    var key = this.keyOf(searchValue);\n    return key === undefined ? -1 : key;\n  },\n\n  lastIndexOf: function lastIndexOf(searchValue) {\n    var key = this.lastKeyOf(searchValue);\n    return key === undefined ? -1 : key;\n  },\n\n  reverse: function reverse() {\n    return reify(this, reverseFactory(this, false));\n  },\n\n  slice: function slice(begin, end) {\n    return reify(this, sliceFactory(this, begin, end, false));\n  },\n\n  splice: function splice(index, removeNum /*, ...values*/) {\n    var numArgs = arguments.length;\n    removeNum = Math.max(removeNum || 0, 0);\n    if (numArgs === 0 || (numArgs === 2 && !removeNum)) {\n      return this;\n    }\n    // If index is negative, it should resolve relative to the size of the\n    // collection. However size may be expensive to compute if not cached, so\n    // only call count() if the number is in fact negative.\n    index = resolveBegin(index, index < 0 ? this.count() : this.size);\n    var spliced = this.slice(0, index);\n    return reify(\n      this,\n      numArgs === 1\n        ? spliced\n        : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum))\n    );\n  },\n\n  // ### More collection methods\n\n  findLastIndex: function findLastIndex(predicate, context) {\n    var entry = this.findLastEntry(predicate, context);\n    return entry ? entry[0] : -1;\n  },\n\n  first: function first(notSetValue) {\n    return this.get(0, notSetValue);\n  },\n\n  flatten: function flatten(depth) {\n    return reify(this, flattenFactory(this, depth, false));\n  },\n\n  get: function get(index, notSetValue) {\n    index = wrapIndex(this, index);\n    return index < 0 ||\n      (this.size === Infinity || (this.size !== undefined && index > this.size))\n      ? notSetValue\n      : this.find(function (_, key) { return key === index; }, undefined, notSetValue);\n  },\n\n  has: function has(index) {\n    index = wrapIndex(this, index);\n    return (\n      index >= 0 &&\n      (this.size !== undefined\n        ? this.size === Infinity || index < this.size\n        : this.indexOf(index) !== -1)\n    );\n  },\n\n  interpose: function interpose(separator) {\n    return reify(this, interposeFactory(this, separator));\n  },\n\n  interleave: function interleave(/*...collections*/) {\n    var collections = [this].concat(arrCopy(arguments));\n    var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections);\n    var interleaved = zipped.flatten(true);\n    if (zipped.size) {\n      interleaved.size = zipped.size * collections.length;\n    }\n    return reify(this, interleaved);\n  },\n\n  keySeq: function keySeq() {\n    return Range(0, this.size);\n  },\n\n  last: function last(notSetValue) {\n    return this.get(-1, notSetValue);\n  },\n\n  skipWhile: function skipWhile(predicate, context) {\n    return reify(this, skipWhileFactory(this, predicate, context, false));\n  },\n\n  zip: function zip(/*, ...collections */) {\n    var collections = [this].concat(arrCopy(arguments));\n    return reify(this, zipWithFactory(this, defaultZipper, collections));\n  },\n\n  zipAll: function zipAll(/*, ...collections */) {\n    var collections = [this].concat(arrCopy(arguments));\n    return reify(this, zipWithFactory(this, defaultZipper, collections, true));\n  },\n\n  zipWith: function zipWith(zipper /*, ...collections */) {\n    var collections = arrCopy(arguments);\n    collections[0] = this;\n    return reify(this, zipWithFactory(this, zipper, collections));\n  },\n});\n\nvar IndexedCollectionPrototype = IndexedCollection.prototype;\nIndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true;\nIndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true;\n\nmixin(SetCollection, {\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  get: function get(value, notSetValue) {\n    return this.has(value) ? value : notSetValue;\n  },\n\n  includes: function includes(value) {\n    return this.has(value);\n  },\n\n  // ### More sequential methods\n\n  keySeq: function keySeq() {\n    return this.valueSeq();\n  },\n});\n\nSetCollection.prototype.has = CollectionPrototype.includes;\nSetCollection.prototype.contains = SetCollection.prototype.includes;\n\n// Mixin subclasses\n\nmixin(KeyedSeq, KeyedCollection.prototype);\nmixin(IndexedSeq, IndexedCollection.prototype);\nmixin(SetSeq, SetCollection.prototype);\n\n// #pragma Helper functions\n\nfunction reduce(collection, reducer, reduction, context, useFirst, reverse) {\n  assertNotInfinite(collection.size);\n  collection.__iterate(function (v, k, c) {\n    if (useFirst) {\n      useFirst = false;\n      reduction = v;\n    } else {\n      reduction = reducer.call(context, reduction, v, k, c);\n    }\n  }, reverse);\n  return reduction;\n}\n\nfunction keyMapper(v, k) {\n  return k;\n}\n\nfunction entryMapper(v, k) {\n  return [k, v];\n}\n\nfunction not(predicate) {\n  return function() {\n    return !predicate.apply(this, arguments);\n  };\n}\n\nfunction neg(predicate) {\n  return function() {\n    return -predicate.apply(this, arguments);\n  };\n}\n\nfunction defaultZipper() {\n  return arrCopy(arguments);\n}\n\nfunction defaultNegComparator(a, b) {\n  return a < b ? 1 : a > b ? -1 : 0;\n}\n\nfunction hashCollection(collection) {\n  if (collection.size === Infinity) {\n    return 0;\n  }\n  var ordered = isOrdered(collection);\n  var keyed = isKeyed(collection);\n  var h = ordered ? 1 : 0;\n  var size = collection.__iterate(\n    keyed\n      ? ordered\n        ? function (v, k) {\n            h = (31 * h + hashMerge(hash(v), hash(k))) | 0;\n          }\n        : function (v, k) {\n            h = (h + hashMerge(hash(v), hash(k))) | 0;\n          }\n      : ordered\n        ? function (v) {\n            h = (31 * h + hash(v)) | 0;\n          }\n        : function (v) {\n            h = (h + hash(v)) | 0;\n          }\n  );\n  return murmurHashOfSize(size, h);\n}\n\nfunction murmurHashOfSize(size, h) {\n  h = imul(h, 0xcc9e2d51);\n  h = imul((h << 15) | (h >>> -15), 0x1b873593);\n  h = imul((h << 13) | (h >>> -13), 5);\n  h = ((h + 0xe6546b64) | 0) ^ size;\n  h = imul(h ^ (h >>> 16), 0x85ebca6b);\n  h = imul(h ^ (h >>> 13), 0xc2b2ae35);\n  h = smi(h ^ (h >>> 16));\n  return h;\n}\n\nfunction hashMerge(a, b) {\n  return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int\n}\n\nvar OrderedSet = /*@__PURE__*/(function (Set$$1) {\n  function OrderedSet(value) {\n    return value === null || value === undefined\n      ? emptyOrderedSet()\n      : isOrderedSet(value)\n        ? value\n        : emptyOrderedSet().withMutations(function (set) {\n            var iter = SetCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v) { return set.add(v); });\n          });\n  }\n\n  if ( Set$$1 ) OrderedSet.__proto__ = Set$$1;\n  OrderedSet.prototype = Object.create( Set$$1 && Set$$1.prototype );\n  OrderedSet.prototype.constructor = OrderedSet;\n\n  OrderedSet.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  OrderedSet.fromKeys = function fromKeys (value) {\n    return this(KeyedCollection(value).keySeq());\n  };\n\n  OrderedSet.prototype.toString = function toString () {\n    return this.__toString('OrderedSet {', '}');\n  };\n\n  return OrderedSet;\n}(Set));\n\nOrderedSet.isOrderedSet = isOrderedSet;\n\nvar OrderedSetPrototype = OrderedSet.prototype;\nOrderedSetPrototype[IS_ORDERED_SYMBOL] = true;\nOrderedSetPrototype.zip = IndexedCollectionPrototype.zip;\nOrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith;\n\nOrderedSetPrototype.__empty = emptyOrderedSet;\nOrderedSetPrototype.__make = makeOrderedSet;\n\nfunction makeOrderedSet(map, ownerID) {\n  var set = Object.create(OrderedSetPrototype);\n  set.size = map ? map.size : 0;\n  set._map = map;\n  set.__ownerID = ownerID;\n  return set;\n}\n\nvar EMPTY_ORDERED_SET;\nfunction emptyOrderedSet() {\n  return (\n    EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()))\n  );\n}\n\nvar Record = function Record(defaultValues, name) {\n  var hasInitialized;\n\n  var RecordType = function Record(values) {\n    var this$1 = this;\n\n    if (values instanceof RecordType) {\n      return values;\n    }\n    if (!(this instanceof RecordType)) {\n      return new RecordType(values);\n    }\n    if (!hasInitialized) {\n      hasInitialized = true;\n      var keys = Object.keys(defaultValues);\n      var indices = (RecordTypePrototype._indices = {});\n      // Deprecated: left to attempt not to break any external code which\n      // relies on a ._name property existing on record instances.\n      // Use Record.getDescriptiveName() instead\n      RecordTypePrototype._name = name;\n      RecordTypePrototype._keys = keys;\n      RecordTypePrototype._defaultValues = defaultValues;\n      for (var i = 0; i < keys.length; i++) {\n        var propName = keys[i];\n        indices[propName] = i;\n        if (RecordTypePrototype[propName]) {\n          /* eslint-disable no-console */\n          typeof console === 'object' &&\n            console.warn &&\n            console.warn(\n              'Cannot define ' +\n                recordName(this) +\n                ' with property \"' +\n                propName +\n                '\" since that property name is part of the Record API.'\n            );\n          /* eslint-enable no-console */\n        } else {\n          setProp(RecordTypePrototype, propName);\n        }\n      }\n    }\n    this.__ownerID = undefined;\n    this._values = List().withMutations(function (l) {\n      l.setSize(this$1._keys.length);\n      KeyedCollection(values).forEach(function (v, k) {\n        l.set(this$1._indices[k], v === this$1._defaultValues[k] ? undefined : v);\n      });\n    });\n  };\n\n  var RecordTypePrototype = (RecordType.prototype = Object.create(\n    RecordPrototype\n  ));\n  RecordTypePrototype.constructor = RecordType;\n\n  if (name) {\n    RecordType.displayName = name;\n  }\n\n  return RecordType;\n};\n\nRecord.prototype.toString = function toString () {\n  var str = recordName(this) + ' { ';\n  var keys = this._keys;\n  var k;\n  for (var i = 0, l = keys.length; i !== l; i++) {\n    k = keys[i];\n    str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k));\n  }\n  return str + ' }';\n};\n\nRecord.prototype.equals = function equals (other) {\n  return (\n    this === other ||\n    (other &&\n      this._keys === other._keys &&\n      recordSeq(this).equals(recordSeq(other)))\n  );\n};\n\nRecord.prototype.hashCode = function hashCode () {\n  return recordSeq(this).hashCode();\n};\n\n// @pragma Access\n\nRecord.prototype.has = function has (k) {\n  return this._indices.hasOwnProperty(k);\n};\n\nRecord.prototype.get = function get (k, notSetValue) {\n  if (!this.has(k)) {\n    return notSetValue;\n  }\n  var index = this._indices[k];\n  var value = this._values.get(index);\n  return value === undefined ? this._defaultValues[k] : value;\n};\n\n// @pragma Modification\n\nRecord.prototype.set = function set (k, v) {\n  if (this.has(k)) {\n    var newValues = this._values.set(\n      this._indices[k],\n      v === this._defaultValues[k] ? undefined : v\n    );\n    if (newValues !== this._values && !this.__ownerID) {\n      return makeRecord(this, newValues);\n    }\n  }\n  return this;\n};\n\nRecord.prototype.remove = function remove (k) {\n  return this.set(k);\n};\n\nRecord.prototype.clear = function clear () {\n  var newValues = this._values.clear().setSize(this._keys.length);\n  return this.__ownerID ? this : makeRecord(this, newValues);\n};\n\nRecord.prototype.wasAltered = function wasAltered () {\n  return this._values.wasAltered();\n};\n\nRecord.prototype.toSeq = function toSeq () {\n  return recordSeq(this);\n};\n\nRecord.prototype.toJS = function toJS$1 () {\n  return toJS(this);\n};\n\nRecord.prototype.entries = function entries () {\n  return this.__iterator(ITERATE_ENTRIES);\n};\n\nRecord.prototype.__iterator = function __iterator (type, reverse) {\n  return recordSeq(this).__iterator(type, reverse);\n};\n\nRecord.prototype.__iterate = function __iterate (fn, reverse) {\n  return recordSeq(this).__iterate(fn, reverse);\n};\n\nRecord.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n  if (ownerID === this.__ownerID) {\n    return this;\n  }\n  var newValues = this._values.__ensureOwner(ownerID);\n  if (!ownerID) {\n    this.__ownerID = ownerID;\n    this._values = newValues;\n    return this;\n  }\n  return makeRecord(this, newValues, ownerID);\n};\n\nRecord.isRecord = isRecord;\nRecord.getDescriptiveName = recordName;\nvar RecordPrototype = Record.prototype;\nRecordPrototype[IS_RECORD_SYMBOL] = true;\nRecordPrototype[DELETE] = RecordPrototype.remove;\nRecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn;\nRecordPrototype.getIn = getIn$1;\nRecordPrototype.hasIn = CollectionPrototype.hasIn;\nRecordPrototype.merge = merge;\nRecordPrototype.mergeWith = mergeWith;\nRecordPrototype.mergeIn = mergeIn;\nRecordPrototype.mergeDeep = mergeDeep$1;\nRecordPrototype.mergeDeepWith = mergeDeepWith$1;\nRecordPrototype.mergeDeepIn = mergeDeepIn;\nRecordPrototype.setIn = setIn$1;\nRecordPrototype.update = update$1;\nRecordPrototype.updateIn = updateIn$1;\nRecordPrototype.withMutations = withMutations;\nRecordPrototype.asMutable = asMutable;\nRecordPrototype.asImmutable = asImmutable;\nRecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries;\nRecordPrototype.toJSON = RecordPrototype.toObject =\n  CollectionPrototype.toObject;\nRecordPrototype.inspect = RecordPrototype.toSource = function() {\n  return this.toString();\n};\n\nfunction makeRecord(likeRecord, values, ownerID) {\n  var record = Object.create(Object.getPrototypeOf(likeRecord));\n  record._values = values;\n  record.__ownerID = ownerID;\n  return record;\n}\n\nfunction recordName(record) {\n  return record.constructor.displayName || record.constructor.name || 'Record';\n}\n\nfunction recordSeq(record) {\n  return keyedSeqFromValue(record._keys.map(function (k) { return [k, record.get(k)]; }));\n}\n\nfunction setProp(prototype, name) {\n  try {\n    Object.defineProperty(prototype, name, {\n      get: function() {\n        return this.get(name);\n      },\n      set: function(value) {\n        invariant(this.__ownerID, 'Cannot set on an immutable record.');\n        this.set(name, value);\n      },\n    });\n  } catch (error) {\n    // Object.defineProperty failed. Probably IE8.\n  }\n}\n\n/**\n * Returns a lazy Seq of `value` repeated `times` times. When `times` is\n * undefined, returns an infinite sequence of `value`.\n */\nvar Repeat = /*@__PURE__*/(function (IndexedSeq$$1) {\n  function Repeat(value, times) {\n    if (!(this instanceof Repeat)) {\n      return new Repeat(value, times);\n    }\n    this._value = value;\n    this.size = times === undefined ? Infinity : Math.max(0, times);\n    if (this.size === 0) {\n      if (EMPTY_REPEAT) {\n        return EMPTY_REPEAT;\n      }\n      EMPTY_REPEAT = this;\n    }\n  }\n\n  if ( IndexedSeq$$1 ) Repeat.__proto__ = IndexedSeq$$1;\n  Repeat.prototype = Object.create( IndexedSeq$$1 && IndexedSeq$$1.prototype );\n  Repeat.prototype.constructor = Repeat;\n\n  Repeat.prototype.toString = function toString () {\n    if (this.size === 0) {\n      return 'Repeat []';\n    }\n    return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n  };\n\n  Repeat.prototype.get = function get (index, notSetValue) {\n    return this.has(index) ? this._value : notSetValue;\n  };\n\n  Repeat.prototype.includes = function includes (searchValue) {\n    return is(this._value, searchValue);\n  };\n\n  Repeat.prototype.slice = function slice (begin, end) {\n    var size = this.size;\n    return wholeSlice(begin, end, size)\n      ? this\n      : new Repeat(\n          this._value,\n          resolveEnd(end, size) - resolveBegin(begin, size)\n        );\n  };\n\n  Repeat.prototype.reverse = function reverse () {\n    return this;\n  };\n\n  Repeat.prototype.indexOf = function indexOf (searchValue) {\n    if (is(this._value, searchValue)) {\n      return 0;\n    }\n    return -1;\n  };\n\n  Repeat.prototype.lastIndexOf = function lastIndexOf (searchValue) {\n    if (is(this._value, searchValue)) {\n      return this.size;\n    }\n    return -1;\n  };\n\n  Repeat.prototype.__iterate = function __iterate (fn, reverse) {\n    var size = this.size;\n    var i = 0;\n    while (i !== size) {\n      if (fn(this._value, reverse ? size - ++i : i++, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  Repeat.prototype.__iterator = function __iterator (type, reverse) {\n    var this$1 = this;\n\n    var size = this.size;\n    var i = 0;\n    return new Iterator(\n      function () { return i === size\n          ? iteratorDone()\n          : iteratorValue(type, reverse ? size - ++i : i++, this$1._value); }\n    );\n  };\n\n  Repeat.prototype.equals = function equals (other) {\n    return other instanceof Repeat\n      ? is(this._value, other._value)\n      : deepEqual(other);\n  };\n\n  return Repeat;\n}(IndexedSeq));\n\nvar EMPTY_REPEAT;\n\nfunction fromJS(value, converter) {\n  return fromJSWith(\n    [],\n    converter || defaultConverter,\n    value,\n    '',\n    converter && converter.length > 2 ? [] : undefined,\n    { '': value }\n  );\n}\n\nfunction fromJSWith(stack, converter, value, key, keyPath, parentValue) {\n  var toSeq = Array.isArray(value)\n    ? IndexedSeq\n    : isPlainObj(value)\n      ? KeyedSeq\n      : null;\n  if (toSeq) {\n    if (~stack.indexOf(value)) {\n      throw new TypeError('Cannot convert circular structure to Immutable');\n    }\n    stack.push(value);\n    keyPath && key !== '' && keyPath.push(key);\n    var converted = converter.call(\n      parentValue,\n      key,\n      toSeq(value).map(function (v, k) { return fromJSWith(stack, converter, v, k, keyPath, value); }\n      ),\n      keyPath && keyPath.slice()\n    );\n    stack.pop();\n    keyPath && keyPath.pop();\n    return converted;\n  }\n  return value;\n}\n\nfunction defaultConverter(k, v) {\n  return isKeyed(v) ? v.toMap() : v.toList();\n}\n\nvar version = \"4.0.0-rc.11\";\n\nvar Immutable = {\n  version: version,\n\n  Collection: Collection,\n  // Note: Iterable is deprecated\n  Iterable: Collection,\n\n  Seq: Seq,\n  Map: Map,\n  OrderedMap: OrderedMap,\n  List: List,\n  Stack: Stack,\n  Set: Set,\n  OrderedSet: OrderedSet,\n\n  Record: Record,\n  Range: Range,\n  Repeat: Repeat,\n\n  is: is,\n  fromJS: fromJS,\n  hash: hash,\n\n  isImmutable: isImmutable,\n  isCollection: isCollection,\n  isKeyed: isKeyed,\n  isIndexed: isIndexed,\n  isAssociative: isAssociative,\n  isOrdered: isOrdered,\n  isValueObject: isValueObject,\n  isSeq: isSeq,\n  isList: isList,\n  isMap: isMap,\n  isOrderedMap: isOrderedMap,\n  isStack: isStack,\n  isSet: isSet,\n  isOrderedSet: isOrderedSet,\n  isRecord: isRecord,\n\n  get: get,\n  getIn: getIn,\n  has: has,\n  hasIn: hasIn,\n  merge: merge$1,\n  mergeDeep: mergeDeep,\n  mergeWith: mergeWith$1,\n  mergeDeepWith: mergeDeepWith,\n  remove: remove,\n  removeIn: removeIn,\n  set: set,\n  setIn: setIn,\n  update: update,\n  updateIn: updateIn,\n};\n\n// Note: Iterable is deprecated\nvar Iterable = Collection;\n\nexport default Immutable;\nexport { version, Collection, Iterable, Seq, Map, OrderedMap, List, Stack, Set, OrderedSet, Record, Range, Repeat, is, fromJS, hash, isImmutable, isCollection, isKeyed, isIndexed, isAssociative, isOrdered, isValueObject, get, getIn, has, hasIn, merge$1 as merge, mergeDeep, mergeWith$1 as mergeWith, mergeDeepWith, remove, removeIn, set, setIn, update, updateIn };\n","import '@redux-saga/symbols';\nimport '@babel/runtime/helpers/esm/extends';\nimport { channel, stringableFunc, func, notUndef } from '@redux-saga/is';\nimport { q as makeIterator, K as take, L as fork, M as cancel, N as call, O as actionChannel, Q as sliding, U as delay, V as race, c as check } from './io-6de156f3.js';\nexport { O as actionChannel, _ as all, $ as apply, N as call, M as cancel, a4 as cancelled, a0 as cps, U as delay, W as effectTypes, a5 as flush, L as fork, a6 as getContext, a2 as join, Y as put, Z as putResolve, V as race, a3 as select, a7 as setContext, a1 as spawn, K as take, X as takeMaybe } from './io-6de156f3.js';\nimport '@redux-saga/delay-p';\n\nvar done = function done(value) {\n  return {\n    done: true,\n    value: value\n  };\n};\n\nvar qEnd = {};\nfunction safeName(patternOrChannel) {\n  if (channel(patternOrChannel)) {\n    return 'channel';\n  }\n\n  if (stringableFunc(patternOrChannel)) {\n    return String(patternOrChannel);\n  }\n\n  if (func(patternOrChannel)) {\n    return patternOrChannel.name;\n  }\n\n  return String(patternOrChannel);\n}\nfunction fsmIterator(fsm, startState, name) {\n  var stateUpdater,\n      errorState,\n      effect,\n      nextState = startState;\n\n  function next(arg, error) {\n    if (nextState === qEnd) {\n      return done(arg);\n    }\n\n    if (error && !errorState) {\n      nextState = qEnd;\n      throw error;\n    } else {\n      stateUpdater && stateUpdater(arg);\n      var currentState = error ? fsm[errorState](error) : fsm[nextState]();\n      nextState = currentState.nextState;\n      effect = currentState.effect;\n      stateUpdater = currentState.stateUpdater;\n      errorState = currentState.errorState;\n      return nextState === qEnd ? done(arg) : effect;\n    }\n  }\n\n  return makeIterator(next, function (error) {\n    return next(null, error);\n  }, name);\n}\n\nfunction takeEvery(patternOrChannel, worker) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var yTake = {\n    done: false,\n    value: take(patternOrChannel)\n  };\n\n  var yFork = function yFork(ac) {\n    return {\n      done: false,\n      value: fork.apply(void 0, [worker].concat(args, [ac]))\n    };\n  };\n\n  var action,\n      setAction = function setAction(ac) {\n    return action = ac;\n  };\n\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yTake,\n        stateUpdater: setAction\n      };\n    },\n    q2: function q2() {\n      return {\n        nextState: 'q1',\n        effect: yFork(action)\n      };\n    }\n  }, 'q1', \"takeEvery(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLatest(patternOrChannel, worker) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var yTake = {\n    done: false,\n    value: take(patternOrChannel)\n  };\n\n  var yFork = function yFork(ac) {\n    return {\n      done: false,\n      value: fork.apply(void 0, [worker].concat(args, [ac]))\n    };\n  };\n\n  var yCancel = function yCancel(task) {\n    return {\n      done: false,\n      value: cancel(task)\n    };\n  };\n\n  var task, action;\n\n  var setTask = function setTask(t) {\n    return task = t;\n  };\n\n  var setAction = function setAction(ac) {\n    return action = ac;\n  };\n\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yTake,\n        stateUpdater: setAction\n      };\n    },\n    q2: function q2() {\n      return task ? {\n        nextState: 'q3',\n        effect: yCancel(task)\n      } : {\n        nextState: 'q1',\n        effect: yFork(action),\n        stateUpdater: setTask\n      };\n    },\n    q3: function q3() {\n      return {\n        nextState: 'q1',\n        effect: yFork(action),\n        stateUpdater: setTask\n      };\n    }\n  }, 'q1', \"takeLatest(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLeading(patternOrChannel, worker) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var yTake = {\n    done: false,\n    value: take(patternOrChannel)\n  };\n\n  var yCall = function yCall(ac) {\n    return {\n      done: false,\n      value: call.apply(void 0, [worker].concat(args, [ac]))\n    };\n  };\n\n  var action;\n\n  var setAction = function setAction(ac) {\n    return action = ac;\n  };\n\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yTake,\n        stateUpdater: setAction\n      };\n    },\n    q2: function q2() {\n      return {\n        nextState: 'q1',\n        effect: yCall(action)\n      };\n    }\n  }, 'q1', \"takeLeading(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction throttle(delayLength, pattern, worker) {\n  for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    args[_key - 3] = arguments[_key];\n  }\n\n  var action, channel;\n  var yActionChannel = {\n    done: false,\n    value: actionChannel(pattern, sliding(1))\n  };\n\n  var yTake = function yTake() {\n    return {\n      done: false,\n      value: take(channel)\n    };\n  };\n\n  var yFork = function yFork(ac) {\n    return {\n      done: false,\n      value: fork.apply(void 0, [worker].concat(args, [ac]))\n    };\n  };\n\n  var yDelay = {\n    done: false,\n    value: delay(delayLength)\n  };\n\n  var setAction = function setAction(ac) {\n    return action = ac;\n  };\n\n  var setChannel = function setChannel(ch) {\n    return channel = ch;\n  };\n\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yActionChannel,\n        stateUpdater: setChannel\n      };\n    },\n    q2: function q2() {\n      return {\n        nextState: 'q3',\n        effect: yTake(),\n        stateUpdater: setAction\n      };\n    },\n    q3: function q3() {\n      return {\n        nextState: 'q4',\n        effect: yFork(action)\n      };\n    },\n    q4: function q4() {\n      return {\n        nextState: 'q2',\n        effect: yDelay\n      };\n    }\n  }, 'q1', \"throttle(\" + safeName(pattern) + \", \" + worker.name + \")\");\n}\n\nfunction retry(maxTries, delayLength, fn) {\n  var counter = maxTries;\n\n  for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    args[_key - 3] = arguments[_key];\n  }\n\n  var yCall = {\n    done: false,\n    value: call.apply(void 0, [fn].concat(args))\n  };\n  var yDelay = {\n    done: false,\n    value: delay(delayLength)\n  };\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yCall,\n        errorState: 'q10'\n      };\n    },\n    q2: function q2() {\n      return {\n        nextState: qEnd\n      };\n    },\n    q10: function q10(error) {\n      counter -= 1;\n\n      if (counter <= 0) {\n        throw error;\n      }\n\n      return {\n        nextState: 'q1',\n        effect: yDelay\n      };\n    }\n  }, 'q1', \"retry(\" + fn.name + \")\");\n}\n\nfunction debounceHelper(delayLength, patternOrChannel, worker) {\n  for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    args[_key - 3] = arguments[_key];\n  }\n\n  var action, raceOutput;\n  var yTake = {\n    done: false,\n    value: take(patternOrChannel)\n  };\n  var yRace = {\n    done: false,\n    value: race({\n      action: take(patternOrChannel),\n      debounce: delay(delayLength)\n    })\n  };\n\n  var yFork = function yFork(ac) {\n    return {\n      done: false,\n      value: fork.apply(void 0, [worker].concat(args, [ac]))\n    };\n  };\n\n  var yNoop = function yNoop(value) {\n    return {\n      done: false,\n      value: value\n    };\n  };\n\n  var setAction = function setAction(ac) {\n    return action = ac;\n  };\n\n  var setRaceOutput = function setRaceOutput(ro) {\n    return raceOutput = ro;\n  };\n\n  return fsmIterator({\n    q1: function q1() {\n      return {\n        nextState: 'q2',\n        effect: yTake,\n        stateUpdater: setAction\n      };\n    },\n    q2: function q2() {\n      return {\n        nextState: 'q3',\n        effect: yRace,\n        stateUpdater: setRaceOutput\n      };\n    },\n    q3: function q3() {\n      return raceOutput.debounce ? {\n        nextState: 'q1',\n        effect: yFork(action)\n      } : {\n        nextState: 'q2',\n        effect: yNoop(raceOutput.action),\n        stateUpdater: setAction\n      };\n    }\n  }, 'q1', \"debounce(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nvar validateTakeEffect = function validateTakeEffect(fn, patternOrChannel, worker) {\n  check(patternOrChannel, notUndef, fn.name + \" requires a pattern or channel\");\n  check(worker, notUndef, fn.name + \" requires a saga parameter\");\n};\n\nfunction takeEvery$1(patternOrChannel, worker) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateTakeEffect(takeEvery$1, patternOrChannel, worker);\n  }\n\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  return fork.apply(void 0, [takeEvery, patternOrChannel, worker].concat(args));\n}\nfunction takeLatest$1(patternOrChannel, worker) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateTakeEffect(takeLatest$1, patternOrChannel, worker);\n  }\n\n  for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n    args[_key2 - 2] = arguments[_key2];\n  }\n\n  return fork.apply(void 0, [takeLatest, patternOrChannel, worker].concat(args));\n}\nfunction takeLeading$1(patternOrChannel, worker) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateTakeEffect(takeLeading$1, patternOrChannel, worker);\n  }\n\n  for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n    args[_key3 - 2] = arguments[_key3];\n  }\n\n  return fork.apply(void 0, [takeLeading, patternOrChannel, worker].concat(args));\n}\nfunction throttle$1(ms, pattern, worker) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(pattern, notUndef, 'throttle requires a pattern');\n    check(worker, notUndef, 'throttle requires a saga parameter');\n  }\n\n  for (var _len4 = arguments.length, args = new Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) {\n    args[_key4 - 3] = arguments[_key4];\n  }\n\n  return fork.apply(void 0, [throttle, ms, pattern, worker].concat(args));\n}\nfunction retry$1(maxTries, delayLength, worker) {\n  for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {\n    args[_key5 - 3] = arguments[_key5];\n  }\n\n  return call.apply(void 0, [retry, maxTries, delayLength, worker].concat(args));\n}\nfunction debounce(delayLength, pattern, worker) {\n  for (var _len6 = arguments.length, args = new Array(_len6 > 3 ? _len6 - 3 : 0), _key6 = 3; _key6 < _len6; _key6++) {\n    args[_key6 - 3] = arguments[_key6];\n  }\n\n  return fork.apply(void 0, [debounceHelper, delayLength, pattern, worker].concat(args));\n}\n\nexport { debounce, retry$1 as retry, takeEvery$1 as takeEvery, takeLatest$1 as takeLatest, takeLeading$1 as takeLeading, throttle$1 as throttle };\n","import defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nexport default function _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","/*\n * Global constants\n *\n * **PATHS**\n * We want to put paths here too\n * Please include the root path (e.g. /projectDetail instead of /projectDetail/:projectId)\n * You can add the variable paths as another constant e.g. PROJECT_DETAIL_WITH_PROJECT_ID_PATH or just string template it\n * where needed e.g. `${PROJECT_DETAIL_PATH}/:id`\n *\n * ALL PATHS SHOULD EXCLUDE TRAILING SLASH\n * right: /projectDetail\n * wrong: /projectDetail/\n *\n */\n\n// api settings\n// export const BASE_URL = 'http://localhost:3003'; // < wherever you have ENGINE_BOOT=tool running\n// import * as myself from './index';\n// export default myself;\nconst isProduction = process.env.NODE_ENV === 'production';\n\nexport const SESSION_EXPIRE_TIME_IN_MILLISECONDS = 7 * 24 * 60 * 60 * 1000;\n\nexport const SANDBOX_PATH = '/sandbox';\n\nexport const SERVICE_DESK = 'https://atsinc.atlassian.net/servicedesk/customer/portal/4/group/5/create/36';\n\nexport const TERMS_AND_CONDITIONS_LINK = 'https://www.atssoftware.com/terms-conditions/';\n\nexport const CONSENT_CONTACT_EMAIL = 'info@atssoftware.com';\n\nexport const TIME_OUT_LIMIT = 60000; // time out limit of requests in milliseconds\n\nexport const cacheBuster = (new Date()).getTime();\n\nexport const ENV: string | undefined = process.env.NODE_ENV;\nexport const IS_PRODUCTION: boolean = isProduction;\nexport const TOKEN_KEY = 'X-ATS-TOKEN';\nexport const APP_ID_KEY = 'X-ATS-APP_ID';\nexport const AMPLITUDE_API_KEY = '5e828ca6124331d7842657c9145594a9';\n// export const AMPLITUDE_API_ENDPOINT_URL = 'https://amplitude.api-gateway.atsapi.net/';\nexport const AMPLITUDE_API_ENDPOINT_URL = 'https://amplitude2.api-gateway.atsapi.net/';\n\n// be sure to also change public path for webpack.prod.babel.js to match APPLICATION_BASE_PATH (prepended to router paths)\n// export const APPLICATION_BASE_PATH = '/';\n// export const DASHBOARD_PATH = '/dashboard';\nexport const APPLICATION_BASE_PATH = '/';\nexport const getLocalePrefix = (): string => (window as any).__LOCALE_PREFIX__ || '';\nexport const DASHBOARD_PATH = '/dashboard';\nexport const DEBUG_PATH = '/debug';\nexport const LOGIN_PATH = '/login';\nexport const SIGNUP_PATH = `${LOGIN_PATH}/signup`;\nexport const FORGOTPASSWORD_PATH = '/forgotpassword';\nexport const PAGESUBMIT_PATH = '/pagesubmit';\nexport const RESETPASSWORD_PATH = '/resetpassword';\nexport const SIGN_UP_SECOND_STEP_PATH = '/signupstepper';\nexport const THANK_YOU = '/thank-you';\nexport const SSO_PATH = '/sso/:token';\n// amp\nexport const USER_LIST_PATH = '/users';\nexport const USER_DETAIL_PATH = '/user/detail';\nexport const USER_CREATE_PATH = '/user/create';\nexport const USER_UPLOAD_PATH = '/user/upload';\nexport const FIRM_USER_CREATE_PATH = `/firm/:firmId${USER_CREATE_PATH}`;\nexport const FIRM_OFFICE_USER_CREATE_PATH = `/firm/:firmId/office/:officeId${USER_CREATE_PATH}`;\nexport const USER_EDIT_PATH = '/user/edit';\nexport const FIRM_USER_EDIT_PATH = `/firm/:firmId${USER_EDIT_PATH}/:userId`;\nexport const FIRM_OFFICE_USER_EDIT_PATH = `/firm/:firmId/office/:officeId${USER_EDIT_PATH}/:userId`;\nexport const FIRM_LIST_PATH = '/firms';\nexport const FIRM_DETAIL_PATH = '/firm/detail';\nexport const FIRM_EDIT_PATH = '/firm/edit';\nexport const FIRM_CREATE_PATH = '/firm/create';\nexport const PROJECT_MANAGEMENT_PATH = '/project-management';\nexport const AI_PIPELINE_MANAGEMENT_PATH = '/ai-pipeline-management';\nexport const BRAND_VARIATION_MANAGEMENT_PATH = `${AI_PIPELINE_MANAGEMENT_PATH}/brand-variation-management`;\nexport const AI_EXCLUSION_MANAGEMENT_PATH = `${AI_PIPELINE_MANAGEMENT_PATH}/ai-exclusion-management`;\nexport const AI_EXCLUSION_MANAGEMENT_TAGS_PATH = `${AI_EXCLUSION_MANAGEMENT_PATH}/tags`;\nexport const AI_EXCLUSION_MANAGEMENT_PRODUCT_NUMBERS_PATH = `${AI_EXCLUSION_MANAGEMENT_PATH}/product-numbers`;\nexport const AI_EXCLUSION_MANAGEMENT_MANUFACTURERS_PATH = `${AI_EXCLUSION_MANAGEMENT_PATH}/manufacturers`;\nexport const WIDGET_MANAGEMENT_PATH = '/widget-management';\nexport const WIDGET_MANAGEMENT_SUB_PATH = `${WIDGET_MANAGEMENT_PATH}/widgetTypeById`;\nexport const ADVERTISEMENT_WIDGET_MANAGEMENT_PATH = `${WIDGET_MANAGEMENT_SUB_PATH}/32`;\nexport const ANNOUCEMENT_WIDGET_MANAGEMENT_PATH = `${WIDGET_MANAGEMENT_SUB_PATH}/30`;\nexport const FEATURED_PRODUCTS_WIDGET_MANAGEMENT_PATH = `${WIDGET_MANAGEMENT_SUB_PATH}/31`;\n\n// we are exporting whole pages now\n// shared?\nexport const SETTINGS_PATH = '/settings';\nexport const SETTINGS_DASHBOARD_TEMPLATES_PATH = '/dashboard-templates';\nexport const SETTINGS_COLLABORATOR_PERIMSSIONS_PATH = '/collaborator-permissions';\nexport const SETTINGS_TEAM_MANAGEMENT_PATH = '/team-management';\nexport const SETTINGS_VISIBILITY_PATH = '/visibility';\nexport const SETTINGS_COMPANY_INFO_PATH = '/company-info';\nexport const SETTINGS_OPPORTUNITY_STATUS_PATH = '/opportunity-status';\nexport const SETTINGS_OPPORTUNITY_LABEL_PATH = '/opportunity-label';\nexport const SETTINGS_ATTACHMENT_FOLDERS_PATH = '/attachment-folders';\nexport const SETTINGS_ATTACHMENT_FOLDERS_TEMPLATE_PATH = '/attachment-folders-template';\nexport const SETTINGS_QUOTE_NUMBER_PATH = '/quote-number';\nexport const SETTINGS_QUOTE_SECTION_TEMPLATE_PATH = '/quote-section-template';\nexport const SETTINGS_QUICK_ENTRY_PATH = '/quick-entry';\nexport const SETTINGS_USER_PROFILE_PATH = '/user-profile';\nexport const SETTINGS_CHANGE_PASSWORD_PATH = '/change-password';\nexport const SETTINGS_TAKE_OFF_OPTIONS_PATH = '/takeoff-option';\nexport const SETTINGS_ALTERNATIVE_PREFERENCES_PATH = '/alternative-preferences';\nexport const SETTINGS_SPEC_ASSIST_PREFERENCES_PATH = '/spec-assist-preferences';\nexport const SETTINGS_AUTO_QUOTE_BILLINGS_PATH = '/auto-quote-billings';\nexport const SETTINGS_MAPPED_FIELDS_PATH = '/mapped-fields';\nexport const EXPORT_OPTIONS_PATH = '/export-options';\nexport const SETTINGS_PRODUCT_SEARCH_PATH = '/product-search';\nexport const SETTINGS_AUTO_TRACK_PROJECT_PATH = '/auto-track-project';\nexport const SETTINGS_PROJECT_VISIBILITY_PATH = '/project-visibility';\nexport const SETTINGS_CUSTOM_EMAIL_ADDRESS = '/custom-email-address';\nexport const SETTINGS_EMAIL_SETTINGS_PATH = '/email-settings';\nexport const SETTINGS_CUSTOMER_DISCOUNTS_PATH = '/customer-discounts';\nexport const SETTINGS_DISCOUNT_MANAGEMENT_PATH = '/discount-management';\nexport const SETTINGS_PRINT_SETTING_PATH = '/print-setting';\nexport const SETTINGS_AUTO_SAVE_PATH = '/auto-save';\nexport const SETTINGS_QUOTE_EXCEL_COLUMN_PREFERENCE_PATH = '/quote-excel-column-preference';\nexport const SETTINGS_VENDOR_QUOTATION_MYLOGO_PATH = '/vendor-quotation-mylogo';\nexport const SETTINGS_VENDOR_QUOTATION_AUTO_TAKEOFF_PATH = '/vendor-quotation-auto-takeoff';\nexport const SETTINGS_VENDOR_QUOTATION_NOTIFICATION_PATH = '/vendor-quotation-notification';\nexport const SETTINGS_VENDOR_QUOTATION_BID_EMAIL_PATH = '/vendor-quotation-bid-email';\nexport const SETTINGS_VENDOR_QUOTATION_PREFER_PATH = '/vendor-quotation-prefer';\nexport const VENDOR_QUOTATION_SEND_BID_PATH = '/vendor-quotation-send-bid';\nexport const VENDOR_QUOTATION_BID_PATH = `/vendor-quotation-bid-detail`;\n\nexport const VENDOR_QUOTATION_BID_DETAIL_PATH = `/vendor-quotation-bid-detail/:id`;\nexport const AUTO_QUOTATION_DASHBOARD_PATH = '/quote-connect';\nexport const QUOTE_CONNECT_BID_PATH = `/quote-connect-bid-detail`;\nexport const QUOTE_CONNECT_BID_DETAIL_PATH = `/quote-connect-bid-detail/:id`;\nexport const SETTINGS_QUOTE_CONNECT_BID_EMAIL_PATH = '/quote-connect-bid-email';\nexport const SETTINGS_QUOTE_CONNECT_CURRENCY_PATH = '/quote-connect-currency';\n\nexport const BID_INVITATION_DETAIL_ROOT_PATH = `/bid-invitation-detail`;\nexport const BID_INVITATION_DETAIL_PATH = `/bid-invitation-detail/:id`;\n// 404\nexport const NOT_FOUND_PATH = '/404';\n\n// spec\nexport const PROJECT_DETAIL_PATH = '/projectDetail';\nexport const SPECIFICATION_LIST_PATH = '/specList';\nexport const SPEC_DETAIL_PATH = '/specDetail';\nexport const MASTER_DETAIL_PATH = '/masterDetail';\nexport const TEMPLATE_DETAIL_PATH = '/templateDetail';\nexport const PRODUCT_CATEGORY_PATH = '/productCategory';\nexport const PRODUCT_SELECTION_PATH = '/productSelection';\nexport const PROJECT_DOWNLOAD_PATH = '/projectDownload';\nexport const PRODUCT_BROCHURE_PATH = '/productBrochure';\nexport const TEST_PROJECT_LIST_PATH = '/testProjectList';\nexport const MASTER_LIST_PATH = '/masterList';\nexport const TEMPLATE_LIST_PATH = '/templateList';\n\n// quote\nexport const CREATE_NEW_QUOTE_PATH = '/createQuote'; // currently the coponent is mounted to QUOTE_PATH.....\nexport const QUOTE_LIST_PATH = '/quoteList';\nexport const QUOTE_PATH = '/quote';\nexport const QUOTE_TEMPLATE_PATH = '/template';\nexport const QUOTE_DOWNLOAD_PREVIEW_PATH = '/preview';\nexport const QUOTE_DOWNLOAD_HISTORY_PATH = '/quoteDownloadHistory';\nexport const PRODUCTS_PATH = '/products';\nexport const QUOTE_DETAIL_PATH = `${QUOTE_PATH}/:id`;\nexport const EDIT_QUOTE_PATH = `${QUOTE_PATH}/:id/:edit?`;\nexport const QUOTE_EXPORT_PATH = `${QUOTE_PATH}/:id/export`;\nexport const SPEC_TO_QUOTE_PATH = `/specToQuote`;\nexport const CREATE_NEW_QUOTE_FROM_SPEC_PATH = `/createQuoteFromSpec`;\nexport const SHARE_VENDOR_QUOTE_PATH = `/share`;\n\n// quote connect\nexport const QUOTE_CONNECT_PRODUCTS_PATH = '/quote-connect-products';\nexport const QUOTE_CONNECT_PRODUCTS_UPLOAD_PATH = '/quote-connect-products/upload';\nexport const QUOTE_CONNECT_PRODUCTS_EXPORT_PATH = '/quote-connect-products/export';\n\n// bulk import expoort\nexport const UPDATE_PRICING_PATH = '/products/updatePricing';\nexport const ADD_PRICING_PATH = '/products/addPricing';\n\n// pt\nexport const PROJECT_LIST_PATH = '/projectList';\nexport const PROJECT_LIST_DETAIL_PATH = `${PROJECT_LIST_PATH}/detail`;\nexport const MY_CONTACTS_PATH = '/myContacts';\nexport const USER_DETAILS_PATH = '/userDetails';\nexport const CONFIGURATOR_PATH = '/configurator';\nexport const REPORT_PATH = '/reports';\n\nexport const OFFICE_LIST_PATH = '/officeList';\nexport const OFFICE_LIST_DETAIL_PATH = `${OFFICE_LIST_PATH}/detail`;\nexport const PT_SPEC_DETAIL_PATH = '/spec/:specId';\nexport const PT_SPEC_LIST_PATH = '/specificationList';\nexport const SPEC_TO_QUOTE = '/specToQuote';\n\n// pim\nexport const ATTRIBUTES_PATH = '/attributes';\nexport const CROSS_REFERENCE_LIST_PATH = '/crossReference';\nexport const CATEGORIES_LIST_PATH = '/categories';\nexport const RULE_ENGINE_PATH = '/ruleEngine';\nexport const PRINT_CONFIG_PATH = '/printConfig';\nexport const TRANSLATION_PATH = '/translation';\nexport const MEDIA_MANAGEMENT_PATH = '/mediaManagement';\nexport const HISTORY_PATH = '/history';\nexport const PIM_SERIES_LIST_PATH = '/series';\nexport const PIM_SERIES_DETAIL_PATH = `${PIM_SERIES_LIST_PATH}/detail`;\nexport const PIM_DRAFT_LIST_PATH = '/drafts';\nexport const PIM_DRAFT_DETAIL_PATH = `${PIM_DRAFT_LIST_PATH}/detail`;\nexport const PIM_DRAFT_EDIT_PATH = `${PIM_DRAFT_DETAIL_PATH}/:seriesId?/edit`;\nexport const PIM_DRAFT_CREATE_PATH = `${PIM_DRAFT_LIST_PATH}/create`;\nexport const PIM_INTEGRATION_MAPPING_PATH = `/integration/mapper`;\nexport const PIM_ATTRIBUTES_LIST_PATH = '/attributes';\nexport const PIM_DESCRIPTIONS_LIST_PATH = `/attribute/:attributeId/descriptions`;\n\n// and entire modals\nexport const CREATE_NEW_PROJECT_PATH = '/createNewProject';\nexport const EDIT_PROJECT_PATH = '/editProjectDetails';\nexport const CREATE_NEW_TEST_PROJECT_PATH = '/createNewTestProject';\nexport const EDIT_TEST_PROJECT_PATH = '/editTestProjectDetails';\nexport const CREATE_NEW_SPEC_PATH = '/createNewSpec';\nexport const EDIT_SPEC_PATH = '/editSpec';\nexport const CREATE_NEW_MASTER_PATH = '/createNewMaster';\nexport const CREATE_NEW_MASTER_FROM_TEMPLATE_PATH = '/masterFromTemplate';\nexport const EDIT_MASTER_PATH = '/editMaster';\nexport const EDIT_MASTER_SPEC_PATH = '/editMasterSpec';\nexport const CREATE_NEW_MASTER_SPEC_PATH = '/createNewMasterSpec';\nexport const CREATE_NEW_TEMPLATE_PATH = '/createNewTemplate';\nexport const EDIT_TEMPLATE_PATH = '/editTemplate';\nexport const CREATE_NEW_TEMPLATE_SPEC_PATH = '/createNewTemplateSpec';\nexport const EDIT_TEMPLATE_SPEC_PATH = '/editTemplateSpec';\nexport const REQUEST_MASTER_PATH = '/requestMaster';\n\n\nimport { fromJS, Map } from 'immutable';\nimport Store from '../store';\n// export * from '../modules/LanguageModule/constants';\n// export * from '../modules/ThemeModule/constants';\nexport * from '../containers/Pagination/constants';\n\nexport const defaultEnv = {\n  TOKEN_KEY,\n};\n\nexport const getEnv = () => ({ ...defaultEnv, ...Store.get('env') });\n\nexport const DEFAULT_SERVER = 'ats';\nexport const DEFAULT_SITE = 'projectTracker';\nexport const DEFAULT_LABEL = 'ats';\n\nexport const MINIMUM_SEARCH_CHARACTERS = 2;\n\n// File Service Constants\nexport const BYTES_PER_MB = 1048576;\nexport const MAX_FILE_SIZE_5MB = 5242880; // 5MB limit\nexport const MAX_FILE_SIZE_15MB = 15728640; // 15MB limit\nexport const MAX_FILE_SIZE_100MB = 104857600; // 100MB limit\nexport const MAX_FILE_SIZE_210MB = 220200960; // 210MB limit\nexport const MAX_FILE_SIZE_200MB = 209715200; // 200MB limit\nexport const MAX_FILE_SIZE = 52428800; // 50MB limit\n// export const MAX_ATTACHMENT_FILE_SIZE = 209715200; // 200MB limit\nexport const MAX_ATTACHMENT_FILE_SIZE = 104857600; // 100MB limit\nexport const ACCEPTED_FILE_TYPES = [\n  'application/pdf',\n  'text/csv',\n  'text/plain',\n  'image/png',\n  'image/jpeg',\n  'image/gif',\n  'image/svg+xml',\n  'application/zip',\n  'multipart/form-data',\n  'application/msword', // .doc\n  'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // .docx\n  'application/vnd.ms-excel', // .xls\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx\n  'application/vnd.ms-powerpoint', // .ppt\n  'application/vnd.openxmlformats-officedocument.presentationml.presentation', // .pptx\n  'application/vnd.oasis.opendocument.text', // .odt\n  'application/x-sql', // .sql\n  'application/x-tgif', // .obj,\n  'application/CDFV2', // .rfa\n  'message/rfc822', // .eml\n  '.msg' // mime type 'application/vnd.ms-outlook' doesn't work\n];\n\n// refactor these out later\nexport const T_NS = 'ats/Ats';\n\n\nexport enum APPLICATION_ACTION {\n  CREATE_TASK = 'CREATE_TASK'\n}\n\n// App IDs\nexport const SPEC_TOOL_ID = '42b28d28eb9ad6a';\nexport const PROJECT_TRACKER_ID = '4fee15cf131a334';\nexport const QUOTE_TOOL_ID = 'd00998963131adf';\nexport const XREF_ID = 'c0fugi0g2nxphcj';\nexport const PIM_ID = 'rubz15lrism3dpu';\nexport const DAL_ID = '67d1d09fe0f607d';\nexport const AMP_ID = '698b2b6a185e5a8';\nexport const SIZER_ID = '279a08bfdddc7fe';\n\n// Whitelabel app IDs\nexport const ACUDOR_SPEC_ID = '8c8de0ed42147db';\nexport const AOSMITH_SPEC_ID = 'a91624efc3af63f';\nexport const AOSMITH_XREF_ID = 'wt4ua871xfcaa51';\nexport const BOBRICK_SPEC_ID = '7afd25df5afdbac';\nexport const DOBBINS_SPEC_ID = '5t2aiykdi7lt29b';\nexport const DOBBINS_XREF_ID = '1b5ddfdea112a4f';\nexport const FIAT_SPEC_ID = '0d9bbf26871f907';\nexport const FIAT_XREF_ID = 'e72e4ebc1acf3cd';\nexport const FRANKE_DAL_ID = '8c60c8792a3873a';\nexport const FRANKE_SPEC_ID = '908517e0fc246d1';\nexport const FRANKE_XREF_ID = '0bd4e038a70f395';\nexport const LIXIL_DAL_ID = 'b681ffbfdc5d458';\nexport const LIXIL_SPEC_ID = '651e26bac961004';\nexport const LIXIL_XREF_ID = 'vyz46z15vzroka8';\nexport const LOCHINVAR_SPEC_ID = 'a2230ad57cf59be';\nexport const LOCHINVAR_XREF_ID = 'd30f12bb6db31a9';\nexport const MCGUIRE_XREF_ID = '332af83e4b7d447';\nexport const MCGUIRE_DAL_ID = 'mBL6g28exOA7Xxb';\nexport const MISSION_RUBBER_SPEC_ID = '90b47878be646ed';\nexport const MISSION_RUBBER_XREF_ID = 'aa8de2e5099b7d5';\nexport const MORRIS_LEE_SPEC_ID = 'mlv69wely4w2zqx';\nexport const PRIER_SPEC_ID = '6035081931a2eb6';\nexport const PRIER_XREF_ID = 'e0680596d13076b';\nexport const SPECTRUM_SPEC_ID = 'sskq1zqwlor10x0';\nexport const STERN_WILLIAMS_SPEC_ID = 'sw1stdj76sqmagm';\nexport const STERN_WILLIAMS_XREF_ID = '69c2127f4ea0c40';\nexport const TS_BRASS_XREF_ID = 'bd5604d8c6bf5d0';\nexport const WATTS_SPEC_ID = '54dac1b62e25bd2';\nexport const WATTS_XREF_ID = 'wcr2c6pyt3e14d5';\nexport const WILLIAMS_BROTHERS_DAL_ID = '0424b0bad7c4cbe';\nexport const WILLIAMS_BROTHERS_SPEC_ID = '052e8cb35ae358c';\nexport const WILLIAMS_BROTHERS_XREF_ID = '2e0d9a355504bc9';\nexport const ZOELLER_XREF_ID = 'm7gi9if54gto1af';\nexport const ZOELLER_SPEC_ID = 'b8449126359518f';\nexport const DELTA_COMMERCIAL_SPEC_ID = '4b51644091b4738';\nexport const DELTA_COMMERCIAL_XREF_ID = 'edd02f41368d44b';\nexport const HAWS_XREF_ID = 'e6413d3b34759c1';\nexport const KOHLER_XREF_ID = '3330fa9e3245fb4';\nexport const OSB_XREF_ID = '20f81b812db9992';\nexport const BEMIS_XREF_ID = '9f05fe2ba3733de';\nexport const PRESSALIT_XREF_ID = '15d9f7d521771bb';\nexport const IPS_XREF_ID = 'b83116399fabe4c';\nexport const PPP_SPEC_ID = 'f27f6f1c7c5cbf4';\nexport const PPP_DAL_ID = 'bbd3433110bb9d1';\nexport const CONTRAC_XREF_ID = 'c6c444a1d4bd3db';\nexport const NU_AIR_SPEC_ID = 'ff16539dabccc89';\nexport const NU_AIR_XREF_ID = 'b0d4fa01d9a8dc7';\nexport const STRIKE_FIRST_DAL_ID =  '24f16cdc5c1de98';\nexport const MIFAB_XREF_ID = 'z5n3jwz4qtwt1xv';\nexport const WOLSELEY_XREF_ID = 'cd4796578c9cb24';\nexport const CRANE_XREF_ID = '443c5079fd986ab';\nexport const CRANE_SPEC_ID = '9b99678b3e02109';\nexport const NEPTUNE_XREF_ID = '09adb9bf42eca77';\n\n// App Names\nexport enum SiteName {\n  spec = 'specTool',\n  pt = 'projectTracker',\n  quote = 'quoteTool',\n  xref = 'xRef',\n  pim = 'pim',\n  bim = 'bim',\n  amp = 'amp',\n  sizer = 'sizer',\n}\n\n// print services\nexport enum SPEC_PRINT_TYPE {\n  specBooklet = 'specBooklet',\n  submittal = 'submittal',\n  schedule = 'schedule',\n  longSpec = 'longSpec',\n  shortSpec = 'shortSpec',\n  manufacturerSpecSheet = 'manufacturerSpecSheet',\n  revit = 'revit',\n  autoCad = 'autoCad',\n  productBrochure = 'productBrochure',\n  csi = 'csi',\n  wattsCSI = 'wattsCSI',\n  lochinvarSubmittal = 'submittalPackage',\n  bobrickCSIPrivada = 'bobrickCSI_Privada',\n  bobrickCSIEvolve = 'bobrickCSI_Evolve',\n  bobrickCSITrad = 'bobrickCSI_Traditional_Series',\n  bobrickPlanningGuide = 'bobrick_planning_guide',\n  bulkspec = 'bulkspec',\n  projectQuoteNuAir = 'projectQuoteNuAir',\n}\n\nexport enum SPEC_PRINT_OPERATION_ID {\n  createManufacturerSpecSheet = 'createManufacturerSpecSheet',\n  createProductBrochure = 'createProductBrochure',\n  createSubmittal = 'createSubmittal',\n  createRevitPackage = 'createRevitPackage',\n  createShortSpec = 'createShortSpec',\n  createLongSpec = 'createLongSpec',\n  createSchedule = 'createSchedule',\n  createSpecBooklet = 'createSpecBooklet',\n  createCsi = 'createCsi',\n  createCsi2026 = 'createCsi2026',\n  createLochinvarSubmittal = 'createSubmittalPackage',\n  createProjectQuote = 'createProjectQuote',\n}\n\nexport enum QUOTE_PRINT_FORMAT {\n  shopDrawing = 'shopDrawing',\n  oandm = 'oandm',\n  splitquote = 'splitquote',\n  quote = 'quote',\n  quoteexcel = 'quoteexcel',\n  quotexml = 'quotexml',\n}\n\nexport enum REPORT_PRINT_TYPE {\n  reportquote = 'reportquote',\n  reportquotebillablelines = 'reportquotebillablelines',\n}\n\nexport enum SPEC_TO_QUOTE_CRONJOB_TYPE {\n  spectoquote = 'spectoquote',\n}\n\nexport enum PIM_SERIES_OPERATION_TYPE {\n  publishDraft = 'publishDraft',\n  getDuplicateProducts = 'getDuplicateProducts',\n  mapIntegration = 'mapIntegration',\n  createIntegratedSeries = 'createIntegratedSeries',\n}\n\nexport enum ERP_CRONJOB_TYPE {\n  // sales order\n  salesorder = 'salesorder',\n  spectrum = 'spectrum',\n  netsuite = 'netsuite',\n  // send quote\n  zurn = 'zurn',\n  markssupply = 'markssupply',\n  aprsupply = 'aprsupply',\n  winsupply = 'winsupply',\n  pacificplumbing = 'pacificplumbing',\n  kellersupply = 'kellersupply',\n  spscompanies = 'spscompanies',\n  macombgroup = 'macombgroup',\n  northeasternsupply = 'northeasternsupply',\n  thegranitegroup = 'thegranitegroup',\n  atlanticplumbing = 'atlanticplumbing',\n  texasplumbing = 'texasplumbing',\n  capitolgroup = 'capitolgroup',\n  lixilsalesforce = 'lixilsalesforce',\n  nextsupply = 'nextsupply',\n  pacesupply = 'pacesupply',\n  famoussupply = 'famoussupply',\n  plumbingandheating = 'plumbingandheating',\n  nationalwholesale = 'nationalwholesale',\n  goodin = 'goodin',\n  hirsch = 'hirsch',\n  hajoca = 'hajoca',\n  hubbard = 'hubbard',\n  coburnsupply = 'coburnsupply',\n}\n\nexport enum QUOTE_PRINT_TYPE {\n  quote = 'quote',\n  spec = 'spec',\n}\n\nexport enum QUOTE_PRINT_OPERATION_ID {\n  createShopDrawing = 'createShopDrawing',\n  createOandM = 'createOandM',\n  createQuotePrint = 'createQuotePrint',\n  createSplitQuotePrint = 'createSplitQuotePrint',\n  createQuoteExcelPrint = 'createQuoteExcelPrint',\n  createQuoteXmlPrint = 'createQuoteXmlPrint',\n}\n\nexport enum CROSS_TYPE_NAMES {\n  recommended = 'recommended',\n  function = 'function',\n  aesthetics = 'aesthetics',\n  finish = 'finish',\n  value = 'value',\n  closestMatch = 'closest-match',\n  firm = 'firm',\n}\n\nexport enum PROJECT_TYPE {\n  project = 'project',\n  masterProject = 'masterProject',\n  templateProject = 'templateProject'\n}\n\nexport enum SPEC_TYPE {\n  spec = 'spec',\n  masterSpec = 'masterSpec',\n  masterTemplate = 'masterTemplate',\n}\n\nexport enum BULK_IMPORT_EXPORT_TYPE {\n  bulkExport = 'bulkExport',\n  bulkImport = 'bulkImport'\n}\n\nexport enum BULK_UPLOAD_USERS_TYPE {\n  bulkimportusers = 'bulkimportusers'\n}\n\nexport enum SPEC_POLLING_TYPES {\n  specAssist = 'specAssist',\n}\n\nexport enum Mode {\n  spec = 'spec',\n  testProject = 'testProject',\n  project = 'project',\n  master = 'master',\n  masterTemplate = 'masterTemplate',\n  productCatalogue = 'productCatalogue',\n}\n\nexport enum PERMISSION_PROPERTY {\n  canAccessPimToolTeamManagementSettings = 'canAccessPimToolTeamManagementSettings',\n  childOrParentHasFeatAltPreference = 'childOrParentHasFeatAltPreference',\n  canAccessProductCustomizationSettings = 'canAccessProductCustomizationSettings',\n}\n\nexport enum AMPLITUDE_EVENT {\n  // amp\n  ampCreateUser = 'AMP - Create User',\n  ampDeleteUser = 'AMP - Delete User',\n  ampForgotPassword = 'AMP - Forgot Password',\n  ampVerifyUser = 'AMP - Verify User',\n  ampEditUser = 'AMP - Edit User',\n  ampMoveUser = 'AMP - Move User',\n  ampEditUserAcl = 'AMP - Edit User ACL',\n  ampCreateFirm = 'AMP - Create Firm',\n  ampDeleteFirm = 'AMP - Delete Firm',\n  ampCreateOffice = 'AMP - Create Office',\n  ampDeleteOffice = 'AMP - Delete Office',\n  // bim\n  bimInitialLoad = 'BIM Initial Page Load',\n  bimRequestFormSubmit = 'BIM Request Form Submit',\n  bimProductSearch = 'BIM Product Search',\n  bimSeriesSearch = 'BIM Series Search',\n\n  // xref\n  xrefModalOpened = 'xRef Modal Opened',\n  xrefCompetitorProductSearch = 'xRef Competitor Product Search',\n  xrefCompetitorManufacturerSearch = 'xRef Competitor Manufacturer Search',\n  xrefCompetitorCategorySearch = 'xRef Competitor Category Search',\n  xrefCompetitorProductSelected = 'xRef Competitor Product Selected',\n  xrefSponsorProductSelected = 'xRef Sponsor Product Selected',\n  xrefSponsorProductDetailSearch = 'xRef Sponsor Product Detail Search',\n  xrefRequestCrossReference = 'xRef Request Cross Reference',\n  xrefClickOnRequestCrossReferenceButton = 'xRef Click on Request Cross Reference Button',\n  xrefFeedback = 'xRef Feedback',\n  xrefSponsorProductResults = 'xRef Sponsor Product Results',\n\n  // quote\n  quoteSearch = 'Quote Search',\n  specToQuoteOpened = 'Spec To Quote Opened',\n  specToQuoteGeneratedQuote = 'Spec To Quote Used To Generate Quote',\n  createNewQuote = 'Create New Quote',\n  saveQuote = 'Save Quote',\n  downloadQuote = 'Download Quote',\n  exportQuote = 'Export Quote',\n  continueToQuoteDownload = 'Continue To Quote Download',\n  productConfiguratorModal = 'Product Configurator Button Click',\n  addNewConfiguratorClick = 'Add New Configurator Button Click',\n  shopDrawingDownloadSuccess = 'Download Shop Drawing Success',\n  shopDrawingDownloadFailed = 'Download Shop Drawing Failed',\n  omDownloadSuccess = 'Download O&M Success',\n  omDownloadFailed = 'Download O&M Failed',\n  s2qLoadingTime = 'Spec To Quote Loading Time',\n  customerAwarded = 'Customer Awarded',\n  customerLost = 'Customer Lost',\n  openBulkEditModal = 'Open Bulk Edit Modal',\n  applyBulkEdit = 'Apply Bulk Edit',\n  applyBulkEditOperation = 'Apply Bulk Edit Operation',\n  applyBulkMove = 'Apply Bulk Move',\n  applyBulkCopy = 'Apply Bulk Copy',\n  applyBulkDelete = 'Apply Bulk Delete',\n\n  // Project\n  projectSearch = 'Project Search',\n  masterSearch = 'Master Search',\n  masterTemplateSearch = 'Master Template Search',\n  clickBidStatus = 'Click Bid Status Button',\n  saveBidStatusDrawer = 'Save Bid Status Drawer',\n  projectCreated = 'Project Created',\n  quoteReportDownload = 'Quote Report Download',\n  trackUntrackProject = 'Track/Untrack Project',\n  filterUsage = 'Filter Usage',\n  masterTemplateUsage = 'Master Template Usage',\n  folderCreation = 'Folder Creation',\n  fileAttachment = 'File Attachment',\n  attachmentDelete = 'Attachment Delete',\n  deleteProject =  'Delete Project',\n  deleteMaster = 'Delete Master',\n  deleteMasterTemplate = 'Delete Master Template',\n  toggleDetailViewVersion = 'Toggle Detail View Version',\n\n  // project list filter\n  projectListFilterSave = 'Project List Filter Save',\n  projectListFilterCreate = 'Project List Filter Create',\n  projectListFilterSelectSavedFilter = 'Project List Filter Select Saved Filter',\n\n  // Pricing Request list filter\n  pricingRequestFilterSave = 'Project Pricing Request Filter Save',\n  pricingRequestFilterCreate = 'Project Pricing Request Filter Create',\n  pricingRequestFilterSelectSavedFilter = 'Project Pricing Request Filter Select Saved Filter',\n\n  // quote list filter\n  quoteListFilterSave = 'Quote List Filter Save',\n  quoteListFilterCreate = 'Quote List Filter Create',\n  quoteListFilterSelectSavedFilter = 'Quote List Filter Select Saved Filter',\n\n  // spec\n  specSearch = 'Spec Search',\n  productSelectionQuickSearch = 'Product Selection Quick Search',\n  downloadSpec = 'Download Spec',\n  specCreated = 'Spec Created',\n  accessAlternativeFeature = 'Access Alternative Feature',\n  deleteAlternative = 'Delete Alternative',\n  saveAlternatives = 'Save Alternatives',\n  downloadedAITakeoff = 'downloadedAITakeoff',\n  toggleSpecFileVisibility = 'Toggle Spec File Visibility',\n  aiTakeoff = 'AI Takeoff',\n  updateAITakeoffValidation = 'Update AI Takeoff Validation',\n  aiTakeoffReviewed = 'AI Takeoff Reviewed',\n  copyTo = 'Copy To',\n  quickAccessCopyTo = 'Quick Access Copy To',\n  pinDrawing = 'Pin Drawing',\n  deleteSpec = 'Delete Spec',\n  viewPumpCurveClicked = 'Pump Curve Clicked',\n  viewFanCurveClicked = 'Fan Curve Clicked',\n  viewConfigurationsClicked = 'Configurations Clicked',\n  openCategorySpecificTool = 'Open Category Specific Tools',\n  shareConfiguratorLink = 'Share Configurator Link',\n  startOnSeriesOrProduct = 'Start On Series Or Product',\n\n  // product\n  firmProductSearch = 'Firm Product Search',\n  firmProductPackageSearch = 'Firm Product Package Search',\n  atsProductSearch = 'ATS Product Search',\n  productSpecified = 'Product Specified',\n  addingRecommendedProductToDrawing = 'Adding Recommended Product To Drawing',\n  noRecommendedProductRetrieved = 'No Recommended Product Retrieved',\n  recommendedProductRetrieved = 'Recommended Product Retrieved',\n  seriesPanelTabsTime = 'Series Panel Tabs Time',\n  exportPricing = 'Export Pricing',\n  importPricing = 'Import Pricing',\n  bulkDownloadSpec = 'bulkDownloadSpec',\n  printGenerateTime = 'Print Generate Time',\n  productCatalogSelectCategory = 'Product Catalog Select Category',\n  productCatalogAddProduct = 'Product Catalog Add Product',\n  createOrUpdateFirmProduct = 'Create or Update Firm Product',\n  createOrUpdatePackage = 'Create or Update Package',\n\n  // catergory and product selection\n  pinCategory = 'Pin Category',\n  unpinCategory = 'Unpin Category',\n  productSelectionPageLoad = 'Product Selection Page Load',\n  productSelectionPageFilter = 'Product Selection Page Filter',\n\n  // general\n  login = 'User Login',\n  navigateMenu = 'Navigate Menu',\n  languageToggle = 'Language Toggle',\n  downloadProductMedia = 'Download Product Media',\n  dashboardWidgetDataFetch = 'Dashboard Widget Data Fetch',\n\n  // sign up\n  step1Email = 'Step 1 Email',\n  step1FirstName = 'Step 1 First Name',\n  step1LastName = 'Step 1 Last Name',\n  step1Password = 'Step 1 Password',\n  step1ConfirmPassword = 'Step 1 Confirm Password',\n  step1Final = 'Step 1 Final',\n  step2CompanyName = 'Step 2 Company Name',\n  step2CompanyAddress = 'Step 2 Company Address',\n  step2Country = 'Step 2 Country',\n  step2StateProvince = 'Step 2 State / Province',\n  step2City = 'Step 2 City',\n  step2PostalCode = 'Step 2 Zip / Postal Code',\n  step2OrganizationType = 'Step 2 Organization Type',\n  step2Final = 'Step 2 Final',\n  step3Role = 'Step 3 Role',\n  step3Final = 'Step 3 Final',\n\n  // opportunity\n  addOpportunity = 'Add Opportunity Label',\n  deleteOpportunity = 'Delete Opportunity Label',\n  updateOpportunity = 'Update Opportunity Field',\n\n  // rule\n  ruleRestriction = 'Rule Restriction',\n\n  // specToQuote\n  specToQuoteSort = 'Spec To Quote Sort',\n  specToQuoteCrossEfficiency = 'Spec To Quote Cross Efficiency',\n  specToQuoteNullQuoteProductRecommendations = 'Spec To Quote Null Quote Product Recommendations',\n  specToQuoteInitialQuoteProductSearch = 'Spec To Quote Initial Quote Product Search',\n  specToQuoteBilling = 'Spec To Quote Billing',\n\n  // pdf-viewer\n  pdfViewerEvent = 'PDF Viewer Event',\n\n  // shut down splash page\n  shutDownSplashPageRedirect = 'Shut Down Splash Page Redirect',\n\n  // pim\n  seriesPublished = 'Series Published',\n  seriesDraftCreated = 'Series Draft Created',\n  seriesDraftUpdated = 'Series Draft Updated',\n  productCreated = 'Product Created',\n  productUpdated = 'Product Updated',\n  productMerged = 'Product Merged',\n  pureAttributeCreated = 'Pure Attribute Created',\n  pureAttributeUpdated = 'Pure Attribute Updated',\n  pureAttributeDescriptionCreated = 'Pure Attribute Description Created',\n  pureAttributeDescriptionUpdated = 'Pure Attribute Description Updated',\n  categoryFrozen = 'Category Frozen',\n  xrefCreated = 'XREF Created',\n  xrefUpdated = 'XREF Updated',\n  seriesDiscontinued = 'Series Discontinued',\n  seriesDeleted = 'Series Deleted',\n  productDiscontinued = 'Product Discontinued',\n  productDeleted = 'Product Deleted',\n\n  // ungated\n  ungatedDownload = 'Ungated Download',\n}\n\nexport enum ATS_EVENT {\n  // xref\n  xref_stepOne_numberSearch = 'Cross Reference - Step One - Number Search',\n  xref_stepOne_manufacturerSearch = 'Cross Reference - Step One - Manufacturer Search',\n  xref_stepOne_categorySearch = 'Cross Reference - Step One - Category Search',\n  xref_stepOne_SecondarySearch = 'Cross Reference - Step One - Secondary Search',\n  xref_stepOne_CompetitorSelected = 'Cross Reference - Step One - Competitor Selected',\n  xref_stepTwo_search = 'Cross Reference - Step Two - Search',\n  xref_stepTwo_SponsorExpanded = 'Cross Reference - Step Two - Sponsor Expanded',\n  xref_stepTwo_SponsorSelected = 'Cross Reference - Step Two - Sponsor Selected',\n  xref_feedbackSubmitted = 'Cross Reference - Feedback Submitted',\n\n  // spec\n  shareConfiguratorLink = 'Share Configurator Link',\n  startOnSeriesOrProduct = 'Start On Series Or Product',\n\n  // project\n  projectExtractedFromDocuments = 'Project Extracted From Documents',\n  projectCreatedFromDocuments = 'Project Created From Documents',\n}\n\nexport enum SPEC_TO_QUOTE_PRODUCT_SOURCE {\n  // Already linked through spec to quote\n  specToQuote = 'specToQuote',\n\n  // firm product was generated through configurator or is an 'override' product, so it’s linked that way, but not through quote (maybe we should auto link these through spec to quote?)\n  parent = 'parent',\n\n  // firm product was found by searching with the Orbiseed identified product number\n  identifiedFields = 'identifiedFields',\n\n  // firm product was found just by searching the product number\n  productNumber = 'productNumber',\n\n  // firm product was found by using user feedback\n  feedback = 'feedback',\n\n  // firm product or package was found using a fulltext search\n  matchIdentifiedFields = 'matchIdentifiedFields',\n\n  // firm product was not found so just the identifiedProductNumber or productNumber (whichever is not null) is returned\n  null = 'null',\n}\n\nexport enum COLUMN_TYPES { // beware, there's a max length 20 for the string entry\n  PT_PROJECT_LIST_COLUMNS = 'PtProjColumns',\n  PT_SPEC_LIST_COLUMNS = 'PtSpecColumns',\n  PT_QUOTE_LIST_COLUMNS = 'PtQuoteColumns',\n  SPEC_PROJECT_LIST_COLUMNS = 'SpecProjColumns',\n  SPEC_TEST_PROJECT_LIST_COLUMNS = 'SpecTestProjColumns',\n  SPEC_SPEC_LIST_COLUMNS = 'SpecSpecColumns',\n  SPEC_MASTER_LIST_COLUMNS = 'SpecMasterColumns',\n  SPEC_TEMPLATE_LIST_COLUMNS = 'SpecTemplateColumns',\n  PIM_PUBLISH_LIST_COLUMNS = 'PimPublishColumns',\n  PIM_DRAFT_LIST_COLUMNS = 'PimDraftColumns',\n  PIM_XREF_LIST_COLUMNS = 'PimXrefColumns',\n  QUOTE_CUSTOMER_LIST_COLUMNS = 'QuoteCustomerColumns',\n  PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS = 'PRProjectViewColumns',\n  PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS = 'PRResViewColumns',\n}\n\nexport enum DATE_INTERVAL {\n  CUSTOM = 'custom',\n  TODAY = 'today',\n  YESTERDAY = 'yesterday',\n  THIS_WEEK = 'thisWeek',\n  LAST_WEEK = 'lastWeek',\n  THIS_MONTH = 'thisMonth',\n  LAST_MONTH = 'lastMonth',\n  THIS_QUARTER = 'thisQuarter',\n  LAST_QUARTER = 'lastQuarter',\n  THIS_YEAR = 'thisYear',\n  LAST_YEAR = 'lastYear',\n}\n\nexport enum LOCALE {\n  EN = 'en',\n  EN_US = 'en-us',\n  EN_CA = 'en-ca',\n  FR = 'fr',\n  FR_CA = 'fr-ca',\n}\n\nexport const CURRENCY = {\n  USD: 'USD',\n  CAD: 'CAD',\n  MXN: 'MXN',\n\n} as const;\n\nexport type Currency = typeof CURRENCY[keyof typeof CURRENCY];\n\n// firm id\nexport enum FIRM_ID {\n  ats = 2368648\n}\n\n// firms that will have section title capitalized with use of sort by manufacturer in quote\nexport const CAPITALIZE_SECTION_TITLE_FIRM_IDS = [10011385];\n\n// https://atsinc.atlassian.net/browse/PT-3219\n// when the user clicks continue on the quote download config page, send erp request if user has ERP acl and is from the following firms;\nexport const QUOTE_DOWNLOAD_ERP_FIRM_IDS = [10010801, 10011716, 10011717];\n\n// id of all ai generic products\nexport const AI_IDENTIFIED_PRODUCT_ID = 7317062;\n\n// for Consolidated Supply sales order download\nexport const SALESORDER_FIRM_IDS = [10011049, 10011132, 10011134, 10011139];\n\n// for NetSuite quote download\nexport const NETSUITE_USER_FIRM_IDS = [10010801, 10011716, 10011717];\n\n// list of firm ids that update product pricing by quote product id\nexport const FIRMS_THAT_UPDATE_PRODUCT_PRICING_BY_QUOTE_PRODUCT_ID = [8679222];\n\n// list of firm ids that update 'unitPrice' with auto pricing update feature\nexport const AUTO_PRICING_UPDATE_UNIT_PRICE_FIRM_IDS = [10011787, 3350722, 10011796, 8679222, 7256925];\nexport const UNIT_PRICE_NAME = 'Unit Price';\n\n// list of firm ids that update 'buyersCost' with auto pricing update feature\nexport const AUTO_PRICING_UPDATE_BUYERS_COST_FIRM_IDS = [2459107];\nexport const BUYERS_COST_NAME = 'Buyers Cost';\n\n// similar usuage as BUYERS_COST_NAME in product pricing update flow\nexport const COGS_NAME = 'cogs';\n\n// similar usuage as COGS_NAME in product pricing update flow\nexport const STANDARD_COST_KEY = 'standardcost';\nexport const STANDARD_COST_CELL_NAME = 'standardCost';\n\n// similar usuage as COGS_NAME in product pricing update flow\nexport const BRANCH_COST_KEY = 'branchCost';\nexport const BRANCH_COST_CELL_NAME = 'branch cost';\n\n// section title values to clear when sorting by manufacturer;\n// needs to include all locales, currently only english and french are used\nexport const SECTION_TITLE_VALUES_TO_CLEAR_ON_MANUFACTURER_SORT = [\n  'new section',\n  'nouvelle section',\n];\n\n// geo location ids\nexport enum GEOLOCATION_ID {\n  canada = 6251999,\n  usa = 6252001,\n  mexico = 3996063,\n}\n\nexport const FlagOrder = [GEOLOCATION_ID.canada, GEOLOCATION_ID.usa, GEOLOCATION_ID.mexico];\n\nexport const FlagCountriesSet = new Set(FlagOrder);\n\n// country ids that use imperial units\nexport const IMPERIAL_UNITS_COUNTRY_IDS = [6252001, 1327865, 2275384];\n\n// should be the id of the category with priority 0 in DRAWING_LABEL_PRIORITY\nexport const TOP_CATEGORY_PRIORITY_FOR_DRAWING_NAME = 108;\n\n// priority for naming drawings as per https://atsinc.atlassian.net/browse/SPEC-3636\nexport const DRAWING_NAME_PRIORITY = {\n  108: {\n    categoryName: 'Toilet',\n    categoryId: 108,\n    label: 'WC',\n    priority: 0,\n  },\n  14: {\n    categoryName: 'Basin',\n    categoryId: 14,\n    label: 'LAV',\n    priority: 1,\n  },\n  106: {\n    categoryName: 'Urinal',\n    categoryId: 106,\n    label: 'UR',\n    priority: 2,\n  },\n  226: {\n    categoryName: 'Floor Drain',\n    categoryId: 226,\n    label: 'FD',\n    priority: 3,\n  },\n  328: {\n    categoryName: 'Roof Drain',\n    categoryId: 328,\n    label: 'RD',\n    priority: 4,\n  },\n  244: {\n    categoryName: 'Cleanout',\n    categoryId: 244,\n    label: 'CS',\n    priority: 5,\n  },\n  271: {\n    categoryName: 'Floor Sinks',\n    categoryId: 271,\n    label: 'FS',\n    priority: 6,\n  },\n  120: {\n    categoryName: 'Water Heater',\n    categoryId: 120,\n    label: 'WH',\n    priority: 7,\n  },\n  115: {\n    categoryName: 'Backflow Preventer',\n    categoryId: 115,\n    label: 'BFP',\n    priority: 8,\n  },\n  130: {\n    categoryName: 'Drinking Fountain',\n    categoryId: 130,\n    label: 'DF',\n    priority: 9,\n  },\n  132: {\n    categoryName: 'Emergency Equipment',\n    categoryId: 132,\n    label: 'EE',\n    priority: 10,\n  },\n  1: {\n    categoryName: 'Sink',\n    categoryId: 1,\n    label: 'SK',\n    priority: 11,\n  },\n};\n\n// array of bid statuses from 'getBidStatus' from 'list' service, since it's a rather static list\n// we'll keep it as a constant instead of fetching it every time.\nexport const BIDSTATUS_ARRAY = [{ id: 1, labelPath: 'bidStatusDrawer.status.awarded', value: 'Awarded' }, { id: 2, labelPath: 'bidStatusDrawer.status.lost', value: 'Lost' }];\nexport const BIDSTATUS_LABEL_PATH_MAP = {\n  'Awarded': 'bidStatusDrawer.status.awarded',\n  'Lost': 'bidStatusDrawer.status.lost',\n};\n\n// usually title of app comes from the config, but sometimes the title string contains characters that\n// somehow gets formated incorrectly, so as a workaround we can set the title here.\nexport const WATTS_SPEC_TOOL_TITLE = 'SpecHUB™';\n\n// filter for product and series search for guest users to filter for results in only USA and Canada,\n// this filter is an addition to existing filters, and is used in place of the location filter\nexport const GUEST_USER_LOCATION_FILTER = {\n  or: [\n    {\n      unavailabilities: {\n        eq: null\n      }\n    },\n    {\n      not: [\n        {\n          and: [\n            {\n              unavailabilities: {\n                like: 6251999\n              }\n            },\n            {\n              unavailabilities: {\n                like: 6252001\n              }\n            }\n          ]\n        }\n      ]\n    }\n  ]\n};\n\nexport const GUEST_USER_ID = 2497567;\n\nexport const VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID = -2;\n\nexport const FIRM_TYPES = {\n  1: {\n    label: 'Manufacturer',\n    labelPath: 'firmTypes.manufacturer',\n  },\n  2: {\n    label: 'Manufacturer Reps',\n    labelPath: 'firmTypes.manufacturerReps',\n  },\n  3: {\n    label: 'Wholesaler / Distributor',\n    labelPath: 'firmTypes.wholesalerDistributor',\n  },\n  4: {\n    label: 'Engineering Firm',\n    labelPath: 'firmTypes.engineeringFirm',\n  },\n  5: {\n    label: 'Architectural Firm',\n    labelPath: 'firmTypes.architecturalFirm',\n  },\n  6: {\n    label: 'Mechanical Contractor',\n    labelPath: 'firmTypes.mechanicalContractor',\n  },\n  7: {\n    label: 'Interior Designer',\n    labelPath: 'firmTypes.interiorDesigner',\n  },\n  8: {\n    label: 'Contractor',\n    labelPath: 'firmTypes.contractor',\n  },\n  9: {\n    label: 'Other',\n    labelPath: 'firmTypes.other',\n  }\n};\n\n// vendor placeholder firm product\nexport const VENDOR_PLACEHOLDER_FIRM_PRODUCT = fromJS({\n  'attributes': {},\n  'brand': '',\n  'brandId': -1,\n  'category': -1,\n  'categoryName': '',\n  'components': [],\n  'cost': null,\n  'customFields': [],\n  'customProductNumber': false,\n  'dateAdded': '2024-12-09 15:26:21',\n  'dateModified': null,\n  'description': 'Vendor placeholder product',\n  'draft': false,\n  'draftChanged': null,\n  'draftId': null,\n  'draftParentId': null,\n  'draftWillPublish': null,\n  'ean': null,\n  'excluded': false,\n  'factoryId': null,\n  'file': [],\n  'firmId': -2,\n  'firmProductId': -2,\n  'id': VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID, // using -2 as the id for vendor placeholder firm product, currently -1 is already used for the default empty firm product\n  'invalid': false,\n  'invalidAttributesInfo': [],\n  'isCompetitor': false,\n  'isConfigurator': false,\n  'isRanked': false,\n  'isRecommended': false,\n  'isRequestingProduct': true,\n  'itemNumber': '',\n  'keywords': null,\n  'listPrice': null,\n  'locale': null,\n  'mergedIntoProductId': null,\n  'meta': [],\n  'modifiedBy': null,\n  'pimStatus': null,\n  'price': [],\n  'productId': -2,\n  'productNumber': 'Vendor Placeholder',\n  'productNumberClean': null,\n  'productSearchRelevance': 0,\n  'purchasability': [],\n  'rank': null,\n  'sellPrice': null,\n  'series': null,\n  'seriesDescription': null,\n  'seriesName': null,\n  'seriesStatus': null,\n  'sku': null,\n  'source': null,\n  'specRank': 0,\n  'status': 'active',\n  'stockLevels': null,\n  'testStatus': null,\n  'unavailability': [],\n  'upc': null,\n  'createdBy': null,\n});\n\nexport const BOBRICK_PLANNIN_GUIDE_FILE_ID = 'e1f7065471226b1da69bdc5bfb112af9';\nexport const BOBRICK_CSI_TRAD_FILE_ID = 'e1effd75acd81628b1044c9914a31e45';\nexport const BOBRICK_CSI_EVOLVE_FILE_ID = '9c3ef5a078bfd9336561b6236cb30936';\nexport const BOBRICK_CSI_PRIVADA_FILE_ID = '859aa9ef11bba92213c4ec2a37c07198';\nexport const BULK_UPLOAD_USERS_TEMPLATE_CSV_FILE_ID = '390508b6c81acad64f0d887f13632e76';\nexport const BULK_UPLOAD_USERS_TEMPLATE_XLSX_FILE_ID = '98063f266b9db1e41883bfade9fc25e0';\n\n// media types ids\nexport const MEDIA_TYPES_GROUPS_TABLE = {\n  main: {\n    id: 1,\n    type: 'main',\n    mediaGroup: 2\n  },\n  roughin: {\n    id: 2,\n    type: 'roughin',\n    mediaGroup: 1\n  },\n  manufacturer_cutsheet: {\n    id: 3,\n    type: 'manufacturer_cutsheet',\n    mediaGroup: 1\n  },\n  revit: {\n    id: 4,\n    type: 'revit',\n    mediaGroup: 1\n  },\n  cad: {\n    id: 5,\n    type: 'cad',\n    mediaGroup: 1\n  },\n  product_summary: {\n    id: 6,\n    type: 'product_summary',\n    mediaGroup: 1\n  },\n  sales_brochure: {\n    id: 7,\n    type: 'sales_brochure',\n    mediaGroup: 1\n  },\n  bill_of_material: {\n    id: 8,\n    type: 'bill_of_material',\n    mediaGroup: 1\n  },\n  operation_guide: {\n    id: 9,\n    type: 'operation_guide',\n    mediaGroup: 1\n  },\n  installation_manual: {\n    id: 10,\n    type: 'installation_manual',\n    mediaGroup: 1\n  },\n  warranty: {\n    id: 11,\n    type: 'warranty',\n    mediaGroup: 1\n  },\n  ai_source: {\n    id: 12,\n    type: 'ai_source',\n    mediaGroup: 1\n  },\n  ai_processed: {\n    id: 13,\n    type: 'ai_processed',\n    mediaGroup: 1\n  },\n  sketchup: {\n    id: 14,\n    type: 'sketchup',\n    mediaGroup: 1\n  },\n  eml: {\n    id: 15,\n    type: 'eml',\n    mediaGroup: 1\n  },\n  shop_drawing: {\n    id: 16,\n    type: 'shop_drawing',\n    mediaGroup: 1\n  },\n  cut_out_template: {\n    id: 17,\n    type: 'cut_out_template',\n    mediaGroup: 1\n  },\n  troubleshooting_document: {\n    id: 18,\n    type: 'troubleshooting_document',\n    mediaGroup: 1\n  },\n  swatch_sheet: {\n    id: 19,\n    type: 'swatch_sheet',\n    mediaGroup: 1\n  },\n  other: {\n    id: 20,\n    type: 'other',\n    mediaGroup: 1\n  },\n  marketing_video: {\n    id: 21,\n    type: 'marketing_video',\n    mediaGroup: 3\n  },\n  pump_curve: {\n    id: 22,\n    type: 'pump_curve',\n    mediaGroup: 1\n  },\n  fan_curve: {\n    id: 23,\n    type: 'fan_curve',\n    mediaGroup: 1\n  },\n  epd: {\n    id: 24,\n    type: 'epd',\n    mediaGroup: 1\n  },\n  product_webpage: {\n    id: 25,\n    type: 'product_webpage',\n    mediaGroup: 3\n  },\n  dxf_plan: {\n    id: 26,\n    type: 'dxf_plan',\n    mediaGroup: 1\n  },\n  dwg_plan: {\n    id: 27,\n    type: 'dwg_plan',\n    mediaGroup: 1\n  },\n  dxf_front: {\n    id: 28,\n    type: 'dxf_front',\n    mediaGroup: 1\n  },\n  dwg_front: {\n    id: 29,\n    type: 'dwg_front',\n    mediaGroup: 1\n  },\n  dxf_side: {\n    id: 30,\n    type: 'dxf_side',\n    mediaGroup: 1\n  },\n  dwg_side: {\n    id: 31,\n    type: 'dwg_side',\n    mediaGroup: 1\n  },\n  dxf_model: {\n    id: 32,\n    type: 'dxf_model',\n    mediaGroup: 1\n  },\n  dwg_model: {\n    id: 33,\n    type: 'dwg_model',\n    mediaGroup: 1\n  },\n  configurations: {\n    id: 34,\n    type: 'configurations',\n    mediaGroup: 1\n  },\n};\n","module.exports = require(\"regenerator-runtime\");\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n  ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar nullListeners = {\n  notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n  var batch = getBatch();\n  var first = null;\n  var last = null;\n  return {\n    clear: function clear() {\n      first = null;\n      last = null;\n    },\n    notify: function notify() {\n      batch(function () {\n        var listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n    get: function get() {\n      var listeners = [];\n      var listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n    subscribe: function subscribe(callback) {\n      var isSubscribed = true;\n      var listener = last = {\n        callback: callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n  };\n}\n\nvar Subscription = /*#__PURE__*/function () {\n  function Subscription(store, parentSub) {\n    this.store = store;\n    this.parentSub = parentSub;\n    this.unsubscribe = null;\n    this.listeners = nullListeners;\n    this.handleChangeWrapper = this.handleChangeWrapper.bind(this);\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.addNestedSub = function addNestedSub(listener) {\n    this.trySubscribe();\n    return this.listeners.subscribe(listener);\n  };\n\n  _proto.notifyNestedSubs = function notifyNestedSubs() {\n    this.listeners.notify();\n  };\n\n  _proto.handleChangeWrapper = function handleChangeWrapper() {\n    if (this.onStateChange) {\n      this.onStateChange();\n    }\n  };\n\n  _proto.isSubscribed = function isSubscribed() {\n    return Boolean(this.unsubscribe);\n  };\n\n  _proto.trySubscribe = function trySubscribe() {\n    if (!this.unsubscribe) {\n      this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.handleChangeWrapper) : this.store.subscribe(this.handleChangeWrapper);\n      this.listeners = createListenerCollection();\n    }\n  };\n\n  _proto.tryUnsubscribe = function tryUnsubscribe() {\n    if (this.unsubscribe) {\n      this.unsubscribe();\n      this.unsubscribe = null;\n      this.listeners.clear();\n      this.listeners = nullListeners;\n    }\n  };\n\n  return Subscription;\n}();\n\nexport { Subscription as default };","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n  var store = _ref.store,\n      context = _ref.context,\n      children = _ref.children;\n  var contextValue = useMemo(function () {\n    var subscription = new Subscription(store);\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    return {\n      store: store,\n      subscription: subscription\n    };\n  }, [store]);\n  var previousState = useMemo(function () {\n    return store.getState();\n  }, [store]);\n  useIsomorphicLayoutEffect(function () {\n    var subscription = contextValue.subscription;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return function () {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = null;\n    };\n  }, [contextValue, previousState]);\n  var Context = context || ReactReduxContext;\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  Provider.propTypes = {\n    store: PropTypes.shape({\n      subscribe: PropTypes.func.isRequired,\n      dispatch: PropTypes.func.isRequired,\n      getState: PropTypes.func.isRequired\n    }),\n    context: PropTypes.object,\n    children: PropTypes.any\n  };\n}\n\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n  useIsomorphicLayoutEffect(function () {\n    return effectFunc.apply(void 0, effectArgs);\n  }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps;\n  lastChildProps.current = actualChildProps;\n  renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null;\n    notifyNestedSubs();\n  }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n  var didUnsubscribe = false;\n  var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n  var checkForUpdates = function checkForUpdates() {\n    if (didUnsubscribe) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return;\n    }\n\n    var latestStoreState = store.getState();\n    var newChildProps, error;\n\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n    } catch (e) {\n      error = e;\n      lastThrownError = e;\n    }\n\n    if (!error) {\n      lastThrownError = null;\n    } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs();\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps;\n      childPropsFromStoreUpdate.current = newChildProps;\n      renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n      forceComponentUpdateDispatch({\n        type: 'STORE_UPDATED',\n        payload: {\n          error: error\n        }\n      });\n    }\n  }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n  subscription.onStateChange = checkForUpdates;\n  subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n  // changed since we began.\n\n  checkForUpdates();\n\n  var unsubscribeWrapper = function unsubscribeWrapper() {\n    didUnsubscribe = true;\n    subscription.tryUnsubscribe();\n    subscription.onStateChange = null;\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError;\n    }\n  };\n\n  return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n  selectorFactory is a func that is responsible for returning the selector function used to\r\n  compute new props from state, props, and dispatch. For example:\r\n      export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n      thing: state.things[props.thingId],\r\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n    }))(YourComponent)\r\n    Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n    Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n  selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (renderCountProp !== undefined) {\n      throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n    }\n\n    if (withRef) {\n      throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n    }\n\n    var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n\n    if (storeKey !== 'store') {\n      throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n    }\n  }\n\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n      throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        var reactReduxForwardedRef = props.reactReduxForwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, [\"reactReduxForwardedRef\"]);\n\n        return [props.context, reactReduxForwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          reactReduxForwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n\n      var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n      if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n        throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n      } // Based on the previous check, one of these must be true\n\n\n      var store = didStoreComeFromProps ? props.store : contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        var subscription = new Subscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n\n      var overriddenContextValue = useMemo(function () {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\n        // Tricky logic here:\n        // - This render may have been triggered by a Redux store update that produced new child props\n        // - However, we may have gotten new wrapper props after that\n        // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n        // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n        // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n        if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n          return childPropsFromStoreUpdate.current;\n        } // TODO We're reading the store directly in render() here. Bad idea?\n        // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n        // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n        // to determine what the child props should be.\n\n\n        return childPropsSelector(store.getState(), wrapperProps);\n      }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      var renderedWrappedComponent = useMemo(function () {\n        return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: reactReduxForwardedRef\n        }));\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      var renderedChild = useMemo(function () {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n          reactReduxForwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","function is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n  connect is a facade over connectAdvanced. It turns its args into a compatible\r\n  selectorFactory, which has the signature:\r\n\r\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n  \r\n  connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n  selectorFactory returns a final props selector from its mapStateToProps,\r\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n  mergePropsFactories, and pure args.\r\n\r\n  The resulting final props selector is called by the Connect component instance whenever\r\n  it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default /*#__PURE__*/createConnect();","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport function useReduxContext() {\n  var contextValue = useContext(ReactReduxContext);\n\n  if (process.env.NODE_ENV !== 'production' && !contextValue) {\n    throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n  }\n\n  return contextValue;\n}","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useStore() {\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store;\n\n    return store;\n  };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n *   const store = useStore()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport var useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    var store = useStore();\n    return store.dispatch;\n  };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const dispatch = useDispatch()\r\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n *   return (\r\n *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport var useDispatch = /*#__PURE__*/createDispatchHook();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n  return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n  var _useReducer = useReducer(function (s) {\n    return s + 1;\n  }, 0),\n      forceRender = _useReducer[1];\n\n  var subscription = useMemo(function () {\n    return new Subscription(store, contextSub);\n  }, [store, contextSub]);\n  var latestSubscriptionCallbackError = useRef();\n  var latestSelector = useRef();\n  var latestStoreState = useRef();\n  var latestSelectedState = useRef();\n  var storeState = store.getState();\n  var selectedState;\n\n  try {\n    if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n      var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n      if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n        selectedState = newSelectedState;\n      } else {\n        selectedState = latestSelectedState.current;\n      }\n    } else {\n      selectedState = latestSelectedState.current;\n    }\n  } catch (err) {\n    if (latestSubscriptionCallbackError.current) {\n      err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n    }\n\n    throw err;\n  }\n\n  useIsomorphicLayoutEffect(function () {\n    latestSelector.current = selector;\n    latestStoreState.current = storeState;\n    latestSelectedState.current = selectedState;\n    latestSubscriptionCallbackError.current = undefined;\n  });\n  useIsomorphicLayoutEffect(function () {\n    function checkForUpdates() {\n      try {\n        var _newSelectedState = latestSelector.current(store.getState());\n\n        if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n          return;\n        }\n\n        latestSelectedState.current = _newSelectedState;\n      } catch (err) {\n        // we ignore all errors here, since when the component\n        // is re-rendered, the selectors are called again, and\n        // will throw again, if neither props nor store state\n        // changed\n        latestSubscriptionCallbackError.current = err;\n      }\n\n      forceRender();\n    }\n\n    subscription.onStateChange = checkForUpdates;\n    subscription.trySubscribe();\n    checkForUpdates();\n    return function () {\n      return subscription.tryUnsubscribe();\n    };\n  }, [store, subscription]);\n  return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useSelector(selector, equalityFn) {\n    if (equalityFn === void 0) {\n      equalityFn = refEquality;\n    }\n\n    if (process.env.NODE_ENV !== 'production' && !selector) {\n      throw new Error(\"You must pass a selector to useSelector\");\n    }\n\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store,\n        contextSub = _useReduxContext.subscription;\n\n    var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch, createDispatchHook } from './hooks/useDispatch';\nimport { useSelector, createSelectorHook } from './hooks/useSelector';\nimport { useStore, createStoreHook } from './hooks/useStore';\nimport { setBatch } from './utils/batch';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport shallowEqual from './utils/shallowEqual';\nsetBatch(batch);\nexport { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, createDispatchHook, useSelector, createSelectorHook, useStore, createStoreHook, shallowEqual };","function defaultEqualityCheck(a, b) {\n  return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false;\n  }\n\n  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n  var length = prev.length;\n  for (var i = 0; i < length; i++) {\n    if (!equalityCheck(prev[i], next[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport function defaultMemoize(func) {\n  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n  var lastArgs = null;\n  var lastResult = null;\n  // we reference arguments instead of spreading them for performance reasons\n  return function () {\n    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments);\n    }\n\n    lastArgs = arguments;\n    return lastResult;\n  };\n}\n\nfunction getDependencies(funcs) {\n  var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n  if (!dependencies.every(function (dep) {\n    return typeof dep === 'function';\n  })) {\n    var dependencyTypes = dependencies.map(function (dep) {\n      return typeof dep;\n    }).join(', ');\n    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n  }\n\n  return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    memoizeOptions[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      funcs[_key2] = arguments[_key2];\n    }\n\n    var recomputations = 0;\n    var resultFunc = funcs.pop();\n    var dependencies = getDependencies(funcs);\n\n    var memoizedResultFunc = memoize.apply(undefined, [function () {\n      recomputations++;\n      // apply arguments instead of spreading for performance.\n      return resultFunc.apply(null, arguments);\n    }].concat(memoizeOptions));\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    var selector = memoize(function () {\n      var params = [];\n      var length = dependencies.length;\n\n      for (var i = 0; i < length; i++) {\n        // apply arguments instead of spreading and mutate a local list of params for performance.\n        params.push(dependencies[i].apply(null, arguments));\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params);\n    });\n\n    selector.resultFunc = resultFunc;\n    selector.dependencies = dependencies;\n    selector.recomputations = function () {\n      return recomputations;\n    };\n    selector.resetRecomputations = function () {\n      return recomputations = 0;\n    };\n    return selector;\n  };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n  if (typeof selectors !== 'object') {\n    throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n  }\n  var objectKeys = Object.keys(selectors);\n  return selectorCreator(objectKeys.map(function (key) {\n    return selectors[key];\n  }), function () {\n    for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      values[_key3] = arguments[_key3];\n    }\n\n    return values.reduce(function (composition, value, index) {\n      composition[objectKeys[index]] = value;\n      return composition;\n    }, {});\n  });\n}","import arrayWithHoles from \"@babel/runtime/helpers/esm/arrayWithHoles\";\nimport iterableToArrayLimit from \"@babel/runtime/helpers/esm/iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime/helpers/esm/nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { EventType } from 'ats-utils/src/Interfaces/AtsApi';\nimport FieldDropzoneState from '../../models/FieldDropzoneState';\nimport { Color } from '@material-ui/lab/Alert';\nimport { SnackbarOrigin } from '@material-ui/core/Snackbar';\nimport VsbEnv from '../../models/VsbEnv';\nimport AppVersionData from '../../models/AppVersionData';\nimport {IAttributeOptionDialogState, ISession} from '../../modules/ApplicationModule/reducer';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport { CONTENT_TYPE, ISnackbarContentProps } from '../../components/CustomizedSnackbar/Component';\nimport {Identity} from '../../models';\nexport default {};\n\nexport enum ApplicationActionTypes {\n\n  SET_ATS_API_STATE = 'SET_ATS_API_STATE',\n  SET_SCROLL_NODE = 'SET_SCROLL_NODE',\n  SET_SNACKBAR_OPEN = 'SET_SNACKBAR_OPEN',\n  SET_SNACKBAR_CLOSED = 'SET_SNACKBAR_CLOSED',\n\n  TOGGLE_OVERLAY_COMPONENT = 'TOGGLE_OVERLAY_COMPONENT',\n  SET_OVERLAY_COMPONENT_PROPS = 'SET_OVERLAY_COMPONENT_PROPS',\n  SET_OVERLAY_COMPONENT_CONTENT = 'SET_OVERLAY_COMPONENT_CONTENT',\n\n  SET_LOCAL_VAR = 'SET_LOCAL_VAR',\n  DELETE_LOCAL_VAR = 'DELETE_LOCAL_VAR',\n\n  TOGGLE_DRAWER = 'TOGGLE_DRAWER',\n\n  SPEC_TOOL_PROJECT_LIST_IS_LOADING = 'SPEC_TOOL_PROJECT_LIST_IS_LOADING',\n\n  FILE_ATTACHMENT_IS_LOADING = 'FILE_ATTACHMENT_IS_LOADING',\n\n  FIELD_DROPZONE_STATE_CHANGE = 'FIELD_DROPZONE_STATE_CHANGE',\n  FIELD_DROPZONE_STATE_RESET = 'FIELD_DROPZONE_STATE_RESET',\n\n  NO_PHOTO_PREVIEW = 'NO_PHOTO_PREVIEW',\n  SHOW_PHOTO_PREVIEW = 'SHOW_PHOTO_PREVIEW',\n\n  OPEN_MOBILE_APP_MENU = 'OPEN_MOBILE_APP_MENU',\n  CLOSE_MOBILE_APP_MENU = 'CLOSE_MOBILE_APP_MENU',\n\n  GET_VSB_ENV = 'GET_VSB_ENV',\n  GET_VSB_ENV_SUCCEEDED = 'GET_VSB_ENV_SUCCEEDED',\n\n  GET_APP_VERSION = 'GET_APP_VERSION',\n  SET_APP_VERSION = 'SET_APP_VERSION',\n  SET_ATTRIBUTE_DIALOG_STATE = 'SET_ATTRIBUTE_DIALOG_STATE',\n  SET_OPTION_DIALOG_STATE = 'SET_OPTION_DIALOG_STATE',\n  SET_APP_MENU_OPEN_ACTION = 'SET_APP_MENU_OPEN_ACTION',\n\n  TOGGLE_LIVE_CHAT = 'TOGGLE_LIVE_CHAT',\n  SET_TIMER_START = 'SET_TIMER_START',\n\n  GET_SESSION_ACTION = 'GET_SESSION_ACTION',\n  SET_SESSION_ACTION = 'SET_SESSION_ACTION',\n\n  TOGGLE_TAKEOFF_LIST = 'TOGGLE_TAKEOFF_LIST',\n}\n\nexport class ToggleTakeoffListAction implements IAction {\n  public readonly type = ApplicationActionTypes.TOGGLE_TAKEOFF_LIST;\n  constructor(\n    public payload?: {\n      forceState: boolean;\n    }\n  ) {}\n}\n\nexport class SetTimerStartAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_TIMER_START;\n  constructor(\n    public payload: {\n      startTime: number;\n      action: string;\n    }\n  ) {}\n}\n\nexport class ToggleLiveChatAction implements IAction {\n  public readonly type = ApplicationActionTypes.TOGGLE_LIVE_CHAT;\n  constructor(\n    public payload: {\n      open: boolean;\n    }\n  ) {}\n}\n\nexport type AtsApiState = {\n  [event in EventType]?: boolean;\n};\n\nexport class SetAppVersionAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_APP_VERSION;\n  constructor(\n    public payload: {\n      versionData: IMap<AppVersionData>\n    }\n  ) {}\n}\n\nexport class SetAtsApiState implements IAction {\n  public readonly type = ApplicationActionTypes.SET_ATS_API_STATE;\n  constructor(\n    public payload: {\n      state: IMap<AtsApiState>\n    }\n  ) {}\n}\nexport class SetScrollNodeAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_SCROLL_NODE;\n  constructor(\n    public payload: {\n      scrollNode?: React.RefObject<any>;\n    }\n  ) {}\n}\n\nexport class HasToggleAction implements IAction {\n  public type;\n  constructor(\n    public payload: {\n      open?: boolean,\n    }\n  ) {}\n}\n\nexport class SetAttributeDialogStateAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_ATTRIBUTE_DIALOG_STATE;\n  constructor(\n    public payload: IMap<IAttributeOptionDialogState>\n  ) {}\n}\nexport class SetOptionDialogStateAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_OPTION_DIALOG_STATE;\n  constructor(\n    public payload: IMap<IAttributeOptionDialogState>\n  ) {}\n}\n\nexport class ToggleOverlayComponentAction extends HasToggleAction {\n  public readonly type = ApplicationActionTypes.TOGGLE_OVERLAY_COMPONENT;\n  constructor(\n    public payload: {\n      open?: boolean,\n      id?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class SetOverlayComponentPropsAction<T extends object = {}> implements IAction {\n  public readonly type = ApplicationActionTypes.SET_OVERLAY_COMPONENT_PROPS;\n  constructor(\n    public payload: {\n      props?: T,\n      id?: string,\n    }\n  ) {\n  }\n}\n\nexport class SetOverlayComponentContentAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_OVERLAY_COMPONENT_CONTENT;\n  constructor(\n    public payload: {\n      content?: string | number,\n      id?: string,\n    }\n  ) {\n  }\n}\nexport interface ISnackbarActionProps {\n  label?: string;\n  onclick?: any;\n  autoHideDuration: number | null;\n  buttonStyle?: Record<string, any>;\n}\n\nexport class SetSnackbarOpenAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_SNACKBAR_OPEN;\n  constructor(\n    public payload: {\n      content?: IMap<ISnackbarContentProps>;\n      message?: string;\n      severity?: Color;\n      backgroundColor?: 'black' | 'white';\n      anchorOrigin?: SnackbarOrigin;\n      actionProps?: ISnackbarActionProps;\n      icon?: any;\n      iconProps?: any;\n    }\n  ) {\n  }\n}\n\nexport class SetSnackbarClosedAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_SNACKBAR_CLOSED;\n}\n\nexport class SetLocalVarAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_LOCAL_VAR;\n  constructor(\n    public payload: {\n      key: string,\n      value: any,\n    }\n  ) {}\n}\n\nexport class DeleteLocalVarAction implements IAction {\n  public readonly type = ApplicationActionTypes.DELETE_LOCAL_VAR;\n  constructor(\n    public payload: {\n      key: string,\n    }\n  ) {}\n}\n\nexport class SpecToolProjectListIsLoadingAction implements IAction {\n  public readonly type = ApplicationActionTypes.SPEC_TOOL_PROJECT_LIST_IS_LOADING;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class FileAttachmentIsLoadingAction implements IAction {\n  public readonly type = ApplicationActionTypes.FILE_ATTACHMENT_IS_LOADING;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class FieldDropzoneStateChangeAction implements IAction {\n  public readonly type = ApplicationActionTypes.FIELD_DROPZONE_STATE_CHANGE;\n  constructor(\n    public payload: {\n      key: keyof FieldDropzoneState;\n      value: any;\n    }\n  ) { }\n}\nexport class FieldDropzoneStateResetAction implements IAction {\n  public readonly type = ApplicationActionTypes.FIELD_DROPZONE_STATE_RESET;\n}\n\nexport class NoPhotoPreviewAction implements IAction {\n  public readonly type = ApplicationActionTypes.NO_PHOTO_PREVIEW;\n}\nexport class ShowPhotoPreviewAction implements IAction {\n  public readonly type = ApplicationActionTypes.SHOW_PHOTO_PREVIEW;\n}\n\nexport class OpenMobileAppMenuAction implements IAction {\n  public readonly type = ApplicationActionTypes.OPEN_MOBILE_APP_MENU;\n}\n\nexport class CloseMobileAppMenuAction implements IAction {\n  public readonly type = ApplicationActionTypes.CLOSE_MOBILE_APP_MENU;\n}\n\nexport class GetVsbEnvAction implements IAction {\n  public readonly type = ApplicationActionTypes.GET_VSB_ENV;\n}\n\nexport class GetVsbEnvSucceededAction implements IAction {\n  public readonly type = ApplicationActionTypes.GET_VSB_ENV_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<VsbEnv>\n  ) { }\n}\n\nexport class SetAppMenuOpenAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_APP_MENU_OPEN_ACTION;\n\n  constructor(\n    public payload: {open: boolean}\n  ) { }\n}\n\nexport class GetSessionAction implements IAction {\n  public readonly type = ApplicationActionTypes.GET_SESSION_ACTION;\n  constructor(\n      public payload: { forceRefresh?: boolean, onSuccess?: () => void }\n  ) { }\n}\nexport class SetSessionAction implements IAction {\n  public readonly type = ApplicationActionTypes.SET_SESSION_ACTION;\n\n  constructor(\n      public payload: { session: IMap<ISession> }\n  ) { }\n}","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nvar defaultOptions = {\n  bindI18n: 'languageChanging languageChanged',\n  bindI18nStore: '',\n  // nsMode: 'fallback' // loop through all namespaces given to hook, HOC, render prop for key lookup\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  // hashTransKey: key => key // calculate a key for Trans component based on defaultValue\n  useSuspense: true\n};\nvar i18nInstance;\nvar hasUsedI18nextProvider;\nexport var I18nContext = React.createContext();\nexport function usedI18nextProvider(used) {\n  hasUsedI18nextProvider = used;\n}\nexport function getHasUsedI18nextProvider() {\n  return hasUsedI18nextProvider;\n}\nexport function setDefaults() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = _objectSpread({}, defaultOptions, options);\n}\nexport function getDefaults() {\n  return defaultOptions;\n}\nexport var ReportNamespaces =\n/*#__PURE__*/\nfunction () {\n  function ReportNamespaces() {\n    _classCallCheck(this, ReportNamespaces);\n\n    this.usedNamespaces = {};\n  }\n\n  _createClass(ReportNamespaces, [{\n    key: \"addUsedNamespaces\",\n    value: function addUsedNamespaces(namespaces) {\n      var _this = this;\n\n      namespaces.forEach(function (ns) {\n        if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n      });\n    }\n  }, {\n    key: \"getUsedNamespaces\",\n    value: function getUsedNamespaces() {\n      return Object.keys(this.usedNamespaces);\n    }\n  }]);\n\n  return ReportNamespaces;\n}();\nexport function setI18n(instance) {\n  i18nInstance = instance;\n}\nexport function getI18n() {\n  return i18nInstance;\n}\nexport var initReactI18next = {\n  type: '3rdParty',\n  init: function init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};\nexport function composeInitialProps(ForComponent) {\n  return function (ctx) {\n    return new Promise(function (resolve) {\n      var i18nInitialProps = getInitialProps();\n\n      if (ForComponent.getInitialProps) {\n        ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n          resolve(_objectSpread({}, componentsInitialProps, i18nInitialProps));\n        });\n      } else {\n        resolve(i18nInitialProps);\n      }\n    });\n  }; // Avoid async for now - so we do not need to pull in regenerator\n  // return async ctx => {\n  //   const componentsInitialProps = ForComponent.getInitialProps\n  //     ? await ForComponent.getInitialProps(ctx)\n  //     : {};\n  //   const i18nInitialProps = getInitialProps();\n  //   return {\n  //     ...componentsInitialProps,\n  //     ...i18nInitialProps,\n  //   };\n  // };\n}\nexport function getInitialProps() {\n  var i18n = getI18n();\n  var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n  var ret = {};\n  var initialI18nStore = {};\n  i18n.languages.forEach(function (l) {\n    initialI18nStore[l] = {};\n    namespaces.forEach(function (ns) {\n      initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n    });\n  });\n  ret.initialI18nStore = initialI18nStore;\n  ret.initialLanguage = i18n.language;\n  return ret;\n}","export function warn() {\n  if (console && console.warn) {\n    var _console;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n    (_console = console).warn.apply(_console, args);\n  }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n  if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n  warn.apply(void 0, args);\n} // not needed right now\n//\n// export function deprecated(...args) {\n//   if (process && process.env && (!process.env.NODE_ENV || process.env.NODE_ENV === 'development')) {\n//     if (typeof args[0] === 'string') args[0] = `deprecation warning -> ${args[0]}`;\n//     warnOnce(...args);\n//   }\n// }\n\nexport function loadNamespaces(i18n, ns, cb) {\n  i18n.loadNamespaces(ns, function () {\n    // delay ready if not yet initialized i18n instance\n    if (i18n.isInitialized) {\n      cb();\n    } else {\n      var initialized = function initialized() {\n        // due to emitter removing issue in i18next we need to delay remove\n        setTimeout(function () {\n          i18n.off('initialized', initialized);\n        }, 0);\n        cb();\n      };\n\n      i18n.on('initialized', initialized);\n    }\n  });\n}\nexport function hasLoadedNamespace(ns, i18n) {\n  if (!i18n.languages || !i18n.languages.length) {\n    warnOnce('i18n.languages were undefined or empty', i18n.languages);\n    return true;\n  }\n\n  var lng = i18n.languages[0];\n  var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n  var lastLng = i18n.languages[i18n.languages.length - 1]; // we're in cimode so this shall pass\n\n  if (lng.toLowerCase() === 'cimode') return true;\n\n  var loadNotPending = function loadNotPending(l, n) {\n    var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n    return loadState === -1 || loadState === 2;\n  }; // loaded -> SUCCESS\n\n\n  if (i18n.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS\n\n  if (!i18n.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS\n\n  if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n  return false;\n}\nexport function getDisplayName(Component) {\n  return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport React, { useContext } from 'react';\nimport HTML from 'html-parse-stringify2';\nimport { getI18n, getHasUsedI18nextProvider, I18nContext, getDefaults } from './context';\nimport { warn, warnOnce } from './utils';\n\nfunction hasChildren(node) {\n  return node && (node.children || node.props && node.props.children);\n}\n\nfunction getChildren(node) {\n  if (!node) return [];\n  return node && node.children ? node.children : node.props && node.props.children;\n}\n\nfunction hasValidReactChildren(children) {\n  if (Object.prototype.toString.call(children) !== '[object Array]') return false;\n  return children.every(function (child) {\n    return React.isValidElement(child);\n  });\n}\n\nexport function nodesToString(mem, children, index, i18nOptions) {\n  if (!children) return '';\n  if (Object.prototype.toString.call(children) !== '[object Array]') children = [children];\n  var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n  children.forEach(function (child, i) {\n    // const isElement = React.isValidElement(child);\n    // const elementKey = `${index !== 0 ? index + '-' : ''}${i}:${typeof child.type === 'function' ? child.type.name : child.type || 'var'}`;\n    var elementKey = \"\".concat(i);\n\n    if (typeof child === 'string') {\n      mem = \"\".concat(mem).concat(child);\n    } else if (hasChildren(child)) {\n      var elementTag = keepArray.indexOf(child.type) > -1 && Object.keys(child.props).length === 1 && typeof hasChildren(child) === 'string' ? child.type : elementKey;\n\n      if (child.props && child.props.i18nIsDynamicList) {\n        // we got a dynamic list like \"<ul>{['a', 'b'].map(item => ( <li key={item}>{item}</li> ))}</ul>\"\"\n        // the result should be \"<0></0>\" and not \"<0><0>a</0><1>b</1></0>\"\n        mem = \"\".concat(mem, \"<\").concat(elementTag, \"></\").concat(elementTag, \">\");\n      } else {\n        // regular case mapping the inner children\n        mem = \"\".concat(mem, \"<\").concat(elementTag, \">\").concat(nodesToString('', getChildren(child), i + 1, i18nOptions), \"</\").concat(elementTag, \">\");\n      }\n    } else if (React.isValidElement(child)) {\n      if (keepArray.indexOf(child.type) > -1 && Object.keys(child.props).length === 0) {\n        mem = \"\".concat(mem, \"<\").concat(child.type, \"/>\");\n      } else {\n        mem = \"\".concat(mem, \"<\").concat(elementKey, \"></\").concat(elementKey, \">\");\n      }\n    } else if (_typeof(child) === 'object') {\n      var clone = _objectSpread({}, child);\n\n      var format = clone.format;\n      delete clone.format;\n      var keys = Object.keys(clone);\n\n      if (format && keys.length === 1) {\n        mem = \"\".concat(mem, \"{{\").concat(keys[0], \", \").concat(format, \"}}\");\n      } else if (keys.length === 1) {\n        mem = \"\".concat(mem, \"{{\").concat(keys[0], \"}}\");\n      } else {\n        // not a valid interpolation object (can only contain one value plus format)\n        warn(\"react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.\", child);\n      }\n    } else {\n      warn(\"Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.\", child);\n    }\n  });\n  return mem;\n}\n\nfunction renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts) {\n  if (targetString === '') return []; // check if contains tags we need to replace from html string to react nodes\n\n  var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n  var emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.join('|')).test(targetString); // no need to replace tags in the targetstring\n\n  if (!children && !emptyChildrenButNeedsHandling) return [targetString]; // v2 -> interpolates upfront no need for \"some <0>{{var}}</0>\"\" -> will be just \"some {{var}}\" in translation file\n\n  var data = {};\n\n  function getData(childs) {\n    if (Object.prototype.toString.call(childs) !== '[object Array]') childs = [childs];\n    childs.forEach(function (child) {\n      if (typeof child === 'string') return;\n      if (hasChildren(child)) getData(getChildren(child));else if (_typeof(child) === 'object' && !React.isValidElement(child)) Object.assign(data, child);\n    });\n  }\n\n  getData(children);\n  targetString = i18n.services.interpolator.interpolate(targetString, _objectSpread({}, data, combinedTOpts), i18n.language); // parse ast from string with additional wrapper tag\n  // -> avoids issues in parser removing prepending text nodes\n\n  var ast = HTML.parse(\"<0>\".concat(targetString, \"</0>\"));\n\n  function mapAST(reactNodes, astNodes) {\n    if (Object.prototype.toString.call(reactNodes) !== '[object Array]') reactNodes = [reactNodes];\n    if (Object.prototype.toString.call(astNodes) !== '[object Array]') astNodes = [astNodes];\n    return astNodes.reduce(function (mem, node, i) {\n      var translationContent = node.children && node.children[0] && node.children[0].content;\n\n      if (node.type === 'tag') {\n        var child = reactNodes[parseInt(node.name, 10)] || {};\n        var isElement = React.isValidElement(child);\n\n        if (typeof child === 'string') {\n          mem.push(child);\n        } else if (hasChildren(child)) {\n          var childs = getChildren(child);\n          var mappedChildren = mapAST(childs, node.children);\n          var inner = hasValidReactChildren(childs) && mappedChildren.length === 0 ? childs : mappedChildren;\n          if (child.dummy) child.children = inner; // needed on preact!\n\n          mem.push(React.cloneElement(child, _objectSpread({}, child.props, {\n            key: i\n          }), inner));\n        } else if (emptyChildrenButNeedsHandling && _typeof(child) === 'object' && child.dummy && !isElement) {\n          // we have a empty Trans node (the dummy element) with a targetstring that contains html tags needing\n          // conversion to react nodes\n          // so we just need to map the inner stuff\n          var _inner = mapAST(reactNodes\n          /* wrong but we need something */\n          , node.children);\n\n          mem.push(React.cloneElement(child, _objectSpread({}, child.props, {\n            key: i\n          }), _inner));\n        } else if (isNaN(node.name) && i18nOptions.transSupportBasicHtmlNodes) {\n          if (node.voidElement) {\n            mem.push(React.createElement(node.name, {\n              key: \"\".concat(node.name, \"-\").concat(i)\n            }));\n          } else {\n            var _inner2 = mapAST(reactNodes\n            /* wrong but we need something */\n            , node.children);\n\n            mem.push(React.createElement(node.name, {\n              key: \"\".concat(node.name, \"-\").concat(i)\n            }, _inner2));\n          }\n        } else if (_typeof(child) === 'object' && !isElement) {\n          var content = node.children[0] ? translationContent : null; // v1\n          // as interpolation was done already we just have a regular content node\n          // in the translation AST while having an object in reactNodes\n          // -> push the content no need to interpolate again\n\n          if (content) mem.push(content);\n        } else if (node.children.length === 1 && translationContent) {\n          // If component does not have children, but translation - has\n          // with this in component could be components={[<span class='make-beautiful'/>]} and in translation - 'some text <0>some highlighted message</0>'\n          mem.push(React.cloneElement(child, _objectSpread({}, child.props, {\n            key: i\n          }), translationContent));\n        } else {\n          mem.push(child);\n        }\n      } else if (node.type === 'text') {\n        mem.push(node.content);\n      }\n\n      return mem;\n    }, []);\n  } // call mapAST with having react nodes nested into additional node like\n  // we did for the string ast from translation\n  // return the children of that extra node to get expected result\n\n\n  var result = mapAST([{\n    dummy: true,\n    children: children\n  }], ast);\n  return getChildren(result[0]);\n}\n\nexport function Trans(_ref) {\n  var children = _ref.children,\n      count = _ref.count,\n      parent = _ref.parent,\n      i18nKey = _ref.i18nKey,\n      tOptions = _ref.tOptions,\n      values = _ref.values,\n      defaults = _ref.defaults,\n      components = _ref.components,\n      ns = _ref.ns,\n      i18nFromProps = _ref.i18n,\n      tFromProps = _ref.t,\n      additionalProps = _objectWithoutProperties(_ref, [\"children\", \"count\", \"parent\", \"i18nKey\", \"tOptions\", \"values\", \"defaults\", \"components\", \"ns\", \"i18n\", \"t\"]);\n\n  var _ref2 = getHasUsedI18nextProvider() ? useContext(I18nContext) : {},\n      i18nFromContext = _ref2.i18n;\n\n  var i18n = i18nFromProps || i18nFromContext || getI18n();\n\n  if (!i18n) {\n    warnOnce('You will need pass in an i18next instance by using i18nextReactModule');\n    return children;\n  }\n\n  var t = tFromProps || i18n.t.bind(i18n);\n\n  var reactI18nextOptions = _objectSpread({}, getDefaults(), i18n.options && i18n.options.react);\n\n  var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent;\n  var defaultValue = defaults || nodesToString('', children, 0, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue;\n  var hashTransKey = reactI18nextOptions.hashTransKey;\n  var key = i18nKey || (hashTransKey ? hashTransKey(defaultValue) : defaultValue);\n  var interpolationOverride = values ? {} : {\n    interpolation: {\n      prefix: '#$?',\n      suffix: '?$#'\n    }\n  };\n\n  var combinedTOpts = _objectSpread({}, tOptions, values, interpolationOverride, {\n    defaultValue: defaultValue,\n    count: count,\n    ns: ns\n  });\n\n  var translation = key ? t(key, combinedTOpts) : defaultValue;\n  if (!useAsParent) return renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts);\n  return React.createElement(useAsParent, additionalProps, renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts));\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport { useState, useEffect, useContext } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, getHasUsedI18nextProvider, I18nContext } from './context';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';\nexport function useTranslation(ns) {\n  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // assert we have the needed i18nInstance\n  var i18nFromProps = props.i18n;\n\n  var _ref = getHasUsedI18nextProvider() ? useContext(I18nContext) : {},\n      i18nFromContext = _ref.i18n;\n\n  var i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n  if (!i18n) {\n    warnOnce('You will need pass in an i18next instance by using initReactI18next');\n    var retNotReady = [function (k) {\n      return k;\n    }, {}, true];\n\n    retNotReady.t = function (k) {\n      return k;\n    };\n\n    retNotReady.i18n = {};\n    retNotReady.ready = true;\n    return retNotReady;\n  }\n\n  var i18nOptions = _objectSpread({}, getDefaults(), i18n.options.react);\n\n  var _props$useSuspense = props.useSuspense,\n      useSuspense = _props$useSuspense === void 0 ? i18nOptions.useSuspense : _props$useSuspense; // prepare having a namespace\n\n  var namespaces = ns || i18n.options && i18n.options.defaultNS;\n  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; // report namespaces as used\n\n  if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); // are we ready? yes if all namespaces in first language are loaded already (either with data or empty object on failed load)\n\n  var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n    return hasLoadedNamespace(n, i18n);\n  }); // binding t function to namespace (acts also as rerender trigger)\n\n  function getT() {\n    return {\n      t: i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0])\n    };\n  }\n\n  var _useState = useState(getT()),\n      _useState2 = _slicedToArray(_useState, 2),\n      t = _useState2[0],\n      setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj\n\n\n  useEffect(function () {\n    var isMounted = true;\n    var bindI18n = i18nOptions.bindI18n,\n        bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces\n    // in side effect and do not call resetT if unmounted\n\n    if (!ready && !useSuspense) {\n      loadNamespaces(i18n, namespaces, function () {\n        if (isMounted) setT(getT());\n      });\n    }\n\n    function boundReset() {\n      if (isMounted) setT(getT());\n    } // bind events to trigger change, like languageChanged\n\n\n    if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n    if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount\n\n    return function () {\n      isMounted = false;\n      if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n        return i18n.off(e, boundReset);\n      });\n      if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n        return i18n.store.off(e, boundReset);\n      });\n    };\n  });\n  var ret = [t.t, i18n, ready];\n  ret.t = t.t;\n  ret.i18n = i18n;\n  ret.ready = ready; // return hook stuff if ready\n\n  if (ready) return ret; // not yet loaded namespaces -> load them -> and return if useSuspense option set false\n\n  if (!ready && !useSuspense) return ret; // not yet loaded namespaces -> load them -> and trigger suspense\n\n  throw new Promise(function (resolve) {\n    loadNamespaces(i18n, namespaces, function () {\n      setT(getT());\n      resolve();\n    });\n  });\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport React from 'react';\nimport { useTranslation } from './useTranslation';\nimport { getDisplayName } from './utils';\nexport function withTranslation(ns) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function Extend(WrappedComponent) {\n    function I18nextWithTranslation(props, ref) {\n      var _useTranslation = useTranslation(ns, props),\n          _useTranslation2 = _slicedToArray(_useTranslation, 3),\n          t = _useTranslation2[0],\n          i18n = _useTranslation2[1],\n          ready = _useTranslation2[2];\n\n      var passDownProps = _objectSpread({}, props, {\n        t: t,\n        i18n: i18n,\n        tReady: ready\n      });\n\n      if (options.withRef && ref) {\n        passDownProps.ref = ref;\n      }\n\n      return React.createElement(WrappedComponent, passDownProps);\n    }\n\n    I18nextWithTranslation.displayName = \"withI18nextTranslation(\".concat(getDisplayName(WrappedComponent), \")\");\n    return options.withRef ? React.forwardRef(I18nextWithTranslation) : I18nextWithTranslation;\n  };\n}","import React from 'react';\nimport { I18nContext, usedI18nextProvider } from './context';\nexport function I18nextProvider(_ref) {\n  var i18n = _ref.i18n,\n      children = _ref.children;\n  usedI18nextProvider(true);\n  return React.createElement(I18nContext.Provider, {\n    value: {\n      i18n: i18n\n    }\n  }, children);\n}","module.exports = require('./lib/immutable')\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  List,\n  fromJS,\n  is,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IAtsReducerState,\n} from './reducer';\nimport {\n  DEFAULT_SERVER,\n  DEFAULT_SITE,\n  DEFAULT_LABEL,\n  SiteName,\n  SPEC_TOOL_ID, LIXIL_SPEC_ID,\n  PRODUCT_SELECTION_PATH,\n} from '../../constants';\nimport {\n  AuthObject,\n  AclRoles,\n  Identity,\n  Base,\n  AuthUser,\n  AuthUserClaims,\n  AuthUserUser,\n  Project,\n} from '../../models';\nimport { makeSelectAppVersionData } from '../ApplicationModule/selectors';\nimport { makeSelectFirm, makeSelectOffice, makeSelectOffices, makeSelectUserFirm } from '../AccountModule/selectors';\nimport QuoteConnectHelp from '../../utils/quoteConnect/quoteConnectHelp';\nimport { makeSelectLocale } from '../LanguageModule/selectors';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added AtsModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectRegisteredUser = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('registeredUser')\n);\n\nexport const makeSelectResetPasswordStatus = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('resetPasswordSucceeded')\n);\n\nexport const makeSelectFirmTypes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('firmTypes')\n);\n\nexport const makeSelectLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('loading')\n);\n\nexport const makeSelectError = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('error')\n);\n\nexport const makeSelectAuthentication = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('authentication')\n);\n\nexport const makeSelectAppToken = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state != null ? state.getIn(['appAuthentication', server, 'token']) : undefined\n);\n\n// when the current app token was obtained (APP_LOGGED_IN), in ms since the epoch\nexport const makeSelectAppAuthenticatedAt = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state != null ? state.getIn(['appAuthentication', server, 'authenticated_at']) : undefined\n);\n\nexport const makeSelectAppIdentity = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => {\n    return state.getIn(['appAuthentication', server, 'identity']) || new AuthObject({}).toImmutable();\n  }\n);\n\nexport const makeSelectAppIdentityObject = (server = DEFAULT_SERVER) => createSelector(\n  makeSelectAppIdentity(server),\n  (identity: IMap<AuthObject>) => identity.getIn(['user', 'claims', 'identity']) // CAN BE NULL!!!\n);\n\nexport const makeSelectToken = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state != null ? state.getIn(['authentication', server, 'token']) : undefined\n);\n\nexport const makeSelectAuthObject = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => {\n    return state.getIn(['authentication', server, 'identity']) || new AuthObject({}).toImmutable();\n  }\n);\n\nexport const makeSelectIdentityObject = (server = DEFAULT_SERVER) => createSelector(\n  makeSelectAuthObject(server),\n  (identity: IMap<AuthObject>) => {\n    return identity.getIn(['user', 'claims', 'identity']); // CAN BE NULL!!!!\n  }\n);\n\nexport const makeSelectIssuedTime = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => {\n    return state.getIn(['authentication', server, 'identity', 'user', 'claims', 'iat']);\n  }\n);\n\nexport const makeSelectExpireTime = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => {\n    return state.getIn(['authentication', server, 'identity', 'user', 'claims', 'exp']);\n  }\n);\n\nexport const makeSelectUserId = () => createSelector(\n  makeSelectAuthObject(),\n  (authObject): number | undefined | null => authObject.getIn(['user', 'user', 'uid']) // CAN BE NULL!!!!\n);\n\nexport const makeSelectUserEmail = () => createSelector(\n  makeSelectAuthObject(),\n  (authObject) => authObject.getIn(['user', 'user', 'email'])\n);\n\nexport const makeSelectUserRole = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): List<AclRoles> => identity != null && identity.getIn(['acl_role_names']) || List<AclRoles>()\n);\n\nexport const makeSelectDisplayLanguageSelector = () => createSelector(\n  makeSelectIsSpecTool(),\n  makeSelectIsAutoquote(),\n  (isSpecTool: boolean, isAq: boolean): boolean => isSpecTool || isAq\n);\n\nexport const makeSelectUserIsAtsUser = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.ATS_USER) !== -1\n);\n\nexport const makeSelectUserIsAiUser = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AI_USER) !== -1\n);\n\nexport const makeSelectUserIsAi2User = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AI_2_USER) !== -1\n);\n\n// Feature-flag role gating the new OpenSearch-backed product search.\nexport const makeSelectUserHasNewSearchRole = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.NEW_SEARCH) !== -1\n);\n\nexport const makeSelectUserIsAiQuotiUser = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AI_QUOTI) !== -1\n);\n\nexport const makeSelectUserIsAnyAiUser = () => createSelector(\n  makeSelectUserIsAiUser(),\n  makeSelectUserIsAi2User(),\n  makeSelectUserIsAiQuotiUser(),\n  (isAiUser: boolean, isAi2User: boolean, isAiQuotiUser: boolean): boolean => isAiUser || isAi2User || isAiQuotiUser\n);\n\nexport const makeSelectUserIsDeveloper = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.DEVELOPER) !== -1\n);\n\nexport const makeSelectUserHasAnyPimRole = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role.indexOf(AclRoles.PIM) !== -1) !== -1\n);\n\nexport const makeSelectUserIsPimAdmin = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.PIM_ADMIN) !== -1\n);\n\nexport const makeSelectUserHasERP = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.ERP) !== -1\n);\n\nexport const makeSelectUserHasFeatAlternatives = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_ALTERNATIVES) !== -1\n);\n\nexport const makeSelectUserHasFeatStockLevel = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_STOCK_LEVEL) !== -1\n);\n\nexport const makeSelectUserHasXrefAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.XREF_ACL) !== -1\n);\n\nexport const makeSelectCanManageXref = () => createSelector(\n  makeSelectUserHasXrefAcl(),\n  (isXrefUser: boolean): boolean => isXrefUser\n);\n\nexport const makeSelectUserHasAttributeManagementAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.ATTRIBUTE_MANAGEMENT_ACL) !== -1\n);\n\nexport const makeSelectCanManageAttributeManagement = () => createSelector(\n  makeSelectUserHasAttributeManagementAcl(),\n  makeSelectSite(),\n  (hasAttributemanagementAcl: boolean, site: SiteName): boolean => hasAttributemanagementAcl && site === SiteName.pim\n);\n\nexport const makeSelectUserHasPimPricingAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.PIM_PRICING_ACL) !== -1\n);\n\nexport const makeSelectUserHasPimPrintDescriptionAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.PIM_PRINT_DESCRIPTION) !== -1\n);\n\nexport const makeSelectUserHasOMShopDrawingAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.OM_SHOP_DRAWING) !== -1\n);\n\nexport const makeSelectCanManagePimPricing = () => createSelector(\n  makeSelectUserHasPimPricingAcl(),\n  (hasPimPricingAcl: boolean): boolean => hasPimPricingAcl\n);\n\nexport const makeSelectUserHasFirmAdmin = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FIRM_ADMIN) !== -1\n);\n\nexport const makeSelectUserOfficeAdmin = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.OFFICE_ADMIN) !== -1\n);\n\nexport const makeSelectUserHasFeatAssignTo = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_ASSIGN_TO) !== -1\n);\n\n// PT-5477 / PT-5486 (2026-08-26): master gate for the new email improvements —\n// the /quote/:id/export page, the Email Settings user page, the firm-level\n// email server setting widget, and the signature editor. When the user does\n// not carry this role, all four features stay hidden and the row-level\n// download menus route to the legacy /preview/:id/:type flow instead.\nexport const makeSelectUserHasFeatEmailImprovements = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_EMAIL_IMPROVEMENTS) !== -1\n);\n\nexport const makeSelectUserHasBuildSizerWaterHeaterAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.BUILDSIZER_WATER_HEATER) !== -1\n);\n\nexport const makeSelectUserHasFirmOrOfficeAdmin = () => createSelector(\n  makeSelectUserHasFirmAdmin(),\n  makeSelectUserOfficeAdmin(),\n  (hasFirmAdmin: boolean, hasOfficeAdmin: boolean): boolean => hasFirmAdmin || hasOfficeAdmin\n);\n\nexport const makeSelectCanManageFolderTemplates = () => createSelector(\n  makeSelectUserHasFirmAdmin(),\n  makeSelectUserOfficeAdmin(),\n  (hasFirmAdmin: boolean, hasOfficeAdmin: boolean): boolean => hasFirmAdmin || hasOfficeAdmin\n);\n\nexport const makeSelectCanAccessPimToolTeamManagementSettings = () => createSelector(\n  makeSelectChildOrParentIsAtsUser(),\n  makeSelectUserHasFirmAdmin(),\n  (isAtsUser: boolean, isFirmAdmin: boolean): boolean => isAtsUser || isFirmAdmin\n);\n\nexport const makeSelectUserIsDatabaseAdmin = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.DATABASE_ADMIN) !== -1\n);\n\nexport const makeSelectHasPublishPermission = () => createSelector(\n  makeSelectUserIsPimAdmin(),\n  (isPimAdmin: boolean): boolean => isPimAdmin\n);\n\nexport const makeSelectUserHasFeatAltPreference = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_ALT_PREFERENCES) !== -1\n);\n\nexport const makeSelectOriginalUserHasFeatAltPreference = () => createSelector(\n  makeSelectOriginalUserRole(),\n  (identity: List<AclRoles>): boolean => identity.findIndex(role => role === AclRoles.FEAT_ALT_PREFERENCES) !== -1\n);\n\nexport const makeSelectParentCanDownloadSpecBooklet = () => createSelector(\n  makeSelectOriginalUserRole(),\n  (identity: List<AclRoles>): boolean => identity.findIndex(role => role === AclRoles.LIXIR_SPEC_BOOKLET) !== -1\n);\nexport const makeSelectCanDownloadSpecBooklet = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.LIXIR_SPEC_BOOKLET) !== -1\n);\nexport const makeSelectChildOrParentCanDownloadSpecBooklet = () => createSelector(\n  makeSelectParentCanDownloadSpecBooklet(),\n  makeSelectCanDownloadSpecBooklet(),\n  (parentCanDownloadSpecBooklet, userCanDownloadSpecBooklet): boolean => parentCanDownloadSpecBooklet || userCanDownloadSpecBooklet\n);\n\nexport const makeSelectUserCanDownloadSpecBooklet = () => createSelector(\n    makeSelectChildOrParentCanDownloadSpecBooklet(),\n    makeSelectConfig(),\n    (childOrParentCanDownloadSpecBooklet, config) => {\n      const apiKey = config.getIn(['atsApiOptions', 'apiKey']);\n      const isLixir = apiKey === LIXIL_SPEC_ID;\n     return childOrParentCanDownloadSpecBooklet && isLixir;\n    }\n);\n\nexport const makeSelectUserHasFeatOptionBasedImages = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_OPTION_BASED_IMAGES) !== -1\n);\n\nexport const makeSelectUserHasFeatOptionBasedCutsheets = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_OPTION_BASED_MANUFACTURER_CUTSHEETS) !== -1\n);\n\nexport const makeSelectUserHasAiCreateXref = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AI_CREATE_XREF) !== -1\n);\n\nexport const makeSelectChildOrParentHasFeatAltPreference = () => createSelector(\n  makeSelectUserHasFeatAltPreference(),\n  makeSelectOriginalUserHasFeatAltPreference(),\n  (useHasRole: boolean, parentHasRole): boolean => useHasRole || parentHasRole\n);\n\nexport const makeSelectUserHasAmpAdminAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_ADMIN) !== -1\n);\n\nexport const makeSelectUserHasAmpAiAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_AI) !== -1\n);\n\nexport const makeSelectUserHasAmpAiAccess = () => createSelector(\n  makeSelectUserHasAmpAdminAcl(),\n  makeSelectUserHasAmpAiAcl(),\n  (useHasAmpAdminAcl: boolean, userHasAmpAiAcl): boolean => useHasAmpAdminAcl || userHasAmpAiAcl\n);\n\n// Billing configuration stands on its own role: the msaccount firm-billing\n// endpoints accept it alone, so granting the section to AMP Admin here would\n// only show a section whose every request comes back 403.\nexport const makeSelectUserHasAmpAiBillingAcl = () => createSelector(\n  makeSelectUserRole(),\n  (roles): boolean => roles.includes(AclRoles.AMP_AI_BILLING)\n);\n\nexport const makeSelectUserHasAmpMergeAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_MERGE) !== -1\n);\n\nexport const makeSelectUserHasAmpMergeAccess = () => createSelector(\n  makeSelectUserHasAmpAdminAcl(),\n  makeSelectUserHasAmpMergeAcl(),\n  (useHasAmpAdminAcl: boolean, userHasAmpMergeAcl): boolean => useHasAmpAdminAcl || userHasAmpMergeAcl\n);\n\nexport const makeSelectUserHasAmpUserAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_USER) !== -1\n);\n\nexport const makeSelectUserHasAmpUserAccess = () => createSelector(\n  makeSelectUserHasAmpAdminAcl(),\n  makeSelectUserHasAmpUserAcl(),\n  (useHasAmpAdminAcl: boolean, userHasAmpUserAcl): boolean => useHasAmpAdminAcl || userHasAmpUserAcl\n);\n\nexport const makeSelectUserHasAmpWidgetAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_WIDGET) !== -1\n);\n\nexport const makeSelectUserHasAmpWidgetAccess = () => createSelector(\n  makeSelectUserHasAmpAdminAcl(),\n  makeSelectUserHasAmpWidgetAcl(),\n  (useHasAmpAdminAcl: boolean, userHasAmpWidgetAcl): boolean => useHasAmpAdminAcl || userHasAmpWidgetAcl\n);\n\nexport const makeSelectUserHasAmpAppLauncherAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.AMP_APP_LAUNCHER) !== -1\n);\n\nexport const makeSelectUserHasAmpAppLauncherAccess = () => createSelector(\n  makeSelectUserHasAmpAppLauncherAcl(),\n  (userHasAmpTokenAcl): boolean => userHasAmpTokenAcl\n);\n\nexport const makeSelectUserHasPimIntegrationRole = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.PIM_INTEGRATION) !== -1\n);\n\n/////////////////////////////////// needs to change to use new selector: makeSelectCanManageAttributeManagement\nexport const makeSelectCanManageAtsAttribute = () => createSelector(\n  makeSelectUserIsAtsUser(),\n  makeSelectUserIsPimAdmin(),\n  (isAtsUser: boolean, isPimAdmin: boolean) => isAtsUser && isPimAdmin\n);\nexport const makeSelectCanManageFirmAttribute = () => createSelector(\n  makeSelectUserIsAtsUser(),\n  makeSelectUserIsPimAdmin(),\n  makeSelectUserFirmId(),\n  (isAtsUser: boolean, isPimAdmin: boolean, firmId: number) => !isAtsUser && isPimAdmin && firmId !== -1\n);\nexport const makeSelectCanManageAttribute = () => createSelector(\n  makeSelectCanManageAtsAttribute(),\n  makeSelectCanManageFirmAttribute(),\n  (canManageAtsAttribute: boolean, canManageFirmAttribute: boolean) => canManageAtsAttribute || canManageFirmAttribute\n);\n////////////////////////////////////////////\n\nexport const makeSelectUserHasMasterTemplate = () => createSelector(\n  makeSelectIdentityObject(),\n  makeSelectAppId(),\n  (identity, appId: string): boolean => identity != null\n    && (\n      identity.getIn(['app_acl_role_names', appId])?.findIndex(role => role === AclRoles.MASTER_TEMPLATE_EDITING) !== -1\n      || identity.getIn(['app_acl_role_names', 'default'])?.findIndex(role => role === AclRoles.MASTER_TEMPLATE_EDITING) !== -1\n    )\n);\n\nexport const makeSelectUserHasCurrencyConversion = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.CURRENCY_CONVERSION) !== -1\n);\n\nexport const makeSelectIsUsingLogInAs = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['originalUser']) != null\n);\n\nexport const makeSelectOriginalUserRole = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): List<AclRoles> => identity != null && identity.getIn(['originalUser', 'acl_role_names']) || List<AclRoles>()\n);\n\nexport const makeSelectOriginalUserIsAtsUser = () => createSelector(\n  makeSelectOriginalUserRole(),\n  (identity: List<AclRoles>): boolean => identity.findIndex(role => role === AclRoles.ATS_USER) !== -1\n);\n\nexport const makeSelectIsSuperFirm = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.get('superFirm')\n);\n\nexport const makeSelectIsChildFirm = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && Boolean(identity.getIn(['parentFirm', 'superFirm']))\n);\n\nexport const makeSelectChildOrParentIsAtsUser = () => createSelector(\n  makeSelectUserIsAtsUser(),\n  makeSelectOriginalUserIsAtsUser(),\n  (userIsAtsUser: boolean, parentIsAtsUser): boolean => userIsAtsUser || parentIsAtsUser\n);\n\nexport const makeSelectChildOrParentHasSectionTemplateRemapAcl = () => createSelector(\n  makeSelectOriginalUserRole(),\n  makeSelectIdentityObject(),\n  (originalIdentity: List<AclRoles>, identity): boolean => (originalIdentity.findIndex(role => role === AclRoles.SECTION_TEMPLATE_REMAP) !== -1) || (identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.SECTION_TEMPLATE_REMAP) !== -1)\n);\n\nexport const makeSelectIsRestrictedOutsideSalesRep = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.RESTRICTED_OUTSIDE_SALESREP) !== -1\n);\n\nexport const makeSelectUserHasQuoteConnectAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.QUOTE_CONNECT) !== -1\n);\n\nexport const makeSelectUserHasQuoteConnectRepAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => QuoteConnectHelp.hasQuoteConnectRepAcl(identity)\n);\n\nexport const makeSelectUserIsQuoteConnectRepLogin = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => QuoteConnectHelp.isQuoteConnectRepLogin(identity)\n);\n\nexport const makeSelectUserHasNuAirSmallIndependentAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.NU_AIR_SMALL_INDEPENDENT) !== -1\n);\n\nexport const makeSelectUserHasNuAirWholesaleAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.NU_AIR_WHOLESALE) !== -1\n);\n\nexport const makeSelectUserHasNuAirMultiplier = () => createSelector(\n  makeSelectUserHasNuAirSmallIndependentAcl(),\n  makeSelectUserHasNuAirWholesaleAcl(),\n  (hasSmallIndependentAcl: boolean, hasNuAirWholesaleAcl: boolean): number => {\n    return (hasNuAirWholesaleAcl && 0.37) || (hasSmallIndependentAcl && 0.52) ||  1;\n  }\n);\n\nexport const makeSelectUserHasSpecAssistAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.SPEC_ASSIST) !== -1\n);\n\nexport const makeSelectUserHasCsi2026Acl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_CSI_2026) !== -1\n);\n\nexport const makeSelectUseSpecAssist = () => createSelector(\n  makeSelectUserHasSpecAssistAcl(),\n  makeSelectIsAtsSpecTool(),\n  (hasSpecAssistAcl: boolean, isAtsSpecTool: boolean): boolean => hasSpecAssistAcl && isAtsSpecTool\n);\n\nexport const makeSelectUserHasSpecMastersAdminAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.SPEC_MASTERS_ADMIN) !== -1\n);\n\nexport const makeSelectUserCanManageMasters = () => createSelector(\n  makeSelectUserIsAtsUser(),\n  makeSelectUserHasFirmAdmin(),\n  makeSelectUserOfficeAdmin(),\n  makeSelectUserHasSpecMastersAdminAcl(),\n  (isAtsUser: boolean, hasFirmAdmin: boolean, isOfficeAdmin: boolean, hasSpecMastersAdminAcl: boolean): boolean => isAtsUser || hasFirmAdmin || isOfficeAdmin || hasSpecMastersAdminAcl\n);\n\nexport const makeSelectUserHasFeatCreateShopDrawingAcl = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): boolean => identity != null && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.FEAT_CREATE_SHOP_DRAWING) !== -1\n);\n\nexport const makeSelectUserOfficeId = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): number => identity != null && identity.getIn(['office_id']) || -1\n);\n\nexport const makeSelectUserFirmId = () => createSelector(\n  makeSelectIdentityObject(),\n  (identity): number => identity != null && identity.getIn(['firm_id']) || -1\n);\n\nexport const makeSelectSite = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('site', DEFAULT_SITE)\n);\n\nexport const makeSelectIsSpecTool = () => createSelector(\n  makeSelectSite(),\n  (site: SiteName): boolean => site === SiteName.spec\n);\n\nexport const makeSelectIsPimTool = () => createSelector(\n  makeSelectSite(),\n  (site: SiteName): boolean => site === SiteName.pim\n);\n\nexport const makeSelectIsAutoquote = () => createSelector(\n  makeSelectSite(),\n  (site: SiteName): boolean => site === SiteName.pt\n);\n\nexport const makeSelectUseUnavailabilityPurchasabilityQuery = (location = null) => createSelector(\n  makeSelectIsSpecTool(),\n  (isSpecTool: boolean) => {\n    let usePurchasability = true;\n    if (!location) {\n      usePurchasability = false;\n    } else {\n      const immuLocation = fromJS(location);\n      if (immuLocation.getIn(['country', 'id']) ?? immuLocation.getIn([0, 'country', 'id'])) {\n        usePurchasability = true;\n      } else {\n        usePurchasability = false;\n      }\n    }\n    return {\n      useUnavailability: isSpecTool,\n      usePurchasability,\n    };\n  }\n);\n\nexport const makeSelectLabel = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('label', DEFAULT_LABEL)\n);\n\nexport const makeSelectInit = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('init', false)\n);\n\nexport const makeSelectEnv = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('env', Map())\n);\n\nexport const makeSelectSpecToolSeriesLinkTemplate = () => createSelector(\n  selectReducerState(),\n  makeSelectLocale(),\n  (state: IMapNonRecursive<IAtsReducerState>, locale: string) => `${state.getIn(['env', 'ENDPOINT_SELF'], window.location.origin)}/${locale}${PRODUCT_SELECTION_PATH}?seriesId=`\n);\n\nexport const makeSelectBradleyCpqAppLink = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['env', 'ENDPOINT_UI_BRADLEY_CPQ']) || ''\n);\n\nexport const makeSelectConfig = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('config') || Map<string, any>()\n);\n\nexport const makeSelectIntegratedSizerConfig = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['integratedAppConfigs', SiteName.sizer]) || Map<string, any>()\n);\n\nexport const makeSelectConfigAtsSvgProps = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'AtsSvgProps'])?.toJS() || {}\n);\n\nexport const makeSelectConfigUiOverrides = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'uiOverrides'])\n);\n\nexport const makeSelectConfigUiOverridesAppBarColor = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'uiOverrides', 'appBarColor'])\n);\n\nexport const makeSelectConfigUiOverridesUseSecondaryForDashboardWidgetIcon = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'uiOverrides', 'useSecondaryForDashboardWidgetIcon'])\n);\n\nexport const makeSelectAppId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'atsApiOptions', 'apiKey']) || ''\n);\n\nexport const makeSelectIsAtsSpecTool = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['config', 'atsApiOptions', 'apiKey']) === SPEC_TOOL_ID\n);\n\nexport const makeSelectRole = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['authentication', server, 'identity', 'role'])\n);\n\nexport const makeSelectUId = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['authentication', server, 'identity', 'user', 'claims', 'identity', 'uid'])\n);\n\nexport const makeSelectRefreshToken = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['authentication', server, 'token', 'refresh_token'])\n);\n\nexport const makeSelectAccessToken = (server = DEFAULT_SERVER) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.getIn(['authentication', server, 'token', 'access_token'])\n);\n\nexport const makeSelectData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('data')\n);\n\nexport const makeSelectDataParams = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('dataParams')\n);\n\nexport const makeSelectDebug = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('debug')\n);\n\nexport const makeSelectBadToken = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('badToken')\n);\n\nexport const makeSelectTemplateTranslationObject = () => createSelector(\n  makeSelectIsAtsSpecTool(),\n  (isAtsSpecTool: boolean) => ({ firm: isAtsSpecTool ? 'ATS' : '', separator: isAtsSpecTool ? ' ' : '' })\n);\n\nexport const makeSelectAmplitudeData = (data = {}) => createSelector(\n  [makeSelectIdentityObject(), makeSelectConfig(), makeSelectSite(), makeSelectAppVersionData(), makeSelectOffices(), makeSelectUserFirm()],\n  (identity = Map() as IMap<Identity>, config = Map(), application, version, offices, firm) => {\n    // const identity = makeSelectIdentityObject()(state) || Map();\n    // const config = makeSelectConfig()(state) || Map();\n    const appId = config.getIn(['atsApiOptions', 'apiKey']);\n    // const application = makeSelectSite()(state);\n    // const version = makeSelectAppVersionData()(state);\n    const office = offices?.get(identity.get('office_id')) || Map();\n\n    const newDate = new Date();\n\n    // Create originalUser data to attach and track Log In As\n    const originalUserData = () => {\n      if (identity.get('originalUser')) {\n        const originalUserEmail = identity.get('originalUser').get('email');\n        const originalUserName = [identity.get('originalUser').get('given_name'), identity.get('originalUser').get('family_name')].filter(x => x).join(' ');\n        const originalUserUid = identity.get('originalUser').get('uid');\n        const originalUser = {\n          originalUserEmail,\n          originalUserName,\n          originalUserUid,\n        };\n        return {\n          originalUser\n        };\n      } else {\n        return {};\n      }\n    };\n\n    // Amplitude needs the date in ISO format for filtering/sorting purposes, so we convert the local time into ISO format\n    const toLocalISO = () => {\n      const offsetMs = newDate.getTimezoneOffset() * 60 * 1000;\n      const msLocal = (newDate as unknown as number) - offsetMs;\n      const dateLocal = new Date(msLocal);\n      const iso = dateLocal.toISOString();\n      const isoLocal = iso.slice(0, 23);\n      return isoLocal;\n    };\n\n    // Default data to attach\n    const defaultData = {\n      application,\n      appId,\n      name: [identity.get('given_name'), identity.get('family_name')].filter(x => x).join(' '),\n      uid: identity.get('uid'),\n      version: version.get('tag'),\n      time: newDate.toISOString(),\n      localTime: toLocalISO(),\n      origin: location.origin,\n      pathname: location.pathname,\n      email: identity.get('email'),\n      username: identity.get('username'),\n      officeId: identity.get('office_id'),\n      officeName: office.get('officeName') ?? '',\n      officeCity: office.getIn(['location', 'city', 'value']) ?? '',\n      officeProvince: office.getIn(['location', 'province', 'value']) ?? '',\n      officeCountry: office.getIn(['location', 'country', 'value']) ?? '',\n      companyName: firm.get('companyName') ?? '',\n      companyAltName: firm.get('companyAltName') ?? ''\n    };\n\n    const amplitudeData = (_data) => {\n      return {\n        ..._data,\n        ...defaultData,\n        ...originalUserData(),\n        isGuestUser: application === SiteName.spec ? !identity.get('uid') : undefined,\n      };\n    };\n\n    return amplitudeData(data);\n  }\n);\n\nexport const makeSelectDomain = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('domain')\n);\n\nexport const makeSelectUngatedCurrency = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAtsReducerState>) => state.get('ungatedCurrency')\n);\n\nexport const makeSelectIsVerifyingUser = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAtsReducerState>) => state.get('isVerifyingUser')\n);\nexport default {\n  selectReducerState,\n};\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List,\n  Map,\n  OrderedSet,\n} from 'immutable';\nimport {\n  Contact,\n  User,\n  Collaborator,\n  Firm,\n  Partnership,\n  Office,\n  Filter,\n  OpportunityGroup,\n  ProjectPhase,\n  OpportunityLabel,\n  OpportunityStatus,\n  Option,\n  SavedFilter, ListItem, BrandTag, MasterFormatRoot,\n  AclItem,\n} from '../../models';\nimport Preferences, {\n  PreferenceType,\n} from '../../models/Preferences';\nimport Manufacturer from '../../models/Manufacturer';\nimport Category from '../../models/Category';\nimport Discount from '../../models/Discount';\nimport { CustomerDiscount } from '../../components/UserContactDrawerDetailsContactEdit';\nimport VisibilityListItem from '../../models/VisibilityListItem';\nimport Region from '../../models/Region';\nimport { FormErrors } from 'redux-form';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport AttributeTag from '../../models/AttributeTag';\nimport ManufacturerPreference from '../../models/ManufacturerPreference';\nimport { ProjectVisibility } from './constants';\nimport ManufacturerRanking from '../../models/ManufacturerRanking';\nimport {SearchSetting} from './reducer';\nimport File from '../../models/File';\nimport { IExcelColumn } from '../../containers/QuoteExcelColumnPreference/Component';\nimport { IQuoteAutoSavePreference, IQuoteDiscountListItem } from './types';\nexport default {};\n\n\nexport enum AccountActionTypes {\n  GET_CONTACTS_SUCCEEDED = 'GET_CONTACTS_SUCCEEDED',\n  GET_CONTACTS_FAIL = 'GET_CONTACTS_FAIL',\n  GET_CONTACTS = 'GET_CONTACTS',\n  GET_CONTACT_BY_ID = 'GET_CONTACT_BY_ID',\n  DELETE_CONTACT_BY_ID = 'DELETE_CONTACT_BY_ID',\n  DELETE_CONTACT_BY_ID_SUCCEEDED = 'DELETE_CONTACT_BY_ID_SUCCEEDED',\n  DELETE_OFFICE_BY_ID = 'DELETE_OFFICE_BY_ID',\n  DELETE_OFFICE_BY_ID_SUCCEEDED = 'DELETE_OFFICE_BY_ID_SUCCEEDED',\n  ADD_CONTACT = 'ADD_CONTACT',\n  EDIT_CONTACT = 'EDIT_CONTACT',\n  SELECT_ACCOUNT_CONTACT = 'SELECT_ACCOUNT_CONTACT',\n  DELETE_CONTACT = 'DELETE_CONTACT',\n  GET_LOG_IN_AS_USERS = 'GET_LOG_IN_AS_USERS',\n  GET_LOG_IN_AS_USERS_SUCCEEDED = 'GET_LOG_IN_AS_USERS_SUCCEEDED',\n  SET_LOG_IN_AS_USERS = 'SET_LOG_IN_AS_USERS',\n  SET_LOG_IN_AS_USERS_IS_SEARCHING = 'SET_LOG_IN_AS_USERS_IS_SEARCHING',\n  GET_COLLABORATORS = 'GET_COLLABORATORS',\n  GET_COLLABORATORS_SUCCEEDED = 'GET_COLLABORATORS_SUCCEEDED',\n  GET_FIRM_COLLABORATORS_SUCCEEDED = 'GET_FIRM_COLLABORATORS_SUCCEEDED',\n  GET_NON_FIRM_COLLABORATORS_SUCCEEDED = 'GET_NON_FIRM_COLLABORATORS_SUCCEEDED',\n  ADD_COLLABORATOR = 'ADD_COLLABORATOR',\n  GET_PARTNERSHIPS = 'GET_PARTNERSHIPS',\n  GET_PARTNERSHIPS_SUCCEEDED = 'GET_PARTNERSHIPS_SUCCEEDED',\n  SET_PARTNERSHIPS = 'SET_PARTNERSHIPS',\n  SET_PARTNERSHIPS_SUCCEEDED = 'SET_PARTNERSHIPS_SUCCEEDED',\n  GET_OFFICE_BY_ID = 'GET_OFFICE_BY_ID',\n  GET_OFFICE_BY_ID_SUCCEEDED = 'GET_OFFICE_BY_ID_SUCCEEDED',\n  IS_FETCHING_FIRM_BY_ID = 'IS_FETCHING_FIRM_BY_ID',\n  GET_FIRM_BY_ID = 'GET_FIRM_BY_ID',\n  GET_FIRM_BY_ID_SUCCEEDED = 'GET_FIRM_BY_ID_SUCCEEDED',\n  GET_USER_FIRM = 'GET_USER_FIRM',\n  GET_USER_FIRM_SUCCEEDED = 'GET_USER_FIRM_SUCCEEDED',\n  GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN = 'GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN',\n  GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN_SUCCEEDED = 'GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN_SUCCEEDED',\n  CREATE_FIRM = 'CREATE_FIRM',\n  UPDATE_FIRM_BY_ID = 'UPDATE_FIRM_BY_ID',\n  UPDATE_FIRM_BY_ID_SUCCEEDED = 'UPDATE_FIRM_BY_ID_SUCCEEDED',\n  GET_OPPORTUNITY_GROUPS = 'GET_OPPORTUNITY_GROUPS',\n  GET_OPPORTUNITY_GROUPS_SUCCEEDED = 'GET_OPPORTUNITY_GROUP_SUCCEEDED',\n  SEARCH_QUOTE_OFFICES = 'SEARCH_QUOTE_OFFICES',\n  SET_IS_SEARCHING_ALL_USERS = 'SET_IS_SEARCHING_ALL_USERS',\n  SEARCH_ALL_USERS = 'SEARCH_ALL_USERS',\n  SEARCH_ALL_USERS_SUCCEEDED = 'SEARCH_ALL_USERS_SUCCEEDED',\n  SEARCH_USERS = 'SEARCH_USERS',\n  SEARCH_USERS_QUICK = 'SEARCH_USERS_QUICK',\n  SEARCH_QUOTE_USERS = 'SEARCH_QUOTE_USERS',\n  SEARCH_USERS_QUICK_BY_OFFICE_ID = 'SEARCH_USERS_QUICK_BY_OFFICE_ID',\n  SEARCH_USERS_BY_USER_ID = 'SEARCH_USERS_BY_USER_ID',\n  SEARCH_USERS_BY_USER_ID_FINISHED = 'SEARCH_USERS_BY_USER_ID_FINISHED',\n  SEARCH_USERS_BY_OFFICE_ID = 'SEARCH_USERS_BY_OFFICE_ID',\n  SEARCH_USERS_BY_OFFICE_ID_FINISHED = 'SEARCH_USERS_BY_OFFICE_ID_FINISHED',\n  SEARCH_USERS_FINISHED = 'SEARCH_USERS_FINISHED',\n  GET_USERS_SUCCEEDED = 'GET_USERS_SUCCEEDED',\n  SELECT_USER = 'SELECT_USER',\n  GET_USER_BY_ID = 'GET_USER_BY_ID',\n  GET_USER_BY_ID_SUCCEEDED = 'GET_USER_BY_ID_SUCCEEDED',\n  GET_COLLABORATORS_OFFICE = 'GET_COLLABORATORS_OFFICE',\n  GET_COLLABORATORS_OFFICE_SUCCEEDED = 'GET_COLLABORATORS_OFFICE_SUCCEEDED',\n  SET_IS_SEARCHING_ALL_FIRMS = 'SET_IS_SEARCHING_ALL_FIRMS',\n  SEARCH_ALL_FIRMS = 'SEARCH_ALL_FIRMS',\n  SEARCH_ALL_FIRMS_SUCCEEDED = 'SEARCH_ALL_FIRMS_SUCCEEDED',\n  DELETE_FIRM_BY_ID = 'DELETE_FIRM_BY_ID',\n  DELETE_FIRM_BY_ID_THEN_SEARCH_ALL_FIRMS = 'DELETE_FIRM_BY_ID_THEN_SEARCH_ALL_FIRMS',\n  GET_OFFICES = 'GET_OFFICES',\n  GET_OFFICES_SUCCEEDED = 'GET_OFFICES_SUCCEEDED',\n  GET_OFFICES_BY_FIRM_ID = 'GET_OFFICES_BY_FIRM_ID',\n  GET_OFFICES_BY_FIRM_ID_SUCCEEDED = 'GET_OFFICES_BY_FIRM_ID_SUCCEEDED',\n  GET_QUOTE_OFFICES_BY_FIRM = 'GET_QUOTE_OFFICES_BY_FIRM',\n  GET_QUOTE_OFFICES_BY_FIRM_SUCCEEDED = 'GET_QUOTE_OFFICES_BY_FIRM_SUCCEEDED',\n  SELECT_OFFICE = 'SELECT_OFFICE',\n  SELECT_TEAM_ORGANIZATION_DRAWER_OFFICE = 'SELECT_TEAM_ORGANIZATION_DRAWER_OFFICE',\n  SELECT_TEAM_ORGANIZATION_FIRM = 'SELECT_TEAM_ORGANIZATION_FIRM',\n  SELECT_TEAM_ORGANIZATION_OFFICE = 'SELECT_TEAM_ORGANIZATION_OFFICE',\n  SELECT_TEAM_ORGANIZATION_USER = 'SELECT_TEAM_ORGANIZATION_USER',\n  GET_FIRMS = 'GET_FIRMS',\n  GET_FIRMS_SUCCEEDED = 'GET_FIRMS_SUCCEEDED',\n  SET_SELECTED_FIRM_ID = 'SET_SELECTED_FIRM_ID',\n  GET_PREFERENCES = 'GET_PREFERENCES',\n  GET_OPPORTUNITY_STATUSES_PREFERENCES = 'GET_OPPORTUNITY_STATUSES_PREFERENCES',\n  GET_OPPORTUNITY_LABELS = 'GET_OPPORTUNITY_LABELS',\n  GET_OPPORTUNITY_STATUSES = 'GET_OPPORTUNITY_STATUSES',\n  GET_OPPORTUNITY_LABELS_SUCCEEDED = 'GET_OPPORTUNITY_LABELS_SUCCEEDED',\n  GET_OPPORTUNITY_STATUSES_SUCCEEDED = 'GET_OPPORTUNITY_STATUSES_SUCCEEDED',\n  GET_PREFERENCES_SUCCEEDED = 'GET_PREFERENCES_SUCCEEDED',\n  SET_PREFERENCES = 'SET_PREFERENCES',\n  EDIT_PREFERENCES = 'EDIT_PREFERENCES',\n  CREATE_OFFICE = 'CREATE_OFFICE',\n  CREATE_OFFICE_FAILED = 'CREATE_OFFICE_FAILED',\n  UPDATE_OFFICE_BY_ID = 'UPDATE_OFFICE_BY_ID',\n  UPDATE_OFFICE_BY_ID_FAILED = 'UPDATE_OFFICE_BY_ID_FAILED',\n  CREATE_USER = 'CREATE_USER',\n  CREATE_USER_FAILED = 'CREATE_USER_FAILED',\n  UPDATE_USER_BY_ID = 'UPDATE_USER_BY_ID',\n  UPDATE_USER_BY_ID_SUCCEEDED = 'UPDATE_USER_BY_ID_SUCCEEDED',\n  UPDATE_USER_BY_ID_FAILED = 'UPDATE_USER_BY_ID_FAILED',\n  MOVE_USER_BY_ID = 'MOVE_USER_BY_ID',\n  GET_BRAND_REP_CATEGORIES = 'GET_BRAND_REP_CATEGORIES',\n  GET_CATEGORIES = 'GET_CATEGORIES',\n  GET_CATEGORIES_SUCCEEDED = 'GET_CATEGORIES_SUCCEEDED',\n  GET_NOTE_CREATORS = 'GET_NOTE_CREATORS',\n  GET_NOTE_CREATORS_SUCCEEDED = 'GET_NOTE_CREATORS_SUCCEEDED',\n  GET_MANUFACTURERS = 'GET_MANUFACTURERS',\n  GET_MANUFACTURERS_SUCCEEDED = 'GET_MANUFACTURERS_SUCCEEDED',\n  SET_SELECTED_MANUFACTURER_ID = 'SET_SELECTED_MANUFACTURER_ID',\n  SET_SELECTED_CATEGORY_ID = 'SET_SELECTED_CATEGORY_ID',\n  GET_USER_BY_ID_MULTI_SUCCEEDED = 'GET_USER_BY_ID_MULTI_SUCCEEDED',\n  GET_DISCOUNTS_FOR_CUSTOMER_ID = 'GET_DISCOUNTS_FOR_CUSTOMER_ID',\n  GET_DISCOUNTS_FOR_CUSTOMER_ID_FAILED = 'GET_DISCOUNTS_FOR_CUSTOMER_ID_FAILED',\n  GET_DISCOUNTS_FOR_CUSTOMER_ID_SUCCEEDED = 'GET_DISCOUNTS_FOR_CUSTOMER_ID_SUCCEEDED',\n  GET_DISCOUNTS_FOR_OFFICE_ID = 'GET_DISCOUNTS_FOR_OFFICE_ID',\n  GET_DISCOUNTS_FOR_OFFICE_ID_FAILED = 'GET_DISCOUNTS_FOR_OFFICE_ID_FAILED',\n  GET_DISCOUNTS_FOR_OFFICE_ID_SUCCEEDED = 'GET_DISCOUNTS_FOR_OFFICE_ID_SUCCEEDED',\n  GET_VISIBILITY_LIST = 'GET_VISIBILITY_LIST',\n  GET_VISIBILITY_LIST_SUCCEEDED = 'GET_VISIBILITY_LIST_SUCCEEDED',\n  ADD_CUSTOMER_DISCOUNT = 'ADD_CUSTOMER_DISCOUNT',\n  EDIT_CUSTOMER_DISCOUNT = 'EDIT_CUSTOMER_DISCOUNT',\n  DELETE_CUSTOMER_DISCOUNT = 'DELETE_CUSTOMER_DISCOUNT',\n  RESET_PREFERENCE = 'RESET_PREFERENCE',\n  RESET_PREFERENCE_SUCCEEDED = 'RESET_PREFERENCE_SUCCEEDED',\n  DELETE_USER_BY_ID = 'DELETE_USER_BY_ID',\n  DELETE_USER_BY_ID_SUCCEEDED = 'DELETE_USER_BY_ID_SUCCEEDED',\n  DELETE_USER_BY_ID_AND_SEARCH_ALL_USERS = 'DELETE_USER_BY_ID_AND_SEARCH_ALL_USERS',\n  SEARCH_CONTACTS = 'SEARCH_CONTACTS',\n  SEARCH_CONTACTS_SUCCEEDED = 'SEARCH_CONTACTS_SUCCEEDED',\n  SEARCH_CONTACTS_FIND_INDEX = 'SEARCH_CONTACTS_FIND_INDEX',\n  SET_CONTACTS_LOADING = 'SET_CONTACTS_LOADING',\n  DELETE_CONTACT_AND_SEARCH_CONTACTS = 'DELETE_CONTACT_AND_SEARCH_CONTACTS',\n  GET_USERS_LIST = 'GET_USERS_LIST',\n  SEARCH_CONTACTS_FIND_INDEX_SUCCEEDED = 'SEARCH_CONTACTS_FIND_INDEX_SUCCEEDED',\n  CLEAR_USERS = 'CLEAR_USERS',\n  VERIFY_PASSWORD = 'VERIFY_PASSWORD',\n  SET_PASSWORD = 'SET_PASSWORD',\n  SET_PASSWORD_SUCCESS = 'SET_PASSWORD_SUCCESS',\n  SET_PASSWORD_FAIL = 'SET_PASSWORD_FAIL',\n  GET_R_TYPE_REGIONS = 'GET_R_TYPE_REGIONS',\n  GET_R_TYPE_REGIONS_SUCCEEDED = 'GET_R_TYPE_REGIONS_SUCCEEDED',\n  SET_LOGGED_IN_USER_OFFICE_ID = 'SET_LOGGED_IN_USER_OFFICE_ID',\n  SEARCH_CONTACTS_BY_SEARCH_TERM = 'SEARCH_CONTACTS_BY_SEARCH_TERM',\n  SEARCH_CONTACTS_BY_SEARCH_TERM_SUCCEEDED = 'SEARCH_CONTACTS_BY_SEARCH_TERM_SUCCEEDED',\n  RESET_SEARCH_CONTACTS_BY_SEARCH_TERM = 'RESET_SEARCH_CONTACTS_BY_SEARCH_TERM',\n  CREATE_FILTER = 'CREATE_FILTER',\n  CREATE_FILTER_SUCCEEDED = 'CREATE_FILTER_SUCCEEDED',\n  GET_FILTERS_BY_TYPE = 'GET_FILTERS_BY_TYPE',\n  GET_FILTERS_BY_TYPE_SUCCEEDED = 'GET_FILTERS_BY_TYPE_SUCCEEDED',\n  DELETE_FILTER_BY_ID = 'DELETE_FILTER_BY_ID',\n  DELETE_FILTER_BY_ID_SUCCEEDED = 'DELETE_FILTER_BY_ID_SUCCEEDED',\n  UPDATE_FILTER_BY_ID = 'UPDATE_FILTER_BY_ID',\n  UPDATE_FILTER_BY_ID_SUCCEEDED = 'UPDATE_FILTER_BY_ID_SUCCEEDED',\n  RESET_FILTERS_AND_COLUMNS = 'RESET_FILTERS_AND_COLUMNS',\n  TRACK_FORM_SUBMIT_FAILED = 'TRACK_FORM_SUBMIT_FAILED',\n  TRACK_FORM_SUBMIT_SUCCEEDED = 'TRACK_FORM_SUBMIT_SUCCEEDED',\n  SEARCH_DIVISIONS = 'SEARCH_DIVISIONS',\n  SEARCH_CATEGORIES = 'TAKEOFF_OPTIONS_SEARCH_CATEGORIES',\n  SEARCH_MANUFACTURER = 'SEARCH_MANUFACTURER',\n  SEARCH_PRODUCT_CATEGORIES_SUCCESS = 'SEARCH_PRODUCT_CATEGORIES_SUCCESS',\n  SEARCH_DIVISIONS_SUCCESS = 'SEARCH_DIVISIONS_SUCCESS',\n  SEARCH_MANUFACTURERS_SUCCESS = 'SEARCH_MANUFACTURERS_SUCCESS',\n  GET_USER_PREFERENCE_OVER_TAKE_OFF = 'GET_USER_PREFERENCE_OVER_TAKE_OFF',\n  GET_USER_PREFERENCE_OVER_TAKE_OFF_SUCCESS = 'GET_USER_PREFERENCE_OVER_TAKE_OFF_SUCCESS',\n  UPDATE_USER_PREFERENCE = 'UPDATE_USER_PREFERENCE',\n  UPDATE_USER_PREFERENCE_SUCCESS = 'UPDATE_USER_PREFERENCE_SUCCESS',\n  SAVE_FAVOURITE_CATEGORY = 'SAVE_FAVOURITE_CATEGORY',\n  DELETE_FAVOURITE_CATEGORY = 'DELETE_FAVOURITE_CATEGORY',\n  PATCH_UPDATE_FIRM_BY_ID = 'PATCH_UPDATE_FIRM_BY_ID',\n  PATCH_UPDATE_FIRM_BY_ID_LOADING = 'PATCH_UPDATE_FIRM_BY_ID_LOADING',\n  PATCH_UPDATE_FIRM_BY_ID_SUCCESS = 'PATCH_UPDATE_FIRM_BY_ID_SUCCESS',\n  GET_BRAND_REP_SUCCEEDED = 'GET_BRAND_REP_SUCCEEDED',\n  GET_BRAND_REP = 'GET_BRAND_REP',\n  GET_BRAND_REP_FAILED = 'GET_BRAND_REP_FAILED',\n  EXPORT_USERS = 'EXPORT_USERS',\n  GET_LOGGED_IN_USER_DATA = 'GET_LOGGED_IN_USER_DATA',\n  GET_LOGGED_IN_USER_DATA_SUCCEEDED = 'GET_LOGGED_IN_USER_DATA_SUCCEEDED',\n\n  // alternative preferences\n  GET_MANUFACTURER_PREFERENCES = 'GET_MANUFACTURER_PREFERENCES',\n  GET_MANUFACTURER_PREFERENCES_SUCCEEDED = 'GET_MANUFACTURER_PREFERENCES_SUCCEEDED',\n  GET_MANUFACTURER_PREFERENCES_FAILED = 'GET_MANUFACTURER_PREFERENCES_FAILED',\n  CREATE_MANUFACTURER_PREFERENCE = 'CREATE_MANUFACTURER_PREFERENCE',\n  CREATE_MANUFACTURER_PREFERENCE_SUCCEEDED = 'CREATE_MANUFACTURER_PREFERENCE_SUCCEEDED',\n  CREATE_MANUFACTURER_PREFERENCE_FAILED = 'CREATE_MANUFACTURER_PREFERENCE_FAILED',\n  UPDATE_MANUFACTURER_PREFERENCE = 'UPDATE_MANUFACTURER_PREFERENCE',\n  UPDATE_MANUFACTURER_PREFERENCE_SUCCEEDED = 'UPDATE_MANUFACTURER_PREFERENCES_SUCCEEDED',\n  UPDATE_MANUFACTURER_PREFERENCE_FAILED = 'UPDATE_MANUFACTURER_PREFERENCES_FAILED',\n  DELETE_MANUFACTURER_PREFERENCE = 'DELETE_MANUFACTURER_PREFERENCE',\n  DELETE_MANUFACTURER_PREFERENCE_SUCCEEDED = 'DELETE_MANUFACTURER_PREFERENCE_SUCCEEDED',\n  DELETE_MANUFACTURER_PREFERENCE_FAILED = 'DELETE_MANUFACTURER_PREFERENCE_FAILED',\n\n  // rankings\n  GET_MANUFACTURER_RANKINGS = 'GET_MANUFACTURER_RANKINGS',\n  GET_MANUFACTURER_RANKINGS_SUCCEEDED = 'GET_MANUFACTURER_RANKINGS_SUCCEEDED',\n  GET_MANUFACTURER_RANKINGS_FAILED = 'GET_MANUFACTURER_RANKINGS_FAILED',\n  CREATE_MANUFACTURER_RANKING = 'CREATE_MANUFACTURER_RANKING',\n  CREATE_MANUFACTURER_RANKING_SUCCEEDED = 'CREATE_MANUFACTURER_RANKING_SUCCEEDED',\n  CREATE_MANUFACTURER_RANKING_FAILED = 'CREATE_MANUFACTURER_RANKING_FAILED',\n  UPDATE_MANUFACTURER_RANKING = 'UPDATE_MANUFACTURER_RANKING',\n  UPDATE_MANUFACTURER_RANKING_SUCCEEDED = 'UPDATE_MANUFACTURER_RANKING_SUCCEEDED',\n  UPDATE_MANUFACTURER_RANKING_FAILED = 'UPDATE_MANUFACTURER_RANKING_FAILED',\n  DELETE_MANUFACTURER_RANKING = 'DELETE_MANUFACTURER_RANKING',\n  DELETE_MANUFACTURER_RANKING_SUCCEEDED = 'DELETE_MANUFACTURER_RANKING_SUCCEEDED',\n  DELETE_MANUFACTURER_RANKING_FAILED = 'DELETE_MANUFACTURER_RANKING_FAILED',\n\n  // search mode\n  GET_SEARCH_MODE = 'GET_SEARCH_MODE',\n  GET_SEARCH_MODE_SUCCEED = 'GET_SEARCH_MODE_SUCCEED',\n  SET_SEARCH_MODE = 'SET_SEARCH_MODE',\n  SET_SEARCH_MODE_SUCCEED = 'SET_SEARCH_MODE_SUCCEED',\n\n  // attachment folder template\n  GET_ATTACHMENT_FOLDER_TEMPLATES = 'GET_ATTACHMENT_FOLDER_TEMPLATES',\n  SET_IS_SEARCHING_FOLDER_TEMPLATES = 'SET_IS_SEARCHING_FOLDER_TEMPLATES',\n  GET_ATTACHMENT_FOLDER_TEMPLATES_SUCCEEDED = 'GET_ATTACHMENT_FOLDER_TEMPLATES_SUCCEEDED',\n  GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS = 'GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS',\n  GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS_SUCCEEDED = 'GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS_SUCCEEDED',\n  CREATE_ATTACHMENT_FOLDER_TEMPLATE = 'CREATE_ATTACHMENT_FOLDER_TEMPLATE',\n  SET_SELECTED_ATTACHMENT_FOLDER_TEMPLATE_ID = 'SET_SELECTED_ATTACHMENT_FOLDER_TEMPLATE_ID',\n  UPDATE_ATTACHMENT_FOLDER_TEMPLATE = 'UPDATE_ATTACHMENT_FOLDER_TEMPLATE',\n  CREATE_TEMPLATE_FOLDER = 'CREATE_TEMPLATE_FOLDER',\n  UPDATE_TEMPLATE_FOLDER = 'UPDATE_TEMPLATE_FOLDER',\n  DELETE_TEMPLATE_FOLDER = 'DELETE_TEMPLATE_FOLDER',\n  SET_USER_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE = 'SET_USER_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE',\n  SET_FIRM_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE = 'SET_FIRM_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE',\n  GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE = 'GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE',\n  GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE_SUCCEEDED = 'GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE_SUCCEEDED',\n  GET_DEFAULT_CUSTOM_EMAIL = 'GET_DEFAULT_CUSTOM_EMAIL',\n  GET_DEFAULT_CUSTOM_EMAIL_SUCCEED = 'GET_DEFAULT_CUSTOM_EMAIL_SUCCEED',\n  GET_DEFAULT_CUSTOM_EMAIL_FAILED = 'GET_DEFAULT_CUSTOM_EMAIL_FAILED',\n  SET_DEFAULT_CUSTOM_EMAIL = 'SET_DEFAULT_CUSTOM_EMAIL',\n  SET_USE_DEFAULT_CUSTOM_EMAIL = 'SET_USE_DEFAULT_CUSTOM_EMAIL',\n\n  // acl related\n  SET_IS_GETTING_APPS = 'SET_IS_GETTING_APPS',\n  GET_APPS = 'GET_APPS',\n  GET_APPS_SUCCEEDED = 'GET_APPS_SUCCEEDED',\n  SET_IS_GETTING_ACL_ROLES = 'SET_IS_GETTING_ACL_ROLES',\n  GET_ACL_ROLES = 'GET_ACL_ROLES',\n  GET_ACL_ROLES_SUCCEEDED = 'GET_ACL_ROLES_SUCCEEDED',\n  SET_IS_ADDING_ACL_ROLE = 'SET_IS_ADDING_ACL_ROLE',\n  ADD_ACL_ROLE = 'ADD_ACL_ROLE',\n  ADD_ACL_ROLE_SUCCEEDED = 'ADD_ACL_ROLE_SUCCEEDED',\n  SET_IS_DELETING_ACL_ROLE = 'SET_IS_DELETING_ACL_ROLE',\n  DELETE_ACL_ROLE = 'DELETE_ACL_ROLE',\n  DELETE_ACL_ROLE_SUCCEEDED = 'DELETE_ACL_ROLE_SUCCEEDED',\n\n  // brand tag related\n  GET_OFFICE_BRAND_TAGS = 'GET_OFFICE_BRAND_TAGS',\n  GET_OFFICE_BRAND_TAGS_SUCCEEDED = 'GET_OFFICE_BRAND_TAGS_SUCCEEDED',\n  SET_IS_GETTING_OFFICE_BRAND_TAGS = 'SET_IS_GETTING_OFFICE_BRAND_TAGS',\n  DELETE_OFFICE_FROM_FIRM_BRAND_TAGS = 'DELETE_OFFICE_FROM_FIRM_BRAND_TAGS',\n  GET_FIRM_BRAND_TAGS = 'GET_FIRM_BRAND_TAGS',\n  GET_FIRM_BRAND_TAGS_SUCCEEDED = 'GET_FIRM_BRAND_TAGS_SUCCEEDED',\n  SET_IS_GETTING_FIRM_BRAND_TAGS = 'SET_IS_GETTING_FIRM_BRAND_TAGS',\n  DELETE_BRAND_TAGS_BY_ID = 'DELETE_BRAND_TAGS_BY_ID',\n  ADD_BRAND_TAGS = 'ADD_BRAND_TAGS',\n  GET_MASTER_FORMAT_ROOTS = 'GET_MASTER_FORMAT_ROOTS',\n  GET_MASTER_FORMAT_ROOTS_SUCCEEDED = 'GET_MASTER_FORMAT_ROOTS_SUCCEEDED',\n\n  // upload users\n  BULK_UPLOAD_USERS = 'BULK_UPLOAD_USERS',\n  SET_UPLOAD_USERS_PROGRESS = 'SET_UPLOAD_USERS_PROGRESS',\n  // auto track project setting\n  GET_AUTO_TRACK_PROJECT_SETTING = 'GET_AUTO_TRACK_PROJECT_SETTING',\n  GET_AUTO_TRACK_PROJECT_SETTING_SUCCEEDED = 'GET_AUTO_TRACK_PROJECT_SETTING_SUCCEEDED',\n  SET_IS_GETTING_AUTO_TRACK_PROJECT_SETTING = 'SET_IS_GETTING_AUTO_TRACK_PROJECT_SETTING',\n\n  // customer discount setting\n  GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING = 'GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING',\n  GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING_SUCCEEDED = 'GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING_SUCCEEDED',\n  SET_IS_GETTING_CUSTOMER_DISCOUNT_VISIBILITY_SETTING = 'SET_IS_GETTING_CUSTOMER_DISCOUNT_VISIBILITY_SETTING',\n\n  // quote excel column preferences setting\n  GET_QUOTE_EXCEL_COLUMN_PREFERENCES = 'GET_QUOTE_EXCEL_COLUMN_PREFERENCES',\n  GET_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED = 'GET_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED',\n  SET_IS_GETTING_QUOTE_EXCEL_COLUMN_PREFERENCES = 'SET_IS_GETTING_QUOTE_EXCEL_COLUMN_PREFERENCES',\n  UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES = 'UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES',\n  UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED = 'UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED',\n  SET_IS_UPDATING_QUOTE_EXCEL_COLUMN_PREFERENCES = 'SET_IS_UPDATING_QUOTE_EXCEL_COLUMN_PREFERENCES',\n\n  // auto take-off preference setting\n  GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING = 'GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING',\n  GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING_SUCCEEDED = 'GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING_SUCCEEDED',\n  SET_IS_GETTING_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING = 'SET_IS_GETTING_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING',\n\n  // Notification Preferences preference setting\n  GET_VENDOR_QUOTATION_NOTIFICATIONS = 'GET_VENDOR_QUOTATION_NOTIFICATIONS',\n  GET_VENDOR_QUOTATION_NOTIFICATIONS_SUCCEEDED = 'GET_VENDOR_QUOTATION_NOTIFICATIONS_SUCCEEDED',\n  SET_IS_GETTING_VENDOR_QUOTATION_NOTIFICATIONS = 'SET_IS_GETTING_VENDOR_QUOTATION_NOTIFICATIONS',\n  GET_VENDOR_QUOTATION_MY_LOGO = 'GET_VENDOR_QUOTATION_MY_LOGO',\n  GET_VENDOR_QUOTATION_MY_LOGO_SUCCEEDED = 'GET_VENDOR_QUOTATION_MY_LOGO_SUCCEEDED',\n  SET_IS_GETTING_VENDOR_QUOTATION_MY_LOGO = 'SET_IS_GETTING_VENDOR_QUOTATION_MY_LOGO',\n  GET_VENDOR_QUOTATION_BID_EMAIL = 'GET_VENDOR_QUOTATION_BID_EMAIL',\n  GET_VENDOR_QUOTATION_BID_EMAIL_SUCCEEDED = 'GET_VENDOR_QUOTATION_BID_EMAIL_SUCCEEDED',\n  SET_IS_GETTING_VENDOR_QUOTATION_BID_EMAIL = 'SET_IS_GETTING_VENDOR_QUOTATION_BID_EMAIL',\n\n  // discount priority setting\n  GET_DISCOUNT_PRIORITY = 'GET_DISCOUNT_PRIORITY',\n  GET_DISCOUNT_PRIORITY_SUCCEEDED = 'GET_DISCOUNT_PRIORITY_SUCCEEDED',\n\n  // default quote charge/discount/tax list setting\n  GET_QUOTE_DISCOUNT_LIST = 'GET_QUOTE_DISCOUNT_LIST',\n  GET_QUOTE_DISCOUNT_LIST_SUCCEEDED = 'GET_QUOTE_DISCOUNT_LIST_SUCCEEDED',\n\n  // project visibility setting\n  GET_DEFAULT_PROJECT_VISIBILITY = 'GET_DEFAULT_PROJECT_VISIBILITY',\n  GET_DEFAULT_PROJECT_VISIBILITY_SUCCEEDED = 'GET_DEFAULT_PROJECT_VISIBILITY_SUCCEEDED',\n  SET_DEFAULT_PROJECT_VISIBILITY = 'SET_DEFAULT_PROJECT_VISIBILITY',\n\n  // manufacturer discounts\n  SEARCH_MANUFACTURER_DISCOUNTS = 'SEARCH_MANUFACTURER_DISCOUNTS',\n  SET_IS_SEARCHING_MANUFACTURER_DISCOUNTS = 'SET_IS_SEARCHING_MANUFACTURER_DISCOUNTS',\n  SEARCH_MANUFACTURER_DISCOUNTS_SUCCEEDED = 'SEARCH_MANUFACTURER_DISCOUNTS_SUCCEEDED',\n  POTENTIALLY_FETCH_MANUFACTURER_DISCOUNTS_AND_PRIORITY = 'POTENTIALLY_FETCH_MANUFACTURER_DISCOUNTS_AND_PRIORITY',\n\n  // firm email setting\n  GET_FIRM_EMAIL_SETTING = 'GET_FIRM_EMAIL_SETTING',\n  GET_FIRM_EMAIL_SETTING_SUCCEEDED = 'GET_FIRM_EMAIL_SETTING_SUCCEEDED',\n\n  // shop drawing color setting\n  GET_SHOP_DRAWING_COLOR = 'GET_SHOP_DRAWING_COLOR',\n  GET_SHOP_DRAWING_COLOR_SUCCEEDED = 'GET_SHOP_DRAWING_COLOR_SUCCEEDED',\n\n  // quote auto save preference\n  GET_QUOTE_AUTO_SAVE_PREFERENCE = 'GET_QUOTE_AUTO_SAVE_PREFERENCE',\n  GET_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED = 'GET_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED',\n  UPDATE_QUOTE_AUTO_SAVE_PREFERENCE = 'UPDATE_QUOTE_AUTO_SAVE_PREFERENCE',\n  UPDATE_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED = 'UPDATE_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED',\n}\n\nexport class GetQuoteAutoSavePreferenceAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_AUTO_SAVE_PREFERENCE;\n}\n\nexport class GetQuoteAutoSavePreferenceSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED;\n  constructor(\n    public payload: {\n      quoteAutoSavePreference: IMap<IQuoteAutoSavePreference>;\n    }\n  ) {}\n}\n\nexport class UpdateQuoteAutoSavePreferenceAction implements IAction {\n  public type = AccountActionTypes.UPDATE_QUOTE_AUTO_SAVE_PREFERENCE;\n  constructor(\n    public payload: {\n      quoteAutoSavePreference: IMap<IQuoteAutoSavePreference>;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class UpdateQuoteAutoSavePreferenceSucceededAction implements IAction {\n  public type = AccountActionTypes.UPDATE_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED;\n  constructor(\n    public payload: {\n      quoteAutoSavePreference: IMap<IQuoteAutoSavePreference>;\n    }\n  ) {}\n}\n\nexport class GetLoggedInUserDataAction implements IAction {\n  public type = AccountActionTypes.GET_LOGGED_IN_USER_DATA;\n}\n\nexport class GetLoggedInUserDataSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_LOGGED_IN_USER_DATA_SUCCEEDED;\n  constructor(\n    public payload: {\n      user: IMap<User>;\n    }\n  ) {}\n}\n\nexport class PotentiallyFetchManufacturerDiscountsAndPriorityAction implements IAction {\n  public type = AccountActionTypes.POTENTIALLY_FETCH_MANUFACTURER_DISCOUNTS_AND_PRIORITY;\n}\n\nexport class GetDiscountPriorityAction implements IAction {\n  public type = AccountActionTypes.GET_DISCOUNT_PRIORITY;\n}\n\nexport class GetDiscountPrioritySucceededAction implements IAction {\n  public type = AccountActionTypes.GET_DISCOUNT_PRIORITY_SUCCEEDED;\n  constructor(\n    public payload: {\n      discountPriority: 'customer' | 'manufacturer';\n    }\n  ) {}\n}\n\nexport class GetQuoteDiscountListAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_DISCOUNT_LIST;\n}\n\nexport class GetQuoteDiscountListSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_DISCOUNT_LIST_SUCCEEDED;\n  constructor(\n    public payload: {\n      quoteDiscountList: List<IMap<IQuoteDiscountListItem>>;\n    }\n  ) {}\n}\n\nexport class GetShopDrawingColorAction implements IAction {\n  public type = AccountActionTypes.GET_SHOP_DRAWING_COLOR;\n}\n\nexport class GetShopDrawingColorSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_SHOP_DRAWING_COLOR_SUCCEEDED;\n  constructor(\n    public payload: {\n      shopDrawingColor: string;\n    }\n  ) {}\n}\n\nexport class GetDefaultProjectVisibilityAction implements IAction {\n  public type = AccountActionTypes.GET_DEFAULT_PROJECT_VISIBILITY;\n  constructor(\n    public payload?: {\n      onSuccess?: () => void;\n      onFail?: (err: Error) => void;\n    }\n  ) {}\n}\n\nexport class GetDefaultProjectVisibilitySucceededAction implements IAction {\n  public type = AccountActionTypes.GET_DEFAULT_PROJECT_VISIBILITY_SUCCEEDED;\n  constructor(\n    public payload: {\n      defaultProjectVisibility: ProjectVisibility;\n    }\n  ) {}\n}\n\nexport class SetDefaultProjectVisibilityAction implements IAction {\n  public type = AccountActionTypes.SET_DEFAULT_PROJECT_VISIBILITY;\n  constructor(\n    public payload: {\n      defaultProjectVisibility: ProjectVisibility;\n    }\n  ) {}\n}\n\nexport class SetIsUpdatingQuoteExcelColumnPreferencesAction implements IAction {\n  public type = AccountActionTypes.SET_IS_UPDATING_QUOTE_EXCEL_COLUMN_PREFERENCES;\n  constructor(\n    public payload: {\n      isUpdatingQuoteExcelColumnPreferences: boolean;\n    }\n  ) {}\n}\n\nexport class UpdateQuoteExcelColumnPreferencesSucceededAction implements IAction {\n  public type = AccountActionTypes.UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED;\n  constructor(\n    public payload: {\n      quoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>>;\n    }\n  ) {}\n}\n\nexport class UpdateQuoteExcelColumnPreferencesAction implements IAction {\n  public type = AccountActionTypes.UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES;\n  constructor(\n    public payload: {\n      quoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>>;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class SetIsGettingQuoteExcelColumnPreferencesAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_QUOTE_EXCEL_COLUMN_PREFERENCES;\n  constructor(\n    public payload: {\n      isGettingQuoteExcelColumnPreferences: boolean;\n    }\n  ) {}\n}\n\nexport class GetQuoteExcelColumnPreferencesSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED;\n  constructor(\n    public payload: {\n      quoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>>;\n    }\n  ) {}\n}\n\nexport class GetQuoteExcelColumnPreferencesAction implements IAction {\n  public type = AccountActionTypes.GET_QUOTE_EXCEL_COLUMN_PREFERENCES;\n}\n\nexport class GetCustomerDiscountVisibilitySettingAction implements IAction {\n  public type = AccountActionTypes.GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING;\n}\n\nexport class GetCustomerDiscountVisibilitySettingSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING_SUCCEEDED;\n  constructor(\n    public payload: {\n      displayAllBrands: boolean;\n    }\n  ) {}\n}\n\nexport class SetIsGettingCustomerDiscountVisibilitySettingAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_CUSTOMER_DISCOUNT_VISIBILITY_SETTING;\n  constructor(\n    public payload: {\n      isGettingCustomerVisibilitySetting: boolean;\n    }\n  ) {}\n}\n\nexport class SetIsGettingAutoTrackingProjectSettingAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_AUTO_TRACK_PROJECT_SETTING;\n\n  constructor(\n    public payload: {\n      isGettingAutoTrackProjectSetting: boolean;\n    }\n  ) {}\n}\n\nexport class GetAutoTrackingProjectSettingSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_AUTO_TRACK_PROJECT_SETTING_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      autoTrackProjects: boolean;\n    }\n  ) {}\n}\n\nexport class GetAutoTrackingProjectSettingAction implements IAction {\n  public type = AccountActionTypes.GET_AUTO_TRACK_PROJECT_SETTING;\n}\n\nexport class GetMasterFormatRootsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MASTER_FORMAT_ROOTS_SUCCEEDED;\n  constructor(\n    public payload: {\n      masterFormatRoots: List<IMap<MasterFormatRoot>>;\n    }\n  ) {}\n}\n\nexport class GetMasterFormatRootsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MASTER_FORMAT_ROOTS;\n}\n\nexport class AddBrandTagsAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_BRAND_TAGS;\n  constructor(\n    public payload: {\n      brandReps: List<Partial<IMap<BrandTag>>>;\n      byDivision?: boolean;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class DeleteBrandTagsByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_BRAND_TAGS_BY_ID;\n  constructor(\n    public payload: {\n      brandRepIds?: List<number>;\n      officeIds?: List<number>;\n      firmIds?: List<number>;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class DeleteOfficeFromFirmBrandTagsAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_OFFICE_FROM_FIRM_BRAND_TAGS;\n  constructor(\n    public payload: {\n      officeId: number\n    }\n  ) {}\n}\n\nexport class GetOfficeBrandTagsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICE_BRAND_TAGS_SUCCEEDED;\n  constructor(\n    public payload: {\n      officeId: number;\n      officeBrandTags: List<IMap<BrandTag>>;\n      officeBrandTagsKeyed: Map<string, IMap<BrandTag>>;\n    }\n  ) {}\n}\n\nexport class GetOfficeBrandTagsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICE_BRAND_TAGS;\n  constructor(\n    public payload: {\n      officeId: number;\n    }\n  ) {}\n}\n\nexport class GetFirmBrandTagsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRM_BRAND_TAGS;\n  constructor(\n    public payload: {\n      officeIds: number[];\n    }\n  ) {}\n}\n\nexport class GetFirmBrandTagsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRM_BRAND_TAGS_SUCCEEDED;\n  constructor(\n    public payload: {\n      firmBrandTags: Map<string, List<IMap<BrandTag>>>;\n      firmBrandTagsKeyed: Map<string, Map<string, IMap<BrandTag>>>;\n    }\n  ) {}\n}\n\nexport class SetIsGettingFirmBrandTagsAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_GETTING_FIRM_BRAND_TAGS;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\ninterface IAddOrDeleteAclRoleActionPayload {\n  appId: string;\n  aclRoleId?: number;\n  aclRoleName: string;\n}\n\nexport class DeleteAclRoleAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_ACL_ROLE;\n  constructor(\n    public payload: {\n      userId: number;\n      aclRoles: IAddOrDeleteAclRoleActionPayload[];\n      refreshToken?: boolean;\n    }\n  ) {}\n}\n\nexport class DeleteAclRoleSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_ACL_ROLE_SUCCEEDED;\n  constructor(\n    public payload: {\n      user: IMap<User>;\n    }\n  ) {}\n}\n\nexport class SetIsDeletingAclRoleAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_DELETING_ACL_ROLE;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class AddAclRoleAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_ACL_ROLE;\n  constructor(\n    public payload: {\n      userId: number;\n      aclRoles: IAddOrDeleteAclRoleActionPayload[];\n      refreshToken?: boolean;\n    }\n  ) {}\n}\n\nexport class AddAclRoleSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_ACL_ROLE_SUCCEEDED;\n  constructor(\n    public payload: {\n      user: IMap<User>;\n    }\n  ) {}\n}\n\nexport class SetIsAddingAclRoleAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_ADDING_ACL_ROLE;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class GetAclRolesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ACL_ROLES;\n}\n\nexport class GetAclRolesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ACL_ROLES_SUCCEEDED;\n  constructor(\n    public payload: {\n      aclRoles: List<IMap<AclItem>>;\n    }\n  ) {}\n}\n\nexport class SetIsGettingAclRolesAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_GETTING_ACL_ROLES;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class GetAppsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_APPS;\n}\n\nexport class GetAppsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_APPS_SUCCEEDED;\n  constructor(\n    public payload: {\n      apps: List<IMap<ListItem>>;\n    }\n  ) {}\n}\n\nexport class SetIsGettingAppsAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_GETTING_APPS;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class DeleteFavouriteCategoryAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_FAVOURITE_CATEGORY;\n  constructor(\n    public payload: {\n      categoryId: number;\n    }\n  ) {}\n}\n\nexport class SaveFavouriteCategoryAction implements IAction {\n  public readonly type = AccountActionTypes.SAVE_FAVOURITE_CATEGORY;\n  constructor(\n    public payload: {\n      categoryId: number;\n    }\n  ) {}\n}\n\nexport class UpdateFilterByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_FILTER_BY_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      savedFilter: IMap<SavedFilter>;\n      filterId: number;\n      filterType: string;\n      index?: number;\n      isDefault?: boolean;\n    }\n  ) {}\n}\n\nexport class UpdateFilterByIdAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_FILTER_BY_ID;\n  constructor(\n    public payload: {\n      filterName?: string;\n      filterId: number;\n      filterData?: object;\n      filterType: string;\n      index?: number;\n      isDefault?: boolean;\n      onSuccess?: () => void;\n      onFail?: () => void;\n    }\n  ) {}\n}\n\nexport class DeleteFilterByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_FILTER_BY_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      id: number;\n      filterType: string;\n    }\n  ) {}\n}\n\nexport class DeleteFilterByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_FILTER_BY_ID;\n  constructor(\n    public payload: {\n      id: number;\n      filterType: string;\n    }\n  ) {}\n}\n\nexport class GetFiltersByType implements IAction {\n  public readonly type = AccountActionTypes.GET_FILTERS_BY_TYPE;\n  constructor(\n    public payload: {\n      filterType: string;\n    }\n  ) {}\n}\n\nexport class GetFiltersByTypeSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FILTERS_BY_TYPE_SUCCEEDED;\n  constructor(\n    public payload: {\n      filterList: List<IMap<SavedFilter>>;\n      filterType: string;\n    }\n  ) {}\n}\n\nexport class CreateFilterSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_FILTER_SUCCEEDED;\n  constructor(\n    public payload: {\n      savedFilter: IMap<SavedFilter>;\n      filterType: string;\n    }\n  ) {}\n}\n\nexport class CreateFilterAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_FILTER;\n  constructor(\n    public payload: {\n      filterName: string;\n      filterType: string;\n      filterData: object;\n      isDefault: boolean;\n      onSuccess?: () => void;\n      onFail?: () => void;\n    }\n  ) {}\n}\n\nexport class ResetFiltersAndColumnsAction implements IAction {\n  public readonly type = AccountActionTypes.RESET_FILTERS_AND_COLUMNS;\n}\n\nexport class SetLoggedInUserOfficeIdAction implements IAction {\n  public readonly type = AccountActionTypes.SET_LOGGED_IN_USER_OFFICE_ID;\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetRTypeRegionsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_R_TYPE_REGIONS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Region>>\n  ) {}\n}\n\nexport class GetRTypeRegionsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_R_TYPE_REGIONS;\n}\n\nexport class VerifyPasswordAction implements IAction {\n  public readonly type = AccountActionTypes.VERIFY_PASSWORD;\n  constructor(\n    public payload: {\n      password: string;\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    }\n  ) {}\n}\n\nexport class SetPasswordFailAction implements IAction {\n  public readonly type = AccountActionTypes.SET_PASSWORD_FAIL;\n}\n\nexport class SetPasswordSuccessAction implements IAction {\n  public readonly type = AccountActionTypes.SET_PASSWORD_SUCCESS;\n}\n\nexport class SetPasswordAction implements IAction {\n  public readonly type = AccountActionTypes.SET_PASSWORD;\n  constructor(\n    public payload: {\n      password: string;\n      passwordNew: string;\n    }\n  ) {}\n}\n\nexport class GetUsersListAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USERS_LIST;\n}\n\nexport class GetOpportunityLabelsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_LABELS;\n}\n\nexport class GetOpportunityStatusesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_STATUSES;\n}\n\nexport class GetOpportunityLabelsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_LABELS_SUCCEEDED;\n  constructor(\n    public payload: {\n      opportunityLabels: List<IMap<OpportunityLabel>>\n    }\n  ) {}\n}\n\nexport class GetVisibilityListAction implements IAction {\n  public readonly type = AccountActionTypes.GET_VISIBILITY_LIST;\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetVisibilityListSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_VISIBILITY_LIST_SUCCEEDED;\n  constructor(\n    public payload: {\n      visibilityListItems: List<IMap<VisibilityListItem>>\n    }\n  ) {}\n}\n\nexport class GetOpportunityStatusesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_STATUSES_SUCCEEDED;\n  constructor(\n    public payload: {\n      opportunityStatuses: List<IMap<OpportunityStatus>>\n    }\n  ) {}\n}\n\nexport class ResetPreferenceSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.RESET_PREFERENCE_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<ProjectPhase>>\n  ) {}\n}\n\nexport class ResetPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.RESET_PREFERENCE;\n  constructor(\n    public payload: {\n      userType: string,\n      preference: string,\n    }\n  ) {}\n}\n\nexport class AddContactAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_CONTACT;\n\n  constructor(\n    public payload: {\n      contact: Partial<Contact> & Pick<Contact, 'ownerType' | 'ownerId'>,\n      searchTerm?: string,\n      filters?: Filter,\n      options?: Option<Contact>,\n      discounts?: CustomerDiscount[],\n      onSuccess?: (newContact: IMap<Contact>) => void,\n    }\n  ) {}\n}\n\nexport class EditContactAction implements IAction {\n  public readonly type = AccountActionTypes.EDIT_CONTACT;\n\n  constructor(\n    public payload: {\n      contactId: number,\n      contact: Partial<Contact>,\n      postSearch?: boolean;\n      searchTerm?: string,\n      filters?: Filter,\n      options?: Option<Contact>,\n      onSuccess?: (newContact: IMap<Contact>) => void,\n    }\n  ) {}\n}\n\nexport class GetContactsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CONTACTS;\n}\n\nexport class DeleteContactsByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_CONTACT_BY_ID;\n\n  constructor(\n    public payload: {\n      contactId: number,\n    }\n  ) {}\n}\n\nexport class DeleteContactsByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_CONTACT_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      contactId: number,\n    }\n  ) {}\n}\n\nexport class DeleteUserByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_USER_BY_ID;\n\n  constructor(\n    public payload: {\n      userId: number,\n      onSuccess?: (args?: any) => void,\n    }\n  ) {}\n}\n\nexport class DeleteUserByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_USER_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      userId: number,\n    }\n  ) {}\n}\n\nexport class DeleteUserByIdAndSearchAllUsersAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_USER_BY_ID_AND_SEARCH_ALL_USERS;\n\n  constructor(\n    public payload: {\n      userId: number,\n      filters?: Filter,\n      options?: Option<User>,\n      queries?: Map<string, any>,\n      onSuccess?: (args?: any) => void,\n      onFail?: (args?: any) => void,\n    }\n  ) {}\n}\n\nexport class DeleteOfficeByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_OFFICE_BY_ID;\n\n  constructor(\n    public payload: {\n      officeId: number,\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    }\n  ) {}\n}\n\nexport class DeleteOfficeByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_OFFICE_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class GetContactsByIdAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CONTACT_BY_ID;\n\n  constructor(\n    public payload: {\n      contactId: number,\n    },\n    public callback?: (...args: any[]) => void,\n  ) {}\n}\n\nexport class GetContactsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CONTACTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      contacts: List<IMap<Contact>>,\n    }\n  ) {}\n}\n\nexport class GetContactsFailAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CONTACTS_FAIL;\n  constructor (\n    public payload?: {\n      error: any\n    }\n  ) {}\n}\n\nexport class SelectContactAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_ACCOUNT_CONTACT;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class DeleteContactAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_CONTACT;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class DeleteContactAndSearchContactsAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_CONTACT_AND_SEARCH_CONTACTS;\n\n  constructor(\n    public payload: {\n      contactId: number,\n      searchTerm?: string;\n      filters?: Filter;\n      options?: Option<Contact>;\n    }\n  ) {}\n}\n\nexport class GetLogInAsUsersAction implements IAction {\n  public readonly type = AccountActionTypes.GET_LOG_IN_AS_USERS;\n\n  constructor(\n    public payload: string\n  ) {}\n}\n\nexport class GetLogInAsUsersSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_LOG_IN_AS_USERS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      users: List<IMap<User>>,\n    }\n  ) {}\n}\n\nexport class GetCollaboratorsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_COLLABORATORS;\n}\n\nexport class GetCollaboratorsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_COLLABORATORS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      collaborators: List<IMap<Collaborator>>,\n    }\n  ) { }\n}\n\nexport class GetNonFirmCollaboratorsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_NON_FIRM_COLLABORATORS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      collaborators: List<IMap<Collaborator>>,\n    }\n  ) { }\n}\n\nexport class GetFirmCollaboratorsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRM_COLLABORATORS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      collaborators: List<IMap<Collaborator>>,\n    }\n  ) { }\n}\n\nexport class AddCollaboratorAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_COLLABORATOR;\n\n  constructor(\n    public payload: Map<string, any>\n  ) {}\n}\n\nexport class GetPartnershipsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_PARTNERSHIPS;\n}\n\nexport class GetPartnershipsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_PARTNERSHIPS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      partnerships: List<IMap<Partnership>>,\n    }\n  ) { }\n}\n\nexport class SetPartnershipsAction implements IAction {\n  public readonly type = AccountActionTypes.SET_PARTNERSHIPS;\n\n  constructor(\n    public payload: {\n      config: Map<string, any>,\n      partnershipId: number\n    }\n  ) { }\n}\n\nexport class SetPartnershipsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.SET_PARTNERSHIPS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      config: Map<string, any>,\n      partnershipId: number\n    }\n  ) { }\n}\n\nexport class GetOfficeByIdAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICE_BY_ID;\n\n  constructor(\n    public payload: {\n      officeId: number\n    }\n  ) { }\n}\n\nexport class IsFetchingFirmByIdAction implements IAction {\n  public readonly type = AccountActionTypes.IS_FETCHING_FIRM_BY_ID;\n\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class GetFirmByIdAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRM_BY_ID;\n\n  constructor(\n    public payload: {\n      firmId: number;\n      withLoading?: boolean;\n    }\n  ) { }\n}\n\nexport class GetFirmByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRM_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Firm>\n  ) { }\n}\n\nexport class GetUserFirmAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_FIRM;\n\n  constructor(\n    public payload: {\n      firmId: number\n    }\n  ) { }\n}\n\nexport class GetUserFirmSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_FIRM_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Firm>\n  ) { }\n}\n\nexport class GetFirmsForSuperFirmFirmAdminAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN;\n}\n\nexport class GetFirmsForSuperFirmFirmAdminSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmList: List<IMap<Firm>>\n    }\n  ) { }\n}\n\nexport class CreateFirmAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_FIRM;\n\n  constructor(\n    public payload: {\n      firm: IMap<Partial<Firm>>;\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    },\n  ) { }\n}\n\nexport class UpdateFirmByIdAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_FIRM_BY_ID;\n\n  constructor(\n    public payload: {\n      firmId: number;\n      firm: IMap<Partial<Firm>>;\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    },\n  ) { }\n}\n\nexport class PatchUpdateFirmByIdAction implements IAction {\n  public readonly type = AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID;\n\n  constructor(\n    public payload: {\n      shareQuotes?: number;\n      shareContacts?: number;\n    },\n  ) { }\n}\n\nexport class SetUpdateFirmByIdLoadingAction implements IAction {\n  public readonly type = AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID_LOADING;\n  constructor(\n    public payload: boolean\n  )  {}\n}\n\nexport class UpdateFirmByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_FIRM_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Firm>\n  ) { }\n}\n\nexport class PatchUpdateFirmByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID_SUCCESS;\n\n  constructor(\n    public payload: IMap<Firm>\n  ) { }\n}\n\nexport class GetOfficesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICES;\n  constructor(\n    public payload?: number\n  )  {}\n}\n\nexport class GetOfficesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICES_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Office>>\n  ) {}\n}\n\nexport class GetOfficesByFirmIdAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICES_BY_FIRM_ID;\n  constructor(\n    public payload: {\n      firmId?: number;\n      onSuccess?: (offices?: List<IMap<Office>>) => void;\n    }\n  )  {}\n}\n\nexport class GetOfficesByFirmIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICES_BY_FIRM_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      firmId: number;\n      officeList: List<IMap<Office>>;\n    }\n  ) {}\n}\n\nexport class GetQuoteOfficesByFirmAction implements IAction {\n  public readonly type = AccountActionTypes.GET_QUOTE_OFFICES_BY_FIRM;\n  constructor(\n    public payload?: {}\n  )  {}\n}\n\nexport class GetQuoteOfficesByFirmSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_QUOTE_OFFICES_BY_FIRM_SUCCEEDED;\n  constructor(\n    public payload: {\n      officeList: List<IMap<Office>>;\n    }\n  ) {}\n}\n\nexport class SelectOfficeAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_OFFICE;\n  constructor(\n    public payload: {\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class SelectTeamOrganizationFirmAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_TEAM_ORGANIZATION_FIRM;\n  constructor(\n    public payload: {\n      firmId: number,\n    }\n  ) {}\n}\n\nexport class SelectTeamOrganizationOfficeAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_TEAM_ORGANIZATION_OFFICE;\n  constructor(\n    public payload: {\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class SelectTeamOrganizationDrawerOfficeAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_TEAM_ORGANIZATION_DRAWER_OFFICE;\n  constructor(\n    public payload: {\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class SelectTeamOrganizationUserAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_TEAM_ORGANIZATION_USER;\n  constructor(\n    public payload: {\n      userId: number,\n    }\n  ) {}\n}\n\n\nexport class GetOfficeByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OFFICE_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: List<IMap<Office>>\n  ) { }\n}\n\nexport class GetOpportunityGroupsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_GROUPS;\n}\n\nexport class GetOpportunityGroupsActionSucceeded implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_GROUPS_SUCCEEDED;\n\n  constructor(\n    public payload: List<IMap<OpportunityGroup>>\n  ) { }\n}\n\nexport class SetLogInAsUsersIsSearchingAction implements IAction {\n  public readonly type = AccountActionTypes.SET_LOG_IN_AS_USERS_IS_SEARCHING;\n\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class SearchUsersQuickAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_QUICK;\n\n  constructor (\n    public payload: {\n      searchTerm: string,\n      firmId?: number,\n      officeId?: number,\n      includeAtsUsers?: boolean,\n      queries?: Map<string, any>,\n      delay?: boolean\n    }\n  ) {}\n}\n\nexport class SearchUsersQuickByOfficeIdAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_QUICK_BY_OFFICE_ID;\n\n  constructor (\n    public payload: {\n      searchTerm: string,\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class SearchQuoteUsersAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_QUOTE_USERS;\n\n  constructor (\n    public payload?: {\n      searchTerm?: string\n    }\n  ) {}\n}\n\nexport class GetNoteCreatorsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_NOTE_CREATORS;\n\n  constructor (\n    public payload: {\n      userIds: string[];\n    }\n  ) {}\n}\n\nexport class GetNoteCreatorsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_NOTE_CREATORS_SUCCEEDED;\n\n  constructor (\n    public payload: List<IMap<User>>\n  ) {}\n}\n\nexport class SearchUsersByUserIdAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_BY_USER_ID;\n\n  constructor (\n    public payload: {\n      userIds: string[];\n    }\n  ) {}\n}\n\nexport class SearchUsersbyUserIdFinishedAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_BY_USER_ID_FINISHED;\n\n  constructor (\n    public payload: List<IMap<User>>\n  ) {}\n}\nexport class SearchUsersByOfficeIdAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_BY_OFFICE_ID;\n\n  constructor (\n    public payload: {\n      officeId: number;\n      status?: 'active' | 'inactive';\n    }\n  ) {}\n}\n\nexport class SearchUsersAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS;\n\n  constructor (\n    public payload: {\n      filters?: IMap<Filter>,\n      queries?: Map<string, any>\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAllUsersAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_SEARCHING_ALL_USERS;\n\n  constructor (\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchAllUsersAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_ALL_USERS;\n\n  constructor (\n    public payload: {\n      filters?: Filter,\n      options?: Option<User>,\n      queries?: Map<string, any>\n    }\n  ) {}\n}\n\nexport class SearchingAllUsersSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_ALL_USERS_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      users: List<IMap<User>>;\n      usersCount: number;\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAllFirmsAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_SEARCHING_ALL_FIRMS;\n\n  constructor (\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchAllFirmsAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_ALL_FIRMS;\n\n  constructor (\n    public payload: {\n      filters?: Filter,\n      options?: Option<Firm>,\n    }\n  ) {}\n}\n\nexport class SearchingAllFirmsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_ALL_FIRMS_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      firms: List<IMap<Firm>>;\n      firmsCount: number;\n    }\n  ) {}\n}\n\nexport class DeleteFirmByIdAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_FIRM_BY_ID;\n\n  constructor (\n    public payload: {\n      firmId: number;\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    }\n  ) {}\n}\n\nexport class DeleteFirmByIdThenSearchAllFirmsAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_FIRM_BY_ID_THEN_SEARCH_ALL_FIRMS;\n\n  constructor (\n    public payload: {\n      firmId: number,\n      filters?: Filter,\n      options?: Option<Firm>,\n    }\n  ) {}\n}\n\nexport class ClearUsersAction implements IAction {\n  public readonly type = AccountActionTypes.CLEAR_USERS;\n}\n\nexport class GetUsersSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USERS_SUCCEEDED;\n\n  constructor (\n    public payload: List<IMap<User>>\n  ) {}\n}\n\nexport class SearchUsersFinishedAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_FINISHED;\n\n  constructor (\n    public payload: OrderedSet<number>\n  ) {}\n}\n\nexport class SearchUsersByOfficeIdFinishedAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_USERS_BY_OFFICE_ID_FINISHED;\n\n  constructor (\n    public payload: {\n      officeId: number,\n      userIdList: OrderedSet<number>,\n    }\n  ) {}\n}\n\nexport class SetLogInAsUsersAction implements IAction {\n  public readonly type = AccountActionTypes.SET_LOG_IN_AS_USERS;\n\n  constructor(\n    public payload: Map<number, any>\n  ) { }\n}\n\nexport class GetUserByIdAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_BY_ID;\n\n  constructor(\n    public payload: {\n      id: number,\n      saveMulti?: boolean\n    }\n  ) {}\n}\n\nexport class SelectUserAction implements IAction {\n  public readonly type = AccountActionTypes.SELECT_USER;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetUserByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<User>\n  ) {}\n}\n\nexport class GetUserByIdMultiSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_BY_ID_MULTI_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<User>\n  ) {}\n}\n\nexport class GetCollaboratorsOfficeAction implements IAction {\n  public readonly type = AccountActionTypes.GET_COLLABORATORS_OFFICE;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetCollaboratorsOfficeSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_COLLABORATORS_OFFICE_SUCCEEDED;\n\n  constructor(\n    public payload: List<Collaborator>\n  ) {}\n}\n\nexport class GetFirmsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRMS;\n  constructor(\n    public payload?: number\n  )  {}\n}\n\nexport class GetFirmsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_FIRMS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Firm>>\n  ) {}\n}\n\nexport class SetSelectedFirmId implements IAction {\n  public readonly type = AccountActionTypes.SET_SELECTED_FIRM_ID;\n  constructor(\n    public payload: {\n      firmId: number,\n    }\n  ) {}\n}\n\nexport class GetPreferencesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_PREFERENCES;\n\n  constructor (\n    public payload: {\n      userType: string,\n      preference: PreferenceType\n    }\n  ) { }\n}\n\nexport class GetOpportunityStatusesPreferencesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_OPPORTUNITY_STATUSES_PREFERENCES;\n\n  // constructor (\n  // ) { }\n}\n\nexport class GetPreferencesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_PREFERENCES_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      preference?: PreferenceType,\n      preferences: IMap<Partial<Preferences>>,\n    }\n  ) { }\n}\n\nexport class SetPreferencesAction<K extends PreferenceType = PreferenceType.TypePlaceholder> implements IAction {\n  public readonly type = AccountActionTypes.SET_PREFERENCES;\n\n  constructor (\n    public payload: {\n      userType: string,\n      preference: K,\n      preferences: Preferences[K],\n    }\n  ) { }\n}\n\nexport class EditPreferencesAction<K extends PreferenceType = PreferenceType.TypePlaceholder> implements IAction {\n  public readonly type = AccountActionTypes.EDIT_PREFERENCES;\n\n  constructor (\n    public payload: {\n      userType: string,\n      preference: K,\n      preferences: Preferences[K],\n    }\n  ) { }\n}\n\nexport class UpdateOfficeByIdAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_OFFICE_BY_ID;\n\n  constructor (\n    public payload: {\n      id: number,\n      office: IMap<Partial<Office>>,\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    }\n  ) { }\n}\n\nexport class CreateOfficeAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_OFFICE;\n\n  constructor (\n    public payload: {\n      office: IMap<Partial<Office>>,\n      onSuccess?: (args?: any) => void;\n      onFail?: (args?: any) => void;\n    }\n  ) { }\n}\n\nexport class MoveUserByIdAction implements IAction {\n  public readonly type = AccountActionTypes.MOVE_USER_BY_ID;\n\n  constructor (\n    public payload: {\n      userId: number,\n      newOfficeId: number,\n      onSuccess?: (args?: any) => void,\n      onFail?: (args?: any) => void,\n    }\n  ) { }\n}\n\nexport class UpdateUserByIdAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_USER_BY_ID;\n\n  constructor (\n    public payload: {\n      id: number,\n      user: IMap<Partial<User>>,\n      refreshToken?: boolean,\n      getUserAfterUpdate?: boolean,\n      rolesToGrant?: string[],\n      rolesToRevoke?: string[],\n      onSuccess?: (args?: any) => void,\n      onFail?: (args?: any) => void,\n    }\n  ) { }\n}\n\nexport class UpdateUserByIdSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_USER_BY_ID_SUCCEEDED;\n}\n\nexport class UpdateUserByIdFailedAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_USER_BY_ID_FAILED;\n}\n\nexport class CreateUserAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_USER;\n\n  constructor (\n    public payload: {\n      user: IMap<Partial<User>>,\n      userTypeId?: number,\n      rolesToGrant?: string[],\n      onSuccess?: (args?: any) => void,\n      onFail?: (args?: any) => void,\n    }\n  ) { }\n}\n\nexport class GetManufacturersAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURERS;\n}\n\nexport class GetManufacturersSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURERS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      manufacturerList: List<IMap<Manufacturer>>;\n    }\n  ) {}\n}\n\nexport class GetBrandRepCategoriesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_BRAND_REP_CATEGORIES;\n}\n\nexport class GetCategoriesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CATEGORIES;\n}\n\nexport class GetCategoriesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_CATEGORIES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      categoryList: List<IMap<Category>>;\n    }\n  ) {}\n}\n\nexport class SetSelectedManufacturerIdAction implements IAction {\n  public readonly type = AccountActionTypes.SET_SELECTED_MANUFACTURER_ID;\n\n  constructor(\n    public payload: {\n      selectedManufacturerId: number;\n    }\n  ) {}\n}\n\nexport class SetSelectedCategoryIdAction implements IAction {\n  public readonly type = AccountActionTypes.SET_SELECTED_CATEGORY_ID;\n\n  constructor(\n    public payload: {\n      selectedCategoryId: number;\n    }\n  ) {}\n}\n\nexport class GetDiscountsForCustomerId implements IAction {\n  public readonly type = AccountActionTypes.GET_DISCOUNTS_FOR_CUSTOMER_ID;\n\n  constructor(\n    public payload: {\n      customerId: number;\n    }\n  ) {}\n}\n\nexport class GetDiscountsForCustomerIdSucceeded implements IAction {\n  public readonly type = AccountActionTypes.GET_DISCOUNTS_FOR_CUSTOMER_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      discounts: List<IMap<CustomerDiscount>>;\n    }\n  ) {}\n}\n\nexport class GetDiscountsForOfficeId implements IAction {\n  public readonly type = AccountActionTypes.GET_DISCOUNTS_FOR_OFFICE_ID;\n}\n\nexport class GetDiscountsForOfficeIdSucceeded implements IAction {\n  public readonly type = AccountActionTypes.GET_DISCOUNTS_FOR_OFFICE_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      discounts: List<IMap<Discount>>;\n    }\n  ) {}\n}\n\nexport class AddCustomerDiscountAction implements IAction {\n  public readonly type = AccountActionTypes.ADD_CUSTOMER_DISCOUNT;\n\n  constructor(\n    public payload: {\n      discounts: CustomerDiscount[];\n    }\n  ) {}\n}\n\nexport class EditCustomerDiscountAction implements IAction {\n  public readonly type = AccountActionTypes.EDIT_CUSTOMER_DISCOUNT;\n\n  constructor(\n    public payload: {\n      discounts: CustomerDiscount[];\n    }\n  ) {}\n}\n\nexport class DeleteCustomerDiscountAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_CUSTOMER_DISCOUNT;\n\n  constructor(\n    public payload: {\n      brandRepId: number[],\n    }\n  ) {}\n}\n\nexport class ResetSearchContactsBySearchTermAction implements IAction {\n  public type = AccountActionTypes.RESET_SEARCH_CONTACTS_BY_SEARCH_TERM;\n}\n\nexport class SearchContactsBySearchTermAction implements IAction {\n  public type = AccountActionTypes.SEARCH_CONTACTS_BY_SEARCH_TERM;\n\n  constructor(\n    public payload: {\n      searchTerm: string;\n    }\n  ) {}\n}\n\nexport class SearchContactsBySearchTermSucceededAction implements IAction {\n  public type = AccountActionTypes.SEARCH_CONTACTS_BY_SEARCH_TERM_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      contacts: List<IMap<Contact>>;\n    }\n  ) {}\n}\n\nexport class SearchContactsAction implements IAction {\n  public type = AccountActionTypes.SEARCH_CONTACTS;\n\n  constructor(\n    public payload: {\n      searchTerm: string;\n      filters?: Filter;\n      options?: Option<Contact>;\n      noLoadingScreen?: boolean;\n    }\n  ) {}\n}\n\nexport class SearchContactsSucceededAction implements IAction {\n  public type = AccountActionTypes.SEARCH_CONTACTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      contacts: List<IMap<Contact>>;\n      count?: number;\n      hasNextPage?: boolean;\n    },\n  ) {}\n}\n\nexport class SearchContactsFindIndexAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_CONTACTS_FIND_INDEX;\n\n  constructor(\n    public payload: {\n      indexToFind: string;\n      searchTerm?: string;\n      filters?: Filter;\n      options?: Option<Contact>;\n    }\n  ) { }\n}\n\nexport class SearchContactsFindIndexSucceededAction implements IAction {\n  public type = AccountActionTypes.SEARCH_CONTACTS_FIND_INDEX_SUCCEEDED;\n\n  constructor(\n    public payload: number,\n  ) {}\n}\n\nexport class SetContactsLoadingAction implements IAction {\n  public readonly type = AccountActionTypes.SET_CONTACTS_LOADING;\n  constructor(\n    public payload: boolean\n  )  {}\n}\n\nexport class TrackFormSubmitFailedAction implements IAction {\n  public readonly type = AccountActionTypes.TRACK_FORM_SUBMIT_FAILED;\n  constructor(\n    public payload: {\n      errors: FormErrors<any, string>,\n      eventName: AMPLITUDE_EVENT\n    }\n  ) {}\n}\n\nexport class TrackFormSubmitSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.TRACK_FORM_SUBMIT_SUCCEEDED;\n  constructor(\n    public payload: {\n      eventName: AMPLITUDE_EVENT\n    }\n  ) {}\n}\n\nexport class SearchDivisions implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_DIVISIONS;\n}\nexport class SearchCategories implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_CATEGORIES;\n  constructor(\n      public payload: {\n        queryParam: any;\n      }\n  ) {}\n}\nexport class SearchManufacturer implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_MANUFACTURER;\n  constructor(\n      public payload: {\n        queryParam: any;\n      } = {\n        queryParam: {}\n      }\n  ) {}\n}\n\nexport class SearchProductCategoriesSuccessAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_PRODUCT_CATEGORIES_SUCCESS;\n  constructor(\n      public payload: {\n        categories: List<IMap<Category>>\n      }\n  ) {}\n}\n\nexport class SearchDivisionsSuccessAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_DIVISIONS_SUCCESS;\n  constructor(\n      public payload: {\n        divisions: List<IMap<ListItem>>\n      }\n  ) {}\n}\n\nexport class SearchManufacturersSuccessAction implements IAction {\n  public readonly type = AccountActionTypes.SEARCH_MANUFACTURERS_SUCCESS;\n  constructor(\n      public payload: {\n        manufacturers: List<IMap<ListItem>>\n      }\n  ) {}\n}\n\nexport class GetUserPreferenceOverTakeOff implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_PREFERENCE_OVER_TAKE_OFF;\n}\n\nexport class GetUserPreferenceOverTakeOffSuccess implements IAction {\n  public readonly type = AccountActionTypes.GET_USER_PREFERENCE_OVER_TAKE_OFF_SUCCESS;\n  constructor(\n      public payload: {\n        manufacturerIds: string[],\n        divisionIds: string[],\n        productCategoryIds: string[],\n        level: string\n      }\n  ) {}\n}\n\nexport class UpdateUserPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_USER_PREFERENCE;\n  constructor(\n      public payload: {\n        manufacturerIds: string[],\n        divisionIds: string[],\n        productCategoryIds: string[],\n        share?: boolean,\n        from?: string,\n        onSuccess?: () => void;\n      }\n  ) {}\n}\n\nexport class UpdateUserPreferenceActionSuccess implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_USER_PREFERENCE_SUCCESS;\n  constructor(\n      public payload: {\n        manufacturerIds: string[],\n        divisionIds: string[],\n        productCategoryIds: string[],\n        level: string\n      }\n  ) {}\n}\n\nexport class GetBrandRepAction implements IAction {\n  public readonly type = AccountActionTypes.GET_BRAND_REP;\n}\nexport class GetBrandRepSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_BRAND_REP_SUCCEEDED;\n  constructor(\n      public payload: {\n        brandRep: List<IMap<AttributeTag>>\n      }\n  ) {}\n}\nexport class GetBrandRepFailedAction implements IAction {\n  public readonly type = AccountActionTypes.GET_BRAND_REP_FAILED;\n}\n\n// alternative manufacturers\n\nexport class GetManufacturerPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_PREFERENCES;\n}\nexport class GetManufacturerPreferenceSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_PREFERENCES_SUCCEEDED;\n  constructor(\n      public payload: {\n        manufacturerPreferences: List<IMap<ManufacturerPreference>>\n      }\n  ) {}\n}\nexport class GetManufacturerPreferenceFailedAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_PREFERENCES_FAILED;\n}\n\nexport class CreateManufacturerPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_PREFERENCE;\n  constructor(\n    public payload?: {\n      manufacturerPreferences: List<IMap<ManufacturerPreference>>\n    }\n) {}\n}\nexport class CreateManufacturerPreferenceSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_PREFERENCE_SUCCEEDED;\n  constructor(\n      public payload: {\n        manufacturerPreferences: List<IMap<ManufacturerPreference>>\n      }\n  ) {}\n}\nexport class CreateManufacturerPreferenceFailedAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_PREFERENCE_FAILED;\n}\n\nexport class UpdateManufacturerPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_PREFERENCE;\n  constructor(\n    public payload?: {\n      manufacturerPreference: IMap<ManufacturerPreference>\n    }\n) {}\n}\nexport class UpdateManufacturerPreferenceSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_PREFERENCE_SUCCEEDED;\n  constructor(\n      public payload: {\n        manufacturerPreference: IMap<ManufacturerPreference>\n      }\n  ) {}\n}\nexport class UpdateManufacturerPreferenceFailedAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_PREFERENCE_FAILED;\n}\n\nexport class DeleteManufacturerPreferenceAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_PREFERENCE;\n  constructor(\n    public payload?: {\n      preferenceId: number\n    }\n) {}\n}\nexport class DeleteManufacturerPreferenceSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_PREFERENCE_SUCCEEDED;\n  constructor(\n      public payload: {\n        preferenceId: number\n      }\n  ) {}\n}\nexport class DeleteManufacturerPreferenceFailedAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_PREFERENCE_FAILED;\n}\n\n// rankings\nexport class GetManufacturerRankingsAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_RANKINGS;\n}\nexport class GetManufacturerRankingsSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_RANKINGS_SUCCEEDED;\n  constructor(\n      public payload: {\n        rankings: List<IMap<ManufacturerRanking>>\n      }\n  ) {}\n}\nexport class GetManufacturerRankingsFailedAction implements IAction {\n  public readonly type = AccountActionTypes.GET_MANUFACTURER_RANKINGS_FAILED;\n}\n\nexport class CreateManufacturerRankingAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_RANKING;\n  constructor(\n    public payload: {\n      ranking: IMap<ManufacturerRanking>\n    }\n) {}\n}\nexport class CreateManufacturerRankingSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_RANKING_SUCCEEDED;\n  constructor(\n      public payload: {\n        rankings: List<IMap<ManufacturerRanking>>\n      }\n  ) {}\n}\nexport class CreateManufacturerRankingFailedAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_MANUFACTURER_RANKING_FAILED;\n}\n\nexport class UpdateManufacturerRankingAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_RANKING;\n  constructor(\n    public payload: {\n      ranking: IMap<ManufacturerRanking>\n    }\n) {}\n}\nexport class UpdateManufacturerRankingSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_RANKING_SUCCEEDED;\n  constructor(\n      public payload: {\n        rankings: List<IMap<ManufacturerRanking>>\n      }\n  ) {}\n}\nexport class UpdateManufacturerRankingFailedAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_MANUFACTURER_RANKING_FAILED;\n}\n\nexport class DeleteManufacturerRankingAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_RANKING;\n  constructor(\n    public payload: {\n      ranking: IMap<ManufacturerRanking>,\n      manufacturerPreferences?: List<IMap<ManufacturerPreference>>\n    }\n) {}\n}\nexport class DeleteManufacturerRankingSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_RANKING_SUCCEEDED;\n  constructor(\n    public payload: {\n      rankings: List<IMap<ManufacturerRanking>>\n    }\n) {}\n}\nexport class DeleteManufacturerRankingFailedAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_MANUFACTURER_RANKING_FAILED;\n}\n\nexport class GetSearchMode implements IAction {\n  public readonly type = AccountActionTypes.GET_SEARCH_MODE;\n}\n\nexport class GetSearchModeSucceed implements IAction {\n  public readonly type = AccountActionTypes.GET_SEARCH_MODE_SUCCEED;\n  constructor(\n      public payload: {\n        searchMode: SearchSetting\n      }\n  ) {}\n}\n\nexport class SetSearchMode implements IAction {\n  public readonly type = AccountActionTypes.SET_SEARCH_MODE;\n  constructor(\n      public payload: {\n        searchMode: SearchSetting\n      }\n  ) {}\n}\n\nexport class SetSearchModeSucceed implements IAction {\n  public readonly type = AccountActionTypes.SET_SEARCH_MODE_SUCCEED;\n  constructor(\n      public payload: {\n        searchMode: SearchSetting\n      }\n  ) {}\n}\nexport class GetAttachmentFolderTemplatesAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATES;\n  constructor(\n    public payload: {\n      searchTerm?: string;\n    }\n) {}\n}\n\nexport class SetIsSearchingFolderTemplatesAction implements IAction {\n  public readonly type = AccountActionTypes.SET_IS_SEARCHING_FOLDER_TEMPLATES;\n  constructor(\n    public payload: boolean\n) {}\n}\n\nexport class GetAttachmentFolderTemplatesSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATES_SUCCEEDED;\n  constructor(\n      public payload: {\n        templates: List<Map<string, any>>;\n      }\n  ) {}\n}\nexport class GetAttachmentFolderTemplateWithFoldersAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS;\n  constructor(\n      public payload: {\n        directoryTemplateId: number;\n      }\n  ) {}\n}\nexport class GetAttachmentFolderTemplateWithFoldersSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS_SUCCEEDED;\n  constructor(\n      public payload: {\n        templateFolders: List<Map<string, any>>;\n      }\n  ) {}\n}\nexport class CreateAttachmentFolderTemplateAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_ATTACHMENT_FOLDER_TEMPLATE;\n  constructor(\n      public payload: {\n        templateName: string;\n      }\n  ) {}\n}\nexport class SetSelectedAttachmentFolderTemplateIdAction implements IAction {\n  public readonly type = AccountActionTypes.SET_SELECTED_ATTACHMENT_FOLDER_TEMPLATE_ID;\n  constructor(\n      public payload: number\n  ) {}\n}\nexport class UpdateAttachmentFolderTemplateAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_ATTACHMENT_FOLDER_TEMPLATE;\n  constructor(\n      public payload: {\n        templateId: number;\n        updatedTemplate: object;\n      }\n  ) {}\n}\nexport class CreateTemplateFolderAction implements IAction {\n  public readonly type = AccountActionTypes.CREATE_TEMPLATE_FOLDER;\n  constructor(\n      public payload: {\n        templateId: number;\n        parentId: number;\n        folderName: string;\n        permission: string;\n        labels?: object[];\n      }\n  ) {}\n}\nexport class UpdateTemplateFolderAction implements IAction {\n  public readonly type = AccountActionTypes.UPDATE_TEMPLATE_FOLDER;\n  constructor(\n      public payload: {\n        templateId: number;\n        folderId: number;\n        updatedFolder: IMap<File>;\n      }\n  ) {}\n}\nexport class DeleteTemplateFolderAction implements IAction {\n  public readonly type = AccountActionTypes.DELETE_TEMPLATE_FOLDER;\n  constructor(\n      public payload: {\n        templateId: number;\n        folderId: number;\n      }\n  ) {}\n}\nexport class SetUserDefaultAttachmentFolderTemplateAction implements IAction {\n  public readonly type = AccountActionTypes.SET_USER_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE;\n  constructor(\n      public payload: {\n        templateId: number;\n      }\n  ) {}\n}\nexport class SetFirmDefaultAttachmentFolderTemplateAction implements IAction {\n  public readonly type = AccountActionTypes.SET_FIRM_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE;\n  constructor(\n      public payload: {\n        templateId: number;\n      }\n  ) {}\n}\nexport class GetDefaultAttachmentFolderTemplateAction implements IAction {\n  public readonly type = AccountActionTypes.GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE;\n  constructor(\n      public payload: {\n        visibilityLevel: 'firm' | 'user';\n      }\n  ) {}\n}\nexport class GetDefaultAttachmentFolderTemplateSucceededAction implements IAction {\n  public readonly type = AccountActionTypes.GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE_SUCCEEDED;\n  constructor(\n    public payload: {\n      visibilityLevel: 'firm' | 'user';\n      defaultTemplate: Map<string, any>;\n    }\n) {}\n}\n\nexport class GetDefaultCustomEmail implements IAction {\n  public readonly type = AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL;\n}\nexport class GetDefaultCustomEmailSucceed implements IAction {\n  public readonly type = AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL_SUCCEED;\n  constructor(\n      public payload: {\n        defaultCustomEmail: string,\n        useDefaultCustomEmail: boolean\n      }\n  ) {}\n}\nexport class GetDefaultCustomEmailFailed implements IAction {\n  public readonly type = AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL_FAILED;\n  constructor(\n      public payload: any\n  ) {}\n}\n\nexport class SetDefaultCustomEmail implements IAction {\n  public readonly type = AccountActionTypes.SET_DEFAULT_CUSTOM_EMAIL;\n  constructor(\n      public payload: {\n        email: string;\n        onSuccess?: () => void;\n      }\n  ) {}\n}\n\nexport class SetUseDefaultCustomEmail implements IAction {\n  public readonly type = AccountActionTypes.SET_USE_DEFAULT_CUSTOM_EMAIL;\n  constructor(\n      public payload: boolean\n  ) {}\n}\n\nexport class ExportUsersAction implements IAction {\n  public readonly type = AccountActionTypes.EXPORT_USERS;\n  constructor (\n      public payload: {\n        filters?: Filter,\n        options?: Option<User>,\n        queries?: Map<string, any>\n      }\n  ) {}\n}\n\nexport class BulkUploadUsers implements IAction {\n  public readonly type = AccountActionTypes.BULK_UPLOAD_USERS;\n}\n\nexport class SetUploadUsersProgress implements IAction {\n  public readonly type = AccountActionTypes.SET_UPLOAD_USERS_PROGRESS;\n  constructor (\n      public payload: {\n        percentage: number;\n        status: string;\n        details?: any\n      }\n  ) {}\n}\n\nexport class SetIsGettingVendorQuotationAutoTakeoffSettingAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING;\n\n  constructor(\n      public payload: {\n        isGettingVendorQuotationAutoTakeoffSetting: boolean;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationAutoTakeoffSettingSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING_SUCCEEDED;\n  constructor(\n      public payload: {\n        vendorQuotationAutoTakeoff: boolean;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationAutoTakeoffSettingAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING;\n}\n\nexport class SetIsGettingVendorQuotationNotificationsAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_NOTIFICATIONS;\n\n  constructor(\n      public payload: {\n        isGettingVendorQuotationNotifications: boolean;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationNotificationsSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_NOTIFICATIONS_SUCCEEDED;\n\n  constructor(\n      public payload: {\n        vendorQuotationNotifications: List<Map<string, boolean>>;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationNotificationsAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_NOTIFICATIONS;\n}\n\nexport class SetIsGettingVendorQuotationMyLogoAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_MY_LOGO;\n\n  constructor(\n      public payload: {\n        isGettingVendorQuotationMyLogo: boolean;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationMyLogoSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_MY_LOGO_SUCCEEDED;\n\n  constructor(\n      public payload: {\n        vendorQuotationMyLogo: object;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationMyLogoAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_MY_LOGO;\n}\n\nexport class SetIsGettingVendorQuotationBidEmailAction implements IAction {\n  public type = AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_BID_EMAIL;\n\n  constructor(\n      public payload: {\n        isGettingVendorQuotationBidEmail: boolean;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationBidEmailSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_BID_EMAIL_SUCCEEDED;\n\n  constructor(\n      public payload: {\n        vendorQuotationBidEmail: Map<string, any>;\n      }\n  ) {}\n}\n\nexport class GetVendorQuotationBidEmailAction implements IAction {\n  public type = AccountActionTypes.GET_VENDOR_QUOTATION_BID_EMAIL;\n}\n\n// manufacturer discounts\nexport class SearchManufacturerDiscountsAction implements IAction {\n  public type = AccountActionTypes.SEARCH_MANUFACTURER_DISCOUNTS;\n}\n\nexport class SetIsSearchingManufacturerDiscountsAction implements IAction {\n  public type = AccountActionTypes.SET_IS_SEARCHING_MANUFACTURER_DISCOUNTS;\n  constructor(\n    public payload: {\n      isSearchingManufacturerDiscounts: boolean;\n    }\n  ) {}\n}\n\nexport class SearchManufacturerDiscountsSucceededAction implements IAction {\n  public type = AccountActionTypes.SEARCH_MANUFACTURER_DISCOUNTS_SUCCEEDED;\n  constructor(\n    public payload: {\n      manufacturerDiscounts: List<IMap<any>>;\n    }\n  ) {}\n}\n\nexport class GetFirmEmailSettingAction implements IAction {\n  public type = AccountActionTypes.GET_FIRM_EMAIL_SETTING;\n  constructor(public payload: { firmId: number }) {}\n}\n\nexport class GetFirmEmailSettingSucceededAction implements IAction {\n  public type = AccountActionTypes.GET_FIRM_EMAIL_SETTING_SUCCEEDED;\n  constructor(public payload: any) {}\n}\n","import actions from './actions';\nimport * as _actionTypes from './actionTypes';\nexport { default as defaultShouldAsyncValidate } from './defaultShouldAsyncValidate';\nexport { default as defaultShouldValidate } from './defaultShouldValidate';\nexport { default as defaultShouldError } from './defaultShouldError';\nexport { default as defaultShouldWarn } from './defaultShouldWarn';\nexport { default as Form } from './Form';\nexport { default as FormName } from './FormName';\nexport { default as FormSection } from './FormSection';\nexport { default as SubmissionError } from './SubmissionError'; // alias for propTypes\n\nexport { default as propTypes, fieldInputPropTypes, fieldMetaPropTypes, fieldPropTypes, fieldArrayFieldsPropTypes, fieldArrayMetaPropTypes, fieldArrayPropTypes, formPropTypes } from './propTypes';\nexport { default as Field } from './Field';\nexport { default as Fields } from './Fields';\nexport { default as FieldArray } from './FieldArray';\nexport { default as formValueSelector } from './formValueSelector';\nexport { default as formValues } from './formValues';\nexport { default as getFormError } from './getFormError';\nexport { default as getFormNames } from './getFormNames';\nexport { default as getFormValues } from './getFormValues';\nexport { default as getFormInitialValues } from './getFormInitialValues';\nexport { default as getFormSyncErrors } from './getFormSyncErrors';\nexport { default as getFormMeta } from './getFormMeta';\nexport { default as getFormAsyncErrors } from './getFormAsyncErrors';\nexport { default as getFormSyncWarnings } from './getFormSyncWarnings';\nexport { default as getFormSubmitErrors } from './getFormSubmitErrors';\nexport { default as isAsyncValidating } from './isAsyncValidating';\nexport { default as isDirty } from './isDirty';\nexport { default as isInvalid } from './isInvalid';\nexport { default as isPristine } from './isPristine';\nexport { default as isValid } from './isValid';\nexport { default as isSubmitting } from './isSubmitting';\nexport { default as hasSubmitSucceeded } from './hasSubmitSucceeded';\nexport { default as hasSubmitFailed } from './hasSubmitFailed';\nexport { default as reduxForm } from './reduxForm';\nexport { default as reducer } from './reducer';\nexport { default as values } from './values';\nexport var actionTypes = _actionTypes;\nexport var arrayInsert = actions.arrayInsert;\nexport var arrayMove = actions.arrayMove;\nexport var arrayPop = actions.arrayPop;\nexport var arrayPush = actions.arrayPush;\nexport var arrayRemove = actions.arrayRemove;\nexport var arrayRemoveAll = actions.arrayRemoveAll;\nexport var arrayShift = actions.arrayShift;\nexport var arraySplice = actions.arraySplice;\nexport var arraySwap = actions.arraySwap;\nexport var arrayUnshift = actions.arrayUnshift;\nexport var autofill = actions.autofill;\nexport var blur = actions.blur;\nexport var change = actions.change;\nexport var clearAsyncError = actions.clearAsyncError;\nexport var clearFields = actions.clearFields;\nexport var clearSubmit = actions.clearSubmit;\nexport var clearSubmitErrors = actions.clearSubmitErrors;\nexport var destroy = actions.destroy;\nexport var focus = actions.focus;\nexport var initialize = actions.initialize;\nexport var registerField = actions.registerField;\nexport var reset = actions.reset;\nexport var resetSection = actions.resetSection;\nexport var setSubmitFailed = actions.setSubmitFailed;\nexport var setSubmitSucceeded = actions.setSubmitSucceeded;\nexport var startAsyncValidation = actions.startAsyncValidation;\nexport var startSubmit = actions.startSubmit;\nexport var stopAsyncValidation = actions.stopAsyncValidation;\nexport var stopSubmit = actions.stopSubmit;\nexport var submit = actions.submit;\nexport var touch = actions.touch;\nexport var unregisterField = actions.unregisterField;\nexport var untouch = actions.untouch;\nexport var updateSyncWarnings = actions.updateSyncWarnings;\nexport var updateSyncErrors = actions.updateSyncErrors;","import {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n  IAtsRequestInit,\n  IAtsApiCallOptions,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Error, Office, User, ListItem, AuthObject,\n} from '../../models';\n\nimport {\n  Collection, List,\n} from 'immutable';\nimport { SiteName } from '../../constants';\n\n\nexport default {};\n\nexport enum AtsActionTypes {\n  INIT = 'INIT',\n  CHANGE_SITE = 'CHANGE_SITE',\n  CHANGE_LABEL = 'CHANGE_LABEL',\n  ENV_LOADED = 'ENV_LOADED',\n  CONFIG_LOADED = 'CONFIG_LOADED',\n  SET_UNGATED_CURRENCY = 'SET_UNGATED_CURRENCY',\n  USER_LOG_IN = 'USER_LOG_IN',\n  USER_LOG_IN_AS = 'USER_LOG_IN_AS',\n  USER_LOG_OUT = 'USER_LOG_OUT',\n  APP_LOGGED_IN = 'APP_LOGGED_IN',\n  USER_LOGGED_IN = 'USER_LOGGED_IN',\n  USER_REFRESH = 'USER_REFRESH',\n  USER_TOKEN_REFRESHED = 'USER_TOKEN_REFRESHED',\n  APP_LOGGED_OUT = 'APP_LOGGED_OUT',\n  USER_LOGGED_OUT = 'USER_LOGGED_OUT',\n  USER_REFRESH_ERROR = 'USER_REFRESH_ERROR',\n  APP_LOGIN_ERROR = 'APP_LOGIN_ERROR',\n  USER_LOGIN_ERROR = 'USER_LOGIN_ERROR',\n  USER_FORGOTPASSWORD_ERROR = 'USER_FORGOTPASSWORD_ERROR',\n  USER_RESETPASSWORD_ERROR = 'USER_RESETPASSWORD_ERROR',\n  USER_TOKEN_ERROR = 'USER_TOKEN_ERROR',\n  ATS_API_CALL = 'ATS_API_CALL',\n  DIRECT_API_CALL = 'DIRECT_API_CALL',\n  API_CALL = 'API_CALL',\n  DEPRECATED_API_CALL = 'DEPRECATED_API_CALL',\n  API_RESPONSE = 'API_RESPONSE',\n  API_RESPONSE_DATA = 'API_RESPONSE_DATA',\n  API_RESPONSE_ERROR = 'API_RESPONSE_ERROR',\n  LOG_IN_AS_AND_REDIRECT = 'LOG_IN_AS_AND_REDIRECT',\n  USER_FORGOT_PASSWORD = 'USER_FORGOT_PASSWORD',\n  USER_RESET_PASSWORD = 'USER_RESET_PASSWORD',\n  USER_RESET_PASSWORD_SUCCEEDED = 'USER_RESET_PASSWORD_SUCCEEDED',\n  USER_CHECK_EMAIL_ALREADY_EXISTS = 'USER_CHECK_EMAIL_ALREADY_EXISTS',\n  REGISTER_USER = 'REGISTER_USER',\n  REGISTER_USER_SUCCEEDED = 'REGISTER_USER_SUCCEEDED',\n  GET_FIRM_TYPES = 'GET_FIRM_TYPES',\n  GET_FIRM_TYPES_SUCCEEDED = 'GET_FIRM_TYPES_SUCCEEDED',\n  RESET_REGISTER_USER = 'RESET_REGISTER_USER',\n  VERIFY_EMAIL_BY_KEY = 'VERIFY_EMAIL_BY_KEY',\n  SET_TOKEN = 'SET_TOKEN',\n  SET_APP_TOKEN = 'SET_APP_TOKEN',\n  REFRESH_TOKEN = 'REFRESH_TOKEN',\n  VERIFY_TOKEN = 'VERIFY_TOKEN',\n  VERIFY_TOKEN_SUCCEEDED = 'VERIFY_TOKEN_SUCCEEDED',\n  SET_APP_LOADING_STATUS = 'SET_APP_LOADING_STATUS',\n  SET_BAD_TOKEN = 'SET_BAD_TOKEN',\n  GET_DOMAIN_SUCCEEDED = 'GET_DOMAIN_SUCCEEDED',\n  RESEND_VERIFICATION_EMAIL = 'RESEND_VERIFICATION_EMAIL',\n  LOGIN_WITH_EMAIL = 'LOGIN_WITH_EMAIL',\n  SET_IS_VERIFYING_USER = 'SET_IS_VERIFYING_USER',\n  MOVE_SESSION_SPEC = 'MOVE_SESSION_SPEC',\n  PRESET_TOKEN = 'PRESET_TOKEN',\n  ADD_INTEGRATED_APP_CONFIG = 'ADD_INTEGRATED_APP_CONFIG',\n  GET_CONSENT_STATUS = 'GET_CONSENT_STATUS',\n  UPDATE_CONSENT_STATUS = 'UPDATE_CONSENT_STATUS',\n}\n\nexport class GetConsentStatusAction implements IAction {\n  public readonly type = AtsActionTypes.GET_CONSENT_STATUS;\n}\n\nexport class UpdateConsentStatusAction implements IAction {\n  public readonly type = AtsActionTypes.UPDATE_CONSENT_STATUS;\n\n  constructor(\n    public payload: {\n      consent: boolean;\n      resolve?: (...args: any[]) => void;\n      reject?: (...args: any[]) => void;\n    }\n  ) {}\n}\n\nexport class AddIntegratedAppConfigAction implements IAction {\n  public readonly type = AtsActionTypes.ADD_INTEGRATED_APP_CONFIG;\n\n  constructor(\n    public payload: {\n      appType: SiteName,\n      config: IMap<IConfig>,\n    }\n  ) {}\n}\n\nexport class SetUngatedCurrencyAction implements IAction {\n  public readonly type = AtsActionTypes.SET_UNGATED_CURRENCY;\n\n  constructor(\n    public payload: {\n      ungatedCurrency: string\n    }\n  ) {}\n}\n\nexport class GetDomainSucceededAction implements IAction {\n  public readonly type = AtsActionTypes.GET_DOMAIN_SUCCEEDED;\n\n  constructor(\n    public payload: string\n  ) {}\n}\nexport class SetBadTokenAction implements IAction {\n  public readonly type = AtsActionTypes.SET_BAD_TOKEN;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetAppLoadingStatusAction implements IAction {\n  public readonly type = AtsActionTypes.SET_APP_LOADING_STATUS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class VerifyEmailByKeyAction implements IAction {\n  public readonly type = AtsActionTypes.VERIFY_EMAIL_BY_KEY;\n\n  constructor(\n    public payload: {\n      key: string;\n      email: string;\n    }\n  ) {}\n}\n\nexport class GetFirmTypesSucceededAction implements IAction {\n  public readonly type = AtsActionTypes.GET_FIRM_TYPES_SUCCEEDED;\n\n  constructor(\n    public payload: List<IMap<ListItem>>\n  ) {}\n}\n\nexport class GetFirmTypesAction implements IAction {\n  public readonly type = AtsActionTypes.GET_FIRM_TYPES;\n}\n\nexport class RegisterUserAction implements IAction {\n  public readonly type = AtsActionTypes.REGISTER_USER;\n\n  constructor(\n    public payload: {\n      user: any;\n      resolve?: (...args: any[]) => void;\n      reject?: (...args: any[]) => void;\n      moveSessionSpec?: boolean;\n      guestSpecId?: number;\n      guestSpecName?: string;\n    }\n  ) {}\n}\n\nexport class RegisterUserSucceededAction implements IAction {\n  public readonly type = AtsActionTypes.REGISTER_USER_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<User>\n  ) {}\n}\n\nexport class ResetRegisterUserAction implements IAction {\n  public readonly type = AtsActionTypes.RESET_REGISTER_USER;\n\n}\n\nexport class InitAction implements IAction {\n  public readonly type = AtsActionTypes.INIT;\n}\n\nexport class EnvLoadedAction implements IAction {\n  public readonly type = AtsActionTypes.ENV_LOADED;\n\n  constructor(\n    public payload: {\n      env: object,\n    }\n  ) {}\n}\n\nexport class ConfigLoadedAction implements IAction {\n  public readonly type = AtsActionTypes.CONFIG_LOADED;\n\n  constructor(\n    public payload: {\n      config: IMap<IConfig>,\n    }\n  ) {}\n}\n\nexport class ChangeSiteAction implements IAction {\n  public readonly type = AtsActionTypes.CHANGE_SITE;\n\n  constructor(\n    public payload: {\n      site: string,\n    }\n  ) {}\n}\n\n\nexport class ChangeLabelAction implements IAction {\n  public readonly type = AtsActionTypes.CHANGE_LABEL;\n\n  constructor(\n    public payload: {\n      label: string,\n    }\n  ) {}\n}\n\nexport class RefreshTokenAction implements IAction {\n  public readonly type = AtsActionTypes.REFRESH_TOKEN;\n    constructor(\n        public payload: {\n            token?: string,\n            isGuestToken?: boolean,\n        }\n    ) {}\n}\n\nexport class VerifyTokenAction implements IAction {\n  public readonly type = AtsActionTypes.VERIFY_TOKEN;\n\n  constructor(\n    public payload: {\n      token: string,\n      isGuestToken?: boolean,\n    }\n  ) {}\n}\n\nexport class VerifyTokenSucceededAction implements IAction {\n  public readonly type = AtsActionTypes.VERIFY_TOKEN_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      identity: IMap<AuthObject>,\n      isGuestToken?: boolean\n    }\n  ) {}\n}\n\nexport class UserLogInAsAction implements IAction {\n  public type = AtsActionTypes.USER_LOG_IN_AS;\n\n  constructor(\n    public payload: {\n      username: string,\n    },\n    public callback?: (...args: any[]) => void,\n  ) {\n  }\n}\n\nexport class UserLogInAction implements IAction {\n  public readonly type = AtsActionTypes.USER_LOG_IN;\n\n  constructor(\n    public payload: {\n      username?: string,\n      password?: string,\n      refreshToken?: string,\n      resolve?: () => void,\n      reject?: () => void,\n      server?: string,\n    }\n  ) {}\n}\n\nexport class UserForgotPasswordAction implements IAction {\n  public readonly type = AtsActionTypes.USER_FORGOT_PASSWORD;\n\n  constructor(\n    public payload: {\n      email: string,\n      server?: string,\n    }\n  ) {}\n}\n\nexport class UserResetPasswordAction implements IAction {\n  public readonly type = AtsActionTypes.USER_RESET_PASSWORD;\n\n  constructor(\n    public payload: {\n      password: string,\n      key: string,\n      server?: string,\n    }\n  ) {}\n}\n\nexport class UserResetPasswordSucceededAction implements IAction {\n  public readonly type = AtsActionTypes.USER_RESET_PASSWORD_SUCCEEDED;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class HasServerAction implements IAction {\n  public type: string;\n  constructor(\n    public payload: {\n      server?: string,\n      loading?: boolean\n    }\n  ) {}\n}\n\nexport class HasTokenAction extends HasServerAction {\n  public type: string;\n  constructor(\n    public payload: {\n      token: string,\n      server?: string,\n      loading?: boolean\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class HasErrorAction extends HasServerAction {\n  public type: string;\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class AppLoggedInAction extends HasTokenAction {\n  public readonly type = AtsActionTypes.APP_LOGGED_IN;\n\n  constructor(\n    public payload: {\n      token: string,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\nexport class AppLoggedOutAction extends HasServerAction {\n  public readonly type = AtsActionTypes.APP_LOGGED_OUT;\n\n  constructor(\n    public payload: {\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserLoggedInAction extends HasTokenAction {\n  public readonly type = AtsActionTypes.USER_LOGGED_IN;\n\n  constructor(\n    public payload: {\n      token: string,\n      server?: string,\n      loading?: boolean\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserLogOutAction extends HasServerAction {\n  public readonly type = AtsActionTypes.USER_LOG_OUT;\n\n  constructor(\n    public payload: {\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserLoggedOutAction extends HasServerAction {\n  public readonly type = AtsActionTypes.USER_LOGGED_OUT;\n\n  constructor(\n    public payload: {\n      server?: string,\n      loading?: boolean\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserRefreshErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.USER_REFRESH_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n      loading?: boolean;\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class AppLoginErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.APP_LOGIN_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserLoginErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.USER_LOGIN_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserForgotPasswordErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.USER_FORGOTPASSWORD_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserResetPasswordErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.USER_FORGOTPASSWORD_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UserTokenErrorAction extends HasErrorAction {\n  public readonly type = AtsActionTypes.USER_TOKEN_ERROR;\n\n  constructor(\n    public payload: {\n      error: IMap<Error>,\n      server?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class HasKeyAction implements IAction {\n  public type;\n  constructor(\n    public payload: {\n      key?: string | string[],\n    }\n  ) {}\n}\n\nexport class BaseAtsApiCallAction extends HasKeyAction {\n  public type;\n\n  constructor(\n    public payload: {\n      key?: string | string[],\n      resultKey?: string | string[],\n      server?: string,\n      payload?: IAtsApiCallOptions | Array<any|IAtsApiCallOptions>,\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    },\n    public callback?: (...args: any[]) => void,\n  ) {\n    super(payload);\n  }\n}\n\nexport class ApiCallAction extends BaseAtsApiCallAction {\n  public readonly type = AtsActionTypes.API_CALL;\n\n  constructor(\n    public payload: {\n      key?: string | string[],\n      resultKey?: string | string[],\n      server?: string,\n      payload?: IAtsApiCallOptions | Array<any|IAtsApiCallOptions>,\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    },\n    public callback?: (...args: any[]) => void,\n  ) {\n    super(payload, callback);\n  }\n}\n\nexport interface IBaseAtsApiCallPayload {\n  key?: string | string[];\n  resultKey?: string | string[];\n  server?: string;\n  payload?: IAtsApiCallOptions | Array<any|IAtsApiCallOptions>;\n  resolve?: (...args: any[]) => void;\n  reject?: (...args: any[]) => void;\n}\n\nexport interface IBaseAtsApiCall {\n  payload: IMapNonRecursive<IBaseAtsApiCallPayload>;\n}\n\nexport class AtsApiCallAction extends BaseAtsApiCallAction {\n  public readonly type = AtsActionTypes.ATS_API_CALL;\n\n  constructor(\n    public payload: IBaseAtsApiCallPayload,\n    public callback?: (...args: any[]) => void,\n  ) {\n    super(payload, callback);\n  }\n}\n\ninterface IDirectApiCallPayloadBase extends Omit<IAtsApiCallOptions, 'queries' | 'body'> {}\n\ninterface IDirectApiCallPayloadGet extends IDirectApiCallPayloadBase {\n  method: 'get';\n  queries?: object;\n  body?: never;\n}\n\ninterface IDirectApiCallPayloadMutate extends IDirectApiCallPayloadBase {\n  method: 'post' | 'put' | 'delete' | 'patch';\n  queries?: never;\n  body?: object;\n}\n\nexport type IDirectApiCallPayload = IDirectApiCallPayloadGet | IDirectApiCallPayloadMutate;\n\nexport interface IDirectApiCallActionPayload extends Omit<IBaseAtsApiCallPayload, 'payload' | 'server'> {\n  payload?: IDirectApiCallPayload;\n  // when true, a failed call skips the global error notification (the error is still recorded)\n  suppressGlobalErrorNotification?: boolean;\n}\n\nexport class DirectApiCallAction {\n  public readonly type = AtsActionTypes.DIRECT_API_CALL;\n\n  constructor(\n    public payload: IDirectApiCallActionPayload,\n    public callback?: (...args: any[]) => void,\n  ) {}\n}\n\nexport class DeprecatedApiCallAction extends HasKeyAction {\n  public readonly type = AtsActionTypes.DEPRECATED_API_CALL;\n\n  constructor(\n    public payload: {\n      key?: string | string[],\n      resultKey?: string | string[],\n      method?: string,\n      server?: string,\n      env?: string,\n      url: string,\n      options?: IAtsRequestInit,\n      request?: {\n        url: string,\n        data: any,\n      },\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    },\n    public callback?: (...args: any[]) => void,\n  ) {\n    super(payload);\n  }\n}\n\nexport class ApiResponseAction implements IAction {\n  public readonly type = AtsActionTypes.API_RESPONSE;\n  private readonly defaultPayload = {\n    key: ['data', 'default'],\n  };\n\n  constructor(\n    public payload: {\n      server?: string,\n      key?: string | string[],\n      value: Collection<any, any>,\n    }\n  ) {\n    Object.assign(this, {\n      payload: {\n        ...this.defaultPayload,\n        ...payload,\n      },\n    });\n  }\n}\n\nexport class ApiResponseDataAction implements IAction {\n  public readonly type = AtsActionTypes.API_RESPONSE_DATA;\n  private readonly defaultPayload = {\n  };\n\n  constructor(\n    public payload: {\n      server?: string,\n      key?: string | string[],\n      resultKey?: string | string[],\n      value: Collection<any, any>,\n      apiCall?: DeprecatedApiCallAction,\n    }\n  ) {\n    Object.assign(this, {\n      payload: {\n        ...this.defaultPayload,\n        ...payload,\n      },\n    });\n  }\n}\n\nexport class ApiResponseErrorAction implements IAction {\n  public readonly type = AtsActionTypes.API_RESPONSE_ERROR;\n  private readonly defaultPayload = {\n  };\n\n  constructor(\n    public payload: {\n      server?: string,\n      error: IMap<Error>,\n      key?: string | string[],\n      resultKey?: string | string[],\n      apiCall?: DeprecatedApiCallAction,\n    }\n  ) {\n    Object.assign(this, {\n      payload: {\n        ...this.defaultPayload,\n        ...payload,\n      },\n    });\n  }\n}\n\nexport class LogInAsAndRedirectAction extends UserLogInAsAction {\n  public readonly type = AtsActionTypes.LOG_IN_AS_AND_REDIRECT;\n}\n\nexport class CheckEmailAlreadyExistsAction implements IAction {\n  public readonly type = AtsActionTypes.USER_CHECK_EMAIL_ALREADY_EXISTS;\n\n  constructor(\n    public payload: {\n      email: string,\n      refreshToken?: string,\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n      server?: string,\n    }\n  ) {}\n}\n\nexport class SetTokenAction implements IAction {\n  public readonly type = AtsActionTypes.SET_TOKEN;\n  constructor(\n    public payload: {\n      token: string,\n      server?: string,\n    }\n  ) {\n  }\n}\n\nexport class PresetTokenAction implements IAction {\n    public readonly type = AtsActionTypes.PRESET_TOKEN;\n    constructor(\n        public payload: {\n            token: string,\n            server?: string,\n        }\n    ) {\n    }\n}\n\nexport class SetAppTokenAction implements IAction {\n  public readonly type = AtsActionTypes.SET_APP_TOKEN;\n  constructor(\n    public payload: {\n      token: string,\n      server?: string,\n    }\n  ) {\n  }\n}\n\nexport class ResendVerificationEmailAction implements IAction {\n    public readonly type = AtsActionTypes.RESEND_VERIFICATION_EMAIL;\n    constructor(\n        public payload: {\n            email: string;\n        }\n    ) {\n    }\n}\n\nexport class LoginWithEmailAction implements IAction {\n    public readonly type = AtsActionTypes.LOGIN_WITH_EMAIL;\n    constructor(\n        public payload: {\n            username?: string,\n            password?: string,\n        }\n    ) {\n    }\n}\n\nexport class SetIsVerifyingUserAction implements IAction {\n    public readonly type = AtsActionTypes.SET_IS_VERIFYING_USER;\n    constructor(\n        public payload: boolean\n    ) {\n    }\n}\n\nexport class MoveSessionSpecAction implements IAction {\n    public readonly type = AtsActionTypes.MOVE_SESSION_SPEC;\n    constructor(\n        public payload: {\n            userId: number,\n            sessionId: string,\n            // token: string,\n            resolve?: (...args: any[]) => void;\n            reject?: (...args: any[]) => void;\n        }\n    ) {\n    }\n}\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer;\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers);\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var keys = Object.keys(actionCreators);\n  var boundActionCreators = {};\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error(\"Dispatching while constructing your middleware is not allowed. \" + \"Other middleware would not be applied to this dispatch.\");\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread({}, store, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n  warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { createStore, combineReducers, bindActionCreators, applyMiddleware, compose, ActionTypes as __DO_NOT_USE__ActionTypes };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    function next() {\r\n        while (env.stack.length) {\r\n            var rec = env.stack.pop();\r\n            try {\r\n                var result = rec.dispose && rec.dispose.call(rec.value);\r\n                if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n};\r\n","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n  var hasNativeReflectConstruct = isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return possibleConstructorReturn(this, result);\n  };\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - https://getbootstrap.com/docs/4.3/layout/grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport requirePropFactory from '../utils/requirePropFactory';\nvar SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n  var styles = {};\n  GRID_SIZES.forEach(function (size) {\n    var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n    if (size === true) {\n      // For the auto layouting\n      styles[key] = {\n        flexBasis: 0,\n        flexGrow: 1,\n        maxWidth: '100%'\n      };\n      return;\n    }\n\n    if (size === 'auto') {\n      styles[key] = {\n        flexBasis: 'auto',\n        flexGrow: 0,\n        maxWidth: 'none'\n      };\n      return;\n    } // Keep 7 significant numbers.\n\n\n    var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n    // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n    styles[key] = {\n      flexBasis: width,\n      flexGrow: 0,\n      maxWidth: width\n    };\n  }); // No need for a media query for the first size.\n\n  if (breakpoint === 'xs') {\n    _extends(globalStyles, styles);\n  } else {\n    globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n  }\n}\n\nfunction getOffset(val) {\n  var div = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var parse = parseFloat(val);\n  return \"\".concat(parse / div).concat(String(val).replace(String(parse), '') || 'px');\n}\n\nfunction generateGutter(theme, breakpoint) {\n  var styles = {};\n  SPACINGS.forEach(function (spacing) {\n    var themeSpacing = theme.spacing(spacing);\n\n    if (themeSpacing === 0) {\n      return;\n    }\n\n    styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n      margin: \"-\".concat(getOffset(themeSpacing, 2)),\n      width: \"calc(100% + \".concat(getOffset(themeSpacing), \")\"),\n      '& > $item': {\n        padding: getOffset(themeSpacing, 2)\n      }\n    };\n  });\n  return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nexport var styles = function styles(theme) {\n  return _extends({\n    /* Styles applied to the root element */\n    root: {},\n\n    /* Styles applied to the root element if `container={true}`. */\n    container: {\n      boxSizing: 'border-box',\n      display: 'flex',\n      flexWrap: 'wrap',\n      width: '100%'\n    },\n\n    /* Styles applied to the root element if `item={true}`. */\n    item: {\n      boxSizing: 'border-box',\n      margin: '0' // For instance, it's useful when used with a `figure` element.\n\n    },\n\n    /* Styles applied to the root element if `zeroMinWidth={true}`. */\n    zeroMinWidth: {\n      minWidth: 0\n    },\n\n    /* Styles applied to the root element if `direction=\"column\"`. */\n    'direction-xs-column': {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the root element if `direction=\"column-reverse\"`. */\n    'direction-xs-column-reverse': {\n      flexDirection: 'column-reverse'\n    },\n\n    /* Styles applied to the root element if `direction=\"rwo-reverse\"`. */\n    'direction-xs-row-reverse': {\n      flexDirection: 'row-reverse'\n    },\n\n    /* Styles applied to the root element if `wrap=\"nowrap\"`. */\n    'wrap-xs-nowrap': {\n      flexWrap: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `wrap=\"reverse\"`. */\n    'wrap-xs-wrap-reverse': {\n      flexWrap: 'wrap-reverse'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"center\"`. */\n    'align-items-xs-center': {\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-start\"`. */\n    'align-items-xs-flex-start': {\n      alignItems: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"flex-end\"`. */\n    'align-items-xs-flex-end': {\n      alignItems: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignItems=\"baseline\"`. */\n    'align-items-xs-baseline': {\n      alignItems: 'baseline'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"center\"`. */\n    'align-content-xs-center': {\n      alignContent: 'center'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-start\"`. */\n    'align-content-xs-flex-start': {\n      alignContent: 'flex-start'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"flex-end\"`. */\n    'align-content-xs-flex-end': {\n      alignContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-between\"`. */\n    'align-content-xs-space-between': {\n      alignContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `alignContent=\"space-around\"`. */\n    'align-content-xs-space-around': {\n      alignContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"center\"`. */\n    'justify-xs-center': {\n      justifyContent: 'center'\n    },\n\n    /* Styles applied to the root element if `justify=\"flex-end\"`. */\n    'justify-xs-flex-end': {\n      justifyContent: 'flex-end'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-between\"`. */\n    'justify-xs-space-between': {\n      justifyContent: 'space-between'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-around\"`. */\n    'justify-xs-space-around': {\n      justifyContent: 'space-around'\n    },\n\n    /* Styles applied to the root element if `justify=\"space-evenly\"`. */\n    'justify-xs-space-evenly': {\n      justifyContent: 'space-evenly'\n    }\n  }, generateGutter(theme, 'xs'), {}, theme.breakpoints.keys.reduce(function (accumulator, key) {\n    // Use side effect over immutability for better performance.\n    generateGrid(accumulator, theme, key);\n    return accumulator;\n  }, {}));\n};\nvar Grid = React.forwardRef(function Grid(props, ref) {\n  var _props$alignContent = props.alignContent,\n      alignContent = _props$alignContent === void 0 ? 'stretch' : _props$alignContent,\n      _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'stretch' : _props$alignItems,\n      classes = props.classes,\n      classNameProp = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$container = props.container,\n      container = _props$container === void 0 ? false : _props$container,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'row' : _props$direction,\n      _props$item = props.item,\n      item = _props$item === void 0 ? false : _props$item,\n      _props$justify = props.justify,\n      justify = _props$justify === void 0 ? 'flex-start' : _props$justify,\n      _props$lg = props.lg,\n      lg = _props$lg === void 0 ? false : _props$lg,\n      _props$md = props.md,\n      md = _props$md === void 0 ? false : _props$md,\n      _props$sm = props.sm,\n      sm = _props$sm === void 0 ? false : _props$sm,\n      _props$spacing = props.spacing,\n      spacing = _props$spacing === void 0 ? 0 : _props$spacing,\n      _props$wrap = props.wrap,\n      wrap = _props$wrap === void 0 ? 'wrap' : _props$wrap,\n      _props$xl = props.xl,\n      xl = _props$xl === void 0 ? false : _props$xl,\n      _props$xs = props.xs,\n      xs = _props$xs === void 0 ? false : _props$xs,\n      _props$zeroMinWidth = props.zeroMinWidth,\n      zeroMinWidth = _props$zeroMinWidth === void 0 ? false : _props$zeroMinWidth,\n      other = _objectWithoutProperties(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n\n  var className = clsx(classes.root, classNameProp, container && [classes.container, spacing !== 0 && classes[\"spacing-xs-\".concat(String(spacing))]], item && classes.item, zeroMinWidth && classes.zeroMinWidth, direction !== 'row' && classes[\"direction-xs-\".concat(String(direction))], wrap !== 'wrap' && classes[\"wrap-xs-\".concat(String(wrap))], alignItems !== 'stretch' && classes[\"align-items-xs-\".concat(String(alignItems))], alignContent !== 'stretch' && classes[\"align-content-xs-\".concat(String(alignContent))], justify !== 'flex-start' && classes[\"justify-xs-\".concat(String(justify))], xs !== false && classes[\"grid-xs-\".concat(String(xs))], sm !== false && classes[\"grid-sm-\".concat(String(sm))], md !== false && classes[\"grid-md-\".concat(String(md))], lg !== false && classes[\"grid-lg-\".concat(String(lg))], xl !== false && classes[\"grid-xl-\".concat(String(xl))]);\n  return React.createElement(Component, _extends({\n    className: className,\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Grid.propTypes = {\n  /**\n   * Defines the `align-content` style property.\n   * It's applied for all screen sizes.\n   */\n  alignContent: PropTypes.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n  /**\n   * Defines the `align-items` style property.\n   * It's applied for all screen sizes.\n   */\n  alignItems: PropTypes.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the component will have the flex *container* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  container: PropTypes.bool,\n\n  /**\n   * Defines the `flex-direction` style property.\n   * It is applied for all screen sizes.\n   */\n  direction: PropTypes.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n  /**\n   * If `true`, the component will have the flex *item* behavior.\n   * You should be wrapping *items* with a *container*.\n   */\n  item: PropTypes.bool,\n\n  /**\n   * Defines the `justify-content` style property.\n   * It is applied for all screen sizes.\n   */\n  justify: PropTypes.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `lg` breakpoint and wider screens if not overridden.\n   */\n  lg: PropTypes.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `md` breakpoint and wider screens if not overridden.\n   */\n  md: PropTypes.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `sm` breakpoint and wider screens if not overridden.\n   */\n  sm: PropTypes.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the space between the type `item` component.\n   * It can only be used on a type `container` component.\n   */\n  spacing: PropTypes.oneOf(SPACINGS),\n\n  /**\n   * Defines the `flex-wrap` style property.\n   * It's applied for all screen sizes.\n   */\n  wrap: PropTypes.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for the `xl` breakpoint and wider screens.\n   */\n  xl: PropTypes.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * Defines the number of grids the component is going to use.\n   * It's applied for all the screen sizes with the lowest priority.\n   */\n  xs: PropTypes.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n  /**\n   * If `true`, it sets `min-width: 0` on the item.\n   * Refer to the limitations section of the documentation to better understand the use case.\n   */\n  zeroMinWidth: PropTypes.bool\n} : void 0;\nvar StyledGrid = withStyles(styles, {\n  name: 'MuiGrid'\n})(Grid);\n\nif (process.env.NODE_ENV !== 'production') {\n  var requireProp = requirePropFactory('Grid');\n  StyledGrid.propTypes = _extends({}, StyledGrid.propTypes, {\n    alignContent: requireProp('container'),\n    alignItems: requireProp('container'),\n    direction: requireProp('container'),\n    justify: requireProp('container'),\n    lg: requireProp('item'),\n    md: requireProp('item'),\n    sm: requireProp('item'),\n    spacing: requireProp('container'),\n    wrap: requireProp('container'),\n    xs: requireProp('item'),\n    zeroMinWidth: requireProp('item')\n  });\n}\n\nexport default StyledGrid;","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport { Product, Option, Filter, FirmProduct, Series, HasId, XrefData, PureAttribute, PureAttributeOption, XrefProduct, Attribute, Package, PimIntegrationMap, Manufacturer, Category } from '../../models';\nimport { IPimReducerState } from './reducer';\nimport { CompetitorSponsor } from '../CrossRefModule/actions';\nimport PimAttribute from '../../models/PimAttribute';\nimport PimAttributeOption from '../../models/PimAttributeOption';\nimport MandatoryRecommendedAttributes from '../../models/MandatoryRecommendedAttributes';\nimport { IIntegrationMappingFields } from '../../models/PimIntegrationMap';\nimport { PimIntegrationType } from '../../containers/PimSeriesListPage/PimIntegrationDialog';\n\nexport default {};\n\nexport enum PimActionTypes {\n  GET_FIRM_PRODUCT_BY_ID = 'GET_FIRM_PRODUCT_BY_ID',\n  SET_IS_GETTING_FIRM_PRODUCT_BY_ID = 'SET_IS_GETTING_FIRM_PRODUCT_BY_ID',\n  GET_PACKAGE_BY_ID = 'GET_PACKAGE_BY_ID',\n  SET_IS_GETTING_PACKAGE_BY_ID = 'SET_IS_GETTING_PACKAGE_BY_ID',\n  ADD_FIRM_PRODUCT = 'ADD_FIRM_PRODUCT',\n  ADD_FIRM_PRODUCT_AND_ADD_TO_QUOTE = 'ADD_FIRM_PRODUCT_AND_ADD_TO_QUOTE',\n  EDIT_FIRM_PRODUCT = 'EDIT_FIRM_PRODUCT',\n  EDIT_FIRM_PRODUCT_AND_ADD_TO_QUOTE = 'EDIT_FIRM_PRODUCT_AND_ADD_TO_QUOTE',\n  EDIT_FIRM_PRODUCT_SUCCEEDED = 'EDIT_FIRM_PRODUCT_SUCCEEDED',\n  EDIT_FIRM_PRODUCT_OR_PACKAGE_SUCCEEDED = 'EDIT_FIRM_PRODUCT_OR_PACKAGE_SUCCEEDED',\n  UPDATE_QUOTE_ROW_WITH_PRODUCT = 'UPDATE_QUOTE_ROW_WITH_PRODUCT',\n  QUICK_SEARCH_PIM_PRODUCTS = 'QUICK_SEARCH_PIM_PRODUCTS',\n  CANCEL_QUICK_SEARCH_PIM_PRODUCTS = 'CANCEL_QUICK_SEARCH_PIM_PRODUCTS',\n  QUICK_SEARCH_PIM_PRODUCTS_LOADING = 'QUICK_SEARCH_PIM_PRODUCTS_LOADING',\n  QUICK_SEARCH_PIM_PRODUCTS_PACKAGES = 'QUICK_SEARCH_PIM_PRODUCTS_PACKAGES',\n  QUICK_SEARCH_PIM_PRODUCTS_PACKAGES_SUCCEEDED = 'QUICK_SEARCH_PIM_PRODUCTS_PACKAGES_SUCCEEDED',\n  RESET_QUOTE_SEARCH_PRODUCTS = 'RESET_QUOTE_SEARCH_PRODUCTS',\n  SEARCHING_PIM_PRODUCTS_PACKAGES = 'SEARCHING_PIM_PRODUCTS_PACKAGES',\n  QUICK_SEARCH_PIM_PRODUCTS_SUCCEEDED = 'QUICK_SEARCH_PIM_PRODUCTS_SUCCEEDED',\n  SEARCH_PARENT_SHARED_FIRM_PRODUCTS = 'SEARCH_PARENT_SHARED_FIRM_PRODUCTS',\n  SEARCH_PARENT_SHARED_FIRM_PRODUCTS_SUCCEEDED = 'SEARCH_PARENT_SHARED_FIRM_PRODUCTS_SUCCEEDED',\n  SEARCHING_PARENT_SHARED_FIRM_PRODUCTS = 'SEARCHING_PARENT_SHARED_FIRM_PRODUCTS',\n  GET_PRODUCTS_OF_PACKAGE = 'GET_PRODUCTS_OF_PACKAGE',\n  DELETE_FIRM_PRODUCT = 'DELETE_FIRM_PRODUCT',\n  DELETE_FIRM_PRODUCT_SUCCEEDED = 'DELETE_FIRM_PRODUCT_SUCCEEDED',\n  SEARCH_PIM_PRODUCTS = 'SEARCH_PIM_PRODUCTS',\n  SEARCH_PIM_PRODUCTS_SUCCEEDED = 'SEARCH_PIM_PRODUCTS_SUCCEEDED',\n  SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS = 'SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS',\n  RESET_SEARCH_PIM_PRODUCTS_SEARCH_BODY = 'RESET_SEARCH_PIM_PRODUCTS_SEARCH_BODY',\n  SEARCH_FIRM_PRODUCTS = 'SEARCH_FIRM_PRODUCTS',\n  SEARCH_FIRM_PRODUCTS_SUCCEEDED = 'SEARCH_FIRM_PRODUCTS_SUCCEEDED',\n  SEARCH_SHARED_PRODUCTS = 'SEARCH_SHARED_PRODUCTS',\n  SEARCH_SHARED_PRODUCTS_SUCCEEDED = 'SEARCH_SHARED_PRODUCTS_SUCCEEDED',\n  SEARCH_SHARED_PRODUCTS_FAILED = 'SEARCH_SHARED_PRODUCTS_FAILED',\n  RESET_PRODUCT_LIBRARY_RESULTS = 'RESET_PRODUCT_LIBRARY_RESULTS',\n  DELETE_FIRM_PRODUCT_AND_SEARCH_FIRM_PRODUCTS = 'DELETE_FIRM_PRODUCT_AND_SEARCH_FIRM_PRODUCTS',\n  QUICK_SEARCH_FIRM_PRODUCTS = 'QUICK_SEARCH_FIRM_PRODUCTS',\n  QUICK_SEARCH_FIRM_PRODUCTS_SUCCEEDED = 'QUICK_SEARCH_FIRM_PRODUCTS_SUCCEEDED',\n  ADD_FIRM_PRODUCT_FILE = 'ADD_FIRM_PRODUCT_FILE',\n  ADD_PIM_PRODUCT_OR_SERIES = 'ADD_PIM_PRODUCT_OR_SERIES',\n  ADD_PIM_PRODUCT_SUCCEEDED = 'ADD_PIM_PRODUCT_SUCCEEDED',\n  ADD_PIM_PRODUCT = 'ADD_PIM_PRODUCT',\n  ADD_PIM_PRODUCT_THEN_SEARCH_PIM_PRODUCTS = 'ADD_PIM_PRODUCT_THEN_SEARCH_PIM_PRODUCTS',\n  ADD_FIRM_PRODUCT_FILE_SUCCEEDED = 'ADD_FIRM_PRODUCT_FILE_SUCCEEDED',\n  DELETE_FIRM_PRODUCT_FILE = 'DELETE_FIRM_PRODUCT_FILE',\n  DELETE_FIRM_PRODUCT_FILE_SUCCEEDED = 'DELETE_FIRM_PRODUCT_FILE_SUCCEEDED',\n  ADD_FIRM_PRODUCT_FILE_AND_GET_MEDIA = 'ADD_FIRM_PRODUCT_FILE_AND_GET_MEDIA',\n  DELETE_FIRM_PRODUCT_FILE_AND_GET_MEDIA = 'DELETE_FIRM_PRODUCT_FILE_AND_GET_MEDIA',\n  FETCHING_FIRM_PRODUCTS = 'FETCHING_FIRM_PRODUCTS',\n  IS_ACTIVE_PRODUCT = 'IS_ACTIVE_PRODUCT',\n  IS_INACTIVE_PRODUCT = 'IS_INACTIVE_PRODUCT',\n  FIRM_PRODUCT_CREATED_PENDING_INDEX = 'FIRM_PRODUCT_CREATED_PENDING_INDEX',\n  GET_SERIES_FROM_PIM_SERVICE = 'GET_SERIES_FROM_PIM_SERVICE',\n  GET_SERIES_FROM_PIM_SERVICE_SUCCEEDED = 'GET_SERIES_FROM_PIM_SERVICE_SUCCEEDED',\n  GET_PIM_SERIES_DRAFT = 'GET_PIM_SERIES_DRAFT',\n  GET_PIM_SERIES_DRAFT_BY_PARENT_ID = 'GET_PIM_SERIES_DRAFT_BY_PARENT_ID',\n  SEARCH_SERIES = 'SEARCH_SERIES',\n  SEARCH_SERIES_SUCCEEDED = 'SEARCH_SERIES_SUCCEEDED',\n  SEARCH_SERIES_FAILED = 'SEARCH_SERIES_FAILED',\n  LOADING_SERIES = 'LOADING_SERIES',\n  LOADING_SERIES_FINISHED = 'LOADING_SERIES_FINISHED',\n  UPDATE_PIM_SERIES_SUCCEEDED = 'UPDATE_PIM_SERIES_SUCCEEDED',\n  DELETE_SERIES_BY_ID = 'DELETE_SERIES_BY_ID',\n  DELETE_SERIES_BY_ID_SUCCEEDED = 'DELETE_SERIES_BY_ID_SUCCEEDED',\n  DELETE_SERIES_BY_ID_AND_SEARCH_SERIES = 'DELETE_SERIES_BY_ID_AND_SEARCH_SERIES',\n  DUPLICATE_SERIES = 'DUPLICATE_SERIES',\n  RESET_PIM_STATE = 'RESET_PIM_STATE',\n  UPDATE_PIM_PRODUCT_SUCCEEDED = 'UPDATE_PIM_PRODUCT_SUCCEEDED',\n  SET_SELECTED_PIM_PRODUCT_ID = 'SET_SELECTED_PIM_PRODUCT_ID',\n  DELETE_SERIES_PRODUCT_BY_ID = 'DELETE_SERIES_PRODUCT_BY_ID',\n  DELETE_SERIES_PRODUCT_BY_ID_SUCCEEDED = 'DELETE_SERIES_PRODUCT_BY_ID_SUCCEEDED',\n  DELETE_SERIES_PRODUCT_BY_ID_THEN_SEARCH_SERIES_PRODUCTS = 'DELETE_SERIES_PRODUCT_BY_ID_THEN_SEARCH_SERIES_PRODUCTS',\n  DELETE_SERIES_BY_ID_AND_SEARCH_XREF = 'DELETE_SERIES_BY_ID_AND_SEARCH_XREF',\n  DELETE_SERIES_PRODUCT_BY_ID_AND_SEARCH_XREF = 'DELETE_SERIES_PRODUCT_BY_ID_AND_SEARCH_XREF',\n  SEARCH_RECOMMENDED_ATTRIBUTES = 'SEARCH_RECOMMENDED_ATTRIBUTES',\n  SEARCH_RECOMMENDED_ATTRIBUTES_SUCCESS = 'SEARCH_RECOMMENDED_ATTRIBUTES_SUCCESS',\n  GET_SERIES_SPECIFIC_MANDATORY_ATTRIBUTES = 'GET_SERIES_SPECIFIC_MANDATORY_ATTRIBUTES',\n  SKIP_ATTRIBUTE = 'SKIP_ATTRIBUTE',\n  SKIP_ALL_ATTRIBUTES = 'SKIP_ALL_ATTRIBUTES',\n  RESTORE_ATTRIBUTE = 'RESTORE_ATTRIBUTE',\n  SAVE_SKIP_ATTRIBUTES = 'SAVE_SKIP_ATTRIBUTES',\n  SEARCH_ATTRIBUTES = 'SEARCH_ATTRIBUTES',\n  SEARCH_ATTRIBUTES_SUCCEEDED = 'SEARCH_ATTRIBUTES_SUCCEEDED',\n  SET_IS_FETCHING_ATTRIBUTE_OPTIONS = 'SET_IS_FETCHING_ATTRIBUTE_OPTIONS',\n  SEARCH_ATTRIBUTE_OPTIONS = 'SEARCH_ATTRIBUTE_OPTIONS',\n  SEARCH_ATTRIBUTE_OPTIONS_SUCCEEDED = 'SEARCH_ATTRIBUTE_OPTIONS_SUCCEEDED',\n  SET_SELECTED_ATTRIBUTE_ID = 'SET_SELECTED_ATTRIBUTE_ID',\n  SEARCH_CATEGORIES = 'SEARCH_CATEGORIES',\n  GET_FIRM_SERIES = 'GET_FIRM_SERIES',\n  GET_FIRM_SERIES_SUCCEEDED = 'GET_FIRM_SERIES_SUCCEEDED',\n  GET_FIRM_SERIES_BY_ID_SUCCEEDED = 'GET_FIRM_SERIES_BY_ID_SUCCEEDED',\n  SET_SELECTED_FIRM_SERIES_ID = 'SET_SELECTED_FIRM_SERIES_ID',\n  ADD_FIRM_SERIES = 'ADD_FIRM_SERIES',\n  ADD_FIRM_SERIES_AND_REDIRECT = 'ADD_FIRM_SERIES_AND_REDIRECT',\n  ADD_FIRM_SERIES_SUCCEEDED = 'ADD_FIRM_SERIES_SUCCEEDED',\n  UPDATE_FIRM_SERIES = 'UPDATE_FIRM_SERIES',\n  UPDATE_FIRM_SERIES_AND_REDIRECT = 'UPDATE_FIRM_SERIES_AND_REDIRECT',\n  UPDATE_FIRM_SERIES_SUCCEEDED = 'UPDATE_FIRM_SERIES_SUCCEEDED',\n  SEARCH_FIRM_SERIES = 'SEARCH_FIRM_SERIES',\n  SEARCH_FIRM_SERIES_SUCCEEDED = 'SEARCH_FIRM_SERIES_SUCCEEDED',\n  SEARCH_FIRM_SERIES_FAILED = 'SEARCH_FIRM_SERIES_FAILED',\n  DELETE_FIRM_SERIES_BY_ID = 'DELETE_FIRM_SERIES_BY_ID',\n  DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES = 'DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES',\n  SET_IS_ADDING_PIM_SERIES_DRAFT = 'SET_IS_ADDING_PIM_SERIES_DRAFT',\n  ADD_PIM_SERIES_DRAFT_RAW = 'ADD_PIM_SERIES_DRAFT_RAW',\n  ADD_PIM_SERIES_DRAFT = 'ADD_PIM_SERIES_DRAFT',\n  ADD_PIM_SERIES_DRAFT_FOR_DELETE = 'ADD_PIM_SERIES_DRAFT_FOR_DELETE',\n  UPDATE_PIM_SERIES_DRAFT_RAW = 'UPDATE_PIM_SERIES_DRAFT_RAW',\n  UPDATE_PIM_SERIES_DRAFT = 'UPDATE_PIM_SERIES_DRAFT',\n  UPDATE_PIM_SERIES_DRAFT_FOR_DELETE = 'UPDATE_PIM_SERIES_DRAFT_FOR_DELETE',\n  DELETE_PIM_SERIES_DRAFT_BY_ID = 'DELETE_PIM_SERIES_DRAFT_BY_ID',\n  ADD_PIM_PRODUCT_DRAFT = 'ADD_PIM_PRODUCT_DRAFT',\n  ADD_PIM_PRODUCT_DRAFT_THEN_SEARCH_PIM_PRODUCTS = 'ADD_PIM_PRODUCT_DRAFT_THEN_SEARCH_PIM_PRODUCTS',\n  UPDATE_PIM_PRODUCT_DRAFT_RAW = 'UPDATE_PIM_PRODUCT_DRAFT_RAW',\n  UPDATE_PIM_PRODUCT_DRAFT = 'UPDATE_PIM_PRODUCT_DRAFT',\n  PUBLISH_SERIES_DRAFT = 'PUBLISH_SERIES_DRAFT',\n  CANCEL_PUBLISH_SERIES_DRAFT_POLLING = 'CANCEL_PUBLISH_SERIES_DRAFT_POLLING',\n  SET_IS_PUBLISHING = 'SET_IS_PUBLISHING',\n  GET_PRODUCT_BY_ID = 'GET_PRODUCT_BY_ID',\n  GET_PRODUCT_BY_ID_SUCCEEDED = 'GET_PRODUCT_BY_ID_SUCCEEDED',\n  GET_PRODUCT_BY_ID_FAILED = 'GET_PRODUCT_BY_ID_FAILED',\n  RESET_PRODUCT = 'RESET_PRODUCT',\n  GET_SERIES_DETAILS = 'GET_SERIES_DETAILS',\n  GET_SERIES_DUPLICATE_PRODUCTS_BY_ID = 'GET_SERIES_DUPLICATE_PRODUCTS_BY_ID',\n  GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_SUCCEEDED = 'GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_SUCCEEDED',\n  GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_FAILED = 'GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_FAILED',\n  SET_IS_GETTING_SERIES_DUPLICATE_PRODUCTS_BY_ID = 'SET_IS_GETTING_SERIES_DUPLICATE_PRODUCTS_BY_ID',\n  CANCEL_GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_POLLING = 'CANCEL_GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_POLLING',\n  MERGE_PRODUCTS = 'MERGE_PRODUCTS',\n  SET_IS_MERGING_PRODUCTS = 'SET_IS_MERGING_PRODUCTS',\n  SET_PRIMARY_MERGE_PRODUCT = 'SET_PRIMARY_MERGE_PRODUCT',\n  GET_MANUFACTURER_PRICE_INVISIBILITY_SUCCEEDED = 'GET_MANUFACTURER_PRICE_INVISIBILITY_SUCCEEDED',\n  UPDATE_STORE_FIRM_PRODUCT = 'UPDATE_STORE_FIRM_PRODUCT',\n\n  SEARCH_ALL_ATTRIBUTES = 'SEARCH_ALL_ATTRIBUTES',\n  SEARCH_ALL_ATTRIBUTES_SUCCEEDED = 'SEARCH_ALL_ATTRIBUTES_SUCCEEDED',\n  SET_IS_SEARCHING_ALL_ATTRIBUTES = 'SET_IS_SEARCHING_ALL_ATTRIBUTES',\n  SEARCH_ALL_ATTRIBUTES_SECONDARY = 'SEARCH_ALL_ATTRIBUTES_SECONDARY',\n  SEARCH_ALL_ATTRIBUTES_SUCCEEDED_SECONDARY = 'SEARCH_ALL_ATTRIBUTES_SUCCEEDED_SECONDARY',\n  SET_IS_SEARCHING_ALL_ATTRIBUTES_SECONDARY = 'SET_IS_SEARCHING_ALL_ATTRIBUTES_SECONDARY',\n  SET_SELECTED_PURE_ATTRIBUTE = 'SET_SELECTED_PURE_ATTRIBUTE',\n  VALIDATE_ATTRIBUTE_EXISTS = 'VALIDATE_ATTRIBUTE_EXISTS',\n  SET_IS_CREATING_ATTRIBUTE = 'SET_IS_CREATING_ATTRIBUTE',\n  CREATE_ATTRIBUTE = 'CREATE_ATTRIBUTE',\n  CREATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES = 'CREATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES',\n  DELETE_ATTRIBUTE_BY_ID = 'DELETE_ATTRIBUTE_BY_ID',\n  DELETE_ATTRIBUTE_BY_ID_THEN_SEARCH_ATTRIBUTES = 'DELETE_ATTRIBUTE_BY_ID_THEN_SEARCH_ATTRIBUTES',\n  UPDATE_ATTRIBUTE = 'UPDATE_ATTRIBUTE',\n  UPDATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES = 'UPDATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES',\n\n  SEARCH_ALL_ATTRIBUTE_OPTIONS = 'SEARCH_ALL_ATTRIBUTE_OPTIONS',\n  SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED = 'SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED',\n  SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS = 'SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS',\n  SEARCH_ALL_ATTRIBUTE_OPTIONS_SECONDARY = 'SEARCH_ALL_ATTRIBUTE_OPTIONS_SECONDARY',\n  SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED_SECONDARY = 'SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED_SECONDARY',\n  SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS_SECONDARY = 'SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS_SECONDARY',\n  VALIDATE_ATTRIBUTE_OPTION_EXISTS = 'VALIDATE_ATTRIBUTE_OPTION_EXISTS',\n  SET_SELECTED_PURE_ATTRIBUTE_OPTION = 'SET_SELECTED_PURE_ATTRIBUTE_OPTION',\n  CREATE_ATTRIBUTE_OPTION = 'CREATE_ATTRIBUTE_OPTION',\n  CREATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS = 'CREATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS',\n  DELETE_ATTRIBUTE_OPTION_BY_ID = 'DELETE_ATTRIBUTE_OPTION_BY_ID',\n  DELETE_ATTRIBUTE_OPTION_BY_ID_THEN_SEARCH_ATTRIBUTE_OPTIONS = 'DELETE_ATTRIBUTE_OPTION_BY_ID_THEN_SEARCH_ATTRIBUTE_OPTIONS',\n  UPDATE_ATTRIBUTE_OPTION = 'UPDATE_ATTRIBUTE_OPTION',\n  UPDATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS = 'UPDATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS',\n\n  ADD_ATS_LIBRARY_PRODUCT = 'ADD_ATS_LIBRARY_PRODUCT',\n  ADD_ATS_LIBRARY_PRODUCT_SUCCEEDED = 'ADD_ATS_LIBRARY_PRODUCT_SUCCEEDED',\n  MATCHING_PRODUCT_CHECKING = 'MATCHING_PRODUCT_CHECKING',\n  GET_PIM_MATCHING_PRODUCT_SUCCEEDED = 'GET_PIM_MATCHING_PRODUCT_SUCCEEDED',\n  CHECK_ADVANCE_CONFIG_MATCHING_PRODUCT = 'CHECK_ADVANCE_CONFIG_MATCHING_PRODUCT',\n  GET_MATCHING_ATTRIBUTES_SUCCEEDED = 'GET_MATCHING_ATTRIBUTES_SUCCEEDED',\n  CAN_PRODUCT_BE_CONFIGURED = 'CAN_PRODUCT_BE_CONFIGURED',\n  SET_IS_PRODUCT_CONFIGURABLE = 'SET_IS_PRODUCT_CONFIGURABLE',\n  SET_IS_PRODUCT_CONFIGURABLE_CHECKING = 'SET_IS_PRODUCT_CONFIGURABLE_CHECKING',\n\n  // Pim categories\n  SEARCH_PIM_CATEGORIES = 'SEARCH_PIM_CATEGORIES',\n  SET_IS_SEARCHING_PIM_CATEGORIES = 'SET_IS_SEARCHING_PIM_CATEGORIES',\n  SEARCH_PIM_CATEGORIES_SUCCEEDED = 'SEARCH_PIM_CATEGORIES_SUCCEEDED',\n  UPDATE_PIM_CATEGORY = 'UPDATE_PIM_CATEGORY',\n\n  // bulk export/import products\n  BULK_EXPORT_PRODUCTS = 'BULK_EXPORT_PRODUCTS',\n  BULK_EXPORT_PRODUCTS_LOADING = 'BULK_EXPORT_PRODUCTS_LOADING',\n  BULK_EXPORT_PRODUCTS_SUCCESS = 'BULK_EXPORT_PRODUCTS_SUCCESS',\n  BULK_EXPORT_PRODUCTS_FAILED = 'BULK_EXPORT_PRODUCTS_FAILED',\n  BULK_IMPORT_PRODUCTS = 'BULK_IMPORT_PRODUCTS',\n  BULK_IMPORT_PRODUCTS_LOADING = 'BULK_IMPORT_PRODUCTS_LOADING',\n  BULK_IMPORT_PRODUCTS_SUCCESS = 'BULK_IMPORT_PRODUCTS_SUCCESS',\n  BULK_IMPORT_PRODUCTS_FAILED = 'BULK_IMPORT_PRODUCTS_FAILED',\n  GET_BULK_IMPORT_PRODUCTS_PROGRESS = 'GET_BULK_IMPORT_PRODUCTS_PROGRESS',\n  SET_BULK_IMPORT_PRODUCTS_PROGRESS = 'SET_BULK_IMPORT_PRODUCTS_PROGRESS',\n  // bulk export config\n  GET_BULK_EXPORT_PRODUCTS_CONFIG = 'GET_BULK_EXPORT_PRODUCTS_CONFIG',\n  GET_BULK_EXPORT_PRODUCTS_CONFIG_LOADING = 'GET_BULK_EXPORT_PRODUCTS_CONFIG_LOADING',\n  GET_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS = 'GET_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS',\n  GET_BULK_EXPORT_PRODUCTS_CONFIG_FAILED = 'GET_BULK_EXPORT_PRODUCTS_CONFIG_FAILED',\n  SAVE_BULK_EXPORT_PRODUCTS_CONFIG = 'SAVE_BULK_EXPORT_PRODUCTS_CONFIG',\n  SAVE_BULK_EXPORT_PRODUCTS_CONFIG_LOADING = 'SAVE_BULK_EXPORT_PRODUCTS_CONFIG_LOADING',\n  SAVE_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS = 'SAVE_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS',\n  SAVE_BULK_EXPORT_PRODUCTS_CONFIG_FAILED = 'SAVE_BULK_EXPORT_PRODUCTS_CONFIG_FAILED',\n  // download template file\n  DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE = 'DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE',\n  DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_LOADING = 'DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_LOADING',\n  DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_SUCCESS = 'DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_SUCCESS',\n  DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_FAILED = 'DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_FAILED',\n\n  // pim integration mapper\n  SEARCH_PIM_INTEGRATION_SERIES = 'SEARCH_PIM_INTEGRATION_SERIES',\n  SEARCH_PIM_INTEGRATION_SERIES_SUCCEEDED = 'SEARCH_PIM_INTEGRATION_SERIES_SUCCEEDED',\n  SET_IS_SEARCHING_PIM_INTEGRATION_SERIES = 'SET_IS_SEARCHING_PIM_INTEGRATION_SERIES',\n  MAP_PIM_INTEGRATION = 'MAP_PIM_INTEGRATION',\n  CANCEL_MAP_PIM_INTEGRATION_POLLING = 'CANCEL_MAP_PIM_INTEGRATION_POLLING',\n  MAP_PIM_INTEGRATION_SUCCEEDED = 'MAP_PIM_INTEGRATION_SUCCEEDED',\n  SET_IS_MAPPING_PIM_INTEGRATION = 'SET_IS_MAPPING_PIM_INTEGRATION',\n  SAVE_PIM_INTEGRATION_MAP = 'SAVE_PIM_INTEGRATION_MAP',\n  UNMAP_PIM_INTEGRATION = 'UNMAP_PIM_INTEGRATION',\n  CREATE_PIM_INTEGRATION_SERIES_DRAFT = 'CREATE_PIM_INTEGRATION_SERIES_DRAFT',\n  CANCEL_CREATE_PIM_INTEGRATION_SERIES_DRAFT_POLLING = 'CANCEL_CREATE_PIM_INTEGRATION_SERIES_DRAFT_POLLING',\n\n  GET_FIRM_PRODUCT_MANUFACTURERS = 'GET_FIRM_PRODUCT_MANUFACTURERS',\n  GET_FIRM_PRODUCT_MANUFACTURERS_UPDATE = 'GET_FIRM_PRODUCT_MANUFACTURERS_UPDATE',\n  GET_FIRM_PRODUCT_CATEGORIES = 'GET_FIRM_PRODUCT_CATEGORIES',\n  GET_FIRM_PRODUCT_CATEGORIES_UPDATE = 'GET_FIRM_PRODUCT_CATEGORIES_UPDATE',\n  IS_FETCHING_FIRM_PRODUCT_CATEGORIES = 'IS_FETCHING_FIRM_PRODUCT_CATEGORIES',\n  GET_FIRM_PRODUCT_CUSTOM_DATA_LIST = 'GET_FIRM_PRODUCT_CUSTOM_DATA_LIST',\n  GET_FIRM_PRODUCT_CUSTOM_DATA_LIST_SUCCEEDED = 'GET_FIRM_PRODUCT_CUSTOM_DATA_LIST_SUCCEEDED',\n}\n\nexport class UpdateStoreFirmProductAction implements IAction {\n  public type = PimActionTypes.UPDATE_STORE_FIRM_PRODUCT;\n  constructor(\n    public payload: {\n      firmProduct: IMap<FirmProduct>;\n    }\n  ) {}\n}\n\nexport class GetManufacturerPriceInvisibilitySucceededAction implements IAction {\n  public type = PimActionTypes.GET_MANUFACTURER_PRICE_INVISIBILITY_SUCCEEDED;\n  constructor(\n    public payload: {\n      brandsToHidePrice: Map<number, number>\n    }\n  ) {}\n}\n\nexport class GetFirmProductCustomDataListSucceededAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_CUSTOM_DATA_LIST_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmProductCustomDataList: List<IMap<any>>;\n    }\n  ) {}\n}\n\nexport class GetFirmProductCustomDataListAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_CUSTOM_DATA_LIST;\n}\n\nexport class IsFetchingFirmProductCategoriesAction implements IAction {\n  public readonly type = PimActionTypes.IS_FETCHING_FIRM_PRODUCT_CATEGORIES;\n\n  constructor(\n    public payload: {\n      isFetchingFirmProductCategories: boolean;\n    }\n  ) {}\n}\n\nexport class GetFirmProductCategoriesAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_CATEGORIES;\n\n  constructor(\n    public payload: {\n      manufacturerIds?: string;\n    }\n  ) {}\n}\n\nexport class GetFirmProductCategoriesUpdateAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_CATEGORIES_UPDATE;\n\n  constructor(\n    public payload: {\n      firmProductCategories: List<IMap<Category>>;\n    }\n  ) {}\n}\n\nexport class GetFirmProductManufacturersAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_MANUFACTURERS;\n}\n\nexport class GetFirmProductManufacturersUpdateAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_MANUFACTURERS_UPDATE;\n\n  constructor(\n    public payload: {\n      firmProductManufacturers: List<IMap<Manufacturer>>;\n    }\n  ) {}\n}\n\nexport class SetIsMergingProductsAction implements IAction {\n  public type = PimActionTypes.SET_IS_MERGING_PRODUCTS;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetPrimaryMergeProductAction implements IAction {\n  public type = PimActionTypes.SET_PRIMARY_MERGE_PRODUCT;\n  constructor(\n    public payload: {\n      product: Partial<IMap<Product>>\n    }\n  ) {}\n}\n\nexport class MergeProductsAction implements IAction {\n  public type = PimActionTypes.MERGE_PRODUCTS;\n  constructor(\n    public payload: {\n      productId: number;\n      productInfo: Partial<Product>;\n      duplicateProductIds: List<number>;\n      onSuccess?: () => void;\n      onFail?: () => void;\n    }\n  ) {}\n}\n\nexport class GetSeriesDuplicateProductsByIdSucceededAction implements IAction {\n  public type = PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      seriesDuplicateProducts: List<List<IMap<Product>>>;\n      hasUnconfigurableProducts: boolean;\n    }\n  ) {}\n}\n\nexport class GetSeriesDuplicateProductsByIdFailedAction implements IAction {\n  public type = PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_FAILED;\n}\n\nexport class GetSeriesDuplicateProductsByIdAction implements IAction {\n  public type = PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID;\n  constructor(\n    public payload: {\n      seriesId: number;\n    }\n  ) {}\n}\n\nexport class SetIsGettingSeriesDuplicateProductsByIdAction implements IAction {\n  public type = PimActionTypes.SET_IS_GETTING_SERIES_DUPLICATE_PRODUCTS_BY_ID;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class CancelGetSeriesDuplicateProductsByIdPollingAction implements IAction {\n  public type = PimActionTypes.CANCEL_GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_POLLING;\n}\n\nexport class GetMatchingAttributesSucceededAction implements IAction {\n  public type = PimActionTypes.GET_MATCHING_ATTRIBUTES_SUCCEEDED;\n  constructor(\n    public payload: {\n      matchingAttributes: Map<string, IMap<Attribute>>;\n    }\n  ) {}\n}\nexport class MatchingProductCheckingAction implements IAction {\n  public type = PimActionTypes.MATCHING_PRODUCT_CHECKING;\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class GetPimMatchingProductSucceededAction implements IAction {\n  public type = PimActionTypes.GET_PIM_MATCHING_PRODUCT_SUCCEEDED;\n  constructor(\n    public payload: {\n      matchingProduct: List<IMap<Product>>;\n    }\n  ) {}\n}\nexport class CheckAdvanceConfigMatchingProductAction implements IAction {\n  public type = PimActionTypes.CHECK_ADVANCE_CONFIG_MATCHING_PRODUCT;\n  constructor(\n    public payload: {\n      series: IMap<Series>;\n      selectedAttributesValues: Map<string, any>;\n    }\n  ) {}\n}\n\nexport class CanProductBeConfiguredAction implements IAction {\n  public type = PimActionTypes.CAN_PRODUCT_BE_CONFIGURED;\n  constructor(\n    public payload: {\n      series: IMap<Series>;\n      selectedAttributesValues: Map<string, any>;\n      productId?: number;\n      purchasability?: any;\n    }\n  ) {}\n}\n\nexport class SetIsProductConfigurableAction implements IAction {\n  public type = PimActionTypes.SET_IS_PRODUCT_CONFIGURABLE;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetIsProductConfigurableCheckingAction implements IAction {\n  public type = PimActionTypes.SET_IS_PRODUCT_CONFIGURABLE_CHECKING;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetIsCreatingAttributeAction implements IAction {\n  public type = PimActionTypes.SET_IS_CREATING_ATTRIBUTE;\n  constructor(\n    public payload: {\n      isCreating: boolean;\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAttributeOptionsSecondaryAction implements IAction {\n  public type = PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS_SECONDARY;\n  constructor(\n    public payload: {\n      isSearching: boolean;\n    }\n  ) {}\n}\nexport class SearchAttributeOptionsSucceededSecondaryAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED_SECONDARY;\n  constructor(\n    public payload: {\n      attributeOptions: List<IMap<PureAttributeOption>>;\n    }\n  ) {}\n}\n\nexport class SearchAttributeOptionsSecondaryAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SECONDARY;\n  constructor(\n    public payload: {\n      attributeId: number;\n      value: string;\n    }\n  ) {}\n}\n\nexport class UpdateAttributeOptionThenSearchAttributeOptionsAction implements IAction {\n  public type = PimActionTypes.UPDATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS;\n  constructor(\n    public payload: {\n      attributeId: number,\n      optionId: number,\n      attributeOption: IMap<Partial<PureAttributeOption>>,\n      filters?: Filter,\n      options: Option<PureAttributeOption>,\n      successCB?: (newAttributeOption?: IMap<PureAttributeOption>) => void;\n      failedCB?: () => void;\n      sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void;\n    }\n  ) {}\n}\n\nexport class UpdateAttributeOptionAction implements IAction {\n  public type = PimActionTypes.UPDATE_ATTRIBUTE_OPTION;\n  constructor(\n    public payload: {\n      attributeId: number,\n      optionId: number,\n      attributeOption: IMap<Partial<PureAttributeOption>>,\n      successCB?: (newAttributeOption?: IMap<PureAttributeOption>) => void;\n      failedCB?: () => void;\n      sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void;\n    }\n  ) {}\n}\n\nexport class DeleteAttributeOptionByIdThenSearchAttributeOptionsAction implements IAction {\n  public type = PimActionTypes.DELETE_ATTRIBUTE_OPTION_BY_ID_THEN_SEARCH_ATTRIBUTE_OPTIONS;\n  constructor(\n    public payload: {\n      attributeId: number;\n      optionId: number;\n      filters?: Filter,\n      options: Option<PureAttribute>,\n    }\n  ) {}\n}\n\nexport class DeleteAttributeOptionByIdAction implements IAction {\n  public type = PimActionTypes.DELETE_ATTRIBUTE_OPTION_BY_ID;\n  constructor(\n    public payload: {\n      attributeId: number;\n      optionId: number;\n    }\n  ) {}\n}\n\nexport class SetSelectedPureAttributeOptionAction implements IAction {\n  public type = PimActionTypes.SET_SELECTED_PURE_ATTRIBUTE_OPTION;\n  constructor(\n    public payload: {\n      pureAttributeOption: IMap<PureAttributeOption>,\n    }\n  ) {}\n}\n\nexport class UpdateAttributeThenSearchAttributesAction implements IAction {\n  public type = PimActionTypes.UPDATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES;\n  constructor(\n    public payload: {\n      id: number,\n      name: string,\n      filters?: Filter,\n      options: Option<PureAttribute>,\n      sendAmplitude?: (attribute: IMap<PureAttribute>) => void;\n    }\n  ) {}\n}\n\nexport class UpdateAttributeAction implements IAction {\n  public type = PimActionTypes.UPDATE_ATTRIBUTE;\n  constructor(\n    public payload: {\n      id: number,\n      name: string,\n      successCB?: (newAttribute: IMap<PureAttribute>) => void,\n      sendAmplitude?: (attribute: IMap<PureAttribute>) => void;\n    }\n  ) {}\n}\n\nexport class SetSelectedPureAttributeAction implements IAction {\n  public type = PimActionTypes.SET_SELECTED_PURE_ATTRIBUTE;\n  constructor(\n    public payload: {\n      pureAttribute: IMap<PureAttribute>,\n    }\n  ) {}\n}\n\nexport class DeleteAttributeByIdThenSearchAttributesAction implements IAction {\n  public type = PimActionTypes.DELETE_ATTRIBUTE_BY_ID_THEN_SEARCH_ATTRIBUTES;\n  constructor(\n    public payload: {\n      attributeId: number;\n      filters?: Filter,\n      options: Option<PureAttribute>,\n    }\n  ) {}\n}\n\nexport class DeleteAttributeByIdAction implements IAction {\n  public type = PimActionTypes.DELETE_ATTRIBUTE_BY_ID;\n  constructor(\n    public payload: {\n      attributeId: number;\n    }\n  ) {}\n}\n\nexport class ValidateAttributeOptionExistsAction implements IAction {\n  public type = PimActionTypes.VALIDATE_ATTRIBUTE_OPTION_EXISTS;\n  constructor(\n    public payload: {\n      value: string;\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    }\n  ) {}\n}\n\nexport class CreatePureAttributeOptionThenSearchPureAttributeOptionsAction implements IAction {\n  public type = PimActionTypes.CREATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS;\n  constructor(\n    public payload: {\n      pureAttributeOption: IMap<Partial<PureAttributeOption>>;\n      attributeId: number;\n      filters?: Filter;\n      options: Option<PureAttributeOption>;\n      sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void;\n    }\n  ) {}\n}\n\nexport class CreatePureAttributeOptionAction implements IAction {\n  public type = PimActionTypes.CREATE_ATTRIBUTE_OPTION;\n  constructor(\n    public payload: {\n      pureAttributeOption: IMap<Partial<PureAttributeOption>>;\n      attributeId: number;\n      setLoading?: boolean;\n      successCB?: (newAttributeOption: IMap<PureAttributeOption>) => void;\n      sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void;\n    }\n  ) {}\n}\n\nexport class ValidateAttributeExistsAction implements IAction {\n  public type = PimActionTypes.VALIDATE_ATTRIBUTE_EXISTS;\n  constructor(\n    public payload: {\n      name: string;\n      resolve?: (...args: any[]) => void,\n      reject?: (...args: any[]) => void,\n    }\n  ) {}\n}\n\nexport class CreatePureAttributeThenSearchPureAttributesAction implements IAction {\n  public type = PimActionTypes.CREATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES;\n  constructor(\n    public payload: {\n      pureAttribute: IMap<Partial<PureAttribute>>;\n      filters?: Filter,\n      options: Option<PureAttribute>,\n      displaySuccessMessage?: boolean,\n      sendAmplitude?: (attribute: IMap<PureAttribute>) => void;\n    }\n  ) {}\n}\n\nexport class CreatePureAttributeAction implements IAction {\n  public type = PimActionTypes.CREATE_ATTRIBUTE;\n  constructor(\n    public payload: {\n      pureAttribute: IMap<Partial<PureAttribute>>;\n      displaySuccessMessage?: boolean;\n      successCB?: (newAttribute: IMap<PureAttribute>) => void;\n      sendAmplitude?: (attribute: IMap<PureAttribute>) => void;\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAllAttributeOptionsAction implements IAction {\n  public type = PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS;\n  constructor(\n    public payload: {\n      isSearching: boolean;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributeOptionsSucceededAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED;\n  constructor(\n    public payload: {\n      attributeOptions: List<IMap<PureAttributeOption>>;\n      count: number;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributeOptionsAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS;\n  constructor(\n    public payload: {\n      filters?: Filter;\n      options: Option<PureAttributeOption>;\n      attributeId: number;\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAllAttributesSecondaryAction implements IAction {\n  public type = PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTES_SECONDARY;\n  constructor(\n    public payload: {\n      isSearching: boolean;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributesSucceededSecondaryAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTES_SUCCEEDED_SECONDARY;\n  constructor(\n    public payload: {\n      attributes: List<IMap<PureAttribute>>;\n      // count: number;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributesSecondaryAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTES_SECONDARY;\n  constructor(\n    public payload: {\n      name: string;\n    }\n  ) {}\n}\n\nexport class SetIsSearchingAllAttributesAction implements IAction {\n  public type = PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTES;\n  constructor(\n    public payload: {\n      isSearching: boolean;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributesSucceededAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTES_SUCCEEDED;\n  constructor(\n    public payload: {\n      attributes: List<IMap<PureAttribute>>;\n      count: number;\n    }\n  ) {}\n}\n\nexport class SearchAllAttributesAction implements IAction {\n  public type = PimActionTypes.SEARCH_ALL_ATTRIBUTES;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options: Option<PureAttribute>,\n    }\n  ) {}\n}\n\nexport class GetProductByIdAction implements IAction {\n  public type = PimActionTypes.GET_PRODUCT_BY_ID;\n  constructor(\n    public payload: {\n      productId: number;\n    }\n  ) {}\n}\n\nexport class GetProductByIdSucceededAction implements IAction {\n  public type = PimActionTypes.GET_PRODUCT_BY_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      product: IMap<Product>;\n    }\n  ) {}\n}\n\nexport class GetProductByIdFailedAction implements IAction {\n  public type = PimActionTypes.GET_PRODUCT_BY_ID_FAILED;\n}\n\nexport class ResetProductAction implements IAction {\n  public type = PimActionTypes.RESET_PRODUCT;\n}\n\nexport class SetIsPublishingAction implements IAction {\n  public type = PimActionTypes.SET_IS_PUBLISHING;\n  constructor(\n    public payload: {\n      isPublishing: boolean;\n    }\n  ) {}\n}\n\nexport class PublishSeriesDraftAction implements IAction {\n  public type = PimActionTypes.PUBLISH_SERIES_DRAFT;\n  constructor(\n    public payload: {\n      series: IMap<Series>;\n      dispatch: any;\n      redirectToDetail?: boolean;\n      filters?: Filter,\n      options?: Option<Series>,\n    }\n  ) {}\n}\n\nexport class CancelPublishSeriesDraftPollingAction implements IAction {\n  public type = PimActionTypes.CANCEL_PUBLISH_SERIES_DRAFT_POLLING;\n}\n\nexport class UpdatePIMProductDraftRawAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_PRODUCT_DRAFT_RAW;\n  constructor(\n    public payload: {\n      productId: number;\n      productInfo: Partial<Product>;\n    }\n  ) {}\n}\n\nexport class UpdatePIMProductDraftAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_PRODUCT_DRAFT;\n  constructor(\n    public payload: {\n      productId: number;\n      productInfo: Partial<Product>;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class AddPimProductDraftThenSearchPimProductsAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT_DRAFT_THEN_SEARCH_PIM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>;\n      onSuccess?: (result: IMap<Product>) => void;\n    }\n  ) {}\n}\n\nexport class AddPimProductDraftAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT_DRAFT;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>;\n      onSuccess?: (result: IMap<Product>) => void;\n    }\n  ) {}\n}\n\nexport class DeleteSeriesDraftByIdAction implements IAction {\n  public type = PimActionTypes.DELETE_PIM_SERIES_DRAFT_BY_ID;\n  constructor(\n    public payload: {\n      seriesId: number,\n      redirectPath?: string,\n      sendAmplitude?: () => void,\n    }\n  ) {}\n}\n\nexport class UpdatePimSeriesDraftForDeleteAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_SERIES_DRAFT_FOR_DELETE;\n  constructor(\n    public payload: {\n      seriesId: number,\n      seriesInfo: Partial<Series>,\n    }\n  ) {}\n}\n\nexport class UpdatePimSeriesDraftAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_SERIES_DRAFT;\n  constructor(\n    public payload: {\n      seriesId: number,\n      seriesInfo: Partial<Series>,\n      cascade?: boolean,\n      redirectPath?: string,\n      skipAttributes?: number[],\n      onSuccess?: (result?: IMap<Series>) => void,\n      onFinally?: () => void;\n    }\n  ) {}\n}\n\nexport class UpdatePimSeriesDraftRawAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_SERIES_DRAFT_RAW;\n  constructor(\n    public payload: {\n      seriesId: number,\n      seriesInfo: Partial<Series>,\n      cascade?: boolean,\n      forceCascade?: boolean,\n    }\n  ) {}\n}\n\nexport class AddPimSeriesDraftForDeleteAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_SERIES_DRAFT_FOR_DELETE;\n\n  constructor(\n    public payload: {\n      series: IMap<Partial<Series>>;\n      dispatch: any;\n    }\n  ) {}\n}\n\nexport class AddPimSeriesDraftAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_SERIES_DRAFT;\n\n  constructor(\n    public payload: {\n      series: IMap<Partial<Series>>;\n      skipAttributes?: number[];\n      useSourceSeriesSkipAttributes?: boolean;\n      redirectOnSuccess?: boolean;\n      onSuccess?: (result: IMap<Series>) => void;\n      onFinally?: () => void;\n    }\n  ) {}\n}\n\nexport class AddPimSeriesDraftRawAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_SERIES_DRAFT_RAW;\n\n  constructor(\n    public payload: {\n      series: IMap<Partial<Series>>;\n      cascade: boolean;\n    }\n  ) {}\n}\n\nexport class SetIsAddingPimSeriesDraftAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_ADDING_PIM_SERIES_DRAFT;\n\n  constructor(\n    public payload: {\n      isAdding: boolean;\n    }\n  ) {}\n}\n\nexport class DeleteFirmSeriesThenSearchFirmSeriesAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES;\n\n  constructor(\n    public payload: {\n      firmSeriesId: number;\n      filters?: Filter;\n      options?: Option<Series>;\n      isConfigurator?: boolean;\n    }\n  ) {}\n}\n\nexport class DeleteFirmSeriesAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_SERIES_BY_ID;\n\n  constructor(\n    public payload: {\n      firmSeriesId: number;\n      redirectPath?: string;\n      redirectState?: object;\n    }\n  ) {}\n}\n\nexport class SearchFirmSeriesFailedAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_FIRM_SERIES_FAILED;\n}\n\nexport class SearchFirmSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_FIRM_SERIES_SUCCEEDED;\n  constructor(\n    public payload: {\n      firmSeries: List<IMap<Series>>;\n      hasNextPage: boolean;\n      firmSeriesCount?: number;\n    }\n  ) {}\n}\n\n// refer to https://atsinc.atlassian.net/browse/PT-1919:\n// searchFirmSeries with `isConfigurator=true` returns `firmId = <user firm> OR brandRep'd series`\n// searchFirmSeries with `isConfigurator=false` only returns `firmId = <user firm>`\nexport class SearchFirmSeriesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_FIRM_SERIES;\n\n  constructor(\n    public payload: {\n      location?: Map<string, any>;\n      filters?: Filter;\n      options?: Option<Series>;\n      isConfigurator?: boolean;\n    }\n  ) {}\n}\n\nexport class UpdateFirmSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.UPDATE_FIRM_SERIES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmSeries: List<IMap<Series>>;\n    }\n  ) {}\n}\n\nexport class UpdateFirmSeriesAction implements IAction {\n  public type = PimActionTypes.UPDATE_FIRM_SERIES;\n\n  constructor(\n    public payload: {\n      firmSeries: IMap<Partial<Series>>;\n      firmSeriesId: number;\n      onFinally?: () => void;\n    }\n  ) {}\n}\n\nexport class UpdateFirmSeriesAndRedirectAction extends UpdateFirmSeriesAction {\n  public readonly type = PimActionTypes.UPDATE_FIRM_SERIES_AND_REDIRECT;\n}\n\nexport class AddFirmSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_SERIES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmSeries: List<IMap<Series>>;\n    }\n  ) {}\n}\n\nexport class AddFirmSeriesAction implements IAction {\n  public type = PimActionTypes.ADD_FIRM_SERIES;\n\n  constructor(\n    public payload: {\n      firmSeries: IMap<Partial<Series>>;\n    }\n  ) {}\n}\n\nexport class AddFirmSeriesAndRedirectAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_SERIES_AND_REDIRECT;\n\n  constructor(\n    public payload: {\n      firmSeries: IMap<Partial<Series>>;\n      onFinally?: () => void;\n    }\n  ) {}\n}\n\nexport class GetFirmSeriesByIdSucceededAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_SERIES_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmSeries: IMap<Series>;\n    }\n  ) {}\n}\n\nexport class SetSelectedFirmSeriesIdAction implements IAction {\n  public readonly type = PimActionTypes.SET_SELECTED_FIRM_SERIES_ID;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetFirmSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_SERIES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      firmSeries: List<IMap<Series>>;\n    }\n  ) {}\n}\n\nexport class GetFirmSeriesAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_SERIES;\n\n  constructor(\n    public payload: {\n      seriesId: number;\n      isConfigurator?: boolean;\n    }\n  ) {}\n}\n\nexport class SearchCategoriesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_CATEGORIES;\n\n  constructor(\n    public payload: {\n      filters: Filter;\n    }\n  ) {}\n}\n\nexport class SetSelectedAttributeIdAction implements IAction {\n  public readonly type = PimActionTypes.SET_SELECTED_ATTRIBUTE_ID;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class SearchAttributeOptionsSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_ATTRIBUTE_OPTIONS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      pimAttributeOptions: List<IMap<PimAttributeOption>>,\n      attributeId: number,\n    }\n  ) {}\n}\n\nexport class SearchAttributeOptionsAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_ATTRIBUTE_OPTIONS;\n\n  constructor(\n    public payload: {\n      categoryId: number,\n      attributeId: number,\n      filters?: Filter\n    }\n  ) {}\n}\n\nexport class SetIsFetchingAttributeOptionsAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_FETCHING_ATTRIBUTE_OPTIONS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchAttributesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_ATTRIBUTES_SUCCEEDED;\n\n  constructor(\n    public payload: List<IMap<PimAttribute>>\n  ) {}\n}\n\nexport class SearchAttributesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_ATTRIBUTES;\n\n  constructor(\n    public payload: {\n      categoryId: number,\n      filters?: Filter,\n    }\n  ) {}\n}\n\nexport class DeleteSeriesProductByIdSucceededAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      deletedProductId: number\n    }\n  ) {}\n}\n\nexport class DeleteSeriesProductByIdAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID;\n\n  constructor(\n    public payload: {\n      productId: number,\n      toggleSnackbar?: boolean\n    }\n  ) {}\n}\n\nexport class DeleteSeriesProductByIdThenSearchSeriesProductsAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID_THEN_SEARCH_SERIES_PRODUCTS;\n\n  constructor(\n    public payload: {\n      productId: number\n    }\n  ) {}\n}\n\nexport class SetSelectedPimProductIdAction implements IAction {\n  public readonly type = PimActionTypes.SET_SELECTED_PIM_PRODUCT_ID;\n\n  constructor(\n    public payload: {\n      selectedPimProductId: number\n    }\n  ) {}\n}\n\nexport class DeleteSeriesByIdAndSearchXrefAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_SERIES_BY_ID_AND_SEARCH_XREF;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n      competitorOrSponsor: CompetitorSponsor,\n      filters?: Filter,\n      options?: Option<XrefData>,\n    }\n  ) {}\n}\n\nexport class DeleteSeriesProductByIdAndSearchXrefAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID_AND_SEARCH_XREF;\n\n  constructor(\n    public payload: {\n      productId: number,\n      competitorOrSponsor: CompetitorSponsor,\n      filters?: Filter,\n      options?: Option<XrefData>,\n    }\n  ) {}\n}\n\n// series can be called on two services\n// 1. this PIM service\n// 2. product service\n// GetSeriesFromPimServiceAction is the 'series' that is called through PIM service\n// not to be confused with another call that's 'pimSeries' from this service\n// they are two different objects\nexport class GetSeriesFromPimServiceAction implements IAction {\n  public readonly type = PimActionTypes.GET_SERIES_FROM_PIM_SERVICE;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n      onSuccess?: (series: IMap<Series>) => void,\n      onFail?: () => void,\n    }\n  ) {}\n\n}\n\n\nexport class GetPimSeriesdDraftAction implements IAction {\n  public readonly type = PimActionTypes.GET_PIM_SERIES_DRAFT;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n      onSuccess?: (series: IMap<Series>) => void,\n      onFail?: () => void,\n    }\n  ) {}\n}\n\nexport class GetPimSeriesdDraftByParentIdAction implements IAction {\n  public readonly type = PimActionTypes.GET_PIM_SERIES_DRAFT_BY_PARENT_ID;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n    }\n  ) {}\n}\n\nexport class DeleteSeriesByIdAndSearchSeriesAction implements IAction {\n  public type = PimActionTypes.DELETE_SERIES_BY_ID_AND_SEARCH_SERIES;\n  constructor(\n    public payload: {\n      seriesId: number,\n      filters?: Filter,\n      options?: Option<Series>,\n      draft?: boolean,\n      sendAmplitude?: () => void;\n    }\n  ) {}\n}\n\nexport class DeleteSeriesByIdSucceededAction implements IAction {\n  public type = PimActionTypes.DELETE_SERIES_BY_ID_SUCCEEDED;\n  constructor(\n    public payload: {\n      seriesIds: List<IMap<HasId>>\n    }\n  ) {}\n}\n\nexport class DeleteSeriesByIdAction implements IAction {\n  public type = PimActionTypes.DELETE_SERIES_BY_ID;\n  constructor(\n    public payload: {\n      seriesId: number,\n      redirectPath?: string,\n      sendAmplitude?: () => void;\n    }\n  ) {}\n}\n\nexport class UpdatePIMSeriesSucceededAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_SERIES_SUCCEEDED;\n  constructor(\n    public payload: IMap<Series>\n  ) {}\n}\n\nexport class UpdatePIMProductSucceededAction implements IAction {\n  public type = PimActionTypes.UPDATE_PIM_PRODUCT_SUCCEEDED;\n  constructor(\n    public payload: IMap<Product>\n  ) {}\n}\n\nexport class LoadingSeriesFinishedAction implements IAction {\n  public type = PimActionTypes.LOADING_SERIES_FINISHED;\n}\n\nexport class LoadingSeriesAction implements IAction {\n  public type = PimActionTypes.LOADING_SERIES;\n}\n\nexport class SearchRecommendedAttributesAction implements IAction {\n  public type = PimActionTypes.SEARCH_RECOMMENDED_ATTRIBUTES;\n  constructor(\n    public payload: {\n      categoryId: number,\n      brandId: number,\n      seriesId?: number,\n      filters?: Filter,\n      onSuccess?: (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => void,\n    }\n  ) {}\n}\n\nexport class SearchRecommendedAttributesSuccessAction implements IAction {\n  public type = PimActionTypes.SEARCH_RECOMMENDED_ATTRIBUTES_SUCCESS;\n  constructor(\n    public payload: IMap<MandatoryRecommendedAttributes>\n  ) {}\n}\n\nexport class GetSeriesSpecificMandatoryAttributesAction implements IAction {\n  public type = PimActionTypes.GET_SERIES_SPECIFIC_MANDATORY_ATTRIBUTES;\n  constructor(\n    public payload: {\n      series: IMap<Partial<Series>>,\n      skipOnly?: boolean,\n      idOnly?: boolean,\n    }\n  ) {}\n}\n\nexport class SkipAttributeAction implements IAction {\n  public type = PimActionTypes.SKIP_ATTRIBUTE;\n  constructor(\n    public payload: {\n      attributeId: number,\n    }\n  ) {}\n}\n\nexport class SkipAllAttributesAction implements IAction {\n  public type = PimActionTypes.SKIP_ALL_ATTRIBUTES;\n}\n\nexport class RestoreAttributeAction implements IAction {\n  public type = PimActionTypes.RESTORE_ATTRIBUTE;\n  constructor(\n    public payload: {\n      attributeId: number,\n    }\n  ) {}\n}\n\nexport class SaveSkipAttributesAction implements IAction {\n  public type = PimActionTypes.SAVE_SKIP_ATTRIBUTES;\n  constructor(\n    public payload: {\n      seriesId: number,\n      attributes: number[],\n    }\n  ) {}\n}\n\nexport class GetSeriesDetailsAction implements IAction {\n  public readonly type = PimActionTypes.GET_SERIES_DETAILS;\n\n  constructor(\n    public payload: {\n      xrefProduct: IMap<XrefProduct>;\n      onSuccess?: (product: IMap<Series>) => void;\n      onFailed?: () => void;\n    }\n  ) {}\n}\n\nexport class SearchSeriesAction implements IAction {\n  public type = PimActionTypes.SEARCH_SERIES;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Series>,\n      draft?: boolean,\n      isCompetitor?: boolean\n    } = {}\n  ) {}\n}\n\nexport class SearchSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_SERIES_SUCCEEDED;\n  constructor(\n    public payload: {\n      series: List<IMap<Series>>,\n      seriesHasNextPage?: boolean,\n      count?: number\n    }\n  ) {}\n}\n\nexport class SearchSeriesFailedAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_SERIES_FAILED;\n}\nexport class GetSeriesFromPimServiceSucceededAction implements IAction {\n  public readonly type = PimActionTypes.GET_SERIES_FROM_PIM_SERVICE_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Series>\n  ) {}\n}\n\nexport class AddFirmProductFileAndGetMediaAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_PRODUCT_FILE_AND_GET_MEDIA;\n\n  constructor(\n    public payload: {\n      firmProductId: number;\n      quoteId: number;\n      fileId: string;\n      fileType?: string\n      languageCode?: string;\n    }\n  ) {}\n}\n\nexport class DeleteFirmProductFileAndGetMediaAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_PRODUCT_FILE_AND_GET_MEDIA;\n\n  constructor(\n    public payload: {\n      firmProductId: number;\n      quoteId: number;\n      fileType?: string\n      languageCode?: string;\n    }\n  ) {}\n}\n\nexport class DeleteFirmProductFileAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_PRODUCT_FILE;\n\n  constructor(\n    public payload: {\n      firmProductId: number;\n      fileType?: string;\n      languageCode?: string;\n    }\n  ) {}\n}\n\nexport class AddFirmProductFileAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_PRODUCT_FILE;\n\n  constructor(\n    public payload: {\n      firmProductId: number;\n      fileId: string;\n      fileType?: string\n      languageCode?: string;\n      onSuccess?: (updatedProduct: IMap<FirmProduct>) => void;\n    }\n  ) {}\n}\n\n// temp FE solution for BE issue\nexport class IsActiveProductAction implements IAction {\n  public readonly type = PimActionTypes.IS_ACTIVE_PRODUCT;\n}\nexport class IsInactiveProductAction implements IAction {\n  public readonly type = PimActionTypes.IS_INACTIVE_PRODUCT;\n}\n\n/**\n * A firm product was just created and is not in the search index yet.\n *\n * The index is written through `products.sync.byIds`, which is deliberately\n * fire-and-forget on BOTH hops (ms-pim `productsCreated()` returns void,\n * ms-search acks before indexing) because product creation must never depend\n * on search — it used to, and every create during a full rebuild hung. The\n * consequence is a read-your-writes gap of about a second: the list refetch\n * that follows a successful create can run before the document exists.\n *\n * So the created row is held here and merged into the first page until a search\n * result actually contains it. Nothing waits, and the index stays the single\n * source of truth — this only covers the window.\n */\nexport class FirmProductCreatedPendingIndexAction implements IAction {\n  public readonly type = PimActionTypes.FIRM_PRODUCT_CREATED_PENDING_INDEX;\n  constructor(public payload: { firmProduct: IMap<any>; at: number }) {}\n}\n\nexport class AddPimProductOrSeriesAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT_OR_SERIES;\n\n  constructor(\n    public payload: {\n      productOrSeries: IMap<Partial<Product | Series>>,\n      type: 'product' | 'series',\n      toggleSnackbar?: boolean,\n      redirectPath?: string;\n    }\n  ) {}\n}\n\nexport class AddPimProductSucceededAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      product: IMap<Product>;\n    }\n  ) {}\n}\n\nexport class AddPimProductAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>;\n      toggleSnackbar?: boolean;\n    }\n  ) {}\n}\nexport class AddATSLibraryProductAction implements IAction {\n  public readonly type = PimActionTypes.ADD_ATS_LIBRARY_PRODUCT;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>;\n      onValidationFailed?: () => void;\n    }\n  ) {}\n}\n\nexport class AddATSLibraryProductSucceededAction implements IAction {\n    public readonly type = PimActionTypes.ADD_ATS_LIBRARY_PRODUCT_SUCCEEDED;\n\n    constructor(\n        public payload: {\n            product: IMap<Product>;\n        }\n    ) {}\n}\n\nexport class AddPimProductThenSearchPimProductsAction implements IAction {\n  public readonly type = PimActionTypes.ADD_PIM_PRODUCT_THEN_SEARCH_PIM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>;\n    }\n  ) {}\n}\n\nexport class AddFirmProductAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_PRODUCT;\n\n  constructor(\n    public payload: {\n      deltas: IMap<Partial<Product>>,\n      closeDrawer?: boolean,\n      callbackWithProduct?: (product) => IMap<any>\n    }\n  ) {}\n}\n\nexport class AddFirmProductAndAddToQuoteAction implements IAction {\n  public readonly type = PimActionTypes.ADD_FIRM_PRODUCT_AND_ADD_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      deltas: IMap<Partial<Product>>,\n      closeDrawer?: boolean,\n      addToQuote?: boolean,\n      callbackWithProduct?: (product) => IMap<any>\n    }\n  ) {}\n}\n\nexport class UpdateQuoteRowWithProductAction implements IAction {\n  public readonly type = PimActionTypes.UPDATE_QUOTE_ROW_WITH_PRODUCT;\n\n  constructor(\n    public payload: {\n      productId: number,\n      firmProduct: IMap<FirmProduct>,\n      isNewProduct?: boolean,\n      addActionCallback?: () => void\n    }\n  ) {}\n}\n\nexport class EditFirmProductAction implements IAction {\n  public readonly type = PimActionTypes.EDIT_FIRM_PRODUCT;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>,\n      closeDrawer?: boolean,\n      sharedProduct?: boolean,\n      productSharedWithMe?: boolean,\n      callbackWithProduct?: (product) => IMap<any>\n    }\n  ) {}\n}\n\nexport class EditFirmProductAndAddToQuoteAction implements IAction {\n  public readonly type = PimActionTypes.EDIT_FIRM_PRODUCT_AND_ADD_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      product: IMap<Partial<Product>>,\n      closeDrawer?: boolean,\n      sharedProduct?: boolean,\n      productSharedWithMe?: boolean,\n      addToQuote?: boolean,\n      updateQuoteProductRow?: boolean,\n      callbackWithProduct?: (product) => IMap<any>\n    }\n  ) {}\n}\n\nexport class GetProductsOfPackageAction implements IAction {\n  public readonly type = PimActionTypes.GET_PRODUCTS_OF_PACKAGE;\n\n  constructor(\n    public payload: {\n      productIds: number[],\n      resolve: any,\n      reject: any,\n    }\n  ) {}\n}\n\nexport class CancelQuickSearchPimProducts implements IAction {\n  public readonly type = PimActionTypes.CANCEL_QUICK_SEARCH_PIM_PRODUCTS;\n}\n\nexport class QuickSearchPimProducts implements IAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      searchTerm?: string,\n      searchFilters?: Filter,\n    }\n  ) {}\n}\nexport class QuickSearchPimProductsLoadingAction implements IAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class QuickSearchPimProductsPackages implements IAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_PACKAGES;\n\n  constructor(\n    public payload: {\n      searchTerm: string,\n      sharedProduct?: boolean,\n      isQuoteConnect?: boolean,\n    }\n  ) {}\n}\n\nexport class SearchingPimProductsPackagesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCHING_PIM_PRODUCTS_PACKAGES;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class QuickSearchPimProductsPackagesSucceeded implements IAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_PACKAGES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Product>>\n    }\n  ) {}\n}\n\nexport class SearchParentSharedFirmProductsAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PARENT_SHARED_FIRM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      searchTerm: string,\n      isQuoteConnect?: boolean,\n    }\n  ) {}\n}\n\nexport class SearchParentSharedFirmProductsSucceeded implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PARENT_SHARED_FIRM_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<FirmProduct>>,\n    }\n  ) {}\n}\n\nexport class SearchingParentSharedFirmProductsAction implements IAction {\n  public readonly type = PimActionTypes.SEARCHING_PARENT_SHARED_FIRM_PRODUCTS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class ResetQuoteSearchProducts implements IAction {\n  public readonly type = PimActionTypes.RESET_QUOTE_SEARCH_PRODUCTS;\n}\n\nexport class QuickSearchPimProductsSucceeded implements IAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Product>>\n    }\n  ) {}\n}\n\nexport class DeleteFirmProductAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_PRODUCT;\n\n  constructor(\n    public payload: {\n      productId: number;\n    }\n  ) {}\n}\n\nexport class DeleteFirmProductSucceeded implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_PRODUCT_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      productId: number;\n    }\n  ) {}\n}\n\nexport class SearchPimProductsAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      filters?: IMap<Filter>,\n      options?: Option<Product>,\n      draft?: boolean,\n    }\n  ) {}\n}\n\nexport class SearchPimProductsSucceeded implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Product>>,\n      hasNextPage: boolean,\n    }\n  ) {}\n}\n\nexport class SetSearchBodyAndSearchPimProductsAction implements IAction {\n  public readonly type = PimActionTypes.SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Product>,\n      draft?: boolean\n    }\n  ) {}\n}\n\nexport class ResetSearchPimProductsSearchBodyAction implements IAction {\n  public readonly type = PimActionTypes.RESET_SEARCH_PIM_PRODUCTS_SEARCH_BODY;\n}\n\nexport class SearchFirmProductsAction implements IAction {\n  public type = PimActionTypes.SEARCH_FIRM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<FirmProduct>,\n      sharedProduct?: boolean,\n      productSharedWithMe?: boolean,\n      isQuoteConnect?: boolean,\n      onSuccess?: () => void,\n    }\n  ) { }\n}\n\nexport class SearchFirmProductsSucceeded implements IAction {\n  public type = PimActionTypes.SEARCH_FIRM_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<FirmProduct>>,\n      hasNextPage: boolean,\n      count?: number,\n    }\n  ) { }\n}\n\nexport class SearchSharedProductsAction implements IAction {\n  public type = PimActionTypes.SEARCH_SHARED_PRODUCTS;\n\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<FirmProduct>,\n    }\n  ) { }\n}\n\nexport class SearchSharedProductsSucceeded implements IAction {\n  public type = PimActionTypes.SEARCH_SHARED_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<FirmProduct>>,\n      count: number\n    }\n  ) { }\n}\n\nexport class SearchSharedProductsFailedAction implements IAction {\n  public type = PimActionTypes.SEARCH_SHARED_PRODUCTS_FAILED;\n}\n\nexport class DeleteFirmProductAndSearchFirmProductsAction implements IAction {\n  public readonly type = PimActionTypes.DELETE_FIRM_PRODUCT_AND_SEARCH_FIRM_PRODUCTS;\n\n  constructor(\n    public payload: {\n      productId: number,\n      filters?: Filter,\n      options?: Option<FirmProduct>,\n      sharedProduct?: boolean,\n    }\n  ) { }\n}\n\nexport class ResetProductLibraryResultsAction implements IAction {\n  public readonly type = PimActionTypes.RESET_PRODUCT_LIBRARY_RESULTS;\n}\n\nexport class DuplicateSeriesAction implements IAction {\n  public readonly type = PimActionTypes.DUPLICATE_SERIES;\n  constructor (\n    public payload: {\n      series: IMap<Series>,\n      draft?: boolean,\n      duplicateProducts?: boolean,\n      searchAfter?: boolean,\n      dispatch?: any,\n      filters?: Filter,\n      options?: Option<Series>,\n    }\n  ) {}\n}\n\nexport class ResetPimStateAction implements IAction {\n  public readonly type = PimActionTypes.RESET_PIM_STATE;\n  constructor (\n    public payload: keyof IPimReducerState\n  ) {}\n}\n\nexport class QuickSearchFirmProductsAction extends SearchFirmProductsAction {\n  public readonly type = PimActionTypes.QUICK_SEARCH_FIRM_PRODUCTS;\n}\n\nexport class QuickSearchFirmProductsSucceeded extends SearchFirmProductsSucceeded {\n  public readonly type = PimActionTypes.QUICK_SEARCH_FIRM_PRODUCTS_SUCCEEDED;\n}\n\nexport class IsFetchingFirmProducts implements IAction {\n  public readonly type = PimActionTypes.FETCHING_FIRM_PRODUCTS;\n}\n\nexport class SearchPimCategoriesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_CATEGORIES;\n  constructor (\n    public payload: {\n      andFilterArray?: object[],\n      orFilterArray?: object[]\n    }\n  ) {}\n}\n\nexport class SetIsSearchingPimCategoriesAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_SEARCHING_PIM_CATEGORIES;\n  constructor (\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchPimCategoriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_CATEGORIES_SUCCEEDED;\n  constructor (\n    public payload: {\n      pimCategories: List<Map<string, any>>\n    }\n  ) {}\n}\n\nexport class UpdatePimCategoryAction implements IAction {\n  public readonly type = PimActionTypes.UPDATE_PIM_CATEGORY;\n  constructor (\n    public payload: {\n      categoryId: number,\n      updatedCategory: object,\n      filters: {\n        andFilterArray?: object[],\n        orFilterArray?: object[]\n      }\n    }\n  ) {}\n}\n\nexport class BulkExportProductsAction implements IAction {\n  public readonly type = PimActionTypes.BULK_EXPORT_PRODUCTS;\n\n  constructor (\n    public payload: {\n      exportFields: string[],\n      filters: any;\n      fileType: 'xlsx' | 'csv',\n      successCB?: () => void,\n      isQuoteConnect?: boolean,\n      currency: string,\n    }\n  ) { }\n}\n\nexport class BulkExportProductsLoadingAction implements IAction {\n  public readonly type = PimActionTypes.BULK_EXPORT_PRODUCTS_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class BulkExportProductsSucceededAction implements IAction {\n  public readonly type = PimActionTypes.BULK_EXPORT_PRODUCTS_SUCCESS;\n}\n\nexport class BulkExportProductsFailedAction implements IAction {\n  public readonly type = PimActionTypes.BULK_EXPORT_PRODUCTS_FAILED;\n}\n\nexport class GetBulkExportProductsConfigAction implements IAction {\n  public readonly type = PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG;\n}\n\nexport class GetBulkExportProductsConfigLoadingAction implements IAction {\n  public readonly type = PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class GetBulkExportProductsConfigSucceededAction implements IAction {\n  public readonly type = PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS;\n  constructor(\n    public payload: {\n      firmConfig: List<string>\n    }\n  ) {}\n}\n\nexport class GetBulkExportProductsConfigFailedAction implements IAction {\n  public readonly type = PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG_FAILED;\n}\n\nexport class SaveBulkExportProductsConfigAction implements IAction {\n  public readonly type = PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG;\n  constructor(\n    public payload: string[]\n  ) {}\n}\n\nexport class SaveBulkExportProductsConfigLoadingAction implements IAction {\n  public readonly type = PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SaveBulkExportProductsConfigSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS;\n  constructor(\n    public payload: {\n      firmConfig: List<string>\n    }\n  ) {}\n}\n\nexport class SaveBulkExportProductsConfigFailedAction implements IAction {\n  public readonly type = PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG_FAILED;\n}\n\nexport class BulkImportProductsAction implements IAction {\n  public readonly type = PimActionTypes.BULK_IMPORT_PRODUCTS;\n\n  constructor (\n    public payload: {\n      fileId?: string,\n      type: string,\n      conflicts?: [{\n        coordinate: string;\n        newValue: any;\n      }]\n    }\n  ) { }\n}\n\nexport class BulkImportProductsLoadingAction implements IAction {\n  public readonly type = PimActionTypes.BULK_IMPORT_PRODUCTS_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\n\nexport class BulkImportProductsSucceededAction implements IAction {\n  public readonly type = PimActionTypes.BULK_IMPORT_PRODUCTS_SUCCESS;\n}\n\nexport class BulkImportProductsFailedAction implements IAction {\n  public readonly type = PimActionTypes.BULK_IMPORT_PRODUCTS_FAILED;\n}\n\n// export class GetBulkImportProductsProgressAction implements IAction {\n//   public readonly type = PimActionTypes.GET_BULK_IMPORT_PRODUCTS_PROGRESS;\n// }\n\nexport class SetBulkImportProductsProgressAction implements IAction {\n  public readonly type = PimActionTypes.SET_BULK_IMPORT_PRODUCTS_PROGRESS;\n  constructor(\n    public payload: {\n      percent: number;\n      status: string;\n      details?: List<IMap<{}>>;\n    }\n  ) {}\n}\n\nexport class DownloadBulkImportTemplateFileAction implements IAction {\n  public readonly type = PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE;\n  constructor (\n    public payload: {\n      fileType: 'xlsx' | 'csv',\n      exportFields: string[],\n      isQuoteConnect: boolean,\n    }\n  ) { }\n}\n\nexport class DownloadBulkImportTemplateFileLoadingAction implements IAction {\n  public readonly type = PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class DownloadBulkImportTemplateFileSucceededAction implements IAction {\n  public readonly type = PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_SUCCESS;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class DownloadBulkImportTemplateFileFailedAction implements IAction {\n  public readonly type = PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_FAILED;\n}\nexport class EditFirmProductOrPackageSucceededAction implements IAction {\n  public readonly type = PimActionTypes.EDIT_FIRM_PRODUCT_OR_PACKAGE_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<FirmProduct> | IMap<Package>\n  ) {}\n}\n\nexport class GetFirmProductByIdAction implements IAction {\n  public readonly type = PimActionTypes.GET_FIRM_PRODUCT_BY_ID;\n\n  constructor(\n    public payload: {\n      firmProductId: number;\n      onSuccess?: (firmProduct: IMap<FirmProduct>) => void;\n    }\n  ) {}\n}\n\nexport class SetIsGettingFirmProductByIdAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_GETTING_FIRM_PRODUCT_BY_ID;\n\n  constructor(\n    public payload: {\n      isFetchingFirmProduct: boolean;\n    }\n  ) {}\n}\n\nexport class GetPackageByIdAction implements IAction {\n  public readonly type = PimActionTypes.GET_PACKAGE_BY_ID;\n\n  constructor(\n    public payload: {\n      packageId: number;\n      onSuccess?: (packageData: IMap<Package>) => void;\n    }\n  ) {}\n}\nexport class SetIsGettingPackageByIdAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_GETTING_PACKAGE_BY_ID;\n\n  constructor(\n    public payload: {\n      isFetchingPackage: boolean;\n    }\n  ) {}\n}\nexport class SearchPimIntegrationSeriesAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_INTEGRATION_SERIES;\n  constructor(\n    public payload: {\n      integrationType: PimIntegrationType,\n      searchTerm: string\n    }\n  ) {}\n}\nexport class SearchPimIntegrationSeriesSucceededAction implements IAction {\n  public readonly type = PimActionTypes.SEARCH_PIM_INTEGRATION_SERIES_SUCCEEDED;\n  constructor(\n    public payload: {\n      integrationSeries: List<Map<string, any>>\n    }\n  ) {}\n}\nexport class SetIsSearchingPimIntegrationSeriesAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_SEARCHING_PIM_INTEGRATION_SERIES;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class MapPimIntegrationAction implements IAction {\n  public readonly type = PimActionTypes.MAP_PIM_INTEGRATION;\n  constructor(\n    public payload: {\n      integrationType: string,\n      seriesId: string\n    }\n  ) {}\n}\nexport class CancelMapPimIntegrationPollingAction implements IAction {\n  public type = PimActionTypes.CANCEL_MAP_PIM_INTEGRATION_POLLING;\n}\n\nexport class MapPimIntegrationSucceededAction implements IAction {\n  public readonly type = PimActionTypes.MAP_PIM_INTEGRATION_SUCCEEDED;\n  constructor(\n    public payload: {\n      integrationMap: IMap<PimIntegrationMap>\n    }\n  ) {}\n}\nexport class SetIsMappingPimIntegrationAction implements IAction {\n  public readonly type = PimActionTypes.SET_IS_MAPPING_PIM_INTEGRATION;\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SavePimIntegrationMapAction implements IAction {\n  public readonly type = PimActionTypes.SAVE_PIM_INTEGRATION_MAP;\n  constructor(\n    public payload: {\n      integrationType: string,\n      integrationMapList: List<IMap<IIntegrationMappingFields>>,\n      displaySnackbar?: boolean,\n      onSuccess?: (response: List<IMap<IIntegrationMappingFields>>) => void\n    }\n  ) {}\n}\nexport class UnmapPimIntegrationAction implements IAction {\n  public readonly type = PimActionTypes.UNMAP_PIM_INTEGRATION;\n  constructor(\n    public payload: {\n      integrationType: string,\n      mappingIds: number[], // the endpoint deletes one mapping per call, the saga sends the calls of a batch together\n      displaySnackbar?: boolean,\n      onSuccess: (deletedMappingIds: number[]) => void,\n      onFailure?: (failedMappingIds: number[]) => void\n    }\n  ) {}\n}\nexport class CreatePimIntegrationSeriesDraftAction implements IAction {\n  public readonly type = PimActionTypes.CREATE_PIM_INTEGRATION_SERIES_DRAFT;\n  constructor(\n    public payload: {\n      integrationType: string,\n      integrationSeriesId: string,\n      integrationMapList: List<IMap<IIntegrationMappingFields>>\n    }\n  ) {}\n}\n\nexport class CancelCreatePimIntegrationSeriesDraftPollingAction implements IAction {\n  public type = PimActionTypes.CANCEL_CREATE_PIM_INTEGRATION_SERIES_DRAFT_POLLING;\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Spec,\n  PageData,\n  Drawing,\n  Filter,\n  Option,\n  DrawingRules,\n  MissingRule,\n  ProductCategory,\n  Product,\n  Rule,\n  AlternativeProduct, Project,\n} from '../../models';\n\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport File from '../../models/File';\nimport { Mode, SPEC_PRINT_TYPE } from '../../constants';\nimport { IPrintGroup } from '../../components/SpecificationBookletBeta/LixilPrintSpecDetail/Component';\nimport { ProjectActionTypes } from '../ProjectModule/actions';\n\n\nexport default {};\n\nexport enum SpecActionTypes {\n  CREATE_SPEC = 'CREATE_SPEC',\n  SELECT_SPEC = 'SELECT_SPEC',\n  REORDER_SPECS_AND_GET_PROJECT = 'REORDER_SPECS_AND_GET_PROJECT',\n  DELETE_SPEC = 'DELETE_SPEC',\n  DELETE_SPEC_SUCCEEDED = 'DELETE_SPEC_SUCCEEDED',\n  DELETE_SPEC_AND_GET_PROJECT_BY_ID = 'DELETE_SPEC_AND_GET_PROJECT_BY_ID',\n  GET_SPECS = 'GET_SPECS',\n  GET_SPECS_TAKE_EVERY = 'GET_SPECS_TAKE_EVERY',\n  CREATE_SPEC_SUCCEEDED = 'CREATE_SPEC_SUCCEEDED',\n  GET_SPECS_SUCCEEDED = 'GET_SPECS_SUCCEEDED',\n  GET_SPECS_FAILED = 'GET_SPECS_FAILED',\n  UPDATE_SPEC = 'UPDATE_SPEC',\n  CREATE_DRAWING = 'CREATE_DRAWING',\n  CREATE_DRAWING_THEN_SELECT_AND_REDIRECT = 'CREATE_DRAWING_THEN_SELECT_AND_REDIRECT',\n  DELETE_DRAWING = 'DELETE_DRAWING',\n  SELECT_DRAWING = 'SELECT_DRAWING',\n  SELECT_DRAWING_WITHOUT_RULES = 'SELECT_DRAWING_WITHOUT_RULES',\n  UPDATE_DRAWING = 'UPDATE_DRAWING',\n  UPDATE_DRAWING_SUCCEEDED = 'UPDATE_DRAWING_SUCCEEDED',\n  DUPLICATE_DRAWING_WITHIN_SPEC = 'DUPLICATE_DRAWING_WITHIN_SPEC',\n  GET_DRAWING_RULES = 'GET_DRAWING_RULES',\n  GET_DRAWING_RULES_AND_GET_SPEC = 'GET_DRAWING_RULES_AND_GET_SPEC',\n  UPDATE_RULES = 'UPDATE_RULES',\n  UPDATE_FAILED_SELF_RULES = 'UPDATE_FAILED_SELF_RULES',\n  UPDATE_FAILED_SELF_RULES_LOADING = 'UPDATE_FAILED_SELF_RULES_LOADING',\n  CLEAR_SELF_RULES = 'CLEAR_SELF_RULES',\n  UPDATE_RULES_MISSING = 'UPDATE_RULES_MISSING',\n  UPDATING_RULES = 'UPDATING_RULES',\n  UPDATE_RULES_SUCCESS = 'UPDATE_RULES_SUCCESS',\n  UPDATE_RULES_FAIL = 'UPDATE_RULES_FAIL',\n  CLEAR_DRAWING_RULES = 'CLEAR_DRAWING_RULES',\n  SPEC_FAILED = 'SPEC_FAILED',\n  GET_PRINT_FORMATS = 'GET_PRINT_FORMATS',\n  GET_PRINT_FORMATS_SUCCEEDED = 'GET_PRINT_FORMATS_SUCCEEDED',\n  POLL_PRINT_SPEC = 'POLL_PRINT_SPEC',\n  EDIT_SPEC_TITLE = 'EDIT_SPEC_TITLE',\n  SEARCH_SPECS = 'SEARCH_SPECS',\n  QUICK_SEARCH_SPECS = 'QUICK_SEARCH_SPECS',\n  SEARCH_SPECS_FAILED = 'SEARCH_SPECS_FAILED',\n  LOADING_SEARCHED_SPEC = 'LOADING_SEARCHED_SPEC',\n  SEARCH_SPECS_SUCCEEDED = 'SEARCH_SPECS_SUCCEEDED',\n  DELETE_AND_SEARCH_SPECS = 'DELETE_AND_SEARCH_SPECS',\n  SPEC_TOOL_SPEC_LIST_SEARCH_SPECS = 'SPEC_TOOL_SPEC_LIST_SEARCH_SPECS',\n  GET_SPECS_WITH_COMBINED_FILTERS = 'GET_SPECS_WITH_COMBINED_FILTERS',\n  VALIDATE_DRAWING = 'VALIDATE_DRAWING',\n  VALIDATE_ADD_PRODUCT_TO_DRAWING = 'VALIDATE_ADD_PRODUCT_TO_DRAWING',\n  GET_MASTER_SPEC_BY_ID = 'GET_MASTER_SPEC_BY_ID',\n  GET_TEMPLATE_SPEC_BY_ID = 'GET_TEMPLATE_SPEC_BY_ID',\n  SELECT_MASTER_SPEC = 'SELECT_MASTER_SPEC',\n  SELECT_TEMPLATE_SPEC = 'SELECT_TEMPLATE_SPEC',\n  GET_MASTER_SPECS_SUCCEEDED = 'GET_MASTER_SPECS_SUCCEEDED',\n  GET_TEMPLATE_SPECS_SUCCEEDED = 'GET_TEMPLATE_SPECS_SUCCEEDED',\n  SET_MODE = 'SET_MODE',\n  CREATE_MASTER_SPEC = 'CREATE_MASTER_SPEC',\n  CREATE_MASTER_SPEC_AND_REDIRECT = 'CREATE_MASTER_SPEC_AND_REDIRECT',\n  CREATE_TEMPLATE_SPEC_AND_REDIRECT = 'CREATE_TEMPLATE_SPEC_AND_REDIRECT',\n  SELECT_DRAWING_AND_REDIRECT = 'SELECT_DRAWING_AND_REDIRECT',\n  DELETE_MASTER_SPEC = 'DELETE_MASTER_SPEC',\n  DELETE_TEMPLATE_SPEC = 'DELETE_TEMPLATE_SPEC',\n  DELETE_MASTER_SPEC_AND_GET_MASTER_PROJECT_BY_ID = 'DELETE_MASTER_SPEC_AND_GET_MASTER_PROJECT_BY_ID',\n  DELETE_TEMPLATE_SPEC_AND_GET_TEMPLATE_PROJECT_BY_ID = 'DELETE_TEMPLATE_SPEC_AND_GET_TEMPLATE_PROJECT_BY_ID',\n  DELETE_MASTER_DRAWING = 'DELETE_MASTER_DRAWING',\n  DELETE_TEMPLATE_DRAWING = 'DELETE_TEMPLATE_DRAWING',\n  DELETE_MASTER_DRAWING_AND_GET_MASTER_SPEC = 'DELETE_MASTER_DRAWING_AND_GET_MASTER_SPEC',\n  DELETE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC = 'DELETE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC',\n  UPDATE_MASTER_DRAWING = 'UPDATE_MASTER_DRAWING',\n  UPDATE_TEMPLATE_DRAWING = 'UPDATE_TEMPLATE_DRAWING',\n  UPDATE_MASTER_SPEC = 'UPDATE_MASTER_SPEC',\n  UPDATE_TEMPLATE_SPEC = 'UPDATE_TEMPLATE_SPEC',\n  UPDATE_MASTER_SPEC_AND_REDIRECT = 'UPDATE_MASTER_SPEC_AND_REDIRECT',\n  UPDATE_TEMPLATE_SPEC_AND_REDIRECT = 'UPDATE_TEMPLATE_SPEC_AND_REDIRECT',\n  SET_SELECTED_SPEC_ID = 'SET_SELECTED_SPEC_ID',\n  SET_SELECTED_MASTER_SPEC_ID = 'SET_SELECTED_MASTER_SPEC_ID',\n  SET_SELECTED_TEMPLATE_SPEC_ID = 'SET_SELECTED_TEMPLATE_SPEC_ID',\n  UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC = 'UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC',\n  UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC = 'UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC',\n  DELETE_SPEC_AND_GET_PROJECT = 'DELETE_SPEC_AND_GET_PROJECT',\n  SET_REDIRECT_PATH = 'SET_REDIRECT_PATH',\n  SET_TEST_SPEC_MODE = 'SET_TEST_SPEC_MODE',\n  GET_SPEC_FILES = 'GET_SPEC_FILES',\n  GET_SPEC_FILES_SUCCEEDED = 'GET_SPEC_FILES_SUCCEEDED',\n  GET_SPEC_PRINT_CONFIG = 'GET_SPEC_PRINT_CONFIG',\n  GET_SPEC_PRINT_CONFIG_SUCCEEDED = 'GET_SPEC_PRINT_CONFIG_SUCCEEDED',\n  SET_SPEC_PRINT_CONFIG = 'SET_SPEC_PRINT_CONFIG',\n  SET_SPEC_PRINT_CONFIG_SUCCEEDED = 'SET_SPEC_PRINT_CONFIG_SUCCEEDED',\n  SET_LIXIL_PRINT_GROUPS_IN_CONFIG_BY_SELECTED_SPEC_ID = 'SET_LIXIL_PRINT_GROUPS_IN_CONFIG_BY_SELECTED_SPEC_ID',\n  SAVE_ALTERNATIVE_PRODUCTS = 'SAVE_ALTERNATIVE_PRODUCTS',\n  SET_IS_SAVING_ALTERNATIVE_PRODUCTS = 'SET_IS_SAVING_ALTERNATIVE_PRODUCTS',\n  DELETE_ALTERNATIVE_PRODUCT = 'DELETE_ALTERNATIVE_PRODUCT',\n  DELETE_ALTERNATIVE_PRODUCT_SUCCEEDED = 'DELETE_ALTERNATIVE_PRODUCT_SUCCEEDED',\n  SET_IS_DELETING_ALTERNATIVE_PRODUCT = 'SET_IS_DELETING_ALTERNATIVE_PRODUCT',\n  GET_DRAWING_BY_ID = 'GET_DRAWING_BY_ID',\n  PURE_VALIDATE_DRAWING = 'PURE_VALIDATE_DRAWING',\n  LINK_GENERIC_PRODUCT_TO_PRODUCT = 'LINK_GENERIC_PRODUCT_TO_PRODUCT',\n  UNLINK_GENERIC_PRODUCT = 'UNLINK_GENERIC_PRODUCT',\n  SET_IS_LINKING_OR_UNLINKING_GENERIC_PRODUCT = 'SET_IS_LINKING_OR_UNLINKING_GENERIC_PRODUCT',\n  UPDATE_SPEC_FILES_PERMISSION = 'UPDATE_SPEC_FILES_PERMISSION',\n  IS_UPDATING_SPEC_FILES = 'IS_UPDATING_SPEC_FILES',\n  COPY_ACTION = 'COPY_ACTION',\n  COPY_SUCCEED_ACTION = 'COPY_SUCCEED_ACTION',\n  COPY_FAILED_ACTION = 'COPY_FAILED_ACTION',\n  SET_PT_SPEC_DND_MENU = 'SET_PT_SPEC_DND_MENU',\n  SET_IS_UPDATING_DRAWING = 'SET_IS_UPDATING_DRAWING',\n  SET_NEW_DRAWING_ID = 'SET_NEW_DRAWING_ID',\n  GET_MASTER_DRAWER_DATA = 'GET_MASTER_DRAWER_DATA',\n  GET_MATER_DRAWER_DATA_SUCCEEDED = 'GET_MATER_DRAWER_DATA_SUCCEEDED',\n  MASTER_DRAWER_SELECT_SPEC = 'MASTER_DRAWER_SELECT_SPEC',\n  MASTER_DRAWER_LOAD_SPEC = 'MASTER_DRAWER_LOAD_SPEC',\n  MASTER_DRAWER_LOAD_SPEC_SUCCEEDED = 'MASTER_DRAWER_LOAD_SPEC_SUCCEEDED',\n  MASTER_DRAWER_UPDATE_DRAWING = 'MASTER_DRAWER_UPDATE_DRAWING',\n  GET_PINNED_DRAWING = 'GET_PINNED_DRAWING',\n  GET_PINNED_DRAWING_SUCCEEDED = 'GET_PINNED_DRAWING_SUCCEEDED',\n  MASTER_DRAWER_UPDATE_PINNED_DRAWING = 'MASTER_DRAWER_UPDATE_PINNED_DRAWING',\n  MASTER_DRAWER_TOGGLE_EXPAND = 'MASTER_DRAWER_TOGGLE_EXPAND',\n  SET_MASTER_DRAWER_UPDATING = 'SET_MASTER_DRAWER_UPDATING',\n  SELECT_MASTER_DRAWER_DRAWING = 'SELECT_MASTER_DRAWER_DRAWING',\n  SELECT_PINNED_DRAWING = 'SELECT_PINNED_DRAWING',\n  PRODUCT_BROWSING_CREATE_DRAWING = 'PRODUCT_BROWSING_CREATE_DRAWING',\n  TOGGLE_PIN_MASTER_DRAWING = 'TOGGLE_PIN_MASTER_DRAWING',\n  TOGGLE_PIN_TEMPLATE_DRAWING = 'TOGGLE_PIN_TEMPLATE_DRAWING',\n  RESET_SPECS = 'RESET_SPECS',\n  LOG_GUEST_USER_DOWNLOAD_SPEC = 'LOG_GUEST_USER_DOWNLOAD_SPEC',\n  AUTO_SET_DRAWING_NAME = 'AUTO_SET_DRAWING_NAME',\n  TRIGGER_SPEC_ASSIST = 'TRIGGER_SPEC_ASSIST',\n  CANCEL_SPEC_ASSIST = 'CANCEL_SPEC_ASSIST',\n  BULK_DELETE_DRAWINGS = 'BULK_DELETE_DRAWINGS',\n}\n\nexport class BulkDeleteDrawingsAction implements IAction {\n  public type = SpecActionTypes.BULK_DELETE_DRAWINGS;\n  constructor(\n    public payload: {\n      type: 'project' | 'master' | 'template';\n      // specDrawings: Map<number, List<number>>;\n      specDrawings: Array<{ specId: number, drawingIds: number[] }>;\n    }\n  ) { }\n}\n\n\nexport class TriggerSpecAssistAction implements IAction {\n  public type = SpecActionTypes.TRIGGER_SPEC_ASSIST;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingIds: number[];\n      onSuccessCb?: () =>  void;\n      onFailCb?: () => void;\n      onFinallyCb?: () => void;\n    }\n  ) { }\n}\n\nexport class CancelSpecAssistAction implements IAction {\n  public type = SpecActionTypes.CANCEL_SPEC_ASSIST;\n}\n\nexport class AutoSetDrawingNameAction implements IAction {\n  public type = SpecActionTypes.AUTO_SET_DRAWING_NAME;\n  constructor(\n    public payload: {\n      setAndStartNewDrawing?: boolean;\n    }\n  ) { }\n}\n\nexport class ResetSpecsAction implements IAction {\n  public readonly type = SpecActionTypes.RESET_SPECS;\n}\n\nexport class TogglePinMasterDrawingAction implements IAction {\n  public type = SpecActionTypes.TOGGLE_PIN_MASTER_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      isPinned: boolean;\n      onSuccess?: (spec: IMap<Spec>) => void;\n    }\n  ) { }\n}\n\nexport class TogglePinTemplateDrawingAction implements IAction {\n  public type = SpecActionTypes.TOGGLE_PIN_TEMPLATE_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      isPinned: boolean;\n      onSuccess?: (spec: IMap<Spec>) => void;\n    }\n  ) { }\n}\n\nexport class SetIsUpdatingDrawingAction implements IAction {\n  public type = SpecActionTypes.SET_IS_UPDATING_DRAWING;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class SetNewDrawingIdAction implements IAction {\n  public type = SpecActionTypes.SET_NEW_DRAWING_ID;\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class UpdateSpecFilesPermissionAction implements IAction {\n  public type = SpecActionTypes.UPDATE_SPEC_FILES_PERMISSION;\n  constructor(\n    public payload: {\n      spec: IMap<Spec>,\n      linkedFiles: List<IMap<File>>,\n      permission: 'Public' | 'Protected'\n    }\n  ) { }\n}\n\nexport class IsUpdatingSpecFilesAction implements IAction {\n  public type = SpecActionTypes.IS_UPDATING_SPEC_FILES;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class GetDrawingByIdAction implements IAction {\n  public type = SpecActionTypes.GET_DRAWING_BY_ID;\n  constructor(\n    public payload: {\n      specId: number,\n      drawingId: number\n    }\n  ) { }\n}\n\nexport class DeleteAlternativeProductSucceededAction implements IAction {\n  public type = SpecActionTypes.DELETE_ALTERNATIVE_PRODUCT_SUCCEEDED;\n  constructor(\n    public payload: {\n      specId: number,\n      drawingId: number,\n      productId: number, // specProductId\n      alternativeId: number,\n      mode: Mode,\n    }\n  ) { }\n}\n\nexport class DeleteAlternativeProductAction implements IAction {\n  public type = SpecActionTypes.DELETE_ALTERNATIVE_PRODUCT;\n  constructor(\n    public payload: {\n      specId: number,\n      drawingId: number,\n      productId: number, // specProductId\n      alternativeId: number,\n    }\n  ) { }\n}\n\nexport class SetIsDeletingAlternativeProductAction implements IAction {\n  public type = SpecActionTypes.SET_IS_DELETING_ALTERNATIVE_PRODUCT;\n  constructor(\n    public payload: {\n      isDeletingAlternativeProduct: boolean;\n    }\n  ) { }\n}\n\nexport class SaveAlternativeProductsAction implements IAction {\n  public type = SpecActionTypes.SAVE_ALTERNATIVE_PRODUCTS;\n  constructor(\n    public payload: {\n      specId: number,\n      drawingId: number,\n      productId: number, // specProductId\n      alternativeProducts: List<IMap<Partial<AlternativeProduct>>>;\n      closeModalAfter?: boolean;\n      displaySnackbar?: boolean;\n      baseProduct?: IMap<Product>;\n    }\n  ) { }\n}\n\nexport class SetIsSavingAlternativeProductsAction implements IAction {\n  public type = SpecActionTypes.SET_IS_SAVING_ALTERNATIVE_PRODUCTS;\n  constructor(\n    public payload: {\n      isSavingAlternativeProducts: boolean;\n    }\n  ) { }\n}\n\nexport class SetLixilPrintGroupsInConfigBySelectedSpecIdAction implements IAction {\n  public type = SpecActionTypes.SET_LIXIL_PRINT_GROUPS_IN_CONFIG_BY_SELECTED_SPEC_ID;\n  constructor(\n    public payload: List<IMap<IPrintGroup>>\n  ) { }\n}\n\nexport class GetSpecPrintConfigSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPEC_PRINT_CONFIG_SUCCEEDED;\n  constructor(\n    public payload: {\n      specId: number,\n      config: Map<string, any>\n    }\n  ) { }\n}\n\nexport class GetSpecPrintConfigAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPEC_PRINT_CONFIG;\n  constructor(\n    public payload: {\n      specId: number,\n      type: SPEC_PRINT_TYPE,\n    }\n  ) { }\n}\n\nexport class SetSpecPrintConfigAction implements IAction {\n  public readonly type = SpecActionTypes.SET_SPEC_PRINT_CONFIG;\n  constructor(\n    public payload: {\n      specId: number,\n      type: SPEC_PRINT_TYPE,\n      config: any,\n    }\n  ) { }\n}\n\nexport class SetTestSpecModeAction implements IAction {\n  public readonly type = SpecActionTypes.SET_TEST_SPEC_MODE;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class SetRedirectPathAction implements IAction {\n  public readonly type = SpecActionTypes.SET_REDIRECT_PATH;\n  constructor(\n    public payload?: string\n  ) { }\n}\n\nexport class SetSelectedSpecIdAction implements IAction {\n  public readonly type = SpecActionTypes.SET_SELECTED_SPEC_ID;\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class SetSelectedMasterSpecIdAction implements IAction {\n  public readonly type = SpecActionTypes.SET_SELECTED_MASTER_SPEC_ID;\n  constructor(\n    public payload: number\n  ) { }\n}\nexport class SetSelectedTemplateSpecIdAction implements IAction {\n  public readonly type = SpecActionTypes.SET_SELECTED_TEMPLATE_SPEC_ID;\n  constructor(\n    public payload: number\n  ) { }\n}\ntype Destination = `master` | `master_template` | `standard`;\nexport interface ICopyActionPayloadForMulti {\n  body: {\n    hasMultipleDestinationSpecs: boolean;\n    mappings: Array<{\n      sourceSpecs?: Array<{ id: number, drawings?: Array<{ id: number }> }>,\n      sourceProjectId?: number,\n      sourceType?: string,\n      destinationProjectId?: number,\n      forceCreateNewSpec?: boolean,\n      destinationType: Destination,\n      newSpecName?: string,\n      destinationSpecId?: number,\n      preserveDrawingOrder?: boolean,\n      drawingInsertPoint?: number;\n    }>\n  };\n  onSuccess?: (specs: List<IMap<Spec>>) => void;\n  onFailed?: () => void;\n}\nexport interface ICopyActionPayloadForOne {\n  sourceSpecs?: Array<{ id: number, drawings?: Array<{ id: number }> }>;\n  sourceProjectId?: number;\n  sourceType?: string;\n  destinationProjectId?: number;\n  destinationType: Destination;\n  newSpecName?: string;\n  destinationSpecId?: number;\n  preserveDrawingOrder?: boolean;\n  onSuccess?: (specs: List<IMap<Spec>>) => void;\n  onFailed?: () => void;\n  drawingInsertPoint?: number;\n  forceCreateNewSpec?: boolean;\n}\nexport class CopyAction implements IAction {\n  public readonly type = SpecActionTypes.COPY_ACTION;\n  constructor(\n    public payload: ICopyActionPayloadForMulti | ICopyActionPayloadForOne\n  ) { }\n}\nexport class CopySucceedAction implements IAction {\n  public readonly type = SpecActionTypes.COPY_SUCCEED_ACTION;\n}\nexport class CopyFailedAction implements IAction {\n  public readonly type = SpecActionTypes.COPY_FAILED_ACTION;\n}\n\nexport class UpdateMasterSpecAndRedirectAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_MASTER_SPEC_AND_REDIRECT;\n  constructor(\n    public payload: {\n      specId: number;\n      body: any;\n    }\n  ) { }\n}\nexport class UpdateTemplateSpecAndRedirectAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_TEMPLATE_SPEC_AND_REDIRECT;\n  constructor(\n    public payload: {\n      specId: number;\n      body: any;\n    }\n  ) { }\n}\n\nexport class UpdateMasterSpecAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_MASTER_SPEC;\n  constructor(\n    public payload: {\n      specId: number;\n      body: any;\n    }\n  ) { }\n}\n\nexport class UpdateTemplateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_TEMPLATE_SPEC;\n  constructor(\n    public payload: {\n      specId: number;\n      body: any;\n    }\n  ) { }\n}\n\nexport class UpdateMasterDrawingAction implements IAction {\n  public type = SpecActionTypes.UPDATE_MASTER_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      drawing: IMap<Partial<Drawing>>;\n      onSuccess?: (spec: IMap<Spec>) => void;\n      instantUpdateDrawingInStore?: boolean\n    }\n  ) { }\n}\nexport class UpdateTemplateDrawingAction implements IAction {\n  public type = SpecActionTypes.UPDATE_TEMPLATE_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      drawing: IMap<Partial<Drawing>>;\n      onSuccess?: (spec: IMap<Spec>) => void;\n      instantUpdateDrawingInStore?: boolean\n    }\n  ) { }\n}\nexport class UpdateMasterDrawingAndGetMasterSpecAction extends UpdateMasterDrawingAction {\n  public readonly type = SpecActionTypes.UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC;\n}\n\nexport class UpdateTemplateDrawingAndGetTemplateSpecAction extends UpdateTemplateDrawingAction {\n  public readonly type = SpecActionTypes.UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC;\n}\nexport class DeleteMasterDrawingAndGetMasterSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_MASTER_DRAWING_AND_GET_MASTER_SPEC;\n  constructor(\n    public payload: {\n      drawingSpecId: number;\n      drawingId: number;\n      specIdToGet: number;\n      onDeleteSuccess?: () => void;\n    }\n  ) { }\n}\nexport class DeleteTemplateDrawingAndGetTemplateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC;\n  constructor(\n    public payload: {\n      drawingSpecId: number;\n      drawingId: number;\n      specIdToGet: number;\n      onDeleteSuccess?: () => void;\n    }\n  ) { }\n}\nexport class DeleteMasterDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_MASTER_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      onDeleteSuccess?: () => void;\n    }\n  ) { }\n}\n\nexport class DeleteTemplateDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_TEMPLATE_DRAWING;\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      onDeleteSuccess?: () => void;\n    }\n  ) { }\n}\nexport class DeleteMasterSpecAndGetMasterProjectByIdAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_MASTER_SPEC_AND_GET_MASTER_PROJECT_BY_ID;\n  constructor(\n    public payload: {\n      deleteId: number;\n      getId?: number;\n    }\n  ) { }\n}\nexport class DeleteTemplateSpecAndGetTemplateProjectByIdAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_TEMPLATE_SPEC_AND_GET_TEMPLATE_PROJECT_BY_ID;\n  constructor(\n    public payload: {\n      deleteId: number;\n      getId?: number;\n    }\n  ) { }\n}\nexport class DeleteMasterSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_MASTER_SPEC;\n  constructor(\n    public payload: {\n      specId: number;\n    }\n  ) { }\n}\nexport class DeleteTemplateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_TEMPLATE_SPEC;\n  constructor(\n    public payload: {\n      specId: number;\n    }\n  ) { }\n}\nexport class SelectDrawingAndRedirectAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_DRAWING_AND_REDIRECT;\n  constructor(\n    public payload: {\n      drawingId: number;\n      path: string;\n    }\n  ) { }\n}\nexport class CreateMasterSpecAction implements IAction {\n  public readonly type = SpecActionTypes.CREATE_MASTER_SPEC;\n  constructor(\n    public payload?: {\n      projectId: number;\n      spec?: IMap<Partial<Spec>>;\n      onSuccess?: (specId: number) => void;\n    }\n  ) { }\n}\nexport class CreateMasterSpecAndRedirectAction implements IAction {\n  public readonly type = SpecActionTypes.CREATE_MASTER_SPEC_AND_REDIRECT;\n  constructor(\n    public payload?: {\n      projectId: number;\n      spec?: IMap<Spec>;\n    }\n  ) { }\n}\n\nexport class CreateTemplateSpecAndRedirectAction implements IAction {\n  public readonly type = SpecActionTypes.CREATE_TEMPLATE_SPEC_AND_REDIRECT;\n  constructor(\n    public payload?: {\n      projectId: number;\n      spec?: IMap<Spec>\n    }\n  ) { }\n}\nexport class SetModeAction implements IAction {\n  public readonly type = SpecActionTypes.SET_MODE;\n  constructor(\n    public payload: Mode\n  ) { }\n}\n\nexport class GetMasterSpecsSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_MASTER_SPECS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Spec>>\n  ) { }\n}\nexport class GetTemplateSpecsSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_TEMPLATE_SPECS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Spec>>\n  ) { }\n}\n\nexport class GetMasterSpecsAction implements IAction {\n  public readonly type = SpecActionTypes.GET_MASTER_SPEC_BY_ID;\n  constructor(\n    // public payload?: number,\n    // public options?: {\n    //   withLoading?: boolean;\n    // },\n    public payload?: {\n      specId?: number,\n      withLoading?: boolean,\n      onSuccess?: (masterSpecs?: List<IMap<Spec>>) => void,\n    }\n  ) { }\n}\nexport class GetTemplateSpecsAction implements IAction {\n  public readonly type = SpecActionTypes.GET_TEMPLATE_SPEC_BY_ID;\n  constructor(\n    public payload?: number | number[],\n    public options?: {\n      withLoading?: boolean;\n      onSuccess?: (templateSpec) => void;\n    }\n  ) { }\n}\nexport class SelectMasterSpecAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_MASTER_SPEC;\n\n  constructor(\n    public payload: number,\n    public setSelectDrawingId?: boolean,\n  ) { }\n}\nexport class SelectTemplateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_TEMPLATE_SPEC;\n\n  constructor(\n    public payload: number\n  ) { }\n}\nexport class PureValidateDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.PURE_VALIDATE_DRAWING;\n\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      products: List<IMap<Product>>;\n      useAccessibilityStandard: boolean;\n    }\n  ) { }\n}\n\nexport class ValidateDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.VALIDATE_DRAWING;\n\n  constructor(\n    public payload: {\n      specId: number;\n      products: List<IMap<Product>>;\n      useAccessibilityStandard: boolean;\n      category: IMap<ProductCategory>;\n      seriesIdToOrderBy?: number;\n    }\n  ) { }\n}\n\nexport class ValidateAddProductToDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.VALIDATE_ADD_PRODUCT_TO_DRAWING;\n\n  constructor(\n    public payload: {\n      specId: number;\n      products: List<IMap<Product>>;\n      useAccessibilityStandard: boolean;\n      category: IMap<ProductCategory>;\n      openAlternativeModal?: boolean;\n      callback: () => void;\n    }\n  ) { }\n}\n\nexport class GetSeriesWithCombinedFiltersAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPECS_WITH_COMBINED_FILTERS;\n\n  constructor(\n    public payload?: {\n      updateAccessible?: boolean;\n      products?: List<IMap<Product>>;\n      additionalSingleUsedFilters?: any;\n    },\n  ) { }\n}\n\n\nexport class ClearDrawingRulesAction {\n  public readonly type = SpecActionTypes.CLEAR_DRAWING_RULES;\n}\n\nexport class GetPrintFormatsAction implements IAction {\n  public readonly type = SpecActionTypes.GET_PRINT_FORMATS;\n}\n\nexport class GetPrintFormatsSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_PRINT_FORMATS_SUCCEEDED;\n  constructor(\n    public payload: Map<string, IMap<PageData>>\n  ) { }\n}\n\nexport class CreateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.CREATE_SPEC;\n\n  constructor(\n    public payload: {\n      projectId?: number,\n      spec: IMap<Partial<Spec>>,\n      isTestSpec?: boolean,\n      onSuccess?: (specId: number, specName: string) => void,\n    }\n  ) { }\n}\n\nexport class ReorderSpecsAndGetProjectAction implements IAction {\n  public readonly type = SpecActionTypes.REORDER_SPECS_AND_GET_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      specsOrder: number[],\n      onSuccess?: () => void,\n      onFail?: () => void,\n    }\n  ) { }\n}\n\nexport class DeleteSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_SPEC;\n\n  constructor(\n    public payload: {\n      specId: number,\n      specName: string,\n      newSelectedSpecId?: number,\n      redirectPath?: string,\n    }\n  ) { }\n}\n\nexport class DeleteSpecAndGetProjectAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_SPEC_AND_GET_PROJECT;\n\n  constructor(\n    public payload: {\n      specId: number,\n      specName: string,\n      projectId: number\n    }\n  ) { }\n}\n\nexport class DeleteSpecSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_SPEC_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      specId: number\n    }\n  ) { }\n}\n\nexport class DeleteSpecAndGetProjectByIdAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_SPEC_AND_GET_PROJECT_BY_ID;\n\n  constructor(\n    public payload: {\n      specId: number,\n      projectId: number,\n      specName: string,\n      newSelectedSpecId?: number,\n    }\n  ) { }\n}\nexport class CreateSpecFailedAction implements IAction {\n  public readonly type = SpecActionTypes.SPEC_FAILED;\n\n  constructor(\n    public payload: {\n      err: Error;\n    }\n  ) { }\n}\n\nexport class SelectSpecAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_SPEC;\n\n  constructor(\n    public payload: number,\n    public setSelectDrawingId?: boolean,\n  ) { }\n}\n\nexport class GetSpecsAction implements IAction {\n  public type = SpecActionTypes.GET_SPECS;\n  constructor(\n    public payload?: {\n      specId?: number,\n      onSuccess?: (specs: List<IMap<Spec>>) => void,\n      onFailed?: (error) => void,\n    }\n  ) { }\n}\nexport class GetSpecsTakeEveryAction extends GetSpecsAction {\n  public type = SpecActionTypes.GET_SPECS_TAKE_EVERY;\n}\n\nexport class GetSpecsSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPECS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Spec>>\n  ) { }\n}\n\nexport class GetSpecsFailedAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPECS_FAILED;\n}\n\nexport class CreateSpecSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.CREATE_SPEC_SUCCEEDED;\n}\n\nexport class UpdateSpecAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_SPEC;\n  constructor(\n    public payload: {\n      specId: number,\n      spec: IMap<Partial<Spec>>,\n      openSnackbar?: boolean,\n      onSuccess?: () => void;\n      onFail?: () => void;\n    }\n  ) { }\n}\n\nexport class CreateDrawingAction implements IAction {\n  public type = SpecActionTypes.CREATE_DRAWING;\n\n  constructor(\n    public payload: {\n      specId?: number\n    }\n  ) { }\n}\n\nexport class CreateDrawingThenSelectAndRedirectAction extends CreateDrawingAction {\n  public type = SpecActionTypes.CREATE_DRAWING_THEN_SELECT_AND_REDIRECT;\n\n  constructor(\n    public payload: {\n      specId?: number,\n      redirect?: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class SelectDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_DRAWING;\n\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class SelectDrawingWithoutRulesAction implements IAction {\n  public readonly type = SpecActionTypes.SELECT_DRAWING_WITHOUT_RULES;\n\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class DuplicateDrawingWithinSpecAction implements IAction {\n  public readonly type = SpecActionTypes.DUPLICATE_DRAWING_WITHIN_SPEC;\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class DeleteDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_DRAWING;\n  constructor(\n    public payload: {\n      drawingId: number,\n      withLoad?: boolean,\n      onDeleteSuccess?: () => void,\n    }\n  ) { }\n}\nexport class UpdateDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_DRAWING;\n\n  constructor(\n    public payload: {\n      drawingId: number,\n      drawing: IMap<Drawing>,\n      openSnackbar?: boolean,\n      getSeries?: boolean,\n      resetEditProductIndex?: boolean,\n      editProductIndex?: number,\n      alternativeProducts?: List<IMap<AlternativeProduct>>,\n      updateAccessible?: boolean,\n      clearFilters?: boolean,\n      instantUpdateDrawingInStore?: boolean,\n      useSpecAssist?: boolean,\n      onFinally?: () => void,\n    }\n  ) { }\n}\n\nexport class UpdateDrawingSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_DRAWING_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      drawingId: number,\n      drawing: IMap<Partial<Drawing>>,\n    }\n  ) { }\n}\n\nexport class GetDrawingRulesAction implements IAction {\n  public readonly type = SpecActionTypes.GET_DRAWING_RULES;\n\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n    }\n  ) { }\n}\n\nexport class GetDrawingRulesAndGetSpecAction implements IAction {\n  public readonly type = SpecActionTypes.GET_DRAWING_RULES_AND_GET_SPEC;\n\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n    }\n  ) { }\n}\n\nexport class UpdateSelfFailedRulesLoadingAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_FAILED_SELF_RULES_LOADING;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class UpdateSelfFailedRulesAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_FAILED_SELF_RULES;\n  constructor(\n    public payload: {\n      rules: Map<string, IMap<Rule>>;\n    }\n  ) { }\n}\n\nexport class ClearSelfRulesAction implements IAction {\n  public readonly type = SpecActionTypes.CLEAR_SELF_RULES;\n}\n\nexport class UpdateRulesAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_RULES;\n  constructor(\n    public payload: {\n      drawingId: number;\n      rules: IMap<DrawingRules>;\n    }\n  ) { }\n}\nexport class UpdateRulesMissing implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_RULES_MISSING;\n  constructor(\n    public payload: {\n      drawingId: number;\n      missing: List<IMap<MissingRule>>;\n    }\n  ) { }\n}\n\nexport class UpdatingRulesAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATING_RULES;\n}\nexport class UpdateRulesSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_RULES_SUCCESS;\n}\nexport class UpdateRulesFailededAction implements IAction {\n  public readonly type = SpecActionTypes.UPDATE_RULES_FAIL;\n}\n\nexport class EditSpecTitleAction implements IAction {\n  public readonly type = SpecActionTypes.EDIT_SPEC_TITLE;\n\n  constructor(\n    public payload: {\n      specId: number,\n      values: any\n    }\n  ) { }\n}\n\nexport class SearchSpecsAction implements IAction {\n  public type = SpecActionTypes.SEARCH_SPECS;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Spec>,\n    }\n  ) { }\n}\n\nexport class SpecToolSpecListSearchSpecsAction extends SearchSpecsAction {\n  public readonly type = SpecActionTypes.SPEC_TOOL_SPEC_LIST_SEARCH_SPECS;\n  constructor(props) {\n    super(props);\n  }\n}\nexport class SearchSpecsSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.SEARCH_SPECS_SUCCEEDED;\n  constructor(\n    public payload: {\n      count?: number;\n      specs: List<IMap<Spec>>;\n      hasNextPage?: boolean;\n    }\n  ) { }\n}\n\nexport class SearchSpecsFailedAction implements IAction {\n  public readonly type = SpecActionTypes.SEARCH_SPECS_FAILED;\n  constructor(\n    public payload: Error\n  ) { }\n}\n\nexport class LoadingSearchedSpecAction implements IAction {\n  public readonly type = SpecActionTypes.LOADING_SEARCHED_SPEC;\n}\n\nexport class DeleteSpecAndSearchSpecsAction implements IAction {\n  public readonly type = SpecActionTypes.DELETE_AND_SEARCH_SPECS;\n  constructor(\n    public payload: {\n      id: number,\n      name: string,\n      filters?: Filter,\n      options?: Option<Spec>\n    }\n  ) { }\n}\n\nexport class GetSpecFilesAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPEC_FILES;\n\n  constructor(\n    public specId: number\n  ) { }\n}\n\nexport class GetSpecFilesSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_SPEC_FILES_SUCCEEDED;\n\n  constructor(\n    public files: Map<string, List<IMap<File>>>\n  ) { }\n}\n\nexport class LinkGenericProductToProductAction implements IAction {\n  public readonly type = SpecActionTypes.LINK_GENERIC_PRODUCT_TO_PRODUCT;\n  constructor(\n    public payload: {\n      productId: number,\n      specId: number,\n      productNumber: string;\n      manufacturer: string;\n    }\n  ) { }\n}\n\nexport class UnlinkGenericProductAction implements IAction {\n  public readonly type = SpecActionTypes.UNLINK_GENERIC_PRODUCT;\n  constructor(\n    public payload: {\n      productId: number,\n      specId: number,\n      identifiedProductNumber: string,\n      identifiedBrand: string,\n    }\n  ) { }\n}\n\nexport class SetIsLinkingOrUnlinkGenericProductAction implements IAction {\n  public readonly type = SpecActionTypes.SET_IS_LINKING_OR_UNLINKING_GENERIC_PRODUCT;\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class SetPTSpecDndMenuAction implements IAction {\n  public readonly type = SpecActionTypes.SET_PT_SPEC_DND_MENU;\n  constructor(\n    public payload: IMap<{\n      index: number,\n      anchorEl: Element\n    }>\n  ) { }\n}\n\nexport class GetMasterDrawerDataAction implements IAction {\n  public readonly type = SpecActionTypes.GET_MASTER_DRAWER_DATA;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Project>,\n      type: 'master' | 'template'\n      withInfiniteScroll?: boolean,\n      onSuccess?: (data: List<IMap<Project>>) => void\n    }\n  ) { }\n}\n\nexport class GetPinnedDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.GET_PINNED_DRAWING;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Spec>,\n      withInfiniteScroll?: boolean\n    }\n  ) { }\n}\nexport class GetPinnedDrawingSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_PINNED_DRAWING_SUCCEEDED;\n  constructor(\n    public payload: {\n      masterSpecsCount?: number;\n      masterSpecsOffset?: number;\n      templateSpecsCount?: number;\n      templateSpecsOffset?: number;\n      hasNextPage?: boolean;\n      data: List<IMap<Project>>;\n      withInfiniteScroll?: boolean\n    }\n  ) { }\n}\nexport class GetMasterDrawerDataSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.GET_MATER_DRAWER_DATA_SUCCEEDED;\n  constructor(\n    public payload: {\n      count?: number;\n      hasNextPage?: boolean;\n      data: List<IMap<Project>>;\n      type: 'master' | 'template',\n      withInfiniteScroll?: boolean\n    }\n  ) { }\n}\n\nexport class MasterDrawerSelectSpecAction implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_SELECT_SPEC;\n  constructor(\n    public payload: {\n      projectId: number,\n      spec: IMap<{\n        id: number,\n        name: string,\n      }>,\n      type: 'master' | 'template'\n    }\n  ) { }\n}\n\nexport class MasterDrawerLoadSpecAction implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_LOAD_SPEC;\n  constructor(\n    public payload: {\n      projectId: number,\n      specId: number,\n      type: 'master' | 'template'\n    }\n  ) { }\n}\n\nexport class MasterDrawerLoadSpecSucceededAction implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_LOAD_SPEC_SUCCEEDED;\n  constructor(\n    public payload: {\n      projectId: number,\n      type: 'master' | 'template',\n      specData: IMap<Spec>\n    }\n  ) { }\n}\n\nexport class MasterDrawerUpdateDrawer implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_UPDATE_DRAWING;\n  constructor(\n    public payload: {\n      projectId: number,\n      drawingId: number,\n      drawing: IMap<Partial<Drawing>>,\n      type: 'master' | 'template'\n    }\n  ) { }\n}\n\nexport class MasterDrawerUpdatePinnedDrawer implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_UPDATE_PINNED_DRAWING;\n  constructor(\n    public payload: {\n      specId: number,\n      drawingId: number,\n    }\n  ) { }\n}\n\nexport class MasterDrawerToggleExpandAction implements IAction {\n  public readonly type = SpecActionTypes.MASTER_DRAWER_TOGGLE_EXPAND;\n  constructor(\n    public payload: {\n      projectId: number,\n      type: 'master' | 'template',\n      value?: boolean,\n    }\n  ) { }\n}\n\nexport class SetMasterDrawerUpdatingAction implements IAction {\n  public readonly type = SpecActionTypes.SET_MASTER_DRAWER_UPDATING;\n  constructor(\n    public payload: {\n      drawingId: number,\n      value: boolean,\n    }\n  ) { }\n}\n\nexport class ProductCatalogueCreateDrawingAction implements IAction {\n  public readonly type = SpecActionTypes.PRODUCT_BROWSING_CREATE_DRAWING;\n  constructor(\n    public payload: {\n      specId: number,\n      specType: 'master' | 'project' | 'spec',\n      projectId?: number,\n      onSuccess: () => void\n    }\n  ) {}\n}\n\nexport class SelectMasterDrawerDrawingAction implements IAction {\n    public readonly type = SpecActionTypes.SELECT_MASTER_DRAWER_DRAWING;\n    constructor(\n        public payload: {\n            projectId: number,\n            type: 'master' | 'template',\n            drawingIds?: List<number>,\n            value: boolean,\n        }\n    ) {}\n}\n\nexport class SelectPinnedDrawingAction implements IAction {\n    public readonly type = SpecActionTypes.SELECT_PINNED_DRAWING;\n    constructor(\n        public payload: {\n            data: Array<[number, number, number, 'master' | 'template']>,\n            value: boolean,\n        }\n    ) {}\n}\n\nexport class LogGuestUserDownloadSpecAction implements IAction {\n  public readonly type = SpecActionTypes.LOG_GUEST_USER_DOWNLOAD_SPEC;\n  constructor(\n    public payload: {\n      specId: number,\n      guestEmail: string,\n    }\n  ) { }\n}","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","import arrayWithoutHoles from \"@babel/runtime/helpers/esm/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime/helpers/esm/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import { takeEvery, takeLatest, select, call } from 'redux-saga/effects';\nimport { AtsActionTypes } from './actions';\nimport { makeSelectUserId } from './selectors';\nimport { getToken } from './saga';\nimport { getEnv } from '../../constants';\nimport { sseClient } from '../../services/sse/sseClient';\n\n// Bridges the auth session to the shared SSE client. The connection itself is\n// driven by subscriber presence inside sseClient; this saga only feeds it the\n// current session params (gateway / userId / token) and clears them on logout.\n// Lives in AtsModule because these are auth actions and getToken lives here;\n// keeping it out of services/sse preserves that layer as a business-agnostic leaf.\nexport default function* sseSessionSaga() {\n  yield takeEvery(AtsActionTypes.USER_LOGGED_IN, syncSseConfig);\n  yield takeLatest(AtsActionTypes.SET_TOKEN, syncSseConfig);\n  yield takeEvery(AtsActionTypes.USER_LOGGED_OUT, clearSseConfig);\n}\n\n// NOTE on auth-flow coupling: userId comes from the store (populated only after\n// getUserIdentity loads the identity, which also emits USER_LOGGED_IN), while the\n// token comes from localStorage. USER_LOGGED_IN is therefore the authoritative\n// configure trigger; SET_TOKEN is only a token-rotation refresh and bails here\n// while userId is still null. A login path that sets the token WITHOUT loading\n// identity (e.g. a bare PRESET_TOKEN, as a future SSO callback might use) will hit\n// this guard with userId == null and silently skip SSE setup for that session\n// until a full page reload runs initialize() -> getUserIdentity. If SSO (or any\n// token-only auth path) is added, make it load identity / dispatch USER_LOGGED_IN\n// so this saga can configure SSE; otherwise live takeoff progress won't connect.\nexport function* syncSseConfig() {\n  const userId = yield select(makeSelectUserId());\n  const token = getToken();\n  const apiGateway = getEnv().ENDPOINT_APIGATEWAY;\n  if (userId != null && token && apiGateway) {\n    yield call([sseClient, sseClient.configureSSE], { apiGateway, userId, token });\n  } else {\n    // No valid session params (token error / refresh error / pre-identity): tear the\n    // stream down rather than leave it running on stale params. The invalidation\n    // actions funnel through setToken -> SET_TOKEN, so SET_TOKEN reaches this branch.\n    yield call([sseClient, sseClient.configureSSE], null);\n  }\n}\n\nexport function* clearSseConfig() {\n  yield call([sseClient, sseClient.configureSSE], null);\n}\n","import { SiteName } from '../../constants';\n\n/** a token this close to its expiry gets renewed ahead of time */\nexport const APP_TOKEN_REFRESH_THRESHOLD_MS = 30 * 60 * 1000;\n\n/** how often the refresher looks at the token; it also looks whenever the tab comes back to the front */\nexport const APP_TOKEN_REFRESH_CHECK_INTERVAL_MS = 60 * 1000;\n\n/**\n * Sites without any user login: every request runs on the app token, on every page.\n */\nexport const APP_TOKEN_ONLY_SITES: string[] = [SiteName.xref, SiteName.bim, SiteName.sizer];\n\n/**\n * Sites with a user login: only the pages shown before logging in run on the app token. Anywhere\n * else on these sites the token is left alone (spec's guest mode keeps its own refresh).\n */\nexport const PRE_LOGIN_APP_TOKEN_SITES: string[] = [SiteName.pt, SiteName.pim, SiteName.amp, SiteName.spec];\n\n// /login and everything under it (signup, sso key links), the sign-up stepper and its thank-you page,\n// forgot password and reset password. Matched as path segments so a locale or application prefix in\n// front does not matter.\nconst PRE_LOGIN_PATHNAME = /(^|\\/)(login|signupstepper|thank-you|forgotpassword|resetpassword)(\\/|$)/;\n\nexport const isPreLoginPathname = (pathname: string): boolean => PRE_LOGIN_PATHNAME.test(pathname || '');\n\nexport interface IAppTokenRefreshContext {\n  site: string;\n  pathname: string;\n  /** a user token is loaded, i.e. requests go out with a user session rather than the app token */\n  hasUserToken: boolean;\n}\n\n/**\n * Whether the app token refresher is in charge on the current page:\n * - xref, dal (bim) and buildsizer (sizer): always\n * - autoquote (projectTracker), pim, amp and spec: only on the login / signup / forgot and reset\n *   password pages\n * - never while a user token is loaded\n */\nexport const shouldKeepAppTokenFresh = ({ site, pathname, hasUserToken }: IAppTokenRefreshContext): boolean => {\n  if (hasUserToken) {\n    return false;\n  }\n  if (APP_TOKEN_ONLY_SITES.indexOf(site) !== -1) {\n    return true;\n  }\n  if (PRE_LOGIN_APP_TOKEN_SITES.indexOf(site) !== -1) {\n    return isPreLoginPathname(pathname);\n  }\n  return false;\n};\n\nexport type AppTokenStatus = 'unknown' | 'fresh' | 'expiring' | 'expired';\n\n/**\n * Where the app token stands. `exp` is the expiry claim of the verified identity, in unix seconds;\n * until the token has been verified it is unknown and nothing is done.\n */\nexport const getAppTokenStatus = (exp: number | string | null | undefined, now: number = Date.now()): AppTokenStatus => {\n  const expiry = exp == null ? NaN : Number(exp);\n  if (!isFinite(expiry)) {\n    return 'unknown';\n  }\n  const msLeft = expiry * 1000 - now;\n  if (msLeft <= 0) {\n    return 'expired';\n  }\n  if (msLeft <= APP_TOKEN_REFRESH_THRESHOLD_MS) {\n    return 'expiring';\n  }\n  return 'fresh';\n};\n","\nexport function transformRequestToFetch(request: {\n  url: string,\n  data: any,\n}) {\n  const { url, ...options } = request;\n\n  return {\n    url,\n    options: {\n      ...options,\n      body: options.data,\n    },\n  };\n}\n","/* eslint-disable */\n/* tslint:disable:no-console */\n\n/**\n * Gets the repositories of the user from Github\n */\n\nimport {\n  call,\n  put,\n  take,\n  fork,\n  cancel,\n  select,\n  takeEvery,\n  race,\n  takeLatest,\n  delay,\n} from 'redux-saga/effects';\nimport { eventChannel } from 'redux-saga';\nimport {\n  AddErrorAction,\n  ResetErrorAction,\n} from '../ErrorModule/actions';\nimport sseSessionSaga from './sseSessionSaga';\nimport {\n  APP_TOKEN_REFRESH_CHECK_INTERVAL_MS,\n  getAppTokenStatus,\n  shouldKeepAppTokenFresh,\n} from '../../utils/appTokenRefresh';\n\nimport {\n  AtsActionTypes,\n  UserLogInAction,\n  HasTokenAction,\n  HasServerAction,\n  UserLoggedInAction,\n  UserRefreshErrorAction,\n  UserLoginErrorAction,\n  ApiResponseDataAction,\n  ApiResponseErrorAction,\n  UserTokenErrorAction,\n  ApiResponseAction,\n  UserLoggedOutAction,\n  AppLoggedInAction,\n  AppLoginErrorAction,\n  DeprecatedApiCallAction,\n  BaseAtsApiCallAction,\n  AppLoggedOutAction,\n  UserLogInAsAction,\n  EnvLoadedAction,\n  InitAction,\n  LogInAsAndRedirectAction,\n  UserForgotPasswordAction,\n  UserResetPasswordAction,\n  UserForgotPasswordErrorAction,\n  CheckEmailAlreadyExistsAction,\n  RegisterUserAction,\n  GetFirmTypesAction,\n  GetFirmTypesSucceededAction,\n  RegisterUserSucceededAction,\n  UserResetPasswordSucceededAction,\n  VerifyEmailByKeyAction,\n  SetTokenAction,\n  SetAppTokenAction,\n  RefreshTokenAction,\n  VerifyTokenAction,\n  VerifyTokenSucceededAction,\n  SetBadTokenAction, ResendVerificationEmailAction, LoginWithEmailAction,\n  SetIsVerifyingUserAction, MoveSessionSpecAction, AtsApiCallAction,\n  DirectApiCallAction, IDirectApiCallActionPayload,\n  GetConsentStatusAction, UpdateConsentStatusAction,\n} from './actions';\nimport {\n  Error as ErrorModel, User,\n  ServerError,\n} from '../../models';\n\nimport { transformRequestToFetch } from './helpers';\nimport { registerDirectApiEndpoint } from '../../utils/directApiEndpoint';\nimport {\n  makeSelectAmplitudeData,\n  makeSelectAppAuthenticatedAt,\n  makeSelectAppIdentity,\n  makeSelectAuthObject,\n  makeSelectEnv,\n  makeSelectInit,\n  makeSelectIsAtsSpecTool,\n  makeSelectSite,\n  makeSelectToken,\n  makeSelectIsUsingLogInAs,\n} from './selectors';\nimport {\n  singleOrArray\n} from 'ats-utils/src';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_SERVER,\n  DASHBOARD_PATH,\n  PAGESUBMIT_PATH,\n  FORGOTPASSWORD_PATH,\n  SiteName,\n  PIM_SERIES_LIST_PATH,\n  LOGIN_PATH,\n} from '../../constants';\nimport { CONSENT_MODAL } from '../../components/ConsentModal/UserConsentModal';\n\nimport fetchWithDefaultHeadersAndToken from '../../utils/fetchWithDefaultHeadersAndToken';\n\nimport { fromJS, getIn } from 'immutable';\n\nimport AtsStore from '../../store';\nimport { push } from 'connected-react-router';\nimport {\n  ApplicationActionTypes,\n  GetSessionAction,\n  SetSnackbarClosedAction,\n  SetSnackbarOpenAction,\n  ToggleOverlayComponentAction\n} from '../ApplicationModule/actions';\nimport { reset } from 'redux-form';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport { ResetFiltersAndColumnsAction } from '../AccountModule/actions';\nimport i18next from 'i18next';\nimport {store} from '../../index';\nimport {makeSelectSession} from '../ApplicationModule/selectors';\nimport { safeLocalStorage } from '../../utils/safeStorage';\n\n// a logger for saga 'delay'\nexport function* taggedDelay(timeout, ...args) {\n  console.debug(`Delay ${timeout}ms`, ...args);\n  yield delay(timeout);\n  console.debug(`Firing: ${timeout}`, ...args);\n}\n\nexport function* getEnvLoaded() {\n  const envLoaded = yield select(makeSelectEnv());\n\n  return envLoaded && !envLoaded.isEmpty();\n}\n\nexport function* getAtsApiInit() {\n  return AtsStore.get('atsApi') != null;\n}\n\nexport function getAtsApiState(state) {\n  return function*() {\n    const apiPresent = yield call(getAtsApiInit);\n    return apiPresent && ((AtsStore.get('atsApi').onEvent || {})[state]);\n  };\n}\n\nexport function* getInit() {\n  const init =  yield select(makeSelectInit());\n\n  return init;\n}\n\n\n// get auth token from localStorage\nexport const getToken = () => safeLocalStorage.getItem('ats-authentication-token');\n\n// get app token from localStorage\nexport const getAppToken = () => safeLocalStorage.getItem('ats-app-token');\n\n// check whether token exist in localStorage\nexport const checkToken = () => !!getToken();\n\n// get user identity from redux-store\nexport function* getIdentity() {\n  const identity = yield select(makeSelectAuthObject());\n\n  return identity;\n}\n\nexport function* checkIdentity(...args) {\n  const identity = yield call(getIdentity);\n  const identityPresent = identity != null && !identity.isEmpty();\n  return identityPresent;\n}\n\nexport function* setToken({ payload: { token, server = DEFAULT_SERVER }}: Partial<HasTokenAction>) {\n  AtsStore.get('atsApi').setToken(token);\n  if (token != null) {\n    safeLocalStorage.setItem('ats-authentication-token', token);\n  } else {\n    safeLocalStorage.removeItem('ats-authentication-token');\n  }\n  yield put(new SetTokenAction({ token, server }));\n}\n\nexport function* setAppToken({ payload: { server = DEFAULT_SERVER, token }}: Partial<HasTokenAction>) {\n  AtsStore.get('atsApi').setAppToken(token);\n  if (token != null) {\n    safeLocalStorage.setItem('ats-app-token', token);\n  } else {\n    safeLocalStorage.removeItem('ats-app-token');\n  }\n  yield put(new SetAppTokenAction({ token, server }));\n}\n\nexport function* loginWithEmail({\n    payload\n}: LoginWithEmailAction) {\n  const { username, password } = payload;\n  const { error, emailIsUnique, status, verified } = yield call(checkEmailAlreadyExists, new CheckEmailAlreadyExistsAction({\n    email: username,\n  }));\n  if (error) {\n    console.error('checkEmailAlreadyExists error');\n  } else {\n    if (!emailIsUnique && status === 'active' && !verified) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:inactiveEmail.message'),\n        severity: 'error',\n        actionProps: {\n          label: i18next.t('translations:inactiveEmail.resendEmail'),\n          autoHideDuration: null,\n          onclick: () => {\n            store.store.store.dispatch(new SetSnackbarClosedAction());\n            store.store.store.dispatch(new ResendVerificationEmailAction({\n              email: username\n            }));\n          },\n          buttonStyle: {\n            color: 'white',\n            textDecoration: 'underline'\n          }\n        }\n      }));\n    } else {\n      yield put(new UserLogInAction({\n        username,\n        password,\n      }));\n    }\n  }\n}\nfunction* waitReady() {\n  yield call(atsRequire, getInit);\n  yield call(atsRequire, getEnvLoaded);\n  yield call(atsApiCallWaitForEnvAction); // wait for env to be loaded into atsApi object\n}\n/**\n * Ats Oauth request/response handler\n */\nexport function* doLogin({\n  payload,\n}: UserLogInAction) {\n  const {\n    username,\n    password,\n    refreshToken,\n    resolve,\n    reject,\n    server = DEFAULT_SERVER\n  } = payload;\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  yield call(waitReady);\n  // reset login errors\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_LOGIN_ERROR,\n    meta: {\n      server,\n    }\n  }));\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_REFRESH_ERROR,\n    meta: {\n      server,\n    }\n  }));\n  // Call our request helper (see 'utils/request')\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'login',\n      body: {\n        username,\n        password,\n      },\n      token: ''\n    }\n  }));\n\n  const {\n    err,\n    data,\n  } = apiResp;\n\n  amplitude.logEvent(AMPLITUDE_EVENT.login, {\n    usernameOrEmail: username,\n    loginSuccess: !err,\n    ...amplitudeData\n  });\n\n  if (!err) {\n    // wait until key is set in localForage\n    // if (refreshToken != null) {\n    //   yield put(new UserTokenRefreshedAction({ token: data.payload.auth.token, server }));\n    // } else {\n    //   yield put(new UserLoggedInAction({ token: data.payload.auth.token, server }));\n    // }\n    yield call(getUserIdentity,  data.payload.auth.token);\n    // atsapi hack\n    // AtsStore.get('atsApi').setToken(data.payload.auth.token);\n    // end atsapi hack\n    // only the primary server owns the consent selection. the handler self-guards on site + token\n    const isAtsSpecTool = yield select(makeSelectIsAtsSpecTool());\n    if (server === DEFAULT_SERVER && isAtsSpecTool) {\n      yield put(new GetConsentStatusAction());\n    }\n    if (resolve != null) {\n      resolve();\n    }\n  } else {\n    if (refreshToken != null) {\n      const immutableErr = fromJS(err);\n      const serverError: IMap<ServerError> = immutableErr.getIn(['payload', 'error']);\n      if (serverError != null) {\n        yield put(new UserRefreshErrorAction({ error: (new ErrorModel({message: serverError.get('error'), meta: serverError})).toImmutable(), server }));\n      } else {\n        yield put(new UserRefreshErrorAction({ error: err, server }));\n      }\n      // add login error\n      yield put(new AddErrorAction({\n        message: `refresh error`,\n        id: AtsActionTypes.USER_REFRESH_ERROR,\n        suppressGlobalErrorNotification: false,\n        meta: {\n          error: err,\n          server\n        }\n      }));\n    } else {\n      const immutableErr = fromJS(err);\n      console.debug({\n        err,\n        immutableErr,\n      });\n      const serverError: IMap<ServerError> = immutableErr.getIn(['payload', 'error']);\n      console.debug(serverError);\n      if (serverError != null) {\n        yield put(new UserLoginErrorAction({ error: (new ErrorModel({message: serverError.get('error'), meta: serverError})).toImmutable(), server }));\n      } else {\n        yield put(new UserLoginErrorAction({ error: err, server }));\n      }\n      // add login error\n      yield put(new AddErrorAction({\n        message: `login error`,\n        id: AtsActionTypes.USER_LOGIN_ERROR,\n        suppressGlobalErrorNotification: false,\n        meta: { error: err,\n          server\n        }\n      }));\n    }\n    if (reject != null) {\n      reject();\n    }\n  }\n}\nexport function* doLoginAs({\n  payload,\n  callback,\n}: UserLogInAsAction) {\n  const {\n    // id,\n    username,\n  } = payload;\n  yield call(waitReady);\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction(\n    {\n      payload: {\n        service: 'auth',\n        endpoint: 'loginAs',\n        params: {\n          username,\n        },\n      },\n    },\n    callback\n  ));\n  if (!apiResp.err) {\n    const immutableResp = fromJS(apiResp);\n    const token = immutableResp.getIn(['data', 'payload', 'auth', 'token']);\n    if (token != null) {\n      // TODO: should we call getUserIdentity here?\n      // yield put(new UserLoggedInAction({ token, loading: true }));\n      yield put(new UserLoggedOutAction({loading: true}));\n      yield call(getUserIdentity, token);\n    }\n  }\n}\n\nexport function* apiCallWaitForEnvAction() {\n  yield call(atsRequire, getInit);\n  yield call(atsRequire, getEnvLoaded);\n}\n\n\nexport function* deprecatedApiCallWaitingAction({ payload }: DeprecatedApiCallAction) {\n  const {\n    url,\n    server = DEFAULT_SERVER,\n    method = 'get',\n    ...rest\n  } = payload;\n  yield call(apiCallWaitForEnvAction, );\n  yield call(atsRequire, null, { server });\n  return yield call(deprecatedApiCallAction, new DeprecatedApiCallAction({ url, server, method, ...rest }));\n}\n\nexport function* atsApiCallWaitForEnvAction() {\n  yield call(atsApiRequire, getAtsApiState('init'));\n  yield call(atsApiRequire, getAtsApiState('envLoaded'));\n  yield call(atsApiRequire, getAtsApiState('ready'));\n}\n\n\n// for requests that require the appToken + env\nexport function* apiCallWaitingAction({...params}) {\n  yield call(atsApiCallWaitForEnvAction);\n  yield call(atsApiRequire, getAtsApiState('appToken'));\n  return yield call(atsApiCallAction, { ...params });\n}\n\n// for requests that require the token + env\nexport function* atsApiCallWaitingAction({...params}) {\n  yield call(atsApiCallWaitForEnvAction);\n  // use the below token check to find calls that needs to change from atsApiCallWaitingAction to apiCallWaitingAction\n  // when such a replace take place, also need to make sure it doesn't break other places that uses that call\n  // const token = yield select(makeSelectToken());\n  // if (!token) {\n  //   console.log(params?.payload?.payload);\n  // }\n  yield call(atsApiRequire, getAtsApiState('token'));\n  return yield call(atsApiCallAction, { ...params });\n}\n\n/**\n * Ats Command Api request/response handler\n */\nexport function* deprecatedApiCallAction({ payload, callback }: DeprecatedApiCallAction) {\n  let {\n    url,\n    options,\n  } = payload;\n  const {\n    env,\n    request,\n    resolve,\n    reject,\n    server,\n    key,\n    resultKey,\n  } = payload;\n\n  console.error('deprecated api call used - please use new atsApi calls. These will be removed soon', {\n    payload,\n  });\n  if (request != null) {\n    console.debug('apiCall with {request} parameter - please use fetch api');\n    const transformed = transformRequestToFetch(request);\n    url = transformed.url;\n    options = transformed.options;\n  }\n\n  if (env != null) {\n    const envVars = yield select(makeSelectEnv());\n    url = `${envVars.get(env)}${url}`;\n  }\n\n  const apiResp = yield call(fetchWithDefaultHeadersAndToken, url, options);\n  const err = apiResp.err;\n\n  if (!err) {\n    yield put(new ApiResponseDataAction({\n      value: fromJS(apiResp),\n      server,\n      key,\n      resultKey,\n      apiCall: new DeprecatedApiCallAction({\n        ...payload\n      })\n    }));\n    if (resolve != null) {\n      resolve(apiResp);\n    }\n  } else {\n    yield put(new ApiResponseErrorAction({\n      error: new ErrorModel(err).toImmutable(),\n      server,\n      key,\n      resultKey,\n      apiCall: new DeprecatedApiCallAction({\n        ...payload\n      })\n    }));\n\n    yield put(new AddErrorAction({\n      message: 'apiCallAction error',\n      id: 'API_ERROR',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err,\n        server\n      }\n    }));\n    if (reject != null) {\n      reject(apiResp);\n    }\n    // check error, maybe logout here\n  }\n  if (callback != null) {\n    callback(apiResp);\n  }\n  return apiResp;\n}\n\n/**\n * Ats Command Api request/response handler\n * test = temp1.dispatch(temp1.atsFramework.actions.atsApiCall({key: ['payload', 'auth'], resultKey: ['payload', 'auth'], payload: [{service: 'auth', endpoint: 'login', body: {username: 'rschaefer', password: 'password'}}]}))\n */\nexport function* atsApiCallAction({ payload: actionPayload, callback }: Partial<BaseAtsApiCallAction>) {\n  const {\n    payload,\n    resolve,\n    reject,\n    key,\n    resultKey,\n    ...rest\n  } = actionPayload;\n\n  const apiResp: {\n    data?: any,\n    err?: Error,\n  } = {};\n  try {\n    // TODO: typescript issues\n    const resp = yield (call as any)(AtsStore.get('atsApi').callApi, ...singleOrArray(payload));\n    if (resp?.payload?.error) {\n      apiResp.err = resp?.payload?.error;\n    } else {\n      apiResp.data = resp;\n    }\n  } catch (e) {\n    apiResp.err = e;\n  }\n\n  const err = apiResp.err;\n\n  if (!err) {\n    if (key != null && resultKey != null) {\n      yield put(new ApiResponseDataAction({ value: fromJS(apiResp), key, resultKey, ...rest }));\n    }\n    if (resolve != null) {\n      resolve(apiResp);\n    }\n  } else {\n    if (getIn(err, ['payload', 'error', 'code'], false) && (err as any).payload.error.code === 401) {\n      const site = yield select(makeSelectSite());\n      if (site === SiteName.spec) {\n        yield put(push(LOGIN_PATH));\n      }\n\n      yield put(new UserLoggedOutAction({ server: DEFAULT_SERVER }));\n      yield put(new SetBadTokenAction(true));\n    }\n    yield put(new ApiResponseErrorAction({\n      error: new ErrorModel(err).toImmutable(),\n      ...rest\n    }));\n\n    yield put(new AddErrorAction({\n      message: 'atsApiCallAction Error',\n      id: 'API_ERROR',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err,\n      }\n    }));\n\n    if (reject != null) {\n      reject(apiResp);\n    }\n    // check error, maybe logout here\n  }\n  if (callback != null) {\n    callback(apiResp);\n  }\n  return apiResp;\n}\n\n/**\n * Direct API call handler - allows calling endpoints without the dependency on the swagger\n * Example: endpoint: '/series.search' instead of 'getMsSearchSeries'\n */\nexport function* directApiCallAction({ payload: actionPayload, callback }: Partial<DirectApiCallAction>) {\n  const {\n    payload,\n    resolve,\n    reject,\n    key,\n    resultKey,\n    suppressGlobalErrorNotification = false,\n    ...rest\n  } = actionPayload as IDirectApiCallActionPayload;\n\n  const apiResp: {\n    data?: any,\n    err?: Error,\n  } = {};\n\n  try {\n    const atsApi = AtsStore.get('atsApi');\n    const { service, endpoint, method, body, params, queries, token } = payload || {};\n\n    // Inject endpoint data for direct URL path; a '/'-prefixed service resolves\n    // against `${ENDPOINT_APIGATEWAY}${service}` (see registerDirectApiEndpoint)\n    if (endpoint && service) {\n      registerDirectApiEndpoint(atsApi, { service, endpoint, method });\n    }\n\n    const resp = yield (call as any)(atsApi.callApi, {\n      service,\n      endpoint,\n      body,\n      params,\n      queries,\n      token,\n    });\n\n    if (resp?.payload?.error) {\n      apiResp.err = resp?.payload?.error;\n    } else {\n      apiResp.data = resp;\n    }\n  } catch (e) {\n    apiResp.err = e;\n  }\n\n  const err = apiResp.err;\n\n  if (!err) {\n    if (key != null && resultKey != null) {\n      yield put(new ApiResponseDataAction({ value: fromJS(apiResp), key, resultKey, ...rest }));\n    }\n    if (resolve != null) {\n      resolve(apiResp);\n    }\n  } else {\n    if (getIn(err, ['payload', 'error', 'code'], false) && (err as any).payload.error.code === 401) {\n      const site = yield select(makeSelectSite());\n      if (site === SiteName.spec) {\n        yield put(push(LOGIN_PATH));\n      }\n      yield put(new UserLoggedOutAction({ server: DEFAULT_SERVER }));\n      yield put(new SetBadTokenAction(true));\n    }\n    yield put(new ApiResponseErrorAction({\n      error: new ErrorModel(err).toImmutable(),\n      ...rest\n    }));\n    yield put(new AddErrorAction({\n      message: 'directApiCallAction Error',\n      id: 'API_ERROR',\n      suppressGlobalErrorNotification,\n      meta: {\n        error: err,\n      }\n    }));\n    if (reject != null) {\n      reject(apiResp);\n    }\n  }\n\n  if (callback != null) {\n    callback(apiResp);\n  }\n  return apiResp;\n}\n\n/**\n * Direct API call with waiting for env and app token\n */\nexport function* directApiCallWaitingAction(action: DirectApiCallAction) {\n  yield call(atsApiCallWaitForEnvAction);\n  yield call(atsApiRequire, getAtsApiState('appToken'));\n  return yield call(directApiCallAction, action);\n}\n\nexport function* getAppIdentity(token, server = DEFAULT_SERVER) {\n  yield call(waitReady);\n  const key = ['appAuthentication', server, 'identity'];\n  const {\n    data,\n    err,\n  } = yield call(apiCallWaitingAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'verifyToken',\n      token,\n    },\n    server,\n    key,\n  }));\n\n  console.debug('getAppIdentity', {\n    data,\n    ok: !err,\n  });\n\n  if (!err) {\n    const immutableData = fromJS(data);\n    const value = immutableData.getIn(['payload', 'auth']);\n    yield put(new ApiResponseAction({ key, value, server }));\n  } else {\n    yield put(new ApiResponseErrorAction({ error: err, server }));\n    yield put(new UserTokenErrorAction({ error: err, server }));\n\n    yield put(new AddErrorAction({\n      message: 'api error',\n      id: 'API_ERROR',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err,\n        server\n      }\n    }));\n\n    yield put(new UserLoggedOutAction({ server }));\n    yield put(new AppLoggedOutAction({ server }));\n  }\n}\n\nexport function* getUserIdentity(token, server = DEFAULT_SERVER) {\n  yield call(waitReady);\n  const key = ['authentication', server, 'identity'];\n  yield put(new SetIsVerifyingUserAction(true));\n  const {\n    data,\n    err,\n  } = yield call(apiCallWaitingAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'verifyToken',\n      token,\n    },\n    server,\n    key,\n  }));\n\n  console.debug('getUserIdentity', {\n    data,\n    ok: !err,\n  });\n\n  if (!err) {\n    const immutableData = fromJS(data);\n    const value = immutableData.getIn(['payload', 'auth']);\n    yield put(new ApiResponseAction({ key, value, server }));\n    yield call(setToken, { payload: { token, server } });\n    yield put(new UserLoggedInAction({ token, server }));\n  } else {\n    yield put(new ApiResponseErrorAction({ error: err, server }));\n    yield put(new UserTokenErrorAction({ error: err, server }));\n\n    yield put(new AddErrorAction({\n      message: 'api error',\n      id: 'API_ERROR',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err,\n        server\n      }\n    }));\n    yield put(new UserLoggedOutAction({ server }));\n  }\n}\n\n// handles tasks for a single session (i.e. unique access_token)\nexport function* sessionBegin({ payload }: Partial<HasTokenAction>) {\n  const {\n    server,\n    token,\n  } = payload;\n  console.debug('sessionBegin', server, token);\n\n  if (token == null) {\n    return;\n  }\n  yield call(setToken, {payload});\n  // let getUserIdentityCall;\n  //\n  // if (server == null || server === DEFAULT_SERVER) {\n  //   getUserIdentityCall = yield fork(getUserIdentity, token);\n  // }\n\n  // kill tasks if another login happens, or if user logs out\n  // for (;;) {\n  //   const userTokenChangeActions = yield take([\n  //     AtsActionTypes.USER_LOGGED_IN,\n  //     AtsActionTypes.USER_LOGGED_OUT,\n  //     AtsActionTypes.USER_LOGIN_ERROR,\n  //     AtsActionTypes.USER_REFRESH_ERROR,\n  //     AtsActionTypes.USER_TOKEN_REFRESHED,\n  //   ]);\n  //\n  //   if (userTokenChangeActions.server == null || userTokenChangeActions.server === server) {\n  //     if (getUserIdentityCall != null) {\n  //       yield cancel(getUserIdentityCall);\n  //     }\n  //     break;\n  //   }\n  // }\n}\nexport function* appSessionBegin({ payload }: Partial<HasTokenAction>) {\n  const {\n    server,\n    token,\n  } = payload;\n  if (token == null) {\n    return;\n  }\n\n  yield call(setAppToken, {payload});\n\n  if (server == null || server === DEFAULT_SERVER) {\n    yield fork(getAppIdentity, token);\n  }\n}\n\n// attempt to log out\nexport function* sessionEnd({ payload }: Partial<HasTokenAction>) {\n  console.debug('sessionEnd', {\n    payload,\n  });\n  yield race({\n    logOutAs: call(logOutAs, { payload }),\n    forceLogout: call(delayedLogout, { payload }),\n  });\n  // yield call(setToken, {payload});\n}\n\nexport function* logOutAs({ payload }: Partial<HasServerAction>) {\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'logout',\n    }\n  }));\n  let token: string | undefined;\n  console.debug('logOutAs', {\n    apiResp,\n  });\n  if (apiResp.data != null) {\n    token = fromJS(apiResp).getIn(['data', 'payload', 'auth', 'token']);\n  }\n  yield put(new UserLoggedOutAction({\n    ...payload,\n    loading: token != null\n  }));\n  if (token != null) {\n    const site = yield select(makeSelectSite());\n\n    yield put(new ResetFiltersAndColumnsAction());\n\n    if (site === SiteName.pim) {\n      yield put(push(PIM_SERIES_LIST_PATH));\n    } else {\n      yield put(push(DASHBOARD_PATH));\n    }\n\n    yield call(getUserIdentity, token, payload.server);\n    // yield put(new UserLoggedInAction({\n    //   ...payload,\n    //   token,\n    // }));\n  } else {\n    yield put(push(LOGIN_PATH));\n  }\n}\n\nexport function* delayedLogout({ payload }: Partial<HasServerAction>) {\n  yield call(taggedDelay, 3001, {\n    message: 'Logging out in 3001 ms',\n  });\n  yield put(new UserLoggedOutAction(payload));\n}\n\n// just clear it from session\nexport function* sessionEnded({ payload }: Partial<HasTokenAction>) {\n  yield call(setToken, {payload});\n}\n// **call this from other sagas to delay until api calls are ready**\n// simply call:\n//    yield call(apiWatcherSaga, { server: <server identifier> });\n// from any saga to block it until API_CALL and SET_PREFERENCE listeners are\n// set up\n// This is a blocker saga\nexport function* atsRequire(fn, ...args) {\n  let delayMS = 100;\n\n  // check if atsApi is ready every ${delayMs}ms, if atsApi is ready, we resolve this saga.\n  for (;;) {\n    const success = yield (call as any)(fn || checkToken, ...args);\n    if (success) {\n      break;\n    }\n\n    delayMS *= 2;\n    delayMS = Math.min(delayMS, 25600);\n    yield call(taggedDelay, delayMS, {\n      _call: 'atsrequire',\n      fn,\n      args,\n    });\n    // if atsApi is not ready in 8s, throw a debug message to console.\n    if (delayMS > 8000) {\n      console.debug('atsRequire', {\n        fn,\n        ...args\n      });\n    }\n  }\n}\n\n// similar to atsRequire, but instead of pooling, it waits for SET_ATS_API_STATE action indicating the atsApi instance state changed\n// this saga will be in pending status until atsApi is ready\n// fn is a function telling this function how to check atsApi is ready.(checkToken is the default)\nexport function* atsApiRequire(fn, ...args) {\n  for (;;) {\n    // check if atsApi is ready, if not, we wait for a 'SET_ATS_API_STATE' action and then check it again\n    const success = yield (call as any)(fn || checkToken, ...args);\n    if (success) {\n      // resolve this saga if atsApi is ready.\n      break;\n    }\n    yield take(ApplicationActionTypes.SET_ATS_API_STATE);\n  }\n}\n\nexport function* checkUser() {\n  // yield call(waitReady);\n\n}\n// export function* initCheck() {\n//   yield call(atsRequire, getInit);\n//   yield call(atsRequire, getEnvLoaded);\n//   const server = DEFAULT_SERVER;\n//   // get token from state\n//   const token = getToken();\n//   if (token != null) {\n//     yield put(new SetBadTokenAction(false));\n//     // if token already exist in localStorage, use this action to load it to redux store\n//     yield put(new UserTokenRefreshedAction({ token, server }));\n//   } else {\n//     // if token not exist, clean authentication field\n//     yield put(new UserLoggedOutAction({ server }));\n//   }\n// }\n\nexport function* getApplicationToken() {\n  yield call(waitReady);\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.APP_LOGIN_ERROR\n  }));\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'authorize',\n    }\n  }));\n\n  const immutableData = fromJS(apiResp);\n  console.debug('getApplicationToken', {\n    apiResp,\n  });\n\n  if (!apiResp.err) {\n    yield put(new AppLoggedInAction({ token: immutableData.getIn(['data', 'payload', 'auth', 'token'])}));\n  } else {\n    yield put(new AppLoginErrorAction({ error: immutableData.get('err') }));\n    yield put(new AddErrorAction({\n      message: `login error`,\n      id: AtsActionTypes.APP_LOGIN_ERROR,\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: apiResp.err,\n      }\n    }));\n  }\n}\n\n// ---------------------------------------------------------------------------------------------------\n// App token refresh: keeps the app token fresh on the sites and pages that run on it (see\n// shouldKeepAppTokenFresh), renewing it through authorize when the verified expiry is within 30 minutes\n// or already past. Checked every minute and whenever the tab comes back to the front, which is how a\n// tab that slept through the expiry catches up.\n// ---------------------------------------------------------------------------------------------------\n\n// emits whenever the tab becomes visible or focused again\nfunction pageWakeChannel() {\n  return eventChannel((emit) => {\n    const onVisibilityChange = () => {\n      if (document.visibilityState === 'visible') {\n        emit('visible');\n      }\n    };\n    const onFocus = () => emit('focus');\n    document.addEventListener('visibilitychange', onVisibilityChange);\n    window.addEventListener('focus', onFocus);\n    return () => {\n      document.removeEventListener('visibilitychange', onVisibilityChange);\n      window.removeEventListener('focus', onFocus);\n    };\n  });\n}\n\n// the expiry claim of the verified app identity, in unix seconds; null until verifyToken has answered\nexport function* getAppTokenExp() {\n  const identity: IMap<any> = yield select(makeSelectAppIdentity());\n  const exp = identity != null ? identity.getIn(['user', 'claims', 'exp']) : null;\n  return exp == null ? null : exp;\n}\n\n/**\n * Fetches a new app token through authorize, quietly: a failure is only logged and the next check\n * retries. With holdRequests (the token is already expired) the token and its readiness flag are\n * taken down first, so sagas that wait on the flag (apiCallWaitingAction) queue for the split second\n * the renewal takes and go out with the new token, and authorize itself is sent without the dead\n * token. On success the api instance has already taken the new token from the response\n * (processAppToken); AppLoggedInAction stores it and re-verifies it, which refreshes the expiry.\n */\nexport function* refreshAppToken({ holdRequests }: { holdRequests: boolean }) {\n  const atsApi = AtsStore.get('atsApi');\n  const previousToken = atsApi.getAppToken();\n  if (holdRequests) {\n    atsApi.setAppToken(null);\n  }\n  try {\n    const resp = yield (call as any)(atsApi.callApi, { service: 'auth', endpoint: 'authorize' });\n    const token = resp?.payload?.error ? null : resp?.payload?.auth?.token;\n    if (token == null) {\n      throw resp?.payload?.error || new Error('authorize returned no token');\n    }\n    yield put(new AppLoggedInAction({ token }));\n    return true;\n  } catch (err) {\n    console.warn('Unable to refresh the app token, will retry on the next check.', err);\n    if (atsApi.getAppToken() == null && previousToken != null) {\n      // let held requests go out (and fail on their own) rather than wait forever\n      atsApi.setAppToken(previousToken);\n    }\n    return false;\n  }\n}\n\n/**\n * One check of the app token. Returns what it found, mostly for tests: 'skipped' (not in charge\n * here), 'settling' (a renewal from less than a check interval ago is still being verified), or the\n * token status, having renewed the token when it was expiring or expired.\n */\nexport function* checkAppToken() {\n  const atsApi = AtsStore.get('atsApi');\n  const site: string = yield select(makeSelectSite());\n  const inCharge = shouldKeepAppTokenFresh({\n    site,\n    pathname: window.location.pathname,\n    hasUserToken: atsApi != null && atsApi.getUserToken() != null,\n  });\n  if (!inCharge) {\n    return 'skipped';\n  }\n  const authenticatedAt: number = yield select(makeSelectAppAuthenticatedAt());\n  if (authenticatedAt != null && Date.now() - authenticatedAt < APP_TOKEN_REFRESH_CHECK_INTERVAL_MS) {\n    return 'settling';\n  }\n  const exp = yield call(getAppTokenExp);\n  const status = getAppTokenStatus(exp);\n  if (status === 'expiring' || status === 'expired') {\n    yield call(refreshAppToken, { holdRequests: status === 'expired' });\n  }\n  return status;\n}\n\nexport function* appTokenRefreshLoop() {\n  yield call(waitReady);\n  const wake = yield call(pageWakeChannel);\n  try {\n    while (true) {\n      yield race({\n        tick: delay(APP_TOKEN_REFRESH_CHECK_INTERVAL_MS),\n        wake: take(wake),\n      });\n      yield call(checkAppToken);\n    }\n  } finally {\n    wake.close();\n  }\n}\n\n// export function* delayedInit() {\n  // after 218ms, dispatch AtsActionTypes.INIT action\n  // yield call(taggedDelay, 218, {\n  //   _call: 'loadEnv',\n  //   message: 'put init action'\n  // });\n//   yield put(new InitAction());\n// }\n\nfunction* waitForEnv() {\n  // check env every 1519ms, if it is ready, load it from Ats.AtsStore to state\n  while (true) {\n    const DELAY = 1519;\n    yield call(taggedDelay, DELAY, {\n      _call: 'loadEnv',\n    });\n    const stateEnv = yield select(makeSelectEnv());\n    if (stateEnv.size === 0) {\n      const env = AtsStore.get('env');\n      console.debug('No Env Detected, Attempting to load env', {\n        stateEnv,\n        env,\n      });\n      if (env.LOADED) {\n        yield put(new EnvLoadedAction({env}));\n        break;\n      }\n    } else {\n      break;\n    }\n  }\n}\n\nexport function* LoginAsAndRedirect(action: LogInAsAndRedirectAction) {\n  const site = yield select(makeSelectSite());\n\n  yield call(doLoginAs, action);\n\n  yield put(new ResetFiltersAndColumnsAction());\n\n  if (site === SiteName.pim) {\n    yield put(push(PIM_SERIES_LIST_PATH));\n  } else {\n    yield put(push(DASHBOARD_PATH));\n  }\n}\n\nexport function* callForgotPassword({\n  payload,\n}: UserForgotPasswordAction) {\n  const {\n    email,\n    server = DEFAULT_SERVER\n  } = payload;\n\n  // reset login errors\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_FORGOTPASSWORD_ERROR,\n    meta: {\n      server,\n    }\n  }));\n\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_REFRESH_ERROR,\n    meta: {\n      server,\n    }\n  }));\n  // Call our request helper (see 'utils/request')\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'forgotPassword',\n      body: {\n        email\n      }\n    },\n  }));\n\n  if (!apiResp.err) {\n    const immutableData = fromJS(apiResp.data);\n    const authKey: string = immutableData.getIn(['payload', 'auth', 'key']);\n    const pageTitle: string = i18next.t('translations:resetPasswordConfirmationPage.title');\n    const pageContent = i18next.t('translations:resetPasswordConfirmationPage.subtitle', { email });\n    if (authKey != null) {\n      yield put(push(PAGESUBMIT_PATH,{state: {\n        pageTitle,\n        pageContent,\n      }}));\n    } else {\n       // error\n      yield put(new UserForgotPasswordErrorAction({ error: apiResp.err, server }));\n      // add Forgot Password error\n      yield put(new AddErrorAction({\n        message: `Something Wrong`,\n        id: AtsActionTypes.USER_FORGOTPASSWORD_ERROR,\n        suppressGlobalErrorNotification: false,\n        meta: {\n          error: apiResp.err,\n          server\n        }\n      }));\n    }\n\n  } else {\n    yield put(new UserForgotPasswordErrorAction({ error: apiResp.err, server }));\n    // add Forgot Password error\n    yield put(new AddErrorAction({\n      message: `Forgot Password Error`,\n      id: AtsActionTypes.USER_FORGOTPASSWORD_ERROR,\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: apiResp.err,\n        server\n      }\n    }));\n\n  }\n}\n\nexport function* callResetPassword({\n  payload,\n}: UserResetPasswordAction) {\n  const {\n    password,\n    key,\n    server = DEFAULT_SERVER\n  } = payload;\n\n  // reset login errors\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_RESETPASSWORD_ERROR,\n    meta: {\n      server,\n    }\n  }));\n\n  yield put(new ResetErrorAction({\n    index: undefined,\n    id: AtsActionTypes.USER_REFRESH_ERROR,\n    meta: {\n      server,\n    }\n  }));\n  // Call our request helper (see 'utils/request')\n  const apiResp = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'resetPassword',\n      body: {\n        password,\n        key\n      }\n    },\n  }));\n\n  const pageTitle: string = i18next.t('translations:resetPasswordConfirmationPage.title');\n  const pageContent: string = i18next.t('translations:resetPasswordConfirmationPage.subtitle');\n  const linkTitle: string = i18next.t('translations:resetPasswordConfirmationPage.linkLabel');\n  const link: string = FORGOTPASSWORD_PATH;\n\n  if (!apiResp.err) {\n    const immutableData = fromJS(apiResp.data);\n    const success: boolean = immutableData.getIn(['payload', 'auth', 'success']);\n    if (success) {\n      yield put(new UserResetPasswordSucceededAction(true));\n    } else {\n       // error redirection\n        yield put(push(PAGESUBMIT_PATH,{state: {\n          pageTitle,\n          pageContent,\n          linkTitle,\n          link,\n        }}));\n    }\n\n  } else {\n      // error redirection\n      yield put(push(PAGESUBMIT_PATH,{state: {\n        pageTitle,\n        pageContent,\n        linkTitle,\n        link,\n      }}));\n  }\n}\n\nexport function* checkEmailAlreadyExists({\n  payload,\n}: CheckEmailAlreadyExistsAction) {\n  const {\n    email,\n    resolve,\n    reject,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'emailExists',\n      body: {\n        email\n      },\n      token: ''\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const emailIsUnique: boolean = immutableData.getIn(['payload', 'auth', 'isUnique']);\n    const status: string = immutableData.getIn(['payload', 'auth', 'status']);\n    const verified: boolean = immutableData.getIn(['payload', 'auth', 'verified']);\n    resolve?.({emailIsUnique, status, verified});\n    return ({ emailIsUnique, status, verified });\n  } else {\n    console.error('error emailExists', err);\n    const errMsg = 'error';\n    reject?.(err);\n    return ({ error: errMsg });\n  }\n}\n\nfunction* moveSessionSpec({\n  payload,\n}: MoveSessionSpecAction) {\n  const {\n    userId,\n    sessionId,\n    resolve,\n    reject,\n    // token,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'moveSessionSpec',\n      body: {\n        userId,\n        sessionId,\n      },\n      token: '',\n    },\n  }));\n  if (data) {\n    resolve();\n  } else {\n    console.error('error moveSessionSpec', err);\n    reject();\n  }\n  return ({ data, err });\n}\nexport function* registerUser({\n  payload,\n}: RegisterUserAction) {\n  const {\n    reject,\n    resolve,\n    user,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'registerUser',\n      body: {\n        ...user.toJS()\n      },\n      token: ''\n    },\n  }));\n  const session = yield select(makeSelectSession());\n  if (data) {\n    const immutableData = fromJS(data);\n    const registeredUser: IMap<User> = immutableData.getIn(['payload', 'auth', 'user', 0]);\n\n    if (registeredUser == null) {\n      console.error('Invalid response', registeredUser); // tslint:disable-line\n    } else {\n      if (payload.moveSessionSpec && payload.guestSpecId) {\n        // tslint:disable-next-line:no-shadowed-variable\n        const {\n          data: updateSpecData,\n          err: updateSpecErr,\n        } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n          payload: {\n            service: 'spec',\n            endpoint: 'updateSpec',\n            body: {\n              name: payload.guestSpecName,\n            },\n            params: {\n              specId: payload.guestSpecId,\n            }\n          },\n        }));\n        // tslint:disable-next-line:no-shadowed-variable\n        const { err } = yield call(moveSessionSpec, new MoveSessionSpecAction({\n          userId: registeredUser.get('id'),\n          sessionId: session.get('session'),\n          // token: loginUser.payload.auth.token,\n          resolve,\n          reject\n        }));\n        if (!err) {\n          yield put(new GetSessionAction({\n            forceRefresh: true, // have to generate a new session because the old session spec has moved to the new user\n          }));\n        }\n      } else if (resolve) {\n        resolve();\n      }\n\n      yield put(reset('__SignUp_form__1'));\n      yield put(reset('SignUpOrganizationForm'));\n      yield put (new RegisterUserSucceededAction(registeredUser));\n    }\n  } else {\n    console.error('Error registering User', {err}); // tslint:disable-line\n    if (reject) {\n      reject(err);\n    }\n  }\n}\n/**\n * When the user never made a selection the consent modal is opened. It is driven off the\n * overlay component state so it stays open through any redirect following the login.\n * Triggered on a fresh login and on every app boot that restores a session, otherwise the\n * modal could be dismissed by refreshing the page or opening the app in a new tab.\n */\nexport function* getConsentStatus() {\n  // consent is a spec tool concern only - guarded here so no dispatch path can open the modal on other sites\n  const isAtsSpecTool = yield select(makeSelectIsAtsSpecTool());\n  if (!isAtsSpecTool) {\n    return;\n  }\n\n  // the identity call that precedes this may have failed, in which case there is nobody to ask\n  const token = yield select(makeSelectToken());\n  if (!token) {\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(directApiCallWaitingAction, new DirectApiCallAction({\n    payload: {\n      service: 'msauth',\n      endpoint: '/consent',\n      method: 'get',\n    },\n  }));\n\n  if (err) {\n    console.error('Error getting consent status', {err}); // tslint:disable-line\n    return;\n  }\n\n  const consent = getIn(data, ['payload', 'msauth', 'consent'], null);\n\n  // anything other than a boolean means the user never made a selection\n  if (typeof consent !== 'boolean') {\n    yield put(new ToggleOverlayComponentAction({\n      id: CONSENT_MODAL,\n      open: true,\n    }));\n  }\n}\n\nexport function* updateConsentStatus({\n  payload,\n}: UpdateConsentStatusAction) {\n  const {\n    consent,\n    resolve,\n    reject,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(directApiCallWaitingAction, new DirectApiCallAction({\n    payload: {\n      service: 'msauth',\n      endpoint: '/consent.update',\n      method: 'post',\n      body: {\n        consent,\n      },\n    },\n  }));\n\n  if (err) {\n    console.error('Error updating consent status', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:consentModal.updateFailed'),\n      severity: 'error',\n    }));\n  }\n\n  // the modal is blocking and has no cancel, so it closes either way - a failed save must\n  // not lock the user out of the app. getConsentStatus asks again on the next app boot.\n  yield put(new ToggleOverlayComponentAction({\n    id: CONSENT_MODAL,\n    open: false,\n  }));\n\n  if (err) {\n    if (reject) {\n      reject(err);\n    }\n    return;\n  }\n\n  if (resolve) {\n    resolve(data);\n  }\n}\n\nexport function* getFirmTypes(\n  action: GetFirmTypesAction\n) {\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getFirmTypes',\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmTypes = immutableData.getIn(['payload', 'list', 'firmTypes']);\n    if (firmTypes == null) {\n      console.error('Invalid response', err); // tslint:disable-line\n    } else {\n      yield put(new GetFirmTypesSucceededAction(firmTypes));\n    }\n  } else {\n    console.error('Error getting firmTypes', {err}); // tslint:disable-line\n  }\n}\n\nexport function* verifyEmailByKey({\n  payload,\n}: VerifyEmailByKeyAction) {\n  const {\n    key,\n    email,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: [\n      key,\n      email,\n      {\n        service: 'auth',\n        endpoint: 'verifyEmailByKey',\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    // whatever other logic that needs to go after success\n\n  } else {\n    console.error('error verifyEmailByKey', {err});  // tslint:disable-line\n  }\n}\n\nexport function* updateToken(\n  action: RefreshTokenAction\n) {\n  const {\n    isGuestToken = false,\n    token\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'refreshToken',\n      ...action.payload.token ? { token: action.payload.token } : {},\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const refreshedToken = immutableData.getIn(['payload', 'auth', 'token']);\n    if (refreshedToken == null) {\n      console.error('Invalid response', err); // tslint:disable-line\n    } else {\n      yield put(new VerifyTokenAction({ token: refreshedToken, isGuestToken }));\n      if (isGuestToken) {\n        yield call(setAppToken, {payload: { token: refreshedToken }}); // tslint:disable-line\n      } else {\n        yield call(setToken, {payload: { token: refreshedToken }});\n      }\n    }\n  } else {\n    console.error('Error refreshing token', {err}); // tslint:disable-line\n  }\n}\n\nexport function* verifyToken({\n  payload,\n}: VerifyTokenAction) {\n  const {\n    token,\n    isGuestToken = false,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'verifyToken',\n      token\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const identity = immutableData.getIn(['payload', 'auth']);\n    if (identity == null) {\n      console.error('Invalid response', err); // tslint:disable-line\n    } else {\n      yield put(new VerifyTokenSucceededAction({ identity, isGuestToken }));\n    }\n  } else {\n    console.error('Error verify token', {err}); // tslint:disable-line\n  }\n}\n\nexport function* resendVerificationEmail({\n  payload\n}: ResendVerificationEmailAction) {\n  yield call(atsApiCallAction, new BaseAtsApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'resendActivation',\n      body: {\n        email: payload.email\n      }\n    },\n  }));\n}\n\nfunction* initialize() {\n  yield call(waitForEnv);\n  // after a short time, set init: true in the state\n  // yield call(delayedInit); // fork is non-block effect\n  // initial delayed check for existing token\n  // yield call(initialize);\n  yield put(new InitAction());\n  yield call(getApplicationToken);\n\n  const userToken = getToken();\n  if (userToken != null) {\n    yield call(getUserIdentity, userToken);\n    // spec tool only - re-checked on boot as well so a refresh or a new tab cannot bypass the consent modal\n    const isAtsSpecTool = yield select(makeSelectIsAtsSpecTool());\n    console.log(isAtsSpecTool);\n    const isUsingLoginAs = yield select(makeSelectIsUsingLogInAs());\n    if (isAtsSpecTool && !isUsingLoginAs) {\n      yield put(new GetConsentStatusAction());\n    }\n  }\n  yield put(new SetIsVerifyingUserAction(false));\n  // const watcher = yield fork(initCheck);\n  //\n  // // cancel initCheck if any user action happens - usually means app is loaded and things are being clicked\n  // // anyway, session will be created by those handlers so we don't have to do it automatically\n  // yield take([AtsActionTypes.USER_LOGGED_IN, AtsActionTypes.USER_LOGGED_OUT, AtsActionTypes.USER_REFRESH, AtsActionTypes.USER_LOGIN_ERROR, AtsActionTypes.USER_TOKEN_ERROR, AtsActionTypes.USER_REFRESH_ERROR, AtsActionTypes.USER_TOKEN_REFRESHED]);\n  // yield cancel(watcher);\n}\nexport default function* initWatchers() {\n\n  // handle generic api calls\n  yield takeEvery(AtsActionTypes.API_CALL, apiCallWaitingAction);\n  yield takeEvery(AtsActionTypes.DEPRECATED_API_CALL, deprecatedApiCallWaitingAction);\n  yield takeEvery(AtsActionTypes.ATS_API_CALL, atsApiCallWaitingAction);\n  // yield takeEvery(AtsActionTypes.USER_LOGGED_IN, sessionBegin);\n  yield takeEvery(AtsActionTypes.USER_LOG_OUT, sessionEnd);\n  yield takeEvery(AtsActionTypes.APP_LOGGED_IN, appSessionBegin);\n  yield takeEvery([\n    AtsActionTypes.USER_LOGGED_OUT,\n    AtsActionTypes.USER_REFRESH,\n    // AtsActionTypes.USER_LOGIN_ERROR,\n    AtsActionTypes.USER_TOKEN_ERROR,\n    AtsActionTypes.USER_REFRESH_ERROR,\n  ], sessionEnded);\n  yield takeEvery(AtsActionTypes.APP_LOGGED_OUT, getApplicationToken);\n  yield takeEvery(AtsActionTypes.USER_LOG_IN, doLogin);\n  yield takeEvery(AtsActionTypes.USER_LOG_IN_AS, doLoginAs);\n  yield takeEvery(AtsActionTypes.LOGIN_WITH_EMAIL, loginWithEmail);\n  yield takeLatest(AtsActionTypes.LOG_IN_AS_AND_REDIRECT, LoginAsAndRedirect);\n  yield takeLatest(AtsActionTypes.USER_FORGOT_PASSWORD, callForgotPassword);\n  yield takeLatest(AtsActionTypes.VERIFY_EMAIL_BY_KEY, verifyEmailByKey);\n  yield takeLatest(AtsActionTypes.USER_RESET_PASSWORD, callResetPassword);\n  yield takeLatest(AtsActionTypes.USER_CHECK_EMAIL_ALREADY_EXISTS, checkEmailAlreadyExists);\n  yield takeLatest(AtsActionTypes.REGISTER_USER, registerUser);\n  yield takeLatest(AtsActionTypes.GET_CONSENT_STATUS, getConsentStatus);\n  yield takeLatest(AtsActionTypes.UPDATE_CONSENT_STATUS, updateConsentStatus);\n  yield takeLatest(AtsActionTypes.GET_FIRM_TYPES, getFirmTypes);\n  yield takeLatest(AtsActionTypes.REFRESH_TOKEN, updateToken);\n  yield takeLatest(AtsActionTypes.VERIFY_TOKEN, verifyToken);\n  yield takeEvery(AtsActionTypes.RESEND_VERIFICATION_EMAIL, resendVerificationEmail);\n  yield takeEvery(AtsActionTypes.PRESET_TOKEN, setToken);\n  // other init goes into this function\n  // for some reason, when not actively focused, envloaded action will not fire.\n  // we can simply check manually (we also set the env into the store)\n  yield fork(initialize);\n  yield fork(appTokenRefreshLoop);\n  yield fork(sseSessionSaga);\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n    Project,\n    HasId,\n    ProjectTrackStatus,\n    Filter,\n    Option,\n    Opportunity,\n    ProjectPhase,\n    Contact,\n    ContactListItem, Spec,\n} from '../../models';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport File from '../../models/File';\nimport { ITakeoffFile } from '../../components/TakeoffDrawerView/Component';\n\nexport default {};\n\nexport enum ProjectActionTypes {\n  CREATE_PROJECT = 'CREATE_PROJECT',\n  CREATE_PT_PROJECT = 'CREATE_PT_PROJECT',\n  CREATE_PROJECT_SUCCEEDED = 'CREATE_PROJECT_SUCCEEDED',\n  CREATE_PT_PROJECT_SUCCEEDED = 'CREATE_PT_PROJECT_SUCCEEDED',\n  CREATE_PROJECT_FAILED = 'CREATE_PROJECT_FAILED',\n  GET_PROJECTS_SUCCEEDED = 'GET_PROJECTS_SUCCEEDED',\n  PROJECT_FAILED = 'PROJECT_FAILED',\n  SELECT_PROJECT = 'SELECT_PROJECT',\n  SELECT_PROJECT_OPPORTUNITY_GROUP_UUID = 'SELECT_PROJECT_OPPORTUNITY_GROUP_UUID',\n  GET_PROJECTS = 'GET_PROJECTS',\n  GET_PROJECT_BY_ID_AND_FETCH_MISSING_SPECS = 'GET_PROJECT_BY_ID_AND_FETCH_MISSING_SPECS',\n  GET_PROJECT_BY_ID_AND_SELECT_PROJECT = 'GET_PROJECT_BY_ID_AND_SELECT_PROJECT',\n  GET_PROJECT_BY_ID_AND_SELECT_PROJECT_SUCCEEDED = 'GET_PROJECT_BY_ID_AND_SELECT_PROJECT_SUCCEEDED',\n  DELETE_PROJECT = 'DELETE_PROJECT',\n  DELETE_PROJECT_SUCCEEDED = 'DELETE_PROJECT_SUCCEEDED',\n  DELETE_MASTER_SUCCEEDED = 'DELETE_MASTER_SUCCEEDED',\n  DUPLICATE_PROJECT = 'DUPLICATE_PROJECT',\n  GET_TRACKED_PROJECTS = 'GET_TRACKED_PROJECTS',\n  GET_TRACKED_PROJECTS_SUCCEEDED = 'GET_TRACKED_PROJECTS_SUCCEEDED',\n  TRACK_PROJECT = 'TRACK_PROJECT',\n  UNTRACK_PROJECT = 'UNTRACK_PROJECT',\n  SET_IS_TRACKING_OR_UNTRACKING_PROJECT = 'SET_IS_TRACKING_OR_UNTRACKING_PROJECT',\n  SEARCH_PROJECTS = 'SEARCH_PROJECTS',\n  SEARCH_PROJECTS_FAILED = 'SEARCH_PROJECTS_FAILED',\n  QUICK_SEARCH_PROJECTS = 'QUICK_SEARCH_PROJECTS',\n  SEARCH_PROJECTS_SUCCEEDED = 'SEARCH_PROJECTS_SUCCEEDED',\n  DELETE_AND_SEARCH_PROJECTS = 'DELETE_AND_SEARCH_PROJECTS',\n  SPEC_TOOL_PROJECT_LIST_SEARCH_PROJECTS = 'SPEC_TOOL_PROJECT_LIST_SEARCH_PROJECTS',\n  UPDATE_TRACK_LIST = 'UPDATE_TRACK_LIST',\n  UPDATE_UNTRACK_LIST = 'UPDATE_UNTRACK_LIST',\n  UPDATE_PROJECT = 'UPDATE_PROJECT',\n  UPDATE_PROJECT_AND_THEN_REDIRECT = 'UPDATE_PROJECT_AND_THEN_REDIRECT',\n  UPDATE_PROJECT_KEY_CONTACTS_AND_THEN_REDIRECT = 'UPDATE_PROJECT_KEY_CONTACTS_AND_THEN_REDIRECT',\n  EDIT_PROJECT = 'EDIT_PROJECT',\n  GET_PROJECT_OPPORTUNITY = 'GET_PROJECT_OPPORTUNITY',\n  EDIT_PROJECT_OPPORTUNITY = 'EDIT_PROJECT_OPPORTUNITY',\n  UPDATE_PROJECT_OPPORTUNITY = 'UPDATE_PROJECT_OPPORTUNITY',\n  UPDATE_PROJECT_OPPORTUNITY_SUCCEEDED = 'UPDATE_PROJECT_OPPORTUNITY_SUCCEEDED',\n  UPDATE_PROJECT_ASSIGNED_TO = 'UPDATE_PROJECT_ASSIGNED_TO',\n  UPDATE_PROJECT_ASSIGNED_TO_SUCCEEDED = 'UPDATE_PROJECT_ASSIGNED_TO_SUCCEEDED',\n  ADD_QUOTE_TO_PROJECT = 'ADD_QUOTE_TO_PROJECT',\n  REDIRECT_TO_QUOTE= 'REDIRECT_TO_QUOTE',\n  REDIRECT_TO_QUOTE_EDIT = 'REDIRECT_TO_QUOTE_EDIT',\n  REMOVE_QUOTE_FROM_PROJECT= 'REMOVE_QUOTE_FROM_PROJECT',\n  REMOVE_QUOTE_FROM_PROJECT_SUCCEEDED= 'REMOVE_QUOTE_FROM_PROJECT_SUCCEEDED',\n  ADD_PROJECT_PHASE_CHANGE = 'ADD_PROJECT_PHASE_CHANGE',\n  ADD_PROJECT_PHASE_CHANGE_SUCCEEDED = 'ADD_PROJECT_PHASE_CHANGE_SUCCEEDED',\n  GET_PROJECT_FILES = 'GET_PROJECT_FILES',\n  GET_PROJECT_FILES_SUCCEEDED = 'GET_PROJECT_FILES_SUCCEEDED',\n  DELETE_PROJECT_FILE = 'DELETE_PROJECT_FILE',\n  DELETE_PROJECT_FILE_AND_GET_PROJECT_FILES = 'DELETE_PROJECT_FILE_AND_GET_PROJECT_FILES',\n  ADD_PROJECT_FILE = 'ADD_PROJECT_FILE',\n  ADD_PROJECT_FILE_AND_GET_PROJECT_FILES = 'ADD_PROJECT_FILE_AND_GET_PROJECT_FILES',\n  UPDATE_PROJECT_FILE_AND_GET_PROJECT_FILES = 'UPDATE_PROJECT_FILE_AND_GET_PROJECT_FILES',\n  LINK_SPEC_WITH_ID = 'LINK_SPEC_WITH_ID',\n  SET_PROJECT_ID_FOR_CREATING_SPEC = 'SET_PROJECT_ID_FOR_CREATING_SPEC',\n  LOADING_SEARCHED_PROJECT = 'LOADING_SEARCHED_PROJECT',\n  DELETE_PROJECT_SPEC = 'DELETE_PROJECT_SPEC',\n  SET_PROJECT_FORM_ACTIVE_STEP = 'SET_PROJECT_FORM_ACTIVE_STEP',\n  GET_MASTER_PROJECT_BY_ID = 'GET_MASTER_PROJECT_BY_ID',\n  GET_TEMPLATE_PROJECT_BY_ID = 'GET_TEMPLATE_PROJECT_BY_ID',\n  CREATE_MASTER_PROJECT = 'CREATE_MASTER_PROJECT',\n  CREATE_MASTER_PROJECT_FROM_TEMPLATE = 'CREATE_MASTER_PROJECT_FROM_TEMPLATE',\n  CREATE_TEMPLATE_PROJECT = 'CREATE_TEMPLATE_PROJECT',\n  GET_MASTER_PROJECTS_SUCCEEDED = 'GET_MASTER_PROJECTS_SUCCEEDED',\n  GET_TEMPLATE_PROJECTS_SUCCEEDED = 'GET_TEMPLATE_PROJECTS_SUCCEEDED',\n  GET_MASTER_PROJECTS_FAILED = 'GET_MASTER_PROJECTS_FAILED',\n  GET_TEMPLATE_PROJECTS_FAILED = 'GET_TEMPLATE_PROJECTS_FAILED',\n  SELECT_MASTER_PROJECT = 'SELECT_MASTER_PROJECT',\n  SELECT_TEMPLATE_PROJECT = 'SELECT_TEMPLATE_PROJECT',\n  CREATE_MASTER_PROJECT_SUCCEEDED = 'CREATE_MASTER_PROJECT_SUCCEEDED',\n  CREATE_MASTER_PROJECT_FROM_TEMPLATE_SUCCEEDED = 'CREATE_MASTER_PROJECT_FROM_TEMPLATE_SUCCEEDED',\n  CREATE_TEMPLATE_PROJECT_SUCCEEDED = 'CREATE_TEMPLATE_PROJECT_SUCCEEDED',\n  GET_MASTER_PROJECTS = 'GET_MASTER_PROJECTS',\n  GET_TEMPLATE_PROJECTS = 'GET_TEMPLATE_PROJECTS',\n  UPDATE_MASTER_PROJECT = 'UPDATE_MASTER_PROJECT',\n  UPDATE_TEMPLATE_PROJECT = 'UPDATE_TEMPLATE_PROJECT',\n  LOADING_SEARCHED_MASTERS = 'LOADING_SEARCHED_MASTERS',\n  LOADING_SEARCHED_TEMPLATES = 'LOADING_SEARCHED_TEMPLATES',\n  SEARCH_MASTERS = 'SEARCH_MASTERS',\n  SEARCH_MASTERS_SUCCEEDED = 'SEARCH_MASTERS_SUCCEEDED',\n  SEARCH_MASTERS_FAILED = 'SEARCH_MASTERS_FAILED',\n  DELETE_MASTER = 'DELETE_MASTER',\n  DELETE_TEMPLATE = 'DELETE_TEMPLATE',\n  DELETE_AND_SEARCH_MASTERS = 'DELETE_AND_SEARCH_MASTERS',\n  DELETE_AND_SEARCH_TEMPLATES = 'DELETE_AND_SEARCH_TEMPLATES',\n  DUPLICATE_MASTER = 'DUPLICATE_MASTER',\n  DUPLICATE_TEMPLATE = 'DUPLICATE_TEMPLATE',\n  UPDATE_MASTER_DETAIL_CONFIG = 'UPDATE_MASTER_DETAIL_CONFIG',\n  UPDATE_TEMPLATE_DETAIL_CONFIG = 'UPDATE_TEMPLATE_DETAIL_CONFIG',\n  UPDATE_MASTER_PROJECT_AND_REDIRECT = 'UPDATE_MASTER_PROJECT_AND_REDIRECT',\n  UPDATE_TEMPLATE_PROJECT_AND_REDIRECT = 'UPDATE_TEMPLATE_PROJECT_AND_REDIRECT',\n  SET_PROJECT_MASTER_SAVING_ALLOW = 'SET_PROJECT_MASTER_SAVING_ALLOW',\n  CHECK_OPPORTUNITY_STATUS_UP_TO_DATE = 'CHECK_OPPORTUNITY_STATUS_UP_TO_DATE',\n  CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_SUCCEEDED = 'CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_SUCCEEDED',\n  CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_FETCHING = 'CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_FETCHING',\n  UPDATE_OPPORTUNITY_AUTOMATION = 'UPDATE_OPPORTUNITY_AUTOMATION',\n  UPDATE_OPPORTUNITY_AUTOMATION_SUCCEEDED = 'UPDATE_OPPORTUNITY_AUTOMATION_SUCCEEDED',\n  UPDATE_OPPORTUNITY_AUTOMATION_FETCHING = 'UPDATE_OPPORTUNITY_AUTOMATION_FETCHING',\n  FETCH_THEN_UPDATE_THEN_CHECK_OPPORTUNITY_STATUS = 'FETCH_THEN_UPDATE_THEN_CHECK_OPPORTUNITY_STATUS',\n  CHECK_OPPORTUNITY_EXISTS = 'CHECK_OPPORTUNITY_EXISTS',\n  CHECK_OPPORTUNITY_EXISTS_SUCCEEDED = 'CHECK_OPPORTUNITY_EXISTS_SUCCEEDED',\n  CHECK_OPPORTUNITY_EXISTS_FETCHING = 'CHECK_OPPORTUNITY_EXISTS_FETCHING',\n  UPDATE_QUOTE_STATUS_AND_OPPORTUNITY_VALUE = 'UPDATE_QUOTE_STATUS_AND_OPPORTUNITY_VALUE',\n  CREATE_TAKEOFF = 'CREATE_TAKEOFF',\n  UPDATE_PROJECT_SPEC_DETAIL_CONFIG = 'UPDATE_PROJECT_SPEC_DETAIL_CONFIG',\n  MASS_UPDATE_PROJECT_SPEC_DETAIL_CONFIG = 'MASS_UPDATE_PROJECT_SPEC_DETAIL_CONFIG',\n  DELETE_SPEC_FROM_PROJECT_SPEC_DETAIL_CONFIG = 'DELETE_SPEC_FROM_PROJECT_SPEC_DETAIL_CONFIG',\n  COLLAPSE_ALL_DRAWINGS = 'COLLAPSE_ALL_DRAWINGS',\n  SEARCH_TEMPLATES = 'SEARCH_TEMPLATES',\n  SEARCH_TEMPLATES_SUCCEEDED = 'SEARCH_TEMPLATES_SUCCEEDED',\n  SEARCH_TEMPLATES_FAILED = 'SEARCH_TEMPLATES_FAILED',\n  APPLY_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT= 'APPLY_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT',\n  SET_IS_APPLYING_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT= 'SET_IS_APPLYING_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT',\n  CREATE_PROJECT_FROM_TEMPLATE = 'CREATE_PROJECT_FROM_TEMPLATE',\n  CREATE_PT_PROJECT_FROM_TEMPLATE = 'CREATE_PT_PROJECT_FROM_TEMPLATE',\n  PATCH_KEY_CONTACTS = 'PATCH_KEY_CONTACTS',\n  PATCH_KEY_CONTACTS_SUCCEEDED = 'PATCH_KEY_CONTACTS_SUCCEEDED',\n  UPDATE_PROJECT_CONTACT = 'UPDATE_PROJECT_CONTACT',\n  SELECT_ALL_DRAWINGS = 'SELECT_ALL_DRAWINGS',\n  SELECT_ALL_DRAWINGS_IN_SPEC = 'SELECT_ALL_DRAWINGS_IN_SPEC',\n  SEARCH_MASTERS_IN_COPY_MODAL = 'SEARCH_MASTERS_IN_COPY_MODAL',\n  SEARCH_MASTERS_IN_COPY_MODAL_SUCCEEDED = 'SEARCH_MASTERS_IN_COPY_MODAL_SUCCEEDED',\n  SEARCH_MASTERS_IN_COPY_MODAL_FAILED = 'SEARCH_MASTERS_IN_COPY_MODAL_FAILED',\n  LOADING_SEARCHED_MASTERS_IN_COPY_MODAL = 'LOADING_SEARCHED_MASTERS_IN_COPY_MODAL'\n}\n\nexport class UpdateProjectContactAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_CONTACT;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      contact: IMap<Contact>;\n    }\n  ) {}\n}\n\nexport class SetProjectMasterSavingAllowAction implements IAction {\n  public type = ProjectActionTypes.SET_PROJECT_MASTER_SAVING_ALLOW;\n\n  constructor(\n    public payload: {\n      allow: boolean;\n    }\n  ) {}\n}\n\nexport class UpdateMasterProjectAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_MASTER_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId?: number,\n      project: IMap<Project>,\n    }\n  ) {}\n}\nexport class UpdateTemplateProjectAction implements IAction {\n    public type = ProjectActionTypes.UPDATE_TEMPLATE_PROJECT;\n\n    constructor(\n        public payload: {\n            projectId?: number,\n            project: IMap<Project>,\n        }\n    ) {}\n}\n\nexport class UpdateMasterProjectAndRedirectAction extends UpdateMasterProjectAction {\n  public type = ProjectActionTypes.UPDATE_MASTER_PROJECT_AND_REDIRECT;\n}\n\nexport class UpdateTemplateProjectAndRedirectAction extends UpdateTemplateProjectAction {\n  public type = ProjectActionTypes.UPDATE_TEMPLATE_PROJECT_AND_REDIRECT;\n}\nexport class GetMasterProjectsAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_MASTER_PROJECTS;\n  constructor(\n    public payload: number,\n  ) {}\n}\nexport class GetTemplateProjectsAction implements IAction {\n    public readonly type = ProjectActionTypes.GET_TEMPLATE_PROJECTS;\n    constructor(\n        public payload?: number,\n    ) {}\n}\n\nexport class GetMasterProjectsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_MASTER_PROJECTS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Partial<Project>>>\n  ) {}\n}\nexport class GetTemplateProjectsSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.GET_TEMPLATE_PROJECTS_SUCCEEDED;\n    constructor(\n        public payload: List<IMap<Project>>\n    ) {}\n}\n\n\nexport class GetMasterProjectsFailedAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_MASTER_PROJECTS_FAILED;\n}\nexport class GetTemplateProjectsFailedAction implements IAction {\n    public readonly type = ProjectActionTypes.GET_TEMPLATE_PROJECTS_FAILED;\n}\nexport class SelectMasterProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.SELECT_MASTER_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      specId?: number,\n      setSelectDrawingId?: boolean,\n      onSuccess?: () => void,\n    }\n  ) {}\n}\nexport class SelectTemplateProjectAction implements IAction {\n    public readonly type = ProjectActionTypes.SELECT_TEMPLATE_PROJECT;\n    constructor(\n        public payload: {\n            projectId: number,\n            specId?: number,\n        }\n    ) {}\n}\nexport class LoadingSearchedMastersAction implements IAction {\n  public readonly type = ProjectActionTypes.LOADING_SEARCHED_MASTERS;\n}\nexport class LoadingSearchedMastersInCopyModalAction implements IAction {\n    public readonly type = ProjectActionTypes.LOADING_SEARCHED_MASTERS_IN_COPY_MODAL;\n}\n\nexport class LoadingSearchedTemplateAction implements IAction {\n    public readonly type = ProjectActionTypes.LOADING_SEARCHED_TEMPLATES;\n}\n\nexport class SearchMastersAction implements IAction {\n  public readonly type = ProjectActionTypes.SEARCH_MASTERS;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Project>,\n    } = {}\n  ) {}\n}\n\nexport class SearchMastersInCopyModalAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL;\n    constructor(\n        public payload: {\n            filters?: Filter,\n            options?: Option<Project>,\n        } = {}\n    ) {}\n}\n\nexport class SearchMastersSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.SEARCH_MASTERS_SUCCEEDED;\n  constructor(\n    public payload: {\n      count?: number;\n      hasNextPage?: boolean;\n      masters: List<IMap<Project>>\n    }\n  ) {}\n}\n\nexport class SearchMastersInCopyModalSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL_SUCCEEDED;\n    constructor(\n        public payload: {\n            count?: number;\n            hasNextPage?: boolean;\n            masters: List<IMap<Project>>\n        }\n    ) {}\n}\n\nexport class SearchMastersFailedAction implements IAction {\n  public readonly type = ProjectActionTypes.SEARCH_MASTERS_FAILED;\n  constructor(\n    public payload: Error\n  ) {}\n}\n\nexport class SearchMastersInCopyModalFailedAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL_FAILED;\n    constructor(\n        public payload: Error\n    ) {}\n}\nexport class DeleteMasterAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_MASTER;\n  constructor(\n    public payload: {\n      masterId: number,\n      masterName: string,\n      specIds: string,\n      redirectPath?: string\n    }\n  ) {}\n}\n\nexport class DeleteTemplateAction implements IAction {\n    public readonly type = ProjectActionTypes.DELETE_TEMPLATE;\n    constructor(\n        public payload: {\n            templateId: number,\n            templateName: string,\n            specIds: string,\n            redirectPath?: string\n        }\n    ) {}\n}\n\nexport class CreateMasterProjectSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_MASTER_PROJECT_SUCCEEDED;\n}\n\nexport class CreateMasterProjectFromTemplateSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_MASTER_PROJECT_FROM_TEMPLATE_SUCCEEDED;\n}\nexport class CreateTemplateProjectSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_TEMPLATE_PROJECT_SUCCEEDED;\n}\n\nexport interface ICreateMasterProjectActionPayload {\n    master: Partial<Project>;\n    onSuccess?: (master: List<IMap<Partial<Project>>>) => void;\n    onFailed?: () => void;\n}\nexport class CreateMasterProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_MASTER_PROJECT;\n\n  constructor(\n    public payload: ICreateMasterProjectActionPayload\n  ) {}\n}\n\nexport interface ICreateMasterProjectFromTemplateActionPayload {\n    masterTemplateId: number;\n    master: Partial<Project>;\n    copyInstructions?: {\n        specs?: Array<{ id: number, drawings: Array<{ id: number }>}>\n    };\n    allSelected?: boolean;\n    onSuccess: (master: List<IMap<Partial<Project>>>) => void;\n    onFailed: () => void;\n}\nexport class CreateMasterProjectFromTemplateAction implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_MASTER_PROJECT_FROM_TEMPLATE;\n    constructor(\n        public payload: ICreateMasterProjectFromTemplateActionPayload\n    ) {}\n}\nexport class CreateTemplateProjectAction implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_TEMPLATE_PROJECT;\n\n    constructor(\n        public payload: IMap<Partial<Project>>\n    ) {}\n}\n\nexport class GetMasterProjectByIdAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_MASTER_PROJECT_BY_ID;\n  constructor(\n    public payload: {\n      id: number,\n      redirectIfNotfound?: boolean,\n    }\n  ) {}\n}\nexport class GetTemplateProjectByIdAction implements IAction {\n    public readonly type = ProjectActionTypes.GET_TEMPLATE_PROJECT_BY_ID;\n    constructor(\n        public payload: {\n            id: number,\n            redirectIfNotfound?: boolean,\n        }\n    ) {}\n}\nexport class DeleteMasterAndSearchMastersAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_AND_SEARCH_MASTERS;\n  constructor(\n    public payload: {\n      id?: number,\n      masterName: string,\n      specIds: string,\n      filters?: Filter,\n      options?: Option<Project>\n    }\n  ) {}\n}\nexport class DeleteTemplateAndSearchTemplatesAction implements IAction {\n    public readonly type = ProjectActionTypes.DELETE_AND_SEARCH_TEMPLATES;\n    constructor(\n        public payload: {\n            id?: number,\n            templateName: string,\n            specIds: string,\n            filters?: Filter,\n            options?: Option<Project>\n        }\n    ) {}\n}\n\nexport class DuplicateMasterAction implements IAction {\n  public readonly type = ProjectActionTypes.DUPLICATE_MASTER;\n  constructor(\n    public payload: {\n      masterId: number\n    }\n  ) {}\n}\n\nexport class DuplicateTemplateAction implements IAction {\n    public readonly type = ProjectActionTypes.DUPLICATE_TEMPLATE;\n    constructor(\n        public payload: {\n            templateId: number\n        }\n    ) {}\n}\nexport class DuplicateProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.DUPLICATE_PROJECT;\n  constructor(\n    public payload: {\n      projectId: number\n    }\n  ) {}\n}\n\nexport class SetProjectFormActiveStepAction implements IAction {\n  public readonly type = ProjectActionTypes.SET_PROJECT_FORM_ACTIVE_STEP;\n  constructor(\n    public payload: {\n      activeStep: number\n    }\n  ) {}\n}\n\nexport class LoadingSearchedProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.LOADING_SEARCHED_PROJECT;\n\n}\n\nexport class SetProjectIdForCreatingSpec implements IAction {\n  public readonly type = ProjectActionTypes.SET_PROJECT_ID_FOR_CREATING_SPEC;\n\n  constructor(\n    public payload: {\n      projectId: number,\n    }\n  ) {}\n}\n\nexport class LinkSpecWithIdAction implements IAction {\n  public readonly type = ProjectActionTypes.LINK_SPEC_WITH_ID;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      specId: number,\n    }\n  ) {}\n}\n\n\nexport class DeleteProjectFileAndGetProjectFilesAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_PROJECT_FILE_AND_GET_PROJECT_FILES;\n  constructor(\n    public payload: {\n      projectId: number;\n      linkedFile: IMap<File>;\n    }\n  ) { }\n}\n\nexport class AddProjectFileAndGetProjectFilesAction implements IAction {\n  public readonly type = ProjectActionTypes.ADD_PROJECT_FILE_AND_GET_PROJECT_FILES;\n  constructor(\n    public payload: {\n      projectId: number;\n      parentId?: number;\n      fileIds?: string[];\n      folderName?: string;\n      permission?: 'public' | 'protected';\n      labels?: object[];\n      fileTags?: string[];\n    }\n  ) { }\n}\n\nexport class UpdateProjectFileAndGetProjectFilesAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_PROJECT_FILE_AND_GET_PROJECT_FILES;\n  constructor(\n    public payload: {\n      projectId: number;\n      linkedFileId: number;\n      updatedFile: IMap<File>;\n    }\n  ) { }\n}\n\nexport class GetProjectFilesAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECT_FILES;\n  constructor(\n    public payload: number\n  ) { }\n}\n\nexport class GetProjectFilesSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECT_FILES_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<File>>\n  ) { }\n}\n\nexport class DeleteProjectFileAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_PROJECT_FILE;\n  constructor(\n    public payload: {\n      projectId: number;\n      linkedFile: IMap<File>;\n    }\n  ) { }\n}\n\nexport class AddProjectFileAction implements IAction {\n  public readonly type = ProjectActionTypes.ADD_PROJECT_FILE;\n  constructor(\n    public payload: {\n      projectId: number;\n      parentId?: number;\n      fileIds?: string[];\n      folderName?: string;\n      permission?: 'public' | 'protected';\n      labels?: object[];\n      fileTags?: string[];\n    }\n  ) { }\n}\n\nexport class AddProjectPhaseChangeAction implements IAction {\n  public readonly type = ProjectActionTypes.ADD_PROJECT_PHASE_CHANGE;\n  constructor(\n    public payload: {\n      projectId: number,\n      phase: IMap<ProjectPhase>,\n    }\n  ) {}\n}\n\nexport class AddProjectPhaseChangeSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.ADD_PROJECT_PHASE_CHANGE_SUCCEEDED;\n  constructor(\n    public payload: IMap<ProjectPhase>\n  ) {}\n}\n\nexport class GetTrackedProjectsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_TRACKED_PROJECTS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<ProjectTrackStatus>>\n  ) {}\n}\n\nexport class GetTrackedProjectsAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_TRACKED_PROJECTS;\n  constructor(\n    public payload: {\n      type?: string,\n      typeId: number,\n      projectId: number\n    }\n  ) {}\n}\n\nexport class UntrackProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.UNTRACK_PROJECT;\n  constructor(\n    public payload: {\n      type?: string,\n      typeId: number,\n      projectId: number\n    }\n  ) {}\n}\n\nexport class UpdateTrackListAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_TRACK_LIST;\n\n  constructor(\n    public payload: {\n      type?: string,\n      typeId: number,\n      projectId: number,\n      payload?: number,\n      withoutLinkedQuotes?: boolean,\n    }\n  ) {}\n}\n\nexport class UpdateUntrackListAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_UNTRACK_LIST;\n\n  constructor(\n    public payload: {\n      type?: string,\n      typeId: number,\n      projectId: number,\n      payload?: number,\n      withoutLinkedQuotes?: boolean,\n    }\n  ) {}\n}\n\nexport class TrackProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.TRACK_PROJECT;\n  constructor(\n    public payload: {\n      type?: string,\n      typeId: number,\n      projectId: number\n    }\n  ) {}\n}\n\nexport class SetIsTrackingOrUntrackingProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.SET_IS_TRACKING_OR_UNTRACKING_PROJECT;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class CreateProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_PROJECT;\n\n  constructor(\n    public payload: {\n        project: IMap<Partial<Project>>;\n        onSuccess: (projects, quoteId) => void;\n        onFailed: (error) => void;\n    }\n  ) {}\n}\n\n\nexport class UpdateProjectAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId?: number,\n      project: IMap<Project>,\n    }\n  ) {}\n}\n\n\nexport class UpdateProjectAndThenRedirectAction extends UpdateProjectAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_AND_THEN_REDIRECT;\n\n  constructor(\n    public payload: {\n      projectId?: number,\n      project: IMap<Project>,\n      redirect: string,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UpdateProjectKeyContactsAndThenRedirectAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_KEY_CONTACTS_AND_THEN_REDIRECT;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      redirect: string,\n      projectKeyContacts: List<IMap<ContactListItem>>,\n      keyContacts: object[],\n      onSuccess?: () => void,\n      onFailed?: () => void,\n    }\n  ) {}\n}\n\nexport class EditProjectAction extends UpdateProjectAction {\n  public readonly type = ProjectActionTypes.EDIT_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId?: number,\n      project: IMap<Project>,\n    }\n  ) {\n    super(payload);\n  }\n}\n\n\nexport class GetProjectOpportunityAction implements IAction {\n  public type = ProjectActionTypes.GET_PROJECT_OPPORTUNITY;\n\n  constructor(\n    public payload: {\n      projectId: number,\n    }\n  ) {}\n}\n\nexport class EditProjectOpportunityAction implements IAction {\n  public type = ProjectActionTypes.EDIT_PROJECT_OPPORTUNITY;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      // updatedOpportunityLabelIds?: Set<string>,\n      opportunity: IMap<Opportunity>,\n    }\n  ) {}\n}\n\nexport class UpdateProjectOpportunityAction extends EditProjectOpportunityAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_OPPORTUNITY;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      // updatedOpportunityLabelIds?: Set<string>,\n      opportunity: IMap<Opportunity>,\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class UpdateProjectOpportunitySucceededAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_OPPORTUNITY_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      // updatedOpportunityLabelIds?: Set<string>,\n      opportunities: List<IMap<Opportunity>>,\n    }\n  ) {\n  }\n}\n\nexport class UpdateProjectAssignedToAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_PROJECT_ASSIGNED_TO;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      assignedTo: any[],\n    }\n  ) {}\n}\n\nexport class UpdateProjectAssignedToSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_PROJECT_ASSIGNED_TO_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      assignedTo: any[],\n    }\n  ) {}\n}\n\nexport class DeleteProjectSpecAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_PROJECT_SPEC;\n  constructor(\n    public payload: {\n      projectId: number;\n      specId: number;\n    }\n  ) { }\n}\n\nexport class CreatePTProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_PT_PROJECT;\n\n  constructor(\n    // public payload: IMap<Partial<Project>>,\n    // public setTrackProject?: boolean,\n    public payload: {\n      project: IMap<Partial<Project>>;\n      setTrackProject?: boolean;\n      exitQuoteAfterQuoteSave?: boolean;\n      onSuccess?: (project: IMap<Project>) => void;\n    }\n  ) {}\n}\nexport interface ICreatePTProjectFromTemplateActionPayload {\n    project: IMap<Partial<Project>>;\n    copyInstructions?: Array<{\n        sourceSpecs?: Array<{ id: number, drawings: Array<{ id: number }>}>,\n        destinationType: string,\n        sourceType: string,\n    }>;\n}\nexport class CreatePTProjectFromTemplate implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_PT_PROJECT_FROM_TEMPLATE;\n    constructor(\n        public payload: ICreatePTProjectFromTemplateActionPayload\n    ) {}\n}\nexport interface ICreateProjectFromTemplateActionPayload {\n    project: IMap<Partial<Project>>;\n    copyInstructions?: Array<{\n        sourceSpecs?: Array<{ id: number, drawings: Array<{ id: number }>}>,\n        destinationType: string,\n        sourceType: string,\n    }>;\n    onSuccess?: (project: IMap<Partial<Project>>, quoteId: number) => void;\n    onFailed?: (err) => void;\n}\nexport class CreateProjectFromTemplateAction implements IAction {\n    public readonly type = ProjectActionTypes.CREATE_PROJECT_FROM_TEMPLATE;\n    constructor(\n        public payload: ICreateProjectFromTemplateActionPayload\n    ) {}\n}\n\n// @@TODO we should refactor this to be less generic\n// right now, SpecModule sagas automatically sets + fetches \"first spec\" with this action\n// we should have it only set the spec if specId is provided, or some other params\n// specId should be explicitly set\nexport class SelectProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.SELECT_PROJECT;\n\n  constructor(\n    public payload: {\n      projectId: number,\n      specId?: number,\n      quoteId?: number,\n      withoutLinkedQuotes?: boolean,\n      setSelectDrawingId?: boolean,\n      onSuccess?: () => void,\n    }\n  ) {}\n}\nexport class SelectProjectOpportunityGroupUuidAction implements IAction {\n  public readonly type = ProjectActionTypes.SELECT_PROJECT_OPPORTUNITY_GROUP_UUID;\n\n  constructor(\n    public payload: {\n      uuid: string,\n    }\n  ) {}\n}\n\nexport class GetProjectsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECTS_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Project>>\n  ) {}\n}\n\nexport class CreateProjectSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_PROJECT_SUCCEEDED;\n}\n\nexport class CreatePTProjectSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_PT_PROJECT_SUCCEEDED;\n}\n\nexport class DeleteProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_PROJECT;\n  constructor(\n    public payload: {\n      projectId: number,\n      projectName: string,\n      specIds: string,\n      redirectPath?: string\n    }\n  ) {}\n}\n\nexport class DeleteProjectSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_PROJECT_SUCCEEDED;\n  constructor(\n    public payload: {\n      projects: List<IMap<HasId>>\n    }\n  ) {}\n}\n\nexport class DeleteMasterSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.DELETE_MASTER_SUCCEEDED;\n    constructor(\n        public payload: {\n            masters: List<IMap<HasId>>\n        }\n    ) {}\n}\nexport class GetProjectsAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECTS;\n  constructor(\n    public payload: {\n      projectId?: number,\n      withoutLinkedQuotes?: boolean,\n      initialSelectedSpecId?: number,\n      onFailed?: () => void,\n    },\n  ) {}\n}\n\nexport class GetProjectByIdAndFetchMissingSpecsAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECT_BY_ID_AND_FETCH_MISSING_SPECS;\n  constructor(\n    public payload: {\n      projectId: number,\n    }\n  ) {}\n}\n\nexport class ProjectFailedAction implements IAction {\n  public readonly type = ProjectActionTypes.PROJECT_FAILED;\n\n  constructor(\n    public payload: {\n      err: Error;\n    }\n  ) {}\n}\n\nexport class GetProjectByIdAndSelectProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECT_BY_ID_AND_SELECT_PROJECT;\n  constructor(\n    public payload: {\n      projectId: number,\n    },\n  ) {}\n}\n\nexport class GetProjectByIdAndSelectProjectSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.GET_PROJECT_BY_ID_AND_SELECT_PROJECT_SUCCEEDED;\n  constructor(\n    public payload: List<IMap<Project>>\n  ) {}\n}\n\nexport class SearchProjectsAction implements IAction {\n  public type = ProjectActionTypes.SEARCH_PROJECTS;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Project>,\n      onSuccess?: (values: Project[]) => void,\n    } = {}\n  ) {}\n}\n\nexport class QuickSearchProjectsAction implements IAction {\n  public readonly type = ProjectActionTypes.QUICK_SEARCH_PROJECTS;\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: {\n        limit?: number,\n        offset?: number,\n        orderBy?: {\n          [key: string]: number\n        }\n      }\n    } = {}\n  ) {}\n}\n\nexport class SearchProjectsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.SEARCH_PROJECTS_SUCCEEDED;\n  constructor(\n    public payload: {\n      count?: number;\n      hasNextPage?: boolean;\n      projects: List<IMap<Project>>;\n    }\n  ) {}\n}\n\nexport class SearchProjectsFailedAction implements IAction {\n  public readonly type = ProjectActionTypes.SEARCH_PROJECTS_FAILED;\n  constructor(\n    public payload: Error\n  ) {}\n}\n\nexport class DeleteProjectAndSearchProjectsAction implements IAction {\n  public readonly type = ProjectActionTypes.DELETE_AND_SEARCH_PROJECTS;\n  constructor(\n    public payload: {\n      id?: number,\n      projectName: string,\n      specIds: string,\n      filters?: Filter,\n      options?: Option<Project>\n    }\n  ) {}\n}\n\nexport class SpecToolProjectListSearchProjectsAction extends SearchProjectsAction {\n  public readonly type = ProjectActionTypes.SPEC_TOOL_PROJECT_LIST_SEARCH_PROJECTS;\n  constructor(props\n    ) {\n      super(props);\n   }\n}\n\nexport class AddQuoteToProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.ADD_QUOTE_TO_PROJECT;\n  constructor(\n    public payload: {\n      projectId: number,\n      quoteId: number,\n      exitAfterSave?: boolean,\n      projectKeyContacts?: List<IMap<ContactListItem>>,\n      keyContacts?: List<IMap<ContactListItem>>,\n      onSuccess?: () => void,\n    }\n  ) {}\n}\n\nexport class RedirectToQuoteAction implements IAction {\n  public readonly type = ProjectActionTypes.REDIRECT_TO_QUOTE;\n  constructor(\n    public payload: {\n      quoteId: number,\n      withQuoteReload?: boolean\n    }\n  ) {}\n}\n\nexport class RedirectToQuoteEditAction implements IAction {\n  public readonly type = ProjectActionTypes.REDIRECT_TO_QUOTE_EDIT;\n  constructor(\n    public payload: {\n      quoteId: number,\n      withQuoteReload?: boolean\n    }\n  ) {}\n}\n\nexport class RemoveQuoteFromProjectAction implements IAction {\n  public readonly type = ProjectActionTypes.REMOVE_QUOTE_FROM_PROJECT;\n  constructor(\n    public payload: {\n      projectId: number,\n      quoteId: number,\n      exitAfterSave?: boolean,\n      withResetSelectedProject?: boolean\n    }\n  ) {}\n}\n\nexport class UpdateQuoteStatusAndOpportunityValueAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_QUOTE_STATUS_AND_OPPORTUNITY_VALUE;\n  constructor(\n    public payload: {\n      projectId: number,\n      quoteId: number,\n      quotePhase: string\n    }\n  ) {}\n}\n\nexport class CheckOpportunityExistsFetchingAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS_FETCHING;\n  constructor(\n    public fetching: boolean\n  ) {}\n}\n\nexport class CheckOpportunityExistsAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS;\n  constructor(\n    public payload: {\n      projectId: number,\n      quoteId: number\n    }\n  ) {}\n}\n\nexport class CheckOpportunityExistsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS_SUCCEEDED;\n  constructor(\n    public exists: boolean\n  ) {}\n}\n\nexport class CheckOpportunityStatusUpToDateAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE;\n  constructor(\n    public projectId: number\n  ) {}\n}\n\nexport class CheckOpportunityStatusUpToDateSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_SUCCEEDED;\n  constructor(\n    public upToDate: boolean\n  ) {}\n}\n\nexport class CheckOpportunityStatusUpToDateFetchingAction implements IAction {\n  public readonly type = ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_FETCHING;\n  constructor(\n    public fetching: boolean\n  ) {}\n}\n\nexport class UpdateOpportunityAutomationAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION;\n  constructor(\n    public payload: {\n      projectId: number,\n      quoteId: number\n    }\n  ) {}\n}\n\nexport class UpdateOpportunityAutomationSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION_SUCCEEDED;\n  constructor(\n    public opportunities: List<Opportunity>\n  ) {}\n}\n\nexport class UpdateOpportunityAutomationFetchingAction implements IAction {\n  public readonly type = ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION_FETCHING;\n  constructor(\n    public fetching: boolean\n  ) {}\n}\n\nexport class FetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatusAction extends UpdateOpportunityAutomationAction {\n  public readonly type = ProjectActionTypes.FETCH_THEN_UPDATE_THEN_CHECK_OPPORTUNITY_STATUS;\n}\n\nexport class CreateTakeoffAction implements IAction {\n  public readonly type = ProjectActionTypes.CREATE_TAKEOFF;\n  constructor(\n    public payload: {\n      projectId: number,\n      files: List<IMap<ITakeoffFile>>,\n    }\n  ) {}\n}\n\nexport class UpdateProjectSpecDetailConfigAction implements IAction {\n  public type = ProjectActionTypes.UPDATE_PROJECT_SPEC_DETAIL_CONFIG;\n\n  constructor(\n    public payload: {\n      specId: number;\n      drawingId: number;\n      checked?: boolean;\n      expanded?: boolean;\n      deleteDrawing?: boolean;\n    } | {}\n  ) {}\n}\n\nexport class MassUpdateProjectSpecDetailConfigAction implements IAction {\n  public type = ProjectActionTypes.MASS_UPDATE_PROJECT_SPEC_DETAIL_CONFIG;\n\n  constructor(\n    public payload: {\n      specsDrawingIds: Map<number, List<number>>;\n      checked?: boolean;\n      expanded?: boolean;\n    }\n  ) {}\n}\n\nexport class DeleteSpecFromProjectSpecDetailConfigAction implements IAction {\n  public type = ProjectActionTypes.DELETE_SPEC_FROM_PROJECT_SPEC_DETAIL_CONFIG;\n\n  constructor(\n    public payload: {\n      specId: number;\n    }\n  ) {}\n}\n\nexport class SelectAllDrawingsAction implements IAction {\n    public type = ProjectActionTypes.SELECT_ALL_DRAWINGS;\n\n    constructor(\n        public payload: { specs: Map<number, IMap<Spec>>; project: IMap<Project> }\n    ) {}\n}\n\nexport class SelectAllDrawingsInSpecAction implements IAction {\n    public type = ProjectActionTypes.SELECT_ALL_DRAWINGS_IN_SPEC;\n\n    constructor(\n        public payload: { spec: IMap<Spec> }\n    ) {}\n}\nexport class SearchTemplatesAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_TEMPLATES;\n    constructor(\n        public payload: {\n            filters?: Filter,\n            options?: Option<Project>,\n            queries?: object\n        } = {}\n    ) {}\n}\n\nexport class SearchTemplatesSucceededAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_TEMPLATES_SUCCEEDED;\n    constructor(\n        public payload: {\n          count?: number;\n          hasNextPage?: boolean;\n          templates: List<IMap<Project>>\n        }\n    ) {}\n}\n\nexport class SearchTemplatesFailedAction implements IAction {\n    public readonly type = ProjectActionTypes.SEARCH_TEMPLATES_FAILED;\n    constructor(\n        public payload: Error\n    ) {}\n}\nexport class ApplyFolderTemplateToProjectAttachmentAction implements IAction {\n  public readonly type = ProjectActionTypes.APPLY_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT;\n  constructor(\n      public payload: {\n        projectId: number;\n        templateId: number;\n        parentFolderId: number | null;\n      }\n  ) {}\n}\nexport class SetIsApplyingFolderTemplateToProjectAttachmentAction implements IAction {\n  public readonly type = ProjectActionTypes.SET_IS_APPLYING_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT;\n  constructor(\n      public payload: boolean\n  ) {}\n}\n\nexport class PatchKeyContactsAction implements IAction {\n  public readonly type = ProjectActionTypes.PATCH_KEY_CONTACTS;\n  constructor(\n    public payload: {\n      projectId: number;\n      quoteId?: number;\n      projectKeyContacts: List<IMap<any>>;\n      keyContacts: List<IMap<any>>;\n      exitAfterSave?: boolean;\n      onSuccess?: () => void;\n    }\n  ) {}\n}\nexport class PatchKeyContactsSucceededAction implements IAction {\n  public readonly type = ProjectActionTypes.PATCH_KEY_CONTACTS_SUCCEEDED;\n  constructor(\n    public payload: {\n      projectId: number;\n      keyContacts: List<IMap<Contact>>;\n    }\n  ) {}\n}","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","/*\n * The `chars`, `lookup`, `encode`, and `decode` members of this file are\n * licensed under the following:\n *\n *     base64-arraybuffer\n *     https://github.com/niklasvh/base64-arraybuffer\n *\n *     Copyright (c) 2012 Niklas von Hertzen\n *     Licensed under the MIT license.\n *\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nexport var encodeToBase64 = function (bytes) {\n    var base64 = '';\n    var len = bytes.length;\n    for (var i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nexport var decodeFromBase64 = function (base64) {\n    var bufferLength = base64.length * 0.75;\n    var len = base64.length;\n    var i;\n    var p = 0;\n    var encoded1;\n    var encoded2;\n    var encoded3;\n    var encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var bytes = new Uint8Array(bufferLength);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return bytes;\n};\n// This regex is designed to be as flexible as possible. It will parse certain\n// invalid data URIs.\nvar DATA_URI_PREFIX_REGEX = /^(data)?:?([\\w\\/\\+]+)?;?(charset=[\\w-]+|base64)?.*,/i;\n/**\n * If the `dataUri` input is a data URI, then the data URI prefix must not be\n * longer than 100 characters, or this function will fail to decode it.\n *\n * @param dataUri a base64 data URI or plain base64 string\n * @returns a Uint8Array containing the decoded input\n */\nexport var decodeFromBase64DataUri = function (dataUri) {\n    var trimmedUri = dataUri.trim();\n    var prefix = trimmedUri.substring(0, 100);\n    var res = prefix.match(DATA_URI_PREFIX_REGEX);\n    // Assume it's not a data URI - just a plain base64 string\n    if (!res)\n        return decodeFromBase64(trimmedUri);\n    // Remove the data URI prefix and parse the remainder as a base64 string\n    var fullMatch = res[0];\n    var data = trimmedUri.substring(fullMatch.length);\n    return decodeFromBase64(data);\n};\n//# sourceMappingURL=base64.js.map","import { toCharCode } from \"./strings\";\n// Mapping from PDFDocEncoding to Unicode code point\nvar pdfDocEncodingToUnicode = new Uint16Array(256);\n// Initialize the code points which are the same\nfor (var idx = 0; idx < 256; idx++) {\n    pdfDocEncodingToUnicode[idx] = idx;\n}\n// Set differences (see \"Table D.2 – PDFDocEncoding Character Set\" of the PDF spec)\npdfDocEncodingToUnicode[0x16] = toCharCode('\\u0017'); // SYNCRONOUS IDLE\npdfDocEncodingToUnicode[0x18] = toCharCode('\\u02D8'); // BREVE\npdfDocEncodingToUnicode[0x19] = toCharCode('\\u02C7'); // CARON\npdfDocEncodingToUnicode[0x1a] = toCharCode('\\u02C6'); // MODIFIER LETTER CIRCUMFLEX ACCENT\npdfDocEncodingToUnicode[0x1b] = toCharCode('\\u02D9'); // DOT ABOVE\npdfDocEncodingToUnicode[0x1c] = toCharCode('\\u02DD'); // DOUBLE ACUTE ACCENT\npdfDocEncodingToUnicode[0x1d] = toCharCode('\\u02DB'); // OGONEK\npdfDocEncodingToUnicode[0x1e] = toCharCode('\\u02DA'); // RING ABOVE\npdfDocEncodingToUnicode[0x1f] = toCharCode('\\u02DC'); // SMALL TILDE\npdfDocEncodingToUnicode[0x7f] = toCharCode('\\uFFFD'); // REPLACEMENT CHARACTER (box with questionmark)\npdfDocEncodingToUnicode[0x80] = toCharCode('\\u2022'); // BULLET\npdfDocEncodingToUnicode[0x81] = toCharCode('\\u2020'); // DAGGER\npdfDocEncodingToUnicode[0x82] = toCharCode('\\u2021'); // DOUBLE DAGGER\npdfDocEncodingToUnicode[0x83] = toCharCode('\\u2026'); // HORIZONTAL ELLIPSIS\npdfDocEncodingToUnicode[0x84] = toCharCode('\\u2014'); // EM DASH\npdfDocEncodingToUnicode[0x85] = toCharCode('\\u2013'); // EN DASH\npdfDocEncodingToUnicode[0x86] = toCharCode('\\u0192'); // LATIN SMALL LETTER SCRIPT F\npdfDocEncodingToUnicode[0x87] = toCharCode('\\u2044'); // FRACTION SLASH (solidus)\npdfDocEncodingToUnicode[0x88] = toCharCode('\\u2039'); // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\npdfDocEncodingToUnicode[0x89] = toCharCode('\\u203A'); // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\npdfDocEncodingToUnicode[0x8a] = toCharCode('\\u2212'); // MINUS SIGN\npdfDocEncodingToUnicode[0x8b] = toCharCode('\\u2030'); // PER MILLE SIGN\npdfDocEncodingToUnicode[0x8c] = toCharCode('\\u201E'); // DOUBLE LOW-9 QUOTATION MARK (quotedblbase)\npdfDocEncodingToUnicode[0x8d] = toCharCode('\\u201C'); // LEFT DOUBLE QUOTATION MARK (quotedblleft)\npdfDocEncodingToUnicode[0x8e] = toCharCode('\\u201D'); // RIGHT DOUBLE QUOTATION MARK (quotedblright)\npdfDocEncodingToUnicode[0x8f] = toCharCode('\\u2018'); // LEFT SINGLE QUOTATION MARK (quoteleft)\npdfDocEncodingToUnicode[0x90] = toCharCode('\\u2019'); // RIGHT SINGLE QUOTATION MARK (quoteright)\npdfDocEncodingToUnicode[0x91] = toCharCode('\\u201A'); // SINGLE LOW-9 QUOTATION MARK (quotesinglbase)\npdfDocEncodingToUnicode[0x92] = toCharCode('\\u2122'); // TRADE MARK SIGN\npdfDocEncodingToUnicode[0x93] = toCharCode('\\uFB01'); // LATIN SMALL LIGATURE FI\npdfDocEncodingToUnicode[0x94] = toCharCode('\\uFB02'); // LATIN SMALL LIGATURE FL\npdfDocEncodingToUnicode[0x95] = toCharCode('\\u0141'); // LATIN CAPITAL LETTER L WITH STROKE\npdfDocEncodingToUnicode[0x96] = toCharCode('\\u0152'); // LATIN CAPITAL LIGATURE OE\npdfDocEncodingToUnicode[0x97] = toCharCode('\\u0160'); // LATIN CAPITAL LETTER S WITH CARON\npdfDocEncodingToUnicode[0x98] = toCharCode('\\u0178'); // LATIN CAPITAL LETTER Y WITH DIAERESIS\npdfDocEncodingToUnicode[0x99] = toCharCode('\\u017D'); // LATIN CAPITAL LETTER Z WITH CARON\npdfDocEncodingToUnicode[0x9a] = toCharCode('\\u0131'); // LATIN SMALL LETTER DOTLESS I\npdfDocEncodingToUnicode[0x9b] = toCharCode('\\u0142'); // LATIN SMALL LETTER L WITH STROKE\npdfDocEncodingToUnicode[0x9c] = toCharCode('\\u0153'); // LATIN SMALL LIGATURE OE\npdfDocEncodingToUnicode[0x9d] = toCharCode('\\u0161'); // LATIN SMALL LETTER S WITH CARON\npdfDocEncodingToUnicode[0x9e] = toCharCode('\\u017E'); // LATIN SMALL LETTER Z WITH CARON\npdfDocEncodingToUnicode[0x9f] = toCharCode('\\uFFFD'); // REPLACEMENT CHARACTER (box with questionmark)\npdfDocEncodingToUnicode[0xa0] = toCharCode('\\u20AC'); // EURO SIGN\npdfDocEncodingToUnicode[0xad] = toCharCode('\\uFFFD'); // REPLACEMENT CHARACTER (box with questionmark)\n/**\n * Decode a byte array into a string using PDFDocEncoding.\n *\n * @param bytes a byte array (decimal representation) containing a string\n *              encoded with PDFDocEncoding.\n */\nexport var pdfDocEncodingDecode = function (bytes) {\n    var codePoints = new Array(bytes.length);\n    for (var idx = 0, len = bytes.length; idx < len; idx++) {\n        codePoints[idx] = pdfDocEncodingToUnicode[bytes[idx]];\n    }\n    return String.fromCodePoint.apply(String, codePoints);\n};\n//# sourceMappingURL=pdfDocEncoding.js.map","import { decodeFromBase64DataUri } from \"./base64\";\nimport { charFromCode } from \"./strings\";\nexport var last = function (array) { return array[array.length - 1]; };\n// export const dropLast = <T>(array: T[]): T[] =>\n// array.slice(0, array.length - 1);\nexport var typedArrayFor = function (value) {\n    if (value instanceof Uint8Array)\n        return value;\n    var length = value.length;\n    var typedArray = new Uint8Array(length);\n    for (var idx = 0; idx < length; idx++) {\n        typedArray[idx] = value.charCodeAt(idx);\n    }\n    return typedArray;\n};\nexport var mergeIntoTypedArray = function () {\n    var arrays = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        arrays[_i] = arguments[_i];\n    }\n    var arrayCount = arrays.length;\n    var typedArrays = [];\n    for (var idx = 0; idx < arrayCount; idx++) {\n        var element = arrays[idx];\n        typedArrays[idx] =\n            element instanceof Uint8Array ? element : typedArrayFor(element);\n    }\n    var totalSize = 0;\n    for (var idx = 0; idx < arrayCount; idx++) {\n        totalSize += arrays[idx].length;\n    }\n    var merged = new Uint8Array(totalSize);\n    var offset = 0;\n    for (var arrIdx = 0; arrIdx < arrayCount; arrIdx++) {\n        var arr = typedArrays[arrIdx];\n        for (var byteIdx = 0, arrLen = arr.length; byteIdx < arrLen; byteIdx++) {\n            merged[offset++] = arr[byteIdx];\n        }\n    }\n    return merged;\n};\nexport var mergeUint8Arrays = function (arrays) {\n    var totalSize = 0;\n    for (var idx = 0, len = arrays.length; idx < len; idx++) {\n        totalSize += arrays[idx].length;\n    }\n    var mergedBuffer = new Uint8Array(totalSize);\n    var offset = 0;\n    for (var idx = 0, len = arrays.length; idx < len; idx++) {\n        var array = arrays[idx];\n        mergedBuffer.set(array, offset);\n        offset += array.length;\n    }\n    return mergedBuffer;\n};\nexport var arrayAsString = function (array) {\n    var str = '';\n    for (var idx = 0, len = array.length; idx < len; idx++) {\n        str += charFromCode(array[idx]);\n    }\n    return str;\n};\nexport var byAscendingId = function (a, b) { return a.id - b.id; };\nexport var sortedUniq = function (array, indexer) {\n    var uniq = [];\n    for (var idx = 0, len = array.length; idx < len; idx++) {\n        var curr = array[idx];\n        var prev = array[idx - 1];\n        if (idx === 0 || indexer(curr) !== indexer(prev)) {\n            uniq.push(curr);\n        }\n    }\n    return uniq;\n};\n// Arrays and TypedArrays in JS both have .reverse() methods, which would seem\n// to negate the need for this function. However, not all runtimes support this\n// method (e.g. React Native). This function compensates for that fact.\nexport var reverseArray = function (array) {\n    var arrayLen = array.length;\n    for (var idx = 0, len = Math.floor(arrayLen / 2); idx < len; idx++) {\n        var leftIdx = idx;\n        var rightIdx = arrayLen - idx - 1;\n        var temp = array[idx];\n        array[leftIdx] = array[rightIdx];\n        array[rightIdx] = temp;\n    }\n    return array;\n};\nexport var sum = function (array) {\n    var total = 0;\n    for (var idx = 0, len = array.length; idx < len; idx++) {\n        total += array[idx];\n    }\n    return total;\n};\nexport var range = function (start, end) {\n    var arr = new Array(end - start);\n    for (var idx = 0, len = arr.length; idx < len; idx++) {\n        arr[idx] = start + idx;\n    }\n    return arr;\n};\nexport var pluckIndices = function (arr, indices) {\n    var plucked = new Array(indices.length);\n    for (var idx = 0, len = indices.length; idx < len; idx++) {\n        plucked[idx] = arr[indices[idx]];\n    }\n    return plucked;\n};\nexport var canBeConvertedToUint8Array = function (input) {\n    return input instanceof Uint8Array ||\n        input instanceof ArrayBuffer ||\n        typeof input === 'string';\n};\nexport var toUint8Array = function (input) {\n    if (typeof input === 'string') {\n        return decodeFromBase64DataUri(input);\n    }\n    else if (input instanceof ArrayBuffer) {\n        return new Uint8Array(input);\n    }\n    else if (input instanceof Uint8Array) {\n        return input;\n    }\n    else {\n        throw new TypeError('`input` must be one of `string | ArrayBuffer | Uint8Array`');\n    }\n};\n//# sourceMappingURL=arrays.js.map","/**\n * Returns a Promise that resolves after at least one tick of the\n * Macro Task Queue occurs.\n */\nexport var waitForTick = function () {\n    return new Promise(function (resolve) {\n        setTimeout(function () { return resolve(); }, 0);\n    });\n};\n//# sourceMappingURL=async.js.map","// tslint:disable radix\n/**\n * Converts a number to its string representation in decimal. This function\n * differs from simply converting a number to a string with `.toString()`\n * because this function's output string will **not** contain exponential\n * notation.\n *\n * Credit: https://stackoverflow.com/a/46545519\n */\nexport var numberToString = function (num) {\n    var numStr = String(num);\n    if (Math.abs(num) < 1.0) {\n        var e = parseInt(num.toString().split('e-')[1]);\n        if (e) {\n            var negative = num < 0;\n            if (negative)\n                num *= -1;\n            num *= Math.pow(10, e - 1);\n            numStr = '0.' + new Array(e).join('0') + num.toString().substring(2);\n            if (negative)\n                numStr = '-' + numStr;\n        }\n    }\n    else {\n        var e = parseInt(num.toString().split('+')[1]);\n        if (e > 20) {\n            e -= 20;\n            num /= Math.pow(10, e);\n            numStr = num.toString() + new Array(e + 1).join('0');\n        }\n    }\n    return numStr;\n};\nexport var sizeInBytes = function (n) { return Math.ceil(n.toString(2).length / 8); };\n/**\n * Converts a number into its constituent bytes and returns them as\n * a number[].\n *\n * Returns most significant byte as first element in array. It may be necessary\n * to call .reverse() to get the bits in the desired order.\n *\n * Example:\n *   bytesFor(0x02A41E) => [ 0b10, 0b10100100, 0b11110 ]\n *\n * Credit for algorithm: https://stackoverflow.com/a/1936865\n */\nexport var bytesFor = function (n) {\n    var bytes = new Uint8Array(sizeInBytes(n));\n    for (var i = 1; i <= bytes.length; i++) {\n        bytes[i - 1] = n >> ((bytes.length - i) * 8);\n    }\n    return bytes;\n};\n//# sourceMappingURL=numbers.js.map","export var error = function (msg) {\n    throw new Error(msg);\n};\n//# sourceMappingURL=errors.js.map","import { FontNames } from '@pdf-lib/standard-fonts';\nexport var values = function (obj) { return Object.keys(obj).map(function (k) { return obj[k]; }); };\nexport var StandardFontValues = values(FontNames);\nexport var isStandardFont = function (input) {\n    return StandardFontValues.includes(input);\n};\nexport var rectanglesAreEqual = function (a, b) { return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; };\n//# sourceMappingURL=objects.js.map","/* tslint:disable:ban-types */\nimport { values as objectValues } from \"./objects\";\nexport var backtick = function (val) { return \"`\" + val + \"`\"; };\nexport var singleQuote = function (val) { return \"'\" + val + \"'\"; };\n// prettier-ignore\nvar formatValue = function (value) {\n    var type = typeof value;\n    if (type === 'string')\n        return singleQuote(value);\n    else if (type === 'undefined')\n        return backtick(value);\n    else\n        return value;\n};\nexport var createValueErrorMsg = function (value, valueName, values) {\n    var allowedValues = new Array(values.length);\n    for (var idx = 0, len = values.length; idx < len; idx++) {\n        var v = values[idx];\n        allowedValues[idx] = formatValue(v);\n    }\n    var joinedValues = allowedValues.join(' or ');\n    // prettier-ignore\n    return backtick(valueName) + \" must be one of \" + joinedValues + \", but was actually \" + formatValue(value);\n};\nexport var assertIsOneOf = function (value, valueName, allowedValues) {\n    if (!Array.isArray(allowedValues)) {\n        allowedValues = objectValues(allowedValues);\n    }\n    for (var idx = 0, len = allowedValues.length; idx < len; idx++) {\n        if (value === allowedValues[idx])\n            return;\n    }\n    throw new TypeError(createValueErrorMsg(value, valueName, allowedValues));\n};\nexport var assertIsOneOfOrUndefined = function (value, valueName, allowedValues) {\n    if (!Array.isArray(allowedValues)) {\n        allowedValues = objectValues(allowedValues);\n    }\n    assertIsOneOf(value, valueName, allowedValues.concat(undefined));\n};\nexport var assertIsSubset = function (values, valueName, allowedValues) {\n    if (!Array.isArray(allowedValues)) {\n        allowedValues = objectValues(allowedValues);\n    }\n    for (var idx = 0, len = values.length; idx < len; idx++) {\n        assertIsOneOf(values[idx], valueName, allowedValues);\n    }\n};\nexport var getType = function (val) {\n    if (val === null)\n        return 'null';\n    if (val === undefined)\n        return 'undefined';\n    if (typeof val === 'string')\n        return 'string';\n    if (isNaN(val))\n        return 'NaN';\n    if (typeof val === 'number')\n        return 'number';\n    if (typeof val === 'boolean')\n        return 'boolean';\n    if (typeof val === 'symbol')\n        return 'symbol';\n    if (typeof val === 'bigint')\n        return 'bigint';\n    if (val.constructor && val.constructor.name)\n        return val.constructor.name;\n    if (val.name)\n        return val.name;\n    if (val.constructor)\n        return String(val.constructor);\n    return String(val);\n};\nexport var isType = function (value, type) {\n    if (type === 'null')\n        return value === null;\n    if (type === 'undefined')\n        return value === undefined;\n    if (type === 'string')\n        return typeof value === 'string';\n    if (type === 'number')\n        return typeof value === 'number' && !isNaN(value);\n    if (type === 'boolean')\n        return typeof value === 'boolean';\n    if (type === 'symbol')\n        return typeof value === 'symbol';\n    if (type === 'bigint')\n        return typeof value === 'bigint';\n    if (type === Date)\n        return value instanceof Date;\n    if (type === Array)\n        return value instanceof Array;\n    if (type === Uint8Array)\n        return value instanceof Uint8Array;\n    if (type === ArrayBuffer)\n        return value instanceof ArrayBuffer;\n    if (type === Function)\n        return value instanceof Function;\n    return value instanceof type[0];\n};\nexport var createTypeErrorMsg = function (value, valueName, types) {\n    var allowedTypes = new Array(types.length);\n    for (var idx = 0, len = types.length; idx < len; idx++) {\n        var type = types[idx];\n        if (type === 'null')\n            allowedTypes[idx] = backtick('null');\n        if (type === 'undefined')\n            allowedTypes[idx] = backtick('undefined');\n        if (type === 'string')\n            allowedTypes[idx] = backtick('string');\n        else if (type === 'number')\n            allowedTypes[idx] = backtick('number');\n        else if (type === 'boolean')\n            allowedTypes[idx] = backtick('boolean');\n        else if (type === 'symbol')\n            allowedTypes[idx] = backtick('symbol');\n        else if (type === 'bigint')\n            allowedTypes[idx] = backtick('bigint');\n        else if (type === Array)\n            allowedTypes[idx] = backtick('Array');\n        else if (type === Uint8Array)\n            allowedTypes[idx] = backtick('Uint8Array');\n        else if (type === ArrayBuffer)\n            allowedTypes[idx] = backtick('ArrayBuffer');\n        else\n            allowedTypes[idx] = backtick(type[1]);\n    }\n    var joinedTypes = allowedTypes.join(' or ');\n    // prettier-ignore\n    return backtick(valueName) + \" must be of type \" + joinedTypes + \", but was actually of type \" + backtick(getType(value));\n};\nexport var assertIs = function (value, valueName, types) {\n    for (var idx = 0, len = types.length; idx < len; idx++) {\n        if (isType(value, types[idx]))\n            return;\n    }\n    throw new TypeError(createTypeErrorMsg(value, valueName, types));\n};\nexport var assertOrUndefined = function (value, valueName, types) {\n    assertIs(value, valueName, types.concat('undefined'));\n};\nexport var assertEachIs = function (values, valueName, types) {\n    for (var idx = 0, len = values.length; idx < len; idx++) {\n        assertIs(values[idx], valueName, types);\n    }\n};\nexport var assertRange = function (value, valueName, min, max) {\n    assertIs(value, valueName, ['number']);\n    assertIs(min, 'min', ['number']);\n    assertIs(max, 'max', ['number']);\n    max = Math.max(min, max);\n    if (value < min || value > max) {\n        // prettier-ignore\n        throw new Error(backtick(valueName) + \" must be at least \" + min + \" and at most \" + max + \", but was actually \" + value);\n    }\n};\nexport var assertRangeOrUndefined = function (value, valueName, min, max) {\n    assertIs(value, valueName, ['number', 'undefined']);\n    if (typeof value === 'number')\n        assertRange(value, valueName, min, max);\n};\nexport var assertMultiple = function (value, valueName, multiplier) {\n    assertIs(value, valueName, ['number']);\n    if (value % multiplier !== 0) {\n        // prettier-ignore\n        throw new Error(backtick(valueName) + \" must be a multiple of \" + multiplier + \", but was actually \" + value);\n    }\n};\nexport var assertInteger = function (value, valueName) {\n    if (!Number.isInteger(value)) {\n        throw new Error(backtick(valueName) + \" must be an integer, but was actually \" + value);\n    }\n};\nexport var assertPositive = function (value, valueName) {\n    if (![1, 0].includes(Math.sign(value))) {\n        // prettier-ignore\n        throw new Error(backtick(valueName) + \" must be a positive number or 0, but was actually \" + value);\n    }\n};\n//# sourceMappingURL=validators.js.map","var Cache = /** @class */ (function () {\n    function Cache(populate) {\n        this.populate = populate;\n        this.value = undefined;\n    }\n    Cache.prototype.getValue = function () {\n        return this.value;\n    };\n    Cache.prototype.access = function () {\n        if (!this.value)\n            this.value = this.populate();\n        return this.value;\n    };\n    Cache.prototype.invalidate = function () {\n        this.value = undefined;\n    };\n    Cache.populatedBy = function (populate) { return new Cache(populate); };\n    return Cache;\n}());\nexport default Cache;\n//# sourceMappingURL=Cache.js.map","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\n\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\n\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../FieldTextField';\n\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { useTranslation } from 'react-i18next';\ninterface IDefaultTextFilterRendererProps {\n  filterConfig: IMap<TableColumnConfig>;\n  index: number;\n}\n\nconst DefaultTextFilterRenderer: React.FC<IDefaultTextFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)} (=)\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          name={`${fieldNamePrefix}.eq`}\n          props={{\n            inputProps: {\n              type: 'text',\n            },\n            formControlProps: {\n              fullWidth: true\n            }\n          }}\n          component={FieldTextField}\n        />\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default DefaultTextFilterRenderer;\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\n\nimport validate from './validate';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\n\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../FieldTextField';\nimport { TableColumnConfig } from '../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { useTranslation } from 'react-i18next';\n\ninterface ITextFilterRenderer {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n}\n\nconst TextFilterRenderer: React.FC<ITextFilterRenderer> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          validate={validate(filterConfig)}\n          name={`${fieldNamePrefix}.like`}\n          props={{\n            inputProps: {\n              type: 'text',\n            },\n            formControlProps: {\n              fullWidth: true\n            }\n          }}\n          component={FieldTextField}\n        />\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default TextFilterRenderer;\n","import _ from 'lodash';\n\nimport { defaultConfig } from '../DateFilterRenderer/validate';\nimport { Map } from 'immutable';\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { Validator } from 'redux-form';\n\nimport {\n  parseDate,\n} from 'ats-utils/src';\n\nlet cachedValidateStart = Map<any, Validator>();\n\nexport const validateStart = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidateStart.has(validatorKey)) {\n    cachedValidateStart = cachedValidateStart.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label');\n\n        const parsedDate = parseDate(value, false);\n\n        if (parsedDate != null) {\n          // path to the filter key value namespace - access other related fields here\n          const keyPath = _.toPath(name).slice(0, -1);\n\n          const endDate = allValues.getIn([...keyPath, 'lte']);\n          const parsedEndDate = parseDate(endDate, false);\n\n          if (parsedEndDate != null && parsedEndDate < parsedDate) {\n            return `Start ${label} cannot be later than end ${label}`;\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidateStart.get(validatorKey);\n};\n\nlet cachedValidateEnd = Map<string, Validator>();\n\nexport const validateEnd = (_filterConfig) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidateEnd.has(validatorKey)) {\n    cachedValidateEnd = cachedValidateEnd.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label');\n\n        const parsedDate = parseDate(value, false);\n\n        if (parsedDate != null) {\n          // path to the filter key value namespace - access other related fields here\n          const keyPath = _.toPath(name).slice(0, -1);\n\n          const startDate = allValues.getIn([...keyPath, 'gte']);\n          const parsedStartDate = parseDate(startDate, false);\n\n          if (parsedStartDate != null && parsedStartDate > parsedDate) {\n            return `End ${label} cannot be earlier than start ${label}`;\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidateEnd.get(validatorKey);\n};\n\nexport default {\n  validateStart,\n  validateEnd,\n};\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport {\n  validateStart,\n  validateEnd,\n} from './validate';\nimport {\n  validate,\n} from '../DateFilterRenderer/validate';\nimport { Field, getFormValues } from 'redux-form/immutable';\nimport {\n  BaseFieldProps, change, touch\n} from 'redux-form';\nimport {\n  Typography,\n  Grid,\n  InputAdornment,\n  MenuItem\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport FieldDatePickerV2 from '../../FieldDatePickerV2';\nimport { IFieldDatePickerV2CustomProps } from '../../FieldDatePickerV2/types';\nimport {\n  isValidMomentDate\n} from '../../../validators';\nimport FieldSelect, { IFieldSelectComponentProps } from '../../FieldSelect';\nimport { useDispatch, useSelector } from 'react-redux';\nimport moment from 'moment';\nimport { useTranslation } from 'react-i18next';\nimport { DATE_INTERVAL } from '../../../constants';\n\ninterface IDateRangeFilterRendererProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  formId?: string;\n}\n\nconst DateRangeFilterRenderer: React.FC<IDateRangeFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n    formId\n  } = props;\n\n  const dispatch = useDispatch();\n  const {t} = useTranslation('translations');\n  const formValues = useSelector(getFormValues(formId)) as Map<string, any>;\n\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n  const interval = formValues?.get('filters')?.getIn([index, key, 'interval']);\n\n  const handleIntervalChange = (value) => {\n    switch (value) {\n      case DATE_INTERVAL.TODAY:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().startOf('day').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().endOf('day').toISOString()));\n        break;\n      case DATE_INTERVAL.YESTERDAY:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().subtract(1, 'days').startOf('day').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().subtract(1, 'days').endOf('day').toISOString()));\n        break;\n      case DATE_INTERVAL.THIS_WEEK:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().startOf('week').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().endOf('week').toISOString()));\n        break;\n      case DATE_INTERVAL.LAST_WEEK:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().subtract(7, 'days').startOf('week').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().subtract(7, 'days').endOf('week').toISOString()));\n        break;\n      case DATE_INTERVAL.THIS_MONTH:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().startOf('month').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().endOf('month').toISOString()));\n        break;\n      case DATE_INTERVAL.LAST_MONTH:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().subtract(1, 'months').startOf('month').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().subtract(1, 'months').endOf('month').toISOString()));\n        break;\n      case DATE_INTERVAL.THIS_QUARTER:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().startOf('quarter').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().endOf('quarter').toISOString()));\n        break;\n      case DATE_INTERVAL.LAST_QUARTER:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().subtract(1, 'quarters').startOf('quarter').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().subtract(1, 'quarters').endOf('quarter').toISOString()));\n        break;\n      case DATE_INTERVAL.THIS_YEAR:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().startOf('year').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().endOf('year').toISOString()));\n        break;\n      case DATE_INTERVAL.LAST_YEAR:\n        dispatch(change(formId, `filters.${fieldNamePrefix}.gte`, moment().subtract(1, 'years').startOf('year').toISOString()));\n        dispatch(change(formId, `filters.${fieldNamePrefix}.lte`, moment().subtract(1, 'years').endOf('year').toISOString()));\n        break;\n      default:\n        break;\n    }\n  };\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n      style={{ padding: '8px 0' }}\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldSelectComponentProps>>\n              name={`${fieldNamePrefix}.interval`}\n              component={FieldSelect}\n              props={{\n                label: t('Dashboard.period.period'),\n                inputProps: {\n                  onChange: handleIntervalChange,\n                },\n                formControlProps: {\n                  fullWidth: true,\n                  style: {\n                    marginTop: -16\n                  }\n                },\n              }}\n            >\n              <MenuItem value={DATE_INTERVAL.CUSTOM}>{t('Dashboard.period.custom')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.TODAY}>{t('Dashboard.period.today')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.YESTERDAY}>{t('Dashboard.period.yesterday')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.THIS_WEEK}>{t('Dashboard.period.thisWeek')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.LAST_WEEK}>{t('Dashboard.period.lastWeek')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.THIS_MONTH}>{t('Dashboard.period.thisMonth')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.LAST_MONTH}>{t('Dashboard.period.lastMonth')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.THIS_QUARTER}>{t('Dashboard.period.thisQuarter')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.LAST_QUARTER}>{t('Dashboard.period.lastQuarter')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.THIS_YEAR}>{t('Dashboard.period.thisYear')}</MenuItem>\n              <MenuItem value={DATE_INTERVAL.LAST_YEAR}>{t('Dashboard.period.lastYear')}</MenuItem>\n            </Field>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n              validate={[isValidMomentDate, validate(filterConfig), validateStart(filterConfig)]}\n              name={`${fieldNamePrefix}.gte`}\n              props={{\n                timeOfDay: 'start',\n                // onChangeCB: () => dispatch(change(formId, `filters.${fieldNamePrefix}.interval`, null)),\n                onChangeCB: () => dispatch(touch(formId, `filters.${fieldNamePrefix}.gte`)),\n                keyboardDatePickerProps: {\n                  id: 'gte',\n                  clearable: false,\n                  InputProps: {\n                    startAdornment: <InputAdornment position='start'>{t('Dashboard.period.from')}</InputAdornment>,\n                    disabled: Boolean(interval) && interval !== DATE_INTERVAL.CUSTOM\n                  }\n                },\n                formControlProps: {\n                  fullWidth: true\n                },\n              }}\n              component={FieldDatePickerV2}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n              validate={[isValidMomentDate, validate(filterConfig), validateEnd(filterConfig)]}\n              name={`${fieldNamePrefix}.lte`}\n              props={{\n                timeOfDay: 'end',\n                // onChangeCB: () => dispatch(change(formId, `filters.${fieldNamePrefix}.interval`, null)),\n                onChangeCB: () => dispatch(touch(formId, `filters.${fieldNamePrefix}.lte`)),\n                keyboardDatePickerProps: {\n                  id: 'lte',\n                  clearable: false,\n                  InputProps: {\n                    startAdornment: <InputAdornment position='start'>{t('Dashboard.period.to')}</InputAdornment>,\n                    disabled: Boolean(interval) && interval !== DATE_INTERVAL.CUSTOM\n                  }\n                },\n                formControlProps: {\n                  fullWidth: true\n                },\n              }}\n              component={FieldDatePickerV2}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default DateRangeFilterRenderer;\n","/* eslint no-unused-vars:0 */\n// WIP\nimport * as React from 'react';\nimport validate from './validate';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { IFieldDatePickerV2CustomProps } from '../../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../FieldDatePickerV2';\nimport { useTranslation } from 'react-i18next';\ninterface IDateFilterRendererProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n}\n\nconst DateFilterRenderer: React.FC<IDateFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n              validate={validate(filterConfig)}\n              name={`${fieldNamePrefix}.like`}\n              props={{\n                keyboardDatePickerProps: {\n                  id: 'like'\n                },\n                timeOfDay: 'end',\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n              component={FieldDatePickerV2}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default DateFilterRenderer;\n","import * as React from 'react';\nimport { Map, List, fromJS, is } from 'immutable';\nimport _ from 'lodash';\n\nimport {\n  BaseFieldProps, InjectedFormProps, change,\n} from 'redux-form';\n\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n  Theme,\n} from '@material-ui/core';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { TableColumnConfig, ListItem, Project } from '../../../models';\nimport { required, isNotEmpty } from '../../../validators';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../FieldAutoSuggest';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectProvinces, makeSelectCities, makeSelectCountries } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetCityAction, GetProvinceAction, GetCountryAdminDivisionAction } from '../../../modules/ProjectLocationModule/actions';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { WithStyles, withStyles, StyleRules } from '@material-ui/styles';\n\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\ninterface ILocationFilterRendererComponentProps {\n  data: Map<string, any>;\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  formId: string;\n  change?(...args: any[]): any;\n}\n\ninterface ILocationFilterRendererType extends ILocationFilterRendererComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {}\n});\n\ntype LocationFilterRendererType = ILocationFilterRendererType & WithTranslation & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass LocationFilterRenderer extends React.PureComponent<LocationFilterRendererType, {}> {\n  public componentDidMount() {\n    const {\n      getCountries,\n      formValues,\n      index,\n    } = this.props;\n\n    getCountries();\n    if (formValues != null) {\n      const countryId = formValues.getIn(['filters', index, 'location', 'country', 'id', 'eq']);\n      if (countryId != null) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['filters', index, 'location', 'province', 'id', 'eq']);\n      if (provinceId != null) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n  }\n\n  public componentDidUpdate(prevProps) {\n    const {\n      initialValues,\n    } = this.props;\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n  }\n\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      index,\n      formId,\n    } = this.props;\n\n    const fieldNamePrefix = `[${index}]`;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(_countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.country.id.eq`, _countryId));\n    } else {\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.country.id.eq`, null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      formId,\n      index,\n      formValues,\n    } = this.props;\n\n    const fieldNamePrefix = `[${index}]`;\n\n\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.province.id.eq`, provinceId));\n    } else {\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.province.id.eq`, null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n      index,\n      formId,\n    } = this.props;\n\n    const fieldNamePrefix = `[${index}]`;\n\n    if (cityId != null) {\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.city.id.eq`, cityId));\n    } else {\n      dispatch(change(formId, `filters.${fieldNamePrefix}.location.city.id.eq`, null));\n    }\n  }\n\n  public render() {\n    const {\n      index,\n      countries,\n      provinces,\n      cities,\n      filterConfig,\n      t,\n    } = this.props;\n\n    const label = filterConfig.get('label');\n    const fieldNamePrefix = `[${index}]`;\n\n    return (\n      <Grid\n        container={true}\n        spacing={3}\n        alignItems='center'\n      >\n        <Grid item={true} xs={12} sm={3}>\n          <Typography align='right' variant='subtitle1'>\n            {t(label)}\n          </Typography>\n        </Grid>\n        <Grid item={true} xs={12} sm={9}>\n          <Grid\n            container={true}\n            spacing={2}\n            direction='row'\n            alignItems='center'\n            wrap='nowrap'\n          >\n            <Grid item={true} xs={6}>\n              <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                props={{\n                  label: t('Dashboard.widgetFilters.country'),\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  autosuggestProps: {\n                    directMode: false,\n                    data: countries && countries.toJS(),\n                    renderMissingData: (value: any) => {\n                      return `Loading: ${value}`;\n                    },\n                    shouldRenderSuggestions: (value: string = '') => {\n                      return true;\n                    }\n                  },\n                  inputProps: {\n                    onChange: this.selectCountry,\n                    type: 'text',\n                    name: Date.now().toString(),\n                    autoComplete: 'no',\n                  },\n                }}\n                name={`${fieldNamePrefix}.location.country.id.eq`}\n                component={FieldAutoSuggest}\n              />\n            </Grid>\n            <Grid item={true} xs={6}>\n              <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                props={{\n                  label: t('Dashboard.widgetFilters.stateProvince'),\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  autosuggestProps: {\n                    directMode: false,\n                    data: provinces && provinces.toJS(),\n                    renderMissingData: (value: any) => `Loading: ${value}`,\n                    shouldRenderSuggestions: (value: string = '') => {\n                      return true;\n                    }\n                  },\n                  inputProps: {\n                    onChange: this.selectProvince,\n                    type: 'text',\n                    name: Date.now().toString(),\n                    autoComplete: 'no',\n                  },\n                }}\n                name={`${fieldNamePrefix}.location.province.id.eq`}\n                component={FieldAutoSuggest}\n              />\n            </Grid >\n          </Grid>\n        </Grid>\n        <Grid item={true} xs={12} sm={3}/>\n        <Grid item={true} xs={12} sm={9}>\n          <Grid\n            container={true}\n            spacing={2}\n            direction='row'\n            alignItems='center'\n            wrap='nowrap'\n          >\n            <Grid item={true} xs={true}>\n              <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                props={{\n                  label: t('Dashboard.widgetFilters.city'),\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  autosuggestProps: {\n                    // highlightFirstSuggestion: true,\n                    directMode: false,\n                    data: cities && cities.toJS(),\n                    renderMissingData: (value: any) => `Loading: ${value}`,\n                    shouldRenderSuggestions: (value: string = '') => {\n                      return value.length !== 0;\n                    }\n                  },\n                  inputProps: {\n                    onChange: this.selectCity,\n                    type: 'text',\n                    name: Date.now().toString(),\n                    autoComplete: 'no',\n                  },\n                }}\n                name={`${fieldNamePrefix}.location.city.id.eq`}\n                component={FieldAutoSuggest}\n              />\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: ILocationFilterRendererComponentProps) => {\n  const formId = ownProps.formId;\n  return {\n    formId,\n    ...createStructuredSelector({\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      formValues: getFormValues(formId),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<ILocationFilterRendererComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(LocationFilterRenderer);\n","import {\n  Map\n} from 'immutable';\n\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { Validator } from 'redux-form';\n\nexport const defaultConfig = Map({\n  label: 'Value'\n});\n\nlet cachedValidate = Map<any, Validator>();\n\nexport const validate = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidate.has(validatorKey)) {\n    cachedValidate = cachedValidate.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label') || 'Value';\n\n        if (config.get('required') && (value === '' || value == null)) {\n          return `${label} is required`;\n        }\n        return null;\n      }\n    );\n  }\n  return cachedValidate.get(validatorKey);\n};\n\nexport default validate;\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport { Map, List, fromJS } from 'immutable';\nimport _ from 'lodash';\n\nimport {\n  BaseFieldProps, change,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\n\nimport DataFieldSelect, { IDataFieldSelectComponentProps } from '../../../containers/DataFieldSelect';\n\nimport validate from '../SelectFilterRenderer/validate';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nconst BuildingClassDataProviderConfig = fromJS({\n  payload: {\n    payload: {\n      service: 'list',\n      endpoint: 'getBuildingClass',\n    },\n    resultKey: ['data', 'payload', 'list', 'listItems'],\n  },\n});\n\nconst buildingClassIdKey = 'id';\nconst BuildingTypeDataProviderConfig = fromJS({\n  parameters: [buildingClassIdKey],\n  resultKey: ['data', 'payload', 'list'],\n  patterns: {\n    [buildingClassIdKey]: {\n      payload: {\n        payload: {\n          service: 'list',\n          endpoint: 'getBuildingType',\n        },\n        resultKey: ['data', 'payload', 'list', 'listItems'],\n      },\n    },\n  }\n});\n\ninterface IBuildingFilterRendererComponentProps {\n  data: Map<string, any>;\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  formId: string;\n}\n\ninterface IBuildingFilterRendererProps extends IBuildingFilterRendererComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype IBuildingFilterRendererType = IBuildingFilterRendererProps & WithTranslation;\n\nclass BuildingFilterRenderer extends React.PureComponent<IBuildingFilterRendererType, {}> {\n\n  public onChange = (type) => {\n    const {\n      index,\n      dispatch,\n      formId,\n    } = this.props;\n\n    const fieldNamePrefix = `[${index}]`;\n\n    if (type != null) {\n      switch (type) {\n        case 'buildingClasses':\n          dispatch(change(formId, `filters.${fieldNamePrefix}.building.buildingTypes.id.eq`, null));\n          break;\n        case 'buildingTypes':\n          break;\n        default:\n          break;\n      }\n    }\n  }\n\n  public render() {\n\n    const {\n      filterConfig,  // current cell value\n      index,\n      data,\n      t,\n    } = this.props;\n\n    const component = filterConfig.get('component');\n    const key = filterConfig.get('key');\n    const label = filterConfig.get('label');\n    const filterValue = filterConfig.get('filterValue', 'value');\n    const fieldNamePrefix = `[${index}]`;\n\n    const componentData = filterConfig.get('component_data', Map());\n\n    const nullable = componentData.get('nullable');\n    const multiple = componentData.get('multiple');\n    // const options = componentData.get('options') || List();\n\n    const params = _.pickBy({\n      [buildingClassIdKey]: data.getIn(['building', 'buildingClasses', 'id', 'eq']),\n      buildingTypes: data.getIn(['building', 'buildingTypes', 'id', 'eq']),\n    }, (val) => val != null);\n\n    return (\n      <Grid\n        container={true}\n        spacing={3}\n        alignItems='center'\n      >\n        <Grid item={true} xs={12} sm={3}>\n          <Typography align='right' variant='subtitle1'>\n            {t(label)}\n          </Typography>\n        </Grid>\n        <Grid item={true} xs={12} sm={9}>\n          <Grid\n            container={true}\n            spacing={2}\n            direction='row'\n            alignItems='center'\n            wrap='nowrap'\n          >\n            <Grid item={true} xs={true}>\n              <Field<BaseFieldProps<IDataFieldSelectComponentProps>>\n                name={`${fieldNamePrefix}.building.buildingClasses.id.eq`}\n                validate={validate(filterConfig)}\n                component={DataFieldSelect}\n                onChange={() => this.onChange('buildingClasses')}\n                props={{\n                  label: t('Dashboard.widgetFilters.buildingClass'),\n                  inputProps: {\n                    id: 'like',\n                  },\n                  filterValue,\n                  dataProviderProps: BuildingClassDataProviderConfig,\n                  parameters: params,\n                  formControlProps: {\n                    fullWidth: true,\n                  }\n                }}\n              >\n                {nullable && <MenuItem key='' value={null}>{t(nullable)}</MenuItem>}\n              </Field>\n            </Grid>\n            <Grid item={true} xs={true}>\n              <Field<BaseFieldProps<IDataFieldSelectComponentProps>>\n                name={`${fieldNamePrefix}.building.buildingTypes.id.eq`}\n                validate={validate(filterConfig)}\n                component={DataFieldSelect}\n                props={{\n                  label: t('Dashboard.widgetFilters.buildingType'),\n                  inputProps: {\n                    id: 'like',\n                  },\n                  filterValue,\n                  dataProviderProps: BuildingTypeDataProviderConfig,\n                  parameters: params,\n                  formControlProps: {\n                    fullWidth: true,\n                  }\n                }}\n              >\n                {nullable && <MenuItem key='' value={null}>{t(nullable)}</MenuItem>}\n              </Field>\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IBuildingFilterRendererComponentProps>> (\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps)\n)(BuildingFilterRenderer);\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\n\nimport validate from './validate';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\n\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../FieldTextField';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { useTranslation } from 'react-i18next';\n\ninterface IAmountFilterRendererProps {\n  filterConfig: IMap<TableColumnConfig>;\n  index: number;\n}\n\nconst AmountFilterRenderer: React.FC<IAmountFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          validate={validate(filterConfig)}\n          name={`${fieldNamePrefix}.eq`}\n          props={{\n            inputProps: {\n              type: 'text',\n            },\n            formControlProps: {\n              fullWidth: true\n            }\n          }}\n          component={FieldTextField}\n        />\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default AmountFilterRenderer;\n","import _ from 'lodash';\nimport { Map } from 'immutable';\nimport { defaultConfig } from '../AmountFilterRenderer/validate';\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { Validator } from 'redux-form';\n\nlet cachedValidateStart = Map<any, Validator>();\n\nexport const validateStart = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidateStart.has(validatorKey)) {\n    cachedValidateStart = cachedValidateStart.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label');\n\n        const parsedValue = _.toNumber(value);\n\n        if (value != null && value !== '' && _.isNumber(parsedValue) && !_.isNaN(parsedValue)) {\n          // path to the filter key value namespace - access other related fields here\n          const keyPath = _.toPath(name).slice(0, -1);\n\n          const endValue = allValues.getIn([...keyPath, 'lte']);\n          const parsedEndValue = _.toNumber(endValue);\n\n          if (endValue != null && endValue !== '' && _.isNumber(parsedEndValue) && !_.isNaN(parsedEndValue)) {\n\n            if (parsedEndValue != null && parsedEndValue < parsedValue) {\n              return `Min ${label} cannot be less than max ${label}`;\n            }\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidateStart.get(validatorKey);\n};\n\nlet cachedValidateEnd = Map<any, Validator>();\n\nexport const validateEnd = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidateEnd.has(validatorKey)) {\n    cachedValidateEnd = cachedValidateEnd.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label');\n\n        const parsedValue = _.toNumber(value);\n\n        if (value != null && value !== '' && _.isNumber(parsedValue) && !_.isNaN(parsedValue)) {\n          // path to the filter key value namespace - access other related fields here\n          const keyPath = _.toPath(name).slice(0, -1);\n\n          const startValue = allValues.getIn([...keyPath, 'gte']);\n          const parsedStartValue = _.toNumber(startValue);\n\n          if (startValue != null && startValue !== '' && _.isNumber(parsedStartValue) && !_.isNaN(parsedStartValue)) {\n\n            if (parsedStartValue != null && parsedStartValue > parsedValue) {\n              return `Max ${label} cannot be greater than min ${label}`;\n            }\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidateEnd.get(validatorKey);\n};\n\nexport default {\n  validateStart,\n  validateEnd,\n};\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  InputAdornment,\n} from '@material-ui/core';\n\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../FieldTextField';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\n\nimport validate from '../AmountFilterRenderer/validate';\nimport {\n  validateStart,\n  validateEnd\n} from './validate';\nimport { useTranslation } from 'react-i18next';\n\ninterface IAmountRangeFilterRendererProps {\n  filterConfig: IMap<TableColumnConfig>;\n  index: number;\n}\n\nconst AmountRangeFilterRenderer: React.FC<IAmountRangeFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={6}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              validate={[validate(filterConfig), validateStart(filterConfig)]}\n              name={`${fieldNamePrefix}.gte`}\n              props={{\n                inputProps: {\n                  id: 'gte'\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid item={true} xs={6}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              validate={[validate(filterConfig), validateEnd(filterConfig)]}\n              name={`${fieldNamePrefix}.lte`}\n              props={{\n                inputProps: {\n                  id: 'lte',\n                  startAdornment: <InputAdornment position='start'>{t('Dashboard.period.to')}</InputAdornment>,\n                },\n                formControlProps: {\n                  fullWidth: true\n                },\n              }}\n              component={FieldTextField}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default AmountRangeFilterRenderer;\n","import * as React from 'react';\nimport {\n  makeSelectIdentityObject,\n} from '../../../modules/AtsModule/selectors';\nimport { Map, List, fromJS } from 'immutable';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\nimport DataFieldSelect, { IDataFieldSelectComponentProps } from '../../../containers/DataFieldSelect';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport validate from '../SelectFilterRenderer/validate';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig, Identity } from '../../../models';\nimport { useTranslation } from 'react-i18next';\n\ninterface IDataSelectFilterRendererProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  identity?: IMap<Identity>;\n}\n\nconst DataSelectFilterRenderer: React.FC<IDataSelectFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n    identity,\n  } = props;\n\n  const { t } = useTranslation('translations');\n\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  const componentData = filterConfig.get('component_data', Map());\n\n  const dataProviderProps = componentData.get('data') || Map();\n\n  const nullable = componentData.get('nullable');\n  // const multiple = componentData.get('multiple');\n  const options = componentData.get('options') || List();\n\n  const parameters = Map().merge(identity);\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field<BaseFieldProps<IDataFieldSelectComponentProps>>\n              name={`${fieldNamePrefix}.eq`}\n              validate={validate(filterConfig)}\n              component={DataFieldSelect}\n              props={{\n                inputProps: {\n                  id: '=',\n                  parameters,\n                },\n                dataProviderProps,\n                formControlProps: {\n                  fullWidth: true,\n                }\n              }}\n            >\n              {nullable && <MenuItem key='' value={null}>{t(nullable)}</MenuItem>}\n              {\n                options.map((option, idx) => {\n                  let optionKey = option;\n                  let value = option;\n\n                  if (Map.isMap(option)) {\n                    optionKey = option.get('id');\n                    value = option.get('label');\n                  }\n                  return (<MenuItem key={optionKey} value={optionKey}>{value}</MenuItem>);\n                })\n              }\n            </Field>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  identity: makeSelectIdentityObject()\n});\n\nexport default compose<React.ComponentClass<IDataSelectFilterRendererProps>>(\n  connect(mapStateToProps),\n)(DataSelectFilterRenderer);\n","import * as React from 'react';\nimport {\n  makeSelectIdentityObject,\n} from '../../../modules/AtsModule/selectors';\nimport { Map, List, fromJS } from 'immutable';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\nimport DataFieldSelect, { IDataFieldSelectComponentProps } from '../../../containers/DataFieldSelect';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport validate from '../SelectFilterRenderer/validate';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig, Identity } from '../../../models';\nimport { useTranslation } from 'react-i18next';\n\ninterface IDataSelectFilterRendererProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  identity?: IMap<Identity>;\n}\n\nconst DataSelectFilterRenderer: React.FC<IDataSelectFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n    identity,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n  const filterValue = filterConfig.get('filterValue', 'value');\n  const filterOperand = filterConfig.get('filterOperand', 'like');\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  const dataProviderProps = filterConfig.getIn(['component_data', 'data'], Map());\n\n  const nullable = filterConfig.getIn(['component_data', 'nullable'], Map());\n  // const multiple = componentData.get('multiple');\n  const options = filterConfig.getIn(['component_data', 'options'], List());\n\n  const parameters = Map().merge(identity);\n\n  const multiple = filterOperand === 'in' ? true : false;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field<BaseFieldProps<IDataFieldSelectComponentProps>>\n              name={`${fieldNamePrefix}.${filterOperand}`}\n              validate={validate(filterConfig)}\n              component={DataFieldSelect}\n              props={{\n                inputProps: {\n                  id: '=',\n                  parameters\n                },\n                filterValue,\n                dataProviderProps,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                multiple\n              }}\n            >\n              {nullable && !multiple && <MenuItem key='' value={null}>{t(nullable)}</MenuItem>}\n              {\n                options.map((option, idx) => {\n                  let optionKey = option;\n                  let value = option;\n                  let _label = option;\n\n                  if (Map.isMap(option)) {\n                    optionKey = option.get('id');\n                    value = option.get('label');\n                    _label = option.get('labelPath') ? t(option.get('labelPath')) : option.get('label');\n                  }\n                  return (<MenuItem key={optionKey} value={optionKey}>{_label}</MenuItem>);\n                })\n              }\n            </Field>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  identity: makeSelectIdentityObject()\n});\n\nexport default compose<React.ComponentClass<IDataSelectFilterRendererProps>>(\n  connect(mapStateToProps),\n)(DataSelectFilterRenderer);\n","import * as React from 'react';\nimport {\n  makeSelectIdentityObject,\n} from '../../../modules/AtsModule/selectors';\nimport { Map, List } from 'immutable';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport { IMap, IAction } from 'ats-utils/src';\nimport { TableColumnConfig, Identity, Office, User, ListItem } from '../../../models';\nimport { GetOfficesByFirmIdAction, GetUsersListAction } from '../../../modules/AccountModule/actions';\nimport { Theme } from 'react-select/src/types';\nimport { WithStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport FieldSelect, { IFieldSelectComponentProps } from '../../FieldSelect';\nimport { makeSelectOffices, makeSelectUsers } from '../../../modules/AccountModule/selectors';\n\n\ninterface ITrackedUserAndOfficeSelectRendererComponentProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  getOfficesByFirm: (firmId: number) => void;\n  dispatch: React.Dispatch<IAction>;\n}\n\ninterface ITrackedUserAndOfficeSelectRendererProps extends ITrackedUserAndOfficeSelectRendererComponentProps {\n  identity?: IMap<Identity>;\n  getOfficesByFirm: (firmId: number) => void;\n  getUsersList: () => void;\n  users: List<IMap<ListItem>>;\n  offices: List<IMap<Office>>;\n}\n\ntype TrackedUserAndOfficeSelectRendererType = ITrackedUserAndOfficeSelectRendererProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass TrackedUserAndOfficeSelectRenderer extends React.Component<TrackedUserAndOfficeSelectRendererType, {}> {\n\n  public componentDidMount () {\n    const {\n      identity,\n      getOfficesByFirm,\n      getUsersList,\n    } = this.props;\n\n    const firmId = identity.get('firm_id');\n    getOfficesByFirm(firmId);\n    getUsersList();\n  }\n\n  public render () {\n\n    const {\n      filterConfig,  // current cell value\n      index,\n      offices,\n      users,\n      identity,\n    } = this.props;\n\n    const currentUserId = identity.get('uid');\n    const currentUserOfficeId = identity.get('office_id');\n\n    // BE users have ids that are string... fml x2\n    const filteredUsers = users.filter((user: any) => {\n      // user type has \"hasId\". current user is number. but \"users\" are strings lol. fml right?\n      return user.get('id') !== String(currentUserId);\n    });\n\n    const filteredOffices = offices.filter((office: IMap<Office>) => {\n      return office.get('id') !== currentUserOfficeId;\n    });\n\n    const label = filterConfig.get('label');\n    const componentData = filterConfig.get('component_data', Map());\n    const nullable = componentData.get('nullable');\n\n    return (\n      <>\n        <Grid\n          container={true}\n          spacing={3}\n          alignItems='center'\n        >\n          <Grid item={true} xs={12} sm={3}>\n            <Typography align='right' variant='subtitle1'>\n              {label} Office\n            </Typography>\n          </Grid>\n          <Grid item={true} xs={12} sm={9}>\n            <Grid\n              container={true}\n              spacing={2}\n              direction='row'\n              alignItems='center'\n              wrap='nowrap'\n            >\n              <Grid item={true} xs={true}>\n                <Field<BaseFieldProps<IFieldSelectComponentProps>>\n                  props={{\n                    // label: 'Office',\n                    excludeEmpty: true,\n                    inputProps: {\n                      fullWidth: true\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    }\n                  }}\n                  name={`${index}.tracking.officeId.eq`}\n                  component={FieldSelect}\n                >\n                  {nullable && <MenuItem key='' value={null}>{nullable}</MenuItem>}\n                  {<MenuItem key={currentUserOfficeId} value={currentUserOfficeId}>My Office</MenuItem>}\n                  {filteredOffices.toIndexedSeq().toArray().map((office) => {\n                    return <MenuItem key={office.get('id')} value={office.get('id')}>{office.get('officeName')}</MenuItem>;\n                  })}\n                </Field>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n\n        <Grid\n          container={true}\n          spacing={3}\n          alignItems='center'\n        >\n          <Grid item={true} xs={12} sm={3}>\n            <Typography align='right' variant='subtitle1'>\n              {label} User\n            </Typography>\n          </Grid>\n          <Grid item={true} xs={12} sm={9}>\n            <Grid\n              container={true}\n              spacing={2}\n              direction='row'\n              alignItems='center'\n              wrap='nowrap'\n            >\n              <Grid item={true} xs={true}>\n                <Field<BaseFieldProps<IFieldSelectComponentProps>>\n                  props={{\n                    // label: 'User',\n                    excludeEmpty: true,\n                    inputProps: {\n                      fullWidth: true\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    }\n                  }}\n                  name={`${index}.tracking.userId.eq`}\n                  component={FieldSelect}\n                >\n                  {nullable && <MenuItem key='' value={null}>{nullable}</MenuItem>}\n                  {<MenuItem key={currentUserId} value={currentUserId}>Me</MenuItem>}\n                  {filteredUsers.toIndexedSeq().toArray().map((user) => {\n                    return <MenuItem key={user.get('id')} value={user.get('id')}>{user.get('value')}</MenuItem>;\n                  })}\n                </Field>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n\n      </>\n    );\n  }\n\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst mapStateToProps = createStructuredSelector({\n  identity: makeSelectIdentityObject(),\n  offices: makeSelectOffices(),\n  users: makeSelectUsers(),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getOfficesByFirm: (firmId: number) => {\n      dispatch(new GetOfficesByFirmIdAction({firmId}));\n    },\n    getUsersList: () => {\n      dispatch(new GetUsersListAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<ITrackedUserAndOfficeSelectRendererComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n)(TrackedUserAndOfficeSelectRenderer);\n","import * as React from 'react';\nimport {\n  makeSelectIdentityObject,\n} from '../../../modules/AtsModule/selectors';\nimport { Map, List, fromJS } from 'immutable';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\nimport DataFieldSelect, { IDataFieldSelectComponentProps } from '../../../containers/DataFieldSelect';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport validate from '../SelectFilterRenderer/validate';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig, Identity } from '../../../models';\nimport { useTranslation } from 'react-i18next';\n\ninterface IDataUserSelectFilterRendererProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n  identity?: IMap<Identity>;\n}\n\nconst DataUserSelectFilterRenderer: React.FC<IDataUserSelectFilterRendererProps> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n    identity,\n  } = props;\n\n  const { t } = useTranslation('translations');\n\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  const componentData = filterConfig.get('component_data', Map());\n\n  const dataProviderProps = componentData.get('data') || Map();\n\n  const nullable = componentData.get('nullable');\n  const options = componentData.get('options') || List();\n\n  const parameters = Map().merge(identity);\n\n  const officeId = identity.get('office_id');\n  const firmId = identity.get('firm_id');\n  const userId = identity.get('uid');\n\n  // console.error('DATA SELECT FILTER', {\n  //   filterConfig,\n  //   index,\n  //   component,\n  //   key,\n  //   label,\n  //   component_data,\n  //   dataProviderProps,\n  // });\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field<BaseFieldProps<IDataFieldSelectComponentProps>>\n              name={`${fieldNamePrefix}.eq`}\n              validate={validate(filterConfig)}\n              component={DataFieldSelect}\n              props={{\n                inputProps: {\n                  id: '=',\n                  parameters,\n                },\n                dataProviderProps,\n                formControlProps: {\n                  fullWidth: true,\n                }\n              }}\n            >\n              {nullable && <MenuItem key='' value={null}>{t(nullable)}</MenuItem>}\n              {/* {\n                options.map((option, idx) => {\n                  let optionKey = option;\n                  let value = option;\n\n                  if (Map.isMap(option)) {\n                    optionKey = option.get('id');\n                    value = option.get('value');\n                  }\n                  return (<MenuItem key={optionKey} value={optionKey}>{value}</MenuItem>);\n                })\n              } */}\n\n              {/* <MenuItem value={userId}>Me</MenuItem>\n              <MenuItem value={officeId}>Anyone in my office</MenuItem>\n              <MenuItem value={firmId}>Anyone in my firm</MenuItem> */}\n            </Field>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  identity: makeSelectIdentityObject()\n});\n\nexport default compose<React.ComponentClass<IDataUserSelectFilterRendererProps>>(\n  connect(mapStateToProps),\n)(DataUserSelectFilterRenderer);\n","import * as React from 'react';\nimport { Map } from 'immutable';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n  MenuItem,\n} from '@material-ui/core';\nimport FieldSelect, {IFieldSelectComponentProps} from '../../FieldSelect';\n\nimport { TableColumnConfig } from '../../../models';\nimport { IMap } from 'ats-utils/src';\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\nimport PeopleRoundedIcon from '@material-ui/icons/PeopleRounded';\nimport { useTranslation } from 'react-i18next';\n\ninterface ICollaboratorFilterRenderer {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n}\n\nconst CollaboratorFilterRenderer: React.FC<ICollaboratorFilterRenderer> = props => {\n  const {\n    filterConfig,\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  const fieldNamePrefix = `[${index}].${key}`;\n\n  const componentData = filterConfig.get('component_data', Map());\n  const nullable = componentData.get('nullable');\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field<BaseFieldProps<IFieldSelectComponentProps>>\n              name={`${fieldNamePrefix}.eq`}\n              props={{\n                inputProps: {\n                  id: '=',\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n              component={FieldSelect}\n            >\n              <MenuItem key={''} value={null}>{t(nullable)}</MenuItem>\n              <MenuItem key={'true'} value={1}>\n                <Grid container={true} wrap='nowrap'>\n                  <PeopleRoundedIcon color='primary' style={{ marginRight: 10}} />\n                  {t('Dashboard.collaborationSelect.collaborated')}\n                </Grid>\n              </MenuItem>\n              <MenuItem key={'false'} value={0}>\n                <Grid container={true} wrap='nowrap'>\n                  <PersonRoundedIcon color='primary' style={{ marginRight: 10}} />\n                  {t('Dashboard.collaborationSelect.nonCollaborated')}\n                </Grid>\n              </MenuItem>\n            </Field>\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default CollaboratorFilterRenderer;\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport '@babel/runtime/helpers/esm/toConsumableArray';\nimport '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component } from 'react';\nimport 'memoize-one';\nimport '@emotion/core';\nimport 'react-dom';\nimport 'prop-types';\nimport '@babel/runtime/helpers/esm/typeof';\nimport 'raf';\nimport { k as handleInputChange } from '../../dist/chunk-e8ae4b0f.browser.esm.js';\nimport '../../dist/chunk-5d200a41.browser.esm.js';\nimport { S as Select } from '../../dist/base/dist/react-select-a34e9d12.browser.esm.js';\nimport '@emotion/css';\nimport '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport 'react-input-autosize';\nimport { m as manageState } from '../../dist/chunk-b36baf1a.browser.esm.js';\n\nvar defaultProps = {\n  cacheOptions: false,\n  defaultOptions: false,\n  filterOption: null\n};\nvar makeAsyncSelect = function makeAsyncSelect(SelectComponent) {\n  var _class, _temp;\n\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_Component) {\n    _inherits(Async, _Component);\n\n    function Async(props) {\n      var _this;\n\n      _classCallCheck(this, Async);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(Async).call(this));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"select\", void 0);\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"lastRequest\", void 0);\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"mounted\", false);\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"optionsCache\", {});\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleInputChange\", function (newValue, actionMeta) {\n        var _this$props = _this.props,\n            cacheOptions = _this$props.cacheOptions,\n            onInputChange = _this$props.onInputChange; // TODO\n\n        var inputValue = handleInputChange(newValue, actionMeta, onInputChange);\n\n        if (!inputValue) {\n          delete _this.lastRequest;\n\n          _this.setState({\n            inputValue: '',\n            loadedInputValue: '',\n            loadedOptions: [],\n            isLoading: false,\n            passEmptyOptions: false\n          });\n\n          return;\n        }\n\n        if (cacheOptions && _this.optionsCache[inputValue]) {\n          _this.setState({\n            inputValue: inputValue,\n            loadedInputValue: inputValue,\n            loadedOptions: _this.optionsCache[inputValue],\n            isLoading: false,\n            passEmptyOptions: false\n          });\n        } else {\n          var request = _this.lastRequest = {};\n\n          _this.setState({\n            inputValue: inputValue,\n            isLoading: true,\n            passEmptyOptions: !_this.state.loadedInputValue\n          }, function () {\n            _this.loadOptions(inputValue, function (options) {\n              if (!_this.mounted) return;\n\n              if (options) {\n                _this.optionsCache[inputValue] = options;\n              }\n\n              if (request !== _this.lastRequest) return;\n              delete _this.lastRequest;\n\n              _this.setState({\n                isLoading: false,\n                loadedInputValue: inputValue,\n                loadedOptions: options || [],\n                passEmptyOptions: false\n              });\n            });\n          });\n        }\n\n        return inputValue;\n      });\n\n      _this.state = {\n        defaultOptions: Array.isArray(props.defaultOptions) ? props.defaultOptions : undefined,\n        inputValue: typeof props.inputValue !== 'undefined' ? props.inputValue : '',\n        isLoading: props.defaultOptions === true,\n        loadedOptions: [],\n        passEmptyOptions: false\n      };\n      return _this;\n    }\n\n    _createClass(Async, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        var _this2 = this;\n\n        this.mounted = true;\n        var defaultOptions = this.props.defaultOptions;\n        var inputValue = this.state.inputValue;\n\n        if (defaultOptions === true) {\n          this.loadOptions(inputValue, function (options) {\n            if (!_this2.mounted) return;\n            var isLoading = !!_this2.lastRequest;\n\n            _this2.setState({\n              defaultOptions: options || [],\n              isLoading: isLoading\n            });\n          });\n        }\n      }\n    }, {\n      key: \"componentWillReceiveProps\",\n      value: function componentWillReceiveProps(nextProps) {\n        // if the cacheOptions prop changes, clear the cache\n        if (nextProps.cacheOptions !== this.props.cacheOptions) {\n          this.optionsCache = {};\n        }\n\n        if (nextProps.defaultOptions !== this.props.defaultOptions) {\n          this.setState({\n            defaultOptions: Array.isArray(nextProps.defaultOptions) ? nextProps.defaultOptions : undefined\n          });\n        }\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.mounted = false;\n      }\n    }, {\n      key: \"focus\",\n      value: function focus() {\n        this.select.focus();\n      }\n    }, {\n      key: \"blur\",\n      value: function blur() {\n        this.select.blur();\n      }\n    }, {\n      key: \"loadOptions\",\n      value: function loadOptions(inputValue, callback) {\n        var loadOptions = this.props.loadOptions;\n        if (!loadOptions) return callback();\n        var loader = loadOptions(inputValue, callback);\n\n        if (loader && typeof loader.then === 'function') {\n          loader.then(callback, function () {\n            return callback();\n          });\n        }\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this3 = this;\n\n        var _this$props2 = this.props,\n            loadOptions = _this$props2.loadOptions,\n            props = _objectWithoutProperties(_this$props2, [\"loadOptions\"]);\n\n        var _this$state = this.state,\n            defaultOptions = _this$state.defaultOptions,\n            inputValue = _this$state.inputValue,\n            isLoading = _this$state.isLoading,\n            loadedInputValue = _this$state.loadedInputValue,\n            loadedOptions = _this$state.loadedOptions,\n            passEmptyOptions = _this$state.passEmptyOptions;\n        var options = passEmptyOptions ? [] : inputValue && loadedInputValue ? loadedOptions : defaultOptions || [];\n        return React.createElement(SelectComponent, _extends({}, props, {\n          ref: function ref(_ref) {\n            _this3.select = _ref;\n          },\n          options: options,\n          isLoading: isLoading,\n          onInputChange: this.handleInputChange\n        }));\n      }\n    }]);\n\n    return Async;\n  }(Component), _defineProperty(_class, \"defaultProps\", defaultProps), _temp;\n};\nvar SelectState = manageState(Select);\nvar Async = makeAsyncSelect(SelectState);\n\nexport default Async;\nexport { defaultProps, makeAsyncSelect };\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7 14l5-5 5 5z\"\n}), 'ArrowDropUp');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","import * as React from 'react';\nimport { Map, fromJS } from 'immutable';\nimport {\n  Button,\n  Input,\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles, Typography,\n} from '@material-ui/core';\n\ninterface IQuoteBrandDiscount {\n  discounts: any;\n  applyButtonLabel: string;\n  preview?: boolean;\n  onChange: (discounts: any[]) => any;\n}\n\nclass QuoteBrandDiscount extends React.Component<IQuoteBrandDiscount & WithStyles<keyof ReturnType<typeof styles>>> {\n  public state = {\n    discounts: this.props.discounts,\n    isChangingDiscount: false,\n    whatIsChanging: Map(),\n  };\n\n  public render() {\n    const { discounts } = this.state;\n    const { classes, preview } = this.props;\n    return (\n      <Grid container={true} spacing={2}>\n        <Grid container={true} item={true} spacing={1} xs={12} className={classes.gridItem}>\n          {\n            discounts && discounts.map((discount: any, index: number) => {\n              return (\n                <Grid item={true} xs={6} key={index}>\n                  <Button\n                    className={classes.brandButton}\n                    disabled={preview}\n                    onClick={(e: any) => this.onButtonClick(e, discount)}\n                  >\n                    {discount.get('name')} {`-${discount.get('discount')}%`}\n                  </Button>\n                </Grid>\n              );\n            })\n          }\n        </Grid>\n        {this.renderDiscountInput()}\n      </Grid>\n    );\n  }\n\n  private onButtonClick = (e: any, discount: any) => {\n    e.stopPropagation();\n    this.setState({ isChangingDiscount: true, whatIsChanging: discount });\n  }\n\n  private applyDiscount = (e: any, name: any, discount: number) => {\n    e.stopPropagation();\n    const discounts = this.state.discounts.reduce((prev: any, next: any) => {\n      if (next.get('name') === name) {\n        next = fromJS({ name, discount });\n      }\n      prev.push(next);\n\n      return prev;\n    }, []);\n    this.setState(\n      { isChangingDiscount: false, discounts },\n      () => this.props.onChange(discounts));\n\n  }\n\n  private renderDiscountInput = () => {\n    const { whatIsChanging } = this.state;\n    const { classes, applyButtonLabel } = this.props;\n    let inputValue: string = '';\n\n    if (!this.state.isChangingDiscount) {\n      return;\n    }\n\n    return (\n      <Grid container={true} item={true} xs={12} className={classes.gridItem}>\n        <Grid item={true} xs={4}>\n          <Typography variant='button' noWrap={true}>{whatIsChanging.get('name')}</Typography>\n        </Grid>\n        <Grid item={true} xs={4}>\n          <Input\n            className={classes.input}\n            key={`${whatIsChanging.get('discount')}`}\n            type='number'\n            defaultValue={Number(whatIsChanging.get('discount'))}\n            onChange={(e: any) => {\n              inputValue = e.currentTarget.value;\n            }}\n          />\n        </Grid>\n        <Grid item={true} xs={4}>\n          <Button\n            className={classes.applyButton}\n            onClick={(e: any) => this.applyDiscount(e, whatIsChanging.get('name'), Number(inputValue))}\n          >\n            {applyButtonLabel}\n          </Button>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n  gridItem: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  brandButton: {\n    backgroundColor: theme.palette.grey[300],\n  },\n  input: {\n    width: '100%',\n  },\n  applyButton: {\n    color: theme.palette.primary.main,\n  }\n});\n\nexport default withStyles(styles)(QuoteBrandDiscount);\n","import * as React from 'react';\nimport classNames from 'classnames';\nimport {\n  Avatar,\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport QuoteBrandDiscount from './discount';\nimport {\n  Image,\n} from '../../components';\nimport PhoneEnabledIcon from '@material-ui/icons/PhoneEnabled';\nimport EmailIcon from '@material-ui/icons/Email';\nimport RoomIcon from '@material-ui/icons/Room';\nimport CheckCircleRoundedIcon from '@material-ui/icons/CheckCircleRounded';\n\ninterface ICustomerProps {\n  customerData: any;\n  isSelected: boolean;\n  applyButtonLabel: string;\n  preview?: boolean;\n  onChange: (customer: object) => any;\n  onClick: (customer: object) => any;\n}\n\nexport const getCustomerName = customerData => customerData.get('name')\n|| ((customerData.get('firstName') || customerData.get('lastName')) && `${(customerData.get('firstName') || '')} ${(customerData.get('lastName') || '')}`)\n|| customerData.get('organization')\n|| customerData.get('email')\n|| '';\n\nconst Customer: React.SFC<ICustomerProps & WithStyles<keyof ReturnType<typeof styles>>> =\n  ({ customerData, isSelected, classes, applyButtonLabel, onChange, onClick, preview }) => {\n\n    const onDiscountsChange = (brands: any) => {\n      const customer = customerData.set('brands', brands);\n      onChange(customer);\n    };\n    const organization = customerData.get('organization');\n    const firstName = customerData.get('firstName');\n    const lastName = customerData.get('lastName');\n    const name = (firstName || lastName) && [firstName, lastName].join(' ');\n    const firstLine = organization || name;\n    const secondLine = (organization && name) || '-';\n\n    const initials = (firstName && firstName[0] || '') +\n      (lastName && lastName[0] || '');\n    const src = (customerData.get('imageId') && customerData.get('imageId') || '');\n    const phone = customerData.get('mobileNumber') || customerData.get('officeNumber') || customerData.get('homeNumber');\n    const address = `${customerData.get('address1') || ''} ${customerData.get('address2') || ''}`;\n    const imgSize = 40;\n    const profileImage = src !== ''\n      ? <Image\n          src={src}\n          width={`${imgSize}px`}\n          aspectRatio={'100%'}\n          fromService={true}\n        />\n      : <Avatar className={classes.cardIcon}>{initials}</Avatar>;\n\n    return (\n      <Card className={classNames({ [classes.card]: !preview }, { [`${classes.selected}`]: isSelected })} onClick={onClick}>\n        <CardContent className={classes.cardContent}>\n          <Grid container={true} className={classes.gridContainer}>\n            <Grid container={true} item={true} spacing={2} xs={10}>\n              <Grid item={true} xs={12}>\n                <Typography variant='subtitle1' noWrap={true}>{firstLine}</Typography>\n                <Typography variant='caption' noWrap={true}>{secondLine}</Typography>\n              </Grid>\n              {/* {secondLine && (\n                <Grid item={true} xs={12}>\n                  <Typography variant='caption' noWrap={true}>{secondLine}</Typography>\n                </Grid>\n              )} */}\n              <Grid item={true} xs={12} className={classes.userDataGrid}>\n                <PhoneEnabledIcon className={classes.userDataIcon} fontSize='small' />\n                <Typography variant='caption' noWrap={true} className={classes.userData}>\n                  {phone}\n                </Typography>\n              </Grid>\n              <Grid item={true} xs={12} className={classes.userDataGrid}>\n                <EmailIcon className={classes.userDataIcon} fontSize='small' />\n                <Typography variant='caption' noWrap={true} className={classes.userData}>\n                 {customerData.get('email')}\n                </Typography>\n              </Grid>\n              <Grid item={true} xs={12} className={classes.userDataGrid}>\n                <RoomIcon className={classes.userDataIcon} fontSize='small' />\n                <Typography variant='caption' noWrap={true} className={classes.userData}>\n                  {address}\n                </Typography>\n              </Grid>\n            </Grid>\n            <Grid item={true} xs={2} className={classes.gridItem}>\n              {profileImage}\n              {isSelected && <CheckCircleRoundedIcon className={classes.selectedIcon} fontSize='small' />}\n            </Grid>\n          </Grid>\n        </CardContent>\n        <CardContent className={classes.cardContent}>\n          <QuoteBrandDiscount\n            discounts={customerData.get('brands')}\n            applyButtonLabel={applyButtonLabel}\n            preview={preview}\n            onChange={onDiscountsChange}\n          />\n        </CardContent>\n      </Card>\n    );\n  };\n\nconst styles = (theme: Theme): StyleRules => ({\n  card: {\n    cursor: 'pointer',\n  },\n  selected: {\n    backgroundColor: `${theme.palette.primary[600]}20`,\n    '& button[class*=\\'brandButton\\']': {\n      backgroundColor: `#D2DBE0`,\n    }\n  },\n  cardContent: {\n    padding: '12px',\n  },\n  gridContainer: {\n    justifyContent: 'space-between',\n  },\n  gridItem: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n  },\n  userDataGrid: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: '0 !important',\n  },\n  userDataIcon: {\n    margin: theme.spacing(1),\n    color: theme.palette.common.black,\n  },\n  cardIcon: {\n    color: theme.palette.common.black,\n  },\n  selectedIcon: {\n    color: theme.palette.primary[600],\n  },\n  userData: {\n    display: 'inline-flex',\n  },\n});\n\nexport default withStyles(styles)(Customer);\n","import React, {useCallback, useEffect, useState} from 'react';\nimport { Field } from 'redux-form/immutable';\nimport {\n  Grid,\n  Tooltip,\n  Typography\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { withAtsApi } from '../../../contexts/AtsApiContext';\nimport { compose } from 'redux';\nimport { Api } from 'ats-api/src/classes/index';\nimport { IS_PRODUCTION } from '../../../constants';\nimport {\n  fromJS,\n  List,\n  Map\n} from 'immutable';\n\nimport AsyncSelect from 'react-select/async';\nimport Select, {\n  ActionMeta,\n  components,\n  ValueType,\n} from 'react-select';\nimport {\n  ArrowDropDown,\n  ArrowDropUp\n} from '@material-ui/icons';\nimport { MultiValueGenericProps } from 'react-select/src/components/MultiValue';\nimport Customer from '../../QuoteCustomers/customer';\nimport { useTranslation } from 'react-i18next';\n\ninterface IAutoCompleteSelectComponentProps {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n}\n\ninterface IProps extends IAutoCompleteSelectComponentProps {\n  atsApi: Api;\n}\n\ninterface IFilterSearch {\n  fieldValue: string;\n  fieldOperand: string;\n}\n\ninterface IOptionType {\n  id: string;\n  value: string;\n  option: IOptionType;\n}\n\ninterface IDisplayControl {\n  icon: string;\n  key: string;\n}\n\nconst ROW_HEIGHT = 30;\nconst customStyles = {\n  control: (provided, state) => {\n    return ({\n      ...provided,\n      borderRadius: {},\n      borderStyle: {},\n      borderWidth: {},\n      borderBottom: '0.5px solid rgba(0,0,0,0.6)',\n      // This line disable the blue border\n      boxShadow: 'none',\n      '&:hover': {\n        borderBottom: '2px solid black',\n      }\n    });\n  },\n  input: (provided, state) => ({\n    ...provided,\n    padding: 0\n  }),\n  valueContainer: (provided, state) => ({\n    ...provided,\n    padding: 0,\n    // height: state.selectProps.height\n  }),\n  dropdownIndicator: (provided, state) => ({\n    ...provided,\n    padding: '8px 0 8px 8px'\n  }),\n  multiValueRemove: (provided, state) => ({\n    ...provided,\n    backgroundColor: state.selectProps.name.includes('customer') ? 'white' : 'hsl(0,0%,90%)',\n    marginLeft: state.selectProps.name.includes('customer') ? 2 : 0\n  })\n};\n\nconst AutoCompleteSelect: React.FC<IProps> = (props) => {\n  const filterSearch: IMap<IFilterSearch[]> = props.filterConfig.getIn(['component_data', 'filterSearch']);\n  const displayControl = props.filterConfig.getIn(['component_data', 'displayControl']);\n  const formatOptionLabel = useCallback((option: IMap<IOptionType>) => {\n    if (displayControl && List.isList(displayControl)) {\n      const _option = option.get('option') || option;\n      let toolTip = '';\n      const chunks = [];\n      for (let i = 0; i < displayControl.last().size; i++) {\n        const path = [];\n        const current = displayControl.last().get(i);\n        current.forEach(pathName => path.push(pathName));\n        const value = _option.getIn(path);\n        if ((typeof value === 'string' && value !==  '' ) || typeof value === 'number') {\n          chunks.push(value);\n        }\n      }\n      toolTip = chunks.join(',');\n\n      return (\n          <Tooltip title={toolTip} placement='bottom-start'>\n            <div>\n              {\n                displayControl.map((rowControl, k) => {\n                  const content = [];\n                  for (let i = 0; i < rowControl.size; i++) {\n                    const path = [];\n                    const current = rowControl.get(i);\n                    current.forEach(pathName => path.push(pathName));\n                    const value = _option.getIn(path);\n                    if ((typeof value === 'string' && value !== '') || typeof value === 'number') {\n                      content.push(value);\n                    }\n                  }\n                  return (<div key={k} style={{overflow: 'hidden'}}>{content.join(',')}</div>);\n                }) as any}\n            </div>\n          </Tooltip>\n      );\n    }\n\n\n    return (\n        <Tooltip title={(option.get('label') ?? option.get('value')) || ''} placement='bottom-start'>\n          <div style={{overflow: 'hidden '}}>{option.get('label') ?? option.get('value')}</div>\n        </Tooltip>\n    );\n  }, [displayControl]);\n\n  if (filterSearch === null || filterSearch === undefined) {\n    return <AutoCompleteSelectSync {...props} formatOptionLabel={formatOptionLabel} />;\n  }\n  return <AutoCompleteSelectAsync {...props} formatOptionLabel={formatOptionLabel} />;\n};\n\ninterface IAutoCompleteSelectSync extends IProps {\n  formatOptionLabel: any;\n}\ninterface IAutoCompleteSelectAsync extends IProps {\n  formatOptionLabel: any;\n}\nconst AutoCompleteSelectSync: React.FC<IAutoCompleteSelectSync> = ({\n  filterConfig,\n  atsApi,\n  index,\n  formatOptionLabel,\n}) => {\n  const { t } = useTranslation('translations');\n  const [options, setOptions] = useState(List());\n  const [isLoadingOptions, setIsLoadingOptions] = useState(false);\n  const endpoint: string = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'endpoint']);\n  const service: string = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'service']);\n  const params = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'params'])?.toJS();\n  const resultKey: string[] = filterConfig.getIn(['component_data', 'data', 'payload', 'resultKey']).delete(0);\n  const key: string = filterConfig.get('key');\n  const label: string = filterConfig.get('label');\n  const fieldNamePrefix: string = `[${index}].${key}`;\n  const filterOperand: string = filterConfig.get('filterOperand', 'like');\n  const filterValue: any = filterConfig.get('filterValue', 'value');\n\n  const displayControl = filterConfig.getIn(['component_data', 'displayControl']);\n  useEffect(() => {\n    let componentStillExist = true;\n    const fetchOptions = async () => {\n      setIsLoadingOptions(true);\n      setOptions(List());\n      try {\n        const response = await atsApi.callApi({\n          service,\n          endpoint,\n          params,\n          suppressErrors: IS_PRODUCTION,\n          withToken: true,\n          withAppId: true,\n        }) as Promise<any>;\n        const immutableData = fromJS(response);\n        const _options = immutableData.getIn(resultKey);\n        if (componentStillExist) {\n          setIsLoadingOptions(false);\n          setOptions(_options);\n        }\n      } catch (err) {\n        // leave the select empty instead of surfacing an unhandled rejection\n        console.warn('Unable to load the filter options.', err); // tslint:disable-line\n        if (componentStillExist) {\n          setIsLoadingOptions(false);\n        }\n      }\n    };\n    fetchOptions();\n    return () => {\n      componentStillExist = false;\n    };\n  }, []);\n  const getOptionValue = useCallback((option: IMap<IOptionType>) => {\n    return option.get('label') ?? option.get('value');\n  }, []);\n  return (\n      <Grid\n          container={true}\n          spacing={3}\n          alignItems='center'\n      >\n        <Grid item={true} xs={12} sm={3}>\n          <Typography align='right' variant='subtitle1'>\n            {t(label)}\n          </Typography>\n        </Grid>\n        <Grid item={true} xs={12} sm={9}>\n          <Grid\n              container={true}\n              spacing={2}\n              direction='row'\n              alignItems='center'\n              wrap='nowrap'\n          >\n            <Grid item={true} xs={true}>\n              <Field\n                  name={`${fieldNamePrefix}.${filterOperand}`}\n                  component={FieldSyncSelect}\n                  props={{\n                    options,\n                    isLoading: isLoadingOptions,\n                    formatOptionLabel,\n                    getOptionValue,\n                    filterValue,\n                    displayControl,\n                    filterOperand,\n                    filterKey: filterConfig.get('key'),\n                  }}\n              />\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n  );\n};\nconst AutoCompleteSelectAsync: React.FC<IAutoCompleteSelectAsync> = ({\n  filterConfig,\n  atsApi,\n  index,\n  formatOptionLabel,\n}) => {\n\n  const { t } = useTranslation('translations');\n  const endpoint: string = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'endpoint']);\n  const service: string = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'service']);\n  const params = filterConfig.getIn(['component_data', 'data', 'payload', 'payload', 'params'])?.toJS();\n  const resultKey: string[] = filterConfig.getIn(['component_data', 'data', 'payload', 'resultKey']).delete(0);\n  const key: string = filterConfig.get('key');\n  const label: string = filterConfig.get('label');\n  const fieldNamePrefix: string = `[${index}].${key}`;\n  const filterOperand: string = filterConfig.get('filterOperand', 'like');\n  const filterValue: any = filterConfig.get('filterValue', 'value');\n  const filterSearch: IMap<IFilterSearch[]> = filterConfig.getIn(['component_data', 'filterSearch'], fromJS([]));\n  const displayControl = filterConfig.getIn(['component_data', 'displayControl']);\n\n  const loadOptions = useCallback((inputValue) => new Promise(async (resolve) => {\n    // fetch Data\n    try {\n      const response = await atsApi.callApi({\n        service,\n        endpoint,\n        params,\n        suppressErrors: IS_PRODUCTION,\n        withToken: true,\n        withAppId: true,\n        body: {\n          filters: {\n            'or': filterSearch.map((searchConfig) => ({\n              [searchConfig.get('fieldValue')]: {\n                [searchConfig.get('fieldOperand')]: inputValue\n              }\n            })).toJS()\n          },\n          options: {\n            limit: 100\n          }\n        }\n      }) as Promise<any>;\n      const immutableData = fromJS(response);\n      const options = immutableData.getIn(resultKey);\n      resolve(options);\n    } catch (err) {\n      // a rejection inside an async executor would otherwise never settle this promise\n      console.warn('Unable to search the filter options.', err); // tslint:disable-line\n      resolve(List());\n    }\n  }), []);\n  const getOptionValue = useCallback((option: IMap<IOptionType>) => {\n    return option.get('id');\n  }, []);\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n      <Grid item={true} xs={12} sm={9}>\n        <Grid\n          container={true}\n          spacing={2}\n          direction='row'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={true}>\n            <Field\n              name={`${fieldNamePrefix}.${filterOperand}`}\n              component={FieldAsyncSelect}\n              props={{\n                loadOptions,\n                formatOptionLabel,\n                getOptionValue,\n                filterValue,\n                displayControl,\n                filterOperand,\n                filterKey: filterConfig.get('key'),\n              }}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default compose<React.FunctionComponent<IAutoCompleteSelectComponentProps>>(\n  withAtsApi()\n)(AutoCompleteSelect);\n\nconst FieldSyncSelect = (props) => {\n  const {\n    input: {onChange, value},\n    formatOptionLabel,\n    getOptionValue,\n    filterValue,\n    displayControl,\n    filterOperand,\n    filterKey,\n    options,\n    isLoading,\n  } = props;\n  const { t } = useTranslation('translations');\n  const [inputValue, setInputValue] = useState('');\n\n  const filteredOptions = options.filter((option) => option.get('value').toLowerCase().includes(inputValue.toLowerCase())).slice(0, 100);\n  const customComponents: any = {\n    IndicatorSeparator: () => null,\n    DropdownIndicator: (dropdownProps) => {\n      return (\n          <components.DropdownIndicator {...dropdownProps}>\n            {(dropdownProps as any).selectProps.menuIsOpen ? <ArrowDropUp style={{color: 'rgba(0,0,0,0.54)'}}/> :\n                <ArrowDropDown style={{color: 'rgba(0,0,0,0.54)'}}/>}\n          </components.DropdownIndicator>\n      );\n    }\n  };\n  return (\n      <Select\n          isLoading={isLoading}\n          name={filterKey}\n          isMulti={filterOperand === 'in' ? true : false}\n          placeholder=''\n          noOptionsMessage={() => t('generalDropdown.noOptions')}\n          loadingMessage={() => t('generalDropdown.loading')}\n          defaultOptions={true}\n          menuPortalTarget={document.body}\n          menuShouldScrollIntoView={false}\n          menuShouldBlockScroll={true}\n          isClearable={true}\n          value={filterOperand === 'in' ? Map.isMap(value) ? value.get('value').toArray() : List.isList(value) ? value.toArray() : [] : value}\n          onInputChange={(newValue, actionMeta) => {\n            setInputValue(newValue);\n          }}\n          onChange={(option: any, reason: ActionMeta<IMap<IOptionType>>) => {\n            switch (reason.action) {\n              case 'select-option': {\n                if (filterOperand === 'in' && option && option.length) {\n                  onChange(fromJS({\n                    value: option,\n                    option,\n                    filterValue,\n                    displayControl\n                  }));\n                } else if (filterOperand === 'eq') {\n                  if (option != null && !List.isList(option)) {\n                    option = option as List<IMap<IOptionType>>;\n                    onChange(fromJS({\n                      id: option.get('id'),\n                      value: option.get('value') || option.get('id'),\n                      option,\n                      filterValue,\n                      displayControl\n                    }));\n                  }\n                }\n                break;\n              }\n              case 'remove-value': {\n                if (filterOperand === 'in' && option && option.length) {\n                  onChange(fromJS({\n                    value: option,\n                    option,\n                    filterValue,\n                    displayControl\n                  }));\n                } else {\n                  onChange(null);\n                }\n                break;\n              }\n              case 'clear': {\n                onChange(null);\n              }\n            }\n          }}\n          formatOptionLabel={formatOptionLabel}\n          getOptionValue={getOptionValue}\n          styles={customStyles}\n          components={customComponents}\n          options={filteredOptions}\n      />\n  );\n};\nconst FieldAsyncSelect = (props) => {\n  const {\n    input: {onChange, value},\n    loadOptions,\n    formatOptionLabel,\n    getOptionValue,\n    filterValue,\n    displayControl,\n    filterOperand,\n    filterKey\n  } = props;\n\n  const { t } = useTranslation('translations');\n\n  const customComponents: any = {\n    IndicatorSeparator: () => null,\n    DropdownIndicator: (dropdownProps) => {\n      return (\n        <components.DropdownIndicator {...dropdownProps}>\n          {(dropdownProps as any).selectProps.menuIsOpen ? <ArrowDropUp style={{color: 'rgba(0,0,0,0.54)'}}/> :\n            <ArrowDropDown style={{color: 'rgba(0,0,0,0.54)'}}/>}\n        </components.DropdownIndicator>\n      );\n    }\n  };\n\n  if (filterKey.includes('customer')) {\n    customComponents.MultiValueContainer = (_props) => (\n      <Grid item={true} xs={6} style={{ flexWrap: 'nowrap', display: 'flex', padding: 2 }} {..._props} />\n    );\n    customComponents.MultiValueLabel = (_props) => (\n      <Customer\n        customerData={_props.data}\n        isSelected={false}\n        applyButtonLabel={''}\n        onChange={(data: object) => null}\n        onClick={() => null}\n      />\n    );\n  }\n\n  return (\n    <AsyncSelect\n      name={filterKey}\n      isMulti={filterOperand === 'in' ? true : false}\n      placeholder=''\n      noOptionsMessage={() => t('generalDropdown.noOptions')}\n      loadingMessage={() => t('generalLoading.loading')}\n      cacheOptions={true}\n      loadOptions={loadOptions}\n      defaultOptions={true}\n      menuPortalTarget={document.body}\n      menuShouldScrollIntoView={false}\n      menuShouldBlockScroll={true}\n      isClearable={true}\n      value={filterOperand === 'in' ? Map.isMap(value) ? value.get('value').toArray() : List.isList(value) ? value.toArray() : [] : value}\n      onChange={(option: any, reason: ActionMeta<IMap<IOptionType>>) => {\n        switch (reason.action) {\n          case 'select-option': {\n            if (filterOperand === 'in' && option && option.length) {\n              onChange(fromJS({\n                value: option,\n                option,\n                filterValue,\n                displayControl\n              }));\n            } else if (filterOperand === 'eq') {\n              if (option != null && !List.isList(option)) {\n                option = option as List<IMap<IOptionType>>;\n                onChange(fromJS({\n                  id: option.get('id'),\n                  value: option.get('value') || option.get('id'),\n                  option,\n                  filterValue,\n                  displayControl\n                }));\n              }\n            }\n            break;\n          }\n          case 'remove-value': {\n            if (filterOperand === 'in' && option && option.length) {\n              onChange(fromJS({\n                value: option,\n                option,\n                filterValue,\n                displayControl\n              }));\n            } else {\n              onChange(null);\n            }\n            break;\n          }\n          case 'clear': {\n            onChange(null);\n          }\n        }\n      }}\n      formatOptionLabel={formatOptionLabel}\n      getOptionValue={getOptionValue}\n      styles={customStyles}\n      components={customComponents}\n    />\n  );\n};","import DefaultTextFilterRenderer from './DefaultTextFilterRenderer';\nimport TextFilterRenderer from './TextFilterRenderer';\nimport DateRangeFilterRenderer from './DateRangeFilterRenderer';\nimport DateFilterRenderer from './DateFilterRenderer';\nimport LocationFilterRenderer from './LocationFilterRenderer';\nimport BuildingFilterRenderer from './BuildingFilterRenderer';\nimport AmountFilterRenderer from './AmountFilterRenderer';\nimport AmountRangeFilterRenderer from './AmountRangeFilterRenderer';\nimport SelectFilterRenderer from './SelectFilterRenderer';\nimport DataSelectFilterRenderer from './DataSelectFilterRenderer';\nimport TrackedUserAndOfficeSelectRenderer from './TrackedUserAndOfficeSelectRenderer';\nimport DataUserSelectFilterRenderer from './DataUserSelectFilterRenderer';\nimport CollaboratorFilterRenderer from './CollaboratorFilterRenderer';\nimport AutoCompleteSelect from './AutoCompleteSelectRenderer';\nimport CheckboxFilterRenderer from './CheckboxFilterRenderer';\n\nexport const ComponentToFilterRendererMap = {\n  default: DefaultTextFilterRenderer,\n  text: TextFilterRenderer,\n  date_range: DateRangeFilterRenderer,\n  date: DateFilterRenderer,\n  amount_range: AmountRangeFilterRenderer,\n  amount: AmountFilterRenderer,\n  location: LocationFilterRenderer,\n  building: BuildingFilterRenderer,\n  select: SelectFilterRenderer, // use 'eq' as operand\n  data_select: DataSelectFilterRenderer,\n  data_user_select: DataUserSelectFilterRenderer,\n  autocomplete_search: AutoCompleteSelect,\n  // more bespoke renderers\n  tracked_user_office_select: TrackedUserAndOfficeSelectRenderer,\n  collaborator_select: CollaboratorFilterRenderer,\n  checkbox_group: CheckboxFilterRenderer,\n};\n\nexport default ComponentToFilterRendererMap;\n","/* eslint no-unused-vars:0 */\n// WIP\nimport * as React from 'react';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../FieldCheckbox';\nimport { useTranslation } from 'react-i18next';\n\ninterface ICheckboxFilterRenderer {\n  filterConfig?: IMap<TableColumnConfig>;\n  index?: number;\n}\n\nconst CheckboxFilterRenderer: React.FC<ICheckboxFilterRenderer> = props => {\n  const {\n    filterConfig,  // current cell value\n    index,\n  } = props;\n\n  const { t } = useTranslation('translations');\n\n  // const component = filterConfig.get('component');\n  const key = filterConfig.get('key');\n  const label = filterConfig.get('label');\n\n  // const fieldNamePrefix = `[${index}].${key}`;\n\n  return (\n    <Grid\n      container={true}\n      spacing={3}\n      alignItems='center'\n    >\n      <Grid item={true} xs={12} sm={3}>\n        <Typography align='right' variant='subtitle1'>\n          {t(label)}\n        </Typography>\n      </Grid>\n\n      <Grid item={true} xs={12} sm={9}>\n        {\n          key === 'specAndQuoteAvailablity' ?\n            <Grid\n              container={true}\n              spacing={2}\n              direction='row'\n              alignItems='center'\n            >\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].isAi.neq`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.hasNonAiSpec'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].isAi.eq`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.hasAiSPec'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].quoteCount.gte`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.hasQuote'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].hasAiValidatedSpec.eq`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.readyQuoteValidated'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n\n            </Grid>\n            :\n            <Grid\n              container={true}\n              spacing={2}\n              direction='row'\n              alignItems='center'\n            >\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].isUserTracked.eq`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.tracked'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n\n              <Grid item={true} sm={3} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name={`[${index}].isUserTracked.neq`}\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('projectListFilter.untracked'),\n                    color: 'primary',\n                    helperText: false,\n                  }}\n                />\n              </Grid>\n            </Grid>\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default CheckboxFilterRenderer;\n","import * as React from 'react';\n\nimport { ComponentToFilterRendererMap } from './ComponentToFilterRendererMap';\n\ninterface IRenderFilterComponent {\n  index: number;\n  data: {\n    [propName: string]: any;\n  };\n  filterConfig?: {\n    [propName: string]: any;\n  };\n  formId: string;\n  change?(...args: any[]): any;\n}\n\n// import { ComponentToRendererMap } from './utils';\n// must return FormSection with column key, and then Fields with name = operand\nexport const RenderFilterComponent: React.FC<IRenderFilterComponent> =\n  ({ filterConfig, index, data, change, formId, ...rest }) => {\n  const component = filterConfig.get('component');\n  const Renderer = ComponentToFilterRendererMap[component] || ComponentToFilterRendererMap['default'];\n\n  return (<Renderer {...{filterConfig, index, data, change, formId, ...rest}} />);\n};\n\nexport default RenderFilterComponent;\n","import * as React from 'react';\nimport {\n  Grid, Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport { TextAlignProperty } from 'csstype';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    position: 'relative',\n    // width: '100%' This will prevent the <Grid> component to be aligned in center\n  }\n});\n\ninterface IGridBlockProps {\n  item?: boolean;\n  padding?: string;\n  disabled?: any;\n  textAlign?: TextAlignProperty;\n}\n\ntype GridBlockProps = IGridBlockProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass GridBlock extends React.Component<GridBlockProps, {}> {\n  public render() {\n    const {\n      item,\n      classes,\n      padding,\n      disabled,\n      textAlign\n    } = this.props;\n\n      return (\n        <Grid\n            item={item}\n            className={classes.root}\n            style={{\n              padding: padding ? padding : '',\n              opacity: disabled && 0.4,\n              textAlign: textAlign ? textAlign : 'initial'\n            }}\n        >\n          {this.props.children}\n        </Grid>\n    );\n  }\n}\n\nexport default withStyles(styles)(GridBlock);\n","import * as React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n  Button,\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules\n} from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { ButtonProps } from '@material-ui/core/Button';\n\nexport interface ILinkButtonComponentProps extends ButtonProps {\n  href?: string;\n  to?: string;\n  className?: string;\n  onClick?(evt: React.MouseEvent): void;\n}\ninterface ILinkButtonProps extends ILinkButtonComponentProps {\n}\n\ntype ILinkButtonType = ILinkButtonProps & WithStyles<keyof ReturnType<typeof linkStyles>>;\n\nconst LinkButton: React.FC<ILinkButtonType> = (props) => {\n  const {\n    children,\n    classes,\n    href,\n    onClick,\n    to,\n    className,\n    ...rest\n  } = props;\n\n  let linkProps = {};\n\n  if (href) {\n    linkProps = {\n      component: 'a',\n      href,\n      target: '_blank', // this lead to open a new tab\n    };\n  }\n  if (to) {\n    linkProps = {\n      component: Link,\n      to,\n    };\n  }\n  if (onClick) {\n    linkProps = {\n      onClick,\n    };\n  }\n  return (\n    <Button\n      color='primary'\n      variant='contained'\n      className={classnames(classes.create, className)}\n      {...rest} {...linkProps}\n    >\n      {children}\n    </Button>\n  );\n};\n\nconst linkStyles = (): StyleRules => ({\n  create: {\n  },\n  button: {\n    textAlign: 'center'\n  },\n});\n\nexport default withStyles(linkStyles)(LinkButton);\n","/*\n * CallToActionWidgetContent\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\n\nimport {\n  Grid,\n  Typography,\n  Tooltip,\n  Theme,\n} from '@material-ui/core';\nimport { withStyles, WithStyles, WithTheme } from '@material-ui/core/styles';\nimport GridBlock from '../GridBlock';\nimport Image, { IImageComponentProps } from '../Image';\nimport LinkButton, { ILinkButtonComponentProps } from '../LinkButton';\nimport { AtsSvgNewProject, AtsSvgNewSpec, AtsSvgEmptySpecListWidget, AtsSvgFolder, AtsSvgNewMaster, AtsSvgRequestMaster } from '../AtsSvg';\nimport { compose } from 'redux';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { connect } from 'react-redux';\nimport { push } from 'connected-react-router';\nimport { AMPLITUDE_EVENT, CREATE_NEW_PROJECT_PATH, CREATE_NEW_QUOTE_PATH } from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { IAction } from 'ats-utils/src';\nimport { makeSelectConfigAtsSvgProps, makeSelectIsRestrictedOutsideSalesRep } from '../../modules/AtsModule/selectors';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nexport interface ICallToActionWidgetContentComponentProps {\n  ImageProps: IImageComponentProps;\n  ButtonProps: ILinkButtonComponentProps;\n  title: string;\n  label: string;\n  description: string;\n  buttonToolTip?: string;\n  noPadding?: boolean;\n}\n\ninterface ICallToActionWidgetContentProps extends ICallToActionWidgetContentComponentProps {\n  configAtsSvgProps: object;\n  isRestrictedOutsideSalesRep: boolean;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype CallToActionWidgetContentType = ICallToActionWidgetContentProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAmplitudeData;\n\nconst SVGComponents = {\n  AtsSvgNewProject,\n  AtsSvgNewSpec,\n  AtsSvgEmptySpecListWidget,\n  AtsSvgFolder,\n  AtsSvgNewMaster,\n  AtsSvgRequestMaster,\n};\nconst SVGCompoenentsProp = (svg: string, theme: Theme) => {\n  switch (svg) {\n    case 'AtsSvgEmptySpecListWidget' || 'AtsSvgFolder':\n      return { backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary.main };\n    default:\n      return { backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary[900] };\n  }\n};\n\nclass CallToActionWidgetContent extends React.Component<CallToActionWidgetContentType> { // eslint-disable-line react/prefer-stateless-function\n\n  public render() {\n    const {\n      ImageProps,\n      ButtonProps,\n      buttonToolTip = '',\n      title,\n      label,\n      children,\n      classes,\n      theme,\n      noPadding,\n      dispatch,\n      amplitudeData,\n      configAtsSvgProps,\n      isRestrictedOutsideSalesRep,\n      t,\n    } = this.props;\n\n    const noAction = isRestrictedOutsideSalesRep && (ButtonProps?.to || ButtonProps?.href);\n\n    const useSvg = typeof ImageProps.src === 'string' && ImageProps.src.substr(0, 6) === 'AtsSvg';\n\n    const SVG = SVGComponents[ImageProps.src];\n\n    const createQuoteProps = {\n      onClick: () => {\n        dispatch(push(CREATE_NEW_QUOTE_PATH));\n        amplitude.logEvent(AMPLITUDE_EVENT.createNewQuote, amplitudeData());\n      }\n    };\n\n    const ImageElement = useSvg && SVG\n    ? <SVG color={SVGCompoenentsProp(ImageProps.src, theme)} {...configAtsSvgProps}/>\n    : <Image {...{\n        width: '128px',\n        aspectRatio: '100%',\n        ...ImageProps\n      }} />;\n\n    return (\n      <>\n        <GridBlock\n          item={true}\n        >\n          {ImageElement}\n        </GridBlock>\n        {\n          title && (\n            <GridBlock\n              item={true}\n              textAlign='center'\n              padding={!noPadding && `${theme.spacing(2)}px`}\n            >\n              <Typography variant='h6'>\n                {t(title)}\n              </Typography>\n            </GridBlock>\n          )\n        }\n        {\n          (children && !noAction) && (\n            <GridBlock\n              item={true}\n              textAlign='center'\n              padding={!noPadding && `${theme.spacing(1.5)}px ${theme.spacing(2.5)}px`}\n            >\n              {children}\n            </GridBlock>\n          )\n        }\n        {\n          (label != null && !noAction)\n          ? <GridBlock item={true}>\n              <Tooltip title={buttonToolTip}>\n                <span>\n                  <LinkButton\n                    classes={classes}\n                    {...(label === 'Dashboard.callToActionWidgets.newQuote.button' ? createQuoteProps : ButtonProps)}\n                  >\n                    {t(label)}\n                  </LinkButton>\n                </span>\n              </Tooltip>\n            </GridBlock>\n          : null\n        }\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => {\n  return {\n   create: {\n   }\n  };\n};\n\nconst makeMapStateToProps = () => {\n  const selectConfigAtsSvgProps = makeSelectConfigAtsSvgProps();\n  const selectIsRestrictedOutsideSalesRep = makeSelectIsRestrictedOutsideSalesRep();\n  const mapStateToProps = (state) => {\n    return ({\n      configAtsSvgProps: selectConfigAtsSvgProps(state),\n      isRestrictedOutsideSalesRep: selectIsRestrictedOutsideSalesRep(state),\n    });\n  };\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.ComponentClass<ICallToActionWidgetContentComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps),\n  withAmplitudeData,\n)(CallToActionWidgetContent);\n","/* tslint:disable */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n  Divider,\n  Grid,\n  MenuItem,\n  Theme,\n  Typography,\n} from '@material-ui/core';\nimport { ProductCategoryGroup } from '../../models';\nimport { IMap, } from 'ats-utils/src/Interfaces';\nimport { Image, } from '../../components';\nimport {\n  makeStyles,\n} from '@material-ui/styles';\nimport { OptionProps } from 'react-select/src/components/Option';\n\ninterface IOption {\n  id: string | number,\n  value: string | number,\n  label: string,\n  onClick: () => void,\n  data: IMap<ProductCategoryGroup>,\n}\n\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  iconFont: {\n    fontSize: 65,\n    color: `${theme.palette.primary[500]}`,\n  }\n}));\n\nconst CategorySelectOption: React.FC<OptionProps<IOption>> = (props) => {\n  const {\n    data,\n  } = props;\n\n  const classes = useStyles();\n  const imgSize = 50;\n  const mainImage = data && data.data.getIn(['file', 'images', 'main', 'fileId']);\n  const media = `${mainImage}|fit:${imgSize},${imgSize}`;\n  const fontClass = data && data.data.get('fontClass');\n  const subtitle = data && `${data.data.get('divisionNumber', '').slice(0, 2)} | ${data.data.get('divisionName')}`;\n  const title = data && data.data.get('name');\n  const handleClick = useCallback(() => {\n    data.onClick && data.onClick();\n  }, [data]);\n\n  return (\n    <MenuItem\n      onClick={handleClick}\n      style={{height: 'auto', flexDirection: 'column'}}\n    >\n      <Grid\n        container={true}\n        direction='row'\n        wrap='nowrap'\n      >\n        <Grid\n          item={true}\n        >\n          {\n            mainImage && (fontClass === 'icon-placeholder')\n              ? <Image\n                src={media || ''}\n                width={`${imgSize}px`}\n                aspectRatio={'100%'}\n                fromService={true}\n              />\n              : <span className={fontClass + ' ' + classes.iconFont}></span>\n          }\n        </Grid>\n        <Grid\n          container={true}\n          direction='column'\n          justify='flex-start'\n          style={{padding: '0 10px'}}\n        >\n          <Grid\n            item={true}\n          >\n            <Typography>\n              {title}\n            </Typography>\n          </Grid>\n          <Grid\n            item={true}\n          >\n            <Typography>\n              {subtitle}\n            </Typography>\n          </Grid>\n        </Grid>\n      </Grid>\n      <Divider/>\n    </MenuItem>\n  );\n}\n\nexport default CategorySelectOption;\n","import * as React from 'react';\nimport {\n  Button\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport { IAction } from 'ats-utils/src/Interfaces';\nimport { Dispatch } from 'redux';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport {\n  compose,\n} from 'redux';\n\ninterface IControlledToggleComponentProps {\n  localKey: string;\n  label?: string;\n}\n\ninterface IControlledToggleProps extends IControlledToggleComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\n\nconst ControlledToggle: React.SFC<IControlledToggleProps> = ({dispatch, localKey, label}) => {\n\n  return (\n    <Button\n      onClick={() => dispatch(new ToggleOverlayComponentAction({id: localKey}))}\n    >\n      {label != null ? label : localKey}\n    </Button>\n  );\n};\n\n\nexport default compose<React.ComponentClass<IControlledToggleComponentProps>>(\n  connect()\n)(ControlledToggle);\n","/*\n * FilterEditor\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport { compose } from 'redux';\nimport { FormSection, } from 'redux-form/immutable';\nimport { List, Map } from 'immutable';\n\nimport RenderFilterComponent from '../_FilterEditRenderer';\n\ninterface IFilterEditorProps {\n  filters: {\n    [propName: string]: any;\n  };\n  data: {\n    [propName: string]: any;\n  };\n  formId: string;\n  change(param1: string, param2: any): any;\n}\n\ntype FilterEditorProps = IFilterEditorProps;\n\nclass FilterEditor extends React.Component<FilterEditorProps, {}> { // eslint-disable-line react/prefer-stateless-function\n\n  public render() {\n    const {\n      filters,\n      data = List(),\n      change,\n      formId,\n    } = this.props;\n\n    return (\n      <FormSection name='filters'>\n        {\n          filters?.map((filterConfig, index) => {\n            return <RenderFilterComponent key={index} formId={formId} filterConfig={filterConfig} index={index} data={data.get(index) || Map()} change={change} />;\n          })\n        }\n      </FormSection>\n    );\n  }\n}\n\nexport default compose(\n)(FilterEditor);\n","import React from 'react';\n// import * as ReactDOM from 'react-dom';\nimport {\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  Theme,\n  useMediaQuery,\n} from '@material-ui/core';\n\nimport { ExpansionPanelProps } from '@material-ui/core/ExpansionPanel';\nimport { ExpansionPanelSummaryProps } from '@material-ui/core/ExpansionPanelSummary';\nimport { ExpansionPanelDetailsProps } from '@material-ui/core/ExpansionPanelDetails';\nimport { makeStyles } from '@material-ui/styles';\nimport { PopperProps } from '@material-ui/core/Popper';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport { RouteComponentProps, withRouter } from 'react-router';\n\n// import {\n//   singleOrArray,\n// } from 'ats-utils/src';\n\nconst useStyles = makeStyles((theme: Theme) => {\n  return {\n    expansionPanelRoot: {\n      '&:before': {\n        backgroundColor: 'transparent',\n      },\n    },\n    expansionPanelPaper: {\n      backgroundColor: 'transparent',\n      margin: 0,\n    },\n  };\n});\n\ninterface IFlatPanelComponentProps {\n  title: React.ReactNode;\n  defaultExpanded?: boolean;\n  ExpansionPanelProps?: ExpansionPanelProps;\n  ExpansionPanelSummaryProps?: ExpansionPanelSummaryProps;\n  closeOnRedirect?: boolean;\n  onChange?: (event: React.MouseEvent, open: boolean) => void;\n}\n\ninterface IExpansionPanelDetails {\n\n  ExpansionPanelDetailsProps?: Partial<ExpansionPanelDetailsProps>;\n  ContentComponent?: React.ComponentType<ExpansionPanelDetailsProps>;\n}\ninterface IPopper {\n\n  ExpansionPanelDetailsProps?: Partial<PopperProps>;\n  ContentComponent?: React.ComponentType<PopperProps>;\n}\n\ninterface IFlatPanelProps extends IFlatPanelComponentProps {\n}\n\ntype FlatPanelProps = IFlatPanelProps & (IExpansionPanelDetails | IPopper) & RouteComponentProps;\n\nconst FlatPanel: React.FC<FlatPanelProps> = (props) => {\n  const {\n    children,\n    title,\n    ExpansionPanelProps: _ExpansionPanelProps = {},\n    ExpansionPanelSummaryProps: _ExpansionPanelSummaryProps = {},\n    ExpansionPanelDetailsProps: _ExpansionPanelDetailsProps = {},\n    defaultExpanded = false,\n    closeOnRedirect,\n    ContentComponent = ExpansionPanelDetails,\n    onChange,\n    history,\n  } = props;\n  const classes = useStyles(props);\n  const [open, setOpen] = React.useState(defaultExpanded);\n\n  // the following is just to close the expansion when location changes if closeOnRedirect is true\n  const isFullWidthMenu = closeOnRedirect && useMediaQuery('(min-width:960px)');\n  const refIsFullWidthMenu = React.useRef(isFullWidthMenu);\n  React.useEffect(() => {\n    if (closeOnRedirect && refIsFullWidthMenu.current !== isFullWidthMenu) {\n      refIsFullWidthMenu.current = isFullWidthMenu;\n    }\n    if (!isFullWidthMenu) {\n      setOpen(false);\n    }\n  }, [isFullWidthMenu]);\n  React.useEffect(() => {\n    if (open && closeOnRedirect) {\n      const unlisten = history.listen((location, action) => {\n        if (!refIsFullWidthMenu.current) {\n          setOpen(false);\n        }\n      });\n      return () => {\n        unlisten();\n      };\n    }\n  }, [open]);\n\n  const AnyContentComponent = ContentComponent as any;\n\n  const ExpansionContent = <AnyContentComponent\n    {..._ExpansionPanelDetailsProps}\n    {...{open}} // we want to pass open to child element\n  >\n    {children}\n  </AnyContentComponent>;\n\n  return (\n    <ExpansionPanel\n      expanded={open}\n      elevation={0}\n      classes={{ root: classes.expansionPanelRoot }}\n      className={classes.expansionPanelPaper}\n      {..._ExpansionPanelProps}\n    >\n      <ExpansionPanelSummary\n        expandIcon={<KeyboardArrowDownRoundedIcon />}\n        onClick={(evt) => {\n          const newState = !open;\n          setOpen(newState);\n          if (onChange != null) {\n            onChange(evt, newState);\n          }\n        }}\n        {..._ExpansionPanelSummaryProps}\n      >\n        {title}\n      </ExpansionPanelSummary>\n      {ExpansionContent}\n    </ExpansionPanel>\n  );\n};\n\nexport default withRouter(FlatPanel);\n","import * as React from 'react';\nimport { Paper } from '@material-ui/core';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport StarIcon from '@material-ui/icons/Star';\nimport DnsIcon from '@material-ui/icons/Dns';\nimport CategoryIcon from '@material-ui/icons/Category';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport { useSelector } from 'react-redux';\nimport { makeSelectConfigUiOverrides } from '../../modules/AtsModule/selectors';\n\ninterface IImageIconProps {\n  classes: {\n    [propName: string]: any;\n  };\n  color?: string;\n  backgroundColor?: string;\n  label?: string;\n  iconName?: string;\n  iconSize?: string;\n  children?: JSX.Element;\n  className?: string;\n  elevation?: number;\n}\n\ntype ImageIconType = IImageIconProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nconst iconComponentByIconName = {\n  'dashboard': <DashboardIcon fontSize='large' />,\n  'star': <StarIcon fontSize='large' />,\n  'dns': <DnsIcon fontSize='large' />,\n  'category': <CategoryIcon fontSize='large' />,\n  'widgets': <WidgetsIcon fontSize='large' />,\n};\n\nconst ImageIcon: React.FC<ImageIconType> = (props) => {\n  const { classes, children, label, iconName, iconSize, className: classNameProp, ...rest } = props;\n\n  const uiOverrides = useSelector(makeSelectConfigUiOverrides());\n  const customWidgetIconBackgroundColor = uiOverrides?.get('customWidgetIconBackgroundColor');\n\n  let icon = null;\n\n  if (iconName != null) {\n    if (iconName.indexOf('fa:') !== -1) {\n      icon = <FontAwesomeIcon icon={iconName.replace('fa:', '') as any} size={(iconSize || 'lg') as any} />;\n    } else if (iconComponentByIconName[iconName]) {\n      icon = iconComponentByIconName[iconName];\n    } else {\n      throw Error('iconName not supported');\n    }\n  }\n\n  return (\n    <Paper\n      elevation={2}\n      classes={{root: classNames(classes.root, classNameProp)}}\n      style={{\n        ...customWidgetIconBackgroundColor ? {backgroundColor: customWidgetIconBackgroundColor} : {},\n      }}\n      {...rest}\n    >\n      {icon}\n      {label}\n      {children}\n    </Paper>\n  );\n};\n\nconst muiStyles = (theme) => ({\n  root: {\n    width: 6 * theme.spacing(),\n    height: 6 * theme.spacing(),\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    color: 'white',\n    backgroundColor: 'lightgrey',\n  },\n});\n\nexport default withStyles(muiStyles)(ImageIcon);\n","import * as React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport ImageIcon from '../ImageIcon';\nimport { useSelector } from 'react-redux';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\n\ninterface IIconWithLabelComponentProps {\n  classes: {\n    [propName: string]: any;\n  };\n  label?: string;\n  iconName?: string;\n  children?: JSX.Element;\n  draggable?: boolean;\n  onDrag?(...args: any[]): any;\n  onDragStart?(...args: any[]): any;\n  onDragEnd?(...args: any[]): any;\n}\n\ntype UserContactDrawerDetailsContactEditType = IIconWithLabelComponentProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nconst IconWithLabel: React.FC<UserContactDrawerDetailsContactEditType> = (props) => {\n  const { classes, children, label, iconName, ...rest } = props;\n\n  const lang = useSelector(makeSelectLocale());\n\n  return (\n    <div className={classes.root} {...rest}>\n      <ImageIcon iconName={iconName}>\n        {children}\n      </ImageIcon>\n      <Typography align='center' variant='caption' lang={lang || 'en'} className={classes.typography} style={{ hyphens: 'auto'}}>\n        {label}\n      </Typography>\n    </div>\n  );\n};\n\nconst muiStyles = (theme) => ({\n  root: {\n    color: 'white',\n    width: '25%',\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    alignItems: 'center',\n  },\n  paper: {\n\n  },\n  typography: {\n    paddingTop: theme.spacing(),\n    paddingBottom: theme.spacing(),\n    marginLeft: -theme.spacing(),\n    marginRight: -theme.spacing(),\n    width: '100%',\n  },\n});\n\nexport default withStyles(muiStyles)(IconWithLabel);\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\n\nimport {\n  Grid,\n  Popper,\n  Paper,\n  Theme,\n  WithTheme,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\n\nimport {\n  isWidthDown,\n} from '@material-ui/core/withWidth';\n\n\nimport FlatPanel from '../FlatPanel';\nimport { PopperProps } from '@material-ui/core/Popper';\n\n\ninterface IMainMenuItemCollapsibleComponentProps {\n  localKey: string;\n  responsive?: boolean;\n  widthBreakpoint?: any;\n  title: any;\n  drawerGradient?: string;\n}\n\ninterface IMainMenuItemCollapsibleProps extends IMainMenuItemCollapsibleComponentProps {\n\n}\n\ntype MainMenuItemCollapsibleType = IMainMenuItemCollapsibleProps & WithTheme & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nclass MainMenuItemCollapsible extends React.Component<MainMenuItemCollapsibleType, {}> {\n  public contentElRef;\n  public render() {\n    const {\n      localKey,\n      responsive,\n      classes,\n      title,\n      children,\n      widthBreakpoint,\n      theme,\n      drawerGradient,\n    } = this.props;\n\n    const smallWidth = isWidthDown('sm', widthBreakpoint);\n    const xsWidth = isWidthDown('xs', widthBreakpoint);\n    const displayedTitle = title.type === React.Fragment ? title.props.children : title;\n\n    // React.Fragment should not be traversed, but is\n    // see https://github.com/facebook/react/issues/11859\n    const mappedTitle =\n      React.isValidElement(title)\n      ? (\n        React.Children.map(displayedTitle,\n          (menuItem) => React.isValidElement(menuItem)\n            ? React.cloneElement(menuItem, {\n              widthBreakpoint,\n              responsive,\n            } as any)\n            : null\n        )\n      )\n      : (\n        title\n      );\n    // const resolvedChildren =\n    //   children.type === React.Fragment\n    //     ? children.props.children\n    //     : children;\n    // // apply responsive props to each menuItem child\n    // const mappedChildren = React.Children.map(resolvedChildren, (menuItem) => React.isValidElement(menuItem) ?\n    //   React.cloneElement(menuItem, {\n    //     responsive,\n    //   }) :\n    // null);\n\n    const ExpansionPanelDetailsProps = {\n      classes: {\n        root: classes.ExpansionPanelDetailsRoot,\n      },\n    };\n\n    const FlatPanelProps = responsive && smallWidth\n      ? {\n        ContentComponent: Popper,\n        ExpansionPanelDetailsProps: {\n          anchorEl: this.contentElRef,\n          placement: 'right',\n        } as Partial<PopperProps>\n      }\n      : {\n        ExpansionPanelDetailsProps: {\n          ...ExpansionPanelDetailsProps\n        }\n      };\n\n    const content = <Grid\n      container={true}\n      direction='column'\n      wrap='nowrap'\n    >\n      {children}\n    </Grid>;\n\n    const paperContent = (smallWidth && responsive)\n      ? <Paper\n        // className={classes.PaperProps}\n        style={{\n          backgroundColor: drawerGradient\n        }}\n      >\n        { content }\n      </Paper>\n      : content;\n\n    return (\n      <React.Fragment>\n        <div ref={(node) => this.contentElRef = node} />\n        <FlatPanel\n          closeOnRedirect={true}\n          title={\n            <React.Fragment>\n              {mappedTitle}\n              <span />\n            </React.Fragment>\n          }\n          ExpansionPanelProps={{\n            style: {\n              marginTop: 0,\n              marginBottom: 0\n            }\n          }}\n          ExpansionPanelSummaryProps={{\n            IconButtonProps: {\n              style: {\n                position: 'absolute',\n                right: smallWidth ? 4 : 8,\n                color: theme.palette.mainMenuText ? theme.palette.mainMenuText : theme.palette.primary.contrastText\n              },\n            },\n            classes: {\n              root: classes.ExpansionPanelSummaryRoot,\n              content: classes.ExpansionPanelSummaryContent,\n              // expanded: classes.ExpansionPanelSummaryContent,\n              expandIcon: classes.ExpansionPanelSummaryExpandIcon,\n            },\n          }}\n          {...FlatPanelProps}\n        >\n        {\n          !(xsWidth && responsive) && paperContent\n        }\n        </FlatPanel>\n      </React.Fragment>\n    );\n  }\n}\n\nconst muiStyles = (theme: Theme): StyleRules => ({\n  ExpansionPanelSummaryRoot: {\n    padding: 0,\n    minHeight: [0, '!important'],\n    '&:hover': {\n      backgroundColor: 'rgba(0, 0, 0, 0.1)'\n    },\n  } as any,\n  ExpansionPanelSummaryContent: {\n    margin: [0, '!important'],\n    '& > :last-child': {\n      paddingRight: 0,\n    },\n  } as any,\n  ExpansionPanelDetailsRoot: {\n    padding: 0,\n    // background: 'rgba(0,0,0,0.2)',\n  },\n  ExpansionPanelSummaryExpandIcon: {\n    color: theme.palette.primary.contrastText,\n    fontSize: 16,\n  },\n  PaperProps: {\n    backgroundColor: theme.palette.primary[300],\n  }\n});\n\nexport default compose<React.ComponentClass<IMainMenuItemCollapsibleComponentProps>>(\n  withStyles(muiStyles, { withTheme: true }),\n)(MainMenuItemCollapsible);\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'block',\n      textAlign: 'inherit',\n      width: '100%',\n      '&:hover $focusHighlight': {\n        opacity: theme.palette.action.hoverOpacity\n      },\n      '&$focusVisible $focusHighlight': {\n        opacity: 0.12\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the action area is keyboard focused. */\n    focusVisible: {},\n\n    /* Styles applied to the overlay that covers the action area when it is keyboard focused. */\n    focusHighlight: {\n      overflow: 'hidden',\n      pointerEvents: 'none',\n      position: 'absolute',\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      borderRadius: 'inherit',\n      opacity: 0,\n      backgroundColor: 'currentcolor',\n      transition: theme.transitions.create('opacity', {\n        duration: theme.transitions.duration.short\n      })\n    }\n  };\n};\nvar CardActionArea = React.forwardRef(function CardActionArea(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      focusVisibleClassName = props.focusVisibleClassName,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"focusVisibleClassName\"]);\n\n  return React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, className),\n    focusVisibleClassName: clsx(focusVisibleClassName, classes.focusVisible),\n    ref: ref\n  }, other), children, React.createElement(\"span\", {\n    className: classes.focusHighlight\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardActionArea.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCardActionArea'\n})(CardActionArea);","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Card,\n  CardContent,\n  CardActionArea,\n  withStyles,\n  WithStyles,\n  Theme,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport Image from '../Image';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport LazyLoad from 'react-lazy-load';\n\nexport type variants = 'compact' | 'default';\n\ninterface IMediaCard {\n  children: React.ReactNode;\n\n  // either a string of the image URL or element that holds iconfont\n  urlOrElement: string | React.ReactElement;\n  title: string;\n  width: number | string;\n  variant?: variants;\n  defaultImageHeight?: string;\n  lazyLoad?: boolean;\n  onClick: React.MouseEventHandler;\n}\n\ntype IMedia = IMediaCard & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  mediaCardContainer: {\n    textAlign: 'center',\n    width: '100%',\n  },\n  mediaCardImageCompact: {\n    padding: theme.spacing(),\n  },\n  mediaCardContent: {\n    textTransform: 'uppercase',\n  }\n});\n\nconst MediaCard: React.FC<IMedia> = ({\n                                        children,\n                                        urlOrElement,\n                                        width,\n                                        defaultImageHeight,\n                                        classes,\n                                        title,\n                                        variant,\n                                        lazyLoad,\n                                        onClick,\n                                        ...rest\n                                      }) => {\n  const [elevation, setElevation] = React.useState(0);\n\n  const showCompact = variant === 'compact';\n\n  const display =\n    typeof (urlOrElement) === 'string'\n      ? <Image\n          src={urlOrElement || ''}\n          width={width}\n          aspectRatio={'100%'}\n          fromService={true}\n          className={classNames({\n            [classes.mediaCardImageCompact]: showCompact,\n          })}\n        />\n      : urlOrElement;\n\n  return (\n    <Card\n      className={classes.mediaCardContainer}\n      elevation={elevation}\n      onMouseEnter={() => setElevation(4)}\n      onMouseLeave={() => setElevation(0)}\n      onClick={onClick}\n      {...rest}\n    >\n      <CardActionArea>\n        {\n          lazyLoad\n            ? <div\n              style={defaultImageHeight ? {\n                height: defaultImageHeight,\n                marginTop: '10px',\n              } : null}\n            >\n              <LazyLoad\n                width='100%'\n                offset={500}\n              >\n                {display}\n              </LazyLoad>\n            </div>\n            : <div\n              style={defaultImageHeight ? {\n                height: defaultImageHeight,\n                marginTop: '10px'\n              } : null}\n            >\n              {display}\n            </div>\n        }\n        <CardContent className={classes.mediaCardContent}>\n          {children}\n        </CardContent>\n      </CardActionArea>\n    </Card>\n  );\n};\n\nexport default withStyles(styles)(MediaCard);\n","/* tslint:disable */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n  Divider,\n  Grid,\n  makeStyles,\n  MenuItem,\n  Theme,\n  Typography,\n  Chip\n} from '@material-ui/core';\nimport { Product } from '../../models';\n\nimport { IMap, } from 'ats-utils/src/Interfaces';\nimport { Image, } from '../../components';\nimport { OptionProps } from 'react-select/src/components/Option';\nimport { useTranslation } from 'react-i18next';\nimport DraftStatusChip from '../DraftStatusChip';\n\ninterface IOption {\n  id: string | number,\n  value: string | number,\n  label: string,\n  triggerDefaultOnClick?: boolean,\n  onClick: () => void,\n  data: IMap<Product>\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  isNotActive: {\n    marginLeft: theme.spacing(2),\n    color: theme.palette.primary.main,\n    fontStyle: 'italic',\n    textTransform: 'capitalize',\n    display: 'inline-block'\n  },\n  statusChip: {\n    marginLeft: theme.spacing()\n  },\n  titleEllipsis: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  }\n}));\n\nexport const mapTranslatedStatus: (status: string) => string = (status) => {\n  const { t } = useTranslation('translations')\n  switch(status) {\n    case 'discontinued' : return t('status.discontinued'); \n    case 'deleted' : return t('status.deleted');\n    case 'archived' : return t('status.archived');\n    default: return status;\n  }\n}\n\nconst ProductSelectOption = (props: OptionProps<IOption>) => {\n  const { data, innerProps, isFocused, isDisabled } = props; // this data object is injected from react-select\n  const imgSize = 50;\n  const media = `${data.data.getIn(['file', 'images', 'main', 'fileId'])}|fit:${imgSize},${imgSize}`;\n  const title = data.data.getIn(['description']);\n  const subtitle = `${data.data.getIn(['brand'])} | ${data.data.getIn(['productNumber'])}`;\n  const status = data.data.get('status');\n  const seriesStatus = data.data.get('seriesStatus');\n  const seriesIsDiscontinued = seriesStatus === 'discontinued';\n  const isNotActive = status !== 'active' || seriesIsDiscontinued;\n  const classes = useStyles();\n  const handleClick = useCallback((e) => {\n    data.onClick && data.onClick();\n    if (data.triggerDefaultOnClick) {\n      innerProps.onClick(e);\n    }\n  }, [data]);\n\n  const draftStatus = data && data.data.get('draft');\n  const pimStatus = data && data.data.get('pimStatus');\n\n  return (\n    <MenuItem\n      selected={isFocused}\n      disabled={isDisabled}\n      {...(innerProps as any)}\n      onClick={handleClick}\n      style={{height: 'auto', flexDirection: 'column', opacity: isNotActive ? 0.6 : 1, cursor: isNotActive ? 'default' : 'pointer'}}\n    >\n      <Grid\n        container={true}\n        direction='row'\n        wrap='nowrap'\n      >\n        <Grid\n        >\n          <Image\n            src={media}\n            width={`${imgSize}px`}\n            aspectRatio={'100%'}\n            fromService={true}\n          />\n        </Grid>\n        <Grid\n          style={{ padding: '0 10px', whiteSpace: 'nowrap', width: '100%', overflow: 'hidden'}}\n        >\n          <Grid\n            item={true}\n          >\n            <Typography\n              className={classes.titleEllipsis}\n            >\n              {title}\n              {\n                isNotActive &&\n                <span className={classes.isNotActive}>\n                  { mapTranslatedStatus(seriesIsDiscontinued ? seriesStatus : status) }\n                </span>\n              }\n            </Typography>\n          </Grid>\n          <Grid\n            item={true}\n          >\n            <Typography\n              className={classes.titleEllipsis}\n            >\n              {subtitle}\n            </Typography>\n          </Grid>\n        </Grid>\n        {/* chip status */}\n        {\n          data && draftStatus &&\n          <Grid\n          >\n            <DraftStatusChip\n              pimStatus={pimStatus}\n            />\n          </Grid>\n        }\n      </Grid>\n      <Divider/>\n    </MenuItem>\n  );\n}\n\nexport default ProductSelectOption;\n","import * as React from 'react';\nimport {\n  Theme,\n  IconButton,\n  Grid,\n  Typography,\n  Button,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\nimport {\n  IMap, IAction, IConfig,\n} from 'ats-utils/src/Interfaces';\nimport styled from 'styled-components';\nimport {\n  Product,\n  MissingRule,\n  Filter,\n  AttributeValue,\n  Drawing,\n} from '../../models';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport Image from '../Image';\nimport { SelectSeriesAction, SetEditingProductIndexAction, GetSeriesAction, SetCategoryIdAction, SeriesLoadingAction,  GetSeriesAndAddSeriesSpecificFiltersAction, SeriesFilterClearAction } from '../../modules/ProductModule/actions';\nimport { connect } from 'react-redux';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { List } from 'immutable';\nimport {\n  ClearDrawingRulesAction, ValidateDrawingAction,\n} from '../../modules/SpecModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  makeSelectSelectedSpecId,\n  makeSelectDrawing,\n  makeSelectMode,\n  makeSelectMasterDrawing,\n  makeSelectSelectedMasterSpecId,\n  makeSelectTemplateDrawing, makeSelectSelectedTemplateSpecId\n} from '../../modules/SpecModule/selectors';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport { SetOverlayComponentPropsAction } from '../../modules/ApplicationModule/actions';\nimport { ALTERNATIVES_DROP_DOWN_ID } from '../AlternativeDropDown';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport {\n  makeSelectIdentityObject,\n  makeSelectIsAtsSpecTool,\n} from '../../modules/AtsModule/selectors';\nimport {AMPLITUDE_EVENT, Mode} from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\n\nconst styles = (theme: Theme): StyleRules => ({\n  productStepBox: {\n    height: theme.spacing() * 6,\n    width: theme.spacing() * 6,\n    border: `1px solid ${theme.palette.primary[800]}`,\n    color: theme.palette.primary[800],\n    borderRadius: theme.shape.borderRadius,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    margin: '8px auto 4px'\n  },\n  productStepDescription: {\n    position: 'relative',\n    background: '#EEEDEB',\n    padding: 15,\n    margin: `0 ${theme.spacing() * 2.5}px`,\n    width: 200,\n  },\n  stepName: {\n    marginTop: theme.spacing(),\n  },\n  iconButton: {\n    marginRight: theme.spacing(),\n    padding: 0,\n  },\n  marginTopBot: {\n    margin: `${theme.spacing() * 0.5}px 0`,\n  },\n  endIcon: {\n    marginLeft: 0\n  },\n  productContainer: {\n    height: 105,\n    margin: '0 6px'\n  }\n});\n\ninterface IProductStepComponentProps {\n  addProduct?: (missingRule: IMap<MissingRule>) => void;\n  toggleOpenHandler?: (specProductId: number) => void;\n  onClick?: () => void;\n  clickedSpecProductId?: number;\n  dispatch: React.Dispatch<IAction>;\n  index: number;\n  specId: number;\n  currentDrawing: IMap<Drawing>;\n  specType: string;\n  selectedSpecProductId: number;\n  isAtsSpecTool: boolean;\n  isGuestUser: boolean;\n}\n\ninterface IProductStepComponentWithProductProps {\n  product: IMap<Product>;\n  deleteProduct?: () => void;\n  step: never;\n}\n\ninterface IProductStepComponentWithStepProps {\n  step: IMap<MissingRule>;\n  deleteProduct?: never;\n  product: never;\n}\n\ntype ProductStepComponentProps = (IProductStepComponentWithProductProps | IProductStepComponentWithStepProps) & IProductStepComponentProps;\n\ninterface IProductStepState {\n}\n\ntype ProductStepProps =\n  ProductStepComponentProps\n  & WithTranslation\n  & WithAmplitudeData\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst TriangleDiv = styled.div`\n  width: 0;\n  height:0;\n  position: absolute;\n  left: -20px;\n  top: 50%;\n  transform: translateY(-50%);\n  border-top: 20px solid transparent;\n  border-right: 20px solid #EEEDEB;\n  border-bottom: 20px solid transparent;\n  color: #73726D;\n`;\n\nclass ProductStep extends React.Component<ProductStepProps, IProductStepState> {\n\n  public defaultOnClick = () => {\n    const {\n      product,\n      onClick,\n      step,\n      dispatch,\n      index,\n      specId,\n      currentDrawing,\n    } = this.props;\n    // clear filter except `use` key (bariatric & child)\n    dispatch(new SeriesFilterClearAction({clearUseFilter: false}));\n\n    if (onClick != null) {\n      onClick();\n    } else if (product != null) {\n      // click on a product that's added to the drawing\n      const category = Product.getCategoryFromProduct(product);\n      const seriesId = product.get('series');\n      const currentProductId = product.get('id');\n\n      const filteredProducts = index === 0\n        ? List()\n        : currentDrawing\n          .get('products')\n          .filter((_product: IMap<Product>) => {\n            return _product.get('id') !== currentProductId;\n          })\n          .filter(x => x !== null);\n\n      const useAccessibilityStandard = currentDrawing && currentDrawing.get('useAccessibilityStandard');\n\n      dispatch(new SeriesLoadingAction());\n\n      // use validate endpoint in order to add rules to the getSeries call\n      // this is important when editing ADA products\n      // since ADA products needs to come with ADA filters\n      // without this, the drawing will have ADA toggled on but it will show ALL the series in that category\n      dispatch(new ValidateDrawingAction({\n        specId,\n        category,\n        useAccessibilityStandard,\n        products: filteredProducts,\n        seriesIdToOrderBy: seriesId,\n      }));\n\n      dispatch(new SelectSeriesAction(seriesId));\n\n      // action to get Series data and apply logic between the Product attributes and Series Attributes\n      // mainly for pre checking the checkboxes\n      dispatch(new GetSeriesAndAddSeriesSpecificFiltersAction({\n        seriesId,\n        productAttributes: product.get('attributes'),\n      }));\n\n      dispatch(new SetEditingProductIndexAction({\n        editProductIndex: index\n      }));\n\n      // clears the rule. if the drawing is 'completed' and you try to go in and edit the drawing, the rules will be 'complete' and the left side filters won't show\n      dispatch(new ClearDrawingRulesAction());\n\n    } else if (step != null) {\n      // onclick of the require products in the drawing\n      // that blue plus sign +\n      const categoryId = step.getIn(['category', 'id']);\n\n      dispatch(new SetCategoryIdAction({\n        productCategoryId: categoryId\n      }));\n\n      dispatch(new SeriesLoadingAction());\n      dispatch(new GetSeriesAction({\n        missingRule: step\n      }));\n    }\n  }\n\n  public editProduct = () => {\n    this.defaultOnClick();\n  }\n\n  public deleteProduct = () => {\n    const {\n      deleteProduct,\n      product,\n    } = this.props;\n    if (deleteProduct != null) {\n      deleteProduct();\n    } else {\n      console.debug('delete button clicked', { // tslint:disable-line\n        product,\n      });\n    }\n  }\n\n  public toggleOpen = () => {\n    const {\n      product,\n      toggleOpenHandler,\n    } = this.props;\n    if (product == null) {\n      this.defaultOnClick();\n    } else {\n      toggleOpenHandler(product.get('specProductId'));\n    }\n  }\n\n  public addProduct = (missingRule: IMap<MissingRule>) => {\n    const {\n      addProduct,\n    } = this.props;\n    if (addProduct != null) {\n      addProduct(missingRule);\n    } else {\n      console.debug('add button clicked', { // tslint:disable-line\n        missingRule,\n      });\n    }\n  }\n\n  public handleAlternativeFeatureClick = () => {\n    const {\n      product,\n      amplitudeData,\n    } = this.props;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.accessAlternativeFeature, amplitudeData({\n      hasFeatAlternativesAclRole: 'N/A',\n      accessPoint: 'Product Selection',\n      productId: product.get('id'),\n      productNumber: product.get('productNumber'),\n      brand: product.get('brand'),\n      categoryName: product.get('categoryName'),\n      status: product.get('status'),\n      pimStatus: product.get('pimStatus')\n    }));\n  }\n\n  public render() {\n    const {\n      classes,\n      product,\n      clickedSpecProductId,\n      step,\n      specId,\n      currentDrawing,\n      index,\n      selectedSpecProductId,\n      isAtsSpecTool,\n      t,\n      dispatch,\n      isGuestUser\n    } = this.props;\n\n    const media = product ? `${product.getIn(['file', 'images', 'main', 'fileId'])}|fit:100,100` : '';\n    const enableAlternativeFeature = isAtsSpecTool;\n    const isArchived = product ? product.get('status') === 'archived' : false;\n\n    return (\n      <Grid\n        container={true}\n        direction='row'\n        wrap='nowrap'\n        alignItems='center'\n        justify='flex-start'\n      >\n        <Grid item={true} className={classes.productContainer}>\n          <Grid container={true}  style={{display: 'flex', justifyContent: 'center'}}>\n            {\n              product ?\n                <Grid className={classes.stepName}>\n                  <Typography noWrap={true} style={{lineHeight: '100%'}}>\n                    {product.get('categoryName')}\n                  </Typography>\n                </Grid> :\n                <Grid container={true} direction='row' wrap='nowrap' alignItems='center' className={classes.stepName}>\n                  <Typography style={{lineHeight: '100%'}}>\n                    {step && step.getIn(['category', 'name'])}\n                  </Typography>\n                </Grid>\n            }\n          </Grid>\n          <Grid item={true} className={classes.productStepBox} onClick={this.toggleOpen}>\n            {\n              product != null\n              ? <Image\n                  src={media}\n                  width={'100px'}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                />\n              : <div>\n                  <FontAwesomeIcon\n                    icon='plus'\n                    style={{fontSize: '1.6rem'}}\n                  />\n                </div>\n            }\n          </Grid>\n          {\n            (isAtsSpecTool && product && !isGuestUser) && (\n              <Tooltip title={enableAlternativeFeature ? '' : t('alternativeModal.disabledAlternativeFeatureTooltip')}>\n                <Grid container={true} justify='center' onClick={() => this.handleAlternativeFeatureClick()}>\n                  <Button\n                    color='primary'\n                    size='small'\n                    disabled={!enableAlternativeFeature}\n                    endIcon={selectedSpecProductId === product.get('specProductId')\n                      ? <ExpandLessIcon color='inherit' fontSize='inherit' />\n                      : <ExpandMoreIcon color='inherit' fontSize='inherit' />\n                    }\n                    classes={{\n                      endIcon: classes.endIcon\n                    }}\n                    style={{ fontSize: '0.5rem' }}\n                    onClick={(e) => {\n                      dispatch(new SetOverlayComponentPropsAction({\n                        id: ALTERNATIVES_DROP_DOWN_ID,\n                        props: {\n                          specId,\n                          drawingId: currentDrawing?.get('id'),\n                          productId: product.get('id'),\n                          seriesName: product.get('seriesName'),\n                          specProductId: product.get('specProductId'),\n                          productIndex: index,\n                          anchorEl: e.currentTarget,\n                          basisProductNumber: product.get('productNumber'),\n                          basisBrand: product.get('brand'),\n                          basisBrandId: product.get('brandId'),\n                          basisCategoryname: product.get('categoryName'),\n                          basisCategoryId: product.get('category'),\n\n                          disableActions: isArchived,\n                          disableManageAlternativeButton: isArchived,\n                        }\n                      }));\n                    }}\n                  >\n                    {t('ProductStep.alternativeDropDown')}\n                  </Button>\n                </Grid>\n              </Tooltip>\n            )\n          }\n        </Grid>\n        <div\n          className={classes.productStepDescription}\n          style={{display: product && (product.get('specProductId') === clickedSpecProductId) ? 'block' : 'none'}}\n        >\n        <TriangleDiv />\n          <Grid\n            container={true}\n            direction='column'\n            style={{\n              width: '100%'\n            }}\n          >\n            <Grid\n              container={true}\n              item={true}\n              direction='row'\n              alignItems='center'\n              justify='space-between'\n            >\n              <Grid\n                item={true}\n              >\n                {\n                  product\n                    ? (\n                      <Typography color='inherit' variant='body1'>\n                        {product.get('productNumber')}\n                      </Typography>\n                    )\n                    : null\n                }\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Grid\n                  container={true}\n                  direction='row'\n                >\n                  <IconButton\n                    onClick={() => this.editProduct()}\n                    disabled={isArchived}\n                    classes={{\n                      root: classes.iconButton,\n                    }}\n                  >\n                    <EditRoundedIcon fontSize='small' />\n                  </IconButton>\n                  <IconButton\n                    onClick={() => this.deleteProduct()}\n                    classes={{\n                      root: classes.iconButton,\n                    }}\n                  >\n                    <DeleteIcon fontSize='small' />\n                  </IconButton>\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid\n              container={true}\n              item={true}\n              className={classes.marginTopBot}\n            >\n              {\n                product\n                  ? (\n                    <Typography variant='caption'>\n                      {/* IT-1805 make model with option fakenews for now */}\n                      {/* {`${t('ProductStep.modelOption')}: ${product.get('model')}`} */}\n                      {`${t('ProductStep.manufacturer')}: ${product.get('brand')}`}\n\n                    </Typography>\n                  )\n                  : null\n              }\n            </Grid>\n            <Grid\n              container={true}\n              item={true}\n            >\n              {\n                product\n                  ? (\n                    <Typography variant='caption'>\n                      {/* IT-1805 make price fakenews for now */}\n                      {/*`${t('ProductStep.priceOption')}`*/}\n                      {/* {`${t('ProductStep.priceOption')}${product.get('price')}`} */}\n                    </Typography>\n                  )\n                  : null\n              }\n            </Grid>\n          </Grid>\n        </div>\n      </Grid>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: ProductStepComponentProps) => {\n  const mode = makeSelectMode()(state);\n  const selectedSpecId = makeSelectSelectedSpecId()(state);\n  const selectedMasterSpecId = makeSelectSelectedMasterSpecId()(state);\n  const selectedTemplateSpecId = makeSelectSelectedTemplateSpecId()(state);\n  const overlayProps = makeSelectOverlayComponentProp(ALTERNATIVES_DROP_DOWN_ID)(state);\n  const selectedSpecProductId = overlayProps.specProductId;\n  const isGuestUser = !makeSelectIdentityObject()(state);\n  let specId;\n  let currentDrawing;\n  switch (mode) {\n    case Mode.master: {\n      specId = selectedMasterSpecId;\n      currentDrawing = makeSelectMasterDrawing()(state);\n      break;\n    }\n    case Mode.masterTemplate: {\n      specId = selectedTemplateSpecId;\n      currentDrawing = makeSelectTemplateDrawing()(state);\n      break;\n    }\n    default: {\n      specId = selectedSpecId;\n      currentDrawing = makeSelectDrawing()(state);\n    }\n  }\n\n  return {\n    specId,\n    currentDrawing,\n    selectedSpecProductId,\n    isGuestUser,\n    ...createStructuredSelector({\n      isAtsSpecTool: makeSelectIsAtsSpecTool(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ProductStepComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductStep);\n","/* tslint:disable */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n  Divider,\n  Grid,\n  makeStyles,\n  MenuItem,\n  Theme,\n  Typography,\n  Chip\n} from '@material-ui/core';\nimport { Series } from '../../models';\n\nimport { IMap, } from 'ats-utils/src/Interfaces';\nimport { Image, } from '../../components';\nimport { OptionProps } from 'react-select/src/components/Option';\nimport i18next from 'i18next';\nimport DraftStatusChip from '../DraftStatusChip';\nimport { mapTranslatedStatus } from '../ProductSelectOption';\n\ninterface IOption {\n  id: string | number,\n  value: string | number,\n  label: string,\n  triggerDefaultOnClick?: boolean,\n  onClick: () => void,\n  data: IMap<Series>\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  isNotActive: {\n    marginLeft: theme.spacing(2),\n    color: theme.palette.primary.main,\n    fontStyle: 'italic',\n    textTransform: 'capitalize',\n    display: 'inline-block'\n  },\n  statusChip: {\n    marginLeft: theme.spacing()\n  },\n  titleEllipsis: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  }\n}));\n\nconst SeriesSelectOption = (props: OptionProps<IOption>) => {\n  const { data, innerProps, isFocused, isDisabled } = props;\n  const imgSize = 50;\n  const media = `${data.data.getIn(['file', 'images', 'main', 'fileId'])}|fit:${imgSize},${imgSize}`;\n  const title = data.data.getIn(['description']);\n  const subtitle = `${data.data.getIn(['brand'])} | ${data.data.getIn(['productNumber'])}`;\n  const status = data.data.get('status');\n  const isNotActive = status !== 'active';\n  const classes = useStyles();\n  const handleClick = useCallback((e) => {\n    data.onClick && data.onClick();\n    if (data.triggerDefaultOnClick) {\n      innerProps.onClick(e);\n    }\n  }, [data]);\n\n  const draftStatus = data && data.data.get('draft');\n  const pimStatus = data && data.data.get('pimStatus');\n\n  return (\n    <MenuItem\n      selected={isFocused}\n      disabled={isDisabled}\n      {...(innerProps as any)}\n      onClick={handleClick}\n      style={{ height: 'auto', flexDirection: 'column', opacity: isNotActive ? 0.6 : 1, cursor: isNotActive ? 'default' : 'pointer' }}\n    >\n      <Grid\n        container={true}\n        direction='row'\n        justify='flex-start'\n        wrap='nowrap'\n      >\n        <Grid\n          item={true}\n        >\n          <Image\n            src={media}\n            width={`${imgSize}px`}\n            aspectRatio={'100%'}\n            fromService={true}\n          />\n        </Grid>\n        <Grid\n          style={{ padding: '0 10px', whiteSpace: 'nowrap', width: '100%', overflow: 'hidden'}}\n        >\n          <Grid\n            item={true}\n          >\n            <Typography\n              className={classes.titleEllipsis}\n            >\n              {title}\n              {\n                isNotActive &&\n                <span className={classes.isNotActive}>\n                  { mapTranslatedStatus(status) }\n                </span>\n              }\n            </Typography>\n          </Grid>\n          <Grid\n            item={true}\n          >\n            <Typography\n              className={classes.titleEllipsis}\n            >\n              {subtitle}\n            </Typography>\n          </Grid>\n        </Grid>\n        {/* chip status */}\n        {\n          data && draftStatus &&\n          <Grid>\n            <DraftStatusChip\n              pimStatus={pimStatus}\n            />\n          </Grid>\n        }\n      </Grid>\n      <Divider />\n    </MenuItem>\n  );\n}\n\nexport default SeriesSelectOption;\n","import React from 'react';\nimport {components, MenuListComponentProps } from 'react-select';\nimport {Checkbox, FormControlLabel, Typography} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\n\ninterface IProps<T> extends MenuListComponentProps<T> {\n    checked: boolean;\n    onChange: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n}\nfunction MenuListComponent<T>(props: IProps<T>) {\n    const { checked, onChange, ...restProps } = props;\n    const { t } = useTranslation('translations');\n    return (\n        <>\n            <components.MenuList {...restProps}>\n                {props.children}\n            </components.MenuList>\n            <div style={{ textAlign: 'right', padding: '0.25rem .5rem', borderTop: 'solid 1px lightgray' }}>\n                <Checkbox style={{transform : 'scale(0.75)'}} checked={checked} onChange={onChange} />\n                <Typography variant='caption'>{t('ProductCategorySelection.disableDiscontinued')}</Typography>\n            </div>\n        </>\n    );\n}\n\nexport default MenuListComponent;","import * as React from 'react';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  Divider,\n  Select,\n  MenuItem,\n  FormControl,\n  FormHelperText,\n  Button,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  QuickSearchType,\n} from '../../modules/ProductModule/constants';\nimport ProductSelectOption from '../ProductSelectOption';\nimport SeriesSelectOption from '../SeriesSelectOption';\nimport CategorySelectOption from '../CategorySelectOption';\nimport ControlledDrawer from '../ControlledDrawer';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  SelectCategoryAction,\n  SelectNewCategoryAction,\n  ClearQuickSearchAction,\n  ClearAllSearchResultsAction,\n  GetSeriesAndAddSeriesSpecificFiltersAction,\n  SetHideDiscontinuedSeriesAction\n} from '../../modules/ProductModule/actions';\nimport {\n  Theme,\n  Grid,\n} from '@material-ui/core';\nimport {\n  useTheme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectSearchResults,\n  makeSelectFilteredProductCategories,\n  selectSearchProductSelectionGroupFormCategorySelect,\n  makeSelectProductCategories,\n  makeSelectSearchTerm,\n  makeSelectSkipRuleEngine,\n  makeSelectIsLoadingQuickSearchResults,\n  makeSelectHideDiscontinuedSeries\n} from '../../modules/ProductModule/selectors';\nimport {\n  QuickSearchAction,\n  CategorySearchTypeAction,\n  SelectSeriesAction,\n  SelectCategoryAndGetSpecsAction,\n  SkipRuleEngineAction,\n} from '../../modules/ProductModule/actions';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\nimport {\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  Product,\n  Series,\n  MissingRule,\n  ProductCategory,\n  ProductCategoryGroup,\n  Drawing,\n} from '../../models';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport CrossReferenceModal, {\n  MODAL_ID,\n} from '../../containers/CrossReferenceModal';\nimport SearchIcon from '@material-ui/icons/Search';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../FieldReactSelect';\nimport { useEffect } from 'react';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport SpecToolXrefButton from '../SpecToolXrefButton';\nimport { makeSelectDrawing, makeSelectMasterDrawing, makeSelectMode } from '../../modules/SpecModule/selectors';\nimport {AMPLITUDE_EVENT, Mode} from '../../constants';\nimport { makeSelectOverlayComponents } from '../../modules/ApplicationModule/selectors';\nimport MenuListComponent from './MenuListComponent';\nimport { SetTimerStartAction } from '../../modules/ApplicationModule/actions';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { makeSelectIdentityObject } from '../../modules/AtsModule/selectors';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    height: theme.spacing() * 6.5,\n    display: 'block',\n  },\n  quickSearchInput: {\n    fontSize: 27,\n    fontWeight: 'bold',\n  },\n  searchContainer: {\n    textAlign: 'center',\n    width: '80%',\n    margin: '0 auto',\n  },\n  searchContainerCompact: {\n    textAlign: 'left',\n    width: '100%',\n    margin: 0,\n  },\n  searchLabelCompact: {\n    maxWidth: '10%',\n  },\n  xrefIcon: {\n    color: theme.palette.primary.main,\n    fontSize: 24\n  },\n  xrefButton: {\n    color: theme.palette.primary.main,\n    minWidth: 0,\n  }\n});\n\nexport type variants = 'compact' | 'default';\n\ninterface IQuickSearchInputComponentProps {\n  categorySelect?: QuickSearchType;\n  variant?: variants;\n  setCategorySearchTerm: (term: string) => void;\n}\n\ninterface IQuickSearchInputProps extends IQuickSearchInputComponentProps {\n  quickSearch: any;\n  searchResults: List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>;\n  allCategories: List<IMap<ProductCategoryGroup>>;\n  categories: any;\n  categorySelect: any;\n  searchTerm: string;\n  dispatch: any;\n  // selectCategory: any;\n  categorySearchType: any;\n  skipRules: boolean;\n  isLoadingQuickSearchResults: boolean;\n  selectedDrawing: IMap<Drawing>;\n  isOverlayComponents: boolean;\n  isHideDiscontinuedSeries: boolean;\n  isRegisteredUser: boolean;\n  updateHideDiscontinuedAndQuickSearch: (checked: boolean, query: string) => void;\n}\n\ntype QuickSearchInputProps = WithTranslation & InjectedFormProps & IQuickSearchInputProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst QuickSearchInput: React.FC<QuickSearchInputProps> = (props) => {\n\n  const {\n    classes,\n    quickSearch,\n    categorySearchType,\n    categorySelect,\n    searchResults,\n    t,\n    allCategories,\n    dispatch,\n    // selectCategory,\n    variant,\n    searchTerm,\n    skipRules,\n    isLoadingQuickSearchResults,\n    selectedDrawing,\n    isOverlayComponents,\n    isHideDiscontinuedSeries,\n    isRegisteredUser,\n    updateHideDiscontinuedAndQuickSearch,\n    setCategorySearchTerm,\n  } = props;\n\n  const theme = useTheme();\n  const headerRef = React.useRef<HTMLDivElement>(null);\n\n  const [inputValue, setInputValue] = React.useState('');\n  const [displayFullXrefButton, setDisplayFullXrefButton] = React.useState(false);\n\n  useEffect(() => {\n    dispatch(new ClearAllSearchResultsAction());\n    return () => {\n      dispatch(new ClearQuickSearchAction());\n      dispatch(new ClearAllSearchResultsAction());\n    };\n  }, []);\n\n  useEffect(() => {\n    if (headerRef.current) {\n      resizeObserver.observe(headerRef.current);\n    }\n    return () => {\n      if (headerRef.current) {\n        resizeObserver.unobserve(headerRef.current);\n      }\n    };\n  }, [headerRef]);\n\n  const resizeObserver = new ResizeObserver((entries) => {\n    const width = entries[0].target.clientWidth;\n    if (!width) { return; }\n    if (width >= 720) {\n      setDisplayFullXrefButton(true);\n    } else {\n      setDisplayFullXrefButton(false);\n    }\n  });\n\n  const showCompact = variant === 'compact';\n  const isCategorySearchType = categorySelect === QuickSearchType.CATEGORY ;\n\n  const onSeriesSelected = (series: IMap<Series>) => () => {\n    // set timer start here, for amplitude stuff to track time when series is fully loaded\n    dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n    const id = series.get('id');\n    const categoryId = series.get('category');\n    const categoryName = series.get('categoryName');\n    const allCategoryMap = allCategories.reduce((listOfCategories, productCategoryGroup) => {\n      return listOfCategories.concat(productCategoryGroup.get('productTypes'));\n    }, List());\n    const foundProductCategory = allCategoryMap.find((cat) => cat.get('id') === categoryId);\n    const productCategory: IMap<ProductCategory> = foundProductCategory != null\n      ? foundProductCategory\n      : new ProductCategory({ id: categoryId, name: categoryName }).toImmutable();\n    const hasProduct = Boolean((selectedDrawing?.get('products') || List()).count());\n    dispatch(new SelectCategoryAction({ productCategoryId: categoryId, selectDrawing: !hasProduct }));\n    dispatch(new SelectNewCategoryAction({\n      missingRule: new MissingRule({\n        category: productCategory,\n        filters: fromJS({\n          and: [\n            {\n              category: {\n                eq: productCategory.get('id'),\n              }\n            },\n            {\n              id: {\n                eq: id,\n              }\n            }\n          ]\n        }),\n      }).toImmutable(),\n      skipRules: true\n    }));\n    dispatch(new SkipRuleEngineAction(true));\n    dispatch(new SelectSeriesAction(id));\n    // clear the search IT-2345\n    dispatch(new ClearQuickSearchAction());\n  };\n\n  const onProductSelected = (product: IMap<Product>) => () => {\n    // set timer start here, for amplitude stuff to track time when series is fully loaded\n    dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n    const categoryId = product.get('category');\n    const categoryName = product.get('categoryName');\n    const seriesId = product.get('series');\n    const allCategoryMap = allCategories.reduce((listOfCategories, productCategoryGroup) => {\n      return listOfCategories.concat(productCategoryGroup.get('productTypes'));\n    }, List());\n    const foundProductCategory = allCategoryMap.find((cat) => cat.get('id') === categoryId);\n    const productCategory: IMap<ProductCategory> = foundProductCategory != null\n      ? foundProductCategory\n      : new ProductCategory({ id: categoryId, name: categoryName }).toImmutable();\n    const hasProduct = Boolean((selectedDrawing?.get('products') || List()).count());\n    dispatch(new SelectCategoryAction({ productCategoryId: categoryId, selectDrawing: !hasProduct }));\n    dispatch(new SelectNewCategoryAction({\n      missingRule: new MissingRule({\n        category: productCategory,\n        filters: fromJS({\n          and: [\n            {\n              category: {\n                eq: productCategory.get('id'),\n              }\n            },\n            {\n              id: {\n                eq: seriesId,\n              }\n            }\n          ]\n        }),\n      }).toImmutable(),\n      skipRules: true\n    }));\n    dispatch(new SkipRuleEngineAction(true));\n    dispatch(new SelectSeriesAction(seriesId));\n\n    // because of \"checkboxes\" options we have to do this extra logic that's also on product selection page\n    // in order to compare attributes between series and product\n    // checkboxes have attribute keys that exists on product but nested in series with in values\n    dispatch(new GetSeriesAndAddSeriesSpecificFiltersAction({\n      seriesId,\n      productAttributes: product.get('attributes'),\n    }));\n    // clear the search IT-2345\n    dispatch(new ClearQuickSearchAction());\n  };\n\n  const parsedSearchResults = (() => {\n    if (searchTerm === '') {\n      return [];\n    }\n    switch (categorySelect) {\n      case QuickSearchType.PRODUCT:\n        return searchResults.slice(0, 100).map((result: IMap<Product>) => {\n          const brand = result.get('brand');\n          const name = result.get('name');\n          const productNumber = result.get('productNumber');\n          const id = result.get('id');\n          const isNotActive = result.get('status') !== 'active' || result.get('seriesStatus') === 'discontinued';\n          return {\n            label: `${brand} - ${name}`,\n            value: `${productNumber}|${brand}`, // should match what we send to backend to filter for\n            id,\n            data: result,\n            isDisabled: isNotActive,\n            onClick: isNotActive ? null : onProductSelected(result),\n          };\n        }).valueSeq().toArray();\n      case QuickSearchType.SERIES:\n        const mappedSearchResults = searchResults.slice(0, 100).map((series: IMap<Series>) => {\n          const brand = series.get('brand');\n          const name = series.get('name');\n          const description = series.get('description');\n          const id = series.get('id');\n          const isNotActive = series.get('status') !== 'active';\n\n          return {\n            label: `${brand} - ${name}`,\n            value: `${name}|${brand}|${description}`, // should match what we send to backend to filter for\n            id,\n            data: series,\n            isDisabled: isNotActive,\n            onClick: isNotActive ? null : onSeriesSelected(series),\n          };\n        }).valueSeq().toArray();\n        return mappedSearchResults;\n      // case QuickSearchType.CATEGORY:\n      //   return searchResults.slice(0, 100).map((result: IMap<ProductCategory>) => {\n      //     const name = result.get('name');\n      //     const id = result.get('id');\n      //     return {\n      //       label: name,\n      //       value: name,\n      //       id,\n      //       data: result,\n      //       onClick: () => {\n      //         handleSelectCategory(result);\n      //       },\n      //     };\n      //   }).valueSeq().toArray();\n      // one day do QuickSearchType.XREF\n      default:\n        return searchResults.slice(0, 100).map((result: any) => ({\n          label: `${result.get('brand')} - ${result.get('name')}`,\n          value: safeStringify(result.toJS()),\n          id: result.get('id'),\n          data: result,\n          isDisabled: result.get('status') !== 'active'\n        })).valueSeq().toArray();\n    }\n  })();\n\n  const optionComponent = (() => {\n    switch (categorySelect) {\n      case QuickSearchType.PRODUCT:\n        return ProductSelectOption;\n      case QuickSearchType.SERIES:\n        return SeriesSelectOption;\n      // case QuickSearchType.CATEGORY:\n      //   return CategorySelectOption;\n      default:\n        return null;\n    }\n  })();\n\n  // const handleSelectCategory = (type) => {\n  //   const productsInDrawing = selectedDrawing && selectedDrawing.get('products') || List();\n\n  //   if (productsInDrawing.size === 0) {\n  //     return selectCategory(type);\n  //   }\n  //   !skipRules ? selectCategory(type) : selectCategory(type, skipRules);\n  // };\n\n  return (\n    <>\n      <Grid\n        ref={headerRef}\n        container={true}\n        spacing={2}\n        justify='center'\n        wrap='nowrap'\n        style={{\n          width: showCompact ? '100%' : '80%', margin: '0 auto',\n          backgroundColor: 'white',\n          borderRadius: 8,\n          padding: theme.spacing(0.5, isRegisteredUser ? 1 : 2, 0.5, 2),\n          boxShadow: '0px 2px 5px 0px rgba(0, 0, 0, 0.26), 0px 2px 10px 0px rgba(0, 0, 0, 0.16)',\n        }}\n      >\n        <Grid spacing={2} container={true} justify='center' alignItems='center' style={{ width: 'auto', flexGrow: 1 }} wrap='nowrap'>\n          <Grid item={true} className={isOverlayComponents ? null : 'productSearchTour-3'}>\n            <FormControl>\n              <Select\n                onChange={(e) => {\n                  const newSearchType = e.target.value as QuickSearchType;\n                  categorySearchType(newSearchType);\n                  // clear searchTerm\n                  dispatch(new ClearQuickSearchAction());\n\n                  if (newSearchType === QuickSearchType.CATEGORY) {\n                    setCategorySearchTerm(inputValue);\n                  } else if (inputValue) {\n                    quickSearch(inputValue.trim());\n                  }\n                }}\n                value={categorySelect}\n                placeholder={t('placeholders.ProductSearch')}\n              >\n                <MenuItem\n                  value={QuickSearchType.CATEGORY}\n                >\n                  {t('ProductCategorySelection.category')}\n                </MenuItem>\n                <MenuItem\n                  value={QuickSearchType.SERIES}\n                >\n                  {t('ProductCategorySelection.series')}\n                </MenuItem>\n                <MenuItem\n                  value={QuickSearchType.PRODUCT}\n                >\n                  {t('ProductCategorySelection.product')}\n                </MenuItem>\n              </Select>\n            </FormControl>\n          </Grid>\n          <Grid\n            spacing={2}\n            container={true}\n            item={true}\n            className={isOverlayComponents ? null : 'productSearchTour-1'}\n            justify='center'\n            alignItems='flex-end'\n            style={{ width: 'auto', flexGrow: 1 }}\n          >\n            <Grid item={true} style={{ flexGrow: 1, minWidth: 300, zIndex: 5}}>\n              <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n                name='categorySearch'\n                component={FieldReactSelect}\n                props={{\n                  inputProps: {\n                    inputValue,\n                    onInputChange: (val: string, { action }) => {\n                      if (action === 'input-change') {\n                        const trimmedVal = val.trim();\n                        setInputValue(val);\n                        if (isCategorySearchType) {\n                          setCategorySearchTerm(val);\n                        } else if (trimmedVal !== '') {\n                          quickSearch(trimmedVal);\n                        }                     }\n                    },\n                    onKeyDown: (e) => {\n                      if (e.key === 'Enter') {\n                        e.preventDefault();\n                      }\n                    },\n                    options: isLoadingQuickSearchResults ? [] : parsedSearchResults, // gives [] when loading, so it shows loading status UI\n                    getOptionLabel: (opt) => opt.label,\n                    getOptionValue: (opt) => opt.data,\n                    components: {\n                      Option: optionComponent,\n                      MenuList: (_props) => isCategorySearchType ? <span/> : <MenuListComponent {..._props} checked={isHideDiscontinuedSeries} onChange={(_, checked) => updateHideDiscontinuedAndQuickSearch(checked, inputValue)} />,\n                      IndicatorSeparator: null,\n                      DropdownIndicator: (dropdownProps) => <SearchIcon fontSize='small' />\n                    },\n                    isLoading: isLoadingQuickSearchResults,\n                    placeholder: t('placeholders.genericSearch'),\n                    loadingMessage: () => t('generalLoading.loading'),\n                    noOptionsMessage: () => t('generalDropdown.noOptions'),\n                    styles: {\n                      control: (provided, state) => ({\n                        ...provided,\n                        backgroundColor: 'transparent',\n                        boxShadow: 'none',\n                        marginBottom: 6,\n                        borderTop: 0,\n                        borderRight: 0,\n                        borderLeft: 0,\n                        borderRadius: 0,\n                        borderColor: theme.typography.subtitle2.color,\n                        '&:hover': {\n                          borderColor: theme.palette.primary.main,\n                        },\n                      }),\n                      loadingIndicator: (provided) => ({\n                        ...provided,\n                        display: isCategorySearchType ? 'none' : 'initial',\n                      }),\n                    }\n                  },\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  helperText: false,\n                }}\n              />\n            </Grid>\n          </Grid>\n        </Grid>\n        {\n          isRegisteredUser ? (\n            <Grid container={true} alignItems='center' style={{width: 'auto'}}>\n              <SpecToolXrefButton\n                searchTerm={searchTerm}\n                allCategories={allCategories}\n              >\n                {\n                  <Button\n                    className={classes.xrefButton}\n                  >\n                    <ShuffleIcon className={classes.xrefIcon} />\n                    { displayFullXrefButton ? t('CrossReference.xrefTool') : null }\n                  </Button>\n                }\n              </SpecToolXrefButton>\n            </Grid>\n          ) : null\n        }\n      </Grid>\n    </>\n  );\n};\n\nconst mapStateToProps = (state) => {\n  const isMaster = makeSelectMode()(state) === Mode.master;\n\n  const selectedDrawing = isMaster\n    ? makeSelectMasterDrawing()(state)\n    : makeSelectDrawing()(state);\n\n  const isOverlayComponents = makeSelectOverlayComponents()(state).find(x => x === true);\n\n  return {\n    selectedDrawing,\n    isOverlayComponents,\n    ...createStructuredSelector({\n      searchResults: makeSelectSearchResults(),\n      allCategories: makeSelectProductCategories(),\n      categories: makeSelectFilteredProductCategories(),\n      categorySelect: selectSearchProductSelectionGroupFormCategorySelect(),\n      searchTerm: makeSelectSearchTerm(),\n      skipRules: makeSelectSkipRuleEngine(),\n      isLoadingQuickSearchResults: makeSelectIsLoadingQuickSearchResults(),\n      isHideDiscontinuedSeries: makeSelectHideDiscontinuedSeries(),\n      isRegisteredUser: makeSelectIdentityObject(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    quickSearch: (query: string) => {\n      dispatch(new QuickSearchAction(query));\n    },\n    categorySearchType: (type: QuickSearchType) => {\n      dispatch(new CategorySearchTypeAction(type));\n    },\n    updateHideDiscontinuedAndQuickSearch: (checked: boolean, query: string) => {\n      dispatch(new SetHideDiscontinuedSeriesAction(checked));\n      const trimmedQuery = query.trim();\n      if (trimmedQuery !== '') {\n        dispatch(new QuickSearchAction(query));\n      }\n    },\n    // selectCategory: (productCategory: IMap<ProductCategory>, skipRules: boolean) => {\n    //   if (!skipRules) {\n    //     dispatch(new SelectCategoryAndGetSpecsAction({ productCategory }));\n\n    //     // reset the state so the next call doesn't skip rules\n    //     dispatch(new SkipRuleEngineAction(true));\n    //   } else {\n    //     dispatch(new SelectCategoryAction({ productCategoryId: productCategory.get('id') }));\n    //     dispatch(SelectNewCategoryAction.withCategoryFilter(productCategory, true));\n    //   }\n    // },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IQuickSearchInputComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(QuickSearchInput);\n","\nimport * as React from 'react';\nimport { Theme } from '@material-ui/core/styles';\n\nimport Image, { IImageComponentProps } from '../Image';\nimport { styled } from '@material-ui/styles';\nimport { WithTheme } from '@material-ui/core/styles';\n\n\n\nconst DivInterceptor = (props: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & IRoundImageWrapperProps) => {\n  const {\n    size,\n    padding,\n    shadow,\n    ...rest\n  } = props;\n\n  return <div {...rest} />;\n};\n\nconst RoundImageWrapper = styled(DivInterceptor)(({theme, size, padding, shadow}: IRoundImageWrapperProps & ITheme) => ({\n  boxShadow: theme.shadows[shadow],\n  padding: theme.spacing() * padding,\n  display: 'flex',\n  flex: '0 0 auto',\n  width: theme.spacing() * size,\n  height: theme.spacing() * size,\n  borderRadius: theme.spacing() * size,\n  backgroundColor: 'white',\n}));\n\ninterface IRoundShadowImageComponentProps {\n  size?: number;\n  padding?: number;\n  shadow?: number;\n  ImageProps?: IImageComponentProps;\n}\n\ninterface IRoundImageWrapperProps {\n  size: number;\n  padding: number;\n  shadow: number;\n}\n\ninterface ITheme {\n  theme: Theme;\n}\n\nconst RoundShadowImage: React.SFC<IRoundShadowImageComponentProps> = (props) => {\n  const {\n    size = 12,\n    padding = 3,\n    shadow = 4,\n    ImageProps\n  } = props;\n\n  // const shadow = _shadow != null ? _shadow : 4;\n\n  return (<RoundImageWrapper\n    size={size}\n    padding={padding}\n    shadow={shadow}\n  >\n    <Image\n      {...ImageProps}\n    />\n  </RoundImageWrapper>);\n};\n\nexport default RoundShadowImage;\n","import * as React from 'react';\nimport { Route, RouteProps, RouteComponentProps } from 'react-router-dom';\nimport { matchPathPartial, singleOrArray } from 'ats-utils/src';\n\nconst renderMergedProps = (component: React.ReactType, ...rest) => {\n  const finalProps = Object.assign({}, ...rest);\n  return (\n    React.createElement(component, finalProps)\n  );\n};\n\n\ninterface IRoutePartialPathsComponentProps<T extends object> {\n  partialPath?: string | string[];\n  children: (routeProps: RouteComponentProps<T>) => React.ReactNode;\n}\n\ninterface IRoutePartialPathsProps extends RouteProps {\n}\n\nclass RoutePartialPath<T extends object> extends React.Component<IRoutePartialPathsProps & IRoutePartialPathsComponentProps<T>> {\n  public render() {\n    const {\n      children,\n      partialPath: _partialPath = '',\n      ...rest\n    } = this.props;\n    const partialPath = singleOrArray(_partialPath);\n    return (\n      <Route\n        {...rest}\n        render={\n          routeProps => {\n            const {\n              history,\n              location,\n              match,\n            } = routeProps;\n            const pathname = location.pathname;\n            const pathMatchPartial = matchPathPartial<T>(pathname, partialPath);\n            return children({...routeProps, match: pathMatchPartial });\n          }\n        }/>\n    );\n  }\n}\nexport default RoutePartialPath;","import * as React from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\n\nconst renderMergedProps = (component: React.ReactType, ...rest) => {\n  const finalProps = Object.assign({}, ...rest);\n  return (\n    React.createElement(component, finalProps)\n  );\n};\n\n\ninterface IRouteWithPropsProps extends RouteProps {\n  // component?: React.ElementType;\n  componentProps?: object;\n}\n\nconst RouteWithProps: React.SFC<IRouteWithPropsProps> = ({\n  component,\n  componentProps,\n  ...rest\n}) => {\n  return (\n    <Route\n      {...rest}\n      render={\n        routeProps => {\n          return renderMergedProps(component, routeProps, componentProps);\n        }\n      }/>\n  );\n};\n\nexport default RouteWithProps;","import * as React from 'react';\nimport {\n  Card,\n  CardContent,\n  Theme,\n  withStyles,\n  WithStyles,\n  Typography,\n} from '@material-ui/core';\nimport {\n  compose,\n} from 'redux';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\n\nimport {\n  IconProp,\n} from '@fortawesome/fontawesome-svg-core';\n\nimport classnames from 'classnames';\n\ninterface ISelectableCardComponentProps {\n  selected: boolean;\n  label?: string;\n  icon?: IconProp;\n  onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n}\n\ntype SelectableProps = ISelectableCardComponentProps & React.HTMLAttributes<HTMLDivElement> & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst SelectableCard = (props: SelectableProps) => {\n  const {\n    children,\n    classes,\n    selected,\n    label,\n    icon,\n    onClick,\n    ...rest\n  } = props;\n  return (\n    <Card\n      classes={{\n        root: classes.selectableCard\n      }}\n      onClick={onClick}\n      {...rest}\n    >\n      <CardContent>\n        {\n          selected\n          ? <FontAwesomeIcon\n              className={classes.selectedCheckIcon}\n              icon='check-circle'\n              size='lg'\n            />\n          : undefined\n        }\n        {\n          icon != null\n          ? <FontAwesomeIcon\n              className={classnames(classes.iconFontawesomeIcon, { [classes.selectedIconFontawesomeIcon]: selected })}\n              icon={icon}\n              size='4x'\n            />\n          : undefined\n        }\n        {\n          label != null\n          ? <Typography\n              className={classes.labelTypography}\n              id={label?.toLowerCase().replace(/\\s+/g, '_')}\n            >\n              {label}\n            </Typography>\n          : undefined\n        }\n        {children}\n      </CardContent>\n    </Card>\n  );\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  selectableCard: {\n    width: '100%',\n    height: 125,\n    '&:hover': {\n      backgroundColor: theme.palette.grey[300],\n    },\n    border: `1px solid ${theme.palette.grey[300]}`,\n    position: 'relative',\n  },\n  selectedCheckIcon: {\n    color: theme.palette.primary.main,\n    position: 'absolute',\n    top: theme.spacing(1.5),\n    right: theme.spacing(1.5),\n  },\n  labelTypography: {\n    padding: theme.spacing(),\n    fontSize: '12px',\n    textAlign: 'center',\n  },\n  iconFontawesomeIcon: {\n    padding: theme.spacing(),\n    display: 'block',\n    margin: '0 auto',\n    color: theme.palette.text.secondary,\n  },\n  selectedIconFontawesomeIcon: {\n    color: theme.palette.primary[700],\n  },\n});\n\nexport default compose<React.ComponentClass<ISelectableCardComponentProps>>(\n  withStyles(styles),\n)(SelectableCard);","/* eslint no-unused-vars:0 */\n// testing\nimport * as React from 'react';\nimport styles from './styles.scss';\nimport styled, { css } from 'styled-components';\nimport classnames from 'classnames';\nimport styleUtils from '../../style';\n\ninterface IStyledImportProps {\n  className?: string;\n  children?: JSX.Element;\n}\n\n// Import style from stylesheet (scss)\nconst StyleImport: React.FC<IStyledImportProps> = (props) => {\n  return (<div className={classnames([props.className, styles['test-style']])}>\n    {props.children}\n  </div>);\n};\n\n// Use Styled-Components to programatically override stylesheet styles\nexport const StyleTest = styled(StyleImport)`\n  color: blue;\n  ${\n    styleUtils.media['sm-max']`\n      color: green;\n    `\n  }\n`;\n\nexport default StyleTest;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n// @inheritedComponent Tooltip\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { emphasize, withStyles } from '@material-ui/core/styles';\nimport Fab from '@material-ui/core/Fab';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the Fab component. */\n    fab: {\n      margin: 8,\n      color: theme.palette.text.secondary,\n      backgroundColor: theme.palette.background.paper,\n      '&:hover': {\n        backgroundColor: emphasize(theme.palette.background.paper, 0.15)\n      },\n      transition: \"\".concat(theme.transitions.create('transform', {\n        duration: theme.transitions.duration.shorter\n      }), \", opacity 0.8s\"),\n      opacity: 1\n    },\n\n    /* Styles applied to the Fab component if `open={false}`. */\n    fabClosed: {\n      opacity: 0,\n      transform: 'scale(0)'\n    },\n\n    /* Styles applied to the root element if `tooltipOpen={true}`. */\n    staticTooltip: {\n      position: 'relative',\n      display: 'flex',\n      '& $staticTooltipLabel': {\n        transition: theme.transitions.create(['transform', 'opacity'], {\n          duration: theme.transitions.duration.shorter\n        }),\n        opacity: 1\n      }\n    },\n\n    /* Styles applied to the root element if `tooltipOpen={true}` and `open={false}`. */\n    staticTooltipClosed: {\n      '& $staticTooltipLabel': {\n        opacity: 0,\n        transform: 'scale(0.5)'\n      }\n    },\n\n    /* Styles applied to the static tooltip label if `tooltipOpen={true}`. */\n    staticTooltipLabel: _extends({\n      position: 'absolute'\n    }, theme.typography.body1, {\n      backgroundColor: theme.palette.background.paper,\n      borderRadius: theme.shape.borderRadius,\n      boxShadow: theme.shadows[1],\n      color: theme.palette.text.secondary,\n      padding: '4px 16px'\n    }),\n\n    /* Styles applied to the root if `tooltipOpen={true}` and `tooltipPlacement=\"left\"`` */\n    tooltipPlacementLeft: {\n      alignItems: 'center',\n      '& $staticTooltipLabel': {\n        transformOrigin: '100% 50%',\n        right: '100%',\n        marginRight: 8\n      }\n    },\n\n    /* Styles applied to the root if `tooltipOpen={true}` and `tooltipPlacement=\"right\"`` */\n    tooltipPlacementRight: {\n      alignItems: 'center',\n      '& $staticTooltipLabel': {\n        transformOrigin: '0% 50%',\n        left: '100%',\n        marginLeft: 8\n      }\n    }\n  };\n};\nvar SpeedDialAction = React.forwardRef(function SpeedDialAction(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$delay = props.delay,\n      delay = _props$delay === void 0 ? 0 : _props$delay,\n      _props$FabProps = props.FabProps,\n      FabProps = _props$FabProps === void 0 ? {} : _props$FabProps,\n      icon = props.icon,\n      id = props.id,\n      open = props.open,\n      TooltipClasses = props.TooltipClasses,\n      _props$tooltipOpen = props.tooltipOpen,\n      tooltipOpenProp = _props$tooltipOpen === void 0 ? false : _props$tooltipOpen,\n      _props$tooltipPlaceme = props.tooltipPlacement,\n      tooltipPlacement = _props$tooltipPlaceme === void 0 ? 'left' : _props$tooltipPlaceme,\n      tooltipTitle = props.tooltipTitle,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"delay\", \"FabProps\", \"icon\", \"id\", \"open\", \"TooltipClasses\", \"tooltipOpen\", \"tooltipPlacement\", \"tooltipTitle\"]);\n\n  var _React$useState = React.useState(tooltipOpenProp),\n      tooltipOpen = _React$useState[0],\n      setTooltipOpen = _React$useState[1];\n\n  var handleTooltipClose = function handleTooltipClose() {\n    setTooltipOpen(false);\n  };\n\n  var handleTooltipOpen = function handleTooltipOpen() {\n    setTooltipOpen(true);\n  };\n\n  var transitionStyle = {\n    transitionDelay: \"\".concat(delay, \"ms\")\n  };\n  var fab = React.createElement(Fab, _extends({\n    size: \"small\",\n    className: clsx(classes.fab, className, !open && classes.fabClosed),\n    tabIndex: -1,\n    role: \"menuitem\",\n    \"aria-describedby\": \"\".concat(id, \"-label\")\n  }, FabProps, {\n    style: _extends({}, transitionStyle, {}, FabProps.style)\n  }), icon);\n\n  if (tooltipOpenProp) {\n    return React.createElement(\"span\", _extends({\n      id: id,\n      ref: ref,\n      className: clsx(classes.staticTooltip, classes[\"tooltipPlacement\".concat(capitalize(tooltipPlacement))], !open && classes.staticTooltipClosed)\n    }, other), React.createElement(\"span\", {\n      style: transitionStyle,\n      id: \"\".concat(id, \"-label\"),\n      className: classes.staticTooltipLabel\n    }, tooltipTitle), fab);\n  }\n\n  return React.createElement(Tooltip, _extends({\n    id: id,\n    ref: ref,\n    title: tooltipTitle,\n    placement: tooltipPlacement,\n    onClose: handleTooltipClose,\n    onOpen: handleTooltipOpen,\n    open: open && tooltipOpen,\n    classes: TooltipClasses\n  }, other), fab);\n});\nprocess.env.NODE_ENV !== \"production\" ? SpeedDialAction.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Adds a transition delay, to allow a series of SpeedDialActions to be animated.\n   */\n  delay: PropTypes.number,\n\n  /**\n   * Props applied to the [`Fab`](/api/fab/) component.\n   */\n  FabProps: PropTypes.object,\n\n  /**\n   * The Icon to display in the SpeedDial Fab.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Classes applied to the [`Tooltip`](/api/tooltip/) element.\n   */\n  TooltipClasses: PropTypes.object,\n\n  /**\n   * Make the tooltip always visible when the SpeedDial is open.\n   */\n  tooltipOpen: PropTypes.bool,\n\n  /**\n   * Placement of the tooltip.\n   */\n  tooltipPlacement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n\n  /**\n   * Label to display in the tooltip.\n   */\n  tooltipTitle: PropTypes.node\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiSpeedDialAction'\n})(SpeedDialAction);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { duration, withStyles } from '@material-ui/core/styles';\nimport Zoom from '@material-ui/core/Zoom';\nimport Fab from '@material-ui/core/Fab';\nimport { capitalize, isMuiElement, useForkRef } from '@material-ui/core/utils';\n\nfunction getOrientation(direction) {\n  if (direction === 'up' || direction === 'down') {\n    return 'vertical';\n  }\n\n  if (direction === 'right' || direction === 'left') {\n    return 'horizontal';\n  }\n\n  return undefined;\n}\n\nfunction clamp(value, min, max) {\n  if (value < min) {\n    return min;\n  }\n\n  if (value > max) {\n    return max;\n  }\n\n  return value;\n}\n\nvar dialRadius = 32;\nvar spacingActions = 16;\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      zIndex: theme.zIndex.speedDial,\n      display: 'flex',\n      alignItems: 'center',\n      pointerEvents: 'none'\n    },\n\n    /* Styles applied to the Fab component. */\n    fab: {\n      pointerEvents: 'auto'\n    },\n\n    /* Styles applied to the root if direction=\"up\" */\n    directionUp: {\n      flexDirection: 'column-reverse',\n      '& $actions': {\n        flexDirection: 'column-reverse',\n        marginBottom: -dialRadius,\n        paddingBottom: spacingActions + dialRadius\n      }\n    },\n\n    /* Styles applied to the root if direction=\"down\" */\n    directionDown: {\n      flexDirection: 'column',\n      '& $actions': {\n        flexDirection: 'column',\n        marginTop: -dialRadius,\n        paddingTop: spacingActions + dialRadius\n      }\n    },\n\n    /* Styles applied to the root if direction=\"left\" */\n    directionLeft: {\n      flexDirection: 'row-reverse',\n      '& $actions': {\n        flexDirection: 'row-reverse',\n        marginRight: -dialRadius,\n        paddingRight: spacingActions + dialRadius\n      }\n    },\n\n    /* Styles applied to the root if direction=\"right\" */\n    directionRight: {\n      flexDirection: 'row',\n      '& $actions': {\n        flexDirection: 'row',\n        marginLeft: -dialRadius,\n        paddingLeft: spacingActions + dialRadius\n      }\n    },\n\n    /* Styles applied to the actions (`children` wrapper) element. */\n    actions: {\n      display: 'flex',\n      pointerEvents: 'auto'\n    },\n\n    /* Styles applied to the actions (`children` wrapper) element if `open={false}`. */\n    actionsClosed: {\n      transition: 'top 0s linear 0.2s',\n      pointerEvents: 'none'\n    }\n  };\n};\nvar SpeedDial = React.forwardRef(function SpeedDial(props, ref) {\n  var ariaLabel = props.ariaLabel,\n      _props$FabProps = props.FabProps;\n  _props$FabProps = _props$FabProps === void 0 ? {} : _props$FabProps;\n\n  var origDialButtonRef = _props$FabProps.ref,\n      FabProps = _objectWithoutProperties(_props$FabProps, [\"ref\"]),\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'up' : _props$direction,\n      _props$hidden = props.hidden,\n      hidden = _props$hidden === void 0 ? false : _props$hidden,\n      icon = props.icon,\n      onBlur = props.onBlur,\n      onClose = props.onClose,\n      onFocus = props.onFocus,\n      onKeyDown = props.onKeyDown,\n      onMouseEnter = props.onMouseEnter,\n      onMouseLeave = props.onMouseLeave,\n      onOpen = props.onOpen,\n      open = props.open,\n      openIcon = props.openIcon,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Zoom : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? {\n    enter: duration.enteringScreen,\n    exit: duration.leavingScreen\n  } : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      other = _objectWithoutProperties(props, [\"ariaLabel\", \"FabProps\", \"children\", \"classes\", \"className\", \"direction\", \"hidden\", \"icon\", \"onBlur\", \"onClose\", \"onFocus\", \"onKeyDown\", \"onMouseEnter\", \"onMouseLeave\", \"onOpen\", \"open\", \"openIcon\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  var eventTimer = React.useRef();\n  React.useEffect(function () {\n    return function () {\n      clearTimeout(eventTimer.current);\n    };\n  }, []);\n  /**\n   * an index in actions.current\n   */\n\n  var focusedAction = React.useRef(0);\n  /**\n   * pressing this key while the focus is on a child SpeedDialAction focuses\n   * the next SpeedDialAction.\n   * It is equal to the first arrow key pressed while focus is on the SpeedDial\n   * that is not orthogonal to the direction.\n   * @type {utils.ArrowKey?}\n   */\n\n  var nextItemArrowKey = React.useRef();\n  /**\n   * refs to the Button that have an action associated to them in this SpeedDial\n   * [Fab, ...(SpeedDialActions > Button)]\n   * @type {HTMLButtonElement[]}\n   */\n\n  var actions = React.useRef([]);\n  actions.current = [actions.current[0]];\n  var handleOwnFabRef = React.useCallback(function (fabFef) {\n    actions.current[0] = fabFef;\n  }, []);\n  var handleFabRef = useForkRef(origDialButtonRef, handleOwnFabRef);\n  /**\n   * creates a ref callback for the Button in a SpeedDialAction\n   * Is called before the original ref callback for Button that was set in buttonProps\n   *\n   * @param dialActionIndex {number}\n   * @param origButtonRef {React.RefObject?}\n   */\n\n  var createHandleSpeedDialActionButtonRef = function createHandleSpeedDialActionButtonRef(dialActionIndex, origButtonRef) {\n    return function (buttonRef) {\n      actions.current[dialActionIndex + 1] = buttonRef;\n\n      if (origButtonRef) {\n        origButtonRef(buttonRef);\n      }\n    };\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n\n    var key = event.key.replace('Arrow', '').toLowerCase();\n    var _nextItemArrowKey$cur = nextItemArrowKey.current,\n        nextItemArrowKeyCurrent = _nextItemArrowKey$cur === void 0 ? key : _nextItemArrowKey$cur;\n\n    if (event.key === 'Escape') {\n      if (onClose) {\n        actions.current[0].focus();\n        onClose(event, 'escapeKeyDown');\n      }\n\n      return;\n    }\n\n    if (getOrientation(key) === getOrientation(nextItemArrowKeyCurrent) && getOrientation(key) !== undefined) {\n      event.preventDefault();\n      var actionStep = key === nextItemArrowKeyCurrent ? 1 : -1; // stay within array indices\n\n      var nextAction = clamp(focusedAction.current + actionStep, 0, actions.current.length - 1);\n      actions.current[nextAction].focus();\n      focusedAction.current = nextAction;\n      nextItemArrowKey.current = nextItemArrowKeyCurrent;\n    }\n  };\n\n  React.useEffect(function () {\n    // actions were closed while navigation state was not reset\n    if (!open) {\n      focusedAction.current = 0;\n      nextItemArrowKey.current = undefined;\n    }\n  }, [open]);\n\n  var handleClose = function handleClose(event) {\n    if (event.type === 'mouseleave' && onMouseLeave) {\n      onMouseLeave(event);\n    }\n\n    if (event.type === 'blur' && onBlur) {\n      onBlur(event);\n    }\n\n    clearTimeout(eventTimer.current);\n\n    if (onClose) {\n      if (event.type === 'blur') {\n        event.persist();\n        eventTimer.current = setTimeout(function () {\n          onClose(event, 'blur');\n        });\n      } else {\n        onClose(event, 'mouseLeave');\n      }\n    }\n  };\n\n  var handleClick = function handleClick(event) {\n    if (FabProps.onClick) {\n      FabProps.onClick(event);\n    }\n\n    clearTimeout(eventTimer.current);\n\n    if (open) {\n      if (onClose) {\n        onClose(event, 'toggle');\n      }\n    } else if (onOpen) {\n      onOpen(event, 'toggle');\n    }\n  };\n\n  var handleOpen = function handleOpen(event) {\n    if (event.type === 'mouseenter' && onMouseEnter) {\n      onMouseEnter(event);\n    }\n\n    if (event.type === 'focus' && onFocus) {\n      onFocus(event);\n    } // When moving the focus between two items,\n    // a chain if blur and focus event is triggered.\n    // We only handle the last event.\n\n\n    clearTimeout(eventTimer.current);\n\n    if (onOpen && !open) {\n      event.persist(); // Wait for a future focus or click event\n\n      eventTimer.current = setTimeout(function () {\n        var eventMap = {\n          focus: 'focus',\n          mouseenter: 'mouseEnter'\n        };\n        onOpen(event, eventMap[event.type]);\n      });\n    }\n  }; // Filter the label for valid id characters.\n\n\n  var id = ariaLabel.replace(/^[^a-z]+|[^\\w:.-]+/gi, '');\n  var allItems = React.Children.toArray(childrenProp).filter(function (child) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the SpeedDial component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    return React.isValidElement(child);\n  });\n  var children = allItems.map(function (child, index) {\n    var _child$props$FabProps = child.props.FabProps;\n    _child$props$FabProps = _child$props$FabProps === void 0 ? {} : _child$props$FabProps;\n\n    var origButtonRef = _child$props$FabProps.ref,\n        ChildFabProps = _objectWithoutProperties(_child$props$FabProps, [\"ref\"]);\n\n    return React.cloneElement(child, {\n      FabProps: _extends({}, ChildFabProps, {\n        ref: createHandleSpeedDialActionButtonRef(index, origButtonRef)\n      }),\n      delay: 30 * (open ? index : allItems.length - index),\n      open: open,\n      id: \"\".concat(id, \"-action-\").concat(index)\n    });\n  });\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[\"direction\".concat(capitalize(direction))], className),\n    ref: ref,\n    role: \"presentation\",\n    onKeyDown: handleKeyDown,\n    onBlur: handleClose,\n    onFocus: handleOpen,\n    onMouseEnter: handleOpen,\n    onMouseLeave: handleClose\n  }, other), React.createElement(TransitionComponent, _extends({\n    in: !hidden,\n    timeout: transitionDuration,\n    unmountOnExit: true\n  }, TransitionProps), React.createElement(Fab, _extends({\n    color: \"primary\",\n    \"aria-label\": ariaLabel,\n    \"aria-haspopup\": \"true\",\n    \"aria-expanded\": open,\n    \"aria-controls\": \"\".concat(id, \"-actions\")\n  }, FabProps, {\n    onClick: handleClick,\n    className: clsx(classes.fab, FabProps.className),\n    ref: handleFabRef\n  }), React.isValidElement(icon) && isMuiElement(icon, ['SpeedDialIcon']) ? React.cloneElement(icon, {\n    open: open\n  }) : icon)), React.createElement(\"div\", {\n    id: \"\".concat(id, \"-actions\"),\n    role: \"menu\",\n    \"aria-orientation\": getOrientation(direction),\n    className: clsx(classes.actions, !open && classes.actionsClosed)\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? SpeedDial.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The aria-label of the button element.\n   * Also used to provide the `id` for the `SpeedDial` element and its children.\n   */\n  ariaLabel: PropTypes.string.isRequired,\n\n  /**\n   * SpeedDialActions to display when the SpeedDial is `open`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The direction the actions open relative to the floating action button.\n   */\n  direction: PropTypes.oneOf(['down', 'left', 'right', 'up']),\n\n  /**\n   * Props applied to the [`Fab`](/api/fab/) element.\n   */\n  FabProps: PropTypes.object,\n\n  /**\n   * If `true`, the SpeedDial will be hidden.\n   */\n  hidden: PropTypes.bool,\n\n  /**\n   * The icon to display in the SpeedDial Fab. The `SpeedDialIcon` component\n   * provides a default Icon with animation.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"toggle\"`, `\"blur\"`, `\"mouseLeave\"`, `\"escapeKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be open.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"toggle\"`, `\"focus\"`, `\"mouseEnter\"`.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * If `true`, the SpeedDial is open.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * The icon to display in the SpeedDial Fab when the SpeedDial is open.\n   */\n  openIcon: PropTypes.node,\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiSpeedDial'\n})(SpeedDial);","import * as React from 'react';\nimport {\n  StyledComponentProps, Theme, WithStyles, withStyles,\n} from '@material-ui/core/styles';\nimport AddRoundedIcon from '@material-ui/icons/AddRounded';\nimport SpeedDialAction, { SpeedDialActionProps } from '@material-ui/lab/SpeedDialAction';\nimport SpeedDial, { SpeedDialClassKey } from '@material-ui/lab/SpeedDial';\nimport { StyleRules } from '@material-ui/styles';\nimport { compose } from 'redux';\nimport {ButtonProps, PropTypes} from '@material-ui/core';\n\ntype actionProps = SpeedDialActionProps & {ButtonProps?: ButtonProps};\n\ninterface ISpeedDialCustomComponentProps extends StyledComponentProps<SpeedDialClassKey> {\n  actions: actionProps[];\n  overRideClasses?: Partial<Record<SpeedDialClassKey, string>> & Record<string, string>;\n  color?: PropTypes.Color;\n}\n\ninterface ISpeedDialCustomProps extends ISpeedDialCustomComponentProps {\n}\n\ntype SpeedDialCustomProps = ISpeedDialCustomProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  icon: {\n    fill: theme.palette.common.white,\n  }\n});\n\nclass SpeedDialCustom extends React.Component<SpeedDialCustomProps> { // eslint-disable-line react/prefer-stateless-function\n\n  public state = {\n    open: false,\n  };\n\n  public handleClick = () => {\n    this.setState({\n      open: !this.state.open\n    });\n  }\n\n  public handleClose = () => {\n    this.setState({ open: false });\n  }\n\n  public handleOpen = () => {\n    this.setState({ open: true });\n  }\n\n\n  public render() {\n    const {\n      open\n    } = this.state;\n    const {\n      actions,\n      overRideClasses,\n      classes,\n      color = 'primary'\n    } = this.props;\n\n    return (\n      <SpeedDial\n        classes={overRideClasses}\n        ariaLabel='SpeedDial example'\n        icon={<AddRoundedIcon classes={{\n          root: classes.icon\n        }}/>}\n        onBlur={this.handleClose}\n        onClick={this.handleClick}\n        onClose={this.handleClose}\n        onFocus={this.handleOpen}\n        onMouseEnter={this.handleOpen}\n        onMouseLeave={this.handleClose}\n        open={open}\n        direction='down'\n        FabProps={{\n            color\n        }}\n      >\n        {actions.map((action, index) => (\n          <SpeedDialAction\n            key={String(action.tooltipTitle) || index}\n            {...action}\n          />\n        ))}\n      </SpeedDial>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<ISpeedDialCustomComponentProps>>(\n  withStyles(styles),\n)(SpeedDialCustom);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  push,\n} from 'connected-react-router/immutable';\nimport {\n  Button\n} from '@material-ui/core';\nimport utils from './utils';\nexport {\n  utils,\n};\n\nimport {\n  makeSelectLocation,\n  IRouterReducerLocation,\n} from '../../modules/RouterModule/selectors';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\ninterface IToggleButtonComponentProps {\n  pathName: string;\n  label?: string;\n}\n\ninterface IToggleButtonProps extends IToggleButtonComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  location: IMap<IRouterReducerLocation>;\n}\n\ntype ToggleButtonProps = IToggleButtonProps;\n\nconst ToggleButton: React.SFC<ToggleButtonProps> = ({location, dispatch, pathName, label}) => {\n\n  return (\n    <Button\n      onClick={utils.togglePath({\n        pathName,\n        dispatch,\n        location,\n      })()}\n    >\n      {label != null ? label : pathName}\n    </Button>\n  );\n};\n\n\nconst mapStateToProps = (state: any) => {\n  return {\n    location: makeSelectLocation()(state),\n  };\n};\nconst WrappedComponent = connect(mapStateToProps)(ToggleButton);\nexport default WrappedComponent;","import styled, { StyledFunction } from 'styled-components';\n\nconst styledDiv: StyledFunction<any> = styled.div;\n\nexport const TruncateText = styledDiv`\n  text-overflow: ellipsis;\n  overflow: hidden;\n`;\n\nexport default TruncateText;\n","export default __webpack_public_path__ + \"static/media/underConstruction.adf7f3cd.png\";","// material-ui Button that can be used as a child in material-ui Tabs\n\nimport * as React from 'react';\nimport {\n  Grid, Typography,\n} from '@material-ui/core';\nimport underConstructionImg from '../../images/detailWidgets/underConstruction.png';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nconst UnderConstruction: React.FC<WithTranslation> = ({ t }) => (\n  <Grid\n    container={true}\n    direction='column'\n    wrap='nowrap'\n    justify='center'\n    alignItems='center'\n  >\n    <Grid\n      item={true}\n      style={{width: '96px'}}\n    >\n      <img src={underConstructionImg} alt='under construction' style={{width: '100%'}} />\n    </Grid>\n    <Grid\n      item={true}\n      style={{textAlign: 'center'}}\n    >\n      <Typography>{t('generalUnderConstruction.title')}</Typography>\n      <Typography\n        variant='caption'\n        style={{marginRight: '3px'}}\n      >\n        {t('generalUnderConstruction.description')}\n      </Typography>\n      <Typography\n        variant='caption'\n      >\n        {t('generalUnderConstruction.caption')}\n      </Typography>\n    </Grid>\n  </Grid>\n);\n\n\nexport default withTranslation('translations')(UnderConstruction);","import styled, {StyledFunction} from 'styled-components';\n\nconst styledDiv: StyledFunction<any> = styled.div;\n\nconst WidgetHeaderEndStyle = styledDiv`\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n`;\n\nexport default WidgetHeaderEndStyle;\n","import {Typography} from '@material-ui/core';\nimport * as React from 'react';\n\nconst WidgetHeaderStyle: React.FC<any> = (props) => {\n\n  return (\n    <Typography variant='h6' color='inherit'>\n      {props.children}\n    </Typography>\n  );\n};\n\nexport default WidgetHeaderStyle;\n","import * as React from 'react';\nimport {\n  Typography,\n  Grid,\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n} from '@material-ui/core/styles';\n\ninterface IWidgetIconContainerProps {\n  classes: {\n    [propName: string]: any;\n  };\n  title?: string;\n  children?: JSX.Element;\n}\n\ntype WidgetIconContainerType = IWidgetIconContainerProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nconst WidgetIconContainer: React.FC<WidgetIconContainerType> = props => {\n  const { classes, children, title, ...rest} = props;\n\n  return (\n    <div className={classes.root} {...rest}>\n      <Typography variant='caption'>\n        {title}\n      </Typography>\n      <hr />\n      <Grid\n        className={classes.grid}\n        container={true}\n      >\n        {children}\n      </Grid>\n    </div>\n  );\n};\n\nconst muiStyles = (theme): StyleRules => ({\n  root: {\n    marginLeft: theme.spacing(),\n    marginRight: theme.spacing(),\n  },\n  grid: {\n    marginTop: theme.spacing(),\n  }\n});\n\nexport default withStyles(muiStyles)(WidgetIconContainer);\n","/*\n * WidgetLoaderStyle\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Theme\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\n\nconst styles = (theme: Theme): StyleRules => ({\n  widgetStyleOverride: {\n    display: 'block',\n    overflow: 'auto',\n    height: '100%',\n  },\n  noAuto: {\n    display: 'block',\n    height: '100%',\n  },\n  flexVertical: {\n    height: '100%',\n    minHeight: '100%',\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    width: '100%',\n  },\n  flexHorizontal: {\n    display: 'flex',\n    flexFlow: 'row nowrap',\n    alignItems: 'flex-end',\n    // paddingBottom: theme.spacing(),\n  },\n  widgetContentContainer: {\n    overflow: 'auto',\n    overflowX: 'hidden',\n    width: '100%',\n    height: '100%',\n    flex: '1 1 0',\n    display: 'flex',\n  },\n  widgetContentStyle: {\n    flex: '1 1 auto',\n    width: '100%',\n  },\n});\n\ninterface IHeaderProps {\n  header: JSX.Element;\n  noAuto?: boolean;\n}\n\ntype HeaderProps = IHeaderProps & WithStyles<keyof ReturnType<typeof styles>>;\n\n// overflow / scrollbars are just for testing for now\n\nclass WidgetLoaderStyle extends React.Component<HeaderProps> { // eslint-disable-line react/prefer-stateless-function\n  public render() {\n    const {\n      children,\n      header,\n      classes,\n      noAuto = false,\n    } = this.props;\n    return (\n      <Grid className={noAuto ? classes.noAuto : classes.widgetStyleOverride}>\n        <Grid className={classes.flexVertical}>\n          <Grid className={classes.flexHorizontal}>\n            {header}\n          </Grid>\n          <Grid className={classes.widgetContentContainer}>\n            <Grid className={classes.widgetContentStyle}>\n              {children}\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nexport default withStyles(styles)(WidgetLoaderStyle);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Winamp'));\n","import { Tooltip } from '@material-ui/core';\nimport * as React from 'react';\n\nexport const ConditionalTooltip: React.FC<{showTooltip: boolean; title: string; children: React.ReactElement}> = ({ children, showTooltip, title }) => (\n  <>\n    {\n      showTooltip\n      ? <Tooltip\n            title={title}\n            placement='bottom-start'\n          >\n          {children}\n      </Tooltip>\n      : children\n    }\n  </>\n);\n\nexport default ConditionalTooltip;","import * as React from 'react';\nimport { Typography } from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\n\nconst styles = (theme: any) => ({\n  root: {\n    color: theme.palette.error.main\n  }\n});\n\ninterface IFormikErrorProps {\n  children: any;\n}\n\ntype FormikError = IFormikErrorProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst FormikError: React.FC<FormikError> = (props) => {\n  const { classes, children } = props;\n  const index = children.lastIndexOf('.');\n  const errorMessage = children.slice(index + 1);\n  const capitalizedError = errorMessage[0].toUpperCase() + errorMessage.slice(1);\n\n  return <Typography className={classes.root} variant='caption'> {capitalizedError} </Typography>;\n};\n\nexport default withStyles(styles)(FormikError);\n","import * as React from 'react';\nimport { Field, ErrorMessage } from 'formik';\nimport {\n  Grid,\n} from '@material-ui/core';\nimport { FormikErrorField, FormikTextField } from './defaultComponents';\n\ninterface IFormikFieldProps {\n  name: string;\n  label: string | JSX.Element;\n  type?: 'text' | 'select' | 'date' | 'multiselect';\n  component?: any;\n  errorComponent?: any;\n}\n\nconst FormikField: React.FC<IFormikFieldProps> = ({ name, label, type, component, errorComponent }) => {\n  let fieldComponent = component;\n\n  if (!fieldComponent) {\n    switch (type) {\n      case 'text':\n        fieldComponent = FormikTextField;\n        break;\n      default:\n        fieldComponent = FormikTextField;\n    }\n  }\n\n  return (\n    <Grid item={true}>\n      <Field component={fieldComponent} name={name} label={label}/>\n      <ErrorMessage name={name} component={errorComponent} />\n    </Grid>\n  );\n};\n\nFormikField.defaultProps = {\n  type: 'text',\n  errorComponent: FormikErrorField\n};\n\nexport default FormikField;\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  List,\n  Map,\n  fromJS,\n  OrderedSet,\n} from 'immutable';\n\nimport {\n  Series,\n  MissingRule,\n  MatchingProduct,\n  Attribute,\n  ProductCategoryGroup,\n  Product,\n  ProductCategory,\n  ListItem,\n  Filter,\n  Category,\n  AttributeValue,\n  Drawing,\n  Spec,\n  Option,\n  Manufacturer,\n  BrandVariation,\n  AiExclusion,\n  AiExclusionItem,\n} from '../../models';\nimport {\n  CategoryDisplayType,\n  CategorySpecificSeriesFilterKey,\n  QuickSearchType\n} from './constants';\nimport CategoryDisplayTypeListItem from '../../models/CategoryDisplayTypeListItem';\nimport AttributeOptions from '../../models/AttributeOptions';\n\nexport default {};\n\nexport enum ProductActionTypes {\n  SELECT_CATEGORY = 'SELECT_CATEGORY',\n  SET_CATEGORY_ID = 'SET_CATEGORY_ID',\n  SELECT_NEW_CATEGORY = 'SELECT_NEW_CATEGORY',\n  GET_PRODUCTS = 'GET_PRODUCTS',\n  GET_SEARCH_RESULTS_SUCCEEDED = 'GET_SEARCH_RESULTS_SUCCEEDED',\n  GET_PRODUCTS_FAILED = 'GET_PRODUCTS_FAILED',\n  QUICK_SEARCH = 'QUICK_SEARCH',\n  CLEAR_QUICK_SEARCH = 'CLEAR_QUICK_SEARCH',\n  QUICK_SEARCH_FIRM = 'QUICK_SEARCH_FIRM',\n  QUICK_SEARCH_FIRM_LOADING = 'QUICK_SEARCH_FIRM_LOADING',\n  PRODUCTS_FOUND = 'PRODUCTS_FOUND',\n  PRODUCTS_NOT_FOUND = 'PRODUCTS_NOT_FOUND',\n  GET_BRAND_REP_PRODUCT_CATEGORIES = 'GET_BRAND_REP_PRODUCT_CATEGORIES',\n  GET_PRODUCT_CATEGORIES = 'GET_PRODUCT_CATEGORIES',\n  GET_PRODUCT_CATEGORIES_SUCCEEDED = 'GET_PRODUCT_CATEGORIES_SUCCEEDED',\n  FILTER_PRODUCT_CATEGORIES = 'FILTER_PRODUCT_CATEGORIES',\n  SELECT_SERIES = 'SELECT_SERIES',\n  SERIES_FILTER_ADD = 'SERIES_FILTER_ADD',\n  SERIES_FILTER_REMOVE = 'SERIES_FILTER_REMOVE',\n  SERIES_FILTER_TOGGLE = 'SERIES_FILTER_TOGGLE',\n  SERIES_FILTER_CLEAR = 'SERIES_FILTER_CLEAR',\n  SET_CATEGORY_SPECIFIC_SERIES_FILTERS = 'SET_CATEGORY_SPECIFIC_SERIES_FILTERS',\n  REMOVE_CATEGORY_SPECIFIC_SERIES_FILTER = 'REMOVE_CATEGORY_SPECIFIC_SERIES_FILTER',\n  SET_SERIES_SPECIFIC_INIT_SELECTIONS = 'SET_SERIES_SPECIFIC_INIT_SELECTIONS',\n  SET_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS = 'SET_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS',\n  DELETE_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS = 'DELETE_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS',\n  RESET_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS = 'RESET_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS',\n  MATCHING_PRODUCTS_SUCCEEDED  = 'MATCHING_PRODUCTS_SUCCEEDED',\n  RESET_MATCHING_PRODUCTS = 'RESET_MATCHING_PRODUCTS',\n  GET_MATCHING_PRICE_SUMMARY_SUCCEEDED = 'GET_MATCHING_PRICE_SUMMARY_SUCCEEDED',\n  GET_SERIES = 'GET_SERIES',\n  UPDATE_SERIES = 'UPDATE_SERIES',\n  CATEGORY_SEARCH_TYPE = 'CATEGORY_SEARCH_TYPE',\n  PRODUCT_CATEGORY_SELECTION = 'PRODUCT_CATEGORY_SELECTION',\n  UPDATE_SERIES_FILTER_INPUT = 'UPDATE_SERIES_FILTER_INPUT',\n  GET_ATTRIBUTE_ORDER = 'GET_ATTRIBUTE_ORDER',\n  GET_ATTRIBUTE_ORDER_SUCCEEDED = 'GET_ATTRIBUTE_ORDER_SUCCEEDED',\n  CLEAR_SEARCH_RESULTS = 'CLEAR_SEARCH_RESULTS',\n  CLEAR_ALL_SEARCH_RESULTS = 'CLEAR_ALL_SEARCH_RESULTS',\n  CLEAR_SEARCH_RESULTS_WITH_CATEGORY = 'CLEAR_SEARCH_RESULTS_WITH_CATEGORY',\n  EDITING_PRODUCT_INDEX = 'EDITING_PRODUCT_INDEX',\n  RESET_EDITING_PRODUCT_INDEX = 'RESET_EDITING_PRODUCT_INDEX',\n  CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING = 'CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING',\n  CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING_DONE = 'CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING_DONE',\n  RESET_ATTRIBUTE_OPTIONS = 'RESET_ATTRIBUTE_OPTIONS',\n  GET_ATTRIBUTE_OPTIONS_ORDER = 'GET_ATTRIBUTE_OPTIONS_ORDER',\n  GET_ATTRIBUTE_OPTIONS_ORDER_SUCCEEDED = ' GET_ATTRIBUTE_OPTIONS_ORDER_SUCCEEDED',\n  SEARCH_SERIES_WITH_FILTER = 'SEARCH_SERIES_WITH_FILTER',\n  SEARCH_SERIES_WITH_FILTER_SUCCEEDED = 'SEARCH_SERIES_WITH_FILTER_SUCCEEDED',\n  USE_ACTION_AND_SEARCH_WITH_FILTER = 'USE_ACTION_AND_SEARCH_WITH_FILTER',\n  SERIES_LOADING = 'SERIES_LOADING',\n  SERIES_LOADING_FINISHED = 'SERIES_LOADING_FINISHED',\n  PRODUCT_FILTER_ADD = 'PRODUCT_FILTER_ADD',\n  PRODUCT_FILTER_REMOVE = 'PRODUCT_FILTER_REMOVE',\n  PRODUCT_FILTER_TOGGLE = 'PRODUCT_FILTER_TOGGLE',\n  PRODUCT_FILTER_CLEAR = 'PRODUCT_FILTER_CLEAR',\n  PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES = 'PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES',\n  SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES = 'SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES',\n  SERIES_SPECIFIC_FILTER_ADD = 'SERIES_SPECIFIC_FILTER_ADD',\n  SERIES_SPECIFIC_FILTER_REMOVE = 'SERIES_SPECIFIC_FILTER_REMOVE',\n  SERIES_SPECIFIC_FILTER_CLEAR = 'SERIES_SPECIFIC_FILTER_CLEAR',\n  SERIES_SPECIFIC_FILTER_CLEAR_ALL = 'SERIES_SPECIFIC_FILTER_CLEAR_ALL',\n  CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS = 'CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS',\n  SELECT_CATEGORY_AND_GET_SPECS = 'SELECT_CATEGORY_AND_GET_SPECS',\n  SKIP_RULE_ENGINE = 'SKIP_RULE_ENGINE',\n  GET_SERIES_BY_ID = 'GET_SERIES_BY_ID',\n  GET_SERIES_AND_ADD_SERIES_SPECIFIC_FILTERS = 'GET_SERIES_AND_ADD_SERIES_SPECIFIC_FILTERS',\n  SELECT_CATEGORY_FINISHED = 'SELECT_CATEGORY_FINISHED',\n  CREATE_MATCHING_PRODUCT_THEN_UPDATE_DRAWING = 'CREATE_MATCHING_PRODUCT_THEN_UPDATE_DRAWING',\n  SEARCH_PRODUCTS_WITH_FILTER = 'SEARCH_PRODUCTS_WITH_FILTER',\n  SEARCH_PRODUCTS_WITH_FILTER_SUCCEEDED = 'SEARCH_PRODUCTS_WITH_FILTER_SUCCEEDED',\n  SEARCH_PRODUCTS_WITH_FILTER_LOADING = 'SEARCH_PRODUCTS_WITH_FILTER_LOADING',\n  SEARCH_DAL_SERIES_WITH_FILTER = 'SEARCH_DAL_SERIES_WITH_FILTER',\n  SEARCH_DAL_SERIES_WITH_FILTER_SUCCEEDED = 'SEARCH_DAL_SERIES_WITH_FILTER_SUCCEEDED',\n  SEARCH_DAL_SERIES_WITH_FILTER_LOADING = 'SEARCH_DAL_SERIES_WITH_FILTER_LOADING',\n  RESET_PRODUCTS = 'RESET_PRODUCTS',\n  CATEGORY_LOADING = 'CATEGORY_LOADING',\n  GET_MANUFACTURERS_BY_CATEGORY_ID = 'GET_MANUFACTURERS_BY_CATEGORY_ID',\n  GET_MANUFACTURERS_BY_CATEGORY_ID_SUCCEEDED = 'GET_MANUFACTURERS_BY_CATEGORY_ID_SUCCEEDED',\n  RESET_CATEGORY_MANUFACTURERS = 'RESET_CATEGORY_MANUFACTURERS',\n  CREATE_PRODUCT_MEDIA_REQUEST = 'CREATE_PRODUCT_MEDIA_REQUEST',\n  SET_SORT_SERIES_BY = 'SET_SORT_SERIES_BY',\n  SET_SERIES_SEARCH_OPTIONS = 'SET_SERIES_SEARCH_OPTIONS',\n  SET_HIDE_DISCONTINUED_SERIES = 'SET_HIDE_DISCONTINUED_SERIES',\n  SET_SHOW_DRAFT_SERIES_ONLY = 'SET_SHOW_DRAFT_SERIES_ONLY',\n  GET_RECOMMENDED_SPEC_PRODUCT_ACTION = 'GET_RECOMMENDED_SPEC_PRODUCT_ACTION',\n  SET_RECOMMENDED_SPEC_PRODUCT_ACTION = 'SET_RECOMMENDED_SPEC_PRODUCT_ACTION',\n  SET_IS_RECOMMENDED_SPEC_PRODUCT_LOADING_ACTION = 'SET_IS_RECOMMENDED_SPEC_PRODUCT_LOADING_ACTION',\n  SELECT_PRODUCT_FOR_CONFIGURATOR = 'SELECT_PRODUCT_FOR_CONFIGURATOR',\n  UPDATE_CATEGORY_POPULARITY = 'UPDATE_CATEGORY_POPULARITY',\n\n  // firm-specific categories\n  SAVE_FIRM_CATEGORY = 'SAVE_FIRM_CATEGORY',\n  SAVE_FIRM_CATEGORY_LOADING = 'SAVE_FIRM_CATEGORY_LOADING',\n  SAVE_FIRM_CATEGORY_SUCCESS = 'SAVE_FIRM_CATEGORY_SUCCESS',\n  SAVE_FIRM_CATEGORY_FAILED = 'SAVE_FIRM_CATEGORY_FAILED',\n\n  // bulk export/import products\n  BULK_EXPORT_PRODUCTS = 'BULK_EXPORT_PRODUCTS',\n  BULK_EXPORT_PRODUCTS_LOADING = 'BULK_EXPORT_PRODUCTS_LOADING',\n  BULK_EXPORT_PRODUCTS_SUCCESS = 'BULK_EXPORT_PRODUCTS_SUCCESS',\n  BULK_EXPORT_PRODUCTS_FAILED = 'BULK_EXPORT_PRODUCTS_FAILED',\n\n  // brand variations\n  SET_IS_GETTING_BRAND_VARIATIONS = 'SET_IS_GETTING_BRAND_VARIATIONS',\n  GET_BRAND_VARIATIONS = 'GET_BRAND_VARIATIONS',\n  GET_BRAND_VARIATIONS_SUCCEEDED = 'GET_BRAND_VARIATIONS_SUCCEEDED',\n  SET_IS_UPDATING_BRAND_VARIATION = 'SET_IS_UPDATING_BRAND_VARIATION',\n  UPDATE_BRAND_VARIATION_BY_ID = 'UPDATE_BRAND_VARIATION_BY_ID',\n  UPDATE_BRAND_VARIATION_BY_ID_SUCCEEDED = 'UPDATE_BRAND_VARIATION_BY_ID_SUCCEEDED',\n\n  // AI exclusion\n  GET_AI_EXCLUSION = 'GET_AI_EXCLUSION',\n  GET_AI_EXCLUSION_SUCCEEDED = 'GET_AI_EXCLUSION_SUCCEEDED',\n  SET_IS_GETTING_AI_EXCLUSION = 'SET_IS_GETTING_AI_EXCLUSION',\n  ADD_AI_EXCLUSIONS = 'ADD_AI_EXCLUSIONS',\n  ADD_AI_EXCLUSIONS_SUCCEEDED = 'ADD_AI_EXCLUSIONS_SUCCEEDED',\n  SET_IS_ADDING_AI_EXCLUSIONS = 'SET_IS_ADDING_AI_EXCLUSIONS',\n  UPDATE_AI_EXCLUSION_BY_ID = 'UPDATE_AI_EXCLUSION_BY_ID',\n  UPDATE_AI_EXCLUSION_BY_ID_SUCCEEDED = 'UPDATE_AI_EXCLUSION_BY_ID_SUCCEEDED',\n  SET_IS_UPDATING_AI_EXCLUSION = 'SET_IS_UPDATING_AI_EXCLUSION',\n  DELETE_AI_EXCLUSION_BY_ID = 'DELETE_AI_EXCLUSION_BY_ID',\n  DELETE_AI_EXCLUSION_BY_ID_SUCCEEDED = 'DELETE_AI_EXCLUSION_BY_ID_SUCCEEDED',\n  SET_IS_DELETING_AI_EXCLUSION = 'SET_IS_DELETING_AI_EXCLUSION',\n}\n\nexport class UpdateCategoryPopularityAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_CATEGORY_POPULARITY;\n\n  constructor(\n    public payload: {\n      categoryId: number;\n    }\n  ) {}\n}\n\nexport class SelectProductForConfiguratorAction implements IAction {\n  public readonly type = ProductActionTypes.SELECT_PRODUCT_FOR_CONFIGURATOR;\n\n  constructor(\n    public payload: {\n      categoryId: number;\n      categoryName: string;\n      seriesId: number;\n      productAttributes?: IMap<any>;\n    }\n  ) {}\n}\n\nexport class GetAiExclusionAction implements IAction {\n  public readonly type = ProductActionTypes.GET_AI_EXCLUSION;\n\n  constructor(\n    public payload?: {\n      onSuccess?: (arg?: any) => void;\n    }\n  ) {}\n}\n\nexport class GetAiExclusionSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_AI_EXCLUSION_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      aiExclusion: IMap<AiExclusion>;\n    }\n  ) {}\n}\n\nexport class SetIsGettingAiExclusionAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_GETTING_AI_EXCLUSION;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class AddAiExclusionsAction implements IAction {\n  public readonly type = ProductActionTypes.ADD_AI_EXCLUSIONS;\n\n  constructor(\n    public payload: {\n      aiExclusionItems: List<IMap<AiExclusionItem>>;\n      onSuccess?: (arg?: any) => void;\n    }\n  ) {}\n}\n\nexport class AddAiExclusionsSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.ADD_AI_EXCLUSIONS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      aiExclusion: IMap<AiExclusion>;\n    }\n  ) {}\n}\n\nexport class SetIsAddingAiExclusionAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_ADDING_AI_EXCLUSIONS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class UpdateAiExclusionByIdAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_AI_EXCLUSION_BY_ID;\n\n  constructor(\n    public payload: {\n      id: number;\n      aiExclusionItem: IMap<AiExclusionItem>;\n      onSuccess?: (arg?: any) => void;\n    }\n  ) {}\n}\n\nexport class UpdateAiExclusionByIdSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_AI_EXCLUSION_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      aiExclusion: IMap<AiExclusion>;\n    }\n  ) {}\n}\n\nexport class SetIsUpdatingAiExclusionAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_UPDATING_AI_EXCLUSION;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class DeleteAiExclusionByIdAction implements IAction {\n  public readonly type = ProductActionTypes.DELETE_AI_EXCLUSION_BY_ID;\n\n  constructor(\n    public payload: {\n      id: number;\n      onSuccess?: (arg?: any) => void;\n    }\n  ) {}\n}\n\nexport class DeleteAiExclusionByIdSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.DELETE_AI_EXCLUSION_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      aiExclusion: IMap<AiExclusionItem>;\n    }\n  ) {}\n}\n\nexport class SetIsDeletingAiExclusionAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_DELETING_AI_EXCLUSION;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetIsRecommendedSpecProductLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_RECOMMENDED_SPEC_PRODUCT_LOADING_ACTION;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SetRecommendedSpecProductAction implements IAction {\n  public readonly type = ProductActionTypes.SET_RECOMMENDED_SPEC_PRODUCT_ACTION;\n\n  constructor(\n    public payload: {\n      seriesId: number;\n      product: IMap<Product>;\n    }\n  ) {}\n}\nexport class GetRecommendedSpecProductAction implements IAction {\n  public readonly type = ProductActionTypes.GET_RECOMMENDED_SPEC_PRODUCT_ACTION;\n\n  constructor(\n    public payload: {\n      series: IMap<Series>;\n      useDirectMatchProduct?: boolean;\n    }\n  ) {}\n}\n\nexport class SetSortSeriesByAction implements IAction {\n  public readonly type = ProductActionTypes.SET_SORT_SERIES_BY;\n\n  constructor(\n    public payload: 'mostRecent' | 'mostSpecified' | 'recommended'\n  ) {}\n}\nexport class SetSeriesSearchOptionsAction implements IAction {\n  public readonly type = ProductActionTypes.SET_SERIES_SEARCH_OPTIONS;\n\n  constructor(\n    public payload: {\n      option: Map<string, any>;\n    }\n  ) {}\n}\nexport class SetHideDiscontinuedSeriesAction implements IAction {\n  public readonly type = ProductActionTypes.SET_HIDE_DISCONTINUED_SERIES;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SetShowDraftSeriesOnlyAction implements IAction {\n  public readonly type = ProductActionTypes.SET_SHOW_DRAFT_SERIES_ONLY;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class CreateProductMediaRequestAction implements IAction {\n  public readonly type = ProductActionTypes.CREATE_PRODUCT_MEDIA_REQUEST;\n\n  constructor(\n    public payload: {\n      requestData: { [key: string]: any }\n    }\n  ) {}\n}\n\nexport class ResetCategoryManufacturersAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_CATEGORY_MANUFACTURERS;\n}\n\nexport class GetManufacturersByCategoryIdSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_MANUFACTURERS_BY_CATEGORY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: List<IMap<Manufacturer>>\n  ) {}\n}\n\nexport class GetManufacturersByCategoryIdAction implements IAction {\n  public readonly type = ProductActionTypes.GET_MANUFACTURERS_BY_CATEGORY_ID;\n\n  constructor(\n    public payload: {\n      categoryId: number;\n      considerAppId?: boolean;\n      filters?: Filter;\n      location?: Map<string, any>;\n    }\n  ) {}\n}\n\nexport class SetIsGettingBrandVariationsAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_GETTING_BRAND_VARIATIONS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class GetBrandVariationsAction implements IAction {\n  public readonly type = ProductActionTypes.GET_BRAND_VARIATIONS;\n}\n\nexport class GetBrandVariationsSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_BRAND_VARIATIONS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      brandVariations: List<IMap<BrandVariation>>;\n    }\n  ) {}\n}\n\nexport class SetIsUpdatinggBrandVariationAction implements IAction {\n  public readonly type = ProductActionTypes.SET_IS_UPDATING_BRAND_VARIATION;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class UpdateBrandVariationByIdAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_BRAND_VARIATION_BY_ID;\n\n  constructor(\n    public payload: {\n      id: number;\n      altNames: string[];\n      onSuccess?: () => void;\n    }\n  ) {}\n}\n\nexport class UpdateBrandVariationByIdSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_BRAND_VARIATION_BY_ID_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      brandVariations: List<IMap<BrandVariation>>;\n    }\n  ) {}\n}\n\nexport class ResetProductsAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_PRODUCTS;\n}\n\nexport class CategoryLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.CATEGORY_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchDalSeriesWithFilterLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SearchDalSeriesWithFilterAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER;\n\n  constructor(\n    public payload: {\n      filters: IMap<Filter>;\n      options: Option<Series>,\n      amplitudeData?: Record<string, any>,\n    }\n  ) {}\n}\n\nexport class SearchDalSeriesWithFilterSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      seriesList: List<IMap<Series>>;\n      seriesListHasNextPage?: boolean;\n      seriesCount?: number;\n    }\n  ) {}\n}\n\nexport class SearchProductsWithFilterLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SearchProductsWithFilterAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER;\n\n  constructor(\n    public payload: {\n      filters: IMap<Filter>;\n      options: Option<Product>,\n      amplitudeData?: Record<string, any>,\n    }\n  ) {}\n}\n\nexport class SearchProductsWithFilterSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      products: List<IMap<Product>>;\n      productsHasNextPage?: boolean;\n      productCount?: number;\n    }\n  ) {}\n}\n\nexport class CreateMatchingProductThenUpdateDrawingAction implements IAction {\n  public readonly type = ProductActionTypes.CREATE_MATCHING_PRODUCT_THEN_UPDATE_DRAWING;\n\n  constructor(\n    public payload: {\n      spec: IMap<Spec>,\n      drawingId: number,\n      selectedDrawing: IMap<Drawing>,\n      editProductIndex?: number\n    }\n  ) {}\n}\n\nexport class GetSeriesAndAddSeriesSpecificFiltersAction implements IAction {\n  public readonly type = ProductActionTypes.GET_SERIES_AND_ADD_SERIES_SPECIFIC_FILTERS;\n\n  constructor(\n    public payload: {\n      productAttributes: Map<string, IMap<AttributeValue>>,\n      seriesId: number,\n    },\n  ) {}\n}\n\nexport class GetSeriesByIdAction implements IAction {\n  public readonly type = ProductActionTypes.GET_SERIES_BY_ID;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class SkipRuleEngineAction implements IAction {\n  public readonly type = ProductActionTypes.SKIP_RULE_ENGINE;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class ConvertInitSelectionsToSeriesSpecificFiltersAction implements IAction {\n  public readonly type = ProductActionTypes.CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS;\n\n  constructor(\n    public payload: {\n      series: IMap<Series>,\n    },\n  ) {}\n}\n\nexport class SeriesSpecificFilterAddAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_SPECIFIC_FILTER_ADD;\n\n  constructor(\n    public payload: {\n      filters: ISeriesFilterPayload[],\n      seriesId: number,\n    },\n    public series?: IMap<Series>,\n    public create?: boolean\n  ) {}\n}\n\nexport class SeriesSpecificFilterRemoveAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_SPECIFIC_FILTER_REMOVE;\n\n  constructor(\n    public payload: {\n      filters: ISeriesFilterPayload[],\n      seriesId: number,\n    },\n    public series?: IMap<Series>\n  ) {}\n}\n\nexport class SeriesSpecificFilterClearAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n    },\n    public series?: IMap<Series>\n  ) {}\n}\n\nexport class SeriesSpecificFilterClearThenCheckProductAndAttributesAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES;\n\n  constructor(\n    public payload: {\n      seriesId: number,\n    },\n    public series?: IMap<Series>\n  ) {}\n}\n\nexport class SeriesSpecificFilterClearAllAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR_ALL;\n}\n\nexport class ProductFilterAddAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_FILTER_ADD;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {}\n}\n\nexport class ProductFilterRemoveAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_FILTER_REMOVE;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {}\n}\n\n\nexport class ProductFilterToggleAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_FILTER_TOGGLE;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {\n  }\n}\n\nexport class ProductFilterClearAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_FILTER_CLEAR;\n  constructor(\n    public payload: {\n      clearUseFilter?: boolean;\n    },\n  ) {\n  }\n}\n\nexport class ProductFilterClearThenCheckProductAndAttributesAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES;\n\n}\n\nexport class SeriesLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_LOADING;\n\n}\n\nexport class SeriesLoadingFinishedAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_LOADING_FINISHED;\n\n}\n\nexport class UseActionAndSearchWithFilterAction implements IAction {\n  public readonly type = ProductActionTypes.USE_ACTION_AND_SEARCH_WITH_FILTER;\n\n  constructor(\n    public payload: {\n      // one of the actions that takes attributeOptions as the payload\n\n      passedAction: ISeriesAndProductPassedAction,\n      attributeOptions?: ISeriesFilterPayload[],\n\n      customArgs?: any,\n\n      // temp fix to skip rules\n      skipRules?: boolean,\n    }\n  ) {}\n\n}\n\nexport class SearchSeriesWithFilterAction implements IAction {\n  public readonly type = ProductActionTypes.SEARCH_SERIES_WITH_FILTER;\n\n  constructor(\n    public payload?: {\n      additionalSingleUsedFilters?: any,\n    }\n  ) {}\n}\n\nexport class ResetAttribteOptionsAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_ATTRIBUTE_OPTIONS;\n}\n\nexport class GetAttributeOptionsOrderSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_ATTRIBUTE_OPTIONS_ORDER_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      attributeOptions: List<IMap<AttributeOptions>>,\n    }\n  ) {}\n}\n\nexport class GetAttributeOptionsOrderAction implements IAction {\n  public readonly type = ProductActionTypes.GET_ATTRIBUTE_OPTIONS_ORDER;\n\n  constructor(\n    public payload: {\n      categoryId: number,\n    }\n  ) {}\n}\n\nexport class ResetEditingProductIndexAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_EDITING_PRODUCT_INDEX;\n\n}\n\nexport class SetEditingProductIndexAction implements IAction {\n  public readonly type = ProductActionTypes.EDITING_PRODUCT_INDEX;\n\n  constructor(\n    public payload: {\n      editProductIndex: number,\n    }\n  ) {}\n}\n\nexport class GetAttributeOrderSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_ATTRIBUTE_ORDER_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      categoryId: number,\n      attributeList: OrderedSet<string>\n    }\n  ) {}\n}\n\nexport class GetAttributeOrderAction implements IAction {\n  public readonly type = ProductActionTypes.GET_ATTRIBUTE_ORDER;\n\n  constructor(\n    public payload: {\n      categoryId: number,\n      categoryName?: string\n    }\n  ) {}\n}\n\nexport class SelectNewCategoryAction implements IAction {\n  public static withCategoryFilter = (category: IMap<ProductCategory>, skipRules?: boolean) => {\n    const missingRule = new MissingRule({\n      category,\n      filters: Filter.generateCategoryFilter(category),\n    }).toImmutable();\n    return new SelectNewCategoryAction({missingRule, skipRules});\n  }\n\n  public readonly type = ProductActionTypes.SELECT_NEW_CATEGORY;\n  constructor(\n    public payload: {\n      missingRule: IMap<MissingRule>,\n      skipRules?: boolean,\n    }\n  ) {}\n}\n\nexport class SelectCategoryAction implements IAction {\n  public readonly type = ProductActionTypes.SELECT_CATEGORY;\n\n  constructor(\n    public payload: {\n      productCategoryId: number,\n      selectDrawing?: boolean;\n    }\n  ) {}\n}\n\nexport class SelectCategoryAndGetSpecsAction implements IAction {\n  public readonly type = ProductActionTypes.SELECT_CATEGORY_AND_GET_SPECS;\n\n  constructor(\n    public payload: {\n      productCategory: IMap<ProductCategory>,\n    }\n  ) {}\n}\n\nexport class SelectCategoryFinishedAction implements IAction {\n  public readonly type = ProductActionTypes.SELECT_CATEGORY_FINISHED;\n}\n\nexport class SetCategoryIdAction implements IAction {\n  public readonly type = ProductActionTypes.SET_CATEGORY_ID;\n\n  constructor(\n    public payload: {\n      productCategoryId: number\n    }\n  ) {}\n}\n\nexport class UpdateSeriesAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_SERIES;\n\n  constructor(\n    public payload: {\n      seriesList: List<IMap<Series>>;\n      hasNextPage: boolean;\n    }\n  ) {}\n}\n\nexport class GetSeriesAction implements IAction {\n  public readonly type = ProductActionTypes.GET_SERIES;\n\n  constructor(\n    public payload: {\n      missingRule: IMap<MissingRule>;\n      seriesIdToOrderBy?: number;\n    }\n  ) {}\n}\n\nexport class MatchingProductsSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.MATCHING_PRODUCTS_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<{\n      data: IMap<MatchingProduct>;\n      attributes: Map<string, IMap<Attribute>>;\n      seriesId: number;\n    }>,\n  ) {}\n}\n\nexport class ResetMatchingProductsAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_MATCHING_PRODUCTS;\n}\n\nexport class GetMatchingPriceSummarySucceededAction implements IAction {\n  public type = ProductActionTypes.GET_MATCHING_PRICE_SUMMARY_SUCCEEDED;\n  constructor(\n    public payload: {\n      priceSummary: Map<number, any>;\n    }\n  ) {}\n}\n\nexport class SelectSeriesAction implements IAction {\n  public readonly type = ProductActionTypes.SELECT_SERIES;\n\n  constructor(\n    public payload: number,\n    public series?: IMap<Series>\n  ) {}\n}\n\nexport interface ISeriesAndProductPassedAction {\n  seriesAction: any;\n  productAction: any;\n}\n\nexport interface ISeriesFilterPayload {\n  key: string;\n  value: any;\n  multi: boolean;\n  label: string;\n  optionValueId?: number;\n}\n\nexport class SeriesFilterAddAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_FILTER_ADD;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {\n\n    // console.error('seriesFilterAddAction', {\n    //   payload,\n    // });\n  }\n}\n\nexport class SeriesFilterToggleAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_FILTER_TOGGLE;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {\n  }\n}\n\nexport class SeriesFilterRemoveAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_FILTER_REMOVE;\n\n  constructor(\n    public payload: ISeriesFilterPayload[],\n  ) {\n\n    // console.error('SeriesFilterRemoveAction', {\n    //   payload,\n    // });}\n  }\n}\n\nexport class SeriesFilterClearAction implements IAction {\n  public readonly type = ProductActionTypes.SERIES_FILTER_CLEAR;\n  constructor(\n    public payload: {\n      clearUseFilter?: boolean;\n    },\n  ) {\n  }\n}\n\nexport class SetCategorySpecificSeriesFiltersAction implements IAction {\n  public readonly type = ProductActionTypes.SET_CATEGORY_SPECIFIC_SERIES_FILTERS;\n  constructor(\n    public payload: {\n      categorySpecificSeriesFilters: Map<string, any>;\n      // without a key the whole set of filters is replaced, which is how they all get cleared at once\n      filterKey?: CategorySpecificSeriesFilterKey;\n    },\n  ) {\n  }\n}\n\nexport class RemoveCategorySpecificSeriesFilterAction implements IAction {\n  public readonly type = ProductActionTypes.REMOVE_CATEGORY_SPECIFIC_SERIES_FILTER;\n  constructor(\n    public payload: {\n      filterKey: CategorySpecificSeriesFilterKey;\n    },\n  ) {\n  }\n}\n\nexport class SetSeriesSpecificInitSelectionsAction implements IAction {\n  public readonly type = ProductActionTypes.SET_SERIES_SPECIFIC_INIT_SELECTIONS;\n  constructor(\n    public payload: {\n      seriesSpecificInitSelections: Map<string, Map<string, string>>;\n    },\n  ) {\n  }\n}\n\nexport class SetSelectedSeriesSpecificInitDisabledSelectionsAction implements IAction {\n  public readonly type = ProductActionTypes.SET_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS;\n  constructor(\n    public payload: {\n      series: IMap<Series>;\n      selectedSeriesSpecificInitSelections: Map<string, string | number>;\n    },\n  ) {\n  }\n}\n\nexport class DeleteSelectedSeriesSpecificInitDisabledSelectionsAction implements IAction {\n  public readonly type = ProductActionTypes.DELETE_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS;\n  constructor(\n    public payload: {\n      seriesId: number;\n    },\n  ) {\n  }\n}\n\nexport class ResetSeriesSpecificInitDisabledSelectionsAction implements IAction {\n  public readonly type = ProductActionTypes.RESET_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS;\n}\n\nexport class ClearSearchResultsAction implements IAction {\n  public readonly type = ProductActionTypes.CLEAR_SEARCH_RESULTS;\n}\n\nexport class ClearAllSearchResultsAction implements IAction {\n  public readonly type = ProductActionTypes.CLEAR_ALL_SEARCH_RESULTS;\n}\n\nexport class ClearSearchResultsWithCategoryNameAction implements IAction {\n  public readonly type = ProductActionTypes.CLEAR_SEARCH_RESULTS_WITH_CATEGORY;\n\n  constructor(\n    public payload: string\n  ) { }\n}\n\nexport class GetSearchResultsSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_SEARCH_RESULTS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>;\n      categoryName?: string;\n    }\n  ) {}\n}\n\nexport class GetProductsFailedAction implements IAction {\n  public readonly type = ProductActionTypes.GET_PRODUCTS_FAILED;\n\n  constructor (\n    public payload: {\n      err: Error;\n    }\n  ) {}\n}\n\nexport class QuickSearchAction implements IAction {\n  public readonly type = ProductActionTypes.QUICK_SEARCH;\n\n  constructor (\n    public payload: string\n  ) {}\n}\n\nexport class ClearQuickSearchAction implements IAction {\n  public readonly type = ProductActionTypes.CLEAR_QUICK_SEARCH;\n}\n\nexport class QuickSearchFirmAction implements IAction {\n  public readonly type = ProductActionTypes.QUICK_SEARCH_FIRM;\n\n  constructor (\n    public payload: string\n  ) {}\n}\n\nexport class QuickSearchFirmLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.QUICK_SEARCH_FIRM_LOADING;\n\n  constructor (\n    public payload: boolean\n  ) {}\n}\n\nexport class CategorySearchTypeAction implements IAction {\n  public readonly type = ProductActionTypes.CATEGORY_SEARCH_TYPE;\n\n  constructor (\n    public payload: QuickSearchType,\n  ) {}\n}\n\nexport class ProductsFoundAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCTS_FOUND;\n\n  constructor (\n    public payload: {\n      product: object[];\n    }\n  ) {}\n}\n\nexport class ProductsNotFoundAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCTS_NOT_FOUND;\n\n  constructor (\n    public payload: {\n      error: Error | string\n    }\n  ) {}\n}\n\nexport class GetBrandRepProductCategoriesAction implements IAction {\n  public readonly type = ProductActionTypes.GET_BRAND_REP_PRODUCT_CATEGORIES;\n}\n\nexport class GetProductCategoriesAction implements IAction {\n  public readonly type = ProductActionTypes.GET_PRODUCT_CATEGORIES;\n\n  constructor (\n    public payload?: {\n      body?: object;\n      queries?: object;\n      applyUnavailabilityFilter?: boolean;\n    }\n  ) {}\n}\n\nexport class GetProductCategoriesSucceededAction implements IAction {\n  public readonly type = ProductActionTypes.GET_PRODUCT_CATEGORIES_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      response: List<IMap<ProductCategoryGroup>>;\n    }\n  ) {}\n}\n\nexport class FilterProductCategoriesAction implements IAction {\n  public readonly type = ProductActionTypes.FILTER_PRODUCT_CATEGORIES;\n\n  constructor (\n    public payload: IMap<CategoryDisplayTypeListItem>,\n  ) {}\n}\n\nexport class ProductCategorySelectionAction implements IAction {\n  public readonly type = ProductActionTypes.PRODUCT_CATEGORY_SELECTION;\n\n  constructor (\n    public payload: CategoryDisplayType\n    ) {}\n}\n\nexport class UpdateSeriesFilterInputAction implements IAction {\n  public readonly type = ProductActionTypes.UPDATE_SERIES_FILTER_INPUT;\n\n  constructor (\n    public payload?: string\n  ) {}\n}\n\nexport class CheckProductAndAttributesLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING;\n}\n\nexport class CheckProductAndAttributesLoadingDoneAction implements IAction {\n  public readonly type = ProductActionTypes.CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING_DONE;\n}\n\nexport class SaveFirmCategoryAction implements IAction {\n  public readonly type = ProductActionTypes.SAVE_FIRM_CATEGORY;\n\n  constructor (\n    public payload: {\n      name: string,\n      onSuccess?: (arg?: any) => void;\n    }\n  ) { }\n}\n\nexport class SaveFirmCategoryLoadingAction implements IAction {\n  public readonly type = ProductActionTypes.SAVE_FIRM_CATEGORY_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SaveFirmCategorySucceededAction implements IAction {\n  public readonly type = ProductActionTypes.SAVE_FIRM_CATEGORY_SUCCESS;\n}\n\nexport class SaveFirmCategoryFailedAction implements IAction {\n  public readonly type = ProductActionTypes.SAVE_FIRM_CATEGORY_FAILED;\n}","import {\n  Map,\n  Set,\n  OrderedSet,\n  List,\n  fromJS,\n} from 'immutable';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { QuoteAutoSaveType } from './types';\n\nimport {\n  createSelector,\n} from 'reselect';\nimport { IAccountReducerState } from './reducer';\nimport {\n  Contact,\n  Collaborator,\n  User,\n  Office,\n  Firm,\n  OpportunityGroup,\n  OpportunityStatusListItem,\n  Spec,\n  BrandTag,\n  AclItem,\n  Identity,\n  Manufacturer,\n} from '../../models';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Preferences, { PreferenceType } from '../../models/Preferences';\nimport {\n    makeSelectSpec,\n    makeSelectMasterProjectspec,\n    makeSelectMode, makeSelectTemplateProjectSpec\n} from '../SpecModule/selectors';\nimport { makeSelectQuoteFormProps, selectReduxFormState } from '../QuoteModule/selectors';\nimport {GEOLOCATION_ID, Mode} from '../../constants';\nimport { makeSelectIdentityObject, makeSelectIsPimTool, makeSelectUserFirmId, makeSelectUserIsAtsUser } from '../AtsModule/selectors';\nimport {IProductReducerState} from '../ProductModule/reducer';\nimport { getContactDisplayText } from '../../utils/getContactDisplayText';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added AccountModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectLoggedInUserData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('loggedInUserData')\n);\n\nexport const makeSelectGettingFilterList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('gettingFilterList')\n);\n\nexport const makeSelectFilterList = (filterType: string) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.getIn(['savedFilters', filterType])\n);\n\n// filter has logic that's used to select the correct location in order to\n// search series SPEC-2383\nexport const makeSelectLocationForSeriesSearchFilter = ({useXrefLogic}: {useXrefLogic: boolean} = {useXrefLogic: false}) => createSelector(\n  makeSelectSpec(),\n  makeSelectMasterProjectspec(),\n  makeSelectTemplateProjectSpec(),\n  makeSelectMode(),\n  makeSelectLoggedInUserOfficeLocation(),\n  (selectedSpec: IMap<Spec>, masterSpec: IMap<Spec>, templateSpec: IMap<Spec>, mode: Mode, userOfficeLocation: object) => {\n    const specProjectId = selectedSpec && selectedSpec.get('projectId');\n    const selectedSpecLocation = selectedSpec && selectedSpec.get('address');\n\n    const masterSpecProjectId = masterSpec && masterSpec.get('projectId');\n    const masterSelectedSpecLocation = masterSpec && masterSpec.get('address');\n\n    const templateSpecProjectId = templateSpec && templateSpec.get('projectId');\n    const templateSelectedSpecLocation = templateSpec && templateSpec.get('address');\n\n    let specId;\n    let location;\n    switch (mode) {\n        case Mode.master: {\n            specId = masterSpecProjectId;\n            location = masterSelectedSpecLocation;\n            break;\n        }\n        case Mode.masterTemplate: {\n            specId = templateSpecProjectId;\n            location = templateSelectedSpecLocation;\n            break;\n        }\n        default: {\n            specId = specProjectId;\n            location = selectedSpecLocation;\n        }\n    }\n    const id = (location || Map()).getIn(['country', 'id']);\n    const isCanOrUs = id === GEOLOCATION_ID.canada || id === GEOLOCATION_ID.usa;\n    return specId && (useXrefLogic ? isCanOrUs : true) ? location : userOfficeLocation;\n  }\n);\n\nexport const makeSelectPTXrefLocation = () => createSelector(\n  selectReduxFormState(),\n  makeSelectLoggedInUserOfficeLocation(),\n  (quoteFormValues: any = Map(), userOfficeLocation: object) => {\n    const projectLocation = quoteFormValues.getIn(['projectInfo', 'data', 'location']);\n    const id = (projectLocation || Map()).getIn(['country', 'id']);\n    const isCanOrUs = id === GEOLOCATION_ID.canada || id === GEOLOCATION_ID.usa;\n    if (quoteFormValues.getIn(['projectInfo', 'isLinked']) && projectLocation && isCanOrUs) {\n      return projectLocation;\n    } else {\n      return userOfficeLocation;\n    }\n  }\n);\n\nexport const makeSelectBuildingForSeriesSearchFilter = () => createSelector(\n  makeSelectSpec(),\n  makeSelectMasterProjectspec(),\n  makeSelectTemplateProjectSpec(),\n  makeSelectMode(),\n  (selectedSpec: IMap<Spec>, masterSpec: IMap<Spec>, templateSpec: IMap<Spec>, mode: Mode) => {\n    const selectedSpecBuilding = selectedSpec && selectedSpec.get('building');\n    const masterSelectedSpecBuilding = masterSpec && masterSpec.get('building');\n    const templateSelectedSpecBuilding = templateSpec && templateSpec.get('building');\n\n    switch (mode) {\n        case Mode.master: {\n            return masterSelectedSpecBuilding;\n        }\n        case Mode.masterTemplate: {\n            return templateSelectedSpecBuilding;\n        }\n        default: {\n            return selectedSpecBuilding;\n        }\n    }\n  }\n);\n\nexport const makeSelectLoggedInUserOfficeId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('loggedInUserOfficeId')\n);\n\nexport const makeSelectLoggedInUserOffice = () => createSelector(\n  makeSelectLoggedInUserOfficeId(),\n  makeSelectOffices(),\n  (loggedInUserOfficeId: number, offices: Map<number, IMap<Office>>) => offices.getIn([loggedInUserOfficeId]) || Map()\n);\n\nexport const makeSelectLoggedInUserOfficeLocation = () => createSelector(\n  makeSelectLoggedInUserOfficeId(),\n  makeSelectOffices(),\n  (loggedInUserOfficeId: number, offices: Map<number, IMap<Office>>) => offices.getIn([loggedInUserOfficeId, 'location']) || Map()\n);\n\n\n// export const makeSelectLoggedInUserOfficeCountryId = () => createSelector(\n//   makeSelectLoggedInUserOfficeId(),\n//   makeSelectOffices(),\n//   (loggedInUserOfficeId: number, offices: Map<number, IMap<Office>>) => offices.getIn([loggedInUserOfficeId, 'location', 'country', 'id'])\n// );\n\nexport const makeSelectRegionList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('regions')\n);\n\nexport const makeSelectSettingPassword = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('settingPassword')\n);\n\nexport const makeSelectSetPasswordSuccess = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('setPasswordSuccess')\n);\n\nexport const makeSelectOpportunityStatusesList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('opportunityStatuses')\n);\n\nexport const makeSelectOpportunityLabelsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('opportunityLabels')\n);\n\nexport const makeSelectSearchedContacts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('searchedContacts')\n);\n\nexport const makeSelectSearchedContactsHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('searchedContactsHasNextPage')\n);\n\nexport const makeSelectSearchedContactsBySearchTerm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('searchedContactsBySearchTerm')\n);\n\nexport const makeSelectTotalSearchedContactsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('totalSearchedContactsCount')\n);\n\nexport const makeSelectTotalQuickSearchedContactsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('totalQuickSearchedContactsCount')\n);\n\nexport const makeSelectQuickSearchedContactsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quickSearchContactsLoading')\n);\n\nexport const makeSelectVisibilityList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('visibilityList')\n);\n\nexport const makeSelectContacts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('contacts')\n);\n\nexport const makeSelectCollaborators = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('collaborators')\n);\n\nexport const makeSelectFirmCollaboratorIds = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firmCollaborators')\n);\n\nexport const makeSelectFirmCollaborators = () => createSelector(\n  makeSelectCollaborators(),\n  makeSelectFirmCollaboratorIds(),\n  (\n    collaboratorsMap: Map<number, IMap<Collaborator>>,\n    firmCollaboratorIds: Set<number>,\n  ) => {\n    return Map<number, IMap<Collaborator>>().withMutations((collaboratorMap) => {\n      firmCollaboratorIds.forEach((collaboratorId: number) => {\n        const collaborator = collaboratorsMap.get(collaboratorId);\n        if (collaborator != null) {\n          collaboratorMap.set(collaboratorId, collaborator);\n        }\n      });\n    });\n  }\n);\n\n// export const makeSelectNonFirmCollaboratorIds = () => createSelector(\n//   makeSelectCollaborators(),\n//   makeSelectFirmCollaboratorIds(),\n//   (\n//     collaboratorsMap: Map<number, IMap<Collaborator>>,\n//     firmCollaboratorIds: Set<number>,\n//   ) => collaboratorsMap.keySeq().toSet().subtract(firmCollaboratorIds)\n// );\n\nexport const makeSelectNonFirmCollaboratorIds = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('nonFirmCollaborators')\n);\n\nexport const makeSelectNonFirmCollaborators = () => createSelector(\n  makeSelectCollaborators(),\n  makeSelectNonFirmCollaboratorIds(),\n  (\n    collaboratorsMap: Map<number, IMap<Collaborator>>,\n    nonFirmCollaboratorIds: Set<number>,\n  ) => {\n    return Map<number, IMap<Collaborator>>().withMutations((collaboratorMap) => {\n      nonFirmCollaboratorIds.forEach((collaboratorId: number) => {\n        const collaborator = collaboratorsMap.get(collaboratorId);\n        if (collaborator != null) {\n          collaboratorMap.set(collaboratorId, collaborator);\n        }\n      });\n    });\n  }\n);\n\nexport const makeSelectAlphabetizedContacts = () => createSelector(\n  makeSelectContacts(),\n  (contacts: Map<number, IMap<Contact>>) => contacts.sortBy((contact) => {\n    return `${contact.get('firstName')}`.toLowerCase();\n  }).toOrderedMap()\n);\n\nexport const makeSelectContactsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('contactsLoading')\n);\n\nexport const makeSelectContact = (\n  {\n    contactId: controlledContactId,\n  }: {\n    contactId?: number\n  } = {}\n) => createSelector(\n  makeSelectContacts(),\n  makeSelectSelectedContactId(),\n  (contacts: Map<number, IMap<Contact>>, contactId: number) => {\n    const contact = contacts.get(controlledContactId || contactId) || Map();\n    const salesRep = contact.get('salesReps') || List();\n    return contact.set('salesReps', salesRep.toArray());\n  }\n  // }controlledContactId != null\n  //   ? contacts.get(controlledContactId)\n  //   : contacts.get(contactId),\n);\n\nexport const makeSelectSelectedContactId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedContactId')\n);\n\n// unused at the moment\nexport const makeSelectSelectedUserId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedUserId')\n);\n\nexport const makeSelectUsers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('users')\n);\n\nexport const makeSelectUsersForSalesRep = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => {\n    const salesRepUsers = state.get('users').map(user => {\n      return Map({\n        id: user.get('id'),\n        name: [user.get('firstName'), user.get('lastName')].join(' ')\n      });\n    }).toList();\n    return salesRepUsers;\n  },\n);\n\nexport const makeSelectUsersTrackingProject = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('usersTrackingProject')\n);\n\nexport const makeSelectNoteCreators = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('noteCreators')\n);\n\nexport const makeSelectUser = (\n{\n  userId: controlledUserId,\n}: {\n  userId?: number\n} = {}) => createSelector(\n  makeSelectUsers(),\n  makeSelectSelectedUserId(),\n  (users, userId: number) => controlledUserId != null ? users.get(controlledUserId) : users.get(userId),\n);\n\nexport const makeSelectLogInAsUsers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('logInAsUsers'),\n);\n\nexport const makeSelectLogInAsUsersIsSearching = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('logInAsUsersIsSearching')\n);\n\nexport const makeSelectSearchedUsers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('searchedUsers')\n);\n\nexport const makeSelectSearchedUsersWithUsers = () => createSelector(\n  makeSelectSearchedUsers(),\n  makeSelectUsers(),\n  (searchedUsers, users) => {\n    const result = Map({\n      result: searchedUsers.get('result').map((userId) => users.get(userId)),\n      isSearching: searchedUsers.get('isSearching'),\n    }) as IMap<{\n      result: OrderedSet<IMap<User>>;\n      isSearching: boolean;\n    }>;\n    return result;\n  }\n);\n\nexport const makeSelectSearchedUsersWithDetail = () => createSelector(\n  makeSelectSearchedUsers(),\n  makeSelectUsers(),\n  (searchedUsers, users) => searchedUsers?.get('result')?.map((userId) => users.get(userId)) || List()\n);\n\nexport const makeSelectSearchedUsersWithDetailAsListItem = () => createSelector(\n  makeSelectSearchedUsers(),\n  makeSelectUsers(),\n  (searchedUsers, users) => searchedUsers?.get('result')?.map((userId) => users.get(userId)).reduce((acc, user) => {\n    return acc.push(fromJS({\n      id: user.get('id'),\n      value: user.get('fullName')\n    }));\n  }, List()) || List()\n);\n\nexport const makeSelectUsersLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('usersLoading')\n);\n\nexport const makeSelectUserLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('userLoading')\n);\n\nexport const makeSelectUserUpdateSucceeded = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('userUpdateSucceeded')\n);\n\nexport const makeSelectOfficeLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('officeLoading')\n);\n\nexport const _makeSelectUsersPerOffice = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => {\n    return state.get('usersPerOffice');\n  }\n);\n\nexport const _makeSelectUsersPerOfficeMergedWithUserData = () => createSelector(\n  _makeSelectUsersPerOffice(),\n  makeSelectUsers(),\n  (usersPerOfficeRaw, users) => {\n    const usersOfficeMap = usersPerOfficeRaw.withMutations((mutableMap) => {\n      users.forEach((user) => {\n        const officeId = user.get('officeId');\n        const userId = user.get('id');\n        mutableMap.update(officeId, OrderedSet<number>(), (idSet) => idSet.add(userId));\n      });\n    });\n    return usersOfficeMap;\n  }\n);\n\nexport const makeSelectUsersPerOffice = ({\n  officeId: controlledOfficeId\n}: {\n  officeId?: number\n} = {}) => createSelector(\n  _makeSelectUsersPerOfficeMergedWithUserData(),\n  makeSelectSelectedOfficeId(),\n  (usersPerOffice, selectedOfficeId) => {\n    const officeId: number = controlledOfficeId != null ? controlledOfficeId : selectedOfficeId;\n    return usersPerOffice.get(officeId) || OrderedSet<number>();\n  }\n);\n\nexport const makeSelectUsersPerOfficeTeamOrganization = ({\n  officeId: controlledOfficeId\n}: {\n  officeId?: number\n} = {}) => createSelector(\n  _makeSelectUsersPerOfficeMergedWithUserData(),\n  makeSelectTeamOrganizationSelectedOfficeId(),\n  (usersPerOffice, selectedOfficeId) => {\n    const officeId: number = controlledOfficeId != null ? controlledOfficeId : selectedOfficeId;\n    return usersPerOffice.get(officeId) || OrderedSet<number>();\n  }\n);\n\nexport const makeSelectUsersPerOfficeWithUsers = ({\n  officeId: controlledOfficeId\n}: {\n  officeId?: number\n} = {}) => createSelector(\n  makeSelectUsersPerOffice({officeId: controlledOfficeId}),\n  makeSelectUsers(),\n  (usersPerOffice, users) => {\n    const usersInOffice = usersPerOffice.map((userId) => users.get(userId)).filter((user) => user != null);\n    return usersInOffice;\n  }\n);\n\nexport const makeSelectTeamOrganizationUsersWithUsers = ({\n  officeId: controlledOfficeId\n}: {\n  officeId?: number\n} = {}) => createSelector(\n  makeSelectUsersPerOfficeTeamOrganization({officeId: controlledOfficeId}),\n  makeSelectUsers(),\n  (usersInOffice, users) => {\n    return usersInOffice\n      .map((userId) => users.get(userId))\n      .filter((user: IMap<User>) => user != null);\n  }\n);\n\nexport const makeSelectTeamOrganizationSelectedUser = ({\n  officeId: controlledOfficeId\n}: {\n  officeId?: number\n} = {}) => createSelector(\n  makeSelectTeamOrganizationSelectedUserId(),\n  makeSelectTeamOrganizationUsersWithUsers(),\n  (selectedUserId, users) => {\n    return users.find(user => user.get('id') === selectedUserId);\n  }\n);\n\nexport const makeSelectUserById = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('userById')\n);\n\nexport const makeSelectUsersById = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('usersById')\n);\n\nexport const makeSelectIsFetchingFirmById = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isFetchingFirmById')\n);\n\nexport const makeSelectSelectedFirm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedFirm')\n);\n\nexport const makeSelectUserFirm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('userFirm')\n);\n\nexport const makeSelectShareQuotes = () => createSelector(\n  makeSelectUserFirm(),\n  (userFirm: IMap<Firm>) => userFirm?.get('shareQuotes') ?? false\n);\n\nexport const makeSelectShareContacts = () => createSelector(\n  makeSelectUserFirm(),\n  (userFirm: IMap<Firm>) => userFirm?.get('shareContacts') ?? true\n);\n\nexport const makeSelectSelectedOfficeId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedOfficeId'),\n);\n\nexport const makeSelectTeamOrganization = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IAccountReducerState>) => state.get('teamOrganization'),\n);\n\nexport const makeSelectTeamOrganizationSelectedOfficeId = () => createSelector(\n  makeSelectTeamOrganization(),\n  (teamOrganization) => teamOrganization.get('selectedOfficeId'),\n);\n\nexport const makeSelectTeamOrganizationSelectedUserId = () => createSelector(\n  makeSelectTeamOrganization(),\n  (teamOrganization) => teamOrganization.get('selectedUserId'),\n);\n\nexport const makeSelectSelectedFirmId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedFirmId'),\n);\n\nexport const makeSelectOffices = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('offices') || Map<number, IMap<Office>>(),\n);\n\nexport const makeSelectFirmOfficeIdsMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firmOffices') || Map<number, OrderedSet<number>>(),\n);\n\nexport const makeSelectOfficeIdsByFirm = ({\n  firmId,\n}: {\n  firmId: number\n}) => createSelector(\n  makeSelectFirmOfficeIdsMap(),\n  (firmToOfficeIdsMap: Map<number, OrderedSet<number>>) => {\n    return firmToOfficeIdsMap.get(firmId) || OrderedSet<number>();\n  }\n);\n\nexport const makeSelectOfficesByFirm = ({\n  firmId,\n}: {\n  firmId: number\n}) => createSelector(\n  makeSelectOffices(),\n  makeSelectOfficeIdsByFirm({firmId}),\n  (officeMap: Map<number, IMap<Office>>, officeIdSet: OrderedSet<number>) => {\n    return officeIdSet.map((officeId) => {\n      return officeMap.get(officeId);\n    }).filter((office) => office != null);\n  }\n);\n\nexport const makeSelectUserFirmOffices = () => createSelector(\n  makeSelectUserFirmId(),\n  makeSelectOffices(),\n  makeSelectFirmOfficeIdsMap(),\n  (userFirmId: number, officeMap: Map<number, IMap<Office>>, firmToOfficeIdsMap: Map<number, OrderedSet<number>>) => {\n    return firmToOfficeIdsMap.get(userFirmId)?.map((officeId) => {\n      return officeMap.get(officeId);\n    }).filter((office) => office != null);\n  }\n);\n\nexport const makeSelectQuoteOfficesByFirm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteOfficesByFirm') || List<IMap<Office>>(),\n);\n\nexport const makeSelectFirms = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firms') || Map<number, IMap<Firm>>(),\n);\n\nexport const makeSelectOffice = (\n  {\n    officeId: controlledOfficeId,\n  }: {\n    officeId?: number\n  } = {}\n) => createSelector(\n  makeSelectOffices(),\n  makeSelectSelectedOfficeId(),\n  (offices: Map<number, IMap<Office>>, officeId: number) => controlledOfficeId != null\n    ? offices.get(controlledOfficeId)\n    : offices.get(officeId),\n);\n\nexport const makeSelectOfficeBySelectedTeamOrganizationOfficeId = (\n  {\n    officeId: controlledOfficeId,\n  }: {\n    officeId?: number\n  } = {}\n) => createSelector(\n  makeSelectOffices(),\n  makeSelectTeamOrganizationSelectedOfficeId(),\n  (offices: Map<number, IMap<Office>>, officeId: number) => controlledOfficeId != null\n    ? offices.get(controlledOfficeId)\n    : offices.get(officeId),\n);\n\nexport const makeSelectOfficeByTeamOrganization = () => createSelector(\n  makeSelectOffices(),\n  makeSelectTeamOrganization(),\n  (offices: Map<number, IMap<Office>>, teamOrganization: any) => {\n    return offices.get(teamOrganization.get('drawerOfficeId')) || null;\n  }\n);\n\nexport const makeSelectFirm = (\n  {\n    firmId: controlledFirmId,\n  }: {\n    firmId?: number\n  } = {}\n) => createSelector(\n  makeSelectFirms(),\n  makeSelectSelectedFirmId(),\n  (firms: Map<number, IMap<Firm>>, firmId: number) => controlledFirmId != null\n    ? firms.get(controlledFirmId)\n    : firms.get(firmId)\n);\n\nexport const makeSelectUserFirmCompanyName = () => createSelector(\n  makeSelectFirms(),\n  makeSelectUserFirmId(),\n  selectReducerState(),\n  (firms: Map<number, IMap<Firm>>, userFirmId: number) => firms.getIn([userFirmId, 'companyName']),\n);\n\nexport const makeSelectUserFirmCompanyAltName = () => createSelector(\n  makeSelectFirms(),\n  makeSelectUserFirmId(),\n  selectReducerState(),\n  (firms: Map<number, IMap<Firm>>, userFirmId: number) => firms.getIn([userFirmId, 'companyAltName']),\n);\n\nexport const makeSelectFirmCompanyName = () => createSelector(\n  makeSelectFirm(),\n  selectReducerState(),\n  (firm: IMap<Firm>) => firm && firm.get('companyName'),\n);\n\nexport const makeSelectFirmId = () => createSelector(\n  makeSelectOffice(),\n  selectReducerState(),\n  (office: IMap<Office>) => office != null && office.get('firmId'),\n);\n\nexport const makeSelectPreferences = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('preferences')\n);\n\nexport const makeSelectUserDefinedLabel = () => createSelector(\n  makeSelectPreferences(),\n  (preferences: IMap<Preferences>) => preferences?.get(PreferenceType.UserDefinedLabel) || ''\n);\n\nexport const makeSelectOpportunityGroups = () => createSelector(\n  makeSelectPreferences(),\n  // (state: IMapNonRecursive<IOpportunityReducerState>) => state.get('opportunities')\n  (preferences: IMap<Preferences>) => preferences.get(PreferenceType.OpportunityGroups) || List<IMap<OpportunityGroup>>()\n);\nexport const makeSelectOpportunityGroupMap = () => createSelector(\n  makeSelectOpportunityGroups(),\n  (opportunityGroups) => (\n    opportunityGroups.reduce((acc, opportunityGroup) => {\n      const opportunityGroupUuid = opportunityGroup.get('uuid');\n      return acc.set(opportunityGroupUuid, opportunityGroup);\n    }, Map<string, IMap<OpportunityGroup>>())\n  )\n);\n\nexport const makeSelectOpportunityStatuses = () => createSelector(\n  makeSelectPreferences(),\n  // (state: IMapNonRecursive<IOpportunityReducerState>) => state.get('opportunities')\n  (preferences: IMap<Preferences>) => preferences.get(PreferenceType.opportunityStatus) || List<IMap<OpportunityStatusListItem>>()\n);\n\nexport const makeSelectPhases = () => createSelector(\n  makeSelectPreferences(),\n  (preferences: IMap<Preferences>) => preferences.get(PreferenceType.ProjectPhase)\n);\n\nexport const makeSelectQuoteConnectCurrency = () => createSelector(\n  makeSelectPreferences(),\n  (preferences: IMap<Preferences>) => preferences.get(PreferenceType.QuoteConnectCurrency)\n);\n\nexport const makeSelectManufacturer = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('manufacturersList', List())\n);\n\nexport const makeSelectToolSpecificManufacturers = () => createSelector(\n  makeSelectManufacturer(),\n  makeSelectIsPimTool(),\n  makeSelectUserIsAtsUser(),\n  (manufacturers: List<IMap<Manufacturer>>, isPimTool: boolean, userHasAtsUserAcl: boolean) => {\n    if (isPimTool && !userHasAtsUserAcl) {\n      // remove generic brand for pim tool for non-ats users\n      return manufacturers?.filter(manufacturer => manufacturer.get('id') !== 785);\n    }\n    return manufacturers;\n  }\n);\n\nexport const makeSelectCategory = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('categoriesList', List())\n);\n\nexport const makeSelectSelectedManufacturerId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedManufacturerId')\n);\n\nexport const makeSelectSelectedCategoryId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('selectedCategoryId')\n);\n\nexport const makeSelectCustomerDiscounts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('customerDiscounts')\n);\n\nexport const makeSelectOfficeDiscounts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('officeDiscounts')\n);\n\nexport const makeSelectSearchedContactsFindIndex = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('searchedContactsFindIndex')\n);\n\nexport const makeSelectUpdateFirmloading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.getIn(['firms', 'isLoading'])\n);\n\nexport const makeSelectManufacturerPreferences = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('manufacturerPreferences')\n);\n\nexport const makeSelectManufacturerRankings = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('manufacturerRankings')\n);\n\nexport const makeSelectSpecToolDefaultSpecListFilter = () => createSelector(\n  makeSelectLoggedInUserOfficeId(),\n  (userOfficeId: number) => userOfficeId === -1 ? null : ({\n    and: [\n      {\n        'createdBy.office.id': { eq: userOfficeId }\n      }\n    ]\n  })\n);\n\nexport const makeSelectSpecToolDefaultProjectListFilter = () => createSelector(\n  makeSelectLoggedInUserOfficeId(),\n  (userOfficeId: number) => userOfficeId === -1 ? null : ({\n    and: [\n      {\n        isAi: { eq: false }\n      },\n      {\n        'createdByOfficeId': { eq: userOfficeId }\n      }\n    ]\n  })\n);\n\nexport const makeSelectIsSearchingFolderTemplates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isSearchingFolderTemplates')\n);\n\nexport const makeSelectAttachmentFolderTemplates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('attachmentFolderTemplates')\n);\n\nexport const makeSelectCurrentAttachmentFolderTemplateId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('currentAttachmentFolderTemplateId')\n);\n\nexport const makeSelectCurrentAttachmentFolderTemplate = () => createSelector(\n  makeSelectAttachmentFolderTemplates(),\n  makeSelectCurrentAttachmentFolderTemplateId(),\n  (templates, currentTemplateId) => templates.find(template => template.get('id') === currentTemplateId)\n);\n\nexport const makeSelectCurrentAttachmentFolderTemplateFolders = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('currentAttachmentFolderTemplateFolders')\n);\n\nexport const makeSelectDefaultAttachmentFolderTemplate = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('defaultAttachmentFolderTemplate')\n);\n\nexport const makeSelectIsSearchingAllUsers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isSearchingAllUsers')\n);\n\nexport const makeSelectAllUsers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('allUsers')\n);\n\nexport const makeSelectAllUsersCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('allUsersCount')\n);\n\nexport const makeSelectIsSearchingAllFirms = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isSearchingAllFirms')\n);\n\nexport const makeSelectAllFirms = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('allFirms')\n);\n\nexport const makeSelectAllFirmsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('allFirmsCount')\n);\n\nexport const makeSelectDefaultCustomEmail = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('defaultCustomEmail')\n);\n\nexport const makeSelectApps = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('apps')\n);\n\nexport const makeSelectIsGettingApps = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingApps')\n);\n\nexport const makeSelectAclRoles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('aclRoles')\n);\n\nexport const makeSelectAclRolesSorted = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => {\n    const allAclRoles = state.get('aclRoles') || List();\n\n    if (allAclRoles?.size) {\n      let aclGroupMap = Map({ all: allAclRoles });\n      let aclSortedList = fromJS([{ key: 'all', label: 'All', hasGroups: false, contentList: allAclRoles }]);\n\n      allAclRoles.forEach((role: IMap<AclItem>, index) => {\n        const isFeatures = role.get('isFeature');\n        const groupName = role.get('groupName') || 'General';\n        if (isFeatures) {\n          if (!aclGroupMap.getIn(['features', groupName])) {\n            aclGroupMap = aclGroupMap.setIn(['features', groupName], List([role]));\n          } else {\n            aclGroupMap = aclGroupMap.updateIn(['features', groupName], (roles: List<IMap<AclItem>>) => roles.push(role));\n          }\n        } else {\n          if (!aclGroupMap.getIn(['roles', groupName])) {\n            aclGroupMap = aclGroupMap.setIn(['roles', groupName], List([role]));\n          } else {\n            aclGroupMap = aclGroupMap.updateIn(['roles', groupName], (roles: List<IMap<AclItem>>) => roles.push(role));\n          }\n        }\n      });\n\n      if (aclGroupMap.get('features')) {\n        aclSortedList = aclSortedList.push(fromJS({\n          key: 'features',\n          label: 'Features',\n          hasGroups: true,\n          contentList: aclGroupMap.get('features').reduce((acc, group, key: any) => {\n            return acc.push(fromJS({ key: key.toLowerCase(), label: key, hasGroups: false, contentList: group }));\n          }, List()).sort((a, b) => a.get('key').localeCompare(b.get('key')))\n        }));\n      }\n      if (aclGroupMap.get('roles')) {\n        aclSortedList = aclSortedList.push(fromJS({\n          key: 'roles',\n          label: 'Roles',\n          hasGroups: true,\n          contentList: aclGroupMap.get('roles').reduce((acc, group, key: any) => {\n            return acc.push(fromJS({ key: key.toLowerCase(), label: key, hasGroups: false, contentList: group }));\n          }, List()).sort((a, b) => a.get('key').localeCompare(b.get('key')))\n        }));\n      }\n      return aclSortedList;\n    } else {\n      return allAclRoles;\n    }\n  }\n);\n\nexport const makeSelectIsGettingAclRoles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingAclRoles')\n);\n\nexport const makeSelectIsAddingAclRole = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isAddingAclRole')\n);\n\nexport const makeSelectIsDeletingAclRole = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isDeletingAclRole')\n);\n\nexport const makeSelectOfficeBrandTags = (officeId: string) => createSelector(\n  makeSelectFirmBrandTags(),\n  (firmBrandTags: Map<string, List<IMap<BrandTag>>>) => firmBrandTags.get(officeId)\n);\n\nexport const makeSelectFirmBrandTags = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firmBrandTags')\n);\n\nexport const makeSelectFirmBrandTagsKeyed = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firmBrandTagsKeyed')\n);\n\nexport const makeSelectIsGettingFirmBrandTags = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingFirmBrandTags')\n);\n\nexport const makeSelectMasterFormatRoots = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('masterFormatRoots')\n);\n\nexport const makeSelectUploadUsersProgress = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('uploadUsersProgress')\n);\n\nexport const makeSelectIsGettingAutoTrackProjectSetting = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingAutoTrackProjectSetting'),\n);\n\nexport const makeSelectAutoTrackProjects = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('autoTrackProjects'),\n);\n\nexport const makeSelectIsGettingCustomerVisibilitySetting = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingCustomerVisibilitySetting'),\n);\n\nexport const makeSelectDisplayAllBrands = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('displayAllBrands'),\n);\n\nexport const makeSelectIsGettingQuoteExcelColumnPreferences = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingQuoteExcelColumnPreferences'),\n);\n\nexport const makeSelectIsUpdatingQuoteExcelColumnPreferences = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isUpdatingQuoteExcelColumnPreferences'),\n);\n\nexport const makeSelectQuoteExcelColumnPreferences = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteExcelColumnPreferences'),\n);\n\nexport const makeSelectIsGettingVendorQuotationAutoTakeoffSetting = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingVendorQuotationAutoTakeoffSetting'),\n);\n\nexport const makeSelectVendorQuotationAutoTakeoff = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('vendorQuotationAutoTakeoff'),\n);\n\nexport const makeSelectIsGettingVendorQuotationNotifications = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingVendorQuotationNotifications'),\n);\n\nexport const makeSelectVendorQuotationNotifications = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('vendorQuotationNotifications'),\n);\n\nexport const makeSelectIsGettingVendorQuotationMyLogo = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingVendorQuotationMyLogo'),\n);\nexport const makeSelectVendorQuotationMyLogo = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('vendorQuotationMyLogo')\n);\n\nexport const makeSelectIsGettingVendorQuotationBidEmail = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('isGettingVendorQuotationBidEmail'),\n);\nexport const makeSelectVendorQuotationBidEmail = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IAccountReducerState>) => state.get('vendorQuotationBidEmail')\n);\n\nexport const selectDivisions = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'divisions']);\nexport const selectProductCategories = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'categories']);\nexport const selectManufacturers = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'manufacturers']);\nexport const selectUserPreference = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'userPreference']);\nexport const selectBrandRep = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'brandRep']);\nexport const selectIsLoadingBrandRep = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'isLoadingBrandRep']);\nexport const selectBrandRepCategoryByManufacturer = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'brandRepCategoryByManufacturer']);\nexport const selectBrandRepManufacturerByCategory = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'brandRepManufacturerByCategory']);\nexport const selectSearchMode = (state) => state.getIn([DEFAULT_MOUNT_POINT, 'searchMode']);\n\nexport const makeSelectHasFetchedDiscountPriority = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('discountPriority') !== null\n);\n\nexport const makeSelectDiscountPriority = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('discountPriority') || 'customer'\n);\n\nexport const makeSelectHasFetchedQuoteDiscountList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteDiscountList') !== null\n);\n\n// null until the office preference has been fetched, then the (possibly empty) default list\nexport const makeSelectQuoteDiscountList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteDiscountList')\n);\n\nexport const makeSelectShopDrawingColor = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('shopDrawingColor')\n);\n\nexport const makeSelectHasFetchedShopDrawingColor = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('shopDrawingColor') !== null\n);\n\n// manufacturer discounts\nexport const makeSelectHasAlreadyFetchedManufacturerDiscounts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('hasAlreadyFetchedManufacturerDiscounts')\n);\n\nexport const makeSelectIsSearchingManufacturerDiscounts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('isSearchingManufacturerDiscounts')\n);\n\nexport const makeSelectManufacturerDiscounts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('manufacturerDiscounts')\n);\n\nexport const makeSelectManufacturerDiscountsIndexMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('manufacturerDiscountsIndexMap')\n);\n\nexport const makeSelectSelectedManufacturerDiscounts = (selectedManufacturerIds?: List<number>) => createSelector(\n  makeSelectManufacturerDiscounts(),\n  makeSelectManufacturerDiscountsIndexMap(),\n  makeSelectQuoteFormProps(['discounts', 'manufacturerDiscounts']),\n  (manufacturerGroups: List<IMap<any>>, manufacturerDiscountsIndexMap: Map<number, number>, quoteFormSelectedManufacturerIds: List<number>) => {\n    return List<IMap<any>>().withMutations((selectedGroups) => {\n      (selectedManufacturerIds || quoteFormSelectedManufacturerIds || List()).forEach((manufacturerId) => {\n        const groupIndex = manufacturerDiscountsIndexMap.get(manufacturerId);\n        if (groupIndex != null) {\n          const group = manufacturerGroups.get(groupIndex);\n          if (group != null) {\n            selectedGroups.push(group);\n          }\n        }\n      });\n    });\n  }\n);\n\nexport const makeSelectDefaultManufacturerDiscounts = () => createSelector(\n  makeSelectManufacturerDiscounts(),\n  (manufacturerGroups: List<IMap<any>>) => {\n    return manufacturerGroups?.filter((group) => group.get('autoApply') === true) ?? List();\n  }\n);\n\nexport const makeSelectDefaultManufacturerDiscountsTerms = () => createSelector(\n  makeSelectDefaultManufacturerDiscounts(),\n  (defaultManufacturerGroups: List<IMap<any>>) => {\n    if (defaultManufacturerGroups.size === 0) {\n      return '';\n    }\n\n    const terms: string[] = [];\n\n    defaultManufacturerGroups.forEach((group) => {\n      const manufacturerLabel = group.getIn(['manufacturer', 'label']) as string || '';\n      const groupTerms: string[] = [];\n\n      if (group.get('useTermsNote') && group.get('termsNote')) {\n        groupTerms.push(group.get('termsNote') as string);\n      }\n\n      if (groupTerms.length > 0) {\n        terms.push(`${manufacturerLabel}:\\n${groupTerms.join('\\n')}`);\n      }\n    });\n\n    return terms.join('\\n\\n');\n  }\n);\n\nexport const makeSelectDefaultManufacturerDiscountsComments = () => createSelector(\n  makeSelectDefaultManufacturerDiscounts(),\n  (defaultManufacturerGroups: List<IMap<any>>) => {\n    if ( defaultManufacturerGroups.size === 0) {\n      return '';\n    }\n\n    const terms: string[] = [];\n\n    defaultManufacturerGroups.forEach((group) => {\n      const manufacturerLabel = group.getIn(['manufacturer', 'label']) as string || '';\n      const groupTerms: string[] = [];\n\n      if (group.get('useCommentNote') && group.get('commentNote')) {\n        groupTerms.push(group.get('commentNote') as string);\n      }\n\n      if (groupTerms.length > 0) {\n        terms.push(`${manufacturerLabel}:\\n${groupTerms.join('\\n')}`);\n      }\n    });\n\n    return terms.join('\\n\\n');\n  }\n);\n\n// project visibility settings\nexport const makeSelectDefaultProjectVisibility = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('defaultProjectVisibility')\n);\nexport const makeSelectHasFetchedDefaultProjectVisibility = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('defaultProjectVisibility') !== null\n);\n\nexport const makeSelectFirmUsersForOutsideSalesRep = () => createSelector(\n  makeSelectUsers(),\n  makeSelectUserFirmId(),\n  (users: Map<number, IMap<User>>, firmId: number) => {\n    const userList = [];\n    const keyedUsers = users.toJS();\n    for (const key in keyedUsers) {\n      if (keyedUsers.hasOwnProperty(key)) {\n        userList.push(keyedUsers[key]);\n      }\n    }\n\n    const filteredUserList = userList.filter(user => {\n      if (user?.firm?.id === firmId) {\n        return true;\n      }\n      return false;\n    });\n\n    const mappedUsersList = fromJS(filteredUserList).map((option: IMap<User>) => {\n      const firstName = option.get('firstName') || '';\n      const lastName = option.get('lastName');\n      const organization = option.get('organization');\n      const address1 = option.get('address1');\n      const officeName = option.getIn(['office','officeName']);\n      const email = option.get('email');\n      const internalNo = option.get('internalNo');\n      // Make option label\n      const optionLabel = getContactDisplayText(option);\n\n      return fromJS({\n        label: optionLabel,\n        value: `${firstName}|${lastName}|${organization}|${address1}`,\n        name: optionLabel,\n        company: organization,\n        type: option.get('type'),\n        address: `${option.get('address1') || ''} ${option.get('address2') || ''}`,\n        id: option.get('id'),\n        permissions: option.get('permissions'),\n        phone: option.get('mobileNumber') || option.get('officeNumber'),\n        officeName,\n        email,\n        internalNo\n      });\n    });\n\n    return mappedUsersList || List();\n  }\n);\n\nexport const makeSelectFirmEmailSetting = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('firmEmailSetting'),\n);\n\nexport const makeSelectQuoteAutoSavePreferenceFetched = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteAutoSavePreference') !== null\n);\n\nexport const makeSelectQuoteAutoSavePreference = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.get('quoteAutoSavePreference')\n);\n\nexport const makeSelectQuoteAutoSavePreferenceIsOn = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) =>\n    (state.getIn(['quoteAutoSavePreference', 'type']) ?? QuoteAutoSaveType.INTERVAL) === QuoteAutoSaveType.INTERVAL,\n);\n\nexport const makeSelectQuoteAutoSavePreferenceInterval = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IAccountReducerState>) => state.getIn(['quoteAutoSavePreference', 'interval']),\n);\n\nexport default {\n  selectReducerState,\n};\n","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nvar consoleLogger = {\n  type: 'logger',\n  log: function log(args) {\n    this.output('log', args);\n  },\n  warn: function warn(args) {\n    this.output('warn', args);\n  },\n  error: function error(args) {\n    this.output('error', args);\n  },\n  output: function output(type, args) {\n    var _console;\n\n    /* eslint no-console: 0 */\n    if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n  }\n};\n\nvar Logger =\n/*#__PURE__*/\nfunction () {\n  function Logger(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Logger);\n\n    this.init(concreteLogger, options);\n  }\n\n  _createClass(Logger, [{\n    key: \"init\",\n    value: function init(concreteLogger) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.prefix = options.prefix || 'i18next:';\n      this.logger = concreteLogger || consoleLogger;\n      this.options = options;\n      this.debug = options.debug;\n    }\n  }, {\n    key: \"setDebug\",\n    value: function setDebug(bool) {\n      this.debug = bool;\n    }\n  }, {\n    key: \"log\",\n    value: function log() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return this.forward(args, 'log', '', true);\n    }\n  }, {\n    key: \"warn\",\n    value: function warn() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return this.forward(args, 'warn', '', true);\n    }\n  }, {\n    key: \"error\",\n    value: function error() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return this.forward(args, 'error', '');\n    }\n  }, {\n    key: \"deprecate\",\n    value: function deprecate() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n    }\n  }, {\n    key: \"forward\",\n    value: function forward(args, lvl, prefix, debugOnly) {\n      if (debugOnly && !this.debug) return null;\n      if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n      return this.logger[lvl](args);\n    }\n  }, {\n    key: \"create\",\n    value: function create(moduleName) {\n      return new Logger(this.logger, _objectSpread({}, {\n        prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n      }, this.options));\n    }\n  }]);\n\n  return Logger;\n}();\n\nexport default new Logger();","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n  function EventEmitter() {\n    _classCallCheck(this, EventEmitter);\n\n    this.observers = {};\n  }\n\n  _createClass(EventEmitter, [{\n    key: \"on\",\n    value: function on(events, listener) {\n      var _this = this;\n\n      events.split(' ').forEach(function (event) {\n        _this.observers[event] = _this.observers[event] || [];\n\n        _this.observers[event].push(listener);\n      });\n      return this;\n    }\n  }, {\n    key: \"off\",\n    value: function off(event, listener) {\n      var _this2 = this;\n\n      if (!this.observers[event]) {\n        return;\n      }\n\n      this.observers[event].forEach(function () {\n        if (!listener) {\n          delete _this2.observers[event];\n        } else {\n          var index = _this2.observers[event].indexOf(listener);\n\n          if (index > -1) {\n            _this2.observers[event].splice(index, 1);\n          }\n        }\n      });\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (this.observers[event]) {\n        var cloned = [].concat(this.observers[event]);\n        cloned.forEach(function (observer) {\n          observer.apply(void 0, args);\n        });\n      }\n\n      if (this.observers['*']) {\n        var _cloned = [].concat(this.observers['*']);\n\n        _cloned.forEach(function (observer) {\n          observer.apply(observer, [event].concat(args));\n        });\n      }\n    }\n  }]);\n\n  return EventEmitter;\n}();\n\nexport default EventEmitter;","// http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/\nexport function defer() {\n  var res;\n  var rej;\n  var promise = new Promise(function (resolve, reject) {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nexport function makeString(object) {\n  if (object == null) return '';\n  /* eslint prefer-template: 0 */\n\n  return '' + object;\n}\nexport function copy(a, s, t) {\n  a.forEach(function (m) {\n    if (s[m]) t[m] = s[m];\n  });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n\n  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    var key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    object = object[key];\n  }\n\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\n\nexport function setPath(object, path, newValue) {\n  var _getLastOfPath = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath.obj,\n      k = _getLastOfPath.k;\n\n  obj[k] = newValue;\n}\nexport function pushPath(object, path, newValue, concat) {\n  var _getLastOfPath2 = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath2.obj,\n      k = _getLastOfPath2.k;\n\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nexport function getPath(object, path) {\n  var _getLastOfPath3 = getLastOfPath(object, path),\n      obj = _getLastOfPath3.obj,\n      k = _getLastOfPath3.k;\n\n  if (!obj) return undefined;\n  return obj[k];\n}\nexport function deepExtend(target, source, overwrite) {\n  /* eslint no-restricted-syntax: 0 */\n  for (var prop in source) {\n    if (prop in target) {\n      // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n      if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n        if (overwrite) target[prop] = source[prop];\n      } else {\n        deepExtend(target[prop], source[prop], overwrite);\n      }\n    } else {\n      target[prop] = source[prop];\n    }\n  }\n\n  return target;\n}\nexport function regexEscape(str) {\n  /* eslint no-useless-escape: 0 */\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n/* eslint-disable */\n\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\n/* eslint-enable */\n\nexport function escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, function (s) {\n      return _entityMap[s];\n    });\n  }\n\n  return data;\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport EventEmitter from './EventEmitter.js';\nimport * as utils from './utils.js';\n\nvar ResourceStore =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(ResourceStore, _EventEmitter);\n\n  function ResourceStore(data) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n\n    _classCallCheck(this, ResourceStore);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n    EventEmitter.call(_assertThisInitialized(_assertThisInitialized(_this))); // <=IE10 fix (unable to call parent constructor)\n\n    _this.data = data || {};\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    return _this;\n  }\n\n  _createClass(ResourceStore, [{\n    key: \"addNamespaces\",\n    value: function addNamespaces(ns) {\n      if (this.options.ns.indexOf(ns) < 0) {\n        this.options.ns.push(ns);\n      }\n    }\n  }, {\n    key: \"removeNamespaces\",\n    value: function removeNamespaces(ns) {\n      var index = this.options.ns.indexOf(ns);\n\n      if (index > -1) {\n        this.options.ns.splice(index, 1);\n      }\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(lng, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var path = [lng, ns];\n      if (key && typeof key !== 'string') path = path.concat(key);\n      if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n      }\n\n      return utils.getPath(this.data, path);\n    }\n  }, {\n    key: \"addResource\",\n    value: function addResource(lng, ns, key, value) {\n      var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n        silent: false\n      };\n      var keySeparator = this.options.keySeparator;\n      if (keySeparator === undefined) keySeparator = '.';\n      var path = [lng, ns];\n      if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        value = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      utils.setPath(this.data, path, value);\n      if (!options.silent) this.emit('added', lng, ns, key, value);\n    }\n  }, {\n    key: \"addResources\",\n    value: function addResources(lng, ns, resources) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n        silent: false\n      };\n\n      /* eslint no-restricted-syntax: 0 */\n      for (var m in resources) {\n        if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n          silent: true\n        });\n      }\n\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"addResourceBundle\",\n    value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n        silent: false\n      };\n      var path = [lng, ns];\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        deep = resources;\n        resources = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      var pack = utils.getPath(this.data, path) || {};\n\n      if (deep) {\n        utils.deepExtend(pack, resources, overwrite);\n      } else {\n        pack = _objectSpread({}, pack, resources);\n      }\n\n      utils.setPath(this.data, path, pack);\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"removeResourceBundle\",\n    value: function removeResourceBundle(lng, ns) {\n      if (this.hasResourceBundle(lng, ns)) {\n        delete this.data[lng][ns];\n      }\n\n      this.removeNamespaces(ns);\n      this.emit('removed', lng, ns);\n    }\n  }, {\n    key: \"hasResourceBundle\",\n    value: function hasResourceBundle(lng, ns) {\n      return this.getResource(lng, ns) !== undefined;\n    }\n  }, {\n    key: \"getResourceBundle\",\n    value: function getResourceBundle(lng, ns) {\n      if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0\n\n      if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n      return this.getResource(lng, ns);\n    }\n  }, {\n    key: \"getDataByLanguage\",\n    value: function getDataByLanguage(lng) {\n      return this.data[lng];\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.data;\n    }\n  }]);\n\n  return ResourceStore;\n}(EventEmitter);\n\nexport default ResourceStore;","export default {\n  processors: {},\n  addPostProcessor: function addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle: function handle(processors, value, key, options, translator) {\n    var _this = this;\n\n    processors.forEach(function (processor) {\n      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\nimport postProcessor from './postProcessor.js';\nimport * as utils from './utils.js';\n\nvar Translator =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Translator, _EventEmitter);\n\n  function Translator(services) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Translator);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n    EventEmitter.call(_assertThisInitialized(_assertThisInitialized(_this))); // <=IE10 fix (unable to call parent constructor)\n\n    utils.copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat'], services, _assertThisInitialized(_assertThisInitialized(_this)));\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    _this.logger = baseLogger.create('translator');\n    return _this;\n  }\n\n  _createClass(Translator, [{\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng) {\n      if (lng) this.language = lng;\n    }\n  }, {\n    key: \"exists\",\n    value: function exists(key) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        interpolation: {}\n      };\n      var resolved = this.resolve(key, options);\n      return resolved && resolved.res !== undefined;\n    }\n  }, {\n    key: \"extractFromKey\",\n    value: function extractFromKey(key, options) {\n      var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n      if (nsSeparator === undefined) nsSeparator = ':';\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var namespaces = options.ns || this.options.defaultNS;\n\n      if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n        var parts = key.split(nsSeparator);\n        if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n        key = parts.join(keySeparator);\n      }\n\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      return {\n        key: key,\n        namespaces: namespaces\n      };\n    }\n  }, {\n    key: \"translate\",\n    value: function translate(keys, options) {\n      var _this2 = this;\n\n      if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n        /* eslint prefer-rest-params: 0 */\n        options = this.options.overloadTranslationOptionHandler(arguments);\n      }\n\n      if (!options) options = {}; // non valid keys handling\n\n      if (keys === undefined || keys === null) return '';\n      if (!Array.isArray(keys)) keys = [String(keys)]; // separators\n\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; // get namespace(s)\n\n      var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n          key = _this$extractFromKey.key,\n          namespaces = _this$extractFromKey.namespaces;\n\n      var namespace = namespaces[namespaces.length - 1]; // return key on CIMode\n\n      var lng = options.lng || this.language;\n      var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n      if (lng && lng.toLowerCase() === 'cimode') {\n        if (appendNamespaceToCIMode) {\n          var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n          return namespace + nsSeparator + key;\n        }\n\n        return key;\n      } // resolve from store\n\n\n      var resolved = this.resolve(keys, options);\n      var res = resolved && resolved.res;\n      var resUsedKey = resolved && resolved.usedKey || key;\n      var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n      var resType = Object.prototype.toString.apply(res);\n      var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n      var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; // object\n\n      var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n      var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n      if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n        if (!options.returnObjects && !this.options.returnObjects) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n          return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n        } // if we got a separator we loop over children - else we just return object as is\n        // as having it set to false means no hierarchy so no lookup for nested values\n\n\n        if (keySeparator) {\n          var resTypeIsArray = resType === '[object Array]';\n          var copy = resTypeIsArray ? [] : {}; // apply child translation on a copy\n\n          /* eslint no-restricted-syntax: 0 */\n\n          var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n          for (var m in res) {\n            if (Object.prototype.hasOwnProperty.call(res, m)) {\n              var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n              copy[m] = this.translate(deepKey, _objectSpread({}, options, {\n                joinArrays: false,\n                ns: namespaces\n              }));\n              if (copy[m] === deepKey) copy[m] = res[m]; // if nothing found use orginal value as fallback\n            }\n          }\n\n          res = copy;\n        }\n      } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n        // array special treatment\n        res = res.join(joinArrays);\n        if (res) res = this.extendTranslation(res, keys, options);\n      } else {\n        // string, empty or null\n        var usedDefault = false;\n        var usedKey = false; // fallback value\n\n        if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n          usedDefault = true;\n\n          if (options.count !== undefined) {\n            var suffix = this.pluralResolver.getSuffix(lng, options.count);\n            res = options[\"defaultValue\".concat(suffix)];\n          }\n\n          if (!res) res = options.defaultValue;\n        }\n\n        if (!this.isValidLookup(res)) {\n          usedKey = true;\n          res = key;\n        } // save missing\n\n\n        var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n\n        if (usedKey || usedDefault || updateMissing) {\n          this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n          var lngs = [];\n          var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n          if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n            for (var i = 0; i < fallbackLngs.length; i++) {\n              lngs.push(fallbackLngs[i]);\n            }\n          } else if (this.options.saveMissingTo === 'all') {\n            lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n          } else {\n            lngs.push(options.lng || this.language);\n          }\n\n          var send = function send(l, k) {\n            if (_this2.options.missingKeyHandler) {\n              _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n              _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            }\n\n            _this2.emit('missingKey', l, namespace, k, res);\n          };\n\n          if (this.options.saveMissing) {\n            var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n\n            if (this.options.saveMissingPlurals && needsPluralHandling) {\n              lngs.forEach(function (l) {\n                var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n                plurals.forEach(function (p) {\n                  return send([l], p);\n                });\n              });\n            } else {\n              send(lngs, key);\n            }\n          }\n        } // extend\n\n\n        res = this.extendTranslation(res, keys, options, resolved); // append namespace if still key\n\n        if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key); // parseMissingKeyHandler\n\n        if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n      } // return\n\n\n      return res;\n    }\n  }, {\n    key: \"extendTranslation\",\n    value: function extendTranslation(res, key, options, resolved) {\n      var _this3 = this;\n\n      if (this.i18nFormat && this.i18nFormat.parse) {\n        res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n          resolved: resolved\n        });\n      } else if (!options.skipInterpolation) {\n        // i18next.parsing\n        if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n          interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n        })); // interpolate\n\n        var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n        if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n        res = this.interpolator.interpolate(res, data, options.lng || this.language, options); // nesting\n\n        if (options.nest !== false) res = this.interpolator.nest(res, function () {\n          return _this3.translate.apply(_this3, arguments);\n        }, options);\n        if (options.interpolation) this.interpolator.reset();\n      } // post process\n\n\n      var postProcess = options.postProcess || this.options.postProcess;\n      var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n      if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n        res = postProcessor.handle(postProcessorNames, res, key, options, this);\n      }\n\n      return res;\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(keys) {\n      var _this4 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var found;\n      var usedKey; // plain key\n\n      var exactUsedKey; // key with context / plural\n\n      var usedLng;\n      var usedNS;\n      if (typeof keys === 'string') keys = [keys]; // forEach possible key\n\n      keys.forEach(function (k) {\n        if (_this4.isValidLookup(found)) return;\n\n        var extracted = _this4.extractFromKey(k, options);\n\n        var key = extracted.key;\n        usedKey = key;\n        var namespaces = extracted.namespaces;\n        if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n        var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n        var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n        var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n        namespaces.forEach(function (ns) {\n          if (_this4.isValidLookup(found)) return;\n          usedNS = ns;\n          codes.forEach(function (code) {\n            if (_this4.isValidLookup(found)) return;\n            usedLng = code;\n            var finalKey = key;\n            var finalKeys = [finalKey];\n\n            if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n              _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n            } else {\n              var pluralSuffix;\n              if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count); // fallback for plural if context not found\n\n              if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix); // get key for context if needed\n\n              if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context)); // get key for plural if needed\n\n              if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n            } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n\n\n            var possibleKey;\n            /* eslint no-cond-assign: 0 */\n\n            while (possibleKey = finalKeys.pop()) {\n              if (!_this4.isValidLookup(found)) {\n                exactUsedKey = possibleKey;\n                found = _this4.getResource(code, ns, possibleKey, options);\n              }\n            }\n          });\n        });\n      });\n      return {\n        res: found,\n        usedKey: usedKey,\n        exactUsedKey: exactUsedKey,\n        usedLng: usedLng,\n        usedNS: usedNS\n      };\n    }\n  }, {\n    key: \"isValidLookup\",\n    value: function isValidLookup(res) {\n      return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(code, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n      return this.resourceStore.getResource(code, ns, key, options);\n    }\n  }]);\n\n  return Translator;\n}(EventEmitter);\n\nexport default Translator;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport baseLogger from './logger.js';\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil =\n/*#__PURE__*/\nfunction () {\n  function LanguageUtil(options) {\n    _classCallCheck(this, LanguageUtil);\n\n    this.options = options;\n    this.whitelist = this.options.whitelist || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n\n  _createClass(LanguageUtil, [{\n    key: \"getScriptPartFromCode\",\n    value: function getScriptPartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return null;\n      var p = code.split('-');\n      if (p.length === 2) return null;\n      p.pop();\n      return this.formatLanguageCode(p.join('-'));\n    }\n  }, {\n    key: \"getLanguagePartFromCode\",\n    value: function getLanguagePartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return code;\n      var p = code.split('-');\n      return this.formatLanguageCode(p[0]);\n    }\n  }, {\n    key: \"formatLanguageCode\",\n    value: function formatLanguageCode(code) {\n      // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n        var p = code.split('-');\n\n        if (this.options.lowerCaseLng) {\n          p = p.map(function (part) {\n            return part.toLowerCase();\n          });\n        } else if (p.length === 2) {\n          p[0] = p[0].toLowerCase();\n          p[1] = p[1].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        } else if (p.length === 3) {\n          p[0] = p[0].toLowerCase(); // if lenght 2 guess it's a country\n\n          if (p[1].length === 2) p[1] = p[1].toUpperCase();\n          if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n          if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n        }\n\n        return p.join('-');\n      }\n\n      return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n    }\n  }, {\n    key: \"isWhitelisted\",\n    value: function isWhitelisted(code) {\n      if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n        code = this.getLanguagePartFromCode(code);\n      }\n\n      return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n    }\n  }, {\n    key: \"getFallbackCodes\",\n    value: function getFallbackCodes(fallbacks, code) {\n      if (!fallbacks) return [];\n      if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n      if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n      if (!code) return fallbacks.default || []; // asume we have an object defining fallbacks\n\n      var found = fallbacks[code];\n      if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n      if (!found) found = fallbacks[this.formatLanguageCode(code)];\n      if (!found) found = fallbacks.default;\n      return found || [];\n    }\n  }, {\n    key: \"toResolveHierarchy\",\n    value: function toResolveHierarchy(code, fallbackCode) {\n      var _this = this;\n\n      var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n      var codes = [];\n\n      var addCode = function addCode(c) {\n        if (!c) return;\n\n        if (_this.isWhitelisted(c)) {\n          codes.push(c);\n        } else {\n          _this.logger.warn(\"rejecting non-whitelisted language code: \".concat(c));\n        }\n      };\n\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n        if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n        if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n      } else if (typeof code === 'string') {\n        addCode(this.formatLanguageCode(code));\n      }\n\n      fallbackCodes.forEach(function (fc) {\n        if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n      });\n      return codes;\n    }\n  }]);\n\n  return LanguageUtil;\n}();\n\nexport default LanguageUtil;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport baseLogger from './logger.js'; // definition http://translate.sourceforge.net/wiki/l10n/pluralforms\n\n/* eslint-disable */\n\nvar sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nvar _rulesPluralsTypes = {\n  1: function _(n) {\n    return Number(n > 1);\n  },\n  2: function _(n) {\n    return Number(n != 1);\n  },\n  3: function _(n) {\n    return 0;\n  },\n  4: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function _(n) {\n    return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function _(n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function _(n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function _(n) {\n    return Number(n >= 2);\n  },\n  10: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function _(n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function _(n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function _(n) {\n    return Number(n !== 0);\n  },\n  14: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function _(n) {\n    return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n  },\n  18: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function _(n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function _(n) {\n    return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\n/* eslint-enable */\n\nfunction createRules() {\n  var rules = {};\n  sets.forEach(function (set) {\n    set.lngs.forEach(function (l) {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\n\nvar PluralResolver =\n/*#__PURE__*/\nfunction () {\n  function PluralResolver(languageUtils) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, PluralResolver);\n\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    this.rules = createRules();\n  }\n\n  _createClass(PluralResolver, [{\n    key: \"addRule\",\n    value: function addRule(lng, obj) {\n      this.rules[lng] = obj;\n    }\n  }, {\n    key: \"getRule\",\n    value: function getRule(code) {\n      return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n    }\n  }, {\n    key: \"needsPlural\",\n    value: function needsPlural(code) {\n      var rule = this.getRule(code);\n      return rule && rule.numbers.length > 1;\n    }\n  }, {\n    key: \"getPluralFormsOfKey\",\n    value: function getPluralFormsOfKey(code, key) {\n      var _this = this;\n\n      var ret = [];\n      var rule = this.getRule(code);\n      if (!rule) return ret;\n      rule.numbers.forEach(function (n) {\n        var suffix = _this.getSuffix(code, n);\n\n        ret.push(\"\".concat(key).concat(suffix));\n      });\n      return ret;\n    }\n  }, {\n    key: \"getSuffix\",\n    value: function getSuffix(code, count) {\n      var _this2 = this;\n\n      var rule = this.getRule(code);\n\n      if (rule) {\n        // if (rule.numbers.length === 1) return ''; // only singular\n        var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n        var suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural\n\n        if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          if (suffix === 2) {\n            suffix = 'plural';\n          } else if (suffix === 1) {\n            suffix = '';\n          }\n        }\n\n        var returnSuffix = function returnSuffix() {\n          return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n        }; // COMPATIBILITY JSON\n        // v1\n\n\n        if (this.options.compatibilityJSON === 'v1') {\n          if (suffix === 1) return '';\n          if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n          return returnSuffix();\n        } else if (\n        /* v2 */\n        this.options.compatibilityJSON === 'v2') {\n          return returnSuffix();\n        } else if (\n        /* v3 - gettext index */\n        this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          return returnSuffix();\n        }\n\n        return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n      }\n\n      this.logger.warn(\"no plural rule found for: \".concat(code));\n      return '';\n    }\n  }]);\n\n  return PluralResolver;\n}();\n\nexport default PluralResolver;","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport * as utils from './utils.js';\nimport baseLogger from './logger.js';\n\nvar Interpolator =\n/*#__PURE__*/\nfunction () {\n  function Interpolator() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Interpolator);\n\n    this.logger = baseLogger.create('interpolator');\n    this.init(options, true);\n  }\n  /* eslint no-param-reassign: 0 */\n\n\n  _createClass(Interpolator, [{\n    key: \"init\",\n    value: function init() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var reset = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (reset) {\n        this.options = options;\n\n        this.format = options.interpolation && options.interpolation.format || function (value) {\n          return value;\n        };\n      }\n\n      if (!options.interpolation) options.interpolation = {\n        escapeValue: true\n      };\n      var iOpts = options.interpolation;\n      this.escape = iOpts.escape !== undefined ? iOpts.escape : utils.escape;\n      this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n      this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n      this.prefix = iOpts.prefix ? utils.regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n      this.suffix = iOpts.suffix ? utils.regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n      this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n      this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n      this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n      this.nestingPrefix = iOpts.nestingPrefix ? utils.regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || utils.regexEscape('$t(');\n      this.nestingSuffix = iOpts.nestingSuffix ? utils.regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || utils.regexEscape(')');\n      this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; // the regexp\n\n      this.resetRegExp();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      if (this.options) this.init(this.options);\n    }\n  }, {\n    key: \"resetRegExp\",\n    value: function resetRegExp() {\n      // the regexp\n      var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n      this.regexp = new RegExp(regexpStr, 'g');\n      var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n      this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n      var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n      this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(str, data, lng, options) {\n      var _this = this;\n\n      var match;\n      var value;\n      var replaces;\n\n      function regexSafe(val) {\n        return val.replace(/\\$/g, '$$$$');\n      }\n\n      var handleFormat = function handleFormat(key) {\n        if (key.indexOf(_this.formatSeparator) < 0) return utils.getPath(data, key);\n        var p = key.split(_this.formatSeparator);\n        var k = p.shift().trim();\n        var f = p.join(_this.formatSeparator).trim();\n        return _this.format(utils.getPath(data, k), f, lng);\n      };\n\n      this.resetRegExp();\n      var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n      replaces = 0; // unescape if has unescapePrefix/Suffix\n\n      /* eslint no-cond-assign: 0 */\n\n      while (match = this.regexpUnescape.exec(str)) {\n        value = handleFormat(match[1].trim());\n        str = str.replace(match[0], value);\n        this.regexpUnescape.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      replaces = 0; // regular escape on demand\n\n      while (match = this.regexp.exec(str)) {\n        value = handleFormat(match[1].trim());\n\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            var temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else {\n            this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = utils.makeString(value);\n        }\n\n        value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      return str;\n    }\n  }, {\n    key: \"nest\",\n    value: function nest(str, fc) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var match;\n      var value;\n\n      var clonedOptions = _objectSpread({}, options);\n\n      clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n      // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n\n      function handleHasOptions(key, inheritedOptions) {\n        if (key.indexOf(',') < 0) return key;\n        var p = key.split(',');\n        key = p.shift();\n        var optionsString = p.join(',');\n        optionsString = this.interpolate(optionsString, clonedOptions);\n        optionsString = optionsString.replace(/'/g, '\"');\n\n        try {\n          clonedOptions = JSON.parse(optionsString);\n          if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n        } catch (e) {\n          this.logger.error(\"failed parsing options string in nesting for key \".concat(key), e);\n        }\n\n        return key;\n      } // regular escape on demand\n\n\n      while (match = this.nestingRegexp.exec(str)) {\n        value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify\n\n        if (value && match[0] === str && typeof value !== 'string') return value; // no string to include or empty\n\n        if (typeof value !== 'string') value = utils.makeString(value);\n\n        if (!value) {\n          this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n          value = '';\n        } // Nested keys should not be escaped by default #854\n        // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n\n\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n      }\n\n      return str;\n    }\n  }]);\n\n  return Interpolator;\n}();\n\nexport default Interpolator;","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport * as utils from './utils.js';\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\n\nfunction remove(arr, what) {\n  var found = arr.indexOf(what);\n\n  while (found !== -1) {\n    arr.splice(found, 1);\n    found = arr.indexOf(what);\n  }\n}\n\nvar Connector =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Connector, _EventEmitter);\n\n  function Connector(backend, store, services) {\n    var _this;\n\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    _classCallCheck(this, Connector);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n    EventEmitter.call(_assertThisInitialized(_assertThisInitialized(_this))); // <=IE10 fix (unable to call parent constructor)\n\n    _this.backend = backend;\n    _this.store = store;\n    _this.languageUtils = services.languageUtils;\n    _this.options = options;\n    _this.logger = baseLogger.create('backendConnector');\n    _this.state = {};\n    _this.queue = [];\n\n    if (_this.backend && _this.backend.init) {\n      _this.backend.init(services, options.backend, options);\n    }\n\n    return _this;\n  }\n\n  _createClass(Connector, [{\n    key: \"queueLoad\",\n    value: function queueLoad(languages, namespaces, options, callback) {\n      var _this2 = this;\n\n      // find what needs to be loaded\n      var toLoad = [];\n      var pending = [];\n      var toLoadLanguages = [];\n      var toLoadNamespaces = [];\n      languages.forEach(function (lng) {\n        var hasAllNamespaces = true;\n        namespaces.forEach(function (ns) {\n          var name = \"\".concat(lng, \"|\").concat(ns);\n\n          if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n            _this2.state[name] = 2; // loaded\n          } else if (_this2.state[name] < 0) {// nothing to do for err\n          } else if (_this2.state[name] === 1) {\n            if (pending.indexOf(name) < 0) pending.push(name);\n          } else {\n            _this2.state[name] = 1; // pending\n\n            hasAllNamespaces = false;\n            if (pending.indexOf(name) < 0) pending.push(name);\n            if (toLoad.indexOf(name) < 0) toLoad.push(name);\n            if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n          }\n        });\n        if (!hasAllNamespaces) toLoadLanguages.push(lng);\n      });\n\n      if (toLoad.length || pending.length) {\n        this.queue.push({\n          pending: pending,\n          loaded: {},\n          errors: [],\n          callback: callback\n        });\n      }\n\n      return {\n        toLoad: toLoad,\n        pending: pending,\n        toLoadLanguages: toLoadLanguages,\n        toLoadNamespaces: toLoadNamespaces\n      };\n    }\n  }, {\n    key: \"loaded\",\n    value: function loaded(name, err, data) {\n      var _name$split = name.split('|'),\n          _name$split2 = _slicedToArray(_name$split, 2),\n          lng = _name$split2[0],\n          ns = _name$split2[1];\n\n      if (err) this.emit('failedLoading', lng, ns, err);\n\n      if (data) {\n        this.store.addResourceBundle(lng, ns, data);\n      } // set loaded\n\n\n      this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace\n\n      var loaded = {}; // callback if ready\n\n      this.queue.forEach(function (q) {\n        utils.pushPath(q.loaded, [lng], ns);\n        remove(q.pending, name);\n        if (err) q.errors.push(err);\n\n        if (q.pending.length === 0 && !q.done) {\n          // only do once per loaded -> this.emit('loaded', q.loaded);\n          Object.keys(q.loaded).forEach(function (l) {\n            if (!loaded[l]) loaded[l] = [];\n\n            if (q.loaded[l].length) {\n              q.loaded[l].forEach(function (ns) {\n                if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n              });\n            }\n          });\n          /* eslint no-param-reassign: 0 */\n\n          q.done = true;\n\n          if (q.errors.length) {\n            q.callback(q.errors);\n          } else {\n            q.callback();\n          }\n        }\n      }); // emit consolidated loaded event\n\n      this.emit('loaded', loaded); // remove done load requests\n\n      this.queue = this.queue.filter(function (q) {\n        return !q.done;\n      });\n    }\n  }, {\n    key: \"read\",\n    value: function read(lng, ns, fcName) {\n      var _this3 = this;\n\n      var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n      var callback = arguments.length > 5 ? arguments[5] : undefined;\n      if (!lng.length) return callback(null, {}); // noting to load\n\n      return this.backend[fcName](lng, ns, function (err, data) {\n        if (err && data\n        /* = retryFlag */\n        && tried < 5) {\n          setTimeout(function () {\n            _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n          }, wait);\n          return;\n        }\n\n        callback(err, data);\n      });\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"prepareLoading\",\n    value: function prepareLoading(languages, namespaces) {\n      var _this4 = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n      if (!this.backend) {\n        this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n        return callback && callback();\n      }\n\n      if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n      if (!toLoad.toLoad.length) {\n        if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n\n        return null; // pendings will trigger callback\n      }\n\n      toLoad.toLoad.forEach(function (name) {\n        _this4.loadOne(name);\n      });\n    }\n  }, {\n    key: \"load\",\n    value: function load(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {}, callback);\n    }\n  }, {\n    key: \"reload\",\n    value: function reload(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {\n        reload: true\n      }, callback);\n    }\n  }, {\n    key: \"loadOne\",\n    value: function loadOne(name) {\n      var _this5 = this;\n\n      var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n      var _name$split3 = name.split('|'),\n          _name$split4 = _slicedToArray(_name$split3, 2),\n          lng = _name$split4[0],\n          ns = _name$split4[1];\n\n      this.read(lng, ns, 'read', null, null, function (err, data) {\n        if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n        if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n        _this5.loaded(name, err, data);\n      });\n    }\n  }, {\n    key: \"saveMissing\",\n    value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      if (this.backend && this.backend.create) {\n        this.backend.create(languages, namespace, key, fallbackValue, null\n        /* unused callback */\n        , _objectSpread({}, options, {\n          isUpdate: isUpdate\n        }));\n      } // write to store to avoid resending\n\n\n      if (!languages || !languages[0]) return;\n      this.store.addResource(languages[0], namespace, key, fallbackValue);\n    }\n  }]);\n\n  return Connector;\n}(EventEmitter);\n\nexport default Connector;","import _typeof from \"@babel/runtime/helpers/typeof\";\nexport function get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    // string or array of namespaces\n    whitelist: false,\n    // array with whitelisted languages\n    nonExplicitWhitelist: false,\n    load: 'all',\n    // | currentOnly | languageOnly\n    preload: false,\n    // array with preload languages\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    // allow bundling certain languages that are not remotely fetched\n    saveMissing: false,\n    // enable to send missing values\n    updateMissing: false,\n    // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n    saveMissingTo: 'fallback',\n    // 'current' || 'all'\n    saveMissingPlurals: true,\n    // will save all forms not only singular key\n    missingKeyHandler: false,\n    // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n    missingInterpolationHandler: false,\n    // function(str, match)\n    postProcess: false,\n    // string or array of postProcessor names\n    returnNull: true,\n    // allows null value as valid translation\n    returnEmptyString: true,\n    // allows empty string value as valid translation\n    returnObjects: false,\n    joinArrays: false,\n    // or string to join array\n    returnedObjectHandler: function returnedObjectHandler() {},\n    // function(key, value, options) triggered if key returns object but returnObjects is set to false\n    parseMissingKeyHandler: false,\n    // function(key) parsed a key that was not found in t() before returning\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      var ret = {};\n      if (_typeof(args[1]) === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n      if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n        var options = args[3] || args[2];\n        Object.keys(options).forEach(function (key) {\n          ret[key] = options[key];\n        });\n      }\n\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: function format(value, _format, lng) {\n        return value;\n      },\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      // prefixEscaped: '{{',\n      // suffixEscaped: '}}',\n      // unescapeSuffix: '',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      // nestingPrefixEscaped: '$t(',\n      // nestingSuffixEscaped: ')',\n      // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n      maxReplaces: 1000 // max replaces to prevent endless loop\n\n    }\n  };\n}\n/* eslint no-param-reassign: 0 */\n\nexport function transformOptions(options) {\n  // create namespace object if namespace is passed in as string\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; // extend whitelist with cimode\n\n  if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n    options.whitelist = options.whitelist.concat(['cimode']);\n  }\n\n  return options;\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport baseLogger from './logger.js';\nimport EventEmitter from './EventEmitter.js';\nimport ResourceStore from './ResourceStore.js';\nimport Translator from './Translator.js';\nimport LanguageUtils from './LanguageUtils.js';\nimport PluralResolver from './PluralResolver.js';\nimport Interpolator from './Interpolator.js';\nimport BackendConnector from './BackendConnector.js';\nimport { get as getDefaults, transformOptions } from './defaults.js';\nimport postProcessor from './postProcessor.js';\nimport { defer } from './utils.js';\n\nfunction noop() {}\n\nvar I18n =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(I18n, _EventEmitter);\n\n  function I18n() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n    _classCallCheck(this, I18n);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n    EventEmitter.call(_assertThisInitialized(_assertThisInitialized(_this))); // <=IE10 fix (unable to call parent constructor)\n\n    _this.options = transformOptions(options);\n    _this.services = {};\n    _this.logger = baseLogger;\n    _this.modules = {\n      external: []\n    };\n\n    if (callback && !_this.isInitialized && !options.isClone) {\n      // https://github.com/i18next/i18next/issues/879\n      if (!_this.options.initImmediate) {\n        _this.init(options, callback);\n\n        return _possibleConstructorReturn(_this, _assertThisInitialized(_assertThisInitialized(_this)));\n      }\n\n      setTimeout(function () {\n        _this.init(options, callback);\n      }, 0);\n    }\n\n    return _this;\n  }\n\n  _createClass(I18n, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      this.options = _objectSpread({}, getDefaults(), this.options, transformOptions(options));\n      this.format = this.options.interpolation.format;\n      if (!callback) callback = noop;\n\n      function createClassOnDemand(ClassOrObject) {\n        if (!ClassOrObject) return null;\n        if (typeof ClassOrObject === 'function') return new ClassOrObject();\n        return ClassOrObject;\n      } // init services\n\n\n      if (!this.options.isClone) {\n        if (this.modules.logger) {\n          baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n        } else {\n          baseLogger.init(null, this.options);\n        }\n\n        var lu = new LanguageUtils(this.options);\n        this.store = new ResourceStore(this.options.resources, this.options);\n        var s = this.services;\n        s.logger = baseLogger;\n        s.resourceStore = this.store;\n        s.languageUtils = lu;\n        s.pluralResolver = new PluralResolver(lu, {\n          prepend: this.options.pluralSeparator,\n          compatibilityJSON: this.options.compatibilityJSON,\n          simplifyPluralSuffix: this.options.simplifyPluralSuffix\n        });\n        s.interpolator = new Interpolator(this.options);\n        s.backendConnector = new BackendConnector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); // pipe events from backendConnector\n\n        s.backendConnector.on('*', function (event) {\n          for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n            args[_key - 1] = arguments[_key];\n          }\n\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n\n        if (this.modules.languageDetector) {\n          s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n          s.languageDetector.init(s, this.options.detection, this.options);\n        }\n\n        if (this.modules.i18nFormat) {\n          s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n          if (s.i18nFormat.init) s.i18nFormat.init(this);\n        }\n\n        this.translator = new Translator(this.services, this.options); // pipe events from translator\n\n        this.translator.on('*', function (event) {\n          for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            args[_key2 - 1] = arguments[_key2];\n          }\n\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n        this.modules.external.forEach(function (m) {\n          if (m.init) m.init(_this2);\n        });\n      } // append api\n\n\n      var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n      storeApi.forEach(function (fcName) {\n        _this2[fcName] = function () {\n          var _this2$store;\n\n          return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n        };\n      });\n      var deferred = defer();\n\n      var load = function load() {\n        _this2.changeLanguage(_this2.options.lng, function (err, t) {\n          _this2.isInitialized = true;\n\n          _this2.logger.log('initialized', _this2.options);\n\n          _this2.emit('initialized', _this2.options);\n\n          deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning)\n\n          callback(err, t);\n        });\n      };\n\n      if (this.options.resources || !this.options.initImmediate) {\n        load();\n      } else {\n        setTimeout(load, 0);\n      }\n\n      return deferred;\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"loadResources\",\n    value: function loadResources() {\n      var _this3 = this;\n\n      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n      if (!this.options.resources || this.options.partialBundledLanguages) {\n        if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n        var toLoad = [];\n\n        var append = function append(lng) {\n          if (!lng) return;\n\n          var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n          lngs.forEach(function (l) {\n            if (toLoad.indexOf(l) < 0) toLoad.push(l);\n          });\n        };\n\n        if (!this.language) {\n          // at least load fallbacks in this case\n          var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n          fallbacks.forEach(function (l) {\n            return append(l);\n          });\n        } else {\n          append(this.language);\n        }\n\n        if (this.options.preload) {\n          this.options.preload.forEach(function (l) {\n            return append(l);\n          });\n        }\n\n        this.services.backendConnector.load(toLoad, this.options.ns, callback);\n      } else {\n        callback(null);\n      }\n    }\n  }, {\n    key: \"reloadResources\",\n    value: function reloadResources(lngs, ns, callback) {\n      var deferred = defer();\n      if (!lngs) lngs = this.languages;\n      if (!ns) ns = this.options.ns;\n      if (!callback) callback = noop;\n      this.services.backendConnector.reload(lngs, ns, function (err) {\n        deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning)\n\n        callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"use\",\n    value: function use(module) {\n      if (module.type === 'backend') {\n        this.modules.backend = module;\n      }\n\n      if (module.type === 'logger' || module.log && module.warn && module.error) {\n        this.modules.logger = module;\n      }\n\n      if (module.type === 'languageDetector') {\n        this.modules.languageDetector = module;\n      }\n\n      if (module.type === 'i18nFormat') {\n        this.modules.i18nFormat = module;\n      }\n\n      if (module.type === 'postProcessor') {\n        postProcessor.addPostProcessor(module);\n      }\n\n      if (module.type === '3rdParty') {\n        this.modules.external.push(module);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng, callback) {\n      var _this4 = this;\n\n      var deferred = defer();\n      this.emit('languageChanging', lng);\n\n      var done = function done(err, l) {\n        _this4.translator.changeLanguage(l);\n\n        if (l) {\n          _this4.emit('languageChanged', l);\n\n          _this4.logger.log('languageChanged', l);\n        }\n\n        deferred.resolve(function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n        if (callback) callback(err, function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n      };\n\n      var setLng = function setLng(l) {\n        if (l) {\n          _this4.language = l;\n          _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n          if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n          if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n        }\n\n        _this4.loadResources(function (err) {\n          done(err, l);\n        });\n      };\n\n      if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n        setLng(this.services.languageDetector.detect());\n      } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n        this.services.languageDetector.detect(setLng);\n      } else {\n        setLng(lng);\n      }\n\n      return deferred;\n    }\n  }, {\n    key: \"getFixedT\",\n    value: function getFixedT(lng, ns) {\n      var _this5 = this;\n\n      var fixedT = function fixedT(key, opts) {\n        var options = _objectSpread({}, opts);\n\n        if (_typeof(opts) !== 'object') {\n          for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n            rest[_key3 - 2] = arguments[_key3];\n          }\n\n          options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n        }\n\n        options.lng = options.lng || fixedT.lng;\n        options.lngs = options.lngs || fixedT.lngs;\n        options.ns = options.ns || fixedT.ns;\n        return _this5.t(key, options);\n      };\n\n      if (typeof lng === 'string') {\n        fixedT.lng = lng;\n      } else {\n        fixedT.lngs = lng;\n      }\n\n      fixedT.ns = ns;\n      return fixedT;\n    }\n  }, {\n    key: \"t\",\n    value: function t() {\n      var _this$translator;\n\n      return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n    }\n  }, {\n    key: \"exists\",\n    value: function exists() {\n      var _this$translator2;\n\n      return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n    }\n  }, {\n    key: \"setDefaultNamespace\",\n    value: function setDefaultNamespace(ns) {\n      this.options.defaultNS = ns;\n    }\n  }, {\n    key: \"loadNamespaces\",\n    value: function loadNamespaces(ns, callback) {\n      var _this6 = this;\n\n      var deferred = defer();\n\n      if (!this.options.ns) {\n        callback && callback();\n        return Promise.resolve();\n      }\n\n      if (typeof ns === 'string') ns = [ns];\n      ns.forEach(function (n) {\n        if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n      });\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"loadLanguages\",\n    value: function loadLanguages(lngs, callback) {\n      var deferred = defer();\n      if (typeof lngs === 'string') lngs = [lngs];\n      var preloaded = this.options.preload || [];\n      var newLngs = lngs.filter(function (lng) {\n        return preloaded.indexOf(lng) < 0;\n      }); // Exit early if all given languages are already preloaded\n\n      if (!newLngs.length) {\n        if (callback) callback();\n        return Promise.resolve();\n      }\n\n      this.options.preload = preloaded.concat(newLngs);\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"dir\",\n    value: function dir(lng) {\n      if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n      if (!lng) return 'rtl';\n      var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n      return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n    }\n    /* eslint class-methods-use-this: 0 */\n\n  }, {\n    key: \"createInstance\",\n    value: function createInstance() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n      return new I18n(options, callback);\n    }\n  }, {\n    key: \"cloneInstance\",\n    value: function cloneInstance() {\n      var _this7 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n      var mergedOptions = _objectSpread({}, this.options, options, {\n        isClone: true\n      });\n\n      var clone = new I18n(mergedOptions);\n      var membersToCopy = ['store', 'services', 'language'];\n      membersToCopy.forEach(function (m) {\n        clone[m] = _this7[m];\n      });\n      clone.translator = new Translator(clone.services, clone.options);\n      clone.translator.on('*', function (event) {\n        for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n          args[_key4 - 1] = arguments[_key4];\n        }\n\n        clone.emit.apply(clone, [event].concat(args));\n      });\n      clone.init(mergedOptions, callback);\n      clone.translator.options = clone.options; // sync options\n\n      return clone;\n    }\n  }]);\n\n  return I18n;\n}(EventEmitter);\n\nexport default new I18n();","import i18next from './i18next.js';\nexport default i18next;\nexport var changeLanguage = i18next.changeLanguage.bind(i18next);\nexport var cloneInstance = i18next.cloneInstance.bind(i18next);\nexport var createInstance = i18next.createInstance.bind(i18next);\nexport var dir = i18next.dir.bind(i18next);\nexport var exists = i18next.exists.bind(i18next);\nexport var getFixedT = i18next.getFixedT.bind(i18next);\nexport var init = i18next.init.bind(i18next);\nexport var loadLanguages = i18next.loadLanguages.bind(i18next);\nexport var loadNamespaces = i18next.loadNamespaces.bind(i18next);\nexport var loadResources = i18next.loadResources.bind(i18next);\nexport var off = i18next.off.bind(i18next);\nexport var on = i18next.on.bind(i18next);\nexport var setDefaultNamespace = i18next.setDefaultNamespace.bind(i18next);\nexport var t = i18next.t.bind(i18next);\nexport var use = i18next.use.bind(i18next);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      margin: 0\n    },\n\n    /* Styles applied to the root element if `variant=\"body2\"`. */\n    body2: theme.typography.body2,\n\n    /* Styles applied to the root element if `variant=\"body1\"`. */\n    body1: theme.typography.body1,\n\n    /* Styles applied to the root element if `variant=\"caption\"`. */\n    caption: theme.typography.caption,\n\n    /* Styles applied to the root element if `variant=\"button\"`. */\n    button: theme.typography.button,\n\n    /* Styles applied to the root element if `variant=\"h1\"`. */\n    h1: theme.typography.h1,\n\n    /* Styles applied to the root element if `variant=\"h2\"`. */\n    h2: theme.typography.h2,\n\n    /* Styles applied to the root element if `variant=\"h3\"`. */\n    h3: theme.typography.h3,\n\n    /* Styles applied to the root element if `variant=\"h4\"`. */\n    h4: theme.typography.h4,\n\n    /* Styles applied to the root element if `variant=\"h5\"`. */\n    h5: theme.typography.h5,\n\n    /* Styles applied to the root element if `variant=\"h6\"`. */\n    h6: theme.typography.h6,\n\n    /* Styles applied to the root element if `variant=\"subtitle1\"`. */\n    subtitle1: theme.typography.subtitle1,\n\n    /* Styles applied to the root element if `variant=\"subtitle2\"`. */\n    subtitle2: theme.typography.subtitle2,\n\n    /* Styles applied to the root element if `variant=\"overline\"`. */\n    overline: theme.typography.overline,\n\n    /* Styles applied to the root element if `variant=\"srOnly\"`. Only accessible to screen readers. */\n    srOnly: {\n      position: 'absolute',\n      height: 1,\n      width: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the root element if `align=\"left\"`. */\n    alignLeft: {\n      textAlign: 'left'\n    },\n\n    /* Styles applied to the root element if `align=\"center\"`. */\n    alignCenter: {\n      textAlign: 'center'\n    },\n\n    /* Styles applied to the root element if `align=\"right\"`. */\n    alignRight: {\n      textAlign: 'right'\n    },\n\n    /* Styles applied to the root element if `align=\"justify\"`. */\n    alignJustify: {\n      textAlign: 'justify'\n    },\n\n    /* Styles applied to the root element if `nowrap={true}`. */\n    noWrap: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap'\n    },\n\n    /* Styles applied to the root element if `gutterBottom={true}`. */\n    gutterBottom: {\n      marginBottom: '0.35em'\n    },\n\n    /* Styles applied to the root element if `paragraph={true}`. */\n    paragraph: {\n      marginBottom: 16\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"textPrimary\"`. */\n    colorTextPrimary: {\n      color: theme.palette.text.primary\n    },\n\n    /* Styles applied to the root element if `color=\"textSecondary\"`. */\n    colorTextSecondary: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `display=\"inline\"`. */\n    displayInline: {\n      display: 'inline'\n    },\n\n    /* Styles applied to the root element if `display=\"block\"`. */\n    displayBlock: {\n      display: 'block'\n    }\n  };\n};\nvar defaultVariantMapping = {\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  subtitle1: 'h6',\n  subtitle2: 'h6',\n  body1: 'p',\n  body2: 'p'\n};\nvar Typography = React.forwardRef(function Typography(props, ref) {\n  var _props$align = props.align,\n      align = _props$align === void 0 ? 'inherit' : _props$align,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'initial' : _props$color,\n      component = props.component,\n      _props$display = props.display,\n      display = _props$display === void 0 ? 'initial' : _props$display,\n      _props$gutterBottom = props.gutterBottom,\n      gutterBottom = _props$gutterBottom === void 0 ? false : _props$gutterBottom,\n      _props$noWrap = props.noWrap,\n      noWrap = _props$noWrap === void 0 ? false : _props$noWrap,\n      _props$paragraph = props.paragraph,\n      paragraph = _props$paragraph === void 0 ? false : _props$paragraph,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'body1' : _props$variant,\n      _props$variantMapping = props.variantMapping,\n      variantMapping = _props$variantMapping === void 0 ? defaultVariantMapping : _props$variantMapping,\n      other = _objectWithoutProperties(props, [\"align\", \"classes\", \"className\", \"color\", \"component\", \"display\", \"gutterBottom\", \"noWrap\", \"paragraph\", \"variant\", \"variantMapping\"]);\n\n  var Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, variant !== 'inherit' && classes[variant], color !== 'initial' && classes[\"color\".concat(capitalize(color))], noWrap && classes.noWrap, gutterBottom && classes.gutterBottom, paragraph && classes.paragraph, align !== 'inherit' && classes[\"align\".concat(capitalize(align))], display !== 'initial' && classes[\"display\".concat(capitalize(display))]),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Typography.propTypes = {\n  /**\n   * Set the text-align on the component.\n   */\n  align: PropTypes.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['initial', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary', 'error']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   * Overrides the behavior of the `variantMapping` prop.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Controls the display type\n   */\n  display: PropTypes.oneOf(['initial', 'block', 'inline']),\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  gutterBottom: PropTypes.bool,\n\n  /**\n   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n   *\n   * Note that text overflow can only happen with block or inline-block level elements\n   * (the element needs to have a width in order to overflow).\n   */\n  noWrap: PropTypes.bool,\n\n  /**\n   * If `true`, the text will have a bottom margin.\n   */\n  paragraph: PropTypes.bool,\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: PropTypes.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline', 'srOnly', 'inherit']),\n\n  /**\n   * The component maps the variant prop to a range of different DOM element types.\n   * For instance, subtitle1 to `<h6>`.\n   * If you wish to change that mapping, you can provide your own.\n   * Alternatively, you can use the `component` prop.\n   */\n  variantMapping: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTypography'\n})(Typography);","import CharCodes from \"../syntax/CharCodes\";\nimport { charFromCode, copyStringIntoBuffer } from \"../../utils\";\nvar PDFHeader = /** @class */ (function () {\n    function PDFHeader(major, minor) {\n        this.major = String(major);\n        this.minor = String(minor);\n    }\n    PDFHeader.prototype.toString = function () {\n        var bc = charFromCode(129);\n        return \"%PDF-\" + this.major + \".\" + this.minor + \"\\n%\" + bc + bc + bc + bc;\n    };\n    PDFHeader.prototype.sizeInBytes = function () {\n        return 12 + this.major.length + this.minor.length;\n    };\n    PDFHeader.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.Percent;\n        buffer[offset++] = CharCodes.P;\n        buffer[offset++] = CharCodes.D;\n        buffer[offset++] = CharCodes.F;\n        buffer[offset++] = CharCodes.Dash;\n        offset += copyStringIntoBuffer(this.major, buffer, offset);\n        buffer[offset++] = CharCodes.Period;\n        offset += copyStringIntoBuffer(this.minor, buffer, offset);\n        buffer[offset++] = CharCodes.Newline;\n        buffer[offset++] = CharCodes.Percent;\n        buffer[offset++] = 129;\n        buffer[offset++] = 129;\n        buffer[offset++] = 129;\n        buffer[offset++] = 129;\n        return offset - initialOffset;\n    };\n    PDFHeader.forVersion = function (major, minor) {\n        return new PDFHeader(major, minor);\n    };\n    return PDFHeader;\n}());\nexport default PDFHeader;\n//# sourceMappingURL=PDFHeader.js.map","import { __extends } from \"tslib\";\nimport { copyStringIntoBuffer, numberToString } from \"../../utils/index\";\nimport PDFObject from \"./PDFObject\";\nvar PDFNumber = /** @class */ (function (_super) {\n    __extends(PDFNumber, _super);\n    function PDFNumber(value) {\n        var _this = _super.call(this) || this;\n        _this.numberValue = value;\n        _this.stringValue = numberToString(value);\n        return _this;\n    }\n    PDFNumber.prototype.asNumber = function () {\n        return this.numberValue;\n    };\n    /** @deprecated in favor of [[PDFNumber.asNumber]] */\n    PDFNumber.prototype.value = function () {\n        return this.numberValue;\n    };\n    PDFNumber.prototype.clone = function () {\n        return PDFNumber.of(this.numberValue);\n    };\n    PDFNumber.prototype.toString = function () {\n        return this.stringValue;\n    };\n    PDFNumber.prototype.sizeInBytes = function () {\n        return this.stringValue.length;\n    };\n    PDFNumber.prototype.copyBytesInto = function (buffer, offset) {\n        offset += copyStringIntoBuffer(this.stringValue, buffer, offset);\n        return this.stringValue.length;\n    };\n    PDFNumber.of = function (value) { return new PDFNumber(value); };\n    return PDFNumber;\n}(PDFObject));\nexport default PDFNumber;\n//# sourceMappingURL=PDFNumber.js.map","import { __extends, __spreadArrays } from \"tslib\";\nimport PDFNumber from \"./PDFNumber\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { PDFArrayIsNotRectangleError } from \"../errors\";\nvar PDFArray = /** @class */ (function (_super) {\n    __extends(PDFArray, _super);\n    function PDFArray(context) {\n        var _this = _super.call(this) || this;\n        _this.array = [];\n        _this.context = context;\n        return _this;\n    }\n    PDFArray.prototype.size = function () {\n        return this.array.length;\n    };\n    PDFArray.prototype.push = function (object) {\n        this.array.push(object);\n    };\n    PDFArray.prototype.insert = function (index, object) {\n        this.array.splice(index, 0, object);\n    };\n    PDFArray.prototype.indexOf = function (object) {\n        var index = this.array.indexOf(object);\n        return index === -1 ? undefined : index;\n    };\n    PDFArray.prototype.remove = function (index) {\n        this.array.splice(index, 1);\n    };\n    PDFArray.prototype.set = function (idx, object) {\n        this.array[idx] = object;\n    };\n    PDFArray.prototype.get = function (index) {\n        return this.array[index];\n    };\n    PDFArray.prototype.lookupMaybe = function (index) {\n        var _a;\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        return (_a = this.context).lookupMaybe.apply(_a, __spreadArrays([this.get(index)], types));\n    };\n    PDFArray.prototype.lookup = function (index) {\n        var _a;\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        return (_a = this.context).lookup.apply(_a, __spreadArrays([this.get(index)], types));\n    };\n    PDFArray.prototype.asRectangle = function () {\n        if (this.size() !== 4)\n            throw new PDFArrayIsNotRectangleError(this.size());\n        var lowerLeftX = this.lookup(0, PDFNumber).asNumber();\n        var lowerLeftY = this.lookup(1, PDFNumber).asNumber();\n        var upperRightX = this.lookup(2, PDFNumber).asNumber();\n        var upperRightY = this.lookup(3, PDFNumber).asNumber();\n        var x = lowerLeftX;\n        var y = lowerLeftY;\n        var width = upperRightX - lowerLeftX;\n        var height = upperRightY - lowerLeftY;\n        return { x: x, y: y, width: width, height: height };\n    };\n    PDFArray.prototype.asArray = function () {\n        return this.array.slice();\n    };\n    PDFArray.prototype.clone = function (context) {\n        var clone = PDFArray.withContext(context || this.context);\n        for (var idx = 0, len = this.size(); idx < len; idx++) {\n            clone.push(this.array[idx]);\n        }\n        return clone;\n    };\n    PDFArray.prototype.toString = function () {\n        var arrayString = '[ ';\n        for (var idx = 0, len = this.size(); idx < len; idx++) {\n            arrayString += this.get(idx).toString();\n            arrayString += ' ';\n        }\n        arrayString += ']';\n        return arrayString;\n    };\n    PDFArray.prototype.sizeInBytes = function () {\n        var size = 3;\n        for (var idx = 0, len = this.size(); idx < len; idx++) {\n            size += this.get(idx).sizeInBytes() + 1;\n        }\n        return size;\n    };\n    PDFArray.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.LeftSquareBracket;\n        buffer[offset++] = CharCodes.Space;\n        for (var idx = 0, len = this.size(); idx < len; idx++) {\n            offset += this.get(idx).copyBytesInto(buffer, offset);\n            buffer[offset++] = CharCodes.Space;\n        }\n        buffer[offset++] = CharCodes.RightSquareBracket;\n        return offset - initialOffset;\n    };\n    PDFArray.prototype.scalePDFNumbers = function (x, y) {\n        for (var idx = 0, len = this.size(); idx < len; idx++) {\n            var el = this.lookup(idx);\n            if (el instanceof PDFNumber) {\n                var factor = idx % 2 === 0 ? x : y;\n                this.set(idx, PDFNumber.of(el.asNumber() * factor));\n            }\n        }\n    };\n    PDFArray.withContext = function (context) { return new PDFArray(context); };\n    return PDFArray;\n}(PDFObject));\nexport default PDFArray;\n//# sourceMappingURL=PDFArray.js.map","import { __extends } from \"tslib\";\nimport { PrivateConstructorError } from \"../errors\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nvar ENFORCER = {};\nvar PDFBool = /** @class */ (function (_super) {\n    __extends(PDFBool, _super);\n    function PDFBool(enforcer, value) {\n        var _this = this;\n        if (enforcer !== ENFORCER)\n            throw new PrivateConstructorError('PDFBool');\n        _this = _super.call(this) || this;\n        _this.value = value;\n        return _this;\n    }\n    PDFBool.prototype.asBoolean = function () {\n        return this.value;\n    };\n    PDFBool.prototype.clone = function () {\n        return this;\n    };\n    PDFBool.prototype.toString = function () {\n        return String(this.value);\n    };\n    PDFBool.prototype.sizeInBytes = function () {\n        return this.value ? 4 : 5;\n    };\n    PDFBool.prototype.copyBytesInto = function (buffer, offset) {\n        if (this.value) {\n            buffer[offset++] = CharCodes.t;\n            buffer[offset++] = CharCodes.r;\n            buffer[offset++] = CharCodes.u;\n            buffer[offset++] = CharCodes.e;\n            return 4;\n        }\n        else {\n            buffer[offset++] = CharCodes.f;\n            buffer[offset++] = CharCodes.a;\n            buffer[offset++] = CharCodes.l;\n            buffer[offset++] = CharCodes.s;\n            buffer[offset++] = CharCodes.e;\n            return 5;\n        }\n    };\n    PDFBool.True = new PDFBool(ENFORCER, true);\n    PDFBool.False = new PDFBool(ENFORCER, false);\n    return PDFBool;\n}(PDFObject));\nexport default PDFBool;\n//# sourceMappingURL=PDFBool.js.map","import CharCodes from \"./CharCodes\";\nexport var IsDelimiter = new Uint8Array(256);\nIsDelimiter[CharCodes.LeftParen] = 1;\nIsDelimiter[CharCodes.RightParen] = 1;\nIsDelimiter[CharCodes.LessThan] = 1;\nIsDelimiter[CharCodes.GreaterThan] = 1;\nIsDelimiter[CharCodes.LeftSquareBracket] = 1;\nIsDelimiter[CharCodes.RightSquareBracket] = 1;\nIsDelimiter[CharCodes.LeftCurly] = 1;\nIsDelimiter[CharCodes.RightCurly] = 1;\nIsDelimiter[CharCodes.ForwardSlash] = 1;\nIsDelimiter[CharCodes.Percent] = 1;\n//# sourceMappingURL=Delimiters.js.map","import CharCodes from \"./CharCodes\";\nexport var IsWhitespace = new Uint8Array(256);\nIsWhitespace[CharCodes.Null] = 1;\nIsWhitespace[CharCodes.Tab] = 1;\nIsWhitespace[CharCodes.Newline] = 1;\nIsWhitespace[CharCodes.FormFeed] = 1;\nIsWhitespace[CharCodes.CarriageReturn] = 1;\nIsWhitespace[CharCodes.Space] = 1;\n//# sourceMappingURL=Whitespace.js.map","import CharCodes from \"./CharCodes\";\nimport { IsDelimiter } from \"./Delimiters\";\nimport { IsWhitespace } from \"./Whitespace\";\nexport var IsIrregular = new Uint8Array(256);\nfor (var idx = 0, len = 256; idx < len; idx++) {\n    IsIrregular[idx] = IsWhitespace[idx] || IsDelimiter[idx] ? 1 : 0;\n}\nIsIrregular[CharCodes.Hash] = 1;\n//# sourceMappingURL=Irregular.js.map","import { __extends } from \"tslib\";\nimport { PrivateConstructorError } from \"../errors\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { IsIrregular } from \"../syntax/Irregular\";\nimport { charFromHexCode, copyStringIntoBuffer, toCharCode, toHexString, } from \"../../utils\";\nvar decodeName = function (name) {\n    return name.replace(/#([\\dABCDEF]{2})/g, function (_, hex) { return charFromHexCode(hex); });\n};\nvar isRegularChar = function (charCode) {\n    return charCode >= CharCodes.ExclamationPoint &&\n        charCode <= CharCodes.Tilde &&\n        !IsIrregular[charCode];\n};\nvar ENFORCER = {};\nvar pool = new Map();\nvar PDFName = /** @class */ (function (_super) {\n    __extends(PDFName, _super);\n    function PDFName(enforcer, name) {\n        var _this = this;\n        if (enforcer !== ENFORCER)\n            throw new PrivateConstructorError('PDFName');\n        _this = _super.call(this) || this;\n        var encodedName = '/';\n        for (var idx = 0, len = name.length; idx < len; idx++) {\n            var character = name[idx];\n            var code = toCharCode(character);\n            encodedName += isRegularChar(code) ? character : \"#\" + toHexString(code);\n        }\n        _this.encodedName = encodedName;\n        return _this;\n    }\n    PDFName.prototype.asBytes = function () {\n        var bytes = [];\n        var hex = '';\n        var escaped = false;\n        var pushByte = function (byte) {\n            if (byte !== undefined)\n                bytes.push(byte);\n            escaped = false;\n        };\n        for (var idx = 1, len = this.encodedName.length; idx < len; idx++) {\n            var char = this.encodedName[idx];\n            var byte = toCharCode(char);\n            var nextChar = this.encodedName[idx + 1];\n            if (!escaped) {\n                if (byte === CharCodes.Hash)\n                    escaped = true;\n                else\n                    pushByte(byte);\n            }\n            else {\n                if ((byte >= CharCodes.Zero && byte <= CharCodes.Nine) ||\n                    (byte >= CharCodes.a && byte <= CharCodes.f) ||\n                    (byte >= CharCodes.A && byte <= CharCodes.F)) {\n                    hex += char;\n                    if (hex.length === 2 ||\n                        !((nextChar >= '0' && nextChar <= '9') ||\n                            (nextChar >= 'a' && nextChar <= 'f') ||\n                            (nextChar >= 'A' && nextChar <= 'F'))) {\n                        pushByte(parseInt(hex, 16));\n                        hex = '';\n                    }\n                }\n                else {\n                    pushByte(byte);\n                }\n            }\n        }\n        return new Uint8Array(bytes);\n    };\n    // TODO: This should probably use `utf8Decode()`\n    // TODO: Polyfill Array.from?\n    PDFName.prototype.decodeText = function () {\n        var bytes = this.asBytes();\n        return String.fromCharCode.apply(String, Array.from(bytes));\n    };\n    PDFName.prototype.asString = function () {\n        return this.encodedName;\n    };\n    /** @deprecated in favor of [[PDFName.asString]] */\n    PDFName.prototype.value = function () {\n        return this.encodedName;\n    };\n    PDFName.prototype.clone = function () {\n        return this;\n    };\n    PDFName.prototype.toString = function () {\n        return this.encodedName;\n    };\n    PDFName.prototype.sizeInBytes = function () {\n        return this.encodedName.length;\n    };\n    PDFName.prototype.copyBytesInto = function (buffer, offset) {\n        offset += copyStringIntoBuffer(this.encodedName, buffer, offset);\n        return this.encodedName.length;\n    };\n    PDFName.of = function (name) {\n        var decodedValue = decodeName(name);\n        var instance = pool.get(decodedValue);\n        if (!instance) {\n            instance = new PDFName(ENFORCER, decodedValue);\n            pool.set(decodedValue, instance);\n        }\n        return instance;\n    };\n    /* tslint:disable member-ordering */\n    PDFName.Length = PDFName.of('Length');\n    PDFName.FlateDecode = PDFName.of('FlateDecode');\n    PDFName.Resources = PDFName.of('Resources');\n    PDFName.Font = PDFName.of('Font');\n    PDFName.XObject = PDFName.of('XObject');\n    PDFName.ExtGState = PDFName.of('ExtGState');\n    PDFName.Contents = PDFName.of('Contents');\n    PDFName.Type = PDFName.of('Type');\n    PDFName.Parent = PDFName.of('Parent');\n    PDFName.MediaBox = PDFName.of('MediaBox');\n    PDFName.Page = PDFName.of('Page');\n    PDFName.Annots = PDFName.of('Annots');\n    PDFName.TrimBox = PDFName.of('TrimBox');\n    PDFName.ArtBox = PDFName.of('ArtBox');\n    PDFName.BleedBox = PDFName.of('BleedBox');\n    PDFName.CropBox = PDFName.of('CropBox');\n    PDFName.Rotate = PDFName.of('Rotate');\n    PDFName.Title = PDFName.of('Title');\n    PDFName.Author = PDFName.of('Author');\n    PDFName.Subject = PDFName.of('Subject');\n    PDFName.Creator = PDFName.of('Creator');\n    PDFName.Keywords = PDFName.of('Keywords');\n    PDFName.Producer = PDFName.of('Producer');\n    PDFName.CreationDate = PDFName.of('CreationDate');\n    PDFName.ModDate = PDFName.of('ModDate');\n    return PDFName;\n}(PDFObject));\nexport default PDFName;\n//# sourceMappingURL=PDFName.js.map","var PDFOperatorNames;\n(function (PDFOperatorNames) {\n    // Non Stroking Color Operators\n    PDFOperatorNames[\"NonStrokingColor\"] = \"sc\";\n    PDFOperatorNames[\"NonStrokingColorN\"] = \"scn\";\n    PDFOperatorNames[\"NonStrokingColorRgb\"] = \"rg\";\n    PDFOperatorNames[\"NonStrokingColorGray\"] = \"g\";\n    PDFOperatorNames[\"NonStrokingColorCmyk\"] = \"k\";\n    PDFOperatorNames[\"NonStrokingColorspace\"] = \"cs\";\n    // Stroking Color Operators\n    PDFOperatorNames[\"StrokingColor\"] = \"SC\";\n    PDFOperatorNames[\"StrokingColorN\"] = \"SCN\";\n    PDFOperatorNames[\"StrokingColorRgb\"] = \"RG\";\n    PDFOperatorNames[\"StrokingColorGray\"] = \"G\";\n    PDFOperatorNames[\"StrokingColorCmyk\"] = \"K\";\n    PDFOperatorNames[\"StrokingColorspace\"] = \"CS\";\n    // Marked Content Operators\n    PDFOperatorNames[\"BeginMarkedContentSequence\"] = \"BDC\";\n    PDFOperatorNames[\"BeginMarkedContent\"] = \"BMC\";\n    PDFOperatorNames[\"EndMarkedContent\"] = \"EMC\";\n    PDFOperatorNames[\"MarkedContentPointWithProps\"] = \"DP\";\n    PDFOperatorNames[\"MarkedContentPoint\"] = \"MP\";\n    PDFOperatorNames[\"DrawObject\"] = \"Do\";\n    // Graphics State Operators\n    PDFOperatorNames[\"ConcatTransformationMatrix\"] = \"cm\";\n    PDFOperatorNames[\"PopGraphicsState\"] = \"Q\";\n    PDFOperatorNames[\"PushGraphicsState\"] = \"q\";\n    PDFOperatorNames[\"SetFlatness\"] = \"i\";\n    PDFOperatorNames[\"SetGraphicsStateParams\"] = \"gs\";\n    PDFOperatorNames[\"SetLineCapStyle\"] = \"J\";\n    PDFOperatorNames[\"SetLineDashPattern\"] = \"d\";\n    PDFOperatorNames[\"SetLineJoinStyle\"] = \"j\";\n    PDFOperatorNames[\"SetLineMiterLimit\"] = \"M\";\n    PDFOperatorNames[\"SetLineWidth\"] = \"w\";\n    PDFOperatorNames[\"SetTextMatrix\"] = \"Tm\";\n    PDFOperatorNames[\"SetRenderingIntent\"] = \"ri\";\n    // Graphics Operators\n    PDFOperatorNames[\"AppendRectangle\"] = \"re\";\n    PDFOperatorNames[\"BeginInlineImage\"] = \"BI\";\n    PDFOperatorNames[\"BeginInlineImageData\"] = \"ID\";\n    PDFOperatorNames[\"EndInlineImage\"] = \"EI\";\n    PDFOperatorNames[\"ClipEvenOdd\"] = \"W*\";\n    PDFOperatorNames[\"ClipNonZero\"] = \"W\";\n    PDFOperatorNames[\"CloseAndStroke\"] = \"s\";\n    PDFOperatorNames[\"CloseFillEvenOddAndStroke\"] = \"b*\";\n    PDFOperatorNames[\"CloseFillNonZeroAndStroke\"] = \"b\";\n    PDFOperatorNames[\"ClosePath\"] = \"h\";\n    PDFOperatorNames[\"AppendBezierCurve\"] = \"c\";\n    PDFOperatorNames[\"CurveToReplicateFinalPoint\"] = \"y\";\n    PDFOperatorNames[\"CurveToReplicateInitialPoint\"] = \"v\";\n    PDFOperatorNames[\"EndPath\"] = \"n\";\n    PDFOperatorNames[\"FillEvenOddAndStroke\"] = \"B*\";\n    PDFOperatorNames[\"FillEvenOdd\"] = \"f*\";\n    PDFOperatorNames[\"FillNonZeroAndStroke\"] = \"B\";\n    PDFOperatorNames[\"FillNonZero\"] = \"f\";\n    PDFOperatorNames[\"LegacyFillNonZero\"] = \"F\";\n    PDFOperatorNames[\"LineTo\"] = \"l\";\n    PDFOperatorNames[\"MoveTo\"] = \"m\";\n    PDFOperatorNames[\"ShadingFill\"] = \"sh\";\n    PDFOperatorNames[\"StrokePath\"] = \"S\";\n    // Text Operators\n    PDFOperatorNames[\"BeginText\"] = \"BT\";\n    PDFOperatorNames[\"EndText\"] = \"ET\";\n    PDFOperatorNames[\"MoveText\"] = \"Td\";\n    PDFOperatorNames[\"MoveTextSetLeading\"] = \"TD\";\n    PDFOperatorNames[\"NextLine\"] = \"T*\";\n    PDFOperatorNames[\"SetCharacterSpacing\"] = \"Tc\";\n    PDFOperatorNames[\"SetFontAndSize\"] = \"Tf\";\n    PDFOperatorNames[\"SetTextHorizontalScaling\"] = \"Tz\";\n    PDFOperatorNames[\"SetTextLineHeight\"] = \"TL\";\n    PDFOperatorNames[\"SetTextRenderingMode\"] = \"Tr\";\n    PDFOperatorNames[\"SetTextRise\"] = \"Ts\";\n    PDFOperatorNames[\"SetWordSpacing\"] = \"Tw\";\n    PDFOperatorNames[\"ShowText\"] = \"Tj\";\n    PDFOperatorNames[\"ShowTextAdjusted\"] = \"TJ\";\n    PDFOperatorNames[\"ShowTextLine\"] = \"'\";\n    PDFOperatorNames[\"ShowTextLineAndSpace\"] = \"\\\"\";\n    // Type3 Font Operators\n    PDFOperatorNames[\"Type3D0\"] = \"d0\";\n    PDFOperatorNames[\"Type3D1\"] = \"d1\";\n    // Compatibility Section Operators\n    PDFOperatorNames[\"BeginCompatibilitySection\"] = \"BX\";\n    PDFOperatorNames[\"EndCompatibilitySection\"] = \"EX\";\n})(PDFOperatorNames || (PDFOperatorNames = {}));\nexport default PDFOperatorNames;\n//# sourceMappingURL=PDFOperatorNames.js.map","import { __extends } from \"tslib\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nvar PDFNull = /** @class */ (function (_super) {\n    __extends(PDFNull, _super);\n    function PDFNull() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFNull.prototype.asNull = function () {\n        return null;\n    };\n    PDFNull.prototype.clone = function () {\n        return this;\n    };\n    PDFNull.prototype.toString = function () {\n        return 'null';\n    };\n    PDFNull.prototype.sizeInBytes = function () {\n        return 4;\n    };\n    PDFNull.prototype.copyBytesInto = function (buffer, offset) {\n        buffer[offset++] = CharCodes.n;\n        buffer[offset++] = CharCodes.u;\n        buffer[offset++] = CharCodes.l;\n        buffer[offset++] = CharCodes.l;\n        return 4;\n    };\n    return PDFNull;\n}(PDFObject));\nexport default new PDFNull();\n//# sourceMappingURL=PDFNull.js.map","import { __extends, __spreadArrays } from \"tslib\";\nimport PDFName from \"./PDFName\";\nimport PDFNull from \"./PDFNull\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nvar PDFDict = /** @class */ (function (_super) {\n    __extends(PDFDict, _super);\n    function PDFDict(map, context) {\n        var _this = _super.call(this) || this;\n        _this.dict = map;\n        _this.context = context;\n        return _this;\n    }\n    PDFDict.prototype.keys = function () {\n        return Array.from(this.dict.keys());\n    };\n    PDFDict.prototype.values = function () {\n        return Array.from(this.dict.values());\n    };\n    PDFDict.prototype.entries = function () {\n        return Array.from(this.dict.entries());\n    };\n    PDFDict.prototype.set = function (key, value) {\n        this.dict.set(key, value);\n    };\n    PDFDict.prototype.get = function (key, \n    // TODO: `preservePDFNull` is for backwards compatibility. Should be\n    // removed in next breaking API change.\n    preservePDFNull) {\n        if (preservePDFNull === void 0) { preservePDFNull = false; }\n        var value = this.dict.get(key);\n        if (value === PDFNull && !preservePDFNull)\n            return undefined;\n        return value;\n    };\n    PDFDict.prototype.has = function (key) {\n        var value = this.dict.get(key);\n        return value !== undefined && value !== PDFNull;\n    };\n    PDFDict.prototype.lookupMaybe = function (key) {\n        var _a;\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        // TODO: `preservePDFNull` is for backwards compatibility. Should be\n        // removed in next breaking API change.\n        var preservePDFNull = types.includes(PDFNull);\n        var value = (_a = this.context).lookupMaybe.apply(_a, __spreadArrays([this.get(key, preservePDFNull)], types));\n        if (value === PDFNull && !preservePDFNull)\n            return undefined;\n        return value;\n    };\n    PDFDict.prototype.lookup = function (key) {\n        var _a;\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        // TODO: `preservePDFNull` is for backwards compatibility. Should be\n        // removed in next breaking API change.\n        var preservePDFNull = types.includes(PDFNull);\n        var value = (_a = this.context).lookup.apply(_a, __spreadArrays([this.get(key, preservePDFNull)], types));\n        if (value === PDFNull && !preservePDFNull)\n            return undefined;\n        return value;\n    };\n    PDFDict.prototype.delete = function (key) {\n        return this.dict.delete(key);\n    };\n    PDFDict.prototype.asMap = function () {\n        return new Map(this.dict);\n    };\n    /** Generate a random key that doesn't exist in current key set */\n    PDFDict.prototype.uniqueKey = function (tag) {\n        if (tag === void 0) { tag = ''; }\n        var existingKeys = this.keys();\n        var key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n        while (existingKeys.includes(key)) {\n            key = PDFName.of(this.context.addRandomSuffix(tag, 10));\n        }\n        return key;\n    };\n    PDFDict.prototype.clone = function (context) {\n        var clone = PDFDict.withContext(context || this.context);\n        var entries = this.entries();\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], key = _a[0], value = _a[1];\n            clone.set(key, value);\n        }\n        return clone;\n    };\n    PDFDict.prototype.toString = function () {\n        var dictString = '<<\\n';\n        var entries = this.entries();\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], key = _a[0], value = _a[1];\n            dictString += key.toString() + ' ' + value.toString() + '\\n';\n        }\n        dictString += '>>';\n        return dictString;\n    };\n    PDFDict.prototype.sizeInBytes = function () {\n        var size = 5;\n        var entries = this.entries();\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], key = _a[0], value = _a[1];\n            size += key.sizeInBytes() + value.sizeInBytes() + 2;\n        }\n        return size;\n    };\n    PDFDict.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.LessThan;\n        buffer[offset++] = CharCodes.LessThan;\n        buffer[offset++] = CharCodes.Newline;\n        var entries = this.entries();\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], key = _a[0], value = _a[1];\n            offset += key.copyBytesInto(buffer, offset);\n            buffer[offset++] = CharCodes.Space;\n            offset += value.copyBytesInto(buffer, offset);\n            buffer[offset++] = CharCodes.Newline;\n        }\n        buffer[offset++] = CharCodes.GreaterThan;\n        buffer[offset++] = CharCodes.GreaterThan;\n        return offset - initialOffset;\n    };\n    PDFDict.withContext = function (context) { return new PDFDict(new Map(), context); };\n    PDFDict.fromMapWithContext = function (map, context) {\n        return new PDFDict(map, context);\n    };\n    return PDFDict;\n}(PDFObject));\nexport default PDFDict;\n//# sourceMappingURL=PDFDict.js.map","import { __extends } from \"tslib\";\nimport { MethodNotImplementedError } from \"../errors\";\nimport PDFName from \"./PDFName\";\nimport PDFNumber from \"./PDFNumber\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nvar PDFStream = /** @class */ (function (_super) {\n    __extends(PDFStream, _super);\n    function PDFStream(dict) {\n        var _this = _super.call(this) || this;\n        _this.dict = dict;\n        return _this;\n    }\n    PDFStream.prototype.clone = function (_context) {\n        throw new MethodNotImplementedError(this.constructor.name, 'clone');\n    };\n    PDFStream.prototype.getContentsString = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'getContentsString');\n    };\n    PDFStream.prototype.getContents = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'getContents');\n    };\n    PDFStream.prototype.getContentsSize = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'getContentsSize');\n    };\n    PDFStream.prototype.updateDict = function () {\n        var contentsSize = this.getContentsSize();\n        this.dict.set(PDFName.Length, PDFNumber.of(contentsSize));\n    };\n    PDFStream.prototype.sizeInBytes = function () {\n        this.updateDict();\n        return this.dict.sizeInBytes() + this.getContentsSize() + 18;\n    };\n    PDFStream.prototype.toString = function () {\n        this.updateDict();\n        var streamString = this.dict.toString();\n        streamString += '\\nstream\\n';\n        streamString += this.getContentsString();\n        streamString += '\\nendstream';\n        return streamString;\n    };\n    PDFStream.prototype.copyBytesInto = function (buffer, offset) {\n        this.updateDict();\n        var initialOffset = offset;\n        offset += this.dict.copyBytesInto(buffer, offset);\n        buffer[offset++] = CharCodes.Newline;\n        buffer[offset++] = CharCodes.s;\n        buffer[offset++] = CharCodes.t;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.a;\n        buffer[offset++] = CharCodes.m;\n        buffer[offset++] = CharCodes.Newline;\n        var contents = this.getContents();\n        for (var idx = 0, len = contents.length; idx < len; idx++) {\n            buffer[offset++] = contents[idx];\n        }\n        buffer[offset++] = CharCodes.Newline;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.n;\n        buffer[offset++] = CharCodes.d;\n        buffer[offset++] = CharCodes.s;\n        buffer[offset++] = CharCodes.t;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.a;\n        buffer[offset++] = CharCodes.m;\n        return offset - initialOffset;\n    };\n    return PDFStream;\n}(PDFObject));\nexport default PDFStream;\n//# sourceMappingURL=PDFStream.js.map","import { __extends } from \"tslib\";\nimport PDFStream from \"./PDFStream\";\nimport { arrayAsString } from \"../../utils\";\nvar PDFRawStream = /** @class */ (function (_super) {\n    __extends(PDFRawStream, _super);\n    function PDFRawStream(dict, contents) {\n        var _this = _super.call(this, dict) || this;\n        _this.contents = contents;\n        return _this;\n    }\n    PDFRawStream.prototype.asUint8Array = function () {\n        return this.contents.slice();\n    };\n    PDFRawStream.prototype.clone = function (context) {\n        return PDFRawStream.of(this.dict.clone(context), this.contents.slice());\n    };\n    PDFRawStream.prototype.getContentsString = function () {\n        return arrayAsString(this.contents);\n    };\n    PDFRawStream.prototype.getContents = function () {\n        return this.contents;\n    };\n    PDFRawStream.prototype.getContentsSize = function () {\n        return this.contents.length;\n    };\n    PDFRawStream.of = function (dict, contents) {\n        return new PDFRawStream(dict, contents);\n    };\n    return PDFRawStream;\n}(PDFStream));\nexport default PDFRawStream;\n//# sourceMappingURL=PDFRawStream.js.map","import { __extends } from \"tslib\";\nimport { PrivateConstructorError } from \"../errors\";\nimport PDFObject from \"./PDFObject\";\nimport { copyStringIntoBuffer } from \"../../utils\";\nvar ENFORCER = {};\nvar pool = new Map();\nvar PDFRef = /** @class */ (function (_super) {\n    __extends(PDFRef, _super);\n    function PDFRef(enforcer, objectNumber, generationNumber) {\n        var _this = this;\n        if (enforcer !== ENFORCER)\n            throw new PrivateConstructorError('PDFRef');\n        _this = _super.call(this) || this;\n        _this.objectNumber = objectNumber;\n        _this.generationNumber = generationNumber;\n        _this.tag = objectNumber + \" \" + generationNumber + \" R\";\n        return _this;\n    }\n    PDFRef.prototype.clone = function () {\n        return this;\n    };\n    PDFRef.prototype.toString = function () {\n        return this.tag;\n    };\n    PDFRef.prototype.sizeInBytes = function () {\n        return this.tag.length;\n    };\n    PDFRef.prototype.copyBytesInto = function (buffer, offset) {\n        offset += copyStringIntoBuffer(this.tag, buffer, offset);\n        return this.tag.length;\n    };\n    PDFRef.of = function (objectNumber, generationNumber) {\n        if (generationNumber === void 0) { generationNumber = 0; }\n        var tag = objectNumber + \" \" + generationNumber + \" R\";\n        var instance = pool.get(tag);\n        if (!instance) {\n            instance = new PDFRef(ENFORCER, objectNumber, generationNumber);\n            pool.set(tag, instance);\n        }\n        return instance;\n    };\n    return PDFRef;\n}(PDFObject));\nexport default PDFRef;\n//# sourceMappingURL=PDFRef.js.map","import PDFObject from \"../objects/PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer } from \"../../utils\";\nvar PDFOperator = /** @class */ (function () {\n    function PDFOperator(name, args) {\n        this.name = name;\n        this.args = args || [];\n    }\n    PDFOperator.prototype.clone = function (context) {\n        var args = new Array(this.args.length);\n        for (var idx = 0, len = args.length; idx < len; idx++) {\n            var arg = this.args[idx];\n            args[idx] = arg instanceof PDFObject ? arg.clone(context) : arg;\n        }\n        return PDFOperator.of(this.name, args);\n    };\n    PDFOperator.prototype.toString = function () {\n        var value = '';\n        for (var idx = 0, len = this.args.length; idx < len; idx++) {\n            value += String(this.args[idx]) + ' ';\n        }\n        value += this.name;\n        return value;\n    };\n    PDFOperator.prototype.sizeInBytes = function () {\n        var size = 0;\n        for (var idx = 0, len = this.args.length; idx < len; idx++) {\n            var arg = this.args[idx];\n            size += (arg instanceof PDFObject ? arg.sizeInBytes() : arg.length) + 1;\n        }\n        size += this.name.length;\n        return size;\n    };\n    PDFOperator.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        for (var idx = 0, len = this.args.length; idx < len; idx++) {\n            var arg = this.args[idx];\n            if (arg instanceof PDFObject) {\n                offset += arg.copyBytesInto(buffer, offset);\n            }\n            else {\n                offset += copyStringIntoBuffer(arg, buffer, offset);\n            }\n            buffer[offset++] = CharCodes.Space;\n        }\n        offset += copyStringIntoBuffer(this.name, buffer, offset);\n        return offset - initialOffset;\n    };\n    PDFOperator.of = function (name, args) {\n        return new PDFOperator(name, args);\n    };\n    return PDFOperator;\n}());\nexport default PDFOperator;\n//# sourceMappingURL=PDFOperator.js.map","import { __extends } from \"tslib\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFFlateStream from \"./PDFFlateStream\";\nimport { bytesFor, Cache, reverseArray, sizeInBytes, sum } from \"../../utils\";\nexport var EntryType;\n(function (EntryType) {\n    EntryType[EntryType[\"Deleted\"] = 0] = \"Deleted\";\n    EntryType[EntryType[\"Uncompressed\"] = 1] = \"Uncompressed\";\n    EntryType[EntryType[\"Compressed\"] = 2] = \"Compressed\";\n})(EntryType || (EntryType = {}));\n/**\n * Entries should be added using the [[addDeletedEntry]],\n * [[addUncompressedEntry]], and [[addCompressedEntry]] methods\n * **in order of ascending object number**.\n */\nvar PDFCrossRefStream = /** @class */ (function (_super) {\n    __extends(PDFCrossRefStream, _super);\n    function PDFCrossRefStream(dict, entries, encode) {\n        if (encode === void 0) { encode = true; }\n        var _this = _super.call(this, dict, encode) || this;\n        // Returns an array of integer pairs for each subsection of the cross ref\n        // section, where each integer pair represents:\n        //   firstObjectNumber(OfSection), length(OfSection)\n        _this.computeIndex = function () {\n            var subsections = [];\n            var subsectionLength = 0;\n            for (var idx = 0, len = _this.entries.length; idx < len; idx++) {\n                var currEntry = _this.entries[idx];\n                var prevEntry = _this.entries[idx - 1];\n                if (idx === 0) {\n                    subsections.push(currEntry.ref.objectNumber);\n                }\n                else if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) {\n                    subsections.push(subsectionLength);\n                    subsections.push(currEntry.ref.objectNumber);\n                    subsectionLength = 0;\n                }\n                subsectionLength += 1;\n            }\n            subsections.push(subsectionLength);\n            return subsections;\n        };\n        _this.computeEntryTuples = function () {\n            var entryTuples = new Array(_this.entries.length);\n            for (var idx = 0, len = _this.entries.length; idx < len; idx++) {\n                var entry = _this.entries[idx];\n                if (entry.type === EntryType.Deleted) {\n                    var type = entry.type, nextFreeObjectNumber = entry.nextFreeObjectNumber, ref = entry.ref;\n                    entryTuples[idx] = [type, nextFreeObjectNumber, ref.generationNumber];\n                }\n                if (entry.type === EntryType.Uncompressed) {\n                    var type = entry.type, offset = entry.offset, ref = entry.ref;\n                    entryTuples[idx] = [type, offset, ref.generationNumber];\n                }\n                if (entry.type === EntryType.Compressed) {\n                    var type = entry.type, objectStreamRef = entry.objectStreamRef, index = entry.index;\n                    entryTuples[idx] = [type, objectStreamRef.objectNumber, index];\n                }\n            }\n            return entryTuples;\n        };\n        _this.computeMaxEntryByteWidths = function () {\n            var entryTuples = _this.entryTuplesCache.access();\n            var widths = [0, 0, 0];\n            for (var idx = 0, len = entryTuples.length; idx < len; idx++) {\n                var _a = entryTuples[idx], first = _a[0], second = _a[1], third = _a[2];\n                var firstSize = sizeInBytes(first);\n                var secondSize = sizeInBytes(second);\n                var thirdSize = sizeInBytes(third);\n                if (firstSize > widths[0])\n                    widths[0] = firstSize;\n                if (secondSize > widths[1])\n                    widths[1] = secondSize;\n                if (thirdSize > widths[2])\n                    widths[2] = thirdSize;\n            }\n            return widths;\n        };\n        _this.entries = entries || [];\n        _this.entryTuplesCache = Cache.populatedBy(_this.computeEntryTuples);\n        _this.maxByteWidthsCache = Cache.populatedBy(_this.computeMaxEntryByteWidths);\n        _this.indexCache = Cache.populatedBy(_this.computeIndex);\n        dict.set(PDFName.of('Type'), PDFName.of('XRef'));\n        return _this;\n    }\n    PDFCrossRefStream.prototype.addDeletedEntry = function (ref, nextFreeObjectNumber) {\n        var type = EntryType.Deleted;\n        this.entries.push({ type: type, ref: ref, nextFreeObjectNumber: nextFreeObjectNumber });\n        this.entryTuplesCache.invalidate();\n        this.maxByteWidthsCache.invalidate();\n        this.indexCache.invalidate();\n        this.contentsCache.invalidate();\n    };\n    PDFCrossRefStream.prototype.addUncompressedEntry = function (ref, offset) {\n        var type = EntryType.Uncompressed;\n        this.entries.push({ type: type, ref: ref, offset: offset });\n        this.entryTuplesCache.invalidate();\n        this.maxByteWidthsCache.invalidate();\n        this.indexCache.invalidate();\n        this.contentsCache.invalidate();\n    };\n    PDFCrossRefStream.prototype.addCompressedEntry = function (ref, objectStreamRef, index) {\n        var type = EntryType.Compressed;\n        this.entries.push({ type: type, ref: ref, objectStreamRef: objectStreamRef, index: index });\n        this.entryTuplesCache.invalidate();\n        this.maxByteWidthsCache.invalidate();\n        this.indexCache.invalidate();\n        this.contentsCache.invalidate();\n    };\n    PDFCrossRefStream.prototype.clone = function (context) {\n        var _a = this, dict = _a.dict, entries = _a.entries, encode = _a.encode;\n        return PDFCrossRefStream.of(dict.clone(context), entries.slice(), encode);\n    };\n    PDFCrossRefStream.prototype.getContentsString = function () {\n        var entryTuples = this.entryTuplesCache.access();\n        var byteWidths = this.maxByteWidthsCache.access();\n        var value = '';\n        for (var entryIdx = 0, entriesLen = entryTuples.length; entryIdx < entriesLen; entryIdx++) {\n            var _a = entryTuples[entryIdx], first = _a[0], second = _a[1], third = _a[2];\n            var firstBytes = reverseArray(bytesFor(first));\n            var secondBytes = reverseArray(bytesFor(second));\n            var thirdBytes = reverseArray(bytesFor(third));\n            for (var idx = byteWidths[0] - 1; idx >= 0; idx--) {\n                value += (firstBytes[idx] || 0).toString(2);\n            }\n            for (var idx = byteWidths[1] - 1; idx >= 0; idx--) {\n                value += (secondBytes[idx] || 0).toString(2);\n            }\n            for (var idx = byteWidths[2] - 1; idx >= 0; idx--) {\n                value += (thirdBytes[idx] || 0).toString(2);\n            }\n        }\n        return value;\n    };\n    PDFCrossRefStream.prototype.getUnencodedContents = function () {\n        var entryTuples = this.entryTuplesCache.access();\n        var byteWidths = this.maxByteWidthsCache.access();\n        var buffer = new Uint8Array(this.getUnencodedContentsSize());\n        var offset = 0;\n        for (var entryIdx = 0, entriesLen = entryTuples.length; entryIdx < entriesLen; entryIdx++) {\n            var _a = entryTuples[entryIdx], first = _a[0], second = _a[1], third = _a[2];\n            var firstBytes = reverseArray(bytesFor(first));\n            var secondBytes = reverseArray(bytesFor(second));\n            var thirdBytes = reverseArray(bytesFor(third));\n            for (var idx = byteWidths[0] - 1; idx >= 0; idx--) {\n                buffer[offset++] = firstBytes[idx] || 0;\n            }\n            for (var idx = byteWidths[1] - 1; idx >= 0; idx--) {\n                buffer[offset++] = secondBytes[idx] || 0;\n            }\n            for (var idx = byteWidths[2] - 1; idx >= 0; idx--) {\n                buffer[offset++] = thirdBytes[idx] || 0;\n            }\n        }\n        return buffer;\n    };\n    PDFCrossRefStream.prototype.getUnencodedContentsSize = function () {\n        var byteWidths = this.maxByteWidthsCache.access();\n        var entryWidth = sum(byteWidths);\n        return entryWidth * this.entries.length;\n    };\n    PDFCrossRefStream.prototype.updateDict = function () {\n        _super.prototype.updateDict.call(this);\n        var byteWidths = this.maxByteWidthsCache.access();\n        var index = this.indexCache.access();\n        var context = this.dict.context;\n        this.dict.set(PDFName.of('W'), context.obj(byteWidths));\n        this.dict.set(PDFName.of('Index'), context.obj(index));\n    };\n    PDFCrossRefStream.create = function (dict, encode) {\n        if (encode === void 0) { encode = true; }\n        var stream = new PDFCrossRefStream(dict, [], encode);\n        stream.addDeletedEntry(PDFRef.of(0, 65535), 0);\n        return stream;\n    };\n    PDFCrossRefStream.of = function (dict, entries, encode) {\n        if (encode === void 0) { encode = true; }\n        return new PDFCrossRefStream(dict, entries, encode);\n    };\n    return PDFCrossRefStream;\n}(PDFFlateStream));\nexport default PDFCrossRefStream;\n//# sourceMappingURL=PDFCrossRefStream.js.map","import { __extends } from \"tslib\";\nimport pako from 'pako';\nimport { MethodNotImplementedError } from \"../errors\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFStream from \"../objects/PDFStream\";\nimport { Cache } from \"../../utils\";\nvar PDFFlateStream = /** @class */ (function (_super) {\n    __extends(PDFFlateStream, _super);\n    function PDFFlateStream(dict, encode) {\n        var _this = _super.call(this, dict) || this;\n        _this.computeContents = function () {\n            var unencodedContents = _this.getUnencodedContents();\n            return _this.encode ? pako.deflate(unencodedContents) : unencodedContents;\n        };\n        _this.encode = encode;\n        if (encode)\n            dict.set(PDFName.of('Filter'), PDFName.of('FlateDecode'));\n        _this.contentsCache = Cache.populatedBy(_this.computeContents);\n        return _this;\n    }\n    PDFFlateStream.prototype.getContents = function () {\n        return this.contentsCache.access();\n    };\n    PDFFlateStream.prototype.getContentsSize = function () {\n        return this.contentsCache.access().length;\n    };\n    PDFFlateStream.prototype.getUnencodedContents = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'getUnencodedContents');\n    };\n    return PDFFlateStream;\n}(PDFStream));\nexport default PDFFlateStream;\n//# sourceMappingURL=PDFFlateStream.js.map","import { __extends } from \"tslib\";\nimport PDFFlateStream from \"./PDFFlateStream\";\nimport CharCodes from \"../syntax/CharCodes\";\nvar PDFContentStream = /** @class */ (function (_super) {\n    __extends(PDFContentStream, _super);\n    function PDFContentStream(dict, operators, encode) {\n        if (encode === void 0) { encode = true; }\n        var _this = _super.call(this, dict, encode) || this;\n        _this.operators = operators;\n        return _this;\n    }\n    PDFContentStream.prototype.push = function () {\n        var _a;\n        var operators = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            operators[_i] = arguments[_i];\n        }\n        (_a = this.operators).push.apply(_a, operators);\n    };\n    PDFContentStream.prototype.clone = function (context) {\n        var operators = new Array(this.operators.length);\n        for (var idx = 0, len = this.operators.length; idx < len; idx++) {\n            operators[idx] = this.operators[idx].clone(context);\n        }\n        var _a = this, dict = _a.dict, encode = _a.encode;\n        return PDFContentStream.of(dict.clone(context), operators, encode);\n    };\n    PDFContentStream.prototype.getContentsString = function () {\n        var value = '';\n        for (var idx = 0, len = this.operators.length; idx < len; idx++) {\n            value += this.operators[idx] + \"\\n\";\n        }\n        return value;\n    };\n    PDFContentStream.prototype.getUnencodedContents = function () {\n        var buffer = new Uint8Array(this.getUnencodedContentsSize());\n        var offset = 0;\n        for (var idx = 0, len = this.operators.length; idx < len; idx++) {\n            offset += this.operators[idx].copyBytesInto(buffer, offset);\n            buffer[offset++] = CharCodes.Newline;\n        }\n        return buffer;\n    };\n    PDFContentStream.prototype.getUnencodedContentsSize = function () {\n        var size = 0;\n        for (var idx = 0, len = this.operators.length; idx < len; idx++) {\n            size += this.operators[idx].sizeInBytes() + 1;\n        }\n        return size;\n    };\n    PDFContentStream.of = function (dict, operators, encode) {\n        if (encode === void 0) { encode = true; }\n        return new PDFContentStream(dict, operators, encode);\n    };\n    return PDFContentStream;\n}(PDFFlateStream));\nexport default PDFContentStream;\n//# sourceMappingURL=PDFContentStream.js.map","/**\n * Generates a pseudo random number. Although it is not cryptographically secure\n * and uniformly distributed, it is not a concern for the intended use-case,\n * which is to generate distinct numbers.\n *\n * Credit: https://stackoverflow.com/a/19303725/10254049\n */\nvar SimpleRNG = /** @class */ (function () {\n    function SimpleRNG(seed) {\n        this.seed = seed;\n    }\n    SimpleRNG.prototype.nextInt = function () {\n        var x = Math.sin(this.seed++) * 10000;\n        return x - Math.floor(x);\n    };\n    SimpleRNG.withSeed = function (seed) { return new SimpleRNG(seed); };\n    return SimpleRNG;\n}());\nexport { SimpleRNG };\n//# sourceMappingURL=rng.js.map","import { __assign } from \"tslib\";\nimport pako from 'pako';\nimport PDFHeader from \"./document/PDFHeader\";\nimport { UnexpectedObjectTypeError } from \"./errors\";\nimport PDFArray from \"./objects/PDFArray\";\nimport PDFBool from \"./objects/PDFBool\";\nimport PDFDict from \"./objects/PDFDict\";\nimport PDFName from \"./objects/PDFName\";\nimport PDFNull from \"./objects/PDFNull\";\nimport PDFNumber from \"./objects/PDFNumber\";\nimport PDFObject from \"./objects/PDFObject\";\nimport PDFRawStream from \"./objects/PDFRawStream\";\nimport PDFRef from \"./objects/PDFRef\";\nimport PDFOperator from \"./operators/PDFOperator\";\nimport Ops from \"./operators/PDFOperatorNames\";\nimport PDFContentStream from \"./structures/PDFContentStream\";\nimport { typedArrayFor } from \"../utils\";\nimport { SimpleRNG } from \"../utils/rng\";\nvar byAscendingObjectNumber = function (_a, _b) {\n    var a = _a[0];\n    var b = _b[0];\n    return a.objectNumber - b.objectNumber;\n};\nvar PDFContext = /** @class */ (function () {\n    function PDFContext() {\n        this.largestObjectNumber = 0;\n        this.header = PDFHeader.forVersion(1, 7);\n        this.trailerInfo = {};\n        this.indirectObjects = new Map();\n        this.rng = SimpleRNG.withSeed(1);\n    }\n    PDFContext.prototype.assign = function (ref, object) {\n        this.indirectObjects.set(ref, object);\n        if (ref.objectNumber > this.largestObjectNumber) {\n            this.largestObjectNumber = ref.objectNumber;\n        }\n    };\n    PDFContext.prototype.nextRef = function () {\n        this.largestObjectNumber += 1;\n        return PDFRef.of(this.largestObjectNumber);\n    };\n    PDFContext.prototype.register = function (object) {\n        var ref = this.nextRef();\n        this.assign(ref, object);\n        return ref;\n    };\n    PDFContext.prototype.delete = function (ref) {\n        return this.indirectObjects.delete(ref);\n    };\n    PDFContext.prototype.lookupMaybe = function (ref) {\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        // TODO: `preservePDFNull` is for backwards compatibility. Should be\n        // removed in next breaking API change.\n        var preservePDFNull = types.includes(PDFNull);\n        var result = ref instanceof PDFRef ? this.indirectObjects.get(ref) : ref;\n        if (!result || (result === PDFNull && !preservePDFNull))\n            return undefined;\n        for (var idx = 0, len = types.length; idx < len; idx++) {\n            var type = types[idx];\n            if (type === PDFNull) {\n                if (result === PDFNull)\n                    return result;\n            }\n            else {\n                if (result instanceof type)\n                    return result;\n            }\n        }\n        throw new UnexpectedObjectTypeError(types, result);\n    };\n    PDFContext.prototype.lookup = function (ref) {\n        var types = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            types[_i - 1] = arguments[_i];\n        }\n        var result = ref instanceof PDFRef ? this.indirectObjects.get(ref) : ref;\n        if (types.length === 0)\n            return result;\n        for (var idx = 0, len = types.length; idx < len; idx++) {\n            var type = types[idx];\n            if (type === PDFNull) {\n                if (result === PDFNull)\n                    return result;\n            }\n            else {\n                if (result instanceof type)\n                    return result;\n            }\n        }\n        throw new UnexpectedObjectTypeError(types, result);\n    };\n    PDFContext.prototype.getObjectRef = function (pdfObject) {\n        var entries = Array.from(this.indirectObjects.entries());\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], ref = _a[0], object = _a[1];\n            if (object === pdfObject) {\n                return ref;\n            }\n        }\n        return undefined;\n    };\n    PDFContext.prototype.enumerateIndirectObjects = function () {\n        return Array.from(this.indirectObjects.entries()).sort(byAscendingObjectNumber);\n    };\n    PDFContext.prototype.obj = function (literal) {\n        if (literal instanceof PDFObject) {\n            return literal;\n        }\n        else if (literal === null || literal === undefined) {\n            return PDFNull;\n        }\n        else if (typeof literal === 'string') {\n            return PDFName.of(literal);\n        }\n        else if (typeof literal === 'number') {\n            return PDFNumber.of(literal);\n        }\n        else if (typeof literal === 'boolean') {\n            return literal ? PDFBool.True : PDFBool.False;\n        }\n        else if (Array.isArray(literal)) {\n            var array = PDFArray.withContext(this);\n            for (var idx = 0, len = literal.length; idx < len; idx++) {\n                array.push(this.obj(literal[idx]));\n            }\n            return array;\n        }\n        else {\n            var dict = PDFDict.withContext(this);\n            var keys = Object.keys(literal);\n            for (var idx = 0, len = keys.length; idx < len; idx++) {\n                var key = keys[idx];\n                var value = literal[key];\n                if (value !== undefined)\n                    dict.set(PDFName.of(key), this.obj(value));\n            }\n            return dict;\n        }\n    };\n    PDFContext.prototype.stream = function (contents, dict) {\n        if (dict === void 0) { dict = {}; }\n        return PDFRawStream.of(this.obj(dict), typedArrayFor(contents));\n    };\n    PDFContext.prototype.flateStream = function (contents, dict) {\n        if (dict === void 0) { dict = {}; }\n        return this.stream(pako.deflate(typedArrayFor(contents)), __assign(__assign({}, dict), { Filter: 'FlateDecode' }));\n    };\n    PDFContext.prototype.contentStream = function (operators, dict) {\n        if (dict === void 0) { dict = {}; }\n        return PDFContentStream.of(this.obj(dict), operators);\n    };\n    PDFContext.prototype.formXObject = function (operators, dict) {\n        if (dict === void 0) { dict = {}; }\n        return this.contentStream(operators, __assign(__assign({ BBox: this.obj([0, 0, 0, 0]), Matrix: this.obj([1, 0, 0, 1, 0, 0]) }, dict), { Type: 'XObject', Subtype: 'Form' }));\n    };\n    /*\n     * Reference to PDFContentStream that contains a single PDFOperator: `q`.\n     * Used by [[PDFPageLeaf]] instances to ensure that when content streams are\n     * added to a modified PDF, they start in the default, unchanged graphics\n     * state.\n     */\n    PDFContext.prototype.getPushGraphicsStateContentStream = function () {\n        if (this.pushGraphicsStateContentStreamRef) {\n            return this.pushGraphicsStateContentStreamRef;\n        }\n        var dict = this.obj({});\n        var op = PDFOperator.of(Ops.PushGraphicsState);\n        var stream = PDFContentStream.of(dict, [op]);\n        this.pushGraphicsStateContentStreamRef = this.register(stream);\n        return this.pushGraphicsStateContentStreamRef;\n    };\n    /*\n     * Reference to PDFContentStream that contains a single PDFOperator: `Q`.\n     * Used by [[PDFPageLeaf]] instances to ensure that when content streams are\n     * added to a modified PDF, they start in the default, unchanged graphics\n     * state.\n     */\n    PDFContext.prototype.getPopGraphicsStateContentStream = function () {\n        if (this.popGraphicsStateContentStreamRef) {\n            return this.popGraphicsStateContentStreamRef;\n        }\n        var dict = this.obj({});\n        var op = PDFOperator.of(Ops.PopGraphicsState);\n        var stream = PDFContentStream.of(dict, [op]);\n        this.popGraphicsStateContentStreamRef = this.register(stream);\n        return this.popGraphicsStateContentStreamRef;\n    };\n    PDFContext.prototype.addRandomSuffix = function (prefix, suffixLength) {\n        if (suffixLength === void 0) { suffixLength = 4; }\n        return prefix + \"-\" + Math.floor(this.rng.nextInt() * Math.pow(10, suffixLength));\n    };\n    PDFContext.create = function () { return new PDFContext(); };\n    return PDFContext;\n}());\nexport default PDFContext;\n//# sourceMappingURL=PDFContext.js.map","import { __extends } from \"tslib\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFStream from \"../objects/PDFStream\";\nvar PDFPageLeaf = /** @class */ (function (_super) {\n    __extends(PDFPageLeaf, _super);\n    function PDFPageLeaf(map, context, autoNormalizeCTM) {\n        if (autoNormalizeCTM === void 0) { autoNormalizeCTM = true; }\n        var _this = _super.call(this, map, context) || this;\n        _this.normalized = false;\n        _this.autoNormalizeCTM = autoNormalizeCTM;\n        return _this;\n    }\n    PDFPageLeaf.prototype.clone = function (context) {\n        var clone = PDFPageLeaf.fromMapWithContext(new Map(), context || this.context, this.autoNormalizeCTM);\n        var entries = this.entries();\n        for (var idx = 0, len = entries.length; idx < len; idx++) {\n            var _a = entries[idx], key = _a[0], value = _a[1];\n            clone.set(key, value);\n        }\n        return clone;\n    };\n    PDFPageLeaf.prototype.Parent = function () {\n        return this.lookupMaybe(PDFName.Parent, PDFDict);\n    };\n    PDFPageLeaf.prototype.Contents = function () {\n        return this.lookup(PDFName.of('Contents'));\n    };\n    PDFPageLeaf.prototype.Annots = function () {\n        return this.lookupMaybe(PDFName.Annots, PDFArray);\n    };\n    PDFPageLeaf.prototype.BleedBox = function () {\n        return this.lookupMaybe(PDFName.BleedBox, PDFArray);\n    };\n    PDFPageLeaf.prototype.TrimBox = function () {\n        return this.lookupMaybe(PDFName.TrimBox, PDFArray);\n    };\n    PDFPageLeaf.prototype.ArtBox = function () {\n        return this.lookupMaybe(PDFName.ArtBox, PDFArray);\n    };\n    PDFPageLeaf.prototype.Resources = function () {\n        var dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n        return this.context.lookupMaybe(dictOrRef, PDFDict);\n    };\n    PDFPageLeaf.prototype.MediaBox = function () {\n        var arrayOrRef = this.getInheritableAttribute(PDFName.MediaBox);\n        return this.context.lookup(arrayOrRef, PDFArray);\n    };\n    PDFPageLeaf.prototype.CropBox = function () {\n        var arrayOrRef = this.getInheritableAttribute(PDFName.CropBox);\n        return this.context.lookupMaybe(arrayOrRef, PDFArray);\n    };\n    PDFPageLeaf.prototype.Rotate = function () {\n        var numberOrRef = this.getInheritableAttribute(PDFName.Rotate);\n        return this.context.lookupMaybe(numberOrRef, PDFNumber);\n    };\n    PDFPageLeaf.prototype.getInheritableAttribute = function (name) {\n        var attribute;\n        this.ascend(function (node) {\n            if (!attribute)\n                attribute = node.get(name);\n        });\n        return attribute;\n    };\n    PDFPageLeaf.prototype.setParent = function (parentRef) {\n        this.set(PDFName.Parent, parentRef);\n    };\n    PDFPageLeaf.prototype.addContentStream = function (contentStreamRef) {\n        var Contents = this.normalizedEntries().Contents || this.context.obj([]);\n        this.set(PDFName.Contents, Contents);\n        Contents.push(contentStreamRef);\n    };\n    PDFPageLeaf.prototype.wrapContentStreams = function (startStream, endStream) {\n        var Contents = this.Contents();\n        if (Contents instanceof PDFArray) {\n            Contents.insert(0, startStream);\n            Contents.push(endStream);\n            return true;\n        }\n        return false;\n    };\n    PDFPageLeaf.prototype.addAnnot = function (annotRef) {\n        var Annots = this.normalizedEntries().Annots;\n        Annots.push(annotRef);\n    };\n    PDFPageLeaf.prototype.removeAnnot = function (annotRef) {\n        var Annots = this.normalizedEntries().Annots;\n        var index = Annots.indexOf(annotRef);\n        if (index !== undefined) {\n            Annots.remove(index);\n        }\n    };\n    PDFPageLeaf.prototype.setFontDictionary = function (name, fontDictRef) {\n        var Font = this.normalizedEntries().Font;\n        Font.set(name, fontDictRef);\n    };\n    PDFPageLeaf.prototype.newFontDictionaryKey = function (tag) {\n        var Font = this.normalizedEntries().Font;\n        return Font.uniqueKey(tag);\n    };\n    PDFPageLeaf.prototype.newFontDictionary = function (tag, fontDictRef) {\n        var key = this.newFontDictionaryKey(tag);\n        this.setFontDictionary(key, fontDictRef);\n        return key;\n    };\n    PDFPageLeaf.prototype.setXObject = function (name, xObjectRef) {\n        var XObject = this.normalizedEntries().XObject;\n        XObject.set(name, xObjectRef);\n    };\n    PDFPageLeaf.prototype.newXObjectKey = function (tag) {\n        var XObject = this.normalizedEntries().XObject;\n        return XObject.uniqueKey(tag);\n    };\n    PDFPageLeaf.prototype.newXObject = function (tag, xObjectRef) {\n        var key = this.newXObjectKey(tag);\n        this.setXObject(key, xObjectRef);\n        return key;\n    };\n    PDFPageLeaf.prototype.setExtGState = function (name, extGStateRef) {\n        var ExtGState = this.normalizedEntries().ExtGState;\n        ExtGState.set(name, extGStateRef);\n    };\n    PDFPageLeaf.prototype.newExtGStateKey = function (tag) {\n        var ExtGState = this.normalizedEntries().ExtGState;\n        return ExtGState.uniqueKey(tag);\n    };\n    PDFPageLeaf.prototype.newExtGState = function (tag, extGStateRef) {\n        var key = this.newExtGStateKey(tag);\n        this.setExtGState(key, extGStateRef);\n        return key;\n    };\n    PDFPageLeaf.prototype.ascend = function (visitor) {\n        visitor(this);\n        var Parent = this.Parent();\n        if (Parent)\n            Parent.ascend(visitor);\n    };\n    PDFPageLeaf.prototype.normalize = function () {\n        if (this.normalized)\n            return;\n        var context = this.context;\n        var contentsRef = this.get(PDFName.Contents);\n        var contents = this.context.lookup(contentsRef);\n        if (contents instanceof PDFStream) {\n            this.set(PDFName.Contents, context.obj([contentsRef]));\n        }\n        if (this.autoNormalizeCTM) {\n            this.wrapContentStreams(this.context.getPushGraphicsStateContentStream(), this.context.getPopGraphicsStateContentStream());\n        }\n        // TODO: Clone `Resources` if it is inherited\n        var dictOrRef = this.getInheritableAttribute(PDFName.Resources);\n        var Resources = context.lookupMaybe(dictOrRef, PDFDict) || context.obj({});\n        this.set(PDFName.Resources, Resources);\n        // TODO: Clone `Font` if it is inherited\n        var Font = Resources.lookupMaybe(PDFName.Font, PDFDict) || context.obj({});\n        Resources.set(PDFName.Font, Font);\n        // TODO: Clone `XObject` if it is inherited\n        var XObject = Resources.lookupMaybe(PDFName.XObject, PDFDict) || context.obj({});\n        Resources.set(PDFName.XObject, XObject);\n        // TODO: Clone `ExtGState` if it is inherited\n        var ExtGState = Resources.lookupMaybe(PDFName.ExtGState, PDFDict) || context.obj({});\n        Resources.set(PDFName.ExtGState, ExtGState);\n        var Annots = this.Annots() || context.obj([]);\n        this.set(PDFName.Annots, Annots);\n        this.normalized = true;\n    };\n    PDFPageLeaf.prototype.normalizedEntries = function () {\n        this.normalize();\n        var Annots = this.Annots();\n        var Resources = this.Resources();\n        var Contents = this.Contents();\n        return {\n            Annots: Annots,\n            Resources: Resources,\n            Contents: Contents,\n            Font: Resources.lookup(PDFName.Font, PDFDict),\n            XObject: Resources.lookup(PDFName.XObject, PDFDict),\n            ExtGState: Resources.lookup(PDFName.ExtGState, PDFDict),\n        };\n    };\n    PDFPageLeaf.InheritableEntries = [\n        'Resources',\n        'MediaBox',\n        'CropBox',\n        'Rotate',\n    ];\n    PDFPageLeaf.withContextAndParent = function (context, parent) {\n        var dict = new Map();\n        dict.set(PDFName.Type, PDFName.Page);\n        dict.set(PDFName.Parent, parent);\n        dict.set(PDFName.Resources, context.obj({}));\n        dict.set(PDFName.MediaBox, context.obj([0, 0, 612, 792]));\n        return new PDFPageLeaf(dict, context, false);\n    };\n    PDFPageLeaf.fromMapWithContext = function (map, context, autoNormalizeCTM) {\n        if (autoNormalizeCTM === void 0) { autoNormalizeCTM = true; }\n        return new PDFPageLeaf(map, context, autoNormalizeCTM);\n    };\n    return PDFPageLeaf;\n}(PDFDict));\nexport default PDFPageLeaf;\n//# sourceMappingURL=PDFPageLeaf.js.map","import PDFArray from \"./objects/PDFArray\";\nimport PDFDict from \"./objects/PDFDict\";\nimport PDFName from \"./objects/PDFName\";\nimport PDFRef from \"./objects/PDFRef\";\nimport PDFStream from \"./objects/PDFStream\";\nimport PDFPageLeaf from \"./structures/PDFPageLeaf\";\n/**\n * PDFObjectCopier copies PDFObjects from a src context to a dest context.\n * The primary use case for this is to copy pages between PDFs.\n *\n * _Copying_ an object with a PDFObjectCopier is different from _cloning_ an\n * object with its [[PDFObject.clone]] method:\n *\n * ```\n *   const src: PDFContext = ...\n *   const dest: PDFContext = ...\n *   const originalObject: PDFObject = ...\n *   const copiedObject = PDFObjectCopier.for(src, dest).copy(originalObject);\n *   const clonedObject = originalObject.clone();\n * ```\n *\n * Copying an object is equivalent to cloning it and then copying over any other\n * objects that it references. Note that only dictionaries, arrays, and streams\n * (or structures build from them) can contain indirect references to other\n * objects. Copying a PDFObject that is not a dictionary, array, or stream is\n * supported, but is equivalent to cloning it.\n */\nvar PDFObjectCopier = /** @class */ (function () {\n    function PDFObjectCopier(src, dest) {\n        var _this = this;\n        this.traversedObjects = new Map();\n        // prettier-ignore\n        this.copy = function (object) { return (object instanceof PDFPageLeaf ? _this.copyPDFPage(object)\n            : object instanceof PDFDict ? _this.copyPDFDict(object)\n                : object instanceof PDFArray ? _this.copyPDFArray(object)\n                    : object instanceof PDFStream ? _this.copyPDFStream(object)\n                        : object instanceof PDFRef ? _this.copyPDFIndirectObject(object)\n                            : object.clone()); };\n        this.copyPDFPage = function (originalPage) {\n            var clonedPage = originalPage.clone();\n            // Move any entries that the originalPage is inheriting from its parent\n            // tree nodes directly into originalPage so they are preserved during\n            // the copy.\n            var InheritableEntries = PDFPageLeaf.InheritableEntries;\n            for (var idx = 0, len = InheritableEntries.length; idx < len; idx++) {\n                var key = PDFName.of(InheritableEntries[idx]);\n                var value = clonedPage.getInheritableAttribute(key);\n                if (!clonedPage.get(key) && value)\n                    clonedPage.set(key, value);\n            }\n            // Remove the parent reference to prevent the whole donor document's page\n            // tree from being copied when we only need a single page.\n            clonedPage.delete(PDFName.of('Parent'));\n            return _this.copyPDFDict(clonedPage);\n        };\n        this.copyPDFDict = function (originalDict) {\n            if (_this.traversedObjects.has(originalDict)) {\n                return _this.traversedObjects.get(originalDict);\n            }\n            var clonedDict = originalDict.clone(_this.dest);\n            _this.traversedObjects.set(originalDict, clonedDict);\n            var entries = originalDict.entries();\n            for (var idx = 0, len = entries.length; idx < len; idx++) {\n                var _a = entries[idx], key = _a[0], value = _a[1];\n                clonedDict.set(key, _this.copy(value));\n            }\n            return clonedDict;\n        };\n        this.copyPDFArray = function (originalArray) {\n            if (_this.traversedObjects.has(originalArray)) {\n                return _this.traversedObjects.get(originalArray);\n            }\n            var clonedArray = originalArray.clone(_this.dest);\n            _this.traversedObjects.set(originalArray, clonedArray);\n            for (var idx = 0, len = originalArray.size(); idx < len; idx++) {\n                var value = originalArray.get(idx);\n                clonedArray.set(idx, _this.copy(value));\n            }\n            return clonedArray;\n        };\n        this.copyPDFStream = function (originalStream) {\n            if (_this.traversedObjects.has(originalStream)) {\n                return _this.traversedObjects.get(originalStream);\n            }\n            var clonedStream = originalStream.clone(_this.dest);\n            _this.traversedObjects.set(originalStream, clonedStream);\n            var entries = originalStream.dict.entries();\n            for (var idx = 0, len = entries.length; idx < len; idx++) {\n                var _a = entries[idx], key = _a[0], value = _a[1];\n                clonedStream.dict.set(key, _this.copy(value));\n            }\n            return clonedStream;\n        };\n        this.copyPDFIndirectObject = function (ref) {\n            var alreadyMapped = _this.traversedObjects.has(ref);\n            if (!alreadyMapped) {\n                var newRef = _this.dest.nextRef();\n                _this.traversedObjects.set(ref, newRef);\n                var dereferencedValue = _this.src.lookup(ref);\n                if (dereferencedValue) {\n                    var cloned = _this.copy(dereferencedValue);\n                    _this.dest.assign(newRef, cloned);\n                }\n            }\n            return _this.traversedObjects.get(ref);\n        };\n        this.src = src;\n        this.dest = dest;\n    }\n    PDFObjectCopier.for = function (src, dest) {\n        return new PDFObjectCopier(src, dest);\n    };\n    return PDFObjectCopier;\n}());\nexport default PDFObjectCopier;\n//# sourceMappingURL=PDFObjectCopier.js.map","import PDFRef from \"../objects/PDFRef\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer, padStart } from \"../../utils\";\n/**\n * Entries should be added using the [[addEntry]] and [[addDeletedEntry]]\n * methods **in order of ascending object number**.\n */\nvar PDFCrossRefSection = /** @class */ (function () {\n    function PDFCrossRefSection(firstEntry) {\n        this.subsections = firstEntry ? [[firstEntry]] : [];\n        this.chunkIdx = 0;\n        this.chunkLength = firstEntry ? 1 : 0;\n    }\n    PDFCrossRefSection.prototype.addEntry = function (ref, offset) {\n        this.append({ ref: ref, offset: offset, deleted: false });\n    };\n    PDFCrossRefSection.prototype.addDeletedEntry = function (ref, nextFreeObjectNumber) {\n        this.append({ ref: ref, offset: nextFreeObjectNumber, deleted: true });\n    };\n    PDFCrossRefSection.prototype.toString = function () {\n        var section = \"xref\\n\";\n        for (var rangeIdx = 0, rangeLen = this.subsections.length; rangeIdx < rangeLen; rangeIdx++) {\n            var range = this.subsections[rangeIdx];\n            section += range[0].ref.objectNumber + \" \" + range.length + \"\\n\";\n            for (var entryIdx = 0, entryLen = range.length; entryIdx < entryLen; entryIdx++) {\n                var entry = range[entryIdx];\n                section += padStart(String(entry.offset), 10, '0');\n                section += ' ';\n                section += padStart(String(entry.ref.generationNumber), 5, '0');\n                section += ' ';\n                section += entry.deleted ? 'f' : 'n';\n                section += ' \\n';\n            }\n        }\n        return section;\n    };\n    PDFCrossRefSection.prototype.sizeInBytes = function () {\n        var size = 5;\n        for (var idx = 0, len = this.subsections.length; idx < len; idx++) {\n            var subsection = this.subsections[idx];\n            var subsectionLength = subsection.length;\n            var firstEntry = subsection[0];\n            size += 2;\n            size += String(firstEntry.ref.objectNumber).length;\n            size += String(subsectionLength).length;\n            size += 20 * subsectionLength;\n        }\n        return size;\n    };\n    PDFCrossRefSection.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.x;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.f;\n        buffer[offset++] = CharCodes.Newline;\n        offset += this.copySubsectionsIntoBuffer(this.subsections, buffer, offset);\n        return offset - initialOffset;\n    };\n    PDFCrossRefSection.prototype.copySubsectionsIntoBuffer = function (subsections, buffer, offset) {\n        var initialOffset = offset;\n        var length = subsections.length;\n        for (var idx = 0; idx < length; idx++) {\n            var subsection = this.subsections[idx];\n            var firstObjectNumber = String(subsection[0].ref.objectNumber);\n            offset += copyStringIntoBuffer(firstObjectNumber, buffer, offset);\n            buffer[offset++] = CharCodes.Space;\n            var rangeLength = String(subsection.length);\n            offset += copyStringIntoBuffer(rangeLength, buffer, offset);\n            buffer[offset++] = CharCodes.Newline;\n            offset += this.copyEntriesIntoBuffer(subsection, buffer, offset);\n        }\n        return offset - initialOffset;\n    };\n    PDFCrossRefSection.prototype.copyEntriesIntoBuffer = function (entries, buffer, offset) {\n        var length = entries.length;\n        for (var idx = 0; idx < length; idx++) {\n            var entry = entries[idx];\n            var entryOffset = padStart(String(entry.offset), 10, '0');\n            offset += copyStringIntoBuffer(entryOffset, buffer, offset);\n            buffer[offset++] = CharCodes.Space;\n            var entryGen = padStart(String(entry.ref.generationNumber), 5, '0');\n            offset += copyStringIntoBuffer(entryGen, buffer, offset);\n            buffer[offset++] = CharCodes.Space;\n            buffer[offset++] = entry.deleted ? CharCodes.f : CharCodes.n;\n            buffer[offset++] = CharCodes.Space;\n            buffer[offset++] = CharCodes.Newline;\n        }\n        return 20 * length;\n    };\n    PDFCrossRefSection.prototype.append = function (currEntry) {\n        if (this.chunkLength === 0) {\n            this.subsections.push([currEntry]);\n            this.chunkIdx = 0;\n            this.chunkLength = 1;\n            return;\n        }\n        var chunk = this.subsections[this.chunkIdx];\n        var prevEntry = chunk[this.chunkLength - 1];\n        if (currEntry.ref.objectNumber - prevEntry.ref.objectNumber > 1) {\n            this.subsections.push([currEntry]);\n            this.chunkIdx += 1;\n            this.chunkLength = 1;\n        }\n        else {\n            chunk.push(currEntry);\n            this.chunkLength += 1;\n        }\n    };\n    PDFCrossRefSection.create = function () {\n        return new PDFCrossRefSection({\n            ref: PDFRef.of(0, 65535),\n            offset: 0,\n            deleted: true,\n        });\n    };\n    PDFCrossRefSection.createEmpty = function () { return new PDFCrossRefSection(); };\n    return PDFCrossRefSection;\n}());\nexport default PDFCrossRefSection;\n//# sourceMappingURL=PDFCrossRefSection.js.map","import CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer } from \"../../utils\";\nvar PDFTrailer = /** @class */ (function () {\n    function PDFTrailer(lastXRefOffset) {\n        this.lastXRefOffset = String(lastXRefOffset);\n    }\n    PDFTrailer.prototype.toString = function () {\n        return \"startxref\\n\" + this.lastXRefOffset + \"\\n%%EOF\";\n    };\n    PDFTrailer.prototype.sizeInBytes = function () {\n        return 16 + this.lastXRefOffset.length;\n    };\n    PDFTrailer.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.s;\n        buffer[offset++] = CharCodes.t;\n        buffer[offset++] = CharCodes.a;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.t;\n        buffer[offset++] = CharCodes.x;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.f;\n        buffer[offset++] = CharCodes.Newline;\n        offset += copyStringIntoBuffer(this.lastXRefOffset, buffer, offset);\n        buffer[offset++] = CharCodes.Newline;\n        buffer[offset++] = CharCodes.Percent;\n        buffer[offset++] = CharCodes.Percent;\n        buffer[offset++] = CharCodes.E;\n        buffer[offset++] = CharCodes.O;\n        buffer[offset++] = CharCodes.F;\n        return offset - initialOffset;\n    };\n    PDFTrailer.forLastCrossRefSectionOffset = function (offset) {\n        return new PDFTrailer(offset);\n    };\n    return PDFTrailer;\n}());\nexport default PDFTrailer;\n//# sourceMappingURL=PDFTrailer.js.map","import CharCodes from \"../syntax/CharCodes\";\nvar PDFTrailerDict = /** @class */ (function () {\n    function PDFTrailerDict(dict) {\n        this.dict = dict;\n    }\n    PDFTrailerDict.prototype.toString = function () {\n        return \"trailer\\n\" + this.dict.toString();\n    };\n    PDFTrailerDict.prototype.sizeInBytes = function () {\n        return 8 + this.dict.sizeInBytes();\n    };\n    PDFTrailerDict.prototype.copyBytesInto = function (buffer, offset) {\n        var initialOffset = offset;\n        buffer[offset++] = CharCodes.t;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.a;\n        buffer[offset++] = CharCodes.i;\n        buffer[offset++] = CharCodes.l;\n        buffer[offset++] = CharCodes.e;\n        buffer[offset++] = CharCodes.r;\n        buffer[offset++] = CharCodes.Newline;\n        offset += this.dict.copyBytesInto(buffer, offset);\n        return offset - initialOffset;\n    };\n    PDFTrailerDict.of = function (dict) { return new PDFTrailerDict(dict); };\n    return PDFTrailerDict;\n}());\nexport default PDFTrailerDict;\n//# sourceMappingURL=PDFTrailerDict.js.map","import { __extends } from \"tslib\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFFlateStream from \"./PDFFlateStream\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer, last } from \"../../utils\";\nvar PDFObjectStream = /** @class */ (function (_super) {\n    __extends(PDFObjectStream, _super);\n    function PDFObjectStream(context, objects, encode) {\n        if (encode === void 0) { encode = true; }\n        var _this = _super.call(this, context.obj({}), encode) || this;\n        _this.objects = objects;\n        _this.offsets = _this.computeObjectOffsets();\n        _this.offsetsString = _this.computeOffsetsString();\n        _this.dict.set(PDFName.of('Type'), PDFName.of('ObjStm'));\n        _this.dict.set(PDFName.of('N'), PDFNumber.of(_this.objects.length));\n        _this.dict.set(PDFName.of('First'), PDFNumber.of(_this.offsetsString.length));\n        return _this;\n    }\n    PDFObjectStream.prototype.getObjectsCount = function () {\n        return this.objects.length;\n    };\n    PDFObjectStream.prototype.clone = function (context) {\n        return PDFObjectStream.withContextAndObjects(context || this.dict.context, this.objects.slice(), this.encode);\n    };\n    PDFObjectStream.prototype.getContentsString = function () {\n        var value = this.offsetsString;\n        for (var idx = 0, len = this.objects.length; idx < len; idx++) {\n            var _a = this.objects[idx], object = _a[1];\n            value += object + \"\\n\";\n        }\n        return value;\n    };\n    PDFObjectStream.prototype.getUnencodedContents = function () {\n        var buffer = new Uint8Array(this.getUnencodedContentsSize());\n        var offset = copyStringIntoBuffer(this.offsetsString, buffer, 0);\n        for (var idx = 0, len = this.objects.length; idx < len; idx++) {\n            var _a = this.objects[idx], object = _a[1];\n            offset += object.copyBytesInto(buffer, offset);\n            buffer[offset++] = CharCodes.Newline;\n        }\n        return buffer;\n    };\n    PDFObjectStream.prototype.getUnencodedContentsSize = function () {\n        return (this.offsetsString.length +\n            last(this.offsets)[1] +\n            last(this.objects)[1].sizeInBytes() +\n            1);\n    };\n    PDFObjectStream.prototype.computeOffsetsString = function () {\n        var offsetsString = '';\n        for (var idx = 0, len = this.offsets.length; idx < len; idx++) {\n            var _a = this.offsets[idx], objectNumber = _a[0], offset = _a[1];\n            offsetsString += objectNumber + \" \" + offset + \" \";\n        }\n        return offsetsString;\n    };\n    PDFObjectStream.prototype.computeObjectOffsets = function () {\n        var offset = 0;\n        var offsets = new Array(this.objects.length);\n        for (var idx = 0, len = this.objects.length; idx < len; idx++) {\n            var _a = this.objects[idx], ref = _a[0], object = _a[1];\n            offsets[idx] = [ref.objectNumber, offset];\n            offset += object.sizeInBytes() + 1; // '\\n'\n        }\n        return offsets;\n    };\n    PDFObjectStream.withContextAndObjects = function (context, objects, encode) {\n        if (encode === void 0) { encode = true; }\n        return new PDFObjectStream(context, objects, encode);\n    };\n    return PDFObjectStream;\n}(PDFFlateStream));\nexport default PDFObjectStream;\n//# sourceMappingURL=PDFObjectStream.js.map","import { __awaiter, __generator } from \"tslib\";\nimport PDFCrossRefSection from \"../document/PDFCrossRefSection\";\nimport PDFHeader from \"../document/PDFHeader\";\nimport PDFTrailer from \"../document/PDFTrailer\";\nimport PDFTrailerDict from \"../document/PDFTrailerDict\";\nimport PDFObjectStream from \"../structures/PDFObjectStream\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer, waitForTick } from \"../../utils\";\nvar PDFWriter = /** @class */ (function () {\n    function PDFWriter(context, objectsPerTick) {\n        var _this = this;\n        this.parsedObjects = 0;\n        this.shouldWaitForTick = function (n) {\n            _this.parsedObjects += n;\n            return _this.parsedObjects % _this.objectsPerTick === 0;\n        };\n        this.context = context;\n        this.objectsPerTick = objectsPerTick;\n    }\n    PDFWriter.prototype.serializeToBuffer = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, size, header, indirectObjects, xref, trailerDict, trailer, offset, buffer, idx, len, _b, ref, object, objectNumber, generationNumber, n;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, this.computeBufferSize()];\n                    case 1:\n                        _a = _c.sent(), size = _a.size, header = _a.header, indirectObjects = _a.indirectObjects, xref = _a.xref, trailerDict = _a.trailerDict, trailer = _a.trailer;\n                        offset = 0;\n                        buffer = new Uint8Array(size);\n                        offset += header.copyBytesInto(buffer, offset);\n                        buffer[offset++] = CharCodes.Newline;\n                        buffer[offset++] = CharCodes.Newline;\n                        idx = 0, len = indirectObjects.length;\n                        _c.label = 2;\n                    case 2:\n                        if (!(idx < len)) return [3 /*break*/, 5];\n                        _b = indirectObjects[idx], ref = _b[0], object = _b[1];\n                        objectNumber = String(ref.objectNumber);\n                        offset += copyStringIntoBuffer(objectNumber, buffer, offset);\n                        buffer[offset++] = CharCodes.Space;\n                        generationNumber = String(ref.generationNumber);\n                        offset += copyStringIntoBuffer(generationNumber, buffer, offset);\n                        buffer[offset++] = CharCodes.Space;\n                        buffer[offset++] = CharCodes.o;\n                        buffer[offset++] = CharCodes.b;\n                        buffer[offset++] = CharCodes.j;\n                        buffer[offset++] = CharCodes.Newline;\n                        offset += object.copyBytesInto(buffer, offset);\n                        buffer[offset++] = CharCodes.Newline;\n                        buffer[offset++] = CharCodes.e;\n                        buffer[offset++] = CharCodes.n;\n                        buffer[offset++] = CharCodes.d;\n                        buffer[offset++] = CharCodes.o;\n                        buffer[offset++] = CharCodes.b;\n                        buffer[offset++] = CharCodes.j;\n                        buffer[offset++] = CharCodes.Newline;\n                        buffer[offset++] = CharCodes.Newline;\n                        n = object instanceof PDFObjectStream ? object.getObjectsCount() : 1;\n                        if (!this.shouldWaitForTick(n)) return [3 /*break*/, 4];\n                        return [4 /*yield*/, waitForTick()];\n                    case 3:\n                        _c.sent();\n                        _c.label = 4;\n                    case 4:\n                        idx++;\n                        return [3 /*break*/, 2];\n                    case 5:\n                        if (xref) {\n                            offset += xref.copyBytesInto(buffer, offset);\n                            buffer[offset++] = CharCodes.Newline;\n                        }\n                        if (trailerDict) {\n                            offset += trailerDict.copyBytesInto(buffer, offset);\n                            buffer[offset++] = CharCodes.Newline;\n                            buffer[offset++] = CharCodes.Newline;\n                        }\n                        offset += trailer.copyBytesInto(buffer, offset);\n                        return [2 /*return*/, buffer];\n                }\n            });\n        });\n    };\n    PDFWriter.prototype.computeIndirectObjectSize = function (_a) {\n        var ref = _a[0], object = _a[1];\n        var refSize = ref.sizeInBytes() + 3; // 'R' -> 'obj\\n'\n        var objectSize = object.sizeInBytes() + 9; // '\\nendobj\\n\\n'\n        return refSize + objectSize;\n    };\n    PDFWriter.prototype.createTrailerDict = function () {\n        return this.context.obj({\n            Size: this.context.largestObjectNumber + 1,\n            Root: this.context.trailerInfo.Root,\n            Encrypt: this.context.trailerInfo.Encrypt,\n            Info: this.context.trailerInfo.Info,\n            ID: this.context.trailerInfo.ID,\n        });\n    };\n    PDFWriter.prototype.computeBufferSize = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var header, size, xref, indirectObjects, idx, len, indirectObject, ref, xrefOffset, trailerDict, trailer;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        header = PDFHeader.forVersion(1, 7);\n                        size = header.sizeInBytes() + 2;\n                        xref = PDFCrossRefSection.create();\n                        indirectObjects = this.context.enumerateIndirectObjects();\n                        idx = 0, len = indirectObjects.length;\n                        _a.label = 1;\n                    case 1:\n                        if (!(idx < len)) return [3 /*break*/, 4];\n                        indirectObject = indirectObjects[idx];\n                        ref = indirectObject[0];\n                        xref.addEntry(ref, size);\n                        size += this.computeIndirectObjectSize(indirectObject);\n                        if (!this.shouldWaitForTick(1)) return [3 /*break*/, 3];\n                        return [4 /*yield*/, waitForTick()];\n                    case 2:\n                        _a.sent();\n                        _a.label = 3;\n                    case 3:\n                        idx++;\n                        return [3 /*break*/, 1];\n                    case 4:\n                        xrefOffset = size;\n                        size += xref.sizeInBytes() + 1; // '\\n'\n                        trailerDict = PDFTrailerDict.of(this.createTrailerDict());\n                        size += trailerDict.sizeInBytes() + 2; // '\\n\\n'\n                        trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n                        size += trailer.sizeInBytes();\n                        return [2 /*return*/, { size: size, header: header, indirectObjects: indirectObjects, xref: xref, trailerDict: trailerDict, trailer: trailer }];\n                }\n            });\n        });\n    };\n    PDFWriter.forContext = function (context, objectsPerTick) {\n        return new PDFWriter(context, objectsPerTick);\n    };\n    return PDFWriter;\n}());\nexport default PDFWriter;\n//# sourceMappingURL=PDFWriter.js.map","import { __extends } from \"tslib\";\nimport PDFObject from \"./PDFObject\";\nvar PDFInvalidObject = /** @class */ (function (_super) {\n    __extends(PDFInvalidObject, _super);\n    function PDFInvalidObject(data) {\n        var _this = _super.call(this) || this;\n        _this.data = data;\n        return _this;\n    }\n    PDFInvalidObject.prototype.clone = function () {\n        return PDFInvalidObject.of(this.data.slice());\n    };\n    PDFInvalidObject.prototype.toString = function () {\n        return \"PDFInvalidObject(\" + this.data.length + \" bytes)\";\n    };\n    PDFInvalidObject.prototype.sizeInBytes = function () {\n        return this.data.length;\n    };\n    PDFInvalidObject.prototype.copyBytesInto = function (buffer, offset) {\n        var length = this.data.length;\n        for (var idx = 0; idx < length; idx++) {\n            buffer[offset++] = this.data[idx];\n        }\n        return length;\n    };\n    PDFInvalidObject.of = function (data) { return new PDFInvalidObject(data); };\n    return PDFInvalidObject;\n}(PDFObject));\nexport default PDFInvalidObject;\n//# sourceMappingURL=PDFInvalidObject.js.map","import { __awaiter, __generator } from \"tslib\";\n// prettier-ignore\nvar MARKERS = [\n    0xffc0, 0xffc1, 0xffc2,\n    0xffc3, 0xffc5, 0xffc6,\n    0xffc7, 0xffc8, 0xffc9,\n    0xffca, 0xffcb, 0xffcc,\n    0xffcd, 0xffce, 0xffcf,\n];\nvar ColorSpace;\n(function (ColorSpace) {\n    ColorSpace[\"DeviceGray\"] = \"DeviceGray\";\n    ColorSpace[\"DeviceRGB\"] = \"DeviceRGB\";\n    ColorSpace[\"DeviceCMYK\"] = \"DeviceCMYK\";\n})(ColorSpace || (ColorSpace = {}));\nvar ChannelToColorSpace = {\n    1: ColorSpace.DeviceGray,\n    3: ColorSpace.DeviceRGB,\n    4: ColorSpace.DeviceCMYK,\n};\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n *   https://github.com/foliojs/pdfkit/blob/a6af76467ce06bd6a2af4aa7271ccac9ff152a7d/lib/image/jpeg.js\n */\nvar JpegEmbedder = /** @class */ (function () {\n    function JpegEmbedder(imageData, bitsPerComponent, width, height, colorSpace) {\n        this.imageData = imageData;\n        this.bitsPerComponent = bitsPerComponent;\n        this.width = width;\n        this.height = height;\n        this.colorSpace = colorSpace;\n    }\n    JpegEmbedder.for = function (imageData) {\n        return __awaiter(this, void 0, void 0, function () {\n            var dataView, soi, pos, marker, bitsPerComponent, height, width, channelByte, channelName, colorSpace;\n            return __generator(this, function (_a) {\n                dataView = new DataView(imageData.buffer);\n                soi = dataView.getUint16(0);\n                if (soi !== 0xffd8)\n                    throw new Error('SOI not found in JPEG');\n                pos = 2;\n                while (pos < dataView.byteLength) {\n                    marker = dataView.getUint16(pos);\n                    pos += 2;\n                    if (MARKERS.includes(marker))\n                        break;\n                    pos += dataView.getUint16(pos);\n                }\n                if (!MARKERS.includes(marker))\n                    throw new Error('Invalid JPEG');\n                pos += 2;\n                bitsPerComponent = dataView.getUint8(pos++);\n                height = dataView.getUint16(pos);\n                pos += 2;\n                width = dataView.getUint16(pos);\n                pos += 2;\n                channelByte = dataView.getUint8(pos++);\n                channelName = ChannelToColorSpace[channelByte];\n                if (!channelName)\n                    throw new Error('Unknown JPEG channel.');\n                colorSpace = channelName;\n                return [2 /*return*/, new JpegEmbedder(imageData, bitsPerComponent, width, height, colorSpace)];\n            });\n        });\n    };\n    JpegEmbedder.prototype.embedIntoContext = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var xObject;\n            return __generator(this, function (_a) {\n                xObject = context.stream(this.imageData, {\n                    Type: 'XObject',\n                    Subtype: 'Image',\n                    BitsPerComponent: this.bitsPerComponent,\n                    Width: this.width,\n                    Height: this.height,\n                    ColorSpace: this.colorSpace,\n                    Filter: 'DCTDecode',\n                    // CMYK JPEG streams in PDF are typically stored complemented,\n                    // with 1 as 'off' and 0 as 'on' (PDF 32000-1:2008, 8.6.4.4).\n                    //\n                    // Standalone CMYK JPEG (usually exported by Photoshop) are\n                    // stored inverse, with 0 as 'off' and 1 as 'on', like RGB.\n                    //\n                    // Applying a swap here as a hedge that most bytes passing\n                    // through this method will benefit from it.\n                    Decode: this.colorSpace === ColorSpace.DeviceCMYK\n                        ? [1, 0, 1, 0, 1, 0, 1, 0]\n                        : undefined,\n                });\n                if (ref) {\n                    context.assign(ref, xObject);\n                    return [2 /*return*/, ref];\n                }\n                else {\n                    return [2 /*return*/, context.register(xObject)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    return JpegEmbedder;\n}());\nexport default JpegEmbedder;\n//# sourceMappingURL=JpegEmbedder.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport PDFHeader from \"../document/PDFHeader\";\nimport PDFTrailer from \"../document/PDFTrailer\";\nimport PDFInvalidObject from \"../objects/PDFInvalidObject\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFStream from \"../objects/PDFStream\";\nimport PDFCrossRefStream from \"../structures/PDFCrossRefStream\";\nimport PDFObjectStream from \"../structures/PDFObjectStream\";\nimport PDFWriter from \"./PDFWriter\";\nimport { last, waitForTick } from \"../../utils\";\nvar PDFStreamWriter = /** @class */ (function (_super) {\n    __extends(PDFStreamWriter, _super);\n    function PDFStreamWriter(context, objectsPerTick, encodeStreams, objectsPerStream) {\n        var _this = _super.call(this, context, objectsPerTick) || this;\n        _this.encodeStreams = encodeStreams;\n        _this.objectsPerStream = objectsPerStream;\n        return _this;\n    }\n    PDFStreamWriter.prototype.computeBufferSize = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var objectNumber, header, size, xrefStream, uncompressedObjects, compressedObjects, objectStreamRefs, indirectObjects, idx, len, indirectObject, ref, object, shouldNotCompress, chunk, objectStreamRef, idx, len, chunk, ref, objectStream, xrefStreamRef, xrefOffset, trailer;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        objectNumber = this.context.largestObjectNumber + 1;\n                        header = PDFHeader.forVersion(1, 7);\n                        size = header.sizeInBytes() + 2;\n                        xrefStream = PDFCrossRefStream.create(this.createTrailerDict(), this.encodeStreams);\n                        uncompressedObjects = [];\n                        compressedObjects = [];\n                        objectStreamRefs = [];\n                        indirectObjects = this.context.enumerateIndirectObjects();\n                        idx = 0, len = indirectObjects.length;\n                        _a.label = 1;\n                    case 1:\n                        if (!(idx < len)) return [3 /*break*/, 6];\n                        indirectObject = indirectObjects[idx];\n                        ref = indirectObject[0], object = indirectObject[1];\n                        shouldNotCompress = ref === this.context.trailerInfo.Encrypt ||\n                            object instanceof PDFStream ||\n                            object instanceof PDFInvalidObject ||\n                            ref.generationNumber !== 0;\n                        if (!shouldNotCompress) return [3 /*break*/, 4];\n                        uncompressedObjects.push(indirectObject);\n                        xrefStream.addUncompressedEntry(ref, size);\n                        size += this.computeIndirectObjectSize(indirectObject);\n                        if (!this.shouldWaitForTick(1)) return [3 /*break*/, 3];\n                        return [4 /*yield*/, waitForTick()];\n                    case 2:\n                        _a.sent();\n                        _a.label = 3;\n                    case 3: return [3 /*break*/, 5];\n                    case 4:\n                        chunk = last(compressedObjects);\n                        objectStreamRef = last(objectStreamRefs);\n                        if (!chunk || chunk.length % this.objectsPerStream === 0) {\n                            chunk = [];\n                            compressedObjects.push(chunk);\n                            objectStreamRef = PDFRef.of(objectNumber++);\n                            objectStreamRefs.push(objectStreamRef);\n                        }\n                        xrefStream.addCompressedEntry(ref, objectStreamRef, chunk.length);\n                        chunk.push(indirectObject);\n                        _a.label = 5;\n                    case 5:\n                        idx++;\n                        return [3 /*break*/, 1];\n                    case 6:\n                        idx = 0, len = compressedObjects.length;\n                        _a.label = 7;\n                    case 7:\n                        if (!(idx < len)) return [3 /*break*/, 10];\n                        chunk = compressedObjects[idx];\n                        ref = objectStreamRefs[idx];\n                        objectStream = PDFObjectStream.withContextAndObjects(this.context, chunk, this.encodeStreams);\n                        xrefStream.addUncompressedEntry(ref, size);\n                        size += this.computeIndirectObjectSize([ref, objectStream]);\n                        uncompressedObjects.push([ref, objectStream]);\n                        if (!this.shouldWaitForTick(chunk.length)) return [3 /*break*/, 9];\n                        return [4 /*yield*/, waitForTick()];\n                    case 8:\n                        _a.sent();\n                        _a.label = 9;\n                    case 9:\n                        idx++;\n                        return [3 /*break*/, 7];\n                    case 10:\n                        xrefStreamRef = PDFRef.of(objectNumber++);\n                        xrefStream.dict.set(PDFName.of('Size'), PDFNumber.of(objectNumber));\n                        xrefStream.addUncompressedEntry(xrefStreamRef, size);\n                        xrefOffset = size;\n                        size += this.computeIndirectObjectSize([xrefStreamRef, xrefStream]);\n                        uncompressedObjects.push([xrefStreamRef, xrefStream]);\n                        trailer = PDFTrailer.forLastCrossRefSectionOffset(xrefOffset);\n                        size += trailer.sizeInBytes();\n                        return [2 /*return*/, { size: size, header: header, indirectObjects: uncompressedObjects, trailer: trailer }];\n                }\n            });\n        });\n    };\n    PDFStreamWriter.forContext = function (context, objectsPerTick, encodeStreams, objectsPerStream) {\n        if (encodeStreams === void 0) { encodeStreams = true; }\n        if (objectsPerStream === void 0) { objectsPerStream = 50; }\n        return new PDFStreamWriter(context, objectsPerTick, encodeStreams, objectsPerStream);\n    };\n    return PDFStreamWriter;\n}(PDFWriter));\nexport default PDFStreamWriter;\n//# sourceMappingURL=PDFStreamWriter.js.map","import { Encodings, Font, FontNames, } from '@pdf-lib/standard-fonts';\nimport PDFHexString from \"../objects/PDFHexString\";\nimport { toCodePoint, toHexString } from \"../../utils\";\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n *   https://github.com/foliojs/pdfkit/blob/f91bdd61c164a72ea06be1a43dc0a412afc3925f/lib/font/afm.coffee\n */\nvar StandardFontEmbedder = /** @class */ (function () {\n    function StandardFontEmbedder(fontName, customName) {\n        // prettier-ignore\n        this.encoding = (fontName === FontNames.ZapfDingbats ? Encodings.ZapfDingbats\n            : fontName === FontNames.Symbol ? Encodings.Symbol\n                : Encodings.WinAnsi);\n        this.font = Font.load(fontName);\n        this.fontName = this.font.FontName;\n        this.customName = customName;\n    }\n    /**\n     * Encode the JavaScript string into this font. (JavaScript encodes strings in\n     * Unicode, but standard fonts use either WinAnsi, ZapfDingbats, or Symbol\n     * encodings)\n     */\n    StandardFontEmbedder.prototype.encodeText = function (text) {\n        var glyphs = this.encodeTextAsGlyphs(text);\n        var hexCodes = new Array(glyphs.length);\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            hexCodes[idx] = toHexString(glyphs[idx].code);\n        }\n        return PDFHexString.of(hexCodes.join(''));\n    };\n    StandardFontEmbedder.prototype.widthOfTextAtSize = function (text, size) {\n        var glyphs = this.encodeTextAsGlyphs(text);\n        var totalWidth = 0;\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            var left = glyphs[idx].name;\n            var right = (glyphs[idx + 1] || {}).name;\n            var kernAmount = this.font.getXAxisKerningForPair(left, right) || 0;\n            totalWidth += this.widthOfGlyph(left) + kernAmount;\n        }\n        var scale = size / 1000;\n        return totalWidth * scale;\n    };\n    StandardFontEmbedder.prototype.heightOfFontAtSize = function (size, options) {\n        if (options === void 0) { options = {}; }\n        var _a = options.descender, descender = _a === void 0 ? true : _a;\n        var _b = this.font, Ascender = _b.Ascender, Descender = _b.Descender, FontBBox = _b.FontBBox;\n        var yTop = Ascender || FontBBox[3];\n        var yBottom = Descender || FontBBox[1];\n        var height = yTop - yBottom;\n        if (!descender)\n            height += Descender || 0;\n        return (height / 1000) * size;\n    };\n    StandardFontEmbedder.prototype.sizeOfFontAtHeight = function (height) {\n        var _a = this.font, Ascender = _a.Ascender, Descender = _a.Descender, FontBBox = _a.FontBBox;\n        var yTop = Ascender || FontBBox[3];\n        var yBottom = Descender || FontBBox[1];\n        return (1000 * height) / (yTop - yBottom);\n    };\n    StandardFontEmbedder.prototype.embedIntoContext = function (context, ref) {\n        var fontDict = context.obj({\n            Type: 'Font',\n            Subtype: 'Type1',\n            BaseFont: this.customName || this.fontName,\n            Encoding: this.encoding === Encodings.WinAnsi ? 'WinAnsiEncoding' : undefined,\n        });\n        if (ref) {\n            context.assign(ref, fontDict);\n            return ref;\n        }\n        else {\n            return context.register(fontDict);\n        }\n    };\n    StandardFontEmbedder.prototype.widthOfGlyph = function (glyphName) {\n        // Default to 250 if font doesn't specify a width\n        return this.font.getWidthOfGlyph(glyphName) || 250;\n    };\n    StandardFontEmbedder.prototype.encodeTextAsGlyphs = function (text) {\n        var codePoints = Array.from(text);\n        var glyphs = new Array(codePoints.length);\n        for (var idx = 0, len = codePoints.length; idx < len; idx++) {\n            var codePoint = toCodePoint(codePoints[idx]);\n            glyphs[idx] = this.encoding.encodeUnicodeCodePoint(codePoint);\n        }\n        return glyphs;\n    };\n    StandardFontEmbedder.for = function (fontName, customName) {\n        return new StandardFontEmbedder(fontName, customName);\n    };\n    return StandardFontEmbedder;\n}());\nexport default StandardFontEmbedder;\n//# sourceMappingURL=StandardFontEmbedder.js.map","import { toHexString, toHexStringOfMinLength } from \"../../utils\";\nimport { hasSurrogates, highSurrogate, isWithinBMP, lowSurrogate, } from \"../../utils/unicode\";\n/** `glyphs` should be an array of unique glyphs */\nexport var createCmap = function (glyphs, glyphId) {\n    var bfChars = new Array(glyphs.length);\n    for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n        var glyph = glyphs[idx];\n        var id = cmapHexFormat(cmapHexString(glyphId(glyph)));\n        var unicode = cmapHexFormat.apply(void 0, glyph.codePoints.map(cmapCodePointFormat));\n        bfChars[idx] = [id, unicode];\n    }\n    return fillCmapTemplate(bfChars);\n};\n/* =============================== Templates ================================ */\nvar fillCmapTemplate = function (bfChars) { return \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n  /Registry (Adobe)\\n  /Ordering (UCS)\\n  /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\\n\" + bfChars.length + \" beginbfchar\\n\" + bfChars.map(function (_a) {\n    var glyphId = _a[0], codePoint = _a[1];\n    return glyphId + \" \" + codePoint;\n}).join('\\n') + \"\\nendbfchar\\nendcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"; };\n/* =============================== Utilities ================================ */\nvar cmapHexFormat = function () {\n    var values = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        values[_i] = arguments[_i];\n    }\n    return \"<\" + values.join('') + \">\";\n};\nvar cmapHexString = function (value) { return toHexStringOfMinLength(value, 4); };\nvar cmapCodePointFormat = function (codePoint) {\n    if (isWithinBMP(codePoint))\n        return cmapHexString(codePoint);\n    if (hasSurrogates(codePoint)) {\n        var hs = highSurrogate(codePoint);\n        var ls = lowSurrogate(codePoint);\n        return \"\" + cmapHexString(hs) + cmapHexString(ls);\n    }\n    var hex = toHexString(codePoint);\n    var msg = \"0x\" + hex + \" is not a valid UTF-8 or UTF-16 codepoint.\";\n    throw new Error(msg);\n};\n//# sourceMappingURL=CMap.js.map","// prettier-ignore\nvar makeFontFlags = function (options) {\n    var flags = 0;\n    var flipBit = function (bit) { flags |= (1 << (bit - 1)); };\n    if (options.fixedPitch)\n        flipBit(1);\n    if (options.serif)\n        flipBit(2);\n    if (options.symbolic)\n        flipBit(3);\n    if (options.script)\n        flipBit(4);\n    if (options.nonsymbolic)\n        flipBit(6);\n    if (options.italic)\n        flipBit(7);\n    if (options.allCap)\n        flipBit(17);\n    if (options.smallCap)\n        flipBit(18);\n    if (options.forceBold)\n        flipBit(19);\n    return flags;\n};\n// From: https://github.com/foliojs/pdfkit/blob/83f5f7243172a017adcf6a7faa5547c55982c57b/lib/font/embedded.js#L123-L129\nexport var deriveFontFlags = function (font) {\n    var familyClass = font['OS/2'] ? font['OS/2'].sFamilyClass : 0;\n    var flags = makeFontFlags({\n        fixedPitch: font.post.isFixedPitch,\n        serif: 1 <= familyClass && familyClass <= 7,\n        symbolic: true,\n        script: familyClass === 10,\n        italic: font.head.macStyle.italic,\n    });\n    return flags;\n};\n//# sourceMappingURL=FontFlags.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { createCmap } from \"./CMap\";\nimport { deriveFontFlags } from \"./FontFlags\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFString from \"../objects/PDFString\";\nimport { byAscendingId, Cache, sortedUniq, toHexStringOfMinLength, } from \"../../utils\";\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n *   https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/jpeg.coffee\n */\nvar CustomFontEmbedder = /** @class */ (function () {\n    function CustomFontEmbedder(font, fontData, customName, fontFeatures) {\n        var _this = this;\n        this.allGlyphsInFontSortedById = function () {\n            var glyphs = new Array(_this.font.characterSet.length);\n            for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n                var codePoint = _this.font.characterSet[idx];\n                glyphs[idx] = _this.font.glyphForCodePoint(codePoint);\n            }\n            return sortedUniq(glyphs.sort(byAscendingId), function (g) { return g.id; });\n        };\n        this.font = font;\n        this.scale = 1000 / this.font.unitsPerEm;\n        this.fontData = fontData;\n        this.fontName = this.font.postscriptName || 'Font';\n        this.customName = customName;\n        this.fontFeatures = fontFeatures;\n        this.baseFontName = '';\n        this.glyphCache = Cache.populatedBy(this.allGlyphsInFontSortedById);\n    }\n    CustomFontEmbedder.for = function (fontkit, fontData, customName, fontFeatures) {\n        return __awaiter(this, void 0, void 0, function () {\n            var font;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, fontkit.create(fontData)];\n                    case 1:\n                        font = _a.sent();\n                        return [2 /*return*/, new CustomFontEmbedder(font, fontData, customName, fontFeatures)];\n                }\n            });\n        });\n    };\n    /**\n     * Encode the JavaScript string into this font. (JavaScript encodes strings in\n     * Unicode, but embedded fonts use their own custom encodings)\n     */\n    CustomFontEmbedder.prototype.encodeText = function (text) {\n        var glyphs = this.font.layout(text, this.fontFeatures).glyphs;\n        var hexCodes = new Array(glyphs.length);\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            hexCodes[idx] = toHexStringOfMinLength(glyphs[idx].id, 4);\n        }\n        return PDFHexString.of(hexCodes.join(''));\n    };\n    // The advanceWidth takes into account kerning automatically, so we don't\n    // have to do that manually like we do for the standard fonts.\n    CustomFontEmbedder.prototype.widthOfTextAtSize = function (text, size) {\n        var glyphs = this.font.layout(text, this.fontFeatures).glyphs;\n        var totalWidth = 0;\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            totalWidth += glyphs[idx].advanceWidth * this.scale;\n        }\n        var scale = size / 1000;\n        return totalWidth * scale;\n    };\n    CustomFontEmbedder.prototype.heightOfFontAtSize = function (size, options) {\n        if (options === void 0) { options = {}; }\n        var _a = options.descender, descender = _a === void 0 ? true : _a;\n        var _b = this.font, ascent = _b.ascent, descent = _b.descent, bbox = _b.bbox;\n        var yTop = (ascent || bbox.maxY) * this.scale;\n        var yBottom = (descent || bbox.minY) * this.scale;\n        var height = yTop - yBottom;\n        if (!descender)\n            height -= Math.abs(descent) || 0;\n        return (height / 1000) * size;\n    };\n    CustomFontEmbedder.prototype.sizeOfFontAtHeight = function (height) {\n        var _a = this.font, ascent = _a.ascent, descent = _a.descent, bbox = _a.bbox;\n        var yTop = (ascent || bbox.maxY) * this.scale;\n        var yBottom = (descent || bbox.minY) * this.scale;\n        return (1000 * height) / (yTop - yBottom);\n    };\n    CustomFontEmbedder.prototype.embedIntoContext = function (context, ref) {\n        this.baseFontName =\n            this.customName || context.addRandomSuffix(this.fontName);\n        return this.embedFontDict(context, ref);\n    };\n    CustomFontEmbedder.prototype.embedFontDict = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var cidFontDictRef, unicodeCMapRef, fontDict;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.embedCIDFontDict(context)];\n                    case 1:\n                        cidFontDictRef = _a.sent();\n                        unicodeCMapRef = this.embedUnicodeCmap(context);\n                        fontDict = context.obj({\n                            Type: 'Font',\n                            Subtype: 'Type0',\n                            BaseFont: this.baseFontName,\n                            Encoding: 'Identity-H',\n                            DescendantFonts: [cidFontDictRef],\n                            ToUnicode: unicodeCMapRef,\n                        });\n                        if (ref) {\n                            context.assign(ref, fontDict);\n                            return [2 /*return*/, ref];\n                        }\n                        else {\n                            return [2 /*return*/, context.register(fontDict)];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CustomFontEmbedder.prototype.isCFF = function () {\n        return this.font.cff;\n    };\n    CustomFontEmbedder.prototype.embedCIDFontDict = function (context) {\n        return __awaiter(this, void 0, void 0, function () {\n            var fontDescriptorRef, cidFontDict;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.embedFontDescriptor(context)];\n                    case 1:\n                        fontDescriptorRef = _a.sent();\n                        cidFontDict = context.obj({\n                            Type: 'Font',\n                            Subtype: this.isCFF() ? 'CIDFontType0' : 'CIDFontType2',\n                            CIDToGIDMap: 'Identity',\n                            BaseFont: this.baseFontName,\n                            CIDSystemInfo: {\n                                Registry: PDFString.of('Adobe'),\n                                Ordering: PDFString.of('Identity'),\n                                Supplement: 0,\n                            },\n                            FontDescriptor: fontDescriptorRef,\n                            W: this.computeWidths(),\n                        });\n                        return [2 /*return*/, context.register(cidFontDict)];\n                }\n            });\n        });\n    };\n    CustomFontEmbedder.prototype.embedFontDescriptor = function (context) {\n        return __awaiter(this, void 0, void 0, function () {\n            var fontStreamRef, scale, _a, italicAngle, ascent, descent, capHeight, xHeight, _b, minX, minY, maxX, maxY, fontDescriptor;\n            var _c;\n            return __generator(this, function (_d) {\n                switch (_d.label) {\n                    case 0: return [4 /*yield*/, this.embedFontStream(context)];\n                    case 1:\n                        fontStreamRef = _d.sent();\n                        scale = this.scale;\n                        _a = this.font, italicAngle = _a.italicAngle, ascent = _a.ascent, descent = _a.descent, capHeight = _a.capHeight, xHeight = _a.xHeight;\n                        _b = this.font.bbox, minX = _b.minX, minY = _b.minY, maxX = _b.maxX, maxY = _b.maxY;\n                        fontDescriptor = context.obj((_c = {\n                                Type: 'FontDescriptor',\n                                FontName: this.baseFontName,\n                                Flags: deriveFontFlags(this.font),\n                                FontBBox: [minX * scale, minY * scale, maxX * scale, maxY * scale],\n                                ItalicAngle: italicAngle,\n                                Ascent: ascent * scale,\n                                Descent: descent * scale,\n                                CapHeight: (capHeight || ascent) * scale,\n                                XHeight: (xHeight || 0) * scale,\n                                // Not sure how to compute/find this, nor is anybody else really:\n                                // https://stackoverflow.com/questions/35485179/stemv-value-of-the-truetype-font\n                                StemV: 0\n                            },\n                            _c[this.isCFF() ? 'FontFile3' : 'FontFile2'] = fontStreamRef,\n                            _c));\n                        return [2 /*return*/, context.register(fontDescriptor)];\n                }\n            });\n        });\n    };\n    CustomFontEmbedder.prototype.serializeFont = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, this.fontData];\n            });\n        });\n    };\n    CustomFontEmbedder.prototype.embedFontStream = function (context) {\n        return __awaiter(this, void 0, void 0, function () {\n            var fontStream, _a, _b;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        _b = (_a = context).flateStream;\n                        return [4 /*yield*/, this.serializeFont()];\n                    case 1:\n                        fontStream = _b.apply(_a, [_c.sent(), {\n                                Subtype: this.isCFF() ? 'CIDFontType0C' : undefined,\n                            }]);\n                        return [2 /*return*/, context.register(fontStream)];\n                }\n            });\n        });\n    };\n    CustomFontEmbedder.prototype.embedUnicodeCmap = function (context) {\n        var cmap = createCmap(this.glyphCache.access(), this.glyphId.bind(this));\n        var cmapStream = context.flateStream(cmap);\n        return context.register(cmapStream);\n    };\n    CustomFontEmbedder.prototype.glyphId = function (glyph) {\n        return glyph ? glyph.id : -1;\n    };\n    CustomFontEmbedder.prototype.computeWidths = function () {\n        var glyphs = this.glyphCache.access();\n        var widths = [];\n        var currSection = [];\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            var currGlyph = glyphs[idx];\n            var prevGlyph = glyphs[idx - 1];\n            var currGlyphId = this.glyphId(currGlyph);\n            var prevGlyphId = this.glyphId(prevGlyph);\n            if (idx === 0) {\n                widths.push(currGlyphId);\n            }\n            else if (currGlyphId - prevGlyphId !== 1) {\n                widths.push(currSection);\n                widths.push(currGlyphId);\n                currSection = [];\n            }\n            currSection.push(currGlyph.advanceWidth * this.scale);\n        }\n        widths.push(currSection);\n        return widths;\n    };\n    return CustomFontEmbedder;\n}());\nexport default CustomFontEmbedder;\n//# sourceMappingURL=CustomFontEmbedder.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport CustomFontEmbedder from \"./CustomFontEmbedder\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport { Cache, mergeUint8Arrays, toHexStringOfMinLength } from \"../../utils\";\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n *   https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/jpeg.coffee\n */\nvar CustomFontSubsetEmbedder = /** @class */ (function (_super) {\n    __extends(CustomFontSubsetEmbedder, _super);\n    function CustomFontSubsetEmbedder(font, fontData, customFontName, fontFeatures) {\n        var _this = _super.call(this, font, fontData, customFontName, fontFeatures) || this;\n        _this.subset = _this.font.createSubset();\n        _this.glyphs = [];\n        _this.glyphCache = Cache.populatedBy(function () { return _this.glyphs; });\n        _this.glyphIdMap = new Map();\n        return _this;\n    }\n    CustomFontSubsetEmbedder.for = function (fontkit, fontData, customFontName, fontFeatures) {\n        return __awaiter(this, void 0, void 0, function () {\n            var font;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, fontkit.create(fontData)];\n                    case 1:\n                        font = _a.sent();\n                        return [2 /*return*/, new CustomFontSubsetEmbedder(font, fontData, customFontName, fontFeatures)];\n                }\n            });\n        });\n    };\n    CustomFontSubsetEmbedder.prototype.encodeText = function (text) {\n        var glyphs = this.font.layout(text, this.fontFeatures).glyphs;\n        var hexCodes = new Array(glyphs.length);\n        for (var idx = 0, len = glyphs.length; idx < len; idx++) {\n            var glyph = glyphs[idx];\n            var subsetGlyphId = this.subset.includeGlyph(glyph);\n            this.glyphs[subsetGlyphId - 1] = glyph;\n            this.glyphIdMap.set(glyph.id, subsetGlyphId);\n            hexCodes[idx] = toHexStringOfMinLength(subsetGlyphId, 4);\n        }\n        this.glyphCache.invalidate();\n        return PDFHexString.of(hexCodes.join(''));\n    };\n    CustomFontSubsetEmbedder.prototype.isCFF = function () {\n        return this.subset.cff;\n    };\n    CustomFontSubsetEmbedder.prototype.glyphId = function (glyph) {\n        return glyph ? this.glyphIdMap.get(glyph.id) : -1;\n    };\n    CustomFontSubsetEmbedder.prototype.serializeFont = function () {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            var parts = [];\n            _this.subset\n                .encodeStream()\n                .on('data', function (bytes) { return parts.push(bytes); })\n                .on('end', function () { return resolve(mergeUint8Arrays(parts)); })\n                .on('error', function (err) { return reject(err); });\n        });\n    };\n    return CustomFontSubsetEmbedder;\n}(CustomFontEmbedder));\nexport default CustomFontSubsetEmbedder;\n//# sourceMappingURL=CustomFontSubsetEmbedder.js.map","import pako from 'pako';\n\nvar UPNG = {};\n\n\t\n\nUPNG.toRGBA8 = function(out)\n{\n\tvar w = out.width, h = out.height;\n\tif(out.tabs.acTL==null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer];\n\t\n\tvar frms = [];\n\tif(out.frames[0].data==null) out.frames[0].data = out.data;\n\t\n\tvar len = w*h*4, img = new Uint8Array(len), empty = new Uint8Array(len), prev=new Uint8Array(len);\n\tfor(var i=0; i<out.frames.length; i++)\n\t{\n\t\tvar frm = out.frames[i];\n\t\tvar fx=frm.rect.x, fy=frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;\n\t\tvar fdata = UPNG.toRGBA8.decodeImage(frm.data, fw,fh, out);\n\t\t\n\t\tif(i!=0) for(var j=0; j<len; j++) prev[j]=img[j];\n\t\t\n\t\tif     (frm.blend==0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);\n\t\telse if(frm.blend==1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);\n\t\t\n\t\tfrms.push(img.buffer.slice(0));\n\t\t\n\t\tif     (frm.dispose==0) {}\n\t\telse if(frm.dispose==1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);\n\t\telse if(frm.dispose==2) for(var j=0; j<len; j++) img[j]=prev[j];\n\t}\n\treturn frms;\n}\nUPNG.toRGBA8.decodeImage = function(data, w, h, out)\n{\n\tvar area = w*h, bpp = UPNG.decode._getBPP(out);\n\tvar bpl = Math.ceil(w*bpp/8);\t// bytes per line\n\n\tvar bf = new Uint8Array(area*4), bf32 = new Uint32Array(bf.buffer);\n\tvar ctype = out.ctype, depth = out.depth;\n\tvar rs = UPNG._bin.readUshort;\n\t\n\t//console.log(ctype, depth);\n\tvar time = Date.now();\n\n\tif     (ctype==6) { // RGB + alpha\n\t\tvar qarea = area<<2;\n\t\tif(depth== 8) for(var i=0; i<qarea;i+=4) {  bf[i] = data[i];  bf[i+1] = data[i+1];  bf[i+2] = data[i+2];  bf[i+3] = data[i+3]; }\n\t\tif(depth==16) for(var i=0; i<qarea;i++ ) {  bf[i] = data[i<<1];  }\n\t}\n\telse if(ctype==2) {\t// RGB\n\t\tvar ts=out.tabs[\"tRNS\"];\n\t\tif(ts==null) {\n\t\t\tif(depth== 8) for(var i=0; i<area; i++) {  var ti=i*3;  bf32[i] = (255<<24)|(data[ti+2]<<16)|(data[ti+1]<<8)|data[ti];  }\n\t\t\tif(depth==16) for(var i=0; i<area; i++) {  var ti=i*6;  bf32[i] = (255<<24)|(data[ti+4]<<16)|(data[ti+2]<<8)|data[ti];  }\n\t\t}\n\t\telse {  var tr=ts[0], tg=ts[1], tb=ts[2];\n\t\t\tif(depth== 8) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*3;  bf32[i] = (255<<24)|(data[ti+2]<<16)|(data[ti+1]<<8)|data[ti];\n\t\t\t\tif(data[ti]   ==tr && data[ti+1]   ==tg && data[ti+2]   ==tb) bf[qi+3] = 0;  }\n\t\t\tif(depth==16) for(var i=0; i<area; i++) {  var qi=i<<2, ti=i*6;  bf32[i] = (255<<24)|(data[ti+4]<<16)|(data[ti+2]<<8)|data[ti];\n\t\t\t\tif(rs(data,ti)==tr && rs(data,ti+2)==tg && rs(data,ti+4)==tb) bf[qi+3] = 0;  }\n\t\t}\n\t}\n\telse if(ctype==3) {\t// palette\n\t\tvar p=out.tabs[\"PLTE\"], ap=out.tabs[\"tRNS\"], tl=ap?ap.length:0;\n\t\t//console.log(p, ap);\n\t\tif(depth==1) for(var y=0; y<h; y++) {  var s0 = y*bpl, t0 = y*w;\n\t\t\tfor(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>3)]>>(7-((i&7)<<0)))& 1), cj=3*j;  bf[qi]=p[cj];  bf[qi+1]=p[cj+1];  bf[qi+2]=p[cj+2];  bf[qi+3]=(j<tl)?ap[j]:255;  }\n\t\t}\n\t\tif(depth==2) for(var y=0; y<h; y++) {  var s0 = y*bpl, t0 = y*w;\n\t\t\tfor(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>2)]>>(6-((i&3)<<1)))& 3), cj=3*j;  bf[qi]=p[cj];  bf[qi+1]=p[cj+1];  bf[qi+2]=p[cj+2];  bf[qi+3]=(j<tl)?ap[j]:255;  }\n\t\t}\n\t\tif(depth==4) for(var y=0; y<h; y++) {  var s0 = y*bpl, t0 = y*w;\n\t\t\tfor(var i=0; i<w; i++) { var qi=(t0+i)<<2, j=((data[s0+(i>>1)]>>(4-((i&1)<<2)))&15), cj=3*j;  bf[qi]=p[cj];  bf[qi+1]=p[cj+1];  bf[qi+2]=p[cj+2];  bf[qi+3]=(j<tl)?ap[j]:255;  }\n\t\t}\n\t\tif(depth==8) for(var i=0; i<area; i++ ) {  var qi=i<<2, j=data[i]                      , cj=3*j;  bf[qi]=p[cj];  bf[qi+1]=p[cj+1];  bf[qi+2]=p[cj+2];  bf[qi+3]=(j<tl)?ap[j]:255;  }\n\t}\n\telse if(ctype==4) {\t// gray + alpha\n\t\tif(depth== 8)  for(var i=0; i<area; i++) {  var qi=i<<2, di=i<<1, gr=data[di];  bf[qi]=gr;  bf[qi+1]=gr;  bf[qi+2]=gr;  bf[qi+3]=data[di+1];  }\n\t\tif(depth==16)  for(var i=0; i<area; i++) {  var qi=i<<2, di=i<<2, gr=data[di];  bf[qi]=gr;  bf[qi+1]=gr;  bf[qi+2]=gr;  bf[qi+3]=data[di+2];  }\n\t}\n\telse if(ctype==0) {\t// gray\n\t\tvar tr = out.tabs[\"tRNS\"] ? out.tabs[\"tRNS\"] : -1;\n\t\tfor(var y=0; y<h; y++) {\n\t\t\tvar off = y*bpl, to = y*w;\n\t\t\tif     (depth== 1) for(var x=0; x<w; x++) {  var gr=255*((data[off+(x>>>3)]>>>(7 -((x&7)   )))& 1), al=(gr==tr*255)?0:255;  bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr;  }\n\t\t\telse if(depth== 2) for(var x=0; x<w; x++) {  var gr= 85*((data[off+(x>>>2)]>>>(6 -((x&3)<<1)))& 3), al=(gr==tr* 85)?0:255;  bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr;  }\n\t\t\telse if(depth== 4) for(var x=0; x<w; x++) {  var gr= 17*((data[off+(x>>>1)]>>>(4 -((x&1)<<2)))&15), al=(gr==tr* 17)?0:255;  bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr;  }\n\t\t\telse if(depth== 8) for(var x=0; x<w; x++) {  var gr=data[off+     x], al=(gr                 ==tr)?0:255;  bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr;  }\n\t\t\telse if(depth==16) for(var x=0; x<w; x++) {  var gr=data[off+(x<<1)], al=(rs(data,off+(x<<i))==tr)?0:255;  bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr;  }\n\t\t}\n\t}\n\t//console.log(Date.now()-time);\n\treturn bf;\n}\n\n\n\nUPNG.decode = function(buff)\n{\n\tvar data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;\n\tvar out = {tabs:{}, frames:[]};\n\tvar dd = new Uint8Array(data.length), doff = 0;\t // put all IDAT data into it\n\tvar fd, foff = 0;\t// frames\n\t\n\tvar mgck = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\tfor(var i=0; i<8; i++) if(data[i]!=mgck[i]) throw \"The input is not a PNG file!\";\n\n\twhile(offset<data.length)\n\t{\n\t\tvar len  = bin.readUint(data, offset);  offset += 4;\n\t\tvar type = bin.readASCII(data, offset, 4);  offset += 4;\n\t\t//console.log(type,len);\n\t\t\n\t\tif     (type==\"IHDR\")  {  UPNG.decode._IHDR(data, offset, out);  }\n\t\telse if(type==\"IDAT\") {\n\t\t\tfor(var i=0; i<len; i++) dd[doff+i] = data[offset+i];\n\t\t\tdoff += len;\n\t\t}\n\t\telse if(type==\"acTL\")  {\n\t\t\tout.tabs[type] = {  num_frames:rUi(data, offset), num_plays:rUi(data, offset+4)  };\n\t\t\tfd = new Uint8Array(data.length);\n\t\t}\n\t\telse if(type==\"fcTL\")  {\n\t\t\tif(foff!=0) {  var fr = out.frames[out.frames.length-1];\n\t\t\t\tfr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);  foff=0;\n\t\t\t}\n\t\t\tvar rct = {x:rUi(data, offset+12),y:rUi(data, offset+16),width:rUi(data, offset+4),height:rUi(data, offset+8)};\n\t\t\tvar del = rUs(data, offset+22);  del = rUs(data, offset+20) / (del==0?100:del);\n\t\t\tvar frm = {rect:rct, delay:Math.round(del*1000), dispose:data[offset+24], blend:data[offset+25]};\n\t\t\t//console.log(frm);\n\t\t\tout.frames.push(frm);\n\t\t}\n\t\telse if(type==\"fdAT\") {\n\t\t\tfor(var i=0; i<len-4; i++) fd[foff+i] = data[offset+i+4];\n\t\t\tfoff += len-4;\n\t\t}\n\t\telse if(type==\"pHYs\") {\n\t\t\tout.tabs[type] = [bin.readUint(data, offset), bin.readUint(data, offset+4), data[offset+8]];\n\t\t}\n\t\telse if(type==\"cHRM\") {\n\t\t\tout.tabs[type] = [];\n\t\t\tfor(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));\n\t\t}\n\t\telse if(type==\"tEXt\") {\n\t\t\tif(out.tabs[type]==null) out.tabs[type] = {};\n\t\t\tvar nz = bin.nextZero(data, offset);\n\t\t\tvar keyw = bin.readASCII(data, offset, nz-offset);\n\t\t\tvar text = bin.readASCII(data, nz+1, offset+len-nz-1);\n\t\t\tout.tabs[type][keyw] = text;\n\t\t}\n\t\telse if(type==\"iTXt\") {\n\t\t\tif(out.tabs[type]==null) out.tabs[type] = {};\n\t\t\tvar nz = 0, off = offset;\n\t\t\tnz = bin.nextZero(data, off);\n\t\t\tvar keyw = bin.readASCII(data, off, nz-off);  off = nz + 1;\n\t\t\tvar cflag = data[off], cmeth = data[off+1];  off+=2;\n\t\t\tnz = bin.nextZero(data, off);\n\t\t\tvar ltag = bin.readASCII(data, off, nz-off);  off = nz + 1;\n\t\t\tnz = bin.nextZero(data, off);\n\t\t\tvar tkeyw = bin.readUTF8(data, off, nz-off);  off = nz + 1;\n\t\t\tvar text  = bin.readUTF8(data, off, len-(off-offset));\n\t\t\tout.tabs[type][keyw] = text;\n\t\t}\n\t\telse if(type==\"PLTE\") {\n\t\t\tout.tabs[type] = bin.readBytes(data, offset, len);\n\t\t}\n\t\telse if(type==\"hIST\") {\n\t\t\tvar pl = out.tabs[\"PLTE\"].length/3;\n\t\t\tout.tabs[type] = [];  for(var i=0; i<pl; i++) out.tabs[type].push(rUs(data, offset+i*2));\n\t\t}\n\t\telse if(type==\"tRNS\") {\n\t\t\tif     (out.ctype==3) out.tabs[type] = bin.readBytes(data, offset, len);\n\t\t\telse if(out.ctype==0) out.tabs[type] = rUs(data, offset);\n\t\t\telse if(out.ctype==2) out.tabs[type] = [ rUs(data,offset),rUs(data,offset+2),rUs(data,offset+4) ];\n\t\t\t//else console.log(\"tRNS for unsupported color type\",out.ctype, len);\n\t\t}\n\t\telse if(type==\"gAMA\") out.tabs[type] = bin.readUint(data, offset)/100000;\n\t\telse if(type==\"sRGB\") out.tabs[type] = data[offset];\n\t\telse if(type==\"bKGD\")\n\t\t{\n\t\t\tif     (out.ctype==0 || out.ctype==4) out.tabs[type] = [rUs(data, offset)];\n\t\t\telse if(out.ctype==2 || out.ctype==6) out.tabs[type] = [rUs(data, offset), rUs(data, offset+2), rUs(data, offset+4)];\n\t\t\telse if(out.ctype==3) out.tabs[type] = data[offset];\n\t\t}\n\t\telse if(type==\"IEND\") {\n\t\t\tbreak;\n\t\t}\n\t\t//else {  log(\"unknown chunk type\", type, len);  }\n\t\toffset += len;\n\t\tvar crc = bin.readUint(data, offset);  offset += 4;\n\t}\n\tif(foff!=0) {  var fr = out.frames[out.frames.length-1];\n\t\tfr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);  foff=0;\n\t}\t\n\tout.data = UPNG.decode._decompress(out, dd, out.width, out.height);\n\t\n\tdelete out.compress;  delete out.interlace;  delete out.filter;\n\treturn out;\n}\n\nUPNG.decode._decompress = function(out, dd, w, h) {\n\tvar time = Date.now();\n\tvar bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);\n\tdd = UPNG.decode._inflate(dd,buff);\n\t//console.log(dd.length, buff.length);\n\t//console.log(Date.now()-time);\n\n\tvar time=Date.now();\n\tif     (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);\n\telse if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);\n\t//console.log(Date.now()-time);\n\treturn dd;\n}\n\nUPNG.decode._inflate = function(data, buff) {  var out=UPNG[\"inflateRaw\"](new Uint8Array(data.buffer, 2,data.length-6),buff);  return out;  }\nUPNG.inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;\nif(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;\nif(Z)W=new R(N.length>>>2<<3);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);\nvar D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;\nw+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1}if(m==2){J=A(N,d,5)+257;\nh=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var E=d,j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0}for(var c=0;\nc<Q;c++){var K=A(N,d+c*3,3);b.Q[(b.X[c]<<1)+1]=K;if(K>j)j=K}d+=3*Q;M(b.Q,j);I(b.Q,j,b.u);v=b.w;C=b.d;\nd=l(b.u,(1<<j)-1,J+h,N,d,b.v);var r=V.V(b.v,0,J,b.C);X=(1<<r)-1;var S=V.V(b.v,J,h,b.D);u=(1<<S)-1;M(b.C,r);\nI(b.C,r,v);M(b.D,S);I(b.D,S,C)}while(!0){var T=v[e(N,d)&X];d+=T&15;var p=T>>>4;if(p>>>8==0){W[w++]=p}else if(p==256){break}else{var z=w+p-254;\nif(p>264){var _=b.q[p-257];z=w+(_>>>3)+A(N,d,_&7);d+=_&7}var $=C[e(N,d)&u];d+=$&15;var s=$>>>4,Y=b.c[s],a=(Y>>>4)+n(N,d,Y&15);\nd+=Y&15;while(w<z){W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a];W[w]=W[w++-a]}w=z}}}return W.length==w?W:W.slice(0,w)};\nH.H.W=function(N,W){var R=N.length;if(W<=R)return N;var V=new Uint8Array(R<<1);V.set(N,0);return V};\nH.H.R=function(N,W,R,V,n,A){var l=H.H.e,M=H.H.Z,I=0;while(I<R){var e=N[M(V,n)&W];n+=e&15;var b=e>>>4;\nif(b<=15){A[I]=b;I++}else{var Z=0,m=0;if(b==16){m=3+l(V,n,2);n+=2;Z=A[I-1]}else if(b==17){m=3+l(V,n,3);\nn+=3}else if(b==18){m=11+l(V,n,7);n+=7}var J=I+m;while(I<J){A[I]=Z;I++}}}return n};H.H.V=function(N,W,R,V){var n=0,A=0,l=V.length>>>1;\nwhile(A<R){var M=N[A+W];V[A<<1]=0;V[(A<<1)+1]=M;if(M>n)n=M;A++}while(A<l){V[A<<1]=0;V[(A<<1)+1]=0;A++}return n};\nH.H.n=function(N,W){var R=H.H.m,V=N.length,n,A,l,M,I,e=R.j;for(var M=0;M<=W;M++)e[M]=0;for(M=1;M<V;M+=2)e[N[M]]++;\nvar b=R.K;n=0;e[0]=0;for(A=1;A<=W;A++){n=n+e[A-1]<<1;b[A]=n}for(l=0;l<V;l+=2){I=N[l+1];if(I!=0){N[l]=b[I];\nb[I]++}}};H.H.A=function(N,W,R){var V=N.length,n=H.H.m,A=n.r;for(var l=0;l<V;l+=2)if(N[l+1]!=0){var M=l>>1,I=N[l+1],e=M<<4|I,b=W-I,Z=N[l]<<b,m=Z+(1<<b);\nwhile(Z!=m){var J=A[Z]>>>15-W;R[J]=e;Z++}}};H.H.l=function(N,W){var R=H.H.m.r,V=15-W;for(var n=0;n<N.length;\nn+=2){var A=N[n]<<W-N[n+1];N[n]=R[A]>>>V}};H.H.M=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8};\nH.H.I=function(N,W,R){R=R<<(W&7);var V=W>>>3;N[V]|=R;N[V+1]|=R>>>8;N[V+2]|=R>>>16};H.H.e=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8)>>>(W&7)&(1<<R)-1};\nH.H.b=function(N,W,R){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)&(1<<R)-1};H.H.Z=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16)>>>(W&7)};\nH.H.i=function(N,W){return(N[W>>>3]|N[(W>>>3)+1]<<8|N[(W>>>3)+2]<<16|N[(W>>>3)+3]<<24)>>>(W&7)};H.H.m=function(){var N=Uint16Array,W=Uint32Array;\nreturn{K:new N(16),j:new N(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new N(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new W(32),J:new N(512),_:[],h:new N(32),$:[],w:new N(32768),C:[],v:[],d:new N(32768),D:[],u:new N(512),Q:[],r:new N(1<<15),s:new W(286),Y:new W(30),a:new W(19),t:new W(15e3),k:new N(1<<16),g:new N(1<<15)}}();\n(function(){var N=H.H.m,W=1<<15;for(var R=0;R<W;R++){var V=R;V=(V&2863311530)>>>1|(V&1431655765)<<1;\nV=(V&3435973836)>>>2|(V&858993459)<<2;V=(V&4042322160)>>>4|(V&252645135)<<4;V=(V&4278255360)>>>8|(V&16711935)<<8;\nN.r[R]=(V>>>16|V<<16)>>>17}function n(A,l,M){while(l--!=0)A.push(0,M)}for(var R=0;R<32;R++){N.q[R]=N.S[R]<<3|N.T[R];\nN.c[R]=N.p[R]<<4|N.z[R]}n(N._,144,8);n(N._,255-143,9);n(N._,279-255,7);n(N._,287-279,8);H.H.n(N._,9);\nH.H.A(N._,9,N.J);H.H.l(N._,9);n(N.$,32,5);H.H.n(N.$,5);H.H.A(N.$,5,N.h);H.H.l(N.$,5);n(N.Q,19,0);n(N.C,286,0);\nn(N.D,30,0);n(N.v,320,0)}());return H.H.N}()\n\n\nUPNG.decode._readInterlace = function(data, out)\n{\n\tvar w = out.width, h = out.height;\n\tvar bpp = UPNG.decode._getBPP(out), cbpp = bpp>>3, bpl = Math.ceil(w*bpp/8);\n\tvar img = new Uint8Array( h * bpl );\n\tvar di = 0;\n\n\tvar starting_row  = [ 0, 0, 4, 0, 2, 0, 1 ];\n\tvar starting_col  = [ 0, 4, 0, 2, 0, 1, 0 ];\n\tvar row_increment = [ 8, 8, 8, 4, 4, 2, 2 ];\n\tvar col_increment = [ 8, 8, 4, 4, 2, 2, 1 ];\n\n\tvar pass=0;\n\twhile(pass<7)\n\t{\n\t\tvar ri = row_increment[pass], ci = col_increment[pass];\n\t\tvar sw = 0, sh = 0;\n\t\tvar cr = starting_row[pass];  while(cr<h) {  cr+=ri;  sh++;  }\n\t\tvar cc = starting_col[pass];  while(cc<w) {  cc+=ci;  sw++;  }\n\t\tvar bpll = Math.ceil(sw*bpp/8);\n\t\tUPNG.decode._filterZero(data, out, di, sw, sh);\n\n\t\tvar y=0, row = starting_row[pass];\n\t\twhile(row<h)\n\t\t{\n\t\t\tvar col = starting_col[pass];\n\t\t\tvar cdi = (di+y*bpll)<<3;\n\n\t\t\twhile(col<w)\n\t\t\t{\n\t\t\t\tif(bpp==1) {\n\t\t\t\t\tvar val = data[cdi>>3];  val = (val>>(7-(cdi&7)))&1;\n\t\t\t\t\timg[row*bpl + (col>>3)] |= (val << (7-((col&7)<<0)));\n\t\t\t\t}\n\t\t\t\tif(bpp==2) {\n\t\t\t\t\tvar val = data[cdi>>3];  val = (val>>(6-(cdi&7)))&3;\n\t\t\t\t\timg[row*bpl + (col>>2)] |= (val << (6-((col&3)<<1)));\n\t\t\t\t}\n\t\t\t\tif(bpp==4) {\n\t\t\t\t\tvar val = data[cdi>>3];  val = (val>>(4-(cdi&7)))&15;\n\t\t\t\t\timg[row*bpl + (col>>1)] |= (val << (4-((col&1)<<2)));\n\t\t\t\t}\n\t\t\t\tif(bpp>=8) {\n\t\t\t\t\tvar ii = row*bpl+col*cbpp;\n\t\t\t\t\tfor(var j=0; j<cbpp; j++) img[ii+j] = data[(cdi>>3)+j];\n\t\t\t\t}\n\t\t\t\tcdi+=bpp;  col+=ci;\n\t\t\t}\n\t\t\ty++;  row += ri;\n\t\t}\n\t\tif(sw*sh!=0) di += sh * (1 + bpll);\n\t\tpass = pass + 1;\n\t}\n\treturn img;\n}\n\nUPNG.decode._getBPP = function(out) {\n\tvar noc = [1,null,3,1,2,null,4][out.ctype];\n\treturn noc * out.depth;\n}\n\nUPNG.decode._filterZero = function(data, out, off, w, h)\n{\n\tvar bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;\n\tbpp = Math.ceil(bpp/8);\n\t\n\tvar i=0, di=1, type=data[off], x=0;\n\t\n\tif(type>1) data[off]=[0,0,1][type-2];  \n\tif(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;\n\n\tfor(var y=0; y<h; y++)  {\n\t\ti = off+y*bpl; di = i+y+1;\n\t\ttype = data[di-1]; x=0;\n\n\t\tif     (type==0)   for(; x<bpl; x++) data[i+x] = data[di+x];\n\t\telse if(type==1) { for(; x<bpp; x++) data[i+x] = data[di+x];\n\t\t\t\t\t\t   for(; x<bpl; x++) data[i+x] = (data[di+x] + data[i+x-bpp]);  }\n\t\telse if(type==2) { for(; x<bpl; x++) data[i+x] = (data[di+x] + data[i+x-bpl]);  }\n\t\telse if(type==3) { for(; x<bpp; x++) data[i+x] = (data[di+x] + ( data[i+x-bpl]>>>1));\n\t\t\t               for(; x<bpl; x++) data[i+x] = (data[di+x] + ((data[i+x-bpl]+data[i+x-bpp])>>>1) );  }\n\t\telse             { for(; x<bpp; x++) data[i+x] = (data[di+x] + paeth(0, data[i+x-bpl], 0));\n\t\t\t\t\t\t   for(; x<bpl; x++) data[i+x] = (data[di+x] + paeth(data[i+x-bpp], data[i+x-bpl], data[i+x-bpp-bpl]) );  }\n\t}\n\treturn data;\n}\n\nUPNG.decode._paeth = function(a,b,c)\n{\n\tvar p = a+b-c, pa = (p-a), pb = (p-b), pc = (p-c);\n\tif (pa*pa <= pb*pb && pa*pa <= pc*pc)  return a;\n\telse if (pb*pb <= pc*pc)  return b;\n\treturn c;\n}\n\nUPNG.decode._IHDR = function(data, offset, out)\n{\n\tvar bin = UPNG._bin;\n\tout.width  = bin.readUint(data, offset);  offset += 4;\n\tout.height = bin.readUint(data, offset);  offset += 4;\n\tout.depth     = data[offset];  offset++;\n\tout.ctype     = data[offset];  offset++;\n\tout.compress  = data[offset];  offset++;\n\tout.filter    = data[offset];  offset++;\n\tout.interlace = data[offset];  offset++;\n}\n\nUPNG._bin = {\n\tnextZero   : function(data,p)  {  while(data[p]!=0) p++;  return p;  },\n\treadUshort : function(buff,p)  {  return (buff[p]<< 8) | buff[p+1];  },\n\twriteUshort: function(buff,p,n){  buff[p] = (n>>8)&255;  buff[p+1] = n&255;  },\n\treadUint   : function(buff,p)  {  return (buff[p]*(256*256*256)) + ((buff[p+1]<<16) | (buff[p+2]<< 8) | buff[p+3]);  },\n\twriteUint  : function(buff,p,n){  buff[p]=(n>>24)&255;  buff[p+1]=(n>>16)&255;  buff[p+2]=(n>>8)&255;  buff[p+3]=n&255;  },\n\treadASCII  : function(buff,p,l){  var s = \"\";  for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]);  return s;    },\n\twriteASCII : function(data,p,s){  for(var i=0; i<s.length; i++) data[p+i] = s.charCodeAt(i);  },\n\treadBytes  : function(buff,p,l){  var arr = [];   for(var i=0; i<l; i++) arr.push(buff[p+i]);   return arr;  },\n\tpad : function(n) { return n.length < 2 ? \"0\" + n : n; },\n\treadUTF8 : function(buff, p, l) {\n\t\tvar s = \"\", ns;\n\t\tfor(var i=0; i<l; i++) s += \"%\" + UPNG._bin.pad(buff[p+i].toString(16));\n\t\ttry {  ns = decodeURIComponent(s); }\n\t\tcatch(e) {  return UPNG._bin.readASCII(buff, p, l);  }\n\t\treturn  ns;\n\t}\n}\nUPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode)\n{\n\tvar w = Math.min(sw,tw), h = Math.min(sh,th);\n\tvar si=0, ti=0;\n\tfor(var y=0; y<h; y++)\n\t\tfor(var x=0; x<w; x++)\n\t\t{\n\t\t\tif(xoff>=0 && yoff>=0) {  si = (y*sw+x)<<2;  ti = (( yoff+y)*tw+xoff+x)<<2;  }\n\t\t\telse                   {  si = ((-yoff+y)*sw-xoff+x)<<2;  ti = (y*tw+x)<<2;  }\n\t\t\t\n\t\t\tif     (mode==0) {  tb[ti] = sb[si];  tb[ti+1] = sb[si+1];  tb[ti+2] = sb[si+2];  tb[ti+3] = sb[si+3];  }\n\t\t\telse if(mode==1) {\n\t\t\t\tvar fa = sb[si+3]*(1/255), fr=sb[si]*fa, fg=sb[si+1]*fa, fb=sb[si+2]*fa; \n\t\t\t\tvar ba = tb[ti+3]*(1/255), br=tb[ti]*ba, bg=tb[ti+1]*ba, bb=tb[ti+2]*ba; \n\t\t\t\t\n\t\t\t\tvar ifa=1-fa, oa = fa+ba*ifa, ioa = (oa==0?0:1/oa);\n\t\t\t\ttb[ti+3] = 255*oa;  \n\t\t\t\ttb[ti+0] = (fr+br*ifa)*ioa;  \n\t\t\t\ttb[ti+1] = (fg+bg*ifa)*ioa;   \n\t\t\t\ttb[ti+2] = (fb+bb*ifa)*ioa;  \n\t\t\t}\n\t\t\telse if(mode==2){\t// copy only differences, otherwise zero\n\t\t\t\tvar fa = sb[si+3], fr=sb[si], fg=sb[si+1], fb=sb[si+2]; \n\t\t\t\tvar ba = tb[ti+3], br=tb[ti], bg=tb[ti+1], bb=tb[ti+2]; \n\t\t\t\tif(fa==ba && fr==br && fg==bg && fb==bb) {  tb[ti]=0;  tb[ti+1]=0;  tb[ti+2]=0;  tb[ti+3]=0;  }\n\t\t\t\telse {  tb[ti]=fr;  tb[ti+1]=fg;  tb[ti+2]=fb;  tb[ti+3]=fa;  }\n\t\t\t}\n\t\t\telse if(mode==3){\t// check if can be blended\n\t\t\t\tvar fa = sb[si+3], fr=sb[si], fg=sb[si+1], fb=sb[si+2]; \n\t\t\t\tvar ba = tb[ti+3], br=tb[ti], bg=tb[ti+1], bb=tb[ti+2]; \n\t\t\t\tif(fa==ba && fr==br && fg==bg && fb==bb) continue;\n\t\t\t\t//if(fa!=255 && ba!=0) return false;\n\t\t\t\tif(fa<220 && ba>20) return false;\n\t\t\t}\n\t\t}\n\treturn true;\n}\n\n\n\n\nUPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)\n{\n\tif(ps==null) ps=0;\n\tif(forbidPlte==null) forbidPlte = false;\n\n\tvar nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);\n\tUPNG.encode.compressPNG(nimg, -1);\n\t\n\treturn UPNG.encode._main(nimg, w, h, dels, tabs);\n}\n\nUPNG.encodeLL = function(bufs, w, h, cc, ac, depth, dels, tabs) {\n\tvar nimg = {  ctype: 0 + (cc==1 ? 0 : 2) + (ac==0 ? 0 : 4),      depth: depth,  frames: []  };\n\t\n\tvar time = Date.now();\n\tvar bipp = (cc+ac)*depth, bipl = bipp * w;\n\tfor(var i=0; i<bufs.length; i++)\n\t\tnimg.frames.push({  rect:{x:0,y:0,width:w,height:h},  img:new Uint8Array(bufs[i]), blend:0, dispose:1, bpp:Math.ceil(bipp/8), bpl:Math.ceil(bipl/8)  });\n\t\n\tUPNG.encode.compressPNG(nimg, 0, true);\n\t\n\tvar out = UPNG.encode._main(nimg, w, h, dels, tabs);\n\treturn out;\n}\n\nUPNG.encode._main = function(nimg, w, h, dels, tabs) {\n\tif(tabs==null) tabs={};\n\tvar crc = UPNG.crc.crc, wUi = UPNG._bin.writeUint, wUs = UPNG._bin.writeUshort, wAs = UPNG._bin.writeASCII;\n\tvar offset = 8, anim = nimg.frames.length>1, pltAlpha = false;\n\t\n\tvar leng = 8 + (16+5+4) /*+ (9+4)*/ + (anim ? 20 : 0);\n\tif(tabs[\"sRGB\"]!=null) leng += 8+1+4;\n\tif(tabs[\"pHYs\"]!=null) leng += 8+9+4;\n\tif(nimg.ctype==3) {\n\t\tvar dl = nimg.plte.length;\n\t\tfor(var i=0; i<dl; i++) if((nimg.plte[i]>>>24)!=255) pltAlpha = true;\n\t\tleng += (8 + dl*3 + 4) + (pltAlpha ? (8 + dl*1 + 4) : 0);\n\t}\n\tfor(var j=0; j<nimg.frames.length; j++)\n\t{\n\t\tvar fr = nimg.frames[j];\n\t\tif(anim) leng += 38;\n\t\tleng += fr.cimg.length + 12;\n\t\tif(j!=0) leng+=4;\n\t}\n\tleng += 12; \n\t\n\tvar data = new Uint8Array(leng);\n\tvar wr=[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\n\tfor(var i=0; i<8; i++) data[i]=wr[i];\n\t\n\twUi(data,offset, 13);     offset+=4;\n\twAs(data,offset,\"IHDR\");  offset+=4;\n\twUi(data,offset,w);  offset+=4;\n\twUi(data,offset,h);  offset+=4;\n\tdata[offset] = nimg.depth;  offset++;  // depth\n\tdata[offset] = nimg.ctype;  offset++;  // ctype\n\tdata[offset] = 0;  offset++;  // compress\n\tdata[offset] = 0;  offset++;  // filter\n\tdata[offset] = 0;  offset++;  // interlace\n\twUi(data,offset,crc(data,offset-17,17));  offset+=4; // crc\n\n\t// 13 bytes to say, that it is sRGB\n\tif(tabs[\"sRGB\"]!=null) {\n\t\twUi(data,offset, 1);      offset+=4;\n\t\twAs(data,offset,\"sRGB\");  offset+=4;\n\t\tdata[offset] = tabs[\"sRGB\"];  offset++;\n\t\twUi(data,offset,crc(data,offset-5,5));  offset+=4; // crc\n\t}\n\tif(tabs[\"pHYs\"]!=null) {\n\t\twUi(data,offset, 9);      offset+=4;\n\t\twAs(data,offset,\"pHYs\");  offset+=4;\n\t\twUi(data,offset, tabs[\"pHYs\"][0]);      offset+=4;\n\t\twUi(data,offset, tabs[\"pHYs\"][1]);      offset+=4;\n\t\tdata[offset]=tabs[\"pHYs\"][2];\t\t\toffset++;\n\t\twUi(data,offset,crc(data,offset-13,13));  offset+=4; // crc\n\t}\n\n\tif(anim) {\n\t\twUi(data,offset, 8);      offset+=4;\n\t\twAs(data,offset,\"acTL\");  offset+=4;\n\t\twUi(data,offset, nimg.frames.length);     offset+=4;\n\t\twUi(data,offset, tabs[\"loop\"]!=null?tabs[\"loop\"]:0);      offset+=4;\n\t\twUi(data,offset,crc(data,offset-12,12));  offset+=4; // crc\n\t}\n\n\tif(nimg.ctype==3) {\n\t\tvar dl = nimg.plte.length;\n\t\twUi(data,offset, dl*3);  offset+=4;\n\t\twAs(data,offset,\"PLTE\");  offset+=4;\n\t\tfor(var i=0; i<dl; i++){\n\t\t\tvar ti=i*3, c=nimg.plte[i], r=(c)&255, g=(c>>>8)&255, b=(c>>>16)&255;\n\t\t\tdata[offset+ti+0]=r;  data[offset+ti+1]=g;  data[offset+ti+2]=b;\n\t\t}\n\t\toffset+=dl*3;\n\t\twUi(data,offset,crc(data,offset-dl*3-4,dl*3+4));  offset+=4; // crc\n\n\t\tif(pltAlpha) {\n\t\t\twUi(data,offset, dl);  offset+=4;\n\t\t\twAs(data,offset,\"tRNS\");  offset+=4;\n\t\t\tfor(var i=0; i<dl; i++)  data[offset+i]=(nimg.plte[i]>>>24)&255;\n\t\t\toffset+=dl;\n\t\t\twUi(data,offset,crc(data,offset-dl-4,dl+4));  offset+=4; // crc\n\t\t}\n\t}\n\t\n\tvar fi = 0;\n\tfor(var j=0; j<nimg.frames.length; j++)\n\t{\n\t\tvar fr = nimg.frames[j];\n\t\tif(anim) {\n\t\t\twUi(data, offset, 26);     offset+=4;\n\t\t\twAs(data, offset,\"fcTL\");  offset+=4;\n\t\t\twUi(data, offset, fi++);   offset+=4;\n\t\t\twUi(data, offset, fr.rect.width );   offset+=4;\n\t\t\twUi(data, offset, fr.rect.height);   offset+=4;\n\t\t\twUi(data, offset, fr.rect.x);   offset+=4;\n\t\t\twUi(data, offset, fr.rect.y);   offset+=4;\n\t\t\twUs(data, offset, dels[j]);   offset+=2;\n\t\t\twUs(data, offset,  1000);   offset+=2;\n\t\t\tdata[offset] = fr.dispose;  offset++;\t// dispose\n\t\t\tdata[offset] = fr.blend  ;  offset++;\t// blend\n\t\t\twUi(data,offset,crc(data,offset-30,30));  offset+=4; // crc\n\t\t}\n\t\t\t\t\n\t\tvar imgd = fr.cimg, dl = imgd.length;\n\t\twUi(data,offset, dl+(j==0?0:4));     offset+=4;\n\t\tvar ioff = offset;\n\t\twAs(data,offset,(j==0)?\"IDAT\":\"fdAT\");  offset+=4;\n\t\tif(j!=0) {  wUi(data, offset, fi++);  offset+=4;  }\n\t\tdata.set(imgd,offset);\n\t\toffset += dl;\n\t\twUi(data,offset,crc(data,ioff,offset-ioff));  offset+=4; // crc\n\t}\n\n\twUi(data,offset, 0);     offset+=4;\n\twAs(data,offset,\"IEND\");  offset+=4;\n\twUi(data,offset,crc(data,offset-4,4));  offset+=4; // crc\n\n\treturn data.buffer;\n}\n\nUPNG.encode.compressPNG = function(out, filter, levelZero) {\n\tfor(var i=0; i<out.frames.length; i++) {\n\t\tvar frm = out.frames[i], nw=frm.rect.width, nh=frm.rect.height;\n\t\tvar fdata = new Uint8Array(nh*frm.bpl+nh);\n\t\tfrm.cimg = UPNG.encode._filterZero(frm.img,nh,frm.bpp,frm.bpl,fdata, filter, levelZero);\n\t}\n}\n\n\n\nUPNG.encode.compress = function(bufs, w, h, ps, prms) // prms:  onlyBlend, minBits, forbidPlte\n{\n\t//var time = Date.now();\n\tvar onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];\n\t\n\tvar ctype = 6, depth = 8, alphaAnd=255\n\t\n\tfor(var j=0; j<bufs.length; j++)  {  // when not quantized, other frames can contain colors, that are not in an initial frame\n\t\tvar img = new Uint8Array(bufs[j]), ilen = img.length;\n\t\tfor(var i=0; i<ilen; i+=4) alphaAnd &= img[i+3];\n\t}\n\tvar gotAlpha = (alphaAnd!=255);\n\t\n\t//console.log(\"alpha check\", Date.now()-time);  time = Date.now();\n\t\n\t//var brute = gotAlpha && forGIF;\t\t// brute : frames can only be copied, not \"blended\"\n\tvar frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);\n\t//console.log(\"framize\", Date.now()-time);  time = Date.now();\n\t\n\tvar cmap={}, plte=[], inds=[];  \n\t\n\tif(ps!=0) {\n\t\tvar nbufs = [];  for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);\n\t\t\n\t\tvar abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);  \n\t\tvar cof = 0, bb = new Uint8Array(qres.abuf);\n\t\tfor(var i=0; i<frms.length; i++) {  var ti=frms[i].img, bln=ti.length;  inds.push(new Uint8Array(qres.inds.buffer, cof>>2, bln>>2));\n\t\t\tfor(var j=0; j<bln; j+=4) {  ti[j]=bb[cof+j];  ti[j+1]=bb[cof+j+1];  ti[j+2]=bb[cof+j+2];  ti[j+3]=bb[cof+j+3];  }    cof+=bln;  }\n\t\t\n\t\tfor(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);\n\t\t//console.log(\"quantize\", Date.now()-time);  time = Date.now();\n\t}\n\telse {\n\t\t// what if ps==0, but there are <=256 colors?  we still need to detect, if the palette could be used\n\t\tfor(var j=0; j<frms.length; j++)  {  // when not quantized, other frames can contain colors, that are not in an initial frame\n\t\t\tvar frm = frms[j], img32 = new Uint32Array(frm.img.buffer), nw=frm.rect.width, ilen = img32.length;\n\t\t\tvar ind = new Uint8Array(ilen);  inds.push(ind);\n\t\t\tfor(var i=0; i<ilen; i++) {\n\t\t\t\tvar c = img32[i];\n\t\t\t\tif     (i!=0 && c==img32[i- 1]) ind[i]=ind[i-1];\n\t\t\t\telse if(i>nw && c==img32[i-nw]) ind[i]=ind[i-nw];\n\t\t\t\telse {\n\t\t\t\t\tvar cmc = cmap[c];\n\t\t\t\t\tif(cmc==null) {  cmap[c]=cmc=plte.length;  plte.push(c);  if(plte.length>=300) break;  }\n\t\t\t\t\tind[i]=cmc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//console.log(\"make palette\", Date.now()-time);  time = Date.now();\n\t}\n\t\n\tvar cc=plte.length; //console.log(\"colors:\",cc);\n\tif(cc<=256 && forbidPlte==false) {\n\t\tif(cc<= 2) depth=1;  else if(cc<= 4) depth=2;  else if(cc<=16) depth=4;  else depth=8;\n\t\tdepth =  Math.max(depth, minBits);\n\t}\n\t\n\tfor(var j=0; j<frms.length; j++)\n\t{\n\t\tvar frm = frms[j], nx=frm.rect.x, ny=frm.rect.y, nw=frm.rect.width, nh=frm.rect.height;\n\t\tvar cimg = frm.img, cimg32 = new Uint32Array(cimg.buffer);\n\t\tvar bpl = 4*nw, bpp=4;\n\t\tif(cc<=256 && forbidPlte==false) {\n\t\t\tbpl = Math.ceil(depth*nw/8);\n\t\t\tvar nimg = new Uint8Array(bpl*nh);\n\t\t\tvar inj = inds[j];\n\t\t\tfor(var y=0; y<nh; y++) {  var i=y*bpl, ii=y*nw;\n\t\t\t\tif     (depth==8) for(var x=0; x<nw; x++) nimg[i+(x)   ]   =  (inj[ii+x]             );\n\t\t\t\telse if(depth==4) for(var x=0; x<nw; x++) nimg[i+(x>>1)]  |=  (inj[ii+x]<<(4-(x&1)*4));\n\t\t\t\telse if(depth==2) for(var x=0; x<nw; x++) nimg[i+(x>>2)]  |=  (inj[ii+x]<<(6-(x&3)*2));\n\t\t\t\telse if(depth==1) for(var x=0; x<nw; x++) nimg[i+(x>>3)]  |=  (inj[ii+x]<<(7-(x&7)*1));\n\t\t\t}\n\t\t\tcimg=nimg;  ctype=3;  bpp=1;\n\t\t}\n\t\telse if(gotAlpha==false && frms.length==1) {\t// some next \"reduced\" frames may contain alpha for blending\n\t\t\tvar nimg = new Uint8Array(nw*nh*3), area=nw*nh;\n\t\t\tfor(var i=0; i<area; i++) { var ti=i*3, qi=i*4;  nimg[ti]=cimg[qi];  nimg[ti+1]=cimg[qi+1];  nimg[ti+2]=cimg[qi+2];  }\n\t\t\tcimg=nimg;  ctype=2;  bpp=3;  bpl=3*nw;\n\t\t}\n\t\tfrm.img=cimg;  frm.bpl=bpl;  frm.bpp=bpp;\n\t}\n\t//console.log(\"colors => palette indices\", Date.now()-time);  time = Date.now();\n\t\n\treturn {ctype:ctype, depth:depth, plte:plte, frames:frms  };\n}\nUPNG.encode.framize = function(bufs,w,h,alwaysBlend,evenCrd,forbidPrev) {\n\t/*  DISPOSE\n\t    - 0 : no change\n\t\t- 1 : clear to transparent\n\t\t- 2 : retstore to content before rendering (previous frame disposed)\n\t\tBLEND\n\t\t- 0 : replace\n\t\t- 1 : blend\n\t*/\n\tvar frms = [];\n\tfor(var j=0; j<bufs.length; j++) {\n\t\tvar cimg = new Uint8Array(bufs[j]), cimg32 = new Uint32Array(cimg.buffer);\n\t\tvar nimg;\n\t\t\n\t\tvar nx=0, ny=0, nw=w, nh=h, blend=alwaysBlend?1:0;\n\t\tif(j!=0) {\n\t\t\tvar tlim = (forbidPrev || alwaysBlend || j==1 || frms[j-2].dispose!=0)?1:2, tstp = 0, tarea = 1e9;\n\t\t\tfor(var it=0; it<tlim; it++)\n\t\t\t{\n\t\t\t\tvar pimg = new Uint8Array(bufs[j-1-it]), p32 = new Uint32Array(bufs[j-1-it]);\n\t\t\t\tvar mix=w,miy=h,max=-1,may=-1;\n\t\t\t\tfor(var y=0; y<h; y++) for(var x=0; x<w; x++) {\n\t\t\t\t\tvar i = y*w+x;\n\t\t\t\t\tif(cimg32[i]!=p32[i]) {\n\t\t\t\t\t\tif(x<mix) mix=x;  if(x>max) max=x;\n\t\t\t\t\t\tif(y<miy) miy=y;  if(y>may) may=y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(max==-1) mix=miy=max=may=0;\n\t\t\t\tif(evenCrd) {  if((mix&1)==1)mix--;  if((miy&1)==1)miy--;  }\n\t\t\t\tvar sarea = (max-mix+1)*(may-miy+1);\n\t\t\t\tif(sarea<tarea) {\n\t\t\t\t\ttarea = sarea;  tstp = it;\n\t\t\t\t\tnx = mix; ny = miy; nw = max-mix+1; nh = may-miy+1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// alwaysBlend: pokud zjistím, že blendit nelze, nastavím předchozímu snímku dispose=1. Zajistím, aby obsahoval můj obdélník.\n\t\t\tvar pimg = new Uint8Array(bufs[j-1-tstp]);\n\t\t\tif(tstp==1) frms[j-1].dispose = 2;\n\t\t\t\n\t\t\tnimg = new Uint8Array(nw*nh*4);\n\t\t\tUPNG._copyTile(pimg,w,h, nimg,nw,nh, -nx,-ny, 0);\n\t\t\t\n\t\t\tblend =  UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, 3) ? 1 : 0;\n\t\t\tif(blend==1) UPNG.encode._prepareDiff(cimg,w,h,nimg,{x:nx,y:ny,width:nw,height:nh});\n\t\t\telse         UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, 0);\n\t\t\t//UPNG._copyTile(cimg,w,h, nimg,nw,nh, -nx,-ny, blend==1?2:0);\n\t\t}\n\t\telse nimg = cimg.slice(0);\t// img may be rewritten further ... don't rewrite input\n\t\t\n\t\tfrms.push({rect:{x:nx,y:ny,width:nw,height:nh}, img:nimg, blend:blend, dispose:0});\n\t}\n\t\n\t\n\tif(alwaysBlend) for(var j=0; j<frms.length; j++) {\n\t\tvar frm = frms[j];  if(frm.blend==1) continue;\n\t\tvar r0 = frm.rect, r1 = frms[j-1].rect\n\t\tvar miX = Math.min(r0.x, r1.x), miY = Math.min(r0.y, r1.y);\n\t\tvar maX = Math.max(r0.x+r0.width, r1.x+r1.width), maY = Math.max(r0.y+r0.height, r1.y+r1.height);\n\t\tvar r = {x:miX, y:miY, width:maX-miX, height:maY-miY};\n\t\t\n\t\tfrms[j-1].dispose = 1;\n\t\tif(j-1!=0) \n\t\tUPNG.encode._updateFrame(bufs, w,h,frms, j-1,r, evenCrd);\n\t\tUPNG.encode._updateFrame(bufs, w,h,frms, j  ,r, evenCrd);\n\t}\n\tvar area = 0;\n\tif(bufs.length!=1) for(var i=0; i<frms.length; i++) {\n\t\tvar frm = frms[i];\n\t\tarea += frm.rect.width*frm.rect.height;\n\t\t//if(i==0 || frm.blend!=1) continue;\n\t\t//var ob = new Uint8Array(\n\t\t//console.log(frm.blend, frm.dispose, frm.rect);\n\t}\n\t//if(area!=0) console.log(area);\n\treturn frms;\n}\nUPNG.encode._updateFrame = function(bufs, w,h, frms, i, r, evenCrd) {\n\tvar U8 = Uint8Array, U32 = Uint32Array;\n\tvar pimg = new U8(bufs[i-1]), pimg32 = new U32(bufs[i-1]), nimg = i+1<bufs.length ? new U8(bufs[i+1]):null;\n\tvar cimg = new U8(bufs[i]), cimg32 = new U32(cimg.buffer);\n\t\n\tvar mix=w,miy=h,max=-1,may=-1;\n\tfor(var y=0; y<r.height; y++) for(var x=0; x<r.width; x++) {\n\t\tvar cx = r.x+x, cy = r.y+y;\n\t\tvar j = cy*w+cx, cc = cimg32[j];\n\t\t// no need to draw transparency, or to dispose it. Or, if writing the same color and the next one does not need transparency.\n\t\tif(cc==0 || (frms[i-1].dispose==0 && pimg32[j]==cc && (nimg==null || nimg[j*4+3]!=0))/**/) {}\n\t\telse {\n\t\t\tif(cx<mix) mix=cx;  if(cx>max) max=cx;\n\t\t\tif(cy<miy) miy=cy;  if(cy>may) may=cy;\n\t\t}\n\t}\n\tif(max==-1) mix=miy=max=may=0;\n\tif(evenCrd) {  if((mix&1)==1)mix--;  if((miy&1)==1)miy--;  }\n\tr = {x:mix, y:miy, width:max-mix+1, height:may-miy+1};\n\t\n\tvar fr = frms[i];  fr.rect = r;  fr.blend = 1;  fr.img = new Uint8Array(r.width*r.height*4);\n\tif(frms[i-1].dispose==0) {\n\t\tUPNG._copyTile(pimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 0);\n\t\tUPNG.encode._prepareDiff(cimg,w,h,fr.img,r);\n\t\t//UPNG._copyTile(cimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 2);\n\t}\n\telse\n\t\tUPNG._copyTile(cimg,w,h, fr.img,r.width,r.height, -r.x,-r.y, 0);\n}\nUPNG.encode._prepareDiff = function(cimg, w,h, nimg, rec) {\n\tUPNG._copyTile(cimg,w,h, nimg,rec.width,rec.height, -rec.x,-rec.y, 2);\n\t/*\n\tvar n32 = new Uint32Array(nimg.buffer);\n\tvar og = new Uint8Array(rec.width*rec.height*4), o32 = new Uint32Array(og.buffer);\n\tUPNG._copyTile(cimg,w,h, og,rec.width,rec.height, -rec.x,-rec.y, 0);\n\tfor(var i=4; i<nimg.length; i+=4) {\n\t\tif(nimg[i-1]!=0 && nimg[i+3]==0 && o32[i>>>2]==o32[(i>>>2)-1]) {\n\t\t\tn32[i>>>2]=o32[i>>>2];\n\t\t\t//var j = i, c=p32[(i>>>2)-1];\n\t\t\t//while(p32[j>>>2]==c) {  n32[j>>>2]=c;  j+=4;  }\n\t\t}\n\t}\n\tfor(var i=nimg.length-8; i>0; i-=4) {\n\t\tif(nimg[i+7]!=0 && nimg[i+3]==0 && o32[i>>>2]==o32[(i>>>2)+1]) {\n\t\t\tn32[i>>>2]=o32[i>>>2];\n\t\t\t//var j = i, c=p32[(i>>>2)-1];\n\t\t\t//while(p32[j>>>2]==c) {  n32[j>>>2]=c;  j+=4;  }\n\t\t}\n\t}*/\n}\n\nUPNG.encode._filterZero = function(img,h,bpp,bpl,data, filter, levelZero)\n{\n\tvar fls = [], ftry=[0,1,2,3,4];\n\tif     (filter!=-1)             ftry=[filter];\n\telse if(h*bpl>500000 || bpp==1) ftry=[0];\n\tvar opts;  if(levelZero) opts={level:0};\n\t\n\tvar CMPR = (levelZero && UZIP!=null) ? UZIP : pako;\n\t\n\tfor(var i=0; i<ftry.length; i++) {\n\t\tfor(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);\n\t\t//var nimg = new Uint8Array(data.length);\n\t\t//var sz = UZIP.F.deflate(data, nimg);  fls.push(nimg.slice(0,sz));\n\t\t//var dfl = pako[\"deflate\"](data), dl=dfl.length-4;\n\t\t//var crc = (dfl[dl+3]<<24)|(dfl[dl+2]<<16)|(dfl[dl+1]<<8)|(dfl[dl+0]<<0);\n\t\t//console.log(crc, UZIP.adler(data,2,data.length-6));\n\t\tfls.push(CMPR[\"deflate\"](data,opts));\n\t}\n\tvar ti, tsize=1e9;\n\tfor(var i=0; i<fls.length; i++) if(fls[i].length<tsize) {  ti=i;  tsize=fls[i].length;  }\n\treturn fls[ti];\n}\nUPNG.encode._filterLine = function(data, img, y, bpl, bpp, type)\n{\n\tvar i = y*bpl, di = i+y, paeth = UPNG.decode._paeth\n\tdata[di]=type;  di++;\n\n\tif(type==0) {\n\t\tif(bpl<500) for(var x=0; x<bpl; x++) data[di+x] = img[i+x];\n\t\telse data.set(new Uint8Array(img.buffer,i,bpl),di);\n\t}\n\telse if(type==1) {\n\t\tfor(var x=  0; x<bpp; x++) data[di+x] =  img[i+x];\n\t\tfor(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]-img[i+x-bpp]+256)&255;\n\t}\n\telse if(y==0) {\n\t\tfor(var x=  0; x<bpp; x++) data[di+x] = img[i+x];\n\n\t\tif(type==2) for(var x=bpp; x<bpl; x++) data[di+x] = img[i+x];\n\t\tif(type==3) for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x] - (img[i+x-bpp]>>1) +256)&255;\n\t\tif(type==4) for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x] - paeth(img[i+x-bpp], 0, 0) +256)&255;\n\t}\n\telse {\n\t\tif(type==2) { for(var x=  0; x<bpl; x++) data[di+x] = (img[i+x]+256 - img[i+x-bpl])&255;  }\n\t\tif(type==3) { for(var x=  0; x<bpp; x++) data[di+x] = (img[i+x]+256 - (img[i+x-bpl]>>1))&255;\n\t\t\t\t\t  for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]+256 - ((img[i+x-bpl]+img[i+x-bpp])>>1))&255;  }\n\t\tif(type==4) { for(var x=  0; x<bpp; x++) data[di+x] = (img[i+x]+256 - paeth(0, img[i+x-bpl], 0))&255;\n\t\t\t\t\t  for(var x=bpp; x<bpl; x++) data[di+x] = (img[i+x]+256 - paeth(img[i+x-bpp], img[i+x-bpl], img[i+x-bpp-bpl]))&255;  }\n\t}\n}\n\nUPNG.crc = {\n\ttable : ( function() {\n\t   var tab = new Uint32Array(256);\n\t   for (var n=0; n<256; n++) {\n\t\t\tvar c = n;\n\t\t\tfor (var k=0; k<8; k++) {\n\t\t\t\tif (c & 1)  c = 0xedb88320 ^ (c >>> 1);\n\t\t\t\telse        c = c >>> 1;\n\t\t\t}\n\t\t\ttab[n] = c;  }\n\t\treturn tab;  })(),\n\tupdate : function(c, buf, off, len) {\n\t\tfor (var i=0; i<len; i++)  c = UPNG.crc.table[(c ^ buf[off+i]) & 0xff] ^ (c >>> 8);\n\t\treturn c;\n\t},\n\tcrc : function(b,o,l)  {  return UPNG.crc.update(0xffffffff,b,o,l) ^ 0xffffffff;  }\n}\n\n\nUPNG.quantize = function(abuf, ps)\n{\t\n\tvar oimg = new Uint8Array(abuf), nimg = oimg.slice(0), nimg32 = new Uint32Array(nimg.buffer);\n\t\n\tvar KD = UPNG.quantize.getKDtree(nimg, ps);\n\tvar root = KD[0], leafs = KD[1];\n\t\n\tvar planeDst = UPNG.quantize.planeDst;\n\tvar sb = oimg, tb = nimg32, len=sb.length;\n\t\t\n\tvar inds = new Uint8Array(oimg.length>>2);\n\tfor(var i=0; i<len; i+=4) {\n\t\tvar r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);\n\t\t\n\t\t//  exact, but too slow :(\n\t\tvar nd = UPNG.quantize.getNearest(root, r, g, b, a);\n\t\t//var nd = root;\n\t\t//while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;\n\t\t\n\t\tinds[i>>2] = nd.ind;\n\t\ttb[i>>2] = nd.est.rgba;\n\t}\n\treturn {  abuf:nimg.buffer, inds:inds, plte:leafs  };\n}\n\nUPNG.quantize.getKDtree = function(nimg, ps, err) {\n\tif(err==null) err = 0.0001;\n\tvar nimg32 = new Uint32Array(nimg.buffer);\n\t\n\tvar root = {i0:0, i1:nimg.length, bst:null, est:null, tdst:0, left:null, right:null };  // basic statistic, extra statistic\n\troot.bst = UPNG.quantize.stats(  nimg,root.i0, root.i1  );  root.est = UPNG.quantize.estats( root.bst );\n\tvar leafs = [root];\n\t\n\twhile(leafs.length<ps)\n\t{\n\t\tvar maxL = 0, mi=0;\n\t\tfor(var i=0; i<leafs.length; i++) if(leafs[i].est.L > maxL) {  maxL=leafs[i].est.L;  mi=i;  }\n\t\tif(maxL<err) break;\n\t\tvar node = leafs[mi];\n\t\t\n\t\tvar s0 = UPNG.quantize.splitPixels(nimg,nimg32, node.i0, node.i1, node.est.e, node.est.eMq255);\n\t\tvar s0wrong = (node.i0>=s0 || node.i1<=s0);\n\t\t//console.log(maxL, leafs.length, mi);\n\t\tif(s0wrong) {  node.est.L=0;  continue;  }\n\t\t\n\t\t\n\t\tvar ln = {i0:node.i0, i1:s0, bst:null, est:null, tdst:0, left:null, right:null };  ln.bst = UPNG.quantize.stats( nimg, ln.i0, ln.i1 );  \n\t\tln.est = UPNG.quantize.estats( ln.bst );\n\t\tvar rn = {i0:s0, i1:node.i1, bst:null, est:null, tdst:0, left:null, right:null };  rn.bst = {R:[], m:[], N:node.bst.N-ln.bst.N};\n\t\tfor(var i=0; i<16; i++) rn.bst.R[i] = node.bst.R[i]-ln.bst.R[i];\n\t\tfor(var i=0; i< 4; i++) rn.bst.m[i] = node.bst.m[i]-ln.bst.m[i];\n\t\trn.est = UPNG.quantize.estats( rn.bst );\n\t\t\n\t\tnode.left = ln;  node.right = rn;\n\t\tleafs[mi]=ln;  leafs.push(rn);\n\t}\n\tleafs.sort(function(a,b) {  return b.bst.N-a.bst.N;  });\n\tfor(var i=0; i<leafs.length; i++) leafs[i].ind=i;\n\treturn [root, leafs];\n}\n\nUPNG.quantize.getNearest = function(nd, r,g,b,a)\n{\n\tif(nd.left==null) {  nd.tdst = UPNG.quantize.dist(nd.est.q,r,g,b,a);  return nd;  }\n\tvar planeDst = UPNG.quantize.planeDst(nd.est,r,g,b,a);\n\t\n\tvar node0 = nd.left, node1 = nd.right;\n\tif(planeDst>0) {  node0=nd.right;  node1=nd.left;  }\n\t\n\tvar ln = UPNG.quantize.getNearest(node0, r,g,b,a);\n\tif(ln.tdst<=planeDst*planeDst) return ln;\n\tvar rn = UPNG.quantize.getNearest(node1, r,g,b,a);\n\treturn rn.tdst<ln.tdst ? rn : ln;\n}\nUPNG.quantize.planeDst = function(est, r,g,b,a) {  var e = est.e;  return e[0]*r + e[1]*g + e[2]*b + e[3]*a - est.eMq;  }\nUPNG.quantize.dist     = function(q,   r,g,b,a) {  var d0=r-q[0], d1=g-q[1], d2=b-q[2], d3=a-q[3];  return d0*d0+d1*d1+d2*d2+d3*d3;  }\n\nUPNG.quantize.splitPixels = function(nimg, nimg32, i0, i1, e, eMq)\n{\n\tvar vecDot = UPNG.quantize.vecDot;\n\ti1-=4;\n\tvar shfs = 0;\n\twhile(i0<i1)\n\t{\n\t\twhile(vecDot(nimg, i0, e)<=eMq) i0+=4;\n\t\twhile(vecDot(nimg, i1, e)> eMq) i1-=4;\n\t\tif(i0>=i1) break;\n\t\t\n\t\tvar t = nimg32[i0>>2];  nimg32[i0>>2] = nimg32[i1>>2];  nimg32[i1>>2]=t;\n\t\t\n\t\ti0+=4;  i1-=4;\n\t}\n\twhile(vecDot(nimg, i0, e)>eMq) i0-=4;\n\treturn i0+4;\n}\nUPNG.quantize.vecDot = function(nimg, i, e)\n{\n\treturn nimg[i]*e[0] + nimg[i+1]*e[1] + nimg[i+2]*e[2] + nimg[i+3]*e[3];\n}\nUPNG.quantize.stats = function(nimg, i0, i1){\n\tvar R = [0,0,0,0,  0,0,0,0,  0,0,0,0,  0,0,0,0];\n\tvar m = [0,0,0,0];\n\tvar N = (i1-i0)>>2;\n\tfor(var i=i0; i<i1; i+=4)\n\t{\n\t\tvar r = nimg[i]*(1/255), g = nimg[i+1]*(1/255), b = nimg[i+2]*(1/255), a = nimg[i+3]*(1/255);\n\t\t//var r = nimg[i], g = nimg[i+1], b = nimg[i+2], a = nimg[i+3];\n\t\tm[0]+=r;  m[1]+=g;  m[2]+=b;  m[3]+=a;\n\t\t\n\t\tR[ 0] += r*r;  R[ 1] += r*g;  R[ 2] += r*b;  R[ 3] += r*a;  \n\t\t               R[ 5] += g*g;  R[ 6] += g*b;  R[ 7] += g*a; \n\t\t                              R[10] += b*b;  R[11] += b*a;  \n\t\t                                             R[15] += a*a;  \n\t}\n\tR[4]=R[1];  R[8]=R[2];  R[9]=R[6];  R[12]=R[3];  R[13]=R[7];  R[14]=R[11];\n\t\n\treturn {R:R, m:m, N:N};\n}\nUPNG.quantize.estats = function(stats){\n\tvar R = stats.R, m = stats.m, N = stats.N;\n\t\n\t// when all samples are equal, but N is large (millions), the Rj can be non-zero ( 0.0003.... - precission error)\n\tvar m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], iN = (N==0 ? 0 : 1/N);\n\tvar Rj = [\n\t\tR[ 0] - m0*m0*iN,  R[ 1] - m0*m1*iN,  R[ 2] - m0*m2*iN,  R[ 3] - m0*m3*iN,  \n\t\tR[ 4] - m1*m0*iN,  R[ 5] - m1*m1*iN,  R[ 6] - m1*m2*iN,  R[ 7] - m1*m3*iN,\n\t\tR[ 8] - m2*m0*iN,  R[ 9] - m2*m1*iN,  R[10] - m2*m2*iN,  R[11] - m2*m3*iN,  \n\t\tR[12] - m3*m0*iN,  R[13] - m3*m1*iN,  R[14] - m3*m2*iN,  R[15] - m3*m3*iN \n\t];\n\t\n\tvar A = Rj, M = UPNG.M4;\n\tvar b = [0.5,0.5,0.5,0.5], mi = 0, tmi = 0;\n\t\n\tif(N!=0)\n\tfor(var i=0; i<10; i++) {\n\t\tb = M.multVec(A, b);  tmi = Math.sqrt(M.dot(b,b));  b = M.sml(1/tmi,  b);\n\t\tif(Math.abs(tmi-mi)<1e-9) break;  mi = tmi;\n\t}\t\n\t//b = [0,0,1,0];  mi=N;\n\tvar q = [m0*iN, m1*iN, m2*iN, m3*iN];\n\tvar eMq255 = M.dot(M.sml(255,q),b);\n\t\n\treturn {  Cov:Rj, q:q, e:b, L:mi,  eMq255:eMq255, eMq : M.dot(b,q),\n\t\t\t\trgba: (((Math.round(255*q[3])<<24) | (Math.round(255*q[2])<<16) |  (Math.round(255*q[1])<<8) | (Math.round(255*q[0])<<0))>>>0)  };\n}\nUPNG.M4 = {\n\tmultVec : function(m,v) {\n\t\t\treturn [\n\t\t\t\tm[ 0]*v[0] + m[ 1]*v[1] + m[ 2]*v[2] + m[ 3]*v[3],\n\t\t\t\tm[ 4]*v[0] + m[ 5]*v[1] + m[ 6]*v[2] + m[ 7]*v[3],\n\t\t\t\tm[ 8]*v[0] + m[ 9]*v[1] + m[10]*v[2] + m[11]*v[3],\n\t\t\t\tm[12]*v[0] + m[13]*v[1] + m[14]*v[2] + m[15]*v[3]\n\t\t\t];\n\t},\n\tdot : function(x,y) {  return  x[0]*y[0]+x[1]*y[1]+x[2]*y[2]+x[3]*y[3];  },\n\tsml : function(a,y) {  return [a*y[0],a*y[1],a*y[2],a*y[3]];  }\n}\n\nUPNG.encode.concatRGBA = function(bufs) {\n\tvar tlen = 0;\n\tfor(var i=0; i<bufs.length; i++) tlen += bufs[i].byteLength;\n\tvar nimg = new Uint8Array(tlen), noff=0;\n\tfor(var i=0; i<bufs.length; i++) {\n\t\tvar img = new Uint8Array(bufs[i]), il = img.length;\n\t\tfor(var j=0; j<il; j+=4) {  \n\t\t\tvar r=img[j], g=img[j+1], b=img[j+2], a = img[j+3];\n\t\t\tif(a==0) r=g=b=0;\n\t\t\tnimg[noff+j]=r;  nimg[noff+j+1]=g;  nimg[noff+j+2]=b;  nimg[noff+j+3]=a;  }\n\t\tnoff += il;\n\t}\n\treturn nimg.buffer;\n}\n\nexport default UPNG;\n\n","import UPNG from '@pdf-lib/upng';\nvar getImageType = function (ctype) {\n    if (ctype === 0)\n        return PngType.Greyscale;\n    if (ctype === 2)\n        return PngType.Truecolour;\n    if (ctype === 3)\n        return PngType.IndexedColour;\n    if (ctype === 4)\n        return PngType.GreyscaleWithAlpha;\n    if (ctype === 6)\n        return PngType.TruecolourWithAlpha;\n    throw new Error(\"Unknown color type: \" + ctype);\n};\nvar splitAlphaChannel = function (rgbaChannel) {\n    var pixelCount = Math.floor(rgbaChannel.length / 4);\n    var rgbChannel = new Uint8Array(pixelCount * 3);\n    var alphaChannel = new Uint8Array(pixelCount * 1);\n    var rgbaOffset = 0;\n    var rgbOffset = 0;\n    var alphaOffset = 0;\n    while (rgbaOffset < rgbaChannel.length) {\n        rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++];\n        rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++];\n        rgbChannel[rgbOffset++] = rgbaChannel[rgbaOffset++];\n        alphaChannel[alphaOffset++] = rgbaChannel[rgbaOffset++];\n    }\n    return { rgbChannel: rgbChannel, alphaChannel: alphaChannel };\n};\nexport var PngType;\n(function (PngType) {\n    PngType[\"Greyscale\"] = \"Greyscale\";\n    PngType[\"Truecolour\"] = \"Truecolour\";\n    PngType[\"IndexedColour\"] = \"IndexedColour\";\n    PngType[\"GreyscaleWithAlpha\"] = \"GreyscaleWithAlpha\";\n    PngType[\"TruecolourWithAlpha\"] = \"TruecolourWithAlpha\";\n})(PngType || (PngType = {}));\nvar PNG = /** @class */ (function () {\n    function PNG(pngData) {\n        var upng = UPNG.decode(pngData);\n        var frames = UPNG.toRGBA8(upng);\n        if (frames.length > 1)\n            throw new Error(\"Animated PNGs are not supported\");\n        var frame = new Uint8Array(frames[0]);\n        var _a = splitAlphaChannel(frame), rgbChannel = _a.rgbChannel, alphaChannel = _a.alphaChannel;\n        this.rgbChannel = rgbChannel;\n        var hasAlphaValues = alphaChannel.some(function (a) { return a < 255; });\n        if (hasAlphaValues)\n            this.alphaChannel = alphaChannel;\n        this.type = getImageType(upng.ctype);\n        this.width = upng.width;\n        this.height = upng.height;\n        this.bitsPerComponent = 8;\n    }\n    PNG.load = function (pngData) { return new PNG(pngData); };\n    return PNG;\n}());\nexport { PNG };\n//# sourceMappingURL=png.js.map","import PDFArray from \"../objects/PDFArray\";\nimport PDFBool from \"../objects/PDFBool\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport { assertEachIs, assertInteger, assertIsOneOf, assertRange, } from \"../../utils\";\nvar asEnum = function (rawValue, enumType) {\n    if (rawValue === undefined)\n        return undefined;\n    return enumType[rawValue];\n};\nexport var NonFullScreenPageMode;\n(function (NonFullScreenPageMode) {\n    /**\n     * After exiting FullScreen mode, neither the document outline nor thumbnail\n     * images should be visible.\n     */\n    NonFullScreenPageMode[\"UseNone\"] = \"UseNone\";\n    /** After exiting FullScreen mode, the document outline should be visible. */\n    NonFullScreenPageMode[\"UseOutlines\"] = \"UseOutlines\";\n    /** After exiting FullScreen mode, thumbnail images should be visible. */\n    NonFullScreenPageMode[\"UseThumbs\"] = \"UseThumbs\";\n    /**\n     * After exiting FullScreen mode, the optional content group panel should be\n     * visible.\n     */\n    NonFullScreenPageMode[\"UseOC\"] = \"UseOC\";\n})(NonFullScreenPageMode || (NonFullScreenPageMode = {}));\nexport var ReadingDirection;\n(function (ReadingDirection) {\n    /** The predominant reading order is Left to Right. */\n    ReadingDirection[\"L2R\"] = \"L2R\";\n    /**\n     * The predominant reading order is Right to left (including vertical writing\n     * systems, such as Chinese, Japanese and Korean).\n     */\n    ReadingDirection[\"R2L\"] = \"R2L\";\n})(ReadingDirection || (ReadingDirection = {}));\nexport var PrintScaling;\n(function (PrintScaling) {\n    /** No page scaling. */\n    PrintScaling[\"None\"] = \"None\";\n    /* Use the PDF reader's default print scaling. */\n    PrintScaling[\"AppDefault\"] = \"AppDefault\";\n})(PrintScaling || (PrintScaling = {}));\nexport var Duplex;\n(function (Duplex) {\n    /** The PDF reader should print single-sided. */\n    Duplex[\"Simplex\"] = \"Simplex\";\n    /**\n     * The PDF reader should print double sided and flip on the short edge of the\n     * sheet.\n     */\n    Duplex[\"DuplexFlipShortEdge\"] = \"DuplexFlipShortEdge\";\n    /**\n     * The PDF reader should print double sided and flip on the long edge of the\n     * sheet.\n     */\n    Duplex[\"DuplexFlipLongEdge\"] = \"DuplexFlipLongEdge\";\n})(Duplex || (Duplex = {}));\nvar ViewerPreferences = /** @class */ (function () {\n    /** @ignore */\n    function ViewerPreferences(dict) {\n        this.dict = dict;\n    }\n    ViewerPreferences.prototype.lookupBool = function (key) {\n        var returnObj = this.dict.lookup(PDFName.of(key));\n        if (returnObj instanceof PDFBool)\n            return returnObj;\n        return undefined;\n    };\n    ViewerPreferences.prototype.lookupName = function (key) {\n        var returnObj = this.dict.lookup(PDFName.of(key));\n        if (returnObj instanceof PDFName)\n            return returnObj;\n        return undefined;\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.HideToolbar = function () {\n        return this.lookupBool('HideToolbar');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.HideMenubar = function () {\n        return this.lookupBool('HideMenubar');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.HideWindowUI = function () {\n        return this.lookupBool('HideWindowUI');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.FitWindow = function () {\n        return this.lookupBool('FitWindow');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.CenterWindow = function () {\n        return this.lookupBool('CenterWindow');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.DisplayDocTitle = function () {\n        return this.lookupBool('DisplayDocTitle');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.NonFullScreenPageMode = function () {\n        return this.lookupName('NonFullScreenPageMode');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.Direction = function () {\n        return this.lookupName('Direction');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.PrintScaling = function () {\n        return this.lookupName('PrintScaling');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.Duplex = function () {\n        return this.lookupName('Duplex');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.PickTrayByPDFSize = function () {\n        return this.lookupBool('PickTrayByPDFSize');\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.PrintPageRange = function () {\n        var PrintPageRange = this.dict.lookup(PDFName.of('PrintPageRange'));\n        if (PrintPageRange instanceof PDFArray)\n            return PrintPageRange;\n        return undefined;\n    };\n    /** @ignore */\n    ViewerPreferences.prototype.NumCopies = function () {\n        var NumCopies = this.dict.lookup(PDFName.of('NumCopies'));\n        if (NumCopies instanceof PDFNumber)\n            return NumCopies;\n        return undefined;\n    };\n    /**\n     * Returns `true` if PDF readers should hide the toolbar menus when displaying\n     * this document.\n     * @returns Whether or not toolbars should be hidden.\n     */\n    ViewerPreferences.prototype.getHideToolbar = function () {\n        var _a, _b;\n        return (_b = (_a = this.HideToolbar()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns `true` if PDF readers should hide the menu bar when displaying this\n     * document.\n     * @returns Whether or not the menu bar should be hidden.\n     */\n    ViewerPreferences.prototype.getHideMenubar = function () {\n        var _a, _b;\n        return (_b = (_a = this.HideMenubar()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns `true` if PDF readers should hide the user interface elements in\n     * the document's window (such as scroll bars and navigation controls),\n     * leaving only the document's contents displayed.\n     * @returns Whether or not user interface elements should be hidden.\n     */\n    ViewerPreferences.prototype.getHideWindowUI = function () {\n        var _a, _b;\n        return (_b = (_a = this.HideWindowUI()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns `true` if PDF readers should resize the document's window to fit\n     * the size of the first displayed page.\n     * @returns Whether or not the window should be resized to fit.\n     */\n    ViewerPreferences.prototype.getFitWindow = function () {\n        var _a, _b;\n        return (_b = (_a = this.FitWindow()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns `true` if PDF readers should position the document's window in the\n     * center of the screen.\n     * @returns Whether or not to center the document window.\n     */\n    ViewerPreferences.prototype.getCenterWindow = function () {\n        var _a, _b;\n        return (_b = (_a = this.CenterWindow()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns `true` if the window's title bar should display the document\n     * `Title`, taken from the document metadata (see [[PDFDocument.getTitle]]).\n     * Returns `false` if the title bar should instead display the filename of the\n     * PDF file.\n     * @returns Whether to display the document title.\n     */\n    ViewerPreferences.prototype.getDisplayDocTitle = function () {\n        var _a, _b;\n        return (_b = (_a = this.DisplayDocTitle()) === null || _a === void 0 ? void 0 : _a.asBoolean()) !== null && _b !== void 0 ? _b : false;\n    };\n    /**\n     * Returns the page mode, which tells the PDF reader how to display the\n     * document after exiting full-screen mode.\n     * @returns The page mode after exiting full-screen mode.\n     */\n    ViewerPreferences.prototype.getNonFullScreenPageMode = function () {\n        var _a, _b;\n        var mode = (_a = this.NonFullScreenPageMode()) === null || _a === void 0 ? void 0 : _a.decodeText();\n        return (_b = asEnum(mode, NonFullScreenPageMode)) !== null && _b !== void 0 ? _b : NonFullScreenPageMode.UseNone;\n    };\n    /**\n     * Returns the predominant reading order for text.\n     * @returns The text reading order.\n     */\n    ViewerPreferences.prototype.getReadingDirection = function () {\n        var _a, _b;\n        var direction = (_a = this.Direction()) === null || _a === void 0 ? void 0 : _a.decodeText();\n        return (_b = asEnum(direction, ReadingDirection)) !== null && _b !== void 0 ? _b : ReadingDirection.L2R;\n    };\n    /**\n     * Returns the page scaling option that the PDF reader should select when the\n     * print dialog is displayed.\n     * @returns The page scaling option.\n     */\n    ViewerPreferences.prototype.getPrintScaling = function () {\n        var _a, _b;\n        var scaling = (_a = this.PrintScaling()) === null || _a === void 0 ? void 0 : _a.decodeText();\n        return (_b = asEnum(scaling, PrintScaling)) !== null && _b !== void 0 ? _b : PrintScaling.AppDefault;\n    };\n    /**\n     * Returns the paper handling option that should be used when printing the\n     * file from the print dialog.\n     * @returns The paper handling option.\n     */\n    ViewerPreferences.prototype.getDuplex = function () {\n        var _a;\n        var duplex = (_a = this.Duplex()) === null || _a === void 0 ? void 0 : _a.decodeText();\n        return asEnum(duplex, Duplex);\n    };\n    /**\n     * Returns `true` if the PDF page size should be used to select the input\n     * paper tray.\n     * @returns Whether or not the PDF page size should be used to select the\n     *          input paper tray.\n     */\n    ViewerPreferences.prototype.getPickTrayByPDFSize = function () {\n        var _a;\n        return (_a = this.PickTrayByPDFSize()) === null || _a === void 0 ? void 0 : _a.asBoolean();\n    };\n    /**\n     * Returns an array of page number ranges, which are the values used to\n     * initialize the print dialog box when the file is printed. Each range\n     * specifies the first (`start`) and last (`end`) pages in a sub-range of\n     * pages to be printed. The first page of the PDF file is denoted by 0.\n     * For example:\n     * ```js\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     * const includesPage3 = viewerPrefs\n     *   .getPrintRanges()\n     *   .some(pr => pr.start =< 2 && pr.end >= 2)\n     * if (includesPage3) console.log('printRange includes page 3')\n     * ```\n     * @returns An array of objects, each with the properties `start` and `end`,\n     *          denoting page indices. If not, specified an empty array is\n     *          returned.\n     */\n    ViewerPreferences.prototype.getPrintPageRange = function () {\n        var rng = this.PrintPageRange();\n        if (!rng)\n            return [];\n        var pageRanges = [];\n        for (var i = 0; i < rng.size(); i += 2) {\n            // Despite the spec clearly stating that \"The first page of the PDF file\n            // shall be donoted by 1\", several test PDFs (spec 1.7) created in\n            // Acrobat XI 11.0 and also read with Reader DC 2020.013 indicate this is\n            // actually a 0 based index.\n            var start = rng.lookup(i, PDFNumber).asNumber();\n            var end = rng.lookup(i + 1, PDFNumber).asNumber();\n            pageRanges.push({ start: start, end: end });\n        }\n        return pageRanges;\n    };\n    /**\n     * Returns the number of copies to be printed when the print dialog is opened\n     * for this document.\n     * @returns The default number of copies to be printed.\n     */\n    ViewerPreferences.prototype.getNumCopies = function () {\n        var _a, _b;\n        return (_b = (_a = this.NumCopies()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 1;\n    };\n    /**\n     * Choose whether the PDF reader's toolbars should be hidden while the\n     * document is active.\n     * @param hideToolbar `true` if the toolbar should be hidden.\n     */\n    ViewerPreferences.prototype.setHideToolbar = function (hideToolbar) {\n        var HideToolbar = this.dict.context.obj(hideToolbar);\n        this.dict.set(PDFName.of('HideToolbar'), HideToolbar);\n    };\n    /**\n     * Choose whether the PDF reader's menu bar should be hidden while the\n     * document is active.\n     * @param hideMenubar `true` if the menu bar should be hidden.\n     */\n    ViewerPreferences.prototype.setHideMenubar = function (hideMenubar) {\n        var HideMenubar = this.dict.context.obj(hideMenubar);\n        this.dict.set(PDFName.of('HideMenubar'), HideMenubar);\n    };\n    /**\n     * Choose whether the PDF reader should hide user interface elements in the\n     * document's window (such as scroll bars and navigation controls), leaving\n     * only the document's contents displayed.\n     * @param hideWindowUI `true` if the user interface elements should be hidden.\n     */\n    ViewerPreferences.prototype.setHideWindowUI = function (hideWindowUI) {\n        var HideWindowUI = this.dict.context.obj(hideWindowUI);\n        this.dict.set(PDFName.of('HideWindowUI'), HideWindowUI);\n    };\n    /**\n     * Choose whether the PDF reader should resize the document's window to fit\n     * the size of the first displayed page.\n     * @param fitWindow `true` if the window should be resized.\n     */\n    ViewerPreferences.prototype.setFitWindow = function (fitWindow) {\n        var FitWindow = this.dict.context.obj(fitWindow);\n        this.dict.set(PDFName.of('FitWindow'), FitWindow);\n    };\n    /**\n     * Choose whether the PDF reader should position the document's window in the\n     * center of the screen.\n     * @param centerWindow `true` if the window should be centered.\n     */\n    ViewerPreferences.prototype.setCenterWindow = function (centerWindow) {\n        var CenterWindow = this.dict.context.obj(centerWindow);\n        this.dict.set(PDFName.of('CenterWindow'), CenterWindow);\n    };\n    /**\n     * Choose whether the window's title bar should display the document `Title`\n     * taken from the document metadata (see [[PDFDocument.setTitle]]). If\n     * `false`, the title bar should instead display the PDF filename.\n     * @param displayTitle `true` if the document title should be displayed.\n     */\n    ViewerPreferences.prototype.setDisplayDocTitle = function (displayTitle) {\n        var DisplayDocTitle = this.dict.context.obj(displayTitle);\n        this.dict.set(PDFName.of('DisplayDocTitle'), DisplayDocTitle);\n    };\n    /**\n     * Choose how the PDF reader should display the document upon exiting\n     * full-screen mode. This entry is meaningful only if the value of the\n     * `PageMode` entry in the document's [[PDFCatalog]] is `FullScreen`.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument, NonFullScreenPageMode, PDFName } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     *\n     * // Set the PageMode\n     * pdfDoc.catalog.set(PDFName.of('PageMode'),PDFName.of('FullScreen'))\n     *\n     * // Set what happens when full-screen is closed\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     * viewerPrefs.setNonFullScreenPageMode(NonFullScreenPageMode.UseOutlines)\n     * ```\n     *\n     * @param nonFullScreenPageMode How the document should be displayed upon\n     *                              exiting full screen mode.\n     */\n    ViewerPreferences.prototype.setNonFullScreenPageMode = function (nonFullScreenPageMode) {\n        assertIsOneOf(nonFullScreenPageMode, 'nonFullScreenPageMode', NonFullScreenPageMode);\n        var mode = PDFName.of(nonFullScreenPageMode);\n        this.dict.set(PDFName.of('NonFullScreenPageMode'), mode);\n    };\n    /**\n     * Choose the predominant reading order for text.\n     *\n     * This entry has no direct effect on the document's contents or page\n     * numbering, but may be used to determine the relative positioning of pages\n     * when displayed side by side or printed n-up.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument, ReadingDirection } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     * viewerPrefs.setReadingDirection(ReadingDirection.R2L)\n     * ```\n     *\n     * @param readingDirection The reading order for text.\n     */\n    ViewerPreferences.prototype.setReadingDirection = function (readingDirection) {\n        assertIsOneOf(readingDirection, 'readingDirection', ReadingDirection);\n        var direction = PDFName.of(readingDirection);\n        this.dict.set(PDFName.of('Direction'), direction);\n    };\n    /**\n     * Choose the page scaling option that should be selected when a print dialog\n     * is displayed for this document.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument, PrintScaling } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     * viewerPrefs.setPrintScaling(PrintScaling.None)\n     * ```\n     *\n     * @param printScaling The print scaling option.\n     */\n    ViewerPreferences.prototype.setPrintScaling = function (printScaling) {\n        assertIsOneOf(printScaling, 'printScaling', PrintScaling);\n        var scaling = PDFName.of(printScaling);\n        this.dict.set(PDFName.of('PrintScaling'), scaling);\n    };\n    /**\n     * Choose the paper handling option that should be selected by default in the\n     * print dialog.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument, Duplex } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     * viewerPrefs.setDuplex(Duplex.DuplexFlipShortEdge)\n     * ```\n     *\n     * @param duplex The double or single sided printing option.\n     */\n    ViewerPreferences.prototype.setDuplex = function (duplex) {\n        assertIsOneOf(duplex, 'duplex', Duplex);\n        var dup = PDFName.of(duplex);\n        this.dict.set(PDFName.of('Duplex'), dup);\n    };\n    /**\n     * Choose whether the PDF document's page size should be used to select the\n     * input paper tray when printing. This setting influences only the preset\n     * values used to populate the print dialog presented by a PDF reader.\n     *\n     * If PickTrayByPDFSize is true, the check box in the print dialog associated\n     * with input paper tray should be checked. This setting has no effect on\n     * operating systems that do not provide the ability to pick the input tray\n     * by size.\n     *\n     * @param pickTrayByPDFSize `true` if the document's page size should be used\n     *                          to select the input paper tray.\n     */\n    ViewerPreferences.prototype.setPickTrayByPDFSize = function (pickTrayByPDFSize) {\n        var PickTrayByPDFSize = this.dict.context.obj(pickTrayByPDFSize);\n        this.dict.set(PDFName.of('PickTrayByPDFSize'), PickTrayByPDFSize);\n    };\n    /**\n     * Choose the page numbers used to initialize the print dialog box when the\n     * file is printed. The first page of the PDF file is denoted by 0.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * const viewerPrefs = pdfDoc.catalog.getOrCreateViewerPreferences()\n     *\n     * // We can set the default print range to only the first page\n     * viewerPrefs.setPrintPageRange({ start: 0, end: 0 })\n     *\n     * // Or we can supply noncontiguous ranges (e.g. pages 1, 3, and 5-7)\n     * viewerPrefs.setPrintPageRange([\n     *   { start: 0, end: 0 },\n     *   { start: 2, end: 2 },\n     *   { start: 4, end: 6 },\n     * ])\n     * ```\n     *\n     * @param printPageRange An object or array of objects, each with the\n     *                       properties `start` and `end`, denoting a range of\n     *                       page indices.\n     */\n    ViewerPreferences.prototype.setPrintPageRange = function (printPageRange) {\n        if (!Array.isArray(printPageRange))\n            printPageRange = [printPageRange];\n        var flatRange = [];\n        for (var idx = 0, len = printPageRange.length; idx < len; idx++) {\n            flatRange.push(printPageRange[idx].start);\n            flatRange.push(printPageRange[idx].end);\n        }\n        assertEachIs(flatRange, 'printPageRange', ['number']);\n        var pageRanges = this.dict.context.obj(flatRange);\n        this.dict.set(PDFName.of('PrintPageRange'), pageRanges);\n    };\n    /**\n     * Choose the default number of copies to be printed when the print dialog is\n     * opened for this file.\n     * @param numCopies The default number of copies.\n     */\n    ViewerPreferences.prototype.setNumCopies = function (numCopies) {\n        assertRange(numCopies, 'numCopies', 1, Number.MAX_VALUE);\n        assertInteger(numCopies, 'numCopies');\n        var NumCopies = this.dict.context.obj(numCopies);\n        this.dict.set(PDFName.of('NumCopies'), NumCopies);\n    };\n    /** @ignore */\n    ViewerPreferences.fromDict = function (dict) {\n        return new ViewerPreferences(dict);\n    };\n    /** @ignore */\n    ViewerPreferences.create = function (context) {\n        var dict = context.obj({});\n        return new ViewerPreferences(dict);\n    };\n    return ViewerPreferences;\n}());\nexport default ViewerPreferences;\n//# sourceMappingURL=ViewerPreferences.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { PNG } from \"../../utils/png\";\n/**\n * A note of thanks to the developers of https://github.com/foliojs/pdfkit, as\n * this class borrows from:\n *   https://github.com/devongovett/pdfkit/blob/e71edab0dd4657b5a767804ba86c94c58d01fbca/lib/image/png.coffee\n */\nvar PngEmbedder = /** @class */ (function () {\n    function PngEmbedder(png) {\n        this.image = png;\n        this.bitsPerComponent = png.bitsPerComponent;\n        this.width = png.width;\n        this.height = png.height;\n        this.colorSpace = 'DeviceRGB';\n    }\n    PngEmbedder.for = function (imageData) {\n        return __awaiter(this, void 0, void 0, function () {\n            var png;\n            return __generator(this, function (_a) {\n                png = PNG.load(imageData);\n                return [2 /*return*/, new PngEmbedder(png)];\n            });\n        });\n    };\n    PngEmbedder.prototype.embedIntoContext = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var SMask, xObject;\n            return __generator(this, function (_a) {\n                SMask = this.embedAlphaChannel(context);\n                xObject = context.flateStream(this.image.rgbChannel, {\n                    Type: 'XObject',\n                    Subtype: 'Image',\n                    BitsPerComponent: this.image.bitsPerComponent,\n                    Width: this.image.width,\n                    Height: this.image.height,\n                    ColorSpace: this.colorSpace,\n                    SMask: SMask,\n                });\n                if (ref) {\n                    context.assign(ref, xObject);\n                    return [2 /*return*/, ref];\n                }\n                else {\n                    return [2 /*return*/, context.register(xObject)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    PngEmbedder.prototype.embedAlphaChannel = function (context) {\n        if (!this.image.alphaChannel)\n            return undefined;\n        var xObject = context.flateStream(this.image.alphaChannel, {\n            Type: 'XObject',\n            Subtype: 'Image',\n            Height: this.image.height,\n            Width: this.image.width,\n            BitsPerComponent: this.image.bitsPerComponent,\n            ColorSpace: 'DeviceGray',\n            Decode: [0, 1],\n        });\n        return context.register(xObject);\n    };\n    return PngEmbedder;\n}());\nexport default PngEmbedder;\n//# sourceMappingURL=PngEmbedder.js.map","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Stream class contained in this file is a TypeScript port of the\n * JavaScript Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\nvar Stream = /** @class */ (function () {\n    function Stream(buffer, start, length) {\n        this.bytes = buffer;\n        this.start = start || 0;\n        this.pos = this.start;\n        this.end = !!start && !!length ? start + length : this.bytes.length;\n    }\n    Object.defineProperty(Stream.prototype, \"length\", {\n        get: function () {\n            return this.end - this.start;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Stream.prototype, \"isEmpty\", {\n        get: function () {\n            return this.length === 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Stream.prototype.getByte = function () {\n        if (this.pos >= this.end) {\n            return -1;\n        }\n        return this.bytes[this.pos++];\n    };\n    Stream.prototype.getUint16 = function () {\n        var b0 = this.getByte();\n        var b1 = this.getByte();\n        if (b0 === -1 || b1 === -1) {\n            return -1;\n        }\n        return (b0 << 8) + b1;\n    };\n    Stream.prototype.getInt32 = function () {\n        var b0 = this.getByte();\n        var b1 = this.getByte();\n        var b2 = this.getByte();\n        var b3 = this.getByte();\n        return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n    };\n    // Returns subarray of original buffer, should only be read.\n    Stream.prototype.getBytes = function (length, forceClamped) {\n        if (forceClamped === void 0) { forceClamped = false; }\n        var bytes = this.bytes;\n        var pos = this.pos;\n        var strEnd = this.end;\n        if (!length) {\n            var subarray = bytes.subarray(pos, strEnd);\n            // `this.bytes` is always a `Uint8Array` here.\n            return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n        }\n        else {\n            var end = pos + length;\n            if (end > strEnd) {\n                end = strEnd;\n            }\n            this.pos = end;\n            var subarray = bytes.subarray(pos, end);\n            // `this.bytes` is always a `Uint8Array` here.\n            return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\n        }\n    };\n    Stream.prototype.peekByte = function () {\n        var peekedByte = this.getByte();\n        this.pos--;\n        return peekedByte;\n    };\n    Stream.prototype.peekBytes = function (length, forceClamped) {\n        if (forceClamped === void 0) { forceClamped = false; }\n        var bytes = this.getBytes(length, forceClamped);\n        this.pos -= bytes.length;\n        return bytes;\n    };\n    Stream.prototype.skip = function (n) {\n        if (!n) {\n            n = 1;\n        }\n        this.pos += n;\n    };\n    Stream.prototype.reset = function () {\n        this.pos = this.start;\n    };\n    Stream.prototype.moveStart = function () {\n        this.start = this.pos;\n    };\n    Stream.prototype.makeSubStream = function (start, length) {\n        return new Stream(this.bytes, start, length);\n    };\n    Stream.prototype.decode = function () {\n        return this.bytes;\n    };\n    return Stream;\n}());\nexport default Stream;\n//# sourceMappingURL=Stream.js.map","import { MethodNotImplementedError } from \"../errors\";\nimport Stream from \"./Stream\";\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The DecodeStream class contained in this file is a TypeScript port of the\n * JavaScript DecodeStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n// Lots of DecodeStreams are created whose buffers are never used.  For these\n// we share a single empty buffer. This is (a) space-efficient and (b) avoids\n// having special cases that would be required if we used |null| for an empty\n// buffer.\nvar emptyBuffer = new Uint8Array(0);\n/**\n * Super class for the decoding streams\n */\nvar DecodeStream = /** @class */ (function () {\n    function DecodeStream(maybeMinBufferLength) {\n        this.pos = 0;\n        this.bufferLength = 0;\n        this.eof = false;\n        this.buffer = emptyBuffer;\n        this.minBufferLength = 512;\n        if (maybeMinBufferLength) {\n            // Compute the first power of two that is as big as maybeMinBufferLength.\n            while (this.minBufferLength < maybeMinBufferLength) {\n                this.minBufferLength *= 2;\n            }\n        }\n    }\n    Object.defineProperty(DecodeStream.prototype, \"isEmpty\", {\n        get: function () {\n            while (!this.eof && this.bufferLength === 0) {\n                this.readBlock();\n            }\n            return this.bufferLength === 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    DecodeStream.prototype.getByte = function () {\n        var pos = this.pos;\n        while (this.bufferLength <= pos) {\n            if (this.eof) {\n                return -1;\n            }\n            this.readBlock();\n        }\n        return this.buffer[this.pos++];\n    };\n    DecodeStream.prototype.getUint16 = function () {\n        var b0 = this.getByte();\n        var b1 = this.getByte();\n        if (b0 === -1 || b1 === -1) {\n            return -1;\n        }\n        return (b0 << 8) + b1;\n    };\n    DecodeStream.prototype.getInt32 = function () {\n        var b0 = this.getByte();\n        var b1 = this.getByte();\n        var b2 = this.getByte();\n        var b3 = this.getByte();\n        return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\n    };\n    DecodeStream.prototype.getBytes = function (length, forceClamped) {\n        if (forceClamped === void 0) { forceClamped = false; }\n        var end;\n        var pos = this.pos;\n        if (length) {\n            this.ensureBuffer(pos + length);\n            end = pos + length;\n            while (!this.eof && this.bufferLength < end) {\n                this.readBlock();\n            }\n            var bufEnd = this.bufferLength;\n            if (end > bufEnd) {\n                end = bufEnd;\n            }\n        }\n        else {\n            while (!this.eof) {\n                this.readBlock();\n            }\n            end = this.bufferLength;\n        }\n        this.pos = end;\n        var subarray = this.buffer.subarray(pos, end);\n        // `this.buffer` is either a `Uint8Array` or `Uint8ClampedArray` here.\n        return forceClamped && !(subarray instanceof Uint8ClampedArray)\n            ? new Uint8ClampedArray(subarray)\n            : subarray;\n    };\n    DecodeStream.prototype.peekByte = function () {\n        var peekedByte = this.getByte();\n        this.pos--;\n        return peekedByte;\n    };\n    DecodeStream.prototype.peekBytes = function (length, forceClamped) {\n        if (forceClamped === void 0) { forceClamped = false; }\n        var bytes = this.getBytes(length, forceClamped);\n        this.pos -= bytes.length;\n        return bytes;\n    };\n    DecodeStream.prototype.skip = function (n) {\n        if (!n) {\n            n = 1;\n        }\n        this.pos += n;\n    };\n    DecodeStream.prototype.reset = function () {\n        this.pos = 0;\n    };\n    DecodeStream.prototype.makeSubStream = function (start, length /* dict */) {\n        var end = start + length;\n        while (this.bufferLength <= end && !this.eof) {\n            this.readBlock();\n        }\n        return new Stream(this.buffer, start, length /* dict */);\n    };\n    DecodeStream.prototype.decode = function () {\n        while (!this.eof)\n            this.readBlock();\n        return this.buffer.subarray(0, this.bufferLength);\n    };\n    DecodeStream.prototype.readBlock = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'readBlock');\n    };\n    DecodeStream.prototype.ensureBuffer = function (requested) {\n        var buffer = this.buffer;\n        if (requested <= buffer.byteLength) {\n            return buffer;\n        }\n        var size = this.minBufferLength;\n        while (size < requested) {\n            size *= 2;\n        }\n        var buffer2 = new Uint8Array(size);\n        buffer2.set(buffer);\n        return (this.buffer = buffer2);\n    };\n    return DecodeStream;\n}());\nexport default DecodeStream;\n//# sourceMappingURL=DecodeStream.js.map","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The Ascii85Stream class contained in this file is a TypeScript port of the\n * JavaScript Ascii85Stream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\nimport { __extends } from \"tslib\";\nimport DecodeStream from \"./DecodeStream\";\nvar isSpace = function (ch) {\n    return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\n};\nvar Ascii85Stream = /** @class */ (function (_super) {\n    __extends(Ascii85Stream, _super);\n    function Ascii85Stream(stream, maybeLength) {\n        var _this = _super.call(this, maybeLength) || this;\n        _this.stream = stream;\n        _this.input = new Uint8Array(5);\n        // Most streams increase in size when decoded, but Ascii85 streams\n        // typically shrink by ~20%.\n        if (maybeLength) {\n            maybeLength = 0.8 * maybeLength;\n        }\n        return _this;\n    }\n    Ascii85Stream.prototype.readBlock = function () {\n        var TILDA_CHAR = 0x7e; // '~'\n        var Z_LOWER_CHAR = 0x7a; // 'z'\n        var EOF = -1;\n        var stream = this.stream;\n        var c = stream.getByte();\n        while (isSpace(c)) {\n            c = stream.getByte();\n        }\n        if (c === EOF || c === TILDA_CHAR) {\n            this.eof = true;\n            return;\n        }\n        var bufferLength = this.bufferLength;\n        var buffer;\n        var i;\n        // special code for z\n        if (c === Z_LOWER_CHAR) {\n            buffer = this.ensureBuffer(bufferLength + 4);\n            for (i = 0; i < 4; ++i) {\n                buffer[bufferLength + i] = 0;\n            }\n            this.bufferLength += 4;\n        }\n        else {\n            var input = this.input;\n            input[0] = c;\n            for (i = 1; i < 5; ++i) {\n                c = stream.getByte();\n                while (isSpace(c)) {\n                    c = stream.getByte();\n                }\n                input[i] = c;\n                if (c === EOF || c === TILDA_CHAR) {\n                    break;\n                }\n            }\n            buffer = this.ensureBuffer(bufferLength + i - 1);\n            this.bufferLength += i - 1;\n            // partial ending;\n            if (i < 5) {\n                for (; i < 5; ++i) {\n                    input[i] = 0x21 + 84;\n                }\n                this.eof = true;\n            }\n            var t = 0;\n            for (i = 0; i < 5; ++i) {\n                t = t * 85 + (input[i] - 0x21);\n            }\n            for (i = 3; i >= 0; --i) {\n                buffer[bufferLength + i] = t & 0xff;\n                t >>= 8;\n            }\n        }\n    };\n    return Ascii85Stream;\n}(DecodeStream));\nexport default Ascii85Stream;\n//# sourceMappingURL=Ascii85Stream.js.map","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The AsciiHexStream class contained in this file is a TypeScript port of the\n * JavaScript AsciiHexStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\nimport { __extends } from \"tslib\";\nimport DecodeStream from \"./DecodeStream\";\nvar AsciiHexStream = /** @class */ (function (_super) {\n    __extends(AsciiHexStream, _super);\n    function AsciiHexStream(stream, maybeLength) {\n        var _this = _super.call(this, maybeLength) || this;\n        _this.stream = stream;\n        _this.firstDigit = -1;\n        // Most streams increase in size when decoded, but AsciiHex streams shrink\n        // by 50%.\n        if (maybeLength) {\n            maybeLength = 0.5 * maybeLength;\n        }\n        return _this;\n    }\n    AsciiHexStream.prototype.readBlock = function () {\n        var UPSTREAM_BLOCK_SIZE = 8000;\n        var bytes = this.stream.getBytes(UPSTREAM_BLOCK_SIZE);\n        if (!bytes.length) {\n            this.eof = true;\n            return;\n        }\n        var maxDecodeLength = (bytes.length + 1) >> 1;\n        var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\n        var bufferLength = this.bufferLength;\n        var firstDigit = this.firstDigit;\n        for (var i = 0, ii = bytes.length; i < ii; i++) {\n            var ch = bytes[i];\n            var digit = void 0;\n            if (ch >= 0x30 && ch <= 0x39) {\n                // '0'-'9'\n                digit = ch & 0x0f;\n            }\n            else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {\n                // 'A'-'Z', 'a'-'z'\n                digit = (ch & 0x0f) + 9;\n            }\n            else if (ch === 0x3e) {\n                // '>'\n                this.eof = true;\n                break;\n            }\n            else {\n                // probably whitespace\n                continue; // ignoring\n            }\n            if (firstDigit < 0) {\n                firstDigit = digit;\n            }\n            else {\n                buffer[bufferLength++] = (firstDigit << 4) | digit;\n                firstDigit = -1;\n            }\n        }\n        if (firstDigit >= 0 && this.eof) {\n            // incomplete byte\n            buffer[bufferLength++] = firstDigit << 4;\n            firstDigit = -1;\n        }\n        this.firstDigit = firstDigit;\n        this.bufferLength = bufferLength;\n    };\n    return AsciiHexStream;\n}(DecodeStream));\nexport default AsciiHexStream;\n//# sourceMappingURL=AsciiHexStream.js.map","/*\n * Copyright 1996-2003 Glyph & Cog, LLC\n *\n * The flate stream implementation contained in this file is a JavaScript port\n * of XPDF's implementation, made available under the Apache 2.0 open source\n * license.\n */\nimport { __extends } from \"tslib\";\n/*\n * Copyright 2012 Mozilla Foundation\n *\n * The FlateStream class contained in this file is a TypeScript port of the\n * JavaScript FlateStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\n/* tslint:disable  no-conditional-assignment */\nimport DecodeStream from \"./DecodeStream\";\n// prettier-ignore\nvar codeLenCodeMap = new Int32Array([\n    16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15\n]);\n// prettier-ignore\nvar lengthDecode = new Int32Array([\n    0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,\n    0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,\n    0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,\n    0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102\n]);\n// prettier-ignore\nvar distDecode = new Int32Array([\n    0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,\n    0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,\n    0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,\n    0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001\n]);\n// prettier-ignore\nvar fixedLitCodeTab = [new Int32Array([\n        0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,\n        0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,\n        0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,\n        0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,\n        0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,\n        0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,\n        0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,\n        0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,\n        0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,\n        0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,\n        0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,\n        0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,\n        0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,\n        0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,\n        0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,\n        0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,\n        0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,\n        0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,\n        0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,\n        0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,\n        0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,\n        0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,\n        0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,\n        0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,\n        0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,\n        0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,\n        0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,\n        0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,\n        0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,\n        0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,\n        0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,\n        0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,\n        0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,\n        0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,\n        0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,\n        0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,\n        0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,\n        0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,\n        0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,\n        0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,\n        0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,\n        0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,\n        0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,\n        0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,\n        0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,\n        0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,\n        0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,\n        0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,\n        0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,\n        0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,\n        0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,\n        0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,\n        0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,\n        0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,\n        0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,\n        0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,\n        0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,\n        0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,\n        0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,\n        0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,\n        0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,\n        0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,\n        0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,\n        0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff\n    ]), 9];\n// prettier-ignore\nvar fixedDistCodeTab = [new Int32Array([\n        0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,\n        0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,\n        0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,\n        0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000\n    ]), 5];\nvar FlateStream = /** @class */ (function (_super) {\n    __extends(FlateStream, _super);\n    function FlateStream(stream, maybeLength) {\n        var _this = _super.call(this, maybeLength) || this;\n        _this.stream = stream;\n        var cmf = stream.getByte();\n        var flg = stream.getByte();\n        if (cmf === -1 || flg === -1) {\n            throw new Error(\"Invalid header in flate stream: \" + cmf + \", \" + flg);\n        }\n        if ((cmf & 0x0f) !== 0x08) {\n            throw new Error(\"Unknown compression method in flate stream: \" + cmf + \", \" + flg);\n        }\n        if (((cmf << 8) + flg) % 31 !== 0) {\n            throw new Error(\"Bad FCHECK in flate stream: \" + cmf + \", \" + flg);\n        }\n        if (flg & 0x20) {\n            throw new Error(\"FDICT bit set in flate stream: \" + cmf + \", \" + flg);\n        }\n        _this.codeSize = 0;\n        _this.codeBuf = 0;\n        return _this;\n    }\n    FlateStream.prototype.readBlock = function () {\n        var buffer;\n        var len;\n        var str = this.stream;\n        // read block header\n        var hdr = this.getBits(3);\n        if (hdr & 1) {\n            this.eof = true;\n        }\n        hdr >>= 1;\n        if (hdr === 0) {\n            // uncompressed block\n            var b = void 0;\n            if ((b = str.getByte()) === -1) {\n                throw new Error('Bad block header in flate stream');\n            }\n            var blockLen = b;\n            if ((b = str.getByte()) === -1) {\n                throw new Error('Bad block header in flate stream');\n            }\n            blockLen |= b << 8;\n            if ((b = str.getByte()) === -1) {\n                throw new Error('Bad block header in flate stream');\n            }\n            var check = b;\n            if ((b = str.getByte()) === -1) {\n                throw new Error('Bad block header in flate stream');\n            }\n            check |= b << 8;\n            if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\n                // Ignoring error for bad \"empty\" block (see issue 1277)\n                throw new Error('Bad uncompressed block length in flate stream');\n            }\n            this.codeBuf = 0;\n            this.codeSize = 0;\n            var bufferLength = this.bufferLength;\n            buffer = this.ensureBuffer(bufferLength + blockLen);\n            var end = bufferLength + blockLen;\n            this.bufferLength = end;\n            if (blockLen === 0) {\n                if (str.peekByte() === -1) {\n                    this.eof = true;\n                }\n            }\n            else {\n                for (var n = bufferLength; n < end; ++n) {\n                    if ((b = str.getByte()) === -1) {\n                        this.eof = true;\n                        break;\n                    }\n                    buffer[n] = b;\n                }\n            }\n            return;\n        }\n        var litCodeTable;\n        var distCodeTable;\n        if (hdr === 1) {\n            // compressed block, fixed codes\n            litCodeTable = fixedLitCodeTab;\n            distCodeTable = fixedDistCodeTab;\n        }\n        else if (hdr === 2) {\n            // compressed block, dynamic codes\n            var numLitCodes = this.getBits(5) + 257;\n            var numDistCodes = this.getBits(5) + 1;\n            var numCodeLenCodes = this.getBits(4) + 4;\n            // build the code lengths code table\n            var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\n            var i = void 0;\n            for (i = 0; i < numCodeLenCodes; ++i) {\n                codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\n            }\n            var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\n            // build the literal and distance code tables\n            len = 0;\n            i = 0;\n            var codes = numLitCodes + numDistCodes;\n            var codeLengths = new Uint8Array(codes);\n            var bitsLength = void 0;\n            var bitsOffset = void 0;\n            var what = void 0;\n            while (i < codes) {\n                var code = this.getCode(codeLenCodeTab);\n                if (code === 16) {\n                    bitsLength = 2;\n                    bitsOffset = 3;\n                    what = len;\n                }\n                else if (code === 17) {\n                    bitsLength = 3;\n                    bitsOffset = 3;\n                    what = len = 0;\n                }\n                else if (code === 18) {\n                    bitsLength = 7;\n                    bitsOffset = 11;\n                    what = len = 0;\n                }\n                else {\n                    codeLengths[i++] = len = code;\n                    continue;\n                }\n                var repeatLength = this.getBits(bitsLength) + bitsOffset;\n                while (repeatLength-- > 0) {\n                    codeLengths[i++] = what;\n                }\n            }\n            litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));\n            distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));\n        }\n        else {\n            throw new Error('Unknown block type in flate stream');\n        }\n        buffer = this.buffer;\n        var limit = buffer ? buffer.length : 0;\n        var pos = this.bufferLength;\n        while (true) {\n            var code1 = this.getCode(litCodeTable);\n            if (code1 < 256) {\n                if (pos + 1 >= limit) {\n                    buffer = this.ensureBuffer(pos + 1);\n                    limit = buffer.length;\n                }\n                buffer[pos++] = code1;\n                continue;\n            }\n            if (code1 === 256) {\n                this.bufferLength = pos;\n                return;\n            }\n            code1 -= 257;\n            code1 = lengthDecode[code1];\n            var code2 = code1 >> 16;\n            if (code2 > 0) {\n                code2 = this.getBits(code2);\n            }\n            len = (code1 & 0xffff) + code2;\n            code1 = this.getCode(distCodeTable);\n            code1 = distDecode[code1];\n            code2 = code1 >> 16;\n            if (code2 > 0) {\n                code2 = this.getBits(code2);\n            }\n            var dist = (code1 & 0xffff) + code2;\n            if (pos + len >= limit) {\n                buffer = this.ensureBuffer(pos + len);\n                limit = buffer.length;\n            }\n            for (var k = 0; k < len; ++k, ++pos) {\n                buffer[pos] = buffer[pos - dist];\n            }\n        }\n    };\n    FlateStream.prototype.getBits = function (bits) {\n        var str = this.stream;\n        var codeSize = this.codeSize;\n        var codeBuf = this.codeBuf;\n        var b;\n        while (codeSize < bits) {\n            if ((b = str.getByte()) === -1) {\n                throw new Error('Bad encoding in flate stream');\n            }\n            codeBuf |= b << codeSize;\n            codeSize += 8;\n        }\n        b = codeBuf & ((1 << bits) - 1);\n        this.codeBuf = codeBuf >> bits;\n        this.codeSize = codeSize -= bits;\n        return b;\n    };\n    FlateStream.prototype.getCode = function (table) {\n        var str = this.stream;\n        var codes = table[0];\n        var maxLen = table[1];\n        var codeSize = this.codeSize;\n        var codeBuf = this.codeBuf;\n        var b;\n        while (codeSize < maxLen) {\n            if ((b = str.getByte()) === -1) {\n                // premature end of stream. code might however still be valid.\n                // codeSize < codeLen check below guards against incomplete codeVal.\n                break;\n            }\n            codeBuf |= b << codeSize;\n            codeSize += 8;\n        }\n        var code = codes[codeBuf & ((1 << maxLen) - 1)];\n        if (typeof codes === 'number') {\n            console.log('FLATE:', code);\n        }\n        var codeLen = code >> 16;\n        var codeVal = code & 0xffff;\n        if (codeLen < 1 || codeSize < codeLen) {\n            throw new Error('Bad encoding in flate stream');\n        }\n        this.codeBuf = codeBuf >> codeLen;\n        this.codeSize = codeSize - codeLen;\n        return codeVal;\n    };\n    FlateStream.prototype.generateHuffmanTable = function (lengths) {\n        var n = lengths.length;\n        // find max code length\n        var maxLen = 0;\n        var i;\n        for (i = 0; i < n; ++i) {\n            if (lengths[i] > maxLen) {\n                maxLen = lengths[i];\n            }\n        }\n        // build the table\n        var size = 1 << maxLen;\n        var codes = new Int32Array(size);\n        for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {\n            for (var val = 0; val < n; ++val) {\n                if (lengths[val] === len) {\n                    // bit-reverse the code\n                    var code2 = 0;\n                    var t = code;\n                    for (i = 0; i < len; ++i) {\n                        code2 = (code2 << 1) | (t & 1);\n                        t >>= 1;\n                    }\n                    // fill the table entries\n                    for (i = code2; i < size; i += skip) {\n                        codes[i] = (len << 16) | val;\n                    }\n                    ++code;\n                }\n            }\n        }\n        return [codes, maxLen];\n    };\n    return FlateStream;\n}(DecodeStream));\nexport default FlateStream;\n//# sourceMappingURL=FlateStream.js.map","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The LZWStream class contained in this file is a TypeScript port of the\n * JavaScript LZWStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\nimport { __extends } from \"tslib\";\nimport DecodeStream from \"./DecodeStream\";\nvar LZWStream = /** @class */ (function (_super) {\n    __extends(LZWStream, _super);\n    function LZWStream(stream, maybeLength, earlyChange) {\n        var _this = _super.call(this, maybeLength) || this;\n        _this.stream = stream;\n        _this.cachedData = 0;\n        _this.bitsCached = 0;\n        var maxLzwDictionarySize = 4096;\n        var lzwState = {\n            earlyChange: earlyChange,\n            codeLength: 9,\n            nextCode: 258,\n            dictionaryValues: new Uint8Array(maxLzwDictionarySize),\n            dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\n            dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\n            currentSequence: new Uint8Array(maxLzwDictionarySize),\n            currentSequenceLength: 0,\n        };\n        for (var i = 0; i < 256; ++i) {\n            lzwState.dictionaryValues[i] = i;\n            lzwState.dictionaryLengths[i] = 1;\n        }\n        _this.lzwState = lzwState;\n        return _this;\n    }\n    LZWStream.prototype.readBlock = function () {\n        var blockSize = 512;\n        var estimatedDecodedSize = blockSize * 2;\n        var decodedSizeDelta = blockSize;\n        var i;\n        var j;\n        var q;\n        var lzwState = this.lzwState;\n        if (!lzwState) {\n            return; // eof was found\n        }\n        var earlyChange = lzwState.earlyChange;\n        var nextCode = lzwState.nextCode;\n        var dictionaryValues = lzwState.dictionaryValues;\n        var dictionaryLengths = lzwState.dictionaryLengths;\n        var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\n        var codeLength = lzwState.codeLength;\n        var prevCode = lzwState.prevCode;\n        var currentSequence = lzwState.currentSequence;\n        var currentSequenceLength = lzwState.currentSequenceLength;\n        var decodedLength = 0;\n        var currentBufferLength = this.bufferLength;\n        var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n        for (i = 0; i < blockSize; i++) {\n            var code = this.readBits(codeLength);\n            var hasPrev = currentSequenceLength > 0;\n            if (!code || code < 256) {\n                currentSequence[0] = code;\n                currentSequenceLength = 1;\n            }\n            else if (code >= 258) {\n                if (code < nextCode) {\n                    currentSequenceLength = dictionaryLengths[code];\n                    for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\n                        currentSequence[j] = dictionaryValues[q];\n                        q = dictionaryPrevCodes[q];\n                    }\n                }\n                else {\n                    currentSequence[currentSequenceLength++] = currentSequence[0];\n                }\n            }\n            else if (code === 256) {\n                codeLength = 9;\n                nextCode = 258;\n                currentSequenceLength = 0;\n                continue;\n            }\n            else {\n                this.eof = true;\n                delete this.lzwState;\n                break;\n            }\n            if (hasPrev) {\n                dictionaryPrevCodes[nextCode] = prevCode;\n                dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;\n                dictionaryValues[nextCode] = currentSequence[0];\n                nextCode++;\n                codeLength =\n                    (nextCode + earlyChange) & (nextCode + earlyChange - 1)\n                        ? codeLength\n                        : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;\n            }\n            prevCode = code;\n            decodedLength += currentSequenceLength;\n            if (estimatedDecodedSize < decodedLength) {\n                do {\n                    estimatedDecodedSize += decodedSizeDelta;\n                } while (estimatedDecodedSize < decodedLength);\n                buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\n            }\n            for (j = 0; j < currentSequenceLength; j++) {\n                buffer[currentBufferLength++] = currentSequence[j];\n            }\n        }\n        lzwState.nextCode = nextCode;\n        lzwState.codeLength = codeLength;\n        lzwState.prevCode = prevCode;\n        lzwState.currentSequenceLength = currentSequenceLength;\n        this.bufferLength = currentBufferLength;\n    };\n    LZWStream.prototype.readBits = function (n) {\n        var bitsCached = this.bitsCached;\n        var cachedData = this.cachedData;\n        while (bitsCached < n) {\n            var c = this.stream.getByte();\n            if (c === -1) {\n                this.eof = true;\n                return null;\n            }\n            cachedData = (cachedData << 8) | c;\n            bitsCached += 8;\n        }\n        this.bitsCached = bitsCached -= n;\n        this.cachedData = cachedData;\n        return (cachedData >>> bitsCached) & ((1 << n) - 1);\n    };\n    return LZWStream;\n}(DecodeStream));\nexport default LZWStream;\n//# sourceMappingURL=LZWStream.js.map","/*\n * Copyright 2012 Mozilla Foundation\n *\n * The RunLengthStream class contained in this file is a TypeScript port of the\n * JavaScript RunLengthStream class in Mozilla's pdf.js project, made available\n * under the Apache 2.0 open source license.\n */\nimport { __extends } from \"tslib\";\nimport DecodeStream from \"./DecodeStream\";\nvar RunLengthStream = /** @class */ (function (_super) {\n    __extends(RunLengthStream, _super);\n    function RunLengthStream(stream, maybeLength) {\n        var _this = _super.call(this, maybeLength) || this;\n        _this.stream = stream;\n        return _this;\n    }\n    RunLengthStream.prototype.readBlock = function () {\n        // The repeatHeader has following format. The first byte defines type of run\n        // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes\n        // (in addition to the second byte from the header), n = 129 through 255 -\n        // duplicate the second byte from the header (257 - n) times, n = 128 - end.\n        var repeatHeader = this.stream.getBytes(2);\n        if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\n            this.eof = true;\n            return;\n        }\n        var buffer;\n        var bufferLength = this.bufferLength;\n        var n = repeatHeader[0];\n        if (n < 128) {\n            // copy n bytes\n            buffer = this.ensureBuffer(bufferLength + n + 1);\n            buffer[bufferLength++] = repeatHeader[1];\n            if (n > 0) {\n                var source = this.stream.getBytes(n);\n                buffer.set(source, bufferLength);\n                bufferLength += n;\n            }\n        }\n        else {\n            n = 257 - n;\n            var b = repeatHeader[1];\n            buffer = this.ensureBuffer(bufferLength + n + 1);\n            for (var i = 0; i < n; i++) {\n                buffer[bufferLength++] = b;\n            }\n        }\n        this.bufferLength = bufferLength;\n    };\n    return RunLengthStream;\n}(DecodeStream));\nexport default RunLengthStream;\n//# sourceMappingURL=RunLengthStream.js.map","import { UnexpectedObjectTypeError, UnsupportedEncodingError, } from \"../errors\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport Ascii85Stream from \"./Ascii85Stream\";\nimport AsciiHexStream from \"./AsciiHexStream\";\nimport FlateStream from \"./FlateStream\";\nimport LZWStream from \"./LZWStream\";\nimport RunLengthStream from \"./RunLengthStream\";\nimport Stream from \"./Stream\";\nvar decodeStream = function (stream, encoding, params) {\n    if (encoding === PDFName.of('FlateDecode')) {\n        return new FlateStream(stream);\n    }\n    if (encoding === PDFName.of('LZWDecode')) {\n        var earlyChange = 1;\n        if (params instanceof PDFDict) {\n            var EarlyChange = params.lookup(PDFName.of('EarlyChange'));\n            if (EarlyChange instanceof PDFNumber) {\n                earlyChange = EarlyChange.asNumber();\n            }\n        }\n        return new LZWStream(stream, undefined, earlyChange);\n    }\n    if (encoding === PDFName.of('ASCII85Decode')) {\n        return new Ascii85Stream(stream);\n    }\n    if (encoding === PDFName.of('ASCIIHexDecode')) {\n        return new AsciiHexStream(stream);\n    }\n    if (encoding === PDFName.of('RunLengthDecode')) {\n        return new RunLengthStream(stream);\n    }\n    throw new UnsupportedEncodingError(encoding.asString());\n};\nexport var decodePDFRawStream = function (_a) {\n    var dict = _a.dict, contents = _a.contents;\n    var stream = new Stream(contents);\n    var Filter = dict.lookup(PDFName.of('Filter'));\n    var DecodeParms = dict.lookup(PDFName.of('DecodeParms'));\n    if (Filter instanceof PDFName) {\n        stream = decodeStream(stream, Filter, DecodeParms);\n    }\n    else if (Filter instanceof PDFArray) {\n        for (var idx = 0, len = Filter.size(); idx < len; idx++) {\n            stream = decodeStream(stream, Filter.lookup(idx, PDFName), DecodeParms && DecodeParms.lookupMaybe(idx, PDFDict));\n        }\n    }\n    else if (!!Filter) {\n        throw new UnexpectedObjectTypeError([PDFName, PDFArray], Filter);\n    }\n    return stream;\n};\n//# sourceMappingURL=decode.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { MissingPageContentsEmbeddingError, UnrecognizedStreamTypeError, } from \"../errors\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFRawStream from \"../objects/PDFRawStream\";\nimport PDFStream from \"../objects/PDFStream\";\nimport { decodePDFRawStream } from \"../streams/decode\";\nimport PDFContentStream from \"../structures/PDFContentStream\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { mergeIntoTypedArray } from \"../../utils\";\nvar fullPageBoundingBox = function (page) {\n    var mediaBox = page.MediaBox();\n    var width = mediaBox.lookup(2, PDFNumber).asNumber() -\n        mediaBox.lookup(0, PDFNumber).asNumber();\n    var height = mediaBox.lookup(3, PDFNumber).asNumber() -\n        mediaBox.lookup(1, PDFNumber).asNumber();\n    return { left: 0, bottom: 0, right: width, top: height };\n};\n// Returns the identity matrix, modified to position the content of the given\n// bounding box at (0, 0).\nvar boundingBoxAdjustedMatrix = function (bb) { return [1, 0, 0, 1, -bb.left, -bb.bottom]; };\nvar PDFPageEmbedder = /** @class */ (function () {\n    function PDFPageEmbedder(page, boundingBox, transformationMatrix) {\n        this.page = page;\n        var bb = boundingBox !== null && boundingBox !== void 0 ? boundingBox : fullPageBoundingBox(page);\n        this.width = bb.right - bb.left;\n        this.height = bb.top - bb.bottom;\n        this.boundingBox = bb;\n        this.transformationMatrix = transformationMatrix !== null && transformationMatrix !== void 0 ? transformationMatrix : boundingBoxAdjustedMatrix(bb);\n    }\n    PDFPageEmbedder.for = function (page, boundingBox, transformationMatrix) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new PDFPageEmbedder(page, boundingBox, transformationMatrix)];\n            });\n        });\n    };\n    PDFPageEmbedder.prototype.embedIntoContext = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, Contents, Resources, decodedContents, _b, left, bottom, right, top, xObject;\n            return __generator(this, function (_c) {\n                _a = this.page.normalizedEntries(), Contents = _a.Contents, Resources = _a.Resources;\n                if (!Contents)\n                    throw new MissingPageContentsEmbeddingError();\n                decodedContents = this.decodeContents(Contents);\n                _b = this.boundingBox, left = _b.left, bottom = _b.bottom, right = _b.right, top = _b.top;\n                xObject = context.flateStream(decodedContents, {\n                    Type: 'XObject',\n                    Subtype: 'Form',\n                    FormType: 1,\n                    BBox: [left, bottom, right, top],\n                    Matrix: this.transformationMatrix,\n                    Resources: Resources,\n                });\n                if (ref) {\n                    context.assign(ref, xObject);\n                    return [2 /*return*/, ref];\n                }\n                else {\n                    return [2 /*return*/, context.register(xObject)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    // `contents` is an array of streams which are merged to include them in the XObject.\n    // This methods extracts each stream and joins them with a newline character.\n    PDFPageEmbedder.prototype.decodeContents = function (contents) {\n        var newline = Uint8Array.of(CharCodes.Newline);\n        var decodedContents = [];\n        for (var idx = 0, len = contents.size(); idx < len; idx++) {\n            var stream = contents.lookup(idx, PDFStream);\n            var content = void 0;\n            if (stream instanceof PDFRawStream) {\n                content = decodePDFRawStream(stream).decode();\n            }\n            else if (stream instanceof PDFContentStream) {\n                content = stream.getUnencodedContents();\n            }\n            else {\n                throw new UnrecognizedStreamTypeError(stream);\n            }\n            decodedContents.push(content, newline);\n        }\n        return mergeIntoTypedArray.apply(void 0, decodedContents);\n    };\n    return PDFPageEmbedder;\n}());\nexport default PDFPageEmbedder;\n//# sourceMappingURL=PDFPageEmbedder.js.map","var flag = function (bitIndex) { return 1 << bitIndex; };\n/** From PDF spec table 221 */\nexport var AcroFieldFlags;\n(function (AcroFieldFlags) {\n    /**\n     * If set, the user may not change the value of the field. Any associated\n     * widget annotations will not interact with the user; that is, they will not\n     * respond to mouse clicks or change their appearance in response to mouse\n     * motions. This flag is useful for fields whose values are computed or\n     * imported from a database.\n     */\n    AcroFieldFlags[AcroFieldFlags[\"ReadOnly\"] = flag(1 - 1)] = \"ReadOnly\";\n    /**\n     * If set, the field shall have a value at the time it is exported by a\n     * submit-form action (see 12.7.5.2, \"Submit-Form Action\").\n     */\n    AcroFieldFlags[AcroFieldFlags[\"Required\"] = flag(2 - 1)] = \"Required\";\n    /**\n     * If set, the field shall not be exported by a submit-form action\n     * (see 12.7.5.2, \"Submit-Form Action\").\n     */\n    AcroFieldFlags[AcroFieldFlags[\"NoExport\"] = flag(3 - 1)] = \"NoExport\";\n})(AcroFieldFlags || (AcroFieldFlags = {}));\n/** From PDF spec table 226 */\nexport var AcroButtonFlags;\n(function (AcroButtonFlags) {\n    /**\n     * (Radio buttons only) If set, exactly one radio button shall be selected at\n     * all times; selecting the currently selected button has no effect. If clear,\n     * clicking the selected button deselects it, leaving no button selected.\n     */\n    AcroButtonFlags[AcroButtonFlags[\"NoToggleToOff\"] = flag(15 - 1)] = \"NoToggleToOff\";\n    /**\n     * If set, the field is a set of radio buttons; if clear, the field is a check\n     * box. This flag may be set only if the Pushbutton flag is clear.\n     */\n    AcroButtonFlags[AcroButtonFlags[\"Radio\"] = flag(16 - 1)] = \"Radio\";\n    /**\n     * If set, the field is a pushbutton that does not retain a permanent value.\n     */\n    AcroButtonFlags[AcroButtonFlags[\"PushButton\"] = flag(17 - 1)] = \"PushButton\";\n    /**\n     * If set, a group of radio buttons within a radio button field that use the\n     * same value for the on state will turn on and off in unison; that is if one\n     * is checked, they are all checked. If clear, the buttons are mutually\n     * exclusive (the same behavior as HTML radio buttons).\n     */\n    AcroButtonFlags[AcroButtonFlags[\"RadiosInUnison\"] = flag(26 - 1)] = \"RadiosInUnison\";\n})(AcroButtonFlags || (AcroButtonFlags = {}));\n/** From PDF spec table 228 */\nexport var AcroTextFlags;\n(function (AcroTextFlags) {\n    /**\n     * If set, the field may contain multiple lines of text; if clear, the field's\n     * text shall be restricted to a single line.\n     */\n    AcroTextFlags[AcroTextFlags[\"Multiline\"] = flag(13 - 1)] = \"Multiline\";\n    /**\n     * If set, the field is intended for entering a secure password that should\n     * not be echoed visibly to the screen. Characters typed from the keyboard\n     * shall instead be echoed in some unreadable form, such as asterisks or\n     * bullet characters.\n     * > NOTE   To protect password confidentiality, readers should never store\n     * >        the value of the text field in the PDF file if this flag is set.\n     */\n    AcroTextFlags[AcroTextFlags[\"Password\"] = flag(14 - 1)] = \"Password\";\n    /**\n     * If set, the text entered in the field represents the pathname of a file\n     * whose contents shall be submitted as the value of the field.\n     */\n    AcroTextFlags[AcroTextFlags[\"FileSelect\"] = flag(21 - 1)] = \"FileSelect\";\n    /**\n     * If set, text entered in the field shall not be spell-checked.\n     */\n    AcroTextFlags[AcroTextFlags[\"DoNotSpellCheck\"] = flag(23 - 1)] = \"DoNotSpellCheck\";\n    /**\n     * If set, the field shall not scroll (horizontally for single-line fields,\n     * vertically for multiple-line fields) to accommodate more text than fits\n     * within its annotation rectangle. Once the field is full, no further text\n     * shall be accepted for interactive form filling; for non-interactive form\n     * filling, the filler should take care not to add more character than will\n     * visibly fit in the defined area.\n     */\n    AcroTextFlags[AcroTextFlags[\"DoNotScroll\"] = flag(24 - 1)] = \"DoNotScroll\";\n    /**\n     * May be set only if the MaxLen entry is present in the text field dictionary\n     * (see Table 229) and if the Multiline, Password, and FileSelect flags are\n     * clear. If set, the field shall be automatically divided into as many\n     * equally spaced positions, or combs, as the value of MaxLen, and the text\n     * is laid out into those combs.\n     */\n    AcroTextFlags[AcroTextFlags[\"Comb\"] = flag(25 - 1)] = \"Comb\";\n    /**\n     * If set, the value of this field shall be a rich text string\n     * (see 12.7.3.4, \"Rich Text Strings\"). If the field has a value, the RV\n     * entry of the field dictionary (Table 222) shall specify the rich text\n     * string.\n     */\n    AcroTextFlags[AcroTextFlags[\"RichText\"] = flag(26 - 1)] = \"RichText\";\n})(AcroTextFlags || (AcroTextFlags = {}));\n/** From PDF spec table 230 */\nexport var AcroChoiceFlags;\n(function (AcroChoiceFlags) {\n    /**\n     * If set, the field is a combo box; if clear, the field is a list box.\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"Combo\"] = flag(18 - 1)] = \"Combo\";\n    /**\n     * If set, the combo box shall include an editable text box as well as a\n     * drop-down list; if clear, it shall include only a drop-down list. This\n     * flag shall be used only if the Combo flag is set.\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"Edit\"] = flag(19 - 1)] = \"Edit\";\n    /**\n     * If set, the field's option items shall be sorted alphabetically. This flag\n     * is intended for use by writers, not by readers. Conforming readers shall\n     * display the options in the order in which they occur in the Opt array\n     * (see Table 231).\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"Sort\"] = flag(20 - 1)] = \"Sort\";\n    /**\n     * If set, more than one of the field's option items may be selected\n     * simultaneously; if clear, at most one item shall be selected.\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"MultiSelect\"] = flag(22 - 1)] = \"MultiSelect\";\n    /**\n     * If set, text entered in the field shall not be spell-checked. This flag\n     * shall not be used unless the Combo and Edit flags are both set.\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"DoNotSpellCheck\"] = flag(23 - 1)] = \"DoNotSpellCheck\";\n    /**\n     * If set, the new value shall be committed as soon as a selection is made\n     * (commonly with the pointing device). In this case, supplying a value for\n     * a field involves three actions: selecting the field for fill-in,\n     * selecting a choice for the fill-in value, and leaving that field, which\n     * finalizes or \"commits\" the data choice and triggers any actions associated\n     * with the entry or changing of this data. If this flag is on, then\n     * processing does not wait for leaving the field action to occur, but\n     * immediately proceeds to the third step.\n     *\n     * This option enables applications to perform an action once a selection is\n     * made, without requiring the user to exit the field. If clear, the new\n     * value is not committed until the user exits the field.\n     */\n    AcroChoiceFlags[AcroChoiceFlags[\"CommitOnSelChange\"] = flag(27 - 1)] = \"CommitOnSelChange\";\n})(AcroChoiceFlags || (AcroChoiceFlags = {}));\n//# sourceMappingURL=flags.js.map","import PDFDict from \"../objects/PDFDict\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFRef from \"../objects/PDFRef\";\nimport { findLastMatch } from \"../../utils\";\nimport { MissingDAEntryError, MissingTfOperatorError } from \"../errors\";\n// Examples:\n//   `/Helv 12 Tf` -> ['Helv', '12']\n//   `/HeBo 8.00 Tf` -> ['HeBo', '8.00']\n//   `/HeBo Tf` -> ['HeBo', undefined]\nvar tfRegex = /\\/([^\\0\\t\\n\\f\\r\\ ]+)[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]+Tf/;\nvar PDFAcroField = /** @class */ (function () {\n    function PDFAcroField(dict, ref) {\n        this.dict = dict;\n        this.ref = ref;\n    }\n    PDFAcroField.prototype.T = function () {\n        return this.dict.lookupMaybe(PDFName.of('T'), PDFString, PDFHexString);\n    };\n    PDFAcroField.prototype.Ff = function () {\n        var numberOrRef = this.getInheritableAttribute(PDFName.of('Ff'));\n        return this.dict.context.lookupMaybe(numberOrRef, PDFNumber);\n    };\n    PDFAcroField.prototype.V = function () {\n        var valueOrRef = this.getInheritableAttribute(PDFName.of('V'));\n        return this.dict.context.lookup(valueOrRef);\n    };\n    PDFAcroField.prototype.Kids = function () {\n        return this.dict.lookupMaybe(PDFName.of('Kids'), PDFArray);\n    };\n    // Parent(): PDFDict | undefined {\n    //   return this.dict.lookupMaybe(PDFName.of('Parent'), PDFDict);\n    // }\n    PDFAcroField.prototype.DA = function () {\n        var da = this.dict.lookup(PDFName.of('DA'));\n        if (da instanceof PDFString || da instanceof PDFHexString)\n            return da;\n        return undefined;\n    };\n    PDFAcroField.prototype.setKids = function (kids) {\n        this.dict.set(PDFName.of('Kids'), this.dict.context.obj(kids));\n    };\n    PDFAcroField.prototype.getParent = function () {\n        // const parent = this.Parent();\n        // if (!parent) return undefined;\n        // return new PDFAcroField(parent);\n        var parentRef = this.dict.get(PDFName.of('Parent'));\n        if (parentRef instanceof PDFRef) {\n            var parent_1 = this.dict.lookup(PDFName.of('Parent'), PDFDict);\n            return new PDFAcroField(parent_1, parentRef);\n        }\n        return undefined;\n    };\n    PDFAcroField.prototype.setParent = function (parent) {\n        if (!parent)\n            this.dict.delete(PDFName.of('Parent'));\n        else\n            this.dict.set(PDFName.of('Parent'), parent);\n    };\n    PDFAcroField.prototype.getFullyQualifiedName = function () {\n        var parent = this.getParent();\n        if (!parent)\n            return this.getPartialName();\n        return parent.getFullyQualifiedName() + \".\" + this.getPartialName();\n    };\n    PDFAcroField.prototype.getPartialName = function () {\n        var _a;\n        return (_a = this.T()) === null || _a === void 0 ? void 0 : _a.decodeText();\n    };\n    PDFAcroField.prototype.setPartialName = function (partialName) {\n        if (!partialName)\n            this.dict.delete(PDFName.of('T'));\n        else\n            this.dict.set(PDFName.of('T'), PDFHexString.fromText(partialName));\n    };\n    PDFAcroField.prototype.setDefaultAppearance = function (appearance) {\n        this.dict.set(PDFName.of('DA'), PDFString.of(appearance));\n    };\n    PDFAcroField.prototype.getDefaultAppearance = function () {\n        var DA = this.DA();\n        if (DA instanceof PDFHexString) {\n            return DA.decodeText();\n        }\n        return DA === null || DA === void 0 ? void 0 : DA.asString();\n    };\n    PDFAcroField.prototype.setFontSize = function (fontSize) {\n        var _a;\n        var name = (_a = this.getFullyQualifiedName()) !== null && _a !== void 0 ? _a : '';\n        var da = this.getDefaultAppearance();\n        if (!da)\n            throw new MissingDAEntryError(name);\n        var daMatch = findLastMatch(da, tfRegex);\n        if (!daMatch.match)\n            throw new MissingTfOperatorError(name);\n        var daStart = da.slice(0, daMatch.pos - daMatch.match[0].length);\n        var daEnd = daMatch.pos <= da.length ? da.slice(daMatch.pos) : '';\n        var fontName = daMatch.match[1];\n        var modifiedDa = daStart + \" /\" + fontName + \" \" + fontSize + \" Tf \" + daEnd;\n        this.setDefaultAppearance(modifiedDa);\n    };\n    PDFAcroField.prototype.getFlags = function () {\n        var _a, _b;\n        return (_b = (_a = this.Ff()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 0;\n    };\n    PDFAcroField.prototype.setFlags = function (flags) {\n        this.dict.set(PDFName.of('Ff'), PDFNumber.of(flags));\n    };\n    PDFAcroField.prototype.hasFlag = function (flag) {\n        var flags = this.getFlags();\n        return (flags & flag) !== 0;\n    };\n    PDFAcroField.prototype.setFlag = function (flag) {\n        var flags = this.getFlags();\n        this.setFlags(flags | flag);\n    };\n    PDFAcroField.prototype.clearFlag = function (flag) {\n        var flags = this.getFlags();\n        this.setFlags(flags & ~flag);\n    };\n    PDFAcroField.prototype.setFlagTo = function (flag, enable) {\n        if (enable)\n            this.setFlag(flag);\n        else\n            this.clearFlag(flag);\n    };\n    PDFAcroField.prototype.getInheritableAttribute = function (name) {\n        var attribute;\n        this.ascend(function (node) {\n            if (!attribute)\n                attribute = node.dict.get(name);\n        });\n        return attribute;\n    };\n    PDFAcroField.prototype.ascend = function (visitor) {\n        visitor(this);\n        var parent = this.getParent();\n        if (parent)\n            parent.ascend(visitor);\n    };\n    return PDFAcroField;\n}());\nexport default PDFAcroField;\n//# sourceMappingURL=PDFAcroField.js.map","import PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\n// TODO: Also handle the `/S` and `/D` entries\nvar BorderStyle = /** @class */ (function () {\n    function BorderStyle(dict) {\n        this.dict = dict;\n    }\n    BorderStyle.prototype.W = function () {\n        var W = this.dict.lookup(PDFName.of('W'));\n        if (W instanceof PDFNumber)\n            return W;\n        return undefined;\n    };\n    BorderStyle.prototype.getWidth = function () {\n        var _a, _b;\n        return (_b = (_a = this.W()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 1;\n    };\n    BorderStyle.prototype.setWidth = function (width) {\n        var W = this.dict.context.obj(width);\n        this.dict.set(PDFName.of('W'), W);\n    };\n    BorderStyle.fromDict = function (dict) { return new BorderStyle(dict); };\n    return BorderStyle;\n}());\nexport default BorderStyle;\n//# sourceMappingURL=BorderStyle.js.map","import PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFStream from \"../objects/PDFStream\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFNumber from \"../objects/PDFNumber\";\nvar PDFAnnotation = /** @class */ (function () {\n    function PDFAnnotation(dict) {\n        this.dict = dict;\n    }\n    // This is technically required by the PDF spec\n    PDFAnnotation.prototype.Rect = function () {\n        return this.dict.lookup(PDFName.of('Rect'), PDFArray);\n    };\n    PDFAnnotation.prototype.AP = function () {\n        return this.dict.lookupMaybe(PDFName.of('AP'), PDFDict);\n    };\n    PDFAnnotation.prototype.F = function () {\n        var numberOrRef = this.dict.lookup(PDFName.of('F'));\n        return this.dict.context.lookupMaybe(numberOrRef, PDFNumber);\n    };\n    PDFAnnotation.prototype.getRectangle = function () {\n        var _a;\n        var Rect = this.Rect();\n        return (_a = Rect === null || Rect === void 0 ? void 0 : Rect.asRectangle()) !== null && _a !== void 0 ? _a : { x: 0, y: 0, width: 0, height: 0 };\n    };\n    PDFAnnotation.prototype.setRectangle = function (rect) {\n        var x = rect.x, y = rect.y, width = rect.width, height = rect.height;\n        var Rect = this.dict.context.obj([x, y, x + width, y + height]);\n        this.dict.set(PDFName.of('Rect'), Rect);\n    };\n    PDFAnnotation.prototype.getAppearanceState = function () {\n        var AS = this.dict.lookup(PDFName.of('AS'));\n        if (AS instanceof PDFName)\n            return AS;\n        return undefined;\n    };\n    PDFAnnotation.prototype.setAppearanceState = function (state) {\n        this.dict.set(PDFName.of('AS'), state);\n    };\n    PDFAnnotation.prototype.setAppearances = function (appearances) {\n        this.dict.set(PDFName.of('AP'), appearances);\n    };\n    PDFAnnotation.prototype.ensureAP = function () {\n        var AP = this.AP();\n        if (!AP) {\n            AP = this.dict.context.obj({});\n            this.dict.set(PDFName.of('AP'), AP);\n        }\n        return AP;\n    };\n    PDFAnnotation.prototype.getNormalAppearance = function () {\n        var AP = this.ensureAP();\n        var N = AP.get(PDFName.of('N'));\n        if (N instanceof PDFRef || N instanceof PDFDict)\n            return N;\n        throw new Error(\"Unexpected N type: \" + (N === null || N === void 0 ? void 0 : N.constructor.name));\n    };\n    /** @param appearance A PDFDict or PDFStream (direct or ref) */\n    PDFAnnotation.prototype.setNormalAppearance = function (appearance) {\n        var AP = this.ensureAP();\n        AP.set(PDFName.of('N'), appearance);\n    };\n    /** @param appearance A PDFDict or PDFStream (direct or ref) */\n    PDFAnnotation.prototype.setRolloverAppearance = function (appearance) {\n        var AP = this.ensureAP();\n        AP.set(PDFName.of('R'), appearance);\n    };\n    /** @param appearance A PDFDict or PDFStream (direct or ref) */\n    PDFAnnotation.prototype.setDownAppearance = function (appearance) {\n        var AP = this.ensureAP();\n        AP.set(PDFName.of('D'), appearance);\n    };\n    PDFAnnotation.prototype.removeRolloverAppearance = function () {\n        var AP = this.AP();\n        AP === null || AP === void 0 ? void 0 : AP.delete(PDFName.of('R'));\n    };\n    PDFAnnotation.prototype.removeDownAppearance = function () {\n        var AP = this.AP();\n        AP === null || AP === void 0 ? void 0 : AP.delete(PDFName.of('D'));\n    };\n    PDFAnnotation.prototype.getAppearances = function () {\n        var AP = this.AP();\n        if (!AP)\n            return undefined;\n        var N = AP.lookup(PDFName.of('N'), PDFDict, PDFStream);\n        var R = AP.lookupMaybe(PDFName.of('R'), PDFDict, PDFStream);\n        var D = AP.lookupMaybe(PDFName.of('D'), PDFDict, PDFStream);\n        return { normal: N, rollover: R, down: D };\n    };\n    PDFAnnotation.prototype.getFlags = function () {\n        var _a, _b;\n        return (_b = (_a = this.F()) === null || _a === void 0 ? void 0 : _a.asNumber()) !== null && _b !== void 0 ? _b : 0;\n    };\n    PDFAnnotation.prototype.setFlags = function (flags) {\n        this.dict.set(PDFName.of('F'), PDFNumber.of(flags));\n    };\n    PDFAnnotation.prototype.hasFlag = function (flag) {\n        var flags = this.getFlags();\n        return (flags & flag) !== 0;\n    };\n    PDFAnnotation.prototype.setFlag = function (flag) {\n        var flags = this.getFlags();\n        this.setFlags(flags | flag);\n    };\n    PDFAnnotation.prototype.clearFlag = function (flag) {\n        var flags = this.getFlags();\n        this.setFlags(flags & ~flag);\n    };\n    PDFAnnotation.prototype.setFlagTo = function (flag, enable) {\n        if (enable)\n            this.setFlag(flag);\n        else\n            this.clearFlag(flag);\n    };\n    PDFAnnotation.fromDict = function (dict) { return new PDFAnnotation(dict); };\n    return PDFAnnotation;\n}());\nexport default PDFAnnotation;\n//# sourceMappingURL=PDFAnnotation.js.map","import PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFString from \"../objects/PDFString\";\nvar AppearanceCharacteristics = /** @class */ (function () {\n    function AppearanceCharacteristics(dict) {\n        this.dict = dict;\n    }\n    AppearanceCharacteristics.prototype.R = function () {\n        var R = this.dict.lookup(PDFName.of('R'));\n        if (R instanceof PDFNumber)\n            return R;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.BC = function () {\n        var BC = this.dict.lookup(PDFName.of('BC'));\n        if (BC instanceof PDFArray)\n            return BC;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.BG = function () {\n        var BG = this.dict.lookup(PDFName.of('BG'));\n        if (BG instanceof PDFArray)\n            return BG;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.CA = function () {\n        var CA = this.dict.lookup(PDFName.of('CA'));\n        if (CA instanceof PDFHexString || CA instanceof PDFString)\n            return CA;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.RC = function () {\n        var RC = this.dict.lookup(PDFName.of('RC'));\n        if (RC instanceof PDFHexString || RC instanceof PDFString)\n            return RC;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.AC = function () {\n        var AC = this.dict.lookup(PDFName.of('AC'));\n        if (AC instanceof PDFHexString || AC instanceof PDFString)\n            return AC;\n        return undefined;\n    };\n    AppearanceCharacteristics.prototype.getRotation = function () {\n        var _a;\n        return (_a = this.R()) === null || _a === void 0 ? void 0 : _a.asNumber();\n    };\n    AppearanceCharacteristics.prototype.getBorderColor = function () {\n        var BC = this.BC();\n        if (!BC)\n            return undefined;\n        var components = [];\n        for (var idx = 0, len = BC === null || BC === void 0 ? void 0 : BC.size(); idx < len; idx++) {\n            var component = BC.get(idx);\n            if (component instanceof PDFNumber)\n                components.push(component.asNumber());\n        }\n        return components;\n    };\n    AppearanceCharacteristics.prototype.getBackgroundColor = function () {\n        var BG = this.BG();\n        if (!BG)\n            return undefined;\n        var components = [];\n        for (var idx = 0, len = BG === null || BG === void 0 ? void 0 : BG.size(); idx < len; idx++) {\n            var component = BG.get(idx);\n            if (component instanceof PDFNumber)\n                components.push(component.asNumber());\n        }\n        return components;\n    };\n    AppearanceCharacteristics.prototype.getCaptions = function () {\n        var CA = this.CA();\n        var RC = this.RC();\n        var AC = this.AC();\n        return {\n            normal: CA === null || CA === void 0 ? void 0 : CA.decodeText(),\n            rollover: RC === null || RC === void 0 ? void 0 : RC.decodeText(),\n            down: AC === null || AC === void 0 ? void 0 : AC.decodeText(),\n        };\n    };\n    AppearanceCharacteristics.prototype.setRotation = function (rotation) {\n        var R = this.dict.context.obj(rotation);\n        this.dict.set(PDFName.of('R'), R);\n    };\n    AppearanceCharacteristics.prototype.setBorderColor = function (color) {\n        var BC = this.dict.context.obj(color);\n        this.dict.set(PDFName.of('BC'), BC);\n    };\n    AppearanceCharacteristics.prototype.setBackgroundColor = function (color) {\n        var BG = this.dict.context.obj(color);\n        this.dict.set(PDFName.of('BG'), BG);\n    };\n    AppearanceCharacteristics.prototype.setCaptions = function (captions) {\n        var CA = PDFHexString.fromText(captions.normal);\n        this.dict.set(PDFName.of('CA'), CA);\n        if (captions.rollover) {\n            var RC = PDFHexString.fromText(captions.rollover);\n            this.dict.set(PDFName.of('RC'), RC);\n        }\n        else {\n            this.dict.delete(PDFName.of('RC'));\n        }\n        if (captions.down) {\n            var AC = PDFHexString.fromText(captions.down);\n            this.dict.set(PDFName.of('AC'), AC);\n        }\n        else {\n            this.dict.delete(PDFName.of('AC'));\n        }\n    };\n    AppearanceCharacteristics.fromDict = function (dict) {\n        return new AppearanceCharacteristics(dict);\n    };\n    return AppearanceCharacteristics;\n}());\nexport default AppearanceCharacteristics;\n//# sourceMappingURL=AppearanceCharacteristics.js.map","import { __extends } from \"tslib\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport BorderStyle from \"./BorderStyle\";\nimport PDFAnnotation from \"./PDFAnnotation\";\nimport AppearanceCharacteristics from \"./AppearanceCharacteristics\";\nvar PDFWidgetAnnotation = /** @class */ (function (_super) {\n    __extends(PDFWidgetAnnotation, _super);\n    function PDFWidgetAnnotation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFWidgetAnnotation.prototype.MK = function () {\n        var MK = this.dict.lookup(PDFName.of('MK'));\n        if (MK instanceof PDFDict)\n            return MK;\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.BS = function () {\n        var BS = this.dict.lookup(PDFName.of('BS'));\n        if (BS instanceof PDFDict)\n            return BS;\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.DA = function () {\n        var da = this.dict.lookup(PDFName.of('DA'));\n        if (da instanceof PDFString || da instanceof PDFHexString)\n            return da;\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.P = function () {\n        var P = this.dict.get(PDFName.of('P'));\n        if (P instanceof PDFRef)\n            return P;\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.setP = function (page) {\n        this.dict.set(PDFName.of('P'), page);\n    };\n    PDFWidgetAnnotation.prototype.setDefaultAppearance = function (appearance) {\n        this.dict.set(PDFName.of('DA'), PDFString.of(appearance));\n    };\n    PDFWidgetAnnotation.prototype.getDefaultAppearance = function () {\n        var DA = this.DA();\n        if (DA instanceof PDFHexString) {\n            return DA.decodeText();\n        }\n        return DA === null || DA === void 0 ? void 0 : DA.asString();\n    };\n    PDFWidgetAnnotation.prototype.getAppearanceCharacteristics = function () {\n        var MK = this.MK();\n        if (MK)\n            return AppearanceCharacteristics.fromDict(MK);\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.getOrCreateAppearanceCharacteristics = function () {\n        var MK = this.MK();\n        if (MK)\n            return AppearanceCharacteristics.fromDict(MK);\n        var ac = AppearanceCharacteristics.fromDict(this.dict.context.obj({}));\n        this.dict.set(PDFName.of('MK'), ac.dict);\n        return ac;\n    };\n    PDFWidgetAnnotation.prototype.getBorderStyle = function () {\n        var BS = this.BS();\n        if (BS)\n            return BorderStyle.fromDict(BS);\n        return undefined;\n    };\n    PDFWidgetAnnotation.prototype.getOrCreateBorderStyle = function () {\n        var BS = this.BS();\n        if (BS)\n            return BorderStyle.fromDict(BS);\n        var bs = BorderStyle.fromDict(this.dict.context.obj({}));\n        this.dict.set(PDFName.of('BS'), bs.dict);\n        return bs;\n    };\n    PDFWidgetAnnotation.prototype.getOnValue = function () {\n        var _a;\n        var normal = (_a = this.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal;\n        if (normal instanceof PDFDict) {\n            var keys = normal.keys();\n            for (var idx = 0, len = keys.length; idx < len; idx++) {\n                var key = keys[idx];\n                if (key !== PDFName.of('Off'))\n                    return key;\n            }\n        }\n        return undefined;\n    };\n    PDFWidgetAnnotation.fromDict = function (dict) {\n        return new PDFWidgetAnnotation(dict);\n    };\n    PDFWidgetAnnotation.create = function (context, parent) {\n        var dict = context.obj({\n            Type: 'Annot',\n            Subtype: 'Widget',\n            Rect: [0, 0, 0, 0],\n            Parent: parent,\n        });\n        return new PDFWidgetAnnotation(dict);\n    };\n    return PDFWidgetAnnotation;\n}(PDFAnnotation));\nexport default PDFWidgetAnnotation;\n//# sourceMappingURL=PDFWidgetAnnotation.js.map","import { __extends } from \"tslib\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroField from \"./PDFAcroField\";\nimport PDFWidgetAnnotation from \"../annotation/PDFWidgetAnnotation\";\nimport { IndexOutOfBoundsError } from \"../errors\";\nvar PDFAcroTerminal = /** @class */ (function (_super) {\n    __extends(PDFAcroTerminal, _super);\n    function PDFAcroTerminal() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroTerminal.prototype.FT = function () {\n        var nameOrRef = this.getInheritableAttribute(PDFName.of('FT'));\n        return this.dict.context.lookup(nameOrRef, PDFName);\n    };\n    PDFAcroTerminal.prototype.getWidgets = function () {\n        var kidDicts = this.Kids();\n        // This field is itself a widget\n        if (!kidDicts)\n            return [PDFWidgetAnnotation.fromDict(this.dict)];\n        // This field's kids are its widgets\n        var widgets = new Array(kidDicts.size());\n        for (var idx = 0, len = kidDicts.size(); idx < len; idx++) {\n            var dict = kidDicts.lookup(idx, PDFDict);\n            widgets[idx] = PDFWidgetAnnotation.fromDict(dict);\n        }\n        return widgets;\n    };\n    PDFAcroTerminal.prototype.addWidget = function (ref) {\n        var Kids = this.normalizedEntries().Kids;\n        Kids.push(ref);\n    };\n    PDFAcroTerminal.prototype.removeWidget = function (idx) {\n        var kidDicts = this.Kids();\n        if (!kidDicts) {\n            // This field is itself a widget\n            if (idx !== 0)\n                throw new IndexOutOfBoundsError(idx, 0, 0);\n            this.setKids([]);\n        }\n        else {\n            // This field's kids are its widgets\n            if (idx < 0 || idx > kidDicts.size()) {\n                throw new IndexOutOfBoundsError(idx, 0, kidDicts.size());\n            }\n            kidDicts.remove(idx);\n        }\n    };\n    PDFAcroTerminal.prototype.normalizedEntries = function () {\n        var Kids = this.Kids();\n        // If this field is itself a widget (because it was only rendered once in\n        // the document, so the field and widget properties were merged) then we\n        // add itself to the `Kids` array. The alternative would be to try\n        // splitting apart the widget properties and creating a separate object\n        // for them.\n        if (!Kids) {\n            Kids = this.dict.context.obj([this.ref]);\n            this.dict.set(PDFName.of('Kids'), Kids);\n        }\n        return { Kids: Kids };\n    };\n    PDFAcroTerminal.fromDict = function (dict, ref) {\n        return new PDFAcroTerminal(dict, ref);\n    };\n    return PDFAcroTerminal;\n}(PDFAcroField));\nexport default PDFAcroTerminal;\n//# sourceMappingURL=PDFAcroTerminal.js.map","import { __extends } from \"tslib\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroTerminal from \"./PDFAcroTerminal\";\nimport { IndexOutOfBoundsError } from \"../errors\";\nvar PDFAcroButton = /** @class */ (function (_super) {\n    __extends(PDFAcroButton, _super);\n    function PDFAcroButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroButton.prototype.Opt = function () {\n        return this.dict.lookupMaybe(PDFName.of('Opt'), PDFString, PDFHexString, PDFArray);\n    };\n    PDFAcroButton.prototype.setOpt = function (opt) {\n        this.dict.set(PDFName.of('Opt'), this.dict.context.obj(opt));\n    };\n    PDFAcroButton.prototype.getExportValues = function () {\n        var opt = this.Opt();\n        if (!opt)\n            return undefined;\n        if (opt instanceof PDFString || opt instanceof PDFHexString) {\n            return [opt];\n        }\n        var values = [];\n        for (var idx = 0, len = opt.size(); idx < len; idx++) {\n            var value = opt.lookup(idx);\n            if (value instanceof PDFString || value instanceof PDFHexString) {\n                values.push(value);\n            }\n        }\n        return values;\n    };\n    PDFAcroButton.prototype.removeExportValue = function (idx) {\n        var opt = this.Opt();\n        if (!opt)\n            return;\n        if (opt instanceof PDFString || opt instanceof PDFHexString) {\n            if (idx !== 0)\n                throw new IndexOutOfBoundsError(idx, 0, 0);\n            this.setOpt([]);\n        }\n        else {\n            if (idx < 0 || idx > opt.size()) {\n                throw new IndexOutOfBoundsError(idx, 0, opt.size());\n            }\n            opt.remove(idx);\n        }\n    };\n    // Enforce use use of /Opt even if it isn't strictly necessary\n    PDFAcroButton.prototype.normalizeExportValues = function () {\n        var _a, _b, _c, _d;\n        var exportValues = (_a = this.getExportValues()) !== null && _a !== void 0 ? _a : [];\n        var Opt = [];\n        var widgets = this.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var exportVal = (_b = exportValues[idx]) !== null && _b !== void 0 ? _b : PDFHexString.fromText((_d = (_c = widget.getOnValue()) === null || _c === void 0 ? void 0 : _c.decodeText()) !== null && _d !== void 0 ? _d : '');\n            Opt.push(exportVal);\n        }\n        this.setOpt(Opt);\n    };\n    /**\n     * Reuses existing opt if one exists with the same value (assuming\n     * `useExistingIdx` is `true`). Returns index of existing (or new) opt.\n     */\n    PDFAcroButton.prototype.addOpt = function (opt, useExistingOptIdx) {\n        var _a;\n        this.normalizeExportValues();\n        var optText = opt.decodeText();\n        var existingIdx;\n        if (useExistingOptIdx) {\n            var exportValues = (_a = this.getExportValues()) !== null && _a !== void 0 ? _a : [];\n            for (var idx = 0, len = exportValues.length; idx < len; idx++) {\n                var exportVal = exportValues[idx];\n                if (exportVal.decodeText() === optText)\n                    existingIdx = idx;\n            }\n        }\n        var Opt = this.Opt();\n        Opt.push(opt);\n        return existingIdx !== null && existingIdx !== void 0 ? existingIdx : Opt.size() - 1;\n    };\n    PDFAcroButton.prototype.addWidgetWithOpt = function (widget, opt, useExistingOptIdx) {\n        var optIdx = this.addOpt(opt, useExistingOptIdx);\n        var apStateValue = PDFName.of(String(optIdx));\n        this.addWidget(widget);\n        return apStateValue;\n    };\n    return PDFAcroButton;\n}(PDFAcroTerminal));\nexport default PDFAcroButton;\n//# sourceMappingURL=PDFAcroButton.js.map","import { __extends } from \"tslib\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroButton from \"./PDFAcroButton\";\nimport { InvalidAcroFieldValueError } from \"../errors\";\nvar PDFAcroCheckBox = /** @class */ (function (_super) {\n    __extends(PDFAcroCheckBox, _super);\n    function PDFAcroCheckBox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroCheckBox.prototype.setValue = function (value) {\n        var _a;\n        var onValue = (_a = this.getOnValue()) !== null && _a !== void 0 ? _a : PDFName.of('Yes');\n        if (value !== onValue && value !== PDFName.of('Off')) {\n            throw new InvalidAcroFieldValueError();\n        }\n        this.dict.set(PDFName.of('V'), value);\n        var widgets = this.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var state = widget.getOnValue() === value ? value : PDFName.of('Off');\n            widget.setAppearanceState(state);\n        }\n    };\n    PDFAcroCheckBox.prototype.getValue = function () {\n        var v = this.V();\n        if (v instanceof PDFName)\n            return v;\n        return PDFName.of('Off');\n    };\n    PDFAcroCheckBox.prototype.getOnValue = function () {\n        var widget = this.getWidgets()[0];\n        return widget === null || widget === void 0 ? void 0 : widget.getOnValue();\n    };\n    PDFAcroCheckBox.fromDict = function (dict, ref) {\n        return new PDFAcroCheckBox(dict, ref);\n    };\n    PDFAcroCheckBox.create = function (context) {\n        var dict = context.obj({\n            FT: 'Btn',\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroCheckBox(dict, ref);\n    };\n    return PDFAcroCheckBox;\n}(PDFAcroButton));\nexport default PDFAcroCheckBox;\n//# sourceMappingURL=PDFAcroCheckBox.js.map","import { __extends } from \"tslib\";\nimport PDFAcroTerminal from \"./PDFAcroTerminal\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFName from \"../objects/PDFName\";\nimport { AcroChoiceFlags } from \"./flags\";\nimport { InvalidAcroFieldValueError, MultiSelectValueError, } from \"../errors\";\nvar PDFAcroChoice = /** @class */ (function (_super) {\n    __extends(PDFAcroChoice, _super);\n    function PDFAcroChoice() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroChoice.prototype.setValues = function (values) {\n        if (this.hasFlag(AcroChoiceFlags.Combo) &&\n            !this.hasFlag(AcroChoiceFlags.Edit) &&\n            !this.valuesAreValid(values)) {\n            throw new InvalidAcroFieldValueError();\n        }\n        if (values.length === 0) {\n            this.dict.delete(PDFName.of('V'));\n        }\n        if (values.length === 1) {\n            this.dict.set(PDFName.of('V'), values[0]);\n        }\n        if (values.length > 1) {\n            if (!this.hasFlag(AcroChoiceFlags.MultiSelect)) {\n                throw new MultiSelectValueError();\n            }\n            this.dict.set(PDFName.of('V'), this.dict.context.obj(values));\n        }\n        this.updateSelectedIndices(values);\n    };\n    PDFAcroChoice.prototype.valuesAreValid = function (values) {\n        var options = this.getOptions();\n        var _loop_1 = function (idx, len) {\n            var val = values[idx].decodeText();\n            if (!options.find(function (o) { return val === (o.display || o.value).decodeText(); })) {\n                return { value: false };\n            }\n        };\n        for (var idx = 0, len = values.length; idx < len; idx++) {\n            var state_1 = _loop_1(idx, len);\n            if (typeof state_1 === \"object\")\n                return state_1.value;\n        }\n        return true;\n    };\n    PDFAcroChoice.prototype.updateSelectedIndices = function (values) {\n        if (values.length > 1) {\n            var indices = new Array(values.length);\n            var options = this.getOptions();\n            var _loop_2 = function (idx, len) {\n                var val = values[idx].decodeText();\n                indices[idx] = options.findIndex(function (o) { return val === (o.display || o.value).decodeText(); });\n            };\n            for (var idx = 0, len = values.length; idx < len; idx++) {\n                _loop_2(idx, len);\n            }\n            this.dict.set(PDFName.of('I'), this.dict.context.obj(indices.sort()));\n        }\n        else {\n            this.dict.delete(PDFName.of('I'));\n        }\n    };\n    PDFAcroChoice.prototype.getValues = function () {\n        var v = this.V();\n        if (v instanceof PDFString || v instanceof PDFHexString)\n            return [v];\n        if (v instanceof PDFArray) {\n            var values = [];\n            for (var idx = 0, len = v.size(); idx < len; idx++) {\n                var value = v.lookup(idx);\n                if (value instanceof PDFString || value instanceof PDFHexString) {\n                    values.push(value);\n                }\n            }\n            return values;\n        }\n        return [];\n    };\n    PDFAcroChoice.prototype.Opt = function () {\n        return this.dict.lookupMaybe(PDFName.of('Opt'), PDFString, PDFHexString, PDFArray);\n    };\n    PDFAcroChoice.prototype.setOptions = function (options) {\n        var newOpt = new Array(options.length);\n        for (var idx = 0, len = options.length; idx < len; idx++) {\n            var _a = options[idx], value = _a.value, display = _a.display;\n            newOpt[idx] = this.dict.context.obj([value, display || value]);\n        }\n        this.dict.set(PDFName.of('Opt'), this.dict.context.obj(newOpt));\n    };\n    PDFAcroChoice.prototype.getOptions = function () {\n        var Opt = this.Opt();\n        // Not supposed to happen - Opt _should_ always be `PDFArray | undefined`\n        if (Opt instanceof PDFString || Opt instanceof PDFHexString) {\n            return [{ value: Opt, display: Opt }];\n        }\n        if (Opt instanceof PDFArray) {\n            var res = [];\n            for (var idx = 0, len = Opt.size(); idx < len; idx++) {\n                var item = Opt.lookup(idx);\n                // If `item` is a string, use that as both the export and text value\n                if (item instanceof PDFString || item instanceof PDFHexString) {\n                    res.push({ value: item, display: item });\n                }\n                // If `item` is an array of one, treat it the same as just a string,\n                // if it's an array of two then `item[0]` is the export value and\n                // `item[1]` is the text value\n                if (item instanceof PDFArray) {\n                    if (item.size() > 0) {\n                        var first = item.lookup(0, PDFString, PDFHexString);\n                        var second = item.lookupMaybe(1, PDFString, PDFHexString);\n                        res.push({ value: first, display: second || first });\n                    }\n                }\n            }\n            return res;\n        }\n        return [];\n    };\n    return PDFAcroChoice;\n}(PDFAcroTerminal));\nexport default PDFAcroChoice;\n//# sourceMappingURL=PDFAcroChoice.js.map","import { __extends } from \"tslib\";\nimport PDFAcroChoice from \"./PDFAcroChoice\";\nimport { AcroChoiceFlags } from \"./flags\";\nvar PDFAcroComboBox = /** @class */ (function (_super) {\n    __extends(PDFAcroComboBox, _super);\n    function PDFAcroComboBox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroComboBox.fromDict = function (dict, ref) {\n        return new PDFAcroComboBox(dict, ref);\n    };\n    PDFAcroComboBox.create = function (context) {\n        var dict = context.obj({\n            FT: 'Ch',\n            Ff: AcroChoiceFlags.Combo,\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroComboBox(dict, ref);\n    };\n    return PDFAcroComboBox;\n}(PDFAcroChoice));\nexport default PDFAcroComboBox;\n//# sourceMappingURL=PDFAcroComboBox.js.map","import { __extends } from \"tslib\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroField from \"./PDFAcroField\";\nvar PDFAcroNonTerminal = /** @class */ (function (_super) {\n    __extends(PDFAcroNonTerminal, _super);\n    function PDFAcroNonTerminal() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroNonTerminal.prototype.addField = function (field) {\n        var Kids = this.normalizedEntries().Kids;\n        Kids === null || Kids === void 0 ? void 0 : Kids.push(field);\n    };\n    PDFAcroNonTerminal.prototype.normalizedEntries = function () {\n        var Kids = this.Kids();\n        if (!Kids) {\n            Kids = this.dict.context.obj([]);\n            this.dict.set(PDFName.of('Kids'), Kids);\n        }\n        return { Kids: Kids };\n    };\n    PDFAcroNonTerminal.fromDict = function (dict, ref) {\n        return new PDFAcroNonTerminal(dict, ref);\n    };\n    PDFAcroNonTerminal.create = function (context) {\n        var dict = context.obj({});\n        var ref = context.register(dict);\n        return new PDFAcroNonTerminal(dict, ref);\n    };\n    return PDFAcroNonTerminal;\n}(PDFAcroField));\nexport default PDFAcroNonTerminal;\n//# sourceMappingURL=PDFAcroNonTerminal.js.map","import { __extends } from \"tslib\";\nimport PDFAcroTerminal from \"./PDFAcroTerminal\";\nvar PDFAcroSignature = /** @class */ (function (_super) {\n    __extends(PDFAcroSignature, _super);\n    function PDFAcroSignature() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroSignature.fromDict = function (dict, ref) {\n        return new PDFAcroSignature(dict, ref);\n    };\n    return PDFAcroSignature;\n}(PDFAcroTerminal));\nexport default PDFAcroSignature;\n//# sourceMappingURL=PDFAcroSignature.js.map","import { __extends } from \"tslib\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroTerminal from \"./PDFAcroTerminal\";\nvar PDFAcroText = /** @class */ (function (_super) {\n    __extends(PDFAcroText, _super);\n    function PDFAcroText() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroText.prototype.MaxLen = function () {\n        var maxLen = this.dict.lookup(PDFName.of('MaxLen'));\n        if (maxLen instanceof PDFNumber)\n            return maxLen;\n        return undefined;\n    };\n    PDFAcroText.prototype.Q = function () {\n        var q = this.dict.lookup(PDFName.of('Q'));\n        if (q instanceof PDFNumber)\n            return q;\n        return undefined;\n    };\n    PDFAcroText.prototype.setMaxLength = function (maxLength) {\n        this.dict.set(PDFName.of('MaxLen'), PDFNumber.of(maxLength));\n    };\n    PDFAcroText.prototype.removeMaxLength = function () {\n        this.dict.delete(PDFName.of('MaxLen'));\n    };\n    PDFAcroText.prototype.getMaxLength = function () {\n        var _a;\n        return (_a = this.MaxLen()) === null || _a === void 0 ? void 0 : _a.asNumber();\n    };\n    PDFAcroText.prototype.setQuadding = function (quadding) {\n        this.dict.set(PDFName.of('Q'), PDFNumber.of(quadding));\n    };\n    PDFAcroText.prototype.getQuadding = function () {\n        var _a;\n        return (_a = this.Q()) === null || _a === void 0 ? void 0 : _a.asNumber();\n    };\n    PDFAcroText.prototype.setValue = function (value) {\n        this.dict.set(PDFName.of('V'), value);\n        // const widgets = this.getWidgets();\n        // for (let idx = 0, len = widgets.length; idx < len; idx++) {\n        //   const widget = widgets[idx];\n        //   const state = widget.getOnValue() === value ? value : PDFName.of('Off');\n        //   widget.setAppearanceState(state);\n        // }\n    };\n    PDFAcroText.prototype.removeValue = function () {\n        this.dict.delete(PDFName.of('V'));\n    };\n    PDFAcroText.prototype.getValue = function () {\n        var v = this.V();\n        if (v instanceof PDFString || v instanceof PDFHexString)\n            return v;\n        return undefined;\n    };\n    PDFAcroText.fromDict = function (dict, ref) { return new PDFAcroText(dict, ref); };\n    PDFAcroText.create = function (context) {\n        var dict = context.obj({\n            FT: 'Tx',\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroText(dict, ref);\n    };\n    return PDFAcroText;\n}(PDFAcroTerminal));\nexport default PDFAcroText;\n//# sourceMappingURL=PDFAcroText.js.map","import { __extends } from \"tslib\";\nimport PDFAcroButton from \"./PDFAcroButton\";\nimport { AcroButtonFlags } from \"./flags\";\nvar PDFAcroPushButton = /** @class */ (function (_super) {\n    __extends(PDFAcroPushButton, _super);\n    function PDFAcroPushButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroPushButton.fromDict = function (dict, ref) {\n        return new PDFAcroPushButton(dict, ref);\n    };\n    PDFAcroPushButton.create = function (context) {\n        var dict = context.obj({\n            FT: 'Btn',\n            Ff: AcroButtonFlags.PushButton,\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroPushButton(dict, ref);\n    };\n    return PDFAcroPushButton;\n}(PDFAcroButton));\nexport default PDFAcroPushButton;\n//# sourceMappingURL=PDFAcroPushButton.js.map","import { __extends } from \"tslib\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroButton from \"./PDFAcroButton\";\nimport { AcroButtonFlags } from \"./flags\";\nimport { InvalidAcroFieldValueError } from \"../errors\";\nvar PDFAcroRadioButton = /** @class */ (function (_super) {\n    __extends(PDFAcroRadioButton, _super);\n    function PDFAcroRadioButton() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroRadioButton.prototype.setValue = function (value) {\n        var onValues = this.getOnValues();\n        if (!onValues.includes(value) && value !== PDFName.of('Off')) {\n            throw new InvalidAcroFieldValueError();\n        }\n        this.dict.set(PDFName.of('V'), value);\n        var widgets = this.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var state = widget.getOnValue() === value ? value : PDFName.of('Off');\n            widget.setAppearanceState(state);\n        }\n    };\n    PDFAcroRadioButton.prototype.getValue = function () {\n        var v = this.V();\n        if (v instanceof PDFName)\n            return v;\n        return PDFName.of('Off');\n    };\n    PDFAcroRadioButton.prototype.getOnValues = function () {\n        var widgets = this.getWidgets();\n        var onValues = [];\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var onValue = widgets[idx].getOnValue();\n            if (onValue)\n                onValues.push(onValue);\n        }\n        return onValues;\n    };\n    PDFAcroRadioButton.fromDict = function (dict, ref) {\n        return new PDFAcroRadioButton(dict, ref);\n    };\n    PDFAcroRadioButton.create = function (context) {\n        var dict = context.obj({\n            FT: 'Btn',\n            Ff: AcroButtonFlags.Radio,\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroRadioButton(dict, ref);\n    };\n    return PDFAcroRadioButton;\n}(PDFAcroButton));\nexport default PDFAcroRadioButton;\n//# sourceMappingURL=PDFAcroRadioButton.js.map","import { __extends } from \"tslib\";\nimport PDFAcroChoice from \"./PDFAcroChoice\";\nvar PDFAcroListBox = /** @class */ (function (_super) {\n    __extends(PDFAcroListBox, _super);\n    function PDFAcroListBox() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFAcroListBox.fromDict = function (dict, ref) {\n        return new PDFAcroListBox(dict, ref);\n    };\n    PDFAcroListBox.create = function (context) {\n        var dict = context.obj({\n            FT: 'Ch',\n            Kids: [],\n        });\n        var ref = context.register(dict);\n        return new PDFAcroListBox(dict, ref);\n    };\n    return PDFAcroListBox;\n}(PDFAcroChoice));\nexport default PDFAcroListBox;\n//# sourceMappingURL=PDFAcroListBox.js.map","import PDFNumber from \"../objects/PDFNumber\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFAcroTerminal from \"./PDFAcroTerminal\";\nimport PDFAcroNonTerminal from \"./PDFAcroNonTerminal\";\nimport PDFAcroSignature from \"./PDFAcroSignature\";\nimport PDFAcroText from \"./PDFAcroText\";\nimport PDFAcroPushButton from \"./PDFAcroPushButton\";\nimport PDFAcroRadioButton from \"./PDFAcroRadioButton\";\nimport PDFAcroCheckBox from \"./PDFAcroCheckBox\";\nimport PDFAcroComboBox from \"./PDFAcroComboBox\";\nimport PDFAcroListBox from \"./PDFAcroListBox\";\nimport { AcroButtonFlags, AcroChoiceFlags } from \"./flags\";\nexport var createPDFAcroFields = function (kidDicts) {\n    if (!kidDicts)\n        return [];\n    var kids = [];\n    for (var idx = 0, len = kidDicts.size(); idx < len; idx++) {\n        var ref = kidDicts.get(idx);\n        var dict = kidDicts.lookup(idx);\n        // if (dict instanceof PDFDict) kids.push(PDFAcroField.fromDict(dict));\n        if (ref instanceof PDFRef && dict instanceof PDFDict) {\n            kids.push([createPDFAcroField(dict, ref), ref]);\n        }\n    }\n    return kids;\n};\nexport var createPDFAcroField = function (dict, ref) {\n    var isNonTerminal = isNonTerminalAcroField(dict);\n    if (isNonTerminal)\n        return PDFAcroNonTerminal.fromDict(dict, ref);\n    return createPDFAcroTerminal(dict, ref);\n};\n// TODO: Maybe just check if the dict is *not* a widget? That might be better.\n// According to the PDF spec:\n//\n//   > A field's children in the hierarchy may also include widget annotations\n//   > that define its appearance on the page. A field that has children that\n//   > are fields is called a non-terminal field. A field that does not have\n//   > children that are fields is called a terminal field.\n//\n// The spec is not entirely clear about how to determine whether a given\n// dictionary represents an acrofield or a widget annotation. So we will assume\n// that a dictionary is an acrofield if it is a member of the `/Kids` array\n// and it contains a `/T` entry (widgets do not have `/T` entries). This isn't\n// a bullet proof solution, because the `/T` entry is technically defined as\n// optional for acrofields by the PDF spec. But in practice all acrofields seem\n// to have a `/T` entry defined.\nvar isNonTerminalAcroField = function (dict) {\n    var kids = dict.lookup(PDFName.of('Kids'));\n    if (kids instanceof PDFArray) {\n        for (var idx = 0, len = kids.size(); idx < len; idx++) {\n            var kid = kids.lookup(idx);\n            var kidIsField = kid instanceof PDFDict && kid.has(PDFName.of('T'));\n            if (kidIsField)\n                return true;\n        }\n    }\n    return false;\n};\nvar createPDFAcroTerminal = function (dict, ref) {\n    var ftNameOrRef = getInheritableAttribute(dict, PDFName.of('FT'));\n    var type = dict.context.lookup(ftNameOrRef, PDFName);\n    if (type === PDFName.of('Btn'))\n        return createPDFAcroButton(dict, ref);\n    if (type === PDFName.of('Ch'))\n        return createPDFAcroChoice(dict, ref);\n    if (type === PDFName.of('Tx'))\n        return PDFAcroText.fromDict(dict, ref);\n    if (type === PDFName.of('Sig'))\n        return PDFAcroSignature.fromDict(dict, ref);\n    // We should never reach this line. But there are a lot of weird PDFs out\n    // there. So, just to be safe, we'll try to handle things gracefully instead\n    // of throwing an error.\n    return PDFAcroTerminal.fromDict(dict, ref);\n};\nvar createPDFAcroButton = function (dict, ref) {\n    var _a;\n    var ffNumberOrRef = getInheritableAttribute(dict, PDFName.of('Ff'));\n    var ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber);\n    var flags = (_a = ffNumber === null || ffNumber === void 0 ? void 0 : ffNumber.asNumber()) !== null && _a !== void 0 ? _a : 0;\n    if (flagIsSet(flags, AcroButtonFlags.PushButton)) {\n        return PDFAcroPushButton.fromDict(dict, ref);\n    }\n    else if (flagIsSet(flags, AcroButtonFlags.Radio)) {\n        return PDFAcroRadioButton.fromDict(dict, ref);\n    }\n    else {\n        return PDFAcroCheckBox.fromDict(dict, ref);\n    }\n};\nvar createPDFAcroChoice = function (dict, ref) {\n    var _a;\n    var ffNumberOrRef = getInheritableAttribute(dict, PDFName.of('Ff'));\n    var ffNumber = dict.context.lookupMaybe(ffNumberOrRef, PDFNumber);\n    var flags = (_a = ffNumber === null || ffNumber === void 0 ? void 0 : ffNumber.asNumber()) !== null && _a !== void 0 ? _a : 0;\n    if (flagIsSet(flags, AcroChoiceFlags.Combo)) {\n        return PDFAcroComboBox.fromDict(dict, ref);\n    }\n    else {\n        return PDFAcroListBox.fromDict(dict, ref);\n    }\n};\nvar flagIsSet = function (flags, flag) {\n    return (flags & flag) !== 0;\n};\nvar getInheritableAttribute = function (startNode, name) {\n    var attribute;\n    ascend(startNode, function (node) {\n        if (!attribute)\n            attribute = node.get(name);\n    });\n    return attribute;\n};\nvar ascend = function (startNode, visitor) {\n    visitor(startNode);\n    var Parent = startNode.lookupMaybe(PDFName.of('Parent'), PDFDict);\n    if (Parent)\n        ascend(Parent, visitor);\n};\n//# sourceMappingURL=utils.js.map","import PDFDict from \"../objects/PDFDict\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFAcroNonTerminal from \"./PDFAcroNonTerminal\";\nimport { createPDFAcroField, createPDFAcroFields, } from \"./utils\";\nvar PDFAcroForm = /** @class */ (function () {\n    function PDFAcroForm(dict) {\n        this.dict = dict;\n    }\n    PDFAcroForm.prototype.Fields = function () {\n        var fields = this.dict.lookup(PDFName.of('Fields'));\n        if (fields instanceof PDFArray)\n            return fields;\n        return undefined;\n    };\n    PDFAcroForm.prototype.getFields = function () {\n        var Fields = this.normalizedEntries().Fields;\n        var fields = new Array(Fields.size());\n        for (var idx = 0, len = Fields.size(); idx < len; idx++) {\n            var ref = Fields.get(idx);\n            var dict = Fields.lookup(idx, PDFDict);\n            fields[idx] = [createPDFAcroField(dict, ref), ref];\n        }\n        return fields;\n    };\n    PDFAcroForm.prototype.getAllFields = function () {\n        var allFields = [];\n        var pushFields = function (fields) {\n            if (!fields)\n                return;\n            for (var idx = 0, len = fields.length; idx < len; idx++) {\n                var field = fields[idx];\n                allFields.push(field);\n                var fieldModel = field[0];\n                if (fieldModel instanceof PDFAcroNonTerminal) {\n                    pushFields(createPDFAcroFields(fieldModel.Kids()));\n                }\n            }\n        };\n        pushFields(this.getFields());\n        return allFields;\n    };\n    PDFAcroForm.prototype.addField = function (field) {\n        var Fields = this.normalizedEntries().Fields;\n        Fields === null || Fields === void 0 ? void 0 : Fields.push(field);\n    };\n    PDFAcroForm.prototype.removeField = function (field) {\n        var parent = field.getParent();\n        var fields = parent === undefined ? this.normalizedEntries().Fields : parent.Kids();\n        var index = fields === null || fields === void 0 ? void 0 : fields.indexOf(field.ref);\n        if (fields === undefined || index === undefined) {\n            throw new Error(\"Tried to remove inexistent field \" + field.getFullyQualifiedName());\n        }\n        fields.remove(index);\n        if (parent !== undefined && fields.size() === 0) {\n            this.removeField(parent);\n        }\n    };\n    PDFAcroForm.prototype.normalizedEntries = function () {\n        var Fields = this.Fields();\n        if (!Fields) {\n            Fields = this.dict.context.obj([]);\n            this.dict.set(PDFName.of('Fields'), Fields);\n        }\n        return { Fields: Fields };\n    };\n    PDFAcroForm.fromDict = function (dict) { return new PDFAcroForm(dict); };\n    PDFAcroForm.create = function (context) {\n        var dict = context.obj({ Fields: [] });\n        return new PDFAcroForm(dict);\n    };\n    return PDFAcroForm;\n}());\nexport default PDFAcroForm;\n//# sourceMappingURL=PDFAcroForm.js.map","import { __extends } from \"tslib\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport { PDFAcroForm } from \"../acroform\";\nimport ViewerPreferences from '../interactive/ViewerPreferences';\nvar PDFCatalog = /** @class */ (function (_super) {\n    __extends(PDFCatalog, _super);\n    function PDFCatalog() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFCatalog.prototype.Pages = function () {\n        return this.lookup(PDFName.of('Pages'), PDFDict);\n    };\n    PDFCatalog.prototype.AcroForm = function () {\n        return this.lookupMaybe(PDFName.of('AcroForm'), PDFDict);\n    };\n    PDFCatalog.prototype.getAcroForm = function () {\n        var dict = this.AcroForm();\n        if (!dict)\n            return undefined;\n        return PDFAcroForm.fromDict(dict);\n    };\n    PDFCatalog.prototype.getOrCreateAcroForm = function () {\n        var acroForm = this.getAcroForm();\n        if (!acroForm) {\n            acroForm = PDFAcroForm.create(this.context);\n            var acroFormRef = this.context.register(acroForm.dict);\n            this.set(PDFName.of('AcroForm'), acroFormRef);\n        }\n        return acroForm;\n    };\n    PDFCatalog.prototype.ViewerPreferences = function () {\n        return this.lookupMaybe(PDFName.of('ViewerPreferences'), PDFDict);\n    };\n    PDFCatalog.prototype.getViewerPreferences = function () {\n        var dict = this.ViewerPreferences();\n        if (!dict)\n            return undefined;\n        return ViewerPreferences.fromDict(dict);\n    };\n    PDFCatalog.prototype.getOrCreateViewerPreferences = function () {\n        var viewerPrefs = this.getViewerPreferences();\n        if (!viewerPrefs) {\n            viewerPrefs = ViewerPreferences.create(this.context);\n            var viewerPrefsRef = this.context.register(viewerPrefs.dict);\n            this.set(PDFName.of('ViewerPreferences'), viewerPrefsRef);\n        }\n        return viewerPrefs;\n    };\n    /**\n     * Inserts the given ref as a leaf node of this catalog's page tree at the\n     * specified index (zero-based). Also increments the `Count` of each node in\n     * the page tree hierarchy to accomodate the new page.\n     *\n     * Returns the ref of the PDFPageTree node into which `leafRef` was inserted.\n     */\n    PDFCatalog.prototype.insertLeafNode = function (leafRef, index) {\n        var pagesRef = this.get(PDFName.of('Pages'));\n        var maybeParentRef = this.Pages().insertLeafNode(leafRef, index);\n        return maybeParentRef || pagesRef;\n    };\n    PDFCatalog.prototype.removeLeafNode = function (index) {\n        this.Pages().removeLeafNode(index);\n    };\n    PDFCatalog.withContextAndPages = function (context, pages) {\n        var dict = new Map();\n        dict.set(PDFName.of('Type'), PDFName.of('Catalog'));\n        dict.set(PDFName.of('Pages'), pages);\n        return new PDFCatalog(dict, context);\n    };\n    PDFCatalog.fromMapWithContext = function (map, context) {\n        return new PDFCatalog(map, context);\n    };\n    return PDFCatalog;\n}(PDFDict));\nexport default PDFCatalog;\n//# sourceMappingURL=PDFCatalog.js.map","import { __extends } from \"tslib\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFPageLeaf from \"./PDFPageLeaf\";\nimport { InvalidTargetIndexError, CorruptPageTreeError } from \"../errors\";\nvar PDFPageTree = /** @class */ (function (_super) {\n    __extends(PDFPageTree, _super);\n    function PDFPageTree() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PDFPageTree.prototype.Parent = function () {\n        return this.lookup(PDFName.of('Parent'));\n    };\n    PDFPageTree.prototype.Kids = function () {\n        return this.lookup(PDFName.of('Kids'), PDFArray);\n    };\n    PDFPageTree.prototype.Count = function () {\n        return this.lookup(PDFName.of('Count'), PDFNumber);\n    };\n    PDFPageTree.prototype.pushTreeNode = function (treeRef) {\n        var Kids = this.Kids();\n        Kids.push(treeRef);\n    };\n    PDFPageTree.prototype.pushLeafNode = function (leafRef) {\n        var Kids = this.Kids();\n        this.insertLeafKid(Kids.size(), leafRef);\n    };\n    /**\n     * Inserts the given ref as a leaf node of this page tree at the specified\n     * index (zero-based). Also increments the `Count` of each page tree in the\n     * hierarchy to accomodate the new page.\n     *\n     * Returns the ref of the PDFPageTree node into which `leafRef` was inserted,\n     * or `undefined` if it was inserted into the root node (the PDFPageTree upon\n     * which the method was first called).\n     */\n    PDFPageTree.prototype.insertLeafNode = function (leafRef, targetIndex) {\n        var Kids = this.Kids();\n        var Count = this.Count().asNumber();\n        if (targetIndex > Count) {\n            throw new InvalidTargetIndexError(targetIndex, Count);\n        }\n        var leafsRemainingUntilTarget = targetIndex;\n        for (var idx = 0, len = Kids.size(); idx < len; idx++) {\n            if (leafsRemainingUntilTarget === 0) {\n                // Insert page and return\n                this.insertLeafKid(idx, leafRef);\n                return undefined;\n            }\n            var kidRef = Kids.get(idx);\n            var kid = this.context.lookup(kidRef);\n            if (kid instanceof PDFPageTree) {\n                if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n                    // Dig in\n                    return (kid.insertLeafNode(leafRef, leafsRemainingUntilTarget) || kidRef);\n                }\n                else {\n                    // Move on\n                    leafsRemainingUntilTarget -= kid.Count().asNumber();\n                }\n            }\n            if (kid instanceof PDFPageLeaf) {\n                // Move on\n                leafsRemainingUntilTarget -= 1;\n            }\n        }\n        if (leafsRemainingUntilTarget === 0) {\n            // Insert page at the end and return\n            this.insertLeafKid(Kids.size(), leafRef);\n            return undefined;\n        }\n        // Should never get here if `targetIndex` is valid\n        throw new CorruptPageTreeError(targetIndex, 'insertLeafNode');\n    };\n    /**\n     * Removes the leaf node at the specified index (zero-based) from this page\n     * tree. Also decrements the `Count` of each page tree in the hierarchy to\n     * account for the removed page.\n     *\n     * If `prune` is true, then intermediate tree nodes will be removed from the\n     * tree if they contain 0 children after the leaf node is removed.\n     */\n    PDFPageTree.prototype.removeLeafNode = function (targetIndex, prune) {\n        if (prune === void 0) { prune = true; }\n        var Kids = this.Kids();\n        var Count = this.Count().asNumber();\n        if (targetIndex >= Count) {\n            throw new InvalidTargetIndexError(targetIndex, Count);\n        }\n        var leafsRemainingUntilTarget = targetIndex;\n        for (var idx = 0, len = Kids.size(); idx < len; idx++) {\n            var kidRef = Kids.get(idx);\n            var kid = this.context.lookup(kidRef);\n            if (kid instanceof PDFPageTree) {\n                if (kid.Count().asNumber() > leafsRemainingUntilTarget) {\n                    // Dig in\n                    kid.removeLeafNode(leafsRemainingUntilTarget, prune);\n                    if (prune && kid.Kids().size() === 0)\n                        Kids.remove(idx);\n                    return;\n                }\n                else {\n                    // Move on\n                    leafsRemainingUntilTarget -= kid.Count().asNumber();\n                }\n            }\n            if (kid instanceof PDFPageLeaf) {\n                if (leafsRemainingUntilTarget === 0) {\n                    // Remove page and return\n                    this.removeKid(idx);\n                    return;\n                }\n                else {\n                    // Move on\n                    leafsRemainingUntilTarget -= 1;\n                }\n            }\n        }\n        // Should never get here if `targetIndex` is valid\n        throw new CorruptPageTreeError(targetIndex, 'removeLeafNode');\n    };\n    PDFPageTree.prototype.ascend = function (visitor) {\n        visitor(this);\n        var Parent = this.Parent();\n        if (Parent)\n            Parent.ascend(visitor);\n    };\n    /** Performs a Post-Order traversal of this page tree */\n    PDFPageTree.prototype.traverse = function (visitor) {\n        var Kids = this.Kids();\n        for (var idx = 0, len = Kids.size(); idx < len; idx++) {\n            var kidRef = Kids.get(idx);\n            var kid = this.context.lookup(kidRef);\n            if (kid instanceof PDFPageTree)\n                kid.traverse(visitor);\n            visitor(kid, kidRef);\n        }\n    };\n    PDFPageTree.prototype.insertLeafKid = function (kidIdx, leafRef) {\n        var Kids = this.Kids();\n        this.ascend(function (node) {\n            var newCount = node.Count().asNumber() + 1;\n            node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n        });\n        Kids.insert(kidIdx, leafRef);\n    };\n    PDFPageTree.prototype.removeKid = function (kidIdx) {\n        var Kids = this.Kids();\n        var kid = Kids.lookup(kidIdx);\n        if (kid instanceof PDFPageLeaf) {\n            this.ascend(function (node) {\n                var newCount = node.Count().asNumber() - 1;\n                node.set(PDFName.of('Count'), PDFNumber.of(newCount));\n            });\n        }\n        Kids.remove(kidIdx);\n    };\n    PDFPageTree.withContext = function (context, parent) {\n        var dict = new Map();\n        dict.set(PDFName.of('Type'), PDFName.of('Pages'));\n        dict.set(PDFName.of('Kids'), context.obj([]));\n        dict.set(PDFName.of('Count'), context.obj(0));\n        if (parent)\n            dict.set(PDFName.of('Parent'), parent);\n        return new PDFPageTree(dict, context);\n    };\n    PDFPageTree.fromMapWithContext = function (map, context) {\n        return new PDFPageTree(map, context);\n    };\n    return PDFPageTree;\n}(PDFDict));\nexport default PDFPageTree;\n//# sourceMappingURL=PDFPageTree.js.map","import CharCodes from \"./CharCodes\";\nexport var IsDigit = new Uint8Array(256);\nIsDigit[CharCodes.Zero] = 1;\nIsDigit[CharCodes.One] = 1;\nIsDigit[CharCodes.Two] = 1;\nIsDigit[CharCodes.Three] = 1;\nIsDigit[CharCodes.Four] = 1;\nIsDigit[CharCodes.Five] = 1;\nIsDigit[CharCodes.Six] = 1;\nIsDigit[CharCodes.Seven] = 1;\nIsDigit[CharCodes.Eight] = 1;\nIsDigit[CharCodes.Nine] = 1;\nexport var IsNumericPrefix = new Uint8Array(256);\nIsNumericPrefix[CharCodes.Period] = 1;\nIsNumericPrefix[CharCodes.Plus] = 1;\nIsNumericPrefix[CharCodes.Minus] = 1;\nexport var IsNumeric = new Uint8Array(256);\nfor (var idx = 0, len = 256; idx < len; idx++) {\n    IsNumeric[idx] = IsDigit[idx] || IsNumericPrefix[idx] ? 1 : 0;\n}\n//# sourceMappingURL=Numeric.js.map","import { NumberParsingError } from \"../errors\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { IsDigit, IsNumeric } from \"../syntax/Numeric\";\nimport { IsWhitespace } from \"../syntax/Whitespace\";\nimport { charFromCode } from \"../../utils\";\nvar Newline = CharCodes.Newline, CarriageReturn = CharCodes.CarriageReturn;\n// TODO: Throw error if eof is reached before finishing object parse...\nvar BaseParser = /** @class */ (function () {\n    function BaseParser(bytes, capNumbers) {\n        if (capNumbers === void 0) { capNumbers = false; }\n        this.bytes = bytes;\n        this.capNumbers = capNumbers;\n    }\n    BaseParser.prototype.parseRawInt = function () {\n        var value = '';\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (!IsDigit[byte])\n                break;\n            value += charFromCode(this.bytes.next());\n        }\n        var numberValue = Number(value);\n        if (!value || !isFinite(numberValue)) {\n            throw new NumberParsingError(this.bytes.position(), value);\n        }\n        return numberValue;\n    };\n    // TODO: Maybe handle exponential format?\n    // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n    BaseParser.prototype.parseRawNumber = function () {\n        var value = '';\n        // Parse integer-part, the leading (+ | - | . | 0-9)\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (!IsNumeric[byte])\n                break;\n            value += charFromCode(this.bytes.next());\n            if (byte === CharCodes.Period)\n                break;\n        }\n        // Parse decimal-part, the trailing (0-9)\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (!IsDigit[byte])\n                break;\n            value += charFromCode(this.bytes.next());\n        }\n        var numberValue = Number(value);\n        if (!value || !isFinite(numberValue)) {\n            throw new NumberParsingError(this.bytes.position(), value);\n        }\n        if (numberValue > Number.MAX_SAFE_INTEGER) {\n            if (this.capNumbers) {\n                var msg = \"Parsed number that is too large for some PDF readers: \" + value + \", using Number.MAX_SAFE_INTEGER instead.\";\n                console.warn(msg);\n                return Number.MAX_SAFE_INTEGER;\n            }\n            else {\n                var msg = \"Parsed number that is too large for some PDF readers: \" + value + \", not capping.\";\n                console.warn(msg);\n            }\n        }\n        return numberValue;\n    };\n    BaseParser.prototype.skipWhitespace = function () {\n        while (!this.bytes.done() && IsWhitespace[this.bytes.peek()]) {\n            this.bytes.next();\n        }\n    };\n    BaseParser.prototype.skipLine = function () {\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (byte === Newline || byte === CarriageReturn)\n                return;\n            this.bytes.next();\n        }\n    };\n    BaseParser.prototype.skipComment = function () {\n        if (this.bytes.peek() !== CharCodes.Percent)\n            return false;\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (byte === Newline || byte === CarriageReturn)\n                return true;\n            this.bytes.next();\n        }\n        return true;\n    };\n    BaseParser.prototype.skipWhitespaceAndComments = function () {\n        this.skipWhitespace();\n        while (this.skipComment())\n            this.skipWhitespace();\n    };\n    BaseParser.prototype.matchKeyword = function (keyword) {\n        var initialOffset = this.bytes.offset();\n        for (var idx = 0, len = keyword.length; idx < len; idx++) {\n            if (this.bytes.done() || this.bytes.next() !== keyword[idx]) {\n                this.bytes.moveTo(initialOffset);\n                return false;\n            }\n        }\n        return true;\n    };\n    return BaseParser;\n}());\nexport default BaseParser;\n//# sourceMappingURL=BaseParser.js.map","var flag = function (bitIndex) { return 1 << bitIndex; };\n/** From PDF spec table 165 */\nexport var AnnotationFlags;\n(function (AnnotationFlags) {\n    /**\n     * If set, do not display the annotation if it does not belong to one of the\n     * standard annotation types and no annotation handler is available. If clear,\n     * display such an unknown annotation using an appearance stream specified by\n     * its appearance dictionary, if any.\n     */\n    AnnotationFlags[AnnotationFlags[\"Invisible\"] = flag(1 - 1)] = \"Invisible\";\n    /**\n     * If set, do not display or print the annotation or allow it to interact with\n     * the user, regardless of its annotation type or whether an annotation\n     * handler is available.\n     *\n     * In cases where screen space is limited, the ability to hide and show\n     * annotations selectively can be used in combination with appearance streams\n     * to display auxiliary pop-up information similar in function to online help\n     * systems.\n     */\n    AnnotationFlags[AnnotationFlags[\"Hidden\"] = flag(2 - 1)] = \"Hidden\";\n    /**\n     * If set, print the annotation when the page is printed. If clear, never\n     * print the annotation, regardless of whether it is displayed on the screen.\n     *\n     * This can be useful for annotations representing interactive pushbuttons,\n     * which would serve no meaningful purpose on the printed page.\n     */\n    AnnotationFlags[AnnotationFlags[\"Print\"] = flag(3 - 1)] = \"Print\";\n    /**\n     * If set, do not scale the annotation’s appearance to match the magnification\n     * of the page. The location of the annotation on the page (defined by the\n     * upper-left corner of its annotation rectangle) shall remain fixed,\n     * regardless of the page magnification.\n     */\n    AnnotationFlags[AnnotationFlags[\"NoZoom\"] = flag(4 - 1)] = \"NoZoom\";\n    /**\n     * If set, do not rotate the annotation’s appearance to match the rotation of\n     * the page. The upper-left corner of the annotation rectangle shall remain in\n     * a fixed location on the page, regardless of the page rotation.\n     */\n    AnnotationFlags[AnnotationFlags[\"NoRotate\"] = flag(5 - 1)] = \"NoRotate\";\n    /**\n     * If set, do not display the annotation on the screen or allow it to interact\n     * with the user. The annotation may be printed (depending on the setting of\n     * the Print flag) but should be considered hidden for purposes of on-screen\n     * display and user interaction.\n     */\n    AnnotationFlags[AnnotationFlags[\"NoView\"] = flag(6 - 1)] = \"NoView\";\n    /**\n     * If set, do not allow the annotation to interact with the user. The\n     * annotation may be displayed or printed (depending on the settings of the\n     * NoView and Print flags) but should not respond to mouse clicks or change\n     * its appearance in response to mouse motions.\n     *\n     * This flag shall be ignored for widget annotations; its function is\n     * subsumed by the ReadOnly flag of the associated form field.\n     */\n    AnnotationFlags[AnnotationFlags[\"ReadOnly\"] = flag(7 - 1)] = \"ReadOnly\";\n    /**\n     * If set, do not allow the annotation to be deleted or its properties\n     * (including position and size) to be modified by the user. However, this\n     * flag does not restrict changes to the annotation’s contents, such as the\n     * value of a form field.\n     */\n    AnnotationFlags[AnnotationFlags[\"Locked\"] = flag(8 - 1)] = \"Locked\";\n    /**\n     * If set, invert the interpretation of the NoView flag for certain events.\n     *\n     * A typical use is to have an annotation that appears only when a mouse\n     * cursor is held over it.\n     */\n    AnnotationFlags[AnnotationFlags[\"ToggleNoView\"] = flag(9 - 1)] = \"ToggleNoView\";\n    /**\n     * If set, do not allow the contents of the annotation to be modified by the\n     * user. This flag does not restrict deletion of the annotation or changes to\n     * other annotation properties, such as position and size.\n     */\n    AnnotationFlags[AnnotationFlags[\"LockedContents\"] = flag(10 - 1)] = \"LockedContents\";\n})(AnnotationFlags || (AnnotationFlags = {}));\n//# sourceMappingURL=flags.js.map","import { NextByteAssertionError } from \"../errors\";\nimport { decodePDFRawStream } from \"../streams/decode\";\nimport CharCodes from \"../syntax/CharCodes\";\n// TODO: See how line/col tracking affects performance\nvar ByteStream = /** @class */ (function () {\n    function ByteStream(bytes) {\n        this.idx = 0;\n        this.line = 0;\n        this.column = 0;\n        this.bytes = bytes;\n        this.length = this.bytes.length;\n    }\n    ByteStream.prototype.moveTo = function (offset) {\n        this.idx = offset;\n    };\n    ByteStream.prototype.next = function () {\n        var byte = this.bytes[this.idx++];\n        if (byte === CharCodes.Newline) {\n            this.line += 1;\n            this.column = 0;\n        }\n        else {\n            this.column += 1;\n        }\n        return byte;\n    };\n    ByteStream.prototype.assertNext = function (expected) {\n        if (this.peek() !== expected) {\n            throw new NextByteAssertionError(this.position(), expected, this.peek());\n        }\n        return this.next();\n    };\n    ByteStream.prototype.peek = function () {\n        return this.bytes[this.idx];\n    };\n    ByteStream.prototype.peekAhead = function (steps) {\n        return this.bytes[this.idx + steps];\n    };\n    ByteStream.prototype.peekAt = function (offset) {\n        return this.bytes[offset];\n    };\n    ByteStream.prototype.done = function () {\n        return this.idx >= this.length;\n    };\n    ByteStream.prototype.offset = function () {\n        return this.idx;\n    };\n    ByteStream.prototype.slice = function (start, end) {\n        return this.bytes.slice(start, end);\n    };\n    ByteStream.prototype.position = function () {\n        return { line: this.line, column: this.column, offset: this.idx };\n    };\n    ByteStream.of = function (bytes) { return new ByteStream(bytes); };\n    ByteStream.fromPDFRawStream = function (rawStream) {\n        return ByteStream.of(decodePDFRawStream(rawStream).decode());\n    };\n    return ByteStream;\n}());\nexport default ByteStream;\n//# sourceMappingURL=ByteStream.js.map","import { __spreadArrays } from \"tslib\";\nimport CharCodes from \"./CharCodes\";\nvar Space = CharCodes.Space, CarriageReturn = CharCodes.CarriageReturn, Newline = CharCodes.Newline;\nvar stream = [\n    CharCodes.s,\n    CharCodes.t,\n    CharCodes.r,\n    CharCodes.e,\n    CharCodes.a,\n    CharCodes.m,\n];\nvar endstream = [\n    CharCodes.e,\n    CharCodes.n,\n    CharCodes.d,\n    CharCodes.s,\n    CharCodes.t,\n    CharCodes.r,\n    CharCodes.e,\n    CharCodes.a,\n    CharCodes.m,\n];\nexport var Keywords = {\n    header: [\n        CharCodes.Percent,\n        CharCodes.P,\n        CharCodes.D,\n        CharCodes.F,\n        CharCodes.Dash,\n    ],\n    eof: [\n        CharCodes.Percent,\n        CharCodes.Percent,\n        CharCodes.E,\n        CharCodes.O,\n        CharCodes.F,\n    ],\n    obj: [CharCodes.o, CharCodes.b, CharCodes.j],\n    endobj: [\n        CharCodes.e,\n        CharCodes.n,\n        CharCodes.d,\n        CharCodes.o,\n        CharCodes.b,\n        CharCodes.j,\n    ],\n    xref: [CharCodes.x, CharCodes.r, CharCodes.e, CharCodes.f],\n    trailer: [\n        CharCodes.t,\n        CharCodes.r,\n        CharCodes.a,\n        CharCodes.i,\n        CharCodes.l,\n        CharCodes.e,\n        CharCodes.r,\n    ],\n    startxref: [\n        CharCodes.s,\n        CharCodes.t,\n        CharCodes.a,\n        CharCodes.r,\n        CharCodes.t,\n        CharCodes.x,\n        CharCodes.r,\n        CharCodes.e,\n        CharCodes.f,\n    ],\n    true: [CharCodes.t, CharCodes.r, CharCodes.u, CharCodes.e],\n    false: [CharCodes.f, CharCodes.a, CharCodes.l, CharCodes.s, CharCodes.e],\n    null: [CharCodes.n, CharCodes.u, CharCodes.l, CharCodes.l],\n    stream: stream,\n    streamEOF1: __spreadArrays(stream, [Space, CarriageReturn, Newline]),\n    streamEOF2: __spreadArrays(stream, [CarriageReturn, Newline]),\n    streamEOF3: __spreadArrays(stream, [CarriageReturn]),\n    streamEOF4: __spreadArrays(stream, [Newline]),\n    endstream: endstream,\n    EOF1endstream: __spreadArrays([CarriageReturn, Newline], endstream),\n    EOF2endstream: __spreadArrays([CarriageReturn], endstream),\n    EOF3endstream: __spreadArrays([Newline], endstream),\n};\n//# sourceMappingURL=Keywords.js.map","import { __extends } from \"tslib\";\nimport { PDFObjectParsingError, PDFStreamParsingError, UnbalancedParenthesisError, } from \"../errors\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFBool from \"../objects/PDFBool\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFHexString from \"../objects/PDFHexString\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNull from \"../objects/PDFNull\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFRawStream from \"../objects/PDFRawStream\";\nimport PDFRef from \"../objects/PDFRef\";\nimport PDFString from \"../objects/PDFString\";\nimport BaseParser from \"./BaseParser\";\nimport ByteStream from \"./ByteStream\";\nimport PDFCatalog from \"../structures/PDFCatalog\";\nimport PDFPageLeaf from \"../structures/PDFPageLeaf\";\nimport PDFPageTree from \"../structures/PDFPageTree\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { IsDelimiter } from \"../syntax/Delimiters\";\nimport { Keywords } from \"../syntax/Keywords\";\nimport { IsDigit, IsNumeric } from \"../syntax/Numeric\";\nimport { IsWhitespace } from \"../syntax/Whitespace\";\nimport { charFromCode } from \"../../utils\";\n// TODO: Throw error if eof is reached before finishing object parse...\nvar PDFObjectParser = /** @class */ (function (_super) {\n    __extends(PDFObjectParser, _super);\n    function PDFObjectParser(byteStream, context, capNumbers) {\n        if (capNumbers === void 0) { capNumbers = false; }\n        var _this = _super.call(this, byteStream, capNumbers) || this;\n        _this.context = context;\n        return _this;\n    }\n    // TODO: Is it possible to reduce duplicate parsing for ref lookaheads?\n    PDFObjectParser.prototype.parseObject = function () {\n        this.skipWhitespaceAndComments();\n        if (this.matchKeyword(Keywords.true))\n            return PDFBool.True;\n        if (this.matchKeyword(Keywords.false))\n            return PDFBool.False;\n        if (this.matchKeyword(Keywords.null))\n            return PDFNull;\n        var byte = this.bytes.peek();\n        if (byte === CharCodes.LessThan &&\n            this.bytes.peekAhead(1) === CharCodes.LessThan) {\n            return this.parseDictOrStream();\n        }\n        if (byte === CharCodes.LessThan)\n            return this.parseHexString();\n        if (byte === CharCodes.LeftParen)\n            return this.parseString();\n        if (byte === CharCodes.ForwardSlash)\n            return this.parseName();\n        if (byte === CharCodes.LeftSquareBracket)\n            return this.parseArray();\n        if (IsNumeric[byte])\n            return this.parseNumberOrRef();\n        throw new PDFObjectParsingError(this.bytes.position(), byte);\n    };\n    PDFObjectParser.prototype.parseNumberOrRef = function () {\n        var firstNum = this.parseRawNumber();\n        this.skipWhitespaceAndComments();\n        var lookaheadStart = this.bytes.offset();\n        if (IsDigit[this.bytes.peek()]) {\n            var secondNum = this.parseRawNumber();\n            this.skipWhitespaceAndComments();\n            if (this.bytes.peek() === CharCodes.R) {\n                this.bytes.assertNext(CharCodes.R);\n                return PDFRef.of(firstNum, secondNum);\n            }\n        }\n        this.bytes.moveTo(lookaheadStart);\n        return PDFNumber.of(firstNum);\n    };\n    // TODO: Maybe update PDFHexString.of() logic to remove whitespace and validate input?\n    PDFObjectParser.prototype.parseHexString = function () {\n        var value = '';\n        this.bytes.assertNext(CharCodes.LessThan);\n        while (!this.bytes.done() && this.bytes.peek() !== CharCodes.GreaterThan) {\n            value += charFromCode(this.bytes.next());\n        }\n        this.bytes.assertNext(CharCodes.GreaterThan);\n        return PDFHexString.of(value);\n    };\n    PDFObjectParser.prototype.parseString = function () {\n        var nestingLvl = 0;\n        var isEscaped = false;\n        var value = '';\n        while (!this.bytes.done()) {\n            var byte = this.bytes.next();\n            value += charFromCode(byte);\n            // Check for unescaped parenthesis\n            if (!isEscaped) {\n                if (byte === CharCodes.LeftParen)\n                    nestingLvl += 1;\n                if (byte === CharCodes.RightParen)\n                    nestingLvl -= 1;\n            }\n            // Track whether current character is being escaped or not\n            if (byte === CharCodes.BackSlash) {\n                isEscaped = !isEscaped;\n            }\n            else if (isEscaped) {\n                isEscaped = false;\n            }\n            // Once (if) the unescaped parenthesis balance out, return their contents\n            if (nestingLvl === 0) {\n                // Remove the outer parens so they aren't part of the contents\n                return PDFString.of(value.substring(1, value.length - 1));\n            }\n        }\n        throw new UnbalancedParenthesisError(this.bytes.position());\n    };\n    // TODO: Compare performance of string concatenation to charFromCode(...bytes)\n    // TODO: Maybe preallocate small Uint8Array if can use charFromCode?\n    PDFObjectParser.prototype.parseName = function () {\n        this.bytes.assertNext(CharCodes.ForwardSlash);\n        var name = '';\n        while (!this.bytes.done()) {\n            var byte = this.bytes.peek();\n            if (IsWhitespace[byte] || IsDelimiter[byte])\n                break;\n            name += charFromCode(byte);\n            this.bytes.next();\n        }\n        return PDFName.of(name);\n    };\n    PDFObjectParser.prototype.parseArray = function () {\n        this.bytes.assertNext(CharCodes.LeftSquareBracket);\n        this.skipWhitespaceAndComments();\n        var pdfArray = PDFArray.withContext(this.context);\n        while (this.bytes.peek() !== CharCodes.RightSquareBracket) {\n            var element = this.parseObject();\n            pdfArray.push(element);\n            this.skipWhitespaceAndComments();\n        }\n        this.bytes.assertNext(CharCodes.RightSquareBracket);\n        return pdfArray;\n    };\n    PDFObjectParser.prototype.parseDict = function () {\n        this.bytes.assertNext(CharCodes.LessThan);\n        this.bytes.assertNext(CharCodes.LessThan);\n        this.skipWhitespaceAndComments();\n        var dict = new Map();\n        while (!this.bytes.done() &&\n            this.bytes.peek() !== CharCodes.GreaterThan &&\n            this.bytes.peekAhead(1) !== CharCodes.GreaterThan) {\n            var key = this.parseName();\n            var value = this.parseObject();\n            dict.set(key, value);\n            this.skipWhitespaceAndComments();\n        }\n        this.skipWhitespaceAndComments();\n        this.bytes.assertNext(CharCodes.GreaterThan);\n        this.bytes.assertNext(CharCodes.GreaterThan);\n        var Type = dict.get(PDFName.of('Type'));\n        if (Type === PDFName.of('Catalog')) {\n            return PDFCatalog.fromMapWithContext(dict, this.context);\n        }\n        else if (Type === PDFName.of('Pages')) {\n            return PDFPageTree.fromMapWithContext(dict, this.context);\n        }\n        else if (Type === PDFName.of('Page')) {\n            return PDFPageLeaf.fromMapWithContext(dict, this.context);\n        }\n        else {\n            return PDFDict.fromMapWithContext(dict, this.context);\n        }\n    };\n    PDFObjectParser.prototype.parseDictOrStream = function () {\n        var startPos = this.bytes.position();\n        var dict = this.parseDict();\n        this.skipWhitespaceAndComments();\n        if (!this.matchKeyword(Keywords.streamEOF1) &&\n            !this.matchKeyword(Keywords.streamEOF2) &&\n            !this.matchKeyword(Keywords.streamEOF3) &&\n            !this.matchKeyword(Keywords.streamEOF4) &&\n            !this.matchKeyword(Keywords.stream)) {\n            return dict;\n        }\n        var start = this.bytes.offset();\n        var end;\n        var Length = dict.get(PDFName.of('Length'));\n        if (Length instanceof PDFNumber) {\n            end = start + Length.asNumber();\n            this.bytes.moveTo(end);\n            this.skipWhitespaceAndComments();\n            if (!this.matchKeyword(Keywords.endstream)) {\n                this.bytes.moveTo(start);\n                end = this.findEndOfStreamFallback(startPos);\n            }\n        }\n        else {\n            end = this.findEndOfStreamFallback(startPos);\n        }\n        var contents = this.bytes.slice(start, end);\n        return PDFRawStream.of(dict, contents);\n    };\n    PDFObjectParser.prototype.findEndOfStreamFallback = function (startPos) {\n        // Move to end of stream, while handling nested streams\n        var nestingLvl = 1;\n        var end = this.bytes.offset();\n        while (!this.bytes.done()) {\n            end = this.bytes.offset();\n            if (this.matchKeyword(Keywords.stream)) {\n                nestingLvl += 1;\n            }\n            else if (this.matchKeyword(Keywords.EOF1endstream) ||\n                this.matchKeyword(Keywords.EOF2endstream) ||\n                this.matchKeyword(Keywords.EOF3endstream) ||\n                this.matchKeyword(Keywords.endstream)) {\n                nestingLvl -= 1;\n            }\n            else {\n                this.bytes.next();\n            }\n            if (nestingLvl === 0)\n                break;\n        }\n        if (nestingLvl !== 0)\n            throw new PDFStreamParsingError(startPos);\n        return end;\n    };\n    PDFObjectParser.forBytes = function (bytes, context, capNumbers) { return new PDFObjectParser(ByteStream.of(bytes), context, capNumbers); };\n    PDFObjectParser.forByteStream = function (byteStream, context, capNumbers) {\n        if (capNumbers === void 0) { capNumbers = false; }\n        return new PDFObjectParser(byteStream, context, capNumbers);\n    };\n    return PDFObjectParser;\n}(BaseParser));\nexport default PDFObjectParser;\n//# sourceMappingURL=PDFObjectParser.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { ReparseError } from \"../errors\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFRef from \"../objects/PDFRef\";\nimport ByteStream from \"./ByteStream\";\nimport PDFObjectParser from \"./PDFObjectParser\";\nimport { waitForTick } from \"../../utils\";\nvar PDFObjectStreamParser = /** @class */ (function (_super) {\n    __extends(PDFObjectStreamParser, _super);\n    function PDFObjectStreamParser(rawStream, shouldWaitForTick) {\n        var _this = _super.call(this, ByteStream.fromPDFRawStream(rawStream), rawStream.dict.context) || this;\n        var dict = rawStream.dict;\n        _this.alreadyParsed = false;\n        _this.shouldWaitForTick = shouldWaitForTick || (function () { return false; });\n        _this.firstOffset = dict.lookup(PDFName.of('First'), PDFNumber).asNumber();\n        _this.objectCount = dict.lookup(PDFName.of('N'), PDFNumber).asNumber();\n        return _this;\n    }\n    PDFObjectStreamParser.prototype.parseIntoContext = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var offsetsAndObjectNumbers, idx, len, _a, objectNumber, offset, object, ref;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (this.alreadyParsed) {\n                            throw new ReparseError('PDFObjectStreamParser', 'parseIntoContext');\n                        }\n                        this.alreadyParsed = true;\n                        offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers();\n                        idx = 0, len = offsetsAndObjectNumbers.length;\n                        _b.label = 1;\n                    case 1:\n                        if (!(idx < len)) return [3 /*break*/, 4];\n                        _a = offsetsAndObjectNumbers[idx], objectNumber = _a.objectNumber, offset = _a.offset;\n                        this.bytes.moveTo(this.firstOffset + offset);\n                        object = this.parseObject();\n                        ref = PDFRef.of(objectNumber, 0);\n                        this.context.assign(ref, object);\n                        if (!this.shouldWaitForTick()) return [3 /*break*/, 3];\n                        return [4 /*yield*/, waitForTick()];\n                    case 2:\n                        _b.sent();\n                        _b.label = 3;\n                    case 3:\n                        idx++;\n                        return [3 /*break*/, 1];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PDFObjectStreamParser.prototype.parseOffsetsAndObjectNumbers = function () {\n        var offsetsAndObjectNumbers = [];\n        for (var idx = 0, len = this.objectCount; idx < len; idx++) {\n            this.skipWhitespaceAndComments();\n            var objectNumber = this.parseRawInt();\n            this.skipWhitespaceAndComments();\n            var offset = this.parseRawInt();\n            offsetsAndObjectNumbers.push({ objectNumber: objectNumber, offset: offset });\n        }\n        return offsetsAndObjectNumbers;\n    };\n    PDFObjectStreamParser.forStream = function (rawStream, shouldWaitForTick) { return new PDFObjectStreamParser(rawStream, shouldWaitForTick); };\n    return PDFObjectStreamParser;\n}(PDFObjectParser));\nexport default PDFObjectStreamParser;\n//# sourceMappingURL=PDFObjectStreamParser.js.map","import { ReparseError } from \"../errors\";\nimport PDFArray from \"../objects/PDFArray\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFNumber from \"../objects/PDFNumber\";\nimport PDFRef from \"../objects/PDFRef\";\nimport ByteStream from \"./ByteStream\";\nvar PDFXRefStreamParser = /** @class */ (function () {\n    function PDFXRefStreamParser(rawStream) {\n        this.alreadyParsed = false;\n        this.dict = rawStream.dict;\n        this.bytes = ByteStream.fromPDFRawStream(rawStream);\n        this.context = this.dict.context;\n        var Size = this.dict.lookup(PDFName.of('Size'), PDFNumber);\n        var Index = this.dict.lookup(PDFName.of('Index'));\n        if (Index instanceof PDFArray) {\n            this.subsections = [];\n            for (var idx = 0, len = Index.size(); idx < len; idx += 2) {\n                var firstObjectNumber = Index.lookup(idx + 0, PDFNumber).asNumber();\n                var length_1 = Index.lookup(idx + 1, PDFNumber).asNumber();\n                this.subsections.push({ firstObjectNumber: firstObjectNumber, length: length_1 });\n            }\n        }\n        else {\n            this.subsections = [{ firstObjectNumber: 0, length: Size.asNumber() }];\n        }\n        var W = this.dict.lookup(PDFName.of('W'), PDFArray);\n        this.byteWidths = [-1, -1, -1];\n        for (var idx = 0, len = W.size(); idx < len; idx++) {\n            this.byteWidths[idx] = W.lookup(idx, PDFNumber).asNumber();\n        }\n    }\n    PDFXRefStreamParser.prototype.parseIntoContext = function () {\n        if (this.alreadyParsed) {\n            throw new ReparseError('PDFXRefStreamParser', 'parseIntoContext');\n        }\n        this.alreadyParsed = true;\n        this.context.trailerInfo = {\n            Root: this.dict.get(PDFName.of('Root')),\n            Encrypt: this.dict.get(PDFName.of('Encrypt')),\n            Info: this.dict.get(PDFName.of('Info')),\n            ID: this.dict.get(PDFName.of('ID')),\n        };\n        var entries = this.parseEntries();\n        // for (let idx = 0, len = entries.length; idx < len; idx++) {\n        // const entry = entries[idx];\n        // if (entry.deleted) this.context.delete(entry.ref);\n        // }\n        return entries;\n    };\n    PDFXRefStreamParser.prototype.parseEntries = function () {\n        var entries = [];\n        var _a = this.byteWidths, typeFieldWidth = _a[0], offsetFieldWidth = _a[1], genFieldWidth = _a[2];\n        for (var subsectionIdx = 0, subsectionLen = this.subsections.length; subsectionIdx < subsectionLen; subsectionIdx++) {\n            var _b = this.subsections[subsectionIdx], firstObjectNumber = _b.firstObjectNumber, length_2 = _b.length;\n            for (var objIdx = 0; objIdx < length_2; objIdx++) {\n                var type = 0;\n                for (var idx = 0, len = typeFieldWidth; idx < len; idx++) {\n                    type = (type << 8) | this.bytes.next();\n                }\n                var offset = 0;\n                for (var idx = 0, len = offsetFieldWidth; idx < len; idx++) {\n                    offset = (offset << 8) | this.bytes.next();\n                }\n                var generationNumber = 0;\n                for (var idx = 0, len = genFieldWidth; idx < len; idx++) {\n                    generationNumber = (generationNumber << 8) | this.bytes.next();\n                }\n                // When the `type` field is absent, it defaults to 1\n                if (typeFieldWidth === 0)\n                    type = 1;\n                var objectNumber = firstObjectNumber + objIdx;\n                var entry = {\n                    ref: PDFRef.of(objectNumber, generationNumber),\n                    offset: offset,\n                    deleted: type === 0,\n                    inObjectStream: type === 2,\n                };\n                entries.push(entry);\n            }\n        }\n        return entries;\n    };\n    PDFXRefStreamParser.forStream = function (rawStream) {\n        return new PDFXRefStreamParser(rawStream);\n    };\n    return PDFXRefStreamParser;\n}());\nexport default PDFXRefStreamParser;\n//# sourceMappingURL=PDFXRefStreamParser.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport PDFCrossRefSection from \"../document/PDFCrossRefSection\";\nimport PDFHeader from \"../document/PDFHeader\";\nimport PDFTrailer from \"../document/PDFTrailer\";\nimport { MissingKeywordError, MissingPDFHeaderError, PDFInvalidObjectParsingError, ReparseError, StalledParserError, } from \"../errors\";\nimport PDFDict from \"../objects/PDFDict\";\nimport PDFInvalidObject from \"../objects/PDFInvalidObject\";\nimport PDFName from \"../objects/PDFName\";\nimport PDFRawStream from \"../objects/PDFRawStream\";\nimport PDFRef from \"../objects/PDFRef\";\nimport ByteStream from \"./ByteStream\";\nimport PDFObjectParser from \"./PDFObjectParser\";\nimport PDFObjectStreamParser from \"./PDFObjectStreamParser\";\nimport PDFXRefStreamParser from \"./PDFXRefStreamParser\";\nimport PDFContext from \"../PDFContext\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { Keywords } from \"../syntax/Keywords\";\nimport { IsDigit } from \"../syntax/Numeric\";\nimport { waitForTick } from \"../../utils\";\nvar PDFParser = /** @class */ (function (_super) {\n    __extends(PDFParser, _super);\n    function PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) {\n        if (objectsPerTick === void 0) { objectsPerTick = Infinity; }\n        if (throwOnInvalidObject === void 0) { throwOnInvalidObject = false; }\n        if (capNumbers === void 0) { capNumbers = false; }\n        var _this = _super.call(this, ByteStream.of(pdfBytes), PDFContext.create(), capNumbers) || this;\n        _this.alreadyParsed = false;\n        _this.parsedObjects = 0;\n        _this.shouldWaitForTick = function () {\n            _this.parsedObjects += 1;\n            return _this.parsedObjects % _this.objectsPerTick === 0;\n        };\n        _this.objectsPerTick = objectsPerTick;\n        _this.throwOnInvalidObject = throwOnInvalidObject;\n        return _this;\n    }\n    PDFParser.prototype.parseDocument = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var prevOffset, offset;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (this.alreadyParsed) {\n                            throw new ReparseError('PDFParser', 'parseDocument');\n                        }\n                        this.alreadyParsed = true;\n                        this.context.header = this.parseHeader();\n                        _a.label = 1;\n                    case 1:\n                        if (!!this.bytes.done()) return [3 /*break*/, 3];\n                        return [4 /*yield*/, this.parseDocumentSection()];\n                    case 2:\n                        _a.sent();\n                        offset = this.bytes.offset();\n                        if (offset === prevOffset) {\n                            throw new StalledParserError(this.bytes.position());\n                        }\n                        prevOffset = offset;\n                        return [3 /*break*/, 1];\n                    case 3:\n                        this.maybeRecoverRoot();\n                        if (this.context.lookup(PDFRef.of(0))) {\n                            console.warn('Removing parsed object: 0 0 R');\n                            this.context.delete(PDFRef.of(0));\n                        }\n                        return [2 /*return*/, this.context];\n                }\n            });\n        });\n    };\n    PDFParser.prototype.maybeRecoverRoot = function () {\n        var isValidCatalog = function (obj) {\n            return obj instanceof PDFDict &&\n                obj.lookup(PDFName.of('Type')) === PDFName.of('Catalog');\n        };\n        var catalog = this.context.lookup(this.context.trailerInfo.Root);\n        if (!isValidCatalog(catalog)) {\n            var indirectObjects = this.context.enumerateIndirectObjects();\n            for (var idx = 0, len = indirectObjects.length; idx < len; idx++) {\n                var _a = indirectObjects[idx], ref = _a[0], object = _a[1];\n                if (isValidCatalog(object)) {\n                    this.context.trailerInfo.Root = ref;\n                }\n            }\n        }\n    };\n    PDFParser.prototype.parseHeader = function () {\n        while (!this.bytes.done()) {\n            if (this.matchKeyword(Keywords.header)) {\n                var major = this.parseRawInt();\n                this.bytes.assertNext(CharCodes.Period);\n                var minor = this.parseRawInt();\n                var header = PDFHeader.forVersion(major, minor);\n                this.skipBinaryHeaderComment();\n                return header;\n            }\n            this.bytes.next();\n        }\n        throw new MissingPDFHeaderError(this.bytes.position());\n    };\n    PDFParser.prototype.parseIndirectObjectHeader = function () {\n        this.skipWhitespaceAndComments();\n        var objectNumber = this.parseRawInt();\n        this.skipWhitespaceAndComments();\n        var generationNumber = this.parseRawInt();\n        this.skipWhitespaceAndComments();\n        if (!this.matchKeyword(Keywords.obj)) {\n            throw new MissingKeywordError(this.bytes.position(), Keywords.obj);\n        }\n        return PDFRef.of(objectNumber, generationNumber);\n    };\n    PDFParser.prototype.matchIndirectObjectHeader = function () {\n        var initialOffset = this.bytes.offset();\n        try {\n            this.parseIndirectObjectHeader();\n            return true;\n        }\n        catch (e) {\n            this.bytes.moveTo(initialOffset);\n            return false;\n        }\n    };\n    PDFParser.prototype.parseIndirectObject = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var ref, object;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        ref = this.parseIndirectObjectHeader();\n                        this.skipWhitespaceAndComments();\n                        object = this.parseObject();\n                        this.skipWhitespaceAndComments();\n                        // if (!this.matchKeyword(Keywords.endobj)) {\n                        // throw new MissingKeywordError(this.bytes.position(), Keywords.endobj);\n                        // }\n                        // TODO: Log a warning if this fails...\n                        this.matchKeyword(Keywords.endobj);\n                        if (!(object instanceof PDFRawStream &&\n                            object.dict.lookup(PDFName.of('Type')) === PDFName.of('ObjStm'))) return [3 /*break*/, 2];\n                        return [4 /*yield*/, PDFObjectStreamParser.forStream(object, this.shouldWaitForTick).parseIntoContext()];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        if (object instanceof PDFRawStream &&\n                            object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')) {\n                            PDFXRefStreamParser.forStream(object).parseIntoContext();\n                        }\n                        else {\n                            this.context.assign(ref, object);\n                        }\n                        _a.label = 3;\n                    case 3: return [2 /*return*/, ref];\n                }\n            });\n        });\n    };\n    // TODO: Improve and clean this up\n    PDFParser.prototype.tryToParseInvalidIndirectObject = function () {\n        var startPos = this.bytes.position();\n        var msg = \"Trying to parse invalid object: \" + JSON.stringify(startPos) + \")\";\n        if (this.throwOnInvalidObject)\n            throw new Error(msg);\n        console.warn(msg);\n        var ref = this.parseIndirectObjectHeader();\n        console.warn(\"Invalid object ref: \" + ref);\n        this.skipWhitespaceAndComments();\n        var start = this.bytes.offset();\n        var failed = true;\n        while (!this.bytes.done()) {\n            if (this.matchKeyword(Keywords.endobj)) {\n                failed = false;\n            }\n            if (!failed)\n                break;\n            this.bytes.next();\n        }\n        if (failed)\n            throw new PDFInvalidObjectParsingError(startPos);\n        var end = this.bytes.offset() - Keywords.endobj.length;\n        var object = PDFInvalidObject.of(this.bytes.slice(start, end));\n        this.context.assign(ref, object);\n        return ref;\n    };\n    PDFParser.prototype.parseIndirectObjects = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var initialOffset, e_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        this.skipWhitespaceAndComments();\n                        _a.label = 1;\n                    case 1:\n                        if (!(!this.bytes.done() && IsDigit[this.bytes.peek()])) return [3 /*break*/, 8];\n                        initialOffset = this.bytes.offset();\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 4, , 5]);\n                        return [4 /*yield*/, this.parseIndirectObject()];\n                    case 3:\n                        _a.sent();\n                        return [3 /*break*/, 5];\n                    case 4:\n                        e_1 = _a.sent();\n                        // TODO: Add tracing/logging mechanism to track when this happens!\n                        this.bytes.moveTo(initialOffset);\n                        this.tryToParseInvalidIndirectObject();\n                        return [3 /*break*/, 5];\n                    case 5:\n                        this.skipWhitespaceAndComments();\n                        // TODO: Can this be done only when needed, to avoid harming performance?\n                        this.skipJibberish();\n                        if (!this.shouldWaitForTick()) return [3 /*break*/, 7];\n                        return [4 /*yield*/, waitForTick()];\n                    case 6:\n                        _a.sent();\n                        _a.label = 7;\n                    case 7: return [3 /*break*/, 1];\n                    case 8: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PDFParser.prototype.maybeParseCrossRefSection = function () {\n        this.skipWhitespaceAndComments();\n        if (!this.matchKeyword(Keywords.xref))\n            return;\n        this.skipWhitespaceAndComments();\n        var objectNumber = -1;\n        var xref = PDFCrossRefSection.createEmpty();\n        while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {\n            var firstInt = this.parseRawInt();\n            this.skipWhitespaceAndComments();\n            var secondInt = this.parseRawInt();\n            this.skipWhitespaceAndComments();\n            var byte = this.bytes.peek();\n            if (byte === CharCodes.n || byte === CharCodes.f) {\n                var ref = PDFRef.of(objectNumber, secondInt);\n                if (this.bytes.next() === CharCodes.n) {\n                    xref.addEntry(ref, firstInt);\n                }\n                else {\n                    // this.context.delete(ref);\n                    xref.addDeletedEntry(ref, firstInt);\n                }\n                objectNumber += 1;\n            }\n            else {\n                objectNumber = firstInt;\n            }\n            this.skipWhitespaceAndComments();\n        }\n        return xref;\n    };\n    PDFParser.prototype.maybeParseTrailerDict = function () {\n        this.skipWhitespaceAndComments();\n        if (!this.matchKeyword(Keywords.trailer))\n            return;\n        this.skipWhitespaceAndComments();\n        var dict = this.parseDict();\n        var context = this.context;\n        context.trailerInfo = {\n            Root: dict.get(PDFName.of('Root')) || context.trailerInfo.Root,\n            Encrypt: dict.get(PDFName.of('Encrypt')) || context.trailerInfo.Encrypt,\n            Info: dict.get(PDFName.of('Info')) || context.trailerInfo.Info,\n            ID: dict.get(PDFName.of('ID')) || context.trailerInfo.ID,\n        };\n    };\n    PDFParser.prototype.maybeParseTrailer = function () {\n        this.skipWhitespaceAndComments();\n        if (!this.matchKeyword(Keywords.startxref))\n            return;\n        this.skipWhitespaceAndComments();\n        var offset = this.parseRawInt();\n        this.skipWhitespace();\n        this.matchKeyword(Keywords.eof);\n        this.skipWhitespaceAndComments();\n        this.matchKeyword(Keywords.eof);\n        this.skipWhitespaceAndComments();\n        return PDFTrailer.forLastCrossRefSectionOffset(offset);\n    };\n    PDFParser.prototype.parseDocumentSection = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.parseIndirectObjects()];\n                    case 1:\n                        _a.sent();\n                        this.maybeParseCrossRefSection();\n                        this.maybeParseTrailerDict();\n                        this.maybeParseTrailer();\n                        // TODO: Can this be done only when needed, to avoid harming performance?\n                        this.skipJibberish();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * This operation is not necessary for valid PDF files. But some invalid PDFs\n     * contain jibberish in between indirect objects. This method is designed to\n     * skip past that jibberish, should it exist, until it reaches the next\n     * indirect object header, an xref table section, or the file trailer.\n     */\n    PDFParser.prototype.skipJibberish = function () {\n        this.skipWhitespaceAndComments();\n        while (!this.bytes.done()) {\n            var initialOffset = this.bytes.offset();\n            var byte = this.bytes.peek();\n            var isAlphaNumeric = byte >= CharCodes.Space && byte <= CharCodes.Tilde;\n            if (isAlphaNumeric) {\n                if (this.matchKeyword(Keywords.xref) ||\n                    this.matchKeyword(Keywords.trailer) ||\n                    this.matchKeyword(Keywords.startxref) ||\n                    this.matchIndirectObjectHeader()) {\n                    this.bytes.moveTo(initialOffset);\n                    break;\n                }\n            }\n            this.bytes.next();\n        }\n    };\n    /**\n     * Skips the binary comment following a PDF header. The specification\n     * defines this binary comment (section 7.5.2 File Header) as a sequence of 4\n     * or more bytes that are 128 or greater, and which are preceded by a \"%\".\n     *\n     * This would imply that to strip out this binary comment, we could check for\n     * a sequence of bytes starting with \"%\", and remove all subsequent bytes that\n     * are 128 or greater. This works for many documents that properly comply with\n     * the spec. But in the wild, there are PDFs that omit the leading \"%\", and\n     * include bytes that are less than 128 (e.g. 0 or 1). So in order to parse\n     * these headers correctly, we just throw out all bytes leading up to the\n     * first indirect object header.\n     */\n    PDFParser.prototype.skipBinaryHeaderComment = function () {\n        this.skipWhitespaceAndComments();\n        try {\n            var initialOffset = this.bytes.offset();\n            this.parseIndirectObjectHeader();\n            this.bytes.moveTo(initialOffset);\n        }\n        catch (e) {\n            this.bytes.next();\n            this.skipWhitespaceAndComments();\n        }\n    };\n    PDFParser.forBytesWithOptions = function (pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) {\n        return new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers);\n    };\n    return PDFParser;\n}(PDFObjectParser));\nexport default PDFParser;\n//# sourceMappingURL=PDFParser.js.map","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  makeSelectProject,\n} from '../ProjectModule/selectors';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Project,\n  Spec,\n  Drawing,\n  DrawingRules,\n} from '../../models';\n\nimport {\n  List,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  ISpecReducerState,\n} from './reducer';\nimport { IPrintGroup } from '../../components/SpecificationBookletBeta/LixilPrintSpecDetail/Component';\nimport { makeSelectEditingProductIndex } from '../ProductModule/selectors';\nimport {Mode} from '../../constants';\nimport {IProjectReducerState} from '../ProjectModule/reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added SpecModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectSelectedSpecIdLixilPrintConfigPrintGroups = () => createSelector(\n  makeSelectSpecPrintConfigBySelectedSpecId(),\n  (config: Map<string, any>) => config && config.get('productGroups'),\n);\n\nexport const makeSelectMasterDrawing = (\n  {\n    drawingId: controlledDrawingId,\n  }: {\n    drawingId?: number\n  } = {}) => createSelector(\n  makeSelectMasterProjectspec(),\n  makeSelectSelectedDrawingId(),\n  (spec: IMap<Spec>, selectedDrawingId: number) => {\n    const drawingId = controlledDrawingId != null ? controlledDrawingId : selectedDrawingId;\n    return spec && spec.get('drawings', List()).find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n  },\n);\n\nexport const makeSelectTemplateDrawing = (\n    {\n      drawingId: controlledDrawingId,\n    }: {\n      drawingId?: number\n    } = {}) => createSelector(\n    makeSelectTemplateProjectSpec(),\n    makeSelectSelectedDrawingId(),\n    (spec: IMap<Spec>, selectedDrawingId: number) => {\n      const drawingId = controlledDrawingId != null ? controlledDrawingId : selectedDrawingId;\n      return spec && spec.get('drawings', List()).find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n    },\n);\n\nexport const makeSelectSpecPrintConfigBySelectedSpecId = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedSpecId(),\n  (state: IMapNonRecursive<ISpecReducerState>, selectedSpecId: number) => state.getIn(['specPrintConfigs', selectedSpecId]),\n);\n\nexport const makeSelectfailedSelfDrawingRulesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('failedSelfDrawingRulesLoading'),\n);\n\nexport const makeSelectfailedSelfDrawingRules = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('failedSelfDrawingRules'),\n);\n\nexport const makeSelectTestSpecMode = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('testSpecMode'),\n);\n\nexport const makeSelectMode = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<ISpecReducerState>) => state.get('mode'),\n);\n\nexport const makeSelectSearchingGetMasterSpecById = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchingGetMasterSpecById'),\n);\n\nexport const makeSelectSearchingGetTemplateSpecById = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchingGetTemplateSpecById'),\n);\nexport const makeSelectSelectedMasterSpecLocation = () => createSelector(\n  makeSelectMasterProjectspec(),\n  (selectedSpec: IMap<Spec>) => selectedSpec.get('address'),\n);\n\nexport const makeSelectSelectedSpecLocation = () => createSelector(\n  makeSelectSpec(),\n  (selectedSpec: IMap<Spec>) => selectedSpec.get('address'),\n);\n\nexport const makeSelectSelectedSpecId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('selectedSpecId'),\n);\n\nexport const makeSelectSpecOrMasterSpecId = () => createSelector(\n  selectReducerState(),\n  makeSelectMode(),\n  (state: IMapNonRecursive<ISpecReducerState>, mode: Mode) => {\n    switch (mode) {\n      case Mode.master: {\n        return state.get('selectedMasterSpecId');\n      }\n      case Mode.masterTemplate: {\n        return state.get('selectedTemplateSpecId');\n      }\n      default: {\n        return state.get('selectedSpecId');\n      }\n    }\n  }\n);\n\nexport const makeSelectSelectedMasterSpecId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('selectedMasterSpecId'),\n);\n\nexport const makeSelectSelectedTemplateSpecId = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<ISpecReducerState>) => state.get('selectedTemplateSpecId'),\n);\n\n\nexport const makeSelectSpecs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('specs', Map()),\n);\n\nexport const makeSelectMasterProjectspecs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('masterSpecs', Map()),\n);\n\nexport const makeSelectTemplateSpecs = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<ISpecReducerState>) => state.get('templateSpecs', Map()),\n);\n\nexport const makeSelectCurrentSpecs = () => createSelector(\n  selectReducerState(),\n  makeSelectMode(),\n  makeSelectSpecs(),\n  makeSelectMasterProjectspecs(),\n  makeSelectTemplateSpecs(),\n  (state: IMapNonRecursive<ISpecReducerState>, mode: Mode, specs: Map<number, IMap<Spec>>, masterSpecs: Map<number, IMap<Spec>>, templateSpecs: Map<number, IMap<Spec>>) => {\n    switch (mode) {\n      case Mode.master: {\n        return state.get('masterSpecs', Map());\n      }\n      case Mode.masterTemplate: {\n        return state.get('templateSpecs', Map());\n      }\n      default: {\n        return state.get('specs', Map());\n      }\n    }\n  }\n);\n\nexport const makeSelectMasterProjectspec = (\n  {\n    specId: controlledSpecId,\n  }: {\n    specId?: number\n  } = {}) => createSelector(\n  makeSelectMasterProjectspecs(),\n  makeSelectSelectedMasterSpecId(),\n  (specs: Map<number, IMap<Spec>>, specId: number) => controlledSpecId != null ? specs.get(controlledSpecId) : specs.get(specId),\n);\nexport const makeSelectTemplateProjectSpec = (\n    {\n      specId: controlledSpecId,\n    }: {\n      specId?: number\n    } = {}) => createSelector(\n    makeSelectTemplateSpecs(),\n    makeSelectSelectedTemplateSpecId(),\n    (specs: Map<number, IMap<Spec>>, specId: number) => controlledSpecId != null ? specs.get(controlledSpecId) : specs.get(specId),\n);\nexport const makeSelectSpec = (\n  {\n    specId: controlledSpecId,\n  }: {\n    specId?: number\n  } = {}) => createSelector(\n  makeSelectSpecs(),\n  makeSelectSelectedSpecId(),\n  (specs: Map<number, IMap<Spec>>, specId: number) => {\n    return controlledSpecId != null ? specs.get(controlledSpecId) : specs.get(specId);\n  },\n);\n\nexport const makeSelectSpecsInProject = (\n  {\n    projectId,\n  }: {\n    projectId?: number\n  } = {}) => createSelector(\n  makeSelectSpecs(),\n  makeSelectProject({\n    projectId,\n  }),\n  (specs: Map<number, IMap<Spec>>, project?: IMap<Project>) => {\n    if (project == null) {\n      return Map<number, IMap<Spec>>();\n    }\n\n    const specIds = project.get('specs') && project.get('specs').map((hasId) => hasId.get('id')).toSet();\n    return specs.filter((spec: IMap<Spec>, specId: number) => {\n      return specIds.has(specId);\n    });\n  },\n);\n\nexport const makeSelectSelectedDrawingId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('selectedDrawingId'),\n);\n\nexport const makeSelectDrawings = () => createSelector(\n  makeSelectSpec(),\n  (spec: IMap<Spec>) => {\n    return spec && spec.get('drawings', List());\n  },\n);\n\nexport const _makeSelectDrawing = () => createSelector(\n  makeSelectSpec(),\n  makeSelectMode(),\n  makeSelectMasterProjectspec(),\n  makeSelectTemplateProjectSpec(),\n  (_, props) => props.drawingId,\n  (spec: IMap<Spec>, mode: Mode, masterSpec: IMap<Spec>, templateSpec: IMap<Spec>, drawingId) => {\n    let finalSpec;\n    switch (mode) {\n      case Mode.master: {\n        finalSpec = masterSpec;\n        break;\n      }\n      case Mode.masterTemplate: {\n        finalSpec = templateSpec;\n        break;\n      }\n      default: {\n        finalSpec = spec;\n      }\n    }\n    return finalSpec && finalSpec.get('drawings', List()).find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n  },\n);\n\nexport const makeSelectDrawing = (\n  {\n    drawingId: controlledDrawingId,\n  }: {\n    drawingId?: number\n  } = {}) => createSelector(\n  makeSelectSpec(),\n  makeSelectSelectedDrawingId(),\n  makeSelectMode(),\n  makeSelectMasterProjectspec(),\n  makeSelectTemplateProjectSpec(),\n  (spec: IMap<Spec>, selectedDrawingId: number, mode: Mode, masterSpec: IMap<Spec>, templateSpec: IMap<Spec>) => {\n    let finalSpec;\n    switch (mode) {\n      case Mode.master: {\n        finalSpec = masterSpec;\n        break;\n      }\n      case Mode.masterTemplate: {\n        finalSpec = templateSpec;\n        break;\n      }\n      default: {\n        finalSpec = spec;\n      }\n    }\n    const drawingId = controlledDrawingId != null ? controlledDrawingId : selectedDrawingId;\n    return finalSpec && finalSpec.get('drawings', List()).find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n  },\n);\n\nexport const makeSelectSelectedSpec = (\n  {\n    specId: controlledSpecId,\n  }: {\n    specId?: number\n  } = {}) => createSelector(\n  makeSelectMode(),\n  makeSelectSpec(),\n  makeSelectMasterProjectspec(),\n  makeSelectTemplateProjectSpec(),\n  (mode: Mode, spec: IMap<Spec>,masterSpec: IMap<Spec>, templateSpec: IMap<Spec>) => {\n    let finalSpec;\n    switch (mode) {\n      case Mode.master: {\n        finalSpec = masterSpec;\n        break;\n      }\n      case Mode.masterTemplate: {\n        finalSpec = templateSpec;\n        break;\n      }\n      default: {\n        finalSpec = spec;\n      }\n    }\n    return finalSpec;\n  },\n);\n\nexport const makeSelectSelectedSpecIsAI = () => createSelector(\n  makeSelectSelectedSpec(),\n  (spec: IMap<Spec>) => {\n    return (spec || Map()).get('isAi') || false;\n  }\n);\n\nexport const makeSelectAlternativeProducts = (\n  {\n    index: controlledIndex\n  }: {\n    index?: number\n  } = {}) => createSelector(\n  makeSelectDrawing(),\n  makeSelectEditingProductIndex(),\n  (drawing: IMap<Drawing>, editProductIndex) => {\n    const index = controlledIndex != null ? controlledIndex : editProductIndex;\n    return drawing?.getIn(['products', index, 'alternativeProducts']) || List();\n  },\n);\n\nexport const makeSelectDrawingRules = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedDrawingId(),\n  (\n    state: any,\n    drawingId: number,\n  ) => state.getIn(['drawingRules', drawingId]),\n);\n\nexport const makeSelectUpdatingRules = () => createSelector(\n  selectReducerState(),\n  (\n    state: any,\n  ) => state.get('updatingRules'),\n);\n\nexport const makeSelectGettingSpec = () => createSelector(\n  selectReducerState(),\n  (\n    state: any,\n  ) => state.get('searchingSpecs'),\n);\nexport const makeSelectMissingCategory = () => createSelector(\n  makeSelectDrawingRules(),\n  (\n    drawingRules: IMap<DrawingRules>,\n  ) => drawingRules && drawingRules.get('missing') || List(),\n);\n\nexport const makeSelectRuleFails = () => createSelector(\n  makeSelectDrawingRules(),\n  (\n    drawingRules: IMap<DrawingRules>,\n  ) => drawingRules && drawingRules.get('failed') || List(),\n);\n\nexport const makeSelectPrintFormats = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('printFormats'),\n);\n\nexport const makeSelectSearchedSpecsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchedSpecsCount'),\n);\n\nexport const makeSelectSearchedSpecsHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchedSpecsHasNextPage'),\n);\n\nexport const makeSelectSearchedSpecs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchedSpecs'),\n);\n\nexport const makeSelectSearchingSpecs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('searchingSpecs'),\n);\n\nexport const makeSelectRedirectPath = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('redirectPath'),\n);\n\nexport const makeSelectCurrentSpecFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('currentSpecFiles'),\n);\n\nexport const makeSelectIsSavingAlternativeProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('isSavingAlternativeProducts'),\n);\n\nexport const makeSelectIsDeletingAlternativeProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('isDeletingAlternativeProduct'),\n);\n\nexport const makeSelectIsUpdatingSpecFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('isUpdatingSpecFiles'),\n);\n\nexport const makeSelectCopyStatus = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<ISpecReducerState>) => state.get('copyStatus'),\n);\n\nexport const makeSelectIsLinkingOrUnlinkingGenericProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('isLinkingOrUnlinkingGenericProduct'),\n);\n\nexport const makeSelectPTSpecDndMenu = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('ptSpecDndMenu'),\n);\n\nexport const makeSelectIsUpdatingDrawing = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('isUpdatingDrawing'),\n);\n\nexport const makeSelectNewDrawingId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ISpecReducerState>) => state.get('newDrawingId'),\n);\n\nexport const makeSelectMasterDrawerData = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<ISpecReducerState>) => state.get('masterSpecDrawingState'),\n);\n\nexport default {\n  selectReducerState,\n  makeSelectPrintFormats,\n  makeSelectSpec,\n  makeSelectSelectedDrawingId,\n  makeSelectDrawing,\n  makeSelectDrawingRules,\n  makeSelectMissingCategory,\n  makeSelectRuleFails,\n  makeSelectSpecsInProject,\n  makeSelectSpecOrMasterSpecId,\n  makeSelectIsSavingAlternativeProducts,\n  makeSelectCopyStatus\n};\n","var CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"Null\"] = 0] = \"Null\";\n    CharCodes[CharCodes[\"Backspace\"] = 8] = \"Backspace\";\n    CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n    CharCodes[CharCodes[\"Newline\"] = 10] = \"Newline\";\n    CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n    CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n    CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n    CharCodes[CharCodes[\"ExclamationPoint\"] = 33] = \"ExclamationPoint\";\n    CharCodes[CharCodes[\"Hash\"] = 35] = \"Hash\";\n    CharCodes[CharCodes[\"Percent\"] = 37] = \"Percent\";\n    CharCodes[CharCodes[\"LeftParen\"] = 40] = \"LeftParen\";\n    CharCodes[CharCodes[\"RightParen\"] = 41] = \"RightParen\";\n    CharCodes[CharCodes[\"Plus\"] = 43] = \"Plus\";\n    CharCodes[CharCodes[\"Minus\"] = 45] = \"Minus\";\n    CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n    CharCodes[CharCodes[\"Period\"] = 46] = \"Period\";\n    CharCodes[CharCodes[\"ForwardSlash\"] = 47] = \"ForwardSlash\";\n    CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n    CharCodes[CharCodes[\"One\"] = 49] = \"One\";\n    CharCodes[CharCodes[\"Two\"] = 50] = \"Two\";\n    CharCodes[CharCodes[\"Three\"] = 51] = \"Three\";\n    CharCodes[CharCodes[\"Four\"] = 52] = \"Four\";\n    CharCodes[CharCodes[\"Five\"] = 53] = \"Five\";\n    CharCodes[CharCodes[\"Six\"] = 54] = \"Six\";\n    CharCodes[CharCodes[\"Seven\"] = 55] = \"Seven\";\n    CharCodes[CharCodes[\"Eight\"] = 56] = \"Eight\";\n    CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n    CharCodes[CharCodes[\"LessThan\"] = 60] = \"LessThan\";\n    CharCodes[CharCodes[\"GreaterThan\"] = 62] = \"GreaterThan\";\n    CharCodes[CharCodes[\"A\"] = 65] = \"A\";\n    CharCodes[CharCodes[\"D\"] = 68] = \"D\";\n    CharCodes[CharCodes[\"E\"] = 69] = \"E\";\n    CharCodes[CharCodes[\"F\"] = 70] = \"F\";\n    CharCodes[CharCodes[\"O\"] = 79] = \"O\";\n    CharCodes[CharCodes[\"P\"] = 80] = \"P\";\n    CharCodes[CharCodes[\"R\"] = 82] = \"R\";\n    CharCodes[CharCodes[\"LeftSquareBracket\"] = 91] = \"LeftSquareBracket\";\n    CharCodes[CharCodes[\"BackSlash\"] = 92] = \"BackSlash\";\n    CharCodes[CharCodes[\"RightSquareBracket\"] = 93] = \"RightSquareBracket\";\n    CharCodes[CharCodes[\"a\"] = 97] = \"a\";\n    CharCodes[CharCodes[\"b\"] = 98] = \"b\";\n    CharCodes[CharCodes[\"d\"] = 100] = \"d\";\n    CharCodes[CharCodes[\"e\"] = 101] = \"e\";\n    CharCodes[CharCodes[\"f\"] = 102] = \"f\";\n    CharCodes[CharCodes[\"i\"] = 105] = \"i\";\n    CharCodes[CharCodes[\"j\"] = 106] = \"j\";\n    CharCodes[CharCodes[\"l\"] = 108] = \"l\";\n    CharCodes[CharCodes[\"m\"] = 109] = \"m\";\n    CharCodes[CharCodes[\"n\"] = 110] = \"n\";\n    CharCodes[CharCodes[\"o\"] = 111] = \"o\";\n    CharCodes[CharCodes[\"r\"] = 114] = \"r\";\n    CharCodes[CharCodes[\"s\"] = 115] = \"s\";\n    CharCodes[CharCodes[\"t\"] = 116] = \"t\";\n    CharCodes[CharCodes[\"u\"] = 117] = \"u\";\n    CharCodes[CharCodes[\"x\"] = 120] = \"x\";\n    CharCodes[CharCodes[\"LeftCurly\"] = 123] = \"LeftCurly\";\n    CharCodes[CharCodes[\"RightCurly\"] = 125] = \"RightCurly\";\n    CharCodes[CharCodes[\"Tilde\"] = 126] = \"Tilde\";\n})(CharCodes || (CharCodes = {}));\nexport default CharCodes;\n//# sourceMappingURL=CharCodes.js.map","import i18next from 'i18next';\n\nimport {\n  isValidDate\n} from 'ats-utils/src';\n\nexport default ({\n  minDate,\n  minDateMessage,\n  maxDate,\n  maxDateMessage,\n}: {\n  minDate?: Date;\n  minDateMessage?: string;\n  maxDate?: Date;\n  maxDateMessage?: string;\n}) => (value: any) => {\n  const potentialDate = new Date(value);\n  // console.error('minDate', {\n  //   minDate,\n  //   value,\n  //   isValidDate,\n  //   potentialDate\n  // });\n  if (!isValidDate(potentialDate)) {\n    return i18next.t(['translations:errors.isValidDate', 'Invalid date']);\n  }\n  if (minDate && isValidDate(minDate) && potentialDate < minDate) {\n    return minDateMessage != null ? minDateMessage : i18next.t(['translations:errors.isLessThanMinDate', 'Date is less than minimum date']);\n  }\n  if (maxDate && isValidDate(maxDate) && potentialDate > maxDate) {\n    return maxDateMessage != null ? maxDateMessage : i18next.t(['translations:errors.isMoreThanMaxDate', 'Date is more than maximum date']);\n  }\n  return undefined;\n};","import i18next from 'i18next';\nimport {\n  isString as _isString,\n} from 'lodash';\nimport moment from 'moment';\n\nexport const required = (value: any) => {\n  return (value != null) ? undefined : i18next.t(['translations:errors.required', 'Required']);\n};\nexport const requiredList = (value: any) => {\n  return (value && (value.count?.() || value.length)) ? undefined : i18next.t(['translations:errors.required', 'Required']);\n};\nexport const requiredCheckbox = (value: any) => {\n  return (value && !value.count()) ? i18next.t(['translations:errors.required', 'Required']) : undefined;\n};\nexport const isString = (value: any) => {\n  return _isString(value) ? undefined : i18next.t(['translations:errors.isString', 'Must be a string']);\n};\nexport const isNotEmpty = (value: any) => {\n  return ((value != null) && (String(value).replace(/\\s/g, '') !== '')) ? undefined : i18next.t(['translations:errors.isNotEmpty', 'Input cannot be empty']);\n};\nexport const isNotEmptyString = (value: any) => {\n  return (_isString(value) && (value.replace(/\\s/g, '') !== '')) ? undefined : i18next.t(['translations:errors.isNotEmptyString', 'String cannot be empty']);\n};\nexport const isNumber = (value: any) => {\n  return (value != null && !isNaN(Number(value))) ? undefined : i18next.t(['translations:errors.isNumber', 'Must be a number']);\n};\nexport const isNumberWithoutComma = (value: any) => {\n  return (value != null && !isNaN(Number(value))) ? undefined : i18next.t(['translations:errors.isNumberWithoutComma', 'Must be a number, no special character']);\n};\nexport const isNumberGreaterThanZero = (value: any) => {\n  return (value == null || value === '' || (value !== null  && Number(value) > 0 && !isNaN(Number(value)))) ? undefined : i18next.t(['translations:errors.isNumberGreaterThanZero', 'Must be a number greater than 0, no special character']);\n};\n\nexport const isBiggerThan = (valueA: any) => (valueB: any) => {\n  if (valueA && valueB) {\n    if (Number(valueA) < Number(valueB)) {\n      return undefined;\n    } else {\n      return i18next.t('translations:errors.isBiggerThan', { valueA, defaultValue: `Must be bigger than ${valueA}` });\n    }\n  }\n  return undefined;\n};\n\nexport const isSmallerThan = (valueA: any) => (valueB: any) => {\n  if (valueA && valueB) {\n    if (Number(valueA) > Number(valueB)) {\n      return undefined;\n    } else {\n      return i18next.t('translations:errors.isSmallerThan', { valueA, defaultValue: `Must be smaller than ${valueA}` });\n    }\n  }\n  return undefined;\n};\n\nexport const isPositiveFloatSmallerThan = (limit: number, decimalLimit: number = 6, onlyWhole: boolean = false) => (value: any) => {\n  if (Number(value) > limit) {\n    return i18next.t('translations:errors.isPositiveFloatSmallerThan', { limit, defaultValue: `Must be a value smaller than ${limit} or empty` });\n  }\n\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && Number(value)) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n\n    const regex = /^\\d*\\.?(\\d*)?$/;\n    if (regex.test(value) && Number(value) > 0 && Number(value) <= limit) {\n      // limit the number of decimals\n      if (value.split('.')[1]?.length > decimalLimit) {\n        return i18next.t('translations:errors.isFloatDecimalLimit', { decimalLimit, defaultValue: `Must be a value with no more than ${decimalLimit} decimal places or empty` });\n      }\n      if (onlyWhole && Number(value) % 1 !== 0) {\n        return i18next.t(['translations:errors.isWholeNumber', 'Must be a whole number or empty']);\n      }\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a number or empty']);\n};\n\nexport const isNonNegativeFloatSmallerThan = (limit: number, decimalLimit: number = 6, onlyWhole: boolean = false) => (value: any) => {\n  if (Number(value) > limit) {\n    return i18next.t('translations:errors.isNonNegativeFloatSmallerThan', { limit, defaultValue: `Must be a number smaller than ${limit} or empty` });\n  }\n\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && value >= 0) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n\n    const regex = /^\\d*\\.?(\\d*)?$/;\n    if (regex.test(value) && Number(value) >= 0 && Number(value) <= limit) {\n      // limit the number of decimals\n      if (value.split('.')[1]?.length > decimalLimit) {\n        return i18next.t('translations:errors.isFloatDecimalLimit', { decimalLimit, defaultValue: `Must be a value with no more than ${decimalLimit} decimal places or empty` });\n      }\n      if (onlyWhole && Number(value) % 1 !== 0) {\n        return i18next.t(['translations:errors.isWholeNumber', 'Must be a whole number or empty']);\n      }\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a number or empty']);\n};\n\nexport const SIGNED_FLOAT_REGEX = /^-?\\d*\\.?(\\d*)?$/;\n\n// allows negative values, unlike isNonNegativeFloatSmallerThan - e.g. outdoor air temperatures\nexport const isFloatBetween = (min: number, max: number, decimalLimit: number = 6) => (value: any) => {\n  const outOfRangeError = () => i18next.t('translations:errors.isFloatBetween', { min, max, defaultValue: `Must be a number between ${min} and ${max} or empty` });\n\n  if (value == null || value === '') {\n    return undefined;\n  }\n  if (typeof value === 'number') {\n    return (value >= min && value <= max) ? undefined : outOfRangeError();\n  }\n  if (typeof value === 'string' && SIGNED_FLOAT_REGEX.test(value) && !isNaN(Number(value))) {\n    // limit the number of decimals\n    if (value.split('.')[1]?.length > decimalLimit) {\n      return i18next.t('translations:errors.isFloatDecimalLimit', { decimalLimit, defaultValue: `Must be a value with no more than ${decimalLimit} decimal places or empty` });\n    }\n    return (Number(value) >= min && Number(value) <= max) ? undefined : outOfRangeError();\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a number or empty']);\n};\n\nexport const POSITIVE_INTEGER_REGEX = /^[1-9]+[0-9]*$/;\n\nexport const NON_NEGATIVE_INTEGER_REGEX = /^(0|[1-9]\\d*)$/;\n\nexport const isPositiveIntegerSmallerThan = (limit: number) => (value: any) => {\n  if (Number(value) > limit) {\n    return i18next.t('translations:errors.isPositiveIntegerSmallerThan', { limit, defaultValue: `Must be a whole number smaller than ${limit} or empty` });\n  }\n\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && Number.isInteger(value)) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n    if (POSITIVE_INTEGER_REGEX.test(value) && Number(value) <= limit) {\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a whole number or empty']);\n};\n\nexport const isNonNegativeIntegerSmallerThan = (limit: number) => (value: any) => {\n  if (Number(value) > limit) {\n    return i18next.t('translations:errors.isNonNegativeIntegerSmallerThan', { limit, defaultValue: `Must be a whole number smaller than ${limit} or empty` });\n  }\n\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n    if (NON_NEGATIVE_INTEGER_REGEX.test(value) && Number(value) <= limit) {\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a whole number or empty']);\n};\n\nexport const isInteger = (value: any) => {\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && Number.isInteger(value)) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n    if (POSITIVE_INTEGER_REGEX.test(value)) {\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isEmptyOrNumber', 'Must be a number or empty']);\n};\n\nexport const isIntegerInLimit = (value: any) => {\n  if (value == null) {\n    return undefined;\n  }\n  if (typeof value === 'number' && Number.isInteger(value)) {\n    return undefined;\n  }\n  if (typeof value === 'string') {\n    if (value === '') {\n      return undefined;\n    }\n    if (POSITIVE_INTEGER_REGEX.test(value) && Number(value) <= 2147483647) {\n      return undefined;\n    }\n  }\n  return i18next.t(['translations:errors.isIntegerInLimit', 'Must be empty or a positive integer less than 2147483648']);\n};\n\nexport const isEmptyOrContent = (value: any) => {\n  return (value == null || value === '' || (String(value).replace(/\\s/g, '') !== '')) ? undefined : i18next.t(['translations:errors.isEmptyOrContent', 'Must be empty or not just spaces']);\n};\n\n// Should be used with 'required' validator if you want to make sure there is a input value\nexport const isValidMomentDate = (date: any) => {\n  if (date == null || date === '') {\n    return undefined;\n  }\n  if (moment(date, 'YYYY-MM-DD').isValid()) {\n    return undefined;\n  }\n  return i18next.t(['translations:errors.isValidDate', 'Invalid date']);\n};\nexport const isValidYearMonthMomentDate = (date: any) => {\n  if (date == null || date === '') {\n    return undefined;\n  }\n  if (moment(date, 'YYYY-MM').isValid()) {\n    return undefined;\n  }\n  return i18next.t(['translations:errors.isValidDate', 'Invalid date']);\n};\nexport const isNotEmptyStringRequired = (value: any) => {\n  return (_isString(value) && (value.replace(/\\s/g, '') !== '')) ? undefined : i18next.t(['translations:errors.required', 'Required']);\n};\nexport const isValidEmailAddress = (value: any) => {\n  return (_isString(value) && (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,63}$/i.test(value))) ? undefined : i18next.t(['translations:errors.validEmail', 'Email format is incorrect']);\n};\nexport const isValidEmailAddressOrEmpty = (value: any) => {\n  return (value == null || value === '' || (_isString(value) && (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,63}$/i.test(value)))) ? undefined : i18next.t(['translations:errors.validEmail', 'Email format is incorrect']);\n};\nexport const isValidUrl = (value: any) => {\n  return (_isString(value) && (/https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)/i.test(value))) ? undefined : i18next.t(['translations:errors.validUrl', 'URL format is incorrect']);\n};\nexport const isValidExternalUrl = (value: any) => {\n  return (_isString(value) && (/https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)/i.test(value))) && !value.toLowerCase().includes('.atssoftware.com') ? undefined : i18next.t(['translations:errors.validExternalUrl', 'External URL format is incorrect']);\n};\nexport const isValidPassword = (value: any) => {\n  const  strongRegex = new RegExp('^(?=.*[a-zA-Z])(?=.*[0-9])(?=.{9,})');\n  return (_isString(value) && (strongRegex.test(value))) ? undefined : i18next.t(['translations:errors.validPassword', 'Please input a minimum of 9 characters with at least 1 letter and number.']);\n};\nexport const isValidExtension = (value: any) => {\n  const invalidLength = value && value.length > 5;\n  const invalidCharacters =  value && isNaN(Number(value));\n  return invalidLength ? i18next.t(['translations:errors.isValidExtensionLength', 'Max limit of 5 characters']) : invalidCharacters ? i18next.t(['translations:errors.isNumber', 'Must be a number']) : undefined;\n};\nexport const passwordsMustMatch = (value: any, allValues: any) => {\n  const selecter = allValues.toJS();\n  const password = selecter['password'];\n  return (value === password) ? undefined : i18next.t(['translations:errors.matchPassword', 'The password and confirmation password do not match.']);\n};\n// date range general validate function, see ProjectListFilter for use example\nexport const dateValidateFunc = (type, allValues) => {\n  const gteDate = allValues.getIn([type, 'gte']);\n  const lteDate = allValues.getIn([type, 'lte']);\n  const convertDate = (date) => typeof date === 'string' ? date : date.toISOString();\n  if (gteDate && lteDate) {\n    if (convertDate(gteDate) > convertDate(lteDate)) {\n      return i18next.t(['translations:errors.isValidDateRange', 'End Date needs to be after Start Date']);\n    }\n  }\n  return undefined;\n};\n\nexport const dateDiffValidateFunc = (type, typeLabel, diff, allValues) => {\n  const gteDate = allValues.getIn([type, 'gte']);\n  const lteDate = allValues.getIn([type, 'lte']) || moment().endOf('day').toISOString();\n  if (gteDate && lteDate) {\n    const daysApart = moment(lteDate).diff(moment(gteDate), 'days');\n    if (daysApart > diff) {\n      return i18next.t(['translations:errors.isValidDateDiffRange', `${typeLabel} is restricted to a ${diff} days range for Advanced Report, the range currently is ${daysApart} days.`], { typeLabel, diff, daysApart });\n    }\n  }\n  return undefined;\n};\n\nexport const dateNoLaterThan = (date: Date, noLaterThan: Date, message: string) => {\n  // We only want to compare the day/date, not the time. Set time to 0 for both date arguments before comparison.\n  date.setHours(0,0,0,0);\n  noLaterThan.setHours(0,0,0,0);\n  if (date.getTime() > noLaterThan.getTime()) {\n    return message;\n  }\n  return undefined;\n};\n\nexport const dateNoEarlierThan = (date: Date, noEarlierThan: Date, message: string) => {\n  // We only want to compare the day/date, not the time. Set time to 0 for both date arguments before comparison.\n  date.setHours(0,0,0,0);\n  noEarlierThan.setHours(0,0,0,0);\n  if (date.getTime() < noEarlierThan.getTime()) {\n    return message;\n  }\n  return undefined;\n};\n// value range general validate function, see ProjectListFilter for user example\nexport const MinMaxValidateFunc = (type, allValues) => {\n  const min = allValues.getIn([type, 'gte']);\n  const max = allValues.getIn([type, 'lte']);\n\n  if (min && max && Number(min) > Number(max)) {\n    return i18next.t(['translations:errors.isValidValueRange', 'Maximum needs to be larger than Minimum']);\n  }\n  return undefined;\n};\nexport const atLeastOneRequired = (keys, errorMsg) => (value, allValues) => {\n  for (const key of keys) {\n    if (allValues.getIn(key) != null) {\n      return undefined;\n    }\n  }\n  return errorMsg;\n};\nexport const maxStringLength = (limit: number) => (value: string) => {\n  if (value && value.length > limit) {\n    return i18next.t('translations:errors.maxLengthCharacters', { limit });\n  }\n};\n\nexport {\n  default as makeDateValidator\n} from './makeDateValidator';\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}","import { Event, Result, Status } from '@amplitude/analytics-types';\n\nexport const buildResult = (event: Event, code = 0, message: string = Status.Unknown): Result => {\n  return { event, code, message };\n};\n","/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nexport const UUID = function (a?: any): string {\n  return a // if the placeholder was passed, return\n    ? // a random number from 0 to 15\n      (\n        a ^ // unless b is 8,\n        ((Math.random() * // in which case\n          16) >> // a random number from\n          (a / 4))\n      ) // 8 to 11\n        .toString(16) // in hexadecimal\n    : // or otherwise a concatenated string:\n      (\n        String(1e7) + // 10000000 +\n        String(-1e3) + // -1000 +\n        String(-4e3) + // -4000 +\n        String(-8e3) + // -80000000 +\n        String(-1e11)\n      ) // -100000000000,\n        .replace(\n          // replacing\n          /[018]/g, // zeroes, ones, and eights with\n          UUID, // random hex digits\n        );\n};\n","import {\n  Config,\n  DestinationContext as Context,\n  DestinationPlugin,\n  Event,\n  InvalidResponse,\n  PayloadTooLargeResponse,\n  RateLimitResponse,\n  Response,\n  Result,\n  Status,\n  SuccessResponse,\n} from '@amplitude/analytics-types';\nimport {\n  INVALID_API_KEY,\n  MAX_RETRIES_EXCEEDED_MESSAGE,\n  MISSING_API_KEY_MESSAGE,\n  SUCCESS_MESSAGE,\n  UNEXPECTED_ERROR_MESSAGE,\n} from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig } from '../config';\nimport { UUID } from '../utils/uuid';\n\nfunction getErrorMessage(error: unknown) {\n  if (error instanceof Error) return error.message;\n  return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n  let responseBodyString = '';\n  try {\n    if ('body' in res) {\n      responseBodyString = JSON.stringify(res.body, null, 2);\n    }\n  } catch {\n    // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n  }\n  return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n  name = 'amplitude';\n  type = 'destination' as const;\n\n  retryTimeout = 1000;\n  throttleTimeout = 30000;\n  storageKey = '';\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  private scheduled: ReturnType<typeof setTimeout> | null = null;\n  queue: Context[] = [];\n\n  async setup(config: Config): Promise<undefined> {\n    this.config = config;\n\n    this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n    const unsent = await this.config.storageProvider?.get(this.storageKey);\n    if (unsent && unsent.length > 0) {\n      void Promise.all(unsent.map((event) => this.execute(event))).catch();\n    }\n\n    return Promise.resolve(undefined);\n  }\n\n  execute(event: Event): Promise<Result> {\n    // Assign insert_id for dropping invalid event later\n    if (!event.insert_id) {\n      event.insert_id = UUID();\n    }\n\n    return new Promise((resolve) => {\n      const context = {\n        event,\n        attempts: 0,\n        callback: (result: Result) => resolve(result),\n        timeout: 0,\n      };\n      void this.addToQueue(context);\n    });\n  }\n\n  getTryableList(list: Context[]) {\n    return list.filter((context) => {\n      if (context.attempts < this.config.flushMaxRetries) {\n        context.attempts += 1;\n        return true;\n      }\n      void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n      return false;\n    });\n  }\n\n  scheduleTryable(list: Context[], shouldAddToQueue = false) {\n    list.forEach((context) => {\n      // Only need to concat the queue for the first time\n      if (shouldAddToQueue) {\n        this.queue = this.queue.concat(context);\n      }\n      if (context.timeout === 0) {\n        this.schedule(this.config.flushIntervalMillis);\n        return;\n      }\n\n      setTimeout(() => {\n        context.timeout = 0;\n        this.schedule(0);\n      }, context.timeout);\n    });\n  }\n\n  addToQueue(...list: Context[]) {\n    const tryable = this.getTryableList(list);\n    this.scheduleTryable(tryable, true);\n    this.saveEvents();\n  }\n\n  schedule(timeout: number) {\n    if (this.scheduled || this.config.offline) {\n      return;\n    }\n\n    this.scheduled = setTimeout(() => {\n      void this.flush(true).then(() => {\n        if (this.queue.length > 0) {\n          this.schedule(timeout);\n        }\n      });\n    }, timeout);\n  }\n\n  async flush(useRetry = false) {\n    // Skip flush if offline\n    if (this.config.offline) {\n      this.config.loggerProvider.debug('Skipping flush while offline.');\n      return;\n    }\n\n    const list: Context[] = [];\n    const later: Context[] = [];\n    this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n\n    if (this.scheduled) {\n      clearTimeout(this.scheduled);\n      this.scheduled = null;\n    }\n\n    const batches = chunk(list, this.config.flushQueueSize);\n\n    await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n\n    this.scheduleTryable(later);\n  }\n\n  async send(list: Context[], useRetry = true) {\n    if (!this.config.apiKey) {\n      return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n    }\n\n    const payload = {\n      api_key: this.config.apiKey,\n      events: list.map((context) => {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { extra, ...eventWithoutExtra } = context.event;\n        return eventWithoutExtra;\n      }),\n      options: {\n        min_id_length: this.config.minIdLength,\n      },\n      client_upload_time: new Date().toISOString(),\n    };\n\n    try {\n      const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n      const res = await this.config.transportProvider.send(serverUrl, payload);\n      if (res === null) {\n        this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n        return;\n      }\n      if (!useRetry) {\n        if ('body' in res) {\n          this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n        } else {\n          this.fulfillRequest(list, res.statusCode, res.status);\n        }\n        return;\n      }\n      this.handleResponse(res, list);\n    } catch (e) {\n      const errorMessage = getErrorMessage(e);\n      this.config.loggerProvider.error(errorMessage);\n      this.fulfillRequest(list, 0, errorMessage);\n    }\n  }\n\n  handleResponse(res: Response, list: Context[]) {\n    const { status } = res;\n\n    switch (status) {\n      case Status.Success: {\n        this.handleSuccessResponse(res, list);\n        break;\n      }\n      case Status.Invalid: {\n        this.handleInvalidResponse(res, list);\n        break;\n      }\n      case Status.PayloadTooLarge: {\n        this.handlePayloadTooLargeResponse(res, list);\n        break;\n      }\n      case Status.RateLimit: {\n        this.handleRateLimitResponse(res, list);\n        break;\n      }\n      default: {\n        // log intermediate event status before retry\n        this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n        this.handleOtherResponse(list);\n        break;\n      }\n    }\n  }\n\n  handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n    this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n  }\n\n  handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n    if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    const dropIndex = [\n      ...Object.values(res.body.eventsWithInvalidFields),\n      ...Object.values(res.body.eventsWithMissingFields),\n      ...Object.values(res.body.eventsWithInvalidIdLengths),\n      ...res.body.silencedEvents,\n    ].flat();\n    const dropIndexSet = new Set(dropIndex);\n\n    const retry = list.filter((context, index) => {\n      if (dropIndexSet.has(index)) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    const tryable = this.getTryableList(retry);\n    this.scheduleTryable(tryable);\n  }\n\n  handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n    if (list.length === 1) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    // log intermediate event status before retry\n    this.config.loggerProvider.warn(getResponseBodyString(res));\n\n    this.config.flushQueueSize /= 2;\n\n    const tryable = this.getTryableList(list);\n    this.scheduleTryable(tryable);\n  }\n\n  handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n    const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n    const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n    const throttledIndex = res.body.throttledEvents;\n    const dropUserIdsSet = new Set(dropUserIds);\n    const dropDeviceIdsSet = new Set(dropDeviceIds);\n    const throttledIndexSet = new Set(throttledIndex);\n\n    const retry = list.filter((context, index) => {\n      if (\n        (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n        (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n      ) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      if (throttledIndexSet.has(index)) {\n        context.timeout = this.throttleTimeout;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    const tryable = this.getTryableList(retry);\n    this.scheduleTryable(tryable);\n  }\n\n  handleOtherResponse(list: Context[]) {\n    const later = list.map((context) => {\n      context.timeout = context.attempts * this.retryTimeout;\n      return context;\n    });\n\n    const tryable = this.getTryableList(later);\n    this.scheduleTryable(tryable);\n  }\n\n  fulfillRequest(list: Context[], code: number, message: string) {\n    this.removeEvents(list);\n    list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n  }\n\n  /**\n   * This is called on\n   * 1) new events are added to queue; or\n   * 2) response comes back for a request\n   *\n   * Update the event storage based on the queue\n   */\n  saveEvents() {\n    if (!this.config.storageProvider) {\n      return;\n    }\n\n    const updatedEvents = this.queue.map((context) => context.event);\n    void this.config.storageProvider.set(this.storageKey, updatedEvents);\n  }\n\n  /**\n   * This is called on response comes back for a request\n   */\n  removeEvents(eventsToRemove: Context[]) {\n    this.queue = this.queue.filter(\n      (queuedContext) => !eventsToRemove.some((context) => context.event.insert_id === queuedContext.event.insert_id),\n    );\n\n    this.saveEvents();\n  }\n}\n","import { BaseEvent } from './base-event';\n\nexport interface Identify {\n  getUserProperties(): IdentifyUserProperties;\n  set(property: string, value: ValidPropertyType): Identify;\n  setOnce(property: string, value: ValidPropertyType): Identify;\n  append(property: string, value: ValidPropertyType): Identify;\n  prepend(property: string, value: ValidPropertyType): Identify;\n  postInsert(property: string, value: ValidPropertyType): Identify;\n  preInsert(property: string, value: ValidPropertyType): Identify;\n  remove(property: string, value: ValidPropertyType): Identify;\n  add(property: string, value: number): Identify;\n  unset(property: string): Identify;\n  clearAll(): Identify;\n}\n\nexport enum IdentifyOperation {\n  // Base Operations to set values\n  SET = '$set',\n  SET_ONCE = '$setOnce',\n\n  // Operations around modifying existing values\n  ADD = '$add',\n  APPEND = '$append',\n  PREPEND = '$prepend',\n  REMOVE = '$remove',\n\n  // Operations around appending values *if* they aren't present\n  PREINSERT = '$preInsert',\n  POSTINSERT = '$postInsert',\n\n  // Operations around removing properties/values\n  UNSET = '$unset',\n  CLEAR_ALL = '$clearAll',\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType };\n\ninterface BaseOperationConfig {\n  [key: string]: ValidPropertyType;\n}\n\nexport interface IdentifyUserProperties {\n  // Add operations can only take numbers\n  [IdentifyOperation.ADD]?: { [key: string]: number };\n\n  // This reads the keys of the passed object, but the values are not used\n  [IdentifyOperation.UNSET]?: BaseOperationConfig;\n  // This option does not read the key as it unsets all user properties\n  [IdentifyOperation.CLEAR_ALL]?: any;\n\n  // These operations can take numbers, strings, or arrays of both.\n  [IdentifyOperation.SET]?: BaseOperationConfig;\n  [IdentifyOperation.SET_ONCE]?: BaseOperationConfig;\n  [IdentifyOperation.APPEND]?: BaseOperationConfig;\n  [IdentifyOperation.PREPEND]?: BaseOperationConfig;\n  [IdentifyOperation.POSTINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.PREINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.REMOVE]?: BaseOperationConfig;\n}\n\nexport type UserProperties =\n  | IdentifyUserProperties\n  | {\n      [key in Exclude<string, IdentifyOperation>]: any;\n    };\n\nexport interface Revenue {\n  getEventProperties(): RevenueEventProperties;\n  setProductId(productId: string): Revenue;\n  setQuantity(quantity: number): Revenue;\n  setPrice(price: number): Revenue;\n  setRevenueType(revenueType: string): Revenue;\n  setEventProperties(properties: { [key: string]: any }): Revenue;\n  setRevenue(revenue: number): Revenue;\n}\n\nexport enum RevenueProperty {\n  REVENUE_PRODUCT_ID = '$productId',\n  REVENUE_QUANTITY = '$quantity',\n  REVENUE_PRICE = '$price',\n  REVENUE_TYPE = '$revenueType',\n  REVENUE = '$revenue',\n}\n\nexport interface RevenueEventProperties {\n  [RevenueProperty.REVENUE_PRODUCT_ID]?: string;\n  [RevenueProperty.REVENUE_QUANTITY]?: number;\n  [RevenueProperty.REVENUE_PRICE]?: number;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE]?: number;\n}\n\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport enum SpecialEventType {\n  IDENTIFY = '$identify',\n  GROUP_IDENTIFY = '$groupidentify',\n  REVENUE = 'revenue_amount',\n}\n\nexport interface TrackEvent extends BaseEvent {\n  event_type: Exclude<string, SpecialEventType>;\n}\n\nexport interface IdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.IDENTIFY;\n  user_properties: UserProperties;\n}\n\nexport interface GroupIdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.GROUP_IDENTIFY;\n  group_properties: UserProperties;\n}\n\nexport interface RevenueEvent extends BaseEvent {\n  event_type: SpecialEventType.REVENUE;\n  event_properties:\n    | RevenueEventProperties\n    | {\n        [key: string]: any;\n      };\n}\n\nexport type Event = TrackEvent | IdentifyEvent | GroupIdentifyEvent | RevenueEvent;\n","export const getSuccessMessage = (sessionId: number) =>\n  `Session replay event batch tracked successfully for session id ${sessionId}`;\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, event batch rejected';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Session replay event batch rejected due to exceeded retry count';\nexport const STORAGE_FAILURE = 'Failed to store session replay events in IndexedDB';\nexport const MISSING_DEVICE_ID_MESSAGE = 'Session replay event batch not sent due to missing device ID';\nexport const MISSING_API_KEY_MESSAGE = 'Session replay event batch not sent due to missing api key';\n","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\n\nexport const chunk = <T>(arr: T[], size: number) => {\n  const chunkSize = Math.max(size, 1);\n  return arr.reduce<T[][]>((chunks, element, index) => {\n    const chunkIndex = Math.floor(index / chunkSize);\n    if (!chunks[chunkIndex]) {\n      chunks[chunkIndex] = [];\n    }\n    chunks[chunkIndex].push(element);\n    return chunks;\n  }, []);\n};\n","const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n  if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n    return false;\n  }\n  for (const key in properties) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const value = properties[key];\n    if (!isValidProperties(key, value)) return false;\n  }\n  return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n  if (typeof property !== 'string') return false;\n  if (Array.isArray(value)) {\n    let isValid = true;\n    for (const valueElement of value) {\n      if (Array.isArray(valueElement)) {\n        return false;\n      } else if (typeof valueElement === 'object') {\n        isValid = isValid && isValidObject(valueElement as object);\n      } else if (!['number', 'string'].includes(typeof valueElement)) {\n        return false;\n      }\n      if (!isValid) {\n        return false;\n      }\n    }\n  } else if (value === null || value === undefined) {\n    return false;\n  } else if (typeof value === 'object') {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return isValidObject(value);\n  } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n    return false;\n  }\n  return true;\n};\n","import {\n  IdentifyOperation,\n  IdentifyUserProperties,\n  ValidPropertyType,\n  Identify as IIdentify,\n} from '@amplitude/analytics-types';\nimport { UNSET_VALUE } from './constants';\nimport { isValidProperties } from './utils/valid-properties';\n\nexport class Identify implements IIdentify {\n  protected readonly _propertySet: Set<string> = new Set<string>();\n  protected _properties: IdentifyUserProperties = {};\n\n  public getUserProperties(): IdentifyUserProperties {\n    return { ...this._properties };\n  }\n\n  public set(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET, property, value);\n    return this;\n  }\n\n  public setOnce(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n    return this;\n  }\n\n  public append(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.APPEND, property, value);\n    return this;\n  }\n\n  public prepend(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREPEND, property, value);\n    return this;\n  }\n\n  public postInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n    return this;\n  }\n\n  public preInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREINSERT, property, value);\n    return this;\n  }\n\n  public remove(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.REMOVE, property, value);\n    return this;\n  }\n\n  public add(property: string, value: number): Identify {\n    this._safeSet(IdentifyOperation.ADD, property, value);\n    return this;\n  }\n\n  public unset(property: string): Identify {\n    this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n    return this;\n  }\n\n  public clearAll(): Identify {\n    // When clear all happens, all properties are unset. Reset the entire object.\n    this._properties = {};\n    this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n\n    return this;\n  }\n\n  // Returns whether or not this set actually worked.\n  private _safeSet(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._validate(operation, property, value)) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      let userPropertyMap: any = this._properties[operation];\n      if (userPropertyMap === undefined) {\n        userPropertyMap = {};\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        this._properties[operation] = userPropertyMap;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      userPropertyMap[property] = value;\n      this._propertySet.add(property);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _validate(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n      // clear all already set. Skipping operation;\n      return false;\n    }\n\n    if (this._propertySet.has(property)) {\n      // Property already used. Skipping operation\n      return false;\n    }\n\n    if (operation === IdentifyOperation.ADD) {\n      return typeof value === 'number';\n    }\n\n    if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n      return isValidProperties(property, value);\n    }\n    return true;\n  }\n}\n","import {\n  RevenueProperty,\n  RevenueEventProperties,\n  Revenue as IRevenue,\n  ValidPropertyType,\n} from '@amplitude/analytics-types';\nimport { isValidObject } from './utils/valid-properties';\n\nexport class Revenue implements IRevenue {\n  private productId: string;\n  private quantity: number;\n  private price: number;\n  private revenueType?: string;\n  private properties?: { [key: string]: any };\n  private revenue?: number;\n\n  constructor() {\n    this.productId = '';\n    this.quantity = 1;\n    this.price = 0.0;\n  }\n\n  setProductId(productId: string) {\n    this.productId = productId;\n    return this;\n  }\n\n  setQuantity(quantity: number) {\n    if (quantity > 0) {\n      this.quantity = quantity;\n    }\n    return this;\n  }\n\n  setPrice(price: number) {\n    this.price = price;\n    return this;\n  }\n\n  setRevenueType(revenueType: string) {\n    this.revenueType = revenueType;\n    return this;\n  }\n\n  setRevenue(revenue: number) {\n    this.revenue = revenue;\n    return this;\n  }\n\n  setEventProperties(properties: { [key: string]: ValidPropertyType }) {\n    if (isValidObject(properties)) {\n      this.properties = properties;\n    }\n    return this;\n  }\n\n  getEventProperties(): RevenueEventProperties {\n    const eventProperties: RevenueEventProperties = this.properties ? { ...this.properties } : {};\n    eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n    eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n    eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n    eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n    eventProperties[RevenueProperty.REVENUE] = this.revenue;\n    return eventProperties;\n  }\n}\n","import {\n  BeforePlugin,\n  Config,\n  CoreClient,\n  DestinationPlugin,\n  EnrichmentPlugin,\n  Event,\n  EventCallback,\n  Plugin,\n  Result,\n} from '@amplitude/analytics-types';\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\n\nexport class Timeline {\n  queue: [Event, EventCallback][] = [];\n  // Flag to guarantee one schedule apply is running\n  applying = false;\n  // Flag indicates whether timeline is ready to process event\n  // Events collected before timeline is ready will stay in the queue to be processed later\n  plugins: Plugin[] = [];\n\n  constructor(private client: CoreClient) {}\n\n  async register(plugin: Plugin, config: Config) {\n    plugin.name = plugin.name ?? UUID();\n    plugin.type = plugin.type ?? 'enrichment';\n    await plugin.setup?.(config, this.client);\n    this.plugins.push(plugin);\n  }\n\n  async deregister(pluginName: string) {\n    const index = this.plugins.findIndex((plugin) => plugin.name === pluginName);\n    const plugin = this.plugins[index];\n    this.plugins.splice(index, 1);\n    await plugin.teardown?.();\n  }\n\n  reset(client: CoreClient) {\n    this.applying = false;\n    const plugins = this.plugins;\n    plugins.map((plugin) => plugin.teardown?.());\n    this.plugins = [];\n    this.client = client;\n  }\n\n  push(event: Event) {\n    return new Promise<Result>((resolve) => {\n      this.queue.push([event, resolve]);\n      this.scheduleApply(0);\n    });\n  }\n\n  scheduleApply(timeout: number) {\n    if (this.applying) return;\n    this.applying = true;\n    setTimeout(() => {\n      void this.apply(this.queue.shift()).then(() => {\n        this.applying = false;\n        if (this.queue.length > 0) {\n          this.scheduleApply(0);\n        }\n      });\n    }, timeout);\n  }\n\n  async apply(item: [Event, EventCallback] | undefined) {\n    if (!item) {\n      return;\n    }\n\n    let [event] = item;\n    const [, resolve] = item;\n\n    const before = this.plugins.filter<BeforePlugin>(\n      (plugin: Plugin): plugin is BeforePlugin => plugin.type === 'before',\n    );\n\n    for (const plugin of before) {\n      /* istanbul ignore if */\n      if (!plugin.execute) {\n        // do nothing\n        continue;\n      }\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const enrichment = this.plugins.filter<EnrichmentPlugin>(\n      (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === 'enrichment' || plugin.type === undefined,\n    );\n\n    for (const plugin of enrichment) {\n      /* istanbul ignore if */\n      if (!plugin.execute) {\n        // do nothing\n        continue;\n      }\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === 'destination',\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      const eventClone = { ...event };\n      return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n    });\n\n    void Promise.all(executeDestinations).then(([result]) => {\n      const resolveResult =\n        result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n      resolve(resolveResult);\n    });\n\n    return;\n  }\n\n  async flush() {\n    const queue = this.queue;\n    this.queue = [];\n\n    await Promise.all(queue.map((item) => this.apply(item)));\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === 'destination',\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      return plugin.flush && plugin.flush();\n    });\n\n    await Promise.all(executeDestinations);\n  }\n}\n","import {\n  BaseEvent,\n  TrackEvent,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  SpecialEventType,\n  Identify as IIdentify,\n  Revenue,\n  RevenueEvent,\n  EventOptions,\n} from '@amplitude/analytics-types';\nimport { Identify } from '../identify';\n\nexport const createTrackEvent = (\n  eventInput: BaseEvent | string,\n  eventProperties?: Record<string, any>,\n  eventOptions?: EventOptions,\n): TrackEvent => {\n  const baseEvent: BaseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n  return {\n    ...baseEvent,\n    ...eventOptions,\n    ...(eventProperties && { event_properties: eventProperties }),\n  };\n};\n\nexport const createIdentifyEvent = (identify: IIdentify, eventOptions?: EventOptions): IdentifyEvent => {\n  const identifyEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n  };\n\n  return identifyEvent;\n};\n\nexport const createGroupIdentifyEvent = (\n  groupType: string,\n  groupName: string | string[],\n  identify: IIdentify,\n  eventOptions?: EventOptions,\n): GroupIdentifyEvent => {\n  const groupIdentify: GroupIdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.GROUP_IDENTIFY,\n    group_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n\n  return groupIdentify;\n};\n\nexport const createGroupEvent = (groupType: string, groupName: string | string[], eventOptions?: EventOptions) => {\n  const identify = new Identify();\n  identify.set(groupType, groupName);\n\n  const groupEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n  return groupEvent;\n};\n\nexport const createRevenueEvent = (revenue: Revenue, eventOptions?: EventOptions): RevenueEvent => {\n  return {\n    ...eventOptions,\n    event_type: SpecialEventType.REVENUE,\n    event_properties: revenue.getEventProperties(),\n  };\n};\n","import {\n  BaseEvent,\n  Config,\n  CoreClient,\n  Event,\n  EventOptions,\n  Identify,\n  Plugin,\n  Result,\n  Revenue,\n} from '@amplitude/analytics-types';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './messages';\nimport { Timeline } from './timeline';\nimport {\n  createGroupEvent,\n  createGroupIdentifyEvent,\n  createIdentifyEvent,\n  createRevenueEvent,\n  createTrackEvent,\n} from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\n\nexport class AmplitudeCore implements CoreClient {\n  protected initializing = false;\n  protected name: string;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  timeline: Timeline;\n  protected q: CallableFunction[] = [];\n  protected dispatchQ: CallableFunction[] = [];\n\n  constructor(name = '$default') {\n    this.timeline = new Timeline(this);\n    this.name = name;\n  }\n\n  protected async _init(config: Config) {\n    this.config = config;\n    this.timeline.reset(this);\n    await this.runQueuedFunctions('q');\n  }\n\n  async runQueuedFunctions(queueName: 'q' | 'dispatchQ') {\n    const queuedFunctions = this[queueName];\n    this[queueName] = [];\n    for (const queuedFunction of queuedFunctions) {\n      await queuedFunction();\n    }\n  }\n\n  track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n    const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  logEvent = this.track.bind(this);\n\n  identify(identify: Identify, eventOptions?: EventOptions) {\n    const event = createIdentifyEvent(identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: Identify, eventOptions?: EventOptions) {\n    const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  setGroup(groupType: string, groupName: string | string[], eventOptions?: EventOptions) {\n    const event = createGroupEvent(groupType, groupName, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  revenue(revenue: Revenue, eventOptions?: EventOptions) {\n    const event = createRevenueEvent(revenue, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  add(plugin: Plugin) {\n    if (!this.config) {\n      this.q.push(this.add.bind(this, plugin));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.register(plugin, this.config));\n  }\n\n  remove(pluginName: string) {\n    if (!this.config) {\n      this.q.push(this.remove.bind(this, pluginName));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.deregister(pluginName));\n  }\n\n  dispatchWithCallback(event: Event, callback: (result: Result) => void): void {\n    if (!this.config) {\n      return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n    }\n    void this.process(event).then(callback);\n  }\n\n  async dispatch(event: Event): Promise<Result> {\n    if (!this.config) {\n      return new Promise<Result>((resolve) => {\n        this.dispatchQ.push(this.dispatchWithCallback.bind(this, event, resolve));\n      });\n    }\n\n    return this.process(event);\n  }\n\n  async process(event: Event): Promise<Result> {\n    try {\n      // skip event processing if opt out\n      if (this.config.optOut) {\n        return buildResult(event, 0, OPT_OUT_MESSAGE);\n      }\n\n      const result = await this.timeline.push(event);\n\n      result.code === 200\n        ? this.config.loggerProvider.log(result.message)\n        : result.code === 100\n        ? this.config.loggerProvider.warn(result.message)\n        : this.config.loggerProvider.error(result.message);\n\n      return result;\n    } catch (e) {\n      const message = String(e);\n      this.config.loggerProvider.error(message);\n      const result = buildResult(event, 0, message);\n\n      return result;\n    }\n  }\n\n  setOptOut(optOut: boolean) {\n    if (!this.config) {\n      this.q.push(this.setOptOut.bind(this, Boolean(optOut)));\n      return;\n    }\n    this.config.optOut = Boolean(optOut);\n  }\n\n  flush() {\n    return returnWrapper(this.timeline.flush());\n  }\n}\n","import { BeforePlugin, Config, Event } from '@amplitude/analytics-types';\nimport { getAnalyticsConnector } from '../analytics-connector';\n\nexport class IdentityEventSender implements BeforePlugin {\n  name = 'identity';\n  type = 'before' as const;\n\n  identityStore = getAnalyticsConnector().identityStore;\n\n  async execute(context: Event): Promise<Event> {\n    const userProperties = context.user_properties as Record<string, any>;\n    if (userProperties) {\n      this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n    }\n    return context;\n  }\n\n  async setup(config: Config) {\n    if (config.instanceName) {\n      this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n    }\n  }\n}\n","import {\n  AttributionOptions,\n  BrowserOptions,\n  DefaultTrackingOptions,\n  PageTrackingHistoryChanges,\n  PageTrackingOptions,\n  PageTrackingTrackOn,\n} from '@amplitude/analytics-types';\n\n/**\n * Returns false if defaultTracking === false or if defaultTracking[event],\n * otherwise returns true\n */\nconst isTrackingEnabled = (\n  defaultTracking: DefaultTrackingOptions | boolean | undefined,\n  event: keyof DefaultTrackingOptions,\n) => {\n  if (typeof defaultTracking === 'boolean') {\n    return defaultTracking;\n  }\n\n  if (defaultTracking?.[event] === false) {\n    return false;\n  }\n\n  return true;\n};\n\nexport const isAttributionTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) =>\n  isTrackingEnabled(defaultTracking, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) =>\n  isTrackingEnabled(defaultTracking, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) =>\n  isTrackingEnabled(defaultTracking, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) =>\n  isTrackingEnabled(defaultTracking, 'pageViews');\n\nexport const isSessionTrackingEnabled = (defaultTracking: DefaultTrackingOptions | boolean | undefined) =>\n  isTrackingEnabled(defaultTracking, 'sessions');\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n  let trackOn: PageTrackingTrackOn | undefined = () => false;\n  let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n  let eventType: string | undefined;\n  const pageCounter = config.pageCounter;\n\n  const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n  if (isDefaultPageViewTrackingEnabled) {\n    trackOn = undefined;\n    eventType = undefined;\n\n    if (\n      config.defaultTracking &&\n      typeof config.defaultTracking === 'object' &&\n      config.defaultTracking.pageViews &&\n      typeof config.defaultTracking.pageViews === 'object'\n    ) {\n      if ('trackOn' in config.defaultTracking.pageViews) {\n        trackOn = config.defaultTracking.pageViews.trackOn;\n      }\n\n      if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n        trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n      }\n\n      if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n        eventType = config.defaultTracking.pageViews.eventType;\n      }\n    }\n  }\n\n  return {\n    trackOn,\n    trackHistoryChanges,\n    eventType,\n    pageCounter,\n  };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n  if (\n    isAttributionTrackingEnabled(config.defaultTracking) &&\n    config.defaultTracking &&\n    typeof config.defaultTracking === 'object' &&\n    config.defaultTracking.attribution &&\n    typeof config.defaultTracking.attribution === 'object'\n  ) {\n    return {\n      ...config.defaultTracking.attribution,\n    };\n  }\n\n  return {};\n};\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: Session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n","import { AmplitudeReturn, InstanceProxy, QueueProxy, Result } from '@amplitude/analytics-types';\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n  convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n  for (let i = 0; i < queue.length; i++) {\n    const { name, args, resolve } = queue[i];\n    const fn = instance && instance[name as keyof T];\n    if (typeof fn === 'function') {\n      const result = fn.apply(instance, args) as AmplitudeReturn<Result>;\n      if (typeof resolve === 'function') {\n        resolve(result?.promise);\n      }\n    }\n  }\n  return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n  const instanceProxy = instance as InstanceProxy;\n  return instanceProxy && instanceProxy._q !== undefined;\n};\n","export const getLanguage = (): string => {\n  if (typeof navigator === 'undefined') return '';\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const userLanguage = (navigator as any).userLanguage as string | undefined;\n\n  return navigator.languages?.[0] ?? navigator.language ?? userLanguage ?? '';\n};\n","import { BeforePlugin, BrowserConfig, Event } from '@amplitude/analytics-types';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '@amplitude/analytics-client-common';\nimport { VERSION } from '../version';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n  name = '@amplitude/plugin-context-browser';\n  type = 'before' as const;\n\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n  userAgent: string | undefined;\n  library = `amplitude-ts/${VERSION}`;\n\n  constructor() {\n    /* istanbul ignore else */\n    if (typeof navigator !== 'undefined') {\n      this.userAgent = navigator.userAgent;\n    }\n  }\n\n  setup(config: BrowserConfig): Promise<undefined> {\n    this.config = config;\n\n    return Promise.resolve(undefined);\n  }\n\n  async execute(context: Event): Promise<Event> {\n    const time = new Date().getTime();\n    const lastEventId = this.config.lastEventId ?? -1;\n    const nextEventId = context.event_id ?? lastEventId + 1;\n    this.config.lastEventId = nextEventId;\n    if (!context.time) {\n      this.config.lastEventTime = time;\n    }\n\n    const event: Event = {\n      user_id: this.config.userId,\n      device_id: this.config.deviceId,\n      session_id: this.config.sessionId,\n      time,\n      ...(this.config.appVersion && { app_version: this.config.appVersion }),\n      ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n      ...(this.config.trackingOptions.language && { language: getLanguage() }),\n      ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n      insert_id: UUID(),\n      partner_id: this.config.partnerId,\n      plan: this.config.plan,\n      ...(this.config.ingestionMetadata && {\n        ingestion_metadata: {\n          source_name: this.config.ingestionMetadata.sourceName,\n          source_version: this.config.ingestionMetadata.sourceVersion,\n        },\n      }),\n      ...context,\n      event_id: nextEventId,\n      library: this.library,\n      user_agent: this.userAgent,\n    };\n    return event;\n  }\n}\n","export const VERSION = '0.2.5';\n","import { Storage } from '@amplitude/analytics-types';\n\nexport class MemoryStorage<T> implements Storage<T> {\n  memoryStorage: Map<string, T> = new Map();\n\n  async isEnabled(): Promise<boolean> {\n    return true;\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    return this.memoryStorage.get(key);\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    const value = await this.get(key);\n    return value ? JSON.stringify(value) : undefined;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    this.memoryStorage.set(key, value);\n  }\n\n  async remove(key: string): Promise<void> {\n    this.memoryStorage.delete(key);\n  }\n\n  async reset(): Promise<void> {\n    this.memoryStorage.clear();\n  }\n}\n","import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';\n\nexport const getCookieName = (apiKey: string, postKey = '', limit = 10) => {\n  return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n\nexport const getOldCookieName = (apiKey: string) => {\n  return `${AMPLITUDE_PREFIX.toLowerCase()}_${apiKey.substring(0, 6)}`;\n};\n","import { getGlobalScope } from './global-scope';\n\nexport const getQueryParams = (): Record<string, string | undefined> => {\n  const globalScope = getGlobalScope();\n  /* istanbul ignore if */\n  if (!globalScope?.location?.search) {\n    return {};\n  }\n  const pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n  const params = pairs.reduce<Record<string, string | undefined>>((acc, curr) => {\n    const query = curr.split('=', 2);\n    const key = tryDecodeURIComponent(query[0]);\n    const value = tryDecodeURIComponent(query[1]);\n    if (!value) {\n      return acc;\n    }\n    acc[key] = value;\n    return acc;\n  }, {});\n  return params;\n};\n\nexport const tryDecodeURIComponent = (value = '') => {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return '';\n  }\n};\n","import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';\nimport { getGlobalScope } from '../global-scope';\n\nexport class CookieStorage<T> implements Storage<T> {\n  options: CookieStorageOptions;\n  private static testValue: undefined | string;\n\n  constructor(options?: CookieStorageOptions) {\n    this.options = { ...options };\n  }\n\n  async isEnabled(): Promise<boolean> {\n    /* istanbul ignore if */\n    if (!getGlobalScope()) {\n      return false;\n    }\n\n    CookieStorage.testValue = String(Date.now());\n    const testStrorage = new CookieStorage<string>(this.options);\n    const testKey = 'AMP_TEST';\n    try {\n      await testStrorage.set(testKey, CookieStorage.testValue);\n      const value = await testStrorage.get(testKey);\n      return value === CookieStorage.testValue;\n    } catch {\n      /* istanbul ignore next */\n      return false;\n    } finally {\n      await testStrorage.remove(testKey);\n    }\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    let value = await this.getRaw(key);\n    if (!value) {\n      return undefined;\n    }\n    try {\n      try {\n        value = decodeURIComponent(atob(value));\n      } catch {\n        // value not encoded\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return JSON.parse(value);\n    } catch {\n      /* istanbul ignore next */\n      return undefined;\n    }\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    const globalScope = getGlobalScope();\n    const cookie = globalScope?.document?.cookie.split('; ') ?? [];\n    const match = cookie.find((c) => c.indexOf(key + '=') === 0);\n    if (!match) {\n      return undefined;\n    }\n    return match.substring(key.length + 1);\n  }\n\n  async set(key: string, value: T | null): Promise<void> {\n    try {\n      const expirationDays = this.options.expirationDays ?? 0;\n      const expires = value !== null ? expirationDays : -1;\n      let expireDate: Date | undefined = undefined;\n      if (expires) {\n        const date = new Date();\n        date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n        expireDate = date;\n      }\n      let str = `${key}=${btoa(encodeURIComponent(JSON.stringify(value)))}`;\n      if (expireDate) {\n        str += `; expires=${expireDate.toUTCString()}`;\n      }\n      str += '; path=/';\n      if (this.options.domain) {\n        str += `; domain=${this.options.domain}`;\n      }\n      if (this.options.secure) {\n        str += '; Secure';\n      }\n      if (this.options.sameSite) {\n        str += `; SameSite=${this.options.sameSite}`;\n      }\n      const globalScope = getGlobalScope();\n      if (globalScope) {\n        globalScope.document.cookie = str;\n      }\n    } catch {\n      //\n    }\n  }\n\n  async remove(key: string): Promise<void> {\n    await this.set(key, null);\n  }\n\n  async reset(): Promise<void> {\n    return;\n  }\n}\n","import { Storage as AmplitudeStorage } from '@amplitude/analytics-types';\n\nexport class BrowserStorage<T> implements AmplitudeStorage<T> {\n  constructor(private storage?: Storage) {}\n\n  async isEnabled(): Promise<boolean> {\n    /* istanbul ignore if */\n    if (!this.storage) {\n      return false;\n    }\n\n    const random = String(Date.now());\n    const testStorage = new BrowserStorage<string>(this.storage);\n    const testKey = 'AMP_TEST';\n    try {\n      await testStorage.set(testKey, random);\n      const value = await testStorage.get(testKey);\n      return value === random;\n    } catch {\n      /* istanbul ignore next */\n      return false;\n    } finally {\n      await testStorage.remove(testKey);\n    }\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    try {\n      const value = await this.getRaw(key);\n      if (!value) {\n        return undefined;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return JSON.parse(value);\n    } catch {\n      console.error(`[Amplitude] Error: Could not get value from storage`);\n      return undefined;\n    }\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    return this.storage?.getItem(key) || undefined;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    try {\n      this.storage?.setItem(key, JSON.stringify(value));\n    } catch {\n      //\n    }\n  }\n\n  async remove(key: string): Promise<void> {\n    try {\n      this.storage?.removeItem(key);\n    } catch {\n      //\n    }\n  }\n\n  async reset(): Promise<void> {\n    try {\n      this.storage?.clear();\n    } catch {\n      //\n    }\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { BrowserStorage } from './browser-storage';\nimport { Logger } from '@amplitude/analytics-types';\n\nconst MAX_ARRAY_LENGTH = 1000;\n\ninterface LocalStorageOptions {\n  loggerProvider?: Logger;\n}\nexport class LocalStorage<T> extends BrowserStorage<T> {\n  loggerProvider?: Logger;\n\n  constructor(config?: LocalStorageOptions) {\n    super(getGlobalScope()?.localStorage);\n    this.loggerProvider = config?.loggerProvider;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    if (Array.isArray(value) && value.length > MAX_ARRAY_LENGTH) {\n      const droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n      await super.set(key, value.slice(0, MAX_ARRAY_LENGTH) as T);\n      this.loggerProvider?.error(\n        `Failed to save ${droppedEventsCount} events because the queue length exceeded ${MAX_ARRAY_LENGTH}.`,\n      );\n    } else {\n      await super.set(key, value);\n    }\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { BrowserStorage } from './browser-storage';\n\nexport class SessionStorage<T> extends BrowserStorage<T> {\n  constructor() {\n    super(getGlobalScope()?.sessionStorage);\n  }\n}\n","import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n  private state = {\n    done: 4,\n  };\n\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    return new Promise((resolve, reject) => {\n      /* istanbul ignore if */\n      if (typeof XMLHttpRequest === 'undefined') {\n        reject(new Error('XHRTransport is not supported.'));\n      }\n\n      const xhr = new XMLHttpRequest();\n      xhr.open('POST', serverUrl, true);\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === this.state.done) {\n          try {\n            const responsePayload = xhr.responseText;\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n            const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n            const result = this.buildResponse(parsedResponsePayload);\n            resolve(result);\n          } catch (e) {\n            reject(e);\n          }\n        }\n      };\n      xhr.setRequestHeader('Content-Type', 'application/json');\n      xhr.setRequestHeader('Accept', '*/*');\n      xhr.send(JSON.stringify(payload));\n    });\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    return new Promise((resolve, reject) => {\n      const globalScope = getGlobalScope();\n      /* istanbul ignore if */\n      if (!globalScope?.navigator.sendBeacon) {\n        throw new Error('SendBeaconTransport is not supported');\n      }\n      try {\n        const data = JSON.stringify(payload);\n        const success = globalScope.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n        if (success) {\n          return resolve(\n            this.buildResponse({\n              code: 200,\n              events_ingested: payload.events.length,\n              payload_size_bytes: data.length,\n              server_upload_time: Date.now(),\n            }),\n          );\n        }\n        return resolve(this.buildResponse({ code: 500 }));\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n}\n","import { Storage, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '@amplitude/analytics-client-common';\n\nexport const parseLegacyCookies = async (\n  apiKey: string,\n  cookieStorage: Storage<UserSession>,\n  deleteLegacyCookies = true,\n): Promise<UserSession> => {\n  const cookieName = getOldCookieName(apiKey);\n  const cookies = await cookieStorage.getRaw(cookieName);\n  if (!cookies) {\n    return {\n      optOut: false,\n    };\n  }\n  if (deleteLegacyCookies) {\n    await cookieStorage.remove(cookieName);\n  }\n  const [deviceId, userId, optOut, sessionId, lastEventTime, lastEventId] = cookies.split('.');\n  return {\n    deviceId,\n    userId: decode(userId),\n    sessionId: parseTime(sessionId),\n    lastEventId: parseTime(lastEventId),\n    lastEventTime: parseTime(lastEventTime),\n    optOut: Boolean(optOut),\n  };\n};\n\nexport const parseTime = (num: string) => {\n  const integer = parseInt(num, 32);\n  if (isNaN(integer)) {\n    return undefined;\n  }\n  return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n  if (!atob || !escape || !value) {\n    return undefined;\n  }\n  try {\n    return decodeURIComponent(escape(atob(value)));\n  } catch {\n    return undefined;\n  }\n};\n","import { AMPLITUDE_PREFIX } from '@amplitude/analytics-core';\nimport { IDBStoreSession } from './typings/session-replay';\nimport { ServerZone } from '@amplitude/analytics-types';\n\nexport const DEFAULT_EVENT_PROPERTY_PREFIX = '[Amplitude]';\n\nexport const DEFAULT_SESSION_REPLAY_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay ID`;\nexport const DEFAULT_SESSION_START_EVENT = 'session_start';\nexport const DEFAULT_SESSION_END_EVENT = 'session_end';\nexport const DEFAULT_SAMPLE_RATE = 0;\nexport const DEFAULT_SERVER_ZONE = ServerZone.US;\n\nexport const SESSION_REPLAY_DEBUG_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay Debug`;\n\nexport const BLOCK_CLASS = 'amp-block';\nexport const MASK_TEXT_CLASS = 'amp-mask';\nexport const UNMASK_TEXT_CLASS = 'amp-unmask';\nexport const SESSION_REPLAY_SERVER_URL = 'https://api-sr.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_EU_URL = 'https://api-sr.eu.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_STAGING_URL = 'https://api-sr.stag2.amplitude.com/sessions/v2/track';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_replay_unsent`;\nexport const MAX_EVENT_LIST_SIZE_IN_BYTES = 1 * 1000000; // 1 MB\nexport const MIN_INTERVAL = 500; // 500 ms\nexport const MAX_INTERVAL = 10 * 1000; // 10 seconds\nexport const defaultSessionStore: IDBStoreSession = {\n  currentSequenceId: 0,\n  sessionSequences: {},\n};\nexport const MAX_IDB_STORAGE_LENGTH = 1000 * 60 * 60 * 24 * 3; // 3 days\n","import { FetchTransport } from '@amplitude/analytics-client-common';\nimport { Config, Logger } from '@amplitude/analytics-core';\nimport { LogLevel } from '@amplitude/analytics-types';\nimport { DEFAULT_SAMPLE_RATE, DEFAULT_SERVER_ZONE } from './constants';\nimport {\n  SessionReplayConfig as ISessionReplayConfig,\n  SessionReplayOptions,\n  SessionReplayPrivacyConfig,\n} from './typings/session-replay';\n\nexport const getDefaultConfig = () => ({\n  flushMaxRetries: 2,\n  logLevel: LogLevel.Warn,\n  loggerProvider: new Logger(),\n  transportProvider: new FetchTransport(),\n});\n\nexport class SessionReplayConfig extends Config implements ISessionReplayConfig {\n  apiKey: string;\n  sampleRate: number;\n  privacyConfig?: SessionReplayPrivacyConfig;\n  debugMode?: boolean;\n\n  constructor(apiKey: string, options: SessionReplayOptions) {\n    const defaultConfig = getDefaultConfig();\n    super({\n      transportProvider: defaultConfig.transportProvider,\n      ...options,\n      apiKey,\n    });\n    this.flushMaxRetries =\n      options.flushMaxRetries !== undefined && options.flushMaxRetries <= defaultConfig.flushMaxRetries\n        ? options.flushMaxRetries\n        : defaultConfig.flushMaxRetries;\n\n    this.apiKey = apiKey;\n    this.sampleRate = options.sampleRate || DEFAULT_SAMPLE_RATE;\n    this.serverZone = options.serverZone || DEFAULT_SERVER_ZONE;\n\n    if (options.privacyConfig) {\n      this.privacyConfig = options.privacyConfig;\n    }\n\n    if (options.debugMode) {\n      this.debugMode = options.debugMode;\n    }\n  }\n}\n","import { Campaign } from '@amplitude/analytics-types';\n\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_CONTENT = 'utm_content';\nexport const UTM_ID = 'utm_id';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_SOURCE = 'utm_source';\nexport const UTM_TERM = 'utm_term';\n\nexport const DCLID = 'dclid';\nexport const FBCLID = 'fbclid';\nexport const GBRAID = 'gbraid';\nexport const GCLID = 'gclid';\nexport const KO_CLICK_ID = 'ko_click_id';\nexport const LI_FAT_ID = 'li_fat_id';\nexport const MSCLKID = 'msclkid';\nexport const RDT_CID = 'rtd_cid';\nexport const TTCLID = 'ttclid';\nexport const TWCLID = 'twclid';\nexport const WBRAID = 'wbraid';\n\nexport const EMPTY_VALUE = 'EMPTY';\n\nexport const BASE_CAMPAIGN: Campaign = {\n  utm_campaign: undefined,\n  utm_content: undefined,\n  utm_id: undefined,\n  utm_medium: undefined,\n  utm_source: undefined,\n  utm_term: undefined,\n  referrer: undefined,\n  referring_domain: undefined,\n  dclid: undefined,\n  gbraid: undefined,\n  gclid: undefined,\n  fbclid: undefined,\n  ko_click_id: undefined,\n  li_fat_id: undefined,\n  msclkid: undefined,\n  rtd_cid: undefined,\n  ttclid: undefined,\n  twclid: undefined,\n  wbraid: undefined,\n};\n\nexport const MKTG = 'MKTG';\n","import { getQueryParams } from '../query-params';\nimport {\n  UTM_CAMPAIGN,\n  UTM_CONTENT,\n  UTM_MEDIUM,\n  UTM_SOURCE,\n  UTM_TERM,\n  GCLID,\n  FBCLID,\n  BASE_CAMPAIGN,\n  DCLID,\n  MSCLKID,\n  RDT_CID,\n  TWCLID,\n  TTCLID,\n  KO_CLICK_ID,\n  LI_FAT_ID,\n  GBRAID,\n  WBRAID,\n  UTM_ID,\n} from './constants';\nimport {\n  Campaign,\n  CampaignParser as ICampaignParser,\n  ClickIdParameters,\n  ReferrerParameters,\n  UTMParameters,\n} from '@amplitude/analytics-types';\n\nexport class CampaignParser implements ICampaignParser {\n  async parse(): Promise<Campaign> {\n    return {\n      ...BASE_CAMPAIGN,\n      ...this.getUtmParam(),\n      ...this.getReferrer(),\n      ...this.getClickIds(),\n    } as Campaign;\n  }\n\n  getUtmParam(): UTMParameters {\n    const params = getQueryParams();\n\n    const utmCampaign = params[UTM_CAMPAIGN];\n    const utmContent = params[UTM_CONTENT];\n    const utmId = params[UTM_ID];\n    const utmMedium = params[UTM_MEDIUM];\n    const utmSource = params[UTM_SOURCE];\n    const utmTerm = params[UTM_TERM];\n\n    return {\n      utm_campaign: utmCampaign,\n      utm_content: utmContent,\n      utm_id: utmId,\n      utm_medium: utmMedium,\n      utm_source: utmSource,\n      utm_term: utmTerm,\n    };\n  }\n\n  getReferrer(): ReferrerParameters {\n    const data: ReferrerParameters = {\n      referrer: undefined,\n      referring_domain: undefined,\n    };\n    try {\n      data.referrer = document.referrer || undefined;\n      data.referring_domain = data.referrer?.split('/')[2] ?? undefined;\n    } catch {\n      // nothing to track\n    }\n    return data;\n  }\n\n  getClickIds(): ClickIdParameters {\n    const params = getQueryParams();\n    return {\n      [DCLID]: params[DCLID],\n      [FBCLID]: params[FBCLID],\n      [GBRAID]: params[GBRAID],\n      [GCLID]: params[GCLID],\n      [KO_CLICK_ID]: params[KO_CLICK_ID],\n      [LI_FAT_ID]: params[LI_FAT_ID],\n      [MSCLKID]: params[MSCLKID],\n      [RDT_CID]: params[RDT_CID],\n      [TTCLID]: params[TTCLID],\n      [TWCLID]: params[TWCLID],\n      [WBRAID]: params[WBRAID],\n    };\n  }\n}\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { UNMASK_TEXT_CLASS } from './constants';\n\nexport const maskInputFn = (text: string, element: HTMLElement) => {\n  if (element.classList?.contains(UNMASK_TEXT_CLASS)) {\n    return text;\n  }\n  return '*'.repeat(text.length);\n};\n\nexport const generateHashCode = function (str: string) {\n  let hash = 0;\n  if (str.length === 0) return hash;\n  for (let i = 0; i < str.length; i++) {\n    const chr = str.charCodeAt(i);\n    hash = (hash << 5) - hash + chr;\n    hash |= 0;\n  }\n  return hash;\n};\n\nexport const isSessionInSample = function (sessionId: number, sampleRate: number) {\n  const hashNumber = generateHashCode(sessionId.toString());\n  const absHash = Math.abs(hashNumber);\n  const absHashMultiply = absHash * 31;\n  const mod = absHashMultiply % 100;\n  return mod / 100 < sampleRate;\n};\n\nexport const getCurrentUrl = () => {\n  const globalScope = getGlobalScope();\n  return globalScope?.location ? globalScope.location.href : '';\n};\n\nexport const generateSessionReplayId = (sessionId: number, deviceId: string): string => {\n  return `${deviceId}/${sessionId}`;\n};\n","import { CampaignParser } from '@amplitude/analytics-client-common';\nimport { BeforePlugin, BrowserClient, BrowserConfig, Campaign, Event, Storage } from '@amplitude/analytics-types';\nimport { createCampaignEvent, getDefaultExcludedReferrers, getStorageKey, isNewCampaign } from './helpers';\nimport { CreateWebAttributionPlugin, Options } from './typings/web-attribution';\nimport { isNewSession } from '@amplitude/analytics-client-common';\n\nexport const webAttributionPlugin: CreateWebAttributionPlugin = function (options: Options = {}) {\n  const plugin: BeforePlugin = {\n    name: '@amplitude/plugin-web-attribution-browser',\n    type: 'before',\n\n    setup: async function (config: BrowserConfig, amplitude: BrowserClient) {\n      const pluginConfig = {\n        initialEmptyValue: 'EMPTY',\n        resetSessionOnNewCampaign: false,\n        excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n        ...options,\n      };\n      config.loggerProvider.log('Installing @amplitude/plugin-web-attribution-browser.');\n\n      // Share cookie storage with user session storage\n      const storage = config.cookieStorage as unknown as Storage<Campaign>;\n      const storageKey = getStorageKey(config.apiKey, 'MKTG');\n\n      const [currentCampaign, previousCampaign] = await Promise.all([\n        new CampaignParser().parse(),\n        storage.get(storageKey),\n      ]);\n\n      const isEventInNewSession = isNewSession(config.sessionTimeout, config.lastEventTime);\n\n      if (isNewCampaign(currentCampaign, previousCampaign, pluginConfig, isEventInNewSession)) {\n        if (pluginConfig.resetSessionOnNewCampaign) {\n          amplitude.setSessionId(Date.now());\n          config.loggerProvider.log('Created a new session for new campaign.');\n        }\n        config.loggerProvider.log('Tracking attribution.');\n        const campaignEvent = createCampaignEvent(currentCampaign, pluginConfig);\n        amplitude.track(campaignEvent);\n        void storage.set(storageKey, currentCampaign);\n      }\n    },\n\n    execute: async (event: Event) => event,\n  };\n\n  return plugin;\n};\n","export const omitUndefined = (input: Record<string, string | undefined>) => {\n  const obj: Record<string, string> = {};\n  for (const key in input) {\n    const val = input[key];\n    if (val) {\n      obj[key] = val;\n    }\n  }\n  return obj;\n};\n","import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n  BrowserClient,\n  BrowserConfig,\n  EnrichmentPlugin,\n  Event,\n  IdentifyOperation,\n  IdentifyUserProperties,\n  Logger,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => {\n  let amplitude: BrowserClient | undefined;\n  const globalScope = getGlobalScope();\n  let loggerProvider: Logger | undefined = undefined;\n  let pushState: undefined | ((data: any, unused: string, url?: string | URL | null) => void);\n  let localConfig: BrowserConfig;\n\n  const createPageViewEvent = async (): Promise<Event> => {\n    localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n    return {\n      event_type: options.eventType ?? '[Amplitude] Page Viewed',\n      event_properties: {\n        ...(await getCampaignParams()),\n        '[Amplitude] Page Domain':\n          /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n        '[Amplitude] Page Location':\n          /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n        '[Amplitude] Page Path':\n          /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n        '[Amplitude] Page Title': /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n        '[Amplitude] Page URL':\n          /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n        '[Amplitude] Page Counter': localConfig.pageCounter,\n      },\n    };\n  };\n\n  const shouldTrackOnPageLoad = () =>\n    typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n  /* istanbul ignore next */\n  let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n  const trackHistoryPageView = async (): Promise<void> => {\n    const newURL = location.href;\n    const shouldTrackPageView =\n      shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n    // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n    // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n    // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n    // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n    previousURL = newURL;\n\n    if (shouldTrackPageView) {\n      /* istanbul ignore next */\n      loggerProvider?.log('Tracking page view event');\n      amplitude?.track(await createPageViewEvent());\n    }\n  };\n\n  /* istanbul ignore next */\n  const trackHistoryPageViewWrapper = () => {\n    void trackHistoryPageView();\n  };\n\n  const plugin: EnrichmentPlugin = {\n    name: '@amplitude/plugin-page-view-tracking-browser',\n    type: 'enrichment',\n\n    setup: async (config: BrowserConfig, client: BrowserClient) => {\n      amplitude = client;\n      localConfig = config;\n\n      loggerProvider = config.loggerProvider;\n      loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n      if (globalScope) {\n        globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n        // Save reference to original push state, to be used in teardown\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        pushState = globalScope.history.pushState;\n\n        /* istanbul ignore next */\n        // There is no global browser listener for changes to history, so we have\n        // to modify pushState directly.\n        // https://stackoverflow.com/a/64927639\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n          apply: (target, thisArg, [state, unused, url]) => {\n            target.apply(thisArg, [state, unused, url]);\n            void trackHistoryPageView();\n          },\n        });\n      }\n\n      if (shouldTrackOnPageLoad()) {\n        loggerProvider.log('Tracking page view event');\n\n        amplitude.track(await createPageViewEvent());\n      }\n    },\n\n    execute: async (event: Event) => {\n      if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n        /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n        loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n        const pageViewEvent = await createPageViewEvent();\n        event.event_type = pageViewEvent.event_type;\n        event.event_properties = {\n          ...event.event_properties,\n          ...pageViewEvent.event_properties,\n        };\n      }\n      return event;\n    },\n\n    teardown: async () => {\n      if (globalScope) {\n        globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n        if (pushState) {\n          globalScope.history.pushState = pushState;\n        }\n      }\n    },\n  };\n  return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n  if (event.event_type === '$identify' && event.user_properties) {\n    const properties = event.user_properties as IdentifyUserProperties;\n    const $set = properties[IdentifyOperation.SET] || {};\n    const $unset = properties[IdentifyOperation.UNSET] || {};\n    const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n    return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n  }\n  return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n  trackingOption: Options['trackHistoryChanges'],\n  newURL: string,\n  oldURL: string,\n): boolean => {\n  switch (trackingOption) {\n    case 'pathOnly':\n      return newURL.split('?')[0] !== oldURL.split('?')[0];\n    default:\n      return newURL !== oldURL;\n  }\n};\n","import { BrowserClient, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport {\n  DEFAULT_FORM_START_EVENT,\n  DEFAULT_FORM_SUBMIT_EVENT,\n  FORM_ID,\n  FORM_NAME,\n  FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n  element: Element;\n  type: 'change' | 'submit';\n  handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n  let observer: MutationObserver | undefined;\n  let eventListeners: EventListener[] = [];\n\n  const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n    element.addEventListener(type, handler);\n    eventListeners.push({\n      element,\n      type,\n      handler,\n    });\n  };\n\n  const removeClickListeners = () => {\n    eventListeners.forEach(({ element, type, handler }) => {\n      /* istanbul ignore next */\n      element?.removeEventListener(type, handler);\n    });\n    eventListeners = [];\n  };\n\n  const name = '@amplitude/plugin-form-interaction-tracking-browser';\n  const type = 'enrichment';\n  const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n    // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n    // after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this\n    // only after the window is loaded\n    // eslint-disable-next-line no-restricted-globals\n    window.addEventListener('load', function () {\n      /* istanbul ignore if */\n      if (!amplitude) {\n        // TODO: Add required minimum version of @amplitude/analytics-browser\n        config.loggerProvider.warn(\n          'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n        );\n        return;\n      }\n\n      /* istanbul ignore if */\n      if (typeof document === 'undefined') {\n        return;\n      }\n\n      const addFormInteractionListener = (form: HTMLFormElement) => {\n        let hasFormChanged = false;\n\n        addEventListener(form, 'change', () => {\n          if (!hasFormChanged) {\n            amplitude.track(DEFAULT_FORM_START_EVENT, {\n              [FORM_ID]: stringOrUndefined(form.id),\n              [FORM_NAME]: stringOrUndefined(form.name),\n              [FORM_DESTINATION]: form.action,\n            });\n          }\n          hasFormChanged = true;\n        });\n\n        addEventListener(form, 'submit', () => {\n          if (!hasFormChanged) {\n            amplitude.track(DEFAULT_FORM_START_EVENT, {\n              [FORM_ID]: stringOrUndefined(form.id),\n              [FORM_NAME]: stringOrUndefined(form.name),\n              [FORM_DESTINATION]: form.action,\n            });\n          }\n\n          amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n            [FORM_ID]: stringOrUndefined(form.id),\n            [FORM_NAME]: stringOrUndefined(form.name),\n            [FORM_DESTINATION]: form.action,\n          });\n          hasFormChanged = false;\n        });\n      };\n\n      // Adds listener to existing anchor tags\n      const forms = Array.from(document.getElementsByTagName('form'));\n      forms.forEach(addFormInteractionListener);\n\n      // Adds listener to anchor tags added after initial load\n      /* istanbul ignore else */\n      if (typeof MutationObserver !== 'undefined') {\n        observer = new MutationObserver((mutations) => {\n          mutations.forEach((mutation) => {\n            mutation.addedNodes.forEach((node) => {\n              if (node.nodeName === 'FORM') {\n                addFormInteractionListener(node as HTMLFormElement);\n              }\n              if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n                Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n              }\n            });\n          });\n        });\n\n        observer.observe(document.body, {\n          subtree: true,\n          childList: true,\n        });\n      }\n    });\n  };\n  const execute = async (event: Event) => event;\n  const teardown = async () => {\n    observer?.disconnect();\n    removeClickListeners();\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    execute,\n    teardown,\n  };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n  /* istanbul ignore if */\n  if (typeof name !== 'string') {\n    // We found instances where the value of `name` is an Element and not a string.\n    // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n    // If a non-string value is seen, assume there is no value.\n    return undefined as T extends string ? string : undefined;\n  }\n\n  return name as T extends string ? string : undefined;\n};\n","import { BrowserClient, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n  element: Element;\n  type: 'click';\n  handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n  let observer: MutationObserver | undefined;\n  let eventListeners: EventListener[] = [];\n  const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n    element.addEventListener(type, handler);\n    eventListeners.push({\n      element,\n      type,\n      handler,\n    });\n  };\n  const removeClickListeners = () => {\n    eventListeners.forEach(({ element, type, handler }) => {\n      /* istanbul ignore next */\n      element?.removeEventListener(type, handler);\n    });\n    eventListeners = [];\n  };\n\n  const name = '@amplitude/plugin-file-download-tracking-browser';\n  const type = 'enrichment';\n  const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n    // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n    // after the body is built. When Amplitud gets initialized in a script tag, the body tag is still unavailable. So register this\n    // only after the window is loaded\n    // eslint-disable-next-line no-restricted-globals\n    window.addEventListener('load', function () {\n      /* istanbul ignore if */\n      if (!amplitude) {\n        // TODO: Add required minimum version of @amplitude/analytics-browser\n        config.loggerProvider.warn(\n          'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n        );\n        return;\n      }\n\n      /* istanbul ignore if */\n      if (typeof document === 'undefined') {\n        return;\n      }\n\n      const addFileDownloadListener = (a: HTMLAnchorElement) => {\n        let url: URL;\n        try {\n          // eslint-disable-next-line no-restricted-globals\n          url = new URL(a.href, window.location.href);\n        } catch {\n          /* istanbul ignore next */\n          return;\n        }\n        const result = ext.exec(url.href);\n        const fileExtension = result?.[1];\n\n        if (fileExtension) {\n          addEventListener(a, 'click', () => {\n            if (fileExtension) {\n              amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n                [FILE_EXTENSION]: fileExtension,\n                [FILE_NAME]: url.pathname,\n                [LINK_ID]: a.id,\n                [LINK_TEXT]: a.text,\n                [LINK_URL]: a.href,\n              });\n            }\n          });\n        }\n      };\n\n      const ext =\n        /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n      // Adds listener to existing anchor tags\n      const links = Array.from(document.getElementsByTagName('a'));\n      links.forEach(addFileDownloadListener);\n\n      // Adds listener to anchor tags added after initial load\n      /* istanbul ignore else */\n      if (typeof MutationObserver !== 'undefined') {\n        observer = new MutationObserver((mutations) => {\n          mutations.forEach((mutation) => {\n            mutation.addedNodes.forEach((node) => {\n              if (node.nodeName === 'A') {\n                addFileDownloadListener(node as HTMLAnchorElement);\n              }\n              if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n                Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n              }\n            });\n          });\n        });\n\n        observer.observe(document.body, {\n          subtree: true,\n          childList: true,\n        });\n      }\n    });\n  };\n  const execute = async (event: Event) => event;\n  const teardown = async () => {\n    observer?.disconnect();\n    removeClickListeners();\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    execute,\n    teardown,\n  };\n};\n","import { BrowserConfig } from '@amplitude/analytics-types';\n\nlet notified = false;\n\nexport const detNotify = (config: BrowserConfig): void => {\n  if (notified || config.defaultTracking !== undefined) {\n    return;\n  }\n\n  const message = `\\`options.defaultTracking\\` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to \\`options.defaultTracking\\`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:\n\namplitude.init(<YOUR_API_KEY>, {\n  defaultTracking: true,\n});\n\nVisit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.`;\n  config.loggerProvider.warn(message);\n  notified = true;\n};\n\n/**\n * @private\n * This function is meant for testing purposes only\n */\nexport const resetNotify = () => {\n  notified = false;\n};\n","import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { BeforePlugin, BrowserClient } from '@amplitude/analytics-types';\nimport { BrowserConfig } from 'src/config';\n\ninterface EventListener {\n  type: 'online' | 'offline';\n  handler: () => void;\n}\n\nexport const networkConnectivityCheckerPlugin = (): BeforePlugin => {\n  const name = '@amplitude/plugin-network-checker-browser';\n  const type = 'before' as const;\n  const globalScope = getGlobalScope();\n  let eventListeners: EventListener[] = [];\n\n  const addNetworkListener = (type: 'online' | 'offline', handler: () => void) => {\n    if (globalScope) {\n      globalScope.addEventListener(type, handler);\n      eventListeners.push({\n        type,\n        handler,\n      });\n    }\n  };\n\n  const removeNetworkListeners = () => {\n    eventListeners.forEach(({ type, handler }) => {\n      if (globalScope) {\n        globalScope.removeEventListener(type, handler);\n      }\n    });\n    eventListeners = [];\n  };\n\n  const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n    config.offline = !navigator.onLine;\n\n    addNetworkListener('online', () => {\n      config.loggerProvider.debug('Network connectivity changed to online.');\n      config.offline = false;\n      // Flush immediately will cause ERR_NETWORK_CHANGED\n      setTimeout(() => {\n        amplitude.flush();\n      }, config.flushIntervalMillis);\n    });\n\n    addNetworkListener('offline', () => {\n      config.loggerProvider.debug('Network connectivity changed to offline.');\n      config.offline = true;\n    });\n  };\n\n  const teardown = async () => {\n    removeNetworkListeners();\n  };\n\n  return {\n    name,\n    type,\n    setup,\n    teardown,\n  };\n};\n","import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n  getAnalyticsConnector,\n  getAttributionTrackingConfig,\n  getPageViewTrackingConfig,\n  IdentityEventSender,\n  isAttributionTrackingEnabled,\n  isSessionTrackingEnabled,\n  isFileDownloadTrackingEnabled,\n  isFormInteractionTrackingEnabled,\n  setConnectorDeviceId,\n  setConnectorUserId,\n  isNewSession,\n  isPageViewTrackingEnabled,\n} from '@amplitude/analytics-client-common';\nimport {\n  BrowserClient,\n  BrowserConfig,\n  BrowserOptions,\n  Event,\n  EventOptions,\n  Identify as IIdentify,\n  Revenue as IRevenue,\n  TransportType,\n  OfflineDisabled,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\nimport { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n  previousSessionDeviceId: string | undefined;\n  previousSessionUserId: string | undefined;\n\n  init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n    let userId: string | undefined;\n    let options: BrowserOptions | undefined;\n\n    if (arguments.length > 2) {\n      userId = userIdOrOptions as string | undefined;\n      options = maybeOptions;\n    } else {\n      if (typeof userIdOrOptions === 'string') {\n        userId = userIdOrOptions;\n        options = undefined;\n      } else {\n        userId = userIdOrOptions?.userId;\n        options = userIdOrOptions;\n      }\n    }\n    return returnWrapper(this._init({ ...options, userId, apiKey }));\n  }\n  protected async _init(options: BrowserOptions & { apiKey: string }) {\n    // Step 1: Block concurrent initialization\n    if (this.initializing) {\n      return;\n    }\n    this.initializing = true;\n\n    // Step 2: Create browser config\n    const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n    this.config = browserOptions;\n\n    // Step 3: Set session ID\n    // Priority 1: `options.sessionId`\n    // Priority 2: last known sessionId from user identity storage\n    // Default: `Date.now()`\n    // Session ID is handled differently than device ID and user ID due to session events\n    this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n\n    await super._init(this.config);\n\n    // Set up the analytics connector to integrate with the experiment SDK.\n    // Send events from the experiment SDK and forward identifies to the\n    // identity store.\n    const connector = getAnalyticsConnector(options.instanceName);\n    connector.identityStore.setIdentity({\n      userId: this.config.userId,\n      deviceId: this.config.deviceId,\n    });\n\n    // Step 4: Install plugins\n    // Do not track any events before this\n    if (this.config.offline !== OfflineDisabled) {\n      await this.add(networkConnectivityCheckerPlugin()).promise;\n    }\n    await this.add(new Destination()).promise;\n    await this.add(new Context()).promise;\n    await this.add(new IdentityEventSender()).promise;\n\n    // Notify if DET is enabled\n    detNotify(this.config);\n\n    if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n      await this.add(fileDownloadTracking()).promise;\n    }\n\n    if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n      await this.add(formInteractionTracking()).promise;\n    }\n\n    // Add web attribution plugin\n    if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n      const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n      const webAttribution = webAttributionPlugin(attributionTrackingOptions);\n      await this.add(webAttribution).promise;\n    }\n\n    // Add page view plugin\n    if (isPageViewTrackingEnabled(this.config.defaultTracking)) {\n      await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n    }\n\n    this.initializing = false;\n\n    // Step 6: Run queued dispatch functions\n    await this.runQueuedFunctions('dispatchQ');\n\n    // Step 7: Add the event receiver after running remaining queued functions.\n    connector.eventBridge.setEventReceiver((event) => {\n      void this.track(event.eventType, event.eventProperties);\n    });\n  }\n\n  getUserId() {\n    return this.config?.userId;\n  }\n\n  setUserId(userId: string | undefined) {\n    if (!this.config) {\n      this.q.push(this.setUserId.bind(this, userId));\n      return;\n    }\n    if (userId !== this.config.userId || userId === undefined) {\n      this.config.userId = userId;\n      setConnectorUserId(userId, this.config.instanceName);\n    }\n  }\n\n  getDeviceId() {\n    return this.config?.deviceId;\n  }\n\n  setDeviceId(deviceId: string) {\n    if (!this.config) {\n      this.q.push(this.setDeviceId.bind(this, deviceId));\n      return;\n    }\n    this.config.deviceId = deviceId;\n    setConnectorDeviceId(deviceId, this.config.instanceName);\n  }\n\n  reset() {\n    this.setDeviceId(UUID());\n    this.setUserId(undefined);\n  }\n\n  getSessionId() {\n    return this.config?.sessionId;\n  }\n\n  setSessionId(sessionId: number) {\n    if (!this.config) {\n      this.q.push(this.setSessionId.bind(this, sessionId));\n      return;\n    }\n\n    // Prevents starting a new session with the same session ID\n    if (sessionId === this.config.sessionId) {\n      return;\n    }\n\n    const previousSessionId = this.getSessionId();\n    const lastEventTime = this.config.lastEventTime;\n    let lastEventId = this.config.lastEventId ?? -1;\n\n    this.config.sessionId = sessionId;\n    this.config.lastEventTime = undefined;\n    this.config.pageCounter = 0;\n\n    if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n      if (previousSessionId && lastEventTime) {\n        this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n          device_id: this.previousSessionDeviceId,\n          event_id: ++lastEventId,\n          session_id: previousSessionId,\n          time: lastEventTime + 1,\n          user_id: this.previousSessionUserId,\n        });\n      }\n\n      this.config.lastEventTime = this.config.sessionId;\n      this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n        event_id: ++lastEventId,\n        session_id: this.config.sessionId,\n        time: this.config.lastEventTime,\n      });\n    }\n\n    this.previousSessionDeviceId = this.config.deviceId;\n    this.previousSessionUserId = this.config.userId;\n  }\n\n  extendSession() {\n    if (!this.config) {\n      this.q.push(this.extendSession.bind(this));\n      return;\n    }\n    this.config.lastEventTime = Date.now();\n  }\n\n  setTransport(transport: TransportType) {\n    if (!this.config) {\n      this.q.push(this.setTransport.bind(this, transport));\n      return;\n    }\n    this.config.transportProvider = createTransport(transport);\n  }\n\n  identify(identify: IIdentify, eventOptions?: EventOptions) {\n    if (isInstanceProxy(identify)) {\n      const queue = identify._q;\n      identify._q = [];\n      identify = convertProxyObjectToRealObject(new Identify(), queue);\n    }\n    if (eventOptions?.user_id) {\n      this.setUserId(eventOptions.user_id);\n    }\n    if (eventOptions?.device_id) {\n      this.setDeviceId(eventOptions.device_id);\n    }\n    return super.identify(identify, eventOptions);\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n    if (isInstanceProxy(identify)) {\n      const queue = identify._q;\n      identify._q = [];\n      identify = convertProxyObjectToRealObject(new Identify(), queue);\n    }\n    return super.groupIdentify(groupType, groupName, identify, eventOptions);\n  }\n\n  revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n    if (isInstanceProxy(revenue)) {\n      const queue = revenue._q;\n      revenue._q = [];\n      revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n    }\n    return super.revenue(revenue, eventOptions);\n  }\n\n  async process(event: Event) {\n    const currentTime = Date.now();\n    const isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n\n    if (\n      event.event_type !== DEFAULT_SESSION_START_EVENT &&\n      event.event_type !== DEFAULT_SESSION_END_EVENT &&\n      (!event.session_id || event.session_id === this.getSessionId()) &&\n      isEventInNewSession\n    ) {\n      this.setSessionId(currentTime);\n    }\n\n    return super.process(event);\n  }\n}\n","export const OfflineDisabled = null;\n","import { debugWrapper, getClientLogConfig, getClientStates } from '@amplitude/analytics-core';\nimport { BrowserClient } from '@amplitude/analytics-types';\nimport { AmplitudeBrowser } from './browser-client';\n\nexport const createInstance = (): BrowserClient => {\n  const client = new AmplitudeBrowser();\n  return {\n    init: debugWrapper(\n      client.init.bind(client),\n      'init',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    add: debugWrapper(\n      client.add.bind(client),\n      'add',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    remove: debugWrapper(\n      client.remove.bind(client),\n      'remove',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    track: debugWrapper(\n      client.track.bind(client),\n      'track',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    logEvent: debugWrapper(\n      client.logEvent.bind(client),\n      'logEvent',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    identify: debugWrapper(\n      client.identify.bind(client),\n      'identify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    groupIdentify: debugWrapper(\n      client.groupIdentify.bind(client),\n      'groupIdentify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setGroup: debugWrapper(\n      client.setGroup.bind(client),\n      'setGroup',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    revenue: debugWrapper(\n      client.revenue.bind(client),\n      'revenue',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    flush: debugWrapper(\n      client.flush.bind(client),\n      'flush',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    getUserId: debugWrapper(\n      client.getUserId.bind(client),\n      'getUserId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId']),\n    ),\n    setUserId: debugWrapper(\n      client.setUserId.bind(client),\n      'setUserId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId']),\n    ),\n    getDeviceId: debugWrapper(\n      client.getDeviceId.bind(client),\n      'getDeviceId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.deviceId']),\n    ),\n    setDeviceId: debugWrapper(\n      client.setDeviceId.bind(client),\n      'setDeviceId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.deviceId']),\n    ),\n    reset: debugWrapper(\n      client.reset.bind(client),\n      'reset',\n      getClientLogConfig(client),\n      getClientStates(client, ['config', 'config.userId', 'config.deviceId']),\n    ),\n    getSessionId: debugWrapper(\n      client.getSessionId.bind(client),\n      'getSessionId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setSessionId: debugWrapper(\n      client.setSessionId.bind(client),\n      'setSessionId',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    extendSession: debugWrapper(\n      client.extendSession.bind(client),\n      'extendSession',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setOptOut: debugWrapper(\n      client.setOptOut.bind(client),\n      'setOptOut',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    setTransport: debugWrapper(\n      client.setTransport.bind(client),\n      'setTransport',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n  };\n};\n\nexport default createInstance();\n","import sessionReplay from './session-replay-factory';\nexport const { init, setSessionId, getSessionId, getSessionReplayProperties, flush, shutdown } = sessionReplay;\n","function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { withStyles as withStylesWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\n\nfunction withStyles(stylesOrCreator, options) {\n  return withStylesWithoutDefault(stylesOrCreator, _extends({\n    defaultTheme: defaultTheme\n  }, options));\n}\n\nexport default withStyles;","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\n\nexport default function _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n        args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n\n      _next(undefined);\n    });\n  };\n}","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  fromJS,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IApplicationReducerState,\n} from './reducer';\n\nimport { EventType } from 'ats-utils/src/Interfaces/AtsApi';\nimport { SPEC_PRINT_TYPE } from '../../constants';\n\nlet initTime: number;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectAppVersionData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('appVersionData')\n);\n\nexport const makeSelectPollingPrintId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('pollingPrintId')\n);\n\nexport const makeSelectAtsApiStates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('atsApiState')\n);\n\nexport const makeSelectAtsApiState = (state: EventType) => createSelector(\n  makeSelectAtsApiStates(),\n  (states) => states.get(state)\n);\n\nexport const makeSelectAtsApiIdentity = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.getIn(['atsApiState', 'identity'])\n);\n\nexport const makeSelectScrollNode = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => {\n    return state.get('scrollNode');\n  }\n);\n\nexport const makeSelectOverlayComponentProps = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('overlayComponentProps', Map<string, object>()),\n);\n\nexport const makeSelectOverlayComponentContents = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('overlayComponentContent', Map<string, string>()),\n);\n\nexport const makeSelectOverlayComponentProp = (id: string) => createSelector(\n  makeSelectOverlayComponentProps(),\n  (state: Map<string, any>) => state.get(id) || {},\n);\n\nexport const makeSelectOverlayComponentContent = (id: string) => createSelector(\n  makeSelectOverlayComponentContents(),\n  (state: Map<string, string>) => state.get(id),\n);\n\nexport const makeSelectOverlayComponents = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('overlayComponents', Map<string, boolean>()),\n);\nexport const makeSelectLastOpenedOverlayComponentId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('lastOpenedOverlayComponentId') || '',\n);\n\nexport const makeSelectOverlayComponent = (id: string) => createSelector(\n  makeSelectOverlayComponents(),\n  (state: Map<string, boolean>) => state.get(id, false),\n);\n\nexport const makeSelectSnackbarOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('snackbarState')\n);\n\nexport const makeSelectPrintSpecIdTypeMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('printSpecIdTypeMap') || Map<number, SPEC_PRINT_TYPE[]>(),\n);\n\nexport const makeSelectPrintSpecIdTypeFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('printSpecIdTypeFiles') || Map<number, SPEC_PRINT_TYPE[]>(),\n);\n\nexport const makeSelectPrintQuoteMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('printQuoteMap') || Map<number, {}>(),\n);\n\nexport const makeSelectPrintQuoteFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IApplicationReducerState>) => state.get('printQuoteFiles') || Map<number, {}>(),\n);\n\nexport const makeSelectSpecToolProjectListIsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['loadingStates', 'specToolProjectListIsLoading']),\n);\n\nexport const makeSelectFileAttachmentIsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['loadingStates', 'fileAttachmentIsLoading']),\n);\n\nexport const makeSelectFieldDropzoneState = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['fieldDropzoneState']),\n);\n\nexport const makeSelectPhotoPreview = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['showPhotoPreview']),\n);\n\nexport const makeSelectMobileAppMenuState = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['showMobileAppMenu']),\n);\n\nexport const makeSelectGetProductDetailsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['loadingStates', 'GET_PRODUCT_DETAILS_LOADING']),\n);\n\nexport const makeSelectVsbEnv = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.getIn(['vsbEnv']),\n);\n\nexport const makeSelectAttributeDialogState = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('attributeDialogState'),\n);\n\nexport const makeSelectOptionDialogState = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('optionDialogState'),\n);\n\nexport const makeSelectAppMenuOpen = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('appMenuOpen'),\n);\n\nexport const makeSelectliveChatOpen = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('liveChatOpen'),\n);\n\nexport const makeSelectTimerTracker = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('timerTracker'),\n);\n\nexport const makeSelectSession = () => createSelector(\n    selectReducerState(),\n    (state: IMap<IApplicationReducerState>) => state.get('session'),\n);\n\nexport const makeSelectTakeoffListOpen = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IApplicationReducerState>) => state.get('takeoffListOpen'),\n);\n\nexport default {\n  selectReducerState,\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport { Quote, ListItem, ShopDrawingHistory, Option, FirmProduct, Package, Filter } from '../../models';\nimport { List } from 'immutable';\nimport { IProductMedia } from '../../components/ShopDrawingPrint';\nimport { ISpecToQuote, ISpecToQuoteSortValue } from './reducer';\nimport { IFeedback } from '../../components/SpecToQuote/interfaces';\n\nexport default {};\n\nexport enum QuoteTypes {\n  SELECT_QUOTE = 'SELECT_QUOTE',\n  GET_QUOTE_FAIL = 'GET_QUOTE_FAIL',\n  CREATE_QUOTE = 'CREATE_QUOTE',\n  CREATE_QUOTE_PREVIEW = 'CREATE_QUOTE_PREVIEW',\n  DUPLICATE_QUOTE = 'DUPLICATE_QUOTE',\n  UPDATE_QUOTE = 'UPDATE_QUOTE',\n  GET_QUOTES = 'GET_QUOTES',\n  GET_QUOTES_SUCCESS = 'GET_QUOTES_SUCCESS',\n  SEARCH_QUOTES = 'SEARCH_QUOTES',\n  GET_SEARCHED_QUOTES_SUCCESS = 'GET_SEARCHED_QUOTES_SUCCESS',\n  GET_QUOTES_FAIL = 'GET_QUOTES_FAIL',\n  DELETE_QUOTE = 'DELETE_QUOTE',\n  DELETE_QUOTE_SUCCESS = 'DELETE_QUOTE_SUCCESS',\n  CREATE_REQUOTE = 'CREATE_REQUOTE',\n  CREATE_REVISION = 'CREATE_REVISION',\n  SET_REVISION = 'SET_REVISION',\n  SET_REVISION_SUCCESS = 'SET_REVISION_SUCCESS',\n  SET_REVISION_FAIL = 'SET_REVISION_FAIL',\n  SET_REVISION_LOADING = 'SET_REVISION_LOADING',\n  GET_REVISIONS = 'GET_REVISIONS',\n  GET_REVISIONS_SUCCESS = 'GET_REVISIONS_SUCCESS',\n  GET_REVISIONS_FAIL = 'GET_REVISIONS_FAIL',\n  DELETE_REVISION = 'DELETE_REVISION',\n  DELETE_REVISION_SUCCESS = 'DELETE_REVISION_SUCCESS',\n  DELETE_REVISION_FAIL = 'DELETE_REVISION_FAIL',\n  SELECT_QUOTE_ID = 'SELECT_QUOTE_ID',\n  COPY_REVISION = 'COPY_REVISION',\n  GET_QUOTE_PHASES = 'GET_QUOTE_PHASES',\n  GET_QUOTE_PHASES_SUCCESS = 'GET_QUOTE_PHASES_SUCCESS',\n  GET_QUOTE_PHASES_FAIL = 'GET_QUOTE_PHASES_FAIL',\n  PATCH_QUOTE = 'PATCH_QUOTE',\n  PATCH_QUOTE_SUCCESS = 'PATCH_QUOTE_SUCCESS',\n  POLL_PRINT_QUOTE = 'POLL_PRINT_QUOTE',\n  RESET_QUOTE_PRINT_DATA = 'RESET_QUOTE_PRINT_DATA',\n  GET_PRODUCT_MEDIA = 'GET_PRODUCT_MEDIA',\n  GET_PRODUCT_MEDIA_SUCCEEDED = 'GET_PRODUCT_MEDIA_SUCCEEDED',\n  SUBMITTING_QUOTE = 'SUBMITTING_QUOTE',\n  SET_IS_CREATING_QUOTE_WITH_SPEC_TO_QUOTE = 'SET_IS_CREATING_QUOTE_WITH_SPEC_TO_QUOTE',\n  CREATE_QUOTE_WITH_SPEC_TO_QUOTE = 'CREATE_QUOTE_WITH_SPEC_TO_QUOTE',\n  CREATE_QUOTE_WITH_SPEC_TO_QUOTE_SUCCESS = 'CREATE_QUOTE_WITH_SPEC_TO_QUOTE_SUCCESS',\n  RESET_CREATE_QUOTE_WITH_SPEC_TO_QUOTE = 'RESET_CREATE_QUOTE_WITH_SPEC_TO_QUOTE',\n  SPEC_TO_QUOTE_SORT = 'SPEC_TO_QUOTE_SORT',\n  UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC = 'UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC',\n  GET_SPEC_TO_QUOTE_PRODUCTS = 'GET_SPEC_TO_QUOTE_PRODUCTS',\n  GET_SPEC_TO_QUOTE_PRODUCTS_SUCCEEDED = 'GET_SPEC_TO_QUOTE_PRODUCTS_SUCCEEDED',\n  GET_SPEC_TO_QUOTE_PRODUCTS_FAILED = 'GET_SPEC_TO_QUOTE_PRODUCTS_FAILED',\n  MERGE_BID_QUOTE_SPEC_TO_QUOTE_LINKED_LIST = 'MERGE_BID_QUOTE_SPEC_TO_QUOTE_LINKED_LIST',\n  MAP_SPEC_TO_QUOTE_PRODUCT = 'MAP_SPEC_TO_QUOTE_PRODUCT',\n  UNMAP_SPEC_TO_QUOTE_PRODUCT = 'UNMAP_SPEC_TO_QUOTE_PRODUCT',\n  DELETE_QUOTE_AND_GET_PROJECT = 'DELETE_QUOTE_AND_GET_PROJECT',\n  UPDATE_QUOTE_PHASE = 'UPDATE_QUOTE_PHASE',\n  UPDATE_QUOTE_PHASE_SUCCEEDED = 'UPDATE_QUOTE_PHASE_SUCCEEDED',\n  UPDATE_QUOTE_ASSIGNED_TO = 'UPDATE_QUOTE_ASSIGNED_TO',\n  UPDATE_QUOTE_ASSIGNED_TO_SUCCEEDED = 'UPDATE_QUOTE_ASSIGNED_TO_SUCCEEDED',\n  SEND_RECOMMENDED_PRODUCT_FEEDBACKS = 'SEND_RECOMMENDED_PRODUCT_FEEDBACKS',\n  CREATE_SALES_ORDER = 'CREATE_SALES_ORDER',\n  SET_IS_CREATING_SALES_ORDER = 'SET_IS_CREATING_SALES_ORDER',\n  UPDATE_SPEC_TO_QUOTE_LOADING = 'UPDATE_SPEC_TO_QUOTE_LOADING',\n  SEND_QUOTE_TO_ERP = 'SEND_QUOTE_TO_ERP',\n  GET_SPEC_TO_QUOTE_STATUS = 'GET_SPEC_TO_QUOTE_STATUS',\n  GET_SPEC_TO_QUOTE_DRAFT = 'GET_SPEC_TO_QUOTE_DRAFT',\n  GET_SPEC_TO_QUOTE_DRAFT_SUCCEEDED = 'GET_SPEC_TO_QUOTE_DRAFT_SUCCEEDED',\n  GET_SPEC_TO_QUOTE_DRAFT_FAILED = 'GET_SPEC_TO_QUOTE_DRAFT_FAILED',\n  SAVE_SPEC_TO_QUOTE_DRAFT = 'SAVE_SPEC_TO_QUOTE_DRAFT',\n  DELETE_SPEC_TO_QUOTE_DRAFT = 'DELETE_SPEC_TO_QUOTE_DRAFT',\n  PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE = 'PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE',\n  PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE = 'PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE',\n  GET_QUOTE_BILLING = 'GET_QUOTE_BILLING',\n  GET_QUOTE_BILLING_SUCCEED = 'GET_QUOTE_BILLING_SUCCEED',\n  GET_QUOTE_BILLING_FAILED = 'GET_QUOTE_BILLING_FAILED',\n  DOWNLOAD_QUOTE_BILLING = 'DOWNLOAD_QUOTE_BILLING',\n  DOWNLOAD_QUOTE_BILLING_SUCCEED = 'DOWNLOAD_QUOTE_BILLING_SUCCEED',\n  DOWNLOAD_QUOTE_BILLING_FAILED = 'DOWNLOAD_QUOTE_BILLING_FAILED',\n  RESET_SPEC_TO_QUOTE = 'RESET_SPEC_TO_QUOTE',\n  RESET_QUOTES = 'RESET_QUOTES',\n  RESET_QUOTES_WITH_EXCEPTION = 'RESET_QUOTES_WITH_EXCEPTION',\n  RESET_REVISIONs = 'RESET_REVISIONs',\n  SET_GET_QUOTES_LOADING = 'SET_GET_QUOTES_LOADING',\n  UPDATE_SPEC_TO_QUOTE_LINKED_LIST_RECOMMENDATIONS = 'UPDATE_SPEC_TO_QUOTE_LINKED_LIST_RECOMMENDATIONS',\n  SET_BID_INVITATION_DATA = 'SET_BID_INVITATION_DATA',\n  SET_LINK_BID_RESPONSE_QUOTE = 'SET_LINK_BID_RESPONSE_QUOTE',\n}\n\nexport class SetBidInvitationDataAction implements IAction {\n  public readonly type = QuoteTypes.SET_BID_INVITATION_DATA;\n\n  constructor(\n    public payload: {\n      bidInvitationData: IMap<any>;\n    }\n  ) { }\n}\n\nexport class SetLinkBidResponseQuoteAction implements IAction {\n  public readonly type = QuoteTypes.SET_LINK_BID_RESPONSE_QUOTE;\n  constructor(\n    public payload: {\n      status: string;\n      linkBidInvitationResponseId: number;\n      sourceQuoteId: number\n    }\n  ) { }\n}\n\nexport class ResetQuotesWithExceptionAction implements IAction {\n  public readonly type = QuoteTypes.RESET_QUOTES_WITH_EXCEPTION;\n\n  constructor(\n    public payload: {\n      idsToKeep: number[];\n    }\n  ) {}\n}\n\nexport class ResetRevisionAction implements IAction {\n  public readonly type = QuoteTypes.RESET_REVISIONs;\n}\n\nexport class ResetQuotesAction implements IAction {\n  public readonly type = QuoteTypes.RESET_QUOTES;\n}\n\nexport class DeleteSpecToQuoteDraftAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_SPEC_TO_QUOTE_DRAFT;\n\n  constructor(\n    public payload: {\n      specId: number;\n    }\n  ) {}\n}\n\nexport class SaveSpecToQuoteDraftAction implements IAction {\n  public readonly type = QuoteTypes.SAVE_SPEC_TO_QUOTE_DRAFT;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n      draft: any;\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteDraftFailedAction implements IAction {\n  public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT_FAILED;\n}\n\nexport class GetSpecToQuoteDraftSucceededAction implements IAction {\n  public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n      createdDate: string;\n      userId: string;\n      draft: any;\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteDraftAction implements IAction {\n  public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n      onSuccess?: (draft: any) => void;\n    }\n  ) {}\n}\n\nexport class SendQuoteToErpAction implements IAction {\n  public readonly type = QuoteTypes.SEND_QUOTE_TO_ERP;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n    }\n  ) {}\n}\n\nexport class ResetCreateQuoteWithSpecToQuoteAction implements IAction {\n  public readonly type = QuoteTypes.RESET_CREATE_QUOTE_WITH_SPEC_TO_QUOTE;\n}\n\nexport class SetIsCreatingSalesOrderAction implements IAction {\n  public readonly type = QuoteTypes.SET_IS_CREATING_SALES_ORDER;\n\n  constructor(\n    public payload: {\n      isCreatingSalesOrder: boolean;\n    }\n  ) {}\n}\n\nexport class CreateSalesOrderAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_SALES_ORDER;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      dispatch: any\n    }\n  ) {}\n}\n\nexport class SendRecommendedProductFeedbacksAction implements IAction {\n  public readonly type = QuoteTypes.SEND_RECOMMENDED_PRODUCT_FEEDBACKS;\n\n  constructor(\n    public payload: {\n      feedbacks: List<IMap<IFeedback>>,\n      specId: number\n    }\n  ) {}\n}\n\nexport class UpdateQuotePhaseSucceededAction implements IAction {\n  public readonly type = QuoteTypes.UPDATE_QUOTE_PHASE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      quotePhase: string\n    }\n  ) {}\n}\n\nexport class UpdateQuotePhaseAction implements IAction {\n  public readonly type = QuoteTypes.UPDATE_QUOTE_PHASE;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      quotePhase: string\n    }\n  ) {}\n}\n\nexport class UpdateQuoteAssignedToAction implements IAction {\n  public readonly type = QuoteTypes.UPDATE_QUOTE_ASSIGNED_TO;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      assignedTo: any[],\n    }\n  ) {}\n}\n\nexport class UpdateQuoteAssignedToSucceededAction implements IAction {\n  public readonly type = QuoteTypes.UPDATE_QUOTE_ASSIGNED_TO_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      assignedTo: any[],\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteProductsSucceededAction implements IAction {\n  public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS_SUCCEEDED;\n  constructor(\n    public payload: {\n      specToQuoteLinkedList: List<IMap<ISpecToQuote>>,\n      specId: number,\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteProductsFailedAction implements IAction {\n    public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS_FAILED;\n}\n\nexport class MergeBidQuoteSpecToQuoteLinkedListAction implements IAction {\n  public readonly type = QuoteTypes.MERGE_BID_QUOTE_SPEC_TO_QUOTE_LINKED_LIST;\n  constructor(\n    public payload: {\n      specId: number,\n      specToQuoteLinkedList: any,\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteProductsAction implements IAction {\n  public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS;\n  constructor(\n    public payload: {\n      specId: number\n      // drawingIds: number[],\n      // isAi: boolean,\n    }\n  ) {}\n}\n\nexport class GetSpecToQuoteStatusAction implements IAction {\n    public readonly type = QuoteTypes.GET_SPEC_TO_QUOTE_STATUS;\n    constructor(\n        public payload: {\n            id: number;\n            printId: string;\n            start?: number\n        }\n    ) {}\n}\n\nexport class MapSpecToQuoteProductAction implements IAction {\n  public readonly type = QuoteTypes.MAP_SPEC_TO_QUOTE_PRODUCT;\n  constructor(\n    public payload: any\n  ) {}\n}\n\nexport class UnmapSpecToQuoteProductAction implements IAction {\n  public readonly type = QuoteTypes.UNMAP_SPEC_TO_QUOTE_PRODUCT;\n  constructor(\n    public payload: any\n  ) {}\n}\n\nexport class SetIsCreatingQuoteWithSpecToQuoteAction implements IAction {\n  public readonly type = QuoteTypes.SET_IS_CREATING_QUOTE_WITH_SPEC_TO_QUOTE;\n  constructor (\n    public payload: {\n      isLoading: boolean;\n    }\n  ) {}\n}\n\nexport class CreateQuoteWithSpecToQuoteAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_QUOTE_WITH_SPEC_TO_QUOTE;\n  constructor (\n    public payload?: {\n      partialQuote?: IMap<Partial<Quote>>;\n      projectId?: number;\n      specId?: number;\n      isAi?: boolean;\n      productIds?: number[];\n      packageIds?: number[];\n      isAiValidated?: boolean;\n      exitAfterSave?: boolean;\n      isAutoSave?: boolean;\n      onSuccess?: (quote: IMap<Partial<Quote>>) => void;\n    }\n  ) {}\n}\n\nexport class CreateQuoteWithSpecToQuoteActionSuccess implements IAction {\n  public readonly type = QuoteTypes.CREATE_QUOTE_WITH_SPEC_TO_QUOTE_SUCCESS;\n}\n\nexport class GetProductMediaAction implements IAction {\n  public readonly type = QuoteTypes.GET_PRODUCT_MEDIA;\n  constructor (\n    public payload: {\n      quoteId: number,\n    }\n  ) {}\n}\n\nexport class GetProductMediaSucceededAction implements IAction {\n  public readonly type = QuoteTypes.GET_PRODUCT_MEDIA_SUCCEEDED;\n  constructor (\n    public payload: List<IMap<IProductMedia>>\n  ) {}\n}\n\nexport class GetQuoteFailAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTE_FAIL;\n  constructor (\n    public payload?: {\n      error: any\n    }\n  ) {}\n}\n\nexport class SelectQuoteAction implements IAction {\n  public readonly type = QuoteTypes.SELECT_QUOTE;\n\n  constructor(\n    public payload: number\n  ) {}\n}\n\nexport class GetQuotePhasesAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTE_PHASES;\n\n  constructor(\n    public payload?: any\n  ) {}\n}\n\nexport class GetQuotePhasesSuccessAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTE_PHASES_SUCCESS;\n\n  constructor(\n    public payload: {\n      quotePhases: List<IMap<ListItem>>\n    }\n  ) {}\n}\n\nexport class PatchQuoteAction implements IAction {\n  public readonly type = QuoteTypes.PATCH_QUOTE;\n\n  constructor(\n    public quoteId?: number,\n    public payload?: Partial<Quote>,\n  ) {}\n}\n\nexport class PatchQuoteSuccessAction implements IAction {\n  public readonly type = QuoteTypes.PATCH_QUOTE_SUCCESS;\n\n  constructor(\n    public payload?: any\n  ) {}\n}\n\nexport class GetQuotesAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTES;\n  constructor(\n    public payload?: {\n      quoteId: number,\n      withLocation?: boolean,\n      searchTerm?: string,\n      fallbackTo404?: boolean,\n    }\n  ) {}\n}\n\nexport class GetQuotesSuccessAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTES_SUCCESS;\n  constructor (\n    public payload?: {\n      quotes: List<IMap<Quote>>,\n    }\n  ) {}\n}\n\nexport class SearchQuotesAction implements IAction {\n  public readonly type = QuoteTypes.SEARCH_QUOTES;\n  constructor(\n    public payload?: {\n      options: Option<Quote>,\n      searchTerm?: string,\n      filters?: Filter,\n    }\n  ) {}\n}\n\nexport class GetQuoteSearchResultsSucceededAction implements IAction {\n  public readonly type = QuoteTypes.GET_SEARCHED_QUOTES_SUCCESS;\n  constructor (\n    public payload?: {\n      quotes: List<IMap<Quote>>,\n      count: number,\n      hasNextPage: boolean,\n    }\n  ) {}\n}\n\nexport class GetQuotesFailAction implements IAction {\n  public readonly type = QuoteTypes.GET_QUOTES_FAIL;\n  constructor (\n    public payload?: {\n      error: any\n    }\n  ) {}\n}\n\nexport class CreateQuoteAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_QUOTE;\n  constructor (\n    public payload: {\n      exitAfterSave: boolean;\n      isAutoSave?: boolean;\n      onSuccess?: (quote: IMap<Partial<Quote>>) => void;\n    }\n  ) {}\n}\n\nexport class CreateQuotePreviewAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_QUOTE_PREVIEW;\n  constructor (\n    public payload: any\n  ) {}\n}\n\nexport class DuplicateQuoteAction implements IAction {\n  public readonly type = QuoteTypes.DUPLICATE_QUOTE;\n  constructor (\n    public payload: any\n  ) {}\n}\n\nexport class DeleteQuoteAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_QUOTE;\n  constructor (\n    public payload: {\n      quoteId: number,\n      redirectTo?: string\n      options?: Option<Quote>,\n      searchTerm?: string,\n      filters?: object,\n      onFinally?: () => void;\n    }\n  ) {}\n}\n\nexport class DeleteQuoteAndGetProjectAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_QUOTE_AND_GET_PROJECT;\n  constructor (\n    public payload: {\n      quoteId: number,\n      projectId: number,\n    }\n  ) {}\n}\n\nexport class CreateRevisionAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_REVISION;\n  constructor (\n    public payload: any\n  ) {}\n}\n\nexport class CreateRequoteAction implements IAction {\n  public readonly type = QuoteTypes.CREATE_REQUOTE;\n  constructor (\n    public payload: any\n  ) {}\n}\n\nexport class DeleteQuoteSuccessAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_QUOTE_SUCCESS;\n  constructor (\n    public payload: any\n  ) {}\n}\n\nexport class UpdateQuoteAction implements IAction {\n  public readonly type = QuoteTypes.UPDATE_QUOTE;\n  constructor (\n    public payload: {\n      exitAfterSave: boolean;\n      isAutoSave?: boolean;\n      onSuccess?: (quote: IMap<Partial<Quote>>) => void;\n    }\n  ) {}\n}\n\nexport class SetRevisionLoadingAction implements IAction {\n  public readonly type = QuoteTypes.SET_REVISION_LOADING;\n\n  constructor(\n    public payload: {\n      isLoading: boolean;\n      message?: string;\n    }\n  ) { }\n}\n\nexport class SubmittingQuoteAction implements IAction {\n  public readonly type = QuoteTypes.SUBMITTING_QUOTE;\n\n  constructor(\n     public payload: boolean\n  ) {}\n}\n\nexport class SetRevisionAction implements IAction {\n  public readonly type = QuoteTypes.SET_REVISION;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n    }\n  ) { }\n}\n\nexport class SetRevisionSuccessAction implements IAction {\n  public readonly type = QuoteTypes.SET_REVISION_SUCCESS;\n\n  constructor (\n    public payload: {\n      quote: IMap<Quote>;\n    }\n  ) { }\n}\n\nexport class GetRevisionsAction implements IAction {\n  public readonly type = QuoteTypes.GET_REVISIONS;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n    }\n  ) { }\n}\n\nexport class GetRevisionsSuccessAction implements IAction {\n  public readonly type = QuoteTypes.GET_REVISIONS_SUCCESS;\n\n  constructor(\n    public payload: {\n      revisions: List<IMap<Quote>>;\n    }\n  ) { }\n}\n\nexport class DeleteRevisionAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_REVISION;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n    }\n  ) { }\n}\n\nexport class DeleteRevisionSuccessAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_REVISION_SUCCESS;\n\n  constructor(\n    public payload: {\n      quoteId: number,\n      parentQuoteId: number,\n      previousQuoteId: number,\n    }\n  ) { }\n}\n\n\nexport class SelectQuoteIdAction implements IAction {\n  public readonly type = QuoteTypes.SELECT_QUOTE_ID;\n\n  constructor(\n    public payload: {\n      quoteId: number;\n    }\n  ) { }\n}\n\nexport class SetRevisionFailAction implements IAction {\n  public readonly type = QuoteTypes.SET_REVISION_FAIL;\n\n  constructor(\n    public payload?: {\n      err: any\n    }\n  ) { }\n}\n\nexport class GetRevisionsFailAction implements IAction {\n  public readonly type = QuoteTypes.GET_REVISIONS_FAIL;\n\n  constructor(\n    public payload?: {\n      err: any\n    }\n  ) { }\n}\n\nexport class DeleteRevisionFailAction implements IAction {\n  public readonly type = QuoteTypes.DELETE_REVISION_FAIL;\n\n  constructor(\n    public payload?: {\n      err: any\n    }\n  ) { }\n}\n\nexport class CopyRevisionAction implements IAction {\n  public readonly type = QuoteTypes.COPY_REVISION;\n\n  constructor(\n    public payload: {\n      quoteId: number\n    }\n  ) { }\n}\n\nexport class ResetPrintQuoteDataAction {\n  public readonly type = QuoteTypes.RESET_QUOTE_PRINT_DATA;\n}\n\nexport class UpdateSpecToQuoteLoadingAction {\n    public readonly type = QuoteTypes.UPDATE_SPEC_TO_QUOTE_LOADING;\n}\n\nexport class PrepareInitialValuesForSpecToQuote {\n    public readonly type = QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE;\n    constructor(\n        public payload: {\n            quoteId: number;\n            draft: any;\n        }\n    ) {\n    }\n}\n\nexport class PrepareInitialValuesForSpecToSourceQuote {\n  public readonly type = QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE;\n  constructor(\n    public payload: {\n      quoteId: number;\n      draft: any;\n    }\n  ) {\n  }\n}\nexport class GetQuoteBillingAction {\n    public readonly type = QuoteTypes.GET_QUOTE_BILLING;\n    constructor(\n        public payload: {\n            startDate,\n            endDate,\n        }\n    ) {\n    }\n}\nexport class GetQuoteBillingSucceedAction {\n    public readonly type = QuoteTypes.GET_QUOTE_BILLING_SUCCEED;\n\n    constructor(\n        public payload: {\n            data\n        }\n    ) {\n    }\n}\nexport class GetQuoteBillingFailedAction {\n    public readonly type = QuoteTypes.GET_QUOTE_BILLING_FAILED;\n}\n\nexport class DownloadQuoteBillingAction {\n    public readonly type = QuoteTypes.DOWNLOAD_QUOTE_BILLING;\n    constructor(\n        public payload: {\n            startDate,\n            endDate,\n            onSuccess,\n            onFail,\n        }\n    ) {\n    }\n}\n\nexport class DownloadQuoteBillingSucceedAction {\n    public readonly type = QuoteTypes.DOWNLOAD_QUOTE_BILLING_SUCCEED;\n}\nexport class DownloadQuoteBillingFailedAction {\n    public readonly type = QuoteTypes.DOWNLOAD_QUOTE_BILLING_FAILED;\n}\nexport class ResetSpecToQuote {\n  public readonly type = QuoteTypes.RESET_SPEC_TO_QUOTE;\n}\nexport class SetGetQuotesLoadingAction {\n  public readonly type = QuoteTypes.SET_GET_QUOTES_LOADING;\n  constructor(\n    public payload: {\n      isLoading: boolean;\n      quoteId: number;\n    }\n  ) {}\n}\n\nexport class UpdateSpecToQuoteLinkedListRecommendationsAction {\n  public readonly type = QuoteTypes.UPDATE_SPEC_TO_QUOTE_LINKED_LIST_RECOMMENDATIONS;\n  constructor(\n    public payload: {\n      specId: number;\n      productOrPackageId: number;\n      productOrPackage: IMap<FirmProduct | Package>;\n    }\n  ) {}\n}\nexport type QuoteTemplateActions =\n  | GetQuoteFailAction\n  | CreateQuoteAction\n  | UpdateQuoteAction\n  | GetQuotesAction\n  | GetQuotesSuccessAction\n  | GetQuotesFailAction\n  | SetRevisionAction\n  | SetRevisionSuccessAction\n  | GetRevisionsAction\n  | GetRevisionsSuccessAction\n  | DeleteRevisionAction\n  | DeleteRevisionSuccessAction\n  | SelectQuoteIdAction\n  | SetRevisionFailAction\n  | GetRevisionsFailAction\n  | DeleteRevisionFailAction\n  | CopyRevisionAction\n  | GetQuotePhasesAction\n  | GetQuotePhasesSuccessAction\n  | GetQuoteBillingAction\n  ;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createSvgIcon;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _SvgIcon = _interopRequireDefault(require(\"@material-ui/core/SvgIcon\"));\n\nfunction createSvgIcon(path, displayName) {\n  var Component = _react.default.memo(_react.default.forwardRef(function (props, ref) {\n    return _react.default.createElement(_SvgIcon.default, (0, _extends2.default)({\n      ref: ref\n    }, props), path);\n  }));\n\n  if (process.env.NODE_ENV !== 'production') {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = _SvgIcon.default.muiName;\n  return Component;\n}","import objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}","export default function camelize(str) {\n  return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (letter, index) =>\n    index === 0 ? letter.toLowerCase() : letter.toUpperCase()\n  ).replace(/\\s+/g, '');\n}\n","\nimport { Iterable, Map, OrderedMap } from 'immutable';\n\nexport function isArray(o) {\n  return (o != null) &&\n    ((Iterable.isIterable(o) &&\n    !Map.isMap(o) &&\n    !OrderedMap.isOrderedMap(o)) ||\n    o.constructor === Array);\n}\n\nexport default isArray;\n","import { isImmutable, List, Collection } from 'immutable';\nimport isArray from '../isArray';\n\nexport function singleOrArray<T extends List<any>>(o: T): T;\nexport function singleOrArray<T extends Collection<any, any>>(o: T): List<T>;\nexport function singleOrArray<T>(o: T | T[]): T[];\nexport function singleOrArray<T>(o: T) {\n  if (isImmutable(o)) {\n    return List.isList(o) ? o as List<any> : List([o]);\n  }\n  return isArray(o) ? o : [o];\n}\n\nexport default singleOrArray;\n","\nimport isObject from 'lodash/isObject';\nimport { fromJS } from 'immutable';\nimport singleOrArray from '../singleOrArray';\nimport isArray from '../isArray';\n\n// stringReplace\n// takes in a string and an object, array, or multiple parameters\n// and attempts to substitute 'values' into curly braces.\n\n/*\n  example with object:\n  note: object can also be immutable object\n\n  stringReplace(\n    \"{test} {id.deeply.nested.attribute} {hello}\",\n    {\n      test: 1,\n      id: {deeply: {nested: {attribute: 2}}},\n      hello: 3\n    }\n  ) -> '1 2 3'\n\n*/\n\n/*\n  example with array:\n\n  stringReplace(\n    \"{0} {2} {1}\",\n    [1, 2, 3],\n  ) -> '1 3 2'\n\n*/\n\n/*\n  example with param list (more than 1 \"additional param\" after the string param)\n\n  stringReplace(\n    \"{0} {2} {1}\",\n    4,\n    5,\n    6,\n  ) -> '4 6 5'\n\n*/\n\n/*\n  example with object keys, but 'array-like' args\n  will replace them 'in-order' as long as there are no 'index-like' replace tokens (e.g. {0}, {1}, etc..)\n  also, missing keys / missing indexes in the replacement args will not be substituted\n\n  stringReplace(\n    \"{hello}-{world} {foo}-{bar}\",\n    4,\n    5,\n    6,\n  ) -> '4-5 6-{bar}'\n\n*/\n\nexport const stringReplace = (str, maybeObject, ...rest) => {\n  if (isObject(maybeObject) && !isArray(maybeObject)) {\n    const immutableObject = fromJS(maybeObject);\n\n    return str.replace(\n      /\\{([^{}]+)\\}/g,\n      (val, index) => {\n        const replacement = immutableObject.getIn(index.split('.'));\n        return replacement != null ? replacement : val;\n      }\n    );\n  }\n  let substituteParams = singleOrArray(maybeObject);\n\n  if (rest.length !== 0) {\n    substituteParams = [...substituteParams, ...rest];\n  }\n  if (str.match(/\\{([0-9]+)\\}/g)) {\n    return str.replace(\n      /\\{([0-9]+)\\}/g,\n      (val, index) => {\n        const replacement = substituteParams[index];\n        return replacement != null ? replacement : val;\n      }\n    );\n  }\n  let idx = 0;\n  return str.replace(\n    /\\{([^{}]+)\\}/g,\n    (val, _) => { // eslint-disable-line no-unused-vars\n      const replacement = substituteParams[idx++]; // eslint-disable-line no-plusplus\n      return replacement != null ? replacement : val;\n    }\n  );\n};\n\nexport default stringReplace;\n","export function safeStringify(o) {\n  let cache = [];\n  const result = JSON.stringify(o, (key, value) => {\n    if (typeof value === 'object' && value !== null) {\n      if (cache.indexOf(value) !== -1) {\n        // Circular reference found, discard key\n        return null;\n      }\n      // Store value in our collection\n      cache.push(value);\n    }\n    return value;\n  });\n\n  cache = null; // Enable garbage collection\n  return result;\n}\n\nexport default safeStringify;\n","// https://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n// for checking object during state / action sanitization for redux devtools\nexport function isElement(o) {\n  return (\n    typeof HTMLElement === \"object\"\n    ? o instanceof HTMLElement // DOM2\n    : o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName===\"string\"\n  );\n}\n\nexport default isElement;\n","// https://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n// for checking object during state / action sanitization for redux devtools\nexport function isNode(o) {\n  return (\n    typeof Node === \"object\"\n    ? o instanceof Node\n    : o && typeof o === \"object\" && typeof o.nodeType === \"number\" && typeof o.nodeName===\"string\"\n  );\n}\n\nexport default isNode;\n","\nimport pathToRegexp from 'path-to-regexp';\nimport {\n  isArray,\n} from 'lodash';\n\nexport interface IMatch<Params extends { [K in keyof Params]?: string } = {}> {\n  params: Params;\n  isExact: boolean;\n  path: string;\n  url: string;\n}\n\ninterface ICompilePathResult {\n  regexp: pathToRegexp.Path;\n  keys: pathToRegexp.Key[];\n}\n\nconst cache: {\n  [optionsCacheKey: string]: {\n    [pathCacheKey: string]: ICompilePathResult;\n  };\n} = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path: pathToRegexp.Path, options: pathToRegexp.ParseOptions & pathToRegexp.RegExpOptions): ICompilePathResult {\n  const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n  const pathCache: object = cache[cacheKey] || (cache[cacheKey] = {});\n  const pathKey = `${path}`;\n\n  if (pathCache[pathKey]) {\n    return pathCache[pathKey];\n  }\n\n  const keys: pathToRegexp.Key[] = [];\n  const regexp = pathToRegexp(path, keys, options);\n  const result = { regexp, keys };\n\n  if (cacheCount < cacheLimit) {\n    pathCache[pathKey] = result;\n    cacheCount++;\n  }\n\n  return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPathPartial<T>(pathname: string, options: string | string[] | {\n  path?: string | string[];\n  exact?: boolean;\n  strict?: boolean;\n  sensitive?: boolean;\n} = {}) {\n  if (isArray(options) || (typeof options === 'string')) {\n    options = { path: options };\n  }\n\n  const { path, exact = false, strict = false, sensitive = false } = options;\n\n  const paths: string[] = [].concat(path);\n\n  return paths.reduce((matched: IMatch<T>, pathFragment) => {\n    if (!pathFragment) {\n      return null;\n    }\n    if (matched) {\n      return matched;\n    }\n\n    const { regexp, keys } = compilePath(pathFragment, {\n      end: exact,\n      strict,\n      sensitive\n    });\n    const partialRegExp = new RegExp(regexp.toString().slice(2, -2), 'i');\n    const matchFragment = partialRegExp.exec(pathname);\n\n    if (!matchFragment) {\n      return null;\n    }\n\n    const [url, ...values] = matchFragment;\n    const isExact = pathname === url;\n\n    if (exact && !isExact) {\n      return null;\n    }\n\n    return {\n      path: pathFragment, // the path used to match\n      url: pathFragment === '/' && url === '' ? '/' : url, // the matched portion of the URL\n      isExact, // whether or not we matched exactly\n      params: keys.reduce((memo, key, index) => {\n        memo[key.name] = values[index];\n        return memo;\n      }, {}) as T\n    };\n  }, null);\n}\n\nexport default matchPathPartial;","\n// isDate returns 3 possible values:\n// null if not a Date object\n// false if is a Date, but not valid date\n// true if is a Date and valid\nimport isValidDate from '../isValidDate';\n\nexport function parseDate(stringValue, withTimezone = true) {\n  if (stringValue === '' || stringValue == null) {\n    return null;\n  }\n  let date = new Date(stringValue);\n\n  if (!isValidDate(date)) {\n    date = null;\n  } else if (!withTimezone) {\n    date = new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\n  }\n  return date;\n}\n\nexport default parseDate;\n","import conformsTo from 'lodash/conformsTo';\nimport isFunction from 'lodash/isFunction';\nimport isObject from 'lodash/isObject';\nimport invariant from 'invariant';\n\n/**\n * Validate the shape of redux store\n */\nexport default function checkStore(store) {\n  const shape = {\n    dispatch: isFunction,\n    subscribe: isFunction,\n    getState: isFunction,\n    replaceReducer: isFunction,\n    runSaga: isFunction,\n    injectedReducers: isObject,\n    injectedSagas: isObject,\n  };\n\n  invariant(\n    conformsTo(store, shape),\n    '(app/utils...) injectors: Expected a valid redux store'\n  );\n}\n","export function debugLog(...args) {\n  console.debug(...args); // eslint-disable-line no-console\n}\n\nexport default debugLog;\n","\nimport singleOrArray from '../singleOrArray';\nimport isArray from '../isArray';\n\nexport const callFunctions = (functionOrArr) => (...args) => {\n  const ret = [];\n  singleOrArray(functionOrArr).forEach((func) => {\n    if (isArray(func)) {\n      ret.push(callFunctions(func)(...args));\n    } else if (func != null) {\n      ret.push(func(...args));\n    }\n  });\n  return ret.slice(-1)[0];\n};\n\nexport default callFunctions;\n","// eslint-disable-next-line no-undef\nexport const parseQueryString = () => {\n  const str = window.location.search;\n  const objURL = {};\n\n  str.replace(\n    new RegExp('([^?=&]+)(=([^&]*))?', 'g'),\n    ($0, $1, $2, $3) => {\n      objURL[$1] = $3;\n    }\n  );\n  return objURL;\n};\n\nexport default parseQueryString;\n","import qs from 'qs';\n\nconst stringifyQueryParams = (params) => qs.stringify(params, { arrayFormat: 'index' });\n\nexport default stringifyQueryParams;\n","\n// from https://github.com/erikras/redux-form/blob/master/src/events/isEvent.js\n\nexport interface Option { // tslint:disable-line\n  selected: boolean;\n  value: any;\n}\n\nexport interface Event<T = object> { // tslint:disable-line\n  target: {\n    value: any,\n    type: string,\n    options?: HTMLOptionsCollection,\n    checked?: boolean,\n    files?: FileList\n  };\n  dataTransfer?: {\n    files: any[],\n    getData: (key: string) => any,\n    setData: (key: string, data: any) => void\n  };\n  nativeEvent?: T;\n  preventDefault(): void;\n  stopPropagation(): void;\n}\n\nconst isEvent = (candidate) =>\n  !!(candidate && candidate.stopPropagation && candidate.preventDefault);\n\nexport default isEvent;\n","// from https://github.com/erikras/redux-form/blob/master/src/isReactNative.js\n\nconst isReactNative =\n  typeof window !== 'undefined' &&\n  window.navigator &&\n  window.navigator.product &&\n  window.navigator.product === 'ReactNative';\n\nexport default isReactNative;\n","// from https://github.com/erikras/redux-form/blob/master/src/events/getValue.js\n// getValue from React Synthetic Event\nimport isEvent, { Event } from '../rfIsEvent';\n\n\nconst getSelectedValues = options => {\n  const result = [];\n  if (options) {\n    for (const option of options) {\n      if (option.selected) {\n        result.push(option.value);\n      }\n    }\n  }\n  return result;\n};\n\nconst getValue = (event: Event, isReactNative?: boolean) => {\n  if (isEvent(event)) {\n    const nativeEventText = event.nativeEvent && (event.nativeEvent as any).text;\n    if (\n      !isReactNative &&\n      event.nativeEvent &&\n      nativeEventText !== undefined\n    ) {\n      return nativeEventText;\n    }\n    if (isReactNative && event.nativeEvent !== undefined) {\n      return nativeEventText;\n    }\n    const detypedEvent: any = event;\n    const {\n      target: { type, value, checked, files },\n      dataTransfer\n    } = detypedEvent;\n    if (type === 'checkbox') {\n      return !!checked;\n    }\n    if (type === 'file') {\n      return files || (dataTransfer && dataTransfer.files);\n    }\n    if (type === 'select-multiple') {\n      return getSelectedValues(event.target.options);\n    }\n    return value;\n  }\n  return event;\n};\n\nexport default getValue;\n","import getValue from '../rfGetValue';\nimport isReactNative from '../rfIsReactNative';\nimport { Event } from '../rfIsEvent';\n\nconst onChangeValue = (\n  event: Event,\n  {\n    name,\n    parse,\n    normalize\n  }: { name: string, parse?: (value: any, name?: string) => any, normalize?: (value: any, name?: string) => any }\n) => {\n  // read value from input\n  let value = getValue(event, isReactNative);\n\n  // parse value if we have a parser\n  if (parse) {\n    value = parse(value, name);\n  }\n\n  // normalize value\n  if (normalize) {\n    value = normalize(value, name);\n  }\n\n  return value;\n};\n\nexport default onChangeValue;","import { createSelector } from 'reselect';\nimport {\n  Map,\n  List,\n  fromJS,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  ContactListItem,\n  Project, ProjectTrackStatus,\n} from '../../models';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  IProjectReducerState,\n} from './reducer';\nlet initTime: number;\n\nexport const makeSelectSelectedProjectLocation = () => createSelector(\n  makeSelectProject(),\n  (selectedProject: IMap<Project>) => selectedProject.get('location'),\n);\n\nexport const makeSelectProjectFormActiveStep = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('activeStep'),\n);\n\nexport const makeSelectTrackedProjectStatuses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('trackedProjectStatuses') || List<IMap<ProjectTrackStatus>>(),\n);\n\nexport const makeSelectTrackedProjectIds = () => createSelector(\n  makeSelectTrackedProjectStatuses(),\n  (trackedProjectStatuses: List<IMap<ProjectTrackStatus>>) => trackedProjectStatuses.map((trackInfo: IMap<ProjectTrackStatus>) => {\n    return Number(trackInfo.get('projectId'));\n  }),\n);\n\nexport const makeSelectSelectedProjectTrackStatus = () => createSelector(\n  makeSelectTrackedProjectIds(),\n  makeSelectSelectedProjectId(),\n  (trackedProjectIds: List<number>, selectedProjectId: number) => {\n    const isTracked = trackedProjectIds.includes(selectedProjectId);\n    return isTracked;\n  }\n);\n\nexport const makeSelectGetMasterProjectLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingGetMasterProjectById'),\n);\n\nexport const makeSelectGetMasterTemplateLoading = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingGetTemplateProjectById'),\n);\n\nexport const selectReducerState = () => (state: Map<string, any>) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ProjectModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectSelectedProjectId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('selectedProjectId'),\n);\n\nexport const makeSelectProjectIdForCreatingSpec = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('projectIdForCreatingSpec'),\n);\n\nexport const makeSelectSelectedProjectOpportunityGroupUuidId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('selectedProjectOpportunityGroupUuid'),\n);\n\n\n\nexport const makeSelectProjects = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('projects') || Map<number, IMap<Project>>(),\n);\n\nexport const _makeSelectProject = () => createSelector(\n  makeSelectProjects(),\n  makeSelectSelectedProjectId(),\n  (projects: Map<number, IMap<Project>>, projectId: number) => projects.get(projectId)\n);\n\n// TODO: Do not use this selector anymore, refactor it in the future, due to the problem in https://atsinc.atlassian.net/wiki/spaces/ITSPACE/pages/2163966117/The+Common+Mistakes+of+Using+Selectors\nexport const makeSelectProject = (\n  {\n    projectId: controlledProjectId,\n  }: {\n    projectId?: number\n  } = {}\n) => createSelector(\n  makeSelectProjects(),\n  makeSelectSelectedProjectId(),\n  (projects: Map<number, IMap<Project>>, projectId: number) => controlledProjectId != null\n    ? projects.get(controlledProjectId)\n    : projects.get(projectId),\n);\n\nexport const makeSelectSearchedProjects = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedProjects'),\n);\n\nexport const makeSelectSearchingProjects = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingProjects'),\n);\n\nexport const makeSelectSearchedProjectsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedProjectsCount'),\n);\n\nexport const makeSelectSearchedProjectsHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedProjectsHasNextPage'),\n);\n\nexport const makeSelectSelectedProjectFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('selectedProjectFiles'),\n);\n\n\nexport const makeSelectSearchedTemplates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedTemplates'),\n);\n\nexport const makeSelectSearchingTemplates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingTemplates'),\n);\n\nexport const makeSelectSearchedTemplatesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedTemplatesCount'),\n);\n\nexport const makeSelectSearchedTemplatesHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedTemplatesHasNextPage'),\n);\n\nexport const makeSelectSearchedMasters = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedMasters'),\n);\n\nexport const makeSelectSearchedMastersInCopyModal = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedMastersInCopyModal'),\n);\nexport const makeSelectSearchingMasters = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingMasters'),\n);\nexport const makeSelectSearchingMastersInCopyModal = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchingMastersInCopyModal'),\n);\n\nexport const makeSelectSearchedMastersCount = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedMastersCount'),\n);\n\nexport const makeSelectSearchedMastersHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('searchedMastersHasNextPage'),\n);\n\nexport const makeSelectSelectedMasterProjectId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('selectedMasterId'),\n);\n\nexport const makeSelectSelectedTemplateProjectId = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('selectedTemplateId'),\n);\n\nexport const makeSelectMasterProjects = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('masters') || Map<number, IMap<Project>>(),\n);\nexport const makeSelectTemplateProjects = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('templates') || Map<number, IMap<Project>>(),\n);\n\n// TODO: Do not use this selector anymore, refactor it in the future, due to the problem in https://atsinc.atlassian.net/wiki/spaces/ITSPACE/pages/2163966117/The+Common+Mistakes+of+Using+Selectors\nexport const makeSelectMaster = (\n  {\n    projectId: controlledMasterId,\n  }: {\n    projectId?: number\n  } = {}\n) => createSelector(\n  makeSelectMasterProjects(),\n  makeSelectSelectedMasterProjectId(),\n  (masters: Map<number, IMap<Project>>, projectId: number) => controlledMasterId != null\n    ? masters.get(controlledMasterId)\n    : masters.get(projectId),\n);\nexport const makeSelectTemplate = (\n    {\n      projectId: controlledTemplateId,\n    }: {\n      projectId?: number\n    } = {}\n) => createSelector(\n    makeSelectTemplateProjects(),\n    makeSelectSelectedTemplateProjectId(),\n    (templates: Map<number, IMap<Project>>, projectId: number) => controlledTemplateId != null\n        ? templates.get(controlledTemplateId)\n        : templates.get(projectId),\n);\nexport const makeSelectProjectMasterSavingAllow = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('projectMasterSavingAllow'),\n);\n\nexport const makeSelectCheckOpportunityStatusUpToDate = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'upToDate']),\n);\n\nexport const makeSelectCheckOpportunityStatusUpToDateFetching = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'upToDateFetching']),\n);\n\nexport const makeSelectUpdateOpportunityAutomationOpportunities = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'opportunities']),\n);\n\nexport const makeSelectUpdateOpportunityAutomationOpportunitiesFetching = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'opportunitiesFetching']),\n);\n\nexport const makeSelectCheckOpportunityExists = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'opportunityExists']),\n);\n\nexport const makeSelectCheckOpportunityExistsFetching = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(['opportunityStatus', 'opportunityExistsFetching']),\n);\n\nexport const makeSelectIsTrackingOrUntrackingProject = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('isTrackingOrUntrackingProject'),\n);\n\nexport const makeSelectProjectSpecConfig = ({specId, drawingId}: {specId?: number, drawingId?: number}) => {\n  const path =\n  specId\n    ? drawingId\n      ? ['projectSpecDetailConfig', specId, drawingId]\n      : ['projectSpecDetailConfig', specId]\n    : ['projectSpecDetailConfig'];\n\n  return createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.getIn(path) ?? fromJS({}),\n  );\n};\n\nexport const makeSelectIsApplyingTemplateToProjectAttachment = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectReducerState>) => state.get('isApplyingTemplateToProjectAttachment'),\n);\n\nexport const makeSelectIsGettingProjects = () => createSelector(\n    selectReducerState(),\n    (state: IMapNonRecursive<IProjectReducerState>) => state.get('isGettingProjects'),\n);\n\nexport const makeSelectProjectKeyContacts = () => createSelector(\n  makeSelectProject(),\n  (selectedProject: IMap<Project>) => Map(selectedProject?.get('keyContacts').map((keyContact: IMap<ContactListItem>) => [keyContact.get('id'), keyContact]))\n);\n\nexport default {\n  makeSelectSelectedProjectId,\n  makeSelectProjects,\n  makeSelectProject,\n  makeSelectSelectedProjectTrackStatus,\n};\n","import * as React from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { makeSelectAmplitudeData } from '../../modules/AtsModule/selectors';\n\ninterface IWithAmplitudeDataProps {\n  amplitudeData: { [key: string]: any };\n}\n\nexport interface WithAmplitudeData { /* tslint:disable-line */\n  amplitudeData: (data?: { [key: string]: any }) => { [key: string]: any };\n}\n\nconst withAmplitudeData = (ChildComponent) => {\n  const _WithAmplitudeData: React.FC<IWithAmplitudeDataProps> = props => {\n    const {\n      amplitudeData,\n      ...rest\n    } = props;\n\n    const mergedAmplitudeData = data => ({...data, ...amplitudeData});\n\n    return <ChildComponent\n      amplitudeData={mergedAmplitudeData}\n      {...rest}\n    />;\n  };\n\n  const makeMapStateToProps = () => {\n    const selectAmplitudeData = makeSelectAmplitudeData();\n\n    const mapStateToProps = state => ({\n      amplitudeData: selectAmplitudeData(state)\n    });\n\n    return mapStateToProps;\n  };\n\n  return connect(makeMapStateToProps)(_WithAmplitudeData);\n};\n\nexport default withAmplitudeData;\n\nexport const useAmplitudeData = () => {\n  const amplitudeData = useSelector(makeSelectAmplitudeData());\n\n  const mergedAmplitudeData = (data: {[key: string]: any} = {}) => ({...data, ...amplitudeData});\n\n  return mergedAmplitudeData;\n};","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  List,\n} from 'immutable';\nimport {\n  QUOTE_PRINT_FORMAT,\n  SPEC_PRINT_TYPE,\n  QUOTE_PRINT_TYPE,\n  REPORT_PRINT_TYPE,\n  ERP_CRONJOB_TYPE,\n  SPEC_TO_QUOTE_CRONJOB_TYPE,\n  BULK_IMPORT_EXPORT_TYPE,\n  PIM_SERIES_OPERATION_TYPE,\n  BULK_UPLOAD_USERS_TYPE,\n  SPEC_POLLING_TYPES\n} from '../../constants';\nimport {Spec} from '../../models';\nimport Drawing from '../../models/Drawing';\n\nexport interface IPrintObj {\n  id: string;\n  createdDate: string;\n  fileId: string | null; // watch out for 'pending'\n  filename: string | null;\n  numPages: number;\n  referenceId: number;\n  referenceType: string;\n  renderTime: number | null;\n  size: number | null;\n  status: 'pending' | 'complete' | 'failed';\n  type: SPEC_PRINT_TYPE | QUOTE_PRINT_FORMAT;\n}\n\nexport interface ICoverImage {\n  id: number;\n  title: string;\n  thumbnail: string;\n  main: string;\n}\n\nexport interface IQueue {\n  size: number;\n  token: string;\n}\n\nexport default {};\n\n\nexport enum PrintActionTypes {\n  PRINT_SPEC_SUCCEEDED = 'PRINT_SPEC_SUCCEEDED',\n  PRINT_SPEC_COMPLETED = 'PRINT_SPEC_COMPLETED',\n  SET_PRINT_QUOTE_STATUS_FOR_SHARE_VENDOR_QUOTE = 'SET_PRINT_QUOTE_STATUS_FOR_SHARE_VENDOR_QUOTE',\n  RESET_PRINT_SHARE_VENDOR_QUOTE = 'RESET_PRINT_SHARE_VENDOR_QUOTE',\n  PRINT_QUOTE_SUCCEEDED = 'PRINT_QUOTE_SUCCEEDED',\n  PRINT_QUOTE_COMPLETED = 'PRINT_QUOTE_COMPLETED',\n  PRINT_REPORT_COMPLETED = 'PRINT_REPORT_COMPLETED',\n  PRINT_REPORT_RESET = 'PRINT_REPORT_RESET',\n  PRINT_FAIL_TOGGLE = 'PRINT_FAIL_TOGGLE',\n  PRINT_REPORT_FAILED = 'PRINT_REPORT_FAILED',\n  CANCEL_LOADING_REPORT = 'CANCEL_LOADING_REPORT',\n  GET_COVER_IMAGES = 'GET_COVER_IMAGES',\n  GET_COVER_IMAGES_SUCCEEDED = 'GET_COVER_IMAGES_SUCCEEDED',\n  GENERIC_SPEC_PRINT = 'GENERIC_SPEC_PRINT',\n  GENERIC_SPEC_PRINT_ERROR = 'GENERIC_SPEC_PRINT_ERROR',\n  GENERIC_SPEC_PRINT_RESET_ERROR = 'GENERIC_SPEC_PRINT_RESET_ERROR',\n  GENERIC_QUOTE_PRINT = 'GENERIC_QUOTE_PRINT',\n  GENERIC_REPORT_PRINT = 'GENERIC_REPORT_PRINT',\n  GENERIC_ERP_CRONJOB = 'GENERIC_ERP_CRONJOB',\n  CANCEL_ERP_CRONJOB = 'CANCEL_ERP_CRONJOB',\n  POLL_PRINT = 'POLL_PRINT',\n  SET_POLLING_PRINT_ID = 'SET_POLLING_PRINT_ID',\n  GET_PRINT_HISTORY_BY_FORMAT = 'GET_PRINT_HISTORY_BY_FORMAT',\n  GET_PRINT_HISTORY_SUCCESS = 'GET_PRINT_HISTORY_SUCCESS',\n  GET_PRINT_HISTORY_FAIL = 'GET_PRINT_HISTORY_FAIL',\n  GET_PRINT_HISTORY_BY_QUOTE_ID = 'GET_PRINT_HISTORY_BY_QUOTE_ID',\n  SET_PRINT_TYPE = 'SET_PRINT_TYPE',\n  CREATE_COVER_IMAGES = 'CREATE_COVER_IMAGES',\n  DELETE_COVER_IMAGES = 'DELETE_COVER_IMAGES',\n  SHOULD_DISABLE_PRINT_CONTINUE = 'SHOULD_DISABLE_PRINT_CONTINUE',\n  CREATE_ANALYTICS_EVENTS = 'CREATE_ANALYTICS_EVENTS',\n  CANCEL_BULK_SPEC_CRONJOB = 'CANCEL_BULK_SPEC_CRONJOB',\n  BULK_DOWNLOAD = 'BULK_DOWNLOAD',\n  BULK_DOWNLOAD_SUCCEED = 'BULK_DOWNLOAD_SUCCEED',\n  BULK_DOWNLOAD_FAILED = 'BULK_DOWNLOAD_FAILED',\n  RESET_BULK_DOWNLOAD_STATUS = 'RESET_BULK_DOWNLOAD_STATUS',\n  PRINT_JOB_FAILED = 'PRINT_JOB_FAILED',\n  PRINT_JOB_SUCCEED = 'PRINT_JOB_SUCCEED',\n  CANCEL_DOWNLOAD_LIXIR_SPEC_BOOKLET = 'CANCEL_DOWNLOAD_LIXIR_SPEC_BOOKLET',\n  QUOTE_BILLING_PRINT = 'QUOTE_BILLING_PRINT',\n  ZIP_FILES = 'ZIP_FILES',\n}\n\nexport class CreateAnalyticsEventsAction implements IAction {\n  public type = PrintActionTypes.CREATE_ANALYTICS_EVENTS;\n  constructor(\n    public payload: {\n      trackingData: object\n    }\n  ) {}\n}\n\nexport class ShouldDisablePrintContinueAction implements IAction {\n  public type = PrintActionTypes.SHOULD_DISABLE_PRINT_CONTINUE;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class DeleteCoverImageAction implements IAction {\n  public type = PrintActionTypes.DELETE_COVER_IMAGES;\n  constructor(\n    public payload: {\n      printType: SPEC_PRINT_TYPE;\n      id: number;\n    }\n  ) {}\n}\nexport class CreateCoverImageAction implements IAction {\n  public type = PrintActionTypes.CREATE_COVER_IMAGES;\n  constructor(\n    public payload: {\n      printType: SPEC_PRINT_TYPE;\n      title: string;\n      fileId: string;\n    }\n  ) {}\n}\n\nexport class GetPrintHistoryByQuoteIdAction implements IAction {\n  public type = PrintActionTypes.GET_PRINT_HISTORY_BY_QUOTE_ID;\n  constructor(\n    public payload: {\n      printType: QUOTE_PRINT_TYPE;\n      quoteId: number;\n    }\n  ) {}\n}\n\nexport class SetPollingPrintIdAction implements IAction {\n  public type = PrintActionTypes.SET_POLLING_PRINT_ID;\n  constructor(\n    public payload: {\n      printId: string;\n    }\n  ) {}\n}\n\n\nexport class PollPrintAction implements IAction {\n  public type = PrintActionTypes.POLL_PRINT;\n  constructor(\n    public payload: {\n      printId: string;\n\n      // specId or quoteId\n      id?: number;\n\n      // should be all the print types. but 'shop-drawing' and 'shopDrawing' is all fucked up\n      type: SPEC_PRINT_TYPE\n            | QUOTE_PRINT_FORMAT\n            | REPORT_PRINT_TYPE\n            | ERP_CRONJOB_TYPE\n            | SPEC_TO_QUOTE_CRONJOB_TYPE\n            | BULK_IMPORT_EXPORT_TYPE\n            | PIM_SERIES_OPERATION_TYPE\n            | BULK_UPLOAD_USERS_TYPE\n            | SPEC_POLLING_TYPES;\n\n      // from Date.now(), used for tracking time spend\n      start?: number\n\n      dispatch?: any;\n\n      otherProps?: any\n\n      onSuccessCb?: (arg?: any) => void;\n      onFailCb?: (arg?: any) => void;\n      onFinallyCb?: () => void;\n    }\n  ) {}\n}\n\nexport class SetPrintTypeAction implements IAction {\n  public type = PrintActionTypes.SET_PRINT_TYPE;\n  constructor(\n    public payload: SPEC_PRINT_TYPE\n  ) {}\n}\n\nexport class GenericSpecPrintAction implements IAction {\n  public type = PrintActionTypes.GENERIC_SPEC_PRINT;\n  constructor(\n    public payload: {\n      xAtsLanguage: 'en-us' | 'en-ca',\n      operationId: string,\n      printType: SPEC_PRINT_TYPE,\n      countryId: number,\n      printData?: any,\n      specId?: number;\n    }\n  ) {}\n}\nexport class GenericSpecPrintErrorAction implements IAction {\n  public type = PrintActionTypes.GENERIC_SPEC_PRINT_ERROR;\n  constructor(\n    public payload: Error,\n  ) {}\n}\nexport class GenericSpecPrintResetErrorAction implements IAction {\n  public type = PrintActionTypes.GENERIC_SPEC_PRINT_RESET_ERROR;\n}\n\nexport class GetPrintHistoryByFormatAction implements IAction {\n  public type = PrintActionTypes.GET_PRINT_HISTORY_BY_FORMAT;\n  constructor(\n    public payload: {\n      referenceType: string,\n      type: string,\n      id: number,\n    }\n  ) {}\n}\n\nexport class GetPrintHistorySuccessAction implements IAction {\n  public readonly type = PrintActionTypes.GET_PRINT_HISTORY_SUCCESS;\n  constructor (\n    public payload: List<IMap<IPrintObj>>\n  ) {}\n}\n\nexport class GetPrintHistoryFailAction implements IAction {\n  public readonly type = PrintActionTypes.GET_PRINT_HISTORY_FAIL;\n  constructor (\n    public payload: {\n      error: any\n    }\n  ) {}\n}\n\nexport class GenericQuotePrintAction implements IAction {\n  public type = PrintActionTypes.GENERIC_QUOTE_PRINT;\n  constructor(\n    public payload: {\n    operationId: string,\n    printType: QUOTE_PRINT_FORMAT,\n    quoteId: number,\n    countryId: number,\n    printData: any;\n    timerStart?: number;\n    bidInvitationResponseId?: number;\n    }\n  ) {}\n}\n\nexport class GetCoverImagesAction implements IAction {\n  public type = PrintActionTypes.GET_COVER_IMAGES;\n\n  constructor(\n    public payload: SPEC_PRINT_TYPE\n  ) {}\n}\n\nexport class GetCoverImagesSucceededAction implements IAction {\n  public type = PrintActionTypes.GET_COVER_IMAGES_SUCCEEDED;\n  constructor(\n    public payload: {\n      data: List<IMap<ICoverImage>>,\n      type: SPEC_PRINT_TYPE\n    }\n  ) {}\n}\n\nexport class PrintSpecSucceededAction implements IAction {\n  public type = PrintActionTypes.PRINT_SPEC_SUCCEEDED;\n  constructor(\n    public payload: {\n      data: {\n        specId: number,\n      },\n      type: SPEC_PRINT_TYPE | SPEC_PRINT_TYPE[],\n      list: IMap<IPrintObj>,\n      printId: string,\n    }\n  ) {}\n}\n\nexport class PrintSpecCompletedAction implements IAction {\n  public type = PrintActionTypes.PRINT_SPEC_COMPLETED;\n  constructor(\n    public payload: {\n      data: {\n        specId: number,\n      },\n      type: SPEC_PRINT_TYPE | SPEC_PRINT_TYPE[],\n    }\n  ) {}\n}\n\nexport class SetPrintQuoteStatusForShareVendorQuoteAction implements IAction {\n  public type = PrintActionTypes.SET_PRINT_QUOTE_STATUS_FOR_SHARE_VENDOR_QUOTE;\n  constructor(\n    public payload: {\n      // quoteId: number,\n      status: 'pending',\n      // type: QUOTE_PRINT_FORMAT,\n      bidInvitationResponseId: number,\n    }\n  ) {}\n}\n\nexport class ResetPrintShareVendorQuoteAction implements IAction {\n  public type = PrintActionTypes.RESET_PRINT_SHARE_VENDOR_QUOTE;\n  constructor(\n    public payload: {\n      bidInvitationResponseId: number,\n    }\n  ) {}\n}\n\nexport class PrintQuoteSucceededAction implements IAction {\n  public type = PrintActionTypes.PRINT_QUOTE_SUCCEEDED;\n  constructor(\n    public payload: IMap<{\n      quoteId: number,\n      otherProps?: any,\n      type: QUOTE_PRINT_FORMAT,\n      list: List<IMap<IPrintObj>>,\n    }>\n  ) {}\n}\n\nexport class PrintQuoteCompletedAction implements IAction {\n  public type = PrintActionTypes.PRINT_QUOTE_COMPLETED;\n  constructor(\n    public payload: IMap<{\n      quoteId: number,\n      type: QUOTE_PRINT_FORMAT\n    }>\n  ) {}\n}\n\n // action toggles boolean value, and as long as prev and current value is diff, then fail has occur\nexport class PrintFailToggleAction implements IAction {\n  public type = PrintActionTypes.PRINT_FAIL_TOGGLE;\n}\n\nexport class GenericReportPrintAction implements IAction {\n  public readonly type = PrintActionTypes.GENERIC_REPORT_PRINT;\n\n  constructor(\n    public payload: {\n      operationId: string,\n      printType: REPORT_PRINT_TYPE,\n      printData: any;\n      provideAiBillableLines?: boolean;\n      queries?: any;\n      onSuccessCb?: (arg?: any) => void;\n    }\n  ) {}\n}\n\nexport class GenericErpCronJobAction implements IAction {\n  public readonly type = PrintActionTypes.GENERIC_ERP_CRONJOB;\n\n  constructor(\n    public payload: {\n      dispatch: any,\n      quoteId: number,\n      knownType?: SPEC_PRINT_TYPE |  QUOTE_PRINT_FORMAT | 'takeoff' | REPORT_PRINT_TYPE | ERP_CRONJOB_TYPE | SPEC_TO_QUOTE_CRONJOB_TYPE;\n      queries?: object,\n    }\n  ) {}\n}\n\nexport class CancelErpCronJobAction implements IAction {\n  public readonly type = PrintActionTypes.CANCEL_ERP_CRONJOB;\n}\n\nexport class CancelLoadingReportAction implements IAction {\n  public readonly type = PrintActionTypes.CANCEL_LOADING_REPORT;\n}\nexport class PrintReportCompletedAction implements IAction {\n  public readonly type = PrintActionTypes.PRINT_REPORT_COMPLETED;\n  constructor(\n    public payload: {\n     fileId: string\n    }\n  ) {}\n}\n\nexport class PrintReportReset implements IAction {\n  public readonly type = PrintActionTypes.PRINT_REPORT_RESET;\n}\n\nexport class PrintReportFailedAction implements IAction {\n  public readonly type = PrintActionTypes.PRINT_REPORT_FAILED;\n}\n\nexport class CancelBulkSpecCronJobAction implements IAction {\n  public readonly type = PrintActionTypes.CANCEL_BULK_SPEC_CRONJOB;\n}\nexport class CancelDownloadLixirSpecBookletAction implements IAction {\n    public readonly type = PrintActionTypes.CANCEL_DOWNLOAD_LIXIR_SPEC_BOOKLET;\n}\n\nexport class BulkDownloadAction implements IAction {\n  public readonly type = PrintActionTypes.BULK_DOWNLOAD;\n  constructor(\n      public payload: {\n          type: 'project' | 'spec',\n          sourceName: string,\n          specId?: number,\n          projectId?: number,\n          isMaster?: boolean;\n          specs: Array<{\n              specId: number;\n              name: string;\n              drawings: List<IMap<Drawing>>;\n              isMaster: boolean,\n          }>,\n          formatDetails: any[],\n          projectLevelFormatDetails?: any[],\n          hash: string,\n          bobrickCSIPrivada?: boolean,\n          bobrickCSIEvolve?: boolean\n          bobrickCSITrad?: boolean\n          bobrickPlanningGuide?: boolean,\n      }\n  ) {\n  }\n}\n\nexport class BulkDownloadFailedAction implements IAction {\n    public readonly type = PrintActionTypes.BULK_DOWNLOAD_FAILED;\n}\n\nexport class PrintJobFailed implements IAction {\n    public readonly type = PrintActionTypes.PRINT_JOB_FAILED;\n    constructor(\n        public payload: {\n            type: SPEC_PRINT_TYPE,\n            id: string,\n            projectId?: number,\n            specId?: number,\n            hash: string\n        }\n    ) {\n    }\n}\nexport class PrintJobSucceed implements IAction {\n    public readonly type = PrintActionTypes.PRINT_JOB_SUCCEED;\n    constructor(\n        public payload: {\n            type: SPEC_PRINT_TYPE,\n            id: string,\n            hash: string,\n            fileId: string\n        }\n    ) {\n    }\n}\n\nexport class BulkDownloadSucceed implements IAction {\n    public readonly type = PrintActionTypes.BULK_DOWNLOAD_SUCCEED;\n\n    constructor(\n        public payload: {\n            hash: string;\n            zipFileId: string;\n        }\n    ) {\n    }\n\n}\n\nexport class ResetBulkDownloadStatusAction implements IAction {\n  public readonly type = PrintActionTypes.RESET_BULK_DOWNLOAD_STATUS;\n}\n\n// PT-5477 (2026-08-21): fire-and-forget wrapper around the internal\n// zipFiles saga helper. POSTs the fileIds to /file/zip (the spec detail\n// page's DOWNLOAD ALL uses this endpoint) and returns the resulting\n// zipFileId via the onSuccess callback so the caller can trigger a\n// browser download from that URL.\nexport class ZipFilesAction implements IAction {\n  public readonly type = PrintActionTypes.ZIP_FILES;\n  constructor(\n    public payload: {\n      fileIds: string[];\n      fileName?: string;\n      onSuccess?: (zipFileId: string) => void;\n      onFail?: () => void;\n    },\n  ) {\n  }\n}","export enum AclRoles {\n  SUPER_USER = 'Super User',\n  ATS_USER = 'ATS User',\n  DEVELOPER = 'Developer', // can be use for debugging in live env, the debugging feature is not used currently as far as I know though\n  FIRM_ADMIN = 'Firm Admin',\n  OFFICE_ADMIN = 'Office Admin',\n  PIM = 'PIM',\n  PIM_ADMIN = 'PIM Admin',\n  DATABASE_ADMIN = 'Database Admin',\n  FEAT_ALTERNATIVES = 'Feat_Alternatives',\n  ERP = 'ERP',\n  MASTER_TEMPLATE_EDITING = 'Master Template Editing',\n  FEAT_STOCK_LEVEL = 'Feat_Stock_Level',\n  XREF_ACL = 'PIM_Cross_Reference',\n  ATTRIBUTE_MANAGEMENT_ACL = 'Attribute_Management',\n  PIM_PRICING_ACL = 'PIM_Pricing',\n  FEAT_ALT_PREFERENCES = 'Feat_Alt_Preferences',\n  PIM_PRINT_DESCRIPTION = 'PIM_Print_Description',\n  LIXIR_SPEC_BOOKLET = 'Lixil_Spec_Booklet',\n  AI_CREATE_XREF = 'AICreateXref',\n  OM_SHOP_DRAWING = 'O&M_Shop_Drawing',\n  FEAT_OPTION_BASED_IMAGES = 'Feat_Option_Based_Images',\n  FEAT_OPTION_BASED_MANUFACTURER_CUTSHEETS = 'Feat_Option_Based_Manufacturer_Cutsheets',\n  CURRENCY_CONVERSION = 'Currency Conversion',\n  AI_USER = 'AI User',\n  AI_2_USER = 'AI 2.0',\n  AI_QUOTI = 'AI Quoti',\n  AMP_ADMIN = 'AMP Admin',\n  AMP_AI = 'AMP AI',\n  AMP_AI_BILLING = 'AMP AI Billing',\n  AMP_MERGE = 'AMP Merge',\n  AMP_USER = 'AMP User',\n  AMP_WIDGET = 'AMP Widget',\n  AMP_APP_LAUNCHER = 'AMP App Launcher',\n  PIM_INTEGRATION = 'PIM Integration',\n  SECTION_TEMPLATE_REMAP = 'Section Template Remap',\n  RESTRICTED_OUTSIDE_SALESREP = 'RestrictedOutside_SalesRep',\n  QUOTE_CONNECT = 'Quote Connect',\n  QUOTE_CONNECT_REP = 'Quote Connect Rep',\n  MEMBER = 'Member',\n  NU_AIR_SMALL_INDEPENDENT = 'Nu-Air - Small Independent',\n  NU_AIR_WHOLESALE = 'Nu-Air - Wholesale',\n  SPEC_ASSIST = 'Spec Assist',\n  FEAT_CREATE_SHOP_DRAWING = 'Feat_Create_Shop_Drawing',\n  SPEC_MASTERS_ADMIN = 'Spec Masters Admin',\n  FEAT_ASSIGN_TO = 'Feat_Assign_To',\n  NEW_SEARCH = 'New Search',\n  FEAT_CSI_2026 = 'Feat_Csi_2026',\n  FEAT_EMAIL_IMPROVEMENTS = 'feat_emailImprovements',\n  BUILDSIZER_WATER_HEATER = 'BuildSizer Water Heater',\n}\n\nexport default AclRoles;","import Base from '../Base';\n\nexport default class AclItem extends Base {\n  public groupId: number;\n  public groupName: string;\n  public id: number;\n  public isFeature: boolean;\n  public value: string;\n\n  public constructor(init?: Partial<AclItem> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}","import Base from '../Base';\n\nexport enum AiExclusionType {\n  TAG = 'tag',\n  PRODUCT_NUMBER = 'productNumber',\n  MANUFACTURER = 'manufacturer',\n}\n\nexport default class AiExclusionItem extends Base {\n  public id: number;\n  public value: string;\n  public type: AiExclusionType;\n\n  public constructor(init?: Partial<AiExclusionItem> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}","import Base from '../Base';\nimport ListItem from '../ListItem';\n\nexport default class Address extends Base {\n  public address1: string;\n  public address2: string;\n  public city: ListItem;\n  public country: ListItem;\n  public province: ListItem;\n  public streetnumber: string;\n  public zipcode: string;\n\n  public constructor(init?: Partial<Address> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport HasId from '../HasId';\nimport SeriesProductFile, { IMediaFiles } from '../SeriesProductFile';\nimport XrefType from '../XrefType';\n\n// complete project object\nexport default class AlternativeProduct extends HasId {\n  public createdBy: object;\n  public createdDate: string;\n  public id: number;\n  public manufacturer: string;\n  public manufacturerId: number;\n  public manufacturerLogo: string;\n  public categoryName: string;\n  public file?: SeriesProductFile;\n  public note: string;\n  public productId: number;\n  public productNumber: string;\n  public seriesId: number;\n  public seriesName: string;\n  public specDrawingProductId: number;\n\n  public constructor(init?: Partial<AlternativeProduct> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import { List } from 'immutable';\nimport Base from '../Base';\nimport { IMap } from 'ats-utils/src';\nimport AiExclusionItem from '../AiExclusionItem';\n\nexport default class AiExclusion extends Base {\n  public manufacturer: List<IMap<AiExclusionItem>>;\n  public productNumber: List<IMap<AiExclusionItem>>;\n  public tag: List<IMap<AiExclusionItem>>;\n\n  public constructor(init?: Partial<AiExclusionItem> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}","import { IMap } from 'ats-utils/src';\n\ninterface IDateIntervalOption {\n  type: string;\n  interval: string;\n  label: string;\n  default: boolean;\n}\nexport interface IFilter {\n  key: string;\n  index: number;\n  operand: string;\n  value: string | number;\n}\n\nexport interface IFilterTemplate {\n  component: string;\n  component_data?: {\n    data?: any;\n    filterSearch?: any;\n  };\n  filterOperand?: string;\n  filterValue: any;\n  key: string;\n  label: string;\n}\n\nenum DashboardWidgetTypes {\n  projectTracker = 'projectTracker',\n  specTool = 'specTool',\n  // add other possible types here\n}\n\nexport interface IDashboardWidgetConfig {\n  h: number;\n  i: string;\n  createNewWidgetParams?: IMap<Partial<Widget>>;\n  userWidgetId?: string;\n  static: boolean;\n  minH: number;\n  w: number;\n  x: number;\n  y: number;\n}\nexport class Dashboard {\n  public id: number;\n  public config: {\n    widgets: Record<string, IDashboardWidgetConfig>\n  };\n  public type: DashboardWidgetTypes;\n}\n\nexport interface IWidgetConfigBase {\n  controls: Record<string, any>;\n  filters: IFilter[];\n  columns: IColumn[];\n\n  hideIcon?: boolean;\n  hideDownload?: boolean;\n}\nexport interface IProjectListWidgetConfig extends IWidgetConfigBase {\n  title: string;\n  callToAction: {\n    description: string;\n    endpoint: string;\n    label: string;\n    media: {\n      images: {\n        main: string;\n      }\n    };\n    title: string;\n    to: string;\n  };\n  description: string;\n}\n\nexport interface ICallToActionWidgetConfig extends IWidgetConfigBase {\n  title: string;\n  description: string;\n}\n\nexport interface IProjectChartWidgetConfig extends IWidgetConfigBase {\n  version: number;\n  title: string;\n  description: string;\n  controls: {\n    orientation: 'vertical' | 'horizontal';\n    domain: {\n      type: string;\n      field: string;\n      label: string;\n      start: string;\n      end: string;\n      bucket: {\n        label: string;\n        data: IDateIntervalOption[];\n      }\n    };\n    range: {\n      type: string;\n      field: string;\n      label: string;\n    };\n  };\n}\ninterface IWidgetBase {\n  id: number;\n  userId: number;\n  widgetId: number;\n  icon: string;\n}\nexport interface IProjectListWidget extends IWidgetBase {\n  category: 'project_list';\n  config: IMap<IProjectListWidgetConfig>;\n}\n\nexport interface ICallToActionWidget extends  IWidgetBase {\n  category: 'call_to_action';\n  config: IMap<ICallToActionWidgetConfig>;\n}\n\nexport interface IProjectChartWidget extends IWidgetBase {\n  category: 'project_chart';\n  config: IMap<IProjectChartWidgetConfig>;\n}\nexport type Widget = IProjectListWidget | ICallToActionWidget | IProjectChartWidget;\nexport type WidgetConfig = IProjectChartWidgetConfig | ICallToActionWidgetConfig | IProjectChartWidgetConfig;\n\nexport interface IColumn {\n  component: string;\n  component_data: {\n    endpoint: string;\n    href: string;\n    label: string;\n  };\n  editable: boolean;\n  key: string;\n  label: string;\n  sort?: string;\n  dependencies?: string[];\n}\nexport interface IFilterAdmin {\n  component: string;\n  key: string;\n  label: string;\n  component_data?: {\n    nullable: string;\n    data: {\n      payload: {\n        service: string;\n        endpoint: string;\n      }\n      resultKey: string[]\n    }\n  };\n}\nexport interface IWidgetAdminBase {\n  id: number;\n  icon: string;\n  label: string;\n  title: string;\n  type: string;\n}\n\nexport interface IProjectListWidgetAdminConfig {\n  callToAction: {\n    description: string;\n    endpoint: string;\n    label: string;\n    media: {\n      images: {\n        main: string;\n      }\n    };\n    title: string;\n    to: string;\n  };\n  columns: IColumn[];\n  controls: Array<Record<string, any>>;\n  filters: IFilterAdmin[];\n}\n\nexport interface ICallToActionWidgetAdminConfig {\n  title: string;\n  description: string;\n\n  // TODO: ASK BE TO REMOVE THESE BECAUSE OF REDUNDANCY\n  controls: Array<Record<string, any>>;\n  filters: Array<Record<string, any>>;\n  columns: Array<Record<string, any>>;\n\n  hideIcon?: boolean;\n  hideDownload?: boolean;\n}\n\nexport interface IProjectChartWidgetAdminConfig {\n  version: number;\n  title: string;\n  description: string;\n  controls: {\n    orientation: 'horizontal' | 'vertical';\n    domain: {\n      type: string;\n      field: string;\n      label: string;\n    };\n    range: {\n      type: string;\n      field: string;\n      label: string;\n    }\n  };\n  hideDownload?: boolean;\n  hideIcon?: boolean;\n  filters: IFilterAdmin[];\n}\nexport interface IProjectListWidgetAdmin extends IWidgetAdminBase {\n  category: 'project_chart';\n  config: IProjectListWidgetAdminConfig;\n}\nexport interface ICallToActionWidgetAdmin extends IWidgetAdminBase {\n  category: 'call_to_action';\n  config: ICallToActionWidgetAdminConfig;\n}\nexport interface IProjectChartWidgetAdmin extends IWidgetAdminBase {\n  category: 'project_list';\n  config: IProjectChartWidgetAdminConfig;\n}\n\nexport type WidgetAdmin = IProjectListWidgetAdmin | ICallToActionWidgetAdmin | IProjectChartWidgetAdmin;\n\n\n","import {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  safeStringify,\n} from 'ats-utils/src';\n\nimport AttributeValue from '../AttributeValue';\n\n// complete project object\nexport default class Attribute extends AttributeValue {\n\n  // we want to be able to identify matching sets of attributes\n  public static getAttributesIdentifierString(attributes: Map<string, IMap<Attribute>>) {\n    const mappedAttributes = attributes.map((attribute: IMap<Attribute>) => {\n      return attribute.get('values').map((attributeValue: IMap<AttributeValue>) => {\n        return attributeValue.get('value');\n      });\n    });\n    const stringifiedAttributes: string = safeStringify(mappedAttributes.toJS());\n    return stringifiedAttributes;\n  }\n\n  public description: string;\n  public isAttribute: boolean;\n  public isOption: boolean;\n  public name: string;\n  public values: List<IMap<AttributeValue>>;\n\n  public constructor(init?: Partial<Attribute>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Media from '../Media';\n\n// complete project object\nexport default class AttributeValue {\n\n  public description: string;\n  public media: IMap<Media>;\n  public name: string;\n  public price: any;\n  public unit: string;\n  public value: any;\n\n  public constructor(init?: Partial<AttributeValue>) {\n    Object.assign(this, init);\n  }\n}\n","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport AuthObject from '../AuthObject';\n\n// complete project object\nexport default class Authentication extends Base {\n  public token?: string;\n  public authenticated_at?: Date;\n  public identity?: IMap<AuthObject>;\n\n  public constructor(init?: Partial<Authentication> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// auth object from backend verifyToken endpoint\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport AuthUser from '../AuthUser';\n\n// complete project object\nexport default class AuthObject extends Base {\n  public verify_token: boolean;\n  public user: AuthUser;\n\n  public constructor(init?: Partial<AuthObject> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// auth object from backend verifyToken endpoint\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport AuthUserUser from '../AuthUserUser';\nimport AuthUserClaims from '../AuthUserClaims';\n\n// complete project object\nexport default class AuthUser extends Base {\n  public claims: AuthUserClaims;\n  public user: AuthUserUser;\n\n  public constructor(init?: Partial<AuthUser & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// auth object from backend verifyToken endpoint\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport Identity from '../Identity';\n\n// complete project object\nexport default class AuthUserClaims extends Base {\n  public exp: number;\n  public iat: number;\n  public identity: Identity;\n  public zoneinfo: string;\n\n  public constructor(init?: Partial<AuthUserClaims & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// complete project object\nimport Base from '../Base';\nexport default class AuthUserUser extends Base {\n  public email: string;\n  public email_verified: string; // should be boolean??? but instead is '0'\n  public password: string;\n  public preferred_username: string;\n  public uid: number;\n\n  public constructor(init?: Partial<AuthUserUser & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","\nimport ListItem from '../ListItem';\nimport Contact from '../Contact';\nimport { IMap } from 'ats-utils/src';\n\n// items from list service\nexport default class ContactListItem extends ListItem {\n  public contact?: IMap<Contact>;\n  public bidStatus?: string;\n  public bidValue?: string;\n  public bidNote?: string;\n  public quoteId?: number;\n  public quoteNumber?: string;\n  public projectContactId?: number; // The ID of a Project Contact, as opposed to the ID of a Contact\n  public formattedBidValue?: number; // formatted for UI display\n  public contactBids?: object[]; // View Model\n  public constructor(init?: Partial<ContactListItem> & ListItem) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n\n","import ListItem from '../ListItem';\nimport {\n  List,\n} from 'immutable';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\n// items from list service\nexport default class BuildingClassListItem extends ListItem {\n  public isMulti: boolean = false;\n  public isSingle: boolean = false;\n  public buildingTypes?: List<IMap<ListItem>>;\n\n  public constructor(init?: Partial<BuildingClassListItem> & ListItem) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import ListItem from '../ListItem';\n\nexport default class Category<V = string, K = number> extends ListItem<V, K> {\n  public constructor(init?: Partial<Category> & ListItem<V, K>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  Map,\n} from 'immutable';\nimport HasId from '../HasId';\nimport { IMap } from 'ats-utils/src';\n\n\n// complete project object\n// 'id': 1,\n//   'type': 'office',\n//     'name': '1200 Bensdale Rd',\n//       'phone': '(830) 281-400',\n//         'company': 'Water Well Services',\n//           'permissions' : { 'view-only' : 1, 'edit' : 0, 'delete' : 1 }\n\nexport type CollaboratorType = 'office'; // there should be more\nexport type CollaboratorPermissions = 'view-only' | 'edit' | 'delete';\nexport type CollaboratorPermissionObject = {\n  [key in CollaboratorPermissions]?: 0 | 1\n};\n\nexport default class Collaborator extends HasId {\n  public type: CollaboratorType;\n  public name: string;\n  public phone: string;\n  public company: string;\n  public permissions?: CollaboratorPermissionObject; // todo unknown shape for now\n\n  public constructor(init?: Partial<Collaborator> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport HasId from '../HasId';\n\n// complete project object\nexport default class Contact extends HasId {\n  public first: string;\n  public last: string;\n  public firm: string;\n  public office: string;\n  public address: string;\n  public cellphone: string;\n  public media: IMap<{\n    img: string;\n  }>;\n\n  public ownerId: number;\n  public ownerType: string;\n\n  public id: number;\n  public address1?: number | string;\n  public address2?: number | string;\n  public birthday?: number | string;\n  public city?: number;\n  public cityId?: number;\n  public cityName?: string;\n  public contactType?: string;\n  public contactLink?: string;\n  public country?: number;\n  public countryId?: number;\n  public countryName?: string;\n  public createdBy?: number;\n  public directoryServer?: number | string;\n  public email: string;\n  public event?: any;\n  public extendedProperty?: any;\n  public externalId?: number;\n  public firstName?: string;\n  public gender?: string;\n  public groupMembershipInfo?: any;\n  public hobby?: any;\n  public homeNumber?: number | string;\n  public im?: any;\n  public image?: string;\n  public initials?: string;\n  public internalObjId?: number;\n  public internalObjType?: any;\n  public internalNo?: string;\n  public jot?: any;\n  public language?: string;\n  public lastName?: string;\n  public maidenName?: string;\n  public mileage?: any;\n  public mobileNumber?: number;\n  public internalNote?: string;\n  public shipToCustomer?: string;\n  public nickname?: number;\n  public occupation?: number;\n  public officeNumber?: string;\n  public organization?: string;\n  public provinceId?: number;\n  public provinceName?: string;\n  public provinceCode?: string;\n  public postalZip?: any;\n  public priority?: any;\n  public relation?: any;\n  public sensitivity?: any;\n  public shortName?: any;\n  public source?: any;\n  public state?: string;\n  public structuredPostalAddress?: number | string;\n  public subject?: string;\n  public title: string;\n  public userDefinedField?: any;\n  public website?: number | string;\n  public imageId: string;\n  public salesReps: [{ id: number, name: string, officeName: string }];\n\n  public constructor(init?: Partial<Contact> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import { Map } from 'immutable';\n\nimport Base from '../Base';\n\n// not well defined yet\n// this should be the error object from backend....\nexport default class Error extends Base {\n  public message?: string;\n  public meta?: Map<string, any>;\n\n  public constructor(init?: Partial<Error> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  fromJS,\n  List,\n} from 'immutable';\n\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport ProductCategory from '../ProductCategory';\n\n\ntype ArraySearchOperator = 'in' | 'nin' | 'match';\ntype SearchOperator = 'eq' | 'ne' | 'like' | 'lt' | 'le' | 'gt' | 'ge' | 'neq' | 'match';\n\ntype FilterUnitPrimitive = number | string | boolean | number[];\n\nexport interface IFilterUnit {\n  [key: string]: {\n    [key in SearchOperator]?: FilterUnitPrimitive;\n  } | {\n    [key in ArraySearchOperator]?: FilterUnitPrimitive[];\n  };\n}\n\nexport interface IProductSearch {\n  match: string;\n}\n\n// complete project object\n\n// {\n//   'or': [\n//     {\n//       'email': {\n//         'like': searchTerm\n//       }\n//     },\n//     {\n//       'first_name': {\n//         'like': searchTerm\n//       }\n//     },\n//     {\n//       'last_name': {\n//         'like': searchTerm\n//       }\n//     },\n//     {\n//       'CONCAT(first_name,\\' \\',last_name)': {\n//         'like': searchTerm\n//       }\n//     }\n//   ]\n// }\n// },\nexport default class Filter extends Base {\n\n  public static generateCategoryFilter = (category: IMap<ProductCategory>): IMap<Filter> => {\n    return new Filter({\n      and: [\n        {\n          category: {\n            eq: category.get('id'),\n          }\n        }\n      ]\n    }).toImmutable();\n  }\n\n  public and?: Array<IFilterUnit | Filter | IMap<IFilterUnit> | IMap<Filter>> | List<IFilterUnit | Filter | IMap<IFilterUnit> | IMap<Filter>>;\n  public or?: Array<IFilterUnit | Filter | IMap<IFilterUnit> | IMap<Filter>> | List<IFilterUnit | Filter | IMap<IFilterUnit> | IMap<Filter>>;\n  public productSearch?: IMap<IProductSearch>;\n\n  public constructor(init?: Partial<Filter> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// currently unused\n\n\nimport {\n  Map,\n} from 'immutable';\nimport HasId from '../HasId';\nimport { IMap } from 'ats-utils/src';\n\nexport default class KeyContact extends HasId {\n  public value: string;\n\n  public constructor(init?: Partial<KeyContact> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// just object with id\nimport Base from '../Base';\nexport default class HasStringId extends Base {\n  public id: string;\n  public constructor(init?: Partial<HasStringId> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport Product from '../Product';\nimport Attribute from '../Attribute';\n\n// complete project object\nexport default class MatchingProduct extends Base {\n\n  public attribute: Map<string, IMap<Pick<Attribute, 'values'>>>;\n  public product: List<IMap<Product>>;\n\n  public constructor(init?: Partial<MatchingProduct> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","// just object with id\nimport Base from '../Base';\nimport * as uuid from 'uuid/v1';\nexport default class HasUuid extends Base {\n  public uuid?: string = uuid();\n\n  public constructor(init?: Partial<HasUuid & Base>) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import { List } from 'immutable';\nimport AclRoles from '../AclRoles';\nimport Base from '../Base';\nimport {\n  IIdentity\n} from 'ats-utils/src/Interfaces/AtsApi';\n\n// IIdentity type is 'basic' version of ats-framework/models/Identity - type for identity without immutable / ats-framework dependencies\nexport default class Identity extends Base implements IIdentity {\n  public acl_role_names: AclRoles[];\n  public acl_roles: number[];\n  public acl_service_roles: any;\n  public email: string;\n  public email_verified?: string;\n  public family_name: string;\n  public firm_id: number;\n  public firm_type_id: number;\n  public firm_type_name: string;\n  public given_name: string;\n  public office_id: number;\n  public originalUser?: Identity;\n  public parentUserToken?: string;\n  public preferred_username: string;\n  public role_type_ids?: number[];\n  public role_type_names?: string[];\n  public roles?: AclRoles[];\n  public scopes: any;\n  public uid: number;\n\n  public constructor(init?: Partial<Identity & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\n// complete project object\nexport default class LocalFile extends Base {\n  public name: string;\n  public type: string;\n  public size: number = -1;\n  public data?: string | ArrayBuffer;\n\n  public constructor(init?: Partial<LocalFile & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import ListItem from '../ListItem';\n\nexport default class Manufacturer<V = string, K = number> extends ListItem<V, K> {\n  public constructor(init?: Partial<Manufacturer> & ListItem<V, K>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport ProductCategory from '../ProductCategory';\nimport Base from '../Base';\nimport Filter from '../Filter';\n\n// complete project object\nexport default class MissingRule extends Base {\n  public category: IMap<ProductCategory>;\n  public filters: IMap<Filter>;\n\n  public constructor(init?: Partial<MissingRule> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Base from '../Base';\nimport Product from '../Product';\n\nexport type SortNumber = 1 | 0 | -1;\n\nexport type OrderBy<T extends object> = {\n  [key in keyof T]?: SortNumber;\n};\n\nexport type PaginationMethod = 'count' | 'nextPage';\n\n// sample options\n// options?: {\n//   limit?: number,\n//   offset?: number,\n//   orderBy?: {\n//     [key: string]: number\n//   }\n// }\nexport default class Option<T extends object> extends Base {\n\n  public static generateProductOrderByNameOption = (product: IMap<Product>): IMap<Option<Product>> => {\n    return new Option({\n      orderBy: {\n        name: 1,\n      },\n    }).toImmutable();\n  }\n\n  public limit?: number;\n  public offset?: number;\n  public orderBy?: IMap<OrderBy<T>> | OrderBy<T>;\n  public paginationMethod?: PaginationMethod;\n\n  public constructor(init?: Partial<Option<T>> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\n\n// complete project object\nexport default class Office extends HasId {\n  public id: number;\n  public name: string;\n  public address1: string;\n  public address2: string;\n  public atsMigrationId: number;\n  public batch: number;\n  public changeBy: string;\n  public changeTime: string;\n  public firmId: number;\n  public location: object;\n  public postalZip: string;\n  public phone: string;\n  public tollfree: string;\n  public registeredDate: string;\n  public language: string;\n  public headOffice: number;\n  public status: string;\n  public fax: number;\n  public createBy: number;\n  public deleted: number;\n  public lastModifiedBy: number;\n  public deletedBy: number;\n  public createdDate: string;\n  public lastModified: string;\n  public officeName: string;\n  public imageId: string;\n  public userCount: number;\n\n  public representative: string;\n  public mail: string;\n  public mobile: string;\n\n  public constructor(init?: Partial<Office> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\nimport ListItem from '../ListItem';\nimport OpportunityLabel from '../OpportunityLabel';\nimport OpportunityStatus from '../OpportunityStatus';\nimport OpportunityGroup from '../OpportunityGroup';\n\n// This is the project opportunities\n// each opportunity is associated with a label\n// the value is auto calculated with the \"OpportunityLabelProducts\" under a label for a project/quote\n// this value can be overridden manually\nexport default class Opportunity extends Base {\n  // internal use\n  // public _opportunityGroupUuid?: string;\n\n  // public opportunitygroups: List<IMap<OpportunityGroup>>;\n  // public opportunityGroup?: OpportunityGroup;\n  // public opportunityLabel?: OpportunityLabel;\n  // public opportunityStatus?: OpportunityStatus;\n  // public opportunityLabelUuid?: string;\n  // public opportunityStatusUuid?: string;\n\n\n  // from documentation\n  // public label?: OpportunityLabel;\n  // public status?: OpportunityStatus;\n  public label?: ListItem<string, string>;\n  public status?: ListItem<string, string>;\n\n  public value: number;\n  public orderDate: string;\n  public invoiceDate: string;\n\n  public modifiedDate: string;\n  public projectId: number;\n  public officeId: number;\n\n  public constructor(init?: Partial<Opportunity & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\n\n// poorly named\n// @@TODO we should rename this at some point\n// this is the \"opportunity\" combination of manufacturer / category used to calculate values of OpportunityLabels which this object is associated with\nexport default class OpportunityLabelProducts extends Base {\n  public title: string;\n  public manufacturer_id: string;\n  public category_id: string;\n\n  public constructor(init?: Partial<OpportunityLabelProducts & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\n\n// complete project object\nexport default class OpportunityStatusAction extends HasId {\n  public actionId: string;\n  public text: string;\n\n  public constructor(init?: Partial<OpportunityStatusAction> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import ListItem from '../ListItem';\n\n// what we get back from backend preference endpoint for opportunityStatus... note: different form what we send in settings under project phases\nexport default class OpportunityStatusListItem extends ListItem<string, string> {\n\n  public constructor(init?: Partial<OpportunityStatusListItem> & ListItem<string, string>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Map,\n} from 'immutable';\n\nimport PageDataAttribute from '../PageDataAttribute';\nimport Media from '../Media';\nimport Base from '../Base';\n\nexport default class PageData extends Base {\n  public key?: string;\n  public title: string;\n  public fulltitle?: string;\n  public media: IMap<Media>;\n  public description: string;\n  public attributes: Map<string, IMap<PageDataAttribute>>;\n\n  public constructor(init?: Partial<PageData> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\nimport Price from '../Price';\nimport { FirmProduct } from '..';\n\n// complete project object\nexport default class Package extends HasId {\n\n  public atsPackageId: number;\n  public categoryId: number;\n  public categoryName: string;\n  public configurator: string;\n  public createdBy: number;\n  public description: string;\n  public firmId: number;\n  public id: number;\n  public lastModifiedBy: number;\n  public manufacturerId: number;\n  public manufacturerName: string;\n  public number: string;\n  public officeId: number;\n  public price: IMap<Price>;\n  public productIds: number[];\n  public products: List<IMap<FirmProduct>>;\n  public productsQty: List<number>;\n  public status: number;\n  public type: number;\n\n  public constructor(init?: Partial<Package> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","\nimport Base from '../Base';\nimport { Currency } from '../../constants';\n\nexport type PriceRegion = 'default';\n\nexport interface IPriceBreakdown {\n  cost?: number;\n  list?: number;\n  sell?: number;\n}\n\nexport type PriceCurrencyInterface = {\n  [key in Currency]?: IPriceBreakdown;\n};\n\nexport type PriceInterface = {\n  [key in PriceRegion]?: PriceCurrencyInterface;\n};\n\nexport default class Price extends Base implements PriceInterface {\n  public default: PriceCurrencyInterface = {};\n\n  public constructor(init?: Partial<Price> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}\n\nexport interface IPriceWithLabel extends Price {\n  label?: string;\n  id?: string;\n}\n","import Base from '../Base';\nimport Media from '../Media';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\n// complete project object\nexport default class ProductCategory extends Base {\n  public divisionName?: string;\n  public divisionNumber?: string;\n  public media?: IMap<Media>;\n  public id: number;\n  public name: string;\n\n  public constructor(init?: Partial<ProductCategory> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n  fromJS,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport ProductCategory from '../ProductCategory';\nimport AttributeValue from '../AttributeValue';\nimport Media from '../Media';\nimport HasId from '../HasId';\nimport Price from '../Price';\nimport { SeriesProductFile } from '..';\n\n// complete project object\nexport default class Product extends HasId {\n\n  public static getCategoryFromProduct: (product: IMap<Product>) => IMap<ProductCategory> = (product: IMap<Product>) => {\n    return new ProductCategory({\n      id: product.get('category'),\n      name: product.get('categoryName'),\n    }).toImmutable();\n  }\n\n  public category: number;\n  public categoryName: string;\n  public media: IMap<Media>;\n  public factoryId: string;\n  public brand: string;\n  public brandId: number;\n  public upc: string | number;\n  public price: Price;\n  public model: string;\n  public name: string;\n  public make: string;\n  public dateAdded: string;\n  public dateModified: string;\n  public ean: string | number;\n  public status: string;\n  public attributes: Map<string, IMap<AttributeValue>>;\n  public locale: List<any>;\n  public series: number;\n  public productNumber: string;\n  public source: string;\n  public description: string;\n  public sku: string | number;\n  public file: SeriesProductFile;\n  public productNumberLength: -1 | 0 | 1;\n  public keywords: List<string>;\n\n  public constructor(init?: Partial<Product> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\nimport LeadSource from '../LeadSource';\nimport Collaborator from '../Collaborator';\nimport File, { FileType } from '../File';\nimport BuildingClassListItem from '../BuildingClassListItem';\nimport ContactListItem from '../ContactListItem';\nimport HackBuildingClassListItem from '../HackBuildingClassListItem';\nimport Opportunity from '../Opportunity';\nimport { ProjectSpec } from '..';\n\n// complete project object\nexport default class Project extends HasId {\n  public id: number;\n  public name: string;\n  public address: string;\n  public building: IMap<{\n    buildingClasses: List<IMap<HackBuildingClassListItem>>;\n  }>;\n  public buildingClasses?: List<IMap<BuildingClassListItem>>; // @@TODO this is in the model we send them\n  public collaborators: List<IMap<Collaborator>>;\n  public isCollaborated: boolean;\n  public createdBy: object;\n  public createdDate: string;\n  public customers: List<object>;\n  public doneby: object;\n  public file: Map<FileType, List<IMap<File>>>;\n  public firm: object;\n  public leadSource: LeadSource[];\n  public location: object;\n  public modifiedBy: object;\n  public modifiedDate: object;\n  public quotes: List<IMap<HasId>>;\n  public specForeCast: List<object>;\n  public projectPhase: object;\n  public specs: List<IMap<ProjectSpec>>;\n  public specIds: List<number>;\n  public tags: List<object>;\n  public squareFootage: string;\n  public tenderDate: string;\n  public valuation: string;\n  public area: string;\n  public bidDate: string;\n  public status: string;\n  public keyContacts: ContactListItem[];\n\n  public opportunities?: Opportunity[]; // @@TODO temporary\n\n  public constructor(init?: Partial<Project> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}","import {\n  List\n} from 'immutable';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  QuoteChargeDiscountModel,\n  QuoteSection\n} from '../../models';\nimport Collaborator from '../Collaborator';\nimport HasId from '../HasId';\nimport { FileType } from '../File';\nimport { FirmType } from '../Firm';\nimport QuoteTermsAndConditions from '../QuoteTermsAndConditions';\nimport QuoteGrandTotalModel from '../QuoteGrandTotalModel';\nimport QuoteCustomer from '../QuoteCustomer';\n// {\n//   \"architectName\": null,\n//   \"modifiedBy\": null,\n//   \"previousQuoteId\": 1023,\n//   \"versionNumber\": 0,\n//   \"expiryDate\": \"2019-08-22T20:50:31.409Z\",\n//   \"nextQuoteId\": 1025,\n//   \"revisionNumber\": 4,\n//   \"quoteNumber\": \"ALINA-Q1\",\n//   \"shippingAddress\": null,\n//   \"internalQuoteNumber\": \"1020-V0-R4\",\n//   \"createdFromSpecId\": null,\n//   \"requote\": 1,\n//   \"shippingPreference\": \"noShippingAddress\",\n//   \"parentVersionId\": null,\n//   \"locked\": true,\n//   \"termsAndCondition\": null,\n//   \"bidDate\": \"2019-04-24T20:50:31.418Z\",\n//   \"name\": \"Q1\",\n//   \"mySqlParentQuoteId\": null,\n//   \"area\": null,\n//   \"parentQuoteId\": 1020,\n//   \"collaborators\": [\n//     {\n//       \"label\": \"10261 Sycamore Drive\",\n//       \"value\": \"10261 Sycamore Drive\",\n//       \"name\": \"10261 Sycamore Drive\",\n//       \"company\": \"RepSource MidAtlantic\",\n//       \"type\": \"office\",\n//       \"id\": 4603311,\n//       \"permissions\": null,\n//       \"phone\": \"(804) 550-025\"\n//     }\n//   ],\n//   \"isVersioned\": false,\n//   \"sections\": [],\n//   \"status\": \"active\",\n//   \"projectId\": null,\n//   \"building\": null,\n//   \"address\": null,\n//   \"currencyConversionDate\": null,\n//   \"customers\": [],\n//   \"createdDate\": \"2019-04-24T21:11:45Z\",\n//   \"modifiedDate\": null,\n//   \"version\": false,\n//   \"mySqlSpecId\": null,\n//   \"unitMeasurement\": null,\n//   \"tags\": [],\n//   \"doneBy\": null,\n//   \"engineerName\": null,\n//   \"id\": 1024,\n//   \"grandTotals\": null,\n//   \"revisionCreatedDate\": null,\n//   \"file\": [],\n//   \"mySqlId\": null,\n//   \"internalNo\": null,\n//   \"currencyCode\": null,\n//   \"createdBy\": {\n//     \"user\": {\n//       \"id\": 9135702,\n//       \"name\": \"Peter Xu\"\n//     },\n//     \"firm\": {\n//       \"id\": 2368648,\n//       \"type\": \"Manufacturer\"\n//     },\n//     \"office\": {\n//       \"id\": 2897555\n//     }\n//   },\n//   \"discountList\": null,\n//   \"totalVersions\": 0\n// }\ntype QuoteShippingPreference = 'noShippingAddress';\ntype QuoteStatus = 'active';\nexport default class Quote extends HasId {\n  public architectName?: string;\n  public modifiedBy?: string;\n  public previousQuoteId?: number;\n  public projectInfo?: any;\n  public versionNumber: number;\n  public expiryDate?: string;\n  public nextQuoteId?: number;\n  public revisionNumber: number;\n  public quoteNumber: string;\n  public shippingAddress?: string;\n  public internalQuoteNumber: string;\n  public createdFromSpecId?: number;\n  public requote?: number;\n  public shippingPreference: QuoteShippingPreference;\n  public parentVersionId?: number;\n  public locked: boolean;\n  public termsAndCondition: IMap<QuoteTermsAndConditions>;\n  public grandTotals: IMap<QuoteGrandTotalModel>;\n  public bidDate: string;\n  public name: string;\n  public mySqlParentQuoteId?: number;\n  public area?: number;\n  public parentQuoteId?: number;\n  public collaborators: List<IMap<Collaborator>>;\n  public isVersioned: boolean; //  has a version made from this\n  public status: QuoteStatus;\n  public projectId?: number;\n  public building?: string; // is this???\n  public address?: string;\n  public currencyConversionDate?: string;\n  public customers: List<IMap<QuoteCustomer>>;\n  public createdDate?: string;\n  public modifiedDate?: string;\n  public version?: boolean; // is this a versioned quote made from some other quote\n  public mySqlSpecId?: number;\n  public unitMeasurement?: string;\n  public tags: List<string>; // ?????\n  public doneBy?: string;\n  public engineerName?: string;\n  public revisionCreatedDate?: string;\n  public file: List<any> | Map<FileType, List<IMap<File>>>; // FIX THIS!!! who knows what this is\n  public mySqlId?: number;\n  public internalNo?: string;\n  public currencyCode?: string;\n  public selectedCustomer?: number;\n  public createdBy: IMap<{\n    user: IMap<{\n      id: number;\n      name: string;\n    }>;\n    firm: IMap<{\n      id: number;\n      type: FirmType;\n    }>;\n    office: IMap<{\n      id: number;\n    }>;\n  }>;\n  public totalVersions: number;\n  public quotePhase: string;\n\n  public discountList?: List<IMap<QuoteChargeDiscountModel>>;\n  public sections: List<IMap<QuoteSection>>;\n  public sortProductsByManufacturer: boolean;\n\n  public constructor(init?: Partial<Quote> & HasId) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\n\nexport default class ProjectSpec extends HasId {\n  public id: number;\n  public name: string;\n\n  public constructor(init?: Partial<ProjectSpec> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}","import HasId from '../HasId';\n\n// complete project object\nexport default class ProjectTrackStatus extends HasId {\n  public projectId: string;\n  public trackDate: string;\n\n  public constructor(init?: Partial<ProjectTrackStatus> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\nimport PureAttributeOption from '../PureAttributeOption';\nimport AttributeTag from '../AttributeTag';\n\nexport default class PureAttribute extends HasId {\n  public id: number;\n  public parentId: number;\n  public key: string;\n  public name: string;\n  public parentAttributeName: string;\n  public options: List<IMap<PureAttributeOption>>;\n  public tags: List<IMap<AttributeTag>>;\n\n  public constructor(init?: Partial<PureAttribute> & HasId) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\nimport AttributeTag from '../AttributeTag';\n\nexport default class PureAttributeOption extends HasId {\n  public id: number;\n  public description: string;\n  public unit: string;\n  public value: string;\n  public tags: List<IMap<AttributeTag>>;\n\n  public constructor(init?: Partial<PureAttributeOption> & HasId) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\n\nexport default class PureAttribute extends HasId {\n  public name: string;\n\n  public constructor(init?: Partial<PureAttribute> & HasId) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\n\nexport default class RegionsList extends Base {\n  public label: string;\n  public id: number;\n  public isDefault: boolean;\n\n  public constructor(init?: Partial<RegionsList> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}","import { Base, Option } from '..';\n\nexport default class SearchArgs<T extends object> extends Base {\n  public options?: Option<T>;\n  public searchTerm?: string;\n  public filters?: any;\n  public page?: number;\n\n  public constructor(init?: Partial<SearchArgs<T>> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}","import {\n  fromJS,\n  Map,\n  Set,\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport Product from '../Product';\nimport ProductCategory from '../ProductCategory';\nimport Attribute from '../Attribute';\nimport AttributeValue from '../AttributeValue';\nimport HasId from '../HasId';\nimport { SeriesProductFile } from '..';\n\n// complete project object\nexport default class Series extends Product {\n\n  public static getCategoryFromSeries: (series: IMap<Series>) => IMap<ProductCategory> = (series: IMap<Series>) => {\n    return new ProductCategory({\n      id: series.get('category'),\n      name: series.get('categoryName'),\n    }).toImmutable();\n  }\n\n  public static getAttributesWithFilters: (series: IMap<Series>, filters: Map<string, Set<any>>, onlyFilter?: boolean) => Map<string, IMap<Attribute>> = (series: IMap<Series>, filters: Map<string, Set<any>>, onlyFilter?: boolean) => {\n    return series != null\n      ? series.get('attributes', Map()).reduce((attributeAcc: Map<string, IMap<Attribute>>, attributeValue: IMap<Attribute>, attributeKey: string) => {\n          const isAttribute = attributeValue.get('isAttribute');\n          if (isAttribute && !onlyFilter) {\n            return attributeAcc.set(attributeKey, attributeValue);\n          }\n          const filterSet = filters.get(attributeKey, Set());\n          const filterSetValues = filterSet.map((filter) => {\n            return filter.get('value');\n          });\n          const values: List<IMap<AttributeValue>> = attributeValue.get('values').filter((value: IMap<AttributeValue>) => {\n            return filterSetValues.has(value.get('value'));\n          }) as List<IMap<AttributeValue>>;\n          if (values.count() !== 0) {\n            return attributeAcc.set(attributeKey, attributeValue.set('values', values));\n          }\n          return attributeAcc;\n        }, Map())\n      : Map();\n  }\n\n  public isSeries?: boolean;\n  public attributes: Map<string, IMap<any>>;\n  public dateModified: string;\n  public createdBy: object;\n  public modifiedBy: object;\n  public file: SeriesProductFile;\n  public isConfigurator: boolean;\n  public testStatus: string;\n  public pimStatus: string;\n  public configurator: Map<string, any>;\n\n  public constructor(init?: Partial<Series> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import { Map } from 'immutable';\n\nimport Base from '../Base';\n\n// not well defined yet\n// this should be the error object from backend....\nexport default class ServerError extends Base {\n  public code: number;\n  public error: string;\n  public errorType: string;\n\n  public constructor(init?: Partial<ServerError> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  List,\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport HasId from '../HasId';\nimport Drawing from '../Drawing';\nimport Address from '../Address';\nimport HackBuildingClassListItem from '../HackBuildingClassListItem';\n\nexport default class Spec extends HasId {\n  public id: number;\n  public name: string;\n  public address: Address;\n  public area: string;\n  public bidDate: string | number;\n  public building: IMap<{\n    buildingClasses: List<IMap<HackBuildingClassListItem>>;\n  }>;\n  public createdBy: object;\n  public createdDate: string;\n  public doneBy: string;\n  public drawings: List<IMap<Drawing>>;\n  public internalNo: string | number;\n  public location: object;\n  public modifiedDate: string;\n  public projectTitle: string;\n  public projectId: number;\n  public isMaster: boolean;\n  public isAi: boolean;\n\n  public constructor(init?: Partial<Spec> & HasId) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\n\nexport default class WidgetLayoutData extends Base {\n  public id: number;\n\n  public constructor(init?: Partial<WidgetLayoutData> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import ListItem from '../ListItem';\n\nexport default class Status<V = string, K = number> extends ListItem<V, K> {\n  public constructor(init?: Partial<Status> & ListItem<V, K>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import Base from '../Base';\nimport { CSSProperties } from '@material-ui/styles';\n// complete project object\nexport default class TableColumnConfig extends Base {\n  public key: string;\n  public component: string;\n  public component_data: object;\n  public label: string;\n  public filterValue?: string;\n  public filterOperand?: string;\n  public numeric?: boolean;\n  public editable?: boolean;\n  public editableComponent: string;\n  public headerCellStyle: CSSProperties;\n\n  public constructor(init?: Partial<TableColumnConfig & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\nimport { ListItem } from '..';\nimport { List } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport AclRoles from '../AclRoles';\n\nexport type UserStatus = 'active' | 'disabled' | 'inactive' | 'deleted';\nexport default class User extends HasId {\n  public aclRoles: List<any>;\n  public batch:\tany;\n  public createBy:\tany;\n  public deleted:\tany;\n  public deletedBy:\tany;\n  public email:\tany;\n  public extension:\tany;\n  public firmId: number;\n  public officeId: number;\n  public firstName: any;\n  public jobTitle: any;\n  public lastAccessed: any;\n  public lastModifiedBy: any;\n  public lastName: any;\n  public mobilePhone: string;\n  public officePhone: string;\n  public registerDate: any;\n  public restriction: any;\n  public salutation: any;\n  public status: UserStatus;\n  public userhash: any;\n  public username: string;\n  public verified: boolean;\n  public imageId: string;\n  public registerAppId: string;\n  public registerAppName: string;\n  // data & privacy consent. null when the user never made a selection\n  public consent: boolean | null;\n\n  public constructor(init?: Partial<User> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import Media from '../Media';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport HasId from '../HasId';\nimport XrefPackageProduct from '../XrefPackageProduct';\nimport Base from '../Base';\nimport XrefType from '../XrefType';\n\n// complete xref project object\nexport default class XrefProduct extends Base {\n  public brand: string;\n  public category: number;\n  public categoryName: string;\n  public id: number | string;\n  public media: IMap<Media>;\n  public products: List<IMap<XrefPackageProduct>>;\n  public productNumber: string;\n  public competitorProductType: string;\n  public sponsorProductType: string;\n  public crossTypes?: List<IMap<XrefType>>;\n\n  public constructor(init?: Partial<XrefProduct & Base>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\n\n// complete xref package product object\nexport default class XrefPackageProduct extends HasId {\n  public productNumber: string;\n\n  public constructor(init?: Partial<XrefPackageProduct> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport HasId from '../HasId';\nimport XrefProduct from '../XrefProduct';\nimport XrefType from '../XrefType';\nimport { List } from 'immutable';\n\n// complete xref project object\nexport default class XrefData extends HasId {\n  public id: number;\n  public competitorProduct: IMap<XrefProduct>;\n  public competitorProductType: string;\n  public modifiedDate: string;\n  public createdDate: string;\n  public sponsorProduct: IMap<XrefProduct>;\n  public sponsorProductType: string;\n  public types: List<IMap<XrefType>>;\n\n  public constructor(init?: Partial<XrefData> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import HasId from '../HasId';\n\n// complete xref project object\nexport default class XrefType extends HasId {\n  public referenceId: number;\n  public score: number;\n  public type: string;\n\n  public constructor(init?: Partial<XrefType> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import ListItem from '../ListItem';\n\n// complete xref manufacturer object\nexport default class XrefCategory<V = string, K = number> extends ListItem<V, K> {\n\n  public constructor(init?: Partial<XrefCategory> & ListItem<V, K>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import { IAction, IMap } from 'ats-utils/src';\nimport { Product, Quote, QuoteChargeDiscountModel, QuoteCustomer, QuoteGrandTotalModel, QuoteSection, Region, User, VisibilityListItem } from '../../models';\nimport { List, Map } from 'immutable';\nimport { IBulkSelectedQuoteProduct, ITargetSection } from '../../components/QuoteForm/SectionListEdit/BulkMoveDialog';\n\nexport default {};\n\nexport enum QuoteEditTypes {\n  SET_EXCLUDE_PRODUCT_ACTION = 'SET_EXCLUDE_PRODUCT_ACTION',\n  SET_EXCLUDE_SECTION_ACTION = 'SET_EXCLUDE_SECTION_ACTION',\n  TOGGLE_EXCLUDE_SECTION_ACTION = 'TOGGLE_EXCLUDE_SECTION_ACTION',\n  UPDATE_GRAND_TOTAL_ACTION = 'UPDATE_GRAND_TOTAL_ACTION',\n  UPDATE_SECTION_TOTAL_ACTION = 'UPDATE_SECTION_TOTAL_ACTION',\n  UPDATE_ALL_SECTION_TOTAL_ACTION = 'UPDATE_ALL_SECTION_TOTAL_ACTION',\n  UPDATE_SECTION_TEMPLATE_ACTION = 'UPDATE_SECTION_TEMPLATE_ACTION',\n  UPDATE_ALL_SECTION_TEMPLATE_ACTION = 'UPDATE_ALL_SECTION_TEMPLATE_ACTION',\n  GET_PRODUCT_DISCOUNT_ACTION = 'GET_PRODUCT_DISCOUNT_ACTION',\n  ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_ACTION = 'ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_ACTION',\n  UPDATE_PRODUCT_IN_SECTION = 'UPDATE_PRODUCT_IN_SECTION',\n  ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_LOADING_ACTION = 'ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_LOADING_ACTION',\n  DUPLICATE_FIRM_PRODUCT_PROCEED_ACTION = 'DUPLICATE_FIRM_PRODUCT_PROCEED_ACTION',\n  DUPLICATE_FIRM_PRODUCT_CANCEL_ACTION = 'DUPLICATE_FIRM_PRODUCT_CANCEL_ACTION',\n  DUPLICATE_SECTION_ACTION = 'DUPLICATE_SECTION_ACTION',\n  SET_BULK_EDIT_ANCHOR_ACTION = 'SET_BULK_EDIT_ANCHOR_ACTION',\n  SET_PRESENTATIONAL_LABEL_COLUMN_ACTION = 'SET_PRESENTATIONAL_LABEL_COLUMN_ACTION',\n  SET_SECTION_LOADING_AND_EXPANDED_ACTION = 'SET_SECTION_LOADING_AND_EXPANDED_ACTION',\n  UPDATE_REGION_CALCULATIONS_ACTION = 'UPDATE_REGION_CALCULATIONS_ACTION',\n  UPDATE_SECTION_TOTAL_AND_GRAND_TOTAL_ACTION = 'UPDATE_SECTION_TOTAL_AND_GRAND_TOTAL_ACTION',\n  UPDATE_ALL_SECTION_TOTAL_THEN_GRAND_TOTAL_ACTION = 'UPDATE_ALL_SECTION_TOTAL_THEN_GRAND_TOTAL_ACTION',\n  SELECT_QUOTE_CUSTOMER_ACTION = 'SELECT_QUOTE_CUSTOMER_ACTION',\n  GET_CUSTOMER_DISCOUNT_AND_VISIBILITY_ACTION = 'GET_CUSTOMER_DISCOUNT_AND_VISIBILITY_ACTION',\n  SET_DND_MENU_PATHS_ACTION = 'SET_DND_MENU_PATHS',\n  SET_EXPANDED_PRODUCT_IN_SECTION = 'SET_EXPANDED_PRODUCT_IN_SECTION',\n  SET_ALL_EXPANDED_PRODUCT_IN_SECTION = 'SET_ALL_EXPANDED_PRODUCT_IN_SECTION',\n  FOCUS_CELL_ACTION = 'FOCUS_CELL_ACTION',\n  SET_SECTION_TO_FOCUS_ACTION = 'SET_SECTION_TO_FOCUS_ACTION',\n  UPDATE_PRODUCTS_PRICE_ACTION = 'UPDATE_PRODUCTS_PRICE_ACTION',\n  UPDATE_PRODUCTS_PRICE_LOADING_ACTION = 'UPDATE_PRODUCTS_PRICE_LOADING_ACTION',\n  UPDATE_QUOTE_FORM_STATUS_ACTION = 'UPDATE_QUOTE_FORM_STATUS_ACTION',\n  CLEAR_PRODUCT_IN_ROW_ACTION = 'CLEAR_PRODUCT_IN_ROW_ACTION',\n  DELETE_PRODUCT_IN_ROW_ACTION = 'DELETE_PRODUCT_IN_ROW_ACTION',\n  COPY_PRODUCT_TO_SECTION_ACTION = 'COPY_PRODUCT_TO_SECTION_ACTION',\n  INSERT_PRODUCT_TO_SECTION_ACTION = 'INSERT_PRODUCT_TO_SECTION_ACTION',\n  ADD_PRODUCTS_TO_NEW_SECTION_ACTION = 'ADD_PRODUCTS_TO_NEW_SECTION_ACTION',\n  MOVE_PRODUCT_TO_SECTION_ACTION = 'MOVE_PRODUCT_TO_SECTION_ACTION',\n  REORDER_PRODUCT_ACTION = 'REORDER_PRODUCT_ACTION',\n  LINK_AND_UNLINK_PRODUCT_ACTION = 'LINK_AND_UNLINK_PRODUCT_ACTION',\n  PIN_COLUMN_ACTION = 'PIN_COLUMN_ACTION',\n  UPDATE_SECTION_TITLE_ACTION = 'UPDATE_SECTION_TITLE_ACTION',\n  ADD_NEW_SECTION_ACTION = 'ADD_NEW_SECTION_ACTION',\n  CLEAR_SECTION_ACTION = 'CLEAR_SECTION_ACTION',\n  DELETE_SECTION_ACTION = 'DELETE_SECTION_ACTION',\n  GET_CURRENCY_CONVERSIONS_ACTION = 'GET_CURRENCY_CONVERSIONS_ACTION',\n  GET_CURRENCY_CONVERSIONS_SUCCESS_ACTION = 'GET_CURRENCY_CONVERSIONS_SUCCESS_ACTION',\n  MAP_PRODUCTS_TO_SECTION_TEMPLATE = 'MAP_PRODUCTS_TO_SECTION_TEMPLATE',\n  SET_ON_FOCUS_PRODUCT_ROW = 'SET_ON_FOCUS_PRODUCT_ROW',\n  UPDATE_BID_ACTION = 'UPDATE_BID_ACTION',\n  APPLY_FEEDBACK = 'APPLY_FEEDBACK',\n  SET_MAX_PRODUCTS_PER_PAGE = 'SET_MAX_PRODUCTS_PER_PAGE',\n  BULK_EDIT_SELECTED_PRODUCTS = 'BULK_EDIT_SELECTED_PRODUCTS',\n  BULK_MOVE_SELECTED_PRODUCTS = 'BULK_MOVE_SELECTED_PRODUCTS',\n  BULK_COPY_SELECTED_PRODUCTS = 'BULK_COPY_SELECTED_PRODUCTS',\n  SORT_PRODUCTS_BY_MANUFACTURER = 'SORT_PRODUCTS_BY_MANUFACTURER',\n  DELETE_SELECTED_PRODUCTS = 'DELETE_SELECTED_PRODUCTS',\n  TOGGLE_SECTION_IS_REQUESTING_PRODUCT = 'TOGGLE_SECTION_IS_REQUESTING_PRODUCT',\n  TOGGLE_PRODUCT_IS_REQUESTING_PRODUCT = 'TOGGLE_PRODUCT_IS_REQUESTING_PRODUCT',\n  TOGGLE_ALL_IS_REQUESTING_PRODUCT = 'TOGGLE_ALL_IS_REQUESTING_PRODUCT',\n  SET_SORT_PRODUCTS_BY_MANUFACTURER = 'SET_SORT_PRODUCTS_BY_MANUFACTURER',\n  IMPORT_PRICING_FROM_VENDOR_QUOTE = 'IMPORT_PRICING_FROM_VENDOR_QUOTE',\n  SET_SOURCE_QUOTE = 'SET_SOURCE_QUOTE',\n  SET_BID_RESPONSE_ID = 'SET_BID_RESPONSE_ID',\n  SET_PENDING_ATTACH_QUOTE_ID = 'SET_PENDING_ATTACH_QUOTE_ID',\n  SET_QUOTE_EXPORT_STEP = 'SET_QUOTE_EXPORT_STEP',\n  ADD_MANUFACTURER_DISCOUNTS_TO_QUOTE = 'ADD_MANUFACTURER_DISCOUNTS_TO_QUOTE',\n  REMOVE_MANUFACTURER_DISCOUNTS_FROM_QUOTE = 'REMOVE_MANUFACTURER_DISCOUNTS_FROM_QUOTE',\n  ADD_CUSTOMER_SALES_REPS_TO_QUOTE = 'ADD_CUSTOMER_SALES_REPS_TO_QUOTE',\n  RESET_IMPORT_PRICING_FORM = 'RESET_IMPORT_PRICING_FORM',\n  INGEST_DRAFT_SECTIONS = 'INGEST_DRAFT_SECTIONS',\n  ENABLE_AUTO_SAVE = 'ENABLE_AUTO_SAVE',\n  DISABLE_AUTO_SAVE = 'DISABLE_AUTO_SAVE',\n  INCREMENT_QUOTE_OPERATIONS = 'INCREMENT_QUOTE_OPERATIONS',\n  DECREMENT_QUOTE_OPERATIONS = 'DECREMENT_QUOTE_OPERATIONS',\n  SET_AUTO_SAVE_PENDING = 'SET_AUTO_SAVE_PENDING',\n  SET_QUOTE_DIRTY = 'SET_QUOTE_DIRTY',\n  TRIGGER_AUTO_SAVE_CHECK = 'TRIGGER_AUTO_SAVE_CHECK',\n  AUTO_SAVE_STARTED = 'AUTO_SAVE_STARTED',\n  AUTO_SAVE_SUCCESS = 'AUTO_SAVE_SUCCESS',\n  AUTO_SAVE_FAILED = 'AUTO_SAVE_FAILED',\n  PERFORM_AUTO_SAVE_REQUEST = 'PERFORM_AUTO_SAVE_REQUEST',\n  INCREMENT_FOCUSED_FIELDS = 'INCREMENT_FOCUSED_FIELDS',\n  DECREMENT_FOCUSED_FIELDS = 'DECREMENT_FOCUSED_FIELDS',\n  SET_AUTO_SAVE_SETTLING = 'SET_AUTO_SAVE_SETTLING',\n  RESTART_AUTO_SAVE_SETTLING = 'RESTART_AUTO_SAVE_SETTLING',\n  SET_IS_DETAIL_VIEW = 'SET_IS_DETAIL_VIEW',\n  RESTART_AUTO_SAVE_TIMER = 'RESTART_AUTO_SAVE_TIMER',\n}\n\nexport class EnableAutoSaveAction implements IAction {\n  public readonly type = QuoteEditTypes.ENABLE_AUTO_SAVE;\n}\n\nexport class DisableAutoSaveAction implements IAction {\n  public readonly type = QuoteEditTypes.DISABLE_AUTO_SAVE;\n}\n\nexport class IncrementQuoteOperationsAction implements IAction {\n  public readonly type = QuoteEditTypes.INCREMENT_QUOTE_OPERATIONS;\n}\n\nexport class DecrementQuoteOperationsAction implements IAction {\n  public readonly type = QuoteEditTypes.DECREMENT_QUOTE_OPERATIONS;\n}\n\n// Dispatched on a quote-input cell's first keystroke / on the matching rounded\n// commit. Auto-save is blocked while editingCellIds is non-empty, since the\n// un-rounded mid-edit value is committed to the form on every keystroke (debounced)\n// but rounding / decimal precision is only applied on blur — saving while editing\n// would persist the wrong value. The cellId identifies which cell is editing so\n// the Set keeps per-cell ownership: re-adding the same id is a no-op, removing an\n// id that isn't there is a no-op, and counter drift becomes structurally impossible.\nexport class IncrementFocusedFieldsAction implements IAction {\n  public readonly type = QuoteEditTypes.INCREMENT_FOCUSED_FIELDS;\n  constructor(\n    public payload: {\n      cellId: string;\n    }\n  ) { }\n}\n\nexport class DecrementFocusedFieldsAction implements IAction {\n  public readonly type = QuoteEditTypes.DECREMENT_FOCUSED_FIELDS;\n  constructor(\n    public payload: {\n      cellId: string;\n    }\n  ) { }\n}\n\nexport class SetAutoSavePendingAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_AUTO_SAVE_PENDING;\n  constructor(\n    public payload: {\n      pending: boolean;\n    }\n  ) { }\n}\n\nexport class SetQuoteDirtyAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_QUOTE_DIRTY;\n  constructor(\n    public payload: {\n      dirty: boolean;\n    }\n  ) { }\n}\n\n// True while the quote is still loading/settling (initialize + async cascades like\n// spec-to-quote draft sync, currency conversions, total recalcs). Dirty-marking is\n// suppressed during this window so load-time programmatic mutations aren't mistaken\n// for user edits and don't trigger a spurious auto-save.\nexport class SetAutoSaveSettlingAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_AUTO_SAVE_SETTLING;\n  constructor(\n    public payload: {\n      settling: boolean;\n    }\n  ) { }\n}\n\n// Re-enter the load-settling phase without disabling auto-save. Dispatched on\n// view-mode transitions (e.g. detail → edit) where the page re-renders sub-trees\n// that may dispatch incidental CHANGEs / wrapped sagas. Those aren't user edits,\n// so we absorb them in a fresh settle window. No-op if auto-save is disabled.\nexport class RestartAutoSaveSettlingAction implements IAction {\n  public readonly type = QuoteEditTypes.RESTART_AUTO_SAVE_SETTLING;\n}\n\nexport class SetIsDetailViewAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_IS_DETAIL_VIEW;\n  constructor(\n    public payload: {\n      isDetailView: boolean;\n    }\n  ) { }\n}\n\nexport class RestartAutoSaveTimerAction implements IAction {\n  public readonly type = QuoteEditTypes.RESTART_AUTO_SAVE_TIMER;\n}\n\nexport class TriggerAutoSaveCheckAction implements IAction {\n  public readonly type = QuoteEditTypes.TRIGGER_AUTO_SAVE_CHECK;\n}\n\nexport class AutoSaveStartedAction implements IAction {\n  public readonly type = QuoteEditTypes.AUTO_SAVE_STARTED;\n}\n\nexport class AutoSaveSuccessAction implements IAction {\n  public readonly type = QuoteEditTypes.AUTO_SAVE_SUCCESS;\n}\n\nexport class AutoSaveFailedAction implements IAction {\n  public readonly type = QuoteEditTypes.AUTO_SAVE_FAILED;\n  constructor(\n    public payload: {\n      error: any;\n    }\n  ) { }\n}\n\nexport class PerformAutoSaveRequestAction implements IAction {\n  public readonly type = QuoteEditTypes.PERFORM_AUTO_SAVE_REQUEST;\n  constructor(\n    public payload: {\n      requestId: number;\n    }\n  ) { }\n}\n\nexport class IngestDraftSectionsAction implements IAction {\n  public readonly type = QuoteEditTypes.INGEST_DRAFT_SECTIONS;\n}\n\nexport class AddCustomerSalesRepsToQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_CUSTOMER_SALES_REPS_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      salesReps: List<IMap<User>>;\n    }\n  ) { }\n}\n\nexport class AddManufacturerDiscountsToQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_MANUFACTURER_DISCOUNTS_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      manufacturerIds: List<number>;\n    }\n  ) { }\n}\n\nexport class RemoveManufacturerDiscountsFromQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.REMOVE_MANUFACTURER_DISCOUNTS_FROM_QUOTE;\n\n  constructor(\n    public payload: {\n      manufacturerIds: List<number>;\n    }\n  ) { }\n}\n\nexport class ToggleProductIsRequestingProductAction implements IAction {\n  public readonly type = QuoteEditTypes.TOGGLE_PRODUCT_IS_REQUESTING_PRODUCT;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      productIndex: number;\n      isRequestingProduct: boolean;\n    }\n  ) { }\n}\n\nexport class ToggleSectionIsRequestingProductAction implements IAction {\n  public readonly type = QuoteEditTypes.TOGGLE_SECTION_IS_REQUESTING_PRODUCT;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      isRequestingProduct: boolean;\n    }\n  ) { }\n}\n\nexport class ToggleAllIsRequestingProductAction implements IAction {\n  public readonly type = QuoteEditTypes.TOGGLE_ALL_IS_REQUESTING_PRODUCT;\n\n  constructor(\n    public payload: {\n      isRequestingProduct: boolean;\n    }\n  ) { }\n}\n\nexport class BulkEditSelectedProductsAction implements IAction {\n  public readonly type = QuoteEditTypes.BULK_EDIT_SELECTED_PRODUCTS;\n\n  constructor(\n    public payload: {\n      selectedProducts: IMap<any>;\n      columnsToEdit: IMap<any>;\n      onSuccess: () => void;\n    }\n  ) { }\n}\n\nexport class BulkMoveSelectedProductsAction implements IAction {\n  public readonly type = QuoteEditTypes.BULK_MOVE_SELECTED_PRODUCTS;\n\n  constructor(\n    public payload: {\n      selectedProducts: Map<string, IBulkSelectedQuoteProduct>;\n      targetSection: IMap<ITargetSection>;\n      onSuccess: () => void;\n    }\n  ) { }\n}\n\nexport class BulkCopySelectedProductsAction implements IAction {\n  public readonly type = QuoteEditTypes.BULK_COPY_SELECTED_PRODUCTS;\n\n  constructor(\n    public payload: {\n      selectedProducts: Map<string, IBulkSelectedQuoteProduct>;\n      targetSection: IMap<ITargetSection>;\n      onSuccess: () => void;\n    }\n  ) { }\n}\n\nexport class SetSortProductsByManufacturerAction implements IAction {\n    public readonly type = QuoteEditTypes.SET_SORT_PRODUCTS_BY_MANUFACTURER;\n\n    constructor (\n        public payload: {\n            sortProductsByManufacturer: boolean;\n        }\n    ) {}\n}\n\nexport class SortProductsByManufacturerAction implements IAction {\n  public readonly type = QuoteEditTypes.SORT_PRODUCTS_BY_MANUFACTURER;\n}\n\nexport class DeleteSelectedProductsAction implements IAction {\n  public readonly type = QuoteEditTypes.DELETE_SELECTED_PRODUCTS;\n\n  constructor(\n    public payload: {\n      onSuccess?: () => void;\n    }\n  ) { }\n}\n\nexport class MapProductsToSectionTemplateAction implements IAction {\n  public readonly type = QuoteEditTypes.MAP_PRODUCTS_TO_SECTION_TEMPLATE;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n    }\n  ) { }\n}\n\nexport class SetSectionToFocusAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_SECTION_TO_FOCUS_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: null | number;\n    }\n  ) { }\n}\n\nexport class FocusCellAction implements IAction {\n  public readonly type = QuoteEditTypes.FOCUS_CELL_ACTION;\n\n  constructor(\n    public payload: {\n      productIndex: number;\n      sectionIndex: number;\n      templateIndex: number | 'Label';\n      keyCode: number;\n    }\n  ) { }\n}\n\nexport class SetExpandedProductInSection implements IAction {\n  public readonly type = QuoteEditTypes.SET_EXPANDED_PRODUCT_IN_SECTION;\n\n  constructor(\n    public payload: {\n      section: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class SetAllExpandedProductInSection implements IAction {\n  public readonly type = QuoteEditTypes.SET_ALL_EXPANDED_PRODUCT_IN_SECTION;\n\n  constructor(\n    public payload: {\n      section: number;\n    }\n  ) { }\n}\n\nexport class SetDndMenuPathsAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_DND_MENU_PATHS_ACTION;\n\n  constructor(\n    public payload: {\n      dataPath?: Array<string | number>;\n      labelPath?: Array<string | number>;\n      index?: number;\n      isNavigation?: boolean;\n      anchorEl: Element;\n    }\n  ) { }\n}\n\nexport class SetExcludeProductAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_EXCLUDE_PRODUCT_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n      row: number;\n      excluded: boolean;\n    }\n  ) { }\n}\n\nexport class SetExcludeSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_EXCLUDE_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n      excluded: boolean;\n    }\n  ) { }\n}\n\nexport class ToggleExcludeSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.TOGGLE_EXCLUDE_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n    }\n  ) { }\n}\n\nexport class UpdateGrandTotalAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_GRAND_TOTAL_ACTION;\n  constructor(\n    public payload?: {\n      returnTotalInsteadOfUpdatingForm?: boolean;\n      quote?: IMap<Quote>;\n    }\n  ) { }\n}\n\nexport class UpdateSectionTotalAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_SECTION_TOTAL_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n    }\n  ) { }\n}\n\nexport class UpdateAllSectionTotalAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_ALL_SECTION_TOTAL_ACTION;\n\n  constructor(\n    public payload?: {\n      customerId?: number | null;\n      type?: string | null;\n      setUpdateTag?: boolean;\n      forPrint?: boolean;\n      withReset?: boolean;\n      quote?: IMap<Quote>;\n      discountsToApply?: IMap<any>;\n      discountsToRemove?: IMap<any>;\n      callbackForPrint?: (sections: List<IMap<QuoteSection>>, grandTotals: IMap<QuoteGrandTotalModel>, visibilityList: List<IMap<VisibilityListItem>>) => void;\n    }\n  ) { }\n}\n\nexport class UpdateSectionTotalAndGrandTotalAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_SECTION_TOTAL_AND_GRAND_TOTAL_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n    }\n  ) { }\n}\n\nexport class UpdateAllSectionTotalThenGrandTotalAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_ALL_SECTION_TOTAL_THEN_GRAND_TOTAL_ACTION;\n\n  constructor(\n    public payload: {\n      type?: string | null;\n      discountsToApply?: IMap<any>;\n      discountsToRemove?: IMap<any>;\n    }\n  ) { }\n}\n\nexport class UpdateProductsPriceAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_PRODUCTS_PRICE_ACTION;\n\n  constructor(\n    public payload: {\n      // quoteId?: string;\n      firmProductIds?: number[];\n      customerId?: number;\n      regionId?: string;\n      updateOnlySelectedProducts?: boolean;\n    }\n  ) { }\n}\n\nexport class UpdateProductsPriceLoadingAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_PRODUCTS_PRICE_LOADING_ACTION;\n\n  constructor(\n    public payload: {\n      loading: boolean;\n    }\n  ) { }\n}\n\nexport class UpdateSectionTemplateAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_SECTION_TEMPLATE_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n      template: any;\n    }\n  ) { }\n}\n\nexport class UpdateAllSectionTemplateAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_ALL_SECTION_TEMPLATE_ACTION;\n\n  constructor(\n    public payload: {\n      template: any;\n    }\n  ) { }\n}\n\nexport class AddProductOrPackageToQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_ACTION;\n\n  constructor(\n    public payload: {\n      product: any;\n      section: number;\n      row: number;\n      callback?: () => any\n    }\n  ) { }\n}\n\nexport class UpdateProductInSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_PRODUCT_IN_SECTION;\n\n  constructor(\n    public payload: {\n      product: any;\n      section: number;\n      row: number;\n    }\n  ) { }\n}\n\nexport class InsertProductToSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_ACTION;\n\n  constructor(\n    public payload: {\n      product: any;\n      section: number;\n      row: number;\n    }\n  ) { }\n}\nexport class AddProductOrPackageToQuoteLoading implements IAction {\n  public readonly type = QuoteEditTypes.ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_LOADING_ACTION;\n\n  constructor(\n    public payload: {\n      loading: boolean;\n    }\n  ) { }\n}\n\nexport class DuplicateFirmProductProceedAction implements IAction {\n  public readonly type = QuoteEditTypes.DUPLICATE_FIRM_PRODUCT_PROCEED_ACTION;\n\n  constructor(\n    public payload: {} = {}\n  ) { }\n}\n\nexport class DuplicateFirmProductCancelAction implements IAction {\n  public readonly type = QuoteEditTypes.DUPLICATE_FIRM_PRODUCT_CANCEL_ACTION;\n\n  constructor(\n    public payload: {} = {}\n  ) { }\n}\n\nexport class DuplicateSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.DUPLICATE_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      section: number;\n    }\n  ) { }\n}\n\nexport class SetPresentationalLabelColumnAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_PRESENTATIONAL_LABEL_COLUMN_ACTION;\n\n  constructor(\n    public payload: {\n      labelColumn: string;\n      section: number;\n    }\n  ) { }\n}\n\nexport class SetSectionLoadingAndExpandedAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_SECTION_LOADING_AND_EXPANDED_ACTION;\n\n  constructor(\n    public payload: {\n      loading?: boolean;\n      expanded?: boolean;\n      section: number;\n    }\n  ) { }\n}\n\nexport class UpdateRegionCalculationsAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_REGION_CALCULATIONS_ACTION;\n\n  constructor(\n    public payload: {\n      region: IMap<Region>;\n    }\n  ) { }\n}\n\nexport class SelectQuoteCustomerAction implements IAction {\n  public readonly type = QuoteEditTypes.SELECT_QUOTE_CUSTOMER_ACTION;\n\n  constructor(\n    public payload: {\n      customerId: number;\n    }\n  ) { }\n}\n\nexport class GetCustomerDiscountsAndVisibilityAction implements IAction {\n  public readonly type = QuoteEditTypes.GET_CUSTOMER_DISCOUNT_AND_VISIBILITY_ACTION;\n\n  constructor(\n    public payload: {\n      customerId: number;\n      onFinallyCb?: (data?: any) => void;\n    }\n  ) { }\n}\n\nexport class UpdateQuoteFormStatusAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_QUOTE_FORM_STATUS_ACTION;\n\n  constructor(\n    public payload?: {\n      customerId?: number | null;\n      type?: string | null;\n    }\n  ) { }\n}\n\nexport class ClearProductInRowAction implements IAction {\n  public readonly type = QuoteEditTypes.CLEAR_PRODUCT_IN_ROW_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class DeleteProductInRowAction implements IAction {\n  public readonly type = QuoteEditTypes.DELETE_PRODUCT_IN_ROW_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class CopyProductToSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.COPY_PRODUCT_TO_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      fromSection: number;\n      toSection: number;\n      productIndex: number;\n      product: any;\n    }\n  ) { }\n}\n\nexport class AddProductsToNewSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_PRODUCTS_TO_NEW_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      suggestProductsMapping: any;\n      bidInvitationResponse: any;\n    }\n  ) { }\n}\n\nexport class MoveProductToSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.MOVE_PRODUCT_TO_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      fromSection: number;\n      toSection: number;\n      productIndex: number;\n      product: any;\n    }\n  ) { }\n}\n\nexport class ReorderProductAction implements IAction {\n  public readonly type = QuoteEditTypes.REORDER_PRODUCT_ACTION;\n\n  constructor(\n    public payload: {\n      dataPath: Array<string | number>;\n      fromIndex: number;\n      toIndex: number;\n    }\n  ) { }\n}\n\nexport class LinkAndUnlinkProductAction implements IAction {\n  public readonly type = QuoteEditTypes.LINK_AND_UNLINK_PRODUCT_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class PinColumnAction implements IAction {\n  public readonly type = QuoteEditTypes.PIN_COLUMN_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      fieldId: string;\n    }\n  ) { }\n}\nexport class UpdateSectionTitleAction implements IAction {\n  public readonly type = QuoteEditTypes.UPDATE_SECTION_TITLE_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n      value: string;\n    }\n  ) { }\n}\nexport class AddNewSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.ADD_NEW_SECTION_ACTION;\n  constructor(\n    public payload: {\n      sectionIndex?: number;\n    }\n  ) { }\n}\nexport class ClearSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.CLEAR_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n    }\n  ) { }\n}\n\nexport class DeleteSectionAction implements IAction {\n  public readonly type = QuoteEditTypes.DELETE_SECTION_ACTION;\n\n  constructor(\n    public payload: {\n      sectionIndex: number;\n    }\n  ) { }\n}\n\nexport class GetCurrencyConversionsAction implements IAction {\n  public readonly type = QuoteEditTypes.GET_CURRENCY_CONVERSIONS_ACTION;\n  constructor(\n    public payload: {\n      conversionDate: string;\n    }\n  ) { }\n}\n\nexport class GetCurrencyConversionsSuccessAction implements IAction {\n  public readonly type = QuoteEditTypes.GET_CURRENCY_CONVERSIONS_SUCCESS_ACTION;\n  constructor(\n    public payload: {\n      currencyConversions: any;\n    }\n  ) { }\n}\n\nexport class SetOnFocusProductRow implements IAction {\n  public readonly type = QuoteEditTypes.SET_ON_FOCUS_PRODUCT_ROW;\n  constructor(\n    public payload: {\n      rowId: string;\n      sectionIndex: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class ApplyFeedbackAction implements IAction {\n  public readonly type = QuoteEditTypes.APPLY_FEEDBACK;\n  constructor(\n    public payload: {\n      value: any;\n      sectionIndex: number;\n      productIndex: number;\n    }\n  ) { }\n}\n\nexport class SetMaxProductsPerPageAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_MAX_PRODUCTS_PER_PAGE;\n  constructor(\n    public payload: {\n      maxProductsPerPage: number;\n    }\n  ) { }\n}\n\nexport class ImportPricingFromVendorQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.IMPORT_PRICING_FROM_VENDOR_QUOTE;\n  constructor(\n    public payload: {\n      fieldsToMap: any;\n      bidInvitationResponse: any;\n      productsToMap: any;\n      selectedProducts: any;\n      suggestProductsMapping: any;\n      insertSectionProducts: any;\n      previousInsertSectionProducts?: any;\n      allVendorBidResponseProductIds?: number[];\n    }\n  ) { }\n}\n\nexport class SetSourceQuoteAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_SOURCE_QUOTE;\n\n  constructor(\n    public payload: {\n      sourceQuoteId: number;\n    }\n  ) { }\n}\n\nexport class SetBidResponseIdAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_BID_RESPONSE_ID;\n\n  constructor(\n    public payload: {\n      bidResponseId: number | string | null;\n    }\n  ) { }\n}\n\nexport class SetPendingAttachQuoteIdAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_PENDING_ATTACH_QUOTE_ID;\n\n  constructor(\n    public payload: {\n      pendingAttachQuoteId: number | string | null;\n    }\n  ) { }\n}\n\n// PT-5477: tracks which step of the export page is showing (settings /\n// download / email / sent / error). Written by QuoteExport, read by Routes.tsx\n// so the top page title can switch between \"Email & Export\" and \"New Email\".\nexport class SetQuoteExportStepAction implements IAction {\n  public readonly type = QuoteEditTypes.SET_QUOTE_EXPORT_STEP;\n\n  constructor(\n    public payload: {\n      quoteExportStep: string | null;\n    }\n  ) { }\n}\n\nexport class ResetImportPricingFormAction implements IAction {\n  public readonly type = QuoteEditTypes.RESET_IMPORT_PRICING_FORM;\n\n  constructor(public payload?: {}) { }\n}\n","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ListItem,\n  Product,\n  XrefData,\n  XrefManufacturer,\n  XrefCategory,\n  Filter,\n  Option,\n  Series,\n  XrefProduct,\n} from '../../../src/models';\nimport { List } from 'immutable';\nimport { ICrossRefReducerState } from './reducer';\nexport default {};\n\nexport enum XrefActionTypes {\n  GET_COMPETITOR_PRODUCTS = 'GET_COMPETITOR_PRODUCTS',\n  GET_COMPETITOR_PRODUCTS_LOADING = 'GET_COMPETITOR_PRODUCTS_LOADING',\n  GET_QUICK_SEARCH_XREF_SUCCEEDED = 'GET_QUICK_SEARCH_XREF_SUCCEEDED',\n  GET_EXACT_SEARCH_XREF = 'GET_EXACT_SEARCH_XREF',\n  GET_EXACT_SEARCH_XREF_SUCCEEDED = 'GET_EXACT_SEARCH_XREF_SUCCEEDED',\n  GET_PRODUCT_DETAILS = 'GET_PRODUCT_DETAILS',\n  GET_PRODUCT_DETAILS_SUCCEEDED = 'GET_PRODUCT_DETAILS_SUCCEEDED',\n  SET_SELECTED_COMPETITOR_PRODUCT_ID = 'SET_SELECTED_COMPETITOR_PRODUCT_ID',\n  RESET_SEARCH_RESULTS = 'RESET_SEARCH_RESULTS',\n  RESET_MANUFACTURERS_LIST = 'RESET_MANUFACTURERS_LIST',\n  GET_XREF_MANUFACTURERS = 'GET_XREF_MANUFACTURERS',\n  GET_XREF_MANUFACTURERS_LOADING = 'GET_XREF_MANUFACTURERS_LOADING',\n  GET_XREF_MANUFACTURERS_SUCCEEDED = 'GET_XREF_MANUFACTURERS_SUCCEEDED',\n  GET_XREF_CATEGORIES = 'GET_XREF_CATEGORIES',\n  GET_XREF_CATEGORIES_LOADING = 'GET_XREF_CATEGORIES_LOADING',\n  GET_XREF_CATEGORIES_SUCCEEDED = 'GET_XREF_CATEGORIES_SUCCEEDED',\n  GET_XREF_PRODUCT_BY_MANUFACTURER = 'GET_XREF_PRODUCT_BY_MANUFACTURER',\n  GET_XREF_PRODUCT_BY_CATEGORY = 'GET_XREF_PRODUCT_BY_CATEGORY',\n  SET_SELECTED_MANUFACTURER_VALUE = 'SET_SELECTED_MANUFACTURER_VALUE',\n  SET_SELECTED_CATEGORY_ID = 'SET_SELECTED_CATEGORY_ID',\n  SET_SEARCH_TERM = 'SET_SEARCH_TERM',\n  SEND_XREF_FEEDBACK = 'SEND_XREF_FEEDBACK',\n  GET_PRODUCT_DETAILS_FAILED = 'GET_PRODUCT_DETAILS_FAILED',\n  REQUEST_XREF = 'REQUEST_XREF',\n  ADD_XREF = 'ADD_XREF',\n  ADD_XREF_SUCCESS = 'ADD_XREF_SUCCESS',\n  UPDATE_XREF = 'UPDATE_XREF',\n  UPDATE_XREF_SUCCESS = 'UPDATE_XREF_SUCCESS',\n  SEARCH_XREFS = 'SEARCH_XREFS',\n  SEARCH_XREFS_SUCCEEDED = 'SEARCH_XREFS_SUCCEEDED',\n  SEARCH_XREFS_FINISHED = 'SEARCH_XREFS_FINISHED',\n  SEARCH_XREF_COMPETITOR = 'SEARCH_XREF_COMPETITOR',\n  SEARCH_XREF_SPONSOR = 'SEARCH_XREF_SPONSOR',\n  SEARCH_XREF_SPONSOR_LOADING = 'SEARCH_XREF_SPONSOR_LOADING',\n  SEARCH_XREF_COMPETITOR_LOADING = 'SEARCH_XREF_COMPETITOR_LOADING',\n  SEARCH_XREF_SPONSOR_PRODUCT_SUCCESS = 'SEARCH_XREF_SPONSOR_PRODUCT_SUCCESS',\n  SEARCH_XREF_SPONSOR_SERIES_SUCCESS = 'SEARCH_XREF_SPONSOR_SERIES_SUCCESS',\n  SEARCH_XREF_COMPETITOR_PRODUCT_SUCCESS = 'SEARCH_XREF_COMPETITOR_PRODUCT_SUCCESS',\n  SEARCH_XREF_COMPETITOR_SERIES_SUCCESS = 'SEARCH_XREF_COMPETITOR_SERIES_SUCCESS',\n  DELETE_XREF_BY_ID = 'DELETE_XREF_BY_ID',\n  DELETE_XREF_BY_ID_SUCCEEDED = 'DELETE_XREF_BY_ID_SUCCEEDED',\n  DELETE_XREF_BY_ID_AND_SEARCH_XREFS = 'DELETE_XREF_BY_ID_AND_SEARCH_XREFS',\n  RESET_XREF_STATE = 'RESET_XREF_STATE',\n  CHECK_DUPLICATE_XREF_LOADING = 'CHECK_DUPLICATE_XREF_LOADING',\n  GET_ALTERNATIVES_XREF = 'GET_ALTERNATIVES_XREF',\n  CREATE_SPONSOR_PRODUCT = 'CREATE_SPONSOR_PRODUCT',\n  CREATE_SPONSOR_PRODUCT_FAILED = 'CREATE_SPONSOR_PRODUCT_FAILED',\n  CREATE_SPONSOR_PRODUCT_SUCCEED = 'CREATE_SPONSOR_PRODUCT_SUCCEED',\n  CLEAR_CREATE_SPONSOR_PRODUCT_ERROR = 'CLEAR_CREATE_SPONSOR_PRODUCT_ERROR',\n  CANCEL_XREF_SEARCH = 'CANCEL_XREF_SEARCH',\n  SET_ALTERNATIVES_XREF_LOADING = 'SET_ALTERNATIVES_XREF_LOADING'\n}\n\nexport type SearchType = 'product' | 'series';\nexport type CompetitorSponsor = 'competitor' | 'sponsor';\nexport class DeleteXrefByIdAndSearchXrefsAction implements IAction {\n  public readonly type = XrefActionTypes.DELETE_XREF_BY_ID_AND_SEARCH_XREFS;\n\n  constructor(\n    public payload: {\n      xrefId: number,\n      andFilterArray?: object[],\n      orFilterArray?: object[],\n      location?: object\n    }\n  ) {}\n}\n\nexport class DeleteXrefByIdAction implements IAction {\n  public readonly type = XrefActionTypes.DELETE_XREF_BY_ID;\n\n  constructor(\n    public payload: {\n      xrefId: number,\n      redirectPath?: string\n    }\n  ) {}\n}\n\nexport class SearchXrefsAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREFS;\n\n  constructor(\n    public payload: {\n      andFilterArray?: object[];\n      orFilterArray?: object[];\n      location?: object;\n    }\n  ) {}\n}\n\nexport class SearchXrefsSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREFS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      xrefs: List<IMap<XrefData>>;\n    }\n  ) {}\n}\n\nexport class SearchXrefsFinishedAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREFS_FINISHED;\n}\n\nexport class SetSelectedCategoryIdAction implements IAction {\n  public readonly type = XrefActionTypes.SET_SELECTED_CATEGORY_ID;\n\n  constructor(\n    public payload: {\n      selectedCategoryId: number;\n    }\n  ) {}\n}\n\nexport class SetSelectedManufacturerValueAction implements IAction {\n  public readonly type = XrefActionTypes.SET_SELECTED_MANUFACTURER_VALUE;\n\n  constructor(\n    public payload: {\n      selectedManufacturerValue: string;\n    }\n  ) {}\n}\n\nexport class GetXrefProductsByCategoryAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_PRODUCT_BY_CATEGORY;\n\n  constructor(\n    public payload: {\n      category: IMap<XrefCategory>;\n    }\n  ) {}\n}\n\nexport class GetXrefProductByManufacturerAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_PRODUCT_BY_MANUFACTURER;\n\n  constructor(\n    public payload: {\n      manufacturer: IMap<XrefManufacturer>;\n    }\n  ) {}\n}\n\nexport class GetXrefCategoriesSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_CATEGORIES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      categoryList: List<IMap<XrefCategory>>;\n    }\n  ) {}\n}\n\nexport class GetXrefCategoriesAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_CATEGORIES;\n\n  constructor(\n    public payload: {\n      manufacturer?: IMap<XrefManufacturer>;\n    }\n  ) {}\n}\n\nexport class GetXrefCategoriesLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_CATEGORIES_LOADING;\n\n  constructor (\n    public payload: boolean\n  ) {}\n}\nexport class GetXrefManufacturersSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_MANUFACTURERS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      manufacturerList: List<IMap<XrefManufacturer>>;\n    }\n  ) {}\n}\n\nexport class ResetManufacturersListAction implements IAction {\n  public readonly type = XrefActionTypes.RESET_MANUFACTURERS_LIST;\n}\n\nexport class GetXrefManufacturersAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_MANUFACTURERS;\n\n  constructor(\n    public categoryId?: number\n  ) {}\n}\n\nexport class GetXrefManufacturersLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.GET_XREF_MANUFACTURERS_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class ResetSearchResultsAction implements IAction {\n  public readonly type = XrefActionTypes.RESET_SEARCH_RESULTS;\n\n  // constructor(\n  //   public payload: {\n  //     productName: string\n  //   }\n  // ) {}\n}\n\nexport class SetSelectedCompetitorProductId implements IAction {\n  public readonly type = XrefActionTypes.SET_SELECTED_COMPETITOR_PRODUCT_ID;\n\n  constructor(\n    public payload: number | string\n  ) {}\n}\n\nexport class GetProductDetailsSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.GET_PRODUCT_DETAILS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      productData: IMap<Product>\n    }\n  ) {}\n}\n\nexport class GetProductDetailsFailedAction implements IAction {\n  public readonly type = XrefActionTypes.GET_PRODUCT_DETAILS_FAILED;\n}\n\nexport class GetProductDetailsAction implements IAction {\n  public readonly type = XrefActionTypes.GET_PRODUCT_DETAILS;\n\n  constructor(\n    public payload: {\n      productId: number;\n      onSuccess?: (product: IMap<Product>) => void;\n      onFailed?: () => void;\n    }\n  ) {}\n}\n\nexport class GetCompetitorProductsAction implements IAction {\n  public readonly type = XrefActionTypes.GET_COMPETITOR_PRODUCTS;\n\n  constructor(\n    public payload: {\n      searchTerm: string\n    }\n  ) {}\n}\n\nexport class CancelXrefSearchAction implements IAction {\n  public readonly type = XrefActionTypes.CANCEL_XREF_SEARCH;\n}\n\nexport class GetCompetitorProductsLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.GET_COMPETITOR_PRODUCTS_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class SetSearchTermAction implements IAction {\n  public readonly type = XrefActionTypes.SET_SEARCH_TERM;\n\n  constructor(\n    public payload: {\n      searchTerm: string\n    }\n  ) {}\n}\n\nexport class GetQuickSearchXrefSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.GET_QUICK_SEARCH_XREF_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      xrefSearchResults: List<IMap<XrefData>>\n    }\n  ) {}\n}\n\nexport class GetAlternativesXrefAction implements IAction {\n  public readonly type = XrefActionTypes.GET_ALTERNATIVES_XREF;\n\n  constructor(\n    public payload: {\n      competitorProductId: number;\n      competitorProductSeriesName: string;\n      competitorProductType?: string;\n      sponsorProductType?: string;\n      competitorProductProductNumber?: string;\n      competitorProductBrand?: string;\n      competitorProductBrandId?: number;\n      competitorProductCategoryName?: string;\n      competitorProductCategoryId?: number;\n      options?: Option<{\n        sponsorRank?: number;\n        isFirmSpecific?: number;\n        id?: number;\n        competitorProductType: number;\n      }>\n    }\n  ) {}\n}\n\nexport class GetExactSearchXrefAction implements IAction {\n  public readonly type = XrefActionTypes.GET_EXACT_SEARCH_XREF;\n\n  constructor(\n    public payload: {\n      competitorProduct: IMap<XrefProduct>\n      competitorProductType: string;\n      options?: Option<{\n        isFirmSpecific?: number;\n        id?: number;\n      }>\n    }\n  ) {}\n}\n\nexport class GetExactSearchXrefSucceededAction implements IAction {\n  public readonly type = XrefActionTypes.GET_EXACT_SEARCH_XREF_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      id: number | string,\n      xrefs: List<IMap<XrefData>>,\n    }\n  ) {}\n}\n\nexport class SendXrefFeedbackAction implements IAction {\n  public readonly type = XrefActionTypes.SEND_XREF_FEEDBACK;\n\n  constructor(\n    public payload: {\n      xrefId: number,\n      body: {\n        email: string,\n        message: string,\n        rating: number\n      }\n    }\n  ) {}\n}\n\nexport class RequestXrefAction implements IAction {\n  public readonly type = XrefActionTypes.REQUEST_XREF;\n\n  constructor(\n    public payload: {\n      manufacturer: string,\n      categoryName: string,\n      productNumber: string,\n      message: string,\n      email: string,\n    }\n  ) {}\n}\n\nexport class AddXrefAction implements IAction {\n  public readonly type = XrefActionTypes.ADD_XREF;\n\n  constructor(\n    public payload: {\n      xrefData: IMap<XrefData>,\n      onSuccess?: () => void\n    }\n  ) {}\n}\nexport class AddXrefSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.ADD_XREF_SUCCESS;\n\n  constructor(\n    public payload: IMap<XrefData>\n  ) {}\n}\nexport class UpdateXrefAction implements IAction {\n  public readonly type = XrefActionTypes.UPDATE_XREF;\n\n  constructor(\n    public payload: {\n      xrefId: number,\n      xref: IMap<XrefData>,\n      skipDuplicateCheck?: boolean,\n      onSuccess?: () => void;\n    }\n  ) {}\n}\nexport class UpdateXrefSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.UPDATE_XREF_SUCCESS;\n\n  constructor(\n    public payload: {\n      xrefId: number,\n      xref: IMap<XrefData>\n    }\n  ) {}\n}\nexport class SearchXrefSponsorProductSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_SPONSOR_PRODUCT_SUCCESS;\n\n  constructor(\n    public payload: List<IMap<Series | Product>>\n  ) {}\n}\n\nexport class SearchXrefSponsorSeriesSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_SPONSOR_SERIES_SUCCESS;\n\n  constructor(\n    public payload: List<IMap<Series | Product>>\n  ) {}\n}\n\nexport class SearchXrefCompetitorProductSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_COMPETITOR_PRODUCT_SUCCESS;\n\n  constructor(\n    public payload: List<IMap<Series | Product>>\n  ) {}\n}\n\nexport class SearchXrefCompetitorSeriesSuccessAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_COMPETITOR_SERIES_SUCCESS;\n\n  constructor(\n    public payload: List<IMap<Series | Product>>\n  ) {}\n}\n\nexport class SearchXrefSponsorAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_SPONSOR;\n\n  constructor(\n    public payload: {\n      type: SearchType,\n      filters?: Filter,\n      options?: Option<Series | Product>,\n      location?: object,\n    }\n  ) {}\n}\n\nexport class SearchXrefCompetitorAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_COMPETITOR;\n\n  constructor(\n    public payload: {\n      type: SearchType,\n      filters?: Filter,\n      options?: Option<Series | Product>,\n      location?: object,\n    }\n  ) {}\n}\n\nexport class SearchXrefSponsorLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_SPONSOR_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\nexport class SearchXrefCompetitorLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.SEARCH_XREF_COMPETITOR_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class ResetXrefStateAction implements IAction {\n  public readonly type = XrefActionTypes.RESET_XREF_STATE;\n  constructor(\n    public payload: Array<keyof ICrossRefReducerState>\n  ) {}\n}\n\nexport class CheckDuplicateXrefLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.CHECK_DUPLICATE_XREF_LOADING;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class CreateSponsorProductAction implements IAction {\n    public readonly type = XrefActionTypes.CREATE_SPONSOR_PRODUCT;\n    constructor(\n        public payload: {\n            product: IMap<XrefProduct>\n            type: 'series' | 'product',\n            filters,\n            from: 'competitor' | 'sponsor',\n        }\n    ) {\n    }\n}\n\nexport class CreateSponsorProductFailedAction implements IAction {\n    public readonly type = XrefActionTypes.CREATE_SPONSOR_PRODUCT_FAILED;\n    constructor(\n        public payload: {\n            error: string;\n        }\n    ) {\n    }\n}\n\nexport class ClearCreateSponsorProductErrorAction implements IAction {\n    public readonly type = XrefActionTypes.CLEAR_CREATE_SPONSOR_PRODUCT_ERROR;\n}\n\nexport class CreateSponsorProductSucceedAction implements IAction {\n    public readonly type = XrefActionTypes.CREATE_SPONSOR_PRODUCT_SUCCEED;\n\n    constructor(\n        public payload: {\n            product: IMap<Product | Series>,\n            type: 'product' | 'series',\n            from: 'sponsor' | 'competitor'\n        }\n    ) {}\n\n}\n\nexport class SetAlternativesXrefLoadingAction implements IAction {\n  public readonly type = XrefActionTypes.SET_ALTERNATIVES_XREF_LOADING;\n}","/* tslint:disable */\nimport { createSelector } from 'reselect';\nimport {\n  Map,\n  List,\n  Set,\n  fromJS,\n  OrderedSet,\n  OrderedMap,\n} from 'immutable';\nimport {\n  CategoryDisplayType,\n  PRODUCT_SELECTION_GROUP_FORM,\n  QuickSearchType,\n} from './constants';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { getFormValues } from 'redux-form/immutable';\n\nimport {\n  ProductCategory,\n  Series,\n  ProductCategoryGroup,\n  MatchingProduct,\n  Attribute,\n  AttributeValue,\n  Product,\n  ListItem,\n  AiExclusionItem,\n  AiExclusion,\n} from '../../models';\nimport {IProductReducerState, SortSeriesBy} from './reducer';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport CategoryDisplayTypeListItem from '../../models/CategoryDisplayTypeListItem';\nimport { IProductCategoryMenuHelper } from '../../pages/FirmDetailPage/OfficesInfo/BrandTags/AddBrandTagDialog';\nimport { makeSelectIdentityObject, makeSelectUngatedCurrency } from '../AtsModule/selectors';\nimport { makeSelectLocationForSeriesSearchFilter } from '../AccountModule/selectors';\nimport { GEOLOCATION_ID } from '../../constants';\n\nexport default {};\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ProductModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectSeriesList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesList'),\n)\n\nexport const makeSelectSeriesListHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesListHasNextPage'),\n)\n\nexport const makeSelectSeriesSearchOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesSearchOptions'),\n)\n\nexport const makeSelectHideDiscontinuedSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('hideDiscontinuedSeries'),\n)\n\nexport const makeSelectShowDraftSeriesOnly = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('showDraftSeriesOnly'),\n)\n\nexport const makeSelectSortSeriesBy = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>): SortSeriesBy => state.get('sortSeriesBy'),\n)\n\nexport const makeSelectIsRecommendedSpecProductLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isRecommendedSpecProductLoading'),\n)\n\nexport const makeSelectRecommendedSpecProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('recommendedSpecProducts'),\n)\n\nexport const makeSelectCategoryManfacturers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('categoryManfacturers'),\n)\n\nexport const makeSelectProductsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productsLoading'),\n)\n\nexport const makeSelectCategoryLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('categoryLoading'),\n)\n\nexport const makeSelectProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('products'),\n)\n\nexport const makeSelectProductsHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productsHasNextPage'),\n)\n\nexport const makeSelectSkipRuleEngine = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('skipRuleEngine'),\n)\n\nexport const makeSelectAttributeOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('attributeOptions'),\n)\n\nexport const makeSelectEditingProductIndex = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('editProductIndex'),\n)\n\nexport const makeSelectAttributeWhitelistMapWithSelectedCategoryId = () => createSelector(\n  selectReducerState(),\n  makeSelectProductCategoryId(),\n  (state: IMapNonRecursive<IProductReducerState>, productCategoryId: number) => state.getIn(['categoryToAttributeWhitelistMap', productCategoryId]) || OrderedSet<string>(),\n);\n\nexport const makeSelectCategoryToAttributeWhitelistMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('categoryToAttributeWhitelistMap'),\n);\n\nexport const makeSelectProductCategoryId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productCategoryId'),\n);\nexport const makeSelectProductCategory = () => createSelector(\n  makeSelectProductCategoryId(),\n  makeSelectProductTypeIdToProductTypeMap(),\n  (productCategoryId: number, productTypeIdToProductTypeMap: Map<number, IMap<ProductCategory>>) => productTypeIdToProductTypeMap.get(productCategoryId),\n);\n\nexport const makeSelectSearchTerm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('searchTerm'),\n);\n\nexport const makeSelectProductCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productCategories'),\n);\n\nexport const makeSelectProductCategoriesAlphaSorted = () => createSelector(\n  makeSelectProductCategories(),\n  (productCategories: Map<string, IMap<ProductCategoryGroup>>) => {\n    if (!productCategories) {\n      return List();\n    }\n    return productCategories\n      ?.reduce((acc, division) => {\n          return acc.concat(division.get('productTypes')?.map((category) => fromJS({id: category.get('id'), value: category.get('name')})) ?? List());\n        }, List())\n      .sort((a, b) => {\n        const aCategory = a.get('value').toLowerCase();\n        const bCategory = b.get('value').toLowerCase();\n        return aCategory.localeCompare(bCategory);\n      });\n  },\n);\n\nexport const makeSelectDivisionsCategoriesOrderedMap = () => createSelector(\n  makeSelectProductCategories(),\n  (productCategories: Map<string, IMap<ProductCategoryGroup>>) => {\n    return productCategories\n      .sort((a: IMap<ProductCategoryGroup>, b: IMap<ProductCategoryGroup>) => Number(a.get('divisionNumber')) - Number(b.get('divisionNumber')))\n      .reduce((acc: Map<string, IMap<IProductCategoryMenuHelper>>, item: IMap<ProductCategoryGroup>) => {\n        const id = item.get('divisionNumber');\n        const label = `Division: ${item.get('divisionNumber')}`;\n        const sub = item.get('categoryType');\n        const cats = item.get('productTypes');\n        const existing = acc.get(id, Map({\n          id,\n          label,\n          subList: List(),\n          categories: List(),\n        })) as IMap<IProductCategoryMenuHelper>;\n\n        return acc.update(id, (map: IMap<IProductCategoryMenuHelper>) => {\n          return (map || existing)\n            .update('subList', (list: List<string>) => list.push(sub))\n            .update('categories', (list: List<IMap<ProductCategory>>) => list.concat(cats))\n        });\n      }, OrderedMap<string, IMap<IProductCategoryMenuHelper>>());\n  },\n);\n\nexport const makeSelectProductTypeIdToProductCategoryReverseMap = () => createSelector(\n  makeSelectProductCategories(),\n  (productCategories: Map<string, IMap<ProductCategoryGroup>>) => {\n\n    const productTypeToProductCategoryReverseMap = productCategories.reduce((reverseMapAcc: Map<number, List<IMap<ProductCategoryGroup>>>, productCategoryGroup: IMap<ProductCategoryGroup>) => {\n      return reverseMapAcc.withMutations((reverseMapCtx) => {\n        productCategoryGroup.get('productTypes').forEach((productCategory) => {\n          const productCategoryGroupList: List<IMap<ProductCategoryGroup>> = reverseMapCtx.get(productCategory.get('id'), List<IMap<ProductCategoryGroup>>());\n          reverseMapCtx.set(productCategory.get('id'), productCategoryGroupList.push(productCategoryGroup));\n        });\n      });\n    }, Map<number, List<IMap<ProductCategoryGroup>>>());\n    return productTypeToProductCategoryReverseMap;\n  },\n);\n\nexport const makeSelectProductTypeIdToProductTypeMap = () => createSelector(\n  makeSelectProductCategories(),\n  (productCategories: Map<string, IMap<ProductCategoryGroup>>) => {\n    const productTypeToProductCategoryReverseMap = productCategories.reduce((productCategoryMap: Map<number, IMap<ProductCategory>>, productCategoryGroup: IMap<ProductCategoryGroup>) => {\n      return productCategoryMap.withMutations((productCategoryMapCtx) => {\n        productCategoryGroup.get('productTypes').forEach((productCategory) => {\n          productCategoryMapCtx.set(productCategory.get('id'), productCategory);\n        });\n      });\n    }, Map<number, IMap<ProductCategory>>());\n    return productTypeToProductCategoryReverseMap;\n  },\n);\n\nexport const makeSelectProductCategoryFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productCategoryFilters', new CategoryDisplayTypeListItem().toImmutable()),\n);\n\nexport const makeSelectFilteredProductCategories = () => createSelector(\n  makeSelectProductCategories(),\n  makeSelectProductCategoryFilters(),\n  (productCategories: Map<string, IMap<ProductCategoryGroup>>, productCategoryFilters: IMap<CategoryDisplayTypeListItem>) => {\n    const type = productCategoryFilters.get('value');\n    const id = productCategoryFilters.get('id');\n    return productCategories.valueSeq().filter((productCategoryGroup: IMap<ProductCategoryGroup>) => {\n      if (type == null) {\n        return true;\n      }\n      return type === CategoryDisplayType.DISPLAY_BY_CATEGORY ? productCategoryGroup.get('categoryType') === id : productCategoryGroup.get('divisionNumber') === id;\n    });\n  },\n);\n\nexport const makeMatchingProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('matchingProducts', Map<number, Map<string, IMap<MatchingProduct>>>()),\n);\n\nexport const makeLastMatchingProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('lastMatchingProducts', Map<number, IMap<MatchingProduct>>()),\n);\n\nexport const makeSelectMatchingProductPriceSummary = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('matchingProductPriceSummary')\n);\n\nexport const makeSelectMatchingProductForSpecificSeries = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  makeMatchingProducts(),\n  makeSelectSeries({seriesId: controlledSeriesId}),\n  makeSelectSeriesSpecificFilterAttributes({seriesId: controlledSeriesId}),\n  makeSelectLastMatchingProductForSeries({seriesId: controlledSeriesId}),\n  (\n    matchingProducts: Map<number, Map<string, IMap<MatchingProduct>>>,\n    series: IMap<Series>,\n    attributes: Map<string, IMap<Attribute>>,\n    fallbackMatchingProduct: IMap<MatchingProduct>,\n  ) => {\n\n    if (series == null) {\n      return Map();\n    }\n    const seriesId = series.get('id');\n\n    // const attributes = Series.getAttributesWithFilters(series, seriesFilters, true);\n    // state.setIn(['matchingProducts', seriesId, Attribute.getAttributesIdentifierString(attributes)]\n    const matchingProduct: IMap<MatchingProduct> = matchingProducts.getIn([seriesId, Attribute.getAttributesIdentifierString(attributes)]) || fallbackMatchingProduct;\n    return matchingProduct;\n    // return controlledSeriesId != null ? matchingProducts.get(controlledSeriesId, Map()) : matchingProducts.get(seriesId, Map())\n  },\n);\n\nexport const makeSelectDirectMatchingProductForSeries = (\n  {\n    series\n  }: {\n    series: IMap<Series>\n  }\n) => createSelector(\n  makeMatchingProducts(),\n  makeSelectSeriesFilterAttributes({seriesId: series.get('id')}),\n  makeSelectLastMatchingProductForDirectSeries({series}),\n  (\n    matchingProducts: Map<number, Map<string, IMap<MatchingProduct>>>,\n    attributes: Map<string, IMap<Attribute>>,\n    fallbackMatchingProduct: IMap<MatchingProduct>,\n  ) => {\n\n    if (series == null) {\n      return Map();\n    }\n    const seriesId = series.get('id');\n\n    // const attributes = Series.getAttributesWithFilters(series, seriesFilters, true);\n    // state.setIn(['matchingProducts', seriesId, Attribute.getAttributesIdentifierString(attributes)]\n    const matchingProduct: IMap<MatchingProduct> = matchingProducts.getIn([seriesId, Attribute.getAttributesIdentifierString(attributes)]) || fallbackMatchingProduct;\n    return matchingProduct;\n    // return controlledSeriesId != null ? matchingProducts.get(controlledSeriesId, Map()) : matchingProducts.get(seriesId, Map())\n  },\n);\n\nexport const makeSelectLastMatchingProductForDirectSeries = (\n  {\n    series\n  }: {\n    series: IMap<Series>\n  }\n) => createSelector(\n  makeLastMatchingProducts(),\n  (matchingProducts) => {\n\n    const blankMap = new MatchingProduct({}).toImmutable();\n    if (series == null) {\n      return blankMap;\n    }\n    const seriesId = series.get('id');\n\n    // const attributes = Series.getAttributesWithFilters(series, seriesFilters, true);\n    // state.setIn(['matchingProducts', seriesId, Attribute.getAttributesIdentifierString(attributes)]\n    const matchingProduct: IMap<MatchingProduct> = matchingProducts.get(seriesId) || blankMap;\n    return matchingProduct;\n    // return controlledSeriesId != null ? matchingProducts.get(controlledSeriesId, Map()) : matchingProducts.get(seriesId, Map())\n  },\n);\n\nexport const makeSelectLastMatchingProductForSeries = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  makeLastMatchingProducts(),\n  makeSelectSeries({seriesId: controlledSeriesId}),\n  (matchingProducts, series) => {\n\n    const blankMap = new MatchingProduct({}).toImmutable();\n    if (series == null) {\n      return blankMap;\n    }\n    const seriesId = series.get('id');\n\n    // const attributes = Series.getAttributesWithFilters(series, seriesFilters, true);\n    // state.setIn(['matchingProducts', seriesId, Attribute.getAttributesIdentifierString(attributes)]\n    const matchingProduct: IMap<MatchingProduct> = matchingProducts.get(seriesId) || blankMap;\n    return matchingProduct;\n    // return controlledSeriesId != null ? matchingProducts.get(controlledSeriesId, Map()) : matchingProducts.get(seriesId, Map())\n  },\n);\n\nexport const selectSeriess = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('series', Map()),\n);\n\nexport const makeSelectSeriesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesLoading')\n);\n\nexport const makeSelectLastFetchedSeriesIds = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('lastFetchedSeriesIds', OrderedSet<number>()),\n);\n\nexport const selectCategorySeries = () => createSelector(\n  selectSeriess(),\n  makeSelectProductCategoryId(),\n  (series: Map<number, IMap<Series>>, productCategoryId: number) => {\n    return series.filter((serie: IMap<Series>) => {\n      return serie.get('category') === Number(productCategoryId);\n    });\n  }\n);\n\n// used to keep track of the filters on the series level\n// for all series on product selection page\n// when user selects a filter on the side filter\nexport const selectSeriesFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesFilters', Map()),\n);\n\nexport const makeSelectCategorySpecificSeriesFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('categorySpecificSeriesFilters', Map()),\n);\n\n// used to keep track of the filters on the individual product level\n// used inside the product card option selection\nexport const selectProductFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productFilters', Map()),\n);\n\nexport const makeSelectSeriesSpecificFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesSpecificFilters', Map()),\n);\n\nexport const makeSelectSelectedSeriesSpecificFilters = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedSeriesId(),\n  (state: IMapNonRecursive<IProductReducerState>, selectedSeriesId) => state.getIn(['seriesSpecificFilters', selectedSeriesId], Map()),\n);\n\nexport const makeSelectSeriesSpecificInitSelections = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesSpecificInitSelections', Map()),\n);\n\nexport const makeSelectSelectedSeriesSpecificInitSelections = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedSeriesId(),\n  (state: IMapNonRecursive<IProductReducerState>, selectedSeriesId) => state.getIn(['seriesSpecificInitSelections', String(selectedSeriesId)]),\n);\n\nexport const makeSelectSelectedSeriesSpecificInitDisabledSelections = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedSeriesId(),\n  (state: IMapNonRecursive<IProductReducerState>, selectedSeriesId) => state.getIn(['seriesSpecificInitDisabledSelections', String(selectedSeriesId)]),\n);\n\nexport const makeSelectSelectedSeriesSpecificFiltersKeys = () => createSelector(\n  makeSelectSelectedSeriesSpecificFilters(),\n  (seriesSpecificFilters) => {\n    return seriesSpecificFilters.keySeq();\n  },\n);\n\nexport const makeSelectSelectedSeriesSpecificValuesArray = () => createSelector(\n  makeSelectSelectedSeriesSpecificFilters(),\n  (seriesSpecificFilters) => {\n    const filterArray = seriesSpecificFilters.reduce((acc, filterArray) => {\n      if (filterArray.size === 0) {\n        return acc;\n      }\n\n      return acc.push(...filterArray);\n    }, List());\n\n    // label\n    // value\n    // optionValueId\n    return filterArray;\n  },\n);\n\nexport const makeSelectSelectedSeriesId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('selectedSeriesId'),\n);\n\nexport const makeSelectSeries = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  selectSeriess(),\n  makeSelectSelectedSeriesId(),\n  (series: Map<number, IMap<Series>>, seriesId: number) => {\n    return controlledSeriesId != null ? series.get(controlledSeriesId) : series.get(seriesId)\n  },\n);\n\nexport const makeSelectSeriesAttributes = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  makeSelectSeries({seriesId: controlledSeriesId}),\n  makeSelectSelectedSeriesSpecificFilters(),\n  (series: IMap<Series>, seriesSpecificProductFilters: Map<string, Set<any>>) => {\n    return Series.getAttributesWithFilters(series, seriesSpecificProductFilters);\n  }\n);\n\nexport const makeSelectDirectSeriesAttributes = (series: IMap<Series>) => createSelector(\n  makeSelectSelectedSeriesSpecificFilters(),\n  (seriesSpecificProductFilters: Map<string, Set<any>>) => {\n    return Series.getAttributesWithFilters(series, seriesSpecificProductFilters);\n  }\n);\n\nexport const makeSelectSeriesFilterAttributes = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  makeSelectSeries({seriesId: controlledSeriesId}),\n  selectSeriesFilters(),\n  (series: IMap<Series>, seriesFilters: Map<string, Set<any>>) => {\n    return Series.getAttributesWithFilters(series, seriesFilters, true);\n  }\n);\n\nexport const makeSelectSeriesSpecificFilterAttributes = (\n  {\n    seriesId: controlledSeriesId,\n  }: {\n    seriesId?: number\n  } = {}\n) => createSelector(\n  makeSelectSeries({seriesId: controlledSeriesId}),\n  makeSelectSelectedSeriesSpecificFilters(),\n  (series: IMap<Series>, seriesSpecificFilters: Map<string, Set<any>>) => {\n    return Series.getAttributesWithFilters(series, seriesSpecificFilters, true);\n  }\n);\n\nexport const selectFilteredSeries = () => createSelector(\n  selectCategorySeries(),\n  selectSeriesFilters(),\n  selectSearchProductSelectionGroupForm(),\n  makeSelectLastFetchedSeriesIds(),\n  (series, filters, select, lastFetchedSeriesIds) => {\n    // console.error('filterSeries', { // tslint:disable-line\n    //   series,\n    //   filters,\n    //   select,\n    //   lastFetchedSeriesIds\n    // });\n    const nonEmptyFilters: Map<string, Set<any>> = filters.filter((filter: Set<any>, key: string) => {\n      return (key != 'manufacturer') && filter && !filter.isEmpty();\n    });\n    const filterKeys = nonEmptyFilters.keySeq().toSet();\n    const manufacturerFilters: Set<any> = filters.get('manufacturer', Set());\n    const manufacturerFiltersValues = manufacturerFilters.toList().reduce((acc, filter, index) => {\n      return acc.push(filter.get('value'));\n    }, List());\n\n    const searchData = select;\n    const sortBySelect = searchData.get('sortBySelect', '');\n    let descending: boolean = false;\n\n    const filterAndSortByLastFetchedId = lastFetchedSeriesIds ? lastFetchedSeriesIds.reduce((acc, lastFetchedSeriesId) => {\n      const seriesFetched = series.get(lastFetchedSeriesId);\n\n      return seriesFetched ? acc.push(seriesFetched) : acc;\n    }, List()) : List();\n\n    // console.error('selector', {\n    //   lastFetchedSeriesIds,\n    //   filteredByLastFetchedSeries: filteredByLastFetchedSeries,\n    //   filteredByLastFetchedSeriesCount: filteredByLastFetchedSeries.count(),\n    //   series,\n    //   seriesCount: series.count(),\n    // });\n\n    return filterAndSortByLastFetchedId.filter((seriesElement: IMap<Series>) => {\n      const seriesAttributes = seriesElement.get('attributes');\n      const seriesAttributeKeys = seriesAttributes.keySeq().toSetSeq();\n      const seriesHasAllFilterKeys = filterKeys.subtract(seriesAttributeKeys).count() === 0;\n      const seriesPassesAttributeFilter = seriesHasAllFilterKeys && seriesAttributes.reduce((passesFilter: boolean, attribute: any, attributeKey: string) => {\n        if (!passesFilter) {\n          return passesFilter;\n        }\n        const filterSelection = nonEmptyFilters.get(attributeKey, Set());\n        if (filterSelection == null) {\n          return passesFilter;\n        }\n        const multi = attribute.get('isOption');\n        const isAttribute = attribute.get('isAttribute');\n        if (filterSelection.isEmpty()) {\n          return passesFilter;\n        }\n\n        // old logic that was used when FE was generating filters from the series\n        // if (isAttribute) {\n        //   const filterSelectionValues = filterSelection.map((filter) => {\n        //     return filter.get('value');\n        //   });\n        //   console.log(filterSelectionValues)\n        //   console.log(attribute.getIn(['values', 0, 'value']))\n        //   if (!filterSelectionValues.has(attribute.getIn(['values', 0, 'value']))) {\n        //     return false;\n        //   }\n        // } else {\n        //   if (multi) {\n        //     const attributeValueSet = attribute.get('values').reduce((valueSet: Set<any>, value: any) => {\n        //       return valueSet.add(value.get('value'));\n        //     }, Set());\n\n        //     return filterSelection.reduce((hasAttribute: boolean, value: any) => {\n        //       return hasAttribute && attributeValueSet.has(value);\n        //     }, true);\n        //   } else {\n        //     return attribute.get('values').reduce((hasAttribute: boolean, value: any) => {\n        //       return hasAttribute || (filterSelection.has(value.get('value')));\n        //     }, false);\n        //   }\n        // }\n        return passesFilter;\n      }, true);\n      const brand = seriesElement.get('brand');\n      const seriesPassesManufacturerFilter = manufacturerFiltersValues.isEmpty() || manufacturerFiltersValues.includes(brand);\n      return seriesPassesAttributeFilter && seriesPassesManufacturerFilter;\n    });\n  },\n);\n\nexport interface IAttributeAndValueMap {\n  attribute: IMap<Attribute>;\n  values: Map<string, IMap<AttributeValue>>;\n}\n\nexport const selectFilteredSeriesFilterAttibutes = () => createSelector(\n  selectFilteredSeries(),\n  (series) => {\n    const filteredSeriesFilterAtributes = series.reduce((attributeMap: Map<string, IMap<IAttributeAndValueMap>>, _series: IMap<Series>) => {\n      const ret = attributeMap.withMutations((_attributeMap: Map<string, IMap<IAttributeAndValueMap>>) => {\n        const attributes: Map<string, IMap<Attribute>> = _series.get('attributes');\n        attributes.forEach((attribute: IMap<Attribute>, attributeKey: string) => {\n          const existingAttributeValueMap = _attributeMap.get(attributeKey, fromJS({}) as IMap<IAttributeAndValueMap>);\n          const updatedValues = existingAttributeValueMap.withMutations((_existingAttributeValueMap: IMap<IAttributeAndValueMap>) => {\n            _existingAttributeValueMap.set('attribute', attribute);\n            attribute.get('values').forEach((aValue: IMap<AttributeValue>) => {\n              _existingAttributeValueMap.setIn(['values', aValue.get('value')], aValue);\n            });\n          });\n          _attributeMap.set(attributeKey, updatedValues);\n        });\n      });\n      return ret;\n    }, Map<string, IMap<IAttributeAndValueMap>>());\n    return filteredSeriesFilterAtributes;\n  },\n);\n\nexport const selectSearchProductSelectionGroupForm = () => createSelector(\n  getFormValues(PRODUCT_SELECTION_GROUP_FORM),\n  (formValues?: Map<string, any>) => formValues || Map<string, any>(),\n);\n\nexport const selectSearchProductSelectionGroupFormCategorySelect = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('categorySearchType'),\n);\n\nexport const makeSelectProductCategorySelect = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('productCategorySelect'),\n);\n\nexport const selectSearchProductSelectionGroupFormCategorySearch = () => createSelector(\n  selectSearchProductSelectionGroupForm(),\n  (formValues: Map<string, any>) => formValues.get('categorySearch'),\n);\n\nexport const makeSelectSearchResults = () => createSelector(\n  selectReducerState(),\n  selectSearchProductSelectionGroupFormCategorySelect(),\n  (state: IMapNonRecursive<IProductReducerState>, categorySelect?: QuickSearchType) => {\n    // return state.getIn(['searchResults', categorySelect && categorySelect.value], List<any>());\n    return state.getIn(['searchResults', categorySelect], List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>());\n  },\n);\n\nexport const makeSelectSeriesFilterInput = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('seriesFilterInput') || '',\n);\n\nexport const makeSelectCheckProductsAndAttributesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('checkProductsAndAttributesLoading'),\n);\n\nexport const makeSelectIsLoadingQuickSearchResults = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isLoadingQuickSearchResults'),\n);\n\nexport const makeSelectSelectingCategory = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('selectingCategory'),\n);\n\nexport const makeSelectQuickSearchFirmLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('quickSearchFirmLoading'),\n);\n\nexport const makeSelectSaveFirmCategoryLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isSaveFirmCategoryLoading')\n);\n\nexport const makeSelectIsGettingBrandVariations = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isGettingBrandVariations')\n);\n\nexport const makeSelectBrandVariations = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('brandVariations')\n);\n\nexport const makeSelectIsUpdatingBrandVariation = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isUpdatingBrandVariation')\n);\n\nexport const makeSelectAiExclusion = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('aiExclusion')\n);\n\nexport const makeSelectIsGettingAiExclusion = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isGettingAiExclusion')\n);\n\nexport const makeSelectIsAddingAiExclusions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isAddingAiExclusion')\n);\n\nexport const makeSelectIsUpdatingAiExclusion = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isUpdatingAiExclusion')\n);\n\nexport const makeSelectIsDeletingAiExclusion = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProductReducerState>) => state.get('isDeletingAiExclusion')\n);\n\nexport const makeSelectSeriesSearchOrderBy = () => createSelector(\n  makeSelectSortSeriesBy(),\n  makeSelectIdentityObject(),\n  makeSelectUngatedCurrency(),\n  makeSelectLocationForSeriesSearchFilter(),\n  (sortType: SortSeriesBy, isLoggedinUser: any, ungatedCurrency: string, specOrOfficeLocation: any) => {\n    const countryId = specOrOfficeLocation?.getIn(['country', 'id']);\n    const currencyBySpecOrOfficeRegion = !isLoggedinUser ? ungatedCurrency : countryId === GEOLOCATION_ID.canada ? 'CAD' : 'USD';\n\n    const defaultOrderBy = {\n      'rank': -1,\n      'id': -1\n    }\n    const orderByMap = {\n      mostSpecified: {specRank: -1, id: -1},\n      mostRecent: {id: -1},\n      recommended: {rank: -1, specRank: -1, id: -1},\n      priceHighToLow: {\n        minPrice: {\n          regionId: 'default',\n          currency: currencyBySpecOrOfficeRegion,\n          order: -1\n        },\n        id: -1\n      },\n      priceLowToHigh: {\n        minPrice: {\n          regionId: 'default',\n          currency: currencyBySpecOrOfficeRegion,\n          order: 1\n        },\n        id: -1\n      },\n    }\n\n    const orderBy = orderByMap[sortType] || defaultOrderBy;\n    return orderBy;\n  }\n);","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","import unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n  var it;\n\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n\n      var F = function F() {};\n\n      return {\n        s: F,\n        n: function n() {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function e(_e) {\n          throw _e;\n        },\n        f: F\n      };\n    }\n\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var normalCompletion = true,\n      didErr = false,\n      err;\n  return {\n    s: function s() {\n      it = o[Symbol.iterator]();\n    },\n    n: function n() {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function e(_e2) {\n      didErr = true;\n      err = _e2;\n    },\n    f: function f() {\n      try {\n        if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}","import {\n  Map,\n  Set,\n  OrderedSet,\n  List,\n} from 'immutable';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  createSelector,\n} from 'reselect';\nimport { IPimReducerState } from './reducer';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { IMPORT_PRODUCTS_FILE_FORM } from '../../components/ProductAndPackageList/Component';\nimport PimIntegrationMap, { IIntegrationSourceProduct } from '../../models/PimIntegrationMap';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added AccountModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\n// export const importFileFormSelector = (path: any[]) => createSelector(\n//   (state: any) => state.getIn(['form', IMPORT_PRODUCTS_FILE_FORM, 'values']),\n//   state => path.length ? state?.getIn([...path]) : List()\n// );\n\nexport const makeSelectImportProductFile = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state\n);\n\nexport const makeSelectSelectedFirmSeriesId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedFirmSeriesId'),\n);\n\nexport const makeSelectSelectedFirmSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedFirmSeries'),\n);\n\nexport const makeSelectFirmSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmSeries'),\n);\n\nexport const makeSelectFirmSeriesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmSeriesCount'),\n);\n\nexport const makeSelectFirmSeriesHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmSeriesHasNextPage'),\n);\n\nexport const makeSelectSearchingFirmSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('searchingFirmSeries'),\n);\n\nexport const makeSelectSeletedFirmSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['selectedFirmSeries']),\n);\n\nexport const makeSelectSelectedAttributeId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedAttributeId'),\n);\n\nexport const makeSelectPimAttributeOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimAttributeOptions'),\n);\n\nexport const makeSelectPimAttributeOptionsBySelectedAttributeId = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedAttributeId(),\n  (state: IMapNonRecursive<IPimReducerState>, selectedAttributeId) => state.getIn(['pimAttributeOptions', selectedAttributeId], List()),\n);\n\nexport const makeSelectIsFetchingAttributeOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingPimAttributeOptions'),\n);\n\nexport const makeSelectPimAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimAttributes'),\n);\n\nexport const makeSelectSearchedPimProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProducts'),\n);\n\nexport const makeSelectSearchedPimProductsPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProductsPackages'),\n);\n\nexport const makeSelectSearchingPimProductsPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('searchingPimProductsPackages')\n);\n\nexport const makeSelectParentSharedFirmProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('parentSharedFirmProducts'),\n);\n\nexport const makeSelectSearchingParentSharedFirmProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('searchingParentSharedFirmProducts')\n);\n\nexport const makeSelectSearchedPimProductsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProductsList'),\n);\n\nexport const makeSelectPimProductsListHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProductsListHasNextPage'),\n);\n\nexport const makeSelectPimProductsListSearchFilters = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProductsListSearchFilters'),\n);\n\nexport const makeSelectPimProductsListSearchOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimProductsListSearchOptions'),\n);\n\nexport const makeSelectSearchedFirmProductsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductsList'),\n);\n\n/**\n * The firm product list with any just-created, not-yet-indexed products\n * prepended — the read-your-writes window after a create.\n *\n * SEPARATE from makeSelectSearchedFirmProductsList on purpose: the canonical\n * list stays exactly what the search returned, so nothing that reasons about\n * the index sees a row the index does not have. Only the surface that renders\n * the list opts into this, and only on the first page.\n *\n * The reducer removes a pending entry as soon as a search result contains it,\n * so a product cannot appear twice.\n */\nexport const makeSelectSearchedFirmProductsListWithPending = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => {\n    const list = state.get('firmProductsList');\n    const pending = state.get('pendingCreatedFirmProducts');\n    if (!pending || pending.size === 0) {\n      return list;\n    }\n    const present = list?.map((p: any) => p.get('id'))?.toSet();\n    const missing = pending\n      .filter((entry: any) => !present?.has(entry.getIn(['firmProduct', 'id'])))\n      .map((entry: any) => entry.get('firmProduct'));\n    return missing.size ? missing.concat(list) : list;\n  },\n);\n\nexport const makeSelectPendingCreatedFirmProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) =>\n    state.get('pendingCreatedFirmProducts'),\n);\n\nexport const makeSelectPendingCreatedFirmProductsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) =>\n    state.get('pendingCreatedFirmProducts')?.size ?? 0,\n);\n\nexport const makeSelectSearchedFirmProductsListCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductsListCount'),\n);\n\nexport const makeSelectSearchedFirmProductsListHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductsListHasNextPage'),\n);\n\nexport const makeSelectQuickSearchedFirmProductsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('quickSearchFirmProductsList').map(product => product.get('firmProduct')),\n);\n\nexport const makeSelectSharedProductsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('sharedProductsList'),\n);\n\nexport const makeSelectIsFetchingSharedProductsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingSharedProducts'),\n);\n\nexport const makeSelectIsFetchingFirmProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingFirmProducts'),\n);\n\n// temp FE solution for BE issue\nexport const makeSelectIsInactiveProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isInactiveProduct'),\n);\n\nexport const makeSelectSearchedSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('searchedSeries', List([]))\n);\n\nexport const makeSelectSeriesHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('seriesHasNextPage')\n);\n\nexport const makeSelectSearchingSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('searchingSeries')\n);\n\nexport const makeSelectSelectedPimSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedPimSeries'),\n);\n\nexport const makeSelectSelectedPimProductId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedPimProductId')\n);\n\nexport const makeSelectSelectedPimProduct = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedPimProductId(),\n  (state: IMapNonRecursive<IPimReducerState>, selectedPimProductId: number) => state.get('pimProductsList').find(product => product.get('id') === selectedPimProductId) || Map()\n);\n\nexport const makeSelectIsLoadingQuickSearchFirmProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isLoadingQuickSearchFirmProducts')\n);\n\nexport const makeSelectMandatoryRecommendedAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('mandatoryRecommendedAttributes')\n);\n\nexport const makeSelectMandatoryAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['mandatoryRecommendedAttributes', 'required'])\n);\n\nexport const makeSelectRecommendedAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['mandatoryRecommendedAttributes', 'recommended'])\n);\n\nexport const makeSelectCombinedMandatoryRecommendedAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['mandatoryRecommendedAttributes', 'recommended'])?.merge(state.getIn(['mandatoryRecommendedAttributes', 'required']) ?? List())\n);\n\nexport const makeSelectIsPublishing = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isPublishing')\n);\n\nexport const makeSelectProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('product')\n);\n\nexport const makeSelectIsFetchingProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingProduct')\n);\n\nexport const makeSelectQuickSearchPimProductsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('quickSearchPimProductsLoading')\n);\n\nexport const makeSelectIsAddingPimSeriesDraft = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isAddingDraft')\n);\n\nexport const makeSelectPureAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributes')\n);\n\nexport const makeSelectPureAttributesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributesCount')\n);\n\nexport const makeSelectIsSearchingPureAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPureAttributes')\n);\n\nexport const makeSelectPureAttributesSecondary = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributesSecondary')\n);\n\nexport const makeSelectIsSearchingPureAttributesSecondary = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPureAttributesSecondary')\n);\n\nexport const makeSelectPureAttributeOptionsSecondary = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributeOptionsSecondary')\n);\n\nexport const makeSelectIsSearchingPureAttributeOptionsSecondary = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPureAttributeOptionsSecondary')\n);\n\nexport const makeSelectSelectedPureAttribute = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedPureAttribute')\n);\n\nexport const makeSelectFirstPureAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['pureAttributes', 0], Map())\n);\n\nexport const makeSelectSelectedPureAttributeOption = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('selectedPureAttributeOption')\n);\n\nexport const makeSelectPureAttributeOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributeOptions')\n);\n\nexport const makeSelectPureAttributeOptionsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pureAttributeOptionsCount')\n);\n\nexport const makeSelectIsSearchingPureAttributeOptions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPureAttributeOptions')\n);\n\n\nexport const makeSelectMatchingProductChecking = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('matchingProductChecking')\n);\n\nexport const makeSelectIsProductConfigurable = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isProductConfigurable')\n);\n\nexport const makeSelectIsProductConfigurableChecking = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isProductConfigurableChecking')\n);\n\nexport const makeSelectPimMatchingProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimMatchingProduct')\n);\n\nexport const makeSelectIsCreatingAttribute = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isCreatingAttribute')\n);\n\nexport const makeSelectPimMatchingAttributes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimMatchingAttributes')\n);\n\nexport const makeSelectIsGettingSeriesDuplicateProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isGettingSeriesDuplicateProducts')\n);\n\nexport const makeSelectSeriesDuplicateProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['configuratbleProductsCheck', 'seriesDuplicateProducts'])\n);\n\nexport const makeSelectHasUnconfigurableProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.getIn(['configuratbleProductsCheck', 'hasUnconfigurableProducts'])\n);\n\nexport const makeSelectIsSearchPimCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPimCategories')\n);\n\nexport const makeSelectPimCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimCategories')\n);\n\nexport const makeSelectFirmExportFieldsConfig = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmExportFieldsConfig')\n);\n\nexport const makeSelectIsExportingProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isExportingProducts')\n);\n\nexport const makeSelectIsImportingProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isImportingProducts')\n);\n\nexport const makeSelectImportProductsProgress = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('importProductsProgress')\n);\n\nexport const makeSelectIsDownloadingTemplate = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isDownloadingTemplate')\n);\n\nexport const makeSelectIsDownloadTemplateSuccess = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isDownloadTemplateSuccess')\n);\n\nexport const makeSelectPrimaryMergeProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('primaryMergeProduct')\n);\n\nexport const makeSelectIsMergingProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isMergingProducts')\n);\n\nexport const makeSelectPimIntegrationSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimIntegrationSeries')\n);\n\nexport const makeSelectIsSearchingPimIntegrationSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isSearchingPimIntegrationSeries')\n);\n\nexport const makeSelectPimIntegrationMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('pimIntegrationMap')\n);\n\n// the products of the mapped series, the sources of the map rows refer to them by id\nexport const makeSelectPimIntegrationSourceProducts = () => createSelector(\n  makeSelectPimIntegrationMap(),\n  (integrationMap: IMap<PimIntegrationMap>) => (integrationMap && integrationMap.get('sourceProducts')) || List<IMap<IIntegrationSourceProduct>>()\n);\n\nexport const makeSelectIsMappingPimIntegration = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isMappingPimIntegration')\n);\n\nexport const makeSelectIsFetchingFirmProduct = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingFirmProduct')\n);\n\nexport const makeSelectIsFetchingPackage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingPackage')\n);\n\nexport const makeSelectFirmProductManufacturers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductManufacturers')\n);\n\nexport const makeSelectFirmProductCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductCategories')\n);\n\nexport const makeSelectIsFetchingFirmProductCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('isFetchingFirmProductCategories')\n);\n\nexport const makeSelectFirmProductCustomDataList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('firmProductCustomDataList')\n);\n\nexport const makeSelectBrandsToHidePrice = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPimReducerState>) => state.get('brandsToHidePrice')\n);\n\nexport default {\n  selectReducerState,\n};\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport {\n  FormControl,\n  FormControlLabel,\n  FormHelperText,\n} from '@material-ui/core';\n\nimport Checkbox, { CheckboxProps } from '@material-ui/core/Checkbox';\n\nimport {\n  isCollection,\n  List,\n  is,\n} from 'immutable';\n\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\n\nexport interface IFieldCheckboxComponentProps extends CheckboxProps {\n  variant?: 'single' | 'multi';\n  formControlProps?: object;\n  formControlLabelProps?: object;\n  checkedValue?: any; // value to insert into target array (use name)\n  uncheckedValue?: any;\n  inputProps?: object;\n  label?: any;\n  require?: boolean;\n  labelProps?: object;\n  helperText?: boolean;\n}\n\ninterface IFieldCheckboxProps extends IFieldCheckboxComponentProps {\n\n}\n\nexport type FieldCheckboxProps = IFieldCheckboxProps & WrappedFieldProps;\n\nconst handleMultiChange = (value, collection) => (onChange) => (evt, checked) => {\n  onChange(checked ? (!collection.includes(value) && collection.push(value) || collection) : collection.filter((element) => !is(element, value)), evt, checked);\n};\n\nconst handleMultiBlur = (value, collection) => (onBlur) => (evt) => {\n  // const checked = evt.target.checked;\n  // onBlur(checked ? (!collection.includes(value) && collection.push(value) || collection) : collection.filter((element) => !is(element, value)), evt);\n};\n\nconst handleChange = (checkedValue, uncheckedValue) => (onChange) => (evt, checked) => {\n  onChange(checked ? checkedValue : uncheckedValue, evt, checked);\n};\n\nconst handleBlur = (checkedValue, uncheckedValue) => (onBlur) => (evt) => {\n  // const checked = evt.target.checked;\n  // onBlur(checked ? (!collection.includes(value) && collection.push(value) || collection) : collection.filter((element) => !is(element, value)), evt);\n};\n\nconst FieldCheckbox: React.FC<FieldCheckboxProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched,\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    require = false,\n    inputProps = {},\n    formControlProps = {},\n    formControlLabelProps = {},\n    checkedValue = true,\n    uncheckedValue = false,\n    variant = 'multi',\n    helperText = true,\n    ...rest\n  } = props;\n\n  const isMulti = variant === 'multi';\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n\n\n  if (isMulti) {\n    if (!isCollection(customOverrides.value)) {\n      customOverrides.value = List();\n    } else if (!List.isList(customOverrides.value)) {\n      customOverrides.value = customOverrides.value.toList();\n    }\n    if (customOverrides.onChange != null) {\n      customOverrides.onChange = handleMultiChange(checkedValue, customOverrides.value)(customOverrides.onChange);\n    }\n    if (customOverrides.onBlur != null) {\n      customOverrides.onBlur = handleMultiBlur(checkedValue, customOverrides.value)(customOverrides.onBlur);\n    }\n    customOverrides.checked = customOverrides.value.includes(checkedValue);\n  } else {\n\n    if (customOverrides.onChange != null) {\n      customOverrides.onChange = handleChange(checkedValue, uncheckedValue)(customOverrides.onChange);\n    }\n    if (customOverrides.onBlur != null) {\n      customOverrides.onBlur = handleBlur(checkedValue, uncheckedValue)(customOverrides.onBlur);\n    }\n    customOverrides.checked = customOverrides.value === checkedValue;\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <FormControlLabel\n        label={label}\n        control={\n          <Checkbox\n            {...customOverrides}\n            {...rest}\n            value={`${checkedValue}`}\n          />\n        }\n        {...formControlLabelProps}\n      />\n      {helperText && <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nexport default FieldCheckbox;\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IQuoteState,\n} from './reducer';\nimport { Quote, ShopDrawingHistory, ListItem } from '../../models';\nimport { CREATE_NEW_QUOTE_FROM_SPEC_PATH, QUOTE_PRINT_FORMAT } from '../../constants';\nimport { makeSelectSelectedSpecId } from '../SpecModule/selectors';\nimport { makeSelectLocation } from '../RouterModule/selectors';\nimport { makeSelectUserFirmId, makeSelectUserHasQuoteConnectAcl, makeSelectIsRestrictedOutsideSalesRep } from '../AtsModule/selectors';\nimport { getAppliableQuotePhases } from '../../containers/QuoteListPage/QuoteList/utils';\n// import {\n//   Settings,\n// } from '../../models';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\nexport const selectFormValues = (formName: string, path?: Array<string | number>) => createSelector(\n  (state) => state,\n  (state: any) => (path ? state.getIn(['form', formName, 'values', ...path]) : state.getIn(['form', formName, 'values'])) || Map({})\n);\nexport const selectForm = (formName: string) => createSelector(\n  (state) => state,\n  (state: any) => state.getIn(['form', formName]) || Map({})\n);\nexport const selectReduxFormState = () => createSelector(\n  (state) => state,\n  (state: any) => state.getIn(['form', 'quote', 'values']) || Map({})\n);\nexport const selectSpecToQuoteFormState = () => createSelector(\n  (state) => state,\n  (state: any) => state.getIn(['form', 'SpecToQuoteForm', 'values']) || Map({})\n);\nexport const makeSelectReduxFormSyncErrors = () => createSelector(\n  (state) => state,\n  (state: any) => state.getIn(['form', 'quote', 'syncErrors'])\n);\nexport const makeSelectProductMedia = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('productMedia'),\n);\nexport const makeSelectQuotes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quotes') || Map<number, IMap<Quote>>(),\n);\nexport const makeSelectQuoteList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quoteList') || List<IMap<Quote>>(),\n);\nexport const makeSelectQuotesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quotesLoading'),\n);\nexport const makeSelectQuotesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('count'),\n);\n\nexport const makeSelectQuotesHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('hasNextPage'),\n);\n\nexport const makeSelectQuotePhases = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quotePhases')\n);\n\nexport const makeSelectAppliableQuotePhases = () => createSelector(\n  makeSelectQuotePhases(),\n  makeSelectIsRestrictedOutsideSalesRep(),\n  (quotePhases: List<IMap<ListItem>>, isRestrictedOutsideSalesRep: boolean) => getAppliableQuotePhases({ isRestrictedOutsideSalesRep, quotePhases })\n);\n\nexport const makeSelectSelectedQuote = () => createSelector(\n  makeSelectQuotes(),\n  makeSelectSelectedQuoteId(),\n  (quotes: Map<number, IMap<Quote>>, selectedQuoteId: string) => quotes.get(Number(selectedQuoteId))\n);\n\nexport const makeSelectSelectedQuoteId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('selectedQuoteId'),\n);\n\nexport const makeSelectQuote = (quoteId: string) => createSelector(\n  makeSelectQuotes(),\n  (quotes: Map<number, IMap<any>>) => quotes.get(Number(quoteId))\n);\nexport const makeSelectSection = (sectionId: number) => createSelector(\n  selectReduxFormState(),\n  (form: any) => form.getIn(['sections', sectionId])\n);\nexport const makeSelectQuoteFormProps = (path: any[]) => createSelector(\n  selectReduxFormState(),\n  (form: any) => form && form.getIn(path)\n);\nexport const makeSelectSpecToQuoteFormProps = (path: any[]) => createSelector(\n  selectSpecToQuoteFormState(),\n  (form: any) => form && form.getIn(path)\n);\nexport const makeSelectQuoteProps = (path: any[]) => createSelector(\n  makeSelectQuotes(),\n  (quotes: any) => quotes && quotes.getIn(path)\n);\nexport const makeSelectSections = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => form.getIn(['sections']) || List()\n);\nexport const makeSelectSectionsForActionButtons = () => createSelector(\n  makeSelectSections(),\n  (sections: any) => {\n    return sections.map((section) => {\n      return section.filter((value, key) => {\n        return key === 'sectionTitle' || key === 'sectionTemplate';\n      });\n    });\n  }\n);\nexport const makeSelectFormSectionsSize = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => Number(form.getIn(['sections'], List([]))?.size)\n);\n\nexport const makeSelectSpecToQuoteSectionsSize = () => createSelector(\n  selectSpecToQuoteFormState(),\n  (form: any) => Number(form.getIn(['sections'], List([]))?.size)\n);\n\nexport const makeSelectProductsSize = (sectionIndex: number) => createSelector(\n  selectReduxFormState(),\n  (form: any) => Number(form.getIn(['sections', sectionIndex, 'products'], List([]))?.size)\n);\n\n\nexport const makeSelectQuoteForm = () => createSelector(\n  selectReduxFormState(),\n  (quoteForm: Map<string, IMap<any>>) => {\n    return quoteForm.get && quoteForm.get('quote') || null;\n  }\n);\n\nexport const makeSelectQuotePreview = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quotePreview'),\n);\n\nexport const makeSelectRevisions = (parentQuoteId: number) => createSelector(\n  selectReducerState(),\n  (state: IMap<IQuoteState>) => state.getIn(['revisions', parentQuoteId])\n);\n\nexport const makeSelectRevisionState = () => createSelector(\n  selectReducerState(),\n  (state: IMap<IQuoteState>) => state.get('revisionState')\n);\n\nexport const makeSelectPrintQuoteMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('printQuoteMap') || Map<number, QUOTE_PRINT_FORMAT[]>(),\n);\n\nexport const makeSelectPrintQuoteFiles = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('printQuoteFiles') || Map<number, QUOTE_PRINT_FORMAT[]>(),\n);\n\nexport const makeSelectSubmittingQuote = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('submittingQuote')\n);\n\nexport const makeSelectSpecToQuoteLinkedListBySelectedSpecId = () => createSelector(\n  selectReducerState(),\n  makeSelectSelectedSpecId(),\n  (state: IMapNonRecursive<IQuoteState>, specId) => state.getIn(['specToQuoteLinkedList', specId])\n);\n\nexport const makeSelectSpecToQuoteLinkedListBySpecId = (specId: number) => createSelector(\n  selectReducerState(),\n  // makeSelectSelectedSpecId(),\n  (state: IMapNonRecursive<IQuoteState>) => state.getIn(['specToQuoteLinkedList', specId]) || Map()\n);\n\nexport const makeSelectReportQuoteStatus = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('reportQuote')\n);\n\nexport const makeSelectIsCreatingSalesOrder = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('isCreatingSalesOrder')\n);\n\nexport const makeSelectCreateQuoteWithSpecToQuote = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.getIn(['createQuoteWithSpecToQuote', 'isLoading'])\n);\nexport const makeSelectIsLoadingSpecToQuoteLinkedList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('loadingSpecToQuoteLinkedList')\n);\n\nexport const makeSelectIsGettingSpecToQuoteDraft = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('isGettingSpecToQuoteDraft')\n);\n\nexport const makeSelectSpecToQuoteInitialValues = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('specToQuoteInitialValues')\n);\nexport const makeSelectSpecToQuoteDraft = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('specToQuoteDraft')\n);\nexport const makeSelectQuoteBilling = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('quoteBilling')\n);\nexport const makeSelectIsDownloadingQuoteBilling = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('isDownloadingQuoteBilling')\n);\nexport const makeSelectIsSpecToQuote = () => createSelector(\n  selectReducerState(),\n  makeSelectQuoteFormProps(['createdFromSpecId']),\n  makeSelectLocation(),\n  (state: IMapNonRecursive<IQuoteState>, specId, location) =>\n    location.get('pathname').includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH) ||\n    !state.get('specToQuoteDraft').isEmpty() ||\n    Boolean(state.getIn(['specToQuoteLinkedList', specId]))\n);\nexport const makeSelectIsLoadingQuotes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => Boolean(state.get('loadingQuotes').size)\n);\nexport const makeSelectsSpecProductsRecommendations = (specId) => createSelector(\n  makeSelectSpecToQuoteLinkedListBySpecId(specId),\n  (specToQuoteLinkedList) => {\n    return specToQuoteLinkedList.map((specToQuote) => specToQuote.get('recommendations'));\n  }\n);\nexport const makeSelectRecommendations = (specId, specProductId) => createSelector(\n  makeSelectSpecToQuoteLinkedListBySpecId(specId),\n  (specToQuoteLinkedList) => {\n    return specToQuoteLinkedList.getIn([String(specProductId), 'recommendations']);\n  }\n);\nexport const makeSelectUniqueRecommendations = (specId, specProductId) => createSelector(\n  makeSelectSpecToQuoteLinkedListBySpecId(specId),\n  (specToQuoteLinkedList) => {\n    const recommendations = specToQuoteLinkedList.getIn([String(specProductId), 'recommendations']);\n    let productIdMap = Map({});\n    const filteredRecommendations = recommendations?.filter((recommendation) => {\n      const alreadyHave = productIdMap.get(recommendation.getIn(['quoteProduct', 'firmProductId']) || recommendation.getIn(['quoteProduct', 'id']));\n      if (alreadyHave) {\n        return false;\n      } else {\n        productIdMap = productIdMap.set(recommendation.getIn(['quoteProduct', 'firmProductId']) || recommendation.getIn(['quoteProduct', 'id']), true);\n        return true;\n      }\n    });\n    // add in custom key recommendedIndex to differenciate recommended options for normal searched options in autocomplete\n    return filteredRecommendations?.map((recommendation, index) => recommendation.setIn(['quoteProduct', 'recommendedIndex'], index));\n  }\n);\nexport const makeSelectSpecProduct = (specId, specProductId, sectionIndex?, productIndex?) => createSelector(\n  makeSelectSpecToQuoteLinkedListBySpecId(specId),\n  makeSelectQuoteFormProps(['sections', sectionIndex, 'products', productIndex, 'specToQuoteValues', 'specProduct']),\n  (specToQuoteLinkedList: IMap<any>, specProduct: IMap<any>) => {\n    // when creating new s2q, specToQuoteValues would have specProduct when initialing the form\n    // after saving new s2q, specProduct will be reomved from specToQuoteValues due to the object size limit\n    // so now we will get specProduct from specToQuoteLinkedList\n    return (!specToQuoteLinkedList || specToQuoteLinkedList && !specToQuoteLinkedList.isEmpty()) ? specToQuoteLinkedList.getIn([String(specProductId), 'specProduct']) : specProduct || Map();\n  }\n);\nexport const makeSelectSpecProductsFromLinkedList = (specId) => createSelector(\n  makeSelectSpecToQuoteLinkedListBySpecId(specId),\n  (specToQuoteLinkedList) => {\n    return specToQuoteLinkedList.map((specToQuote) => specToQuote.get('specProduct'));\n  }\n);\nexport const makeSelectBidInvitationData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteState>) => state.get('bidInvitationData')\n);\n\nexport const makeSelectLinkBidResponseQuote = () => createSelector(\n  selectReducerState(),\n  (state: any) => state.get('linkBidInvitationQuote')\n);\n\nexport const makeSelectQuoteTemplate = () => createSelector(\n  makeSelectSections(),\n  (sections: List<IMap<any>>) => sections.getIn([0, 'sectionTemplate']) || Map()\n);\n\nexport const makeSelectProductBySectionIdAndProductId = (sectionId: number, productId: number) => createSelector(\n  makeSelectSections(),\n  (sections: List<IMap<any>>) => sections.getIn([sectionId, 'products', productId]) || Map()\n);\n\nexport const makeSelectAllIsRequestingProduct = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => {\n    const sections = form.getIn(['sections']);\n    const allIsChecked = sections?.every((section: IMap<any>) => {\n      const products = section.get('products');\n      return products?.every((product: IMap<any>) => !product || product.get('isRequestingProduct') || (product.get('productIndex') && product.get('specProductId'))) ?? true;\n    }) ?? true;\n    return allIsChecked;\n  },\n);\n\nexport const makeSelectHasIsRequestingProduct = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => {\n    const sections = form.getIn(['sections']);\n    const hasIsChecked = sections?.some((section: IMap<any>) => {\n      const products = section.get('products');\n      return products?.some((product: IMap<any>) => product && product.get('isRequestingProduct')) ?? false;\n    }) ?? false;\n    return hasIsChecked;\n  },\n);\n\nexport const makeSelectIsSelectedProductCount = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => {\n    const sections = form.getIn(['sections']);\n    const count = sections?.reduce((_count, section: IMap<any>) => {\n      const products = section.get('products');\n      if (products) {\n        return _count + products.reduce((_productCount, product: IMap<any>) => {\n          return product && product.get('isRequestingProduct') ? _productCount + 1 : _productCount;\n        }, 0);\n      } else {\n        return _count;\n      }\n    }, 0);\n    return count || 0;\n  },\n);\n\nexport const makeSelectIsSelectedValidProductCount = () => createSelector(\n  selectReduxFormState(),\n  (form: any) => {\n    const sections = form.getIn(['sections']);\n    const count = sections?.reduce((_count, section: IMap<any>) => {\n      const products = section.get('products');\n      if (products) {\n        return _count + products.reduce((_productCount, product: IMap<any>) => {\n          return product && product.get('isRequestingProduct') && product.get('firmProductId') > 0 ? _productCount + 1 : _productCount;\n        }, 0);\n      } else {\n        return _count;\n      }\n    }, 0);\n    return count || 0;\n  },\n);\n\n// only Wolseley (2459107) is allowed to download XML ATM\nexport const makeSelectAllowXmlDownload = () => createSelector(\n  makeSelectUserFirmId(),\n  (firmId: number) => firmId === 2459107,\n);\n\n\nexport default {\n  selectReducerState,\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\n\nexports.default = _default;","// Bind Material UI TextField with Redux-Form Field\nimport * as React from 'react';\nimport {\n  TextField,\n  FormControl,\n  FormHelperText,\n} from '@material-ui/core';\nimport {\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\n\nexport interface IFieldTextFieldComponentProps {\n  formControlProps?: object;\n  inputProps?: {\n    [key: string]: any\n  };\n  label?: string;\n  placeholder?: string;\n  require?: boolean;\n  helperText?: boolean;\n}\n\ntype FieldTextFieldProps = IFieldTextFieldComponentProps & WrappedFieldProps;\n\nconst FieldTextField: React.FC<FieldTextFieldProps> = React.forwardRef((props, ref) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched, // eslint-disable-line no-unused-vars\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    placeholder,\n    require = false,\n    inputProps = {},\n    formControlProps = {},\n    helperText = true,\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    if (isFunction(inputProps[key])) {\n      return { ...O, [key]: callFunctions([(input as any)[key], inputProps[key]]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  // if value not exist, use defaultValue as fallback\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <TextField\n        {...(label && {label: require ? `${label} *` : label})}\n        error={Boolean(touched && (error || warning))}\n        {...customOverrides}\n        {...rest}\n        ref={ref}\n        {...((customOverrides.placeholder || placeholder) && {placeholder: require ? `${customOverrides.placeholder || placeholder} *` : customOverrides.placeholder || placeholder})}\n      />\n      {helperText && <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n});\n\nexport default FieldTextField;\n","import * as React from 'react';\nimport {\n  Grid,\n  withStyles,\n  Theme,\n  WithStyles,\n  CircularProgress,\n  DialogContent,\n  DialogContentText\n} from '@material-ui/core';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  ControlledModal,\n} from '..';\nimport { StyleRules } from '@material-ui/styles';\nimport { SetOverlayComponentPropsAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponentProp, makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\n\ninterface ILoadingModalComponentProps {\n}\n\ninterface ILoadingModalProps extends ILoadingModalComponentProps {\n  theme: Theme;\n  overlayProps: { [key: string]: any };\n  open: boolean;\n  clearProps: () => void;\n}\n\ntype LoadingModalProps= ILoadingModalProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nexport const LOADING_MODAL_ID = 'LOADING_MODAL';\n\nconst LoadingModal: React.FC<LoadingModalProps> = (props) =>  {\n  const { overlayProps: { customMessage, action, actionOnItem, onClose }, clearProps, open, t } = props;\n  const message = customMessage ?? [action ? action : t('generalLoading.shortLoading'), actionOnItem].filter(str => str).join(' ').concat('...');\n\n  React.useEffect(() => {\n    if (!open) {\n      setTimeout(clearProps, 1000);\n    }\n  }, [open]);\n\n  return (\n    <ControlledModal\n      localKey={LOADING_MODAL_ID}\n      maxWidth='sm'\n      handleClose={onClose}\n    >\n      <DialogContent>\n        <Grid\n          container={true}\n          direction='column'\n          justify='center'\n          alignItems='center'\n        >\n          <CircularProgress />\n          <DialogContentText id='alert-dialog-description' variant='h6'>\n            {message}\n          </DialogContentText>\n        </Grid>\n      </DialogContent>\n    </ControlledModal>\n  );\n};\n\nfunction mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n    clearProps: () => {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: LOADING_MODAL_ID,\n        props: {}\n      }));\n    }\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  overlayProps: makeSelectOverlayComponentProp(LOADING_MODAL_ID),\n  open: makeSelectOverlayComponent(LOADING_MODAL_ID),\n});\n\nexport default compose<React.ComponentClass<ILoadingModalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(LoadingModal);","import { TASK_CANCEL, TERMINATE, SAGA_LOCATION, SAGA_ACTION, IO, SELF_CANCELLATION } from '@redux-saga/symbols';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { array, notUndef, pattern, multicast, channel, undef, effect, task, func, buffer, string, object } from '@redux-saga/is';\nimport delayP from '@redux-saga/delay-p';\n\nvar konst = function konst(v) {\n  return function () {\n    return v;\n  };\n};\nvar kTrue =\n/*#__PURE__*/\nkonst(true);\n\nvar noop = function noop() {};\n\nif (process.env.NODE_ENV !== 'production' && typeof Proxy !== 'undefined') {\n  noop =\n  /*#__PURE__*/\n  new Proxy(noop, {\n    set: function set() {\n      throw internalErr('There was an attempt to assign a property to internal `noop` function.');\n    }\n  });\n}\nvar identity = function identity(v) {\n  return v;\n};\nvar hasSymbol = typeof Symbol === 'function';\nvar asyncIteratorSymbol = hasSymbol && Symbol.asyncIterator ? Symbol.asyncIterator : '@@asyncIterator';\nfunction check(value, predicate, error) {\n  if (!predicate(value)) {\n    throw new Error(error);\n  }\n}\nvar assignWithSymbols = function assignWithSymbols(target, source) {\n  _extends(target, source);\n\n  if (Object.getOwnPropertySymbols) {\n    Object.getOwnPropertySymbols(source).forEach(function (s) {\n      target[s] = source[s];\n    });\n  }\n};\nvar flatMap = function flatMap(mapper, arr) {\n  var _ref;\n\n  return (_ref = []).concat.apply(_ref, arr.map(mapper));\n};\nfunction remove(array, item) {\n  var index = array.indexOf(item);\n\n  if (index >= 0) {\n    array.splice(index, 1);\n  }\n}\nfunction once(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n\n    called = true;\n    fn();\n  };\n}\n\nvar kThrow = function kThrow(err) {\n  throw err;\n};\n\nvar kReturn = function kReturn(value) {\n  return {\n    value: value,\n    done: true\n  };\n};\n\nfunction makeIterator(next, thro, name) {\n  if (thro === void 0) {\n    thro = kThrow;\n  }\n\n  if (name === void 0) {\n    name = 'iterator';\n  }\n\n  var iterator = {\n    meta: {\n      name: name\n    },\n    next: next,\n    throw: thro,\n    return: kReturn,\n    isSagaIterator: true\n  };\n\n  if (typeof Symbol !== 'undefined') {\n    iterator[Symbol.iterator] = function () {\n      return iterator;\n    };\n  }\n\n  return iterator;\n}\nfunction logError(error, _ref2) {\n  var sagaStack = _ref2.sagaStack;\n\n  /*eslint-disable no-console*/\n  console.error(error);\n  console.error(sagaStack);\n}\nvar internalErr = function internalErr(err) {\n  return new Error(\"\\n  redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\\n  in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\\n  Error: \" + err + \"\\n\");\n};\nvar createSetContextWarning = function createSetContextWarning(ctx, props) {\n  return (ctx ? ctx + '.' : '') + \"setContext(props): argument \" + props + \" is not a plain object\";\n};\nvar FROZEN_ACTION_ERROR = \"You can't put (a.k.a. dispatch from saga) frozen actions.\\nWe have to define a special non-enumerable property on those actions for scheduling purposes.\\nOtherwise you wouldn't be able to communicate properly between sagas & other subscribers (action ordering would become far less predictable).\\nIf you are using redux and you care about this behaviour (frozen actions),\\nthen you might want to switch to freezing actions in a middleware rather than in action creator.\\nExample implementation:\\n\\nconst freezeActions = store => next => action => next(Object.freeze(action))\\n\"; // creates empty, but not-holey array\n\nvar createEmptyArray = function createEmptyArray(n) {\n  return Array.apply(null, new Array(n));\n};\nvar wrapSagaDispatch = function wrapSagaDispatch(dispatch) {\n  return function (action) {\n    if (process.env.NODE_ENV !== 'production') {\n      check(action, function (ac) {\n        return !Object.isFrozen(ac);\n      }, FROZEN_ACTION_ERROR);\n    }\n\n    return dispatch(Object.defineProperty(action, SAGA_ACTION, {\n      value: true\n    }));\n  };\n};\nvar shouldTerminate = function shouldTerminate(res) {\n  return res === TERMINATE;\n};\nvar shouldCancel = function shouldCancel(res) {\n  return res === TASK_CANCEL;\n};\nvar shouldComplete = function shouldComplete(res) {\n  return shouldTerminate(res) || shouldCancel(res);\n};\nfunction createAllStyleChildCallbacks(shape, parentCallback) {\n  var keys = Object.keys(shape);\n  var totalCount = keys.length;\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(totalCount, function (c) {\n      return c > 0;\n    }, 'createAllStyleChildCallbacks: get an empty array or object');\n  }\n\n  var completedCount = 0;\n  var completed;\n  var results = array(shape) ? createEmptyArray(totalCount) : {};\n  var childCallbacks = {};\n\n  function checkEnd() {\n    if (completedCount === totalCount) {\n      completed = true;\n      parentCallback(results);\n    }\n  }\n\n  keys.forEach(function (key) {\n    var chCbAtKey = function chCbAtKey(res, isErr) {\n      if (completed) {\n        return;\n      }\n\n      if (isErr || shouldComplete(res)) {\n        parentCallback.cancel();\n        parentCallback(res, isErr);\n      } else {\n        results[key] = res;\n        completedCount++;\n        checkEnd();\n      }\n    };\n\n    chCbAtKey.cancel = noop;\n    childCallbacks[key] = chCbAtKey;\n  });\n\n  parentCallback.cancel = function () {\n    if (!completed) {\n      completed = true;\n      keys.forEach(function (key) {\n        return childCallbacks[key].cancel();\n      });\n    }\n  };\n\n  return childCallbacks;\n}\nfunction getMetaInfo(fn) {\n  return {\n    name: fn.name || 'anonymous',\n    location: getLocation(fn)\n  };\n}\nfunction getLocation(instrumented) {\n  return instrumented[SAGA_LOCATION];\n}\n\nvar BUFFER_OVERFLOW = \"Channel's Buffer overflow!\";\nvar ON_OVERFLOW_THROW = 1;\nvar ON_OVERFLOW_DROP = 2;\nvar ON_OVERFLOW_SLIDE = 3;\nvar ON_OVERFLOW_EXPAND = 4;\nvar zeroBuffer = {\n  isEmpty: kTrue,\n  put: noop,\n  take: noop\n};\n\nfunction ringBuffer(limit, overflowAction) {\n  if (limit === void 0) {\n    limit = 10;\n  }\n\n  var arr = new Array(limit);\n  var length = 0;\n  var pushIndex = 0;\n  var popIndex = 0;\n\n  var push = function push(it) {\n    arr[pushIndex] = it;\n    pushIndex = (pushIndex + 1) % limit;\n    length++;\n  };\n\n  var take = function take() {\n    if (length != 0) {\n      var it = arr[popIndex];\n      arr[popIndex] = null;\n      length--;\n      popIndex = (popIndex + 1) % limit;\n      return it;\n    }\n  };\n\n  var flush = function flush() {\n    var items = [];\n\n    while (length) {\n      items.push(take());\n    }\n\n    return items;\n  };\n\n  return {\n    isEmpty: function isEmpty() {\n      return length == 0;\n    },\n    put: function put(it) {\n      if (length < limit) {\n        push(it);\n      } else {\n        var doubledLimit;\n\n        switch (overflowAction) {\n          case ON_OVERFLOW_THROW:\n            throw new Error(BUFFER_OVERFLOW);\n\n          case ON_OVERFLOW_SLIDE:\n            arr[pushIndex] = it;\n            pushIndex = (pushIndex + 1) % limit;\n            popIndex = pushIndex;\n            break;\n\n          case ON_OVERFLOW_EXPAND:\n            doubledLimit = 2 * limit;\n            arr = flush();\n            length = arr.length;\n            pushIndex = arr.length;\n            popIndex = 0;\n            arr.length = doubledLimit;\n            limit = doubledLimit;\n            push(it);\n            break;\n\n          default: // DROP\n\n        }\n      }\n    },\n    take: take,\n    flush: flush\n  };\n}\n\nvar none = function none() {\n  return zeroBuffer;\n};\nvar fixed = function fixed(limit) {\n  return ringBuffer(limit, ON_OVERFLOW_THROW);\n};\nvar dropping = function dropping(limit) {\n  return ringBuffer(limit, ON_OVERFLOW_DROP);\n};\nvar sliding = function sliding(limit) {\n  return ringBuffer(limit, ON_OVERFLOW_SLIDE);\n};\nvar expanding = function expanding(initialSize) {\n  return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);\n};\n\nvar buffers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  none: none,\n  fixed: fixed,\n  dropping: dropping,\n  sliding: sliding,\n  expanding: expanding\n});\n\nvar TAKE = 'TAKE';\nvar PUT = 'PUT';\nvar ALL = 'ALL';\nvar RACE = 'RACE';\nvar CALL = 'CALL';\nvar CPS = 'CPS';\nvar FORK = 'FORK';\nvar JOIN = 'JOIN';\nvar CANCEL = 'CANCEL';\nvar SELECT = 'SELECT';\nvar ACTION_CHANNEL = 'ACTION_CHANNEL';\nvar CANCELLED = 'CANCELLED';\nvar FLUSH = 'FLUSH';\nvar GET_CONTEXT = 'GET_CONTEXT';\nvar SET_CONTEXT = 'SET_CONTEXT';\n\nvar effectTypes = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  TAKE: TAKE,\n  PUT: PUT,\n  ALL: ALL,\n  RACE: RACE,\n  CALL: CALL,\n  CPS: CPS,\n  FORK: FORK,\n  JOIN: JOIN,\n  CANCEL: CANCEL,\n  SELECT: SELECT,\n  ACTION_CHANNEL: ACTION_CHANNEL,\n  CANCELLED: CANCELLED,\n  FLUSH: FLUSH,\n  GET_CONTEXT: GET_CONTEXT,\n  SET_CONTEXT: SET_CONTEXT\n});\n\nvar TEST_HINT = '\\n(HINT: if you are getting these errors in tests, consider using createMockTask from @redux-saga/testing-utils)';\n\nvar makeEffect = function makeEffect(type, payload) {\n  var _ref;\n\n  return _ref = {}, _ref[IO] = true, _ref.combinator = false, _ref.type = type, _ref.payload = payload, _ref;\n};\n\nvar isForkEffect = function isForkEffect(eff) {\n  return effect(eff) && eff.type === FORK;\n};\n\nvar detach = function detach(eff) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(eff, isForkEffect, 'detach(eff): argument must be a fork effect');\n  }\n\n  return makeEffect(FORK, _extends({}, eff.payload, {\n    detached: true\n  }));\n};\nfunction take(patternOrChannel, multicastPattern) {\n  if (patternOrChannel === void 0) {\n    patternOrChannel = '*';\n  }\n\n  if (process.env.NODE_ENV !== 'production' && arguments.length) {\n    check(arguments[0], notUndef, 'take(patternOrChannel): patternOrChannel is undefined');\n  }\n\n  if (pattern(patternOrChannel)) {\n    return makeEffect(TAKE, {\n      pattern: patternOrChannel\n    });\n  }\n\n  if (multicast(patternOrChannel) && notUndef(multicastPattern) && pattern(multicastPattern)) {\n    return makeEffect(TAKE, {\n      channel: patternOrChannel,\n      pattern: multicastPattern\n    });\n  }\n\n  if (channel(patternOrChannel)) {\n    return makeEffect(TAKE, {\n      channel: patternOrChannel\n    });\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    throw new Error(\"take(patternOrChannel): argument \" + patternOrChannel + \" is not valid channel or a valid pattern\");\n  }\n}\nvar takeMaybe = function takeMaybe() {\n  var eff = take.apply(void 0, arguments);\n  eff.payload.maybe = true;\n  return eff;\n};\nfunction put(channel$1, action) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (arguments.length > 1) {\n      check(channel$1, notUndef, 'put(channel, action): argument channel is undefined');\n      check(channel$1, channel, \"put(channel, action): argument \" + channel$1 + \" is not a valid channel\");\n      check(action, notUndef, 'put(channel, action): argument action is undefined');\n    } else {\n      check(channel$1, notUndef, 'put(action): argument action is undefined');\n    }\n  }\n\n  if (undef(action)) {\n    action = channel$1; // `undefined` instead of `null` to make default parameter work\n\n    channel$1 = undefined;\n  }\n\n  return makeEffect(PUT, {\n    channel: channel$1,\n    action: action\n  });\n}\nvar putResolve = function putResolve() {\n  var eff = put.apply(void 0, arguments);\n  eff.payload.resolve = true;\n  return eff;\n};\nfunction all(effects) {\n  var eff = makeEffect(ALL, effects);\n  eff.combinator = true;\n  return eff;\n}\nfunction race(effects) {\n  var eff = makeEffect(RACE, effects);\n  eff.combinator = true;\n  return eff;\n} // this match getFnCallDescriptor logic\n\nvar validateFnDescriptor = function validateFnDescriptor(effectName, fnDescriptor) {\n  check(fnDescriptor, notUndef, effectName + \": argument fn is undefined or null\");\n\n  if (func(fnDescriptor)) {\n    return;\n  }\n\n  var context = null;\n  var fn;\n\n  if (array(fnDescriptor)) {\n    context = fnDescriptor[0];\n    fn = fnDescriptor[1];\n    check(fn, notUndef, effectName + \": argument of type [context, fn] has undefined or null `fn`\");\n  } else if (object(fnDescriptor)) {\n    context = fnDescriptor.context;\n    fn = fnDescriptor.fn;\n    check(fn, notUndef, effectName + \": argument of type {context, fn} has undefined or null `fn`\");\n  } else {\n    check(fnDescriptor, func, effectName + \": argument fn is not function\");\n    return;\n  }\n\n  if (context && string(fn)) {\n    check(context[fn], func, effectName + \": context arguments has no such method - \\\"\" + fn + \"\\\"\");\n    return;\n  }\n\n  check(fn, func, effectName + \": unpacked fn argument (from [context, fn] or {context, fn}) is not a function\");\n};\n\nfunction getFnCallDescriptor(fnDescriptor, args) {\n  var context = null;\n  var fn;\n\n  if (func(fnDescriptor)) {\n    fn = fnDescriptor;\n  } else {\n    if (array(fnDescriptor)) {\n      context = fnDescriptor[0];\n      fn = fnDescriptor[1];\n    } else {\n      context = fnDescriptor.context;\n      fn = fnDescriptor.fn;\n    }\n\n    if (context && string(fn) && func(context[fn])) {\n      fn = context[fn];\n    }\n  }\n\n  return {\n    context: context,\n    fn: fn,\n    args: args\n  };\n}\n\nvar isNotDelayEffect = function isNotDelayEffect(fn) {\n  return fn !== delay;\n};\n\nfunction call(fnDescriptor) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    var arg0 = typeof args[0] === 'number' ? args[0] : 'ms';\n    check(fnDescriptor, isNotDelayEffect, \"instead of writing `yield call(delay, \" + arg0 + \")` where delay is an effect from `redux-saga/effects` you should write `yield delay(\" + arg0 + \")`\");\n    validateFnDescriptor('call', fnDescriptor);\n  }\n\n  return makeEffect(CALL, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction apply(context, fn, args) {\n  if (args === void 0) {\n    args = [];\n  }\n\n  var fnDescriptor = [context, fn];\n\n  if (process.env.NODE_ENV !== 'production') {\n    validateFnDescriptor('apply', fnDescriptor);\n  }\n\n  return makeEffect(CALL, getFnCallDescriptor([context, fn], args));\n}\nfunction cps(fnDescriptor) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateFnDescriptor('cps', fnDescriptor);\n  }\n\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n\n  return makeEffect(CPS, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction fork(fnDescriptor) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateFnDescriptor('fork', fnDescriptor);\n    check(fnDescriptor, function (arg) {\n      return !effect(arg);\n    }, 'fork: argument must not be an effect');\n  }\n\n  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    args[_key3 - 1] = arguments[_key3];\n  }\n\n  return makeEffect(FORK, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction spawn(fnDescriptor) {\n  if (process.env.NODE_ENV !== 'production') {\n    validateFnDescriptor('spawn', fnDescriptor);\n  }\n\n  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    args[_key4 - 1] = arguments[_key4];\n  }\n\n  return detach(fork.apply(void 0, [fnDescriptor].concat(args)));\n}\nfunction join(taskOrTasks) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (arguments.length > 1) {\n      throw new Error('join(...tasks) is not supported any more. Please use join([...tasks]) to join multiple tasks.');\n    }\n\n    if (array(taskOrTasks)) {\n      taskOrTasks.forEach(function (t) {\n        check(t, task, \"join([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n      });\n    } else {\n      check(taskOrTasks, task, \"join(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n    }\n  }\n\n  return makeEffect(JOIN, taskOrTasks);\n}\nfunction cancel(taskOrTasks) {\n  if (taskOrTasks === void 0) {\n    taskOrTasks = SELF_CANCELLATION;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (arguments.length > 1) {\n      throw new Error('cancel(...tasks) is not supported any more. Please use cancel([...tasks]) to cancel multiple tasks.');\n    }\n\n    if (array(taskOrTasks)) {\n      taskOrTasks.forEach(function (t) {\n        check(t, task, \"cancel([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n      });\n    } else if (taskOrTasks !== SELF_CANCELLATION && notUndef(taskOrTasks)) {\n      check(taskOrTasks, task, \"cancel(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n    }\n  }\n\n  return makeEffect(CANCEL, taskOrTasks);\n}\nfunction select(selector) {\n  if (selector === void 0) {\n    selector = identity;\n  }\n\n  for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n\n  if (process.env.NODE_ENV !== 'production' && arguments.length) {\n    check(arguments[0], notUndef, 'select(selector, [...]): argument selector is undefined');\n    check(selector, func, \"select(selector, [...]): argument \" + selector + \" is not a function\");\n  }\n\n  return makeEffect(SELECT, {\n    selector: selector,\n    args: args\n  });\n}\n/**\n  channel(pattern, [buffer])    => creates a proxy channel for store actions\n**/\n\nfunction actionChannel(pattern$1, buffer$1) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(pattern$1, pattern, 'actionChannel(pattern,...): argument pattern is not valid');\n\n    if (arguments.length > 1) {\n      check(buffer$1, notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');\n      check(buffer$1, buffer, \"actionChannel(pattern, buffer): argument \" + buffer$1 + \" is not a valid buffer\");\n    }\n  }\n\n  return makeEffect(ACTION_CHANNEL, {\n    pattern: pattern$1,\n    buffer: buffer$1\n  });\n}\nfunction cancelled() {\n  return makeEffect(CANCELLED, {});\n}\nfunction flush(channel$1) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(channel$1, channel, \"flush(channel): argument \" + channel$1 + \" is not valid channel\");\n  }\n\n  return makeEffect(FLUSH, channel$1);\n}\nfunction getContext(prop) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(prop, string, \"getContext(prop): argument \" + prop + \" is not a string\");\n  }\n\n  return makeEffect(GET_CONTEXT, prop);\n}\nfunction setContext(props) {\n  if (process.env.NODE_ENV !== 'production') {\n    check(props, object, createSetContextWarning(null, props));\n  }\n\n  return makeEffect(SET_CONTEXT, props);\n}\nvar delay =\n/*#__PURE__*/\ncall.bind(null, delayP);\n\nexport { apply as $, ALL as A, logError as B, CALL as C, wrapSagaDispatch as D, identity as E, FORK as F, GET_CONTEXT as G, buffers as H, detach as I, JOIN as J, take as K, fork as L, cancel as M, call as N, actionChannel as O, PUT as P, sliding as Q, RACE as R, SELECT as S, TAKE as T, delay as U, race as V, effectTypes as W, takeMaybe as X, put as Y, putResolve as Z, all as _, CPS as a, cps as a0, spawn as a1, join as a2, select as a3, cancelled as a4, flush as a5, getContext as a6, setContext as a7, CANCEL as b, check as c, ACTION_CHANNEL as d, expanding as e, CANCELLED as f, FLUSH as g, SET_CONTEXT as h, internalErr as i, getMetaInfo as j, kTrue as k, createAllStyleChildCallbacks as l, createEmptyArray as m, none as n, once as o, assignWithSymbols as p, makeIterator as q, remove as r, shouldComplete as s, noop as t, flatMap as u, getLocation as v, createSetContextWarning as w, asyncIteratorSymbol as x, shouldCancel as y, shouldTerminate as z };\n","import { createSelector } from 'reselect';\nimport {\n  List,\n  Map,\n  fromJS,\n} from 'immutable';\n\nimport {\n  DEFAULT_MOUNT_POINT, IMPORT_PRICING_FORM_PATH, QUOTE_FORM_PATH\n} from './constants';\nimport { IMap, IMapNonRecursive } from 'ats-utils/src';\nimport { IQuoteEditReducerState } from './reducer';\nimport { INITIAL_STATE } from '../../containers/Pagination/localReducer';\nimport { ContactListItem, Product, QuoteCustomer } from '../../models';\nimport { makeSelectProject } from '../ProjectModule/selectors';\nimport { BID_FORM_NAME } from '../../components/QuoteCustomersWithBid';\nimport { makeSelectQuoteTemplateList } from '../QuoteTemplateModule/selectors';\nimport { makeSelectLoggedInUserOfficeId } from '../AccountModule/selectors';\n\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added QuoteEditModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\n// export const selectFormState = () => (state: any) =>  getFormValues(BUILDING_SELECTION_FORM)(state) || Map<string, any>();\n\n// export const makeSelectBuildingClasses = () => createSelector(\n//   selectReducerState(),\n//   (state: IMapNonRecursive<IBuildingReducerState>) => state.get('buildingClasses'),\n// );\n\nexport const bidFormSelector = (path: any[]) => createSelector(\n  (state: any) => state.getIn(['form', BID_FORM_NAME, 'values']),\n  state => path.length ? state?.getIn([...path]) : List()\n);\n\nexport const initialBidFormSelector = (path: any[]) => createSelector(\n  (state: any) => state.getIn(['form', BID_FORM_NAME, 'initial']),\n  state => path.length ? state?.getIn([...path]) : List()\n);\n\nexport const quoteFormSelector = (path: any[], fallback = List()) => createSelector(\n  (state: any) => state.getIn([...QUOTE_FORM_PATH]),\n  state => path.length && state ? state.getIn([...path]) : fallback\n);\n\nexport const importPricingFormSelector = () => createSelector(\n  (state: any) => state.getIn([...IMPORT_PRICING_FORM_PATH]),\n  state =>  state\n);\n\nexport const makeSelectExpandedProductInSection = ({ section, productIndex }: { section: number, productIndex: number }) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state\n    ? state.getIn([section, 'uiData', 'expandedProductsInSection']) !== undefined\n      ? state.getIn([section, 'uiData', 'expandedProductsInSection']).some(i => i === productIndex)\n      : false\n    : false,\n);\n\nexport const makeSelectExcludedSection = ({ section }: { section: number }) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.getIn([section, 'uiData', 'excluded']) || false,\n);\n\nexport const makeSelectAddProductOrPackageToQuoteLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.get('addProductOrPackageToQuoteLoading') || false,\n);\n\nexport const makeSelectBulkEditAnchor = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('bulkEditAnchor'),\n);\n\nexport const makeSelectPresentationalLabelColumn = (section: number) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.getIn([section, 'uiData', 'presentationalLabelColumn']) || '',\n);\n\nexport const makeSelectLabelColumnWithoutProduct = (sectionIndex: number, productIndex: number) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.getIn([sectionIndex, 'uiData', 'products', productIndex, 'labelColumn']) || '',\n);\n\nexport const makeSelectSectionExpanded = (section: number) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.getIn([section, 'isExpanded']) ?? true,\n);\n\nexport const makeSelectSectionLoading = (section: number) => createSelector(\n  quoteFormSelector(['sections']),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.getIn([section, 'uiData', 'loading']),\n);\n\nexport const makeSelectDndMenuPaths = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('dndMenuPaths'),\n);\n\nexport const makeSelectIsDndMenuOpenForNavigation = () => createSelector(\n  makeSelectDndMenuPaths(),\n  (state: any) => Boolean(state.get('anchorEl') !== null && state.get('isNavigation')),\n);\n\n\nexport const makeSelectSectionToFocus = (sectionIndex: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('sectionToFocus') === sectionIndex,\n);\n\nexport const makeSelectFocusingSection = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('sectionToFocus'),\n);\n\n\nexport const makeSelectUpdatePricingLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('updatePricingLoading') || false,\n);\n\nexport const makeSelectcurrencyConversions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('currencyConversions') || [],\n);\n\nexport const makeSelectProductRowOnFocus = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('productRowOnFocus') || INITIAL_STATE.get('productRowOnFocus')\n);\n\nexport const makeSelectProjectKeyContacts = (projectId: number) => createSelector(\n  makeSelectProject({ projectId }),\n  (project: IMap<any>) => project?.get('keyContacts') || List()\n);\n\nexport const makeSelectSectionProductsCount = (sectionIndex: number) => createSelector(\n  quoteFormSelector(['sections', sectionIndex, 'products']),\n  (products: List<IMap<Product>>) => products.size\n);\n\nexport const makeSelectPinnedColumn = (sectionIndex: number) => createSelector(\n  quoteFormSelector(['sections', sectionIndex, 'sectionTemplate', 'settings', 'pinnedColumn']),\n  // const pinnedColumn = (sectionTemplate || Map()).getIn(['settings', 'pinnedColumn']) || List();\n  // const sortedFieldsData = pinnedColumn.map(fieldId => fieldsData.find(field => fieldId === field.get('id'))).concat(fieldsData.filter(field => !pinnedColumn.includes(field.get('id')))) || List();\n  (pinnedColumn: List<string>) => (pinnedColumn || List())\n);\n\n// this selector is to constrcut the pages for the pagination\n// it will return an object with the page number as key and the value is a list of section indexes\n// each page should have a max number of products (TBD)\n// the pagination will be done based on the products count in each page\nexport const makeSelectSectionsInPages = () => createSelector(\n  quoteFormSelector(['sections']),\n  makeSelectMaxProductsPerPage(),\n  makeSelectMaxSectionsPerPage(),\n  (sections: List<IMap<any>>, maxProductsPerPage: number, maxSectionsPerPage: number,) => {\n    let productsCount = 0;\n    let sectionsCount = 0;\n    let page = 1;\n    const pages = Boolean(sections) ? sections.reduce((acc, section, index) => {\n      productsCount += (section.get('products')?.size ?? 0);\n      sectionsCount += 1;\n      if (productsCount <= maxProductsPerPage && sectionsCount <= maxSectionsPerPage) {\n        return acc.set(page, acc.get(page) ? acc.get(page).push(index) : List([index]));\n      } else {\n        if (!Boolean(acc.get(page)?.size)) {\n          acc = acc.set(page, acc.get(page) ? acc.get(page).push(index) : List([index]));\n          page++;\n          productsCount = 0;\n          sectionsCount = 0;\n        } else {\n          ++page;\n          productsCount = section.get('products').size;\n          sectionsCount = 1;\n          acc = acc.set(page, acc.get(page) ? acc.get(page).push(index) : List([index]));\n        }\n        return acc;\n      }\n    }, fromJS({})) : fromJS({});\n\n    return pages;\n  }\n);\n\nexport const makeSelectMaxProductsPerPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('maxProductsPerPage'),\n);\n\nexport const makeSelectMaxSectionsPerPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('maxSectionsPerPage'),\n);\n\nexport const makeSelectSortProductsByManufacturer = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state.get('sortProductsByManufacturer')\n);\n\nexport const makeSelectSourceQuote = () => createSelector(\n  selectReducerState(),\n  (state) => state.get('sourceQuoteId')\n);\n\nexport const makeSelectBidResponseId = () => createSelector(\n  selectReducerState(),\n  (state) => state.get('bidResponseId')\n);\n\nexport const makeSelectPendingAttachQuoteId = () => createSelector(\n  selectReducerState(),\n  (state) => state.get('pendingAttachQuoteId')\n);\n\nexport const makeSelectQuoteExportStep = () => createSelector(\n  selectReducerState(),\n  (state) => state.get('quoteExportStep')\n);\n\nexport const makeSelectQuoteLevelDefaultTemplate = () => createSelector(\n  makeSelectQuoteTemplateList(),\n  quoteFormSelector(['defaultQuoteTemplateId'], null),\n  (quoteTemplates: Map<any, IMap<any>>, quoteDefaultTemplateId: number) => quoteDefaultTemplateId ? quoteTemplates.find((template) => {\n    return template.get('id') === quoteDefaultTemplateId;\n  }) : null\n);\n\nexport const makeSelectAutoSaveEnabled = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('quoteAutoSaveEnabled')),\n);\n\nexport const makeSelectQuoteOperationsInFlight = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.get('quoteOperationsInFlight') ?? 0,\n);\n\nexport const makeSelectAutoSavePending = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('autoSavePending')),\n);\n\nexport const makeSelectAutoSaving = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('autoSaving')),\n);\n\nexport const makeSelectQuoteDirty = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('quoteDirty')),\n);\n\nexport const makeSelectAutoSaveSettling = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('autoSaveSettling')),\n);\n\nexport const makeSelectIsDetailView = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => Boolean(state?.get('isDetailView')),\n);\n\nexport const makeSelectAutoSavePerformRequestId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteEditReducerState>) => state?.get('autoSavePerformRequestId') ?? null,\n);\n\n// True while the user has one or more numeric grid cells in mid-edit (typed but\n// not yet rounded-committed). Auto-save must wait because rounding / decimal\n// precision is only applied on blur, so saving mid-edit would persist the raw\n// un-rounded value. Per-cell ownership in editingCellIds (Set<cellId>) means\n// re-adding the same id is a no-op and removing a missing id is a no-op, so\n// counter drift is structurally impossible. redux-form's form.<name>.active is\n// intentionally NOT consulted — it's unreliable for MUI Select/Dropdown Fields\n// (active gets stuck after a selection because BLUR doesn't dispatch cleanly).\n// Non-cell inputs (label, dropdowns, etc.) don't need this guard since they\n// commit values without rounding.\nexport const makeSelectIsTrackedFormFieldFocused = () => createSelector(\n  selectReducerState(),\n  (reducerState: IMapNonRecursive<IQuoteEditReducerState>) =>\n    (reducerState?.get('editingCellIds')?.size ?? 0) > 0,\n);\n\nexport const makeSelectDefaultQuoteTemplate = () => createSelector(\n  makeSelectQuoteTemplateList(),\n  makeSelectLoggedInUserOfficeId(),\n  quoteFormSelector(['defaultQuoteTemplateId'], null),\n  (quoteTemplates: Map<any, IMap<any>>, userOfficeId: number, quoteDefaultTemplateId: number) => quoteDefaultTemplateId\n    ? quoteTemplates.find((template) => template.get('id') === quoteDefaultTemplateId)\n    : quoteTemplates.find((template) => template.get('defaultOfficeIds')?.includes(userOfficeId))\n);\n\nexport default {\n  selectReducerState,\n  // makeSelectBuildingClasses\n};","import {IMPORT_PRICING_FORM_NAME, QUOTE_FORM_NAME} from '../../constants/quote';\n\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'quoteEdit';\nexport const QUOTE_FORM_PATH = ['form', QUOTE_FORM_NAME, 'values'];\nexport const IMPORT_PRICING_FORM_PATH = ['form', IMPORT_PRICING_FORM_NAME, 'values'];\n\n","module.exports = require('./lib/immutable')\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport React from 'react';\nimport { SheetsRegistry } from 'jss';\nimport StylesProvider from '../StylesProvider';\nimport createGenerateClassName from '../createGenerateClassName';\n\nvar ServerStyleSheets =\n/*#__PURE__*/\nfunction () {\n  function ServerStyleSheets() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, ServerStyleSheets);\n\n    this.options = options;\n  }\n\n  _createClass(ServerStyleSheets, [{\n    key: \"collect\",\n    value: function collect(children) {\n      // This is needed in order to deduplicate the injection of CSS in the page.\n      var sheetsManager = new Map(); // This is needed in order to inject the critical CSS.\n\n      this.sheetsRegistry = new SheetsRegistry(); // A new class name generator\n\n      var generateClassName = createGenerateClassName();\n      return React.createElement(StylesProvider, _extends({\n        sheetsManager: sheetsManager,\n        serverGenerateClassName: generateClassName,\n        sheetsRegistry: this.sheetsRegistry\n      }, this.options), children);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return this.sheetsRegistry ? this.sheetsRegistry.toString() : '';\n    }\n  }, {\n    key: \"getStyleElement\",\n    value: function getStyleElement(props) {\n      return React.createElement('style', _extends({\n        id: 'jss-server-side',\n        key: 'jss-server-side',\n        dangerouslySetInnerHTML: {\n          __html: this.toString()\n        }\n      }, props));\n    }\n  }]);\n\n  return ServerStyleSheets;\n}();\n\nexport default ServerStyleSheets;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { chainPropTypes, getDisplayName } from '@material-ui/utils';\nimport useTheme from '../useTheme';\nexport function withThemeCreator() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaultTheme = options.defaultTheme;\n\n  var withTheme = function withTheme(Component) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (Component === undefined) {\n        throw new Error(['You are calling withTheme(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var WithTheme = React.forwardRef(function WithTheme(props, ref) {\n      var innerRef = props.innerRef,\n          other = _objectWithoutProperties(props, [\"innerRef\"]);\n\n      var theme = useTheme() || defaultTheme;\n      return React.createElement(Component, _extends({\n        theme: theme,\n        ref: innerRef || ref\n      }, other));\n    });\n    process.env.NODE_ENV !== \"production\" ? WithTheme.propTypes = {\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: chainPropTypes(PropTypes.oneOfType([PropTypes.func, PropTypes.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return new Error('Material-UI: the `innerRef` prop is deprecated and will be removed in v5. ' + 'Refs are now automatically forwarded to the inner component.');\n      })\n    } : void 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      WithTheme.displayName = \"WithTheme(\".concat(getDisplayName(Component), \")\");\n    }\n\n    hoistNonReactStatics(WithTheme, Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Exposed for test purposes.\n      WithTheme.Naked = Component;\n    }\n\n    return WithTheme;\n  };\n\n  return withTheme;\n} // Provide the theme object as a prop to the input component.\n// It's an alternative API to useTheme().\n// We encourage the usage of useTheme() where possible.\n\nvar withTheme = withThemeCreator();\nexport default withTheme;","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ListItem,\n} from '../../models';\nimport {\n  List,\n} from 'immutable';\n\nexport default {};\n\nexport enum ProjectLocationTypes {\n  GET_COUNTRIES = 'GET_COUNTRIES',\n  GET_COUNTRIES_SUCCEEDED = 'GET_COUNTRIES_SUCCEEDED',\n  GET_COUNTRIES_FAILED = 'GET_COUNTRIES_FAILED',\n  GET_PROVINCE = 'GET_PROVINCE',\n  GET_PROVINCE_SUCCEEDED = 'GET_PROVINCE_SUCCEEDED',\n  GET_PROVINCE_FAILED = 'GET_PROVINCE_FAILED',\n  SAVE_PROVINCE_NAME = 'SAVE_PROVINCE_NAME',\n  GET_CITY = 'GET_CITY',\n  GET_CITY_SUCCEEDED = 'GET_CITY_SUCCEEDED',\n  GET_CITY_FAILED = 'GET_CITY_FAILED',\n  SAVE_CITY_NAME = 'SAVE_CITY_NAME',\n  GET_DIVISION_NAME = 'GET_DIVISION_NAME',\n  GET_COUNTRY_ADMIN_DIVISION = 'GET_COUNTRY_ADMIN_DIVISION',\n  GET_COUNTRY_ADMIN_DIVISION_SUCCEEDED = 'GET_COUNTRY_ADMIN_DIVISION_SUCCEEDED',\n  CLEAR_LOCATION_INFO = 'CLEAR_LOCATION_INFO',\n  CLEAR_PROVINCE_LIST = 'CLEAR_PROVINCE_LIST',\n  CLEAR_CITY_LIST = 'CLEAR_CITY_LIST',\n}\n\nexport class GetCountryAdminDivisionAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_COUNTRY_ADMIN_DIVISION;\n  constructor(\n    public payload: {\n      countryId: number\n    }\n  ) {}\n}\n\nexport class GetCountryAdminDivisionSucceededAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_COUNTRY_ADMIN_DIVISION_SUCCEEDED;\n  constructor(\n    public payload: {\n      countryId: number,\n      adminDivision: string,\n    }\n  ) {}\n}\n\nexport class GetCountriesAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_COUNTRIES;\n}\n\nexport class GetDivisionNameAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_DIVISION_NAME;\n\n  constructor (\n    public payload: {\n\n    }\n  ) {}\n}\n\nexport class SaveProvinceNameAction implements IAction {\n  public readonly type = ProjectLocationTypes.SAVE_PROVINCE_NAME;\n\n  constructor (\n    public payload: {\n      provinceName: string\n    }\n  ) {}\n}\n\nexport class SaveCityNameAction implements IAction {\n  public readonly type = ProjectLocationTypes.SAVE_CITY_NAME;\n\n  constructor (\n    public payload: {\n      cityName: string\n    }\n  ) {}\n}\n\nexport class GetCountriesSucceededAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_COUNTRIES_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      list: List<IMap<ListItem>>,\n    }\n  ) {}\n}\n\nexport class GetCountriesFailedAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_COUNTRIES_FAILED;\n\n  constructor (\n    public payload: {\n      err: Error | string\n    }\n  ) {}\n}\n\nexport class GetProvinceAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_PROVINCE;\n\n  constructor (\n    public payload: string | number\n  ) {}\n}\n\n\nexport class GetProvinceSucceededAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_PROVINCE_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      list: List<IMap<ListItem>>,\n    }\n  ) {}\n}\n\nexport class GetProvincesFailedAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_PROVINCE_FAILED;\n\n  constructor (\n    public payload: {\n      err: Error | string\n    }\n  ) {}\n}\n\nexport class GetCityAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_CITY;\n\n  constructor (\n    public payload: string | number\n  ) {}\n}\n\nexport class GetCitySucceededAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_CITY_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      list: List<IMap<ListItem>>,\n    }\n  ) {}\n}\n\nexport class GetCityFailedAction implements IAction {\n  public readonly type = ProjectLocationTypes.GET_CITY_FAILED;\n\n  constructor (\n    public payload: {\n      err: Error | string\n    }\n  ) {}\n}\n\nexport class ClearLocationInfo implements IAction {\n  public readonly type = ProjectLocationTypes.CLEAR_LOCATION_INFO;\n}\n\nexport class ClearProvinceList implements IAction {\n  public readonly type = ProjectLocationTypes.CLEAR_PROVINCE_LIST;\n}\n\nexport class ClearCityList implements IAction {\n  public readonly type = ProjectLocationTypes.CLEAR_CITY_LIST;\n}\n// export type ProjectActions =\n//   | GetCountriesAction\n//   | GetProvinceAction\n//   | GetCountriesSucceededAction\n//   | GetCountriesFailedAction;\n\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  createStyles,\n  WithStyles,\n  withStyles,\n  GridItemsAlignment,\n  GridJustification,\n  GridSpacing,\n  Typography,\n  Tooltip,\n} from '@material-ui/core';\nimport { useTheme } from '@material-ui/core/styles';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport { IconProp, SizeProp } from '@fortawesome/fontawesome-svg-core';\nimport { compose } from 'redux';\nimport { Variant } from '@material-ui/core/styles/createTypography';\nimport classnames from 'classnames';\n\n// drawerView = true is use for drawer view, drawerView = false is use for drawer edit\n// justify = 'flex-end' is use for row without icon but maintain icon space\n\nconst ICON_SPACE = 28;\n\ninterface IDrawerRowComponentProps {\n  iconSize?: SizeProp;\n  icon?: IconProp;\n  muiIcon?: JSX.Element;\n  containerClass?: string;\n  justify?: GridJustification;\n  alignItems?: GridItemsAlignment;\n  childrenJustify?: GridJustification;\n  childrenAlign?: GridItemsAlignment;\n  childWidth?: string;\n  text?: string;\n  variant?: Variant;\n  drawerView?: boolean;\n  margin?: boolean;\n  tooltip?: string;\n  spacing?: GridSpacing;\n  classes?: {\n    [key in keyof ReturnType<typeof styles>]?: any;\n  };\n}\n\ntype DrawerRowProps = IDrawerRowComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  row: {\n    marginBottom: theme.spacing(1.5)\n  },\n  root: {\n  },\n  iconContainer: {\n  },\n  icon: {\n  },\n  defaultIcon: {\n    color: theme.palette.grey[600]\n  },\n  primaryTextColor: {\n    color: theme.palette.text.primary\n  },\n  text: {\n  }\n});\n\nconst DrawerRow: React.FC<DrawerRowProps> = ({\n  children,\n  classes,\n  iconSize = 'sm' as SizeProp,\n  icon,\n  muiIcon = null,\n  alignItems = 'center',\n  justify = 'flex-start',\n  childrenJustify = 'flex-start',\n  childrenAlign,\n  childWidth,\n  text = '',\n  variant = 'body2',\n  drawerView = true,\n  margin = true,\n  tooltip = '',\n  spacing = 0,\n}) => {\n  const theme = useTheme();\n  // MUI Grid `spacing` widens the container via `width: calc(100% + spacing)` to\n  // offset its own negative margins; our explicit width overrides that, so add\n  // the same offset back or the row bleeds past the icon gutter.\n  const childrenWidth = childWidth\n    ?? `calc(100% - ${ICON_SPACE}px${spacing ? ` + ${theme.spacing(spacing)}px` : ''})`;\n  return (\n  <Grid\n    container={true}\n    alignItems={alignItems}\n    justify={justify}\n    className={drawerView && margin ? classnames(classes.row, classes.root) : classes.root}\n    wrap='nowrap'\n  >\n    {\n      justify !== 'flex-end'\n        ? <Grid\n            item={true}\n            container={true}\n            alignItems={'center'}\n            className={classes.iconContainer}\n            style={{\n              width: ICON_SPACE\n            }}\n          >\n            {\n              icon ?\n              <FontAwesomeIcon\n                size={iconSize}\n                icon={icon}\n                className={classnames(classes.defaultIcon, classes.icon)}\n              />\n              : muiIcon ? React.cloneElement(muiIcon, {\n                  fontSize: 'small',\n                  className: classnames(classes.defaultIcon, classes.icon, muiIcon.props.className)\n                }) : null\n            }\n          </Grid>\n        : null\n    }\n    <Grid\n      item={true}\n      container={true}\n      justify={childrenJustify}\n      alignItems={childrenAlign || (children ? 'flex-start' : 'center')}\n      spacing={spacing}\n      style={{\n        width: childrenWidth,\n      }}\n    >\n      {\n        children\n          ? children\n          : <Tooltip title={tooltip || ''} placement='bottom'>\n              <Typography variant={variant} className={classnames(classes.primaryTextColor, classes.text)}>{text}</Typography>\n            </Tooltip>\n      }\n    </Grid>\n  </Grid>\n  );\n};\n\nexport default compose<React.ComponentClass<IDrawerRowComponentProps>>(\n  withStyles(styles),\n)(DrawerRow);\n\n","import React from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\n/* eslint-disable import/prefer-default-export */\nfunction invariant(condition, message) {\n  if (condition) return;\n  var error = new Error(\"loadable: \" + message);\n  error.framesToPop = 1;\n  error.name = 'Invariant Violation';\n  throw error;\n}\nfunction warn(message) {\n  // eslint-disable-next-line no-console\n  console.warn(\"loadable: \" + message);\n}\n\nvar Context = /*#__PURE__*/\nReact.createContext();\n\nvar LOADABLE_REQUIRED_CHUNKS_KEY = '__LOADABLE_REQUIRED_CHUNKS__';\nfunction getRequiredChunkKey(namespace) {\n  return \"\" + namespace + LOADABLE_REQUIRED_CHUNKS_KEY;\n}\n\nvar sharedInternals = /*#__PURE__*/Object.freeze({\n  getRequiredChunkKey: getRequiredChunkKey,\n  invariant: invariant,\n  Context: Context\n});\n\nfunction resolveConstructor(ctor) {\n  if (typeof ctor === 'function') {\n    return {\n      requireAsync: ctor\n    };\n  }\n\n  return ctor;\n}\n\nvar withChunkExtractor = function withChunkExtractor(Component) {\n  return function (props) {\n    return React.createElement(Context.Consumer, null, function (extractor) {\n      return React.createElement(Component, Object.assign({\n        __chunkExtractor: extractor\n      }, props));\n    });\n  };\n};\n\nvar identity = function identity(v) {\n  return v;\n};\n\nfunction createLoadable(_ref) {\n  var _ref$resolve = _ref.resolve,\n      resolve = _ref$resolve === void 0 ? identity : _ref$resolve,\n      _render = _ref.render,\n      onLoad = _ref.onLoad;\n\n  function loadable(loadableConstructor, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var ctor = resolveConstructor(loadableConstructor);\n    var cache = {};\n\n    function _getCacheKey(props) {\n      if (options.cacheKey) {\n        return options.cacheKey(props);\n      }\n\n      if (ctor.resolve) {\n        return ctor.resolve(props);\n      }\n\n      return null;\n    }\n\n    var InnerLoadable =\n    /*#__PURE__*/\n    function (_React$Component) {\n      _inheritsLoose(InnerLoadable, _React$Component);\n\n      InnerLoadable.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n        var cacheKey = _getCacheKey(props);\n\n        return _extends({}, state, {\n          cacheKey: cacheKey,\n          loading: state.loading || state.cacheKey !== cacheKey\n        });\n      };\n\n      function InnerLoadable(props) {\n        var _this;\n\n        _this = _React$Component.call(this, props) || this;\n        _this.state = {\n          result: null,\n          error: null,\n          loading: true,\n          cacheKey: _getCacheKey(props)\n        };\n        _this.promise = null;\n        invariant(!props.__chunkExtractor || ctor.requireSync, 'SSR requires `@loadable/babel-plugin`, please install it'); // Server-side\n\n        if (props.__chunkExtractor) {\n          // This module has been marked with no SSR\n          if (options.ssr === false) {\n            return _assertThisInitialized(_this);\n          } // We run load function, we assume that it won't fail and that it\n          // triggers a synchronous loading of the module\n\n\n          ctor.requireAsync(props)[\"catch\"](function () {}); // So we can require now the module synchronously\n\n          _this.loadSync();\n\n          props.__chunkExtractor.addChunk(ctor.chunkName(props));\n\n          return _assertThisInitialized(_this);\n        } // Client-side with `isReady` method present (SSR probably)\n        // If module is already loaded, we use a synchronous loading\n\n\n        if (ctor.isReady && ctor.isReady(props)) {\n          _this.loadSync();\n        }\n\n        return _this;\n      }\n\n      var _proto = InnerLoadable.prototype;\n\n      _proto.componentDidMount = function componentDidMount() {\n        this.mounted = true;\n\n        if (this.state.loading) {\n          this.loadAsync();\n        } else if (!this.state.error) {\n          this.triggerOnLoad();\n        }\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n        // Component is reloaded if the cacheKey has changed\n        if (!Object.is(prevState.cacheKey, this.state.cacheKey)) {\n          this.promise = null;\n          this.loadAsync();\n        }\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        this.mounted = false;\n      };\n\n      _proto.safeSetState = function safeSetState(nextState, callback) {\n        if (this.mounted) {\n          this.setState(nextState, callback);\n        }\n      };\n\n      _proto.triggerOnLoad = function triggerOnLoad() {\n        var _this2 = this;\n\n        if (onLoad) {\n          setTimeout(function () {\n            onLoad(_this2.state.result, _this2.props);\n          });\n        }\n      };\n\n      _proto.loadSync = function loadSync() {\n        if (!this.state.loading) return;\n\n        try {\n          var loadedModule = ctor.requireSync(this.props);\n          var result = resolve(loadedModule, {\n            Loadable: Loadable\n          });\n          this.state.result = result;\n          this.state.loading = false;\n        } catch (error) {\n          this.state.error = error;\n        }\n      };\n\n      _proto.getCacheKey = function getCacheKey() {\n        return _getCacheKey(this.props) || JSON.stringify(this.props);\n      };\n\n      _proto.getCache = function getCache() {\n        return cache[this.getCacheKey()];\n      };\n\n      _proto.setCache = function setCache(value) {\n        cache[this.getCacheKey()] = value;\n      };\n\n      _proto.loadAsync = function loadAsync() {\n        var _this3 = this;\n\n        if (!this.promise) {\n          var _this$props = this.props,\n              __chunkExtractor = _this$props.__chunkExtractor,\n              forwardedRef = _this$props.forwardedRef,\n              props = _objectWithoutPropertiesLoose(_this$props, [\"__chunkExtractor\", \"forwardedRef\"]);\n\n          this.promise = ctor.requireAsync(props).then(function (loadedModule) {\n            var result = resolve(loadedModule, {\n              Loadable: Loadable\n            });\n\n            if (options.suspense) {\n              _this3.setCache(result);\n            }\n\n            _this3.safeSetState({\n              result: resolve(loadedModule, {\n                Loadable: Loadable\n              }),\n              loading: false\n            }, function () {\n              return _this3.triggerOnLoad();\n            });\n          })[\"catch\"](function (error) {\n            _this3.safeSetState({\n              error: error,\n              loading: false\n            });\n          });\n        }\n\n        return this.promise;\n      };\n\n      _proto.render = function render() {\n        var _this$props2 = this.props,\n            forwardedRef = _this$props2.forwardedRef,\n            propFallback = _this$props2.fallback,\n            __chunkExtractor = _this$props2.__chunkExtractor,\n            props = _objectWithoutPropertiesLoose(_this$props2, [\"forwardedRef\", \"fallback\", \"__chunkExtractor\"]);\n\n        var _this$state = this.state,\n            error = _this$state.error,\n            loading = _this$state.loading,\n            result = _this$state.result;\n\n        if (options.suspense) {\n          var cachedResult = this.getCache();\n          if (!cachedResult) throw this.loadAsync();\n          return _render({\n            loading: false,\n            fallback: null,\n            result: cachedResult,\n            options: options,\n            props: _extends({}, props, {\n              ref: forwardedRef\n            })\n          });\n        }\n\n        if (error) {\n          throw error;\n        }\n\n        var fallback = propFallback || options.fallback || null;\n\n        if (loading) {\n          return fallback;\n        }\n\n        return _render({\n          loading: loading,\n          fallback: fallback,\n          result: result,\n          options: options,\n          props: _extends({}, props, {\n            ref: forwardedRef\n          })\n        });\n      };\n\n      return InnerLoadable;\n    }(React.Component);\n\n    var EnhancedInnerLoadable = withChunkExtractor(InnerLoadable);\n    var Loadable = React.forwardRef(function (props, ref) {\n      return React.createElement(EnhancedInnerLoadable, Object.assign({\n        forwardedRef: ref\n      }, props));\n    }); // In future, preload could use `<link rel=\"preload\">`\n\n    Loadable.preload = function (props) {\n      ctor.requireAsync(props);\n    };\n\n    Loadable.load = function (props) {\n      return ctor.requireAsync(props);\n    };\n\n    return Loadable;\n  }\n\n  function lazy(ctor, options) {\n    return loadable(ctor, _extends({}, options, {\n      suspense: true\n    }));\n  }\n\n  return {\n    loadable: loadable,\n    lazy: lazy\n  };\n}\n\nfunction resolveComponent(loadedModule, _ref) {\n  var Loadable = _ref.Loadable;\n  // eslint-disable-next-line no-underscore-dangle\n  var Component = loadedModule.__esModule ? loadedModule[\"default\"] : loadedModule[\"default\"] || loadedModule;\n  hoistNonReactStatics(Loadable, Component, {\n    preload: true\n  });\n  return Component;\n}\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable =\n/*#__PURE__*/\ncreateLoadable({\n  resolve: resolveComponent,\n  render: function render(_ref) {\n    var Component = _ref.result,\n        props = _ref.props;\n    return React.createElement(Component, props);\n  }\n}),\n    loadable = _createLoadable.loadable,\n    lazy = _createLoadable.lazy;\n\n/* eslint-disable no-use-before-define, react/no-multi-comp */\n\nvar _createLoadable$1 =\n/*#__PURE__*/\ncreateLoadable({\n  onLoad: function onLoad(result, props) {\n    if (result && props.forwardedRef) {\n      if (typeof props.forwardedRef === 'function') {\n        props.forwardedRef(result);\n      } else {\n        props.forwardedRef.current = result;\n      }\n    }\n  },\n  render: function render(_ref) {\n    var result = _ref.result,\n        loading = _ref.loading,\n        props = _ref.props;\n\n    if (!loading && props.children) {\n      return props.children(result);\n    }\n\n    return null;\n  }\n}),\n    loadable$1 = _createLoadable$1.loadable,\n    lazy$1 = _createLoadable$1.lazy;\n\n/* eslint-disable no-underscore-dangle, camelcase */\nvar BROWSER = typeof window !== 'undefined';\nfunction loadableReady(done, _temp) {\n  if (done === void 0) {\n    done = function done() {};\n  }\n\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$namespace = _ref.namespace,\n      namespace = _ref$namespace === void 0 ? '' : _ref$namespace;\n\n  if (!BROWSER) {\n    warn('`loadableReady()` must be called in browser only');\n    done();\n    return Promise.resolve();\n  }\n\n  var requiredChunks = null;\n\n  if (BROWSER) {\n    var dataElement = document.getElementById(getRequiredChunkKey(namespace));\n\n    if (dataElement) {\n      requiredChunks = JSON.parse(dataElement.textContent);\n    }\n  }\n\n  if (!requiredChunks) {\n    warn('`loadableReady()` requires state, please use `getScriptTags` or `getScriptElements` server-side');\n    done();\n    return Promise.resolve();\n  }\n\n  var resolved = false;\n  return new Promise(function (resolve) {\n    window.__LOADABLE_LOADED_CHUNKS__ = window.__LOADABLE_LOADED_CHUNKS__ || [];\n    var loadedChunks = window.__LOADABLE_LOADED_CHUNKS__;\n    var originalPush = loadedChunks.push.bind(loadedChunks);\n\n    function checkReadyState() {\n      if (requiredChunks.every(function (chunk) {\n        return loadedChunks.some(function (_ref2) {\n          var chunks = _ref2[0];\n          return chunks.includes(chunk);\n        });\n      })) {\n        if (!resolved) {\n          resolved = true;\n          resolve();\n          done();\n        }\n      }\n    }\n\n    loadedChunks.push = function () {\n      originalPush.apply(void 0, arguments);\n      checkReadyState();\n    };\n\n    checkReadyState();\n  });\n}\n\n/* eslint-disable no-underscore-dangle */\nvar loadable$2 = loadable;\nloadable$2.lib = loadable$1;\nvar lazy$2 = lazy;\nlazy$2.lib = lazy$1;\nvar __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = sharedInternals;\n\nexport default loadable$2;\nexport { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, lazy$2 as lazy, loadableReady };\n","import createContext from 'mini-create-react-context';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport { createMemoryHistory, createLocation, locationsAreEqual, createPath } from 'history';\nimport invariant from 'tiny-invariant';\nimport pathToRegexp from 'path-to-regexp';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { isValidElementType } from 'react-is';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistStatics from 'hoist-non-react-statics';\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n  var context = createContext();\n  context.displayName = name;\n  return context;\n};\n\nvar context =\n/*#__PURE__*/\ncreateNamedContext(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Router, _React$Component);\n\n  Router.computeRootMatch = function computeRootMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n\n  function Router(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.state = {\n      location: props.history.location\n    }; // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n\n    _this._isMounted = false;\n    _this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      _this.unlisten = props.history.listen(function (location) {\n        if (_this._isMounted) {\n          _this.setState({\n            location: location\n          });\n        } else {\n          _this._pendingLocation = location;\n        }\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = Router.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n\n    if (this._pendingLocation) {\n      this.setState({\n        location: this._pendingLocation\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unlisten) this.unlisten();\n  };\n\n  _proto.render = function render() {\n    return React.createElement(context.Provider, {\n      children: this.props.children || null,\n      value: {\n        history: this.props.history,\n        location: this.state.location,\n        match: Router.computeRootMatch(this.state.location.pathname),\n        staticContext: this.props.staticContext\n      }\n    });\n  };\n\n  return Router;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Router.propTypes = {\n    children: PropTypes.node,\n    history: PropTypes.object.isRequired,\n    staticContext: PropTypes.object\n  };\n\n  Router.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(prevProps.history === this.props.history, \"You cannot change <Router history>\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\nvar MemoryRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(MemoryRouter, _React$Component);\n\n  function MemoryRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createMemoryHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = MemoryRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return MemoryRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  MemoryRouter.propTypes = {\n    initialEntries: PropTypes.array,\n    initialIndex: PropTypes.number,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number,\n    children: PropTypes.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : void 0;\n  };\n}\n\nvar Lifecycle =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Lifecycle, _React$Component);\n\n  function Lifecycle() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Lifecycle.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  };\n\n  _proto.render = function render() {\n    return null;\n  };\n\n  return Lifecycle;\n}(React.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n  var message = _ref.message,\n      _ref$when = _ref.when,\n      when = _ref$when === void 0 ? true : _ref$when;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Prompt> outside a <Router>\") : invariant(false) : void 0;\n    if (!when || context$$1.staticContext) return null;\n    var method = context$$1.history.block;\n    return React.createElement(Lifecycle, {\n      onMount: function onMount(self) {\n        self.release = method(message);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        if (prevProps.message !== message) {\n          self.release();\n          self.release = method(message);\n        }\n      },\n      onUnmount: function onUnmount(self) {\n        self.release();\n      },\n      message: message\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n  Prompt.propTypes = {\n    when: PropTypes.bool,\n    message: messageType.isRequired\n  };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n  var generator = pathToRegexp.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n  if (path === void 0) {\n    path = \"/\";\n  }\n\n  if (params === void 0) {\n    params = {};\n  }\n\n  return path === \"/\" ? path : compilePath(path)(params, {\n    pretty: true\n  });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n  var computedMatch = _ref.computedMatch,\n      to = _ref.to,\n      _ref$push = _ref.push,\n      push = _ref$push === void 0 ? false : _ref$push;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Redirect> outside a <Router>\") : invariant(false) : void 0;\n    var history = context$$1.history,\n        staticContext = context$$1.staticContext;\n    var method = push ? history.push : history.replace;\n    var location = createLocation(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : _extends({}, to, {\n      pathname: generatePath(to.pathname, computedMatch.params)\n    }) : to); // When rendering in a static context,\n    // set the new location immediately.\n\n    if (staticContext) {\n      method(location);\n      return null;\n    }\n\n    return React.createElement(Lifecycle, {\n      onMount: function onMount() {\n        method(location);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        var prevLocation = createLocation(prevProps.to);\n\n        if (!locationsAreEqual(prevLocation, _extends({}, location, {\n          key: prevLocation.key\n        }))) {\n          method(location);\n        }\n      },\n      to: to\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  Redirect.propTypes = {\n    push: PropTypes.bool,\n    from: PropTypes.string,\n    to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n  };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n  var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n  if (pathCache[path]) return pathCache[path];\n  var keys = [];\n  var regexp = pathToRegexp(path, keys, options);\n  var result = {\n    regexp: regexp,\n    keys: keys\n  };\n\n  if (cacheCount$1 < cacheLimit$1) {\n    pathCache[path] = result;\n    cacheCount$1++;\n  }\n\n  return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (typeof options === \"string\") options = {\n    path: options\n  };\n  var _options = options,\n      path = _options.path,\n      _options$exact = _options.exact,\n      exact = _options$exact === void 0 ? false : _options$exact,\n      _options$strict = _options.strict,\n      strict = _options$strict === void 0 ? false : _options$strict,\n      _options$sensitive = _options.sensitive,\n      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n  var paths = [].concat(path);\n  return paths.reduce(function (matched, path) {\n    if (!path) return null;\n    if (matched) return matched;\n\n    var _compilePath = compilePath$1(path, {\n      end: exact,\n      strict: strict,\n      sensitive: sensitive\n    }),\n        regexp = _compilePath.regexp,\n        keys = _compilePath.keys;\n\n    var match = regexp.exec(pathname);\n    if (!match) return null;\n    var url = match[0],\n        values = match.slice(1);\n    var isExact = pathname === url;\n    if (exact && !isExact) return null;\n    return {\n      path: path,\n      // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url,\n      // the matched portion of the URL\n      isExact: isExact,\n      // whether or not we matched exactly\n      params: keys.reduce(function (memo, key, index) {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nfunction isEmptyChildren(children) {\n  return React.Children.count(children) === 0;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Route, _React$Component);\n\n  function Route() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Route.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Route> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n      : _this.props.path ? matchPath(location.pathname, _this.props) : context$$1.match;\n\n      var props = _extends({}, context$$1, {\n        location: location,\n        match: match\n      });\n\n      var _this$props = _this.props,\n          children = _this$props.children,\n          component = _this$props.component,\n          render = _this$props.render; // Preact uses an empty array as children by\n      // default, so use null if that's the case.\n\n      if (Array.isArray(children) && children.length === 0) {\n        children = null;\n      }\n\n      if (typeof children === \"function\") {\n        children = children(props);\n\n        if (children === undefined) {\n          if (process.env.NODE_ENV !== \"production\") {\n            var path = _this.props.path;\n            process.env.NODE_ENV !== \"production\" ? warning(false, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : void 0;\n          }\n\n          children = null;\n        }\n      }\n\n      return React.createElement(context.Provider, {\n        value: props\n      }, children && !isEmptyChildren(children) ? children : props.match ? component ? React.createElement(component, props) : render ? render(props) : null : null);\n    });\n  };\n\n  return Route;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Route.propTypes = {\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    component: function component(props, propName) {\n      if (props[propName] && !isValidElementType(props[propName])) {\n        return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n      }\n    },\n    exact: PropTypes.bool,\n    location: PropTypes.object,\n    path: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n    render: PropTypes.func,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool\n  };\n\n  Route.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : void 0;\n  };\n\n  Route.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n  return _extends({}, location, {\n    pathname: addLeadingSlash(basename) + location.pathname\n  });\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n  var base = addLeadingSlash(basename);\n  if (location.pathname.indexOf(base) !== 0) return location;\n  return _extends({}, location, {\n    pathname: location.pathname.substr(base.length)\n  });\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n  return function () {\n    process.env.NODE_ENV !== \"production\" ? invariant(false, \"You cannot %s with <StaticRouter>\", methodName) : invariant(false);\n  };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(StaticRouter, _React$Component);\n\n  function StaticRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n    _this.handlePush = function (location) {\n      return _this.navigateTo(location, \"PUSH\");\n    };\n\n    _this.handleReplace = function (location) {\n      return _this.navigateTo(location, \"REPLACE\");\n    };\n\n    _this.handleListen = function () {\n      return noop;\n    };\n\n    _this.handleBlock = function () {\n      return noop;\n    };\n\n    return _this;\n  }\n\n  var _proto = StaticRouter.prototype;\n\n  _proto.navigateTo = function navigateTo(location, action) {\n    var _this$props = this.props,\n        _this$props$basename = _this$props.basename,\n        basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n        _this$props$context = _this$props.context,\n        context = _this$props$context === void 0 ? {} : _this$props$context;\n    context.action = action;\n    context.location = addBasename(basename, createLocation(location));\n    context.url = createURL(context.location);\n  };\n\n  _proto.render = function render() {\n    var _this$props2 = this.props,\n        _this$props2$basename = _this$props2.basename,\n        basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n        _this$props2$context = _this$props2.context,\n        context = _this$props2$context === void 0 ? {} : _this$props2$context,\n        _this$props2$location = _this$props2.location,\n        location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n        rest = _objectWithoutPropertiesLoose(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n    var history = {\n      createHref: function createHref(path) {\n        return addLeadingSlash(basename + createURL(path));\n      },\n      action: \"POP\",\n      location: stripBasename(basename, createLocation(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n    return React.createElement(Router, _extends({}, rest, {\n      history: history,\n      staticContext: context\n    }));\n  };\n\n  return StaticRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  StaticRouter.propTypes = {\n    basename: PropTypes.string,\n    context: PropTypes.object,\n    location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\nvar Switch =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Switch, _React$Component);\n\n  function Switch() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Switch.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Switch> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n      // here because toArray adds keys to all child elements and we do not want\n      // to trigger an unmount/remount for two <Route>s that render the same\n      // component at different URLs.\n\n      React.Children.forEach(_this.props.children, function (child) {\n        if (match == null && React.isValidElement(child)) {\n          element = child;\n          var path = child.props.path || child.props.from;\n          match = path ? matchPath(location.pathname, _extends({}, child.props, {\n            path: path\n          })) : context$$1.match;\n        }\n      });\n      return match ? React.cloneElement(element, {\n        location: location,\n        computedMatch: match\n      }) : null;\n    });\n  };\n\n  return Switch;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Switch.propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object\n  };\n\n  Switch.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n  var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n  var C = function C(props) {\n    var wrappedComponentRef = props.wrappedComponentRef,\n        remainingProps = _objectWithoutPropertiesLoose(props, [\"wrappedComponentRef\"]);\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : invariant(false) : void 0;\n      return React.createElement(Component, _extends({}, remainingProps, context$$1, {\n        ref: wrappedComponentRef\n      }));\n    });\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    C.propTypes = {\n      wrappedComponentRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object])\n    };\n  }\n\n  return hoistStatics(C, Component);\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  if (typeof window !== \"undefined\") {\n    var global = window;\n    var key = \"__react_router_build__\";\n    var buildNames = {\n      cjs: \"CommonJS\",\n      esm: \"ES modules\",\n      umd: \"UMD\"\n    };\n\n    if (global[key] && global[key] !== \"esm\") {\n      var initialBuildName = buildNames[global[key]];\n      var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n\n      throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n    }\n\n    global[key] = \"esm\";\n  }\n}\n\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, withRouter, context as __RouterContext };\n","import * as React from 'react';\nimport './index.css';\n\ninterface IAtsSvg404Props {\n  /**\n   * The main color of the image.\n   * Default: '#0077ad'\n   * Expected: theme.palette.primary\n   */\n  color?: string;\n  /**\n   * The width of the element.\n   * Default: '500'\n   */\n  width?: string;\n  /**\n   * The height of the element.\n   * Default: '350'\n   */\n  height?: string;\n}\n\n/**\n * Props:\n * @prop {string} color - The main color of the image.\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n */\nconst AtsSvg404 = ({\n  color = '#0077ad',\n  width = '500',\n  height = '350'\n}: IAtsSvg404Props) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={ width }\n      height={ height }\n      viewBox={`0 0 500 350`}\n      style={{ maxWidth: '100%' }}\n    >\n      <path d='M290.6 46.7c-32-0.9-62.5-9.7-91.6-19.3c-29.1-9.6-58-20.2-89.2-25.3c-20.1-3.2-43.1-3.7-59.3 5.4c-15.6 8.8-20.6 24-23.3 38.1c-2 10.6-3.2 21.7 2.3 31.6c3.9 6.9 10.8 12.7 15.6 19.3c16.5 22.9 4.8 51.2-13.1 73.6c-8.4 10.5-18.2 20.6-24.7 31.7c-6.5 11.2-9.5 24.1-3.8 35.5c5.6 11.3 19 19.8 33.6 25.8c29.5 12.1 64.3 15.6 98.2 17.5c75.1 4.4 150.6 2.5 225.9 .6c27.8-0.7 55.8-1.4 83.2-5c15.2-2.1 31-5.3 42-13.1c14-9.8 17.5-26.5 8.1-38.9c-15.8-20.7-59.3-25.9-70.4-48.2c-6-12.2 .2-25.9 9-37.2c18.9-24.4 50.6-45.8 52.3-73.7c1.1-19.1-14.1-38.3-37.7-47.4c-24.7-9.5-58.9-8.3-77.1 7.4c-18.8 16.2-51.8 22.4-80 21.6Z' style={{animation: '4.3s linear infinite both a0_d', fill: color, opacity: .1, transform: 'translate(269.5,181) scale(.679,.679) translate(-270.7,-174.6)'}} />\n      <path d='M373.5 75.5c0 0-15-0.9-13.2 9.6c0 0-0.4 1.9 1.3 2.7c0 0 0-0.7 1.5-0.5c.6 .1 1.1 .1 1.7 .1c.7-0.1 1.4-0.3 1.9-0.8c0 0 4.2-1.8 5.9-8.6c0 0 1.2-1.5 1.1-1.9l-2.5 1.1c0 0 .9 1.8 .2 3.3c0 0-0.1-3.3-0.6-3.2c-0.1 0-1.3 .6-1.3 .6c0 0 1.5 3.2 .4 5.5c0 0 .4-3.9-0.8-5.2l-1.8 1c0 0 1.7 3.3 .6 5.9c0 0 .3-4.1-1-5.7l-1.6 1.3c0 0 1.6 3.2 .6 5.4c0 0-0.1-4.7-0.9-5.1c0 0-1.5 1.3-1.7 1.8c0 0 1.1 2.3 .5 3.6c0 0-0.5-3.2-0.8-3.3c0 0-1.4 2.2-1.6 3.6c.1-1.3 .5-2.6 1.2-3.8c-0.8 .2-1.5 .6-2.1 1.2c0 0 .2-1.5 2.5-1.7c0 0 1.1-1.6 1.4-1.7c0 0-2.2-0.2-3.6 .4c0 0 1.2-1.4 4.1-0.7l1.5-1.3c0 0-3-0.4-4.2 0c0 0 1.4-1.2 4.7-0.3l1.7-1c0 0-2.6-0.6-4.1-0.4c0 0 1.6-0.9 4.6 .1l1.2-0.6c0 0-1.8-0.3-2.4-0.4c-0.5-0.1-0.5-0.2-0.5-0.2c1.1-0.2 2.4-0.1 3.5 .4c0 0 2.6-1 2.6-1.2Z' fill={color} opacity='.1' />\n      <path d='M126.3 101.5c0 0 3.5-14.6-7.2-14.7c0 0-1.7-0.6-2.9 .9c0 0 .8 .2 .3 1.6c-0.2 .5-0.3 1-0.4 1.6c0 .7 .1 1.4 .5 2.1c0 0 1 4.4 7.5 7.2c0 0 1.3 1.5 1.6 1.5l-0.6-2.7c0 0-1.9 .5-3.3-0.4c0 0 3.2 .5 3.2 0c0-0.1-0.4-1.4-0.4-1.4c0 0-3.3 .9-5.4-0.6c0 0 3.8 1.1 5.3 .1l-0.7-1.9c0 0-3.6 1.1-6-0.5c0 0 4 1 5.8 .1l-1-1.8c0 0-3.4 1-5.4-0.3c0 0 4.7 .6 5.2-0.1c0 0-1-1.6-1.5-1.9c0 0-2.5 .7-3.6-0.2c0 0 3.2 .1 3.3-0.3c0 0-1.8-1.7-3.2-2.1c1.3 .3 2.5 .9 3.5 1.8c0-0.8-0.3-1.6-0.8-2.3c0 0 1.5 .5 1.2 2.8c0 0 1.4 1.4 1.4 1.7c0 0 .6-2.2 .3-3.6c0 0 1.1 1.4 0 4.1l1 1.8c0 0 .9-2.9 .7-4.2c0 0 1 1.6-0.5 4.7l.8 1.8c0 0 .9-2.4 1-3.9c0 0 .6 1.7-0.8 4.5l.3 1.3c0 0 .7-1.8 .8-2.3c.2-0.5 .3-0.5 .3-0.5c0 1.2-0.3 2.4-1 3.4c0 0 .6 2.7 .7 2.7Z' fill={color} opacity='.1' />\n      <path d='M225.6 116.1c0 0-15.1-11.3-20.5 .9c0 0-1.6 1.7-0.5 3.8c0 0 .6-0.8 2 .5c.5 .5 1.1 .9 1.7 1.2c.8 .4 1.7 .6 2.6 .5c0 0 5.6 1.1 12.1-5c0 0 2.3-0.8 2.5-1.2l-3.4-0.6c0 0-0.3 2.5-2.1 3.6c0 0 2.2-3.5 1.6-3.7c-0.1-0.1-1.8-0.3-1.8-0.3c0 0-0.6 4.4-3.4 6.1c0 0 3.2-3.9 2.8-6.1l-2.6-0.2c0 0-0.5 4.7-3.5 6.7c0 0 3.1-4.1 2.9-6.7l-2.5 .2c0 0-0.6 4.6-3.1 6.2c0 0 3.1-5.1 2.5-6.1c0 0-2.4 .4-2.9 .7c0 0-0.5 3.3-2.1 4.1c0 0 1.8-3.6 1.4-3.9c0 0-2.9 1.3-4.1 2.7c1-1.4 2.4-2.5 3.9-3.1c-0.9-0.4-2-0.5-3-0.4c0 0 1.2-1.4 3.7 .1c0 0 2.4-0.9 2.7-0.8c0 0-2.2-1.8-4.1-2.1c0 0 2.3-0.6 4.8 2l2.6-0.2c0 0-2.9-2.5-4.5-2.9c0 0 2.4-0.3 5.1 2.8l2.6 .1c0 0-2.3-2.3-4-3.1c0 0 2.2 .2 4.7 3.2l1.7 .3c0 0-1.7-1.7-2.3-2.1c-0.5-0.5-0.4-0.6-0.4-0.6c1.4 .6 2.5 1.5 3.4 2.8c0 0 3.4 .8 3.5 .6Z' fill={color} opacity='0' transform='translate(163.1,50) scale(.796,.796) translate(-214.9,-117.2)' style={{animation: '4.3s linear infinite both a1_t,4.3s linear infinite both a1_o'}} />\n      <path d='M147.7 236.8c0 0-12-9-16.3 .7c0 0-1.3 1.4-0.4 3c0 0 .5-0.6 1.6 .4c.4 .4 .8 .7 1.3 1c.7 .3 1.4 .5 2.1 .4c0 0 4.5 .8 9.6-4c0 0 1.9-0.6 2.1-1l-2.8-0.4c0 0-0.2 2-1.6 2.8c0 0 1.7-2.7 1.2-2.9c0-0.1-1.4-0.2-1.4-0.2c0 0-0.5 3.5-2.7 4.8c0 0 2.5-3.1 2.2-4.9l-2.1-0.1c0 0-0.3 3.7-2.8 5.3c0 0 2.5-3.3 2.4-5.3l-2.1 .2c0 0-0.4 3.6-2.4 4.9c0 0 2.5-4.1 2-4.9c0 0-1.9 .3-2.4 .6c0 0-0.3 2.6-1.6 3.2c0 0 1.4-2.9 1.1-3.1c0 0-2.3 1-3.2 2.2c.8-1.1 1.8-2 3.1-2.5c-0.8-0.3-1.6-0.4-2.4-0.3c0 0 1-1.1 2.9 .1c0 0 1.9-0.7 2.2-0.7c0 0-1.8-1.4-3.3-1.6c0 0 1.8-0.5 3.8 1.6l2.1-0.2c0 0-2.3-2-3.6-2.3c0 0 1.9-0.3 4.1 2.2l2 .1c0 0-1.8-1.8-3.2-2.5c0 0 1.8 .2 3.8 2.6l1.3 .2c0 0-1.3-1.3-1.7-1.7c-0.5-0.3-0.4-0.4-0.4-0.4c1.1 .4 2 1.2 2.7 2.2c0 0 2.7 .6 2.8 .5Z' fill={color} opacity='.1' />\n      <path d='M263.9 171.6c0 0-4.8-14.2-13.9-8.6c0 0-1.8 .3-2 2.2c0 0 .8-0.3 1.1 1.2c.1 .6 .3 1.1 .5 1.6c.4 .6 .9 1.2 1.5 1.5c0 0 3.2 3.3 10.2 2.2c0 0 1.9 .5 2.2 .3l-1.9-1.9c0 0-1.4 1.5-3.1 1.4c0 0 3-1.3 2.8-1.7c-0.1-0.1-1.1-1-1.1-1c0 0-2.4 2.6-4.9 2.4c0 0 3.7-1 4.5-2.7l-1.6-1.3c0 0-2.4 2.9-5.3 2.8c0 0 3.9-1.3 4.9-3l-1.8-1.1c0 0-2.3 2.8-4.8 2.7c0 0 4.4-1.9 4.4-2.9c0 0-1.7-0.8-2.2-0.8c0 0-1.8 1.9-3.2 1.7c0 0 2.8-1.6 2.7-1.9c0 0-2.5-0.5-3.9-0.1c1.3-0.4 2.6-0.5 4-0.3c-0.5-0.7-1.1-1.2-1.9-1.6c0 0 1.5-0.3 2.5 1.8c0 0 1.9 .4 2.1 .7c0 0-0.7-2.2-1.8-3.2c0 0 1.8 .6 2.3 3.4l1.8 1c0 0-0.8-2.9-1.7-3.9c0 0 1.7 .9 2.1 4.2l1.6 1.2c0 0-0.4-2.6-1.2-3.9c0 0 1.4 1.2 1.7 4.3l.9 .9c0 0-0.3-1.9-0.5-2.4c-0.1-0.5 0-0.6 0-0.6c.6 1.1 1 2.2 1 3.4c0 0 1.9 2.1 2 2Z' fill={color} opacity='.1' />\n      <path d='M294.1 26.4c0 0-18.7-2.1-17.1 11.2c0 0-0.6 2.3 1.4 3.4c0 0 .1-1 2-0.5c.7 .1 1.4 .2 2.1 .2c.9 0 1.8-0.3 2.5-0.9c0 0 5.4-1.9 7.9-10.5c0 0 1.6-1.8 1.6-2.3l-3.2 1.2c0 0 .9 2.4 0 4.2c0 0 .1-4.1-0.5-4c-0.2 0-1.7 .7-1.7 .7c0 0 1.6 4.1 .1 6.9c0 0 .8-4.9-0.7-6.6l-2.3 1.2c0 0 1.9 4.2 .3 7.5c0 0 .6-5.1-0.8-7.2l-2.1 1.5c0 0 1.8 4.1 .4 6.8c0 0 .2-6-0.9-6.5c0 0-1.8 1.5-2.1 2.1c0 0 1.2 3 .3 4.5c0 0-0.4-4-0.8-4c0 0-1.9 2.5-2.2 4.3c.2-1.6 .8-3.2 1.8-4.6c-1 .2-2 .6-2.8 1.3c0 0 .4-1.9 3.3-1.9c0 0 1.5-1.9 1.9-2c0 0-2.8-0.4-4.6 .3c0 0 1.7-1.7 5.2-0.8l2.1-1.5c0 0-3.8-0.7-5.4-0.2c0 0 1.9-1.5 5.9-0.2l2.2-1.2c0 0-3.1-0.8-5-0.7c0 0 2-0.9 5.7 .4l1.6-0.6c0 0-2.3-0.6-3-0.7c-0.7-0.1-0.7-0.3-0.7-0.3c1.5-0.2 3 .1 4.4 .7c0 0 3.3-1 3.2-1.2Z' fill={color} opacity='0' transform='translate(204.9,30) scale(.796,.796) translate(-285.7,-33.6)' style={{animation: '4.3s linear infinite both a2_t,4.3s linear infinite both a2_o'}} />\n      <path d='M333.8 255c0 0-14.9-1.7-13.6 8.9c0 0-0.5 1.8 1.1 2.7c0 0 .1-0.7 1.6-0.4c.5 .1 1.1 .2 1.6 .2c.8 0 1.5-0.3 2.1-0.8c0 0 4.3-1.5 6.2-8.3c0 0 1.3-1.4 1.3-1.8l-2.6 1c0 0 .8 1.8 0 3.3c0 0 .1-3.3-0.4-3.2c-0.1 0-1.3 .5-1.3 .5c0 0 1.3 3.3 .1 5.6c0 0 .6-3.9-0.6-5.3l-1.8 .9c0 0 1.6 3.4 .2 6c0 0 .5-4.1-0.6-5.8l-1.7 1.2c0 0 1.5 3.3 .4 5.5c0 0 .1-4.8-0.7-5.2c0 0-1.5 1.2-1.8 1.7c0 0 1 2.4 .3 3.6c0 0-0.3-3.2-0.6-3.2c0 0-1.5 2-1.8 3.4c.2-1.3 .7-2.6 1.4-3.7c-0.8 .2-1.5 .5-2.2 1c0 0 .3-1.4 2.6-1.5c0 0 1.3-1.5 1.6-1.6c0 0-2.3-0.3-3.7 .3c0 0 1.3-1.4 4.1-0.6l1.7-1.2c0 0-3-0.6-4.3-0.2c0 0 1.5-1.2 4.7-0.1l1.8-0.9c0 0-2.5-0.7-4-0.6c0 0 1.6-0.8 4.5 .3l1.3-0.5c0 0-1.9-0.4-2.4-0.5c-0.5-0.1-0.6-0.3-0.6-0.3c1.2-0.1 2.4 .1 3.5 .6c0 0 2.7-0.9 2.6-1Z' fill={color} opacity='.1' />\n      <path d='M356.8 202.4c0 0-14.9-1.6-13.7 8.9c0 0-0.4 1.9 1.2 2.8c0 0 0-0.8 1.6-0.4c.5 .1 1 .1 1.6 .1c.7 0 1.4-0.3 2-0.7c0 0 4.3-1.5 6.3-8.3c0 0 1.3-1.5 1.2-1.8l-2.6 .9c0 0 .8 1.9 0 3.3c0 0 .1-3.2-0.3-3.2c-0.1 0-1.4 .6-1.4 .6c0 0 1.3 3.2 .1 5.5c0 0 .6-3.9-0.6-5.3l-1.8 1c0 0 1.6 3.3 .3 5.9c0 0 .5-4-0.7-5.7l-1.7 1.2c0 0 1.5 3.3 .4 5.5c0 0 .1-4.8-0.7-5.2c0 0-1.5 1.2-1.7 1.6c0 0 1 2.4 .2 3.6c0 0-0.3-3.2-0.6-3.2c0 0-1.5 2-1.7 3.5c.1-1.3 .6-2.6 1.4-3.7c-0.8 .1-1.6 .5-2.2 1c0 0 .3-1.5 2.5-1.5c0 0 1.3-1.5 1.6-1.6c0 0-2.2-0.3-3.6 .2c0 0 1.2-1.3 4.1-0.5l1.6-1.3c0 0-3-0.5-4.2-0.1c0 0 1.5-1.2 4.6-0.1l1.8-1c0 0-2.5-0.7-4-0.5c0 0 1.6-0.8 4.6 .3l1.2-0.5c0 0-1.8-0.5-2.4-0.6c-0.5-0.1-0.5-0.2-0.5-0.2c1.2-0.1 2.4 0 3.4 .6c0 0 2.7-0.9 2.7-1.1Z' fill={color} opacity='.1' />\n      <path d='M327.4 130.7c0 0-12-9-16.3 .7c0 0-1.3 1.4-0.4 3c0 0 .5-0.6 1.6 .4c.4 .4 .9 .7 1.3 1c.7 .3 1.4 .5 2.1 .4c0 0 4.5 .8 9.7-4c0 0 1.8-0.6 2-0.9l-2.7-0.5c0 0-0.3 2-1.7 2.9c0 0 1.7-2.8 1.3-3c-0.1-0.1-1.5-0.2-1.5-0.2c0 0-0.5 3.5-2.7 4.8c0 0 2.5-3.1 2.2-4.9l-2-0.1c0 0-0.4 3.7-2.9 5.3c0 0 2.6-3.3 2.4-5.3l-2 .2c0 0-0.4 3.6-2.5 4.9c0 0 2.5-4.1 2-4.9c0 0-1.9 .3-2.3 .6c0 0-0.4 2.6-1.6 3.2c0 0 1.4-2.8 1.1-3.1c0 0-2.4 1-3.3 2.2c.8-1.1 1.9-2 3.1-2.5c-0.8-0.3-1.6-0.4-2.4-0.3c0 0 1-1.1 3 .1c0 0 1.8-0.7 2.1-0.7c0 0-1.8-1.4-3.2-1.6c0 0 1.7-0.5 3.8 1.6l2-0.2c0 0-2.2-2-3.6-2.3c0 0 1.9-0.3 4.1 2.3h2.1c0 0-1.9-1.8-3.2-2.5c0 0 1.8 .2 3.7 2.6l1.4 .2c0 0-1.4-1.3-1.8-1.7c-0.4-0.3-0.4-0.4-0.4-0.4c1.1 .5 2.1 1.2 2.7 2.2c0 0 2.8 .6 2.8 .5Z' fill={color} opacity='.1' />\n      <path d='M434.9 123.5c0 0-5.2-18.1-16.9-11.6c0 0-2.4 .3-2.7 2.7c0 0 1-0.3 1.3 1.6c.1 .6 .3 1.3 .6 1.9c.3 .9 1 1.6 1.8 2.1c0 0 3.8 4.2 12.6 3.3c0 0 2.3 .8 2.8 .5l-2.4-2.5c0 0-1.8 1.8-3.9 1.6c0 0 3.9-1.5 3.6-2c-0.1-0.1-1.3-1.3-1.3-1.3c0 0-3.1 3.1-6.4 2.8c0 0 4.9-1.2 5.9-3.2l-2-1.7c0 0-3.1 3.4-6.8 3.2c0 0 5-1.4 6.4-3.5l-2.2-1.4c0 0-3.1 3.3-6.2 3c0 0 5.6-2.1 5.7-3.3c0 0-2.1-1.1-2.8-1.2c0 0-2.3 2.3-4 2c0 0 3.6-1.8 3.4-2.2c0 0-3.1-0.8-4.8-0.4c1.6-0.5 3.3-0.5 4.9-0.1c-0.5-0.9-1.3-1.6-2.2-2.1c0 0 1.9-0.4 3 2.3c0 0 2.3 .7 2.6 1c0 0-0.7-2.8-2-4.1c0 0 2.1 .8 2.6 4.5l2.2 1.3c0 0-0.8-3.7-1.9-5c0 0 2.1 1.2 2.4 5.4l2 1.6c0 0-0.4-3.3-1.3-5c0 0 1.7 1.6 1.8 5.5l1.2 1.2c0 0-0.3-2.3-0.5-3c-0.1-0.7 0-0.8 0-0.8c.7 1.3 1.1 2.8 1 4.3c0 0 2.3 2.7 2.5 2.6Z' fill={color} opacity='0' transform='translate(339,31.1) scale(.796,.796) translate(-425.1,-117.3)' style={{animation: '4.3s linear infinite both a3_t,4.3s linear infinite both a3_o'}} />\n      <path d='M323.8 55.6c0 0-18.8-1.1-16.6 12c0 0-0.4 2.4 1.7 3.4c0 0 0-1 1.9-0.6c.7 .1 1.4 .1 2.1 .1c.9-0.1 1.8-0.5 2.5-1.1c0 0 5.3-2.1 7.3-10.8c0 0 1.5-1.9 1.5-2.4l-3.2 1.4c0 0 1.1 2.3 .3 4.2c0 0-0.1-4.1-0.8-4c-0.1 0-1.6 .8-1.6 .8c0 0 1.9 4 .4 6.9c0 0 .6-5-1-6.6l-2.2 1.3c0 0 2.2 4.1 .7 7.5c0 0 .4-5.2-1.2-7.2l-2 1.6c0 0 2 4 .8 6.8c0 0-0.2-6-1.3-6.4c0 0-1.7 1.5-2 2.2c0 0 1.4 2.9 .5 4.5c0 0-0.5-4-1-4.1c0 0-1.7 2.7-1.9 4.5c.1-1.7 .6-3.3 1.5-4.7c-1 .2-1.9 .7-2.7 1.4c0 0 .3-1.9 3.1-2.1c0 0 1.5-2 1.9-2.1c0 0-2.9-0.2-4.6 .5c0 0 1.5-1.7 5.1-1l2-1.6c0 0-3.8-0.5-5.3 .1c0 0 1.8-1.6 5.8-0.5l2.2-1.3c0 0-3.2-0.6-5.1-0.4c0 0 2-1.1 5.7 .1l1.6-0.7c0 0-2.3-0.5-3-0.5c-0.7-0.1-0.7-0.3-0.7-0.3c1.4-0.2 3-0.1 4.4 .5c0 0 3.3-1.2 3.2-1.4Z' fill={color} opacity='0' transform=' scale(.796,.796) translate(-298.9,-50.2)' style={{animation: '4.3s linear infinite both a4_t,4.3s linear infinite both a4_o,4.3s linear infinite both a4_mo', offsetPath: 'path(\"M213.848,-10.1423C258.399,84.4441,304,211,305.974,296.901L305.974,296.901\")', offsetRotate: '0deg'}} />\n      <path d='M385.3 83c0 0-9.6-16.2-19.3-7c0 0-2.1 .9-1.8 3.3c0 0 .8-0.6 1.6 1.2c.3 .6 .6 1.2 1.1 1.8c.5 .7 1.3 1.2 2.2 1.4c0 0 4.8 3.2 13.1 0c0 0 2.4 .2 2.8-0.1l-2.9-1.8c0 0-1.3 2.1-3.4 2.5c0 0 3.4-2.4 3-2.8c-0.1-0.1-1.6-1-1.6-1c0 0-2.3 3.8-5.5 4.3c0 0 4.4-2.3 4.9-4.6l-2.3-1.1c0 0-2.2 4.1-5.8 4.8c0 0 4.5-2.6 5.3-5l-2.5-0.8c0 0-2.2 4-5.2 4.5c0 0 4.9-3.5 4.6-4.6c0 0-2.3-0.6-2.9-0.5c0 0-1.7 2.8-3.5 3c0 0 3-2.7 2.8-3.1c0 0-3.2 .1-4.8 .9c1.5-0.9 3.1-1.3 4.8-1.4c-0.7-0.7-1.7-1.2-2.7-1.4c0 0 1.7-0.8 3.5 1.4c0 0 2.4 .1 2.8 .4c0 0-1.4-2.5-3-3.5c0 0 2.3 .2 3.6 3.7l2.5 .7c0 0-1.7-3.4-3-4.4c0 0 2.3 .6 3.6 4.6l2.3 1.1c0 0-1.2-3-2.5-4.4c0 0 2.1 1 3.2 4.8l1.4 .9c0 0-0.9-2.2-1.2-2.8c-0.3-0.7-0.2-0.8-0.2-0.8c1 1.1 1.7 2.5 2.1 3.9c0 0 2.8 2 2.9 1.9Z' fill={color} opacity='0' transform=' scale(.796,.796) translate(-357.4,-72.2)' style={{ animation: '4.3s linear infinite both a5_t,4.3s linear infinite both a5_o,4.3s linear infinite both a5_mo', offsetPath: 'path(\"M260.348,7.35766L260.348,7.35766C271.097,117.193,248,236,235.768,296.901L235.768,296.901\")', offsetRotate: '0deg'}} />\n      <path d='M324.5 117.1c0 0 .5-18.9-12.6-16.2c0 0-2.3-0.4-3.3 1.8c0 0 1 0 .7 1.9c-0.1 .7-0.1 1.3 0 2c.1 1 .5 1.8 1.1 2.5c0 0 2.4 5.2 11.1 7c0 0 1.9 1.4 2.4 1.4l-1.5-3.2c0 0-2.2 1.2-4.2 .4c0 0 4.1-0.2 4-0.8c0-0.2-0.8-1.7-0.8-1.7c0 0-4 2-6.9 .7c0 0 4.9 .4 6.6-1.2l-1.4-2.2c0 0-4.1 2.3-7.5 .9c0 0 5.2 .2 7.1-1.4l-1.6-2c0 0-4 2.2-6.8 1.1c0 0 6-0.4 6.4-1.5c0 0-1.6-1.7-2.3-2c0 0-2.9 1.5-4.5 .7c0 0 4-0.6 4-1.1c0 0-2.7-1.7-4.5-1.8c1.7 0 3.3 .5 4.8 1.4c-0.3-1-0.8-2-1.5-2.7c0 0 1.9 .2 2.1 3.1c0 0 2.1 1.4 2.2 1.8c0 0 .2-2.9-0.7-4.6c0 0 1.9 1.5 1.2 5.1l1.7 1.9c0 0 .4-3.7-0.3-5.3c0 0 1.7 1.8 .7 5.8l1.3 2.2c0 0 .6-3.2 .3-5.1c0 0 1.2 1.9 .1 5.7l.8 1.5c0 0 .3-2.3 .4-3c0-0.7 .2-0.7 .2-0.7c.3 1.4 .2 3-0.3 4.4c0 0 1.3 3.2 1.5 3.2Z' fill={color} opacity='0' transform=' scale(.796,.796) translate(-302.7,-98)' style={{ animation: '4.3s linear infinite both a6_t,4.3s linear infinite both a6_o,4.3s linear infinite both a6_mo', offsetPath: 'path(\"M216.848,27.8577C246.096,131.779,202,259,245.524,317.032L245.524,317.032\")', offsetRotate: '0deg'}} />\n      <ellipse fill={color} opacity='.1' rx='87.1' ry='16.5' transform='translate(51,16) scale(.796,.796) translate(175.6,366.6)' />\n      <path d='M233.8 176.9c-3.9 5.7-18.1 2.7-18.1 2.7l-10.9-10.3l-1.5-1.4l2.5-5.2c0 0 .7 .2 2.1 .6c7.1 2 29.2 8.9 25.9 13.6Z' fill='#efb7b9' />\n      <path d='M207.9 163.3c-0.5 1.7-1.8 4.2-3.1 6l-1.5-1.4l2.5-5.2c0 0 .8 .2 2.1 .6Z' opacity='.1' />\n      <path fill={color} d='M216.6 155.8l-14.7 9.3l44.2 1.5l8.1-12.5Z' transform='translate(233.5,146.2) rotate(2.3) scale(.796,.796) translate(-228.8,-161.8)' style={{animation: '4.3s linear infinite both a7_d'}} />\n      <path d='M170.3 104c0 0-10.1 4.4-9.6 15.5c.3 7 1.1 14.1 2.3 21.1c0 0-2.1 16.6 6.5 20.9c8.6 4.2 16.6 7.7 16.6 7.7c0 0 13.4 1.5 15.1 2.1c1.7 .6 6.9-8.6 6-10c-1-1.4-13.4-4.4-14.9-6.8c-1.6-2.4-5.3-3.8-5.3-3.8c0 0-3.7-2.3-4-4.4c-0.2-2 .8-3.5 1-4.4c.3-0.9 .9-9.6 .9-9.6c0 0 4.2-31-14.6-28.3Z' fill='#dce6f2' />\n      <path d='M176.9 140.2c0 0-13.8 2.3-12.5 7.1c0 0 5.1-5.2 12.5-7.1Z' opacity='.1' />\n      <path d='M177 142.1c0 0-7.6 6.3-6.1 6.6c1.5 .3 6.1-6.6 6.1-6.6Z' opacity='.1' />\n      <path d='M180.7 144.3c0 0-2 4.2-0.8 3.9c1.3-0.3 .8-3.9 .8-3.9Z' opacity='.1' />\n      <path d='M208.4 163.7l-0.8-0.2c.2-0.8 .3-1.4 .1-1.7c-1-1.5-13.3-4.4-14.9-6.8c-1.6-2.4-5.2-3.9-5.2-3.9c0 0-3.8-2.3-4-4.3c-0.3-2.1 .7-3.6 .9-4.5c.3-0.9 .9-9.6 .9-9.6c0 0 4.3-31-14.6-28.3c0 0-10.1 4.5-9.6 15.5c.3 7.1 1.1 14.2 2.3 21.2c0 0-2.1 16.5 6.5 20.8c8.6 4.3 16.6 7.8 16.6 7.8c0 0 13.5 1.4 15.1 2c.7 .3 1.8-0.9 2.9-2.5l.7 .6l10.9 10.2c0 0 14.2 3 18.1-2.6c3.4-4.8-18.8-11.6-25.9-13.7Z' opacity='.1' />\n      <path d='M164.4 62.6c-0.3 .1-0.7 .2-1 .4c-0.4 .4-0.4 .9-0.5 1.4c-0.1 .7-0.4 1.3-0.8 1.9c.4 0 .9 0 1.3-0.2c-0.1 .5-0.2 1.1-0.4 1.6c.5 0 1-0.3 1.2-0.8c.2-0.4 .4-0.9 .5-1.3c0-0.2 .1-0.3 .2-0.4c.3-0.5 1-0.3 1.6-0.2c.9 .1 1.8-0.4 2.3-1.2c.6-0.9 .7-3.2-0.7-3.4c-1.5-0.3-2.4 1.8-3.7 2.2Z' fill='#965d7b' />\n      <g opacity='.1' transform='translate(162,62.9) scale(.796,.796)'>\n        <path d='M1.6 .8c.1-0.2 .1-0.4 .1-0.7c-0.4 .4-0.4 1.1-0.6 1.7c0 .4-0.1 .7-0.3 1.1c.4-0.6 .7-1.3 .8-2.1Z' />\n        <path d='M1.8 4.9c.2-0.6 .4-1.3 .5-1.9c-0.5 .2-1.1 .3-1.6 .2c-0.2 .4-0.3 .7-0.6 1c.6 .1 1.2 0 1.7-0.3c-0.1 .7-0.3 1.4-0.5 2c.6 0 1.2-0.3 1.5-0.9c.1-0.2 .2-0.4 .3-0.7c-0.3 .4-0.8 .7-1.3 .6Z' />\n        <path d='M6.1 1.6c-0.7-0.1-1.5-0.3-2 .2c-0.1 .1-0.2 .3-0.2 .5c-0.1 .1-0.1 .3-0.1 .4c.4-0.4 1.2-0.2 1.8-0.1c1.2 .1 2.4-0.5 3-1.5c.2-0.2 .3-0.5 .4-0.7c-0.7 .8-1.8 1.3-2.9 1.2Z' />\n      </g>\n      <path fill='#dce6f2' d='M176.3 95.1l6 7.3l-0.8 7.2l-7.2-11.3Z' />\n      <path opacity='.1' d='M182.3 102.4l-0.7 6.8l-0.1 .4l-6.5-10.2l-0.7-1.1l.2-0.3l1.8-2.9l.4 .5Z' />\n      <path d='M185.4 85.4c-2 .5-4 2.5-5.6 5c-1.2 1.7-2.2 3.4-3.1 5.2c-0.6 1.1-1 2.2-1.4 3.1l-0.3 .7c-0.7 1.6-1.1 2.7-1.1 2.7c0 0-15.5-11.7-13.1-12.5c.8-0.2 1.9-2 3-4.3l.1-0.2c.7-1.5 1.4-3.1 2-4.6c1.2-3.1 2.1-5.7 2.1-5.7c0 0 23.6 8.8 17.4 10.6Z' fill='#efb7b9' />\n      <path d='M187.8 299c-3.2 1.4-10.4 0-10.4 0l-3-0.2c-4-0.3-10.6-0.7-12.9-0.9c-3.4-0.3-2.6-1.7-2.6-1.7v-8.4l16.5-4.2c0 0 6.6 2.3 8.4 4.2c1.6 1.9 2.6 .5 5.7 1c.1 0 .3 0 .4 .1c2.9 .6 4.5 .9 5.4 3.3c.2 .5 .3 1 .4 1.5c.9 3.9-4.8 3.8-7.9 5.3Z' fill='#a36468' />\n      <path d='M195.3 292.2c-0.6 .4-1.2 .7-1.9 .9c-2.1 1-4.2 2.2-6.4 3.2c-2.2 .9-4.5 1.6-6.9 1.4c-1.2-0.1-2.5-0.4-3.7-0.1c-0.7 .3-1.4 .7-2 1.2c-4-0.3-10.6-0.7-12.9-0.9c-3.4-0.3-2.6-1.7-2.6-1.7v-0.9c.2 0 .3-0.1 .5-0.1c.8 0 1.6 .1 2.4 .4c1.7 .4 3.4 .9 5.1 1.4c.3-1.1 1-2 1.9-2.6c1-0.5 2.1-0.7 3.2-0.7c2.7 0 5.2 1.3 7.8 1.4c.8 .1 1.5 0 2.2-0.3c.3-0.2 .7-0.5 1-0.7c.6-0.3 1.2-0.5 1.8-0.6c1.7-0.4 3.4-1 5.1-1.6c.5-0.2 1-0.5 1-1.1c-0.1-0.6-1.2-0.7-1.5-1.3c-0.1-0.2 0-0.5 .1-0.7c.1 0 .3 0 .5 .1c2.8 .6 4.4 .9 5.3 3.3Z' opacity='.1' />\n      <path d='M184.4 317.4c-3.7 1.7-12.2 0-12.2 0l-3.6-0.2c-4.6-0.3-12.4-0.8-15.1-1c-4-0.4-3-2-3-2v-9.9l19.4-4.9c0 0 7.7 2.6 9.8 4.9c2 2.2 3.1 .5 6.7 1.1c.2 0 .4 .1 .6 .1c3.4 .8 5.2 1.1 6.3 3.9c.2 .6 .4 1.2 .5 1.8c1 4.5-5.7 4.5-9.4 6.2Z' fill='#a36468' />\n      <path d='M193.3 309.4c-0.7 .4-1.5 .8-2.2 1.1c-2.6 1.2-5 2.6-7.6 3.7c-2.5 1.1-5.3 1.9-8.1 1.7c-1.5-0.1-3-0.5-4.3-0.1c-0.9 .4-1.7 .8-2.5 1.4c-4.6-0.3-12.4-0.8-15.1-1c-4-0.4-3-2-3-2v-1.2c.1 0 .3 0 .5 0c.9 0 1.9 .1 2.8 .4l6 1.6c.4-1.2 1.2-2.3 2.4-2.9c1.1-0.6 2.4-0.9 3.7-0.9c3.1 .1 6.1 1.5 9.2 1.7c.8 .1 1.7-0.1 2.5-0.4c.4-0.2 .8-0.6 1.2-0.8c.7-0.3 1.4-0.6 2.1-0.7c2.1-0.5 4.1-1.2 6-1.9c.6-0.3 1.2-0.7 1.1-1.2c-0.1-0.8-1.3-0.9-1.6-1.6c-0.1-0.3-0.1-0.6 0-0.9c.2 .1 .4 .1 .6 .1c3.3 .8 5.2 1.1 6.3 3.9Z' opacity='.1' />\n      <path d='M175.9 249.3l-1 24.7c0 0-1.6 5.1-0.7 6.5c.8 1.5 2.3 2.9 1.7 3.8c-0.5 .8-6.8 10.1-8.8 6.5c-2.1-3.5-4.1-18.9-4.1-18.9l1.9-19l11-3.6Z' fill='#444053' />\n      <path d='M180.5 187.7l2.9 3.9v33.9c0 0 .9 9.1 0 11c-0.8 1.8-5.2 5.6-5.2 5.6l-3.6-18.7l.8-19.8l5.1-15.9Z' fill='#444053' />\n      <path d='M175.9 249.3l-1 24.7c0 0-1.6 5.1-0.7 6.5c.8 1.5 2.3 2.9 1.7 3.8c-0.5 .8-6.8 10.1-8.8 6.5c-2.1-3.5-4.1-18.9-4.1-18.9l1.9-19l11-3.6Z' opacity='.1' />\n      <path d='M180.5 187.7l2.9 3.9v33.9c0 0 .9 9.1 0 11c-0.8 1.8-5.2 5.6-5.2 5.6l-3.6-18.7l.8-19.8l5.1-15.9Z' opacity='.1' />\n      <path d='M183.4 173.2v18.3l-3.3 14.3c0 0-1 34.6-0.1 38.8c.9 4.2-3.1 8.1-3.1 8.1c0 0-2.4 .3-2.4 2.1c0 1.8-3.9 7.1-3.9 7.1l.1 10.2c0 0 1.7 19.2-0.9 22.9c-2.7 3.6 .9 4.2 .9 4.2c-3.3 10.7-19 8.2-20.5 7c-1.4-1.1 0-24.4 0-24.4c0 0 3.6-35.4 6.3-37c2.8-1.6 .1-3.5 1.1-5.9c.9-2.3-1-8.8-1-8.8c0 0-0.7-7.6-2.7-11.3c-2-3.6-1.7-13.7-1.7-13.7c0 0-5.5-7.4-7.2-10.3c-1.6-2.9-2.7-10.3-2.3-16c.3-3.8 2.3-9.4 3.6-12.6c.6-1.5 1-2.5 1-2.5l.4 .1l21.5 5.6l14.2 3.8Z' fill='#444053' />\n      <path d='M185.4 85.4c-2 .5-4 2.5-5.6 5h-0.5c-5 0-9.7-2.7-12.2-7.1c-0.5-0.9-0.9-1.8-1.2-2.8c1.2-3.1 2.1-5.8 2.1-5.8c0 0 23.6 8.9 17.4 10.7Z' opacity='.1' />\n      <path d='M193.4 75.5c0 5.9-3.7 11.2-9.2 13.2c-5.6 2.1-11.8 .5-15.6-4c-3.8-4.5-4.4-10.9-1.5-16.1c.4-0.7 .9-1.5 1.4-2.1c1-1.1 2.1-2.1 3.3-2.9c4.2-2.6 9.4-2.9 13.9-0.7c4.4 2.3 7.3 6.6 7.7 11.6c0 .3 0 .7 0 1Z' fill='#efb7b9' />\n      <path d='M181.6 109.2l-0.1 .4l-6.5-10.2c-0.7 1.6-1.1 2.7-1.1 2.7c0 0-15.5-11.7-13.1-12.5c.8-0.2 1.9-2 3-4.3l.1-0.2c1.2 3.4 7.8 10.2 10.6 12.9c.3 .3 .6 .6 .8 .8l.4 .3l.2 .3c1 1 5.2 5.6 5.7 9.8Z' opacity='.1' />\n      <path d='M186.5 144l-0.8 23l-0.1 4.1c0 0-8.5-0.8-16.4-1.6c-6.4-0.7-12.4-1.5-13.3-1.9c-1.2-0.6-3.7-1-5.7-1.3c-1.6-0.2-2.8-0.3-2.8-0.3c0 0-0.4 .1-1.1 .3c-1.5 .2-4.2 .5-5.8-0.9c-2-1.7 3.3-8 4.6-9.5l.3-0.3l-0.5-4.6l-1.3-11.8c0 0-0.8-6.8-2-10.4c-0.3-1-0.5-2.1-0.7-3.2c-0.4-3.3-0.2-6.7 .7-9.9c.4-1.4 .6-2.8 .7-4.2c.2-3.7 11.3-17.7 14.1-19c1.2-0.6 2.2-1.6 2.8-2.8c.2-0.4 .3-0.8 .4-1.3c1.2-5.1 4.2-3.1 4.2-3.1c.7 4.1 11.9 14.7 11.9 14.7l.2 .2c1.1 1.1 6 6.4 5.7 11c-0.1 1.7 .2 3.4 .7 4.9c2.3 7.2 3.6 14.6 3.9 22.1l.3 5.8Z' fill='#dce6f2' />\n      <path d='M170.7 116.6c0 0-2.8 6.7-4.9 7.7c-2 1.1 5.8 2.3 4.9-7.7Z' opacity='.1' />\n      <path d='M172.7 129.1c0 0-6.3 .8-6.3 1.9c0 1.2 6.3-1.9 6.3-1.9Z' opacity='.1' />\n      <path d='M179.3 136.7c0 0-9.1 19.5-11.7 20.1c-2.6 .6 11.7-20.1 11.7-20.1Z' opacity='.1' />\n      <path d='M175.5 100.9l-7.6 3.3l-9.1-13.8c.2-0.4 .3-0.8 .4-1.2c1.2-5.1 4.2-3.1 4.2-3.1c.7 4 11.9 14.6 11.9 14.6l.2 .2Z' opacity='.1' />\n      <path d='M175.9 100.2l-7.6 3.2l-9.1-13.8c.2-0.3 .3-0.8 .4-1.2c1.2-5.1 4.2-3.1 4.2-3.1c.7 4 11.9 14.6 11.9 14.6l.2 .3Z' fill='#dce6f2' />\n      <path d='M185.6 171.1c0 0-8.5-0.8-16.4-1.6l14.2 3.7v4.3c-0.6 .6-1.1 .9-1.5 .7c-1.6-0.7-15-2.8-15-2.8c0 0-7.8-4-16.1-8.7c-0.2-0.1-0.4-0.2-0.6-0.4c-1-0.6-1.8-1.5-2.5-2.4c-1.6-2.3-2.3-5.2-2.6-8c-0.2-1.6-0.3-3.2-0.2-4.9c0-1.8 .2-3.7 .5-5.5c-0.9-7-1.2-14.1-1.2-21.2c.1-11.1 10.4-15 10.4-15c19-1.7 13.1 29 13.1 29c0 0-1.1 8.7-1.4 9.6c-0.3 .9-1.4 2.4-1.2 4.4c.1 2.1 3.8 4.6 3.8 4.6c0 0 3.5 1.6 5 4.1c1 1.8 7.9 4.3 11.8 6l-0.1 4.1Z' opacity='.1' />\n      <path d='M192 66.8c0 .6-0.1 1.3-0.4 1.9c-0.2 .4-0.4 .9-0.7 1.4c-0.4 .8-1 1.5-1.7 2.1c-0.9 .7-2.1 .8-3.2 1.1c-1.1 .3-2.2 .7-2.8 1.6c-0.4 .6-0.6 1.3-0.7 1.9c-0.1 .7-0.4 1.4-0.8 1.9c-0.4 .6-1.2 .7-1.8 .5c-0.4-0.3-0.6-0.6-0.7-1c-0.5-1-0.6-2.1-0.8-3.2c-0.2-1.1-0.4-2.2-1.1-3.1c-0.7-0.9-1.8-1.4-2.9-1.1c-0.7 .3-1.3 .8-1.6 1.5c-0.3 .7-0.5 1.5-0.6 2.2c-0.5 2.7-1 5.3-1.7 8c0 .1-0.1 .2-0.1 .3c-0.1 .1-0.3 .1-0.4 .1c-0.9 .2-1.8-0.5-2.6-0.4c-0.1 0-0.2 0-0.3 0c-3-5.1-2.4-11.5 1.4-16h.1c.6-0.2 1.1-0.6 1.6-1c.5-0.6 1-1.2 1.5-1.9l.3-0.3c.9-1.1 2-2.1 3.1-3c.3-0.2 .7-0.4 1.1-0.5c.3-0.1 .6-0.1 1-0.1c1.3 .2 2.7 .3 4.1 .2c.9-0.2 1.9-0.3 2.8-0.3c2.5 .1 4.7 1.8 6.2 3.8c.9 1 1.6 2.1 1.7 3.4Z' opacity='.1' />\n      <path d='M165.2 69c-0.5 .9-1.5 1.5-1.9 2.5c-0.5 1.4 .4 3.2-0.5 4.5c-0.2 .4-0.7 .7-0.8 1.2c-0.3 .8 .4 1.7 .2 2.6c-0.2 .8-1.3 1.6-1 2.4c.2 .4 .5 .6 .9 .8c.6 .3 1.3 .5 1.9 .4c1.1-0.2 1.9-1.2 3-1.3c.9-0.1 1.7 .6 2.6 .4c.2 0 .3 0 .4-0.1c.1-0.1 .1-0.2 .1-0.3c.7-2.7 1.3-5.3 1.8-8c.1-0.7 .3-1.5 .6-2.2c.3-0.7 .8-1.2 1.5-1.5c1.1-0.3 2.3 .2 3 1.1c.6 .9 .9 2 1.1 3.1c.1 1.1 .3 2.2 .7 3.2c.1 .4 .4 .7 .7 1c.6 .3 1.4 0 1.9-0.5c.4-0.5 .6-1.2 .7-1.9c.1-0.6 .4-1.3 .7-1.9c.6-0.9 1.8-1.3 2.9-1.6c1-0.3 2.2-0.4 3.1-1.1c.7-0.6 1.3-1.3 1.7-2.1c.6-1 1.2-2.1 1.1-3.3c0-1.3-0.8-2.4-1.6-3.4c-1.6-2-3.7-3.7-6.2-3.8c-1 .1-1.9 .2-2.9 .3c-1.3 .1-2.7 0-4.1-0.1c-0.3-0.1-0.6-0.1-1 0c-0.4 .1-0.7 .3-1 .6c-1.2 .8-2.2 1.8-3.1 2.9c-0.6 .7-1.2 1.5-1.9 2.2c-0.4 .4-1 .8-1.6 1c-0.4 .1-0.7 0-1.1 .1c-1.2 .4-1.3 1.9-1.9 2.8Z' fill='#965d7b' />\n      <g opacity='.1' transform='translate(160.9,65.6) scale(.796,.796)'>\n        <path d='M1.7 16.4c.1-0.7 0-1.3-0.3-1.9c0 0 0 .1 0 .1c-0.2 .7 .1 1.4 .2 2.1c.1-0.1 .1-0.2 .1-0.3Z' />\n        <path d='M2.9 8.3c0 .7 0 1.4 0 2c.1-0.6 .1-1.3 0-2Z' />\n        <path d='M37.3 3.7c-0.6 1-1.3 1.9-2.2 2.7c-1.2 .8-2.6 1-4 1.3c-1.3 .4-2.8 .9-3.5 2.1c-0.5 .7-0.8 1.5-0.9 2.4c-0.1 .8-0.5 1.6-1 2.3c-0.5 .7-1.5 1-2.3 .6c-0.4-0.3-0.7-0.7-0.9-1.2c-0.5-1.2-0.7-2.6-0.9-4c-0.2-1.4-0.6-2.8-1.4-3.9c-0.8-1.1-2.3-1.8-3.7-1.4c-0.8 .3-1.6 1-1.9 1.9c-0.4 .9-0.7 1.8-0.8 2.7c-0.6 3.4-1.3 6.7-2.2 10.1c0 .1 0 .2-0.1 .3c-0.1 .2-0.3 .2-0.5 .2c-1.1 .2-2.2-0.6-3.3-0.5c-1.4 .1-2.4 1.4-3.7 1.6c-0.9 .1-1.7-0.1-2.5-0.5c-0.3-0.2-0.6-0.4-0.9-0.7c-0.2 .4-0.3 .8-0.2 1.2c.2 .5 .6 .8 1.1 1c.8 .4 1.6 .6 2.5 .5c1.3-0.2 2.3-1.5 3.7-1.6c1.1-0.1 2.2 .7 3.3 .5c.2 0 .4 0 .5-0.2c.1-0.1 .1-0.2 .1-0.3c.9-3.3 1.6-6.7 2.2-10.1c.1-0.9 .4-1.8 .8-2.7c.3-0.9 1.1-1.6 1.9-1.9c1.4-0.4 2.8 .3 3.7 1.4c.8 1.1 1.2 2.5 1.4 3.9c.2 1.3 .4 2.8 .9 4c.2 .5 .5 .9 .9 1.2c.8 .4 1.8 .1 2.3-0.6c.5-0.7 .9-1.5 1-2.3c.1-0.9 .4-1.7 .9-2.4c.7-1.2 2.2-1.7 3.5-2.1c1.4-0.3 2.8-0.5 4-1.3c.9-0.8 1.6-1.7 2.2-2.7c.7-1.3 1.4-2.7 1.3-4.2c0-0.1 0-0.3-0.1-0.5c-0.2 1.1-0.6 2.2-1.2 3.2Z' />\n      </g>\n      <path d='M160.2 239.3c0 0 6.6 6.4 9.5 5.9c0 0-8.1-0.6-9.5-5.9Z' opacity='.1' />\n      <path d='M158.8 242.3c0 0 .6 3.3 2.2 3c1.6-0.3-2.2-3-2.2-3Z' opacity='.1' />\n      <path d='M169.2 297.3c0 0-9.4 7.3-7.8 7.5c1.6 .2 7.8-7.5 7.8-7.5Z' opacity='.1' />\n      <path fill={color} d='M181.7 152.8l30.3-5v28.7l-28.8-1.5Z' />\n      <path opacity='.05' d='M181.7 152.8l30.3-5v28.7l-28.8-1.5Z' />\n      <path fill={color} d='M212 147.8l36.4 2.7l-2 25l-34.4 1Z' />\n      <path opacity='.1' d='M212 147.8l36.4 2.7l-2 25l-34.4 1Z' />\n      <path fill={color} d='M170.7 143.2l27.3-3.3l14 7.9l-30.3 5Z' />\n      <path fill={color} d='M218.7 155.3v39.2l-14.2-1.4l-6.2-0.7l-1.9-0.2l-6.2-0.6l-8.5-0.9v-37.9l30.3 2Z' />\n      <path fill={color} d='M248.4 150.5v38.3l-11.4 2.2l-5.5 1.1l-12.8 2.4v-39.2Z' />\n      <path opacity='.05' d='M248.4 150.5v38.3l-11.4 2.2l-5.5 1.1l-12.8 2.4v-39.2Z' />\n      <path fill={color} d='M170.7 161l11-8.2l37 2.5l-5.5 9.1Z' />\n      <path fill='#fff' opacity='.1' d='M170.7 161l11-8.2l37 2.5l-5.5 9.1Z' />\n      <path fill={color} d='M248.4 150.5l-29.7 4.8l9.6 8.6l31.9-5.3Z' />\n      <path fill='#fff' opacity='.1' d='M248.4 150.5l-29.7 4.8l9.6 8.6l31.9-5.3Z' />\n      <path fill='#fff' opacity='.1' d='M237 191l-5.5 1.1v-8.2l5.1-1.3Z' />\n      <path fill='#fff' opacity='.1' d='M204.5 187.7v5.4l-6.2-0.7v-4.7Z' />\n      <path fill='#fff' opacity='.1' d='M196.4 189.4v2.8l-6.2-0.6v-2.2Z' />\n      <path d='M215 184.8c-4.3 5.4-18.3 1.7-18.3 1.7l-10.3-10.9l-1.5-1.4l2.8-5.2c0 0 .8 .3 2.1 .7c7 2.5 28.7 10.5 25.2 15.1Z' opacity='.1' />\n      <path d='M214.6 184c-4.3 5.4-18.3 1.7-18.3 1.7l-10.3-10.9l-1.4-1.4l2.7-5.2c0 0 .8 .3 2.1 .8c7 2.4 28.7 10.4 25.2 15Z' fill='#efb7b9' />\n      <path d='M189.4 169c-0.6 1.6-2 4.1-3.5 5.8l-1.4-1.4l2.8-5.2c0 0 .8 .3 2.1 .8Z' opacity='.1' />\n      <path d='M155 107.7c0 0-10.3 4-10.4 15c-0.1 7.1 .3 14.2 1.2 21.3c0 0-3 16.4 5.4 21.1c8.3 4.7 16.1 8.7 16.1 8.7c0 0 13.4 2.1 15 2.8c1.7 .7 7.4-8.1 6.5-9.6c-0.9-1.5-13.1-5.1-14.5-7.6c-1.5-2.5-5-4.1-5-4.1c0 0-3.7-2.5-3.8-4.6c-0.1-2 .9-3.5 1.2-4.4c.3-0.9 1.4-9.5 1.4-9.5c0 0 5.9-30.8-13.1-29.1Z' fill='#dce6f2' />\n      <path d='M159.7 144.2c0 0-13.9 1.6-12.9 6.5c0 0 5.3-4.9 12.9-6.5Z' opacity='.1' />\n      <path d='M159.7 146.2c0 0-7.9 5.8-6.4 6.2c1.4 .4 6.4-6.2 6.4-6.2Z' opacity='.1' />\n      <path d='M163.3 148.6c0 0-2.3 4-1 3.8c1.3-0.2 1-3.8 1-3.8Z' opacity='.1' />\n      <path d='M318.9 164.3c0 0-10.1-15.9-19.5-6.4c0 0-2.1 1-1.7 3.3c0 0 .8-0.5 1.6 1.2c.3 .6 .7 1.2 1.1 1.7c.6 .8 1.4 1.3 2.3 1.5c0 0 4.9 3 13.1-0.4c0 0 2.4 .1 2.8-0.2l-3-1.8c0 0-1.2 2.2-3.2 2.6c0 0 3.2-2.4 2.8-2.9c-0.1-0.1-1.6-0.9-1.6-0.9c0 0-2.1 3.9-5.3 4.4c0 0 4.3-2.4 4.7-4.7l-2.3-1c0 0-2.1 4.2-5.7 4.9c0 0 4.4-2.7 5.1-5.1l-2.5-0.7c0 0-2 4-5 4.6c0 0 4.7-3.6 4.5-4.8c0 0-2.3-0.5-3-0.3c0 0-1.6 2.8-3.3 3c0 0 2.9-2.7 2.7-3.1c0 0-3.2 .1-4.8 1c1.4-0.9 3-1.4 4.7-1.5c-0.7-0.7-1.7-1.2-2.7-1.4c0 0 1.7-0.8 3.5 1.4c0 0 2.4 0 2.8 .2c0 0-1.5-2.4-3.1-3.4c0 0 2.3 .2 3.7 3.6l2.5 .7c0 0-1.8-3.4-3.2-4.3c0 0 2.4 .5 3.8 4.5l2.4 1c0 0-1.3-3-2.7-4.4c0 0 2.1 1 3.3 4.7l1.5 .8c0 0-1-2.1-1.3-2.7c-0.4-0.6-0.2-0.8-0.2-0.8c1 1.1 1.8 2.4 2.1 3.9c0 0 3 2 3.1 1.8Z' fill={color} opacity='0' transform='translate(86.1,14.9) scale(.796,.796) translate(-308.3,-160.8)' style={{ animation: '4.3s linear infinite both a8_t,4.3s linear infinite both a8_o'}} />\n      <ellipse fill={color} opacity='.1' rx='13.3' ry='2.3' transform='translate(51,16) scale(.796,.796) translate(346.2,354.3)' />\n      <ellipse fill={color} opacity='.1' rx='13.3' ry='2.3' transform='translate(51,16) scale(.796,.796) translate(297.6,388.4)' />\n      <ellipse fill={color} opacity='.1' rx='13.3' ry='2.3' transform='translate(51,16) scale(.796,.796) translate(46.6,370.9)' />\n      <ellipse fill={color} opacity='.1' rx='13.3' ry='2.3' transform='translate(51,16) scale(.796,.796) translate(398.6,386.2)' />\n      <ellipse fill={color} rx='19.9' ry='3.4' transform='translate(51,16) scale(.796,.796) translate(412.5,357.6)' />\n      <path d='M386 296.3c.7-0.6 1.2-1.4 1.5-2.3c.2-0.9-0.2-1.9-1.1-2.3c-0.9-0.3-2 .3-2.8 1c-0.7 .7-1.6 1.5-2.7 1.3c1.1-1 1.6-2.4 1.3-3.8c0-0.3-0.2-0.6-0.3-0.8c-0.6-0.6-1.6-0.4-2.2 .1c-2.1 1.4-2.6 4.2-2.6 6.7c-0.2-0.9-0.1-1.8-0.1-2.7c0-1-0.2-2-1-2.5c-0.5-0.3-1-0.4-1.6-0.4c-0.9 0-1.9 .1-2.6 .8c-0.8 .8-0.5 2.2 .1 3.1c.7 .9 1.7 1.5 2.7 2.1c.8 .5 1.4 1.1 1.9 1.9c.1 .1 .1 .2 .1 .3h5.8c1.3-0.7 2.5-1.5 3.6-2.5Z' fill={color} />\n      <path d='M80.9 303c0 0 6.1-0.2 7.9-1.5c1.9-1.3 9.3-2.9 9.8-0.8c.4 2.1 9.1 10.4 2.2 10.4c-6.8 .1-15.8-1-17.6-2.1c-1.9-1.2-2.3-6-2.3-6Z' fill='#a8a8a8' />\n      <path d='M101 310.4c-6.9 .1-15.9-1.1-17.7-2.2c-1.4-0.8-2-3.8-2.2-5.2h-0.2c0 0 .4 4.8 2.2 5.9c1.9 1.2 10.9 2.3 17.7 2.2c2 0 2.7-0.7 2.6-1.7c-0.2 .6-1 1-2.4 1Z' opacity='.2' />\n      <g transform='translate(189.2,72) translate(-20.5,-9.2)' style={{ animation: '4.3s linear infinite both a9_t'}}>\n        <path d='M35.6 14.9c-3.1 .5-5.7-2-7.2-3.9c-0.4-0.5-0.8-1.1-1.2-1.7l10.8 2l.5 .1c0 0 2 2.6-2.9 3.5Z' opacity='.1' />\n        <path d='M24.1 3.8c1 1.8 1.6 3.8 1.8 5.9c-3.6-2-6.9-4.2-8.5-4.9c-2.9-1.3-13.8-1.1-17.8-1c.4-0.8 .9-1.5 1.4-2.2c1-1.1 2.1-2 3.3-2.8c3.3-2.1 7.2-2.7 11-1.8c3.7 1 6.9 3.4 8.8 6.8Z' opacity='.1' />\n        <path d='M38 13.2c-1.9 .6-5-0.5-8.2-2.2c-0.4-0.5-0.8-1.1-1.2-1.7l10.8 2c.7 .5 .9 1.2-1.4 1.9Z' opacity='.1' />\n        <path d='M13.6-10c0 0-10.4-0.6-13.3 5l-0.4 5l-0.8-0.1l-0.2 3.4c0 0 15.8-0.7 19.4 .9c3.6 1.6 14.8 9.8 19.2 8.4c4.5-1.3-0.4-2.6-0.4-2.6c0 0-6.1-2.6-6.1-4.7c0-2-1.5-12.8-17.4-15.3Z' fill='#444053' />\n        <path d='M27.2 9.3c0 0 3.6 6.5 8.4 5.6c4.9-0.9 2.9-3.5 2.9-3.5l-11.3-2.1Z' fill='#444053' />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvg404 };","import * as React from 'react';\n\ninterface IAtsSvgAtWorkProps {\n  /**\n   * The width of the component.\n   * Default: '480'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '460'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The shadow color.\n     * Default: '#DC5315'\n     * Original: '#E75400'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n */\nconst AtsSvgAtWork = ({\n  width = '480',\n  height = '460',\n  color: {\n    shadowColor,\n  } = {\n    shadowColor: '#DC5315',\n  },\n  shadowOpacity = '0.15',\n}: IAtsSvgAtWorkProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      viewBox={`0 0 ${width} ${height}`}\n      width={width}\n      height={height}\n      fill='none'\n      style={{ maxWidth: '100%', maxHeight: '100%' }}\n    >\n      <path\n        fill={shadowColor}\n        d='M283.859 138.213c-30.011-.88-58.594-9.096-85.888-18.082-27.293-8.986-54.326-18.939-83.619-23.7-18.84-3.062-40.388-3.498-55.565 5.056-14.612 8.255-19.332 22.465-21.869 35.661-1.91 9.929-3.032 20.382 2.198 29.678 3.636 6.455 10.081 11.88 14.542 18.063 15.52 21.51 4.549 48.036-12.265 69.038-7.883 9.852-17.04 19.263-23.13 29.738-6.088 10.476-8.902 22.52-3.575 33.236 5.277 10.614 17.858 18.569 31.486 24.171 27.678 11.38 60.281 14.635 92.096 16.483 70.404 4.08 141.179 2.315 211.768.542 26.126-.652 52.362-1.317 78.06-4.741 14.273-1.902 29.005-4.922 39.369-12.21 13.15-9.248 16.41-24.909 7.595-36.505-14.783-19.458-55.645-24.29-65.989-45.167-5.686-11.494.153-24.293 8.42-34.95 17.732-22.865 47.451-42.925 49.014-69.058 1.075-17.949-13.211-35.925-35.302-44.419-23.152-8.904-55.265-7.784-72.337 6.953-17.598 15.158-48.508 20.995-75.009 20.213Z'\n        opacity={0.1}\n      />\n      <path\n        fill={shadowColor}\n        d='M408.799 112.493s-20.662-1.245-18.249 13.252c0 0-.483 2.56 1.839 3.724 0 0 .038-1.088 2.126-.713a9.43 9.43 0 0 0 2.245.109 4.656 4.656 0 0 0 2.719-1.13s5.818-2.404 8.08-11.909c0 0 1.67-2.071 1.604-2.604l-3.491 1.49s1.191 2.517.256 4.611c0 0-.114-4.519-.783-4.416-.136 0-1.816.876-1.816.876s2.055 4.387.505 7.574c0 0 .588-5.404-1.147-7.259l-2.431 1.419s2.398 4.53.773 8.228c0 0 .418-5.672-1.289-7.88l-2.224 1.74s2.251 4.464.881 7.532c0 0-.179-6.601-1.364-7.102 0 0-1.947 1.719-2.246 2.425 0 0 1.544 3.263.587 4.954 0 0-.588-4.399-1.088-4.421 0 0-1.941 2.914-2.143 4.894a10.621 10.621 0 0 1 1.676-5.188 5.855 5.855 0 0 0-2.975 1.54s.304-2.062 3.453-2.241c0 0 1.604-2.213 2.034-2.349 0 0-3.132-.261-5.03.582 0 0 1.669-1.942 5.601-1.061l2.175-1.794s-4.128-.543-5.873.06c0 0 2.012-1.718 6.465-.468l2.393-1.43s-3.519-.756-5.612-.483c0 0 2.213-1.192 6.313.098l1.713-.768s-2.577-.506-3.334-.587c-.755-.081-.793-.288-.793-.288a8.902 8.902 0 0 1 4.84.544s3.675-1.332 3.61-1.561ZM67.487 148.335s4.758-20.168-9.945-20.238c0 0-2.441-.914-3.98 1.174 0 0 1.05.223.337 2.213a9.652 9.652 0 0 0-.49 2.175 4.668 4.668 0 0 0 .647 2.899s1.376 6.144 10.332 9.994c0 0 1.761 2.001 2.295 2.023l-.871-3.692s-2.686.744-4.59-.544c0 0 4.477.657 4.482 0 0-.137-.544-1.936-.544-1.936s-4.67 1.273-7.552-.8c0 0 5.224 1.501 7.35.115l-.978-2.675s-4.894 1.593-8.244-.642c0 0 5.52 1.382 7.988.077l-1.331-2.491s-4.785 1.457-7.576-.419c0 0 6.526.946 7.233-.131 0 0-1.36-2.213-2.007-2.626 0 0-3.458.968-4.98-.266 0 0 4.431.168 4.535-.299 0 0-2.54-2.409-4.476-2.953a10.66 10.66 0 0 1 4.834 2.534 5.866 5.866 0 0 0-1.011-3.192s1.979.653 1.631 3.806c0 0 1.903 1.958 1.963 2.404 0 0 .788-3.04.282-5.057 0 0 1.632 1.979.093 5.704l1.393 2.474s1.26-3.969.94-5.796c0 0 1.354 2.272-.641 6.448l1.005 2.605s1.343-3.338 1.43-5.438c0 0 .8 2.382-1.174 6.204l.467 1.817s.936-2.452 1.142-3.181c.207-.729.42-.735.42-.735a8.905 8.905 0 0 1-1.355 4.677s.712 3.796.947 3.768ZM96.999 335.121s-16.595-12.42-22.528 1.033c0 0-1.81 1.876-.511 4.121 0 0 .62-.875 2.174.577.555.51 1.166.953 1.822 1.321a4.66 4.66 0 0 0 2.92.544s6.177 1.191 13.29-5.508c0 0 2.54-.811 2.773-1.294l-3.746-.648s-.386 2.757-2.322 3.992c0 0 2.392-3.839 1.772-4.117-.126-.059-1.996-.272-1.996-.272s-.718 4.807-3.762 6.607c0 0 3.458-4.192 3.033-6.693l-2.843-.153s-.49 5.106-3.877 7.297c0 0 3.464-4.507 3.263-7.291l-2.812.228s-.576 4.97-3.41 6.775c0 0 3.48-5.611 2.77-6.677 0 0-2.573.364-3.209.788 0 0-.495 3.556-2.235 4.459 0 0 1.93-3.996 1.539-4.279 0 0-3.225 1.37-4.491 2.925a10.572 10.572 0 0 1 4.251-3.415 5.826 5.826 0 0 0-3.333-.348s1.387-1.555 4.116.028c0 0 2.556-.968 2.99-.843 0 0-2.473-1.941-4.522-2.284 0 0 2.462-.701 5.263 2.175l2.822-.288s-3.132-2.719-4.938-3.181c0 0 2.627-.326 5.66 3.165l2.785.119s-2.517-2.566-4.42-3.485c0 0 2.5.217 5.22 3.55l1.848.299s-1.881-1.816-2.469-2.283c-.587-.468-.505-.675-.505-.675a8.924 8.924 0 0 1 3.746 3.111s3.78.826 3.872.62ZM257.479 245.123s-6.633-19.634-19.145-11.919c0 0-2.557.544-2.758 3.105 0 0 1.006-.37 1.453 1.697a9.72 9.72 0 0 0 .744 2.126 4.711 4.711 0 0 0 2.088 2.115s4.415 4.486 14.073 3.002c0 0 2.55.772 3.017.505l-2.718-2.67s-1.881 2.05-4.177 1.969c0 0 4.15-1.805 3.806-2.387-.07-.114-1.489-1.349-1.489-1.349s-3.295 3.551-6.829 3.317c0 0 5.225-1.49 6.291-3.806l-2.252-1.735s-3.295 3.926-7.334 3.807c0 0 5.437-1.746 6.812-4.16l-2.446-1.409s-3.262 3.769-6.645 3.649c0 0 6.047-2.648 6.063-3.931 0 0-2.322-1.158-3.088-1.169 0 0-2.426 2.648-4.351 2.408 0 0 3.851-2.202 3.687-2.653 0 0-3.425-.701-5.356-.136a10.603 10.603 0 0 1 5.437-.408 5.867 5.867 0 0 0-2.55-2.175s2.023-.495 3.377 2.355c0 0 2.654.658 2.937 1 0 0-.936-2.996-2.431-4.442 0 0 2.431.821 3.094 4.796l2.49 1.359s-1.027-4.029-2.267-5.437c0 0 2.354 1.217 2.865 5.812l2.23 1.68s-.62-3.545-1.664-5.383c0 0 1.935 1.599 2.284 5.889l1.353 1.294s-.5-2.577-.707-3.306c-.206-.729-.037-.777-.037-.777a8.96 8.96 0 0 1 1.32 4.687s2.632 2.822 2.823 2.68ZM354.064 360.28s-20.597-2.295-18.895 12.31c0 0-.614 2.534 1.631 3.806 0 0 .093-1.088 2.175-.604a9.385 9.385 0 0 0 2.241.223 4.633 4.633 0 0 0 2.8-.995s5.933-2.104 8.673-11.478c0 0 1.772-1.99 1.735-2.523l-3.563 1.31s1.089 2.577 0 4.622c0 0 .115-4.524-.543-4.448-.136 0-1.855.778-1.855.778s1.828 4.486.12 7.613c0 0 .86-5.368-.777-7.308l-2.529 1.31s2.176 4.649.36 8.26c0 0 .701-5.645-.892-7.94l-2.311 1.632s2.023 4.573.495 7.563c0 0 .157-6.601-1.001-7.155 0 0-2.028 1.631-2.366 2.305 0 0 1.382 3.318.338 4.976 0 0-.364-4.421-.843-4.464 0 0-2.088 2.811-2.393 4.796a10.587 10.587 0 0 1 1.936-5.101 5.797 5.797 0 0 0-3.044 1.387s.402-2.045 3.555-2.066c0 0 1.719-2.127 2.175-2.236 0 0-3.116-.424-5.056.321 0 0 1.767-1.854 5.654-.772l2.284-1.68s-4.089-.772-5.867-.239c0 0 2.099-1.632 6.481-.142l2.464-1.305s-3.475-.936-5.579-.766c0 0 2.268-1.088 6.296.419l1.752-.686s-2.551-.636-3.301-.75c-.751-.115-.777-.327-.777-.327a8.92 8.92 0 0 1 4.807.778s3.675-1.191 3.62-1.424ZM385.746 287.702s-20.597-2.289-18.895 12.311c0 0-.608 2.534 1.631 3.806 0 0 .093-1.088 2.175-.598a9.598 9.598 0 0 0 2.235.217 4.7 4.7 0 0 0 2.79-.989s5.927-2.104 8.667-11.484c0 0 1.779-1.986 1.735-2.523l-3.562 1.31s1.088 2.577 0 4.621c0 0 .114-4.517-.544-4.447-.136 0-1.853.777-1.853.777s1.826 4.486.118 7.613c0 0 .86-5.366-.777-7.303l-2.529 1.305s2.176 4.65.36 8.26c0 0 .701-5.644-.892-7.933l-2.311 1.63s2.023 4.574.5 7.57c0 0 .152-6.606-1.006-7.162 0 0-2.028 1.632-2.365 2.306 0 0 1.381 3.317.337 4.976 0 0-.364-4.421-.842-4.465 0 0-2.088 2.812-2.387 4.796a10.616 10.616 0 0 1 1.929-5.1 5.842 5.842 0 0 0-3.044 1.386s.408-2.044 3.561-2.06c0 0 1.713-2.127 2.175-2.241 0 0-3.115-.418-5.057.327 0 0 1.767-1.86 5.655-.778l2.284-1.68s-4.09-.773-5.867-.239c0 0 2.098-1.632 6.481-.137l2.464-1.309s-3.474-.936-5.579-.768c0 0 2.267-1.087 6.297.419l1.75-.679s-2.55-.637-3.295-.757c-.745-.118-.783-.325-.783-.325a8.939 8.939 0 0 1 4.807.783s3.692-1.202 3.637-1.436ZM393.329 188.621s-16.595-12.414-22.528 1.033c0 0-1.811 1.876-.511 4.121 0 0 .62-.875 2.176.577.55.512 1.159.958 1.815 1.326a4.66 4.66 0 0 0 2.92.544s6.177 1.191 13.295-5.502c0 0 2.534-.816 2.773-1.295l-3.735-.674s-.392 2.757-2.322 3.991c0 0 2.387-3.839 1.766-4.116-.124-.06-1.99-.272-1.99-.272s-.701 4.796-3.745 6.607c0 0 3.463-4.193 3.033-6.694l-2.843-.152s-.484 5.106-3.877 7.303c0 0 3.469-4.508 3.262-7.292l-2.817.228s-.543 4.965-3.404 6.77c0 0 3.48-5.612 2.763-6.677 0 0-2.572.364-3.208.788 0 0-.489 3.556-2.23 4.459 0 0 1.926-3.997 1.534-4.274 0 0-3.225 1.365-4.491 2.92a10.609 10.609 0 0 1 4.251-3.415 5.858 5.858 0 0 0-3.328-.348s1.387-1.555 4.117.027c0 0 2.55-.962 2.985-.842 0 0-2.474-1.942-4.523-2.279 0 0 2.468-.707 5.268 2.175l2.823-.288s-3.133-2.719-4.938-3.176c0 0 2.626-.331 5.654 3.16l2.79.125s-2.522-2.567-4.42-3.491c0 0 2.501.217 5.215 3.551l1.853.299s-1.875-1.838-2.462-2.317c-.588-.478-.501-.636-.501-.636a8.944 8.944 0 0 1 3.741 3.11s3.769.849 3.839.626ZM230.063 446.257c91.015 0 164.797-6.939 164.797-15.5s-73.782-15.501-164.797-15.501-164.797 6.94-164.797 15.501 73.782 15.5 164.797 15.5Z'\n        opacity={0.1}\n      />\n      <g fill='#000' opacity={0.1}>\n        <path d='M118.569 95.895c.049-.267.082-.544.142-.81-.517.45-.544 1.218-.68 1.897a5.937 5.937 0 0 1-.321 1.147c.429-.682.72-1.44.859-2.234ZM118.745 100.386c.271-.7.453-1.43.543-2.175a3.888 3.888 0 0 1-1.723.299 6.262 6.262 0 0 1-.626 1.087 3.875 3.875 0 0 0 1.806-.293 9.065 9.065 0 0 1-.544 2.175 1.767 1.767 0 0 0 1.631-.995c.136-.247.245-.508.327-.778-.325.453-.858.71-1.414.68ZM123.519 96.689c-.773-.076-1.708-.343-2.208.25a1.673 1.673 0 0 0-.261.544 5.693 5.693 0 0 0-.131.435c.517-.408 1.354-.19 2.056-.12a3.633 3.633 0 0 0 3.306-1.588c.165-.264.287-.552.364-.853a3.621 3.621 0 0 1-3.126 1.332Z' />\n      </g>\n      <path\n        fill='#fff'\n        d='m220.317 271.934-7.645 1.468v-11.294l7.161-1.805.484 11.631ZM175.394 267.312v7.472l-8.532-.871v-6.601h8.532ZM164.262 269.667v3.975l-8.526-.875v-3.1h8.526Z'\n        opacity={0.1}\n      />\n      <path\n        fill={shadowColor}\n        d='M344.064 414.493c8.087 0 14.643-1.107 14.643-2.474 0-1.366-6.556-2.474-14.643-2.474-8.088 0-14.643 1.108-14.643 2.474 0 1.367 6.555 2.474 14.643 2.474ZM290.684 459.784c8.087 0 14.643-1.108 14.643-2.474 0-1.367-6.556-2.474-14.643-2.474s-14.643 1.107-14.643 2.474c0 1.366 6.556 2.474 14.643 2.474ZM14.643 440.541c8.087 0 14.643-1.108 14.643-2.474s-6.556-2.474-14.643-2.474S0 436.701 0 438.067s6.556 2.474 14.643 2.474ZM401.75 457.31c8.087 0 14.643-1.108 14.643-2.474s-6.556-2.474-14.643-2.474-14.643 1.108-14.643 2.474 6.556 2.474 14.643 2.474Z'\n        opacity={0.1}\n      />\n      <path\n        fill={shadowColor}\n        d='M416.997 427.143c12.075 0 21.864-1.656 21.864-3.698s-9.789-3.697-21.864-3.697c-12.075 0-21.864 1.655-21.864 3.697s9.789 3.698 21.864 3.698Z'\n      />\n      <path\n        fill={shadowColor}\n        d='M426.063 417.394a6.318 6.318 0 0 0 2.082-3.144c.272-1.25-.262-2.745-1.452-3.202-1.337-.512-2.768.413-3.855 1.349-1.088.934-2.322 2.006-3.742 1.811a5.713 5.713 0 0 0 1.763-5.335 2.24 2.24 0 0 0-.489-1.087c-.746-.794-2.088-.452-2.981.173-2.827 1.99-3.615 5.83-3.632 9.287-.282-1.244-.044-2.544-.049-3.806-.006-1.261-.359-2.718-1.44-3.382a4.307 4.307 0 0 0-2.176-.543c-1.272-.044-2.692.081-3.556 1.01-1.087 1.154-.799 3.095.136 4.351.935 1.256 2.365 2.066 3.681 2.947a8.22 8.22 0 0 1 2.633 2.506c.076.143.14.293.19.447h7.971a22.077 22.077 0 0 0 4.916-3.382Z'\n      />\n      <path\n        fill='#A8A8A8'\n        d='M4.812 426.566s8.346-.255 10.875-2.049c2.528-1.795 12.849-3.932 13.474-1.055.625 2.876 12.55 14.295 3.121 14.371-9.429.077-21.908-1.468-24.42-3.002-2.512-1.533-3.05-8.265-3.05-8.265Z'\n      />\n      <path\n        fill='#000'\n        d='M32.44 436.832c-9.429.077-21.908-1.468-24.42-3.001-1.914-1.164-2.675-5.345-2.931-7.276h-.277s.543 6.738 3.04 8.265c2.495 1.528 14.99 3.079 24.42 3.002 2.718 0 3.659-.99 3.61-2.425-.381.875-1.42 1.419-3.442 1.435Z'\n        opacity={0.2}\n      />\n      <path\n        stroke='#2A272D'\n        strokeMiterlimit={10}\n        strokeWidth={1.988}\n        d='M276.51 282.835v147.747M383.382 282.835v147.747'\n      />\n      <path\n        fill={shadowColor}\n        d='M213.32 328.464s20.508-4.649 23.595 8.701c2.667 11.456-25.226 11.017-25.226 11.017l-61.331.369s-23.104 2.666-34.524-23.981c-11.421-26.648-22.42-96.434-22.42-96.434s-1.65-9.596 6.35-11c9.403-1.649 11.245 18.666 11.245 18.666s14.21 86.136 34.841 90.346c3.175.649 5.701 3.053 8.947 3.018l58.523-.702Z'\n      />\n      <path\n        fill='#fff'\n        d='M213.32 328.464s20.508-4.649 23.595 8.701c2.667 11.456-25.226 11.017-25.226 11.017l-61.331.369s-23.104 2.666-34.524-23.981c-11.421-26.648-22.42-96.434-22.42-96.434s-1.65-9.596 6.35-11c9.403-1.649 11.245 18.666 11.245 18.666s14.21 86.136 34.841 90.346c3.175.649 5.701 3.053 8.947 3.018l58.523-.702Z'\n        opacity={0.6}\n      />\n      <path\n        fill='#DFAAAC'\n        d='m267.826 258.889 19.368-1.334a4.484 4.484 0 0 1 3.982 1.895l9.192 14.736-9.21.438-3.561-6.35s-14.964 3.737-20.49 0l.719-9.385Z'\n      />\n      <path\n        fill='#C6CFDA'\n        d='m189.813 205.856 25.875 48.085 53.77 1.72v17.683l-56.787 2.491a21.58 21.58 0 0 1-18.841-9.491l-25.841-46.401 21.824-14.087Z'\n      />\n      <path fill='#C6CFDA' d='M269.458 255.643v17.683l-6 .264v-18.14l6 .193Z' />\n      <path\n        fill='#EFB7B9'\n        d='m241.284 398.18 3.035 21.262 15.297-.947-2.193-21.947-16.139 1.632Z'\n      />\n      <path\n        fill='#A36468'\n        d='M240.898 417.284a1.558 1.558 0 0 1 2.386-.789c1.684 1.193 4.648 2.614 8.911 2.07 4.439-.562 6-2.93 6.544-4.597.281-.877 1.228-1.35 2.088-1.017l27.577 10.806a6.717 6.717 0 0 1 3.737 3.597 2.375 2.375 0 0 1-2.14 3.315l-46.7.685c-1.842.035-3.315-1.492-3.245-3.334l.333-9.017c0-.158.035-.298.088-.438l.421-1.281Z'\n      />\n      <path\n        fill='#FFEEE3'\n        d='m194.812 201.734 4.386 7.034c.281.667.403 2.281-.807 2.877l-1.702 1.228-3.649-5.578 1.772-5.561Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='m186.637 209.172-1.386-.667c-4.561-2.228-6.455-7.736-4.227-12.298l14.806-30.314 16.438 8.035-17.105 33.946c-1.824 3.771-4.754 3.14-8.526 1.298Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='M224.53 179.91c-4.824 9.859-16.736 13.964-26.595 9.14-9.859-4.824-13.964-16.718-9.14-26.595 4.825-9.859 16.719-13.964 26.595-9.14 9.877 4.824 13.965 16.736 9.14 26.595Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='M200.531 199.523c-4.684-2.28-6.631-7.947-4.333-12.631l8.351-17.104 20.139 9.841-6.807 13.947c-3.157 6.421-10.929 9.105-17.35 5.947Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='m222.074 183.647 1.088 7.648c.088 1.211-1.193 2-2.316 1.457l-4.947-1.351 6.175-7.754Z'\n      />\n      <path\n        fill='#1C2226'\n        d='M204.636 179.822s6.965.456 8.105-10.297c0 0 12.105 7.719 17.034 4.649 0 0 1.509-30.42-23.63-29.35-25.139 1.07-27.104 28.209-27.104 28.209l14.105 12.736 11.49-5.947Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='M205.636 180.261c-1.315 2.719-4.596 3.842-7.315 2.509-2.702-1.334-3.842-4.597-2.509-7.316 1.316-2.719 4.596-3.842 7.316-2.509a5.489 5.489 0 0 1 2.508 7.316Z'\n      />\n      <path\n        fill='#1C2226'\n        d='m190.286 176.226-3.736 8.719s8.21 6.578 12.35-1.895l-5.965-1.684-2.649-5.14ZM212.741 169.525s16.403 12.666 22.876 2.052c5.158-8.473-.579-13.964-8.859-12.596-3.579.597-5.351-1.824-8.157-3.736l-5.86 14.28Z'\n      />\n      <path\n        fill='#DCE6F2'\n        d='M198.005 217.119s-.368-7.737-2.824-10.421c-2.456-2.684-15.543-10.087-15.543-10.087s-18.824 5.456-30.385 26.964c-8.999 16.753-17.472 59.154-17.472 59.154l54.313 7.877c4.684-31.682 13.455-46.12 11.911-73.487Z'\n      />\n      <path\n        fill='#FFEEE3'\n        d='m180.55 195.12-2.263 1.017c-.807.369-.982 1.456-.316 2.053l14.351 12.771c.578.526 1.491.369 1.894-.298l1.614-2.789a1.244 1.244 0 0 0-.298-1.579l-13.719-10.982a1.155 1.155 0 0 0-1.263-.193Z'\n      />\n      <path\n        fill='#EFB7B9'\n        d='m261.844 261.766 19.368-1.334a4.485 4.485 0 0 1 3.982 1.895l9.929 12.49-9.28 1.193-4.228-4.876s-14.964 3.736-20.49 0l.719-9.368Z'\n      />\n      <path\n        fill='#DCE6F2'\n        d='m178.813 209.435 29.227 49.313 55.435 1.526v15.947l-59.821 2.614a16.197 16.197 0 0 1-14.122-7.105l-32.542-48.208 21.823-14.087Z'\n      />\n      <path\n        fill='#DCE6F2'\n        d='M263.475 260.275v15.929l-5.999.263v-16.192h5.999Z'\n      />\n      <path\n        fill='#444053'\n        d='m131.78 282.729 106.837 15.491c8.175 1.193 14.491 7.807 15.28 16.034l7.965 90.996-23.859 1.543-11.473-78.873-67.084 1.737c-18.21 0-32.174-16.175-29.525-34.191l1.859-12.737Z'\n      />\n      <path fill='#2A272D' d='M321.436 274.118h-56.292v5.711h56.292v-5.711Z' />\n      <path\n        fill='#2A272D'\n        d='m321.157 279.484 18.227-53.243-5.456-.912-16.245 48.69 3.474 5.465Z'\n      />\n      <path\n        fill='#D7A5A6'\n        d='M199.637 199.032s-5.07-3-5.07-9.315c0 0-3.158 6.841 3.28 12.859l1.79-3.544Z'\n      />\n      <path\n        fill='#1F252A'\n        d='M116.466 434.02c.842 0 1.613-.579 1.842-1.438l27.893-109.977c2.316-9.105 10.473-15.473 19.876-15.473 9.122 0 17.227 6.122 19.718 14.894 9.754 34.366 32.455 109.345 32.683 110.099a1.89 1.89 0 0 0 2.368 1.264 1.89 1.89 0 0 0 1.263-2.369c-.228-.754-22.928-75.698-32.665-110.029-2.947-10.403-12.56-17.666-23.384-17.666a24.287 24.287 0 0 0-23.561 18.332l-27.893 109.995a1.901 1.901 0 0 0 1.368 2.315c.176.036.334.053.492.053Z'\n      />\n      <path\n        stroke='#C6CFDA'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n        strokeMiterlimit={10}\n        strokeWidth={1.1}\n        d='m189.549 271.712-16.753-24.788'\n      />\n      <path fill={shadowColor} d='M401.837 279.484H255.862v6.579h145.975v-6.579Z' />\n      <path\n        fill='#fff'\n        d='M401.837 279.484H255.862v6.579h145.975v-6.579Z'\n        opacity={0.6}\n      />\n      <path\n        stroke='#2A272D'\n        strokeMiterlimit={10}\n        strokeWidth={1.988}\n        d='M276.51 302.044h106.872'\n      />\n      <path\n        stroke='#C6CFDA'\n        strokeLinecap='round'\n        strokeLinejoin='round'\n        strokeMiterlimit={10}\n        strokeWidth={1.1}\n        d='m199.373 242.907-16.051-25.876'\n      />\n      <path\n        fill={shadowColor}\n        fillRule='evenodd'\n        d='M249 189.095C249 176.34 259.34 166 272.095 166h67.81C352.66 166 363 176.34 363 189.095c0 12.755-10.34 23.095-23.095 23.095h-12.084L321.233 223l-6.588-10.81h-42.55c-12.755 0-23.095-10.34-23.095-23.095Zm45.345.244a4 4 0 1 1-8 0 4 4 0 0 1 8 0Zm12 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm20-4a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z'\n        clipRule='evenodd'\n      />\n      <path\n        fill='#fff'\n        fillRule='evenodd'\n        d='M249 189.095C249 176.34 259.34 166 272.095 166h67.81C352.66 166 363 176.34 363 189.095c0 12.755-10.34 23.095-23.095 23.095h-12.084L321.233 223l-6.588-10.81h-42.55c-12.755 0-23.095-10.34-23.095-23.095Zm45.345.244a4 4 0 1 1-8 0 4 4 0 0 1 8 0Zm12 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm20-4a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z'\n        clipRule='evenodd'\n        opacity={0.2}\n      />\n    </svg>\n  );\n};\n\nexport {AtsSvgAtWork};","import * as React from 'react';\n\ninterface IAtsSvgBuildSizerProps {\n  /**\n   * The width of the component.\n   * Default: '72'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '72'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#0179B1'\n     * Expected: secondary[800] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#005990'\n     * Expected: secondary[900] or Primay.main from theme.palette\n     */\n    shadowColor?: string\n  };\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgBuildSizer = ({\n  width = '72',\n  height = '72',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#005990',\n    backgroundColor: '#0179B1'\n  },\n}: IAtsSvgBuildSizerProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 36 36'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <g clipPath='url(#clip0)'>\n        <path\n          d='M18 36C27.9411 36 36 27.9411 36 18C36 8.05887 27.9411 0 18 0C8.05887 0 0 8.05887 0 18C0 27.9411 8.05887 36 18 36Z'\n          fill={backgroundColor}\n        />\n        <path\n          d='M13.5361 25.4873L19.1521 35.9993C23.9334 35.4028 27.3601 33.8393 30.3841 31.1033C32.2561 29.4096 34.9921 25.6313 35.8561 20.5913L25.3441 14.1113L19.8721 19.5833L13.5361 25.4873Z'\n          fill={shadowColor}\n        />\n        <g clipPath='url(#clip1)'>\n          <path\n            d='M21.2573 8.19048L8.18994 21.2578L15.3176 28.3854L28.3849 15.3181L21.2573 8.19048ZM26.009 15.3181L15.3176 26.0096L10.5658 21.2578L11.7538 20.0699L14.1296 22.4458L15.3176 21.2578L12.9417 18.8819L14.1296 17.694L16.5055 20.0699L17.6935 18.8819L15.3176 16.5061L16.5055 15.3181L18.8814 17.694L20.0693 16.5061L17.6935 14.1302L18.8814 12.9422L21.2573 15.3181L22.4452 14.1302L20.0693 11.7543L21.2573 10.5664L26.009 15.3181Z'\n            fill='white'\n          />\n        </g>\n      </g>\n\n      <defs>\n        <clipPath id='clip0'>\n          <rect width='36' height='36' fill='white' />\n        </clipPath>\n        <clipPath id='clip1'>\n          <rect\n            width='20.16'\n            height='20.16'\n            fill='white'\n            transform='translate(4.03223 18.2871) rotate(-45)'\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport { AtsSvgBuildSizer };\n","import * as React from 'react';\n\ninterface IAtsSvgPushpinRoundedProps {\n  /**\n   * The width of the component.\n   * Default: '28'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '28'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: 'lightgrey'\n   */\n  color?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgBulkEdit = ({\n  width = '28',\n  height = '28',\n  color = '#666',\n  className = '',\n  style = {},\n}: IAtsSvgPushpinRoundedProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 28 28'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n      className={className}\n      style={style}\n    >\n      <path\n        d='M4 11H14.9196V13H4V11ZM4 9H14.9196V7H4V9ZM4 17H10.9488V15H4V17ZM18.9003 13.87L19.6051 13.16C19.9923 12.77 20.6177 12.77 21.0048 13.16L21.7096 13.87C22.0968 14.26 22.0968 14.89 21.7096 15.28L21.0048 15.99L18.9003 13.87ZM18.1955 14.58L12.9342 19.88V22H15.0387L20.3 16.7L18.1955 14.58Z'\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport { AtsSvgBulkEdit };\n","import * as React from 'react';\n\ninterface IAtsSvgEditProps {\n  /**\n   * The width of the component.\n   * Default: 72\n   */\n  width?: number;\n  /**\n   * The height of the component.\n   * Default: 72\n   */\n  height?: number;\n  /**\n   * The color.\n   * Default: '#757575'\n   */\n  color?: string;\n  /**\n   * The background color.\n   * Default: '#EEEEEE'\n   */\n  backgroundColor?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {number} width - The width of the element.\n * @prop {number} height - The height of the element.\n * @prop {string} color - The color of the element.\n * @prop {string} backgroundColor - The background color of the element.\n */\nconst AtsSvgEdit = ({\n  width = 72,\n  height = 72,\n  color = '#757575',\n  backgroundColor = '#EEEEEE',\n  className = '',\n  style = {},\n}: IAtsSvgEditProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 72 72'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n      className={className}\n      style={style}\n    >\n      <rect width={width} height={height} rx={36} fill={backgroundColor} />\n      <g clipPath='url(#clip0_15947_3548)'>\n        <path\n          d='M40.1908 31.1608L41.8392 32.8092L25.6067 49.0417H23.9583V47.3933L40.1908 31.1608ZM46.6408 20.375C46.1929 20.375 45.7271 20.5542 45.3867 20.8946L42.1079 24.1733L48.8267 30.8921L52.1054 27.6133C52.8042 26.9146 52.8042 25.7858 52.1054 25.0871L47.9129 20.8946C47.5546 20.5362 47.1067 20.375 46.6408 20.375ZM40.1908 26.0904L20.375 45.9062V52.625H27.0938L46.9096 32.8092L40.1908 26.0904Z'\n          fill={color}\n        />\n      </g>\n      <defs>\n        <clipPath id='clip0_15947_3548'>\n          <rect\n            width={43}\n            height={43}\n            fill='white'\n            transform='translate(15 15)'\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport { AtsSvgEdit };\n","import * as React from 'react';\n\ninterface IAtsSvgNewProjectProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The opacity of the background.\n   * Default: '1'\n   */\n  backgroundOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The opacity of the foreground.\n   * Default: '1'\n   */\n  foregroundOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} backgroundOpacity - The opacity of the background.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} foregroundOpacity - The opacity of the foreground.\n */\nconst AtsSvgNewProject = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  backgroundOpacity = '1',\n  foregroundColor = '#FFFFFF',\n  foregroundOpacity = '1'\n}: IAtsSvgNewProjectProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n    >\n      <g\n        fill='none'\n        fillRule='evenodd'\n        stroke='none'\n        strokeWidth='1'\n        transform='translate(-643 -117) translate(643 117)'\n      >\n        <circle cx='62.5' cy='62.5' r='62.5' fill={backgroundColor} opacity={backgroundOpacity} />\n        <path\n          fill={shadowColor}\n          fillRule='nonzero'\n          d='M91.13 48.107l29.79 36.892c-15.01 25.688-27.4 35.92-54.358 38.814L31.814 85.347l57.791-2.177 1.526-35.063z'\n          opacity={shadowOpacity}\n        />\n        <path\n          fill={foregroundColor}\n          opacity={foregroundOpacity}\n          fillRule='nonzero'\n          d='M86.884 46.041h-24l-8-8.041h-20c-3.314 0-6 2.7-6 6.03v36.185c0 3.331 2.686 6.031 6 6.031h52c3.313 0 6-2.7 6-6.03V52.071c0-3.33-2.687-6.031-6-6.031zm-12 21.108c0 1.11-.895 2.01-2 2.01h-9v9.046c0 1.11-.895 2.01-2 2.01h-2c-1.105 0-2-.9-2-2.01V69.16h-9c-1.105 0-2-.9-2-2.01v-2.01c0-1.111.895-2.01 2-2.01h9v-9.047c0-1.11.895-2.01 2-2.01h2c1.105 0 2 .9 2 2.01v9.046h9c1.105 0 2 .9 2 2.01v2.01z'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgNewProject };\n","import * as React from 'react';\n\ninterface IAtsSvgNewSpecProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The opacity of the background.\n   * Default: '1'\n   */\n  backgroundOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The opacity of the foreground.\n   * Default: '1'\n   */\n  foregroundOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} backgroundOpacity - The opacity of the background.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} foregroundOpacity - The opacity of the foreground.\n */\nconst AtsSvgNewSpec = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  backgroundOpacity = '1',\n  foregroundColor = '#FFFFFF',\n  foregroundOpacity = '1'\n}: IAtsSvgNewSpecProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <circle\n          cx='62.5'\n          cy='62.5'\n          r='62.5'\n          fill={backgroundColor}\n          transform='translate(-359 -118) translate(359 118)'\n          opacity={backgroundOpacity}\n        />\n        <path\n          fill={shadowColor}\n          fillRule='nonzero'\n          d='M83.843 50.094l31.909 42.67c-15.513 25.617-32.829 29.775-49.614 31.143L41.46 96.054l41.55-2.95.833-43.01z'\n          opacity={shadowOpacity}\n          transform='translate(-359 -118) translate(359 118)'\n        />\n        <path\n          fill={foregroundColor}\n          opacity={foregroundOpacity}\n          fillRule='nonzero'\n          d='M66.265 31v19.732c0 1.923 1.308 3.482 2.921 3.482H85.74v38.304c0 1.922-1.308 3.482-2.921 3.482H41.92C40.308 96 39 94.44 39 92.518V34.482C39 32.56 40.308 31 41.921 31h24.344zm-2.649 25H60.66C59.643 56 59 56.994 59 58.01v9.046h-8.815c-1.016 0-2.185.51-2.185 1.527v3.099c0 1.016 1.169 1.32 2.185 1.32H59v9.085c0 1.017.984 2.057 2 2.057h2c1.145 0 2-.994 2-2.01v-9.047l9-.085c1.016 0 2-.87 2-1.32v-3.095c0-.691-.984-1.53-2-1.53h-9V58.01c0-1.016-.968-2.01-1.384-2.01zm6.544-24a6.87 6.87 0 011.114 1.008L83.9 47.703c.31.36.588.793.866 1.297H70.16V32z'\n          transform='translate(-359 -118) translate(359 118)'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgNewSpec };\n","import * as React from 'react';\n\ninterface IAtsSvgXrefProps {\n  /**\n   * The width of the component.\n   * Default: '77'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '76'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077AD'\n     * Expected: primary[800] or Primay.main from theme.palette\n     */\n    shadowColor?: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The opacity of the background.\n   * Default: '1'\n   */\n  backgroundOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The opacity of the foreground.\n   * Default: '1'\n   */\n  foregroundOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} backgroundOpacity - The opacity of the background.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} foregroundOpacity - The opacity of the foreground.\n */\nconst AtsSvgXref = ({\n  width = '77',\n  height = '76',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  backgroundOpacity = '1',\n  foregroundColor = '#FFFFFF',\n  foregroundOpacity = '1'\n}: IAtsSvgXrefProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 77 76'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <defs>\n        <ellipse id='path' cx='35.9324905' cy='35.5068493' rx='35.9324905' ry='35.5068493' />\n        <filter x='-7.0%' y='-5.6%' width='113.9%' height='114.1%' filterUnits='objectBoundingBox' id='filter-2'>\n          <feOffset dx='0' dy='1' in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur stdDeviation='1.5' in='shadowOffsetOuter1' result='shadowBlurOuter1' />\n          <feColorMatrix values='0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.26 0' type='matrix' in='shadowBlurOuter1' />\n        </filter>\n        <linearGradient x1='76.3981729%' y1='81.8984078%' x2='21.5971047%' y2='26.43483%' id='linearGradient-3'>\n          <stop stopColor='#000000' stopOpacity='0' offset='0%' />\n          <stop stopColor='#000000' offset='100%' />\n        </linearGradient>\n      </defs>\n      <g id='Cross-reference-tool' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n        <g id='Spec-Tool-2.0_Xref-Tool_Find-Cross_Expand' transform='translate(-470.000000, -109.000000)'>\n          <g id='Group-9' transform='translate(473.000000, 111.000000)'>\n            <g id='Group'>\n              <g id='Oval-3'>\n                <use fill={backgroundColor} fillRule='evenodd' xlinkHref='#path' />\n              </g>\n              <path d='M31.0248067,44.5406559 C25.0782352,46.3409205 21.1104468,48.7514753 25.8595875,48.7514753 C32.2126172,48.7514753 32.4940707,45.1369955 34.3181827,43.8491587 L36.2973236,43.4336056 C37.4493987,43.5813674 39.0627304,44.2325208 41.4851018,45.6584291 C41.9935269,45.9577092 49.4549254,47.3971528 49.4549254,46.9332701 C49.4549254,45.8576838 49.1065396,45.0169458 48.4908935,44.3746859 L61.3855177,45.6584291 L67.3760854,52.2131519 C62.1313632,63.5938732 49.7793291,70.2898327 34.3460183,71.1985338 L16.8497266,51.1264744 L19.6295893,46.9332701 L31.0247937,44.5406598 Z' id='Combined-Shape' fill='url(#linearGradient-3)' opacity={shadowOpacity} />\n              <path d='M31.839307,25.2341884 C30.3393052,27.5377626 29.2410896,30.028837 28.1696597,32.5466971 C26.6160865,29.3056219 24.9017987,26.0645466 20.857151,26.0645466 L14.8571439,26.0645466 C14.3750004,26.0645466 14,25.6895461 14,25.2074027 L14,20.0645394 C14,19.582396 14.3750004,19.2073955 14.8571439,19.2073955 L20.857151,19.2073955 C25.6250139,19.2073955 29.1339466,21.4306125 31.839307,25.2341884 Z M62.0000572,46.6359997 C62.0000572,46.8502856 61.9197,47.0913573 61.7589855,47.2520718 L53.1875467,55.8235106 C53.0268322,55.9842251 52.7857605,56.0645823 52.5714746,56.0645823 C52.1161169,56.0645823 51.7143307,55.6627961 51.7143307,55.2074384 L51.7143307,50.0645752 C43.758964,50.0645752 38.8571725,51.0020763 33.9018094,44.0377823 C35.3750255,41.7342081 36.4732411,39.2431337 37.5446709,36.7252736 C39.0982442,39.9663488 40.812532,43.2074241 44.8571796,43.2074241 L51.7143307,43.2074241 L51.7143307,38.0645609 C51.7143307,37.5824174 52.0893311,37.207417 52.5714746,37.207417 C52.8125463,37.207417 53.0268322,37.31456 53.2143325,37.4752744 L61.7589855,46.0199275 C61.9197,46.180642 62.0000572,46.4217137 62.0000572,46.6359997 Z M62.0000572,22.635971 C62.0000572,22.850257 61.9197,23.0913287 61.7589855,23.2520432 L53.1875467,31.823482 C53.0268322,31.9841965 52.7857605,32.0645537 52.5714746,32.0645537 C52.1161169,32.0645537 51.7143307,31.6895533 51.7143307,31.2074098 L51.7143307,26.0645466 L44.8571796,26.0645466 C41.2946754,26.0645466 39.6071734,28.5020495 38.1071716,31.3949101 C37.330385,32.8949118 36.6607413,34.4484851 36.0178834,35.9752727 C33.0446656,42.8859952 29.5625186,50.0645752 20.857151,50.0645752 L14.8571439,50.0645752 C14.3750004,50.0645752 14,49.6895747 14,49.2074313 L14,44.064568 C14,43.5824246 14.3750004,43.2074241 14.8571439,43.2074241 L20.857151,43.2074241 C24.4196553,43.2074241 26.1071573,40.7699212 27.6071591,37.8770606 C28.3839457,36.3770589 29.0535894,34.8234856 29.6964473,33.296698 C32.6696651,26.3859755 36.1518121,19.2073955 44.8571796,19.2073955 L51.7143307,19.2073955 L51.7143307,14.0645323 C51.7143307,13.5823888 52.0893311,13.2073884 52.5714746,13.2073884 C52.8125463,13.2073884 53.0268322,13.3145314 53.2143325,13.4752458 L61.7589855,22.0198989 C61.9197,22.1806134 62.0000572,22.4216851 62.0000572,22.635971 Z' id='' fill='#FFFFFF' />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgXref };\n","import * as React from 'react';\n\ninterface IAtsSvgPackageProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900]\n     */\n    shadowColor?: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The opacity of the background.\n   * Default: '1'\n   */\n  backgroundOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} backgroundOpacity - The opacity of the background.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgPackage = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  backgroundOpacity = '1',\n  foregroundColor = '#FFFFFF',\n  margin = '0'\n}: IAtsSvgPackageProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n      xmlns='http://www.w3.org/2000/svg'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g\n        stroke='none'\n        strokeWidth='1'\n        fill='none'\n        fillRule='evenodd'\n      >\n        <g>\n          <g\n            fill={backgroundColor}\n            opacity={backgroundOpacity}\n          >\n            <g>\n              <circle\n                cx='62.5'\n                cy='62.5'\n                r='62.5'\n              />\n            </g>\n        </g>\n          <path\n            d='M79.1943852,30.5953408 L122.192365,80.878733 C114.084719,105.992991 91.3123268,125 63.5,125 C63.389503,125 63.279073,125 63.1687106,125 L31.6775721,93.0052746 L59.948727,68.7869851 L49.9048856,57.3714125 L73.3471691,46.0373533 L79.1943852,30.5953408 Z'\n            fillOpacity={shadowOpacity}\n            fill={shadowColor}\n            fillRule='nonzero'\n          />\n          <g\n            transform='translate(65.000000, 61.500000) scale(-1, 1) translate(-65.000000, -61.500000) translate(30.000000, 30.000000)'\n            fill={foregroundColor}\n            fillRule='nonzero'\n          >\n            <g>\n              <path d='M68.0625,35 L58.375,35 L58.375,47 L54.5,44.3375 L50.625,47 L50.625,35 L40.9375,35 C39.871875,35 39,35.9 39,37 L39,61 C39,62.1 39.871875,63 40.9375,63 L68.0625,63 C69.128125,63 70,62.1 70,61 L70,37 C70,35.9 69.128125,35 68.0625,35 Z M21.9375,28 L49.0625,28 C50.128125,28 51,27.1 51,26 L51,2 C51,0.9 50.128125,0 49.0625,0 L39.375,0 L39.375,12 L35.5,9.3375 L31.625,12 L31.625,0 L21.9375,0 C20.871875,0 20,0.9 20,2 L20,26 C20,27.1 20.871875,28 21.9375,28 Z M29.0625,35 L19.375,35 L19.375,47 L15.5,44.3375 L11.625,47 L11.625,35 L1.9375,35 C0.871875,35 0,35.9 0,37 L0,61 C0,62.1 0.871875,63 1.9375,63 L29.0625,63 C30.128125,63 31,62.1 31,61 L31,37 C31,35.9 30.128125,35 29.0625,35 Z'/>\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgPackage };\n","import * as React from 'react';\n\ninterface IAtsSvgDownloadProps {\n  /**\n   * The width of the component.\n   * Default: '131'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '131'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#80BBCE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077ad'\n     * Expected: theme.palette.primary.main\n     */\n    shadowColor?: string\n  };\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgDownload = ({\n  width = '131',\n  height = '131',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#83d3ee', // original is #80BBCE, but it doesn't correspond to our color palette so using primary[200] for consistency with other svgs\n    backgroundColor: '#0077ad' // theme.palette.primary.main\n  }\n}: IAtsSvgDownloadProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      style={{ maxWidth: '100%' }}\n    >\n      <defs>\n        <circle id='path-1' cx='62.5' cy='62.5' r='62.5' />\n        <filter\n          id='filter-2'\n          width='108%'\n          height='108%'\n          x='-4%'\n          y='-3.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <linearGradient\n          id='linearGradient-3'\n          x1='76.398%'\n          x2='21.597%'\n          y1='81.898%'\n          y2='26.435%'\n        >\n          <stop offset='0%' stopOpacity='0' />\n          <stop offset='100%' stopColor={backgroundColor} />\n        </linearGradient>\n        <path\n          id='path-4'\n          d='M120.584 85.622c-8.568 21.504-28.733 37.13-52.769 39.155L25.668 82.63l10.87-10.87 21.514 15.888 35.868-28.69 26.664 26.664z'\n        />\n        <filter\n          id='filter-5'\n          width='110.5%'\n          height='111.4%'\n          x='-5.3%'\n          y='-4.5%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <path\n          id='path-6'\n          d='M103 75c0 2.917-.708 5.604-2.125 8.063a15.566 15.566 0 01-5.813 5.812C92.605 90.292 89.918 91 87 91H41c-3.25 0-6.25-.813-9-2.438A18.344 18.344 0 0125.437 82C23.813 79.25 23 76.25 23 73c0-3.833 1.125-7.313 3.375-10.438C28.625 59.438 31.5 57.25 35 56v-1c0-3.583.896-6.917 2.688-10A19.858 19.858 0 0145 37.687C48.083 35.897 51.438 35 55.063 35c3.624 0 6.979.917 10.062 2.75 3.083 1.833 5.5 4.25 7.25 7.25 2-1.333 4.208-2 6.625-2 3.333 0 6.167 1.167 8.5 3.5S91 51.667 91 55c0 1.5-.25 2.958-.75 4.375 3.667.75 6.708 2.583 9.125 5.5S103 71.167 103 75zm-31.032-8.06H63.94V52.992c0-.58-.185-1.058-.556-1.432-.37-.373-.844-.56-1.42-.56h-5.928c-.576 0-1.05.187-1.42.56-.37.374-.556.851-.556 1.432V66.94h-8.028c-.906 0-1.523.415-1.852 1.245-.33.83-.206 1.536.37 2.117l13.091 13.2c.33.332.783.498 1.359.498s1.03-.166 1.359-.498l13.09-13.2c.577-.581.7-1.287.371-2.117-.329-.83-.946-1.245-1.852-1.245z'\n        />\n        <filter\n          id='filter-7'\n          width='112.5%'\n          height='117.9%'\n          x='-6.2%'\n          y='-7.1%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-762 -316)'>\n          <g transform='translate(765 318)'>\n            <g>\n              <use\n                fill='#000'\n                filter='url(#filter-2)'\n                xlinkHref='#path-1'\n              />\n              <use fill={shadowColor} xlinkHref='#path-1' />\n            </g>\n            <g opacity='0.3'>\n              <use\n                fill='#000'\n                filter='url(#filter-5)'\n                xlinkHref='#path-4'\n              />\n              <use fill='url(#linearGradient-3)' xlinkHref='#path-4' />\n            </g>\n            <g>\n              <use\n                fill='#000'\n                filter='url(#filter-7)'\n                xlinkHref='#path-6'\n              />\n              <use fill='#FFF' xlinkHref='#path-6' />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgDownload };\n","import * as React from 'react';\n\ninterface IAtsSvgDrawingProps {\n  /**\n   * The width of the component.\n   * Default: '196'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '196'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83d5f1'\n     * Original: '#FCCA84'\n     * Expected: primary[200] from theme.palette, origin is not in palette, using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#005990'\n     * Original: '#E76C17'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgDrawing = ({\n  width = '196',\n  height = '196',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#005990',\n    backgroundColor: '#83d5f1' // origin is '#80BBD6'\n  },\n  shadowOpacity = '0.15',\n  margin = '0'\n}: IAtsSvgDrawingProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 196 196'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-729 -417)'>\n          <g transform='translate(729 417)'>\n            <circle cx='98' cy='98' r='98' fill={backgroundColor} />\n            <path\n              fill={shadowColor}\n              fillRule='nonzero'\n              d='M129.83 91c3.845 3.305 8.354 8.199 13.526 14.682 5.532 6.934 17.08 22.167 34.644 45.698-15.648 25.305-41.2 40.468-80.937 44.62L48 143.492l21.244-41.522L68.458 91h61.372z'\n              opacity={shadowOpacity}\n            />\n            <g transform='translate(34 30)'>\n              <path d='M0 0L129 0 129 129 0 129z' />\n              <path\n                fill='#FFF'\n                fillRule='nonzero'\n                d='M65.5 12L35 61 96 61z'\n              />\n              <circle\n                cx='92.5'\n                cy='93.5'\n                r='24.5'\n                fill='#FFF'\n                fillRule='nonzero'\n              />\n              <path\n                fill='#FFF'\n                fillRule='nonzero'\n                d='M15 72L57 72 57 114 15 114z'\n              />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgDrawing };\n","import * as React from 'react';\n\ninterface IAtsSvgPushpinRoundedProps {\n  /**\n   * The width of the component.\n   * Default: '24'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '24'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: 'lightgrey'\n   */\n  color?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgMove = ({\n  width = '24',\n  height = '24',\n  color = '#666',\n  className = '',\n  style = {},\n}: IAtsSvgPushpinRoundedProps) => {\n\n  return (\n    <svg\n      width='24'\n      height='24'\n      viewBox='0 0 24 24'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        d='M3 13C3 10.55 4.76 8.53 7.08 8.09L5.59 9.59L7 11L11 6.99L7 3L5.59 4.41L7.17 5.99V6.05C3.7 6.46 1 9.42 1 13C1 16.87 4.13 20 8 20H11V18H8C5.24 18 3 15.76 3 13Z'\n        fill={color}\n      />\n      <path\n        d='M13 13V20H22V13H13ZM20 18H15V15H20V18Z'\n        fill={color}\n      />\n      <path\n        d='M22 4H13V11H22V4Z'\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport { AtsSvgMove };\n","import * as React from 'react';\nimport './index.css';\n\ninterface IAtsSvgPreparingDocProps {\n  /**\n   * The width of the component.\n   * Default: '500'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '350'\n   */\n  height?: string;\n  /**\n   * The color for the theme.\n   * Default: {color}\n   * Expected: theme.palette.main\n   */\n  color?: string;\n}\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The color for the theme.\n */\nconst AtsSvgPreparingDoc = ({\n  width = '500',\n  height = '350',\n  color = '#0077AD'\n}: IAtsSvgPreparingDocProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      viewBox='0 0 500 350'\n      width={width}\n      height={height}\n      style={{ maxWidth: '100%' }}\n    >\n      <defs>\n        <linearGradient id='Gradient-0' x1='0.5' x2='0.5' y1='1' y2='0'>\n          <stop offset='0' stopColor='gray' stopOpacity='0.25' />\n          <stop offset='0.5' stopColor='gray' stopOpacity='0.12' />\n          <stop offset='1' stopColor='gray' stopOpacity='0.1' />\n        </linearGradient>\n        <linearGradient id='Gradient-1' x1='0.5' x2='0.5' y1='1' y2='0'>\n          <stop offset='0' stopColor='gray' stopOpacity='0.25' />\n          <stop offset='0.5' stopColor='gray' stopOpacity='0.12' />\n          <stop offset='1' stopColor='gray' stopOpacity='0.1' />\n        </linearGradient>\n        <linearGradient id='Gradient-2' x1='0.5' x2='0.5' y1='1' y2='0'>\n          <stop offset='0' stopColor='gray' stopOpacity='0.25' />\n          <stop offset='0.5' stopColor='gray' stopOpacity='0.12' />\n          <stop offset='1' stopColor='gray' stopOpacity='0.1' />\n        </linearGradient>\n      </defs>\n      <g\n        fill='#3f3d56'\n        fillRule='evenodd'\n        transform='translate(155 124.6)'\n        style={{\n          WebkitAnimation: '1.5s linear infinite both a0_t',\n          animation: '1.5s linear infinite both a0_t',\n        }}\n      >\n        <path\n          fillRule='nonzero'\n          d='M38.5 13c9.9 0 18.8 6 22.6 15.1 3.8 9.2 1.7 19.7-5.3 26.7s-17.5 9.1-26.7 5.3C20 56.3 14 47.4 14 37.5 14 24 25 13 38.5 13zm0-6C26.2 7 15 14.4 10.3 25.8c-4.7 11.4-2.1 24.5 6.6 33.3 8.8 8.7 21.9 11.3 33.3 6.6C61.6 61 69 49.8 69 37.5 69 20.7 55.3 7 38.5 7z'\n        />\n        <path d='M34 0H41V8H34z' />\n        <path d='M53.9 3.3L60 7l-3.9 6.4L50 9.7zM69.1 15.6l3.5 6.2-6.6 3.6-3.5-6.2zM72.8 53.6L69 59.7l-6.4-4 3.8-6zM14.3 19.2l-3.4 6.2-6.6-3.6 3.4-6.2zM10.4 49.6l3.8 6.1-6.4 3.9-3.8-6zM26.9 9.7l-6.1 3.7L16.9 7 23 3.3z' />\n        <path d='M34 67H41V75H34z' />\n        <path d='M50 65.7l6.1-3.7 3.9 6.5-6.1 3.6zM23 72.1l-6.1-3.6 3.9-6.5 6.1 3.7z' />\n        <path d='M0 35H9V41H0z' />\n        <path d='M0 0H9V6H0z' transform='rotate(-180 38.5 20.5)' />\n      </g>\n      <g\n        fill='#3f3d56'\n        fillRule='evenodd'\n        transform='rotate(-1.1 9110.146 -11111.257) scale(.796)'\n        style={{\n          WebkitAnimation: '1.5s linear infinite both a1_t',\n          animation: '1.5s linear infinite both a1_t',\n        }}\n      >\n        <path\n          fillRule='nonzero'\n          d='M38.5 13c9.9 0 18.8 6 22.6 15.1 3.8 9.2 1.7 19.7-5.3 26.7s-17.5 9.1-26.7 5.3C20 56.3 14 47.4 14 37.5 14 24 25 13 38.5 13zm0-6C26.2 7 15 14.4 10.3 25.8c-4.7 11.4-2.1 24.5 6.6 33.3 8.8 8.7 21.9 11.3 33.3 6.6C61.6 61 69 49.8 69 37.5 69 20.7 55.3 7 38.5 7z'\n        />\n        <path d='M34 0H41V8H34z' />\n        <path d='M53.9 3.3L60 7l-3.9 6.4L50 9.7zM69.1 15.6l3.5 6.2-6.6 3.6-3.5-6.2zM72.8 53.6L69 59.7l-6.4-4 3.8-6zM14.3 19.2l-3.4 6.2-6.6-3.6 3.4-6.2zM10.4 49.6l3.8 6.1-6.4 3.9-3.8-6zM26.9 9.7l-6.1 3.7L16.9 7 23 3.3z' />\n        <path d='M34 67H41V75H34z' />\n        <path d='M50 65.7l6.1-3.7 3.9 6.5-6.1 3.6zM23 72.1l-6.1-3.6 3.9-6.5 6.1 3.7z' />\n        <path d='M0 35H9V41H0z' />\n        <path d='M0 0H9V6H0z' transform='rotate(-180 38.5 20.5)' />\n      </g>\n      <g\n        fill='#3f3d56'\n        fillRule='evenodd'\n        transform='rotate(11.3 -523.745 1427.816) scale(.907)'\n        style={{\n          WebkitAnimation: '1.5s linear infinite both a2_t',\n          animation: '1.5s linear infinite both a2_t',\n        }}\n      >\n        <path\n          fillRule='nonzero'\n          d='M38.5 13c9.9 0 18.8 6 22.6 15.1 3.8 9.2 1.7 19.7-5.3 26.7s-17.5 9.1-26.7 5.3C20 56.3 14 47.4 14 37.5 14 24 25 13 38.5 13zm0-6C26.2 7 15 14.4 10.3 25.8c-4.7 11.4-2.1 24.5 6.6 33.3 8.8 8.7 21.9 11.3 33.3 6.6C61.6 61 69 49.8 69 37.5 69 20.7 55.3 7 38.5 7z'\n        />\n        <path d='M34 0H41V8H34z' />\n        <path d='M53.9 3.3L60 7l-3.9 6.4L50 9.7zM69.1 15.6l3.5 6.2-6.6 3.6-3.5-6.2zM72.8 53.6L69 59.7l-6.4-4 3.8-6zM14.3 19.2l-3.4 6.2-6.6-3.6 3.4-6.2zM10.4 49.6l3.8 6.1-6.4 3.9-3.8-6zM26.9 9.7l-6.1 3.7L16.9 7 23 3.3z' />\n        <path d='M34 67H41V75H34z' />\n        <path d='M50 65.7l6.1-3.7 3.9 6.5-6.1 3.6zM23 72.1l-6.1-3.6 3.9-6.5 6.1 3.7z' />\n        <path d='M0 35H9V41H0z' />\n        <path d='M0 0H9V6H0z' transform='rotate(-180 38.5 20.5)' />\n      </g>\n      <g\n        fill='none'\n        fillRule='evenodd'\n        transform='matrix(.827 0 0 .827 63.6 103.918)'\n      >\n        <path\n          fill={color}\n          d='M254.044 12.763c-25.511-.687-49.796-6.985-72.967-13.969-23.172-6.87-46.12-14.542-70.962-18.206-16.042-2.29-34.311-2.633-47.234 3.893-12.477 6.412-16.487 17.29-18.604 27.366-1.67 7.671-2.562 15.686 1.894 22.785 3.008 5.038 8.578 9.16 12.366 13.855 13.145 16.602 3.787 36.869-10.472 53.013-6.684 7.557-14.482 14.771-19.606 22.786-5.236 8.13-7.576 17.29-3.12 25.533 4.568 8.13 15.262 14.198 26.848 18.55 23.505 8.701 51.132 11.22 78.203 12.594 59.821 3.206 119.977 1.832 179.91.458 22.17-.572 44.45-1.03 66.284-3.664 12.142-1.488 24.619-3.778 33.42-9.389 11.251-7.099 14.036-19.121 6.46-28.052-12.476-14.885-47.233-18.549-56.033-34.579-4.79-8.817.111-18.664 7.13-26.793 15.15-17.633 40.326-32.976 41.663-53.014.891-13.74-11.252-27.594-29.967-34.12-19.718-6.87-47.01-5.955-61.493 5.381-14.927 11.679-41.218 16.144-63.72 15.572z'\n          opacity='0.15'\n          style={{\n            WebkitAnimation: '1.5s linear infinite both a3_o',\n            animation: '1.5s linear infinite both a3_o',\n          }}\n        />\n        <g opacity='0.8' transform='translate(6 183)'>\n          <path\n            fill='#5fa544'\n            d='M75.162 64.862s-3.98-1.649-16.85 4.095c-12.77 5.644-14.362 4.925-17.65 3.984-3.29-.94-5.187-1.163-8.627-6.106 0 0-2.334-13.63-4.707-15.858-2.474-2.13-12.713 1.045-12.713 1.045S2.28 54.77.083 38.143c0 0 1.852-12.378-.4-16.306 0 0 4.575 2.056 12.113-1.052 7.639-3.107 13.556 3.666 13.556 3.666s1.84 4.923 1.604 7.92c-.236 2.897.95 4.012 4.668 2.657 0 0 1.73-2.479-.718-6.71-2.449-4.23-4.21-7.351-3.472-10.542.74-3.292 2.795-7.767 9.323-9.987 6.526-2.12 15.23-2.414 19.552-4.162C60.53 1.98 61.544.791 61.544.791s-2.631 2.568 3.333 13.742c5.963 11.173 2.005 15.925 2.005 15.925s-3.294 7.66-17.685 6.885c0 0-13.805.331-6.378 6.322 0 0 4.912-.94 12.14-3.151 7.227-2.212 12.31 7.35 13.529 14.066 1.219 6.615 6.674 10.282 6.674 10.282z'\n            style={{\n              WebkitAnimation: '1.5s linear infinite both a4_t',\n              animation: '1.5s linear infinite both a4_t',\n            }}\n          />\n          <path\n            fill='#fff'\n            stroke='#fff'\n            strokeWidth='0.7'\n            d='M56.9 9h.1c.5 2.1-5.7 10.4-10.9 17H46c7.4-9.4 11.3-15.4 10.9-17zM46 26v.1c-4.2 5.3-9.5 11.7-13.7 16.5-.4.4-.8.9-1.2 1.4l-.1-.1c.4-.5.8-1 1.2-1.4C36.4 37.7 41.8 31.4 46 26z'\n          />\n          <path\n            fill='#444053'\n            d='M31.9 43l.1.1c-7.8 9.7-8.3 24.8-8.4 24.9L22 66.1c0-.1 2-13.3 9.9-23.1z'\n          />\n          <path\n            stroke='#fff'\n            d='M67 58s-9.1-4.6-16.2-3c-7.1 1.7-23-5.9-23-5.9s-6.8-2.7-8.1-5.8c0 0-4.7-4.8-5-7.3-.2-2.5-4.8-8.8-7.7-9'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.5'\n            d='M66 63s-4.5-3.2-4-7'\n          />\n          <path\n            stroke='#444053'\n            d='M59 66s-7.3-2.2-8-11'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.5'\n            d='M49 69s-6.8-5.1-4.5-14M68 53s-4.9 1.5-3.9 4'\n          />\n          <path\n            stroke='#444053'\n            d='M62 44s-6.8 2-7 11'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.5'\n            d='M52 42s-6.4 6.8-6 13M42 44s-5.7 5.8-4.9 9M39 42.8s-5.3.9-6-.8M31 36s3.2 3.7 4 2.9'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.7'\n            d='M59 33.9s-13 .9-16-2.9M36 11s4 12.2 9 16M65 24.1s-10 4.4-16-.1'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.5'\n            d='M45 13s2.1 5.6 5 7'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.7'\n            d='M63 13s-5.8 1.9-8 .4'\n          />\n          <path\n            stroke='#fff'\n            strokeWidth='0.5'\n            d='M27 40s0 8.4-2 9M25 30s-2.1 7.9-8 10M4 41.6s5.9 2.2 11-3.6M18 23s-.7 6.8-5 10M4 30s5.7 0 7-2'\n          />\n        </g>\n        <path\n          fill='url(#Gradient-0)'\n          fillRule='nonzero'\n          d='M138.3 222.5c1.1-1.9 2.3-3.7 3.4-5.6.9-1.8 1.7-3.7 2.5-5.5 1.5-3.1 3.3-6.1 4.9-9.1 1-2 2.1-4.2 1.9-6.4-.2-2.1-1.5-4-2-6-1.9-8.5-6.7-16.2-9.6-24.4-.7-2.1-1.4-4.2-2.3-6.2-1.8-3.8-4.3-7.3-6.8-10.7-.9-1.3-1.9-2.5-3-3.7-.9-.9-1.9-1.7-2.7-2.6-1.6-2-2.4-4.9-4.5-6.4-.1.1-.1.2-.1.3-1.5-3.9-6.5-6.4-9.5-9.5-1.7-2-3.2-4-4.6-6.1l-6.4-9.2c-1.1-1.6-2.2-3.2-2.6-5.1-.5-2.2 0-4.6-.6-6.9-.3-1.4-1-2.6-1.9-3.7h.2c1.2-.3 2.5-.4 3.7-.7 2.6-.6 4.8-2.3 7.4-2.9 1.4-.4 2.8-.5 4-1.1 1.2-.7 1.8-2.1 1.5-3.5-.8-4.4 1.5-9 1.1-13.5-.1-1.2-.4-2.4-.6-3.7-.5-2.8-.4-5.8-.2-8.7.8-1.3 1.8-2.5 2.9-3.6 1.6-1.5 3.5-2.8 4.6-4.8 1-1.7 1.2-3.7 1-5.7-.2-1.4-.7-2.9-1.8-3.7-1.1-.9-2.7-1-4.1-.5-.2 0-.4.1-.6.2-1.1-.6-2.4-.7-3.6-.2-1.4.4-2.5 1.3-3.6 2.2-.7.5-1.2 1.1-1.7 1.8-.7 1.1-.9 2.4-1.1 3.6-.6 2.5-1.4 4.8-2.4 7.1-.2.4-.8 1.1-1.2 1.8l-.7-.2c-.4 3.2-3 5.5-4.6 8.2-.8 1.3-1.4 2.8-2.1 4.2-.8 1.4-1.7 2.9-2.7 4.3-.9 1.4-1.9 2.8-2.9 4.2-1.2 1.8-2.5 3.6-3.9 5.3l-3.9-.3c-2.2 0-4.3.2-6.5.6-.1-.7-.2-1.5-.2-2.3v-.1-.6c3.8-2.5 6-6.8 5.9-11.3-.2-4.5-2.6-8.6-6.5-10.9.1-.4.1-.8.1-1.2V59v-.4c0-.2 0-.5-.1-.7 0-.1-.1-.2-.1-.4l-.3-.6c-.1-.1-.1-.2-.2-.3l-.2-.2v-.1c-.1 0-.1-.1-.2-.1l-.1-.1-.1-.1-.1-.1-.1-.1-.2-.1-.1-.1H70l-.1-.1-.2-.1h-.1l-.2-.1-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1h-.2l-.1-.1H67.8l-.3-.1-.4-.1c-1.5-.3-3.1-.6-4.7-.8-1.3-.2-2.6-.3-3.9-.1-1.7.4-3.2 1.6-4.8 2.3-2 .9-4.1 1.2-6.2 1.6-2 .5-4.2 1.3-5.5 3-1 1.3-1.4 3-1.7 4.6-2.4 13.3.2 27 .7 40.6.2 5.2 0 10.9-3 15.2l8.7-.2c.5 0 .9 0 1.3-.1.4 0 .9 0 1.3-.1 1.1-.1 2.2-.4 3.1-.9.5-.3.9-.6 1.3-1 1.2-1.2 1.8-2.9 2.4-4.5.2-.6.4-1.1.5-1.7.1-.2.2-.5.2-.7l.1-.1h.1c.3.7.7 1.3 1.2 2 1.5 2.2 3.4 4.1 5.3 6 3.8 3.8 7.7 7.7 12.5 10.1 1.6.8 3.4 1.5 4.6 2.8.6.7 1.1 1.5 2 1.7.5.2 1.1 0 1.6.3.8.3 1 1.2 1.4 1.9.3.7 1.1 1.5 1.8 1.2-.2 1.3.3 2.8 1.4 3.7.4.1.7.4.9.8.2.3.2.6.2.9.2.9.7 1.7 1.4 2.3-.7 1.2-.2 2.8-.1 4.2 0 1.2-.4 2.4-.7 3.5-.8 3.5-.4 7.1.3 10.5.3 1.9.8 3.9 2 5.4l1.3 1.3c.9.9 1.5 2 2 3.1 1.1 2.2 1.9 4.5 2.2 6.9.2 1.3.5 2.4 1.1 3.5.7 1.7 0 3.8.7 5.6.3.7.9 1.4 1.1 2.2.3 1.2-.3 2.4-.5 3.6-.4 2.8 1.6 5.4 1.8 8.2 0 .2 0 .4-.1.5-.1.2-.4.2-.6.3-.3.1-.4.6-.5 1-.1.4-.5.9-.9.7-5.8 3.2-11.8 6-17.7 9.2l-2.6 1.4-14.3 7.6c-.4.1-.6.5-.6.9 0 .2 0 .4.1.5-1 .3-2 .6-2.7.7-.3 0-.5.1-.8.1.1-.1.1-.2.1-.3 0-.4-.3-.7-.6-.7-.4 0-.7 0-1 .1-.9.2-1.7.4-2.5.5-1 .1-2 .1-3 .3-1 .3-1.9.9-2.3 1.8-.2.5-.3 1.1-.3 1.7 0 2.2.3 4.4.8 6.5 0 .2.1.3.3.4.1 0 .2 0 .4.1.1 0 .1.1.2.2.6 1.4.7 2.9.9 4.4.2 2.2.5 4.4.9 6.5.2 1.3.5 2.6 1.3 3.6.9 1.1 2.3 1.5 3.7 1.7 3 .4 5.9-.2 8.8-.8.5-.1 1.1-.2 1.5-.6.3-.4.4-.8.3-1.2 0-1.5-1.4-2.5-2.6-3.3l-1.6-1.2c-.3-.1-.4-.5-.4-.8l.1-2.1h-.3c.4-1.5.9-3 2.1-4 .7-.7 1.7-1.2 2.6-1.9 1 .8 2.2 1.3 3.5 1.3 2.2-2.8 5.2-4.8 8.2-6.7 2.4-1.6 4.9-3 7.5-4.2 2.1-1.1 4.3-2 6.4-2.9 3.1-1.3 6.2-2.5 9.3-3.6 2.1-.7 4.2-1.5 6.1-2.6 5-2.8 8.5-8.6 7.8-14.3-.8-7.2 1-14.8.9-22-.1-2.2-.1-4.3-.8-6.3.2.1.3.2.4.3 1.3 1.2 1.6 3.1 2.9 4.5.9 1.1 2.4 1.8 3 3.1.4 1 .4 2.4 1.3 3 .3.1.6.2.8.4.3.2.6.5.8.8 1 1.4 2 2.9 2.1 4.6.1.7 0 1.5.5 1.9.1.2.3.3.4.4.2.4-.3.8-.3 1.2-.1.5.4.9.7 1.4.6.8.6 1.8 0 2.6-2.9 3.8-3.4 8.9-5.9 12.9-.9 1.4-1.9 2.7-2.8 4.1-2.6 4.4-3.9 9.3-5.2 14.3.6.9 1.3 1.7 2.2 2.4-.5 1.6-1.3 3.2-2.4 4.5-.3.3-.6.6-.8 1-.3-.3-.5-.5-.8-.6-.5 2-.7 4.1-.7 6.2 0 1.4.1 2.9 1.3 3.7.4.3.9.5 1.4.6l2.5.7c.4.2.8.2 1.3.2.3-.1.5-.3.8-.3.4-.1.7 0 1 .1l2.1.6c.7.2 1.4.4 2.1.7.6.3 1.1.7 1.7 1 1 .5 2 .9 3.1 1.3l3.6 1.2c1 .4 2.1.7 3.1.8.8.1 1.5 0 2.3.1.5.1 1.1.3 1.7.4.9 0 1.8-.2 2.6-.8.3-.2.5-.4.7-.7.6-.8.1-1.9-.4-2.7-1-1.6-2.2-3-3.8-3.9-.6-.4-1.3-.6-2-1-1.9-.9-3.3-2.4-5.1-3.5-.4-.3-1.1-.3-1.5.1-1.5-.9-3.1-1.9-3.9-3.5-.4-.7-.6-1.5-.7-2.3.8.2 1.7.3 2.5.4 1.4-5.3 2.9-10.7 5.6-15.6zM105 72c-.1.4-.2.8-.3 1.1-.8 3.2-1.9 6.8-4.5 9.1-.8.7-1.8 1.3-2.9 1.7l-.3.1c1.9-4.3 4.8-8.2 8-12z'\n        />\n        <path\n          fill='#fbbebe'\n          d='M107 52.1c.2-1.3.4-2.6 1.1-3.7.4-.7 1-1.3 1.6-1.8 1.1-1 2.2-1.9 3.5-2.3 1.3-.5 2.9-.4 4 .5 1.1.8 1.5 2.4 1.7 3.8.2 2 0 4.1-.9 5.8-1.1 2-2.9 3.3-4.5 4.8-1.1 1.2-2.1 2.5-2.9 3.9-.4.7-.8 1.4-1.3 2-.6.6-1.4 1-2.2.9-.6-.1-1.2-.6-1.7-1.1-.6-.6-2.3-1.6-2.4-2.5 0-.8 1.3-2.5 1.6-3.2 1-2.3 1.8-4.7 2.4-7.1z'\n        />\n        <path\n          fill='#000'\n          d='M107 52.1c.2-1.3.4-2.6 1.1-3.7.4-.7 1-1.3 1.6-1.8 1.1-1 2.2-1.9 3.5-2.3 1.3-.5 2.9-.4 4 .5 1.1.8 1.5 2.4 1.7 3.8.2 2 0 4.1-.9 5.8-1.1 2-2.9 3.3-4.5 4.8-1.1 1.2-2.1 2.5-2.9 3.9-.4.7-.8 1.4-1.3 2-.6.6-1.4 1-2.2.9-.6-.1-1.2-.6-1.7-1.1-.6-.6-2.3-1.6-2.4-2.5 0-.8 1.3-2.5 1.6-3.2 1-2.3 1.8-4.7 2.4-7.1z'\n          opacity='0.1'\n        />\n        <path\n          fill={color}\n          d='M70 86.6c2.8-.7 5.8-1.1 8.7-1 4.9 0 10 1.2 14.7-.3 1.2-.4 2.3-.9 3.5-1.5.9-.5 1.9-1 2.6-1.7 2.3-2.5 3.3-6.2 4-9.5.8-3.3 1-6.7 1.1-10.1 1.3.5 2.5 1.1 3.9 1 1.3-.1 2.7-1.2 2.6-2.5-.2 3.1-.3 6.3.2 9.4.2 1.2.5 2.4.7 3.7.4 4.5-2 9-1.2 13.4.3 1.4-.3 2.8-1.5 3.5-1.2.6-2.6.7-3.9 1-2.6.7-4.9 2.3-7.5 3-1.2.2-2.5.3-3.7.6-1.7.5-3.3 1.5-5.1 1.8-1.3.2-2.6.1-4 .2-1.1.1-2.3.4-3.4.4-2.9.1-5.5-1.5-7.4-3.7-1.9-2.1-3.1-5.1-4.3-7.7z'\n        />\n        <path\n          fill='#000'\n          d='M70 86.6c2.8-.7 5.8-1.1 8.7-1 4.9 0 10 1.2 14.7-.3 1.2-.4 2.3-.9 3.5-1.5.9-.5 1.9-1 2.6-1.7 2.3-2.5 3.3-6.2 4-9.5.8-3.3 1-6.7 1.1-10.1 1.3.5 2.5 1.1 3.9 1 1.3-.1 2.7-1.2 2.6-2.5-.2 3.1-.3 6.3.2 9.4.2 1.2.5 2.4.7 3.7.4 4.5-2 9-1.2 13.4.3 1.4-.3 2.8-1.5 3.5-1.2.6-2.6.7-3.9 1-2.6.7-4.9 2.3-7.5 3-1.2.2-2.5.3-3.7.6-1.7.5-3.3 1.5-5.1 1.8-1.3.2-2.6.1-4 .2-1.1.1-2.3.4-3.4.4-2.9.1-5.5-1.5-7.4-3.7-1.9-2.1-3.1-5.1-4.3-7.7z'\n          opacity='0.1'\n        />\n        <path\n          fill='#fbbebe'\n          d='M82 97.2c-2 1.4-4.3 2.3-6.6 2.6-1.3.1-2.5.2-3.8.2-5.2 0-10.4-.5-15.6-1.3 2.1-2.3 4.1-4.8 4.9-7.8.4-1.6.5-3.2.2-4.9-.3-2-.8-4.1-1.4-6.1 2.2.1 4.4.1 6.6-.2 1.2-.1 4.3-1.3 5.4-.4 1 .8.2 3.7.2 5.1v.1c.1 2 .5 4 1.3 5.9 1.5 3.6 4.9 6.5 8.8 6.8z'\n        />\n        <path\n          fill='#000'\n          d='M71.7 84.7c-3 2.2-6.8 2.9-10.3 1.8-.3-2.2-.8-4.4-1.4-6.5 2.1.1 4.2 0 6.3-.2 1.2-.2 4.2-1.4 5.2-.5 1 .9.2 4 .2 5.4z'\n          opacity='0.1'\n        />\n        <ellipse cx='64.5' cy='73' fill='#fbbebe' rx='13.5' ry='13' />\n        <path\n          fill={color}\n          d='M119 139.4c0 2.1-1.1 4.1-2.9 5.2-1 .5-2 .9-3.1 1.1-5.8 1.4-11.8 2.6-17.8 2.2-1.3 0-2.6-.2-3.8-.8-1.1-.5-2.1-1.6-2.3-2.9 0-.4-.1-.7-.2-1-.2-.3-.5-.6-.9-.8-1.1-.8-1.6-2.3-1.3-3.7-.8.4-1.5-.4-1.9-1.1-.3-.7-.6-1.6-1.3-1.9-.5-.2-1.1-.1-1.6-.3-.8-.2-1.4-1-1.9-1.7-1.3-1.3-3-2-4.6-2.8-4.6-2.4-8.5-6.2-12.2-9.9-1.9-1.9-3.8-3.8-5.3-6.1-.4-.6-.8-1.3-1.2-1.9-1.1-2.2-2.1-4.5-2.9-6.9-.5-1.2-1-2.6-.8-3.9.1-.1.1-.2.1-.3.3-.9.6-1.7 1.2-2.4 1.3-2 3-3.8 5.2-4.4 2.2-.6 4.5.1 6.7.6.8.2 1.5.3 2.3.4 2.4.2 4.8-.5 7.1-1.2l2.5-.7c1.3-.3 1.9-1.9 3.2-2.2.6 0 1.2 0 1.7.1 2.6.5 5.3 1.2 7.5 2.5.6.3 1 .7 1.5 1 1.6 1.4 2.9 3.1 3.4 5.2.5 2.2 0 4.6.6 6.8.4 1.9 1.5 3.5 2.6 5.1l6.2 9c1.4 2.2 2.9 4.2 4.6 6.1 3.3 3.7 9.5 6.5 9.6 11.6z'\n        />\n        <path\n          fill='#032a3e'\n          d='M149.1 202.4c-1.7 2.9-3.5 5.9-5 8.9-.8 1.8-1.6 3.7-2.5 5.4-1.1 1.9-2.4 3.7-3.5 5.6-2.7 4.7-4.2 10.1-5.6 15.4-4-.6-7.8-1.9-11.3-3.9-.2-.1-.4-.3-.6-.4-1-.7-1.7-1.5-2.3-2.5 1.3-4.8 2.7-9.7 5.3-14 .9-1.4 1.9-2.7 2.8-4 2.6-4 3.1-9 6-12.7.6-.8.6-1.8 0-2.6-.3-.4-.8-.9-.7-1.4 0-.4.4-.7.3-1.1-.1-.2-.3-.3-.4-.4-.5-.4-.5-1.2-.5-1.9-.1-1.7-1.1-3.1-2.2-4.5-.2-.3-.4-.6-.7-.9l-.9-.3c-.9-.6-.9-2-1.3-3-.6-1.3-2.1-1.9-3.1-3-1.2-1.4-1.5-3.2-2.9-4.4-.1-.2-.2-.3-.4-.4.7 2 .7 4.1.8 6.2.1 7.2-1.7 14.6-.9 21.7.7 5.7-2.8 11.3-7.9 14.1-1.9 1.1-4.1 1.8-6.2 2.6-3.1 1.1-6.3 2.2-9.4 3.5-2.2.8-4.3 1.8-6.5 2.8-2.6 1.3-5.1 2.7-7.6 4.2-3.1 1.9-6.1 3.8-8.3 6.6-2.1-.1-4-1.3-5.3-2.9-1.3-1.5-2.2-3.5-2.9-5.4-.7-1.6-1.3-3.3-1.4-5 0-.4.3-.8.6-.9l14.5-7.5 2.7-1.4c5.9-3.1 12-5.9 17.9-9 .4.1.8-.3.9-.7.1-.4.2-.8.6-1 .1-.1.4-.1.5-.3.1-.1.2-.3.1-.4-.2-2.8-2.2-5.4-1.8-8.2.2-1.1.8-2.3.5-3.5-.2-.8-.8-1.4-1.1-2.2-.7-1.7 0-3.7-.8-5.4-.5-1.1-.8-2.3-1-3.5-.4-2.4-1.1-4.7-2.2-6.8-.5-1.1-1.2-2.1-2-3-.5-.5-1-.9-1.4-1.4-1.2-1.4-1.7-3.4-2.1-5.2-.6-3.4-1-7-.2-10.3.2-1.2.6-2.3.6-3.5 0-1.6-.7-3.4.4-4.5.5-.4 1-.7 1.6-.8 2.6-.8 5.2-1.1 7.9-1.4l12-1.6c1.4-.1 2.8-.3 4.1-1 1.6-.9 2.7-2.5 3.3-4.2 2.2 1.5 3 4.3 4.6 6.3.9.9 1.9 1.7 2.8 2.6 1.1 1.1 2.1 2.3 3 3.6 2.5 3.4 5.1 6.8 6.9 10.6.9 2 1.6 4 2.4 6 2.9 8.1 7.7 15.7 9.7 24 .5 2.1 1.8 3.9 2 6 .2 2.2-.9 4.3-1.9 6.3z'\n        />\n        <path\n          fill='#000'\n          d='M85.6 135.2c-.4.5-.6 1.2-.6 1.8.4-1.4 2.8-2.1 3-3.5.1-.6-.1-.6-.6-.3-.8.5-1.1 1.4-1.8 2zM91.4 138.4c-.5.4-.8.8-1 1.3-.4.7-.5 1.5-.2 2.3.3-.1.4-.5.5-.8.2-.5.4-.9.8-1.3.2-.4 1.5-1.2 1.5-1.6 0-.6-1.2-.1-1.6.1z'\n          opacity='0.1'\n        />\n        <path\n          fill='#3f3d56'\n          d='M71 61c.1-.9-.1-1.9-.5-2.7-.9-1.4-2.6-1.9-4.2-2.3-1.5-.3-3-.5-4.6-.8-1.2-.2-2.5-.3-3.7 0-1.8.3-3.2 1.5-4.8 2.2-1.8.9-3.9 1.1-5.9 1.6-2.1.5-4.1 1.3-5.4 3-.9 1.3-1.3 2.9-1.6 4.5-2.4 13.3.2 26.9.7 40.3.1 5.3-.1 10.9-3 15.2l8.5-.2c2.2-.1 4.5-.2 6.2-1.6 1.5-1.2 2.2-3.2 2.9-5 .5-1.5 1-2.9 1-4.5.2-3.2-1.6-6.3-1-9.4.4-2.3 2.1-4.2 3.8-5.7 1.8-1.6 3.8-2.9 5.2-4.7 2.5-3.3 3-7.9 2.7-12.1-.2-2.5-.6-5-.4-7.5.1-1.8.7-3.8 1.9-5.2 1.4-1.7 2.1-2.7 2.2-5.1z'\n        />\n        <path\n          fill='#000'\n          d='M70.5 58.2c-.9-1.4-2.6-1.9-4.1-2.2.8.3 1.5.9 2 1.6.4.9.6 1.8.5 2.8-.1 2.3-.8 3.4-2.2 5-1.1 1.5-1.7 3.4-1.9 5.3-.2 2.5.2 5 .4 7.5.4 4.2-.1 8.7-2.7 12-1.4 1.9-3.4 3.2-5.1 4.7-1.8 1.6-3.4 3.5-3.9 5.8-.5 3.1 1.2 6.2 1.1 9.4-.1 1.5-.6 3-1.1 4.5-.6 1.8-1.4 3.8-2.9 5-1.7 1.4-4 1.5-6.2 1.6l-6 .1c-.1.3-.3.5-.4.7l8.5-.2c2.2-.1 4.5-.2 6.2-1.6 1.5-1.2 2.2-3.2 2.9-5 .5-1.5 1-3 1-4.5.2-3.2-1.6-6.3-1-9.4.4-2.3 2.1-4.2 3.8-5.8 1.8-1.5 3.8-2.8 5.2-4.7 2.5-3.3 3-7.8 2.7-12-.2-2.5-.6-5-.4-7.5.1-1.9.7-3.8 1.9-5.3 1.4-1.6 2.1-2.7 2.2-5 .1-1-.1-1.9-.5-2.8zM136 194.9L120.2 234c-.9-.7-1.6-1.5-2.2-2.5 1.3-4.8 2.6-9.8 5.2-14.1.8-1.4 1.8-2.7 2.6-4.1 2.6-4 3.1-9 5.9-12.8.6-.8.6-1.8 0-2.6-.3-.4-.8-.8-.7-1.4.1-.4.5-.7.3-1.1-.1-.2-.3-.3-.4-.4-.5-.5-.4-1.2-.5-1.9-.1-1.7-1.1-3.2-2.1-4.6-.2-.3-.4-.6-.7-.8-.3-.2-.6-.3-.9-.4-.9-.6-.8-2-1.2-3-.6-1.3-2.1-2-3-3-1.2-1.4-1.5-3.3-2.8-4.5l-.1-.3 1.2-7.5 15.2 25.9z'\n          opacity='0.1'\n        />\n        <ellipse\n          cx='92.5'\n          cy='252.5'\n          fill={color}\n          opacity='0.1'\n          rx='77.5'\n          ry='5.5'\n        />\n        <path\n          fill='#fbbebe'\n          d='M62.1 225.1c-.9.1-1.7.4-2.5.8-1 .6-1.7 1.8-2.1 3-1.2 2.9-1.4 6.2-1.5 9.4 0 2.6.1 5.2.9 7.6.3.8.7 1.5 1.3 2 .5.4 1 .7 1.7.9 1.3.3 2.8.3 3.9-.5 1.2-1 1.5-2.7 1.8-4.3.3-2.1.8-4.4 2.3-5.8 1.1-1.1 2.7-1.7 3.6-3 .9-1.6.4-3.7-.2-5.5-.5-1.5-1.3-4.7-2.9-5.4-1.5-.8-4.7.5-6.3.8zM120.6 233.9c-.5 1.6-1.3 3.1-2.4 4.4-.6.8-1.5 1.7-1.1 2.7.1.3.3.6.6.8 4.9 4.9 11.8 7.3 18.6 8.2h.3c.2-.1.3-.4.3-.6.1-.7.1-1.5 0-2.2-.3-1.7-1.8-2.9-3.2-3.8-1.4-.9-3-1.9-3.8-3.4-1-1.9-.6-4.4-1.7-6.1-1-1.5-2.8-2.1-4.5-2.4-.6-.1-1.8-.7-2.3-.4-.5.3-.7 2.2-.8 2.8z'\n        />\n        <path\n          fill='#3f3d56'\n          d='M61.6 224.8c0-.4-.2-.7-.6-.8-.3 0-.7 0-1 .1-.8.3-1.7.4-2.5.5-1 .1-2 .1-2.9.4-1 .3-2 .9-2.3 1.8-.2.6-.3 1.2-.3 1.8 0 2.2.2 4.5.8 6.7 0 .2.1.4.2.4.2.1.3 0 .4.1l.3.3c.6 1.4.7 3 .8 4.5.3 2.3.6 4.5.9 6.8.3 1.3.5 2.7 1.3 3.7.9 1.1 2.4 1.6 3.7 1.8 3 .4 5.9-.2 8.8-.9.5 0 1-.3 1.4-.7.3-.3.4-.7.4-1.2-.1-1.5-1.4-2.6-2.6-3.4l-1.6-1.2c-.2 0-.3-.1-.3-.2-.1-.2-.1-.4-.1-.6l.1-2.2c-2.2 0-4.3 1.3-5.3 3.4-.2.5-.4 1.1-.9 1.2-.6.3-1.3-.2-1.5-.9-.1-.6-.1-1.3.1-1.9 1-5.5.7-11 1.3-16.5.1-.6.2-1.2.6-1.8.2-.4.8-.7.8-1.2zM133.8 245.9c.2.5.6.8.8 1.2.2.5.2 1.1-.2 1.3-.2.1-.5.2-.7.1-5.1-.7-9.9-3-13.7-6.6-.7-.6-1.2-1.3-1.7-2s-.8-1.6-1.6-1.9c-.5 2.1-.7 4.3-.7 6.4 0 1.5.2 3.1 1.3 3.9.4.3.9.5 1.4.7l2.4.7c.4.1.9.2 1.3.1.3-.1.5-.3.8-.3.3-.1.7 0 .9.1l2.1.7c.7.1 1.4.4 2 .7.6.3 1.2.7 1.7 1 1 .5 2 1 3 1.3l3.6 1.3c1 .5 2.1.8 3.1.9.8.1 1.5 0 2.2.1.6.1 1.1.3 1.7.4.9 0 1.8-.3 2.5-.8.3-.2.6-.4.8-.7.5-.9 0-2-.5-2.9-.9-1.6-2.1-3.1-3.6-4-.7-.4-1.4-.7-2-1-1.8-1-3.2-2.6-5-3.7-1.6-1-2.7 1.7-1.9 3z'\n        />\n        <g\n          style={{\n            WebkitAnimation: '1.5s linear infinite both a5_t',\n            animation: '1.5s linear infinite both a5_t',\n          }}\n        >\n          <path\n            fill='#fbbebe'\n            d='M52 8.1c.2-1.3.4-2.6 1.1-3.7.4-.7 1-1.3 1.6-1.8 1.1-1 2.2-1.9 3.5-2.3 1.3-.5 2.9-.4 4 .5 1.1.8 1.5 2.4 1.7 3.8.2 2 0 4.1-.9 5.8-1.1 2-2.9 3.3-4.5 4.8-1.1 1.2-2.1 2.5-2.9 3.9-.4.7-.8 1.4-1.3 2-.6.6-1.4 1-2.2.9-.6-.1-1.2-.6-1.7-1.1-.6-.6-2.3-1.6-2.4-2.5 0-.8 1.3-2.5 1.6-3.2 1-2.3 1.8-4.7 2.4-7.1z'\n          />\n          <path\n            fill='#000'\n            d='M41 51.6c-.8.7-1.8 1.3-2.7 1.7-2.6 1.3-5.5 2-8.1 3.2-1.3.6-2.5 1.4-3.7 2.1l-7.7 4.8c-.6.3-1.2.7-1.7 1.2-.9 1-.9 2.7-1.8 3.7-.8 1-2.3 1.6-3.7 1.7-1.5 0-2.9-.2-4.2-.7-.8-.2-1.6-.5-2.4-.8-.8-.4-1.6-.8-2.3-1.3C1.3 66.2.2 64.7 0 63c-.1-1.1.1-2.3.5-3.3.2-.7.5-1.4.8-2.1.2-.4.4-.7.7-1.1 1.7-2.4 4.9-3.6 7.9-4.1 1.6-.3 3.2-.5 4.8-.8.7.2 1.5.3 2.3.4 2.5.1 4.9-.5 7.2-1.1l2.6-.7c1.3-.4 2-1.9 3.3-2.2.6 0 1.2 0 1.7.1 2.7.5 5.4 1.2 7.7 2.5.5.3 1 .6 1.5 1z'\n            opacity='0.1'\n          />\n          <path\n            fill={color}\n            d='M46.8 17c-.3 3.2-2.9 5.5-4.5 8.2-.8 1.4-1.4 2.8-2.1 4.2-.8 1.5-1.7 3-2.6 4.3L34.7 38c-1.7 2.5-3.4 5-5.5 7.1-3.8.6-6.9 3.4-10.5 4.8-2.8 1.1-5.9 1.3-8.9 1.9-3 .6-6.1 1.8-7.9 4.3-.6.9-1.1 2-1.4 3.2-.4 1.1-.6 2.3-.5 3.5.2 1.7 1.3 3.2 2.7 4.3 1.4 1 3 1.7 4.6 2.2 1.3.5 2.7.7 4.1.7 1.5-.1 2.9-.6 3.8-1.7.8-1.2.8-2.9 1.7-3.9.5-.5 1.1-.9 1.7-1.3l7.6-4.9c1.2-.8 2.5-1.5 3.7-2.2 2.6-1.2 5.4-1.9 8-3.3 2.5-1.3 4.9-3.4 5.4-6.3 1.6-8.8 7.6-16.2 12.7-23.5-.2-.1-.1-.4-.2-.6-.6-1.7-2.1-3-3.7-3.9-1.7-.8-3.5-1-5.3-1.4z'\n          />\n        </g>\n      </g>\n      <g fill='none' fillRule='evenodd' opacity='0' transform='translate(318.9,195.5) scale(.164,.164) translate(-27.9,-39.3)' style={{animation: '1.5s linear infinite both a6_t, 1.5s linear infinite both a6_o'}}><path fill={color} d='M1.2 .9l53.5 .4v76.5l-53.6-0.4Z' /><path fill='#f5f5f5' d='M10.7 9.2l32.2 .3v5.3l-32.2-0.3Z' /><path fill='#f5f5f5' d='M5.4 21.9l42.8 .4v1.3l-42.8-0.3Z' /><path fill='#f5f5f5' d='M5.4 25l42.8 .4v1.3l-42.8-0.4Z' /><path fill='#f5f5f5' d='M5.4 28.1l42.8 .3v1.4l-42.8-0.4Z' /><path fill='#f5f5f5' d='M5.4 31.2l20.5 .1v1.3l-20.5-0.1Z' /><path fill='#f5f5f5' d='M5.4 34.2l23.6 .2v1.4l-23.6-0.2Z' /><path fill='#f5f5f5' d='M5.3 37.3l42.9 .4v1.3l-42.9-0.4Z' /><path fill='#f5f5f5' d='M5.4 40.4l42.8 .3v1.4l-42.8-0.4Z' /><path fill='#f5f5f5' d='M5.3 43.5l39.8 .3v1.3l-39.8-0.3Z' /><path fill='#f5f5f5' d='M5.3 46.5l42.9 .4v1.3l-42.9-0.3Z' /><path fill='#f5f5f5' d='M5.3 49.6l22.4 .2v1.3l-22.4-0.2Z' /><path fill='#f5f5f5' d='M21.4 55l25.9 .2v17.6l-25.9-0.2Z' /></g><g fill='none' fillRule='evenodd' opacity='0' transform='translate(294.1,205.5) scale(.106,.106) translate(-28.5,-40.6)' style={{animation: '1.5s linear infinite both a7_t, 1.5s linear infinite both a7_o'}}><path fill='url(#Gradient-1)' d='M1 1l54.9 .1l.2 79l-55-0.1Z' transform='translate(28.5,40.6) rotate(.2) translate(-28.5,-40.6)' /><path fill='#f5f5f5' d='M1.6 1.8l53.6 .4l-0.3 77.3l-53.5-0.4Z' /><path fill={color} opacity='.3' d='M7.2 54.6l23.7 .2v1.3l-23.7-0.1Z' /><path fill={color} opacity='.3' d='M7.2 57.7l42.9 .3v1.3l-42.9-0.2Z' /><path fill={color} opacity='.3' d='M7.2 60.8l42.9 .3v1.3l-42.9-0.2Z' /><path fill={color} opacity='.3' d='M7.2 64l39.8 .2l-0.1 1.3l-39.7-0.2Z' /><path fill={color} opacity='.3' d='M7.2 67.1l42.9 .2v1.3l-42.9-0.2Z' /><path fill={color} opacity='.3' d='M7.2 70.2l22.3 .1v1.3l-22.3-0.1Z' /><path fill={color} opacity='.3' d='M7.3 6.7l26 .1l-0.1 17.8l-25.9-0.2Z' /><path fill={color} opacity='.3' d='M27.4 29.9l25.9 .1v17.8l-26-0.2Z' /></g><g fill='none' fillRule='evenodd' opacity='0' transform='translate(310.8,204.5) scale(.155,.155) translate(-47.5,-57.2)' style={{animation: '1.5s linear infinite both a8_t, 1.5s linear infinite both a8_o'}}><path fill='url(#Gradient-2)' d='M1 1l92.8 .1l.1 112.2l-92.7-0.1Z' transform='translate(47.5,57.2) rotate(.3) translate(-47.5,-57.2)' /><path fill='#fff' d='M2.2 1.6l91 .6l-0.4 110.2l-91.1-0.7Z' /><path fill={color} d='M19.3 84.1l40.9 .3v1.7l-40.9-0.3Z' /><path fill={color} d='M19.3 94.2l60 .5l-0.1 1.6l-59.9-0.4Z' /><path fill={color} d='M64.3 84.4l15 .2l-0.1 1.6l-14.9-0.1Z' /><path fill={color} d='M19.3 89.1l17.3 .2v1.6l-17.3-0.1Z' /><path fill={color} d='M42.7 89.3l17.3 .1v1.7l-17.3-0.1Z' /><path fill={color} d='M64.3 89.5l15 .1l-0.1 1.7l-14.9-0.1Z' /><path fill={color} d='M22.2 28.3l50.6 .4l-0.1 18.5l-50.6-0.4Z' /></g>\n    </svg>\n  );\n};\n\nexport { AtsSvgPreparingDoc };\n","import * as React from 'react';\n\ninterface IAtsSvgFolderProps {\n  /**\n   * The width of the component.\n   * Default: '131'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '131'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#80BBD6'\n     * Expected: primary[200] from theme.palette since Original doesn't match palette and using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077AD'\n     * Expected: primary.main from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.181'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgFolder = ({\n  width = '131',\n  height = '131',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00779D',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.181',\n  margin = '0'\n}: IAtsSvgFolderProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      xmlns='http://www.w3.org/2000/svg'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <filter x='-4.0%' y='-3.2%' width='108.0%' height='108.0%' filterUnits='objectBoundingBox' id='filter-2'>\n          <feOffset dx='0' dy='1' in='SourceAlpha' result='shadowOffsetOuter1'/>\n          <feGaussianBlur stdDeviation='1.5' in='shadowOffsetOuter1' result='shadowBlurOuter1'/>\n          <feColorMatrix values='0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.26 0' type='matrix' in='shadowBlurOuter1'/>\n        </filter>\n        <linearGradient x1='76.3981729%' y1='81.8984078%' x2='21.5971047%' y2='26.43483%' id='linearGradient-3'>\n          <stop stopColor='#000000' stopOpacity='0' offset='0%'/>\n          <stop stopColor={shadowColor} offset='100%'/>\n        </linearGradient>\n        <filter x='-7.0%' y='-8.3%' width='114.0%' height='120.8%' filterUnits='objectBoundingBox' id='filter-5'>\n          <feOffset dx='0' dy='1' in='SourceAlpha' result='shadowOffsetOuter1'/>\n          <feGaussianBlur stdDeviation='1.5' in='shadowOffsetOuter1' result='shadowBlurOuter1'/>\n          <feColorMatrix values='0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.26 0' type='matrix' in='shadowBlurOuter1'/>\n        </filter>\n      </defs>\n      <g id='Dashboard-and-Widgets' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n        <g id='Spec-Tool-2.0_Dashboard_Display' transform='translate(-645.000000, -116.000000)'>\n          <g id='Group-34' transform='translate(574.000000, 88.000000)'>\n            <g id='Group-9' transform='translate(74.116251, 30.000000)'>\n              <g id='Oval-3'>\n                <circle cx='62.5' cy='62.5' r='62.5' fill='black' fillOpacity='1' filter='url(#filter-2)'/>\n                <circle cx='62.5' cy='62.5' r='62.5' fill={backgroundColor} fillRule='evenodd'/>\n              </g>\n              <path d='M42.9473339,79.1142705 C43.2200093,79.8944859 44.4455774,80.369052 46.9079942,80.369052 C64.7285107,80.369052 70.4970048,87.6651006 71.7141137,72.0247991 C71.7693246,71.3153187 80.4395132,72.8413364 80.4395132,72.0247991 C80.4395132,70.992771 80.2826111,70.099048 79.9890911,69.3315635 L85.6772936,67.8293125 L99.8697381,65.6374917 L118.036069,87.2872819 C112.246704,110.331461 86.4055998,122.816761 60.800521,125.086662 L30.2270645,88.6506351 L34.9099366,81.2369426 L42.9473339,79.1142705 Z' id='Combined-Shape' fill='url(#linearGradient-3)' opacity={shadowOpacity}/>\n              <g id='fa-mail-forward-copy-2'>\n                <path fill='black' fillOpacity='1' filter='url(#filter-5)' d='M88.8754712,82.9998951 C88.2154668,84.2498921 87.266709,85.2290558 86.0291996,85.9373881 C84.7916901,86.6457204 83.4716794,86.9998856 82.0691694,86.9998856 L32.5687924,86.9998856 C31.4137842,86.9998856 30.5475276,86.4998868 29.9700226,85.4998891 C29.3925176,84.4998915 29.3925176,83.4998939 29.9700226,82.4998963 L39.0038414,66.9999332 C39.6638458,65.7499362 40.6126037,64.7707725 41.8501131,64.0624402 C43.0876225,63.354108 44.4076332,62.9999428 45.8101433,62.9999428 L95.3105202,62.9999428 C96.4655284,62.9999428 97.331785,63.4999416 97.90929,64.4999392 C98.4867951,65.4999368 98.4867951,66.4999344 97.90929,67.4999321 L88.8754712,82.9998951 Z M45.8101433,58.9999523 C43.6651275,58.9999523 41.6851125,59.5416171 39.870098,60.6249484 C38.0550836,61.7082798 36.6113238,63.1666084 35.538815,64.999938 L27,79.7499028 L27,44.9999857 C27,43.3333236 27.577505,41.9166591 28.7325132,40.7499958 C29.8875214,39.5833326 31.2900333,39 32.9400452,39 L52.740196,39 L60.6602564,46.9999809 L80.4604071,46.9999809 C82.1104191,46.9999809 83.512931,47.5833135 84.6679392,48.7499768 C85.8229474,49.91664 86.4004524,51.3333046 86.4004524,52.9999666 L86.4004524,58.9999523 L45.8101433,58.9999523 Z'/>\n                <path fill='#FFFFFF' fillRule='evenodd' d='M88.8754712,82.9998951 C88.2154668,84.2498921 87.266709,85.2290558 86.0291996,85.9373881 C84.7916901,86.6457204 83.4716794,86.9998856 82.0691694,86.9998856 L32.5687924,86.9998856 C31.4137842,86.9998856 30.5475276,86.4998868 29.9700226,85.4998891 C29.3925176,84.4998915 29.3925176,83.4998939 29.9700226,82.4998963 L39.0038414,66.9999332 C39.6638458,65.7499362 40.6126037,64.7707725 41.8501131,64.0624402 C43.0876225,63.354108 44.4076332,62.9999428 45.8101433,62.9999428 L95.3105202,62.9999428 C96.4655284,62.9999428 97.331785,63.4999416 97.90929,64.4999392 C98.4867951,65.4999368 98.4867951,66.4999344 97.90929,67.4999321 L88.8754712,82.9998951 Z M45.8101433,58.9999523 C43.6651275,58.9999523 41.6851125,59.5416171 39.870098,60.6249484 C38.0550836,61.7082798 36.6113238,63.1666084 35.538815,64.999938 L27,79.7499028 L27,44.9999857 C27,43.3333236 27.577505,41.9166591 28.7325132,40.7499958 C29.8875214,39.5833326 31.2900333,39 32.9400452,39 L52.740196,39 L60.6602564,46.9999809 L80.4604071,46.9999809 C82.1104191,46.9999809 83.512931,47.5833135 84.6679392,48.7499768 C85.8229474,49.91664 86.4004524,51.3333046 86.4004524,52.9999666 L86.4004524,58.9999523 L45.8101433,58.9999523 Z'/>\n              </g>\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgFolder };\n","import * as React from 'react';\n\ninterface IAtsSvgEmptySpecListWidgetProps {\n  /**\n   * The width of the component.\n   * Default: '131'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '131'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#80BBD6'\n     * Expected: primary[200] from theme.palette since Original doesn't match palette and using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077AD'\n     * Expected: primary.main from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.181'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n   margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgEmptySpecListWidget = ({\n  width = '131',\n  height = '131',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00779D',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.181',\n  margin= '0'\n}: IAtsSvgEmptySpecListWidgetProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <circle id='path--1' cx='62.5' cy='62.5' r='62.5'/>\n        <filter\n          id='filter--2'\n          width='108%'\n          height='108%'\n          x='-4%'\n          y='-3.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <linearGradient\n          id='linearGradient--3'\n          x1='76.398%'\n          x2='21.597%'\n          y1='78.557%'\n          y2='28.903%'\n        >\n          <stop offset='0%' stopOpacity='0' />\n          <stop offset='100%' stopColor={shadowColor} />\n        </linearGradient>\n        <path\n          id='path--4'\n          d='M66.277 50c0 .833.284 1.542.852 2.125A2.782 2.782 0 0069.2 53H85.76v41c0 .833-.284 1.542-.852 2.125a2.782 2.782 0 01-2.07.875H41.923a2.782 2.782 0 01-2.07-.875C39.283 95.542 39 94.833 39 94V36c0-.833.284-1.542.852-2.125a2.782 2.782 0 012.07-.875h24.355v17zm7.793 29.5v-1c0-.417-.142-.77-.426-1.063A1.391 1.391 0 0072.609 77H52.15c-.406 0-.75.146-1.035.437a1.466 1.466 0 00-.426 1.063v1c0 .417.142.77.426 1.062.284.292.63.438 1.035.438H72.61c.406 0 .75-.146 1.035-.438.284-.291.426-.645.426-1.062zm0-8v-1c0-.417-.142-.77-.426-1.063A1.391 1.391 0 0072.609 69H52.15c-.406 0-.75.146-1.035.437a1.466 1.466 0 00-.426 1.063v1c0 .417.142.77.426 1.062.284.292.63.438 1.035.438H72.61c.406 0 .75-.146 1.035-.438.284-.291.426-.645.426-1.062zm0-9c0-.417-.142-.77-.426-1.063A1.391 1.391 0 0072.609 61H52.15c-.406 0-.75.146-1.035.437a1.466 1.466 0 00-.426 1.063v1c0 .417.142.77.426 1.062.284.292.63.438 1.035.438H72.61c.406 0 .75-.146 1.035-.438.284-.291.426-.645.426-1.062v-1zM85.76 49H70.173V33h.731c.812 0 1.502.292 2.07.875l11.934 12.25c.568.583.852 1.292.852 2.125V49z'\n        />\n        <filter\n          id='filter--5'\n          width='121.4%'\n          height='115.6%'\n          x='-10.7%'\n          y='-6.3%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n      </defs>\n      <g\n        fill='none'\n        fillRule='evenodd'\n        stroke='none'\n        strokeWidth='1'\n      >\n        <g id='Group-10' transform='translate(3 2)'>\n          <g id='Group-12'>\n            <g id='Group-14'>\n              <g id='Oval-3'>\n                <use\n                  fill='#000'\n                  filter='url(#filter--2)'\n                  xlinkHref='#path--1'\n                />\n                <use fill={backgroundColor} xlinkHref='#path--1'/>\n              </g>\n              <path\n                id='Combined-Shape'\n                fill='url(#linearGradient--3)'\n                d='M40.452 93.08a30.013 30.013 0 0012.44 2.684c17.006 0 25.991-9.289 25.991-26.746 0-1.637-.079-3.286-.236-4.933l3.248-2.238L85.76 53l31.385 37.848c-9.009 19.674-31.132 31.817-54.493 34.79l-22.277-26.55.077-6.009z'\n                opacity={shadowOpacity}\n              />\n              <g id='fa-mail-forward'>\n                <use\n                  fill='#000'\n                  filter='url(#filter--5)'\n                  xlinkHref='#path--4'\n                />\n                <use fill='#FFF' xlinkHref='#path--4'/>\n              </g>\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgEmptySpecListWidget };\n","import * as React from 'react';\n\ninterface IAtsSvgSpecProps {\n  /**\n   * The width of the component.\n   * Default: '42'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '42'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#80BBD6'\n     * Expected: primary[200] from theme.palette, origin is not in palette, using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.181'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgSpec = ({\n  width = '42',\n  height = '42',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE' // origin is '#80BBD6'\n  },\n  shadowOpacity = '0.181',\n  margin = '0'\n}: IAtsSvgSpecProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 42 42'\n      xmlns='http://www.w3.org/2000/svg'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <filter\n          x='-13.9%'\n          y='-11.1%'\n          width='127.8%'\n          height='127.8%'\n          filterUnits='objectBoundingBox'\n          id='prefix__a'\n        >\n          <feOffset dy={1} in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur\n            stdDeviation={1.5}\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n          />\n          <feColorMatrix\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n            in='shadowBlurOuter1'\n          />\n        </filter>\n        <filter\n          x='-30.3%'\n          y='-21.7%'\n          width='160.5%'\n          height='154.3%'\n          filterUnits='objectBoundingBox'\n          id='prefix__d'\n        >\n          <feOffset dy={1} in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur\n            stdDeviation={1.5}\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n          />\n          <feColorMatrix\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n            in='shadowBlurOuter1'\n          />\n        </filter>\n        <linearGradient\n          x1='76.398%'\n          y1='81.898%'\n          x2='21.597%'\n          y2='26.435%'\n          id='prefix__c'\n        >\n          <stop stopOpacity={0} offset='0%' />\n          <stop stopColor={shadowColor} offset='100%' />\n        </linearGradient>\n        <ellipse id='prefix__b' cx={17.966} cy={18} rx={17.966} ry={18} />\n        <path\n          d='M26.262 21.888c0 .288-.11.516-.332.684-.073.264-.11.708-.11 1.332 0 .624.037 1.068.11 1.332.222.192.332.42.332.684v.576c0 .24-.086.444-.258.612a.864.864 0 01-.627.252H13.279c-.984 0-1.82-.336-2.509-1.008a3.293 3.293 0 01-1.032-2.448v-11.52c0-.96.344-1.776 1.032-2.448.689-.672 1.525-1.008 2.509-1.008h12.098c.246 0 .455.084.627.252a.823.823 0 01.258.612v12.096zM14.46 13.752v.72c0 .048.025.096.074.144.049.048.098.072.147.072h7.82c.05 0 .098-.024.148-.072.049-.048.073-.096.073-.144v-.72c0-.048-.024-.096-.073-.144-.05-.048-.099-.072-.148-.072h-7.82c-.049 0-.098.024-.147.072-.05.048-.074.096-.074.144zm0 2.304v.72c0 .048.025.096.074.144.049.048.098.072.147.072h7.82c.05 0 .098-.024.148-.072.049-.048.073-.096.073-.144v-.72c0-.048-.024-.096-.073-.144-.05-.048-.099-.072-.148-.072h-7.82c-.049 0-.098.024-.147.072-.05.048-.074.096-.074.144zm9.332 9a15.046 15.046 0 01-.037-1.152c0-.456.012-.84.037-1.152H13.279c-.32 0-.597.114-.83.342-.234.228-.35.498-.35.81 0 .312.116.582.35.81.233.228.51.342.83.342H23.79z'\n          id='prefix__e'\n        />\n      </defs>\n      <g fill='none' fillRule='evenodd'>\n        <g transform='translate(3 2)'>\n          <use fill='#000' filter='url(#prefix__a)' xlinkHref='#prefix__b' />\n          <use fill={backgroundColor} xlinkHref='#prefix__b' />\n        </g>\n        <path\n          d='M35.664 22.707c-.787 8.484-8.16 12.455-16.872 13.362L9.946 25.527l1.345-2.14 13.314-5.452 1.227-7.886 9.832 12.658z'\n          fill='url(#prefix__c)'\n          opacity={shadowOpacity}\n          transform='translate(3 2)'\n        />\n        <g transform='translate(3 2)'>\n          <use fill='#000' filter='url(#prefix__d)' xlinkHref='#prefix__e' />\n          <use fill='#FFF' xlinkHref='#prefix__e' />\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgSpec };\n","import * as React from 'react';\n\ninterface IAtsSvgEmptyProductListProps {\n  /**\n   * The width of the component.\n   * Default: '450'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '341'\n   */\n  height?: string;\n  /**\n   * The color of the various surfaces of the box and outer shapes from lightest to darkest.\n   */\n  color?: {\n    /**\n     * Surface A.\n     * Default: '#34b5e5'\n     * Expected: primary[400] from theme.palette\n     */\n    surfaceA: string;\n    /**\n     * Surface B.\n     * Default: '#0c9bd4'\n     * Expected: primary[600] from theme.palette\n     */\n    surfaceB: string;\n    /**\n     * Surface C.\n     * Default: '#0077AD'\n     * Expected: primary[800] from theme.palette\n     */\n    surfaceC: string;\n    /**\n     * Surface D.\n     * Default: '#00588c'\n     * Expected: primary[900] from theme.palette\n     */\n    surfaceD: string;\n  };\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The color of the various surfaces of the box and outer shapes from lightest to darkest.\n */\nconst AtsSvgEmptyProductList = ({\n  width = '450',\n  height = '341',\n  color: {\n    surfaceA,\n    surfaceB,\n    surfaceC,\n    surfaceD,\n  } = {\n    surfaceA: '#34b5e5',\n    surfaceB: '#0c9bd4',\n    surfaceC: '#0077AD',\n    surfaceD: '#00588c',\n  },\n}: IAtsSvgEmptyProductListProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 450 341'\n      style={{ maxWidth: '100%' }}\n    >\n      <defs>\n        <path\n          id='path-1'\n          d='M0.0944660928 0.0750078981L13.9701803 0.0750078981 13.9701803 13.9565012 0.0944660928 13.9565012z'\n        />\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-713 -288)'>\n          <g transform='translate(713 288)'>\n            <g>\n              <path\n                fill='#FFD600'\n                d='M333.507 48.325c-.017.815-.54 1.308-1.077 1.789-1.636 1.464-3.633 2.259-5.64 3.012-1 .375-2.035.722-3.085.886-1.273.2-1.807.91-2.037 2.095-.466 2.392-1.344 4.648-2.544 6.76-.696 1.227-1.342 2.835-2.909 2.893-1.764.066-2.36-1.7-3.127-2.972-1.116-1.853-1.91-3.888-2.296-5.995-.35-1.902-1.347-2.698-3.132-3.027-1.937-.357-3.747-1.167-5.487-2.095-.706-.377-1.403-.798-2.03-1.293-1.84-1.454-1.855-2.359-.08-3.837 1.749-1.457 3.783-2.607 5.957-2.929 3.36-.498 4.816-2.339 5.353-5.5.298-1.757 1.21-3.365 2.193-4.875 1.96-3.015 3.305-2.986 5.228.13 1.135 1.84 2.152 3.807 2.481 5.915.396 2.533 1.708 3.553 4.096 4.023 2.45.483 4.734 1.605 6.752 3.145.624.477 1.3.98 1.384 1.875'\n              />\n              <path\n                fill={surfaceC}\n                d='M437.787 66.298c-1.922 2.056-3.391 3.81-5.06 5.353-1.272 1.175-1.548 2.408-1.255 4.03.39 2.16.573 4.355.858 6.645-1.334.163-2.183-.564-3.114-.964-1.393-.598-2.783-1.221-4.111-1.946-1.062-.579-1.974-.473-3.022.042-2.218 1.09-4.49 2.073-6.99 3.214-.117-2.235.147-4.133.53-5.994.465-2.251.146-4.086-1.739-5.688-1.52-1.292-2.753-2.916-4.28-4.575 2.385-.788 4.488-1.108 6.576-1.416 1.905-.28 3.263-.983 4.075-2.874.831-1.934 2.029-3.715 3.175-5.758 1.661 1.72 2.534 3.656 3.41 5.515.935 1.986 2.274 2.942 4.454 3.162 1.943.196 3.851.727 6.493 1.254'\n              />\n              <path\n                fill={surfaceC}\n                d='M125.232 30.143c.015-3.838-3.019-6.927-6.822-6.946-3.836-.02-6.886 3.003-6.908 6.847-.023 3.894 2.92 6.877 6.815 6.91 3.882.033 6.9-2.939 6.915-6.811m-7.076 12.132c-6.814-.072-12.113-5.571-11.995-12.45.113-6.644 5.606-12.003 12.273-11.975 6.735.028 12.205 5.603 12.15 12.385-.055 6.794-5.544 12.112-12.428 12.04'\n              />\n              <path\n                fill={surfaceC}\n                d='M33.747 200.934c-3.185.012-5.814 2.603-5.821 5.738-.008 3.127 2.626 5.803 5.764 5.856 3.277.057 5.967-2.635 5.925-5.927-.04-3.17-2.64-5.679-5.868-5.667m-10.26 5.634c.046-5.595 4.647-10.187 10.24-10.221 5.69-.035 10.393 4.64 10.427 10.361.034 5.682-4.683 10.34-10.434 10.306-5.782-.035-10.281-4.628-10.233-10.446'\n              />\n              <path\n                fill='#FFD600'\n                d='M13.617 108.95c-.186-1.576.175-3.14.43-4.671.29-1.732.02-3.09-1.351-4.304-1.168-1.033-2.13-2.304-3.301-3.603 1.958-.937 3.733-1.062 5.449-1.367 1.237-.22 2.079-.755 2.649-1.92.777-1.589 1.705-3.102 2.64-4.776 1.207.664 1.608 1.82 1.986 2.802 1.084 2.816 3.03 4.205 5.988 4.336.783.035 1.557.309 2.33.496.16.038.296.18.565.352-.625 1.6-1.967 2.655-3.103 3.811-1.106 1.125-1.453 2.27-1.273 3.826.19 1.646.714 3.29.493 4.987-1.212.225-2.074-.408-2.81-.915-2.754-1.897-5.357-1.738-8.06.08-.69.465-1.466 1.022-2.632.866'\n              />\n              <path\n                fill={surfaceC}\n                d='M376.334 108.977c-1.115-.084-1.802-1.098-1.35-2.149.523-1.212 1.21-2.365 1.911-3.492 5.139-8.258 12.008-14.913 19.892-20.615 4.131-2.988 8.478-5.636 13.094-7.843 1.952-.933 2.735-.876 3.278.158.53 1.008.055 1.688-1.855 2.641-11.623 5.804-21.67 13.479-29.402 23.9-1.432 1.929-2.674 3.973-3.825 6.072-.4.73-.877 1.342-1.743 1.328'\n              />\n              <g transform='translate(435.908 193.528)'>\n                <mask id='mask-2' fill='#fff'>\n                  <use xlinkHref='#path-1' />\n                </mask>\n                <path\n                  fill='#FFD600'\n                  d='M6.92.075c3.762-.04 6.942 3.022 7.048 6.788.105 3.726-2.986 6.982-6.73 7.09A6.912 6.912 0 01.094 7.042C.091 3.212 3.124.117 6.92.075'\n                  mask='url(#mask-2)'\n                />\n              </g>\n              <path\n                fill='#FFD600'\n                d='M215.614 0c.934.842 1.328 1.816 1.76 2.72.662 1.387 1.664 2.116 3.22 2.234 1.018.078 2.026.286 2.997.768-.282 1.116-1.122 1.676-1.802 2.283-1.217 1.085-1.639 2.297-1.393 3.897.151.981.586 1.994.144 3.13-1.18-.022-2.144-.674-3.088-1.197-1.295-.718-2.435-.663-3.707-.006-.913.47-1.81 1.04-3.041 1.193-.425-.8-.244-1.667-.02-2.417.619-2.078-.051-3.63-1.68-4.974-.569-.47-1.286-.93-1.384-1.937.905-.458 1.919-.645 2.935-.731 1.54-.13 2.58-.8 3.24-2.21.428-.915.838-1.89 1.82-2.753'\n              />\n              <path\n                fill='#FFD600'\n                d='M30.661 101.461c.266.104.78.25 1.244.494 10.59 5.561 19.583 12.97 25.942 23.408.373.612.698 1.258 1.01 1.906.372.772.595 1.618-.272 2.16-.896.561-1.48-.065-1.942-.8-.143-.229-.265-.47-.398-.706-5.85-10.365-14.521-17.602-24.704-23.164-.623-.34-1.26-.658-1.864-1.032-.518-.321-.655-.853-.485-1.418.175-.579.617-.852 1.47-.848'\n              />\n              <path\n                fill='#CECECD'\n                d='M395.511 163.552c-.2.967-.893 1.635-1.711 1.83-2.515.598-3.982 2.135-4.506 4.79-.095.48-.532.928-.894 1.3-.591.606-1.225.633-1.747-.132-.45-.66-.983-1.281-1.117-2.123-.323-2.034-1.5-3.104-3.374-3.53-.652-.15-1.276-.562-1.846-.96-1.013-.706-1-1.199-.156-2.18.74-.861 1.74-1.192 2.718-1.472 1.258-.36 2.17-.842 2.366-2.419.106-.857.636-1.679 1.063-2.463.848-1.558 1.658-1.569 2.67-.079.2.293.435.617.485.954.39 2.665 2.004 3.972 4.342 4.65.782.227 1.646.665 1.707 1.834'\n              />\n              <path\n                fill='#CECECD'\n                d='M6.174 61.065C2.665 61.08.258 58.78.011 55.595c-.219-2.812 2.937-6.013 6.152-5.793 3.36.23 6.043 2.533 6.05 5.65.007 3.115-2.664 5.597-6.039 5.613'\n              />\n              <path\n                fill='#FFD600'\n                d='M187.708 31.941c-.614-.182-.882-.66-.7-1.242.214-.682.536-1.34.895-1.956 4.678-8.011 11.411-13.633 19.29-17.916.232-.126.464-.26.709-.349.627-.228 1.256-.267 1.533.506.214.599-.134 1.041-.635 1.329-.458.263-.933.495-1.392.757-7.476 4.268-13.899 9.72-18.212 17.544-.342.622-.61 1.347-1.488 1.327'\n              />\n              <path\n                fill={surfaceC}\n                d='M405.754 70.47c1.108-.079 1.762.29 1.936 1.206.177.93-.341 1.507-1.17 1.782-1.47.487-2.974.88-4.418 1.436-3.07 1.182-5.938 2.775-8.612 4.733-.488.357-.97.744-1.508 1-.694.33-1.355.17-1.822-.496-.483-.689-.311-1.345.204-1.918.29-.32.631-.598.974-.86 4.047-3.09 8.525-5.271 13.367-6.678.41-.12.841-.166 1.05-.205'\n              />\n              <path\n                fill={surfaceC}\n                d='M410.54 82.45c-.01.733-.486 1.184-.99 1.595-4.024 3.28-7.703 6.909-11.002 10.933-.655.799-1.47 1.194-2.393.455-.904-.724-.758-1.617-.162-2.466.425-.605.888-1.187 1.376-1.742 2.814-3.203 5.835-6.196 9.094-8.936.63-.53 1.301-1.078 2.047-1.383 1.053-.43 2.088.432 2.03 1.544'\n              />\n              <path\n                fill='#FFD600'\n                d='M16.908 275.668c.068 2.185-1.8 4.173-4.025 4.285-2.417.12-4.414-1.735-4.428-4.114-.014-2.298 1.72-4.178 3.99-4.328 2.286-.15 4.39 1.81 4.463 4.157'\n              />\n              <path\n                fill='#FFD600'\n                d='M34.59 98.645l1.151.308c3.65.985 7.015 2.578 10.142 4.665.529.352 1.033.75 1.5 1.178.514.47.723 1.078.311 1.7-.496.752-1.196.73-1.912.312-.392-.229-.758-.501-1.131-.76-2.867-1.993-5.995-3.448-9.348-4.446-.524-.156-1.064-.28-1.564-.496-.653-.282-1.005-.8-.8-1.522.202-.71.758-.966 1.651-.94'\n              />\n              <path\n                fill='#FFD600'\n                d='M32.11 108.04c.565-.028 1.007.255 1.419.595 2.926 2.41 5.644 5.036 8.012 8.023.218.275.43.568.578.884.245.52.228 1.044-.233 1.45-.447.393-.983.413-1.456.115-.36-.226-.657-.575-.94-.906-2.294-2.691-4.762-5.199-7.485-7.444-.332-.274-.663-.601-.862-.977a1.185 1.185 0 01.968-1.74'\n              />\n              <path\n                fill='#CECECD'\n                d='M200.693 77.034c-1.952.046-3.391-1.327-3.407-3.249-.014-1.824 1.276-3.22 3.07-3.32 1.938-.107 3.435 1.24 3.503 3.15.074 2.085-1.117 3.372-3.166 3.42'\n              />\n              <path\n                fill='#FFD600'\n                d='M206.68 9.352c.02.543-.261.952-.695 1.08a29.686 29.686 0 00-8.949 4.365c-.479.344-1.07.335-1.438-.2-.362-.526-.177-1.085.282-1.46 2.775-2.27 5.914-3.8 9.373-4.633.677-.164 1.243.076 1.427.848'\n              />\n              <path\n                fill='#FFD600'\n                d='M208.559 15.853c.012.38-.175.678-.436.905-2.207 1.93-4.299 3.976-6.207 6.215-.428.503-.995.761-1.546.184-.428-.447-.286-.979.053-1.42 1.855-2.405 3.952-4.571 6.37-6.388.82-.616 1.767-.275 1.766.504'\n              />\n              <path\n                fill='#FFD600'\n                d='M288.23 82.672c-.615-.183-.882-.66-.7-1.243.214-.681.535-1.34.895-1.955 4.678-8.011 11.41-13.633 19.29-17.916.232-.126.463-.26.709-.349.627-.229 1.256-.267 1.533.506.213.598-.134 1.04-.635 1.329-.458.263-.934.494-1.392.756-7.476 4.269-13.899 9.72-18.212 17.545-.343.621-.61 1.347-1.488 1.327'\n              />\n              <path\n                fill='#FFD600'\n                d='M307.201 60.083c.02.543-.26.952-.694 1.08a29.685 29.685 0 00-8.949 4.365c-.479.343-1.07.335-1.438-.2-.362-.527-.177-1.085.282-1.46 2.775-2.27 5.914-3.8 9.373-4.634.677-.163 1.243.077 1.426.849'\n              />\n              <path\n                fill='#FFD600'\n                d='M302.477 294.038c.1-.95.85-1.474 1.326-2.174 8.068-11.858 9.971-24.727 5.82-38.587-.121-.406-.377-.768-.572-1.151.016-1.187-.545-2.184-.987-3.215-1.621-3.788-3.906-7.126-6.446-10.289 1.706.59 2.615 2.135 3.683 3.447 2.585 3.175 4.36 6.879 6.153 10.564 1.101 3.808 2.12 7.624 2.318 11.639.537 10.862-2.61 20.366-9.532 28.497-.47.55-.818 1.392-1.763 1.269'\n              />\n              <path\n                fill='#FFD600'\n                d='M309.08 66.584c.013.38-.174.677-.435.905-2.207 1.929-4.3 3.975-6.207 6.215-.428.503-.995.76-1.546.184-.428-.447-.286-.98.053-1.42 1.855-2.405 3.952-4.571 6.37-6.388.82-.617 1.767-.276 1.766.504'\n              />\n              <path\n                fill={surfaceC}\n                d='M387.053 256.256c-.104 3.405-2.932 6.022-6.314 5.844-3.368-.178-6.045-3.064-5.89-6.353.159-3.348 3.038-5.995 6.36-5.845 3.368.152 5.948 2.957 5.844 6.354'\n              />\n              <path\n                fill='#FFD600'\n                d='M369.203 289.358s.006-.012.007-.01a.023.023 0 01-.007.01'\n              />\n              <path\n                fill='#FEFDFD'\n                d='M73.246 297.52c-5.448 10.144-7.027 20.79-3.87 32.056 1.089 3.888 2.851 7.451 4.841 10.905l-.626.542c-5.622-7.256-8.219-15.531-7.782-24.842.24-5.084 1.53-9.87 3.76-14.38.852-1.722 1.73-3.446 2.958-4.933l.72.652'\n              />\n              <path\n                fill='#CECECD'\n                d='M73.098 297.808l-.76-.676c1.82-2.652 3.937-5.006 6.576-6.84l-5.816 7.516'\n              />\n              <path\n                fill='#FFD600'\n                d='M116.988 217.954c.242.827-.294 1.354-.567 1.963-2.577 5.754-2.484 11.42.344 17.02.268.53.684.991.667 1.685-6.188-4.22-6.186-16.433-.444-20.668'\n              />\n              <path\n                fill='#FFD600'\n                d='M92.245 307.203l-.35.939c-.03-.528.05-.895.35-.94'\n              />\n              <path\n                fill='#FFD600'\n                d='M91.112 308.142c.077.616-.12 1.015-.924.927.023-.536.426-.77.924-.927'\n              />\n            </g>\n            <g transform='translate(132 125)'>\n              <path\n                fill='#161410'\n                d='M85.49 18.33c-.22-.179-.411-.46-.612-.47-.468-.027-1.427-.032-1.243.418.314.767 1.186.575 1.856.053'\n              />\n              <path\n                fill='#CECECD'\n                d='M185.331 90.188a1.494 1.494 0 01-.258-.792c.64-.187 1.275-.26 1.879.173l-1.62.619'\n              />\n              <path\n                fill='#5F5E5B'\n                d='M87.37 19.077c-.484.139-1.085.093-1.301.652-.321-.141-.637-.32-.569-.673.053-.27.375-.276.632-.263.43.022.883-.01 1.238.284'\n              />\n              <path\n                fill='#5F5E5B'\n                d='M85.49 18.33c-.67.523-1.541.715-1.855-.052-.184-.45.775-.445 1.243-.419.2.011.392.292.613.472'\n              />\n              <path\n                fill='#5F5E5B'\n                d='M81.35 19.729c-.5-.123-.999-.246-1.496-.37.545-.618 1.114-.798 1.702-.216.288.286.18.865-.014.397-.005-.011-.126.123-.193.189'\n              />\n              <path\n                fill={surfaceA}\n                d='M85.997 25.864c3.244-1.964 5.821-4.747 8.665-7.191 5.304-4.558 10.462-9.288 15.638-13.995 1.034-.94 1.967-1.144 3.321-.685 16.253 5.513 32.525 10.966 48.792 16.435 5.136 1.727 10.251 3.524 15.421 5.143 1.53.48 1.696.783.605 2-6.149 6.866-12.15 13.867-18.399 20.638-1.647 1.785-1.316 2.652.202 4.114 6.094 5.869 12.091 11.838 18.104 17.79.688.68 2.037 1.417.052 2.279-6.782 2.944-13.546 5.932-20.317 8.903l-.394.401c-7.452 3.24-14.91 6.467-22.355 9.723a10542.313 10542.313 0 00-30.473 13.382c-1.14.503-1.927.803-2.817-.613-5.453-8.68-11.021-17.286-16.551-25.917l.046-.945.473-.177 72.18-26.875-72.142-24.108a1.117 1.117 0 01-.051-.302'\n              />\n              <path\n                fill={surfaceC}\n                d='M85.082 78.914c5.57 8.61 11.18 17.196 16.674 25.854.896 1.413 1.69 1.113 2.838.612 10.225-4.466 20.46-8.915 30.699-13.35 7.5-3.248 15.013-6.467 22.52-9.699.007 16.183.04 32.366-.017 48.549-.007 1.933.27 4.002-1 5.757-6.299 3.202-12.973 5.552-19.424 8.41-1.49.66-2.965 1.35-4.447 2.025-3.857 1.6-7.724 3.182-11.572 4.805-11.33 4.776-22.65 9.572-33.978 14.35-.9.378-1.84.666-2.76.996-.004-28.668-.01-57.337.001-86.005 0-.78-.322-1.664.466-2.304'\n              />\n              <path\n                fill={surfaceB}\n                d='M85.444 78.917c-.786.64-.464 1.525-.464 2.304-.012 28.667-.006 57.335-.001 86.002-6.598-2.602-13.17-5.27-19.8-7.79-8.007-3.044-15.756-6.73-23.896-9.437-6.094-2.525-12.193-5.036-18.276-7.585-1.28-.536-2.478-1.268-3.757-1.81-1.056-.447-1.404-1.123-1.4-2.263.055-17.516.067-35.033.09-52.55.406.049.853.006 1.215.16 6.125 2.598 12.237 5.226 18.357 7.836 9.212 3.928 18.44 7.818 27.629 11.801 1.44.625 2.034.117 2.765-1.013 4.71-7.28 9.288-14.644 14.22-21.783.983-1.423 2.394-2.79 2.334-4.78l1.03-.034-.046.942'\n              />\n              <path\n                fill={surfaceB}\n                d='M86.379 25.816c.003.103.02.204.051.303l-.04.149c-.599.26-1.191.535-1.796.779-19.442 7.827-38.902 15.612-58.309 23.523-2.512 1.025-5.393 1.383-7.398 3.514l-1.012.405c.404-1.293-.44-2.216-.983-3.206-4.542-8.267-9.07-16.54-13.684-24.767-.779-1.389-.352-1.709.943-2.157 14.824-5.137 29.627-10.333 44.437-15.511C56.695 6.013 64.825 3.24 72.896.305c1.717-.624 2.412-.344 3.115 1.334 3.385 8.089 6.9 16.123 10.368 24.177'\n              />\n              <path\n                fill={surfaceA}\n                d='M17.93 53.958l1.006-.405c.164.007.342-.026.49.027 12.918 4.659 25.834 9.325 38.751 13.988 8.79 3.174 17.581 6.344 26.372 9.516.06 2.01-1.343 3.392-2.32 4.83-4.902 7.213-9.452 14.653-14.132 22.008-.727 1.142-1.317 1.655-2.749 1.024-9.131-4.024-18.303-7.954-27.458-11.923-6.083-2.637-12.158-5.293-18.245-7.918-.36-.156-.804-.112-1.208-.16-4.838-2.67-10.038-4.519-15.055-6.784-4.298-1.94-4.266-1.833-1.221-5.462 4.725-5.632 9.36-11.342 14.042-17.01.519-.63.912-1.4 1.727-1.73'\n              />\n              <path\n                fill='#EEE'\n                d='M41.909 149.521c8.097 2.746 15.805 6.487 23.769 9.575 6.594 2.558 13.131 5.264 19.693 7.904.914-.335 1.846-.627 2.74-1.012 11.24-4.846 22.472-9.712 33.713-14.558 3.819-1.647 7.655-3.251 11.483-4.875 4.472 1.592 8.942 3.19 13.417 4.772 3.023 1.07 6.051 2.125 9.084 3.166.46.158 1.075.145 1.081.789.006.636-.621.667-1.067.846-6.57 2.627-13.14 5.253-19.706 7.889-9.987 4.009-19.972 8.024-29.958 12.038-6.41 2.577-12.828 5.134-19.226 7.743-2.708 1.104-4.793-.802-7.001-1.58-14.962-5.266-29.844-10.766-44.763-16.16-5.246-1.896-10.523-3.704-16.379-5.76 7.839-4.28 15.755-6.938 23.12-10.777'\n              />\n              <path\n                fill={surfaceC}\n                d='M86.47 26.305l72.298 23.989-72.336 26.741c-.002-16.86-.002-33.722-.002-50.582l.04-.148z'\n              />\n              <path\n                fill={surfaceD}\n                d='M86.429 27.244l.001 50.522-.476.176-1.032.033c-8.86-3.127-17.721-6.253-26.58-9.383-13.02-4.598-26.038-9.2-39.059-13.793-.149-.052-.329-.02-.494-.027 2.01-2.11 4.897-2.464 7.414-3.477 19.446-7.83 38.944-15.534 58.425-23.28.607-.241 1.2-.513 1.8-.77'\n              />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgEmptyProductList };\n","import * as React from 'react';\n\ninterface IAtsSvgDrawingCompletedProps {\n  /**\n   * The width of the component.\n   * Default: '161'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '165'\n   */\n  height?: string;\n  /**\n   * The various themeable colors of the SVG.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#80BBCE'\n     * Expected: primary[200] from theme.palette, don't have matching color from palette with Original, using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The clip color.\n     * Default: '#80BBCE'\n     * Original: '#83D3EE' (primary[200])\n     * Expected: primary[100] from theme.palette, using 100 instead of 200 to distinguish from background.\n     */\n    clip: string;\n    /**\n     * The board color.\n     * Default: '#0077AD'\n     * Expected: primary[800] from theme.palette\n     */\n    board: string;\n    /**\n     * The content color.\n     * Default: '#0C9BD4'\n     * Original: '#77959E'\n     * Expected: primary[600] from theme.palette, using 600 as Original doesn't have a match with palette.\n     */\n    content: string;\n    /**\n     * The check mark color.\n     * Default: '#0088C1'\n     * Expected: primary[700] from theme.palette.\n     */\n    checkMark: string;\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.181'\n   */\n  shadowOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The various themeable colors of the SVG.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n */\nconst AtsSvgDrawingCompleted = ({\n  width = '161',\n  height = '165',\n  color: {\n    backgroundColor,\n    clip,\n    board,\n    content,\n    checkMark\n  } = {\n    backgroundColor: '#83D3EE',\n    clip: '#B3E5F5',\n    board: '#0077AD',\n    content: '#0C9BD4',\n    checkMark: '#0088C1'\n  },\n  shadowOpacity = '0.181',\n}: IAtsSvgDrawingCompletedProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 161 165'\n      style={{ maxWidth: '100%' }}\n    >\n      <defs>\n        <linearGradient\n          id='linearGradient-1'\n          x1='72.739%'\n          x2='25.534%'\n          y1='81.898%'\n          y2='26.435%'\n        >\n          <stop offset='0%' stopOpacity='0' />\n          <stop offset='100%' stopColor='#00779D' />\n        </linearGradient>\n        <path\n          id='path-2'\n          d='M49.69 25c0 13.807-11.124 25-24.845 25C11.124 50 0 38.807 0 25S11.124 0 24.845 0c13.72 0 24.844 11.193 24.844 25z'\n        />\n        <filter\n          id='filter-3'\n          width='128.2%'\n          height='128%'\n          x='-14.1%'\n          y='-10%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='2'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='2'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-849 -379)'>\n          <g transform='translate(849 379)'>\n            <ellipse\n              cx='79.503'\n              cy='80'\n              fill={backgroundColor}\n              fillRule='nonzero'\n              rx='79.503'\n              ry='80'\n            />\n            <path\n              fill='url(#linearGradient-1)'\n              d='M127.354 27.011l31.007 42.427c.016.244.028.486.035.728.02.678.82 5.28.76 5.893-6.587 66.964-49.603 83.074-78.385 83.73-4.803.11-4.263-1.215-7.551-2.668-10.307-4.555-29.532-18.406-36.821-22.576-5.493-3.143 37.52-72.927 59.845-106.476 9.603-.738 19.975-1.091 31.11-1.058z'\n              opacity={shadowOpacity}\n            />\n            <g fillRule='nonzero' transform='translate(34.783 20)'>\n              <path\n                fill={board}\n                d='M7.285 3.665h80.132c4.023 0 7.285 3.282 7.285 7.33v98.96c0 4.048-3.262 7.33-7.285 7.33H7.285c-4.023 0-7.285-3.282-7.285-7.33v-98.96c0-4.048 3.262-7.33 7.285-7.33z'\n              />\n              <path\n                fill='#FFF'\n                d='M7.28478682 85.8162472L7.28478682 10.9954751 87.4174419 10.9954751 87.4174419 109.954751 31.2733622 109.954751z'\n              />\n              <path\n                fill={clip}\n                d='M31.2733622 85.8162472L31.2733622 109.954751 7.28478682 85.8162472z'\n              />\n              <path\n                fill={clip}\n                d='M29.14 14.66V0h36.423v14.66c0 4.049-3.262 7.331-7.285 7.331H36.424c-4.023 0-7.285-3.282-7.285-7.33z'\n              />\n              <path\n                fill={content}\n                d='M53.122 29.675h21.345c1.474 0 2.669 1.64 2.669 3.665 0 2.024-1.195 3.665-2.669 3.665H53.122c-1.473 0-2.668-1.641-2.668-3.665s1.195-3.665 2.668-3.665zM52.28 41.686h14.604c1.008 0 1.826 1.64 1.826 3.665 0 2.024-.818 3.665-1.826 3.665H52.28c-1.008 0-1.825-1.641-1.825-3.665s.817-3.665 1.825-3.665z'\n              />\n              <path\n                fill={content}\n                d='M21.8543605 29.321267L42.9188043 29.321267 42.9188043 50.5173636 21.8543605 50.5173636z'\n              />\n              <path\n                fill={content}\n                d='M27.517 73.48h34.5c3.175 0 5.75 1.64 5.75 3.665 0 2.024-2.575 3.665-5.75 3.665h-34.5c-3.176 0-5.75-1.641-5.75-3.665s2.574-3.665 5.75-3.665zM28.142 60.762h38.25c3.52 0 6.375 1.641 6.375 3.665s-2.855 3.665-6.375 3.665h-38.25c-3.521 0-6.375-1.64-6.375-3.665 0-2.024 2.854-3.665 6.375-3.665z'\n              />\n            </g>\n            <g fillRule='nonzero' transform='translate(107.33 109)'>\n              <g>\n                <use\n                  fill='#000'\n                  filter='url(#filter-3)'\n                  xlinkHref='#path-2'\n                />\n                <use fill={checkMark} xlinkHref='#path-2'/>\n              </g>\n            </g>\n            <path\n              fill='#FFF'\n              fillRule='nonzero'\n              d='M141.134 124.245l-13.596 14.383-4.347-4.599a2.215 2.215 0 00-3.26 0 2.537 2.537 0 000 3.45l5.988 6.335a2.215 2.215 0 003.26 0l15.238-16.12a2.537 2.537 0 000-3.45 2.241 2.241 0 00-3.283 0z'\n            />\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgDrawingCompleted };\n","import * as React from 'react';\n\ninterface IAtsSvgEmptyDashboardProps {\n  /**\n   * The width of the component.\n   * Default: '439'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '273'\n   */\n  height?: string;\n  /**\n   * The only themeable part of the SVG.\n   * Default: '#0077AD'\n   * Original: '#4A90E2', using Default instead as Original have no match with palette.\n   * Expected: primary[800] from theme.palette.\n   */\n  color?: string;\n  /**\n   * The opacity of the color.\n   * Default: '0.567'\n   */\n  colorOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The only themeable part of the SVG.\n * @prop {string} colorOpacity - The opacity of the color.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgEmptyDashboard = ({\n  width = '439',\n  height = '273',\n  color = '#0077AD',\n  colorOpacity = '0.567',\n  margin = '0'\n}: IAtsSvgEmptyDashboardProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 439 273'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <mask\n          id='prefix__f'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n          x={0}\n          y={0}\n          width={117}\n          height={59}\n          fill='#fff'\n        >\n          <use xlinkHref='#prefix__a' />\n        </mask>\n        <mask\n          id='prefix__g'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n          x={0}\n          y={0}\n          width={117}\n          height={69}\n          fill='#fff'\n        >\n          <use xlinkHref='#prefix__b' />\n        </mask>\n        <mask\n          id='prefix__h'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n          x={0}\n          y={0}\n          width={44}\n          height={135}\n          fill='#fff'\n        >\n          <use xlinkHref='#prefix__c' />\n        </mask>\n        <mask\n          id='prefix__i'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n          x={0}\n          y={0}\n          width={98}\n          height={135}\n          fill='#fff'\n        >\n          <use xlinkHref='#prefix__d' />\n        </mask>\n        <mask\n          id='prefix__j'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n          x={0}\n          y={0}\n          width={82}\n          height={135}\n          fill='#fff'\n        >\n          <use xlinkHref='#prefix__e' />\n        </mask>\n        <path\n          d='M65 96h111a3 3 0 013 3v53a3 3 0 01-3 3H65a3 3 0 01-3-3V99a3 3 0 013-3z'\n          id='prefix__a'\n        />\n        <path\n          d='M65 162h111a3 3 0 013 3v63a3 3 0 01-3 3H65a3 3 0 01-3-3v-63a3 3 0 013-3z'\n          id='prefix__b'\n        />\n        <path\n          d='M237 96h92a3 3 0 013 3v129a3 3 0 01-3 3h-92a3 3 0 01-3-3V99a3 3 0 013-3z'\n          id='prefix__d'\n        />\n        <path\n          d='M340 96h76a3 3 0 013 3v129a3 3 0 01-3 3h-76a3 3 0 01-3-3V99a3 3 0 013-3z'\n          id='prefix__e'\n        />\n        <rect id='prefix__c' x={190} y={96} width={44} height={135} rx={3} />\n      </defs>\n      <g transform='translate(2 2)' fill='none' fillRule='evenodd'>\n        <path\n          d='M-.75 10.352C-.75 4.42 4.066-.39 10.003-.39h414.8c5.934 0 10.752 4.817 10.752 10.742v28.885H-.75V10.352z'\n          stroke='#D0D0D0'\n          strokeWidth={1.5}\n          fill='#FFF'\n        />\n        <path\n          d='M-.75 36.143h436.305v219.611c0 7.87-6.38 14.247-14.254 14.247H13.505C5.63 270-.75 263.627-.75 255.754V36.143z'\n          stroke='#D0D0D0'\n          strokeWidth={1.5}\n          fill='#FFF'\n        />\n        <g opacity={0.65}>\n          <path fill='#E9E9E9' d='M0 1h50v270H0z' />\n          <path\n            fill='#C7C7C7'\n            d='M14 57h25v19H14zM14 94h25v19H14zM14 131h25v19H14z'\n          />\n        </g>\n        <path fill='#C7C7C7' d='M68.71 57.443h49.962v12.949H68.71z' />\n        <g transform='translate(373.392 13.308)' fill='#827E7E'>\n          <ellipse cx={6.949} cy={6.295} rx={6.341} ry={6.295} />\n          <ellipse cx={26.417} cy={6.295} rx={6.341} ry={6.295} />\n          <ellipse cx={45.885} cy={6.295} rx={6.341} ry={6.295} />\n        </g>\n        <path fill={color} opacity={colorOpacity} d='M366 57h44v11h-44z' />\n        <path fill='#9B9B9B' d='M311 57h44v11h-44zM261 57h44v11h-44z' />\n        <path fill='#9B9B9B' d='M261 57h44v11h-44z' />\n        <path fill='#DADADA' d='M195 108h37.188v10.694H195z' />\n        <path\n          d='M237.103 109v8.694h86.927V109h-86.927z'\n          stroke='#CACACA'\n          strokeWidth={2}\n          fill='#F4F4F4'\n        />\n        <path fill='#DADADA' d='M195 130h37.188v10.694H195z' />\n        <path\n          d='M237.103 131v8.694h86.927V131h-86.927z'\n          stroke='#CACACA'\n          strokeWidth={2}\n          fill='#F4F4F4'\n        />\n        <path fill='#DADADA' d='M195 158h37.188v10.694H195z' />\n        <path\n          d='M237.103 159v8.694h86.927V159h-86.927z'\n          stroke='#CACACA'\n          strokeWidth={2}\n          fill='#F4F4F4'\n        />\n        <path fill='#DADADA' d='M195 181h37.188v10.694H195z' />\n        <path\n          d='M237.103 182v8.694h86.927V182h-86.927z'\n          stroke='#CACACA'\n          strokeWidth={2}\n          fill='#F4F4F4'\n        />\n        <path fill='#DADADA' d='M195 208h37.188v10.694H195z' />\n        <path\n          d='M237.103 209v8.694h86.927V209h-86.927z'\n          stroke='#CACACA'\n          strokeWidth={2}\n          fill='#F4F4F4'\n        />\n        <path fill='#F9F9F9' d='M66 162h110v69H66z' />\n        <g opacity={0.5} fill='#BCBEC0'>\n          <path d='M147.007 210.894l-10.438-13.226a1.912 1.912 0 00-1.491-.718c-.574 0-1.147.3-1.491.718l-1.377 1.736c-.057.06-.114.18-.172.24-.344.358-.803.598-1.319.598-.516 0-.918-.18-1.262-.539-.114-.12-.23-.24-.286-.359l-5.105-6.463a2.412 2.412 0 00-1.95-.958c-.803 0-1.491.36-1.95.958l-13.65 17.295-.23.3c-.171.299-.286.598-.286.957 0 .957.746 1.735 1.663 1.735h38.541c.689 0 1.262-.598 1.262-1.316 0-.3-.057-.539-.23-.778l-.229-.18zM144.248 185c-2.294 0-4.187 1.975-4.187 4.369 0 2.394 1.893 4.369 4.187 4.369 2.294 0 4.186-1.975 4.186-4.37 0-2.393-1.892-4.368-4.186-4.368z' />\n        </g>\n        <path fill='#F9F9F9' d='M66 103h110v48H66z' />\n        <g opacity={0.5} fill='#BCBEC0'>\n          <path d='M147.007 138.946l-10.438-9.258c-.344-.293-.86-.502-1.491-.502-.574 0-1.147.21-1.491.502l-1.377 1.215c-.057.042-.114.126-.172.168a2.24 2.24 0 01-1.319.419c-.516 0-.918-.126-1.262-.377-.114-.084-.23-.168-.286-.252l-5.105-4.524c-.459-.419-1.147-.67-1.95-.67-.803 0-1.491.251-1.95.67l-13.65 12.107-.23.21c-.171.209-.286.418-.286.67 0 .67.746 1.214 1.663 1.214h38.541c.689 0 1.262-.419 1.262-.921a.698.698 0 00-.23-.545l-.229-.126zM144.248 121c-2.294 0-4.187 1.382-4.187 3.058s1.893 3.058 4.187 3.058c2.294 0 4.186-1.382 4.186-3.058S146.542 121 144.248 121z' />\n        </g>\n        <path fill='#DADADA' d='M339 108h76v116h-76z' />\n        <path\n          d='M172.591 101.423l.59.59-3.283 3.281 3.283 3.283-.59.59-3.283-3.283-3.28 3.283-.59-.59 3.281-3.283-3.282-3.281.59-.59 3.281 3.282 3.283-3.282z'\n          fill='#9B9B9B'\n        />\n        <g fill='#9B9B9B'>\n          <path d='M172.591 169.423l.59.59-3.283 3.281 3.283 3.283-.59.59-3.283-3.283-3.28 3.283-.59-.59 3.281-3.283-3.282-3.281.59-.59 3.281 3.282 3.283-3.282z' />\n        </g>\n        <g fill='#9B9B9B'>\n          <path d='M227.591 101.423l.59.59-3.283 3.281 3.283 3.283-.59.59-3.283-3.283-3.28 3.283-.59-.59 3.281-3.283-3.282-3.281.59-.59 3.281 3.282 3.283-3.282z' />\n        </g>\n        <g fill='#9B9B9B'>\n          <path d='M321.591 101.423l.59.59-3.283 3.281 3.283 3.283-.59.59-3.283-3.283-3.28 3.283-.59-.59 3.281-3.283-3.282-3.281.59-.59 3.281 3.282 3.283-3.282z' />\n        </g>\n        <g fill='#9B9B9B'>\n          <path d='M410.591 101.423l.59.59-3.283 3.281 3.283 3.283-.59.59-3.283-3.283-3.28 3.283-.59-.59 3.281-3.283-3.282-3.281.59-.59 3.281 3.282 3.283-3.282z' />\n        </g>\n        <use\n          stroke='#D0D0D0'\n          mask='url(#prefix__f)'\n          strokeWidth={2}\n          strokeDasharray={6}\n          xlinkHref='#prefix__a'\n        />\n        <use\n          stroke='#D0D0D0'\n          mask='url(#prefix__g)'\n          strokeWidth={2}\n          strokeDasharray={6}\n          xlinkHref='#prefix__b'\n        />\n        <use\n          stroke='#D0D0D0'\n          mask='url(#prefix__h)'\n          strokeWidth={2}\n          strokeDasharray={6}\n          xlinkHref='#prefix__c'\n        />\n        <use\n          stroke='#D0D0D0'\n          mask='url(#prefix__i)'\n          strokeWidth={2}\n          strokeDasharray={6}\n          xlinkHref='#prefix__d'\n        />\n        <use\n          stroke='#D0D0D0'\n          mask='url(#prefix__j)'\n          strokeWidth={2}\n          strokeDasharray={6}\n          xlinkHref='#prefix__e'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgEmptyDashboard };\n","import * as React from 'react';\n\ninterface IAtsSvgProductProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#1F282D'\n     */\n    shadowColor?: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgProduct = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#1F282D',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  foregroundColor = '#FFFFFF',\n  margin = '0'\n}: IAtsSvgProductProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-446 -328)'>\n          <g transform='translate(446 328)'>\n            <g fillRule='nonzero'>\n              <g fill={backgroundColor}>\n                <g>\n                  <g>\n                    <circle cx='62.5' cy='62.5' r='62.5'/>\n                  </g>\n                </g>\n              </g>\n              <path\n                fill={shadowColor || '#1F282D'}\n                d='M87.554 32.588l34.317 49.616c-9.863 29.087-38.32 42.61-55.193 42.61L33.41 92.493l50.14 1.517C90.81 78.68 94.627 66.76 95 58.248c.14-3.176-.162-4.248-.313-5.173-1.504-3.226-3.882-10.056-7.133-20.487z'\n                opacity={shadowOpacity}\n              />\n            </g>\n            <g fill={foregroundColor} transform='translate(31 30)'>\n              <path\n                fillRule='nonzero'\n                d='M63.688 23.075L57.361 4.1A5.983 5.983 0 0051.675 0H34v24h29.837c-.05-.313-.05-.625-.15-.925zM30 0H12.325a5.983 5.983 0 00-5.687 4.1L.313 23.075c-.1.3-.1.613-.15.925H30V0zM0 28v30c0 3.313 2.688 6 6 6h52c3.313 0 6-2.688 6-6V28H0z'\n              />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgProduct };\n","import * as React from 'react';\n\ninterface IAtsSvgSeriesProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900]\n     */\n    shadowColor?: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgSeries = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  foregroundColor = '#FFFFFF',\n  margin = '0'\n}: IAtsSvgSeriesProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-611 -328)'>\n          <g fillRule='nonzero' transform='translate(611 328)'>\n            <g strokeWidth='1'>\n              <g fill={backgroundColor}>\n                <g>\n                  <g>\n                    <circle cx='62.5' cy='62.5' r='62.5'/>\n                  </g>\n                </g>\n              </g>\n              <path\n                fill={shadowColor}\n                d='M94 35l28.37 44.907c-8.941 30.91-36.541 43.558-55.692 44.906L24 63c30.377-13.746 49.721-19.25 58.034-16.511C90.346 49.227 94.334 45.398 94 35z'\n                opacity={shadowOpacity}\n              />\n            </g>\n            <path\n              fill={foregroundColor}\n              d='M94 63L94 35 69.5 35 69.5 45.5 48.5 45.5 48.5 35 24 35 24 63 48.5 63 48.5 52.5 55.5 52.5 55.5 87.5 69.5 87.5 69.5 98 94 98 94 70 69.5 70 69.5 80.5 62.5 80.5 62.5 52.5 69.5 52.5 69.5 63z'\n            />\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgSeries };\n","import * as React from 'react';\n\ninterface IAtsSvgNewMasterProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgNewMaster = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  foregroundColor = '#FFFFFF',\n  margin = '0'\n}: IAtsSvgNewMasterProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g>\n          <g fill={backgroundColor}>\n            <g>\n              <circle cx='62.5' cy='62.5' r='62.5'/>\n            </g>\n          </g>\n          <path\n            fill={shadowColor}\n            fillRule='nonzero'\n            d='M92.915 54.195l-1.521 17.437 21.936 27.072c-15.805 17.883-21.149 21.68-42.258 25.381L34.641 73.897l29.174 14.715.01-11.895 29.09-22.522z'\n            opacity={shadowOpacity}\n          />\n        </g>\n        <g fill={foregroundColor} fillRule='nonzero' transform='translate(33 31)'>\n          <path d='M53.787 38.162a3.464 3.464 0 014.265 0l.035.035a3.484 3.484 0 010 5.488L34.458 62.07c-2.551 1.958-6.082 1.958-8.598 0L2.23 43.685a3.484 3.484 0 010-5.488 3.464 3.464 0 014.265 0l21.496 16.708a3.515 3.515 0 004.3 0zM25.895 2.056c2.551-1.958 6.082-1.958 8.598 0L58.122 20.44c1.782 1.398 1.782 4.124 0 5.523L34.493 44.349a6.98 6.98 0 01-8.598.035L2.266 25.999c-1.782-1.399-1.782-4.125 0-5.523zM30.643 13h-1.286c-.71 0-1.286.576-1.286 1.286v5.785h-5.785c-.71 0-1.286.576-1.286 1.286v1.286c0 .71.576 1.286 1.286 1.286h5.785v5.785c0 .71.576 1.286 1.286 1.286h1.286c.71 0 1.286-.576 1.286-1.286V23.93h5.785c.71 0 1.286-.576 1.286-1.286v-1.286c0-.71-.576-1.286-1.286-1.286H31.93v-5.785c0-.71-.576-1.286-1.286-1.286z'/>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgNewMaster };\n","import * as React from 'react';\n\ninterface IAtsSvgContactProps {\n  /**\n   * The width of the component.\n   * Default: '131'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '130'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#8FC07C'\n     * Expected: primary[200] (spec) or secondary[300] (pt) from theme.palette, origin is not in palette, using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00779D'\n     * Expected: primary[800] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.181'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgContact = ({\n  width = '131',\n  height = '130',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00779D',\n    backgroundColor: '#83D3EE' // original is '#8FC07C'\n  },\n  shadowOpacity = '0.181',\n  margin = '0'\n}: IAtsSvgContactProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 131 130'\n      xmlns='http://www.w3.org/2000/svg'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <linearGradient\n          x1='76.398%'\n          y1='78.433%'\n          x2='21.597%'\n          y2='28.995%'\n          id='prefix__c'\n        >\n          <stop stopOpacity={0} offset='0%' />\n          <stop stopColor={shadowColor} offset='100%' />\n        </linearGradient>\n        <ellipse id='prefix__b' cx={62.5} cy={61.881} rx={62.5} ry={61.881} />\n        <filter\n          x='-4%'\n          y='-3.2%'\n          width='108%'\n          height='108.1%'\n          filterUnits='objectBoundingBox'\n          id='prefix__a'\n        >\n          <feOffset dy={1} in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur\n            stdDeviation={1.5}\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n          />\n          <feColorMatrix\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n            in='shadowBlurOuter1'\n          />\n        </filter>\n      </defs>\n      <g fill='none' fillRule='evenodd'>\n        <g transform='translate(3 2)'>\n          <use fill='#000' filter='url(#prefix__a)' xlinkHref='#prefix__b' />\n          <use fill={backgroundColor} xlinkHref='#prefix__b' />\n        </g>\n        <path\n          d='M33.487 84.785c3.804 1.71 39.836-1.747 44.263-1.747 11.338 0 16.087-13.785 14.247-41.356l29.099 41.356c-9.01 19.479-34.833 38.412-58.194 41.356L33.487 84.785z'\n          fill='url(#prefix__c)'\n          fillRule='nonzero'\n          opacity={shadowOpacity}\n          transform='translate(3 2)'\n        />\n        <path\n          d='M91.792 40.366H39.708c-2.875 0-5.208 2.327-5.208 5.194v38.086c0 2.868 2.333 5.194 5.208 5.194h52.084c2.875 0 5.208-2.326 5.208-5.194V45.56c0-2.867-2.333-5.194-5.208-5.194zM53.597 50.754c3.83 0 6.945 3.105 6.945 6.924 0 3.82-3.114 6.925-6.945 6.925-3.83 0-6.944-3.105-6.944-6.925s3.114-6.924 6.944-6.924zM65.75 76.375c0 1.147-1.085 2.078-2.43 2.078H43.874c-1.345 0-2.43-.93-2.43-2.078v-2.077c0-3.44 3.266-6.232 7.291-6.232h.543c1.334.551 2.788.865 4.318.865 1.53 0 2.995-.314 4.319-.865h.542c4.026 0 7.292 2.791 7.292 6.232v2.077zm24.306-5.713a.87.87 0 01-.869.866H73.564a.87.87 0 01-.869-.866v-1.73a.87.87 0 01.869-.866h15.624a.87.87 0 01.869.865v1.731zm0-6.924a.87.87 0 01-.869.865H73.564a.87.87 0 01-.869-.865v-1.732a.87.87 0 01.869-.865h15.624a.87.87 0 01.869.865v1.732zm0-6.925a.87.87 0 01-.869.865H73.564a.87.87 0 01-.869-.865v-1.731a.87.87 0 01.869-.866h15.624a.87.87 0 01.869.866v1.73z'\n          fill='#FFF'\n          fillRule='nonzero'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgContact };\n","import * as React from 'react';\n\ninterface IAtsSvgStep1Props {\n  /**\n   * The width of the component.\n   * Default: '20'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '20'\n   */\n  height?: string;\n  /**\n   * The fill Default: '#0052A6'\n   */\n  fill?: string;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} fill - The fill colors. These are meant to be changed together.\n */\n\nconst AtsSvgStep1 = ({\n  width = '20',\n  height = '20',\n  fill = '#0052A6',\n}: IAtsSvgStep1Props) => {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 29 29'\n      version='1.1'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n        <g id='Cross-Ref_visual-2.0' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n            <g id='Mifab_Xref-Tool_Initial——visual_v3.0-Copy-2' transform='translate(-224.000000, -272.000000)'>\n                <g id='Group-6' transform='translate(225.000000, 273.000000)'>\n                    <circle id='Oval' stroke={fill} cx='13.5' cy='13.5' r='13.5'/>\n                    <text id='1' fill={fill} fillRule='nonzero' fontFamily='Helvetica' fontStretch='14' fontWeight='normal' letterSpacing='-0.0250000022'>\n                        <tspan x='10' y='18'>1</tspan>\n                    </text>\n                </g>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgStep1 };","import * as React from 'react';\n\ninterface IAtsSvgStep2Props {\n  /**\n   * The width of the component.\n   * Default: '20'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '20'\n   */\n  height?: string;\n  /**\n   * The fill Default: '#0052A6'\n   */\n  fill?: string;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} fill - The fill colors. These are meant to be changed together.\n */\n\nconst AtsSvgStep2 = ({\n  width = '20',\n  height = '20',\n  fill = '#0052A6',\n}: IAtsSvgStep2Props) => {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 29 29'\n      version='1.1'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n        <g id='Cross-Ref_visual-2.0' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n            <g id='Mifab_Xref-Tool_Initial——visual_v3.0-Copy-17' transform='translate(-767.000000, -271.000000)'>\n                <g id='Group-7' transform='translate(768.000000, 272.000000)'>\n                    <circle id='Oval' stroke={fill} cx='13.5' cy='13.5' r='13.5'/>\n                    <text id='2' fill={fill} fillRule='nonzero' fontFamily='Helvetica' fontSize='14' fontWeight='normal' letterSpacing='-0.0250000022'>\n                        <tspan x='10' y='18'>2</tspan>\n                    </text>\n                </g>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgStep2 };\n","import * as React from 'react';\n\ninterface IAtsSvgTestProjectProps {\n  /**\n   * The width of the component.\n   * Default: '16'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '18'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: '#666'\n   */\n  color?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgTestProject = ({\n  width = '16',\n  height = '18',\n  color = '#666',\n  className = '',\n  style = {}\n}: IAtsSvgTestProjectProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 16 18'\n      className={className}\n      style={style}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g fill={color} fillRule='nonzero' transform='translate(-660 -1372)'>\n          <path d='M671.556 1381.367c-2.454 0-4.445 1.907-4.445 4.258 0 2.35 1.991 4.257 4.445 4.257 2.453 0 4.444-1.907 4.444-4.257 0-2.35-1.991-4.258-4.444-4.258zm1.466 6.259l-1.91-1.831v-2.725H672v2.376l1.644 1.575-.622.605zm-.578-13.923h-2.826a2.67 2.67 0 00-2.507-1.703 2.67 2.67 0 00-2.507 1.703h-2.826c-.978 0-1.778.766-1.778 1.703v12.773c0 .937.8 1.703 1.778 1.703h5.43a5.752 5.752 0 01-1.261-1.703h-4.17v-12.773h1.779v2.555h7.11v-2.555h1.778v4.326a6.454 6.454 0 011.778.51v-4.836c0-.937-.8-1.703-1.778-1.703zm-5.333 1.703c-.489 0-.889-.383-.889-.851 0-.469.4-.852.89-.852.488 0 .888.383.888.852 0 .468-.4.851-.889.851z' />\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgTestProject };\n","import * as React from 'react';\n\ninterface IAtsSvgPushpinRoundedProps {\n  /**\n   * The width of the component.\n   * Default: '24'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '24'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: 'lightgrey'\n   */\n  color?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n  preserveAspectRatio?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgPushpinRounded = ({\n  width = '24',\n  height = '24',\n  color = '#666',\n  className = '',\n  style = {},\n  preserveAspectRatio = 'xMidYMid meet' // default value for preserveAspectRatio\n}: IAtsSvgPushpinRoundedProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 24 24'\n      className={className}\n      style={style}\n      preserveAspectRatio={preserveAspectRatio}\n    >\n      <path fill={color} fillRule='evenodd' d='M19 12.87c0-.47-.34-.85-.8-.98C16.93 11.54 16 10.38 16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.38-.93 2.54-2.2 2.89-.46.13-.8.51-.8.98V13c0 .55.45 1 1 1h4.98l.02 7c0 .55.45 1 1 1s1-.45 1-1l-.02-7H18c.55 0 1-.45 1-1v-.13z' />\n    </svg>\n  );\n};\n\nexport { AtsSvgPushpinRounded };\n","import * as React from 'react';\n\ninterface IAtsSvgEmptyFeaturesOptionsProps {\n  /**\n   * The width of the component.\n   * Default: '95'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '95'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: '#666'\n   * Expected: theme.palette.secondary[300]\n   */\n  color?: string;\n  /**\n   * The shadow color.\n   * Default: '#000000'\n   * * Expected: theme.palette.secondary.main\n   */\n  shadowColor?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The background color of the image.\n * @prop {string} shadowColor - The showdow color of the element.\n * @prop {React.CSSProperties} style - style\n */\nconst AtsSvgEmptyFeaturesOptions = ({\n  width = '131',\n  height = '131',\n  color = '#666',\n  shadowColor = '#000000',\n  style = {}\n}: IAtsSvgEmptyFeaturesOptionsProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      xmlnsXlink='http://www.w3.org/1999/xlink'\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      style={style}\n    >\n      <defs>\n        <ellipse\n          id='path-2'\n          cx='62.383'\n          cy='62.5'\n          rx='62.383'\n          ry='62.5'\n        />\n        <filter\n          id='filter-3'\n          width='108%'\n          height='108%'\n          x='-4%'\n          y='-3.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <linearGradient\n          id='linearGradient-4'\n          x1='76.398%'\n          x2='21.597%'\n          y1='66.992%'\n          y2='37.447%'\n        >\n          <stop offset='0%' stopOpacity={0}/>\n          <stop offset='100%' stopColor={shadowColor}/>\n        </linearGradient>\n        <filter id='filter-5'>\n          <feColorMatrix\n            in='SourceGraphic'\n            values='0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0'\n          />\n        </filter>\n        <filter\n          id='filter-6'\n          width='134.8%'\n          height='134.8%'\n          x='-17.4%'\n          y='-17.4%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='2'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='2'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            result='shadowMatrixOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0'\n          />\n          <feMerge>\n            <feMergeNode in='shadowMatrixOuter1'/>\n            <feMergeNode in='SourceGraphic'/>\n          </feMerge>\n        </filter>\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-2458 -1174)'>\n          <g transform='translate(2461 1176)'>\n            <g>\n              <g>\n                <g>\n                  <use\n                    fill='#000'\n                    filter='url(#filter-3)'\n                    xlinkHref='#path-2'\n                  />\n                  <use fill={color} xlinkHref='#path-2'/>\n                </g>\n              </g>\n              <path\n                fill='url(#linearGradient-4)'\n                fillRule='nonzero'\n                d='M45.798 80.058c.649.201 1.555.311 2.75.311 17.686 0 23.598 7.07 24.948-7.63l3.024-.798c2.554.205 5.834.584 5.834.084 0-.571-.048-1.1-.142-1.589l5.696-1.505 5.19 6.958 20.047 22.5c-.7 2.005-2.23 3.687-3.525 5.112-1.46 1.604-2.73 2.892-4.15 4.14-2.968 2.611-5.17 4.797-7.83 6.577-7.927 5.305-15.25 7.794-29.984 10.782L33.962 86.053l2.166-3.44 9.67-2.555z'\n                opacity='0.2'\n              />\n            </g>\n            <g filter='url(#filter-5)'>\n              <g filter='url(#filter-6)' transform='translate(28 28)'>\n                <path d='M0 0L69 0 69 69 0 69z'/>\n                <path\n                  fill='#000'\n                  fillRule='nonzero'\n                  d='M38.02 36.971V61h24.017V36.971H38.021zM8 61h24.017V36.971H8V61zM8 6.935v24.029h24.017V6.934H8zM49.008 3L32.017 19.97l16.991 17.001 16.992-17L49.008 3z'\n                />\n              </g>\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgEmptyFeaturesOptions };\n","import * as React from 'react';\n\ninterface IAtsSvgEmptyAttachmentProps {\n  /**\n   * The width of the component.\n   * Default: '95'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '95'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: '#666'\n   * Expected: theme.palette.secondary[300]\n   */\n  color?: string;\n  /**\n   * The shadow color.\n   * Default: '#000000'\n   * * Expected: theme.palette.secondary.main\n   */\n  shadowColor?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The background color of the image.\n * @prop {string} shadowColor - The showdow color of the element.\n * @prop {React.CSSProperties} style - style\n */\nconst AtsSvgEmptyAttachment = ({\n  width = '131',\n  height = '131',\n  color = '#666',\n  shadowColor = '#000000',\n  style = {}\n}: IAtsSvgEmptyAttachmentProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      xmlnsXlink='http://www.w3.org/1999/xlink'\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      style={style}\n    >\n      <defs>\n        <ellipse id='path-1' cx='48' cy='48' rx='48' ry='48'/>\n        <filter\n          id='filter-2'\n          width='110.4%'\n          height='110.5%'\n          x='-5.2%'\n          y='-4.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0'\n          />\n        </filter>\n        <linearGradient\n          id='linearGradient-3'\n          x1='76.398%'\n          x2='21.597%'\n          y1='79.315%'\n          y2='28.343%'\n        >\n          <stop offset='0%' stopOpacity='0'/>\n          <stop offset='100%' stopColor={shadowColor}/>\n        </linearGradient>\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-2661 -672)'>\n          <g transform='translate(2664 674)'>\n            <g>\n              <g>\n                <g>\n                  <use\n                    fill='#000'\n                    filter='url(#filter-2)'\n                    xlinkHref='#path-1'\n                  />\n                  <use fill={color} xlinkHref='#path-1'/>\n                </g>\n              </g>\n            </g>\n            <path\n              fill='url(#linearGradient-3)'\n              fillRule='nonzero'\n              d='M92.983 61.22c-9.08 21.17-18.246 29.855-41.599 34.008L28.8 71.478l31.573-1.134 5.916-7.113V34.595L92.983 61.22z'\n              opacity='0.181'\n            />\n            <path\n              fill='#FFF'\n              fillRule='nonzero'\n              d='M50.668 35.739V22.812H31.143c-1.298 0-2.343 1.017-2.343 2.281v44.103c0 1.264 1.045 2.281 2.343 2.281h32.803c1.298 0 2.343-1.017 2.343-2.281V38.02H53.012c-1.29 0-2.344-1.027-2.344-2.281zm7.65 20.328L48.74 65.23a1.74 1.74 0 01-2.388 0l-9.58-9.162c-1.008-.964-.3-2.62 1.118-2.62h6.476V45.79c0-.846.711-1.531 1.59-1.531h3.179c.878 0 1.59.685 1.59 1.531v7.659h6.475c1.418 0 2.126 1.655 1.12 2.62zm7.287-23.106l-9.557-9.472a2.353 2.353 0 00-1.66-.677h-.595v12.372h12.496v-.59a2.3 2.3 0 00-.684-1.633z'\n            />\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgEmptyAttachment };\n","import * as React from 'react';\n\ninterface IAtsSvgTagProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#FCCA84'\n     * Original: '#FCC983'\n     * Expected: primary[200] from theme.palette since Original doesn't match palette and using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#E76C17'\n     * Original: '#CC6800'\n     * Expected: primary.main from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgTag = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#E76C17',\n    backgroundColor: '#FCCA84'\n  },\n  shadowOpacity = '0.15',\n  margin = '0'\n}: IAtsSvgTagProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      xmlns='http://www.w3.org/2000/svg'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd'>\n        <g>\n          <circle fill={backgroundColor} cx={62.5} cy={62.5} r={62.5} />\n          <path\n            d='m89 42.636 27.407 51.118C106.204 108.568 93 119.372 70.175 125l-32.9-48.79 32.9-3.588L89 42.636Z'\n            fill={shadowColor}\n            fillRule='nonzero'\n            opacity={shadowOpacity}\n          />\n        </g>\n        <path\n          d='m62.344 93.112 28.8-28.8A6.36 6.36 0 0 0 93 59.8V37.4c0-3.52-2.88-6.4-6.4-6.4H64.2c-1.76 0-3.36.704-4.544 1.888l-28.8 28.8A6.36 6.36 0 0 0 29 66.2c0 1.76.704 3.36 1.888 4.512l22.4 22.4A6.257 6.257 0 0 0 57.8 95c1.76 0 3.392-.736 4.544-1.888Zm14.171-50.476a4.842 4.842 0 0 1 4.849-4.848 4.842 4.842 0 0 1 4.848 4.848 4.842 4.842 0 0 1-4.848 4.849 4.842 4.842 0 0 1-4.849-4.849Z'\n          fill='#FFF'\n          fillRule='nonzero'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgTag };\n","import * as React from 'react';\n\ninterface IAtsSvgCreateNewProjectProps {\n  /**\n   * The width of the component.\n   * Default: '90'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '90'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#FCCA83'\n     * Expected: primary[200] from theme.palette since Original doesn't match palette and using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077AD'\n     * Original: '#E76C17'\n     * Expected: primary.main from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n */\nconst AtsSvgCreateNewProject = ({\n  width = '90',\n  height = '90',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00779D',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n}: IAtsSvgCreateNewProjectProps) => {\n\n  return (\n    <svg width={width} height={height} viewBox='0 0 196 196' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlnsXlink='http://www.w3.org/1999/xlink'>\n        <g id='Asset-/-SpecTool-/-Project' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n            <g id='✱-/-Asset-/-Spec-Tool-/-Project'>\n                <g id='Oval-3' fill={backgroundColor}>\n                    <circle id='path-1' cx='98' cy='98' r='98' />\n                </g>\n                <path d='M153.105593,95.8165467 L184.714374,143.269628 C165.16082,182.113794 126.860566,196.612532 94.4870563,195.834699 L48.608,130.173743 L132.825682,129.452458 L153.105593,95.8165467 Z' id='Combined-Shape' fill={shadowColor} fillRule='nonzero' opacity={shadowOpacity} />\n                <g id='path-4-link' transform='translate(42.336000, 55.962667)' fill='#FFFFFF'>\n                    <path d='M97.0207388,68.4442813 C95.9858519,70.388721 94.4981997,71.9118646 92.557785,73.0137148 C90.6173701,74.1155651 88.5475933,74.6664887 86.3484576,74.6664887 L8.73186648,74.6664887 C6.92081363,74.6664887 5.56252328,73.8887128 4.65699544,72.3331608 C3.7514676,70.777609 3.7514676,69.2220572 4.65699544,67.6665054 L18.8220233,43.5554516 C19.8569102,41.6110119 21.3445626,40.0878683 23.2849773,38.9860181 C25.2253921,37.884168 27.2951689,37.3332444 29.4943047,37.3332444 L107.110896,37.3332444 C108.921949,37.3332444 110.280239,38.1110203 111.185767,39.6665721 C112.091295,41.2221239 112.091295,42.7776757 111.185767,44.3332277 L97.0207388,68.4442813 Z M29.4943047,31.1110369 C26.1309199,31.1110369 23.0262564,31.9536266 20.1803137,33.6388086 C17.3343711,35.3239908 15.0705557,37.592502 13.3888619,40.444348 L0,63.3887377 L0,9.33331109 C0,6.7407256 0.90552784,4.53702527 2.7165807,2.72221569 C4.52763356,0.907406267 6.72677221,0 9.31399087,0 L40.3606273,0 L52.779282,12.4444147 L83.8259183,12.4444147 C86.4131371,12.4444147 88.6122758,13.351821 90.4233287,15.1666306 C92.2343815,16.98144 93.1399094,19.1851405 93.1399094,21.7777258 L93.1399094,31.1110369 L29.4943047,31.1110369 Z' id='path-4' />\n                </g>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport {AtsSvgCreateNewProject};\n","import * as React from 'react';\n\ninterface IAtsSvgCategoryProps {\n  /**\n   * The width of the component.\n   * Default: '90'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '90'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Original: '#FCCA83'\n     * Expected: primary[200] from theme.palette since Original doesn't match palette and using 200 for consistency with other SVGs.\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#0077AD'\n     * Original: '#E76C17'\n     * Expected: primary.main from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n */\nconst AtsSvgCategory = ({\n  width = '90',\n  height = '90',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00779D',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n}: IAtsSvgCategoryProps) => {\n\n  return (\n    <svg width={width} height={height} viewBox='0 0 196 196' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlnsXlink='http://www.w3.org/1999/xlink'>\n        <g id='Projects' stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n            <g id='Spec-Tool-2.0_Manage-Projects_Project-Detail_Blank-Product-Group' transform='translate(-729.000000, -417.000000)'>\n                <g id='Product-Group' transform='translate(729.000000, 417.000000)'>\n                    <circle id='path-1' fill={backgroundColor} cx='98' cy='98' r='98'/>\n                    <g id='path-4-link' transform='translate(63.000000, 47.000000)'/>\n                    <path d='M129.830148,91 C133.675089,94.3047292 138.183551,99.1985907 143.355535,105.681585 C148.887962,112.616387 160.436117,127.849221 178,151.380085 C162.352201,176.685291 136.800609,191.847675 97.063119,196 L48,143.491539 L69.2443655,101.970149 L68.4575371,91 L129.830148,91 Z' id='Combined-Shape' fill={shadowColor} fillRule='nonzero' opacity={shadowOpacity}/>\n                    <g id='category_black_24dp' transform='translate(34.000000, 30.000000)'>\n                        <polygon id='Path' points='0 0 129 0 129 129 0 129'/>\n                        <polygon id='Path' fill='#FFFFFF' fillRule='nonzero' points='65.5 12 35 61 96 61'/>\n                        <circle id='Oval' fill='#FFFFFF' fillRule='nonzero' cx='92.5' cy='93.5' r='24.5'/>\n                        <polygon id='Path' fill='#FFFFFF' fillRule='nonzero' points='15 72 57 72 57 114 15 114'/>\n                    </g>\n                </g>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport {AtsSvgCategory};","import * as React from 'react';\n\ninterface IAtsSvgRequestMasterProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#8BC5F5'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#005DB8'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n */\nconst AtsSvgRequestMaster = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n}: IAtsSvgRequestMasterProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      xmlnsXlink='http://www.w3.org/1999/xlink'\n      width={width}\n      height={height}\n    >\n      <title>\n        {'Asset / Watts Spechub / Request Master Specification_Reduced Size'}\n      </title>\n      <defs>\n        <filter\n          id='a'\n          width='108%'\n          height='108%'\n          x='-4%'\n          y='-3.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset dy={1} in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation={1.5}\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <filter\n          id='c'\n          width='111.2%'\n          height='114.4%'\n          x='-5.6%'\n          y='-5.8%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset dy={1} in='SourceAlpha' result='shadowOffsetOuter1' />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation={1.5}\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n        <circle id='b' cx={62.5} cy={62.5} r={62.5} />\n        <path\n          id='d'\n          d='m60.25 90.072 35.532-34.747 26.32 26.085c-4.327 11.49-10.566 20.944-18.718 28.36-8.152 7.415-19.265 12.345-33.339 14.79L32.896 91.737l6.455-16.967 20.9 15.302Z'\n        />\n      </defs>\n      <g fill='none' fillRule='evenodd'>\n        <use xlinkHref='#b' fill='#000' filter='url(#a)' />\n        <use xlinkHref='#b' fill={backgroundColor} />\n        <g opacity={shadowOpacity}>\n          <use xlinkHref='#d' fill='#000' filter='url(#c)' />\n          <use xlinkHref='#d' fill={shadowColor} />\n        </g>\n        <path d='M19 19h86v86H19z' />\n        <path\n          fill='#FFF'\n          fillRule='nonzero'\n          d='M87.778 28.3H72.683C71.167 24.066 67.194 21 62.5 21s-8.667 3.066-10.183 7.3H37.222C33.25 28.3 30 31.585 30 35.6v51.1c0 4.015 3.25 7.3 7.222 7.3h50.556C91.75 94 95 90.715 95 86.7V35.6c0-4.015-3.25-7.3-7.222-7.3Zm-25.278 0c1.986 0 3.611 1.643 3.611 3.65 0 2.007-1.625 3.65-3.611 3.65-1.986 0-3.611-1.643-3.611-3.65 0-2.007 1.625-3.65 3.611-3.65Zm3.611 51.1H48.056c-1.987 0-3.612-1.643-3.612-3.65 0-2.007 1.625-3.65 3.612-3.65H66.11c1.986 0 3.611 1.643 3.611 3.65 0 2.007-1.625 3.65-3.61 3.65Zm10.833-14.6H48.056c-1.987 0-3.612-1.642-3.612-3.65s1.625-3.65 3.612-3.65h28.888c1.987 0 3.612 1.642 3.612 3.65s-1.625 3.65-3.612 3.65Zm0-14.6H48.056c-1.987 0-3.612-1.642-3.612-3.65 0-2.007 1.625-3.65 3.612-3.65h28.888c1.987 0 3.612 1.643 3.612 3.65 0 2.008-1.625 3.65-3.612 3.65Z'\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgRequestMaster };\n","import * as React from 'react';\n\ninterface IAtsSvgAltXrefLogoProps {\n  /**\n   * The main color of the image.\n   * Default: '#fff'\n   * Expected: theme.palette.primary\n   */\n  fill?: string;\n  /**\n   * The width of the element.\n   * Default: '500'\n   */\n  width?: string;\n  /**\n   * The height of the element.\n   * Default: '350'\n   */\n  height?: string;\n}\n\n/**\n * Props:\n * @prop {string} fill - The main color of the image.\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n */\nconst AtsSvgAltXrefLogo = ({\n  fill = '#fff',\n  width = '500',\n  height = '350'\n}: IAtsSvgAltXrefLogoProps) => {\n\n  return (\n  <svg\n    xmlns='http://www.w3.org/2000/svg'\n    width='60'\n    height='65'\n    fill='none'\n    viewBox='0 0 60 65'\n  >\n    <path\n      fill={fill}\n      fillRule='evenodd'\n      d='M35.241 48.328c-7.819 2.828-16.781 1.484-23.46-4.023l-2.442 2.442c10.812 9.152 27.039 8.611 37.278-1.628l1.026-1.123-12.376.028zM9.41 19.87l-1.026 1.123 12.377-.029.01-4.32c7.835-2.811 16.78-1.484 23.443 4.04l2.442-2.443C35.876 9.09 19.65 9.631 9.41 19.87'\n      clipRule='evenodd'\n    />\n    <path\n      fill={fill}\n      d='m16.177 33.56-2.832-4.056h1.908l2.004 3.144 1.98-3.144h1.836L18.29 33.56 21.373 38h-1.92l-2.244-3.588L14.977 38h-1.824zm7.37-4.056H26.5q.612 0 1.176.12.576.108 1.02.384t.708.744.264 1.188q0 .924-.516 1.548-.504.624-1.452.756L29.955 38h-1.824l-1.968-3.6H25.06V38h-1.512zm2.688 3.6q.324 0 .648-.024.324-.036.588-.144.276-.12.444-.348.168-.24.168-.66 0-.372-.156-.6a.93.93 0 0 0-.408-.336 1.8 1.8 0 0 0-.564-.156 5 5 0 0 0-.588-.036H25.06v2.304zm6.102-3.6h5.628v1.368h-4.116v2.088h3.9v1.368h-3.9v2.304h4.332V38h-5.844zm8.567 0h5.484v1.368h-3.972v2.232h3.744v1.368h-3.744V38h-1.512z'\n    />\n  </svg>\n  );\n};\n\nexport { AtsSvgAltXrefLogo };","import * as React from 'react';\n\ninterface IAtsSvgUploadProps {\n  /**\n   * The width of the component.\n   * Default: 72\n   */\n  width?: number;\n  /**\n   * The height of the component.\n   * Default: 72\n   */\n  height?: number;\n  /**\n   * The color.\n   * Default: '#757575'\n   */\n  color?: string;\n  /**\n   * The background color.\n   * Default: '#EEEEEE'\n   */\n  backgroundColor?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {number} width - The width of the element.\n * @prop {number} height - The height of the element.\n * @prop {string} color - The color of the element.\n * @prop {string} backgroundColor - The background color of the element.\n */\nconst AtsSvgUpload = ({\n  width = 72,\n  height = 72,\n  color = '#757575',\n  backgroundColor = '#EEEEEE',\n  className = '',\n  style = {},\n}: IAtsSvgUploadProps) => {\n\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 72 72'\n      fill='none'\n      xmlns='http://www.w3.org/2000/svg'\n      className={className}\n      style={style}\n    >\n      <rect width={width} height={height} rx={36} fill={backgroundColor} />\n      <g clipPath='url(#clip0_15825_9591)'>\n        <path\n          d='M40.0832 18.584H25.7498C23.779 18.584 22.1844 20.1965 22.1844 22.1673L22.1665 50.834C22.1665 52.8048 23.7611 54.4173 25.7319 54.4173H47.2498C49.2207 54.4173 50.8332 52.8048 50.8332 50.834V29.334L40.0832 18.584ZM47.2498 50.834H25.7498V22.1673H38.2915V31.1257H47.2498V50.834ZM29.3332 41.8936L31.8594 44.4198L34.7082 41.589V49.0423H38.2915V41.589L41.1403 44.4377L43.6665 41.8936L36.5178 34.709L29.3332 41.8936Z'\n          fill={color}\n        />\n      </g>\n      <defs>\n        <clipPath id='clip0_15825_9591'>\n          <rect\n            width={43}\n            height={43}\n            fill='white'\n            transform='translate(15 15)'\n          />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport { AtsSvgUpload };\n","import * as React from 'react';\n\ninterface IAtsSvgDiscontinuedProps {\n  /**\n   * The width of the component.\n   * Default: '25'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '25'\n   */\n  height?: string;\n  /**\n   * The color of the icon and the discontinued badge.\n   * Default: '#C9302C'\n   * Expected: error.main from theme.palette\n   */\n  color?: string;\n  /**\n   * The color of the outline separating the badge from the icon behind it.\n   * Default: '#FFFFFF'\n   * Expected: the background color the icon sits on.\n   */\n  outlineColor?: string;\n}\n\n/** Single-product box. */\nconst PRODUCT_GLYPH = 'M11.375 2H5.85156C5.04297 2 4.32812 2.51562 4.07422 3.28125L2.09766 9.21094C2.07673 9.27371 2.06982 9.33824 2.06284 9.40335C2.0594 9.43547 2.05594 9.46774 2.05078 9.5H11.375V2ZM21.9023 9.21094L19.9258 3.28125C19.6719 2.51562 18.957 2 18.1484 2H12.625V9.5H21.9492C21.9441 9.46774 21.9406 9.43547 21.9372 9.40335C21.9302 9.33824 21.9233 9.27371 21.9023 9.21094ZM2 20.125V10.75H22V20.125C22 21.1602 21.1602 22 20.125 22H3.875C2.83984 22 2 21.1602 2 20.125Z';\n\n/** Stacked boxes, for a package of products. */\nconst PACKAGE_GLYPH = 'M15.8889 10.8289C16.1944 10.8289 16.4444 10.5773 16.4444 10.2697V3.55921C16.4444 3.25164 16.1944 3 15.8889 3H13.1111V6.35526L12 5.61081L10.8889 6.35526V3H8.11111C7.80556 3 7.55556 3.25164 7.55556 3.55921V10.2697C7.55556 10.5773 7.80556 10.8289 8.11111 10.8289H15.8889ZM21.4444 13.0658H18.6667V16.4211L17.5556 15.6766L16.4444 16.4211V13.0658H13.6667C13.3611 13.0658 13.1111 13.3174 13.1111 13.625V20.3355C13.1111 20.6431 13.3611 20.8947 13.6667 20.8947H21.4444C21.75 20.8947 22 20.6431 22 20.3355V13.625C22 13.3174 21.75 13.0658 21.4444 13.0658ZM7.55556 13.0658H10.3333C10.6389 13.0658 10.8889 13.3174 10.8889 13.625V20.3355C10.8889 20.6431 10.6389 20.8947 10.3333 20.8947H2.55556C2.25 20.8947 2 20.6431 2 20.3355V13.625C2 13.3174 2.25 13.0658 2.55556 13.0658H5.33333V16.4211L6.44444 15.6766L7.55556 16.4211V13.0658Z';\n\n/** The struck-through circle badge, overlaid on the bottom-right of either glyph. */\nconst DISCONTINUED_BADGE_GLYPH = 'M19 14.6504C21.9177 14.6504 24.3496 16.7889 24.3496 19.5C24.3496 22.2111 21.9177 24.3496 19 24.3496C16.0823 24.3496 13.6504 22.2111 13.6504 19.5C13.6504 16.7889 16.0823 14.6504 19 14.6504ZM17.1328 22.2852C17.6767 22.5777 18.3136 22.75 19 22.75C21.0523 22.75 22.6504 21.2619 22.6504 19.5C22.6504 18.88 22.4518 18.3012 22.1074 17.8066L17.1328 22.2852ZM19 16.25C16.9477 16.25 15.3496 17.7381 15.3496 19.5C15.3496 20.1195 15.5477 20.6981 15.8916 21.1924L20.8662 16.7139C20.3226 16.4217 19.6859 16.25 19 16.25Z';\n\nconst AtsSvgDiscontinued = ({\n  glyph,\n  width = '25',\n  height = '25',\n  color = '#C9302C',\n  outlineColor = '#FFFFFF'\n}: IAtsSvgDiscontinuedProps & { glyph: string }) => (\n  <svg\n    width={width}\n    height={height}\n    viewBox='0 0 25 25'\n    fill='none'\n    xmlns='http://www.w3.org/2000/svg'\n    style={{ maxWidth: '100%' }}\n  >\n    <path\n      fillRule='evenodd'\n      clipRule='evenodd'\n      d={glyph}\n      fill={color}\n    />\n    <path\n      d={DISCONTINUED_BADGE_GLYPH}\n      fill={color}\n      stroke={outlineColor}\n      strokeWidth={0.7}\n    />\n  </svg>\n);\n\n/**\n * A single product, marked discontinued.\n *\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The color of the icon and the discontinued badge.\n * @prop {string} outlineColor - The color of the outline separating the badge from the icon behind it.\n */\nconst AtsSvgProductDiscontinued = (props: IAtsSvgDiscontinuedProps) =>\n  <AtsSvgDiscontinued {...props} glyph={PRODUCT_GLYPH} />;\n\n/**\n * A package of products, marked discontinued.\n *\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The color of the icon and the discontinued badge.\n * @prop {string} outlineColor - The color of the outline separating the badge from the icon behind it.\n */\nconst AtsSvgPackageDiscontinued = (props: IAtsSvgDiscontinuedProps) =>\n  <AtsSvgDiscontinued {...props} glyph={PACKAGE_GLYPH} />;\n\nexport { AtsSvgProductDiscontinued, AtsSvgPackageDiscontinued };\n","// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof string !== 'string') {\n      throw new Error('Material-UI: capitalize(string) expects a string argument.');\n    }\n  }\n\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","import * as React from 'react';\nimport { Api } from 'ats-api/src';\nimport { useContext } from 'react';\nimport store from '../../store';\n\n\nexport function cancellableCallApi(options = {}) {\n  const controller = new AbortController();\n  const signal = controller.signal;\n\n  const promise = store.store.atsApi.callApi({ ...options, signal })\n    .catch(err => {\n      if (err.name === 'AbortError') {\n        return new Promise(() => {});  // tslint:disable-line\n      }\n      throw err;\n    });\n\n  return {\n    promise,\n    cancel: () => controller.abort(),\n  };\n}\n\n\nexport const AtsApiContext = React.createContext(undefined);\n\nexport const withAtsApi = () => (Component) => function ThemedComponent(props) {\n  return (\n    <AtsApiContext.Consumer>\n      {(atsApi) => <Component {...props} atsApi={atsApi} />}\n    </AtsApiContext.Consumer>\n  );\n};\n\nexport interface IWithAtsApi {\n  atsApi: Api;\n}\n\nexport type WithAtsApi = IWithAtsApi;\n\ntype IUseAtsApi = () => Api;\nexport const useAtsApi: IUseAtsApi = () => useContext(AtsApiContext);\nexport default AtsApiContext;\n","import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n\n  var target = _objectWithoutPropertiesLoose(source, excluded);\n\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar humps = createCommonjsModule(function (module) {\n(function(global) {\n\n  var _processKeys = function(convert, obj, options) {\n    if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\n      return obj;\n    }\n\n    var output,\n        i = 0,\n        l = 0;\n\n    if(_isArray(obj)) {\n      output = [];\n      for(l=obj.length; i<l; i++) {\n        output.push(_processKeys(convert, obj[i], options));\n      }\n    }\n    else {\n      output = {};\n      for(var key in obj) {\n        if(Object.prototype.hasOwnProperty.call(obj, key)) {\n          output[convert(key, options)] = _processKeys(convert, obj[key], options);\n        }\n      }\n    }\n    return output;\n  };\n\n  // String conversion methods\n\n  var separateWords = function(string, options) {\n    options = options || {};\n    var separator = options.separator || '_';\n    var split = options.split || /(?=[A-Z])/;\n\n    return string.split(split).join(separator);\n  };\n\n  var camelize = function(string) {\n    if (_isNumerical(string)) {\n      return string;\n    }\n    string = string.replace(/[\\-_\\s]+(.)?/g, function(match, chr) {\n      return chr ? chr.toUpperCase() : '';\n    });\n    // Ensure 1st char is always lowercase\n    return string.substr(0, 1).toLowerCase() + string.substr(1);\n  };\n\n  var pascalize = function(string) {\n    var camelized = camelize(string);\n    // Ensure 1st char is always uppercase\n    return camelized.substr(0, 1).toUpperCase() + camelized.substr(1);\n  };\n\n  var decamelize = function(string, options) {\n    return separateWords(string, options).toLowerCase();\n  };\n\n  // Utilities\n  // Taken from Underscore.js\n\n  var toString = Object.prototype.toString;\n\n  var _isFunction = function(obj) {\n    return typeof(obj) === 'function';\n  };\n  var _isObject = function(obj) {\n    return obj === Object(obj);\n  };\n  var _isArray = function(obj) {\n    return toString.call(obj) == '[object Array]';\n  };\n  var _isDate = function(obj) {\n    return toString.call(obj) == '[object Date]';\n  };\n  var _isRegExp = function(obj) {\n    return toString.call(obj) == '[object RegExp]';\n  };\n  var _isBoolean = function(obj) {\n    return toString.call(obj) == '[object Boolean]';\n  };\n\n  // Performant way to determine if obj coerces to a number\n  var _isNumerical = function(obj) {\n    obj = obj - 0;\n    return obj === obj;\n  };\n\n  // Sets up function which handles processing keys\n  // allowing the convert function to be modified by a callback\n  var _processor = function(convert, options) {\n    var callback = options && 'process' in options ? options.process : options;\n\n    if(typeof(callback) !== 'function') {\n      return convert;\n    }\n\n    return function(string, options) {\n      return callback(string, convert, options);\n    }\n  };\n\n  var humps = {\n    camelize: camelize,\n    decamelize: decamelize,\n    pascalize: pascalize,\n    depascalize: decamelize,\n    camelizeKeys: function(object, options) {\n      return _processKeys(_processor(camelize, options), object);\n    },\n    decamelizeKeys: function(object, options) {\n      return _processKeys(_processor(decamelize, options), object, options);\n    },\n    pascalizeKeys: function(object, options) {\n      return _processKeys(_processor(pascalize, options), object);\n    },\n    depascalizeKeys: function () {\n      return this.decamelizeKeys.apply(this, arguments);\n    }\n  };\n\n  if (module.exports) {\n    module.exports = humps;\n  } else {\n    global.humps = humps;\n  }\n\n})(commonjsGlobal);\n});\n\nfunction capitalize(val) {\n  return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nfunction styleToObject(style) {\n  return style.split(';').map(function (s) {\n    return s.trim();\n  }).filter(function (s) {\n    return s;\n  }).reduce(function (acc, pair) {\n    var i = pair.indexOf(':');\n    var prop = humps.camelize(pair.slice(0, i));\n    var value = pair.slice(i + 1).trim();\n    prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\n    return acc;\n  }, {});\n}\n\nfunction convert(createElement, element) {\n  var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (typeof element === 'string') {\n    return element;\n  }\n\n  var children = (element.children || []).map(function (child) {\n    return convert(createElement, child);\n  });\n  var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n    var val = element.attributes[key];\n\n    switch (key) {\n      case 'class':\n        acc.attrs['className'] = val;\n        delete element.attributes['class'];\n        break;\n\n      case 'style':\n        acc.attrs['style'] = styleToObject(val);\n        break;\n\n      default:\n        if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n          acc.attrs[key.toLowerCase()] = val;\n        } else {\n          acc.attrs[humps.camelize(key)] = val;\n        }\n\n    }\n\n    return acc;\n  }, {\n    attrs: {}\n  });\n\n  var _extraProps$style = extraProps.style,\n      existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n      remaining = _objectWithoutProperties(extraProps, [\"style\"]);\n\n  mixins.attrs['style'] = _objectSpread({}, mixins.attrs['style'], existingStyle);\n  return createElement.apply(void 0, [element.tag, _objectSpread({}, mixins.attrs, remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n  PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n  if (!PRODUCTION && console && typeof console.error === 'function') {\n    var _console;\n\n    (_console = console).error.apply(_console, arguments);\n  }\n}\n\nfunction objectWithKey(key, value) {\n  return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nfunction classList(props) {\n  var _classes;\n\n  var classes = (_classes = {\n    'fa-spin': props.spin,\n    'fa-pulse': props.pulse,\n    'fa-fw': props.fixedWidth,\n    'fa-inverse': props.inverse,\n    'fa-border': props.border,\n    'fa-li': props.listItem,\n    'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\n    'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\n  }, _defineProperty(_classes, \"fa-\".concat(props.size), props.size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \"fa-pull-\".concat(props.pull), props.pull !== null), _classes);\n  return Object.keys(classes).map(function (key) {\n    return classes[key] ? key : null;\n  }).filter(function (key) {\n    return key;\n  });\n}\n\nfunction normalizeIconArgs(icon$$1) {\n  if (icon$$1 === null) {\n    return null;\n  }\n\n  if (_typeof(icon$$1) === 'object' && icon$$1.prefix && icon$$1.iconName) {\n    return icon$$1;\n  }\n\n  if (Array.isArray(icon$$1) && icon$$1.length === 2) {\n    return {\n      prefix: icon$$1[0],\n      iconName: icon$$1[1]\n    };\n  }\n\n  if (typeof icon$$1 === 'string') {\n    return {\n      prefix: 'fas',\n      iconName: icon$$1\n    };\n  }\n}\n\nfunction FontAwesomeIcon(props) {\n  var iconArgs = props.icon,\n      maskArgs = props.mask,\n      symbol = props.symbol,\n      className = props.className,\n      title = props.title;\n  var iconLookup = normalizeIconArgs(iconArgs);\n  var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\n  var transform = objectWithKey('transform', typeof props.transform === 'string' ? parse.transform(props.transform) : props.transform);\n  var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n  var renderedIcon = icon(iconLookup, _objectSpread({}, classes, transform, mask, {\n    symbol: symbol,\n    title: title\n  }));\n\n  if (!renderedIcon) {\n    log('Could not find icon', iconLookup);\n    return null;\n  }\n\n  var abstract = renderedIcon.abstract;\n  var extraProps = {};\n  Object.keys(props).forEach(function (key) {\n    if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\n      extraProps[key] = props[key];\n    }\n  });\n  return convertCurry(abstract[0], extraProps);\n}\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n  border: PropTypes.bool,\n  className: PropTypes.string,\n  mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n  fixedWidth: PropTypes.bool,\n  inverse: PropTypes.bool,\n  flip: PropTypes.oneOf(['horizontal', 'vertical', 'both']),\n  icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n  listItem: PropTypes.bool,\n  pull: PropTypes.oneOf(['right', 'left']),\n  pulse: PropTypes.bool,\n  rotation: PropTypes.oneOf([90, 180, 270]),\n  size: PropTypes.oneOf(['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n  spin: PropTypes.bool,\n  symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n  title: PropTypes.string,\n  transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\nFontAwesomeIcon.defaultProps = {\n  border: false,\n  className: '',\n  mask: null,\n  fixedWidth: false,\n  inverse: false,\n  flip: null,\n  icon: null,\n  listItem: false,\n  pull: null,\n  pulse: false,\n  rotation: null,\n  size: null,\n  spin: false,\n  symbol: false,\n  title: '',\n  transform: null\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\n","import invariant from 'invariant';\nimport {\n  isEmpty,\n  isFunction,\n  isString,\n} from 'lodash';\n\nimport {\n  checkStore,\n} from 'ats-utils/src';\nimport createReducer from '../../reducers';\nimport {\n  IStoreWithInjectedReducersAndSagas,\n  GenericReducer,\n  ReducerState,\n} from 'ats-utils/src/Interfaces';\n\nexport function injectReducerFactory(store: IStoreWithInjectedReducersAndSagas<ReducerState>, isValid: boolean) {\n  return function injectReducer(key: string, reducer: GenericReducer) {\n    if (!isValid) {\n      checkStore(store);\n    }\n\n    invariant(\n      isString(key) && !isEmpty(key) && isFunction(reducer),\n      '(app/utils...) injectReducer: Expected `reducer` to be a reducer function'\n    );\n\n    // Check `store.injectedReducers[key] === reducer` for hot reloading when a key is the same but a reducer is different\n    if (Reflect.has(store.injectedReducers, key) && store.injectedReducers[key] === reducer) {\n      return;\n    }\n\n    store.injectedReducers[key] = reducer; // eslint-disable-line no-param-reassign\n    store.replaceReducer(\n      createReducer(\n        store.injectedReducers\n      )\n    );\n  };\n}\n\nexport default function getInjectors(store: IStoreWithInjectedReducersAndSagas<ReducerState>) {\n  checkStore(store);\n\n  return {\n    injectReducer: injectReducerFactory(store, true),\n  };\n}\n","import * as React from 'react';\nimport hoistNonReactStatics1 from 'hoist-non-react-statics';\nimport * as hoistNonReactStatics2 from 'hoist-non-react-statics';\n\nimport StoreContext from '../../contexts/StoreContext';\n\nimport getInjectors from '../reducerInjectors';\nimport {\n  isFunction\n} from 'lodash';\n\nconst hoistNonReactStatics: any = isFunction(hoistNonReactStatics1) ? hoistNonReactStatics1 : hoistNonReactStatics2;\n/**\n * Dynamically injects a reducer\n *\n * @param {string} key A key of the reducer\n * @param {function} reducer A reducer that will be injected\n *\n */\nexport default ({\n  key,\n  reducer,\n}: {\n  key: string;\n  reducer: any;\n}) => (WrappedComponent: React.ComponentType<any>) => {\n  const ReducerInjector = (props) => {\n    const WrappedComponent_ = WrappedComponent;\n    const contextType = StoreContext;\n    const context = React.useContext(contextType);\n    const injectors = getInjectors(context);\n\n    const getKey = () => {\n      return isFunction(key) ? key(props) : key;\n    };\n\n    useWillMount(() => {\n      const { injectReducer } = injectors;\n      injectReducer(getKey(), reducer);\n    });\n\n    return <WrappedComponent_ {...props} />;\n  };\n\n  return hoistNonReactStatics(ReducerInjector, WrappedComponent);\n};\n\nexport const useWillMount = (fn) => {\n  const willMount = React.useRef(true);\n\n  if (willMount.current && fn && typeof fn === 'function') {\n    fn();\n  }\n\n  willMount.current = false;\n};","export const RESTART_ON_REMOUNT = '@@saga-injector/restart-on-remount';\nexport const DAEMON = '@@saga-injector/daemon';\nexport const ONCE_TILL_UNMOUNT = '@@saga-injector/once-till-unmount';\n","import invariant from 'invariant';\nimport {\n  isEmpty,\n  isFunction,\n  isString,\n  conformsTo,\n} from 'lodash';\n\nimport {\n  IDescriptor,\n  IStoreWithInjectedReducersAndSagas,\n  ReducerState,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  checkStore,\n} from 'ats-utils/src';\n\nimport {\n  DAEMON,\n  ONCE_TILL_UNMOUNT,\n  RESTART_ON_REMOUNT,\n} from './constants';\n\nconst allowedModes: string[] = [RESTART_ON_REMOUNT, DAEMON, ONCE_TILL_UNMOUNT];\n\nconst checkKey = (key: string) => invariant(\n  isString(key) && !isEmpty(key),\n  '(app/utils...) injectSaga: Expected `key` to be a non empty string'\n);\n\nconst checkDescriptor = (descriptor: IDescriptor) => {\n  const shape = {\n    saga: isFunction,\n    mode: (mode: string) => isString(mode) && (allowedModes.indexOf(mode) !== -1),\n  };\n\n  invariant(\n    conformsTo(descriptor, shape),\n    '(app/utils...) injectSaga: Expected a valid saga descriptor'\n  );\n};\n\nexport function injectSagaFactory(store: IStoreWithInjectedReducersAndSagas<ReducerState>, isValid: boolean) {\n  return function injectSaga(key: string, descriptor: IDescriptor = {}, args: any) {\n    if (!isValid) {\n      checkStore(store);\n    }\n\n    const newDescriptor = { ...descriptor, mode: descriptor.mode || RESTART_ON_REMOUNT };\n    const { saga, mode } = newDescriptor;\n\n    checkKey(key);\n    checkDescriptor(newDescriptor);\n\n    let hasSaga = Reflect.has(store.injectedSagas, key);\n\n    if (process.env.NODE_ENV !== 'production') {\n      const oldDescriptor = store.injectedSagas[key];\n      // enable hot reloading of daemon and once-till-unmount sagas\n\n      if (hasSaga && oldDescriptor.saga !== saga) {\n        oldDescriptor.task.cancel();\n        hasSaga = false;\n      }\n    }\n\n    if (!hasSaga || (hasSaga && mode !== DAEMON && mode !== ONCE_TILL_UNMOUNT)) {\n      store.injectedSagas[key] = { ...newDescriptor, task: store.runSaga(saga, args) }; // eslint-disable-line no-param-reassign\n    }\n  };\n}\n\nexport function ejectSagaFactory(store: IStoreWithInjectedReducersAndSagas<ReducerState>, isValid: boolean) {\n  return function ejectSaga(key: string) {\n    if (!isValid) {\n      checkStore(store);\n    }\n\n    checkKey(key);\n\n    if (Reflect.has(store.injectedSagas, key)) {\n      const descriptor = store.injectedSagas[key];\n\n      if (descriptor.mode && descriptor.mode !== DAEMON) {\n        descriptor.task.cancel();\n        // Clean up in production; in development we need `descriptor.saga` for hot reloading\n        if (process.env.NODE_ENV === 'production') {\n          // Need some value to be able to detect `ONCE_TILL_UNMOUNT` sagas in `injectSaga`\n          store.injectedSagas[key] = 'done'; // eslint-disable-line no-param-reassign\n        }\n      }\n    }\n  };\n}\n\nexport default function getInjectors(store: IStoreWithInjectedReducersAndSagas<ReducerState>) {\n  checkStore(store);\n\n  return {\n    injectSaga: injectSagaFactory(store, true),\n    ejectSaga: ejectSagaFactory(store, true),\n  };\n}\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport hoistNonReactStatics1 from 'hoist-non-react-statics';\nimport * as hoistNonReactStatics2 from 'hoist-non-react-statics';\n\nimport StoreContext from '../../contexts/StoreContext';\n\nimport getInjectors from '../sagaInjectors';\nimport {\n  isFunction\n} from 'lodash';\n\nconst hoistNonReactStatics: any = isFunction(hoistNonReactStatics1) ? hoistNonReactStatics1 : hoistNonReactStatics2;\nimport { GenericSaga } from 'ats-utils/src/Interfaces';\n\n/**\n * Dynamically injects a saga, passes component's props as saga arguments\n *\n * @param {string} key A key of the saga\n * @param {function} saga A root saga that will be injected\n * @param {string} [mode] By default (constants.RESTART_ON_REMOUNT) the saga will be started on component mount and\n * cancelled with `task.cancel()` on component un-mount for improved performance. Another two options:\n *   - constants.DAEMON—starts the saga on component mount and never cancels it or starts again,\n *   - constants.ONCE_TILL_UNMOUNT—behaves like 'RESTART_ON_REMOUNT' but never runs it again.\n *\n */\nexport default ({\n  key,\n  saga,\n  mode,\n}: {\n  key: string;\n  saga: GenericSaga;\n  mode?: string;\n}) => (WrappedComponent: React.ComponentType<any>) => {\n  const InjectSaga = (props) => {\n    const WrappedComponent_ = WrappedComponent;\n    const contextType = StoreContext;\n    const context = React.useContext(contextType);\n    const injectors = getInjectors(context);\n    const getKey = () => {\n      return isFunction(key) ? key(props) : key;\n    };\n\n    useWillMount(() => {\n      const { injectSaga } = injectors;\n\n      injectSaga(getKey(), { saga, mode }, props);\n    });\n\n    React.useEffect(() => {\n      return () => {\n        const { ejectSaga } = injectors;\n\n        ejectSaga(getKey());\n      };\n    }, []);\n\n    return <WrappedComponent {...props} />;\n  };\n\n  return hoistNonReactStatics(InjectSaga, WrappedComponent);\n};\n\nexport const useWillMount = (fn) => {\n  const willMount = React.useRef(true);\n\n  if (willMount.current && fn && typeof fn === 'function') {\n    fn();\n  }\n\n  willMount.current = false;\n};","\nimport { Map, fromJS } from 'immutable';\nimport { Tree } from 'redux-react-local';\nimport Store from '../../store';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\nimport { ReducerState } from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT as ATS_REDUCER_MOUNT_POINT,\n} from '../../modules/AtsModule/constants';\n// import {\n//   DEFAULT_MOUNT_POINT as DEBUG_REDUCER_MOUNT_POINT,\n// } from '../../modules/DebugModule/constants';\n\n// custom serialize method to serialize state into localstorage:\n// need to prevent circular json errors from schema\nexport const serialize2 = (storage: any) => {\n  const serializedState = {\n    ...storage,\n    put: (key: string, state: ReducerState, callback: any) => {\n      // console.debug('state', state);\n      storage.put(\n        key,\n        Map<string, any>().withMutations((stateCtx) => {\n          state.keySeq().forEach((stateKey: string) => {\n            const subState = state.get(stateKey);\n\n            // check for floppy emoji 💾\n            // save if found\n            const rx = '\\u{1F4BE}';\n            const res = stateKey.match(rx);\n            const matchesFloppy = res != null;\n            let transformed;\n            switch (stateKey) {\n              // case 'local': {\n              //   transformed = serializeLocal(subState);\n              //   break;\n              // }\n              case ATS_REDUCER_MOUNT_POINT: {\n                transformed = subState.withMutations((ctx) => {\n                  ctx.set('data', Map<string, any>());\n                  ctx.set('dataParams', Map<string, any>());\n                });\n                break;\n              }\n              case matchesFloppy ? stateKey : null:\n              case Store.get('reducerNamespace'): {\n                transformed = subState;\n                break;\n              }\n              case 'form': {\n                transformed = serializeForm(subState);\n                break;\n              }\n              default:\n                break;\n            }\n            if (transformed != null) {\n              stateCtx.set(stateKey, transformed);\n            }\n          });\n        }).toJS(),\n        callback\n      );\n    },\n  };\n  return serializedState;\n};\n\n// deserialize string from localStorage and merge with state.\n// only merge keys that already exist in given state\nexport const deserialize2 = (state = Map<string, any>(), payload: string) => {\n  try {\n    const parsedPayload = fromJS(payload);\n    const mapped = state.mapEntries(([k]: string[]) => {\n      let entryPayload = parsedPayload.get(k);\n\n      switch (k) {\n        // case 'local': {\n        //   transformed = serializeLocal(subState);\n        //   break;\n        // }\n        case 'form': {\n          entryPayload = deserializeForm(entryPayload);\n        }\n        break;\n        default:\n          break;\n      }\n      // [k, k === 'local' ? deserializeLocal(parsedPayload.get(k)) : parsedPayload.get(k)]\n      return [k, entryPayload];\n    });\n    // console.error('test', {\n    //   payload,\n    //   parsedPayload,\n    //   mapped,\n    // });\n    return mapped;\n  } catch (e) {\n    console.debug('failed to load persisted state:', {\n      e,\n      state,\n      payload,\n    });\n  }\n  return state;\n};\n\nconst serializeForm = (localState: any) => {\n  return safeStringify(localState.delete('quote').toJS());\n};\n\nconst deserializeForm = (serializedFormState: any) => {\n  return fromJS(JSON.parse(serializedFormState));\n};\n\n// serialize redux-react-local tree\nconst serializeLocal = (localState: any) =>\n  ({\n    $$changed: Tree.entries(localState.$$changed),\n    $$fns: Tree.entries(localState.$$fns),\n    $$tree: Tree.entries(localState.$$tree),\n  });\n\n\n// deserialize redux-react-local tree\nconst deserializeLocal = (serializedLocalState: any) => {\n  const localState = fromJS(serializedLocalState);\n\n  return {\n    $$changed: localState.get('$$changed').reduce((tree: any, entry: any) =>\n      Tree.set(tree, entry.get(0), entry.get(1)),\n    Tree.make()),\n    $$fns: localState.get('$$fns').reduce((tree: any, entry: any) =>\n      Tree.set(tree, entry.get(0), entry.get(1)),\n    Tree.make()),\n    $$tree: localState.get('$$tree').reduce((tree: any, entry: any) =>\n      Tree.set(tree, entry.get(0), entry.get(1)),\n    Tree.make()),\n  };\n};\n","import {\n  default as fetchWithDefaultHeadersAndToken,\n  request,\n} from './fetchWithDefaultHeadersAndToken';\n\nimport {\n  default as injectReducer,\n} from './injectReducer';\n\nimport {\n  default as injectSaga,\n} from './injectSaga';\n\nimport {\n  serialize2,\n  deserialize2,\n} from './serialization';\n\nimport { camelizeString } from './camelizeString';\nimport {\n  parseFormula,\n  parseFormulaFields,\n} from './parseFormulaFields';\nimport { uniqueId } from './uniqueId';\n\nimport {\n  TOUR_TRIGGER_KEY,\n  TourTriggerValue,\n  setUsetifulTags,\n} from './setUsetifulTags';\n\nexport {\n  fetchWithDefaultHeadersAndToken,\n  request,\n  injectReducer,\n  injectSaga,\n  serialize2,\n  deserialize2,\n  camelizeString,\n  parseFormula,\n  parseFormulaFields,\n  TOUR_TRIGGER_KEY,\n  TourTriggerValue,\n  setUsetifulTags,\n  uniqueId,\n};\n\nexport default {\n  fetchWithDefaultHeadersAndToken,\n  request,\n  injectReducer,\n  injectSaga,\n  serialize2,\n  deserialize2\n};\n","/* Created by Tianxiao Deng\n* YOU HAVE TO KEEP IN MIND!\n* -----------------------------------------------------------------------------------\n* Convert date to local date when pass into KeyboardDatePicker\n* Convert local date to UTC date when passing back to redux-form\n* ------------------------------------------------------------------------------------\n* */\n\nimport * as React from 'react';\nimport {\n  FocusEvent,\n  useCallback\n} from 'react';\nimport {\n  FormControl,\n  FormHelperText,\n  useTheme,\n} from '@material-ui/core';\nimport {\n  KeyboardDatePicker,\n  MuiPickersUtilsProvider,\n} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\nimport CalendarTodayRoundedIcon from '@material-ui/icons/CalendarTodayRounded';\nimport ChevronLeftRoundedIcon from '@material-ui/icons/ChevronLeftRounded';\nimport ChevronRightRoundedIcon from '@material-ui/icons/ChevronRightRounded';\nimport moment, { Moment } from 'moment';\nimport {\n  DATE_TYPE,\n  FieldDatePickerV2Props,\n  INPUT_TYPE,\n  TimeOfDay\n} from './types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport * as momentTimeZone from 'moment-timezone';\nimport classnames from 'classnames';\n\nexport const removeTZ = (dateTime: string = '') => {\n  if (!dateTime) {\n    return dateTime;\n  }\n  return dateTime.replace('T', ' ').slice(0, 19);\n};\n\nconst MASKCHAR = '_';\n\nconst useStyles = makeStyles((theme) => ({\n  primaryColor: {\n    color: theme.palette.warning.dark,\n  }\n}));\n// A Helper function to convert Moment date object's timezone\nconst convertDateToISO = (date: Moment, timeOfDay: TimeOfDay, dateType: DATE_TYPE) => {\n  if (date === null || !date.isValid()) {\n    return date;\n  }\n  const now = new Date();\n  // date is local time\n  switch (timeOfDay) {\n    case 'current':\n      date\n        .hours(now.getHours())\n        .minutes(now.getMinutes())\n        .seconds(now.getSeconds())\n        .milliseconds(now.getMilliseconds());\n      break;\n    case 'start':\n      // set local date to the start of local date, Tips: Moment takes care of daylight time for us, WOW!!\n      if (dateType === DATE_TYPE.yearMonth) {\n        date.startOf('month');\n      }\n      date.startOf('day');\n      break;\n    case 'end':\n      if (dateType === DATE_TYPE.yearMonth) {\n        date.endOf('month');\n      }\n      date.endOf('day');\n  }\n  return date.toISOString(); // Convert local time to UTC time\n};\nconst FieldDatePickerV2: React.FC<FieldDatePickerV2Props> = (props) => {\n  const {\n    /**** If form value is null, input.value would be '', this is default behavior of redux-form.******/\n    input,\n    meta,\n    formControlProps = {}, // override formControl props\n    formHelperProps = {}, // override formHelper props\n    keyboardDatePickerProps = {}, // override keyboardDatePicker\n    timeOfDay = 'current',\n    dateType = DATE_TYPE.yearMonthDay,\n    timezone,\n    onChangeCB,\n  } = props;\n\n  const theme = useTheme();\n  const classes = useStyles(theme);\n  const handleChange = useCallback((date: Moment | null) => {\n    input.onChange(convertDateToISO(date && timezone ? momentTimeZone(date).tz(timezone) : date, timeOfDay, dateType)); // because KeyboardDatePicker doesn't set HH:MM:SS and millisecond for us, we need to do it ourselves\n    if (onChangeCB) {\n      onChangeCB();\n    }\n  }, [input.onChange]);\n  const handleBlur = useCallback((e: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n    const date: Moment = timezone ? momentTimeZone(input.value).tz(timezone) : moment(input.value);\n    if (date.isValid()) {\n      input.onBlur(date.toISOString());\n    }\n  }, [input.onBlur, input.value]);\n\n  const errorMessage: string = meta.error;\n  const warningMessage: string = meta.warning;\n  const showError: boolean = (meta.active || meta.touched) && Boolean(errorMessage);\n  const showWarning: boolean = (meta.active || meta.touched) && !Boolean(errorMessage) && Boolean(warningMessage);\n  let formHelperContent: string = null;\n  if (showError) {\n    formHelperContent = meta.error;\n  } else if (showWarning) {\n    formHelperContent = meta.warning;\n  }\n  const {clearable = true} = keyboardDatePickerProps;\n  return (\n    <FormControl error={showError} aria-describedby='helper-text' {...formControlProps} >\n      <MuiPickersUtilsProvider\n        utils={MomentUtils}\n      >\n        <KeyboardDatePicker\n          // Props which can't accepted by KeyboardDatePicker are going to be passed to Material UI TextField component wrapped by KeyboardDatePicker\n          format={INPUT_TYPE[dateType].format}\n          mask={INPUT_TYPE[dateType].mask}\n          maskChar={MASKCHAR}\n          // labelFunc={renderLabel}\n          leftArrowIcon={<ChevronLeftRoundedIcon fontSize='large'/>}\n          rightArrowIcon={<ChevronRightRoundedIcon fontSize='large'/>}\n          keyboardIcon={<CalendarTodayRoundedIcon/>}\n          value={\n            input.value\n              ? timezone\n                  ? momentTimeZone(input.value).tz(timezone)\n                  : moment(input.value)\n              : null\n          } // convert date to local time\n          onChange={handleChange}\n\n          // Props passed down to TextField\n          name={input.name}\n          InputLabelProps={{\n            className: classnames({[classes.primaryColor]: showWarning})\n          }}\n          onBlur={handleBlur}\n          onFocus={input.onFocus}\n\n          error={showError}\n          clearable={clearable}\n          // We use FormHelperText to show error message, prevent TextField from accepting error message and use it's own FormHelperText\n          helperText={null}\n\n          {...keyboardDatePickerProps}\n        />\n        <FormHelperText id='helper-text' error={showError} className={classnames({[classes.primaryColor]: showWarning})} {...formHelperProps}>\n          {formHelperContent}\n        </FormHelperText>\n      </MuiPickersUtilsProvider>\n    </FormControl>\n  );\n};\n\n\nexport default FieldDatePickerV2;\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport { fade } from '../styles/colorManipulator';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      minWidth: 64,\n      padding: '6px 16px',\n      borderRadius: theme.shape.borderRadius,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n        duration: theme.transitions.duration.short\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: fade(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        },\n        '&$disabled': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }),\n\n    /* Styles applied to the span element that wraps the children. */\n    label: {\n      width: '100%',\n      // Ensure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"`. */\n    text: {\n      padding: '6px 8px'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n    textPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n    textSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      padding: '5px 15px',\n      border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabled)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n    outlinedPrimary: {\n      color: theme.palette.primary.main,\n      border: \"1px solid \".concat(fade(theme.palette.primary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.primary.main),\n        backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n    outlinedSecondary: {\n      color: theme.palette.secondary.main,\n      border: \"1px solid \".concat(fade(theme.palette.secondary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.secondary.main),\n        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabled)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"`. */\n    contained: {\n      color: theme.palette.getContrastText(theme.palette.grey[300]),\n      backgroundColor: theme.palette.grey[300],\n      boxShadow: theme.shadows[2],\n      '&:hover': {\n        backgroundColor: theme.palette.grey.A100,\n        boxShadow: theme.shadows[4],\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          boxShadow: theme.shadows[2],\n          backgroundColor: theme.palette.grey[300]\n        },\n        '&$disabled': {\n          backgroundColor: theme.palette.action.disabledBackground\n        }\n      },\n      '&$focusVisible': {\n        boxShadow: theme.shadows[6]\n      },\n      '&:active': {\n        boxShadow: theme.shadows[8]\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled,\n        boxShadow: theme.shadows[0],\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"primary\"`. */\n    containedPrimary: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.primary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"secondary\"`. */\n    containedSecondary: {\n      color: theme.palette.secondary.contrastText,\n      backgroundColor: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.secondary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.secondary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `disableElevation={true}`. */\n    disableElevation: {\n      boxShadow: 'none',\n      '&:hover': {\n        boxShadow: 'none'\n      },\n      '&$focusVisible': {\n        boxShadow: 'none'\n      },\n      '&:active': {\n        boxShadow: 'none'\n      },\n      '&$disabled': {\n        boxShadow: 'none'\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n    focusVisible: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit',\n      borderColor: 'currentColor'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"text\"`. */\n    textSizeSmall: {\n      padding: '4px 5px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"text\"`. */\n    textSizeLarge: {\n      padding: '8px 11px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"outlined\"`. */\n    outlinedSizeSmall: {\n      padding: '3px 9px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"outlined\"`. */\n    outlinedSizeLarge: {\n      padding: '7px 21px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"contained\"`. */\n    containedSizeSmall: {\n      padding: '4px 10px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"contained\"`. */\n    containedSizeLarge: {\n      padding: '8px 22px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {},\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the startIcon element if supplied. */\n    startIcon: {\n      display: 'inherit',\n      marginRight: 8,\n      marginLeft: -4,\n      '&$iconSizeSmall': {\n        marginLeft: -2\n      }\n    },\n\n    /* Styles applied to the endIcon element if supplied. */\n    endIcon: {\n      display: 'inherit',\n      marginRight: -4,\n      marginLeft: 8,\n      '&$iconSizeSmall': {\n        marginRight: -2\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"small\"`. */\n    iconSizeSmall: {\n      '& > *:first-child': {\n        fontSize: 18\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"medium\"`. */\n    iconSizeMedium: {\n      '& > *:first-child': {\n        fontSize: 20\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"large\"`. */\n    iconSizeLarge: {\n      '& > *:first-child': {\n        fontSize: 22\n      }\n    }\n  };\n};\nvar Button = React.forwardRef(function Button(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableElevati = props.disableElevation,\n      disableElevation = _props$disableElevati === void 0 ? false : _props$disableElevati,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      endIconProp = props.endIcon,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      startIconProp = props.startIcon,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'text' : _props$variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"disableElevation\", \"disableFocusRipple\", \"endIcon\", \"focusVisibleClassName\", \"fullWidth\", \"size\", \"startIcon\", \"type\", \"variant\"]);\n\n  var startIcon = startIconProp && React.createElement(\"span\", {\n    className: clsx(classes.startIcon, classes[\"iconSize\".concat(capitalize(size))])\n  }, startIconProp);\n  var endIcon = endIconProp && React.createElement(\"span\", {\n    className: clsx(classes.endIcon, classes[\"iconSize\".concat(capitalize(size))])\n  }, endIconProp);\n  return React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, classes[variant], className, color === 'inherit' ? classes.colorInherit : color !== 'default' && classes[\"\".concat(variant).concat(capitalize(color))], size !== 'medium' && [classes[\"\".concat(variant, \"Size\").concat(capitalize(size))], classes[\"size\".concat(capitalize(size))]], disableElevation && classes.disableElevation, disabled && classes.disabled, fullWidth && classes.fullWidth),\n    component: component,\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type\n  }, other), React.createElement(\"span\", {\n    className: classes.label\n  }, startIcon, children, endIcon));\n});\nprocess.env.NODE_ENV !== \"production\" ? Button.propTypes = {\n  /**\n   * The content of the button.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, no elevation is used.\n   */\n  disableElevation: PropTypes.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   * `disableRipple` must also be true.\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * Element placed after the children.\n   */\n  endIcon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * If `true`, the button will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: PropTypes.string,\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n  /**\n   * Element placed before the children.\n   */\n  startIcon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  type: PropTypes.string,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['text', 'outlined', 'contained'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiButton'\n})(Button);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementAcceptingRef } from '@material-ui/utils';\nimport { fade } from '../styles/colorManipulator';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport Grow from '../Grow';\nimport Popper from '../Popper';\nimport useForkRef from '../utils/useForkRef';\nimport setRef from '../utils/setRef';\nimport { useIsFocusVisible } from '../utils/focusVisible';\nimport useControlled from '../utils/useControlled';\nimport useTheme from '../styles/useTheme';\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nfunction arrowGenerator() {\n  return {\n    '&[x-placement*=\"bottom\"] $arrow': {\n      flip: false,\n      top: 0,\n      left: 0,\n      marginTop: '-0.95em',\n      marginLeft: 4,\n      marginRight: 4,\n      width: '2em',\n      height: '1em',\n      '&::before': {\n        flip: false,\n        borderWidth: '0 1em 1em 1em',\n        borderColor: 'transparent transparent currentcolor transparent'\n      }\n    },\n    '&[x-placement*=\"top\"] $arrow': {\n      flip: false,\n      bottom: 0,\n      left: 0,\n      marginBottom: '-0.95em',\n      marginLeft: 4,\n      marginRight: 4,\n      width: '2em',\n      height: '1em',\n      '&::before': {\n        flip: false,\n        borderWidth: '1em 1em 0 1em',\n        borderColor: 'currentcolor transparent transparent transparent'\n      }\n    },\n    '&[x-placement*=\"right\"] $arrow': {\n      flip: false,\n      left: 0,\n      marginLeft: '-0.95em',\n      marginTop: 4,\n      marginBottom: 4,\n      height: '2em',\n      width: '1em',\n      '&::before': {\n        flip: false,\n        borderWidth: '1em 1em 1em 0',\n        borderColor: 'transparent currentcolor transparent transparent'\n      }\n    },\n    '&[x-placement*=\"left\"] $arrow': {\n      flip: false,\n      right: 0,\n      marginRight: '-0.95em',\n      marginTop: 4,\n      marginBottom: 4,\n      height: '2em',\n      width: '1em',\n      '&::before': {\n        flip: false,\n        borderWidth: '1em 0 1em 1em',\n        borderColor: 'transparent transparent transparent currentcolor'\n      }\n    }\n  };\n}\n\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the Popper component. */\n    popper: {\n      zIndex: theme.zIndex.tooltip,\n      pointerEvents: 'none',\n      flip: false // disable jss-rtl plugin\n\n    },\n\n    /* Styles applied to the Popper component if `interactive={true}`. */\n    popperInteractive: {\n      pointerEvents: 'auto'\n    },\n\n    /* Styles applied to the Popper component if `arrow={true}`. */\n    popperArrow: arrowGenerator(),\n\n    /* Styles applied to the tooltip (label wrapper) element. */\n    tooltip: {\n      backgroundColor: fade(theme.palette.grey[700], 0.9),\n      borderRadius: theme.shape.borderRadius,\n      color: theme.palette.common.white,\n      fontFamily: theme.typography.fontFamily,\n      padding: '4px 8px',\n      fontSize: theme.typography.pxToRem(10),\n      lineHeight: \"\".concat(round(14 / 10), \"em\"),\n      maxWidth: 300,\n      wordWrap: 'break-word',\n      fontWeight: theme.typography.fontWeightMedium\n    },\n\n    /* Styles applied to the tooltip (label wrapper) element if `arrow={true}`. */\n    tooltipArrow: {\n      position: 'relative',\n      margin: '0'\n    },\n\n    /* Styles applied to the arrow element. */\n    arrow: {\n      position: 'absolute',\n      fontSize: 6,\n      color: fade(theme.palette.grey[700], 0.9),\n      '&::before': {\n        content: '\"\"',\n        margin: 'auto',\n        display: 'block',\n        width: 0,\n        height: 0,\n        borderStyle: 'solid'\n      }\n    },\n\n    /* Styles applied to the tooltip (label wrapper) element if the tooltip is opened by touch. */\n    touch: {\n      padding: '8px 16px',\n      fontSize: theme.typography.pxToRem(14),\n      lineHeight: \"\".concat(round(16 / 14), \"em\"),\n      fontWeight: theme.typography.fontWeightRegular\n    },\n\n    /* Styles applied to the tooltip (label wrapper) element if `placement` contains \"left\". */\n    tooltipPlacementLeft: _defineProperty({\n      transformOrigin: 'right center',\n      margin: '0 24px '\n    }, theme.breakpoints.up('sm'), {\n      margin: '0 14px'\n    }),\n\n    /* Styles applied to the tooltip (label wrapper) element if `placement` contains \"right\". */\n    tooltipPlacementRight: _defineProperty({\n      transformOrigin: 'left center',\n      margin: '0 24px'\n    }, theme.breakpoints.up('sm'), {\n      margin: '0 14px'\n    }),\n\n    /* Styles applied to the tooltip (label wrapper) element if `placement` contains \"top\". */\n    tooltipPlacementTop: _defineProperty({\n      transformOrigin: 'center bottom',\n      margin: '24px 0'\n    }, theme.breakpoints.up('sm'), {\n      margin: '14px 0'\n    }),\n\n    /* Styles applied to the tooltip (label wrapper) element if `placement` contains \"bottom\". */\n    tooltipPlacementBottom: _defineProperty({\n      transformOrigin: 'center top',\n      margin: '24px 0'\n    }, theme.breakpoints.up('sm'), {\n      margin: '14px 0'\n    })\n  };\n};\nvar hystersisOpen = false;\nvar hystersisTimer = null;\nexport function testReset() {\n  hystersisOpen = false;\n  clearTimeout(hystersisTimer);\n}\nvar Tooltip = React.forwardRef(function Tooltip(props, ref) {\n  var _props$arrow = props.arrow,\n      arrow = _props$arrow === void 0 ? false : _props$arrow,\n      children = props.children,\n      classes = props.classes,\n      _props$disableFocusLi = props.disableFocusListener,\n      disableFocusListener = _props$disableFocusLi === void 0 ? false : _props$disableFocusLi,\n      _props$disableHoverLi = props.disableHoverListener,\n      disableHoverListener = _props$disableHoverLi === void 0 ? false : _props$disableHoverLi,\n      _props$disableTouchLi = props.disableTouchListener,\n      disableTouchListener = _props$disableTouchLi === void 0 ? false : _props$disableTouchLi,\n      _props$enterDelay = props.enterDelay,\n      enterDelay = _props$enterDelay === void 0 ? 0 : _props$enterDelay,\n      _props$enterTouchDela = props.enterTouchDelay,\n      enterTouchDelay = _props$enterTouchDela === void 0 ? 700 : _props$enterTouchDela,\n      idProp = props.id,\n      _props$interactive = props.interactive,\n      interactive = _props$interactive === void 0 ? false : _props$interactive,\n      _props$leaveDelay = props.leaveDelay,\n      leaveDelay = _props$leaveDelay === void 0 ? 0 : _props$leaveDelay,\n      _props$leaveTouchDela = props.leaveTouchDelay,\n      leaveTouchDelay = _props$leaveTouchDela === void 0 ? 1500 : _props$leaveTouchDela,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      openProp = props.open,\n      _props$placement = props.placement,\n      placement = _props$placement === void 0 ? 'bottom' : _props$placement,\n      PopperProps = props.PopperProps,\n      title = props.title,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,\n      TransitionProps = props.TransitionProps,\n      other = _objectWithoutProperties(props, [\"arrow\", \"children\", \"classes\", \"disableFocusListener\", \"disableHoverListener\", \"disableTouchListener\", \"enterDelay\", \"enterTouchDelay\", \"id\", \"interactive\", \"leaveDelay\", \"leaveTouchDelay\", \"onClose\", \"onOpen\", \"open\", \"placement\", \"PopperProps\", \"title\", \"TransitionComponent\", \"TransitionProps\"]);\n\n  var theme = useTheme();\n\n  var _React$useState = React.useState(),\n      childNode = _React$useState[0],\n      setChildNode = _React$useState[1];\n\n  var _React$useState2 = React.useState(null),\n      arrowRef = _React$useState2[0],\n      setArrowRef = _React$useState2[1];\n\n  var ignoreNonTouchEvents = React.useRef(false);\n  var closeTimer = React.useRef();\n  var enterTimer = React.useRef();\n  var leaveTimer = React.useRef();\n  var touchTimer = React.useRef();\n\n  var _useControlled = useControlled({\n    controlled: openProp,\n    default: false,\n    name: 'Tooltip'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      openState = _useControlled2[0],\n      setOpenState = _useControlled2[1];\n\n  var open = openState;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    var _React$useRef = React.useRef(openProp !== undefined),\n        isControlled = _React$useRef.current; // eslint-disable-next-line react-hooks/rules-of-hooks\n\n\n    React.useEffect(function () {\n      if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {\n        console.error(['Material-UI: you are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', \"Tooltip needs to listen to the child element's events to display the title.\", '', 'Add a simple wrapper element, such as a `span`.'].join('\\n'));\n      }\n    }, [title, childNode, isControlled]);\n  }\n\n  var _React$useState3 = React.useState(),\n      defaultId = _React$useState3[0],\n      setDefaultId = _React$useState3[1];\n\n  var id = idProp || defaultId;\n  React.useEffect(function () {\n    if (!open || defaultId) {\n      return;\n    } // Fallback to this default id when possible.\n    // Use the random value for client-side rendering only.\n    // We can't use it server-side.\n\n\n    setDefaultId(\"mui-tooltip-\".concat(Math.round(Math.random() * 1e5)));\n  }, [open, defaultId]);\n  React.useEffect(function () {\n    return function () {\n      clearTimeout(closeTimer.current);\n      clearTimeout(enterTimer.current);\n      clearTimeout(leaveTimer.current);\n      clearTimeout(touchTimer.current);\n    };\n  }, []);\n\n  var handleOpen = function handleOpen(event) {\n    clearTimeout(hystersisTimer);\n    hystersisOpen = true; // The mouseover event will trigger for every nested element in the tooltip.\n    // We can skip rerendering when the tooltip is already open.\n    // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n\n    setOpenState(true);\n\n    if (onOpen) {\n      onOpen(event);\n    }\n  };\n\n  var handleEnter = function handleEnter(event) {\n    var childrenProps = children.props;\n\n    if (event.type === 'mouseover' && childrenProps.onMouseOver && event.currentTarget === childNode) {\n      childrenProps.onMouseOver(event);\n    }\n\n    if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {\n      return;\n    } // Remove the title ahead of time.\n    // We don't want to wait for the next render commit.\n    // We would risk displaying two tooltips at the same time (native + this one).\n\n\n    if (childNode) {\n      childNode.removeAttribute('title');\n    }\n\n    clearTimeout(enterTimer.current);\n    clearTimeout(leaveTimer.current);\n\n    if (enterDelay && !hystersisOpen) {\n      event.persist();\n      enterTimer.current = setTimeout(function () {\n        handleOpen(event);\n      }, enterDelay);\n    } else {\n      handleOpen(event);\n    }\n  };\n\n  var _useIsFocusVisible = useIsFocusVisible(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState4 = React.useState(false),\n      childIsFocusVisible = _React$useState4[0],\n      setChildIsFocusVisible = _React$useState4[1];\n\n  var handleBlur = function handleBlur() {\n    if (childIsFocusVisible) {\n      setChildIsFocusVisible(false);\n      onBlurVisible();\n    }\n  };\n\n  var handleFocus = function handleFocus(event) {\n    // Workaround for https://github.com/facebook/react/issues/7769\n    // The autoFocus of React might trigger the event before the componentDidMount.\n    // We need to account for this eventuality.\n    if (!childNode) {\n      setChildNode(event.currentTarget);\n    }\n\n    if (isFocusVisible(event)) {\n      setChildIsFocusVisible(true);\n      handleEnter(event);\n    }\n\n    var childrenProps = children.props;\n\n    if (childrenProps.onFocus && event.currentTarget === childNode) {\n      childrenProps.onFocus(event);\n    }\n  };\n\n  var handleClose = function handleClose(event) {\n    clearTimeout(hystersisTimer);\n    hystersisTimer = setTimeout(function () {\n      hystersisOpen = false;\n    }, 500); // Use 500 ms per https://github.com/reach/reach-ui/blob/3b5319027d763a3082880be887d7a29aee7d3afc/packages/tooltip/src/index.js#L214\n\n    setOpenState(false);\n\n    if (onClose) {\n      onClose(event);\n    }\n\n    clearTimeout(closeTimer.current);\n    closeTimer.current = setTimeout(function () {\n      ignoreNonTouchEvents.current = false;\n    }, theme.transitions.duration.shortest);\n  };\n\n  var handleLeave = function handleLeave(event) {\n    var childrenProps = children.props;\n\n    if (event.type === 'blur') {\n      if (childrenProps.onBlur && event.currentTarget === childNode) {\n        childrenProps.onBlur(event);\n      }\n\n      handleBlur(event);\n    }\n\n    if (event.type === 'mouseleave' && childrenProps.onMouseLeave && event.currentTarget === childNode) {\n      childrenProps.onMouseLeave(event);\n    }\n\n    clearTimeout(enterTimer.current);\n    clearTimeout(leaveTimer.current);\n    event.persist();\n    leaveTimer.current = setTimeout(function () {\n      handleClose(event);\n    }, leaveDelay);\n  };\n\n  var handleTouchStart = function handleTouchStart(event) {\n    ignoreNonTouchEvents.current = true;\n    var childrenProps = children.props;\n\n    if (childrenProps.onTouchStart) {\n      childrenProps.onTouchStart(event);\n    }\n\n    clearTimeout(leaveTimer.current);\n    clearTimeout(closeTimer.current);\n    clearTimeout(touchTimer.current);\n    event.persist();\n    touchTimer.current = setTimeout(function () {\n      handleEnter(event);\n    }, enterTouchDelay);\n  };\n\n  var handleTouchEnd = function handleTouchEnd(event) {\n    if (children.props.onTouchEnd) {\n      children.props.onTouchEnd(event);\n    }\n\n    clearTimeout(touchTimer.current);\n    clearTimeout(leaveTimer.current);\n    event.persist();\n    leaveTimer.current = setTimeout(function () {\n      handleClose(event);\n    }, leaveTouchDelay);\n  };\n\n  var handleUseRef = useForkRef(setChildNode, ref);\n  var handleFocusRef = useForkRef(focusVisibleRef, handleUseRef); // can be removed once we drop support for non ref forwarding class components\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    setRef(handleFocusRef, ReactDOM.findDOMNode(instance));\n  }, [handleFocusRef]);\n  var handleRef = useForkRef(children.ref, handleOwnRef); // There is no point in displaying an empty tooltip.\n\n  if (title === '') {\n    open = false;\n  } // For accessibility and SEO concerns, we render the title to the DOM node when\n  // the tooltip is hidden. However, we have made a tradeoff when\n  // `disableHoverListener` is set. This title logic is disabled.\n  // It's allowing us to keep the implementation size minimal.\n  // We are open to change the tradeoff.\n\n\n  var shouldShowNativeTitle = !open && !disableHoverListener;\n\n  var childrenProps = _extends({\n    'aria-describedby': open ? id : null,\n    title: shouldShowNativeTitle && typeof title === 'string' ? title : null\n  }, other, {}, children.props, {\n    className: clsx(other.className, children.props.className)\n  });\n\n  if (!disableTouchListener) {\n    childrenProps.onTouchStart = handleTouchStart;\n    childrenProps.onTouchEnd = handleTouchEnd;\n  }\n\n  if (!disableHoverListener) {\n    childrenProps.onMouseOver = handleEnter;\n    childrenProps.onMouseLeave = handleLeave;\n  }\n\n  if (!disableFocusListener) {\n    childrenProps.onFocus = handleFocus;\n    childrenProps.onBlur = handleLeave;\n  }\n\n  var interactiveWrapperListeners = interactive ? {\n    onMouseOver: childrenProps.onMouseOver,\n    onMouseLeave: childrenProps.onMouseLeave,\n    onFocus: childrenProps.onFocus,\n    onBlur: childrenProps.onBlur\n  } : {};\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (children.props.title) {\n      console.error(['Material-UI: you have provided a `title` prop to the child of <Tooltip />.', \"Remove this title prop `\".concat(children.props.title, \"` or the Tooltip component.\")].join('\\n'));\n    }\n  } // Avoid the creation of a new Popper.js instance at each render.\n\n\n  var popperOptions = React.useMemo(function () {\n    return {\n      modifiers: {\n        arrow: {\n          enabled: Boolean(arrowRef),\n          element: arrowRef\n        }\n      }\n    };\n  }, [arrowRef]);\n  return React.createElement(React.Fragment, null, React.cloneElement(children, _extends({\n    ref: handleRef\n  }, childrenProps)), React.createElement(Popper, _extends({\n    className: clsx(classes.popper, interactive && classes.popperInteractive, arrow && classes.popperArrow),\n    placement: placement,\n    anchorEl: childNode,\n    open: childNode ? open : false,\n    id: childrenProps['aria-describedby'],\n    transition: true,\n    popperOptions: popperOptions\n  }, interactiveWrapperListeners, PopperProps), function (_ref) {\n    var placementInner = _ref.placement,\n        TransitionPropsInner = _ref.TransitionProps;\n    return React.createElement(TransitionComponent, _extends({\n      timeout: theme.transitions.duration.shorter\n    }, TransitionPropsInner, TransitionProps), React.createElement(\"div\", {\n      className: clsx(classes.tooltip, classes[\"tooltipPlacement\".concat(capitalize(placementInner.split('-')[0]))], ignoreNonTouchEvents.current && classes.touch, arrow && classes.tooltipArrow)\n    }, title, arrow ? React.createElement(\"span\", {\n      className: classes.arrow,\n      ref: setArrowRef\n    }) : null));\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Tooltip.propTypes = {\n  /**\n   * If `true`, adds an arrow to the tooltip.\n   */\n  arrow: PropTypes.bool,\n\n  /**\n   * Tooltip reference element.\n   */\n  children: elementAcceptingRef.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * Do not respond to focus events.\n   */\n  disableFocusListener: PropTypes.bool,\n\n  /**\n   * Do not respond to hover events.\n   */\n  disableHoverListener: PropTypes.bool,\n\n  /**\n   * Do not respond to long press touch events.\n   */\n  disableTouchListener: PropTypes.bool,\n\n  /**\n   * The number of milliseconds to wait before showing the tooltip.\n   * This prop won't impact the enter touch delay (`enterTouchDelay`).\n   */\n  enterDelay: PropTypes.number,\n\n  /**\n   * The number of milliseconds a user must touch the element before showing the tooltip.\n   */\n  enterTouchDelay: PropTypes.number,\n\n  /**\n   * This prop is used to help implement the accessibility logic.\n   * If you don't provide this prop. It falls back to a randomly generated id.\n   */\n  id: PropTypes.string,\n\n  /**\n   * Makes a tooltip interactive, i.e. will not close when the user\n   * hovers over the tooltip before the `leaveDelay` is expired.\n   */\n  interactive: PropTypes.bool,\n\n  /**\n   * The number of milliseconds to wait before hiding the tooltip.\n   * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n   */\n  leaveDelay: PropTypes.number,\n\n  /**\n   * The number of milliseconds after the user stops touching an element before hiding the tooltip.\n   */\n  leaveTouchDelay: PropTypes.number,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be open.\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * If `true`, the tooltip is shown.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Tooltip placement.\n   */\n  placement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n\n  /**\n   * Props applied to the [`Popper`](/api/popper/) element.\n   */\n  PopperProps: PropTypes.object,\n\n  /**\n   * Tooltip title. Zero-length titles string are never displayed.\n   */\n  title: PropTypes.node.isRequired,\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTooltip'\n})(Tooltip);","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","import { __extends } from \"tslib\";\nimport { arrayAsString } from \"../utils\";\nvar MethodNotImplementedError = /** @class */ (function (_super) {\n    __extends(MethodNotImplementedError, _super);\n    function MethodNotImplementedError(className, methodName) {\n        var _this = this;\n        var msg = \"Method \" + className + \".\" + methodName + \"() not implemented\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MethodNotImplementedError;\n}(Error));\nexport { MethodNotImplementedError };\nvar PrivateConstructorError = /** @class */ (function (_super) {\n    __extends(PrivateConstructorError, _super);\n    function PrivateConstructorError(className) {\n        var _this = this;\n        var msg = \"Cannot construct \" + className + \" - it has a private constructor\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return PrivateConstructorError;\n}(Error));\nexport { PrivateConstructorError };\nvar UnexpectedObjectTypeError = /** @class */ (function (_super) {\n    __extends(UnexpectedObjectTypeError, _super);\n    function UnexpectedObjectTypeError(expected, actual) {\n        var _this = this;\n        var name = function (t) { var _a, _b; return (_a = t === null || t === void 0 ? void 0 : t.name) !== null && _a !== void 0 ? _a : (_b = t === null || t === void 0 ? void 0 : t.constructor) === null || _b === void 0 ? void 0 : _b.name; };\n        var expectedTypes = Array.isArray(expected)\n            ? expected.map(name)\n            : [name(expected)];\n        var msg = \"Expected instance of \" + expectedTypes.join(' or ') + \", \" +\n            (\"but got instance of \" + (actual ? name(actual) : actual));\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return UnexpectedObjectTypeError;\n}(Error));\nexport { UnexpectedObjectTypeError };\nvar UnsupportedEncodingError = /** @class */ (function (_super) {\n    __extends(UnsupportedEncodingError, _super);\n    function UnsupportedEncodingError(encoding) {\n        var _this = this;\n        var msg = encoding + \" stream encoding not supported\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return UnsupportedEncodingError;\n}(Error));\nexport { UnsupportedEncodingError };\nvar ReparseError = /** @class */ (function (_super) {\n    __extends(ReparseError, _super);\n    function ReparseError(className, methodName) {\n        var _this = this;\n        var msg = \"Cannot call \" + className + \".\" + methodName + \"() more than once\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return ReparseError;\n}(Error));\nexport { ReparseError };\nvar MissingCatalogError = /** @class */ (function (_super) {\n    __extends(MissingCatalogError, _super);\n    function MissingCatalogError(ref) {\n        var _this = this;\n        var msg = \"Missing catalog (ref=\" + ref + \")\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MissingCatalogError;\n}(Error));\nexport { MissingCatalogError };\nvar MissingPageContentsEmbeddingError = /** @class */ (function (_super) {\n    __extends(MissingPageContentsEmbeddingError, _super);\n    function MissingPageContentsEmbeddingError() {\n        var _this = this;\n        var msg = \"Can't embed page with missing Contents\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MissingPageContentsEmbeddingError;\n}(Error));\nexport { MissingPageContentsEmbeddingError };\nvar UnrecognizedStreamTypeError = /** @class */ (function (_super) {\n    __extends(UnrecognizedStreamTypeError, _super);\n    function UnrecognizedStreamTypeError(stream) {\n        var _a, _b, _c;\n        var _this = this;\n        var streamType = (_c = (_b = (_a = stream === null || stream === void 0 ? void 0 : stream.contructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : stream === null || stream === void 0 ? void 0 : stream.name) !== null && _c !== void 0 ? _c : stream;\n        var msg = \"Unrecognized stream type: \" + streamType;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return UnrecognizedStreamTypeError;\n}(Error));\nexport { UnrecognizedStreamTypeError };\nvar PageEmbeddingMismatchedContextError = /** @class */ (function (_super) {\n    __extends(PageEmbeddingMismatchedContextError, _super);\n    function PageEmbeddingMismatchedContextError() {\n        var _this = this;\n        var msg = \"Found mismatched contexts while embedding pages. All pages in the array passed to `PDFDocument.embedPages()` must be from the same document.\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return PageEmbeddingMismatchedContextError;\n}(Error));\nexport { PageEmbeddingMismatchedContextError };\nvar PDFArrayIsNotRectangleError = /** @class */ (function (_super) {\n    __extends(PDFArrayIsNotRectangleError, _super);\n    function PDFArrayIsNotRectangleError(size) {\n        var _this = this;\n        var msg = \"Attempted to convert PDFArray with \" + size + \" elements to rectangle, but must have exactly 4 elements.\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return PDFArrayIsNotRectangleError;\n}(Error));\nexport { PDFArrayIsNotRectangleError };\nvar InvalidPDFDateStringError = /** @class */ (function (_super) {\n    __extends(InvalidPDFDateStringError, _super);\n    function InvalidPDFDateStringError(value) {\n        var _this = this;\n        var msg = \"Attempted to convert \\\"\" + value + \"\\\" to a date, but it does not match the PDF date string format.\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return InvalidPDFDateStringError;\n}(Error));\nexport { InvalidPDFDateStringError };\nvar InvalidTargetIndexError = /** @class */ (function (_super) {\n    __extends(InvalidTargetIndexError, _super);\n    function InvalidTargetIndexError(targetIndex, Count) {\n        var _this = this;\n        var msg = \"Invalid targetIndex specified: targetIndex=\" + targetIndex + \" must be less than Count=\" + Count;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return InvalidTargetIndexError;\n}(Error));\nexport { InvalidTargetIndexError };\nvar CorruptPageTreeError = /** @class */ (function (_super) {\n    __extends(CorruptPageTreeError, _super);\n    function CorruptPageTreeError(targetIndex, operation) {\n        var _this = this;\n        var msg = \"Failed to \" + operation + \" at targetIndex=\" + targetIndex + \" due to corrupt page tree: It is likely that one or more 'Count' entries are invalid\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return CorruptPageTreeError;\n}(Error));\nexport { CorruptPageTreeError };\nvar IndexOutOfBoundsError = /** @class */ (function (_super) {\n    __extends(IndexOutOfBoundsError, _super);\n    function IndexOutOfBoundsError(index, min, max) {\n        var _this = this;\n        var msg = \"index should be at least \" + min + \" and at most \" + max + \", but was actually \" + index;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return IndexOutOfBoundsError;\n}(Error));\nexport { IndexOutOfBoundsError };\nvar InvalidAcroFieldValueError = /** @class */ (function (_super) {\n    __extends(InvalidAcroFieldValueError, _super);\n    function InvalidAcroFieldValueError() {\n        var _this = this;\n        var msg = \"Attempted to set invalid field value\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return InvalidAcroFieldValueError;\n}(Error));\nexport { InvalidAcroFieldValueError };\nvar MultiSelectValueError = /** @class */ (function (_super) {\n    __extends(MultiSelectValueError, _super);\n    function MultiSelectValueError() {\n        var _this = this;\n        var msg = \"Attempted to select multiple values for single-select field\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MultiSelectValueError;\n}(Error));\nexport { MultiSelectValueError };\nvar MissingDAEntryError = /** @class */ (function (_super) {\n    __extends(MissingDAEntryError, _super);\n    function MissingDAEntryError(fieldName) {\n        var _this = this;\n        var msg = \"No /DA (default appearance) entry found for field: \" + fieldName;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MissingDAEntryError;\n}(Error));\nexport { MissingDAEntryError };\nvar MissingTfOperatorError = /** @class */ (function (_super) {\n    __extends(MissingTfOperatorError, _super);\n    function MissingTfOperatorError(fieldName) {\n        var _this = this;\n        var msg = \"No Tf operator found for DA of field: \" + fieldName;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MissingTfOperatorError;\n}(Error));\nexport { MissingTfOperatorError };\nvar NumberParsingError = /** @class */ (function (_super) {\n    __extends(NumberParsingError, _super);\n    function NumberParsingError(pos, value) {\n        var _this = this;\n        var msg = \"Failed to parse number \" +\n            (\"(line:\" + pos.line + \" col:\" + pos.column + \" offset=\" + pos.offset + \"): \\\"\" + value + \"\\\"\");\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return NumberParsingError;\n}(Error));\nexport { NumberParsingError };\nvar PDFParsingError = /** @class */ (function (_super) {\n    __extends(PDFParsingError, _super);\n    function PDFParsingError(pos, details) {\n        var _this = this;\n        var msg = \"Failed to parse PDF document \" +\n            (\"(line:\" + pos.line + \" col:\" + pos.column + \" offset=\" + pos.offset + \"): \" + details);\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return PDFParsingError;\n}(Error));\nexport { PDFParsingError };\nvar NextByteAssertionError = /** @class */ (function (_super) {\n    __extends(NextByteAssertionError, _super);\n    function NextByteAssertionError(pos, expectedByte, actualByte) {\n        var _this = this;\n        var msg = \"Expected next byte to be \" + expectedByte + \" but it was actually \" + actualByte;\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return NextByteAssertionError;\n}(PDFParsingError));\nexport { NextByteAssertionError };\nvar PDFObjectParsingError = /** @class */ (function (_super) {\n    __extends(PDFObjectParsingError, _super);\n    function PDFObjectParsingError(pos, byte) {\n        var _this = this;\n        var msg = \"Failed to parse PDF object starting with the following byte: \" + byte;\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return PDFObjectParsingError;\n}(PDFParsingError));\nexport { PDFObjectParsingError };\nvar PDFInvalidObjectParsingError = /** @class */ (function (_super) {\n    __extends(PDFInvalidObjectParsingError, _super);\n    function PDFInvalidObjectParsingError(pos) {\n        var _this = this;\n        var msg = \"Failed to parse invalid PDF object\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return PDFInvalidObjectParsingError;\n}(PDFParsingError));\nexport { PDFInvalidObjectParsingError };\nvar PDFStreamParsingError = /** @class */ (function (_super) {\n    __extends(PDFStreamParsingError, _super);\n    function PDFStreamParsingError(pos) {\n        var _this = this;\n        var msg = \"Failed to parse PDF stream\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return PDFStreamParsingError;\n}(PDFParsingError));\nexport { PDFStreamParsingError };\nvar UnbalancedParenthesisError = /** @class */ (function (_super) {\n    __extends(UnbalancedParenthesisError, _super);\n    function UnbalancedParenthesisError(pos) {\n        var _this = this;\n        var msg = \"Failed to parse PDF literal string due to unbalanced parenthesis\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return UnbalancedParenthesisError;\n}(PDFParsingError));\nexport { UnbalancedParenthesisError };\nvar StalledParserError = /** @class */ (function (_super) {\n    __extends(StalledParserError, _super);\n    function StalledParserError(pos) {\n        var _this = this;\n        var msg = \"Parser stalled\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return StalledParserError;\n}(PDFParsingError));\nexport { StalledParserError };\nvar MissingPDFHeaderError = /** @class */ (function (_super) {\n    __extends(MissingPDFHeaderError, _super);\n    function MissingPDFHeaderError(pos) {\n        var _this = this;\n        var msg = \"No PDF header found\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return MissingPDFHeaderError;\n}(PDFParsingError));\nexport { MissingPDFHeaderError };\nvar MissingKeywordError = /** @class */ (function (_super) {\n    __extends(MissingKeywordError, _super);\n    function MissingKeywordError(pos, keyword) {\n        var _this = this;\n        var msg = \"Did not find expected keyword '\" + arrayAsString(keyword) + \"'\";\n        _this = _super.call(this, pos, msg) || this;\n        return _this;\n    }\n    return MissingKeywordError;\n}(PDFParsingError));\nexport { MissingKeywordError };\n//# sourceMappingURL=errors.js.map","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { createSelector } from 'reselect';\nimport {\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  IProjectLocationReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ProjectLocationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectCountries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('countries'),\n);\n\nexport const makeSelectProvinces = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('provinces'),\n);\n\nexport const makeSelectCities = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('cities'),\n);\n\nexport const makeSelectCountryName = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('countryName'),\n);\n\nexport const makeSelectProvinceName = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('provinceName'),\n);\n\nexport const makeSelectCityName = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('cityName'),\n);\n\nexport const makeSelectDivisionName = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('divisionName'),\n);\n\nexport const makeSelectAdminDivisions = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IProjectLocationReducerState>) => state.get('adminDivisions'),\n);\n\nexport default {\n  selectReducerState,\n};","import {SetOverlayComponentPropsAction, ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {COPY_MODAL} from '../../containers/CopyModal';\nimport {getSelectedDrawings, getSelectedProducts} from '../detailPageComponents/helpers';\n\nexport const MASTER_LIST_DROPPABLE_ID = 'masterList';\nexport const TEMPLATE_LIST_DROPPABLE_ID = 'templateList';\n\n// master-drawing-{masterId}-{specId}-{drawingId}-{masterName}\nexport const createDroppableMasterDrawingId = (master, index) => `master-drawing-${master.getIn(['data', 'id'])}-${index}-${master.getIn(['data', 'name'])}`;\nexport const isDroppableMasterDrawingId = (draggableId) => draggableId.match(/^master-drawing-\\d+-\\d+-(.*)$/);\nexport const parseDroppableMasterDrawingId = (draggableId) => {\n    const [id, index] = draggableId.split('-').slice(2);\n    return {\n        id,\n        index,\n        masterName: draggableId.split('-').slice(4).join('-'),\n    };\n};\n// master-drawing-{masterId}-{specId}-{drawingId}-{'Masters List' || 'Pinned Drawings List'}-{masterName}\nexport const createDraggableMasterDrawingId = (masterId, specId, drawingId, originListType, masterName) => `master-drawing-${masterId}-${specId}-${drawingId}-${originListType}-${masterName}`;\nexport const isDraggableMasterDrawingId = (draggableId) => draggableId.match(/^master-drawing-\\d+-\\d+-\\d+-(Masters List|Pinned Drawings List)-(.*)$/);\nexport const parseDraggableMasterDrawingId = (draggableId) => {\n    const [masterId, specId, drawingId] = draggableId.split('-').slice(2);\n    return {\n        masterId: parseInt(masterId, 10),\n        specId: parseInt(specId, 10),\n        drawingId: parseInt(drawingId, 10),\n        originListType: draggableId.split('-')[5],\n        masterName: draggableId.split('-').slice(6).join('-'),\n    };\n};\n\n// spec-drawing-droppable-{specId}-{projectName}\nexport const createDroppableSpecListId = (specId, projectName) => `spec-drawing-droppable-${specId}-${projectName}`;\nexport const isDroppableSpecListId = (droppableId) => droppableId.match(/^spec-drawing-droppable-\\d+-(.*)$/);\nexport const parseDroppableSpecListId = (draggableId) => {\n    const [specId] = draggableId.split('-').slice(3);\n    return {\n        specId: parseInt(specId, 10),\n        projectName: draggableId.split('-').slice(4).join('-'),\n    };\n};\n\nexport const createDroppableShortSpecListId = (specId) => `spec-drawing-droppable-short-${specId}`;\nexport const isDroppableShortSpecListId = (droppableId) => droppableId.match(/^spec-drawing-droppable-short-\\d+$/);\nexport const parseDroppableShortSpecListId = (draggableId) => {\n    const [specId] = draggableId.split('-').slice(3);\n    return {\n        specId: parseInt(specId, 10),\n    };\n};\n// spec-drawing-draggable-{specId}-{drawingId}-{projectName}\nexport const createDraggableSpecId = (specId, drawingId, projectName) => `spec-drawing-draggable-${specId}-${drawingId}-${projectName}`;\nexport const isDraggableSpecId = (draggableId) => draggableId.match(/^spec-drawing-draggable-\\d+-\\d+-(.*)$/);\nexport const parseDraggableSpecId = (draggableId) => {\n    const [specId, drawingId] = draggableId.split('-').slice(2);\n    return {\n        specId,\n        drawingId,\n        projectName: draggableId.split('-').slice(4).join('-'),\n    };\n};\nexport const createDraggableListItem = (specId, drawingId) => `drag-list-item-${specId}-${drawingId}`;\nexport const isDraggableListItem = (draggableId) => draggableId.match(/^drag-list-item-\\d+-\\d+$/);\nexport const parseDraggableListItem = (draggableId) => {\n    const [specId, drawingId] = draggableId.split('-').slice(3);\n    return {\n        specId,\n        drawingId,\n    };\n};\n// template-drawing-{templateId}-{specId}-{drawingId}-{templateName}\nexport const createDroppableTemplateDrawingId = (template, index) => `template-drawing-${template.getIn(['data', 'id'])}-${index}-${template.getIn(['data', 'name'])}`;\nexport const isDroppableTemplateDrawingId = (draggableId) => draggableId.match(/^template-drawing-\\d+-\\d+-(.*)$/);\nexport const parseDroppableTemplateDrawingId = (draggableId) => {\n    const [id, index] = draggableId.split('-').slice(2);\n    return {\n        id,\n        index,\n        templateName: draggableId.split('-').slice(4).join('-'),\n    };\n};\n// template-drawing-{templateId}-{specId}-{drawingId}-{'Templates List' || 'Pinned Drawings List'}-{templateName}\nexport const createDraggableTemplateDrawingId = (templateId, specId, drawingId, originListType, templateName) => `template-drawing-${templateId}-${specId}-${drawingId}-${originListType}-${templateName}`;\nexport const isDraggableTemplateDrawingId = (draggableId) => draggableId.match(/^template-drawing-\\d+-\\d+-\\d+-(Templates List|Pinned Drawings List)-(.*)$/);\nexport const parseDraggableTemplateDrawingId = (draggableId) => {\n    const [templateId, specId, drawingId] = draggableId.split('-').slice(2);\n    return {\n        templateId: parseInt(templateId, 10),\n        specId: parseInt(specId, 10),\n        drawingId: parseInt(drawingId, 10),\n        originListType: draggableId.split('-')[5],\n        templateName: draggableId.split('-').slice(6).join('-'),\n    };\n};\n\nexport const createDraggableIdForDragSelectedDrawing = (projectId, specId, drawingIds, originListType, index = 0) => `drag-selected-drawing-${originListType}-${projectId}-${specId}-${drawingIds.join('/')}-${index}`;\nexport const isDraggableIdForDragSelectedDrawing = (draggableId) => draggableId.match(/^drag-selected-drawing-(.*)$/);\nexport const parseDraggableIdForDragSelectedDrawing = (draggableId) => {\n    const [type, projectId, specId, drawingIds, index] = draggableId.split('-').slice(3);\n    return {\n        projectId: parseInt(projectId, 10),\n        specId: parseInt(specId, 10),\n        originListType: type,\n        drawingIds: drawingIds.split('/').map((id) => parseInt(id, 10)),\n        index: parseInt(index, 10),\n    };\n};\n\nexport const createDraggableIdForDragAllSelectedPinnedDrawing = (drawingIds, index = 0) => `drag-all-selected-pinned-drawing-${drawingIds.map(([projectId, specId, drawingId, sourceType]) => `${projectId}/${specId}/${drawingId}/${sourceType}`).join('-')}-${index}`;\nexport const isDraggableIdForDragAllSelectedPinnedDrawing = (draggableId) => draggableId.match(/^drag-all-selected-pinned-drawing-(.*)$/);\nexport const parseDraggableIdForDragAllSelectedPinnedDrawing = (draggableId) => {\n    const drawingIds = draggableId.split('-').slice(5);\n    return drawingIds.map((str) => str.split('/')).map(([projectId, specId, drawingId, sourceType]) => [parseInt(projectId, 10), parseInt(specId, 10), parseInt(drawingId, 10), sourceType]);\n};\n\nexport const checkIsDrawingChecked = (drawingConfig) => Boolean(drawingConfig?.get('checked'));\nexport const getFormattedCopyDrawingsForBE = (projectSpecDetailConfig) => {\n    return projectSpecDetailConfig && projectSpecDetailConfig.reduce((acc, curr, specId) => {\n        const drawings = curr.filter(checkIsDrawingChecked).reduce((_acc, _curr, drawingId) => {\n            _acc.push({\n                id: drawingId\n            });\n            return _acc;\n        }, []);\n        if (drawings.length) {\n            acc.push({\n                id: specId,\n                drawings\n            });\n        }\n        return acc;\n    }, []);\n};\n\nexport const handleProjectClickCopyTo = ({\n  projectSpecDetailConfig,\n  dispatch,\n  project,\n  specs,\n  sourceType,\n}) => {\n    const map = {\n        'project': 'project',\n        'master': 'Master',\n        'template': 'Template',\n        'master_template': 'Template',\n    };\n    dispatch(new SetOverlayComponentPropsAction({\n        id: COPY_MODAL,\n        props: {\n            sourceType: sourceType === 'project' ? 'standard' : sourceType,\n            sourceSpecs: getFormattedCopyDrawingsForBE(projectSpecDetailConfig),\n            amplitudeSourceData: {\n                sourceType: map[sourceType],\n                sourceId: project.get('id'),\n                sourceName: project.get('name'),\n                totalDrawings: getSelectedDrawings(projectSpecDetailConfig).length,\n                totalProducts: getSelectedProducts(projectSpecDetailConfig, specs).length,\n            }\n        }\n    }));\n    dispatch(new ToggleOverlayComponentAction({\n        id: COPY_MODAL,\n        open: true\n    }));\n};","/* Identifiers */\nexport const QUOTE_FORM_NAME = 'quote';\nexport const IMPORT_PRICING_FORM_NAME = 'quote_import_pricing_form';\nexport enum Statuses {\n  InProgress = 'InProgress',\n  Cancelled = 'cancelled',\n  Passed = 'passed',\n  Missed = 'missed',\n  Quoted = 'quoted',\n  Lost = 'lost',\n  Won = 'won',\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\nexport default function createSvgIcon(path, displayName) {\n  var Component = React.memo(React.forwardRef(function (props, ref) {\n    return React.createElement(SvgIcon, _extends({\n      ref: ref\n    }, props), path);\n  }));\n\n  if (process.env.NODE_ENV !== 'production') {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = SvgIcon.muiName;\n  return Component;\n}","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  fromJS,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nlet initTime: number;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added connected-react-router reducer to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport interface IRouterReducerLocation {\n  pathname: string;\n  search: string;\n  hash: string;\n}\n\nexport const emptyDefaultLocation: IRouterReducerLocation = {\n  pathname: '',\n  search: '',\n  hash: '',\n};\n\nexport interface IRouterReducerState {\n  action: string;\n  location: IMap<IRouterReducerLocation>;\n}\n\nexport const makeSelectAction = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IRouterReducerState>) => state.get('action')\n);\n\nexport const makeSelectLocation = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IRouterReducerState>) => state.get('location') || fromJS(emptyDefaultLocation) as IMap<IRouterReducerLocation>\n);\n\nexport const makeSelectLocationPathname = () => createSelector(\n  makeSelectLocation(),\n  (state: IMap<IRouterReducerLocation>) => state.get('pathname') || ''\n);\n\nexport const makeSelectLocationSearch = () => createSelector(\n  makeSelectLocation(),\n  (state: IMap<IRouterReducerLocation>) => state.get('search')\n);\n\nexport const makeSelectLocationHash = () => createSelector(\n  makeSelectLocation(),\n  (state: IMap<IRouterReducerLocation>) => state.get('hash')\n);\n\nexport default {\n  selectReducerState,\n};","export default {};\nexport const DEFAULT_MOUNT_POINT = 'router';","/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(\"Material-UI: the value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\"));\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nexport function hexToRgb(color) {\n  color = color.substr(1);\n  var re = new RegExp(\".{1,\".concat(color.length / 3, \"}\"), 'g');\n  var colors = color.match(re);\n\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(function (n) {\n      return n + n;\n    });\n  }\n\n  return colors ? \"rgb(\".concat(colors.map(function (n) {\n    return parseInt(n, 16);\n  }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n  var hex = int.toString(16);\n  return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nexport function rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  var _decomposeColor = decomposeColor(color),\n      values = _decomposeColor.values;\n\n  return \"#\".concat(values.map(function (n) {\n    return intToHex(n);\n  }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\nexport function hslToRgb(color) {\n  color = decomposeColor(color);\n  var _color = color,\n      values = _color.values;\n  var h = values[0];\n  var s = values[1] / 100;\n  var l = values[2] / 100;\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  var type = 'rgb';\n  var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({\n    type: type,\n    values: rgb\n  });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\nexport function decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  var marker = color.indexOf('(');\n  var type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n    throw new Error([\"Material-UI: unsupported `\".concat(color, \"` color.\"), 'We support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().'].join('\\n'));\n  }\n\n  var values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map(function (value) {\n    return parseFloat(value);\n  });\n  return {\n    type: type,\n    values: values\n  };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\nexport function recomposeColor(color) {\n  var type = color.type;\n  var values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map(function (n, i) {\n      return i < 3 ? parseInt(n, 10) : n;\n    });\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = \"\".concat(values[1], \"%\");\n    values[2] = \"\".concat(values[2], \"%\");\n  }\n\n  return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\nexport function getContrastRatio(foreground, background) {\n  var lumA = getLuminance(foreground);\n  var lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\nexport function getLuminance(color) {\n  color = decomposeColor(color);\n  var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(function (val) {\n    val /= 255; // normalized\n\n    return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n  }); // Truncate at 3 digits\n\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function emphasize(color) {\n  var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function fade(color, value) {\n  color = decomposeColor(color);\n  value = clamp(value);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n\n  color.values[3] = value;\n  return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}","import * as React from 'react';\nimport {\n  Link,\n  TableCell,\n  Tooltip,\n  Typography\n} from '@material-ui/core';\nimport styled from 'styled-components';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { getLocalePrefix } from '../../../constants';\n\nconst useStyles = makeStyles((theme) => ({\n  reactRouterLink: {\n    color: theme.palette.primary.main\n  },\n}));\ninterface ILinkCellComponentProps {\n  name: string | number;\n  linkPath?: string;\n  maxWidth?: string;\n  handleOnClick?: () => void;\n  target?: string;\n  refresh?: boolean;\n}\n\nconst LinkCell: React.FC<ILinkCellComponentProps> = (props) => {\n  const {\n    name,\n    linkPath,\n    maxWidth = '300px',\n    handleOnClick,\n    target,\n    refresh = true\n  } = props;\n\n\n  const classes = useStyles();\n  let content = <Typography>{name || '-'}</Typography>;\n  if (linkPath) {\n    if (refresh) {\n      content = <Link\n        color='primary'\n        style={{cursor: 'pointer'}}\n        href={`${window.location.origin}${getLocalePrefix()}${linkPath}`}\n        target={target}\n      >\n        {name || ''}\n      </Link>;\n    } else {\n      content =\n        <ReactRouterLink to={linkPath} className={classes.reactRouterLink}>\n          {name || ''}\n        </ReactRouterLink>;\n    }\n  }\n  if (handleOnClick) {\n    content = <Link\n      color='primary'\n      style={{cursor: 'pointer'}}\n      onClick={(e) => {\n        e.preventDefault();\n        handleOnClick();\n      }}\n    >\n      {name}\n    </Link>;\n  }\n\n  return (\n    <StyledTableCell maxWidth={maxWidth}>\n      <Tooltip\n        title={name || ''}\n        placement='bottom-start'\n      >\n        {content}\n      </Tooltip>\n    </StyledTableCell>\n  );\n};\n\nconst Cell = ({ maxWidth, ...props }) => (\n  <TableCell {...props} />\n);\n\nconst StyledTableCell = styled(Cell)`\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: ${props => props.maxWidth}\n`;\nexport default LinkCell;\n","import * as React from 'react';\nimport {\n  TableCell,\n  Tooltip,\n  Typography,\n  TypographyProps,\n  makeStyles,\n} from '@material-ui/core';\n\ninterface ITextCellProps {\n  text?: string;\n  typographyProps?: TypographyProps;\n}\n\nconst useStyles = makeStyles({\n  textCellCell: {\n    maxWidth: '120px'\n  },\n  textCellText: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  },\n});\n\nconst TextCell: React.FC<ITextCellProps> = (props) => {\n  const {\n    text,\n    typographyProps = {},\n  } = props;\n\n  const {\n    textCellCell,\n    textCellText,\n  } = useStyles();\n\n  return (\n    <TableCell\n      className={textCellCell}\n    >\n      <Tooltip title={text || ''} placement='bottom-start'>\n        <Typography className={textCellText} {...typographyProps}>\n          { text ? text : '-' }\n        </Typography>\n      </Tooltip>\n    </TableCell>\n  );\n};\n\nexport default TextCell;\n","import * as React from 'react';\nimport { useState } from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Button,\n  Menu,\n  MenuItem,\n  Typography\n} from '@material-ui/core';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  List\n} from 'immutable';\nimport Project from '../../../models/Project';\nimport { HasId } from '../../../models';\nimport {\n  QUOTE_PATH\n} from '../../../constants';\nimport { push } from 'connected-react-router';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\n\ninterface IQuotesCellComponentProps {\n  project: IMap<Project>;\n}\n\ninterface IQuotesCellProps extends IQuotesCellComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ninterface IQuoteObject extends HasId {\n}\n\nconst QuotesCell: React.FC<IQuotesCellProps> = (props) => {\n  const {\n    project,\n  } = props;\n\n\n  const [anchorEl, setAnchorEl] = useState(null);\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const handleOpen = (e: React.MouseEvent<HTMLButtonElement>) => {\n    setAnchorEl(e.currentTarget);\n  };\n\n  const quotes: List<IMap<IQuoteObject>> = project.get('quotes').filter((x) => x.get('status') === 'active').reverse();\n  const quoteCount = quotes.count();\n\n  const goQuote = (quoteId: number) => {\n    const {\n      dispatch,\n    } = props;\n\n    dispatch(push(`${QUOTE_PATH}/${quoteId}`));\n  };\n\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n      }}\n    >\n      {\n        quoteCount > 0 ?\n        <>\n          <Button\n            color='primary'\n            onClick={handleOpen}\n            endIcon={quoteCount > 1 ? <ArrowDropDownIcon color='action' /> : null}\n          >\n            {quotes.first<IMap<IQuoteObject>>().get('quoteNumber')}\n          </Button>\n          <Menu\n            anchorEl={anchorEl}\n            open={Boolean(anchorEl)}\n            onClose={handleClose}\n            >\n            {\n              quotes.map((quote: IMap<IQuoteObject>, i: number) => {\n                const quoteId = quote.get('id');\n                return (\n                  <MenuItem key={i} onClick={() => goQuote(quoteId)}>\n                    {quote.get('quoteNumber')}\n                  </MenuItem>\n                );\n              })\n            }\n          </Menu>\n        </>\n        : <Typography color='textSecondary'>{'-'}</Typography>\n      }\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n});\n\nexport default compose<React.ComponentClass<IQuotesCellComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps)\n)(QuotesCell);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  IconButton\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles\n} from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectTrackedProjectIds } from '../../../modules/ProjectModule/selectors';\nimport { makeSelectUserId } from '../../../modules/AtsModule/selectors';\nimport { TrackProjectAction, UntrackProjectAction } from '../../../modules/ProjectModule/actions';\nimport { Project } from '../../../models';\nimport BookmarkIcon from '@material-ui/icons/Bookmark';\nimport BookmarkBorderIcon from '@material-ui/icons/BookmarkBorder';\n\ninterface ITrackProjectButtonComponentProps {\n  project: IMap<Project>;\n}\n\ninterface ITrackProjectButtonProps extends ITrackProjectButtonComponentProps {\n  dispatch: (s: IAction) => void;\n  trackedProjects: number[];\n  userId: number;\n}\n\nconst styles = () => ({\n  iconButtonRoot: {\n    padding: 0\n  }\n});\n\ntype ITrackProjectButton = ITrackProjectButtonProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst TrackProjectButton: React.FC <ITrackProjectButton> = (props) => {\n  const {\n    classes,\n    project,\n    dispatch,\n    trackedProjects,\n    userId\n  } = props;\n\n  const id = project.get('id');\n  const tracked = trackedProjects.includes(id);\n  const payload = { type: 'user', typeId: userId, projectId: id };\n\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n      }}\n    >\n      <IconButton\n        color='primary'\n        onClick={() =>\n          dispatch(\n            tracked\n            ? new UntrackProjectAction(payload)\n            : new TrackProjectAction(payload)\n          )\n        }\n        classes={{root: classes.iconButtonRoot}}\n      >\n        {\n          tracked\n            ? <BookmarkIcon />\n            : <BookmarkBorderIcon />\n        }\n      </IconButton>\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  trackedProjects: makeSelectTrackedProjectIds(),\n  userId: makeSelectUserId()\n});\n\nexport default compose<React.ComponentClass<ITrackProjectButtonComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(TrackProjectButton);","import * as React from 'react';\nimport { useState } from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose, Dispatch\n} from 'redux';\nimport {\n  IAction, IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Button,\n  Menu,\n  MenuItem,\n  withStyles,\n  WithStyles,\n  Theme,\n  Link,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport DeleteModal from '../../DeleteModalDialog';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { DRAWER_ID } from '../../../containers/MyContactsPage/constants';\nimport { GetContactsSucceededAction, SelectContactAction } from '../../../modules/AccountModule/actions';\nimport { SetOverlayComponentContentAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { fromJS, List } from 'immutable';\nimport { Contact, QuoteCustomer } from '../../../models';\n\ninterface IContactsCellComponentProps {\n  contacts: List<IMap<Contact | QuoteCustomer>>;\n  firstNamePath: string[];\n  lastNamePath: string[];\n  organizationPath: string[];\n}\n\ninterface IContactsCellProps extends IContactsCellComponentProps {\n  dispatch: Dispatch<IAction>;\n}\n\ntype ContactsCellProps = IContactsCellProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  customers: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    maxWidth: '150px',\n  },\n  customer: {\n    cursor: 'pointer'\n  },\n  customersTooltip: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[1],\n    fontSize: '1em'\n  },\n});\n\nconst ContactsCell: React.FC<ContactsCellProps> = (props) => {\n  const {\n    dispatch,\n    classes,\n    t,\n    contacts,\n    firstNamePath,\n    lastNamePath,\n    organizationPath\n  } = props;\n\n  const contactsDisplay = contacts && contacts.map((contact, customerIndex) => {\n    const firstName = contact.getIn(firstNamePath) || '';\n    const lastName = contact.getIn(lastNamePath);\n    const org = contact.getIn(organizationPath);\n    const contactName = org ? org : (firstName + (lastName ? ` ${lastName}` : ''));\n\n    return <Link\n      className={classes.customer}\n      color='primary'\n      key={customerIndex}\n      onClick={() => {\n        dispatch(new GetContactsSucceededAction({contacts: fromJS([contact])})); /* Hacky workaround for the way the contacts drawer works. This populates the correct field in redux with the necessary contact data */\n        dispatch(new SetOverlayComponentContentAction({id: DRAWER_ID, content: 'DEFAULT'}));\n        dispatch(new SelectContactAction(contact.get('id')));\n        dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID, open: true}));\n      }}\n    >\n      {customerIndex ? ', ' + contactName : contactName}\n    </Link>;\n  });\n\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n      }}\n    >\n      <Tooltip\n        interactive={true}\n        placement='bottom-start'\n        title={contactsDisplay}\n        classes={{\n          tooltip: classes.customersTooltip\n        }}\n      >\n        <div className={classes.customers}>\n          { contactsDisplay }\n        </div>\n      </Tooltip>\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n});\n\n\nexport default compose<React.ComponentClass<IContactsCellComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(ContactsCell);\n","import * as React from 'react';\nimport {\n  TableCell,\n  Tooltip,\n} from '@material-ui/core';\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\nimport PeopleRoundedIcon from '@material-ui/icons/PeopleRounded';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\n\ninterface ICollaborationIconCellProps {\n  isCollaborated: boolean;\n}\n\ntype CollaborationIconCellProps = ICollaborationIconCellProps & WithTranslation;\n\nconst CollaborationIconCell: React.FC<CollaborationIconCellProps> = (props) => {\n  const {\n    isCollaborated,\n    t\n  } = props;\n\n  return (\n    <TableCell\n      style={{ textAlign: 'center' }}\n    >\n      {\n        isCollaborated\n          ? <Tooltip title={t('tableCell.collaborated')} placement='bottom-start'>\n              <PeopleRoundedIcon color='primary' />\n            </Tooltip>\n          : <Tooltip title={t('tableCell.nonCollaborated')} placement='bottom-start'>\n              <PersonRoundedIcon color='primary' />\n            </Tooltip>\n      }\n    </TableCell>\n  );\n};\n\nexport default compose<React.ComponentClass<ICollaborationIconCellProps>>(\n  withTranslation('translations')\n)(CollaborationIconCell);","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  TableCell,\n  Typography,\n  Tooltip,\n  Link\n} from '@material-ui/core';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport classnames from 'classnames';\nimport { push } from 'connected-react-router';\nimport { List } from 'immutable';\n\ninterface IListData {\n  name: string;\n  path?: string;\n  state?: object;\n  action?: () => void;\n}\n\ninterface IListCellComponentProps {\n  data: List<IListData>;\n  overridePath?: string;\n  isLink?: boolean; // true by default\n}\n\nexport interface IListCellProps extends IListCellComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype ListCellProps = IListCellProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  wrapper: {\n    whiteSpace: 'nowrap',\n    maxWidth: '300px',\n  },\n  text: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  listText: {\n    fontSize: '0.9rem'\n  },\n  tooltipWrapper: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[1],\n  },\n  placement: {\n    margin: theme.spacing(1, 0)\n  }\n});\n\nconst ListCell: React.FC<ListCellProps> = (props) => {\n  const {\n    classes,\n    data,\n    overridePath,\n    isLink = true\n  } = props;\n\n  const link = (text: string, path: string, state: object = {}, action: () => void, index: number = 0) => (\n    <Link\n      key={index}\n      color='primary'\n      style={{ cursor: 'pointer' }}\n      onClick={(e) => {\n        e.preventDefault();\n        if (action) {\n          action();\n        }\n        props.dispatch(\n          push({ pathname: path, state })\n        );\n      }}\n    >\n      <Typography color='primary' className={classnames(classes.text, classes.listText)}>{text}</Typography>\n    </Link>\n  );\n\n  const specsDisplay = (listData: List<IListData>) => (\n    <div className={classes.wrapper}>\n      {\n        isLink\n          ? overridePath\n              ? listData.map((item, index) => link(item.name, overridePath, item.state, item.action, index))\n              : listData.map((item, index) => link(item.name, item.path, item.state, item.action, index))\n          : listData.map((item, index) => <Typography key={index} className={classnames(classes.text, classes.listText)}>{item.name}</Typography>)\n      }\n    </div>\n  );\n\n  return (\n    <TableCell\n      className={classes.wrapper}\n    >\n      {\n        data.size\n          ? <>\n              <Tooltip\n                interactive={true}\n                placement='bottom-start'\n                title={specsDisplay(data)}\n                classes={{\n                  tooltip: classes.tooltipWrapper,\n                  tooltipPlacementBottom: classes.placement\n                }}\n                PopperProps={{\n                  modifiers: {\n                    computeStyle: {\n                      gpuAcceleration: false\n                    }\n                  }\n                }}\n              >\n                { specsDisplay(List([data.first()])) }\n              </Tooltip>\n            </>\n          : <Typography>-</Typography>\n      }\n    </TableCell>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<IListCellComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(ListCell);\n","import * as React from 'react';\nimport {\n  TableCell,\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { Series } from '../../../models';\nimport RegionFlags from './RegionFlags';\n\ninterface IRegionCellProps {\n  series: IMap<Series>;\n}\n\ntype RegionCellProps = IRegionCellProps;\n\nconst RegionCell: React.FC<RegionCellProps> = (props) => {\n  const {\n    series,\n  } = props;\n\n  return (\n    <TableCell padding='none' size='small'>\n      <RegionFlags series={series} inlineMore={false}  />\n    </TableCell>\n  );\n};\n\nexport default RegionCell;","import * as React from 'react';\nimport {\n  TableCell,\n  IconButton,\n  Tooltip,\n  makeStyles\n} from '@material-ui/core';\n\ninterface IIconCellComponentProps {\n  icon: JSX.Element;\n  tooltip?: string;\n  onClick?: () => void;\n}\n\ninterface IIconCellProps extends IIconCellComponentProps {\n}\n\nconst useStyles = makeStyles({\n  iconButtonRoot: {\n    padding: 0\n  }\n});\n\ntype IIconCell = IIconCellProps;\n\nconst IconCell: React.FC <IIconCell> = (props) => {\n  const {\n    icon,\n    tooltip,\n    onClick,\n  } = props;\n\n  const {\n    iconButtonRoot\n  } = useStyles();\n\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n        textAlign: 'center',\n      }}\n    >\n      <Tooltip title={tooltip || ''}>\n        <IconButton\n          color='primary'\n          onClick={onClick ? onClick : null}\n          classes={{root: iconButtonRoot}}\n        >\n          { icon }\n        </IconButton>\n      </Tooltip>\n    </TableCell>\n  );\n};\n\nexport default IconCell;","import * as React from 'react';\nimport {\n  TableCell,\n  Tooltip,\n  Typography,\n  makeStyles,\n} from '@material-ui/core';\n\ninterface IMultiTextCellProps {\n  text1?: string;\n  text2?: string;\n}\n\nconst useStyles = makeStyles({\n  MultiTextCellCell: {\n    maxWidth: '120px',\n  },\n  MultiTextCellText: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  },\n});\n\nconst MultiTextCell: React.FC<IMultiTextCellProps> = (props) => {\n  const {\n    text1,\n    text2,\n  } = props;\n\n  const {\n    MultiTextCellCell,\n    MultiTextCellText,\n  } = useStyles();\n\n  return (\n    <TableCell\n      className={MultiTextCellCell}\n    >\n      <Tooltip title={text1 || ''} placement='bottom-start' color='textPrimary'>\n        <Typography className={MultiTextCellText}>\n          { text1 ? text1 : '-' }\n        </Typography>\n      </Tooltip>\n      <Tooltip title={text2 || ''} placement='bottom-start'>\n        <Typography className={MultiTextCellText}>\n          { text2 ? text2 : '-' }\n        </Typography>\n      </Tooltip>\n    </TableCell>\n  );\n};\n\nexport default MultiTextCell;\n","import Immutable from 'immutable';\nimport { IMap, IMapNonRecursive } from 'ats-utils/src/Interfaces';\nimport { isPlainObject } from 'ats-utils/src';\n\n// export const fromJSBase = (obj: any) => {\n//   if (Array.isArray(obj)) {\n//     return Immutable.List(Immutable.Seq.Indexed(obj).map(fromJSBase));\n//   }\n//   if (obj instanceof Base) {\n//     return Immutable.Map(Immutable.Seq.Keyed({...obj}).map(fromJSBase));\n//   }\n//   return Immutable.fromJS(obj);\n// };\n\nexport function fromJSBase(value: any, preConverter?, converter?) {\n  return fromJSWith(\n    [],\n    preConverter || defaultPreConverter,\n    converter || defaultConverter,\n    value,\n    '',\n    converter && converter.length > 2 ? [] : undefined,\n    { '': value }\n  );\n}\n\nfunction fromJSWith(stack, preConverter, converter, value, key, keyPath, parentValue) {\n  const preConvertedValue = preConverter.call(parentValue, value);\n  const isBase = preConvertedValue instanceof Base;\n  const toSeq: (collection: any) => any = Array.isArray(preConvertedValue)\n    ? Immutable.Seq.Indexed\n    : isBase || isPlainObject(preConvertedValue)\n      ? Immutable.Seq.Keyed\n      : null;\n  if (toSeq != null) {\n    if (stack.indexOf(preConvertedValue) !== -1) {\n      throw new TypeError('Cannot convert circular structure to Immutable');\n    }\n    stack.push(preConvertedValue);\n    if (keyPath != null && key !== '') {\n      keyPath.push(key);\n    }\n    const converted = converter.call(\n      parentValue,\n      key,\n      toSeq(isBase ? {...preConvertedValue} : preConvertedValue).map((v, k) =>\n        fromJSWith(stack, preConverter, converter, v, k, keyPath, preConvertedValue)\n      ),\n      keyPath && keyPath.slice()\n    );\n    stack.pop();\n    if (keyPath != null) {\n      keyPath.pop();\n    }\n    return converted;\n  }\n  return preConvertedValue;\n}\n\nfunction defaultPreConverter(v) {\n  return v;\n}\n\nfunction defaultConverter(k, v) {\n  return Immutable.isKeyed(v) ? v.toMap() : v.toList();\n}\n// base class for objects\n// provides toImmutable function\n// will be converted to immutable using fromJSBase\nexport default class Base {\n  public static fromJSBase = fromJSBase;\n  public constructor(init?: Partial<Base>) {\n    Object.assign(this, init);\n  }\n\n  public toImmutable?() {\n    return Base.fromJSBase({...this as object}) as IMap<this>;\n  }\n\n  public toImmutableNonRecursive?() {\n    return Base.fromJSBase({...this as object}) as IMapNonRecursive<this>;\n  }\n}\n","export enum ROUNDING_OPTIONS {\n  NO_ROUNDING = '',\n  NEAREST_CENT = '0.01',\n  NEAREST_NICKLE = '0.05',\n  NEAREST_DIME = '0.10',\n  NEAREST_DOLLAR = '1.00'\n}\n\nexport enum DECIMAL_PRECISION {\n  TWO = 2,\n  THREE = 3,\n  FOUR = 4\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List\n} from 'immutable';\nimport {\n  Criteria,\n  User,\n} from '../../models';\nimport Task, { TagEntity } from '../../models/Task';\nimport { BodyCriteria } from '../../models/Criteria';\n\nexport default {};\n\nexport enum TaskActionTypes {\n  GET_TASKS = 'GET_TASKS',\n  GET_TASKS_SUCCEEDED = 'GET_TASKS_SUCCEEDED',\n  CREATE_OR_UPDATE_TASK = 'CREATE_OR_UPDATE_TASK',\n  ADD_TASK = 'ADD_TASK',\n  SELECT_TASK_ID = 'SELECT_TASK_ID',\n  EDIT_TASK = 'EDIT_TASK',\n  EDIT_TASK_SUCCEEDED = 'EDIT_TASK_SUCCEEDED',\n  DELETE_TASK = 'DELETE_TASK',\n  ADD_TASK_THEN_GET_TASK = 'ADD_TASK_THEN_GET_TASK',\n  TAG_ENTITY = 'TAG_ENTITY',\n  UNTAG_ENTITY = 'UNTAG_ENTITY',\n  ADD_CRITERIA = 'ADD_CRITERIA',\n  ADD_CRITERIA_SUCCEEDED = 'ADD_CRITERIA_SUCCEEDED',\n  EDIT_CRITERIA = 'EDIT_CRITERIA',\n  EDIT_CRITERIA_SUCCEEDED = 'EDIT_CRITERIA_SUCCEEDED',\n  DELETE_CRITERIA = 'DELETE_CRITERIA',\n  DELETE_CRITERIA_SUCCEEDED = 'DELETE_CRITERIA_SUCCEEDED',\n  UPDATE_CRITERIA_STATUS = 'UPDATE_CRITERIA_STATUS',\n  UPDATE_CRITERIA_STATUS_SUCCEEDED = 'UPDATE_CRITERIA_STATUS_SUCCEEDED',\n  SET_TASK_STATUS = 'SET_TASK_STATUS',\n  GET_TASK_BY_ID = 'GET_TASK_BY_ID',\n  UPDATE_CRITERIA_STATUSES_AND_GET_TASK = 'UPDATE_CRITERIA_STATUSES_AND_GET_TASK',\n  UPDATE_CRITERION_STATUS_AND_GET_TASK = 'UPDATE_CRITERION_STATUS_AND_GET_TASK',\n\n  RESET_TASKS = 'RESET_TASKS'\n}\n\nexport class UpdateCriterionAndGetTaskAction implements IAction {\n  public readonly type = TaskActionTypes.UPDATE_CRITERION_STATUS_AND_GET_TASK;\n\n  constructor(\n    public payload: {\n      taskId: number,\n      criteriaId: number,\n      status: string,\n    }\n  ) {}\n}\n\nexport class UpdateCriteriaStatusesAndGetTaskAction implements IAction {\n  public readonly type = TaskActionTypes.UPDATE_CRITERIA_STATUSES_AND_GET_TASK;\n\n  constructor(\n    public payload: {\n      task: IMap<Task>;\n      newStatus: string;\n    }\n  ) {}\n}\n\nexport class GetTaskByIdAction implements IAction {\n  public readonly type = TaskActionTypes.GET_TASK_BY_ID;\n\n  constructor(\n    public payload: {\n      taskId: number\n    }\n  ) {}\n}\n\nexport class CreateOrUpdateTaskAction implements IAction {\n  public readonly type = TaskActionTypes.CREATE_OR_UPDATE_TASK;\n\n  constructor(\n    public payload: {\n      task: IMap<Partial<Task>>;\n      originalTask?: IMap<Partial<Task>>;\n      criteria?: List<IMap<Partial<Criteria>>>;\n      assignedUsers?: List<IMap<User>>;\n      deletedUserIds?: List<number>;\n      editedCriteriaIds?: IMap<object>;\n      deletedCriteriaIds?: List<number>;\n    }\n  ) {}\n}\n\nexport class SetTaskStatusAction implements IAction {\n  public readonly type = TaskActionTypes.SET_TASK_STATUS;\n\n  constructor(\n    public payload: string\n  ) {}\n}\n\nexport class DeleteCriteriaAction implements IAction {\n  public readonly type = TaskActionTypes.DELETE_CRITERIA;\n\n  constructor(\n    public payload: {\n      taskId: number,\n      criteriaId: number,\n    }\n  ) {}\n}\n\nexport class DeleteCriteriaSuccceededAction implements IAction {\n  public readonly type = TaskActionTypes.DELETE_CRITERIA_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      deletedCriteriaId: number,\n    }\n  ) {}\n}\n\nexport class EditCriteriaAction implements IAction {\n  public readonly type = TaskActionTypes.EDIT_CRITERIA;\n\n  constructor(\n    public payload: {\n      taskId: number,\n      criteria: BodyCriteria[],\n    }\n  ) {}\n}\n\nexport class EditCriteriaSucceededAction implements IAction {\n  public readonly type = TaskActionTypes.EDIT_CRITERIA_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      newCriteriaData: IMap<Criteria>,\n      taskId: number,\n    }\n  ) {}\n}\n\nexport class UpdateCriteriaStatusSucceededAction implements IAction {\n  public readonly type = TaskActionTypes.UPDATE_CRITERIA_STATUS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      criteriaData: IMap<Criteria>,\n      taskId: number\n    }\n  ) {}\n}\n\nexport class UpdateCriteriaStatusAction implements IAction {\n  public readonly type = TaskActionTypes.UPDATE_CRITERIA_STATUS;\n\n  constructor(\n    public payload: {\n      taskId: number,\n      criteriaId: number,\n      status: string,\n    }\n  ) {}\n}\n\nexport class AddCriteriaAction implements IAction {\n  public readonly type = TaskActionTypes.ADD_CRITERIA;\n\n  constructor(\n    public payload: {\n      taskId: number,\n      criteria: Array<Partial<Criteria>>,\n    }\n  ) {}\n}\n\nexport class AddCriteriaSucceededAction implements IAction {\n  public readonly type = TaskActionTypes.ADD_CRITERIA_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      criteria: List<IMap<Criteria>>,\n    }\n  ) {}\n}\n\nexport class DeleteTaskAction implements IAction {\n  public readonly type = TaskActionTypes.DELETE_TASK;\n\n  constructor(\n    public payload: {\n      selectedTaskId: number,\n    }\n  ) {}\n}\n\nexport class EditTaskSucceededAction implements IAction {\n  public readonly type = TaskActionTypes.EDIT_TASK_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Task>\n  ) {}\n}\n\nexport class EditTaskAction implements IAction {\n  public readonly type = TaskActionTypes.EDIT_TASK;\n\n  constructor(\n    public payload: {\n      task: IMap<Partial<Task>>,\n    }\n  ) {}\n}\n\nexport class SelectTaskIdAction implements IAction {\n  public readonly type = TaskActionTypes.SELECT_TASK_ID;\n\n  constructor(\n    public payload: {\n      taskId: number,\n    }\n  ) {}\n}\n\nexport class GetTasksAction implements IAction {\n  public readonly type = TaskActionTypes.GET_TASKS;\n\n  constructor(\n    public payload: {\n      type: string,\n      typeId: number\n    }\n  ) {}\n}\n\nexport class AddTaskAction implements IAction {\n  public readonly type = TaskActionTypes.ADD_TASK;\n\n  constructor(\n    public payload: {\n      task: IMap<Partial<Task>>,\n    }\n  ) {}\n}\n\nexport class GetTasksSucceededAction implements IAction {\n  public readonly type = TaskActionTypes.GET_TASKS_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      tasks: List<IMap<Task>>,\n    }\n  ) { }\n}\n\nexport class TagEntityAction implements IAction {\n  public type = TaskActionTypes.TAG_ENTITY;\n\n  constructor(\n    public payload: TagEntity\n  ) { }\n}\n\nexport class UnTagEntityAction implements IAction {\n  public type = TaskActionTypes.UNTAG_ENTITY;\n\n  constructor(\n    public payload: TagEntity\n  ) { }\n}\n\nexport class ResetTasksAction implements IAction {\n  public type = TaskActionTypes.RESET_TASKS;\n}\n\n// export class UnTagEntityAction extends TagEntityAction {\n//   public readonly type = TaskActionTypes.UNTAG_ENTITY;\n\n//   constructor(\n//     public payload: TagEntity\n//   ) {\n//     super(payload);\n//   }\n// }\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport { Address, RegionsList } from '../../models';\n\nexport default {};\n\nexport enum LocationTypes {\n  GET_COUNTRIES = 'GET_COUNTRIES',\n  GET_COUNTRIES_SUCCEEDED = 'GET_COUNTRIES_SUCCEEDED',\n  GET_REGIONS = 'GET_REGIONS',\n  GET_REGIONS_SUCCEEDED = 'GET_REGIONS_SUCCEEDED',\n  GET_COUNTRIES_FAILED = 'GET_COUNTRIES_FAILED',\n  SAVE_COUNTRY_NAME = 'SAVE_COUNTRY_NAME',\n  GET_PROVINCES = 'GET_PROVINCES',\n  GET_PROVINCES_SUCCEEDED = 'GET_PROVINCES__SUCCEEDED',\n  GET_PROVINCES_FAILED = 'GET_PROVINCES_FAILED',\n  SAVE_PROVINCE_NAME = 'SAVE_PROVINCE_NAME',\n  GET_CITIES = 'GET_CITIES',\n  GET_CITIES_SUCCEEDED = 'GET_CITIES_SUCCEEDED',\n  GET_CITIES_FAILED = 'GET_CITIES_FAILED',\n  SAVE_CITY_NAME = 'SAVE_CITY_NAME',\n  GET_REGIONS_LIST= 'GET_REGIONS_LIST',\n  GET_REGIONS_LIST_SUCCEEDED = 'GET_REGIONS_LIST_SUCCEEDED',\n  SET_SELECTED_REGION = 'SET_SELECTED_REGION'\n}\n\n// TODO: add models to replace interfaces declared here\n\ninterface ILocationResponse {\n  list: List<IMap<any>>;\n  storeKey: string;\n}\n\nexport class GetCountriesAction implements IAction {\n  public readonly type = LocationTypes.GET_COUNTRIES;\n\n  constructor (\n    public payload?: ILocationResponse\n  ) {}\n}\n\nexport class GetRegionsAction implements IAction {\n  public readonly type = LocationTypes.GET_REGIONS;\n\n  constructor(\n    public payload: {\n      type: 'office' | 'firm' | 'user'\n      regionType: 'P' | 'R' | 'B'\n    }\n  ) { }\n}\n\nexport class GetRegionsSucceededAction implements IAction {\n  public readonly type = LocationTypes.GET_REGIONS_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      list: List<IMap<any>>;\n      type: 'office' | 'firm' | 'user';\n      regionType: 'P' | 'R' | 'B';\n    }\n  ) {}\n}\n\n\nexport class GetCountriesSucceededAction implements IAction {\n  public readonly type = LocationTypes.GET_COUNTRIES_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      list: any\n    }\n  ) {}\n}\n\nexport class GetCountriesFailedAction implements IAction {\n  public readonly type = LocationTypes.GET_COUNTRIES_FAILED;\n\n  constructor (\n    public payload: {\n      error: Error | string\n    }\n  ) {}\n}\n\nexport class GetProvincesAction implements IAction {\n  public readonly type = LocationTypes.GET_PROVINCES;\n\n  constructor (\n    public payload: {\n      countryId: any\n      storeKey: string\n    }\n  ) {}\n}\n\n\nexport class GetProvincesSucceededAction implements IAction {\n  public readonly type = LocationTypes.GET_PROVINCES_SUCCEEDED;\n\n  constructor (\n    public payload: ILocationResponse\n  ) {}\n}\n\nexport class GetProvincesFailedAction implements IAction {\n  public readonly type = LocationTypes.GET_PROVINCES_FAILED;\n\n  constructor (\n    public payload: {\n      error: Error | string\n      storeKey: string\n    }\n  ) {}\n}\n\nexport class GetCitiesAction implements IAction {\n  public readonly type = LocationTypes.GET_CITIES;\n\n  constructor (\n    public payload: {\n      provinceId: string\n      storeKey: string\n    }\n  ) {}\n}\n\nexport class GetCitiesSucceededAction implements IAction {\n  public readonly type = LocationTypes.GET_CITIES_SUCCEEDED;\n\n  constructor (\n    public payload: ILocationResponse\n  ) {}\n}\n\nexport class GetCitiesFailedAction implements IAction {\n  public readonly type = LocationTypes.GET_CITIES_FAILED;\n\n  constructor (\n    public payload: {\n      error: Error | string\n      storeKey: string\n    }\n  ) {}\n}\n\nexport class SaveCountryNameAction implements IAction {\n  public readonly type = LocationTypes.SAVE_COUNTRY_NAME;\n\n  constructor (\n    public payload: {\n      country: any\n      storeKey: string\n      provinceKey: string\n      cityKey: string\n    }\n  ) {}\n}\n\nexport class SaveProvinceNameAction implements IAction {\n  public readonly type = LocationTypes.SAVE_PROVINCE_NAME;\n\n  constructor (\n    public payload: {\n      province: any\n      storeKey: string\n      cityKey: string\n    }\n  ) {}\n}\n\nexport class SaveCityNameAction implements IAction {\n  public readonly type = LocationTypes.SAVE_CITY_NAME;\n\n  constructor (\n    public payload: {\n      city: any\n      storeKey: string\n    }\n  ) {}\n}\n\nexport class GetRegionsListAction implements IAction {\n  public readonly type = LocationTypes.GET_REGIONS_LIST;\n\n  constructor(\n      public url?: string\n  ) {}\n}\n\nexport class GetRegionsListSucceededAction implements IAction {\n  public readonly type = LocationTypes.GET_REGIONS_LIST_SUCCEEDED;\n\n  constructor(\n      public payload: {\n        regionsList?: List<IMap<RegionsList>>\n      }\n  ) {}\n}\n\nexport class SetSelectedRegion implements IAction {\n  public readonly type = LocationTypes.SET_SELECTED_REGION;\n\n  constructor(\n    public payload: {\n      region: IMap<Address>\n    }\n  ) {}\n}\n","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","import React, { useEffect }  from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { AnyAction, Dispatch } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormSyncErrors } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\n\nexport const VALIDATION_HACK_FIELD = '___validationHack___';\n\nexport interface IComponentProp {\n  formName: string;\n}\n\nexport interface IWithReduxFormValidationTranslation {\n  dispatch: Dispatch<AnyAction>;\n  hocSyncErrors: any;\n}\n\nconst withReduxFormValidationTranslation = (hocProps: IComponentProp) => (ChildComponent) => {\n  const {\n    formName\n  } = hocProps;\n\n  const useReduxFormValidationTranslation: React.FC<IWithReduxFormValidationTranslation> = props => {\n    const { dispatch, hocSyncErrors, ...rest } = props;\n    const { i18n } = useTranslation();\n\n    useEffect(() => {\n      i18n.on('languageChanged', lng => {\n        dispatch(change(formName, VALIDATION_HACK_FIELD, Date.now()));\n        setTimeout(() => dispatch(change(formName, VALIDATION_HACK_FIELD, '')), 108); // remove the value from the form (in the one in the cleaning function doesn't yet)\n      });\n\n      return () => {\n        i18n.off('languageChanged', null);\n        dispatch(change(formName, VALIDATION_HACK_FIELD, '')); // remove the value from the form\n      };\n    }, [hocSyncErrors]);\n\n    return <ChildComponent {...rest}/>;\n  };\n\n  const mapStateToProps = (state, ownProps) => createStructuredSelector({\n    hocSyncErrors: getFormSyncErrors(formName)\n  })(state);\n\n  const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n    return {\n      dispatch\n    };\n  };\n\n  return connect(mapStateToProps, mapDispatchToProps)(useReduxFormValidationTranslation);\n};\n\nexport default withReduxFormValidationTranslation;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\n\nexports.default = _default;","function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import { useState, useRef, useEffect } from 'react';\n\nfunction areInputsEqual(newInputs, lastInputs) {\n  if (newInputs.length !== lastInputs.length) {\n    return false;\n  }\n\n  for (var i = 0; i < newInputs.length; i++) {\n    if (newInputs[i] !== lastInputs[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction useMemoOne(getResult, inputs) {\n  var initial = useState(function () {\n    return {\n      inputs: inputs,\n      result: getResult()\n    };\n  })[0];\n  var isFirstRun = useRef(true);\n  var committed = useRef(initial);\n  var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n  var cache = useCache ? committed.current : {\n    inputs: inputs,\n    result: getResult()\n  };\n  useEffect(function () {\n    isFirstRun.current = false;\n    committed.current = cache;\n  }, [cache]);\n  return cache.result;\n}\nfunction useCallbackOne(callback, inputs) {\n  return useMemoOne(function () {\n    return callback;\n  }, inputs);\n}\nvar useMemo = useMemoOne;\nvar useCallback = useCallbackOne;\n\nexport { useCallback, useCallbackOne, useMemo, useMemoOne };\n","import _Object$setPrototypeOf from \"core-js/library/fn/object/set-prototype-of.js\";\nfunction _setPrototypeOf(t, e) {\n  return _setPrototypeOf = _Object$setPrototypeOf ? _Object$setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import _Object$create from \"core-js/library/fn/object/create.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = _Object$create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","import _Object$assign from \"core-js/library/fn/object/assign.js\";\nfunction _extends() {\n  return _extends = _Object$assign ? _Object$assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n  var top = _ref.top,\n      right = _ref.right,\n      bottom = _ref.bottom,\n      left = _ref.left;\n  var width = right - left;\n  var height = bottom - top;\n  var rect = {\n    top: top,\n    right: right,\n    bottom: bottom,\n    left: left,\n    width: width,\n    height: height,\n    x: left,\n    y: top,\n    center: {\n      x: (right + left) / 2,\n      y: (bottom + top) / 2\n    }\n  };\n  return rect;\n};\nvar expand = function expand(target, expandBy) {\n  return {\n    top: target.top - expandBy.top,\n    left: target.left - expandBy.left,\n    bottom: target.bottom + expandBy.bottom,\n    right: target.right + expandBy.right\n  };\n};\nvar shrink = function shrink(target, shrinkBy) {\n  return {\n    top: target.top + shrinkBy.top,\n    left: target.left + shrinkBy.left,\n    bottom: target.bottom - shrinkBy.bottom,\n    right: target.right - shrinkBy.right\n  };\n};\n\nvar shift = function shift(target, shiftBy) {\n  return {\n    top: target.top + shiftBy.y,\n    left: target.left + shiftBy.x,\n    bottom: target.bottom + shiftBy.y,\n    right: target.right + shiftBy.x\n  };\n};\n\nvar noSpacing = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0\n};\nvar createBox = function createBox(_ref2) {\n  var borderBox = _ref2.borderBox,\n      _ref2$margin = _ref2.margin,\n      margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n      _ref2$border = _ref2.border,\n      border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n      _ref2$padding = _ref2.padding,\n      padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n  var marginBox = getRect(expand(borderBox, margin));\n  var paddingBox = getRect(shrink(borderBox, border));\n  var contentBox = getRect(shrink(paddingBox, padding));\n  return {\n    marginBox: marginBox,\n    borderBox: getRect(borderBox),\n    paddingBox: paddingBox,\n    contentBox: contentBox,\n    margin: margin,\n    border: border,\n    padding: padding\n  };\n};\n\nvar parse = function parse(raw) {\n  var value = raw.slice(0, -2);\n  var suffix = raw.slice(-2);\n\n  if (suffix !== 'px') {\n    return 0;\n  }\n\n  var result = Number(value);\n  !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n  return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  };\n};\n\nvar offset = function offset(original, change) {\n  var borderBox = original.borderBox,\n      border = original.border,\n      margin = original.margin,\n      padding = original.padding;\n  var shifted = shift(borderBox, change);\n  return createBox({\n    borderBox: shifted,\n    border: border,\n    margin: margin,\n    padding: padding\n  });\n};\nvar withScroll = function withScroll(original, scroll) {\n  if (scroll === void 0) {\n    scroll = getWindowScroll();\n  }\n\n  return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n  var margin = {\n    top: parse(styles.marginTop),\n    right: parse(styles.marginRight),\n    bottom: parse(styles.marginBottom),\n    left: parse(styles.marginLeft)\n  };\n  var padding = {\n    top: parse(styles.paddingTop),\n    right: parse(styles.paddingRight),\n    bottom: parse(styles.paddingBottom),\n    left: parse(styles.paddingLeft)\n  };\n  var border = {\n    top: parse(styles.borderTopWidth),\n    right: parse(styles.borderRightWidth),\n    bottom: parse(styles.borderBottomWidth),\n    left: parse(styles.borderLeftWidth)\n  };\n  return createBox({\n    borderBox: borderBox,\n    margin: margin,\n    padding: padding,\n    border: border\n  });\n};\nvar getBox = function getBox(el) {\n  var borderBox = el.getBoundingClientRect();\n  var styles = window.getComputedStyle(el);\n  return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var rafSchd = function rafSchd(fn) {\n  var lastArgs = [];\n  var frameId = null;\n\n  var wrapperFn = function wrapperFn() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    lastArgs = args;\n\n    if (frameId) {\n      return;\n    }\n\n    frameId = requestAnimationFrame(function () {\n      frameId = null;\n      fn.apply(void 0, lastArgs);\n    });\n  };\n\n  wrapperFn.cancel = function () {\n    if (!frameId) {\n      return;\n    }\n\n    cancelAnimationFrame(frameId);\n    frameId = null;\n  };\n\n  return wrapperFn;\n};\n\nexport default rafSchd;\n","import React, { useLayoutEffect, useEffect, useRef, useState, useContext } from 'react';\nimport { useMemo, useCallback } from 'use-memo-one';\nimport _inheritsLoose from '@babel/runtime-corejs2/helpers/esm/inheritsLoose';\nimport _extends from '@babel/runtime-corejs2/helpers/esm/extends';\nimport { createStore as createStore$1, applyMiddleware, compose, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { getRect, expand, offset, withScroll, getBox, createBox, calculateBox } from 'css-box-model';\nimport memoizeOne from 'memoize-one';\nimport _Object$values from '@babel/runtime-corejs2/core-js/object/values';\nimport _Object$keys from '@babel/runtime-corejs2/core-js/object/keys';\nimport rafSchd from 'raf-schd';\nimport _Date$now from '@babel/runtime-corejs2/core-js/date/now';\nimport _Object$assign from '@babel/runtime-corejs2/core-js/object/assign';\nimport ReactDOM from 'react-dom';\nimport _Number$isInteger from '@babel/runtime-corejs2/core-js/number/is-integer';\n\nvar isProduction = process.env.NODE_ENV === 'production';\nvar spacesAndTabs = /[ \\t]{2,}/g;\nvar lineStartWithSpaces = /^[ \\t]*/gm;\n\nvar clean = function clean(value) {\n  return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\n};\n\nvar getDevMessage = function getDevMessage(message) {\n  return clean(\"\\n  %creact-beautiful-dnd\\n\\n  %c\" + clean(message) + \"\\n\\n  %c\\uD83D\\uDC77\\u200D This is a development only message. It will be removed in production builds.\\n\");\n};\n\nvar getFormattedMessage = function getFormattedMessage(message) {\n  return [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\n};\nvar isDisabledFlag = '__react-beautiful-dnd-disable-dev-warnings';\nfunction log(type, message) {\n  var _console;\n\n  if (isProduction) {\n    return;\n  }\n\n  if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n    return;\n  }\n\n  (_console = console)[type].apply(_console, getFormattedMessage(message));\n}\nvar warning = log.bind(null, 'warn');\nvar error = log.bind(null, 'error');\n\nfunction noop() {}\n\nfunction getOptions(shared, fromBinding) {\n  return _extends({}, shared, fromBinding);\n}\n\nfunction bindEvents(el, bindings, sharedOptions) {\n  var unbindings = bindings.map(function (binding) {\n    var options = getOptions(sharedOptions, binding.options);\n    el.addEventListener(binding.eventName, binding.fn, options);\n    return function unbind() {\n      el.removeEventListener(binding.eventName, binding.fn, options);\n    };\n  });\n  return function unbindAll() {\n    unbindings.forEach(function (unbind) {\n      unbind();\n    });\n  };\n}\n\nvar isProduction$1 = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction RbdInvariant(message) {\n  this.message = message;\n}\n\nRbdInvariant.prototype.toString = function toString() {\n  return this.message;\n};\n\nfunction invariant(condition, message) {\n  if (condition) {\n    return;\n  }\n\n  if (isProduction$1) {\n    throw new RbdInvariant(prefix);\n  } else {\n    throw new RbdInvariant(prefix + \": \" + (message || ''));\n  }\n}\n\nvar ErrorBoundary = function (_React$Component) {\n  _inheritsLoose(ErrorBoundary, _React$Component);\n\n  function ErrorBoundary() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.callbacks = null;\n    _this.unbind = noop;\n\n    _this.onWindowError = function (event) {\n      var callbacks = _this.getCallbacks();\n\n      if (callbacks.isDragging()) {\n        callbacks.tryAbort();\n        process.env.NODE_ENV !== \"production\" ? warning(\"\\n        An error was caught by our window 'error' event listener while a drag was occurring.\\n        The active drag has been aborted.\\n      \") : void 0;\n      }\n\n      var err = event.error;\n\n      if (err instanceof RbdInvariant) {\n        event.preventDefault();\n\n        if (process.env.NODE_ENV !== 'production') {\n          error(err.message);\n        }\n      }\n    };\n\n    _this.getCallbacks = function () {\n      if (!_this.callbacks) {\n        throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n      }\n\n      return _this.callbacks;\n    };\n\n    _this.setCallbacks = function (callbacks) {\n      _this.callbacks = callbacks;\n    };\n\n    return _this;\n  }\n\n  var _proto = ErrorBoundary.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.unbind = bindEvents(window, [{\n      eventName: 'error',\n      fn: this.onWindowError\n    }]);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.unbind();\n  };\n\n  _proto.componentDidCatch = function componentDidCatch(err) {\n    if (err instanceof RbdInvariant) {\n      if (process.env.NODE_ENV !== 'production') {\n        error(err.message);\n      }\n\n      this.setState({});\n      return;\n    }\n\n    throw err;\n  };\n\n  _proto.render = function render() {\n    return this.props.children(this.setCallbacks);\n  };\n\n  return ErrorBoundary;\n}(React.Component);\n\nvar liftInstruction = \"Draggable item. Ensure your screen reader is not in browse mode and then press space bar to lift.\";\n\nvar position = function position(index) {\n  return index + 1;\n};\n\nvar onDragStart = function onDragStart(start) {\n  return \"\\n  You have lifted an item in position \" + position(start.source.index) + \".\\n  Use the arrow keys to move, space bar to drop, and escape to cancel.\\n\";\n};\n\nvar withLocation = function withLocation(source, destination) {\n  var isInHomeList = source.droppableId === destination.droppableId;\n  var startPosition = position(source.index);\n  var endPosition = position(destination.index);\n\n  if (isInHomeList) {\n    return \"\\n      You have moved the item from position \" + startPosition + \"\\n      to position \" + endPosition + \"\\n    \";\n  }\n\n  return \"\\n    You have moved the item from position \" + startPosition + \"\\n    in list \" + source.droppableId + \"\\n    to list \" + destination.droppableId + \"\\n    in position \" + endPosition + \"\\n  \";\n};\n\nvar withCombine = function withCombine(id, source, combine) {\n  var inHomeList = source.droppableId === combine.droppableId;\n\n  if (inHomeList) {\n    return \"\\n      The item \" + id + \"\\n      has been combined with \" + combine.draggableId;\n  }\n\n  return \"\\n      The item \" + id + \"\\n      in list \" + source.droppableId + \"\\n      has been combined with \" + combine.draggableId + \"\\n      in list \" + combine.droppableId + \"\\n    \";\n};\n\nvar onDragUpdate = function onDragUpdate(update) {\n  var location = update.destination;\n\n  if (location) {\n    return withLocation(update.source, location);\n  }\n\n  var combine = update.combine;\n\n  if (combine) {\n    return withCombine(update.draggableId, update.source, combine);\n  }\n\n  return 'You are over an area that cannot be dropped on';\n};\n\nvar returnedToStart = function returnedToStart(source) {\n  return \"\\n  The item has returned to its starting position\\n  of \" + position(source.index) + \"\\n\";\n};\n\nvar onDragEnd = function onDragEnd(result) {\n  if (result.reason === 'CANCEL') {\n    return \"\\n      Movement cancelled.\\n      \" + returnedToStart(result.source) + \"\\n    \";\n  }\n\n  var location = result.destination;\n  var combine = result.combine;\n\n  if (location) {\n    return \"\\n      You have dropped the item.\\n      \" + withLocation(result.source, location) + \"\\n    \";\n  }\n\n  if (combine) {\n    return \"\\n      You have dropped the item.\\n      \" + withCombine(result.draggableId, result.source, combine) + \"\\n    \";\n  }\n\n  return \"\\n    The item has been dropped while not over a drop area.\\n    \" + returnedToStart(result.source) + \"\\n  \";\n};\n\nvar preset = {\n  liftInstruction: liftInstruction,\n  onDragStart: onDragStart,\n  onDragUpdate: onDragUpdate,\n  onDragEnd: onDragEnd\n};\n\nvar origin = {\n  x: 0,\n  y: 0\n};\nvar add = function add(point1, point2) {\n  return {\n    x: point1.x + point2.x,\n    y: point1.y + point2.y\n  };\n};\nvar subtract = function subtract(point1, point2) {\n  return {\n    x: point1.x - point2.x,\n    y: point1.y - point2.y\n  };\n};\nvar isEqual = function isEqual(point1, point2) {\n  return point1.x === point2.x && point1.y === point2.y;\n};\nvar negate = function negate(point) {\n  return {\n    x: point.x !== 0 ? -point.x : 0,\n    y: point.y !== 0 ? -point.y : 0\n  };\n};\nvar patch = function patch(line, value, otherValue) {\n  var _ref;\n\n  if (otherValue === void 0) {\n    otherValue = 0;\n  }\n\n  return _ref = {}, _ref[line] = value, _ref[line === 'x' ? 'y' : 'x'] = otherValue, _ref;\n};\nvar distance = function distance(point1, point2) {\n  return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\n};\nvar closest = function closest(target, points) {\n  return Math.min.apply(Math, points.map(function (point) {\n    return distance(target, point);\n  }));\n};\nvar apply = function apply(fn) {\n  return function (point) {\n    return {\n      x: fn(point.x),\n      y: fn(point.y)\n    };\n  };\n};\n\nvar executeClip = (function (frame, subject) {\n  var result = getRect({\n    top: Math.max(subject.top, frame.top),\n    right: Math.min(subject.right, frame.right),\n    bottom: Math.min(subject.bottom, frame.bottom),\n    left: Math.max(subject.left, frame.left)\n  });\n\n  if (result.width <= 0 || result.height <= 0) {\n    return null;\n  }\n\n  return result;\n});\n\nvar offsetByPosition = function offsetByPosition(spacing, point) {\n  return {\n    top: spacing.top + point.y,\n    left: spacing.left + point.x,\n    bottom: spacing.bottom + point.y,\n    right: spacing.right + point.x\n  };\n};\nvar getCorners = function getCorners(spacing) {\n  return [{\n    x: spacing.left,\n    y: spacing.top\n  }, {\n    x: spacing.right,\n    y: spacing.top\n  }, {\n    x: spacing.left,\n    y: spacing.bottom\n  }, {\n    x: spacing.right,\n    y: spacing.bottom\n  }];\n};\nvar noSpacing = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0\n};\n\nvar scroll = function scroll(target, frame) {\n  if (!frame) {\n    return target;\n  }\n\n  return offsetByPosition(target, frame.scroll.diff.displacement);\n};\n\nvar increase = function increase(target, axis, withPlaceholder) {\n  if (withPlaceholder && withPlaceholder.increasedBy) {\n    var _extends2;\n\n    return _extends({}, target, (_extends2 = {}, _extends2[axis.end] = target[axis.end] + withPlaceholder.increasedBy[axis.line], _extends2));\n  }\n\n  return target;\n};\n\nvar clip = function clip(target, frame) {\n  if (frame && frame.shouldClipSubject) {\n    return executeClip(frame.pageMarginBox, target);\n  }\n\n  return getRect(target);\n};\n\nvar getSubject = (function (_ref) {\n  var page = _ref.page,\n      withPlaceholder = _ref.withPlaceholder,\n      axis = _ref.axis,\n      frame = _ref.frame;\n  var scrolled = scroll(page.marginBox, frame);\n  var increased = increase(scrolled, axis, withPlaceholder);\n  var clipped = clip(increased, frame);\n  return {\n    page: page,\n    withPlaceholder: withPlaceholder,\n    active: clipped\n  };\n});\n\nvar scrollDroppable = (function (droppable, newScroll) {\n  !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n  var scrollable = droppable.frame;\n  var scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n  var scrollDisplacement = negate(scrollDiff);\n\n  var frame = _extends({}, scrollable, {\n    scroll: {\n      initial: scrollable.scroll.initial,\n      current: newScroll,\n      diff: {\n        value: scrollDiff,\n        displacement: scrollDisplacement\n      },\n      max: scrollable.scroll.max\n    }\n  });\n\n  var subject = getSubject({\n    page: droppable.subject.page,\n    withPlaceholder: droppable.subject.withPlaceholder,\n    axis: droppable.axis,\n    frame: frame\n  });\n\n  var result = _extends({}, droppable, {\n    frame: frame,\n    subject: subject\n  });\n\n  return result;\n});\n\nfunction values(map) {\n  return _Object$values(map);\n}\nfunction findIndex(list, predicate) {\n  if (list.findIndex) {\n    return list.findIndex(predicate);\n  }\n\n  for (var i = 0; i < list.length; i++) {\n    if (predicate(list[i])) {\n      return i;\n    }\n  }\n\n  return -1;\n}\nfunction find(list, predicate) {\n  if (list.find) {\n    return list.find(predicate);\n  }\n\n  var index = findIndex(list, predicate);\n\n  if (index !== -1) {\n    return list[index];\n  }\n\n  return undefined;\n}\nfunction toArray(list) {\n  return Array.prototype.slice.call(list);\n}\n\nvar toDroppableMap = memoizeOne(function (droppables) {\n  return droppables.reduce(function (previous, current) {\n    previous[current.descriptor.id] = current;\n    return previous;\n  }, {});\n});\nvar toDraggableMap = memoizeOne(function (draggables) {\n  return draggables.reduce(function (previous, current) {\n    previous[current.descriptor.id] = current;\n    return previous;\n  }, {});\n});\nvar toDroppableList = memoizeOne(function (droppables) {\n  return values(droppables);\n});\nvar toDraggableList = memoizeOne(function (draggables) {\n  return values(draggables);\n});\n\nvar getDraggablesInsideDroppable = memoizeOne(function (droppableId, draggables) {\n  var result = toDraggableList(draggables).filter(function (draggable) {\n    return droppableId === draggable.descriptor.droppableId;\n  }).sort(function (a, b) {\n    return a.descriptor.index - b.descriptor.index;\n  });\n  return result;\n});\n\nfunction tryGetDestination(impact) {\n  if (impact.at && impact.at.type === 'REORDER') {\n    return impact.at.destination;\n  }\n\n  return null;\n}\nfunction tryGetCombine(impact) {\n  if (impact.at && impact.at.type === 'COMBINE') {\n    return impact.at.combine;\n  }\n\n  return null;\n}\n\nvar removeDraggableFromList = memoizeOne(function (remove, list) {\n  return list.filter(function (item) {\n    return item.descriptor.id !== remove.descriptor.id;\n  });\n});\n\nvar moveToNextCombine = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      draggable = _ref.draggable,\n      destination = _ref.destination,\n      insideDestination = _ref.insideDestination,\n      previousImpact = _ref.previousImpact;\n\n  if (!destination.isCombineEnabled) {\n    return null;\n  }\n\n  var location = tryGetDestination(previousImpact);\n\n  if (!location) {\n    return null;\n  }\n\n  function getImpact(target) {\n    var at = {\n      type: 'COMBINE',\n      combine: {\n        draggableId: target,\n        droppableId: destination.descriptor.id\n      }\n    };\n    return _extends({}, previousImpact, {\n      at: at\n    });\n  }\n\n  var all = previousImpact.displaced.all;\n  var closestId = all.length ? all[0] : null;\n\n  if (isMovingForward) {\n    return closestId ? getImpact(closestId) : null;\n  }\n\n  var withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n\n  if (!closestId) {\n    if (!withoutDraggable.length) {\n      return null;\n    }\n\n    var last = withoutDraggable[withoutDraggable.length - 1];\n    return getImpact(last.descriptor.id);\n  }\n\n  var indexOfClosest = findIndex(withoutDraggable, function (d) {\n    return d.descriptor.id === closestId;\n  });\n  !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant(false) : void 0;\n  var proposedIndex = indexOfClosest - 1;\n\n  if (proposedIndex < 0) {\n    return null;\n  }\n\n  var before = withoutDraggable[proposedIndex];\n  return getImpact(before.descriptor.id);\n});\n\nvar isHomeOf = (function (draggable, destination) {\n  return draggable.descriptor.droppableId === destination.descriptor.id;\n});\n\nvar noDisplacedBy = {\n  point: origin,\n  value: 0\n};\nvar emptyGroups = {\n  invisible: {},\n  visible: {},\n  all: []\n};\nvar noImpact = {\n  displaced: emptyGroups,\n  displacedBy: noDisplacedBy,\n  at: null\n};\n\nvar isWithin = (function (lowerBound, upperBound) {\n  return function (value) {\n    return lowerBound <= value && value <= upperBound;\n  };\n});\n\nvar isPartiallyVisibleThroughFrame = (function (frame) {\n  var isWithinVertical = isWithin(frame.top, frame.bottom);\n  var isWithinHorizontal = isWithin(frame.left, frame.right);\n  return function (subject) {\n    var isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n\n    if (isContained) {\n      return true;\n    }\n\n    var isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n    var isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n    var isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n\n    if (isPartiallyContained) {\n      return true;\n    }\n\n    var isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n    var isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n    var isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n\n    if (isTargetBiggerThanFrame) {\n      return true;\n    }\n\n    var isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n    return isTargetBiggerOnOneAxis;\n  };\n});\n\nvar isTotallyVisibleThroughFrame = (function (frame) {\n  var isWithinVertical = isWithin(frame.top, frame.bottom);\n  var isWithinHorizontal = isWithin(frame.left, frame.right);\n  return function (subject) {\n    var isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n    return isContained;\n  };\n});\n\nvar vertical = {\n  direction: 'vertical',\n  line: 'y',\n  crossAxisLine: 'x',\n  start: 'top',\n  end: 'bottom',\n  size: 'height',\n  crossAxisStart: 'left',\n  crossAxisEnd: 'right',\n  crossAxisSize: 'width'\n};\nvar horizontal = {\n  direction: 'horizontal',\n  line: 'x',\n  crossAxisLine: 'y',\n  start: 'left',\n  end: 'right',\n  size: 'width',\n  crossAxisStart: 'top',\n  crossAxisEnd: 'bottom',\n  crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = (function (axis) {\n  return function (frame) {\n    var isWithinVertical = isWithin(frame.top, frame.bottom);\n    var isWithinHorizontal = isWithin(frame.left, frame.right);\n    return function (subject) {\n      if (axis === vertical) {\n        return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n      }\n\n      return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n    };\n  };\n});\n\nvar getDroppableDisplaced = function getDroppableDisplaced(target, destination) {\n  var displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n  return offsetByPosition(target, displacement);\n};\n\nvar isVisibleInDroppable = function isVisibleInDroppable(target, destination, isVisibleThroughFrameFn) {\n  if (!destination.subject.active) {\n    return false;\n  }\n\n  return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\n\nvar isVisibleInViewport = function isVisibleInViewport(target, viewport, isVisibleThroughFrameFn) {\n  return isVisibleThroughFrameFn(viewport)(target);\n};\n\nvar isVisible = function isVisible(_ref) {\n  var toBeDisplaced = _ref.target,\n      destination = _ref.destination,\n      viewport = _ref.viewport,\n      withDroppableDisplacement = _ref.withDroppableDisplacement,\n      isVisibleThroughFrameFn = _ref.isVisibleThroughFrameFn;\n  var displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n  return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\n\nvar isPartiallyVisible = function isPartiallyVisible(args) {\n  return isVisible(_extends({}, args, {\n    isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n  }));\n};\nvar isTotallyVisible = function isTotallyVisible(args) {\n  return isVisible(_extends({}, args, {\n    isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n  }));\n};\nvar isTotallyVisibleOnAxis = function isTotallyVisibleOnAxis(args) {\n  return isVisible(_extends({}, args, {\n    isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n  }));\n};\n\nvar getShouldAnimate = function getShouldAnimate(id, last, forceShouldAnimate) {\n  if (typeof forceShouldAnimate === 'boolean') {\n    return forceShouldAnimate;\n  }\n\n  if (!last) {\n    return true;\n  }\n\n  var invisible = last.invisible,\n      visible = last.visible;\n\n  if (invisible[id]) {\n    return false;\n  }\n\n  var previous = visible[id];\n  return previous ? previous.shouldAnimate : true;\n};\n\nfunction getTarget(draggable, displacedBy) {\n  var marginBox = draggable.page.marginBox;\n  var expandBy = {\n    top: displacedBy.point.y,\n    right: 0,\n    bottom: 0,\n    left: displacedBy.point.x\n  };\n  return getRect(expand(marginBox, expandBy));\n}\n\nfunction getDisplacementGroups(_ref) {\n  var afterDragging = _ref.afterDragging,\n      destination = _ref.destination,\n      displacedBy = _ref.displacedBy,\n      viewport = _ref.viewport,\n      forceShouldAnimate = _ref.forceShouldAnimate,\n      last = _ref.last;\n  return afterDragging.reduce(function process(groups, draggable) {\n    var target = getTarget(draggable, displacedBy);\n    var id = draggable.descriptor.id;\n    groups.all.push(id);\n    var isVisible = isPartiallyVisible({\n      target: target,\n      destination: destination,\n      viewport: viewport,\n      withDroppableDisplacement: true\n    });\n\n    if (!isVisible) {\n      groups.invisible[draggable.descriptor.id] = true;\n      return groups;\n    }\n\n    var shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n    var displacement = {\n      draggableId: id,\n      shouldAnimate: shouldAnimate\n    };\n    groups.visible[id] = displacement;\n    return groups;\n  }, {\n    all: [],\n    visible: {},\n    invisible: {}\n  });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n  if (!draggables.length) {\n    return 0;\n  }\n\n  var indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n  return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\n\nfunction goAtEnd(_ref) {\n  var insideDestination = _ref.insideDestination,\n      inHomeList = _ref.inHomeList,\n      displacedBy = _ref.displacedBy,\n      destination = _ref.destination;\n  var newIndex = getIndexOfLastItem(insideDestination, {\n    inHomeList: inHomeList\n  });\n  return {\n    displaced: emptyGroups,\n    displacedBy: displacedBy,\n    at: {\n      type: 'REORDER',\n      destination: {\n        droppableId: destination.descriptor.id,\n        index: newIndex\n      }\n    }\n  };\n}\n\nfunction calculateReorderImpact(_ref2) {\n  var draggable = _ref2.draggable,\n      insideDestination = _ref2.insideDestination,\n      destination = _ref2.destination,\n      viewport = _ref2.viewport,\n      displacedBy = _ref2.displacedBy,\n      last = _ref2.last,\n      index = _ref2.index,\n      forceShouldAnimate = _ref2.forceShouldAnimate;\n  var inHomeList = isHomeOf(draggable, destination);\n\n  if (index == null) {\n    return goAtEnd({\n      insideDestination: insideDestination,\n      inHomeList: inHomeList,\n      displacedBy: displacedBy,\n      destination: destination\n    });\n  }\n\n  var match = find(insideDestination, function (item) {\n    return item.descriptor.index === index;\n  });\n\n  if (!match) {\n    return goAtEnd({\n      insideDestination: insideDestination,\n      inHomeList: inHomeList,\n      displacedBy: displacedBy,\n      destination: destination\n    });\n  }\n\n  var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n  var sliceFrom = insideDestination.indexOf(match);\n  var impacted = withoutDragging.slice(sliceFrom);\n  var displaced = getDisplacementGroups({\n    afterDragging: impacted,\n    destination: destination,\n    displacedBy: displacedBy,\n    last: last,\n    viewport: viewport.frame,\n    forceShouldAnimate: forceShouldAnimate\n  });\n  return {\n    displaced: displaced,\n    displacedBy: displacedBy,\n    at: {\n      type: 'REORDER',\n      destination: {\n        droppableId: destination.descriptor.id,\n        index: index\n      }\n    }\n  };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n  return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      destination = _ref.destination,\n      draggables = _ref.draggables,\n      combine = _ref.combine,\n      afterCritical = _ref.afterCritical;\n\n  if (!destination.isCombineEnabled) {\n    return null;\n  }\n\n  var combineId = combine.draggableId;\n  var combineWith = draggables[combineId];\n  var combineWithIndex = combineWith.descriptor.index;\n  var didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n\n  if (didCombineWithStartAfterCritical) {\n    if (isMovingForward) {\n      return combineWithIndex;\n    }\n\n    return combineWithIndex - 1;\n  }\n\n  if (isMovingForward) {\n    return combineWithIndex + 1;\n  }\n\n  return combineWithIndex;\n});\n\nvar fromReorder = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      isInHomeList = _ref.isInHomeList,\n      insideDestination = _ref.insideDestination,\n      location = _ref.location;\n\n  if (!insideDestination.length) {\n    return null;\n  }\n\n  var currentIndex = location.index;\n  var proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n  var firstIndex = insideDestination[0].descriptor.index;\n  var lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n  var upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n\n  if (proposedIndex < firstIndex) {\n    return null;\n  }\n\n  if (proposedIndex > upperBound) {\n    return null;\n  }\n\n  return proposedIndex;\n});\n\nvar moveToNextIndex = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      isInHomeList = _ref.isInHomeList,\n      draggable = _ref.draggable,\n      draggables = _ref.draggables,\n      destination = _ref.destination,\n      insideDestination = _ref.insideDestination,\n      previousImpact = _ref.previousImpact,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n  var wasAt = previousImpact.at;\n  !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant(false) : void 0;\n\n  if (wasAt.type === 'REORDER') {\n    var _newIndex = fromReorder({\n      isMovingForward: isMovingForward,\n      isInHomeList: isInHomeList,\n      location: wasAt.destination,\n      insideDestination: insideDestination\n    });\n\n    if (_newIndex == null) {\n      return null;\n    }\n\n    return calculateReorderImpact({\n      draggable: draggable,\n      insideDestination: insideDestination,\n      destination: destination,\n      viewport: viewport,\n      last: previousImpact.displaced,\n      displacedBy: previousImpact.displacedBy,\n      index: _newIndex\n    });\n  }\n\n  var newIndex = fromCombine({\n    isMovingForward: isMovingForward,\n    destination: destination,\n    displaced: previousImpact.displaced,\n    draggables: draggables,\n    combine: wasAt.combine,\n    afterCritical: afterCritical\n  });\n\n  if (newIndex == null) {\n    return null;\n  }\n\n  return calculateReorderImpact({\n    draggable: draggable,\n    insideDestination: insideDestination,\n    destination: destination,\n    viewport: viewport,\n    last: previousImpact.displaced,\n    displacedBy: previousImpact.displacedBy,\n    index: newIndex\n  });\n});\n\nvar getCombinedItemDisplacement = (function (_ref) {\n  var displaced = _ref.displaced,\n      afterCritical = _ref.afterCritical,\n      combineWith = _ref.combineWith,\n      displacedBy = _ref.displacedBy;\n  var isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n\n  if (didStartAfterCritical(combineWith, afterCritical)) {\n    return isDisplaced ? origin : negate(displacedBy.point);\n  }\n\n  return isDisplaced ? displacedBy.point : origin;\n});\n\nvar whenCombining = (function (_ref) {\n  var afterCritical = _ref.afterCritical,\n      impact = _ref.impact,\n      draggables = _ref.draggables;\n  var combine = tryGetCombine(impact);\n  !combine ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n  var combineWith = combine.draggableId;\n  var center = draggables[combineWith].page.borderBox.center;\n  var displaceBy = getCombinedItemDisplacement({\n    displaced: impact.displaced,\n    afterCritical: afterCritical,\n    combineWith: combineWith,\n    displacedBy: impact.displacedBy\n  });\n  return add(center, displaceBy);\n});\n\nvar distanceFromStartToBorderBoxCenter = function distanceFromStartToBorderBoxCenter(axis, box) {\n  return box.margin[axis.start] + box.borderBox[axis.size] / 2;\n};\n\nvar distanceFromEndToBorderBoxCenter = function distanceFromEndToBorderBoxCenter(axis, box) {\n  return box.margin[axis.end] + box.borderBox[axis.size] / 2;\n};\n\nvar getCrossAxisBorderBoxCenter = function getCrossAxisBorderBoxCenter(axis, target, isMoving) {\n  return target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\n};\n\nvar goAfter = function goAfter(_ref) {\n  var axis = _ref.axis,\n      moveRelativeTo = _ref.moveRelativeTo,\n      isMoving = _ref.isMoving;\n  return patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\n};\nvar goBefore = function goBefore(_ref2) {\n  var axis = _ref2.axis,\n      moveRelativeTo = _ref2.moveRelativeTo,\n      isMoving = _ref2.isMoving;\n  return patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\n};\nvar goIntoStart = function goIntoStart(_ref3) {\n  var axis = _ref3.axis,\n      moveInto = _ref3.moveInto,\n      isMoving = _ref3.isMoving;\n  return patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n};\n\nvar whenReordering = (function (_ref) {\n  var impact = _ref.impact,\n      draggable = _ref.draggable,\n      draggables = _ref.draggables,\n      droppable = _ref.droppable,\n      afterCritical = _ref.afterCritical;\n  var insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n  var draggablePage = draggable.page;\n  var axis = droppable.axis;\n\n  if (!insideDestination.length) {\n    return goIntoStart({\n      axis: axis,\n      moveInto: droppable.page,\n      isMoving: draggablePage\n    });\n  }\n\n  var displaced = impact.displaced,\n      displacedBy = impact.displacedBy;\n  var closestAfter = displaced.all[0];\n\n  if (closestAfter) {\n    var closest = draggables[closestAfter];\n\n    if (didStartAfterCritical(closestAfter, afterCritical)) {\n      return goBefore({\n        axis: axis,\n        moveRelativeTo: closest.page,\n        isMoving: draggablePage\n      });\n    }\n\n    var withDisplacement = offset(closest.page, displacedBy.point);\n    return goBefore({\n      axis: axis,\n      moveRelativeTo: withDisplacement,\n      isMoving: draggablePage\n    });\n  }\n\n  var last = insideDestination[insideDestination.length - 1];\n\n  if (last.descriptor.id === draggable.descriptor.id) {\n    return draggablePage.borderBox.center;\n  }\n\n  if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n    var page = offset(last.page, negate(afterCritical.displacedBy.point));\n    return goAfter({\n      axis: axis,\n      moveRelativeTo: page,\n      isMoving: draggablePage\n    });\n  }\n\n  return goAfter({\n    axis: axis,\n    moveRelativeTo: last.page,\n    isMoving: draggablePage\n  });\n});\n\nvar withDroppableDisplacement = (function (droppable, point) {\n  var frame = droppable.frame;\n\n  if (!frame) {\n    return point;\n  }\n\n  return add(point, frame.scroll.diff.displacement);\n});\n\nvar getResultWithoutDroppableDisplacement = function getResultWithoutDroppableDisplacement(_ref) {\n  var impact = _ref.impact,\n      draggable = _ref.draggable,\n      droppable = _ref.droppable,\n      draggables = _ref.draggables,\n      afterCritical = _ref.afterCritical;\n  var original = draggable.page.borderBox.center;\n  var at = impact.at;\n\n  if (!droppable) {\n    return original;\n  }\n\n  if (!at) {\n    return original;\n  }\n\n  if (at.type === 'REORDER') {\n    return whenReordering({\n      impact: impact,\n      draggable: draggable,\n      draggables: draggables,\n      droppable: droppable,\n      afterCritical: afterCritical\n    });\n  }\n\n  return whenCombining({\n    impact: impact,\n    draggables: draggables,\n    afterCritical: afterCritical\n  });\n};\n\nvar getPageBorderBoxCenterFromImpact = (function (args) {\n  var withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n  var droppable = args.droppable;\n  var withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n  return withDisplacement;\n});\n\nvar scrollViewport = (function (viewport, newScroll) {\n  var diff = subtract(newScroll, viewport.scroll.initial);\n  var displacement = negate(diff);\n  var frame = getRect({\n    top: newScroll.y,\n    bottom: newScroll.y + viewport.frame.height,\n    left: newScroll.x,\n    right: newScroll.x + viewport.frame.width\n  });\n  var updated = {\n    frame: frame,\n    scroll: {\n      initial: viewport.scroll.initial,\n      max: viewport.scroll.max,\n      current: newScroll,\n      diff: {\n        value: diff,\n        displacement: displacement\n      }\n    }\n  };\n  return updated;\n});\n\nfunction getDraggables(ids, draggables) {\n  return ids.map(function (id) {\n    return draggables[id];\n  });\n}\n\nfunction tryGetVisible(id, groups) {\n  for (var i = 0; i < groups.length; i++) {\n    var displacement = groups[i].visible[id];\n\n    if (displacement) {\n      return displacement;\n    }\n  }\n\n  return null;\n}\n\nvar speculativelyIncrease = (function (_ref) {\n  var impact = _ref.impact,\n      viewport = _ref.viewport,\n      destination = _ref.destination,\n      draggables = _ref.draggables,\n      maxScrollChange = _ref.maxScrollChange;\n  var scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n  var scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n  var last = impact.displaced;\n  var withViewportScroll = getDisplacementGroups({\n    afterDragging: getDraggables(last.all, draggables),\n    destination: destination,\n    displacedBy: impact.displacedBy,\n    viewport: scrolledViewport.frame,\n    last: last,\n    forceShouldAnimate: false\n  });\n  var withDroppableScroll = getDisplacementGroups({\n    afterDragging: getDraggables(last.all, draggables),\n    destination: scrolledDroppable,\n    displacedBy: impact.displacedBy,\n    viewport: viewport.frame,\n    last: last,\n    forceShouldAnimate: false\n  });\n  var invisible = {};\n  var visible = {};\n  var groups = [last, withViewportScroll, withDroppableScroll];\n  last.all.forEach(function (id) {\n    var displacement = tryGetVisible(id, groups);\n\n    if (displacement) {\n      visible[id] = displacement;\n      return;\n    }\n\n    invisible[id] = true;\n  });\n\n  var newImpact = _extends({}, impact, {\n    displaced: {\n      all: last.all,\n      invisible: invisible,\n      visible: visible\n    }\n  });\n\n  return newImpact;\n});\n\nvar withViewportDisplacement = (function (viewport, point) {\n  return add(viewport.scroll.diff.displacement, point);\n});\n\nvar getClientFromPageBorderBoxCenter = (function (_ref) {\n  var pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n      draggable = _ref.draggable,\n      viewport = _ref.viewport;\n  var withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n  var offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n  return add(draggable.client.borderBox.center, offset);\n});\n\nvar isTotallyVisibleInNewLocation = (function (_ref) {\n  var draggable = _ref.draggable,\n      destination = _ref.destination,\n      newPageBorderBoxCenter = _ref.newPageBorderBoxCenter,\n      viewport = _ref.viewport,\n      withDroppableDisplacement = _ref.withDroppableDisplacement,\n      _ref$onlyOnMainAxis = _ref.onlyOnMainAxis,\n      onlyOnMainAxis = _ref$onlyOnMainAxis === void 0 ? false : _ref$onlyOnMainAxis;\n  var changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n  var shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n  var args = {\n    target: shifted,\n    destination: destination,\n    withDroppableDisplacement: withDroppableDisplacement,\n    viewport: viewport\n  };\n  return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n});\n\nvar moveToNextPlace = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      draggable = _ref.draggable,\n      destination = _ref.destination,\n      draggables = _ref.draggables,\n      previousImpact = _ref.previousImpact,\n      viewport = _ref.viewport,\n      previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n      previousClientSelection = _ref.previousClientSelection,\n      afterCritical = _ref.afterCritical;\n\n  if (!destination.isEnabled) {\n    return null;\n  }\n\n  var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n  var isInHomeList = isHomeOf(draggable, destination);\n  var impact = moveToNextCombine({\n    isMovingForward: isMovingForward,\n    draggable: draggable,\n    destination: destination,\n    insideDestination: insideDestination,\n    previousImpact: previousImpact\n  }) || moveToNextIndex({\n    isMovingForward: isMovingForward,\n    isInHomeList: isInHomeList,\n    draggable: draggable,\n    draggables: draggables,\n    destination: destination,\n    insideDestination: insideDestination,\n    previousImpact: previousImpact,\n    viewport: viewport,\n    afterCritical: afterCritical\n  });\n\n  if (!impact) {\n    return null;\n  }\n\n  var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n    impact: impact,\n    draggable: draggable,\n    droppable: destination,\n    draggables: draggables,\n    afterCritical: afterCritical\n  });\n  var isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n    draggable: draggable,\n    destination: destination,\n    newPageBorderBoxCenter: pageBorderBoxCenter,\n    viewport: viewport.frame,\n    withDroppableDisplacement: false,\n    onlyOnMainAxis: true\n  });\n\n  if (isVisibleInNewLocation) {\n    var clientSelection = getClientFromPageBorderBoxCenter({\n      pageBorderBoxCenter: pageBorderBoxCenter,\n      draggable: draggable,\n      viewport: viewport\n    });\n    return {\n      clientSelection: clientSelection,\n      impact: impact,\n      scrollJumpRequest: null\n    };\n  }\n\n  var distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n  var cautious = speculativelyIncrease({\n    impact: impact,\n    viewport: viewport,\n    destination: destination,\n    draggables: draggables,\n    maxScrollChange: distance\n  });\n  return {\n    clientSelection: previousClientSelection,\n    impact: cautious,\n    scrollJumpRequest: distance\n  };\n});\n\nvar getKnownActive = function getKnownActive(droppable) {\n  var rect = droppable.subject.active;\n  !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant(false) : void 0;\n  return rect;\n};\n\nvar getBestCrossAxisDroppable = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n      source = _ref.source,\n      droppables = _ref.droppables,\n      viewport = _ref.viewport;\n  var active = source.subject.active;\n\n  if (!active) {\n    return null;\n  }\n\n  var axis = source.axis;\n  var isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n  var candidates = toDroppableList(droppables).filter(function (droppable) {\n    return droppable !== source;\n  }).filter(function (droppable) {\n    return droppable.isEnabled;\n  }).filter(function (droppable) {\n    return Boolean(droppable.subject.active);\n  }).filter(function (droppable) {\n    return isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable));\n  }).filter(function (droppable) {\n    var activeOfTarget = getKnownActive(droppable);\n\n    if (isMovingForward) {\n      return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n    }\n\n    return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n  }).filter(function (droppable) {\n    var activeOfTarget = getKnownActive(droppable);\n    var isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n    return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n  }).sort(function (a, b) {\n    var first = getKnownActive(a)[axis.crossAxisStart];\n    var second = getKnownActive(b)[axis.crossAxisStart];\n\n    if (isMovingForward) {\n      return first - second;\n    }\n\n    return second - first;\n  }).filter(function (droppable, index, array) {\n    return getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart];\n  });\n\n  if (!candidates.length) {\n    return null;\n  }\n\n  if (candidates.length === 1) {\n    return candidates[0];\n  }\n\n  var contains = candidates.filter(function (droppable) {\n    var isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n    return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n  });\n\n  if (contains.length === 1) {\n    return contains[0];\n  }\n\n  if (contains.length > 1) {\n    return contains.sort(function (a, b) {\n      return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n    })[0];\n  }\n\n  return candidates.sort(function (a, b) {\n    var first = closest(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n    var second = closest(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n\n    if (first !== second) {\n      return first - second;\n    }\n\n    return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n  })[0];\n});\n\nvar getCurrentPageBorderBoxCenter = function getCurrentPageBorderBoxCenter(draggable, afterCritical) {\n  var original = draggable.page.borderBox.center;\n  return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nvar getCurrentPageBorderBox = function getCurrentPageBorderBox(draggable, afterCritical) {\n  var original = draggable.page.borderBox;\n  return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = (function (_ref) {\n  var pageBorderBoxCenter = _ref.pageBorderBoxCenter,\n      viewport = _ref.viewport,\n      destination = _ref.destination,\n      insideDestination = _ref.insideDestination,\n      afterCritical = _ref.afterCritical;\n  var sorted = insideDestination.filter(function (draggable) {\n    return isTotallyVisible({\n      target: getCurrentPageBorderBox(draggable, afterCritical),\n      destination: destination,\n      viewport: viewport.frame,\n      withDroppableDisplacement: true\n    });\n  }).sort(function (a, b) {\n    var distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n    var distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n\n    if (distanceToA < distanceToB) {\n      return -1;\n    }\n\n    if (distanceToB < distanceToA) {\n      return 1;\n    }\n\n    return a.descriptor.index - b.descriptor.index;\n  });\n  return sorted[0] || null;\n});\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n  var displacement = displaceBy[axis.line];\n  return {\n    value: displacement,\n    point: patch(axis.line, displacement)\n  };\n});\n\nvar getRequiredGrowthForPlaceholder = function getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables) {\n  var axis = droppable.axis;\n\n  if (droppable.descriptor.mode === 'virtual') {\n    return patch(axis.line, placeholderSize[axis.line]);\n  }\n\n  var availableSpace = droppable.subject.page.contentBox[axis.size];\n  var insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n  var spaceUsed = insideDroppable.reduce(function (sum, dimension) {\n    return sum + dimension.client.marginBox[axis.size];\n  }, 0);\n  var requiredSpace = spaceUsed + placeholderSize[axis.line];\n  var needsToGrowBy = requiredSpace - availableSpace;\n\n  if (needsToGrowBy <= 0) {\n    return null;\n  }\n\n  return patch(axis.line, needsToGrowBy);\n};\n\nvar withMaxScroll = function withMaxScroll(frame, max) {\n  return _extends({}, frame, {\n    scroll: _extends({}, frame.scroll, {\n      max: max\n    })\n  });\n};\n\nvar addPlaceholder = function addPlaceholder(droppable, draggable, draggables) {\n  var frame = droppable.frame;\n  !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant(false) : void 0;\n  !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant(false) : void 0;\n  var placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n  var requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n  var added = {\n    placeholderSize: placeholderSize,\n    increasedBy: requiredGrowth,\n    oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n  };\n\n  if (!frame) {\n    var _subject = getSubject({\n      page: droppable.subject.page,\n      withPlaceholder: added,\n      axis: droppable.axis,\n      frame: droppable.frame\n    });\n\n    return _extends({}, droppable, {\n      subject: _subject\n    });\n  }\n\n  var maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n  var newFrame = withMaxScroll(frame, maxScroll);\n  var subject = getSubject({\n    page: droppable.subject.page,\n    withPlaceholder: added,\n    axis: droppable.axis,\n    frame: newFrame\n  });\n  return _extends({}, droppable, {\n    subject: subject,\n    frame: newFrame\n  });\n};\nvar removePlaceholder = function removePlaceholder(droppable) {\n  var added = droppable.subject.withPlaceholder;\n  !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant(false) : void 0;\n  var frame = droppable.frame;\n\n  if (!frame) {\n    var _subject2 = getSubject({\n      page: droppable.subject.page,\n      axis: droppable.axis,\n      frame: null,\n      withPlaceholder: null\n    });\n\n    return _extends({}, droppable, {\n      subject: _subject2\n    });\n  }\n\n  var oldMaxScroll = added.oldFrameMaxScroll;\n  !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant(false) : void 0;\n  var newFrame = withMaxScroll(frame, oldMaxScroll);\n  var subject = getSubject({\n    page: droppable.subject.page,\n    axis: droppable.axis,\n    frame: newFrame,\n    withPlaceholder: null\n  });\n  return _extends({}, droppable, {\n    subject: subject,\n    frame: newFrame\n  });\n};\n\nvar moveToNewDroppable = (function (_ref) {\n  var previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n      moveRelativeTo = _ref.moveRelativeTo,\n      insideDestination = _ref.insideDestination,\n      draggable = _ref.draggable,\n      draggables = _ref.draggables,\n      destination = _ref.destination,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n\n  if (!moveRelativeTo) {\n    if (insideDestination.length) {\n      return null;\n    }\n\n    var proposed = {\n      displaced: emptyGroups,\n      displacedBy: noDisplacedBy,\n      at: {\n        type: 'REORDER',\n        destination: {\n          droppableId: destination.descriptor.id,\n          index: 0\n        }\n      }\n    };\n    var proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n      impact: proposed,\n      draggable: draggable,\n      droppable: destination,\n      draggables: draggables,\n      afterCritical: afterCritical\n    });\n    var withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n    var isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n      draggable: draggable,\n      destination: withPlaceholder,\n      newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n      viewport: viewport.frame,\n      withDroppableDisplacement: false,\n      onlyOnMainAxis: true\n    });\n    return isVisibleInNewLocation ? proposed : null;\n  }\n\n  var isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n\n  var proposedIndex = function () {\n    var relativeTo = moveRelativeTo.descriptor.index;\n\n    if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n      return relativeTo;\n    }\n\n    if (isGoingBeforeTarget) {\n      return relativeTo;\n    }\n\n    return relativeTo + 1;\n  }();\n\n  var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n  return calculateReorderImpact({\n    draggable: draggable,\n    insideDestination: insideDestination,\n    destination: destination,\n    viewport: viewport,\n    displacedBy: displacedBy,\n    last: emptyGroups,\n    index: proposedIndex\n  });\n});\n\nvar moveCrossAxis = (function (_ref) {\n  var isMovingForward = _ref.isMovingForward,\n      previousPageBorderBoxCenter = _ref.previousPageBorderBoxCenter,\n      draggable = _ref.draggable,\n      isOver = _ref.isOver,\n      draggables = _ref.draggables,\n      droppables = _ref.droppables,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n  var destination = getBestCrossAxisDroppable({\n    isMovingForward: isMovingForward,\n    pageBorderBoxCenter: previousPageBorderBoxCenter,\n    source: isOver,\n    droppables: droppables,\n    viewport: viewport\n  });\n\n  if (!destination) {\n    return null;\n  }\n\n  var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n  var moveRelativeTo = getClosestDraggable({\n    pageBorderBoxCenter: previousPageBorderBoxCenter,\n    viewport: viewport,\n    destination: destination,\n    insideDestination: insideDestination,\n    afterCritical: afterCritical\n  });\n  var impact = moveToNewDroppable({\n    previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n    destination: destination,\n    draggable: draggable,\n    draggables: draggables,\n    moveRelativeTo: moveRelativeTo,\n    insideDestination: insideDestination,\n    viewport: viewport,\n    afterCritical: afterCritical\n  });\n\n  if (!impact) {\n    return null;\n  }\n\n  var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n    impact: impact,\n    draggable: draggable,\n    droppable: destination,\n    draggables: draggables,\n    afterCritical: afterCritical\n  });\n  var clientSelection = getClientFromPageBorderBoxCenter({\n    pageBorderBoxCenter: pageBorderBoxCenter,\n    draggable: draggable,\n    viewport: viewport\n  });\n  return {\n    clientSelection: clientSelection,\n    impact: impact,\n    scrollJumpRequest: null\n  };\n});\n\nvar whatIsDraggedOver = (function (impact) {\n  var at = impact.at;\n\n  if (!at) {\n    return null;\n  }\n\n  if (at.type === 'REORDER') {\n    return at.destination.droppableId;\n  }\n\n  return at.combine.droppableId;\n});\n\nvar getDroppableOver = function getDroppableOver(impact, droppables) {\n  var id = whatIsDraggedOver(impact);\n  return id ? droppables[id] : null;\n};\n\nvar moveInDirection = (function (_ref) {\n  var state = _ref.state,\n      type = _ref.type;\n  var isActuallyOver = getDroppableOver(state.impact, state.dimensions.droppables);\n  var isMainAxisMovementAllowed = Boolean(isActuallyOver);\n  var home = state.dimensions.droppables[state.critical.droppable.id];\n  var isOver = isActuallyOver || home;\n  var direction = isOver.axis.direction;\n  var isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n\n  if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n    return null;\n  }\n\n  var isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n  var draggable = state.dimensions.draggables[state.critical.draggable.id];\n  var previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n  var _state$dimensions = state.dimensions,\n      draggables = _state$dimensions.draggables,\n      droppables = _state$dimensions.droppables;\n  return isMovingOnMainAxis ? moveToNextPlace({\n    isMovingForward: isMovingForward,\n    previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n    draggable: draggable,\n    destination: isOver,\n    draggables: draggables,\n    viewport: state.viewport,\n    previousClientSelection: state.current.client.selection,\n    previousImpact: state.impact,\n    afterCritical: state.afterCritical\n  }) : moveCrossAxis({\n    isMovingForward: isMovingForward,\n    previousPageBorderBoxCenter: previousPageBorderBoxCenter,\n    draggable: draggable,\n    isOver: isOver,\n    draggables: draggables,\n    droppables: droppables,\n    viewport: state.viewport,\n    afterCritical: state.afterCritical\n  });\n});\n\nfunction isMovementAllowed(state) {\n  return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n  var isWithinVertical = isWithin(frame.top, frame.bottom);\n  var isWithinHorizontal = isWithin(frame.left, frame.right);\n  return function run(point) {\n    return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n  };\n}\n\nfunction getHasOverlap(first, second) {\n  return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\n\nfunction getFurthestAway(_ref) {\n  var pageBorderBox = _ref.pageBorderBox,\n      draggable = _ref.draggable,\n      candidates = _ref.candidates;\n  var startCenter = draggable.page.borderBox.center;\n  var sorted = candidates.map(function (candidate) {\n    var axis = candidate.axis;\n    var target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n    return {\n      id: candidate.descriptor.id,\n      distance: distance(startCenter, target)\n    };\n  }).sort(function (a, b) {\n    return b.distance - a.distance;\n  });\n  return sorted[0] ? sorted[0].id : null;\n}\n\nfunction getDroppableOver$1(_ref2) {\n  var pageBorderBox = _ref2.pageBorderBox,\n      draggable = _ref2.draggable,\n      droppables = _ref2.droppables;\n  var candidates = toDroppableList(droppables).filter(function (item) {\n    if (!item.isEnabled) {\n      return false;\n    }\n\n    var active = item.subject.active;\n\n    if (!active) {\n      return false;\n    }\n\n    if (!getHasOverlap(pageBorderBox, active)) {\n      return false;\n    }\n\n    if (isPositionInFrame(active)(pageBorderBox.center)) {\n      return true;\n    }\n\n    var axis = item.axis;\n    var childCenter = active.center[axis.crossAxisLine];\n    var crossAxisStart = pageBorderBox[axis.crossAxisStart];\n    var crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n    var isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n    var isStartContained = isContained(crossAxisStart);\n    var isEndContained = isContained(crossAxisEnd);\n\n    if (!isStartContained && !isEndContained) {\n      return true;\n    }\n\n    if (isStartContained) {\n      return crossAxisStart < childCenter;\n    }\n\n    return crossAxisEnd > childCenter;\n  });\n\n  if (!candidates.length) {\n    return null;\n  }\n\n  if (candidates.length === 1) {\n    return candidates[0].descriptor.id;\n  }\n\n  return getFurthestAway({\n    pageBorderBox: pageBorderBox,\n    draggable: draggable,\n    candidates: candidates\n  });\n}\n\nvar offsetRectByPosition = function offsetRectByPosition(rect, point) {\n  return getRect(offsetByPosition(rect, point));\n};\n\nvar withDroppableScroll = (function (droppable, area) {\n  var frame = droppable.frame;\n\n  if (!frame) {\n    return area;\n  }\n\n  return offsetRectByPosition(area, frame.scroll.diff.value);\n});\n\nfunction getIsDisplaced(_ref) {\n  var displaced = _ref.displaced,\n      id = _ref.id;\n  return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex(_ref) {\n  var draggable = _ref.draggable,\n      closest = _ref.closest,\n      inHomeList = _ref.inHomeList;\n\n  if (!closest) {\n    return null;\n  }\n\n  if (!inHomeList) {\n    return closest.descriptor.index;\n  }\n\n  if (closest.descriptor.index > draggable.descriptor.index) {\n    return closest.descriptor.index - 1;\n  }\n\n  return closest.descriptor.index;\n}\n\nvar getReorderImpact = (function (_ref2) {\n  var targetRect = _ref2.pageBorderBoxWithDroppableScroll,\n      draggable = _ref2.draggable,\n      destination = _ref2.destination,\n      insideDestination = _ref2.insideDestination,\n      last = _ref2.last,\n      viewport = _ref2.viewport,\n      afterCritical = _ref2.afterCritical;\n  var axis = destination.axis;\n  var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n  var displacement = displacedBy.value;\n  var targetStart = targetRect[axis.start];\n  var targetEnd = targetRect[axis.end];\n  var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n  var closest = find(withoutDragging, function (child) {\n    var id = child.descriptor.id;\n    var childCenter = child.page.borderBox.center[axis.line];\n    var didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n    var isDisplaced = getIsDisplaced({\n      displaced: last,\n      id: id\n    });\n\n    if (didStartAfterCritical$1) {\n      if (isDisplaced) {\n        return targetEnd <= childCenter;\n      }\n\n      return targetStart < childCenter - displacement;\n    }\n\n    if (isDisplaced) {\n      return targetEnd <= childCenter + displacement;\n    }\n\n    return targetStart < childCenter;\n  });\n  var newIndex = atIndex({\n    draggable: draggable,\n    closest: closest,\n    inHomeList: isHomeOf(draggable, destination)\n  });\n  return calculateReorderImpact({\n    draggable: draggable,\n    insideDestination: insideDestination,\n    destination: destination,\n    viewport: viewport,\n    last: last,\n    displacedBy: displacedBy,\n    index: newIndex\n  });\n});\n\nvar combineThresholdDivisor = 4;\nvar getCombineImpact = (function (_ref) {\n  var draggable = _ref.draggable,\n      targetRect = _ref.pageBorderBoxWithDroppableScroll,\n      previousImpact = _ref.previousImpact,\n      destination = _ref.destination,\n      insideDestination = _ref.insideDestination,\n      afterCritical = _ref.afterCritical;\n\n  if (!destination.isCombineEnabled) {\n    return null;\n  }\n\n  var axis = destination.axis;\n  var displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n  var displacement = displacedBy.value;\n  var targetStart = targetRect[axis.start];\n  var targetEnd = targetRect[axis.end];\n  var withoutDragging = removeDraggableFromList(draggable, insideDestination);\n  var combineWith = find(withoutDragging, function (child) {\n    var id = child.descriptor.id;\n    var childRect = child.page.borderBox;\n    var childSize = childRect[axis.size];\n    var threshold = childSize / combineThresholdDivisor;\n    var didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n    var isDisplaced = getIsDisplaced({\n      displaced: previousImpact.displaced,\n      id: id\n    });\n\n    if (didStartAfterCritical$1) {\n      if (isDisplaced) {\n        return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n      }\n\n      return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n    }\n\n    if (isDisplaced) {\n      return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n    }\n\n    return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n  });\n\n  if (!combineWith) {\n    return null;\n  }\n\n  var impact = {\n    displacedBy: displacedBy,\n    displaced: previousImpact.displaced,\n    at: {\n      type: 'COMBINE',\n      combine: {\n        draggableId: combineWith.descriptor.id,\n        droppableId: destination.descriptor.id\n      }\n    }\n  };\n  return impact;\n});\n\nvar getDragImpact = (function (_ref) {\n  var pageOffset = _ref.pageOffset,\n      draggable = _ref.draggable,\n      draggables = _ref.draggables,\n      droppables = _ref.droppables,\n      previousImpact = _ref.previousImpact,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n  var pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n  var destinationId = getDroppableOver$1({\n    pageBorderBox: pageBorderBox,\n    draggable: draggable,\n    droppables: droppables\n  });\n\n  if (!destinationId) {\n    return noImpact;\n  }\n\n  var destination = droppables[destinationId];\n  var insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n  var pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n  return getCombineImpact({\n    pageBorderBoxWithDroppableScroll: pageBorderBoxWithDroppableScroll,\n    draggable: draggable,\n    previousImpact: previousImpact,\n    destination: destination,\n    insideDestination: insideDestination,\n    afterCritical: afterCritical\n  }) || getReorderImpact({\n    pageBorderBoxWithDroppableScroll: pageBorderBoxWithDroppableScroll,\n    draggable: draggable,\n    destination: destination,\n    insideDestination: insideDestination,\n    last: previousImpact.displaced,\n    viewport: viewport,\n    afterCritical: afterCritical\n  });\n});\n\nvar patchDroppableMap = (function (droppables, updated) {\n  var _extends2;\n\n  return _extends({}, droppables, (_extends2 = {}, _extends2[updated.descriptor.id] = updated, _extends2));\n});\n\nvar clearUnusedPlaceholder = function clearUnusedPlaceholder(_ref) {\n  var previousImpact = _ref.previousImpact,\n      impact = _ref.impact,\n      droppables = _ref.droppables;\n  var last = whatIsDraggedOver(previousImpact);\n  var now = whatIsDraggedOver(impact);\n\n  if (!last) {\n    return droppables;\n  }\n\n  if (last === now) {\n    return droppables;\n  }\n\n  var lastDroppable = droppables[last];\n\n  if (!lastDroppable.subject.withPlaceholder) {\n    return droppables;\n  }\n\n  var updated = removePlaceholder(lastDroppable);\n  return patchDroppableMap(droppables, updated);\n};\n\nvar recomputePlaceholders = (function (_ref2) {\n  var draggable = _ref2.draggable,\n      draggables = _ref2.draggables,\n      droppables = _ref2.droppables,\n      previousImpact = _ref2.previousImpact,\n      impact = _ref2.impact;\n  var cleaned = clearUnusedPlaceholder({\n    previousImpact: previousImpact,\n    impact: impact,\n    droppables: droppables\n  });\n  var isOver = whatIsDraggedOver(impact);\n\n  if (!isOver) {\n    return cleaned;\n  }\n\n  var droppable = droppables[isOver];\n\n  if (isHomeOf(draggable, droppable)) {\n    return cleaned;\n  }\n\n  if (droppable.subject.withPlaceholder) {\n    return cleaned;\n  }\n\n  var patched = addPlaceholder(droppable, draggable, draggables);\n  return patchDroppableMap(cleaned, patched);\n});\n\nvar update = (function (_ref) {\n  var state = _ref.state,\n      forcedClientSelection = _ref.clientSelection,\n      forcedDimensions = _ref.dimensions,\n      forcedViewport = _ref.viewport,\n      forcedImpact = _ref.impact,\n      scrollJumpRequest = _ref.scrollJumpRequest;\n  var viewport = forcedViewport || state.viewport;\n  var dimensions = forcedDimensions || state.dimensions;\n  var clientSelection = forcedClientSelection || state.current.client.selection;\n  var offset = subtract(clientSelection, state.initial.client.selection);\n  var client = {\n    offset: offset,\n    selection: clientSelection,\n    borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n  };\n  var page = {\n    selection: add(client.selection, viewport.scroll.current),\n    borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n    offset: add(client.offset, viewport.scroll.diff.value)\n  };\n  var current = {\n    client: client,\n    page: page\n  };\n\n  if (state.phase === 'COLLECTING') {\n    return _extends({\n      phase: 'COLLECTING'\n    }, state, {\n      dimensions: dimensions,\n      viewport: viewport,\n      current: current\n    });\n  }\n\n  var draggable = dimensions.draggables[state.critical.draggable.id];\n  var newImpact = forcedImpact || getDragImpact({\n    pageOffset: page.offset,\n    draggable: draggable,\n    draggables: dimensions.draggables,\n    droppables: dimensions.droppables,\n    previousImpact: state.impact,\n    viewport: viewport,\n    afterCritical: state.afterCritical\n  });\n  var withUpdatedPlaceholders = recomputePlaceholders({\n    draggable: draggable,\n    impact: newImpact,\n    previousImpact: state.impact,\n    draggables: dimensions.draggables,\n    droppables: dimensions.droppables\n  });\n\n  var result = _extends({}, state, {\n    current: current,\n    dimensions: {\n      draggables: dimensions.draggables,\n      droppables: withUpdatedPlaceholders\n    },\n    impact: newImpact,\n    viewport: viewport,\n    scrollJumpRequest: scrollJumpRequest || null,\n    forceShouldAnimate: scrollJumpRequest ? false : null\n  });\n\n  return result;\n});\n\nfunction getDraggables$1(ids, draggables) {\n  return ids.map(function (id) {\n    return draggables[id];\n  });\n}\n\nvar recompute = (function (_ref) {\n  var impact = _ref.impact,\n      viewport = _ref.viewport,\n      draggables = _ref.draggables,\n      destination = _ref.destination,\n      forceShouldAnimate = _ref.forceShouldAnimate;\n  var last = impact.displaced;\n  var afterDragging = getDraggables$1(last.all, draggables);\n  var displaced = getDisplacementGroups({\n    afterDragging: afterDragging,\n    destination: destination,\n    displacedBy: impact.displacedBy,\n    viewport: viewport.frame,\n    forceShouldAnimate: forceShouldAnimate,\n    last: last\n  });\n  return _extends({}, impact, {\n    displaced: displaced\n  });\n});\n\nvar getClientBorderBoxCenter = (function (_ref) {\n  var impact = _ref.impact,\n      draggable = _ref.draggable,\n      droppable = _ref.droppable,\n      draggables = _ref.draggables,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n  var pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n    impact: impact,\n    draggable: draggable,\n    draggables: draggables,\n    droppable: droppable,\n    afterCritical: afterCritical\n  });\n  return getClientFromPageBorderBoxCenter({\n    pageBorderBoxCenter: pageBorderBoxCenter,\n    draggable: draggable,\n    viewport: viewport\n  });\n});\n\nvar refreshSnap = (function (_ref) {\n  var state = _ref.state,\n      forcedDimensions = _ref.dimensions,\n      forcedViewport = _ref.viewport;\n  !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n  var needsVisibilityCheck = state.impact;\n  var viewport = forcedViewport || state.viewport;\n  var dimensions = forcedDimensions || state.dimensions;\n  var draggables = dimensions.draggables,\n      droppables = dimensions.droppables;\n  var draggable = draggables[state.critical.draggable.id];\n  var isOver = whatIsDraggedOver(needsVisibilityCheck);\n  !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant(false) : void 0;\n  var destination = droppables[isOver];\n  var impact = recompute({\n    impact: needsVisibilityCheck,\n    viewport: viewport,\n    destination: destination,\n    draggables: draggables\n  });\n  var clientSelection = getClientBorderBoxCenter({\n    impact: impact,\n    draggable: draggable,\n    droppable: destination,\n    draggables: draggables,\n    viewport: viewport,\n    afterCritical: state.afterCritical\n  });\n  return update({\n    impact: impact,\n    clientSelection: clientSelection,\n    state: state,\n    dimensions: dimensions,\n    viewport: viewport\n  });\n});\n\nvar getHomeLocation = (function (descriptor) {\n  return {\n    index: descriptor.index,\n    droppableId: descriptor.droppableId\n  };\n});\n\nvar getLiftEffect = (function (_ref) {\n  var draggable = _ref.draggable,\n      home = _ref.home,\n      draggables = _ref.draggables,\n      viewport = _ref.viewport;\n  var displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n  var insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n  var rawIndex = insideHome.indexOf(draggable);\n  !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant(false) : void 0;\n  var afterDragging = insideHome.slice(rawIndex + 1);\n  var effected = afterDragging.reduce(function (previous, item) {\n    previous[item.descriptor.id] = true;\n    return previous;\n  }, {});\n  var afterCritical = {\n    inVirtualList: home.descriptor.mode === 'virtual',\n    displacedBy: displacedBy,\n    effected: effected\n  };\n  var displaced = getDisplacementGroups({\n    afterDragging: afterDragging,\n    destination: home,\n    displacedBy: displacedBy,\n    last: null,\n    viewport: viewport.frame,\n    forceShouldAnimate: false\n  });\n  var impact = {\n    displaced: displaced,\n    displacedBy: displacedBy,\n    at: {\n      type: 'REORDER',\n      destination: getHomeLocation(draggable.descriptor)\n    }\n  };\n  return {\n    impact: impact,\n    afterCritical: afterCritical\n  };\n});\n\nvar patchDimensionMap = (function (dimensions, updated) {\n  return {\n    draggables: dimensions.draggables,\n    droppables: patchDroppableMap(dimensions.droppables, updated)\n  };\n});\n\nvar records = {};\nvar isEnabled = false;\n\nvar isTimingsEnabled = function isTimingsEnabled() {\n  return isEnabled;\n};\nvar start = function start(key) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!isTimingsEnabled()) {\n      return;\n    }\n\n    var now = performance.now();\n    records[key] = now;\n  }\n};\nvar finish = function finish(key) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!isTimingsEnabled()) {\n      return;\n    }\n\n    var now = performance.now();\n    var previous = records[key];\n\n    if (!previous) {\n      console.warn('cannot finish timing as no previous time found', key);\n      return;\n    }\n\n    var result = now - previous;\n    var rounded = result.toFixed(2);\n\n    var style = function () {\n      if (result < 12) {\n        return {\n          textColor: 'green',\n          symbol: '✅'\n        };\n      }\n\n      if (result < 40) {\n        return {\n          textColor: 'orange',\n          symbol: '⚠️'\n        };\n      }\n\n      return {\n        textColor: 'red',\n        symbol: '❌'\n      };\n    }();\n\n    console.log(style.symbol + \" %cTiming %c\" + rounded + \" %cms %c\" + key, 'color: blue; font-weight: bold;', \"color: \" + style.textColor + \"; font-size: 1.1em;\", 'color: grey;', 'color: purple; font-weight: bold;');\n  }\n};\n\nvar offsetDraggable = (function (_ref) {\n  var draggable = _ref.draggable,\n      offset$1 = _ref.offset,\n      initialWindowScroll = _ref.initialWindowScroll;\n  var client = offset(draggable.client, offset$1);\n  var page = withScroll(client, initialWindowScroll);\n\n  var moved = _extends({}, draggable, {\n    placeholder: _extends({}, draggable.placeholder, {\n      client: client\n    }),\n    client: client,\n    page: page\n  });\n\n  return moved;\n});\n\nvar getFrame = (function (droppable) {\n  var frame = droppable.frame;\n  !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant(false) : void 0;\n  return frame;\n});\n\nvar adjustAdditionsForScrollChanges = (function (_ref) {\n  var additions = _ref.additions,\n      updatedDroppables = _ref.updatedDroppables,\n      viewport = _ref.viewport;\n  var windowScrollChange = viewport.scroll.diff.value;\n  return additions.map(function (draggable) {\n    var droppableId = draggable.descriptor.droppableId;\n    var modified = updatedDroppables[droppableId];\n    var frame = getFrame(modified);\n    var droppableScrollChange = frame.scroll.diff.value;\n    var totalChange = add(windowScrollChange, droppableScrollChange);\n    var moved = offsetDraggable({\n      draggable: draggable,\n      offset: totalChange,\n      initialWindowScroll: viewport.scroll.initial\n    });\n    return moved;\n  });\n});\n\nvar timingsKey = 'Processing dynamic changes';\nvar publishWhileDraggingInVirtual = (function (_ref) {\n  var _extends2, _extends3;\n\n  var state = _ref.state,\n      published = _ref.published;\n  start(timingsKey);\n  var withScrollChange = published.modified.map(function (update) {\n    var existing = state.dimensions.droppables[update.droppableId];\n    var scrolled = scrollDroppable(existing, update.scroll);\n    return scrolled;\n  });\n\n  var droppables = _extends({}, state.dimensions.droppables, toDroppableMap(withScrollChange));\n\n  var updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n    additions: published.additions,\n    updatedDroppables: droppables,\n    viewport: state.viewport\n  }));\n\n  var draggables = _extends({}, state.dimensions.draggables, updatedAdditions);\n\n  published.removals.forEach(function (id) {\n    delete draggables[id];\n  });\n  var dimensions = {\n    droppables: droppables,\n    draggables: draggables\n  };\n  var wasOverId = whatIsDraggedOver(state.impact);\n  var wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n  var draggable = dimensions.draggables[state.critical.draggable.id];\n  var home = dimensions.droppables[state.critical.droppable.id];\n\n  var _getLiftEffect = getLiftEffect({\n    draggable: draggable,\n    home: home,\n    draggables: draggables,\n    viewport: state.viewport\n  }),\n      onLiftImpact = _getLiftEffect.impact,\n      afterCritical = _getLiftEffect.afterCritical;\n\n  var previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n  var impact = getDragImpact({\n    pageOffset: state.current.page.offset,\n    draggable: dimensions.draggables[state.critical.draggable.id],\n    draggables: dimensions.draggables,\n    droppables: dimensions.droppables,\n    previousImpact: previousImpact,\n    viewport: state.viewport,\n    afterCritical: afterCritical\n  });\n  finish(timingsKey);\n\n  var draggingState = _extends({\n    phase: 'DRAGGING'\n  }, state, (_extends2 = {}, _extends2[\"phase\"] = 'DRAGGING', _extends2.impact = impact, _extends2.onLiftImpact = onLiftImpact, _extends2.dimensions = dimensions, _extends2.afterCritical = afterCritical, _extends2.forceShouldAnimate = false, _extends2));\n\n  if (state.phase === 'COLLECTING') {\n    return draggingState;\n  }\n\n  var dropPending = _extends({\n    phase: 'DROP_PENDING'\n  }, draggingState, (_extends3 = {}, _extends3[\"phase\"] = 'DROP_PENDING', _extends3.reason = state.reason, _extends3.isWaiting = false, _extends3));\n\n  return dropPending;\n});\n\nvar isSnapping = function isSnapping(state) {\n  return state.movementMode === 'SNAP';\n};\n\nvar postDroppableChange = function postDroppableChange(state, updated, isEnabledChanging) {\n  var dimensions = patchDimensionMap(state.dimensions, updated);\n\n  if (!isSnapping(state) || isEnabledChanging) {\n    return update({\n      state: state,\n      dimensions: dimensions\n    });\n  }\n\n  return refreshSnap({\n    state: state,\n    dimensions: dimensions\n  });\n};\n\nfunction removeScrollJumpRequest(state) {\n  if (state.isDragging && state.movementMode === 'SNAP') {\n    return _extends({\n      phase: 'DRAGGING'\n    }, state, {\n      scrollJumpRequest: null\n    });\n  }\n\n  return state;\n}\n\nvar idle = {\n  phase: 'IDLE',\n  completed: null,\n  shouldFlush: false\n};\nvar reducer = (function (state, action) {\n  if (state === void 0) {\n    state = idle;\n  }\n\n  if (action.type === 'FLUSH') {\n    return _extends({}, idle, {\n      shouldFlush: true\n    });\n  }\n\n  if (action.type === 'INITIAL_PUBLISH') {\n    !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant(false) : void 0;\n    var _action$payload = action.payload,\n        critical = _action$payload.critical,\n        clientSelection = _action$payload.clientSelection,\n        viewport = _action$payload.viewport,\n        dimensions = _action$payload.dimensions,\n        movementMode = _action$payload.movementMode;\n    var draggable = dimensions.draggables[critical.draggable.id];\n    var home = dimensions.droppables[critical.droppable.id];\n    var client = {\n      selection: clientSelection,\n      borderBoxCenter: draggable.client.borderBox.center,\n      offset: origin\n    };\n    var initial = {\n      client: client,\n      page: {\n        selection: add(client.selection, viewport.scroll.initial),\n        borderBoxCenter: add(client.selection, viewport.scroll.initial),\n        offset: add(client.selection, viewport.scroll.diff.value)\n      }\n    };\n    var isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(function (item) {\n      return !item.isFixedOnPage;\n    });\n\n    var _getLiftEffect = getLiftEffect({\n      draggable: draggable,\n      home: home,\n      draggables: dimensions.draggables,\n      viewport: viewport\n    }),\n        impact = _getLiftEffect.impact,\n        afterCritical = _getLiftEffect.afterCritical;\n\n    var result = {\n      phase: 'DRAGGING',\n      isDragging: true,\n      critical: critical,\n      movementMode: movementMode,\n      dimensions: dimensions,\n      initial: initial,\n      current: initial,\n      isWindowScrollAllowed: isWindowScrollAllowed,\n      impact: impact,\n      afterCritical: afterCritical,\n      onLiftImpact: impact,\n      viewport: viewport,\n      scrollJumpRequest: null,\n      forceShouldAnimate: null\n    };\n    return result;\n  }\n\n  if (action.type === 'COLLECTION_STARTING') {\n    var _extends2;\n\n    if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n      return state;\n    }\n\n    !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Collection cannot start from phase \" + state.phase) : invariant(false) : void 0;\n\n    var _result = _extends({\n      phase: 'COLLECTING'\n    }, state, (_extends2 = {}, _extends2[\"phase\"] = 'COLLECTING', _extends2));\n\n    return _result;\n  }\n\n  if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n    !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unexpected \" + action.type + \" received in phase \" + state.phase) : invariant(false) : void 0;\n    return publishWhileDraggingInVirtual({\n      state: state,\n      published: action.payload\n    });\n  }\n\n  if (action.type === 'MOVE') {\n    if (state.phase === 'DROP_PENDING') {\n      return state;\n    }\n\n    !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" not permitted in phase \" + state.phase) : invariant(false) : void 0;\n    var _clientSelection = action.payload.client;\n\n    if (isEqual(_clientSelection, state.current.client.selection)) {\n      return state;\n    }\n\n    return update({\n      state: state,\n      clientSelection: _clientSelection,\n      impact: isSnapping(state) ? state.impact : null\n    });\n  }\n\n  if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n    if (state.phase === 'DROP_PENDING') {\n      return removeScrollJumpRequest(state);\n    }\n\n    if (state.phase === 'COLLECTING') {\n      return removeScrollJumpRequest(state);\n    }\n\n    !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" not permitted in phase \" + state.phase) : invariant(false) : void 0;\n    var _action$payload2 = action.payload,\n        id = _action$payload2.id,\n        newScroll = _action$payload2.newScroll;\n    var target = state.dimensions.droppables[id];\n\n    if (!target) {\n      return state;\n    }\n\n    var scrolled = scrollDroppable(target, newScroll);\n    return postDroppableChange(state, scrolled, false);\n  }\n\n  if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n    if (state.phase === 'DROP_PENDING') {\n      return state;\n    }\n\n    !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Attempting to move in an unsupported phase \" + state.phase) : invariant(false) : void 0;\n    var _action$payload3 = action.payload,\n        _id = _action$payload3.id,\n        isEnabled = _action$payload3.isEnabled;\n    var _target = state.dimensions.droppables[_id];\n    !_target ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find Droppable[id: \" + _id + \"] to toggle its enabled state\") : invariant(false) : void 0;\n    !(_target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Trying to set droppable isEnabled to \" + String(isEnabled) + \"\\n      but it is already \" + String(_target.isEnabled)) : invariant(false) : void 0;\n\n    var updated = _extends({}, _target, {\n      isEnabled: isEnabled\n    });\n\n    return postDroppableChange(state, updated, true);\n  }\n\n  if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n    if (state.phase === 'DROP_PENDING') {\n      return state;\n    }\n\n    !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Attempting to move in an unsupported phase \" + state.phase) : invariant(false) : void 0;\n    var _action$payload4 = action.payload,\n        _id2 = _action$payload4.id,\n        isCombineEnabled = _action$payload4.isCombineEnabled;\n    var _target2 = state.dimensions.droppables[_id2];\n    !_target2 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find Droppable[id: \" + _id2 + \"] to toggle its isCombineEnabled state\") : invariant(false) : void 0;\n    !(_target2.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Trying to set droppable isCombineEnabled to \" + String(isCombineEnabled) + \"\\n      but it is already \" + String(_target2.isCombineEnabled)) : invariant(false) : void 0;\n\n    var _updated = _extends({}, _target2, {\n      isCombineEnabled: isCombineEnabled\n    });\n\n    return postDroppableChange(state, _updated, true);\n  }\n\n  if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n    if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n      return state;\n    }\n\n    !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot move by window in phase \" + state.phase) : invariant(false) : void 0;\n    !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant(false) : void 0;\n    var _newScroll = action.payload.newScroll;\n\n    if (isEqual(state.viewport.scroll.current, _newScroll)) {\n      return removeScrollJumpRequest(state);\n    }\n\n    var _viewport = scrollViewport(state.viewport, _newScroll);\n\n    if (isSnapping(state)) {\n      return refreshSnap({\n        state: state,\n        viewport: _viewport\n      });\n    }\n\n    return update({\n      state: state,\n      viewport: _viewport\n    });\n  }\n\n  if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n    if (!isMovementAllowed(state)) {\n      return state;\n    }\n\n    var maxScroll = action.payload.maxScroll;\n\n    if (isEqual(maxScroll, state.viewport.scroll.max)) {\n      return state;\n    }\n\n    var withMaxScroll = _extends({}, state.viewport, {\n      scroll: _extends({}, state.viewport.scroll, {\n        max: maxScroll\n      })\n    });\n\n    return _extends({\n      phase: 'DRAGGING'\n    }, state, {\n      viewport: withMaxScroll\n    });\n  }\n\n  if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n    if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n      return state;\n    }\n\n    !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, action.type + \" received while not in DRAGGING phase\") : invariant(false) : void 0;\n\n    var _result2 = moveInDirection({\n      state: state,\n      type: action.type\n    });\n\n    if (!_result2) {\n      return state;\n    }\n\n    return update({\n      state: state,\n      impact: _result2.impact,\n      clientSelection: _result2.clientSelection,\n      scrollJumpRequest: _result2.scrollJumpRequest\n    });\n  }\n\n  if (action.type === 'DROP_PENDING') {\n    var _extends3;\n\n    var reason = action.payload.reason;\n    !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant(false) : void 0;\n\n    var newState = _extends({\n      phase: 'DROP_PENDING'\n    }, state, (_extends3 = {}, _extends3[\"phase\"] = 'DROP_PENDING', _extends3.isWaiting = true, _extends3.reason = reason, _extends3));\n\n    return newState;\n  }\n\n  if (action.type === 'DROP_ANIMATE') {\n    var _action$payload5 = action.payload,\n        completed = _action$payload5.completed,\n        dropDuration = _action$payload5.dropDuration,\n        newHomeClientOffset = _action$payload5.newHomeClientOffset;\n    !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot animate drop from phase \" + state.phase) : invariant(false) : void 0;\n    var _result3 = {\n      phase: 'DROP_ANIMATING',\n      completed: completed,\n      dropDuration: dropDuration,\n      newHomeClientOffset: newHomeClientOffset,\n      dimensions: state.dimensions\n    };\n    return _result3;\n  }\n\n  if (action.type === 'DROP_COMPLETE') {\n    var _completed = action.payload.completed;\n    return {\n      phase: 'IDLE',\n      completed: _completed,\n      shouldFlush: false\n    };\n  }\n\n  return state;\n});\n\nvar beforeInitialCapture = function beforeInitialCapture(args) {\n  return {\n    type: 'BEFORE_INITIAL_CAPTURE',\n    payload: args\n  };\n};\nvar lift = function lift(args) {\n  return {\n    type: 'LIFT',\n    payload: args\n  };\n};\nvar initialPublish = function initialPublish(args) {\n  return {\n    type: 'INITIAL_PUBLISH',\n    payload: args\n  };\n};\nvar publishWhileDragging = function publishWhileDragging(args) {\n  return {\n    type: 'PUBLISH_WHILE_DRAGGING',\n    payload: args\n  };\n};\nvar collectionStarting = function collectionStarting() {\n  return {\n    type: 'COLLECTION_STARTING',\n    payload: null\n  };\n};\nvar updateDroppableScroll = function updateDroppableScroll(args) {\n  return {\n    type: 'UPDATE_DROPPABLE_SCROLL',\n    payload: args\n  };\n};\nvar updateDroppableIsEnabled = function updateDroppableIsEnabled(args) {\n  return {\n    type: 'UPDATE_DROPPABLE_IS_ENABLED',\n    payload: args\n  };\n};\nvar updateDroppableIsCombineEnabled = function updateDroppableIsCombineEnabled(args) {\n  return {\n    type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n    payload: args\n  };\n};\nvar move = function move(args) {\n  return {\n    type: 'MOVE',\n    payload: args\n  };\n};\nvar moveByWindowScroll = function moveByWindowScroll(args) {\n  return {\n    type: 'MOVE_BY_WINDOW_SCROLL',\n    payload: args\n  };\n};\nvar updateViewportMaxScroll = function updateViewportMaxScroll(args) {\n  return {\n    type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n    payload: args\n  };\n};\nvar moveUp = function moveUp() {\n  return {\n    type: 'MOVE_UP',\n    payload: null\n  };\n};\nvar moveDown = function moveDown() {\n  return {\n    type: 'MOVE_DOWN',\n    payload: null\n  };\n};\nvar moveRight = function moveRight() {\n  return {\n    type: 'MOVE_RIGHT',\n    payload: null\n  };\n};\nvar moveLeft = function moveLeft() {\n  return {\n    type: 'MOVE_LEFT',\n    payload: null\n  };\n};\nvar flush = function flush() {\n  return {\n    type: 'FLUSH',\n    payload: null\n  };\n};\nvar animateDrop = function animateDrop(args) {\n  return {\n    type: 'DROP_ANIMATE',\n    payload: args\n  };\n};\nvar completeDrop = function completeDrop(args) {\n  return {\n    type: 'DROP_COMPLETE',\n    payload: args\n  };\n};\nvar drop = function drop(args) {\n  return {\n    type: 'DROP',\n    payload: args\n  };\n};\nvar dropPending = function dropPending(args) {\n  return {\n    type: 'DROP_PENDING',\n    payload: args\n  };\n};\nvar dropAnimationFinished = function dropAnimationFinished() {\n  return {\n    type: 'DROP_ANIMATION_FINISHED',\n    payload: null\n  };\n};\n\nfunction checkIndexes(insideDestination) {\n  if (insideDestination.length <= 1) {\n    return;\n  }\n\n  var indexes = insideDestination.map(function (d) {\n    return d.descriptor.index;\n  });\n  var errors = {};\n\n  for (var i = 1; i < indexes.length; i++) {\n    var current = indexes[i];\n    var previous = indexes[i - 1];\n\n    if (current !== previous + 1) {\n      errors[current] = true;\n    }\n  }\n\n  if (!_Object$keys(errors).length) {\n    return;\n  }\n\n  var formatted = indexes.map(function (index) {\n    var hasError = Boolean(errors[index]);\n    return hasError ? \"[\\uD83D\\uDD25\" + index + \"]\" : \"\" + index;\n  }).join(', ');\n  process.env.NODE_ENV !== \"production\" ? warning(\"\\n    Detected non-consecutive <Draggable /> indexes.\\n\\n    (This can cause unexpected bugs)\\n\\n    \" + formatted + \"\\n  \") : void 0;\n}\n\nfunction validateDimensions(critical, dimensions) {\n  if (process.env.NODE_ENV !== 'production') {\n    var insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n    checkIndexes(insideDestination);\n  }\n}\n\nvar lift$1 = (function (marshal) {\n  return function (_ref) {\n    var getState = _ref.getState,\n        dispatch = _ref.dispatch;\n    return function (next) {\n      return function (action) {\n        if (action.type !== 'LIFT') {\n          next(action);\n          return;\n        }\n\n        var _action$payload = action.payload,\n            id = _action$payload.id,\n            clientSelection = _action$payload.clientSelection,\n            movementMode = _action$payload.movementMode;\n        var initial = getState();\n\n        if (initial.phase === 'DROP_ANIMATING') {\n          dispatch(completeDrop({\n            completed: initial.completed\n          }));\n        }\n\n        !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant(false) : void 0;\n        dispatch(flush());\n        dispatch(beforeInitialCapture({\n          draggableId: id,\n          movementMode: movementMode\n        }));\n        var scrollOptions = {\n          shouldPublishImmediately: movementMode === 'SNAP'\n        };\n        var request = {\n          draggableId: id,\n          scrollOptions: scrollOptions\n        };\n\n        var _marshal$startPublish = marshal.startPublishing(request),\n            critical = _marshal$startPublish.critical,\n            dimensions = _marshal$startPublish.dimensions,\n            viewport = _marshal$startPublish.viewport;\n\n        validateDimensions(critical, dimensions);\n        dispatch(initialPublish({\n          critical: critical,\n          dimensions: dimensions,\n          clientSelection: clientSelection,\n          movementMode: movementMode,\n          viewport: viewport\n        }));\n      };\n    };\n  };\n});\n\nvar style = (function (marshal) {\n  return function () {\n    return function (next) {\n      return function (action) {\n        if (action.type === 'INITIAL_PUBLISH') {\n          marshal.dragging();\n        }\n\n        if (action.type === 'DROP_ANIMATE') {\n          marshal.dropping(action.payload.completed.result.reason);\n        }\n\n        if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE') {\n          marshal.resting();\n        }\n\n        next(action);\n      };\n    };\n  };\n});\n\nvar curves = {\n  outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n  drop: 'cubic-bezier(.2,1,.1,1)'\n};\nvar combine = {\n  opacity: {\n    drop: 0,\n    combining: 0.7\n  },\n  scale: {\n    drop: 0.75\n  }\n};\nvar timings = {\n  outOfTheWay: 0.2,\n  minDropTime: 0.33,\n  maxDropTime: 0.55\n};\nvar outOfTheWayTiming = timings.outOfTheWay + \"s \" + curves.outOfTheWay;\nvar transitions = {\n  fluid: \"opacity \" + outOfTheWayTiming,\n  snap: \"transform \" + outOfTheWayTiming + \", opacity \" + outOfTheWayTiming,\n  drop: function drop(duration) {\n    var timing = duration + \"s \" + curves.drop;\n    return \"transform \" + timing + \", opacity \" + timing;\n  },\n  outOfTheWay: \"transform \" + outOfTheWayTiming,\n  placeholder: \"height \" + outOfTheWayTiming + \", width \" + outOfTheWayTiming + \", margin \" + outOfTheWayTiming\n};\n\nvar moveTo = function moveTo(offset) {\n  return isEqual(offset, origin) ? null : \"translate(\" + offset.x + \"px, \" + offset.y + \"px)\";\n};\n\nvar transforms = {\n  moveTo: moveTo,\n  drop: function drop(offset, isCombining) {\n    var translate = moveTo(offset);\n\n    if (!translate) {\n      return null;\n    }\n\n    if (!isCombining) {\n      return translate;\n    }\n\n    return translate + \" scale(\" + combine.scale.drop + \")\";\n  }\n};\n\nvar minDropTime = timings.minDropTime,\n    maxDropTime = timings.maxDropTime;\nvar dropTimeRange = maxDropTime - minDropTime;\nvar maxDropTimeAtDistance = 1500;\nvar cancelDropModifier = 0.6;\nvar getDropDuration = (function (_ref) {\n  var current = _ref.current,\n      destination = _ref.destination,\n      reason = _ref.reason;\n  var distance$1 = distance(current, destination);\n\n  if (distance$1 <= 0) {\n    return minDropTime;\n  }\n\n  if (distance$1 >= maxDropTimeAtDistance) {\n    return maxDropTime;\n  }\n\n  var percentage = distance$1 / maxDropTimeAtDistance;\n  var duration = minDropTime + dropTimeRange * percentage;\n  var withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n  return Number(withDuration.toFixed(2));\n});\n\nvar getNewHomeClientOffset = (function (_ref) {\n  var impact = _ref.impact,\n      draggable = _ref.draggable,\n      dimensions = _ref.dimensions,\n      viewport = _ref.viewport,\n      afterCritical = _ref.afterCritical;\n  var draggables = dimensions.draggables,\n      droppables = dimensions.droppables;\n  var droppableId = whatIsDraggedOver(impact);\n  var destination = droppableId ? droppables[droppableId] : null;\n  var home = droppables[draggable.descriptor.droppableId];\n  var newClientCenter = getClientBorderBoxCenter({\n    impact: impact,\n    draggable: draggable,\n    draggables: draggables,\n    afterCritical: afterCritical,\n    droppable: destination || home,\n    viewport: viewport\n  });\n  var offset = subtract(newClientCenter, draggable.client.borderBox.center);\n  return offset;\n});\n\nvar getDropImpact = (function (_ref) {\n  var draggables = _ref.draggables,\n      reason = _ref.reason,\n      lastImpact = _ref.lastImpact,\n      home = _ref.home,\n      viewport = _ref.viewport,\n      onLiftImpact = _ref.onLiftImpact;\n\n  if (!lastImpact.at || reason !== 'DROP') {\n    var recomputedHomeImpact = recompute({\n      draggables: draggables,\n      impact: onLiftImpact,\n      destination: home,\n      viewport: viewport,\n      forceShouldAnimate: true\n    });\n    return {\n      impact: recomputedHomeImpact,\n      didDropInsideDroppable: false\n    };\n  }\n\n  if (lastImpact.at.type === 'REORDER') {\n    return {\n      impact: lastImpact,\n      didDropInsideDroppable: true\n    };\n  }\n\n  var withoutMovement = _extends({}, lastImpact, {\n    displaced: emptyGroups\n  });\n\n  return {\n    impact: withoutMovement,\n    didDropInsideDroppable: true\n  };\n});\n\nvar drop$1 = (function (_ref) {\n  var getState = _ref.getState,\n      dispatch = _ref.dispatch;\n  return function (next) {\n    return function (action) {\n      if (action.type !== 'DROP') {\n        next(action);\n        return;\n      }\n\n      var state = getState();\n      var reason = action.payload.reason;\n\n      if (state.phase === 'COLLECTING') {\n        dispatch(dropPending({\n          reason: reason\n        }));\n        return;\n      }\n\n      if (state.phase === 'IDLE') {\n        return;\n      }\n\n      var isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n      !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant(false) : void 0;\n      !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot drop in phase: \" + state.phase) : invariant(false) : void 0;\n      var critical = state.critical;\n      var dimensions = state.dimensions;\n      var draggable = dimensions.draggables[state.critical.draggable.id];\n\n      var _getDropImpact = getDropImpact({\n        reason: reason,\n        lastImpact: state.impact,\n        afterCritical: state.afterCritical,\n        onLiftImpact: state.onLiftImpact,\n        home: state.dimensions.droppables[state.critical.droppable.id],\n        viewport: state.viewport,\n        draggables: state.dimensions.draggables\n      }),\n          impact = _getDropImpact.impact,\n          didDropInsideDroppable = _getDropImpact.didDropInsideDroppable;\n\n      var destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n      var combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n      var source = {\n        index: critical.draggable.index,\n        droppableId: critical.droppable.id\n      };\n      var result = {\n        draggableId: draggable.descriptor.id,\n        type: draggable.descriptor.type,\n        source: source,\n        reason: reason,\n        mode: state.movementMode,\n        destination: destination,\n        combine: combine\n      };\n      var newHomeClientOffset = getNewHomeClientOffset({\n        impact: impact,\n        draggable: draggable,\n        dimensions: dimensions,\n        viewport: state.viewport,\n        afterCritical: state.afterCritical\n      });\n      var completed = {\n        critical: state.critical,\n        afterCritical: state.afterCritical,\n        result: result,\n        impact: impact\n      };\n      var isAnimationRequired = !isEqual(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n\n      if (!isAnimationRequired) {\n        dispatch(completeDrop({\n          completed: completed\n        }));\n        return;\n      }\n\n      var dropDuration = getDropDuration({\n        current: state.current.client.offset,\n        destination: newHomeClientOffset,\n        reason: reason\n      });\n      var args = {\n        newHomeClientOffset: newHomeClientOffset,\n        dropDuration: dropDuration,\n        completed: completed\n      };\n      dispatch(animateDrop(args));\n    };\n  };\n});\n\nvar getWindowScroll = (function () {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  };\n});\n\nfunction getWindowScrollBinding(update) {\n  return {\n    eventName: 'scroll',\n    options: {\n      passive: true,\n      capture: false\n    },\n    fn: function fn(event) {\n      if (event.target !== window && event.target !== window.document) {\n        return;\n      }\n\n      update();\n    }\n  };\n}\n\nfunction getScrollListener(_ref) {\n  var onWindowScroll = _ref.onWindowScroll;\n\n  function updateScroll() {\n    onWindowScroll(getWindowScroll());\n  }\n\n  var scheduled = rafSchd(updateScroll);\n  var binding = getWindowScrollBinding(scheduled);\n  var unbind = noop;\n\n  function isActive() {\n    return unbind !== noop;\n  }\n\n  function start() {\n    !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant(false) : void 0;\n    unbind = bindEvents(window, [binding]);\n  }\n\n  function stop() {\n    !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant(false) : void 0;\n    scheduled.cancel();\n    unbind();\n    unbind = noop;\n  }\n\n  return {\n    start: start,\n    stop: stop,\n    isActive: isActive\n  };\n}\n\nvar shouldEnd = function shouldEnd(action) {\n  return action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH';\n};\n\nvar scrollListener = (function (store) {\n  var listener = getScrollListener({\n    onWindowScroll: function onWindowScroll(newScroll) {\n      store.dispatch(moveByWindowScroll({\n        newScroll: newScroll\n      }));\n    }\n  });\n  return function (next) {\n    return function (action) {\n      if (!listener.isActive() && action.type === 'INITIAL_PUBLISH') {\n        listener.start();\n      }\n\n      if (listener.isActive() && shouldEnd(action)) {\n        listener.stop();\n      }\n\n      next(action);\n    };\n  };\n});\n\nvar getExpiringAnnounce = (function (announce) {\n  var wasCalled = false;\n  var isExpired = false;\n  var timeoutId = setTimeout(function () {\n    isExpired = true;\n  });\n\n  var result = function result(message) {\n    if (wasCalled) {\n      process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n      return;\n    }\n\n    if (isExpired) {\n      process.env.NODE_ENV !== \"production\" ? warning(\"\\n        Announcements cannot be made asynchronously.\\n        Default message has already been announced.\\n      \") : void 0;\n      return;\n    }\n\n    wasCalled = true;\n    announce(message);\n    clearTimeout(timeoutId);\n  };\n\n  result.wasCalled = function () {\n    return wasCalled;\n  };\n\n  return result;\n});\n\nvar getAsyncMarshal = (function () {\n  var entries = [];\n\n  var execute = function execute(timerId) {\n    var index = findIndex(entries, function (item) {\n      return item.timerId === timerId;\n    });\n    !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant(false) : void 0;\n\n    var _entries$splice = entries.splice(index, 1),\n        entry = _entries$splice[0];\n\n    entry.callback();\n  };\n\n  var add = function add(fn) {\n    var timerId = setTimeout(function () {\n      return execute(timerId);\n    });\n    var entry = {\n      timerId: timerId,\n      callback: fn\n    };\n    entries.push(entry);\n  };\n\n  var flush = function flush() {\n    if (!entries.length) {\n      return;\n    }\n\n    var shallow = [].concat(entries);\n    entries.length = 0;\n    shallow.forEach(function (entry) {\n      clearTimeout(entry.timerId);\n      entry.callback();\n    });\n  };\n\n  return {\n    add: add,\n    flush: flush\n  };\n});\n\nvar areLocationsEqual = function areLocationsEqual(first, second) {\n  if (first == null && second == null) {\n    return true;\n  }\n\n  if (first == null || second == null) {\n    return false;\n  }\n\n  return first.droppableId === second.droppableId && first.index === second.index;\n};\nvar isCombineEqual = function isCombineEqual(first, second) {\n  if (first == null && second == null) {\n    return true;\n  }\n\n  if (first == null || second == null) {\n    return false;\n  }\n\n  return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nvar isCriticalEqual = function isCriticalEqual(first, second) {\n  if (first === second) {\n    return true;\n  }\n\n  var isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n  var isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n  return isDraggableEqual && isDroppableEqual;\n};\n\nvar withTimings = function withTimings(key, fn) {\n  start(key);\n  fn();\n  finish(key);\n};\n\nvar getDragStart = function getDragStart(critical, mode) {\n  return {\n    draggableId: critical.draggable.id,\n    type: critical.droppable.type,\n    source: {\n      droppableId: critical.droppable.id,\n      index: critical.draggable.index\n    },\n    mode: mode\n  };\n};\n\nvar execute = function execute(responder, data, announce, getDefaultMessage) {\n  if (!responder) {\n    announce(getDefaultMessage(data));\n    return;\n  }\n\n  var willExpire = getExpiringAnnounce(announce);\n  var provided = {\n    announce: willExpire\n  };\n  responder(data, provided);\n\n  if (!willExpire.wasCalled()) {\n    announce(getDefaultMessage(data));\n  }\n};\n\nvar getPublisher = (function (getResponders, announce) {\n  var asyncMarshal = getAsyncMarshal();\n  var dragging = null;\n\n  var beforeCapture = function beforeCapture(draggableId, mode) {\n    !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant(false) : void 0;\n    withTimings('onBeforeCapture', function () {\n      var fn = getResponders().onBeforeCapture;\n\n      if (fn) {\n        var before = {\n          draggableId: draggableId,\n          mode: mode\n        };\n        fn(before);\n      }\n    });\n  };\n\n  var beforeStart = function beforeStart(critical, mode) {\n    !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant(false) : void 0;\n    withTimings('onBeforeDragStart', function () {\n      var fn = getResponders().onBeforeDragStart;\n\n      if (fn) {\n        fn(getDragStart(critical, mode));\n      }\n    });\n  };\n\n  var start = function start(critical, mode) {\n    !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant(false) : void 0;\n    var data = getDragStart(critical, mode);\n    dragging = {\n      mode: mode,\n      lastCritical: critical,\n      lastLocation: data.source,\n      lastCombine: null\n    };\n    asyncMarshal.add(function () {\n      withTimings('onDragStart', function () {\n        return execute(getResponders().onDragStart, data, announce, preset.onDragStart);\n      });\n    });\n  };\n\n  var update = function update(critical, impact) {\n    var location = tryGetDestination(impact);\n    var combine = tryGetCombine(impact);\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant(false) : void 0;\n    var hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n\n    if (hasCriticalChanged) {\n      dragging.lastCritical = critical;\n    }\n\n    var hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n\n    if (hasLocationChanged) {\n      dragging.lastLocation = location;\n    }\n\n    var hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n\n    if (hasGroupingChanged) {\n      dragging.lastCombine = combine;\n    }\n\n    if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n      return;\n    }\n\n    var data = _extends({}, getDragStart(critical, dragging.mode), {\n      combine: combine,\n      destination: location\n    });\n\n    asyncMarshal.add(function () {\n      withTimings('onDragUpdate', function () {\n        return execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate);\n      });\n    });\n  };\n\n  var flush = function flush() {\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant(false) : void 0;\n    asyncMarshal.flush();\n  };\n\n  var drop = function drop(result) {\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant(false) : void 0;\n    dragging = null;\n    withTimings('onDragEnd', function () {\n      return execute(getResponders().onDragEnd, result, announce, preset.onDragEnd);\n    });\n  };\n\n  var abort = function abort() {\n    if (!dragging) {\n      return;\n    }\n\n    var result = _extends({}, getDragStart(dragging.lastCritical, dragging.mode), {\n      combine: null,\n      destination: null,\n      reason: 'CANCEL'\n    });\n\n    drop(result);\n  };\n\n  return {\n    beforeCapture: beforeCapture,\n    beforeStart: beforeStart,\n    start: start,\n    update: update,\n    flush: flush,\n    drop: drop,\n    abort: abort\n  };\n});\n\nvar responders = (function (getResponders, announce) {\n  var publisher = getPublisher(getResponders, announce);\n  return function (store) {\n    return function (next) {\n      return function (action) {\n        if (action.type === 'BEFORE_INITIAL_CAPTURE') {\n          publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n          return;\n        }\n\n        if (action.type === 'INITIAL_PUBLISH') {\n          var critical = action.payload.critical;\n          publisher.beforeStart(critical, action.payload.movementMode);\n          next(action);\n          publisher.start(critical, action.payload.movementMode);\n          return;\n        }\n\n        if (action.type === 'DROP_COMPLETE') {\n          var result = action.payload.completed.result;\n          publisher.flush();\n          next(action);\n          publisher.drop(result);\n          return;\n        }\n\n        next(action);\n\n        if (action.type === 'FLUSH') {\n          publisher.abort();\n          return;\n        }\n\n        var state = store.getState();\n\n        if (state.phase === 'DRAGGING') {\n          publisher.update(state.critical, state.impact);\n        }\n      };\n    };\n  };\n});\n\nvar dropAnimationFinish = (function (store) {\n  return function (next) {\n    return function (action) {\n      if (action.type !== 'DROP_ANIMATION_FINISHED') {\n        next(action);\n        return;\n      }\n\n      var state = store.getState();\n      !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant(false) : void 0;\n      store.dispatch(completeDrop({\n        completed: state.completed\n      }));\n    };\n  };\n});\n\nvar dropAnimationFlushOnScroll = (function (store) {\n  var unbind = null;\n  var frameId = null;\n\n  function clear() {\n    if (frameId) {\n      cancelAnimationFrame(frameId);\n      frameId = null;\n    }\n\n    if (unbind) {\n      unbind();\n      unbind = null;\n    }\n  }\n\n  return function (next) {\n    return function (action) {\n      if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATION_FINISHED') {\n        clear();\n      }\n\n      next(action);\n\n      if (action.type !== 'DROP_ANIMATE') {\n        return;\n      }\n\n      var binding = {\n        eventName: 'scroll',\n        options: {\n          capture: true,\n          passive: false,\n          once: true\n        },\n        fn: function flushDropAnimation() {\n          var state = store.getState();\n\n          if (state.phase === 'DROP_ANIMATING') {\n            store.dispatch(dropAnimationFinished());\n          }\n        }\n      };\n      frameId = requestAnimationFrame(function () {\n        frameId = null;\n        unbind = bindEvents(window, [binding]);\n      });\n    };\n  };\n});\n\nvar dimensionMarshalStopper = (function (marshal) {\n  return function () {\n    return function (next) {\n      return function (action) {\n        if (action.type === 'DROP_COMPLETE' || action.type === 'FLUSH' || action.type === 'DROP_ANIMATE') {\n          marshal.stopPublishing();\n        }\n\n        next(action);\n      };\n    };\n  };\n});\n\nvar focus = (function (marshal) {\n  var isWatching = false;\n  return function () {\n    return function (next) {\n      return function (action) {\n        if (action.type === 'INITIAL_PUBLISH') {\n          isWatching = true;\n          marshal.tryRecordFocus(action.payload.critical.draggable.id);\n          next(action);\n          marshal.tryRestoreFocusRecorded();\n          return;\n        }\n\n        next(action);\n\n        if (!isWatching) {\n          return;\n        }\n\n        if (action.type === 'FLUSH') {\n          isWatching = false;\n          marshal.tryRestoreFocusRecorded();\n          return;\n        }\n\n        if (action.type === 'DROP_COMPLETE') {\n          isWatching = false;\n          var result = action.payload.completed.result;\n\n          if (result.combine) {\n            marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n          }\n\n          marshal.tryRestoreFocusRecorded();\n        }\n      };\n    };\n  };\n});\n\nvar shouldStop = function shouldStop(action) {\n  return action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH';\n};\n\nvar autoScroll = (function (autoScroller) {\n  return function (store) {\n    return function (next) {\n      return function (action) {\n        if (shouldStop(action)) {\n          autoScroller.stop();\n          next(action);\n          return;\n        }\n\n        if (action.type === 'INITIAL_PUBLISH') {\n          next(action);\n          var state = store.getState();\n          !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant(false) : void 0;\n          autoScroller.start(state);\n          return;\n        }\n\n        next(action);\n        autoScroller.scroll(store.getState());\n      };\n    };\n  };\n});\n\nvar pendingDrop = (function (store) {\n  return function (next) {\n    return function (action) {\n      next(action);\n\n      if (action.type !== 'PUBLISH_WHILE_DRAGGING') {\n        return;\n      }\n\n      var postActionState = store.getState();\n\n      if (postActionState.phase !== 'DROP_PENDING') {\n        return;\n      }\n\n      if (postActionState.isWaiting) {\n        return;\n      }\n\n      store.dispatch(drop({\n        reason: postActionState.reason\n      }));\n    };\n  };\n});\n\nvar composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose;\nvar createStore = (function (_ref) {\n  var dimensionMarshal = _ref.dimensionMarshal,\n      focusMarshal = _ref.focusMarshal,\n      styleMarshal = _ref.styleMarshal,\n      getResponders = _ref.getResponders,\n      announce = _ref.announce,\n      autoScroller = _ref.autoScroller;\n  return createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift$1(dimensionMarshal), drop$1, dropAnimationFinish, dropAnimationFlushOnScroll, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n});\n\nvar clean$1 = function clean() {\n  return {\n    additions: {},\n    removals: {},\n    modified: {}\n  };\n};\n\nvar timingKey = 'Publish collection from DOM';\nfunction createPublisher(_ref) {\n  var registry = _ref.registry,\n      callbacks = _ref.callbacks;\n  var staging = clean$1();\n  var frameId = null;\n\n  var collect = function collect() {\n    if (frameId) {\n      return;\n    }\n\n    callbacks.collectionStarting();\n    frameId = requestAnimationFrame(function () {\n      frameId = null;\n      start(timingKey);\n      var _staging = staging,\n          additions = _staging.additions,\n          removals = _staging.removals,\n          modified = _staging.modified;\n\n      var added = _Object$keys(additions).map(function (id) {\n        return registry.draggable.getById(id).getDimension(origin);\n      }).sort(function (a, b) {\n        return a.descriptor.index - b.descriptor.index;\n      });\n\n      var updated = _Object$keys(modified).map(function (id) {\n        var entry = registry.droppable.getById(id);\n        var scroll = entry.callbacks.getScrollWhileDragging();\n        return {\n          droppableId: id,\n          scroll: scroll\n        };\n      });\n\n      var result = {\n        additions: added,\n        removals: _Object$keys(removals),\n        modified: updated\n      };\n      staging = clean$1();\n      finish(timingKey);\n      callbacks.publish(result);\n    });\n  };\n\n  var add = function add(entry) {\n    var id = entry.descriptor.id;\n    staging.additions[id] = entry;\n    staging.modified[entry.descriptor.droppableId] = true;\n\n    if (staging.removals[id]) {\n      delete staging.removals[id];\n    }\n\n    collect();\n  };\n\n  var remove = function remove(entry) {\n    var descriptor = entry.descriptor;\n    staging.removals[descriptor.id] = true;\n    staging.modified[descriptor.droppableId] = true;\n\n    if (staging.additions[descriptor.id]) {\n      delete staging.additions[descriptor.id];\n    }\n\n    collect();\n  };\n\n  var stop = function stop() {\n    if (!frameId) {\n      return;\n    }\n\n    cancelAnimationFrame(frameId);\n    frameId = null;\n    staging = clean$1();\n  };\n\n  return {\n    add: add,\n    remove: remove,\n    stop: stop\n  };\n}\n\nvar getMaxScroll = (function (_ref) {\n  var scrollHeight = _ref.scrollHeight,\n      scrollWidth = _ref.scrollWidth,\n      height = _ref.height,\n      width = _ref.width;\n  var maxScroll = subtract({\n    x: scrollWidth,\n    y: scrollHeight\n  }, {\n    x: width,\n    y: height\n  });\n  var adjustedMaxScroll = {\n    x: Math.max(0, maxScroll.x),\n    y: Math.max(0, maxScroll.y)\n  };\n  return adjustedMaxScroll;\n});\n\nvar getDocumentElement = (function () {\n  var doc = document.documentElement;\n  !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant(false) : void 0;\n  return doc;\n});\n\nvar getMaxWindowScroll = (function () {\n  var doc = getDocumentElement();\n  var maxScroll = getMaxScroll({\n    scrollHeight: doc.scrollHeight,\n    scrollWidth: doc.scrollWidth,\n    width: doc.clientWidth,\n    height: doc.clientHeight\n  });\n  return maxScroll;\n});\n\nvar getViewport = (function () {\n  var scroll = getWindowScroll();\n  var maxScroll = getMaxWindowScroll();\n  var top = scroll.y;\n  var left = scroll.x;\n  var doc = getDocumentElement();\n  var width = doc.clientWidth;\n  var height = doc.clientHeight;\n  var right = left + width;\n  var bottom = top + height;\n  var frame = getRect({\n    top: top,\n    left: left,\n    right: right,\n    bottom: bottom\n  });\n  var viewport = {\n    frame: frame,\n    scroll: {\n      initial: scroll,\n      current: scroll,\n      max: maxScroll,\n      diff: {\n        value: origin,\n        displacement: origin\n      }\n    }\n  };\n  return viewport;\n});\n\nvar getInitialPublish = (function (_ref) {\n  var critical = _ref.critical,\n      scrollOptions = _ref.scrollOptions,\n      registry = _ref.registry;\n  var timingKey = 'Initial collection from DOM';\n  start(timingKey);\n  var viewport = getViewport();\n  var windowScroll = viewport.scroll.current;\n  var home = critical.droppable;\n  var droppables = registry.droppable.getAllByType(home.type).map(function (entry) {\n    return entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions);\n  });\n  var draggables = registry.draggable.getAllByType(critical.draggable.type).map(function (entry) {\n    return entry.getDimension(windowScroll);\n  });\n  var dimensions = {\n    draggables: toDraggableMap(draggables),\n    droppables: toDroppableMap(droppables)\n  };\n  finish(timingKey);\n  var result = {\n    dimensions: dimensions,\n    critical: critical,\n    viewport: viewport\n  };\n  return result;\n});\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n  if (entry.descriptor.id === dragging.id) {\n    return false;\n  }\n\n  if (entry.descriptor.type !== dragging.type) {\n    return false;\n  }\n\n  var home = registry.droppable.getById(entry.descriptor.droppableId);\n\n  if (home.descriptor.mode !== 'virtual') {\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      You are attempting to add or remove a Draggable [id: \" + entry.descriptor.id + \"]\\n      while a drag is occurring. This is only supported for virtual lists.\\n\\n      See https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/patterns/virtual-lists.md\\n    \") : void 0;\n    return false;\n  }\n\n  return true;\n}\n\nvar createDimensionMarshal = (function (registry, callbacks) {\n  var collection = null;\n  var publisher = createPublisher({\n    callbacks: {\n      publish: callbacks.publishWhileDragging,\n      collectionStarting: callbacks.collectionStarting\n    },\n    registry: registry\n  });\n\n  var updateDroppableIsEnabled = function updateDroppableIsEnabled(id, isEnabled) {\n    !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update is enabled flag of Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n\n    if (!collection) {\n      return;\n    }\n\n    callbacks.updateDroppableIsEnabled({\n      id: id,\n      isEnabled: isEnabled\n    });\n  };\n\n  var updateDroppableIsCombineEnabled = function updateDroppableIsCombineEnabled(id, isCombineEnabled) {\n    if (!collection) {\n      return;\n    }\n\n    !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update isCombineEnabled flag of Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n    callbacks.updateDroppableIsCombineEnabled({\n      id: id,\n      isCombineEnabled: isCombineEnabled\n    });\n  };\n\n  var updateDroppableScroll = function updateDroppableScroll(id, newScroll) {\n    if (!collection) {\n      return;\n    }\n\n    !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot update the scroll on Droppable \" + id + \" as it is not registered\") : invariant(false) : void 0;\n    callbacks.updateDroppableScroll({\n      id: id,\n      newScroll: newScroll\n    });\n  };\n\n  var scrollDroppable = function scrollDroppable(id, change) {\n    if (!collection) {\n      return;\n    }\n\n    registry.droppable.getById(id).callbacks.scroll(change);\n  };\n\n  var stopPublishing = function stopPublishing() {\n    if (!collection) {\n      return;\n    }\n\n    publisher.stop();\n    var home = collection.critical.droppable;\n    registry.droppable.getAllByType(home.type).forEach(function (entry) {\n      return entry.callbacks.dragStopped();\n    });\n    collection.unsubscribe();\n    collection = null;\n  };\n\n  var subscriber = function subscriber(event) {\n    !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant(false) : void 0;\n    var dragging = collection.critical.draggable;\n\n    if (event.type === 'ADDITION') {\n      if (shouldPublishUpdate(registry, dragging, event.value)) {\n        publisher.add(event.value);\n      }\n    }\n\n    if (event.type === 'REMOVAL') {\n      if (shouldPublishUpdate(registry, dragging, event.value)) {\n        publisher.remove(event.value);\n      }\n    }\n  };\n\n  var startPublishing = function startPublishing(request) {\n    !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant(false) : void 0;\n    var entry = registry.draggable.getById(request.draggableId);\n    var home = registry.droppable.getById(entry.descriptor.droppableId);\n    var critical = {\n      draggable: entry.descriptor,\n      droppable: home.descriptor\n    };\n    var unsubscribe = registry.subscribe(subscriber);\n    collection = {\n      critical: critical,\n      unsubscribe: unsubscribe\n    };\n    return getInitialPublish({\n      critical: critical,\n      registry: registry,\n      scrollOptions: request.scrollOptions\n    });\n  };\n\n  var marshal = {\n    updateDroppableIsEnabled: updateDroppableIsEnabled,\n    updateDroppableIsCombineEnabled: updateDroppableIsCombineEnabled,\n    scrollDroppable: scrollDroppable,\n    updateDroppableScroll: updateDroppableScroll,\n    startPublishing: startPublishing,\n    stopPublishing: stopPublishing\n  };\n  return marshal;\n});\n\nvar canStartDrag = (function (state, id) {\n  if (state.phase === 'IDLE') {\n    return true;\n  }\n\n  if (state.phase !== 'DROP_ANIMATING') {\n    return false;\n  }\n\n  if (state.completed.result.draggableId === id) {\n    return false;\n  }\n\n  return state.completed.result.reason === 'DROP';\n});\n\nvar scrollWindow = (function (change) {\n  window.scrollBy(change.x, change.y);\n});\n\nvar getScrollableDroppables = memoizeOne(function (droppables) {\n  return toDroppableList(droppables).filter(function (droppable) {\n    if (!droppable.isEnabled) {\n      return false;\n    }\n\n    if (!droppable.frame) {\n      return false;\n    }\n\n    return true;\n  });\n});\n\nvar getScrollableDroppableOver = function getScrollableDroppableOver(target, droppables) {\n  var maybe = find(getScrollableDroppables(droppables), function (droppable) {\n    !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant(false) : void 0;\n    return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n  });\n  return maybe;\n};\n\nvar getBestScrollableDroppable = (function (_ref) {\n  var center = _ref.center,\n      destination = _ref.destination,\n      droppables = _ref.droppables;\n\n  if (destination) {\n    var _dimension = droppables[destination];\n\n    if (!_dimension.frame) {\n      return null;\n    }\n\n    return _dimension;\n  }\n\n  var dimension = getScrollableDroppableOver(center, droppables);\n  return dimension;\n});\n\nvar config = {\n  startFromPercentage: 0.25,\n  maxScrollAtPercentage: 0.05,\n  maxPixelScroll: 28,\n  ease: function ease(percentage) {\n    return Math.pow(percentage, 2);\n  },\n  durationDampening: {\n    stopDampeningAt: 1200,\n    accelerateAt: 360\n  }\n};\n\nvar getDistanceThresholds = (function (container, axis) {\n  var startScrollingFrom = container[axis.size] * config.startFromPercentage;\n  var maxScrollValueAt = container[axis.size] * config.maxScrollAtPercentage;\n  var thresholds = {\n    startScrollingFrom: startScrollingFrom,\n    maxScrollValueAt: maxScrollValueAt\n  };\n  return thresholds;\n});\n\nvar getPercentage = (function (_ref) {\n  var startOfRange = _ref.startOfRange,\n      endOfRange = _ref.endOfRange,\n      current = _ref.current;\n  var range = endOfRange - startOfRange;\n\n  if (range === 0) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      Detected distance range of 0 in the fluid auto scroller\\n      This is unexpected and would cause a divide by 0 issue.\\n      Not allowing an auto scroll\\n    \") : void 0;\n    return 0;\n  }\n\n  var currentInRange = current - startOfRange;\n  var percentage = currentInRange / range;\n  return percentage;\n});\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (function (distanceToEdge, thresholds) {\n  if (distanceToEdge > thresholds.startScrollingFrom) {\n    return 0;\n  }\n\n  if (distanceToEdge <= thresholds.maxScrollValueAt) {\n    return config.maxPixelScroll;\n  }\n\n  if (distanceToEdge === thresholds.startScrollingFrom) {\n    return minScroll;\n  }\n\n  var percentageFromMaxScrollValueAt = getPercentage({\n    startOfRange: thresholds.maxScrollValueAt,\n    endOfRange: thresholds.startScrollingFrom,\n    current: distanceToEdge\n  });\n  var percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n  var scroll = config.maxPixelScroll * config.ease(percentageFromStartScrollingFrom);\n  return Math.ceil(scroll);\n});\n\nvar accelerateAt = config.durationDampening.accelerateAt;\nvar stopAt = config.durationDampening.stopDampeningAt;\nvar dampenValueByTime = (function (proposedScroll, dragStartTime) {\n  var startOfRange = dragStartTime;\n  var endOfRange = stopAt;\n\n  var now = _Date$now();\n\n  var runTime = now - startOfRange;\n\n  if (runTime >= stopAt) {\n    return proposedScroll;\n  }\n\n  if (runTime < accelerateAt) {\n    return minScroll;\n  }\n\n  var betweenAccelerateAtAndStopAtPercentage = getPercentage({\n    startOfRange: accelerateAt,\n    endOfRange: endOfRange,\n    current: runTime\n  });\n  var scroll = proposedScroll * config.ease(betweenAccelerateAtAndStopAtPercentage);\n  return Math.ceil(scroll);\n});\n\nvar getValue = (function (_ref) {\n  var distanceToEdge = _ref.distanceToEdge,\n      thresholds = _ref.thresholds,\n      dragStartTime = _ref.dragStartTime,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n  var scroll = getValueFromDistance(distanceToEdge, thresholds);\n\n  if (scroll === 0) {\n    return 0;\n  }\n\n  if (!shouldUseTimeDampening) {\n    return scroll;\n  }\n\n  return Math.max(dampenValueByTime(scroll, dragStartTime), minScroll);\n});\n\nvar getScrollOnAxis = (function (_ref) {\n  var container = _ref.container,\n      distanceToEdges = _ref.distanceToEdges,\n      dragStartTime = _ref.dragStartTime,\n      axis = _ref.axis,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n  var thresholds = getDistanceThresholds(container, axis);\n  var isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n\n  if (isCloserToEnd) {\n    return getValue({\n      distanceToEdge: distanceToEdges[axis.end],\n      thresholds: thresholds,\n      dragStartTime: dragStartTime,\n      shouldUseTimeDampening: shouldUseTimeDampening\n    });\n  }\n\n  return -1 * getValue({\n    distanceToEdge: distanceToEdges[axis.start],\n    thresholds: thresholds,\n    dragStartTime: dragStartTime,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n});\n\nvar adjustForSizeLimits = (function (_ref) {\n  var container = _ref.container,\n      subject = _ref.subject,\n      proposedScroll = _ref.proposedScroll;\n  var isTooBigVertically = subject.height > container.height;\n  var isTooBigHorizontally = subject.width > container.width;\n\n  if (!isTooBigHorizontally && !isTooBigVertically) {\n    return proposedScroll;\n  }\n\n  if (isTooBigHorizontally && isTooBigVertically) {\n    return null;\n  }\n\n  return {\n    x: isTooBigHorizontally ? 0 : proposedScroll.x,\n    y: isTooBigVertically ? 0 : proposedScroll.y\n  };\n});\n\nvar clean$2 = apply(function (value) {\n  return value === 0 ? 0 : value;\n});\nvar getScroll = (function (_ref) {\n  var dragStartTime = _ref.dragStartTime,\n      container = _ref.container,\n      subject = _ref.subject,\n      center = _ref.center,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n  var distanceToEdges = {\n    top: center.y - container.top,\n    right: container.right - center.x,\n    bottom: container.bottom - center.y,\n    left: center.x - container.left\n  };\n  var y = getScrollOnAxis({\n    container: container,\n    distanceToEdges: distanceToEdges,\n    dragStartTime: dragStartTime,\n    axis: vertical,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n  var x = getScrollOnAxis({\n    container: container,\n    distanceToEdges: distanceToEdges,\n    dragStartTime: dragStartTime,\n    axis: horizontal,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n  var required = clean$2({\n    x: x,\n    y: y\n  });\n\n  if (isEqual(required, origin)) {\n    return null;\n  }\n\n  var limited = adjustForSizeLimits({\n    container: container,\n    subject: subject,\n    proposedScroll: required\n  });\n\n  if (!limited) {\n    return null;\n  }\n\n  return isEqual(limited, origin) ? null : limited;\n});\n\nvar smallestSigned = apply(function (value) {\n  if (value === 0) {\n    return 0;\n  }\n\n  return value > 0 ? 1 : -1;\n});\nvar getOverlap = function () {\n  var getRemainder = function getRemainder(target, max) {\n    if (target < 0) {\n      return target;\n    }\n\n    if (target > max) {\n      return target - max;\n    }\n\n    return 0;\n  };\n\n  return function (_ref) {\n    var current = _ref.current,\n        max = _ref.max,\n        change = _ref.change;\n    var targetScroll = add(current, change);\n    var overlap = {\n      x: getRemainder(targetScroll.x, max.x),\n      y: getRemainder(targetScroll.y, max.y)\n    };\n\n    if (isEqual(overlap, origin)) {\n      return null;\n    }\n\n    return overlap;\n  };\n}();\nvar canPartiallyScroll = function canPartiallyScroll(_ref2) {\n  var rawMax = _ref2.max,\n      current = _ref2.current,\n      change = _ref2.change;\n  var max = {\n    x: Math.max(current.x, rawMax.x),\n    y: Math.max(current.y, rawMax.y)\n  };\n  var smallestChange = smallestSigned(change);\n  var overlap = getOverlap({\n    max: max,\n    current: current,\n    change: smallestChange\n  });\n\n  if (!overlap) {\n    return true;\n  }\n\n  if (smallestChange.x !== 0 && overlap.x === 0) {\n    return true;\n  }\n\n  if (smallestChange.y !== 0 && overlap.y === 0) {\n    return true;\n  }\n\n  return false;\n};\nvar canScrollWindow = function canScrollWindow(viewport, change) {\n  return canPartiallyScroll({\n    current: viewport.scroll.current,\n    max: viewport.scroll.max,\n    change: change\n  });\n};\nvar getWindowOverlap = function getWindowOverlap(viewport, change) {\n  if (!canScrollWindow(viewport, change)) {\n    return null;\n  }\n\n  var max = viewport.scroll.max;\n  var current = viewport.scroll.current;\n  return getOverlap({\n    current: current,\n    max: max,\n    change: change\n  });\n};\nvar canScrollDroppable = function canScrollDroppable(droppable, change) {\n  var frame = droppable.frame;\n\n  if (!frame) {\n    return false;\n  }\n\n  return canPartiallyScroll({\n    current: frame.scroll.current,\n    max: frame.scroll.max,\n    change: change\n  });\n};\nvar getDroppableOverlap = function getDroppableOverlap(droppable, change) {\n  var frame = droppable.frame;\n\n  if (!frame) {\n    return null;\n  }\n\n  if (!canScrollDroppable(droppable, change)) {\n    return null;\n  }\n\n  return getOverlap({\n    current: frame.scroll.current,\n    max: frame.scroll.max,\n    change: change\n  });\n};\n\nvar getWindowScrollChange = (function (_ref) {\n  var viewport = _ref.viewport,\n      subject = _ref.subject,\n      center = _ref.center,\n      dragStartTime = _ref.dragStartTime,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n  var scroll = getScroll({\n    dragStartTime: dragStartTime,\n    container: viewport.frame,\n    subject: subject,\n    center: center,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n  return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n});\n\nvar getDroppableScrollChange = (function (_ref) {\n  var droppable = _ref.droppable,\n      subject = _ref.subject,\n      center = _ref.center,\n      dragStartTime = _ref.dragStartTime,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening;\n  var frame = droppable.frame;\n\n  if (!frame) {\n    return null;\n  }\n\n  var scroll = getScroll({\n    dragStartTime: dragStartTime,\n    container: frame.pageMarginBox,\n    subject: subject,\n    center: center,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n  return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n});\n\nvar scroll$1 = (function (_ref) {\n  var state = _ref.state,\n      dragStartTime = _ref.dragStartTime,\n      shouldUseTimeDampening = _ref.shouldUseTimeDampening,\n      scrollWindow = _ref.scrollWindow,\n      scrollDroppable = _ref.scrollDroppable;\n  var center = state.current.page.borderBoxCenter;\n  var draggable = state.dimensions.draggables[state.critical.draggable.id];\n  var subject = draggable.page.marginBox;\n\n  if (state.isWindowScrollAllowed) {\n    var viewport = state.viewport;\n\n    var _change = getWindowScrollChange({\n      dragStartTime: dragStartTime,\n      viewport: viewport,\n      subject: subject,\n      center: center,\n      shouldUseTimeDampening: shouldUseTimeDampening\n    });\n\n    if (_change) {\n      scrollWindow(_change);\n      return;\n    }\n  }\n\n  var droppable = getBestScrollableDroppable({\n    center: center,\n    destination: whatIsDraggedOver(state.impact),\n    droppables: state.dimensions.droppables\n  });\n\n  if (!droppable) {\n    return;\n  }\n\n  var change = getDroppableScrollChange({\n    dragStartTime: dragStartTime,\n    droppable: droppable,\n    subject: subject,\n    center: center,\n    shouldUseTimeDampening: shouldUseTimeDampening\n  });\n\n  if (change) {\n    scrollDroppable(droppable.descriptor.id, change);\n  }\n});\n\nvar createFluidScroller = (function (_ref) {\n  var scrollWindow = _ref.scrollWindow,\n      scrollDroppable = _ref.scrollDroppable;\n  var scheduleWindowScroll = rafSchd(scrollWindow);\n  var scheduleDroppableScroll = rafSchd(scrollDroppable);\n  var dragging = null;\n\n  var tryScroll = function tryScroll(state) {\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant(false) : void 0;\n    var _dragging = dragging,\n        shouldUseTimeDampening = _dragging.shouldUseTimeDampening,\n        dragStartTime = _dragging.dragStartTime;\n    scroll$1({\n      state: state,\n      scrollWindow: scheduleWindowScroll,\n      scrollDroppable: scheduleDroppableScroll,\n      dragStartTime: dragStartTime,\n      shouldUseTimeDampening: shouldUseTimeDampening\n    });\n  };\n\n  var start$1 = function start$1(state) {\n    start('starting fluid scroller');\n    !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant(false) : void 0;\n\n    var dragStartTime = _Date$now();\n\n    var wasScrollNeeded = false;\n\n    var fakeScrollCallback = function fakeScrollCallback() {\n      wasScrollNeeded = true;\n    };\n\n    scroll$1({\n      state: state,\n      dragStartTime: 0,\n      shouldUseTimeDampening: false,\n      scrollWindow: fakeScrollCallback,\n      scrollDroppable: fakeScrollCallback\n    });\n    dragging = {\n      dragStartTime: dragStartTime,\n      shouldUseTimeDampening: wasScrollNeeded\n    };\n    finish('starting fluid scroller');\n\n    if (wasScrollNeeded) {\n      tryScroll(state);\n    }\n  };\n\n  var stop = function stop() {\n    if (!dragging) {\n      return;\n    }\n\n    scheduleWindowScroll.cancel();\n    scheduleDroppableScroll.cancel();\n    dragging = null;\n  };\n\n  return {\n    start: start$1,\n    stop: stop,\n    scroll: tryScroll\n  };\n});\n\nvar createJumpScroller = (function (_ref) {\n  var move = _ref.move,\n      scrollDroppable = _ref.scrollDroppable,\n      scrollWindow = _ref.scrollWindow;\n\n  var moveByOffset = function moveByOffset(state, offset) {\n    var client = add(state.current.client.selection, offset);\n    move({\n      client: client\n    });\n  };\n\n  var scrollDroppableAsMuchAsItCan = function scrollDroppableAsMuchAsItCan(droppable, change) {\n    if (!canScrollDroppable(droppable, change)) {\n      return change;\n    }\n\n    var overlap = getDroppableOverlap(droppable, change);\n\n    if (!overlap) {\n      scrollDroppable(droppable.descriptor.id, change);\n      return null;\n    }\n\n    var whatTheDroppableCanScroll = subtract(change, overlap);\n    scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n    var remainder = subtract(change, whatTheDroppableCanScroll);\n    return remainder;\n  };\n\n  var scrollWindowAsMuchAsItCan = function scrollWindowAsMuchAsItCan(isWindowScrollAllowed, viewport, change) {\n    if (!isWindowScrollAllowed) {\n      return change;\n    }\n\n    if (!canScrollWindow(viewport, change)) {\n      return change;\n    }\n\n    var overlap = getWindowOverlap(viewport, change);\n\n    if (!overlap) {\n      scrollWindow(change);\n      return null;\n    }\n\n    var whatTheWindowCanScroll = subtract(change, overlap);\n    scrollWindow(whatTheWindowCanScroll);\n    var remainder = subtract(change, whatTheWindowCanScroll);\n    return remainder;\n  };\n\n  var jumpScroller = function jumpScroller(state) {\n    var request = state.scrollJumpRequest;\n\n    if (!request) {\n      return;\n    }\n\n    var destination = whatIsDraggedOver(state.impact);\n    !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant(false) : void 0;\n    var droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n\n    if (!droppableRemainder) {\n      return;\n    }\n\n    var viewport = state.viewport;\n    var windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n\n    if (!windowRemainder) {\n      return;\n    }\n\n    moveByOffset(state, windowRemainder);\n  };\n\n  return jumpScroller;\n});\n\nvar createAutoScroller = (function (_ref) {\n  var scrollDroppable = _ref.scrollDroppable,\n      scrollWindow = _ref.scrollWindow,\n      move = _ref.move;\n  var fluidScroller = createFluidScroller({\n    scrollWindow: scrollWindow,\n    scrollDroppable: scrollDroppable\n  });\n  var jumpScroll = createJumpScroller({\n    move: move,\n    scrollWindow: scrollWindow,\n    scrollDroppable: scrollDroppable\n  });\n\n  var scroll = function scroll(state) {\n    if (state.phase !== 'DRAGGING') {\n      return;\n    }\n\n    if (state.movementMode === 'FLUID') {\n      fluidScroller.scroll(state);\n      return;\n    }\n\n    if (!state.scrollJumpRequest) {\n      return;\n    }\n\n    jumpScroll(state);\n  };\n\n  var scroller = {\n    scroll: scroll,\n    start: fluidScroller.start,\n    stop: fluidScroller.stop\n  };\n  return scroller;\n});\n\nvar prefix$1 = 'data-rbd';\nvar dragHandle = function () {\n  var base = prefix$1 + \"-drag-handle\";\n  return {\n    base: base,\n    draggableId: base + \"-draggable-id\",\n    contextId: base + \"-context-id\"\n  };\n}();\nvar draggable = function () {\n  var base = prefix$1 + \"-draggable\";\n  return {\n    base: base,\n    contextId: base + \"-context-id\",\n    id: base + \"-id\"\n  };\n}();\nvar droppable = function () {\n  var base = prefix$1 + \"-droppable\";\n  return {\n    base: base,\n    contextId: base + \"-context-id\",\n    id: base + \"-id\"\n  };\n}();\nvar scrollContainer = {\n  contextId: prefix$1 + \"-scroll-container-context-id\"\n};\n\nvar makeGetSelector = function makeGetSelector(context) {\n  return function (attribute) {\n    return \"[\" + attribute + \"=\\\"\" + context + \"\\\"]\";\n  };\n};\n\nvar getStyles = function getStyles(rules, property) {\n  return rules.map(function (rule) {\n    var value = rule.styles[property];\n\n    if (!value) {\n      return '';\n    }\n\n    return rule.selector + \" { \" + value + \" }\";\n  }).join(' ');\n};\n\nvar noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = (function (contextId) {\n  var getSelector = makeGetSelector(contextId);\n\n  var dragHandle$1 = function () {\n    var grabCursor = \"\\n      cursor: -webkit-grab;\\n      cursor: grab;\\n    \";\n    return {\n      selector: getSelector(dragHandle.contextId),\n      styles: {\n        always: \"\\n          -webkit-touch-callout: none;\\n          -webkit-tap-highlight-color: rgba(0,0,0,0);\\n          touch-action: manipulation;\\n        \",\n        resting: grabCursor,\n        dragging: noPointerEvents,\n        dropAnimating: grabCursor\n      }\n    };\n  }();\n\n  var draggable$1 = function () {\n    var transition = \"\\n      transition: \" + transitions.outOfTheWay + \";\\n    \";\n    return {\n      selector: getSelector(draggable.contextId),\n      styles: {\n        dragging: transition,\n        dropAnimating: transition,\n        userCancel: transition\n      }\n    };\n  }();\n\n  var droppable$1 = {\n    selector: getSelector(droppable.contextId),\n    styles: {\n      always: \"overflow-anchor: none;\"\n    }\n  };\n  var body = {\n    selector: 'body',\n    styles: {\n      dragging: \"\\n        cursor: grabbing;\\n        cursor: -webkit-grabbing;\\n        user-select: none;\\n        -webkit-user-select: none;\\n        -moz-user-select: none;\\n        -ms-user-select: none;\\n        overflow-anchor: none;\\n      \"\n    }\n  };\n  var rules = [draggable$1, dragHandle$1, droppable$1, body];\n  return {\n    always: getStyles(rules, 'always'),\n    resting: getStyles(rules, 'resting'),\n    dragging: getStyles(rules, 'dragging'),\n    dropAnimating: getStyles(rules, 'dropAnimating'),\n    userCancel: getStyles(rules, 'userCancel')\n  };\n});\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nvar getHead = function getHead() {\n  var head = document.querySelector('head');\n  !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant(false) : void 0;\n  return head;\n};\n\nvar createStyleEl = function createStyleEl(nonce) {\n  var el = document.createElement('style');\n\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n\n  el.type = 'text/css';\n  return el;\n};\n\nfunction useStyleMarshal(contextId, nonce) {\n  var styles = useMemo(function () {\n    return getStyles$1(contextId);\n  }, [contextId]);\n  var alwaysRef = useRef(null);\n  var dynamicRef = useRef(null);\n  var setDynamicStyle = useCallback(memoizeOne(function (proposed) {\n    var el = dynamicRef.current;\n    !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant(false) : void 0;\n    el.textContent = proposed;\n  }), []);\n  var setAlwaysStyle = useCallback(function (proposed) {\n    var el = alwaysRef.current;\n    !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant(false) : void 0;\n    el.textContent = proposed;\n  }, []);\n  useIsomorphicLayoutEffect(function () {\n    !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant(false) : void 0;\n    var always = createStyleEl(nonce);\n    var dynamic = createStyleEl(nonce);\n    alwaysRef.current = always;\n    dynamicRef.current = dynamic;\n    always.setAttribute(prefix$1 + \"-always\", contextId);\n    dynamic.setAttribute(prefix$1 + \"-dynamic\", contextId);\n    getHead().appendChild(always);\n    getHead().appendChild(dynamic);\n    setAlwaysStyle(styles.always);\n    setDynamicStyle(styles.resting);\n    return function () {\n      var remove = function remove(ref) {\n        var current = ref.current;\n        !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant(false) : void 0;\n        getHead().removeChild(current);\n        ref.current = null;\n      };\n\n      remove(alwaysRef);\n      remove(dynamicRef);\n    };\n  }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n  var dragging = useCallback(function () {\n    return setDynamicStyle(styles.dragging);\n  }, [setDynamicStyle, styles.dragging]);\n  var dropping = useCallback(function (reason) {\n    if (reason === 'DROP') {\n      setDynamicStyle(styles.dropAnimating);\n      return;\n    }\n\n    setDynamicStyle(styles.userCancel);\n  }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n  var resting = useCallback(function () {\n    if (!dynamicRef.current) {\n      return;\n    }\n\n    setDynamicStyle(styles.resting);\n  }, [setDynamicStyle, styles.resting]);\n  var marshal = useMemo(function () {\n    return {\n      dragging: dragging,\n      dropping: dropping,\n      resting: resting\n    };\n  }, [dragging, dropping, resting]);\n  return marshal;\n}\n\nvar getWindowFromEl = (function (el) {\n  return el && el.ownerDocument ? el.ownerDocument.defaultView : window;\n});\n\nfunction isHtmlElement(el) {\n  return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n  var selector = \"[\" + dragHandle.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n  var possible = toArray(document.querySelectorAll(selector));\n\n  if (!possible.length) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find any drag handles in the context \\\"\" + contextId + \"\\\"\") : void 0;\n    return null;\n  }\n\n  var handle = find(possible, function (el) {\n    return el.getAttribute(dragHandle.draggableId) === draggableId;\n  });\n\n  if (!handle) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find drag handle with id \\\"\" + draggableId + \"\\\" as no handle with a matching id was found\") : void 0;\n    return null;\n  }\n\n  if (!isHtmlElement(handle)) {\n    process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n    return null;\n  }\n\n  return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n  var entriesRef = useRef({});\n  var recordRef = useRef(null);\n  var restoreFocusFrameRef = useRef(null);\n  var isMountedRef = useRef(false);\n  var register = useCallback(function register(id, focus) {\n    var entry = {\n      id: id,\n      focus: focus\n    };\n    entriesRef.current[id] = entry;\n    return function unregister() {\n      var entries = entriesRef.current;\n      var current = entries[id];\n\n      if (current !== entry) {\n        delete entries[id];\n      }\n    };\n  }, []);\n  var tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n    var handle = findDragHandle(contextId, tryGiveFocusTo);\n\n    if (handle && handle !== document.activeElement) {\n      handle.focus();\n    }\n  }, [contextId]);\n  var tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n    if (recordRef.current === previous) {\n      recordRef.current = redirectTo;\n    }\n  }, []);\n  var tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n    if (restoreFocusFrameRef.current) {\n      return;\n    }\n\n    if (!isMountedRef.current) {\n      return;\n    }\n\n    restoreFocusFrameRef.current = requestAnimationFrame(function () {\n      restoreFocusFrameRef.current = null;\n      var record = recordRef.current;\n\n      if (record) {\n        tryGiveFocus(record);\n      }\n    });\n  }, [tryGiveFocus]);\n  var tryRecordFocus = useCallback(function tryRecordFocus(id) {\n    recordRef.current = null;\n    var focused = document.activeElement;\n\n    if (!focused) {\n      return;\n    }\n\n    if (focused.getAttribute(dragHandle.draggableId) !== id) {\n      return;\n    }\n\n    recordRef.current = id;\n  }, []);\n  useIsomorphicLayoutEffect(function () {\n    isMountedRef.current = true;\n    return function clearFrameOnUnmount() {\n      isMountedRef.current = false;\n      var frameId = restoreFocusFrameRef.current;\n\n      if (frameId) {\n        cancelAnimationFrame(frameId);\n      }\n    };\n  }, []);\n  var marshal = useMemo(function () {\n    return {\n      register: register,\n      tryRecordFocus: tryRecordFocus,\n      tryRestoreFocusRecorded: tryRestoreFocusRecorded,\n      tryShiftRecord: tryShiftRecord\n    };\n  }, [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n  return marshal;\n}\n\nfunction createRegistry() {\n  var entries = {\n    draggables: {},\n    droppables: {}\n  };\n  var subscribers = [];\n\n  function subscribe(cb) {\n    subscribers.push(cb);\n    return function unsubscribe() {\n      var index = subscribers.indexOf(cb);\n\n      if (index === -1) {\n        return;\n      }\n\n      subscribers.splice(index, 1);\n    };\n  }\n\n  function notify(event) {\n    if (subscribers.length) {\n      subscribers.forEach(function (cb) {\n        return cb(event);\n      });\n    }\n  }\n\n  function findDraggableById(id) {\n    return entries.draggables[id] || null;\n  }\n\n  function getDraggableById(id) {\n    var entry = findDraggableById(id);\n    !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find draggable entry with id [\" + id + \"]\") : invariant(false) : void 0;\n    return entry;\n  }\n\n  var draggableAPI = {\n    register: function register(entry) {\n      entries.draggables[entry.descriptor.id] = entry;\n      notify({\n        type: 'ADDITION',\n        value: entry\n      });\n    },\n    update: function update(entry, last) {\n      var current = entries.draggables[last.descriptor.id];\n\n      if (!current) {\n        return;\n      }\n\n      if (current.uniqueId !== entry.uniqueId) {\n        return;\n      }\n\n      delete entries.draggables[last.descriptor.id];\n      entries.draggables[entry.descriptor.id] = entry;\n    },\n    unregister: function unregister(entry) {\n      var draggableId = entry.descriptor.id;\n      var current = findDraggableById(draggableId);\n\n      if (!current) {\n        return;\n      }\n\n      if (entry.uniqueId !== current.uniqueId) {\n        return;\n      }\n\n      delete entries.draggables[draggableId];\n      notify({\n        type: 'REMOVAL',\n        value: entry\n      });\n    },\n    getById: getDraggableById,\n    findById: findDraggableById,\n    exists: function exists(id) {\n      return Boolean(findDraggableById(id));\n    },\n    getAllByType: function getAllByType(type) {\n      return values(entries.draggables).filter(function (entry) {\n        return entry.descriptor.type === type;\n      });\n    }\n  };\n\n  function findDroppableById(id) {\n    return entries.droppables[id] || null;\n  }\n\n  function getDroppableById(id) {\n    var entry = findDroppableById(id);\n    !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot find droppable entry with id [\" + id + \"]\") : invariant(false) : void 0;\n    return entry;\n  }\n\n  var droppableAPI = {\n    register: function register(entry) {\n      entries.droppables[entry.descriptor.id] = entry;\n    },\n    unregister: function unregister(entry) {\n      var current = findDroppableById(entry.descriptor.id);\n\n      if (!current) {\n        return;\n      }\n\n      if (entry.uniqueId !== current.uniqueId) {\n        return;\n      }\n\n      delete entries.droppables[entry.descriptor.id];\n    },\n    getById: getDroppableById,\n    findById: findDroppableById,\n    exists: function exists(id) {\n      return Boolean(findDroppableById(id));\n    },\n    getAllByType: function getAllByType(type) {\n      return values(entries.droppables).filter(function (entry) {\n        return entry.descriptor.type === type;\n      });\n    }\n  };\n\n  function clean() {\n    entries.draggables = {};\n    entries.droppables = {};\n    subscribers.length = 0;\n  }\n\n  return {\n    draggable: draggableAPI,\n    droppable: droppableAPI,\n    subscribe: subscribe,\n    clean: clean\n  };\n}\n\nfunction useRegistry() {\n  var registry = useMemo(createRegistry, []);\n  useEffect(function () {\n    return function unmount() {\n      requestAnimationFrame(registry.clean);\n    };\n  }, [registry]);\n  return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = (function () {\n  var body = document.body;\n  !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant(false) : void 0;\n  return body;\n});\n\nvar visuallyHidden = {\n  position: 'absolute',\n  width: '1px',\n  height: '1px',\n  margin: '-1px',\n  border: '0',\n  padding: '0',\n  overflow: 'hidden',\n  clip: 'rect(0 0 0 0)',\n  'clip-path': 'inset(100%)'\n};\n\nvar getId = function getId(contextId) {\n  return \"rbd-announcement-\" + contextId;\n};\nfunction useAnnouncer(contextId) {\n  var id = useMemo(function () {\n    return getId(contextId);\n  }, [contextId]);\n  var ref = useRef(null);\n  useEffect(function setup() {\n    var el = document.createElement('div');\n    ref.current = el;\n    el.id = id;\n    el.setAttribute('aria-live', 'assertive');\n    el.setAttribute('role', 'log');\n    el.setAttribute('aria-atomic', 'true');\n\n    _Object$assign(el.style, visuallyHidden);\n\n    getBodyElement().appendChild(el);\n    return function cleanup() {\n      setTimeout(function remove() {\n        getBodyElement().removeChild(el);\n\n        if (el === ref.current) {\n          ref.current = null;\n        }\n      });\n    };\n  }, [id]);\n  var announce = useCallback(function (message) {\n    var el = ref.current;\n\n    if (el) {\n      el.textContent = message;\n      return;\n    }\n\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      A screen reader message was trying to be announced but it was unable to do so.\\n      This can occur if you unmount your <DragDropContext /> in your onDragEnd.\\n      Consider calling provided.announce() before the unmount so that the instruction will\\n      not be lost for users relying on a screen reader.\\n\\n      Message not passed to screen reader:\\n\\n      \\\"\" + message + \"\\\"\\n    \") : void 0;\n  }, []);\n  return announce;\n}\n\nvar getId$1 = function getId(contextId) {\n  return \"rbd-lift-instruction-\" + contextId;\n};\nfunction useLiftInstruction(contextId, liftInstruction) {\n  var id = useMemo(function () {\n    return getId$1(contextId);\n  }, [contextId]);\n  useEffect(function mount() {\n    var el = document.createElement('div');\n    el.id = id;\n    el.textContent = liftInstruction;\n\n    _Object$assign(el.style, {\n      display: 'none'\n    });\n\n    getBodyElement().appendChild(el);\n    return function unmount() {\n      getBodyElement().removeChild(el);\n    };\n  }, [id, liftInstruction]);\n  return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^16.8.5\",\n\t\"react-dom\": \"^16.8.5\"\n};\n\nvar semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\n\nvar getVersion = function getVersion(value) {\n  var result = semver.exec(value);\n  !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Unable to parse React version \" + value) : invariant(false) : void 0;\n  var major = Number(result[1]);\n  var minor = Number(result[2]);\n  var patch = Number(result[3]);\n  return {\n    major: major,\n    minor: minor,\n    patch: patch,\n    raw: value\n  };\n};\n\nvar isSatisfied = function isSatisfied(expected, actual) {\n  if (actual.major > expected.major) {\n    return true;\n  }\n\n  if (actual.major < expected.major) {\n    return false;\n  }\n\n  if (actual.minor > expected.minor) {\n    return true;\n  }\n\n  if (actual.minor < expected.minor) {\n    return false;\n  }\n\n  return actual.patch >= expected.patch;\n};\n\nvar checkReactVersion = (function (peerDepValue, actualValue) {\n  var peerDep = getVersion(peerDepValue);\n  var actual = getVersion(actualValue);\n\n  if (isSatisfied(peerDep, actual)) {\n    return;\n  }\n\n  process.env.NODE_ENV !== \"production\" ? warning(\"\\n    React version: [\" + actual.raw + \"]\\n    does not satisfy expected peer dependency version: [\" + peerDep.raw + \"]\\n\\n    This can result in run time bugs, and even fatal crashes\\n  \") : void 0;\n});\n\nvar suffix = \"\\n  We expect a html5 doctype: <!doctype html>\\n  This is to ensure consistent browser layout and measurement\\n\\n  More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/doctype.md\\n\";\nvar checkDoctype = (function (doc) {\n  var doctype = doc.doctype;\n\n  if (!doctype) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      No <!doctype html> found.\\n\\n      \" + suffix + \"\\n    \") : void 0;\n    return;\n  }\n\n  if (doctype.name.toLowerCase() !== 'html') {\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      Unexpected <!doctype> found: (\" + doctype.name + \")\\n\\n      \" + suffix + \"\\n    \") : void 0;\n  }\n\n  if (doctype.publicId !== '') {\n    process.env.NODE_ENV !== \"production\" ? warning(\"\\n      Unexpected <!doctype> publicId found: (\" + doctype.publicId + \")\\n      A html5 doctype does not have a publicId\\n\\n      \" + suffix + \"\\n    \") : void 0;\n  }\n});\n\nfunction useDev(useHook) {\n  if (process.env.NODE_ENV !== 'production') {\n    useHook();\n  }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n  useDev(function () {\n    useEffect(function () {\n      try {\n        fn();\n      } catch (e) {\n        error(\"\\n          A setup problem was encountered.\\n\\n          > \" + e.message + \"\\n        \");\n      }\n    }, inputs);\n  });\n}\n\nfunction useStartupValidation() {\n  useDevSetupWarning(function () {\n    checkReactVersion(peerDependencies.react, React.version);\n    checkDoctype(document);\n  }, []);\n}\n\nfunction usePrevious(current) {\n  var ref = useRef(current);\n  useEffect(function () {\n    ref.current = current;\n  });\n  return ref;\n}\n\nfunction create() {\n  var lock = null;\n\n  function isClaimed() {\n    return Boolean(lock);\n  }\n\n  function isActive(value) {\n    return value === lock;\n  }\n\n  function claim(abandon) {\n    !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant(false) : void 0;\n    var newLock = {\n      abandon: abandon\n    };\n    lock = newLock;\n    return newLock;\n  }\n\n  function release() {\n    !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant(false) : void 0;\n    lock = null;\n  }\n\n  function tryAbandon() {\n    if (lock) {\n      lock.abandon();\n      release();\n    }\n  }\n\n  return {\n    isClaimed: isClaimed,\n    isActive: isActive,\n    claim: claim,\n    release: release,\n    tryAbandon: tryAbandon\n  };\n}\n\nvar tab = 9;\nvar enter = 13;\nvar escape = 27;\nvar space = 32;\nvar pageUp = 33;\nvar pageDown = 34;\nvar end = 35;\nvar home = 36;\nvar arrowLeft = 37;\nvar arrowUp = 38;\nvar arrowRight = 39;\nvar arrowDown = 40;\n\nvar _preventedKeys;\nvar preventedKeys = (_preventedKeys = {}, _preventedKeys[enter] = true, _preventedKeys[tab] = true, _preventedKeys);\nvar preventStandardKeyEvents = (function (event) {\n  if (preventedKeys[event.keyCode]) {\n    event.preventDefault();\n  }\n});\n\nvar supportedEventName = function () {\n  var base = 'visibilitychange';\n\n  if (typeof document === 'undefined') {\n    return base;\n  }\n\n  var candidates = [base, \"ms\" + base, \"webkit\" + base, \"moz\" + base, \"o\" + base];\n  var supported = find(candidates, function (eventName) {\n    return \"on\" + eventName in document;\n  });\n  return supported || base;\n}();\n\nvar primaryButton = 0;\nvar sloppyClickThreshold = 5;\n\nfunction isSloppyClickThresholdExceeded(original, current) {\n  return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\n\nvar idle$1 = {\n  type: 'IDLE'\n};\n\nfunction getCaptureBindings(_ref) {\n  var cancel = _ref.cancel,\n      completed = _ref.completed,\n      getPhase = _ref.getPhase,\n      setPhase = _ref.setPhase;\n  return [{\n    eventName: 'mousemove',\n    fn: function fn(event) {\n      var button = event.button,\n          clientX = event.clientX,\n          clientY = event.clientY;\n\n      if (button !== primaryButton) {\n        return;\n      }\n\n      var point = {\n        x: clientX,\n        y: clientY\n      };\n      var phase = getPhase();\n\n      if (phase.type === 'DRAGGING') {\n        event.preventDefault();\n        phase.actions.move(point);\n        return;\n      }\n\n      !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant(false) : void 0;\n      var pending = phase.point;\n\n      if (!isSloppyClickThresholdExceeded(pending, point)) {\n        return;\n      }\n\n      event.preventDefault();\n      var actions = phase.actions.fluidLift(point);\n      setPhase({\n        type: 'DRAGGING',\n        actions: actions\n      });\n    }\n  }, {\n    eventName: 'mouseup',\n    fn: function fn(event) {\n      var phase = getPhase();\n\n      if (phase.type !== 'DRAGGING') {\n        cancel();\n        return;\n      }\n\n      event.preventDefault();\n      phase.actions.drop({\n        shouldBlockNextClick: true\n      });\n      completed();\n    }\n  }, {\n    eventName: 'mousedown',\n    fn: function fn(event) {\n      if (getPhase().type === 'DRAGGING') {\n        event.preventDefault();\n      }\n\n      cancel();\n    }\n  }, {\n    eventName: 'keydown',\n    fn: function fn(event) {\n      var phase = getPhase();\n\n      if (phase.type === 'PENDING') {\n        cancel();\n        return;\n      }\n\n      if (event.keyCode === escape) {\n        event.preventDefault();\n        cancel();\n        return;\n      }\n\n      preventStandardKeyEvents(event);\n    }\n  }, {\n    eventName: 'resize',\n    fn: cancel\n  }, {\n    eventName: 'scroll',\n    options: {\n      passive: true,\n      capture: false\n    },\n    fn: function fn() {\n      if (getPhase().type === 'PENDING') {\n        cancel();\n      }\n    }\n  }, {\n    eventName: 'webkitmouseforcedown',\n    fn: function fn(event) {\n      var phase = getPhase();\n      !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant(false) : void 0;\n\n      if (phase.actions.shouldRespectForcePress()) {\n        cancel();\n        return;\n      }\n\n      event.preventDefault();\n    }\n  }, {\n    eventName: supportedEventName,\n    fn: cancel\n  }];\n}\n\nfunction useMouseSensor(api) {\n  var phaseRef = useRef(idle$1);\n  var unbindEventsRef = useRef(noop);\n  var startCaptureBinding = useMemo(function () {\n    return {\n      eventName: 'mousedown',\n      fn: function onMouseDown(event) {\n        if (event.defaultPrevented) {\n          return;\n        }\n\n        if (event.button !== primaryButton) {\n          return;\n        }\n\n        if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n          return;\n        }\n\n        var draggableId = api.findClosestDraggableId(event);\n\n        if (!draggableId) {\n          return;\n        }\n\n        var actions = api.tryGetLock(draggableId, stop, {\n          sourceEvent: event\n        });\n\n        if (!actions) {\n          return;\n        }\n\n        event.preventDefault();\n        var point = {\n          x: event.clientX,\n          y: event.clientY\n        };\n        unbindEventsRef.current();\n        startPendingDrag(actions, point);\n      }\n    };\n  }, [api]);\n  var preventForcePressBinding = useMemo(function () {\n    return {\n      eventName: 'webkitmouseforcewillbegin',\n      fn: function fn(event) {\n        if (event.defaultPrevented) {\n          return;\n        }\n\n        var id = api.findClosestDraggableId(event);\n\n        if (!id) {\n          return;\n        }\n\n        var options = api.findOptionsForDraggable(id);\n\n        if (!options) {\n          return;\n        }\n\n        if (options.shouldRespectForcePress) {\n          return;\n        }\n\n        if (!api.canGetLock(id)) {\n          return;\n        }\n\n        event.preventDefault();\n      }\n    };\n  }, [api]);\n  var listenForCapture = useCallback(function listenForCapture() {\n    var options = {\n      passive: false,\n      capture: true\n    };\n    unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n  }, [preventForcePressBinding, startCaptureBinding]);\n  var stop = useCallback(function () {\n    var current = phaseRef.current;\n\n    if (current.type === 'IDLE') {\n      return;\n    }\n\n    phaseRef.current = idle$1;\n    unbindEventsRef.current();\n    listenForCapture();\n  }, [listenForCapture]);\n  var cancel = useCallback(function () {\n    var phase = phaseRef.current;\n    stop();\n\n    if (phase.type === 'DRAGGING') {\n      phase.actions.cancel({\n        shouldBlockNextClick: true\n      });\n    }\n\n    if (phase.type === 'PENDING') {\n      phase.actions.abort();\n    }\n  }, [stop]);\n  var bindCapturingEvents = useCallback(function bindCapturingEvents() {\n    var options = {\n      capture: true,\n      passive: false\n    };\n    var bindings = getCaptureBindings({\n      cancel: cancel,\n      completed: stop,\n      getPhase: function getPhase() {\n        return phaseRef.current;\n      },\n      setPhase: function setPhase(phase) {\n        phaseRef.current = phase;\n      }\n    });\n    unbindEventsRef.current = bindEvents(window, bindings, options);\n  }, [cancel, stop]);\n  var startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n    !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant(false) : void 0;\n    phaseRef.current = {\n      type: 'PENDING',\n      point: point,\n      actions: actions\n    };\n    bindCapturingEvents();\n  }, [bindCapturingEvents]);\n  useIsomorphicLayoutEffect(function mount() {\n    listenForCapture();\n    return function unmount() {\n      unbindEventsRef.current();\n    };\n  }, [listenForCapture]);\n}\n\nvar _scrollJumpKeys;\n\nfunction noop$1() {}\n\nvar scrollJumpKeys = (_scrollJumpKeys = {}, _scrollJumpKeys[pageDown] = true, _scrollJumpKeys[pageUp] = true, _scrollJumpKeys[home] = true, _scrollJumpKeys[end] = true, _scrollJumpKeys);\n\nfunction getDraggingBindings(actions, stop) {\n  function cancel() {\n    stop();\n    actions.cancel();\n  }\n\n  function drop() {\n    stop();\n    actions.drop();\n  }\n\n  return [{\n    eventName: 'keydown',\n    fn: function fn(event) {\n      if (event.keyCode === escape) {\n        event.preventDefault();\n        cancel();\n        return;\n      }\n\n      if (event.keyCode === space) {\n        event.preventDefault();\n        drop();\n        return;\n      }\n\n      if (event.keyCode === arrowDown) {\n        event.preventDefault();\n        actions.moveDown();\n        return;\n      }\n\n      if (event.keyCode === arrowUp) {\n        event.preventDefault();\n        actions.moveUp();\n        return;\n      }\n\n      if (event.keyCode === arrowRight) {\n        event.preventDefault();\n        actions.moveRight();\n        return;\n      }\n\n      if (event.keyCode === arrowLeft) {\n        event.preventDefault();\n        actions.moveLeft();\n        return;\n      }\n\n      if (scrollJumpKeys[event.keyCode]) {\n        event.preventDefault();\n        return;\n      }\n\n      preventStandardKeyEvents(event);\n    }\n  }, {\n    eventName: 'mousedown',\n    fn: cancel\n  }, {\n    eventName: 'mouseup',\n    fn: cancel\n  }, {\n    eventName: 'click',\n    fn: cancel\n  }, {\n    eventName: 'touchstart',\n    fn: cancel\n  }, {\n    eventName: 'resize',\n    fn: cancel\n  }, {\n    eventName: 'wheel',\n    fn: cancel,\n    options: {\n      passive: true\n    }\n  }, {\n    eventName: supportedEventName,\n    fn: cancel\n  }];\n}\n\nfunction useKeyboardSensor(api) {\n  var unbindEventsRef = useRef(noop$1);\n  var startCaptureBinding = useMemo(function () {\n    return {\n      eventName: 'keydown',\n      fn: function onKeyDown(event) {\n        if (event.defaultPrevented) {\n          return;\n        }\n\n        if (event.keyCode !== space) {\n          return;\n        }\n\n        var draggableId = api.findClosestDraggableId(event);\n\n        if (!draggableId) {\n          return;\n        }\n\n        var preDrag = api.tryGetLock(draggableId, stop, {\n          sourceEvent: event\n        });\n\n        if (!preDrag) {\n          return;\n        }\n\n        event.preventDefault();\n        var isCapturing = true;\n        var actions = preDrag.snapLift();\n        unbindEventsRef.current();\n\n        function stop() {\n          !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant(false) : void 0;\n          isCapturing = false;\n          unbindEventsRef.current();\n          listenForCapture();\n        }\n\n        unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n          capture: true,\n          passive: false\n        });\n      }\n    };\n  }, [api]);\n  var listenForCapture = useCallback(function tryStartCapture() {\n    var options = {\n      passive: false,\n      capture: true\n    };\n    unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n  }, [startCaptureBinding]);\n  useIsomorphicLayoutEffect(function mount() {\n    listenForCapture();\n    return function unmount() {\n      unbindEventsRef.current();\n    };\n  }, [listenForCapture]);\n}\n\nvar idle$2 = {\n  type: 'IDLE'\n};\nvar timeForLongPress = 120;\nvar forcePressThreshold = 0.15;\n\nfunction getWindowBindings(_ref) {\n  var cancel = _ref.cancel,\n      getPhase = _ref.getPhase;\n  return [{\n    eventName: 'orientationchange',\n    fn: cancel\n  }, {\n    eventName: 'resize',\n    fn: cancel\n  }, {\n    eventName: 'contextmenu',\n    fn: function fn(event) {\n      event.preventDefault();\n    }\n  }, {\n    eventName: 'keydown',\n    fn: function fn(event) {\n      if (getPhase().type !== 'DRAGGING') {\n        cancel();\n        return;\n      }\n\n      if (event.keyCode === escape) {\n        event.preventDefault();\n      }\n\n      cancel();\n    }\n  }, {\n    eventName: supportedEventName,\n    fn: cancel\n  }];\n}\n\nfunction getHandleBindings(_ref2) {\n  var cancel = _ref2.cancel,\n      completed = _ref2.completed,\n      getPhase = _ref2.getPhase;\n  return [{\n    eventName: 'touchmove',\n    options: {\n      capture: false\n    },\n    fn: function fn(event) {\n      var phase = getPhase();\n\n      if (phase.type !== 'DRAGGING') {\n        cancel();\n        return;\n      }\n\n      phase.hasMoved = true;\n      var _event$touches$ = event.touches[0],\n          clientX = _event$touches$.clientX,\n          clientY = _event$touches$.clientY;\n      var point = {\n        x: clientX,\n        y: clientY\n      };\n      event.preventDefault();\n      phase.actions.move(point);\n    }\n  }, {\n    eventName: 'touchend',\n    fn: function fn(event) {\n      var phase = getPhase();\n\n      if (phase.type !== 'DRAGGING') {\n        cancel();\n        return;\n      }\n\n      event.preventDefault();\n      phase.actions.drop({\n        shouldBlockNextClick: true\n      });\n      completed();\n    }\n  }, {\n    eventName: 'touchcancel',\n    fn: function fn(event) {\n      if (getPhase().type !== 'DRAGGING') {\n        cancel();\n        return;\n      }\n\n      event.preventDefault();\n      cancel();\n    }\n  }, {\n    eventName: 'touchforcechange',\n    fn: function fn(event) {\n      var phase = getPhase();\n      !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n      var touch = event.touches[0];\n\n      if (!touch) {\n        return;\n      }\n\n      var isForcePress = touch.force >= forcePressThreshold;\n\n      if (!isForcePress) {\n        return;\n      }\n\n      var shouldRespect = phase.actions.shouldRespectForcePress();\n\n      if (phase.type === 'PENDING') {\n        if (shouldRespect) {\n          cancel();\n        }\n\n        return;\n      }\n\n      if (shouldRespect) {\n        if (phase.hasMoved) {\n          event.preventDefault();\n          return;\n        }\n\n        cancel();\n        return;\n      }\n\n      event.preventDefault();\n    }\n  }, {\n    eventName: supportedEventName,\n    fn: cancel\n  }];\n}\n\nfunction useMouseSensor$1(api) {\n  var phaseRef = useRef(idle$2);\n  var unbindEventsRef = useRef(noop);\n  var getPhase = useCallback(function getPhase() {\n    return phaseRef.current;\n  }, []);\n  var setPhase = useCallback(function setPhase(phase) {\n    phaseRef.current = phase;\n  }, []);\n  var startCaptureBinding = useMemo(function () {\n    return {\n      eventName: 'touchstart',\n      fn: function onTouchStart(event) {\n        if (event.defaultPrevented) {\n          return;\n        }\n\n        var draggableId = api.findClosestDraggableId(event);\n\n        if (!draggableId) {\n          return;\n        }\n\n        var actions = api.tryGetLock(draggableId, stop, {\n          sourceEvent: event\n        });\n\n        if (!actions) {\n          return;\n        }\n\n        var touch = event.touches[0];\n        var clientX = touch.clientX,\n            clientY = touch.clientY;\n        var point = {\n          x: clientX,\n          y: clientY\n        };\n        unbindEventsRef.current();\n        startPendingDrag(actions, point);\n      }\n    };\n  }, [api]);\n  var listenForCapture = useCallback(function listenForCapture() {\n    var options = {\n      capture: true,\n      passive: false\n    };\n    unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n  }, [startCaptureBinding]);\n  var stop = useCallback(function () {\n    var current = phaseRef.current;\n\n    if (current.type === 'IDLE') {\n      return;\n    }\n\n    if (current.type === 'PENDING') {\n      clearTimeout(current.longPressTimerId);\n    }\n\n    setPhase(idle$2);\n    unbindEventsRef.current();\n    listenForCapture();\n  }, [listenForCapture, setPhase]);\n  var cancel = useCallback(function () {\n    var phase = phaseRef.current;\n    stop();\n\n    if (phase.type === 'DRAGGING') {\n      phase.actions.cancel({\n        shouldBlockNextClick: true\n      });\n    }\n\n    if (phase.type === 'PENDING') {\n      phase.actions.abort();\n    }\n  }, [stop]);\n  var bindCapturingEvents = useCallback(function bindCapturingEvents() {\n    var options = {\n      capture: true,\n      passive: false\n    };\n    var args = {\n      cancel: cancel,\n      completed: stop,\n      getPhase: getPhase\n    };\n    var unbindTarget = bindEvents(window, getHandleBindings(args), options);\n    var unbindWindow = bindEvents(window, getWindowBindings(args), options);\n\n    unbindEventsRef.current = function unbindAll() {\n      unbindTarget();\n      unbindWindow();\n    };\n  }, [cancel, getPhase, stop]);\n  var startDragging = useCallback(function startDragging() {\n    var phase = getPhase();\n    !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot start dragging from phase \" + phase.type) : invariant(false) : void 0;\n    var actions = phase.actions.fluidLift(phase.point);\n    setPhase({\n      type: 'DRAGGING',\n      actions: actions,\n      hasMoved: false\n    });\n  }, [getPhase, setPhase]);\n  var startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n    !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant(false) : void 0;\n    var longPressTimerId = setTimeout(startDragging, timeForLongPress);\n    setPhase({\n      type: 'PENDING',\n      point: point,\n      actions: actions,\n      longPressTimerId: longPressTimerId\n    });\n    bindCapturingEvents();\n  }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n  useIsomorphicLayoutEffect(function mount() {\n    listenForCapture();\n    return function unmount() {\n      unbindEventsRef.current();\n      var phase = getPhase();\n\n      if (phase.type === 'PENDING') {\n        clearTimeout(phase.longPressTimerId);\n        setPhase(idle$2);\n      }\n    };\n  }, [getPhase, listenForCapture, setPhase]);\n  useIsomorphicLayoutEffect(function webkitHack() {\n    var unbind = bindEvents(window, [{\n      eventName: 'touchmove',\n      fn: function fn() {},\n      options: {\n        capture: false,\n        passive: false\n      }\n    }]);\n    return unbind;\n  }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n  useDev(function () {\n    var previousRef = usePrevious(sensorHooks);\n    useDevSetupWarning(function () {\n      !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n    });\n  });\n}\n\nvar interactiveTagNames = {\n  input: true,\n  button: true,\n  textarea: true,\n  select: true,\n  option: true,\n  optgroup: true,\n  video: true,\n  audio: true\n};\n\nfunction isAnInteractiveElement(parent, current) {\n  if (current == null) {\n    return false;\n  }\n\n  var hasAnInteractiveTag = Boolean(interactiveTagNames[current.tagName.toLowerCase()]);\n\n  if (hasAnInteractiveTag) {\n    return true;\n  }\n\n  var attribute = current.getAttribute('contenteditable');\n\n  if (attribute === 'true' || attribute === '') {\n    return true;\n  }\n\n  if (current === parent) {\n    return false;\n  }\n\n  return isAnInteractiveElement(parent, current.parentElement);\n}\n\nfunction isEventInInteractiveElement(draggable, event) {\n  var target = event.target;\n\n  if (!isHtmlElement(target)) {\n    return false;\n  }\n\n  return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = (function (el) {\n  return getRect(el.getBoundingClientRect()).center;\n});\n\nfunction isElement(el) {\n  return el instanceof getWindowFromEl(el).Element;\n}\n\nvar supportedMatchesName = function () {\n  var base = 'matches';\n\n  if (typeof document === 'undefined') {\n    return base;\n  }\n\n  var candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n  var value = find(candidates, function (name) {\n    return name in Element.prototype;\n  });\n  return value || base;\n}();\n\nfunction closestPonyfill(el, selector) {\n  if (el == null) {\n    return null;\n  }\n\n  if (el[supportedMatchesName](selector)) {\n    return el;\n  }\n\n  return closestPonyfill(el.parentElement, selector);\n}\n\nfunction closest$1(el, selector) {\n  if (el.closest) {\n    return el.closest(selector);\n  }\n\n  return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n  return \"[\" + dragHandle.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n}\n\nfunction findClosestDragHandleFromEvent(contextId, event) {\n  var target = event.target;\n\n  if (!isElement(target)) {\n    process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n    return null;\n  }\n\n  var selector = getSelector(contextId);\n  var handle = closest$1(target, selector);\n\n  if (!handle) {\n    return null;\n  }\n\n  if (!isHtmlElement(handle)) {\n    process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n    return null;\n  }\n\n  return handle;\n}\n\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n  var handle = findClosestDragHandleFromEvent(contextId, event);\n\n  if (!handle) {\n    return null;\n  }\n\n  return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n  var selector = \"[\" + draggable.contextId + \"=\\\"\" + contextId + \"\\\"]\";\n  var possible = toArray(document.querySelectorAll(selector));\n  var draggable$1 = find(possible, function (el) {\n    return el.getAttribute(draggable.id) === draggableId;\n  });\n\n  if (!draggable$1) {\n    return null;\n  }\n\n  if (!isHtmlElement(draggable$1)) {\n    process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n    return null;\n  }\n\n  return draggable$1;\n}\n\nfunction preventDefault(event) {\n  event.preventDefault();\n}\n\nfunction _isActive(_ref) {\n  var expected = _ref.expected,\n      phase = _ref.phase,\n      isLockActive = _ref.isLockActive,\n      shouldWarn = _ref.shouldWarn;\n\n  if (!isLockActive()) {\n    if (shouldWarn) {\n      process.env.NODE_ENV !== \"production\" ? warning(\"\\n        Cannot perform action.\\n        The sensor no longer has an action lock.\\n\\n        Tips:\\n\\n        - Throw away your action handlers when forceStop() is called\\n        - Check actions.isActive() if you really need to\\n      \") : void 0;\n    }\n\n    return false;\n  }\n\n  if (expected !== phase) {\n    if (shouldWarn) {\n      process.env.NODE_ENV !== \"production\" ? warning(\"\\n        Cannot perform action.\\n        The actions you used belong to an outdated phase\\n\\n        Current phase: \" + expected + \"\\n        You called an action from outdated phase: \" + phase + \"\\n\\n        Tips:\\n\\n        - Do not use preDragActions actions after calling preDragActions.lift()\\n      \") : void 0;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction canStart(_ref2) {\n  var lockAPI = _ref2.lockAPI,\n      store = _ref2.store,\n      registry = _ref2.registry,\n      draggableId = _ref2.draggableId;\n\n  if (lockAPI.isClaimed()) {\n    return false;\n  }\n\n  var entry = registry.draggable.findById(draggableId);\n\n  if (!entry) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find draggable with id: \" + draggableId) : void 0;\n    return false;\n  }\n\n  if (!entry.options.isEnabled) {\n    return false;\n  }\n\n  if (!canStartDrag(store.getState(), draggableId)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction tryStart(_ref3) {\n  var lockAPI = _ref3.lockAPI,\n      contextId = _ref3.contextId,\n      store = _ref3.store,\n      registry = _ref3.registry,\n      draggableId = _ref3.draggableId,\n      forceSensorStop = _ref3.forceSensorStop,\n      sourceEvent = _ref3.sourceEvent;\n  var shouldStart = canStart({\n    lockAPI: lockAPI,\n    store: store,\n    registry: registry,\n    draggableId: draggableId\n  });\n\n  if (!shouldStart) {\n    return null;\n  }\n\n  var entry = registry.draggable.getById(draggableId);\n  var el = findDraggable(contextId, entry.descriptor.id);\n\n  if (!el) {\n    process.env.NODE_ENV !== \"production\" ? warning(\"Unable to find draggable element with id: \" + draggableId) : void 0;\n    return null;\n  }\n\n  if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n    return null;\n  }\n\n  var lock = lockAPI.claim(forceSensorStop || noop);\n  var phase = 'PRE_DRAG';\n\n  function getShouldRespectForcePress() {\n    return entry.options.shouldRespectForcePress;\n  }\n\n  function isLockActive() {\n    return lockAPI.isActive(lock);\n  }\n\n  function tryDispatch(expected, getAction) {\n    if (_isActive({\n      expected: expected,\n      phase: phase,\n      isLockActive: isLockActive,\n      shouldWarn: true\n    })) {\n      store.dispatch(getAction());\n    }\n  }\n\n  var tryDispatchWhenDragging = tryDispatch.bind(this, 'DRAGGING');\n\n  function lift$1(args) {\n    function completed() {\n      lockAPI.release();\n      phase = 'COMPLETED';\n    }\n\n    if (phase !== 'PRE_DRAG') {\n      completed();\n      !(phase === 'PRE_DRAG') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Cannot lift in phase \" + phase) : invariant(false) : void 0;\n    }\n\n    store.dispatch(lift(args.liftActionArgs));\n    phase = 'DRAGGING';\n\n    function finish(reason, options) {\n      if (options === void 0) {\n        options = {\n          shouldBlockNextClick: false\n        };\n      }\n\n      args.cleanup();\n\n      if (options.shouldBlockNextClick) {\n        var unbind = bindEvents(window, [{\n          eventName: 'click',\n          fn: preventDefault,\n          options: {\n            once: true,\n            passive: false,\n            capture: true\n          }\n        }]);\n        setTimeout(unbind);\n      }\n\n      completed();\n      store.dispatch(drop({\n        reason: reason\n      }));\n    }\n\n    return _extends({\n      isActive: function isActive() {\n        return _isActive({\n          expected: 'DRAGGING',\n          phase: phase,\n          isLockActive: isLockActive,\n          shouldWarn: false\n        });\n      },\n      shouldRespectForcePress: getShouldRespectForcePress,\n      drop: function drop(options) {\n        return finish('DROP', options);\n      },\n      cancel: function cancel(options) {\n        return finish('CANCEL', options);\n      }\n    }, args.actions);\n  }\n\n  function fluidLift(clientSelection) {\n    var move$1 = rafSchd(function (client) {\n      tryDispatchWhenDragging(function () {\n        return move({\n          client: client\n        });\n      });\n    });\n    var api = lift$1({\n      liftActionArgs: {\n        id: draggableId,\n        clientSelection: clientSelection,\n        movementMode: 'FLUID'\n      },\n      cleanup: function cleanup() {\n        return move$1.cancel();\n      },\n      actions: {\n        move: move$1\n      }\n    });\n    return _extends({}, api, {\n      move: move$1\n    });\n  }\n\n  function snapLift() {\n    var actions = {\n      moveUp: function moveUp$1() {\n        return tryDispatchWhenDragging(moveUp);\n      },\n      moveRight: function moveRight$1() {\n        return tryDispatchWhenDragging(moveRight);\n      },\n      moveDown: function moveDown$1() {\n        return tryDispatchWhenDragging(moveDown);\n      },\n      moveLeft: function moveLeft$1() {\n        return tryDispatchWhenDragging(moveLeft);\n      }\n    };\n    return lift$1({\n      liftActionArgs: {\n        id: draggableId,\n        clientSelection: getBorderBoxCenterPosition(el),\n        movementMode: 'SNAP'\n      },\n      cleanup: noop,\n      actions: actions\n    });\n  }\n\n  function abortPreDrag() {\n    var shouldRelease = _isActive({\n      expected: 'PRE_DRAG',\n      phase: phase,\n      isLockActive: isLockActive,\n      shouldWarn: true\n    });\n\n    if (shouldRelease) {\n      lockAPI.release();\n    }\n  }\n\n  var preDrag = {\n    isActive: function isActive() {\n      return _isActive({\n        expected: 'PRE_DRAG',\n        phase: phase,\n        isLockActive: isLockActive,\n        shouldWarn: false\n      });\n    },\n    shouldRespectForcePress: getShouldRespectForcePress,\n    fluidLift: fluidLift,\n    snapLift: snapLift,\n    abort: abortPreDrag\n  };\n  return preDrag;\n}\n\nvar defaultSensors = [useMouseSensor, useKeyboardSensor, useMouseSensor$1];\nfunction useSensorMarshal(_ref4) {\n  var contextId = _ref4.contextId,\n      store = _ref4.store,\n      registry = _ref4.registry,\n      customSensors = _ref4.customSensors,\n      enableDefaultSensors = _ref4.enableDefaultSensors;\n  var useSensors = [].concat(enableDefaultSensors ? defaultSensors : [], customSensors || []);\n  var lockAPI = useState(function () {\n    return create();\n  })[0];\n  var tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n    if (previous.isDragging && !current.isDragging) {\n      lockAPI.tryAbandon();\n    }\n  }, [lockAPI]);\n  useIsomorphicLayoutEffect(function listenToStore() {\n    var previous = store.getState();\n    var unsubscribe = store.subscribe(function () {\n      var current = store.getState();\n      tryAbandonLock(previous, current);\n      previous = current;\n    });\n    return unsubscribe;\n  }, [lockAPI, store, tryAbandonLock]);\n  useIsomorphicLayoutEffect(function () {\n    return lockAPI.tryAbandon;\n  }, [lockAPI.tryAbandon]);\n  var canGetLock = useCallback(function (draggableId) {\n    return canStart({\n      lockAPI: lockAPI,\n      registry: registry,\n      store: store,\n      draggableId: draggableId\n    });\n  }, [lockAPI, registry, store]);\n  var tryGetLock = useCallback(function (draggableId, forceStop, options) {\n    return tryStart({\n      lockAPI: lockAPI,\n      registry: registry,\n      contextId: contextId,\n      store: store,\n      draggableId: draggableId,\n      forceSensorStop: forceStop,\n      sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n    });\n  }, [contextId, lockAPI, registry, store]);\n  var findClosestDraggableId = useCallback(function (event) {\n    return tryGetClosestDraggableIdFromEvent(contextId, event);\n  }, [contextId]);\n  var findOptionsForDraggable = useCallback(function (id) {\n    var entry = registry.draggable.findById(id);\n    return entry ? entry.options : null;\n  }, [registry.draggable]);\n  var tryReleaseLock = useCallback(lockAPI.tryAbandon, [lockAPI]);\n  var isLockClaimed = useCallback(lockAPI.isClaimed, [lockAPI]);\n  var api = useMemo(function () {\n    return {\n      canGetLock: canGetLock,\n      tryGetLock: tryGetLock,\n      findClosestDraggableId: findClosestDraggableId,\n      findOptionsForDraggable: findOptionsForDraggable,\n      tryReleaseLock: tryReleaseLock,\n      isLockClaimed: isLockClaimed\n    };\n  }, [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n  useValidateSensorHooks(useSensors);\n\n  for (var i = 0; i < useSensors.length; i++) {\n    useSensors[i](api);\n  }\n}\n\nvar createResponders = function createResponders(props) {\n  return {\n    onBeforeCapture: props.onBeforeCapture,\n    onBeforeDragStart: props.onBeforeDragStart,\n    onDragStart: props.onDragStart,\n    onDragEnd: props.onDragEnd,\n    onDragUpdate: props.onDragUpdate\n  };\n};\n\nfunction getStore(lazyRef) {\n  !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant(false) : void 0;\n  return lazyRef.current;\n}\n\nfunction App(props) {\n  var contextId = props.contextId,\n      setCallbacks = props.setCallbacks,\n      sensors = props.sensors,\n      nonce = props.nonce,\n      liftInstruction = props.liftInstruction;\n  var lazyStoreRef = useRef(null);\n  useStartupValidation();\n  var lastPropsRef = usePrevious(props);\n  var getResponders = useCallback(function () {\n    return createResponders(lastPropsRef.current);\n  }, [lastPropsRef]);\n  var announce = useAnnouncer(contextId);\n  var liftInstructionId = useLiftInstruction(contextId, liftInstruction);\n  var styleMarshal = useStyleMarshal(contextId, nonce);\n  var lazyDispatch = useCallback(function (action) {\n    getStore(lazyStoreRef).dispatch(action);\n  }, []);\n  var marshalCallbacks = useMemo(function () {\n    return bindActionCreators({\n      publishWhileDragging: publishWhileDragging,\n      updateDroppableScroll: updateDroppableScroll,\n      updateDroppableIsEnabled: updateDroppableIsEnabled,\n      updateDroppableIsCombineEnabled: updateDroppableIsCombineEnabled,\n      collectionStarting: collectionStarting\n    }, lazyDispatch);\n  }, [lazyDispatch]);\n  var registry = useRegistry();\n  var dimensionMarshal = useMemo(function () {\n    return createDimensionMarshal(registry, marshalCallbacks);\n  }, [registry, marshalCallbacks]);\n  var autoScroller = useMemo(function () {\n    return createAutoScroller(_extends({\n      scrollWindow: scrollWindow,\n      scrollDroppable: dimensionMarshal.scrollDroppable\n    }, bindActionCreators({\n      move: move\n    }, lazyDispatch)));\n  }, [dimensionMarshal.scrollDroppable, lazyDispatch]);\n  var focusMarshal = useFocusMarshal(contextId);\n  var store = useMemo(function () {\n    return createStore({\n      announce: announce,\n      autoScroller: autoScroller,\n      dimensionMarshal: dimensionMarshal,\n      focusMarshal: focusMarshal,\n      getResponders: getResponders,\n      styleMarshal: styleMarshal\n    });\n  }, [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n      process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n    }\n  }\n\n  lazyStoreRef.current = store;\n  var tryResetStore = useCallback(function () {\n    var current = getStore(lazyStoreRef);\n    var state = current.getState();\n\n    if (state.phase !== 'IDLE') {\n      current.dispatch(flush());\n    }\n  }, []);\n  var isDragging = useCallback(function () {\n    var state = getStore(lazyStoreRef).getState();\n    return state.isDragging || state.phase === 'DROP_ANIMATING';\n  }, []);\n  var appCallbacks = useMemo(function () {\n    return {\n      isDragging: isDragging,\n      tryAbort: tryResetStore\n    };\n  }, [isDragging, tryResetStore]);\n  setCallbacks(appCallbacks);\n  var getCanLift = useCallback(function (id) {\n    return canStartDrag(getStore(lazyStoreRef).getState(), id);\n  }, []);\n  var getIsMovementAllowed = useCallback(function () {\n    return isMovementAllowed(getStore(lazyStoreRef).getState());\n  }, []);\n  var appContext = useMemo(function () {\n    return {\n      marshal: dimensionMarshal,\n      focus: focusMarshal,\n      contextId: contextId,\n      canLift: getCanLift,\n      isMovementAllowed: getIsMovementAllowed,\n      liftInstructionId: liftInstructionId,\n      registry: registry\n    };\n  }, [contextId, dimensionMarshal, focusMarshal, getCanLift, getIsMovementAllowed, liftInstructionId, registry]);\n  useSensorMarshal({\n    contextId: contextId,\n    store: store,\n    registry: registry,\n    customSensors: sensors,\n    enableDefaultSensors: props.enableDefaultSensors !== false\n  });\n  useEffect(function () {\n    return tryResetStore;\n  }, [tryResetStore]);\n  return React.createElement(AppContext.Provider, {\n    value: appContext\n  }, React.createElement(Provider, {\n    context: StoreContext,\n    store: store\n  }, props.children));\n}\n\nvar instanceCount = 0;\nfunction resetServerContext() {\n  instanceCount = 0;\n}\nfunction DragDropContext(props) {\n  var contextId = useMemo(function () {\n    return \"\" + instanceCount++;\n  }, []);\n  var liftInstruction = props.liftInstruction || preset.liftInstruction;\n  return React.createElement(ErrorBoundary, null, function (setCallbacks) {\n    return React.createElement(App, {\n      nonce: props.nonce,\n      contextId: contextId,\n      setCallbacks: setCallbacks,\n      liftInstruction: liftInstruction,\n      enableDefaultSensors: props.enableDefaultSensors,\n      sensors: props.sensors,\n      onBeforeCapture: props.onBeforeCapture,\n      onBeforeDragStart: props.onBeforeDragStart,\n      onDragStart: props.onDragStart,\n      onDragUpdate: props.onDragUpdate,\n      onDragEnd: props.onDragEnd\n    }, props.children);\n  });\n}\n\nvar isEqual$1 = function isEqual(base) {\n  return function (value) {\n    return base === value;\n  };\n};\n\nvar isScroll = isEqual$1('scroll');\nvar isAuto = isEqual$1('auto');\nvar isVisible$1 = isEqual$1('visible');\n\nvar isEither = function isEither(overflow, fn) {\n  return fn(overflow.overflowX) || fn(overflow.overflowY);\n};\n\nvar isBoth = function isBoth(overflow, fn) {\n  return fn(overflow.overflowX) && fn(overflow.overflowY);\n};\n\nvar isElementScrollable = function isElementScrollable(el) {\n  var style = window.getComputedStyle(el);\n  var overflow = {\n    overflowX: style.overflowX,\n    overflowY: style.overflowY\n  };\n  return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\n\nvar isBodyScrollable = function isBodyScrollable() {\n  if (process.env.NODE_ENV === 'production') {\n    return false;\n  }\n\n  var body = getBodyElement();\n  var html = document.documentElement;\n  !html ? process.env.NODE_ENV !== \"production\" ? invariant(false) : invariant(false) : void 0;\n\n  if (!isElementScrollable(body)) {\n    return false;\n  }\n\n  var htmlStyle = window.getComputedStyle(html);\n  var htmlOverflow = {\n    overflowX: htmlStyle.overflowX,\n    overflowY: htmlStyle.overflowY\n  };\n\n  if (isBoth(htmlOverflow, isVisible$1)) {\n    return false;\n  }\n\n  process.env.NODE_ENV !== \"production\" ? warning(\"\\n    We have detected that your <body> element might be a scroll container.\\n    We have found no reliable way of detecting whether the <body> element is a scroll container.\\n    Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\\n\\n    Because we cannot determine if the <body> is a scroll container, and generally it is not one,\\n    we will be treating the <body> as *not* a scroll container\\n\\n    More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/how-we-detect-scroll-containers.md\\n  \") : void 0;\n  return false;\n};\n\nvar getClosestScrollable = function getClosestScrollable(el) {\n  if (el == null) {\n    return null;\n  }\n\n  if (el === document.body) {\n    return isBodyScrollable() ? el : null;\n  }\n\n  if (el === document.documentElement) {\n    return null;\n  }\n\n  if (!isElementScrollable(el)) {\n    return getClosestScrollable(el.parentElement);\n  }\n\n  return el;\n};\n\nvar checkForNestedScrollContainers = (function (scrollable) {\n  if (!scrollable) {\n    return;\n  }\n\n  var anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n\n  if (!anotherScrollParent) {\n    return;\n  }\n\n  process.env.NODE_ENV !== \"production\" ? warning(\"\\n    Droppable: unsupported nested scroll container detected.\\n    A Droppable can only have one scroll parent (which can be itself)\\n    Nested scroll containers are currently not supported.\\n\\n    We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\\n  \") : void 0;\n});\n\nvar getScroll$1 = (function (el) {\n  return {\n    x: el.scrollLeft,\n    y: el.scrollTop\n  };\n});\n\nvar getIsFixed = function getIsFixed(el) {\n  if (!el) {\n    return false;\n  }\n\n  var style = window.getComputedStyle(el);\n\n  if (style.position === 'fixed') {\n    return true;\n  }\n\n  return getIsFixed(el.parentElement);\n};\n\nvar getEnv = (function (start) {\n  var closestScrollable = getClosestScrollable(start);\n  var isFixedOnPage = getIsFixed(start);\n  return {\n    closestScrollable: closestScrollable,\n    isFixedOnPage: isFixedOnPage\n  };\n});\n\nvar getDroppableDimension = (function (_ref) {\n  var descriptor = _ref.descriptor,\n      isEnabled = _ref.isEnabled,\n      isCombineEnabled = _ref.isCombineEnabled,\n      isFixedOnPage = _ref.isFixedOnPage,\n      direction = _ref.direction,\n      client = _ref.client,\n      page = _ref.page,\n      closest = _ref.closest;\n\n  var frame = function () {\n    if (!closest) {\n      return null;\n    }\n\n    var scrollSize = closest.scrollSize,\n        frameClient = closest.client;\n    var maxScroll = getMaxScroll({\n      scrollHeight: scrollSize.scrollHeight,\n      scrollWidth: scrollSize.scrollWidth,\n      height: frameClient.paddingBox.height,\n      width: frameClient.paddingBox.width\n    });\n    return {\n      pageMarginBox: closest.page.marginBox,\n      frameClient: frameClient,\n      scrollSize: scrollSize,\n      shouldClipSubject: closest.shouldClipSubject,\n      scroll: {\n        initial: closest.scroll,\n        current: closest.scroll,\n        max: maxScroll,\n        diff: {\n          value: origin,\n          displacement: origin\n        }\n      }\n    };\n  }();\n\n  var axis = direction === 'vertical' ? vertical : horizontal;\n  var subject = getSubject({\n    page: page,\n    withPlaceholder: null,\n    axis: axis,\n    frame: frame\n  });\n  var dimension = {\n    descriptor: descriptor,\n    isCombineEnabled: isCombineEnabled,\n    isFixedOnPage: isFixedOnPage,\n    axis: axis,\n    isEnabled: isEnabled,\n    client: client,\n    page: page,\n    frame: frame,\n    subject: subject\n  };\n  return dimension;\n});\n\nvar getClient = function getClient(targetRef, closestScrollable) {\n  var base = getBox(targetRef);\n\n  if (!closestScrollable) {\n    return base;\n  }\n\n  if (targetRef !== closestScrollable) {\n    return base;\n  }\n\n  var top = base.paddingBox.top - closestScrollable.scrollTop;\n  var left = base.paddingBox.left - closestScrollable.scrollLeft;\n  var bottom = top + closestScrollable.scrollHeight;\n  var right = left + closestScrollable.scrollWidth;\n  var paddingBox = {\n    top: top,\n    right: right,\n    bottom: bottom,\n    left: left\n  };\n  var borderBox = expand(paddingBox, base.border);\n  var client = createBox({\n    borderBox: borderBox,\n    margin: base.margin,\n    border: base.border,\n    padding: base.padding\n  });\n  return client;\n};\n\nvar getDimension = (function (_ref) {\n  var ref = _ref.ref,\n      descriptor = _ref.descriptor,\n      env = _ref.env,\n      windowScroll = _ref.windowScroll,\n      direction = _ref.direction,\n      isDropDisabled = _ref.isDropDisabled,\n      isCombineEnabled = _ref.isCombineEnabled,\n      shouldClipSubject = _ref.shouldClipSubject;\n  var closestScrollable = env.closestScrollable;\n  var client = getClient(ref, closestScrollable);\n  var page = withScroll(client, windowScroll);\n\n  var closest = function () {\n    if (!closestScrollable) {\n      return null;\n    }\n\n    var frameClient = getBox(closestScrollable);\n    var scrollSize = {\n      scrollHeight: closestScrollable.scrollHeight,\n      scrollWidth: closestScrollable.scrollWidth\n    };\n    return {\n      client: frameClient,\n      page: withScroll(frameClient, windowScroll),\n      scroll: getScroll$1(closestScrollable),\n      scrollSize: scrollSize,\n      shouldClipSubject: shouldClipSubject\n    };\n  }();\n\n  var dimension = getDroppableDimension({\n    descriptor: descriptor,\n    isEnabled: !isDropDisabled,\n    isCombineEnabled: isCombineEnabled,\n    isFixedOnPage: env.isFixedOnPage,\n    direction: direction,\n    client: client,\n    page: page,\n    closest: closest\n  });\n  return dimension;\n});\n\nvar immediate = {\n  passive: false\n};\nvar delayed = {\n  passive: true\n};\nvar getListenerOptions = (function (options) {\n  return options.shouldPublishImmediately ? immediate : delayed;\n});\n\nfunction useRequiredContext(Context) {\n  var result = useContext(Context);\n  !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant(false) : void 0;\n  return result;\n}\n\nvar count = 0;\nfunction useUniqueId(prefix) {\n  var countRef = useRef(count++);\n  return prefix + \"::\" + countRef.current;\n}\n\nvar getClosestScrollableFromDrag = function getClosestScrollableFromDrag(dragging) {\n  return dragging && dragging.env.closestScrollable || null;\n};\n\nfunction useDroppablePublisher(args) {\n  var whileDraggingRef = useRef(null);\n  var appContext = useRequiredContext(AppContext);\n  var uniqueId = useUniqueId('droppable');\n  var registry = appContext.registry,\n      marshal = appContext.marshal;\n  var previousRef = usePrevious(args);\n  var descriptor = useMemo(function () {\n    return {\n      id: args.droppableId,\n      type: args.type,\n      mode: args.mode\n    };\n  }, [args.droppableId, args.mode, args.type]);\n  var publishedDescriptorRef = useRef(descriptor);\n  var memoizedUpdateScroll = useMemo(function () {\n    return memoizeOne(function (x, y) {\n      !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant(false) : void 0;\n      var scroll = {\n        x: x,\n        y: y\n      };\n      marshal.updateDroppableScroll(descriptor.id, scroll);\n    });\n  }, [descriptor.id, marshal]);\n  var getClosestScroll = useCallback(function () {\n    var dragging = whileDraggingRef.current;\n\n    if (!dragging || !dragging.env.closestScrollable) {\n      return origin;\n    }\n\n    return getScroll$1(dragging.env.closestScrollable);\n  }, []);\n  var updateScroll = useCallback(function () {\n    var scroll = getClosestScroll();\n    memoizedUpdateScroll(scroll.x, scroll.y);\n  }, [getClosestScroll, memoizedUpdateScroll]);\n  var scheduleScrollUpdate = useMemo(function () {\n    return rafSchd(updateScroll);\n  }, [updateScroll]);\n  var onClosestScroll = useCallback(function () {\n    var dragging = whileDraggingRef.current;\n    var closest = getClosestScrollableFromDrag(dragging);\n    !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant(false) : void 0;\n    var options = dragging.scrollOptions;\n\n    if (options.shouldPublishImmediately) {\n      updateScroll();\n      return;\n    }\n\n    scheduleScrollUpdate();\n  }, [scheduleScrollUpdate, updateScroll]);\n  var getDimensionAndWatchScroll = useCallback(function (windowScroll, options) {\n    !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant(false) : void 0;\n    var previous = previousRef.current;\n    var ref = previous.getDroppableRef();\n    !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant(false) : void 0;\n    var env = getEnv(ref);\n    var dragging = {\n      ref: ref,\n      descriptor: descriptor,\n      env: env,\n      scrollOptions: options\n    };\n    whileDraggingRef.current = dragging;\n    var dimension = getDimension({\n      ref: ref,\n      descriptor: descriptor,\n      env: env,\n      windowScroll: windowScroll,\n      direction: previous.direction,\n      isDropDisabled: previous.isDropDisabled,\n      isCombineEnabled: previous.isCombineEnabled,\n      shouldClipSubject: !previous.ignoreContainerClipping\n    });\n    var scrollable = env.closestScrollable;\n\n    if (scrollable) {\n      scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n      scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n\n      if (process.env.NODE_ENV !== 'production') {\n        checkForNestedScrollContainers(scrollable);\n      }\n    }\n\n    return dimension;\n  }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n  var getScrollWhileDragging = useCallback(function () {\n    var dragging = whileDraggingRef.current;\n    var closest = getClosestScrollableFromDrag(dragging);\n    !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant(false) : void 0;\n    return getScroll$1(closest);\n  }, []);\n  var dragStopped = useCallback(function () {\n    var dragging = whileDraggingRef.current;\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant(false) : void 0;\n    var closest = getClosestScrollableFromDrag(dragging);\n    whileDraggingRef.current = null;\n\n    if (!closest) {\n      return;\n    }\n\n    scheduleScrollUpdate.cancel();\n    closest.removeAttribute(scrollContainer.contextId);\n    closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n  }, [onClosestScroll, scheduleScrollUpdate]);\n  var scroll = useCallback(function (change) {\n    var dragging = whileDraggingRef.current;\n    !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant(false) : void 0;\n    var closest = getClosestScrollableFromDrag(dragging);\n    !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant(false) : void 0;\n    closest.scrollTop += change.y;\n    closest.scrollLeft += change.x;\n  }, []);\n  var callbacks = useMemo(function () {\n    return {\n      getDimensionAndWatchScroll: getDimensionAndWatchScroll,\n      getScrollWhileDragging: getScrollWhileDragging,\n      dragStopped: dragStopped,\n      scroll: scroll\n    };\n  }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n  var entry = useMemo(function () {\n    return {\n      uniqueId: uniqueId,\n      descriptor: descriptor,\n      callbacks: callbacks\n    };\n  }, [callbacks, descriptor, uniqueId]);\n  useIsomorphicLayoutEffect(function () {\n    publishedDescriptorRef.current = entry.descriptor;\n    registry.droppable.register(entry);\n    return function () {\n      if (whileDraggingRef.current) {\n        process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n        dragStopped();\n      }\n\n      registry.droppable.unregister(entry);\n    };\n  }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n  useIsomorphicLayoutEffect(function () {\n    if (!whileDraggingRef.current) {\n      return;\n    }\n\n    marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n  }, [args.isDropDisabled, marshal]);\n  useIsomorphicLayoutEffect(function () {\n    if (!whileDraggingRef.current) {\n      return;\n    }\n\n    marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n  }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop$2() {}\n\nvar empty = {\n  width: 0,\n  height: 0,\n  margin: noSpacing\n};\n\nvar getSize = function getSize(_ref) {\n  var isAnimatingOpenOnMount = _ref.isAnimatingOpenOnMount,\n      placeholder = _ref.placeholder,\n      animate = _ref.animate;\n\n  if (isAnimatingOpenOnMount) {\n    return empty;\n  }\n\n  if (animate === 'close') {\n    return empty;\n  }\n\n  return {\n    height: placeholder.client.borderBox.height,\n    width: placeholder.client.borderBox.width,\n    margin: placeholder.client.margin\n  };\n};\n\nvar getStyle = function getStyle(_ref2) {\n  var isAnimatingOpenOnMount = _ref2.isAnimatingOpenOnMount,\n      placeholder = _ref2.placeholder,\n      animate = _ref2.animate;\n  var size = getSize({\n    isAnimatingOpenOnMount: isAnimatingOpenOnMount,\n    placeholder: placeholder,\n    animate: animate\n  });\n  return {\n    display: placeholder.display,\n    boxSizing: 'border-box',\n    width: size.width,\n    height: size.height,\n    marginTop: size.margin.top,\n    marginRight: size.margin.right,\n    marginBottom: size.margin.bottom,\n    marginLeft: size.margin.left,\n    flexShrink: '0',\n    flexGrow: '0',\n    pointerEvents: 'none',\n    transition: animate !== 'none' ? transitions.placeholder : null\n  };\n};\n\nfunction Placeholder(props) {\n  var animateOpenTimerRef = useRef(null);\n  var tryClearAnimateOpenTimer = useCallback(function () {\n    if (!animateOpenTimerRef.current) {\n      return;\n    }\n\n    clearTimeout(animateOpenTimerRef.current);\n    animateOpenTimerRef.current = null;\n  }, []);\n  var animate = props.animate,\n      onTransitionEnd = props.onTransitionEnd,\n      onClose = props.onClose,\n      contextId = props.contextId;\n\n  var _useState = useState(props.animate === 'open'),\n      isAnimatingOpenOnMount = _useState[0],\n      setIsAnimatingOpenOnMount = _useState[1];\n\n  useEffect(function () {\n    if (!isAnimatingOpenOnMount) {\n      return noop$2;\n    }\n\n    if (animate !== 'open') {\n      tryClearAnimateOpenTimer();\n      setIsAnimatingOpenOnMount(false);\n      return noop$2;\n    }\n\n    if (animateOpenTimerRef.current) {\n      return noop$2;\n    }\n\n    animateOpenTimerRef.current = setTimeout(function () {\n      animateOpenTimerRef.current = null;\n      setIsAnimatingOpenOnMount(false);\n    });\n    return tryClearAnimateOpenTimer;\n  }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n  var onSizeChangeEnd = useCallback(function (event) {\n    if (event.propertyName !== 'height') {\n      return;\n    }\n\n    onTransitionEnd();\n\n    if (animate === 'close') {\n      onClose();\n    }\n  }, [animate, onClose, onTransitionEnd]);\n  var style = getStyle({\n    isAnimatingOpenOnMount: isAnimatingOpenOnMount,\n    animate: props.animate,\n    placeholder: props.placeholder\n  });\n  return React.createElement(props.placeholder.tagName, {\n    style: style,\n    'data-rbd-placeholder-context-id': contextId,\n    onTransitionEnd: onSizeChangeEnd,\n    ref: props.innerRef\n  });\n}\n\nvar Placeholder$1 = React.memo(Placeholder);\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n  !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"\\n    provided.innerRef has not been provided with a HTMLElement.\\n\\n    You can find a guide on using the innerRef callback functions at:\\n    https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/guides/using-inner-ref.md\\n  \") : invariant(false) : void 0;\n}\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\nfunction runChecks(args, checks) {\n  checks.forEach(function (check) {\n    return check(args);\n  });\n}\n\nvar shared = [function required(_ref) {\n  var props = _ref.props;\n  !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant(false) : void 0;\n  !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"A Droppable requires a [string] droppableId. Provided: [\" + typeof props.droppableId + \"]\") : invariant(false) : void 0;\n}, function _boolean(_ref2) {\n  var props = _ref2.props;\n  !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant(false) : void 0;\n  !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant(false) : void 0;\n  !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant(false) : void 0;\n}, function ref(_ref3) {\n  var getDroppableRef = _ref3.getDroppableRef;\n  checkIsValidInnerRef(getDroppableRef());\n}];\nvar standard = [function placeholder(_ref4) {\n  var props = _ref4.props,\n      getPlaceholderRef = _ref4.getPlaceholderRef;\n\n  if (!props.placeholder) {\n    return;\n  }\n\n  var ref = getPlaceholderRef();\n\n  if (ref) {\n    return;\n  }\n\n  process.env.NODE_ENV !== \"production\" ? warning(\"\\n      Droppable setup issue [droppableId: \\\"\" + props.droppableId + \"\\\"]:\\n      DroppableProvided > placeholder could not be found.\\n\\n      Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\\n      More information: https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/api/droppable.md\\n    \") : void 0;\n}];\nvar virtual = [function hasClone(_ref5) {\n  var props = _ref5.props;\n  !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant(false) : void 0;\n}, function hasNoPlaceholder(_ref6) {\n  var getPlaceholderRef = _ref6.getPlaceholderRef;\n  !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant(false) : void 0;\n}];\nfunction useValidation(args) {\n  useDevSetupWarning(function () {\n    runChecks(args, shared);\n\n    if (args.props.mode === 'standard') {\n      runChecks(args, standard);\n    }\n\n    if (args.props.mode === 'virtual') {\n      runChecks(args, virtual);\n    }\n  });\n}\n\nvar AnimateInOut = function (_React$PureComponent) {\n  _inheritsLoose(AnimateInOut, _React$PureComponent);\n\n  function AnimateInOut() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;\n    _this.state = {\n      isVisible: Boolean(_this.props.on),\n      data: _this.props.on,\n      animate: _this.props.shouldAnimate && _this.props.on ? 'open' : 'none'\n    };\n\n    _this.onClose = function () {\n      if (_this.state.animate !== 'close') {\n        return;\n      }\n\n      _this.setState({\n        isVisible: false\n      });\n    };\n\n    return _this;\n  }\n\n  AnimateInOut.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    if (!props.shouldAnimate) {\n      return {\n        isVisible: Boolean(props.on),\n        data: props.on,\n        animate: 'none'\n      };\n    }\n\n    if (props.on) {\n      return {\n        isVisible: true,\n        data: props.on,\n        animate: 'open'\n      };\n    }\n\n    if (state.isVisible) {\n      return {\n        isVisible: true,\n        data: state.data,\n        animate: 'close'\n      };\n    }\n\n    return {\n      isVisible: false,\n      animate: 'close',\n      data: null\n    };\n  };\n\n  var _proto = AnimateInOut.prototype;\n\n  _proto.render = function render() {\n    if (!this.state.isVisible) {\n      return null;\n    }\n\n    var provided = {\n      onClose: this.onClose,\n      data: this.state.data,\n      animate: this.state.animate\n    };\n    return this.props.children(provided);\n  };\n\n  return AnimateInOut;\n}(React.PureComponent);\n\nvar zIndexOptions = {\n  dragging: 5000,\n  dropAnimating: 4500\n};\n\nvar getDraggingTransition = function getDraggingTransition(shouldAnimateDragMovement, dropping) {\n  if (dropping) {\n    return transitions.drop(dropping.duration);\n  }\n\n  if (shouldAnimateDragMovement) {\n    return transitions.snap;\n  }\n\n  return transitions.fluid;\n};\n\nvar getDraggingOpacity = function getDraggingOpacity(isCombining, isDropAnimating) {\n  if (!isCombining) {\n    return null;\n  }\n\n  return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\n\nvar getShouldDraggingAnimate = function getShouldDraggingAnimate(dragging) {\n  if (dragging.forceShouldAnimate != null) {\n    return dragging.forceShouldAnimate;\n  }\n\n  return dragging.mode === 'SNAP';\n};\n\nfunction getDraggingStyle(dragging) {\n  var dimension = dragging.dimension;\n  var box = dimension.client;\n  var offset = dragging.offset,\n      combineWith = dragging.combineWith,\n      dropping = dragging.dropping;\n  var isCombining = Boolean(combineWith);\n  var shouldAnimate = getShouldDraggingAnimate(dragging);\n  var isDropAnimating = Boolean(dropping);\n  var transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n  var style = {\n    position: 'fixed',\n    top: box.marginBox.top,\n    left: box.marginBox.left,\n    boxSizing: 'border-box',\n    width: box.borderBox.width,\n    height: box.borderBox.height,\n    transition: getDraggingTransition(shouldAnimate, dropping),\n    transform: transform,\n    opacity: getDraggingOpacity(isCombining, isDropAnimating),\n    zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n    pointerEvents: 'none'\n  };\n  return style;\n}\n\nfunction getSecondaryStyle(secondary) {\n  return {\n    transform: transforms.moveTo(secondary.offset),\n    transition: secondary.shouldAnimateDisplacement ? null : 'none'\n  };\n}\n\nfunction getStyle$1(mapped) {\n  return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll) {\n  if (windowScroll === void 0) {\n    windowScroll = origin;\n  }\n\n  var computedStyles = window.getComputedStyle(el);\n  var borderBox = el.getBoundingClientRect();\n  var client = calculateBox(borderBox, computedStyles);\n  var page = withScroll(client, windowScroll);\n  var placeholder = {\n    client: client,\n    tagName: el.tagName.toLowerCase(),\n    display: computedStyles.display\n  };\n  var displaceBy = {\n    x: client.marginBox.width,\n    y: client.marginBox.height\n  };\n  var dimension = {\n    descriptor: descriptor,\n    placeholder: placeholder,\n    displaceBy: displaceBy,\n    client: client,\n    page: page\n  };\n  return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n  var uniqueId = useUniqueId('draggable');\n  var descriptor = args.descriptor,\n      registry = args.registry,\n      getDraggableRef = args.getDraggableRef,\n      canDragInteractiveElements = args.canDragInteractiveElements,\n      shouldRespectForcePress = args.shouldRespectForcePress,\n      isEnabled = args.isEnabled;\n  var options = useMemo(function () {\n    return {\n      canDragInteractiveElements: canDragInteractiveElements,\n      shouldRespectForcePress: shouldRespectForcePress,\n      isEnabled: isEnabled\n    };\n  }, [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n  var getDimension = useCallback(function (windowScroll) {\n    var el = getDraggableRef();\n    !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant(false) : void 0;\n    return getDimension$1(descriptor, el, windowScroll);\n  }, [descriptor, getDraggableRef]);\n  var entry = useMemo(function () {\n    return {\n      uniqueId: uniqueId,\n      descriptor: descriptor,\n      options: options,\n      getDimension: getDimension\n    };\n  }, [descriptor, getDimension, options, uniqueId]);\n  var publishedRef = useRef(entry);\n  var isFirstPublishRef = useRef(true);\n  useIsomorphicLayoutEffect(function () {\n    registry.draggable.register(publishedRef.current);\n    return function () {\n      return registry.draggable.unregister(publishedRef.current);\n    };\n  }, [registry.draggable]);\n  useIsomorphicLayoutEffect(function () {\n    if (isFirstPublishRef.current) {\n      isFirstPublishRef.current = false;\n      return;\n    }\n\n    var last = publishedRef.current;\n    publishedRef.current = entry;\n    registry.draggable.update(entry, last);\n  }, [entry, registry.draggable]);\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n  useDevSetupWarning(function () {\n    function prefix(id) {\n      return \"Draggable[id: \" + id + \"]: \";\n    }\n\n    var id = props.draggableId;\n    !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n    !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Draggable requires a [string] draggableId.\\n      Provided: [type: \" + typeof id + \"] (value: \" + id + \")\") : invariant(false) : void 0;\n    !_Number$isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, prefix(id) + \" requires an integer index prop\") : invariant(false) : void 0;\n\n    if (props.mapped.type === 'DRAGGING') {\n      return;\n    }\n\n    checkIsValidInnerRef(getRef());\n\n    if (props.isEnabled) {\n      !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, prefix(id) + \" Unable to find drag handle\") : invariant(false) : void 0;\n    }\n  });\n}\nfunction useClonePropValidation(isClone) {\n  useDev(function () {\n    var initialRef = useRef(isClone);\n    useDevSetupWarning(function () {\n      !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n    }, [isClone]);\n  });\n}\n\nfunction preventHtml5Dnd(event) {\n  event.preventDefault();\n}\n\nfunction Draggable(props) {\n  var ref = useRef(null);\n  var setRef = useCallback(function (el) {\n    ref.current = el;\n  }, []);\n  var getRef = useCallback(function () {\n    return ref.current;\n  }, []);\n\n  var _useRequiredContext = useRequiredContext(AppContext),\n      contextId = _useRequiredContext.contextId,\n      liftInstructionId = _useRequiredContext.liftInstructionId,\n      registry = _useRequiredContext.registry;\n\n  var _useRequiredContext2 = useRequiredContext(DroppableContext),\n      type = _useRequiredContext2.type,\n      droppableId = _useRequiredContext2.droppableId;\n\n  var descriptor = useMemo(function () {\n    return {\n      id: props.draggableId,\n      index: props.index,\n      type: type,\n      droppableId: droppableId\n    };\n  }, [props.draggableId, props.index, type, droppableId]);\n  var children = props.children,\n      draggableId = props.draggableId,\n      isEnabled = props.isEnabled,\n      shouldRespectForcePress = props.shouldRespectForcePress,\n      canDragInteractiveElements = props.canDragInteractiveElements,\n      isClone = props.isClone,\n      mapped = props.mapped,\n      dropAnimationFinishedAction = props.dropAnimationFinished;\n  useValidation$1(props, contextId, getRef);\n  useClonePropValidation(isClone);\n\n  if (!isClone) {\n    var forPublisher = useMemo(function () {\n      return {\n        descriptor: descriptor,\n        registry: registry,\n        getDraggableRef: getRef,\n        canDragInteractiveElements: canDragInteractiveElements,\n        shouldRespectForcePress: shouldRespectForcePress,\n        isEnabled: isEnabled\n      };\n    }, [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n    useDraggablePublisher(forPublisher);\n  }\n\n  var dragHandleProps = useMemo(function () {\n    return isEnabled ? {\n      tabIndex: 0,\n      'data-rbd-drag-handle-draggable-id': draggableId,\n      'data-rbd-drag-handle-context-id': contextId,\n      'aria-labelledby': liftInstructionId,\n      draggable: false,\n      onDragStart: preventHtml5Dnd\n    } : null;\n  }, [contextId, draggableId, isEnabled, liftInstructionId]);\n  var onMoveEnd = useCallback(function (event) {\n    if (mapped.type !== 'DRAGGING') {\n      return;\n    }\n\n    if (!mapped.dropping) {\n      return;\n    }\n\n    if (event.propertyName !== 'transform') {\n      return;\n    }\n\n    dropAnimationFinishedAction();\n  }, [dropAnimationFinishedAction, mapped]);\n  var provided = useMemo(function () {\n    var style = getStyle$1(mapped);\n    var onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : null;\n    var result = {\n      innerRef: setRef,\n      draggableProps: {\n        'data-rbd-draggable-context-id': contextId,\n        'data-rbd-draggable-id': draggableId,\n        style: style,\n        onTransitionEnd: onTransitionEnd\n      },\n      dragHandleProps: dragHandleProps\n    };\n    return result;\n  }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n  var rubric = useMemo(function () {\n    return {\n      draggableId: descriptor.id,\n      type: descriptor.type,\n      source: {\n        index: descriptor.index,\n        droppableId: descriptor.droppableId\n      }\n    };\n  }, [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n  return children(provided, mapped.snapshot, rubric);\n}\n\nvar isStrictEqual = (function (a, b) {\n  return a === b;\n});\n\nvar whatIsDraggedOverFromResult = (function (result) {\n  var combine = result.combine,\n      destination = result.destination;\n\n  if (destination) {\n    return destination.droppableId;\n  }\n\n  if (combine) {\n    return combine.droppableId;\n  }\n\n  return null;\n});\n\nvar getCombineWithFromResult = function getCombineWithFromResult(result) {\n  return result.combine ? result.combine.draggableId : null;\n};\n\nvar getCombineWithFromImpact = function getCombineWithFromImpact(impact) {\n  return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\n\nfunction getDraggableSelector() {\n  var memoizedOffset = memoizeOne(function (x, y) {\n    return {\n      x: x,\n      y: y\n    };\n  });\n  var getMemoizedSnapshot = memoizeOne(function (mode, isClone, draggingOver, combineWith, dropping) {\n    return {\n      isDragging: true,\n      isClone: isClone,\n      isDropAnimating: Boolean(dropping),\n      dropAnimation: dropping,\n      mode: mode,\n      draggingOver: draggingOver,\n      combineWith: combineWith,\n      combineTargetFor: null\n    };\n  });\n  var getMemoizedProps = memoizeOne(function (offset, mode, dimension, isClone, draggingOver, combineWith, forceShouldAnimate) {\n    return {\n      mapped: {\n        type: 'DRAGGING',\n        dropping: null,\n        draggingOver: draggingOver,\n        combineWith: combineWith,\n        mode: mode,\n        offset: offset,\n        dimension: dimension,\n        forceShouldAnimate: forceShouldAnimate,\n        snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n      }\n    };\n  });\n\n  var selector = function selector(state, ownProps) {\n    if (state.isDragging) {\n      if (state.critical.draggable.id !== ownProps.draggableId) {\n        return null;\n      }\n\n      var offset = state.current.client.offset;\n      var dimension = state.dimensions.draggables[ownProps.draggableId];\n      var draggingOver = whatIsDraggedOver(state.impact);\n      var combineWith = getCombineWithFromImpact(state.impact);\n      var forceShouldAnimate = state.forceShouldAnimate;\n      return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n    }\n\n    if (state.phase === 'DROP_ANIMATING') {\n      var completed = state.completed;\n\n      if (completed.result.draggableId !== ownProps.draggableId) {\n        return null;\n      }\n\n      var isClone = ownProps.isClone;\n      var _dimension = state.dimensions.draggables[ownProps.draggableId];\n      var result = completed.result;\n      var mode = result.mode;\n\n      var _draggingOver = whatIsDraggedOverFromResult(result);\n\n      var _combineWith = getCombineWithFromResult(result);\n\n      var duration = state.dropDuration;\n      var dropping = {\n        duration: duration,\n        curve: curves.drop,\n        moveTo: state.newHomeClientOffset,\n        opacity: _combineWith ? combine.opacity.drop : null,\n        scale: _combineWith ? combine.scale.drop : null\n      };\n      return {\n        mapped: {\n          type: 'DRAGGING',\n          offset: state.newHomeClientOffset,\n          dimension: _dimension,\n          dropping: dropping,\n          draggingOver: _draggingOver,\n          combineWith: _combineWith,\n          mode: mode,\n          forceShouldAnimate: null,\n          snapshot: getMemoizedSnapshot(mode, isClone, _draggingOver, _combineWith, dropping)\n        }\n      };\n    }\n\n    return null;\n  };\n\n  return selector;\n}\n\nfunction getSecondarySnapshot(combineTargetFor) {\n  return {\n    isDragging: false,\n    isDropAnimating: false,\n    isClone: false,\n    dropAnimation: null,\n    mode: null,\n    draggingOver: null,\n    combineTargetFor: combineTargetFor,\n    combineWith: null\n  };\n}\n\nvar atRest = {\n  mapped: {\n    type: 'SECONDARY',\n    offset: origin,\n    combineTargetFor: null,\n    shouldAnimateDisplacement: true,\n    snapshot: getSecondarySnapshot(null)\n  }\n};\n\nfunction getSecondarySelector() {\n  var memoizedOffset = memoizeOne(function (x, y) {\n    return {\n      x: x,\n      y: y\n    };\n  });\n  var getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n  var getMemoizedProps = memoizeOne(function (offset, combineTargetFor, shouldAnimateDisplacement) {\n    if (combineTargetFor === void 0) {\n      combineTargetFor = null;\n    }\n\n    return {\n      mapped: {\n        type: 'SECONDARY',\n        offset: offset,\n        combineTargetFor: combineTargetFor,\n        shouldAnimateDisplacement: shouldAnimateDisplacement,\n        snapshot: getMemoizedSnapshot(combineTargetFor)\n      }\n    };\n  });\n\n  var getFallback = function getFallback(combineTargetFor) {\n    return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n  };\n\n  var getProps = function getProps(ownId, draggingId, impact, afterCritical) {\n    var visualDisplacement = impact.displaced.visible[ownId];\n    var isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n    var combine = tryGetCombine(impact);\n    var combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n\n    if (!visualDisplacement) {\n      if (!isAfterCriticalInVirtualList) {\n        return getFallback(combineTargetFor);\n      }\n\n      if (impact.displaced.invisible[ownId]) {\n        return null;\n      }\n\n      var change = negate(afterCritical.displacedBy.point);\n\n      var _offset = memoizedOffset(change.x, change.y);\n\n      return getMemoizedProps(_offset, combineTargetFor, true);\n    }\n\n    if (isAfterCriticalInVirtualList) {\n      return getFallback(combineTargetFor);\n    }\n\n    var displaceBy = impact.displacedBy.point;\n    var offset = memoizedOffset(displaceBy.x, displaceBy.y);\n    return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n  };\n\n  var selector = function selector(state, ownProps) {\n    if (state.isDragging) {\n      if (state.critical.draggable.id === ownProps.draggableId) {\n        return null;\n      }\n\n      return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n    }\n\n    if (state.phase === 'DROP_ANIMATING') {\n      var completed = state.completed;\n\n      if (completed.result.draggableId === ownProps.draggableId) {\n        return null;\n      }\n\n      return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n    }\n\n    return null;\n  };\n\n  return selector;\n}\n\nvar makeMapStateToProps = function makeMapStateToProps() {\n  var draggingSelector = getDraggableSelector();\n  var secondarySelector = getSecondarySelector();\n\n  var selector = function selector(state, ownProps) {\n    return draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n  };\n\n  return selector;\n};\nvar mapDispatchToProps = {\n  dropAnimationFinished: dropAnimationFinished\n};\nvar ConnectedDraggable = connect(makeMapStateToProps, mapDispatchToProps, null, {\n  context: StoreContext,\n  pure: true,\n  areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n  var droppableContext = useRequiredContext(DroppableContext);\n  var isUsingCloneFor = droppableContext.isUsingCloneFor;\n\n  if (isUsingCloneFor === props.draggableId && !props.isClone) {\n    return null;\n  }\n\n  return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n  var isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n  var canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n  var shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n  return React.createElement(PrivateDraggable, _extends({}, props, {\n    isClone: false,\n    isEnabled: isEnabled,\n    canDragInteractiveElements: canDragInteractiveElements,\n    shouldRespectForcePress: shouldRespectForcePress\n  }));\n}\n\nfunction Droppable(props) {\n  var appContext = useContext(AppContext);\n  !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant(false) : void 0;\n  var contextId = appContext.contextId,\n      isMovementAllowed = appContext.isMovementAllowed;\n  var droppableRef = useRef(null);\n  var placeholderRef = useRef(null);\n  var children = props.children,\n      droppableId = props.droppableId,\n      type = props.type,\n      mode = props.mode,\n      direction = props.direction,\n      ignoreContainerClipping = props.ignoreContainerClipping,\n      isDropDisabled = props.isDropDisabled,\n      isCombineEnabled = props.isCombineEnabled,\n      snapshot = props.snapshot,\n      useClone = props.useClone,\n      updateViewportMaxScroll = props.updateViewportMaxScroll,\n      getContainerForClone = props.getContainerForClone;\n  var getDroppableRef = useCallback(function () {\n    return droppableRef.current;\n  }, []);\n  var setDroppableRef = useCallback(function (value) {\n    droppableRef.current = value;\n  }, []);\n  var getPlaceholderRef = useCallback(function () {\n    return placeholderRef.current;\n  }, []);\n  var setPlaceholderRef = useCallback(function (value) {\n    placeholderRef.current = value;\n  }, []);\n  useValidation({\n    props: props,\n    getDroppableRef: getDroppableRef,\n    getPlaceholderRef: getPlaceholderRef\n  });\n  var onPlaceholderTransitionEnd = useCallback(function () {\n    if (isMovementAllowed()) {\n      updateViewportMaxScroll({\n        maxScroll: getMaxWindowScroll()\n      });\n    }\n  }, [isMovementAllowed, updateViewportMaxScroll]);\n  useDroppablePublisher({\n    droppableId: droppableId,\n    type: type,\n    mode: mode,\n    direction: direction,\n    isDropDisabled: isDropDisabled,\n    isCombineEnabled: isCombineEnabled,\n    ignoreContainerClipping: ignoreContainerClipping,\n    getDroppableRef: getDroppableRef\n  });\n  var placeholder = React.createElement(AnimateInOut, {\n    on: props.placeholder,\n    shouldAnimate: props.shouldAnimatePlaceholder\n  }, function (_ref) {\n    var onClose = _ref.onClose,\n        data = _ref.data,\n        animate = _ref.animate;\n    return React.createElement(Placeholder$1, {\n      placeholder: data,\n      onClose: onClose,\n      innerRef: setPlaceholderRef,\n      animate: animate,\n      contextId: contextId,\n      onTransitionEnd: onPlaceholderTransitionEnd\n    });\n  });\n  var provided = useMemo(function () {\n    return {\n      innerRef: setDroppableRef,\n      placeholder: placeholder,\n      droppableProps: {\n        'data-rbd-droppable-id': droppableId,\n        'data-rbd-droppable-context-id': contextId\n      }\n    };\n  }, [contextId, droppableId, placeholder, setDroppableRef]);\n  var isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n  var droppableContext = useMemo(function () {\n    return {\n      droppableId: droppableId,\n      type: type,\n      isUsingCloneFor: isUsingCloneFor\n    };\n  }, [droppableId, isUsingCloneFor, type]);\n\n  function getClone() {\n    if (!useClone) {\n      return null;\n    }\n\n    var dragging = useClone.dragging,\n        render = useClone.render;\n    var node = React.createElement(PrivateDraggable, {\n      draggableId: dragging.draggableId,\n      index: dragging.source.index,\n      isClone: true,\n      isEnabled: true,\n      shouldRespectForcePress: false,\n      canDragInteractiveElements: true\n    }, function (draggableProvided, draggableSnapshot) {\n      return render(draggableProvided, draggableSnapshot, dragging);\n    });\n    return ReactDOM.createPortal(node, getContainerForClone());\n  }\n\n  return React.createElement(DroppableContext.Provider, {\n    value: droppableContext\n  }, children(provided, snapshot), getClone());\n}\n\nvar isMatchingType = function isMatchingType(type, critical) {\n  return type === critical.droppable.type;\n};\n\nvar getDraggable = function getDraggable(critical, dimensions) {\n  return dimensions.draggables[critical.draggable.id];\n};\n\nvar makeMapStateToProps$1 = function makeMapStateToProps() {\n  var idleWithAnimation = {\n    placeholder: null,\n    shouldAnimatePlaceholder: true,\n    snapshot: {\n      isDraggingOver: false,\n      draggingOverWith: null,\n      draggingFromThisWith: null,\n      isUsingPlaceholder: false\n    },\n    useClone: null\n  };\n\n  var idleWithoutAnimation = _extends({}, idleWithAnimation, {\n    shouldAnimatePlaceholder: false\n  });\n\n  var getDraggableRubric = memoizeOne(function (descriptor) {\n    return {\n      draggableId: descriptor.id,\n      type: descriptor.type,\n      source: {\n        index: descriptor.index,\n        droppableId: descriptor.droppableId\n      }\n    };\n  });\n  var getMapProps = memoizeOne(function (id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) {\n    var draggableId = dragging.descriptor.id;\n    var isHome = dragging.descriptor.droppableId === id;\n\n    if (isHome) {\n      var useClone = renderClone ? {\n        render: renderClone,\n        dragging: getDraggableRubric(dragging.descriptor)\n      } : null;\n      var _snapshot = {\n        isDraggingOver: isDraggingOverForConsumer,\n        draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n        draggingFromThisWith: draggableId,\n        isUsingPlaceholder: true\n      };\n      return {\n        placeholder: dragging.placeholder,\n        shouldAnimatePlaceholder: false,\n        snapshot: _snapshot,\n        useClone: useClone\n      };\n    }\n\n    if (!isEnabled) {\n      return idleWithoutAnimation;\n    }\n\n    if (!isDraggingOverForImpact) {\n      return idleWithAnimation;\n    }\n\n    var snapshot = {\n      isDraggingOver: isDraggingOverForConsumer,\n      draggingOverWith: draggableId,\n      draggingFromThisWith: null,\n      isUsingPlaceholder: true\n    };\n    return {\n      placeholder: dragging.placeholder,\n      shouldAnimatePlaceholder: true,\n      snapshot: snapshot,\n      useClone: null\n    };\n  });\n\n  var selector = function selector(state, ownProps) {\n    var id = ownProps.droppableId;\n    var type = ownProps.type;\n    var isEnabled = !ownProps.isDropDisabled;\n    var renderClone = ownProps.renderClone;\n\n    if (state.isDragging) {\n      var critical = state.critical;\n\n      if (!isMatchingType(type, critical)) {\n        return idleWithoutAnimation;\n      }\n\n      var dragging = getDraggable(critical, state.dimensions);\n      var isDraggingOver = whatIsDraggedOver(state.impact) === id;\n      return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n    }\n\n    if (state.phase === 'DROP_ANIMATING') {\n      var completed = state.completed;\n\n      if (!isMatchingType(type, completed.critical)) {\n        return idleWithoutAnimation;\n      }\n\n      var _dragging = getDraggable(completed.critical, state.dimensions);\n\n      return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, _dragging, renderClone);\n    }\n\n    if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n      var _completed = state.completed;\n\n      if (!isMatchingType(type, _completed.critical)) {\n        return idleWithoutAnimation;\n      }\n\n      var wasOver = whatIsDraggedOver(_completed.impact) === id;\n      var wasCombining = Boolean(_completed.impact.at && _completed.impact.at.type === 'COMBINE');\n      var isHome = _completed.critical.droppable.id === id;\n\n      if (wasOver) {\n        return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n      }\n\n      if (isHome) {\n        return idleWithAnimation;\n      }\n\n      return idleWithoutAnimation;\n    }\n\n    return idleWithoutAnimation;\n  };\n\n  return selector;\n};\nvar mapDispatchToProps$1 = {\n  updateViewportMaxScroll: updateViewportMaxScroll\n};\n\nfunction getBody() {\n  !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant(false) : void 0;\n  return document.body;\n}\n\nvar defaultProps = {\n  mode: 'standard',\n  type: 'DEFAULT',\n  direction: 'vertical',\n  isDropDisabled: false,\n  isCombineEnabled: false,\n  ignoreContainerClipping: false,\n  renderClone: null,\n  getContainerForClone: getBody\n};\nvar ConnectedDroppable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n  context: StoreContext,\n  pure: true,\n  areStatePropsEqual: isStrictEqual\n})(Droppable);\nConnectedDroppable.defaultProps = defaultProps;\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, resetServerContext };\n","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","export {\n  default as AtsApiContext,\n  withAtsApi,\n} from './AtsApiContext';\n\nexport {\n  default as StoreContext,\n  withStore,\n} from './StoreContext';\n\nexport {\n  default as WindowSizeContext,\n  withWindowSize,\n} from './WindowSizeContext';\n","\n\nexport default {};\nexport enum CategoryDisplayType {\n  DISPLAY_BY_CATEGORY = 'ProductModule.CategoryDisplayType.DISPLAY_BY_CATEGORY',\n  DISPLAY_BY_DIVISION = 'ProductModule.CategoryDisplayType.DISPLAY_BY_DIVISION',\n}\n\nexport enum DisplayDrawingType {\n  DRAWING = 'ProductCategorySelection.DisplayDrawingType.DRAWING',\n  DIVISION = 'ProductCategorySelection.DisplayDrawingType.DIVISION',\n}\n\nexport enum QuickSearchType {\n  PRODUCT = 'ProductModule.QuickSearchType.PRODUCT',\n  SERIES = 'ProductModule.QuickSearchType.SERIES',\n  CATEGORY = 'ProductModule.QuickSearchType.CATEGORY',\n  XREF = 'ProductModule.QuickSearchType.XREF',\n}\n\n// every tool that applies a category specific series filter owns an entry under its own key,\n// so the filters stack and each one can be removed on its own\nexport enum CategorySpecificSeriesFilterKey {\n  motorSize = 'motorSize',\n  psychrometrics = 'psychrometrics',\n}\n\nexport const CATEGORY_SPECIFIC_SERIES_FILTER_LABEL_KEYS: Record<CategorySpecificSeriesFilterKey, string> = {\n  [CategorySpecificSeriesFilterKey.motorSize]: 'ProductSelection.categorySpecificSeriesFilterChip',\n  [CategorySpecificSeriesFilterKey.psychrometrics]: 'ProductSelection.psychrometricsSeriesFilterChip',\n};\n\nexport const DEFAULT_MOUNT_POINT = 'product';\nexport const PRODUCT_SELECTION_GROUP_FORM = 'ProductModule.PRODUCT_SELECTION_GROUP_FORM';","\nimport * as React from 'react';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport DebugStyle from '../../components/DebugStyle';\nimport {\n  makeSelectDebugState\n} from '../../modules/DebugModule/selectors';\nimport {\n  compose,\n} from 'redux';\nimport {\n  IS_PRODUCTION,\n} from '../../constants';\nimport {\n  Acl,\n} from '../../containers';\nimport {\n  AclRoles,\n} from '../../models';\n\ninterface IDebugComponentProps {\n  debugLevel?: number;\n  delayedRender?: () => React.ReactNode;\n}\n\ninterface IDebugProps extends IDebugComponentProps {\n  debug: boolean | number;\n}\n\nconst DebugRender: React.SFC<IDebugComponentProps> = ({\n  delayedRender,\n  children,\n  ...rest\n}) => {\n  const clonedChildren = React.Children.map(children, (child) => React.isValidElement(child)\n  ? React.cloneElement(child as any, {\n    ...rest\n  })\n  : null);\n  return <Acl\n    includeOriginal={true}\n    requiredRoles={IS_PRODUCTION ? AclRoles.DEVELOPER : undefined}\n    delayedRender={() => {\n      if (delayedRender != null) {\n        return <DebugStyle>\n          {delayedRender()}\n          {clonedChildren}\n        </DebugStyle>;\n      }\n      return <DebugStyle>\n        {clonedChildren}\n      </DebugStyle>;\n    }}\n  />;\n};\n\nclass Debug extends React.Component<IDebugProps, {}> { // eslint-disable-line react/prefer-stateless-function\n\n  public render() {\n    const {\n      debug = 0,\n      children,\n      delayedRender,\n      debugLevel = 1,\n    } = this.props;\n\n    if (\n      debug\n      && debugLevel\n      && debug >= debugLevel\n    ) {\n      return <DebugRender\n        delayedRender={delayedRender}\n      >\n        {children}\n      </DebugRender>;\n    }\n\n    return <div style={{ display: 'none' }} />;\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  debug: makeSelectDebugState(),\n});\n\nexport default compose<React.ComponentClass<IDebugComponentProps>>(\n  connect(mapStateToProps, null)\n)(Debug);\n","export const DRAWER_ID = 'contactDrawer';","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","// @flow\n/* eslint-disable flowtype/object-type-delimiter */\n/* eslint-disable react/prop-types */\n\nimport React, { type Element } from 'react';\nimport { IS_BROWSER, DISABLE_SPEEDY, SC_ATTR, SC_VERSION_ATTR } from '../constants';\nimport StyledError from '../utils/error';\nimport { type ExtractedComp } from '../utils/extractCompsFromCSS';\nimport { splitByRules } from '../utils/stringifyRules';\nimport getNonce from '../utils/nonce';\n\nimport {\n  type Names,\n  addNameForId,\n  resetIdNames,\n  hasNameForId,\n  stringifyNames,\n  cloneNames,\n} from '../utils/styleNames';\n\nimport { sheetForTag, safeInsertRule, deleteRules } from '../utils/insertRuleHelpers';\n\ndeclare var __VERSION__: string;\n\nexport interface Tag<T> {\n  // $FlowFixMe: Doesn't seem to accept any combination w/ HTMLStyleElement for some reason\n  styleTag: HTMLStyleElement | null;\n  /* lists all ids of the tag */\n  getIds(): string[];\n  /* checks whether `name` is already injected for `id` */\n  hasNameForId(id: string, name: string): boolean;\n  /* inserts a marker to ensure the id's correct position in the sheet */\n  insertMarker(id: string): T;\n  /* inserts rules according to the ids markers */\n  insertRules(id: string, cssRules: string[], name: ?string): void;\n  /* removes all rules belonging to the id, keeping the marker around */\n  removeRules(id: string): void;\n  css(): string;\n  toHTML(additionalAttrs: ?string): string;\n  toElement(): Element<*>;\n  clone(): Tag<T>;\n  /* used in server side rendering to indicate that the rules in the tag have been flushed to HTML */\n  sealed: boolean;\n}\n\n/* this marker separates component styles and is important for rehydration */\nconst makeTextMarker = id => `\\n/* sc-component-id: ${id} */\\n`;\n\n/* add up all numbers in array up until and including the index */\nconst addUpUntilIndex = (sizes: number[], index: number): number => {\n  let totalUpToIndex = 0;\n  for (let i = 0; i <= index; i += 1) {\n    totalUpToIndex += sizes[i];\n  }\n\n  return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nconst makeStyleTag = (target: ?HTMLElement, tagEl: ?Node, insertBefore: ?boolean) => {\n  const el = document.createElement('style');\n  el.setAttribute(SC_ATTR, '');\n  el.setAttribute(SC_VERSION_ATTR, __VERSION__);\n\n  const nonce = getNonce();\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n\n  /* Work around insertRule quirk in EdgeHTML */\n  el.appendChild(document.createTextNode(''));\n\n  if (target && !tagEl) {\n    /* Append to target when no previous element was passed */\n    target.appendChild(el);\n  } else {\n    if (!tagEl || !target || !tagEl.parentNode) {\n      throw new StyledError(6);\n    }\n\n    /* Insert new style tag after the previous one */\n    tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n  }\n\n  return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nconst wrapAsHtmlTag = (css: () => string, names: Names) => (additionalAttrs: ?string): string => {\n  const nonce = getNonce();\n  const attrs = [\n    nonce && `nonce=\"${nonce}\"`,\n    `${SC_ATTR}=\"${stringifyNames(names)}\"`,\n    `${SC_VERSION_ATTR}=\"${__VERSION__}\"`,\n    additionalAttrs,\n  ];\n\n  const htmlAttr = attrs.filter(Boolean).join(' ');\n  return `<style ${htmlAttr}>${css()}</style>`;\n};\n\n/* takes a css factory function and outputs an element factory */\nconst wrapAsElement = (css: () => string, names: Names) => () => {\n  const props = {\n    [SC_ATTR]: stringifyNames(names),\n    [SC_VERSION_ATTR]: __VERSION__,\n  };\n\n  const nonce = getNonce();\n  if (nonce) {\n    // $FlowFixMe\n    props.nonce = nonce;\n  }\n\n  // eslint-disable-next-line react/no-danger\n  return <style {...props} dangerouslySetInnerHTML={{ __html: css() }} />;\n};\n\nconst getIdsFromMarkersFactory = (markers: Object) => (): string[] => Object.keys(markers);\n\n/* speedy tags utilise insertRule */\nconst makeSpeedyTag = (el: HTMLStyleElement, getImportRuleTag: ?() => Tag<any>): Tag<number> => {\n  const names: Names = (Object.create(null): Object);\n  const markers = Object.create(null);\n  const sizes: number[] = [];\n\n  const extractImport = getImportRuleTag !== undefined;\n  /* indicates whether getImportRuleTag was called */\n  let usedImportRuleTag = false;\n\n  const insertMarker = id => {\n    const prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = sizes.length;\n    sizes.push(0);\n    resetIdNames(names, id);\n\n    return markers[id];\n  };\n\n  const insertRules = (id, cssRules, name) => {\n    const marker = insertMarker(id);\n    const sheet = sheetForTag(el);\n    const insertIndex = addUpUntilIndex(sizes, marker);\n\n    let injectedRules = 0;\n    const importRules = [];\n    const cssRulesSize = cssRules.length;\n\n    for (let i = 0; i < cssRulesSize; i += 1) {\n      const cssRule = cssRules[i];\n      let mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n      if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n        importRules.push(cssRule);\n      } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n        mayHaveImport = false;\n        injectedRules += 1;\n      }\n    }\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(`${id}-import`, importRules);\n    }\n\n    sizes[marker] += injectedRules; /* add up no of injected rules */\n    addNameForId(names, id, name);\n  };\n\n  const removeRules = id => {\n    const marker = markers[id];\n    if (marker === undefined) return;\n\n    const size = sizes[marker];\n    const sheet = sheetForTag(el);\n    const removalIndex = addUpUntilIndex(sizes, marker) - 1;\n    deleteRules(sheet, removalIndex, size);\n    sizes[marker] = 0;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(`${id}-import`);\n    }\n  };\n\n  const css = () => {\n    const { cssRules } = sheetForTag(el);\n    let str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (const id in markers) {\n      str += makeTextMarker(id);\n      const marker = markers[id];\n      const end = addUpUntilIndex(sizes, marker);\n      const size = sizes[marker];\n      for (let i = end - size; i < end; i += 1) {\n        const rule = cssRules[i];\n        if (rule !== undefined) {\n          str += rule.cssText;\n        }\n      }\n    }\n\n    return str;\n  };\n\n  return {\n    clone() {\n      throw new StyledError(5);\n    },\n    css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker,\n    insertRules,\n    removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names),\n  };\n};\n\nconst makeTextNode = id => document.createTextNode(makeTextMarker(id));\n\nconst makeBrowserTag = (el: HTMLStyleElement, getImportRuleTag: ?() => Tag<any>): Tag<Text> => {\n  const names = (Object.create(null): Object);\n  const markers = Object.create(null);\n\n  const extractImport = getImportRuleTag !== undefined;\n\n  /* indicates whether getImportRuleTag was called */\n  let usedImportRuleTag = false;\n\n  const insertMarker = id => {\n    const prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = makeTextNode(id);\n    el.appendChild(markers[id]);\n    names[id] = Object.create(null);\n\n    return markers[id];\n  };\n\n  const insertRules = (id, cssRules, name) => {\n    const marker = insertMarker(id);\n    const importRules = [];\n    const cssRulesSize = cssRules.length;\n\n    for (let i = 0; i < cssRulesSize; i += 1) {\n      const rule = cssRules[i];\n      let mayHaveImport = extractImport;\n      if (mayHaveImport && rule.indexOf('@import') !== -1) {\n        importRules.push(rule);\n      } else {\n        mayHaveImport = false;\n        const separator = i === cssRulesSize - 1 ? '' : ' ';\n        marker.appendData(`${rule}${separator}`);\n      }\n    }\n\n    addNameForId(names, id, name);\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(`${id}-import`, importRules);\n    }\n  };\n\n  const removeRules = id => {\n    const marker = markers[id];\n    if (marker === undefined) return;\n\n    /* create new empty text node and replace the current one */\n    const newMarker = makeTextNode(id);\n    el.replaceChild(newMarker, marker);\n    markers[id] = newMarker;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(`${id}-import`);\n    }\n  };\n\n  const css = () => {\n    let str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (const id in markers) {\n      str += markers[id].data;\n    }\n\n    return str;\n  };\n\n  return {\n    clone() {\n      throw new StyledError(5);\n    },\n    css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker,\n    insertRules,\n    removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names),\n  };\n};\n\nconst makeServerTag = (namesArg, markersArg): Tag<[string]> => {\n  const names = namesArg === undefined ? (Object.create(null): Object) : namesArg;\n  const markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n  const insertMarker = id => {\n    const prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    return (markers[id] = ['']);\n  };\n\n  const insertRules = (id, cssRules, name) => {\n    const marker = insertMarker(id);\n    marker[0] += cssRules.join(' ');\n    addNameForId(names, id, name);\n  };\n\n  const removeRules = id => {\n    const marker = markers[id];\n    if (marker === undefined) return;\n    marker[0] = '';\n    resetIdNames(names, id);\n  };\n\n  const css = () => {\n    let str = '';\n    // eslint-disable-next-line guard-for-in\n    for (const id in markers) {\n      const cssForId = markers[id][0];\n      if (cssForId) {\n        str += makeTextMarker(id) + cssForId;\n      }\n    }\n    return str;\n  };\n\n  const clone = () => {\n    const namesClone = cloneNames(names);\n    const markersClone = Object.create(null);\n\n    // eslint-disable-next-line guard-for-in\n    for (const id in markers) {\n      markersClone[id] = [markers[id][0]];\n    }\n\n    return makeServerTag(namesClone, markersClone);\n  };\n\n  const tag = {\n    clone,\n    css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker,\n    insertRules,\n    removeRules,\n    sealed: false,\n    styleTag: null,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names),\n  };\n\n  return tag;\n};\n\nexport const makeTag = (\n  target: ?HTMLElement,\n  tagEl: ?HTMLStyleElement,\n  forceServer?: boolean,\n  insertBefore?: boolean,\n  getImportRuleTag?: () => Tag<any>\n): Tag<any> => {\n  if (IS_BROWSER && !forceServer) {\n    const el = makeStyleTag(target, tagEl, insertBefore);\n\n    if (DISABLE_SPEEDY) {\n      return makeBrowserTag(el, getImportRuleTag);\n    } else {\n      return makeSpeedyTag(el, getImportRuleTag);\n    }\n  }\n\n  return makeServerTag();\n};\n\nexport const rehydrate = (\n  tag: Tag<any>,\n  els: HTMLStyleElement[],\n  extracted: ExtractedComp[]\n): void => {\n  /* add all extracted components to the new tag */\n  for (let i = 0, len = extracted.length; i < len; i += 1) {\n    const { componentId, cssFromDOM } = extracted[i];\n    const cssRules = splitByRules(cssFromDOM);\n    tag.insertRules(componentId, cssRules);\n  }\n\n  /* remove old HTMLStyleElements, since they have been rehydrated */\n  for (let i = 0, len = els.length; i < len; i += 1) {\n    const el = els[i];\n    if (el.parentNode) {\n      el.parentNode.removeChild(el);\n    }\n  }\n};\n","// @flow\nimport React, { createContext, Component, type Element } from 'react';\nimport memoize from 'memoize-one';\nimport StyledError from '../utils/error';\nimport isFunction from '../utils/isFunction';\n\nexport type Theme = { [key: string]: mixed };\n\ntype Props = {\n  children?: Element<any>,\n  theme: Theme | ((outerTheme: Theme) => void),\n};\n\nexport const ThemeContext = createContext();\n\nexport const ThemeConsumer = ThemeContext.Consumer;\n\n/**\n * Provide a theme to an entire react component tree via context\n */\nexport default class ThemeProvider extends Component<Props> {\n  getContext: (theme: Theme | ((outerTheme: Theme) => void), outerTheme?: Theme) => Theme;\n\n  renderInner: Function;\n\n  constructor(props: Props) {\n    super(props);\n    this.getContext = memoize(this.getContext.bind(this));\n    this.renderInner = this.renderInner.bind(this);\n  }\n\n  render() {\n    if (!this.props.children) return null;\n\n    return <ThemeContext.Consumer>{this.renderInner}</ThemeContext.Consumer>;\n  }\n\n  renderInner(outerTheme?: Theme) {\n    const context = this.getContext(this.props.theme, outerTheme);\n\n    return (\n      <ThemeContext.Provider value={context}>\n        {React.Children.only(this.props.children)}\n      </ThemeContext.Provider>\n    );\n  }\n\n  /**\n   * Get the theme from the props, supporting both (outerTheme) => {}\n   * as well as object notation\n   */\n  getTheme(theme: (outerTheme: ?Theme) => void, outerTheme: ?Theme) {\n    if (isFunction(theme)) {\n      const mergedTheme = theme(outerTheme);\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        (mergedTheme === null || Array.isArray(mergedTheme) || typeof mergedTheme !== 'object')\n      ) {\n        throw new StyledError(7);\n      }\n\n      return mergedTheme;\n    }\n\n    if (theme === null || Array.isArray(theme) || typeof theme !== 'object') {\n      throw new StyledError(8);\n    }\n\n    return { ...outerTheme, ...theme };\n  }\n\n  getContext(theme: (outerTheme: ?Theme) => void, outerTheme?: Theme) {\n    return this.getTheme(theme, outerTheme);\n  }\n}\n","// @flow\nimport React, { createContext, Component, type Element } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoize-one';\nimport StyleSheet from './StyleSheet';\nimport ServerStyleSheet from './ServerStyleSheet';\nimport StyledError from '../utils/error';\n\ntype Props = {\n  children?: Element<any>,\n  sheet?: StyleSheet,\n  target?: HTMLElement,\n};\n\nexport const StyleSheetContext = createContext();\nexport const StyleSheetConsumer = StyleSheetContext.Consumer;\n\nexport default class StyleSheetManager extends Component<Props> {\n  static propTypes = {\n    sheet: PropTypes.oneOfType([\n      PropTypes.instanceOf(StyleSheet),\n      PropTypes.instanceOf(ServerStyleSheet),\n    ]),\n\n    target: PropTypes.shape({\n      appendChild: PropTypes.func.isRequired,\n    }),\n  };\n\n  getContext: (sheet: ?StyleSheet, target: ?HTMLElement) => StyleSheet;\n\n  constructor(props: Props) {\n    super(props);\n    this.getContext = memoize(this.getContext);\n  }\n\n  getContext(sheet: ?StyleSheet, target: ?HTMLElement) {\n    if (sheet) {\n      return sheet;\n    } else if (target) {\n      return new StyleSheet(target);\n    } else {\n      throw new StyledError(4);\n    }\n  }\n\n  render() {\n    const { children, sheet, target } = this.props;\n\n    return (\n      <StyleSheetContext.Provider value={this.getContext(sheet, target)}>\n        {process.env.NODE_ENV !== 'production' ? React.Children.only(children) : children}\n      </StyleSheetContext.Provider>\n    );\n  }\n}\n","// @flow\nimport { EMPTY_ARRAY } from '../utils/empties';\nimport flatten from '../utils/flatten';\nimport isStaticRules from '../utils/isStaticRules';\nimport stringifyRules from '../utils/stringifyRules';\nimport StyleSheet from './StyleSheet';\n\nimport type { RuleSet } from '../types';\n\nexport default class GlobalStyle {\n  componentId: string;\n\n  isStatic: boolean;\n\n  rules: RuleSet;\n\n  constructor(rules: RuleSet, componentId: string) {\n    this.rules = rules;\n    this.componentId = componentId;\n    this.isStatic = isStaticRules(rules, EMPTY_ARRAY);\n\n    if (!StyleSheet.master.hasId(componentId)) {\n      StyleSheet.master.deferredInject(componentId, []);\n    }\n  }\n\n  createStyles(executionContext: Object, styleSheet: StyleSheet) {\n    const flatCSS = flatten(this.rules, executionContext, styleSheet);\n    const css = stringifyRules(flatCSS, '');\n\n    styleSheet.inject(this.componentId, css);\n  }\n\n  removeStyles(styleSheet: StyleSheet) {\n    const { componentId } = this;\n    if (styleSheet.hasId(componentId)) {\n      styleSheet.remove(componentId);\n    }\n  }\n\n  // TODO: overwrite in-place instead of remove+create?\n  renderStyles(executionContext: Object, styleSheet: StyleSheet) {\n    this.removeStyles(styleSheet);\n    this.createStyles(executionContext, styleSheet);\n  }\n}\n","import {getEnv} from '../constants';\nimport { safeLocalStorage } from './safeStorage';\n\ninterface IApiResponse {\n  payload: {\n    [key: string]: any; // Allows any dynamic key in payload (e.g., msquoteconnect, other keys)\n  };\n}\n\nclass ApiClient {\n  public token;\n  public baseURL;\n  public tokenKey;\n  public appId;\n\n  constructor(baseURL: string, appId: string = '') {\n    this.token = safeLocalStorage.getItem('ats-authentication-token');\n    this.baseURL = baseURL;\n    this.tokenKey = getEnv().TOKEN_KEY || 'X-ATS-Token';\n    this.appId = appId;\n  }\n\n  public getHeader() {\n    const headers = {\n      'Content-Type': 'application/json'\n    };\n    if (this.tokenKey) {\n      headers[this.tokenKey] = this.token;\n    }\n    if (this.appId) {\n      headers['x-ats-app-id'] = this.appId;\n    }\n    return headers;\n  }\n\n  public async fetchData(endpoint: string) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'GET',\n        headers: this.getHeader(),\n      });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      return await response.json();\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error post:', error);\n    }\n  }\n\n  public async fetchDataWithSuccess(endpoint: string) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'GET',\n        headers: this.getHeader(),\n      });\n      if (response.ok) {\n        return {\n          success: true,\n          status: response.status,\n          data: await response.json(),\n          error: null\n        };\n      } else {\n        return {\n          success: false,\n          status: response.status,\n          data: response,\n          error: null\n        };\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error get:', error);\n      return {\n        success: false,\n        status: 0, // Network or unexpected error\n        data: null,\n        error: error instanceof Error ? error.message : 'An unknown error occurred',\n      };\n    }\n  }\n\n  public async fetchAllDataWithCount(endpoint: string) {\n    const result = {\n      success: true,\n      count: 0,\n      payload: {}\n    };\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'GET',\n        headers: this.getHeader(),\n        cache: 'no-store'\n      });\n      if (!response.ok) {\n        result.success = false;\n      }\n      result.count = Number(response.headers.get('x-ats-count'));\n      const apiData: IApiResponse = await response.json();\n      result.payload = apiData?.payload;\n    } catch (error) {\n      result.success = false;\n    }\n    return result;\n  }\n\n  public async post(endpoint: string, data: any, signal?: AbortSignal) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'POST',\n        headers: this.getHeader(),\n        body: JSON.stringify(data),\n        signal\n      });\n      if (response.ok) {\n        return {\n          success: true,\n          status: response.status,\n          data: await response.json(),\n          error: null\n        };\n      } else {\n        return {\n          success: false,\n          status: response.status,\n          data: response,\n          error: null\n        };\n      }\n\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error post:', error);\n      return {\n        success: false,\n        status: 0, // Network or unexpected error\n        data: null,\n        error: error instanceof Error ? error.message : 'An unknown error occurred',\n      };\n    }\n  }\n\n  public async update(endpoint: string, id: number, data: any) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}/${id}`, {\n        method: 'PATCH',\n        headers: this.getHeader(),\n        body: JSON.stringify(data)\n      });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      return await response.json();\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error post:', error);\n    }\n  }\n\n  public async put(endpoint: string, data: any) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'PUT',\n        headers: this.getHeader(),\n        body: JSON.stringify(data)\n      });\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n      return await response.json();\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error post:', error);\n    }\n  }\n\n  public async delete(endpoint: string) {\n    try {\n      const response = await fetch(`${this.baseURL}${endpoint}`, {\n        method: 'DELETE',\n        headers: this.getHeader(),\n      });\n      return await response.json();\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('API Error delete:', error);\n    }\n  }\n}\n\n\nexport default ApiClient;","import * as React from 'react';\nimport {\n  Theme,\n  Grid,\n  Typography,\n  Tabs,\n  Tab,\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/styles';\nimport {\n  compose,\n} from 'redux';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../FieldSwitch';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport { CURRENCY, Currency } from '../../constants';\n\ninterface IPriceExpansionPanelComponentProps {\n  regionTitle?: string;\n  disabled?: boolean;\n  initialCurrency?: Currency;\n  regionId: string | number;\n  defaultExpanded: boolean;\n  selectedCurrency?: Currency;\n}\n\ninterface IPriceExpansionPanelProps {\n}\n\ninterface ITabPanelProps {\n  children: React.ReactNode;\n  tabValue: Currency;\n}\n\ntype PriceExpansionPanelProps =\n  IPriceExpansionPanelComponentProps &\n  IPriceExpansionPanelProps &\n  ITabPanelProps &\n  WithTranslation &\n  WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  body: {\n    padding: theme.spacing(0, 2)\n  },\n  half: {\n    minWidth: '50%'\n  },\n  panelDetails: {\n    flexDirection: 'column',\n    padding: theme.spacing(0),\n  },\n  summary: {\n    padding: 0\n  },\n  isPoaContainer: {\n    margin: theme.spacing(2, 0, 1, 1),\n  }\n});\n\nconst PriceExpansionPanel: React.FC<PriceExpansionPanelProps> = props => {\n  const {\n    classes,\n    regionTitle,\n    disabled = false,\n    regionId,\n    defaultExpanded = false,\n    initialCurrency,\n    t\n  } = props;\n\n  const [value, setValue] = React.useState(initialCurrency ?? CURRENCY.USD);\n\n  const handleSetTabs = (_: React.ChangeEvent<{}>, newValue: Currency) => {\n    setValue(newValue);\n  };\n\n  const TabPanel = ({ children, tabValue, ...other }: ITabPanelProps) => {\n    return (\n      <Grid\n        hidden={tabValue !== value}\n        {...other}\n      >\n        {children}\n      </Grid>\n    );\n  };\n\n  return (\n    <ExpansionPanel\n      defaultExpanded={defaultExpanded}\n      className={classes.body}\n    >\n      <ExpansionPanelSummary\n        expandIcon={<ExpandMoreIcon />}\n        aria-controls='product-price'\n        id='price-header'\n        className={classes.summary}\n      >\n        <Typography>{regionTitle}</Typography>\n      </ExpansionPanelSummary>\n      <ExpansionPanelDetails className={classes.panelDetails}>\n        <Tabs\n          value={value}\n          onChange={handleSetTabs}\n          aria-label={t('productDrawer.tabAriaLabel') as string}\n          indicatorColor='primary'\n          textColor='primary'\n        >\n          <Tab value={CURRENCY.USD} label={t('productDrawer.usd')} className={classes.half} />\n          <Tab value={CURRENCY.CAD} label={t('productDrawer.cad')} className={classes.half} />\n        </Tabs>\n        {\n          [CURRENCY.USD, CURRENCY.CAD].map((currency: Currency) => (\n            <TabPanel key={currency} tabValue={currency}>\n              <div className={classes.isPoaContainer}>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={`price.${regionId}.${currency}.isPoa`}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.priceIsPOA'),\n                    inputProps: {\n                      color: 'primary',\n                      size: 'small',\n                      disabled\n                    }\n                  }}\n                />\n              </div>\n              {\n                ['list', 'sell', 'cost'].map((priceType: string) => (\n                  <DrawerTextFieldRow\n                    key={priceType}\n                    name={`price.${regionId}.${currency}.${priceType}`}\n                    props={{\n                      label: t(`productDrawer.${priceType}`),\n                      inputProps: {\n                        disabled\n                      }\n                    }}\n                    type='number'\n                    removeIconSpace={true}\n                  />\n                ))\n              }\n            </TabPanel>\n          ))\n        }\n      </ExpansionPanelDetails>\n    </ExpansionPanel>\n  );\n};\n\nexport default compose<React.FunctionComponent<IPriceExpansionPanelComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(React.memo(PriceExpansionPanel));\n","import { Box, createStyles, ExpansionPanel, ExpansionPanelSummary, Grid, IconButton, InputLabel, LinearProgress, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { SeriesProductFile } from '../../models';\nimport useFileUpload, { ERROR_TYPE } from '../../hooks/useFileUpload';\nimport { IProductFile } from '../../models/File';\nimport { PRODUCT_DRAWER_EDIT_FORM } from './index';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { IMediaFiles } from '../../models/SeriesProductFile';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  body: {\n    padding: theme.spacing(0, 1),\n    marginBottom: '8px !important',\n    width: '100%'\n  },\n  summary: {\n    padding: 0\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  icon: {\n    marginRight: theme.spacing(1),\n    width: 14,\n    height: 14\n  },\n  fileName: {\n    cursor: 'pointer',\n    color: theme.palette.primary[700],\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  },\n  deleteMessageContainer: {\n    backgroundColor: theme.palette.secondary[50],\n    padding: theme.spacing(.5),\n    marginTop: theme.spacing()\n  },\n  checkIcon: {\n    margin: theme.spacing(.5, .5, .5, .25),\n    width: 14,\n    height: 14\n  }\n}));\n\ninterface ISpecSheetUploadComponentProps {\n  mediaKey: string;\n  tooltip: string;\n  accept: string;\n  linkedProductMedia: IMap<IMediaFiles>;\n  label: string;\n  placeholder: string;\n  disabledRemoveTooltip: string;\n  atsMediaTooltip: string;\n  mediaDeleteMessage: string;\n  localeRegion: string;\n}\n\ninterface ISpecSheetUploadProps extends ISpecSheetUploadComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\n\nconst SpecSheetUpload: React.FC<ISpecSheetUploadProps & WithTranslation> = ({\n  mediaKey,\n  accept,\n  tooltip,\n  formValues,\n  linkedProductMedia,\n  label,\n  placeholder,\n  disabledRemoveTooltip,\n  atsMediaTooltip,\n  mediaDeleteMessage,\n  localeRegion,\n  dispatch,\n  t,\n}) => {\n\n  const [displayMediaDeleteMessage, setDisplayMediaDeleteMessage] = React.useState(false);\n\n  const classes = useStyles();\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n  const fileName = formFile.getIn(['media', localeRegion, mediaKey, 'filename']);\n  const isOverride = formFile.getIn(['media', localeRegion, mediaKey, 'isOverride']);\n  const fileId = formFile.getIn(['media', localeRegion, mediaKey, 'fileId']);\n\n  const linkedProductMediaKeyFileId = linkedProductMedia.getIn([localeRegion, mediaKey, 'fileId']);\n  const hasValidFile = (fileId && isOverride) || linkedProductMediaKeyFileId;\n  const isAtsMedia = linkedProductMediaKeyFileId && formFile.getIn(['media', localeRegion, mediaKey, 'fileId']) === linkedProductMediaKeyFileId;\n  const disabledTooltip = isAtsMedia ? disabledRemoveTooltip : '';\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setUploadErr,\n    setFile\n  } = useFileUpload(['PDF']);\n\n  const usePrevious = <T extends unknown>(value: T): T | undefined => {\n    const ref = React.useRef<T>();\n    React.useEffect(() => {\n      ref.current = value;\n    });\n    return ref.current;\n  };\n  const prevIsOverride = usePrevious(isOverride);\n  const prevLocaleRegion = usePrevious(localeRegion);\n\n  React.useEffect(() => {\n    if (prevIsOverride && !isOverride && prevLocaleRegion === localeRegion) {\n      setDisplayMediaDeleteMessage(true);\n    } else {\n      setDisplayMediaDeleteMessage(false);\n    }\n  }, [isOverride, localeRegion]);\n\n  React.useEffect(() => {\n    if (linkedProductMedia.get(localeRegion)?.size) {\n      setUploadErr(null);\n    }\n  }, [linkedProductMedia.get(localeRegion)]);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n      ctx.updateIn(['media', localeRegion, mediaKey], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n          isOverride: true\n        }));\n      });\n    });\n    dispatch(change(PRODUCT_DRAWER_EDIT_FORM, 'file', transformedFile));\n  }, [uploadedFile]);\n\n  return (\n    <ExpansionPanel\n      defaultExpanded={true}\n      className={classes.body}\n    >\n      <ExpansionPanelSummary\n        expandIcon={<ExpandMoreIcon />}\n        aria-controls='product-media'\n        id='media-header'\n        className={classes.summary}\n      >\n        <Typography variant='body2'>{label}</Typography>\n      </ExpansionPanelSummary>\n      <Grid\n        container={true}\n        alignItems='center'\n        justify='space-between'\n      >\n        <Grid\n          item={true}\n          xs={12}\n          wrap='nowrap'\n          alignItems='center'\n          container={true}\n        >\n          {\n            isUploading\n              ? (\n                  <Box width='100%'>\n                    <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='secondary' style={{ flexGrow: 1 }} />\n                    <Typography>{loadingPercentage}%</Typography>\n                  </Box>\n                )\n              : uploadErr\n                  ? (\n                      <>\n                        <WarningRoundedIcon color='error' fontSize='small' className={classes.icon} />\n                        <Typography color='error' variant='body2'>\n                          {\n                            uploadErr === ERROR_TYPE.size\n                              ? t('productDrawer.overLimitMessage')\n                              : uploadErr === ERROR_TYPE.type\n                                ? t('shopDrawingPrint.notPDF')\n                                : t('productDrawer.notUploaded')\n                          }\n                        </Typography>\n                      </>\n                    )\n                  : hasValidFile\n                      ? <>\n                          { isAtsMedia && (\n                              <Tooltip title={atsMediaTooltip}>\n                                <ThumbUpIcon color='primary' className={classes.icon} />\n                              </Tooltip>\n                            )\n                          }\n                          <Tooltip title={fileName}>\n                            <label htmlFor={mediaKey} style={{ overflow: 'hidden' }}>\n                              <Typography className={classes.fileName}>\n                                { fileName }\n                              </Typography>\n                            </label>\n                          </Tooltip>\n                        </>\n                      // : <Typography variant='body1'>{placeholder}</Typography>\n                      : null\n          }\n        </Grid>\n        {\n          displayMediaDeleteMessage && (\n            <Grid container={true} wrap='nowrap' className={classes.deleteMessageContainer}>\n              <CheckCircleIcon color='secondary' className={classes.checkIcon} />\n              <Typography color='secondary' variant='body2'>\n                {mediaDeleteMessage}\n              </Typography>\n            </Grid>\n          )\n        }\n        <Grid\n          item={true}\n          xs={12}\n          container={true}\n          alignContent='center'\n          justify='flex-end'\n        >\n          <input\n            className={classes.hiddenInput}\n            type='file'\n            name='file'\n            onChange={(e) => {\n              setFile(e.target.files[0]);\n              e.target.value = null;\n            }}\n            accept={accept}\n            id={mediaKey}\n          />\n          <Grid\n            container={true}\n            justify='flex-end'\n          >\n            <Tooltip title={disabledTooltip}>\n              <span>\n                <IconButton\n                  disabled={!isOverride}\n                  onClick={() => {\n                    if (linkedProductMediaKeyFileId) {\n                      const fileType = linkedProductMedia.getIn([localeRegion, mediaKey]);\n                      const formURL = formFile.getIn(['media', localeRegion, mediaKey, 'url']);\n                      const mutatedFileType = formURL ? fileType.set('url', formURL) : fileType;\n                      const newFiles = formFile\n                        .setIn(['media', localeRegion, mediaKey], mutatedFileType);\n                      dispatch(change(PRODUCT_DRAWER_EDIT_FORM, `file`, newFiles));\n                    } else {\n                      dispatch(change(PRODUCT_DRAWER_EDIT_FORM, `file`, formFile.deleteIn(['media', localeRegion, mediaKey])));\n                    }\n                  }}\n                >\n                  <DeleteIcon />\n                </IconButton>\n              </span>\n            </Tooltip>\n            <label htmlFor={mediaKey}>\n              <Tooltip title={tooltip}>\n                <span>\n                  <IconButton\n                    disabled={isUploading}\n                    component='span'\n                  >\n                    <CloudUploadIcon />\n                  </IconButton>\n                </span>\n              </Tooltip>\n            </label>\n          </Grid>\n        </Grid>\n      </Grid>\n    </ExpansionPanel>\n  );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(PRODUCT_DRAWER_EDIT_FORM),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<ISpecSheetUploadComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(SpecSheetUpload);","import { Box, Button, createStyles, Dialog, DialogContent, DialogActions, FormControl, Grid, IconButton, InputLabel, LinearProgress, makeStyles, TextField, Theme, Tooltip, Typography, ExpansionPanel, ExpansionPanelSummary } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { SeriesProductFile } from '../../models';\nimport useFileUpload, { ERROR_TYPE } from '../../hooks/useFileUpload';\nimport { IProductFile } from '../../models/File';\nimport { PRODUCT_DRAWER_EDIT_FORM } from './index';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { IMediaFiles } from '../../models/SeriesProductFile';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport HttpIcon from '@material-ui/icons/Http';\nimport { isURL } from '../../pages/SeriesEditPage/Attachments/EditLink';\nimport { truncate } from 'lodash';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  body: {\n    padding: theme.spacing(0, 1),\n    marginBottom: '8px !important',\n    width: '100%'\n  },\n  summary: {\n    padding: 0\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  icon: {\n    marginRight: theme.spacing(1),\n    width: 14,\n    height: 14\n  },\n  fileName: {\n    cursor: 'pointer',\n    color: theme.palette.primary[700],\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  },\n  deleteMessageContainer: {\n    backgroundColor: theme.palette.secondary[50],\n    padding: theme.spacing(.5),\n    marginTop: theme.spacing()\n  },\n  checkIcon: {\n    margin: theme.spacing(.5, .5, .5, .25),\n    width: 14,\n    height: 14\n  },\n  url: {\n    cursor: 'pointer',\n    color: theme.palette.primary[700],\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  },\n  input: {\n    padding: theme.spacing(0.5, 1.75),\n    fontSize: theme.typography.body1.fontSize\n  },\n  noMargin: {\n    marginLeft: 0,\n    marginRight: 0,\n  },\n  linkDialog: {\n    width: 325\n  }\n}));\n\ninterface IMediaRowComponentProps {\n  mediaKey: string;\n  uploadTooltip: string;\n  openLinkTooltip: string;\n  accept: string;\n  linkedProductMedia: IMap<IMediaFiles>;\n  label: string;\n  placeholder: string;\n  disabledRemoveTooltip: string;\n  atsMediaTooltip: string;\n  mediaDeleteMessage: string;\n  linkLabel: string;\n  linkPlaceholder: string;\n  localeRegion: string;\n}\n\ninterface IMediaRowProps extends IMediaRowComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\n\nconst MediaRow: React.FC<IMediaRowProps & WithTranslation> = ({\n  mediaKey,\n  accept,\n  uploadTooltip,\n  openLinkTooltip,\n  formValues,\n  linkedProductMedia,\n  label,\n  placeholder,\n  disabledRemoveTooltip,\n  atsMediaTooltip,\n  mediaDeleteMessage,\n  linkLabel,\n  linkPlaceholder,\n  localeRegion,\n  dispatch,\n  t,\n}) => {\n  const classes = useStyles();\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n  const isOverride = formFile.getIn(['media', localeRegion, mediaKey, 'isOverride']);\n  const fileName = formFile.getIn(['media', localeRegion, mediaKey, 'filename']);\n  const fileId = formFile.getIn(['media', localeRegion, mediaKey, 'fileId']);\n  const formURL = formFile.getIn(['media', localeRegion, mediaKey, 'url']) || '';\n\n  const linkedProductMediaKeyFileId = linkedProductMedia.getIn([localeRegion, mediaKey, 'fileId']);\n  const linkedProductMediaKeyUrl = linkedProductMedia.getIn([localeRegion, mediaKey, 'url']);\n\n  const isAtsMedia = !isOverride &&\n    (\n      (linkedProductMediaKeyFileId && fileId === linkedProductMediaKeyFileId)\n      || (linkedProductMediaKeyUrl && formURL === linkedProductMediaKeyUrl)\n    );\n  const disabledTooltip = isAtsMedia ? disabledRemoveTooltip : '';\n\n  const [isAttached, setIsAttached] = React.useState(Boolean(formURL));\n  const [open, setOpen] = React.useState(false);\n  const [url, setURL] = React.useState('');\n  const [errorText, setErrorText] = React.useState('');\n  const [displayMediaDeleteMessage, setDisplayMediaDeleteMessage] = React.useState(false);\n\n\n  // this also updates the url field when linking url from ATS library not just from typing in input\n  React.useEffect(() => {\n    setIsAttached(Boolean(formURL));\n  }, [formURL]);\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setUploadErr,\n    setFile\n  } = useFileUpload(['PDF']);\n\n  const usePrevious = <T extends unknown>(value: T): T | undefined => {\n    const ref = React.useRef<T>();\n    React.useEffect(() => {\n      ref.current = value;\n    });\n    return ref.current;\n  };\n  const prevIsOverride = usePrevious(isOverride);\n  const prevLocaleRegion = usePrevious(localeRegion);\n\n  React.useEffect(() => {\n    if (prevIsOverride && !isOverride && prevLocaleRegion === localeRegion) {\n      setDisplayMediaDeleteMessage(true);\n    } else {\n      setDisplayMediaDeleteMessage(false);\n    }\n  }, [isOverride, localeRegion]);\n\n  React.useEffect(() => {\n    if (linkedProductMedia.get(localeRegion)?.size) {\n      setUploadErr(null);\n    }\n  }, [linkedProductMedia.get(localeRegion)]);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n      ctx.updateIn(['media', localeRegion, mediaKey], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n          isOverride: true\n        }));\n      });\n    });\n    dispatch(change(PRODUCT_DRAWER_EDIT_FORM, 'file', transformedFile));\n    setURL('');\n  }, [uploadedFile]);\n\n  const handleOpen = () => {\n    setOpen(true);\n  };\n\n  const handleClose = () => {\n    setOpen(false);\n    setErrorText('');\n    if (formURL && url) {\n      setURL('');\n    }\n  };\n\n  return (\n    <ExpansionPanel\n      defaultExpanded={true}\n      className={classes.body}\n    >\n      <ExpansionPanelSummary\n        expandIcon={<ExpandMoreIcon />}\n        aria-controls='product-media'\n        id='media-header'\n        className={classes.summary}\n      >\n        <Typography variant='body2'>{label}</Typography>\n      </ExpansionPanelSummary>\n      <Grid\n        container={true}\n        alignItems='center'\n        justify='space-between'\n      >\n        <Grid\n          item={true}\n          xs={12}\n          wrap='nowrap'\n          alignItems='center'\n          container={true}\n        >\n          {\n            isUploading\n              ? (\n                  <Box width='100%'>\n                    <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='secondary' style={{ flexGrow: 1 }} />\n                    <Typography>{loadingPercentage}%</Typography>\n                  </Box>\n                )\n              : uploadErr\n                  ? (\n                      <>\n                        <WarningRoundedIcon color='error' fontSize='small' className={classes.icon} />\n                        <Typography color='error' variant='body2'>\n                          {\n                            uploadErr === ERROR_TYPE.size\n                              ? t('productDrawer.overLimitMessage')\n                              : uploadErr === ERROR_TYPE.type\n                                ? t('shopDrawingPrint.notPDF')\n                                : t('productDrawer.notUploaded')\n                          }\n                        </Typography>\n                      </>\n                    )\n                  : fileName\n                      ? <>\n                          { isAtsMedia && (\n                              <Tooltip title={atsMediaTooltip}>\n                                <ThumbUpIcon color='primary' className={classes.icon} />\n                              </Tooltip>\n                            )\n                          }\n                          <Tooltip title={fileName || ''}>\n                            <label htmlFor={mediaKey} style={{ overflow: 'hidden' }}>\n                              <Typography className={classes.fileName}>\n                                { fileName }\n                              </Typography>\n                            </label>\n                          </Tooltip>\n                        </>\n                      : isAttached\n                          ? <>\n                              { isAtsMedia && (\n                                  <Tooltip title={atsMediaTooltip}>\n                                    <ThumbUpIcon color='primary' className={classes.icon} />\n                                  </Tooltip>\n                                )\n                              }\n                              <Tooltip title={formURL || ''}>\n                                <Typography className={classes.url}>\n                                  { formURL }\n                                </Typography>\n                              </Tooltip>\n                            </>\n                          : null\n          }\n        </Grid>\n        {\n          displayMediaDeleteMessage && (\n            <Grid container={true} wrap='nowrap' className={classes.deleteMessageContainer}>\n              <CheckCircleIcon color='secondary' className={classes.checkIcon} />\n              <Typography color='secondary' variant='body2'>\n                {mediaDeleteMessage}\n              </Typography>\n            </Grid>\n          )\n        }\n        <Grid\n          item={true}\n          xs={12}\n          container={true}\n          alignContent='center'\n          justify='flex-end'\n        >\n          <input\n            className={classes.hiddenInput}\n            type='file'\n            name='file'\n            onChange={(e) => {\n              setFile(e.target.files[0]);\n              e.target.value = null;\n            }}\n            accept={accept}\n            id={mediaKey}\n          />\n          <Grid\n            container={true}\n            justify='flex-end'\n          >\n            <Tooltip title={disabledTooltip}>\n              <span>\n                <IconButton\n                  disabled={!isOverride}\n                  onClick={() => {\n                    if (linkedProductMediaKeyFileId || linkedProductMediaKeyUrl) {\n                      const fileType = linkedProductMedia.getIn([localeRegion, mediaKey]);\n                      const newFiles = formFile\n                        .setIn(['media', localeRegion, mediaKey], fileType);\n                      dispatch(change(PRODUCT_DRAWER_EDIT_FORM, `file`, newFiles));\n                    } else {\n                      dispatch(change(PRODUCT_DRAWER_EDIT_FORM, `file`, formFile.deleteIn(['media', localeRegion, mediaKey])));\n                    }\n\n                    if (!linkedProductMediaKeyUrl) {\n                      setIsAttached(false);\n                    }\n                  }}\n                >\n                  <DeleteIcon />\n                </IconButton>\n              </span>\n            </Tooltip>\n            <label htmlFor={mediaKey}>\n              <Tooltip title={uploadTooltip}>\n                <span>\n                  <IconButton\n                    disabled={isUploading}\n                    component='span'\n                  >\n                    <CloudUploadIcon />\n                  </IconButton>\n                </span>\n              </Tooltip>\n            </label>\n            <Tooltip title={openLinkTooltip}>\n              <span>\n                <IconButton\n                  // disabled={isUploading}\n                  component='span'\n                  onClick={handleOpen}\n                >\n                  <HttpIcon />\n                </IconButton>\n              </span>\n            </Tooltip>\n          </Grid>\n        </Grid>\n\n        <Dialog open={open} onClose={handleClose} aria-labelledby='form-dialog-title'>\n          <DialogContent className={classes.linkDialog}>\n          <FormControl\n            fullWidth={true}\n          >\n            <TextField\n              type='text'\n              label={linkLabel}\n              placeholder={linkPlaceholder}\n              value={url}\n              onChange={(event) => setURL(event.target.value)}\n              InputProps={{\n                classes: {\n                  input: classes.input,\n                }\n              }}\n              FormHelperTextProps={{\n                margin: 'dense',\n                classes: {\n                  contained: classes.noMargin,\n                }\n              }}\n              error={Boolean(errorText)}\n              helperText={errorText}\n            />\n          </FormControl>\n          </DialogContent>\n          <DialogActions>\n            <Button onClick={handleClose} color='primary'>\n              {t('formButtons.cancel')}\n            </Button>\n            <Button\n              variant='text'\n              color='primary'\n              component='span'\n              // endIcon={<AttachFileIcon color='action' />}\n              onClick={() => {\n                if (url && isURL(url)) {\n                  const updated = (List.isList(formFile) ? Map() : formFile)\n                    .setIn(['media', localeRegion, mediaKey], Map({\n                      url,\n                      isOverride: truncate\n                    }));\n                  dispatch(change(PRODUCT_DRAWER_EDIT_FORM, 'file', updated));\n                  setIsAttached(true);\n                  handleClose();\n                } else {\n                  setErrorText(t('productDrawer.urlValidation'));\n                }\n              }}\n            >\n              {t('formButtons.attach')}\n            </Button>\n          </DialogActions>\n        </Dialog>\n      </Grid>\n    </ExpansionPanel>\n  );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(PRODUCT_DRAWER_EDIT_FORM),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<IMediaRowComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(MediaRow);","import { fromJS } from 'immutable';\nimport { Api } from 'ats-api/src';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { registerDirectApiEndpoint } from '../directApiEndpoint';\n\n// '/'-prefixed service: resolved against `${ENDPOINT_APIGATEWAY}/mspim` by the\n// direct-call machinery rather than requiring a dedicated ENDPOINT_MSPIM env entry\nexport const MSPIM_SERVICE = '/mspim';\nexport const DUPLICATE_CHECK_ENDPOINT = '/firm-products.duplicate-check';\n\nexport interface IDuplicateFirmProductSearchArgs {\n  productNumber?: string;\n  itemNumber?: string;\n  brandId?: string | number;\n  firmProductId?: string | number;\n}\n\n/**\n * Body for the mspim `/firm-products.duplicate-check` call, which reports an\n * existing firm product with the same (productNumber && brandId) or\n * (itemNumber && brandId), excluding `firmProductId` when given.\n * Returns null when there is nothing to check (no brandId, or neither number present).\n */\nexport const buildDuplicateFirmProductCheckBody = ({ productNumber, itemNumber, brandId, firmProductId }: IDuplicateFirmProductSearchArgs) => {\n  const trimmedProductNumber = typeof productNumber === 'string' ? productNumber.trim() : productNumber;\n  const trimmedItemNumber = typeof itemNumber === 'string' ? itemNumber.trim() : itemNumber;\n  if (!brandId || (!trimmedProductNumber && !trimmedItemNumber)) {\n    return null;\n  }\n  return {\n    brandId,\n    // blank numbers are omitted so the service can't match other products with blank numbers\n    ...trimmedProductNumber ? { productNumber: trimmedProductNumber } : {},\n    ...trimmedItemNumber ? { itemNumber: trimmedItemNumber } : {},\n    ...firmProductId ? { firmProductId } : {},\n  };\n};\n\n/**\n * The duplicate (`{ brand, productNumber, itemNumber }`) from a duplicate-check\n * response, or null. `isDuplicate` with an empty `duplicates` array counts as no\n * duplicate — there is nothing to show the user.\n */\nexport const getDuplicateFromResponse = (data: any): IMap<any> | null => {\n  const result = fromJS(data || {}).getIn(['payload', 'mspim']);\n  if (!result?.get('isDuplicate')) {\n    return null;\n  }\n  return result.getIn(['duplicates', 0]) || null;\n};\n\n/**\n * Resolves to the duplicate (`{ brand, productNumber, itemNumber }`), or null when\n * there is none (or nothing to check). Rejections (including AbortError) propagate\n * to the caller.\n */\nexport const searchDuplicateFirmProduct = async (\n  { atsApi, signal, ...args }: IDuplicateFirmProductSearchArgs & { atsApi: Api, signal?: AbortSignal }\n): Promise<IMap<any> | null> => {\n  const body = buildDuplicateFirmProductCheckBody(args);\n  if (!body) {\n    return null;\n  }\n  registerDirectApiEndpoint(atsApi, {\n    service: MSPIM_SERVICE,\n    endpoint: DUPLICATE_CHECK_ENDPOINT,\n    method: 'post',\n  });\n  const res = await (atsApi.callApi({\n    service: MSPIM_SERVICE,\n    endpoint: DUPLICATE_CHECK_ENDPOINT,\n    body,\n    signal,\n  }) as any);\n  return getDuplicateFromResponse(res);\n};\n","import * as React from 'react';\nimport {\n  Theme,\n  Button,\n  Dialog,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Typography,\n  makeStyles,\n} from '@material-ui/core';\nimport {\n  useTranslation,\n} from 'react-i18next';\n\ninterface IGetLinkConfirmationDialogContentComponentProps {\n  open: boolean;\n  onClose: () => void;\n  onConfirm: () => void;\n}\n\ninterface IGetLinkConfirmationDialogContentProps extends IGetLinkConfirmationDialogContentComponentProps {\n}\n\ntype IGetLinkConfirmationDialogContent = IGetLinkConfirmationDialogContentProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  confirmationButton: {\n    marginRight: theme.spacing(4)\n  },\n}));\n\nconst LinkConfirmationDialog = (LinkConfirmationDialogProps: IGetLinkConfirmationDialogContent) => {\n  const {\n    open,\n    onClose,\n    onConfirm,\n  } = LinkConfirmationDialogProps;\n\n  const {t} = useTranslation('translations');\n  const classes = useStyles();\n\n  return (\n    <Dialog\n      onClose={onClose}\n      aria-describedby='link_confirmation_dialog'\n      open={open}\n    >\n      <DialogContent>\n        <Typography variant='body2'>\n        { t('productDrawer.overrideConfimationTitle') }\n        </Typography>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={onClose}\n          color='primary'\n          className={classes.confirmationButton}\n        >\n          { t('formButtons.cancel') }\n        </Button>\n        <Button\n          onClick={onConfirm}\n          color='primary' autoFocus={true}\n          className={classes.confirmationButton}\n        >\n          { t('formButtons.yes') }\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nexport default LinkConfirmationDialog;","import * as React from 'react';\nimport {\n  Theme,\n  Button,\n  Dialog,\n  DialogContent,\n  DialogActions,\n  Typography,\n  makeStyles,\n  FormControlLabel,\n  Checkbox,\n} from '@material-ui/core';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { IInheritenceSetting } from '.';\n\ninterface IGetInheritenceSettingDialogContentComponentProps {\n  open: boolean;\n  inheritenceSetting: IInheritenceSetting;\n  onClose: () => void;\n  onSave: (newInheritenceSetting: IInheritenceSetting) => void;\n}\n\ninterface IGetInheritenceSettingDialogContentProps extends IGetInheritenceSettingDialogContentComponentProps {\n}\n\ntype IGetInheritenceSettingDialogContent = IGetInheritenceSettingDialogContentProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  deleteDialog: {\n    maxWidth: 375\n  },\n  confirmationButton: {\n    marginRight: theme.spacing(4),\n  },\n  textContainer: {\n    marginBottom: theme.spacing(2)\n  },\n  checkbox: {\n    width: '100%'\n  }\n}));\n\nconst InheritenceSettingDialog = (InheritenceSettingDialogProps: IGetInheritenceSettingDialogContent) => {\n  const {\n    open,\n    inheritenceSetting,\n    onClose,\n    onSave,\n  } = InheritenceSettingDialogProps;\n\n  const {t} = useTranslation('translations');\n  const classes = useStyles();\n  const [setting, setSetting] = React.useState<IInheritenceSetting>(inheritenceSetting);\n\n  React.useEffect(() => {\n    if (open) {\n      setSetting(inheritenceSetting);\n    }\n  }, [open]);\n\n  const settingList = [\n    { type: 'images', label: t('productInheritanceDialog.imageLabel'), checked: setting?.images },\n    { type: 'productNumber', label: t('productInheritanceDialog.productNumberLabel'), checked: setting?.productNumber },\n    { type: 'upc', label: t('productInheritanceDialog.upcLabel'), checked: setting?.upc },\n    { type: 'brand', label: t('productInheritanceDialog.manufacturerLabel'), checked: setting?.brand },\n    { type: 'category', label: t('productInheritanceDialog.categoryLabel'), checked: setting?.category },\n    { type: 'description', label: t('productInheritanceDialog.descriptionLabel'), checked: setting?.description },\n    { type: 'price', label: t('productInheritanceDialog.priceLabel'), checked: setting?.price },\n  ];\n\n  return (\n    <Dialog\n      onClose={onClose}\n      aria-describedby='inheritence_setting_dialog'\n      open={open}\n    >\n      <div className={classes.deleteDialog}>\n        <DialogContent>\n          <Typography variant='body2' color='textPrimary' className={classes.textContainer}>\n            { t('productInheritanceDialog.title') }\n          </Typography>\n          {\n            settingList.map((item) => (\n              <FormControlLabel\n                key={item.type}\n                control={\n                  <Checkbox\n                    color='primary'\n                  />\n                }\n                label={item.label}\n                className={classes.checkbox}\n                checked={item.checked}\n                onChange={(e, checked) => {\n                  const newSetting = {...setting};\n                  newSetting[item.type] = checked;\n                  setSetting(newSetting);\n                }}\n              />\n            ))\n          }\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={onClose}\n            color='primary'\n            className={classes.confirmationButton}\n          >\n            { t('formButtons.cancel') }\n          </Button>\n          <Button\n            onClick={() => onSave(setting)}\n            color='primary' autoFocus={true}\n            className={classes.confirmationButton}\n          >\n            { t('formButtons.save') }\n          </Button>\n        </DialogActions>\n      </div>\n    </Dialog>\n  );\n};\n\nexport default InheritenceSettingDialog;","import * as React from 'react';\nimport {\n    Theme,\n    Button,\n    Dialog,\n    DialogContent,\n    DialogActions,\n    Typography,\n    makeStyles,\n} from '@material-ui/core';\nimport {\n    useTranslation,\n} from 'react-i18next';\n\ninterface IGetUnlinkConfirmationDialogContentComponentProps {\n    open: boolean;\n    onClose: () => void;\n    onConfirm: () => void;\n}\n\ninterface IGetUnlinkConfirmationDialogContentProps extends IGetUnlinkConfirmationDialogContentComponentProps {\n}\n\ntype IGetUnlinkConfirmationDialogContent = IGetUnlinkConfirmationDialogContentProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    confirmationButton: {\n        marginRight: theme.spacing(4)\n    },\n}));\n\nconst UnlinkConfirmationDialog = (UnLinkConfirmationDialogProps: IGetUnlinkConfirmationDialogContent) => {\n    const {\n        open,\n        onClose,\n        onConfirm,\n    } = UnLinkConfirmationDialogProps;\n\n    const {t} = useTranslation('translations');\n    const classes = useStyles();\n\n    return (\n        <Dialog\n            onClose={onClose}\n            aria-describedby='unlink_confirmation_dialog'\n            open={open}\n        >\n            <DialogContent>\n                <Typography variant='body2'>\n                    {t('unlinkConfirmationDialog.body')}\n                </Typography>\n            </DialogContent>\n            <DialogActions>\n                <Button\n                    onClick={onClose}\n                    color='primary'\n                    className={classes.confirmationButton}\n                >\n                    {t('formButtons.cancel') }\n                </Button>\n                <Button\n                    onClick={onConfirm}\n                    color='primary' autoFocus={true}\n                    className={classes.confirmationButton}\n                >\n                    {t('formButtons.yes') }\n                </Button>\n            </DialogActions>\n        </Dialog>\n    );\n};\n\nexport default UnlinkConfirmationDialog;","import TextEditRenderer from './TextEditRenderer';\nimport SingleSelectEditRenderer from './SingleSelectEditRenderer';\n\nexport const ComponentToEditRowRendererMap = {\n  default: null,\n  text: TextEditRenderer,\n  dropdown: SingleSelectEditRenderer,\n};\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\n\n// import validate from './validate';\n\nimport { List } from 'immutable';\nimport DrawerTextFieldRowComponent from '../../DrawerTextFieldRow';\n\ninterface ITextEditRenderer {\n  name: string;\n  label: string;\n  placeholder?: string;\n  validation?: List<string>;\n}\n\nconst TextEditRenderer: React.FC<ITextEditRenderer> = props => {\n  const {\n    name,\n    label,\n    placeholder,\n    validation,\n  } = props;\n\n  return (\n    <DrawerTextFieldRowComponent\n      name={name}\n      props={{\n        label,\n      }}\n      justify='flex-end'\n    />\n  );\n};\n\nexport default TextEditRenderer;\n","import * as React from 'react';\n\n// import validate from './validate';\n\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\n\nimport {\n  Typography,\n  Tooltip,\n} from '@material-ui/core';\nimport { List } from 'immutable';\nimport DrawerRow from '../../DrawerRow';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../../FieldAutocomplete';\nimport { IMap } from 'ats-utils/src';\n\ninterface ISingleSelectEditRenderer {\n  name: string;\n  label: string;\n  placeholder?: string;\n  values: List<IMap<any>>;\n  validation?: List<string>;\n}\n\nconst SingleSelectEditRenderer: React.FC<ISingleSelectEditRenderer> = props => {\n  const {\n    name,\n    label,\n    placeholder,\n    values,\n    validation,\n  } = props;\n\n  return (\n    <DrawerRow drawerView={false}>\n      <Tooltip\n        // title={formValues.getIn(['brand', 'value']) || ''}\n        // classes={{ popper: classes.tooltipPlacement }}\n        title={''}\n      >\n        <div style={{ width: '100%' }}>\n          <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n            name={name}\n            component={FieldAutocomplete}\n            // validate={[required]}\n            props={{\n              // require: true,\n              inputProps: {\n                options: values.toJS(),\n                label,\n                // disabled: (linkProductId && inheritenceSetting.brand) || isChildFirmWithSharedProduct,\n                getOptionLabel: option => option ? option?.label ?? option : null,\n                renderOption: option => option && <Typography>{option?.label ?? option}</Typography>\n              },\n              formControlProps: {\n                fullWidth: true\n              }\n            }}\n          />\n        </div>\n      </Tooltip>\n    </DrawerRow>\n  );\n};\n\nexport default SingleSelectEditRenderer;\n","import * as React from 'react';\nimport { ComponentToEditRowRendererMap } from './ComponentToEditRowRendererMap';\nimport { List } from 'immutable';\n\ninterface IRenderFilterComponent {\n  type: string;\n  name: string;\n  label: string;\n  placeholder?: string;\n  values?: List<any>;\n  validation?: List<string>;\n}\n\nexport const RenderRowComponent: React.FC<IRenderFilterComponent> = (props) => {\n  const { type, name, label, placeholder, values, validation, ...rest } = props;\n\n  const Renderer = ComponentToEditRowRendererMap[type] || ComponentToEditRowRendererMap['default'];\n\n  return (<Renderer {...{name: `customData.${name}`, label, placeholder, values, validation, ...rest}} />);\n};\n\nexport default RenderRowComponent;\n","import * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Button,\n  IconButton,\n  Typography,\n  Tooltip,\n  WithTheme,\n  Collapse,\n  CircularProgress,\n  TextField,\n  Chip,\n  Tabs,\n  Tab,\n  Paper,\n  InputAdornment,\n  FormControl,\n  ClickAwayListener,\n  Popper,\n  PopperProps,\n  Menu as MuiMenu,\n  MenuItem,\n  TableBody,\n  TableRow,\n  Table\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  Trans,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Field,\n  reduxForm,\n  formValueSelector,\n  getFormValues,\n} from 'redux-form/immutable';\nimport Immutable, {\n  List,\n  Map,\n  fromJS, getIn,\n} from 'immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport {\n  GetCategoriesAction, GetManufacturersAction,\n} from '../../modules/AccountModule/actions';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport { Address, Category, FirmProduct, ListItem, Manufacturer, Product, RegionItem } from '../../models';\nimport { IPriceWithLabel } from '../../models/Price';\nimport {\n  makeSelectCategory,\n  makeSelectLoggedInUserOfficeLocation,\n  makeSelectManufacturer\n} from '../../modules/AccountModule/selectors';\nimport { quoteFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport { makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\nimport { isEmptyOrContent, isNotEmptyStringRequired, required, maxStringLength } from '../../validators';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../FieldReactSelect';\nimport { AddFirmProductAction, AddFirmProductAndAddToQuoteAction, EditFirmProductAction, EditFirmProductAndAddToQuoteAction, GetFirmProductByIdAction, GetProductByIdAction, QuickSearchFirmProductsAction, QuickSearchPimProducts, ResetProductLibraryResultsAction, SearchFirmProductsAction, SearchSharedProductsAction } from '../../modules/PimModule/actions';\nimport { GetRegionsAction } from '../../modules/LocationModule/actions';\nimport { PRODUCT_DRAWER_ID } from '../ProductDrawer';\nimport { customSelectStyles } from '../QuoteForm/ProductSearchDropdown';\nimport PriceExpansionPanel from './PriceExpansionPanel';\nimport { makeSelectFirmProductCustomDataList, makeSelectIsFetchingFirmProduct, makeSelectIsFetchingFirmProducts, makeSelectIsFetchingProduct, makeSelectIsFetchingSharedProductsList, makeSelectProduct, makeSelectQuickSearchPimProductsLoading, makeSelectSearchedFirmProductsList, makeSelectSearchedPimProducts, makeSelectSharedProductsList } from '../../modules/PimModule/selectors';\nimport { Image } from '..';\nimport { components } from 'react-select';\nimport { makeSelectOfficePricingRegions } from '../../modules/LocationModule/selectors';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../FieldAutocomplete';\nimport DrawerRow from '../DrawerRow';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport i18next from 'i18next';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport SpecSheetUpload from './SpecSheetUpload';\nimport { IMediaFiles } from '../../models/SeriesProductFile';\nimport MediaRow from './MediaRow';\nimport SpecSheetURL from './SpecSheetURL';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../FieldDropzone';\nimport { uploadFileValidation } from '../TeamManagementUserEditDrawer/Component';\nimport { FieldDropzoneStateResetAction, NoPhotoPreviewAction } from '../../modules/ApplicationModule/actions';\nimport Xhr from '../../utils/Xhr';\nimport { isProductSharedWithFirm } from '../../utils/productSharing';\nimport { searchDuplicateFirmProduct } from '../../utils/duplicateFirmProduct';\nimport DuplicateProductDialog from '../DuplicateProductDialog';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport LinkConfirmationDialog from './LinkConfirmationDialog';\nimport InheritenceSettingDialog from './InheritenceSettingDialog';\nimport { SaveFirmCategoryAction } from '../../modules/ProductModule/actions';\nimport { makeSelectSaveFirmCategoryLoading } from '../../modules/ProductModule/selectors';\nimport {\n  makeSelectIsChildFirm,\n  makeSelectIsSuperFirm,\n  makeSelectUserFirmId,\n  makeSelectUserHasFirmAdmin,\n  makeSelectUserHasOMShopDrawingAcl,\n  makeSelectUserOfficeAdmin\n} from '../../modules/AtsModule/selectors';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport UnlinkConfirmationDialog from './UnlinkConfirmationDialog';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { isEqual } from 'lodash';\n// icons\nimport SearchIcon from '@material-ui/icons/Search';\nimport StorageRoundedIcon from '@material-ui/icons/StorageRounded';\nimport InfoIcon from '@material-ui/icons/Info';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport AttachMoneyIcon from '@material-ui/icons/AttachMoney';\nimport UnfoldMoreRoundedIcon from '@material-ui/icons/UnfoldMoreRounded';\nimport UnfoldLessIcon from '@material-ui/icons/UnfoldLess';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\nimport DoneIcon from '@material-ui/icons/Done';\nimport CloseIcon from '@material-ui/icons/Close';\nimport PeopleIcon from '@material-ui/icons/People';\nimport AttachFileRoundedIcon from '@material-ui/icons/AttachFileRounded';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport QuoteConnectUtil from '../../modules/QuoteConnectService/QuoteConnectUtil';\nimport TuneIcon from '@material-ui/icons/Tune';\nimport RenderRowComponent from '../_RowRenderer';\nimport { customKeyToTypeInputMap, customKeyToTypeOutputMap } from '../_RowRenderer/utils';\nimport { CURRENCY, GEOLOCATION_ID, LOCALE, Currency } from '../../constants';\nimport { utcToLocal } from 'ats-utils/src';\n\n\nconst MANUFACTURER_CUTSHEET_MEDIA_KEY = 'manufacturer_cutsheet';\nconst SHOP_DRAWING_MEDIA_KEY = 'shop_drawing';\nconst OPERATION_GUIDE_MEDIA_KEY = 'operation_guide';\nconst INSTALLATION_MANUAL_MEDIA_KEY = 'installation_manual';\nconst WARRANTY_MEDIA_KEY = 'warranty';\n\nconst mediaLocaleRegions = ['en', 'en-us', 'en-ca', 'fr', 'fr-ca'];\n\nexport const UOM = [\n  { label: 'Pieces (PC)', value: 'pc' },\n  { label: 'Pounds (LBS)', value: 'lbs' },\n  { label: 'Kilograms (KG)', value: 'kg' },\n  { label: 'Each', value: 'ea' },\n  { label: 'Box', value: 'bx' },\n  { label: 'Case', value: 'cs' },\n  { label: 'Pound', value: 'lb' },\n  { label: 'Pack', value: 'pk' },\n  { label: 'Set', value: 'set' },\n  { label: 'Pair', value: 'pr' },\n  { label: 'Inch', value: 'in' },\n  { label: 'Foot', value: 'ft' },\n  { label: 'Yard', value: 'yd' },\n  { label: 'Meter', value: 'm' },\n  { label: 'Centimeter', value: 'cm' },\n  { label: 'Millimeter', value: 'mm' },\n  { label: 'Roll', value: 'rl' },\n  { label: 'Square Inch', value: 'sqin' },\n  { label: 'Square Foot', value: 'sqft' },\n  { label: 'Square Yard', value: 'sqyd' },\n  { label: 'Square Meter', value: 'sqm' },\n  { label: 'Square Centimeter', value: 'sqcm' },\n  { label: 'Sheet', value: 'sht' },\n  { label: 'Panel', value: 'pnl' },\n  { label: 'Bundle', value: 'bdl' },\n  { label: 'Coil', value: 'cl' },\n  { label: 'Tube', value: 'tb' },\n  { label: 'Bag', value: 'bg' },\n  { label: 'Container', value: 'ctr' },\n  { label: 'Spool', value: 'spl' }\n];\n\nconst addIsOverrideTrueToPrice = (priceMap: IMap<any>) => {\n  return priceMap?.map((region) => region.map((currency) => currency.withMutations((currencyCtx) => {\n    currencyCtx\n      .set('isPoaIsOverride', true)\n      .set('listIsOverride', true)\n      .set('sellIsOverride', true)\n      .set('costIsOverride', true);\n  })));\n};\n\nexport interface IInheritenceSetting {\n  images: boolean;\n  productNumber: boolean;\n  upc: boolean;\n  brand: boolean;\n  category: boolean;\n  description: boolean;\n  price: boolean;\n}\n\nconst defaultInheritenceSetting: IInheritenceSetting = {\n  images: true,\n  productNumber: true,\n  upc: true,\n  brand: true,\n  category: true,\n  description: true,\n  price: true\n};\n\ninterface IProductDrawerEditComponentProps {\n  productData?: IMap<FirmProduct>;\n  updateQuoteProductRow?: boolean;\n  form?: string;\n  product?: IMap<Product>;\n  toggleDrawer: () => void;\n  callbackWithProduct?: (product) => IMap<any>;\n  vendorQuoteProduct?: any;\n  vendorQuoteProductPrice?: any;\n}\n\ninterface IProductDrawerEditProps extends IProductDrawerEditComponentProps {\n  quickSearch: (query: string) => void;\n  quickSearchSharedProducts: (query: string) => void;\n  getRegions: () => void;\n  getLinkedProduct: (productId: number) => void;\n  searchFirmProducts: (query: string) => void;\n  productToBeLinkedOrShared: Partial<IMap<Product>>;\n  pimProducts: List<IMap<Product>>;\n  isLoadingQuickSearch: boolean;\n  sharedProducts: List<IMap<FirmProduct>>;\n  isFetchingSharedProducts: boolean;\n  formValues: Map<string, any>;\n  savedLinkedProduct: IMap<Product>;\n  isFetchingSavedLinkedProduct: boolean;\n  hasFirmAdminAclRole: boolean;\n  saveFirmCategory: (name: string, onSuccess?: (newCategory: ListItem) => void) => void;\n  isSaveFirmCategoryLoading: boolean;\n  isSuperFirm: boolean;\n  isChildFirm: boolean;\n  userFirmId: number;\n  isOfficeAdmin: boolean;\n  hasOMShopDrawingAcl: boolean;\n  isFetchingFirmProduct: boolean;\n  isModalOpen?: boolean;\n  pricingRegions?: List<IMap<RegionItem>>;\n  dispatch: React.Dispatch<IAction>;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  searchedFirmProductList: List<IMap<FirmProduct>>;\n  isFetchingFirmProducts: boolean;\n  loggedInUserOfficeLocation: IMap<Address>;\n  firmProductCustomDataList: List<IMap<any>>;\n  firmProductCustomDataKeyTypeMap: Map<string, string>;\n  quoteRegion: IMap<any>;\n  getManufacturers(): void;\n  getCategories(): void;\n}\n\ninterface IProductDrawerEditState {\n  value: number;\n  isCollapsedErpRow: boolean;\n  isCollapsedPriceRow: boolean;\n  isCollapsedAttachmentRow: boolean;\n  linkedProductMedia: IMap<IMediaFiles>;\n  linkedProduct: IMap<Product>;\n  sharedProductDeltas: IMap<any>;\n  saveButtonDisabled: boolean;\n  includeSpacesError: boolean;\n  imageId: string;\n  linkConfirmationDialogOpen: boolean;\n  unlinkConfirmationDialogOpen: boolean;\n  inheritenceSettingDialogOpen: boolean;\n  inheritenceSetting: IInheritenceSetting;\n  tabValue: 'ats' | 'shared';\n  showCategoryTextField: boolean;\n  newCategoryString: string;\n  autoCompletePopperOpen: boolean;\n  anchorEl: any;\n  overrideValues: IMap<any>;\n  selectedMediaRegion: LOCALE.EN_US | LOCALE.EN_CA;\n  saveAnchorEl: any;\n  isCheckingDuplicate: boolean;\n  duplicateProduct: IMap<any>;\n  pendingSubmit: { values: Partial<IMap<Product>>, closeOnSuccuss?: boolean, addToQuote?: boolean, addToImportModal?: boolean };\n}\n\ntype ProductDrawerEditType = WithTranslation & IProductDrawerEditProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAtsApi;\nclass ProductDrawerEdit extends React.Component<ProductDrawerEditType, IProductDrawerEditState> {\n\n  public newCategoryInputRef = React.createRef<HTMLInputElement>();\n\n  public duplicateCheckController: AbortController = null;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: 0,\n      isCollapsedErpRow: true,\n      isCollapsedPriceRow: false,\n      isCollapsedAttachmentRow: false,\n      linkedProductMedia: Map(),\n      linkedProduct: null,\n      sharedProductDeltas: null,\n      saveButtonDisabled: false,\n      includeSpacesError: false,\n      imageId: '',\n      linkConfirmationDialogOpen: false,\n      unlinkConfirmationDialogOpen: false,\n      inheritenceSettingDialogOpen: false,\n      inheritenceSetting: defaultInheritenceSetting,\n      tabValue: 'ats',\n      showCategoryTextField: false,\n      newCategoryString: '',\n      autoCompletePopperOpen: false,\n      anchorEl: null,\n      overrideValues: Map(),\n      selectedMediaRegion: LOCALE.EN_US,\n      saveAnchorEl: null,\n      isCheckingDuplicate: false,\n      duplicateProduct: null,\n      pendingSubmit: null,\n    };\n  }\n\n  public componentDidMount() {\n    const { getCategories, getManufacturers, getRegions, getLinkedProduct, productData, vendorQuoteProduct, searchFirmProducts, loggedInUserOfficeLocation, pricingRegions } = this.props;\n\n    getManufacturers();\n    getCategories();\n    if (!pricingRegions.size) {\n      getRegions();\n    }\n    if (productData?.get('productId')) {\n      getLinkedProduct(productData?.get('productId'));\n    }\n\n    if (vendorQuoteProduct && QuoteConnectUtil.getProductNumber(vendorQuoteProduct)) {\n      searchFirmProducts(QuoteConnectUtil.getProductNumber(vendorQuoteProduct));\n    }\n\n    if (loggedInUserOfficeLocation?.getIn(['country', 'id']) === GEOLOCATION_ID.canada) {\n      this.setState({\n        selectedMediaRegion: LOCALE.EN_CA,\n      });\n    }\n  }\n\n  public componentWillUnmount() {\n    if (this.duplicateCheckController) {\n      this.duplicateCheckController.abort();\n    }\n  }\n\n  public componentDidUpdate = async (prevProps, prevState) => {\n    const { isFetchingSavedLinkedProduct, savedLinkedProduct, productData, formValues, isSaveFirmCategoryLoading, form,\n      isChildFirm, dispatch, getLinkedProduct, vendorQuoteProduct, searchFirmProducts, searchedFirmProductList,\n      vendorQuoteProductPrice, isFetchingFirmProducts, manufacturers, categories, quoteRegion, userFirmId, } = this.props;\n    const { inheritenceSetting, linkedProduct, overrideValues } = this.state;\n    const {\n      inheritenceSetting: prevInheritenceSetting,\n      linkedProduct: prevLinkedProduct,\n    } = prevState;\n\n    if (productData?.get('firmId') !== userFirmId && productData?.getIn(['firmProduct', 'firmProductId']) !== prevProps.productData?.getIn(['firmProduct', 'firmProductId'])) {\n      dispatch(change(form, 'productNumberLink', productData));\n      this.handleShare();\n    }\n\n    if (prevProps.vendorQuoteProduct !== vendorQuoteProduct && QuoteConnectUtil.getProductNumber(vendorQuoteProduct)) {\n      searchFirmProducts(QuoteConnectUtil.getProductNumber(vendorQuoteProduct));\n    }\n\n    if (vendorQuoteProduct && /* searchedFirmProductList.size === 0 && */ prevProps.isFetchingFirmProducts !== isFetchingFirmProducts && !isFetchingFirmProducts) {\n      // below logic for pre populate product number, brand and category in edit drawer when importing pricing from vendor quote\n      // if the vendor quote product is not existing in the AQ library\n      // than we pre fill the info in the edit drawer\n\n      if (QuoteConnectUtil.getProductNumber(vendorQuoteProduct)) {\n        dispatch(change(form, 'productNumber', QuoteConnectUtil.getProductNumber(vendorQuoteProduct)));\n      }\n\n      // set firm's description\n      dispatch(change(form, 'description', vendorQuoteProductPrice?.description));\n      dispatch(change(form, 'upc', vendorQuoteProduct?.firmProductUpc || vendorQuoteProduct?.productUpc || ''));\n      // Set brand if manufacturer exists in the list\n      const manufacturerId = vendorQuoteProduct?.Manufacturer?.id;\n      const foundManufacturer = manufacturerId && manufacturers?.find(m => m.get('id') === manufacturerId);\n      dispatch(change(form, 'brand', foundManufacturer || { id: '', value: '' }));\n\n      // Set category if category exists in the list\n      const categoryId = vendorQuoteProduct?.Category?.id;\n      const foundCategory = categoryId && categories?.find(c => c.get('id') === categoryId);\n      dispatch(change(form, 'categoryName', foundCategory || { id: '', value: '' }));\n\n      // Get firmProduct's price structure from searched product\n      const firmProductPrice = searchedFirmProductList.getIn([0, 'firmProduct', 'price']);\n\n      // Get region ID and currency from vendorQuoteProductPrice\n      const regionId = quoteRegion.get('id') || 'default';\n      // Get currency key (only USD|CAD)\n      const currencyKeys = !vendorQuoteProductPrice ? [] :\n        Object.keys(vendorQuoteProductPrice).filter((key): key is Currency => key === CURRENCY.USD || key === CURRENCY.CAD);\n      const currency = currencyKeys.length > 0\n        ? currencyKeys[0]\n        : firmProductPrice.get(regionId)?.keySeq()?.first() || 'USD';\n      const listValue = vendorQuoteProductPrice && currency ? vendorQuoteProductPrice[currency]?.list : '';\n      const sellValue = vendorQuoteProductPrice && currency ? vendorQuoteProductPrice[currency]?.sell : '';\n      const costValue = vendorQuoteProductPrice && currency ? vendorQuoteProductPrice[currency]?.cost : '';\n\n      const targetRegionData = Map({\n        [currency]:\n          fromJS({\n            list: listValue,\n            sell: sellValue,\n            cost: costValue,\n            isPoa: false\n          })\n      });\n\n      // Create price with only the target region (clear all other pricingRegions)\n      const updatedPrice = Map({ [regionId]: targetRegionData });\n      dispatch(change(form, 'price', updatedPrice));\n    }\n\n    if (prevProps.productData !== productData) {\n      if (productData?.get('productId')) {\n        getLinkedProduct(productData?.get('productId'));\n      }\n    }\n\n    if (!prevState.imageId && formValues && formValues.getIn(['file', 'images', 'main', 'fileId'])) {\n      this.setState({ imageId: formValues.getIn(['file', 'images', 'main', 'fileId']) });\n    }\n    if (!isFetchingSavedLinkedProduct && prevProps.isFetchingSavedLinkedProduct) {\n      // for when directly opening edit drawer\n      this.setLinkedProductMedia(savedLinkedProduct.getIn(['file', 'media']));\n      this.setLinkedProduct(savedLinkedProduct);\n    }\n\n    if (!isSaveFirmCategoryLoading && prevProps.isSaveFirmCategoryLoading) {\n      this.setState({\n        // showCategoryTextField: false,\n        newCategoryString: ''\n      });\n    }\n\n    const isChildFirmWithSharedProduct = isChildFirm && formValues?.getIn(['sharedProduct']);\n\n    if (!isChildFirmWithSharedProduct) {\n      const isLinked = formValues?.get('productId') || linkedProduct?.get('id');\n\n      // setup inheritence setting according to delta\n      if (linkedProduct && !prevLinkedProduct && isLinked === productData?.get('productId')) {\n        this.setState({\n          inheritenceSetting: {\n            images: !productData?.getIn(['deltas', 'file', 'images', 'main', 'fileId']),\n            productNumber: !productData?.getIn(['deltas', 'productNumber']),\n            upc: !productData?.getIn(['deltas', 'upc']),\n            brand: !productData?.getIn(['deltas', 'brand']),\n            category: !productData?.getIn(['deltas', 'categoryName']),\n            description: !productData?.getIn(['deltas', 'description']),\n            price: !productData?.getIn(['deltas', 'price'])?.size,\n          },\n          // set initial image info for linked product if it has images in delta else image related value will be reset in form;\n          overrideValues: overrideValues\n            .set('images', formValues.getIn(['file', 'images']))\n            .set('dropzone', formValues.get('dropzone')),\n        });\n      }\n\n      // save overrides in state when form values changed\n      if ((!isLinked || (isLinked && !inheritenceSetting.images)) && (!isEqual(formValues.get('dropzone'), prevProps?.formValues?.get('dropzone')))) {\n        this.setState({\n          overrideValues: overrideValues\n            .set('images', formValues.getIn(['file', 'images']))\n            .set('dropzone', formValues.get('dropzone'))\n        });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.productNumber)) && prevProps.formValues?.get('productNumber') !== formValues.get('productNumber')) {\n        this.setState({ overrideValues: overrideValues.set('productNumber', formValues.get('productNumber')) });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.upc)) && prevProps.formValues?.get('upc') !== formValues.get('upc')) {\n        this.setState({ overrideValues: overrideValues.set('upc', formValues.get('upc')) });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.brand)) && prevProps.formValues?.get('brand') !== formValues.get('brand')) {\n        this.setState({ overrideValues: overrideValues.set('brand', formValues.get('brand')) });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.category)) && prevProps.formValues?.get('category') !== formValues.get('category')) {\n        this.setState({ overrideValues: overrideValues.set('category', formValues.get('category')) });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.description)) && prevProps.formValues?.get('description') !== formValues.get('description')) {\n        this.setState({ overrideValues: overrideValues.set('description', formValues.get('description')) });\n      }\n      if ((!isLinked || (isLinked && !inheritenceSetting.price)) && prevProps.formValues?.get('price') !== formValues.get('price')) {\n        this.setState({ overrideValues: overrideValues.set('price', formValues.get('price')) });\n      }\n\n      // update form values according to setting when setting is changed\n      if (isLinked) {\n        if (prevInheritenceSetting.images !== inheritenceSetting.images) {\n          if (inheritenceSetting.images) {\n            if (!linkedProduct.getIn(['file', 'images', 'main', 'fileId'])) {\n              this.removePhoto();\n            } else {\n              this.setState({ imageId: linkedProduct.getIn(['file', 'images', 'main', 'fileId']) || '' });\n              dispatch(change(form, 'file.images', linkedProduct.getIn(['file', 'images'])));\n              dispatch(change(form, 'dropzone', ''));\n            }\n          } else {\n            if (!overrideValues.getIn(['images', 'main', 'fileId']) && !overrideValues.get('dropzone')) {\n              this.removePhoto();\n            } else {\n              const overrideValuesDropzone = overrideValues.get('dropzone');\n              this.setState({ imageId: overrideValues.getIn(['images', 'main', 'fileId']) || '' });\n              overrideValuesDropzone && dispatch(change(form, 'dropzone', overrideValuesDropzone)); // tslint:disable-line\n            }\n          }\n        }\n        if (prevInheritenceSetting.productNumber !== inheritenceSetting.productNumber) {\n          if (inheritenceSetting.productNumber) {\n            dispatch(change(form, 'productNumber', linkedProduct.get('productNumber')));\n          } else {\n            dispatch(change(form, 'productNumber', overrideValues.get('productNumber')));\n          }\n        }\n        if (prevInheritenceSetting.upc !== inheritenceSetting.upc) {\n          if (inheritenceSetting.upc) {\n            dispatch(change(form, 'upc', linkedProduct.get('upc')));\n          } else {\n            dispatch(change(form, 'upc', overrideValues.get('upc')));\n          }\n        }\n        if (prevInheritenceSetting.brand !== inheritenceSetting.brand) {\n          if (inheritenceSetting.brand) {\n            dispatch(change(form, 'brand', fromJS({ id: linkedProduct.get('brandId'), value: linkedProduct.get('brand') })));\n          } else {\n            dispatch(change(form, 'brand', overrideValues.get('brand')));\n          }\n        }\n        if (prevInheritenceSetting.category !== inheritenceSetting.category) {\n          if (inheritenceSetting.category) {\n            dispatch(change(form, 'categoryName', fromJS({ id: linkedProduct.get('category'), value: linkedProduct.get('categoryName') })));\n          } else {\n            dispatch(change(form, 'categoryName', overrideValues.get('category')));\n          }\n        }\n        if (prevInheritenceSetting.description !== inheritenceSetting.description) {\n          if (inheritenceSetting.description) {\n            this.setState({ overrideValues: overrideValues.set('description', formValues.get('description')) });\n            dispatch(change(form, 'description', linkedProduct.get('description')));\n          } else {\n            dispatch(change(form, 'description', overrideValues.get('description')));\n          }\n        }\n        if (prevInheritenceSetting.price !== inheritenceSetting.price) {\n          if (inheritenceSetting.price) {\n            this.setState({ overrideValues: overrideValues.set('price', formValues.get('price')) });\n            dispatch(change(form, 'price', linkedProduct.get('price')));\n          } else {\n            dispatch(change(form, 'price', overrideValues.get('price')));\n          }\n        }\n      }\n    }\n  }\n\n  public handleDuplicateProceed = () => {\n    const { pendingSubmit } = this.state;\n    this.setState({ duplicateProduct: null, pendingSubmit: null });\n    if (pendingSubmit) {\n      this.onSubmit({ ...pendingSubmit, skipDuplicateCheck: true });\n    }\n  }\n\n  public handleDuplicateCancel = () => {\n    this.setState({ duplicateProduct: null, pendingSubmit: null });\n  }\n\n  public onSubmit = async ({ values, closeOnSuccuss, addToQuote, addToImportModal, skipDuplicateCheck }: { values: Partial<IMap<Product>>, closeOnSuccuss?: boolean, addToQuote?: boolean, addToImportModal?: boolean, skipDuplicateCheck?: boolean }) => {\n    const { dispatch, productData = Map(), isFetchingSavedLinkedProduct, atsApi, isSuperFirm, isChildFirm, userFirmId, updateQuoteProductRow, firmProductCustomDataList, callbackWithProduct } = this.props;\n    const { linkedProduct, inheritenceSetting, sharedProductDeltas } = this.state;\n\n    if (!skipDuplicateCheck) {\n      if (this.state.isCheckingDuplicate) {\n        return;\n      }\n      // only the latest in-flight duplicate check may decide the outcome\n      if (this.duplicateCheckController) {\n        this.duplicateCheckController.abort();\n      }\n      const controller = new AbortController();\n      this.duplicateCheckController = controller;\n      this.setState({ isCheckingDuplicate: true });\n      let duplicate = null;\n      try {\n        duplicate = await searchDuplicateFirmProduct({\n          atsApi,\n          signal: controller.signal,\n          productNumber: values.get('productNumber'),\n          itemNumber: values.get('itemNumber'),\n          brandId: values.getIn(['brand', 'id']),\n          firmProductId: values.get('id') && values.get('firmProductId'),\n        });\n      } catch (err) {\n        if (err?.name === 'AbortError') {\n          return;\n        }\n        // a failed search must not block saving — treat as no duplicate\n        duplicate = null;\n      }\n      if (this.duplicateCheckController !== controller) {\n        return;\n      }\n      if (duplicate) {\n        this.setState({\n          isCheckingDuplicate: false,\n          duplicateProduct: duplicate,\n          pendingSubmit: { values, closeOnSuccuss, addToQuote, addToImportModal },\n        });\n        return;\n      }\n      this.setState({ isCheckingDuplicate: false });\n    }\n\n    // disable save button to prevent multiple submissions\n    this.setState({ ...this.state, saveButtonDisabled: true });\n\n    const imageArray = await Xhr({ atsApi, files: values.get('dropzone') });\n    const imageId = getIn(imageArray, [0, 'id'], '') || this.state.imageId;\n    const linkedProductId = linkedProduct?.get('id');\n\n    // details on shared product: https://atsinc.atlassian.net/browse/PT-3167\n    const isChildFirmWithSharedProduct = isChildFirm && values?.getIn(['sharedProduct']);\n\n    const deltas = (productData?.get('deltas') || sharedProductDeltas || Map()).withMutations((_deltas) => {\n      // if the uploaded shop drawing is 'isOverride=true' (ie. not inherited) and it's not the same as the one in deltas, then update to new shop drawing,\n      // else if 'isOverride' is not true then delete shop drawing media type.\n      function update(config, mediaKey) {\n        // since user only have access to en-us and en-ca, we only need to check those two locales\n        ['en-us', 'en-ca'].forEach((locale) => {\n          const uploadedFile = values.getIn(['file', 'media', locale, mediaKey]);\n          if (uploadedFile?.get('isOverride')) {\n            config\n              .setIn(['file', 'media', locale, mediaKey], uploadedFile);\n          } else {\n            config\n              .deleteIn(['file', 'media', locale, mediaKey]);\n          }\n        });\n      }\n      update(_deltas, SHOP_DRAWING_MEDIA_KEY);\n      update(_deltas, MANUFACTURER_CUTSHEET_MEDIA_KEY);\n      update(_deltas, OPERATION_GUIDE_MEDIA_KEY);\n      update(_deltas, INSTALLATION_MANUAL_MEDIA_KEY);\n      update(_deltas, WARRANTY_MEDIA_KEY);\n      // remove empty objects from file and children of file\n      mediaLocaleRegions.forEach((locale) => {\n        if (_deltas.getIn(['file', 'media', locale])?.isEmpty()) {\n          _deltas.deleteIn(['file', 'media', locale]);\n        }\n      });\n      if (_deltas.getIn(['file', 'media'])?.isEmpty()) {\n        _deltas.deleteIn(['file', 'media']);\n      }\n\n      if (isChildFirmWithSharedProduct) {\n        // original or shared product deltas plus changes in file and price\n        // if (imageId && (values.get('dropzone') || (values.getIn(['file', 'images', 'main', 'isOverride']) && !values.get('dropzone')))) {\n        //   _deltas.setIn(['file', 'images', 'main', 'fileId'], imageId);\n        //   dispatch(new FieldDropzoneStateResetAction());\n        // } else {\n        //   _deltas.deleteIn(['file', 'images']);\n        // }\n\n        if (!imageId) {\n          _deltas.deleteIn(['file', 'images']);\n        } else if (imageId && values.get('dropzone')) {\n          _deltas.setIn(['file', 'images', 'main', 'fileId'], imageId);\n          dispatch(new FieldDropzoneStateResetAction());\n        }\n\n        _deltas.set('price', addIsOverrideTrueToPrice(values.get('price')));\n      } else {\n        if (!(linkedProductId && inheritenceSetting.images) && (values.get('dropzone') || values.getIn(['file', 'images', 'main', 'isOverride']))) {\n          if (imageId) {\n            _deltas.setIn(['file', 'images', 'main', 'fileId'], imageId);\n            dispatch(new FieldDropzoneStateResetAction());\n          } else {\n            _deltas.deleteIn(['file', 'images']);\n          }\n        } else if (!values.get('id') && imageId) {\n          _deltas.setIn(['file', 'images', 'main', 'fileId'], imageId);\n        } else {\n          _deltas.deleteIn(['file', 'images']);\n        }\n\n        if (!isFetchingSavedLinkedProduct && linkedProduct && _deltas.get('productId') !== linkedProductId) {\n          _deltas.set('productId', linkedProductId);\n        }\n        if (!values.get('productId')) {\n          _deltas.delete('productId');\n        }\n\n        if (!(linkedProductId && inheritenceSetting.productNumber) && values.get('productNumber')?.trim()) {\n          _deltas.set('productNumber', values.get('productNumber')?.trim());\n        } else {\n          _deltas.delete('productNumber');\n        }\n\n        _deltas.set('itemNumber', values.get('itemNumber')?.trim() || '');\n\n        const upc = values.get('upc') && String(values.get('upc')).trim();\n        if (!(linkedProductId && inheritenceSetting.upc) && upc) {\n          _deltas.set('upc', upc);\n        } else {\n          _deltas.delete('upc');\n        }\n\n        if (!(linkedProductId && inheritenceSetting.brand)) {\n          _deltas\n            .set('brand', values.getIn(['brand', 'value']))\n            .set('brandId', values.getIn(['brand', 'id']));\n        } else {\n          _deltas.delete('brand').delete('brandId');\n        }\n\n        if (!(linkedProductId && inheritenceSetting.category)) {\n          _deltas\n            .set('categoryName', values.getIn(['categoryName', 'value']))\n            .set('category', values.getIn(['categoryName', 'id']));\n        } else {\n          _deltas.delete('categoryName').delete('category');\n        }\n\n        if (!(linkedProductId && inheritenceSetting.description) && values.get('description')?.trim()) {\n          _deltas.set('description', values.get('description')?.trim());\n        } else {\n          _deltas.delete('description');\n        }\n\n        _deltas.set('uom', values.getIn(['uom', 'value']) || '');\n\n        if (!(linkedProductId && inheritenceSetting.price)) {\n          _deltas.set('price', addIsOverrideTrueToPrice(values.get('price')));\n        } else {\n          _deltas.delete('price');\n        }\n      }\n\n      _deltas.set('keywords', values.get('keywords'));\n\n      let newCustomData = values.get('customData')?.filter((value, formCustomDataKey) => value);\n      if (newCustomData) {\n        firmProductCustomDataList?.forEach((customData) => {\n          const datakey = customData.get('key');\n          if (newCustomData.has(datakey) && customData.get('type') === 'text') {\n            newCustomData = newCustomData.set(datakey, fromJS({ id: customData.getIn(['values', 0, 'id']), value: newCustomData.get(datakey) }));\n          }\n        });\n      }\n      _deltas.set('customData', newCustomData);\n\n      // clean up empty file\n      if (_deltas.get('file')?.isEmpty()) {\n        _deltas.delete('file');\n      }\n    });\n\n    const sharedProduct = values.getIn(['sharedProduct']);\n\n    let productSharedWithMe;\n    if (isChildFirm) {\n      if (productData.get('id') && (productData.get('firmId') === userFirmId || isProductSharedWithFirm(productData, userFirmId))) {\n        productSharedWithMe = true;\n      } else {\n        productSharedWithMe = false;\n      }\n    }\n\n    let product = Immutable.Map({}).setIn(['deltas'], deltas);\n\n    if (isSuperFirm) {\n      product = product.set('sharedProduct', sharedProduct);\n    } else if (isChildFirmWithSharedProduct) {\n      product = product.withMutations((ctx) => {\n        ctx.set('sharedProduct', sharedProduct);\n        ctx.set('productSharing', List([{ firmId: userFirmId }]));\n      });\n    }\n\n    // if product id exist - edit product, else create new product\n    if (updateQuoteProductRow) {\n      values.get('id')\n        ? dispatch(new EditFirmProductAndAddToQuoteAction({\n          product,\n          closeDrawer: closeOnSuccuss,\n          productSharedWithMe,\n          updateQuoteProductRow,\n          addToQuote,\n          callbackWithProduct: addToImportModal ? callbackWithProduct : null,\n        }))\n        : dispatch(new AddFirmProductAndAddToQuoteAction({\n          deltas: product,\n          closeDrawer: closeOnSuccuss,\n          addToQuote,\n          callbackWithProduct: addToImportModal ? callbackWithProduct : null,\n        }));\n    } else {\n      values.get('id')\n        ? dispatch(new EditFirmProductAction({\n          product,\n          closeDrawer: closeOnSuccuss,\n          productSharedWithMe\n        }))\n        : dispatch(new AddFirmProductAction({\n          deltas: product,\n          closeDrawer: closeOnSuccuss\n        }));\n    }\n  }\n\n  public toggleSection = (row: 'price' | 'attachment' | 'erp') => {\n    if (row === 'price') {\n      this.setState((prevState) => ({\n        isCollapsedPriceRow: !prevState.isCollapsedPriceRow\n      }));\n    } else if (row === 'attachment') {\n      this.setState((prevState) => ({\n        isCollapsedAttachmentRow: !prevState.isCollapsedAttachmentRow\n      }));\n    } else if (row === 'erp') {\n      this.setState((prevState) => ({\n        isCollapsedErpRow: !prevState.isCollapsedErpRow\n      }));\n    }\n  }\n\n  public setLinkedProductMedia = (linkedProductMedia: IMap<IMediaFiles> = Map()) => {\n    this.setState({ linkedProductMedia });\n  }\n\n  public setLinkedProduct = (linkedProduct: IMap<any> = Map()) => {\n    this.setState({ linkedProduct });\n  }\n\n  public handleShare = () => {\n    const {\n      dispatch,\n      getLinkedProduct,\n      productToBeLinkedOrShared,\n      form,\n    } = this.props;\n\n    if (productToBeLinkedOrShared == null) {\n      return;\n    }\n\n    const immutableproductToBeLinkedOrShared = fromJS(productToBeLinkedOrShared);\n    const productId = immutableproductToBeLinkedOrShared.get('productId');\n    const media = immutableproductToBeLinkedOrShared.getIn(['file', 'media']);\n\n    dispatch(change(form, 'id', immutableproductToBeLinkedOrShared.get('id')));\n    dispatch(change(form, 'firmProductId', immutableproductToBeLinkedOrShared.get('firmProductId')));\n    dispatch(change(form, 'productId', productId));\n\n    dispatch(change(form, 'file.media', media));\n    dispatch(change(form, 'sharedProduct', true));\n\n    this.setLinkedProductMedia(immutableproductToBeLinkedOrShared.getIn(['file', 'media']));\n    this.setLinkedProduct(immutableproductToBeLinkedOrShared);\n\n    if (!immutableproductToBeLinkedOrShared.getIn(['file', 'images', 'main', 'fileId'])) {\n      this.removePhoto();\n    } else {\n      this.setState({ imageId: immutableproductToBeLinkedOrShared.getIn(['file', 'images', 'main', 'fileId']) || '' });\n      dispatch(change(form, 'file.images', immutableproductToBeLinkedOrShared.getIn(['file', 'images'])));\n      dispatch(change(form, 'dropzone', ''));\n    }\n    dispatch(change(form, 'productNumber', immutableproductToBeLinkedOrShared.get('productNumber')));\n    dispatch(change(form, 'itemNumber', immutableproductToBeLinkedOrShared.get('itemNumber')));\n    dispatch(change(form, 'upc', immutableproductToBeLinkedOrShared.get('upc')));\n    dispatch(change(form, 'brand', fromJS({ id: immutableproductToBeLinkedOrShared.get('brandId'), value: immutableproductToBeLinkedOrShared.get('brand') })));\n    dispatch(change(form, 'categoryName', fromJS({ id: immutableproductToBeLinkedOrShared.get('category'), value: immutableproductToBeLinkedOrShared.get('categoryName') })));\n    dispatch(change(form, 'description', immutableproductToBeLinkedOrShared.get('description')));\n    dispatch(change(form, 'uom', immutableproductToBeLinkedOrShared.get('uom')));\n    dispatch(change(form, 'price', immutableproductToBeLinkedOrShared.get('price')?.size ? immutableproductToBeLinkedOrShared.get('price') : Map()));\n    dispatch(change(form, 'keywords', immutableproductToBeLinkedOrShared.get('keywords')));\n    dispatch(change(form, 'customData', immutableproductToBeLinkedOrShared.get('customData')));\n\n    this.setState({ sharedProductDeltas: immutableproductToBeLinkedOrShared.get('deltas') });\n\n    if (productId) {\n      getLinkedProduct(productId);\n    }\n    // this.setState({ inheritenceSetting: {...inheritenceSetting, images: false, price: false }});\n  }\n\n  public handleLink = () => {\n    const {\n      dispatch,\n      productToBeLinkedOrShared,\n      form,\n      formValues\n    } = this.props;\n    const {\n      inheritenceSetting,\n      overrideValues,\n    } = this.state;\n\n    if (productToBeLinkedOrShared == null) {\n      return;\n    }\n\n    const immutableproductToBeLinkedOrShared = fromJS(productToBeLinkedOrShared);\n    const productId = immutableproductToBeLinkedOrShared.get('id');\n    const media = immutableproductToBeLinkedOrShared.getIn(['file', 'media']);\n\n    dispatch(change(form, 'productId', productId));\n    dispatch(change(form, 'file.media', media));\n\n    this.setLinkedProductMedia(immutableproductToBeLinkedOrShared.getIn(['file', 'media']));\n    this.setLinkedProduct(immutableproductToBeLinkedOrShared);\n\n    // update fields according to settings as well as keep track of override form values appropriately\n    if (inheritenceSetting.images) {\n      if (!immutableproductToBeLinkedOrShared.getIn(['file', 'images', 'main', 'fileId'])) {\n        this.removePhoto();\n      } else {\n        this.setState({ imageId: immutableproductToBeLinkedOrShared.getIn(['file', 'images', 'main', 'fileId']) || '' });\n        dispatch(change(form, 'file.images', immutableproductToBeLinkedOrShared.getIn(['file', 'images'])));\n        dispatch(change(form, 'dropzone', ''));\n      }\n    }\n    if (inheritenceSetting.productNumber) {\n      dispatch(change(form, 'productNumber', immutableproductToBeLinkedOrShared.get('productNumber')));\n    } else {\n      dispatch(change(form, 'productNumber', overrideValues.get('productNumber')));\n    }\n    if (inheritenceSetting.upc) {\n      dispatch(change(form, 'upc', immutableproductToBeLinkedOrShared.get('upc')));\n    } else {\n      dispatch(change(form, 'upc', overrideValues.get('upc')));\n    }\n    if (inheritenceSetting.brand) {\n      dispatch(change(form, 'brand', fromJS({ id: immutableproductToBeLinkedOrShared.get('brandId'), value: immutableproductToBeLinkedOrShared.get('brand') })));\n    } else {\n      dispatch(change(form, 'brand', overrideValues.get('brand')));\n    }\n    if (inheritenceSetting.category) {\n      dispatch(change(form, 'categoryName', fromJS({ id: immutableproductToBeLinkedOrShared.get('category'), value: immutableproductToBeLinkedOrShared.get('categoryName') })));\n    } else {\n      dispatch(change(form, 'categoryName', overrideValues.get('category')));\n    }\n    if (inheritenceSetting.description) {\n      dispatch(change(form, 'description', immutableproductToBeLinkedOrShared.get('description')));\n    } else {\n      dispatch(change(form, 'description', overrideValues.get('description')));\n    }\n    if (inheritenceSetting.price) {\n      dispatch(change(form, 'price', immutableproductToBeLinkedOrShared.get('price')?.size ? immutableproductToBeLinkedOrShared.get('price') : Map()));\n    } else {\n      dispatch(change(form, 'price', overrideValues.get('price')?.size ? overrideValues.get('price') : Map()));\n    }\n\n    this.setState({ linkConfirmationDialogOpen: false });\n  }\n\n  public handleUnlink = () => {\n    const {\n      dispatch,\n      form,\n      formValues\n    } = this.props;\n\n    dispatch(change(form, 'productId', null));\n\n    if (this.state.inheritenceSetting.price) {\n      this.resetIsPoa();\n    }\n\n    this.setLinkedProductMedia();\n    this.setLinkedProduct();\n\n    const images = formValues?.getIn(['file', 'images', 'main']);\n    if (images?.get('fileId')) {\n      dispatch(change(form, 'file.images.main.isOverride', true));\n    }\n\n    mediaLocaleRegions.forEach((locale) => {\n      const cutsheet = formValues?.getIn(['file', 'media', locale, MANUFACTURER_CUTSHEET_MEDIA_KEY]);\n      const shopDrawing = formValues?.getIn(['file', 'media', locale, SHOP_DRAWING_MEDIA_KEY]);\n      const operationGuide = formValues?.getIn(['file', 'media', locale, OPERATION_GUIDE_MEDIA_KEY]);\n      const installationManual = formValues.getIn(['file', 'media', locale, INSTALLATION_MANUAL_MEDIA_KEY]);\n      const warranty = formValues.getIn(['file', 'media', locale, WARRANTY_MEDIA_KEY]);\n\n      if (cutsheet?.get('fileId') || cutsheet?.get('url')) {\n        dispatch(change(form, `file.media.${locale}.${MANUFACTURER_CUTSHEET_MEDIA_KEY}.isOverride`, true));\n      }\n      if (shopDrawing?.get('fileId')) {\n        dispatch(change(form, `file.media.${locale}.${SHOP_DRAWING_MEDIA_KEY}.isOverride`, true));\n      }\n      if (operationGuide?.get('fileId') || operationGuide?.get('url')) {\n        dispatch(change(form, `file.media.${locale}.${OPERATION_GUIDE_MEDIA_KEY}.isOverride`, true));\n      }\n      if (installationManual?.get('fileId') || installationManual?.get('url')) {\n        dispatch(change(form, `file.media.${locale}.${INSTALLATION_MANUAL_MEDIA_KEY}.isOverride`, true));\n      }\n      if (warranty?.get('fileId') || warranty?.get('url')) {\n        dispatch(change(form, `file.media.${locale}.${WARRANTY_MEDIA_KEY}.isOverride`, true));\n      }\n    });\n\n    this.setState({\n      unlinkConfirmationDialogOpen: false,\n    });\n  }\n\n  public resetIsPoa = () => {\n    const {\n      dispatch,\n      form,\n      formValues\n    } = this.props;\n\n    const price = formValues.get('price') || Map();\n\n    // reset the isPoa for all pricingRegions and currencies\n    const resetIsPoaPrice = price.map((regionPrice) => {\n      return regionPrice.map((currencyPrice) => {\n        return currencyPrice.set('isPoa', false);\n      });\n    });\n\n    dispatch(change(form, 'price', resetIsPoaPrice));\n  }\n\n  public regionPricingData = () => {\n    const {\n      productData,\n      pricingRegions,\n    } = this.props;\n\n    const productPrices = productData && productData.getIn(['firmProduct', 'price']);\n    const priceKeys = productPrices && productPrices.keySeq().toArray();\n\n    // mapped against pricingRegions\n    // pricingRegions call will always return default pricing first\n    // so pricing panel order based off of this\n    const adjustedPricingRegions = pricingRegions && pricingRegions.reduce((acc, region) => {\n      const regionId = region.get('id');\n      const regionLabel = region.get('label');\n\n      if (priceKeys && priceKeys.includes(regionId)) {\n        const selectedPrice = productPrices.get(regionId);\n        const priceMap = Map().withMutations((ctx) => {\n          ctx.set(regionId, selectedPrice);\n          ctx.setIn([regionId, 'label'], regionLabel);\n          ctx.setIn([regionId, 'id'], regionId);\n        });\n\n        return acc.push(priceMap);\n      } else {\n        const priceMap = Map().withMutations((ctx) => {\n          ctx.set(regionId, fromJS({\n            CAD: {\n              cost: null,\n              list: null,\n              sell: null\n            },\n            USD: {\n              cost: null,\n              list: null,\n              sell: null\n            }\n          }));\n          ctx.setIn([regionId, 'label'], regionLabel);\n          ctx.setIn([regionId, 'id'], regionId);\n        });\n\n        return acc.push(priceMap);\n      }\n    }, List());\n\n    return adjustedPricingRegions;\n  }\n\n  public _maxStringLength = (value) => maxStringLength(32)(value);\n\n  public handleOnKeywordChange = (e: any) => {\n    const keyword = e.target.value;\n    this.setState({\n      includeSpacesError: keyword.indexOf(' ') >= 0\n    });\n\n  }\n\n  public handleKeywordFieldOnPressEnter = (e: any) => {\n    const keyword = e.target.value;\n    if (e.key === 'Enter' && keyword) {\n      e.preventDefault();\n      if (!this.state.includeSpacesError) {\n        const { form, dispatch, formValues = Map() } = this.props;\n        const prevKeywords = formValues.get('keywords') || '';\n        const newKeywords = prevKeywords === '' ? keyword : prevKeywords.concat(' ', keyword);\n        dispatch(change(form, 'keywords', newKeywords));\n        e.target.value = null;\n      }\n    }\n  }\n\n  public handleOnKeywordDelete = (data, index) => {\n    const { form, dispatch, formValues = Map() } = this.props;\n    const prevKeywords = formValues.get('keywords') || '';\n    const prevKeywordsArr = prevKeywords.split(' ');\n    if (index === prevKeywordsArr.indexOf(data)) {\n      prevKeywordsArr.splice(index, 1);\n      const newKeywords = prevKeywordsArr.join(' ');\n      dispatch(change(form, 'keywords', newKeywords));\n    }\n  }\n\n  public removePhoto = (retainLinkedImage?: boolean) => {\n    const {\n      dispatch,\n      form,\n      isChildFirm,\n      formValues,\n    } = this.props;\n    const {\n      linkedProduct,\n      inheritenceSetting,\n    } = this.state;\n\n    const hasAtsImage = linkedProduct?.getIn(['file', 'images', 'main', 'fileId']) && !linkedProduct?.getIn(['file', 'images', 'main', 'isOverride']);\n\n    if (retainLinkedImage && hasAtsImage) { // fallback to linked ATS product image if there is one\n      this.setState({ imageId: linkedProduct.getIn(['file', 'images', 'main', 'fileId']) });\n      dispatch(change(form, 'file.images', linkedProduct.getIn(['file', 'images'])));\n      dispatch(change(form, 'dropzone', ''));\n    } else {\n      dispatch(new NoPhotoPreviewAction());\n      this.setState({ imageId: '' });\n      dispatch(change(form, 'file.images.main.fileId', ''));\n      dispatch(change(form, 'dropzone', ''));\n    }\n  }\n\n  public handleOnNewCategoryChange = (e) => {\n    this.setState({ newCategoryString: e.target.value });\n  }\n\n  public handleOnAddNewCategoryClick = (e) => {\n    // e.preventDefault();\n    this.setState({\n      showCategoryTextField: true\n    });\n    setTimeout(() => this.newCategoryInputRef?.current?.focus(), 500);\n  }\n\n  public handleOnCloseClick = (e) => {\n    // e.preventDefault();\n    this.setState({\n      showCategoryTextField: false,\n      newCategoryString: ''\n    });\n  }\n\n  public handleOnDoneClick = (e) => {\n    // e.preventDefault();\n    const { saveFirmCategory, dispatch, form } = this.props;\n    const { newCategoryString } = this.state;\n\n    saveFirmCategory(newCategoryString.trim(), (newCategory) => dispatch(change(form, 'categoryName', newCategory)));\n  }\n\n  public onSaveSetting = (newInheritenceSetting: IInheritenceSetting) => {\n    const isLinked = this.props.formValues?.get('productId') || this.state.linkedProduct?.get('id');\n    if (isLinked && this.state.inheritenceSetting.price && !newInheritenceSetting.price) {\n      this.resetIsPoa();\n    }\n    this.setState({ inheritenceSetting: newInheritenceSetting, inheritenceSettingDialogOpen: false });\n  }\n\n  public PopperMy = React.memo((props: React.PropsWithChildren<PopperProps>, ref) => { // tslint:disable-line\n    return (\n      <Popper\n        {...props}>\n        <ClickAwayListener onClickAway={(e: any) => {\n          // prevent closing popper when select or its children is clicked\n          if ((e.target as any)?.localName === 'input') {\n            e.preventDefault();\n            // prevent Popper closing when clicking the component/view below\n            // this also prevent Popper closing when AutoComplete input blur\n          } else {\n            this.setState({\n              autoCompletePopperOpen: false,\n              showCategoryTextField: false,\n              newCategoryString: ''\n            });\n          }\n        }}>\n          {props.children}\n        </ClickAwayListener>\n      </Popper>\n    );\n  });\n\n  public PaperComponent = React.memo(React.forwardRef<HTMLDivElement>((props: React.PropsWithChildren<React.HTMLAttributes<HTMLElement>>, ref) => { // tslint:disable-line\n    const { categories, classes, isSaveFirmCategoryLoading, t } = this.props;\n    const { children, ...rest } = props;\n    const { showCategoryTextField, newCategoryString } = this.state;\n    const duplicatedCategory = categories.findIndex(category => category.get('value').toLowerCase() === newCategoryString.trim().toLowerCase()) !== -1;\n\n    return (\n      <Paper\n        ref={ref}\n        {...rest}\n      >\n        {children}\n        <div\n          className={classes.paperComponent}\n        >\n          {\n            showCategoryTextField\n              ? <TextField\n                inputRef={this.newCategoryInputRef}\n                disabled={isSaveFirmCategoryLoading}\n                onMouseDown={(e: any) => { e.target.focus(); }}\n                error={duplicatedCategory}\n                onChange={this.handleOnNewCategoryChange}\n                className={classes.newCategoryInput}\n                fullWidth={true}\n                placeholder={t('productDrawer.newCategoryPlaceholder')}\n                InputProps={{\n                  classes: {\n                    input: classes.newCategoryInputFont,\n                  },\n                  endAdornment: (\n                    <InputAdornment position='end'>\n                      {\n                        isSaveFirmCategoryLoading\n                          ? <CircularProgress size='1rem' color='primary' />\n                          : <>\n                            <IconButton size='small' onClick={this.handleOnCloseClick}><CloseIcon /></IconButton>\n                            <IconButton size='small' disabled={duplicatedCategory || !newCategoryString.trim()} onClick={this.handleOnDoneClick}><DoneIcon /></IconButton>\n                          </>\n                      }\n                    </InputAdornment>\n                  )\n                }}\n                value={newCategoryString}\n                helperText={duplicatedCategory ? t('productDrawer.duplicateCategoryNameHelper') : null}\n              />\n              : null\n          }\n          <Button disabled={showCategoryTextField} onClick={this.handleOnAddNewCategoryClick} color='primary' fullWidth={true}>{t('productDrawer.addNewCategory')}</Button>\n        </div>\n      </Paper>\n    );\n  }));\n\n  public render() {\n    const {\n      formValues = Map(),\n      handleSubmit,\n      classes,\n      form,\n      manufacturers,\n      categories,\n      quickSearch,\n      quickSearchSharedProducts,\n      pimProducts,\n      isLoadingQuickSearch,\n      sharedProducts,\n      isFetchingSharedProducts,\n      toggleDrawer,\n      isFetchingSavedLinkedProduct,\n      t,\n      hasFirmAdminAclRole,\n      isSuperFirm,\n      isChildFirm,\n      productData,\n      productToBeLinkedOrShared,\n      isOfficeAdmin,\n      dispatch,\n      hasOMShopDrawingAcl,\n      isFetchingFirmProduct,\n      updateQuoteProductRow,\n      callbackWithProduct,\n      vendorQuoteProduct,\n      vendorQuoteProductPrice,\n      isFetchingFirmProducts,\n      firmProductCustomDataList,\n      quoteRegion,\n      loggedInUserOfficeLocation,\n    } = this.props;\n\n    const {\n      isCollapsedErpRow,\n      isCollapsedPriceRow,\n      isCollapsedAttachmentRow,\n      linkedProductMedia,\n      saveButtonDisabled,\n      imageId,\n      linkConfirmationDialogOpen,\n      unlinkConfirmationDialogOpen,\n      inheritenceSettingDialogOpen,\n      inheritenceSetting,\n      tabValue,\n      autoCompletePopperOpen,\n      linkedProduct,\n      saveAnchorEl,\n      isCheckingDuplicate,\n      duplicateProduct,\n    } = this.state;\n\n    // details on shared product https://atsinc.atlassian.net/browse/PT-3167\n\n    const selectedCurrency = (vendorQuoteProductPrice\n      ? Object.keys(vendorQuoteProductPrice).find((key): key is Currency => key === CURRENCY.USD || key === CURRENCY.CAD)\n      : CURRENCY.USD) ?? CURRENCY.USD;\n\n    const isExistingFirmProduct = formValues?.get('id');\n    const productNumberLinkId = formValues?.getIn(['productNumberLink', 'id']);\n    const displayDetailSaveMenuForQuote = callbackWithProduct || ((!isExistingFirmProduct || (isExistingFirmProduct && isExistingFirmProduct === productNumberLinkId)) && updateQuoteProductRow);\n\n    const linkProductId = formValues?.get('productId');\n\n    const isChildFirmWithSharedProduct = isChildFirm && formValues.get('sharedProduct');\n    const isChildFirmWithShareableProductLoaded = isChildFirm && (productToBeLinkedOrShared as any)?.sharedProduct;\n\n    const usingOverrideImage = formValues.get('dropzone') || formValues.getIn(['file', 'images', 'main', 'isOverride']);\n\n    const parsedSearchResults = tabValue === 'ats'\n      ? pimProducts?.map((product: IMap<Product>) => {\n        return {\n          label: product.get('productNumber'),\n          value: product.get('id') || '',\n          description: product.get('description'),\n          uom: product.get('uom'),\n          brand: product.get('brand'),\n          brandId: product.get('brandId'),\n          categoryName: product.get('categoryName'),\n          category: product.get('category'),\n          productNumber: product.get('productNumber'),\n          itemNumber: product.get('itemNumber'),\n          upc: product.get('upc'),\n          file: product.get('file'),\n          price: product.get('price'),\n          attributes: product.get('attributes'),\n          // series: product.get('series'),\n          id: product.get('id'),\n          firmProductId: null,\n          productId: null,\n          keywords: '',\n          sharedProduct: false,\n          deltas: null,\n        };\n      })\n      : sharedProducts?.map((product: IMap<FirmProduct>) => {\n        return {\n          label: product.getIn(['firmProduct', 'productNumber']),\n          value: product.getIn(['firmProduct', 'id']) || '',\n          description: product.getIn(['firmProduct', 'description']),\n          uom: product.getIn(['firmProduct', 'uom']),\n          brand: product.getIn(['firmProduct', 'brand']),\n          brandId: product.getIn(['firmProduct', 'brandId']),\n          categoryName: product.getIn(['firmProduct', 'categoryName']),\n          category: product.getIn(['firmProduct', 'category']),\n          productNumber: product.getIn(['firmProduct', 'productNumber']),\n          itemNumber: product.getIn(['firmProduct', 'itemNumber']),\n          upc: product.getIn(['firmProduct', 'upc']),\n          file: product.getIn(['firmProduct', 'file']),\n          price: product.getIn(['firmProduct', 'price']),\n          attributes: product.getIn(['firmProduct', 'attributes']),\n          // series: product.getIn(['firmProduct', 'series']),\n          id: product.getIn(['firmProduct', 'id']),\n          firmProductId: product.getIn(['firmProduct', 'firmProductId']),\n          productId: product.getIn(['firmProduct', 'productId']),\n          keywords: product.getIn(['firmProduct', 'keywords']),\n          customData: product.getIn(['firmProduct', 'customData']),\n          sharedProduct: product.get('sharedProduct'),\n          deltas: product.get('deltas')\n        };\n      });\n\n    const formatOptionLabel = ({ value, label, description, file, upc, price, brand, categoryName }, { context }) => {\n      const _imageId = file && file.getIn(['images', 'main', 'fileId']) || '';\n      const currencyForTooltip = loggedInUserOfficeLocation?.getIn(['country', 'id']) === GEOLOCATION_ID.canada ? CURRENCY.CAD : CURRENCY.USD;\n      const listPrice = price?.getIn(['default', currencyForTooltip, 'list']);\n      const isPoa = price?.getIn(['default', currencyForTooltip, 'isPoa']);\n      const rawLastUpdated = price?.getIn(['default', currencyForTooltip, 'listLastUpdatedAt']);\n      const lastUpdatedPrice = rawLastUpdated ? utcToLocal(rawLastUpdated, false) : null;\n\n      const rows = [\n        [t('productDrawer.atsProductOptions.listPriceTooltip'), isPoa ? t('productDrawer.POA') : listPrice != null ? `$${listPrice}` : '-'],\n        [t('productDrawer.atsProductOptions.upcTooltip'), upc || '-'],\n        [t('productDrawer.atsProductOptions.lastUpdatedPriceTooltip'), lastUpdatedPrice || '-']\n      ];\n\n      const tooltipContent = (\n        <table style={{ borderCollapse: 'collapse' }}>\n          <tbody>\n            {rows.map((row, rowIndex) => (\n              <tr key={rowIndex}>\n                {row.map((cell, cellIndex) => (\n                  <td\n                    key={cellIndex}\n                    style={{\n                      padding: '4px 8px 4px 0',\n                      textAlign: cellIndex ? 'left' : 'right',\n                      wordBreak: 'break-all'\n                    }}\n                  >\n                    {cell}\n                  </td>\n                ))}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      );\n\n      return (\n        <Tooltip\n          title={tooltipContent}\n          placement='left'\n        >\n          <Grid container={true}>\n            <Grid item={true} xs={isChildFirm ? 2 : 3} style={{ paddingRight: 8 }}>\n              <Image src={_imageId} fromService={true} aspectRatio='100%' />\n            </Grid>\n            <Grid container={true} direction='column' item={true} xs={isChildFirm ? 10 : 9}>\n              <Grid item={true} container={true}>\n                <Typography variant='body2' color='textPrimary' className={classes.zeroWidthAndGrow + ' ' + classes.searchResultNumberText}>{label}</Typography>\n              </Grid>\n              <Grid item={true} container={true}>\n                <Typography variant='body2' className={classes.zeroWidthAndGrow + ' ' + classes.searchResultDescriptionText}>{description}</Typography>\n              </Grid>\n              {(brand || categoryName) && <Grid item={true} container={true}>\n                <Typography variant='body2' color='textPrimary' className={classes.zeroWidthAndGrow}>{[brand, categoryName].filter(Boolean).join(' - ')}</Typography>\n              </Grid>}\n            </Grid>\n          </Grid>\n        </Tooltip>\n      );\n    };\n\n    const DropdownIndicator = props => {\n      return (\n        components.DropdownIndicator && (\n          <components.DropdownIndicator {...props}>\n            <Grid\n              container={true}\n              alignItems='center'\n            >\n              <SearchIcon />\n            </Grid>\n          </components.DropdownIndicator>\n        )\n      );\n    };\n\n    const Menu = props => {\n      return (components.Menu &&\n        <components.Menu {...props}>\n          <Tabs\n            value={tabValue}\n            onChange={(e, newValue) => {\n              e.preventDefault();\n              this.setState({ tabValue: newValue });\n            }}\n            indicatorColor='primary'\n            textColor='primary'\n            aria-label='Library Tabs'\n          >\n            <Tab\n              label={\n                <Grid container={true} justify='center' alignItems='center'>\n                  <Typography variant='h6' color='inherit' style={{ marginRight: 8 }}>{t('productDrawer.atsLibraryTab')}</Typography>\n                  <Tooltip title={t('productDrawer.atsLibraryTabTooltip')}><InfoIcon color='action' fontSize='small' /></Tooltip>\n                </Grid>\n              }\n              value={'ats'}\n              style={{ width: '50%' }}\n            />\n            <Tab disabled={productData?.get('id') || formValues?.get('productId')} label={<Typography variant='h6' color='inherit'>{t('productDrawer.sharedLibraryTab')}</Typography>} value={'shared'} style={{ width: '50%' }} />\n          </Tabs>\n          {props.children}\n        </components.Menu>\n      );\n    };\n\n    return (\n      <Grid>\n        <DrawerEditHeader title={(productData || isFetchingFirmProduct) ? t('productDrawer.editProduct') : t('productDrawer.createProduct')} handleClose={toggleDrawer} />\n        {\n          isFetchingFirmProduct || isFetchingSavedLinkedProduct || (vendorQuoteProduct && isFetchingFirmProducts)\n            ? (\n              <Grid container={true} justify='center' className={classes.fetchingLinked}>\n                <CircularProgress size={'1.4em'} style={{ marginRight: 8 }} />\n                {isFetchingSavedLinkedProduct ? 'Fetching linked product...' : isFetchingFirmProduct ? 'Fetching product detail...' : isFetchingFirmProducts ? 'Fetching product library...' : null}\n              </Grid>\n            )\n            : (\n              <form\n                // onSubmit={handleSubmit(this.onSubmit)}\n                className={classes.body}\n              >\n                <Grid container={true} direction='column' justify='center' className={classes.uploadPhoto}>\n                  <Grid container={true} justify='space-between'>\n                    {\n                      (imageId || (formValues && formValues.get('dropzone'))) &&\n                      <Tooltip title={usingOverrideImage ? '' : 'Product image from ATS library cannot be deleted'}>\n                        <span>\n                          <IconButton disabled={(linkProductId && inheritenceSetting.images && !isChildFirmWithSharedProduct) || !usingOverrideImage} onClick={() => this.removePhoto(true)} size='small' className={classes.bottonMargin}>\n                            <FontAwesomeIcon icon='trash-alt' size='sm' />\n                          </IconButton>\n                        </span>\n                      </Tooltip>\n                    }\n                  </Grid>\n                  <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                    component={FieldDropzone}\n                    name='dropzone'\n                    validate={uploadFileValidation}\n                    props={{\n                      initialImage: imageId,\n                      disabled: linkProductId && inheritenceSetting.images && !isChildFirmWithSharedProduct,\n                      renderSuggestText: () => (\n                        <Grid container={true} item={true} justify='center'>\n                          <Typography variant='body2' className={classes.suggestion}>{t('libraryProductDrawer.suggest')}</Typography>\n                          <Typography variant='body2' className={classes.suggestion}>{t('libraryProductDrawer.suggestFormat')}</Typography>\n                        </Grid>\n                      )\n                    }}\n                  />\n                </Grid>\n                {\n                  !isChildFirmWithSharedProduct && <>\n                    <DrawerRow\n                      muiIcon={<StorageRoundedIcon />}\n                      drawerView={false}\n                    >\n                      {\n                        isChildFirm\n                          ? <Typography variant='body2' color='inherit'>\n                            {t('productDrawer.loadFromProductLibrary')}\n                          </Typography>\n                          : <>\n                            <Grid item={true}>\n                              <Typography variant='body2' color='inherit'>\n                                {t('productDrawer.loadFromATSLibrary')}\n                              </Typography>\n                            </Grid>\n                            <Grid item={true} className={classes.infoIcon}>\n                              <Tooltip title={t('productDrawer.loadTooltip')}>\n                                <InfoIcon fontSize='small' className={classes.icon} />\n                              </Tooltip>\n                            </Grid>\n                          </>\n                      }\n                    </DrawerRow>\n                    <DrawerRow drawerView={false}>\n                      <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                        name='productNumberLink'\n                        component={FieldReactSelect}\n                        inputProps={{\n                          isDisabled: isCheckingDuplicate,\n                          placeholder: t('productDrawer.searchPlaceholder'),\n                          className: classes.searchPlaceHolder,\n                          filterOption: () => true, // hacky solution for https://atsinc.atlassian.net/browse/PT-2705\n                          onInputChange: (val: string) => {\n                            if (val) {\n                              quickSearch(val);\n                              if (isChildFirm) {\n                                quickSearchSharedProducts(val);\n                              }\n                            }\n                          },\n                          onFocus: () => {\n                            this.props.dispatch(new ResetProductLibraryResultsAction());\n                          },\n                          noOptionsMessage: () => (\n                            ((tabValue === 'ats' && isLoadingQuickSearch) || (tabValue === 'shared' && isFetchingSharedProducts))\n                              ? <>\n                                <Grid>\n                                  <CircularProgress size='1rem' />\n                                </Grid>\n                                <Grid>\n                                  <Typography>{t('generalLoading.loading')}</Typography>\n                                </Grid>\n                              </>\n                              : <Typography>\n                                {t('productDrawer.noResultsFound')}\n                              </Typography>\n                          ),\n                          getOptionLabel: option => option && option.productNumber,\n                          getOptionValue: option => option && option.productNumber,\n                          options: parsedSearchResults && parsedSearchResults.toArray(),\n                          formatOptionLabel,\n                          components: {\n                            DropdownIndicator,\n                            ...isChildFirm ? { Menu } : [],\n                          },\n                          styles: {\n                            ...customSelectStyles,\n                            ...isChildFirm ? {\n                              menu: (defaultStyles) => ({\n                                ...defaultStyles,\n                                position: 'fixed',\n                                width: 425,\n                                top: 'auto',\n                                right: 32,\n                                maxHeight: 300,\n                              })\n                            } : {},\n                            valueContainer: (defaultStyles) => ({\n                              ...defaultStyles,\n                              padding: '0',\n                              overflow: 'hidden'\n                            }),\n                            singleValue: (defaultStyles) => ({\n                              ...defaultStyles,\n                              width: '100%',\n                              // formatOptionLabel renders a multi-line label (image + text rows) for the\n                              // selected value too, so keep it in flow instead of the default absolute\n                              // centering — otherwise the control keeps its single-line height and the\n                              // value spills out of it\n                              position: 'relative',\n                              top: 'auto',\n                              transform: 'none',\n                              whiteSpace: 'normal',\n                              overflow: 'visible',\n                              padding: '4px 0'\n                            }),\n                            dropdownIndicator: () => ({\n                              fontSize: '1rem',\n                              color: '#757575'\n                            }),\n                            control: provided => ({\n                              ...provided,\n                              borderWidth: `0 0 1px 0`,\n                              borderRadius: '0',\n                              boxShadow: 0,\n                              height: 'auto'\n                            })\n                          },\n                        }}\n                        formControlProps={{\n                          fullWidth: true\n                        }}\n                        helperText={false}\n                      />\n                    </DrawerRow>\n                  </>\n                }\n\n                <DrawerRow drawerView={false}>\n                  <Grid\n                    container={true}\n                    item={true}\n                    justify='flex-end'\n                    alignItems='center'\n                  >\n                    {\n                      isChildFirmWithSharedProduct\n                        ? null\n                        : isChildFirmWithShareableProductLoaded\n                          ? <Button\n                            onClick={this.handleShare}\n                            color='primary'\n                          >\n                            {t('productDrawer.share')}\n                          </Button>\n                          : linkProductId\n                            ? <Tooltip title={t('productDrawer.unlinkTooltip')}>\n                              <Button\n                                onClick={() => this.setState({ unlinkConfirmationDialogOpen: true })}\n                                color='primary'\n                              >\n                                {t('productDrawer.unlink')}\n                              </Button>\n                            </Tooltip>\n                            : <Button\n                              onClick={() => this.setState({ linkConfirmationDialogOpen: true })}\n                              color='primary'\n                              disabled={!productToBeLinkedOrShared}\n                            >\n                              {t('productDrawer.link')}\n                            </Button>\n                    }\n                    {\n                      !(isChildFirmWithShareableProductLoaded || isChildFirmWithSharedProduct) && (\n                        <Button\n                          onClick={() => this.setState({ inheritenceSettingDialogOpen: true })}\n                          color='primary'\n                          disabled={isCheckingDuplicate}\n                        >\n                          {t('productDrawer.setting')}\n                        </Button>\n                      )\n                    }\n                  </Grid>\n                  {\n                    isSuperFirm && (\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='sharedProduct'\n                        component={FieldCheckbox}\n                        props={{\n                          color: 'primary',\n                          variant: 'single',\n                          label: t('productDrawer.sharedProductCheckBoxLabel'),\n                          onChange: (e, v) => dispatch(change(form, 'sharedProduct', v))\n                        }}\n                      />\n                    )\n                  }\n                </DrawerRow>\n\n                {/* display linked product number */}\n                <DrawerRow drawerView={false}>\n                  {\n                    formValues.get('productId') && <>\n                      <Typography color='textPrimary' variant='body1' style={{ marginTop: 8, width: '100%' }}>\n                        {t('productDrawer.currentlyLinkedTo')}\n                      </Typography>\n                      <Typography color='textPrimary' variant='body2' style={{ marginBottom: 16, overflow: 'hidden' }}>\n                        {linkedProduct?.get('productNumber')}\n                      </Typography>\n                    </>\n                  }\n                </DrawerRow>\n\n                {/* product info */}\n                <DrawerRow\n                  muiIcon={<EditRoundedIcon />}\n                  drawerView={false}\n                  text={t('productDrawer.productInfo')}\n                />\n                <DrawerTextFieldRow\n                  name='productNumber'\n                  props={{\n                    label: t('productDrawer.productNumber'),\n                    require: true,\n                    inputProps: {\n                      disabled: (linkProductId && inheritenceSetting.productNumber) || isChildFirmWithSharedProduct || isCheckingDuplicate\n                    }\n                  }}\n                  justify='flex-end'\n                  validate={[isNotEmptyStringRequired]}\n                />\n                <DrawerTextFieldRow\n                  name='itemNumber'\n                  props={{\n                    label: t('productDrawer.internalProductNumber'),\n                    inputProps: {\n                      disabled: isChildFirmWithSharedProduct || isCheckingDuplicate\n                    }\n                  }}\n                  justify='flex-end'\n                  validate={[isEmptyOrContent]}\n                />\n                <DrawerTextFieldRow\n                  name='upc'\n                  props={{\n                    label: t('productDrawer.upc'),\n                    inputProps: {\n                      disabled: (linkProductId && inheritenceSetting.upc) || isChildFirmWithSharedProduct\n                    }\n                  }}\n                  justify='flex-end'\n                  validate={[isEmptyOrContent, this._maxStringLength]}\n                />\n                <DrawerRow drawerView={false}>\n                  <Tooltip\n                    title={formValues.getIn(['brand', 'value']) || ''}\n                    classes={{ popper: classes.tooltipPlacement }}\n                  >\n                    <div style={{ width: '100%' }}>\n                      {/* empty div is for tooltip to work properly */}\n                      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                        name='brand'\n                        component={FieldAutocomplete}\n                        validate={[required]}\n                        props={{\n                          require: true,\n                          inputProps: {\n                            options: manufacturers.toJS(),\n                            label: t('productDrawer.manufacturer'),\n                            disabled: (linkProductId && inheritenceSetting.brand) || isChildFirmWithSharedProduct || isCheckingDuplicate,\n                            getOptionLabel: option => option ? option.value : null,\n                            renderOption: option => option && <Typography>{option.value}</Typography>\n                          },\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                      />\n                    </div>\n                  </Tooltip>\n                  <Tooltip\n                    title={formValues.getIn(['categoryName', 'value']) || ''}\n                    classes={{ popper: classes.tooltipPlacement }}\n                  >\n                    <div style={{ width: '100%' }}>\n                      {/* // This component is made as controlled component because when focusing the input/view inside the Popper,\n                        // the AutoComplete input will blur and the Popper will close. */}\n                      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                        name='categoryName'\n                        component={FieldAutocomplete}\n                        validate={[required]}\n                        props={{\n                          require: true,\n                          inputProps: {\n                            options: categories.toJS(),\n                            label: t('productDrawer.category'),\n                            disabled: (linkProductId && inheritenceSetting.category) || isChildFirmWithSharedProduct,\n                            getOptionLabel: option => option ? option.label || option.value : null,\n                            renderOption: option => option && <Typography>{option.label || option.value}</Typography>,\n                            PaperComponent: this.PaperComponent,\n                            PopperComponent: this.PopperMy,\n                            open: autoCompletePopperOpen,\n                            onOpen: (e: any, reason: string) => {\n                              this.setState({ autoCompletePopperOpen: true });\n                            },\n                            onClose: (e: any, reason: string) => {\n                              if (e?.target?.localName !== 'input') {\n                                this.setState({\n                                  autoCompletePopperOpen: false,\n                                  showCategoryTextField: false,\n                                  newCategoryString: ''\n                                });\n                              }\n                            }\n                          },\n                          formControlProps: {\n                            fullWidth: true\n                          },\n                        }}\n                        onFocus={(e) => this.setState({ autoCompletePopperOpen: true })}\n                      />\n                    </div>\n                  </Tooltip>\n                </DrawerRow>\n                <DrawerTextFieldRow\n                  name='description'\n                  props={{\n                    label: t('productDrawer.description'),\n                    inputProps: {\n                      disabled: (linkProductId && inheritenceSetting.description) || isChildFirmWithSharedProduct\n                    }\n                  }}\n                  multiLine={10}\n                  justify='flex-end'\n                />\n                <DrawerRow drawerView={false}>\n                  <Grid\n                    item={true}\n                    xs={12}\n                  >\n                    <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                      name='uom'\n                      component={FieldAutocomplete}\n                      props={{\n                        inputProps: {\n                          label: t('productDrawer.uom'),\n                          options: UOM,\n                          getOptionLabel: option => option ? option.label : null,\n                          renderOption: option => option && <Typography>{option.label}</Typography>,\n                        },\n                        formControlProps: {\n                          fullWidth: true\n                        }\n                      }}\n                    />\n                  </Grid>\n                </DrawerRow>\n                <DrawerRow drawerView={false} /> {/* empty row for spacing*/}\n\n                {/* ERP */}\n                {\n                  Boolean(firmProductCustomDataList?.size) && <>\n                    <DrawerRow\n                      muiIcon={<TuneIcon />}\n                      drawerView={false}\n                      childrenAlign='center'\n                      childrenJustify='space-between'\n                    >\n                      <Typography variant='body2' color='inherit'>\n                        {t('productDrawer.erp')}\n                      </Typography>\n                      <IconButton size='small' onClick={() => this.toggleSection('erp')}>\n                        {isCollapsedErpRow\n                          ? <UnfoldMoreRoundedIcon fontSize='small' />\n                          : <UnfoldLessIcon fontSize='small' />\n                        }\n                      </IconButton>\n                    </DrawerRow>\n                    <Collapse\n                      in={!isCollapsedErpRow}\n                      className={classes.collapseErp}\n                      classes={{\n                        entered: classes.collapseEntered\n                      }}\n                    >\n                      {\n                        firmProductCustomDataList.map((erp, index) => {\n                          const type = erp.get('type');\n                          const name = erp.get('key');\n                          const label = erp.get('name');\n                          const placeholder = erp.get('placeholder');\n                          const values = erp.get('values');\n                          const validation = erp.get('validation');\n                          return (\n                            <RenderRowComponent key={index} type={type} name={name} label={label} placeholder={placeholder} values={values} validation={validation} />\n                          );\n                        })\n                      }\n                    </Collapse>\n                  </>\n                }\n\n                {/* attachments */}\n                <DrawerRow\n                  muiIcon={<AttachFileRoundedIcon />}\n                  drawerView={false}\n                  childrenAlign='center'\n                  childrenJustify='space-between'\n                >\n                  <Typography variant='body2' color='inherit'>\n                    {t('productDrawer.attachments')}\n                  </Typography>\n                  <IconButton size='small' onClick={() => this.toggleSection('attachment')}>\n                    {isCollapsedAttachmentRow\n                      ? <UnfoldMoreRoundedIcon fontSize='small' />\n                      : <UnfoldLessIcon fontSize='small' />\n                    }\n                  </IconButton>\n                </DrawerRow>\n                <Collapse\n                  in={!isCollapsedAttachmentRow}\n                  className={classes.collapseAttachment}\n                  classes={{\n                    entered: classes.collapseEntered\n                  }}\n                >\n                  <DrawerRow drawerView={false}>\n                    <Tabs\n                      value={this.state.selectedMediaRegion}\n                      onChange={(e, newValue) => this.setState({ selectedMediaRegion: newValue })}\n                      aria-label={t('productDrawer.mediaRegionTabAriaLabel')}\n                      indicatorColor='primary'\n                      textColor='primary'\n                      style={{ width: '100%' }}\n                    >\n                      <Tab label={t('productDrawer.US')} value={LOCALE.EN_US} className={classes.half} />\n                      <Tab label={t('productDrawer.CA')} value={LOCALE.EN_CA} className={classes.half} />\n                    </Tabs>\n                  </DrawerRow>\n                  {/* manufacturer cutsheet upload */}\n                  <DrawerRow drawerView={false}>\n                    {\n                      isFetchingSavedLinkedProduct\n                        ? <Typography variant='body2'>{t('productDrawer.loadingManufacturerCutsheetFile')}</Typography>\n                        : (\n                          <MediaRow\n                            mediaKey={'manufacturer_cutsheet'}\n                            accept={'.pdf'}\n                            uploadTooltip={t('productDrawer.pdfUploadTooltip')}\n                            openLinkTooltip={t('productDrawer.attachLinkTooltip')}\n                            linkedProductMedia={linkedProductMedia}\n                            label={t('productDrawer.manufacturerCutsheetLabel')}\n                            linkLabel={t('productDrawer.manufacturerCutsheetLinkLabel')}\n                            linkPlaceholder={t('productDrawer.manufacturerCutsheetLinkPlaceholder')}\n                            disabledRemoveTooltip={t('productDrawer.disabledManufacturerCutsheetRemoveTooltip')}\n                            atsMediaTooltip={t('productDrawer.atsManufacturerCutsheetTooltip')}\n                            placeholder={t('productDrawer.manufacturerCutsheetPlaceholder')}\n                            mediaDeleteMessage={t('productDrawer.manufacturerCutsheetDeleteMessage')}\n                            localeRegion={this.state.selectedMediaRegion}\n                          />\n                          // <SpecSheetUpload\n                          //   mediaKey={'manufacturer_cutsheet'}\n                          //   accept={'.pdf'}\n                          //   tooltip={t('productDrawer.pdfUploadTooltip')}\n                          //   linkedProductMedia={linkedProductMedia}\n                          //   label={t('productDrawer.manufacturerCutsheetLabel')}\n                          //   disabledRemoveTooltip={t('productDrawer.disabledManufacturerCutsheetRemoveTooltip')}\n                          //   atsMediaTooltip={t('productDrawer.atsManufacturerCutsheetTooltip')}\n                          //   placeholder={t('productDrawer.manufacturerCutsheetPlaceholder')}\n                          //   mediaDeleteMessage={t('productDrawer.manufacturerCutsheetFileDeleteMessage')}\n                          // />\n                        )\n                    }\n                  </DrawerRow>\n                  {/* <DrawerRow drawerView={false}>\n                      {\n                        isFetchingSavedLinkedProduct\n                          ? <Typography variant='body2'>{t('productDrawer.loadingManufacturerCutsheetURL')}</Typography>\n                          : (\n                            <SpecSheetURL\n                              mediaKey={'manufacturer_cutsheet'}\n                              linkedProductMedia={linkedProductMedia}\n                              disabledRemoveTooltip={t('productDrawer.disabledManufacturerCutsheetRemoveTooltip')}\n                              mediaDeleteMessage={t('productDrawer.manufacturerCutsheetLinkDeleteMessage')}\n                            />\n                          )\n                      }\n                    </DrawerRow> */}\n                  {/* shop drawing upload */}\n                  <DrawerRow drawerView={false}>\n                    {\n                      isFetchingSavedLinkedProduct\n                        ? <Typography variant='body2'>{t('productDrawer.loadingShopDrawingFile')}</Typography>\n                        : (\n                          <SpecSheetUpload\n                            mediaKey={'shop_drawing'}\n                            accept={'.pdf'}\n                            tooltip={t('productDrawer.pdfUploadTooltip')}\n                            linkedProductMedia={linkedProductMedia}\n                            label={t('productDrawer.shopDrawingLabel')}\n                            disabledRemoveTooltip={t('productDrawer.disabledShopDrawingRemoveTooltip')}\n                            atsMediaTooltip={t('productDrawer.atsShopDrawingTooltip')}\n                            placeholder={t('productDrawer.shopDrawingPlaceholder')}\n                            mediaDeleteMessage={t('productDrawer.shopDrawingDeleteMessage')}\n                            localeRegion={this.state.selectedMediaRegion}\n                          />\n                        )\n                    }\n                  </DrawerRow>\n                  {/* operation guide upload */}\n                  {\n                    hasOMShopDrawingAcl ? <DrawerRow drawerView={false}>\n                      {\n                        isFetchingSavedLinkedProduct\n                          ? <Typography variant='body2'>{t('productDrawer.loadingOperationGuideFile')}</Typography>\n                          : (\n                            <MediaRow\n                              mediaKey={OPERATION_GUIDE_MEDIA_KEY}\n                              accept={'.pdf'}\n                              uploadTooltip={t('productDrawer.pdfUploadTooltip')}\n                              openLinkTooltip={t('productDrawer.attachOperationGuideLinkTooltip')}\n                              linkedProductMedia={linkedProductMedia}\n                              label={t('productDrawer.operationGuideLabel')}\n                              linkLabel={t('productDrawer.operationGuideLinkLabel')}\n                              linkPlaceholder={t('productDrawer.operationGuideLinkPlaceholder')}\n                              disabledRemoveTooltip={t('productDrawer.disabledOperationGuideRemoveTooltip')}\n                              atsMediaTooltip={t('productDrawer.atsOperationGuideTooltip')}\n                              placeholder={t('productDrawer.operationGuidePlaceholder')}\n                              mediaDeleteMessage={t('productDrawer.operationGuideDeleteMessage')}\n                              localeRegion={this.state.selectedMediaRegion}\n                            />\n                          )\n                      }\n                    </DrawerRow> : null\n                  }\n                  {/* Installation Manual upload */}\n                  {\n                    hasOMShopDrawingAcl ? <DrawerRow drawerView={false}>\n                      {\n                        isFetchingSavedLinkedProduct\n                          ? <Typography variant='body2'>{t('productDrawer.loadingInstallationManualFile')}</Typography>\n                          : (\n                            <MediaRow\n                              mediaKey={INSTALLATION_MANUAL_MEDIA_KEY}\n                              accept={'.pdf'}\n                              uploadTooltip={t('productDrawer.pdfUploadTooltip')}\n                              openLinkTooltip={t('productDrawer.attachInstallationManualLinkTooltip')}\n                              linkedProductMedia={linkedProductMedia}\n                              label={t('productDrawer.installationManualLabel')}\n                              linkLabel={t('productDrawer.installationManualLinkLabel')}\n                              linkPlaceholder={t('productDrawer.installationManualLinkPlaceholder')}\n                              disabledRemoveTooltip={t('productDrawer.disabledInstallationManualRemoveTooltip')}\n                              atsMediaTooltip={t('productDrawer.atsInstallationManualTooltip')}\n                              placeholder={t('productDrawer.installationManualPlaceholder')}\n                              mediaDeleteMessage={t('productDrawer.installationManualDeleteMessage')}\n                              localeRegion={this.state.selectedMediaRegion}\n                            />\n                          )\n                      }\n                    </DrawerRow> : null\n                  }\n                  {/* Warranty upload */}\n                  {\n                    hasOMShopDrawingAcl ? <DrawerRow drawerView={false}>\n                      {\n                        isFetchingSavedLinkedProduct\n                          ? <Typography variant='body2'>{t('productDrawer.loadingWarrantyFile')}</Typography>\n                          : (\n                            <MediaRow\n                              mediaKey={WARRANTY_MEDIA_KEY}\n                              accept={'.pdf'}\n                              uploadTooltip={t('productDrawer.pdfUploadTooltip')}\n                              openLinkTooltip={t('productDrawer.attachWarrantyLinkTooltip')}\n                              linkedProductMedia={linkedProductMedia}\n                              label={t('productDrawer.warrantyLabel')}\n                              linkLabel={t('productDrawer.warrantyLinkLabel')}\n                              linkPlaceholder={t('productDrawer.warrantyLinkPlaceholder')}\n                              disabledRemoveTooltip={t('productDrawer.disabledWarrantyRemoveTooltip')}\n                              atsMediaTooltip={t('productDrawer.atsWarrantyTooltip')}\n                              placeholder={t('productDrawer.warrantyPlaceholder')}\n                              mediaDeleteMessage={t('productDrawer.warrantyDeleteMessage')}\n                              localeRegion={this.state.selectedMediaRegion}\n                            />\n                          )\n                      }\n                    </DrawerRow> : null\n                  }\n                  {/* <DrawerRow drawerView={false}>\n                      {\n                        isFetchingSavedLinkedProduct\n                          ? <Typography variant='body2'>{t('productDrawer.loadingShopDrawingURL')}</Typography>\n                          : (\n                            <SpecSheetURL\n                              mediaKey={'shop_drawing'}\n                              linkedProductMedia={linkedProductMedia}\n                              disabledRemoveTooltip={t('productDrawer.disabledShopDrawingRemoveTooltip')}\n                              mediaDeleteMessage={t('productDrawer.shopDrawingLinkDeleteMessage')}\n                            />\n                          )\n                      }\n                    </DrawerRow> */}\n                </Collapse>\n\n                {/* price */}\n                <DrawerRow\n                  muiIcon={<AttachMoneyIcon />}\n                  drawerView={false}\n                  childrenAlign='center'\n                  childrenJustify='space-between'\n                >\n                  <Typography variant='body2' color='inherit'>\n                    {t('productDrawer.setProductPrices')}\n                  </Typography>\n                  <Tooltip\n                    title={\n                      isCollapsedPriceRow\n                        ? t('productDrawer.expand')\n                        : t('productDrawer.collapse')\n                    }\n                  >\n                    <IconButton size='small' onClick={() => this.toggleSection('price')}>\n                      {isCollapsedPriceRow\n                        ? <UnfoldMoreRoundedIcon fontSize='small' />\n                        : <UnfoldLessIcon fontSize='small' />\n                      }\n                    </IconButton>\n                  </Tooltip>\n                </DrawerRow>\n                <DrawerRow drawerView={true}>\n                  <Collapse\n                    in={!isCollapsedPriceRow}\n                    className={classes.collapse}\n                    classes={{\n                      entered: classes.collapseEntered\n                    }}\n                  >\n                    {\n                      this.regionPricingData()\n                        ? this.regionPricingData().map((regionPrice: IMap<IPriceWithLabel>, index) => (\n                          <PriceExpansionPanel\n                            key={regionPrice.first().get('id')}\n                            regionTitle={regionPrice.first().get('label')}\n                            regionId={regionPrice.first().get('id')}\n                            defaultExpanded={quoteRegion.get('id') ? regionPrice.first().get('id') === quoteRegion.get('id') : !index}\n                            initialCurrency={\n                              vendorQuoteProduct\n                                ? selectedCurrency\n                                : loggedInUserOfficeLocation?.getIn(['country', 'id']) === GEOLOCATION_ID.canada ? CURRENCY.CAD : CURRENCY.USD\n                            }\n                            disabled={(linkProductId && inheritenceSetting.price && !isChildFirmWithSharedProduct) || (isChildFirmWithSharedProduct && regionPrice.first().get('id') === 'default')}\n                          />\n                        )).valueSeq()\n                        : <PriceExpansionPanel\n                          regionTitle='default'\n                          regionId='default'\n                          initialCurrency={\n                            vendorQuoteProduct\n                              ? selectedCurrency\n                              : loggedInUserOfficeLocation?.getIn(['country', 'id']) === GEOLOCATION_ID.canada ? CURRENCY.CAD : CURRENCY.USD\n                          }\n                          defaultExpanded={true}\n                          disabled={(linkProductId && inheritenceSetting.price && !isChildFirmWithSharedProduct) || isChildFirmWithSharedProduct}\n                        />\n                    }\n                  </Collapse>\n                </DrawerRow>\n\n                {\n                  (isSuperFirm && formValues.get('sharedProduct') && productData) && <>\n                    <DrawerRow\n                      muiIcon={<PeopleIcon />}\n                      drawerView={true}\n                      text={t('productDrawer.sharedWithSection')}\n                    />\n                    <DrawerRow>\n                      {\n                        productData?.get('productSharing')?.map((firm, index) => <Tooltip key={index} title={firm.get('firmName')}><Chip label={firm.get('firmName')} className={classes.firmChip} /></Tooltip>)\n                      }\n                    </DrawerRow>\n                  </>\n                }\n\n                <DrawerRow\n                  muiIcon={<LocalOfferIcon />}\n                  drawerView={true}\n                  text={t('productDrawer.keyword')}\n                />\n                <DrawerRow>\n                  <Typography>{t('productDrawer.keywordDiscription')}</Typography>\n                  <TextField\n                    error={this.state.includeSpacesError}\n                    helperText={this.state.includeSpacesError && t('productDrawer.spacesErrorMessage')}\n                    name='keywords'\n                    label={t('productDrawer.enterKeyword')}\n                    onKeyPress={this.handleKeywordFieldOnPressEnter}\n                    onChange={this.handleOnKeywordChange}\n                    fullWidth={true}\n                  />\n                  {\n                    fromJS((formValues.get('keywords') || '').split(' ')).map((data, index) =>\n                      data &&\n                      <Tooltip key={index} title={data}>\n                        <Chip\n                          label={data}\n                          onDelete={hasFirmAdminAclRole || isOfficeAdmin ? () => this.handleOnKeywordDelete(data, index) : null} // tslint:disable-line\n                          className={classes.keywordChip}\n                        />\n                      </Tooltip>\n                    )\n                  }\n                </DrawerRow>\n\n                <Grid\n                  container={true}\n                  className={classes.cta}\n                >\n                  {\n                    saveButtonDisabled\n                      ? <Grid container={true} alignItems='center' wrap='nowrap'>\n                        <CircularProgress size='1.4em' style={{ marginRight: 12 }} />\n                        <Typography variant='body2' color='textPrimary'>\n                          {t('generalLoading.processing')}\n                        </Typography>\n                      </Grid>\n                      : <>\n                        <Button\n                          onClick={toggleDrawer}\n                          color='primary'\n                          disabled={saveButtonDisabled || isCheckingDuplicate}\n                        >\n                          {t('formButtons.cancel')}\n                        </Button>\n                        {\n                          displayDetailSaveMenuForQuote\n                            ? <Button\n                              onClick={(e) => this.setState({ saveAnchorEl: saveAnchorEl ? null : e.currentTarget })}\n                              color='primary'\n                              disabled={saveButtonDisabled || isCheckingDuplicate}\n                              endIcon={saveAnchorEl ? <ExpandMoreIcon /> : <ExpandLessIcon />}\n                            >\n                              {t('formButtons.save')}\n                            </Button>\n                            : <Button\n                              onClick={handleSubmit((_formValues) => this.onSubmit({ values: _formValues, closeOnSuccuss: isExistingFirmProduct }))}\n                              color='primary'\n                              disabled={saveButtonDisabled || isCheckingDuplicate}\n                            >\n                              {t('formButtons.save')}\n                            </Button>\n                        }\n                        {\n                          isCheckingDuplicate && <CircularProgress size='1.4em' style={{ marginLeft: 12 }} />\n                        }\n\n                        <MuiMenu\n                          anchorEl={saveAnchorEl}\n                          open={Boolean(saveAnchorEl)}\n                          transformOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n                          onClose={() => this.setState({ saveAnchorEl: null })}\n                        >\n                          {\n                            callbackWithProduct ? (\n                              <MenuItem disabled={isCheckingDuplicate} onClick={handleSubmit((_formValues) => this.onSubmit({ values: _formValues, closeOnSuccuss: true, addToImportModal: Boolean(callbackWithProduct) }))}>\n                                {t('productDrawer.saveAndAddProduct')}\n                              </MenuItem>\n                            ) : (\n                              <MenuItem disabled={isCheckingDuplicate} onClick={handleSubmit((_formValues) => this.onSubmit({ values: _formValues, closeOnSuccuss: true, addToQuote: true }))}>\n                                {t('productDrawer.saveAndAddToQuote')}\n                              </MenuItem>\n                            )\n                          }\n                          <MenuItem disabled={isCheckingDuplicate} onClick={handleSubmit((_formValues) => this.onSubmit({ values: _formValues, closeOnSuccuss: true }))}>\n                            {t('productDrawer.saveAndExit')}\n                          </MenuItem>\n                        </MuiMenu>\n                      </>\n                  }\n                </Grid>\n              </form>\n            )\n        }\n        <UnlinkConfirmationDialog\n          open={unlinkConfirmationDialogOpen}\n          onClose={() => this.setState({ unlinkConfirmationDialogOpen: false })}\n          onConfirm={this.handleUnlink}\n        />\n        <LinkConfirmationDialog\n          open={linkConfirmationDialogOpen}\n          onClose={() => this.setState({ linkConfirmationDialogOpen: false })}\n          onConfirm={this.handleLink}\n        />\n        <InheritenceSettingDialog\n          open={inheritenceSettingDialogOpen}\n          inheritenceSetting={inheritenceSetting}\n          onClose={() => this.setState({ inheritenceSettingDialogOpen: false })}\n          onSave={this.onSaveSetting}\n        />\n        <DuplicateProductDialog\n          open={Boolean(duplicateProduct)}\n          productNumber={duplicateProduct?.get('productNumber')}\n          itemNumber={duplicateProduct?.get('itemNumber')}\n          brand={duplicateProduct?.get('brand')}\n          onCancel={this.handleDuplicateCancel}\n          onProceed={this.handleDuplicateProceed}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200]\n    }\n  },\n  body: {\n    margin: theme.spacing(3, 3, 0, 3),\n    color: theme.palette.text.primary\n  },\n  searchPlaceHolder: {\n    fontSize: '.75rem',\n  },\n  half: {\n    minWidth: '50%'\n  },\n  optionLabel: {\n    cursor: 'pointer'\n  },\n  searchResultNumberText: {\n    color: theme.palette.text.primary,\n    wordBreak: 'break-all' as const,\n    // fontSize: '.85rem'\n  },\n  zeroWidthAndGrow: {\n    width: 0,\n    flexGrow: 1,\n  },\n  searchResultDescriptionText: {\n    color: theme.palette.text.secondary,\n  },\n  collapse: {\n    width: '100%',\n    padding: theme.spacing(2, 0.25, 1, 0.25)\n  },\n  collapseErp: {\n    width: '100%',\n    padding: theme.spacing(0, 0.25, 2, 0.25),\n  },\n  collapseAttachment: {\n    width: '100%',\n    padding: theme.spacing(0, 0.25, 3, 0.25)\n  },\n  collapseEntered: {\n    overflow: 'hidden !important'\n  },\n  icon: {\n    color: theme.palette.grey[600]\n  },\n  infoIcon: {\n    marginLeft: theme.spacing()\n  },\n  tooltipPlacement: {\n    top: `${theme.spacing(-3)}px !important`\n  },\n  keywordChip: {\n    borderRadius: theme.shape.borderRadius,\n    marginTop: theme.spacing(0.5),\n    marginRight: theme.spacing(0.5),\n    marginBottom: theme.spacing(0.5),\n    maxWidth: '190px'\n  },\n  uploadPhoto: {\n    height: theme.spacing(24),\n    marginBottom: theme.spacing()\n  },\n  bottonMargin: {\n    marginBottom: theme.spacing(),\n  },\n  fetchingLinked: {\n    marginTop: theme.spacing(3)\n  },\n  paperComponent: {\n    padding: theme.spacing()\n  },\n  newCategoryInput: {\n    marginBottom: theme.spacing(2)\n  },\n  newCategoryInputFont: {\n    fontSize: '0.7em'\n  },\n  firmChip: {\n    overflow: 'hidden',\n    margin: 2\n  },\n  cta: {\n    padding: theme.spacing(2, 0),\n    position: 'sticky',\n    bottom: '0',\n    background: theme.palette.common.white\n  },\n});\n\nexport const PRODUCT_DRAWER_EDIT_FORM = 'ProductDrawerEdit';\n\nconst transformValuesForInitialValues = (productData, manufacturerId, sharedProduct) => {\n  return productData.withMutations((ctx) => {\n    if (!ctx.get('price')?.size) {\n      ctx.set('price', Map({}));\n    }\n    const customData = ctx.get('customData');\n    if (!customData?.size) {\n      ctx.set('customData', Map({}));\n    } else {\n      // transform customData for text type\n      const transformedCustomData = customData.map((data) => {\n        if (data.get('label') === null) {\n          return data.get('value');\n        }\n        return data;\n      });\n      ctx.set('customData', transformedCustomData);\n    }\n    ctx.set('sharedProduct', sharedProduct);\n    const uomValue = productData.get('uom');\n    return ctx\n      .set('categoryName', productData.get('category') == null ? null : Map({\n        id: productData.get('category'),\n        value: productData.get('categoryName')\n      }))\n      .set('brand', manufacturerId == null ? null : Map({\n        id: manufacturerId,\n        value: productData.get('brand')\n      }))\n      .set('uom', uomValue ? Map({\n        label: UOM.find(uom => uom.value === uomValue)?.label || '',\n        value: uomValue\n      }) : null);\n  });\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const initialProductData = ownProps.productData && ownProps.productData.has('firmProduct')\n    ? ownProps.productData.get('firmProduct')\n    : ownProps.productData;\n\n  const sharedProduct = ownProps.productData?.get('sharedProduct');\n\n  const productData = initialProductData != null\n    ? initialProductData.get('id')\n      ? initialProductData\n      : initialProductData.set('productNumber', [i18next.t('translations:productDrawer.copyOf'), initialProductData.get('productNumber')].join(' '))\n    : Map<string, any>();\n\n  // api returns product without manufacturerId\n  // have to pull manufacturerId out from selector\n  const manufacturersList = makeSelectManufacturer()(state);\n\n  const manufacturerId = initialProductData && manufacturersList\n    .filter(manufacturer => manufacturer.get('value') === initialProductData.get('brand'))\n    .getIn([0, 'id']);\n\n  // product comes in as 'brand' but needs to be sent to create\n  const structuredProduct = productData.mapKeys((key: string) => {\n    return key === 'manufacturer' ? 'brand' : key;\n  });\n\n  const firmProductCustomDataList = makeSelectFirmProductCustomDataList()(state);\n\n  const initialValues = !initialProductData\n    ? Map<string, any>()\n    : transformValuesForInitialValues(structuredProduct, manufacturerId, Boolean(sharedProduct));\n  const form = ownProps.form != null ? ownProps.form : PRODUCT_DRAWER_EDIT_FORM;\n  const selector = formValueSelector(PRODUCT_DRAWER_EDIT_FORM);\n  const productToBeLinkedOrShared: Partial<IMap<Product>> = selector(state, 'productNumberLink');\n\n  return {\n    form,\n    initialValues,\n    productToBeLinkedOrShared,\n    manufacturers: manufacturersList,\n    firmProductCustomDataList,\n    quoteRegion: quoteFormSelector(['region'])(state),\n    ...createStructuredSelector({\n      formValues: getFormValues(PRODUCT_DRAWER_EDIT_FORM),\n      categories: makeSelectCategory(),\n      isModalOpen: makeSelectOverlayComponent(PRODUCT_DRAWER_ID),\n      pimProducts: makeSelectSearchedPimProducts(),\n      isLoadingQuickSearch: makeSelectQuickSearchPimProductsLoading(),\n      sharedProducts: makeSelectSharedProductsList(),\n      isFetchingSharedProducts: makeSelectIsFetchingSharedProductsList(),\n      pricingRegions: makeSelectOfficePricingRegions(),\n      savedLinkedProduct: makeSelectProduct(),\n      isFetchingSavedLinkedProduct: makeSelectIsFetchingProduct(),\n      hasFirmAdminAclRole: makeSelectUserHasFirmAdmin(),\n      isSaveFirmCategoryLoading: makeSelectSaveFirmCategoryLoading(),\n      isSuperFirm: makeSelectIsSuperFirm(),\n      isChildFirm: makeSelectIsChildFirm(),\n      userFirmId: makeSelectUserFirmId(),\n      isOfficeAdmin: makeSelectUserOfficeAdmin(),\n      hasOMShopDrawingAcl: makeSelectUserHasOMShopDrawingAcl(),\n      isFetchingFirmProduct: makeSelectIsFetchingFirmProduct(),\n      searchedFirmProductList: makeSelectSearchedFirmProductsList(),\n      isFetchingFirmProducts: makeSelectIsFetchingFirmProducts(),\n      loggedInUserOfficeLocation: makeSelectLoggedInUserOfficeLocation(),\n    })(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n    quickSearch: (query: string) => {\n      dispatch(new QuickSearchPimProducts({ searchTerm: query }));\n    },\n    quickSearchSharedProducts: (query: string) => {\n      dispatch(new SearchSharedProductsAction({\n        filters: {\n          'and': [\n            {\n              'productSearch': {\n                'match': query\n              }\n            }\n          ]\n        }\n      }));\n    },\n    getRegions: () => {\n      dispatch(new GetRegionsAction({ type: 'office', regionType: 'P' }));\n    },\n    getLinkedProduct: (productId: number) => {\n      dispatch(new GetProductByIdAction({ productId }));\n    },\n    saveFirmCategory: (name: string, onSuccess?: (newCategory: ListItem) => void) => {\n      dispatch(new SaveFirmCategoryAction({ name, onSuccess }));\n    },\n    searchFirmProducts: (query: string) => dispatch(new SearchFirmProductsAction({\n      filters: {\n        'and': [\n          {\n            'productSearch': {\n              'match': query\n            }\n          },\n          {\n            'productNumber': {\n              'eq': query\n            }\n          }\n        ]\n      },\n      options: {\n        // ...options,\n        orderBy: {\n          id: -1\n        } as any,\n      },\n    })),\n  };\n};\n\nexport default compose<React.ComponentClass<IProductDrawerEditComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: PRODUCT_DRAWER_EDIT_FORM }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(ProductDrawerEdit);\n","import * as React from 'react';\nimport { Grid, Typography, Theme, Tooltip } from '@material-ui/core';\nimport { withStyles, WithStyles, StyleRules } from '@material-ui/styles';\nimport { IMap } from 'ats-utils/src';\nimport { PriceCurrencyInterface } from '../../models/Price';\nimport CountryFlag from '../../containers/Expansion/CountryFlag';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport CheckIcon from '@material-ui/icons/Check';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { connect } from 'react-redux';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { SiteName } from '../../constants';\nimport { useDrawerExpanded } from '../../hooks/useDrawerExpanded';\n\ntype PriceCurrency = 'CAD' | 'USD';\ntype PriceType = 'list' | 'sell' | 'cost';\n\ninterface IPriceTableItemComponentProps {\n  priceData: IMap<PriceCurrencyInterface>;\n}\n\ninterface IPriceTableItemProps extends IPriceTableItemComponentProps {\n  site: SiteName;\n}\n\ntype PriceTableItemProps = IPriceTableItemProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst PriceTableItem: React.FC<PriceTableItemProps> = (props) => {\n  const {\n    priceData,\n    classes,\n    site,\n    t\n  } = props;\n\n  const drawerIsExpanded = useDrawerExpanded();\n\n  const isPimTool = site === SiteName.pim;\n\n  // The CAD \"POA\" tooltip is worded (and sized) differently outside the PIM tool.\n  const renderTypeLabel = (currency: PriceCurrency, type: PriceType) => {\n    if (type !== 'list') {\n      return t(`productDrawer.${type}`);\n    }\n\n    if (!priceData.getIn([currency, 'isPoa'])) {\n      return t('productDrawer.list');\n    }\n\n    const useSpecPoaTooltip = currency === 'CAD' && !isPimTool;\n\n    return (\n      <span>\n        {t('productDrawer.POA')}\n        <Tooltip\n          title={useSpecPoaTooltip ? t('productDrawer.priceIsPOATooltip') : t('productDrawer.priceOnApplication')}\n          classes={useSpecPoaTooltip ? {popper: classes.tooltip} : undefined}\n        >\n          <InfoIcon color='action' style={{fontSize: '0.8rem'}}/>\n        </Tooltip>\n      </span>\n    );\n  };\n\n  const renderTypeValue = (currency: PriceCurrency, type: PriceType) =>\n    type === 'list' && priceData.getIn([currency, 'isPoa'])\n      ? <CheckIcon color='primary' />\n      : priceData.getIn([currency, type]);\n\n  const renderPrices = (currency: PriceCurrency) => {\n    const priceTypes: PriceType[] = ['list', 'sell', 'cost'];\n\n    // Collapsed drawer is too narrow for a three-column table, so stack one\n    // type/value pair per row instead.\n    if (!drawerIsExpanded) {\n      return priceTypes.map((type) => (\n        <Grid container={true} key={type}>\n          <Grid item={true} xs={6}>\n            <Typography variant='body2' color='inherit'>{renderTypeLabel(currency, type)}</Typography>\n          </Grid>\n          <Grid item={true} xs={6}>\n            <Typography variant='body2' color='inherit'>{renderTypeValue(currency, type)}</Typography>\n          </Grid>\n        </Grid>\n      ));\n    }\n\n    return (\n      <>\n        <Grid container={true}>\n          {priceTypes.map((type) => (\n            <Grid item={true} xs={4} key={type}>\n              <Typography variant='body2' color='inherit'>{renderTypeLabel(currency, type)}</Typography>\n            </Grid>\n          ))}\n        </Grid>\n        <Grid container={true}>\n          {priceTypes.map((type) => (\n            <Grid item={true} xs={4} key={type}>\n              <Typography variant='body2' color='inherit'>{renderTypeValue(currency, type)}</Typography>\n            </Grid>\n          ))}\n        </Grid>\n      </>\n    );\n  };\n\n  return (\n    <Grid item={true} xs={12} className={classes.root}>\n      <Typography variant='body2' color='inherit'>{priceData.get('label') || ''}</Typography>\n      {/* CAD price */}\n      <Grid container={true} direction='row' style={{marginTop: 4}}>\n        <CountryFlag\n          alt={t('region.canadianFlagAlt')}\n          src={canFlag}\n        />\n        <Typography variant='body2' color='inherit' style={{marginLeft: 4}}>{t('productDrawer.cad')}</Typography>\n      </Grid>\n      {renderPrices('CAD')}\n      {/* USD price */}\n      <Grid container={true} direction='row' style={{marginTop: 4}}>\n        <CountryFlag\n          alt={t('region.usFlagAlt')}\n          src={usFlag}\n        />\n        <Typography variant='body2' color='inherit' style={{marginLeft: 4}}>{t('productDrawer.usd')}</Typography>\n      </Grid>\n      {renderPrices('USD')}\n    </Grid>\n  );\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    color: theme.palette.text.primary\n  },\n  tooltip: {\n    width: 200\n  }\n});\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  site: makeSelectSite()\n})(state);\n\nexport default compose<React.FC<IPriceTableItemComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, null),\n)(PriceTableItem);\n","import { useEffect, useState } from 'react';\nimport { DRAWER_EXPANDED_EVENT, getDrawerExpanded } from '../utils/drawerExpanded';\n\n/**\n * Live view of the shared drawer \"expanded\" preference. Reading\n * `getDrawerExpanded()` directly is not enough for connected components — their\n * props don't change when the flag is toggled, so they never re-render. This\n * mirrors the persisted flag and re-renders on every toggle, in this tab\n * (custom event) or another one (storage event).\n */\nexport function useDrawerExpanded(): boolean {\n  const [expanded, setExpanded] = useState<boolean>(getDrawerExpanded());\n\n  useEffect(() => {\n    const sync = () => setExpanded(getDrawerExpanded());\n    window.addEventListener(DRAWER_EXPANDED_EVENT, sync);\n    window.addEventListener('storage', sync);\n    return () => {\n      window.removeEventListener(DRAWER_EXPANDED_EVENT, sync);\n      window.removeEventListener('storage', sync);\n    };\n  }, []);\n\n  return expanded;\n}\n","import { FIRM_ID } from '../constants';\n\nconst ATS_FIRM_NAME = 'Allied Technical Solutions';\nconst PRICING_DATE_FIELDS = ['costLastUpdatedAt', 'listLastUpdatedAt', 'sellLastUpdatedAt'] as const;\nconst PRICING_USER_FIELDS = {\n  costLastUpdatedAt: 'costLastUpdatedBy',\n  listLastUpdatedAt: 'listLastUpdatedBy',\n  sellLastUpdatedAt: 'sellLastUpdatedBy',\n};\nconst PRICING_FIRM_ID_FIELDS = {\n  costLastUpdatedAt: 'costLastUpdatedByFirmId',\n  listLastUpdatedAt: 'listLastUpdatedByFirmId',\n  sellLastUpdatedAt: 'sellLastUpdatedByFirmId',\n};\nconst CURRENCIES = ['CAD', 'USD'];\n\nexport const getMostRecentPricingUpdate = (productPrices: any): { updatedAt: string | null; updatedBy: string | null } => {\n  let updatedAt: string | null = null;\n  let updatedBy: string | null = null;\n\n  if (!productPrices) {\n    return { updatedAt, updatedBy };\n  }\n\n  const regionKeys = productPrices.keySeq().toArray();\n  regionKeys.forEach((regionId: string) => {\n    const regionPrice = productPrices.get(regionId);\n    CURRENCIES.forEach((currency) => {\n      const currencyPrice = regionPrice?.get?.(currency);\n      if (currencyPrice) {\n        PRICING_DATE_FIELDS.forEach((dateField) => {\n          const date = currencyPrice.get?.(dateField);\n          if (date && (!updatedAt || new Date(date) > new Date(updatedAt))) {\n            updatedAt = date;\n            const firmId = currencyPrice.get?.(PRICING_FIRM_ID_FIELDS[dateField]);\n            const userName = currencyPrice.get?.(PRICING_USER_FIELDS[dateField]) || null;\n            const isAts = Number(firmId) === FIRM_ID.ats || userName === ATS_FIRM_NAME;\n            updatedBy = isAts ? 'ATS' : userName;\n          }\n        });\n      }\n    });\n  });\n\n  return { updatedAt, updatedBy };\n};\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n  Tooltip,\n  Link, Chip,\n  Button,\n  IconButton,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { compose, Dispatch } from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n  Trans,\n} from 'react-i18next';\nimport { Product, FirmProduct, Filter, Option, RegionItem, Status, Address } from '../../models';\nimport { IPriceWithLabel } from '../../models/Price';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces';\nimport { DeleteFirmProductAction, DeleteFirmProductAndSearchFirmProductsAction } from '../../modules/PimModule/actions';\nimport { connect } from 'react-redux';\nimport { makeSelectOverlayComponentProp, makeSelectOverlayComponentProps } from '../../modules/ApplicationModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { PRODUCT_DRAWER_ID } from '../ProductDrawer';\nimport { GetRegionsAction } from '../../modules/LocationModule/actions';\nimport { makeSelectOfficePricingRegions } from '../../modules/LocationModule/selectors';\nimport { fromJS, getIn, List, Map } from 'immutable';\nimport PriceTableItem from './PriceTableItem';\nimport { withAtsApi, WithAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectProduct } from '../../modules/PimModule/selectors';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport DrawerRow from '../DrawerRow';\nimport DrawerViewHeader from '../DrawerViewHeader';\nimport undefinedPNG from '../../images/undefined.png';\nimport { SERIES_STATUS_VALUE_MAP, seriesStatusList } from '../StatusChipPim/Component';\nimport classNames from 'classnames';\nimport { getMostRecentPricingUpdate } from '../../utils/getMostRecentPricingUpdate';\nimport { FIRM_ID, GEOLOCATION_ID } from '../../constants';\nimport {\n  makeSelectIsChildFirm,\n  makeSelectIsRestrictedOutsideSalesRep,\n  makeSelectIsSuperFirm,\n  makeSelectUserHasFeatStockLevel,\n  makeSelectUserHasOMShopDrawingAcl,\n  makeSelectUserHasFeatCreateShopDrawingAcl,\n  makeSelectUserFirmId\n} from '../../modules/AtsModule/selectors';\n\n// icons\nimport AttachMoneyIcon from '@material-ui/icons/AttachMoney';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport AccountCircleRoundedIcon from '@material-ui/icons/AccountCircleRounded';\nimport NoteAddIcon from '@material-ui/icons/NoteAdd';\nimport UpdateIcon from '@material-ui/icons/Update';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ShoppingCartIcon from '@material-ui/icons/ShoppingCart';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\nimport PeopleIcon from '@material-ui/icons/People';\nimport AttachFileRoundedIcon from '@material-ui/icons/AttachFileRounded';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\nimport CountryFlag from '../../containers/Expansion/CountryFlag';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport { UOM } from '../ProductDrawerEdit';\nimport AddIcon from '@material-ui/icons/Add';\nimport PDFEditorModal from '../PDFEditorModal';\nimport { generateFileLink } from '../../utils/helpers';\nimport { isProductSharedWithFirm } from '../../utils/productSharing';\n\ninterface IProductDrawerViewComponentProps {\n  product?: IMap<FirmProduct>;\n  toggleDrawer: () => void;\n  editAction?: () => void;\n  copyAction?: () => void;\n  deleteAction?: () => void;\n  onProductUpdated?: () => void;\n}\n\ninterface IProductDrawerViewProps extends IProductDrawerViewComponentProps {\n  dispatch: Dispatch<IAction>;\n  deleteFirmProduct: (productId: number) => void;\n  propsFromRedux: any;\n  deleteAndSearch: ({ productId, options, filters, sharedProduct }: { productId: number, options?: Option<FirmProduct>, filters?: Filter, sharedProduct?: boolean }) => void;\n  getRegions: () => void;\n  pricingRegions?: List<IMap<RegionItem>>;\n  savedLinkedProduct: IMap<Product>;\n  hasFeatStockLevelAclRole: boolean;\n  isSuperFirm: boolean;\n  isChildFirm: boolean;\n  hasOMShopDrawingAcl: boolean;\n  loginUserOfficeLocation: IMap<Address>;\n  isRestrictedOutsideSalesRep: boolean;\n  hasFeatCreateShopDrawingAcl: boolean;\n  userFirmId: number;\n}\n\ntype ProductDrawerViewType = IProductDrawerViewProps & WithTranslation & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ProductDrawerView extends React.Component<ProductDrawerViewType, { pdfEditorOpen: boolean }> {\n  public state = { pdfEditorOpen: false };\n\n  public componentDidMount() {\n    if (!this.props.pricingRegions.size) {\n      this.props.getRegions();\n    }\n  }\n\n  public handleDelete = (id: number) => {\n    const { deleteFirmProduct, toggleDrawer, propsFromRedux, deleteAndSearch, product } = this.props;\n    const {\n      options,\n      filters\n    } = propsFromRedux.get(PRODUCT_DRAWER_ID);\n    product\n      ? deleteAndSearch({ productId: id, options, filters })\n      : deleteFirmProduct(id);\n    toggleDrawer();\n  }\n\n  public regionPricingData = () => {\n    const {\n      pricingRegions,\n      product,\n      t\n    } = this.props;\n\n    const productPrices = product?.getIn(['firmProduct', 'price']);\n    const priceKeys = productPrices && productPrices.keySeq().toArray();\n\n    // mapped against pricingRegions\n    // pricingRegions call will always return default pricing first\n    // so pricing panel order based off of this\n    const adjustedPricingRegions = pricingRegions && pricingRegions.reduce((acc, region) => {\n      const regionId = region.get('id');\n      const regionLabel = regionId === 'Default' ? t('productDrawer.default') : region.get('label');\n\n      if (priceKeys && priceKeys.includes(regionId)) {\n        const selectedPrice = productPrices.get(regionId);\n        const priceMap = Map().withMutations((ctx) => {\n          ctx.set(regionId, selectedPrice);\n          ctx.setIn([regionId, 'label'], regionLabel);\n          ctx.setIn([regionId, 'id'], regionId);\n        });\n\n        return acc.push(priceMap);\n      }\n      return acc;\n    }, List());\n\n    return adjustedPricingRegions;\n  }\n\n  public getMediaDataByLocaleRegionOrFallback = (productMap: IMap<FirmProduct>, mediaType: string, getDataType: string) => {\n    const { loginUserOfficeLocation } = this.props;\n    // currently only english on AQ\n    // get country from login user office location\n    const isCanada = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.canada; // only check if Canada, any other pricingRegions get US\n    return isCanada\n      ? productMap.getIn(['file', 'media', 'en-ca', mediaType]) ? productMap.getIn(['file', 'media', 'en-ca', mediaType, getDataType]) : productMap.getIn(['file', 'media', 'en', mediaType, getDataType])\n      : productMap.getIn(['file', 'media', 'en-us', mediaType]) ? productMap.getIn(['file', 'media', 'en-us', mediaType, getDataType]) : productMap.getIn(['file', 'media', 'en', mediaType, getDataType]);\n  }\n\n  public getFileRegionFlag = (languageCode: string) => {\n    const { t } = this.props;\n    switch (languageCode) {\n      case 'en-ca':\n        return <Grid container={true} direction='row'>\n          <CountryFlag\n            alt={t('region.canadianFlagAlt')}\n            src={canFlag}\n          />\n          <Typography variant='body2' color='inherit' style={{ marginLeft: 4 }}>{t('productDrawer.CA')}</Typography>\n        </Grid>;\n      case 'en-us':\n        return <Grid container={true} direction='row'>\n          <CountryFlag\n            alt={t('region.usFlagAlt')}\n            src={usFlag}\n          />\n          <Typography variant='body2' color='inherit' style={{ marginLeft: 4 }}>{t('productDrawer.US')}</Typography>\n        </Grid>;\n      case 'en':\n        return null;\n      default:\n        return null;\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      toggleDrawer,\n      // savedLinkedProduct = Map(),\n      product = Map(),\n      t,\n      pricingRegions,\n      hasFeatStockLevelAclRole,\n      isSuperFirm,\n      isChildFirm,\n      hasOMShopDrawingAcl,\n      isRestrictedOutsideSalesRep,\n      onProductUpdated,\n      hasFeatCreateShopDrawingAcl,\n      userFirmId,\n    } = this.props;\n\n    const productData = product.get('firmProduct');\n\n    const productId = productData.get('id');\n    const imageSize = 120;\n    const imageSrc = productData.getIn(['file', 'images', 'main', 'fileId']) || '';\n\n    const imgData = imageSrc\n      ? {\n        imgComponentProps: {\n          imgId: imageSrc,\n          imgSize: imageSize,\n        }\n      }\n      : {\n        imgProps: {\n          src: undefinedPNG,\n          alt: 'No product image'\n        }\n      };\n\n    const creator = productData.getIn(['createdBy', 'firm', 'id']) === FIRM_ID.ats ? 'ATS' : productData.getIn(['createdBy', 'user', 'name']);\n    const modifier = productData.getIn(['modifiedBy', 'firm', 'id']) === FIRM_ID.ats ? 'ATS' : productData.getIn(['modifiedBy', 'user', 'name']);\n    const rawModifiedDate = productData.get('dateModified');\n    const modifiedDate = rawModifiedDate ? utcToLocal(rawModifiedDate, true) : t('productDrawer.na');\n    const rawCreatedDate = productData.get('dateAdded');\n    const createdDate = rawCreatedDate ? utcToLocal(rawCreatedDate, true) : t('productDrawer.na');\n\n    const { updatedAt: pricingUpdatedAt, updatedBy: pricingUpdatedBy } = getMostRecentPricingUpdate(productData.get('price'));\n\n    const isCutsheetOverride = this.getMediaDataByLocaleRegionOrFallback(productData, 'manufacturer_cutsheet', 'isOverride') || productData.getIn(['file', 'media', 'manufacturer_cutsheet', 'isOverride']);\n    const cutsheetReferenceProduct = productData;\n\n    const isShopDrawingOverride = this.getMediaDataByLocaleRegionOrFallback(productData, 'shop_drawing', 'isOverride') || productData.getIn(['file', 'media', 'shop_drawing', 'isOverride']);\n    const shopDrawingReferenceProduct = productData;\n\n    const shopDrawingFileName = this.getMediaDataByLocaleRegionOrFallback(shopDrawingReferenceProduct, 'shop_drawing', 'filename') || '';\n    const shopDrawingFileId = this.getMediaDataByLocaleRegionOrFallback(shopDrawingReferenceProduct, 'shop_drawing', 'fileId');\n    const shopDrawingLanguageCode = this.getMediaDataByLocaleRegionOrFallback(shopDrawingReferenceProduct, 'shop_drawing', 'languageCode');\n    const shopDrawingFileLink = shopDrawingFileId && generateFileLink(shopDrawingFileId);\n    // const shopDrawingURL = productData.getIn(['file', 'media', 'en', 'shop_drawing', 'url']) || '';\n\n    const isOperationGuideOverride = this.getMediaDataByLocaleRegionOrFallback(productData, 'operation_guide', 'isOverride') || productData.getIn(['file', 'media', 'operation_guide', 'isOverride']);\n    const operationGuideReferenceProduct = productData;\n\n    const operationGuideFileName = this.getMediaDataByLocaleRegionOrFallback(operationGuideReferenceProduct, 'operation_guide', 'filename') || '';\n    const operationGuideFileId = this.getMediaDataByLocaleRegionOrFallback(operationGuideReferenceProduct, 'operation_guide', 'fileId');\n    const operationGuideLanguageCode = this.getMediaDataByLocaleRegionOrFallback(operationGuideReferenceProduct, 'operation_guide', 'languageCode');\n    const operationGuideFileLink = operationGuideFileId && generateFileLink(operationGuideFileId);\n    const operationGuideURL = this.getMediaDataByLocaleRegionOrFallback(productData, 'operation_guide', 'url') || '';\n\n    const isInstallationManualOverride = this.getMediaDataByLocaleRegionOrFallback(productData, 'installation_manual', 'isOverride') || productData.getIn(['file', 'media', 'installation_manual', 'isOverride']);\n    const installationManualReferenceProduct = productData;\n\n    const installationManualFileName = this.getMediaDataByLocaleRegionOrFallback(installationManualReferenceProduct, 'installation_manual', 'filename') || '';\n    const installationManualFileId = this.getMediaDataByLocaleRegionOrFallback(installationManualReferenceProduct, 'installation_manual', 'fileId');\n    const installationManualLanguageCode = this.getMediaDataByLocaleRegionOrFallback(installationManualReferenceProduct, 'installation_manual', 'languageCode');\n    const installationManualFileLink = installationManualFileId && generateFileLink(installationManualFileId);\n    const installationManualURL = this.getMediaDataByLocaleRegionOrFallback(productData, 'installation_manual', 'url') || '';\n\n    const isWarrantyOverride = this.getMediaDataByLocaleRegionOrFallback(productData, 'warranty', 'isOverride') || productData.getIn(['file', 'media', 'warranty', 'isOverride']);\n    const warrantyReferenceProduct = productData;\n\n    const warrantyFileName = this.getMediaDataByLocaleRegionOrFallback(warrantyReferenceProduct, 'warranty', 'filename') || '';\n    const warrantyFileId = this.getMediaDataByLocaleRegionOrFallback(warrantyReferenceProduct, 'warranty', 'fileId');\n    const warrantyLanguageCode = this.getMediaDataByLocaleRegionOrFallback(warrantyReferenceProduct, 'warranty', 'languageCode');\n    const warrantyFileLink = warrantyFileId && generateFileLink(warrantyFileId);\n    const warrantyURL = this.getMediaDataByLocaleRegionOrFallback(productData, 'warranty', 'url') || '';\n\n    const manufacturerCutsheetFileName = this.getMediaDataByLocaleRegionOrFallback(cutsheetReferenceProduct, 'manufacturer_cutsheet', 'filename') || '';\n    const manufacturerCutsheetFileId = this.getMediaDataByLocaleRegionOrFallback(cutsheetReferenceProduct, 'manufacturer_cutsheet', 'fileId');\n    const manufacturerCutsheetLanguageCode = this.getMediaDataByLocaleRegionOrFallback(cutsheetReferenceProduct, 'manufacturer_cutsheet', 'languageCode');\n    const manufacturerCutsheetFileLink = manufacturerCutsheetFileId && generateFileLink(manufacturerCutsheetFileId);\n    const manufacturerCutsheetURL = this.getMediaDataByLocaleRegionOrFallback(productData, 'manufacturer_cutsheet', 'url') || '';\n    const hasPdfCutsheet = !!(manufacturerCutsheetFileId && manufacturerCutsheetFileName && manufacturerCutsheetFileName.toLowerCase().endsWith('.pdf'));\n\n    const currentStatus = productData.get('status');\n    const statusLabelPath = SERIES_STATUS_VALUE_MAP.getIn([currentStatus, 'labelPath']);\n    const currentStatusMap = seriesStatusList && seriesStatusList.find((status: IMap<Status>) => status.get('value') === currentStatus);\n    const currentStatusClass = currentStatus ? classes[`__${currentStatusMap && currentStatusMap.get('id')}`] : classes.null;\n\n    const stockRegions = productData?.get('stockLevels');\n    const stockRegionIds = stockRegions ? Object.keys(stockRegions.toJS()) : [];\n\n    const keywords = productData.get('keywords') || '';\n\n    const disableDuplicate = isChildFirm && product.get('sharedProduct');\n\n    const uomValue = productData.get('uom');\n\n    const createdBySameFirm = product.get('firmId') === userFirmId;\n    const currentlySharedWithMe = product.get('sharedProduct') && !createdBySameFirm && isProductSharedWithFirm(product, userFirmId);\n\n    const displayPdfEditor = hasFeatCreateShopDrawingAcl && hasPdfCutsheet && (createdBySameFirm || (!createdBySameFirm && currentlySharedWithMe));\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n\n        {/* header */}\n        <DrawerViewHeader\n          imageProps={{ ...imgData }}\n          menuItems={isRestrictedOutsideSalesRep ? [] : [\n            { action: t('formButtons.edit'), onClick: this.props.editAction || null },\n            { action: t('formButtons.duplicate'), onClick: disableDuplicate ? null : this.props.copyAction || null },\n            // { action: t('formButtons.delete'), onClick: () => this.props.deleteAction ? this.props.deleteAction() : this.handleDelete(productId) } // just checked once seems handleDelete is not using, hide it for now\n            { action: t('formButtons.delete'), onClick: this.props.deleteAction || null } // null for indicating disabled status for the menu items\n          ]}\n          title={productData.get('productNumber')}\n          handleClose={toggleDrawer}\n          otherElements={\n            <div className={classes.chipContainer}>\n              <div className={classNames(classes.chip, currentStatusClass)} onMouseDown={e => e.stopPropagation()}>\n                <Typography>\n                  {statusLabelPath ? t(statusLabelPath) : (currentStatus || '-')}\n                </Typography>\n              </div>\n            </div>\n          }\n        />\n\n        {/* content */}\n        <Grid\n          container={true}\n          direction='column'\n          wrap='nowrap'\n          className={classes.body}\n        >\n          <DrawerRow\n            muiIcon={<EditRoundedIcon />}\n            text={t('productDrawer.productInfo')}\n          />\n          <DrawerRow>\n            <Grid container={true} direction='column' style={{ wordBreak: 'break-word' }}>\n              <Tooltip title={t('productDrawer.internalProductNumber')} placement='bottom-start'>\n                <Typography variant='body2' color='inherit' className={classes.productInfoItem}>\n                  {productData.get('itemNumber')}\n                </Typography>\n              </Tooltip>\n              <Tooltip title={t('productDrawer.upc')} placement='bottom-start'>\n                <Typography variant='body2' color='inherit' className={classes.productInfoItem}>\n                  {productData.get('upc')}\n                </Typography>\n              </Tooltip>\n              <Tooltip title={t('productDrawer.category')} placement='bottom-start'>\n                <Typography variant='body2' color='inherit' className={classes.productInfoItem}>\n                  {productData.get('categoryName')}\n                </Typography>\n              </Tooltip>\n              <Tooltip title={t('productDrawer.description')} placement='bottom-start'>\n                <Typography variant='body2' color='inherit' className={classes.productInfoItem}>\n                  {productData.get('description')}\n                </Typography>\n              </Tooltip>\n              <Tooltip title={t('productDrawer.uom')} placement='bottom-start'>\n                <Typography variant='body2' color='inherit' className={classes.productInfoItem}>\n                  {UOM.find(uom => uom.value === uomValue)?.label || ''}\n                </Typography>\n              </Tooltip>\n            </Grid>\n          </DrawerRow>\n          {/* attachments */}\n          <DrawerRow\n            muiIcon={<AttachFileRoundedIcon />}\n            text={t('productDrawer.attachments')}\n          />\n          <DrawerRow>\n            <Grid container={true} direction='column'>\n              {/* manufacturer cutsheet */}\n              {(manufacturerCutsheetFileName || manufacturerCutsheetURL) && <>\n                <Typography variant='body2' color='inherit'>{t('productDrawer.manufacturerCutsheetLabel')}</Typography>\n                {this.getFileRegionFlag(manufacturerCutsheetLanguageCode)}\n                <Grid container={true} alignItems='center' wrap='nowrap' className={classes.fileContainer}>\n                  {!isCutsheetOverride && (\n                    <Tooltip title={t('productDrawer.atsManufacturerCutsheetTooltip')}>\n                      <ThumbUpIcon color='primary' className={classes.icon} />\n                    </Tooltip>\n                  )\n                  }\n                  {\n                    manufacturerCutsheetFileName\n                      ? (\n                        <Tooltip title={`${t('productDrawer.manufacturerCutsheetLabel')}: ${manufacturerCutsheetFileName}` || ''}>\n                          <Link href={manufacturerCutsheetFileLink} underline='none' className={classes.file}>{manufacturerCutsheetFileName}</Link>\n                        </Tooltip>\n                      )\n                      : (\n                        <Tooltip title={`${t('productDrawer.manufacturerCutsheetLabel')}: ${manufacturerCutsheetURL}` || ''}>\n                          <Link href={manufacturerCutsheetURL} target={'_blank'} rel='noopener' underline='none' className={classes.file}>\n                            {manufacturerCutsheetURL}\n                          </Link>\n                        </Tooltip>\n                      )\n                  }\n                </Grid>\n              </>}\n              {/* shop drawing */}\n              {shopDrawingFileName\n                ? <>\n                    <Typography variant='body2' color='inherit'>{t('productDrawer.shopDrawingLabel')}</Typography>\n                    {this.getFileRegionFlag(shopDrawingLanguageCode)}\n                    <Grid container={true} alignItems='center' wrap='nowrap' className={classes.fileContainer}>\n                      {!isShopDrawingOverride && (\n                          <Tooltip title={t('productDrawer.atsShopDrawingTooltip')}>\n                            <ThumbUpIcon color='primary' className={classes.icon} />\n                          </Tooltip>\n                        )\n                      }\n                      <Tooltip title={`${t('productDrawer.shopDrawingLabel')}: ${shopDrawingFileName}` || ''}>\n                        <Link href={shopDrawingFileLink} underline='none' className={classes.file}>{shopDrawingFileName}</Link>\n                      </Tooltip>\n                    </Grid>\n                    {\n                      displayPdfEditor && (\n                        <Button\n                          variant='outlined'\n                          color='primary'\n                          style={{ width: 'fit-content'}}\n                          onClick={() => this.setState({ pdfEditorOpen: true })}\n                        >\n                          <Typography variant='body2' color='primary' display='inline' style={{ marginLeft: 4 }}>\n                            {t('formButtons.replace')}\n                          </Typography>\n                        </Button>\n                      )\n                    }\n                  </>\n                : displayPdfEditor\n                  ? <>\n                      <Grid container={true} direction='column'>\n                        <Typography variant='body2' color='inherit'>{t('productDrawer.shopDrawingLabel')}</Typography>\n                        <Button\n                          variant='outlined'\n                          color='primary'\n                          className={classes.createShopDrawingButton}\n                          onClick={() => this.setState({ pdfEditorOpen: true })}\n                        >\n                          <AddIcon fontSize='small' color='primary' />\n                          <Typography variant='body2' color='primary' display='inline' style={{ marginLeft: 4 }}>\n                            {t('formButtons.create')}\n                          </Typography>\n                        </Button>\n                      </Grid>\n                    </>\n                  : null\n              }\n              {/* operation guide */}\n              {\n                hasOMShopDrawingAcl ? <>\n                  {(operationGuideFileName || operationGuideURL) && <>\n                    <Typography variant='body2' color='inherit'>{t('productDrawer.operationGuideLabel')}</Typography>\n                    {this.getFileRegionFlag(operationGuideLanguageCode)}\n                    <Grid container={true} alignItems='center' wrap='nowrap' className={classes.fileContainer}>\n                      {!isOperationGuideOverride && (\n                        <Tooltip title={t('productDrawer.atsOperationGuideTooltip')}>\n                          <ThumbUpIcon color='primary' className={classes.icon} />\n                        </Tooltip>\n                      )\n                      }\n                      {\n                        operationGuideFileName\n                          ? (\n                            <Tooltip title={`${t('productDrawer.operationGuideLabel')}: ${operationGuideFileName}` || ''}>\n                              <Link href={operationGuideFileLink} underline='none' className={classes.file}>{operationGuideFileName}</Link>\n                            </Tooltip>\n                          )\n                          : (\n                            <Tooltip title={`${t('productDrawer.operationGuideLabel')}: ${operationGuideURL}` || ''}>\n                              <Link href={operationGuideURL} target={'_blank'} rel='noopener' underline='none' className={classes.file}>\n                                {operationGuideURL}\n                              </Link>\n                            </Tooltip>\n                          )\n                      }\n                    </Grid>\n                  </>}\n                </> : null\n              }\n              {/* installation manual */}\n              {\n                hasOMShopDrawingAcl ? <>\n                  {(installationManualFileName || installationManualURL) && <>\n                    <Typography variant='body2' color='inherit'>{t('productDrawer.installationManualLabel')}</Typography>\n                    {this.getFileRegionFlag(installationManualLanguageCode)}\n                    <Grid container={true} alignItems='center' wrap='nowrap' className={classes.fileContainer}>\n                      {!isInstallationManualOverride && (\n                        <Tooltip title={t('productDrawer.atsInstallationManualTooltip')}>\n                          <ThumbUpIcon color='primary' className={classes.icon} />\n                        </Tooltip>\n                      )\n                      }\n                      {\n                        installationManualFileName\n                          ? (\n                            <Tooltip title={`${t('productDrawer.installationManualLabel')}: ${installationManualFileName}` || ''}>\n                              <Link href={installationManualFileLink} underline='none' className={classes.file}>{installationManualFileName}</Link>\n                            </Tooltip>\n                          )\n                          : (\n                            <Tooltip title={`${t('productDrawer.installationManualLabel')}: ${installationManualURL}` || ''}>\n                              <Link href={installationManualURL} target={'_blank'} rel='noopener' underline='none' className={classes.file}>\n                                {installationManualURL}\n                              </Link>\n                            </Tooltip>\n                          )\n                      }\n                    </Grid>\n                  </>}\n                </> : null\n              }\n              {/* warranty */}\n              {\n                hasOMShopDrawingAcl ? <>\n                  {(warrantyFileName || warrantyURL) && <>\n                    <Typography variant='body2' color='inherit'>{t('productDrawer.warrantyLabel')}</Typography>\n                    {this.getFileRegionFlag(warrantyLanguageCode)}\n                    <Grid container={true} alignItems='center' wrap='nowrap' className={classes.fileContainer}>\n                      {!isWarrantyOverride && (\n                        <Tooltip title={t('productDrawer.atsWarrantyTooltip')}>\n                          <ThumbUpIcon color='primary' className={classes.icon} />\n                        </Tooltip>\n                      )\n                      }\n                      {\n                        warrantyFileName\n                          ? (\n                            <Tooltip title={`${t('productDrawer.warrantyLabel')}: ${warrantyFileName}` || ''}>\n                              <Link href={warrantyFileLink} underline='none' className={classes.file}>{warrantyFileName}</Link>\n                            </Tooltip>\n                          )\n                          : (\n                            <Tooltip title={`${t('productDrawer.warrantyLabel')}: ${warrantyURL}` || ''}>\n                              <Link href={warrantyURL} target={'_blank'} rel='noopener' underline='none' className={classes.file}>\n                                {warrantyURL}\n                              </Link>\n                            </Tooltip>\n                          )\n                      }\n                    </Grid>\n                  </>}\n                </> : null\n              }\n            </Grid>\n          </DrawerRow>\n\n          {\n            hasFeatStockLevelAclRole ?\n              <DrawerRow\n                muiIcon={<ShoppingCartIcon />}\n                text={t('productDrawer.inventoryLevel')}\n              />\n              :\n              null\n          }\n          {\n            hasFeatStockLevelAclRole && stockRegions ?\n              <DrawerRow>\n                <Grid container={true} direction='column' justify='space-between'>\n                  {\n                    stockRegionIds.map((stockRegionId: string, key: number) => {\n                      const targetedStock = stockRegions.get(stockRegionId);\n                      const regionName = targetedStock.get('regionName');\n                      const stockable = targetedStock.get('stockable');\n                      const qty = targetedStock.get('stockLevel') ?? '-';\n                      return (\n                        <Grid key={key} item={true} container={true} direction='column' className={classes.stockItem}>\n                          <Typography variant='body2' color='initial'>\n                            {regionName}\n                          </Typography>\n                          <Typography variant='body2' color='inherit'>\n                            {stockable ? t('productDrawer.inStock') : t('productDrawer.nonStock')}\n                          </Typography>\n                          <Typography variant='body2' color='inherit'>\n                            {t('productDrawer.qty')}: <span style={{ color: qty < 0 ? 'red' : 'inherit' }}>{qty}</span>\n                          </Typography>\n                        </Grid>\n                      );\n                    })\n                  }\n\n                  {/* <Typography variant='body2' color='initial'>\n                  {t('productDrawer.default')}\n                </Typography>\n                <Typography variant='body2' color='inherit'>\n                  {t('productDrawer.nonStock')}\n                </Typography>\n                <Typography variant='body2' color='inherit'>\n                  {t('productDrawer.qty')}: {100}\n                </Typography>\n                <Typography variant='body2' color='initial'>\n                  {productData.get('region')}\n                </Typography>\n                <Typography variant='body2' color='inherit'>\n                  {t('productDrawer.inStock')}\n                </Typography>\n                <Typography variant='body2' color='inherit'>\n                  {t('productDrawer.qty')}: {100}\n                </Typography> */}\n                </Grid>\n              </DrawerRow>\n              :\n              null\n          }\n\n          <DrawerRow\n            muiIcon={<AttachMoneyIcon />}\n            text={t('productDrawer.priceInfo')}\n          />\n          <DrawerRow>\n            {\n              this.regionPricingData()\n                ? this.regionPricingData().map((regionPrice: IMap<IPriceWithLabel>, key: number | string) => (\n                  <PriceTableItem\n                    key={regionPrice.first().get('id')}\n                    priceData={regionPrice.first()}\n                  />\n                )).valueSeq()\n                : <PriceTableItem\n                  priceData={productData.getIn(['price', 'default'])}\n                />\n            }\n          </DrawerRow>\n\n          {/* child firm's that have already shared this product */}\n          {\n            isSuperFirm && <>\n              <DrawerRow\n                muiIcon={<PeopleIcon />}\n                drawerView={true}\n                text={t('productDrawer.sharedWithSection')}\n              />\n              <DrawerRow>\n                {\n                  product?.get('productSharing')?.map((firm, index) => <Tooltip key={index} title={firm.get('firmName')}><Chip label={firm.get('firmName')} className={classes.firmChip} /></Tooltip>)\n                }\n              </DrawerRow>\n            </>\n          }\n\n          {/* Keyword */}\n          <DrawerRow\n            muiIcon={<LocalOfferIcon />}\n            text={t('productDrawer.keyword')}\n          />\n          <DrawerRow>\n            {keywords && keywords.split(' ').map((data, index) =>\n              <Tooltip key={index} title={data}>\n                <Chip\n                  label={data}\n                  className={classes.keywordChip}\n                />\n              </Tooltip>\n            )}\n          </DrawerRow>\n\n          <DrawerRow muiIcon={<UpdateIcon />}>\n            <Typography variant='body2' color='textPrimary'>\n              <Trans\n                t={t}\n                i18nKey={'productDrawer.pricingUpdatedBy'}\n                values={{\n                  name: pricingUpdatedAt ? (pricingUpdatedBy || t('productDrawer.na')) : (creator || t('productDrawer.na')),\n                  date: pricingUpdatedAt ? pricingUpdatedAt.slice(0, 10) : (createdDate.length > 10 ? createdDate.slice(0, 10) : createdDate)\n                }}\n                components={[\n                  <span key='name' style={{ fontWeight: 700 }} />,\n                  <span key='date' style={{ fontWeight: 700 }} />\n                ]}\n              />\n            </Typography>\n          </DrawerRow>\n          <DrawerRow muiIcon={<NoteAddIcon />}>\n            <Typography variant='body2' color='textPrimary'>\n              <Trans\n                t={t}\n                i18nKey={'productDrawer.createdBy'}\n                values={{\n                  userName: creator || t('productDrawer.na'),\n                  date: createdDate.length > 10 ? createdDate.slice(0, 10) : createdDate\n                }}\n                components={[\n                  <span key='name' style={{ fontWeight: 700 }} />,\n                  <span key='date' style={{ fontWeight: 700 }} />\n                ]}\n              />\n            </Typography>\n          </DrawerRow>\n          {/* <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n            className={classes.row}\n          >\n            <Grid\n              item={true}\n              className={classes.icons}\n            >\n              <AttachFileRoundedIcon fontSize='small'/>\n            </Grid>\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Grid item={true}>\n                <Typography variant='body2' className={classes.primaryTextColor}>\n                Rough-in <span className={classes.mainPrimaryColor}>[File Title]</span>\n                </Typography>\n              </Grid>\n              <Grid item={true}>\n                <Typography variant='body2' className={classes.primaryTextColor}>\n                [File Type] <span className={classes.mainPrimaryColor}>[File Title]</span>\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid> */}\n        </Grid>\n        {this.state.pdfEditorOpen && hasPdfCutsheet && manufacturerCutsheetFileLink && (\n          <PDFEditorModal\n            open={this.state.pdfEditorOpen}\n            onClose={() => this.setState({ pdfEditorOpen: false })}\n            pdfProducts={fromJS([{\n              productId: productData.get('firmProductId'),\n              productNumber: productData.get('productNumber'),\n              imageSrc,\n              brand: productData.get('brand'),\n              category: productData.get('categoryName'),\n              fileSrc: manufacturerCutsheetFileLink,\n              fileName: manufacturerCutsheetFileName,\n              languageCode: manufacturerCutsheetLanguageCode || '',\n            }])}\n            onUploaded={onProductUpdated}\n          />\n        )}\n      </Grid>\n    );\n  }\n}\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary,\n    lineHeight: '1rem',\n    '& a': {\n      color: theme.palette.primary.main,\n      textDecoration: 'none',\n    },\n  },\n  dropDownContainer: {\n    color: theme.palette.common.white\n  },\n  mainPrimaryColor: {\n    color: theme.palette.primary.main\n  },\n  productInfoItem: {\n    marginBottom: theme.spacing(0.5),\n    width: 'fit-content',\n  },\n  popover: {\n    pointerEvents: 'none',\n  },\n  fileContainer: {\n    paddingBottom: theme.spacing(),\n  },\n  file: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    // width: '100%',\n    width: 'fit-content',\n    cursor: 'pointer',\n  },\n  icon: {\n    marginRight: theme.spacing(1),\n    width: 14,\n    height: 14\n  },\n  chipContainer: {\n    borderRadius: theme.shape.borderRadius,\n    fontSize: '14px',\n    textTransform: 'uppercase',\n    width: '165px',\n    textAlign: 'center',\n    background: 'white'\n  },\n  chip: {\n    padding: '6px 10px',\n    backgroundColor: '#d9c4ec'\n  },\n  ///// statuses /////\n  __1: { // active\n    background: getIn(theme.palette, ['status', 'inProgress'], 'none'),\n  },\n  __2: { // discontinued\n    background: getIn(theme.palette, ['status', 'missed'], 'none'),\n  },\n  __3: { // inactive\n    background: getIn(theme.palette, ['status', 'rejected'], 'none'),\n  },\n  __4: { // deleted\n    background: '#d4d4d4',\n  },\n  __6: { // archived\n    background: '#D5EFF4',\n  },\n\n  null: { // null\n    backgroundColor: '#d4d4d4'\n  },\n  stockItem: {\n    paddingBottom: theme.spacing(),\n  },\n  keywordChip: {\n    borderRadius: theme.shape.borderRadius,\n    margin: theme.spacing(0.5),\n    maxWidth: '193px'\n  },\n  firmChip: {\n    overflow: 'hidden',\n    margin: 2\n  },\n  createShopDrawingButton: {\n    marginTop: theme.spacing(0.25),\n    width: 'fit-content',\n    borderRadius: theme.shape.borderRadius,\n    borderStyle: 'dashed',\n     '&:hover': {\n      borderStyle: 'dashed',\n      borderColor: theme.palette.primary.main,\n    }\n  }\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    deleteFirmProduct: (productId: number) => {\n      dispatch(new DeleteFirmProductAction({ productId }));\n    },\n    deleteAndSearch: ({ productId, options, filters, sharedProduct }) => {\n      dispatch(new DeleteFirmProductAndSearchFirmProductsAction({ productId, options, filters, sharedProduct }));\n    },\n    getRegions: () => {\n      dispatch(new GetRegionsAction({ type: 'office', regionType: 'P' }));\n    },\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state) => {\n  return createStructuredSelector({\n    propsFromRedux: makeSelectOverlayComponentProps(),\n    pricingRegions: makeSelectOfficePricingRegions(),\n    savedLinkedProduct: makeSelectProduct(),\n    hasFeatStockLevelAclRole: makeSelectUserHasFeatStockLevel(),\n    isSuperFirm: makeSelectIsSuperFirm(),\n    isChildFirm: makeSelectIsChildFirm(),\n    hasOMShopDrawingAcl: makeSelectUserHasOMShopDrawingAcl(),\n    loginUserOfficeLocation: makeSelectLoggedInUserOfficeLocation(),\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n    hasFeatCreateShopDrawingAcl: makeSelectUserHasFeatCreateShopDrawingAcl(),\n    userFirmId: makeSelectUserFirmId(),\n  })(state);\n};\n\nexport default compose<React.ComponentClass<IProductDrawerViewComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps)\n)(ProductDrawerView);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { makeSelectContact } from '../../modules/AccountModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { Contact, FirmProduct } from '../../models';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { GetDiscountsForCustomerId } from '../../modules/AccountModule/actions';\nimport { makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport ProductDrawerEdit from '../ProductDrawerEdit';\nimport SuccessDrawer, { SUCCESS_DRAWER } from '../SuccessDrawer';\nimport ProductDrawerView from '../ProductDrawerView';\nimport { GetFirmProductCustomDataListAction, ResetProductAction } from '../../modules/PimModule/actions';\nimport { makeSelectFirmProductCustomDataList } from '../../modules/PimModule/selectors';\nimport { List } from 'immutable';\n\ninterface IProductDrawerContentProps {\n  product?: IMap<FirmProduct>;\n  updateQuoteProductRow?: boolean;\n  editAction?: () => void;\n  copyAction?: () => void;\n  deleteAction?: () => void;\n}\n\nexport interface IModalProps {\n}\n\ninterface IProductDrawerProps extends IProductDrawerContentProps {\n  contact?: IMap<Contact>;\n  content: string;\n  modalProps: any;\n  officeId: number;\n  firmProductCustomDataList: List<IMap<any>>;\n  dispatch: React.Dispatch<IAction>;\n  getCustomerDiscounts(customerId: number): void;\n  getLinkedProduct: (productId: number) => void;\n  resetLinkedProduct: () => void;\n}\n\nexport const PRODUCT_CONTENT_EDIT_KEY = '__ProductDrawerEdit__';\nexport const PRODUCT_DRAWER_ID = 'ProductDrawer';\n\ntype ProductDrawerType = WithTranslation & IProductDrawerProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass ProductDrawer extends React.Component<ProductDrawerType, {}> {\n\n  public componentDidMount = () => {\n    const { product, firmProductCustomDataList, resetLinkedProduct, dispatch } = this.props;\n    if (product) {\n      if (!product.get('productId')) {\n        resetLinkedProduct();\n      }\n    }\n    if (firmProductCustomDataList === null) {\n      dispatch(new GetFirmProductCustomDataListAction());\n    }\n  }\n\n  public componentWillUnmount(): void {\n    const { dispatch,resetLinkedProduct } = this.props;\n    dispatch(new ToggleOverlayComponentAction({\n      id: PRODUCT_DRAWER_ID,\n      open: false\n    }))\n    resetLinkedProduct();\n    // reset initialData\n    dispatch(new SetOverlayComponentPropsAction({\n      id: PRODUCT_DRAWER_ID,\n      props: {}\n    }));\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { product, getLinkedProduct } = this.props;\n    if (prevProps.product && !product) {\n      this.toggleDrawer();\n    }\n  }\n\n  public toggleDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PRODUCT_DRAWER_ID\n    }))\n  };\n\n\n  public render() {\n    const {\n      content: _contentString,\n      product,\n      modalProps,\n      updateQuoteProductRow,\n    } = this.props;\n\n    const { initialData, callbackWithProduct, vendorQuoteProduct, vendorQuoteProductPrice, onProductUpdated } = modalProps;\n\n    const initialProductData = product || initialData;\n\n    const content = (() => {\n      switch (_contentString) {\n        case PRODUCT_CONTENT_EDIT_KEY: {\n          return <ProductDrawerEdit\n            productData={initialProductData}\n            updateQuoteProductRow={updateQuoteProductRow}\n            toggleDrawer={this.toggleDrawer}\n            callbackWithProduct={callbackWithProduct as (product) => IMap<any>}\n            vendorQuoteProduct={vendorQuoteProduct}\n            vendorQuoteProductPrice={vendorQuoteProductPrice}\n          />\n        }\n        case SUCCESS_DRAWER: {\n          return <SuccessDrawer\n          />\n        }\n        default: {\n          return <ProductDrawerView\n            product={initialProductData}\n            toggleDrawer={this.toggleDrawer}\n            editAction={this.props.editAction || null}\n            copyAction={this.props.copyAction || null}\n            deleteAction={this.props.deleteAction || null}\n            onProductUpdated={onProductUpdated}\n          />\n        }\n      }\n    })();\n\n    return <Grid>\n      {\n        content\n      }\n    </Grid>\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  }\n});\n\nconst mapStateToProps = (state, props: IProductDrawerContentProps) => {\n  const {\n    // PRODUCT_DRAWER_ID,\n  } = props;\n  return createStructuredSelector({\n    officeId: makeSelectUserOfficeId(),\n    modalProps: makeSelectOverlayComponentProp(PRODUCT_DRAWER_ID),\n    contact: makeSelectContact(),\n    content: makeSelectOverlayComponentContent(PRODUCT_DRAWER_ID),\n    firmProductCustomDataList: makeSelectFirmProductCustomDataList(),\n  })(state);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getCustomerDiscounts: (customerId) => {\n      dispatch(new GetDiscountsForCustomerId({customerId}))\n    },\n    resetLinkedProduct: () => {\n      dispatch(new ResetProductAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IProductDrawerContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductDrawer);\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { Router, __RouterContext, matchPath } from 'react-router';\nexport * from 'react-router';\nimport { createBrowserHistory, createHashHistory, createLocation } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createBrowserHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  BrowserRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    forceRefresh: PropTypes.bool,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createHashHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  HashRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    getUserConfirmation: PropTypes.func,\n    hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n  };\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Link, _React$Component);\n\n  function Link() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Link.prototype;\n\n  _proto.handleClick = function handleClick(event, history) {\n    try {\n      if (this.props.onClick) this.props.onClick(event);\n    } catch (ex) {\n      event.preventDefault();\n      throw ex;\n    }\n\n    if (!event.defaultPrevented && // onClick prevented default\n    event.button === 0 && ( // ignore everything but left clicks\n    !this.props.target || this.props.target === \"_self\") && // let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // ignore clicks with modifier keys\n    ) {\n        event.preventDefault();\n        var method = this.props.replace ? history.replace : history.push;\n        method(this.props.to);\n      }\n  };\n\n  _proto.render = function render() {\n    var _this = this;\n\n    var _this$props = this.props,\n        innerRef = _this$props.innerRef,\n        replace = _this$props.replace,\n        to = _this$props.to,\n        rest = _objectWithoutPropertiesLoose(_this$props, [\"innerRef\", \"replace\", \"to\"]); // eslint-disable-line no-unused-vars\n\n\n    return React.createElement(__RouterContext.Consumer, null, function (context) {\n      !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Link> outside a <Router>\") : invariant(false) : void 0;\n      var location = typeof to === \"string\" ? createLocation(to, null, null, context.location) : to;\n      var href = location ? context.history.createHref(location) : \"\";\n      return React.createElement(\"a\", _extends({}, rest, {\n        onClick: function onClick(event) {\n          return _this.handleClick(event, context.history);\n        },\n        href: href,\n        ref: innerRef\n      }));\n    });\n  };\n\n  return Link;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object]);\n  var innerRefType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n    current: PropTypes.any\n  })]);\n  Link.propTypes = {\n    innerRef: innerRefType,\n    onClick: PropTypes.func,\n    replace: PropTypes.bool,\n    target: PropTypes.string,\n    to: toType.isRequired\n  };\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nfunction NavLink(_ref) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"strict\", \"style\", \"to\"]);\n\n  var path = typeof to === \"object\" ? to.pathname : to; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n  var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n  return React.createElement(__RouterContext.Consumer, null, function (context) {\n    !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <NavLink> outside a <Router>\") : invariant(false) : void 0;\n    var pathToMatch = locationProp ? locationProp.pathname : context.location.pathname;\n    var match = escapedPath ? matchPath(pathToMatch, {\n      path: escapedPath,\n      exact: exact,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, context.location) : match);\n    var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n    var style = isActive ? _extends({}, styleProp, activeStyle) : styleProp;\n    return React.createElement(Link, _extends({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: to\n    }, rest));\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n  NavLink.propTypes = _extends({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: PropTypes.string,\n    activeStyle: PropTypes.object,\n    className: PropTypes.string,\n    exact: PropTypes.bool,\n    isActive: PropTypes.func,\n    location: PropTypes.object,\n    strict: PropTypes.bool,\n    style: PropTypes.object\n  });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ &\n  // document is not available in all browser environments (webworkers). We make it optional so you have to explicitly check for it\n  Omit<Window, 'document'> &\n  Partial<Pick<Window, 'document'>>;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className]);\n    } else {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      var maybeStyles = cache.insert(\".\" + className, current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles };\n","import '@babel/runtime/helpers/inheritsLoose';\nimport { createContext, forwardRef, createElement } from 'react';\nimport createCache from '@emotion/cache';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar EmotionCacheContext = /*#__PURE__*/createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? createCache() : null);\nvar ThemeContext = /*#__PURE__*/createContext({});\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n  var render = function render(props, ref) {\n    return /*#__PURE__*/createElement(EmotionCacheContext.Consumer, null, function (cache) {\n      return func(props, cache, ref);\n    });\n  }; // $FlowFixMe\n\n\n  return /*#__PURE__*/forwardRef(render);\n};\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n  return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n  if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n  props.css.indexOf(':') !== -1) {\n    throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`\" + props.css + \"`\");\n  }\n\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps[typePropName] = type; // TODO: check if this still works with all of those different JSX functions\n\n  if (process.env.NODE_ENV !== 'production') {\n    var error = new Error();\n\n    if (error.stack) {\n      // chrome\n      var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z$]+) /);\n\n      if (!match) {\n        // safari and firefox\n        match = error.stack.match(/.*\\n([A-Z][A-Za-z$]+)@/);\n      }\n\n      if (match) {\n        newProps[labelPropName] = sanitizeIdentifier(match[1]);\n      }\n    }\n  }\n\n  return newProps;\n};\n\nvar render = function render(cache, props, theme, ref) {\n  var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var type = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles);\n\n  if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n    var labelFromStack = props[labelPropName];\n\n    if (labelFromStack) {\n      serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n    }\n  }\n\n  var rules = insertStyles(cache, serialized, typeof type === 'string');\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps.ref = ref;\n  newProps.className = className;\n  var ele = /*#__PURE__*/createElement(type, newProps);\n\n  return ele;\n}; // eslint-disable-next-line no-undef\n\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  if (typeof props.css === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      return render(cache, props, theme, ref);\n    });\n  }\n\n  return render(cache, props, null, ref);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, createEmotionProps as c, hasOwnProperty as h, withEmotionCache as w };\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { createElement, Component } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-57a3a7a3.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, w as withEmotionCache } from './emotion-element-57a3a7a3.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nimport css from '@emotion/css';\nexport { default as css } from '@emotion/css';\n\nvar jsx = function jsx(type, props) {\n  var args = arguments;\n\n  if (props == null || !hasOwnProperty.call(props, 'css')) {\n    // $FlowFixMe\n    return createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  } // $FlowFixMe\n\n\n  return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false;\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n  // probably using the custom createElement which\n  // means it will be turned into a className prop\n  // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n  props.className || props.css)) {\n    console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n    warnedAboutCssPropForGlobal = true;\n  }\n\n  var styles = props.styles;\n\n  if (typeof styles === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      var serialized = serializeStyles([styles(theme)]);\n      return /*#__PURE__*/createElement(InnerGlobal, {\n        serialized: serialized,\n        cache: cache\n      });\n    });\n  }\n\n  var serialized = serializeStyles([styles]);\n  return /*#__PURE__*/createElement(InnerGlobal, {\n    serialized: serialized,\n    cache: cache\n  });\n});\n\n// maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\nvar InnerGlobal = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(InnerGlobal, _React$Component);\n\n  function InnerGlobal(props, context, updater) {\n    return _React$Component.call(this, props, context, updater) || this;\n  }\n\n  var _proto = InnerGlobal.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.sheet = new StyleSheet({\n      key: this.props.cache.key + \"-global\",\n      nonce: this.props.cache.sheet.nonce,\n      container: this.props.cache.sheet.container\n    }); // $FlowFixMe\n\n    var node = document.querySelector(\"style[data-emotion-\" + this.props.cache.key + \"=\\\"\" + this.props.serialized.name + \"\\\"]\");\n\n    if (node !== null) {\n      this.sheet.tags.push(node);\n    }\n\n    if (this.props.cache.sheet.tags.length) {\n      this.sheet.before = this.props.cache.sheet.tags[0];\n    }\n\n    this.insertStyles();\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (prevProps.serialized.name !== this.props.serialized.name) {\n      this.insertStyles();\n    }\n  };\n\n  _proto.insertStyles = function insertStyles$1() {\n    if (this.props.serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(this.props.cache, this.props.serialized.next, true);\n    }\n\n    if (this.sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;\n      this.sheet.before = element;\n      this.sheet.flush();\n    }\n\n    this.props.cache.insert(\"\", this.props.serialized, this.sheet, false);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.sheet.flush();\n  };\n\n  _proto.render = function render() {\n\n    return null;\n  };\n\n  return InnerGlobal;\n}(Component);\n\nvar keyframes = function keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n};\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar ClassNames = withEmotionCache(function (props, context) {\n  return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n    var hasRendered = false;\n\n    var css = function css() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('css can only be used during render');\n      }\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var serialized = serializeStyles(args, context.registered);\n\n      {\n        insertStyles(context, serialized, false);\n      }\n\n      return context.key + \"-\" + serialized.name;\n    };\n\n    var cx = function cx() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('cx can only be used during render');\n      }\n\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return merge(context.registered, css, classnames(args));\n    };\n\n    var content = {\n      css: css,\n      cx: cx,\n      theme: theme\n    };\n    var ele = props.children(content);\n    hasRendered = true;\n\n    return ele;\n  });\n});\n\nexport { ClassNames, Global, jsx as createElement, jsx, keyframes };\n","import { IAction } from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport { IDetailedManufacturer, ILeadSource } from './reducer';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap';\nimport { Category, ListItem, Manufacturer, Status } from '../../models';\n\nexport enum ListActionTypes {\n  GET_LEAD_SOURCES = 'GET_LEAD_SOURCES',\n  GET_LEAD_SOURCES_SUCCEEDED = 'GET_LEAD_SOURCES_SUCCEEDED',\n  GET_ALL_MANUFACTURERS = 'GET_ALL_MANUFACTURERS',\n  GET_ALL_MANUFACTURERS_SUCCEEDED = 'GET_ALL_MANUFACTURERS_SUCCEEDED',\n  GET_TEST_STATUSES = 'GET_TEST_STATUSES',\n  GET_TEST_STATUSES_SUCCEEDED = 'GET_TEST_STATUSES_SUCCEEDED',\n  GET_XREF_TYPES = 'GET_XREF_TYPES',\n  GET_XREF_TYPES_SUCCEEDED = 'GET_XREF_TYPES_SUCCEEDED',\n  GET_PIM_STATUSES = 'GET_PIM_STATUSES',\n  GET_PIM_STATUSES_SUCCEEDED = 'GET_PIM_STATUSES_SUCCEEDED',\n  UPDATE_DETAILED_MANUFACTURER_MAP = 'UPDATE_DETAILED_MANUFACTURER_MAP',\n  GET_ALL_CATEGORIES = 'GET_ALL_CATEGORIES',\n  GET_ALL_CATEGORIES_SUCCEEDED = 'GET_ALL_CATEGORIES_SUCCEEDED',\n}\nexport default {};\n\nexport class GetPimStatusesAction implements IAction {\n  public readonly type = ListActionTypes.GET_PIM_STATUSES;\n}\n\nexport class GetPimStatusesSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_PIM_STATUSES_SUCCEEDED;\n\n  constructor(\n    public pimStatuses: List<IMap<Status>>\n  ) {}\n}\n\nexport class GetTestStatusesAction implements IAction {\n  public readonly type = ListActionTypes.GET_TEST_STATUSES;\n}\n\nexport class GetTestStatusesSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_TEST_STATUSES_SUCCEEDED;\n\n  constructor(\n    public testStatuses: List<IMap<Status>>\n  ) {}\n}\n\nexport class GetLeadSourcesAction implements IAction {\n  public readonly type = ListActionTypes.GET_LEAD_SOURCES;\n}\n\nexport class GetLeadSourcesSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_LEAD_SOURCES_SUCCEEDED;\n\n  constructor(\n    public leadSources: List<IMap<ILeadSource>>\n  ) {}\n}\n\nexport class GetAllManufacturersAction implements IAction {\n  public readonly type = ListActionTypes.GET_ALL_MANUFACTURERS;\n}\n\nexport class GetAllManufacturersSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_ALL_MANUFACTURERS_SUCCEEDED;\n\n  constructor(\n    public manufacturers: List<IMap<Manufacturer>>\n  ) {}\n}\n\nexport class GetXrefTypesAction implements IAction {\n  public readonly type = ListActionTypes.GET_XREF_TYPES;\n}\nexport class GetXrefTypesSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_XREF_TYPES_SUCCEEDED;\n\n  constructor(\n    public xrefTypes: List<IMap<ListItem>>\n  ) {}\n}\n\nexport class UpdateDetailedManufacturerMapAction implements IAction {\n  public readonly type = ListActionTypes.UPDATE_DETAILED_MANUFACTURER_MAP;\n\n  constructor(\n    public payload: {\n      manufacturer: string;\n      detailedManufacturer: IMap<IDetailedManufacturer>;\n    }\n  ) {}\n}\n\nexport class GetAllCategoriesAction implements IAction {\n  public readonly type = ListActionTypes.GET_ALL_CATEGORIES;\n}\n\nexport class GetAllCategoriesSucceededAction implements IAction {\n  public readonly type = ListActionTypes.GET_ALL_CATEGORIES_SUCCEEDED;\n\n  constructor(\n    public categories: List<IMap<Category>>\n  ) {}\n}","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};","export var toCharCode = function (character) { return character.charCodeAt(0); };\nexport var toCodePoint = function (character) { return character.codePointAt(0); };\nexport var toHexStringOfMinLength = function (num, minLength) {\n    return padStart(num.toString(16), minLength, '0').toUpperCase();\n};\nexport var toHexString = function (num) { return toHexStringOfMinLength(num, 2); };\nexport var charFromCode = function (code) { return String.fromCharCode(code); };\nexport var charFromHexCode = function (hex) { return charFromCode(parseInt(hex, 16)); };\nexport var padStart = function (value, length, padChar) {\n    var padding = '';\n    for (var idx = 0, len = length - value.length; idx < len; idx++) {\n        padding += padChar;\n    }\n    return padding + value;\n};\nexport var copyStringIntoBuffer = function (str, buffer, offset) {\n    var length = str.length;\n    for (var idx = 0; idx < length; idx++) {\n        buffer[offset++] = str.charCodeAt(idx);\n    }\n    return length;\n};\nexport var addRandomSuffix = function (prefix, suffixLength) {\n    if (suffixLength === void 0) { suffixLength = 4; }\n    return prefix + \"-\" + Math.floor(Math.random() * Math.pow(10, suffixLength));\n};\nexport var escapeRegExp = function (str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\nexport var cleanText = function (text) {\n    return text.replace(/\\t|\\u0085|\\u2028|\\u2029/g, '    ').replace(/[\\b\\v]/g, '');\n};\nexport var escapedNewlineChars = ['\\\\n', '\\\\f', '\\\\r', '\\\\u000B'];\nexport var newlineChars = ['\\n', '\\f', '\\r', '\\u000B'];\nexport var isNewlineChar = function (text) { return /^[\\n\\f\\r\\u000B]$/.test(text); };\nexport var lineSplit = function (text) { return text.split(/[\\n\\f\\r\\u000B]/); };\nexport var mergeLines = function (text) {\n    return text.replace(/[\\n\\f\\r\\u000B]/g, ' ');\n};\n// JavaScript's String.charAt() method doesn work on strings containing UTF-16\n// characters (with high and low surrogate pairs), such as 💩 (poo emoji). This\n// `charAtIndex()` function does.\n//\n// Credit: https://github.com/mathiasbynens/String.prototype.at/blob/master/at.js#L14-L48\nexport var charAtIndex = function (text, index) {\n    // Get the first code unit and code unit value\n    var cuFirst = text.charCodeAt(index);\n    var cuSecond;\n    var nextIndex = index + 1;\n    var length = 1;\n    if (\n    // Check if it's the start of a surrogate pair.\n    cuFirst >= 0xd800 &&\n        cuFirst <= 0xdbff && // high surrogate\n        text.length > nextIndex // there is a next code unit\n    ) {\n        cuSecond = text.charCodeAt(nextIndex);\n        if (cuSecond >= 0xdc00 && cuSecond <= 0xdfff)\n            length = 2; // low surrogate\n    }\n    return [text.slice(index, index + length), length];\n};\nexport var charSplit = function (text) {\n    var chars = [];\n    for (var idx = 0, len = text.length; idx < len;) {\n        var _a = charAtIndex(text, idx), c = _a[0], cLen = _a[1];\n        chars.push(c);\n        idx += cLen;\n    }\n    return chars;\n};\nvar buildWordBreakRegex = function (wordBreaks) {\n    var newlineCharUnion = escapedNewlineChars.join('|');\n    var escapedRules = ['$'];\n    for (var idx = 0, len = wordBreaks.length; idx < len; idx++) {\n        var wordBreak = wordBreaks[idx];\n        if (isNewlineChar(wordBreak)) {\n            throw new TypeError(\"`wordBreak` must not include \" + newlineCharUnion);\n        }\n        escapedRules.push(wordBreak === '' ? '.' : escapeRegExp(wordBreak));\n    }\n    var breakRules = escapedRules.join('|');\n    return new RegExp(\"(\" + newlineCharUnion + \")|((.*?)(\" + breakRules + \"))\", 'gm');\n};\nexport var breakTextIntoLines = function (text, wordBreaks, maxWidth, computeWidthOfText) {\n    var regex = buildWordBreakRegex(wordBreaks);\n    var words = cleanText(text).match(regex);\n    var currLine = '';\n    var currWidth = 0;\n    var lines = [];\n    var pushCurrLine = function () {\n        if (currLine !== '')\n            lines.push(currLine);\n        currLine = '';\n        currWidth = 0;\n    };\n    for (var idx = 0, len = words.length; idx < len; idx++) {\n        var word = words[idx];\n        if (isNewlineChar(word)) {\n            pushCurrLine();\n        }\n        else {\n            var width = computeWidthOfText(word);\n            if (currWidth + width > maxWidth)\n                pushCurrLine();\n            currLine += word;\n            currWidth += width;\n        }\n    }\n    pushCurrLine();\n    return lines;\n};\n// See section \"7.9.4 Dates\" of the PDF specification\nvar dateRegex = /^D:(\\d\\d\\d\\d)(\\d\\d)?(\\d\\d)?(\\d\\d)?(\\d\\d)?(\\d\\d)?([+\\-Z])?(\\d\\d)?'?(\\d\\d)?'?$/;\nexport var parseDate = function (dateStr) {\n    var match = dateStr.match(dateRegex);\n    if (!match)\n        return undefined;\n    var year = match[1], _a = match[2], month = _a === void 0 ? '01' : _a, _b = match[3], day = _b === void 0 ? '01' : _b, _c = match[4], hours = _c === void 0 ? '00' : _c, _d = match[5], mins = _d === void 0 ? '00' : _d, _e = match[6], secs = _e === void 0 ? '00' : _e, _f = match[7], offsetSign = _f === void 0 ? 'Z' : _f, _g = match[8], offsetHours = _g === void 0 ? '00' : _g, _h = match[9], offsetMins = _h === void 0 ? '00' : _h;\n    // http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15\n    var tzOffset = offsetSign === 'Z' ? 'Z' : \"\" + offsetSign + offsetHours + \":\" + offsetMins;\n    var date = new Date(year + \"-\" + month + \"-\" + day + \"T\" + hours + \":\" + mins + \":\" + secs + tzOffset);\n    return date;\n};\nexport var findLastMatch = function (value, regex) {\n    var _a;\n    var position = 0;\n    var lastMatch;\n    while (position < value.length) {\n        var match = value.substring(position).match(regex);\n        if (!match)\n            return { match: lastMatch, pos: position };\n        lastMatch = match;\n        position += ((_a = match.index) !== null && _a !== void 0 ? _a : 0) + match[0].length;\n    }\n    return { match: lastMatch, pos: position };\n};\n//# sourceMappingURL=strings.js.map","import { TASK, SAGA_ACTION, MULTICAST, IO } from '@redux-saga/symbols';\n\nvar undef = function undef(v) {\n  return v === null || v === undefined;\n};\nvar notUndef = function notUndef(v) {\n  return v !== null && v !== undefined;\n};\nvar func = function func(f) {\n  return typeof f === 'function';\n};\nvar number = function number(n) {\n  return typeof n === 'number';\n};\nvar string = function string(s) {\n  return typeof s === 'string';\n};\nvar array = Array.isArray;\nvar object = function object(obj) {\n  return obj && !array(obj) && typeof obj === 'object';\n};\nvar promise = function promise(p) {\n  return p && func(p.then);\n};\nvar iterator = function iterator(it) {\n  return it && func(it.next) && func(it.throw);\n};\nvar iterable = function iterable(it) {\n  return it && func(Symbol) ? func(it[Symbol.iterator]) : array(it);\n};\nvar task = function task(t) {\n  return t && t[TASK];\n};\nvar sagaAction = function sagaAction(a) {\n  return Boolean(a && a[SAGA_ACTION]);\n};\nvar observable = function observable(ob) {\n  return ob && func(ob.subscribe);\n};\nvar buffer = function buffer(buf) {\n  return buf && func(buf.isEmpty) && func(buf.take) && func(buf.put);\n};\nvar pattern = function pattern(pat) {\n  return pat && (string(pat) || symbol(pat) || func(pat) || array(pat) && pat.every(pattern));\n};\nvar channel = function channel(ch) {\n  return ch && func(ch.take) && func(ch.close);\n};\nvar stringableFunc = function stringableFunc(f) {\n  return func(f) && f.hasOwnProperty('toString');\n};\nvar symbol = function symbol(sym) {\n  return Boolean(sym) && typeof Symbol === 'function' && sym.constructor === Symbol && sym !== Symbol.prototype;\n};\nvar multicast = function multicast(ch) {\n  return channel(ch) && ch[MULTICAST];\n};\nvar effect = function effect(eff) {\n  return eff && eff[IO];\n};\n\nexport { array, buffer, channel, effect, func, iterable, iterator, multicast, notUndef, number, object, observable, pattern, promise, sagaAction, string, stringableFunc, symbol, task, undef };\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport { ARRAY_INSERT, ARRAY_MOVE, ARRAY_POP, ARRAY_PUSH, ARRAY_REMOVE, ARRAY_REMOVE_ALL, ARRAY_SHIFT, ARRAY_SPLICE, ARRAY_SWAP, ARRAY_UNSHIFT, AUTOFILL, BLUR, CHANGE, CLEAR_SUBMIT, CLEAR_SUBMIT_ERRORS, CLEAR_ASYNC_ERROR, DESTROY, FOCUS, INITIALIZE, REGISTER_FIELD, RESET, RESET_SECTION, CLEAR_FIELDS, SET_SUBMIT_FAILED, SET_SUBMIT_SUCCEEDED, START_ASYNC_VALIDATION, START_SUBMIT, STOP_ASYNC_VALIDATION, STOP_SUBMIT, SUBMIT, TOUCH, UNREGISTER_FIELD, UNTOUCH, UPDATE_SYNC_ERRORS, UPDATE_SYNC_WARNINGS } from './actionTypes';\n\nvar arrayInsert = function arrayInsert(form, field, index, value) {\n  return {\n    type: ARRAY_INSERT,\n    meta: {\n      form: form,\n      field: field,\n      index: index\n    },\n    payload: value\n  };\n};\n\nvar arrayMove = function arrayMove(form, field, from, to) {\n  return {\n    type: ARRAY_MOVE,\n    meta: {\n      form: form,\n      field: field,\n      from: from,\n      to: to\n    }\n  };\n};\n\nvar arrayPop = function arrayPop(form, field) {\n  return {\n    type: ARRAY_POP,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arrayPush = function arrayPush(form, field, value) {\n  return {\n    type: ARRAY_PUSH,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar arrayRemove = function arrayRemove(form, field, index) {\n  return {\n    type: ARRAY_REMOVE,\n    meta: {\n      form: form,\n      field: field,\n      index: index\n    }\n  };\n};\n\nvar arrayRemoveAll = function arrayRemoveAll(form, field) {\n  return {\n    type: ARRAY_REMOVE_ALL,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arrayShift = function arrayShift(form, field) {\n  return {\n    type: ARRAY_SHIFT,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arraySplice = function arraySplice(form, field, index, removeNum, value) {\n  var action = {\n    type: ARRAY_SPLICE,\n    meta: {\n      form: form,\n      field: field,\n      index: index,\n      removeNum: removeNum\n    }\n  };\n\n  if (value !== undefined) {\n    action.payload = value;\n  }\n\n  return action;\n};\n\nvar arraySwap = function arraySwap(form, field, indexA, indexB) {\n  if (indexA === indexB) {\n    throw new Error('Swap indices cannot be equal');\n  }\n\n  if (indexA < 0 || indexB < 0) {\n    throw new Error('Swap indices cannot be negative');\n  }\n\n  return {\n    type: ARRAY_SWAP,\n    meta: {\n      form: form,\n      field: field,\n      indexA: indexA,\n      indexB: indexB\n    }\n  };\n};\n\nvar arrayUnshift = function arrayUnshift(form, field, value) {\n  return {\n    type: ARRAY_UNSHIFT,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar autofill = function autofill(form, field, value) {\n  return {\n    type: AUTOFILL,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar blur = function blur(form, field, value, touch) {\n  return {\n    type: BLUR,\n    meta: {\n      form: form,\n      field: field,\n      touch: touch\n    },\n    payload: value\n  };\n};\n\nvar change = function change(form, field, value, touch, persistentSubmitErrors) {\n  return {\n    type: CHANGE,\n    meta: {\n      form: form,\n      field: field,\n      touch: touch,\n      persistentSubmitErrors: persistentSubmitErrors\n    },\n    payload: value\n  };\n};\n\nvar clearSubmit = function clearSubmit(form) {\n  return {\n    type: CLEAR_SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar clearSubmitErrors = function clearSubmitErrors(form) {\n  return {\n    type: CLEAR_SUBMIT_ERRORS,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar clearAsyncError = function clearAsyncError(form, field) {\n  return {\n    type: CLEAR_ASYNC_ERROR,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar clearFields = function clearFields(form, keepTouched, persistentSubmitErrors) {\n  for (var _len = arguments.length, fields = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    fields[_key - 3] = arguments[_key];\n  }\n\n  return {\n    type: CLEAR_FIELDS,\n    meta: {\n      form: form,\n      keepTouched: keepTouched,\n      persistentSubmitErrors: persistentSubmitErrors,\n      fields: fields\n    }\n  };\n};\n\nvar destroy = function destroy() {\n  for (var _len2 = arguments.length, form = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    form[_key2] = arguments[_key2];\n  }\n\n  return {\n    type: DESTROY,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar focus = function focus(form, field) {\n  return {\n    type: FOCUS,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar initialize = function initialize(form, values, keepDirty, otherMeta) {\n  if (otherMeta === void 0) {\n    otherMeta = {};\n  }\n\n  if (keepDirty instanceof Object) {\n    otherMeta = keepDirty;\n    keepDirty = false;\n  }\n\n  return {\n    type: INITIALIZE,\n    meta: _extends({\n      form: form,\n      keepDirty: keepDirty\n    }, otherMeta),\n    payload: values\n  };\n};\n\nvar registerField = function registerField(form, name, type) {\n  return {\n    type: REGISTER_FIELD,\n    meta: {\n      form: form\n    },\n    payload: {\n      name: name,\n      type: type\n    }\n  };\n};\n\nvar reset = function reset(form) {\n  return {\n    type: RESET,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar resetSection = function resetSection(form) {\n  for (var _len3 = arguments.length, sections = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    sections[_key3 - 1] = arguments[_key3];\n  }\n\n  return {\n    type: RESET_SECTION,\n    meta: {\n      form: form,\n      sections: sections\n    }\n  };\n};\n\nvar startAsyncValidation = function startAsyncValidation(form, field) {\n  return {\n    type: START_ASYNC_VALIDATION,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar startSubmit = function startSubmit(form) {\n  return {\n    type: START_SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar stopAsyncValidation = function stopAsyncValidation(form, errors) {\n  return {\n    type: STOP_ASYNC_VALIDATION,\n    meta: {\n      form: form\n    },\n    payload: errors,\n    error: !!(errors && Object.keys(errors).length)\n  };\n};\n\nvar stopSubmit = function stopSubmit(form, errors) {\n  return {\n    type: STOP_SUBMIT,\n    meta: {\n      form: form\n    },\n    payload: errors,\n    error: !!(errors && Object.keys(errors).length)\n  };\n};\n\nvar submit = function submit(form) {\n  return {\n    type: SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar setSubmitFailed = function setSubmitFailed(form) {\n  for (var _len4 = arguments.length, fields = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    fields[_key4 - 1] = arguments[_key4];\n  }\n\n  return {\n    type: SET_SUBMIT_FAILED,\n    meta: {\n      form: form,\n      fields: fields\n    },\n    error: true\n  };\n};\n\nvar setSubmitSucceeded = function setSubmitSucceeded(form) {\n  for (var _len5 = arguments.length, fields = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    fields[_key5 - 1] = arguments[_key5];\n  }\n\n  return {\n    type: SET_SUBMIT_SUCCEEDED,\n    meta: {\n      form: form,\n      fields: fields\n    },\n    error: false\n  };\n};\n\nvar touch = function touch(form) {\n  for (var _len6 = arguments.length, fields = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n    fields[_key6 - 1] = arguments[_key6];\n  }\n\n  return {\n    type: TOUCH,\n    meta: {\n      form: form,\n      fields: fields\n    }\n  };\n};\n\nvar unregisterField = function unregisterField(form, name, destroyOnUnmount) {\n  if (destroyOnUnmount === void 0) {\n    destroyOnUnmount = true;\n  }\n\n  return {\n    type: UNREGISTER_FIELD,\n    meta: {\n      form: form\n    },\n    payload: {\n      name: name,\n      destroyOnUnmount: destroyOnUnmount\n    }\n  };\n};\n\nvar untouch = function untouch(form) {\n  for (var _len7 = arguments.length, fields = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n    fields[_key7 - 1] = arguments[_key7];\n  }\n\n  return {\n    type: UNTOUCH,\n    meta: {\n      form: form,\n      fields: fields\n    }\n  };\n};\n\nvar updateSyncErrors = function updateSyncErrors(form, syncErrors, error) {\n  if (syncErrors === void 0) {\n    syncErrors = {};\n  }\n\n  return {\n    type: UPDATE_SYNC_ERRORS,\n    meta: {\n      form: form\n    },\n    payload: {\n      syncErrors: syncErrors,\n      error: error\n    }\n  };\n};\n\nvar updateSyncWarnings = function updateSyncWarnings(form, syncWarnings, warning) {\n  if (syncWarnings === void 0) {\n    syncWarnings = {};\n  }\n\n  return {\n    type: UPDATE_SYNC_WARNINGS,\n    meta: {\n      form: form\n    },\n    payload: {\n      syncWarnings: syncWarnings,\n      warning: warning\n    }\n  };\n};\n\nvar actions = {\n  arrayInsert: arrayInsert,\n  arrayMove: arrayMove,\n  arrayPop: arrayPop,\n  arrayPush: arrayPush,\n  arrayRemove: arrayRemove,\n  arrayRemoveAll: arrayRemoveAll,\n  arrayShift: arrayShift,\n  arraySplice: arraySplice,\n  arraySwap: arraySwap,\n  arrayUnshift: arrayUnshift,\n  autofill: autofill,\n  blur: blur,\n  change: change,\n  clearFields: clearFields,\n  clearSubmit: clearSubmit,\n  clearSubmitErrors: clearSubmitErrors,\n  clearAsyncError: clearAsyncError,\n  destroy: destroy,\n  focus: focus,\n  initialize: initialize,\n  registerField: registerField,\n  reset: reset,\n  resetSection: resetSection,\n  startAsyncValidation: startAsyncValidation,\n  startSubmit: startSubmit,\n  stopAsyncValidation: stopAsyncValidation,\n  stopSubmit: stopSubmit,\n  submit: submit,\n  setSubmitFailed: setSubmitFailed,\n  setSubmitSucceeded: setSubmitSucceeded,\n  touch: touch,\n  unregisterField: unregisterField,\n  untouch: untouch,\n  updateSyncErrors: updateSyncErrors,\n  updateSyncWarnings: updateSyncWarnings\n};\nexport default actions;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport { fade } from '../styles/colorManipulator';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      textAlign: 'center',\n      flex: '0 0 auto',\n      fontSize: theme.typography.pxToRem(24),\n      padding: 12,\n      borderRadius: '50%',\n      overflow: 'visible',\n      // Explicitly set the default value to solve a bug on IE 11.\n      color: theme.palette.action.active,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        backgroundColor: fade(theme.palette.action.active, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        backgroundColor: 'transparent',\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"start\"`. */\n    edgeStart: {\n      marginLeft: -12,\n      '$sizeSmall&': {\n        marginLeft: -3\n      }\n    },\n\n    /* Styles applied to the root element if `edge=\"end\"`. */\n    edgeEnd: {\n      marginRight: -12,\n      '$sizeSmall&': {\n        marginRight: -3\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      padding: 3,\n      fontSize: theme.typography.pxToRem(18)\n    },\n\n    /* Styles applied to the children container element. */\n    label: {\n      width: '100%',\n      display: 'flex',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    }\n  };\n};\n/**\n * Refer to the [Icons](/components/icons/) section of the documentation\n * regarding the available icon options.\n */\n\nvar IconButton = React.forwardRef(function IconButton(props, ref) {\n  var _props$edge = props.edge,\n      edge = _props$edge === void 0 ? false : _props$edge,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = _objectWithoutProperties(props, [\"edge\", \"children\", \"classes\", \"className\", \"color\", \"disabled\", \"disableFocusRipple\", \"size\"]);\n\n  return React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, className, color !== 'default' && classes[\"color\".concat(capitalize(color))], disabled && classes.disabled, {\n      small: classes[\"size\".concat(capitalize(size))]\n    }[size], {\n      start: classes.edgeStart,\n      end: classes.edgeEnd\n    }[edge]),\n    centerRipple: true,\n    focusRipple: !disableFocusRipple,\n    disabled: disabled,\n    ref: ref\n  }, other), React.createElement(\"span\", {\n    className: classes.label\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? IconButton.propTypes = {\n  /**\n   * The icon element.\n   */\n  children: chainPropTypes(PropTypes.node, function (props) {\n    var found = React.Children.toArray(props.children).some(function (child) {\n      return React.isValidElement(child) && child.props.onClick;\n    });\n\n    if (found) {\n      return new Error(['Material-UI: you are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957'].join('\\n'));\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   * `disableRipple` must also be true.\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   */\n  edge: PropTypes.oneOf(['start', 'end', false]),\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiIconButton'\n})(IconButton);","export default function chainPropTypes(propType1, propType2) {\n  if (process.env.NODE_ENV === 'production') {\n    return function () {\n      return null;\n    };\n  }\n\n  return function validate() {\n    return propType1.apply(void 0, arguments) || propType2.apply(void 0, arguments);\n  };\n}","import PropTypes from 'prop-types';\nimport chainPropTypes from './chainPropTypes';\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction acceptingRef(props, propName, componentName, location, propFullName) {\n  var element = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (element == null) {\n    return null;\n  }\n\n  var warningHint;\n  var elementType = element.type;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof elementType === 'function' && !isClassComponent(elementType)) {\n    warningHint = 'Did you accidentally use a plain function component for an element instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\nvar elementAcceptingRef = chainPropTypes(PropTypes.element, acceptingRef);\nelementAcceptingRef.isRequired = chainPropTypes(PropTypes.element.isRequired, acceptingRef);\nexport default elementAcceptingRef;","import * as PropTypes from 'prop-types';\nimport chainPropTypes from './chainPropTypes';\n\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  var _elementType$prototyp = elementType.prototype,\n      prototype = _elementType$prototyp === void 0 ? {} : _elementType$prototyp;\n  return Boolean(prototype.isReactComponent);\n}\n\nfunction elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  var warningHint;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n\n  if (typeof propValue === 'function' && !isClassComponent(propValue)) {\n    warningHint = 'Did you accidentally provide a plain function component instead?';\n  }\n\n  if (warningHint !== undefined) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an element type that can hold a ref. \".concat(warningHint, \" \") + 'For more information see https://material-ui.com/r/caveat-with-refs-guide');\n  }\n\n  return null;\n}\n\nexport default chainPropTypes(PropTypes.elementType, elementTypeAcceptingRef);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n// Only exported for test purposes.\nexport var specialProperty = \"exact-prop: \\u200B\";\nexport default function exactProp(propTypes) {\n  if (process.env.NODE_ENV === 'production') {\n    return propTypes;\n  }\n\n  return _extends({}, propTypes, _defineProperty({}, specialProperty, function (props) {\n    var unsupportedProps = Object.keys(props).filter(function (prop) {\n      return !propTypes.hasOwnProperty(prop);\n    });\n\n    if (unsupportedProps.length > 0) {\n      return new Error(\"The following props are not supported: \".concat(unsupportedProps.map(function (prop) {\n        return \"`\".concat(prop, \"`\");\n      }).join(', '), \". Please remove them.\"));\n    }\n\n    return null;\n  }));\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n  // Apply babel-plugin-transform-template-literals in loose mode\n  // loose mode is safe iff we're concatenating primitives\n  // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n\n  /* eslint-disable prefer-template */\n  var url = 'https://material-ui.com/production-error/?code=' + code;\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    // rest params over-transpile for this case\n    // eslint-disable-next-line prefer-rest-params\n    url += '&args[]=' + encodeURIComponent(arguments[i]);\n  }\n\n  return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.';\n  /* eslint-enable prefer-template */\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { ForwardRef, Memo } from 'react-is'; // Simplified polyfill for IE 11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\n\nvar fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nexport function getFunctionName(fn) {\n  var match = \"\".concat(fn).match(fnNameMatchRegex);\n  var name = match && match[1];\n  return name || '';\n}\n/**\n * @param {function} Component\n * @param {string} fallback\n * @returns {string | undefined}\n */\n\nfunction getFunctionComponentName(Component) {\n  var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? \"\".concat(wrapperName, \"(\").concat(functionName, \")\") : wrapperName);\n}\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName with added IE 11 support\n *\n * @param {React.ReactType} Component\n * @returns {string | undefined}\n */\n\n\nexport default function getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n\n  if (typeof Component === 'string') {\n    return Component;\n  }\n\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  if (_typeof(Component) === 'object') {\n    switch (Component.$$typeof) {\n      case ForwardRef:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n\n      case Memo:\n        return getWrappedName(Component, Component.type, 'memo');\n\n      default:\n        return undefined;\n    }\n  }\n\n  return undefined;\n}","export default function HTMLElementType(props, propName, componentName, location, propFullName) {\n  if (process.env.NODE_ENV === 'production') {\n    return null;\n  }\n\n  var propValue = props[propName];\n  var safePropName = propFullName || propName;\n\n  if (propValue == null) {\n    return null;\n  }\n\n  if (propValue && propValue.nodeType !== 1) {\n    return new Error(\"Invalid \".concat(location, \" `\").concat(safePropName, \"` supplied to `\").concat(componentName, \"`. \") + \"Expected an HTMLElement.\");\n  }\n\n  return null;\n}","/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nexport default typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();","import PropTypes from 'prop-types';\nvar refType = PropTypes.oneOfType([PropTypes.func, PropTypes.object]);\nexport default refType;","import React from 'react';\nimport setRef from './setRef';\nexport default function useForkRef(refA, refB) {\n  /**\n   * This will create a new function if the ref props change and are defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior\n   */\n  return React.useMemo(function () {\n    if (refA == null && refB == null) {\n      return null;\n    }\n\n    return function (refValue) {\n      setRef(refA, refValue);\n      setRef(refB, refValue);\n    };\n  }, [refA, refB]);\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport Notification, { NOTIFICATION_TYPE } from '../../models/Notification';\nimport { LIST_ITEM_STATUS } from './reducer';\nimport { Dispatch } from 'redux';\n\nexport default {};\n\nexport enum NotificationTypes {\n  CONNECT_NOTIFICATION_SSE = 'CONNECT_NOTIFICATION_SSE',\n  CHECK_NOTIFICATION = 'CHECK_NOTIFICATION',\n  GET_NEW_NOTIFICATION = 'GET_NEW_NOTIFICATION',\n\n  GET_NOTIFICATION = 'GET_NOTIFICATION',\n  GET_NOTIFICATION_SUCCESS = 'GET_NOTIFICATION_SUCCESS',\n  GET_NOTIFICATION_FAIL = 'GET_NOTIFICATION_FAIL',\n\n  CREATE_NOTIFICATION = 'CREATE_NOTIFICATION',\n  CREATE_NOTIFICATION_SUCCESS = 'CREATE_NOTIFICATION_SUCCESS',\n  CREATE_NOTIFICATION_FAIL = 'CREATE_NOTIFICATION_FAIL',\n\n  CREATE_GLOBAL_NOTIFICATION = 'CREATE_GLOBAL_NOTIFICATION',\n  CREATE_GLOBAL_NOTIFICATION_SUCCESS = 'CREATE_NOTIFICATION_SUCCESS',\n  CREATE_GLOBAL_NOTIFICATION_FAIL = 'CREATE_GLOBAL_NOTIFICATION_FAIL',\n\n  MARK_NOTIFICATION_READ_OR_UNREAD = 'MARK_NOTIFICATION_READ_OR_UNREAD',\n  MARK_NOTIFICATION_READ_OR_UNREAD_SUCCESS = 'MARK_NOTIFICATION_READ_OR_UNREAD_SUCCESS',\n  MARK_NOTIFICATION_READ_OR_UNREAD_FAIL = 'MARK_NOTIFICATION_READ_OR_UNREAD_FAIL',\n\n  MARK_ALL_NOTIFICATIONS_READ = 'MARK_ALL_NOTIFICATIONS_READ',\n  MARK_ALL_NOTIFICATIONS_READ_SUCCESS = 'MARK_ALL_NOTIFICATIONS_READ_SUCCESS',\n  MARK_ALL_NOTIFICATIONS_READ_FAIL = 'MARK_ALL_NOTIFICATIONS_READ_FAIL',\n\n  OPEN_NOTIFICATION_DROP_DOWN = 'OPEN_NOTIFICATION_DROP_DOWN',\n  CLOSE_NOTIFICATION_DROP_DOWN = 'CLOSE_NOTIFICATION_DROP_DOWN',\n\n  SET_NOTIFICATIONS_LISTITEM_STATUS_LOADING = 'SET_NOTIFICATIONS_LISTITEM_STATUS_LOADING',\n  SET_NOTIFICATIONS_LISTITEM_STATUS_LOADED = 'SET_NOTIFICATIONS_LISTITEM_STATUS_LOADED',\n\n  SET_SHOULD_SCROLL_TO_TOP = 'SET_SHOULD_SCROLL_TO_TOP',\n\n  RESET_NOTIFICATION = 'RESET_NOTIFICATION'\n}\n\nexport class ResetNotification implements IAction {\n  public readonly type = NotificationTypes.RESET_NOTIFICATION;\n}\n\nexport class ConnectNotificationSse implements IAction {\n  public readonly type = NotificationTypes.CONNECT_NOTIFICATION_SSE;\n}\n\nexport class CheckNotification implements IAction {\n  public readonly type = NotificationTypes.CHECK_NOTIFICATION;\n\n  // The type of the notification that prompted the check, when one did. Absent\n  // for a reconnect or a login, which ask what changed without knowing.\n  constructor(\n    public payload: {\n      notificationType?: string;\n    } = {}\n  ) { }\n}\n\nexport class GetNewNotificationAction implements IAction {\n  public readonly type = NotificationTypes.GET_NEW_NOTIFICATION;\n\n  // The types the check stands for, empty when nothing named itself: a\n  // reconnect, a login and a sibling window's result all arrive that way.\n  constructor(\n    public payload: {\n      hasNewNotification: boolean;\n      notificationTypes?: string[];\n    }\n  ) { }\n}\n\nexport class GetNotification implements IAction {\n  public readonly type = NotificationTypes.GET_NOTIFICATION;\n\n  constructor(\n    public payload?: {\n      isRead?: boolean;\n      limit?: number;\n      offset?: number;\n      promise?: (ids: List<number>) => void;\n    }\n  ) { }\n}\n\nexport class GetNotificationSuccess implements IAction {\n  public readonly type = NotificationTypes.GET_NOTIFICATION_SUCCESS;\n\n  constructor(\n    public payload: {\n      notifications: List<IMap<Notification>>;\n      count: number;\n      readCount: number;\n      unreadCount: number;\n      options: any;\n    }\n  ) {\n  }\n}\n\nexport class CreateNotification implements IAction {\n  public readonly type = NotificationTypes.CREATE_NOTIFICATION;\n\n  constructor(\n    public payload?: {\n      userIds?: List<number>;\n      firmIds?: List<number>;\n      officeIds?: List<number>;\n      targetAppId: string;\n      type: NOTIFICATION_TYPE;\n      expiryDate?: string;\n      linkParams?: Map<any, any>;\n      templateParams?: Map<any, any>;\n    }\n  ) { }\n}\n\nexport class CreateGlobleNotification implements IAction {\n  public readonly type = NotificationTypes.CREATE_GLOBAL_NOTIFICATION;\n\n  constructor(\n    public payload: {\n      targetAppId: string;\n      type: NOTIFICATION_TYPE;\n      expiryDate?: string;\n      isGlobal?: boolean;\n      linkParams?: Map<any, any>;\n      templateParams?: Map<any, any>;\n    }\n  ) { }\n}\n\nexport class MarkNotificationReadOrUnread implements IAction {\n  public readonly type = NotificationTypes.MARK_NOTIFICATION_READ_OR_UNREAD;\n\n  constructor(\n    public payload: {\n      notificationId: number;\n      isRead?: boolean;\n    }\n  ) { }\n}\n\nexport class MarkNotificationReadOrUnreadSuccess implements IAction {\n  public readonly type = NotificationTypes.MARK_NOTIFICATION_READ_OR_UNREAD_SUCCESS;\n\n  constructor(\n    public payload: {\n      notification: IMap<Notification>\n    }\n  ) { }\n}\n\nexport class MarkAllNotificationsRead implements IAction {\n  public readonly type = NotificationTypes.MARK_ALL_NOTIFICATIONS_READ;\n}\n\nexport class MarkAllNotificationsReadSuccess implements IAction {\n  public readonly type = NotificationTypes.MARK_ALL_NOTIFICATIONS_READ_SUCCESS;\n\n  constructor(\n    public payload: {\n      notifications: List<IMap<Notification>>;\n      count: number;\n      readCount: number;\n      unreadCount: number;\n      options: any;\n    }\n  ) {\n  }\n}\n\nexport class OpenNotificationDropDown implements IAction {\n  public readonly type = NotificationTypes.OPEN_NOTIFICATION_DROP_DOWN;\n}\n\nexport class CloseNotificationDropDown implements IAction {\n  public readonly type = NotificationTypes.CLOSE_NOTIFICATION_DROP_DOWN;\n}\n\nexport class SetListItemStatusLoading implements IAction {\n  public readonly type = NotificationTypes.SET_NOTIFICATIONS_LISTITEM_STATUS_LOADING;\n\n  constructor(\n    public payload: {\n      id?: number;\n      index: number;\n    }\n  ) { }\n}\n\nexport class SetListItemStatusLoaded implements IAction {\n  public readonly type = NotificationTypes.SET_NOTIFICATIONS_LISTITEM_STATUS_LOADED;\n\n  constructor(\n    public payload: {\n      id?: number;\n      index: number;\n    }\n  ) { }\n}\n\nexport class SetShouldScrollToTop implements IAction {\n  public readonly type = NotificationTypes.SET_SHOULD_SCROLL_TO_TOP;\n\n  constructor(\n    public payload: boolean\n  ) { }\n}","import {\n  IMap, IAction,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  IRouterReducerLocation,\n} from '../../modules/RouterModule/selectors';\n\nimport {\n  push,\n} from 'connected-react-router/immutable';\nimport { Dispatch } from 'react';\n\nexport const togglePath = ({\n  pathName,\n  location,\n  dispatch,\n}: {\n  pathName: string,\n  location: IMap<IRouterReducerLocation>,\n  dispatch: Dispatch<IAction>,\n}) => {\n\n  return (open?: boolean) => () => {\n    const isOpen = location.get('pathname').indexOf(pathName) !== -1;\n    const shouldOpen = open != null ? open : !isOpen;\n    if (!shouldOpen) {\n      dispatch(\n        push(\n          (`/${location.get('pathname').replace(pathName, '')}${location.get('search')}${location.get('hash')}`).replace(/((?:^|[^:]))(\\/\\/+)/ig, '$1/')\n        )\n      ); // replace all multiple forward slash with single slash, unless preceeded by : (e.g. http://)\n    } else if (!isOpen) {\n      dispatch(\n        push(\n          (`/${location.get('pathname')}${pathName}${location.get('search')}${location.get('hash')}`).replace(/((?:^|[^:]))(\\/\\/+)/ig, '$1/')\n        )\n      );\n    }\n  };\n};\n\nexport default {\n  togglePath\n};","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return assertThisInitialized(self);\n}","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport interface InternalGlobal {\n  navigator?: { userAgent?: string };\n  console: Console;\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  onerror?: {\n    (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function (this: any) {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n  return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n  const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n","\n// default values\nconst dataStore = {\n  store: null,\n  atsApi: null,\n  reducerNamespace: 'atsApp💾',\n  env: {},\n};\n\nexport const store = {\n  set(key, value) {\n    // console.error('store.set', key, value);\n    dataStore[key] = value;\n  },\n  get(key) {\n    // console.error('store.get', key, dataStore[key]);\n    return dataStore[key];\n  },\n  store: dataStore,\n};\n\nexport default store;\n","/* eslint no-undef:0 */\nimport * as React from 'react';\n\nimport * as Autosuggest from 'react-autosuggest';\nimport match from 'autosuggest-highlight/match';\nimport parse from 'autosuggest-highlight/parse';\n\nimport * as _Fuse from 'fuse.js';\n\nconst Fuse = _Fuse as any;\n\nimport { withStyles, WithStyles, StyleRules } from '@material-ui/core/styles';\nimport {\n  Input,\n  InputLabel,\n  FormControl,\n  FormHelperText,\n  Paper,\n  Popper,\n  MenuItem,\n} from '@material-ui/core';\n\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\nimport { PopperProps } from '@material-ui/core/Popper';\nimport { isImmutable } from 'immutable';\n\nconst renderInput = (inputProps) => {\n  const { ref, ...other } = inputProps;\n\n  return (\n    <Input\n      fullWidth={true}\n      inputRef={ref}\n      {...other}\n    />\n  );\n};\n\nexport const renderSuggestion = ({\n  classes,\n  idKey,\n  valueKey,\n  getSuggestionDisabled,\n}) => (fuseItem, { query, isHighlighted }) => {\n  const suggestion = fuseItem.item;\n  const disabled = isFunction(getSuggestionDisabled) ? getSuggestionDisabled(suggestion) : false;\n\n  // console.error('renderSuggestion', {\n  //   fuseItem,\n  //   suggestion,\n  //   query,\n  //   isHighlighted,\n  // });\n  const matches = match(suggestion[valueKey], query);\n  const parts = parse(suggestion[valueKey], matches);\n\n  const keyMatch = fuseItem.matches.filter((suggestionMatch) => {\n    return suggestionMatch.key === valueKey;\n  });\n\n  // Every piece of text gets its own element. Browser page translation (Google / Edge Translate)\n  // wraps bare text nodes in <font> tags; when such nodes are direct children of the row, React's\n  // next update of the list throws \"Failed to execute 'removeChild' on 'Node'\" and unmounts the app.\n  const textPiece = (text: string, highlight: boolean, key: string) => text\n    ? <span className={highlight ? classes.matchHighlight : undefined} key={key}>{text}</span>\n    : null;\n\n  let display;\n\n  if (keyMatch.length !== 0) {\n    const keyMatchFirst = keyMatch[0];\n    const word = keyMatchFirst.value.split('');\n    const beginIndices = keyMatchFirst.indices.map((index) => index[0]);\n    const endIndices = keyMatchFirst.indices.map((index) => index[1]);\n    const wordBuilt = word.reduce(({ elements, currWord, highlight }, chr, idx) => {\n      const beginIndex = beginIndices.indexOf(idx);\n      const endIndex = endIndices.indexOf(idx);\n\n      if (beginIndex !== -1) {\n        if (endIndex === -1) {\n          return {\n            elements: [\n              ...elements,\n              textPiece(currWord, highlight, currWord + idx),\n            ],\n            currWord: chr,\n            highlight: true,\n          };\n        }\n        return { elements: [...elements, textPiece(currWord, highlight, currWord + idx), textPiece(chr, true, chr + idx)], currWord: '', highlight: false };\n      } else if (endIndex !== -1) {\n        return { elements: [...elements, textPiece(currWord + chr, highlight, currWord + chr + idx)], currWord: '', highlight: false };\n      }\n      return { elements: [...elements], currWord: currWord + chr, highlight };\n    }, { elements: [], currWord: '', highlight: false });\n\n    // final iteration\n    wordBuilt.elements = [...wordBuilt.elements, wordBuilt.highlight ? <b key='tail'>{wordBuilt.currWord}</b> : textPiece(wordBuilt.currWord, false, 'tail')];\n    display = (<div>\n      {wordBuilt.elements}\n    </div>);\n  } else {\n    display = (<div>\n      {parts.map((part, index) => part.highlight ? (\n        <strong key={String(index)} style={{ fontWeight: 'bold' }}>\n          {part.text}\n        </strong>\n        ) : (\n          <span key={String(index)}>\n            {part.text}\n          </span>\n        ))}\n    </div>);\n  }\n\n  return (\n    <MenuItem\n      selected={isHighlighted}\n      component='div'\n      disabled={disabled}\n    >\n      {display}\n    </MenuItem>\n  );\n};\n\nexport const renderSuggestionsContainer = (anchorEl, popperProps) => (options) => {\n  const { containerProps, children } = options;\n\n  // translate='no' keeps browser page translation away from the suggestions. Translating firm,\n  // city or product names is wrong anyway, and the DOM rewrite it performs breaks React's updates\n  // of this list (see textPiece in renderSuggestion).\n  return (\n    <Popper\n      open={children != null}\n      anchorEl={anchorEl.current}\n      placement='bottom-start'\n      style={{width: 256, zIndex: 1500}}\n      {...popperProps}\n    >\n      <Paper {...containerProps} square={true} translate='no' style={{\n        maxHeight: 256,\n        overflowY: 'auto',\n      }}>\n        {children}\n      </Paper>\n    </Popper>\n  );\n};\n\nconst getSuggestionValue = (suggestion) => {\n  return suggestion;\n};\n\nconst getSuggestions = (fuse, data, value) => {\n  const inputLength = value.length;\n\n  if (inputLength === 0) {\n    return data;\n  }\n\n  return fuse.search(value);\n};\n\ninterface IAutosuggestCustomProps<T> extends Partial<Autosuggest.AutosuggestProps<T>> {\n  idKey?: string;\n  valueKey?: string;\n  focusInputOnSuggestionClick?: boolean;\n  directMode?: boolean;\n  data?: T[];\n  renderMissingData?: (value: any) => string;\n  shouldRenderSuggestions?: (value: string) => boolean;\n  highlightFirstSuggestion?: boolean;\n  getSuggestionDisabled?: (item: T) => boolean;\n}\n\nexport interface IFieldAutoSuggestComponentProps<T = any> {\n  formControlProps?: object;\n  popperProps?: PopperProps;\n  inputProps?: object;\n  label?: string;\n  require?: boolean;\n  withDefaultContainerClass?: boolean;\n  labelProps?: object;\n  autosuggestProps?: IAutosuggestCustomProps<T>;\n  wholeValue?: boolean;\n  shouldRenderSuggestions?: (value: string) => boolean;\n}\n\n//\ninterface IDefaultType {\n  id: string;\n  value: string;\n}\n\ninterface IFieldAutoSuggestProps<T> extends IFieldAutoSuggestComponentProps<T> {\n\n}\n\ntype FieldAutoSuggestProps<T> =\n  IFieldAutoSuggestProps<T>\n  & WrappedFieldProps\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IFieldAutoSuggestState {\n  value: any;\n  data: any[];\n  timeout: any; // return from setTimeout - different depending on implementation\n  justSelectedSuggestion: boolean;\n}\nclass FieldAutoSuggest<T extends object = IDefaultType> extends React.Component<FieldAutoSuggestProps<T>, IFieldAutoSuggestState> {\n\n  public state: IFieldAutoSuggestState = {\n    value: null,\n    data: [],\n    timeout: null,\n    justSelectedSuggestion: false,\n  };\n\n  public anchorEl = React.createRef<HTMLDivElement>();\n\n  public onSuggestionSelected = (value) => {\n    this.setState({\n      justSelectedSuggestion: true,\n    });\n  }\n\n  // override this in autosuggestProps when using this component\n  // by default, don't go crazy it freezes up on lists like cities and towns with 5k+ entries\n  public shouldRenderSuggestions = (value = '') => {\n    return value.length > 2;\n    // return true;\n    // return !this.state.justSelectedSuggestion;\n  }\n\n  public handleSuggestionsFetchRequested = (fuse, data) => ({ value }) => {\n    this.clearTimeout();\n\n    if ( value && value.length === 0) {\n      this.setState({\n        data: getSuggestions(fuse, data, value),\n      });\n    } else {\n      const timeout = setTimeout(() => {\n        this.setState({\n          data: getSuggestions(fuse, data, value).slice(0, 50),\n        });\n      }, 500);\n      this.setState({\n        timeout,\n      });\n    }\n  }\n\n  public handleSuggestionsClearRequested = () => () => {\n    this.setState({\n      data: [],\n    });\n  }\n\n  public handleChange = ({\n    onChange,\n    directMode,\n    suggestionNameLookup,\n    suggestionItemLookup,\n    idKey,\n    valueKey,\n    getSuggestionDisabled,\n  }) => (event, { newValue }: {newValue?: {item: any}} = {} ) => {\n    this.clearTimeout();\n    const item = (newValue && newValue.item) || newValue;\n\n    if (event == null || item == null) {\n      return;\n    }\n\n    // Block picking a disabled suggestion via click/keyboard (item is the suggestion object).\n    if (typeof item === 'object' && isFunction(getSuggestionDisabled) && getSuggestionDisabled(item)) {\n      return;\n    }\n    let inputValue;\n    let returnValue;\n\n    if (item != null && item[valueKey] != null && !this.props.wholeValue) {\n      inputValue = item[valueKey];\n    } else {\n      inputValue = item;\n    }\n\n    if (directMode) {\n      returnValue = inputValue;\n    } else {\n      this.setState({\n        value: inputValue,\n      });\n      if (item != null && item[idKey] != null) {\n        returnValue = item[idKey];\n      } else {\n        // Block resolving a disabled entry typed/pasted as free text: keep the typed\n        // text visible but refuse to commit its id (clears on blur like any unknown value).\n        const typedItem = suggestionItemLookup ? suggestionItemLookup[inputValue] : undefined;\n        returnValue = (typedItem != null && isFunction(getSuggestionDisabled) && getSuggestionDisabled(typedItem))\n          ? null\n          : (suggestionNameLookup[inputValue] || null);\n      }\n    }\n\n    let value = item;\n    if (this.props.wholeValue && typeof item === 'string' && returnValue) {\n      value = {id: returnValue, value: item};\n    }\n\n    onChange(this.props.wholeValue ? value : returnValue, event);\n  }\n\n  public handleBlur = ({\n    onBlur,\n    directMode,\n    suggestionNameLookup,\n    idKey,\n    valueKey,\n  }) => (...args) => {\n    this.clearTimeout();\n    if (directMode) {\n      onBlur(...args);\n    } else {\n      this.setState({\n        value: null,\n      });\n    }\n  }\n\n  public clearTimeout = () => {\n    let {\n      timeout,\n    } = this.state;\n    if (timeout != null) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      input,\n      meta: {\n        error,\n        touched,\n        warning,\n        active,\n        visited\n      } = {\n        error: undefined,\n        touched: undefined,\n        warning: undefined,\n        active: undefined,\n        visited: undefined\n      },\n      label,\n      require = false,\n      withDefaultContainerClass = true,\n      inputProps = {},\n      autosuggestProps: {\n        focusInputOnSuggestionClick = false,\n        directMode = true,\n        idKey = 'id',\n        valueKey = 'value',\n        data = [],\n        renderMissingData = (value) => `Please Choose: ${value}`,\n        getSuggestionDisabled,\n        ...otherAutosuggestProps\n      } = {\n      },\n      formControlProps = {},\n      popperProps = {},\n    } = this.props;\n\n    // hack.. without this for some reason the ReduxForm input.onChange doesn't trigger...\n    if ((inputProps as any).onChange == null) {\n      (inputProps as any).onChange = () => undefined;\n    }\n\n    const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n      const valueAsArray = singleOrArray(inputProps[key]);\n\n      if (isFunction(valueAsArray[0])) {\n        return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n      }\n      return { ...O, [key]: inputProps[key] };\n    }, input || {});\n\n    if (customOverrides.defaultValue != null) {\n      customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n      delete customOverrides.defaultValue;\n    }\n\n    if (customOverrides.value && isImmutable(customOverrides.value)) {\n      customOverrides.value = customOverrides.value.toJS();\n    }\n\n    const suggestionNameLookup = {};\n    const suggestionIdLookup = {};\n    const suggestionItemLookup = {};\n    data.forEach((suggestion: T) => {\n      const suggestionValue = suggestion[valueKey];\n      const suggestionId = suggestion[idKey];\n      suggestionNameLookup[suggestionValue] = suggestionId;\n      suggestionIdLookup[suggestionId] = suggestionValue;\n      suggestionItemLookup[suggestionValue] = suggestion;\n    });\n\n    if (customOverrides.onChange != null) {\n      customOverrides.onChange = this.handleChange({\n        onChange: customOverrides.onChange,\n        directMode,\n        suggestionNameLookup,\n        suggestionItemLookup,\n        idKey,\n        valueKey,\n        getSuggestionDisabled,\n      });\n    }\n    if (customOverrides.onBlur != null) {\n      customOverrides.onBlur = this.handleBlur({\n        onBlur: customOverrides.onBlur,\n        directMode,\n        suggestionNameLookup,\n        idKey,\n        valueKey,\n      });\n    }\n    // this passes through strings directly - doesn't deal with ids\n    if (directMode) {\n      // this will intercept the strings, save it to state, then withTranslation it to ids on blur\n      customOverrides.value = `${customOverrides.value || ''}`;\n    } else if (this.state.value != null) {\n      customOverrides.value = this.state.value;\n    } else if (customOverrides.value != null && customOverrides.value !== '') {\n      const value = customOverrides.value;\n      let selectedValue = suggestionIdLookup[this.props.wholeValue ? value?.id : value];\n\n      if (selectedValue == null) {\n        selectedValue = isFunction(renderMissingData) ? renderMissingData(value) : value;\n      }\n      customOverrides.value = selectedValue || '';\n    }\n\n    const fuseOptions = {\n      includeMatches: true,\n      keys: [{\n        name: idKey,\n        weight: 0.1,\n      }, {\n        name: valueKey,\n        weight: 0.9,\n      }],\n    };\n\n    const fuse = new Fuse(data, fuseOptions);\n    const TypedAutosuggest = Autosuggest as unknown as new () => Autosuggest<T>;\n    const showError = Boolean(touched && (error || warning));\n    return (\n      <FormControl error={showError} {...formControlProps} aria-describedby='helper-text'>\n        { label && <InputLabel htmlFor='input-field'>{require ? `${label} *` : label}</InputLabel> }\n        <TypedAutosuggest\n          theme={{\n            container: withDefaultContainerClass ? classes.container : '',\n            suggestionsContainerOpen: classes.suggestionsContainerOpen,\n            suggestionsList: classes.suggestionsList,\n            suggestion: classes.suggestion,\n          }}\n          renderInputComponent={renderInput}\n          suggestions={this.state.data}\n          shouldRenderSuggestions={this.shouldRenderSuggestions}\n          onSuggestionsFetchRequested={this.handleSuggestionsFetchRequested(fuse, data.map((item) => {\n            return {\n              item,\n              matches: [],\n            };\n          }))}\n          onSuggestionSelected={this.onSuggestionSelected}\n          onSuggestionsClearRequested={this.handleSuggestionsClearRequested()}\n          renderSuggestionsContainer={renderSuggestionsContainer(this.anchorEl, popperProps)}\n          getSuggestionValue={getSuggestionValue}\n          renderSuggestion={renderSuggestion({\n            classes,\n            idKey,\n            valueKey,\n            getSuggestionDisabled,\n          })}\n          focusInputOnSuggestionClick={focusInputOnSuggestionClick}\n          inputProps={{\n            ...customOverrides\n          }}\n          {...otherAutosuggestProps}\n        />\n        <div style={{width: '100%'}} ref={this.anchorEl} />\n        <FormHelperText\n          id='helper-text'\n          error={showError}\n        >\n          {showError && (error || warning)}\n        </FormHelperText>\n      </FormControl>\n    );\n  }\n}\n\nconst styles = (theme): StyleRules => ({\n  container: {\n    flexGrow: 1,\n    position: 'relative',\n    marginTop: theme.spacing() * 2,\n  },\n  suggestionsContainerOpen: {\n    position: 'absolute',\n    marginTop: theme.spacing(),\n    marginBottom: theme.spacing() * 3,\n    left: 0,\n    right: 0,\n    zIndex: 1,\n  },\n  suggestion: {\n    display: 'block',\n  },\n  suggestionsList: {\n    margin: 0,\n    padding: 0,\n    listStyleType: 'none',\n  },\n  matchHighlight: {\n    color: theme.palette.primary[900],\n  },\n});\n\nexport default withStyles(styles)(FieldAutoSuggest);\n","// just object with id\nimport Base from '../Base';\nexport default class HasId extends Base {\n  public id: number;\n  public constructor(init?: Partial<HasId & Base>) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","export default function _taggedTemplateLiteral(strings, raw) {\n  if (!raw) {\n    raw = strings.slice(0);\n  }\n\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}","import { IMap } from 'ats-utils/src';\nimport { fromJS } from 'immutable';\nimport * as React from 'react';\nimport { MAX_FILE_SIZE_100MB } from '../constants';\nimport AtsApiContext from '../contexts/AtsApiContext';\nimport { IFileMetaObj } from '../modules/FileModule/saga';\nimport { readUploadResponse } from '../utils/uploadResponse';\n\n// contains basic upload file logic\n// optionally accepts a max file size argument\n// if no argument provided - defaults to max 15MB, and no file type check\n\n// TO USE:\n// the hook provides a setFile cb\n// in the parent component on file change - provide the file to setFile cb\n// i.e. onChange={(e) => setFile(e.target.files[0])}\n// when useFileUpload gets the file, it'll perform all basic upload file duties LOL\n// (i.e. make the upload file call, keep track of loading percentages, and upload errors)\n// it will return the final uploadedFile, loadingPercentage, isUploading flag and uploadedErr\n\nexport enum ERROR_TYPE {\n  size = 'size',\n  type = 'type',\n  failedUpload = 'failedUpload',\n  sizeFromUrl = 'sizeFromUrl',\n  typeFromUrl = 'typeFromUrl',\n  failedUploadFromUrl = 'failedUploadFromUrl',\n}\n\nconst useFileUpload = (acceptedExtensions = [], maxFileSize = MAX_FILE_SIZE_100MB) => {\n  const atsApi = React.useContext(AtsApiContext);\n\n  const [file, setFile] = React.useState<File>(null);\n  const [uploadedFile, setUploadedFile] = React.useState<IMap<IFileMetaObj>>(null);\n  const [loadingPercentage, setLoadingPercentage] = React.useState<string>(null);\n  const [isUploading, setIsUploading] = React.useState(false);\n  const [uploadErr, setUploadErr] = React.useState<ERROR_TYPE | null>(null);\n\n  React.useEffect(() => {\n    uploadFile();\n  }, [file]);\n\n  const uploadFile = () => {\n    const fileUploadUrl = atsApi.callApi({\n      service: 'file',\n      endpoint: 'uploadFile',\n      urlOnly: true,\n      withToken: true,\n      withAppId: true,\n    }) as string;\n\n    setUploadErr(null);\n\n    if (!file) {\n      return;\n    }\n\n    if (acceptedExtensions.length && !(new RegExp('(' + acceptedExtensions.join('|').replace(/\\./g, '\\\\.') + ')$', 'i')).test(file.name)) {\n      return setUploadErr(ERROR_TYPE.type);\n    }\n\n    if (file.size > maxFileSize) {\n      return setUploadErr(ERROR_TYPE.size);\n    }\n\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    data.append('file', file);\n    data.append('type', 'file');\n\n    req.open('POST', fileUploadUrl);\n\n    req.upload.addEventListener('progress', (e) => {\n      const percent = Math.round((e.loaded / e.total) * 100);\n      setLoadingPercentage(percent.toFixed(0));\n    });\n\n    req.onloadstart = () => setIsUploading(true);\n\n    req.addEventListener('loadend', (e) => {\n      setIsUploading(false);\n      const { payload, error } = readUploadResponse(req);\n\n      if (error) {\n        console.error('error uploading file', error); //tslint:disable-line\n        return setUploadErr(ERROR_TYPE.failedUpload);\n      }\n\n      const uploaded: IMap<IFileMetaObj> = fromJS(payload.file.files[0]);\n      setUploadedFile(uploaded);\n    });\n\n    req.send(data);\n  };\n\n  return {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setUploadErr,\n    setFile\n  } as const;\n};\n\nexport default useFileUpload;","import {\n  Map,\n} from 'immutable';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  createSelector,\n} from 'reselect';\nimport {\n  ILanguageReducerState\n} from './reducer';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added LanguageModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectLocale = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ILanguageReducerState>) => state.get('locale')\n);\n\nexport default {\n  selectReducerState,\n};\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  IDashboardWidgetConfig,\n  WidgetAdmin,\n  Dashboard,\n  WidgetLayoutData,\n  WidgetData,\n} from '../../models';\n\nimport {\n  List,\n} from 'immutable';\n\n\nexport default {};\n\nexport enum DashboardActionTypes {\n  LOAD_DASHBOARD = 'LOAD_DASHBOARD',\n  WIDGET_LOADED_ONCE = 'WIDGET_LOADED_ONCE',\n  DASHBOARD_LOADED = 'DASHBOARD_LOADED',\n  WIDGET_ADMINS_LOADED = 'WIDGET_ADMINS_LOADED',\n\n  DASHBOARD_UPDATE_LAYOUT = 'DASHBOARD_UPDATE_LAYOUT',\n  DASHBOARD_DELETE_WIDGET = 'DASHBOARD_DELETE_WIDGET',\n  DASHBOARD_WIDGET_CREATED = 'DASHBOARD_WIDGET_CREATED',\n\n  WIDGET_LAYOUT_DATA_UPDATED_LOCAL = 'WIDGET_LAYOUT_DATA_UPDATED_LOCAL',\n  WIDGET_LAYOUT_DATA_UPDATED = 'WIDGET_LAYOUT_DATA_UPDATED',\n  WIDGET_DATA_UPDATE_BY_WIDGET_ID = 'WIDGET_DATA_UPDATE_BY_WIDGET_ID',\n  WIDGET_DATA_UPDATED = 'WIDGET_DATA_UPDATED',\n  SET_IS_FETCHING_WIDGET_DATA_BY_WIDGET_ID = 'SET_IS_FETCHING_WIDGET_DATA_BY_WIDGET_ID',\n  FETCH_WIDGETS_DATA = 'FETCH_WIDGETS_DATA',\n  SET_ALLOW_BATCH_WIDGETS_DATA_FETCH = 'SET_ALLOW_BATCH_WIDGETS_DATA_FETCH',\n}\n\nexport class LoadDashboardAction implements IAction {\n  public readonly type = DashboardActionTypes.LOAD_DASHBOARD;\n}\nexport class DashboardLoadedAction implements IAction {\n  public readonly type = DashboardActionTypes.DASHBOARD_LOADED;\n  constructor(\n    public payload: {\n      dashboard: IMap<Dashboard>;\n    }\n  ) {}\n}\n\nexport class WidgetLoadedOnceAction implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_LOADED_ONCE;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n    }\n  ) {}\n}\n\n\n\nexport class WidgetAdminsLoadedAction implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_ADMINS_LOADED;\n  constructor(\n    public payload: {\n      widgetAdmins: IMap<WidgetAdmin[]>;\n    }\n  ) {}\n}\n\n\nexport class DashboardUpdateLayoutAction {\n  public readonly type = DashboardActionTypes.DASHBOARD_UPDATE_LAYOUT;\n  constructor(\n    public payload: {\n      layout: List<IMap<IDashboardWidgetConfig>>;\n    }\n  ) {}\n}\n\nexport class DashboardWidgetCreatedAction {\n  public readonly type = DashboardActionTypes.DASHBOARD_WIDGET_CREATED;\n  constructor(\n    public payload: {\n      key: string;\n      widget: IMap<IDashboardWidgetConfig>;\n    }\n  ) {}\n}\n\nexport class DashboardDeleteWidgetAction {\n  public readonly type = DashboardActionTypes.DASHBOARD_DELETE_WIDGET;\n  constructor(\n    public payload: {\n      key: string;\n    }\n  ) {}\n}\n\nexport class WidgetLayoutUpdated {\n  public readonly type = DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      widgetLayoutData?: IMap<WidgetLayoutData> | false;\n    }\n  ) {}\n}\n\nexport class WidgetLayoutDataUpdatedLocalAction implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED_LOCAL;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      widgetLayoutData?: IMap<WidgetLayoutData> | false;\n      refreshData: any;\n      timeout: number;\n    }\n  ) {}\n}\n\nexport class WidgetLayoutDataUpdatedAction extends WidgetLayoutUpdated implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      widgetLayoutData?: IMap<WidgetLayoutData> | false;\n    }\n  ) {\n    super(payload);\n  }\n}\n\nexport class WidgetDataUpdateByUserWidgetIdAction implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_DATA_UPDATE_BY_WIDGET_ID;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      options: any;\n    }\n  ) {}\n}\n\nexport class WidgetDataUpdatedAction implements IAction {\n  public readonly type = DashboardActionTypes.WIDGET_DATA_UPDATED;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      count?: number;\n      hasNextPage?: boolean;\n      widgetData?: IMap<WidgetData> | false;\n      options?: any;\n    }\n  ) {}\n}\n\nexport class SetIsFetchingWidgetDataByWidgetIdAction implements IAction {\n  public readonly type = DashboardActionTypes.SET_IS_FETCHING_WIDGET_DATA_BY_WIDGET_ID;\n  constructor(\n    public payload: {\n      userWidgetId: number;\n      isFetching: boolean;\n    }\n  ) {}\n}\n\nexport class FetchWidgetsDataAction implements IAction {\n  public readonly type = DashboardActionTypes.FETCH_WIDGETS_DATA;\n}\n\nexport class SetAllowBatchWidgetsDataFetchAction implements IAction {\n  public readonly type = DashboardActionTypes.SET_ALLOW_BATCH_WIDGETS_DATA_FETCH;\n  constructor(\n    public payload: boolean\n  ) {}\n}\n","import { __extends } from \"tslib\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer, toHexStringOfMinLength, utf16Decode, utf16Encode, pdfDocEncodingDecode, parseDate, hasUtf16BOM, } from \"../../utils\";\nimport { InvalidPDFDateStringError } from \"../errors\";\nvar PDFHexString = /** @class */ (function (_super) {\n    __extends(PDFHexString, _super);\n    function PDFHexString(value) {\n        var _this = _super.call(this) || this;\n        _this.value = value;\n        return _this;\n    }\n    PDFHexString.prototype.asBytes = function () {\n        // Append a zero if the number of digits is odd. See PDF spec 7.3.4.3\n        var hex = this.value + (this.value.length % 2 === 1 ? '0' : '');\n        var hexLength = hex.length;\n        var bytes = new Uint8Array(hex.length / 2);\n        var hexOffset = 0;\n        var bytesOffset = 0;\n        // Interpret each pair of hex digits as a single byte\n        while (hexOffset < hexLength) {\n            var byte = parseInt(hex.substring(hexOffset, hexOffset + 2), 16);\n            bytes[bytesOffset] = byte;\n            hexOffset += 2;\n            bytesOffset += 1;\n        }\n        return bytes;\n    };\n    PDFHexString.prototype.decodeText = function () {\n        var bytes = this.asBytes();\n        if (hasUtf16BOM(bytes))\n            return utf16Decode(bytes);\n        return pdfDocEncodingDecode(bytes);\n    };\n    PDFHexString.prototype.decodeDate = function () {\n        var text = this.decodeText();\n        var date = parseDate(text);\n        if (!date)\n            throw new InvalidPDFDateStringError(text);\n        return date;\n    };\n    PDFHexString.prototype.asString = function () {\n        return this.value;\n    };\n    PDFHexString.prototype.clone = function () {\n        return PDFHexString.of(this.value);\n    };\n    PDFHexString.prototype.toString = function () {\n        return \"<\" + this.value + \">\";\n    };\n    PDFHexString.prototype.sizeInBytes = function () {\n        return this.value.length + 2;\n    };\n    PDFHexString.prototype.copyBytesInto = function (buffer, offset) {\n        buffer[offset++] = CharCodes.LessThan;\n        offset += copyStringIntoBuffer(this.value, buffer, offset);\n        buffer[offset++] = CharCodes.GreaterThan;\n        return this.value.length + 2;\n    };\n    PDFHexString.of = function (value) { return new PDFHexString(value); };\n    PDFHexString.fromText = function (value) {\n        var encoded = utf16Encode(value);\n        var hex = '';\n        for (var idx = 0, len = encoded.length; idx < len; idx++) {\n            hex += toHexStringOfMinLength(encoded[idx], 4);\n        }\n        return new PDFHexString(hex);\n    };\n    return PDFHexString;\n}(PDFObject));\nexport default PDFHexString;\n//# sourceMappingURL=PDFHexString.js.map","export default function _objectDestructuringEmpty(obj) {\n  if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n}","\nimport * as React from 'react';\nimport {\n  InputLabel,\n  FormControl,\n  FormHelperText,\n  Theme,\n} from '@material-ui/core';\n\nimport ReactSelect from 'react-select';\n\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\n\nconst handleChange = (onChange) => (...args) => {\n  onChange(...args);\n};\n\nconst handleBlur = (onBlur) => (...args) => { // tslint:disable-line\n  // onBlur(...args);\n  // console.error('blur', {\n  //   args,\n  // });\n};\n\n// default field react styles\nexport const fieldReactSelectStyles = (theme: Theme) => {\n  return {\n    control: (base, state) => ({\n      ...base,\n      borderWidth: `0 0 1px 0`,\n      borderRadius: '0',\n      boxShadow: state.isFocused ? 0 : 0,\n      borderColor: theme.typography.subtitle2.color,\n      '&:hover': {\n        borderColor: theme.palette.primary.main\n      },\n    }),\n    indicatorSeparator: providedStyles => ({\n      ...providedStyles,\n      backgroundColor: 'transparent',\n    }),\n    valueContainer: providedStyles => ({\n      ...providedStyles,\n      padding: '0',\n    }),\n  };\n};\n\nexport interface IFieldReactSelectComponentProps {\n  formControlProps?: object;\n  inputProps?: object;\n  label?: string;\n  labelStyle?: React.CSSProperties;\n  placeholder?: string;\n  styles?: object;\n  helperText?: boolean;\n}\n\nexport type IFieldReactSelectWrappedComponentProps = IFieldReactSelectComponentProps & WrappedFieldProps;\n\ninterface IFieldReactSelectProps extends IFieldReactSelectWrappedComponentProps {\n}\n\nexport type FieldReactSelectProps = IFieldReactSelectProps;\n\nconst FieldReactSelect: React.SFC<FieldReactSelectProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched, // eslint-disable-line no-unused-vars\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    labelStyle,\n    placeholder,\n    inputProps = {},\n    formControlProps = {},\n    helperText = true,\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value != null && customOverrides.value !== '' ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n  if (customOverrides.onChange != null) {\n    customOverrides.onChange = handleChange(customOverrides.onChange);\n  }\n\n  // https://github.com/JedWatson/react-select/issues/805\n  // need a enableCustomOnBlur=true to use custom onBlur\n  // reason is the above issue. this way the default of not passing in enableCustomOnBlur will trigger below code as temporay fix to highjack onBlur to do nothing\n  // lol looks like it works now. idk man. ask jasmine\n  if (!customOverrides.enableCustomOnBlur && customOverrides.onBlur != null) {\n    // customOverrides.onBlur = handleBlur(customOverrides.onBlur);\n  }\n\n  const defaultInputProps = {\n    // optionComponent: (\n    //   ({ children, isFocused, onFocus, onSelect, option }) => (<MenuItem\n    //     onFocus={onFocus}\n    //     selected={isFocused}\n    //     onClick={(e) => onSelect(option, e)}\n    //     component='div'\n    //   >\n    //     {children}\n    //   </MenuItem>)\n    // ),\n    // autoBlur: true,\n    // onBlurResetsInput: true,\n    // noResultsText: (\n    //   <Typography>\n    //     {'No results found'}\n    //   </Typography>\n    // ),\n    // arrowRenderer: (\n    //   (arrowProps) => arrowProps.isOpen ?\n    //     <FontAwesomeIcon\n    //       icon='sort-up'\n    //     /> :\n    //     <FontAwesomeIcon\n    //       icon='sort-down'\n    //     />\n    // ),\n    // valueComponent: (\n    //   (valueProps) => {\n    //     const {\n    //       children,\n    //     } = valueProps;\n    //     return <div>{children}</div>;\n    //   }\n    // ),\n  };\n\n  // console.error('fieldreactselect', {\n  //   rest,\n  //   customOverrides,\n  // });\n  const resolvedLabel = label || customOverrides.label;\n  const resolvedLabelStyle = labelStyle || {};\n  const hasValue = Array.isArray(customOverrides.value) ? customOverrides.value.length > 0 : !!customOverrides.value;\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      {\n        resolvedLabel ? (\n          <InputLabel\n            shrink={hasValue}\n            htmlFor='input-field'\n            style={{\n              ...resolvedLabelStyle,\n            }}\n          >\n            {resolvedLabel}\n          </InputLabel>\n        ) : null\n      }\n      <ReactSelect\n        {...defaultInputProps}\n        {...customOverrides}\n        {...rest}\n        placeholder={customOverrides.placeholder && customOverrides.require ? `${customOverrides.placeholder} *` : customOverrides.require ? 'Select... *' : customOverrides.placeholder}\n        onBlur={(e) => customOverrides.byPassBlurAction ? e.preventDefault() : input.onBlur && input.onBlur(input.value)}\n      />\n      {helperText && <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nexport default FieldReactSelect;\n","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nexport default {};\n\nexport enum ErrorActionTypes {\n  TOGGLE_ERROR_MENU = 'TOGGLE_ERROR_MENU',\n  RESET_ERROR = 'RESET_ERROR',\n  ERROR = 'ERROR'\n}\n\nexport class AddErrorAction implements IAction {\n  public readonly type = ErrorActionTypes.ERROR;\n\n  constructor(\n    public payload: {\n      message: string,\n      id?: any,\n      meta?: {\n        [s: string]: any;\n      },\n      suppressGlobalErrorNotification?: boolean,\n    }\n  ) {\n  }\n}\n\nexport class ResetErrorAction implements IAction {\n  public readonly type = ErrorActionTypes.RESET_ERROR;\n\n  constructor(\n    public payload: {\n      index?: number,\n      id?: any,\n      meta?: {\n        [s: string]: any;\n      },\n    }\n  ) {}\n}\n\nexport class ToggleErrorMenuAction implements IAction {\n  public readonly type = ErrorActionTypes.TOGGLE_ERROR_MENU;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  BuildingClassListItem,\n  ListItem\n} from '../../models';\nimport {\n  List\n} from 'immutable';\n\nexport default {};\n\nexport enum BuildingClassTypes {\n  GET_BUILDING_SUCCEEDED = 'GET_BUILDING_SUCCEEDED',\n  GET_BUILDING_FAILED = 'GET_BUILDING_FAILED',\n  GET_BUILDING_CLASS = 'GET_BUILDING_CLASS',\n  GET_BUILDING_CLASSES = 'GET_BUILDING_CLASSES',\n  GET_BUILDING_CLASSES_SUCCEEDED = 'GET_BUILDING_CLASSES_SUCCEEDED',\n  GET_BUILDING_TYPES_SUCCEEDED = 'GET_BUILDING_TYPES_SUCCEEDED',\n  GET_MULTI_BUILDING = 'GET_MULTI_BUILDING',\n  TOGGLE_MULTI = 'TOGGLE_MULTI',\n  GET_BUILDING_TYPES = 'GET_BUILDING_TYPES',\n  GET_MULTIPLE_BUILDING_TYPES = 'GET_MULTIPLE_BUILDING_TYPES',\n  SELECT_BUILDING_CLASS = 'SELECT_BUILDING_CLASS',\n  SELECT_BUILDING_TYPE = 'SELECT_BUILDING_TYPE',\n  SELECT_BUILDING_TYPES = 'SELECT_BUILDING_TYPES',\n}\n\nexport class ToggleMultiAction implements IAction {\n  public readonly type = BuildingClassTypes.TOGGLE_MULTI;\n\n  constructor(\n    public payload: {\n      isMulti: any;\n    }\n  ) {}\n}\n\nexport class SelectBuildingTypeAction implements IAction {\n  public readonly type = BuildingClassTypes.SELECT_BUILDING_TYPE;\n\n  constructor(\n    public payload: {\n      id: any;\n    }\n  ) {}\n}\n\nexport class SelectBuildingTypesAction implements IAction {\n  public readonly type = BuildingClassTypes.SELECT_BUILDING_TYPES;\n\n}\n\nexport class SelectBuildingClassAction implements IAction {\n  public readonly type = BuildingClassTypes.SELECT_BUILDING_CLASS;\n\n  constructor(\n    public payload: {\n      id: any;\n    }\n  ) {}\n}\n\nexport class GetBuildingClassesAction implements IAction {\n  public readonly type = BuildingClassTypes.GET_BUILDING_CLASSES;\n}\n\nexport class GetBuildingClassesSucceededAction implements IAction {\n  public readonly type = BuildingClassTypes.GET_BUILDING_CLASSES_SUCCEEDED;\n\n  constructor (\n    public payload: {\n      isMulti?: boolean;\n      isSingle?: boolean;\n      list: List<IMap<BuildingClassListItem>>;\n    }\n  ) {}\n}\n\nexport class GetBuildingTypesSucceededAction implements IAction {\n  public readonly type = BuildingClassTypes.GET_BUILDING_TYPES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      id: string | number,\n      list: List<IMap<ListItem<string, string>>>;\n    }\n  ) {}\n}\n\nexport class GetBuildingFailedAction implements IAction {\n  public readonly type = BuildingClassTypes.GET_BUILDING_FAILED;\n\n  constructor(\n    public payload: {\n      err: Error | string;\n    }\n  ) {}\n}\n\nexport class GetBuildingTypesAction implements IAction {\n  public readonly type = BuildingClassTypes.GET_BUILDING_TYPES;\n\n  constructor(\n    public payload: string | number,\n  ) {}\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toPrimitive from \"@babel/runtime/helpers/esm/toPrimitive\";\nexport default function _toPropertyKey(arg) {\n  var key = toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nexport default function _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n\n  return (hint === \"string\" ? String : Number)(input);\n}","import React from 'react';\n\ninterface Props {\n  id: string;\n  value: string;\n}\n\nconst hiddenStyles: React.CSSProperties = {\n  display: 'none',\n};\n\nexport function HiddenText({id, value}: Props) {\n  return (\n    <div id={id} style={hiddenStyles}>\n      {value}\n    </div>\n  );\n}\n","import React from 'react';\n\nexport interface Props {\n  id: string;\n  announcement: string;\n  ariaLiveType?: \"polite\" | \"assertive\" | \"off\";\n}\n\nexport function LiveRegion({id, announcement, ariaLiveType = \"assertive\"}: Props) {\n  // Hide element visually but keep it readable by screen readers\n  const visuallyHidden: React.CSSProperties = {\n    position: 'fixed',\n    top: 0,\n    left: 0,\n    width: 1,\n    height: 1,\n    margin: -1,\n    border: 0,\n    padding: 0,\n    overflow: 'hidden',\n    clip: 'rect(0 0 0 0)',\n    clipPath: 'inset(100%)',\n    whiteSpace: 'nowrap',\n  };\n  \n  return (\n    <div\n      id={id}\n      style={visuallyHidden}\n      role=\"status\"\n      aria-live={ariaLiveType}\n      aria-atomic\n    >\n      {announcement}\n    </div>\n  );\n}\n","import type {Coordinates, UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\nexport enum Action {\n  DragStart = 'dragStart',\n  DragMove = 'dragMove',\n  DragEnd = 'dragEnd',\n  DragCancel = 'dragCancel',\n  DragOver = 'dragOver',\n  RegisterDroppable = 'registerDroppable',\n  SetDroppableDisabled = 'setDroppableDisabled',\n  UnregisterDroppable = 'unregisterDroppable',\n}\n\nexport type Actions =\n  | {\n      type: Action.DragStart;\n      active: UniqueIdentifier;\n      initialCoordinates: Coordinates;\n    }\n  | {type: Action.DragMove; coordinates: Coordinates}\n  | {type: Action.DragEnd}\n  | {type: Action.DragCancel}\n  | {\n      type: Action.RegisterDroppable;\n      element: DroppableContainer;\n    }\n  | {\n      type: Action.SetDroppableDisabled;\n      id: UniqueIdentifier;\n      disabled: boolean;\n    }\n  | {\n      type: Action.UnregisterDroppable;\n      id: UniqueIdentifier;\n    };\n","import type {Announcements, ScreenReaderInstructions} from './types';\n\nexport const screenReaderInstructions: ScreenReaderInstructions = {\n  draggable: `\n    To pick up a draggable item, press the space bar.\n    While dragging, use the arrow keys to move the item.\n    Press space again to drop the item in its new position, or press escape to cancel.\n  `,\n};\n\nexport const defaultAnnouncements: Announcements = {\n  onDragStart(id) {\n    return `Picked up draggable item ${id}.`;\n  },\n  onDragOver(id, overId) {\n    if (overId) {\n      return `Draggable item ${id} was moved over droppable area ${overId}.`;\n    }\n\n    return `Draggable item ${id} is no longer over a droppable area.`;\n  },\n  onDragEnd(id, overId) {\n    if (overId) {\n      return `Draggable item ${id} was dropped over droppable area ${overId}`;\n    }\n\n    return `Draggable item ${id} was dropped.`;\n  },\n  onDragCancel(id) {\n    return `Dragging was cancelled. Draggable item ${id} was dropped.`;\n  },\n};\n","export const getMaxValueIndex = (array: number[]) =>\n  getValueIndex(array, (value, tracked) => value > tracked);\n\nexport const getMinValueIndex = (array: number[]) =>\n  getValueIndex(array, (value, tracked) => value < tracked);\n\n/**\n * Returns the index of the smallest number in an array of numbers\n */\nexport function getValueIndex(\n  array: number[],\n  comparator: (value: number, tracked: number) => boolean\n) {\n  if (array.length === 0) {\n    return -1;\n  }\n\n  let tracked = array[0];\n  let index = 0;\n\n  for (var i = 1; i < array.length; i++) {\n    if (comparator(array[i], tracked)) {\n      index = i;\n      tracked = array[i];\n    }\n  }\n\n  return index;\n}\n","export function noop(..._args: any) {}\n","export function omit<T>(id: string, elements: Record<string, T>) {\n  const {[id]: _, ...other} = elements;\n\n  return other;\n}\n","import {createContext} from 'react';\n\nimport {noop} from '../utilities/other';\nimport type {DndContextDescriptor} from './types';\n\nexport const Context = createContext<DndContextDescriptor>({\n  activatorEvent: null,\n  active: null,\n  activeNode: null,\n  activeNodeRect: null,\n  activeNodeClientRect: null,\n  activators: [],\n  ariaDescribedById: {\n    draggable: '',\n  },\n  containerNodeRect: null,\n  dispatch: noop,\n  draggableNodes: {},\n  droppableRects: new Map(),\n  droppableContainers: {},\n  over: null,\n  overlayNode: {\n    nodeRef: {\n      current: null,\n    },\n    rect: null,\n    setRef: noop,\n  },\n  scrollableAncestors: [],\n  scrollableAncestorRects: [],\n  recomputeLayouts: noop,\n  windowRect: null,\n  willRecomputeLayouts: false,\n});\n","import type {Coordinates} from '../../types';\n\nexport const defaultCoordinates: Coordinates = Object.freeze({\n  x: 0,\n  y: 0,\n});\n","import type {Coordinates} from '../../types';\n\n/**\n * Returns the distance between two points\n */\nexport function distanceBetween(p1: Coordinates, p2: Coordinates) {\n  return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n","import type {Coordinates} from '../../types';\nimport {isMouseEvent, isTouchEvent} from '../event';\n\n/**\n * Returns the normalized x and y coordinates for mouse and touch events.\n */\nexport function getEventCoordinates(event: Event): Coordinates {\n  if (isTouchEvent(event)) {\n    if (event.touches && event.touches.length) {\n      const {clientX: x, clientY: y} = event.touches[0];\n\n      return {\n        x,\n        y,\n      };\n    } else if (event.changedTouches && event.changedTouches.length) {\n      const {clientX: x, clientY: y} = event.changedTouches[0];\n\n      return {\n        x,\n        y,\n      };\n    }\n  }\n\n  if (isMouseEvent(event)) {\n    return {\n      x: event.clientX,\n      y: event.clientY,\n    };\n  }\n\n  return {\n    x: 0,\n    y: 0,\n  };\n}\n","export function isTouchEvent(event: Event): event is TouchEvent {\n  return window?.TouchEvent && event instanceof TouchEvent;\n}\n","export function isMouseEvent(event: Event): event is MouseEvent {\n  return (\n    (window?.MouseEvent && event instanceof MouseEvent) ||\n    event.type.includes('mouse')\n  );\n}\n","import {getEventCoordinates} from './getEventCoordinates';\n\nexport function getRelativeTransformOrigin(\n  event: MouseEvent | TouchEvent | KeyboardEvent,\n  rect: ClientRect\n) {\n  if (event instanceof KeyboardEvent) {\n    return '0 0';\n  }\n\n  const eventCoordinates = getEventCoordinates(event);\n  const transformOrigin = {\n    x: ((eventCoordinates.x - rect.left) / rect.width) * 100,\n    y: ((eventCoordinates.y - rect.top) / rect.height) * 100,\n  };\n\n  return `${transformOrigin.x}% ${transformOrigin.y}%`;\n}\n","import {getMinValueIndex} from '../other';\nimport {distanceBetween} from '../coordinates';\nimport type {Coordinates, LayoutRect} from '../../types';\nimport type {CollisionDetection} from './types';\n\n/**\n * Returns the coordinates of the center of a given ClientRect\n */\nfunction centerOfRectangle(\n  rect: LayoutRect,\n  left = rect.offsetLeft,\n  top = rect.offsetTop\n): Coordinates {\n  return {\n    x: left + rect.width * 0.5,\n    y: top + rect.height * 0.5,\n  };\n}\n\n/**\n * Returns the closest rectangle from an array of rectangles to the center of a given\n * rectangle.\n */\nexport const closestCenter: CollisionDetection = (rects, rect) => {\n  const centerRect = centerOfRectangle(rect, rect.left, rect.top);\n  const distances = rects.map(([_, rect]) =>\n    distanceBetween(centerOfRectangle(rect), centerRect)\n  );\n\n  const minValueIndex = getMinValueIndex(distances);\n\n  return rects[minValueIndex] ? rects[minValueIndex][0] : null;\n};\n","import type {Coordinates, ViewRect} from '../../types';\n\nexport function createRectAdjustmentFn(modifier: number) {\n  return function adjustViewRect(\n    viewRect: ViewRect,\n    ...adjustments: Coordinates[]\n  ): ViewRect {\n    return adjustments.reduce<ViewRect>(\n      (acc, adjustment) => ({\n        ...acc,\n        top: acc.top + modifier * adjustment.y,\n        bottom: acc.bottom + modifier * adjustment.y,\n        left: acc.left + modifier * adjustment.x,\n        right: acc.right + modifier * adjustment.x,\n        offsetLeft: acc.offsetLeft + modifier * adjustment.x,\n        offsetTop: acc.offsetTop + modifier * adjustment.y,\n      }),\n      {...viewRect}\n    );\n  };\n}\n\nexport const getAdjustedRect = createRectAdjustmentFn(1);\n","export enum Direction {\n  Forward = 1,\n  Backward = -1,\n}\n","import {isScrollable} from './isScrollable';\n\nexport function getScrollableAncestors(element: Node | null): Element[] {\n  const scrollParents: Element[] = [];\n\n  function findScrollableAncestors(node: Node | null): Element[] {\n    if (!node) {\n      return scrollParents;\n    }\n\n    if (node instanceof Document && node.scrollingElement != null) {\n      scrollParents.push(node.scrollingElement);\n\n      return scrollParents;\n    }\n\n    if (!(node instanceof HTMLElement) || node instanceof SVGElement) {\n      return scrollParents;\n    }\n\n    if (isScrollable(node)) {\n      scrollParents.push(node);\n    }\n\n    return findScrollableAncestors(node.parentNode);\n  }\n\n  return element ? findScrollableAncestors(element.parentNode) : scrollParents;\n}\n","export function isScrollable(node: HTMLElement): boolean {\n  const computedStyle = window.getComputedStyle(node);\n  const overflowRegex = /(auto|scroll|overlay)/;\n  const properties = ['overflow', 'overflowX', 'overflowY'];\n\n  return (\n    properties.find((property) => {\n      const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n      return typeof value === 'string' ? overflowRegex.test(value) : false;\n    }) != null\n  );\n}\n","import {canUseDOM} from '@dnd-kit/utilities';\n\nexport function getScrollableElement(element: EventTarget | null) {\n  if (!canUseDOM) {\n    return null;\n  }\n\n  if (element === document.scrollingElement || element instanceof Document) {\n    return window;\n  }\n\n  if (element instanceof HTMLElement) {\n    return element;\n  }\n\n  return null;\n}\n","import type {Coordinates} from '../../types';\n\nexport function getScrollCoordinates(\n  element: Element | typeof window\n): Coordinates {\n  if (element instanceof Window) {\n    return {\n      x: element.scrollX,\n      y: element.scrollY,\n    };\n  }\n\n  return {\n    x: element.scrollLeft,\n    y: element.scrollTop,\n  };\n}\n","export function getScrollPosition(scrollingContainer: Element) {\n  const minScroll = {\n    x: 0,\n    y: 0,\n  };\n  const maxScroll = {\n    x: scrollingContainer.scrollWidth - scrollingContainer.clientWidth,\n    y: scrollingContainer.scrollHeight - scrollingContainer.clientHeight,\n  };\n\n  const isTop = scrollingContainer.scrollTop <= minScroll.y;\n  const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n  const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n  const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n\n  return {\n    isTop,\n    isLeft,\n    isBottom,\n    isRight,\n    maxScroll,\n    minScroll,\n  };\n}\n","import {canUseDOM} from '@dnd-kit/utilities';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n  if (!canUseDOM || !element) {\n    return false;\n  }\n\n  return element === document.scrollingElement;\n}\n","import {Direction, ViewRect} from '../../types';\nimport {getScrollPosition} from './getScrollPosition';\nimport {isDocumentScrollingElement} from './documentScrollingElement';\n\ninterface Rect extends Pick<ViewRect, 'top' | 'left' | 'right' | 'bottom'> {}\n\nconst defaultThreshold = {\n  x: 0.2,\n  y: 0.2,\n};\n\nexport function getScrollDirectionAndSpeed(\n  scrollContainer: Element,\n  scrollContainerRect: ViewRect,\n  {top, left, right, bottom}: Rect,\n  acceleration = 10,\n  thresholdPercentage = defaultThreshold\n) {\n  const {clientHeight, clientWidth} = scrollContainer;\n  const finalScrollContainerRect = isDocumentScrollingElement(scrollContainer)\n    ? {\n        top: 0,\n        left: 0,\n        right: clientWidth,\n        bottom: clientHeight,\n        width: clientWidth,\n        height: clientHeight,\n      }\n    : scrollContainerRect;\n  const {isTop, isBottom, isLeft, isRight} = getScrollPosition(scrollContainer);\n\n  const direction = {\n    x: 0,\n    y: 0,\n  };\n  const speed = {\n    x: 0,\n    y: 0,\n  };\n  const threshold = {\n    height: finalScrollContainerRect.height * thresholdPercentage.y,\n    width: finalScrollContainerRect.width * thresholdPercentage.x,\n  };\n\n  if (!isTop && top <= finalScrollContainerRect.top + threshold.height) {\n    // Scroll Up\n    direction.y = Direction.Backward;\n    speed.y =\n      acceleration *\n      Math.abs(\n        ((finalScrollContainerRect.top + threshold.height) - top) /\n          threshold.height\n      );\n  } else if (\n    !isBottom &&\n    bottom >= finalScrollContainerRect.bottom - threshold.height\n  ) {\n    // Scroll Down\n    direction.y = Direction.Forward;\n    speed.y =\n      acceleration *\n      Math.abs(\n        ((finalScrollContainerRect.bottom - threshold.height) - bottom) /\n          threshold.height\n      );\n  }\n\n  if (!isRight && right >= finalScrollContainerRect.right - threshold.width) {\n    // Scroll Right\n    direction.x = Direction.Forward;\n    speed.x =\n      acceleration *\n      Math.abs(\n        ((finalScrollContainerRect.right - threshold.width) - right) /\n          threshold.width\n      );\n  } else if (\n    !isLeft &&\n    left <= finalScrollContainerRect.left + threshold.width\n  ) {\n    // Scroll Left\n    direction.x = Direction.Backward;\n    speed.x =\n      acceleration *\n      Math.abs(\n        ((finalScrollContainerRect.left + threshold.width) - left) /\n          threshold.width\n      );\n  }\n\n  return {\n    direction,\n    speed,\n  };\n}\n","export function getScrollElementRect(element: Element) {\n  if (element === document.scrollingElement) {\n    const {innerWidth, innerHeight} = window;\n\n    return {\n      top: 0,\n      left: 0,\n      right: innerWidth,\n      bottom: innerHeight,\n      width: innerWidth,\n      height: innerHeight,\n    };\n  }\n\n  const {top, left, right, bottom} = element.getBoundingClientRect();\n\n  return {\n    top,\n    left,\n    right,\n    bottom,\n    width: element.clientWidth,\n    height: element.clientHeight,\n  };\n}\n","import {add} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {getScrollCoordinates} from './getScrollCoordinates';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getScrollOffsets(scrollableAncestors: Element[]): Coordinates {\n  return scrollableAncestors.reduce<Coordinates>((acc, node) => {\n    return add(acc, getScrollCoordinates(node));\n  }, defaultCoordinates);\n}\n","import type {Coordinates, ClientRect, LayoutRect, ViewRect} from '../../types';\nimport {getScrollableAncestors, getScrollOffsets} from '../scroll';\nimport {defaultCoordinates} from '../coordinates';\n\nfunction getEdgeOffset(\n  node: HTMLElement | null,\n  parent: (Node & ParentNode) | null,\n  offset = defaultCoordinates\n): Coordinates {\n  if (!node || !(node instanceof HTMLElement)) {\n    return offset;\n  }\n\n  const nodeOffset = {\n    x: offset.x + node.offsetLeft,\n    y: offset.y + node.offsetTop,\n  };\n\n  if (node.offsetParent === parent) {\n    return nodeOffset;\n  }\n\n  return getEdgeOffset(node.offsetParent as HTMLElement, parent, nodeOffset);\n}\n\nexport function getElementLayout(element: HTMLElement): LayoutRect {\n  const {offsetWidth: width, offsetHeight: height} = element;\n  const {x: offsetLeft, y: offsetTop} = getEdgeOffset(element, null);\n\n  return {\n    width,\n    height,\n    offsetTop,\n    offsetLeft,\n  };\n}\n\nexport function getBoundingClientRect(\n  element: HTMLElement | Window\n): ClientRect {\n  if (element instanceof Window) {\n    const width = window.innerWidth;\n    const height = window.innerHeight;\n\n    return {\n      top: 0,\n      left: 0,\n      right: width,\n      bottom: height,\n      width,\n      height,\n      offsetTop: 0,\n      offsetLeft: 0,\n    };\n  }\n\n  const {offsetTop, offsetLeft} = getElementLayout(element);\n  const {\n    width,\n    height,\n    top,\n    bottom,\n    left,\n    right,\n  } = element.getBoundingClientRect();\n\n  return {\n    width,\n    height,\n    top,\n    bottom,\n    right,\n    left,\n    offsetTop,\n    offsetLeft,\n  };\n}\n\nexport function getViewRect(element: HTMLElement): ViewRect {\n  const {width, height, offsetTop, offsetLeft} = getElementLayout(element);\n  const scrollableAncestors = getScrollableAncestors(element);\n  const scrollOffsets = getScrollOffsets(scrollableAncestors);\n\n  const top = offsetTop - scrollOffsets.y;\n  const left = offsetLeft - scrollOffsets.x;\n\n  return {\n    width,\n    height,\n    top,\n    bottom: top + height,\n    right: left + width,\n    left,\n    offsetTop,\n    offsetLeft,\n  };\n}\n","import type {LayoutRect, ViewRect} from '../../types';\n\nexport function isViewRect(entry: LayoutRect | ViewRect): entry is ViewRect {\n  return 'top' in entry;\n}\n","import {getMinValueIndex} from '../other';\nimport {distanceBetween} from '../coordinates';\nimport {isViewRect} from '../rect';\nimport type {LayoutRect} from '../../types';\nimport type {CollisionDetection} from './types';\n\n/**\n * Returns the coordinates of the corners of a given rectangle:\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\n */\n\nfunction cornersOfRectangle(\n  rect: LayoutRect,\n  left = rect.offsetLeft,\n  top = rect.offsetTop\n) {\n  return [\n    {\n      x: left,\n      y: top,\n    },\n    {\n      x: left + rect.width,\n      y: top,\n    },\n    {\n      x: left,\n      y: top + rect.height,\n    },\n    {\n      x: left + rect.width,\n      y: top + rect.height,\n    },\n  ];\n}\n\n/**\n * Returns the closest rectangle from an array of rectangles to the corners of\n * another rectangle.\n */\nexport const closestCorners: CollisionDetection = (entries, target) => {\n  const corners = cornersOfRectangle(target, target.left, target.top);\n\n  const distances = entries.map(([_, entry]) => {\n    const entryCorners = cornersOfRectangle(\n      entry,\n      isViewRect(entry) ? entry.left : undefined,\n      isViewRect(entry) ? entry.top : undefined\n    );\n    const distances = corners.reduce((accumulator, corner, index) => {\n      return accumulator + distanceBetween(entryCorners[index], corner);\n    }, 0);\n\n    return Number((distances / 4).toFixed(4));\n  });\n\n  const minValueIndex = getMinValueIndex(distances);\n\n  return entries[minValueIndex] ? entries[minValueIndex][0] : null;\n};\n","import {getMaxValueIndex} from '../other';\nimport type {LayoutRect, ViewRect} from '../../types';\nimport type {CollisionDetection} from './types';\n\n/**\n * Returns the intersecting rectangle area between two rectangles\n */\nfunction getIntersectionRatio(entry: LayoutRect, target: ViewRect): number {\n  const top = Math.max(target.top, entry.offsetTop);\n  const left = Math.max(target.left, entry.offsetLeft);\n  const right = Math.min(\n    target.left + target.width,\n    entry.offsetLeft + entry.width\n  );\n  const bottom = Math.min(\n    target.top + target.height,\n    entry.offsetTop + entry.height\n  );\n  const width = right - left;\n  const height = bottom - top;\n\n  if (left < right && top < bottom) {\n    const targetArea = target.width * target.height;\n    const entryArea = entry.width * entry.height;\n    const intersectionArea = width * height;\n    const intersectionRatio =\n      intersectionArea / (targetArea + entryArea - intersectionArea);\n\n    return Number(intersectionRatio.toFixed(4));\n  }\n\n  // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n  return 0;\n}\n\n/**\n * Returns the rectangle that has the greatest intersection area with a given\n * rectangle in an array of rectangles.\n */\nexport const rectIntersection: CollisionDetection = (entries, target) => {\n  const intersections = entries.map(([_, entry]) =>\n    getIntersectionRatio(entry, target)\n  );\n\n  const maxValueIndex = getMaxValueIndex(intersections);\n\n  if (intersections[maxValueIndex] <= 0) {\n    return null;\n  }\n\n  return entries[maxValueIndex] ? entries[maxValueIndex][0] : null;\n};\n","export function getOwnerDocument(target: Event['target']) {\n  return target instanceof HTMLElement ? target.ownerDocument : document;\n}\n","import {omit} from '../utilities';\nimport {Action, Actions} from './actions';\nimport type {State} from './types';\n\nexport function getInitialState(): State {\n  return {\n    draggable: {\n      active: null,\n      initialCoordinates: {x: 0, y: 0},\n      nodes: {},\n      translate: {x: 0, y: 0},\n    },\n    droppable: {\n      containers: {},\n    },\n  };\n}\n\nexport function reducer(state: State, action: Actions): State {\n  switch (action.type) {\n    case Action.DragStart:\n      return {\n        ...state,\n        draggable: {\n          ...state.draggable,\n          initialCoordinates: action.initialCoordinates,\n          active: action.active,\n        },\n      };\n    case Action.DragMove:\n      if (!state.draggable.active) {\n        return state;\n      }\n\n      return {\n        ...state,\n        draggable: {\n          ...state.draggable,\n          translate: {\n            x: action.coordinates.x - state.draggable.initialCoordinates.x,\n            y: action.coordinates.y - state.draggable.initialCoordinates.y,\n          },\n        },\n      };\n    case Action.DragEnd:\n    case Action.DragCancel:\n      return {\n        ...state,\n        draggable: {\n          ...state.draggable,\n          active: null,\n          initialCoordinates: {x: 0, y: 0},\n          translate: {x: 0, y: 0},\n        },\n      };\n\n    case Action.RegisterDroppable: {\n      const {element} = action;\n      const {id} = element;\n\n      return {\n        ...state,\n        droppable: {\n          ...state.droppable,\n          containers: {\n            ...state.droppable.containers,\n            [id]: element,\n          },\n        },\n      };\n    }\n\n    case Action.SetDroppableDisabled: {\n      const {id, disabled} = action;\n      const element = state.droppable.containers[id];\n\n      if (!element) {\n        return state;\n      }\n\n      return {\n        ...state,\n        droppable: {\n          ...state.droppable,\n          containers: {\n            ...state.droppable.containers,\n            [id]: {\n              ...element,\n              disabled,\n            },\n          },\n        },\n      };\n    }\n\n    case Action.UnregisterDroppable: {\n      const {id} = action;\n\n      return {\n        ...state,\n        droppable: {\n          ...state.droppable,\n          containers: omit(id, state.droppable.containers),\n        },\n      };\n    }\n\n    default: {\n      return state;\n    }\n  }\n}\n","import {createContext, useContext, useEffect, useRef} from 'react';\n\nimport {Action} from '../../store';\nimport type {\n  DragStartEvent,\n  DragCancelEvent,\n  DragEndEvent,\n  DragMoveEvent,\n  DragOverEvent,\n} from '../../types';\n\nexport interface Arguments {\n  onDragStart?(event: DragStartEvent): void;\n  onDragMove?(event: DragMoveEvent): void;\n  onDragOver?(event: DragOverEvent): void;\n  onDragEnd?(event: DragEndEvent): void;\n  onDragCancel?(event: DragCancelEvent): void;\n}\n\nexport interface DndMonitorState {\n  type: Action | null;\n  event:\n    | null\n    | DragStartEvent\n    | DragMoveEvent\n    | DragOverEvent\n    | DragEndEvent\n    | DragCancelEvent;\n}\n\nexport const DndMonitorContext = createContext<DndMonitorState>({\n  type: null,\n  event: null,\n});\n\nexport function useDndMonitor({\n  onDragStart,\n  onDragMove,\n  onDragOver,\n  onDragEnd,\n  onDragCancel,\n}: Arguments) {\n  const monitorState = useContext(DndMonitorContext);\n  const previousMonitorState = useRef(monitorState);\n\n  useEffect(() => {\n    if (monitorState !== previousMonitorState.current) {\n      const {type, event} = monitorState;\n\n      switch (type) {\n        case Action.DragStart:\n          onDragStart?.(event as DragStartEvent);\n          break;\n        case Action.DragMove:\n          onDragMove?.(event as DragMoveEvent);\n          break;\n        case Action.DragOver:\n          onDragOver?.(event as DragOverEvent);\n          break;\n        case Action.DragCancel:\n          onDragCancel?.(event as DragCancelEvent);\n          break;\n        case Action.DragEnd:\n          onDragEnd?.(event as DragEndEvent);\n          break;\n      }\n\n      previousMonitorState.current = monitorState;\n    }\n  }, [\n    monitorState,\n    onDragStart,\n    onDragMove,\n    onDragOver,\n    onDragEnd,\n    onDragCancel,\n  ]);\n}\n","import {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useInterval} from '@dnd-kit/utilities';\n\nimport {getScrollDirectionAndSpeed, defaultCoordinates} from '../../utilities';\nimport type {Coordinates, Direction, ViewRect} from '../../types';\n\nexport type ScrollAncestorSortingFn = (ancestors: Element[]) => Element[];\n\nexport enum AutoScrollActivator {\n  Pointer,\n  DraggableRect,\n}\n\nexport interface Options {\n  acceleration?: number;\n  activator?: AutoScrollActivator;\n  canScroll?: CanScroll;\n  enabled?: boolean;\n  interval?: number;\n  order?: TraversalOrder;\n  threshold?: {\n    x: number;\n    y: number;\n  };\n}\n\ninterface Arguments extends Options {\n  draggingRect: ViewRect | null;\n  enabled: boolean;\n  pointerCoordinates: Coordinates | null;\n  scrollableAncestors: Element[];\n  scrollableAncestorRects: ViewRect[];\n}\n\nexport type CanScroll = (element: Element) => boolean;\n\nexport enum TraversalOrder {\n  TreeOrder,\n  ReversedTreeOrder,\n}\n\ninterface ScrollDirection {\n  x: 0 | Direction;\n  y: 0 | Direction;\n}\n\nexport function useAutoScroller({\n  acceleration,\n  activator = AutoScrollActivator.Pointer,\n  canScroll,\n  draggingRect,\n  enabled,\n  interval = 5,\n  order = TraversalOrder.TreeOrder,\n  pointerCoordinates,\n  scrollableAncestors,\n  scrollableAncestorRects,\n  threshold,\n}: Arguments) {\n  const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n  const scrollSpeed = useRef<Coordinates>({\n    x: 1,\n    y: 1,\n  });\n  const rect = useMemo(() => {\n    switch (activator) {\n      case AutoScrollActivator.Pointer:\n        return pointerCoordinates\n          ? {\n              top: pointerCoordinates.y,\n              bottom: pointerCoordinates.y,\n              left: pointerCoordinates.x,\n              right: pointerCoordinates.x,\n            }\n          : null;\n      case AutoScrollActivator.DraggableRect:\n        return draggingRect;\n    }\n\n    return null;\n  }, [activator, draggingRect, pointerCoordinates]);\n  const scrollDirection = useRef<ScrollDirection>(defaultCoordinates);\n  const scrollContainerRef = useRef<Element | null>(null);\n  const autoScroll = useCallback(() => {\n    const scrollContainer = scrollContainerRef.current;\n\n    if (!scrollContainer) {\n      return;\n    }\n\n    const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n    const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n\n    scrollContainer.scrollBy(scrollLeft, scrollTop);\n  }, []);\n  const sortedScrollableAncestors = useMemo(\n    () =>\n      order === TraversalOrder.TreeOrder\n        ? [...scrollableAncestors].reverse()\n        : scrollableAncestors,\n    [order, scrollableAncestors]\n  );\n\n  useEffect(\n    () => {\n      if (!enabled || !scrollableAncestors.length || !rect) {\n        clearAutoScrollInterval();\n        return;\n      }\n\n      for (const scrollContainer of sortedScrollableAncestors) {\n        if (canScroll?.(scrollContainer) === false) {\n          continue;\n        }\n\n        const index = scrollableAncestors.indexOf(scrollContainer);\n        const scrolllContainerRect = scrollableAncestorRects[index];\n\n        if (!scrolllContainerRect) {\n          continue;\n        }\n\n        const {direction, speed} = getScrollDirectionAndSpeed(\n          scrollContainer,\n          scrolllContainerRect,\n          rect,\n          acceleration,\n          threshold\n        );\n\n        if (speed.x > 0 || speed.y > 0) {\n          clearAutoScrollInterval();\n\n          scrollContainerRef.current = scrollContainer;\n          setAutoScrollInterval(autoScroll, interval);\n\n          scrollSpeed.current = speed;\n          scrollDirection.current = direction;\n\n          return;\n        }\n      }\n\n      scrollSpeed.current = {x: 0, y: 0};\n      scrollDirection.current = {x: 0, y: 0};\n      clearAutoScrollInterval();\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      acceleration,\n      autoScroll,\n      canScroll,\n      clearAutoScrollInterval,\n      enabled,\n      interval,\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      JSON.stringify(rect),\n      setAutoScrollInterval,\n      scrollableAncestors,\n      sortedScrollableAncestors,\n      scrollableAncestorRects,\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      JSON.stringify(threshold),\n    ]\n  );\n}\n","import {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {getElementLayout} from '../../utilities';\nimport type {DroppableContainers, LayoutRectMap} from '../../store/types';\n\ninterface Arguments {\n  dragging: boolean;\n  dependencies: any[];\n  config: Partial<LayoutMeasuring> | undefined;\n}\n\nexport enum LayoutMeasuringStrategy {\n  Always,\n  BeforeDragging,\n  WhileDragging,\n}\n\nexport enum LayoutMeasuringFrequency {\n  Optimized = 'optimized',\n}\n\nexport interface LayoutMeasuring {\n  strategy: LayoutMeasuringStrategy;\n  frequency: LayoutMeasuringFrequency | number;\n}\n\nconst defaultValue: LayoutRectMap = new Map();\n\nexport function useLayoutMeasuring(\n  containers: DroppableContainers,\n  {dragging, dependencies, config}: Arguments\n) {\n  const [willRecomputeLayouts, setWillRecomputeLayouts] = useState(false);\n  const {frequency, strategy} = getLayoutMeasuring(config);\n  const containersRef = useRef(containers);\n  const recomputeLayouts = useCallback(() => setWillRecomputeLayouts(true), []);\n  const recomputeLayoutsTimeoutId = useRef<NodeJS.Timeout | null>(null);\n  const disabled = isDisabled();\n  const layoutRectMap = useLazyMemo<LayoutRectMap>(\n    (previousValue) => {\n      if (disabled && !dragging) {\n        return defaultValue;\n      }\n\n      if (\n        !previousValue ||\n        previousValue === defaultValue ||\n        containersRef.current !== containers ||\n        willRecomputeLayouts\n      ) {\n        for (let container of Object.values(containers)) {\n          if (!container) {\n            continue;\n          }\n\n          container.rect.current = container.node.current\n            ? getElementLayout(container.node.current)\n            : null;\n        }\n\n        return createLayoutRectMap(containers);\n      }\n\n      return previousValue;\n    },\n    [containers, dragging, disabled, willRecomputeLayouts]\n  );\n\n  useEffect(() => {\n    containersRef.current = containers;\n  }, [containers]);\n\n  useEffect(() => {\n    if (willRecomputeLayouts) {\n      setWillRecomputeLayouts(false);\n    }\n  }, [willRecomputeLayouts]);\n\n  useEffect(\n    function recompute() {\n      if (disabled) {\n        return;\n      }\n\n      requestAnimationFrame(recomputeLayouts);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [dragging, disabled]\n  );\n\n  useEffect(\n    function forceRecomputeLayouts() {\n      if (\n        disabled ||\n        typeof frequency !== 'number' ||\n        recomputeLayoutsTimeoutId.current !== null\n      ) {\n        return;\n      }\n\n      recomputeLayoutsTimeoutId.current = setTimeout(() => {\n        recomputeLayouts();\n        recomputeLayoutsTimeoutId.current = null;\n      }, frequency);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [frequency, disabled, recomputeLayouts, ...dependencies]\n  );\n\n  return {\n    layoutRectMap,\n    recomputeLayouts,\n    willRecomputeLayouts,\n  };\n\n  function isDisabled() {\n    switch (strategy) {\n      case LayoutMeasuringStrategy.Always:\n        return false;\n      case LayoutMeasuringStrategy.BeforeDragging:\n        return dragging;\n      default:\n        return !dragging;\n    }\n  }\n}\n\nfunction createLayoutRectMap(\n  containers: DroppableContainers | null\n): LayoutRectMap {\n  const layoutRectMap: LayoutRectMap = new Map();\n\n  if (containers) {\n    for (const container of Object.values(containers)) {\n      if (!container) {\n        continue;\n      }\n\n      const {id, rect, disabled} = container;\n\n      if (disabled || rect.current == null) {\n        continue;\n      }\n\n      layoutRectMap.set(id, rect.current);\n    }\n  }\n\n  return layoutRectMap;\n}\n\nconst defaultLayoutMeasuring: LayoutMeasuring = {\n  strategy: LayoutMeasuringStrategy.WhileDragging,\n  frequency: LayoutMeasuringFrequency.Optimized,\n};\n\nfunction getLayoutMeasuring(\n  layoutMeasuring: Arguments['config']\n): LayoutMeasuring {\n  return layoutMeasuring\n    ? {\n        ...defaultLayoutMeasuring,\n        ...layoutMeasuring,\n      }\n    : defaultLayoutMeasuring;\n}\n","import React, {useEffect, useMemo, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {useUniqueId} from '@dnd-kit/utilities';\nimport {HiddenText, LiveRegion, useAnnouncement} from '@dnd-kit/accessibility';\n\nimport type {Announcements, ScreenReaderInstructions} from './types';\nimport type {UniqueIdentifier} from '../../types';\nimport {defaultAnnouncements} from './defaults';\nimport {DndMonitorArguments, useDndMonitor} from '../../hooks/monitor';\n\ninterface Props {\n  announcements?: Announcements;\n  screenReaderInstructions: ScreenReaderInstructions;\n  hiddenTextDescribedById: UniqueIdentifier;\n}\n\nexport function Accessibility({\n  announcements = defaultAnnouncements,\n  hiddenTextDescribedById,\n  screenReaderInstructions,\n}: Props) {\n  const {announce, announcement} = useAnnouncement();\n  const liveRegionId = useUniqueId(`DndLiveRegion`);\n\n  const [mounted, setMounted] = useState(false);\n\n  useEffect(() => {\n    setMounted(true);\n  }, []);\n\n  useDndMonitor(\n    useMemo<DndMonitorArguments>(\n      () => ({\n        onDragStart({active}) {\n          announce(announcements.onDragStart(active.id));\n        },\n        onDragMove({active, over}) {\n          if (announcements.onDragMove) {\n            announce(announcements.onDragMove(active.id, over?.id));\n          }\n        },\n        onDragOver({active, over}) {\n          announce(announcements.onDragOver(active.id, over?.id));\n        },\n        onDragEnd({active, over}) {\n          announce(announcements.onDragEnd(active.id, over?.id));\n        },\n        onDragCancel({active}) {\n          announce(announcements.onDragCancel(active.id));\n        },\n      }),\n      [announce, announcements]\n    )\n  );\n\n  return mounted\n    ? createPortal(\n        <>\n          <HiddenText\n            id={hiddenTextDescribedById}\n            value={screenReaderInstructions.draggable}\n          />\n          <LiveRegion id={liveRegionId} announcement={announcement} />\n        </>,\n        document.body\n      )\n    : null;\n}\n","import {useCallback, useState} from 'react';\n\nexport function useAnnouncement() {\n  const [announcement, setAnnouncement] = useState('');\n  const announce = useCallback((value: string | undefined) => {\n    if (value != null) {\n      setAnnouncement(value);\n    }\n  }, []);\n\n  return {announce, announcement} as const;\n}\n","import {useRef} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {Data} from '../../store';\n\nexport function useData(data: Data | undefined) {\n  const dataRef = useRef(data);\n\n  useIsomorphicLayoutEffect(() => {\n    if (dataRef.current !== data) {\n      dataRef.current = data;\n    }\n  }, [data]);\n\n  return dataRef;\n}\n","import {useEffect, useRef} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {getScrollableAncestors} from '../../utilities';\n\nconst defaultValue: Element[] = [];\n\nexport function useScrollableAncestors(node: HTMLElement | null) {\n  const previousNode = useRef(node);\n\n  const ancestors = useLazyMemo<Element[]>(\n    (previousValue) => {\n      if (!node) {\n        return defaultValue;\n      }\n\n      if (\n        previousValue &&\n        node &&\n        previousNode.current &&\n        node.parentNode === previousNode.current.parentNode\n      ) {\n        return previousValue;\n      }\n\n      return getScrollableAncestors(node);\n    },\n    [node]\n  );\n\n  useEffect(() => {\n    previousNode.current = node;\n  }, [node]);\n\n  return ancestors;\n}\n","import {useRef} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {\n  getBoundingClientRect,\n  getElementLayout,\n  getViewRect,\n} from '../../utilities';\nimport type {LayoutRect} from '../../types';\n\ntype RectFn<T, U> = (element: U) => T;\n\nexport const useClientRect = createUseRectFn(getBoundingClientRect);\nexport const useClientRects = createUseRectsFn(getBoundingClientRect);\nexport const useViewRect = createUseRectFn(getViewRect);\nexport const useLayoutRect = createUseRectFn(getElementLayout);\n\nfunction createUseRectFn<T = LayoutRect, U = HTMLElement>(\n  getRect: RectFn<T, U>\n) {\n  return function useClientRect(\n    element: U | null,\n    forceRecompute?: boolean\n  ): T | null {\n    const previousElement = useRef(element);\n\n    return useLazyMemo<T | null>(\n      (previousValue) => {\n        if (!element) {\n          return null;\n        }\n\n        if (\n          forceRecompute ||\n          (!previousValue && element) ||\n          element !== previousElement.current\n        ) {\n          if (element instanceof HTMLElement && element.parentNode == null) {\n            return null;\n          }\n\n          return getRect(element as U);\n        }\n\n        return previousValue ?? null;\n      },\n      [element, forceRecompute]\n    );\n  };\n}\n\nfunction createUseRectsFn<T = LayoutRect>(getRect: RectFn<T, HTMLElement>) {\n  const defaultValue: T[] = [];\n\n  return function useRects(elements: Element[], forceRecompute?: boolean): T[] {\n    const previousElements = useRef(elements);\n\n    return useLazyMemo<T[]>(\n      (previousValue) => {\n        if (!elements.length) {\n          return defaultValue;\n        }\n\n        if (\n          forceRecompute ||\n          (!previousValue && elements.length) ||\n          elements !== previousElements.current\n        ) {\n          return elements.map((element) => getRect(element as HTMLElement));\n        }\n\n        return previousValue ?? defaultValue;\n      },\n      [elements, forceRecompute]\n    );\n  };\n}\n","import {useMemo} from 'react';\n\nimport type {Sensor, SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensor<T extends SensorOptions>(\n  sensor: Sensor<T>,\n  options?: T\n): SensorDescriptor<T> {\n  return useMemo(\n    () => ({\n      sensor,\n      options: options ?? ({} as T),\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [sensor, options]\n  );\n}\n","import {useMemo} from 'react';\n\nimport type {SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensors(\n  ...sensors: (SensorDescriptor<any> | undefined | null)[]\n): SensorDescriptor<SensorOptions>[] {\n  return useMemo(\n    () =>\n      [...sensors].filter(\n        (sensor): sensor is SensorDescriptor<any> => sensor != null\n      ),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [...sensors]\n  );\n}\n","import type {Coordinates, UniqueIdentifier} from '../../types';\nimport type {SensorContext} from '../types';\n\nexport enum KeyboardCode {\n  Space = 'Space',\n  Down = 'ArrowDown',\n  Right = 'ArrowRight',\n  Left = 'ArrowLeft',\n  Up = 'ArrowUp',\n  Esc = 'Escape',\n  Enter = 'Enter',\n}\n\nexport type KeyboardCodes = {\n  start: KeyboardEvent['code'][];\n  cancel: KeyboardEvent['code'][];\n  end: KeyboardEvent['code'][];\n};\n\nexport type KeyboardCoordinateGetter = (\n  event: KeyboardEvent,\n  args: {\n    active: UniqueIdentifier;\n    currentCoordinates: Coordinates;\n    context: SensorContext;\n  }\n) => Coordinates | void;\n","export class Listeners {\n  private listeners: {\n    eventName: string;\n    handler: EventListenerOrEventListenerObject;\n  }[] = [];\n\n  constructor(private target: EventTarget) {}\n\n  public add(\n    eventName: string,\n    handler: EventListenerOrEventListenerObject,\n    options?: AddEventListenerOptions | false\n  ) {\n    this.target.addEventListener(eventName, handler, options);\n    this.listeners.push({eventName, handler});\n  }\n\n  public removeAll() {\n    this.listeners.forEach(({eventName, handler}) =>\n      this.target.removeEventListener(eventName, handler)\n    );\n  }\n}\n","import {getOwnerDocument} from '../../utilities';\n\nexport function getEventListenerTarget(\n  element: EventTarget | null\n): EventTarget | Document {\n  // If the `event.target` element is removed from the document events will still be targeted\n  // at it, and hence won't always bubble up to the window or document anymore.\n  // If there is any risk of an element being removed while it is being dragged,\n  // the best practice is to attach the event listeners directly to the target.\n  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n  return element instanceof EventTarget ? element : getOwnerDocument(element);\n}\n","import type {Coordinates, DistanceMeasurement} from '../../types';\n\nexport function hasExceededDistance(\n  delta: Coordinates,\n  measurement: DistanceMeasurement\n): boolean {\n  const dx = Math.abs(delta.x);\n  const dy = Math.abs(delta.y);\n\n  if (typeof measurement === 'number') {\n    return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n  }\n\n  if ('x' in measurement && 'y' in measurement) {\n    return dx > measurement.x && dy > measurement.y;\n  }\n\n  if ('x' in measurement) {\n    return dx > measurement.x;\n  }\n\n  if ('y' in measurement) {\n    return dy > measurement.y;\n  }\n\n  return false;\n}\n","import {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\n\nexport const defaultKeyboardCodes: KeyboardCodes = {\n  start: [KeyboardCode.Space, KeyboardCode.Enter],\n  cancel: [KeyboardCode.Esc],\n  end: [KeyboardCode.Space, KeyboardCode.Enter],\n};\n\nexport const defaultKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n  event,\n  {currentCoordinates}\n) => {\n  switch (event.code) {\n    case KeyboardCode.Right:\n      return {\n        ...currentCoordinates,\n        x: currentCoordinates.x + 25,\n      };\n    case KeyboardCode.Left:\n      return {\n        ...currentCoordinates,\n        x: currentCoordinates.x - 25,\n      };\n    case KeyboardCode.Down:\n      return {\n        ...currentCoordinates,\n        y: currentCoordinates.y + 25,\n      };\n    case KeyboardCode.Up:\n      return {\n        ...currentCoordinates,\n        y: currentCoordinates.y - 25,\n      };\n  }\n\n  return undefined;\n};\n","import {subtract as getCoordinatesDelta} from '@dnd-kit/utilities';\n\nimport {\n  getEventListenerTarget,\n  hasExceededDistance,\n  Listeners,\n} from '../utilities';\n\nimport {getEventCoordinates, getOwnerDocument} from '../../utilities';\nimport {KeyboardCode} from '../keyboard';\nimport type {SensorInstance, SensorProps, SensorOptions} from '../types';\nimport type {Coordinates, DistanceMeasurement} from '../../types';\n\ninterface DistanceConstraint {\n  distance: DistanceMeasurement;\n}\n\ninterface DelayConstraint {\n  delay: number;\n  tolerance: DistanceMeasurement;\n}\n\ninterface EventDescriptor {\n  name: keyof DocumentEventMap;\n  passive?: boolean;\n}\n\nexport interface PointerEventHandlers {\n  move: EventDescriptor;\n  end: EventDescriptor;\n}\n\nexport type PointerActivationConstraint = DistanceConstraint | DelayConstraint;\n\nfunction isDistanceConstraint(\n  constraint: PointerActivationConstraint\n): constraint is DistanceConstraint {\n  return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(\n  constraint: PointerActivationConstraint\n): constraint is DelayConstraint {\n  return Boolean(constraint && 'delay' in constraint);\n}\n\nexport interface AbstractPointerSensorOptions extends SensorOptions {\n  activationConstraint?: PointerActivationConstraint;\n  onActivation?({event}: {event: Event}): void;\n}\n\nexport type AbstractPointerSensorProps = SensorProps<AbstractPointerSensorOptions>;\n\nenum EventName {\n  Keydown = 'keydown',\n}\n\nexport class AbstractPointerSensor implements SensorInstance {\n  public autoScrollEnabled = true;\n  private activated: boolean = false;\n  private initialCoordinates: Coordinates;\n  private timeoutId: NodeJS.Timeout | null = null;\n  private listeners: Listeners;\n  private ownerDocument: Document;\n\n  constructor(\n    private props: AbstractPointerSensorProps,\n    private events: PointerEventHandlers,\n    listenerTarget = getEventListenerTarget(props.event.target)\n  ) {\n    const {event} = props;\n\n    this.props = props;\n    this.events = events;\n    this.ownerDocument = getOwnerDocument(event.target);\n    this.listeners = new Listeners(listenerTarget);\n    this.initialCoordinates = getEventCoordinates(event);\n    this.handleStart = this.handleStart.bind(this);\n    this.handleMove = this.handleMove.bind(this);\n    this.handleEnd = this.handleEnd.bind(this);\n    this.handleKeydown = this.handleKeydown.bind(this);\n\n    this.attach();\n  }\n\n  private attach() {\n    const {\n      events,\n      props: {\n        options: {activationConstraint},\n      },\n    } = this;\n\n    this.listeners.add(events.move.name, this.handleMove, false);\n    this.listeners.add(events.end.name, this.handleEnd);\n\n    this.ownerDocument.addEventListener(EventName.Keydown, this.handleKeydown);\n\n    if (activationConstraint) {\n      if (isDistanceConstraint(activationConstraint)) {\n        return;\n      }\n\n      if (isDelayConstraint(activationConstraint)) {\n        this.timeoutId = setTimeout(\n          this.handleStart,\n          activationConstraint.delay\n        );\n        return;\n      }\n    }\n\n    this.handleStart();\n  }\n\n  private detach() {\n    this.listeners.removeAll();\n    this.ownerDocument.removeEventListener(\n      EventName.Keydown,\n      this.handleKeydown\n    );\n\n    if (this.timeoutId !== null) {\n      clearTimeout(this.timeoutId);\n      this.timeoutId = null;\n    }\n  }\n\n  private handleStart() {\n    const {initialCoordinates} = this;\n    const {onStart} = this.props;\n\n    if (initialCoordinates) {\n      this.activated = true;\n\n      onStart(initialCoordinates);\n    }\n  }\n\n  private handleMove(event: Event) {\n    const {activated, initialCoordinates, props} = this;\n    const {\n      onMove,\n      options: {activationConstraint},\n    } = props;\n\n    if (!initialCoordinates) {\n      return;\n    }\n\n    const coordinates = getEventCoordinates(event);\n    const delta = getCoordinatesDelta(initialCoordinates, coordinates);\n\n    if (!activated && activationConstraint) {\n      // Constraint validation\n      if (isDelayConstraint(activationConstraint)) {\n        if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n          return this.handleCancel();\n        }\n\n        return;\n      }\n\n      if (isDistanceConstraint(activationConstraint)) {\n        if (hasExceededDistance(delta, activationConstraint.distance)) {\n          return this.handleStart();\n        }\n\n        return;\n      }\n    }\n\n    if (event.cancelable) {\n      event.preventDefault();\n    }\n\n    onMove(coordinates);\n  }\n\n  private handleEnd() {\n    const {onEnd} = this.props;\n\n    this.detach();\n    onEnd();\n  }\n\n  private handleCancel() {\n    const {onCancel} = this.props;\n\n    this.detach();\n    onCancel();\n  }\n\n  private handleKeydown(event: KeyboardEvent) {\n    if (event.code === KeyboardCode.Esc) {\n      this.handleCancel();\n    }\n  }\n}\n","import {\n  add as getAdjustedCoordinates,\n  subtract as getCoordinatesDelta,\n} from '@dnd-kit/utilities';\n\nimport {Listeners} from '../utilities';\nimport type {SensorInstance, SensorProps, SensorOptions} from '../types';\nimport type {Coordinates} from '../../types';\n\nimport {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\nimport {\n  defaultKeyboardCodes,\n  defaultKeyboardCoordinateGetter,\n} from './defaults';\nimport {\n  defaultCoordinates,\n  getBoundingClientRect,\n  getOwnerDocument,\n  getWindow,\n  getScrollPosition,\n  getScrollElementRect,\n} from '../../utilities';\n\nexport interface KeyboardSensorOptions extends SensorOptions {\n  keyboardCodes?: KeyboardCodes;\n  coordinateGetter?: KeyboardCoordinateGetter;\n  scrollBehavior?: ScrollBehavior;\n  onActivation?({event}: {event: KeyboardEvent}): void;\n}\n\nexport type KeyboardSensorProps = SensorProps<KeyboardSensorOptions>;\n\nexport class KeyboardSensor implements SensorInstance {\n  public autoScrollEnabled = false;\n  private coordinates: Coordinates = defaultCoordinates;\n  private listeners: Listeners;\n  private windowListeners: Listeners;\n\n  constructor(private props: KeyboardSensorProps) {\n    const {\n      event: {target},\n    } = props;\n\n    this.props = props;\n    this.listeners = new Listeners(getOwnerDocument(target));\n    this.windowListeners = new Listeners(getWindow(target));\n    this.handleKeyDown = this.handleKeyDown.bind(this);\n    this.handleCancel = this.handleCancel.bind(this);\n\n    this.attach();\n  }\n\n  private attach() {\n    this.handleStart();\n\n    setTimeout(() => {\n      this.listeners.add('keydown', this.handleKeyDown);\n      this.windowListeners.add('resize', this.handleCancel);\n    });\n  }\n\n  private handleStart() {\n    const {activeNode, onStart} = this.props;\n\n    if (!activeNode.node.current) {\n      throw new Error('Active draggable node is undefined');\n    }\n\n    const activeNodeRect = getBoundingClientRect(activeNode.node.current);\n    const coordinates = {\n      x: activeNodeRect.left,\n      y: activeNodeRect.top,\n    };\n\n    this.coordinates = coordinates;\n\n    onStart(coordinates);\n  }\n\n  private handleKeyDown(event: Event) {\n    if (event instanceof KeyboardEvent) {\n      const {coordinates} = this;\n      const {active, context, options} = this.props;\n      const {\n        keyboardCodes = defaultKeyboardCodes,\n        coordinateGetter = defaultKeyboardCoordinateGetter,\n        scrollBehavior = 'smooth',\n      } = options;\n      const {code} = event;\n\n      if (keyboardCodes.end.includes(code)) {\n        this.handleEnd(event);\n        return;\n      }\n\n      if (keyboardCodes.cancel.includes(code)) {\n        this.handleCancel(event);\n        return;\n      }\n\n      const newCoordinates = coordinateGetter(event, {\n        active,\n        context: context.current,\n        currentCoordinates: coordinates,\n      });\n\n      if (newCoordinates) {\n        const scrollDelta = {\n          x: 0,\n          y: 0,\n        };\n        const {scrollableAncestors} = context.current;\n\n        for (const scrollContainer of scrollableAncestors) {\n          const direction = event.code;\n          const coordinatesDelta = getCoordinatesDelta(\n            newCoordinates,\n            coordinates\n          );\n          const {\n            isTop,\n            isRight,\n            isLeft,\n            isBottom,\n            maxScroll,\n            minScroll,\n          } = getScrollPosition(scrollContainer);\n          const scrollElementRect = getScrollElementRect(scrollContainer);\n\n          const clampedCoordinates = {\n            x: Math.min(\n              direction === KeyboardCode.Right\n                ? scrollElementRect.right - scrollElementRect.width / 2\n                : scrollElementRect.right,\n              Math.max(\n                direction === KeyboardCode.Right\n                  ? scrollElementRect.left\n                  : scrollElementRect.left + scrollElementRect.width / 2,\n                newCoordinates.x\n              )\n            ),\n            y: Math.min(\n              direction === KeyboardCode.Down\n                ? scrollElementRect.bottom - scrollElementRect.height / 2\n                : scrollElementRect.bottom,\n              Math.max(\n                direction === KeyboardCode.Down\n                  ? scrollElementRect.top\n                  : scrollElementRect.top + scrollElementRect.height / 2,\n                newCoordinates.y\n              )\n            ),\n          };\n\n          const canScrollX =\n            (direction === KeyboardCode.Right && !isRight) ||\n            (direction === KeyboardCode.Left && !isLeft);\n          const canScrollY =\n            (direction === KeyboardCode.Down && !isBottom) ||\n            (direction === KeyboardCode.Up && !isTop);\n\n          if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n            const canFullyScrollToNewCoordinates =\n              (direction === KeyboardCode.Right &&\n                scrollContainer.scrollLeft + coordinatesDelta.x <=\n                  maxScroll.x) ||\n              (direction === KeyboardCode.Left &&\n                scrollContainer.scrollLeft + coordinatesDelta.x >= minScroll.x);\n\n            if (canFullyScrollToNewCoordinates) {\n              // We don't need to update coordinates, the scroll adjustment alone will trigger\n              // logic to auto-detect the new container we are over\n              scrollContainer.scrollBy({\n                left: coordinatesDelta.x,\n                behavior: scrollBehavior,\n              });\n              return;\n            }\n\n            scrollDelta.x =\n              direction === KeyboardCode.Right\n                ? scrollContainer.scrollLeft - maxScroll.x\n                : scrollContainer.scrollLeft - minScroll.x;\n\n            scrollContainer.scrollBy({\n              left: -scrollDelta.x,\n              behavior: scrollBehavior,\n            });\n            break;\n          } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n            const canFullyScrollToNewCoordinates =\n              (direction === KeyboardCode.Down &&\n                scrollContainer.scrollTop + coordinatesDelta.y <=\n                  maxScroll.y) ||\n              (direction === KeyboardCode.Up &&\n                scrollContainer.scrollTop + coordinatesDelta.y >= minScroll.y);\n\n            if (canFullyScrollToNewCoordinates) {\n              // We don't need to update coordinates, the scroll adjustment alone will trigger\n              // logic to auto-detect the new container we are over\n              scrollContainer.scrollBy({\n                top: coordinatesDelta.y,\n                behavior: scrollBehavior,\n              });\n              return;\n            }\n\n            scrollDelta.y =\n              direction === KeyboardCode.Down\n                ? scrollContainer.scrollTop - maxScroll.y\n                : scrollContainer.scrollTop - minScroll.y;\n\n            scrollContainer.scrollBy({\n              top: -scrollDelta.y,\n              behavior: scrollBehavior,\n            });\n\n            break;\n          }\n        }\n\n        this.handleMove(\n          event,\n          getAdjustedCoordinates(newCoordinates, scrollDelta)\n        );\n      }\n    }\n  }\n\n  private handleMove(event: Event, coordinates: Coordinates) {\n    const {onMove} = this.props;\n\n    event.preventDefault();\n    onMove(coordinates);\n    this.coordinates = coordinates;\n  }\n\n  private handleEnd(event: Event) {\n    const {onEnd} = this.props;\n\n    event.preventDefault();\n    this.detach();\n    onEnd();\n  }\n\n  private handleCancel(event: Event) {\n    const {onCancel} = this.props;\n\n    event.preventDefault();\n    this.detach();\n    onCancel();\n  }\n\n  private detach() {\n    this.listeners.removeAll();\n    this.windowListeners.removeAll();\n  }\n\n  static activators = [\n    {\n      eventName: 'onKeyDown' as const,\n      handler: (\n        event: React.KeyboardEvent,\n        {\n          keyboardCodes = defaultKeyboardCodes,\n          onActivation,\n        }: KeyboardSensorOptions\n      ) => {\n        const {code} = event.nativeEvent;\n\n        if (keyboardCodes.start.includes(code)) {\n          event.preventDefault();\n\n          onActivation?.({event: event.nativeEvent});\n\n          return true;\n        }\n\n        return false;\n      },\n    },\n  ];\n}\n","import {getOwnerDocument} from './getOwnerDocument';\n\nexport function getWindow(target: Event['target']) {\n  return getOwnerDocument(target).defaultView ?? window;\n}\n","import type {PointerEvent} from 'react';\n\nimport {getOwnerDocument} from '../../utilities';\nimport type {SensorProps} from '../types';\nimport {\n  AbstractPointerSensor,\n  AbstractPointerSensorOptions,\n  PointerEventHandlers,\n} from './AbstractPointerSensor';\n\nconst events: PointerEventHandlers = {\n  move: {name: 'pointermove'},\n  end: {name: 'pointerup'},\n};\n\nexport interface PointerSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type PointerSensorProps = SensorProps<PointerSensorOptions>;\n\nexport class PointerSensor extends AbstractPointerSensor {\n  constructor(props: PointerSensorProps) {\n    const {event} = props;\n    // Pointer events stop firing if the target is unmounted while dragging\n    // Therefore we attach listeners to the owner document instead\n    const listenerTarget = getOwnerDocument(event.target);\n\n    super(props, events, listenerTarget);\n  }\n\n  static activators = [\n    {\n      eventName: 'onPointerDown' as const,\n      handler: (\n        {nativeEvent: event}: PointerEvent,\n        {onActivation}: PointerSensorOptions\n      ) => {\n        if (!event.isPrimary || event.button !== 0) {\n          return false;\n        }\n\n        onActivation?.({event});\n\n        return true;\n      },\n    },\n  ];\n}\n","import type {MouseEvent} from 'react';\n\nimport {getOwnerDocument} from '../../utilities';\nimport type {SensorProps} from '../types';\nimport {\n  AbstractPointerSensor,\n  PointerEventHandlers,\n  AbstractPointerSensorOptions,\n} from '../pointer';\n\nconst events: PointerEventHandlers = {\n  move: {name: 'mousemove'},\n  end: {name: 'mouseup'},\n};\n\nenum MouseButton {\n  RightClick = 2,\n}\n\nexport interface MouseSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type MouseSensorProps = SensorProps<MouseSensorOptions>;\n\nexport class MouseSensor extends AbstractPointerSensor {\n  constructor(props: MouseSensorProps) {\n    super(props, events, getOwnerDocument(props.event.target));\n  }\n\n  static activators = [\n    {\n      eventName: 'onMouseDown' as const,\n      handler: (\n        {nativeEvent: event}: MouseEvent,\n        {onActivation}: MouseSensorOptions\n      ) => {\n        if (event.button === MouseButton.RightClick) {\n          return false;\n        }\n\n        onActivation?.({event});\n\n        return true;\n      },\n    },\n  ];\n}\n","import type {TouchEvent} from 'react';\n\nimport {\n  AbstractPointerSensor,\n  PointerSensorProps,\n  PointerEventHandlers,\n  PointerSensorOptions,\n} from '../pointer';\nimport type {SensorProps} from '../types';\n\nconst events: PointerEventHandlers = {\n  move: {name: 'touchmove'},\n  end: {name: 'touchend'},\n};\n\nexport interface TouchSensorOptions extends PointerSensorOptions {}\n\nexport type TouchSensorProps = SensorProps<TouchSensorOptions>;\n\nexport class TouchSensor extends AbstractPointerSensor {\n  constructor(props: PointerSensorProps) {\n    super(props, events);\n  }\n\n  static activators = [\n    {\n      eventName: 'onTouchStart' as const,\n      handler: (\n        {nativeEvent: event}: TouchEvent,\n        {onActivation}: TouchSensorOptions\n      ) => {\n        const {touches} = event;\n\n        if (touches.length > 1) {\n          return false;\n        }\n\n        onActivation?.({event});\n\n        return true;\n      },\n    },\n  ];\n}\n","import type {FirstArgument, Transform} from '@dnd-kit/utilities';\n\nimport type {Modifiers, Modifier} from './types';\n\nexport function applyModifiers(\n  modifiers: Modifiers | undefined,\n  {transform, ...args}: FirstArgument<Modifier>\n): Transform {\n  return modifiers?.length\n    ? modifiers.reduce<Transform>((accumulator, modifier) => {\n        return modifier({\n          transform: accumulator,\n          ...args,\n        });\n      }, transform)\n    : transform;\n}\n","import React, {\n  memo,\n  createContext,\n  useCallback,\n  useEffect,\n  useMemo,\n  useReducer,\n  useRef,\n  useState,\n} from 'react';\nimport {\n  add,\n  Transform,\n  useIsomorphicLayoutEffect,\n  useNodeRef,\n  useUniqueId,\n} from '@dnd-kit/utilities';\n\nimport {\n  Action,\n  Context,\n  DndContextDescriptor,\n  getInitialState,\n  reducer,\n} from '../../store';\nimport type {ViewRect} from '../../types';\nimport {DndMonitorContext, DndMonitorState} from '../../hooks/monitor';\nimport {\n  useAutoScroller,\n  useCachedNode,\n  useCombineActivators,\n  useLayoutMeasuring,\n  useScrollableAncestors,\n  useClientRect,\n  useClientRects,\n  useScrollOffsets,\n  useViewRect,\n} from '../../hooks/utilities';\nimport type {\n  AutoScrollOptions,\n  LayoutMeasuring,\n  SyntheticListener,\n} from '../../hooks/utilities';\nimport {\n  KeyboardSensor,\n  PointerSensor,\n  Sensor,\n  SensorContext,\n  SensorDescriptor,\n  SensorHandler,\n  SensorInstance,\n} from '../../sensors';\nimport {\n  adjustScale,\n  CollisionDetection,\n  defaultCoordinates,\n  getAdjustedRect,\n  getRectDelta,\n  getEventCoordinates,\n  rectIntersection,\n} from '../../utilities';\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport type {\n  Active,\n  DroppableContainers,\n  DroppableContainer,\n  DataRef,\n} from '../../store/types';\nimport type {\n  DragStartEvent,\n  DragCancelEvent,\n  DragEndEvent,\n  DragMoveEvent,\n  DragOverEvent,\n  UniqueIdentifier,\n} from '../../types';\nimport {\n  Accessibility,\n  Announcements,\n  screenReaderInstructions as defaultScreenReaderInstructions,\n  ScreenReaderInstructions,\n} from '../Accessibility';\n\nexport interface Props {\n  id?: string;\n  autoScroll?: boolean | AutoScrollOptions;\n  announcements?: Announcements;\n  cancelDrop?: CancelDrop;\n  children?: React.ReactNode;\n  collisionDetection?: CollisionDetection;\n  layoutMeasuring?: Partial<LayoutMeasuring>;\n  modifiers?: Modifiers;\n  screenReaderInstructions?: ScreenReaderInstructions;\n  sensors?: SensorDescriptor<any>[];\n  onDragStart?(event: DragStartEvent): void;\n  onDragMove?(event: DragMoveEvent): void;\n  onDragOver?(event: DragOverEvent): void;\n  onDragEnd?(event: DragEndEvent): void;\n  onDragCancel?(event: DragCancelEvent): void;\n}\n\nexport interface CancelDropArguments extends DragEndEvent {}\n\nexport type CancelDrop = (\n  args: CancelDropArguments\n) => boolean | Promise<boolean>;\n\ninterface DndEvent extends Event {\n  dndKit?: {\n    capturedBy: Sensor<any>;\n  };\n}\n\nconst defaultSensors = [\n  {sensor: PointerSensor, options: {}},\n  {sensor: KeyboardSensor, options: {}},\n];\n\nconst defaultData: DataRef = {current: {}};\n\nexport const ActiveDraggableContext = createContext<Transform>({\n  ...defaultCoordinates,\n  scaleX: 1,\n  scaleY: 1,\n});\n\nexport const DndContext = memo(function DndContext({\n  id,\n  autoScroll = true,\n  announcements,\n  children,\n  sensors = defaultSensors,\n  collisionDetection = rectIntersection,\n  layoutMeasuring,\n  modifiers,\n  screenReaderInstructions = defaultScreenReaderInstructions,\n  ...props\n}: Props) {\n  const store = useReducer(reducer, undefined, getInitialState);\n  const [state, dispatch] = store;\n  const [monitorState, setMonitorState] = useState<DndMonitorState>(() => ({\n    type: null,\n    event: null,\n  }));\n  const {\n    draggable: {active: activeId, nodes: draggableNodes, translate},\n    droppable: {containers: droppableContainers},\n  } = state;\n  const node = activeId ? draggableNodes[activeId] : null;\n  const activeRects = useRef<Active['rect']['current']>({\n    initial: null,\n    translated: null,\n  });\n  const active = useMemo<Active | null>(\n    () =>\n      activeId != null\n        ? {\n            id: activeId,\n            // It's possible for the active node to unmount while dragging\n            data: node?.data ?? defaultData,\n            rect: activeRects,\n          }\n        : null,\n    [activeId, node]\n  );\n  const activeRef = useRef<UniqueIdentifier | null>(null);\n  const [activeSensor, setActiveSensor] = useState<SensorInstance | null>(null);\n  const [activatorEvent, setActivatorEvent] = useState<Event | null>(null);\n  const latestProps = useRef(props);\n  const draggableDescribedById = useUniqueId(`DndDescribedBy`, id);\n  const {\n    layoutRectMap: droppableRects,\n    recomputeLayouts,\n    willRecomputeLayouts,\n  } = useLayoutMeasuring(droppableContainers, {\n    dragging: activeId != null,\n    dependencies: [translate.x, translate.y],\n    config: layoutMeasuring,\n  });\n  const activeNode = useCachedNode(draggableNodes, activeId);\n  const activationCoordinates = activatorEvent\n    ? getEventCoordinates(activatorEvent)\n    : null;\n  const activeNodeRect = useViewRect(activeNode);\n  const activeNodeClientRect = useClientRect(activeNode);\n  const initialActiveNodeRectRef = useRef<ViewRect | null>(null);\n  const initialActiveNodeRect = initialActiveNodeRectRef.current;\n  const nodeRectDelta = getRectDelta(activeNodeRect, initialActiveNodeRect);\n  const sensorContext = useRef<SensorContext>({\n    active: null,\n    activeNode,\n    collisionRect: null,\n    droppableRects,\n    draggableNodes,\n    draggingNodeRect: null,\n    droppableContainers,\n    over: null,\n    scrollableAncestors: [],\n    scrollAdjustedTranslate: null,\n    translatedRect: null,\n  });\n  const overNode = getDroppableNode(\n    sensorContext.current.over?.id ?? null,\n    droppableContainers\n  );\n  const windowRect = useClientRect(\n    activeNode ? activeNode.ownerDocument.defaultView : null\n  );\n  const containerNodeRect = useClientRect(\n    activeNode ? activeNode.parentElement : null\n  );\n  const scrollableAncestors = useScrollableAncestors(\n    activeId ? overNode ?? activeNode : null\n  );\n  const scrollableAncestorRects = useClientRects(scrollableAncestors);\n\n  const [overlayNodeRef, setOverlayNodeRef] = useNodeRef();\n  const overlayNodeRect = useClientRect(\n    activeId ? overlayNodeRef.current : null,\n    willRecomputeLayouts\n  );\n\n  const draggingNodeRect = overlayNodeRect ?? activeNodeClientRect;\n  const modifiedTranslate = applyModifiers(modifiers, {\n    transform: {\n      x: translate.x - nodeRectDelta.x,\n      y: translate.y - nodeRectDelta.y,\n      scaleX: 1,\n      scaleY: 1,\n    },\n    active,\n    over: sensorContext.current.over,\n    activeNodeRect: activeNodeClientRect,\n    draggingNodeRect,\n    containerNodeRect,\n    overlayNodeRect,\n    scrollableAncestors,\n    scrollableAncestorRects,\n    windowRect,\n  });\n\n  const pointerCoordinates = activationCoordinates\n    ? add(activationCoordinates, translate)\n    : null;\n\n  const scrollAdjustment = useScrollOffsets(scrollableAncestors);\n\n  const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n\n  const translatedRect = activeNodeRect\n    ? getAdjustedRect(activeNodeRect, modifiedTranslate)\n    : null;\n\n  const collisionRect = translatedRect\n    ? getAdjustedRect(translatedRect, scrollAdjustment)\n    : null;\n\n  const overId =\n    active && collisionRect\n      ? collisionDetection(Array.from(droppableRects.entries()), collisionRect)\n      : null;\n  const overContainer = getOver(overId, droppableContainers);\n  const over = useMemo(\n    () =>\n      overContainer && overContainer.rect.current\n        ? {\n            id: overContainer.id,\n            rect: overContainer.rect.current,\n            data: overContainer.data,\n            disabled: overContainer.disabled,\n          }\n        : null,\n    [overContainer]\n  );\n\n  const transform = adjustScale(\n    modifiedTranslate,\n    overContainer?.rect.current ?? null,\n    activeNodeRect\n  );\n\n  const instantiateSensor = useCallback(\n    (\n      event: React.SyntheticEvent,\n      {sensor: Sensor, options}: SensorDescriptor<any>\n    ) => {\n      if (!activeRef.current) {\n        return;\n      }\n\n      const activeNode = draggableNodes[activeRef.current];\n\n      if (!activeNode) {\n        return;\n      }\n\n      const sensorInstance = new Sensor({\n        active: activeRef.current,\n        activeNode,\n        event: event.nativeEvent,\n        options,\n        // Sensors need to be instantiated with refs for arguments that change over time\n        // otherwise they are frozen in time with the stale arguments\n        context: sensorContext,\n        onStart(initialCoordinates) {\n          const id = activeRef.current;\n\n          if (!id) {\n            return;\n          }\n\n          const node = draggableNodes[id];\n\n          if (!node) {\n            return;\n          }\n\n          const {onDragStart} = latestProps.current;\n          const event: DragStartEvent = {\n            active: {id, data: node.data, rect: activeRects},\n          };\n\n          dispatch({\n            type: Action.DragStart,\n            initialCoordinates,\n            active: id,\n          });\n          setMonitorState({type: Action.DragStart, event});\n          onDragStart?.(event);\n        },\n        onMove(coordinates) {\n          dispatch({\n            type: Action.DragMove,\n            coordinates,\n          });\n        },\n        onEnd: createHandler(Action.DragEnd),\n        onCancel: createHandler(Action.DragCancel),\n      });\n\n      setActiveSensor(sensorInstance);\n      setActivatorEvent(event.nativeEvent);\n\n      function createHandler(type: Action.DragEnd | Action.DragCancel) {\n        return async function handler() {\n          const {active, over, scrollAdjustedTranslate} = sensorContext.current;\n          let event: DragEndEvent | null = null;\n\n          if (active && scrollAdjustedTranslate) {\n            const {cancelDrop} = latestProps.current;\n\n            event = {\n              active: active,\n              delta: scrollAdjustedTranslate,\n              over,\n            };\n\n            if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n              const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n              if (shouldCancel) {\n                type = Action.DragCancel;\n              }\n            }\n          }\n\n          activeRef.current = null;\n\n          dispatch({type});\n          setActiveSensor(null);\n          setActivatorEvent(null);\n\n          if (event) {\n            const {onDragCancel, onDragEnd} = latestProps.current;\n            const handler = type === Action.DragEnd ? onDragEnd : onDragCancel;\n\n            setMonitorState({type, event});\n            handler?.(event);\n          }\n        };\n      }\n    },\n    [dispatch, draggableNodes]\n  );\n\n  const bindActivatorToSensorInstantiator = useCallback(\n    (\n      handler: SensorHandler,\n      sensor: SensorDescriptor<any>\n    ): SyntheticListener['handler'] => {\n      return (event, active) => {\n        const nativeEvent = event.nativeEvent as DndEvent;\n\n        if (\n          // No active draggable\n          activeRef.current !== null ||\n          // Event has already been captured\n          nativeEvent.dndKit ||\n          nativeEvent.defaultPrevented\n        ) {\n          return;\n        }\n\n        if (handler(event, sensor.options) === true) {\n          nativeEvent.dndKit = {\n            capturedBy: sensor.sensor,\n          };\n\n          activeRef.current = active;\n          instantiateSensor(event, sensor);\n        }\n      };\n    },\n    [instantiateSensor]\n  );\n\n  const activators = useCombineActivators(\n    sensors,\n    bindActivatorToSensorInstantiator\n  );\n\n  useIsomorphicLayoutEffect(\n    () => {\n      latestProps.current = props;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    Object.values(props)\n  );\n\n  useEffect(() => {\n    if (!active) {\n      initialActiveNodeRectRef.current = null;\n    }\n\n    if (active && activeNodeRect && !initialActiveNodeRectRef.current) {\n      initialActiveNodeRectRef.current = activeNodeRect;\n    }\n  }, [activeNodeRect, active]);\n\n  useEffect(() => {\n    const {onDragMove} = latestProps.current;\n    const {active, over} = sensorContext.current;\n\n    if (!active) {\n      return;\n    }\n\n    const event: DragMoveEvent = {\n      active,\n      delta: {\n        x: scrollAdjustedTranslate.x,\n        y: scrollAdjustedTranslate.y,\n      },\n      over,\n    };\n\n    setMonitorState({type: Action.DragMove, event});\n    onDragMove?.(event);\n  }, [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]);\n\n  useEffect(\n    () => {\n      const {active, scrollAdjustedTranslate} = sensorContext.current;\n\n      if (!active || !activeRef.current || !scrollAdjustedTranslate) {\n        return;\n      }\n\n      const {onDragOver} = latestProps.current;\n      const event: DragOverEvent = {\n        active,\n        delta: {\n          x: scrollAdjustedTranslate.x,\n          y: scrollAdjustedTranslate.y,\n        },\n        over,\n      };\n\n      setMonitorState({type: Action.DragOver, event});\n      onDragOver?.(event);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [over?.id]\n  );\n\n  useIsomorphicLayoutEffect(() => {\n    sensorContext.current = {\n      active,\n      activeNode,\n      collisionRect,\n      droppableRects,\n      draggableNodes,\n      draggingNodeRect,\n      droppableContainers,\n      over,\n      scrollableAncestors,\n      scrollAdjustedTranslate: scrollAdjustedTranslate,\n      translatedRect,\n    };\n\n    activeRects.current = {\n      initial: draggingNodeRect,\n      translated: translatedRect,\n    };\n  }, [\n    active,\n    activeNode,\n    collisionRect,\n    draggableNodes,\n    draggingNodeRect,\n    droppableRects,\n    droppableContainers,\n    over,\n    scrollableAncestors,\n    scrollAdjustedTranslate,\n    translatedRect,\n  ]);\n\n  useAutoScroller({\n    ...getAutoScrollerOptions(),\n    draggingRect: translatedRect,\n    pointerCoordinates,\n    scrollableAncestors,\n    scrollableAncestorRects,\n  });\n\n  const contextValue = useMemo(() => {\n    const memoizedContext: DndContextDescriptor = {\n      active,\n      activeNode,\n      activeNodeRect,\n      activeNodeClientRect,\n      activatorEvent,\n      activators,\n      ariaDescribedById: {\n        draggable: draggableDescribedById,\n      },\n      overlayNode: {\n        nodeRef: overlayNodeRef,\n        rect: overlayNodeRect,\n        setRef: setOverlayNodeRef,\n      },\n      containerNodeRect,\n      dispatch,\n      draggableNodes,\n      droppableContainers,\n      droppableRects,\n      over,\n      recomputeLayouts,\n      scrollableAncestors,\n      scrollableAncestorRects,\n      willRecomputeLayouts,\n      windowRect,\n    };\n\n    return memoizedContext;\n  }, [\n    active,\n    activeNode,\n    activeNodeClientRect,\n    activeNodeRect,\n    activatorEvent,\n    activators,\n    containerNodeRect,\n    overlayNodeRect,\n    overlayNodeRef,\n    dispatch,\n    draggableNodes,\n    draggableDescribedById,\n    droppableContainers,\n    droppableRects,\n    over,\n    recomputeLayouts,\n    scrollableAncestors,\n    scrollableAncestorRects,\n    setOverlayNodeRef,\n    willRecomputeLayouts,\n    windowRect,\n  ]);\n\n  return (\n    <DndMonitorContext.Provider value={monitorState}>\n      <Context.Provider value={contextValue}>\n        <ActiveDraggableContext.Provider value={transform}>\n          {children}\n        </ActiveDraggableContext.Provider>\n      </Context.Provider>\n      <Accessibility\n        announcements={announcements}\n        hiddenTextDescribedById={draggableDescribedById}\n        screenReaderInstructions={screenReaderInstructions}\n      />\n    </DndMonitorContext.Provider>\n  );\n\n  function getAutoScrollerOptions() {\n    const activeSensorDisablesAutoscroll =\n      activeSensor?.autoScrollEnabled === false;\n    const autoScrollGloballyDisabled =\n      typeof autoScroll === 'object'\n        ? autoScroll.enabled === false\n        : autoScroll === false;\n    const enabled =\n      !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled;\n\n    if (typeof autoScroll === 'object') {\n      return {\n        ...autoScroll,\n        enabled,\n      };\n    }\n\n    return {enabled};\n  }\n});\n\nfunction getDroppableNode(\n  id: UniqueIdentifier | null,\n  droppableContainers: DroppableContainers\n): HTMLElement | null {\n  return id ? droppableContainers[id]?.node.current ?? null : null;\n}\n\nfunction getOver(\n  id: UniqueIdentifier | null,\n  droppableContainers: DroppableContainers\n): DroppableContainer | null {\n  return id ? droppableContainers[id] ?? null : null;\n}\n","import type {Coordinates, ViewRect} from '../../types';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getRectDelta(\n  rect1: ViewRect | null,\n  rect2: ViewRect | null\n): Coordinates {\n  return rect1 && rect2\n    ? {\n        x: rect1.left - rect2.left,\n        y: rect1.top - rect2.top,\n      }\n    : defaultCoordinates;\n}\n","import {useLazyMemo} from '@dnd-kit/utilities';\n\nimport type {DraggableNode, DraggableNodes} from '../../store';\nimport type {UniqueIdentifier} from '../../types';\n\nexport function useCachedNode(\n  draggableNodes: DraggableNodes,\n  id: UniqueIdentifier | null\n): DraggableNode['node']['current'] {\n  const draggableNode = id !== null ? draggableNodes[id] : undefined;\n  const node = draggableNode ? draggableNode.node.current : null;\n\n  return useLazyMemo(\n    (cachedNode) => {\n      if (id === null) {\n        return null;\n      }\n\n      // In some cases, the draggable node can unmount while dragging\n      // This is the case for virtualized lists. In those situations,\n      // we fall back to the last known value for that node.\n      return node ?? cachedNode ?? null;\n    },\n    [node, id]\n  );\n}\n","import {useState, useCallback, useMemo, useRef, useEffect} from 'react';\nimport {add} from '@dnd-kit/utilities';\n\nimport {\n  defaultCoordinates,\n  getScrollableElement,\n  getScrollCoordinates,\n  getScrollOffsets,\n} from '../../utilities';\nimport type {Coordinates} from '../../types';\n\ntype ScrollCoordinates = Map<HTMLElement | Window, Coordinates>;\n\nexport function useScrollOffsets(elements: Element[]): Coordinates {\n  const [\n    scrollCoordinates,\n    setScrollCoordinates,\n  ] = useState<ScrollCoordinates | null>(null);\n  const prevElements = useRef(elements);\n\n  // To-do: Throttle the handleScroll callback\n  const handleScroll = useCallback((event: Event) => {\n    const scrollingElement = getScrollableElement(event.target);\n\n    if (!scrollingElement) {\n      return;\n    }\n\n    setScrollCoordinates((scrollCoordinates) => {\n      if (!scrollCoordinates) {\n        return null;\n      }\n\n      scrollCoordinates.set(\n        scrollingElement,\n        getScrollCoordinates(scrollingElement)\n      );\n\n      return new Map(scrollCoordinates);\n    });\n  }, []);\n\n  useEffect(() => {\n    const previousElements = prevElements.current;\n\n    if (elements !== previousElements) {\n      cleanup(previousElements);\n\n      const entries = elements\n        .map((element) => {\n          const scrollableElement = getScrollableElement(element);\n\n          if (scrollableElement) {\n            scrollableElement.addEventListener('scroll', handleScroll, {\n              passive: true,\n            });\n\n            return [\n              scrollableElement,\n              getScrollCoordinates(scrollableElement),\n            ] as const;\n          }\n\n          return null;\n        })\n        .filter(\n          (\n            entry\n          ): entry is [\n            HTMLElement | (Window & typeof globalThis),\n            Coordinates\n          ] => entry != null\n        );\n\n      setScrollCoordinates(entries.length ? new Map(entries) : null);\n\n      prevElements.current = elements;\n    }\n\n    return () => {\n      cleanup(elements);\n      cleanup(previousElements);\n    };\n\n    function cleanup(elements: Element[]) {\n      elements.forEach((element) => {\n        const scrollableElement = getScrollableElement(element);\n\n        scrollableElement?.removeEventListener('scroll', handleScroll);\n      });\n    }\n  }, [handleScroll, elements]);\n\n  return useMemo(() => {\n    if (elements.length) {\n      return scrollCoordinates\n        ? Array.from(scrollCoordinates.values()).reduce(\n            (acc, coordinates) => add(acc, coordinates),\n            defaultCoordinates\n          )\n        : getScrollOffsets(elements);\n    }\n\n    return defaultCoordinates;\n  }, [elements, scrollCoordinates]);\n}\n","import type {Transform} from '@dnd-kit/utilities';\nimport type {LayoutRect} from '../../types';\n\nexport function adjustScale(\n  transform: Transform,\n  rect1: LayoutRect | null,\n  rect2: LayoutRect | null\n): Transform {\n  return {\n    ...transform,\n    scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n    scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1,\n  };\n}\n","import {useMemo} from 'react';\n\nimport type {SensorDescriptor, SensorHandler} from '../../sensors';\nimport type {\n  SyntheticListener,\n  SyntheticListeners,\n} from './useSyntheticListeners';\n\nexport function useCombineActivators(\n  sensors: SensorDescriptor<any>[],\n  getSyntheticHandler: (\n    handler: SensorHandler,\n    sensor: SensorDescriptor<any>\n  ) => SyntheticListener['handler']\n): SyntheticListeners {\n  return useMemo(\n    () =>\n      sensors.reduce<SyntheticListeners>((accumulator, sensor) => {\n        const {sensor: Sensor} = sensor;\n\n        const sensorActivators = Sensor.activators.map((activator) => ({\n          eventName: activator.eventName,\n          handler: getSyntheticHandler(activator.handler, sensor),\n        }));\n\n        return [...accumulator, ...sensorActivators];\n      }, []),\n    [sensors, getSyntheticHandler]\n  );\n}\n","import {createContext, useContext, useEffect, useMemo} from 'react';\nimport {Transform, useNodeRef} from '@dnd-kit/utilities';\n\nimport {Context, Data} from '../store';\nimport {ActiveDraggableContext} from '../components/DndContext';\nimport {\n  useData,\n  useSyntheticListeners,\n  SyntheticListenerMap,\n} from './utilities';\n\nexport interface UseDraggableArguments {\n  id: string;\n  data?: Data;\n  disabled?: boolean;\n  attributes?: {\n    role?: string;\n    roleDescription?: string;\n    tabIndex?: number;\n  };\n}\n\nexport type DraggableSyntheticListeners = SyntheticListenerMap | undefined;\n\nconst NullContext = createContext<any>(null);\n\nconst defaultRole = 'button';\n\nexport function useDraggable({\n  id,\n  data,\n  disabled = false,\n  attributes,\n}: UseDraggableArguments) {\n  const {\n    active,\n    activeNodeRect,\n    activatorEvent,\n    ariaDescribedById,\n    draggableNodes,\n    droppableRects,\n    activators,\n    over,\n  } = useContext(Context);\n  const {role = defaultRole, roleDescription = 'draggable', tabIndex = 0} =\n    attributes ?? {};\n  const isDragging = active?.id === id;\n  const transform: Transform | null = useContext(\n    isDragging ? ActiveDraggableContext : NullContext\n  );\n  const [node, setNodeRef] = useNodeRef();\n  const listeners = useSyntheticListeners(activators, id);\n  const dataRef = useData(data);\n\n  useEffect(\n    () => {\n      draggableNodes[id] = {node, data: dataRef};\n\n      return () => {\n        delete draggableNodes[id];\n      };\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [draggableNodes, id]\n  );\n\n  const memoizedAttributes = useMemo(\n    () => ({\n      role,\n      tabIndex,\n      'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n      'aria-roledescription': roleDescription,\n      'aria-describedby': ariaDescribedById.draggable,\n    }),\n    [role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]\n  );\n\n  return {\n    active,\n    activeNodeRect,\n    activatorEvent,\n    attributes: memoizedAttributes,\n    droppableRects,\n    isDragging,\n    listeners: disabled ? undefined : listeners,\n    node,\n    over,\n    setNodeRef,\n    transform,\n  };\n}\n","import {useMemo} from 'react';\n\nimport type {SyntheticEventName, UniqueIdentifier} from '../../types';\n\nexport type SyntheticListener = {\n  eventName: SyntheticEventName;\n  handler: (event: React.SyntheticEvent, id: UniqueIdentifier) => void;\n};\n\nexport type SyntheticListeners = SyntheticListener[];\n\nexport type SyntheticListenerMap = Record<string, Function>;\n\nexport function useSyntheticListeners(\n  listeners: SyntheticListeners,\n  id: string\n): SyntheticListenerMap {\n  return useMemo(() => {\n    return listeners.reduce<SyntheticListenerMap>(\n      (acc, {eventName, handler}) => {\n        acc[eventName] = (event: React.SyntheticEvent) => {\n          handler(event, id);\n        };\n\n        return acc;\n      },\n      {} as SyntheticListenerMap\n    );\n  }, [listeners, id]);\n}\n","import {ContextType, useContext} from 'react';\nimport {Context} from '../store';\n\nexport function useDndContext() {\n  return useContext(Context);\n}\n\nexport type UseDndContextReturnValue = ContextType<typeof Context>;\n","import {useContext, useEffect, useRef} from 'react';\nimport {useIsomorphicLayoutEffect, useNodeRef} from '@dnd-kit/utilities';\n\nimport {Context, Action, Data} from '../store';\nimport type {LayoutRect} from '../types';\nimport {useData} from './utilities';\n\nexport interface UseDroppableArguments {\n  id: string;\n  disabled?: boolean;\n  data?: Data;\n}\n\nexport function useDroppable({\n  data,\n  disabled = false,\n  id,\n}: UseDroppableArguments) {\n  const {active, dispatch, over} = useContext(Context);\n  const rect = useRef<LayoutRect | null>(null);\n  const [nodeRef, setNodeRef] = useNodeRef();\n  const dataRef = useData(data);\n\n  useIsomorphicLayoutEffect(\n    () => {\n      dispatch({\n        type: Action.RegisterDroppable,\n        element: {\n          id,\n          disabled,\n          node: nodeRef,\n          rect,\n          data: dataRef,\n        },\n      });\n\n      return () =>\n        dispatch({\n          type: Action.UnregisterDroppable,\n          id,\n        });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [id]\n  );\n\n  useEffect(\n    () => {\n      dispatch({\n        type: Action.SetDroppableDisabled,\n        id,\n        disabled,\n      });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [disabled]\n  );\n\n  return {\n    active,\n    rect,\n    isOver: over?.id === id,\n    node: nodeRef,\n    over,\n    setNodeRef,\n  };\n}\n","import React, {useContext, useEffect, useRef} from 'react';\nimport {CSS} from '@dnd-kit/utilities';\n\nimport {getRelativeTransformOrigin} from '../../utilities';\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport {ActiveDraggableContext} from '../DndContext';\nimport {useDndContext} from '../../hooks';\nimport {useDerivedTransform, useDropAnimation, DropAnimation} from './hooks';\n\ntype TransitionGetter = (\n  activatorEvent: Event | null\n) => React.CSSProperties['transition'] | undefined;\n\nexport interface Props {\n  adjustScale?: boolean;\n  children?: React.ReactNode;\n  className?: string;\n  dropAnimation?: DropAnimation | null | undefined;\n  style?: React.CSSProperties;\n  transition?: string | TransitionGetter;\n  modifiers?: Modifiers;\n  wrapperElement?: keyof JSX.IntrinsicElements;\n  zIndex?: number;\n}\n\nconst defaultTransition: TransitionGetter = (activatorEvent) => {\n  const isKeyboardActivator = activatorEvent instanceof KeyboardEvent;\n\n  return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nexport const defaultDropAnimation: DropAnimation = {\n  duration: 250,\n  easing: 'ease',\n  dragSourceOpacity: 0,\n};\n\nexport const DragOverlay = React.memo(\n  ({\n    adjustScale = false,\n    children,\n    dropAnimation = defaultDropAnimation,\n    style: styleProp,\n    transition = defaultTransition,\n    modifiers,\n    wrapperElement = 'div',\n    className,\n    zIndex = 999,\n  }: Props) => {\n    const {\n      active,\n      activeNodeRect,\n      activeNodeClientRect,\n      containerNodeRect,\n      draggableNodes,\n      activatorEvent,\n      over,\n      overlayNode,\n      scrollableAncestors,\n      scrollableAncestorRects,\n      windowRect,\n    } = useDndContext();\n    const transform = useContext(ActiveDraggableContext);\n    const modifiedTransform = applyModifiers(modifiers, {\n      active,\n      activeNodeRect: activeNodeClientRect,\n      draggingNodeRect: overlayNode.rect,\n      containerNodeRect,\n      over,\n      overlayNodeRect: overlayNode.rect,\n      scrollableAncestors,\n      scrollableAncestorRects,\n      transform,\n      windowRect,\n    });\n    const derivedTransform = useDerivedTransform(\n      modifiedTransform,\n      activeNodeRect,\n      overlayNode.nodeRef.current\n    );\n    const isDragging = active !== null;\n    const intermediateTransform = derivedTransform ?? modifiedTransform;\n    const finalTransform = adjustScale\n      ? intermediateTransform\n      : {\n          ...intermediateTransform,\n          scaleX: 1,\n          scaleY: 1,\n        };\n    const style: React.CSSProperties | undefined = activeNodeRect\n      ? {\n          position: 'fixed',\n          width: activeNodeRect.width,\n          height: activeNodeRect.height,\n          top: activeNodeRect.top,\n          left: activeNodeRect.left,\n          zIndex,\n          transform: CSS.Transform.toString(finalTransform),\n          touchAction: 'none',\n          transformOrigin:\n            adjustScale && activatorEvent\n              ? getRelativeTransformOrigin(\n                  activatorEvent as MouseEvent | KeyboardEvent | TouchEvent,\n                  activeNodeRect\n                )\n              : undefined,\n          transition: derivedTransform\n            ? undefined\n            : typeof transition === 'function'\n            ? transition(activatorEvent)\n            : transition,\n          ...styleProp,\n        }\n      : undefined;\n    const attributes = isDragging\n      ? {\n          style,\n          children,\n          className,\n          transform: finalTransform,\n        }\n      : undefined;\n    const attributesSnapshot = useRef(attributes);\n    const derivedAttributes = attributes ?? attributesSnapshot.current;\n    const {children: finalChildren, transform: _, ...otherAttributes} =\n      derivedAttributes ?? {};\n    const prevActiveId = useRef(active?.id ?? null);\n    const dropAnimationComplete = useDropAnimation({\n      animate: Boolean(dropAnimation && prevActiveId.current && !active),\n      adjustScale,\n      activeId: prevActiveId.current,\n      draggableNodes,\n      duration: dropAnimation?.duration,\n      easing: dropAnimation?.easing,\n      dragSourceOpacity: dropAnimation?.dragSourceOpacity,\n      node: overlayNode.nodeRef.current,\n      transform: attributesSnapshot.current?.transform,\n    });\n    const shouldRender = Boolean(\n      finalChildren && (children || (dropAnimation && !dropAnimationComplete))\n    );\n\n    useEffect(() => {\n      if (active?.id !== prevActiveId.current) {\n        prevActiveId.current = active?.id ?? null;\n      }\n\n      if (active && attributesSnapshot.current !== attributes) {\n        attributesSnapshot.current = attributes;\n      }\n    }, [active, attributes]);\n\n    useEffect(() => {\n      if (dropAnimationComplete) {\n        attributesSnapshot.current = undefined;\n      }\n    }, [dropAnimationComplete]);\n\n    if (!shouldRender) {\n      return null;\n    }\n\n    return React.createElement(\n      wrapperElement,\n      {\n        ...otherAttributes,\n        ref: overlayNode.setRef,\n      },\n      finalChildren\n    );\n  }\n);\n","import {useRef} from 'react';\nimport {Transform, useLazyMemo} from '@dnd-kit/utilities';\n\nimport type {ViewRect} from '../../../types';\n\nexport function useDerivedTransform(\n  transform: Transform,\n  rect: ViewRect | null,\n  overlayNode: HTMLElement | null\n) {\n  const prevRect = useRef(rect);\n\n  return useLazyMemo<Transform | undefined>(\n    (previousValue) => {\n      const initial = prevRect.current;\n\n      if (rect !== initial) {\n        if (rect && initial) {\n          const layoutHasChanged =\n            initial.left !== rect.left || initial.top !== rect.top;\n\n          if (layoutHasChanged && !previousValue) {\n            const overlayNodeRect = overlayNode?.getBoundingClientRect();\n\n            if (overlayNodeRect) {\n              const delta = {\n                ...transform,\n                x: overlayNodeRect.left - rect.left,\n                y: overlayNodeRect.top - rect.top,\n              };\n\n              return delta;\n            }\n          }\n        }\n\n        prevRect.current = rect;\n      }\n\n      return undefined;\n    },\n    [rect, transform, overlayNode]\n  );\n}\n","import {useEffect, useState} from 'react';\nimport {CSS, Transform, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {UniqueIdentifier} from '../../../types';\nimport type {DraggableNodes} from '../../../store';\nimport {getViewRect} from '../../../utilities';\n\nexport interface DropAnimation {\n  duration: number;\n  easing: string;\n  dragSourceOpacity?: number;\n}\n\ninterface Arguments {\n  activeId: UniqueIdentifier | null;\n  animate: boolean;\n  adjustScale: boolean;\n  draggableNodes: DraggableNodes;\n  duration: DropAnimation['duration'] | undefined;\n  easing: DropAnimation['easing'] | undefined;\n  dragSourceOpacity: DropAnimation['dragSourceOpacity'] | undefined;\n  node: HTMLElement | null;\n  transform: Transform | undefined;\n}\n\nexport function useDropAnimation({\n  animate,\n  adjustScale,\n  activeId,\n  draggableNodes,\n  duration,\n  easing,\n  dragSourceOpacity,\n  node,\n  transform,\n}: Arguments) {\n  const [dropAnimationComplete, setDropAnimationComplete] = useState(false);\n\n  useEffect(() => {\n    if (!animate || !activeId || !easing || !duration) {\n      if (animate) {\n        setDropAnimationComplete(true);\n      }\n\n      return;\n    }\n\n    requestAnimationFrame(() => {\n      const finalNode = draggableNodes[activeId]?.node.current;\n\n      if (transform && node && finalNode && finalNode.parentNode !== null) {\n        const fromNode = node.children.length > 1 ? node : node.children[0];\n\n        if (fromNode) {\n          const from = fromNode.getBoundingClientRect();\n          const to = getViewRect(finalNode);\n          const delta = {\n            x: from.left - to.left,\n            y: from.top - to.top,\n          };\n\n          if (Math.abs(delta.x) || Math.abs(delta.y)) {\n            const scaleDelta = {\n              scaleX: adjustScale\n                ? (to.width * transform.scaleX) / from.width\n                : 1,\n              scaleY: adjustScale\n                ? (to.height * transform.scaleY) / from.height\n                : 1,\n            };\n            const finalTransform = CSS.Transform.toString({\n              x: transform.x - delta.x,\n              y: transform.y - delta.y,\n              ...scaleDelta,\n            });\n            const originalOpacity = finalNode.style.opacity;\n\n            if (dragSourceOpacity != null) {\n              finalNode.style.opacity = `${dragSourceOpacity}`;\n            }\n\n            const nodeAnimation = node.animate(\n              [\n                {\n                  transform: CSS.Transform.toString(transform),\n                },\n                {\n                  transform: finalTransform,\n                },\n              ],\n              {\n                easing,\n                duration,\n              }\n            );\n\n            nodeAnimation.onfinish = () => {\n              node.style.display = 'none';\n\n              setDropAnimationComplete(true);\n\n              if (finalNode && dragSourceOpacity != null) {\n                finalNode.style.opacity = originalOpacity;\n              }\n            };\n            return;\n          }\n        }\n      }\n\n      setDropAnimationComplete(true);\n    });\n  }, [\n    animate,\n    activeId,\n    adjustScale,\n    draggableNodes,\n    duration,\n    easing,\n    dragSourceOpacity,\n    node,\n    transform,\n  ]);\n\n  useIsomorphicLayoutEffect(() => {\n    if (dropAnimationComplete) {\n      setDropAnimationComplete(false);\n    }\n  }, [dropAnimationComplete]);\n\n  return dropAnimationComplete;\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\n\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","// convert 'assume' UTC date string from BE to local date time for FE\nimport moment from 'moment';\n\nimport isValidDate from '../isValidDate';\n\nexport function utcToLocal(stringValue, withTime = false) {\n  if (stringValue === '' || stringValue == null) {\n    return null;\n  }\n  const date = new Date(stringValue);\n\n  if (!isValidDate(date)) {\n    return null;\n  } else {\n    if (stringValue.length === 10) {\n      return stringValue;\n    }\n\n    const localDateTime = new Date(moment.utc(stringValue).format());\n    const date = `${localDateTime.getFullYear()}-${('0' + (localDateTime.getMonth() + 1)).slice(-2)}-${('0' + localDateTime.getDate()).slice(-2)}`;\n    if (withTime) {\n      return `${date} ${localDateTime.getHours()}:${('0' + localDateTime.getMinutes()).slice(-2)}:${('0' + localDateTime.getSeconds()).slice(-2)}`;\n    } else {\n      return date;\n    }\n  }\n}\n\nexport default utcToLocal;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4.47 21h15.06c1.54 0 2.5-1.67 1.73-3L13.73 4.99c-.77-1.33-2.69-1.33-3.46 0L2.74 18c-.77 1.33.19 3 1.73 3zM12 14c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1zm1 4h-2v-2h2v2z\"\n}), 'WarningRounded');\n\nexports.default = _default;","import { useTheme as useThemeWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\nexport default function useTheme() {\n  return useThemeWithoutDefault() || defaultTheme;\n}","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  Hub as HubInterface,\n  Integration,\n  IntegrationClass,\n  Primitive,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  consoleSandbox,\n  dateTimestampInSeconds,\n  getGlobalSingleton,\n  isThenable,\n  logger,\n  uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport { SDK_VERSION } from './version';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\nexport interface RunWithAsyncContextOptions {\n  /** Whether to reuse an existing async context if one exists. Defaults to false. */\n  reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n  /**\n   * Gets the current async context. Returns undefined if there is no current async context.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub: () => Hub | undefined;\n  /**\n   * Runs the supplied callback in its own async context.\n   */\n  runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: {\n    // eslint-disable-next-line deprecation/deprecation\n    hub?: Hub;\n    acs?: AsyncContextStrategy;\n    /**\n     * Extra Hub properties injected by various SDKs\n     */\n    integrations?: Integration[];\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n}\n\n/**\n * @deprecated The `Hub` class will be removed in version 8 of the SDK in favour of `Scope` and `Client` objects.\n *\n * If you previously used the `Hub` class directly, replace it with `Scope` and `Client` objects. More information:\n * - [Multiple Sentry Instances](https://docs.sentry.io/platforms/javascript/best-practices/multiple-sentry-instances/)\n * - [Browser Extensions](https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/)\n *\n * Some of our APIs are typed with the Hub class instead of the interface (e.g. `getCurrentHub`). Most of them are deprecated\n * themselves and will also be removed in version 8. More information:\n * - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)\n */\n// eslint-disable-next-line deprecation/deprecation\nexport class Hub implements HubInterface {\n  /** Is a {@link Layer}[] containing the client and scope */\n  private readonly _stack: Layer[];\n\n  /** Contains the last event id of a captured event.  */\n  private _lastEventId?: string;\n\n  private _isolationScope: Scope;\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   *\n   * @deprecated Instantiation of Hub objects is deprecated and the constructor will be removed in version 8 of the SDK.\n   *\n   * If you are currently using the Hub for multi-client use like so:\n   *\n   * ```\n   * // OLD\n   * const hub = new Hub();\n   * hub.bindClient(client);\n   * makeMain(hub)\n   * ```\n   *\n   * instead initialize the client as follows:\n   *\n   * ```\n   * // NEW\n   * Sentry.withIsolationScope(() => {\n   *    Sentry.setCurrentClient(client);\n   *    client.init();\n   * });\n   * ```\n   *\n   * If you are using the Hub to capture events like so:\n   *\n   * ```\n   * // OLD\n   * const client = new Client();\n   * const hub = new Hub(client);\n   * hub.captureException()\n   * ```\n   *\n   * instead capture isolated events as follows:\n   *\n   * ```\n   * // NEW\n   * const client = new Client();\n   * const scope = new Scope();\n   * scope.setClient(client);\n   * scope.captureException();\n   * ```\n   */\n  public constructor(\n    client?: Client,\n    scope?: Scope,\n    isolationScope?: Scope,\n    private readonly _version: number = API_VERSION,\n  ) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n      assignedScope.setClient(client);\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n      assignedIsolationScope.setClient(client);\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    this._stack = [{ scope: assignedScope }];\n\n    if (client) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.bindClient(client);\n    }\n\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Checks if this hub's version is older than the given version.\n   *\n   * @param version A version number to compare to.\n   * @return True if the given version is newer; otherwise false.\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * This binds the given client to the current scope.\n   * @param client An SDK client (client) instance.\n   *\n   * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n   */\n  public bindClient(client?: Client): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const top = this.getStackTop();\n    top.client = client;\n    top.scope.setClient(client);\n    // eslint-disable-next-line deprecation/deprecation\n    if (client && client.setupIntegrations) {\n      // eslint-disable-next-line deprecation/deprecation\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.getScope().clone();\n    // eslint-disable-next-line deprecation/deprecation\n    this.getStack().push({\n      // eslint-disable-next-line deprecation/deprecation\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n  public popScope(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.getStack().length <= 1) return false;\n    // eslint-disable-next-line deprecation/deprecation\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.withScope()` instead.\n   */\n  public withScope<T>(callback: (scope: Scope) => T): T {\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          return res;\n        },\n        e => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          throw e;\n        },\n      );\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    this.popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.getClient()` instead.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   *\n   * @deprecated Use `Sentry.getCurrentScope()` instead.\n   */\n  public getScope(): Scope {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * @deprecated Use `Sentry.getIsolationScope()` instead.\n   */\n  public getIsolationScope(): Scope {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the scope stack for domains or the process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   * @deprecated This will be removed in v8.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureException()` instead.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureException(exception, {\n      originalException: exception,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use  `Sentry.captureMessage()` instead.\n   */\n  public captureMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n  ): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureMessage(message, level, {\n      originalException: message,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureEvent()` instead.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated This will be removed in v8.\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.addBreadcrumb()` instead.\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n    // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n    // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n    // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n    // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n    // the event processing pipeline.\n    // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setUser()` instead.\n   */\n  public setUser(user: User | null): void {\n    // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setUser(user);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTags()` instead.\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTags(tags);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtras()` instead.\n   */\n  public setExtras(extras: Extras): void {\n    // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtras(extras);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTag()` instead.\n   */\n  public setTag(key: string, value: Primitive): void {\n    // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTag(key, value);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtra()` instead.\n   */\n  public setExtra(key: string, extra: Extra): void {\n    // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtra(key, extra);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setContext()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setContext(name, context);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `getScope()` directly.\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public run(callback: (hub: Hub) => void): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      // eslint-disable-next-line deprecation/deprecation\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      // eslint-disable-next-line deprecation/deprecation\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n   *\n   * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n   * new child span within the transaction or any span, call the respective `.startChild()` method.\n   *\n   * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n   *\n   * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n   * finished child spans will be sent to Sentry.\n   *\n   * @param context Properties of the new `Transaction`.\n   * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n   * default values). See {@link Options.tracesSampler}.\n   *\n   * @returns The transaction which was just started\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n  public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n    const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n    if (DEBUG_BUILD && !result) {\n      // eslint-disable-next-line deprecation/deprecation\n      const client = this.getClient();\n      if (!client) {\n        logger.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public traceHeaders(): { [key: string]: string } {\n    return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top level `captureSession` instead.\n   */\n  public captureSession(endSession: boolean = false): void {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      // eslint-disable-next-line deprecation/deprecation\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `endSession` instead.\n   */\n  public endSession(): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `startSession` instead.\n   */\n  public startSession(context?: SessionContext): Session {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   *\n   * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n   * only unnecessarily increased API surface but only wrapped accessing the option.\n   */\n  public shouldSendDefaultPii(): boolean {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n  private _sendSessionUpdate(): void {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n *\n * @deprecated Use `setCurrentClient()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function makeMain(hub: Hub): Hub {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n *\n * @deprecated Use the respective replacement method directly instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getCurrentHub(): Hub {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nexport function getIsolationScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getIsolationScope();\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\n  // If there's no hub, or its an old API, assign a new one\n\n  if (\n    !hasHubOnCarrier(registry) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(registry).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (\n    !hasHubOnCarrier(carrier) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = parent.getClient();\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = parent.getScope();\n    // eslint-disable-next-line deprecation/deprecation\n    const isolationScope = parent.getIsolationScope();\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n  // eslint-disable-next-line deprecation/deprecation\n  return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ReactCSS = exports.loop = exports.handleActive = exports.handleHover = exports.hover = undefined;\n\nvar _flattenNames = require('./flattenNames');\n\nvar _flattenNames2 = _interopRequireDefault(_flattenNames);\n\nvar _mergeClasses = require('./mergeClasses');\n\nvar _mergeClasses2 = _interopRequireDefault(_mergeClasses);\n\nvar _autoprefix = require('./autoprefix');\n\nvar _autoprefix2 = _interopRequireDefault(_autoprefix);\n\nvar _hover2 = require('./components/hover');\n\nvar _hover3 = _interopRequireDefault(_hover2);\n\nvar _active = require('./components/active');\n\nvar _active2 = _interopRequireDefault(_active);\n\nvar _loop2 = require('./loop');\n\nvar _loop3 = _interopRequireDefault(_loop2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.hover = _hover3.default;\nexports.handleHover = _hover3.default;\nexports.handleActive = _active2.default;\nexports.loop = _loop3.default;\nvar ReactCSS = exports.ReactCSS = function ReactCSS(classes) {\n  for (var _len = arguments.length, activations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    activations[_key - 1] = arguments[_key];\n  }\n\n  var activeNames = (0, _flattenNames2.default)(activations);\n  var merged = (0, _mergeClasses2.default)(classes, activeNames);\n  return (0, _autoprefix2.default)(merged);\n};\n\nexports.default = ReactCSS;","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n}), 'Search');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  GridItemsAlignment,\n  GridJustification,\n} from '@material-ui/core';\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\nimport {\n  IconProp,\n} from '@fortawesome/fontawesome-svg-core';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../FieldTextField';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\n// For row without icon but maintaining icon space, have justify as flex-end\n\nconst ICON_SPACE = 28;\n\ninterface IDrawerTextFieldRow extends BaseFieldProps<IFieldTextFieldComponentProps> {\n  muiIcon?: JSX.Element;\n  icon?: IconProp;\n  alignItems?: GridItemsAlignment;\n  justify?: GridJustification;\n  removeIconSpace?: boolean;\n  multiLine?: number;\n  classes?: {\n    [key in keyof ReturnType<typeof styles>]?: any;\n  };\n  type?: string;\n}\n\ntype IDrawerTextFieldRowProps = IDrawerTextFieldRow & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst DrawerTextFieldRow: React.FC<IDrawerTextFieldRowProps> = ({\n  children,\n  props = {},\n  classes,\n  icon,\n  alignItems = 'center',\n  justify = 'flex-start',\n  removeIconSpace = false,\n  multiLine = 1,\n  validate = null,\n  type,\n  muiIcon = null,\n  ...rest\n}) => {\n  const {\n    inputProps = {},\n  } = props;\n  return <Grid\n    container={true}\n    alignItems={alignItems}\n    justify={justify}\n    wrap='nowrap'\n  >\n    {\n      (!removeIconSpace && justify !== 'flex-end')\n        ? <Grid\n            container={true}\n            alignItems='center'\n            item={true}\n            className={classes.iconContainer}\n            style={{\n              width: ICON_SPACE\n            }}\n          >\n            {\n              icon\n                ? <FontAwesomeIcon\n                    icon={icon}\n                    size='sm'\n                    fixedWidth={true}\n                    className={classnames(classes.defaultIcon, classes.icon)}\n                  />\n                : muiIcon ? React.cloneElement(muiIcon, {\n                    fontSize: 'small',\n                    className: classnames(classes.defaultIcon, classes.icon, muiIcon.props.className)\n                  }) : null\n            }\n          </Grid>\n        : null\n    }\n    <Grid\n      item={true}\n      style={{\n        width: removeIconSpace ? '100%' : `calc(100% - ${ICON_SPACE}px)`\n      }}\n    >\n      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n        component={FieldTextField}\n        validate={validate}\n        {...rest}\n        props={{\n          formControlProps: {\n            fullWidth: true,\n          },\n          ...props,\n          inputProps: {\n            inputProps: { className: classes.input },\n            type,\n            ...inputProps,\n            multiline: multiLine > 1,\n            rowsMax: multiLine,\n          },\n        }}\n      />\n    </Grid>\n  </Grid>;\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {},\n  iconContainer: {\n  },\n  icon: {\n  },\n  defaultIcon: {\n    color: theme.palette.grey[600]\n  },\n  input: {\n  }\n});\n\nconst DrawerTextFieldRowComponent = withStyles(styles)(DrawerTextFieldRow);\n\nexport default DrawerTextFieldRowComponent;\n","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'building';\nexport const BUILDING_SELECTION_FORM = 'BuildingModule.BuildingSelectionForm';\nexport const FORM_SELECTED_BUILDING_CLASSES_KEY = 'FormSelectedBuildingClassesKey';\nexport const FORM_SELECTED_BUILDING_TYPES_KEY = 'FormSelectedBuildingTypesKey';\nexport const FORM_SINGLE_KEY = 'FormSingleKey';\nexport const FORM_MULTI_KEY = 'FormMultiKey';\n\n","/* tslint:disable */\nimport { createSelector } from 'reselect';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { IMap, IMapNonRecursive } from \"ats-utils/src/Interfaces/index\";\nimport { IListReducerState } from \"./reducer\";\nimport { ListItem } from '../../models';\nimport { crossTypes } from '../../components/CrossReferenceTypesInfoPopup/Component';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ProductModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectPimStatuses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('pimStatuses'),\n);\n\nexport const makeSelectTestStatuses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('testStatuses'),\n);\n\nexport const makeSelectLeadSources = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('leadSources'),\n);\n\nexport const makeSelectAllManufacturers = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('manufacturers'),\n);\n\nexport const makeSelectXrefTypes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('xrefTypes')\n);\n\nexport const makeSelectAvailableXrefTypes = () => createSelector(\n  makeSelectXrefTypes(),\n  (xrefTypes: List<IMap<ListItem>>) => crossTypes.filter(type => xrefTypes.find(xrefType => xrefType.get('value') === type.type))\n);\n\nexport const makeSelectDetailedManufacturerMap = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('detailedManufacturerMap')\n);\n\nexport const makeSelectmanufacturerLogoId = (manufacturer: string) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.getIn(['detailedManufacturerMap', manufacturer, 'logoId'])\n);\n\nexport const makeSelectAllCategories = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IListReducerState>) => state.get('categories'),\n);\n\n// export const makeSelectContacts = () => createSelector(\n//   selectReducerState(),\n//   (state: IMapNonRecursive<IListReducerState>) => state.get('contacts'),\n// );\n//\n// export const makeSelectIsLoadingContacts = () => createSelector(\n//   selectReducerState(),\n//   (state: IMapNonRecursive<IListReducerState>) => state.get('isLoadingContacts'),\n// );\nexport default {\n  selectReducerState\n};\n","import {useMemo} from 'react';\n\nexport function useCombinedRefs<T>(\n  ...refs: ((node: T) => void)[]\n): (node: T) => void {\n  return useMemo(\n    () => (node: T) => {\n      refs.forEach((ref) => ref(node));\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    refs\n  );\n}\n","// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n  typeof window !== 'undefined' &&\n  typeof window.document !== 'undefined' &&\n  typeof window.document.createElement !== 'undefined';\n","import {useEffect, useLayoutEffect} from 'react';\n\nimport {canUseDOM} from '../execution-context';\n\n/**\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\n */\nexport const useIsomorphicLayoutEffect = canUseDOM\n  ? useLayoutEffect\n  : useEffect;\n","import {useCallback, useRef} from 'react';\n\nexport function useInterval() {\n  const intervalRef = useRef<number | null>(null);\n\n  const set = useCallback((listener: Function, duration: number) => {\n    intervalRef.current = setInterval(listener, duration);\n  }, []);\n\n  const clear = useCallback(() => {\n    if (intervalRef.current !== null) {\n      clearInterval(intervalRef.current);\n      intervalRef.current = null;\n    }\n  }, []);\n\n  return [set, clear] as const;\n}\n","import {useMemo, useRef} from 'react';\n\nexport function useLazyMemo<T>(\n  callback: (prevValue: T | undefined) => T,\n  dependencies: any[]\n) {\n  const valueRef = useRef<T>();\n\n  return useMemo(\n    () => {\n      const newValue = callback(valueRef.current);\n      valueRef.current = newValue;\n\n      return newValue;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [...dependencies]\n  );\n}\n","import {useRef, useCallback} from 'react';\n\nexport function useNodeRef() {\n  const node = useRef<HTMLElement | null>(null);\n  const setNodeRef = useCallback((element: HTMLElement | null) => {\n    node.current = element;\n  }, []);\n\n  return [node, setNodeRef] as const;\n}\n","import {useMemo} from 'react';\n\nlet ids: Record<string, number> = {};\n\nexport function useUniqueId(prefix: string, value?: string) {\n  return useMemo(() => {\n    if (value) {\n      return value;\n    }\n\n    const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n    ids[prefix] = id;\n\n    return `${prefix}-${id}`;\n  }, [prefix, value]);\n}\n","function createAdjustmentFn(modifier: number) {\n  return <T extends Record<U, number>, U extends string>(\n    object: T,\n    ...adjustments: Partial<T>[]\n  ): T => {\n    return adjustments.reduce<T>(\n      (accumulator, adjustment) => {\n        const entries = Object.entries(adjustment) as [U, number][];\n\n        for (const [key, valueAdjustment] of entries) {\n          const value = accumulator[key];\n\n          if (value != null) {\n            accumulator[key] = (value + modifier * valueAdjustment) as T[U];\n          }\n        }\n\n        return accumulator;\n      },\n      {\n        ...object,\n      }\n    );\n  };\n}\n\nexport const add = createAdjustmentFn(1);\nexport const subtract = createAdjustmentFn(-1);\n","export type Transform = {\n  x: number;\n  y: number;\n  scaleX: number;\n  scaleY: number;\n};\n\nexport interface Transition {\n  property: string;\n  easing: string;\n  duration: number;\n}\n\nexport const CSS = Object.freeze({\n  Translate: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      const {x, y} = transform;\n\n      return `translate3d(${x ? Math.round(x) : 0}px, ${\n        y ? Math.round(y) : 0\n      }px, 0)`;\n    },\n  },\n  Scale: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      const {scaleX, scaleY} = transform;\n\n      return `scaleX(${scaleX}) scaleY(${scaleY})`;\n    },\n  },\n  Transform: {\n    toString(transform: Transform | null) {\n      if (!transform) {\n        return;\n      }\n\n      return [\n        CSS.Translate.toString(transform),\n        CSS.Scale.toString(transform),\n      ].join(' ');\n    },\n  },\n  Transition: {\n    toString({property, duration, easing}: Transition) {\n      return `${property} ${duration}ms ${easing}`;\n    },\n  },\n});\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"\n}), 'Info');\n\nexports.default = _default;","import * as React from 'react';\nimport { Grid, Theme, IconButton, makeStyles, createStyles, Typography, Tooltip } from '@material-ui/core';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { Manufacturer, Filter, Category, Office } from '../../../models';\nimport { List, Map } from 'immutable';\nimport { Field, getFormValues } from 'redux-form/immutable';\nimport { FieldTextField } from '../../../components';\nimport { NoPhotoPreviewAction } from '../../../modules/ApplicationModule/actions';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../components/FieldDropzone';\nimport { BaseFieldProps, change } from 'redux-form';\nimport { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { connect, useSelector }from 'react-redux';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { AnyAction, compose, Dispatch } from 'redux';\nimport { createStructuredSelector } from 'reselect';\nimport { SERIES_EDIT_FORM } from '../../SeriesEditPage/Component';\nimport { GetBrandRepCategoriesAction, GetManufacturersAction, GetOfficeByIdAction, SelectOfficeAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectCategory, makeSelectManufacturer, makeSelectOffice, makeSelectOfficeLoading, makeSelectToolSpecificManufacturers } from '../../../modules/AccountModule/selectors';\nimport { GetAttributeOrderAction } from '../../../modules/ProductModule/actions';\nimport { ResetPimStateAction, SearchRecommendedAttributesAction } from '../../../modules/PimModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { required, isNotEmptyStringRequired, isInteger, isNumberGreaterThanZero, isPositiveIntegerSmallerThan, isPositiveFloatSmallerThan, isSmallerThan, isBiggerThan, requiredList } from '../../../validators';\nimport { makeSelectCanManagePimPricing, makeSelectIsPimTool, makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport CurrencySelector from '../../../components/CurrencySelector';\nimport { Currency, GEOLOCATION_ID, MAX_FILE_SIZE_100MB } from '../../../constants';\nimport i18next from 'i18next';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../components/FieldSwitch';\nimport InfoIcon from '@material-ui/icons/Info';\nimport MandatoryRecommendedAttributes from '../../../models/MandatoryRecommendedAttributes';\nimport FieldRadio, { IFieldRadioComponentProps } from '../../../components/FieldRadio';\nimport usFlag from '../../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../../images/productSelectionPage/canFlag.png';\nimport { COUNTRIES_ARRAY, COUNTRIES_OBJECT } from '../../../constants/countries';\n\nexport const acceptedMainImageExtensions = '.JPG, .JPEG, .PNG';\n\nexport const mainImageUploadValidation = (value) => {\n  const size = value && value[0] && value[0]['size'] || false;\n  const name = value && value[0] && value[0]['name'] || false;\n\n  const validateSize = size > MAX_FILE_SIZE_100MB && `${i18next.t('translations:pimProductDrawer.overLimitMessage')}`;\n  const validateFileType = name\n                            && !(new RegExp('(' + acceptedMainImageExtensions.replace(/\\, /g, '|').replace(/\\./g, '\\\\.') + ')$', 'i')).test(name)\n                            && `${i18next.t('translations:upload.typeError')} (${i18next.t('translations:upload.acceptedTypes')} ${acceptedMainImageExtensions.replace(/\\./g, '').toUpperCase()})`;\n\n  const message = [validateSize, validateFileType].filter((x) => x).join(' & ');\n  return message || undefined;\n};\n\nexport const _isPositiveIntegerSmallerThan = (value) => isPositiveIntegerSmallerThan(1000000000)(value);\n\nexport const _isPositiveFloatSmallerThan = (value) => isPositiveFloatSmallerThan(1000000000, 6, true)(value);\n\nexport const _isSmallerThan = (value, values) => isSmallerThan(values?.getIn(['bulkPrice', 'truck', 'CAD', 'quantity']))(value);\n\nexport const _isBiggerThan = (value, values) => isBiggerThan(values?.getIn(['bulkPrice', 'skid', 'CAD', 'quantity']))(value);\n\nconst isBothValueValid = (type, values) => {\n  if (!!values?.getIn(['bulkPrice', type, 'CAD', 'quantity']) === !!values?.getIn(['bulkPrice', type, 'CAD', 'price'])) {\n    return undefined;\n  }\n  return 'Unit and Price value have to be both empty or valid';\n};\n\nexport const isBothSkidValid = (value, values) => isBothValueValid('skid', values);\n\nexport const isBothTruckValid = (value, values) => isBothValueValid('truck', values);\n\n\nexport const PURCHASABILITY_RADIO_LABEL_ARRAY = [\n  {\n    id: GEOLOCATION_ID.usa,\n    value: 'United States',\n    labelComponent: (\n      <Grid\n        container={true}\n        wrap='nowrap'\n      >\n        <img src={usFlag} style={{ width: 26 }} alt={i18next.t('translations:configuratorPage.usFlagIconAlt')} />\n        <Typography variant='body2'>{'United States'}</Typography>\n      </Grid>\n    )\n  },\n  {\n    id: GEOLOCATION_ID.canada,\n    value: 'Canada',\n    labelComponent: (\n      <Grid\n        container={true}\n        wrap='nowrap'\n      >\n        <img src={canFlag} style={{ width: 26 }} alt={i18next.t('translations:configuratorPage.canadianFlagIconAlt')} />\n        <Typography variant='body2'>{'Canada'}</Typography>\n      </Grid>\n    )\n  },\n  {\n    id: -1,\n    value: 'Both',\n    labelComponent: (\n      <Grid\n        container={true}\n        wrap='nowrap'\n      >\n        <img src={usFlag} style={{ width: 26 }} alt={i18next.t('translations:configuratorPage.usFlagIconAlt')} />\n        <img src={canFlag} style={{ width: 26 }} alt={i18next.t('translations:configuratorPage.canadianFlagIconAlt')} />\n        <Typography variant='body2'>{'Both'}</Typography>\n      </Grid>\n    )\n  }\n];\n\ninterface ITextField {\n  label: string;\n  name: string;\n  tooltip?: string;\n  inputProps?: object;\n  validate?: any;\n  require?: boolean;\n  isPOA?: boolean | number;\n}\n\ninterface ISeriesInfoComponentProps {\n  seriesId?: number;\n}\n\ninterface ISeriesInfoProps extends ISeriesInfoComponentProps {\n  formValues: Map<string, any>;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  searchingOffice: boolean;\n  userOfficeId: number;\n  office: IMap<Office>;\n  isPimTool: boolean;\n  dispatch: React.Dispatch<IAction>;\n  getManufacturers: () => void;\n  searchRecommendedAttributes: ({ categoryId, brandId, seriesId, onSuccess }: { categoryId: number, brandId: number, seriesId?: number, onSuccess?: (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => void }) => void;\n  getAttributeOrder: (categoryId: number) => void;\n  getBrandRepCategories: () => void;\n  getOfficeAndSelectOffice: (officeId: number) => void;\n}\n\ntype SeriesInfoProps = ISeriesInfoProps;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  uploadFileContainer: {\n    marginBottom: theme.spacing(),\n    height: theme.spacing(18)\n  },\n  title: {\n    fontSize: '.75rem',\n    marginBottom: theme.spacing(),\n    color: theme.palette.text.primary,\n  },\n  container: {\n    marginTop: theme.spacing()\n  }\n}));\n\nconst renderTextField: React.FC<ITextField> = ({label, name, tooltip = '', inputProps = {}, validate = [], require = false, isPOA = false}): JSX.Element => {\n  const isListPriceField = name.includes('list');\n  return (\n    <>\n      <Typography variant='subtitle1' color='textPrimary'>\n        {label}\n      </Typography>\n      {isListPriceField && isPOA\n      ? <Typography align='left' variant='subtitle1' style={{color: 'darkgrey'}}>\n          { label }\n        </Typography>\n      : <Tooltip title={tooltip}>\n          <div>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name={name}\n              component={FieldTextField}\n              props={{\n                require,\n                inputProps: {\n                  defaultValue: '',\n                  ...inputProps\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n              validate={validate}\n            />\n          </div>\n        </Tooltip>\n      }\n    </>\n  );\n};\n\nconst SeriesInfo: React.FC<SeriesInfoProps & WithTranslation>  = (props) => {\n  const {\n    seriesId,\n    manufacturers,\n    categories,\n    formValues,\n    userOfficeId,\n    office,\n    searchingOffice,\n    isPimTool,\n    dispatch,\n    getManufacturers,\n    getBrandRepCategories,\n    searchRecommendedAttributes,\n    getAttributeOrder,\n    getOfficeAndSelectOffice,\n    t,\n  } = props;\n\n  const [selectedCurrency, setSelectedCurrency] = React.useState<Currency>('CAD');\n\n  const mainFileId = formValues && formValues.get('mainFileId');\n  const categoryId = formValues && formValues.getIn(['categoryName', 'id']);\n  const brandId = formValues && formValues.getIn(['brand', 'id']);\n  const isPOA = formValues && formValues.getIn(['price', 'default', selectedCurrency, 'isPoa']);\n\n  const classes = useStyles();\n  const canManagePimPricing = useSelector(makeSelectCanManagePimPricing());\n\n  const usePrevious = <T extends unknown>(value: T): T | undefined => {\n    const ref = React.useRef<T>();\n    React.useEffect(() => {\n      ref.current = value;\n    });\n    return ref.current;\n  };\n  const prevOffice = usePrevious(office);\n\n  React.useEffect(() => {\n    getManufacturers();\n    getBrandRepCategories();\n\n    if (categoryId && brandId) {\n      const onSuccess = (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => {\n        dispatch(change(SERIES_EDIT_FORM, 'initialMandatoryAttributes', mandatoryRecommendedAttributes?.get('required')));\n      };\n      searchRecommendedAttributes({ categoryId, brandId, seriesId, onSuccess });\n    }\n\n    if (categoryId) {\n      getAttributeOrder(categoryId);\n    }\n\n    if (userOfficeId !== -1 && (!office || (office && office.get('id') !== userOfficeId))) {\n      getOfficeAndSelectOffice(userOfficeId);\n    } else {\n      if (office && office.getIn(['location', 'country', 'id']) !== 6251999) { // id for Canada\n        setSelectedCurrency('USD');\n      }\n    }\n  }, []);\n\n  React.useEffect(() => {\n    if (!searchingOffice && userOfficeId !== -1 && (!office || (office && office.get('id') !== userOfficeId))) {\n      getOfficeAndSelectOffice(userOfficeId);\n    }\n  }, [searchingOffice]);\n  React.useEffect(() => {\n    if (office && !prevOffice) {\n      if (office.getIn(['location', 'country', 'id']) !== 6251999) { // id for Canada\n        setSelectedCurrency('USD');\n      }\n    }\n  }, [office]);\n\n  const onBrandChange = (val) => {\n    const updatedBrandId = val && val.id;\n    if (brandId !== updatedBrandId) {\n      dispatch(change(SERIES_EDIT_FORM, 'categoryName', ''));\n      return dispatch(new ResetPimStateAction('mandatoryRecommendedAttributes'));\n    }\n  };\n\n  const onCategoryChange = (val) => {\n    // changing the category will:\n    // get new recommended attributes list - displays in features table\n    // get new attribute order list - effects order displayed in features table\n\n    const updatedCategoryId = val && val.id;\n    if (updatedCategoryId && brandId) {\n      const onSuccess = (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => {\n        dispatch(change(SERIES_EDIT_FORM, 'initialMandatoryAttributes', mandatoryRecommendedAttributes?.get('required')));\n      };\n      searchRecommendedAttributes({ categoryId: updatedCategoryId, brandId, seriesId, onSuccess });\n    }\n    getAttributeOrder(updatedCategoryId);\n  };\n\n  const removePhoto = () => {\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(SERIES_EDIT_FORM, 'mainFileId', ''));\n    dispatch(change(SERIES_EDIT_FORM, 'dropzone', ''));\n  };\n\n  const renderDropzone = (): JSX.Element => {\n    return (\n      <Grid container={true} item={true} direction='column' className={classes.uploadFileContainer} wrap='nowrap' xs={12}>\n        <Grid container={true} item={true} justify='space-between'>\n          {\n            (mainFileId || (formValues && formValues.get('dropzone'))) &&\n            <IconButton\n              onClick={removePhoto}\n              size='small'\n            >\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          }\n        </Grid>\n        <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n          component={FieldDropzone}\n          name='dropzone'\n          validate={mainImageUploadValidation}\n          props={{\n            initialImage: mainFileId,\n            suggestText: t('SeriesDetailPage.uploadSuggest'),\n            dropzoneInputProps: {\n              accept: acceptedMainImageExtensions\n            }\n          }}\n        />\n      </Grid>\n    );\n  };\n\n  return (\n    <Grid\n      container={true}\n      item={true}\n      xs={12}\n      spacing={2}\n      justify={'space-between'}\n      className={classes.container}\n    >\n      <Grid item={true} lg={3} md={3} xs={12}>\n        {renderDropzone()}\n      </Grid>\n      <Grid\n        container={true}\n        item={true}\n        lg={9}\n        md={9}\n        xs={12}\n        spacing={2}\n        justify='center'\n      >\n        <Grid\n          container={true}\n          item={true}\n          spacing={2}\n        >\n          <Grid\n            item={true}\n            xs={6}\n          >\n            {\n              renderTextField({\n                label: t('SeriesDetailPage.seriesNumber'),\n                name: 'productNumber',\n                require: true,\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.seriesNumber'),\n                },\n                validate: isNotEmptyStringRequired,\n              })\n            }\n          </Grid>\n          <Grid\n            item={true}\n            xs={6}\n          >\n            {\n              renderTextField({\n                label: t('SeriesDetailPage.description'),\n                name: 'description',\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.description'),\n                }\n              })\n            }\n          </Grid>\n          <Grid item={true} xs={6}>\n            <Typography variant='subtitle1' color='textPrimary'>\n              {t('generalListFilter.manufacturerTitle')}\n            </Typography>\n            <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n              name='brand'\n              component={FieldAutocomplete}\n              validate={[required]}\n              props={{\n                require: true,\n                inputProps: {\n                  options: manufacturers.toJS(),\n                  placeholder:  t('generalListFilter.manufacturerTitle'),\n                  getOptionLabel: option => option ? option.value || '' : null,\n                  renderOption: option => option && <Typography>{option.value}</Typography>,\n                  onChange: onBrandChange\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={6}>\n            <Typography variant='subtitle1' color='textPrimary'>\n              {t('generalListFilter.categoryTitle')}\n            </Typography>\n            <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n              name='categoryName'\n              component={FieldAutocomplete}\n              validate={[required]}\n              props={{\n                require: true,\n                inputProps: {\n                  options: categories.toJS(),\n                  placeholder: t('generalListFilter.categoryTitle'),\n                  getOptionLabel: option => option ? option.value || '' : null,\n                  renderOption: option => option && <Typography>{option.value}</Typography>,\n                  onChange: onCategoryChange\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n            />\n          </Grid>\n\n          {\n            (isPimTool) ? <Grid container={true} item={true} xs={12} wrap='nowrap'>\n              <Typography color='textPrimary' variant='subtitle1' style={{ whiteSpace: 'nowrap' }}>\n                {t('SeriesDetailPage.purchasableLabel')} *\n              </Typography>\n              <Grid\n                item={true}\n                xs={12}\n                style={{ paddingLeft: 8 }}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='purchasability.country'\n                  component={FieldAutocomplete}\n                  validate={[requiredList]}\n                  props={{\n                    inputProps: {\n                      multiple: true,\n                      placeholder: t('SeriesDetailPage.purchasablePlaceholder'),\n                      options: COUNTRIES_ARRAY,\n                      getOptionSelected: (option, value) => option.id === value.id,\n                      filterSelectedOptions: true,\n                      getOptionLabel: option => option ? option.value || COUNTRIES_OBJECT[option.id]?.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>,\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    },\n                  }}\n                />\n              </Grid>\n            </Grid> : null\n          }\n\n          <Grid\n            item={true}\n            container={true}\n            alignItems='center'\n            style={{ paddingTop: 0 }}\n          >\n            <Tooltip title={canManagePimPricing ? '' : t('permissions.noPermissionTooltip')}>\n              <span>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={`price.default.${selectedCurrency}.isPoa`}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.priceIsPOA'),\n                    inputProps: {\n                      color: 'primary',\n                      disabled: !canManagePimPricing\n                    }\n                  }}\n                />\n              </span>\n            </Tooltip>\n            <Tooltip title={t('configuratorPage.optionsWidget.priceIsPOATooltip')}>\n              <InfoIcon fontSize='small' color='action' style={{marginLeft: -8, cursor: 'pointer'}} />\n            </Tooltip>\n          </Grid>\n          <Grid\n            item={true}\n            xs={3}\n          >\n            <CurrencySelector\n              selectedCurrency={selectedCurrency}\n              setSelectedCurrency={setSelectedCurrency}\n              selectProps={{\n                fullWidth: true\n              }}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            xs={3}\n          >\n            {\n              renderTextField({\n                label: t('SeriesDetailPage.list'),\n                name: `price.default.${selectedCurrency}.list`,\n                tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.list'),\n                  type: 'number',\n                  disabled: !canManagePimPricing\n                },\n                isPOA\n              })\n            }\n          </Grid>\n          <Grid\n            item={true}\n            xs={3}\n          >\n            {\n              renderTextField({\n                label: t('SeriesDetailPage.sell'),\n                name: `price.default.${selectedCurrency}.sell`,\n                tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.sell'),\n                  type: 'number',\n                  disabled: !canManagePimPricing\n                }\n              })\n            }\n          </Grid>\n          <Grid\n            item={true}\n            xs={3}\n          >\n            {\n              renderTextField({\n                label: t('SeriesDetailPage.cost'),\n                name: `price.default.${selectedCurrency}.cost`,\n                tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.cost'),\n                  type: 'number',\n                  disabled: !canManagePimPricing\n                }\n              })\n            }\n          </Grid>\n\n          {/* skid/truck values */}\n          {\n            isPimTool && <>\n              <Grid\n                item={true}\n                xs={3}\n              >\n                {\n                  renderTextField({\n                    label: t('SeriesDetailPage.skidUnit'),\n                    name: `bulkPrice.skid.CAD.quantity`,\n                    tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                    inputProps: {\n                      placeholder: t('SeriesDetailPage.skidUnit'),\n                      disabled: !canManagePimPricing\n                    },\n                    validate: [_isPositiveIntegerSmallerThan, _isSmallerThan, isBothSkidValid]\n                  })\n                }\n              </Grid>\n              <Grid\n                item={true}\n                xs={3}\n              >\n                {\n                  renderTextField({\n                    label: t('SeriesDetailPage.skidUnitPrice'),\n                    name: `bulkPrice.skid.CAD.price`,\n                    tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                    inputProps: {\n                      placeholder: t('SeriesDetailPage.skidUnitPrice'),\n                      disabled: !canManagePimPricing\n                    },\n                    validate: [_isPositiveFloatSmallerThan, isBothSkidValid],\n                  })\n                }\n              </Grid>\n              <Grid\n                item={true}\n                xs={3}\n              >\n                {\n                  renderTextField({\n                    label: t('SeriesDetailPage.truckUnit'),\n                    name: `bulkPrice.truck.CAD.quantity`,\n                    tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                    inputProps: {\n                      placeholder: t('SeriesDetailPage.truckUnit'),\n                      disabled: !canManagePimPricing\n                    },\n                    validate: [_isPositiveIntegerSmallerThan, _isBiggerThan, isBothTruckValid],\n                  })\n                }\n              </Grid>\n              <Grid\n                item={true}\n                xs={3}\n              >\n                {\n                  renderTextField({\n                    label: t('SeriesDetailPage.truckUnitPrice'),\n                    name: `bulkPrice.truck.CAD.price`,\n                    tooltip: canManagePimPricing ? '' : t('permissions.noPermissionTooltip'),\n                    inputProps: {\n                      placeholder: t('SeriesDetailPage.truckUnitPrice'),\n                      disabled: !canManagePimPricing\n                    },\n                    validate: [_isPositiveFloatSmallerThan, isBothTruckValid],\n                  })\n                }\n              </Grid>\n            </>\n          }\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => ({\n  dispatch,\n  getManufacturers: () => {\n    dispatch(new GetManufacturersAction());\n  },\n  getBrandRepCategories: () => {\n    dispatch(new GetBrandRepCategoriesAction());\n  },\n  searchRecommendedAttributes: ({ categoryId, brandId, seriesId, onSuccess }: { categoryId: number, brandId: number, seriesId?: number, onSuccess?: (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => void }) => {\n    dispatch(new SearchRecommendedAttributesAction({categoryId, brandId, seriesId, onSuccess }));\n  },\n  getAttributeOrder: (categoryId: number) => {\n    dispatch(new GetAttributeOrderAction({categoryId}));\n  },\n  getOfficeAndSelectOffice: (officeId: number) => {\n    dispatch(new GetOfficeByIdAction({ officeId }));\n    dispatch(new SelectOfficeAction({ officeId }));\n  },\n});\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(SERIES_EDIT_FORM),\n  manufacturers: makeSelectToolSpecificManufacturers(),\n  categories: makeSelectCategory(),\n  searchingOffice: makeSelectOfficeLoading(),\n  userOfficeId: makeSelectUserOfficeId(),\n  office: makeSelectOffice(),\n  isPimTool: makeSelectIsPimTool(),\n})(state);\n\nexport default compose<React.FC<ISeriesInfoComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(SeriesInfo);\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { Component } from 'react';\nimport { jsx, keyframes, ClassNames } from '@emotion/core';\nimport { createPortal } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport { g as getBoundingClientObj, a as getScrollParent, b as getScrollTop, c as animatedScrollTo, s as scrollTo } from './chunk-e8ae4b0f.browser.esm.js';\nimport _css from '@emotion/css';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport AutosizeInput from 'react-input-autosize';\n\nfunction getMenuPlacement(_ref) {\n  var maxHeight = _ref.maxHeight,\n      menuEl = _ref.menuEl,\n      minHeight = _ref.minHeight,\n      placement = _ref.placement,\n      shouldScroll = _ref.shouldScroll,\n      isFixedPosition = _ref.isFixedPosition,\n      theme = _ref.theme;\n  var spacing = theme.spacing;\n  var scrollParent = getScrollParent(menuEl);\n  var defaultState = {\n    placement: 'bottom',\n    maxHeight: maxHeight\n  }; // something went wrong, return default state\n\n  if (!menuEl || !menuEl.offsetParent) return defaultState; // we can't trust `scrollParent.scrollHeight` --> it may increase when\n  // the menu is rendered\n\n  var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n      scrollHeight = _scrollParent$getBoun.height;\n\n  var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n      menuBottom = _menuEl$getBoundingCl.bottom,\n      menuHeight = _menuEl$getBoundingCl.height,\n      menuTop = _menuEl$getBoundingCl.top;\n\n  var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n      containerTop = _menuEl$offsetParent$.top;\n\n  var viewHeight = window.innerHeight;\n  var scrollTop = getScrollTop(scrollParent);\n  var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n  var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n  var viewSpaceAbove = containerTop - marginTop;\n  var viewSpaceBelow = viewHeight - menuTop;\n  var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n  var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n  var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n  var scrollUp = scrollTop + menuTop - marginTop;\n  var scrollDuration = 160;\n\n  switch (placement) {\n    case 'auto':\n    case 'bottom':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceBelow >= menuHeight) {\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      } // 2: the menu will fit, if scrolled\n\n\n      if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        }\n\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      } // 3: the menu will fit, if constrained\n\n\n      if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        } // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n\n\n        var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n        return {\n          placement: 'bottom',\n          maxHeight: constrainedHeight\n        };\n      } // 4. Forked beviour when there isn't enough space below\n      // AUTO: flip the menu, render above\n\n\n      if (placement === 'auto' || isFixedPosition) {\n        // may need to be constrained after flipping\n        var _constrainedHeight = maxHeight;\n        var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n\n        if (spaceAbove >= minHeight) {\n          _constrainedHeight = Math.min(spaceAbove - marginBottom - spacing.controlHeight, maxHeight);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight\n        };\n      } // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n\n\n      if (placement === 'bottom') {\n        scrollTo(scrollParent, scrollDown);\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      }\n\n      break;\n\n    case 'top':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceAbove >= menuHeight) {\n        return {\n          placement: 'top',\n          maxHeight: maxHeight\n        };\n      } // 2: the menu will fit, if scrolled\n\n\n      if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: maxHeight\n        };\n      } // 3: the menu will fit, if constrained\n\n\n      if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n        var _constrainedHeight2 = maxHeight; // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n\n        if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n          _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n        }\n\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight2\n        };\n      } // 4. not enough space, the browser WILL NOT increase scrollable area when\n      // absolutely positioned element rendered above the viewport (only below).\n      // Flip the menu, render below\n\n\n      return {\n        placement: 'bottom',\n        maxHeight: maxHeight\n      };\n\n    default:\n      throw new Error(\"Invalid placement provided \\\"\".concat(placement, \"\\\".\"));\n  } // fulfil contract with flow: implicit return value of undefined\n\n\n  return defaultState;\n} // Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n  var placementToCSSProp = {\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement ? placementToCSSProp[placement] : 'bottom';\n}\n\nvar coercePlacement = function coercePlacement(p) {\n  return p === 'auto' ? 'bottom' : p;\n};\n\nvar menuCSS = function menuCSS(_ref2) {\n  var _ref3;\n\n  var placement = _ref2.placement,\n      _ref2$theme = _ref2.theme,\n      borderRadius = _ref2$theme.borderRadius,\n      spacing = _ref2$theme.spacing,\n      colors = _ref2$theme.colors;\n  return _ref3 = {\n    label: 'menu'\n  }, _defineProperty(_ref3, alignToControl(placement), '100%'), _defineProperty(_ref3, \"backgroundColor\", colors.neutral0), _defineProperty(_ref3, \"borderRadius\", borderRadius), _defineProperty(_ref3, \"boxShadow\", '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)'), _defineProperty(_ref3, \"marginBottom\", spacing.menuGutter), _defineProperty(_ref3, \"marginTop\", spacing.menuGutter), _defineProperty(_ref3, \"position\", 'absolute'), _defineProperty(_ref3, \"width\", '100%'), _defineProperty(_ref3, \"zIndex\", 1), _ref3;\n}; // NOTE: internal only\n\nvar MenuPlacer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(MenuPlacer, _Component);\n\n  function MenuPlacer() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, MenuPlacer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(MenuPlacer)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      maxHeight: _this.props.maxMenuHeight,\n      placement: null\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getPlacement\", function (ref) {\n      var _this$props = _this.props,\n          minMenuHeight = _this$props.minMenuHeight,\n          maxMenuHeight = _this$props.maxMenuHeight,\n          menuPlacement = _this$props.menuPlacement,\n          menuPosition = _this$props.menuPosition,\n          menuShouldScrollIntoView = _this$props.menuShouldScrollIntoView,\n          theme = _this$props.theme;\n      var getPortalPlacement = _this.context.getPortalPlacement;\n      if (!ref) return; // DO NOT scroll if position is fixed\n\n      var isFixedPosition = menuPosition === 'fixed';\n      var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n      var state = getMenuPlacement({\n        maxHeight: maxMenuHeight,\n        menuEl: ref,\n        minHeight: minMenuHeight,\n        placement: menuPlacement,\n        shouldScroll: shouldScroll,\n        isFixedPosition: isFixedPosition,\n        theme: theme\n      });\n      if (getPortalPlacement) getPortalPlacement(state);\n\n      _this.setState(state);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getUpdatedProps\", function () {\n      var menuPlacement = _this.props.menuPlacement;\n      var placement = _this.state.placement || coercePlacement(menuPlacement);\n      return _objectSpread({}, _this.props, {\n        placement: placement,\n        maxHeight: _this.state.maxHeight\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(MenuPlacer, [{\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      return children({\n        ref: this.getPlacement,\n        placerProps: this.getUpdatedProps()\n      });\n    }\n  }]);\n\n  return MenuPlacer;\n}(Component);\n\n_defineProperty(MenuPlacer, \"contextTypes\", {\n  getPortalPlacement: PropTypes.func\n});\n\nvar Menu = function Menu(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('menu', props),\n    className: cx({\n      menu: true\n    }, className)\n  }, innerProps, {\n    ref: innerRef\n  }), children);\n};\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4) {\n  var maxHeight = _ref4.maxHeight,\n      baseUnit = _ref4.theme.spacing.baseUnit;\n  return {\n    maxHeight: maxHeight,\n    overflowY: 'auto',\n    paddingBottom: baseUnit,\n    paddingTop: baseUnit,\n    position: 'relative',\n    // required for offset[Height, Top] > keyboard scroll\n    WebkitOverflowScrolling: 'touch'\n  };\n};\nvar MenuList = function MenuList(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      isMulti = props.isMulti,\n      innerRef = props.innerRef;\n  return jsx(\"div\", {\n    css: getStyles('menuList', props),\n    className: cx({\n      'menu-list': true,\n      'menu-list--is-multi': isMulti\n    }, className),\n    ref: innerRef\n  }, children);\n}; // ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5) {\n  var _ref5$theme = _ref5.theme,\n      baseUnit = _ref5$theme.spacing.baseUnit,\n      colors = _ref5$theme.colors;\n  return {\n    color: colors.neutral40,\n    padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\"),\n    textAlign: 'center'\n  };\n};\n\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('noOptionsMessage', props),\n    className: cx({\n      'menu-notice': true,\n      'menu-notice--no-options': true\n    }, className)\n  }, innerProps), children);\n};\nNoOptionsMessage.defaultProps = {\n  children: 'No options'\n};\nvar LoadingMessage = function LoadingMessage(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('loadingMessage', props),\n    className: cx({\n      'menu-notice': true,\n      'menu-notice--loading': true\n    }, className)\n  }, innerProps), children);\n};\nLoadingMessage.defaultProps = {\n  children: 'Loading...'\n}; // ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref6) {\n  var rect = _ref6.rect,\n      offset = _ref6.offset,\n      position = _ref6.position;\n  return {\n    left: rect.left,\n    position: position,\n    top: offset,\n    width: rect.width,\n    zIndex: 1\n  };\n};\nvar MenuPortal =\n/*#__PURE__*/\nfunction (_Component2) {\n  _inherits(MenuPortal, _Component2);\n\n  function MenuPortal() {\n    var _getPrototypeOf3;\n\n    var _this2;\n\n    _classCallCheck(this, MenuPortal);\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    _this2 = _possibleConstructorReturn(this, (_getPrototypeOf3 = _getPrototypeOf(MenuPortal)).call.apply(_getPrototypeOf3, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), \"state\", {\n      placement: null\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this2)), \"getPortalPlacement\", function (_ref7) {\n      var placement = _ref7.placement;\n      var initialPlacement = coercePlacement(_this2.props.menuPlacement); // avoid re-renders if the placement has not changed\n\n      if (placement !== initialPlacement) {\n        _this2.setState({\n          placement: placement\n        });\n      }\n    });\n\n    return _this2;\n  }\n\n  _createClass(MenuPortal, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        getPortalPlacement: this.getPortalPlacement\n      };\n    } // callback for occassions where the menu must \"flip\"\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          appendTo = _this$props2.appendTo,\n          children = _this$props2.children,\n          controlElement = _this$props2.controlElement,\n          menuPlacement = _this$props2.menuPlacement,\n          position = _this$props2.menuPosition,\n          getStyles = _this$props2.getStyles;\n      var isFixed = position === 'fixed'; // bail early if required elements aren't present\n\n      if (!appendTo && !isFixed || !controlElement) {\n        return null;\n      }\n\n      var placement = this.state.placement || coercePlacement(menuPlacement);\n      var rect = getBoundingClientObj(controlElement);\n      var scrollDistance = isFixed ? 0 : window.pageYOffset;\n      var offset = rect[placement] + scrollDistance;\n      var state = {\n        offset: offset,\n        position: position,\n        rect: rect\n      }; // same wrapper element whether fixed or portalled\n\n      var menuWrapper = jsx(\"div\", {\n        css: getStyles('menuPortal', state)\n      }, children);\n      return appendTo ? createPortal(menuWrapper, appendTo) : menuWrapper;\n    }\n  }]);\n\n  return MenuPortal;\n}(Component);\n\n_defineProperty(MenuPortal, \"childContextTypes\", {\n  getPortalPlacement: PropTypes.func\n});\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nfunction equal(a, b) {\n  // fast-deep-equal index.js 2.0.1\n  if (a === b) return true;\n\n  if (a && b && _typeof(a) == 'object' && _typeof(b) == 'object') {\n    var arrA = isArray(a),\n        arrB = isArray(b),\n        i,\n        length,\n        key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n\n      for (i = length; i-- !== 0;) {\n        if (!equal(a[i], b[i])) return false;\n      }\n\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n    var dateA = a instanceof Date,\n        dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n    var regexpA = a instanceof RegExp,\n        regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length) {\n      return false;\n    }\n\n    for (i = length; i-- !== 0;) {\n      if (!hasProp.call(b, keys[i])) return false;\n    } // end fast-deep-equal\n    // Custom handling for React\n\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of a react element\n        continue;\n      } else {\n        // all other properties should be traversed as usual\n        if (!equal(a[key], b[key])) return false;\n      }\n    } // fast-deep-equal index.js 2.0.1\n\n\n    return true;\n  }\n\n  return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nfunction exportedEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (error.message && error.message.match(/stack|recursion/i)) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n      return false;\n    } // some other error. we should definitely know about these\n\n\n    throw error;\n  }\n}\n\nvar containerCSS = function containerCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isRtl = _ref.isRtl;\n  return {\n    label: 'container',\n    direction: isRtl ? 'rtl' : null,\n    pointerEvents: isDisabled ? 'none' : null,\n    // cancel mouse events when disabled\n    position: 'relative'\n  };\n};\nvar SelectContainer = function SelectContainer(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      isDisabled = props.isDisabled,\n      isRtl = props.isRtl;\n  return jsx(\"div\", _extends({\n    css: getStyles('container', props),\n    className: cx({\n      '--is-disabled': isDisabled,\n      '--is-rtl': isRtl\n    }, className)\n  }, innerProps), children);\n}; // ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2) {\n  var spacing = _ref2.theme.spacing;\n  return {\n    alignItems: 'center',\n    display: 'flex',\n    flex: 1,\n    flexWrap: 'wrap',\n    padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\"),\n    WebkitOverflowScrolling: 'touch',\n    position: 'relative',\n    overflow: 'hidden'\n  };\n};\nvar ValueContainer =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ValueContainer, _Component);\n\n  function ValueContainer() {\n    _classCallCheck(this, ValueContainer);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(ValueContainer).apply(this, arguments));\n  }\n\n  _createClass(ValueContainer, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          className = _this$props.className,\n          cx = _this$props.cx,\n          isMulti = _this$props.isMulti,\n          getStyles = _this$props.getStyles,\n          hasValue = _this$props.hasValue;\n      return jsx(\"div\", {\n        css: getStyles('valueContainer', this.props),\n        className: cx({\n          'value-container': true,\n          'value-container--is-multi': isMulti,\n          'value-container--has-value': hasValue\n        }, className)\n      }, children);\n    }\n  }]);\n\n  return ValueContainer;\n}(Component); // ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n  return {\n    alignItems: 'center',\n    alignSelf: 'stretch',\n    display: 'flex',\n    flexShrink: 0\n  };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles;\n  return jsx(\"div\", {\n    css: getStyles('indicatorsContainer', props),\n    className: cx({\n      indicators: true\n    }, className)\n  }, children);\n};\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  0%, 80%, 100% { opacity: 0; }\\n  40% { opacity: 1; }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n  name: \"19bqh2r\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;\"\n} : {\n  name: \"19bqh2r\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JJIiwiZmlsZSI6ImluZGljYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyB0eXBlIE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vblByb3BzLCBUaGVtZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHsgc2l6ZSwgLi4ucHJvcHMgfTogeyBzaXplOiBudW1iZXIgfSkgPT4gKFxuICA8c3ZnXG4gICAgaGVpZ2h0PXtzaXplfVxuICAgIHdpZHRoPXtzaXplfVxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIGNzcz17e1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgfX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuXG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTdmcgc2l6ZT17MjB9IHsuLi5wcm9wc30+XG4gICAgPHBhdGggZD1cIk00LjUxNiA3LjU0OGMwLjQzNi0wLjQ0NiAxLjA0My0wLjQ4MSAxLjU3NiAwbDMuOTA4IDMuNzQ3IDMuOTA4LTMuNzQ3YzAuNTMzLTAuNDgxIDEuMTQxLTAuNDQ2IDEuNTc0IDAgMC40MzYgMC40NDUgMC40MDggMS4xOTcgMCAxLjYxNS0wLjQwNiAwLjQxOC00LjY5NSA0LjUwMi00LjY5NSA0LjUwMi0wLjIxNyAwLjIyMy0wLjUwMiAwLjMzNS0wLjc4NyAwLjMzNXMtMC41Ny0wLjExMi0wLjc4OS0wLjMzNWMwIDAtNC4yODctNC4wODQtNC42OTUtNC41MDJzLTAuNDM2LTEuMTcgMC0xLjYxNXpcIiAvPlxuICA8L1N2Zz5cbik7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgSW5kaWNhdG9yUHJvcHMgPSBDb21tb25Qcm9wcyAmIHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW46IE5vZGUsXG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufTtcblxuY29uc3QgYmFzZUNTUyA9ICh7XG4gIGlzRm9jdXNlZCxcbiAgdGhlbWU6IHtcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgY29sb3JzLFxuICB9LFxufTogSW5kaWNhdG9yUHJvcHMpID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcblxuICAnOmhvdmVyJzoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2Ryb3Bkb3duSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnZHJvcGRvd24taW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2NsZWFySW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnY2xlYXItaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG50eXBlIFNlcGFyYXRvclN0YXRlID0geyBpc0Rpc2FibGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSAoe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBDb21tb25Qcm9wcyAmIFNlcGFyYXRvclN0YXRlKSA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gKHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiB7XG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgc2l6ZTogbnVtYmVyLFxuICB0aGVtZTogVGhlbWUsXG59KSA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxufSk7XG5cbnR5cGUgRG90UHJvcHMgPSB7IGNvbG9yOiBzdHJpbmcsIGRlbGF5OiBudW1iZXIsIG9mZnNldDogYm9vbGVhbiB9O1xuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGNvbG9yLCBkZWxheSwgb2Zmc2V0IH06IERvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtOycsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrOycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtOycgOiBudWxsLFxuICAgICAgaGVpZ2h0OiAnMWVtOycsXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wOycsXG4gICAgICB3aWR0aDogJzFlbTsnLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nSWNvblByb3BzID0ge1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IGFueSxcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgLyoqIFdoZXRoZXIgdGhlIHRleHQgaXMgcmlnaHQgdG8gbGVmdCAqL1xuICBpc1J0bDogYm9vbGVhbixcbn0gJiBDb21tb25Qcm9wcyAmIHtcbiAgICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgICBzaXplOiBudW1iZXIsXG4gIH07XG5leHBvcnQgY29uc3QgTG9hZGluZ0luZGljYXRvciA9IChwcm9wczogTG9hZGluZ0ljb25Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGN4LFxuICAgIGdldFN0eWxlcyxcbiAgICBpbm5lclByb3BzLFxuICAgIGlzRm9jdXNlZCxcbiAgICBpc1J0bCxcbiAgICB0aGVtZTogeyBjb2xvcnMgfSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDIwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgICBjc3M9e2dldFN0eWxlcygnbG9hZGluZ0luZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGNvbG9yPXtjb2xvcn0gZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBjb2xvcj17Y29sb3J9IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgY29sb3I9e2NvbG9yfSBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\"\n};\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar Svg = function Svg(_ref) {\n  var size = _ref.size,\n      props = _objectWithoutProperties(_ref, [\"size\"]);\n\n  return jsx(\"svg\", _extends({\n    height: size,\n    width: size,\n    viewBox: \"0 0 20 20\",\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    css: _ref2\n  }, props));\n};\n\nvar CrossIcon = function CrossIcon(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n  }));\n};\nvar DownChevron = function DownChevron(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n  }));\n}; // ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3) {\n  var isFocused = _ref3.isFocused,\n      _ref3$theme = _ref3.theme,\n      baseUnit = _ref3$theme.spacing.baseUnit,\n      colors = _ref3$theme.colors;\n  return {\n    label: 'indicatorContainer',\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    display: 'flex',\n    padding: baseUnit * 2,\n    transition: 'color 150ms',\n    ':hover': {\n      color: isFocused ? colors.neutral80 : colors.neutral40\n    }\n  };\n};\n\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, innerProps, {\n    css: getStyles('dropdownIndicator', props),\n    className: cx({\n      indicator: true,\n      'dropdown-indicator': true\n    }, className)\n  }), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({}, innerProps, {\n    css: getStyles('clearIndicator', props),\n    className: cx({\n      indicator: true,\n      'clear-indicator': true\n    }, className)\n  }), children || jsx(CrossIcon, null));\n}; // ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4) {\n  var isDisabled = _ref4.isDisabled,\n      _ref4$theme = _ref4.theme,\n      baseUnit = _ref4$theme.spacing.baseUnit,\n      colors = _ref4$theme.colors;\n  return {\n    label: 'indicatorSeparator',\n    alignSelf: 'stretch',\n    backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n    marginBottom: baseUnit * 2,\n    marginTop: baseUnit * 2,\n    width: 1\n  };\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"span\", _extends({}, innerProps, {\n    css: getStyles('indicatorSeparator', props),\n    className: cx({\n      'indicator-separator': true\n    }, className)\n  }));\n}; // ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject());\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5) {\n  var isFocused = _ref5.isFocused,\n      size = _ref5.size,\n      _ref5$theme = _ref5.theme,\n      colors = _ref5$theme.colors,\n      baseUnit = _ref5$theme.spacing.baseUnit;\n  return {\n    label: 'loadingIndicator',\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    display: 'flex',\n    padding: baseUnit * 2,\n    transition: 'color 150ms',\n    alignSelf: 'center',\n    fontSize: size,\n    lineHeight: 1,\n    marginRight: size,\n    textAlign: 'center',\n    verticalAlign: 'middle'\n  };\n};\n\nvar LoadingDot = function LoadingDot(_ref6) {\n  var color = _ref6.color,\n      delay = _ref6.delay,\n      offset = _ref6.offset;\n  return jsx(\"span\", {\n    css:\n    /*#__PURE__*/\n    _css({\n      animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n      backgroundColor: color,\n      borderRadius: '1em;',\n      display: 'inline-block;',\n      marginLeft: offset ? '1em;' : null,\n      height: '1em;',\n      verticalAlign: 'top;',\n      width: '1em;'\n    }, process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0xJIiwiZmlsZSI6ImluZGljYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuLyoqIEBqc3gganN4ICovXG5pbXBvcnQgeyB0eXBlIE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vblByb3BzLCBUaGVtZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biAmIENsZWFyIEljb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgU3ZnID0gKHsgc2l6ZSwgLi4ucHJvcHMgfTogeyBzaXplOiBudW1iZXIgfSkgPT4gKFxuICA8c3ZnXG4gICAgaGVpZ2h0PXtzaXplfVxuICAgIHdpZHRoPXtzaXplfVxuICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgIGNzcz17e1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBmaWxsOiAnY3VycmVudENvbG9yJyxcbiAgICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgfX1cbiAgICB7Li4ucHJvcHN9XG4gIC8+XG4pO1xuXG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBhbnkpID0+IChcbiAgPFN2ZyBzaXplPXsyMH0gey4uLnByb3BzfT5cbiAgICA8cGF0aCBkPVwiTTE0LjM0OCAxNC44NDljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDBsLTIuNjUxLTMuMDMwLTIuNjUxIDMuMDI5Yy0wLjQ2OSAwLjQ2OS0xLjIyOSAwLjQ2OS0xLjY5NyAwLTAuNDY5LTAuNDY5LTAuNDY5LTEuMjI5IDAtMS42OTdsMi43NTgtMy4xNS0yLjc1OS0zLjE1MmMtMC40NjktMC40NjktMC40NjktMS4yMjggMC0xLjY5N3MxLjIyOC0wLjQ2OSAxLjY5NyAwbDIuNjUyIDMuMDMxIDIuNjUxLTMuMDMxYzAuNDY5LTAuNDY5IDEuMjI4LTAuNDY5IDEuNjk3IDBzMC40NjkgMS4yMjkgMCAxLjY5N2wtMi43NTggMy4xNTIgMi43NTggMy4xNWMwLjQ2OSAwLjQ2OSAwLjQ2OSAxLjIyOSAwIDEuNjk4elwiIC8+XG4gIDwvU3ZnPlxuKTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogYW55KSA9PiAoXG4gIDxTdmcgc2l6ZT17MjB9IHsuLi5wcm9wc30+XG4gICAgPHBhdGggZD1cIk00LjUxNiA3LjU0OGMwLjQzNi0wLjQ0NiAxLjA0My0wLjQ4MSAxLjU3NiAwbDMuOTA4IDMuNzQ3IDMuOTA4LTMuNzQ3YzAuNTMzLTAuNDgxIDEuMTQxLTAuNDQ2IDEuNTc0IDAgMC40MzYgMC40NDUgMC40MDggMS4xOTcgMCAxLjYxNS0wLjQwNiAwLjQxOC00LjY5NSA0LjUwMi00LjY5NSA0LjUwMi0wLjIxNyAwLjIyMy0wLjUwMiAwLjMzNS0wLjc4NyAwLjMzNXMtMC41Ny0wLjExMi0wLjc4OS0wLjMzNWMwIDAtNC4yODctNC4wODQtNC42OTUtNC41MDJzLTAuNDM2LTEuMTcgMC0xLjYxNXpcIiAvPlxuICA8L1N2Zz5cbik7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRHJvcGRvd24gJiBDbGVhciBCdXR0b25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IHR5cGUgSW5kaWNhdG9yUHJvcHMgPSBDb21tb25Qcm9wcyAmIHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW46IE5vZGUsXG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogYW55LFxuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuLFxuICAvKiogV2hldGhlciB0aGUgdGV4dCBpcyByaWdodCB0byBsZWZ0ICovXG4gIGlzUnRsOiBib29sZWFuLFxufTtcblxuY29uc3QgYmFzZUNTUyA9ICh7XG4gIGlzRm9jdXNlZCxcbiAgdGhlbWU6IHtcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gICAgY29sb3JzLFxuICB9LFxufTogSW5kaWNhdG9yUHJvcHMpID0+ICh7XG4gIGxhYmVsOiAnaW5kaWNhdG9yQ29udGFpbmVyJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcblxuICAnOmhvdmVyJzoge1xuICAgIGNvbG9yOiBpc0ZvY3VzZWQgPyBjb2xvcnMubmV1dHJhbDgwIDogY29sb3JzLm5ldXRyYWw0MCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZHJvcGRvd25JbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duSW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2Ryb3Bkb3duSW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnZHJvcGRvd24taW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8RG93bkNoZXZyb24gLz59XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJJbmRpY2F0b3JDU1MgPSBiYXNlQ1NTO1xuZXhwb3J0IGNvbnN0IENsZWFySW5kaWNhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2NsZWFySW5kaWNhdG9yJywgcHJvcHMpfVxuICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAge1xuICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgICAgICAnY2xlYXItaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG50eXBlIFNlcGFyYXRvclN0YXRlID0geyBpc0Rpc2FibGVkOiBib29sZWFuIH07XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSAoe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBDb21tb25Qcm9wcyAmIFNlcGFyYXRvclN0YXRlKSA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gKHByb3BzOiBJbmRpY2F0b3JQcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gKHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiB7XG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgc2l6ZTogbnVtYmVyLFxuICB0aGVtZTogVGhlbWUsXG59KSA9PiAoe1xuICBsYWJlbDogJ2xvYWRpbmdJbmRpY2F0b3InLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICBmb250U2l6ZTogc2l6ZSxcbiAgbGluZUhlaWdodDogMSxcbiAgbWFyZ2luUmlnaHQ6IHNpemUsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxufSk7XG5cbnR5cGUgRG90UHJvcHMgPSB7IGNvbG9yOiBzdHJpbmcsIGRlbGF5OiBudW1iZXIsIG9mZnNldDogYm9vbGVhbiB9O1xuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGNvbG9yLCBkZWxheSwgb2Zmc2V0IH06IERvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtOycsXG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrOycsXG4gICAgICBtYXJnaW5MZWZ0OiBvZmZzZXQgPyAnMWVtOycgOiBudWxsLFxuICAgICAgaGVpZ2h0OiAnMWVtOycsXG4gICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wOycsXG4gICAgICB3aWR0aDogJzFlbTsnLFxuICAgIH19XG4gIC8+XG4pO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nSWNvblByb3BzID0ge1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IGFueSxcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbixcbiAgLyoqIFdoZXRoZXIgdGhlIHRleHQgaXMgcmlnaHQgdG8gbGVmdCAqL1xuICBpc1J0bDogYm9vbGVhbixcbn0gJiBDb21tb25Qcm9wcyAmIHtcbiAgICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgICBzaXplOiBudW1iZXIsXG4gIH07XG5leHBvcnQgY29uc3QgTG9hZGluZ0luZGljYXRvciA9IChwcm9wczogTG9hZGluZ0ljb25Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGN4LFxuICAgIGdldFN0eWxlcyxcbiAgICBpbm5lclByb3BzLFxuICAgIGlzRm9jdXNlZCxcbiAgICBpc1J0bCxcbiAgICB0aGVtZTogeyBjb2xvcnMgfSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBjb2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDIwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgICBjc3M9e2dldFN0eWxlcygnbG9hZGluZ0luZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2xvYWRpbmctaW5kaWNhdG9yJzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGNvbG9yPXtjb2xvcn0gZGVsYXk9ezB9IG9mZnNldD17aXNSdGx9IC8+XG4gICAgICA8TG9hZGluZ0RvdCBjb2xvcj17Y29sb3J9IGRlbGF5PXsxNjB9IG9mZnNldCAvPlxuICAgICAgPExvYWRpbmdEb3QgY29sb3I9e2NvbG9yfSBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\")\n  });\n};\n\nvar LoadingIndicator = function LoadingIndicator(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      isFocused = props.isFocused,\n      isRtl = props.isRtl,\n      colors = props.theme.colors;\n  var color = isFocused ? colors.neutral80 : colors.neutral20;\n  return jsx(\"div\", _extends({}, innerProps, {\n    css: getStyles('loadingIndicator', props),\n    className: cx({\n      indicator: true,\n      'loading-indicator': true\n    }, className)\n  }), jsx(LoadingDot, {\n    color: color,\n    delay: 0,\n    offset: isRtl\n  }), jsx(LoadingDot, {\n    color: color,\n    delay: 160,\n    offset: true\n  }), jsx(LoadingDot, {\n    color: color,\n    delay: 320,\n    offset: !isRtl\n  }));\n};\nLoadingIndicator.defaultProps = {\n  size: 4\n};\n\nvar css = function css(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isFocused = _ref.isFocused,\n      _ref$theme = _ref.theme,\n      colors = _ref$theme.colors,\n      borderRadius = _ref$theme.borderRadius,\n      spacing = _ref$theme.spacing;\n  return {\n    label: 'control',\n    alignItems: 'center',\n    backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n    borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n    borderRadius: borderRadius,\n    borderStyle: 'solid',\n    borderWidth: 1,\n    boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : null,\n    cursor: 'default',\n    display: 'flex',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    minHeight: spacing.controlHeight,\n    outline: '0 !important',\n    position: 'relative',\n    transition: 'all 100ms',\n    '&:hover': {\n      borderColor: isFocused ? colors.primary : colors.neutral30\n    }\n  };\n};\n\nvar Control = function Control(props) {\n  var children = props.children,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      className = props.className,\n      isDisabled = props.isDisabled,\n      isFocused = props.isFocused,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps,\n      menuIsOpen = props.menuIsOpen;\n  return jsx(\"div\", _extends({\n    ref: innerRef,\n    css: getStyles('control', props),\n    className: cx({\n      control: true,\n      'control--is-disabled': isDisabled,\n      'control--is-focused': isFocused,\n      'control--menu-is-open': menuIsOpen\n    }, className)\n  }, innerProps), children);\n};\n\nvar groupCSS = function groupCSS(_ref) {\n  var spacing = _ref.theme.spacing;\n  return {\n    paddingBottom: spacing.baseUnit * 2,\n    paddingTop: spacing.baseUnit * 2\n  };\n};\n\nvar Group = function Group(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      Heading = props.Heading,\n      headingProps = props.headingProps,\n      label = props.label,\n      theme = props.theme,\n      selectProps = props.selectProps;\n  return jsx(\"div\", {\n    css: getStyles('group', props),\n    className: cx({\n      group: true\n    }, className)\n  }, jsx(Heading, _extends({}, headingProps, {\n    selectProps: selectProps,\n    theme: theme,\n    getStyles: getStyles,\n    cx: cx\n  }), label), jsx(\"div\", null, children));\n};\n\nvar groupHeadingCSS = function groupHeadingCSS(_ref2) {\n  var spacing = _ref2.theme.spacing;\n  return {\n    label: 'group',\n    color: '#999',\n    cursor: 'default',\n    display: 'block',\n    fontSize: '75%',\n    fontWeight: '500',\n    marginBottom: '0.25em',\n    paddingLeft: spacing.baseUnit * 3,\n    paddingRight: spacing.baseUnit * 3,\n    textTransform: 'uppercase'\n  };\n};\nvar GroupHeading = function GroupHeading(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      theme = props.theme,\n      selectProps = props.selectProps,\n      cleanProps = _objectWithoutProperties(props, [\"className\", \"cx\", \"getStyles\", \"theme\", \"selectProps\"]);\n\n  return jsx(\"div\", _extends({\n    css: getStyles('groupHeading', _objectSpread({\n      theme: theme\n    }, cleanProps)),\n    className: cx({\n      'group-heading': true\n    }, className)\n  }, cleanProps));\n};\n\nvar inputCSS = function inputCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    margin: spacing.baseUnit / 2,\n    paddingBottom: spacing.baseUnit / 2,\n    paddingTop: spacing.baseUnit / 2,\n    visibility: isDisabled ? 'hidden' : 'visible',\n    color: colors.neutral80\n  };\n};\n\nvar inputStyle = function inputStyle(isHidden) {\n  return {\n    label: 'input',\n    background: 0,\n    border: 0,\n    fontSize: 'inherit',\n    opacity: isHidden ? 0 : 1,\n    outline: 0,\n    padding: 0,\n    color: 'inherit'\n  };\n};\n\nvar Input = function Input(_ref2) {\n  var className = _ref2.className,\n      cx = _ref2.cx,\n      getStyles = _ref2.getStyles,\n      innerRef = _ref2.innerRef,\n      isHidden = _ref2.isHidden,\n      isDisabled = _ref2.isDisabled,\n      theme = _ref2.theme,\n      selectProps = _ref2.selectProps,\n      props = _objectWithoutProperties(_ref2, [\"className\", \"cx\", \"getStyles\", \"innerRef\", \"isHidden\", \"isDisabled\", \"theme\", \"selectProps\"]);\n\n  return jsx(\"div\", {\n    css: getStyles('input', _objectSpread({\n      theme: theme\n    }, props))\n  }, jsx(AutosizeInput, _extends({\n    className: cx({\n      input: true\n    }, className),\n    inputRef: innerRef,\n    inputStyle: inputStyle(isHidden),\n    disabled: isDisabled\n  }, props)));\n};\n\nvar multiValueCSS = function multiValueCSS(_ref) {\n  var _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      borderRadius = _ref$theme.borderRadius,\n      colors = _ref$theme.colors;\n  return {\n    label: 'multiValue',\n    backgroundColor: colors.neutral10,\n    borderRadius: borderRadius / 2,\n    display: 'flex',\n    margin: spacing.baseUnit / 2,\n    minWidth: 0 // resolves flex/text-overflow bug\n\n  };\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2) {\n  var _ref2$theme = _ref2.theme,\n      borderRadius = _ref2$theme.borderRadius,\n      colors = _ref2$theme.colors,\n      cropWithEllipsis = _ref2.cropWithEllipsis;\n  return {\n    borderRadius: borderRadius / 2,\n    color: colors.neutral80,\n    fontSize: '85%',\n    overflow: 'hidden',\n    padding: 3,\n    paddingLeft: 6,\n    textOverflow: cropWithEllipsis ? 'ellipsis' : null,\n    whiteSpace: 'nowrap'\n  };\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3) {\n  var _ref3$theme = _ref3.theme,\n      spacing = _ref3$theme.spacing,\n      borderRadius = _ref3$theme.borderRadius,\n      colors = _ref3$theme.colors,\n      isFocused = _ref3.isFocused;\n  return {\n    alignItems: 'center',\n    borderRadius: borderRadius / 2,\n    backgroundColor: isFocused && colors.dangerLight,\n    display: 'flex',\n    paddingLeft: spacing.baseUnit,\n    paddingRight: spacing.baseUnit,\n    ':hover': {\n      backgroundColor: colors.dangerLight,\n      color: colors.danger\n    }\n  };\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n  var children = _ref4.children,\n      innerProps = _ref4.innerProps;\n  return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nvar MultiValueRemove =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(MultiValueRemove, _Component);\n\n  function MultiValueRemove() {\n    _classCallCheck(this, MultiValueRemove);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(MultiValueRemove).apply(this, arguments));\n  }\n\n  _createClass(MultiValueRemove, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          innerProps = _this$props.innerProps;\n      return jsx(\"div\", innerProps, children || jsx(CrossIcon, {\n        size: 14\n      }));\n    }\n  }]);\n\n  return MultiValueRemove;\n}(Component);\n\nvar MultiValue =\n/*#__PURE__*/\nfunction (_Component2) {\n  _inherits(MultiValue, _Component2);\n\n  function MultiValue() {\n    _classCallCheck(this, MultiValue);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(MultiValue).apply(this, arguments));\n  }\n\n  _createClass(MultiValue, [{\n    key: \"render\",\n    value: function render() {\n      var _this = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          className = _this$props2.className,\n          components = _this$props2.components,\n          cx = _this$props2.cx,\n          data = _this$props2.data,\n          getStyles = _this$props2.getStyles,\n          innerProps = _this$props2.innerProps,\n          isDisabled = _this$props2.isDisabled,\n          removeProps = _this$props2.removeProps,\n          selectProps = _this$props2.selectProps;\n      var Container = components.Container,\n          Label = components.Label,\n          Remove = components.Remove;\n      return jsx(ClassNames, null, function (_ref5) {\n        var css = _ref5.css,\n            emotionCx = _ref5.cx;\n        return jsx(Container, {\n          data: data,\n          innerProps: _objectSpread({}, innerProps, {\n            className: emotionCx(css(getStyles('multiValue', _this.props)), cx({\n              'multi-value': true,\n              'multi-value--is-disabled': isDisabled\n            }, className))\n          }),\n          selectProps: selectProps\n        }, jsx(Label, {\n          data: data,\n          innerProps: {\n            className: emotionCx(css(getStyles('multiValueLabel', _this.props)), cx({\n              'multi-value__label': true\n            }, className))\n          },\n          selectProps: selectProps\n        }, children), jsx(Remove, {\n          data: data,\n          innerProps: _objectSpread({\n            className: emotionCx(css(getStyles('multiValueRemove', _this.props)), cx({\n              'multi-value__remove': true\n            }, className))\n          }, removeProps),\n          selectProps: selectProps\n        }));\n      });\n    }\n  }]);\n\n  return MultiValue;\n}(Component);\n\n_defineProperty(MultiValue, \"defaultProps\", {\n  cropWithEllipsis: true\n});\n\nvar optionCSS = function optionCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isFocused = _ref.isFocused,\n      isSelected = _ref.isSelected,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'option',\n    backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n    color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n    cursor: 'default',\n    display: 'block',\n    fontSize: 'inherit',\n    padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n    width: '100%',\n    userSelect: 'none',\n    WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',\n    // provide some affordance on touch devices\n    ':active': {\n      backgroundColor: !isDisabled && (isSelected ? colors.primary : colors.primary50)\n    }\n  };\n};\n\nvar Option = function Option(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      isDisabled = props.isDisabled,\n      isFocused = props.isFocused,\n      isSelected = props.isSelected,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('option', props),\n    className: cx({\n      option: true,\n      'option--is-disabled': isDisabled,\n      'option--is-focused': isFocused,\n      'option--is-selected': isSelected\n    }, className),\n    ref: innerRef\n  }, innerProps), children);\n};\n\nvar placeholderCSS = function placeholderCSS(_ref) {\n  var _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'placeholder',\n    color: colors.neutral50,\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2,\n    position: 'absolute',\n    top: '50%',\n    transform: 'translateY(-50%)'\n  };\n};\n\nvar Placeholder = function Placeholder(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('placeholder', props),\n    className: cx({\n      placeholder: true\n    }, className)\n  }, innerProps), children);\n};\n\nvar css$1 = function css(_ref) {\n  var isDisabled = _ref.isDisabled,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'singleValue',\n    color: isDisabled ? colors.neutral40 : colors.neutral80,\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2,\n    maxWidth: \"calc(100% - \".concat(spacing.baseUnit * 2, \"px)\"),\n    overflow: 'hidden',\n    position: 'absolute',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    top: '50%',\n    transform: 'translateY(-50%)'\n  };\n};\n\nvar SingleValue = function SingleValue(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      isDisabled = props.isDisabled,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('singleValue', props),\n    className: cx({\n      'single-value': true,\n      'single-value--is-disabled': isDisabled\n    }, className)\n  }, innerProps), children);\n};\n\nvar components = {\n  ClearIndicator: ClearIndicator,\n  Control: Control,\n  DropdownIndicator: DropdownIndicator,\n  DownChevron: DownChevron,\n  CrossIcon: CrossIcon,\n  Group: Group,\n  GroupHeading: GroupHeading,\n  IndicatorsContainer: IndicatorsContainer,\n  IndicatorSeparator: IndicatorSeparator,\n  Input: Input,\n  LoadingIndicator: LoadingIndicator,\n  Menu: Menu,\n  MenuList: MenuList,\n  MenuPortal: MenuPortal,\n  LoadingMessage: LoadingMessage,\n  NoOptionsMessage: NoOptionsMessage,\n  MultiValue: MultiValue,\n  MultiValueContainer: MultiValueContainer,\n  MultiValueLabel: MultiValueLabel,\n  MultiValueRemove: MultiValueRemove,\n  Option: Option,\n  Placeholder: Placeholder,\n  SelectContainer: SelectContainer,\n  SingleValue: SingleValue,\n  ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n  return _objectSpread({}, components, props.components);\n};\n\nexport { MenuPlacer as M, containerCSS as a, css as b, clearIndicatorCSS as c, dropdownIndicatorCSS as d, groupHeadingCSS as e, indicatorSeparatorCSS as f, groupCSS as g, inputCSS as h, indicatorsContainerCSS as i, loadingMessageCSS as j, menuListCSS as k, loadingIndicatorCSS as l, menuCSS as m, menuPortalCSS as n, multiValueCSS as o, multiValueLabelCSS as p, multiValueRemoveCSS as q, noOptionsMessageCSS as r, optionCSS as s, placeholderCSS as t, css$1 as u, valueContainerCSS as v, defaultComponents as w, exportedEqual as x, components as y };\n","export var prefix = '@@redux-form/';\nexport var ARRAY_INSERT = prefix + \"ARRAY_INSERT\";\nexport var ARRAY_MOVE = prefix + \"ARRAY_MOVE\";\nexport var ARRAY_POP = prefix + \"ARRAY_POP\";\nexport var ARRAY_PUSH = prefix + \"ARRAY_PUSH\";\nexport var ARRAY_REMOVE = prefix + \"ARRAY_REMOVE\";\nexport var ARRAY_REMOVE_ALL = prefix + \"ARRAY_REMOVE_ALL\";\nexport var ARRAY_SHIFT = prefix + \"ARRAY_SHIFT\";\nexport var ARRAY_SPLICE = prefix + \"ARRAY_SPLICE\";\nexport var ARRAY_UNSHIFT = prefix + \"ARRAY_UNSHIFT\";\nexport var ARRAY_SWAP = prefix + \"ARRAY_SWAP\";\nexport var AUTOFILL = prefix + \"AUTOFILL\";\nexport var BLUR = prefix + \"BLUR\";\nexport var CHANGE = prefix + \"CHANGE\";\nexport var CLEAR_FIELDS = prefix + \"CLEAR_FIELDS\";\nexport var CLEAR_SUBMIT = prefix + \"CLEAR_SUBMIT\";\nexport var CLEAR_SUBMIT_ERRORS = prefix + \"CLEAR_SUBMIT_ERRORS\";\nexport var CLEAR_ASYNC_ERROR = prefix + \"CLEAR_ASYNC_ERROR\";\nexport var DESTROY = prefix + \"DESTROY\";\nexport var FOCUS = prefix + \"FOCUS\";\nexport var INITIALIZE = prefix + \"INITIALIZE\";\nexport var REGISTER_FIELD = prefix + \"REGISTER_FIELD\";\nexport var RESET = prefix + \"RESET\";\nexport var RESET_SECTION = prefix + \"RESET_SECTION\";\nexport var SET_SUBMIT_FAILED = prefix + \"SET_SUBMIT_FAILED\";\nexport var SET_SUBMIT_SUCCEEDED = prefix + \"SET_SUBMIT_SUCCEEDED\";\nexport var START_ASYNC_VALIDATION = prefix + \"START_ASYNC_VALIDATION\";\nexport var START_SUBMIT = prefix + \"START_SUBMIT\";\nexport var STOP_ASYNC_VALIDATION = prefix + \"STOP_ASYNC_VALIDATION\";\nexport var STOP_SUBMIT = prefix + \"STOP_SUBMIT\";\nexport var SUBMIT = prefix + \"SUBMIT\";\nexport var TOUCH = prefix + \"TOUCH\";\nexport var UNREGISTER_FIELD = prefix + \"UNREGISTER_FIELD\";\nexport var UNTOUCH = prefix + \"UNTOUCH\";\nexport var UPDATE_SYNC_ERRORS = prefix + \"UPDATE_SYNC_ERRORS\";\nexport var UPDATE_SYNC_WARNINGS = prefix + \"UPDATE_SYNC_WARNINGS\";","import styled from 'styled-components';\nimport styleUtils from '../../../style';\n\nexport interface IBackgroundImageProps extends React.CSSProperties {\n  cover?: boolean;\n  src?: string;\n  aspectRatio?: string;\n  backgroundStyle?: React.CSSProperties;\n}\n// TODO: Fix types here, for some reasons, IBackgroundImageProps doesn't restrain props types here\nexport const BackgroundImage = styled.div.attrs<IBackgroundImageProps>(({ cover, src, aspectRatio, backgroundStyle, ...rest }) => ({\n  style: {\n    backgroundSize: cover ? 'cover' : 'contain',\n    backgroundImage: `url(${src})`,\n    ...(\n      aspectRatio\n      ? {\n        height: 0,\n        paddingBottom: aspectRatio,\n      }\n      : {\n        flex: '1 0 auto',\n      }\n    ),\n    ...backgroundStyle,\n    ...rest,\n  }\n}))`\n  background-position: center center;\n  background-repeat: no-repeat;\n\n\n  ${\n    ['xs-max', 'sm-max', 'md-max', 'lg-max', 'xl-max'].map((mq) => styleUtils.media[mq]`\n      ${(props) => props[mq] && props[mq].aspectRatio &&\n        `\n          padding-bottom: ${props[mq].aspectRatio};\n        `\n      }\n      ${(props) => props[mq] && props[mq].src && (\n          props[mq].src.indexOf('data:') !== -1 ?\n          `\n            background-image: url(${props[mq].src});\n          ` :\n          `\n            background-image: url(${props[mq].src});\n          `\n        )\n      }\n      ${(props) => props[mq] && (props[mq].cover ?\n        `\n          background-size: cover;\n        ` :\n        `\n          background-size: contain;\n        `)\n      }\n    `)\n  }\n`;\n\nexport default BackgroundImage;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { makeSelectAtsApiState } from '../../../modules/ApplicationModule/selectors';\nimport { IImageComponentProps } from '../index';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport BackgroundImage from '../BackgroundImage';\nimport { getImageFileUrl } from '../../../utils/imageFileUrl';\n\ntype AsyncImageProps = Omit<IImageComponentProps, 'fromService'>;\n\nconst AsyncImage: React.FC<AsyncImageProps> = ({\n  src,\n  cover,\n  aspectRatio,\n  backgroundStyle\n}) => {\n  const envLoaded: boolean = useSelector(makeSelectAtsApiState('envLoaded'));\n  const atsApi = useAtsApi();\n  const imageURL: string = envLoaded ? getImageFileUrl(atsApi, src) : '';\n\n  return (\n    <BackgroundImage\n      src={imageURL}\n      cover={cover}\n      aspectRatio={aspectRatio}\n      backgroundStyle={backgroundStyle}\n    />\n  );\n};\n\nexport default AsyncImage;\n","import React from 'react';\nimport BackgroundImage, { IBackgroundImageProps } from '../BackgroundImage';\n\ninterface ILocalImageProps {\n  src;\n  cover;\n  aspectRatio;\n  backgroundStyle?: IBackgroundImageProps;\n}\nconst LocalImage: React.FC<ILocalImageProps> = ({\n  src,\n  cover,\n  aspectRatio,\n  backgroundStyle\n}) => {\n  return (\n    <BackgroundImage\n      src={src}\n      cover={cover}\n      aspectRatio={aspectRatio}\n      {\n        ...backgroundStyle\n      }\n    />\n  );\n};\n\nexport default LocalImage;\n","import { IImageComponentProps } from '../index';\nimport styled from 'styled-components';\n\ntype ImageContainersProps = Pick<IImageComponentProps, 'width'| 'margin'| 'align' | 'aspectRatio'>;\nconst ImageContainer = styled.div`\n  width: ${(imageContainerProps: ImageContainersProps) => imageContainerProps.width || '100%'};\n  margin: ${(imageContainerProps: ImageContainersProps) => imageContainerProps.margin || '0 auto'};\n  ${(imageContainerProps: ImageContainersProps) => imageContainerProps.align === 'left' && 'margin-left: 0'}\n  ${(imageContainerProps: ImageContainersProps) => imageContainerProps.align === 'right' && 'margin-right: 0'}\n  ${(imageContainerProps: ImageContainersProps) => imageContainerProps.aspectRatio ? ` ` :\n          `\n          flex: 1 0 auto;\n          display: flex;\n          flex-flow: column nowrap;\n      `}\n`;\n\nexport default ImageContainer;\n","/**\n *\n * Image.js\n *\n * Renders an image, enforcing the usage of the alt=\"\" tag\n */\n\nimport React from 'react';\nimport { IBackgroundImageProps } from './BackgroundImage';\nimport AsyncImage from './AsyncImage';\nimport LocalImage from './LocalImage';\n\nimport ImageContainer from './ImageContainer';\n\n// We require the use of src and alt, only enforced by react in dev mode\nexport interface IImageComponentProps extends React.HTMLAttributes<HTMLDivElement> {\n  src: string;\n  backgroundStyle?: IBackgroundImageProps;\n  cover?: boolean;\n  aspectRatio?: string;\n  width?: any;\n  align?: string;\n  fromService?: boolean;\n  margin?: string;\n}\n\nconst Image: React.FC<IImageComponentProps> = ({\n  aspectRatio,\n  width,\n  margin,\n  cover,\n  backgroundStyle,\n  fromService,\n  src,\n  align,\n  ...rest\n}) => {\n\n  return (\n    <ImageContainer {...{width, aspectRatio, margin, align}}  {...rest}>\n      {\n        fromService ?\n          <AsyncImage\n            src={src}\n            cover={cover}\n            aspectRatio={aspectRatio}\n            backgroundStyle={backgroundStyle}\n          />\n          :\n          <LocalImage\n            src={src}\n            cover={cover}\n            aspectRatio={aspectRatio}\n            backgroundStyle={backgroundStyle}\n          />\n      }\n    </ImageContainer>\n  );\n};\n\nexport default Image;\n","import { __extends } from \"tslib\";\nimport PDFObject from \"./PDFObject\";\nimport CharCodes from \"../syntax/CharCodes\";\nimport { copyStringIntoBuffer, padStart, utf16Decode, pdfDocEncodingDecode, toCharCode, parseDate, hasUtf16BOM, } from \"../../utils\";\nimport { InvalidPDFDateStringError } from \"../errors\";\nvar PDFString = /** @class */ (function (_super) {\n    __extends(PDFString, _super);\n    function PDFString(value) {\n        var _this = _super.call(this) || this;\n        _this.value = value;\n        return _this;\n    }\n    PDFString.prototype.asBytes = function () {\n        var bytes = [];\n        var octal = '';\n        var escaped = false;\n        var pushByte = function (byte) {\n            if (byte !== undefined)\n                bytes.push(byte);\n            escaped = false;\n        };\n        for (var idx = 0, len = this.value.length; idx < len; idx++) {\n            var char = this.value[idx];\n            var byte = toCharCode(char);\n            var nextChar = this.value[idx + 1];\n            if (!escaped) {\n                if (byte === CharCodes.BackSlash)\n                    escaped = true;\n                else\n                    pushByte(byte);\n            }\n            else {\n                if (byte === CharCodes.Newline)\n                    pushByte();\n                else if (byte === CharCodes.CarriageReturn)\n                    pushByte();\n                else if (byte === CharCodes.n)\n                    pushByte(CharCodes.Newline);\n                else if (byte === CharCodes.r)\n                    pushByte(CharCodes.CarriageReturn);\n                else if (byte === CharCodes.t)\n                    pushByte(CharCodes.Tab);\n                else if (byte === CharCodes.b)\n                    pushByte(CharCodes.Backspace);\n                else if (byte === CharCodes.f)\n                    pushByte(CharCodes.FormFeed);\n                else if (byte === CharCodes.LeftParen)\n                    pushByte(CharCodes.LeftParen);\n                else if (byte === CharCodes.RightParen)\n                    pushByte(CharCodes.RightParen);\n                else if (byte === CharCodes.Backspace)\n                    pushByte(CharCodes.BackSlash);\n                else if (byte >= CharCodes.Zero && byte <= CharCodes.Seven) {\n                    octal += char;\n                    if (octal.length === 3 || !(nextChar >= '0' && nextChar <= '7')) {\n                        pushByte(parseInt(octal, 8));\n                        octal = '';\n                    }\n                }\n                else {\n                    pushByte(byte);\n                }\n            }\n        }\n        return new Uint8Array(bytes);\n    };\n    PDFString.prototype.decodeText = function () {\n        var bytes = this.asBytes();\n        if (hasUtf16BOM(bytes))\n            return utf16Decode(bytes);\n        return pdfDocEncodingDecode(bytes);\n    };\n    PDFString.prototype.decodeDate = function () {\n        var text = this.decodeText();\n        var date = parseDate(text);\n        if (!date)\n            throw new InvalidPDFDateStringError(text);\n        return date;\n    };\n    PDFString.prototype.asString = function () {\n        return this.value;\n    };\n    PDFString.prototype.clone = function () {\n        return PDFString.of(this.value);\n    };\n    PDFString.prototype.toString = function () {\n        return \"(\" + this.value + \")\";\n    };\n    PDFString.prototype.sizeInBytes = function () {\n        return this.value.length + 2;\n    };\n    PDFString.prototype.copyBytesInto = function (buffer, offset) {\n        buffer[offset++] = CharCodes.LeftParen;\n        offset += copyStringIntoBuffer(this.value, buffer, offset);\n        buffer[offset++] = CharCodes.RightParen;\n        return this.value.length + 2;\n    };\n    // The PDF spec allows newlines and parens to appear directly within a literal\n    // string. These character _may_ be escaped. But they do not _have_ to be. So\n    // for simplicity, we will not bother escaping them.\n    PDFString.of = function (value) { return new PDFString(value); };\n    PDFString.fromDate = function (date) {\n        var year = padStart(String(date.getUTCFullYear()), 4, '0');\n        var month = padStart(String(date.getUTCMonth() + 1), 2, '0');\n        var day = padStart(String(date.getUTCDate()), 2, '0');\n        var hours = padStart(String(date.getUTCHours()), 2, '0');\n        var mins = padStart(String(date.getUTCMinutes()), 2, '0');\n        var secs = padStart(String(date.getUTCSeconds()), 2, '0');\n        return new PDFString(\"D:\" + year + month + day + hours + mins + secs + \"Z\");\n    };\n    return PDFString;\n}(PDFObject));\nexport default PDFString;\n//# sourceMappingURL=PDFString.js.map","export enum ProjectTrackerCreateProjectFormVariant {\n  WITH_CREATION_METHOD_SELECTION = 'WITH_CREATION_METHOD_SELECTION',\n  WITH_LEAD_SOURCE = 'WITH_LEAD_SOURCE',\n  WITH_PROJECT_VALUATION = 'WITH_PROJECT_VALUATION',\n  WITH_KEY_CONTACT_COMPONENT = 'WITH_KEY_CONTACT_COMPONENT',\n  WITH_PROJECT_TRACKER = 'WITH_PROJECT_TRACKER',\n  WITH_EDIT_MODE = 'WITH_EDIT_MODE',\n  WITH_TEMPLATE_SELECTION = 'WITH_TEMPLATE_SELECTION',\n  WITH_TRACK_PROJECT = 'WITH_TRACK_PROJECT',\n  WITH_ASSIGNED_TO = 'WITH_ASSIGNED_TO',\n}\n\nexport enum CreationMethod {\n  MANUAL = 'MANUAL',\n  AI = 'AI',\n}","export default __webpack_public_path__ + \"static/media/package.40007051.svg\";","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n  Link,\n  Typography,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { compose, Dispatch } from 'redux';\nimport {\n  Trans,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport packageImg from '../../images/package.svg';\nimport { FirmProduct, Package } from '../../models';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces';\nimport { DeletePackageAction } from '../../modules/PackageModule/actions';\nimport { connect } from 'react-redux';\nimport { SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport { PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY } from '../../components/PackageDrawer';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport UpdateIcon from '@material-ui/icons/Update';\nimport NoteAddIcon from '@material-ui/icons/NoteAdd';\nimport DrawerRow from '../DrawerRow';\nimport DrawerViewHeader from '../DrawerViewHeader';\nimport { Map } from 'immutable';\nimport { FIRM_ID } from '../../constants';\nimport { makeSelectIsRestrictedOutsideSalesRep } from '../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\n\ninterface IPackageDrawerViewComponentProps {\n  packageData?: IMap<Package>;\n  toggleDrawer: () => void;\n  deleteAction?: () => void;\n  copyAction?: () => void;\n  onProductClicked?: (product: IMap<FirmProduct>) => void;\n}\n\ninterface IPackageDrawerViewProps extends IPackageDrawerViewComponentProps {\n  isRestrictedOutsideSalesRep: boolean;\n  dispatch: Dispatch<IAction>;\n  deletePackage: (packageId: number) => void;\n}\n\ntype PackageDrawerViewType = IPackageDrawerViewProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass PackageDrawerView extends React.Component<PackageDrawerViewType, {}> {\n  public openPackageEdit = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: PACKAGE_DRAWER_ID,\n      content: PACKAGE_CONTENT_EDIT_KEY\n    }));\n  }\n\n  public handleDelete = (id: number) => {\n    const { deletePackage, toggleDrawer } = this.props;\n    deletePackage(id);\n    toggleDrawer();\n  }\n\n  public productList = () => {\n    const {\n      classes,\n      packageData,\n      onProductClicked\n    } = this.props;\n    const deltasfirmProducts = packageData && packageData.get('products');\n    const productQuantities = packageData && packageData.get('productQuantities');\n\n    return (\n      deltasfirmProducts\n        ? deltasfirmProducts.map((deltasFirmProduct, i) => (\n            <Grid key={i} container={true} justify='space-between' className={classes.linkContainer} spacing={1}>\n              <Grid\n                item={true}\n                xs={10}\n              >\n                <Link\n                  key={i}\n                  variant='body2'\n                  onClick={() => onProductClicked && onProductClicked(deltasFirmProduct)}\n                  className={classes.link}\n                  underline='none'\n                >\n                  {deltasFirmProduct.getIn(['firmProduct', 'productNumber']) || ''}\n                </Link>\n              </Grid>\n              <Grid\n                item={true}\n                xs={2}\n              >\n                <Typography variant='body2' color='textPrimary'>\n                  {productQuantities?.get(i) || '1'}\n                </Typography>\n              </Grid>\n            </Grid>\n          ))\n        : null\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      toggleDrawer,\n      packageData = Map(),\n      copyAction,\n      deleteAction,\n      t,\n      isRestrictedOutsideSalesRep,\n    } = this.props;\n\n    const packageId = packageData.get('id');\n    const imageSize = 120;\n    const imageSrc = packageData.getIn(['media', 'images', 'main']) || '';\n    const modifier = packageData.getIn(['modifiedBy', 'firm', 'id']) === FIRM_ID.ats ? 'ATS' : packageData.getIn(['modifiedBy', 'user', 'name']);\n    const ModifiedDate = packageData.get('modifiedDate');\n    const formattedModifiedDate = ModifiedDate ? utcToLocal(ModifiedDate, true) : t('packageDrawer.na');\n    const creator = packageData.getIn(['createdBy', 'firm', 'id']) === FIRM_ID.ats ? 'ATS' : packageData.getIn(['createdBy', 'user', 'name']);\n    const createdDate = packageData.get('createdDate');\n    const formattedCreatedDate = createdDate ? utcToLocal(createdDate, true) : t('packageDrawer.na');\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n\n        {/* header */}\n        <DrawerViewHeader\n          imageProps={{\n            imgProps: {\n              src: packageImg,\n              alt: 'package icon'\n            }\n          }}\n          menuItems={isRestrictedOutsideSalesRep ? [] : [\n            { action: t('formButtons.edit'), onClick: this.openPackageEdit },\n            { action: t('formButtons.duplicate'), onClick: copyAction },\n            { action: t('formButtons.delete'), onClick: () => deleteAction ? deleteAction() : this.handleDelete(packageId) }\n          ]}\n          title={packageData.get('number')}\n          handleClose={toggleDrawer}\n        />\n\n        {/* Drawer Body */}\n        <Grid\n          container={true}\n          direction='column'\n          wrap='nowrap'\n          className={classes.body}\n        >\n          {/* Package Detail */}\n          <DrawerRow\n            muiIcon={<EditRoundedIcon />}\n            text={t('packageDrawer.packageInfo')}\n          />\n          <DrawerRow text={packageData.get('description')} />\n          {/* Packages in package */}\n          <DrawerRow\n            icon='boxes'\n            text={t('packageDrawer.productsInPackage')}\n          />\n          <DrawerRow childrenJustify='space-between'>\n            <Grid item={true} xs={10}>\n              <Typography variant='body2'>\n                {t('packageDrawer.productNumberHeaderLabel')}\n              </Typography>\n            </Grid>\n            <Grid item={true} xs={2}>\n              <Typography variant='body2'>\n                {t('packageDrawer.productQtyHeaderLabel')}\n              </Typography>\n            </Grid>\n          </DrawerRow>\n          <DrawerRow>\n            {this.productList()}\n          </DrawerRow>\n          {/* Updated... */}\n          <DrawerRow muiIcon={<UpdateIcon />}>\n            <Typography variant='body2' color='textPrimary'>\n              <Trans\n                t={t}\n                i18nKey={'packageDrawer.updatedBy'}\n                values={{\n                  userName: modifier || t('packageDrawer.na'),\n                  date: formattedModifiedDate.length > 10 ? formattedModifiedDate.slice(0, 10) : formattedModifiedDate,\n                }}\n                components={[\n                  <span key={0} style={{fontWeight: 700}} />,\n                  <span key={1} style={{fontWeight: 700}} />,\n                ]}\n              />\n            </Typography>\n          </DrawerRow>\n          <DrawerRow muiIcon={<NoteAddIcon />}>\n            <Typography variant='body2' color='textPrimary'>\n              <Trans\n                t={t}\n                i18nKey={'packageDrawer.createdBy'}\n                values={{\n                  userName: creator || t('packageDrawer.na'),\n                  date: formattedCreatedDate.length > 10 ? formattedCreatedDate.slice(0, 10) : formattedCreatedDate,\n                }}\n                components={[\n                  <span key={0} style={{fontWeight: 700}} />,\n                  <span key={1} style={{fontWeight: 700}} />,\n                ]}\n              />\n            </Typography>\n          </DrawerRow>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  linkContainer: {\n    margin: theme.spacing(0.5, 0)\n  },\n  link: {\n    cursor: 'pointer',\n  },\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary,\n    lineHeight: '1rem',\n    '& a': {\n      color: theme.palette.primary.main,\n      textDecoration: 'none',\n    },\n    width: '100%',\n  },\n  dropDownContainer: {\n    color: theme.palette.common.white\n  },\n  mainPrimaryColor: {\n    color: theme.palette.primary.main\n  },\n  primaryTextColor: {\n    color: theme.palette.text.primary\n  }\n});\n\nconst mapStateToProps = (state) => {\n  return createStructuredSelector({\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n  })(state);\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    deletePackage: (packageId: number) => {\n      dispatch(new DeletePackageAction({packageId}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IPackageDrawerViewComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(PackageDrawerView);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction/index';\nimport { Map } from 'immutable';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport Api from 'ats-api/src';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectIdentityObject } from '../../modules/AtsModule/selectors';\n\nimport {  SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport SuccessDrawer, { SUCCESS_DRAWER } from '../SuccessDrawer';\nimport PackageDrawerView from '../PackageDrawerView';\n\nimport { IMap } from 'ats-utils/src';\nimport { FirmProduct, Package } from '../../models';\n\nimport PackageDrawerEdit from '../PackageDrawerEdit';\ninterface IPackageDrawerComponentProps {\n  drawerId?: string;\n  updateQuoteProductRow?: boolean;\n  handleCancel?: () => void;\n  packageData?: IMap<Package>;\n  deleteAction?: () => void;\n  copyAction?: () => void;\n  onProductClicked?: (product: IMap<FirmProduct>) => void;\n}\n\ninterface IPackageDrawer extends IPackageDrawerComponentProps {\n  dispatch: Dispatch<IAction>;\n  firmId: number;\n  content: string;\n  atsApi: Api;\n  user: any;\n  modalProps: any;\n}\n\nexport const DEFAULT_FORM_NAME = 'PackageDrawerForm';\n// export const TEAM_MANAGEMENT_OFFICE_VIEW = 'PackageDrawerView';\nexport const PACKAGE_DRAWER_ID = 'PackageDrawer';\nexport const PACKAGE_CONTENT_EDIT_KEY = '__PackageDrawerEdit__';\n\n\ntype IPackageDrawerType = IPackageDrawer;\n\nclass PackageDrawer extends React.Component<IPackageDrawerType> {\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { packageData } = this.props;\n    if (prevProps.packageData && !packageData) {\n      this.toggleDrawer();\n    }\n  }\n\n  public componentWillUnmount(): void {\n    const { dispatch } = this.props;\n\n    // dispatch(new ToggleOverlayComponentAction({\n    //   id: PACKAGE_DRAWER_ID,\n    //   open: false\n    // }))\n    // reset initialPackageData\n    dispatch(new SetOverlayComponentPropsAction({\n      id: PACKAGE_DRAWER_ID,\n      props: {}\n    }));\n  }\n\n  public transformValuesForInitialValues = (packageData) => {\n    return packageData.withMutations((ctx) => {\n      return ctx\n        .set('manufacturerName', Map({\n          id: packageData.get('manufacturerId'),\n          value: packageData.get('manufacturerName')\n        }))\n        .set('categoryName', Map({\n          id: packageData.get('categoryId'),\n          value: packageData.get('categoryName')\n        }));\n    });\n  }\n\n  public toggleDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PACKAGE_DRAWER_ID\n    }));\n  }\n\n  public render() {\n    const {\n      content: _contentString,\n      packageData,\n      onProductClicked,\n      modalProps,\n      updateQuoteProductRow,\n    } = this.props;\n\n    const { initialData } = modalProps;\n\n    const initialPackageData = packageData || initialData;\n\n    const content = (() => {\n      switch (_contentString) {\n        case PACKAGE_CONTENT_EDIT_KEY: {\n          return <PackageDrawerEdit\n            packageData={initialPackageData && this.transformValuesForInitialValues(initialPackageData)} // testing for packageData for empty edit drawer\n            updateQuoteProductRow={updateQuoteProductRow}\n          />;\n        }\n        case SUCCESS_DRAWER: {\n          return <SuccessDrawer\n          />;\n        }\n        default: {\n          return <PackageDrawerView\n            onProductClicked={onProductClicked}\n            packageData={initialPackageData}\n            toggleDrawer={this.toggleDrawer}\n            deleteAction={this.props.deleteAction || null}\n            copyAction={this.props.copyAction || null}\n          />;\n        }\n      }\n    })();\n\n    return (\n      <>\n        {\n          content\n        }\n      </>\n    );\n  }\n}\n\nconst mapStateToProps = (state, props: IPackageDrawerComponentProps) => {\n  return {\n    content: makeSelectOverlayComponentContent(PACKAGE_DRAWER_ID)(state),\n    ...createStructuredSelector({\n      user: makeSelectIdentityObject(),\n      modalProps: makeSelectOverlayComponentProp(PACKAGE_DRAWER_ID),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => ({dispatch});\n\nexport default compose<React.ComponentClass<IPackageDrawerComponentProps>> (\n  connect(mapStateToProps, mapDispatchToProps),\n)(PackageDrawer);\n","\nimport * as React from 'react';\n\nimport * as styles from './styles.scss';\n\ninterface IHideComponentProps {\n  show?: boolean;\n  title?: string;\n}\n\nconst Hide: React.SFC<IHideComponentProps> = ({ ...props }) => {\n  const { show, title, children } = props;\n\n  if (show && children) {\n\n    return (\n      <React.Fragment>\n        {children || null}\n      </React.Fragment>\n    );\n  }\n  return (\n    <div className={styles.stealth}>\n      { title ? `hidden: ${title}` : 'hidden' }\n    </div>\n  );\n};\n\nexport default Hide;\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, createStyles, Grid, makeStyles, Paper, Theme, Typography } from '@material-ui/core';\nimport { IAction } from 'ats-utils/src';\nimport * as React from 'react';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { ControlledModal } from '../..';\nimport { ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\n\ninterface IPrintHeaderComponentProps {\n  title: string;\n  description: string;\n  src?: string;\n  fontIcon?: IconProp;\n  sampleModalKey: string;\n  sampleSrc: string;\n  sampleAlt: string;\n}\n\ninterface IPrintHeaderProps extends IPrintHeaderComponentProps {\n  openSampleModal: () => void;\n}\n\ntype PrintHeaderProps = IPrintHeaderProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  tabContent: {\n    padding: theme.spacing(3, 4),\n    color: theme.typography.h1.color,\n  },\n  descriptionTitle: {\n    paddingLeft: 10\n  },\n  icon: {\n    width: 25\n  },\n  templateButton: {\n    padding: 0,\n    textTransform: 'capitalize',\n    fontSize: theme.typography.body2.fontSize,\n    marginLeft: 'auto',\n  },\n  tabTitleIcon: {\n    fontSize: 24,\n    paddingTop: 3,\n  },\n  root: {\n    flexGrow: 1,\n    width: '100%',\n    backgroundColor: theme.palette.background.paper,\n  },\n}));\n\nconst PrintHeader: React.FC<PrintHeaderProps> = ({\n  title,\n  description,\n  src,\n  sampleModalKey,\n  sampleSrc,\n  sampleAlt,\n  fontIcon,\n  openSampleModal,\n  t\n}) => {\n  const classes = useStyles();\n  return (\n    <>\n      <Grid\n        container={true}\n        alignItems='center'\n        wrap='nowrap'\n      >\n        {\n          src && (\n          <img\n            src={src}\n            className={classes.icon}\n          />\n          )\n        }\n        {\n          fontIcon && (\n            <FontAwesomeIcon\n              className={classes.tabTitleIcon}\n              icon={['far', 'file-word']}\n            />\n          )\n        }\n        <Typography className={classes.descriptionTitle} variant='subtitle1' color='inherit'>{title}</Typography>\n        <Button\n            color='primary'\n            onClick={openSampleModal}\n            className={classes.templateButton}\n        >\n          {t('productBrochurePrint.viewSample')}\n        </Button>\n        <ControlledModal\n            localKey={sampleModalKey}\n            maxWidth={false}\n        >\n          <img src={sampleSrc} alt={sampleAlt}/>\n        </ControlledModal>\n      </Grid>\n      <Grid item={true}>\n        <Typography variant='body1'>{description}</Typography>\n      </Grid>\n    </>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, ownProps: IPrintHeaderComponentProps) => {\n  return {\n    dispatch,\n    openSampleModal: () => {\n      dispatch(new ToggleOverlayComponentAction({open: true, id: ownProps.sampleModalKey}));\n    }\n  };\n};\n\nexport default compose<React.FC<IPrintHeaderComponentProps>>(\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(PrintHeader);\n\nexport const PrintWrapper: React.FC = ({ children }) => {\n  const classes = useStyles();\n  return (\n    <Paper\n      className={classes.root}\n    >\n      <Grid\n        className={classes.tabContent}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n        spacing={2}\n      >\n        {children}\n      </Grid>\n    </Paper>\n  );\n};","var defineProperty = require(\"./defineProperty.js\");\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? Object(arguments[i]) : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nmodule.exports = _objectSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var lastThis;\n    var lastArgs = [];\n    var lastResult;\n    var calledOnce = false;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n            return lastResult;\n        }\n        lastResult = resultFn.apply(this, newArgs);\n        calledOnce = true;\n        lastThis = this;\n        lastArgs = newArgs;\n        return lastResult;\n    }\n    return memoized;\n}\n\nexport default memoizeOne;\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport { darken, fade, lighten } from '../styles/colorManipulator';\nimport TableContext from '../Table/TableContext';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body2, {\n      display: 'table-cell',\n      verticalAlign: 'inherit',\n      // Workaround for a rendering bug with spanned columns in Chrome 62.0.\n      // Removes the alpha (sets it to 1), and lightens or darkens the theme color.\n      borderBottom: \"1px solid\\n    \".concat(theme.palette.type === 'light' ? lighten(fade(theme.palette.divider, 1), 0.88) : darken(fade(theme.palette.divider, 1), 0.68)),\n      textAlign: 'left',\n      padding: 16\n    }),\n\n    /* Styles applied to the root element if `variant=\"head\"` or `context.table.head`. */\n    head: {\n      color: theme.palette.text.primary,\n      lineHeight: theme.typography.pxToRem(24),\n      fontWeight: theme.typography.fontWeightMedium\n    },\n\n    /* Styles applied to the root element if `variant=\"body\"` or `context.table.body`. */\n    body: {\n      color: theme.palette.text.primary\n    },\n\n    /* Styles applied to the root element if `variant=\"footer\"` or `context.table.footer`. */\n    footer: {\n      color: theme.palette.text.secondary,\n      lineHeight: theme.typography.pxToRem(21),\n      fontSize: theme.typography.pxToRem(12)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      padding: '6px 24px 6px 16px',\n      '&:last-child': {\n        paddingRight: 16\n      },\n      '&$paddingCheckbox': {\n        width: 24,\n        // prevent the checkbox column from growing\n        padding: '0px 12px 0 16px',\n        '&:last-child': {\n          paddingLeft: 12,\n          paddingRight: 16\n        },\n        '& > *': {\n          padding: 0\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `padding=\"checkbox\"`. */\n    paddingCheckbox: {\n      width: 48,\n      // prevent the checkbox column from growing\n      padding: '0 0 0 4px',\n      '&:last-child': {\n        paddingLeft: 0,\n        paddingRight: 4\n      }\n    },\n\n    /* Styles applied to the root element if `padding=\"none\"`. */\n    paddingNone: {\n      padding: 0,\n      '&:last-child': {\n        padding: 0\n      }\n    },\n\n    /* Styles applied to the root element if `align=\"left\"`. */\n    alignLeft: {\n      textAlign: 'left'\n    },\n\n    /* Styles applied to the root element if `align=\"center\"`. */\n    alignCenter: {\n      textAlign: 'center'\n    },\n\n    /* Styles applied to the root element if `align=\"right\"`. */\n    alignRight: {\n      textAlign: 'right',\n      flexDirection: 'row-reverse'\n    },\n\n    /* Styles applied to the root element if `align=\"justify\"`. */\n    alignJustify: {\n      textAlign: 'justify'\n    },\n\n    /* Styles applied to the root element if `context.table.stickyHeader={true}`. */\n    stickyHeader: {\n      position: 'sticky',\n      top: 0,\n      left: 0,\n      zIndex: 2,\n      backgroundColor: theme.palette.background.default\n    }\n  };\n};\n/**\n * The component renders a `<th>` element when the parent context is a header\n * or otherwise a `<td>` element.\n */\n\nvar TableCell = React.forwardRef(function TableCell(props, ref) {\n  var _props$align = props.align,\n      align = _props$align === void 0 ? 'inherit' : _props$align,\n      classes = props.classes,\n      className = props.className,\n      component = props.component,\n      paddingProp = props.padding,\n      scopeProp = props.scope,\n      sizeProp = props.size,\n      sortDirection = props.sortDirection,\n      variantProp = props.variant,\n      other = _objectWithoutProperties(props, [\"align\", \"classes\", \"className\", \"component\", \"padding\", \"scope\", \"size\", \"sortDirection\", \"variant\"]);\n\n  var table = React.useContext(TableContext);\n  var tablelvl2 = React.useContext(Tablelvl2Context);\n  var Component;\n\n  if (component) {\n    Component = component;\n  } else {\n    Component = tablelvl2 && tablelvl2.variant === 'head' ? 'th' : 'td';\n  }\n\n  var scope = scopeProp;\n\n  if (!scope && tablelvl2 && tablelvl2.variant === 'head') {\n    scope = 'col';\n  }\n\n  var padding = paddingProp || (table && table.padding ? table.padding : 'default');\n  var size = sizeProp || (table && table.size ? table.size : 'medium');\n  var variant = variantProp || tablelvl2 && tablelvl2.variant;\n  var ariaSort = null;\n\n  if (sortDirection) {\n    ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';\n  }\n\n  return React.createElement(Component, _extends({\n    ref: ref,\n    className: clsx(classes.root, classes[variant], className, align !== 'inherit' && classes[\"align\".concat(capitalize(align))], padding !== 'default' && classes[\"padding\".concat(capitalize(padding))], size !== 'medium' && classes[\"size\".concat(capitalize(size))], {\n      head: table && table.stickyHeader && classes.stickyHeader\n    }[variant]),\n    \"aria-sort\": ariaSort,\n    scope: scope\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableCell.propTypes = {\n  /**\n   * Set the text-align on the table cell content.\n   *\n   * Monetary or generally number fields **should be right aligned** as that allows\n   * you to add them up quickly in your head without having to worry about decimals.\n   */\n  align: PropTypes.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n  /**\n   * The table cell contents.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Sets the padding applied to the cell.\n   * By default, the Table parent component set the value (`default`).\n   */\n  padding: PropTypes.oneOf(['default', 'checkbox', 'none']),\n\n  /**\n   * Set scope attribute.\n   */\n  scope: PropTypes.string,\n\n  /**\n   * Specify the size of the cell.\n   * By default, the Table parent component set the value (`medium`).\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * Set aria-sort direction.\n   */\n  sortDirection: PropTypes.oneOf(['asc', 'desc', false]),\n\n  /**\n   * Specify the cell type.\n   * By default, the TableHead, TableBody or TableFooter parent component set the value.\n   */\n  variant: PropTypes.oneOf(['head', 'body', 'footer'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableCell'\n})(TableCell);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');\n\nexports.default = _default;","// This is a Redux controlled Dropzone component meant to be passed into a Redux-Form <Field/>.\n// Things it does:\n//   Image Previews with Tooltip\n//   Loading Bar\n//   Error Handling\n//   Multiple Files\n\n//  It is controlled by values in the Redux store (Application > fieldDropzoneState).\n//  Action: FieldDropzoneStateChangeAction\n//  Selector: makeSelectFieldDropzoneState\n//  Model: FieldDropzoneState\n//  ActionReset: FieldDropzoneStateResetAction\n\n//   USAGE:\n//   Use in a redux-form <Field/> with types cast as shown below\n\n//     <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n//       component={FieldDropzone}\n//       name='exampleFieldName'\n//     />\n\nimport * as React from 'react';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { WrappedFieldProps } from 'redux-form';\nimport Dropzone, { DropzoneProps, DropzoneInputProps, DropzoneRootProps, DropEvent } from 'react-dropzone';\nimport { Grid, Typography, Theme, Tooltip, LinearProgress, IconButton, Link } from '@material-ui/core';\nimport { withStyles, WithStyles, WithTheme, StyleRules } from '@material-ui/styles';\nimport { grey } from '@material-ui/core/colors';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { createStructuredSelector } from 'reselect';\nimport { ShowPhotoPreviewAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectFieldDropzoneState, makeSelectPhotoPreview } from '../../modules/ApplicationModule/selectors';\nimport FieldDropzoneState from '../../models/FieldDropzoneState';\nimport { GridProps } from '@material-ui/core/Grid';\nimport { Image } from '..';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport classNames from 'classnames';\n\nexport interface IFieldDropzoneComponentProps {\n  dropzoneProps?: DropzoneProps;\n  dropzoneRootProps?: DropzoneRootProps;\n  dropzoneInputProps?: DropzoneInputProps;\n  containerProps?: GridProps;\n  initialImage?: string;\n  suggestText?: string;\n  disabled?: boolean;\n  autoRevokeURL?: boolean;\n  renderSuggestText?: () => React.ReactNode;\n}\n\ninterface IFieldDropzoneProps {\n  fieldDropzoneState: IMap<FieldDropzoneState>;\n}\n\ninterface IPhotoPreviewProps {\n  showPhotoPreview: boolean;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype IFieldDropzone = IFieldDropzoneComponentProps & IFieldDropzoneProps & IPhotoPreviewProps & WrappedFieldProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme<Theme>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    background: grey[100],\n    border: `${theme.spacing(0.25)}px dashed ${grey[300]}`,\n    padding: theme.spacing(2),\n    height: 0,\n    flexGrow: 1,\n    cursor: 'pointer'\n  },\n  rootDisabled: {\n    cursor: 'default'\n  },\n  imagePreview: {\n    maxHeight: '100%',\n    maxWidth: '100%'\n  },\n  container: {\n    flexGrow: 1,\n  },\n  initialImage: {\n    height: '100%'\n  },\n  dropFile: {\n    color: 'rgba(0, 0, 0, 0.87)'\n  },\n  browseFile: {\n    textTransform: 'uppercase'\n  },\n  disabledText: {\n    color: theme.palette.text.disabled\n  },\n  suggestion: {\n    color: 'rgba(0,0,0,0.6)',\n  }\n});\n\nconst FieldDropzone: React.FC<IFieldDropzone> = (props: IFieldDropzone) => {\n  const {\n    theme,\n    input: {\n      value,\n      onChange,\n    },\n    meta: {\n      error,\n      touched\n    },\n    classes,\n    dropzoneProps: {\n      onDropAccepted = null,\n      ...dropzonePropsRest\n    } = {},\n    dropzoneRootProps = {},\n    dropzoneInputProps = {},\n    fieldDropzoneState,\n    containerProps,\n    showPhotoPreview,\n    t,\n    suggestText,\n    disabled = false,\n    autoRevokeURL = true,\n    renderSuggestText,\n  } = props;\n\n  // Create the preview data for each image\n  const filesWithPreview = value\n    ? value.map(file => (file.type && file.type.includes('image'))\n      ? Object.assign(file, {\n        preview: URL.createObjectURL(file)\n      })\n      : file\n    )\n    : null;\n\n  // Generate the image and file preview elements\n  const previews = filesWithPreview && filesWithPreview.map((file, i) => {\n    const {\n      name = '',\n      type = '',\n      preview = ''\n    } = file;\n\n    return <Tooltip\n      title={name}\n      key={i}\n    >\n      {\n        type.includes('image')\n          ? <img\n            className={classes.imagePreview}\n            src={preview}\n          />\n          : <div>\n              <FontAwesomeIcon icon='file-upload' size='2x' color={theme.palette.primary.main} />\n            </div>\n      }\n    </Tooltip>;\n  });\n\n  // Add accepted files list to redux store and then run onDropAccepted function from props if it exists\n  const defaultOnDropAccepted = (fileArray: File[], event: DropEvent) => {\n    const {\n      dispatch,\n    } = props;\n    onChange(fileArray);\n    if (onDropAccepted) { onDropAccepted(fileArray, event); }\n    if (!showPhotoPreview) { dispatch(new ShowPhotoPreviewAction()); }\n  };\n\n  // Make sure to revoke the data uris to avoid memory leaks. NOTE: This comes from React-Dropzone docs https://react-dropzone.js.org/#previews\n  React.useEffect(() => () => {\n    if (filesWithPreview && autoRevokeURL) {\n      filesWithPreview.map(file => URL.revokeObjectURL(file.preview));\n    }\n  }, [value]);\n\n  const {\n    showLoading,\n    loadingPercentage,\n    loadingState,\n    errorMessage\n  } = fieldDropzoneState.toObject();\n\n  return (\n    <Grid container={true} direction='column' justify='center' alignItems='center' className={classes.container} {...containerProps}>\n      {\n        showLoading\n          ? loadingState === 'done'\n            ? <Typography>{t('uploadPhoto.done')}</Typography>\n            : loadingState === 'processing'\n              ? <Typography>{t('uploadPhoto.processing')}</Typography>\n              : loadingState === null\n                && <Grid container={true} wrap='nowrap' alignItems='center'>\n                    <LinearProgress variant='determinate' value={loadingPercentage} style={{flexGrow: 1}}/>\n                <Typography>{(Math.floor(loadingPercentage * 100) / 100).toFixed(2)}%</Typography>\n                  </Grid>\n          : <>\n              <Dropzone\n                onDropAccepted={defaultOnDropAccepted}\n                multiple={false}\n                disabled={disabled}\n                {...dropzonePropsRest}\n              >\n                {({ getRootProps, getInputProps }) => (\n                  <Grid className={classNames(classes.root, { [classes.rootDisabled]: disabled })} container={true} alignItems='center' justify='center' wrap='nowrap' {...getRootProps()} {...dropzoneRootProps}>\n                    <input {...getInputProps()} {...dropzoneInputProps} />\n                    {\n                      value && showPhotoPreview\n                        ? previews\n                        : props.initialImage\n                          ? <Image\n                              src={props.initialImage}\n                              fromService={true}\n                              className={classes.initialImage}\n                            />\n                          : <Grid\n                              container={true}\n                              justify='center'\n                              alignContent='center'\n                            >\n                              <Grid item={true}>\n                                <CloudUploadIcon fontSize='large' color='disabled' />\n                              </Grid>\n                              <Grid\n                                container={true}\n                                item={true}\n                                direction='column'\n                                alignItems='center'\n                                style={{ textAlign: 'center' }}\n                              >\n                                <Grid item={true}>\n                                  <Typography className={disabled ? classes.disabledText : classes.dropFile}>{t('uploadPhoto.dropFile')}</Typography>\n                                </Grid>\n                                <Grid item={true}>\n                                  {\n                                    // react-dropzone drops its click and drop handlers when disabled, so don't offer a link that does nothing\n                                    disabled\n                                      ? <Typography className={classNames(classes.browseFile, classes.disabledText)}>\n                                          {t('uploadPhoto.browseFile')}\n                                        </Typography>\n                                      : <Link\n                                          underline='none'\n                                          color='primary'\n                                          className={classes.browseFile}\n                                        >\n                                          {t('uploadPhoto.browseFile')}\n                                        </Link>\n                                  }\n                                </Grid>\n                                { renderSuggestText ? renderSuggestText() : suggestText ?\n                                  <Grid item={true}>\n                                    <Typography variant='caption' className={classes.suggestion}>{suggestText}</Typography>\n                                  </Grid>\n                                  : null\n                                }\n                              </Grid>\n                            </Grid>\n                    }\n\n                  </Grid>\n                )}\n              </Dropzone>\n              {error && <Typography color='error'>{error}</Typography>}\n            </>\n      }\n      {(errorMessage) && <Typography color='error'>{errorMessage}</Typography>}\n    </Grid>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return{\n    dispatch\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  fieldDropzoneState: makeSelectFieldDropzoneState(),\n  showPhotoPreview: makeSelectPhotoPreview(),\n});\n\nexport default compose<React.FunctionComponent<IFieldDropzoneComponentProps & WrappedFieldProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(FieldDropzone);\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {\n  Map,\n  List,\n  fromJS,\n  get,\n} from 'immutable';\nimport {\n  Drawer,\n  IconButton,\n  Grid,\n  Typography,\n  Theme,\n  Avatar,\n  WithTheme,\n  withStyles,\n  WithStyles,\n  MenuItem,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities, makeSelectAdminDivisions } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction } from '../../../modules/ProjectLocationModule/actions';\nimport { IMap } from 'ats-utils/src';\nimport {\n  ListItem,\n  OpportunityStatus,\n  OpportunityLabel,\n  BuildingClassListItem,\n  ProjectPhase,\n  User,\n  Office,\n  Project,\n  Option,\n  Region,\n  Contact,\n  SearchArgs,\n  Filter,\n} from '../../../models';\nimport { PreferenceType } from '../../../models/Preferences';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n  autofill,\n  initialize,\n} from 'redux-form';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../../components/FieldAutoSuggest';\nimport {\n  startCase,\n} from 'lodash';\nimport {\n  GetOpportunityLabelsAction,\n  GetOpportunityStatusesAction,\n  GetPreferencesAction,\n  SearchUsersQuickAction,\n  GetOfficesByFirmIdAction,\n  GetRTypeRegionsAction,\n  SearchContactsAction,\n  GetFiltersByType,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectOpportunityStatusesList,\n  makeSelectOpportunityLabelsList,\n  makeSelectPhases,\n  makeSelectUsers,\n  makeSelectFirmOfficeIdsMap,\n  makeSelectOffices,\n  makeSelectRegionList,\n  makeSelectSearchedContacts,\n  makeSelectContactsLoading,\n  makeSelectSearchedUsersWithDetail,\n  makeSelectSearchedUsersWithDetailAsListItem\n} from '../../../modules/AccountModule/selectors';\nimport { GetBuildingTypesAction, GetBuildingClassesAction } from '../../../modules/BuildingModule/actions';\nimport { makeSelectBuildingTypes, makeSelectBuildingClasses } from '../../../modules/BuildingModule/selectors';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../../components/FieldCheckbox';\nimport FieldTextField from '../../../components/FieldTextFieldDebounced';\nimport { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { makeSelectUserId, makeSelectUserFirmId } from '../../../modules/AtsModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  makeSelectLeadSources\n} from '../../../modules/ListModule/selectors';\nimport {\n  GetLeadSourcesAction\n} from '../../../modules/ListModule/actions';\nimport { ILeadSource } from '../../../modules/ListModule/reducer';\nimport {\n  dateValidateFunc,\n  isValidMomentDate,\n  MinMaxValidateFunc\n} from '../../../validators';\nimport {\n  FieldAutocomplete,\n  Image\n} from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../../../components/FieldReactSelect';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport {\n  WithTranslation,\n  withTranslation\n} from 'react-i18next';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2, { removeTZ } from '../../../components/FieldDatePickerV2';\nimport FilterList from '../../../components/FilterList';\nimport moment from 'moment';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport FieldSelect, { IFieldSelectComponentProps } from '../../../components/FieldSelect';\n\nexport const PT_PROJECT_LIST_FILTER_FORM = 'ProjectListFilters';\nexport const PT_PROJECT_LIST_FILTER_LIST = 'PtProjectFilterList'; // beware, there's a max length 20 for the string\n\nexport const formatDateRangeFilter = (dateRangeMap: Map<string, any>) => {\n  if (dateRangeMap) {\n    let formatedDateRangeFilter = Map();\n\n    const gte = dateRangeMap.get('gte');\n    const lte = dateRangeMap.get('lte');\n\n    if (gte && moment(gte).isValid()) {\n      formatedDateRangeFilter = formatedDateRangeFilter.set('gte', removeTZ(gte));\n    }\n    if (lte && moment(lte).isValid()) {\n      formatedDateRangeFilter = formatedDateRangeFilter.set('lte', removeTZ(lte));\n    }\n\n    return formatedDateRangeFilter.count() ? formatedDateRangeFilter : null;\n  }\n  return null;\n};\n\nconst bidDateValidateFunc = (value, allValues) => {\n  return dateValidateFunc('bidDate', allValues);\n};\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\n\nconst valuationValidateFunc = (value, allValues) => MinMaxValidateFunc('valuation', allValues);\nconst oppValuationValidateFunc = (value, allValues) => MinMaxValidateFunc('oppValue', allValues);\n\ninterface IProjectListFilterComponentProps {\n  open: boolean;\n  toggleDrawer: () => void;\n  form?: string;\n  options: Option<Project>;\n  filters: Filter;\n  setSearchArgsAndSearch: (arg: SearchArgs<Project>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IProjectListFilter extends IProjectListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  formValues: Map<string, any>;\n  adminDivisions: Map<number, string>;\n  getOpportunityLabels: () => void;\n  getOpportunityStatuses: () => void;\n  opportunityStatusesList: List<IMap<OpportunityStatus>>;\n  opportunityLabelsList: List<IMap<OpportunityLabel>>;\n  getBuildingTypes: (id: number) => void;\n  getBuildingClasses: () => void;\n  getProjectPhases: () => void;\n  buildingTypes: List<IMap<ListItem<string, string>>>;\n  buildingClasses: List<IMap<BuildingClassListItem>>;\n  selectedBuildingClassId: number;\n  projectPhases: List<IMap<ProjectPhase>>;\n  searchUsers: (searchTerm: string, firmId?: number) => void;\n  userFirmId: number;\n  getOfficesByFirmId: (firmId: number) => void;\n  firmOfficesId: any;\n  offices: List<IMap<Office>>;\n  leadSources: List<IMap<ILeadSource>>;\n  getLeadSource: () => void;\n  getRegions: () => void;\n  regions: List<IMap<Region>>;\n  userId: number;\n  contacts: List<IMap<Contact>>;\n  searchContacts: (searchTerm: string) => void;\n  isLoadingContacts: boolean;\n  userListItems: List<IMap<ListItem>>;\n  getFiltersByType: (filterType: string) => void;\n}\n\ntype IProjectListFilterType = IProjectListFilter & InjectedFormProps & WithAmplitudeData & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithTranslation;\n\nconst defaultMultiSelectValue = [];\nclass ProjectListFilter extends React.Component<IProjectListFilterType> {\n  public state = {\n    createdByUserInput: '',\n    contactInput: '',\n    assignedToInput: '',\n  };\n\n  public AvatarOrLogo = ({ imageId, firstName, lastName, organization }: Contact) => {\n    const { classes, theme } = this.props;\n    if (imageId) {\n      return (\n        <Grid container={true}>\n          <Image\n            src={imageId}\n            fromService={true}\n            width={`${theme.spacing(5)}px`}\n            aspectRatio={'100%'}\n            backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n            style={{margin: 0}}\n          />\n        </Grid>\n      );\n    }\n    const avatarText = ([(firstName || '')[0], (lastName || '')[0]].join('')) || (organization || '')[0];\n    return (\n      <Avatar className={classes.avatar}>\n        <Typography className={classes.avatarText}>{avatarText}</Typography>\n      </Avatar>\n    );\n  }\n\n  // put it here to fetch the list for setting the default filter\n  public componentDidMount() {\n    const {\n      formValues,\n    } = this.props;\n\n    this.props.getFiltersByType(PT_PROJECT_LIST_FILTER_LIST);\n    if (formValues && formValues.size) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      dispatch,\n      getCountries,\n      getOpportunityLabels,\n      getOpportunityStatuses,\n      getBuildingClasses,\n      getProjectPhases,\n      getLeadSource,\n      formValues,\n      searchUsers,\n      getBuildingTypes,\n      getOfficesByFirmId,\n      getRegions,\n      searchContacts,\n      userFirmId,\n      countries,\n      provinces,\n      cities,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      getCountries();\n      getOpportunityLabels();\n      getOpportunityStatuses();\n      getBuildingClasses();\n      getProjectPhases();\n      searchUsers('');\n      getLeadSource();\n      getRegions();\n      searchContacts('');\n      if (userFirmId !== -1) {\n        getOfficesByFirmId(userFirmId);\n      }\n\n      // retrieve the relevant location lists, particular in the case of multiple use of the location on a page,\n      // ie, the filter and project modal conflicting with each other\n      const countryId = formValues?.getIn(['country', 'eq', 'id']);\n      const provinceId = formValues?.getIn(['province', 'eq', 'id']);\n      const cityId = formValues?.getIn(['city', 'eq', 'id']);\n\n      if (countryId && provinceId && !provinces.find((province) => province.get('id') === provinceId)) {\n        dispatch(new GetProvinceAction(Number(countryId)));\n        dispatch(new GetCountryAdminDivisionAction({ countryId: Number(countryId) }));\n      }\n      if (provinceId && cityId && !cities.find((city) => city.get('id') === cityId)) {\n        dispatch(new GetCityAction(provinceId));\n      }\n    }\n\n    if (prevProps.selectedBuildingClassId !== this.props.selectedBuildingClassId && (this.props.selectedBuildingClassId !== -1)) {\n      getBuildingTypes(this.props.selectedBuildingClassId);\n    }\n\n    // whenever form values changed, immediately fetch new data\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public selectCountry = (_country: ListItem, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    // need further investigation on NaN (SPEC-3729)\n    const countryId = Number(_country?.id);\n    if (countryId != null && !isNaN(countryId)) { // temp fix\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n    } else {\n      dispatch(change(form, 'country', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (province?: ListItem, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    if (province?.id != null) {\n      dispatch(new GetCityAction(province.id));\n    } else {\n      dispatch(change(form, 'province', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (city?: ListItem) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n    if (city?.id == null) {\n      dispatch(change(form, 'city', null));\n    }\n  }\n\n  public setFormValues = (values: any) => {\n    const {\n      dispatch,\n      setSearchArgsAndSearch,\n      options,\n    } = this.props;\n\n    if (values.bidDate) {\n      if (values.bidDate.gte) {\n        values.bidDate.gte = moment.utc(values.bidDate.gte).toISOString();\n      }\n      if (values.bidDate.lte) {\n        values.bidDate.lte = moment.utc(values.bidDate.lte).toISOString();\n      }\n    }\n    if (values.createdDate) {\n      if (values.createdDate.gte) {\n        values.createdDate.gte = moment.utc(values.createdDate.gte).toISOString();\n      }\n      if (values.createdDate.lte) {\n        values.createdDate.lte = moment.utc(values.createdDate.lte).toISOString();\n      }\n    }\n\n    if (values.country && values.country.eq != null) {\n      dispatch(new GetProvinceAction(values.country.eq.id));\n      dispatch(new GetCountryAdminDivisionAction({ countryId: values.country.eq.id }));\n    }\n    if (values.province && values.province.eq != null) {\n      dispatch(new GetCityAction(values.province.eq.id));\n    }\n    dispatch(initialize(\n      PT_PROJECT_LIST_FILTER_FORM,\n      Array.isArray(values) ? {} : values\n    ));\n    if (Array.isArray(values)) {\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters: null,\n        page: 0,\n      });\n    } else {\n      // change is used for fields that does not populate with initialize (name, contact.id)\n      if (values.name) {\n        dispatch(change(\n          PT_PROJECT_LIST_FILTER_FORM,\n          'name',\n          Map(values.name)\n        ));\n      }\n      if (values.contacts) {\n        dispatch(change(\n          PT_PROJECT_LIST_FILTER_FORM,\n          'contacts',\n          Map(values.contacts)\n        ));\n      }\n      if (values.createdBy) {\n        dispatch(change(\n          PT_PROJECT_LIST_FILTER_FORM,\n          'createdBy',\n          Map(values.createdBy)\n        ));\n      }\n      if (values.createdByOfficeId) {\n        dispatch(change(\n          PT_PROJECT_LIST_FILTER_FORM,\n          'createdByOfficeId',\n          Map(values.createdByOfficeId)\n        ));\n      }\n      const assignedToValue = values.assignedTo || values['assignedTo😈id'];\n      if (assignedToValue) {\n        dispatch(change(\n          PT_PROJECT_LIST_FILTER_FORM,\n          'assignedTo😈id',\n          Map(assignedToValue)\n        ));\n      }\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      let orConditions = List();\n      const formatedValues = values.withMutations(ctx => {\n        const name = ctx.getIn(['name', 'like']);\n\n        const oppLabelId = ctx.getIn(['oppLabelId', 'eq']);\n        const oppStatusId = ctx.getIn(['oppStatusId', 'eq']);\n        const minOppValution = ctx.getIn(['oppValue', 'gte']);\n        const maxOppValution = ctx.getIn(['oppValue', 'lte']);\n\n        const tracked = ctx.getIn(['isUserTracked', 'eq', 0]);\n        const untracked = ctx.getIn(['isUserTracked', 'neq', 0]);\n\n        const nonAiSpec = ctx.getIn(['isAi', 'neq', 0]);\n        const aiSpec = ctx.getIn(['isAi', 'eq', 0]);\n        const quote = ctx.getIn(['quoteCount', 'gte', 0]);\n        const aiValidatedSpec = ctx.getIn(['hasAiValidatedSpec', 'eq', 0]);\n\n        if (nonAiSpec) {\n          orConditions = orConditions.push(fromJS({\n            and: [\n              {\n                isAi: {\n                  eq: false\n                }\n              },\n              {\n                specCount: {\n                  gte: 1\n                }\n              }\n            ],\n          }));\n        }\n        if (aiSpec) {\n          orConditions = orConditions.push(fromJS({\n            and: [\n              {\n                isAi: {\n                  eq: true\n                }\n              },\n              {\n                specCount: {\n                  gte: 1\n                }\n              }\n            ],\n          }));\n        }\n        if (quote) {\n          orConditions = orConditions.push(fromJS({\n            quoteCount: {\n              gte: 1\n            }\n          }));\n        }\n        if (aiValidatedSpec) {\n          orConditions = orConditions.push(fromJS({\n            'p.hasAiValidatedSpec': {\n              eq: true\n            }\n          }));\n        }\n        ctx.delete('isAi');\n        ctx.delete('quoteCount');\n        ctx.delete('hasAiValidatedSpec');\n        const regionId = ctx.getIn(['regionId', 'in']);\n\n        const buildingClassId = ctx.getIn(['buildingClassId', 'eq']);\n        const buildingTypeId = ctx.getIn(['buildingTypeId', 'eq']);\n\n        const phaseName = ctx.getIn(['phaseName', 'eq']);\n        const trackingOfficeId = ctx.getIn(['trackingOfficeId', 'eq']);\n        const sourceId = ctx.getIn(['sourceId', 'eq']);\n\n        const createdByUser = ctx.getIn(['createdBy', 'in']);\n        const createdByOffice = ctx.getIn(['createdByOfficeId', 'in']);\n\n        const countryId = ctx.getIn(['country', 'eq', 'id']);\n        const provinceId = ctx.getIn(['province', 'eq', 'id']);\n        const cityId = ctx.getIn(['city', 'eq', 'id']);\n\n        if (countryId) {\n          ctx.setIn(['countryId', 'eq'], countryId);\n        }\n        ctx.delete('country');\n        if (provinceId) {\n          ctx.setIn(['provinceId', 'eq'], provinceId);\n        }\n        ctx.delete('province');\n        if (cityId) {\n          ctx.setIn(['cityId', 'eq'], cityId);\n        }\n        ctx.delete('city');\n\n        if (createdByUser?.length) {\n          ctx.setIn(['createdBy', 'in'], createdByUser.map((user) => user.id));\n        } else {\n          ctx.delete('createdBy');\n        }\n\n        if (createdByOffice?.length) {\n          ctx.setIn(['createdByOfficeId', 'in'], createdByOffice.map((office) => office.id));\n        } else {\n          ctx.delete('createdByOfficeId');\n        }\n\n        const assignedTo = ctx.getIn(['assignedTo😈id', 'in']);\n        if (assignedTo && assignedTo.length) {\n          ctx.setIn(['assignedTo😈id', 'in'], assignedTo.map((user) => user.id));\n        } else {\n          ctx.delete('assignedTo😈id');\n        }\n\n        if (name && !name.length) {\n          ctx.delete('name');\n        }\n\n        const contacts = ctx.getIn(['contacts', 'in'], []);\n        const contactIds = contacts?.map(contact => contact.id);\n        if (contactIds?.length) {\n          ctx.setIn(['contact.id', 'in'], contactIds);\n        }\n        ctx.delete('contacts');\n\n        // if (nonAiSpec === aiSpec) {\n        //   ctx.delete('isAi');\n        // } else {\n        //   aiSpec ? ctx.setIn(['isAi', 'eq'], true) : ctx.setIn(['isAi', 'eq'], false);\n        //   ctx.deleteIn(['isAi', 'neq']);\n        // }\n        // (nonAiSpec || aiSpec) && ctx.setIn(['specCount', 'gte'], 1); // tslint:disable-line\n        // quote ? ctx.setIn(['quoteCount', 'gte'], 1) : ctx.delete('quoteCount');\n\n        // if (aiValidatedSpec) {\n        //   ctx.setIn(['p.hasAiValidatedSpec', 'eq'], aiValidatedSpec);\n        // }\n        // if (ctx.get('hasAiValidatedSpec')) {\n        //   ctx.delete('hasAiValidatedSpec');\n        // }\n\n        const bidDate = ctx.get('bidDate');\n        const formatedBidDate = bidDate && formatDateRangeFilter(bidDate);\n        if (formatedBidDate) {\n          ctx.set('bidDate', formatedBidDate);\n        } else if (bidDate) {\n          ctx.delete('bidDate');\n        }\n\n        const createdDate = ctx.get('createdDate');\n        const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n        if (formatedCreatedDate) {\n          ctx.set('createdDate', formatedCreatedDate);\n        } else if (createdDate) {\n          ctx.delete('createdDate');\n        }\n\n        const projectSource = ctx.getIn(['source', 'in']);\n        if (!projectSource?.length) {\n          ctx.delete('source');\n        }\n\n        if (tracked === untracked) {\n          ctx.delete('isUserTracked');\n        } else {\n          tracked ? ctx.setIn(['isUserTracked', 'eq'], true) : ctx.setIn(['isUserTracked', 'eq'], false);\n          ctx.deleteIn(['isUserTracked', 'neq']); // tslint:disable-line\n        }\n\n        regionId ? ctx.setIn(['regionId', 'in'], [Number(get(regionId, 'id'))]) : ctx.delete('regionId');\n\n        oppLabelId && ctx.setIn(['oppLabelId', 'eq'], get(oppLabelId, 'id')); // tslint:disable-line\n        oppStatusId && ctx.setIn(['oppStatusId', 'eq'], get(oppStatusId, 'id')); // tslint:disable-line\n\n        if (!oppLabelId) {\n          if (minOppValution) {\n            ctx\n              .setIn(['totalOppValue', 'gte'], minOppValution)\n              .delete('oppValue');\n          }\n          if (maxOppValution) {\n            ctx\n              .setIn(['totalOppValue', 'lte'], maxOppValution)\n              .delete('oppValue');\n          }\n        } else {\n          if (minOppValution === '' && maxOppValution === '') {\n            ctx.delete('oppValue');\n          } else if (minOppValution === '') {\n            ctx.deleteIn(['oppValue', 'gte']);\n          } else if (maxOppValution === '') {\n            ctx.deleteIn(['oppValue', 'lte']);\n          }\n        }\n\n        buildingClassId ? ctx.setIn(['buildingClassId', 'eq'], get(buildingClassId, 'id')) : ctx.delete('buildingClassId'); // tslint:disable-line\n        buildingTypeId ? ctx.setIn(['buildingTypeId', 'eq'], get(buildingTypeId, 'id')) : ctx.delete('buildingTypeId'); // tslint:disable-line\n        phaseName ? ctx.setIn(['phaseName', 'eq'], get(phaseName, 'name')) : ctx.delete('phaseName'); // tslint:disable-line\n        trackingOfficeId ? ctx.setIn(['trackingOfficeId', 'eq'], get(trackingOfficeId, 'id')) : ctx.delete('trackingOfficeId'); // tslint:disable-line\n        sourceId ? ctx.setIn(['sourceId', 'eq'], get(sourceId, 'id')) : ctx.delete('sourceId'); // tslint:disable-line\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .mapKeys((key) => {\n          return key.replace(new RegExp('😈', 'g'), '.');\n        })\n        .reduce((acc, filter, key) => {\n          if (key === 'name') {\n            return acc.withMutations(ctx => {\n              let newFilter = fromJS({ or: [] });\n              if (filter.get('like')?.length === 0) {\n                newFilter = newFilter.update('or', orList => orList.push({[key]: { 'like': '' }})); // back-end doesn't accept empty filter\n              } else {\n                filter.get('like')?.forEach(f => {\n                  newFilter = newFilter.update('or', orList => orList.push({[key]: { 'like': f }}));\n                });\n              }\n              ctx.push(newFilter);\n            });\n          } else if ((key === 'createdBy' || key === 'createdByOfficeId') && filter.get('eq')) {\n            return acc.withMutations(ctx => {\n              let newFilter = fromJS({ or: [] });\n              if (filter.get('eq').length > 0) {\n                filter.get('eq').forEach(f => {\n                  newFilter = newFilter.update('or', orList => orList.push({[key]: { 'eq': f.id }}));\n                });\n                ctx.push(newFilter);\n              }\n            });\n          } else {\n            const newFilter = fromJS({ [key]: filter });\n            return acc.push(newFilter);\n          }\n        }, orConditions.size > 0 ? List([fromJS({ or: orConditions })]) : List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.get(key[0]) && value.getIn([key[0], 'eq']) !== null;\n        });\n\n      const filters = {\n        'and': valuesWithParsedKeys.toJS(),\n      };\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      form,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        PT_PROJECT_LIST_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(form || PT_PROJECT_LIST_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      createdByUserInput,\n      contactInput,\n    } = this.state;\n    const {\n      t,\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      countries,\n      adminDivisions,\n      provinces,\n      cities,\n      formValues,\n      opportunityStatusesList,\n      opportunityLabelsList,\n      buildingTypes,\n      buildingClasses,\n      projectPhases,\n      handleSubmit,\n      firmOfficesId,\n      offices,\n      leadSources,\n      regions,\n      contacts,\n      searchContacts,\n      isLoadingContacts,\n      userFirmId,\n      userListItems,\n      searchUsers,\n      uniqueKey,\n      amplitudeData,\n    } = this.props;\n\n    const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'eq', 'id']) : -1;\n    const countryId: number = _countryId != null ? Number(_countryId) : -1;\n    const adminDivision = startCase(adminDivisions.get(countryId)) || t('projectListFilter.province');\n\n    let firmOffices = List();\n    const userFirmOfficesId = firmOfficesId.get(userFirmId);\n    if (userFirmOfficesId) {\n      firmOffices = firmOffices.withMutations(ctx => {\n        userFirmOfficesId.toList().forEach(id => {\n          ctx.push(offices.get(id));\n        });\n      });\n    }\n\n    return (\n      <>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('projectListFilter.filters')}\n            </Typography>\n            <IconButton\n              onClick={toggleDrawer}\n            >\n              <CloseIcon />\n            </IconButton>\n\n            <FilterList\n              filterType={PT_PROJECT_LIST_FILTER_LIST}\n              filterFormOpen={open}\n              formValues={formValues}\n              defaultCheckBoxLabel={t('projectListFilter.setDefaultFilter')}\n              handleSave={() => amplitude.logEvent(AMPLITUDE_EVENT.projectListFilterSave, amplitudeData({projectListFilterSaveClicked: 'Project list filter save button clicked'}))}\n              handleCreateFilter={(filterName: string) => amplitude.logEvent(AMPLITUDE_EVENT.projectListFilterCreate, amplitudeData({filterName: filterName.trim()}))}\n              handleSelectFilter={(filterName: string) => amplitude.logEvent(AMPLITUDE_EVENT.projectListFilterSelectSavedFilter, amplitudeData({selectedFilter: filterName.trim()}))}\n              handleReset={this.handleResetForm}\n              setFormValues={this.setFormValues}\n            />\n          </Grid>\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Content */}\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* Advanced filter */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.advancedSearch')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='name.like'\n                    props={{\n                      inputProps: {\n                        label: t('projectListFilter.projectName'),\n                        multiple: true,\n                        defaultValue: defaultMultiSelectValue,\n                        freeSolo: true,\n                        placeholder: t('projectListFilter.projectNamePlaceholder')\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldAutocomplete}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* location */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.location')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.country'),\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: countries.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCountry,\n                      },\n                    }}\n                    name='country.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: adminDivision,\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: provinces.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectProvince,\n                      },\n                    }}\n                    name='province.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.city'),\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: cities.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return value.length !== 0;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCity,\n                      },\n                    }}\n                    name='city.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Region filter */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.region')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='regionId.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: regions && regions.toJS(),\n                        label: t('projectListFilter.selectRegion'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* opp stuff */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.opportunityStatus')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='oppLabelId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: opportunityLabelsList && opportunityLabelsList.toJS(),\n                        label: t('projectListFilter.opportunityLabelLabel'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      helperText: false\n                    }}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='oppStatusId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: opportunityStatusesList && opportunityStatusesList.toJS(),\n                        label: t('projectListFilter.opportunityStatusLabel'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      helperText: false\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* opportunity valuation */}\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='oppValue.gte'\n                    props={{\n                      label: t('projectListFilter.minOppValue'),\n                      inputProps: {\n                        type: 'number',\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[oppValuationValidateFunc]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('projectListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='oppValue.lte'\n                    props={{\n                      label: t('projectListFilter.maxOppValue'),\n                      inputProps: {\n                        type: 'number',\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[oppValuationValidateFunc]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* required date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.bidDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* building class and type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.buildingClassAndType')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingClassId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingClasses.toIndexedSeq().toJS(),\n                        label: t('projectListFilter.buildingClass'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                        onChange: (event: object, value: any) => !value && dispatch(autofill(PT_PROJECT_LIST_FILTER_FORM, 'buildingTypeId', undefined))\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingTypeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingTypes && buildingTypes.toJS(),\n                        label: t('projectListFilter.buildingType'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[createdDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[createdDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created by */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdBy')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdBy.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        // label: t('projectListFilter.createdByPlaceholder'),\n                        multiple: true,\n                        placeholder: t('projectListFilter.createdByPlaceholder'),\n                        options: userListItems.toJS(),\n                        inputValue: this.state.createdByUserInput,\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>,\n                        onInputChange: (event: object, val: string, reason: string) => {\n                          if (reason === 'input') {\n                            searchUsers(val);\n                          }\n                          // have to set the inputValue like below to prevent it from resetting\n                          if (reason !== 'reset' || (reason === 'reset' && event)) {\n                            this.setState({ createdByUserInput: val });\n                          }\n                        },\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created by office */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdByOffice')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdByOfficeId.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        // label: t('projectListFilter.createdByOfficePlaceholder'),\n                        multiple: true,\n                        placeholder: t('projectListFilter.createdByOfficePlaceholder'),\n                        options: firmOffices.toJS(),\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? option.officeName : null,\n                        renderOption: option => option && <Typography>{option.officeName}</Typography>,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* assigned to */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('quoteListFilter.assignedTo')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='assignedTo😈id.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        multiple: true,\n                        placeholder: t('quoteListFilter.createdByPlaceholder'),\n                        options: userListItems.toJS(),\n                        filterSelectedOptions: true,\n                        inputValue: this.state.assignedToInput,\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>,\n                        onInputChange: (event: object, val: string, reason: string) => {\n                          if (reason === 'input') {\n                            searchUsers(val, userFirmId);\n                          }\n                          // have to set the inputValue like below to prevent it from resetting\n                          if (reason !== 'reset' || (reason === 'reset' && event)) {\n                            this.setState({ assignedToInput: val });\n                          }\n                        },\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* project phase */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.projectPhase')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='phaseName.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: projectPhases && projectPhases.toJS(),\n                        label: t('projectListFilter.selectProjectPhase'),\n                        getOptionLabel: option => option ? option.title : null,\n                        renderOption: option => option && option.title,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Source */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.source')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='source.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        multiple: true,\n                        placeholder: t('projectListFilter.projectSourcePlaceholder'),\n                        options: ['emailBidtracer', 'documents', 'emailAttachment'],\n                        getOptionSelected: (option, value) => option === value,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? t(`projectListFilter.${option}Source`) : null,\n                        renderOption: option => option && <Typography>{t(`projectListFilter.${option}Source`)}</Typography>,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Tracked by me */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.trackedByMe')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-evenly'\n                item={true}\n                xs={12}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isUserTracked.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.tracked'),\n                      color: 'primary',\n                      inputProps: {\n                        classes: {\n                          root: classes.checkbox\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isUserTracked.neq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.untracked'),\n                      color: 'primary',\n                      inputProps: {\n                        classes: {\n                          root: classes.checkbox\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* spec and quote availablity */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.availability')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                item={true}\n                xs={12}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isAi.neq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.hasNonAiSpec'),\n                      color: 'primary',\n                      helperText: false,\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isAi.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.hasAiSPec'),\n                      color: 'primary',\n                      helperText: false,\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='quoteCount.gte'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.hasQuote'),\n                      color: 'primary',\n                      inputProps: {\n                        classes: {\n                          root: classes.checkbox\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='hasAiValidatedSpec.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('projectListFilter.readyQuoteValidated'),\n                      color: 'primary',\n                      inputProps: {\n                        classes: {\n                          root: classes.checkbox\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* project valuation */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.projectValuation')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='valuation.gte'\n                    props={{\n                      label: t('projectListFilter.minimum'),\n                      inputProps: {\n                        type: 'number',\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[valuationValidateFunc]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('projectListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='valuation.lte'\n                    props={{\n                      label: t('projectListFilter.maximum'),\n                      inputProps: {\n                        type: 'number',\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[valuationValidateFunc]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* tracked by */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.trackedByOffice')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='trackingOfficeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: firmOffices.toJS(),\n                        label: t('projectListFilter.selectFirmOffice'),\n                        getOptionLabel: option => option ? option.officeName : null,\n                        renderOption: option => option && option.officeName,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n              {/* Contacts filter */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.contact')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='contacts.in'\n                    props={{\n                      inputProps: {\n                        getOptionSelected: (option: Contact, value: Contact) => {\n                          return option.id === value.id;\n                        },\n                        options: contacts && contacts.toJS(),\n                        label: t('projectListFilter.enterNames'),\n                        getOptionLabel: (option) => {\n                          const { firstName, lastName, organization } = option;\n                          if (firstName && lastName) {\n                            return firstName + ' ' + lastName;\n                          }\n                          if (firstName) {\n                            return firstName;\n                          }\n                          return organization;\n                        },\n                        filterSelectedOptions: true,\n                        renderOption: (option: Contact, state) => {\n                          const { firstName, lastName, email, organization, contactType, address1, address2, cityName, provinceCode, countryName } = option;\n                          const fullName = [firstName, lastName].filter(name => name).join(' ').trim();\n                          return (\n                            <Grid container={true} alignItems='center' wrap='nowrap' spacing={2}>\n                              <Grid item={true}>\n                                {this.AvatarOrLogo(option)}\n                              </Grid>\n                              <Grid zeroMinWidth={true} item={true} container={true} direction='column'>\n                                <Typography variant='subtitle1' color='textPrimary' style={{ wordWrap: 'break-word'}}>{fullName || organization}</Typography>\n                                <Typography variant='body2' style={{ wordWrap: 'break-word'}}>{email}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{contactType}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{address1 || address2}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{cityName} {provinceCode} {countryName}</Typography>\n                              </Grid>\n                            </Grid>\n                          );\n                        },\n                        multiple: true,\n                        defaultValue: defaultMultiSelectValue,\n                        inputValue: this.state.contactInput,\n                        onInputChange: (event: object, val: string, reason: string) => {\n                          if (reason === 'input') {\n                            searchContacts(val);\n                          }\n                          // have to set the inputValue like below to prevent it from resetting\n                          if (reason !== 'reset' || (reason === 'reset' && event)) {\n                            this.setState({ contactInput: val });\n                          }\n                        },\n                        filterOptions: (contactOptions, state) => {\n                          if (isLoadingContacts || contactOptions === null || contactOptions === undefined) {\n                            return [];\n                          } // prevent showing options while component is still loading data from back-end\n                          return contactOptions;\n                        },\n                        loading: isLoadingContacts,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldAutocomplete}\n                  />\n                </Grid>\n              </Grid>\n              {/* Lead Source and Reference Number */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.leadSourceRefNumber')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='sourceId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: leadSources && leadSources.toJS(),\n                        label: t('projectListFilter.leadSource'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='sourceName.eq'\n                    props={{\n                      label: t('projectListFilter.refNumber'),\n                      inputProps: {\n                        type: 'text',\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    component={FieldTextField}\n                  />\n                </Grid>\n              </Grid>\n            </Grid>\n          </form>\n        </Drawer>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(1, 2, 0, 2),\n    maxWidth: '370px'\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 125px)`,\n    // overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  buttonContainer: {\n    marginTop: 0,\n  },\n  avatar: {\n    background: theme.palette.primary.main\n  },\n  avatarText: {\n    color: theme.palette.primary.contrastText\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst customSelectStyles = {\n  control: providedStyles => ({\n    ...providedStyles,\n    borderWidth: `0 0 1px 0`,\n    borderRadius: '0',\n    boxShadow: 'none',\n    paddingLeft: '0',\n    borderColor: 'rgba(0, 0, 0, 0.8)',\n    cursor: 'text'\n  }),\n  multiValue: providedStyles => ({\n    ...providedStyles,\n    height: '30px',\n    display: 'flex',\n    alignItems: 'center',\n    borderRadius: '5px',\n  }),\n  multiValueLabel: providedStyles => ({\n    ...providedStyles,\n    display: 'flex',\n    alignItems: 'center',\n  }),\n  multiValueRemove: providedStyles => ({\n    ...providedStyles,\n    cursor: 'pointer',\n    '&:hover': {\n      backgroundColor: 'transparent',\n    }\n  }),\n};\n\nconst mapStateToProps = (state, ownProps: IProjectListFilterComponentProps) => {\n\n  const form = ownProps.form != null ? ownProps.form : PT_PROJECT_LIST_FILTER_FORM;\n  const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n  const selectedBuildingClassId = formValues.getIn(['buildingClassId', 'eq', 'id'], -1);\n\n  return {\n    form,\n    selectedBuildingClassId,\n    ...createStructuredSelector({\n      opportunityStatusesList: makeSelectOpportunityStatusesList(),\n      opportunityLabelsList: makeSelectOpportunityLabelsList(),\n      adminDivisions: makeSelectAdminDivisions(),\n      buildingTypes: makeSelectBuildingTypes(selectedBuildingClassId),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      buildingClasses: makeSelectBuildingClasses(),\n      formValues: getFormValues(form),\n      projectPhases: makeSelectPhases(),\n      firmOfficesId: makeSelectFirmOfficeIdsMap(),\n      offices: makeSelectOffices(),\n      leadSources: makeSelectLeadSources(),\n      regions: makeSelectRegionList(),\n      userId: makeSelectUserId(),\n      contacts: makeSelectSearchedContacts(),\n      isLoadingContacts: makeSelectContactsLoading(),\n      userFirmId: makeSelectUserFirmId(),\n      userListItems: makeSelectSearchedUsersWithDetailAsListItem(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getOpportunityLabels: () => {\n      dispatch(new GetOpportunityLabelsAction());\n    },\n    getOpportunityStatuses: () => {\n      dispatch(new GetOpportunityStatusesAction());\n    },\n    getBuildingTypes: (id: number) => {\n      dispatch(new GetBuildingTypesAction(id));\n    },\n    getBuildingClasses: () => {\n      dispatch(new GetBuildingClassesAction());\n    },\n    getProjectPhases: () => {\n      dispatch(new GetPreferencesAction({\n        userType: 'office',\n        preference: PreferenceType.ProjectPhase\n      }));\n    },\n    searchUsers: (searchTerm: string, firmId?: number) => {\n      dispatch(new SearchUsersQuickAction({searchTerm, firmId, delay: false}));\n    },\n    getOfficesByFirmId: (firmId: number) => {\n      dispatch(new GetOfficesByFirmIdAction({firmId}));\n    },\n    getLeadSource: () => {\n      dispatch(new GetLeadSourcesAction());\n    },\n    getRegions: () => {\n      dispatch(new GetRTypeRegionsAction());\n    },\n    searchContacts: (searchTerm: string) => {\n      dispatch(new SearchContactsAction({ searchTerm }));\n    },\n    getFiltersByType: (filterType: string) => {\n      dispatch(new GetFiltersByType({ filterType }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectListFilterComponentProps>> (\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: PT_PROJECT_LIST_FILTER_FORM }),\n  withAmplitudeData,\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n)(ProjectListFilter);\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? prefix + \": \" + provided : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","import type { Span, SpanJSON, SpanTimeInput, TraceContext } from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\nimport type { Span as SpanClass } from '../tracing/span';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    data,\n    op,\n    parent_span_id,\n    span_id,\n    status,\n    tags,\n    trace_id,\n    origin,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n  if (spanIsSpanClass(span)) {\n    return span.getSpanJSON();\n  }\n\n  // Fallback: We also check for `.toJSON()` here...\n  // eslint-disable-next-line deprecation/deprecation\n  if (typeof span.toJSON === 'function') {\n    // eslint-disable-next-line deprecation/deprecation\n    return span.toJSON();\n  }\n\n  return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span: Span): span is SpanClass {\n  return typeof (span as SpanClass).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  // eslint-disable-next-line no-bitwise\n  return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n  return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\ninterface VueViewModel {\n  // Vue3\n  __isVue?: boolean;\n  // Vue2\n  _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","var createSymbol = function createSymbol(name) {\n  return \"@@redux-saga/\" + name;\n};\n\nvar CANCEL =\n/*#__PURE__*/\ncreateSymbol('CANCEL_PROMISE');\nvar CHANNEL_END_TYPE =\n/*#__PURE__*/\ncreateSymbol('CHANNEL_END');\nvar IO =\n/*#__PURE__*/\ncreateSymbol('IO');\nvar MATCH =\n/*#__PURE__*/\ncreateSymbol('MATCH');\nvar MULTICAST =\n/*#__PURE__*/\ncreateSymbol('MULTICAST');\nvar SAGA_ACTION =\n/*#__PURE__*/\ncreateSymbol('SAGA_ACTION');\nvar SELF_CANCELLATION =\n/*#__PURE__*/\ncreateSymbol('SELF_CANCELLATION');\nvar TASK =\n/*#__PURE__*/\ncreateSymbol('TASK');\nvar TASK_CANCEL =\n/*#__PURE__*/\ncreateSymbol('TASK_CANCEL');\nvar TERMINATE =\n/*#__PURE__*/\ncreateSymbol('TERMINATE');\nvar SAGA_LOCATION =\n/*#__PURE__*/\ncreateSymbol('LOCATION');\n\nexport { CANCEL, CHANNEL_END_TYPE, IO, MATCH, MULTICAST, SAGA_ACTION, SAGA_LOCATION, SELF_CANCELLATION, TASK, TASK_CANCEL, TERMINATE };\n","import { LogLevel, Logger as ILogger } from '@amplitude/analytics-types';\n\nconst PREFIX = 'Amplitude Logger ';\n\nexport class Logger implements ILogger {\n  logLevel: LogLevel;\n\n  constructor() {\n    this.logLevel = LogLevel.None;\n  }\n\n  disable(): void {\n    this.logLevel = LogLevel.None;\n  }\n\n  enable(logLevel: LogLevel = LogLevel.Warn): void {\n    this.logLevel = logLevel;\n  }\n\n  log(...args: any[]): void {\n    if (this.logLevel < LogLevel.Verbose) {\n      return;\n    }\n    console.log(`${PREFIX}[Log]: ${args.join(' ')}`);\n  }\n\n  warn(...args: any[]): void {\n    if (this.logLevel < LogLevel.Warn) {\n      return;\n    }\n    console.warn(`${PREFIX}[Warn]: ${args.join(' ')}`);\n  }\n\n  error(...args: any[]): void {\n    if (this.logLevel < LogLevel.Error) {\n      return;\n    }\n    console.error(`${PREFIX}[Error]: ${args.join(' ')}`);\n  }\n\n  debug(...args: any[]): void {\n    if (this.logLevel < LogLevel.Debug) {\n      return;\n    }\n    // console.debug output is hidden by default in chrome\n    console.log(`${PREFIX}[Debug]: ${args.join(' ')}`);\n  }\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z\"\n}), 'FileCopy');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  Typography,\n  Button,\n  Tooltip,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/styles';\nimport { IAction } from 'ats-utils/src';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport {\n  withTranslation,\n} from 'react-i18next';\n\ninterface IOverRideStyles {\n  logo?: object;\n  subtitle?: object;\n  addButton?: object;\n  noGrow?: boolean;\n}\n\nexport interface IGetEmptyViewProps {\n  classes?: any;\n  image?: any;\n  svg?: any;\n  onButtonClicked?: React.MouseEventHandler;\n  emptyviewSubtitle?: string;\n  emptyviewAddButton?: string;\n  emptyviewAddButtonProps?: object;\n  disabledAdd?: boolean;\n  disabledAddTooltip?: string;\n  emptyviewAlt: string;\n  emptyviewNotFound: string;\n  overRideStyles?: IOverRideStyles;\n}\n\nconst EmptyView = (EmptyViewProps: IGetEmptyViewProps) => {\n  const {\n    classes,\n    image,\n    svg,\n    onButtonClicked,\n    emptyviewSubtitle,\n    emptyviewAddButton,\n    emptyviewAddButtonProps,\n    disabledAdd,\n    disabledAddTooltip,\n    emptyviewAlt,\n    emptyviewNotFound,\n    overRideStyles,\n  } = EmptyViewProps;\n  return(\n    <>\n      <Grid\n        container={true}\n        direction='column'\n        justify='center'\n        alignItems='center'\n        className={classes.emptyContainer}\n        style={{ flexGrow: overRideStyles && overRideStyles.noGrow ? 0 : 1}}\n      >\n        <Grid\n          item={true}\n        >\n          {\n            image\n              ? <img\n                  src={image}\n                  className={classes.logo}\n                  style={overRideStyles && overRideStyles.logo ? overRideStyles.logo : {}}\n                  alt={emptyviewAlt}\n                />\n              : svg\n          }\n        </Grid>\n        <Grid\n          item={true}\n        >\n          <Typography\n            variant='h6'\n            className={classes.title}\n          >\n            {emptyviewNotFound}\n          </Typography>\n          {\n            emptyviewSubtitle &&\n              <Typography\n                className={classes.subtitle}\n                style={overRideStyles && overRideStyles.subtitle ? overRideStyles.subtitle : {}}\n              >\n                {emptyviewSubtitle}\n              </Typography>\n          }\n        </Grid>\n        {\n          emptyviewAddButton &&\n            <Grid\n              item={true}\n            >\n              <Tooltip title={disabledAdd ? disabledAddTooltip || '' : ''}>\n                <span>\n                  <Button\n                    variant='contained'\n                    color='primary'\n                    className={classes.addButton}\n                    onClick={onButtonClicked}\n                    disabled={disabledAdd}\n                    style={overRideStyles && overRideStyles.addButton ? overRideStyles.addButton : {}}\n                    {...emptyviewAddButtonProps}\n                  >\n                    {emptyviewAddButton}\n                  </Button>\n                </span>\n              </Tooltip>\n            </Grid>\n        }\n      </Grid>\n    </>\n  );\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  emptyContainer: {\n    textAlign: 'center',\n    flexGrow: 1,\n    padding: theme.spacing(4, 0),\n  },\n  logo: {\n    width: 125,\n    maxWidth: '100%',\n    margin: theme.spacing(3),\n  },\n  title: {\n    marginTop: theme.spacing(2),\n  },\n  subtitle: {\n    marginTop: theme.spacing(),\n  },\n  addButton: {\n    zIndex: theme.zIndex.appBar,\n    marginTop: theme.spacing(2)\n  },\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IGetEmptyViewProps>>(\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n  withStyles(styles),\n)(EmptyView);\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport {\n  FormControl,\n  FormHelperText,\n  FormControlLabel,\n} from '@material-ui/core';\nimport Radio, {\n  RadioProps,\n} from '@material-ui/core/Radio';\nimport {\n  is,\n} from 'immutable';\n\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\n\nconst handleChange = (value, customOnChange?: any) => (onChange) => (evt, checked) => {\n  onChange(checked ? value : null, evt, checked);\n  if (customOnChange) {\n    customOnChange(value);\n  }\n};\n\nconst handleBlur = (value) => (onBlur) => (evt) => {\n  const checked = evt.target.checked;\n  onBlur(checked ? value : null, evt);\n};\n\nexport interface IFieldRadioComponentProps extends RadioProps {\n  formControlProps?: object;\n  formControlLabelProps?: object;\n  formHelperTextProps?: object;\n  inputProps?: object;\n  label?: React.ReactNode;\n  require?: boolean;\n  labelProps?: object;\n  checkedValue?: any;\n  helperText?: boolean;\n  customOnChange?: any;\n}\n\ninterface IFieldRadioProps extends IFieldRadioComponentProps {\n\n}\n\ntype FieldRadioProps = IFieldRadioProps & WrappedFieldProps;\n\nconst FieldRadio: React.SFC<FieldRadioProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched, // eslint-disable-line no-unused-vars\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    require = false,\n    inputProps = {},\n    formControlProps = {},\n    formControlLabelProps = {},\n    formHelperTextProps = {},\n    checkedValue = true,\n    helperText = true,\n    customOnChange,\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value !== null && customOverrides.value !== '' ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n  if (customOverrides.onChange != null) {\n    customOverrides.onChange = handleChange(checkedValue, customOnChange)(customOverrides.onChange);\n  }\n  if (customOverrides.onBlur != null) {\n    customOverrides.onBlur = handleBlur(checkedValue)(customOverrides.onBlur);\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <FormControlLabel\n        label={(require && typeof label === 'string') ? `${label} *` : label}\n        control={\n          <Radio\n            checked={is(checkedValue, customOverrides.value)}\n            {...customOverrides}\n            {...rest}\n            value={`${checkedValue}`}\n          />\n        }\n        {...formControlLabelProps}\n      />\n      {helperText && <FormHelperText id='helper-text' {...formHelperTextProps}>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nexport default FieldRadio;\n","import _ from 'lodash';\nimport * as uuid from 'uuid/v1';\nimport { List, Map, fromJS } from 'immutable';\nimport {getDefaultInitialValues} from '../../containers/Quote/Quote';\nimport {Product} from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport {SPEC_TO_QUOTE_PRODUCT_SOURCE} from '../../constants';\nimport {setupTemplateCells} from '../../utils/specToQuote';\nimport i18next from 'i18next';\nimport PimServiceApi from '../../modules/PimModule/PimServiceApi';\nimport {ISpecToQuoteLinkDataInForm} from '../SpecToQuote/interfaces';\n\nconst cleanString = (value: any): string => {\n  if (value == null) { return ''; }\n  return String(value).trim();\n};\n\nconst getImportedPriceCells = (importPricingResults) => {\n  const importPricingLogs = [];\n  if (importPricingResults) {\n    // Use a map to keep the LAST (newest) entry per key, so newer records with\n    // bidResponseProductId take precedence over older records without it\n    const entriesByKey: Record<string, any> = {};\n\n    _.forEach(importPricingResults, (result) => {\n      let info;\n      try { info = JSON.parse(result?.info); } catch (e) { return; }\n      if (!Array.isArray(info)) { return; }\n      _.forEach(info, (item) => {\n        const key = `${item.sectionId}-${item.quoteProductId}-${item.fieldId}`;\n        const newInfoItem = {\n          bidResponse: item?.bidResponse || {\n            id: result?.BidInvitationResponse?.id,\n            status: result?.BidInvitationResponse?.status,\n          },\n          sectionId: item?.sectionId,\n          quoteProductId: item?.quoteProductId,\n          fieldId: item?.fieldId,\n          fieldValue: item?.fieldValue,\n          regionId: item?.regionId,\n          bidResponseProductId: item?.bidResponseProductId || null,\n          originalQuoteProductId: item?.originalQuoteProductId || null,\n        };\n        entriesByKey[key] = newInfoItem;\n      });\n    });\n\n    Object.values(entriesByKey).forEach(entry => {\n      importPricingLogs.push(entry);\n    });\n  }\n  return importPricingLogs;\n};\n\nconst findMatchImportPricingBid = (sectionId, quoteProductId, templateCell, importedPrices, selectedRegionId) => {\n  const templateCellFieldId = templateCell.get('id');\n  let matchResult = null;\n  if (importedPrices?.length > 0) {\n    matchResult = importedPrices.find((log) => {\n      return log?.sectionId === sectionId\n        && log?.quoteProductId === quoteProductId\n        && log?.fieldId === templateCellFieldId\n        && log?.regionId === selectedRegionId;\n    }) || null;\n  }\n  return matchResult;\n};\n\nconst findMatchImportPricingData = (sections, importPricingSectionProducts) => {\n  const matchImportPricingProducts = [];\n  sections.map((section) => {\n    const sectionObj = section.toJS();\n    if (sectionObj?.sectionId && sectionObj?.products) {\n      const sectionId = sectionObj.sectionId;\n      const quoteProducts = sectionObj?.products;\n      _.forEach(quoteProducts, (quoteProduct) => {\n        const matchProducts = importPricingSectionProducts.filter((item) => {\n          return item.sectionId === sectionId && item.quoteProductId === quoteProduct.quoteProductId;\n        });\n        if (matchProducts.length > 0) {\n          _.forEach(quoteProduct?.templateCells, (quoteProductTemplateCell) => {\n            _.forEach(matchProducts, (matchProduct) => {\n              if (matchProduct.fieldId === quoteProductTemplateCell.id && matchProduct.fieldValue?.toString() === quoteProductTemplateCell.fieldValue) {\n                matchImportPricingProducts.push(matchProduct);\n              }\n            });\n          });\n        }\n      });\n    }\n  });\n  return matchImportPricingProducts;\n};\n\nconst getSavedImportPricing = (quoteForm, importPricingFormSectionProducts) => {\n  const matchImportBidResponsePricingProducts = {\n    bidResponseId: null,\n    matchImportPricingProducts: []\n  };\n  const sectionsSize = quoteForm?.getIn(['values', 'sections'])?.size || 0;\n  if (sectionsSize && importPricingFormSectionProducts?.length > 0) {\n    const bidResponseSectionProducts = importPricingFormSectionProducts[0];\n    if (bidResponseSectionProducts && bidResponseSectionProducts?.bidResponse?.id) {\n      matchImportBidResponsePricingProducts.bidResponseId = bidResponseSectionProducts?.bidResponse?.id;\n      const quoteSections = quoteForm.getIn(['values', 'sections']);\n      matchImportBidResponsePricingProducts.matchImportPricingProducts = findMatchImportPricingData(quoteSections, importPricingFormSectionProducts);\n    }\n  }\n  return matchImportBidResponsePricingProducts;\n};\n\nconst copySourceQuote = ({\n                            spec,\n                            sourceSpecToQuoteLinkedList,\n                            quoteFormValues,\n                            loggedInUserData,\n                            regions,\n                            defaultQuoteQuickText,\n                            defaultManufacturerDiscountsManufacturerIds,\n                            defaultTerms,\n                            defaultComments,\n                            defaultDiscountList,\n                            nonStockProductNote,\n                            hasFeatStockLevelAclRole,\n                            sourceQuote,\n                            defaultTemplate\n}) => {\n  const isRequestProductInitialSelectAllPreference = true;\n  const quoteRegionId: string = quoteFormValues?.getIn(['region', 'id']) || 'default';\n  const drawings = spec?.get('drawings');\n  const fieldsData = defaultTemplate?.get('fieldsData') || Map();\n  const currency = defaultTemplate?.getIn(['settings', 'currency']);\n  const specId = sourceQuote?.createdFromSpecId;\n  const specSections = [];\n\n  if (sourceQuote?.sections?.length > 0) {\n    _.forEach(sourceQuote?.sections, (section) => {\n      if (section?.products) {\n        const seenPackageIds = new Set();\n        const updatedQuoteProducts = [];\n        _.forEach(section.products, (specProduct) => {\n          const specUniquePackageId = specProduct?.uniquePackageId;\n          if (specUniquePackageId && seenPackageIds.has(specUniquePackageId)) {\n            return; // skip same uniquePackage\n          }\n          if (specUniquePackageId) {\n            seenPackageIds.add(specUniquePackageId);\n          }\n          const specProductId = String(specProduct?.specToQuoteValues?.specProductId);\n          const isSpecProductExistInSpecToQuoteLinkedList = sourceSpecToQuoteLinkedList?.has(specProductId);\n          if (isSpecProductExistInSpecToQuoteLinkedList) {\n            const linkedSpecToQuoteValues = sourceSpecToQuoteLinkedList.get(specProductId);\n            const recommendations = linkedSpecToQuoteValues.get('recommendations');\n            // take the first recommendation as default\n            const defaultRecommended = recommendations?.get(0);\n\n            // if no default recommendation, create a product with spec product info\n            if (!defaultRecommended) {\n              const specToQuoteValues: IMap<ISpecToQuoteLinkDataInForm> = linkedSpecToQuoteValues.withMutations((ctx) => (\n                ctx\n                  .set('linked', false)\n                  .set('type', null)\n                  .set('source', null)\n                  .set('selectedRecommendedIndex', -1)\n                  .set('feedback', null)\n                  .set('specProduct', ctx.get('specProduct'))\n                  .set('specProductNote', ctx.get('note') || ctx.get('specProductNote') || ctx.getIn(['specProduct', 'note']) || '')\n                  .delete('recommendations')\n              ));\n\n              const emptyProduct = fromJS({\n                id: -1,\n                quoteProductId: uuid(),\n                firmProductId: -1,\n                note: '',\n                label: '',\n                defaultPrint: true,\n                specProductId: linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']),\n                specDrawingProductId: linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']),\n                specToQuoteValues,\n                isRequestingProduct: false,\n                templateCells: setupTemplateCells(fieldsData, currency, quoteRegionId, fromJS({}))\n              });\n              updatedQuoteProducts.push(emptyProduct);\n              return;\n            }\n\n            const recommendedProduct = defaultRecommended?.get('quoteProduct');\n            // if it doesn't exist than we can assume there is no link\n            const isLinked = linkedSpecToQuoteValues.getIn(['recommendations', 0, 'source']) === SPEC_TO_QUOTE_PRODUCT_SOURCE.specToQuote;\n            const nonStockTerm: string = nonStockProductNote?.get('blob');\n\n            if (recommendedProduct?.get('flag') === 'package') {\n              const packageProducts = recommendedProduct.get('products');\n              const uniquePackageId = uuid();\n              const productQuantities = recommendedProduct.get('productQuantities') ?? List();\n\n              if (!packageProducts?.count()) {\n                // return updatedQuoteProducts.push(emptyQuoteProductWithSpecProduct);\n                return;\n              }\n\n              // extract each product from the package\n              packageProducts?.forEach((product, productIndex) => {\n                const firmProduct = product?.get('firmProduct') || null;\n                const productNote = firmProduct.get('note') || null;\n                const noteWithNonStockTerm = hasFeatStockLevelAclRole\n                  ? productNote && nonStockTerm\n                    ? productNote + '\\n' + nonStockTerm\n                    : !nonStockTerm\n                      ? productNote\n                      : nonStockTerm\n                  : productNote;\n                const stockable = firmProduct.getIn(['stockLevels', quoteRegionId, 'stockable']) ?? firmProduct.getIn(['stockLevels', 'default', 'stockable']);\n                const stockRegionExist = typeof stockable === 'boolean';\n                const productsCount = product.get('products')?.count() || 0;\n\n                const specToQuoteValues: IMap<ISpecToQuoteLinkDataInForm> = linkedSpecToQuoteValues.withMutations((ctx) => (\n                  ctx\n                    .set('linked', isLinked)\n                    .set('type', defaultRecommended.get('type') || null)\n                    .set('source', defaultRecommended.get('source') || null)\n                    .set('selectedRecommendedIndex', linkedSpecToQuoteValues.get('recommendations') ? 0 : -1)\n                    .set('feedback', null)\n                    .set('specProduct', ctx.get('specProduct'))\n                    .set('specProductNote', ctx.get('note') || ctx.get('specProductNote') || ctx.getIn(['specProduct', 'note']) || '')\n                    .delete('recommendations')\n                ));\n\n                const note = (productIndex === productsCount - 1\n                  ? stockRegionExist && !stockable\n                    ? noteWithNonStockTerm\n                    : productNote\n                  : stockRegionExist && !stockable\n                    ? nonStockTerm\n                    : null) ?? null;\n\n                const quoteProduct = firmProduct && firmProduct.withMutations((ctx) => {\n                  ctx\n                    .set('quoteProductId', uuid())\n                    .set('note', note)\n                    .set('specProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                    .set('specDrawingProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                    .set('packageId', recommendedProduct.get('id'))\n                    .set('uniquePackageId', uniquePackageId)\n                    .set('productIndex', productIndex)\n                    .set('packageNumber', recommendedProduct.get('number'))\n                    .set('packageManufacturerName', recommendedProduct.get('manufacturerName'))\n                    .set('label', ctx.get('productNumber'))\n                    .set('isRecommended', true)\n                    .set('productQuantityInPackage', productQuantities.get(productIndex) || 1)\n                    // set specToQuoteValues for specProduct related info\n                    .set('specToQuoteValues', specToQuoteValues)\n                    .set('templateCells', setupTemplateCells(fieldsData, currency, quoteRegionId, firmProduct.set('productQuantityInPackage', productQuantities.get(productIndex) || 1)))\n                    .set('isRequestingProduct', false);\n                });\n                updatedQuoteProducts.push(quoteProduct);\n              });\n              // return products;\n            } else if (Boolean(recommendedProduct)) {\n              const productNote = recommendedProduct?.get('note') || null;\n              const noteWithNonStockTerm = hasFeatStockLevelAclRole\n                ? productNote && nonStockTerm\n                  ? productNote + '\\n' + nonStockTerm\n                  : !nonStockTerm\n                    ? productNote\n                    : nonStockTerm\n                : productNote;\n              const stockable = recommendedProduct.getIn(['stockLevels', quoteRegionId, 'stockable']) ?? recommendedProduct.getIn(['stockLevels', 'default', 'stockable']);\n              const stockRegionExist = typeof stockable === 'boolean';\n\n              const specToQuoteValues: IMap<ISpecToQuoteLinkDataInForm> = linkedSpecToQuoteValues && linkedSpecToQuoteValues\n                .set('linked', isLinked)\n                .set('type', defaultRecommended.get('type') || null)\n                .set('source', defaultRecommended.get('source') || null)\n                .set('selectedRecommendedIndex', linkedSpecToQuoteValues.get('recommendations') ? 0 : -1)\n                .set('feedback', null)\n                .set('specProduct', linkedSpecToQuoteValues.get('specProduct'))\n                .set('specProductNote', linkedSpecToQuoteValues.getIn(['specProduct', 'note']) || '')\n                .delete('recommendations');\n\n              const quoteProduct = recommendedProduct.withMutations(ctx => {\n                ctx\n                  .set('quoteProductId', uuid())\n                  .set('note', stockRegionExist && !stockable ? noteWithNonStockTerm : productNote)\n                  .set('label', ctx.get('productNumber'))\n                  .set('defaultPrint', true)\n                  .set('isRecommended', true)\n                  .set('specProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                  .set('specDrawingProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                  .set('specToQuoteValues', specToQuoteValues)\n                  .set('templateCells', setupTemplateCells(fieldsData, currency, quoteRegionId, recommendedProduct))\n                  .set('isRequestingProduct', false);\n              });\n              updatedQuoteProducts.push(quoteProduct);\n            } else {\n              // empty firmProduct with specProduct\n            }\n          } else if (!Boolean(sourceSpecToQuoteLinkedList) || sourceSpecToQuoteLinkedList.isEmpty()) {\n            // updatedQuoteProducts.push(emptyQuoteProductWithSpecProduct);\n          } else if (!specProduct?.specToQuoteValues?.specProductId) {\n            // Non-spec product (manually added) — add directly with fresh quoteProductId\n            const productNote = specProduct?.note || null;\n            const nonStockTerm: string = nonStockProductNote?.get('blob');\n            const noteWithNonStockTerm = hasFeatStockLevelAclRole\n              ? productNote && nonStockTerm\n                ? productNote + '\\n' + nonStockTerm\n                : !nonStockTerm\n                  ? productNote\n                  : nonStockTerm\n              : productNote;\n            const stockable = specProduct?.stockLevels?.[quoteRegionId]?.stockable ?? specProduct?.stockLevels?.default?.stockable;\n            const stockRegionExist = typeof stockable === 'boolean';\n            const nonSpecProduct = fromJS(specProduct).withMutations(ctx => {\n              ctx\n                .set('quoteProductId', uuid())\n                .set('label', ctx.get('productNumber') || ctx.get('label') || '')\n                .set('note', stockRegionExist && !stockable ? noteWithNonStockTerm : productNote)\n                .set('defaultPrint', true)\n                .set('isRequestingProduct', false)\n                .set('templateCells', setupTemplateCells(fieldsData, currency, quoteRegionId, fromJS(specProduct)));\n            });\n            updatedQuoteProducts.push(nonSpecProduct);\n          } else if (specProduct?.specToQuoteValues?.specProductId) {\n            // Spec product not in linked list (e.g. AI didn't match it) — add using API's specToQuoteValues\n            // Enrich specToQuoteValues.specProduct with aiAnnotation from specProductInfo if available\n            if (specProduct?.specProductInfo?.aiAnnotation && specProduct.specToQuoteValues?.specProduct && !specProduct.specToQuoteValues.specProduct.aiAnnotation) {\n              specProduct.specToQuoteValues.specProduct.aiAnnotation = specProduct.specProductInfo.aiAnnotation;\n            }\n            const specToQuoteValues = fromJS(specProduct.specToQuoteValues);\n            const emptyProduct = fromJS({\n              id: -1,\n              quoteProductId: uuid(),\n              firmProductId: -1,\n              note: '',\n              label: '',\n              defaultPrint: true,\n              specProductId: specProduct.specToQuoteValues.specProductId,\n              specDrawingProductId: specProduct.specToQuoteValues.specProductId,\n              specToQuoteValues,\n              isRequestingProduct: false,\n              templateCells: setupTemplateCells(fieldsData, currency, quoteRegionId, fromJS({}))\n            });\n            updatedQuoteProducts.push(emptyProduct);\n          }\n        });\n        const _sectionId = uuid();\n        specSections.push({\n          sectionTitle: section?.sectionTitle,\n          sectionId: _sectionId,\n          products: updatedQuoteProducts,\n          sectionTemplate: defaultTemplate,\n          aiNote: section?.aiNote || '',\n        });\n      }\n    });\n  }\n\n  return fromJS({\n    ...quoteFormValues.toJS(), // keep other fields that already initialize\n    ...getDefaultInitialValues({\n      loggedInUserData,\n      defaultQuoteQuickText,\n      regions,\n      hasCurrencyConversionACLRole: hasFeatStockLevelAclRole,\n      defaultManufacturerDiscountsManufacturerIds,\n      defaultTerms,\n      defaultComments,\n      defaultDiscountList,\n    }).toJS(),\n    specId,\n    projectId: sourceQuote?.projectId || null,\n    projectTitle: sourceQuote?.projectTitle,\n    sections: fromJS(specSections),\n    createdFromSpecId: specId,\n  });\n};\n\nconst findMappingProducts = (sourceQuoteSections, invitationResponseResult) => {\n  const initMappingProducts = {};\n  _.forEach(invitationResponseResult?.BidResponseProducts, (bidResponseProduct) => {\n    let responseProductNumber = bidResponseProduct?.Product?.firmProductProductNumber;\n    if (!responseProductNumber) {\n      responseProductNumber = bidResponseProduct?.Product?.productProductNumber;\n    }\n    responseProductNumber = cleanString(responseProductNumber);\n    let responseManufacturerName = bidResponseProduct?.Product?.Manufacturer?.manufacturerName;\n    if (!responseManufacturerName) {\n      responseManufacturerName = bidResponseProduct?.Product?.productBrand;\n    }\n    let responseUpc = bidResponseProduct?.Product?.firmProductUpc;\n    if (!responseUpc) {\n      responseUpc = bidResponseProduct?.Product?.productUpc;\n    }\n    if (responseUpc) {\n      responseUpc = responseUpc.toString()?.toLowerCase();\n    }\n\n    if ((responseProductNumber && responseManufacturerName) || responseUpc) {\n      responseProductNumber = responseProductNumber?.toLowerCase();\n      responseManufacturerName = responseManufacturerName?.toLowerCase();\n\n      sourceQuoteSections.forEach((quoteSection) => {\n        let product = null;\n        if (responseUpc) {\n          const found = quoteSection.get('products')?.find((p: IMap<Product>) => {\n            const upc = p.get('upc')?.toString()?.toLowerCase();\n            return upc === responseUpc;\n          });\n          product = found || null; // null = searched but not found\n        }\n        if (!product) {\n          product = quoteSection.get('products')?.find((p: IMap<Product>) => {\n            return cleanString(p.get('productNumber'))?.toLowerCase() === responseProductNumber &&\n              p.get('brand')?.toLowerCase() === responseManufacturerName;\n          });\n        }\n        if (product) {\n          const isS2QPackageProduct =\n            Boolean(product.get('packageId')) &&\n            Boolean(product.get('uniquePackageId')) &&\n            Boolean(product.get('specToQuoteValues')) &&\n            Boolean(product.get('productIndex') !== undefined);\n          if (!isS2QPackageProduct) {\n            const reFormatProduct = product.withMutations((ctx) => {\n              ctx.delete('quoteProductId')\n                .delete('templateCells');\n            });\n            initMappingProducts[bidResponseProduct.id] = reFormatProduct;\n          }\n        }\n      });\n    }\n  });\n  return initMappingProducts;\n};\n\nconst findUnmappedProducts = (bidResponseProducts, mappingProducts) => {\n  const unMappedProducts = bidResponseProducts?.filter((bidResponseProduct) => !mappingProducts[bidResponseProduct.id]) || [];\n  return unMappedProducts;\n};\n\nconst addSearchProductsToMap = (searchFirmProductResults, bidResponseProducts, initMappingProducts, selectedBidIds) => {\n  _.forEach(searchFirmProductResults, (searchFirmProduct) => {\n    const productNumber = searchFirmProduct?.firmProduct?.productNumber?.toLowerCase() || null;\n    const brand = searchFirmProduct?.firmProduct?.brand?.toLowerCase() || null;\n    const upc = searchFirmProduct?.firmProduct?.upc?.toLowerCase() || null;\n\n    // Skip if productNumber is missing\n    if (!productNumber) { return; }\n\n    // Use filter to get ALL matching products\n    const matchedProducts = bidResponseProducts.filter((bidResponseProduct) => {\n      let bidProductNumber = bidResponseProduct?.Product?.firmProductProductNumber?.toLowerCase() || null;\n      if (!bidProductNumber) {\n        bidProductNumber = bidResponseProduct?.Product?.productProductNumber?.toLowerCase() || null;\n      }\n      const responseManufacturerName = bidResponseProduct?.Product?.Manufacturer?.manufacturerName?.toLowerCase() || null;\n      const responseProductBrand = bidResponseProduct?.Product?.productBrand?.toLowerCase() || null;\n      let responseUpc = bidResponseProduct?.Product?.firmProductUpc;\n      if (!responseUpc) {\n        responseUpc = bidResponseProduct?.Product?.productUpc;\n      }\n      if (responseUpc) {\n        responseUpc = responseUpc.toString()?.toLowerCase();\n      }\n      if (upc && upc === responseUpc) {\n        return true;\n      } else {\n        // Must match productNumber\n        if (bidProductNumber !== productNumber) { return false; }\n\n        // Must match brand (if brand exists)\n        if (brand) {\n          return responseManufacturerName === brand || responseProductBrand === brand;\n        }\n      }\n\n      // If no brand to match, just match by productNumber\n      return true;\n    });\n\n    // Loop through all matches\n    matchedProducts.forEach((matchedProduct) => {\n      initMappingProducts[matchedProduct.id] = fromJS(searchFirmProduct);\n      if (!selectedBidIds.includes(matchedProduct.id)) {\n        selectedBidIds.push(matchedProduct.id);\n      }\n    });\n  });\n};\n\nconst getFirmProductSearchParams = (selectedBidIds, bidResponseProducts) => {\n  const searchProductsParams = [];\n  const uniqueKeys: { [key: string]: boolean } = {};\n  let searchParams = null;\n\n  _.forEach(bidResponseProducts, (bidResponseProduct) => {\n    if (!selectedBidIds.includes(bidResponseProduct.id)) {\n      const productBrand = bidResponseProduct?.Product?.Manufacturer?.manufacturerName || bidResponseProduct?.Product?.productBrand;\n      const productNumber = bidResponseProduct?.Product?.firmProductProductNumber || bidResponseProduct?.Product?.productProductNumber;\n      const productUpc = bidResponseProduct?.Product?.firmProductUpc || bidResponseProduct?.Product?.productUpc;\n      if ((productBrand && productNumber) || productUpc) {\n        let uniqueKey = `${productNumber}|${productBrand}`;\n        if (productUpc) {\n          uniqueKey = `productUpc|${productUpc}`;\n        }\n        // Skip if already added\n        if (uniqueKeys[uniqueKey]) {\n          return;\n        }\n        uniqueKeys[uniqueKey] = true;\n        if (productUpc) {\n          if (productBrand && productNumber) {\n            searchProductsParams.push({\n              'or': [\n                {\n                  'or': [\n                    {\n                      'firmProduct.upc': {\n                        'eq': productUpc\n                      }\n                    },\n                    {\n                      'product.upc': {\n                        'eq': productUpc\n                      }\n                    }\n                  ]\n                },\n                {\n                  'and': [\n                    {\n                      'productNumber': {\n                        'eq': productNumber\n                      }\n                    },\n                    {\n                      'brand': {\n                        'eq': productBrand\n                      }\n                    }\n                  ]\n                }\n              ]\n            });\n          } else {\n            searchProductsParams.push({\n              'and': [\n                {\n                  'upc': {'eq': productUpc}\n                }\n              ]\n            });\n          }\n        } else {\n          searchProductsParams.push({\n            'and': [\n              {\n                'productNumber': {\n                  'eq': productNumber\n                }\n              },\n              {\n                'brand': {\n                  'eq': productBrand\n                }\n              }\n            ]\n          });\n        }\n      }\n    }\n  });\n\n  if (searchProductsParams.length > 0) {\n    searchParams = {\n      'filters': {\n        or: searchProductsParams\n      },\n      'options': {\n        'limit': 1000,\n        'offset': 0,\n        'paginationMethod': 'nextPage'\n      }\n    };\n  }\n  return searchParams;\n};\n\nconst buildNewImportProduct = (bidResponseProducts, responseProductId, fieldsToMap, quoteRegionId = 'default') => {\n    const bidResponseProduct = bidResponseProducts?.find(p => p.id === responseProductId);\n    if (!bidResponseProduct) {\n      return null;\n    }\n\n    const product = bidResponseProduct?.Product;\n    const bidProduct = bidResponseProduct?.BidProduct;\n\n    const productNumber = product?.firmProductProductNumber || product?.productProductNumber || bidProduct?.productNo;\n    const brand = product?.Manufacturer?.manufacturerName || product?.productBrand || bidProduct?.productManufacturer;\n    const brandId = product?.productBrandId || product?.Manufacturer?.id;\n    const upc = product?.firmProductUpc || product?.productUpc;\n    const description = product?.firmProductDescription || product?.productDescription;\n    const categoryName = product?.firmProductCategoryName || product?.productCategoryName;\n    const category = product?.firmProductCategory || product?.productCategory;\n\n    // Parse fieldsMapping to get price data\n    let priceData = {};\n    const currencyCode = bidProduct?.sectionCurrencyCode || 'CAD';\n    const fieldsMapping = bidResponseProduct?.fieldsMapping ? JSON.parse(bidResponseProduct.fieldsMapping) : null;\n    const priceMapping = {\n      list: '',\n      sell: '',\n      cost: ''\n    };\n    if (fieldsMapping) {\n      priceMapping.list = fieldsMapping[fieldsToMap?.find(a => a.alias === 'list')?.key || 'list']?.value ?? '';\n      priceMapping.sell = fieldsMapping[fieldsToMap?.find(a => a.alias === 'sell')?.key || 'sell']?.value ?? '';\n      priceMapping.cost = fieldsMapping[fieldsToMap?.find(a => a.alias === 'cost')?.key || 'cost']?.value ?? '';\n      // Fallback: handle alias variants like 'sellPrice', 'listPrice'\n      const aliasToPriceKey = { list: 'list', listPrice: 'list', sell: 'sell', sellPrice: 'sell', cost: 'cost' };\n      fieldsToMap?.forEach(f => {\n        const priceKey = aliasToPriceKey[f.alias];\n        if (priceKey && !priceMapping[priceKey] && f.mappingTo !== 'select' && f.mappingTo !== 'not') {\n          priceMapping[priceKey] = fieldsMapping[f.key]?.value ?? '';\n        }\n      });\n    } else {\n      const aliasToPriceKey = { list: 'list', listPrice: 'list', sell: 'sell', sellPrice: 'sell', cost: 'cost' };\n      fieldsToMap?.forEach(f => {\n        const priceKey = aliasToPriceKey[f.alias];\n        if (priceKey && f.mappingTo !== 'select' && f.mappingTo !== 'not' && bidResponseProduct[f.key] != null) {\n          priceMapping[priceKey] = bidResponseProduct[f.key];\n        }\n      });\n      // Fallback: keep original listPrice handling\n      if (!priceMapping.list && bidResponseProduct.listPrice) {\n        priceMapping.list = bidResponseProduct.listPrice;\n      }\n    }\n\n    if (priceMapping.list || priceMapping.sell || priceMapping.cost) {\n      priceData = {\n        price: {\n          [quoteRegionId]: {\n            [currencyCode]: {\n              list: priceMapping.list || null,\n              sell: priceMapping.sell || null,\n              cost: priceMapping.cost || null,\n              isPoaIsOverride: true,\n              listIsOverride: true,\n              sellIsOverride: true,\n              costIsOverride: true\n            }\n          }\n        }\n      };\n    }\n\n    const importNewProduct = {\n      responseProductId,\n      productNumber,\n      brand,\n      brandId,\n      upc,\n      description,\n      categoryName,\n      category,\n      ...priceData,\n    };\n\n    return importNewProduct;\n};\n\nconst isProductImportable = (responseProduct, manufacturers, categories) => {\n  const manufacturerName = responseProduct?.Product?.Manufacturer?.manufacturerName;\n  const categoryName = responseProduct?.Product?.Category?.categoryName;\n  const hasManufacturer = manufacturers?.some(m => m.value === manufacturerName);\n  const hasCategory = categories?.some(c => c.value === categoryName);\n  return hasManufacturer && hasCategory;\n};\n\n// Generate unique key for a product based on productNumber + brandId + category\nconst getProductUniqueKey = (product, isFromBidResponse = true) => {\n  if (isFromBidResponse) {\n    const productNumber = product?.Product?.firmProductProductNumber || product?.Product?.productProductNumber || '';\n    const brandId = product?.Product?.productBrandId || product?.Product?.Manufacturer?.id || '';\n    const category = product?.Product?.firmProductCategory || product?.Product?.productCategory || '';\n    return `${String(productNumber)}|${String(brandId)}|${String(category)}`;\n  } else {\n    // For newFirmProducts or API results\n    return `${String(product?.productNumber || '')}|${String(product?.brandId || '')}|${String(product?.category || '')}`;\n  }\n};\n\n// Remove duplicate products based on unique key\nconst removeDuplicateProducts = (products) => {\n  const seenKeys = new Set<string>();\n  return products.filter(product => {\n    const key = getProductUniqueKey(product, true);\n    if (seenKeys.has(key)) {\n      return false;\n    }\n    seenKeys.add(key);\n    return true;\n  });\n};\n\n// Check if product already exists in array\nconst isProductDuplicate = (newProduct, existingProducts) => {\n  const productKey = getProductUniqueKey(newProduct, false);\n  return existingProducts.some(p => getProductUniqueKey(p, false) === productKey);\n};\n\n// Find original product by matching API result\nconst findOriginalProductByResult = (result, newFirmProducts) => {\n  const resultKey = `${String(result?.firmProduct?.productNumber || '')}|${String(result?.firmProduct?.brandId || '')}|${String(result?.firmProduct?.category || '')}`;\n  return newFirmProducts.find(p => getProductUniqueKey(p, false) === resultKey);\n};\n\nexport interface IPricingColumn {\n  key: string;\n  label: string;\n}\n\nexport interface IPricingRow {\n  id: number;\n  bidResponseId: number;\n  pricingRequestNumber: string;\n  from: string;\n  supplierProductNumber: string;\n  description: string;\n  notes: string;\n  values: { [key: string]: any };\n}\n\nexport interface IPricingGroup {\n  columns: IPricingColumn[];\n  rows: IPricingRow[];\n}\n\nconst buildPricingGroups = (invitationResponses: any[], quoteProductId: string): IPricingGroup[] => {\n  const groups: IPricingGroup[] = [];\n\n  for (const response of invitationResponses) {\n    const matchingProducts = (response.BidResponseProducts || []).filter(\n      (brp) => brp.BidProduct?.quoteProductId === quoteProductId && brp.Product\n    ).sort((a, b) => a.id - b.id);\n    if (!matchingProducts.length) { continue; }\n\n    const columns: IPricingColumn[] = [];\n    const columnsSet = new Set<string>();\n\n    const directFields = [\n      { key: 'listPrice', label: i18next.t('translations:pimDataType.listPrice') },\n      { key: 'multiplier', label: i18next.t('translations:pimDataType.multiplier') },\n      { key: 'netPrice', label: i18next.t('translations:autoQuotationBidDetail.netPrice') }\n    ];\n\n    // Build columns from fieldsMapping of first matching product\n    const firstMapping = matchingProducts[0]?.fieldsMapping;\n    if (firstMapping) {\n      try {\n        const parsed = JSON.parse(firstMapping);\n        for (const [key, val] of Object.entries(parsed) as Array<[string, any]>) {\n          if (!columnsSet.has(key)) {\n            columnsSet.add(key);\n            columns.push({ key, label: val.name || key });\n          }\n        }\n      } catch (e) { /* ignore parse error */ }\n    } else {\n      // Fallback to direct fields when fieldsMapping is null\n      for (const field of directFields) {\n        if (matchingProducts[0]?.[field.key] !== undefined && matchingProducts[0]?.[field.key] !== null) {\n          columnsSet.add(field.key);\n          columns.push(field);\n        }\n      }\n    }\n\n    const contactEmail = response.Contact?.email || '';\n    const pricingRequestNumber = response.id ? `BI-${response.id}` : '';\n\n    const rows: IPricingRow[] = matchingProducts.map((brp) => {\n      const values: { [key: string]: any } = {};\n      if (brp.fieldsMapping) {\n        try {\n          const parsed = JSON.parse(brp.fieldsMapping);\n          for (const [key, val] of Object.entries(parsed) as Array<[string, any]>) {\n            values[key] = val.value ?? '-';\n          }\n        } catch (e) { /* ignore parse error */ }\n      } else {\n        // Fallback to direct fields when fieldsMapping is null\n        for (const field of directFields) {\n          if (columnsSet.has(field.key)) {\n            values[field.key] = brp[field.key] ?? '-';\n          }\n        }\n      }\n\n      return {\n        id: brp.id,\n        bidResponseId: response.id,\n        pricingRequestNumber,\n        from: contactEmail,\n        supplierProductNumber: brp.Product?.firmProductProductNumber || brp.Product?.productProductNumber || '',\n        description: brp.description || '',\n        notes: brp.note || '',\n        values\n      };\n    });\n\n    groups.push({ columns, rows });\n  }\n\n  return groups;\n};\n\nconst reconstructInsertSectionProducts = (savedImportPricing, vendorQuote, quoteSections) => {\n  const vendorEntries = (savedImportPricing || []).filter(\n    item => item.bidResponse?.id === vendorQuote.id\n  );\n  if (vendorEntries.length === 0) { return []; }\n\n  // Get quoteProductId per bidResponseProductId — keep LAST entry (newest) per brpId\n  // so that stale UUIDs from old DB records are overwritten by newer ones\n  const brpToImportedProduct = {};\n  vendorEntries.forEach(entry => {\n    if (entry.bidResponseProductId) {\n      brpToImportedProduct[entry.bidResponseProductId] = {\n        quoteProductId: entry.quoteProductId,\n        sectionId: entry.sectionId\n      };\n    }\n  });\n\n  // Get unique imported quoteProductIds with their sectionIds\n  const importedQuoteProducts = {};\n  vendorEntries.forEach(entry => {\n    if (!importedQuoteProducts[entry.quoteProductId]) {\n      importedQuoteProducts[entry.quoteProductId] = entry.sectionId;\n    }\n  });\n  const importedQpIds = Object.keys(importedQuoteProducts);\n\n  const reconstructed = [];\n  const brps = vendorQuote.BidResponseProducts || [];\n\n  // Check if primary matching (bidResponseProductId) has data\n  const hasBrpIds = Object.keys(brpToImportedProduct).length > 0;\n\n  if (hasBrpIds) {\n    // Primary path: match by bidResponseProductId\n    brps.forEach(brp => {\n      const originalQuoteProductId = brp.BidProduct?.quoteProductId;\n      if (!originalQuoteProductId) { return; }\n\n      if (brpToImportedProduct[brp.id]) {\n        const importedQuoteProductId = brpToImportedProduct[brp.id].quoteProductId;\n        const sectionId = brpToImportedProduct[brp.id].sectionId;\n        const isInsert = importedQuoteProductId !== originalQuoteProductId;\n\n        // For INSERT entries, verify the row still exists in quote sections\n        if (isInsert) {\n          const rowExists = quoteSections?.some(section =>\n            section.get('sectionId') === sectionId &&\n            section.get('products')?.some(p => p.get('quoteProductId') === importedQuoteProductId)\n          );\n          if (!rowExists) { return; }\n        }\n\n        reconstructed.push({\n          bidResponseId: brp.id,\n          sectionId,\n          newProductUuid: isInsert ? importedQuoteProductId : null,\n          isInsertAction: false,\n          originalQuoteProductId,\n        });\n      }\n    });\n  } else {\n    // Fallback path: work from imported data side\n    // Step 1: Collect all original quoteProductIds from BRPs\n    const originalQpIds = new Set();\n    brps.forEach(brp => {\n      const origId = brp.BidProduct?.quoteProductId;\n      if (origId) { originalQpIds.add(origId); }\n    });\n\n    // Step 2: Classify imported quoteProductIds as REPLACE (matches an original) or INSERT (new)\n    const replaceQpIds = [];\n    const insertQpIds = [];\n    importedQpIds.forEach(qpId => {\n      if (originalQpIds.has(qpId)) {\n        replaceQpIds.push(qpId);\n      } else {\n        insertQpIds.push(qpId);\n      }\n    });\n\n    // Step 3: Group BRPs by their originalQuoteProductId\n    const brpsByOriginal = {};\n    brps.forEach(brp => {\n      const origId = brp.BidProduct?.quoteProductId;\n      if (!origId) { return; }\n      if (!brpsByOriginal[origId]) { brpsByOriginal[origId] = []; }\n      brpsByOriginal[origId].push(brp);\n    });\n\n    // Step 4: For each original product group, assign REPLACE and INSERT\n    let insertIdx = 0;\n    Object.entries(brpsByOriginal).forEach(([origId, groupBrps]: [string, any[]]) => {\n      const sectionId = importedQuoteProducts[origId] || importedQuoteProducts[insertQpIds[0]];\n      if (!sectionId) { return; }\n\n      groupBrps.sort((a, b) => a.id - b.id);\n\n      groupBrps.forEach((brp, idx) => {\n        if (idx === 0 && replaceQpIds.includes(origId)) {\n          reconstructed.push({\n            bidResponseId: brp.id,\n            sectionId: importedQuoteProducts[origId],\n            newProductUuid: null,\n            isInsertAction: false,\n            originalQuoteProductId: origId,\n          });\n        } else if (insertIdx < insertQpIds.length) {\n          const insertQpId = insertQpIds[insertIdx];\n          reconstructed.push({\n            bidResponseId: brp.id,\n            sectionId: importedQuoteProducts[insertQpId] || sectionId,\n            newProductUuid: insertQpId,\n            isInsertAction: false,\n            originalQuoteProductId: origId,\n          });\n          insertIdx++;\n        }\n      });\n    });\n  }\n\n  return reconstructed;\n};\n\n/**\n * Reconstruct insertSectionProducts for OTHER vendors (not the current one)\n * from persisted importPricingSectionProducts data alone (no BRP data needed).\n * This enables cross-vendor cleanup after a hard refresh.\n *\n * Logic: For each other vendor's saved entries, identify which quoteProductIds\n * are original products (REPLACE) vs inserted products (INSERT) by checking\n * if they exist as original products in the quote sections.\n */\nconst reconstructOtherVendorsInsertSectionProducts = (savedImportPricing, currentVendorId, quoteSections, currentVendorBrps?, allBrpToOriginalQpId?: { [brpId: number]: string }) => {\n  // Use current vendor's BRPs to determine truly original quoteProductIds\n  // Can't use quote sections because INSERT products are also in the sections after import\n  const originalQuoteProductIds = new Set();\n  if (currentVendorBrps?.length) {\n    currentVendorBrps.forEach(brp => {\n      const origId = brp.BidProduct?.quoteProductId;\n      if (origId) { originalQuoteProductIds.add(origId); }\n    });\n  }\n\n  // Group saved entries by vendor (bidResponse.id), excluding current vendor\n  const otherVendorEntries = {};\n  (savedImportPricing || []).forEach(entry => {\n    const vendorId = entry.bidResponse?.id;\n    if (!vendorId || vendorId === currentVendorId) { return; }\n    if (!otherVendorEntries[vendorId]) { otherVendorEntries[vendorId] = []; }\n    otherVendorEntries[vendorId].push(entry);\n  });\n\n  const reconstructed = [];\n\n  Object.entries(otherVendorEntries).forEach(([vendorId, entries]: [string, any[]]) => {\n    // Get unique quoteProductIds with sectionId, min bidResponseProductId, and originalQuoteProductId\n    const vendorQuoteProducts: { [qpId: string]: { sectionId: string, minBrpId: number, savedOriginalQpId: string | null } } = {};\n    entries.forEach(entry => {\n      const brpId = entry.bidResponseProductId || 0;\n      if (!vendorQuoteProducts[entry.quoteProductId]) {\n        vendorQuoteProducts[entry.quoteProductId] = { sectionId: entry.sectionId, minBrpId: brpId, savedOriginalQpId: entry.originalQuoteProductId || null };\n      } else if (brpId && (!vendorQuoteProducts[entry.quoteProductId].minBrpId || brpId < vendorQuoteProducts[entry.quoteProductId].minBrpId)) {\n        vendorQuoteProducts[entry.quoteProductId].minBrpId = brpId;\n      }\n    });\n\n    // Classify: REPLACE (quoteProductId is an original) vs INSERT (quoteProductId is new)\n    // Sort REPLACEs by bidResponseProductId for correct INSERT→REPLACE association\n    const replaceItems: Array<{ qpId: string, sectionId: string, brpId: number }> = [];\n    const insertItems: Array<{ qpId: string, sectionId: string, brpId: number, savedOriginalQpId: string | null }> = [];\n    Object.entries(vendorQuoteProducts).forEach(([qpId, info]) => {\n      if (originalQuoteProductIds.has(qpId)) {\n        replaceItems.push({ qpId, sectionId: info.sectionId, brpId: info.minBrpId });\n      } else {\n        insertItems.push({ qpId, sectionId: info.sectionId, brpId: info.minBrpId, savedOriginalQpId: info.savedOriginalQpId });\n      }\n    });\n    // Sort REPLACEs by brpId ascending for nearest-predecessor lookup\n    replaceItems.sort((a, b) => a.brpId - b.brpId);\n\n    // For each INSERT, find its originalQuoteProductId\n    insertItems.forEach(insertItem => {\n      let originalQpId: string | null = null;\n\n      // Primary: use BRP lookup from API response (exact mapping via bid_invitation_product)\n      if (!originalQpId && insertItem.brpId && allBrpToOriginalQpId?.[insertItem.brpId]) {\n        originalQpId = allBrpToOriginalQpId[insertItem.brpId];\n      }\n\n      // Fallback 1: use savedOriginalQpId from persisted data (added in saga when saving)\n      if (!originalQpId && insertItem.savedOriginalQpId) {\n        originalQpId = insertItem.savedOriginalQpId;\n      }\n\n      // Fallback 2: find the nearest preceding REPLACE by bidResponseProductId\n      // (INSERTs are created sequentially after their parent REPLACE's BRP)\n      if (!originalQpId && insertItem.brpId) {\n        let bestReplace: typeof replaceItems[0] | null = null;\n        for (const rep of replaceItems) {\n          if (rep.sectionId === insertItem.sectionId && rep.brpId && rep.brpId < insertItem.brpId) {\n            if (!bestReplace || rep.brpId > bestReplace.brpId) {\n              bestReplace = rep;\n            }\n          }\n        }\n        if (bestReplace) { originalQpId = bestReplace.qpId; }\n      }\n\n      // Fallback 2: find any REPLACE in the same section (for old data without bidResponseProductId)\n      if (!originalQpId) {\n        const sameSection = replaceItems.find(rep => rep.sectionId === insertItem.sectionId);\n        if (sameSection) { originalQpId = sameSection.qpId; }\n      }\n\n      // Fallback 3: find original from currentVendorBrps in the same section\n      if (!originalQpId) {\n        originalQuoteProductIds.forEach(origId => {\n          if (!originalQpId) {\n            const inSameSection = quoteSections?.some(sec =>\n              sec.get('sectionId') === insertItem.sectionId &&\n              sec.get('products')?.some(p => p.get('quoteProductId') === origId)\n            );\n            if (inSameSection) { originalQpId = origId as string; }\n          }\n        });\n      }\n\n      if (!originalQpId) {\n        return;\n      }\n\n      // Only include if the INSERT row still exists in quote sections\n      const rowExists = quoteSections?.some(section =>\n        section.get('sectionId') === insertItem.sectionId &&\n        section.get('products')?.some(p => p.get('quoteProductId') === insertItem.qpId)\n      );\n      if (!rowExists) {\n        return;\n      }\n\n      // Use negative vendorId as bidResponseId to ensure it doesn't collide with real BRP IDs\n      reconstructed.push({\n        bidResponseId: -Number(vendorId),\n        sectionId: insertItem.sectionId,\n        newProductUuid: insertItem.qpId,\n        isInsertAction: false,\n        originalQuoteProductId: originalQpId,\n      });\n    });\n  });\n\n  return reconstructed;\n};\n\nconst fetchFirmProducts = async (env, appId, productsToMap, selectedProducts, updateFirmProductPrice, bidResponseProducts) => {\n  const firmProductIds = [];\n  bidResponseProducts.forEach((brp) => {\n    if (!updateFirmProductPrice[brp.id] || !selectedProducts.includes(brp.id)) { return; }\n    const fpId = productsToMap[brp.id]?.getIn(['firmProduct', 'firmProductId'])\n      || productsToMap[brp.id]?.get('firmProductId')\n      || productsToMap[brp.id]?.get('id');\n    if (fpId) { firmProductIds.push(fpId); }\n  });\n  if (firmProductIds.length === 0) { return productsToMap; }\n\n  const searchParams = { filters: { and: [{ id: { in: firmProductIds } }] } };\n  const freshProducts = await PimServiceApi.searchFirmProducts(env, appId, searchParams);\n  if (!freshProducts?.length) { return productsToMap; }\n\n  const updatedMap = { ...productsToMap };\n  bidResponseProducts.forEach((brp) => {\n    if (!updateFirmProductPrice[brp.id] || !selectedProducts.includes(brp.id)) { return; }\n    const fpId = productsToMap[brp.id]?.getIn(['firmProduct', 'firmProductId'])\n      || productsToMap[brp.id]?.get('firmProductId')\n      || productsToMap[brp.id]?.get('id');\n    const fresh = freshProducts.find(fp => fp.firmProduct?.firmProductId === fpId || fp.id === fpId);\n    if (fresh) {\n      updatedMap[brp.id] = fromJS(fresh);\n    }\n  });\n  return updatedMap;\n};\n\nconst isFirmProductPriceInherited = (firmProduct) => {\n  return !!(firmProduct?.get('productId') || firmProduct?.getIn(['firmProduct', 'productId']));\n};\n\nconst QuoteFormUtil = {\n  getImportedPriceCells,\n  findMatchImportPricingBid,\n  getSavedImportPricing,\n  copySourceQuote,\n  findMappingProducts,\n  findUnmappedProducts,\n  addSearchProductsToMap,\n  getFirmProductSearchParams,\n  buildNewImportProduct,\n  isProductImportable,\n  getProductUniqueKey,\n  removeDuplicateProducts,\n  isProductDuplicate,\n  findOriginalProductByResult,\n  buildPricingGroups,\n  isFirmProductPriceInherited,\n  reconstructInsertSectionProducts,\n  reconstructOtherVendorsInsertSectionProducts,\n  fetchFirmProducts\n};\nexport default QuoteFormUtil;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');\n\nexports.default = _default;","var isProduction = process.env.NODE_ENV === 'production';\nfunction warning(condition, message) {\n  if (!isProduction) {\n    if (condition) {\n      return;\n    }\n\n    var text = \"Warning: \" + message;\n\n    if (typeof console !== 'undefined') {\n      console.warn(text);\n    }\n\n    try {\n      throw Error(text);\n    } catch (x) {}\n  }\n}\n\nexport default warning;\n","import { IMap } from 'ats-utils/src';\nimport * as FormulaParser from 'hot-formula-parser';\nimport { List, Map } from 'immutable';\nimport {\n  includes\n} from 'lodash';\nimport { QuoteSectionTemplateFieldsData } from '../models';\nimport { applyRoundingOption } from '../modules/QuoteEditModule/utils';\nimport { ROUNDING_OPTIONS } from '../containers/QuoteTemplate/utils';\nimport { truncateToDecimal } from './format-number';\nconst parser = new FormulaParser.Parser();\nconst varRegex = new RegExp('\\\\${(\\\\w+)}(?!.*\\\\${(\\\\w+)})');\nconst allVarsRegex = new RegExp('\\\\${(\\\\w+)}', 'g');\nconst point = new RegExp('\\\\.', 'g');\n\nexport const parseAllFormulaFields = ({ productFields, setUpdateTag, selectedProduct, fieldsData, retainOldValue, applyRounding = true }: {productFields: QuoteSectionTemplateFieldsData[], setUpdateTag?: boolean, selectedProduct?: IMap<any>, fieldsData?, retainOldValue?: boolean, applyRounding?: boolean }) => {\n  const fields: any = productFields.slice();\n  fields.forEach((field: any) => {\n    let targetedTemplate = null;\n    if (fieldsData) {\n      targetedTemplate = fieldsData.find(template =>\n        template.get('name') === field.name &&\n        template.get('fieldName') === field.fieldName &&\n        template.get('formula') === field.formula &&\n        template.get('fieldType') === field.fieldType\n      );\n    }\n\n    const allowMassUpdate = targetedTemplate && targetedTemplate.get('allowMassUpdate') !== undefined ? targetedTemplate.get('allowMassUpdate') : true;\n    if (field.type === 'formula'\n      // && field.formula.includes(`\\$\\{${fieldData.fieldName}\\}`)\n      // && !includes(parsedIds, field.id)\n      // && field.id !== fieldData.id\n      // && fieldData.fieldValue !== undefined\n    ) {\n      let old_formula = null;\n      if (selectedProduct) {\n        const old_templateCells = selectedProduct.get('templateCells') || List();\n        const old_targetedCell = old_templateCells.find(prevCell => prevCell.get('name') === field.name) || Map();\n        old_formula = old_targetedCell.get('formula');\n      }\n\n      const oldValue = field.fieldValue;\n      const formulaResult = parseFormula({fields, formula: field.formula});\n\n      field.fieldValue = field.fieldType !== 'percentage'\n        ? retainOldValue ? (oldValue ? oldValue : formulaResult) : allowMassUpdate ? formulaResult : oldValue\n        : formulaResult === '' ? '' : `${round(parseFloat(retainOldValue ? (oldValue ? oldValue : formulaResult) : allowMassUpdate ? formulaResult : oldValue) * 100, 2).toFixed(2)}`;\n\n      if (setUpdateTag && oldValue !== formulaResult && allowMassUpdate) {\n        field.isFieldUpdated = true;\n      }\n    } else if (field.type === 'tempFormula') { // use for temporary skipping of formla calculation\n      field.type = 'formula'; // set type back to formula\n    }\n\n    if (applyRounding) {\n      const applyFullTruncate = field.fieldType === 'integer' && (field.valueType === 'userInput' || field.valueType === 'constant');\n      field.fieldValue = applyFullTruncate\n        ? truncateToDecimal(field.fieldValue, 0)\n        : applyRoundingOption({\n            value: field.fieldValue,\n            roundingOption: field.roundingOption,\n            decimalPrecision: field.decimalPrecision,\n            truncateDecimals: field.type === 'formula',\n          });\n      field.formattedValue = field.fieldValue;\n    }\n  });\n\n  return fields;\n};\n\n/**\n * Parse all the fields to find formulas and change fields value according to formula dependencies\n * @param {Array{}} productFields - An array of objects containing all the product fields\n * @param {Object} - An object containing changed data\n * @example\n * parseFormulaFields([fieldData1, fieldData2], newFieldData);\n * @returns {Array{}} Returns an array with the parsed data.\n */\nexport const parseFormulaFields = ({\n  productFields,\n  fieldData,\n  parsedIds = [],\n  isUserInput,\n  applyRounding = true\n}: {\n  productFields: any[],\n  fieldData: any,\n  parsedIds?: any[],\n  isUserInput?: boolean,\n  applyRounding?: boolean\n}) => {\n  const fields: any = productFields.slice();\n  const fieldIndex = fields.findIndex((elm: any) => elm.id === fieldData.id);\n  parsedIds.push(fieldData.id);\n  const fieldValue = String(fieldData.fieldValue);\n  if (fieldValue.match(point) && fieldValue.match(point).length > 1) {\n    return fields;\n  }\n\n  fields[fieldIndex] = fieldData;\n  if (/^\\d+\\.$/.test(fieldData.fieldValue)) {\n    return fields;\n  }\n\n  fields.forEach((field: any) => {\n    if (field.type === 'formula'\n        && field.formula.includes(`\\$\\{${fieldData.fieldName}\\}`)\n        && !includes(parsedIds, field.id)\n        && field.id !== fieldData.id\n        && fieldData.fieldValue !== undefined) {\n\n      const oldValue = field.fieldValue;\n      const decimalPrecision = field.decimalPrecision ?? 5;\n      const formulaResult = parseFormula({fields, formula: field.formula});\n\n      field.fieldValue = field.fieldType !== 'percentage'\n        ? formulaResult\n        : formulaResult === '' ? '' : `${round(parseFloat(formulaResult) * 100, decimalPrecision).toFixed(decimalPrecision)}`;\n      parsedIds.push(field.id);\n      parseFormulaFields({ productFields: fields, fieldData: field, parsedIds, isUserInput, applyRounding });\n      if (isUserInput && oldValue !== formulaResult) {\n        field.isFieldUpdated = false;\n      }\n\n      if (applyRounding) {\n        field.fieldValue = applyRoundingOption({\n          value: field.fieldValue,\n          roundingOption: field.roundingOption,\n          decimalPrecision: field.decimalPrecision,\n          truncateDecimals: true,\n        });\n        field.formattedValue = field.fieldValue;\n      }\n    }\n  });\n\n  if (applyRounding && fieldIndex >= 0) {\n    const value = fields[fieldIndex].fieldValue;\n    const applyFullTruncate = fields[fieldIndex].fieldType === 'integer' && (fields[fieldIndex].valueType === 'userInput' || fields[fieldIndex].valueType === 'constant');\n    fields[fieldIndex].fieldValue = applyFullTruncate\n      ? truncateToDecimal(value, 0)\n      : applyRoundingOption({\n          value: fields[fieldIndex].fieldValue,\n          roundingOption: fields[fieldIndex].roundingOption,\n          decimalPrecision: fields[fieldIndex].decimalPrecision,\n          truncateDecimals: fields[fieldIndex].type === 'formula',\n        });\n    fields[fieldIndex].formattedValue = fields[fieldIndex].fieldValue;\n  }\n\n  return fields;\n};\n\nexport const parseFormula = ({\n  fields,\n  formula,\n  applyRounding = false,\n  precision,\n}: {\n  fields: any,\n  formula: string,\n  applyRounding?: boolean,\n  precision?: number\n}) => {\n  let temporaryFormula = formula;\n  if (allVarsRegex.test(formula)) {\n    // @ts-ignore\n    formula.match(allVarsRegex).forEach((variable) => {\n      // @ts-ignore\n      const parserVar = variable.match(varRegex)[1];\n      const field: any = fields.find((elm: any) => elm.fieldName === parserVar);\n      let fieldValue;\n      if (field) {\n        parser.setVariable(parserVar, Number(field.fieldValue));\n        fieldValue = field.fieldType === 'percentage' ? `${field.fieldValue}%` : field.fieldValue;\n        if (!fieldValue || (fieldValue && !fieldValue.length)) {\n          fieldValue = 'NULL';\n        }\n      }\n      temporaryFormula = temporaryFormula.replace(variable, fieldValue);\n    });\n\n    // temporaryFormula = temporaryFormula.split(',').map((str: string) => {\n    //   if (!str.includes('IF') && str.includes('NULL')) {\n    //     return str.includes(')') ? 'NULL)' : 'NULL';\n    //   }\n    //   return str;\n    // }).join(',');\n  }\n\n  const rawResult = parser.parse(temporaryFormula).result;\n  let result;\n\n  if (applyRounding) {\n    result = round(rawResult, precision ?? 2);\n  } else {\n    result = rawResult;\n  }\n\n  return (typeof result === 'number' && !isNaN(result))\n    ? result.toFixed(precision ?? 5)\n    : '';\n};\n\nexport const round = (value: number, decimals: number) =>\n  // @ts-ignore\n  Number(Math.round(value + `e${decimals}`) + `e-${decimals}`);\n\nexport const verifyPriceFormat = (input: string, decimalPlaces: number): boolean => {\n  if (input === '') {\n    return true;\n  }\n\n  const regex = new RegExp(`^\\\\d+(\\\\.\\\\d{0,${decimalPlaces}})?$`);\n  return regex.test(input);\n};\n\nconst countDecimals = (value: string | number) => ((value ?? '').toString().split('.')[1] || '').length;\n\n// Quote values never carry more decimals than this, so anything past it is float noise.\nconst MAX_ACCURATE_DECIMALS = 6;\n\nexport const accurateAdd = (a: string | number, b: string | number) => {\n  const maxDec = Math.max(countDecimals(a), countDecimals(b));\n  const factor = 10 ** maxDec;\n  return ((Math.round(Number(a) * factor) + Math.round(Number(b) * factor)) / factor).toFixed(maxDec);\n};\n\n/**\n * Adds a list of values without the drift plain float addition introduces:\n * 14.069 + 211.310 + 92.757 adds up to 318.13599999999997 with `+`, which then shows as\n * 318.135 once the extra decimals are cut off. Values are scaled to integers before being\n * added; non numeric entries are skipped.\n */\nexport const accurateSum = (values: Array<string | number>): number => {\n  const decimals = Math.min(\n    values.reduce<number>((maxDec, value) => Math.max(maxDec, countDecimals(value)), 0),\n    MAX_ACCURATE_DECIMALS\n  );\n  const factor = 10 ** decimals;\n  const total = values.reduce<number>((sum, value) => {\n    const numValue = Number(value);\n    return isNaN(numValue) ? sum : sum + Math.round(numValue * factor);\n  }, 0);\n  return total / factor;\n};","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}","/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] as () => any;\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n  return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(\n  value: V,\n):\n  | {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    }\n  | {\n      [ownProps: string]: unknown;\n      message: string;\n      name: string;\n      stack?: string;\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: { [key: string]: any } = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue as T;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: unknown[] = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item: unknown) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n    return !name || name === 'Object';\n  } catch {\n    return true;\n  }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat as any).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n","import React from 'react';\nvar useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n/**\n * https://github.com/facebook/react/issues/14099#issuecomment-440013892\n *\n * @param {function} fn\n */\n\nexport default function useEventCallback(fn) {\n  var ref = React.useRef(fn);\n  useEnhancedEffect(function () {\n    ref.current = fn;\n  });\n  return React.useCallback(function () {\n    return (0, ref.current).apply(void 0, arguments);\n  }, []);\n}","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport {\n  FormControl,\n  FormHelperText,\n  FormControlLabel,\n} from '@material-ui/core';\n\nimport Switch, { SwitchProps } from '@material-ui/core/Switch';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\n\nconst handleChange = (onChange) => (...args) => {\n  onChange(...args);\n};\n\nexport interface IFieldSwitchComponentProps extends SwitchProps {\n  formControlProps?: object;\n  formControlLabelProps?: object;\n  inputProps?: object;\n  label?: string | JSX.Element;\n  require?: boolean;\n  labelProps?: object;\n}\n\ninterface IFieldSwitchProps extends IFieldSwitchComponentProps {\n\n}\n\ntype FieldSwitchProps = IFieldSwitchProps & WrappedFieldProps;\n\nconst FieldSwitch: React.SFC<FieldSwitchProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched,\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    require = false,\n    inputProps = {},\n    formControlProps = {},\n    formControlLabelProps = {},\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n  if (customOverrides.onChange != null) {\n    customOverrides.onChange = handleChange(customOverrides.onChange);\n  }\n\n  // remapping to work with matertial-ui switch\n  // see https://material-ui.com/demos/selection-controls/\n  customOverrides.checked = Boolean(customOverrides.value);\n  customOverrides.value = customOverrides.name;\n\n  if (customOverrides.checked === '') {\n    customOverrides.checked = false;\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <FormControlLabel\n        label={require ? `${label} *` : label}\n        control={\n          <Switch\n            {...customOverrides}\n            {...rest}\n          />\n        }\n        {...formControlLabelProps}\n      />\n      {\n        error === undefined && warning === undefined ?\n        null :\n        <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>\n      }\n    </FormControl>\n  );\n};\n\nexport default FieldSwitch;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  Dialog,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Typography,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { DialogProps } from '@material-ui/core/Dialog';\nimport { LOADING_MODAL_ID } from '../LoadingModal/Component';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\n\ninterface IGetDeleteModalContentComponentProps {\n  idToDelete?: any;\n  open: boolean;\n  itemName?: string;\n  toggleDeleteModal?: any;\n  handleDelete?: (idToDelete: any) => void;\n  contentText?: string;\n  additionalText?: string;\n  content?: JSX.Element;\n  buttonCancel?: string;\n  buttonOk?: string;\n  dialogProps?: Partial<DialogProps>;\n  withLoading?: boolean;\n  withLoadingAction?: string;\n}\n\ninterface IGetDeleteModalContentProps {\n  dispatch: (s: IAction) => void;\n  openLoadingModal: (action: string, name: string) => void;\n}\n\ntype IGetDeleteModalContent = IGetDeleteModalContentComponentProps & IGetDeleteModalContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  deleteDialog: {\n    paddingTop: theme.spacing(2.5),\n    paddingBottom: theme.spacing(),\n  },\n  confirmationButton: {\n    marginRight: theme.spacing(4),\n    textTransform: 'uppercase',\n  },\n  additionalText: {\n    marginTop: theme.spacing()\n  }\n});\nconst DeleteModal = (deleteModalProps: IGetDeleteModalContent) => {\n  const {\n    idToDelete,\n    open,\n    itemName,\n    toggleDeleteModal,\n    handleDelete,\n    classes,\n    contentText,\n    additionalText,\n    content,\n    dialogProps,\n    buttonCancel,\n    buttonOk,\n    withLoading = true,\n    withLoadingAction = null,\n    t,\n    openLoadingModal\n  } = deleteModalProps;\n\n  const [loading, setLoading] = React.useState(false);\n\n  React.useEffect(() => {\n    if (!open && loading) {\n      setLoading(false);\n    }\n  }, [open]);\n\n  return (\n    <Dialog\n      onClose={() => {\n        toggleDeleteModal();\n        setLoading(false);\n      }}\n      aria-describedby='alert-dialog-description'\n      {...dialogProps}\n      open={open}\n    >\n      <div className={classes.deleteDialog}>\n        <DialogContent>\n          {\n            content\n              ? content\n              : <>\n                  <DialogContentText id='alert-dialog-description' variant='h6'>\n                    { contentText || `${t('deleteModal.areYouSure')} ${itemName}?` }\n                  </DialogContentText>\n                  {additionalText && <DialogContentText className={classes.additionalText}>{ additionalText }</DialogContentText>}\n                </>\n          }\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={toggleDeleteModal}\n            color='primary'\n            className={classes.confirmationButton}\n          >\n            { buttonCancel || t('formButtons.cancel') }\n          </Button>\n\n          <Button\n            onClick={(e) => {\n              e.stopPropagation();\n              handleDelete(idToDelete);\n              if (withLoading) {\n                openLoadingModal(withLoadingAction ? withLoadingAction : t('deleteModal.deleting'), itemName);\n              }\n            }}\n            color='primary' autoFocus={true}\n            className={classes.confirmationButton}\n          >\n            { buttonOk || t('formButtons.delete') }\n          </Button>\n        </DialogActions>\n      </div>\n    </Dialog>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    openLoadingModal: (action: string, name: string) => {\n      dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action, actionOnItem: name } }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: true\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IGetDeleteModalContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(DeleteModal);","import * as React from 'react';\nimport {\n  FormControl,\n  FormHelperText,\n  WithStyles,\n  Theme,\n  createStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\nimport { isImmutable, Map } from 'immutable';\nimport { compose } from 'redux';\nimport AtsAutocomplete from './AtsAutocomplete';\n\nconst handleChange = (onChange) => (...args) => {\n  onChange(args[1]);\n};\n\nconst handleBlur = (onBlur) => (...args) => { // tslint:disable-line\n};\n\nexport interface IFieldAutocompleteComponentProps {\n  formControlProps?: object;\n  require?: boolean;\n  inputProps?: object;\n  styles?: object;\n  helperText?: boolean;\n  caption?: boolean;\n  textFieldProps?: object;\n  textField_inputProps?: object;\n}\n\nexport type IFieldAutocompleteWrappedComponentProps = IFieldAutocompleteComponentProps & WrappedFieldProps;\n\ninterface IFieldAutocompleteProps extends IFieldAutocompleteWrappedComponentProps {\n}\n\nexport type FieldAutocompleteProps = IFieldAutocompleteProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst FieldAutocomplete: React.FC<FieldAutocompleteProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched, // eslint-disable-line no-unused-vars\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    require = false,\n    inputProps = {},\n    textFieldProps,\n    textField_inputProps,\n    formControlProps = {},\n    helperText = true,\n    caption = false,\n    classes,\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.value === '') {\n    customOverrides.multiple\n      ? customOverrides.value = []\n      : customOverrides.value = null;\n  }\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n\n  if (customOverrides.onChange != null) {\n    customOverrides.onChange = handleChange(customOverrides.onChange);\n  }\n\n  // https://github.com/JedWatson/react-select/issues/805\n  // need a enableCustomOnBlur=true to use custom onBlur\n  // reason is the above issue. this way the default of not passing in enableCustomOnBlur will trigger below code as temporay fix to highjack onBlur to do nothing\n  if (!customOverrides.enableCustomOnBlur && customOverrides.onBlur != null) {\n    customOverrides.onBlur = handleBlur(customOverrides.onBlur);\n  }\n\n  if (customOverrides.value && isImmutable(customOverrides.value)) {\n    customOverrides.value = customOverrides.value.toJS();\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <AtsAutocomplete\n        error={Boolean(touched && (error || warning))}\n        require={require}\n        caption={caption}\n        textFieldProps={textFieldProps}\n        textField_inputProps={textField_inputProps}\n        customOverrides={customOverrides}\n        rest={rest}\n      />\n      {helperText && <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nconst styles = (theme: Theme) => createStyles({\n});\n\nexport default compose<React.ComponentClass<IFieldAutocompleteProps>>(\n  withStyles(styles),\n)(FieldAutocomplete);\n","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","import { MethodNotImplementedError } from \"../errors\";\nvar PDFObject = /** @class */ (function () {\n    function PDFObject() {\n    }\n    PDFObject.prototype.clone = function (_context) {\n        throw new MethodNotImplementedError(this.constructor.name, 'clone');\n    };\n    PDFObject.prototype.toString = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'toString');\n    };\n    PDFObject.prototype.sizeInBytes = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'sizeInBytes');\n    };\n    PDFObject.prototype.copyBytesInto = function (_buffer, _offset) {\n        throw new MethodNotImplementedError(this.constructor.name, 'copyBytesInto');\n    };\n    return PDFObject;\n}());\nexport default PDFObject;\n//# sourceMappingURL=PDFObject.js.map","// This function uploads a file via XHR to the file service. This function is hooked up to control the state of the FieldDropzone component, and will update the Redux state which controls FieldDropzone.\n\n// This function takes in 2 arguments. The first is atsApi which needs to be passed in from a withAtsApi() connected component. The second argument is an array of files, like from FieldDropzone in a redux-form\n\n// USAGE:\n// To use this function, assign it to a variable inside an asynchronous function. The return value of the function is an array of the files which were uploaded including fileID etc. This function is designed to work asynchronously with async/await and does not need any callbacks.\n//\n// Example:\n//  public exampleFunction = async () => {\n//    const fileArray = await Xhr({atsApi, files});\n//  }\n\nimport { store } from '../..';\nimport { FieldDropzoneStateChangeAction } from '../../modules/ApplicationModule/actions';\nimport { Api } from 'ats-api/src';\nimport FileServiceFile from '../../models/FileServiceFile';\nimport { readUploadResponse } from '../uploadResponse';\n\nconst Xhr = ({atsApi, files = []}: {atsApi: Api, files: File[]}): Promise<FileServiceFile[]> => {\n  return new Promise((resolve, reject) => {\n    const {\n      dispatch\n    } = store.get('store');\n\n    const timeout = () => setTimeout(() => {\n      dispatch(new FieldDropzoneStateChangeAction({key: 'loadingState', value: 'processing'}));\n    }, 2000);\n\n    const fileUploadUrl = atsApi.callApi({\n      service: 'file',\n      endpoint: 'uploadFile',\n      urlOnly: true,\n      withToken: true,\n      withAppId: true,\n    }) as string;\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    files.forEach((file) => {\n      data.append('file', file);\n    });\n\n    data.append('type', 'file');\n\n    req.open('POST', fileUploadUrl);\n\n    req.upload.addEventListener('progress', (e) => {\n      const percent = (e.loaded / e.total) * 100;\n\n      dispatch(new FieldDropzoneStateChangeAction({key: 'loadingPercentage', value: percent}));\n\n      if (percent >= 100) {\n        dispatch(new FieldDropzoneStateChangeAction({key: 'timeoutId', value: timeout()}));\n      }\n    });\n\n    req.onloadstart = (e) => {\n      dispatch(new FieldDropzoneStateChangeAction({key: 'showLoading', value: true}));\n    };\n\n    req.addEventListener('loadend', (e) => {\n      clearTimeout(store.get('store').getState().getIn(['application', 'fieldDropzoneState', 'timeoutId']));\n      dispatch(new FieldDropzoneStateChangeAction({key: 'loadingState', value: 'done'}));\n      const { payload, error } = readUploadResponse(req);\n      if (error) {\n        console.error('error uploading file', error); //tslint:disable-line\n        dispatch(new FieldDropzoneStateChangeAction({ key: 'errorMessage', value: error.error ? error.error : 'unknown error' })); /* This is here as a way to at least show something to the user when there is a network or server side error */\n        resolve(null);\n      } else {\n        const uploadedFiles: XMLHttpRequest['response'] = payload.file.files;\n        resolve(uploadedFiles);\n      }\n    });\n\n    if (files.length > 0) {\n      req.send(data);\n    } else {\n      resolve(null);\n    }\n\n  });\n};\n\nexport default Xhr;\n","/* tslint:disable */\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport { createSelector } from 'reselect';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { ICrossRefReducerState } from './reducer';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  XrefData,\n  XrefProduct,\n} from '../../models';\nimport { create } from 'lodash';\n\nexport default {};\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ProductModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\n// export const makeSelectXrefSearchResults = () => createSelector(\n//   selectReducerState(),\n//   (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchResults'),\n// );\n\nexport const makeSelectXrefSelectedCategoryId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('selectedCategoryId')\n);\n\nexport const makeSelectXrefSelectedManufacturerValue = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('selectedManufacturerValue')\n);\n\nexport const makeSelectXrefCategory = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('categoriesList', List())\n);\n\nexport const makeSelectXrefManufacturer = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('manufacturersList', List())\n);\n\nexport const makeSelectCachedXrefProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('cachedXrefProducts') || Map<number, IMap<XrefProduct>>()\n);\n\nexport const makeSelectSelectedCompetitorProductId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('selectedCompetitorProductId'),\n);\n\nexport const makeSelectCachedCompetitorProduct = (\n  {\n    competitorProductId: controlledCompetitorProductId,\n  }: {\n    competitorProductId?: number\n  } = {}) => createSelector(\n    makeSelectCachedXrefProducts(),\n    makeSelectSelectedCompetitorProductId(),\n  (cachedXrefProducts, selectedDrawingId: number) => {\n    const competitorProductId = controlledCompetitorProductId != null ? controlledCompetitorProductId : selectedDrawingId;\n    return cachedXrefProducts.get(competitorProductId) || new XrefProduct().toImmutable();\n  },\n);\n\nexport const makeSelectSelectedCompetitorProductNumber = () => createSelector(\n  makeSelectCachedCompetitorProduct(),\n  (state) => state.get('productNumber')\n);\n\nexport const makeSelectSearchTerm = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchTerm'),\n);\nexport const makeSelectXrefData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefData') || Map<number, List<IMap<XrefData>>>(),\n);\n\nexport const makeSelectSelectedCompetitorProductIdXrefData = () => createSelector(\n  makeSelectXrefData(),\n  makeSelectSelectedCompetitorProductId(),\n  (xrefData: any, id: number | string) => {\n    const xrefs = xrefData.get(id) || List();\n    let productXrefs = List();\n    let seriesXrefs = List();\n    xrefs.forEach((xref) => {\n      if (xref.get('competitorProductType') === 'product') {\n        productXrefs = productXrefs.push(xref);\n      } else {\n        seriesXrefs = seriesXrefs.push(xref);\n      }\n    });\n    return productXrefs.size ? productXrefs : seriesXrefs;\n  }\n)\n\nexport const makeSelectSponsorProducts = () => createSelector(\n  makeSelectXrefData(),\n  (xrefData: any) => {\n    const sponsorProducts = xrefData.reduce((acc: any, xrefList: any) => {\n      return acc.push(xrefList.get('sponsorProduct'));\n    }, List())\n    return sponsorProducts;\n  },\n);\n\nexport const makeSelectProductDetail = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('productDetail'),\n);\n\nexport const makeSelectSearchResultsCompetitorIds = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchResultsCompetitorIds'),\n);\n\nexport const makeSelectCompetitorProducts = () => createSelector(\n  makeSelectSearchResultsCompetitorIds(),\n  makeSelectCachedXrefProducts(),\n  (competitorIds, cachedXrefProducts) => {\n    return competitorIds.map((competitorId) => {\n      return cachedXrefProducts.get(competitorId);\n    });\n  },\n);\n\nexport const makeSelectXrefs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefs')\n);\n\nexport const makeSelectSearchingXrefs = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchingXrefs')\n)\nexport const makeSelectXrefCompetitorProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefCompetitorProducts')\n)\nexport const makeSelectXrefCompetitorSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefCompetitorSeries')\n)\nexport const makeSelectXrefSponsorProducts = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefSponsorProducts')\n)\nexport const makeSelectXrefSponsorSeries = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('xrefSponsorSeries')\n)\nexport const makeSelectXrefSponsorLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchXrefSponsorLoading')\n)\nexport const makeSelectXrefCompetitorLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('searchXrefCompetitorLoading')\n)\nexport const makeSelectGetCompetitorProductsLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('getCompetitorProductsLoading')\n)\nexport const makeSelectGetXrefManufacturersLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('getXrefManufacturersLoading')\n)\nexport const makeSelectGetXrefCategoriesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('getXrefManufacturersLoading')\n)\nexport const makeSelectCheckingXrefDuplicate = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('checkingXrefDuplicate')\n)\n\nexport const makeSelectCreateSponsorProduct = () => createSelector(\n  selectReducerState(),\n    (state: IMapNonRecursive<ICrossRefReducerState>) => state.get('createSponsorProduct')\n)\n\n// export const makeSelectCompetitorProducts = () => createSelector(\n//   makeSelectXrefSearchResults(),\n//   (xrefData: any) => {\n//     const competitorProducts = xrefData.reduce((acc: any, xrefList: any, index: number) => {\n//       const competitorProduct = xrefList.get('competitorProduct');\n//       const competitorProductId = competitorProduct.get('id');\n//       if (!acc.keySeq().has(competitorProductId)) {\n//         return acc.set(competitorProductId, competitorProduct);\n//       }\n//       return acc;\n//     }, Map<number, any>())\n//     return competitorProducts;\n//   },\n// );","import { IQuoteAutoSavePreference, QuoteAutoSaveType } from './types';\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'account';\n\nexport enum ProjectVisibility {\n  PUBLIC = 'public',\n  FIRM_ONLY = 'firm',\n  OFFICE_ONLY = 'office',\n}\n\nexport const DEFAULT_QUOTE_AUTO_SAVE_PREFERENCE: IQuoteAutoSavePreference = {\n  type: QuoteAutoSaveType.INTERVAL,\n  interval: 300000, // 5 minutes in milliseconds\n};\n\n// the default quote charge/discount/tax list lives on the office preference; GET and PUT must agree on these\nexport const QUOTE_DISCOUNT_LIST_PREFERENCE = 'quoteDiscountList';\nexport const QUOTE_DISCOUNT_LIST_USER_TYPE = 'office';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  getRandomValues(array: Uint8Array): Uint8Array;\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = (): number => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        return typedArray[0];\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception as any).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\nimport * as React from 'react';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport {\n  List, Set,\n} from 'immutable';\nimport { makeSelectUserRole, makeSelectOriginalUserRole } from '../../modules/AtsModule/selectors';\nimport {\n  AclRoles,\n} from '../../models';\nimport {\n  singleOrArray,\n} from 'ats-utils/src';\n\nexport interface IAclComponentProps {\n  requiredRoles?: AclRoles[] | AclRoles; // which roles are required to render\n  delayedRender?: () => React.ReactNode; // use this to lazy-render any children\n  includeOriginal?: boolean; // include roles from parent login as well (original user using loginas)\n  anyRole?: boolean; // default true, requires *any* of the requiredRoles, otherwise requires *all* of the requiredRoles\n}\n\ninterface IAclProps extends IAclComponentProps {\n  roles: List<AclRoles>;\n  originalRoles: List<AclRoles>;\n}\n\nclass Acl extends React.Component<IAclProps, {}> { // eslint-disable-line react/prefer-stateless-function\n\n  public render() {\n    const {\n      anyRole,\n      delayedRender,\n      requiredRoles,\n      children,\n      roles,\n      originalRoles,\n      includeOriginal,\n    } = this.props;\n\n    const allRoles = includeOriginal\n      ? roles.concat(originalRoles)\n      : roles;\n\n    const requiredRolesSet: Set<AclRoles> = Set<AclRoles>(singleOrArray(requiredRoles));\n    if (\n      requiredRoles == null || (\n        anyRole\n          ? !requiredRolesSet.intersect(allRoles).isEmpty()\n          : requiredRolesSet.isSubset(allRoles)\n        )\n    ) {\n      if (delayedRender != null) {\n        return <React.Fragment>\n          {delayedRender()}\n          {children}\n        </React.Fragment>;\n      }\n      return <React.Fragment>\n        {children}\n      </React.Fragment>;\n    }\n\n    return <div style={{ display: 'none' }}>\n      permission denied\n      acl roles required: {requiredRolesSet.toArray().join(', ')}\n      includeOriginal: {includeOriginal === true}\n      roles given: {allRoles.toArray().join(', ')}\n    </div>;\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  roles: makeSelectUserRole(),\n  originalRoles: makeSelectOriginalUserRole(),\n});\n\nexport default compose<React.ComponentClass<IAclComponentProps>>(\n  connect(mapStateToProps, null)\n)(Acl);\n","import { fromJS } from 'immutable';\nimport {\n  IAction,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  CreateNewProjectFormStepperActionTypes, SetFormValuesAction,\n} from './actions';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport interface IFormStepperReducerState {\n  formValues: Map<string, any>;\n}\n\n// The initial state of the App\nconst INITIAL_STATE = fromJS({\n  formValues: {}\n});\n\nfunction Reducer(state: IMapNonRecursive<IFormStepperReducerState> = INITIAL_STATE, action: IAction) {\n  switch (action.type) {\n    case CreateNewProjectFormStepperActionTypes.SET_FORM_VALUES: {\n      const {\n        payload,\n      } = action as SetFormValuesAction;\n      return state.set('formValues', payload);\n    }\n    case CreateNewProjectFormStepperActionTypes.CLEAR_FORM_VALUES:\n      return state.set('formValues', Map<string, any>());\n    default:\n      return state;\n  }\n}\n\nexport default Reducer;\n","import {Button, Grid, Modal, Paper, Radio, Typography} from '@material-ui/core';\nimport * as React from 'react';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport {Project} from '../../models';\nimport {useState} from 'react';\nimport {List} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\n\nconst useStyles = makeStyles(() => ({\n    paper: {\n        position: 'absolute' as 'absolute',\n        top: '50%',\n        left: '50%',\n        transform: 'translate(-50%, -50%)',\n        margin: '0 auto',\n        width: `1000px`,\n        padding: '25px',\n    },\n}));\ninterface IProps {\n    open: boolean;\n    onClose: () => void;\n    onCancel: () => void;\n    onNo: () => void;\n    onYes: (project) => void;\n    projects: List<IMap<Project>>;\n}\nconst DuplicateModal: React.FC<IProps> = ({\n    onCancel,\n    onNo,\n    onYes,\n    open,\n    onClose,\n    projects = List(),\n}) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const [selectedIndex, setSelectedIndex] = useState(null);\n    return (\n        <Modal\n            open={open}\n            onClose={onClose}\n        >\n            <Paper className={classes.paper}>\n                <Typography variant='h6' component='h2'>\n                    {t('formStepping.createProjectSteps.existingProjectFound')}\n                </Typography>\n                <Typography style={{ marginTop: '10px', marginBottom: '24px'}}>\n                    {t('formStepping.createProjectSteps.subtitle')}\n                </Typography>\n                <Grid container={true} item={true} xs={12} direction={'column'} style={{ height: '350px', overflow: 'auto', flexWrap: 'nowrap'}}>\n                    {projects.map((project, index) => {\n                        return (\n                            <Grid item={true} container={true} xs={12} key={index} style={{ padding: '16px 16px 16px 0', borderBottom: '1px solid #E4E4E4' }}>\n                                <Grid item={true}>\n                                    <Radio\n                                        checked={selectedIndex === index}\n                                        onChange={() => setSelectedIndex(index)}\n                                        value={index}\n                                    />\n                                </Grid>\n                                <Grid item={true}>\n                                    <Typography component='div' variant='subtitle2'>{project.get('name')}</Typography>\n                                    <Typography variant='caption'>{`${t('formStepping.createProjectSteps.lastUpdate')}: ${project.get('modifiedDate')?.substring(0, 10) ?? ''} `}</Typography>\n                                </Grid>\n                            </Grid>\n                        );\n                    })}\n                </Grid>\n                <Typography style={{ padding: '24px 0' }}>\n                    {t('formStepping.createProjectSteps.confirmation')}\n                </Typography>\n                <div style={{ display: 'flex', justifyContent: 'flex-end'}}>\n                    <Button variant='text' color='primary' onClick={onCancel}>{t('formStepping.createProjectSteps.cancel')}</Button>\n                    <Button variant='text' color='primary' onClick={onNo}>{t('formStepping.createProjectSteps.no')}</Button>\n                    <Button variant='text' color='primary' onClick={() => onYes(projects.get(selectedIndex))} disabled={selectedIndex === null}>{t('formStepping.createProjectSteps.continueWithSelection')}</Button>\n                </div>\n            </Paper>\n        </Modal>\n    );\n};\n\nexport default DuplicateModal;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Grid,\n  Step,\n  StepContent,\n  StepLabel,\n  Stepper,\n  Theme,\n  Typography,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {withTranslation, WithTranslation,} from 'react-i18next';\nimport {IAction, IMap,} from 'ats-utils/src/Interfaces';\nimport {compose,} from 'redux';\nimport {connect} from 'react-redux';\nimport {createStructuredSelector} from 'reselect';\nimport NewProjectModalForm from '../Forms/NewProjectModalForm';\nimport NewProjectBuildingSelectionForm from '../Forms/NewProjectBuildingSelectionForm';\nimport NewProjectCollaboratorsForm from '../Forms/NewProjectCollaboratorsForm';\nimport {\n  SearchProjectsAction,\n  SetProjectFormActiveStepAction,\n  SetProjectMasterSavingAllowAction,\n} from '../../modules/ProjectModule/actions';\nimport Debug from '../Debug';\nimport {injectReducer,} from '../../utils';\nimport {DEFAULT_MOUNT_POINT,} from './constants';\nimport reducer from './reducer';\nimport {ClearFormValuesAction, SetFormValuesAction,} from './actions';\nimport {List, Map, Set,} from 'immutable';\nimport {Project,} from '../../models';\nimport {makeSelectCollaborators,} from '../../modules/AccountModule/selectors';\nimport {makeSelectSpec,} from '../../modules/SpecModule/selectors';\nimport {makeSelectFormValues} from './selectors';\nimport {ProjectTrackerCreateProjectFormVariant} from '../CreateNewProjectModal/constants';\nimport NewProjectKeyContactsForm from '../Forms/NewProjectKeyContactsForm';\nimport Collaborator, {CollaboratorPermissionObject,} from '../../models/Collaborator';\nimport {AMPLITUDE_EVENT, PROJECT_LIST_DETAIL_PATH, SiteName} from '../../constants';\nimport {GetLeadSourcesAction} from '../../modules/ListModule/actions';\nimport {\n  makeSelectProjectFormActiveStep,\n  makeSelectProjectMasterSavingAllow,\n  makeSelectSearchedProjects\n} from '../../modules/ProjectModule/selectors';\nimport withAmplitudeData, {WithAmplitudeData} from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {removeTZ} from '../../components/FieldDatePickerV2';\nimport {buildingAmplitudeData} from '../../modules/ProjectModule/saga';\nimport {makeSelectAtsApiState} from '../../modules/ApplicationModule/selectors';\nimport {withAtsApi} from '../../contexts';\nimport {WithAtsApi} from '../../contexts/AtsApiContext';\nimport DuplicateModal from './DuplicateModal';\nimport {push} from 'connected-react-router';\nimport {makeSelectSite, makeSelectTemplateTranslationObject} from '../../modules/AtsModule/selectors';\nimport TemplateSelectionForm from '../Forms/TemplateSelectionForm';\n\ninterface IFormStepperState {\n  activeStep: number;\n  openDuplicateModal: boolean;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    width: '90%',\n    margin: '0 auto'\n  },\n  button: {\n    margin: theme.spacing(),\n  },\n  buttons : {\n    marginTop: theme.spacing() * 2,\n  },\n  resetContainer: {\n    padding: theme.spacing() * 3,\n  },\n  circularProgress: {\n    marginLeft: theme.spacing(3.5),\n    width: `calc(1em + ${theme.typography.button.fontSize}) !important`,\n    height: `calc(1em + ${theme.typography.button.fontSize}) !important`\n  },\n});\n\ninterface ICreateNewProjectFormStepperProps {\n  variantSet: Set<ProjectTrackerCreateProjectFormVariant>,\n  project?: IMap<Project>,\n  projectId: number,\n  isTestProject: boolean,\n  backToSelection?: () => void;\n  onSubmit: ({\n    values,\n    projectId,\n    projectValues,\n    wholeTemplateSelected,\n    trackProject,\n  }) => void;\n  filterOutCountryIds?: number[];\n  enabledCountryIds?: number[];\n}\n\ninterface IFormStepperProps extends ICreateNewProjectFormStepperProps {\n  dispatch: React.Dispatch<IAction>;\n  handleSubmit: (options: {\n    transform?: (values: Map<string, any>) => Map<string, any>,\n    callback?: (values?: Map<string, any>) => void\n  }) => boolean;\n  formValues: Map<string, any>;\n  collaborators: Map<number, IMap<Collaborator>>;\n  activeStep: number;\n  editMode: boolean;\n  savingAllow: boolean;\n  setProjectMasterSavingAllow: () => void;\n  atsApiIdentity?: boolean;\n  projects?: List<IMap<Project>>;\n  site: SiteName;\n  templateTranslationObject: object;\n}\n\ntype StepperPropsWithStyles = IFormStepperProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData & WithAtsApi;\n\nclass CreateNewProjectFormStepper extends React.Component<StepperPropsWithStyles, IFormStepperState> {\n  public state = {\n    activeStep: this.props.activeStep,\n    openDuplicateModal: false\n  };\n\n  public componentWillUnmount(): void {\n    const { dispatch } = this.props;\n    dispatch(new ClearFormValuesAction());\n    dispatch(new SetProjectFormActiveStepAction({ activeStep: 0 }));\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      setProjectMasterSavingAllow,\n      project,\n    } = this.props;\n    dispatch(new ClearFormValuesAction());\n    dispatch(new GetLeadSourcesAction());\n    dispatch(new SetFormValuesAction(project));\n    setProjectMasterSavingAllow();\n  }\n\n  public handleSubmit = (\n    {\n      transform,\n      callback,\n    }:\n    {\n      transform?: (values: Map<string, any>) => Map<string, any>,\n      callback?: (values?: Map<string, any>) => void\n    }\n  ) => (values: Map<string, any>) => {\n    const {\n      dispatch,\n      formValues,\n    } = this.props;\n    const {\n      activeStep\n    } = this.state;\n\n\n    const transformedValues = transform != null\n    ? transform(values)\n    : values;\n\n    const mergedValues = formValues.merge(transformedValues);\n\n    if (activeStep === 0) {\n      dispatch(new ClearFormValuesAction());\n    }\n    dispatch(new SetFormValuesAction(mergedValues));\n    if(callback != null){\n      callback(mergedValues);\n    }\n    return true;\n  }\n  public wholeTemplateSelected = React.createRef();\n  public updateWholeTemplateSelected = (allSelected: boolean) => {\n    this.wholeTemplateSelected = { current: allSelected };\n  };\n  public render() {\n    const {\n      t,\n      classes,\n      variantSet,\n      project,\n      editMode,\n      savingAllow,\n      isTestProject,\n      atsApiIdentity,\n      dispatch,\n      projects,\n      site,\n      formValues,\n      templateTranslationObject,\n      filterOutCountryIds,\n      enabledCountryIds,\n      backToSelection,\n    } = this.props;\n    const {\n      activeStep: _activeStep,\n    } = this.state;\n    const activeStep = editMode && project == null\n      ? -1\n      : _activeStep;\n\n    const withKeyContactComponent = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_KEY_CONTACT_COMPONENT);\n    const withTemplateSelection = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_TEMPLATE_SELECTION);\n    const withCreationMethodSelection = variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_CREATION_METHOD_SELECTION);\n    const hasBackButton = withCreationMethodSelection && !editMode;\n\n    return (\n      <div\n        className={classes.root}\n      >\n        <Stepper\n          activeStep={activeStep}\n          orientation='vertical'\n        >\n          <Step key={0}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createProjectSteps.step${0}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewProjectModalForm\n                    variantSet={variantSet}\n                    data={project}\n                    filterOutCountryIds={filterOutCountryIds}\n                    enabledCountryIds={enabledCountryIds}\n                    onSubmit={this.handleSubmit({\n                      transform: this.transformNewProjectModalFormValues,\n                      callback: (values) => {\n                        if (site !== SiteName.pt || editMode || !values.get('address')) {\n                          this.changeStep(1)();\n                          return\n                        }\n                        dispatch(new SearchProjectsAction({\n                          options: {\n                            limit: 10,\n                            offset: 0,\n                            orderBy: {\n                              id: -1\n                            }\n                          },\n                          filters: {\n                            and: [\n                              {\n                                address: {\n                                  eq: values.get('address')\n                                }\n                              }\n                            ]\n                          },\n                          onSuccess: (projects) => {\n                            if (projects.length > 0) {\n                              // open modal\n                              this.setState({\n                                openDuplicateModal: true\n                              })\n                            } else {\n                              this.changeStep(1)()\n                            }\n                          }\n                        }));\n\n                      }\n                    })}\n                  >\n                    {\n                      hasBackButton && (\n                        <Button\n                          color='primary'\n                          className={classes.button}\n                          onClick={backToSelection}\n                        >\n                          {t('formButtons.back')}\n                        </Button>\n                      )\n                    }\n                    <Button\n                      variant='contained'\n                      color='primary'\n                      type='submit'\n                      className={classes.button}\n                    >\n                      {t('formButtons.next')}\n                    </Button>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={this.changeStep(1)}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewProjectModalForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={1}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createProjectSteps.step${1}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewProjectBuildingSelectionForm\n                    onSubmit={\n                      isTestProject\n                        ? this.handleSubmit({\n                            transform: this.transformContactFormValues,\n                            callback: this.submitForm\n                          })\n                        : this.handleSubmit({\n                            callback: this.changeStep(1)\n                          })\n                    }\n                    data={project}\n                    variantSet={variantSet}\n                  >\n                    <Grid\n                      className={classes.buttons}\n                    >\n                      <Button\n                        color='primary'\n                        onClick={this.changeStep(-1)}\n                        className={classes.button}\n                      >\n                        {t('formButtons.back')}\n                      </Button>\n                      {\n                        isTestProject\n                          ? <Button\n                              variant='contained'\n                              color='primary'\n                              type='submit'\n                              className={classes.button}\n                              disabled={!savingAllow}\n                            >\n                              {t('formButtons.finish')}\n                            </Button>\n                          : <Button\n                            variant='contained'\n                            color='primary'\n                            type='submit'\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                      }\n                    </Grid>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={this.changeStep(1)}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewProjectBuildingSelectionForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          {\n            !isTestProject && withTemplateSelection && <Step key={2}>\n              <StepLabel>\n                <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterFromTemplateSteps.step${2}`, templateTranslationObject)}</Typography>\n              </StepLabel>\n              <StepContent>\n                <Grid container={true}>\n                  <Grid item={true} xs={12}>\n                    <TemplateSelectionForm\n                        countryId={formValues.getIn(['location', 'country', 'id'])}\n                        provinceId={formValues.getIn(['location', 'province', 'id'])}\n                        buildings={formValues.get('building')}\n                        onSubmit={this.handleSubmit({\n                          callback: this.changeStep(1)\n                        })}\n                        updateWholeTemplateSelected={this.updateWholeTemplateSelected}\n                    >\n                      <Button\n                          color='primary'\n                          onClick={this.changeStep(-1)}\n                          className={classes.button}\n                      >\n                        {t('formButtons.back')}\n                      </Button>\n                      <Button\n                          variant='contained'\n                          color='primary'\n                          type='submit'\n                          className={classes.button}\n                      >\n                        {t('formButtons.next')}\n                      </Button>\n                    </TemplateSelectionForm>\n                  </Grid>\n                </Grid>\n              </StepContent>\n            </Step>\n          }\n          {\n            !isTestProject &&\n              <Step key={3}>\n                <StepLabel>\n                  <Typography variant='subtitle1' style={{ color: 'inherit' }}>\n                    {\n                      withKeyContactComponent\n                      ? t(`formStepping.createProjectSteps.step${2}KeyContacts`)\n                      : t(`formStepping.createProjectSteps.step${2}`)\n                    }\n                  </Typography>\n                </StepLabel>\n                <StepContent>\n                  <Grid\n                    container={true}\n                  >\n                    {\n                      withKeyContactComponent\n                      ? <NewProjectKeyContactsForm\n                          onSubmit={this.handleSubmit({\n                            transform: this.transformContactFormValues,\n                            callback: this.submitForm\n                          })}\n                          projectData={project}\n                        >\n                          <Grid container={true} alignItems='center'>\n                            <Button\n                                color='primary'\n                                onClick={this.changeStep(-1)}\n                                className={classes.button}\n                            >\n                              {t('formButtons.back')}\n                            </Button>\n                            <Button\n                                variant='contained'\n                                color='primary'\n                                type='submit'\n                                disabled={!savingAllow}\n                                className={classes.button}\n                            >\n                              {t('formButtons.finish')}\n                            </Button>\n                            {\n                              savingAllow\n                                  ? null\n                                  : <CircularProgress color='primary' className={classes.circularProgress} />\n                            }\n                          </Grid>\n                      </NewProjectKeyContactsForm>\n                      : <NewProjectCollaboratorsForm\n                            onSubmit={this.handleSubmit({\n                              transform: this.transformCollaboratorFormValues,\n                              callback: this.submitForm\n                            })}\n                            projectData={project}\n                        >\n                          <Grid container={true} alignItems='center'>\n                            <Button\n                              color='primary'\n                              onClick={this.changeStep(-1)}\n                              disabled={!savingAllow}\n                              className={classes.button}\n                            >\n                              {t('formButtons.back')}\n                            </Button>\n                            <Button\n                              variant='contained'\n                              color='primary'\n                              type='submit'\n                              disabled={!savingAllow}\n                              className={classes.button}\n                            >\n                              {t('formButtons.finish')}\n                            </Button>\n                            {\n                              savingAllow\n                                  ? null\n                                  : <CircularProgress color='primary' className={classes.circularProgress} />\n                            }\n                          </Grid>\n                          <Debug\n                            debugLevel={1}\n                            delayedRender={() => {\n                              return <React.Fragment>\n                                <Button\n                                  variant='contained'\n                                  color='primary'\n                                  onClick={() => this.submitForm()}\n                                  className={classes.button}\n                                  disabled={!savingAllow}\n                                >\n                                  {t('formButtons.finish')}\n                                </Button>\n                              </React.Fragment>;\n                            }}\n                          />\n                        </NewProjectCollaboratorsForm>\n                    }\n                  </Grid>\n                </StepContent>\n              </Step>\n          }\n        </Stepper>\n        { site !== SiteName.pt || editMode ? null : <DuplicateModal\n            open={this.state.openDuplicateModal}\n            onClose={() => this.setState({ openDuplicateModal: false })}\n            onCancel={() => this.setState({ openDuplicateModal: false })}\n            onNo={() => {\n              this.setState({\n                openDuplicateModal: false,\n                activeStep: 1\n              })\n            }}\n            onYes={(project) => {\n              // redirect to project detail page\n              dispatch(push(`${PROJECT_LIST_DETAIL_PATH}/${project.get('id')}`));\n            }}\n            projects={projects}\n        /> }\n      </div>\n    );\n  }\n  private changeStep = (index: number, absolute: boolean = false) => () => {\n    this.setState({\n      activeStep: absolute ? index : (this.state.activeStep + index)\n    });\n  };\n\n  private transformNewProjectModalFormValues = (values: Map<string, any>) => {\n\n    const leadSource = values.get('leadSource');\n    const leadSources = List<Map<string, List<string>>>().withMutations((leadSourceCtx) => {\n\n      leadSource && leadSource.forEach((preTransformLeadSource, key) => {\n        const leadSourceSource = Map<string, any>().withMutations((leadSourceCtx) => {\n          return leadSourceCtx.merge({\n            'id': key,\n            'source': preTransformLeadSource\n          })\n\n        })\n        return leadSourceCtx.push(leadSourceSource)\n      })\n    })\n\n    return values.withMutations((ctx) => {\n      ctx.set('leadSource', leadSources);\n      // for project valuation we potentially have 'null', 'number', 'string' types\n      // if 'null' or 'number', the value is from BE and untouched, we keep it.\n      // we transform  before we pass to BE\n      const valuation = values.get('valuation');\n      if (typeof valuation === 'string') {\n        if (valuation === '') {\n          ctx.set('valuation', null);\n        } else {\n          const parsedValuation = parseInt(valuation)\n          if (!Number.isNaN(parsedValuation)) {\n            ctx.set('valuation',parsedValuation)\n          }\n        }\n      }\n    })\n  }\n\n  private transformContactFormValues = (values: Map<string, any>) => {\n    // BE needs empty values to be empty string. redux form default is null\n    const {\n      project\n    } = this.props;\n    \n    const keyContacts = values.get('keyContacts');\n    const projectKeyContacts = project?.get('keyContacts'); // it can sometimes be [Map, Map, ...] hence the check below;\n    const quoteKeyContacts = List.isList(projectKeyContacts)\n      ? (projectKeyContacts || List()).filter((keyContact) => keyContact.get('quoteId')).toArray()\n      : (projectKeyContacts as any || []).filter((keyContact) => keyContact.get('quoteId'));\n\n    if ((keyContacts === null || keyContacts === '') && quoteKeyContacts.length === 0) {\n      return values.setIn(['keyContacts'], [])\n    }\n    // since we filterd out keyContact that contain quoteId from edit page\n    // merge key contacts that with quoteId from project before submit\n    const updatedKeyContacts = (keyContacts || []).concat(quoteKeyContacts);\n    return values.setIn(['keyContacts'], updatedKeyContacts);\n  }\n\n  private transformCollaboratorFormValues = (values: Map<string, any>) => {\n    const {\n      collaborators,\n    } = this.props;\n    const permissions: Map<string, List<string>> = values.get('permissions');\n    const transformedValues = Map<string, any>().withMutations((valuesCtx) => {\n      if (permissions != null) {\n\n        const collaboratorsWithPermissions = List<IMap<Collaborator>>().withMutations((collaboratorListCtx) => {\n          permissions.filter((permissionList) => {\n            return permissionList != null;\n          }).forEach((permissionList, collaboratorIdAsString) => {\n            const collaboratorId = parseInt(collaboratorIdAsString, 10);\n            const permissionListForApi = Map<string, number>().withMutations((permissionListForApiCtx) => {\n              permissionList.forEach((permission: string) => {\n                permissionListForApiCtx.set(permission, 1);\n              });\n            }) as IMap<CollaboratorPermissionObject>;\n\n            const collaborator = collaborators.get(collaboratorId)\n            if (collaborator != null) {\n              collaboratorListCtx.push(collaborator.set('permissions', permissionListForApi))\n            }\n          });\n        });\n        valuesCtx.set('collaborators', collaboratorsWithPermissions);\n      }\n    });\n\n    return transformedValues;\n  }\n\n  private submitForm = (values?: Map<string, any>) => {\n    const {\n      variantSet,\n      projectId,\n      isTestProject,\n      amplitudeData,\n      onSubmit,\n    } = this.props;\n    // we need to force cast this here since we technically don't know what values are coming out of the form\n    // console.error('submitForm', {\n    //   values,\n    // });\n    const trackProject = values.get('trackProject');\n    const formatedValues = values?.withMutations((ctx) => {\n      ctx.set('bidDate', removeTZ(values.get('bidDate')));\n      ctx.delete('selectedDrawings');\n      ctx.delete('trackProject');\n\n      const area = ctx.get('area');\n      if (ctx.has('area')) {\n        ctx.set('area', typeof area === 'string' ? (area.trim() || null) : area);\n      }\n    });\n    const projectValues = isTestProject ? formatedValues.set('status', 'test') : formatedValues;\n\n    // for Amplitude tracking\n    const projectName = projectValues && projectValues.get('name');\n    const projectType = isTestProject ? 'Test project' : 'Project';\n    const country = projectValues && projectValues.getIn(['location', 'country', 'value']);\n    const province = projectValues && projectValues.getIn(['location', 'province', 'value']);\n    const city = projectValues && projectValues.getIn(['location', 'city', 'value']);\n    const bidDate = projectValues && projectValues.get('bidDate').slice(0, 10);\n    const area = projectValues && projectValues.get('area');\n    const buildingClasses = projectValues && projectValues.getIn(['building', 'buildingClasses']);\n    const buildingClassesString = buildingClasses.map( x => x.get('value')).join();\n    const buildingTypes = buildingClasses.reduce((acc, buildingClass) => {\n      const types = buildingClass.get('buildingTypes').map((buildingType) => {\n        return buildingType.get('value');\n      });\n      return acc.push(types).flatten(Infinity);\n    },List());\n    const buildingTypesString = buildingTypes.join();\n    const analyticTracking = () => {\n      amplitude.logEvent(AMPLITUDE_EVENT.projectCreated,\n      amplitudeData({\n        projectName,\n        projectType,\n        country,\n        province,\n        city,\n        bidDate,\n        area,\n        buildingClassesCount: `${buildingClasses.size}`,\n        buildingClasses: buildingClassesString,\n        buildingTypesCount: `${buildingTypes.size}`,\n        buildingTypes: buildingTypesString,\n        ...buildingAmplitudeData(buildingClasses).toJS()\n      }))\n    }\n    analyticTracking()\n    onSubmit({\n      values,\n      projectId,\n      projectValues,\n      wholeTemplateSelected: this.wholeTemplateSelected,\n      trackProject,\n    });\n  }\n}\nconst mapStateToProps = (state: any, props: ICreateNewProjectFormStepperProps) => {\n  const editMode = props.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_EDIT_MODE);\n\n  const project = editMode ? props.project : undefined;\n\n  return {\n    ...createStructuredSelector({\n      atsApiIdentity: makeSelectAtsApiState('identity'),\n      formValues: makeSelectFormValues(),\n      collaborators: makeSelectCollaborators(),\n      selectedSpec: makeSelectSpec(),\n      activeStep: makeSelectProjectFormActiveStep(),\n      savingAllow: makeSelectProjectMasterSavingAllow(),\n      projects: makeSelectSearchedProjects(),\n      site: makeSelectSite(),\n      templateTranslationObject: makeSelectTemplateTranslationObject(),\n    })(state),\n    project,\n    editMode,\n  };\n};\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    setProjectMasterSavingAllow: () => {\n      dispatch(new SetProjectMasterSavingAllowAction({ allow: true }));\n    },\n    dispatch,\n  };\n};\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n\n  const project = stateProps.formValues.count() ? stateProps.formValues : stateProps.project\n\n  return {\n    ...stateProps,\n    ...dispatchProps,\n    ...ownProps,\n    project\n  }\n}\n\nexport default compose<React.ComponentClass<ICreateNewProjectFormStepperProps>>(\n  withStyles(styles, { withTheme: true }),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  withTranslation('translations'),\n  withAmplitudeData,\n  withAtsApi(),\n)(CreateNewProjectFormStepper);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List, Set} from 'immutable';\nimport {\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme,\n  Popper,\n  ClickAwayListener,\n  Paper,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { IConfig, IMap } from 'ats-utils/src';\nimport { XrefProduct } from '../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n} from 'redux-form';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {  makeSelectAvailableXrefTypes } from '../../modules/ListModule/selectors';\nimport { FieldAutocomplete } from '../../components';\nimport { IFieldAutocompleteComponentProps } from '../../components/FieldAutocomplete';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { IDetailCrossTypes } from '../../components/CrossReferenceTypesInfoPopup/Component';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../components/FieldCheckbox';\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\n\nexport const COMPETITOR_FILTER = 'competitorFilter';\n\nconst inputStyle =  { fontSize: '0.9em' };\n\ninterface ICompetitorFilterComponentProps {\n  onClose: () => void;\n  anchorEl: any;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n  competitorProducts: List<IMap<XrefProduct>>;\n}\n\ninterface ICompetitorFilter extends ICompetitorFilterComponentProps {\n  formValues: Map<string, any>;\n  detailXrefTypes: IDetailCrossTypes[];\n  config: IMap<IConfig>;\n  dispatch: Dispatch<IAction>;\n}\n\ntype ICompetitorFilterType = ICompetitorFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass CompetitorFilter extends React.Component<ICompetitorFilterType> {\n  public state = {\n    hasProductType: true,\n    hasSeriesType: true,\n    brandMap: {},\n    categoryMap: {},\n    manufacturers: [],\n    categories: [],\n  };\n\n  public componentDidMount(): void {\n    if (this.props.competitorProducts?.size) {\n      this.setUpAvailableOptions();\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      competitorProducts,\n    } = this.props;\n\n    if (competitorProducts?.size && !competitorProducts.equals(prevProps.competitorProducts)) {\n      this.setUpAvailableOptions();\n    }\n  }\n\n  public setUpAvailableOptions = () => {\n    const {\n      competitorProducts,\n    } = this.props;\n\n    // calculate the available filter options\n    let newHasProductType = false;\n    let newHasSeriesType = false;\n    let newBrandMap = Map<string, Set<string>>();\n    let newCategoryMap = Map<string, Set<string>>();\n\n    competitorProducts.forEach((competitorProduct) => {\n      const competitorProductType = competitorProduct.get('competitorProductType');\n      if (competitorProductType === 'product') {\n        newHasProductType = true;\n      } else if (competitorProductType === 'series') {\n        newHasSeriesType = true;\n      }\n\n      const brand = competitorProduct.get('brand');\n      const category = competitorProduct.get('categoryName');\n      if (newBrandMap.has(brand)) {\n        if (!newBrandMap.get(brand).has(category)) {\n          newBrandMap = newBrandMap.set(brand, newBrandMap.get(brand).add(category));\n        }\n      } else {\n        newBrandMap = newBrandMap.set(brand, Set([category]));\n      }\n      if (newCategoryMap.has(category)) {\n        if (!newCategoryMap.get(category).has(brand)) {\n          newCategoryMap = newCategoryMap.set(category, newCategoryMap.get(category).add(brand));\n        }\n      } else {\n        newCategoryMap = newCategoryMap.set(category, Set([brand]));\n      }\n    });\n\n    newBrandMap = newBrandMap.map((set) => set.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())));\n    newCategoryMap = newCategoryMap.map((set) => set.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())));\n\n    const newManufacturers = newBrandMap.keySeq().sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));\n    const newCategories = newCategoryMap.keySeq().sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));\n\n    this.setState({\n      hasProductType: newHasProductType,\n      hasSeriesType: newHasSeriesType,\n      brandMap: newBrandMap.toJS(),\n      categoryMap: newCategoryMap.toJS(),\n      manufacturers: newManufacturers.toJS(),\n      categories: newCategories.toJS(),\n    });\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(reset(COMPETITOR_FILTER));\n    setUniqueKey(Date.now());\n  }\n\n  public render() {\n    const {\n      classes,\n      formValues = Map(),\n      onClose,\n      uniqueKey,\n      anchorEl,\n      config,\n      t,\n    } = this.props;\n    const {\n      hasProductType,\n      hasSeriesType,\n      manufacturers,\n      categories,\n      brandMap,\n      categoryMap,\n    } = this.state;\n\n    const brand = formValues.get('brand');\n    const category = formValues.get('category');\n    const _brands = category ? categoryMap[category] : manufacturers;\n    const _categories = brand ? brandMap[brand] : categories;\n\n    const useSecondaryColorForCheckbox = config.getIn(['uiOverrides', 'useSecondaryColorForCheckbox'], false);\n\n    return (\n      <Popper\n        open={Boolean(anchorEl)}\n        anchorEl={anchorEl}\n        disablePortal={true}\n        placement='left'\n      >\n        <ClickAwayListener onClickAway={onClose}>\n          <Paper elevation={4} style={{ width: DRAWER_MAX_WIDTH }}>\n            <form\n              key={uniqueKey}\n              className={classes.body}\n            >\n              {/* Header */}\n              <Grid\n                className={classes.header}\n                container={true}\n                justify='space-between'\n                alignItems='center'\n              >\n                <Typography\n                  variant='h6'\n                >\n                  {t('generalListFilter.title')}\n                </Typography>\n                <Grid\n                  container={true}\n                  justify='space-between'\n                  item={true}\n                  xs={5}\n                >\n                  <Button\n                    color='primary'\n                    onClick={this.handleResetForm}\n                  >\n                    {t('generalListFilter.reset')}\n                  </Button>\n                  <IconButton\n                    onClick={onClose}\n                  >\n                    <CloseIcon />\n                  </IconButton>\n                </Grid>\n              </Grid>\n\n              {/* Content */}\n              <Grid\n                item={true}\n                className={classes.content}\n              >\n\n                {/* competitor type */}\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('CompetitorProductFilter.competitorTypeLabel')}\n                </Typography>\n                <Grid\n                  container={true}\n                  justify='space-between'\n                  item={true}\n                  xs={12}\n                  className={classes.row}\n                >\n                  <Grid\n                    item={true}\n                    xs={6}\n                  >\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='competitorProductType_product'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('CompetitorProductFilter.competitorTypeProduct'),\n                        color: useSecondaryColorForCheckbox ? 'secondary' : 'primary',\n                        helperText: false,\n                        variant: 'single',\n                        disabled: !hasProductType\n                      }}\n                    />\n                  </Grid>\n                  <Grid\n                    item={true}\n                    xs={6}\n                  >\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='competitorProductType_series'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('CompetitorProductFilter.competitorTypeSeries'),\n                        color: useSecondaryColorForCheckbox ? 'secondary' : 'primary',\n                        helperText: false,\n                        variant: 'single',\n                        disabled: !hasSeriesType\n                      }}\n                    />\n                  </Grid>\n                </Grid>\n\n                {/* Competitor Product Manufacturer */}\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('CompetitorProductFilter.manufacturerLabel')}\n                </Typography>\n                <Grid\n                  item={true}\n                  xs={12}\n                  className={classes.row}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='brand'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: _brands,\n                        placeholder: t('CompetitorProductFilter.manufacturerPlaceholder'),\n                        getOptionLabel: option => option ? option : null,\n                        renderOption: option => option && <Typography>{option}</Typography>,\n                      },\n                      textField_inputProps: {\n                        style: inputStyle\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n                {/* Category */}\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('CompetitorProductFilter.categoryLabel')}\n                </Typography>\n                <Grid\n                  item={true}\n                  xs={12}\n                  className={classes.row}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='category'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: _categories,\n                        placeholder: t('CompetitorProductFilter.categoryPlaceholder'),\n                        getOptionLabel: option => option ? option : null,\n                        renderOption: option => option && <Typography>{option}</Typography>\n                      },\n                      textField_inputProps: {\n                        style: inputStyle\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n              </Grid>\n            </form>\n          </Paper>\n        </ClickAwayListener>\n      </Popper>\n    );\n  }\n}\n\nconst DRAWER_MAX_WIDTH = 370;\nconst styles = (theme: Theme): StyleRules => ({\n  header: {\n    padding: theme.spacing(0, 2, 1, 2)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2),\n    height: '100%',\n    maxWidth: `${DRAWER_MAX_WIDTH}px`\n  },\n  row: {\n    padding: theme.spacing(0, 2)\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflowY: 'auto',\n    overflowX: 'hidden',\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16),\n    padding: theme.spacing(0, 2),\n  },\n});\n\nconst mapStateToProps = (state, ownProps: ICompetitorFilterComponentProps) => {\n  return {\n    form: COMPETITOR_FILTER,\n    ...createStructuredSelector({\n      formValues: getFormValues(COMPETITOR_FILTER),\n      detailXrefTypes: makeSelectAvailableXrefTypes(),\n      config: makeSelectConfig(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ICompetitorFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: COMPETITOR_FILTER,\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(CompetitorFilter);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  change,\n  InjectedFormProps,\n  reset,\n} from 'redux-form';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Typography,\n  Button,\n  Orientation,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport {\n  IAction,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectXrefData,\n  makeSelectCachedCompetitorProduct,\n} from '../../modules/CrossRefModule/selectors';\nimport {\n  XrefExpansion,\n} from '../../containers';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  XrefData, XrefProduct,\n} from '../../models';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  ResetSearchResultsAction,\n  SetSearchTermAction,\n  SetSelectedCategoryIdAction,\n  SetSelectedManufacturerValueAction,\n} from '../../modules/CrossRefModule/actions';\nimport { PaddedMessage } from '../../components';\nimport classNames from 'classnames'\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport { makeSelectUserFirmCompanyAltName, makeSelectUserFirmCompanyName } from '../../modules/AccountModule/selectors';\nimport CrossReferenceTypesInfoPopup from '../../components/CrossReferenceTypesInfoPopup';\nimport { CROSS_REF_QUICKSEARCH_FORM } from '../../modules/CrossRefModule/constants';\nimport { COMPETITOR_FILTER } from '../CrossReferenceSearchContainer/CompetitorFilter';\nimport {makeSelectAppId, makeSelectConfig} from '../../modules/AtsModule/selectors';\nimport {BEMIS_XREF_ID} from '../../constants';\n\ninterface ICrossReferenceRecommendedProductsContainerComponentProps {\n  handleBack: (addStepNumber: number) => void;\n  orientation: Orientation;\n  customProductImage?: string;\n}\n\ninterface ICrossReferenceRecommendedProductsContainerProps extends InjectedFormProps {\n  dispatch: React.Dispatch<IAction>;\n  selectedCompetitorProduct: IMap<XrefProduct>;\n  xRefData: Map<number | string, List<IMap<XrefData>>>;\n  companyName: string;\n  companyAltName: string;\n  appId: string;\n  config: IMap<IConfig>;\n}\n\ntype CrossReferenceRecommendedProductsContainerType = WithTranslation & ICrossReferenceRecommendedProductsContainerProps & ICrossReferenceRecommendedProductsContainerComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass CrossReferenceRecommendedProductsContainer extends React.Component<CrossReferenceRecommendedProductsContainerType, {}> {\n\n  public reset = () => {\n    const {\n      dispatch,\n      handleBack,\n    } = this.props;\n\n    // console.debug('reset fired');\n\n    // clear the store\n    dispatch(new ResetSearchResultsAction());\n    // clear search field\n    dispatch(new SetSearchTermAction({ searchTerm: '' }));\n    handleBack(1);\n  }\n\n  public resetDropdowns = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SetSelectedManufacturerValueAction({ selectedManufacturerValue: '' }));\n    dispatch(new SetSelectedCategoryIdAction({ selectedCategoryId: -1 }));\n    dispatch(change(CROSS_REF_QUICKSEARCH_FORM, 'manufacturerSelection', null));\n    dispatch(change(CROSS_REF_QUICKSEARCH_FORM, 'categorySelection', null));\n  }\n\n  public fullReset = () => {\n    this.reset();\n    this.resetDropdowns();\n    this.props.dispatch(reset(COMPETITOR_FILTER));\n  }\n\n  public xrefTypeInfo = () => {\n    const {\n      classes,\n      t,\n      appId,\n      config,\n    } = this.props;\n\n    const isBemis = appId === BEMIS_XREF_ID;\n    const useSecondaryColorForCrossTypeButton = config.getIn(['uiOverrides', 'useSecondaryColorForCrossTypeButton'], false);\n    return (\n      <CrossReferenceTypesInfoPopup>\n        <Grid container={true}>\n          <ShuffleIcon color={useSecondaryColorForCrossTypeButton ? 'secondary' : 'primary'} className={classes.icon} />\n          <Typography color={useSecondaryColorForCrossTypeButton ? 'secondary' : 'primary'}>\n            {isBemis ? t('CrossReference.crossReferenceTypesAlt') : t('CrossReference.crossReferenceTypes')}\n          </Typography>\n        </Grid>\n      </CrossReferenceTypesInfoPopup>\n    )\n  }\n\n  public render() {\n    const {\n      classes,\n      xRefData,\n      selectedCompetitorProduct,\n      handleBack,\n      t,\n      orientation = 'vertical',\n      customProductImage,\n      companyName,\n      companyAltName,\n      appId,\n      config,\n    } = this.props;\n\n    const isBemis = appId === BEMIS_XREF_ID;\n    const selectedCompetitorProductId = selectedCompetitorProduct.get('id');\n    const xrefDataForCompetitorProduct = xRefData.get(selectedCompetitorProductId);\n    const _companyName = companyAltName || companyName || '';\n    const useSecondaryColorForSpinner = config.getIn(['uiOverrides', 'useSecondaryColorForSpinner']);\n\n    const resultTextDisplay = xrefDataForCompetitorProduct\n    ? <Grid>\n        <Typography\n          variant='body2'\n          className={classNames({\n            [classes.darkText]: true,\n            [classes.bold]: orientation === 'horizontal'\n          })}\n        >\n          { `${xrefDataForCompetitorProduct.size} ${xrefDataForCompetitorProduct.size === 1 ? t('CrossReference.sponsorResultFound') : t('CrossReference.sponsorResultsFound')} ${selectedCompetitorProduct.get('productNumber')}` }\n        </Typography>\n      </Grid>\n    : null;\n\n    return (\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n      >\n        {\n          orientation === 'horizontal' && (\n            <Typography variant='h6' className={classes.bold}>\n              2. {t('CrossReference.step2Label')}\n            </Typography>\n          )\n        }\n        <Typography variant='body2' className={classes.darkText}>\n          {t('CrossReference.selectSponsorProduct')}\n        </Typography>\n        <Grid\n          container={true}\n          direction='row'\n          justify='space-between'\n          alignItems='center'\n          className={classes.resultInfoContainer}\n        >\n          { resultTextDisplay }\n          { this.xrefTypeInfo() }\n          <Grid>\n            <Button\n              onClick={() => handleBack(1)}\n              className={classes.button}\n              color='primary'\n            >\n              {t('formButtons.back')}\n            </Button>\n            <Button\n              onClick={this.fullReset}\n              color='primary'\n            >\n              {t('formButtons.reset')}\n            </Button>\n          </Grid>\n        </Grid>\n        {\n          xrefDataForCompetitorProduct != null\n          ? <XrefExpansion\n              customProductImage={customProductImage}\n              xRefData={xrefDataForCompetitorProduct}\n              companyName={_companyName}\n            />\n          : <PaddedMessage loading={true} useSecondaryColorForSpinner={useSecondaryColorForSpinner}>\n              {isBemis ? t('CrossReference.loadingDataAlt') : t('CrossReference.loadingData')}\n            </PaddedMessage>\n        }\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  darkText: {\n    color: 'rgba(0, 0, 0, 0.87)',\n  },\n  resultInfoContainer: {\n    marginBottom: theme.spacing(1.5)\n  },\n  bold: {\n    fontWeight: 'bold',\n  },\n  icon: {\n    marginRight: theme.spacing()\n  },\n});\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ICrossReferenceRecommendedProductsContainerComponentProps) => {\n  return {\n    ...createStructuredSelector({\n      xRefData: makeSelectXrefData(),\n      selectedCompetitorProduct: makeSelectCachedCompetitorProduct(),\n      companyName: makeSelectUserFirmCompanyName(),\n      companyAltName: makeSelectUserFirmCompanyAltName(),\n      appId: makeSelectAppId(),\n      config: makeSelectConfig(),\n    })(originalState)\n  }\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ICrossReferenceRecommendedProductsContainerComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CrossReferenceRecommendedProductsContainer);\n","import React from 'react';\nimport {Grid, Typography, Tooltip, Card, useTheme, makeStyles, Link} from '@material-ui/core';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List,\n} from 'immutable';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Image from '../../components/Image';\nimport { AtsSvgProduct, AtsSvgSeries, AtsSvgPackage } from '../../components/AtsSvg';\nimport { iconSelect } from '../XrefExpansion';\nimport { XrefProduct, XrefType } from '../../models';\nimport { AMPLITUDE_EVENT, ATS_EVENT } from '../../constants';\nimport { GetExactSearchXrefAction, SetSelectedCompetitorProductId } from '../../modules/CrossRefModule/actions';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport { XREF_REF_STEPPER } from '../CrossReferenceStepper/constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectConfigUiOverrides } from '../../modules/AtsModule/selectors';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\n\nconst useStyles = makeStyles((theme) => ({\n  itemTitle: {\n    cursor: 'pointer'\n  },\n  infoContainer: {\n    width: 185\n  },\n  textOverFlow: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  svg: {\n    width: '120px',\n    height: '120px'\n  },\n}));\n\nfunction CompetitorProductCard(props) {\n  const {\n    competitorProduct,\n    customProductImage,\n    secondaryColorIcon,\n  } = props;\n\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const uiOverrides = useSelector(makeSelectConfigUiOverrides());\n\n  const useSecondaryColorForCardIcon: boolean = uiOverrides?.get('useSecondaryColorForCardIcon') ?? secondaryColorIcon;\n  const cardSvgBackgroundColor = uiOverrides?.get('cardSvgBackgroundColor');\n  const cardSvgShadowColor = uiOverrides?.get('cardSvgShadowColor');\n  const useSecondaryColorForProductNumberLink = uiOverrides?.get('useSecondaryColorForProductNumberLink') ?? false;\n\n  const competitorProductType = competitorProduct.get('competitorProductType');\n  const SVG = competitorProductType === 'product' ? AtsSvgProduct : competitorProductType === 'package' ? AtsSvgPackage : AtsSvgSeries;\n\n  const productNumbers = competitorProduct.get('products') && competitorProduct\n    .get('products')\n    .reduce((acc, product) => acc.push(product.get('productNumber')), List())\n    .join(', ');\n  const productNumbersDisplay = competitorProductType === 'package'\n    ? <Tooltip title={productNumbers} className={classes.textOverFlow}>\n        <Typography variant='body1' color='inherit'>\n          { productNumbers }\n        </Typography>\n      </Tooltip>\n    : null;\n\n\n  // const crossTypes = competitorProduct.get('crossTypes');\n\n  const productSelected = (_competitorProduct: IMap<XrefProduct>, _competitorProductType: string) => {\n    const competitorProductId = _competitorProduct.get('id') ?? null;\n    const productNumber = competitorProduct.get('productNumber') ?? null;\n    const brand = competitorProduct.get('brand') ?? null;\n    const categoryName = competitorProduct.get('categoryName') ?? null;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.xrefCompetitorProductSelected, amplitudeData({\n      searchTerm: productNumber,\n      searchId: competitorProductId,\n      brand,\n      categoryName,\n    }));\n\n    const customData = {\n      competitorProductId,\n      productNumber,\n      brand,\n      categoryName,\n      competitorProductType: _competitorProductType,\n    };\n    const trackingData = {\n      eventType: ATS_EVENT.xref_stepOne_CompetitorSelected,\n      defaultData: amplitudeData(),\n      customData,\n    };\n    dispatch(new CreateAnalyticsEventsAction({\n      trackingData\n    }));\n\n    dispatch(new GetExactSearchXrefAction({\n      competitorProduct: _competitorProduct,\n      competitorProductType: _competitorProductType,\n      options: { // display firm specific xrefs first in the list\n        orderBy: {\n          isFirmSpecific: 1,\n          id: 1\n        }\n      }\n    }));\n    dispatch(new SetSelectedCompetitorProductId(_competitorProduct.get('id')));\n    dispatch(new SetOverlayComponentContentAction({\n      id: XREF_REF_STEPPER,\n      content: 1,\n    }));\n  };\n\n  return (\n    <Grid\n      item={true}\n      lg={4}\n      md={6}\n      sm={12}\n      xs={12}\n    >\n      <Card>\n        <Grid\n          container={true}\n          direction='row'\n          wrap='nowrap'\n          spacing={2}\n        >\n          <Grid\n            item={true}\n            container={true}\n            alignItems='center'\n            xs={4}\n          >\n            {\n              customProductImage\n              ? <Image\n                  src={customProductImage}\n                  width='70px'\n                  aspectRatio={'100%'}\n                  fromService={true}\n                  backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n                />\n              : <Grid\n                  container={true}\n                  justify='center'\n                  alignItems='center'\n                  className={classes.svg}\n                >\n                  <SVG\n                    width='90'\n                    height='90'\n                    color={{\n                      backgroundColor: cardSvgBackgroundColor || (useSecondaryColorForCardIcon ? theme.palette.secondary[100] : theme.palette.primary[200]),\n                      shadowColor: cardSvgShadowColor || (useSecondaryColorForCardIcon ? theme.palette.secondary[800] : theme.palette.primary[800])\n                    }}\n                    margin={String(theme.spacing(1, 0, 1, 1))}\n                  />\n                </Grid>\n            }\n          </Grid>\n          <Grid\n            container={true}\n            item={true}\n            direction='column'\n            alignItems='flex-start'\n            justify='center'\n            spacing={1}\n            xs={8}\n          >\n            <Grid item={true} className={classes.infoContainer}>\n              <Link\n                className={classes.itemTitle}\n                underline='none'\n                color={useSecondaryColorForProductNumberLink ? 'secondary' : 'primary'}\n                onClick={() => {\n                  productSelected(\n                    competitorProduct,\n                    competitorProductType\n                  );\n                }}\n              >\n                <Tooltip title={competitorProduct.get('productNumber') || null}>\n                  <Typography variant='body1' color='inherit' className={classes.textOverFlow}>\n                    {competitorProduct.get('productNumber')}\n                  </Typography>\n                </Tooltip>\n              </Link>\n            </Grid>\n            <Grid item={true} className={classes.infoContainer}>\n              <Tooltip title={competitorProduct.get('brand') || null}>\n                <Typography variant='body1' color='inherit' className={classes.textOverFlow}>\n                  {competitorProduct.get('brand')}\n                </Typography>\n              </Tooltip>\n              <Tooltip title={competitorProduct.get('categoryName') || null} className={classes.textOverFlow}>\n                <Typography variant='body1' color='inherit'>\n                  {competitorProduct.get('categoryName')}\n                </Typography>\n              </Tooltip>\n              { productNumbersDisplay }\n            </Grid>\n          </Grid>\n        </Grid>\n      </Card>\n    </Grid>\n  );\n}\n\nexport default React.memo(CompetitorProductCard);","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n} from 'redux-form';\nimport {\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Typography,\n  Button,\n  InputAdornment,\n  Divider,\n  Orientation,\n  Popper,\n  Fade,\n  Paper,\n  Input,\n  Chip,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport {\n  IAction,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  reduxForm,\n  Field,\n} from 'redux-form/immutable';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport {\n  CROSS_REF_QUICKSEARCH_FORM,\n} from '../../modules/CrossRefModule/constants';\nimport {\n  makeSelectCompetitorProducts,\n  makeSelectSearchTerm,\n  makeSelectXrefManufacturer,\n  makeSelectXrefCategory,\n  makeSelectXrefSelectedManufacturerValue,\n  makeSelectXrefSelectedCategoryId,\n  makeSelectGetCompetitorProductsLoading,\n  makeSelectGetXrefCategoriesLoading,\n  makeSelectGetXrefManufacturersLoading\n} from '../../modules/CrossRefModule/selectors';\nimport {\n  GetCompetitorProductsAction,\n  GetXrefManufacturersAction,\n  GetXrefCategoriesAction,\n  GetXrefProductByManufacturerAction,\n  GetXrefProductsByCategoryAction,\n  ResetSearchResultsAction,\n  SetSearchTermAction,\n  SetSelectedManufacturerValueAction,\n  SetSelectedCategoryIdAction,\n  CancelXrefSearchAction,\n  GetCompetitorProductsLoadingAction,\n} from '../../modules/CrossRefModule/actions';\nimport {\n  FieldTextField, PaddedMessage,\n} from '../../components';\nimport FieldListItemReactSelect, { IFieldListItemReactSelectComponentProps } from '../../components/FieldListItemReactSelect';\nimport { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  XrefManufacturer,\n  XrefCategory,\n  XrefProduct,\n} from '../..//models';\nimport SearchIcon from '@material-ui/icons/Search';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport classNames from 'classnames';\nimport {\n  ATS_EVENT,\n  BEMIS_XREF_ID,\n  CONTRAC_XREF_ID,\n  CROSS_TYPE_NAMES,\n  FIAT_XREF_ID,\n  HAWS_XREF_ID,\n  IPS_XREF_ID,\n  KOHLER_XREF_ID,\n  MINIMUM_SEARCH_CHARACTERS,\n  MISSION_RUBBER_XREF_ID,\n  NEPTUNE_XREF_ID,\n  OSB_XREF_ID,\n  PRESSALIT_XREF_ID,\n  PRIER_XREF_ID,\n  TS_BRASS_XREF_ID,\n  WILLIAMS_BROTHERS_XREF_ID\n} from '../../constants';\nimport { debounce } from 'lodash';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { makeSelectAppId, makeSelectConfig } from '../../modules/AtsModule/selectors';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport CompetitorFilter, { COMPETITOR_FILTER } from './CompetitorFilter';\nimport CompetitorProductCard from './CompetitorProductCard';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\n\nconst reactSelectComponents = {\n  DropdownIndicator: option => (\n    <ArrowDropDownIcon\n      style={{\n        color: 'rgba(0, 0, 0, 0.54)'\n      }}\n    />\n  )\n};\n\ninterface CrossReferenceSearchContainerComponentProps {\n  orientation: Orientation;\n  customProductImage?: string;\n}\n\ninterface CrossReferenceSearchContainerProps extends InjectedFormProps {\n  dispatch: React.Dispatch<IAction>;\n  quickSearch: (value: string) => void;\n  manufacturerSelect: any;\n  selectCategory: (category: IMap<XrefCategory>) => void;\n  competitorProducts: List<IMap<XrefProduct>>;\n  inputValue: string;\n  getXrefManufacturers: () => void;\n  xrefManufacturer: List<IMap<XrefManufacturer>>;\n  selectManufacturer: (manufacturer: IMap<XrefManufacturer>) => void;\n  xrefCategory: List<IMap<XrefCategory>>;\n  getXrefProductByManufacturer: (manufacturer: IMap<XrefManufacturer>) => void;\n  selectedManufacturerValue?: string;\n  selectedCategoryId?: number;\n  theme: Theme;\n  getCompetitorProductsLoading: boolean;\n  getXrefCategoriesLoading: boolean;\n  getXrefManufacturersLoading: boolean;\n  appId: string;\n  config: IMap<IConfig>;\n  filterFormValues: Map<string, any>;\n}\n\ntype CrossReferencePageType = WithTranslation & CrossReferenceSearchContainerComponentProps & CrossReferenceSearchContainerProps & WithAmplitudeData & WithStyles<keyof ReturnType<typeof styles>>;\nclass CrossReferencePage extends React.Component<CrossReferencePageType, {}> {\n\n  public state = {\n    anchorEl: null,\n    openPopper: false,\n    filterAnchorEl: null,\n    uniqueKey: '',\n    filteredCompetitorProducts: List<IMap<XrefProduct>>(),\n  };\n\n  public componentDidMount() {\n    const {\n      competitorProducts,\n      filterFormValues,\n    } = this.props;\n\n    this.props.getXrefManufacturers();\n\n    if (competitorProducts?.size) {\n      if (filterFormValues?.size) {\n        this.filterCompetitorProducts();\n      } else {\n        this.setFilteredCompetitorProducts(competitorProducts);\n      }\n    }\n  }\n\n  public componentDidUpdate(prevProps: Readonly<CrossReferencePageType>, prevState, snapshot?: any): void {\n    const {\n      competitorProducts,\n      filterFormValues,\n    } = this.props;\n\n    if (!competitorProducts.equals(prevProps.competitorProducts)) {\n      this.setFilteredCompetitorProducts(competitorProducts);\n    }\n\n    if (filterFormValues && !filterFormValues.equals(prevProps.filterFormValues)) {\n      this.filterCompetitorProducts(true);\n    } else if (!filterFormValues && prevProps.filterFormValues) {\n      this.setFilteredCompetitorProducts(competitorProducts);\n    }\n  }\n\n  public filterCompetitorProducts = (trackData?: boolean) => {\n    const {\n      competitorProducts,\n      filterFormValues,\n      amplitudeData,\n      dispatch,\n    } = this.props;\n    if (filterFormValues?.size) {\n      const searchTerm = filterFormValues.get('feSearchTerm')?.toLowerCase() || '';\n      const allType = Boolean(filterFormValues.get('competitorProductType_product')) === Boolean(filterFormValues.get('competitorProductType_series'));\n      const filterBrand = filterFormValues.get('brand');\n      const filterCategory = filterFormValues.get('category');\n      const filterCrossTypeRecommended = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.recommended}`);\n      const filterCrossTypeFunction = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.function}`);\n      const filterCrossTypeValue = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.value}`);\n      const filterCrossTypeFinish = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.finish}`);\n      const filterCrossTypeClosestMatch = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.closestMatch}`);\n      const filterCrossTypeAesthetics = !!filterFormValues.get(`crossType_${CROSS_TYPE_NAMES.aesthetics}`);\n      // all types unselected is same as all selected\n      const allCrossTypes = !filterCrossTypeRecommended && !filterCrossTypeFunction && !filterCrossTypeValue && !filterCrossTypeFinish && !filterCrossTypeClosestMatch && !filterCrossTypeAesthetics;\n\n      const filteredCompetitorProducts = competitorProducts.filter((product) => {\n        const productBrand = product.get('brand');\n        const productCategory = product.get('categoryName');\n        const crossTypes = product.get('crossTypes');\n        const productNumber = product.get('productNumber').toLowerCase();\n\n        if (productNumber.includes(searchTerm)) {\n          if (allType || filterFormValues.get(`competitorProductType_${product.get('competitorProductType')}`)) {\n            if (!filterBrand || filterBrand === productBrand) {\n              if (!filterCategory || filterCategory === productCategory) {\n                if (allCrossTypes || crossTypes.some((crossType) => filterFormValues.get(`crossType_${crossType.get('type')}`))) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n        return false;\n      });\n\n      this.setFilteredCompetitorProducts(filteredCompetitorProducts);\n\n      if (trackData) {\n        const customData = {\n          searchTerm,\n          filterBrand: filterBrand ?? null,\n          filterCategory: filterCategory ?? null,\n          filterCompetitorProductType: allType ? 'all' : (filterFormValues.get('competitorProductType_product') ? 'product' : 'series'),\n          resultsCount: filteredCompetitorProducts?.size ?? 0\n        };\n        const trackingData = { \n          eventType: ATS_EVENT.xref_stepOne_SecondarySearch,\n          defaultData: amplitudeData(),\n          customData,\n        };\n        dispatch(new CreateAnalyticsEventsAction({\n          trackingData\n        }));\n      }\n    } else {\n      this.setFilteredCompetitorProducts(competitorProducts);\n    }\n  }\n\n  // public debouncedFilterCompetitorProducts = debounce(this.filterCompetitorProducts, 250);\n\n  public setFilteredCompetitorProducts = (filteredCompetitorProducts: List<IMap<XrefProduct>>) => {\n    this.setState({ filteredCompetitorProducts });\n  }\n\n  public setFeSearchTerm = (feSearchTerm: string) => {\n    this.props.dispatch(change(COMPETITOR_FILTER, 'feSearchTerm', feSearchTerm || ''));\n  }\n\n  // public debouchedSetFeSearchTerm = debounce(this.setFeSearchTerm, 500);\n\n  public reset = () => {\n    const {\n      dispatch,\n    } = this.props;\n    // clear the store\n    dispatch(new ResetSearchResultsAction());\n    // clear search field\n    dispatch(new SetSearchTermAction({ searchTerm: '' }));\n    // dispatch(new GetCompetitorProductsAction({searchTerm: ''}));\n    this.resetFilter();\n  }\n\n  public resetDropdowns = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SetSelectedManufacturerValueAction({ selectedManufacturerValue: '' }));\n    dispatch(new SetSelectedCategoryIdAction({ selectedCategoryId: -1 }));\n    dispatch(change(CROSS_REF_QUICKSEARCH_FORM, 'manufacturerSelection', null));\n    dispatch(change(CROSS_REF_QUICKSEARCH_FORM, 'categorySelection', null));\n  }\n\n  public resetSearchTerm = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SetSearchTermAction({ searchTerm: '' }));\n  }\n\n  public resetFilter = () => {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(reset(COMPETITOR_FILTER));\n    this.setState({ uniqueKey: Date.now() });\n  }\n\n  public competitorProductsDisplay = () => {\n    const {\n      inputValue,\n      customProductImage,\n      appId\n    } = this.props;\n    const {\n      filteredCompetitorProducts\n    } = this.state;\n\n    const manufacturer = this.getSelectedManufacturer();\n    const secondaryColorIconApps = [\n      FIAT_XREF_ID,\n      PRIER_XREF_ID,\n      MISSION_RUBBER_XREF_ID,\n      WILLIAMS_BROTHERS_XREF_ID,\n      TS_BRASS_XREF_ID,\n      HAWS_XREF_ID,\n      KOHLER_XREF_ID,\n      OSB_XREF_ID,\n      PRESSALIT_XREF_ID,\n      IPS_XREF_ID,\n      CONTRAC_XREF_ID,\n      NEPTUNE_XREF_ID,\n    ];\n    const secondaryColorIcon = secondaryColorIconApps.includes(appId);\n\n    if (filteredCompetitorProducts.size && (inputValue || manufacturer)) {\n      return filteredCompetitorProducts.map((result, index) => {\n        return (\n          <CompetitorProductCard\n            key={index}\n            competitorProduct={result}\n            secondaryColorIcon={secondaryColorIcon}\n            customProductImage={customProductImage}\n          />\n        );\n      })\n    }\n  };\n\n  public SelectCompetitorsProduct: React.FC = () => {\n    const {\n      getCompetitorProductsLoading,\n      classes,\n      inputValue,\n      selectedCategoryId,\n      selectedManufacturerValue,\n      t,\n      orientation,\n      competitorProducts,\n      filterFormValues,\n      appId,\n      config,\n    } = this.props;\n    const {\n      filteredCompetitorProducts,\n    } = this.state;\n\n    const feSearchTerm = filterFormValues?.get('feSearchTerm');\n    const filteredResultsCount = filteredCompetitorProducts?.size || 0;\n    const isBemis = appId === BEMIS_XREF_ID;\n    const useSecondaryColorForSpinner = config.getIn(['uiOverrides', 'useSecondaryColorForSpinner']);\n    const useSecondaryColorForFilterIcon = config.getIn(['uiOverrides', 'useSecondaryColorForFilterIcon']);\n  \n    if (getCompetitorProductsLoading) {\n      return (\n        <PaddedMessage loading={getCompetitorProductsLoading} useSecondaryColorForSpinner={useSecondaryColorForSpinner}>\n          {isBemis ? t('CrossReference.loadingDataAlt') : t('CrossReference.loadingData')}\n        </PaddedMessage>\n      )\n    }\n\n    if ((inputValue === '' || inputValue?.length < MINIMUM_SEARCH_CHARACTERS) && (selectedManufacturerValue === '') && (!selectedCategoryId || selectedCategoryId === -1)) {\n      return null;\n    }\n\n    const NoResults: React.FC = () => (\n      <Grid\n        container={true}\n        item={true}\n        xs={12}\n        alignItems='center'\n        spacing={1}\n      >\n        <Typography\n          variant='caption'\n        >\n          {isBemis ? t('CrossReference.noResultsAlt') : t('CrossReference.noResults')}\n        </Typography>\n      </Grid>\n    )\n\n    const filterChips = this.props.filterFormValues?.map((value, key) => {\n      if (value) {\n        let label = '';\n        switch (key) {\n          case 'feSearchTerm':\n            label = value;\n            break;\n          case 'brand':\n            label = t('CompetitorProductFilterChip.manufacturerChip', { value });\n            break;\n          case 'category':\n            label = t('CompetitorProductFilterChip.categoryChip', { value });\n            break;\n          case 'competitorProductType_product':\n            label = t('CompetitorProductFilterChip.competitorTypeChip', { value: t('CompetitorProductFilter.competitorTypeProduct') });\n            break;\n          case 'competitorProductType_series':\n            label = t('CompetitorProductFilterChip.competitorTypeChip', { value: t('CompetitorProductFilter.competitorTypeSeries') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.recommended}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.recommended') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.function}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.function') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.value}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.value') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.finish}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.finish') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.closestMatch}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.closestMatch') });\n            break;\n          case `crossType_${CROSS_TYPE_NAMES.aesthetics}`:\n            label = t('CompetitorProductFilterChip.crossTypeChip', { value: t('crossReferenceTypes.aesthetics') });\n            break;\n        }\n\n        return (\n          <Chip\n            key={key}\n            label={label}\n            onDelete={() => this.props.dispatch(change(COMPETITOR_FILTER, key, ''))}\n            className={classes.filterChip}\n          />\n        )\n      }\n    }).valueSeq();\n\n    return (\n      <>\n        {\n          competitorProducts && competitorProducts.size === 0\n          ? <NoResults />\n          : (\n            <>\n              <Divider className={classes.divider} />\n              <Grid\n                container={true}\n                direction='column'\n              >\n                <Typography\n                  variant={orientation === 'horizontal' ? 'h6' : 'body2'}\n                  className={classNames({\n                  [classes.darkText]: true,\n                  [classes.bold]: orientation === 'horizontal'\n                  })}\n                >\n                  {t('CrossReference.selectCompetitorProduct')}\n                </Typography>\n                <Grid\n                  container={true}\n                  direction='row'\n                  justify='space-between'\n                  alignItems='center'\n                  wrap='nowrap'\n                  className={classes.resultsInfo}\n                >\n                  <Typography\n                    variant='body2'\n                    className={classNames({\n                      [classes.darkText]: true,\n                      [classes.bold]: orientation === 'horizontal'\n                    })}\n                  >\n                    {filteredResultsCount === 1 ? t('CrossReference.competitorResultFoundSingular', { count: filteredResultsCount }) : t('CrossReference.competitorResultFoundPlural', { count: filteredResultsCount })}\n                  </Typography>\n                  <Grid container={true} alignContent='center' wrap='nowrap' style={{ width: 'fit-content' }}>\n                    <Input\n                      value={feSearchTerm || ''}\n                      onChange={(e) => this.setFeSearchTerm(e.target.value)}\n                      placeholder={t('CompetitorProductFilter.inputSearchPlaceholder')}\n                      endAdornment={\n                        <InputAdornment position=\"end\">\n                          <SearchIcon color='action' />\n                        </InputAdornment>\n                      }\n                      style={{ marginRight: 24, maxWidth: 240 }}\n                    />\n                    <Button\n                      color='primary'\n                      startIcon={<FilterListIcon color={useSecondaryColorForFilterIcon ? 'secondary' : 'inherit'} />}\n                      onClick={(e) => this.setState({ filterAnchorEl: this.state.filterAnchorEl ? null : e.currentTarget })}\n                    >\n                      {t('generalListFilter.title')}\n                    </Button>\n                  </Grid>\n                </Grid>\n                <Grid\n                  container={true}\n                  direction='row'\n                  justify='space-between'\n                  alignItems='center'\n                  wrap='nowrap'\n                  className={classes.resultsInfo}\n                >\n                  <Grid container={true} wrap='nowrap'>\n                    <Typography style={{ whiteSpace: 'nowrap', marginRight: 12 }}>\n                      {t('CompetitorProductFilterChip.appliedFilters')}\n                    </Typography>\n                    <Grid container={true}>\n                      { filterChips }\n                    </Grid>\n                  </Grid>\n                  <Button\n                    onClick={() => this.resetFilter()}\n                    color='primary'\n                    style={{ whiteSpace: 'nowrap' }}\n                  >\n                    {t('CompetitorProductFilterChip.resetFilters')}\n                  </Button>\n                </Grid>\n                <Grid\n                  container={true}\n                  spacing={2}\n                >\n                  { this.competitorProductsDisplay() }\n                </Grid>\n              </Grid>\n            </>\n          )\n        }\n      </>\n    )\n  }\n\n  public log = (searchTerm) => this.props.quickSearch(searchTerm);\n  public debounced = debounce(this.log, 1000)\n\n  public render() {\n    const {\n      anchorEl\n    } = this.state;\n    const {\n      theme,\n      classes,\n      selectManufacturer,\n      selectCategory,\n      inputValue,\n      xrefManufacturer,\n      xrefCategory,\n      getXrefProductByManufacturer,\n      getXrefCategoriesLoading,\n      getXrefManufacturersLoading,\n      t,\n      dispatch,\n      orientation = 'vertical',\n      competitorProducts,\n    } = this.props;\n\n    const manufacturer = this.getSelectedManufacturer();\n\n    return (\n      <Grid className={classes.root}>\n        {\n          orientation === 'horizontal' && (\n            <Typography variant='h6' className={classes.bold}>\n              1. {t('CrossReference.step1Label')}\n            </Typography>\n          )\n        }\n        <Grid container={true} justify='space-between' alignContent='center' wrap='nowrap'>\n          <Typography variant='body2' className={classNames([classes.productDetailContainer, classes.darkText])}>\n            {t('CrossReference.searchByNumber')}\n          </Typography>\n          {\n            Boolean(inputValue || manufacturer) && (\n              <Button\n                onClick={() => {this.reset(); this.resetDropdowns();}}\n                color='primary'\n              >\n                {t('CrossReference.resetSearch')}\n              </Button>\n            )\n          }\n        </Grid>\n        <form>\n          {/* Product quick search */}\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='XrefProductSearch'\n            component={FieldTextField}\n            props={{\n              inputProps: {\n                inputProps: {\n                  style: { ...theme.typography.body2 },\n                },\n                placeholder: t('CrossReference.searchByNumberPlaceholder'),\n                value: inputValue,\n                type: 'text',\n                onChange: (e) => {\n                  const val = e.target.value;\n                  dispatch(new SetSearchTermAction({ searchTerm: val }));\n                  if (val === '') {\n                    this.reset();\n                  }\n                  this.resetDropdowns();\n\n                  if (val?.length < MINIMUM_SEARCH_CHARACTERS) {\n                    this.setState({ openPopper: true });\n                    dispatch(new CancelXrefSearchAction());\n                    dispatch(new GetCompetitorProductsLoadingAction(false));\n                    dispatch(new ResetSearchResultsAction());\n                  } else {\n                    this.setState({ openPopper: false });\n                    this.debounced(val)\n                  }\n                },\n                InputProps: {\n                  startAdornment: (\n                    <InputAdornment\n                      variant='filled'\n                      position='start'\n                      classes={{\n                        positionStart: classes.searchIcon\n                      }}\n                    >\n                      <SearchIcon\n                        fontSize='small'\n                      />\n                    </InputAdornment>\n                  ),\n                  onFocus: (e: any) => {\n                    if (!anchorEl) {\n                      this.setState({ anchorEl: e.currentTarget });\n                    }\n                    if (inputValue?.length < MINIMUM_SEARCH_CHARACTERS) {\n                      this.setState({ openPopper: true });\n                    }\n                  },\n                  onBlur: (e) => this.setState({ openPopper: false })\n                }\n              },\n              formControlProps: {\n              },\n            }}\n          />\n          <Popper className={classes.popper} open={this.state.openPopper} anchorEl={anchorEl} placement={'right-start'} transition={true}>\n            {({ TransitionProps }) => (\n              <Fade {...TransitionProps} timeout={350}>\n                <Paper className={classes.popperContent}>\n                  <Grid container={true} alignItems='center' wrap={'nowrap'}>\n                    <WarningIcon className={classes.warningIcon} color='error' />\n                    <Typography>{t('search.minimumCharacterMessage', { minimumCharacters: MINIMUM_SEARCH_CHARACTERS })}</Typography>\n                  </Grid>\n                </Paper>\n              </Fade>\n            )}\n          </Popper>\n          <Typography variant='body2' className={classNames([classes.productDetailContainer, classes.darkText])}>\n            {t('CrossReference.searchByManufacturerAndCategory')}\n          </Typography>\n\n          {/* Dropdown containers */}\n          <Grid\n            container={true}\n            direction='row'\n            spacing={2}\n          >\n            <Grid\n              item={true}\n              lg={6}\n              md={6}\n              sm={12}\n              xs={12}\n            >\n              {/* Manufacturer dropdown */}\n              <Field<BaseFieldProps<IFieldListItemReactSelectComponentProps>>\n                name='manufacturerSelection'\n                component={FieldListItemReactSelect}\n                props={{\n                  inputProps: {\n                    onChange: (val: IMap<XrefManufacturer>) => {\n                      selectManufacturer(val);\n                      getXrefProductByManufacturer(val);\n                      this.resetSearchTerm();\n                      this.resetFilter();\n                    },\n                    options: xrefManufacturer,\n                    placeholder: t('CrossReference.searchByManufacturerPlaceholder'),\n                    components: { ...reactSelectComponents },\n                    styles: selectStyles(theme),\n                    noOptionsMessage: () => 'No results',\n                    isLoading: getXrefManufacturersLoading,\n                  },\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n              />\n            </Grid>\n\n            <Grid\n              item={true}\n              lg={6}\n              md={6}\n              sm={12}\n              xs={12}\n            >\n              {/* Category dropdown */}\n              <Field<BaseFieldProps<IFieldListItemReactSelectComponentProps>>\n                name='categorySelection'\n                component={FieldListItemReactSelect}\n                props={{\n                  inputProps: {\n                    defaultValue: '',\n                    onChange: (val: IMap<XrefCategory>) => {\n                      selectCategory(val);\n                      this.resetFilter();\n                    },\n                    options: xrefCategory.toArray(),\n                    placeholder: t('CrossReference.searchByCategoryPlaceholder'),\n                    components: { ...reactSelectComponents },\n                    styles: selectStyles(theme),\n                    isDisabled: manufacturer ? manufacturer.isEmpty() : true,\n                    noOptionsMessage: () => 'No results',\n                    isLoading: getXrefCategoriesLoading,\n                  },\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n              />\n            </Grid>\n          </Grid>\n        </form>\n        <this.SelectCompetitorsProduct />\n\n        <CompetitorFilter\n          competitorProducts={competitorProducts}\n          anchorEl={this.state.filterAnchorEl}\n          onClose={() => this.setState({ filterAnchorEl: null })}\n          uniqueKey={this.state.uniqueKey}\n          setUniqueKey={() => this.setState({ uniqueKey: Date.now() })}\n        />\n      </Grid>\n    );\n  }\n\n  private getSelectedManufacturer = () => {\n    const {\n      xrefManufacturer,\n      selectedManufacturerValue,\n    } = this.props;\n\n    return xrefManufacturer.find(manufacturer => manufacturer.get('value') === selectedManufacturerValue) || null;\n  }\n\n  private getSelectedCategory = () => {\n    const {\n      xrefCategory,\n      selectedCategoryId,\n    } = this.props;\n\n    return xrefCategory.find((category) => category.get('id') === selectedCategoryId);\n  }\n}\n\nconst selectStyles = (theme: Theme) => ({\n    placeholder: (base, state) => ({\n      ...base,\n      ...theme.typography.body2\n    }),\n    control: (base, state) => ({\n      ...base,\n      border: 'none',\n      boxShadow: state.isFocused ? 0 : 0,\n      position: 'relative',\n      '&:before': {\n        content: '\"\"',\n        position: 'absolute',\n        bottom: 0,\n        width: '100%',\n        borderBottom: state.isFocused\n          ? `2px solid ${theme.palette.primary.main}`\n          : '1px solid rgba(0, 0, 0, 0.42)',\n      },\n      '&:hover:before': {\n        borderBottom: '2px solid rgba(0, 0, 0, 0.87)',\n      }\n    }),\n    option: (styles, { isSelected, isFocused, isDisabled }) => ({\n      ...styles,\n      backgroundColor: isSelected\n        ? theme.palette.grey[400]\n        : isFocused\n          ? theme.palette.grey[300]\n          : null,\n      ':active': {\n        ...styles[':active'],\n        backgroundColor: !isDisabled && (isSelected ? theme.palette.grey[400] : theme.palette.grey[500]),\n      },\n    }),\n    indicatorSeparator: providedStyles => ({\n      ...providedStyles,\n      backgroundColor: 'transparent',\n    }),\n    valueContainer: (base, state) => ({\n      ...base,\n      padding: '0',\n      position: 'initial',\n      width: 'calc(100% - 25px)'\n    }),\n});\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  searchIcon: {\n    marginTop: '0 !important'\n  },\n  imageStyle: {\n    margin: theme.spacing(),\n  },\n  alignItem: {\n    marginLeft: theme.spacing(),\n  },\n  verticalDivider: {\n    borderLeft: '0.1em solid grey',\n    marginLeft: theme.spacing(5),\n    paddingLeft: theme.spacing()\n  },\n  productDetailContainer: {\n    paddingTop: `${theme.spacing(0.75)}px !important`,\n    paddingBottom: `${theme.spacing(0.75)}px !important`,\n  },\n  divider: {\n    margin: theme.spacing(1.25, 0)\n  },\n  resultsInfo: {\n    margin: theme.spacing(1, 0)\n  },\n  darkText: {\n    color: 'rgba(0, 0, 0, 0.87)'\n  },\n  bold: {\n    fontWeight: 'bold',\n  },\n  popper: {\n    // marginTop: theme.spacing(),\n    // marginLeft: -28\n    marginTop: theme.spacing(-1),\n    marginLeft: theme.spacing()\n  },\n  popperContent: {\n    padding: theme.spacing()\n  },\n  warningIcon: {\n    marginRight: theme.spacing(.5)\n  },\n  filterChip: {\n    borderRadius: theme.shape.borderRadius,\n    margin: theme.spacing(.25),\n  }\n});\n\nconst mapStateToProps = (originalState: any, originalOwnProps: CrossReferenceSearchContainerComponentProps) => {\n  return createStructuredSelector({\n    competitorProducts: makeSelectCompetitorProducts(),\n    inputValue: makeSelectSearchTerm(),\n    xrefManufacturer: makeSelectXrefManufacturer(),\n    xrefCategory: makeSelectXrefCategory(),\n    selectedManufacturerValue: makeSelectXrefSelectedManufacturerValue(),\n    selectedCategoryId: makeSelectXrefSelectedCategoryId(),\n    getCompetitorProductsLoading: makeSelectGetCompetitorProductsLoading(),\n    getXrefCategoriesLoading: makeSelectGetXrefCategoriesLoading(),\n    getXrefManufacturersLoading: makeSelectGetXrefManufacturersLoading(),\n    appId: makeSelectAppId(),\n    config: makeSelectConfig(),\n    filterFormValues: getFormValues(COMPETITOR_FILTER),\n  })(originalState);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, ownProps: CrossReferencePageType) => {\n  return {\n    quickSearch: (query: string) => {\n      dispatch(new GetCompetitorProductsAction({ searchTerm: query }));\n    },\n    selectCategory: (category: IMap<XrefCategory>) => {\n      dispatch(new GetXrefProductsByCategoryAction({ category }))\n    },\n    selectManufacturer: (manufacturer: IMap<XrefManufacturer>) => {\n      dispatch(new GetXrefCategoriesAction({ manufacturer }));\n      dispatch(new SetSelectedCategoryIdAction({ selectedCategoryId: -1 }));\n      dispatch(change(CROSS_REF_QUICKSEARCH_FORM, 'categorySelection', null));\n    },\n    getXrefManufacturers: () => {\n      dispatch(new GetXrefManufacturersAction());\n    },\n    getXrefProductByManufacturer: (manufacturer: IMap<XrefManufacturer>) => {\n      dispatch(new GetXrefProductByManufacturerAction({ manufacturer }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<CrossReferenceSearchContainerComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  reduxForm({\n    form: CROSS_REF_QUICKSEARCH_FORM,\n    destroyOnUnmount: false,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CrossReferencePage);\n","/**\n * Asynchronously loads the component\n */\nimport Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","/*\n * DataFieldAutoSuggest\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\n\nimport { createStructuredSelector } from 'reselect';\nimport {\n  selectReducerState,\n} from '../../modules/AtsModule/selectors';\nimport {\n  isArray,\n  singleOrArray,\n} from 'ats-utils/src';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  FieldAutoSuggest,\n} from '../../components';\n\nimport { fromJS, Map, Set, Record, isImmutable, List, Seq } from 'immutable';\nimport { ApiCallAction, IBaseAtsApiCall, IBaseAtsApiCallPayload } from '../../modules/AtsModule/actions';\nimport { WrappedFieldProps } from 'redux-form';\n\nconst defaultParameter = fromJS({\n  required: false,\n});\n\nconst sortBy = (param) => (cmpA, cmpB) => {\n  const cmpAParam = cmpA.get(param);\n  const cmpBParam = cmpB.get(param);\n\n  if (cmpAParam && !cmpBParam) {\n    return -1;\n  } else if (!cmpAParam && cmpBParam) {\n    return 1;\n  } else if (cmpAParam === cmpBParam) {\n    return 0;\n  }\n  return cmpAParam < cmpBParam ? -1 : 1;\n};\n\nconst parseArrayOrObjectParamsIntoMap = (arrayOrObject: List<string | IMapNonRecursive<IParamInterface>> | Map<string, IMapNonRecursive<IParamInterface>> = List<string>()): Map<string, IMapNonRecursive<IParamInterface>> => {\n  const asObject = (\n    isArray(arrayOrObject)\n    ? (arrayOrObject as List<string | IMapNonRecursive<IParamInterface>>).reduce(\n      (acc, parameter) => {\n        return Map.isMap(parameter) ? acc.set(parameter.get('key') || '__NO_KEY__', defaultParameter.mergeDeep(parameter)) : acc.set(`${parameter}`, defaultParameter);\n      }, Map<string, IMapNonRecursive<IParamInterface>>()\n    )\n    : arrayOrObject\n  ) as Map<string, IMapNonRecursive<IParamInterface>>;\n  return asObject.map((value, key) => {\n    return value.set('key', key);\n  });\n};\n\n\n\n// DataFieldAutoSuggest.propTypes = {\n//   parameters: PropTypes.object,\n//   immutableParameters: PropTypes.object,\n\n//   autosuggestProps: PropTypes.object,\n//   dispatch: PropTypes.func,\n//   atsState: PropTypes.object,\n//   dataProviderProps: PropTypes.object.isRequired,\n// };\n\n\n// parameters: ['province_id'],\n// resultKey: ['data', 'payload', 'list'],\n// patterns: {\n//   'province_id': {\n//     endpoint: 'ENDPOINT_LIST',\n//     url: '/city/province/{province_id}',\n//     resultKey: ['data', 'payload', 'list'],\n//   },\n// }\n// interface IPatterns extends ApiCallAction {\n//   endpoint: string;\n//   url: string;\n//   resultKey: string | List<string>;\n// }\n\ninterface IDataProviderProps extends IBaseAtsApiCall {\n  parameters?: List<string>;\n  patterns?: Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n}\n\nexport interface IDataFieldAutoSuggestComponentProps {\n  dataProviderProps: IMapNonRecursive<IDataProviderProps>;\n  parameters?: object | Map<string, any>;\n  autosuggestProps?: object;\n  exact?: boolean; // if exact, it will only match with a pattern that is exactly the same as the parameters passed in. Otherwise, it matches the first valid subset of parameters passed in.\n\n  formControlProps?: object;\n  inputProps?: object;\n  label?: string;\n}\n\ninterface IDataFieldAutoSuggestProps extends IDataFieldAutoSuggestComponentProps {\n  atsState: Map<string, any>;\n  dispatch: React.Dispatch<IAction>;\n  immutableParameters: Map<string, any>;\n}\n\ninterface IParamInterface {\n  key?: string;\n  required?: boolean;\n}\n\ninterface IDataFieldAutoSuggestState {\n  initialized: boolean;\n  immutablePatternSetCache: Map<string, Set<string>>;\n  params?: Map<string, IMapNonRecursive<IParamInterface>>;\n  sortedParams?: Map<string, IMapNonRecursive<IParamInterface>>;\n  ParameterRecord: () => void;\n}\n\ntype DataFieldAutoSuggestProps = IDataFieldAutoSuggestProps & WrappedFieldProps;\n\nconst cachedApiCallActionParams = Map<string, IBaseAtsApiCall>();\n\nclass DataFieldAutoSuggest extends React.Component<DataFieldAutoSuggestProps, IDataFieldAutoSuggestState> { // eslint-disable-line react/prefer-stateless-function\n\n  public state: IDataFieldAutoSuggestState = {\n    initialized: false,\n\n    immutablePatternSetCache: Map<string, Set<string>>(),\n    params: undefined,\n    sortedParams: undefined,\n    ParameterRecord: () => {console.error('NO PARAMETER RECORD');}, // tslint:disable-line\n  };\n\n  public UNSAFE_componentWillMount() {\n    const {\n      dataProviderProps,\n    } = this.props;\n\n    const parameters = dataProviderProps.get('parameters');\n    const patterns = dataProviderProps.get('patterns') || Map<string, any>() as Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n\n    const immutablePatternSetCache = patterns.map((value, key) => {\n      return Set(key.split(',').map((patternKey) => patternKey.trim()));\n    }) as Map<string, Set<string>>;\n\n    let {\n      params,\n      sortedParams,\n      ParameterRecord,\n    } = this.state;\n    if (parameters != null) {\n      params = parseArrayOrObjectParamsIntoMap(parameters);\n\n      sortedParams = params.sort((paramA, paramB) => {\n        return sortBy('key')(paramA, paramB);\n      });\n      ParameterRecord = Record(sortedParams.map(() => null).toJS());\n    }\n\n    this.setState({\n      immutablePatternSetCache,\n      params,\n      sortedParams,\n      ParameterRecord\n    });\n  }\n\n  public componentDidMount() {\n\n    const {\n      immutableParameters,\n      dispatch,\n      atsState,\n    } = this.props;\n\n    this.getDataIfValid(dispatch, atsState)({immutableParameters});\n  }\n\n  public parametersValid({immutableParameters}: {immutableParameters: Map<string, any>}): boolean {\n    const {\n      sortedParams,\n    } = this.state;\n\n    if (sortedParams == null) {\n      return true;\n    }\n\n    return sortedParams.valueSeq().reduce((valid, param) => {\n      return valid && (!param.get('required') || immutableParameters.has(param.get('key') || ''));\n    }, true);\n  }\n\n  public getValidParameterKeys(immutableParameters: Map<string, any>): Seq.Indexed<string> {\n    const {\n      sortedParams,\n    } = this.state;\n\n    if (sortedParams == null) {\n      return immutableParameters.keySeq();\n    }\n\n    return sortedParams.filter((value, key) => {\n      return immutableParameters.has(key);\n    }).keySeq();\n  }\n\n  public getApiCallAction({immutableParameters}): IBaseAtsApiCall {\n    const {\n      dataProviderProps,\n      exact,\n    } = this.props;\n\n    const stringifiedImmutableParameters = JSON.stringify(immutableParameters);\n    let params = cachedApiCallActionParams.get(stringifiedImmutableParameters);\n\n    if (params != null) {\n      return params;\n    }\n\n    const patterns = dataProviderProps.get('patterns') || Map<string, any>() as Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n    params = {\n      payload: dataProviderProps.get('payload'),\n    };\n    const {\n      immutablePatternSetCache,\n    } = this.state;\n\n    const paramSet = Set(this.getValidParameterKeys(immutableParameters));\n\n    const patternKey = immutablePatternSetCache.findKey(\n      (patternSet) => {\n        return exact\n          ? patternSet.equals(paramSet)\n          : patternSet.isSubset(paramSet);\n      }\n    );\n    if (patternKey != null) {\n      const immutablePattern = patterns.get(patternKey);\n      if (immutablePattern != null) {\n        params = {\n          payload: immutablePattern.get('payload'),\n        };\n        if (params.payload == null) {\n          console.error('DataFieldAutoSuggest invalid payload', { // tslint:disable-line\n            params,immutablePattern\n          });\n        }\n      }\n    }\n    cachedApiCallActionParams.set(stringifiedImmutableParameters, params);\n    // TODO where are immutable parameters?\n    if (params.payload == null) {\n      console.error('DataFieldAutoSuggest invalid payload', { // tslint:disable-line\n        params,\n        dataProviderProps,\n        immutableParameters,\n      });\n      return {\n        payload: fromJS({}) as IMapNonRecursive<IBaseAtsApiCallPayload>,\n      };\n    }\n    const atsApiPayload = singleOrArray(params.payload.toJS().payload);\n    const modifiedOptions = {\n      ...atsApiPayload.slice(-1)[0],\n      params: immutableParameters.toJS(),\n    };\n    const atsApiPayloadWithModifiedOptions = [...atsApiPayload.slice(0, -1), modifiedOptions];\n    // console.error('test', {\n    //   atsApiPayload,\n    //   pp2: params.payload.get('payload'),\n    //   pp: {\n    //     ...params,\n    //     payload: params.payload.set('payload', atsApiPayloadWithModifiedOptions),\n    //   },\n    //   atsApiPayloadWithModifiedOptions,\n    // });\n    return {\n      ...params,\n      payload: params.payload.set('payload', atsApiPayloadWithModifiedOptions),\n    };\n  }\n\n  public getDataKey({immutableParameters}) {\n    const apiCallAction = this.getApiCallAction({immutableParameters});\n    return ['DataFieldAutoSuggest', JSON.stringify(apiCallAction.payload.get('payload')), JSON.stringify(immutableParameters)];\n  }\n\n  public getDataIfValid(dispatch, atsState) {\n    return ({immutableParameters}: {immutableParameters: Map<string, any>}) => {\n      const key = this.getDataKey({immutableParameters});\n\n      const previousDataParams = atsState.getIn(['dataParams', ...key]);\n\n      if (previousDataParams == null && this.parametersValid({immutableParameters})) {\n        const apiCallAction = this.getApiCallAction({immutableParameters});\n        dispatch(new ApiCallAction({\n          ...(apiCallAction.payload.toJS()),\n          key,\n        }));\n      }\n    };\n  }\n\n  public componentWillReceiveProps(nextProps) {\n    const {\n      immutableParameters: prevImmutableParameters,\n      dispatch\n    } = this.props;\n\n    const {\n      immutableParameters,\n      atsState,\n    } = nextProps;\n\n    if (!prevImmutableParameters.equals(immutableParameters)) {\n      this.getDataIfValid(dispatch, atsState)({immutableParameters});\n    }\n  }\n\n  public render() {\n    const {\n      immutableParameters,\n\n      dispatch, // eslint-disable-line no-unused-vars\n      atsState,\n      dataProviderProps, // eslint-disable-line no-unused-vars\n\n      autosuggestProps = {}, // need to inject autosuggestProps\n      ...rest\n    } = this.props;\n\n    const key = this.getDataKey({immutableParameters});\n    const data = atsState.getIn(['data', ...key], Set()).toJS();\n\n    return (\n      <FieldAutoSuggest\n        {...rest}\n        autosuggestProps={{\n          ...autosuggestProps,\n          directMode: false,\n          data,\n        }}\n      />\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  atsState: selectReducerState(),\n});\n\nexport function mergeProps(stateProps, dispatchProps, ownProps) {\n  const immutableParameters = isImmutable(ownProps.parameters) ? ownProps.parameters : fromJS(ownProps.parameters || {});\n\n  return Object.assign({}, ownProps, stateProps, dispatchProps, {\n    immutableParameters,\n  });\n}\n\nexport default compose<React.ComponentClass<IDataFieldAutoSuggestComponentProps & WrappedFieldProps>>(\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n)(DataFieldAutoSuggest);\n","import * as React from 'react';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  AppBar,\n  Tabs,\n  Tab,\n  WithStyles,\n  withStyles,\n  Theme,\n  Grid,\n  // Checkbox\n} from '@material-ui/core';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  Collaborator, HasId,\n} from '../../models';\nimport VirtualizedTable, {\n  IVirtualizedTableRef,\n} from '../../containers/VirtualizedTable/VirtualizedTable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  compose,\n} from 'redux';\n\nconst styles = (theme: Theme) => ({\n  root: {\n    flexGrow: 1,\n    backgroundColor: theme.palette.common.white,\n  },\n  tableHeader: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: 'none',\n  },\n  tableContainer: {\n    height: 300,\n  },\n});\n\ninterface IProjectTabsComponentProps {\n  selectedCollaborators: Map<number, IMap<Collaborator>>;\n  firmCollaborators: Map<number, IMap<Collaborator>>;\n}\n\ninterface IProjectTabs extends IProjectTabsComponentProps {\n  [x: string]: any;\n  value: number;\n}\n\ntype ProjectTabs = WithTranslation & IProjectTabs & WithStyles<keyof ReturnType<typeof styles>>;\ninterface INewProjectTabsState {\n  value: number;\n}\nclass NewProjectTabs extends React.Component<ProjectTabs, INewProjectTabsState> {\n  public VirtualizedTableRef = React.createRef<IVirtualizedTableRef>();\n\n  public state = {\n    value: 0,\n  };\n\n  public handleChange = (event: any, value: number) => {\n    this.setState({ value });\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      theme,\n      firmCollaborators,\n      selectedCollaborators,\n    } = this.props;\n    const {\n      value,\n    } = this.state;\n\n    return (\n      <Grid\n        item={true}\n        className={classes.root}\n        xs={12}\n      >\n        <AppBar\n          position='static'\n          className={classes.tableHeader}\n        >\n          <Tabs\n            value={value}\n            onChange={this.handleChange}\n            indicatorColor='primary'\n            textColor='primary'\n          >\n            <Tab\n              label={t('NewProjectTabs.firmClients')}\n            />\n            {/*\n              <Tab\n                label={t('NewProjectTabs.other')}\n              />\n            */}\n          </Tabs>\n        </AppBar>\n\n        <div className={classes.tableContainer}>\n          <VirtualizedTable\n            ref={this.VirtualizedTableRef}\n            tableData={value ? selectedCollaborators : firmCollaborators}\n            columnProps={{\n              columns: [\n                {\n                  dataKey: 'name',\n                  label: 'Full Name',\n                  celltype: 'TextCell',\n                  maxWidth: 200\n                },\n                {\n                  dataKey: 'phone',\n                  label: 'Phone Number',\n                  celltype: 'TextCell',\n                  maxWidth: 200\n                },\n                {\n                  dataKey: 'company',\n                  label: 'Company',\n                  celltype: 'TextCell',\n                  maxWidth: 200\n                },\n                {\n                  label: 'View Only',\n                  checkedValue: 'view-only',\n                  name: (rowData: IMap<Partial<HasId>>) => `permissions.${rowData.get('id')}`,\n                  celltype: 'CollaboratorsCheckbox',\n                  maxWidth: 100,\n                  disabled: value ? true : false,\n                },\n                {\n                  label: 'Edit',\n                  checkedValue: 'edit',\n                  name: (rowData: IMap<Partial<HasId>>) => `permissions.${rowData.get('id')}`,\n                  celltype: 'CollaboratorsCheckbox',\n                  maxWidth: 100\n                },\n                {\n                  label: 'Delete',\n                  checkedValue: 'delete',\n                  name: (rowData: IMap<Partial<HasId>>) => `permissions.${rowData.get('id')}`,\n                  celltype: 'CollaboratorsCheckbox',\n                  maxWidth: 100\n                },\n              ],\n            }}\n            tableProps={{\n              disableHeader: false,\n              rowHeight: theme.spacing() * 4,\n              headerHeight: theme.spacing() * 4\n            }}\n          />\n        </div>\n      </Grid>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n});\n\n\nexport default compose<React.ComponentClass<IProjectTabsComponentProps>>(\n  withStyles(styles, { withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps),\n)(NewProjectTabs);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","/**\n * Asynchronously loads the component for HomePage\n */\nimport Lodable from '@loadable/component';\n\nexport default (Lodable as any)(() => import('./ScrollTabContainer'));\n","/**\n * Asynchronously loads the component\n */\nimport Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import * as React from 'react';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  isValid,\n  touch,\n} from 'redux-form';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Typography,\n  Button,\n  Paper,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  reduxForm,\n  Field,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport {\n  FieldListItemReactSelect,\n  FieldTextField,\n  ControlledModal,\n} from '../../../src/components';\nimport {\n  IFieldTextFieldComponentProps\n} from '../../components/FieldTextField';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Manufacturer,\n  Category,\n  OpportunityGroup,\n} from '../../models';\nimport {\n  ToggleOverlayComponentAction\n } from '../../modules/ApplicationModule/actions';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\nimport { makeSelectOpportunityGroups } from '../../modules/AccountModule/selectors';\nimport {\n  GetCategoriesAction,\n  GetManufacturersAction,\n  SetSelectedManufacturerIdAction,\n  SetSelectedCategoryIdAction\n} from '../../modules/AccountModule/actions';\nimport {\n  makeSelectManufacturer,\n  makeSelectCategory,\n  makeSelectSelectedManufacturerId,\n  makeSelectSelectedCategoryId,\n} from '../../modules/AccountModule/selectors';\nimport {makeSelectOverlayComponent} from '../../modules/ApplicationModule/selectors';\nimport { PreferenceType } from '../../models/Preferences';\nimport { required, isNotEmptyStringRequired } from '../../validators';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\n\nexport const MODAL_ID = 'OPPORTUNITY_ADD_EDIT_LABEL';\n\ninterface IOpportunityAddEditModalComponentProps {\n  handleSubmit: (event: any, selectedProducts: any, resetSelectedProducts: () => void) => void;\n  modalType?: string;\n  addOrEdit?: string;\n  selectedItemIndex: any[];\n}\n\ninterface IOpportunityAddEditModalStateProps {\n  state: object;\n}\n\ninterface IOpportunityAddEditModalProps extends InjectedFormProps {\n  dispatch: React.Dispatch<IAction>;\n  getManufacturers: () => void;\n  getCategories: () => void;\n  manufacturer: List<IMap<Manufacturer>>;\n  category: List<IMap<Category>>;\n  selectedManufacturerId?: number;\n  selectedCategoryId?: number;\n  opportunities: List<IMap<OpportunityGroup>>;\n  isModalOpen: boolean;\n  valid: boolean;\n  formValues: Map<string, any>;\n  initialValues: Map<string, any>;\n  setManufacturer(id: number): void;\n  setCategory(id: number): void;\n}\n\ntype OpportunityAddEditModalType = WithTranslation\n  & IOpportunityAddEditModalComponentProps\n  & IOpportunityAddEditModalProps\n  & IOpportunityAddEditModalStateProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithAmplitudeData;\n\ninterface IOpportunityAddEditModalState {\n  selectedProducts: List<IMap<OpportunityGroup>>;\n  addOpportunityEnabled: boolean;\n  selectedItemIndex: any[];\n  dirty: boolean;\n}\n\nclass OpportunityAddEditModal extends React.Component<OpportunityAddEditModalType, IOpportunityAddEditModalState> {\n\n  public static getDerivedStateFromProps(nextProps: OpportunityAddEditModalType, prevState: IOpportunityAddEditModalState) {\n    const {\n      opportunities,\n      addOrEdit,\n      selectedItemIndex,\n    } = nextProps;\n\n    const {\n      selectedProducts,\n      selectedItemIndex: selectedItemIndexState,\n      dirty\n    } = prevState;\n\n    // figure out which list to use, existing selected products or state\n    if (addOrEdit === 'edit' && selectedItemIndex !== selectedItemIndexState) {\n      // ** NOTE: only uses original selected products if selectedProducts list is empty\n      const opportunityGroups = opportunities.getIn(selectedItemIndex);\n      const originalSelectedProducts = opportunityGroups ? opportunityGroups.get('opportunities') : List([]);\n      return {\n        selectedProducts: dirty ? selectedProducts : originalSelectedProducts,\n        selectedItemIndex: selectedItemIndexState,\n      };\n    }\n\n    if (addOrEdit === 'add') {\n      return {\n        selectedProducts: dirty ? selectedProducts : List([]),\n      };\n    }\n\n    return null;\n  }\n\n  public state = {\n    selectedProducts: List([]),\n    addOpportunityEnabled: false,\n    selectedItemIndex: [],\n    dirty: false\n  };\n\n  public componentDidUpdate(prevProps) {\n    const {\n      isModalOpen,\n      getManufacturers,\n      getCategories\n    } = this.props;\n\n    if (isModalOpen && !prevProps.isModalOpen) {\n      getManufacturers();\n      getCategories();\n    }\n  }\n\n  public resetModal = () => {\n    const {\n      dispatch,\n      setCategory,\n      setManufacturer\n    } = this.props;\n\n    setManufacturer(-1);\n    setCategory(-1);\n\n    this.setState({\n      addOpportunityEnabled: false\n    });\n  }\n\n  public deleteProduct = (e: any, item: any) => {\n    e.preventDefault();\n\n    const {\n      selectedProducts\n    } = this.state;\n\n    const index = selectedProducts.findIndex((product) => item.get('category_id') === product.get('category_id'));\n\n    this.setState({\n      selectedProducts: selectedProducts.delete(index),\n      dirty: true\n    });\n  }\n\n  public getSelectedManufacturers = () => {\n    const {\n      classes,\n    } = this.props;\n\n    const {\n      selectedProducts\n    } = this.state;\n\n    return selectedProducts.map((item, index) => {\n      return (\n        <div\n          className={classes.productChipRoot}\n          key={`${index}-${item.get('manufacturer_id')}`}\n        >\n          <span\n            className={classes.productChip}\n          >\n            <span>\n              {item.get('title')}\n            </span>\n\n            <IconButton\n              onClick={(e) => this.deleteProduct(e, item)}\n              disableRipple={true}\n              >\n              <FontAwesomeIcon\n                size='xs'\n                icon='times-circle'\n                className={classes.iconStyle}\n              />\n            </IconButton>\n          </span>\n        </div>\n      );}\n    );\n  }\n\n  public handleAddToOpportunity = () => {\n    const {\n      selectedManufacturerId,\n      selectedCategoryId,\n      category,\n      manufacturer\n    } = this.props;\n\n    const {\n      selectedProducts,\n      addOpportunityEnabled,\n    } = this.state;\n\n    if (!addOpportunityEnabled) {\n      return;\n    }\n\n    const categoryIndex = category.findIndex((item) => item.get('id') === selectedCategoryId);\n    const manufacturerIndex = manufacturer.findIndex((item) => item.get('id') === selectedManufacturerId);\n    const manufacturerData = manufacturerIndex !== -1 && manufacturer.get(manufacturerIndex);\n    const categoryData = categoryIndex !== -1 && category.get(categoryIndex);\n    let title;\n\n    if (manufacturerData && categoryData) {\n      title = `${manufacturerData.get('value')} - ${categoryData.get('value')}`;\n    } else if (categoryData) {\n      title = `${categoryData.get('value')}`;\n    } else if (manufacturerData) {\n      title = `${manufacturerData.get('value')}`;\n    }\n\n    const productInfo = Map({\n      'manufacturer_id': selectedManufacturerId,\n      'category_id': selectedCategoryId,\n      title,\n    });\n\n    this.setState({\n      selectedProducts: selectedProducts.push(productInfo),\n      dirty: true\n    });\n\n    this.resetModal();\n  }\n\n  public enableAddOpportunity = () => {\n    this.setState({\n      addOpportunityEnabled: true\n    });\n  }\n\n  public disableAddOpportunity = () => {\n    this.setState({\n      addOpportunityEnabled: false\n    });\n  }\n\n  public resetSelectedProducts = () => {\n    this.props.reset();\n    this.setState({\n      selectedProducts: List([]),\n      dirty: false\n    });\n  }\n\n  public handleClose = () => {\n    this.props.reset();\n    this.resetModal();\n    this.setState({ dirty: false });\n  }\n\n  public handleFormSubmit = (e: any) => {\n    e.preventDefault();\n\n    const {\n      handleSubmit,\n      dispatch,\n      modalType,\n      valid,\n      formValues,\n      amplitudeData\n    } = this.props;\n\n    const {\n      selectedProducts\n    } = this.state;\n\n    dispatch(touch(MODAL_ID, 'opportunityLabel'));\n\n    if (valid) {\n      if (modalType === 'group') {\n        handleSubmit(e);\n      } else {\n        handleSubmit(e, selectedProducts, this.resetSelectedProducts);\n      }\n\n      this.resetModal();\n      this.props.reset();\n      this.setState({\n        dirty: false\n      });\n\n      dispatch(new ToggleOverlayComponentAction({\n        open: false,\n        id: `${MODAL_ID}`\n      }));\n    }\n    // Amplitude analytic tracking\n    const opportunityLabel = formValues && formValues.get('opportunityLabel');\n    const listOfselectedProducts = selectedProducts && selectedProducts.map((product) => {\n      return product.get('title');\n    }).join(', ');\n    amplitude.logEvent(AMPLITUDE_EVENT.addOpportunity,\n      amplitudeData({\n        opportunityLabel: `${opportunityLabel}`,\n        manufacturer: `${listOfselectedProducts}`\n      }));\n  }\n\n  public getOptions = type => {\n    const options = this.props[type];\n\n    return options;\n  }\n\n  public render() {\n    const {\n      classes,\n      manufacturer,\n      category,\n      selectedManufacturerId,\n      selectedCategoryId,\n      modalType,\n      opportunities,\n      selectedItemIndex,\n      initialValues,\n      formValues,\n      dispatch,\n      setManufacturer,\n      setCategory,\n      t,\n    } = this.props;\n\n    const {\n      addOpportunityEnabled,\n      selectedProducts,\n    } = this.state;\n\n    const manufacturerValue = manufacturer.find((_manufacturer) => {\n      return _manufacturer.get('id') === selectedManufacturerId;\n    });\n    const modalTitle = modalType === 'label' ? t('OpportunityLabels.editOpportunityLabel') : t('OpportunityLabels.editTitle');\n\n    const categoryId = category.find((_category) => _category.get('id') === selectedCategoryId);\n\n    const opportunityGroups = opportunities.getIn(selectedItemIndex);\n    const originalSelectedProducts = opportunityGroups ? opportunityGroups.get('opportunities') : List([]);\n\n    const opportunityLabelValueInForm = formValues && formValues.get('opportunityLabel');\n    const opportunityLabelValueInitialValues = initialValues && initialValues.get('opportunityLabel');\n    const opportunityLabelChanged = opportunityLabelValueInForm !== opportunityLabelValueInitialValues ? true : false;\n\n    const valuesChanged = (originalSelectedProducts !== selectedProducts\n      &&  selectedProducts.size !== 0 ? true : false)\n      || opportunityLabelChanged;\n\n    const shouldDisable = valuesChanged\n      ? false\n      : modalType === 'label'\n        ? true\n        : false;\n\n    return (\n      <ControlledModal\n        localKey={MODAL_ID}\n        fullWidth={true}\n        maxWidth={'sm'}\n        handleClose={this.handleClose}\n      >\n        <Paper className={classes.root}>\n          <Typography\n            variant={'h6'}\n          >\n            {modalTitle}\n          </Typography>\n\n          <form\n            onSubmit={this.handleFormSubmit}\n          >\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  name='opportunityLabel'\n                  component={FieldTextField}\n                  validate={[required, isNotEmptyStringRequired]}\n                  props={{\n                    label: t('OpportunityLabels.opportunityLabel'),\n                    require: true,\n                    inputProps: {\n                      classes: {\n\n                      }\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    }\n                  }}\n                />\n              </Grid>\n\n              {/*** show extra fields for labels ***/}\n              {\n                modalType === 'label' && (\n                  <span>\n                    <Grid\n                      item={true}\n                      className={classes.dialogBody}\n                    >\n                      <Typography variant='body1'>\n                        {t('OpportunityLabels.addManufacturer')}\n                      </Typography>\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                      xs={12}\n                    >\n                      {/* Manufacturer dropdown */}\n                      <Field\n                        name='manufacturerSelection'\n                        component={FieldListItemReactSelect as any}\n                        inputProps={{\n                          defaultValue: '',\n                          value: manufacturerValue,\n                          onChange: (val: IMap<Manufacturer>) => {\n                            setManufacturer(val.get && val.get('id') || -1);\n                            (val.get || categoryId) ? this.enableAddOpportunity() : this.disableAddOpportunity();\n                          },\n                          options: this.getOptions('manufacturer'),\n                          placeholder: t('OpportunityLabels.manufacturerPlaceholder'),\n                        }}\n                        formControlProps={{\n                          fullWidth: true,\n                        }}\n                      />\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                      xs={12}\n                    >\n                      {/* Category dropdown */}\n                      <Field\n                        name='categorySelection'\n                        component={FieldListItemReactSelect as any}\n                        inputProps={{\n                          defaultValue: '',\n                          value: categoryId,\n                          onChange: (val: IMap<Category>) => {\n                            setCategory(val.get && val.get('id') || -1);\n                            (val.get || manufacturerValue) ? this.enableAddOpportunity() : this.disableAddOpportunity();\n                          },\n                          options: this.getOptions('category'),\n                          placeholder: t('OpportunityLabels.categoryPlaceholder'),\n                          getOptionLabel: (option: IMap<Category>) => option.get('label') || option.get('value'),\n                          formatOptionLabel: (option: IMap<Category>) => (\n                            <Typography>\n                              {option.get('label') || option.get('value')}\n                            </Typography>\n                          ),\n                        }}\n                        formControlProps={{\n                          fullWidth: true,\n                        }}\n                      />\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                      xs={12}\n                    >\n                      <div\n                        className={addOpportunityEnabled ? classes.addToOpportunityEnabled : classes.addToOpportunityDisabled}\n                        onClick={this.handleAddToOpportunity}\n                      >\n                        {t('OpportunityLabels.addToOpportunity')}\n                    </div>\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                      className={classes.productChipContainer}\n                    >\n                      {this.getSelectedManufacturers()}\n                    </Grid>\n                    <Grid>\n                      {\n                        valuesChanged\n                          ? <Typography\n                              color='error'\n                            >\n                              {t('OpportunityLabels.valueChangeWarning')}\n                            </Typography>\n                          : null\n                      }\n                    </Grid>\n                  </span>\n                )\n              }\n\n              <Grid\n                container={true}\n                direction='row'\n                justify='flex-end'\n              >\n                <Grid item={true} xs={3}>\n                  <Button\n                    color='primary'\n                    onClick={() => {\n                      dispatch(new ToggleOverlayComponentAction({\n                        open: false,\n                        id: `${MODAL_ID}`\n                      }));\n                      this.resetSelectedProducts();\n                    }}\n                  >\n                    {t('formButtons.cancel')}\n                  </Button>\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={3}\n                >\n                  <Button\n                    color='primary'\n                    type='submit'\n                    disabled={shouldDisable}\n                  >\n                    {t('formButtons.save')}\n                  </Button>\n                </Grid>\n              </Grid>\n            </Grid>\n          </form>\n\n        </Paper>\n      </ControlledModal>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    padding: theme.spacing() * 2.5\n  },\n  inputField: {\n    width: 200,\n    '&::after': {\n      width: 200,\n    }\n  },\n  productChipRoot: {\n    margin: `${theme.spacing() * 0.75}px 0`,\n  },\n  productChip: {\n    backgroundColor: theme.palette.grey[300],\n    padding: `0 0 0 ${theme.spacing() * 1.5}px`,\n    borderRadius: theme.shape.borderRadius,\n    display: 'inline-block'\n  },\n  productChipContainer: {\n    backgroundColor: theme.palette.grey[100],\n    padding: `${theme.spacing() * 0.75}px ${theme.spacing() * 2}px`,\n    borderRadius: theme.shape.borderRadius,\n    width: '100%',\n    minHeight: 50,\n  },\n  addToOpportunityEnabled: {\n    textAlign: 'right' as 'right',\n    color: theme.palette.primary.main,\n    margin: `0 0 ${theme.spacing() * 2}px`,\n    cursor: 'pointer',\n  },\n  addToOpportunityDisabled: {\n    textAlign: 'right' as 'right',\n    color: '#8A8A8A',\n    margin: `0 0 ${theme.spacing() * 2}px`,\n    cursor: 'default',\n  },\n  dialogBody: {\n    padding: `0 0 ${theme.spacing() * 2}px 0`,\n  }\n});\n\nconst mapStateToProps = (state: any, ownProps: IOpportunityAddEditModalComponentProps) => {\n  const opportunityState = state.getIn(['account', 'preferences']);\n  const opportunityData = opportunityState.get(PreferenceType.OpportunityGroups);\n  const selectedItemIndex = ownProps['selectedItemIndex'];\n  const doesTitleExist = opportunityData\n    && opportunityData.hasIn(selectedItemIndex)\n    && opportunityData.getIn(selectedItemIndex).has('title');\n\n  const initialValues = {\n    opportunityLabel: ownProps['addOrEdit'] === 'edit' && doesTitleExist\n      ? opportunityData.getIn(selectedItemIndex).get('title')\n      : '',\n    manufacturerSelection: {},\n    categorySelection: {}\n  };\n\n  return {\n    initialValues,\n    ...createStructuredSelector({\n      opportunities: makeSelectOpportunityGroups(),\n      manufacturer: makeSelectManufacturer(),\n      category: makeSelectCategory(),\n      selectedManufacturerId: makeSelectSelectedManufacturerId(),\n      selectedCategoryId: makeSelectSelectedCategoryId(),\n      isModalOpen: makeSelectOverlayComponent(MODAL_ID),\n      formValues: getFormValues(MODAL_ID),\n      valid: isValid(MODAL_ID)\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n    setManufacturer: (id: number) => {\n      dispatch(new SetSelectedManufacturerIdAction({selectedManufacturerId: id}));\n    },\n    setCategory: (id: number) => {\n      dispatch(new SetSelectedCategoryIdAction({selectedCategoryId: id}));\n    },\n\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IOpportunityAddEditModalComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: MODAL_ID }),\n  reduxForm({\n    form: MODAL_ID,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(OpportunityAddEditModal);\n","import * as React from 'react';\n\ninterface IAtsSvgAtsLogoProps {\n    /**\n     * The width of the component.\n     * Default: '16'\n     */\n    width?: string;\n    /**\n     * The height of the component.\n     * Default: '18'\n     */\n    height?: string;\n    /**\n     * The background color.\n     * Default: '#666'\n     */\n    color?: string;\n\n    className?: string;\n    style?: React.CSSProperties;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsActionBlock = ({\n    width = '18',\n    height = '19',\n    className = '',\n    style = {}\n}: IAtsSvgAtsLogoProps) => {\n    return (\n        <svg\n            xmlns='http://www.w3.org/2000/svg'\n            width={width}\n            height={height}\n            viewBox='0 0 18 19'\n            className={className}\n            style={{\n                color: '#fff',\n                ...style\n            }}\n        >\n            <path d='M15.6562 10.998H15.2344V10.2123C15.2344 9.12805 14.2894 8.24805 13.125 8.24805C11.9606 8.24805 11.0156 9.12805 11.0156 10.2123V10.998H10.5938C10.1297 10.998 9.75 11.3516 9.75 11.7838V15.7123C9.75 16.1445 10.1297 16.498 10.5938 16.498H15.6562C16.1203 16.498 16.5 16.1445 16.5 15.7123V11.7838C16.5 11.3516 16.1203 10.998 15.6562 10.998ZM14.4328 10.998H11.8172V10.2123C11.8172 9.54055 12.4036 8.99448 13.125 8.99448C13.8464 8.99448 14.4328 9.54055 14.4328 10.2123V10.998Z' fill='currentColor' />\n            <path fillRule='evenodd' clipRule='evenodd' d='M9 13.498V11.623C8.625 11.248 7.875 11.248 7.5 11.248C5.4975 11.248 1.5 12.253 1.5 14.248V15.748H9V13.498ZM7.5 9.74805C9.1575 9.74805 10.5 8.40555 10.5 6.74805C10.5 5.09055 9.1575 3.74805 7.5 3.74805C5.8425 3.74805 4.5 5.09055 4.5 6.74805C4.5 8.40555 5.8425 9.74805 7.5 9.74805Z' fill='currentColor' />\n        </svg>\n    );\n};\n\nexport { AtsActionBlock };\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { makeStyles as makeStylesWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\n\nfunction makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return makeStylesWithoutDefault(stylesOrCreator, _extends({\n    defaultTheme: defaultTheme\n  }, options));\n}\n\nexport default makeStyles;","import {\n  List,\n  Map,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { createSelector } from 'reselect';\nimport { makeSelectShareContacts } from '../AccountModule/selectors';\nimport { IMap } from 'ats-utils/src';\n\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectOfficePricingRegions = () => createSelector(\n  selectReducerState(),\n  (state: any) => state.getIn(['regions', 'office', 'P']) ?? List(),\n);\n\nexport const makeSelectFirmPricingRegions = () => createSelector(\n  selectReducerState(),\n  (state: any) => state.getIn(['regions', 'firm', 'P']) ?? List(),\n);\n\nexport const makeSelectShareContactsPricingRegions = () => createSelector(\n  makeSelectShareContacts(),\n  makeSelectFirmPricingRegions(),\n  makeSelectOfficePricingRegions(),\n  (shareContacts: boolean, firmRegions: List<IMap<any>>, officeRegions: List<IMap<any>>) => {\n    return shareContacts ? firmRegions : officeRegions;\n  }\n);\n\nexport const makeSelectRegionsList = () => createSelector(\n  selectReducerState(),\n  (state: any) => state.get('regionsList'),\n);\n\nexport const makeSelectSelectedRegion = () => createSelector(\n  selectReducerState(),\n  (state: any) => state.get('selectedRegion'),\n);\n\nexport default {\n  selectReducerState,\n};\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport SvgIcon from '../../SvgIcon';\nexport default function createSvgIcon(path, displayName) {\n  var Component = React.memo(React.forwardRef(function (props, ref) {\n    return React.createElement(SvgIcon, _extends({}, props, {\n      ref: ref\n    }), path);\n  }));\n\n  if (process.env.NODE_ENV !== 'production') {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = SvgIcon.muiName;\n  return Component;\n}","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import React, {useState} from 'react';\nimport {Button, FormControl, FormHelperText, Grid, InputLabel, Link, MenuItem, Select, TextField, Tooltip, Typography} from '@material-ui/core';\nimport {Trans, useTranslation} from 'react-i18next';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport {BaseFieldProps, change} from 'redux-form';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../FieldTextField';\nimport {SetSnackbarClosedAction, ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {AMPLITUDE_EVENT, LOGIN_PATH} from '../../constants';\nimport PersonIcon from '@material-ui/icons/Person';\nimport {isNotEmpty, isValidEmailAddress, isValidPassword, passwordsMustMatch, required} from '../../validators';\nimport VpnKeyRoundedIcon from '@material-ui/icons/VpnKeyRounded';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffRoundedIcon from '@material-ui/icons/VisibilityOffRounded';\nimport DoneAllRoundedIcon from '@material-ui/icons/DoneAllRounded';\nimport {makeStyles} from '@material-ui/styles';\nimport {TrackFormSubmitFailedAction, TrackFormSubmitSucceededAction} from '../../modules/AccountModule/actions';\nimport {asyncValidate} from '../../containers/SignUpFirstStep';\nimport {InjectedFormProps} from 'redux-form/lib/reduxForm';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Theme} from '@material-ui/core/';\nimport {GUEST_LOGIN_MODAL, useViewContext} from './index';\nimport {push} from 'connected-react-router';\nimport ConsentModal from '../ConsentModal';\nimport {makeSelectIsAtsSpecTool} from '../../modules/AtsModule/selectors';\nimport { preventUnhandledSubmitRejection } from '../../utils/reduxForm';\n\ninterface IGuestLoginModalProps extends InjectedFormProps {\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    fullWidth: {\n        width: '100%',\n    },\n    icon: {\n        fontSize: '24px',\n        marginRight: '8px',\n    },\n    header: {\n        fontSize: '24.72px',\n        fontWeight: 700,\n        lineHeight: '29.66px',\n        textAlign: 'center',\n        color: 'rgba(0, 0, 0, 0.87)',\n        marginBottom: '16px'\n    },\n    text: {\n        fontSize: '16.69px',\n        fontWeight: 400,\n        lineHeight: '26px',\n        letterSpacing: '0.5px',\n        textAlign: 'left'\n    },\n    formControl: {\n        width: '100%'\n    },\n    roleInput: {\n        width: '100%',\n    },\n}));\n\ninterface IRoleType {\n    id: string;\n    value: string;\n}\n\nconst SignUpStep1: React.FC<IGuestLoginModalProps> = ({\n  handleSubmit,\n}) => {\n    const { view, setView } = useViewContext();\n    const [passwordTypeEnabled, setPasswordTypeEnabled] = useState(true);\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n    const [roleName, setRoleName] = useState('');\n    const [hasNoRole, setHasNoRole] = useState(false);\n    const [selectedRole, setSelectedRole] = useState('');\n    const [consentModalOpen, setConsentModalOpen] = useState(false);\n    const hasInvalidCustomRole = selectedRole === '8' && (!roleName || roleName.trim() === '');\n    const roleTypes: IRoleType[] = [\n        {\n            id: '1',\n            value: t('signUp.ownerPartner'),\n        },\n        {\n            id: '2',\n            value: t('signUp.designerArchitectSpecifier'),\n        },\n        {\n            id: '3',\n            value: t('signUp.generalManager'),\n        },\n        {\n            id: '4',\n            value: t('signUp.projectManager'),\n        },\n        {\n            id: '5',\n            value: t('signUp.purchasing')\n        },\n        {\n            id: '6',\n            value: t('signUp.businessDevelopmentMarketing')\n        },\n        {\n            id: '7',\n            value: t('signUp.internApprentice')\n        },\n        {\n            id: '8',\n            value: t('signUp.other')\n        }\n    ];\n    const onSubmit = () => {\n        if (!selectedRole || hasInvalidCustomRole) {\n            setHasNoRole(true);\n            return;\n        } else {\n            dispatch(change(GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1, 'jobTitle', roleName));\n            // spec tool users have to make a data & privacy selection before moving on to the next step\n            if (isAtsSpecTool) {\n                setConsentModalOpen(true);\n                return;\n            }\n            setView('signUpStep2');\n        }\n    };\n    const handleCloseConsentModal = () => {\n        setConsentModalOpen(false);\n    };\n    const handleConsentConfirm = (consent: boolean) => {\n        // gets merged into the RegisterUserAction body on the final step\n        dispatch(change(GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1, 'consent', consent));\n        setConsentModalOpen(false);\n        setView('signUpStep2');\n    };\n    const handleClickGoToLoginPage = () => {\n        dispatch(new ToggleOverlayComponentAction({\n            id: GUEST_LOGIN_MODAL,\n        }));\n        dispatch(push(LOGIN_PATH));\n    };\n    const togglePasswordVisible = () => {\n        setPasswordTypeEnabled((prevState) => !prevState);\n    };\n    const handleCustomRole = (event: React.ChangeEvent<HTMLInputElement>) => {\n        event.persist();\n        setRoleName(event.target.value);\n        setHasNoRole(false);\n    };\n    const handleSelectRole = (event) => {\n        const selectedRoleId = event.target.value;\n        if (selectedRoleId === '8') {\n            setRoleName('');\n        } else {\n            setRoleName(roleTypes.find((role) => role.id === selectedRoleId).value);\n        }\n        setHasNoRole(false);\n        setSelectedRole(selectedRoleId as string);\n    };\n\n    return (\n       <>\n            <ConsentModal\n                open={consentModalOpen}\n                onClose={handleCloseConsentModal}\n                onConfirm={handleConsentConfirm}\n            />\n            <Typography className={classes.header}>{t('guestLoginModal.header')}</Typography>\n            <Typography className={classes.text}>{t('guestLoginModal.text1')}</Typography>\n            <div style={{ marginBottom: 24 }}>\n               <Typography component='span' className={classes.text}>\n                   <Trans\n                       t={t}\n                       i18nKey={'guestLoginModal.text2'}\n                       components={[\n                           <Link key={'signUp'} variant='body1' component='button' className={classes.text} style={{ textDecoration: 'underline' }} onClick={handleClickGoToLoginPage} />\n                       ]}\n                   />\n               </Typography>\n            </div>\n            <form className={classes.fullWidth} onSubmit={preventUnhandledSubmitRejection(handleSubmit(onSubmit))}>\n                <Grid container={true} direction='column'>\n                    <Grid container={true} item={true}>\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='email'\n                            props={{\n                                label: t('signUpForm.email'),\n                                require: true,\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    type: 'text',\n                                    // autoComplete: 'new-password',\n                                    onChange: () => {\n                                        dispatch(new SetSnackbarClosedAction());\n                                    },\n                                    // onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1Email),\n                                    InputProps: {\n                                        startAdornment: <PersonIcon className={classes.icon}/>,\n                                        // disabled: Boolean((initialValues as any).get('email'))\n                                    },\n                                }\n                            }}\n                            validate={[\n                                required,\n                                isValidEmailAddress,\n                            ]}\n                            component={FieldTextField}\n                        />\n                    </Grid>\n                    <Grid container={true} item={true}>\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='firstName'\n                            props={{\n                                label: t('signUpForm.firstName'),\n                                require: true,\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    type: 'text',\n                                    name: Date.now().toString(),\n                                    // onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1FirstName),\n                                }\n                            }}\n                            validate={[\n                                required,\n                                isNotEmpty\n                            ]}\n                            component={FieldTextField}\n                        />\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='lastName'\n                            props={{\n                                label: t('signUpForm.lastName'),\n                                require: true,\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    type: 'text',\n                                    name: Date.now().toString(),\n                                    // onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1LastName),\n                                }\n                            }}\n                            validate={[\n                                required,\n                                isNotEmpty\n                            ]}\n                            component={FieldTextField}\n                        />\n                    </Grid>\n                    <Grid container={true} item={true}>\n                        <Grid item={true} xs={12}>\n                            <FormControl required={true} className={classes.formControl}>\n                                <InputLabel>{t('signUp.role')}</InputLabel>\n                                <Select\n                                    value={selectedRole}\n                                    onChange={handleSelectRole}\n                                >\n                                    {roleTypes.map((roleType: IRoleType) => {\n                                        return (\n                                            <MenuItem key={roleType.id} value={roleType.id}>{roleType.value}</MenuItem>\n                                        );\n                                    })}\n                                </Select>\n                            </FormControl>\n                        </Grid>\n                        {\n                            selectedRole === '8' && (\n                                <Grid item={true} xs={12} style={{ marginTop: 16 }}>\n                                    <TextField\n                                        className={classes.roleInput}\n                                        label={t('signUp.yourRole')}\n                                        value={roleName}\n                                        onChange={handleCustomRole}\n                                        autoComplete='no'\n                                        required={true}\n                                        error={hasInvalidCustomRole}\n                                        helperText={hasInvalidCustomRole ? t('errors.isNotEmptyString') : ''}\n                                    />\n                                </Grid>\n                            )\n                        }\n                        { hasNoRole && <FormHelperText id='helper-text' error={hasNoRole}>{t('signUp.pleaseSelectARole')}</FormHelperText> }\n                    </Grid>\n                    <Grid container={true} item={true} style={{ marginTop: 16 }}>\n                        {/* This input box is a hacky workaround from chrome autofill. Was unable to disable the password autocomplete but this hidden element will intercept the autocomplete email portion*/}\n                        <input type='text' name='email' style={{width: 0, height: 0, opacity: 0}} />\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='password'\n                            props={{\n                                label: t('signUpForm.password'),\n                                require: true,\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    type: passwordTypeEnabled ? 'password' : 'text',\n                                    name: 'password',\n                                    autoComplete: 'new-password',\n                                    // onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1Password),\n                                    InputProps: {\n                                        startAdornment: <VpnKeyRoundedIcon className={classes.icon}/>,\n                                        endAdornment: (\n                                            <Tooltip\n                                                title={t('toggle.password')}\n                                                placement='top'\n                                            >\n                                                <Button\n                                                    className={classes.icon}\n                                                    onClick={togglePasswordVisible}\n                                                >\n                                                    {passwordTypeEnabled ? <VisibilityIcon /> : <VisibilityOffRoundedIcon />}\n                                                </Button>\n                                            </Tooltip>\n                                        )\n                                    }\n                                },\n                            }}\n                            validate={[\n                                required,\n                                isValidPassword,\n                            ]}\n                            component={FieldTextField}\n                        />\n                    </Grid>\n                    <Grid container={true} item={true}>\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='confirmPassword'\n                            props={{\n                                label: t('signUpForm.confirmPassword'),\n                                require: true,\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    type: passwordTypeEnabled ? 'password' : 'text',\n                                    name: 'password',\n                                    // onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1ConfirmPassword),\n                                    InputProps: {\n                                        startAdornment: <DoneAllRoundedIcon className={classes.icon}/>,\n                                        endAdornment: (\n                                            <Tooltip title={t('toggle.password')} placement='top'>\n                                                <Button className={classes.icon} onClick={togglePasswordVisible}>\n                                                    {passwordTypeEnabled ? <VisibilityIcon /> : <VisibilityOffRoundedIcon />}\n                                                </Button>\n                                            </Tooltip>\n                                        )\n                                    }\n                                },\n                            }}\n                            validate={[required, passwordsMustMatch]}\n                            component={FieldTextField}\n                        />\n                    </Grid>\n                    <Grid item={true}>\n                        <Button type='submit' variant='contained' color='primary' style={{ marginTop: 20 }}>\n                            {t('guestLoginModal.continue')}\n                        </Button>\n                    </Grid>\n                </Grid>\n            </form>\n        </>\n    );\n};\nexport const GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1 = 'guest_sign_up_modal_signUpStep1';\nexport default reduxForm({\n    form: GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1,\n    destroyOnUnmount: false,\n    asyncValidate,\n    asyncBlurFields: ['email'],\n    onSubmitFail: (errors, dispatch) => dispatch(new TrackFormSubmitFailedAction({\n        errors,\n        eventName: AMPLITUDE_EVENT.step1Final,\n    })),\n    onSubmitSuccess: (result, dispatch) => dispatch(new TrackFormSubmitSucceededAction({\n        eventName: AMPLITUDE_EVENT.step1Final,\n    })),\n})(SignUpStep1);","import React, { useState } from 'react';\nimport {\n    Button, Checkbox, FormControlLabel,\n    Grid,\n    Link,\n    Step,\n    StepContent,\n    StepLabel,\n    Stepper,\n    TextField,\n    Theme,\n    Typography\n} from '@material-ui/core';\nimport {Trans, useTranslation} from 'react-i18next';\nimport {makeStyles} from '@material-ui/styles';\nimport SignUpOrganizationForm from '../../containers/Forms/SignUpOrganizationForm';\nimport {useViewContext} from './index';\nimport {RegisterUserAction} from '../../modules/AtsModule/actions';\nimport {AMPLITUDE_EVENT} from '../../constants';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {\n    getFormValues,\n} from 'redux-form/immutable';\n\nimport { GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1 as sighUpFirstStepFormName } from './SignUpStep1';\nimport { SIGN_UP_ORG_FORM_NAME as signUpOrganizationFormName } from '../../containers/Forms/SignUpOrganizationForm';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {reset} from 'redux-form';\nimport {getTerms} from '../../containers/SignUpSecondStep';\nimport {makeSelectConfig} from '../../modules/AtsModule/selectors';\nimport {makeSelectSession} from '../../modules/ApplicationModule/selectors';\n\ninterface ISignUpStep2Props {\n\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    fullWidth: {\n        width: '100%',\n    },\n    icon: {\n        fontSize: '24px',\n        marginRight: '8px',\n    },\n    header: {\n        fontSize: '24.72px',\n        fontWeight: 700,\n        lineHeight: '29.66px',\n        textAlign: 'center',\n        color: 'rgba(0, 0, 0, 0.87)',\n        marginBottom: '16px'\n    },\n    text: {\n        fontSize: '16.69px',\n        fontWeight: 400,\n        lineHeight: '26px',\n        letterSpacing: '0.5px',\n        textAlign: 'left'\n    },\n    stepperContainer: {\n        // width: '100%',\n    },\n    button: {\n        margin: theme.spacing(),\n    },\n    backButton: {\n        margin: theme.spacing(),\n    },\n    stepContent: {\n        paddingLeft: theme.spacing(4),\n    },\n    signUpButtonContainer: {\n        margin: `${theme.spacing(4)}px 0`\n    },\n    roleCard: {\n        width: 300,\n        textAlign: 'center',\n        margin: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`\n    },\n    roleInput: {\n        width: '100%',\n    },\n    title: {\n        margin: `0 0 10px 50px`,\n    },\n}));\n\nconst signUpOrganizationValuesSelector = getFormValues(signUpOrganizationFormName);\nconst signUpFirstStepValuesSelector = getFormValues(sighUpFirstStepFormName);\nconst SignUpStep2: React.FC<ISignUpStep2Props> = () => {\n    const { t } = useTranslation('translations');\n    const classes = useStyles();\n    const [activeStep, setActiveStep] = useState(0);\n    const [submitting, setSubmitting] = useState(false);\n    const amplitudeData = useAmplitudeData();\n    const {view, setView} = useViewContext();\n    const signUpOrganizationValues: any = useSelector(signUpOrganizationValuesSelector);\n    const signUpFirstStepValues: any = useSelector(signUpFirstStepValuesSelector);\n    const [saveDefaultSpec, setSaveDefaultSpec] = useState(false);\n    const [quickSpecTitle, setQuickSpecTitle] = useState('');\n    const dispatch = useDispatch();\n    const config = useSelector(makeSelectConfig());\n    const session = useSelector(makeSelectSession());\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey']);\n    const privacyLink = config?.get('footerPrivacyLink') || 'https://www.atssoftware.com/privacy-policy/';\n\n    const handleSignUp = async () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.step3Final, amplitudeData());\n        setSubmitting(true);\n        const mergedFormValues = signUpFirstStepValues.merge(signUpOrganizationValues);\n\n        new Promise((resolve, reject) => (\n            dispatch(new RegisterUserAction({\n                user: mergedFormValues,\n                resolve,\n                reject,\n                moveSessionSpec: saveDefaultSpec,\n                guestSpecId: session.get('guestSpecId'),\n                guestSpecName: quickSpecTitle,\n            }))\n        )).then(() => {\n            setView('signUpStep3');\n        }).finally(() => {\n            dispatch(reset(sighUpFirstStepFormName));\n            dispatch(reset(signUpOrganizationFormName));\n            setSubmitting(false);\n        });\n    };\n    const changeStep = (index: number, absolute: boolean = false) => () => {\n        setActiveStep((prevStep) => absolute ? index : (prevStep + index));\n    };\n    const handleDefaultSpecTitle = (event) => {\n        setQuickSpecTitle(event.target.value);\n    };\n    return (\n        <>\n            <Typography className={classes.header}>{t('guestLoginModal.signUpStep2Header')}</Typography>\n            <div className={classes.stepperContainer}>\n                <Stepper\n                    activeStep={activeStep}\n                    orientation='vertical'\n                >\n                    <Step key={0}>\n                        <StepLabel>\n                            {t('signUp.basicOrganizationDetails')}\n                        </StepLabel>\n                        <StepContent className={classes.stepContent}>\n                            <Grid container={true}>\n                                <Grid item={true} xs={12}>\n                                    <SignUpOrganizationForm nextStep={changeStep(1)} renderActionButtons={() => {\n                                        return (\n                                            <>\n                                                <Button\n                                                    color='primary'\n                                                    onClick={() => setView('signUpStep1')}\n                                                >\n                                                    {t('formButtons.back')}\n                                                </Button>\n                                                <Button\n                                                    variant='contained'\n                                                    type='submit'\n                                                    className={classes.button}\n                                                    color='primary'\n                                                >\n                                                    {t('formButtons.next')}\n                                                </Button>\n                                            </>\n                                        );\n                                    }}/>\n                                </Grid>\n                            </Grid>\n                        </StepContent>\n                    </Step>\n                    <Step key={1}>\n                        <StepLabel>\n                            {t('guestLoginModal.signUpStep2SaveDefaultSpecs')}\n                        </StepLabel>\n                        <StepContent>\n                            <div>\n                                <Typography variant='body2' style={{ color: 'rgba(0, 0, 0, 0.87)', fontSize: '14.6px', marginTop: '8px', marginBottom: '8px' }}>{t('guestLoginModal.signUpStep2SaveDefaultSpecsDescription')}</Typography>\n                                <FormControlLabel\n                                    control={<Checkbox color='primary' checked={saveDefaultSpec} onChange={(event) => setSaveDefaultSpec(event.target.checked)} />}\n                                    label={t('guestLoginModal.signUpStep2SaveDefaultSpecsCheckBox')}\n                                />\n                                {saveDefaultSpec ? <TextField\n                                    className={classes.roleInput}\n                                    label={t('guestLoginModal.quickSpecTitle')}\n                                    value={quickSpecTitle}\n                                    onChange={handleDefaultSpecTitle}\n                                    autoComplete='no'\n                                    required={true}\n                                /> : null}\n                                <div>\n                                    <Button\n                                        onClick={changeStep(-1)}\n                                        color='primary'\n                                        className={classes.backButton}\n                                    >\n                                        {t('formButtons.back')}\n                                    </Button>\n                                    <Button\n                                        onClick={handleSignUp}\n                                        variant='contained'\n                                        className={classes.button}\n                                        color='primary'\n                                        disabled={submitting || (saveDefaultSpec && !quickSpecTitle)}\n                                    >\n                                        {t('signUp.signUp')}\n                                    </Button>\n                                </div>\n                                <div style={{ marginTop: '32px' }}>\n                                    <Typography component='span' color='textPrimary' className={classes.text}>\n                                        <Trans\n                                            t={t}\n                                            i18nKey={'signUp.signUpTermsOfService'}\n                                            components={[\n                                                <Link key={'tos'} variant='body1' className={classes.text} href={privacyLink} target='_blank' rel='noopener'  />\n                                            ]}\n                                        />\n                                    </Typography>\n                                </div>\n                            </div>\n                        </StepContent>\n                    </Step>\n                </Stepper>\n            </div>\n        </>\n    );\n};\n\nexport default SignUpStep2;","import React from 'react';\nimport {Button, Typography} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport {LOGIN_PATH} from '../../constants';\nimport {push} from 'connected-react-router';\nimport {useDispatch} from 'react-redux';\nimport {makeStyles} from '@material-ui/styles';\n\ninterface ISignUpStep3Props {\n    withContinueButton?: boolean;\n    onClickContinue?: () => {};\n    text?: string;\n    handleClose: () => void;\n}\n\nconst useStyles = makeStyles(() => ({\n    header: {\n        fontWeight: 700\n    },\n    description: {\n        fontSize: '14.6px',\n        color: 'rgba(0, 0, 0, 0.87)'\n    }\n}));\nconst SignUpStep3: React.FC<ISignUpStep3Props> = ({\n    withContinueButton = false,\n    onClickContinue,\n    text,\n    handleClose,\n}) => {\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const classes = useStyles();\n    const handleClickGoToLoginPage = () => {\n        handleClose();\n        dispatch(push(LOGIN_PATH));\n    };\n    const handleClickContinue = () => {\n        handleClose();\n        onClickContinue?.();\n    };\n    return (\n        <div style={{ padding: '20px' }}>\n            <Typography variant='h5' align='center' gutterBottom={true} className={classes.header}>{t('guestLoginModal.checkYourEmail')}</Typography>\n            <Typography className={classes.description}>{t('guestLoginModal.checkYourEmailDescription1')}</Typography>\n            <Typography gutterBottom={true} className={classes.description}>{t('guestLoginModal.checkYourEmailDescription2')}</Typography>\n            <div style={{ display: 'flex', justifyContent: 'center', gap: '8px' }}>\n                <Button variant={withContinueButton ? 'text' : 'contained'} color='primary' onClick={handleClickGoToLoginPage}>{t('guestLoginModal.gotoLoginPage')}</Button>\n                {withContinueButton ? <Button variant='contained' color='primary' onClick={handleClickContinue}>{text}</Button> : null}\n            </div>\n        </div>\n    );\n};\n\nexport default SignUpStep3;","import React, {useMemo, useState} from 'react';\nimport SignUpStep1, { GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1 } from './SignUpStep1';\nimport SignUpStep2 from './SignUpStep2';\nimport SignUpStep3 from './SignUpStep3';\nimport {ControlledModal} from '../index';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {IconButton} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {makeSelectOverlayComponentProp} from '../../modules/ApplicationModule/selectors';\nimport { reset } from 'redux-form';\nimport { SIGN_UP_ORG_FORM_NAME } from '../../containers/Forms/SignUpOrganizationForm';\n\nexport type View = 'signUpStep1' | 'signUpStep2' | 'signUpStep3';\nconst ViewContext = React.createContext(undefined);\nexport const useViewContext = () => {\n    const context = React.useContext(ViewContext);\n    if (context === undefined) {\n        throw new Error('useViewContext must be used within a ViewProvider');\n    }\n    return context;\n};\nexport const GUEST_LOGIN_MODAL = 'GUEST_LOGIN_MODAL';\nconst GuestLoginModal: React.FC<{ }> = () => {\n    const [view, setView] = useState<View>('signUpStep1');\n    const modalProps = useSelector(makeSelectOverlayComponentProp(GUEST_LOGIN_MODAL));\n    const value = useMemo(() => ({ view, setView }), [view, setView]);\n    const dispatch = useDispatch();\n    const handleClose = () => {\n        setView('signUpStep1');\n        dispatch(new ToggleOverlayComponentAction({\n            id: GUEST_LOGIN_MODAL,\n            open: false,\n        }));\n        dispatch(reset(GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1));\n        dispatch(reset(SIGN_UP_ORG_FORM_NAME));\n    };\n    return (\n        <ControlledModal\n            localKey={GUEST_LOGIN_MODAL}\n            PaperProps={{\n                style: {\n                    padding: '24px 24px',\n                    minWidth: '768px',\n                }\n            }}\n            handleClose={handleClose}\n        >\n            <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n                <IconButton onClick={handleClose} style={{ padding: 0 }}>\n                    <CloseIcon style={{ fontSize: '24px' }} />\n                </IconButton>\n            </div>\n            <ViewContext.Provider value={value}>\n                <div style={{ padding: '0 20px' }}>\n                    {view === 'signUpStep1' && <SignUpStep1 />}\n                    {view === 'signUpStep2' && <SignUpStep2 />}\n                    {view === 'signUpStep3' && <SignUpStep3 handleClose={handleClose} withContinueButton={modalProps?.withContinueButton} onClickContinue={modalProps?.onClickContinue} text={modalProps?.text} />}\n                </div>\n            </ViewContext.Provider>\n        </ControlledModal>\n    );\n};\n\nexport default GuestLoginModal;\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListItem from '../ListItem';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body1, _defineProperty({\n      minHeight: 48,\n      paddingTop: 6,\n      paddingBottom: 6,\n      boxSizing: 'border-box',\n      width: 'auto',\n      overflow: 'hidden',\n      whiteSpace: 'nowrap'\n    }, theme.breakpoints.up('sm'), {\n      minHeight: 'auto'\n    })),\n    // TODO To remove in v5?\n\n    /* Styles applied to the root element if `disableGutters={false}`. */\n    gutters: {},\n\n    /* Styles applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Styles applied to the root element if dense. */\n    dense: _extends({}, theme.typography.body2, {\n      minHeight: 'auto'\n    })\n  };\n};\nvar MenuItem = React.forwardRef(function MenuItem(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'li' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'menuitem' : _props$role,\n      selected = props.selected,\n      tabIndexProp = props.tabIndex,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"role\", \"selected\", \"tabIndex\"]);\n\n  var tabIndex;\n\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n\n  return React.createElement(ListItem, _extends({\n    button: true,\n    role: role,\n    tabIndex: tabIndex,\n    component: component,\n    selected: selected,\n    disableGutters: disableGutters,\n    classes: {\n      dense: classes.dense\n    },\n    className: clsx(classes.root, className, selected && classes.selected, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes = {\n  /**\n   * Menu item contents.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  selected: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.number\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiMenuItem'\n})(MenuItem);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3 17.46v3.04c0 .28.22.5.5.5h3.04c.13 0 .26-.05.35-.15L17.81 9.94l-3.75-3.75L3.15 17.1c-.1.1-.15.22-.15.36zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n}), 'EditRounded');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Button, Grid, Typography, Paper, WithStyles, withStyles\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport {StyleRules} from '@material-ui/core/styles';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\n\ninterface IOverRideStyles {\n  imageContainer?: object;\n}\ninterface INotFoundProps {\n  icon?: string;\n  svgIcon?: JSX.Element;\n  firstRow: string | JSX.Element;\n  redirectLink?: string;\n  paperContainer?: boolean;\n  secondRow?: string | JSX.Element;\n  redirectMessage?: string;\n  overRideStyles?: IOverRideStyles;\n}\n\ntype NotFoundProps = INotFoundProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\ninterface IWithPaperProps {\n  paperContainer: boolean;\n  classes: any;\n  children: any;\n}\n\nconst WithPaper: React.FC<IWithPaperProps> = ({ paperContainer, children, classes }) => (\n  paperContainer\n    ? <Paper className={classes.paperContainer}> { children } </Paper>\n    : children\n);\n\nconst NotFound: React.FC<NotFoundProps> = (props) => {\n  const {\n    icon,\n    svgIcon,\n    firstRow,\n    redirectLink,\n    paperContainer,\n    secondRow,\n    redirectMessage,\n    overRideStyles,\n    classes,\n    t,\n  } = props;\n\n  return (\n    <WithPaper paperContainer={paperContainer} classes={classes}>\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n        justify='center'\n        alignItems='center'\n      >\n        <Grid\n          item={true}\n          className={classes.imageContainer}\n          style={overRideStyles && overRideStyles.imageContainer ? overRideStyles.imageContainer : {}}\n        >\n          { icon ?  <img src={icon} alt={t('notFound.alt')}/> : null }\n          { svgIcon ? svgIcon : null }\n        </Grid>\n        <Grid\n          item={true}\n          className={classes.messages}\n        >\n          {\n            typeof firstRow === 'string' ? (\n              <Typography variant='h4'>{firstRow}</Typography>\n            ) : firstRow\n          }\n          { secondRow && (\n            typeof secondRow === 'string' ? (\n              <Typography variant='body2' className={classes.secondRow}>\n                {secondRow}\n              </Typography>\n            ) : (\n              <div className={classes.secondRow}>\n                {secondRow}\n              </div>\n            )\n          )}\n          {\n            redirectLink && (\n              <Grid item={true} className={classes.routeContainer}>\n                <Button color='primary' variant='contained'>\n                  <Link className={classes.redirectLink} to={redirectLink}>\n                    { redirectMessage || t('formButtons.back')}\n                  </Link>\n                </Button>\n              </Grid>\n            )\n          }\n        </Grid>\n      </Grid>\n    </WithPaper>\n  );\n};\n\nconst styles = (theme): StyleRules => ({\n  root: {\n    marginBottom: theme.spacing(2.5),\n    height: '100%'\n  },\n  paperContainer: {\n    flexGrow: 1,\n    height: '100%',\n    width: '100%',\n    padding: theme.spacing(3)\n  },\n  imageContainer: {\n    marginBottom: theme.spacing(2.5),\n    width: '100%',\n    overflow: 'hidden',\n    textAlign: 'center',\n    '& svg': {\n      height: '100%'\n    }\n  },\n  secondRow: {\n    marginTop: theme.spacing(2.5),\n    color: 'black'\n  },\n  routeContainer: {\n    marginTop: theme.spacing(2.5),\n  },\n  messages: {\n    textAlign: 'center',\n    minWidth: '25%'\n  },\n  redirectLink: {\n    color: 'white',\n    textDecoration: 'none'\n  }\n});\n\nexport default compose<React.FC<INotFoundProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(NotFound);\n","var _style, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _ellipse, _path14, _path15, _path16;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLoadingCart(_ref, svgRef) {\n  var title = _ref.title,\n      titleId = _ref.titleId,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 500 350\",\n    style: {\n      animation: \"3.5s linear infinite both a0_o\"\n    },\n    height: 350,\n    width: 491,\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \"\\n@keyframes a0_o { 0% { opacity: 1; } 2.857% { opacity: 1; } 100% { opacity: 1; } }\\n@keyframes a2_t { 0% { transform: translate(62.3px,62.3px); } 48.571% { transform: translate(62.3px,62.3px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 60% { transform: translate(62.3px,255.6px); } 68.571% { transform: translate(67.8px,250.7px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 100% { transform: translate(588.8px,250.7px); } }\\n@keyframes a1_t { 0% { transform: rotate(0deg) translate(-17.5px,-25px); } 60% { transform: rotate(0deg) translate(-17.5px,-25px); } 68.571% { transform: rotate(-30deg) translate(-17.5px,-25px); } 100% { transform: rotate(-30deg) translate(-17.5px,-25px); } }\\n@keyframes a4_t { 0% { transform: translate(62.3px,69px); } 37.143% { transform: translate(62.3px,69px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 48.571% { transform: translate(62.3px,255.6px); } 60% { transform: translate(62.3px,255.6px); } 68.571% { transform: translate(67.8px,250.7px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 100% { transform: translate(588.8px,250.7px); } }\\n@keyframes a3_t { 0% { transform: rotate(0deg) translate(-20px,-25px); } 60% { transform: rotate(0deg) translate(-20px,-25px); } 68.571% { transform: rotate(-30deg) translate(-20px,-25px); } 100% { transform: rotate(-30deg) translate(-20px,-25px); } }\\n@keyframes a6_t { 0% { transform: translate(62.3px,75.7px); } 25.714% { transform: translate(62.3px,75.7px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 37.143% { transform: translate(62.3px,255.6px); } 60% { transform: translate(62.3px,255.6px); } 68.571% { transform: translate(67.8px,250.7px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 100% { transform: translate(588.8px,250.7px); } }\\n@keyframes a5_t { 0% { transform: rotate(0deg) translate(-22.5px,-25px); } 60% { transform: rotate(0deg) translate(-22.5px,-25px); } 68.571% { transform: rotate(-30deg) translate(-22.5px,-25px); } 100% { transform: rotate(-30deg) translate(-22.5px,-25px); } }\\n@keyframes a8_t { 0% { transform: translate(-71.9px,241.7px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 17.143% { transform: translate(56.8px,241.7px); } 60% { transform: translate(55.3px,241.7px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 68.571% { transform: translate(56.8px,241.7px); animation-timing-function: cubic-bezier(.6,.1,.7,.2); } 100% { transform: translate(577.8px,241.7px); } }\\n@keyframes a7_t { 0% { transform: rotate(-30deg) translate(-50.3px,-66.9px); } 17.143% { transform: rotate(-30deg) translate(-50.3px,-66.9px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 25.714% { transform: rotate(0deg) translate(-50.3px,-66.9px); } 60% { transform: rotate(0deg) translate(-50.3px,-66.9px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 68.571% { transform: rotate(-30deg) translate(-50.3px,-66.9px); } 100% { transform: rotate(-30deg) translate(-50.3px,-66.9px); } }\\n\")), /*#__PURE__*/React.createElement(\"g\", {\n    style: {\n      animation: \"3.5s linear infinite both a2_t\"\n    }\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    width: 35,\n    height: 50,\n    fill: \"#c8c8c8\",\n    transform: \"translate(62.3,62.3) translate(-17.5,-25)\",\n    style: {\n      animation: \"3.5s linear infinite both a1_t\"\n    }\n  })), /*#__PURE__*/React.createElement(\"g\", {\n    style: {\n      animation: \"3.5s linear infinite both a4_t\"\n    }\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    width: 40,\n    height: 50,\n    fill: \"#e3e3e3\",\n    transform: \"translate(62.3,69) translate(-20,-25)\",\n    style: {\n      animation: \"3.5s linear infinite both a3_t\"\n    }\n  })), /*#__PURE__*/React.createElement(\"g\", {\n    style: {\n      animation: \"3.5s linear infinite both a6_t\"\n    }\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    width: 45,\n    height: 50,\n    fill: \"#f3efef\",\n    transform: \"translate(62.3,75.7) translate(-22.5,-25)\",\n    style: {\n      animation: \"3.5s linear infinite both a5_t\"\n    }\n  })), /*#__PURE__*/React.createElement(\"g\", {\n    style: {\n      animation: \"3.5s linear infinite both a8_t\"\n    }\n  }, /*#__PURE__*/React.createElement(\"g\", {\n    transform: \"translate(-71.9,241.7) rotate(-30) translate(-50.3,-66.9)\",\n    style: {\n      animation: \"3.5s linear infinite both a7_t\"\n    }\n  }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M37.3 39.8l-3.1 5.4l-4.4-5.5v-20.2c0-1.3-0.7-2.6-1.9-3.2l-16.7-9.7l3.8-6.4l16.6 9.6c3.5 2 5.7 5.7 5.7 9.7\",\n    fill: \"#766e6e\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M82.3 81l-26.1 14.7c-29.9-16.9-25.9-14.6-26.3-14.8c0-16.7-0.1-37.8-0.1-41.2c.9 0 9.1 .1 18.7 .1c1.2 2.4-3.3-7.5 7.6 16.7l7.4-16.7c9.4 0 17.4 0 18.8 0\",\n    fill: \"#ffdf8e\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M82.3 81l-26.1 14.7l-0.1-39.2l7.4-16.7c9.4 0 17.4 0 18.8 0\",\n    fill: \"#fbc56d\"\n  })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M63.6 58.5h-7.5h-7.5l-0.1-18.7c2.5 0 5 0 7.5 0c2.6 0 5.1 0 7.5 0\",\n    fill: \"#fff2b4\"\n  })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M63.6 58.5h-7.5l-0.1-18.7c2.6 0 5.1 0 7.5 0\",\n    fill: \"#ffdf8e\"\n  })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M82.4 118.3l-26.2-0.9l-10.6-0.4l-15.7-15.5c0-1.1 0-9.9 0-20.6h18.7c1.4 2.6-3.7-7.1 7.6 14.4l7.4-14.4l18.7 .1\",\n    fill: \"#fbc56d\"\n  })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#ebae56\",\n    d: \"M82.4 118.3l-26.2-0.9v-22.1l7.4-14.4l18.7 .1\"\n  })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#fff2b4\",\n    d: \"M63.6 95.9h-7.4l-7.5-0.1l-0.1-14.9h7.5h7.5\"\n  })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#ffdf8e\",\n    d: \"M56.4 80.8l7.5 .3l-0.5 14.9l-7.5-0.3\"\n  })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#766e6e\",\n    d: \"M92.4 122.1l-36.2-0.1h-14.6v-7.5h14.6l36.2 .1\"\n  })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#5b5555\",\n    d: \"M56.1 114.9l36.2-0.6l.1 7l-36.2 .6\"\n  })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M43.2 124.3c5.2-9 2.1-20.4-6.9-25.6c-8.9-5.1-20.4-2.1-25.6 6.8c-5.1 8.9-2 20.4 6.9 25.6\",\n    fill: \"#766e6e\"\n  })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M43.2 124.3c-5.1 8.9-16.6 11.9-25.6 6.8l18.7-32.4\",\n    fill: \"#5b5555\"\n  })), _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n    fill: \"#5b5555\",\n    rx: 11.3,\n    ry: 11.2,\n    transform: \"translate(27,114.9) rotate(30)\"\n  })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M36.7 120.5c-3.1 5.4-10 7.2-15.3 4.1l11.2-19.4\",\n    fill: \"#463f3f\"\n  })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#deecf1\",\n    d: \"M25.6 109.8l6.5 3.7l-3.7 6.5l-6.5-3.8\"\n  })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#c6e2e7\",\n    d: \"M28.8 111.7l3.3 1.8l-3.7 6.5l-3.3-1.9\"\n  })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLoadingCart);\nexport default __webpack_public_path__ + \"static/media/loadingCart.bb4e0558.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from 'react';\n\ninterface IMasterTemplateDrawerState {\n    open: boolean;\n    tabValue: number;\n}\n\ninterface IViewContextValue {\n    productSearchTerm: string;\n    setProductSearchTerm: React.Dispatch<React.SetStateAction<string>>;\n    masterTemplateDrawerState: IMasterTemplateDrawerState;\n    setMasterTemplateDrawerState: React.Dispatch<React.SetStateAction<IMasterTemplateDrawerState>>;\n    isDialogOpen: boolean;\n    setIsDialogOpen: React.Dispatch<React.SetStateAction<boolean>>;\n    isDeleteModalOpen: boolean;\n    setIsDeleteModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n    setIsDownloadWarningModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\n    isDownloadWarningModalOpen?: boolean;\n    sortProductGroupsModalOpen?: boolean;\n    setSortProductGroupsModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;\n}\nexport const ViewContext = React.createContext(undefined);\nexport const useViewContext = (): IViewContextValue => {\n    const context = React.useContext(ViewContext);\n    if (context === undefined) {\n        throw new Error('useViewContext must be used within a ViewContext');\n    }\n    return context;\n};","import { createSelector } from 'reselect';\nimport {\n  Map,\n  List,\n} from 'immutable';\n\nimport {\n  BUILDING_SELECTION_FORM,\n  FORM_SELECTED_BUILDING_CLASSES_KEY,\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  getFormValues\n} from 'redux-form/immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  BuildingClassListItem,\n  ListItem\n} from '../../models';\n\nimport {\n  IBuildingReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added BuildingModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const selectFormState = () => (state: any) =>  getFormValues(BUILDING_SELECTION_FORM)(state) || Map<string, any>();\n\nexport const makeSelectBuildingClasses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingReducerState>) => state.get('buildingClasses'),\n);\n\nexport const makeSelectBuildingTypes = (selectedBuildingClassId?: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingReducerState>) => selectedBuildingClassId ? state.get('buildingTypes').get(selectedBuildingClassId) : state.get('buildingTypes'),\n);\n\nexport const makeSelectBuildingTypesForBuildingClass = (controlledBuildingClassId: number | string) => createSelector(\n  makeSelectBuildingTypes(),\n  (buildingTypesMap: Map<string|number, List<IMap<ListItem<string, string>>>>) => buildingTypesMap.get(controlledBuildingClassId)\n);\n\nexport default {\n  selectReducerState,\n  selectFormState,\n  makeSelectBuildingClasses,\n  makeSelectBuildingTypes,\n  makeSelectBuildingTypesForBuildingClass,\n};","import * as React from 'react';\nimport {\n  compose,\n} from 'redux';\nimport {\n  WithStyles,\n  withStyles,\n  Theme,\n  Grid,\n  Button,\n  Paper,\n  Typography,\n  WithTheme,\n  StyleRules,\n  Tooltip,\n  TextField,\n  InputAdornment,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport ControlledModal from '../../../../../components/ControlledModal';\nimport { ToggleOverlayComponentAction } from '../../../../../modules/ApplicationModule/actions';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../../../hoc/withAmplitudeData';\nimport { connect } from 'react-redux';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../../../../modules/ApplicationModule/selectors';\nimport { List, Map } from 'immutable';\nimport SearchIcon from '@material-ui/icons/Search';\nimport HomeWorkIcon from '@material-ui/icons/HomeWork';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { makeSelectAttachmentFolderTemplates, makeSelectDefaultAttachmentFolderTemplate, makeSelectIsSearchingFolderTemplates } from '../../../../../modules/AccountModule/selectors';\nimport { CreateAttachmentFolderTemplateAction, GetAttachmentFolderTemplatesAction, SetIsSearchingFolderTemplatesAction } from '../../../../../modules/AccountModule/actions';\nimport { IAction } from 'ats-utils/src';\nimport { ApplyFolderTemplateToProjectAttachmentAction } from '../../../../../modules/ProjectModule/actions';\nimport { SETTINGS_ATTACHMENT_FOLDERS_PATH, SETTINGS_PATH } from '../../../../../constants';\nimport { push } from 'connected-react-router';\nimport { debounce } from 'lodash';\nimport { makeSelectIsApplyingTemplateToProjectAttachment } from '../../../../../modules/ProjectModule/selectors';\n\n\nexport const APPLY_ATTACHMENT_TEMPLATE_MODAL = 'APPLY_ATTACHMENT_TEMPLATE_MODAL';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    background: 'white',\n    padding: theme.spacing(0, 4, 1)\n  },\n  selectMenu: {\n    'white-space': 'normal'\n  },\n  fieldContainer: {\n    marginTop: theme.spacing(2.5)\n  },\n  modalTitle: {\n    padding: theme.spacing(3, 0)\n  },\n  list: {\n    height: '412px',\n    width: '100%'\n  },\n  row: {\n    cursor: 'pointer',\n    padding: theme.spacing(2),\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    '&:hover': {\n      backgroundColor: theme.palette.action.hover\n    }\n  },\n  templateName: {\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  },\n});\n\ninterface IApplyAttachmentTemplateModalComponentProps {\n}\n\ninterface IApplyAttachmentTemplateModalProps extends IApplyAttachmentTemplateModalComponentProps {\n  open: boolean;\n  overlayProps: { [key: string]: any };\n  isSearchingFolderTemplates: boolean;\n  isApplyingTemplate: boolean;\n  data: List<Map<string, any>>;\n  defaultTemplate: Map<string,any>;\n  dispatch: (action: IAction) => void;\n}\n\ntype IApplyAttachmentTemplateModal =\n    IApplyAttachmentTemplateModalProps\n    & WithTranslation\n    & WithStyles<keyof ReturnType<typeof styles>>\n    & WithAmplitudeData\n    & WithTheme;\n\nconst ApplyAttachmentTemplateModal: React.FC<IApplyAttachmentTemplateModal> = (props) => {\n  const {\n    t,\n    classes,\n    theme,\n    dispatch,\n    overlayProps,\n    data,\n    isSearchingFolderTemplates,\n    isApplyingTemplate,\n    defaultTemplate\n  } = props;\n\n  const {\n    selectedProjectId,\n    parentFolderId\n  } = overlayProps;\n\n  React.useEffect(() => {\n    dispatch(new GetAttachmentFolderTemplatesAction({}));\n  } ,[]);\n\n  const [inputValue, setInputValue] = React.useState('');\n\n  const closeModal = () => {\n    dispatch(new SetIsSearchingFolderTemplatesAction(false));\n    dispatch(new ToggleOverlayComponentAction({ open: false, id: APPLY_ATTACHMENT_TEMPLATE_MODAL }));\n  };\n\n  const searchTemplates = searchTerm => dispatch(new GetAttachmentFolderTemplatesAction({searchTerm}));\n  const debounceSearchTemplates = debounce(searchTemplates, 500);\n\n  return (\n    <div>\n      <ControlledModal\n        localKey={APPLY_ATTACHMENT_TEMPLATE_MODAL}\n        fullWidth={true}\n        maxWidth={'xs'}\n        handleClose={closeModal}\n      >\n        <Paper className={classes.root}>\n          <Typography\n            variant='h5'\n            className={classes.modalTitle}\n          >\n            {t('attachmentFoldersTemplate.applyTemplate')}\n          </Typography>\n          <Grid item={true} className={classes.searchContainer}>\n            <TextField\n              autoFocus={true}\n              value={inputValue}\n              onChange={(e) => {\n                const searchTerm = e.target.value;\n                setInputValue(searchTerm);\n                if (searchTerm || searchTerm === '') {\n                  debounceSearchTemplates(searchTerm);\n                }\n              }}\n              fullWidth={true}\n              placeholder={t('attachmentFoldersTemplate.searchPlaceholder')}\n              InputProps={{\n                startAdornment: <InputAdornment position='start'>\n                  <SearchIcon style={{ color: theme.palette.grey[600] }} />\n                </InputAdornment>,\n              }}\n            />\n          </Grid>\n          <Grid\n            container={true}\n            direction='column'\n            justify={data.size === 0 || isSearchingFolderTemplates || isApplyingTemplate ? 'center' : 'flex-start'}\n            alignItems='center'\n            className={classes.list}\n            wrap='nowrap'\n          >\n            {isSearchingFolderTemplates || isApplyingTemplate\n            ? <>\n                <CircularProgress color='primary' />\n                <Typography variant='h6'>\n                  { isSearchingFolderTemplates ? t('generalLoading.searching') : t('attachmentFoldersTemplate.applyingTemplate')}\n                </Typography>\n              </>\n            : data.size === 0\n              ? <>\n                  <Typography variant='h6'>\n                    {t('attachmentFoldersTemplate.noResultsFound')}\n                  </Typography>\n                  <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                    {t('attachmentFoldersTemplate.cantFindItemsMatching')}\n                  </Typography>\n                  <Button\n                    color='primary'\n                    onClick={() => dispatch(new CreateAttachmentFolderTemplateAction({templateName: 'Unnamed template'}))}\n                  >+ {t('attachmentFoldersTemplate.newTemplates')}</Button>\n                </>\n              : <Grid\n                  container={true}\n                  direction='column'\n                  justify='flex-start'\n                  alignItems='center'\n                  wrap='nowrap'\n                  style={{height: '100%', marginBottom: 16, overflowY: 'auto'}}\n                >\n                  { data.map((template, index) => {\n                      const templateName = template.get('name');\n                      const templateId = template.get('id');\n                      const firmDefaultTemplateId = defaultTemplate.getIn(['firm', 'id']);\n                      const userDefaultTemplateId = defaultTemplate.getIn(['user', 'id']);\n                      const isFirmDefaultTemplate = template.get('id') === firmDefaultTemplateId;\n                      const isUserDefaultTemplate = template.get('id') === userDefaultTemplateId;\n                      return(\n                        <Grid\n                          key={index}\n                          container={true}\n                          direction='column'\n                          justify='center'\n                          className={classes.row}\n                          onClick={() => {\n                            dispatch(new ApplyFolderTemplateToProjectAttachmentAction({\n                              projectId: selectedProjectId,\n                              templateId,\n                              parentFolderId\n                            }));\n                          }}\n                        >\n                          <Grid\n                            container={true}\n                            justify='space-between'\n                            wrap='nowrap'\n                          >\n                            <Grid style={{ width: 330 }}>\n                              <Typography variant='subtitle1' className={classes.templateName} style={{ color: theme.palette.text.primary }}>\n                                {templateName}\n                              </Typography>\n                            </Grid>\n                            {(isUserDefaultTemplate || isFirmDefaultTemplate) &&\n                              <Grid container={true} direction='row' wrap='nowrap' style={{width: 'auto'}}>\n                                {isUserDefaultTemplate &&\n                                  <Tooltip title={t('attachmentFoldersTemplate.personIconTooltip')}>\n                                    <PersonIcon color='primary' />\n                                  </Tooltip>\n                                }\n                                {isFirmDefaultTemplate &&\n                                  <Tooltip title={t('attachmentFoldersTemplate.homeIconTooltip')} style={{marginLeft: 8}}>\n                                    <HomeWorkIcon color='primary' />\n                                  </Tooltip>\n                                }\n                              </Grid>\n                            }\n                          </Grid>\n                        </Grid>\n                      );\n                    })\n                  }\n                </Grid>\n            }\n          </Grid>\n          {data.size !== 0 &&\n            <Grid item={true} container={true} justify='center'>\n              <Button\n                color='primary'\n                onClick={() => dispatch(push(`${SETTINGS_PATH}${SETTINGS_ATTACHMENT_FOLDERS_PATH}`))}\n                disabled={data.size === 0 || isApplyingTemplate}\n              >{t('attachmentFoldersTemplate.editTemplates')}</Button>\n            </Grid>\n          }\n        </Paper>\n      </ControlledModal>\n    </div>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectOpen = makeSelectOverlayComponent(APPLY_ATTACHMENT_TEMPLATE_MODAL);\n  const selectOverlayProps = makeSelectOverlayComponentProp(APPLY_ATTACHMENT_TEMPLATE_MODAL);\n  const selectIsSearchingFolderTemplates = makeSelectIsSearchingFolderTemplates();\n  const selectIsApplyingTemplateToProjectAttachment = makeSelectIsApplyingTemplateToProjectAttachment();\n  const selectDefaultAttachmentFolderTemplate = makeSelectDefaultAttachmentFolderTemplate();\n  const selectAttachmentFolderTemplates = makeSelectAttachmentFolderTemplates();\n\n  return function mapStateToProps(state) {\n    const defaultTemplate = selectDefaultAttachmentFolderTemplate(state);\n    const rawData = selectAttachmentFolderTemplates(state);\n    // make user and firm default comes first on the list\n    let data;\n    const userDefaultTemplateId = defaultTemplate.getIn(['user', 'id']);\n    const firmDefaultTemplateId = defaultTemplate.getIn(['firm', 'id']);\n    // if both are same, move 1 tempate to first position else move user default to first and firm default to second\n    if (userDefaultTemplateId === firmDefaultTemplateId) {\n      const filteredData = rawData.filter(el => el.get('id') !== userDefaultTemplateId);\n      const userDefaultTemplate = rawData.filter(el => el.get('id') === userDefaultTemplateId);\n      data = filteredData.unshift(...userDefaultTemplate);\n    } else {\n      const filteredData = rawData.filter(el => el.get('id') !== userDefaultTemplateId && el.get('id') !== firmDefaultTemplateId);\n      const userDefaultTemplate = rawData.filter(el => el.get('id') === userDefaultTemplateId);\n      const firmDefaultTemplate = rawData.filter(el => el.get('id') === firmDefaultTemplateId);\n      data = filteredData.unshift(...userDefaultTemplate, ...firmDefaultTemplate);\n    }\n    return ({\n      open: selectOpen(state),\n      overlayProps: selectOverlayProps(state),\n      isSearchingFolderTemplates: selectIsSearchingFolderTemplates(state),\n      isApplyingTemplate: selectIsApplyingTemplateToProjectAttachment(state),\n      data,\n      defaultTemplate\n    });\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FunctionComponent<IApplyAttachmentTemplateModalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(ApplyAttachmentTemplateModal);","import {\n  takeEvery,\n  takeLatest,\n  put,\n  call,\n  takeLeading,\n  select,\n  all,\n  delay,\n} from 'redux-saga/effects';\n\nimport {\n  Project,\n  HasId,\n  ProjectTrackStatus,\n  Opportunity,\n} from '../../models';\n\nimport {\n  ProjectActionTypes,\n  CreateProjectAction,\n  ProjectFailedAction,\n  GetProjectsAction,\n  DeleteProjectAction,\n  DeleteProjectSucceededAction,\n  SelectProjectAction,\n  GetProjectsSucceededAction,\n  CreateProjectSucceededAction,\n  TrackProjectAction,\n  UntrackProjectAction,\n  GetTrackedProjectsAction,\n  GetTrackedProjectsSucceededAction,\n  CreatePTProjectAction,\n  CreatePTProjectSucceededAction,\n  SearchProjectsAction,\n  SearchProjectsSucceededAction,\n  DeleteProjectAndSearchProjectsAction,\n  SpecToolProjectListSearchProjectsAction,\n  UpdateProjectAction,\n  AddQuoteToProjectAction,\n  RemoveQuoteFromProjectAction,\n  EditProjectAction,\n  UpdateProjectAndThenRedirectAction,\n  UpdateProjectKeyContactsAndThenRedirectAction,\n  UpdateProjectAssignedToAction,\n  UpdateProjectAssignedToSucceededAction,\n  UpdateProjectOpportunityAction,\n  AddProjectPhaseChangeAction,\n  AddProjectPhaseChangeSucceededAction,\n  DeleteProjectFileAndGetProjectFilesAction,\n  GetProjectFilesAction,\n  DeleteProjectFileAction,\n  UpdateProjectFileAndGetProjectFilesAction,\n  AddProjectFileAndGetProjectFilesAction,\n  AddProjectFileAction,\n  GetProjectFilesSucceededAction,\n  GetProjectOpportunityAction,\n  EditProjectOpportunityAction,\n  UpdateProjectOpportunitySucceededAction,\n  RedirectToQuoteAction,\n  LinkSpecWithIdAction,\n  SearchProjectsFailedAction,\n  UpdateTrackListAction,\n  UpdateUntrackListAction,\n  GetMasterProjectByIdAction,\n  CreateMasterProjectAction,\n  GetMasterProjectsSucceededAction,\n  SelectMasterProjectAction,\n  CreateMasterProjectSucceededAction,\n  GetMasterProjectsAction,\n  UpdateMasterProjectAction,\n  SearchMastersAction,\n  SearchMastersSucceededAction,\n  SearchMastersFailedAction,\n  DeleteMasterAndSearchMastersAction,\n  DeleteMasterAction,\n  DuplicateMasterAction,\n  UpdateMasterProjectAndRedirectAction,\n  DuplicateProjectAction,\n  SetProjectMasterSavingAllowAction,\n  GetMasterProjectsFailedAction,\n  CheckOpportunityStatusUpToDateAction,\n  CheckOpportunityStatusUpToDateSucceededAction,\n  CheckOpportunityStatusUpToDateFetchingAction,\n  UpdateOpportunityAutomationAction,\n  UpdateOpportunityAutomationFetchingAction,\n  UpdateOpportunityAutomationSucceededAction,\n  FetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatusAction,\n  CheckOpportunityExistsAction,\n  CheckOpportunityExistsSucceededAction,\n  CheckOpportunityExistsFetchingAction,\n  UpdateQuoteStatusAndOpportunityValueAction,\n  CreateTakeoffAction,\n  SetIsTrackingOrUntrackingProjectAction,\n  SearchTemplatesAction,\n  SearchTemplatesSucceededAction,\n  SearchTemplatesFailedAction,\n  UpdateTemplateProjectAction,\n  SelectTemplateProjectAction,\n  GetTemplateProjectsSucceededAction,\n  UpdateTemplateProjectAndRedirectAction,\n  CreateTemplateProjectAction,\n  CreateTemplateProjectSucceededAction,\n  DeleteTemplateAction,\n  DeleteTemplateAndSearchTemplatesAction,\n  GetTemplateProjectsAction,\n  GetTemplateProjectByIdAction,\n  GetTemplateProjectsFailedAction,\n  CreateMasterProjectFromTemplateAction,\n  CreateMasterProjectFromTemplateSucceededAction,\n  DuplicateTemplateAction,\n  ApplyFolderTemplateToProjectAttachmentAction,\n  SetIsApplyingFolderTemplateToProjectAttachmentAction,\n  CreateProjectFromTemplateAction,\n  CreatePTProjectFromTemplate,\n  RedirectToQuoteEditAction,\n  GetProjectByIdAndSelectProjectAction,\n  GetProjectByIdAndSelectProjectSucceededAction,\n  PatchKeyContactsSucceededAction,\n  PatchKeyContactsAction,\n  SearchMastersInCopyModalAction,\n  SearchMastersInCopyModalFailedAction,\n  SearchMastersInCopyModalSucceededAction,\n  GetProjectByIdAndFetchMissingSpecsAction,\n} from './actions';\nimport {\n  push\n} from 'connected-react-router/immutable';\n\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction, taggedDelay,\n} from '../AtsModule/saga';\n\nimport {\n  fromJS, has, List, Map\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  AtsApiCallAction,\n} from '../AtsModule/actions';\nimport {\n  SelectSpecAction,\n  SelectMasterSpecAction,\n  SetModeAction,\n  SetSelectedSpecIdAction,\n  SelectTemplateSpecAction,\n  GetSpecsTakeEveryAction\n} from '../SpecModule/actions';\nimport { SpecToolProjectListIsLoadingAction, FileAttachmentIsLoadingAction, SetSnackbarOpenAction, ToggleOverlayComponentAction, SetOverlayComponentPropsAction } from '../ApplicationModule/actions';\nimport {\n  PROJECT_DETAIL_PATH,\n  MASTER_DETAIL_PATH,\n  NOT_FOUND_PATH,\n  Mode,\n  TEMPLATE_DETAIL_PATH,\n  AMPLITUDE_EVENT,\n  TIME_OUT_LIMIT, PRODUCT_CATEGORY_PATH\n} from '../../constants';\nimport { reset } from 'redux-form';\nimport {\n  FORM_NAME as NEW_MASTER_PROJECT_MODAL_FORM,\n} from '../../containers/Forms/NewMasterModalForm';\nimport { FORM_NAME as NEW_TEMPLATE_PROJECT_MODAL_FORM } from '../../containers/Forms/NewTemplateModalForm';\nimport {\n  BUILDING_SELECTION_FORM,\n} from '../BuildingModule/constants';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { makeSelectSelectedProjectFiles, makeSelectTemplate, makeSelectUpdateOpportunityAutomationOpportunities } from './selectors';\nimport { UpdateQuotePhaseAction } from '../QuoteModule/actions';\nimport {redirectToQuoteDetails, redirectToQuoteEdit, updateQuotePhase} from '../QuoteModule/saga';\nimport i18next from 'i18next';\nimport { PollPrintAction } from '../PrintModule/actions';\nimport File from '../../models/File';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectAmplitudeData, makeSelectUserFirmId, makeSelectUserId } from '../AtsModule/selectors';\nimport { makeSelectDefaultProjectVisibility, makeSelectHasFetchedDefaultProjectVisibility, makeSelectUserFirm } from '../AccountModule/selectors';\nimport { GetDefaultProjectVisibilityAction, GetUserFirmAction } from '../AccountModule/actions';\nimport { getDefaultProjectVisibility, getFirmById, getUserFirm } from '../AccountModule/saga';\nimport { APPLY_ATTACHMENT_TEMPLATE_MODAL } from '../../containers/Dashboard/WidgetLoader/AttachmentWidget/ApplyAttachmentTemplateModal';\nimport { Snackbar } from '@material-ui/core';\nimport { makeSelectProjectKeyContacts } from '../QuoteEditModule/selectors';\nimport { selectTemplateProject } from '../SpecModule/saga';\nimport { makeSelectSpecs } from '../SpecModule/selectors';\nimport store from '../../store';\nimport { constructUpdatedKeyContactsForQuoteSave } from '../QuoteModule/utils';\n\nexport const buildingAmplitudeData = (buildingClassesData: List<IMap<any>>, prefix?: string) => {\n  let _buildingAmplitudeData = Map({\n    class_commercial: false,\n    class_commercial_type_entertainmentCenter: false,\n    class_commercial_type_mall: false,\n    class_commercial_type_retail: false,\n    class_commercial_type_theater: false,\n    class_education: false,\n    class_education_type_collegeUniversity: false,\n    class_education_type_dayCare: false,\n    class_education_type_elementary: false,\n    class_education_type_highSchool: false,\n    class_heathCareFacilities: false,\n    class_heathCareFacilities_type_ambulatorySurgicalCenter: false,\n    class_heathCareFacilities_type_clinicMedicalOfficeBuilding: false,\n    class_heathCareFacilities_type_dentalClinic: false,\n    class_heathCareFacilities_type_dialysisCenter: false,\n    class_heathCareFacilities_type_hospital: false,\n    class_heathCareFacilities_type_longTermCareFacilitiesAttachedToHospital: false,\n    class_heathCareFacilities_type_longTermCareFacilitiesPrivate: false,\n    class_heathCareFacilities_type_metalHealthcare: false,\n    class_heathCareFacilities_type_seniorCitizensRetirementHome: false,\n    class_heathCareFacilities_type_veterinarianClinic: false,\n    class_hospitality: false,\n    class_hospitality_type_entryLevel: false,\n    class_hospitality_type_luxury: false,\n    class_hospitality_type_upgrade: false,\n    class_industrial: false,\n    class_industrial_type_distributionCenter: false,\n    class_industrial_type_foodProcessing: false,\n    class_industrial_type_lightIndustrial: false,\n    class_industrial_type_pharmaceuticalLaboratory: false,\n    class_industrial_type_plantsFactories: false,\n    class_industrial_type_wasteWaterTreatmentCenter: false,\n    class_lightCommercial: false,\n    class_lightCommercial_type_bank: false,\n    class_lightCommercial_type_barRestaurant: false,\n    class_lightCommercial_type_dealershipServiceCenter: false,\n    class_lightCommercial_type_gasStation: false,\n    class_lightCommercial_type_hairSalon: false,\n    class_lightCommercial_type_retail: false,\n    class_officeBuildings: false,\n    class_publicSpace: false,\n    class_publicSpace_type_fireHall: false,\n    class_publicSpace_type_library: false,\n    class_publicSpace_type_placeOfWorship: false,\n    class_publicSpace_type_townHall: false,\n    class_recreationalFacilities: false,\n    class_recreationalFacilities_type_amusementPark: false,\n    class_recreationalFacilities_type_arena: false,\n    class_recreationalFacilities_type_communityCenter: false,\n    class_recreationalFacilities_type_fitnessCenter: false,\n    class_recreationalFacilities_type_park: false,\n    class_recreationalFacilities_type_restArea: false,\n    class_recreationalFacilities_type_stadium: false,\n    class_residential: false,\n    class_residential_type_apartment: false,\n    class_residential_type_condominium: false,\n    class_residential_type_privateHome: false,\n    class_residential_type_studentResidence: false,\n    class_security: false,\n    class_security_type_military: false,\n    class_security_type_policeStation: false,\n    class_security_type_prison: false,\n    class_security_type_youthDetentionCenter: false,\n    class_transportation: false,\n    class_transportation_type_airportTerminal: false,\n    class_transportation_type_hangar: false,\n    class_transportation_type_parkingGarage: false,\n    class_transportation_type_rentalService: false,\n    class_transportation_type_trainBusDepot: false,\n    class_transportation_type_transportationCenter: false\n  });\n\n  buildingClassesData?.forEach((buildingClass) => {\n    const buildingClassId = buildingClass?.get('id');\n    switch (buildingClassId) {\n      case 1:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_commercial', true);\n        break;\n      case 2:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_education', true);\n        break;\n      case 3:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities', true);\n        break;\n      case 4:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_hospitality', true);\n        break;\n      case 5:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial', true);\n        break;\n      case 6:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial', true);\n        break;\n      case 7:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_officeBuildings', true);\n        break;\n      case 8:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_publicSpace', true);\n        break;\n      case 9:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities', true);\n        break;\n      case 10:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_residential', true);\n        break;\n      case 11:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_security', true);\n        break;\n      case 12:\n        _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation', true);\n        break;\n    }\n\n    buildingClass?.get('buildingTypes')?.forEach((type) => {\n      const typeId = type.get('id');\n      switch (typeId) {\n        case 13:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_commercial_type_entertainmentCenter', true);\n          break;\n        case 14:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_commercial_type_mall', true);\n          break;\n        case 65:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_commercial_type_retail', true);\n          break;\n        case 15:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_commercial_type_theater', true);\n          break;\n        case 16:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_education_type_collegeUniversity', true);\n          break;\n        case 17:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_education_type_dayCare', true);\n          break;\n        case 18:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_education_type_elementary', true);\n          break;\n        case 19:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_education_type_highSchool', true);\n          break;\n        case 20:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_ambulatorySurgicalCenter', true);\n          break;\n        case 21:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_clinicMedicalOfficeBuilding', true);\n          break;\n        case 22:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_dentalClinic', true);\n          break;\n        case 23:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_dialysisCenter', true);\n          break;\n        case 24:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_hospital', true);\n          break;\n        case 25:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_longTermCareFacilitiesAttachedToHospital', true);\n          break;\n        case 66:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_longTermCareFacilitiesPrivate', true);\n          break;\n        case 26:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_metalHealthcare', true);\n          break;\n        case 27:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_seniorCitizensRetirementHome', true);\n          break;\n        case 28:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_heathCareFacilities_type_veterinarianClinic', true);\n          break;\n        case 29:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_hospitality_type_entryLevel', true);\n          break;\n        case 30:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_hospitality_type_luxury', true);\n          break;\n        case 31:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_hospitality_type_upgrade', true);\n          break;\n        case 32:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_distributionCenter', true);\n          break;\n        case 33:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_foodProcessing', true);\n          break;\n        case 34:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_lightIndustrial', true);\n          break;\n        case 35:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_pharmaceuticalLaboratory', true);\n          break;\n        case 36:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_plantsFactories', true);\n          break;\n        case 37:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_industrial_type_wasteWaterTreatmentCenter', true);\n          break;\n        case 38:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_bank', true);\n          break;\n        case 39:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_barRestaurant', true);\n          break;\n        case 40:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_dealershipServiceCenter', true);\n          break;\n        case 41:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_gasStation', true);\n          break;\n        case 42:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_hairSalon', true);\n          break;\n        case 43:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_lightCommercial_type_retail', true);\n          break;\n        case 44:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_publicSpace_type_fireHall', true);\n          break;\n        case 45:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_publicSpace_type_library', true);\n          break;\n        case 46:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_publicSpace_type_placeOfWorship', true);\n          break;\n        case 47:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_publicSpace_type_townHall', true);\n          break;\n        case 48:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_amusementPark', true);\n          break;\n        case 49:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_arena', true);\n          break;\n        case 50:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_communityCenter', true);\n          break;\n        case 51:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_fitnessCenter', true);\n          break;\n        case 52:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_park', true);\n          break;\n        case 53:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_restArea', true);\n          break;\n        case 54:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_recreationalFacilities_type_stadium', true);\n          break;\n        case 55:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_residential_type_apartment', true);\n          break;\n        case 56:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_residential_type_condominium', true);\n          break;\n        case 57:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_residential_type_privateHome', true);\n          break;\n        case 58:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_residential_type_studentResidence', true);\n          break;\n        case 59:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_security_type_military', true);\n          break;\n        case 60:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_security_type_policeStation', true);\n          break;\n        case 61:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_security_type_prison', true);\n          break;\n        case 62:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_security_type_youthDetentionCenter', true);\n          break;\n        case 63:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_airportTerminal', true);\n          break;\n        case 67:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_hangar', true);\n          break;\n        case 69:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_parkingGarage', true);\n          break;\n        case 68:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_rentalService', true);\n          break;\n        case 64:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_trainBusDepot', true);\n          break;\n        case 70:\n          _buildingAmplitudeData = _buildingAmplitudeData.set('class_transportation_type_transportationCenter', true);\n          break;\n      }\n    });\n  });\n\n  if (prefix) {\n    _buildingAmplitudeData = _buildingAmplitudeData.mapKeys((key) => prefix + '_' + key);\n  }\n\n  return _buildingAmplitudeData;\n};\n\ninterface IProjectResponse {\n  payload: {\n    projectService: {\n      project: object\n    }\n  };\n}\n\nexport default function* specificationSaga() {\n  yield takeLeading(ProjectActionTypes.CREATE_PROJECT, createProject);\n  yield takeLeading(ProjectActionTypes.CREATE_PROJECT_FROM_TEMPLATE, createProjectFromTemplate);\n  yield takeLeading(ProjectActionTypes.CREATE_PT_PROJECT, createPTProject);\n  yield takeLeading(ProjectActionTypes.CREATE_PT_PROJECT_FROM_TEMPLATE, createPTProjectFromTemplate);\n  yield takeLatest(ProjectActionTypes.GET_PROJECTS, getProjects);\n  yield takeLatest(ProjectActionTypes.GET_PROJECT_BY_ID_AND_FETCH_MISSING_SPECS, getProjectByIdAndFetchMissingSpecs);\n  yield takeLatest(ProjectActionTypes.GET_PROJECT_BY_ID_AND_SELECT_PROJECT, getProjectByIdAndSelectProject);\n  yield takeLatest(ProjectActionTypes.DELETE_PROJECT, deleteProject);\n  yield takeLatest(ProjectActionTypes.DUPLICATE_PROJECT, duplicateProject);\n  yield takeLatest(ProjectActionTypes.TRACK_PROJECT, trackProject);\n  yield takeLatest(ProjectActionTypes.UPDATE_TRACK_LIST, updateTrackList);\n  yield takeLatest(ProjectActionTypes.UPDATE_UNTRACK_LIST, updateUntrackList);\n  yield takeLatest(ProjectActionTypes.UNTRACK_PROJECT, untrackProject);\n  yield takeLatest(ProjectActionTypes.GET_TRACKED_PROJECTS, getTrackedProjects);\n  yield takeLatest(ProjectActionTypes.SEARCH_PROJECTS, searchProjects);\n  yield takeLatest(ProjectActionTypes.QUICK_SEARCH_PROJECTS, quickSearchProjects);\n  yield takeLatest(ProjectActionTypes.DELETE_AND_SEARCH_PROJECTS, deleteAndSearchProjects);\n  yield takeLatest(ProjectActionTypes.SPEC_TOOL_PROJECT_LIST_SEARCH_PROJECTS, specToolProjectListSearchProjects);\n  yield takeLatest(ProjectActionTypes.EDIT_PROJECT, editProject);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT, updateProject);\n  yield takeLatest(ProjectActionTypes.EDIT_PROJECT_OPPORTUNITY, editProjectOpportunity);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT_OPPORTUNITY, updateProjectOpportunity);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT_ASSIGNED_TO, updateProjectAssignedTo);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT_AND_THEN_REDIRECT, updateProjectAndThenRedirect);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT_KEY_CONTACTS_AND_THEN_REDIRECT, updateProjectKeyContactsAndThenRedirect);\n  yield takeLatest(ProjectActionTypes.ADD_QUOTE_TO_PROJECT, addQuoteToProject);\n  yield takeLatest(ProjectActionTypes.REMOVE_QUOTE_FROM_PROJECT, removeQuoteFromProject);\n  yield takeLatest(ProjectActionTypes.ADD_PROJECT_PHASE_CHANGE, addProjectPhaseChange);\n  yield takeLatest(ProjectActionTypes.GET_PROJECT_FILES, getProjectFiles);\n  yield takeLatest(ProjectActionTypes.DELETE_PROJECT_FILE, deleteProjectFile);\n  yield takeLatest(ProjectActionTypes.DELETE_PROJECT_FILE_AND_GET_PROJECT_FILES, deleteProjectFileAndGetProjectFiles);\n  yield takeLatest(ProjectActionTypes.ADD_PROJECT_FILE, addProjectFile);\n  yield takeLatest(ProjectActionTypes.ADD_PROJECT_FILE_AND_GET_PROJECT_FILES, addProjectFileAndGetProjectFiles);\n  yield takeLatest(ProjectActionTypes.LINK_SPEC_WITH_ID, linkSpecWithId);\n  yield takeLatest(ProjectActionTypes.GET_MASTER_PROJECT_BY_ID, getMasterProject);\n  yield takeLatest(ProjectActionTypes.GET_TEMPLATE_PROJECT_BY_ID, getTemplateProject);\n  yield takeLeading(ProjectActionTypes.CREATE_MASTER_PROJECT, createMasterProject);\n  yield takeLeading(ProjectActionTypes.CREATE_MASTER_PROJECT_FROM_TEMPLATE, createMasterProjectFromTemplate);\n  yield takeLeading(ProjectActionTypes.CREATE_TEMPLATE_PROJECT, createTemplateProject);\n  yield takeLatest(ProjectActionTypes.GET_MASTER_PROJECTS, getMasterProjects);\n  yield takeLatest(ProjectActionTypes.GET_TEMPLATE_PROJECTS, getTemplateProjects);\n  yield takeLatest(ProjectActionTypes.UPDATE_MASTER_PROJECT, updateMasterProject);\n  yield takeLatest(ProjectActionTypes.UPDATE_TEMPLATE_PROJECT, updateTemplateProject);\n  yield takeLatest(ProjectActionTypes.UPDATE_MASTER_PROJECT_AND_REDIRECT, updateMasterProjectAndRedirect);\n  yield takeLatest(ProjectActionTypes.UPDATE_TEMPLATE_PROJECT_AND_REDIRECT, updateTemplateProjectAndRedirect);\n  yield takeLatest(ProjectActionTypes.SEARCH_MASTERS, getMasters);\n  yield takeLatest(ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL, getMastersInCopyModal);\n  yield takeLatest(ProjectActionTypes.DELETE_MASTER, deleteMaster);\n  yield takeLatest(ProjectActionTypes.DELETE_TEMPLATE, deleteTemplate);\n  yield takeLatest(ProjectActionTypes.DELETE_AND_SEARCH_MASTERS, deleteAndSearchMasters);\n  yield takeLatest(ProjectActionTypes.DELETE_AND_SEARCH_TEMPLATES, deleteAndSearchTemplates);\n  yield takeLatest(ProjectActionTypes.DUPLICATE_MASTER, duplicateMaster);\n  yield takeLatest(ProjectActionTypes.DUPLICATE_TEMPLATE, duplicateTemplate);\n  yield takeLatest(ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE, checkOpportunityStatusUpToDate);\n  yield takeLatest(ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION, updateOpportunityAutomation);\n  yield takeLatest(ProjectActionTypes.FETCH_THEN_UPDATE_THEN_CHECK_OPPORTUNITY_STATUS, fetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatus);\n  yield takeLatest(ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS, checkOpportunityExists);\n  yield takeLatest(ProjectActionTypes.UPDATE_QUOTE_STATUS_AND_OPPORTUNITY_VALUE, updateQuoteStatusAndOpportunityValue);\n  yield takeLatest(ProjectActionTypes.CREATE_TAKEOFF, createTakeoff);\n  yield takeLatest(ProjectActionTypes.SEARCH_TEMPLATES, searchTemplates);\n  yield takeLatest(ProjectActionTypes.UPDATE_PROJECT_FILE_AND_GET_PROJECT_FILES, updateProjectFileAndGetProjectFiles);\n  yield takeLatest(ProjectActionTypes.APPLY_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT, applyFolderTemplateToProjectAttachment);\n}\n\nfunction* getMastersInCopyModal(\n    action: SearchMastersInCopyModalAction\n) {\n  const { data, err } = yield call(searchMasters, action);\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'project', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'project', 'hasNextPage']);\n    const masters: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchMastersInCopyModalSucceededAction({\n        masters,\n        count,\n        hasNextPage,\n      }));\n    }\n  } else {\n    yield put(new SearchMastersInCopyModalFailedAction(err));\n    console.error('masters no data', {err}); // tslint:disable-line\n  }\n}\nfunction* getMasters(\n    action: SearchMastersAction\n) {\n  const { data, err } = yield call(searchMasters, action);\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'project', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'project', 'hasNextPage']);\n    const masters: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchMastersSucceededAction({\n        masters,\n        count,\n        hasNextPage,\n      }));\n    }\n  } else {\n    yield put(new SearchMastersFailedAction(err));\n    console.error('masters no data', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\nfunction* searchMasters(\n  action: SearchMastersAction | SearchMastersInCopyModalAction\n) {\n  const { filters, options } = action.payload;\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'searchMasterProjects',\n      body: {\n        filters,\n        options\n      }\n    }\n  }));\n  const end = Date.now();\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    projectName: immutableFilters.getIn(['name', 'like']) || null,\n    countryId: immutableFilters.getIn(['countryId', 'eq']) || null,\n    provinceId: immutableFilters.getIn(['provinceId', 'eq']) || null,\n    cityId: immutableFilters.getIn(['cityId', 'eq']) || null,\n    buildingClassId: immutableFilters.getIn(['buildingClassId', 'eq']) || null,\n    buildingTypeId: immutableFilters.getIn(['buildingTypeId', 'eq']) || null,\n    createdByUserId: immutableFilters.getIn(['createdBy', 'eq']) || null,\n    createdDateGte: immutableFilters.getIn(['createdDate', 'gte']) || null,\n    createdDateLte: immutableFilters.getIn(['createdDate', 'lte']) || null,\n    modifiedDateGte: immutableFilters.getIn(['modifiedDate', 'gte']) || null,\n    modifiedDateLte: immutableFilters.getIn(['modifiedDate', 'lte']) || null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.masterSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteMaster(\n  action: DeleteMasterAction,\n) {\n  const {\n    masterId,\n    masterName,\n    specIds,\n    redirectPath\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'deleteMasterProject',\n      body: {\n        projectId: masterId\n      }\n    }\n  }));\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.deleteMaster, {\n    masterId,\n    masterName,\n    specIds,\n    ...amplitudeData,\n  });\n  if (data) {\n    const immuData = fromJS(data);\n    const masters: List<IMap<HasId>> = immuData.getIn(['payload', 'project', 'project']); // only ids\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n    }\n  } else {\n    console.error('masters no data', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteTemplate(\n    action: DeleteTemplateAction,\n) {\n  const {\n    templateId,\n    templateName,\n    specIds,\n    redirectPath\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'deleteMasterTemplate',\n      body: {\n        masterTemplateId: templateId\n      }\n    }\n  }));\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.deleteMasterTemplate, {\n    templateId,\n    templateName,\n    specIds,\n    ...amplitudeData,\n  });\n  if (data) {\n    const immuData = fromJS(data);\n    const masters: List<IMap<HasId>> = immuData.getIn(['payload', 'project', 'masterTemplate']); // only ids\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n    }\n  } else {\n    console.error('templates no data', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteAndSearchMasters(\n  action: DeleteMasterAndSearchMastersAction,\n) {\n\n  const { id, filters, options, masterName, specIds } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteMaster, new DeleteMasterAction({ masterId: id, masterName, specIds }));\n\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(getMasters, new SearchMastersAction({\n      options,\n      filters\n  }));\n}\nfunction* deleteAndSearchTemplates(\n    action: DeleteTemplateAndSearchTemplatesAction,\n) {\n\n  const { id, filters, options, templateName, specIds } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteTemplate, new DeleteTemplateAction({ templateId: id, templateName, specIds }));\n\n  const {\n    data2,\n    err2,\n  }: {\n    data2: any,\n    err2: Error\n  } = yield call(searchTemplates, new SearchTemplatesAction({\n    options,\n    filters\n  }));\n}\n\nfunction* duplicateMaster(\n  action: DuplicateMasterAction,\n) {\n  const {\n    masterId\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'duplicateMasterProject',\n      params: {\n        projectId: masterId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const master: IMap<Project> = immuData.getIn(['payload', 'project', 'project'], List()).first();\n    if (master == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(push(`${MASTER_DETAIL_PATH}/${master.get('id')}`));\n    }\n  } else {\n    console.error('duplicateMaster failed', {err}); // tslint:disable-line\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* duplicateTemplate(\n    action: DuplicateTemplateAction,\n) {\n  const {\n    templateId\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'duplicateMasterTemplate',\n      params: {\n        masterTemplateId: templateId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const template: IMap<Project> = immuData.getIn(['payload', 'project', 'masterTemplate'], List()).first();\n    if (template == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(push(`${TEMPLATE_DETAIL_PATH}/${template.get('id')}`));\n    }\n  } else {\n    console.error('duplicateTemplate failed', {err}); // tslint:disable-line\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateMasterProject(\n  action: UpdateMasterProjectAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId: _projectId,\n    project,\n  } = payload;\n\n  const projectId = _projectId != null ? _projectId : project.get('id');\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'updateMasterProject',\n        body: {\n          ...project.toJS(),\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    if (projects != null) {\n      yield put(new SelectMasterSpecAction(-1));\n      yield put(reset(BUILDING_SELECTION_FORM));\n      yield put(reset(NEW_MASTER_PROJECT_MODAL_FORM));\n      yield put(new GetMasterProjectsSucceededAction(projects));\n      yield put(new SelectMasterProjectAction({projectId}));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  return {\n    data,\n    err,\n  };\n}\nfunction* updateTemplateProject(\n    action: UpdateTemplateProjectAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId: _projectId,\n    project,\n  } = payload;\n\n  const projectId = _projectId != null ? _projectId : project.get('id');\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'updateMasterTemplate',\n        body: {\n          ...project.toJS(),\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'masterTemplate']);\n    if (projects != null) {\n      yield put(new SelectTemplateSpecAction(-1));\n      yield put(reset(BUILDING_SELECTION_FORM));\n      yield put(reset(NEW_TEMPLATE_PROJECT_MODAL_FORM));\n      yield put(new GetTemplateProjectsSucceededAction(projects));\n      yield put(new SelectTemplateProjectAction({projectId}));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  return {\n    data,\n    err,\n  };\n}\nfunction* getMasterProjects(\n  action: GetMasterProjectsAction,\n) {\n  const projectId: number = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'getMasterProjectById',\n      body: {\n        projectId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const projects = immuData.getIn(['payload', 'project', 'project']);\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetMasterProjectsSucceededAction(projects));\n      yield put(new SelectMasterProjectAction({\n        projectId\n      }));\n    }\n  } else {\n    console.error('project no data', {err}); // tslint:disable-line\n  }\n}\nfunction* getTemplateProjects(\n    action: GetTemplateProjectsAction,\n) {\n  const projectId: number | undefined = action.payload;\n\n  if (projectId != null) {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'project',\n        endpoint: 'getMasterTemplateById',\n        body: {\n          masterTemplateId: projectId,\n        }\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const projects = immuData.getIn(['payload', 'project', 'masterTemplate']);\n      if (projects == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetTemplateProjectsSucceededAction(projects));\n        yield put(new SelectTemplateProjectAction({\n          projectId\n        }));\n      }\n    } else {\n      console.error('project no data', {err}); // tslint:disable-line\n    }\n  } else {\n\n    // 2) take the first specId, get the specId info from spec endpoint\n    // do logic for Selecting first spec\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'project',\n        endpoint: 'getMasterTemplates',\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const projects: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'masterTemplates']);\n      yield put(new GetTemplateProjectsSucceededAction(projects));\n    } else {\n      console.error('projects no data', {err}); // tslint:disable-line\n    }\n  }\n}\n\nfunction* createMasterProject(\n  projectAction: CreateMasterProjectAction\n) {\n  const {\n    payload,\n  } = projectAction;\n\n  const {\n    onSuccess,\n    onFailed,\n    master\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createMasterProjectWithBlankSpec',\n      body: master,\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    const project = projects.get(0);\n    const projectId = project.get('id');\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess(projects);\n      yield put(new CreateMasterProjectSucceededAction());\n\n      // amplitude tracking on template use for master creation\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      amplitude.logEvent(AMPLITUDE_EVENT.masterTemplateUsage, {\n        sourceTemplateId: -1,\n        wholeTemplateUsed: false,\n        templateUsed: false,\n        masterId: projectId,\n        ...buildingAmplitudeData(project.getIn(['building', 'buildingClasses'])).toJS(),\n        ...amplitudeData\n      });\n    }\n  } else {\n    onFailed();\n  }\n}\nfunction* createMasterProjectFromTemplate(action: CreateMasterProjectFromTemplateAction) {\n  const {\n    payload\n  } = action;\n\n  const {\n    masterTemplateId,\n    master,\n    copyInstructions,\n    allSelected,\n    onSuccess,\n    onFailed,\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'copyMasterTemplateToMaster',\n      params: {\n        masterTemplateId\n      },\n      body: {\n        master,\n        copyInstructions\n      },\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const masters: List<IMap<Partial<Project>>> = response.getIn(['payload', 'project', 'master']);\n    const _master = masters.get(0);\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess(masters);\n      yield put(new CreateMasterProjectFromTemplateSucceededAction());\n      // amplitude tracking on template use for master creation\n      const masterId = _master.get('id');\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      const selectedTemplate = yield select(makeSelectTemplate({ projectId: masterTemplateId }));\n      amplitude.logEvent(AMPLITUDE_EVENT.masterTemplateUsage, {\n        sourceTemplateId: masterTemplateId,\n        wholeTemplateUsed: allSelected,\n        templateUsed: true,\n        masterId,\n        ...buildingAmplitudeData(selectedTemplate.getIn(['building', 'buildingClasses']), 'sourceTemplate').toJS(),\n        ...buildingAmplitudeData(_master.getIn(['building', 'buildingClasses'])).toJS(),\n        ...amplitudeData\n      });\n    }\n  } else {\n    onFailed();\n    console.error('createMasterProjectFromTemplate failed', {err}); // tslint:disable-line\n  }\n}\nfunction* createTemplateProject(\n    projectAction: CreateTemplateProjectAction\n) {\n  const {\n    payload\n  } = projectAction;\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createMasterTemplateWithBlankSpec',\n      body: payload.toJS(),\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'masterTemplate']);\n    const project = projects.get(0);\n    const projectId = project.get('id');\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const projectSpecs = project.get('specs');\n      const firstSpec = projectSpecs.get(0);\n      const specId = firstSpec != null ? firstSpec.get('id') : undefined;\n      yield put(new GetTemplateProjectsSucceededAction(projects));\n      yield call(selectTemplateProject, new SelectTemplateProjectAction({projectId, specId}));\n      yield put(new SetModeAction(Mode.masterTemplate));\n      yield put(new CreateTemplateProjectSucceededAction());\n      yield put(push(PRODUCT_CATEGORY_PATH));\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n    yield put(new SetProjectMasterSavingAllowAction({ allow: true }));\n  }\n}\n\nfunction* getMasterProject(\n  action: GetMasterProjectByIdAction\n) {\n  const {\n    payload: {\n      id: projectId,\n      redirectIfNotfound = false,\n    }\n  } = action;\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'getMasterProjectById',\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const masterProject: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    if (masterProject != null) {\n      yield put(new GetMasterProjectsSucceededAction(masterProject));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('Error', err); // tslint:disable-line\n    const immutableErr = fromJS(err);\n    const code = immutableErr.getIn(['payload', 'error', 'code']);\n\n    if (redirectIfNotfound && code === 404) {\n      yield put(push(NOT_FOUND_PATH));\n    }\n    yield put(new GetMasterProjectsFailedAction());\n  }\n  return {\n    data,\n    err,\n  };\n}\nfunction* getTemplateProject(\n    action: GetTemplateProjectByIdAction\n) {\n  const {\n    payload: {\n      id: projectId,\n      redirectIfNotfound = false,\n    }\n  } = action;\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'getMasterTemplateById',\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const template: List<IMap<Project>> = response.getIn(['payload', 'project', 'masterTemplate']);\n    if (template != null) {\n      yield put(new GetTemplateProjectsSucceededAction(template));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('Error', err); // tslint:disable-line\n    const immutableErr = fromJS(err);\n    const code = immutableErr.getIn(['payload', 'error', 'code']);\n\n    if (redirectIfNotfound && code === 404) {\n      yield put(push(NOT_FOUND_PATH));\n    }\n    yield put(new GetTemplateProjectsFailedAction());\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteProjectFileAndGetProjectFiles(\n  action: DeleteProjectFileAndGetProjectFilesAction,\n) {\n\n  const { linkedFile, projectId } = action.payload;\n  yield put(new FileAttachmentIsLoadingAction(true));\n  yield call(deleteProjectFile, new DeleteProjectFileAction({ linkedFile, projectId }));\n  yield call(getProjectFiles, new GetProjectFilesAction(projectId));\n}\n\nfunction* updateProjectFileAndGetProjectFiles(\n  action: UpdateProjectFileAndGetProjectFilesAction,\n) {\n  const { projectId, linkedFileId, updatedFile} = action.payload;\n  yield put(new FileAttachmentIsLoadingAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'updateProjectFile',\n      params: {\n        projectId,\n        linkedFileId\n      },\n      body: updatedFile.toJS()\n    }\n  }));\n  if (!data) {\n    console.error('error updating file from project', { err }); // tslint:disable-line\n  } else {\n    yield call(getProjectFiles, new GetProjectFilesAction(projectId));\n  }\n}\n\nfunction* addProjectFileAndGetProjectFiles(\n  action: AddProjectFileAndGetProjectFilesAction,\n) {\n\n  const { projectId, parentId, fileIds, folderName, permission, labels, fileTags } = action.payload;\n  yield put(new FileAttachmentIsLoadingAction(true));\n  yield call(addProjectFile, new AddProjectFileAction({ projectId, parentId, fileIds, folderName, permission, labels, fileTags }));\n  yield call(getProjectFiles, new GetProjectFilesAction(projectId));\n}\n\nfunction* addProjectFile(\n  action: AddProjectFileAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    parentId = null,\n    fileIds = [],\n    folderName = null,\n    permission,\n    labels = [],\n    fileTags = [],\n  } = payload;\n\n  const fileObjs = folderName\n  ? [{\n      parentId,\n      folderName,\n      permission,\n      labels: [...labels],\n    }]\n  : fileIds.map((id, index) => ({\n      parentId,\n      fileId: id,\n      permission,\n      labels: [...labels],\n      tag: fileTags[index] || null,\n    }));\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'addProjectFile',\n        body: {\n          files: {\n            main: [\n              ...fileObjs,\n            ]\n          }\n        }\n      }\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const filesOrFolderUploaded = immutableData.getIn(['payload', 'project', 'file', 'main']);\n    const numberOfFilesOrFolderUploaded = filesOrFolderUploaded.size;\n\n    if (numberOfFilesOrFolderUploaded) {\n      const firmId = yield select(makeSelectUserFirmId());\n      yield call(getUserFirm, new GetUserFirmAction({firmId}));\n      const userFirm = yield select(makeSelectUserFirm());\n      const firmName = userFirm.get('companyName') || userFirm.get('companyAltName');\n      const projectFiles = yield select(makeSelectSelectedProjectFiles());\n      const currentFirmFolders = projectFiles?.filter(file => has(file, 'folder') && file.getIn(['createdBy', 'id']) === firmId);\n      const currentFirmFiles = projectFiles?.filter(file => has(file, 'file') && file.getIn(['createdBy', 'id']) === firmId);\n      const currentFirmFilesSize = currentFirmFiles && currentFirmFiles.reduce((acc, file) => {\n        return acc + file.getIn(['file', 'size']);\n      }, 0) || 0;\n      const sumOfUploadedFilesSize = folderName ? null : filesOrFolderUploaded.reduce((acc, file) => {\n        return acc + file.getIn(['file', 'size']);\n      }, 0);\n      const totalFirmFilesSizeInMB = ((currentFirmFilesSize + sumOfUploadedFilesSize) / 1048576).toFixed(2);\n      // amplitude tracking\n      const trackedData = folderName\n        ? {\n            firmName,\n            firmId,\n            folderName: filesOrFolderUploaded.getIn([0, 'folder', 'name']),\n            folderId: filesOrFolderUploaded.getIn([0, 'id']),\n            totalFolders: (currentFirmFolders?.size || 0) + 1\n          }\n        : {\n            firmName,\n            firmId,\n            totalFilesSize: parseFloat(totalFirmFilesSizeInMB)\n          };\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      const eventName = folderName ? AMPLITUDE_EVENT.folderCreation : AMPLITUDE_EVENT.fileAttachment;\n      amplitude.logEvent(eventName, {\n        ...trackedData,\n        ...amplitudeData\n      });\n    }\n  } else {\n    console.error('error adding file from project', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteProjectFile(\n  action: DeleteProjectFileAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    linkedFile,\n    projectId\n  } = payload;\n  const linkedFileId = linkedFile.get('id');\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'deleteProjectFile',\n      params: {\n        projectId,\n        linkedFileId\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const filesOrFolderDeleted = immutableData.getIn(['payload', 'project', 'file', 0]);\n    if (filesOrFolderDeleted) {\n      const firmId = yield select(makeSelectUserFirmId());\n      yield call(getUserFirm, new GetUserFirmAction({firmId}));\n      const userFirm = yield select(makeSelectUserFirm());\n      const firmName = userFirm.get('companyName') || userFirm.get('companyAltName');\n      const folderName = linkedFile.getIn(['folder', 'name']);\n      const fileName = linkedFile.getIn(['file', 'name']);\n      // amplitude tracking\n      const trackedData = {\n        firmName,\n        firmId,\n        type: folderName ? 'folder' : 'file',\n        attachmentName: folderName ? folderName : fileName,\n        id: linkedFileId\n      };\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      amplitude.logEvent(AMPLITUDE_EVENT.attachmentDelete, {\n        ...trackedData,\n        ...amplitudeData\n      });\n    }\n  } else {\n    console.error('error adding file from project', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getProjectFiles(\n  action: GetProjectFilesAction\n) {\n  const {\n    payload: projectId\n  } = action;\n\n  yield put(new FileAttachmentIsLoadingAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'getProjectFiles',\n      params: {\n        projectId\n      }\n    }\n  }));\n\n  yield put(new FileAttachmentIsLoadingAction(false));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const selectedProjectFiles: List<IMap<File>> = immutableData.getIn(['payload', 'project', 'file', 'main']);\n    yield put(new GetProjectFilesSucceededAction(selectedProjectFiles));\n  }\n}\n\nfunction* addProjectPhaseChange(\n  action: AddProjectPhaseChangeAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    phase,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'addProjectPhaseChange',\n        body: {\n          ...phase.toJS()\n        },\n        params: {\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const updatedPhase = immutableData.getIn(['payload', 'project', 'projectPhase']);\n    if (updatedPhase == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new AddProjectPhaseChangeSucceededAction(updatedPhase));\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n}\n\nfunction* editProject(\n  action: EditProjectAction\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    projectId: _projectId,\n    project,\n  } = payload;\n\n  const projectId = _projectId != null ? _projectId : project.get('id');\n  yield put(\n    new GetProjectsSucceededAction(\n      List<IMap<Project>>(\n        [\n          project.set('id', projectId)\n        ]\n      )\n    )\n  );\n  yield call(updateProject, action);\n}\n\nfunction* updateProjectKeyContactsAndThenRedirect(\n  action: UpdateProjectKeyContactsAndThenRedirectAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    projectKeyContacts,\n    keyContacts,\n    redirect,\n    onSuccess = () => null,\n    onFailed = () => null,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: object,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'patchKeyContacts',\n        body: {\n          keyContacts\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const keyContactsRes = response.getIn(['payload', 'project', 'keyContacts']);\n    if (keyContactsRes !== null) {\n      yield put(new PatchKeyContactsSucceededAction({ projectId, keyContacts: keyContactsRes }));\n      yield put(new SetSnackbarOpenAction({\n        message: `Bid information updated successfully.`,\n        severity: 'success',\n      }));\n      onSuccess();\n\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      // log amplitude event for customer awarded/lost\n      keyContactsRes.forEach((keyContact) => {\n        const targetedKeyContact = projectKeyContacts.find((projectKeyContact) => projectKeyContact.get('projectContactId') === keyContact.get('projectContactId'));\n        if (!targetedKeyContact || targetedKeyContact.get('bidStatus') !== keyContact.get('bidStatus')) {\n          switch (keyContact.get('bidStatus')) {\n            case 'Awarded': {\n              amplitude.logEvent(AMPLITUDE_EVENT.customerAwarded, {\n                customerId: keyContact.getIn(['contact', 'id']),\n                quoteId: keyContact.get('quoteId'),\n                projectId,\n                ...amplitudeData\n              });\n            }\n              break;\n            case 'Lost': {\n              amplitude.logEvent(AMPLITUDE_EVENT.customerLost, {\n                customerId: keyContact.getIn(['contact', 'id']),\n                quoteId: keyContact.get('quoteId'),\n                projectId,\n                ...amplitudeData\n              });\n            }\n              break;\n            default: break;\n          }\n        }\n      });\n\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: `Error - bid information failed to be updated, please try again later.`,\n        severity: 'error',\n      }));\n      onFailed();\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n    yield put(new SetSnackbarOpenAction({\n      message: `Error - bid information failed to be updated, please try again later.`,\n      severity: 'error',\n    }));\n    onFailed();\n  }\n}\n\nfunction* updateProject(\n  action: UpdateProjectAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId: _projectId,\n    project,\n  } = payload;\n\n  const projectId = _projectId != null ? _projectId : project.get('id');\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'updateProject',\n        body: {\n          ...project.toJS(),\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    if (projects != null) {\n      yield put(new SelectSpecAction(-1));\n      yield put(new CreatePTProjectSucceededAction());\n      yield put(new GetProjectsSucceededAction(projects));\n      yield put(new SelectProjectAction({projectId}));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateProjectAndThenRedirect(\n  action: UpdateProjectAndThenRedirectAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    redirect,\n  } = payload;\n\n  const {\n    data,\n    err,\n  } = yield call(updateProject, action);\n  if (err == null) {\n    yield put(push(redirect));\n  } else {\n    yield put(new SetProjectMasterSavingAllowAction({ allow: true }));\n  }\n}\n\nfunction* updateMasterProjectAndRedirect(\n  action: UpdateMasterProjectAndRedirectAction\n) {\n  const {\n    projectId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  } = yield call(updateMasterProject, action);\n  if (err == null) {\n    yield put(push(`${MASTER_DETAIL_PATH}/${projectId}`));\n  } else {\n    yield put(new SetProjectMasterSavingAllowAction({ allow: true }));\n  }\n}\nfunction* updateTemplateProjectAndRedirect(\n    action: UpdateTemplateProjectAndRedirectAction\n) {\n  const {\n    projectId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  } = yield call(updateTemplateProject, action);\n  if (err == null) {\n    yield put(push(`${TEMPLATE_DETAIL_PATH}/${projectId}`));\n  } else {\n    yield put(new SetProjectMasterSavingAllowAction({ allow: true }));\n  }\n}\n\nfunction* editProjectOpportunity(\n  action: EditProjectOpportunityAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId,\n    opportunity,\n  } = payload;\n\n  const updatedOpportunities = List<IMap<Opportunity>>([opportunity]);\n\n  yield put(new UpdateProjectOpportunitySucceededAction({\n    ...payload,\n    opportunities: updatedOpportunities,\n  }));\n  yield call(updateProjectOpportunity, action);\n}\n\nfunction* getProjectOpportunity(\n  action: GetProjectOpportunityAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId,\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'getProjectOpportunities',\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const opportunityList: List<IMap<Opportunity>> = response.getIn(['payload', 'project', 'opportunity']);\n    if (opportunityList != null) {\n      yield put(new UpdateProjectOpportunitySucceededAction({\n        ...payload,\n        opportunities: opportunityList,\n      }));\n    } else {\n      console.error('getProjectOpportunity response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    }\n  } else {\n    console.error('getProjectOpportunity response error', { // tslint:disable-line\n      data,\n      err,\n    });\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateProjectOpportunity(\n  action: UpdateProjectOpportunityAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    projectId,\n    opportunity,\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'updateProjectOpportunity',\n        body: {\n          ...opportunity.toJS(),\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const opportunityList: List<IMap<Opportunity>> = response.getIn(['payload', 'project', 'opportunity']);\n    if (opportunityList != null) {\n      yield put(new UpdateProjectOpportunitySucceededAction({\n        ...payload,\n        opportunities: opportunityList,\n      }));\n    } else {\n      console.error('updateProjectOpportunity response error', { // tslint:disable-line\n        data,\n        err,\n      });\n      yield call(getProjectOpportunity, action);\n    }\n  } else {\n    console.error('updateProjectOpportunity error', { // tslint:disable-line\n      data,\n      err,\n    });\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateProjectAssignedTo(\n  action: UpdateProjectAssignedToAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    projectId,\n    assignedTo\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      projectId,\n      {\n        service: 'project',\n        endpoint: 'updateProject',\n        body: {\n          assignedTo\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const updatedAssignedTo = response.getIn(['payload', 'project', 'project', 0, 'assignedTo']);\n    yield put(new UpdateProjectAssignedToSucceededAction({\n      projectId,\n      assignedTo: updatedAssignedTo ? updatedAssignedTo.toJS() : assignedTo,\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectSnackbar.assignedToUpdateSuccessfulMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    console.error('updateProjectAssignedTo failed', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectSnackbar.assignedToUpdateFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n  return { data, err };\n}\n\nfunction* getTrackedProjects(\n  action: GetTrackedProjectsAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    typeId,\n    type\n  } = payload;\n\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'project',\n        endpoint: 'getTrackedProjects',\n\n\n        body: {\n          projectId,\n          typeId,\n          type\n        },\n        params: {\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const trackedProjectStatuses: List<IMap<ProjectTrackStatus>> = immutableData.getIn(['payload', 'project', 'project']);\n    if (trackedProjectStatuses == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetTrackedProjectsSucceededAction(trackedProjectStatuses));\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n}\n\nfunction* updateTrackList (\n  action: UpdateTrackListAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    typeId,\n    type\n  } = payload;\n  yield call(trackProject, new TrackProjectAction({type, typeId, projectId}));\n  yield call(getProjects, new GetProjectsAction({projectId}));\n}\n\nfunction* updateUntrackList (\n  action: UpdateUntrackListAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    typeId,\n    type\n  } = payload;\n  yield call(untrackProject, new UntrackProjectAction({type, typeId, projectId}));\n  yield call(getProjects, new GetProjectsAction({projectId}));\n}\n\nfunction* untrackProject(\n  action: UntrackProjectAction\n) {\n  yield put(new SetIsTrackingOrUntrackingProjectAction(true));\n\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    typeId,\n    type\n  } = payload;\n\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'project',\n        endpoint: 'untrackProject',\n        body: {\n          projectId,\n          typeId,\n          type\n        },\n        params: {\n        }\n      }\n    ]\n  }));\n  if (data) {\n    yield call(getTrackedProjects, new GetTrackedProjectsAction({type, typeId, projectId}));\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  yield put(new SetIsTrackingOrUntrackingProjectAction(false));\n}\n\nfunction* trackProject(\n  action: TrackProjectAction\n) {\n  yield put(new SetIsTrackingOrUntrackingProjectAction(true));\n\n  const {\n    payload\n  } = action;\n\n  const {\n    projectId,\n    typeId,\n    type\n  } = payload;\n\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'project',\n        endpoint: 'trackProject',\n        body: {\n          projectId,\n          typeId,\n          type\n        },\n        params: {\n        }\n      }\n    ]\n  }));\n  if (data) {\n    yield call(getTrackedProjects, new GetTrackedProjectsAction({type, typeId, projectId}));\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  yield put(new SetIsTrackingOrUntrackingProjectAction(false));\n}\n\nfunction* createProject(\n  projectAction: CreateProjectAction\n) {\n  const {\n    payload,\n  } = projectAction;\n  const {\n    project,\n    onSuccess,\n    onFailed,\n  } = payload;\n  const quoteId = project.get('quoteId');\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createProjectWithBlankSpec',\n      body: project.toJS(),\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess(projects, quoteId);\n    }\n  } else {\n    onFailed(err);\n  }\n}\nfunction* createProjectFromTemplate(action: CreateProjectFromTemplateAction) {\n  const {\n    payload\n  } = action;\n\n  const {\n    project,\n    copyInstructions,\n    onSuccess,\n    onFailed\n  } = payload;\n  const quoteId = project.get('quoteId');\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createProjectAndCopySpecsToNewProject',\n      body: {\n        project: project.toJS(),\n        copyInstructions\n      },\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    let _project: IMap<Project> = response.getIn(['payload', 'project', 'project']); // this project doesn't have specs\n    const _specs = response.getIn(['payload', 'project', 'specs']);\n    _project = _project.set('specs', _specs); // add specs to project\n    if (_project == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess(_project, quoteId);\n    }\n  } else {\n    onFailed(err);\n  }\n}\nexport function* createPTProject(\n  projectAction: CreatePTProjectAction\n) {\n  const {\n    project,\n    setTrackProject = false,\n    exitQuoteAfterQuoteSave,\n    onSuccess\n  } = projectAction.payload;\n\n  const hasFetchedDefaultProjectVisibility = yield select(makeSelectHasFetchedDefaultProjectVisibility());\n  if (!hasFetchedDefaultProjectVisibility) {\n    const {err: visibilityErr} = yield call(getDefaultProjectVisibility, new GetDefaultProjectVisibilityAction());\n    if (visibilityErr) {\n      yield put(new ProjectFailedAction({err: visibilityErr}));\n      return { err: visibilityErr };\n    }\n  }\n  const projectVisibility = yield select(makeSelectDefaultProjectVisibility());\n\n  const quoteId = project.get('quoteId');\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createProject',\n      body: project.set('visibility', projectVisibility).toJS(),\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    const newProject = projects.get(0);\n    const projectId = newProject.get('id');\n\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (quoteId) {\n        yield call(addQuoteToProject, new AddQuoteToProjectAction({ projectId, quoteId, exitAfterSave: exitQuoteAfterQuoteSave }));\n      } else {\n        if (setTrackProject) {\n          const typeId = yield select(makeSelectUserId());\n          yield call(trackProject, new TrackProjectAction({ type: 'user', typeId, projectId }));\n        }\n        yield put(new SelectProjectAction({projectId: projects.getIn([0, 'id'])}));\n        yield put(new SelectSpecAction(-1));\n        yield put(new CreatePTProjectSucceededAction());\n        yield put(new GetProjectsSucceededAction(projects));\n      }\n      if (onSuccess) {\n        onSuccess(newProject);\n      }\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n  }\n  return {\n    data,\n    err\n  };\n}\n\nfunction* createPTProjectFromTemplate(action: CreatePTProjectFromTemplate) {\n  const {\n    payload\n  } = action;\n\n  const {\n    project,\n    copyInstructions,\n  } = payload;\n  const quoteId = project.get('quoteId');\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createProjectAndCopySpecsToNewProject',\n      body: {\n        project: project.toJS(),\n        copyInstructions\n      },\n    },\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const _project: IMap<Project> = response.getIn(['payload', 'project', 'project']);\n    const projectId = _project.get('id');\n\n    if (_project == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (quoteId) {\n        yield call(addQuoteToProject, new AddQuoteToProjectAction({ projectId, quoteId }));\n      } else {\n        yield put(new SelectProjectAction({projectId}));\n        yield put(new SelectSpecAction(-1));\n        yield put(new CreatePTProjectSucceededAction());\n        yield put(new GetProjectsSucceededAction(fromJS([_project])));\n      }\n    }\n  } else {\n    yield put(new ProjectFailedAction({err}));\n    yield put(new SetProjectMasterSavingAllowAction({ allow: true }));\n  }\n  return {\n    data,\n    err\n  };\n}\n\nexport function* getProjects(\n  action: GetProjectsAction,\n) {\n  const {\n    projectId,\n    withoutLinkedQuotes,\n    initialSelectedSpecId,\n    onFailed,\n  } = action.payload;\n\n  if (projectId != null) {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'project',\n        endpoint: 'getProjectById',\n        body: {\n          projectId,\n        }\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const projects = immuData.getIn(['payload', 'project', 'project']);\n      if (projects == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetProjectsSucceededAction(projects));\n        yield put(new SelectProjectAction({\n          projectId,\n          specId: initialSelectedSpecId,\n          withoutLinkedQuotes,\n        }));\n      }\n    } else {\n      console.error('project no data', {err}); // tslint:disable-line\n      if ((err as any)?.payload?.error?.code === 404) {\n        yield put(new SetSnackbarOpenAction({\n          message: `Error - this project does not exist or have been deleted.`,\n          severity: 'error',\n        }));\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: `Error - cannot fetch project, please try again later.`,\n          severity: 'error',\n        }));\n      }\n      onFailed?.();\n    }\n  } else {\n\n    // 2) take the first specId, get the specId info from spec endpoint\n    // do logic for Selecting first spec\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'project',\n        endpoint: 'getProjects',\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const projects: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n      yield put(new GetProjectsSucceededAction(projects));\n    } else {\n      console.error('projects no data', {err}); // tslint:disable-line\n      onFailed?.();\n    }\n  }\n}\n\nexport function* getProjectByIdAndFetchMissingSpecs(\n  action: GetProjectByIdAndFetchMissingSpecsAction,\n) {\n  const {\n    projectId,\n  } = action.payload;\n\n  if (projectId == null) {\n    console.error('projectId is required'); // tslint:disable-line\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'getProjectById',\n      body: {\n        projectId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const projects = immuData.getIn(['payload', 'project', 'project']);\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProjectsSucceededAction(projects));\n\n      const currentSpecsMap = yield select(makeSelectSpecs());\n\n      const projectSpecs = projects.getIn([0, 'specs']) ?? List();\n      const missingProjectSpecs = projectSpecs.filter((projectSpecIdObject: IMap<HasId>) => !currentSpecsMap.has(projectSpecIdObject.get('id')));\n\n      const getSpecActions = missingProjectSpecs.map((projectSpecIdObject: IMap<HasId>) => {\n        const projectSpecId = projectSpecIdObject.get('id');\n        return put(new GetSpecsTakeEveryAction({\n          specId: Number(projectSpecId),\n        }));\n      });\n      if (getSpecActions.size) {\n        yield all(getSpecActions.valueSeq().toArray());\n      }\n    }\n  } else {\n    console.error('getProjectByIdAndFetchMissingSpecs error', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getProjectByIdAndSelectProject(\n  action: GetProjectByIdAndSelectProjectAction,\n) {\n  const {\n    projectId,\n  } = action.payload;\n\n  if (projectId == null) {\n    console.error('projectId is required'); // tslint:disable-line\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'getProjectById',\n      body: {\n        projectId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const projects = immuData.getIn(['payload', 'project', 'project']);\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProjectByIdAndSelectProjectSucceededAction(projects));\n    }\n  } else {\n    console.error('getProjectByIdAndSelectProject error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* deleteProject(\n  action: DeleteProjectAction,\n) {\n  const {\n    projectId,\n    projectName,\n    specIds,\n    redirectPath\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'deleteProject',\n      body: {\n        projectId,\n      }\n    }\n  }));\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.deleteProject, {\n    projectId,\n    projectName,\n    specIds,\n    ...amplitudeData,\n  });\n  if (data) {\n    const immuData = fromJS(data);\n    const projects: List<IMap<HasId>> = immuData.getIn(['payload', 'project', 'project']); // only ids\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new DeleteProjectSucceededAction({ projects }));\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n    }\n  } else {\n    console.error('project no data', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* duplicateProject(\n  action: DuplicateProjectAction,\n) {\n  const {\n    projectId\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'duplicateProject',\n      params: {\n        projectId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const project: IMap<Project> = immuData.getIn(['payload', 'project', 'project'], List()).first();\n    if (project == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(push(`${PROJECT_DETAIL_PATH}/${project.get('id')}`));\n    }\n  } else {\n    console.error('duplicateProject failed', {err}); // tslint:disable-line\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* quickSearchProjects(\n  action: SearchProjectsAction,\n) {\n  yield call(taggedDelay, 500);\n  yield call(searchProjects, action);\n}\n\nfunction* searchProjects(\n  action: SearchProjectsAction,\n) {\n  const { filters, options, onSuccess } = action.payload;\n  yield put(new SpecToolProjectListIsLoadingAction(true));\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'searchProjects',\n      body: {\n        filters,\n        options\n      }\n    }\n  }));\n  const end = Date.now();\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'project', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'project', 'hasNextPage']);\n    const projects: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchProjectsSucceededAction({\n        projects,\n        count,\n        hasNextPage\n      }));\n      yield put(new SpecToolProjectListIsLoadingAction(false));\n      onSuccess?.(projects.toJS());\n    }\n  } else {\n    yield put(new SearchProjectsFailedAction(err));\n    yield put(new SpecToolProjectListIsLoadingAction(false));\n    console.error('projects no data', {err}); // tslint:disable-line\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const searchTerm = immutableFilters.getIn(['or', 0, 'name', 'like']) || immutableFilters.getIn(['or', 0, 'internalNo', 'like']);\n  const filterData = {\n    projectName: searchTerm || null,\n    internalNo: searchTerm || null,\n    oppLabelId: immutableFilters.getIn(['oppLabelId', 'eq']) || null,\n    oppStatusId: immutableFilters.getIn(['oppStatusId', 'eq']) || null,\n    valuationGte: immutableFilters.getIn(['valuation', 'gte']) || null,\n    valuationLte: immutableFilters.getIn(['valuation', 'lte']) || null,\n    oppValueGte: immutableFilters.getIn(['oppValue', 'gte']) || null,\n    oppValueLte: immutableFilters.getIn(['oppValue', 'lte']) || null,\n    sourceId: immutableFilters.getIn(['sourceId', 'eq']) || null,\n    sourceName: immutableFilters.getIn(['sourceName', 'eq']) || null,\n    phaseName: immutableFilters.getIn(['phaseName', 'eq']) || null,\n    countryId: immutableFilters.getIn(['countryId', 'eq']) || null,\n    provinceId: immutableFilters.getIn(['provinceId', 'eq']) || null,\n    cityId: immutableFilters.getIn(['cityId', 'eq']) || null,\n    buildingClassId: immutableFilters.getIn(['buildingClassId', 'eq']) || null,\n    buildingTypeId: immutableFilters.getIn(['buildingTypeId', 'eq']) || null,\n    trackingOfficeId: immutableFilters.getIn(['trackingOfficeId', 'eq']) || null,\n    bidDateGte: immutableFilters.getIn(['bidDate', 'gte']) || null,\n    bidDateLte: immutableFilters.getIn(['bidDate', 'lte']) || null,\n    createdByUserIds: immutableFilters.getIn(['createdBy', 'in'])?.toJS() || null,\n    createdByUserId: immutableFilters.getIn(['createdBy', 'eq']) || null,\n    createdByOfficeIds: immutableFilters.getIn(['createdByOfficeId', 'in'])?.toJS() || null,\n    createdByOfficeId: immutableFilters.getIn(['createdByOfficeId', 'eq']) || null,\n    createdDateGte: immutableFilters.getIn(['createdDate', 'gte']) || null,\n    createdDateLte: immutableFilters.getIn(['createdDate', 'lte']) || null,\n    modifiedDateGte: immutableFilters.getIn(['modifiedDate', 'gte']) || null,\n    modifiedDateLte: immutableFilters.getIn(['modifiedDate', 'lte']) || null,\n    contactIds: immutableFilters.getIn(['contact.id', 'in'])?.toJS() || null,\n    regionId: immutableFilters.getIn(['regionId', 'in', 0]) || null,\n    isUserTracked: immutableFilters.getIn(['isUserTracked', 'eq']) !== undefined ? immutableFilters.getIn(['isUserTracked', 'eq']) : null,\n    hasQuote: immutableFilters.getIn(['quoteCount', 'gte']) ? Boolean(immutableFilters.getIn(['quoteCount', 'gte'])) : null,\n    hasAnySpec: immutableFilters.getIn(['specCount', 'gte'])  ? Boolean(immutableFilters.getIn(['specCount', 'gte'])) : null,\n    hasAiSpec: immutableFilters.getIn(['isAi', 'eq']) !== undefined ? immutableFilters.getIn(['isAi', 'eq']) : null,\n    isCollaborated: immutableFilters.getIn(['isCollaborated', 'eq']) !== undefined ? immutableFilters.getIn(['isCollaborated', 'eq']) : null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.projectSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteAndSearchProjects(\n  action: DeleteProjectAndSearchProjectsAction,\n) {\n\n  const { id, projectName, specIds, filters, options } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteProject, new DeleteProjectAction({ projectId: id, specIds, projectName }));\n\n  const {\n    data2,\n    err2,\n  }: {\n    data2: any,\n    err2: Error\n  } = yield call(searchProjects, new SearchProjectsAction({\n      options,\n      filters\n  }));\n}\n\nexport function* addQuoteToProject(\n  action: AddQuoteToProjectAction,\n) {\n\n  const { projectId, quoteId, exitAfterSave = true, keyContacts, projectKeyContacts, onSuccess } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'addQuoteToProject',\n      params: {\n        projectId,\n        quoteId,\n      }\n    }\n  }));\n  if (data) {\n    if (keyContacts && keyContacts.size > 0) {\n      yield call(patchKeyContacts, new PatchKeyContactsAction({\n        quoteId,\n        projectId,\n        projectKeyContacts,\n        keyContacts: constructUpdatedKeyContactsForQuoteSave({ keyContacts, quoteId }),\n        exitAfterSave,\n        onSuccess\n      }));\n    } else {\n      if (onSuccess) {\n        onSuccess();\n      } else {\n        if (exitAfterSave) {\n          yield call(redirectToQuoteDetails, new RedirectToQuoteAction({ quoteId, withQuoteReload: true }));\n        } else {\n          yield call(redirectToQuoteEdit, new RedirectToQuoteEditAction({ quoteId, withQuoteReload: true }));\n        }\n      }\n    }\n  }\n  return {\n    data,\n    err\n  };\n}\n\nexport function* removeQuoteFromProject(\n  action: RemoveQuoteFromProjectAction,\n) {\n  const { projectId, quoteId, exitAfterSave, withResetSelectedProject } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'removeQuoteFromProject',\n      params: {\n        projectId,\n        quoteId,\n      }\n    }\n  }));\n  if (data) {\n    if (exitAfterSave) {\n      yield call(redirectToQuoteDetails, new RedirectToQuoteAction({quoteId, withQuoteReload: true}));\n    }\n    if (withResetSelectedProject) {\n      yield put(new SelectProjectAction({projectId: null}));\n    }\n  }\n}\n\nfunction* specToolProjectListSearchProjects(\n  action: SpecToolProjectListSearchProjectsAction,\n) {\n\n  const { filters, options } = action.payload;\n\n  yield put(new SpecToolProjectListIsLoadingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchProjects, new SearchProjectsAction({\n    filters,\n    options\n  }));\n\n  yield put(new SpecToolProjectListIsLoadingAction(false));\n\n}\n\n\nexport function* linkSpecWithId(\n  action: LinkSpecWithIdAction\n) {\n  const {\n    projectId,\n    specId,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'linkSpec',\n      body: {\n        projectId,\n        specId,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const projects: List<IMap<Project>> = immutableData.getIn(['payload', 'project', 'project']);\n\n    if (projects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProjectsSucceededAction(projects));\n    }\n  } else {\n    console.error('no linkSpecWithId', {err}); // tslint:disable-line\n  }\n}\n\nexport function* checkOpportunityStatusUpToDate(\n  action: CheckOpportunityStatusUpToDateAction\n) {\n  const {\n    projectId\n  } = action;\n\n  yield put(new CheckOpportunityStatusUpToDateFetchingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'checkOpportunityStatus',\n      params: {\n        projectId\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const upToDate: boolean = immutableData.getIn(['payload', 'project', 'upToDate']);\n    yield put(new CheckOpportunityStatusUpToDateSucceededAction(upToDate));\n  } else {\n    console.error('error checkOpportunityStatus', {err}); // tslint:disable-line\n  }\n  yield put(new CheckOpportunityStatusUpToDateFetchingAction(false));\n}\n\nexport function* updateOpportunityAutomation(\n  action: UpdateOpportunityAutomationAction\n) {\n  const {\n    projectId,\n    quoteId\n  } = action.payload;\n\n  yield put(new UpdateOpportunityAutomationFetchingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'updateOpportunityAutomation',\n      params: {\n        projectId,\n        quoteId\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const opportunities: List<Opportunity> = immutableData.getIn(['payload', 'project', 'opportunities']);\n    yield put(new UpdateOpportunityAutomationSucceededAction(opportunities));\n  } else {\n    console.error('error updateOpportunityAutomation', {err}); // tslint:disable-line\n  }\n  yield put(new UpdateOpportunityAutomationFetchingAction(false));\n  return { data, err };\n}\n\nexport function* fetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatus (\n  action: FetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatusAction\n) {\n  yield put(new CheckOpportunityStatusUpToDateFetchingAction(true));\n  // Get updated opportunities\n  yield call(updateOpportunityAutomation, action);\n  const opportunities: List<Opportunity> | null = yield select(makeSelectUpdateOpportunityAutomationOpportunities());\n  // update project directly\n  const {\n    data,\n    err\n  }: {\n    data: IProjectResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      action.payload.projectId,\n      {\n        service: 'project',\n        endpoint: 'updateProject',\n        body: {\n          opportunities: opportunities.toJS()\n        },\n      },\n    ],\n  }));\n  if (data) {\n    const response = fromJS(data);\n    const projects: List<IMap<Project>> = response.getIn(['payload', 'project', 'project']);\n    yield put(new GetProjectsSucceededAction(projects));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteAutomation.opportunitiesUpdated'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteAutomation.opportunitiesUpdatedFailed'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n  // update opportunity status\n  yield call(checkOpportunityStatusUpToDate, new CheckOpportunityStatusUpToDateAction(action.payload.projectId));\n}\n\nexport function* checkOpportunityExists(\n  action: CheckOpportunityExistsAction\n) {\n  const {\n    projectId,\n    quoteId\n  } = action.payload;\n\n  yield put(new CheckOpportunityExistsFetchingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'checkOpportunityExists',\n      params: {\n        projectId,\n        quoteId\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const exists: boolean = immutableData.getIn(['payload', 'project', 'exists']);\n    yield put(new CheckOpportunityExistsSucceededAction(exists));\n  } else {\n    console.error('error checkOpportunityExists', {err}); // tslint:disable-line\n  }\n  yield put(new CheckOpportunityExistsFetchingAction(false));\n}\n\nexport function* updateQuoteStatusAndOpportunityValue(\n  action: UpdateQuoteStatusAndOpportunityValueAction\n) {\n  const {\n    projectId,\n    quoteId,\n    quotePhase\n  } = action.payload;\n\n  const [ phase, opp ] = yield all([\n    yield call(updateQuotePhase, new UpdateQuotePhaseAction({ quoteId, quotePhase })),\n    yield call(updateOpportunityAutomation, new UpdateOpportunityAutomationAction({ projectId, quoteId }))\n  ]);\n\n  yield delay(2000);\n  if (opp.data) {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectSnackbar.opportunityValueUpdateSuccessfulMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectSnackbar.opportunityValueUpdateFailedMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n}\n\nexport function* createTakeoff(\n  action: CreateTakeoffAction\n) {\n  const {\n    projectId,\n    files,\n  } = action.payload;\n\n  const {\n    data,\n    err\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'createTakeoff',\n      params: {\n        projectId\n      },\n      body: {\n        files\n      }\n    }\n  }));\n  if (data) {\n    const response = fromJS(data);\n  } else {\n    console.error('error creating takeoff', {err, data}); // tslint:disable-line\n  }\n}\n\nfunction* searchTemplates(\n    action: SearchTemplatesAction,\n) {\n  const { filters, options, queries = {} } = action.payload;\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'searchMasterTemplates',\n      body: {\n        filters,\n        options\n      },\n      queries\n    }\n  }));\n  const end = Date.now();\n\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'project', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'project', 'hasNextPage']);\n    const templates: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n    if (templates == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetTemplateProjectsSucceededAction(templates));\n      yield put(new SearchTemplatesSucceededAction({\n        templates,\n        count,\n        hasNextPage,\n      }));\n    }\n  } else {\n    yield put(new SearchTemplatesFailedAction(err));\n    console.error('templates no data', {err}); // tslint:disable-line\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n\n  const filterData = {\n    projectName: immutableFilters.getIn(['name', 'like']) || null,\n    countryId: immutableFilters.getIn(['countryId', 'eq']) || null,\n    provinceId: immutableFilters.getIn(['provinceId', 'eq']) || null,\n    cityId: immutableFilters.getIn(['cityId', 'eq']) || null,\n    buildingClassId: immutableFilters.getIn(['buildingClassId', 'eq']) || null,\n    buildingTypeId: immutableFilters.getIn(['buildingTypeId', 'eq']) || null,\n    createdByUserId: immutableFilters.getIn(['createdBy', 'eq']) || null,\n    createdDateGte: immutableFilters.getIn(['createdDate', 'gte']) || null,\n    createdDateLte: immutableFilters.getIn(['createdDate', 'lte']) || null,\n    modifiedDateGte: immutableFilters.getIn(['modifiedDate', 'gte']) || null,\n    modifiedDateLte: immutableFilters.getIn(['modifiedDate', 'lte']) || null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.masterTemplateSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* applyFolderTemplateToProjectAttachment(\n  action: ApplyFolderTemplateToProjectAttachmentAction\n) {\n  const {\n    projectId,\n    templateId,\n    parentFolderId\n  } = action.payload;\n\n  yield put(new SetIsApplyingFolderTemplateToProjectAttachmentAction(true));\n\n  const {\n    data,\n    err\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'importProjectAttachmentDirectory',\n      params: {\n        projectId,\n        templateDirectoryId: templateId\n      },\n      body: {\n        parentFolderId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const linkedFolders = immutableData.getIn(['payload', 'project', 'linkedFolders']);\n    if (linkedFolders == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new ToggleOverlayComponentAction({id: APPLY_ATTACHMENT_TEMPLATE_MODAL, open: false}));\n      yield put(new SetIsApplyingFolderTemplateToProjectAttachmentAction(false));\n      yield call(getProjectFiles, new GetProjectFilesAction(projectId));\n    }\n  } else {\n    console.error('error applying attachment folder template', {err}); // tslint:disable-line\n  }\n}\n\nexport function* patchKeyContacts(\n  action: PatchKeyContactsAction,\n) {\n  const {\n    quoteId,\n    projectId,\n    projectKeyContacts,\n    keyContacts,\n    exitAfterSave,\n    onSuccess,\n  } = action.payload;\n\n  const {\n    data,\n    err\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: 'patchKeyContacts',\n      params: {\n        projectId\n      },\n      body: {\n        keyContacts\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const res = immutableData.getIn(['payload', 'project', 'keyContacts']);\n    if (!res) {\n      console.error('patchKeyContacts invalid response', data); // tslint:disable-line\n    } else {\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      // log amplitude event for customer awarded/lost\n      res.filter(keyContact => keyContact.get('quoteId') === quoteId).forEach((keyContact) => {\n        const targetedKeyContact = projectKeyContacts.find((projectKeyContact) => projectKeyContact.get('projectContactId') === keyContact.get('projectContactId'));\n        if (!targetedKeyContact || targetedKeyContact.get('bidStatus') !== keyContact.get('bidStatus')) {\n          switch (keyContact.get('bidStatus')) {\n            case 'Awarded': {\n              amplitude.logEvent(AMPLITUDE_EVENT.customerAwarded, {\n                customerId: keyContact.getIn(['contact', 'id']),\n                quoteId,\n                projectId,\n                ...amplitudeData\n              });\n            }\n              break;\n            case 'Lost': {\n              amplitude.logEvent(AMPLITUDE_EVENT.customerLost, {\n                customerId: keyContact.getIn(['contact', 'id']),\n                quoteId,\n                projectId,\n                ...amplitudeData\n              });\n            }\n              break;\n            default: break;\n          }\n        }\n      });\n\n      yield put(new PatchKeyContactsSucceededAction({ projectId, keyContacts: res }));\n\n      if (quoteId) {\n        if (onSuccess) {\n          onSuccess();\n        } else {\n          if (exitAfterSave !== undefined && exitAfterSave) {\n            yield call(redirectToQuoteDetails, new RedirectToQuoteAction({ quoteId, withQuoteReload: true }));\n          } else {\n            yield call(redirectToQuoteEdit, new RedirectToQuoteEditAction({ quoteId, withQuoteReload: true }));\n          }\n        }\n      }\n    }\n  } else {\n    console.error('patchKeyContacts failed', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - Key contacts update failed',\n      severity: 'error',\n      anchorOrigin: {\n        vertical: 'bottom',\n        horizontal: 'right'\n      }\n    }));\n  }\n}\n","import * as React from 'react';\nimport {\n  Grid,\n  withStyles,\n  Theme,\n  WithStyles,\n  DialogContent,\n  DialogContentText,\n  IconButton,\n  Typography,\n  Tooltip,\n  Link\n} from '@material-ui/core';\nimport {\n  compose\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  ControlledModal,\n} from '..';\nimport { StyleRules } from '@material-ui/styles';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponentProp, makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { IAction } from 'ats-utils/src';\nimport { Image } from '../../components';\nimport FileLocalizationSelector, { mediaLocaleOptions } from '../FileLocalizationSelector';\nimport Language from '../../models/Language';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\n\ninterface IPrintDescriptionModalComponentProps {\n}\n\ninterface IPrintDescriptionModalProps extends IPrintDescriptionModalComponentProps {\n  theme: Theme;\n  overlayProps: { [key: string]: any };\n  open: boolean;\n  dispatch: (action: IAction) => void;\n  clearProps: () => void;\n}\n\ntype PrintDescriptionModalProps= IPrintDescriptionModalProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAtsApi;\n\nconst styles = (theme: Theme): StyleRules => ({\n  closeIcon: {\n    position: 'absolute',\n    right: theme.spacing(0.5),\n    top: theme.spacing(0.5)\n  },\n  paddingContainer: {\n    padding: theme.spacing(2),\n  },\n  ellipsis: {\n    maxWidth: '100%',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n});\n\nexport const PRINT_DESCRIPTION_MODAL_ID = 'PRINT_DESCRIPTION_MODAL';\n\nconst PrintDescriptionModal: React.FC<PrintDescriptionModalProps> = (props) =>  {\n  const { overlayProps: { description, printDescription, imageId, productImageId, cutsheet }, clearProps, open, classes, dispatch, theme, atsApi, t } = props;\n\n  React.useEffect(() => {\n    if (open) {\n      setSelectedLanguage('en');\n    }\n    if (!open) {\n      setTimeout(clearProps, 200);\n    }\n  }, [open]);\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const [selectedLanguage, setSelectedLanguage] = React.useState<Language>('en');\n\n  const optionContainsCutsheet = cutsheet && cutsheet.size !== 0;\n  const allLocales = mediaLocaleOptions.map((option) => option.value);\n  const cutsheetNotAvailableLocales = optionContainsCutsheet && allLocales.reduce((acc, locale) => {\n    return cutsheet.get(locale) ? acc : acc.concat([locale]);\n  }, []);\n  const filename = cutsheet && cutsheet.getIn([selectedLanguage, 'filename']);\n  const fileId = cutsheet && cutsheet.getIn([selectedLanguage, 'fileId']);\n  const fileLink = fileId && generateFileLink(fileId);\n\n  return (\n    <>\n      <ControlledModal\n        localKey={PRINT_DESCRIPTION_MODAL_ID}\n        fullWidth={!imageId ? true : false}\n        scroll='body'\n        maxWidth='sm'\n      >\n        <DialogContent>\n          <Grid className={classes.paddingContainer}>\n            <IconButton\n              onClick={() => dispatch(new ToggleOverlayComponentAction({open: false, id: PRINT_DESCRIPTION_MODAL_ID}))}\n              className={classes.closeIcon}\n            >\n              <CloseIcon />\n            </IconButton>\n            {imageId &&\n              <Grid style={{border: `5px solid ${theme.palette.grey[600]}`, marginBottom: theme.spacing(1.5)}}>\n                <Image\n                  src={imageId || ''}\n                  width={'296px'}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                  cover={true}\n                />\n              </Grid>\n            }\n            <DialogContentText id='alert-dialog-description' variant='h6' color='textPrimary'>\n              {description}\n            </DialogContentText>\n            {(productImageId || cutsheet) &&\n              <Grid container={true}>\n                {productImageId &&\n                  <Grid container={true} direction='column'>\n                    <Typography color='textPrimary' variant='body2'>Product Image Preview</Typography>\n                    <Image\n                      src={productImageId}\n                      width={'296px'}\n                      aspectRatio={'100%'}\n                      fromService={true}\n                      margin={'16px'}\n                    />\n                  </Grid>\n                }\n                {optionContainsCutsheet &&\n                  <Grid container={true} justify='space-between' alignItems='flex-end'>\n                    <Typography color='textPrimary' variant='body2'>{t('fileTypes.manufacturerCutsheet')}</Typography>\n                    <FileLocalizationSelector\n                      selectedLanguage={selectedLanguage}\n                      setSelectedLanguage={(_selectedLanguage) => setSelectedLanguage(_selectedLanguage)}\n                      displayLabel={false}\n                      disabledLocales={cutsheetNotAvailableLocales}\n                    />\n                    <Grid item={true} xs={12} container={true} alignItems='center' style={{height: 48}}>\n                      {filename && fileLink && <Tooltip title={filename}>\n                          <Link href={fileLink} className={classes.ellipsis}>{filename}</Link>\n                        </Tooltip>\n                      }\n                    </Grid>\n                  </Grid>\n                }\n              </Grid>\n            }\n            {printDescription &&\n              <DialogContentText id='alert-dialog-description' variant='body2'>\n                {printDescription}\n              </DialogContentText>\n            }\n          </Grid>\n        </DialogContent>\n      </ControlledModal>\n    </>\n  );\n};\n\nfunction mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n    clearProps: () => {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: PRINT_DESCRIPTION_MODAL_ID,\n        props: {}\n      }));\n    }\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  overlayProps: makeSelectOverlayComponentProp(PRINT_DESCRIPTION_MODAL_ID),\n  open: makeSelectOverlayComponent(PRINT_DESCRIPTION_MODAL_ID),\n});\n\nexport default compose<React.ComponentClass<IPrintDescriptionModalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n)(PrintDescriptionModal);","\n\n// import * as myself from './index';\n// export default myself;\n\nexport const HEADER_HEIGHT_UNIT_MULTIPLIER = 7;\nexport const SM_HEADER_HEIGHT_UNIT_MULTIPLIER = 8;\nexport const SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER = 32;\nexport const MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER = 12;\nexport const SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER = 0;\nexport const ANIMATION_SPEED = 0.5;\n\nexport default {\n  HEADER_HEIGHT_UNIT_MULTIPLIER,\n  SM_HEADER_HEIGHT_UNIT_MULTIPLIER,\n  SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  ANIMATION_SPEED,\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nvar _immutable = require(\"immutable\");\n\nvar _deepEqual = _interopRequireDefault(require(\"./deepEqual\"));\n\nvar _keys = _interopRequireDefault(require(\"./keys\"));\n\nvar _setIn = _interopRequireDefault(require(\"./setIn\"));\n\nvar _splice = _interopRequireDefault(require(\"./splice\"));\n\nvar _getIn = _interopRequireDefault(require(\"../plain/getIn\"));\n\nvar emptyList = (0, _immutable.List)();\nvar structure = {\n  allowsArrayErrors: false,\n  empty: (0, _immutable.Map)(),\n  emptyList: emptyList,\n  getIn: function getIn(state, field) {\n    return _immutable.Iterable.isIterable(state) ? state.getIn((0, _toPath2[\"default\"])(field)) : (0, _getIn[\"default\"])(state, field);\n  },\n  setIn: _setIn[\"default\"],\n  deepEqual: _deepEqual[\"default\"],\n  deleteIn: function deleteIn(state, field) {\n    return state.deleteIn((0, _toPath2[\"default\"])(field));\n  },\n  forEach: function forEach(items, callback) {\n    items.forEach(callback);\n  },\n  fromJS: function fromJS(jsValue) {\n    return (0, _immutable.fromJS)(jsValue, function (key, value) {\n      return _immutable.Iterable.isIndexed(value) ? value.toList() : value.toMap();\n    });\n  },\n  keys: _keys[\"default\"],\n  size: function size(list) {\n    return list ? list.size : 0;\n  },\n  some: function some(items, callback) {\n    return items.some(callback);\n  },\n  splice: _splice[\"default\"],\n  equals: function equals(a, b) {\n    return b.equals(a) ? true : b.toSet().equals(a.toSet());\n  },\n  orderChanged: function orderChanged(a, b) {\n    return b.some(function (val, index) {\n      return val !== a.get(index);\n    });\n  },\n  toJS: function toJS(value) {\n    return _immutable.Iterable.isIterable(value) ? value.toJS() : value;\n  }\n};\nvar _default = structure;\nexports[\"default\"] = _default;","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","export default function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  createStyles,\n  WithStyles,\n  withStyles,\n  Typography,\n  IconButton,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DrawerExpandButton from '../DrawerExpandButton';\n\ninterface IDrawerEditHeaderComponentProps {\n  title: string;\n  hideExpandButton?: boolean;\n  disableCloseButton?: boolean;\n  handleClose: () => void;\n}\n\ntype DrawerEditHeaderProps = IDrawerEditHeaderComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  header: {\n    position: 'sticky',\n    top: '0',\n    minHeight: 48,\n    zIndex: theme.zIndex.drawer + 1,\n    paddingLeft: theme.spacing(3),\n    color: theme.palette.common.white,\n    background: `linear-gradient(225deg, ${theme.palette.secondary[700]} 0%, ${theme.palette.secondary[900]} 100%)`,\n  },\n  title: {\n    wordBreak: 'break-word',\n  },\n  icons: {\n    whiteSpace: 'nowrap',\n    marginRight: theme.spacing(1),\n  },\n  icon: {\n    marginLeft: theme.spacing(0.5),\n  }\n});\n\nconst DrawerEditHeader: React.FC<DrawerEditHeaderProps> = ({\n  classes,\n  title = '',\n  hideExpandButton = false,\n  disableCloseButton = false,\n  handleClose\n}) => (\n    <Grid\n      container={true}\n      alignItems='center'\n      justify='space-between'\n      wrap='nowrap'\n      className={classes.header}\n    >\n      <Typography\n        variant='subtitle1'\n        color='inherit'\n        className={classes.title}\n      >\n        {title}\n      </Typography>\n      <span className={classes.icons}>\n        { hideExpandButton ? null : <DrawerExpandButton /> }\n        <IconButton\n          onClick={handleClose}\n          color='inherit'\n          size='small'\n          disabled={disableCloseButton}\n          className={classes.icon}\n        >\n          <CloseIcon />\n        </IconButton>\n      </span>\n    </Grid>\n  );\n\nexport default compose<React.ComponentClass<IDrawerEditHeaderComponentProps>>(\n  withStyles(styles),\n)(DrawerEditHeader);\n\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Alpha = require('./Alpha');\n\nObject.defineProperty(exports, 'Alpha', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Alpha).default;\n  }\n});\n\nvar _Checkboard = require('./Checkboard');\n\nObject.defineProperty(exports, 'Checkboard', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Checkboard).default;\n  }\n});\n\nvar _EditableInput = require('./EditableInput');\n\nObject.defineProperty(exports, 'EditableInput', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_EditableInput).default;\n  }\n});\n\nvar _Hue = require('./Hue');\n\nObject.defineProperty(exports, 'Hue', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Hue).default;\n  }\n});\n\nvar _Raised = require('./Raised');\n\nObject.defineProperty(exports, 'Raised', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Raised).default;\n  }\n});\n\nvar _Saturation = require('./Saturation');\n\nObject.defineProperty(exports, 'Saturation', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Saturation).default;\n  }\n});\n\nvar _ColorWrap = require('./ColorWrap');\n\nObject.defineProperty(exports, 'ColorWrap', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_ColorWrap).default;\n  }\n});\n\nvar _Swatch = require('./Swatch');\n\nObject.defineProperty(exports, 'Swatch', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Swatch).default;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n}), 'Edit');\n\nexports.default = _default;","import {\n  List,\n  fromJS,\n} from 'immutable';\n\nimport OpportunityGroup from '../OpportunityGroup';\nimport OpportunityStatusListItem from '../OpportunityStatusListItem';\nimport ProjectPhase from '../ProjectPhase';\nimport Base from '../Base';\n\nimport { IMap } from 'ats-utils/src/Interfaces';\n\nexport interface ITypePlaceholder {\n  __TYPE_PLACEHOLDER__: never;\n}\n\nexport enum PreferenceType {\n  TypePlaceholder = '__TYPE_PLACEHOLDER__',\n  opportunityStatus = 'opportunityStatus',\n  OpportunityGroups = 'opportunityGroups',\n  ProjectPhase = 'projectPhase',\n  UserDefinedLabel = 'userDefinedLabel',\n  QuoteConnectCurrency= 'quoteConnectCurrency',\n}\n\n// **NOTE** preference subtypes MUST EXTEND IMMUTABLE\n// we CANNOT rely on the normal IMap typing to fix things since we use the types directly in other places\n// e.g. SetPreferencesAction in AccountModule/actions\nexport default class Preferences extends Base {\n  public [PreferenceType.TypePlaceholder]?: IMap<ITypePlaceholder>;\n  public [PreferenceType.OpportunityGroups]?: List<IMap<OpportunityGroup>>;\n  public [PreferenceType.opportunityStatus]?: List<IMap<OpportunityStatusListItem>>;\n  public [PreferenceType.ProjectPhase]?: List<IMap<ProjectPhase>>;\n  public [PreferenceType.UserDefinedLabel]?: any;\n  public [PreferenceType.QuoteConnectCurrency]?: any;\n\n  public constructor(init?: Partial<Preferences> & Base) {\n    super();\n    Object.assign(this, init);\n  }\n}\n","/**\n * Storage access that never throws.\n *\n * Browsers throw a SecurityError on any access to window.localStorage / sessionStorage when\n * storage is denied for the document: all site data blocked, or a cross-origin iframe with\n * third-party cookies blocked (Incognito does this by default). Old Safari private mode exposed\n * the object but threw QuotaExceededError on every write. Either way the app must not crash, so\n * values fall back to an in-memory map for the lifetime of the page (Sentry issue 7713574980).\n */\ntype StorageKind = 'localStorage' | 'sessionStorage';\n\nexport interface ISafeStorage {\n  getItem: (key: string) => string | null;\n  setItem: (key: string, value: string) => void;\n  removeItem: (key: string) => void;\n}\n\nconst getNativeStorage = (kind: StorageKind): Storage | null => {\n  try {\n    return typeof window !== 'undefined' ? window[kind] || null : null;\n  } catch (e) {\n    // Reading the property itself throws when storage access is denied.\n    return null;\n  }\n};\n\nconst createSafeStorage = (kind: StorageKind): ISafeStorage => {\n  const memory = new Map<string, string>();\n\n  return {\n    getItem: (key) => {\n      try {\n        const storage = getNativeStorage(kind);\n        if (storage) {\n          const value = storage.getItem(key);\n          if (value != null) {\n            return value;\n          }\n        }\n      } catch (e) {\n        // fall through to the in-memory copy\n      }\n      return memory.has(key) ? memory.get(key) : null;\n    },\n    setItem: (key, value) => {\n      try {\n        const storage = getNativeStorage(kind);\n        if (storage) {\n          storage.setItem(key, value);\n          memory.delete(key);\n          return;\n        }\n      } catch (e) {\n        // denied or quota exceeded: keep the value for this page load only\n      }\n      memory.set(key, value);\n    },\n    removeItem: (key) => {\n      memory.delete(key);\n      try {\n        const storage = getNativeStorage(kind);\n        if (storage) {\n          storage.removeItem(key);\n        }\n      } catch (e) {\n        // nothing to remove natively\n      }\n    },\n  };\n};\n\nexport const safeLocalStorage = createSafeStorage('localStorage');\nexport const safeSessionStorage = createSafeStorage('sessionStorage');\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n}), 'Visibility');\n\nexports.default = _default;","import { createStyles, Grid, GridDirection, GridItemsAlignment, GridJustification, makeStyles, MenuItem, Select, SelectProps, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport i18next from 'i18next';\nimport { Variant } from '@material-ui/core/styles/createTypography';\nimport Language from '../../models/Language';\nimport { useTranslation } from 'react-i18next';\n\nexport const mediaLocaleOptions = [\n  {\n    value: 'en',\n    label: 'LanguageSelector.en'\n  },\n  {\n    value: 'en-us',\n    label: 'LanguageSelector.en-US'\n  },\n  {\n    value: 'en-ca',\n    label: 'LanguageSelector.en-CA'\n  },\n  {\n    value: 'fr',\n    label: 'LanguageSelector.fr'\n  },\n  // we hide this as a hotfix for the moment as BE doesnt fully support all print in fr-ca\n  // {\n  //   value: 'fr-ca',\n  //   label: 'LanguageSelector.fr-CA'\n  // }\n];\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  selectRoot: {\n    padding: '7px 24px 8px 0',\n    minWidth: 100\n  },\n}));\n\ninterface IFileLocalizationSelector {\n  container?: boolean;\n  alignItems?: GridItemsAlignment;\n  direction?: GridDirection;\n  justify?: GridJustification;\n  displayLabel?: boolean;\n  variant?: Variant;\n  color?: 'inherit' | 'initial' | 'error' | 'textPrimary' | 'primary' | 'secondary' | 'textSecondary';\n  labelStyle?: React.CSSProperties;\n  disabledLocales?: Language[];\n  selectProps?: SelectProps;\n  renderValue?: (value: string) => React.ReactNode;\n  mergeDuplicateWarningIcon?: (languageOption: Language) => React.ReactNode;\n  selectedLanguage: Language;\n  setSelectedLanguage: (language: Language) => void;\n}\n\nconst FileLocalizationSelector: React.FC<IFileLocalizationSelector> = ({\n  container = false,\n  alignItems = 'center',\n  direction = 'column',\n  justify = 'space-between',\n  displayLabel = true,\n  variant = 'subtitle2',\n  color = 'textPrimary',\n  labelStyle= {},\n  disabledLocales = [],\n  selectProps = {},\n  renderValue = null,\n  mergeDuplicateWarningIcon = null,\n  selectedLanguage,\n  setSelectedLanguage\n}) => {\n  const [open, setOpen] = React.useState(false);\n  const classes = useStyles();\n  const {t} = useTranslation('translations');\n\n  return (\n    <Grid\n      item={true}\n      container={container}\n      {\n        ...container\n          ? {\n              direction,\n              justify,\n              alignItems\n            }\n          : {}\n      }\n    >\n      {\n        displayLabel\n          ? (\n              <Typography variant={variant} color={color} style={labelStyle}>\n                {i18next.t('translations:LanguageSelector.Language')}\n              </Typography>\n            )\n          : null\n      }\n      <Select\n        open={open}\n        onClose={() => setOpen(false)}\n        onOpen={() => setOpen(true)}\n        value={selectedLanguage}\n        onChange={(event: any) => setSelectedLanguage(event.target.value)}\n        classes={selectProps.classes ? selectProps.classes : { root: classes.selectRoot }}\n        renderValue={renderValue}\n        {...selectProps}\n      >\n        {\n          mediaLocaleOptions.map((locale: any) => {\n            const isDisabled = disabledLocales.length > 0 && disabledLocales.includes(locale.value);\n            return (\n              <MenuItem disabled={isDisabled} key={locale.value} value={locale.value} data-set='fileLocalization'>\n                <Typography data-set='fileLocalization' variant='body2' color='textPrimary'>{t(locale.label)}</Typography>\n                {selectedLanguage !== locale.value && mergeDuplicateWarningIcon && mergeDuplicateWarningIcon(locale.value)}\n              </MenuItem>\n            );\n          })\n        }\n      </Select>\n    </Grid>\n  );\n};\n\nexport default FileLocalizationSelector;","export default function ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7a.9959.9959 0 010-1.41c.39-.38 1.03-.39 1.42 0z\"\n}), 'KeyboardArrowDownRounded');\n\nexports.default = _default;","import { List, Map as ImmutableMap, fromJS, Set } from 'immutable';\nimport { IMap } from 'ats-utils/src';\n\nexport const setProductDefaultPrint = (customers: List<IMap<any>>, currentDefaultPrint) => {\n  const defaultPrint = currentDefaultPrint ?? true;\n  let updatedDefaultPrint = ImmutableMap({\n    'default': ImmutableMap.isMap(defaultPrint)\n      ? (defaultPrint.get('default') ?? true)\n      : defaultPrint\n  });\n  customers.forEach((customer) => {\n    const customerId = customer.get('id');\n    if (ImmutableMap.isMap(defaultPrint)) {\n      updatedDefaultPrint = updatedDefaultPrint.set(customerId, defaultPrint.get(String(customerId)) !== undefined ? defaultPrint.get(String(customerId)) : (defaultPrint.get('default') ?? true));\n    } else {\n      updatedDefaultPrint = updatedDefaultPrint.set(customerId, defaultPrint);\n    }\n  });\n  return updatedDefaultPrint;\n};\n\nexport const normalizeAttributes = (product) => product.get('attributes')?.isEmpty() ? product : product.set('attributes', fromJS({}));\n\nexport const DISCONTINUED_PRODUCT_STATUS = 'discontinued';\n\nconst readField = (node: any, field: string) => ImmutableMap.isMap(node) ? node.get(field) : node?.[field];\n\nexport interface IDiscontinuedProduct {\n  /**\n   * The row number the quote form shows for this product, or null when the\n   * product is hidden from the selected customer — those rows are not numbered.\n   */\n  row: number;\n  productNumber: string;\n}\n\n/**\n * The discontinued products in a quote, in the order they appear, each carrying\n * the row number the quote form displays for it: a 1-based count that runs\n * across all sections and skips products hidden from the selected customer.\n * Mirrors useSectionStartingIndices + visibleProductIndices in\n * QuoteForm/SectionListEdit — the three have to stay in step.\n *\n * Takes the quote's sections either as Immutable (the store's quote, or the\n * live redux-form values while editing) or as the plain JSON an API response\n * hands back — deep-converting a whole quote just to read a few fields is not\n * worth it.\n */\nexport const getDiscontinuedProducts = (sections: List<IMap<any>> | any[]): IDiscontinuedProduct[] => {\n  const discontinued: IDiscontinuedProduct[] = [];\n  let visibleCount = 0;\n\n  sections?.forEach((section: any) => {\n    readField(section, 'products')?.forEach((product: any) => {\n      const isVisible = !readField(product, 'notVisibleToSelectedCustomer');\n      if (isVisible) {\n        visibleCount++;\n        if (readField(product, 'status') === DISCONTINUED_PRODUCT_STATUS) {\n          discontinued.push({\n            row: isVisible ? visibleCount : null,\n            productNumber: readField(product, 'productNumber'),\n          });\n        }\n      }\n    });\n  });\n\n  return discontinued;\n};\n\nexport const isArchitect = (role: string) => {\n  if (!role) {\n    return false;\n  }\n  const lowerCaseRole = role.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n  return lowerCaseRole.includes('architect');\n};\n\nexport const isEngineer = (role: string) => {\n  if (!role) {\n    return false;\n  }\n  const lowerCaseRole = role.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n  return lowerCaseRole.includes('engineer') || lowerCaseRole.includes('ingenieur');\n};\n\nexport const isContractor = (role: string) => {\n  if (!role) {\n    return false;\n  }\n  const lowerCaseRole = role.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n  return lowerCaseRole.includes('contractor') || lowerCaseRole.includes('entrepreneur') || lowerCaseRole.includes('entrepreneuse');\n};\n\nexport enum PredefinedContactRole {\n  ARCHITECT = 'architect',\n  ENGINEER = 'engineer',\n  CONTRACTOR = 'contractor'\n}\nexport const getPredefinedContactRole = (role: string): PredefinedContactRole | null => {\n  if (!role) {\n    return null;\n  }\n  const lowerCaseRole = role.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase();\n\n  const indexOfArchitect = lowerCaseRole.indexOf('architect');\n  if (indexOfArchitect === 0) {\n    return PredefinedContactRole.ARCHITECT;\n  }\n  const indexOfEngineer = lowerCaseRole.indexOf('engineer');\n  if (indexOfEngineer === 0) {\n    return PredefinedContactRole.ENGINEER;\n  }\n  const indexOfIngenieur = lowerCaseRole.indexOf('ingenieur');\n  if (indexOfIngenieur === 0) {\n    return PredefinedContactRole.ENGINEER;\n  }\n  const indexOfContractor = lowerCaseRole.indexOf('contractor');\n  if (indexOfContractor === 0) {\n    return PredefinedContactRole.CONTRACTOR;\n  }\n  const indexOfEntrepreneur = lowerCaseRole.indexOf('entrepreneur');\n  if (indexOfEntrepreneur === 0) {\n    return PredefinedContactRole.CONTRACTOR;\n  }\n  const indexOfEntrepreneuse = lowerCaseRole.indexOf('entrepreneuse');\n  if (indexOfEntrepreneuse === 0) {\n    return PredefinedContactRole.CONTRACTOR;\n  }\n\n  // find the smallest index that is not -1 and return the corresponding role\n  const indices = [\n    { role: PredefinedContactRole.ARCHITECT, index: indexOfArchitect },\n    { role: PredefinedContactRole.ENGINEER, index: indexOfEngineer },\n    { role: PredefinedContactRole.ENGINEER, index: indexOfIngenieur },\n    { role: PredefinedContactRole.CONTRACTOR, index: indexOfContractor },\n    { role: PredefinedContactRole.CONTRACTOR, index: indexOfEntrepreneur },\n    { role: PredefinedContactRole.CONTRACTOR, index: indexOfEntrepreneuse },\n  ].filter(item => item.index !== -1);\n  if (indices.length === 0) {\n    return null;\n  }\n  const smallestIndex = indices.reduce((acc, item) => item.index < acc.index ? item : acc, indices[0]);\n  return smallestIndex.role;\n};\n\nexport const constructUpdatedKeyContactsForQuoteSave = ({ keyContacts = List(), quoteId }) => {\n  const projectOnlyKeyContactIdsSet = keyContacts.reduce((acc, keyContact: IMap<any>) => {\n    if (keyContact.get('quoteId') === null) {\n      return acc.add(keyContact.getIn(['contact', 'id']));\n    }\n    return acc;\n  }, Set());\n\n  const updatedKeyContacts = keyContacts.reduce((acc, keyContact: IMap<any>, index: number) => {\n    if (!keyContact.has('quoteId')) {\n      // set quoteId for new key contacts related to this quote\n      acc = acc.set(index, keyContact.set('quoteId', quoteId));\n      // if a new contact has been added to this quote that doesn't exist in the project then add it to project's key contact as well\n      // so that means if the quote related key contact gets deleted, the key contact will remain in the project.\n      if (!projectOnlyKeyContactIdsSet.has(keyContact.getIn(['contact', 'id']))) {\n        acc = acc.push(fromJS({\n          contact: {\n            id: keyContact.getIn(['contact', 'id']),\n          },\n          bidStatus: null,\n          bidNote: null,\n          bidValue: null\n        }));\n      }\n    }\n    return acc;\n  }, keyContacts);\n\n  return updatedKeyContacts;\n};","import { Button, createStyles, Grid, IconButton, makeStyles, Theme, Tooltip, Typography, useTheme } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport * as React from 'react';\nimport { Attribute, Product } from '../../../../models';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\nimport classNames from 'classnames';\nimport { connect, useDispatch } from 'react-redux';\nimport { change, getFormValues } from 'redux-form';\nimport { SERIES_EDIT_FORM } from '../../Component';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectSearchedPimProductsList } from '../../../../modules/PimModule/selectors';\nimport { List } from 'immutable';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../../modules/ApplicationModule/actions';\nimport { PRINT_DESCRIPTION_MODAL_ID } from '../../../../components/PrintDescriptionModal/Component';\nimport { makeSelectUserHasFeatOptionBasedCutsheets, makeSelectUserHasFeatOptionBasedImages, makeSelectUserHasPimPrintDescriptionAcl } from '../../../../modules/AtsModule/selectors';\nimport { Image } from '../../../../components';\nimport ZoomInIcon from '@material-ui/icons/ZoomIn';\nimport TextureIcon from '@material-ui/icons/Texture';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  truncateText: {\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n  },\n  iconContainer: {\n    maxWidth: theme.spacing(3),\n    marginRight: theme.spacing()\n  },\n  icon: {\n    color: theme.palette.grey[500],\n  },\n  optionNotActiveIcon: {\n    color: theme.palette.grey[400]\n  },\n  descriptionContainer: {\n    maxWidth: `calc(100% - ${theme.spacing(4)}px)`\n  },\n  optionItem: {\n    padding: theme.spacing(1, 0),\n  },\n  optionItemDraft: {\n    minWidth: theme.spacing(9),\n    maxWidth: 'calc(100% - 110px)'\n  },\n  optionNotActive: {\n    color: theme.palette.grey[400],\n    textDecorationLine: 'line-through'\n  },\n}));\ninterface IOptionValuesComponentProps {\n  option: IMap<Attribute>;\n  isDraftDetailPage: boolean;\n  updateOptionValueStatus?: (optionKey: string, index: number, status: 'active' | 'discontinued') => void;\n  setOptionValueDescriptionsWithEffect?: (descriptions: string[]) => void;\n}\ninterface IOptionValuesProps extends IOptionValuesComponentProps {\n  hasPimPrintDescriptionAcl: boolean;\n  hasFeatOptionBasedImages: boolean;\n  hasFeatOptionBasedCutsheets: boolean;\n}\n\ntype OptionValuesProps = IOptionValuesProps & WithTranslation;\nconst OptionValues: React.FC<OptionValuesProps> = ({\n  option,\n  isDraftDetailPage,\n  updateOptionValueStatus,\n  setOptionValueDescriptionsWithEffect,\n  hasPimPrintDescriptionAcl,\n  hasFeatOptionBasedImages,\n  hasFeatOptionBasedCutsheets,\n  t\n}) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const dispatch = useDispatch();\n  const isRequire = option?.get('require');\n  const values = option?.get('values');\n  const useSwatch = option?.get('useSwatch');\n  const useImage = option?.get('enableOptionBasedProductImage') && hasFeatOptionBasedImages;\n  const useSpec = option?.get('enableOptionBasedManufacturerCutsheet') && hasFeatOptionBasedCutsheets;\n  const onlyActive = values.filter((value) => value.get('status') === 'active').count() <= 1;\n  return (\n    <Grid container={true} direction={useSwatch ? 'row' : 'column'} alignItems={useSwatch ? 'flex-start' : 'stretch'}>\n      {\n        values.map((value,index) => {\n          const optionKey = option.get('key');\n          const description = value.get('description');\n          const printDescriptionCsi = value.getIn(['printDescription', 'csi']);\n          const optionValueId = value.get('id');\n          const isOptionActive = value.get('status') === 'active';\n          const isOptionDeleted = value.get('status') === 'deleted';\n          const disabledDiscontinue = isRequire && onlyActive && isOptionActive;\n          const swatchId = value.get('swatch');\n          const imageId = value.get('optionBasedProductImage');\n          const cutsheet = value.get('optionBasedManufacturerCutsheet');\n          return !isOptionDeleted && (\n          !useSwatch\n          ? <Grid item={true} container={true} key={`${optionValueId}-${optionKey}-${description}`} justify='space-between' alignItems='center' wrap='nowrap'>\n              <Grid\n                item={true}\n                container={true}\n                className={classNames({\n                  [classes.optionItem]: true,\n                  [classes.optionItemDraft]: isDraftDetailPage,\n                })}\n                wrap='nowrap'\n              >\n                <Grid item={true} xs={2} container={true} alignItems='center' className={classes.iconContainer}>\n                  {\n                    option.get('isOption') === true\n                    ? <CheckBoxOutlineBlankIcon fontSize='small' className={classNames({\n                        [classes.icon]: true,\n                        [classes.optionNotActiveIcon]: !isOptionActive,\n                      })} />\n                    : <RadioButtonUncheckedIcon fontSize='small' className={classNames({\n                        [classes.icon]: true,\n                        [classes.optionNotActiveIcon]: !isOptionActive,\n                      })} />\n                  }\n                </Grid>\n                <Grid item={true} xs={10} className={classes.descriptionContainer}>\n                  <Tooltip title={description}>\n                    <Typography\n                      color='textPrimary'\n                      className={classNames({\n                        [classes.truncateText]: true,\n                        [classes.optionNotActive]: !isOptionActive,\n                      })}\n                    >{description}</Typography>\n                  </Tooltip>\n                  {printDescriptionCsi && hasPimPrintDescriptionAcl &&\n                    <Button\n                      color='primary'\n                      size='small'\n                      className={classNames({\n                        [classes.optionNotActive]: !isOptionActive,\n                      })}\n                      onClick={() => {\n                        dispatch(new SetOverlayComponentPropsAction({\n                          id: PRINT_DESCRIPTION_MODAL_ID,\n                          props: {\n                            description,\n                            printDescription: printDescriptionCsi\n                          }\n                        }));\n                        dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                      }}\n                      disabled={!isOptionActive}\n                    >\n                      {t('SeriesDetailPage.printDescription')}\n                    </Button>\n                  }\n                  {((useImage && imageId) || (useSpec && cutsheet?.size > 0)) &&\n                    <Button\n                    color='primary'\n                    size='small'\n                    className={classNames({\n                      [classes.optionNotActive]: !isOptionActive,\n                    })}\n                    onClick={() => {\n                      dispatch(new SetOverlayComponentPropsAction({\n                        id: PRINT_DESCRIPTION_MODAL_ID,\n                        props: {\n                          description,\n                          productImageId: imageId,\n                          cutsheet\n                        }\n                      }));\n                      dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                    }}\n                    disabled={!isOptionActive}\n                    >\n                      {t('SeriesDetailPage.additionalInfo')}\n                    </Button>\n                  }\n                </Grid>\n              </Grid>\n              { isDraftDetailPage &&\n                <Grid item={true}>\n                  {isOptionActive\n                    ? <Tooltip title={disabledDiscontinue ? t('SeriesDetailPage.disabledDescriptionDiscontinueTooltip') : ''}>\n                        <span>\n                          <Button\n                            color='primary'\n                            size='small'\n                            disabled={disabledDiscontinue}\n                            onClick={() => {\n                              setOptionValueDescriptionsWithEffect([description]);\n                              updateOptionValueStatus(optionKey, index, 'discontinued');\n                            }}\n                          >\n                            { t('SeriesDetailPage.discontinue') }\n                          </Button>\n                        </span>\n                      </Tooltip>\n                    : <Button\n                        color='primary'\n                        size='small'\n                        onClick={() => {\n                          dispatch(change(SERIES_EDIT_FORM, `attributes.${optionKey}.values.${index}.status`, 'active'));\n                        }}\n                      >{t('SeriesDetailPage.activate')}</Button>\n                  }\n                </Grid>\n              }\n            </Grid>\n          : <Grid container={true} key={`${optionValueId}-${optionKey}-${description}`} direction='column' justify='center' alignItems='center' item={true} xs={3} md={2} style={{ padding: 4 }}>\n              <Tooltip\n                title={\n                  <Grid>\n                    <Typography color='inherit' variant='body2'>{description}</Typography>\n                    {!swatchId && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.swatchNotAvailable')}</Typography>}\n                    {!isOptionActive && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.optionDiscontinued')}</Typography>}\n                  </Grid>\n              }>\n                <Grid style={{border: !isOptionActive ? `3px solid ${theme.palette.grey[600]}` : `3px solid ${theme.palette.grey[400]}`, width: 60, height: 60, position: 'relative', marginBottom: theme.spacing(1.5)}}>\n                  {/* cross over diagonal line when option is discontinued*/}\n                  {!isOptionActive &&\n                    <svg style={{width: '100%', height: '100%', position: 'absolute', zIndex: 1}} >\n                      <line x1='100%' y1='100%' x2='0' y2='0' style={{stroke: theme.palette.grey[600], strokeWidth: 3}}/>\n                    </svg>\n                  }\n                  {swatchId\n                  ? <Image\n                      src={swatchId || ''}\n                      aspectRatio={'100%'}\n                      fromService={true}\n                      cover={true}\n                      style={{opacity: isOptionActive ? 1 : 0.2}}\n                    />\n                  : <TextureIcon style={{fontSize: 72, position: 'absolute', top: -9, left: -9, color: !isOptionActive ? theme.palette.grey[200] : theme.palette.grey[400]}}/>\n                  }\n                  {swatchId && isOptionActive &&\n                    <IconButton\n                      style={{padding: 0, position: 'absolute', right: 0, bottom: 0}}\n                      onClick={() => {\n                        dispatch(new SetOverlayComponentPropsAction({\n                          id: PRINT_DESCRIPTION_MODAL_ID,\n                          props: {\n                            description,\n                            imageId: swatchId\n                          }\n                        }));\n                        dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                      }}\n                    >\n                      <ZoomInIcon fontSize='small' style={{color: 'white', backgroundColor: theme.palette.grey[600]}}/>\n                    </IconButton>\n                  }\n                </Grid>\n              </Tooltip>\n              <Typography\n                color='textPrimary'\n                className={classNames({\n                  [classes.truncateText]: true,\n                  [classes.optionNotActive]: !isOptionActive,\n                })}\n                style={{ width: '100%', textAlign: 'center' }}\n              >{description}</Typography>\n              {printDescriptionCsi && hasPimPrintDescriptionAcl &&\n                <Button\n                  color='primary'\n                  size='small'\n                  className={classNames({\n                    [classes.optionNotActive]: !isOptionActive,\n                  })}\n                  onClick={() => {\n                    dispatch(new SetOverlayComponentPropsAction({\n                      id: PRINT_DESCRIPTION_MODAL_ID,\n                      props: {\n                        description,\n                        printDescription: printDescriptionCsi\n                      }\n                    }));\n                    dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                  }}\n                  disabled={!isOptionActive}\n                >\n                  {t('SeriesDetailPage.printDescription')}\n                </Button>\n              }\n              {((useImage && imageId) || (useSpec && cutsheet?.size > 0)) &&\n                <Button\n                color='primary'\n                size='small'\n                className={classNames({\n                  [classes.optionNotActive]: !isOptionActive,\n                })}\n                onClick={() => {\n                  dispatch(new SetOverlayComponentPropsAction({\n                    id: PRINT_DESCRIPTION_MODAL_ID,\n                    props: {\n                      description,\n                      productImageId: imageId,\n                      cutsheet\n                    }\n                  }));\n                  dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                }}\n                disabled={!isOptionActive}\n                >\n                  {t('SeriesDetailPage.additionalInfo')}\n                </Button>\n              }\n              { isDraftDetailPage &&\n                <Grid item={true}>\n                  {isOptionActive\n                    ? <Tooltip title={disabledDiscontinue ? t('SeriesDetailPage.disabledDescriptionDiscontinueTooltip') : ''}>\n                        <span>\n                          <Button\n                            color='primary'\n                            size='small'\n                            disabled={disabledDiscontinue}\n                            onClick={() => {\n                              setOptionValueDescriptionsWithEffect([description]);\n                              updateOptionValueStatus(optionKey, index, 'discontinued');\n                            }}\n                          >\n                            { t('SeriesDetailPage.discontinue') }\n                          </Button>\n                        </span>\n                      </Tooltip>\n                    : <Button\n                        color='primary'\n                        size='small'\n                        onClick={() => {\n                          dispatch(change(SERIES_EDIT_FORM, `attributes.${optionKey}.values.${index}.status`, 'active'));\n                        }}\n                      >{t('SeriesDetailPage.activate')}</Button>\n                  }\n                </Grid>\n              }\n            </Grid>\n          );\n        })\n      }\n    </Grid>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectUserHasPimPrintDescriptionAcl = makeSelectUserHasPimPrintDescriptionAcl();\n  const selectUserHasFeatOptionBasedImages = makeSelectUserHasFeatOptionBasedImages();\n  const selectUserHasFeatOptionBasedCutsheets = makeSelectUserHasFeatOptionBasedCutsheets();\n  return function mapStateToProps(state) {\n    return ({\n      hasPimPrintDescriptionAcl: selectUserHasPimPrintDescriptionAcl(state),\n      hasFeatOptionBasedImages: selectUserHasFeatOptionBasedImages(state),\n      hasFeatOptionBasedCutsheets: selectUserHasFeatOptionBasedCutsheets(state)\n    });\n  };\n};\n\nexport default compose<React.FC<IOptionValuesComponentProps>>(\n  connect(makeMapStateToProps, null),\n  withTranslation('translations')\n)(OptionValues);","import * as React from 'react';\nimport { Grid, Typography, IconButton, Paper, makeStyles, Theme, createStyles, useTheme, Tooltip } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport RestoreIcon from '@material-ui/icons/Restore';\nimport { Attribute, Product } from '../../../../models';\nimport { IAttributeOptionDialogState } from '../../../../modules/ApplicationModule/reducer';\nimport { SetOptionDialogStateAction } from '../../../../modules/ApplicationModule/actions';\nimport { connect, useSelector } from 'react-redux';\nimport { getFormValues } from 'redux-form/immutable';\nimport { SERIES_EDIT_FORM } from '../../Component';\nimport { createStructuredSelector } from 'reselect';\nimport { change } from 'redux-form';\nimport { DeleteModal } from '../../../../components';\nimport { makeSelectSearchedPimProductsList } from '../../../../modules/PimModule/selectors';\nimport NoAttributesFound from '../NoAttributesFound';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport OptionValues from './OptionValues';\nimport { AtsSvgEmptyFeaturesOptions } from '../../../../components/AtsSvg';\nimport classNames from 'classnames';\nimport { makeSelectIsPimTool } from '../../../../modules/AtsModule/selectors';\n\ninterface IOptionsComponentProps {}\n\ninterface IOptionsProps extends IOptionsComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  setOptionDialogState: (payload: IMap<IAttributeOptionDialogState>) => void;\n  formValues: any;\n  products: List<IMap<Product>>;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  title: {\n    padding: theme.spacing(2, 0, 1),\n  },\n  paper: {\n    padding: theme.spacing(2),\n    height: '100%',\n  },\n  effectedListContainer: {\n    maxHeight: '150px',\n    overflowY: 'auto',\n    margin: theme.spacing(1.5, 0)\n  },\n  warningMessage: {\n    marginTop: theme.spacing(1.5)\n  },\n  optionHead: {\n    marginBottom: theme.spacing()\n  },\n  optionNotActive: {\n    color: theme.palette.grey[400],\n    textDecorationLine: 'line-through'\n  },\n  displayAsAttributeChip: {\n    padding: theme.spacing(0.5, 1),\n    backgroundColor: theme.palette.secondary[50],\n    borderRadius: 20,\n    width: 'fit-content',\n    display: 'flex',\n    justifySelf: 'flex-end',\n  }\n}));\n\nconst Options: React.FC<IOptionsProps & WithTranslation> = (props) => {\n  const {\n    setOptionDialogState,\n    dispatch,\n    formValues,\n    t,\n  } = props;\n\n  const isPimTool = useSelector(makeSelectIsPimTool());\n\n  const [deleteOptionModalOpen, toggleOptionDeleteModal] = React.useState(false);\n  const [discontinueModalOpen, toggleDiscontinueModalOpen] = React.useState({open: false, bulkUpdate: false});\n  const [keyToUpdate, setKeyToUpdate] = React.useState(null);\n  const [valueIndexToUpdate, setValueIndexToUpdate] = React.useState(null);\n  const [optionValueDescriptionsWithEffect, setOptionValueDescriptionsWithEffect] = React.useState([]);\n\n  const theme = useTheme();\n  const classes = useStyles();\n  const attributes = formValues && formValues.get('attributes') || Map();\n  const options = attributes.filter(attribute => !attribute.get('isAttribute'));\n\n  const openOptionsDialog = (attribute?: IMap<Attribute>) => {\n    setOptionDialogState(fromJS({\n      open: true,\n      ...(attribute && { attribute }),\n    }));\n  };\n\n  const deleteOption = (key: string) => {\n    const updated = attributes.filter((opt, optKey) => optKey !== key);\n    dispatch(change(SERIES_EDIT_FORM, 'attributes', updated));\n    toggleOptionDeleteModal(false);\n  };\n\n  const updateOptionValueStatus = (optionKey: string, index: number, status: 'active' | 'discontinued') => {\n    if (status === 'discontinued') {\n      setKeyToUpdate(optionKey);\n      setValueIndexToUpdate(index);\n      toggleDiscontinueModalOpen({open: true, bulkUpdate: false});\n    } else {\n      dispatch(change(SERIES_EDIT_FORM, `attributes.${optionKey}.values.${index}.status`, 'active'));\n      setKeyToUpdate(null);\n      setValueIndexToUpdate(null);\n      setOptionValueDescriptionsWithEffect([]);\n    }\n  };\n\n  const bulkStatusChange = (optionKey, status: 'active' | 'discontinued') => {\n    const option = options.get(optionKey);\n    const allValues = option && option.get('values');\n    allValues.map((value, index) => {\n      dispatch(change(SERIES_EDIT_FORM, `attributes.${optionKey}.values.${index}.status`, status));\n    });\n    setKeyToUpdate(null);\n    setOptionValueDescriptionsWithEffect([]);\n  };\n\n  const updateEntireOptionValueStatus = (option, status: 'active' | 'discontinued') => {\n    const optionKey = option.get('key');\n    const allValues = option.get('values');\n    setKeyToUpdate(optionKey);\n    setOptionValueDescriptionsWithEffect(allValues.reduce((acc, value) => acc.concat([value.get('description')]), []));\n    if (status === 'discontinued') {\n      toggleDiscontinueModalOpen({open: true, bulkUpdate: true});\n    } else {\n      bulkStatusChange(optionKey, 'active');\n    }\n  };\n\n  const discontinueOptionValues = () => {\n    if (discontinueModalOpen.bulkUpdate) {\n      bulkStatusChange(keyToUpdate, 'discontinued');\n    } else {\n      dispatch(change(SERIES_EDIT_FORM, `attributes.${keyToUpdate}.values.${valueIndexToUpdate}.status`, 'discontinued'));\n    }\n    toggleDiscontinueModalOpen({open: false, bulkUpdate: false});\n    setKeyToUpdate(null);\n    setValueIndexToUpdate(null);\n    setOptionValueDescriptionsWithEffect([]);\n  };\n\n  const everyOptionsValuesDeleted = options && options.filter( option => {\n    return option.get('values').find( value => value.get('status') !== 'deleted');\n  }).size === 0;\n\n  return (\n    <Grid container={true} direction='column'>\n      {\n        options && (options.size === 0 || everyOptionsValuesDeleted)\n        ? <NoAttributesFound\n            title={t('SeriesDetailPage.noOptions')}\n            subtitle={t('SeriesDetailPage.noOptionsSubtitle')}\n            buttonText={t('SeriesDetailPage.addOption')}\n            SvgElement={<AtsSvgEmptyFeaturesOptions width='95' height='95' color={theme.palette.secondary[300]} shadowColor={theme.palette.secondary.main}/>}\n            onClick={() => openOptionsDialog()}\n          />\n        : <Grid container={true} spacing={2}>\n            {\n              options.map((option, key) => {\n                const allValues = option && option.get('values');\n                const require = option?.get('require');\n                const displayAsAttribute = option?.get('displayAsAttribute');\n                const useSwatch = option?.get('useSwatch');\n                const discontinuedValues = allValues.filter(value => value.get('status') === 'discontinued');\n                const activeValues = allValues.filter(value => value.get('status') === 'active');\n                const deletedValues = allValues.filter(value => value.get('status') === 'deleted');\n                const isAllOptionsDiscontinued = discontinuedValues.size === allValues.size;\n                const isAllOptionsActive = activeValues.size === allValues.size;\n                const isAllOptionsDeleted = deletedValues.size === allValues.size;\n                return !isAllOptionsDeleted && (\n                  <Grid item={true} md={!useSwatch ? 3 : null} sm={!useSwatch ? 6 : null} xs={12} key={key}>\n                    <Paper variant='outlined' className={classes.paper}>\n                      <Grid\n                        container={true}\n                        justify='space-between'\n                        alignItems='center'\n                        className={classes.optionHead}\n                      >\n                        <Typography\n                          variant='body2'\n                          color='textPrimary'\n                          className={classNames({\n                            [classes.optionNotActive]: isAllOptionsDiscontinued\n                          })}\n                        >\n                          {option.get('name') + (option.get('require') ? ' *' : '')}\n                        </Typography>\n                        <Grid item={true} style={{ marginLeft: 'auto' }}>\n                          <Tooltip title={require ? t('SeriesDetailPage.disabledDiscontinueEntireOptionTooltip') : ''}>\n                            <span>\n                              <IconButton\n                                size='small'\n                                onClick={(e) => {\n                                  updateEntireOptionValueStatus(option, 'discontinued');\n                                }}\n                                disabled={require || isAllOptionsDiscontinued || isAllOptionsDeleted}\n                              >\n                                <Tooltip title={t('SeriesDetailPage.discontinueEntireOption')}><RemoveCircleIcon /></Tooltip>\n                              </IconButton>\n                            </span>\n                          </Tooltip>\n                          <IconButton\n                            size='small'\n                            onClick={(e) => {\n                              bulkStatusChange(option.get('key'), 'active');\n                            }}\n                            disabled={isAllOptionsActive || isAllOptionsDeleted}\n                          >\n                            <Tooltip title={t('SeriesDetailPage.activateEntireOption')}><RestoreIcon /></Tooltip>\n                          </IconButton>\n                          <IconButton\n                            size='small'\n                            onClick={() => openOptionsDialog(option)}\n                          >\n                            <CreateIcon fontSize='small'/>\n                          </IconButton>\n                          <IconButton\n                            size='small'\n                            onClick={() => {\n                              setKeyToUpdate(key);\n                              toggleOptionDeleteModal(true);\n                            }}\n                          >\n                            <DeleteIcon fontSize='small'/>\n                          </IconButton>\n                        </Grid>\n                      </Grid>\n                      {\n                        isPimTool && displayAsAttribute && (\n                          <Typography color='textPrimary' className={classes.displayAsAttributeChip}>\n                            {t('SeriesDetailPage.displayAsAttribute')}\n                          </Typography>\n                        )\n                      }\n                      <OptionValues\n                        option={option}\n                        isDraftDetailPage={true}\n                        updateOptionValueStatus={updateOptionValueStatus}\n                        setOptionValueDescriptionsWithEffect={setOptionValueDescriptionsWithEffect}\n                      />\n                    </Paper>\n                  </Grid>\n                );\n              }).valueSeq()\n            }\n          </Grid>\n      }\n      <DeleteModal // for edit, activate, discontinue, delete options\n        open={deleteOptionModalOpen || discontinueModalOpen.open}\n        content={\n          <Grid>\n            { deleteOptionModalOpen &&\n              <Typography variant='h6'>\n                {`${t('SeriesDetailPage.deleteConfirmation')} ${options.getIn([keyToUpdate, 'name'])}?`}\n              </Typography>\n            }\n            { discontinueModalOpen.open &&\n              <>\n              <Typography variant='h6'>\n                {`${t('SeriesDetailPage.discontinueConfirmation')} ${options.getIn([keyToUpdate, 'name'])}:`}\n              </Typography>\n              <Grid container={true} direction='column' spacing={1} className={classes.effectedListContainer}>\n                {\n                  optionValueDescriptionsWithEffect.map((description: string, index: number) => (\n                    <Grid key={index} item={true}>\n                      <Typography variant='body1'>\n                        { description }\n                      </Typography>\n                    </Grid>\n                  ))\n                }\n              </Grid>\n              </>\n            }\n            { deleteOptionModalOpen &&\n              <Typography variant='body2' color='textPrimary' className={classes.warningMessage}>\n                {t('SeriesDetailPage.invalidProductWarning')}\n              </Typography>\n            }\n            { discontinueModalOpen.open &&\n              <Typography variant='body2' color='textPrimary' className={classes.warningMessage}>\n                {t('SeriesDetailPage.discontinuedProductWarning')}\n              </Typography>\n            }\n          </Grid>\n        }\n        toggleDeleteModal={() => {\n          toggleOptionDeleteModal(false);\n          toggleDiscontinueModalOpen({open: false, bulkUpdate: false});\n        }}\n        handleDelete={() => {\n          if (deleteOptionModalOpen) {\n            deleteOption(keyToUpdate);\n          }\n          if (discontinueModalOpen.open) {\n            discontinueOptionValues();\n          }\n        }}\n        withLoading={false}\n        buttonOk={discontinueModalOpen.open ? t('SeriesDetailPage.discontinue') : null}\n      />\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(SERIES_EDIT_FORM),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setOptionDialogState: (payload: IMap<IAttributeOptionDialogState>) => {\n      dispatch(new SetOptionDialogStateAction(payload));\n    },\n  };\n};\nexport default compose<React.FC<IOptionsComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(Options);\n\n","import * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Grid,\n  RootRef,\n  Typography,\n  LinearProgress,\n  IconButton,\n  Button,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  WithTranslation,\n  withTranslation,\n} from 'react-i18next';\nimport {\n  ScrollTabContainer,\n} from '../../containers';\nimport {makeSelectScrollNode} from '../../modules/ApplicationModule/selectors';\nimport {fromJS, Map, List, getIn} from 'immutable';\nimport {IAction, IMap} from 'ats-utils/src/Interfaces';\nimport {\n  WidgetLoaderStyle,\n  WidgetHeaderStyle,\n  NotFound,\n  ButtonTab,\n  WidgetHeaderEndStyle,\n} from '../../components';\nimport {\n  Series, Filter, Product,\n  Attribute\n} from '../../models';\nimport { ReactComponent as LoadingFile } from '../../images/expansion/loadingFile.svg';\nimport { Api } from 'ats-api/src';\nimport { WithAtsApi, withAtsApi } from '../../contexts/AtsApiContext';\nimport {\n  default as withPimSeriesId,\n  WithPimSeriesId,\n} from '../../hoc/withPimSeriesId';\nimport Attachments from './Attachments';\nimport WidgetWrapper from '../SeriesDetailPage/WidgetWrapper';\nimport { createStructuredSelector } from 'reselect';\nimport { ResetPimStateAction, SearchPimProductsAction, AddPimSeriesDraftAction, UpdatePimSeriesDraftAction, GetSeriesFromPimServiceAction, GetPimSeriesdDraftAction, SaveSkipAttributesAction, SearchRecommendedAttributesSuccessAction } from '../../modules/PimModule/actions';\nimport { PIM_DRAFT_DETAIL_PATH, PIM_DRAFT_LIST_PATH, NOT_FOUND_PATH, PIM_DRAFT_CREATE_PATH, AMPLITUDE_EVENT, GEOLOCATION_ID } from '../../constants';\nimport { DivInterceptor } from '../../containers/Quote/Quote';\nimport {\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport { InjectedFormProps } from 'redux-form';\nimport { push } from 'connected-react-router';\nimport Xhr from '../../utils/Xhr';\nimport { FieldDropzoneStateResetAction, SetOptionDialogStateAction, SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport { IAttributeOptionDialogState } from '../../modules/ApplicationModule/reducer';\nimport SeriesInfo from './SeriesInfo';\nimport AddIcon from '@material-ui/icons/Add';\nimport OptionsDialog, { OPTIONS_DIALOG_FORM } from './OptionsDialog';\nimport { makeSelectMandatoryAttributes, makeSelectSearchedPimProductsList, makeSelectSelectedPimSeries } from '../../modules/PimModule/selectors';\nimport { RouteComponentProps, RouteProps } from 'react-router';\nimport Options from './Attributes/Options';\nimport FeaturesWidget from './Attributes/FeaturesWidget';\nimport FeaturesDialog, { ATTRIBUTE_DIALOG_FORM } from './FeaturesDialog';\nimport AttributeDialog from '../../containers/PimAttributesListPage/AttributeDialog';\nimport DescriptionDialog from '../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport FileLocalizationSelector from '../../components/FileLocalizationSelector';\nimport Language from '../../models/Language';\nimport PrintDescriptionModal from '../../components/PrintDescriptionModal';\nimport { makeSelectIsPimTool, makeSelectUserIsAtsUser } from '../../modules/AtsModule/selectors';\nimport UnlistedAttributesWidget from './Attributes/UnlistedAttributesWidget';\nimport { SeriesType } from './Attributes/UnlistedAttributesWidget/UnlistedAttributes';\nimport RecommendedAttribute from '../../models/RecommendedAttribute';\nimport { forEach, isEqual } from 'lodash';\nimport MandatoryRecommendedAttributes from '../../models/MandatoryRecommendedAttributes';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { getBulkPriceComparison, getPriceComparison, getPurchasabilityComparison } from '../../components/PimProductDrawer/PimProductDrawerEdit';\nimport CallMergeIcon from '@material-ui/icons/CallMerge';\nimport PimIntegrationDialog from '../../containers/PimSeriesListPage/PimIntegrationDialog';\n\nexport const getTotalOptionDescriptionsCountByStatus = (seriesAttributes, status: 'active' | 'discontinued' | 'deleted') => {\n  const count = seriesAttributes.reduce((acc, attr) => {\n    if (!attr.get('isAttribute')) {\n      return acc + attr.get('values').filter(optionDescription => optionDescription.get('status') === status).size;\n    }\n    return acc;\n  }, 0);\n  return count ? count : 0;\n};\n\nexport const getOptionStatusUpdatedCount = (originalSeriesAttributes, updatedSeriesAttributes, status: 'active' | 'discontinued' | 'deleted', attributeType: 'option' | 'feature') => {\n  const updatedStatusList = updatedSeriesAttributes.filter((attr, attrKey) => {\n    if (attributeType === 'feature') {\n      if (status === 'deleted') {\n        // when delete, isAttribute gets updated to false, need to check from Options but previously features\n        return !attr.get('isAttribute') && originalSeriesAttributes.getIn([attrKey, 'isAttribute']) && attr.get('status') === status && originalSeriesAttributes.getIn([attrKey, 'status']) !== status;\n      } else {\n        return attr.get('isAttribute') && attr.get('status') === status && originalSeriesAttributes.getIn([attrKey, 'status']) !== status;\n      }\n    } else {\n      if (status === 'deleted') {\n        // if delete, count only deletion from previous options\n        return !attr.get('isAttribute') && !originalSeriesAttributes.getIn([attrKey, 'isAttribute']) && attr.get('status') === status && originalSeriesAttributes.getIn([attrKey, 'status']) !== status;\n      } else {\n        return !attr.get('isAttribute') && attr.get('status') === status && originalSeriesAttributes.getIn([attrKey, 'status']) !== status;\n      }\n    }\n  });\n  return updatedStatusList.size ? updatedStatusList.size : 0;\n};\n\nexport const getOptionDescriptionStatusUpdatedCount = (originalSeriesAttributes, updatedSeriesAttributes, status: 'active' | 'discontinued' | 'deleted') => {\n  const updatedStatusList = updatedSeriesAttributes.reduce((acc, attr, attrKey) => {\n    if (attr.get('isAttribute')) {\n      return acc;\n    } else {\n      const optionDescriptionListByStatus = attr.get('values').filter(optionDescription => {\n        const originalDescription = originalSeriesAttributes.getIn([attrKey, 'values'])?.find(value => value.get('id') === optionDescription.get('id'));\n        return optionDescription.get('status') === status && originalDescription && originalDescription.get('status') !== status;\n      });\n      return acc.concat(optionDescriptionListByStatus);\n    }\n  }, List());\n  return updatedStatusList.size ? updatedStatusList.size : 0;\n};\n\nexport const SERIES_EDIT_FORM = 'SeriesEditForm';\n\nexport const extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes = (recommendedAttributes: List<IMap<RecommendedAttribute>>, formAttributes: Map<string, IMap<Attribute>>): List<number> => {\n  return recommendedAttributes\n    ?.filter((attr) => {\n      const attributeKey = attr.get('attributeKey');\n      const formAttribute = formAttributes?.get(attributeKey);\n      const nonDeletedAttributeIsInForm = formAttribute && formAttribute.get('status') !== 'deleted';\n      return attr.get('skip') && !nonDeletedAttributeIsInForm;\n    })\n    .map((attr) => attr.get('attributeId'))\n    .sort() ?? List();\n};\n\ninterface ISeriesEditPageComponentProps {\n}\n\ninterface ISeriesEditPageProps extends ISeriesEditPageComponentProps {\n  atsApi: Api;\n  scrollNode?: React.RefObject<any>;\n  formValues: Map<string, any>;\n  products: List<IMap<Product>>;\n  attributeId: number;\n  isPimTool: boolean;\n  seriesNotVisibleToUser: boolean;\n  userHasAtsUserAcl: boolean;\n  mandatoryAttributes: List<IMap<RecommendedAttribute>>;\n  dispatch: React.Dispatch<IAction>;\n  updateSeriesDraft: (seriesId: number, seriesInfo: Partial<Series>, redirectPath: string, skipAttributes: number[], onSuccess: (result: IMap<Series>) => void, onFinally: () => void) => void;\n  addDraft: (series: IMap<Partial<Series>>, skipAttributes: number[], onSuccess: (result: IMap<Series>) => void, onFinally: () => void) => void;\n  setOptionDialogState: (payload: IMap<IAttributeOptionDialogState>) => void;\n  getSeriesDraft: (seriesId: number, onSuccess?: (series: IMap<Series>) => void, onFail?: () => void) => void;\n}\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  widgetContainerStyle: {\n    backgroundColor: 'rgb(238,238,238)',\n    padding: theme.spacing(2),\n    flexGrow: 1,\n  },\n  spacer: {\n    flexGrow: 1\n  },\n  scrollTabButton: {\n    width: 120,\n    margin: theme.spacing(0, 2),\n  },\n  updateSeriesIntegrationButton: {\n    alignSelf: 'flex-end'\n  }\n});\n\ntype SeriesEditPageType = WithPimSeriesId\n  & InjectedFormProps\n  & ISeriesEditPageProps\n  & RouteComponentProps\n  & RouteProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithAtsApi\n  & WithTranslation\n  & WithAmplitudeData;\n\n  interface ISeriesEditPageState {\n    selectedLanguage: Language;\n    openPimIntegrationDailog: boolean;\n    isSaving: boolean;\n  }\n\n// series stored in the SERIES_EDIT_FORM\n// components of series edit page (i.e. info, attributes, attachments widgets) change the series object\n// by updating SERIES_EDIT_FORM values\n// SERIES_EDIT_FORM values is the single source of truth\nclass SeriesEditPage extends React.Component<SeriesEditPageType, ISeriesEditPageState> {\n  public state: ISeriesEditPageState = {\n    selectedLanguage: 'en',\n    openPimIntegrationDailog: false,\n    isSaving: false,\n  };\n\n  private anchorEl: HTMLElement;\n\n  private refContainer = React.createRef<any>();\n  private refSeriesInfo = React.createRef<any>();\n  private refUnlistedAttributes = React.createRef<any>();\n  private refFeatures = React.createRef<any>();\n  private refOptions = React.createRef<any>();\n  private refAttachment = React.createRef<any>();\n\n  private scrollTabLabels = [\n    {\n      label: this.props.t('SeriesDetailPage.seriesInfo'),\n      ref: this.refSeriesInfo,\n    },\n    ...this.props.isPimTool ? [{\n      label:  'Unlisted Attributes',\n      ref: this.refUnlistedAttributes,\n    }] : [],\n    {\n      label:  this.props.t('SeriesDetailPage.features'),\n      ref: this.refFeatures,\n    },\n    {\n      label:  this.props.t('SeriesDetailPage.options'),\n      ref: this.refOptions,\n    },\n    {\n      label:  this.props.t('SeriesDetailPage.attachment'),\n      ref: this.refAttachment,\n    }\n  ];\n\n  public componentDidMount() {\n    const {\n      getSeriesDraft,\n      dispatch,\n      match,\n      userHasAtsUserAcl,\n      isPimTool,\n    } = this.props;\n\n    if (match.path !== PIM_DRAFT_CREATE_PATH) {\n      // get seriesId from valid url\n      const seriesId = parseInt(getIn(match, ['params', 'seriesId'], undefined), 10);\n      if (isNaN(seriesId)) {\n        push(NOT_FOUND_PATH);\n      }\n\n      const onSuccess = (series: IMap<Series>) => {\n        if (!userHasAtsUserAcl && isPimTool && series.get('brandId') === 785) {\n          dispatch(new SetSnackbarOpenAction({\n            message: 'Error - This series does not exist',\n            severity: 'error',\n          }));\n        }\n      };\n\n      const onFail = () => {\n        dispatch(new SetSnackbarOpenAction({\n          message: 'Error - Failed to find series',\n          severity: 'error',\n        }));\n      };\n\n      getSeriesDraft(seriesId, onSuccess, onFail);\n    }\n  }\n\n  public componentDidUpdate(prevProps) {\n    const {\n      series,\n      products,\n      dispatch,\n    } = this.props;\n\n    // configurator series have no access to edit page\n    if (series && series.get('isConfigurator') && (!prevProps.series || prevProps.series.get('id') !== series.get('id'))) {\n      push(NOT_FOUND_PATH);\n    }\n\n    if (series.size && prevProps.series !== series) {\n      if (products && !products.count()) { // get series products in case user lands directly on edit page without passing through detail page\n        dispatch(new SearchPimProductsAction({\n          filters: new Filter({\n            'and': [\n              {\n                'series': {\n                  'eq': series.get('id'),\n                }\n              }\n            ]\n          }).toImmutable()\n        }));\n      }\n    }\n  }\n\n  public componentWillUnmount() {\n    const { dispatch } = this.props;\n    dispatch(new ResetPimStateAction('searchedSeries'));\n    dispatch(new ResetPimStateAction('selectedPimSeries'));\n    dispatch(new ResetPimStateAction('mandatoryRecommendedAttributes'));\n    dispatch((new FieldDropzoneStateResetAction()));\n    dispatch(new SearchRecommendedAttributesSuccessAction(Map() as IMap<MandatoryRecommendedAttributes>));\n  }\n\n  public getUnscrollableTabItems = () => {\n    const { classes, dispatch, series, t, history } = this.props;\n    const seriesId = series.get('id');\n\n    return [\n      <DivInterceptor key='divInterceptor' className={classes.spacer}/>\n      ].concat([\n      <ButtonTab\n        key='__tab_cancel__'\n        variant='text'\n        textColor='primary'\n        buttonRef={(node: any) => {\n          this.anchorEl = node;\n        }}\n        aria-haspopup='true'\n        onClick={seriesId\n          ? () => dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesId}`))\n          : () =>  dispatch(push(PIM_DRAFT_LIST_PATH))\n        }\n        className={classes.scrollTabButton}\n      >\n        {t('formButtons.cancel')}\n      </ButtonTab>,\n      // <ButtonTab\n      //   key='__tab_draft__'\n      //   variant='text'\n      //   textColor='primary'\n      //   buttonRef={(node: any) => {\n      //     this.anchorEl = node;\n      //   }}\n      //   aria-haspopup='true'\n      //   className={classes.scrollTabButton}\n      // >\n      //   {t('SeriesDetailPage.saveToDraft')}\n      // </ButtonTab>,\n      <ButtonTab\n        key='__tab_save__'\n        variant='contained'\n        textColor='primary'\n        buttonRef={(node: any) => {\n          this.anchorEl = node;\n        }}\n        aria-haspopup='true'\n        className={classes.scrollTabButton}\n        disabled={this.state.isSaving}\n        type='submit'\n      >\n        {t('formButtons.save')}\n      </ButtonTab>\n    ]);\n  }\n\n  public onSubmit = async (formValues) => {\n    const {\n      updateSeriesDraft,\n      addDraft,\n      atsApi,\n      location,\n      series,\n      amplitudeData,\n      mandatoryAttributes,\n      isPimTool,\n    } = this.props;\n\n    this.setState({ isSaving: true });\n\n    const seriesId = series.get('id');\n    const category = formValues.getIn(['categoryName', 'id']) || null;\n    const brand = formValues.getIn(['brand', 'value']) || '';\n    const uploadedFiles = await Xhr({ atsApi, files: formValues.get('dropzone') });\n    const imageId = getIn(uploadedFiles, ['0', 'id'], '');\n    const mainFileId = formValues.get('mainFileId');\n    const productNumber = formValues.get('productNumber');\n    const description = formValues.get('description');\n    const attributes = formValues.get('attributes');\n    const rawPrice = formValues.get('price');\n    const price = rawPrice && rawPrice.withMutations(region => {\n      region.forEach((regionCurrency, index) => {\n        regionCurrency.forEach((priceObj, _index) => {\n          priceObj.forEach((actualPrice, priceIndex) => {\n            if (actualPrice === '') {\n              return region.setIn([index, _index, priceIndex], null);\n            }\n          });\n        });\n      });\n    });\n    const formPurchasability = formValues.get('purchasability');\n    const formSkid = formValues.getIn(['bulkPrice', 'skid', 'CAD']);\n    const formTruck = formValues.getIn(['bulkPrice', 'truck', 'CAD']);\n\n    // main image comes from dropzone or mainImageId field in form\n    const formTransformedSeries = Map().withMutations((ctx) => {\n      ctx.set('file', formValues.get('file') || Map());\n\n      imageId || mainFileId\n        ? ctx.setIn(['file','images', 'main', 'fileId'], imageId || mainFileId)\n        : ctx.deleteIn(['file', 'images']);\n\n      ctx.set('name', productNumber);\n      ctx.set('brand', brand);\n      ctx.set('category', category);\n      ctx.set('description', description);\n      ctx.set('attributes', attributes);\n      if (price) {\n        ctx.set('price', price);\n      }\n\n      if (ctx.getIn(['file', 'media'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media']);\n      }\n      if (ctx.getIn(['file', 'links'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'links']);\n      }\n\n      if (!formPurchasability?.get('country')) {\n        ctx.setIn(['purchasability', 'country'], List());\n      } else {\n        ctx.set('purchasability', formPurchasability);\n      }\n\n      const skidQuantity = formSkid?.get('quantity') ? Number(formSkid.get('quantity')) : null;\n      const skidPrice = formSkid?.get('price') ? Number(formSkid.get('price')).toString() : null;\n      const truckQuantity = formTruck?.get('quantity') ? Number(formTruck.get('quantity')) : null;\n      const truckPrice = formTruck?.get('price') ? Number(formTruck.get('price')).toString() : null;\n\n      if (!skidQuantity && !skidPrice && !truckQuantity && !truckPrice) {\n        ctx.set('bulkPrice', Map());\n      } else {\n        if (skidQuantity && skidPrice) {\n          const skid = {\n            quantity: skidQuantity,\n            price: skidPrice,\n          };\n          ctx.setIn(['bulkPrice', 'skid'], fromJS({\n            USD: skid,\n            CAD: skid\n          }));\n        }\n        if (truckQuantity && truckPrice) {\n          const truck = {\n            quantity: truckQuantity,\n            price: truckPrice,\n          };\n          ctx.setIn(['bulkPrice', 'truck'], fromJS({\n            USD: truck,\n            CAD: truck\n          }));\n        }\n      }\n    }) as IMap<Partial<Series>>;\n\n    // construct skip attributeIds list\n    const skippedMandatoryAttributes = extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes(mandatoryAttributes, attributes);\n    // const skipListHasChanged = !isEqual(extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes(formValues?.get('initialMandatoryAttributes')), skippedMandatoryAttributes);\n    // const skipAttributes = skipListHasChanged ? skippedMandatoryAttributes.toJS() : null;\n    const skipAttributes = skippedMandatoryAttributes.toJS();\n\n    const onFinally = () => {\n      this.setState({ isSaving: false });\n    };\n\n    try {\n      if (seriesId) {\n        const onSuccess = (result: IMap<Series>) => {\n          amplitude.logEvent(AMPLITUDE_EVENT.seriesDraftUpdated, amplitudeData({\n            seriesName: result.get('name'),\n            seriesId: result.get('id'),\n            manufacturerName: result.get('brand'),\n            categoryName: result.get('categoryName'),\n            numberOfOptions: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n            seriesType: 'Basic',\n            totalNumberOfOptions_active: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'active').size,\n            totalNumberOfOptions_discontinued: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'discontinued').size,\n            totalNumberOfOptions_deleted: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'deleted').size,\n            totalNumberOfOptionDescriptions_active: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'active'),\n            totalNumberOfOptionDescriptions_discontinued: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'discontinued'),\n            totalNumberOfOptionDescriptions_deleted: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'deleted'),\n            totalNumberOfFeatures_active: result.get('attributes').filter(attr => attr.get('isAttribute') && attr.get('status') === 'active').size,\n            totalNumberOfFeatures_deleted: result.get('attributes').filter(attr => attr.get('isAttribute') && attr.get('status') === 'deleted').size,\n            updated_seriesImage: series.getIn(['file', 'images', 'main', 'filename']) !== result.getIn(['file', 'images', 'main', 'filename']) ? result.getIn(['file', 'images', 'main', 'filename']) : null,\n            updated_seriesName: series.get('name') !== result.get('name') ? result.get('name') : null,\n            updated_seriesDescription: series.get('description') !== result.get('description') ? result.get('description') : null,\n            updated_manufacturerName: series.get('brand') !== result.get('brand') ? result.get('brand') : null,\n            updated_categoryName: series.get('categoryName') !== result.get('categoryName') ? result.get('categoryName') : null,\n            updated_listPrice: getPriceComparison(series, result, 'list'),\n            updated_sellPrice: getPriceComparison(series, result, 'sell'),\n            updated_costPrice: getPriceComparison(series, result, 'cost'),\n            updated_skid_quantity: getBulkPriceComparison(series, result, 'skid', 'quantity'),\n            updated_skid_price: getBulkPriceComparison(series, result, 'skid', 'price'),\n            updated_truck_quantity: getBulkPriceComparison(series, result, 'truck', 'quantity'),\n            updated_truck_price: getBulkPriceComparison(series, result, 'truck', 'price'),\n            updated_purchasability: getPurchasabilityComparison(series, result),\n            updated_numberOfOptionsActivated: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active', 'option'),\n            updated_numberOfOptionsDiscontinued: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'discontinued', 'option'),\n            updated_numberOfOptionsDeleted: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted', 'option'),\n            updated_numberOfOptionDescriptionsActivated: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active'),\n            updated_numberOfOptionDescriptionsDiscontinued: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'discontinued'),\n            updated_numberOfOptionDescriptionsDeleted: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted'),\n            updated_numberOfFeaturesActivated: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active', 'feature'),\n            updated_numberOfFeaturesDeleted: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted', 'feature'),\n          }));\n        };\n        updateSeriesDraft(seriesId, formTransformedSeries.toJS(), `${PIM_DRAFT_DETAIL_PATH}/${seriesId}`, skipAttributes, onSuccess, onFinally);\n      } else {\n        const newSeries = formTransformedSeries.withMutations(ctx => {\n          const draftParentId = location.state && (location.state as any).draftParentId;\n          if (draftParentId) {\n            ctx.set('draftParentId', draftParentId);\n          }\n        });\n        const onSuccess = (result: IMap<Series>) => {\n          amplitude.logEvent(AMPLITUDE_EVENT.seriesDraftCreated, amplitudeData({\n            seriesName: result.get('name'),\n            seriesId: result.get('id'),\n            manufacturerName: result.get('brand'),\n            categoryName: result.get('categoryName'),\n            numberOfOptions: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n            seriesType: result.get('isConfigurator') ? 'Advance' : 'Basic',\n          }));\n        };\n        addDraft(newSeries, skipAttributes, onSuccess, onFinally);\n      }\n    } catch (error) {\n      onFinally();\n    }\n  }\n\n  public openOptionsDialog = () => {\n    this.props.setOptionDialogState(fromJS({\n      open: true,\n    }));\n  }\n\n  public SeriesInfoWidget = () => {\n    const {\n      t,\n      series,\n    } = this.props;\n\n    return (\n      <WidgetWrapper\n        rootRef={this.refSeriesInfo}\n      >\n        <WidgetLoaderStyle\n          noAuto={true}\n          header={\n            <Grid container={true}>\n              <Grid container={true} item={true} xs={true} alignItems='center'>\n                <WidgetHeaderStyle>\n                  {t('SeriesDetailPage.seriesInfo')}\n                </WidgetHeaderStyle>\n              </Grid>\n              <Grid\n                item={true}\n                xs={12}\n                container={true}\n              >\n                <SeriesInfo seriesId={series?.get('id')} />\n              </Grid>\n            </Grid>\n          }\n        />\n      </WidgetWrapper>\n    );\n  }\n\n  public OptionsWidget = () => {\n    const {\n      t,\n    } = this.props;\n\n    return (\n      <WidgetWrapper\n        rootRef={this.refOptions}\n      >\n        <WidgetLoaderStyle\n          noAuto={true}\n          header={\n            <Grid container={true}>\n              <Grid container={true} item={true} xs={true} alignItems='center'>\n                <WidgetHeaderStyle>\n                  {t('SeriesDetailPage.options')}\n                </WidgetHeaderStyle>\n              </Grid>\n              <WidgetHeaderEndStyle>\n                <IconButton\n                  onClick={this.openOptionsDialog}\n                >\n                  <AddIcon fontSize='large'/>\n                </IconButton>\n              </WidgetHeaderEndStyle>\n              <Options />\n            </Grid>\n          }\n        />\n      </WidgetWrapper>\n    );\n  }\n\n  public AttachmentWidget = () => {\n    const {\n      t,\n    } = this.props;\n    const { selectedLanguage } = this.state;\n\n    return (\n      <WidgetWrapper\n        rootRef={this.refAttachment}\n      >\n        <WidgetLoaderStyle\n          noAuto={true}\n          header={\n            <Grid container={true}>\n              <Grid container={true} item={true} xs={true} justify='space-between' alignItems='center'>\n                <WidgetHeaderStyle>\n                  {t('SeriesDetailPage.attachment')}\n                </WidgetHeaderStyle>\n                <FileLocalizationSelector\n                  selectedLanguage={selectedLanguage}\n                  setSelectedLanguage={(_selectedLanguage) => this.setState({ selectedLanguage: _selectedLanguage })}\n                />\n              </Grid>\n              <Attachments\n                formName={SERIES_EDIT_FORM}\n                selectedLanguage={selectedLanguage}\n              />\n            </Grid>\n          }\n        />\n      </WidgetWrapper>\n    );\n  }\n\n  public render() {\n    const {\n      OptionsWidget,\n      AttachmentWidget,\n      SeriesInfoWidget\n    } = this;\n\n    const {\n      scrollNode,\n      classes,\n      series,\n      match,\n      attributeId,\n      formValues = Map(),\n      isPimTool,\n      seriesNotVisibleToUser,\n      handleSubmit,\n      t,\n    } = this.props;\n\n    const manufacturer = Map.isMap(formValues.get('brand')) ? formValues.get('brand').toJS() : formValues.get('brand');\n    const category = Map.isMap(formValues.get('categoryName')) ? formValues.get('categoryName').toJS() : formValues.get('categoryName');\n    const seriesId = series.get('id');\n\n    const preAddedTags = manufacturer && category && {\n      manufacturer: {\n        id: manufacturer?.id,\n        name: manufacturer?.value\n      },\n      category: {\n        id: category?.id,\n        name: category?.value\n      },\n      disabled: true\n    };\n\n    if ((series.size === 0 && match.path !== PIM_DRAFT_CREATE_PATH) || seriesNotVisibleToUser) {\n      return <>\n        <NotFound\n          firstRow={<LinearProgress color='secondary' />}\n          secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n          paperContainer={true}\n          svgIcon={<LoadingFile />}\n        />\n      </>;\n    }\n\n    return (\n      <>\n        <form onSubmit={handleSubmit(this.onSubmit)}>\n          <ScrollTabContainer\n            scrollNode={scrollNode}\n            labels={this.scrollTabLabels}\n            unscrollableTabItems={this.getUnscrollableTabItems()}\n          >\n            <RootRef rootRef={this.refContainer}>\n              <Grid\n                container={true}\n                direction='column'\n                wrap='nowrap'\n                className={classes.widgetContainerStyle}\n              >\n                {/* integraion button only visible on series edit page */}\n                {/* {seriesId &&\n                  <Button\n                    color='primary'\n                    startIcon={<CallMergeIcon />}\n                    className={classes.updateSeriesIntegrationButton}\n                    onClick={() => this.setState({ openPimIntegrationDailog: true })}\n                  >\n                    {t('pimIntegrationDialog.titleUpdate')}\n                  </Button>\n                } */}\n                <Grid\n                  container={true}\n                  item={true}\n                >\n                  <SeriesInfoWidget />\n                </Grid>\n                { isPimTool &&\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    <WidgetWrapper\n                      rootRef={this.refUnlistedAttributes}\n                      >\n                        <UnlistedAttributesWidget\n                          formName={SERIES_EDIT_FORM}\n                          seriesType={SeriesType.BASIC}\n                        />\n                    </WidgetWrapper>\n                  </Grid>\n                }\n                <Grid\n                  container={true}\n                  item={true}\n                >\n                  <WidgetWrapper\n                    rootRef={this.refFeatures}\n                  >\n                    <FeaturesWidget\n                      formName={SERIES_EDIT_FORM}\n                    />\n                  </WidgetWrapper>\n                </Grid>\n                <Grid\n                  container={true}\n                  item={true}\n                >\n                  <OptionsWidget />\n                </Grid>\n                <Grid container={true}>\n                  <AttachmentWidget />\n                </Grid>\n              </Grid>\n            </RootRef>\n          </ScrollTabContainer>\n        </form>\n        <FeaturesDialog\n          formName={SERIES_EDIT_FORM}\n          brandKey={'brand'}\n          isPimTool={isPimTool}\n        />\n        <OptionsDialog\n          series={series}\n        />\n        <AttributeDialog preAddedTags={preAddedTags} searchAfter={false} />\n        <DescriptionDialog attributeId={attributeId} preAddedTags={preAddedTags} searchAfter={false} />\n        <PrintDescriptionModal />\n        <PimIntegrationDialog\n          open={this.state.openPimIntegrationDailog}\n          isUpdate={true}\n          togglePimIntegrationDialog={() => this.setState({ openPimIntegrationDailog: false })}\n        />\n      </>\n    );\n  }\n}\n\nconst transformInitialValues = (series: IMap<Series>) => {\n\n  const file = series.get('file');\n  const attributes = series.get('attributes');\n  const description = series.get('description');\n  const productNumber = series.get('productNumber');\n  const mainFileId = series.getIn(['file', 'images', 'main', 'fileId']);\n  const price = series.get('price');\n  const bulkPrice = series.get('bulkPrice')?.size ? series.get('bulkPrice') : Map();\n  const purchasability = series.get('purchasability');\n\n  // BE use 1/0 flag but we need boolean for switch button as it accepts boolean type otherwise we get console error\n  const transformedIsPoaPrice = price && price.reduce((acc, priceRegion, priceRegionKey) => {\n    const transformPriceRegionIsPoa = priceRegion.reduce((_acc, currency, currencyKey) => {\n      const isPoaBooleanValue = Boolean(currency.get('isPoa'));\n      const transformedIsPoa = currency.set('isPoa', isPoaBooleanValue);\n      return _acc.set(currencyKey, transformedIsPoa);\n    }, Map());\n    return acc.set(priceRegionKey, transformPriceRegionIsPoa);\n  }, Map());\n\n  return Map().withMutations((ctx: any) => {\n    ctx.set('categoryName', fromJS({\n      value: series.get('categoryName'),\n      id: series.get('category')\n    }));\n\n    ctx.set('brand', fromJS({\n      value: series.get('brand'),\n      id: series.get('brandId')\n    }));\n\n    // if you patch series with an empty attributes or file object, BE response will send them back as empty array...\n    // thanks PHP\n    // manually setting it to object if empty\n    ctx.set('file', file && file.size ? file : Map());\n    ctx.set('attributes', attributes && attributes.size ? attributes : Map());\n\n    ctx.set('description', description);\n    ctx.set('productNumber', productNumber);\n    ctx.set('mainFileId', mainFileId);\n    ctx.set('price', transformedIsPoaPrice);\n    ctx.set('bulkPrice', bulkPrice);\n    ctx.set('purchasability', purchasability?.size ? purchasability : fromJS({ country: List() }) );\n  });\n};\n\nconst mapStateToProps = (state: any, props: any) => {\n  const series = makeSelectSelectedPimSeries()(state);\n  const initialValues = series.size ? transformInitialValues(series) : Map();\n  const attributeId = (getFormValues(ATTRIBUTE_DIALOG_FORM)(state) as Map<string, any> || Map()).getIn(['attribute', 'attributeId'])\n                      || (getFormValues(OPTIONS_DIALOG_FORM)(state) as Map<string, any> || Map()).getIn(['attribute', 'attributeId']);\n\n  const userHasAtsUserAcl = makeSelectUserIsAtsUser()(state);\n  const isPimTool = makeSelectIsPimTool()(state);\n  const seriesNotVisibleToUser = Boolean(!userHasAtsUserAcl && isPimTool && series && series.get('brandId') === 785);\n\n  return {\n    series,\n    attributeId,\n    initialValues,\n    isPimTool,\n    userHasAtsUserAcl,\n    seriesNotVisibleToUser,\n    ...createStructuredSelector({\n    scrollNode: makeSelectScrollNode(),\n    formValues: getFormValues(SERIES_EDIT_FORM),\n    products: makeSelectSearchedPimProductsList(),\n    mandatoryAttributes: makeSelectMandatoryAttributes(),\n  })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getSeriesDraft: (seriesId: number, onSuccess?: (series: IMap<Series>) => void, onFail?: () => void) => {\n      dispatch(new GetPimSeriesdDraftAction({ seriesId, onSuccess, onFail }));\n    },\n    setOptionDialogState: (payload: IMap<IAttributeOptionDialogState>) => {\n      dispatch(new SetOptionDialogStateAction(payload));\n    },\n    updateSeriesDraft: (seriesId: number, seriesInfo: Partial<Series>, redirectPath: string, skipAttributes: number[], onSuccess: (result: IMap<Series>) => void, onFinally: () => void) => {\n      dispatch(new UpdatePimSeriesDraftAction({\n        seriesId,\n        seriesInfo,\n        redirectPath,\n        skipAttributes,\n        onSuccess,\n        onFinally,\n      }));\n    },\n    addDraft: (series: IMap<Partial<Series>>, skipAttributes: number[], onSuccess: (result: IMap<Series>) => void, onFinally: () => void) => {\n      dispatch(new AddPimSeriesDraftAction({\n        series,\n        skipAttributes,\n        onSuccess,\n        onFinally,\n      }));\n    }\n  };\n};\n\nexport default compose(\n  withStyles(styles),\n  withAtsApi(),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: SERIES_EDIT_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true,\n  }),\n)(SeriesEditPage);\n","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var elevations = {};\n  theme.shadows.forEach(function (shadow, index) {\n    elevations[\"elevation\".concat(index)] = {\n      boxShadow: shadow\n    };\n  });\n  return _extends({\n    /* Styles applied to the root element. */\n    root: {\n      backgroundColor: theme.palette.background.paper,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create('box-shadow')\n    },\n\n    /* Styles applied to the root element if `square={false}`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` */\n    outlined: {\n      border: \"1px solid \".concat(theme.palette.divider)\n    }\n  }, elevations);\n};\nvar Paper = React.forwardRef(function Paper(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$square = props.square,\n      square = _props$square === void 0 ? false : _props$square,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 1 : _props$elevation,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'elevation' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"square\", \"elevation\", \"variant\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (classes[\"elevation\".concat(elevation)] === undefined) {\n      console.error(\"Material-UI: this elevation `\".concat(elevation, \"` is not implemented.\"));\n    }\n  }\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, variant === 'outlined' ? classes.outlined : classes[\"elevation\".concat(elevation)], !square && classes.rounded),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Paper.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Shadow depth, corresponds to `dp` in the spec.\n   * It accepts values between 0 and 24 inclusive.\n   */\n  elevation: PropTypes.number,\n\n  /**\n   * If `true`, rounded corners are disabled.\n   */\n  square: PropTypes.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['elevation', 'outlined'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiPaper'\n})(Paper);","import _ from 'lodash';\nimport i18next from 'i18next';\nimport {dateNoEarlierThan, dateNoLaterThan} from '../../../../validators';\nimport {\n  BID_INVITATION_DETAIL_ROOT_PATH,\n  DATE_INTERVAL,\n  PROJECT_LIST_DETAIL_PATH,\n  QUOTE_PATH,\n  VENDOR_QUOTATION_BID_PATH\n} from '../../../../constants';\nimport BidInvitationUtil from '../../../AutoQuotationDashboard/BidInvitationUtil';\nimport {TableColumn} from '../../../../models';\nimport utcToLocal from 'ats-utils/src/utcToLocal';\n\nconst getDefaultFilterOptions = () => {\n  return {\n    projectName: '',\n    to: '',\n    status: [],\n    bidDate: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n    createdAt: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n    updatedAt: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n  };\n};\n\nconst initFilterForm = () => {\n  const defaultOptions = getDefaultFilterOptions();\n  const formData = {\n    ...defaultOptions,\n    title: 'Sent Pricing Requests',\n    status: {\n      submitted: false,\n      pending: false,\n      declined: false\n    },\n  };\n\n  return formData;\n};\n\nconst getFiltersConfigToFormState = (filters: any) => {\n  const initData = filters.toJS();\n  const defaultOptions = getDefaultFilterOptions();\n  let filterResult = {\n    title: initData?.config?.title,\n    projectName: initData?.config?.filters?.projectName || '',\n    to: initData?.config?.filters?.to || '',\n    status: {},\n    bidDate: defaultOptions.bidDate,\n    createdAt: defaultOptions.createdAt,\n    updatedAt: defaultOptions.updatedAt,\n  };\n  if (!_.isEmpty(initData?.config?.filters)) {\n    const periodFilter = BidInvitationUtil.initPeriodFilter(initData?.config?.filters);\n    filterResult = {...filterResult, ...periodFilter};\n  }\n  filterResult.status = {\n    submitted: initData?.config?.filters?.status?.includes('submitted') || false,\n    pending: initData?.config?.filters?.status?.includes('pending') || false,\n    declined: initData?.config?.filters?.status?.includes('declined') || false\n  };\n  return filterResult;\n};\n\nconst generateSaveFilterOptions = (sourceValues: any) => {\n  const filterData = sourceValues.toJS();\n  const statusList = [];\n  if (filterData?.status?.submitted) {\n    statusList.push('submitted');\n  }\n  if (filterData?.status?.pending) {\n    statusList.push('pending');\n  }\n  if (filterData?.status?.declined) {\n    statusList.push('declined');\n  }\n  const parsingData = getDefaultFilterOptions();\n  if (filterData?.to) {\n    if (typeof filterData?.to === 'string') {\n      parsingData.to = filterData?.to;\n    } else {\n      parsingData.to = filterData?.to?.value;\n    }\n  }\n  parsingData.projectName = filterData?.projectName || '';\n  parsingData.status = statusList;\n  if (filterData.bidDate) {\n    parsingData.bidDate = filterData.bidDate;\n    if (parsingData.bidDate?.period && (!parsingData.bidDate?.startDate && !parsingData.bidDate?.endDate)) {\n      parsingData.bidDate.period = '';\n    }\n  }\n  if (filterData.createdAt) {\n    parsingData.createdAt = filterData.createdAt;\n    if (parsingData.createdAt?.period && (!parsingData.createdAt?.startDate && !parsingData.createdAt?.endDate)) {\n      parsingData.createdAt.period = '';\n    }\n  }\n  if (filterData.updatedAt) {\n    parsingData.updatedAt = filterData.updatedAt;\n    if (parsingData.updatedAt?.period && (!parsingData.updatedAt?.startDate && !parsingData.updatedAt?.endDate)) {\n      parsingData.updatedAt.period = '';\n    }\n  }\n  return parsingData;\n};\n\nconst startDateValidate = (value, allValues, field) => {\n  const period = allValues.getIn([field, 'period']);\n  const startDate = allValues.getIn([field, 'startDate']);\n  const endDate = allValues.getIn([field, 'endDate']);\n  const date: Date = new Date(startDate);\n  const noLaterThan: Date = new Date(endDate);\n  if (period === DATE_INTERVAL.CUSTOM) {\n    if (!startDate || !endDate) {\n      return undefined;\n    }\n  }\n  const message = i18next.t('translations:date.startBeforeEnd');\n  return dateNoLaterThan(date, noLaterThan, message);\n};\n\nconst endDateValidate = (value, allValues , field) => {\n  const period = allValues.getIn([field, 'period']);\n  const startDate = allValues.getIn([field, 'startDate']);\n  const endDate = allValues.getIn([field, 'endDate']);\n  const noEarlierThan: Date = new Date(startDate);\n  const date: Date = new Date(endDate);\n  if (period === DATE_INTERVAL.CUSTOM) {\n    if (!startDate || !endDate) {\n      return undefined;\n    }\n  }\n  return dateNoEarlierThan(date, noEarlierThan, 'End date should be after start date');\n};\n\nconst bidStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'bidDate');\n};\nconst bidEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'bidDate');\n};\n\nconst bidDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['bidDate', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n   return false;\n};\n\nconst createdStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'createdAt');\n};\nconst createdEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'createdAt');\n};\n\nconst createdDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['createdAt', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst updatedStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'updatedAt');\n};\nconst updatedEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'updatedAt');\n};\n\nconst updatedDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['updatedAt', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst getBidDetailUrl = (bidReponse) => {\n  let bidUrl = BID_INVITATION_DETAIL_ROOT_PATH + '/' + bidReponse.id;\n  if (bidReponse.status === 'submitted') {\n    bidUrl = VENDOR_QUOTATION_BID_PATH + '/' + bidReponse.id;\n  }\n  return bidUrl;\n};\n\nconst sortInvitationsResponses = (invitations, invitationSortingOptions) => {\n  if (!invitations || !invitationSortingOptions || invitationSortingOptions.length === 0) {\n    return invitations || [];\n  }\n\n  const sortedInvitations = invitations.map(invitation => {\n    const bidResponses = [...invitation.BidResponses];\n    const sortedResponses = bidResponses.sort((a, b) => {\n      for (const sortOption of invitationSortingOptions) {\n        const { columnId, direction } = sortOption;\n\n        let valueA;\n        let valueB;\n\n        if (columnId === 'createdAt') {\n          // Use the utcToLocal function for sorting\n          valueA = a.BidInvitation?.createdAt ? utcToLocal(a.BidInvitation.createdAt) : null;\n          valueB = b.BidInvitation?.createdAt ? utcToLocal(b.BidInvitation.createdAt) : null;\n        } else if (columnId === 'updatedAt') {\n          valueA = (a.status === 'pending' || !a.updatedAt) ? null : utcToLocal(a.updatedAt);\n          valueB = (b.status === 'pending' || !b.updatedAt) ? null : utcToLocal(b.updatedAt);\n        } else {\n          valueA = a[columnId];\n          valueB = b[columnId];\n        }\n        const isNullA = valueA === null || valueA === undefined;\n        const isNullB = valueB === null || valueB === undefined;\n        if (isNullA && !isNullB) { return direction === 'asc' ? -1 : 1; }\n        if (!isNullA && isNullB) { return direction === 'asc' ? 1 : -1; }\n\n        if (valueA !== valueB) {\n          if (direction === 'asc') {\n            return valueA > valueB ? 1 : -1;\n          } else {\n            return valueA < valueB ? 1 : -1;\n          }\n        }\n      }\n      return 0;\n    });\n\n    return {\n      ...invitation,\n      BidResponses: sortedResponses\n    };\n  });\n\n  return sortedInvitations;\n};\n\nconst getProjectUrl = (invitation) => {\n  return PROJECT_LIST_DETAIL_PATH + '/' + invitation?.Quote?.projectId;\n};\n\nconst getQuoteUrl = (invitation) => {\n  return QUOTE_PATH + '/' + invitation.quoteId;\n};\n\nconst wholeSalerTableColumns = () => {\n  const columns: TableColumn[] = [\n    { id: 'projectName', label: 'autoQuotationBidDetail.projectName', display: true, sortable: true },\n    { id: 'quoteNumber', label: 'pricingRequests.quoteRequestNumber', display: true, sortable: true },\n    { id: 'receipt', label: 'pricingRequests.receipt', display: true, sortable: true },\n    { id: 'status', label: 'autoQuotationBidDetail.status', display: true, sortable: true},\n    { id: 'createdAt', label: 'autoQuotationBidDetail.dateSent', display: true, sortable: true, beSortable: true },\n    { id: 'updatedAt', label: 'autoQuotationBidDetail.receivedDate', display: true, sortable: true, beSortable: true },\n    { id: 'actions', label: 'projectList.actionColumnLabel', display: true, sortable: true },\n  ];\n  return columns;\n};\n\nconst mappingInvitationSearchFilter = (filter) => {\n  if (filter?.name) {\n    filter.projectNames = filter?.name;\n  }\n  if (filter?.sorting) {\n    const sortingOptions = [];\n    if (filter?.sorting) {\n      _.map(filter?.sorting, (item) => {\n        if (item?.columnId === 'createdAt') {\n          sortingOptions.push(\n            {\n              BidInvitation: {\n                createdAt: item.direction\n              }\n            }\n          );\n        }\n      });\n      filter.sorting = sortingOptions;\n    }\n  }\n  if (filter?.countryId) {\n    filter.countryId = Number(filter.countryId);\n  }\n  if (filter?.provinceId) {\n    filter.provinceId = Number(filter.provinceId);\n  }\n  if (filter?.cityId) {\n    filter.cityId = Number(filter.cityId);\n  }\n  if (filter?.bidDateAt) {\n    filter['bidDate'] = filter?.bidDateAt;\n    delete filter?.bidDateAt;\n  }\n  delete filter?.name;\n};\n\nconst mappingResponseSearchFilter = (filter) => {\n  if (filter?.name) {\n    filter.projectNames = filter?.name;\n  }\n  if (filter?.sorting) {\n    const sortingOptions = [];\n    if (filter?.sorting) {\n      _.map(filter?.sorting, (item) => {\n        if (item?.columnId === 'createdAt') {\n          sortingOptions.push(\n            {\n              BidInvitationResponse: {\n                createdAt: item.direction\n              }\n            }\n          );\n        }\n        if (item?.columnId === 'updatedAt') {\n          sortingOptions.push(\n            {\n              BidInvitationResponse: {\n                updatedAt: item.direction\n              }\n            }\n          );\n        }\n      });\n      filter.sorting = sortingOptions;\n    }\n  }\n  if (filter?.countryId) {\n    filter.countryId = Number(filter.countryId);\n  }\n  if (filter?.provinceId) {\n    filter.provinceId = Number(filter.provinceId);\n  }\n  if (filter?.cityId) {\n    filter.cityId = Number(filter.cityId);\n  }\n  if (filter?.bidDateAt) {\n    filter['bidDate'] = filter?.bidDateAt;\n    delete filter?.bidDateAt;\n  }\n  delete filter?.name;\n};\n\nconst getPricingRequestDisplayColumnByToggle = () => {\n  return ['receipt', 'bidSubject', 'createdAt', 'updatedAt', 'actions'];\n};\n\nconst resetDisplayColumns = (columns) => {\n  const initHiddenColumn = getPricingRequestDisplayColumnByToggle();\n  const newColumns = columns.map(column => {\n    if (initHiddenColumn.includes(column['id'])) {\n      column['show'] = false;\n    } else {\n      column['show'] = true;\n    }\n    column['count'] = (column['count'] || 0) + 1;\n    return column;\n  });\n  return newColumns;\n};\n\nconst SendPricingRequestsWidgetUtil = {\n  getFiltersConfigToFormState,\n  initFilterForm,\n  generateSaveFilterOptions,\n  bidStartDateValidate,\n  bidEndDateValidate,\n  bidDateDisableChange,\n  createdStartDateValidate,\n  createdEndDateValidate,\n  createdDateDisableChange,\n  updatedStartDateValidate,\n  updatedEndDateValidate,\n  updatedDateDisableChange,\n  getBidDetailUrl,\n  getProjectUrl,\n  getQuoteUrl,\n  sortInvitationsResponses,\n  wholeSalerTableColumns,\n  mappingInvitationSearchFilter,\n  mappingResponseSearchFilter,\n  getPricingRequestDisplayColumnByToggle,\n  resetDisplayColumns,\n};\nexport default SendPricingRequestsWidgetUtil;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z\"\n}), 'Description');\n\nexports.default = _default;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport var easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nexport var duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\n\nfunction formatMs(milliseconds) {\n  return \"\".concat(Math.round(milliseconds), \"ms\");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\nexport default {\n  easing: easing,\n  duration: duration,\n  create: function create() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var _options$duration = options.duration,\n        durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n        _options$easing = options.easing,\n        easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n        _options$delay = options.delay,\n        delay = _options$delay === void 0 ? 0 : _options$delay,\n        other = _objectWithoutProperties(options, [\"duration\", \"easing\", \"delay\"]);\n\n    if (process.env.NODE_ENV !== 'production') {\n      var isString = function isString(value) {\n        return typeof value === 'string';\n      };\n\n      var isNumber = function isNumber(value) {\n        return !isNaN(parseFloat(value));\n      };\n\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('Material-UI: argument \"props\" must be a string or Array.');\n      }\n\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(\"Material-UI: argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\"));\n      }\n\n      if (!isString(easingOption)) {\n        console.error('Material-UI: argument \"easing\" must be a string.');\n      }\n\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('Material-UI: argument \"delay\" must be a number or a string.');\n      }\n\n      if (Object.keys(other).length !== 0) {\n        console.error(\"Material-UI: unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"]\"));\n      }\n    }\n\n    return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n      return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n    }).join(',');\n  },\n  getAutoHeightDuration: function getAutoHeightDuration(height) {\n    if (!height) {\n      return 0;\n    }\n\n    var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n    return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n  }\n};","export const DRAWER_ID = 'teamManagementUserDrawer';\n","'use strict';\n\nvar _decorator = require('./decorator');\n\nvar _decorator2 = _interopRequireDefault(_decorator);\n\nvar _reducer = require('./reducer');\n\nvar _reducer2 = _interopRequireDefault(_reducer);\n\nvar _server = require('./server');\n\nvar _root = require('./root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _tree = require('./tree');\n\nvar Tree = _interopRequireWildcard(_tree);\n\nvar _actions = require('./actions');\n\nvar Actions = _interopRequireWildcard(_actions);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n  local: _decorator2.default,\n  reducer: _reducer2.default,\n  stringifySafe: _server.stringifySafe,\n  Root: _root2.default,\n  Tree: Tree,\n  Actions: Actions\n};","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport raf from 'raf';\n\n// ==============================\n// NO OP\n// ==============================\nvar noop = function noop() {};\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n   @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n   @returns 'react-select__comp react-select__comp--some'\n*/\n\nfunction applyPrefixToName(prefix, name) {\n  if (!name) {\n    return prefix;\n  } else if (name[0] === '-') {\n    return prefix + name;\n  } else {\n    return prefix + '__' + name;\n  }\n}\n\nfunction classNames(prefix, state, className) {\n  var arr = [className];\n\n  if (state && prefix) {\n    for (var key in state) {\n      if (state.hasOwnProperty(key) && state[key]) {\n        arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n      }\n    }\n  }\n\n  return arr.filter(function (i) {\n    return i;\n  }).map(function (i) {\n    return String(i).trim();\n  }).join(' ');\n} // ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n  if (Array.isArray(value)) return value.filter(Boolean);\n  if (_typeof(value) === 'object' && value !== null) return [value];\n  return [];\n}; // ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n  if (onInputChange) {\n    var newValue = onInputChange(inputValue, actionMeta);\n    if (typeof newValue === 'string') return newValue;\n  }\n\n  return inputValue;\n} // ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n  return [document.documentElement, document.body, window].indexOf(el) > -1;\n} // Normalized Scroll Top\n// ------------------------------\n\nfunction getScrollTop(el) {\n  if (isDocumentElement(el)) {\n    return window.pageYOffset;\n  }\n\n  return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n  // with a scroll distance, we perform scroll on the element\n  if (isDocumentElement(el)) {\n    window.scrollTo(0, top);\n    return;\n  }\n\n  el.scrollTop = top;\n} // Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n  var style = getComputedStyle(element);\n  var excludeStaticParent = style.position === 'absolute';\n  var overflowRx = /(auto|scroll)/;\n  var docEl = document.documentElement; // suck it, flow...\n\n  if (style.position === 'fixed') return docEl;\n\n  for (var parent = element; parent = parent.parentElement;) {\n    style = getComputedStyle(parent);\n\n    if (excludeStaticParent && style.position === 'static') {\n      continue;\n    }\n\n    if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n      return parent;\n    }\n  }\n\n  return docEl;\n} // Animated Scroll To\n// ------------------------------\n\n/**\n  @param t: time (elapsed)\n  @param b: initial value\n  @param c: amount of change\n  @param d: duration\n*/\n\nfunction easeOutCubic(t, b, c, d) {\n  return c * ((t = t / d - 1) * t * t + 1) + b;\n}\n\nfunction animatedScrollTo(element, to) {\n  var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n  var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n  var start = getScrollTop(element);\n  var change = to - start;\n  var increment = 10;\n  var currentTime = 0;\n\n  function animateScroll() {\n    currentTime += increment;\n    var val = easeOutCubic(currentTime, start, change, duration);\n    scrollTo(element, val);\n\n    if (currentTime < duration) {\n      raf(animateScroll);\n    } else {\n      callback(element);\n    }\n  }\n\n  animateScroll();\n} // Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n  var menuRect = menuEl.getBoundingClientRect();\n  var focusedRect = focusedEl.getBoundingClientRect();\n  var overScroll = focusedEl.offsetHeight / 3;\n\n  if (focusedRect.bottom + overScroll > menuRect.bottom) {\n    scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n  } else if (focusedRect.top - overScroll < menuRect.top) {\n    scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n  }\n} // ==============================\n// Get bounding client object\n// ==============================\n// cannot get keys using array notation with DOMRect\n\nfunction getBoundingClientObj(element) {\n  var rect = element.getBoundingClientRect();\n  return {\n    bottom: rect.bottom,\n    height: rect.height,\n    left: rect.left,\n    right: rect.right,\n    top: rect.top,\n    width: rect.width\n  };\n}\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n  try {\n    document.createEvent('TouchEvent');\n    return true;\n  } catch (e) {\n    return false;\n  }\n} // ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n  try {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n  } catch (e) {\n    return false;\n  }\n}\n\nexport { getScrollParent as a, getScrollTop as b, animatedScrollTo as c, isMobileDevice as d, isDocumentElement as e, cleanValue as f, getBoundingClientObj as g, scrollIntoView as h, isTouchCapable as i, classNames as j, handleInputChange as k, noop as n, scrollTo as s };\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { DashboardState } from './types';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added DashboardModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\n\nexport const makeSelectWidgetAdmins = () => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.get('widgetAdmins')\n);\n\nexport const makeSelectWidgetAdminByWidgetId = (widgetId: number) => createSelector(\n  makeSelectWidgetAdmins(),\n  (widgetAdmins) => widgetAdmins.get(widgetId)\n);\n\nexport const makeSelectWidgetLoadedOnce = (userWidgetId: number) => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.getIn(['widgets', userWidgetId, 'widgetLoadedOnce'], false)\n);\n\nexport const makeSelectWidgets = () => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.get('widgets')\n);\n\nexport const makeSelectWidget = ({userWidgetId}: {userWidgetId: number}) => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => {\n    const userWidget = state.getIn(['widgets', userWidgetId], Map());\n    return userWidget;\n  }\n);\n\nexport const makeSelectWidgetCount = (userWidgetId: number) => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.getIn(['widgets', userWidgetId, 'count'])\n);\n\nexport const makeSelectWidgetHasNextPage = (userWidgetId: number) => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.getIn(['widgets', userWidgetId, 'hasNextPage'])\n);\n\nexport const makeSelectIsFetchingWidgetDataById = (userWidgetId: number) => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.getIn(['widgets', userWidgetId, 'isFetchingWidgetData'])\n);\n\nexport const makeSelectAllowBatchWidgetsDataFetch = () => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => state.get('allowBatchedWidgetsDataFetch')\n);\n\nexport const makeSelectDashboard = () => createSelector(\n  selectReducerState(),\n  (state: DashboardState) => {\n    return state.get('dashboard');\n  }\n);\n\nexport default {\n  selectReducerState,\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  makeSelectProject,\n} from '../ProjectModule/selectors';\n\nimport {\n  IMap, IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Project,\n  Spec,\n  Drawing,\n  DrawingRules,\n} from '../../models';\n\nimport {\n  List,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IPrintReducerState,\n} from './reducer';\nimport { IPrintObj } from './actions';\nimport { SPEC_PRINT_TYPE } from '../../constants';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added PrintModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectShouldDisableContinuePrint = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('shouldDisableContinueForPrint'),\n);\n\nexport const makeSelectPrintFailToggle = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('printFailToggle'),\n);\n\nexport const makeSelectCoverImages = (type: SPEC_PRINT_TYPE) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.getIn(['coverImages', type]),\n);\n\nexport const makeSelectDownloadHistory = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('downloadHistory') || List<IMap<IPrintObj>>(),\n);\nexport const makeSelectPrintHistoryLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('printHistoryLoading')\n);\nexport const makeSelectSpecPrintError = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('specPrintError')\n);\nexport const makeSelectSelectedPrintType = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPrintReducerState>) => state.get('selectedPrintType')\n);\nexport const makeSelectBulkDownloadStatus = (hash) => createSelector(\n  selectReducerState(),\n    (state: IMapNonRecursive<IPrintReducerState>) => state.getIn(['bulkDownloadStatus', hash]),\n);\nexport default {\n  selectReducerState,\n};\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAAA0CAYAAAApDX79AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAASKADAAQAAAABAAAANAAAAACsE0shAAAEmklEQVRoBe1aTWgTQRR+m00aW23TFm8qom0Rz+IvKHrTQw8VFAp6UkFFFKF4EDx70pMIQhH8OYl6UfEiCJ56qBb8/8Uf1IM/bdPW1DTZjO8bd0Ia25nVktlt3Qcvs5n35s37vryZzCZLFEvMQMxAzEDMQMxAzEDMwP/JgGOArexoK68NwyJpFn5WaCuvtckmNVZFCtoEq+u3lf2a4ZExKULQllg9vw1EUhCC4JMa3rn7U+n120a+NkrT5V7hrlyhKs7oPxMH79kLMbJrb6C5Eu3LR5uvXFzE8xVYi/68iqgp09ARhAGonBRrvff8VRM6AkmpFCjhQLFMTjyXKCqsemfv+UtgqPe9VDVpB4GA6QQgsaxAUMN0TrOwH1iACdiMH6SOIGAvVxDezBFBBYEgE3YJV+cEdmHHMqyT3nPjBViACdhmXEGgBEFMexX8ZosAi5EYBUZXQfBBIKVqTE1a78kz8h4/rUnsqqAKTyCSIlMZudNn+PgmqPH82So84b41VVBNsxNfvkpSCnfuUqH/ARXuDxCuQZS01XT2YMFDraDx3guUv3GbKJ8vZzt27ARROk3pzm3UcLyn3B/WRagEuR1tJHK5SdiFx3cC3AdbFCScJeaToiOhbKsi0DZpdggqeuQ9eiL3FuwvoweOUun9B0p2tE+L121vkz7wpRLfFfA4GYNj2RQ7Syzp0si+Q+TUpclpyZD37gONHjxKTZd6KdHaQqXBoUmYEy3NRBMT0sf7+JmyXd0khrIkJvLU0sebuEWxQxADchcvouKrN0TZrIQH4MNbu0hUbNAKd2loeJINhEKSIexLdpYYg3OaMxJk5ctU5Cj7VDYn82cM5V+rtuYEibEflDt5ior9AzPGUORzEmIhpi2pOUHOgvmUWr+GEkuXzBgTYqTWrSbEtCVW9qDU5o2U2biB8leu0/i584Q95m8kwcuzfv8eSu/YzhsRfsaxJzWvoDIU16V09w7K3LxK83Z3l7tNF/DN3Lomx9omB7nZI8hnAsujoecwpTasNXEjlyZ8bS6p6qSsLLHqSfFefB8sdzsO//KQ8D8rPhQKPhRKn6rzUXmAxYtwCOL7rYaeI+S0NvNBsZWcTBMV7t6TsFNbNpHIjvDhcZDEIO9VuDfj5RmWhEMQA06uWVWF2f/9im0On65d1ihIOARNgRy3EVGUyBBE+Yko8mP/WyySLGiSikwF1XV1atIMz2T9HBQe1H+bOSbIwJuJIJzYlBpCzRqzwvP7NGpIO8gehEBFWtHxw3nzNtBDDAInY0uCuZxkEBj8Sbcty9HDPjwKEogcQNAhwfE1zbqAtZV1od/iGSH0m6qPXSIheMwFh6xRVtzffPPbMW7Rr/2R20Q9guNho3HWEVbIT9bAT0fIEeG+KAz4fwkYgAWY0G8UHUEoQ7CLYOrPK5zm1NMRuupjt8jI7y2C/wbgjEAOsAATsBmXmo4gHi9ZRjAI1i4mwJjZsrw4VSmoFuQPLEoDVZCuCmBTCkKwJ6FVfbqx7BYZQZUoBSmoHLSqT1tFJpDKrkjhuNqNHfaoiiJCEYM8VV9Uc47zihmIGfjPGfgFaclGShqQrnwAAAAASUVORK5CYII=\"","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  Grid,\n  Typography,\n  CircularProgress,\n  IconButton,\n  Tooltip,\n  Popover,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { Image } from '..';\nimport { AlternativeProduct, Spec, XrefData } from '../../models';\nimport { List, Map } from 'immutable';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport {\n  makeSelectAlternativeProducts,\n  makeSelectGettingSpec, makeSelectMasterProjectspec,\n  makeSelectMode, makeSelectSearchingGetMasterSpecById, makeSelectSearchingGetTemplateSpecById,\n  makeSelectSpec, makeSelectTemplateProjectSpec\n} from '../../modules/SpecModule/selectors';\nimport { DeleteAlternativeProductAction } from '../../modules/SpecModule/actions';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { ALTERNATIVES_MODAL_ID } from '../../containers/AlternativesModal';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport {AMPLITUDE_EVENT, Mode} from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { GetAlternativesXrefAction } from '../../modules/CrossRefModule/actions';\nimport { makeSelectSearchingXrefs, makeSelectSelectedCompetitorProductIdXrefData } from '../../modules/CrossRefModule/selectors';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {useLayoutEffect} from 'react';\n\nexport const ALTERNATIVES_DROP_DOWN_ID = 'ALTERNATIVES_DROP_DOWN_ID';\n\ninterface IAlternativesDropDownContentComponentProps {\n  readonly?: boolean;\n  disableManageAlternativeButton?: boolean;\n}\n\ninterface IAlternativesDropDownContentProps extends IAlternativesDropDownContentComponentProps {\n  overlayProps: { [key: string]: any };\n  alternativeProducts: List<IMap<AlternativeProduct>>;\n  searchingSpec: boolean;\n  searchingXrefs: boolean;\n  xrefDataList: List<IMap<XrefData>>;\n  selectedSpec: IMap<Spec>;\n  dispatch: (s: IAction) => void;\n  closePopper: () => void;\n  deleteAlternativeProduct: (specId: number, drawingId: number, productId: number, alternativeId: number) => void;\n}\n\ntype IAlternativesDropDownContent = IAlternativesDropDownContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: 435,\n    zIndex: 1500,\n  },\n  listContainer: {\n    borderBottom: '1px solid lightgray',\n    padding: theme.spacing()\n  },\n  emptyContainer: {\n    width: '100%',\n    height: 72,\n    borderBottom: '1px solid lightgray',\n    padding: theme.spacing()\n  },\n  fullWidth: {\n    width: '100%'\n  },\n  editButton: {\n    width: '100%',\n    padding: theme.spacing(1.5)\n  },\n  warningContainer: {\n    width: 25,\n    margin: theme.spacing(0, 1, 0, 1.5)\n  },\n  warning: {\n    color: theme.palette.warning.main\n  },\n  indicator: {\n    color: '#757575',\n  }\n});\n\nconst AlternativesDropDown = (props: IAlternativesDropDownContent) => {\n  const {\n    classes,\n    overlayProps,\n    alternativeProducts,\n    searchingSpec,\n    searchingXrefs,\n    xrefDataList,\n    selectedSpec,\n    deleteAlternativeProduct,\n    closePopper,\n    dispatch,\n    t,\n    readonly = false,\n  } = props;\n  const {\n    anchorEl,\n    specId,\n    drawingId,\n    productId,\n    seriesName,\n    specProductId,\n    productIndex,\n\n    basisProductNumber,\n    basisBrand,\n    basisBrandId,\n    basisCategoryname,\n    basisCategoryId,\n\n    filterBrandId,\n    disableManageAlternativeButton = false,\n    disableActions = false,\n  } = overlayProps;\n\n  const [selectedAlternativeId, setSelectedAlternativeId] = React.useState(null);\n\n  const amplitudeData = useAmplitudeData();\n\n  const isAi = selectedSpec?.get('isAi');\n\n  React.useEffect(() => {\n    if (anchorEl && alternativeProducts.count()) {\n      dispatch(new GetAlternativesXrefAction({\n        competitorProductId: productId,\n        competitorProductSeriesName: seriesName,\n        competitorProductProductNumber: basisProductNumber || '',\n        competitorProductBrand: basisBrand || '',\n        competitorProductBrandId: basisBrandId,\n        competitorProductCategoryName: basisCategoryname || '',\n        competitorProductCategoryId: basisCategoryId,\n        options: {\n          orderBy: {\n            competitorProductType: 1,\n            sponsorRank: -1,\n            isFirmSpecific: 1,\n            id: 1,\n          }\n        }\n      }));\n    }\n  }, [anchorEl]);\n\n  React.useEffect(() => {\n    return () => {\n      closePopper();\n    };\n  }, []);\n\n  // id map of sponsorProducts from xref search\n  const xrefSponsorProductIdMap = xrefDataList.reduce((acc, value, index) => {\n    return acc.setIn([value.get('sponsorProductType'), value.getIn(['sponsorProduct', 'id'])], value);\n  }, Map({ product: Map(), series: Map() }));\n\n  let filteredAlts = alternativeProducts;\n  if (filterBrandId != null) {\n    filteredAlts = alternativeProducts.filter((alternativeProduct) => alternativeProduct.get('manufacturerId') === filterBrandId);\n  }\n  filteredAlts = filteredAlts.map((alternativeProduct) => {\n    const isManufacturerAlt = !alternativeProduct.get('productId') && !alternativeProduct.get('seriesId');\n    const alternativeProductId = alternativeProduct.get('productId');\n    if (isManufacturerAlt || xrefSponsorProductIdMap.get(alternativeProductId ? 'product' : 'series').has(alternativeProductId ? alternativeProductId : alternativeProduct.get('seriesId'))) {\n      return alternativeProduct;\n    } else {\n      return alternativeProduct.set('outDated', true);\n    }\n  });\n\n  const handleDeleteLog = (alternativeProduct: IMap<AlternativeProduct>) => {\n    amplitude.logEvent(AMPLITUDE_EVENT.deleteAlternative, amplitudeData({\n      basisProductId: productId,\n      basisProductNumber,\n      basisBrand,\n      basisCategoryname,\n      alternativeProductId: alternativeProduct.get('productId'),\n      alternativeProductNumber: alternativeProduct.get('productNumber'),\n      alternativeSeriesId: alternativeProduct.get('seriesId'),\n      alternativeSeriesName: alternativeProduct.get('seriesName'),\n      alternativeManufacturer: alternativeProduct.get('manufacturer'),\n      alternativeCategoryName: alternativeProduct.get('categoryName')\n    }));\n  };\n\n  useLayoutEffect(() => {\n    if (filteredAlts.size === 0) {\n      closePopper();\n    }\n  }, [filteredAlts.size]);\n  return (\n    <Popover\n        onClose={() => closePopper()}\n        anchorOrigin={{\n          vertical: 'bottom',\n          horizontal: 'left',\n        }}\n        transformOrigin={{\n          vertical: 'top',\n          horizontal: 'left',\n        }}\n      open={Boolean(anchorEl)}\n      anchorEl={anchorEl}\n      PaperProps={{\n        className: classes.root,\n        elevation: 3\n      }}\n     >\n          {\n            filteredAlts.count() && searchingXrefs\n              ? (\n                  <Grid container={true} justify='center' alignItems='center' wrap='nowrap' className={classes.emptyContainer}>\n                    <CircularProgress color='primary' style={{ marginRight: 8}} />\n                    <Typography>\n                      {t('alternativeDropDown.verifyingAlternatives')}\n                    </Typography>\n                  </Grid>\n                )\n              : (<>{\n                filteredAlts.map((alternativeProduct: IMap<AlternativeProduct>, index: number) => {\n                    const id = alternativeProduct.get('id');\n                    const alternativeProductId = alternativeProduct.get('productId');\n                    const isAlternativeProduct = alternativeProductId || alternativeProduct.get('seriesId');\n                    const productNumber = alternativeProduct.get('productNumber');\n                    const _seriesName = alternativeProduct.get('seriesName');\n                    const manufacturer = alternativeProduct.get('manufacturer');\n                    const category = alternativeProduct.get('categoryName');\n                    const note = alternativeProduct.get('note');\n                    const productSrc = alternativeProduct.getIn(['file', 'images', 'main', 'fileId']);\n                    const manufacturerSrc = alternativeProduct.get('manufacturerLogo');\n                    const imgSrc = productSrc\n                      ? productSrc + '|resize:40,40'\n                      : manufacturerSrc || 'undefined|resize:40,40';\n                    const outDated = alternativeProduct.get('outDated');\n                    return (\n                      <Grid key={alternativeProduct.get('id')} className={classes.listContainer}>\n                        <Grid container={true} justify='space-around' alignItems='center' wrap='nowrap'>\n                          <Grid item={true} style={{ width: '50px', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\n                            {isAlternativeProduct ? alternativeProductId ? <FontAwesomeIcon icon='box' className={classes.indicator}/> : <AccountTreeIcon className={classes.indicator}/> : null}\n                          </Grid>\n                          <Grid>\n                            <Image src={imgSrc} fromService={true} aspectRatio={'100%'} width={'40px'} margin={'8px'} />\n                          </Grid>\n                          <Grid container={true} direction='column' alignContent='flex-start' style={{ width: 'calc(100% - 120px)' }}>\n                            {\n                              isAlternativeProduct && (\n                                <Tooltip title={(alternativeProductId ? productNumber : _seriesName) || ''}>\n                                  <Typography color='textPrimary' noWrap={true} className={classes.fullWidth}>\n                                    {alternativeProductId ? productNumber : _seriesName}\n                                  </Typography>\n                                </Tooltip>\n                              )\n                            }\n                            {\n                              manufacturer && (\n                                <Tooltip title={manufacturer || ''}>\n                                  <Typography color={isAlternativeProduct ? 'initial' : 'textPrimary'} noWrap={true} className={classes.fullWidth}>\n                                    {manufacturer}\n                                  </Typography>\n                                </Tooltip>\n                              )\n                            }\n                            <Tooltip title={category || ''}>\n                              <Typography noWrap={true} className={classes.fullWidth}>\n                                {category}\n                              </Typography>\n                            </Tooltip>\n                            {\n                              note && (\n                                <Tooltip title={note || ''}>\n                                  <Typography noWrap={true} className={classes.fullWidth}>\n                                    {note}\n                                  </Typography>\n                                </Tooltip>\n                              )\n                            }\n                          </Grid>\n                          <Grid container={true} justify='center' style={{ width: 60 }}>\n                            {\n                              searchingSpec && id === selectedAlternativeId\n                                ? <CircularProgress color='primary' size='1.75rem' />\n                                : !readonly ? (\n                                    <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                                      <span>\n                                        <IconButton\n                                          disabled={isAi || disableActions}\n                                          onClick={() => {\n                                          setSelectedAlternativeId(id);\n                                          deleteAlternativeProduct(specId, drawingId, specProductId, id);\n                                          handleDeleteLog(alternativeProduct);\n                                        }}>\n                                          <DeleteIcon />\n                                        </IconButton>\n                                      </span>\n                                    </Tooltip>\n                                  ) : null\n                            }\n                          </Grid>\n                        </Grid>\n                        {\n                          outDated && (\n                            <Grid container={true} direction='row' alignItems='center' className={classes.typesContainer}>\n                              <Grid item={true} container={true} alignItems='center' className={classes.warningContainer}>\n                                <WarningIcon className={classes.warning} />\n                              </Grid>\n                              <Grid item={true}>\n                                <Typography color='textPrimary' style={{ fontSize: '0.7em' }}>\n                                  {alternativeProductId ? t('alternativeModal.noLongerRecommended') : t('alternativeModal.noLongerRecommendedSeries')}\n                                </Typography>\n                              </Grid>\n                            </Grid>\n                          )\n                        }\n                      </Grid>\n                    );\n                  })\n                }</>)\n          }\n          {\n            !alternativeProducts.count() && (\n              <Grid container={true} justify='center' alignContent='center' className={classes.emptyContainer}>\n                <Typography>\n                  {t('alternativeDropDown.noAlternativeProducts')}\n                </Typography>\n              </Grid>\n            )\n          }\n          {\n            (disableManageAlternativeButton || disableActions) ? null : <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n              <Grid\n                  container={true}\n                  justify='center'\n                  className={classes.editButton}\n                  onClick={(isAi || searchingSpec || readonly) ? null : () => {\n                    dispatch(new SetOverlayComponentPropsAction({\n                      id: ALTERNATIVES_MODAL_ID,\n                      props: {\n                        specId,\n                        drawingId,\n                        productId,\n                        productIndex\n                      }\n                    }));\n                    dispatch(new ToggleOverlayComponentAction({\n                      id: ALTERNATIVES_MODAL_ID,\n                      open: true\n                    }));\n                    closePopper();\n                  }}\n              >\n                <Button\n                    color='primary'\n                    disabled={searchingSpec || isAi || readonly}\n                >\n                  {t('alternativeDropDown.manageAlternatives')}\n                </Button>\n              </Grid>\n            </Tooltip>\n          }\n    </Popover>\n  );\n};\n\nconst mapStateToProps = (state: any) => {\n  const overlayProps = makeSelectOverlayComponentProp(ALTERNATIVES_DROP_DOWN_ID)(state);\n  const index = overlayProps.productIndex;\n  const specId = overlayProps.specId;\n  const mode = makeSelectMode()(state);\n  let selectedSpecSelector = makeSelectSpec({ specId });\n  if (mode === Mode.master) {\n    selectedSpecSelector = makeSelectMasterProjectspec({ specId });\n  }\n  if (mode === Mode.masterTemplate) {\n    selectedSpecSelector = makeSelectTemplateProjectSpec({ specId });\n  }\n  let searchingSpecSelector = makeSelectGettingSpec();\n  if (mode === Mode.master) {\n    searchingSpecSelector = makeSelectSearchingGetMasterSpecById();\n  }\n  if (mode === Mode.masterTemplate) {\n    searchingSpecSelector = makeSelectSearchingGetTemplateSpecById();\n  }\n  return {\n    overlayProps,\n    ...createStructuredSelector({\n      alternativeProducts: makeSelectAlternativeProducts({ index }),\n      searchingSpec: searchingSpecSelector,\n      searchingXrefs: makeSelectSearchingXrefs(),\n      xrefDataList: makeSelectSelectedCompetitorProductIdXrefData(),\n      selectedSpec: selectedSpecSelector,\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    closePopper: () => {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: ALTERNATIVES_DROP_DOWN_ID,\n        props: {\n          anchorEl: null\n        }\n      }));\n    },\n    deleteAlternativeProduct: (specId: number, drawingId: number, productId: number, alternativeId: number) => {\n      dispatch(new DeleteAlternativeProductAction({\n        specId,\n        drawingId,\n        productId,\n        alternativeId\n      }));\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IAlternativesDropDownContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(AlternativesDropDown);","import * as React from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Typography,\n  Card,\n  WithTheme,\n  Tooltip,\n  IconButton, Icon, SvgIcon,\n} from '@material-ui/core';\nimport {\n  AlternativeProduct,\n  XrefType,\n} from '../../../models';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { AtsSvgProduct, AtsSvgSeries } from '../../../components/AtsSvg';\nimport { createStructuredSelector } from 'reselect';\nimport StarIcon from '@material-ui/icons/Star';\nimport { makeSelectUserFirmId } from '../../../modules/AtsModule/selectors';\nimport { makeSelectUserFirmCompanyAltName, makeSelectUserFirmCompanyName } from '../../../modules/AccountModule/selectors';\nimport { iconSelect } from '../../XrefExpansion';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { fromJS, List } from 'immutable';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { Image } from '../../../components';\nimport undefinedPNG from '../../../images/undefined.png';\nimport classnames from 'classnames';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport { AtsApiCallAction } from '../../../modules/AtsModule/actions';\nimport { UpdateDetailedManufacturerMapAction } from '../../../modules/ListModule/actions';\nimport { makeSelectmanufacturerLogoId } from '../../../modules/ListModule/selectors';\n\ninterface IProductCardComponentProps {\n  alternativeProduct: IMap<Partial<AlternativeProduct>>;\n  xrefTypes?: List<IMap<XrefType>>;\n  isSelected?: boolean;\n  displayDeleteIcon?: boolean;\n  toggleAlternativeProduct: (productId: number, type: 'productId' | 'seriesId') => void;\n}\n\ninterface IProductCardProps extends IProductCardComponentProps {\n  selfFirmId: number;\n  companyName: string;\n  dispatch: (s: IAction) => void;\n}\n\ntype IProductCardType = IProductCardProps & WithTheme & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  cardContainer: {\n    width: 220,\n    height: 220,\n    padding: theme.spacing(.5),\n    '&:hover': {\n      boxShadow: theme.shadows[5]\n    },\n  },\n  default: {\n    cursor: 'pointer',\n  },\n  selected: {\n    border:  `2px solid ${theme.palette.primary[700]}`\n  },\n  typesContainer: {\n    margin: theme.spacing(0, 1),\n    height: '2em'\n  },\n  typeIcon: {\n    margin: '0 2px',\n  },\n  fullWidth: {\n    width: '100%'\n  },\n  actionIcon: {\n    position: 'absolute',\n    top: 20,\n    right: 20\n  },\n  warningIcon: {\n    color: theme.palette.warning.main,\n    position: 'absolute',\n    top: 54,\n    left: 24\n  },\n  indicator: {\n    position: 'absolute',\n    top: 27,\n    left: 26,\n    color: '#757575',\n    fontSize: '1.2rem'\n  }\n});\n\nconst ProductCard = (props: IProductCardType) => {\n  const {\n    classes,\n    theme,\n    alternativeProduct,\n    xrefTypes, // a falsy xrefTypes means this is an orphaned alternativeProduct\n    isSelected,\n    displayDeleteIcon,\n    selfFirmId,\n    companyName,\n    toggleAlternativeProduct,\n    dispatch,\n    t\n  } = props;\n\n  const productId = alternativeProduct.get('productId');\n  const alternativeType = productId ? 'productId' : 'seriesId';\n  const productNumber = alternativeProduct.get('productNumber');\n  const seriesName = alternativeProduct.get('seriesName');\n  const seriesId = alternativeProduct.get('seriesId');\n  const manufacturer = alternativeProduct.get('manufacturer');\n  const manufacturerId = alternativeProduct.get('manufacturerId');\n  const category = alternativeProduct.get('categoryName');\n  const src = alternativeProduct.getIn(['file', 'images', 'main', 'fileId']);\n  const types = xrefTypes || List();\n\n  const logoId = useSelector(makeSelectmanufacturerLogoId(manufacturer));\n\n  React.useEffect(() => {\n    if (!src && logoId === undefined && manufacturer) {\n      dispatch(new AtsApiCallAction(\n        {\n          payload: {\n            service: 'product',\n            endpoint: 'getManufacturerById',\n            params: {\n              manufacturerId\n            },\n          },\n        },\n        (apiResp) => {\n          if (!apiResp.err) {\n            const immutableResp = fromJS(apiResp);\n            const _src: string = immutableResp.getIn(['data', 'payload', 'product', 'manufacturer', 0, 'manufacturerLogo']);\n            dispatch(new UpdateDetailedManufacturerMapAction({ manufacturer, detailedManufacturer: fromJS({ name: manufacturer, logoId: _src }) }));\n          }\n        },\n      ));\n    }\n  }, [src, logoId]);\n\n  const typesIcon = types.map((_type: IMap<XrefType>, key: number) => (\n    <Grid key={key}>\n      { iconSelect(_type.get('type'), 14) }\n      {\n        _type.get('type') === 'firm' && _type.get('referenceId') === selfFirmId && (\n          <Tooltip title={`${companyName} ${t('crossReferenceTypes.firm')}`}>\n            <StarIcon style={{ width: 14, height: 14}} color='action' />\n          </Tooltip>\n        )\n      }\n    </Grid>\n  ));\n\n  return (\n    <Card\n      className={classnames(classes.cardContainer, displayDeleteIcon ? classes.selected : classes.default)}\n      onClick={displayDeleteIcon ? null : () => toggleAlternativeProduct(productId ? productId : seriesId, alternativeType)}\n      variant='outlined'\n    >\n      <Grid container={true}>\n        <Grid container={true} justify='center'>\n          {\n            alternativeType === 'productId' ? <Tooltip title={t('alternativeModal.alternativeProduct')}>\n                  <SvgIcon className={classes.indicator}><FontAwesomeIcon icon='box'/></SvgIcon>\n            </Tooltip> : <Tooltip title={t('alternativeModal.alternativeSeries')}>\n              <AccountTreeIcon className={classes.indicator}/>\n            </Tooltip>\n          }\n          {\n            !xrefTypes && (\n              <Tooltip title={productId ? t('alternativeModal.noLongerRecommended') : t('alternativeModal.noLongerRecommendedSeries')}>\n                <WarningIcon className={classes.warningIcon} />\n              </Tooltip>\n            )\n          }\n\n          <Image src={(src ? src : logoId) || undefinedPNG} fromService={(src || logoId) ? true : false} aspectRatio={'100%'} width={'100px'} margin={'8px auto 0'} />\n          {\n            displayDeleteIcon && (\n              <IconButton size='small' className={classes.actionIcon} onClick={() => toggleAlternativeProduct(productId ? productId : seriesId, alternativeType)}>\n                <DeleteIcon color='action' />\n              </IconButton>\n            )\n          }\n        </Grid>\n        <Grid item={true} xs={12} style={{ padding: theme.spacing(1, 1, 0, 1) }}>\n          <Grid container={true} direction='column'>\n            <Grid container={true} wrap={'nowrap'}>\n              <Tooltip title={productNumber || ''}>\n                <Typography color='textPrimary' variant='caption' noWrap={true} className={classes.fullWidth}>\n                  {alternativeType === 'productId' ? productNumber : seriesName}\n                </Typography>\n              </Tooltip>\n            </Grid>\n            <Tooltip title={manufacturer || ''}>\n              <Typography color='textPrimary' variant='caption' noWrap={true} className={classes.fullWidth}>\n                {manufacturer}\n              </Typography>\n            </Tooltip>\n            <Tooltip title={category || ''}>\n              <Typography color='textPrimary' variant='caption' noWrap={true} className={classes.fullWidth}>\n                {category}\n              </Typography>\n            </Tooltip>\n          </Grid>\n        </Grid>\n        {\n          xrefTypes && (\n            <Grid item={true} container={true} direction='row' alignItems='center' className={classes.typesContainer}>\n              <Typography color='textPrimary' variant='caption' style={{ marginRight: 4 }} noWrap={true}>\n                {t('CrossReference.crossTypes')}:\n              </Typography>\n              { typesIcon.map((typeIcon, key) => <Grid key={key} item={true} className={classes.typeIcon}>{typeIcon}</Grid>) }\n            </Grid>\n          )\n        }\n      </Grid>\n    </Card>\n  );\n};\n\nconst mapStateToProps = (state: any) => {\n  const _companyName = makeSelectUserFirmCompanyName()(state);\n  const companyAltName = makeSelectUserFirmCompanyAltName()(state);\n  const companyName = _companyName || companyAltName || '';\n  return {\n    companyName,\n    ...createStructuredSelector({\n      selfFirmId: makeSelectUserFirmId(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductCardComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductCard);","import * as React from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Card,\n  WithTheme,\n  Tooltip,\n  TextField,\n  IconButton,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  AlternativeProduct,\n  Manufacturer,\n} from '../../../models';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { fromJS, List } from 'immutable';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport undefinedPNG from '../../../images/undefined.png';\nimport { Image } from '../../../components';\nimport { AtsApiCallAction } from '../../../modules/AtsModule/actions';\nimport { UpdateDetailedManufacturerMapAction } from '../../../modules/ListModule/actions';\nimport { makeSelectDetailedManufacturerMap } from '../../../modules/ListModule/selectors';\n\ninterface IManufacturerCardComponentProps {\n  alternativesManufacturer: IMap<AlternativeProduct>;\n  categoryId: number;\n  manufacturers: List<IMap<Manufacturer>>;\n  isFetchingManufacturers: boolean;\n  deleteAlternativeManufacturer: (id: number) => void;\n  updateAlternativeManufacturer: (newAlternativeManufacturer: IMap<Partial<AlternativeProduct>>) => void;\n}\n\ninterface IManufacturerCardProps extends IManufacturerCardComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype IManufacturerCardType = IManufacturerCardProps & WithTheme & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  cardContainer: {\n    width: 220,\n    height: 220,\n    padding: theme.spacing(0.5, 0.5, 0, 0.5),\n    border:  `2px solid ${theme.palette.primary[700]}`,\n    '&:hover': {\n      boxShadow: theme.shadows[5]\n    }\n  },\n  actionIcon: {\n    position: 'absolute',\n    top: 20,\n    right: 20\n  },\n  manufacturerSelection: {\n    width: '100%',\n    marginTop: 16\n  },\n  note: {\n    padding: theme.spacing(0, 1)\n  }\n});\n\nconst ManufacturerCard = (props: IManufacturerCardType) => {\n  const {\n    classes,\n    theme,\n    manufacturers,\n    isFetchingManufacturers,\n    alternativesManufacturer,\n    categoryId,\n    deleteAlternativeManufacturer,\n    updateAlternativeManufacturer,\n    dispatch,\n    t\n  } = props;\n\n  const [manufacturer, setManufacturer] = React.useState(\n    alternativesManufacturer?.get('manufacturerId')\n      ? {\n          id: alternativesManufacturer.get('manufacturerId'),\n          value: alternativesManufacturer.get('manufacturer'),\n          label: null\n        }\n      : null\n  );\n  const [logoSrc, setLogoSrc] = React.useState(alternativesManufacturer?.get('manufacturerLogo'));\n  const [note, setNote] = React.useState(alternativesManufacturer?.get('note') || undefined);\n  const [isFocusOnManufacturer, setIsFocusOnManufacturer] = React.useState(false);\n\n  const manufacturerId = manufacturer?.id;\n  const disabledNote = !manufacturerId;\n\n  const manufacturerLogoMap = useSelector(makeSelectDetailedManufacturerMap());\n\n  const getManufacturer = (_manufacturer) => {\n    dispatch(new AtsApiCallAction(\n      {\n        payload: {\n          service: 'product',\n          endpoint: 'getManufacturerById',\n          params: {\n            manufacturerId: _manufacturer.id,\n          },\n        },\n      },\n      (apiResp) => {\n        if (!apiResp.err) {\n          const immutableResp = fromJS(apiResp);\n          const src: string = immutableResp.getIn(['data', 'payload', 'product', 'manufacturer', 0, 'manufacturerLogo']);\n          setLogoSrc(src);\n          dispatch(new UpdateDetailedManufacturerMapAction({ manufacturer: _manufacturer.value, detailedManufacturer: fromJS({ name: _manufacturer.value, logoId: src }) }));\n        }\n      },\n    ));\n  };\n\n  const ManufacturerSelection = (\n    <Autocomplete\n      value={manufacturer}\n      options={manufacturers?.toJS() || []}\n      onChange={(e, value) => {\n        const cachedManufacturerLogoId = manufacturerLogoMap?.get(value.value)?.get('logoId');\n        setManufacturer(value);\n        if (cachedManufacturerLogoId) {\n          setLogoSrc(cachedManufacturerLogoId);\n        } else {\n          getManufacturer(value);\n        }\n        updateAlternativeManufacturer(alternativesManufacturer.set('manufacturerId', value.id).set('manufacturer', value.value));\n      }}\n      getOptionLabel={(option) => option.value || ''}\n      onFocus={() => setIsFocusOnManufacturer(true)}\n      onBlur={() => setIsFocusOnManufacturer(false)}\n      renderInput={params => (\n        <Tooltip title={manufacturer?.value || ''}>\n          <TextField\n            {...params}\n            placeholder={t('alternativeModal.manufacturerPlaceholder')}\n            fullWidth={true}\n            InputProps={{\n              ...params.InputProps,\n              endAdornment: (\n                <React.Fragment>\n                  {isFetchingManufacturers && isFocusOnManufacturer ? <CircularProgress size={20} style={{ marginLeft: 12 }} /> : null}\n                  {params.InputProps.endAdornment}\n                </React.Fragment>\n              ),\n            }}\n          />\n        </Tooltip>\n      )}\n      disableClearable={true}\n      openText={t('formButtons.open')}\n      closeText={t('formButtons.close')}\n      clearText={t('formButtons.clear')}\n      noOptionsText={t('generalDropdown.noOptions')}\n      loadingText={t('generalLoading.loading')}\n      loading={isFetchingManufacturers}\n    />\n  );\n\n  return (\n    <Card\n      variant='outlined'\n      className={classes.cardContainer}\n    >\n      <Grid container={true}>\n        <Grid container={true} justify='center'>\n          <Image src={logoSrc ? logoSrc : undefinedPNG} fromService={logoSrc ? true : false} aspectRatio={'100%'} width={'100px'} margin={'8px auto 0'} />\n          <IconButton size='small' className={classes.actionIcon} onClick={() => deleteAlternativeManufacturer(alternativesManufacturer?.get('id'))}>\n            <DeleteIcon color='action' />\n          </IconButton>\n        </Grid>\n        <Grid item={true} className={classes.manufacturerSelection} style={{ padding: theme.spacing(0, 1) }}>\n          {ManufacturerSelection}\n        </Grid>\n        <Tooltip title={note || ''}>\n          <TextField\n            disabled={disabledNote}\n            fullWidth={true}\n            value={note}\n            placeholder={t('alternativeModal.alternativeNotePlaceholder')}\n            className={classes.note}\n            onChange={(e) => {\n              setNote(e.target.value);\n              updateAlternativeManufacturer(alternativesManufacturer.set('note', e.target.value));\n            }}\n          />\n        </Tooltip>\n      </Grid>\n    </Card>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IManufacturerCardComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(ManufacturerCard);","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  Grid,\n  Typography,\n  CircularProgress,\n  Dialog,\n  DialogContent,\n  DialogActions,\n  Tooltip,\n  Divider,\n  Card,\n  WithTheme,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { ControlledModal } from '../../components';\nimport { AlternativeProduct, Drawing, Spec, XrefData, Product } from '../../models';\nimport { fromJS, List, Map } from 'immutable';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { makeSelectSeriesLoading } from '../../modules/ProductModule/selectors';\nimport { makeSelectDrawing, makeSelectIsSavingAlternativeProducts, makeSelectSearchingSpecs, makeSelectSelectedSpec, makeSelectUpdatingRules } from '../../modules/SpecModule/selectors';\nimport { GetAlternativesXrefAction, ResetManufacturersListAction, SetAlternativesXrefLoadingAction } from '../../modules/CrossRefModule/actions';\nimport { makeSelectSearchingXrefs, makeSelectSelectedCompetitorProductIdXrefData } from '../../modules/CrossRefModule/selectors';\nimport ProductCard from './Components/ProductCard';\nimport ManufacturerCard from './Components/ManufacturerCard';\nimport CrossReferenceTypesInfoPopup from '../../components/CrossReferenceTypesInfoPopup';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { SaveAlternativeProductsAction } from '../../modules/SpecModule/actions';\nimport AddIcon from '@material-ui/icons/Add';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\n\nexport const ALTERNATIVES_MODAL_ID = 'ALTERNATIVES_MODAL_ID';\n\nfunction removeNull (obj) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([_, v]) => v != null)\n  );\n}\n\ninterface IAlternativesModalContentComponentProps {\n}\n\ninterface IAlternativesModalContentProps extends IAlternativesModalContentComponentProps {\n  overlayProps: { [key: string]: any };\n  seriesLoading: boolean;\n  updatingRules: boolean;\n  searchingXrefs: boolean;\n  searchingSpecs: boolean;\n  isSavingAlternativeProducts: boolean;\n  drawing: IMap<Drawing>;\n  xrefDataList: List<IMap<XrefData>>;\n  selectedSpec: IMap<Spec>;\n  open: boolean;\n  dispatch: (s: IAction) => void;\n  closeDialog: () => void;\n  resetManufacturers: () => void;\n  saveAlternativeProducts: (specId: number, drawingId: number, productId: number, alternativeProducts: List<IMap<Partial<AlternativeProduct>>>, baseProduct: IMap<Product>) => void;\n}\n\ntype IAlternativesModalContent = IAlternativesModalContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & WithTheme;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: 1275,\n    maxWidth: 'initial',\n    height: 670,\n  },\n  innerContainer: {\n    minHeight: 620,\n    // overflowY: 'auto',\n    position: 'relative',\n    padding: theme.spacing(2, 3),\n  },\n  groupContainer: {\n    // margin: theme.spacing(0, 0, 3),\n    overflowX: 'auto',\n    width: '100%',\n  },\n  cardContainer: {\n    display: 'flex',\n    justifyContent: 'center',\n    margin: theme.spacing(1, 0),\n    position: 'relative'\n  },\n  addCardContainer: {\n    width: 220,\n    height: 220,\n    padding: theme.spacing(.5),\n    cursor: 'pointer',\n    '&:hover': {\n      boxShadow: theme.shadows[5]\n    },\n  },\n  typesLengendIcon: {\n    marginRight: theme.spacing()\n  },\n  addIcon: {\n    display: 'flex',\n    alignSelf: 'center',\n    marginLeft: 16,\n  },\n  progressContainer: {\n    display: 'flex',\n    height: '100%',\n    alignSelf: 'center',\n    alignItems: 'center',\n  },\n  progress: {\n    marginRight: theme.spacing(2)\n  },\n  ctaButton: {\n    padding: '6px 32px'\n  },\n  cancel: {\n    marginRight: theme.spacing(3)\n  },\n  divider: {\n    // marginBottom: theme.spacing(2)\n    margin: theme.spacing(2, 0)\n  },\n  ctaContainer: {\n    // position: 'absolute',\n    // right: theme.spacing(3),\n    // bottom: theme.spacing(3)\n    position: 'sticky',\n    bottom: 0,\n    padding: theme.spacing(1, 2),\n    backgroundColor: 'white',\n    boxShadow: '4px 0px 4px 0px rgba(0, 0, 0, 0.2)'\n\n  }\n});\n\nconst AlternativesModal = (props: IAlternativesModalContent) => {\n  const {\n    theme,\n    classes,\n    overlayProps,\n    seriesLoading,\n    updatingRules,\n    searchingXrefs,\n    searchingSpecs,\n    isSavingAlternativeProducts,\n    drawing,\n    xrefDataList,\n    selectedSpec,\n    open,\n    dispatch,\n    closeDialog,\n    resetManufacturers,\n    saveAlternativeProducts,\n    t\n  } = props;\n\n  const {\n    specId,\n    drawingId,\n    productId,\n    productIndex,\n    product: _product,\n  } = overlayProps;\n\n  const atsApi = useAtsApi();\n\n  const product = drawing?.getIn(['products', productIndex]) || _product;\n  const specProductId = product?.get('specProductId');\n\n  const [alternativeProducts, setAlternativeProducts] = React.useState(product?.get('alternativeProducts') || List());\n  const [openConfirmation, setOpenConfirmation] = React.useState(false);\n  const [manufacturers, setManufacturers] = React.useState(List());\n  const [isFetchingManufacturers, setIsFetchingManufacturers] = React.useState(false);\n\n  let uniqueSponsorIdMap = Map();\n\n  const getManufacturers = () => {\n    setIsFetchingManufacturers(true);\n    (atsApi.callApi({\n      service: 'product',\n      endpoint: 'getCategoryManufacturers',\n      params: {\n        categoryId: product?.get('category') || -1,\n      }\n    }) as any).then(res => {\n      setManufacturers(fromJS(res?.payload?.product?.manufacturer || []).sort((a, b) => {\n        return a.get('label').toLowerCase().localeCompare(b.get('label').toLowerCase());\n      }));\n    }).catch((err) => {\n      // the manufacturer filter stays empty instead of surfacing an unhandled rejection\n      console.warn('Unable to load the category manufacturers.', err); // tslint:disable-line\n    }).finally(() => {\n      setIsFetchingManufacturers(false);\n    });\n  };\n\n  React.useEffect(() => {\n    if (productId) {\n      resetManufacturers();\n      getManufacturers();\n    }\n  }, [productId]);\n\n  React.useEffect(() => {\n    dispatch(new SetAlternativesXrefLoadingAction());\n  }, [open]);\n\n  React.useEffect(() => {\n    if (productId) {\n      dispatch(new GetAlternativesXrefAction({\n        competitorProductId: productId,\n        competitorProductSeriesName: product?.get('seriesName'),\n        competitorProductProductNumber: product?.get('productNumber') || '',\n        competitorProductBrand: product?.get('brand') || '',\n        competitorProductBrandId: product?.get('brandId'),\n        competitorProductCategoryName: product?.get('categoryName') || '',\n        competitorProductCategoryId: product?.get('category'),\n        options: {\n          orderBy: {\n            competitorProductType: 1,\n            sponsorRank: -1,\n            isFirmSpecific: 1,\n            id: 1,\n          }\n        }\n      }));\n    }\n  }, [specProductId]);\n\n  React.useEffect(() => {\n    if (specProductId) {\n      setAlternativeProducts(product?.get('alternativeProducts') || List());\n    }\n    uniqueSponsorIdMap = Map();\n  }, [specProductId]);\n\n  const filteredXrefDataList = xrefDataList.filter((xrefData, index) => {\n    const sponsorId = xrefData.getIn(['sponsorProduct', 'id']);\n    const sponsorType = xrefData.get('sponsorProductType');\n    if (!uniqueSponsorIdMap.has(sponsorType + sponsorId)) {\n      uniqueSponsorIdMap = uniqueSponsorIdMap.set(sponsorType + sponsorId, true);\n      return true;\n    } else {\n      return false;\n    }\n  });\n\n  const atMaxAlternatives = alternativeProducts.count() >= 5;\n\n  // productId map of alternativeProducts\n  const alternativeProductsProductIdMap = alternativeProducts.reduce((acc, value, index) => {\n    const alternativeProductId = value.get('productId');\n    return acc.setIn([alternativeProductId ? 'product' : 'series', alternativeProductId ? alternativeProductId : value.get('seriesId')], value);\n  }, Map({ product: Map(), series: Map() }));\n\n  // id map of sponsorProducts from xref search\n  const xrefSponsorProductIdMap = filteredXrefDataList.reduce((acc, value, index) => {\n    return acc.setIn([value.get('sponsorProductType'), value.getIn(['sponsorProduct', 'id'])], value);\n  }, Map({ product: Map(), series: Map() }));\n\n  // alternative sponsor products\n  const alternativeSponsorProducts = alternativeProducts.filter((alternativeProduct, index) => alternativeProduct.get('productId') || alternativeProduct.get('seriesId'));\n\n  // alternative manufacturers\n  const alternativesManufacturers = alternativeProducts.filter((alternativeProduct, index) => !(alternativeProduct.get('productId') || alternativeProduct.get('seriesId')));\n\n  // check if there's empty alternativesManufactuer\n  const hasEmptyAlternativesManufacturer = alternativesManufacturers.some((alternativesManufacturer, key) => !alternativesManufacturer.get('manufacturerId'));\n\n  // alternative products that can be mapped to xrefs\n  const selectedXrefs = filteredXrefDataList.filter((xrefData) => alternativeProductsProductIdMap.get(xrefData.get('sponsorProductType') === 'product' ? 'product' : 'series').has(xrefData.getIn(['sponsorProduct', 'id'])));\n\n  // alternative products that cannot be mapped to xrefs, in other words,\n  // alternative products (sponsorProducts) that is not returned from xref search, maybe the xref is deleted or whatnot\n  const orphanedAlternativeProducts = alternativeSponsorProducts.filter((alternativeSponsorProduct) => !xrefSponsorProductIdMap.get(alternativeSponsorProduct.get('productId') ? 'product' : 'series').has(alternativeSponsorProduct.get('productId') ? alternativeSponsorProduct.get('productId') : alternativeSponsorProduct.get('seriesId')));\n\n  const toggleAlternativeProduct = (_productSeriesId: number, type: 'productId' | 'seriesId') => {\n    const index = alternativeProducts.findIndex((alternative, _index) => alternative.get(type) === _productSeriesId);\n    if (index === -1) {\n      if (!atMaxAlternatives) {\n        setAlternativeProducts(alternativeProducts.push(Map({\n          [type]: _productSeriesId,\n        })));\n      }\n    } else {\n      setAlternativeProducts(alternativeProducts.delete(index));\n    }\n  };\n\n  const addEmptyAlternativeManufacturer = () => {\n    setAlternativeProducts(alternativeProducts.push(Map({\n      id: -(new Date().valueOf())\n    })));\n  };\n\n  const deleteAlternativeManufacturer = (id: number) => {\n    const newAlternativeProducts = alternativeProducts.filter((alternativeProduct, index) => alternativeProduct.get('id') !== id);\n    setAlternativeProducts(newAlternativeProducts);\n  };\n\n  const updateAlternativeManufacturer = (newAlternativeManufacturer: IMap<Partial<AlternativeProduct>>) => {\n    const indexOfAlternative = alternativeProducts.findIndex((alternative, index) => alternative.get('id') === newAlternativeManufacturer.get('id'));\n    const newAlternativeProducts = alternativeProducts.set(indexOfAlternative, newAlternativeManufacturer);\n    setAlternativeProducts(newAlternativeProducts);\n  };\n\n  const onExit = () => {\n    closeDialog();\n  };\n\n  const handleSave = () => {\n    if (openConfirmation) {\n      setOpenConfirmation(false);\n    }\n\n    const validAlternativeProducts = alternativeProducts\n      .filter((alternativeProduct, index) => alternativeProduct.get('productId') || alternativeProduct.get('seriesId') || alternativeProduct.get('manufacturerId'))\n      .map((alternativeProduct, index) => {\n        let newAlternativeProduct = alternativeProduct;\n        // remove negative ids used for FE alternative manufacturer management\n        if (alternativeProduct.get('id') <= 0) {\n          newAlternativeProduct = alternativeProduct.delete('id');\n        }\n        return newAlternativeProduct;\n      });\n    const cleanAlternativeProducts = validAlternativeProducts.map((alternativeProduct, index) => {\n      return removeNull({\n        id: alternativeProduct.get('id') || null,\n        productId: alternativeProduct.get('productId') || null,\n        seriesId: alternativeProduct.get('seriesId') || null,\n        manufacturerId: alternativeProduct.get('manufacturerId') || null,\n        note: alternativeProduct.get('note')\n      });\n    });\n\n    saveAlternativeProducts(specId, drawingId, specProductId, cleanAlternativeProducts, product);\n  };\n\n  const XrefTypeInfo = (\n    <CrossReferenceTypesInfoPopup direction='left'>\n      <Grid container={true}>\n        <ShuffleIcon color='primary' className={classes.typesLengendIcon} />\n        <Typography color='primary'>\n          {t('CrossReference.crossReferenceTypes')}\n        </Typography>\n      </Grid>\n    </CrossReferenceTypesInfoPopup>\n  );\n\n  const loadingContent = () => {\n    if (seriesLoading || updatingRules) {\n      return (\n        <div className={classes.progressContainer}>\n          <CircularProgress color='primary' className={classes.progress} />\n          {t('alternativeModal.productSeriesLoadingMessage')}\n        </div>\n      );\n    } else if (searchingSpecs) {\n      return (\n        <div className={classes.progressContainer}>\n          <CircularProgress color='primary' className={classes.progress} />\n          {t('generalLoading.loading')}\n        </div>\n      );\n    } else if (searchingXrefs) {\n      return (\n        <div className={classes.progressContainer}>\n          <CircularProgress color='primary' className={classes.progress} />\n          {t('alternativeModal.searchingXrefMessage')}\n        </div>\n      );\n    } else if (isSavingAlternativeProducts) {\n      return (\n        <div className={classes.progressContainer}>\n          <CircularProgress color='primary' className={classes.progress} />\n          {t('alternativeModal.savingAlternativesMessage')}\n        </div>\n      );\n    }\n    return ;\n  };\n\n  return (\n    <ControlledModal\n      localKey={ALTERNATIVES_MODAL_ID}\n      TransitionProps={{\n        onEntered: () => setAlternativeProducts(product?.get('alternativeProducts') || List()),\n        onExit: () => {\n          setAlternativeProducts(List());\n          dispatch(new SetOverlayComponentPropsAction({\n            id: ALTERNATIVES_MODAL_ID,\n            props: {}\n          }));\n        }\n      }}\n      classes={{\n        paper: classes.root\n      }}\n    >\n      {\n        loadingContent()\n          ? loadingContent()\n          : <>\n              <div className={classes.innerContainer}>\n                <Grid container={true} justify='space-between' wrap='nowrap'>\n                  <Grid container={true} alignItems='center' style={{ width: 'fit-content' }}>\n                    <Typography variant='h6'>\n                      {t('alternativeModal.approvedAlternatesTitle')}\n                    </Typography>\n                    <Tooltip title={t('alternativeModal.approvedAlternatesTooltip')}>\n                      <InfoIcon color='action' fontSize='small' style={{ marginLeft: 8 }} />\n                    </Tooltip>\n                  </Grid>\n                  {XrefTypeInfo}\n                </Grid>\n                {\n                  !filteredXrefDataList.count() && (\n                    <Grid container={true} justify='center' style={{ marginBottom: -theme.spacing(2) }}>\n                      <Typography color='textPrimary'>\n                        {t('alternativeModal.noRecommended')}\n                      </Typography>\n                    </Grid>\n                  )\n                }\n                <Grid container={true} className={classes.groupContainer} spacing={3} wrap='nowrap'>\n                  <Grid key={'add'} item={true} className={classes.cardContainer}>\n                    <Card\n                      variant='outlined'\n                      className={classes.addCardContainer}\n                      onClick={atMaxAlternatives ? null : addEmptyAlternativeManufacturer}\n                    >\n                      <Grid container={true} justify='center' alignContent='center' style={{ height: '100%', marginTop: -10 }}>\n                        <AddIcon color={atMaxAlternatives ? 'disabled' : 'primary'} style={{ width: 100, height: 100 }} />\n                        <Typography style={{ marginTop: -10, color: atMaxAlternatives ? theme.palette.action.disabled : theme.palette.primary[700] }}>\n                          {t('alternativeModal.chooseAlternate')}\n                        </Typography>\n                      </Grid>\n                    </Card>\n                  </Grid>\n                  {\n                    filteredXrefDataList.map((xrefData, index) => {\n                      const sponsorType = xrefData.get('sponsorProductType');\n                      const isSelected = alternativeProductsProductIdMap.get(sponsorType).has(xrefData.getIn(['sponsorProduct', 'id']));\n                      const sponsorProduct = xrefData.get('sponsorProduct');\n                      const xrefTypes = xrefData.get('types');\n                      const tempAlternativeProduct = Map({\n                        productId: sponsorType === 'product' ? sponsorProduct.get('id') : null,\n                        seriesId: sponsorType === 'series' ? sponsorProduct.get('id') : null,\n                        productNumber: sponsorType === 'product' ? sponsorProduct.get('productNumber') : null,\n                        seriesName: sponsorType === 'series' ? sponsorProduct.get('productNumber') : null,\n                        manufacturer: sponsorProduct.get('brand'),\n                        categoryName: sponsorProduct.get('categoryName'),\n                        file: sponsorProduct.get('file')\n                      });\n                      return isSelected ? null : (\n                        <Grid key={index} item={true} className={classes.cardContainer}>\n                          <ProductCard alternativeProduct={tempAlternativeProduct} xrefTypes={xrefTypes} isSelected={isSelected} toggleAlternativeProduct={toggleAlternativeProduct} />\n                        </Grid>\n                      );\n                    })\n                  }\n                </Grid>\n                <Divider className={classes.divider} />\n                <Grid container={true} alignItems='center'>\n                  <Typography variant='h6'>\n                    {t('alternativeModal.selectedAlternatives')}\n                  </Typography>\n                  <InfoIcon color='action' fontSize='small' style={{ margin: '0 12px 0 24px' }} />\n                  <Typography color='textPrimary'>\n                    {t('alternativeModal.alternativesLimit')}\n                  </Typography>\n                </Grid>\n                {\n                  (!selectedXrefs?.count() && !orphanedAlternativeProducts?.count() && !alternativesManufacturers?.count()) && (\n                    <Grid container={true} alignContent='center' justify='center' style={{ minHeight: 250 }}>\n                      <Typography color='textPrimary'>\n                        {t('alternativeModal.noSelectedAlternates')}\n                      </Typography>\n                    </Grid>\n                  )\n                }\n                <Grid container={true} className={classes.groupContainer} spacing={3} alignContent='center' wrap='nowrap'>\n                  {\n                    alternativeProducts.map((alternativeProduct, index) => {\n                      const sponsorType = alternativeProduct.get('productId') ? 'product' : alternativeProduct.get('seriesId') ? 'series' : 'manufacturer';\n\n                      if (sponsorType === 'manufacturer') {\n                        return (\n                          <Grid key={alternativeProduct.get('id')} item={true} className={classes.cardContainer}>\n                            <ManufacturerCard\n                              alternativesManufacturer={alternativeProduct}\n                              categoryId={product?.get('category') || -1}\n                              manufacturers={manufacturers}\n                              isFetchingManufacturers={isFetchingManufacturers}\n                              deleteAlternativeManufacturer={deleteAlternativeManufacturer}\n                              updateAlternativeManufacturer={updateAlternativeManufacturer}\n                            />\n                          </Grid>\n                        );\n                      }\n\n                      const sponsorProduct = xrefSponsorProductIdMap.getIn([sponsorType, alternativeProduct.get(sponsorType === 'product' ? 'productId' : 'seriesId')])?.get('sponsorProduct');\n                      const xrefTypes = sponsorProduct ? xrefSponsorProductIdMap.getIn([sponsorType, alternativeProduct.get(sponsorType === 'product' ? 'productId' : 'seriesId')])?.get('types') : null;\n                      const tempAlternativeProduct = sponsorProduct\n                        ? Map({\n                            productId: sponsorType === 'product' ? sponsorProduct.get('id') : null,\n                            seriesId: sponsorType === 'series' ? sponsorProduct.get('id') : null,\n                            productNumber: sponsorType === 'product' ? sponsorProduct.get('productNumber') : null,\n                            seriesName: sponsorType === 'series' ? sponsorProduct.get('productNumber') : null,\n                            manufacturer: sponsorProduct.get('brand'),\n                            categoryName: sponsorProduct.get('categoryName'),\n                            file: sponsorProduct.get('file')\n                          })\n                        : alternativeProduct;\n                      return (\n                        <Grid key={index} item={true} className={classes.cardContainer}>\n                          <ProductCard alternativeProduct={tempAlternativeProduct} xrefTypes={xrefTypes} displayDeleteIcon={true} toggleAlternativeProduct={toggleAlternativeProduct} />\n                        </Grid>\n                      );\n                    })\n                  }\n                </Grid>\n              </div>\n              <Grid container={true} justify='flex-end' className={classes.ctaContainer}>\n                <Button\n                  color='primary'\n                  onClick={onExit}\n                  classes={{\n                    root: classes.ctaButton\n                  }}\n                  className={classes.cancel}\n                >\n                  {t('formButtons.cancel')}\n                </Button>\n                <Button\n                  color='primary'\n                  variant='contained'\n                  onClick={() => hasEmptyAlternativesManufacturer ? setOpenConfirmation(true) : handleSave()}\n                  classes={{\n                    root: classes.ctaButton\n                  }}\n                >\n                  {t('formButtons.save')}\n                </Button>\n              </Grid>\n            </>\n      }\n      <Dialog\n        open={openConfirmation}\n        onClose={() => setOpenConfirmation(false)}\n      >\n        <DialogContent>\n          {t('alternativeModal.confirmationMessage')}\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={handleSave} color='primary'>\n            {t('formButtons.continue')}\n          </Button>\n          <Button onClick={() => setOpenConfirmation(false)} color='primary' autoFocus={true}>\n          {t('formButtons.cancel')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state: any) => {\n  const overlayProps = makeSelectOverlayComponentProp(ALTERNATIVES_MODAL_ID)(state);\n  const drawingId = overlayProps.drawingId;\n  const specId = overlayProps.specId;\n  return {\n    overlayProps,\n    ...createStructuredSelector({\n      seriesLoading: makeSelectSeriesLoading(),\n      updatingRules: makeSelectUpdatingRules(),\n      searchingXrefs: makeSelectSearchingXrefs(),\n      searchingSpecs: makeSelectSearchingSpecs(),\n      isSavingAlternativeProducts: makeSelectIsSavingAlternativeProducts(),\n      drawing: makeSelectDrawing({drawingId}),\n      xrefDataList: makeSelectSelectedCompetitorProductIdXrefData(),\n      selectedSpec: makeSelectSelectedSpec({ specId }),\n      open: makeSelectOverlayComponent(ALTERNATIVES_MODAL_ID)\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: ALTERNATIVES_MODAL_ID,\n        open: false\n      }));\n    },\n    saveAlternativeProducts: (specId: number, drawingId: number, productId: number, alternativeProducts: List<IMap<Partial<AlternativeProduct>>>, baseProduct: IMap<Product>) => {\n      dispatch(new SaveAlternativeProductsAction({\n        specId,\n        drawingId,\n        productId,\n        alternativeProducts,\n        baseProduct\n      }));\n    },\n    resetManufacturers: () => {\n      dispatch(new ResetManufacturersListAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IAlternativesModalContentComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(AlternativesModal);","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import {List} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Spec} from '../models';\n\nfunction filterSpecDrawingsByProductName(spec: IMap<Spec>, productSearchTerm: string = '') {\n    const normalizedSearchTerm = productSearchTerm.toLowerCase();\n    return spec?.get('drawings')?.filter((drawing) => {\n        return drawing.get('name')?.toLowerCase().includes(normalizedSearchTerm)\n            || drawing.get('products')?.some(product => {\n                return product.get('productNumber')?.toLowerCase().includes(normalizedSearchTerm)\n                  || product.get('seriesName')?.toLowerCase().includes(normalizedSearchTerm)\n                  || product.get('description')?.toLowerCase().includes(normalizedSearchTerm);\n            });\n    }) ?? List();\n}\n\nexport default filterSpecDrawingsByProductName;","import React, {MouseEventHandler} from 'react';\nimport {\n    Checkbox,\n    Grid,\n    IconButton,\n    List,\n    ListItem,\n    ListItemIcon,\n    ListItemText,\n    Radio,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport {utcToLocal} from 'ats-utils/src/index';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {Project} from '../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\ninterface IProps {\n    project: IMap<Project>;\n    onClick: MouseEventHandler;\n    isExpanded: boolean;\n    isSelected: boolean;\n    onToggleExpand: (isExpanded: boolean) => void;\n    onSelect: (index: number, value: boolean) => void;\n    selectedIndexes: number[];\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    row: {\n        cursor: 'pointer',\n        padding: theme.spacing(0, 2),\n        borderBottom: `1px solid ${theme.palette.divider}`,\n        '&:hover': {\n            backgroundColor: theme.palette.action.hover\n        }\n    },\n    projectName: {\n        textOverflow: 'ellipsis',\n        whiteSpace: 'nowrap',\n        overflow: 'hidden'\n    },\n    list: {\n        paddingLeft: '16px',\n        backgroundColor: '#F7F7F7',\n    }\n}));\nconst ProjectRow = ({\n    project,\n    onClick,\n    isExpanded = false,\n    isSelected = false,\n    onToggleExpand,\n    onSelect,\n    selectedIndexes = [],\n}: IProps) => {\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const specs = project.get('specs');\n    return (\n        <div>\n            <Grid\n                container={true}\n                justify='center'\n                className={classes.row}\n                onClick={onClick}\n            >\n                <Radio color='primary' style={{ marginRight: '10px'}} checked={isSelected} />\n                <div style={{ flexGrow: 1 }}>\n                    <Grid\n                        container={true}\n                        justify='space-between'\n                        wrap='nowrap'\n                    >\n                        <Grid style={{ width: 330 }}>\n                            <Typography variant='subtitle1' className={classes.projectName} style={{ color: theme.palette.text.primary }}>\n                                {project.get('name')}\n                            </Typography>\n                        </Grid>\n                        <Grid>\n                            <Typography variant='caption' style={{ color: theme.palette.text.primary }}>\n                                {t('CopyMasterToProjectModal.project')}\n                            </Typography>\n                        </Grid>\n                    </Grid>\n                    <Grid container={true} justify='space-between'>\n                        <Typography variant='body2' style={{ fontSize: '13.57px' }}>\n                            {`${t('CopyMasterToProjectModal.lastUpdate')}: ${utcToLocal(project.get('modifiedDate')) || 'N/A'}`}\n                        </Typography>\n                        {\n                            isExpanded ? <IconButton size='small' onClick={(e) => {\n                                    e.stopPropagation();\n                                    onToggleExpand(false);\n                                }}>\n                                    <ExpandLessIcon />\n                                </IconButton> :\n                                <IconButton size='small' onClick={(e) => {\n                                    e.stopPropagation();\n                                    onToggleExpand(true);\n                                }}>\n                                    <ExpandMoreIcon />\n                                </IconButton>\n                        }\n                    </Grid>\n                </div>\n            </Grid>\n            {isExpanded ? <List className={classes.list}>\n                <ListItem onClick={() => onSelect(0, !selectedIndexes.includes(0))}>\n                    <ListItemIcon>\n                        <Checkbox\n                            color='primary'\n                            checked={selectedIndexes.includes(0)}\n                        />\n                    </ListItemIcon>\n                    <ListItemText primaryTypographyProps={{ variant: 'caption' }} primary={t('CopyMasterToProjectModal.createNewProductGroup')} />\n                </ListItem>\n                {\n                    specs.map((spec, index) => {\n                        const specId = spec.get('id');\n                        const specName = spec.get('name');\n                        const checked = selectedIndexes.includes(index + 1);\n                        return (\n                            <ListItem key={specId} onClick={() => onSelect(index + 1, !checked)}>\n                                <ListItemIcon>\n                                    <Checkbox\n                                        color='primary'\n                                        checked={checked}\n                                    />\n                                </ListItemIcon>\n                                <ListItemText style={{ marginRight: '16px' }} primary={specName} primaryTypographyProps={{ variant: 'body2', style: { color: '#000',  wordBreak: 'break-all' }}} />\n                                <ListItemText\n                                    primary={t('CopyMasterToProjectModal.productGroup')}\n                                    primaryTypographyProps={{ variant: 'caption', style: { color: '#000' }}}\n                                    style={{ flexGrow: 0, flexShrink: 0 }}\n                                />\n                            </ListItem>\n                        );\n                    })\n                }\n            </List> : null}\n        </div>\n    );\n};\n\nexport default ProjectRow;","import React, {useMemo, useState, useEffect, useRef} from 'react';\nimport {\n    Button,\n    CircularProgress,\n    Grid,\n    InputAdornment,\n    TextField,\n    Theme,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {\n    AddQuoteToProjectAction,\n    CreateProjectAction,\n    CreateProjectSucceededAction, CreateProjectFromTemplateAction,\n    GetProjectsSucceededAction,\n    LoadingSearchedProjectAction,\n    ProjectFailedAction,\n    QuickSearchProjectsAction,\n    SearchProjectsSucceededAction,\n    SetProjectMasterSavingAllowAction,\n    UpdateProjectSpecDetailConfigAction,\n    GetProjectsAction, DeleteProjectSucceededAction, SelectAllDrawingsInSpecAction,\n    MassUpdateProjectSpecDetailConfigAction\n} from '../../modules/ProjectModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    makeSelectProjectSpecConfig,\n    makeSelectSearchedProjects,\n    makeSelectSearchingProjects\n} from '../../modules/ProjectModule/selectors';\nimport _ from 'lodash';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport ProjectRow from './ProjectRow';\nimport {makeSelectOverlayComponentProp} from '../../modules/ApplicationModule/selectors';\nimport {COPY_MODAL} from './index';\nimport {CopyAction, GetSpecsSucceededAction} from '../../modules/SpecModule/actions';\nimport {push} from 'connected-react-router';\nimport {AMPLITUDE_EVENT, PROJECT_DETAIL_PATH} from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {fromJS, List, Map as ImmuMap, Set} from 'immutable';\nimport {makeSelectCopyStatus} from '../../modules/SpecModule/selectors';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport CreateNewProjectModal from '../CreateNewProjectModal';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Project} from '../../models';\nimport {ProjectTrackerCreateProjectFormVariant} from '../CreateNewProjectModal/constants';\nimport {makeSelectLocation} from '../../modules/RouterModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    searchContainer: {\n        padding: theme.spacing(0, 3),\n        display: 'flex'\n    },\n    list: {\n        padding: theme.spacing(0, 3),\n        height: '412px',\n        width: '100%',\n        justifyContent: 'center',\n        alignItems: 'center'\n    },\n}));\nconst searchOptions = {\n    limit: 50,\n    offset: 0,\n    orderBy: {\n        id: -1\n    }\n} as const;\nconst getSearchFilters = (keyword: string) => ({\n    'and': [\n        {\n            'name': {\n                'like': keyword\n            }\n        },\n        { // prevent user from altering isAi destinations\n            'isAi': {\n                'eq': false\n            }\n        }\n    ]\n});\nconst CopyToProject = ({\n    onCancel\n}) => {\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const location = useSelector(makeSelectLocation());\n    const [inputValue, setInputValue] = useState('');\n    const [selectionState, setSelectionState] = useState({});\n    const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n    const [selectedProjectId, setSelectedProjectId] = useState(null);\n    const [expandedProjectId, setExpandedProjectId] = useState(null);\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const isLoading = useSelector(makeSelectSearchingProjects());\n    const data = useSelector(makeSelectSearchedProjects());\n    const { sourceSpecs, sourceProjectId, sourceType, amplitudeSourceData } = useSelector(makeSelectOverlayComponentProp(COPY_MODAL));\n    const status = useSelector(makeSelectCopyStatus());\n    const amplitudeData = useAmplitudeData();\n    const isCopying = status.get('isLoading');\n    const hasSearchedOnce = useRef(false);\n    const quickSearchProjects = (keyword: string) => {\n        hasSearchedOnce.current = true;\n        dispatch(new QuickSearchProjectsAction({\n            options: searchOptions,\n            filters: getSearchFilters(keyword)\n        }));\n    };\n    const reset = () => {\n        setSelectionState({});\n        setIsCreateModalOpen(false);\n        setSelectedProjectId(null);\n        setExpandedProjectId(null);\n    };\n    const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n        quickSearchProjects(keyword);\n    }, 500), []);\n    const handleInputChange = (e) => {\n        setInputValue(e.target.value);\n        reset();\n        if (e.target.value !== '') {\n            dispatch(new LoadingSearchedProjectAction());\n            debouncedSearch(e.target.value);\n        }\n    };\n    const handleClickNew = () => {\n        setIsCreateModalOpen(true);\n    };\n    const copyProject = (project, createNew, selectedSpecs) => {\n        const projectId = project?.get('id');\n        const projectName = project?.get('name');\n        const body = {\n            hasMultipleDestinationSpecs: true,\n            mappings: [\n            ...createNew ? [{\n                sourceProjectId,\n                sourceType,\n                sourceSpecs,\n                destinationProjectId: projectId,\n                destinationType: 'standard' as const,\n                forceCreateNewSpec: true,\n                newSpecName: t('CopyMasterToProjectModal.newProductGroup')\n            }] : [],\n            ...selectedSpecs.map((spec) => {\n                return ({\n                    sourceProjectId,\n                    sourceType,\n                    sourceSpecs,\n                    destinationSpecId: spec.get('id'),\n                    destinationType: 'standard' as const,\n                });\n            })]\n        };\n        dispatch(new CopyAction({\n            body,\n            onSuccess: (newSpecs) => {\n                const trackedData = {\n                    ...amplitudeData(),\n                    ...amplitudeSourceData ? amplitudeSourceData : {},\n                    destinationType: 'Project',\n                    destinationId: projectId,\n                    destinationName: projectName,\n                    createNew,\n                };\n                dispatch(new GetSpecsSucceededAction(newSpecs));\n                amplitude.logEvent(AMPLITUDE_EVENT.copyTo, trackedData);\n                onCancel(); // close copy modal\n                if (location.get('pathname') === `${PROJECT_DETAIL_PATH}/${projectId}`) {\n                    if (createNew) {\n                        dispatch(new SelectAllDrawingsInSpecAction({\n                            spec: newSpecs.get(0),\n                        }));\n                    } else {\n                        // keep selection of existing drawings, and add new drawings to be selected\n                        const specsDrawingIds = newSpecs?.reduce((acc, _spec) => {\n                            const _specId = _spec.get('id');\n                            return _spec.get('drawings').reduce((_acc, drawing) => {\n                                if (!projectSpecDetailConfig.getIn([_specId, drawing.get('id')])) {\n                                    return _acc.update(_specId, List(), list => list.push(drawing.get('id')));\n                                }\n                                return _acc;\n                            }, acc);\n                        }, fromJS({}) as ImmuMap<number, List<number>>);\n\n                        if (specsDrawingIds?.size > 0) {\n                            dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked: true }));\n                        }\n                    }\n                    dispatch(new GetProjectsAction({ projectId }));\n                } else {\n                   dispatch(new DeleteProjectSucceededAction({\n                          projects: List([project]),\n                   }));\n                   dispatch(push({\n                       pathname: `${PROJECT_DETAIL_PATH}/${projectId}`,\n                       state: {\n                           initialSelectedSpecId: newSpecs.getIn([0, 'id']),\n                       }\n                   }));\n                }\n            },\n        }));\n    };\n    const renderRow = (project) => {\n        const projectId = project.get('id');\n        const specs = project.get('specs');\n        return <ProjectRow\n            key={projectId}\n            selectedIndexes={selectionState[projectId]}\n            onClick={() => {\n                if (selectedProjectId !== projectId) {\n                    setSelectedProjectId(projectId);\n                    setExpandedProjectId(projectId);\n                    if (specs.count() === 0 && !selectionState[projectId]?.includes(0)) {\n                        // preselect createNewSpec\n                        setSelectionState((prevState) => ({\n                            ...prevState,\n                            [projectId]: prevState[projectId] ? [...prevState[projectId], 0] : [0]\n                        }));\n                    }\n                } else {\n                    if (expandedProjectId === projectId) {\n                        setExpandedProjectId(null);\n                    } else {\n                        setExpandedProjectId(projectId);\n                    }\n                }\n            }}\n            isExpanded={expandedProjectId === projectId}\n            onToggleExpand={(value) => {\n                if (value) {\n                    setExpandedProjectId(projectId);\n                } else {\n                    setExpandedProjectId(null);\n                }\n            }}\n            isSelected={selectedProjectId === projectId}\n            onSelect={(index, isSelected) => {\n                if (selectedProjectId !== projectId) {\n                    setSelectedProjectId(projectId);\n                }\n                if (isSelected) {\n                    // select an item\n                    setSelectionState((prevState) => ({\n                        ...prevState,\n                        [projectId]: prevState[projectId] ? [...prevState[projectId], index] : [index]\n                    }));\n                } else {\n                    // unselect an item\n                    setSelectionState((prevState) => ({\n                        ...prevState,\n                        [projectId]: prevState[projectId] ?\n                            prevState[projectId].filter((selectedIndex) => selectedIndex !== index) : []\n                    }));\n                }\n            }}\n            project={project}\n        />;\n    };\n    const handleClickCopyButton = () => {\n        const project =  data?.find((_project) => _project.get('id') === selectedProjectId);\n        const createNew = selectionState[selectedProjectId]?.includes(0);\n        const specs = project?.get('specs');\n        const selectedSpecs = specs?.filter((spec, index) => {\n            return selectionState[selectedProjectId]?.includes(index + 1);\n        });\n        copyProject(project, createNew, selectedSpecs);\n    };\n\n    useEffect(() => {\n        if (data?.count()) {\n            dispatch(new SearchProjectsSucceededAction({ projects: List(), count: 0, hasNextPage: false }));\n        }\n    }, []);\n    return (\n        <>\n            <Grid item={true} className={classes.searchContainer}>\n                <TextField\n                    autoFocus={true}\n                    value={inputValue}\n                    onChange={handleInputChange}\n                    fullWidth={true}\n                    disabled={isCopying}\n                    placeholder={t('CopyModal.enterYourSearch')}\n                    InputProps={{\n                        startAdornment: <InputAdornment position='start'>\n                            <SearchIcon style={{ color: theme.palette.grey[600] }} />\n                        </InputAdornment>,\n                    }}\n                />\n                <Button variant='outlined' color='primary' onClick={handleClickNew} style={{ marginLeft: '20.45px', padding: '0 30.28px'}}>+{t('CopyModal.new')}</Button>\n            </Grid>\n            <Grid\n                container={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n                className={classes.list}\n            >\n                {\n                    (isLoading && inputValue) || isCopying ? <Grid container={true} direction='column' alignItems='center'>\n                            <Typography variant='h6'>\n                                {isCopying ? t('CopyMasterToProjectModal.copying') : isLoading ? t('CopyMasterToProjectModal.searching') : null}\n                            </Typography>\n                            <CircularProgress color='primary' />\n                        </Grid>\n                        : (data.count() > 0 && inputValue)\n                            ? <div style={{ overflow: 'auto', width: '100%', marginTop: '25px', minHeight: '100%'}}>\n                                {data.map((project) => {\n                                    return renderRow(project);\n                                })}\n                            </div>\n                            :  hasSearchedOnce.current ? <React.Fragment>\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.noResults')}\n                                </Typography>\n                                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                                    {t('CopyMasterToProjectModal.cantFind')}\n                                </Typography>\n                            </React.Fragment> :\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.searchByProjectName')}\n                                </Typography>\n                }\n            </Grid>\n            <Grid container={true} justify='flex-end' style={{ padding: '24px' }}>\n                <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }}>{t('CopyModal.cancel')}</Button>\n                <Button\n                    variant='contained'\n                    color='primary'\n                    onClick={handleClickCopyButton}\n                    disabled={selectedProjectId === null || !(selectionState[selectedProjectId]?.length > 0) || isCopying}\n                    style={{ padding: '0 38px'}}\n                >\n                    {t('CopyModal.copy')}\n                </Button>\n            </Grid>\n            <CreateNewProjectModal\n                variantSet={Set([ProjectTrackerCreateProjectFormVariant.WITH_TEMPLATE_SELECTION])}\n                toggle={(open) => () => {\n                    setIsCreateModalOpen(open);\n                }}\n                isTestProject={false}\n                open={isCreateModalOpen}\n                onClose={() => {\n                    setIsCreateModalOpen(false);\n                }}\n                onSubmit={({ values, projectId, projectValues }) => {\n                    const selectedDrawings = values?.get('selectedDrawings') ?? [];\n                    const keyedDrawings = {};\n                    selectedDrawings.forEach(({ specId, id: drawingId }) => {\n                        if (keyedDrawings[specId]) {\n                            keyedDrawings[specId].push(drawingId);\n                        } else {\n                            keyedDrawings[specId] = [drawingId];\n                        }\n                    });\n                    const specDrawingsFormatted: Array<{ id: number, drawings: Array<{ id: number }>}> = [];\n                    // tslint:disable-next-line:forin\n                    for (const key in keyedDrawings) {\n                        const drawings = keyedDrawings[key];\n                        specDrawingsFormatted.push({\n                            id: parseInt(key, 10),\n                            drawings: drawings.map((drawingId) => ({ id: drawingId })),\n                        });\n                    }\n                    const createProjectFromTemplate = selectedDrawings.length > 0;\n                    const onSuccess = (responseData: List<IMap<Partial<Project>>>|IMap<Partial<Project>>, quoteId) => {\n                        setIsCreateModalOpen(false);\n                        let newProject;\n                        if (List.isList(responseData)) {\n                            newProject = responseData.first();\n                        } else {\n                            newProject = responseData;\n                        }\n                        const newProjectId = newProject.get('id');\n                        dispatch (new GetProjectsSucceededAction(fromJS([newProject])));\n                        if (quoteId) {\n                            dispatch (new AddQuoteToProjectAction({ projectId: newProjectId, quoteId }));\n                        } else {\n                            dispatch(new CreateProjectSucceededAction());\n                        }\n                        if (createProjectFromTemplate) {\n                            copyProject(newProject, true, []);\n                        } else {\n                            copyProject(newProject, false, newProject.get('specs'));\n                        }\n                    };\n                    const onFailed = (err) => {\n                        dispatch(new ProjectFailedAction({err}));\n                        dispatch(new SetProjectMasterSavingAllowAction({ allow: true }));\n                    };\n                    if (createProjectFromTemplate) {\n                        // create project with template\n                        dispatch(new CreateProjectFromTemplateAction({\n                            project: projectValues,\n                            copyInstructions: [\n                                {\n                                    sourceSpecs: specDrawingsFormatted,\n                                    destinationType: 'standard',\n                                    sourceType: 'master_template'\n                                }\n                            ],\n                            onSuccess,\n                            onFailed\n                        }));\n                    } else {\n                        // create project without template\n                        dispatch(new CreateProjectAction({\n                            project: projectValues,\n                            onSuccess,\n                            onFailed\n                        }));\n                    }\n                }}\n            />\n        </>\n    );\n};\n\nexport default CopyToProject;","import React, {MouseEventHandler} from 'react';\nimport {Grid, Radio, Typography, useTheme} from '@material-ui/core';\nimport {utcToLocal} from 'ats-utils/src/index';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {Spec} from '../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\n\ninterface IProps {\n    index: number;\n    style: React.CSSProperties;\n    spec: IMap<Spec>;\n    onClick: MouseEventHandler;\n    selected: boolean;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    row: {\n        cursor: 'pointer',\n        padding: theme.spacing(0, 2),\n        borderBottom: `1px solid ${theme.palette.divider}`,\n        '&:hover': {\n            backgroundColor: theme.palette.action.hover\n        }\n    },\n    specName: {\n        textOverflow: 'ellipsis',\n        whiteSpace: 'nowrap',\n        overflow: 'hidden'\n    },\n}));\nconst SpecificationRow = ({ spec, style, onClick, selected = false }: IProps) => {\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    return (\n        <Grid\n            container={true}\n            justify='center'\n            className={classes.row}\n            style={style}\n            onClick={onClick}\n            wrap='nowrap'\n        >\n            <Radio color='primary' checked={selected} style={{ marginRight: '10px'}}/>\n            <div style={{ flexGrow: 1 }}>\n                <Grid\n                    container={true}\n                    justify='space-between'\n                    wrap='nowrap'\n                >\n                    <Grid style={{ width: 300 }}>\n                        <Typography variant='subtitle1' className={classes.specName} style={{ color: theme.palette.text.primary }}>\n                            {spec.get('name')}\n                        </Typography>\n                    </Grid>\n                    <Grid>\n                        <Typography variant='caption' style={{ color: theme.palette.text.primary }}>\n                            {t('CopyDrawingToProjectSpecModal.specification')}\n                        </Typography>\n                    </Grid>\n                </Grid>\n                <Grid\n                    container={true}\n                    justify='flex-start'\n                    wrap='nowrap'\n                >\n                    <Grid>\n                        <Typography variant='body2' style={{ fontSize: '13.57px' }}>\n                            {`${t('CopyDrawingToProjectSpecModal.lastUpdate')}: ${utcToLocal(spec.get('modifiedDate')) || 'N/A'}`}\n                        </Typography>\n                    </Grid>\n                </Grid>\n            </div>\n        </Grid>\n    );\n};\n\nexport default SpecificationRow;","import React, {useMemo, useState, useEffect, useRef} from 'react';\nimport {\n    Button,\n    CircularProgress,\n    Grid,\n    InputAdornment,\n    TextField,\n    Theme,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {MassUpdateProjectSpecDetailConfigAction, UpdateProjectSpecDetailConfigAction} from '../../modules/ProjectModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    CopyAction,\n    CreateSpecAction,\n    GetSpecsSucceededAction,\n    LoadingSearchedSpecAction,\n    SearchSpecsSucceededAction,\n    SetModeAction,\n    SpecToolSpecListSearchSpecsAction\n} from '../../modules/SpecModule/actions';\nimport {\n    makeSelectCopyStatus,\n    makeSelectSearchedSpecs,\n    makeSelectSearchingSpecs\n} from '../../modules/SpecModule/selectors';\nimport _ from 'lodash';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport SpecificationRow from './SpecificationRow';\nimport {makeSelectOverlayComponentProp} from '../../modules/ApplicationModule/selectors';\nimport {COPY_MODAL} from './index';\nimport {AMPLITUDE_EVENT, GUEST_USER_ID, Mode, SPEC_DETAIL_PATH} from '../../constants';\nimport {push} from 'connected-react-router';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {fromJS, List, Map as ImmuMap} from 'immutable';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport CreateNewSpecModal from '../CreateNewSpecModal';\nimport {FixedSizeList} from 'react-window';\nimport { modalWidth } from './index';\nimport {makeSelectLocation} from '../../modules/RouterModule/selectors';\nimport {makeSelectProjectSpecConfig} from '../../modules/ProjectModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    searchContainer: {\n        padding: theme.spacing(0, 3),\n        display: 'flex'\n    },\n    row: {\n        cursor: 'pointer',\n        padding: theme.spacing(0, 2),\n        borderBottom: `1px solid ${theme.palette.divider}`,\n        '&:hover': {\n            backgroundColor: theme.palette.action.hover\n        }\n    },\n    list: {\n        padding: theme.spacing(0, 3),\n        height: '412px',\n        width: '100%',\n        justifyContent: 'center',\n        alignItems: 'center'\n    },\n}));\nconst searchOptions = {\n    limit: 50,\n    offset: 0,\n    orderBy: {\n        id: -1\n    }\n} as const;\nconst getSearchFilters = (keyword: string) => ({\n    'and': [\n        {\n            'name': {\n                'like': keyword\n            }\n        },\n        { // prevent user from altering isAi destinations\n            'isAi': {\n                'eq': false\n            }\n        },\n        {\n            'projectId': {\n                'eq': null,\n            }\n        },\n        { 'createdBy.user.id': { neq: GUEST_USER_ID } }\n    ]\n});\nconst CopyToSpec = ({\n    onCancel\n}) => {\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const location = useSelector(makeSelectLocation());\n    const [inputValue, setInputValue] = useState('');\n    const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const isLoading = useSelector(makeSelectSearchingSpecs());\n    const data = useSelector(makeSelectSearchedSpecs());\n    const { sourceSpecs, sourceProjectId, sourceType, amplitudeSourceData } = useSelector(makeSelectOverlayComponentProp(COPY_MODAL));\n    const status = useSelector(makeSelectCopyStatus());\n    const amplitudeData = useAmplitudeData();\n    const isCopying = status.get('isLoading');\n    const [selectedItemIndex, setSelectedItemIndex] = useState(null);\n    const hasSearchedOnce = useRef(false);\n    const quickSearchSpecs = (keyword: string) => {\n        hasSearchedOnce.current = true;\n        dispatch(new SpecToolSpecListSearchSpecsAction({\n            options: searchOptions,\n            filters: getSearchFilters(keyword)\n        }));\n    };\n    const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n        quickSearchSpecs(keyword);\n    }, 500), []);\n    const handleInputChange = (e) => {\n        setInputValue(e.target.value);\n        setSelectedItemIndex(null);\n        if (e.target.value !== '') {\n            dispatch(new LoadingSearchedSpecAction());\n            debouncedSearch(e.target.value);\n        }\n    };\n    const handleClickNew = () => {\n        setIsCreateModalOpen(true);\n    };\n    const copySpec = (specId, specName, createNew = false) => {\n        dispatch(new CopyAction({\n            sourceProjectId,\n            sourceType,\n            sourceSpecs,\n            destinationSpecId: specId,\n            destinationType: 'standard',\n            onSuccess: (newSpecs) => {\n                const trackedData = {\n                    ...amplitudeData(),\n                    ...amplitudeSourceData ? amplitudeSourceData : {},\n                    destinationType: 'Spec',\n                    destinationId: specId,\n                    destinationName: specName,\n                    createNew,\n                };\n\n                dispatch(new SetModeAction(Mode.spec));\n                dispatch(new GetSpecsSucceededAction(newSpecs));\n                amplitude.logEvent(AMPLITUDE_EVENT.copyTo, trackedData);\n                onCancel(); // close copy modal\n                if (location.get('pathname') === `${SPEC_DETAIL_PATH}/${specId}`) {\n                    // keep selection of existing drawings, and add new drawings to be selected\n                    const specsDrawingIds = newSpecs?.reduce((acc, _spec) => {\n                        const _specId = _spec.get('id');\n                        return _spec.get('drawings').reduce((_acc, drawing) => {\n                            if (!projectSpecDetailConfig.getIn([_specId, drawing.get('id')])) {\n                                return _acc.update(_specId, List(), list => list.push(drawing.get('id')));\n                            }\n                            return _acc;\n                        }, acc);\n                    }, fromJS({}) as ImmuMap<number, List<number>>);\n\n                    if (specsDrawingIds?.size > 0) {\n                        dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked: true }));\n                    }\n                } else {\n                     // reset project spec detail config\n                    dispatch(new UpdateProjectSpecDetailConfigAction({}));\n                    dispatch(push(`${SPEC_DETAIL_PATH}/${specId}`));\n                }\n            },\n        }));\n    };\n    const renderRow = ({ index: itemIndex, style }) => {\n        const spec = data.get(itemIndex);\n        const specId = spec.get('id');\n        const specName = spec.get('name');\n        return <SpecificationRow\n            index={itemIndex}\n            style={style}\n            onClick={() => {\n                setSelectedItemIndex(itemIndex);\n                // copySpec(specId, specName);\n            }}\n            selected={itemIndex === selectedItemIndex}\n            spec={spec}\n        />;\n    };\n    const onCopyButtonClicked = () => {\n        const spec = data.get(selectedItemIndex);\n        const specId = spec.get('id');\n        const specName = spec.get('name');\n        copySpec(specId, specName);\n    };\n    useEffect(() => {\n        if (data?.count()) {\n            dispatch(new SearchSpecsSucceededAction({ specs: List(), count: 0, hasNextPage: false }));\n        }\n    }, []);\n    return (\n        <>\n            <Grid item={true} className={classes.searchContainer}>\n                <TextField\n                    autoFocus={true}\n                    value={inputValue}\n                    onChange={handleInputChange}\n                    fullWidth={true}\n                    disabled={isCopying}\n                    placeholder={t('CopyModal.enterYourSearch')}\n                    InputProps={{\n                        startAdornment: <InputAdornment position='start'>\n                            <SearchIcon style={{ color: theme.palette.grey[600] }} />\n                        </InputAdornment>,\n                    }}\n                />\n                <Button variant='outlined' color='primary' onClick={handleClickNew} style={{ marginLeft: '20.45px', padding: '0 30.28px'}}>+{t('CopyModal.new')}</Button>\n            </Grid>\n            <Grid\n                container={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n                className={classes.list}\n            >\n                {\n                    (isLoading && inputValue) || isCopying ? <Grid container={true} direction='column' alignItems='center'>\n                            <Typography variant='h6'>\n                                {isCopying ? t('CopyMasterToProjectModal.copying') : isLoading ? t('CopyMasterToProjectModal.searching') : null}\n                            </Typography>\n                            <CircularProgress color='primary' />\n                        </Grid>\n                        : (data.count() > 0 && inputValue)\n                            ? <FixedSizeList\n                                height={400}\n                                itemCount={data.size}\n                                itemSize={64}\n                                width={modalWidth - 48}\n                            >\n                                {renderRow}\n                            </FixedSizeList>\n                            : hasSearchedOnce.current ? <React.Fragment>\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.noResults')}\n                                </Typography>\n                                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                                    {t('CopyMasterToProjectModal.cantFind')}\n                                </Typography>\n                            </React.Fragment> :\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.searchByQuickSpecTitle')}\n                                </Typography>\n                }\n            </Grid>\n            <Grid container={true} justify='flex-end' style={{ padding: '24px' }}>\n                <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }}>{t('CopyModal.cancel')}</Button>\n                <Button variant='contained' color='primary' onClick={onCopyButtonClicked} disabled={!Number.isSafeInteger(selectedItemIndex) || isCopying} style={{ padding: '0 38px'}}>{t('CopyModal.copy')}</Button>\n            </Grid>\n            <CreateNewSpecModal\n                open={isCreateModalOpen}\n                onSubmit={(values, projectIdForCreatingSpec, isTestProject) => {\n                    dispatch(new CreateSpecAction({\n                        projectId: projectIdForCreatingSpec,\n                        spec: values,\n                        isTestSpec: isTestProject,\n                        onSuccess: (specId, specName) => {\n                            copySpec(specId, specName, true);\n                            setIsCreateModalOpen(false);\n                        }\n                    }));\n                }}\n                toggle={(open) => () => {\n                    setIsCreateModalOpen(open);\n                }}\n            />\n        </>\n    );\n};\n\nexport default CopyToSpec;","import React, {useMemo, useState, useEffect, useRef} from 'react';\nimport {\n    Button,\n    CircularProgress,\n    Grid,\n    InputAdornment,\n    TextField,\n    Theme,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {\n    CreateMasterProjectAction,\n    LoadingSearchedMastersInCopyModalAction,\n    SearchMastersInCopyModalAction,\n    SearchMastersInCopyModalSucceededAction,\n    CreateMasterProjectFromTemplateAction, DeleteMasterSucceededAction, GetMasterProjectByIdAction,\n    SelectAllDrawingsInSpecAction,\n    UpdateProjectSpecDetailConfigAction,\n    MassUpdateProjectSpecDetailConfigAction\n} from '../../modules/ProjectModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    makeSelectSearchedMastersInCopyModal,\n    makeSelectSearchingMastersInCopyModal,\n    makeSelectProjectSpecConfig,\n} from '../../modules/ProjectModule/selectors';\nimport _ from 'lodash';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {CopyAction, GetMasterSpecsSucceededAction, GetSpecsSucceededAction} from '../../modules/SpecModule/actions';\nimport {push} from 'connected-react-router';\nimport {AMPLITUDE_EVENT, MASTER_DETAIL_PATH} from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {makeSelectOverlayComponentProp} from '../../modules/ApplicationModule/selectors';\nimport {COPY_MODAL} from './index';\nimport {fromJS, List, Map as ImmuMap} from 'immutable';\nimport {makeSelectCopyStatus} from '../../modules/SpecModule/selectors';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport CreateNewMasterFromTemplateModal from '../CreateNewMasterFromTemplateModal';\nimport ProjectRow from './ProjectRow';\nimport {makeSelectLocation} from '../../modules/RouterModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    searchContainer: {\n        padding: theme.spacing(0, 3),\n        display: 'flex'\n    },\n    list: {\n        padding: theme.spacing(0, 3),\n        height: '412px',\n        width: '100%',\n        justifyContent: 'center',\n        alignItems: 'center'\n    },\n}));\nconst searchOptions = {\n    limit: 50,\n    offset: 0,\n    orderBy: {\n        id: -1\n    }\n} as const;\nconst getSearchFilters = (keyword: string) => {\n    const filter: any = {\n        'and': [\n            { // prevent user from altering isAi destinations\n                'isAi': {\n                    'eq': false\n                }\n            }\n        ]\n    };\n    if (keyword) {\n        filter.and.push({\n            'name': {\n                'like': keyword\n            }\n        });\n    }\n    return filter;\n};\nconst CopyToMaster = ({\n    onCancel\n}) => {\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const location = useSelector(makeSelectLocation());\n    const [inputValue, setInputValue] = useState('');\n    const [selectionState, setSelectionState] = useState({});\n    const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n    const [selectedMasterId, setSelectedMasterId] = useState(null);\n    const [expandedMasterId, setExpandedMasterId] = useState(null);\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const isLoading = useSelector(makeSelectSearchingMastersInCopyModal());\n    const data = useSelector(makeSelectSearchedMastersInCopyModal());\n    const { sourceSpecs, sourceProjectId, sourceType, amplitudeSourceData } = useSelector(makeSelectOverlayComponentProp(COPY_MODAL));\n    const status = useSelector(makeSelectCopyStatus());\n    const amplitudeData = useAmplitudeData();\n    const isCopying = status.get('isLoading');\n    const hasSearchedOnce = useRef(false);\n    const quickSearchMaster = (keyword: string) => {\n        hasSearchedOnce.current = true;\n        dispatch(new SearchMastersInCopyModalAction({\n            options: searchOptions,\n            filters: getSearchFilters(keyword)\n        }));\n    };\n    const reset = () => {\n        setSelectionState({});\n        setIsCreateModalOpen(false);\n        setSelectedMasterId(null);\n        setExpandedMasterId(null);\n    };\n    const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n        quickSearchMaster(keyword);\n    }, 500), []);\n    const handleInputChange = (e) => {\n        setInputValue(e.target.value);\n        reset();\n        if (e.target.value !== '') {\n            dispatch(new LoadingSearchedMastersInCopyModalAction());\n            debouncedSearch(e.target.value);\n        }\n    };\n    const handleClickNew = () => {\n        setIsCreateModalOpen(true);\n    };\n    const copyMaster = (master, createNew = false, selectedSpecs) => {\n        const masterId = master?.get('id');\n        const masterName = master?.get('name');\n        const body = {\n            hasMultipleDestinationSpecs: true,\n            mappings: [\n                ...createNew ? [{\n                    sourceProjectId,\n                    sourceType,\n                    sourceSpecs,\n                    destinationProjectId: masterId,\n                    destinationType: 'master' as const,\n                    forceCreateNewSpec: true,\n                    newSpecName: t('CopyMasterToProjectModal.newProductGroup')\n                }] : [],\n                ...selectedSpecs.map((spec) => {\n                    return ({\n                        sourceProjectId,\n                        sourceType,\n                        sourceSpecs,\n                        destinationSpecId: spec.get('id'),\n                        destinationType: 'master' as const,\n                    });\n                })]\n        };\n        dispatch(new CopyAction({\n            body,\n            onSuccess: (newSpecs) => {\n                const trackedData = {\n                    ...amplitudeData(),\n                    ...amplitudeSourceData ? amplitudeSourceData : {},\n                    destinationType: 'Master',\n                    destinationId: masterId,\n                    destinationName: masterName,\n                    createNew,\n                };\n                dispatch(new GetMasterSpecsSucceededAction(newSpecs));\n                amplitude.logEvent(AMPLITUDE_EVENT.copyTo, trackedData);\n                onCancel(); // close copy modal\n                if (location.get('pathname') === `${MASTER_DETAIL_PATH}/${masterId}`) {\n                    if (createNew) {\n                        dispatch(new SelectAllDrawingsInSpecAction({\n                            spec: newSpecs.get(0),\n                        }));\n                    } else {\n                        // keep selection of existing drawings, and add new drawings to be selected\n                        const specsDrawingIds = newSpecs?.reduce((acc, _spec) => {\n                            const _specId = _spec.get('id');\n                            return _spec.get('drawings').reduce((_acc, drawing) => {\n                                if (!projectSpecDetailConfig.getIn([_specId, drawing.get('id')])) {\n                                    return _acc.update(_specId, List(), list => list.push(drawing.get('id')));\n                                }\n                                return _acc;\n                            }, acc);\n                        }, fromJS({}) as ImmuMap<number, List<number>>);\n\n                        if (specsDrawingIds?.size > 0) {\n                            dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked: true }));\n                        }\n                    }\n                    dispatch(new GetMasterProjectByIdAction({ id: masterId }));\n                } else {\n                    dispatch(new DeleteMasterSucceededAction({\n                        masters: List([master]),\n                    }));\n                    dispatch(push(`${MASTER_DETAIL_PATH}/${masterId}`));\n                }\n            },\n        }));\n    };\n    const renderRow = (master) => {\n        const masterId = master.get('id');\n        const specs = master.get('specs');\n        return <ProjectRow\n            key={masterId}\n            selectedIndexes={selectionState[masterId]}\n            onClick={() => {\n                if (selectedMasterId !== masterId) {\n                    setSelectedMasterId(masterId);\n                    setExpandedMasterId(masterId);\n                    if (specs.count() === 0 && !selectionState[masterId]?.includes(0)) {\n                        // preselect createNewSpec\n                        setSelectionState((prevState) => ({\n                            ...prevState,\n                            [masterId]: prevState[masterId] ? [...prevState[masterId], 0] : [0]\n                        }));\n                    }\n                } else {\n                    if (expandedMasterId === masterId) {\n                        setExpandedMasterId(null);\n                    } else {\n                        setExpandedMasterId(masterId);\n                    }\n                }\n            }}\n            isExpanded={expandedMasterId === masterId}\n            onToggleExpand={(value) => {\n                if (value) {\n                    setExpandedMasterId(masterId);\n                } else {\n                    setExpandedMasterId(null);\n                }\n            }}\n            isSelected={selectedMasterId === masterId}\n            onSelect={(index, isSelected) => {\n                if (selectedMasterId !== masterId) {\n                    setSelectedMasterId(masterId);\n                }\n                if (isSelected) {\n                    // select an item\n                    setSelectionState((prevState) => ({\n                        ...prevState,\n                        [masterId]: prevState[masterId] ? [...prevState[masterId], index] : [index]\n                    }));\n                } else {\n                    // unselect an item\n                    setSelectionState((prevState) => ({\n                        ...prevState,\n                        [masterId]: prevState[masterId] ?\n                            prevState[masterId].filter((selectedIndex) => selectedIndex !== index) : []\n                    }));\n                }\n            }}\n            project={master}\n        />;\n    };\n    const handleClickCopyButton = () => {\n        const master = data?.find((_master) => _master.get('id') === selectedMasterId);\n        const createNew = selectionState[selectedMasterId]?.includes(0);\n        const specs = master?.get('specs');\n        const selectedSpecs = specs?.filter((spec, index) => {\n            return selectionState[selectedMasterId]?.includes(index + 1);\n        });\n        copyMaster(master, createNew, selectedSpecs);\n    };\n\n    useEffect(() => {\n        if (data?.count()) {\n            dispatch(new SearchMastersInCopyModalSucceededAction({ masters: List(), count: 0, hasNextPage: false }));\n        }\n    }, []);\n    return (\n        <>\n            <Grid item={true} className={classes.searchContainer}>\n                <TextField\n                    autoFocus={true}\n                    value={inputValue}\n                    onChange={handleInputChange}\n                    fullWidth={true}\n                    disabled={isCopying}\n                    placeholder={t('CopyModal.enterYourSearch')}\n                    InputProps={{\n                        startAdornment: <InputAdornment position='start'>\n                            <SearchIcon style={{ color: theme.palette.grey[600] }} />\n                        </InputAdornment>,\n                    }}\n                />\n                <Button variant='outlined' color='primary' onClick={handleClickNew} style={{ marginLeft: '20.45px', padding: '0 30.28px'}}>+{t('CopyModal.new')}</Button>\n            </Grid>\n            <Grid\n                container={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n                className={classes.list}\n            >\n                {\n                    (isLoading && inputValue) || isCopying ? <Grid container={true} direction='column' alignItems='center'>\n                            <Typography variant='h6'>\n                                {isCopying ? t('CopyMasterToProjectModal.copying') : isLoading ? t('CopyMasterToProjectModal.searching') : null}\n                            </Typography>\n                            <CircularProgress color='primary' />\n                        </Grid>\n                        : (data.count() > 0 && inputValue)\n                            ? <div style={{ overflow: 'auto', width: '100%', marginTop: '25px', minHeight: '100%'}}>\n                                {data.map((master) => {\n                                    return renderRow(master);\n                                })}\n                            </div>\n                            : hasSearchedOnce.current ? <React.Fragment>\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.noResults')}\n                                </Typography>\n                                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                                    {t('CopyMasterToProjectModal.cantFind')}\n                                </Typography>\n                            </React.Fragment> :\n                                <Typography variant='h6'>\n                                    {t('CopyMasterToProjectModal.searchByMasterTitle')}\n                                </Typography>\n                }\n            </Grid>\n            <Grid container={true} justify='flex-end' style={{ padding: '24px' }}>\n                <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }}>{t('CopyModal.cancel')}</Button>\n                <Button\n                    variant='contained'\n                    color='primary'\n                    onClick={handleClickCopyButton}\n                    disabled={selectedMasterId === null || !(selectionState[selectedMasterId]?.length > 0) || isCopying}\n                    style={{ padding: '0 38px'}}>\n                    {t('CopyModal.copy')}\n                </Button>\n            </Grid>\n            <CreateNewMasterFromTemplateModal\n                open={isCreateModalOpen}\n                onSubmit={(values, wholeTemplateSelected) => {\n                    const name = values?.get('name');\n                    const collaborators = values?.get('collaborators');\n                    const selectedTemplateId = values?.getIn(['selectedDrawings', 0, 'templateId']);\n                    const selectedDrawings = values?.get('selectedDrawings') ?? [];\n                    const keyedDrawings = {};\n                    selectedDrawings.forEach(({ specId, id: drawingId }) => {\n                        if (keyedDrawings[specId]) {\n                            keyedDrawings[specId].push(drawingId);\n                        } else {\n                            keyedDrawings[specId] = [drawingId];\n                        }\n                    });\n                    const specDrawingsFormatted = [];\n                    // tslint:disable-next-line:forin\n                    for (const key in keyedDrawings) {\n                        const drawings = keyedDrawings[key];\n                        specDrawingsFormatted.push({\n                            id: key,\n                            drawings: drawings.map((drawingId) => ({ id: drawingId }))\n                        });\n                    }\n                    const payload = {\n                        masterTemplateId: selectedTemplateId,\n                        master: {\n                            building: values?.get('building'),\n                            location: values?.get('location'),\n                            name,\n                            collaborators\n                        },\n                    } as any;\n                    const createMasterFromTemplate = selectedDrawings.length > 0;\n                    // tslint:disable-next-line:no-shadowed-variable\n                    const onSuccess = (resolve) => (masters) => {\n                        const newMaster = masters.get(0);\n                        setIsCreateModalOpen(false);\n                        if (createMasterFromTemplate) {\n                            // when copy to a master created from a template, create a new spec to store copied drawings\n                            copyMaster(newMaster,true, []);\n                        } else {\n                            // when copy to a master not created from a template, there will be an blank spec created and we will this blank spec to store copied drawings\n                            copyMaster(newMaster,false, newMaster.get('specs'));\n                        }\n                        resolve();\n                    };\n                    if (createMasterFromTemplate) { // create master from template\n                        payload.copyInstructions = { specs: specDrawingsFormatted};\n                        payload.allSelected = wholeTemplateSelected;\n                        return new Promise((resolve, reject) => {\n                            dispatch(new CreateMasterProjectFromTemplateAction({\n                                ...payload,\n                                onSuccess: onSuccess(resolve),\n                                onFailed: () => reject()\n                            }));\n                        });\n                    } else { // create master without template\n                        return new Promise((resolve,reject) => {\n                            dispatch(new CreateMasterProjectAction({\n                                master: {\n                                    name,\n                                    location: values?.get('location'),\n                                    building: values?.get('building'),\n                                    collaborators,\n                                },\n                                onSuccess: onSuccess(resolve),\n                                onFailed: () => reject()\n                            }));\n                        });\n                    }\n                }}\n                onClose={() => {\n                    setIsCreateModalOpen(false);\n                }}\n            />\n        </>\n    );\n};\n\nexport default CopyToMaster;","import React, {useEffect, useState} from 'react';\nimport {ControlledModal} from '../../components';\nimport {\n    FormControlLabel,\n    Paper,\n    Radio,\n    RadioGroup,\n    Theme,\n    Typography,\n    Tooltip,\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {SetOverlayComponentPropsAction, ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport CopyToProject from './CopyToProject';\nimport CopyToSpec from './CopyToSpec';\nimport CopyToMaster from './CopyToMaster';\nimport { makeSelectUserCanManageMasters } from '../../modules/AtsModule/selectors';\n\ntype DestinationType = 'project' | 'specification' | 'master';\ninterface IProps {\n    defaultDestinationType: DestinationType;\n}\nexport const modalWidth = 1000;\nconst useStyles = makeStyles((theme: Theme) => ({\n    paper: {\n        height: '100%',\n        width: `${modalWidth}px`\n    },\n    modalTitle: {\n        padding: theme.spacing(3)\n    },\n    radioGroup: {\n        padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`\n    }\n}));\nexport const COPY_MODAL = 'COPY_MODAL'; // modal id\n\nconst CopyModal = ({ defaultDestinationType = 'project' }: IProps) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n\n    const [destinationType, setDestinationType] = useState<DestinationType>(defaultDestinationType);\n\n    React.useEffect(() => {\n      if (!userCanManageMasters && destinationType === 'master') {\n          setDestinationType('project');\n      }\n    }, [userCanManageMasters, destinationType]);\n\n    const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n        setDestinationType(((event.target as HTMLInputElement).value) as DestinationType);\n    };\n    const closeModal = () => {\n        dispatch(new ToggleOverlayComponentAction({\n            id: COPY_MODAL,\n            open: false\n        }));\n        dispatch(new SetOverlayComponentPropsAction({\n            id: COPY_MODAL,\n            props: {}\n        }));\n    };\n    // clear props on componentUnmount\n    useEffect(() => {\n        return closeModal;\n    }, []);\n    return (\n        <>\n            <ControlledModal\n                localKey={COPY_MODAL}\n                maxWidth={false}\n            >\n                <Paper className={classes.paper}>\n                    <Typography\n                        variant='h5'\n                        className={classes.modalTitle}\n                    >\n                        {t('CopyModal.copyDrawing')}\n                    </Typography>\n                    <RadioGroup\n                        row={true}\n                        value={destinationType}\n                        name='row-radio-buttons-group'\n                        onChange={handleChange}\n                        className={classes.radioGroup}\n                    >\n                        <FormControlLabel value='project' control={<Radio color='primary' />} label={t('CopyModal.toProject')} />\n                        <FormControlLabel value='specification' control={<Radio color='primary' />} label={t('CopyModal.toQuickSpec')} />\n                        <Tooltip title={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}>\n                            <span>\n                                <FormControlLabel value='master' control={<Radio color='primary' />} label={t('CopyModal.toMaster')} disabled={!userCanManageMasters} />\n                            </span>\n                        </Tooltip>\n                    </RadioGroup>\n                    {destinationType === 'project' ? <CopyToProject onCancel={closeModal} /> : null}\n                    {destinationType === 'specification' ? <CopyToSpec onCancel={closeModal} /> : null}\n                    {destinationType === 'master' ? <CopyToMaster onCancel={closeModal} /> : null}\n                </Paper>\n            </ControlledModal>\n        </>\n    );\n};\n\nexport default CopyModal;","/**\n *\n * This function receives as argument a number and returns it as string one formatted with 1000 number separator\n */\nexport function formatThousandsNumber(value: any, separator: string = ',') {\n  const str = value.toString();\n  const dotIndex = str.indexOf('.');\n  const intPart = dotIndex === -1 ? str : str.slice(0, dotIndex);\n  const decPart = dotIndex === -1 ? '' : str.slice(dotIndex);\n  return intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator) + decPart;\n}\n\nexport function removeSeparator(value: any, separator: string = ',') {\n  const regex = new RegExp(/(?!\\d+),(?=\\d{3})/, 'g');\n  return value.toString().replace(regex, '');\n}\n\nexport function isValidNumberInput(value) {\n  const num = Number(value);\n  return value !== '' && !isNaN(num) && num !== 0;\n}\n\n// An <input type='number'> lets the browser accept exponent and sign characters while it reports an empty\n// value, so a change handler never gets to reject them. Stop them at the keyboard instead.\nconst NON_NUMERIC_INPUT_KEYS = ['e', 'E', '+', '-'];\n\nexport function preventNonNumericKeys(event: { key: string; preventDefault: () => void }) {\n  if (NON_NUMERIC_INPUT_KEYS.indexOf(event.key) !== -1) {\n    event.preventDefault();\n  }\n}\n\nexport function truncateToDecimal(value: string, decimalPrecision: number): string {\n  if (!value || isNaN(Number(value))) {\n    return value;\n  }\n\n  const dotIndex = value.indexOf('.');\n  if (dotIndex === -1) {\n    return value;\n  }\n  if (!decimalPrecision) {\n    return value.slice(0, dotIndex);\n  }\n  return value.slice(0, dotIndex + 1 + decimalPrecision);\n}","import { fromJS, List } from 'immutable';\nimport { XrefData } from '../../models';\nimport { IMap } from 'ats-utils/src';\n\nexport default {};\n// export enum CategoryDisplayType {\n//   DISPLAY_BY_CATEGORY = 'ProductModule.CategoryDisplayType.DISPLAY_BY_CATEGORY',\n//   DISPLAY_BY_DIVISION = 'ProductModule.CategoryDisplayType.DISPLAY_BY_DIVISION',\n// }\n\n// export enum DisplayDrawingType {\n//   DRAWING = 'ProductCategorySelection.DisplayDrawingType.DRAWING',\n//   DIVISION = 'ProductCategorySelection.DisplayDrawingType.DIVISION',\n// }\n\n// export enum QuickSearchType {\n//   PRODUCT = 'ProductModule.QuickSearchType.PRODUCT',\n//   SERIES = 'ProductModule.QuickSearchType.SERIES',\n//   CATEGORY = 'ProductModule.QuickSearchType.CATEGORY',\n//   XREF = 'ProductModule.QuickSearchType.XREF',\n// }\n\nexport const DEFAULT_MOUNT_POINT = 'xref';\nexport const CROSS_REF_QUICKSEARCH_FORM = 'CrossRefModule.CROSS_REF_QUICKSEARCH_FORM';\n\n// export const trimmedXrefSearchResults = (searchResults: List<IMap<XrefData>>, type: 'competitorProduct' | 'sponsorProduct') => {\n//   const trimmedResults = searchResults?.map((xrefData, index) => {\n//     return {\n//       id: xrefData.getIn([type, 'id']),\n//       pn: xrefData.getIn([type, 'productNumber']),\n//       t: xrefData.getIn([`${type}Type`]),\n//       b: xrefData.getIn([type, 'brand']),\n//       c: xrefData.getIn([type, 'categoryName']),\n//     };\n//   });\n\n//   const resultsKeyRef = {\n//     id: `${type} id`,\n//     pn: `${type} productNumber`,\n//     t: `${type}Type`,\n//     b: `${type} brand`,\n//     c: `${type} categoryName`,\n//   }\n\n//   return {\n//     trimmedResults,\n//     resultsKeyRef,\n//   };\n// };\n\n\n\n\n\n\n\nexport const trimmedXrefSearchResults = (searchResults: List<IMap<XrefData>>, type: 'competitorProduct' | 'sponsorProduct') => {\n  let brandRefCounter = 1;\n  let categoryRefCounter = 1;\n  let objectTypeRefCounter = 1;\n  const trimmedResults = searchResults?.reduce((acc, xrefData, index) => {\n    return acc.withMutations((ctx) => {\n      const product = xrefData.get(type);\n      const productId = product.get('id');\n      const productType = xrefData.get(`${type}Type`);\n      const productNumber = product.get('productNumber');\n      const brandName = product.get('brand');\n      const categoryName = product.get('categoryName');\n\n      ctx.update(`${type}Id`, (list) => list.push(productId));\n      ctx.update(`${type}ProductNumber`, (list) => list.push(productNumber));\n      // ctx.update('competitorProductBrandName', (list) => list.push(competitorProductBrandName));\n      // ctx.update('competitorProductCategoryName', (list) => list.push(competitorProductCategoryName));\n      // ctx.update('competitorProductType', (list) => list.push(competitorProductType));\n\n      const brandNameRef = ctx.getIn(['brandNameRef', brandName]);\n      if (brandNameRef) {\n        ctx.update(`${type}BrandName`, (list) => list.push(brandNameRef));\n      } else {\n        ctx.update(`${type}BrandName`, (list) => list.push(brandRefCounter));\n        ctx.setIn(['brandNameRef', brandName], brandRefCounter);\n        brandRefCounter = brandRefCounter + 1;\n      }\n\n      const categoryNameRef = ctx.getIn(['categoryNameRef', categoryName]);\n      if (categoryNameRef) {\n        ctx.update(`${type}CategoryName`, (list) => list.push(categoryNameRef));\n      } else {\n        ctx.update(`${type}CategoryName`, (list) => list.push(categoryRefCounter));\n        ctx.setIn(['categoryNameRef', categoryName], categoryRefCounter);\n        categoryRefCounter = categoryRefCounter + 1;\n      }\n\n      const objectTypeRef = ctx.getIn(['objectTypeRef', productType]);\n      if (objectTypeRef) {\n        ctx.update(`${type}Type`, (list) => list.push(objectTypeRef));\n      } else {\n        ctx.update(`${type}Type`, (list) => list.push(objectTypeRefCounter));\n        ctx.setIn([`${type}TypeRef`, productType], objectTypeRefCounter);\n        objectTypeRefCounter = objectTypeRefCounter + 1;\n      }\n    });\n  }, fromJS({\n    [`${type}Id`]: [],\n    [`${type}Type`]: [],\n    [`${type}ProductNumber`]: [],\n    [`${type}BrandName`]: [],\n    [`${type}CategoryName`]: [],\n    brandNameRef: {},\n    categoryNameRef: {},\n    [`${type}TypeRef`]: {},\n  }));\n\n  return { trimmedResults, resultsKeyRef: {}};\n};","export const COUNTRIES_OBJECT = {\n  '49518': {\n    'iso_alpha2': 'RW',\n    'iso_alpha3': 'RWA',\n    'value': 'Rwanda'\n  },\n  '51537': {\n    'iso_alpha2': 'SO',\n    'iso_alpha3': 'SOM',\n    'value': 'Somalia'\n  },\n  '69543': {\n    'iso_alpha2': 'YE',\n    'iso_alpha3': 'YEM',\n    'value': 'Yemen'\n  },\n  '99237': {\n    'iso_alpha2': 'IQ',\n    'iso_alpha3': 'IRQ',\n    'value': 'Iraq'\n  },\n  '102358': {\n    'iso_alpha2': 'SA',\n    'iso_alpha3': 'SAU',\n    'value': 'Saudi Arabia'\n  },\n  '130758': {\n    'iso_alpha2': 'IR',\n    'iso_alpha3': 'IRN',\n    'value': 'Iran'\n  },\n  '146669': {\n    'iso_alpha2': 'CY',\n    'iso_alpha3': 'CYP',\n    'value': 'Cyprus'\n  },\n  '149590': {\n    'iso_alpha2': 'TZ',\n    'iso_alpha3': 'TZA',\n    'value': 'Tanzania'\n  },\n  '163843': {\n    'iso_alpha2': 'SY',\n    'iso_alpha3': 'SYR',\n    'value': 'Syria'\n  },\n  '174982': {\n    'iso_alpha2': 'AM',\n    'iso_alpha3': 'ARM',\n    'value': 'Armenia'\n  },\n  '192950': {\n    'iso_alpha2': 'KE',\n    'iso_alpha3': 'KEN',\n    'value': 'Kenya'\n  },\n  '203312': {\n    'iso_alpha2': 'CD',\n    'iso_alpha3': 'COD',\n    'value': 'Democratic Republic of the Congo'\n  },\n  '223816': {\n    'iso_alpha2': 'DJ',\n    'iso_alpha3': 'DJI',\n    'value': 'Djibouti'\n  },\n  '226074': {\n    'iso_alpha2': 'UG',\n    'iso_alpha3': 'UGA',\n    'value': 'Uganda'\n  },\n  '239880': {\n    'iso_alpha2': 'CF',\n    'iso_alpha3': 'CAF',\n    'value': 'Central African Republic'\n  },\n  '241170': {\n    'iso_alpha2': 'SC',\n    'iso_alpha3': 'SYC',\n    'value': 'Seychelles'\n  },\n  '248816': {\n    'iso_alpha2': 'JO',\n    'iso_alpha3': 'JOR',\n    'value': 'Jordan'\n  },\n  '272103': {\n    'iso_alpha2': 'LB',\n    'iso_alpha3': 'LBN',\n    'value': 'Lebanon'\n  },\n  '285570': {\n    'iso_alpha2': 'KW',\n    'iso_alpha3': 'KWT',\n    'value': 'Kuwait'\n  },\n  '286963': {\n    'iso_alpha2': 'OM',\n    'iso_alpha3': 'OMN',\n    'value': 'Oman'\n  },\n  '289688': {\n    'iso_alpha2': 'QA',\n    'iso_alpha3': 'QAT',\n    'value': 'Qatar'\n  },\n  '290291': {\n    'iso_alpha2': 'BH',\n    'iso_alpha3': 'BHR',\n    'value': 'Bahrain'\n  },\n  '290557': {\n    'iso_alpha2': 'AE',\n    'iso_alpha3': 'ARE',\n    'value': 'United Arab Emirates'\n  },\n  '294640': {\n    'iso_alpha2': 'IL',\n    'iso_alpha3': 'ISR',\n    'value': 'Israel'\n  },\n  '298795': {\n    'iso_alpha2': 'TR',\n    'iso_alpha3': 'TUR',\n    'value': 'Turkey'\n  },\n  '337996': {\n    'iso_alpha2': 'ET',\n    'iso_alpha3': 'ETH',\n    'value': 'Ethiopia'\n  },\n  '338010': {\n    'iso_alpha2': 'ER',\n    'iso_alpha3': 'ERI',\n    'value': 'Eritrea'\n  },\n  '357994': {\n    'iso_alpha2': 'EG',\n    'iso_alpha3': 'EGY',\n    'value': 'Egypt'\n  },\n  '366755': {\n    'iso_alpha2': 'SD',\n    'iso_alpha3': 'SDN',\n    'value': 'Sudan'\n  },\n  '390903': {\n    'iso_alpha2': 'GR',\n    'iso_alpha3': 'GRC',\n    'value': 'Greece'\n  },\n  '433561': {\n    'iso_alpha2': 'BI',\n    'iso_alpha3': 'BDI',\n    'value': 'Burundi'\n  },\n  '453733': {\n    'iso_alpha2': 'EE',\n    'iso_alpha3': 'EST',\n    'value': 'Estonia'\n  },\n  '458258': {\n    'iso_alpha2': 'LV',\n    'iso_alpha3': 'LVA',\n    'value': 'Latvia'\n  },\n  '587116': {\n    'iso_alpha2': 'AZ',\n    'iso_alpha3': 'AZE',\n    'value': 'Azerbaijan'\n  },\n  '597427': {\n    'iso_alpha2': 'LT',\n    'iso_alpha3': 'LTU',\n    'value': 'Lithuania'\n  },\n  '607072': {\n    'iso_alpha2': 'SJ',\n    'iso_alpha3': 'SJM',\n    'value': 'Svalbard and Jan Mayen'\n  },\n  '614540': {\n    'iso_alpha2': 'GE',\n    'iso_alpha3': 'GEO',\n    'value': 'Georgia'\n  },\n  '617790': {\n    'iso_alpha2': 'MD',\n    'iso_alpha3': 'MDA',\n    'value': 'Moldova'\n  },\n  '630336': {\n    'iso_alpha2': 'BY',\n    'iso_alpha3': 'BLR',\n    'value': 'Belarus'\n  },\n  '660013': {\n    'iso_alpha2': 'FI',\n    'iso_alpha3': 'FIN',\n    'value': 'Finland'\n  },\n  '661882': {\n    'iso_alpha2': 'AX',\n    'iso_alpha3': 'ALA',\n    'value': 'Aland Islands'\n  },\n  '690791': {\n    'iso_alpha2': 'UA',\n    'iso_alpha3': 'UKR',\n    'value': 'Ukraine'\n  },\n  '718075': {\n    'iso_alpha2': 'MK',\n    'iso_alpha3': 'MKD',\n    'value': 'Macedonia'\n  },\n  '719819': {\n    'iso_alpha2': 'HU',\n    'iso_alpha3': 'HUN',\n    'value': 'Hungary'\n  },\n  '732800': {\n    'iso_alpha2': 'BG',\n    'iso_alpha3': 'BGR',\n    'value': 'Bulgaria'\n  },\n  '783754': {\n    'iso_alpha2': 'AL',\n    'iso_alpha3': 'ALB',\n    'value': 'Albania'\n  },\n  '798544': {\n    'iso_alpha2': 'PL',\n    'iso_alpha3': 'POL',\n    'value': 'Poland'\n  },\n  '798549': {\n    'iso_alpha2': 'RO',\n    'iso_alpha3': 'ROU',\n    'value': 'Romania'\n  },\n  '831053': {\n    'iso_alpha2': 'XK',\n    'iso_alpha3': 'XKX',\n    'value': 'Kosovo'\n  },\n  '878675': {\n    'iso_alpha2': 'ZW',\n    'iso_alpha3': 'ZWE',\n    'value': 'Zimbabwe'\n  },\n  '895949': {\n    'iso_alpha2': 'ZM',\n    'iso_alpha3': 'ZMB',\n    'value': 'Zambia'\n  },\n  '921929': {\n    'iso_alpha2': 'KM',\n    'iso_alpha3': 'COM',\n    'value': 'Comoros'\n  },\n  '927384': {\n    'iso_alpha2': 'MW',\n    'iso_alpha3': 'MWI',\n    'value': 'Malawi'\n  },\n  '932692': {\n    'iso_alpha2': 'LS',\n    'iso_alpha3': 'LSO',\n    'value': 'Lesotho'\n  },\n  '933860': {\n    'iso_alpha2': 'BW',\n    'iso_alpha3': 'BWA',\n    'value': 'Botswana'\n  },\n  '934292': {\n    'iso_alpha2': 'MU',\n    'iso_alpha3': 'MUS',\n    'value': 'Mauritius'\n  },\n  '934841': {\n    'iso_alpha2': 'SZ',\n    'iso_alpha3': 'SWZ',\n    'value': 'Swaziland'\n  },\n  '935317': {\n    'iso_alpha2': 'RE',\n    'iso_alpha3': 'REU',\n    'value': 'Reunion'\n  },\n  '953987': {\n    'iso_alpha2': 'ZA',\n    'iso_alpha3': 'ZAF',\n    'value': 'South Africa'\n  },\n  '1024031': {\n    'iso_alpha2': 'YT',\n    'iso_alpha3': 'MYT',\n    'value': 'Mayotte'\n  },\n  '1036973': {\n    'iso_alpha2': 'MZ',\n    'iso_alpha3': 'MOZ',\n    'value': 'Mozambique'\n  },\n  '1062947': {\n    'iso_alpha2': 'MG',\n    'iso_alpha3': 'MDG',\n    'value': 'Madagascar'\n  },\n  '1149361': {\n    'iso_alpha2': 'AF',\n    'iso_alpha3': 'AFG',\n    'value': 'Afghanistan'\n  },\n  '1168579': {\n    'iso_alpha2': 'PK',\n    'iso_alpha3': 'PAK',\n    'value': 'Pakistan'\n  },\n  '1210997': {\n    'iso_alpha2': 'BD',\n    'iso_alpha3': 'BGD',\n    'value': 'Bangladesh'\n  },\n  '1218197': {\n    'iso_alpha2': 'TM',\n    'iso_alpha3': 'TKM',\n    'value': 'Turkmenistan'\n  },\n  '1220409': {\n    'iso_alpha2': 'TJ',\n    'iso_alpha3': 'TJK',\n    'value': 'Tajikistan'\n  },\n  '1227603': {\n    'iso_alpha2': 'LK',\n    'iso_alpha3': 'LKA',\n    'value': 'Sri Lanka'\n  },\n  '1252634': {\n    'iso_alpha2': 'BT',\n    'iso_alpha3': 'BTN',\n    'value': 'Bhutan'\n  },\n  '1269750': {\n    'iso_alpha2': 'IN',\n    'iso_alpha3': 'IND',\n    'value': 'India'\n  },\n  '1282028': {\n    'iso_alpha2': 'MV',\n    'iso_alpha3': 'MDV',\n    'value': 'Maldives'\n  },\n  '1282588': {\n    'iso_alpha2': 'IO',\n    'iso_alpha3': 'IOT',\n    'value': 'British Indian Ocean Territory'\n  },\n  '1282988': {\n    'iso_alpha2': 'NP',\n    'iso_alpha3': 'NPL',\n    'value': 'Nepal'\n  },\n  '1327865': {\n    'iso_alpha2': 'MM',\n    'iso_alpha3': 'MMR',\n    'value': 'Myanmar'\n  },\n  '1512440': {\n    'iso_alpha2': 'UZ',\n    'iso_alpha3': 'UZB',\n    'value': 'Uzbekistan'\n  },\n  '1522867': {\n    'iso_alpha2': 'KZ',\n    'iso_alpha3': 'KAZ',\n    'value': 'Kazakhstan'\n  },\n  '1527747': {\n    'iso_alpha2': 'KG',\n    'iso_alpha3': 'KGZ',\n    'value': 'Kyrgyzstan'\n  },\n  '1546748': {\n    'iso_alpha2': 'TF',\n    'iso_alpha3': 'ATF',\n    'value': 'French Southern Territories'\n  },\n  '1547314': {\n    'iso_alpha2': 'HM',\n    'iso_alpha3': 'HMD',\n    'value': 'Heard Island and McDonald Islands'\n  },\n  '1547376': {\n    'iso_alpha2': 'CC',\n    'iso_alpha3': 'CCK',\n    'value': 'Cocos Islands'\n  },\n  '1559582': {\n    'iso_alpha2': 'PW',\n    'iso_alpha3': 'PLW',\n    'value': 'Palau'\n  },\n  '1562822': {\n    'iso_alpha2': 'VN',\n    'iso_alpha3': 'VNM',\n    'value': 'Vietnam'\n  },\n  '1605651': {\n    'iso_alpha2': 'TH',\n    'iso_alpha3': 'THA',\n    'value': 'Thailand'\n  },\n  '1643084': {\n    'iso_alpha2': 'ID',\n    'iso_alpha3': 'IDN',\n    'value': 'Indonesia'\n  },\n  '1655842': {\n    'iso_alpha2': 'LA',\n    'iso_alpha3': 'LAO',\n    'value': 'Laos'\n  },\n  '1668284': {\n    'iso_alpha2': 'TW',\n    'iso_alpha3': 'TWN',\n    'value': 'Taiwan'\n  },\n  '1694008': {\n    'iso_alpha2': 'PH',\n    'iso_alpha3': 'PHL',\n    'value': 'Philippines'\n  },\n  '1733045': {\n    'iso_alpha2': 'MY',\n    'iso_alpha3': 'MYS',\n    'value': 'Malaysia'\n  },\n  '1814991': {\n    'iso_alpha2': 'CN',\n    'iso_alpha3': 'CHN',\n    'value': 'China'\n  },\n  '1819730': {\n    'iso_alpha2': 'HK',\n    'iso_alpha3': 'HKG',\n    'value': 'Hong Kong'\n  },\n  '1820814': {\n    'iso_alpha2': 'BN',\n    'iso_alpha3': 'BRN',\n    'value': 'Brunei'\n  },\n  '1821275': {\n    'iso_alpha2': 'MO',\n    'iso_alpha3': 'MAC',\n    'value': 'Macao'\n  },\n  '1831722': {\n    'iso_alpha2': 'KH',\n    'iso_alpha3': 'KHM',\n    'value': 'Cambodia'\n  },\n  '1835841': {\n    'iso_alpha2': 'KR',\n    'iso_alpha3': 'KOR',\n    'value': 'South Korea'\n  },\n  '1861060': {\n    'iso_alpha2': 'JP',\n    'iso_alpha3': 'JPN',\n    'value': 'Japan'\n  },\n  '1873107': {\n    'iso_alpha2': 'KP',\n    'iso_alpha3': 'PRK',\n    'value': 'North Korea'\n  },\n  '1880251': {\n    'iso_alpha2': 'SG',\n    'iso_alpha3': 'SGP',\n    'value': 'Singapore'\n  },\n  '1899402': {\n    'iso_alpha2': 'CK',\n    'iso_alpha3': 'COK',\n    'value': 'Cook Islands'\n  },\n  '1966436': {\n    'iso_alpha2': 'TL',\n    'iso_alpha3': 'TLS',\n    'value': 'Timor Leste'\n  },\n  '2017370': {\n    'iso_alpha2': 'RU',\n    'iso_alpha3': 'RUS',\n    'value': 'Russia'\n  },\n  '2029969': {\n    'iso_alpha2': 'MN',\n    'iso_alpha3': 'MNG',\n    'value': 'Mongolia'\n  },\n  '2077456': {\n    'iso_alpha2': 'AU',\n    'iso_alpha3': 'AUS',\n    'value': 'Australia'\n  },\n  '2078138': {\n    'iso_alpha2': 'CX',\n    'iso_alpha3': 'CXR',\n    'value': 'Christmas Island'\n  },\n  '2080185': {\n    'iso_alpha2': 'MH',\n    'iso_alpha3': 'MHL',\n    'value': 'Marshall Islands'\n  },\n  '2081918': {\n    'iso_alpha2': 'FM',\n    'iso_alpha3': 'FSM',\n    'value': 'Micronesia'\n  },\n  '2088628': {\n    'iso_alpha2': 'PG',\n    'iso_alpha3': 'PNG',\n    'value': 'Papua New Guinea'\n  },\n  '2103350': {\n    'iso_alpha2': 'SB',\n    'iso_alpha3': 'SLB',\n    'value': 'Solomon Islands'\n  },\n  '2110297': {\n    'iso_alpha2': 'TV',\n    'iso_alpha3': 'TUV',\n    'value': 'Tuvalu'\n  },\n  '2110425': {\n    'iso_alpha2': 'NR',\n    'iso_alpha3': 'NRU',\n    'value': 'Nauru'\n  },\n  '2134431': {\n    'iso_alpha2': 'VU',\n    'iso_alpha3': 'VUT',\n    'value': 'Vanuatu'\n  },\n  '2139685': {\n    'iso_alpha2': 'NC',\n    'iso_alpha3': 'NCL',\n    'value': 'New Caledonia'\n  },\n  '2155115': {\n    'iso_alpha2': 'NF',\n    'iso_alpha3': 'NFK',\n    'value': 'Norfolk Island'\n  },\n  '2186224': {\n    'iso_alpha2': 'NZ',\n    'iso_alpha3': 'NZL',\n    'value': 'New Zealand'\n  },\n  '2205218': {\n    'iso_alpha2': 'FJ',\n    'iso_alpha3': 'FJI',\n    'value': 'Fiji'\n  },\n  '2215636': {\n    'iso_alpha2': 'LY',\n    'iso_alpha3': 'LBY',\n    'value': 'Libya'\n  },\n  '2233387': {\n    'iso_alpha2': 'CM',\n    'iso_alpha3': 'CMR',\n    'value': 'Cameroon'\n  },\n  '2245662': {\n    'iso_alpha2': 'SN',\n    'iso_alpha3': 'SEN',\n    'value': 'Senegal'\n  },\n  '2260494': {\n    'iso_alpha2': 'CG',\n    'iso_alpha3': 'COG',\n    'value': 'Republic of the Congo'\n  },\n  '2264397': {\n    'iso_alpha2': 'PT',\n    'iso_alpha3': 'PRT',\n    'value': 'Portugal'\n  },\n  '2275384': {\n    'iso_alpha2': 'LR',\n    'iso_alpha3': 'LBR',\n    'value': 'Liberia'\n  },\n  '2287781': {\n    'iso_alpha2': 'CI',\n    'iso_alpha3': 'CIV',\n    'value': 'Ivory Coast'\n  },\n  '2300660': {\n    'iso_alpha2': 'GH',\n    'iso_alpha3': 'GHA',\n    'value': 'Ghana'\n  },\n  '2309096': {\n    'iso_alpha2': 'GQ',\n    'iso_alpha3': 'GNQ',\n    'value': 'Equatorial Guinea'\n  },\n  '2328926': {\n    'iso_alpha2': 'NG',\n    'iso_alpha3': 'NGA',\n    'value': 'Nigeria'\n  },\n  '2361809': {\n    'iso_alpha2': 'BF',\n    'iso_alpha3': 'BFA',\n    'value': 'Burkina Faso'\n  },\n  '2363686': {\n    'iso_alpha2': 'TG',\n    'iso_alpha3': 'TGO',\n    'value': 'Togo'\n  },\n  '2372248': {\n    'iso_alpha2': 'GW',\n    'iso_alpha3': 'GNB',\n    'value': 'Guinea-Bissau'\n  },\n  '2378080': {\n    'iso_alpha2': 'MR',\n    'iso_alpha3': 'MRT',\n    'value': 'Mauritania'\n  },\n  '2395170': {\n    'iso_alpha2': 'BJ',\n    'iso_alpha3': 'BEN',\n    'value': 'Benin'\n  },\n  '2400553': {\n    'iso_alpha2': 'GA',\n    'iso_alpha3': 'GAB',\n    'value': 'Gabon'\n  },\n  '2403846': {\n    'iso_alpha2': 'SL',\n    'iso_alpha3': 'SLE',\n    'value': 'Sierra Leone'\n  },\n  '2410758': {\n    'iso_alpha2': 'ST',\n    'iso_alpha3': 'STP',\n    'value': 'Sao Tome and Principe'\n  },\n  '2411586': {\n    'iso_alpha2': 'GI',\n    'iso_alpha3': 'GIB',\n    'value': 'Gibraltar'\n  },\n  '2413451': {\n    'iso_alpha2': 'GM',\n    'iso_alpha3': 'GMB',\n    'value': 'Gambia'\n  },\n  '2420477': {\n    'iso_alpha2': 'GN',\n    'iso_alpha3': 'GIN',\n    'value': 'Guinea'\n  },\n  '2434508': {\n    'iso_alpha2': 'TD',\n    'iso_alpha3': 'TCD',\n    'value': 'Chad'\n  },\n  '2440476': {\n    'iso_alpha2': 'NE',\n    'iso_alpha3': 'NER',\n    'value': 'Niger'\n  },\n  '2453866': {\n    'iso_alpha2': 'ML',\n    'iso_alpha3': 'MLI',\n    'value': 'Mali'\n  },\n  '2461445': {\n    'iso_alpha2': 'EH',\n    'iso_alpha3': 'ESH',\n    'value': 'Western Sahara'\n  },\n  '2464461': {\n    'iso_alpha2': 'TN',\n    'iso_alpha3': 'TUN',\n    'value': 'Tunisia'\n  },\n  '2510769': {\n    'iso_alpha2': 'ES',\n    'iso_alpha3': 'ESP',\n    'value': 'Spain'\n  },\n  '2542007': {\n    'iso_alpha2': 'MA',\n    'iso_alpha3': 'MAR',\n    'value': 'Morocco'\n  },\n  '2562770': {\n    'iso_alpha2': 'MT',\n    'iso_alpha3': 'MLT',\n    'value': 'Malta'\n  },\n  '2589581': {\n    'iso_alpha2': 'DZ',\n    'iso_alpha3': 'DZA',\n    'value': 'Algeria'\n  },\n  '2622320': {\n    'iso_alpha2': 'FO',\n    'iso_alpha3': 'FRO',\n    'value': 'Faroe Islands'\n  },\n  '2623032': {\n    'iso_alpha2': 'DK',\n    'iso_alpha3': 'DNK',\n    'value': 'Denmark'\n  },\n  '2629691': {\n    'iso_alpha2': 'IS',\n    'iso_alpha3': 'ISL',\n    'value': 'Iceland'\n  },\n  '2635167': {\n    'iso_alpha2': 'GB',\n    'iso_alpha3': 'GBR',\n    'value': 'United Kingdom'\n  },\n  '2658434': {\n    'iso_alpha2': 'CH',\n    'iso_alpha3': 'CHE',\n    'value': 'Switzerland'\n  },\n  '2661886': {\n    'iso_alpha2': 'SE',\n    'iso_alpha3': 'SWE',\n    'value': 'Sweden'\n  },\n  '2750405': {\n    'iso_alpha2': 'NL',\n    'iso_alpha3': 'NLD',\n    'value': 'Netherlands'\n  },\n  '2782113': {\n    'iso_alpha2': 'AT',\n    'iso_alpha3': 'AUT',\n    'value': 'Austria'\n  },\n  '2802361': {\n    'iso_alpha2': 'BE',\n    'iso_alpha3': 'BEL',\n    'value': 'Belgium'\n  },\n  '2921044': {\n    'iso_alpha2': 'DE',\n    'iso_alpha3': 'DEU',\n    'value': 'Germany'\n  },\n  '2960313': {\n    'iso_alpha2': 'LU',\n    'iso_alpha3': 'LUX',\n    'value': 'Luxembourg'\n  },\n  '2963597': {\n    'iso_alpha2': 'IE',\n    'iso_alpha3': 'IRL',\n    'value': 'Ireland'\n  },\n  '2993457': {\n    'iso_alpha2': 'MC',\n    'iso_alpha3': 'MCO',\n    'value': 'Monaco'\n  },\n  '3017382': {\n    'iso_alpha2': 'FR',\n    'iso_alpha3': 'FRA',\n    'value': 'France'\n  },\n  '3041565': {\n    'iso_alpha2': 'AD',\n    'iso_alpha3': 'AND',\n    'value': 'Andorra'\n  },\n  '3042058': {\n    'iso_alpha2': 'LI',\n    'iso_alpha3': 'LIE',\n    'value': 'Liechtenstein'\n  },\n  '3042142': {\n    'iso_alpha2': 'JE',\n    'iso_alpha3': 'JEY',\n    'value': 'Jersey'\n  },\n  '3042225': {\n    'iso_alpha2': 'IM',\n    'iso_alpha3': 'IMN',\n    'value': 'Isle of Man'\n  },\n  '3042362': {\n    'iso_alpha2': 'GG',\n    'iso_alpha3': 'GGY',\n    'value': 'Guernsey'\n  },\n  '3057568': {\n    'iso_alpha2': 'SK',\n    'iso_alpha3': 'SVK',\n    'value': 'Slovakia'\n  },\n  '3077311': {\n    'iso_alpha2': 'CZ',\n    'iso_alpha3': 'CZE',\n    'value': 'Czechia'\n  },\n  '3144096': {\n    'iso_alpha2': 'NO',\n    'iso_alpha3': 'NOR',\n    'value': 'Norway'\n  },\n  '3164670': {\n    'iso_alpha2': 'VA',\n    'iso_alpha3': 'VAT',\n    'value': 'Vatican'\n  },\n  '3168068': {\n    'iso_alpha2': 'SM',\n    'iso_alpha3': 'SMR',\n    'value': 'San Marino'\n  },\n  '3175395': {\n    'iso_alpha2': 'IT',\n    'iso_alpha3': 'ITA',\n    'value': 'Italy'\n  },\n  '3190538': {\n    'iso_alpha2': 'SI',\n    'iso_alpha3': 'SVN',\n    'value': 'Slovenia'\n  },\n  '3194884': {\n    'iso_alpha2': 'ME',\n    'iso_alpha3': 'MNE',\n    'value': 'Montenegro'\n  },\n  '3202326': {\n    'iso_alpha2': 'HR',\n    'iso_alpha3': 'HRV',\n    'value': 'Croatia'\n  },\n  '3277605': {\n    'iso_alpha2': 'BA',\n    'iso_alpha3': 'BIH',\n    'value': 'Bosnia and Herzegovina'\n  },\n  '3351879': {\n    'iso_alpha2': 'AO',\n    'iso_alpha3': 'AGO',\n    'value': 'Angola'\n  },\n  '3355338': {\n    'iso_alpha2': 'NA',\n    'iso_alpha3': 'NAM',\n    'value': 'Namibia'\n  },\n  '3370751': {\n    'iso_alpha2': 'SH',\n    'iso_alpha3': 'SHN',\n    'value': 'Saint Helena'\n  },\n  '3371123': {\n    'iso_alpha2': 'BV',\n    'iso_alpha3': 'BVT',\n    'value': 'Bouvet Island'\n  },\n  '3374084': {\n    'iso_alpha2': 'BB',\n    'iso_alpha3': 'BRB',\n    'value': 'Barbados'\n  },\n  '3374766': {\n    'iso_alpha2': 'CV',\n    'iso_alpha3': 'CPV',\n    'value': 'Cape Verde'\n  },\n  '3378535': {\n    'iso_alpha2': 'GY',\n    'iso_alpha3': 'GUY',\n    'value': 'Guyana'\n  },\n  '3381670': {\n    'iso_alpha2': 'GF',\n    'iso_alpha3': 'GUF',\n    'value': 'French Guiana'\n  },\n  '3382998': {\n    'iso_alpha2': 'SR',\n    'iso_alpha3': 'SUR',\n    'value': 'Suriname'\n  },\n  '3424932': {\n    'iso_alpha2': 'PM',\n    'iso_alpha3': 'SPM',\n    'value': 'Saint Pierre and Miquelon'\n  },\n  '3425505': {\n    'iso_alpha2': 'GL',\n    'iso_alpha3': 'GRL',\n    'value': 'Greenland'\n  },\n  '3437598': {\n    'iso_alpha2': 'PY',\n    'iso_alpha3': 'PRY',\n    'value': 'Paraguay'\n  },\n  '3439705': {\n    'iso_alpha2': 'UY',\n    'iso_alpha3': 'URY',\n    'value': 'Uruguay'\n  },\n  '3469034': {\n    'iso_alpha2': 'BR',\n    'iso_alpha3': 'BRA',\n    'value': 'Brazil'\n  },\n  '3474414': {\n    'iso_alpha2': 'FK',\n    'iso_alpha3': 'FLK',\n    'value': 'Falkland Islands'\n  },\n  '3474415': {\n    'iso_alpha2': 'GS',\n    'iso_alpha3': 'SGS',\n    'value': 'South Georgia and the South Sandwich Islands'\n  },\n  '3489940': {\n    'iso_alpha2': 'JM',\n    'iso_alpha3': 'JAM',\n    'value': 'Jamaica'\n  },\n  '3508796': {\n    'iso_alpha2': 'DO',\n    'iso_alpha3': 'DOM',\n    'value': 'Dominican Republic'\n  },\n  '3562981': {\n    'iso_alpha2': 'CU',\n    'iso_alpha3': 'CUB',\n    'value': 'Cuba'\n  },\n  '3570311': {\n    'iso_alpha2': 'MQ',\n    'iso_alpha3': 'MTQ',\n    'value': 'Martinique'\n  },\n  '3572887': {\n    'iso_alpha2': 'BS',\n    'iso_alpha3': 'BHS',\n    'value': 'Bahamas'\n  },\n  '3573345': {\n    'iso_alpha2': 'BM',\n    'iso_alpha3': 'BMU',\n    'value': 'Bermuda'\n  },\n  '3573511': {\n    'iso_alpha2': 'AI',\n    'iso_alpha3': 'AIA',\n    'value': 'Anguilla'\n  },\n  '3573591': {\n    'iso_alpha2': 'TT',\n    'iso_alpha3': 'TTO',\n    'value': 'Trinidad and Tobago'\n  },\n  '3575174': {\n    'iso_alpha2': 'KN',\n    'iso_alpha3': 'KNA',\n    'value': 'Saint Kitts and Nevis'\n  },\n  '3575830': {\n    'iso_alpha2': 'DM',\n    'iso_alpha3': 'DMA',\n    'value': 'Dominica'\n  },\n  '3576396': {\n    'iso_alpha2': 'AG',\n    'iso_alpha3': 'ATG',\n    'value': 'Antigua and Barbuda'\n  },\n  '3576468': {\n    'iso_alpha2': 'LC',\n    'iso_alpha3': 'LCA',\n    'value': 'Saint Lucia'\n  },\n  '3576916': {\n    'iso_alpha2': 'TC',\n    'iso_alpha3': 'TCA',\n    'value': 'Turks and Caicos Islands'\n  },\n  '3577279': {\n    'iso_alpha2': 'AW',\n    'iso_alpha3': 'ABW',\n    'value': 'Aruba'\n  },\n  '3577718': {\n    'iso_alpha2': 'VG',\n    'iso_alpha3': 'VGB',\n    'value': 'British Virgin Islands'\n  },\n  '3577815': {\n    'iso_alpha2': 'VC',\n    'iso_alpha3': 'VCT',\n    'value': 'Saint Vincent and the Grenadines'\n  },\n  '3578097': {\n    'iso_alpha2': 'MS',\n    'iso_alpha3': 'MSR',\n    'value': 'Montserrat'\n  },\n  '3578421': {\n    'iso_alpha2': 'MF',\n    'iso_alpha3': 'MAF',\n    'value': 'Saint Martin'\n  },\n  '3578476': {\n    'iso_alpha2': 'BL',\n    'iso_alpha3': 'BLM',\n    'value': 'Saint Barthelemy'\n  },\n  '3579143': {\n    'iso_alpha2': 'GP',\n    'iso_alpha3': 'GLP',\n    'value': 'Guadeloupe'\n  },\n  '3580239': {\n    'iso_alpha2': 'GD',\n    'iso_alpha3': 'GRD',\n    'value': 'Grenada'\n  },\n  '3580718': {\n    'iso_alpha2': 'KY',\n    'iso_alpha3': 'CYM',\n    'value': 'Cayman Islands'\n  },\n  '3582678': {\n    'iso_alpha2': 'BZ',\n    'iso_alpha3': 'BLZ',\n    'value': 'Belize'\n  },\n  '3585968': {\n    'iso_alpha2': 'SV',\n    'iso_alpha3': 'SLV',\n    'value': 'El Salvador'\n  },\n  '3595528': {\n    'iso_alpha2': 'GT',\n    'iso_alpha3': 'GTM',\n    'value': 'Guatemala'\n  },\n  '3608932': {\n    'iso_alpha2': 'HN',\n    'iso_alpha3': 'HND',\n    'value': 'Honduras'\n  },\n  '3617476': {\n    'iso_alpha2': 'NI',\n    'iso_alpha3': 'NIC',\n    'value': 'Nicaragua'\n  },\n  '3624060': {\n    'iso_alpha2': 'CR',\n    'iso_alpha3': 'CRI',\n    'value': 'Costa Rica'\n  },\n  '3625428': {\n    'iso_alpha2': 'VE',\n    'iso_alpha3': 'VEN',\n    'value': 'Venezuela'\n  },\n  '3658394': {\n    'iso_alpha2': 'EC',\n    'iso_alpha3': 'ECU',\n    'value': 'Ecuador'\n  },\n  '3686110': {\n    'iso_alpha2': 'CO',\n    'iso_alpha3': 'COL',\n    'value': 'Colombia'\n  },\n  '3703430': {\n    'iso_alpha2': 'PA',\n    'iso_alpha3': 'PAN',\n    'value': 'Panama'\n  },\n  '3723988': {\n    'iso_alpha2': 'HT',\n    'iso_alpha3': 'HTI',\n    'value': 'Haiti'\n  },\n  '3865483': {\n    'iso_alpha2': 'AR',\n    'iso_alpha3': 'ARG',\n    'value': 'Argentina'\n  },\n  '3895114': {\n    'iso_alpha2': 'CL',\n    'iso_alpha3': 'CHL',\n    'value': 'Chile'\n  },\n  '3923057': {\n    'iso_alpha2': 'BO',\n    'iso_alpha3': 'BOL',\n    'value': 'Bolivia'\n  },\n  '3932488': {\n    'iso_alpha2': 'PE',\n    'iso_alpha3': 'PER',\n    'value': 'Peru'\n  },\n  '3996063': {\n    'iso_alpha2': 'MX',\n    'iso_alpha3': 'MEX',\n    'value': 'Mexico'\n  },\n  '4030656': {\n    'iso_alpha2': 'PF',\n    'iso_alpha3': 'PYF',\n    'value': 'French Polynesia'\n  },\n  '4030699': {\n    'iso_alpha2': 'PN',\n    'iso_alpha3': 'PCN',\n    'value': 'Pitcairn'\n  },\n  '4030945': {\n    'iso_alpha2': 'KI',\n    'iso_alpha3': 'KIR',\n    'value': 'Kiribati'\n  },\n  '4031074': {\n    'iso_alpha2': 'TK',\n    'iso_alpha3': 'TKL',\n    'value': 'Tokelau'\n  },\n  '4032283': {\n    'iso_alpha2': 'TO',\n    'iso_alpha3': 'TON',\n    'value': 'Tonga'\n  },\n  '4034749': {\n    'iso_alpha2': 'WF',\n    'iso_alpha3': 'WLF',\n    'value': 'Wallis and Futuna'\n  },\n  '4034894': {\n    'iso_alpha2': 'WS',\n    'iso_alpha3': 'WSM',\n    'value': 'Samoa'\n  },\n  '4036232': {\n    'iso_alpha2': 'NU',\n    'iso_alpha3': 'NIU',\n    'value': 'Niue'\n  },\n  '4041468': {\n    'iso_alpha2': 'MP',\n    'iso_alpha3': 'MNP',\n    'value': 'Northern Mariana Islands'\n  },\n  '4043988': {\n    'iso_alpha2': 'GU',\n    'iso_alpha3': 'GUM',\n    'value': 'Guam'\n  },\n  '4566966': {\n    'iso_alpha2': 'PR',\n    'iso_alpha3': 'PRI',\n    'value': 'Puerto Rico'\n  },\n  '4796775': {\n    'iso_alpha2': 'VI',\n    'iso_alpha3': 'VIR',\n    'value': 'U.S. Virgin Islands'\n  },\n  '5854968': {\n    'iso_alpha2': 'UM',\n    'iso_alpha3': 'UMI',\n    'value': 'United States Minor Outlying Islands'\n  },\n  '5880801': {\n    'iso_alpha2': 'AS',\n    'iso_alpha3': 'ASM',\n    'value': 'American Samoa'\n  },\n  '6251999': {\n    'iso_alpha2': 'CA',\n    'iso_alpha3': 'CAN',\n    'value': 'Canada'\n  },\n  '6252001': {\n    'iso_alpha2': 'US',\n    'iso_alpha3': 'USA',\n    'value': 'United States'\n  },\n  '6254930': {\n    'iso_alpha2': 'PS',\n    'iso_alpha3': 'PSE',\n    'value': 'Palestinian Territory'\n  },\n  '6290252': {\n    'iso_alpha2': 'RS',\n    'iso_alpha3': 'SRB',\n    'value': 'Serbia'\n  },\n  '6697173': {\n    'iso_alpha2': 'AQ',\n    'iso_alpha3': 'ATA',\n    'value': 'Antarctica'\n  },\n  '7609695': {\n    'iso_alpha2': 'SX',\n    'iso_alpha3': 'SXM',\n    'value': 'Sint Maarten'\n  },\n  '7626836': {\n    'iso_alpha2': 'CW',\n    'iso_alpha3': 'CUW',\n    'value': 'Curacao'\n  },\n  '7626844': {\n    'iso_alpha2': 'BQ',\n    'iso_alpha3': 'BES',\n    'value': 'Bonaire, Saint Eustatius and Saba'\n  },\n  '7909807': {\n    'iso_alpha2': 'SS',\n    'iso_alpha3': 'SSD',\n    'value': 'South Sudan'\n  },\n  '8505032': {\n    'iso_alpha2': 'AN',\n    'iso_alpha3': 'ANT',\n    'value': 'Netherlands Antilles'\n  },\n  '8505033': {\n    'iso_alpha2': 'CS',\n    'iso_alpha3': 'SCG',\n    'value': 'Serbia and Montenegro'\n  }\n};\n\nexport const COUNTRIES_ARRAY = [\n  { id: '6251999', value: 'Canada' },\n  { id: '6252001', value: 'United States' },\n  { id: '3996063', value: 'Mexico' },\n  { id: '1149361', value: 'Afghanistan' },\n  { id: '661882', value: 'Aland Islands' },\n  { id: '783754', value: 'Albania' },\n  { id: '2589581', value: 'Algeria' },\n  { id: '5880801', value: 'American Samoa' },\n  { id: '3041565', value: 'Andorra' },\n  { id: '3351879', value: 'Angola' },\n  { id: '3573511', value: 'Anguilla' },\n  { id: '6697173', value: 'Antarctica' },\n  { id: '3576396', value: 'Antigua and Barbuda' },\n  { id: '3865483', value: 'Argentina' },\n  { id: '174982', value: 'Armenia' },\n  { id: '3577279', value: 'Aruba' },\n  { id: '2077456', value: 'Australia' },\n  { id: '2782113', value: 'Austria' },\n  { id: '587116', value: 'Azerbaijan' },\n  { id: '3572887', value: 'Bahamas' },\n  { id: '290291', value: 'Bahrain' },\n  { id: '1210997', value: 'Bangladesh' },\n  { id: '3374084', value: 'Barbados' },\n  { id: '630336', value: 'Belarus' },\n  { id: '2802361', value: 'Belgium' },\n  { id: '3582678', value: 'Belize' },\n  { id: '2395170', value: 'Benin' },\n  { id: '3573345', value: 'Bermuda' },\n  { id: '1252634', value: 'Bhutan' },\n  { id: '3923057', value: 'Bolivia' },\n  { id: '7626844', value: 'Bonaire, Saint Eustatius and Saba' },\n  { id: '3277605', value: 'Bosnia and Herzegovina' },\n  { id: '933860', value: 'Botswana' },\n  { id: '3371123', value: 'Bouvet Island' },\n  { id: '3469034', value: 'Brazil' },\n  { id: '1282588', value: 'British Indian Ocean Territory' },\n  { id: '3577718', value: 'British Virgin Islands' },\n  { id: '1820814', value: 'Brunei' },\n  { id: '732800', value: 'Bulgaria' },\n  { id: '2361809', value: 'Burkina Faso' },\n  { id: '433561', value: 'Burundi' },\n  { id: '1831722', value: 'Cambodia' },\n  { id: '2233387', value: 'Cameroon' },\n  { id: '3374766', value: 'Cape Verde' },\n  { id: '3580718', value: 'Cayman Islands' },\n  { id: '239880', value: 'Central African Republic' },\n  { id: '2434508', value: 'Chad' },\n  { id: '3895114', value: 'Chile' },\n  { id: '1814991', value: 'China' },\n  { id: '2078138', value: 'Christmas Island' },\n  { id: '1547376', value: 'Cocos Islands' },\n  { id: '3686110', value: 'Colombia' },\n  { id: '921929', value: 'Comoros' },\n  { id: '1899402', value: 'Cook Islands' },\n  { id: '3624060', value: 'Costa Rica' },\n  { id: '3202326', value: 'Croatia' },\n  { id: '3562981', value: 'Cuba' },\n  { id: '7626836', value: 'Curacao' },\n  { id: '146669', value: 'Cyprus' },\n  { id: '3077311', value: 'Czechia' },\n  { id: '203312', value: 'Democratic Republic of the Congo' },\n  { id: '2623032', value: 'Denmark' },\n  { id: '223816', value: 'Djibouti' },\n  { id: '3575830', value: 'Dominica' },\n  { id: '3508796', value: 'Dominican Republic' },\n  { id: '3658394', value: 'Ecuador' },\n  { id: '357994', value: 'Egypt' },\n  { id: '3585968', value: 'El Salvador' },\n  { id: '2309096', value: 'Equatorial Guinea' },\n  { id: '338010', value: 'Eritrea' },\n  { id: '453733', value: 'Estonia' },\n  { id: '337996', value: 'Ethiopia' },\n  { id: '3474414', value: 'Falkland Islands' },\n  { id: '2622320', value: 'Faroe Islands' },\n  { id: '2205218', value: 'Fiji' },\n  { id: '660013', value: 'Finland' },\n  { id: '3017382', value: 'France' },\n  { id: '3381670', value: 'French Guiana' },\n  { id: '4030656', value: 'French Polynesia' },\n  { id: '1546748', value: 'French Southern Territories' },\n  { id: '2400553', value: 'Gabon' },\n  { id: '2413451', value: 'Gambia' },\n  { id: '614540', value: 'Georgia' },\n  { id: '2921044', value: 'Germany' },\n  { id: '2300660', value: 'Ghana' },\n  { id: '2411586', value: 'Gibraltar' },\n  { id: '390903', value: 'Greece' },\n  { id: '3425505', value: 'Greenland' },\n  { id: '3580239', value: 'Grenada' },\n  { id: '3579143', value: 'Guadeloupe' },\n  { id: '4043988', value: 'Guam' },\n  { id: '3595528', value: 'Guatemala' },\n  { id: '3042362', value: 'Guernsey' },\n  { id: '2420477', value: 'Guinea' },\n  { id: '2372248', value: 'Guinea-Bissau' },\n  { id: '3378535', value: 'Guyana' },\n  { id: '3723988', value: 'Haiti' },\n  { id: '1547314', value: 'Heard Island and McDonald Islands' },\n  { id: '3608932', value: 'Honduras' },\n  { id: '1819730', value: 'Hong Kong' },\n  { id: '719819', value: 'Hungary' },\n  { id: '2629691', value: 'Iceland' },\n  { id: '1269750', value: 'India' },\n  { id: '1643084', value: 'Indonesia' },\n  { id: '130758', value: 'Iran' },\n  { id: '99237', value: 'Iraq' },\n  { id: '2963597', value: 'Ireland' },\n  { id: '3042225', value: 'Isle of Man' },\n  { id: '294640', value: 'Israel' },\n  { id: '3175395', value: 'Italy' },\n  { id: '2287781', value: 'Ivory Coast' },\n  { id: '3489940', value: 'Jamaica' },\n  { id: '1861060', value: 'Japan' },\n  { id: '3042142', value: 'Jersey' },\n  { id: '248816', value: 'Jordan' },\n  { id: '1522867', value: 'Kazakhstan' },\n  { id: '192950', value: 'Kenya' },\n  { id: '4030945', value: 'Kiribati' },\n  { id: '831053', value: 'Kosovo' },\n  { id: '285570', value: 'Kuwait' },\n  { id: '1527747', value: 'Kyrgyzstan' },\n  { id: '1655842', value: 'Laos' },\n  { id: '458258', value: 'Latvia' },\n  { id: '272103', value: 'Lebanon' },\n  { id: '932692', value: 'Lesotho' },\n  { id: '2275384', value: 'Liberia' },\n  { id: '2215636', value: 'Libya' },\n  { id: '3042058', value: 'Liechtenstein' },\n  { id: '597427', value: 'Lithuania' },\n  { id: '2960313', value: 'Luxembourg' },\n  { id: '1821275', value: 'Macao' },\n  { id: '718075', value: 'Macedonia' },\n  { id: '1062947', value: 'Madagascar' },\n  { id: '927384', value: 'Malawi' },\n  { id: '1733045', value: 'Malaysia' },\n  { id: '1282028', value: 'Maldives' },\n  { id: '2453866', value: 'Mali' },\n  { id: '2562770', value: 'Malta' },\n  { id: '2080185', value: 'Marshall Islands' },\n  { id: '3570311', value: 'Martinique' },\n  { id: '2378080', value: 'Mauritania' },\n  { id: '934292', value: 'Mauritius' },\n  { id: '1024031', value: 'Mayotte' },\n  { id: '2081918', value: 'Micronesia' },\n  { id: '617790', value: 'Moldova' },\n  { id: '2993457', value: 'Monaco' },\n  { id: '2029969', value: 'Mongolia' },\n  { id: '3194884', value: 'Montenegro' },\n  { id: '3578097', value: 'Montserrat' },\n  { id: '2542007', value: 'Morocco' },\n  { id: '1036973', value: 'Mozambique' },\n  { id: '1327865', value: 'Myanmar' },\n  { id: '3355338', value: 'Namibia' },\n  { id: '2110425', value: 'Nauru' },\n  { id: '1282988', value: 'Nepal' },\n  { id: '2750405', value: 'Netherlands' },\n  { id: '8505032', value: 'Netherlands Antilles' },\n  { id: '2139685', value: 'New Caledonia' },\n  { id: '2186224', value: 'New Zealand' },\n  { id: '3617476', value: 'Nicaragua' },\n  { id: '2440476', value: 'Niger' },\n  { id: '2328926', value: 'Nigeria' },\n  { id: '4036232', value: 'Niue' },\n  { id: '2155115', value: 'Norfolk Island' },\n  { id: '1873107', value: 'North Korea' },\n  { id: '4041468', value: 'Northern Mariana Islands' },\n  { id: '3144096', value: 'Norway' },\n  { id: '286963', value: 'Oman' },\n  { id: '1168579', value: 'Pakistan' },\n  { id: '1559582', value: 'Palau' },\n  { id: '6254930', value: 'Palestinian Territory' },\n  { id: '3703430', value: 'Panama' },\n  { id: '2088628', value: 'Papua New Guinea' },\n  { id: '3437598', value: 'Paraguay' },\n  { id: '3932488', value: 'Peru' },\n  { id: '1694008', value: 'Philippines' },\n  { id: '4030699', value: 'Pitcairn' },\n  { id: '798544', value: 'Poland' },\n  { id: '2264397', value: 'Portugal' },\n  { id: '4566966', value: 'Puerto Rico' },\n  { id: '289688', value: 'Qatar' },\n  { id: '2260494', value: 'Republic of the Congo' },\n  { id: '935317', value: 'Reunion' },\n  { id: '798549', value: 'Romania' },\n  { id: '2017370', value: 'Russia' },\n  { id: '49518', value: 'Rwanda' },\n  { id: '3578476', value: 'Saint Barthelemy' },\n  { id: '3370751', value: 'Saint Helena' },\n  { id: '3575174', value: 'Saint Kitts and Nevis' },\n  { id: '3576468', value: 'Saint Lucia' },\n  { id: '3578421', value: 'Saint Martin' },\n  { id: '3424932', value: 'Saint Pierre and Miquelon' },\n  { id: '3577815', value: 'Saint Vincent and the Grenadines' },\n  { id: '4034894', value: 'Samoa' },\n  { id: '3168068', value: 'San Marino' },\n  { id: '2410758', value: 'Sao Tome and Principe' },\n  { id: '102358', value: 'Saudi Arabia' },\n  { id: '2245662', value: 'Senegal' },\n  { id: '6290252', value: 'Serbia' },\n  { id: '8505033', value: 'Serbia and Montenegro' },\n  { id: '241170', value: 'Seychelles' },\n  { id: '2403846', value: 'Sierra Leone' },\n  { id: '1880251', value: 'Singapore' },\n  { id: '7609695', value: 'Sint Maarten' },\n  { id: '3057568', value: 'Slovakia' },\n  { id: '3190538', value: 'Slovenia' },\n  { id: '2103350', value: 'Solomon Islands' },\n  { id: '51537', value: 'Somalia' },\n  { id: '953987', value: 'South Africa' },\n  { id: '3474415', value: 'South Georgia and the South Sandwich Islands' },\n  { id: '1835841', value: 'South Korea' },\n  { id: '7909807', value: 'South Sudan' },\n  { id: '2510769', value: 'Spain' },\n  { id: '1227603', value: 'Sri Lanka' },\n  { id: '366755', value: 'Sudan' },\n  { id: '3382998', value: 'Suriname' },\n  { id: '607072', value: 'Svalbard and Jan Mayen' },\n  { id: '934841', value: 'Swaziland' },\n  { id: '2661886', value: 'Sweden' },\n  { id: '2658434', value: 'Switzerland' },\n  { id: '163843', value: 'Syria' },\n  { id: '1668284', value: 'Taiwan' },\n  { id: '1220409', value: 'Tajikistan' },\n  { id: '149590', value: 'Tanzania' },\n  { id: '1605651', value: 'Thailand' },\n  { id: '1966436', value: 'Timor Leste' },\n  { id: '2363686', value: 'Togo' },\n  { id: '4031074', value: 'Tokelau' },\n  { id: '4032283', value: 'Tonga' },\n  { id: '3573591', value: 'Trinidad and Tobago' },\n  { id: '2464461', value: 'Tunisia' },\n  { id: '298795', value: 'Turkey' },\n  { id: '1218197', value: 'Turkmenistan' },\n  { id: '3576916', value: 'Turks and Caicos Islands' },\n  { id: '2110297', value: 'Tuvalu' },\n  { id: '4796775', value: 'U.S. Virgin Islands' },\n  { id: '226074', value: 'Uganda' },\n  { id: '690791', value: 'Ukraine' },\n  { id: '290557', value: 'United Arab Emirates' },\n  { id: '2635167', value: 'United Kingdom' },\n  { id: '5854968', value: 'United States Minor Outlying Islands' },\n  { id: '3439705', value: 'Uruguay' },\n  { id: '1512440', value: 'Uzbekistan' },\n  { id: '2134431', value: 'Vanuatu' },\n  { id: '3164670', value: 'Vatican' },\n  { id: '3625428', value: 'Venezuela' },\n  { id: '1562822', value: 'Vietnam' },\n  { id: '4034749', value: 'Wallis and Futuna' },\n  { id: '2461445', value: 'Western Sahara' },\n  { id: '69543', value: 'Yemen' },\n  { id: '895949', value: 'Zambia' },\n  { id: '878675', value: 'Zimbabwe' },\n];\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/**\n * The id of the profile that this span occured in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'profile_id';\n","import { createStyles as createStylesOriginal } from '@material-ui/styles'; // let warnOnce = false;\n// To remove in v5\n\nexport default function createStyles(styles) {\n  // warning(\n  //   warnOnce,\n  //   [\n  //     'Material-UI: createStyles from @material-ui/core/styles is deprecated.',\n  //     'Please use @material-ui/styles/createStyles',\n  //   ].join('\\n'),\n  // );\n  // warnOnce = true;\n  return createStylesOriginal(styles);\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({\n      color: theme.palette.text.secondary\n    }, theme.typography.caption, {\n      textAlign: 'left',\n      marginTop: 8,\n      lineHeight: '1em',\n      minHeight: '1em',\n      margin: 0,\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      marginTop: 4\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` or `variant=\"outlined\"`. */\n    contained: {\n      margin: '8px 14px 0'\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {}\n  };\n};\nvar FormHelperText = React.forwardRef(function FormHelperText(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'p' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      margin = props.margin,\n      required = props.required,\n      variant = props.variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"margin\", \"required\", \"variant\"]);\n\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant', 'margin', 'disabled', 'error', 'filled', 'focused', 'required']\n  });\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, (fcs.variant === 'filled' || fcs.variant === 'outlined') && classes.contained, className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required, {\n      dense: classes.marginDense\n    }[fcs.margin]),\n    ref: ref\n  }, other), children === ' ' ? // eslint-disable-next-line react/no-danger\n  React.createElement(\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : children);\n});\nprocess.env.NODE_ENV !== \"production\" ? FormHelperText.propTypes = {\n  /**\n   * The content of the component.\n   *\n   * If `' '` is provided, the component reserves one line height for displaying a future message.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the helper text should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, helper text should be displayed in an error state.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the helper text should use filled classes key.\n   */\n  filled: PropTypes.bool,\n\n  /**\n   * If `true`, the helper text should use focused classes key.\n   */\n  focused: PropTypes.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n\n  /**\n   * If `true`, the helper text should use required classes key.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFormHelperText'\n})(FormHelperText);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport isMuiElement from '../utils/isMuiElement';\nimport useForkRef from '../utils/useForkRef';\nimport ListContext from '../List/ListContext';\nimport ReactDOM from 'react-dom';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the (normally root) `component` element. May be wrapped by a `container`. */\n    root: {\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n      position: 'relative',\n      textDecoration: 'none',\n      width: '100%',\n      boxSizing: 'border-box',\n      textAlign: 'left',\n      paddingTop: 8,\n      paddingBottom: 8,\n      '&$focusVisible': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$selected, &$selected:hover': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$disabled': {\n        opacity: 0.5\n      }\n    },\n\n    /* Styles applied to the `container` element if `children` includes `ListItemSecondaryAction`. */\n    container: {\n      position: 'relative'\n    },\n\n    /* Pseudo-class applied to the `component`'s `focusVisibleClassName` prop if `button={true}`. */\n    focusVisible: {},\n\n    /* Styles applied to the `component` element if dense. */\n    dense: {\n      paddingTop: 4,\n      paddingBottom: 4\n    },\n\n    /* Styles applied to the `component` element if `alignItems=\"flex-start\"`. */\n    alignItemsFlexStart: {\n      alignItems: 'flex-start'\n    },\n\n    /* Pseudo-class applied to the inner `component` element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the inner `component` element if `divider={true}`. */\n    divider: {\n      borderBottom: \"1px solid \".concat(theme.palette.divider),\n      backgroundClip: 'padding-box'\n    },\n\n    /* Styles applied to the inner `component` element if `disableGutters={false}`. */\n    gutters: {\n      paddingLeft: 16,\n      paddingRight: 16\n    },\n\n    /* Styles applied to the inner `component` element if `button={true}`. */\n    button: {\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: theme.palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the `component` element if `children` includes `ListItemSecondaryAction`. */\n    secondaryAction: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * Uses an additional container component if `ListItemSecondaryAction` is the last child.\n */\n\nvar ListItem = React.forwardRef(function ListItem(props, ref) {\n  var _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'center' : _props$alignItems,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$button = props.button,\n      button = _props$button === void 0 ? false : _props$button,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      componentProp = props.component,\n      _props$ContainerCompo = props.ContainerComponent,\n      ContainerComponent = _props$ContainerCompo === void 0 ? 'li' : _props$ContainerCompo,\n      _props$ContainerProps = props.ContainerProps;\n  _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n\n  var ContainerClassName = _props$ContainerProps.className,\n      ContainerProps = _objectWithoutProperties(_props$ContainerProps, [\"className\"]),\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$divider = props.divider,\n      divider = _props$divider === void 0 ? false : _props$divider,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$selected = props.selected,\n      selected = _props$selected === void 0 ? false : _props$selected,\n      other = _objectWithoutProperties(props, [\"alignItems\", \"autoFocus\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n\n  var context = React.useContext(ListContext);\n  var childContext = {\n    dense: dense || context.dense || false,\n    alignItems: alignItems\n  };\n  var listItemRef = React.useRef(null);\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      if (listItemRef.current) {\n        listItemRef.current.focus();\n      } else if (process.env.NODE_ENV !== 'production') {\n        console.error('Material-UI: unable to set focus to a ListItem whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  var children = React.Children.toArray(childrenProp);\n  var hasSecondaryAction = children.length && isMuiElement(children[children.length - 1], ['ListItemSecondaryAction']);\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    listItemRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRef = useForkRef(handleOwnRef, ref);\n\n  var componentProps = _extends({\n    className: clsx(classes.root, className, childContext.dense && classes.dense, !disableGutters && classes.gutters, divider && classes.divider, disabled && classes.disabled, button && classes.button, alignItems !== \"center\" && classes.alignItemsFlexStart, hasSecondaryAction && classes.secondaryAction, selected && classes.selected),\n    disabled: disabled\n  }, other);\n\n  var Component = componentProp || 'li';\n\n  if (button) {\n    componentProps.component = componentProp || 'div';\n    componentProps.focusVisibleClassName = clsx(classes.focusVisible, focusVisibleClassName);\n    Component = ButtonBase;\n  }\n\n  if (hasSecondaryAction) {\n    // Use div by default.\n    Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n    if (ContainerComponent === 'li') {\n      if (Component === 'li') {\n        Component = 'div';\n      } else if (componentProps.component === 'li') {\n        componentProps.component = 'div';\n      }\n    }\n\n    return React.createElement(ListContext.Provider, {\n      value: childContext\n    }, React.createElement(ContainerComponent, _extends({\n      className: clsx(classes.container, ContainerClassName),\n      ref: handleRef\n    }, ContainerProps), React.createElement(Component, componentProps, children), children.pop()));\n  }\n\n  return React.createElement(ListContext.Provider, {\n    value: childContext\n  }, React.createElement(Component, _extends({\n    ref: handleRef\n  }, componentProps), children));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItem.propTypes = {\n  /**\n   * Defines the `align-items` style property.\n   */\n  alignItems: PropTypes.oneOf(['flex-start', 'center']),\n\n  /**\n   * If `true`, the list item will be focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the list item will be a button (using `ButtonBase`). Props intended\n   * for `ButtonBase` can then be applied to `ListItem`.\n   */\n  button: PropTypes.bool,\n\n  /**\n   * The content of the component. If a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: chainPropTypes(PropTypes.node, function (props) {\n    var children = React.Children.toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n    var secondaryActionIndex = -1;\n\n    for (var i = children.length - 1; i >= 0; i -= 1) {\n      var child = children[i];\n\n      if (isMuiElement(child, ['ListItemSecondaryAction'])) {\n        secondaryActionIndex = i;\n        break;\n      }\n    } //  is ListItemSecondaryAction the last child of ListItem\n\n\n    if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n      return new Error('Material-UI: you used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   * By default, it's a `li` when `button` is `false` and a `div` when `button` is `true`.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * The container component used when a `ListItemSecondaryAction` is the last child.\n   */\n  ContainerComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the container component if used.\n   */\n  ContainerProps: PropTypes.object,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * If `true`, the list item will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   */\n  divider: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * Use to apply selected styling.\n   */\n  selected: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiListItem'\n})(ListItem);","/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nexport var LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nexport var onLocationChanged = function onLocationChanged(location, action) {\n  var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return {\n    type: LOCATION_CHANGE,\n    payload: {\n      location: location,\n      action: action,\n      isFirstRendering: isFirstRendering\n    }\n  };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\nexport var CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nvar updateLocation = function updateLocation(method) {\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return {\n      type: CALL_HISTORY_METHOD,\n      payload: {\n        method: method,\n        args: args\n      }\n    };\n  };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nexport var push = updateLocation('push');\nexport var replace = updateLocation('replace');\nexport var go = updateLocation('go');\nexport var goBack = updateLocation('goBack');\nexport var goForward = updateLocation('goForward');\nexport var routerActions = {\n  push: push,\n  replace: replace,\n  go: go,\n  goBack: goBack,\n  goForward: goForward\n};","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","import React from 'react';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { Theme } from '@material-ui/core';\nimport { fromJS } from 'immutable';\n\ntype _WithMediaQuery = Array<[string, string | ((theme: Theme) => string)]>;\nexport interface WithMediaQuery { /* tslint:disable-line */\n  mediaQueries: Map<string, boolean>;\n}\n\n\nconst withMediaQuery = (_mediaQueries: _WithMediaQuery = []) => Component => props => {\n  const mediaProps: WithMediaQuery = { mediaQueries: fromJS({}) };\n  if (!Array.isArray(_mediaQueries)) {\n    _mediaQueries = [_mediaQueries];\n  }\n  _mediaQueries.forEach(q => {\n    mediaProps.mediaQueries = mediaProps.mediaQueries.set(q[0], useMediaQuery(q[1]));\n  });\n  return <Component {...mediaProps} {...props} />;\n};\n\nexport default withMediaQuery;","/* tslint:disable */\nimport * as React from 'react';\nimport { DEFAULT_REF_KEY } from '../withForwardedRef';\n\nconst catchForwardedRef = (refKey: string = DEFAULT_REF_KEY) => <T extends React.Component<OriginalProps>, OriginalProps extends {}>(Component: React.ComponentClass<OriginalProps>) => {\n\n  type PrivateProps = {[refKey: string]: React.RefObject<T>}\n  type Props = OriginalProps & PrivateProps;\n\n  const CatchForwardedRef: React.FC<Props> = (props: PrivateProps) => {\n    const forwardedRef = props[refKey];\n    const rest: OriginalProps = {\n      ...(props as OriginalProps), // type as OriginalProps since we remove the refKey below\n      [refKey]: undefined,\n    };\n    return <Component {...rest} ref={forwardedRef} />\n  };\n  return CatchForwardedRef;\n}\n\nexport default catchForwardedRef;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckCircle');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person');\n\nexports.default = _default;","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport isInBrowser from 'is-in-browser';\nimport warning from 'tiny-warning';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\nvar plainObjectConstrurctor = {}.constructor;\nfunction cloneStyle(style) {\n  if (style == null || typeof style !== 'object') return style;\n  if (Array.isArray(style)) return style.map(cloneStyle);\n  if (style.constructor !== plainObjectConstrurctor) return style;\n  var newStyle = {};\n\n  for (var name in style) {\n    newStyle[name] = cloneStyle(style[name]);\n  }\n\n  return newStyle;\n}\n\n/**\n * Create a rule instance.\n */\n\nfunction createRule(name, decl, options) {\n  if (name === void 0) {\n    name = 'unnamed';\n  }\n\n  var jss = options.jss;\n  var declCopy = cloneStyle(decl);\n  var rule = jss.plugins.onCreateRule(name, declCopy, options);\n  if (rule) return rule; // It is an at-rule and it has no instance.\n\n  if (name[0] === '@') {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Unknown rule \" + name) : void 0;\n  }\n\n  return null;\n}\n\nvar join = function join(value, by) {\n  var result = '';\n\n  for (var i = 0; i < value.length; i++) {\n    // Remove !important from the value, it will be readded later.\n    if (value[i] === '!important') break;\n    if (result) result += by;\n    result += value[i];\n  }\n\n  return result;\n};\n/**\n * Converts JSS array value to a CSS string.\n *\n * `margin: [['5px', '10px']]` > `margin: 5px 10px;`\n * `border: ['1px', '2px']` > `border: 1px, 2px;`\n * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;`\n * `color: ['red', !important]` > `color: red !important;`\n */\n\n\nvar toCssValue = function toCssValue(value, ignoreImportant) {\n  if (ignoreImportant === void 0) {\n    ignoreImportant = false;\n  }\n\n  if (!Array.isArray(value)) return value;\n  var cssValue = ''; // Support space separated values via `[['5px', '10px']]`.\n\n  if (Array.isArray(value[0])) {\n    for (var i = 0; i < value.length; i++) {\n      if (value[i] === '!important') break;\n      if (cssValue) cssValue += ', ';\n      cssValue += join(value[i], ' ');\n    }\n  } else cssValue = join(value, ', '); // Add !important, because it was ignored.\n\n\n  if (!ignoreImportant && value[value.length - 1] === '!important') {\n    cssValue += ' !important';\n  }\n\n  return cssValue;\n};\n\nfunction getWhitespaceSymbols(options) {\n  if (options && options.format === false) {\n    return {\n      linebreak: '',\n      space: ''\n    };\n  }\n\n  return {\n    linebreak: '\\n',\n    space: ' '\n  };\n}\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\n\nfunction indentStr(str, indent) {\n  var result = '';\n\n  for (var index = 0; index < indent; index++) {\n    result += '  ';\n  }\n\n  return result + str;\n}\n/**\n * Converts a Rule to CSS string.\n */\n\n\nfunction toCss(selector, style, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var result = '';\n  if (!style) return result;\n  var _options = options,\n      _options$indent = _options.indent,\n      indent = _options$indent === void 0 ? 0 : _options$indent;\n  var fallbacks = style.fallbacks;\n\n  if (options.format === false) {\n    indent = -Infinity;\n  }\n\n  var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n      linebreak = _getWhitespaceSymbols.linebreak,\n      space = _getWhitespaceSymbols.space;\n\n  if (selector) indent++; // Apply fallbacks first.\n\n  if (fallbacks) {\n    // Array syntax {fallbacks: [{prop: value}]}\n    if (Array.isArray(fallbacks)) {\n      for (var index = 0; index < fallbacks.length; index++) {\n        var fallback = fallbacks[index];\n\n        for (var prop in fallback) {\n          var value = fallback[prop];\n\n          if (value != null) {\n            if (result) result += linebreak;\n            result += indentStr(prop + \":\" + space + toCssValue(value) + \";\", indent);\n          }\n        }\n      }\n    } else {\n      // Object syntax {fallbacks: {prop: value}}\n      for (var _prop in fallbacks) {\n        var _value = fallbacks[_prop];\n\n        if (_value != null) {\n          if (result) result += linebreak;\n          result += indentStr(_prop + \":\" + space + toCssValue(_value) + \";\", indent);\n        }\n      }\n    }\n  }\n\n  for (var _prop2 in style) {\n    var _value2 = style[_prop2];\n\n    if (_value2 != null && _prop2 !== 'fallbacks') {\n      if (result) result += linebreak;\n      result += indentStr(_prop2 + \":\" + space + toCssValue(_value2) + \";\", indent);\n    }\n  } // Allow empty style in this case, because properties will be added dynamically.\n\n\n  if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined.\n\n  if (!selector) return result;\n  indent--;\n  if (result) result = \"\" + linebreak + result + linebreak;\n  return indentStr(\"\" + selector + space + \"{\" + result, indent) + indentStr('}', indent);\n}\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`\\s])/g;\nvar nativeEscape = typeof CSS !== 'undefined' && CSS.escape;\nvar escape = (function (str) {\n  return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\\\$1');\n});\n\nvar BaseStyleRule =\n/*#__PURE__*/\nfunction () {\n  function BaseStyleRule(key, style, options) {\n    this.type = 'style';\n    this.isProcessed = false;\n    var sheet = options.sheet,\n        Renderer = options.Renderer;\n    this.key = key;\n    this.options = options;\n    this.style = style;\n    if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer();\n  }\n  /**\n   * Get or set a style property.\n   */\n\n\n  var _proto = BaseStyleRule.prototype;\n\n  _proto.prop = function prop(name, value, options) {\n    // It's a getter.\n    if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed.\n\n    var force = options ? options.force : false;\n    if (!force && this.style[name] === value) return this;\n    var newValue = value;\n\n    if (!options || options.process !== false) {\n      newValue = this.options.jss.plugins.onChangeValue(value, name, this);\n    }\n\n    var isEmpty = newValue == null || newValue === false;\n    var isDefined = name in this.style; // Value is empty and wasn't defined before.\n\n    if (isEmpty && !isDefined && !force) return this; // We are going to remove this value.\n\n    var remove = isEmpty && isDefined;\n    if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true.\n\n    if (this.renderable && this.renderer) {\n      if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue);\n      return this;\n    }\n\n    var sheet = this.options.sheet;\n\n    if (sheet && sheet.attached) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Rule is not linked. Missing sheet option \"link: true\".') : void 0;\n    }\n\n    return this;\n  };\n\n  return BaseStyleRule;\n}();\nvar StyleRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  _inheritsLoose(StyleRule, _BaseStyleRule);\n\n  function StyleRule(key, style, options) {\n    var _this;\n\n    _this = _BaseStyleRule.call(this, key, style, options) || this;\n    var selector = options.selector,\n        scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n\n    if (selector) {\n      _this.selectorText = selector;\n    } else if (scoped !== false) {\n      _this.id = generateId(_assertThisInitialized(_assertThisInitialized(_this)), sheet);\n      _this.selectorText = \".\" + escape(_this.id);\n    }\n\n    return _this;\n  }\n  /**\n   * Set selector string.\n   * Attention: use this with caution. Most browsers didn't implement\n   * selectorText setter, so this may result in rerendering of entire Style Sheet.\n   */\n\n\n  var _proto2 = StyleRule.prototype;\n\n  /**\n   * Apply rule to an element inline.\n   */\n  _proto2.applyTo = function applyTo(renderable) {\n    var renderer = this.renderer;\n\n    if (renderer) {\n      var json = this.toJSON();\n\n      for (var prop in json) {\n        renderer.setProperty(renderable, prop, json[prop]);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Returns JSON representation of the rule.\n   * Fallbacks are not supported.\n   * Useful for inline styles.\n   */\n  ;\n\n  _proto2.toJSON = function toJSON() {\n    var json = {};\n\n    for (var prop in this.style) {\n      var value = this.style[prop];\n      if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value);\n    }\n\n    return json;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto2.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? _extends({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.selectorText, this.style, opts);\n  };\n\n  _createClass(StyleRule, [{\n    key: \"selector\",\n    set: function set(selector) {\n      if (selector === this.selectorText) return;\n      this.selectorText = selector;\n      var renderer = this.renderer,\n          renderable = this.renderable;\n      if (!renderable || !renderer) return;\n      var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule.\n\n      if (!hasChanged) {\n        renderer.replaceRule(renderable, this);\n      }\n    }\n    /**\n     * Get selector string.\n     */\n    ,\n    get: function get() {\n      return this.selectorText;\n    }\n  }]);\n\n  return StyleRule;\n}(BaseStyleRule);\nvar pluginStyleRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    if (key[0] === '@' || options.parent && options.parent.type === 'keyframes') {\n      return null;\n    }\n\n    return new StyleRule(key, style, options);\n  }\n};\n\nvar defaultToStringOptions = {\n  indent: 1,\n  children: true\n};\nvar atRegExp = /@([\\w-]+)/;\n/**\n * Conditional rule for @media, @supports\n */\n\nvar ConditionalRule =\n/*#__PURE__*/\nfunction () {\n  function ConditionalRule(key, styles, options) {\n    this.type = 'conditional';\n    this.isProcessed = false;\n    this.key = key;\n    var atMatch = key.match(atRegExp);\n    this.at = atMatch ? atMatch[1] : 'unknown'; // Key might contain a unique suffix in case the `name` passed by user was duplicate.\n\n    this.query = options.name || \"@\" + this.at;\n    this.options = options;\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = ConditionalRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions;\n    }\n\n    var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n        linebreak = _getWhitespaceSymbols.linebreak;\n\n    if (options.indent == null) options.indent = defaultToStringOptions.indent;\n    if (options.children == null) options.children = defaultToStringOptions.children;\n\n    if (options.children === false) {\n      return this.query + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    return children ? this.query + \" {\" + linebreak + children + linebreak + \"}\" : '';\n  };\n\n  return ConditionalRule;\n}();\nvar keyRegExp = /@media|@supports\\s+/;\nvar pluginConditionalRule = {\n  onCreateRule: function onCreateRule(key, styles, options) {\n    return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null;\n  }\n};\n\nvar defaultToStringOptions$1 = {\n  indent: 1,\n  children: true\n};\nvar nameRegExp = /@keyframes\\s+([\\w-]+)/;\n/**\n * Rule for @keyframes\n */\n\nvar KeyframesRule =\n/*#__PURE__*/\nfunction () {\n  function KeyframesRule(key, frames, options) {\n    this.type = 'keyframes';\n    this.at = '@keyframes';\n    this.isProcessed = false;\n    var nameMatch = key.match(nameRegExp);\n\n    if (nameMatch && nameMatch[1]) {\n      this.name = nameMatch[1];\n    } else {\n      this.name = 'noname';\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Bad keyframes name \" + key) : void 0;\n    }\n\n    this.key = this.type + \"-\" + this.name;\n    this.options = options;\n    var scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n    this.id = scoped === false ? this.name : escape(generateId(this, sheet));\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var name in frames) {\n      this.rules.add(name, frames[name], _extends({}, options, {\n        parent: this\n      }));\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = KeyframesRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions$1;\n    }\n\n    var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n        linebreak = _getWhitespaceSymbols.linebreak;\n\n    if (options.indent == null) options.indent = defaultToStringOptions$1.indent;\n    if (options.children == null) options.children = defaultToStringOptions$1.children;\n\n    if (options.children === false) {\n      return this.at + \" \" + this.id + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    if (children) children = \"\" + linebreak + children + linebreak;\n    return this.at + \" \" + this.id + \" {\" + children + \"}\";\n  };\n\n  return KeyframesRule;\n}();\nvar keyRegExp$1 = /@keyframes\\s+/;\nvar refRegExp = /\\$([\\w-]+)/g;\n\nvar findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) {\n  if (typeof val === 'string') {\n    return val.replace(refRegExp, function (match, name) {\n      if (name in keyframes) {\n        return keyframes[name];\n      }\n\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Referenced keyframes rule \\\"\" + name + \"\\\" is not defined.\") : void 0;\n      return match;\n    });\n  }\n\n  return val;\n};\n/**\n * Replace the reference for a animation name.\n */\n\n\nvar replaceRef = function replaceRef(style, prop, keyframes) {\n  var value = style[prop];\n  var refKeyframe = findReferencedKeyframe(value, keyframes);\n\n  if (refKeyframe !== value) {\n    style[prop] = refKeyframe;\n  }\n};\n\nvar pluginKeyframesRule = {\n  onCreateRule: function onCreateRule(key, frames, options) {\n    return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null;\n  },\n  // Animation name ref replacer.\n  onProcessStyle: function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return style;\n    if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes);\n    if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes);\n    return style;\n  },\n  onChangeValue: function onChangeValue(val, prop, rule) {\n    var sheet = rule.options.sheet;\n\n    if (!sheet) {\n      return val;\n    }\n\n    switch (prop) {\n      case 'animation':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      case 'animation-name':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      default:\n        return val;\n    }\n  }\n};\n\nvar KeyframeRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  _inheritsLoose(KeyframeRule, _BaseStyleRule);\n\n  function KeyframeRule() {\n    return _BaseStyleRule.apply(this, arguments) || this;\n  }\n\n  var _proto = KeyframeRule.prototype;\n\n  /**\n   * Generates a CSS string.\n   */\n  _proto.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? _extends({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.key, this.style, opts);\n  };\n\n  return KeyframeRule;\n}(BaseStyleRule);\nvar pluginKeyframeRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    if (options.parent && options.parent.type === 'keyframes') {\n      return new KeyframeRule(key, style, options);\n    }\n\n    return null;\n  }\n};\n\nvar FontFaceRule =\n/*#__PURE__*/\nfunction () {\n  function FontFaceRule(key, style, options) {\n    this.type = 'font-face';\n    this.at = '@font-face';\n    this.isProcessed = false;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = FontFaceRule.prototype;\n\n  _proto.toString = function toString(options) {\n    var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n        linebreak = _getWhitespaceSymbols.linebreak;\n\n    if (Array.isArray(this.style)) {\n      var str = '';\n\n      for (var index = 0; index < this.style.length; index++) {\n        str += toCss(this.at, this.style[index]);\n        if (this.style[index + 1]) str += linebreak;\n      }\n\n      return str;\n    }\n\n    return toCss(this.at, this.style, options);\n  };\n\n  return FontFaceRule;\n}();\nvar keyRegExp$2 = /@font-face/;\nvar pluginFontFaceRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null;\n  }\n};\n\nvar ViewportRule =\n/*#__PURE__*/\nfunction () {\n  function ViewportRule(key, style, options) {\n    this.type = 'viewport';\n    this.at = '@viewport';\n    this.isProcessed = false;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = ViewportRule.prototype;\n\n  _proto.toString = function toString(options) {\n    return toCss(this.key, this.style, options);\n  };\n\n  return ViewportRule;\n}();\nvar pluginViewportRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null;\n  }\n};\n\nvar SimpleRule =\n/*#__PURE__*/\nfunction () {\n  function SimpleRule(key, value, options) {\n    this.type = 'simple';\n    this.isProcessed = false;\n    this.key = key;\n    this.value = value;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  // eslint-disable-next-line no-unused-vars\n\n\n  var _proto = SimpleRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.value)) {\n      var str = '';\n\n      for (var index = 0; index < this.value.length; index++) {\n        str += this.key + \" \" + this.value[index] + \";\";\n        if (this.value[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return this.key + \" \" + this.value + \";\";\n  };\n\n  return SimpleRule;\n}();\nvar keysMap = {\n  '@charset': true,\n  '@import': true,\n  '@namespace': true\n};\nvar pluginSimpleRule = {\n  onCreateRule: function onCreateRule(key, value, options) {\n    return key in keysMap ? new SimpleRule(key, value, options) : null;\n  }\n};\n\nvar plugins = [pluginStyleRule, pluginConditionalRule, pluginKeyframesRule, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule];\n\nvar defaultUpdateOptions = {\n  process: true\n};\nvar forceUpdateOptions = {\n  force: true,\n  process: true\n  /**\n   * Contains rules objects and allows adding/removing etc.\n   * Is used for e.g. by `StyleSheet` or `ConditionalRule`.\n   */\n\n};\n\nvar RuleList =\n/*#__PURE__*/\nfunction () {\n  // Rules registry for access by .get() method.\n  // It contains the same rule registered by name and by selector.\n  // Original styles object.\n  // Used to ensure correct rules order.\n  function RuleList(options) {\n    this.map = {};\n    this.raw = {};\n    this.index = [];\n    this.counter = 0;\n    this.options = options;\n    this.classes = options.classes;\n    this.keyframes = options.keyframes;\n  }\n  /**\n   * Create and register rule.\n   *\n   * Will not render after Style Sheet was rendered the first time.\n   */\n\n\n  var _proto = RuleList.prototype;\n\n  _proto.add = function add(name, decl, ruleOptions) {\n    var _this$options = this.options,\n        parent = _this$options.parent,\n        sheet = _this$options.sheet,\n        jss = _this$options.jss,\n        Renderer = _this$options.Renderer,\n        generateId = _this$options.generateId,\n        scoped = _this$options.scoped;\n\n    var options = _extends({\n      classes: this.classes,\n      parent: parent,\n      sheet: sheet,\n      jss: jss,\n      Renderer: Renderer,\n      generateId: generateId,\n      scoped: scoped,\n      name: name,\n      keyframes: this.keyframes,\n      selector: undefined\n    }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but\n    // `sheet.addRule()` opens the door for any duplicate rule name. When this happens\n    // we need to make the key unique within this RuleList instance scope.\n\n\n    var key = name;\n\n    if (name in this.raw) {\n      key = name + \"-d\" + this.counter++;\n    } // We need to save the original decl before creating the rule\n    // because cache plugin needs to use it as a key to return a cached rule.\n\n\n    this.raw[key] = decl;\n\n    if (key in this.classes) {\n      // E.g. rules inside of @media container\n      options.selector = \".\" + escape(this.classes[key]);\n    }\n\n    var rule = createRule(key, decl, options);\n    if (!rule) return null;\n    this.register(rule);\n    var index = options.index === undefined ? this.index.length : options.index;\n    this.index.splice(index, 0, rule);\n    return rule;\n  }\n  /**\n   * Get a rule.\n   */\n  ;\n\n  _proto.get = function get(name) {\n    return this.map[name];\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.remove = function remove(rule) {\n    this.unregister(rule);\n    delete this.raw[rule.key];\n    this.index.splice(this.index.indexOf(rule), 1);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.index.indexOf(rule);\n  }\n  /**\n   * Run `onProcessRule()` plugins on every rule.\n   */\n  ;\n\n  _proto.process = function process() {\n    var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop\n    // we end up with very hard-to-track-down side effects.\n\n    this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n  }\n  /**\n   * Register a rule in `.map`, `.classes` and `.keyframes` maps.\n   */\n  ;\n\n  _proto.register = function register(rule) {\n    this.map[rule.key] = rule;\n\n    if (rule instanceof StyleRule) {\n      this.map[rule.selector] = rule;\n      if (rule.id) this.classes[rule.key] = rule.id;\n    } else if (rule instanceof KeyframesRule && this.keyframes) {\n      this.keyframes[rule.name] = rule.id;\n    }\n  }\n  /**\n   * Unregister a rule.\n   */\n  ;\n\n  _proto.unregister = function unregister(rule) {\n    delete this.map[rule.key];\n\n    if (rule instanceof StyleRule) {\n      delete this.map[rule.selector];\n      delete this.classes[rule.key];\n    } else if (rule instanceof KeyframesRule) {\n      delete this.keyframes[rule.name];\n    }\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var name;\n    var data;\n    var options;\n\n    if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {\n      name = arguments.length <= 0 ? undefined : arguments[0];\n      data = arguments.length <= 1 ? undefined : arguments[1];\n      options = arguments.length <= 2 ? undefined : arguments[2];\n    } else {\n      data = arguments.length <= 0 ? undefined : arguments[0];\n      options = arguments.length <= 1 ? undefined : arguments[1];\n      name = null;\n    }\n\n    if (name) {\n      this.updateOne(this.map[name], data, options);\n    } else {\n      for (var index = 0; index < this.index.length; index++) {\n        this.updateOne(this.index[index], data, options);\n      }\n    }\n  }\n  /**\n   * Execute plugins, update rule props.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    if (options === void 0) {\n      options = defaultUpdateOptions;\n    }\n\n    var _this$options2 = this.options,\n        plugins = _this$options2.jss.plugins,\n        sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule.\n\n    if (rule.rules instanceof RuleList) {\n      rule.rules.update(data, options);\n      return;\n    }\n\n    var style = rule.style;\n    plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook.\n\n    if (options.process && style && style !== rule.style) {\n      // We need to run the plugins in case new `style` relies on syntax plugins.\n      plugins.onProcessStyle(rule.style, rule, sheet); // Update and add props.\n\n      for (var prop in rule.style) {\n        var nextValue = rule.style[prop];\n        var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (nextValue !== prevValue) {\n          rule.prop(prop, nextValue, forceUpdateOptions);\n        }\n      } // Remove props.\n\n\n      for (var _prop in style) {\n        var _nextValue = rule.style[_prop];\n        var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (_nextValue == null && _nextValue !== _prevValue) {\n          rule.prop(_prop, null, forceUpdateOptions);\n        }\n      }\n    }\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    var str = '';\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n\n    var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n        linebreak = _getWhitespaceSymbols.linebreak;\n\n    for (var index = 0; index < this.index.length; index++) {\n      var rule = this.index[index];\n      var css = rule.toString(options); // No need to render an empty rule.\n\n      if (!css && !link) continue;\n      if (str) str += linebreak;\n      str += css;\n    }\n\n    return str;\n  };\n\n  return RuleList;\n}();\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(styles, options) {\n    this.attached = false;\n    this.deployed = false;\n    this.classes = {};\n    this.keyframes = {};\n    this.options = _extends({}, options, {\n      sheet: this,\n      parent: this,\n      classes: this.classes,\n      keyframes: this.keyframes\n    });\n\n    if (options.Renderer) {\n      this.renderer = new options.Renderer(this);\n    }\n\n    this.rules = new RuleList(this.options);\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Attach renderable to the render tree.\n   */\n\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.attach = function attach() {\n    if (this.attached) return this;\n    if (this.renderer) this.renderer.attach();\n    this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached.\n\n    if (!this.deployed) this.deploy();\n    return this;\n  }\n  /**\n   * Remove renderable from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.attached) return this;\n    if (this.renderer) this.renderer.detach();\n    this.attached = false;\n    return this;\n  }\n  /**\n   * Add a rule to the current stylesheet.\n   * Will insert a rule also after the stylesheet has been rendered first time.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, decl, options) {\n    var queue = this.queue; // Plugins can create rules.\n    // In order to preserve the right order, we need to queue all `.addRule` calls,\n    // which happen after the first `rules.add()` call.\n\n    if (this.attached && !queue) this.queue = [];\n    var rule = this.rules.add(name, decl, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n\n    if (this.attached) {\n      if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet.\n      // It will be inserted all together when .attach is called.\n\n      if (queue) queue.push(rule);else {\n        this.insertRule(rule);\n\n        if (this.queue) {\n          this.queue.forEach(this.insertRule, this);\n          this.queue = undefined;\n        }\n      }\n      return rule;\n    } // We can't add rules to a detached style node.\n    // We will redeploy the sheet once user will attach it.\n\n\n    this.deployed = false;\n    return rule;\n  }\n  /**\n   * Insert rule into the StyleSheet\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule) {\n    if (this.renderer) {\n      this.renderer.insertRule(rule);\n    }\n  }\n  /**\n   * Create and add rules.\n   * Will render also after Style Sheet was rendered the first time.\n   */\n  ;\n\n  _proto.addRules = function addRules(styles, options) {\n    var added = [];\n\n    for (var name in styles) {\n      var rule = this.addRule(name, styles[name], options);\n      if (rule) added.push(rule);\n    }\n\n    return added;\n  }\n  /**\n   * Get a rule by name.\n   */\n  ;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Delete a rule by name.\n   * Returns `true`: if rule has been deleted from the DOM.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(name) {\n    var rule = typeof name === 'object' ? name : this.rules.get(name);\n\n    if (!rule || // Style sheet was created without link: true and attached, in this case we\n    // won't be able to remove the CSS rule from the DOM.\n    this.attached && !rule.renderable) {\n      return false;\n    }\n\n    this.rules.remove(rule);\n\n    if (this.attached && rule.renderable && this.renderer) {\n      return this.renderer.deleteRule(rule.renderable);\n    }\n\n    return true;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Deploy pure CSS string to a renderable.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    if (this.renderer) this.renderer.deploy();\n    this.deployed = true;\n    return this;\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var _this$rules;\n\n    (_this$rules = this.rules).update.apply(_this$rules, arguments);\n\n    return this;\n  }\n  /**\n   * Updates a single rule.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    this.rules.updateOne(rule, data, options);\n    return this;\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    return this.rules.toString(options);\n  };\n\n  return StyleSheet;\n}();\n\nvar PluginsRegistry =\n/*#__PURE__*/\nfunction () {\n  function PluginsRegistry() {\n    this.plugins = {\n      internal: [],\n      external: []\n    };\n    this.registry = {};\n  }\n\n  var _proto = PluginsRegistry.prototype;\n\n  /**\n   * Call `onCreateRule` hooks and return an object if returned by a hook.\n   */\n  _proto.onCreateRule = function onCreateRule(name, decl, options) {\n    for (var i = 0; i < this.registry.onCreateRule.length; i++) {\n      var rule = this.registry.onCreateRule[i](name, decl, options);\n      if (rule) return rule;\n    }\n\n    return null;\n  }\n  /**\n   * Call `onProcessRule` hooks.\n   */\n  ;\n\n  _proto.onProcessRule = function onProcessRule(rule) {\n    if (rule.isProcessed) return;\n    var sheet = rule.options.sheet;\n\n    for (var i = 0; i < this.registry.onProcessRule.length; i++) {\n      this.registry.onProcessRule[i](rule, sheet);\n    }\n\n    if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n    rule.isProcessed = true;\n  }\n  /**\n   * Call `onProcessStyle` hooks.\n   */\n  ;\n\n  _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) {\n    for (var i = 0; i < this.registry.onProcessStyle.length; i++) {\n      rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet);\n    }\n  }\n  /**\n   * Call `onProcessSheet` hooks.\n   */\n  ;\n\n  _proto.onProcessSheet = function onProcessSheet(sheet) {\n    for (var i = 0; i < this.registry.onProcessSheet.length; i++) {\n      this.registry.onProcessSheet[i](sheet);\n    }\n  }\n  /**\n   * Call `onUpdate` hooks.\n   */\n  ;\n\n  _proto.onUpdate = function onUpdate(data, rule, sheet, options) {\n    for (var i = 0; i < this.registry.onUpdate.length; i++) {\n      this.registry.onUpdate[i](data, rule, sheet, options);\n    }\n  }\n  /**\n   * Call `onChangeValue` hooks.\n   */\n  ;\n\n  _proto.onChangeValue = function onChangeValue(value, prop, rule) {\n    var processedValue = value;\n\n    for (var i = 0; i < this.registry.onChangeValue.length; i++) {\n      processedValue = this.registry.onChangeValue[i](processedValue, prop, rule);\n    }\n\n    return processedValue;\n  }\n  /**\n   * Register a plugin.\n   */\n  ;\n\n  _proto.use = function use(newPlugin, options) {\n    if (options === void 0) {\n      options = {\n        queue: 'external'\n      };\n    }\n\n    var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref.\n\n    if (plugins.indexOf(newPlugin) !== -1) {\n      return;\n    }\n\n    plugins.push(newPlugin);\n    this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) {\n      for (var name in plugin) {\n        if (name in registry) {\n          registry[name].push(plugin[name]);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Unknown hook \\\"\" + name + \"\\\".\") : void 0;\n        }\n      }\n\n      return registry;\n    }, {\n      onCreateRule: [],\n      onProcessRule: [],\n      onProcessStyle: [],\n      onProcessSheet: [],\n      onChangeValue: [],\n      onUpdate: []\n    });\n  };\n\n  return PluginsRegistry;\n}();\n\n/**\n * Sheets registry to access all instances in one place.\n */\n\nvar SheetsRegistry =\n/*#__PURE__*/\nfunction () {\n  function SheetsRegistry() {\n    this.registry = [];\n  }\n\n  var _proto = SheetsRegistry.prototype;\n\n  /**\n   * Register a Style Sheet.\n   */\n  _proto.add = function add(sheet) {\n    var registry = this.registry;\n    var index = sheet.options.index;\n    if (registry.indexOf(sheet) !== -1) return;\n\n    if (registry.length === 0 || index >= this.index) {\n      registry.push(sheet);\n      return;\n    } // Find a position.\n\n\n    for (var i = 0; i < registry.length; i++) {\n      if (registry[i].options.index > index) {\n        registry.splice(i, 0, sheet);\n        return;\n      }\n    }\n  }\n  /**\n   * Reset the registry.\n   */\n  ;\n\n  _proto.reset = function reset() {\n    this.registry = [];\n  }\n  /**\n   * Remove a Style Sheet.\n   */\n  ;\n\n  _proto.remove = function remove(sheet) {\n    var index = this.registry.indexOf(sheet);\n    this.registry.splice(index, 1);\n  }\n  /**\n   * Convert all attached sheets to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        attached = _ref.attached,\n        options = _objectWithoutPropertiesLoose(_ref, [\"attached\"]);\n\n    var _getWhitespaceSymbols = getWhitespaceSymbols(options),\n        linebreak = _getWhitespaceSymbols.linebreak;\n\n    var css = '';\n\n    for (var i = 0; i < this.registry.length; i++) {\n      var sheet = this.registry[i];\n\n      if (attached != null && sheet.attached !== attached) {\n        continue;\n      }\n\n      if (css) css += linebreak;\n      css += sheet.toString(options);\n    }\n\n    return css;\n  };\n\n  _createClass(SheetsRegistry, [{\n    key: \"index\",\n\n    /**\n     * Current highest index number.\n     */\n    get: function get() {\n      return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n    }\n  }]);\n\n  return SheetsRegistry;\n}();\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\n\nvar sheets = new SheetsRegistry();\n\n/* eslint-disable */\n\n/**\n * Now that `globalThis` is available on most platforms\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis#browser_compatibility)\n * we check for `globalThis` first. `globalThis` is necessary for jss\n * to run in Agoric's secure version of JavaScript (SES). Under SES,\n * `globalThis` exists, but `window`, `self`, and `Function('return\n * this')()` are all undefined for security reasons.\n *\n * https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n */\nvar globalThis$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' && window.Math === Math ? window : typeof self !== 'undefined' && self.Math === Math ? self : Function('return this')();\n\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (globalThis$1[ns] == null) globalThis$1[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\n\nvar moduleId = globalThis$1[ns]++;\n\nvar maxRules = 1e10;\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\n\nvar createGenerateId = function createGenerateId(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var ruleCounter = 0;\n\n  var generateId = function generateId(rule, sheet) {\n    ruleCounter += 1;\n\n    if (ruleCounter > maxRules) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] You might have a memory leak. Rule counter is at \" + ruleCounter + \".\") : void 0;\n    }\n\n    var jssId = '';\n    var prefix = '';\n\n    if (sheet) {\n      if (sheet.options.classNamePrefix) {\n        prefix = sheet.options.classNamePrefix;\n      }\n\n      if (sheet.options.jss.id != null) {\n        jssId = String(sheet.options.jss.id);\n      }\n    }\n\n    if (options.minify) {\n      // Using \"c\" because a number can't be the first char in a class name.\n      return \"\" + (prefix || 'c') + moduleId + jssId + ruleCounter;\n    }\n\n    return prefix + rule.key + \"-\" + moduleId + (jssId ? \"-\" + jssId : '') + \"-\" + ruleCounter;\n  };\n\n  return generateId;\n};\n\n/**\n * Cache the value from the first time a function is called.\n */\n\nvar memoize = function memoize(fn) {\n  var value;\n  return function () {\n    if (!value) value = fn();\n    return value;\n  };\n};\n/**\n * Get a style property value.\n */\n\n\nvar getPropertyValue = function getPropertyValue(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      return cssRule.attributeStyleMap.get(prop);\n    }\n\n    return cssRule.style.getPropertyValue(prop);\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return '';\n  }\n};\n/**\n * Set a style property.\n */\n\n\nvar setProperty = function setProperty(cssRule, prop, value) {\n  try {\n    var cssValue = value;\n\n    if (Array.isArray(value)) {\n      cssValue = toCssValue(value, true);\n\n      if (value[value.length - 1] === '!important') {\n        cssRule.style.setProperty(prop, cssValue, 'important');\n        return true;\n      }\n    } // Support CSSTOM.\n\n\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.set(prop, cssValue);\n    } else {\n      cssRule.style.setProperty(prop, cssValue);\n    }\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return false;\n  }\n\n  return true;\n};\n/**\n * Remove a style property.\n */\n\n\nvar removeProperty = function removeProperty(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.delete(prop);\n    } else {\n      cssRule.style.removeProperty(prop);\n    }\n  } catch (err) {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] DOMException \\\"\" + err.message + \"\\\" was thrown. Tried to remove property \\\"\" + prop + \"\\\".\") : void 0;\n  }\n};\n/**\n * Set the selector.\n */\n\n\nvar setSelector = function setSelector(cssRule, selectorText) {\n  cssRule.selectorText = selectorText; // Return false if setter was not successful.\n  // Currently works in chrome only.\n\n  return cssRule.selectorText === selectorText;\n};\n/**\n * Gets the `head` element upon the first call and caches it.\n * We assume it can't be null.\n */\n\n\nvar getHead = memoize(function () {\n  return document.querySelector('head');\n});\n/**\n * Find attached sheet with an index higher than the passed one.\n */\n\nfunction findHigherSheet(registry, options) {\n  for (var i = 0; i < registry.length; i++) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find attached sheet with the highest index.\n */\n\n\nfunction findHighestSheet(registry, options) {\n  for (var i = registry.length - 1; i >= 0; i--) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find a comment with \"jss\" inside.\n */\n\n\nfunction findCommentNode(text) {\n  var head = getHead();\n\n  for (var i = 0; i < head.childNodes.length; i++) {\n    var node = head.childNodes[i];\n\n    if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n      return node;\n    }\n  }\n\n  return null;\n}\n/**\n * Find a node before which we can insert the sheet.\n */\n\n\nfunction findPrevNode(options) {\n  var registry = sheets.registry;\n\n  if (registry.length > 0) {\n    // Try to insert before the next higher sheet.\n    var sheet = findHigherSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element\n      };\n    } // Otherwise insert after the last attached.\n\n\n    sheet = findHighestSheet(registry, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element.nextSibling\n      };\n    }\n  } // Try to find a comment placeholder if registry is empty.\n\n\n  var insertionPoint = options.insertionPoint;\n\n  if (insertionPoint && typeof insertionPoint === 'string') {\n    var comment = findCommentNode(insertionPoint);\n\n    if (comment) {\n      return {\n        parent: comment.parentNode,\n        node: comment.nextSibling\n      };\n    } // If user specifies an insertion point and it can't be found in the document -\n    // bad specificity issues may appear.\n\n\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Insertion point \\\"\" + insertionPoint + \"\\\" not found.\") : void 0;\n  }\n\n  return false;\n}\n/**\n * Insert style element into the DOM.\n */\n\n\nfunction insertStyle(style, options) {\n  var insertionPoint = options.insertionPoint;\n  var nextNode = findPrevNode(options);\n\n  if (nextNode !== false && nextNode.parent) {\n    nextNode.parent.insertBefore(style, nextNode.node);\n    return;\n  } // Works with iframes and any node types.\n\n\n  if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n    var insertionPointElement = insertionPoint;\n    var parentNode = insertionPointElement.parentNode;\n    if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling);else process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Insertion point is not in the DOM.') : void 0;\n    return;\n  }\n\n  getHead().appendChild(style);\n}\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\n\n\nvar getNonce = memoize(function () {\n  var node = document.querySelector('meta[property=\"csp-nonce\"]');\n  return node ? node.getAttribute('content') : null;\n});\n\nvar _insertRule = function insertRule(container, rule, index) {\n  try {\n    if ('insertRule' in container) {\n      container.insertRule(rule, index);\n    } // Keyframes rule.\n    else if ('appendRule' in container) {\n        container.appendRule(rule);\n      }\n  } catch (err) {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] \" + err.message) : void 0;\n    return false;\n  }\n\n  return container.cssRules[index];\n};\n\nvar getValidRuleInsertionIndex = function getValidRuleInsertionIndex(container, index) {\n  var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong\n\n  if (index === undefined || index > maxIndex) {\n    // eslint-disable-next-line no-param-reassign\n    return maxIndex;\n  }\n\n  return index;\n};\n\nvar createStyle = function createStyle() {\n  var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we\n  // insert rules after we insert the style tag.\n  // It seems to kick-off the source order specificity algorithm.\n\n  el.textContent = '\\n';\n  return el;\n};\n\nvar DomRenderer =\n/*#__PURE__*/\nfunction () {\n  // Will be empty if link: true option is not set, because\n  // it is only for use together with insertRule API.\n  function DomRenderer(sheet) {\n    this.getPropertyValue = getPropertyValue;\n    this.setProperty = setProperty;\n    this.removeProperty = removeProperty;\n    this.setSelector = setSelector;\n    this.hasInsertedRules = false;\n    this.cssRules = [];\n    // There is no sheet when the renderer is used from a standalone StyleRule.\n    if (sheet) sheets.add(sheet);\n    this.sheet = sheet;\n\n    var _ref = this.sheet ? this.sheet.options : {},\n        media = _ref.media,\n        meta = _ref.meta,\n        element = _ref.element;\n\n    this.element = element || createStyle();\n    this.element.setAttribute('data-jss', '');\n    if (media) this.element.setAttribute('media', media);\n    if (meta) this.element.setAttribute('data-meta', meta);\n    var nonce = getNonce();\n    if (nonce) this.element.setAttribute('nonce', nonce);\n  }\n  /**\n   * Insert style element into render tree.\n   */\n\n\n  var _proto = DomRenderer.prototype;\n\n  _proto.attach = function attach() {\n    // In the case the element node is external and it is already in the DOM.\n    if (this.element.parentNode || !this.sheet) return;\n    insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()`\n    // most browsers create a new CSSStyleSheet, except of all IEs.\n\n    var deployed = Boolean(this.sheet && this.sheet.deployed);\n\n    if (this.hasInsertedRules && deployed) {\n      this.hasInsertedRules = false;\n      this.deploy();\n    }\n  }\n  /**\n   * Remove style element from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.sheet) return;\n    var parentNode = this.element.parentNode;\n    if (parentNode) parentNode.removeChild(this.element); // In the most browsers, rules inserted using insertRule() API will be lost when style element is removed.\n    // Though IE will keep them and we need a consistent behavior.\n\n    if (this.sheet.options.link) {\n      this.cssRules = [];\n      this.element.textContent = '\\n';\n    }\n  }\n  /**\n   * Inject CSS string into element.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    var sheet = this.sheet;\n    if (!sheet) return;\n\n    if (sheet.options.link) {\n      this.insertRules(sheet.rules);\n      return;\n    }\n\n    this.element.textContent = \"\\n\" + sheet.toString() + \"\\n\";\n  }\n  /**\n   * Insert RuleList into an element.\n   */\n  ;\n\n  _proto.insertRules = function insertRules(rules, nativeParent) {\n    for (var i = 0; i < rules.index.length; i++) {\n      this.insertRule(rules.index[i], i, nativeParent);\n    }\n  }\n  /**\n   * Insert a rule into element.\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule, index, nativeParent) {\n    if (nativeParent === void 0) {\n      nativeParent = this.element.sheet;\n    }\n\n    if (rule.rules) {\n      var parent = rule;\n      var latestNativeParent = nativeParent;\n\n      if (rule.type === 'conditional' || rule.type === 'keyframes') {\n        var _insertionIndex = getValidRuleInsertionIndex(nativeParent, index); // We need to render the container without children first.\n\n\n        latestNativeParent = _insertRule(nativeParent, parent.toString({\n          children: false\n        }), _insertionIndex);\n\n        if (latestNativeParent === false) {\n          return false;\n        }\n\n        this.refCssRule(rule, _insertionIndex, latestNativeParent);\n      }\n\n      this.insertRules(parent.rules, latestNativeParent);\n      return latestNativeParent;\n    }\n\n    var ruleStr = rule.toString();\n    if (!ruleStr) return false;\n    var insertionIndex = getValidRuleInsertionIndex(nativeParent, index);\n\n    var nativeRule = _insertRule(nativeParent, ruleStr, insertionIndex);\n\n    if (nativeRule === false) {\n      return false;\n    }\n\n    this.hasInsertedRules = true;\n    this.refCssRule(rule, insertionIndex, nativeRule);\n    return nativeRule;\n  };\n\n  _proto.refCssRule = function refCssRule(rule, index, cssRule) {\n    rule.renderable = cssRule; // We only want to reference the top level rules, deleteRule API doesn't support removing nested rules\n    // like rules inside media queries or keyframes\n\n    if (rule.options.parent instanceof StyleSheet) {\n      this.cssRules[index] = cssRule;\n    }\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(cssRule) {\n    var sheet = this.element.sheet;\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    sheet.deleteRule(index);\n    this.cssRules.splice(index, 1);\n    return true;\n  }\n  /**\n   * Get index of a CSS Rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(cssRule) {\n    return this.cssRules.indexOf(cssRule);\n  }\n  /**\n   * Generate a new CSS rule and replace the existing one.\n   *\n   * Only used for some old browsers because they can't set a selector.\n   */\n  ;\n\n  _proto.replaceRule = function replaceRule(cssRule, rule) {\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    this.element.sheet.deleteRule(index);\n    this.cssRules.splice(index, 1);\n    return this.insertRule(rule, index);\n  }\n  /**\n   * Get all rules elements.\n   */\n  ;\n\n  _proto.getRules = function getRules() {\n    return this.element.sheet.cssRules;\n  };\n\n  return DomRenderer;\n}();\n\nvar instanceCounter = 0;\n\nvar Jss =\n/*#__PURE__*/\nfunction () {\n  function Jss(options) {\n    this.id = instanceCounter++;\n    this.version = \"10.8.2\";\n    this.plugins = new PluginsRegistry();\n    this.options = {\n      id: {\n        minify: false\n      },\n      createGenerateId: createGenerateId,\n      Renderer: isInBrowser ? DomRenderer : null,\n      plugins: []\n    };\n    this.generateId = createGenerateId({\n      minify: false\n    });\n\n    for (var i = 0; i < plugins.length; i++) {\n      this.plugins.use(plugins[i], {\n        queue: 'internal'\n      });\n    }\n\n    this.setup(options);\n  }\n  /**\n   * Prepares various options, applies plugins.\n   * Should not be used twice on the same instance, because there is no plugins\n   * deduplication logic.\n   */\n\n\n  var _proto = Jss.prototype;\n\n  _proto.setup = function setup(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (options.createGenerateId) {\n      this.options.createGenerateId = options.createGenerateId;\n    }\n\n    if (options.id) {\n      this.options.id = _extends({}, this.options.id, options.id);\n    }\n\n    if (options.createGenerateId || options.id) {\n      this.generateId = this.options.createGenerateId(this.options.id);\n    }\n\n    if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n\n    if ('Renderer' in options) {\n      this.options.Renderer = options.Renderer;\n    } // eslint-disable-next-line prefer-spread\n\n\n    if (options.plugins) this.use.apply(this, options.plugins);\n    return this;\n  }\n  /**\n   * Create a Style Sheet.\n   */\n  ;\n\n  _proto.createStyleSheet = function createStyleSheet(styles, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        index = _options.index;\n\n    if (typeof index !== 'number') {\n      index = sheets.index === 0 ? 0 : sheets.index + 1;\n    }\n\n    var sheet = new StyleSheet(styles, _extends({}, options, {\n      jss: this,\n      generateId: options.generateId || this.generateId,\n      insertionPoint: this.options.insertionPoint,\n      Renderer: this.options.Renderer,\n      index: index\n    }));\n    this.plugins.onProcessSheet(sheet);\n    return sheet;\n  }\n  /**\n   * Detach the Style Sheet and remove it from the registry.\n   */\n  ;\n\n  _proto.removeStyleSheet = function removeStyleSheet(sheet) {\n    sheet.detach();\n    sheets.remove(sheet);\n    return this;\n  }\n  /**\n   * Create a rule without a Style Sheet.\n   * [Deprecated] will be removed in the next major version.\n   */\n  ;\n\n  _proto.createRule = function createRule$1(name, style, options) {\n    if (style === void 0) {\n      style = {};\n    }\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    // Enable rule without name for inline styles.\n    if (typeof name === 'object') {\n      return this.createRule(undefined, name, style);\n    }\n\n    var ruleOptions = _extends({}, options, {\n      name: name,\n      jss: this,\n      Renderer: this.options.Renderer\n    });\n\n    if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId;\n    if (!ruleOptions.classes) ruleOptions.classes = {};\n    if (!ruleOptions.keyframes) ruleOptions.keyframes = {};\n\n    var rule = createRule(name, style, ruleOptions);\n\n    if (rule) this.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Register plugin. Passed function will be invoked with a rule instance.\n   */\n  ;\n\n  _proto.use = function use() {\n    var _this = this;\n\n    for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n      plugins[_key] = arguments[_key];\n    }\n\n    plugins.forEach(function (plugin) {\n      _this.plugins.use(plugin);\n    });\n    return this;\n  };\n\n  return Jss;\n}();\n\nvar createJss = function createJss(options) {\n  return new Jss(options);\n};\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n * Used in react-jss.\n */\n\nvar SheetsManager =\n/*#__PURE__*/\nfunction () {\n  function SheetsManager() {\n    this.length = 0;\n    this.sheets = new WeakMap();\n  }\n\n  var _proto = SheetsManager.prototype;\n\n  _proto.get = function get(key) {\n    var entry = this.sheets.get(key);\n    return entry && entry.sheet;\n  };\n\n  _proto.add = function add(key, sheet) {\n    if (this.sheets.has(key)) return;\n    this.length++;\n    this.sheets.set(key, {\n      sheet: sheet,\n      refs: 0\n    });\n  };\n\n  _proto.manage = function manage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs === 0) {\n        entry.sheet.attach();\n      }\n\n      entry.refs++;\n      return entry.sheet;\n    }\n\n    warning(false, \"[JSS] SheetsManager: can't find sheet to manage\");\n    return undefined;\n  };\n\n  _proto.unmanage = function unmanage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs > 0) {\n        entry.refs--;\n        if (entry.refs === 0) entry.sheet.detach();\n      }\n    } else {\n      warning(false, \"SheetsManager: can't find sheet to unmanage\");\n    }\n  };\n\n  _createClass(SheetsManager, [{\n    key: \"size\",\n    get: function get() {\n      return this.length;\n    }\n  }]);\n\n  return SheetsManager;\n}();\n\n/**\n* Export a constant indicating if this browser has CSSTOM support.\n* https://developers.google.com/web/updates/2018/03/cssom\n*/\nvar hasCSSTOMSupport = typeof CSS === 'object' && CSS != null && 'number' in CSS;\n\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n  var to = null;\n\n  for (var key in styles) {\n    var value = styles[key];\n    var type = typeof value;\n\n    if (type === 'function') {\n      if (!to) to = {};\n      to[key] = value;\n    } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n      var extracted = getDynamicStyles(value);\n\n      if (extracted) {\n        if (!to) to = {};\n        to[key] = extracted;\n      }\n    }\n  }\n\n  return to;\n}\n\n/**\n * A better abstraction over CSS.\n *\n * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present\n * @website https://github.com/cssinjs/jss\n * @license MIT\n */\nvar index = createJss();\n\nexport default index;\nexport { RuleList, SheetsManager, SheetsRegistry, createJss as create, createGenerateId, createRule, getDynamicStyles, hasCSSTOMSupport, sheets, toCssValue };\n","import type {\n  Breadcrumb,\n  BreadcrumbHint,\n  CaptureContext,\n  CheckIn,\n  Client,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Scope as ScopeInterface,\n  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Span,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Hub } from './hub';\nimport { runWithAsyncContext } from './hub';\nimport { getCurrentHub, getIsolationScope } from './hub';\nimport type { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception: any,\n  hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext?: CaptureContext | Severity | SeverityLevel,\n): string {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function configureScope(callback: (scope: Scope) => void): ReturnType<Hub['configureScope']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): ReturnType<Hub['addBreadcrumb']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, deprecation/deprecation\nexport function setContext(name: string, context: { [key: string]: any } | null): ReturnType<Hub['setContext']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtras(extras: Extras): ReturnType<Hub['setExtras']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setExtra(key: string, extra: Extra): ReturnType<Hub['setExtra']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTags(tags: { [key: string]: Primitive }): ReturnType<Hub['setTags']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setTag(key: string, value: Primitive): ReturnType<Hub['setTag']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function setUser(user: User | null): ReturnType<Hub['setUser']> {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: ScopeInterface | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n  ...rest: [callback: (scope: Scope) => T] | [scope: ScopeInterface | undefined, callback: (scope: Scope) => T]\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      // eslint-disable-next-line deprecation/deprecation\n      return hub.withScope(callback);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    return hub.withScope(() => {\n      // eslint-disable-next-line deprecation/deprecation\n      hub.getStackTop().scope = scope as Scope;\n      return callback(scope as Scope);\n    });\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n  return runWithAsyncContext(() => {\n    return callback(getIsolationScope());\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span, callback: (scope: Scope) => T): T {\n  return withScope(scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(span);\n    return callback(scope);\n  });\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nexport function startTransaction(\n  context: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n  // eslint-disable-next-line deprecation/deprecation\n): ReturnType<Hub['startTransaction']> {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getClient<C>();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    release,\n    environment,\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client && client.captureSession) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n","// TODO: Make it private only in v5\nexport default function setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}","var splice = function splice(array, index, removeNum, value) {\n  array = array || [];\n\n  if (index < array.length) {\n    if (value === undefined && !removeNum) {\n      // inserting undefined\n      var _copy2 = [].concat(array);\n\n      _copy2.splice(index, 0, true); // temporary placeholder\n\n\n      _copy2[index] = undefined; // set to undefined\n\n      return _copy2;\n    }\n\n    if (value != null) {\n      var _copy3 = [].concat(array);\n\n      _copy3.splice(index, removeNum, value); // removing and adding\n\n\n      return _copy3;\n    }\n\n    var _copy = [].concat(array);\n\n    _copy.splice(index, removeNum); // removing\n\n\n    return _copy;\n  }\n\n  if (removeNum) {\n    // trying to remove non-existant item: return original array\n    return array;\n  } // trying to add outside of range: just set value\n\n\n  var copy = [].concat(array);\n  copy[index] = value;\n  return copy;\n};\n\nexport default splice;","import _toPath from \"lodash/toPath\";\n\nvar getIn = function getIn(state, field) {\n  if (!state) {\n    return state;\n  }\n\n  var path = _toPath(field);\n\n  var length = path.length;\n\n  if (!length) {\n    return undefined;\n  }\n\n  var result = state;\n\n  for (var i = 0; i < length && result; ++i) {\n    result = result[path[i]];\n  }\n\n  return result;\n};\n\nexport default getIn;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _toPath from \"lodash/toPath\";\n\nvar setInWithPath = function setInWithPath(state, value, path, pathIndex) {\n  var _extends2;\n\n  if (pathIndex >= path.length) {\n    return value;\n  }\n\n  var first = path[pathIndex];\n  var firstState = state && (Array.isArray(state) ? state[Number(first)] : state[first]);\n  var next = setInWithPath(firstState, value, path, pathIndex + 1);\n\n  if (!state) {\n    if (isNaN(first)) {\n      var _ref;\n\n      return _ref = {}, _ref[first] = next, _ref;\n    }\n\n    var initialized = [];\n    initialized[parseInt(first, 10)] = next;\n    return initialized;\n  }\n\n  if (Array.isArray(state)) {\n    var copy = [].concat(state);\n    copy[parseInt(first, 10)] = next;\n    return copy;\n  }\n\n  return _extends({}, state, (_extends2 = {}, _extends2[first] = next, _extends2));\n};\n\nvar setIn = function setIn(state, field, value) {\n  return setInWithPath(state, value, _toPath(field), 0);\n};\n\nexport default setIn;","import _isNil from \"lodash/isNil\";\nimport _isEqualWith from \"lodash/isEqualWith\";\nimport React from 'react';\n\nvar isEmpty = function isEmpty(obj) {\n  return _isNil(obj) || obj === '' || isNaN(obj);\n};\n\nvar customizer = function customizer(obj, other) {\n  if (obj === other) return true;\n\n  if (!obj && !other) {\n    return isEmpty(obj) === isEmpty(other);\n  }\n\n  if (obj && other && obj._error !== other._error) return false;\n  if (obj && other && obj._warning !== other._warning) return false;\n  if (React.isValidElement(obj) || React.isValidElement(other)) return false;\n};\n\nvar deepEqual = function deepEqual(a, b) {\n  return _isEqualWith(a, b, customizer);\n};\n\nexport default deepEqual;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _toPath from \"lodash/toPath\";\n\nfunction deleteInWithPath(state, first) {\n  if (state === undefined || state === null || first === undefined || first === null) {\n    return state;\n  }\n\n  for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    rest[_key - 2] = arguments[_key];\n  }\n\n  if (rest.length) {\n    if (Array.isArray(state)) {\n      if (isNaN(first)) {\n        throw new Error(\"Must access array elements with a number, not \\\"\" + String(first) + \"\\\".\");\n      }\n\n      var firstIndex = Number(first);\n\n      if (firstIndex < state.length) {\n        var result = deleteInWithPath.apply(void 0, [state && state[firstIndex]].concat(rest));\n\n        if (result !== state[firstIndex]) {\n          var copy = [].concat(state);\n          copy[firstIndex] = result;\n          return copy;\n        }\n      }\n\n      return state;\n    }\n\n    if (first in state) {\n      var _extends2;\n\n      var _result = deleteInWithPath.apply(void 0, [state && state[first]].concat(rest));\n\n      return state[first] === _result ? state : _extends({}, state, (_extends2 = {}, _extends2[first] = _result, _extends2));\n    }\n\n    return state;\n  }\n\n  if (Array.isArray(state)) {\n    if (isNaN(first)) {\n      throw new Error(\"Cannot delete non-numerical index from an array. Given: \\\"\" + String(first));\n    }\n\n    var _firstIndex = Number(first);\n\n    if (_firstIndex < state.length) {\n      var _copy = [].concat(state);\n\n      _copy.splice(_firstIndex, 1);\n\n      return _copy;\n    }\n\n    return state;\n  }\n\n  if (first in state) {\n    var _copy2 = _extends({}, state);\n\n    delete _copy2[first];\n    return _copy2;\n  }\n\n  return state;\n}\n\nvar deleteIn = function deleteIn(state, field) {\n  return deleteInWithPath.apply(void 0, [state].concat(_toPath(field)));\n};\n\nexport default deleteIn;","function keys(value) {\n  if (!value) {\n    return [];\n  }\n\n  if (Array.isArray(value)) {\n    return value.map(function (i) {\n      return i.name;\n    });\n  }\n\n  return Object.keys(value);\n}\n\nexport default keys;","import splice from './splice';\nimport getIn from './getIn';\nimport setIn from './setIn';\nimport deepEqual from './deepEqual';\nimport deleteIn from './deleteIn';\nimport keys from './keys';\nvar structure = {\n  allowsArrayErrors: true,\n  empty: {},\n  emptyList: [],\n  getIn: getIn,\n  setIn: setIn,\n  deepEqual: deepEqual,\n  deleteIn: deleteIn,\n  forEach: function forEach(items, callback) {\n    return items.forEach(callback);\n  },\n  fromJS: function fromJS(value) {\n    return value;\n  },\n  keys: keys,\n  size: function size(array) {\n    return array ? array.length : 0;\n  },\n  some: function some(items, callback) {\n    return items.some(callback);\n  },\n  splice: splice,\n  equals: function equals(a, b) {\n    return b.every(function (val) {\n      return ~a.indexOf(val);\n    });\n  },\n  orderChanged: function orderChanged(a, b) {\n    return b.some(function (val, index) {\n      return val !== a[index];\n    });\n  },\n  toJS: function toJS(value) {\n    return value;\n  }\n};\nexport default structure;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Button,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport { ToggleOverlayComponentAction, SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport { PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY } from '../ProductDrawer';\nimport { PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY } from '../PackageDrawer';\nimport { makeSelectLastOpenedOverlayComponentId } from '../../modules/ApplicationModule/selectors';\nimport SavedSuccessfully from './SavedSuccessfully';\nimport DrawerEditHeader from '../DrawerEditHeader';\n\nexport const SUCCESS_DRAWER = 'SuccessDrawer';\ninterface ISuccessDrawerContentProps {\n}\n\ninterface ISuccessDrawerProps extends ISuccessDrawerContentProps {\n  dispatch: React.Dispatch<IAction>;\n  lastOpened: string;\n}\n\ntype SuccessDrawerType = WithTranslation & ISuccessDrawerProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass SuccessDrawer extends React.Component<SuccessDrawerType, {}> {\n  \n  public closeDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PACKAGE_DRAWER_ID,\n      open: false,\n    }))\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PRODUCT_DRAWER_ID,\n      open: false,\n    }))\n  };\n\n  public toProductDrawerEdit = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PACKAGE_DRAWER_ID,\n      open: false,\n    }))\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PRODUCT_DRAWER_ID,\n      open: true,\n    }))\n\n    dispatch(new SetOverlayComponentContentAction({\n      content: PRODUCT_CONTENT_EDIT_KEY,\n      id: PRODUCT_DRAWER_ID\n    }))\n  }\n\n  public toPackageDrawerEdit = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PRODUCT_DRAWER_ID,\n      open: false,\n    }))\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: PACKAGE_DRAWER_ID,\n      open: true,\n    }))\n\n    dispatch(new SetOverlayComponentContentAction({\n      content: PACKAGE_CONTENT_EDIT_KEY,\n      id: PACKAGE_DRAWER_ID\n    }))\n  }\n\n  public render() {\n    const {\n      classes,\n      lastOpened,\n      t\n    } = this.props;\n\n    return (\n      <Grid>\n        <DrawerEditHeader\n          title={lastOpened === PACKAGE_DRAWER_ID ? t('productPackageSuccessDrawer.createPackage') : t('productPackageSuccessDrawer.createProduct')}\n          handleClose={this.closeDrawer}\n        />\n        <SavedSuccessfully\n          caption={lastOpened === PACKAGE_DRAWER_ID ? t('productPackageSuccessDrawer.packageSavedmessage') : t('productPackageSuccessDrawer.productSavedMessage')}\n        />\n        <Grid\n          container={true}\n          wrap='nowrap'\n          justify='space-around'\n        >\n          <Button\n            className={classes.button}\n            color='primary'\n            onClick={this.toPackageDrawerEdit}\n          >\n            {t('productPackageSuccessDrawer.addPackage')}\n          </Button>\n          <Button\n            className={classes.button}\n            color='primary'\n            onClick={this.toProductDrawerEdit}\n          >\n            {t('productPackageSuccessDrawer.addProduct')}\n          </Button>\n        </Grid>\n      </Grid>\n    )\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  },\n  button: {\n    marginTop: theme.spacing(5),\n  },\n});\n\nconst mapStateToProps = (state, props: ISuccessDrawerContentProps) => {\n  return createStructuredSelector({\n    // officeId: makeSelectUserOfficeId(),\n    // modalProps: makeSelectOverlayComponentProp(DRAWER_ID),\n    // contact: makeSelectContact(),\n    // content: makeSelectOverlayComponentContent(DRAWER_ID),\n    lastOpened: makeSelectLastOpenedOverlayComponentId(),\n  })(state);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    // getCustomerDiscounts: (customerId) => {\n    //   dispatch(new GetDiscountsForCustomerId({customerId}))\n    // },\n  };\n};\n\nexport default compose<React.ComponentClass<ISuccessDrawerContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(SuccessDrawer);\n","export const BidViewType = 'Quote Connect';\nexport const RepViewType = 'Quote Connect Rep';\nexport const AcViewType = 'Auto Connect';\nexport const VendorQCViewType = 'Vendor QC View';\nexport const VendorAQViewType = 'Vendor AQ View';\nexport const AttachmentEmailType = 'email';\nexport const AttachmentAIProcessType = 'ai_processed';\nexport const AttachmentAISourceType = 'ai_source';\nexport const AttachmentReplyEmailType = 'reply_email';\nexport const AttachmentPdfQuotation = 'pdf_quotation';\n\nexport const SECTION_TYPE_BID_RESPONSE = 'SECTION_BID';\nexport const SECTION_TYPE_NEW = 'SECTION_NEW';","export enum SEARCH_TYPES {\n  Product = 'product',\n  Series = 'series'\n}\n\nexport enum PIM_CROSS_REFERENCE_DRAWER_TYPE {\n  PimCrossReferenceProductDrawer = 'PimCrossReferenceProductDrawer',\n  PimCrossReferenceProductDrawerEdit = 'PimCrossReferenceProductDrawerEdit',\n  PimCrossReferenceCompetitorProductDrawer = 'PimCrossReferenceCompetitorProductDrawer',\n  PimCrossReferenceSuccessDrawer = 'PimCrossReferenceSuccessDrawer',\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { isFilled, isAdornedStart } from '../InputBase/utils';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport isMuiElement from '../utils/isMuiElement';\nimport FormControlContext from './FormControlContext';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    flexDirection: 'column',\n    position: 'relative',\n    // Reset fieldset default style.\n    minWidth: 0,\n    padding: 0,\n    margin: 0,\n    border: 0,\n    verticalAlign: 'top' // Fix alignment issue on Safari.\n\n  },\n\n  /* Styles applied to the root element if `margin=\"normal\"`. */\n  marginNormal: {\n    marginTop: 16,\n    marginBottom: 8\n  },\n\n  /* Styles applied to the root element if `margin=\"dense\"`. */\n  marginDense: {\n    marginTop: 8,\n    marginBottom: 4\n  },\n\n  /* Styles applied to the root element if `fullWidth={true}`. */\n  fullWidth: {\n    width: '100%'\n  }\n};\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n *\n *  - FormLabel\n *  - FormHelperText\n *  - Input\n *  - InputLabel\n *\n * You can find one composition example below and more going to [the demos](/components/text-fields/#components).\n *\n * ```jsx\n * <FormControl>\n *   <InputLabel htmlFor=\"my-input\">Email address</InputLabel>\n *   <Input id=\"my-input\" aria-describedby=\"my-helper-text\" />\n *   <FormHelperText id=\"my-helper-text\">We'll never share your email.</FormHelperText>\n * </FormControl>\n * ```\n *\n * ⚠️Only one input can be used within a FormControl.\n */\n\nvar FormControl = React.forwardRef(function FormControl(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$hiddenLabel = props.hiddenLabel,\n      hiddenLabel = _props$hiddenLabel === void 0 ? false : _props$hiddenLabel,\n      _props$margin = props.margin,\n      margin = _props$margin === void 0 ? 'none' : _props$margin,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      size = props.size,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"fullWidth\", \"hiddenLabel\", \"margin\", \"required\", \"size\", \"variant\"]);\n\n  var _React$useState = React.useState(function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialAdornedStart = false;\n\n    if (children) {\n      React.Children.forEach(children, function (child) {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        var input = isMuiElement(child, ['Select']) ? child.props.input : child;\n\n        if (input && isAdornedStart(input.props)) {\n          initialAdornedStart = true;\n        }\n      });\n    }\n\n    return initialAdornedStart;\n  }),\n      adornedStart = _React$useState[0],\n      setAdornedStart = _React$useState[1];\n\n  var _React$useState2 = React.useState(function () {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    var initialFilled = false;\n\n    if (children) {\n      React.Children.forEach(children, function (child) {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n\n        if (isFilled(child.props, true)) {\n          initialFilled = true;\n        }\n      });\n    }\n\n    return initialFilled;\n  }),\n      filled = _React$useState2[0],\n      setFilled = _React$useState2[1];\n\n  var _React$useState3 = React.useState(false),\n      focused = _React$useState3[0],\n      setFocused = _React$useState3[1];\n\n  if (disabled && focused) {\n    setFocused(false);\n  }\n\n  var registerEffect;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    var registeredInput = React.useRef(false);\n\n    registerEffect = function registerEffect() {\n      if (registeredInput.current) {\n        console.error(['Material-UI: there are multiple InputBase components inside a FormControl.', 'This is not supported. It might cause infinite rendering loops.', 'Only use one InputBase.'].join('\\n'));\n      }\n\n      registeredInput.current = true;\n      return function () {\n        registeredInput.current = false;\n      };\n    };\n  }\n\n  var onFilled = React.useCallback(function () {\n    setFilled(true);\n  }, []);\n  var onEmpty = React.useCallback(function () {\n    setFilled(false);\n  }, []);\n  var childContext = {\n    adornedStart: adornedStart,\n    setAdornedStart: setAdornedStart,\n    color: color,\n    disabled: disabled,\n    error: error,\n    filled: filled,\n    focused: focused,\n    hiddenLabel: hiddenLabel,\n    margin: (size === 'small' ? 'dense' : undefined) || margin,\n    onBlur: function onBlur() {\n      setFocused(false);\n    },\n    onEmpty: onEmpty,\n    onFilled: onFilled,\n    onFocus: function onFocus() {\n      setFocused(true);\n    },\n    registerEffect: registerEffect,\n    required: required,\n    variant: variant\n  };\n  return React.createElement(FormControlContext.Provider, {\n    value: childContext\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className, margin !== 'none' && classes[\"margin\".concat(capitalize(margin))], fullWidth && classes.fullWidth),\n    ref: ref\n  }, other), children));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControl.propTypes = {\n  /**\n   * The contents of the form control.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the label, input and helper text should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the component will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * If `true`, the label will be hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   */\n  hiddenLabel: PropTypes.bool,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: PropTypes.oneOf(['none', 'dense', 'normal']),\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The size of the text field.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFormControl'\n})(FormControl);","import _ from 'lodash';\nimport ApiClient from '../../utils/apiClient';\nimport BidInvitationUtil from '../../containers/AutoQuotationDashboard/BidInvitationUtil';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\nconst BidInvitationServiceApi = {\n\n  async create(env: any, appId: string, data: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post(`/msquoteconnect/bid-invitation.create`, data);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error create bid-invitation:', error);\n      throw error;\n    }\n  },\n\n  async findGroupedByQuote(env: any, appId: string, filter: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msquoteconnect/bid-invitation.findGroupedByQuote`;\n      if (filter) {\n        let filterClone = _.cloneDeep(filter);\n        filterClone = BidInvitationUtil.filterDateFormat(filterClone);\n        endpoint += `?filter=${encodeURIComponent(JSON.stringify(filterClone))}`;\n      }\n      const result = await apiClient.fetchAllDataWithCount(endpoint);\n      const responseData = {\n        success: result.success,\n        count: result?.count,\n        data: result?.payload['msquoteconnect']\n      };\n      return responseData;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-invitation.findAll:', error);\n      throw error;\n    }\n  },\n\n  async findUser(env: any, appId: string, filter: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msquoteconnect/bid-invitation.findUser`;\n      if (filter) {\n        endpoint += `?filter=${encodeURIComponent(JSON.stringify(filter))}`;\n      }\n      const response = await apiClient.fetchData(endpoint);\n      if (response?.payload?.msquoteconnect) {\n        return response.payload.msquoteconnect;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-invitation.findUser:', error);\n      throw error;\n    }\n  },\n\n  async update(env: any, appId: string, invitationId: number, data: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.update(`/msquoteconnect/bid-invitation-response.update`, invitationId, data);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error update bid-invitation:', error);\n      throw error;\n    }\n  },\n\n  async updateByField(env: any, appId: string, invitationId: number, data: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.update(`/msquoteconnect/bid-invitation-response.updateByField`, invitationId, data);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error updateByField bid-bid-invitation-response:', error);\n      throw error;\n    }\n  },\n\n  async delete(env: any, appId: string, invitationId: number): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.delete(`/msquoteconnect/bid-invitation-response.remove/${invitationId}`);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error delete bid-invitation:', error);\n      throw error;\n    }\n  },\n\n  async fetchOneDetailResponse(env: any, appId: string, invitationId: number, userType: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n\n      let endpoint = `/msquoteconnect/bid-invitation-response.findOne/${invitationId}`;\n      if (userType) {\n        const filter = {\n          userType\n        };\n        endpoint += `?filter=${encodeURIComponent(JSON.stringify(filter))}`;\n      }\n      const response = await apiClient.fetchData(endpoint);\n      if (response?.payload?.msquoteconnect) {\n        return response.payload.msquoteconnect;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-invitation-response.findOne:', error);\n      throw error;\n    }\n  },\n\n  async fetchAllInvitationResponse(env: any, appId: string, filter: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msquoteconnect/bid-invitation-response.findAll`;\n      if (filter) {\n        endpoint += `?filter=${encodeURIComponent(JSON.stringify(filter))}`;\n      }\n      const response = await apiClient.fetchData(endpoint);\n      if (response?.payload?.msquoteconnect) {\n        return response.payload.msquoteconnect;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-invitation-response.findAll:', error);\n      throw error;\n    }\n  },\n\n  async fetchAllInvitationResponseByUserType(env: any, appId: string, filter: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let filterStr = '';\n      let filterClone = _.cloneDeep(filter);\n      filterClone = BidInvitationUtil.cleanFilter(filterClone);\n      filterClone = BidInvitationUtil.filterDateFormat(filterClone);\n      filterStr = encodeURIComponent(JSON.stringify(filterClone));\n      const result = await apiClient.fetchAllDataWithCount(`/msquoteconnect/bid-invitation-response.findAll?filter=` + filterStr);\n      const responseData = {\n        success: result.success,\n        count: result?.count,\n        data: result?.payload['msquoteconnect']\n      };\n      return responseData;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-invitation-response.findAllFor userType :', error);\n      throw error;\n    }\n  },\n\n};\n\nexport default BidInvitationServiceApi;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n  // Call this.constructor.gDSFP to support sub-classes.\n  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n  if (state !== null && state !== undefined) {\n    this.setState(state);\n  }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n  // Call this.constructor.gDSFP to support sub-classes.\n  // Use the setState() updater to ensure state isn't stale in certain edge cases.\n  function updater(prevState) {\n    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n    return state !== null && state !== undefined ? state : null;\n  }\n  // Binding \"this\" is important for shallow renderer support.\n  this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n  try {\n    var prevProps = this.props;\n    var prevState = this.state;\n    this.props = nextProps;\n    this.state = nextState;\n    this.__reactInternalSnapshotFlag = true;\n    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n      prevProps,\n      prevState\n    );\n  } finally {\n    this.props = prevProps;\n    this.state = prevState;\n  }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n  var prototype = Component.prototype;\n\n  if (!prototype || !prototype.isReactComponent) {\n    throw new Error('Can only polyfill class components');\n  }\n\n  if (\n    typeof Component.getDerivedStateFromProps !== 'function' &&\n    typeof prototype.getSnapshotBeforeUpdate !== 'function'\n  ) {\n    return Component;\n  }\n\n  // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n  // Error if any of these lifecycles are present,\n  // Because they would work differently between older and newer (16.3+) versions of React.\n  var foundWillMountName = null;\n  var foundWillReceivePropsName = null;\n  var foundWillUpdateName = null;\n  if (typeof prototype.componentWillMount === 'function') {\n    foundWillMountName = 'componentWillMount';\n  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n    foundWillMountName = 'UNSAFE_componentWillMount';\n  }\n  if (typeof prototype.componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'componentWillReceiveProps';\n  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n  }\n  if (typeof prototype.componentWillUpdate === 'function') {\n    foundWillUpdateName = 'componentWillUpdate';\n  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n    foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n  }\n  if (\n    foundWillMountName !== null ||\n    foundWillReceivePropsName !== null ||\n    foundWillUpdateName !== null\n  ) {\n    var componentName = Component.displayName || Component.name;\n    var newApiName =\n      typeof Component.getDerivedStateFromProps === 'function'\n        ? 'getDerivedStateFromProps()'\n        : 'getSnapshotBeforeUpdate()';\n\n    throw Error(\n      'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n        componentName +\n        ' uses ' +\n        newApiName +\n        ' but also contains the following legacy lifecycles:' +\n        (foundWillMountName !== null ? '\\n  ' + foundWillMountName : '') +\n        (foundWillReceivePropsName !== null\n          ? '\\n  ' + foundWillReceivePropsName\n          : '') +\n        (foundWillUpdateName !== null ? '\\n  ' + foundWillUpdateName : '') +\n        '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n        'https://fb.me/react-async-component-lifecycle-hooks'\n    );\n  }\n\n  // React <= 16.2 does not support static getDerivedStateFromProps.\n  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n  // Newer versions of React will ignore these lifecycles if gDSFP exists.\n  if (typeof Component.getDerivedStateFromProps === 'function') {\n    prototype.componentWillMount = componentWillMount;\n    prototype.componentWillReceiveProps = componentWillReceiveProps;\n  }\n\n  // React <= 16.2 does not support getSnapshotBeforeUpdate.\n  // As a workaround, use cWU to invoke the new lifecycle.\n  // Newer versions of React will ignore that lifecycle if gSBU exists.\n  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n    if (typeof prototype.componentDidUpdate !== 'function') {\n      throw new Error(\n        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n      );\n    }\n\n    prototype.componentWillUpdate = componentWillUpdate;\n\n    var componentDidUpdate = prototype.componentDidUpdate;\n\n    prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n      prevProps,\n      prevState,\n      maybeSnapshot\n    ) {\n      // 16.3+ will not execute our will-update method;\n      // It will pass a snapshot value to did-update though.\n      // Older versions will require our polyfilled will-update value.\n      // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n      // Because for <= 15.x versions this might be a \"prevContext\" object.\n      // We also can't just check \"__reactInternalSnapshot\",\n      // Because get-snapshot might return a falsy value.\n      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n      var snapshot = this.__reactInternalSnapshotFlag\n        ? this.__reactInternalSnapshot\n        : maybeSnapshot;\n\n      componentDidUpdate.call(this, prevProps, prevState, snapshot);\n    };\n  }\n\n  return Component;\n}\n\nexport { polyfill };\n","import { IMap } from 'ats-utils/src/Interfaces';\n\nexport const QUOTE_INPUT_DELAY = 200;\n\nexport const getTemplateCurrency = (sectionTemplate: IMap<any>) => {\n  return sectionTemplate?.getIn(['settings', 'currency'])\n    || sectionTemplate?.get('fieldsData')?.find(el => typeof el.get('pimType') === 'string' && (el.get('pimType') === 'CAD' || el.get('pimType') === 'USD'))?.get('pimType')\n    || 'CAD';\n};\n","export default __webpack_public_path__ + \"static/media/pdfIcon.78b17337.svg\";","import {IMap} from 'ats-utils/src/Interfaces';\nimport {Spec} from '../../models';\nimport {Map} from 'immutable';\nimport {checkIsDrawingChecked} from '../ProjectDetail/helpers';\nimport {DetailConfig} from '../../modules/ProjectModule/reducer';\n\nexport const getSelectedDrawings = (projectSpecDetailConfig: DetailConfig): Array<{ specId: number, drawingId: number }> => {\n    const result: Array<{ specId: number, drawingId: number }> = [];\n    projectSpecDetailConfig?.forEach((specConfig, specId) => {\n        specConfig.forEach((drawingConfig, drawingId) => {\n            if (checkIsDrawingChecked(drawingConfig)) {\n                result.push({\n                    specId: Number(specId),\n                    drawingId: Number(drawingId)\n                });\n            }\n        });\n    });\n    return result;\n};\nexport const getSelectedProducts = (projectSpecDetailConfig: DetailConfig, specs: Map<number, IMap<Spec>>) => {\n    const selectedDrawings = getSelectedDrawings(projectSpecDetailConfig);\n    const result: Array<{ specId: number, drawingId: number, productId: number }> = [];\n    selectedDrawings.forEach(({ specId, drawingId }) => {\n        const drawings = specs.getIn([specId, `drawings`]);\n        const drawing = drawings.find((d) => d.get('id') === drawingId);\n        if (drawing) {\n            drawing.get('products')?.forEach((product) => {\n                result.push({\n                    specId,\n                    drawingId,\n                    productId: product.get('id')\n                });\n            });\n        }\n    });\n    return result;\n};\n\nexport const hasNonArchivedProduct = ({\n  selectedDrawings,\n  specs,\n  selectedSpec,\n}: {\n  selectedDrawings: Array<{ specId: number, drawingId: number }>,\n  specs?: Map<number, IMap<Spec>>,\n  selectedSpec?: IMap<Spec>\n}): boolean => {\n  return selectedDrawings.some(({ specId, drawingId }) => {\n    const drawings = specs\n      ? specs.getIn([specId, 'drawings'])\n      : selectedSpec?.get('drawings');\n    if (!drawings) {\n      return false;\n    }\n    const drawing = drawings.find((d) => d.get('id') === drawingId);\n    if (!drawing) {\n      return false;\n    }\n    return drawing.get('products')?.some((product) => product.get('status') !== 'archived') ?? false;\n  });\n};\n\nexport const constructSpecDrawingsArrayForDelete = (selectedDrawings: Array<{ specId: number, drawingId: number }>): Array<{ specId: number, drawingIds: number[] }> => {\n    const map = new globalThis.Map<number, number[]>();\n    selectedDrawings.forEach(({ specId, drawingId }) => {\n        if (!map.has(specId)) {\n            map.set(specId, []);\n        }\n        map.get(specId)!.push(drawingId);\n    });\n    return Array.from(map, ([specId, drawingIds]) => ({ specId, drawingIds }));\n};","import {SPEC_PRINT_TYPE} from '../../constants';\nimport autocadIcon from '../../images/printPage/autocad-icon.svg';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport revitSVG from '../../images/printPage/revitSVG.svg';\nimport {DOWNLOAD_GROUP, DownloadFormat} from './types';\n\nexport const iconMap = new Map<DownloadFormat, any>([\n    [SPEC_PRINT_TYPE.submittal, pdfIcon],\n    [SPEC_PRINT_TYPE.productBrochure, pdfIcon],\n    [SPEC_PRINT_TYPE.schedule, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.longSpec, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.shortSpec, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.manufacturerSpecSheet, pdfIcon],\n    [SPEC_PRINT_TYPE.revit, revitSVG],\n    [SPEC_PRINT_TYPE.autoCad, autocadIcon],\n    [SPEC_PRINT_TYPE.csi, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.lochinvarSubmittal, pdfIcon],\n    [SPEC_PRINT_TYPE.bobrickCSIEvolve, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.bobrickCSITrad, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.bobrickCSIPrivada, ['far', 'file-word']],\n    [SPEC_PRINT_TYPE.bobrickPlanningGuide, pdfIcon],\n    [SPEC_PRINT_TYPE.projectQuoteNuAir, pdfIcon],\n]);\n\n\nexport const DOWNLOAD_GROUPS: Array<{ key: DOWNLOAD_GROUP, labelKey: string }> = [\n    { key: DOWNLOAD_GROUP.projectDocuments, labelKey: 'downloadView.groupProjectDocuments' },\n    { key: DOWNLOAD_GROUP.specifications, labelKey: 'downloadView.groupSpecifications' },\n    { key: DOWNLOAD_GROUP.bimCad, labelKey: 'downloadView.groupBimCad' },\n];\n\nexport const BORBRICK_CSI_MASTER_SPECS = 'BORBRICK_CSI_MASTER_SPECS';\nexport const BORBRICK_PLANNING_GUIDE = 'BORBRICK_PLANNING_GUIDE';\nexport const WATTS_CSI_MASTER_SPEC = 'WATTS_CSI_MASTER_SPEC';","export var reflow = function reflow(node) {\n  return node.scrollTop;\n};\nexport function getTransitionProps(props, options) {\n  var timeout = props.timeout,\n      _props$style = props.style,\n      style = _props$style === void 0 ? {} : _props$style;\n  return {\n    duration: style.transitionDuration || typeof timeout === 'number' ? timeout : timeout[options.mode] || 0,\n    delay: style.transitionDelay\n  };\n}","import store from '../store';\n\nexport const getText = (texts: Array<[string, boolean]>): string => {\n    // tslint:disable-next-line:prefer-for-of\n    for (let i = 0; i < texts.length; i++) {\n        if (texts[i][1]) {\n            return texts[i][0];\n        }\n    }\n    return '';\n};\n\nexport const generateFileLink = (fileId: string) => {\n  const fileLink = store.store.atsApi.callApi(\n    fileId,\n    { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n  ) as string;\n\n  return fileLink;\n};","import { Dialog, DialogTitle, DialogContent, Grid, Typography, TextField, DialogActions, Button, IconButton } from '@material-ui/core';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { bidFormSelector, quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport { change } from 'redux-form';\nimport { List, Map } from 'immutable';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { BID_FORM_NAME } from '..';\nimport { BIDSTATUS_LABEL_PATH_MAP } from '../../../constants';\n\ninterface IBidNoteModalProps {\n  preview?: boolean;\n  bidIndex: number;\n  open: boolean;\n  onClose: () => void;\n}\n\nconst BidNoteModal: React.FC<IBidNoteModalProps> = ({\n  preview = false,\n  bidIndex,\n  open,\n  onClose\n}) => {\n\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  // const [editingBidIndex, setEditingBidIndex] = React.useState(-1);\n  const [bidNote, setBidNote] = React.useState('');\n\n  const formKeyContact = useSelector(bidFormSelector(['keyContacts', bidIndex]));\n  const formCustomers = useSelector(quoteFormSelector(['customers'])) || List();\n\n  const customer = formCustomers?.find(c => c.get('id') === formKeyContact?.getIn(['contact', 'id'])) || Map();\n  const customerName = customer.get('firstName') && customer.get('lastName') ?\n    `${customer.get('firstName')} ${customer.get('lastName')}`\n    : customer.get('organization') || '-'\n    ;\n\n  React.useEffect(() => {\n    if (bidIndex !== -1) {\n      setBidNote(formKeyContact.get('bidNote'));\n    } else {\n      setBidNote('');\n    }\n  }, [bidIndex]);\n\n  const handleBidNoteChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setBidNote(event.target.value);\n  };\n\n  const handleAddBidNote = () => {\n    dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidNote`, bidNote));\n    onClose();\n  };\n\n  return (\n    <Dialog open={open} onClose={onClose} disableBackdropClick={!preview} disableEscapeKeyDown={!preview}>\n      <DialogTitle>\n        {\n          preview ?\n            t('quoteCustomerBidNoteModal.bidNoteLabel')\n            :\n            t('quoteCustomerBidNoteModal.title')\n        }\n        {\n          preview &&\n          <IconButton onClick={onClose} style={{ padding: 0, float: 'right' }}>\n            <CloseIcon />\n          </IconButton>\n        }\n      </DialogTitle>\n      <DialogContent>\n\n        <Grid container={true} justify='space-between' spacing={2}>\n          <Grid item={true} xs={4}>\n            <Typography>{t('quoteCustomerBidNoteModal.customerNameLabel')}</Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography>{t('quoteCustomerBidNoteModal.bidStatusLabel')}</Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography>{t('quoteCustomerBidNoteModal.bidValueLabel')}</Typography>\n          </Grid>\n\n          <Grid item={true} xs={4} zeroMinWidth={true}>\n            <Typography variant='inherit' style={{ overflowWrap: 'break-word' }}>\n              {customerName}\n            </Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography variant='inherit'>\n              {t(BIDSTATUS_LABEL_PATH_MAP[formKeyContact?.get('bidStatus')]) || '-'}\n            </Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography variant='inherit'>\n              {formKeyContact?.get('bidValue')}\n            </Typography>\n          </Grid>\n\n          <Grid item={true} xs={12} style={{ marginTop: 32 }}>\n            <Typography>{t('quoteCustomerBidNoteModal.bidNoteLabel')}</Typography>\n            {\n              preview ?\n                <Typography variant='inherit'>{bidNote}</Typography>\n\n                :\n                <TextField\n                  value={bidNote || ''}\n                  multiline={true}\n                  rowsMax={12}\n                  onChange={handleBidNoteChange}\n                  fullWidth={true}\n                  variant='standard' />\n            }\n\n          </Grid>\n        </Grid>\n      </DialogContent>\n      {\n        preview ? <DialogActions /> :\n          <DialogActions>\n            <Button color='primary' onClick={onClose}>{t('quoteCustomerBidNoteModal.cancelButton')}</Button>\n            <Button color='primary' onClick={handleAddBidNote}>{t('quoteCustomerBidNoteModal.addButton')}</Button>\n          </DialogActions>\n      }\n    </Dialog>\n  );\n};\n\nexport default BidNoteModal;","import { List, Map, fromJS } from 'immutable';\nimport React from 'react';\nimport { Contact, TableColumn } from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport { Box, Grid, StyleRules, Theme, makeStyles } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { COLUMN_TYPES } from '../../constants';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { quoteFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport { arrayPush } from 'redux-form';\nimport ColumnsSelector from '../ColumnsSelector';\nimport QuoteContactsDropdown from '../QuoteContactsDropdown';\nimport QuoteCustomersTable, { defaultColumns } from '../QuoteCustomersTable';\nimport BidNoteModal from './BidNoteModal';\nimport { GetFiltersByType } from '../../modules/AccountModule/actions';\nimport { makeSelectFilterList } from '../../modules/AccountModule/selectors';\n\nexport const BID_FORM_NAME = 'bidForm';\n\ninterface IQuoteCustomersWithBidProps {\n  preview?: boolean;\n  selectedCustomers: List<IMap<Contact>>;\n  contacts?: List<IMap<Contact>>;\n  openColumnsDrawer?: boolean;\n  toggleColumnsDrawer?: () => void;\n  onApplyDiscount?: (customer: any) => void;\n}\n\n\nconst useStyles = makeStyles((theme: Theme): StyleRules => ({\n  columnIcon: {\n    marginRight: theme.spacing(1),\n  },\n}));\n\nconst QuoteCustomersWithBid = ({\n  preview = false,\n  selectedCustomers,\n  contacts,\n  openColumnsDrawer,\n  toggleColumnsDrawer,\n  onApplyDiscount,\n}: IQuoteCustomersWithBidProps) => {\n\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const [disabledColumns, setDisabledColumns] = React.useState(['Customer Name', 'Apply Discount', 'Action']);\n  const [columnsToDisplay, setColumnsToDisplay] = React.useState([...defaultColumns]);\n  const initialLoadRef = React.useRef(true);\n\n  const [openBidNoteModal, setOpenBidNoteModal] = React.useState(false);\n  const [editingBidIndex, setEditingBidIndex] = React.useState(-1);\n\n  const projectId = useSelector(quoteFormSelector(['projectId']));\n  const isProjectLinked = useSelector(quoteFormSelector(['projectInfo', 'isLinked']));\n\n  const columnList = useSelector(makeSelectFilterList(COLUMN_TYPES.QUOTE_CUSTOMER_LIST_COLUMNS));\n\n  const hiddenColumns = preview\n                          ? ['Action']\n                          : isProjectLinked\n                            ? []\n                            : ['Bid Status & Value'];\n  const filteredColumns = columnsToDisplay.filter((column) => column.display && hiddenColumns.includes(column.id) === false);\n\n  React.useEffect(() => {\n    dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.QUOTE_CUSTOMER_LIST_COLUMNS }));\n  }, []);\n\n  React.useEffect(() => {\n    if (preview && columnList) {\n      const rawColumns = columnList?.getIn([0, 'filterData']);\n      const parsedRawColumns = rawColumns ? JSON.parse(rawColumns) : null;\n      if (parsedRawColumns) {\n        handleColumnsChange(parsedRawColumns);\n      }\n    }\n  }, [preview, columnList]);\n\n  const toogleBidNoteModal = (bidIndex?: number) => {\n    setEditingBidIndex(bidIndex !== undefined ? bidIndex : -1);\n    setOpenBidNoteModal(!openBidNoteModal);\n  };\n\n  const handleColumnsChange = (columns: TableColumn[]) => {\n    if (initialLoadRef.current) {\n      initialLoadRef.current = false;\n      const updated = columns.map(col =>\n        col.id === 'Internal Note' ? { ...col, display: false } : col\n      );\n      setColumnsToDisplay([...updated]);\n    } else {\n      setColumnsToDisplay([...columns]);\n    }\n  };\n\n  const handleOnSelectCustomer = (selected: any) => {\n    // bid\n    if (projectId || isProjectLinked) {\n      dispatch(arrayPush(BID_FORM_NAME, 'keyContacts', fromJS({\n        contact: Map({ id: selected.get('id') }),\n        bidStatus: null,\n        bidValue: null,\n        bidNotes: null,\n      })));\n    }\n  };\n\n  return (\n    <>\n      {\n        preview ?\n          <Box overflow='auto' style={{ width: '100%', height: '100%' }}>\n            <QuoteCustomersTable\n              preview={preview}\n              customers={List(selectedCustomers)}\n              // columns={defaultColumns.filter(c => (c.id === 'Bid Status & Value' && projectId) || c.id !== 'Action' && c.id !== 'Bid Status & Value' && c.display)}\n              columns={filteredColumns}\n              toogleBidNoteModal={toogleBidNoteModal}\n              onApplyDiscount={onApplyDiscount}\n            />\n          </Box>\n          :\n          <QuoteContactsDropdown\n            fieldName='customers'\n            subTitle={t('customers.customersLabel')}\n            useDivContainer={true}\n            options={contacts}\n            isMulti={true}\n            backspaceRemovesValue={false}\n            inputProps={{\n              controlShouldRenderValue: false,\n              isClearable: false,\n            }}\n            onSelect={handleOnSelectCustomer}\n            children={\n              <Grid container={true} direction='row'\n                wrap='nowrap'\n                style={{\n                  width: '100%',\n                  height: '100%',\n                }}\n              >\n                <Grid item={true} style={{ width: '100%', overflow: 'auto' }}>\n                  <QuoteCustomersTable\n                    customers={List(selectedCustomers)}\n                    // columns={columnsToDisplay.filter(c => c.display)}\n                    columns={filteredColumns}\n                    toogleBidNoteModal={toogleBidNoteModal}\n                    onApplyDiscount={onApplyDiscount}\n                  />\n                </Grid>\n                <Box style={{\n                  minWidth: openColumnsDrawer ? '300px' : 0,\n                  height: openColumnsDrawer ? null : 0,}}>\n                  <ColumnsSelector\n                    columnType={COLUMN_TYPES.QUOTE_CUSTOMER_LIST_COLUMNS}\n                    defaultColumns={defaultColumns}\n                    columnsToDisplay={columnsToDisplay}\n                    disabledColumns={disabledColumns}\n                    hiddenColumns={hiddenColumns}\n                    isOpen={openColumnsDrawer}\n                    onClose={toggleColumnsDrawer}\n                    handleColumnsChange={handleColumnsChange}\n                  />\n                  </Box>\n              </Grid>\n            }\n          />\n      }\n      <BidNoteModal\n        preview={preview}\n        open={openBidNoteModal}\n        onClose={() => toogleBidNoteModal()}\n        bidIndex={editingBidIndex}\n      />\n    </>\n  );\n\n\n};\n\nexport default QuoteCustomersWithBid;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nimport { elementTypeAcceptingRef } from '@material-ui/utils';\nimport { useIsFocusVisible } from '../utils/focusVisible';\nimport useForkRef from '../utils/useForkRef';\nimport Typography from '../Typography';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the root element if `underline=\"none\"`. */\n  underlineNone: {\n    textDecoration: 'none'\n  },\n\n  /* Styles applied to the root element if `underline=\"hover\"`. */\n  underlineHover: {\n    textDecoration: 'none',\n    '&:hover': {\n      textDecoration: 'underline'\n    }\n  },\n\n  /* Styles applied to the root element if `underline=\"always\"`. */\n  underlineAlways: {\n    textDecoration: 'underline'\n  },\n  // Same reset as ButtonBase.root\n\n  /* Styles applied to the root element if `component=\"button\"`. */\n  button: {\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$focusVisible': {\n      outline: 'auto'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if the link is keyboard focused. */\n  focusVisible: {}\n};\nvar Link = React.forwardRef(function Link(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'a' : _props$component,\n      onBlur = props.onBlur,\n      onFocus = props.onFocus,\n      TypographyClasses = props.TypographyClasses,\n      _props$underline = props.underline,\n      underline = _props$underline === void 0 ? 'hover' : _props$underline,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'inherit' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"component\", \"onBlur\", \"onFocus\", \"TypographyClasses\", \"underline\", \"variant\"]);\n\n  var _useIsFocusVisible = useIsFocusVisible(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState = React.useState(false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  var handlerRef = useForkRef(ref, focusVisibleRef);\n\n  var handleBlur = function handleBlur(event) {\n    if (focusVisible) {\n      onBlurVisible();\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  };\n\n  var handleFocus = function handleFocus(event) {\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  };\n\n  return React.createElement(Typography, _extends({\n    className: clsx(classes.root, classes[\"underline\".concat(capitalize(underline))], className, focusVisible && classes.focusVisible, {\n      button: classes.button\n    }[component]),\n    classes: TypographyClasses,\n    color: color,\n    component: component,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    ref: handlerRef,\n    variant: variant\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Link.propTypes = {\n  /**\n   * The content of the link.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the link.\n   */\n  color: PropTypes.oneOf(['default', 'error', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: elementTypeAcceptingRef,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * `classes` prop applied to the [`Typography`](/api/typography/) element.\n   */\n  TypographyClasses: PropTypes.object,\n\n  /**\n   * Controls when the link should have an underline.\n   */\n  underline: PropTypes.oneOf(['none', 'hover', 'always']),\n\n  /**\n   * Applies the theme typography styles.\n   */\n  variant: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiLink'\n})(Link);","import * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport {\n  Button,\n  Fab,\n  Fade,\n  Grid,\n  Input,\n  InputAdornment,\n  Menu,\n  MenuItem,\n  Paper,\n  Popper,\n  Tooltip,\n  Typography\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport FilterListRoundedIcon from '@material-ui/icons/FilterListRounded';\nimport ViewColumnRoundedIcon from '@material-ui/icons/ViewColumnRounded';\nimport AddIcon from '@material-ui/icons/Add';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport {\n  IRouterReducerLocation,\n  makeSelectLocation\n} from '../../modules/RouterModule/selectors';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap/index';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction';\nimport { createStructuredSelector } from 'reselect';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\nimport UpdateIcon from '@material-ui/icons/Update';\nimport { BulkType } from '../ProductAndPackageList/Component';\n\nconst useStyles = makeStyles(theme => ({\n  headerContainer: {\n    padding: theme.spacing(1, 3),\n    background: theme.palette.grey[100],\n  },\n  filterButton: {\n    margin: theme.spacing(0, 1),\n  },\n  topHeaderIcon: {\n    marginRight: theme.spacing(),\n    color: '#757575',\n  },\n  searchIcon: {\n    color: '#757575',\n  },\n  fabContainer: {\n    position: 'relative',\n    marginLeft: theme.spacing(3),\n    minWidth: theme.spacing(7),\n    minHeight: theme.spacing(3.5)\n  },\n  fabInnerContainer: {\n    width: theme.spacing(7),\n    height: theme.spacing(7)\n  },\n  fab: {\n    position: 'relative' as 'relative',\n    top: '50%',\n    marginBottom: '-50%' /* hack for absolute+relative positions combination effect */\n  },\n  _disabledFab: {\n    position: 'relative' as 'relative',\n    top: '50%',\n    marginBottom: '-50%', /* hack for absolute+relative positions combination effect */\n    color: 'rgba(0, 0, 0, 0.26)',\n    boxShadow: 'none',\n    backgroundColor: 'rgba(0, 0, 0, 0.12)',\n    '&:hover': {\n      backgroundColor: 'rgba(0, 0, 0, 0.12)',\n    }\n  },\n  popper: {\n    marginTop: theme.spacing()\n  },\n  popperContent: {\n    padding: theme.spacing()\n  },\n  warningIcon: {\n    marginRight: theme.spacing(.5)\n  }\n}));\n\ninterface IToolBarComponentProps {\n  showFilter?: boolean;\n  showColumn?: boolean;\n  showFab?: boolean;\n  disabledFab?: boolean;\n  fabTooltip?: string;\n  searchTooltip?: string;\n  customizedFab?: JSX.Element;\n  leftComponent?: JSX.Element;\n  rightComponent?: JSX.Element;\n  searchTerm?: string;\n  minimumCharacters?: number;\n  minimumCharactersText?: string;\n  showUploadProducts?: boolean;\n  step?: number;\n  showSearchInput?: boolean;\n  handleSubmit?: ((searchTerm: string) => void) | null;\n  onClickFilterButton?(event: React.MouseEvent<HTMLButtonElement>): void;\n  onClickColumnButton?(event: React.MouseEvent<HTMLButtonElement>): void;\n  onClickFab?(event: React.MouseEvent): void;\n  onClickUploadProductsButton?(event: React.MouseEvent<HTMLButtonElement>): void;\n  onClickCancelUploadButton?(event: React.MouseEvent<HTMLButtonElement>): void;\n  onUploadMenuItemClick?(action: string): void;\n}\n\ninterface IToolBarProps extends IToolBarComponentProps {\n  location: IMap<IRouterReducerLocation>;\n  dispatch(action: IAction): void;\n}\n\ntype ToolBarPropsType = IToolBarProps & WithTranslation;\n\nconst ToolBar: React.FC<ToolBarPropsType> = (props) => {\n  const {\n    searchTooltip,\n    searchTerm,\n    showColumn = true,\n    showFab = true,\n    disabledFab,\n    fabTooltip,\n    showFilter = true,\n    showSearchInput = true,\n    minimumCharacters = 0,\n    minimumCharactersText = '',\n    onClickFilterButton = () => null,\n    onClickColumnButton = () => null,\n    onClickFab = () => null,\n    handleSubmit,\n    customizedFab,\n    leftComponent,\n    showUploadProducts = false,\n    onClickUploadProductsButton = () => null,\n    step,\n    // rightComponent,\n    onClickCancelUploadButton = () => null,\n    onUploadMenuItemClick = () => null,\n    rightComponent,\n    t\n  } = props;\n\n  const {\n    filterButton,\n    topHeaderIcon,\n    fabContainer,\n    fabInnerContainer,\n    _disabledFab,\n    fab,\n    headerContainer,\n    searchIcon,\n    popper,\n    popperContent,\n    warningIcon,\n  } = useStyles();\n\n  const [search, setSearch] = useState(searchTerm || '');\n  const [open, setOpen] = React.useState(false);\n  const [canDisplay, setCanDisplay] = React.useState(false);\n  const [anchorEl, setAnchorEl] = React.useState<HTMLInputElement | null>(null);\n  const [isUploadMenuOpen, setIsUploadMenuOpen] = React.useState(false);\n\n  // Call handleSubmit on every keystroke - consumers debounce it themselves. Debouncing here as well\n  // makes the searchTerm prop lag behind the input, so the sync effect below reverts what the user typed.\n  const submit = useCallback((value: string) => {\n    if (typeof handleSubmit === 'function') {\n      handleSubmit(value);\n    }\n  }, [handleSubmit]);\n\n  const onChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const value = event.target.value;\n    setSearch(value);\n\n    if (value.length >= minimumCharacters || value.length === 0) {\n      submit(value);\n    }\n  }, [minimumCharacters, setSearch, submit]);\n\n  React.useEffect(() => {\n    setSearch(searchTerm);\n  }, [searchTerm]);\n\n  React.useEffect(() => {\n    if (minimumCharacters) {\n      if (canDisplay && search.length < minimumCharacters) {\n        setOpen(true);\n      } else {\n        setOpen(false);\n      }\n    }\n  }, [search, canDisplay]);\n\n  const handleOnUploadMenuClick = (action: BulkType) => () => {\n    onUploadMenuItemClick(action);\n    setAnchorEl(null);\n    setIsUploadMenuOpen(false);\n  };\n\n  return (\n    <Grid\n      container={true}\n      // justify={'space-between'}\n      alignItems='center'\n      wrap='nowrap'\n      className={headerContainer}\n    >\n      {\n        leftComponent\n          ? leftComponent\n          : null\n      }\n      <Grid\n        container={true}\n        justify='flex-end'\n        alignContent='center'\n        alignItems='center'\n        wrap='nowrap'\n      >\n        {\n          showSearchInput ?\n            <form\n              onSubmit={(event) => {\n                event.preventDefault();\n                submit(search);\n              }}\n            >\n              <Tooltip title={searchTooltip || ''} placement={minimumCharacters ? 'top' : 'bottom'}>\n                <Input\n                  placeholder={t('listPageToolbar.searchPlaceholder')}\n                  onChange={onChange}\n                  value={search || ''}\n                  endAdornment={\n                    <InputAdornment position='end'>\n                      <SearchIcon fontSize='small' className={searchIcon} />\n                    </InputAdornment>\n                  }\n                  inputProps={{\n                    onFocus: minimumCharacters\n                      ? (e: any) => {\n                        if (!anchorEl) {\n                          setAnchorEl(e.currentTarget);\n                        }\n                        setCanDisplay(true);\n                      }\n                      : null,\n                    onBlur: minimumCharacters ? (e) => setCanDisplay(false) : null\n                  }}\n                />\n              </Tooltip>\n              {\n                Boolean(minimumCharacters) &&\n                <Popper className={popper} open={open} anchorEl={anchorEl} placement={'bottom-start'} transition={true}>\n                  {({ TransitionProps }) => (\n                    <Fade {...TransitionProps} timeout={350}>\n                      <Paper className={popperContent}>\n                        <Grid container={true} alignItems='center' wrap={'nowrap'}>\n                          <WarningIcon className={warningIcon} color='error' />\n                          <Typography>{minimumCharactersText}</Typography>\n                        </Grid>\n                      </Paper>\n                    </Fade>\n                  )}\n                </Popper>\n              }\n            </form>\n            :\n            null\n        }\n        {\n          showFilter ?\n            <Button\n              className={filterButton}\n              onClick={onClickFilterButton}\n            >\n              <FilterListRoundedIcon className={topHeaderIcon} />\n              {t('listPageToolbar.filter')}\n            </Button>\n            : null\n        }\n        {\n          showColumn ?\n            <Button\n              onClick={onClickColumnButton}>\n              <ViewColumnRoundedIcon className={topHeaderIcon} />\n              {t('listPageToolbar.column')}\n            </Button>\n            : null\n        }\n        {\n          showUploadProducts ?\n            <>\n              <Button\n                // className={classes.uploadButton}\n                onClick={(e) => {\n                  setIsUploadMenuOpen(!isUploadMenuOpen);\n                  setAnchorEl(!isUploadMenuOpen ? e.currentTarget as HTMLInputElement : null);\n                }}\n              >\n                <CloudUploadIcon className={topHeaderIcon}/>\n                {t('importPricing.uploadProductsButton')}\n              </Button>\n              <Menu\n                // elevation={0}\n                getContentAnchorEl={null}\n                anchorEl={anchorEl}\n                anchorOrigin={{\n                  vertical: 'bottom',\n                  horizontal: 'left',\n                }}\n                // anchorReference='anchorPosition'\n                transformOrigin={{\n                  vertical: 'top',\n                  horizontal: 'left',\n                }}\n                keepMounted={true}\n                open={isUploadMenuOpen}\n                onClose={() => {\n                  setAnchorEl(null);\n                  setIsUploadMenuOpen(false);\n                }}\n              >\n                <MenuItem onClick={handleOnUploadMenuClick('new')}>\n                  <LocalOfferIcon className={topHeaderIcon}/>\n                  {t('importPricing.bulkAddProducts')}\n                </MenuItem>\n                <MenuItem onClick={handleOnUploadMenuClick('update')}>\n                  <UpdateIcon className={topHeaderIcon}/>\n                  {t('importPricing.bulkupdateProducts')}\n                </MenuItem>\n              </Menu>\n            </>\n            :\n            null\n        }\n        {\n          showFab\n            ? <div className={fabContainer}>\n              {\n                customizedFab\n                  ? customizedFab\n                  : <Fab\n                    onClick={disabledFab ? null : onClickFab}\n                    color='primary'\n                    aria-label={t('listPageToolbar.fabAriaLabel')}\n                    classes={{ root: disabledFab ? _disabledFab : fab }}\n                  >\n                    <Tooltip title={fabTooltip || ''}>\n                      <Grid container={true} alignContent='center' justify='center' className={fabInnerContainer}>\n                        <AddIcon />\n                      </Grid>\n                    </Tooltip>\n                  </Fab>\n              }\n            </div>\n            : null\n        }\n      </Grid>\n      {\n        rightComponent\n          ? rightComponent\n          : null\n      }\n    </Grid>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  location: makeSelectLocation(),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n  dispatch,\n});\n\nexport default compose<React.ComponentClass<IToolBarComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(ToolBar);\n","\nimport Base from '../Base';\n\n// items from list service\nexport default class ListItem<V = string, K = number | string> extends Base {\n  public value: V;\n  public id: K;\n  public name?: string;\n  public label?: string;\n  public disabled?: boolean;\n\n  public constructor(init?: ListItem<V, K> & Base) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n","import {call, cancelled, fork, join, put, race, select, take, takeEvery, takeLatest,} from 'redux-saga/effects';\n// import {\n//   defaultFetchParams,\n// } from 'ats-utils/src';\nimport {\n  BulkDownloadAction,\n  BulkDownloadFailedAction,\n  BulkDownloadSucceed,\n  CreateCoverImageAction,\n  DeleteCoverImageAction,\n  GenericErpCronJobAction,\n  GenericQuotePrintAction,\n  GenericReportPrintAction,\n  GenericSpecPrintAction,\n  GenericSpecPrintErrorAction,\n  GenericSpecPrintResetErrorAction,\n  GetCoverImagesAction,\n  GetCoverImagesSucceededAction,\n  GetPrintHistoryByFormatAction,\n  GetPrintHistoryByQuoteIdAction,\n  GetPrintHistoryFailAction,\n  GetPrintHistorySuccessAction,\n  ICoverImage,\n  IPrintObj,\n  PollPrintAction,\n  PrintActionTypes,\n  PrintFailToggleAction,\n  PrintJobFailed,\n  PrintJobSucceed,\n  PrintQuoteCompletedAction,\n  PrintQuoteSucceededAction,\n  PrintReportCompletedAction,\n  PrintReportFailedAction,\n  PrintReportReset,\n  PrintSpecSucceededAction,\n  CreateAnalyticsEventsAction,\n  SetPollingPrintIdAction,\n  SetPrintQuoteStatusForShareVendorQuoteAction,\n} from './actions';\nimport {fromJS, List, Map} from 'immutable';\nimport {apiCallWaitingAction, atsApiCallWaitingAction, taggedDelay,} from '../AtsModule/saga';\nimport {AtsApiCallAction,} from '../AtsModule/actions';\nimport {IMap,} from 'ats-utils/src/Interfaces';\nimport {\n  AMPLITUDE_EVENT,\n  BOBRICK_CSI_EVOLVE_FILE_ID,\n  BOBRICK_CSI_PRIVADA_FILE_ID,\n  BOBRICK_CSI_TRAD_FILE_ID,\n  BOBRICK_PLANNIN_GUIDE_FILE_ID,\n  BULK_IMPORT_EXPORT_TYPE,\n  BULK_UPLOAD_USERS_TYPE,\n  ERP_CRONJOB_TYPE,\n  GEOLOCATION_ID,\n  IMPERIAL_UNITS_COUNTRY_IDS,\n  IS_PRODUCTION,\n  PIM_SERIES_OPERATION_TYPE,\n  QUOTE_PRINT_FORMAT,\n  REPORT_PRINT_TYPE,\n  SPEC_POLLING_TYPES,\n  SPEC_PRINT_OPERATION_ID,\n  SPEC_PRINT_TYPE,\n  SPEC_TO_QUOTE_CRONJOB_TYPE\n} from '../../constants';\nimport {\n  SetOverlayComponentPropsAction,\n  SetSnackbarOpenAction,\n  SetTimerStartAction,\n  ToggleLiveChatAction,\n  ToggleOverlayComponentAction\n} from '../ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../components/LoadingModal/Component';\nimport i18next from 'i18next';\nimport {\n  DownloadQuoteBillingAction,\n  GetSpecToQuoteProductsFailedAction,\n  GetSpecToQuoteStatusAction\n} from '../QuoteModule/actions';\nimport {makeSelectAmplitudeData, makeSelectIdentityObject, makeSelectUserHasCsi2026Acl} from '../AtsModule/selectors';\nimport {makeSelectLocale} from '../LanguageModule/selectors';\nimport {\n  BulkExportProductsLoadingAction,\n  DownloadBulkImportTemplateFileLoadingAction,\n  DownloadBulkImportTemplateFileSucceededAction,\n  SetBulkImportProductsProgressAction\n} from '../PimModule/actions';\nimport {makeSelectLocationForSeriesSearchFilter, makeSelectLoggedInUserOfficeLocation, makeSelectShopDrawingColor} from '../AccountModule/selectors';\nimport {makeSelectBulkDownloadStatus} from './selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectTimerTracker } from '../ApplicationModule/selectors';\nimport { makeSelectSpec } from '../SpecModule/selectors';\nimport { CONTENT_TYPE } from '../../components/CustomizedSnackbar/Component';\nimport store from '../../store';\nimport { Snackbar } from '@material-ui/core';\nimport { GetShopDrawingColorAction, SetUploadUsersProgress } from '../AccountModule/actions';\nimport { getShopDrawingColor } from '../AccountModule/saga';\n\ninterface ISpecResponse {\n  payload: {\n    specService: {\n      spec: object\n    }\n  };\n}\n\nexport default function* printSaga() {\n  yield takeEvery(PrintActionTypes.GET_COVER_IMAGES, getCoverImages);\n  yield takeEvery(PrintActionTypes.CREATE_COVER_IMAGES, createCoverImage);\n  yield takeEvery(PrintActionTypes.DELETE_COVER_IMAGES, deleteCoverImage);\n  yield takeEvery(PrintActionTypes.GENERIC_SPEC_PRINT, genericSpecPrintJob);\n  yield takeEvery(PrintActionTypes.GENERIC_QUOTE_PRINT, genericQuotePrint);\n  yield takeLatest(PrintActionTypes.GENERIC_REPORT_PRINT, genericReportPrint);\n  yield takeEvery(PrintActionTypes.GET_PRINT_HISTORY_BY_FORMAT, getPrintHistoryByFormat);\n  yield takeEvery(PrintActionTypes.POLL_PRINT, pollPrint);\n  yield takeLatest(PrintActionTypes.GET_PRINT_HISTORY_BY_QUOTE_ID, getPrintHistoryByQuoteId);\n  yield takeLatest(PrintActionTypes.GENERIC_ERP_CRONJOB, genericErpCrobJob);\n  yield takeEvery(PrintActionTypes.CREATE_ANALYTICS_EVENTS, createAnalyticsEvent);\n  yield takeLatest(PrintActionTypes.BULK_DOWNLOAD, bulkSpecCrobJob);\n  yield takeLatest(PrintActionTypes.QUOTE_BILLING_PRINT, quoteBillingPrint);\n  yield takeEvery(PrintActionTypes.ZIP_FILES, zipFilesFlow);\n}\n\n// PT-5477 (2026-08-21): thin wrapper over the internal `zipFiles` helper —\n// dispatches POST /file/zip with the supplied fileIds and returns the\n// server-issued zipFileId via the caller-provided onSuccess callback.\n// Used by QuoteExport's DownloadReady for DOWNLOAD ALL / DOWNLOAD SELECTED.\nfunction* zipFilesFlow(action: any) {\n  const { fileIds, fileName, onSuccess, onFail } = action.payload || {};\n  if (!fileIds || fileIds.length === 0) {\n    if (onFail) { onFail(); }\n    return;\n  }\n  const { data, err } = yield call(zipFiles, { fileIds, fileName: fileName || '' });\n  if (err || !data) {\n    if (onFail) { onFail(); }\n    return;\n  }\n  const zipFileId = data.get ? data.get('id') : data.id;\n  if (!zipFileId) {\n    if (onFail) { onFail(); }\n    return;\n  }\n  if (onSuccess) { onSuccess(zipFileId); }\n}\nfunction* deleteCoverImage(\n  action: DeleteCoverImageAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    printType,\n    id\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'print',\n        endpoint: 'deleteCoverImage',\n        params: {\n          type: printType,\n          id\n        },\n        body: {\n        }\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const coverImages: List<IMap<ICoverImage>> = immutableData.getIn(['payload', 'print', 'coverImages']);\n    if (coverImages == null) {\n      console.error('deleteCoverImage response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      yield put(new GetCoverImagesAction(printType));\n    }\n  } else {\n    console.error('deleteCoverImage error', { err }); // tslint:disable-line\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nfunction* createCoverImage(\n  action: CreateCoverImageAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    printType,\n    title,\n    fileId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'print',\n        endpoint: 'createCoverImage',\n        params: {\n          type: printType\n        },\n        body: {\n          title,\n          fileId,\n        }\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const coverImages: List<IMap<ICoverImage>> = immutableData.getIn(['payload', 'print', 'coverImages']);\n    if (coverImages == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      yield put(new GetCoverImagesAction(printType));\n    }\n  } else {\n    console.error('print error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* getPrintHistoryByQuoteId(\n  action: GetPrintHistoryByQuoteIdAction\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteId,\n    printType,\n  } = payload;\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'print',\n      endpoint: 'printHistoryByReferenceType',\n      params: {\n        referenceType: printType,\n        id: quoteId,\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const downloadHistory: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'print', 'printHistory']);\n\n    if (downloadHistory != null) {\n      yield put(new GetPrintHistorySuccessAction(downloadHistory));\n    } else {\n      console.error('GetPrintHistoryByQuoteId response error', { // tslint:disable-line\n        data,\n        error,\n      });\n    }\n\n  } else {\n    yield put(new GetPrintHistoryFailAction({ error }));\n  }\n}\n\nfunction* getCoverImages(\n  action: GetCoverImagesAction\n) {\n  const {\n    payload: type\n  } = action;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'print',\n        endpoint: 'getCoverImages',\n        params: {\n          type\n        }\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const coverImages: List<IMap<ICoverImage>> = immutableData.getIn(['payload', 'print', 'coverImages']);\n    if (coverImages == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      yield put(new GetCoverImagesSucceededAction({ data: coverImages, type }));\n    }\n  } else {\n    console.error('print error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* genericQuotePrint(\n  action: GenericQuotePrintAction\n) {\n  const {\n    payload: {\n      quoteId,\n      printType,\n      operationId,\n      countryId,\n      printData = Map(),\n      timerStart = null,\n      bidInvitationResponseId,\n    }\n  } = action;\n\n  const locale = yield select(makeSelectLocale());\n  const isCanada = countryId === GEOLOCATION_ID.canada;\n  const xAtsLanguageEn = isCanada ? 'en-ca' : 'en-us';\n  const xAtsLanguageFr = 'fr';\n\n  let color;\n  if (printType === QUOTE_PRINT_FORMAT.shopDrawing || printType === QUOTE_PRINT_FORMAT.oandm) {\n    color = yield select(makeSelectShopDrawingColor());\n    if (!color) {\n      yield call(getShopDrawingColor, new GetShopDrawingColorAction());\n      color = yield select(makeSelectShopDrawingColor());\n    }\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'quotation',\n        endpoint: operationId,\n        xAtsLanguage: locale === 'en' ? xAtsLanguageEn : xAtsLanguageFr,\n        body: {\n          color,\n          ...printData.toJS(),\n        },\n        withTimezoneOffset: true\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const queuedDownloads: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'quotation', printType]);\n    if (queuedDownloads == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      const type = queuedDownloads.getIn([-1, 'type']);\n      const printId = queuedDownloads.getIn([-1, 'id']);\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      yield put(new PollPrintAction({\n        id: quoteId,\n        printId,\n        type,\n        otherProps: {\n          bidInvitationResponseId\n        },\n        onSuccessCb: ({ result }) => {\n          if (printType === QUOTE_PRINT_FORMAT.shopDrawing) {\n            amplitude.logEvent(AMPLITUDE_EVENT.shopDrawingDownloadSuccess, {\n              timeToDownload: Date.now() - timerStart,\n              ...amplitudeData,\n            });\n          } else if (printType === QUOTE_PRINT_FORMAT.oandm) {\n            amplitude.logEvent(AMPLITUDE_EVENT.omDownloadSuccess, {\n              timeToDownload: Date.now() - timerStart,\n              ...amplitudeData,\n            });\n          }\n        },\n        onFailCb: ({ result }) => {\n          if (printType === QUOTE_PRINT_FORMAT.shopDrawing) {\n            amplitude.logEvent(AMPLITUDE_EVENT.shopDrawingDownloadFailed, {\n              ...amplitudeData,\n            });\n          } else if (printType === QUOTE_PRINT_FORMAT.oandm) {\n            amplitude.logEvent(AMPLITUDE_EVENT.omDownloadFailed, {\n              ...amplitudeData,\n            });\n          }\n        },\n      }));\n    }\n  } else {\n    yield put(new PrintFailToggleAction());\n    console.error('print shop drawing error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* genericReportPrint(\n  action: GenericReportPrintAction\n) {\n  yield race({\n    printReport: call(printReport, action),\n    cancellation: call(cancelPrintReport)\n  });\n}\n\nfunction* printReport(\n  action: GenericReportPrintAction\n) {\n  const {\n    payload: {\n      printType,\n      operationId,\n      printData = Map(),\n      provideAiBillableLines = false,\n      queries = {},\n      onSuccessCb,\n    }\n  } = action;\n\n  const locale = yield select(makeSelectLocale());\n  const loginUserOfficeLocation = yield select(makeSelectLoggedInUserOfficeLocation());\n  const countryId = loginUserOfficeLocation?.getIn(['country', 'id']);\n  const isCanada = countryId === GEOLOCATION_ID.canada;\n  const xAtsLanguageEn = isCanada ? 'en-ca' : 'en-us';\n  const xAtsLanguageFr = 'fr';\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'report',\n        endpoint: operationId,\n        xAtsLanguage: locale === 'en' ? xAtsLanguageEn : xAtsLanguageFr,\n        body: {\n          ...printData.toJS(),\n          provideAiBillableLines,\n        },\n        queries\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const queuedDownloads: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'report', printType]);\n    if (queuedDownloads == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      const type = queuedDownloads.getIn([-1, 'type']);\n      const printId = queuedDownloads.getIn([-1, 'id']);\n      yield call(pollPrint, new PollPrintAction({\n        printId,\n        type,\n        onSuccessCb,\n      }));\n    }\n  } else {\n    yield put(new PrintReportFailedAction());\n    console.error('print report error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* cancelPrintReport() {\n  yield take(PrintActionTypes.CANCEL_LOADING_REPORT);\n  yield put(new PrintReportReset());\n}\n\nfunction* genericErpCrobJob(\n  action: GenericErpCronJobAction\n) {\n  yield race({\n    printReport: call(sendQuoteToErp, action),\n    cancellation: call(cancelErpCronJob)\n  });\n}\n\nfunction* sendQuoteToErp(\n  action: GenericErpCronJobAction\n) {\n  const {\n    payload: {\n      dispatch,\n      quoteId,\n      knownType,\n      queries,\n    }\n  } = action;\n\n  if (knownType === ERP_CRONJOB_TYPE.salesorder) {\n    yield put(new SetOverlayComponentPropsAction({\n      id: LOADING_MODAL_ID,\n      props: { action: i18next.t('translations:salesOrderModal.creatingMessage') }\n    }));\n  } else {\n    yield put(new SetOverlayComponentPropsAction({\n      id: LOADING_MODAL_ID,\n      props: { action: i18next.t('translations:sendQuoteToErp.sending') }\n    }));\n  }\n\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'quotation',\n        endpoint: 'createErp',\n        params: {\n          quoteId\n        },\n        queries\n      },\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const queuedDownloads: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'quotation', 'erp']);\n    if (queuedDownloads == null) {\n      console.error('sendQuoteToErp response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      const type = queuedDownloads.getIn([-1, 'type']);\n      const printId = queuedDownloads.getIn([-1, 'id']);\n      yield call(pollPrint, new PollPrintAction({\n        dispatch,\n        printId,\n        type,\n      }));\n    }\n  } else {\n    console.error('sendQuoteToErp error', { err }); // tslint:disable-line\n    yield put(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:salesOrderModal.errorMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      },\n      actionProps: {\n        label: i18next.t('translations:salesOrderModal.liveChat'),\n        autoHideDuration: null,\n        onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n        buttonStyle: {\n          color: 'white',\n          textDecoration: 'underline'\n        }\n      }\n    }));\n  }\n}\n\nfunction* cancelErpCronJob() {\n  yield take(PrintActionTypes.CANCEL_ERP_CRONJOB);\n  // yield put(new PrintReportReset());\n}\n\nexport function* pollPrint(\n  action: PollPrintAction\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    dispatch,\n    printId,\n    id,\n    type,\n    start,\n    otherProps = {},\n    // tslint:disable-next-line:no-empty\n    onSuccessCb = () => { },\n    // tslint:disable-next-line:no-empty\n    onFailCb = () => { },\n        // tslint:disable-next-line:no-empty\n    onFinallyCb = () => { },\n  } = payload;\n\n  let result: { data: any, err: Error };\n  let localStart;\n  let localEnd;\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  try {\n    yield put(new SetPollingPrintIdAction({ printId }));\n\n    let status;\n    let containuePolling;\n    do {\n      localStart = Date.now();\n      result = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: [\n          {\n            service: 'print',\n            endpoint: 'getPrintJob',\n            body: {\n              id: printId,\n            }\n          },\n        ]\n      }));\n      localEnd = Date.now();\n\n      const { data, err } = result;\n      if (data) {\n        const immutableData = fromJS(data);\n        const queuedDownload: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'print', 'printJob']);\n\n        status = queuedDownload.getIn([-1, 'status']);\n        containuePolling = status && status !== 'complete' && status !== 'failed';\n\n        if (containuePolling && otherProps?.bidInvitationResponseId) {\n          yield put(new SetPrintQuoteStatusForShareVendorQuoteAction({\n            bidInvitationResponseId: otherProps.bidInvitationResponseId,\n            status: 'pending'\n          }));\n        }\n        if (queuedDownload == null) {\n          console.error('print response error', { // tslint:disable-line\n            data,\n            err,\n          });\n        } else if (status !== 'pending') {\n          if (type === QUOTE_PRINT_FORMAT.shopDrawing ||\n            type === QUOTE_PRINT_FORMAT.oandm ||\n            type === QUOTE_PRINT_FORMAT.quote ||\n            type === QUOTE_PRINT_FORMAT.splitquote ||\n            type === QUOTE_PRINT_FORMAT.quoteexcel ||\n            type === QUOTE_PRINT_FORMAT.quotexml\n          ) {\n            const successPayload = fromJS({\n              quoteId: id,\n              type,\n              list: queuedDownload,\n              otherProps,\n            });\n            yield put(new PrintQuoteCompletedAction(fromJS({ id, type })));\n            yield put(new PrintQuoteSucceededAction(successPayload));\n          } else if (type === REPORT_PRINT_TYPE.reportquote) {\n            if (status === 'complete') {\n              yield put(new PrintReportCompletedAction({\n                fileId: queuedDownload.getIn([-1, 'fileId'])\n              }));\n            } else {\n              yield put(new PrintReportFailedAction());\n            }\n          } else if (\n            type === ERP_CRONJOB_TYPE.zurn\n            || type === ERP_CRONJOB_TYPE.salesorder\n            || type === ERP_CRONJOB_TYPE.markssupply\n            || type === ERP_CRONJOB_TYPE.aprsupply\n            || type === ERP_CRONJOB_TYPE.winsupply\n            || type === ERP_CRONJOB_TYPE.spectrum\n            || type === ERP_CRONJOB_TYPE.netsuite\n            || type === ERP_CRONJOB_TYPE.pacificplumbing\n            || type === ERP_CRONJOB_TYPE.kellersupply\n            || type === ERP_CRONJOB_TYPE.spscompanies\n            || type === ERP_CRONJOB_TYPE.macombgroup\n            || type === ERP_CRONJOB_TYPE.northeasternsupply\n            || type === ERP_CRONJOB_TYPE.thegranitegroup\n            || type === ERP_CRONJOB_TYPE.atlanticplumbing\n            || type === ERP_CRONJOB_TYPE.texasplumbing\n            || type === ERP_CRONJOB_TYPE.capitolgroup\n            || type === ERP_CRONJOB_TYPE.lixilsalesforce\n            || type === ERP_CRONJOB_TYPE.nextsupply\n            || type === ERP_CRONJOB_TYPE.pacesupply\n            || type === ERP_CRONJOB_TYPE.famoussupply\n            || type === ERP_CRONJOB_TYPE.plumbingandheating\n            || type === ERP_CRONJOB_TYPE.nationalwholesale\n            || type === ERP_CRONJOB_TYPE.goodin\n            || type === ERP_CRONJOB_TYPE.hirsch\n            || type === ERP_CRONJOB_TYPE.hajoca\n            || type === ERP_CRONJOB_TYPE.hubbard\n            || type === ERP_CRONJOB_TYPE.coburnsupply\n          ) {\n            if (status === 'complete') {\n              const details = queuedDownload.getIn([-1, 'details']);\n              const isCompositeError = details?.get('messagingType') === 'composite';\n              const resultId = details?.get('erpId') || '';\n              let successMessage = '';\n\n              yield put(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: false\n              }));\n              if (isCompositeError) {\n                yield put(new SetSnackbarOpenAction({\n                  content: isCompositeError ? fromJS({ contentType: CONTENT_TYPE.erp, details }) : null,\n                  severity: 'success',\n                  anchorOrigin: {\n                    horizontal: 'right',\n                    vertical: 'top'\n                  },\n                  actionProps: {\n                    autoHideDuration: null,\n                  }\n                }));\n              } else {\n                if (type === ERP_CRONJOB_TYPE.salesorder) {\n                  successMessage = i18next.t('translations:salesOrderModal.successMessage', { resultId });\n                } else if (\n                  type === ERP_CRONJOB_TYPE.zurn\n                  || type === ERP_CRONJOB_TYPE.markssupply\n                  || type === ERP_CRONJOB_TYPE.aprsupply\n                  || type === ERP_CRONJOB_TYPE.winsupply\n                  || type === ERP_CRONJOB_TYPE.spectrum\n                  || type === ERP_CRONJOB_TYPE.netsuite\n                  || type === ERP_CRONJOB_TYPE.pacificplumbing\n                  || type === ERP_CRONJOB_TYPE.kellersupply\n                  || type === ERP_CRONJOB_TYPE.spscompanies\n                  || type === ERP_CRONJOB_TYPE.macombgroup\n                  || type === ERP_CRONJOB_TYPE.northeasternsupply\n                  || type === ERP_CRONJOB_TYPE.thegranitegroup\n                  || type === ERP_CRONJOB_TYPE.atlanticplumbing\n                  || type === ERP_CRONJOB_TYPE.texasplumbing\n                  || type === ERP_CRONJOB_TYPE.capitolgroup\n                  || type === ERP_CRONJOB_TYPE.lixilsalesforce\n                  || type === ERP_CRONJOB_TYPE.nextsupply\n                  || type === ERP_CRONJOB_TYPE.pacesupply\n                  || type === ERP_CRONJOB_TYPE.famoussupply\n                  || type === ERP_CRONJOB_TYPE.plumbingandheating\n                  || type === ERP_CRONJOB_TYPE.nationalwholesale\n                  || type === ERP_CRONJOB_TYPE.goodin\n                  || type === ERP_CRONJOB_TYPE.hirsch\n                  || type === ERP_CRONJOB_TYPE.hajoca\n                  || type === ERP_CRONJOB_TYPE.hubbard\n                  || type === ERP_CRONJOB_TYPE.coburnsupply\n                ) {\n                  successMessage = i18next.t('translations:sendQuoteToErp.successMessage', { resultId });\n                }\n                yield put(new SetSnackbarOpenAction({\n                  message: successMessage,\n                  severity: 'success',\n                  anchorOrigin: {\n                    horizontal: 'right',\n                    vertical: 'top'\n                  },\n                  actionProps: {\n                    autoHideDuration: null,\n                  }\n                }));\n              }\n            } else if (status === 'failed') {\n              const details = queuedDownload.getIn([-1, 'details']);\n              const isCompositeError = details?.get('messagingType') === 'composite';\n              const errorMsg = details?.get('message') || i18next.t('translations:sendQuoteToErp.errorMessage');\n\n              yield put(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: false\n              }));\n              if (isCompositeError) {\n                yield put(new SetSnackbarOpenAction({\n                  content: isCompositeError ? fromJS({ contentType: CONTENT_TYPE.erp, details }) : null,\n                  severity: 'error',\n                  anchorOrigin: {\n                    horizontal: 'right',\n                    vertical: 'top'\n                  },\n                  actionProps: {\n                    autoHideDuration: null,\n                  }\n                }));\n              } else if (errorMsg) {\n                yield put(new SetSnackbarOpenAction({\n                  message: errorMsg,\n                  severity: 'error',\n                  anchorOrigin: {\n                    horizontal: 'right',\n                    vertical: 'top'\n                  },\n                  actionProps: {\n                    autoHideDuration: null,\n                  }\n                }));\n              } else {\n                yield put(new SetSnackbarOpenAction({\n                  message: i18next.t('translations:salesOrderModal.errorMessage'),\n                  severity: 'error',\n                  anchorOrigin: {\n                    horizontal: 'right',\n                    vertical: 'top'\n                  },\n                  actionProps: {\n                    label: i18next.t('translations:salesOrderModal.liveChat'),\n                    autoHideDuration: null,\n                    onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n                    buttonStyle: {\n                      color: 'white',\n                      textDecoration: 'underline'\n                    }\n                  }\n                }));\n              }\n            }\n          } else if (type === SPEC_TO_QUOTE_CRONJOB_TYPE.spectoquote) {\n            if (status === 'complete') {\n              yield put(new GetSpecToQuoteStatusAction({\n                id,\n                printId,\n                start,\n              }));\n            }\n          } else if (type === BULK_IMPORT_EXPORT_TYPE.bulkExport) {\n            if (status === 'complete') {\n              //  console.log('complete', queuedDownload.getIn([-1, 'fileId']));\n              const res = yield call(apiCallWaitingAction, new AtsApiCallAction({\n                payload: [\n                  {\n                    service: 'file',\n                    endpoint: 'getFile',\n                    params: {\n                      fileId: queuedDownload.getIn([-1, 'fileId'])\n                    },\n                    urlOnly: true,\n                    suppressErrors: true,\n                    withToken: true,\n                    withAppId: true\n                  }\n                ]\n              }));\n              if (res.data) {\n                window.location.replace(res.data);\n                yield put(new DownloadBulkImportTemplateFileSucceededAction(true));\n              } else if (res.err) {\n                console.error('BULK_EXPORT_TYPE err', res); // tslint:disable-line\n              }\n            } else if (status === 'failed') {\n              yield put(new SetSnackbarOpenAction({\n                message: i18next.t('translations:exportPricing.exportProductsFailedMessage'),\n                severity: 'error',\n                anchorOrigin: {\n                  horizontal: 'center',\n                  vertical: 'bottom'\n                }\n              }));\n            }\n            yield put(new BulkExportProductsLoadingAction(false));\n            yield put(new DownloadBulkImportTemplateFileLoadingAction(false));\n          } else if (type === BULK_IMPORT_EXPORT_TYPE.bulkImport) {\n            if (status === 'complete') {\n              yield put(new SetBulkImportProductsProgressAction({\n                percent: 100,\n                status: 'complete',\n                details: queuedDownload.getIn([-1, 'details'])\n              }));\n\n              const trackingData = {\n                stauts: 'complete'\n              };\n\n              const errorCode = (err as any)?.payload?.error?.code || null;\n              const errorMessage = (err as any)?.payload?.error?.error || null;\n\n              const meta = (data || err as any)?.meta || {};\n              const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n              const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n              delete meta.versionNumbers;\n              delete meta.render;\n\n              amplitude.logEvent(AMPLITUDE_EVENT.importPricing, {\n                errorCode,\n                errorMessage,\n                render,\n                ...trackingData,\n                ...meta,\n                ...versionNumbers,\n                ...amplitudeData,\n              });\n\n              //  console.log('complete', queuedDownload);\n            } else if (status === 'failed') {\n              // console.log('failed queuedDownload', queuedDownload)\n              yield put(new SetBulkImportProductsProgressAction({\n                percent: 100,\n                status: 'failed',\n                details: queuedDownload.getIn([-1, 'details'])\n              }));\n              const details = queuedDownload.getIn([-1, 'details']);\n              const haveConflicts = status === 'failed' && details.get('type') === 'conflicts' || details?.get('message')?.toLowerCase()?.includes('conflicts');\n              const haveErrors = status === 'failed' && details?.get('type') === 'errors' || details?.get('message')?.toLowerCase()?.includes('errors');\n\n              const trackingData = {\n                stauts: 'failed',\n                haveConflicts: haveConflicts || false,\n                haveErrors: haveErrors || false,\n                numbersOfInvalidEntries: details.get('errors') || null,\n                details: (haveErrors || haveConflicts) ? (details.get('0') || details.get('message')) : null\n              };\n\n              const errorCode = (err as any)?.payload?.error?.code || null;\n              const errorMessage = (err as any)?.payload?.error?.error || null;\n\n              const meta = (data || err as any)?.meta || {};\n              const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n              const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n              delete meta.versionNumbers;\n              delete meta.render;\n\n              amplitude.logEvent(AMPLITUDE_EVENT.importPricing, {\n                errorCode,\n                errorMessage,\n                render,\n                ...trackingData,\n                ...meta,\n                ...versionNumbers,\n                ...amplitudeData,\n              });\n\n              console.error('BULK_EXPORT_TYPE err', result); // tslint:disable-line\n            }\n          } else if (type === BULK_UPLOAD_USERS_TYPE.bulkimportusers) {\n            if (status === 'complete') {\n              yield put(new SetUploadUsersProgress({\n                percentage: 100,\n                status: 'complete',\n                details: queuedDownload.getIn([-1, 'details'])\n              }));\n            } else if (status === 'failed') {\n              yield put(new SetUploadUsersProgress({\n                percentage: 100,\n                status: 'failed',\n                details: queuedDownload.getIn([-1, 'details'])\n              }));\n            }\n          } else if (type === REPORT_PRINT_TYPE.reportquotebillablelines) {\n            return result;\n          } else if (\n            type !== PIM_SERIES_OPERATION_TYPE.publishDraft\n            && type !== PIM_SERIES_OPERATION_TYPE.getDuplicateProducts\n            && type !== PIM_SERIES_OPERATION_TYPE.mapIntegration\n            && type !== PIM_SERIES_OPERATION_TYPE.createIntegratedSeries\n            && type !== SPEC_POLLING_TYPES.specAssist\n          ) {\n            const downloadItem = immutableData.getIn(['payload', 'print', 'printJob', 0]);\n            // console.log('download success', downloadItem);\n            yield put(new PrintSpecSucceededAction({\n              data: {\n                specId: id\n              },\n              type,\n              printId,\n              list: downloadItem\n            }));\n          }\n        }\n      } else {\n        if (type === REPORT_PRINT_TYPE.reportquote) {\n          yield put(new PrintReportFailedAction());\n        } else {\n          yield put(new PrintFailToggleAction());\n        }\n        if (type === REPORT_PRINT_TYPE.reportquotebillablelines) {\n          return result;\n        }\n        console.error('getPrintJob error', { err }); // tslint:disable-line\n      }\n      if (containuePolling) {\n        yield call(taggedDelay, 5001);\n      }\n    } while (containuePolling);\n\n    const printEndTime = Date.now();\n    // send amplitude for lixil spec booklet when we have timerStart and action is printGenerateTime\n    const timerTracker = yield select(makeSelectTimerTracker());\n    const printClickedStartTime = timerTracker.get('startTime');\n    if (type === SPEC_PRINT_TYPE.specBooklet && printClickedStartTime !== 0 && timerTracker.get('action') === AMPLITUDE_EVENT.printGenerateTime) {\n      const selectedSpec = yield select(makeSelectSpec({specId: id}));\n      const specProjectId = selectedSpec.get('projectId');\n      amplitude.logEvent(AMPLITUDE_EVENT.printGenerateTime, {\n        renderTime: printEndTime - printClickedStartTime,\n        printTypes: 'Lixil Spec Booklet',\n        numberOfPrintTypes: 1,\n        specId: id,\n        projectId: specProjectId ? specProjectId : null,\n        isSuccess: status === 'complete' ? true : false,\n        ...amplitudeData\n      });\n      yield put(new SetTimerStartAction({ startTime: 0, action: '' }));\n    }\n    if (status === 'complete') {\n      onSuccessCb({ result });\n    } else {\n      if (type === SPEC_TO_QUOTE_CRONJOB_TYPE.spectoquote) {\n        const { data, err } = result;\n        onFailCb({ specId: id, data, err, start, end: printEndTime, amplitudeData });\n        yield put(new GetSpecToQuoteProductsFailedAction());\n        yield put(new SetSnackbarOpenAction({\n          message: 'Uh oh, we\\'ve encountered an internal server error, please try again.',\n          severity: 'error',\n          actionProps: {\n            autoHideDuration: null\n          }\n        }));\n      } else {\n        onFailCb({ result });\n      }\n    }\n  } catch (e) {\n    // This is for network error or server error but not for the case we receive a 'failed' status in a 200 request\n    if (type === SPEC_TO_QUOTE_CRONJOB_TYPE.spectoquote) {\n      const { data, err } = result;\n      onFailCb({ specId: id, data, err, start: localStart, end: localEnd, amplitudeData });\n      yield put(new GetSpecToQuoteProductsFailedAction());\n      yield put(new SetSnackbarOpenAction({\n        message: 'Uh oh, we\\'ve encountered an internal server error, please try again.',\n        severity: 'error',\n        actionProps: {\n          autoHideDuration: null\n        }\n      }));\n    } else if (\n      type === ERP_CRONJOB_TYPE.zurn\n      || type === ERP_CRONJOB_TYPE.salesorder\n      || type === ERP_CRONJOB_TYPE.markssupply\n      || type === ERP_CRONJOB_TYPE.aprsupply\n      || type === ERP_CRONJOB_TYPE.winsupply\n      || type === ERP_CRONJOB_TYPE.spectrum\n      || type === ERP_CRONJOB_TYPE.netsuite\n      || type === ERP_CRONJOB_TYPE.pacificplumbing\n      || type === ERP_CRONJOB_TYPE.kellersupply\n      || type === ERP_CRONJOB_TYPE.spscompanies\n      || type === ERP_CRONJOB_TYPE.macombgroup\n      || type === ERP_CRONJOB_TYPE.northeasternsupply\n      || type === ERP_CRONJOB_TYPE.thegranitegroup\n      || type === ERP_CRONJOB_TYPE.atlanticplumbing\n      || type === ERP_CRONJOB_TYPE.texasplumbing\n      || type === ERP_CRONJOB_TYPE.capitolgroup\n      || type === ERP_CRONJOB_TYPE.lixilsalesforce\n      || type === ERP_CRONJOB_TYPE.nextsupply\n      || type === ERP_CRONJOB_TYPE.pacesupply\n      || type === ERP_CRONJOB_TYPE.famoussupply\n      || type === ERP_CRONJOB_TYPE.plumbingandheating\n      || type === ERP_CRONJOB_TYPE.nationalwholesale\n      || type === ERP_CRONJOB_TYPE.goodin\n      || type === ERP_CRONJOB_TYPE.hirsch\n      || type === ERP_CRONJOB_TYPE.hajoca\n      || type === ERP_CRONJOB_TYPE.hubbard\n      || type === ERP_CRONJOB_TYPE.coburnsupply\n    ) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:salesOrderModal.errorMessage'),\n        severity: 'error',\n        anchorOrigin: {\n          horizontal: 'right',\n          vertical: 'top'\n        },\n        actionProps: {\n          label: i18next.t('translations:salesOrderModal.liveChat'),\n          autoHideDuration: null,\n          onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n          buttonStyle: {\n            color: 'white',\n            textDecoration: 'underline'\n          }\n        }\n      }));\n    } else {\n      onFailCb({ result });\n    }\n  } finally {\n    if (yield cancelled()) {\n      // do some clean up\n      yield put(new SetPollingPrintIdAction({ printId: '' }));\n    }\n    onFinallyCb();\n  }\n  // reset timer\n  // if (type !== SPEC_TO_QUOTE_CRONJOB_TYPE.spectoquote) { // don't reset timer if it is s2q\n  //   yield put(new SetTimerStartAction({startTime: 0, action: ''}));\n  // }\n}\n\nfunction* genericSpecPrintJob(\n    action: GenericSpecPrintAction,\n) {\n  yield race({\n    printReport: call(genericSpecPrint, action),\n    cancellation: call(cancelGenericSpecPrint),\n  });\n}\n\nfunction* cancelGenericSpecPrint() {\n  yield take(PrintActionTypes.CANCEL_DOWNLOAD_LIXIR_SPEC_BOOKLET);\n}\n\nfunction* genericSpecPrint(\n  action: GenericSpecPrintAction\n) {\n  const {\n    payload: {\n      xAtsLanguage,\n      operationId,\n      printType,\n      countryId,\n      printData = Map(),\n      specId: _specId,\n    }\n  } = action;\n\n  const specId = _specId ? _specId : printData && printData.get('specId');\n  yield put(new GenericSpecPrintResetErrorAction());\n\n  if (specId == null || specId === -1) {\n    return;\n  }\n\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const locale = yield select(makeSelectLocale());\n  const xAtsLanguageEn = xAtsLanguage;\n  const isCanada = countryId === GEOLOCATION_ID.canada;\n  const xAtsLanguageFr = 'fr';\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'spec',\n        endpoint: operationId,\n        xAtsLanguage: isRegisteredUser\n                        ? locale === 'en'\n                            ? xAtsLanguageEn\n                            : xAtsLanguageFr\n                        : locale,\n        body: {\n          specId,\n          ...printData.toJS()\n        }\n      },\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const downloadItem = immutableData.getIn(['payload', 'spec', printType]);\n\n    if (downloadItem == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      const printId = downloadItem.getIn([-1, 'id']);\n      const type = downloadItem.getIn([-1, 'type']);\n\n      yield call(pollPrint, new PollPrintAction({\n        id: specId,\n        printId,\n        type,\n      }));\n    }\n\n  } else {\n    yield put(new GenericSpecPrintErrorAction(err));\n    console.error('print error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* getPrintHistoryByFormat(action: GetPrintHistoryByFormatAction) {\n  const {\n    payload: {\n      referenceType,\n      type,\n      id\n    }\n  } = action;\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'print',\n      endpoint: 'printHistoryByFormatType',\n      body: {\n        referenceType,\n        id,\n        type,\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const downloadHistory: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'print', 'printHistory']);\n\n    if (downloadHistory != null) {\n      yield put(new GetPrintHistorySuccessAction(downloadHistory));\n    } else {\n      console.error('getPrintHistoryByFormat response error', { // tslint:disable-line\n        data,\n        error,\n      });\n    }\n\n  } else {\n    yield put(new GetPrintHistoryFailAction({ error }));\n  }\n}\n\nfunction* createAnalyticsEvent(\n  action: CreateAnalyticsEventsAction,\n) {\n  const {\n    trackingData\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'report',\n      endpoint: 'createAnalyticsEvent',\n      body: trackingData,\n    }\n  }));\n  if (data) {\n    //\n  } else {\n    console.error('createAnalyticsEvent failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction getPrintData({ key: printType, data }, drawings?) {\n  const drawingIds = drawings?.map((drawing) => drawing.get('id')) ?? List();\n  switch (printType) {\n    case SPEC_PRINT_TYPE.submittal:\n    case SPEC_PRINT_TYPE.lochinvarSubmittal: {\n      const withAvatar = data?.get('avatar');\n      const name = data?.getIn(['contact', 'label']);\n      const fileId = data?.getIn(['contact', 'value', 'imageId']);\n      const price = data?.get('price');\n      const includeLabel = data?.get('includeLabel');\n      const hasPricingOption = typeof price === 'boolean';\n      const includeSwatches = data?.get('includeSwatches');\n      const hasSwatchesOption = typeof includeSwatches === 'boolean';\n      const hasIncludeLabel = typeof includeLabel === 'boolean';\n      return (name || hasPricingOption) ? fromJS({\n        data: {\n          ...name && ({\n            contact: {\n              type: 'contact',\n              name,\n              ...withAvatar && ({ fileId })\n            }\n          }),\n          ...hasPricingOption && ({ price }),\n          ...hasSwatchesOption && ({ includeSwatches }),\n          ...hasIncludeLabel && ({ includeLabel }),\n          drawingIds,\n          url: IS_PRODUCTION ? window.location.origin : 'https://spec.dev.atssoftware.com/',\n        }\n      }) : Map();\n    }\n    case SPEC_PRINT_TYPE.longSpec:\n    case SPEC_PRINT_TYPE.shortSpec: {\n      return fromJS({\n        data: data.set('drawingIds', drawingIds)\n      });\n    }\n    case SPEC_PRINT_TYPE.manufacturerSpecSheet: {\n      return fromJS({\n        data: {\n          drawingIds,\n          epd: data?.get('epd') ?? false,\n        }\n      });\n    }\n    case SPEC_PRINT_TYPE.productBrochure: {\n      const drawingsIdsAndProductIds = drawings?.reduce((acc, drawing, index) => {\n        const drawingId = drawing.get('id');\n        const products = drawing.get('products');\n        const productIds = products.map((product) => {\n          return product.get('id');\n        });\n\n        const drawingAndProductsIdObj = Map().withMutations((ctx) => {\n          ctx.set('id', drawingId);\n          ctx.set('products', productIds);\n        });\n\n        return acc.push(drawingAndProductsIdObj);\n      }, List()) ?? List();\n      return data?.withMutations(ctx => {\n        ctx.set('drawingIds', drawingIds);\n        ctx.set('drawings', drawingsIdsAndProductIds);\n      }) ?? Map();\n    }\n    case SPEC_PRINT_TYPE.schedule: {\n      return fromJS({\n        data: {\n          formatAllCaps: data?.get('formatAllCaps') ?? false,\n          drawingIds,\n          includeLabel: data?.get('includeLabel') ?? false,\n          ...(data?.get('outputFormat') === 'dxf' ? { outputFormat: 'dxf' } : {}),\n        }\n      });\n    }\n    case SPEC_PRINT_TYPE.csi: {\n      return fromJS({\n        data: {\n          drawingIds,\n          includeLabel: data?.get('includeLabel') ?? false,\n          includeAlternatives: data?.get('includeAlternatives') ?? false,\n          includeNotes: data?.get('includeNotes') ?? false,\n        }\n      });\n    }\n    case SPEC_PRINT_TYPE.projectQuoteNuAir: {\n      const productIds = data?.get('products')?.reduce((acc, product) => acc.push(product.get('specProductId')), List());\n      const productQuantities = data?.get('products')?.reduce((acc, product) => acc.push(Number(product.get('qty'))), List());\n      return fromJS({\n        data: {\n          attention: data?.get('attention'),\n          location: data?.get('location'),\n          productIds,\n          productQuantities,\n        }\n      });\n    }\n    case SPEC_PRINT_TYPE.autoCad: {\n      return fromJS({\n        data: {\n          drawingIds,\n          types: ['cad'],\n        }\n      });\n    }\n    default: {\n      return fromJS({\n        data: {\n          drawingIds,\n        }\n      });\n    }\n  }\n}\n\nfunction* bulkSpecCrobJob(\n  action: BulkDownloadAction\n) {\n  yield race({\n    printReport: call(bulkDownload, action),\n    cancellation: call(cancelBulkSpecCronJob)\n  });\n}\n\nfunction* cancelBulkSpecCronJob() {\n  yield take(PrintActionTypes.CANCEL_BULK_SPEC_CRONJOB);\n}\n\nfunction* bulkDownload(action: BulkDownloadAction) {\n  const { payload } = action;\n  const {\n    type,\n    sourceName,\n    formatDetails,\n    projectLevelFormatDetails,\n    projectId,\n    specId,\n    specs,\n    hash,\n    bobrickCSIPrivada,\n    bobrickCSIEvolve,\n    bobrickCSITrad,\n    bobrickPlanningGuide,\n  } = payload;\n  const startTime = Date.now();\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  let service: string;\n  let params: object;\n  let path: Array<string | number>;\n  if (type === 'project') {\n    service = 'project';\n    params = {\n      projectId,\n    };\n    path = ['payload', 'project', 'bulkspec', 0];\n  }\n  if (type === 'spec') {\n    service = 'spec';\n    params = {\n      specId\n    };\n    path = ['payload', 'spec', 'bulkspec', 0];\n  }\n  try {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service,\n        endpoint: 'createBulkSpec',\n        params,\n      }\n    }));\n    if (err) {\n      throw err;\n    }\n    if (data) {\n      const immutableData = fromJS(data);\n      const bulkDownloadWrapper: IMap<IPrintObj> = immutableData.getIn(path);\n      const ids = [];\n      const specIds = [];\n      const printTypes = [];\n      const printJobs = [];\n      const isMaster = [];\n      for (const { name, specId: _specId, drawings, isMaster: _isMaster } of specs) {\n        for (const formatDetail of formatDetails) {\n          const printType = formatDetail?.key;\n          const printData = getPrintData(formatDetail, drawings);\n          printJobs.push(yield fork(createPrintJob, {\n            specId: _specId,\n            operationId: specPrints.find(({ type: _type }) => _type === printType).operationId,\n            printData,\n            printType,\n          }));\n          ids.push(`${_specId}spec`);\n          specIds.push(_specId);\n          printTypes.push(printType);\n          isMaster.push(_isMaster);\n        }\n      }\n      if (projectLevelFormatDetails && projectLevelFormatDetails.length > 0) {\n        for (const formatDetail of projectLevelFormatDetails) {\n          const printType = formatDetail?.key;\n          const printData = getPrintData(formatDetail);\n          printJobs.push(yield fork(createPrintJob, {\n            projectId,\n            operationId: specPrints.find(({ type: _type }) => _type === printType).operationId,\n            printData,\n            printType,\n          }));\n          ids.push(`${projectId}project`);\n          printTypes.push(printType);\n          isMaster.push(false);\n        }\n      }\n      const results = yield join(printJobs);\n      const printJobsCreated = [];\n      for (let i = 0; i < results.length; i++) {\n        const result = results[i];\n        if (result.err) {\n          yield put(new PrintJobFailed({\n            hash,\n            id: ids[i],\n            type: printTypes[i]\n          }));\n        } else if (result.data) {\n          printJobsCreated.push({\n            hash,\n            data: result.data,\n            id: ids[i],\n            projectId,\n            specId: specIds[i],\n            type: printTypes[i],\n            isMaster: isMaster[i],\n          });\n        }\n      }\n      // run each print job, if print job success, start poll, if failed, update reducer state\n      let fileIdsOfPrintJobs = [];\n      if (printJobsCreated.length > 0) {\n        const { fileIds: polledFileIds } = yield call(pollPrintJobs, {\n          hash,\n          printJobs: printJobsCreated\n        });\n        fileIdsOfPrintJobs = [...polledFileIds];\n      }\n      const fileIds = [...fileIdsOfPrintJobs];\n      if (bobrickPlanningGuide) {\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, {\n          ...amplitudeData,\n          printType: SPEC_PRINT_TYPE.bobrickPlanningGuide\n        });\n        fileIds.push(BOBRICK_PLANNIN_GUIDE_FILE_ID);\n      }\n      if (bobrickCSITrad) {\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, {\n          ...amplitudeData,\n          printType: SPEC_PRINT_TYPE.bobrickCSITrad\n        });\n        fileIds.push(BOBRICK_CSI_TRAD_FILE_ID);\n      }\n      if (bobrickCSIEvolve) {\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, {\n          ...amplitudeData,\n          printType: SPEC_PRINT_TYPE.bobrickCSIEvolve\n        });\n        fileIds.push(BOBRICK_CSI_EVOLVE_FILE_ID);\n      }\n      if (bobrickCSIPrivada) {\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, {\n          ...amplitudeData,\n          printType: SPEC_PRINT_TYPE.bobrickCSIPrivada\n        });\n        fileIds.push(BOBRICK_CSI_PRIVADA_FILE_ID);\n      }\n      let status: 'complete' | 'failed';\n      let fileId;\n      if (fileIds.length > 1) {\n        const zipResponse = yield call(zipFiles, {\n          fileIds,\n          fileName: sourceName\n        });\n        if (zipResponse.err) {\n          throw zipResponse.err;\n          // handle zip err\n        } else if (zipResponse.data) {\n          status = 'complete';\n          fileId = zipResponse.data.get('id');\n          yield put(new BulkDownloadSucceed({\n            hash,\n            zipFileId: fileId,\n          }));\n        }\n      } else if (fileIds.length === 1) {\n        status = 'complete';\n        yield put(new BulkDownloadSucceed({\n          hash,\n          zipFileId: fileIds.values().next().value,\n        }));\n      } else {\n        status = 'failed';\n      }\n\n      const endTime = Date.now();\n      // send amplitude when we have timerStart and action is printGenerateTime\n      const timerTracker = yield select(makeSelectTimerTracker());\n      const generatePrintClickedStartTime = timerTracker.get('startTime');\n      const printedFormats = formatDetails.map(format => format.label);\n      if (bobrickCSIEvolve || bobrickCSIPrivada || bobrickCSITrad) {\n        printedFormats.push(i18next.t('translations:downloadView.csiPartitionMasterSpecs'));\n      }\n      if (bobrickPlanningGuide) {\n        printedFormats.push(i18next.t('translations:downloadView.planningGuide'));\n      }\n      const filteredPrintedFormats = [...new Set(printedFormats)]; // prevent duplicates\n      if (generatePrintClickedStartTime !== 0 && timerTracker.get('action') === AMPLITUDE_EVENT.printGenerateTime) {\n        amplitude.logEvent(AMPLITUDE_EVENT.printGenerateTime, {\n          renderTime: endTime - generatePrintClickedStartTime,\n          printTypes: filteredPrintedFormats.join(', '),\n          numberOfPrintTypes: filteredPrintedFormats.length,\n          specId: [...new Set(specIds)].join(', '), // prevent duplicates\n          projectId: projectId ? projectId : null,\n          isSuccess: status === 'complete' ? true : false,\n          ...amplitudeData\n        });\n      }\n      // Update Wrapper\n      const renderTime = endTime - startTime;\n      yield call(apiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'print',\n          endpoint: 'updatePrintJob',\n          body: {\n            renderTime,\n            status,\n            ...fileId != null ? { fileId } : {}\n          },\n          params: {\n            id: bulkDownloadWrapper.get('id'),\n          }\n        }\n      }));\n    }\n  } catch (error) {\n    console.error(error); // tslint:disable-line\n    yield put(new BulkDownloadFailedAction());\n  } finally {\n    yield cancelled();\n  }\n  // reset timer\n  yield put(new SetTimerStartAction({startTime: 0, action: ''}));\n}\n// responseKey: formats that reuse another format's endpoint have their response payload keyed under that format\nconst specPrints: Array<{ type: SPEC_PRINT_TYPE, operationId: SPEC_PRINT_OPERATION_ID, responseKey?: SPEC_PRINT_TYPE }> = [\n  {\n    type: SPEC_PRINT_TYPE.productBrochure,\n    operationId: SPEC_PRINT_OPERATION_ID.createProductBrochure\n  },\n  {\n    type: SPEC_PRINT_TYPE.manufacturerSpecSheet,\n    operationId: SPEC_PRINT_OPERATION_ID.createManufacturerSpecSheet\n  },\n  {\n    type: SPEC_PRINT_TYPE.submittal,\n    operationId: SPEC_PRINT_OPERATION_ID.createSubmittal\n  },\n  {\n    type: SPEC_PRINT_TYPE.schedule,\n    operationId: SPEC_PRINT_OPERATION_ID.createSchedule\n  },\n  {\n    type: SPEC_PRINT_TYPE.shortSpec,\n    operationId: SPEC_PRINT_OPERATION_ID.createShortSpec\n  },\n  {\n    type: SPEC_PRINT_TYPE.longSpec,\n    operationId: SPEC_PRINT_OPERATION_ID.createLongSpec\n  },\n  {\n    type: SPEC_PRINT_TYPE.revit,\n    operationId: SPEC_PRINT_OPERATION_ID.createRevitPackage\n  },\n  {\n    type: SPEC_PRINT_TYPE.autoCad,\n    operationId: SPEC_PRINT_OPERATION_ID.createRevitPackage,\n    responseKey: SPEC_PRINT_TYPE.revit\n  },\n  {\n    type: SPEC_PRINT_TYPE.specBooklet,\n    operationId: SPEC_PRINT_OPERATION_ID.createSpecBooklet\n  },\n  {\n    type: SPEC_PRINT_TYPE.csi,\n    operationId: SPEC_PRINT_OPERATION_ID.createCsi\n  },\n  {\n    type: SPEC_PRINT_TYPE.lochinvarSubmittal,\n    operationId: SPEC_PRINT_OPERATION_ID.createLochinvarSubmittal\n  },\n  {\n    type: SPEC_PRINT_TYPE.projectQuoteNuAir,\n    operationId: SPEC_PRINT_OPERATION_ID.createProjectQuote\n  },\n];\nfunction* createPrintJob({\n  operationId,\n  printType,\n  printData = Map(),\n  projectId,\n  specId,\n}: {\n  operationId: SPEC_PRINT_OPERATION_ID,\n  printType: SPEC_PRINT_TYPE,\n  printData: IMap<any>,\n  projectId?: number,\n  specId?: number,\n}) {\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const locale = yield select(makeSelectLocale());\n  const location = yield select(makeSelectLocationForSeriesSearchFilter());\n  const countryId = location?.getIn(['country', 'id']);\n  const isCanada = countryId === GEOLOCATION_ID.canada;\n  const xAtsLanguageEn = countryId && IMPERIAL_UNITS_COUNTRY_IDS.includes(countryId) ? 'en-us' : 'en-ca';\n  const xAtsLanguageFr = 'fr';\n\n  const hasCsi2026Acl = yield select(makeSelectUserHasCsi2026Acl());\n  const endpoint = printType === SPEC_PRINT_TYPE.csi && hasCsi2026Acl\n    ? SPEC_PRINT_OPERATION_ID.createCsi2026\n    : operationId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: specId ? 'spec' : 'project',\n        endpoint,\n        xAtsLanguage: isRegisteredUser\n                        ? locale === 'en'\n                            ? xAtsLanguageEn\n                            : xAtsLanguageFr\n                        : locale,\n        body: {\n          ...printData.toJS(),\n          ...specId ? {specId} : {projectId},\n        },\n        withTimezoneOffset: true\n      },\n    ]\n  }));\n  if (data) {\n    const responsePrintType = specPrints.find(({ type: _type }) => _type === printType)?.responseKey ?? printType;\n    const printJob = fromJS(data).getIn(['payload', specId ? 'spec' : 'project', responsePrintType, -1]);\n    // the server reports the endpoint's own type (e.g. 'revit' for autoCad) — store the local print type instead\n    return { data: printJob?.set('type', printType) };\n  }\n  if (err) {\n    console.error(err); // tslint:disable-line\n    return { err };\n  }\n}\n\nfunction* pollPrintJobs({\n  hash,\n  printJobs\n}) {\n  const printJobIds = printJobs.map(({\n    type,\n    specId,\n    data\n  }) => {\n    return data.get('id');\n  });\n  // tslint:disable-next-line:prefer-const\n  let results;\n  let loading: boolean = false;\n  let isFirstPoll = true;\n  const INTERVAL = 5000;\n  const fileIds = new Set();\n  do {\n    if (!isFirstPoll) {\n      yield taggedDelay(INTERVAL);\n    }\n    isFirstPoll = false;\n    loading = false; // reset flag;\n    const { data, err } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: [\n        {\n          service: 'print',\n          endpoint: 'getPrintJobs',\n          body: [\n            ...printJobIds\n          ]\n        },\n      ]\n    }));\n    if (err) {\n      loading = true; // start another polling\n      continue;\n    }\n    const immutableData = fromJS(data);\n    const printJobsStatus: IMap<Record<string, IPrintObj>> = immutableData.getIn(['payload', 'print', 'printJob', -1]);\n    const state = yield select(makeSelectBulkDownloadStatus(hash));\n    const amplitudeData = yield select(makeSelectAmplitudeData());\n    // printJobsStatus\n    const sideEffects = [];\n    printJobsStatus.entrySeq().forEach(([printJobId, printJob]) => {\n      const _printJob = printJobs.find((p) => p?.data?.get('id') === printJobId);\n      // prefer the locally tracked type: the server reports 'revit' for autoCad jobs (shared endpoint),\n      // and local job ids are not unique per format, so the reducer lookup below needs the local type\n      const type = (_printJob?.type ?? printJob.get('type')) as SPEC_PRINT_TYPE;\n      const id = _printJob?.id;\n      const projectId = _printJob?.projectId;\n      const specId = _printJob?.specId;\n      const isMaster = _printJob?.isMaster;\n      const status = printJob.get('status');\n      const fileId = printJob.get('fileId');\n      if (status === 'pending') {\n        loading = true;\n      }\n      const job = state?.get('jobs')?.find((childJob) => childJob.get('id') === id && childJob.get('type') === type);\n      if (!job) {\n        return;\n      }\n      if (status === 'complete' && job.get('status') !== 'succeed') {\n        fileIds.add(fileId);\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, {\n          projectId,\n          specId,\n          printType: type,\n          isMaster,\n          ...amplitudeData\n        });\n        sideEffects.push(put(new PrintJobSucceed({\n          hash,\n          type,\n          id,\n          fileId\n        })));\n      }\n      if (status === 'failed' && job.get('status') !== 'failed') {\n        sideEffects.push(put(new PrintJobFailed({\n          hash,\n          type,\n          id,\n          specId,\n          projectId,\n        })));\n      }\n    });\n    // tslint:disable-next-line:prefer-for-of\n    for (let i = 0; i < sideEffects.length; i++) {\n      yield sideEffects[i];\n    }\n  } while (loading);\n\n  return { fileIds };\n}\n\nfunction* zipFiles({\n  fileIds = [],\n  fileName = ''\n}) {\n\n  const { data, err } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'file',\n        endpoint: 'zipFile',\n        body: {\n          fileIds,\n          fileName\n        }\n      },\n    ]\n  }));\n  if (err) {\n    return { err };\n  } else {\n    const immutableData = fromJS(data);\n    const zipFileMeta = immutableData.getIn(['payload', 'file', 'zip']);\n    return { data: zipFileMeta };\n  }\n}\n\nexport function* quoteBillingPrint(action) {\n  const {\n    payload: {\n      startDate,\n      endDate\n    }\n  } = action as DownloadQuoteBillingAction;\n  return yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'report',\n        endpoint: 'createQuoteBillableLinesReport',\n        body: {\n          filters: {\n            and: [\n              {\n                createdDate: {\n                  gte: startDate,\n                  lte: endDate\n                }\n              }\n            ]\n          }\n        },\n      },\n    ]\n  }));\n}","import { Breadcrumbs, createStyles, Link, makeStyles, Orientation, Theme } from '@material-ui/core';\nimport * as React from 'react';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {BEMIS_XREF_ID, XREF_ID} from '../../constants';\n\ninterface IXrefBreadcrumb {\n  appId: string;\n  homeLink: string;\n  orientation?: Orientation;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  fullWidth: {\n    width: '100%',\n  },\n  breadcrumbText: {\n    pointerEvents: 'none'\n  },\n}));\n\nconst XrefBreadcrumb: React.FC<IXrefBreadcrumb & WithTranslation> = ({\n  appId,\n  homeLink,\n  orientation = 'vertical',\n  t,\n}) => {\n\n  const isBemis = appId === BEMIS_XREF_ID;\n  const classes = useStyles();\n  if (appId === XREF_ID) {\n    return null;\n  }\n\n  return (\n    <Breadcrumbs separator='>' className={classes.fullWidth}>\n      <Link color={orientation === 'vertical' ? 'inherit' : 'primary'} href={homeLink}>\n        {t('CrossReference.home')}\n      </Link>\n      <Link color={orientation === 'vertical' ? 'textPrimary' : 'primary'} underline='none' className={classes.breadcrumbText}>\n        {isBemis ? t('CrossReference.titleAlt') : t('CrossReference.title')}\n      </Link>\n    </Breadcrumbs>\n  );\n};\n\nexport default withTranslation('translations')(XrefBreadcrumb);","import { createStyles, Grid, makeStyles, Orientation, Theme, Typography, useTheme } from '@material-ui/core';\nimport * as React from 'react';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { AtsSvgAltXrefLogo, AtsSvgXref } from '../../components/AtsSvg';\nimport Image from '../../components/Image';\nimport classnames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport { makeSelectAppId } from '../../modules/AtsModule/selectors';\nimport {\n  BEMIS_XREF_ID,\n  CONTRAC_XREF_ID,\n  FIAT_XREF_ID,\n  IPS_XREF_ID,\n  KOHLER_XREF_ID,\n  MISSION_RUBBER_XREF_ID,\n  NEPTUNE_XREF_ID,\n  OSB_XREF_ID,\n  PRESSALIT_XREF_ID,\n  PRIER_XREF_ID,\n  TS_BRASS_XREF_ID,\n  WILLIAMS_BROTHERS_XREF_ID\n} from '../../constants';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\n\ninterface IHeader {\n  orientation: Orientation;\n  customHeaderImage: string;\n  config?: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  padding: {\n    padding: theme.spacing(4, 0),\n  },\n  title: {\n    marginLeft: theme.spacing(2),\n  },\n  horizontal: {\n    color: theme.palette.primary.dark,\n    fontWeight: 'bold',\n    fontSize: theme.typography.h4.fontSize,\n  }\n}));\n\nconst Header: React.FC<IHeader & WithTranslation> = ({\n  orientation,\n  customHeaderImage,\n  t,\n  config,\n}) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const imgSize = 60;\n  const appId = useSelector(makeSelectAppId());\n  const locale = useSelector(makeSelectLocale());\n  const localeTitle = config.getIn(['titleProps', 'locale', locale]) ?? config.getIn(['titleProps', 'title']);\n  const useWhite: boolean = config.getIn(['layout', 'useWhite'], false);\n  const displayContactUsInHeader: boolean = config.getIn(['layout', 'displayContactUsInHeader'], false);\n  const useSecondaryColorForXrefIcon: boolean = config.getIn(['uiOverrides', 'useSecondaryColorForXrefIcon'], false);\n\n  const isBemis = appId === BEMIS_XREF_ID;\n  const secondaryColorIconApps = [\n    FIAT_XREF_ID,\n    PRIER_XREF_ID,\n    MISSION_RUBBER_XREF_ID,\n    WILLIAMS_BROTHERS_XREF_ID,\n    TS_BRASS_XREF_ID,\n    KOHLER_XREF_ID,\n    OSB_XREF_ID,\n    BEMIS_XREF_ID,\n    PRESSALIT_XREF_ID,\n    IPS_XREF_ID,\n    CONTRAC_XREF_ID,\n    NEPTUNE_XREF_ID,\n  ];\n  const secondaryColorIcon = useSecondaryColorForXrefIcon ?? secondaryColorIconApps.includes(appId);\n  return (\n    <Grid\n      container={true}\n      item={true}\n      alignItems='center'\n      wrap='nowrap'\n      justify={orientation === 'vertical' ? 'center' : 'flex-start'}\n      className={classes.padding}\n      style={{\n        paddingTop: displayContactUsInHeader ? 0 : theme.spacing(4),\n      }}\n    >\n      {\n        customHeaderImage\n          ? <Image\n            src={customHeaderImage}\n            width={`${imgSize}px`}\n            aspectRatio={'100%'}\n            fromService={true}\n            backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n            margin={'0'}\n          />\n          : orientation === 'vertical'\n            ? <AtsSvgXref color={{backgroundColor: secondaryColorIcon ? theme.palette.secondary[100] : theme.palette.primary[200]}} />\n            : <AtsSvgAltXrefLogo fill={useWhite ? 'white' : theme.palette.primary.main} />\n      }\n      <Typography\n        variant='h3'\n        className={classnames({\n          [classes.title]: true,\n          [classes.horizontal]: orientation === 'horizontal'\n        })}\n        style={{ color: useWhite ? 'white' : 'inherit' }}\n      >\n        {\n          orientation === 'horizontal' && localeTitle\n          ? localeTitle\n          : isBemis ? t('CrossReference.titleAlt') : t('CrossReference.title')}\n      </Typography>\n    </Grid>\n  );\n};\n\nexport default withTranslation('translations')(Header);\n\n","import { createStyles, makeStyles, Orientation, Paper, Theme, useTheme } from '@material-ui/core';\nimport * as React from 'react';\nimport classnames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  fullWidth: {\n    width: '100%',\n  },\n  paper: {\n    display: 'flex',\n    alignItems: 'center',\n    flexDirection: 'column',\n  },\n}));\n\nconst ConditionalPaper: React.FC<{orientation: Orientation; config: any; children: React.ReactElement}> = ({ children, config, orientation }) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const headerBackgroundColor: string = config.getIn(['layout', 'headerBackgroundColor'], theme.palette.primary[50]);\n  return (\n    <>\n      {\n        orientation === 'horizontal'\n        ? <Paper\n            elevation={3}\n            square={true}\n            className={classnames(classes.paper, classes.fullWidth)}\n            style={{ backgroundColor: headerBackgroundColor }}\n          >\n            {children}\n          </Paper>\n        : children\n      }\n    </>\n  );\n};\n\nexport default ConditionalPaper;","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"\n}), 'Mail');","import * as React from 'react';\nimport {\n  compose,\n} from 'redux';\nimport {\n  WithStyles,\n  withStyles,\n  Theme,\n  DialogTitle,\n  DialogContent,\n  Grid,\n  Button,\n  Paper,\n  Typography\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  reduxForm,\n  Field\n} from 'redux-form/immutable';\nimport FieldTextField, {\n  IFieldTextFieldComponentProps,\n} from '../FieldTextField/';\nimport {\n  connect, useSelector\n} from 'react-redux';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport ControlledModal from '../ControlledModal';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { SendXrefFeedbackAction, RequestXrefAction } from '../../modules/CrossRefModule/actions';\nimport { isNotEmptyStringRequired, isValidEmailAddress } from '../../validators';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { fromJS } from 'immutable';\nimport {makeSelectAppId, makeSelectUserEmail} from '../../modules/AtsModule/selectors';\nimport {BEMIS_XREF_ID} from '../../constants';\n\n// This is the styles object where you will write the CSS.\n// You can make a key on this object and then set the CSS properties in that object.\n// Below is an an example of a class name 'root' with CSS background styling (of the Romanian flag lol)\n\nexport const REQUEST_XREF_MODAL = 'REQUEST_XREF_MODAL';\n\nconst styles = (theme: Theme) => ({\n  root: {\n    background: 'white',\n    padding: theme.spacing() * 3\n  },\n  messageDialog: {\n    minHeight: theme.spacing() * 15 + 'px',\n    maxHeight: theme.spacing() * 15 + 'px'\n  },\n  DialogTitle: {\n    padding: `0 0 ${theme.spacing() * 2}px 0`,\n  },\n  DialogContent: {\n    padding: 0\n  },\n  typographyDialogTitle: {\n    color: 'black'\n  }\n});\n\ninterface IRequestCrossReferenceComponentProps {\n}\n\ninterface IRequestCrossReferenceProps extends IRequestCrossReferenceComponentProps {\n  dispatch: (s: IAction) => void;\n  requestXref: (values: IMap<any>) => void;\n}\n\ntype IRequestCrossReference =\n    IRequestCrossReferenceProps\n    & WithTranslation\n    & InjectedFormProps\n    & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst RequestCrossReference = (props: IRequestCrossReference) => {\n  const {\n    t,\n    classes,\n    dispatch,\n    handleSubmit,\n    requestXref,\n  } = props;\n\n  const appId = useSelector(makeSelectAppId());\n  const isBemis = appId === BEMIS_XREF_ID;\n  const submitFeedback = (values: IMap<any>) => {\n    dispatch(new ToggleOverlayComponentAction({open: false, id: REQUEST_XREF_MODAL}));\n    requestXref(values.toJS());\n  };\n  // Here is the JSX, which is what would be similar to HTML\n  // You can put a class name on the component with className={classes.NAME}\n  // where NAME is the key you set above in the styles object.\n  // You can see the example of classes.root on the Paper component belowgit statu\n  return (\n    <div>\n      <ControlledModal\n        localKey={REQUEST_XREF_MODAL}\n        fullWidth={true}\n        maxWidth={'sm'}\n        onExited={() => props.reset()}\n      >\n        <Paper className={classes.root}>\n          <DialogTitle className={classes.DialogTitle}>\n            <Typography className={classes.typographyDialogTitle}>\n              {isBemis ? t('RequestCrossReferenceModal.requestCrossReferenceAlt') : t('RequestCrossReferenceModal.requestCrossReference')}\n            </Typography>\n          </DialogTitle>\n          <DialogContent className={classes.DialogContent}>\n              <Typography>\n                {t('RequestCrossReferenceModal.text')}\n              </Typography>\n          </DialogContent>\n          <form onSubmit={handleSubmit(submitFeedback)}>\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  props={{\n                    label: t('RequestCrossReferenceModal.manufacturerName'),\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  name='manufacturer'\n                  component={FieldTextField}\n                  validate={[isNotEmptyStringRequired]}\n                />\n              </Grid>\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  props={{\n                    label: t('RequestCrossReferenceModal.productCategory'),\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  name='categoryname'\n                  component={FieldTextField}\n                  validate={[isNotEmptyStringRequired]}\n                />\n              </Grid>\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  props={{\n                    label: t('RequestCrossReferenceModal.productNumber'),\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  name='productNumber'\n                  component={FieldTextField}\n                  validate={[isNotEmptyStringRequired]}\n                />\n              </Grid>\n              <Grid item={true} style={{width: '100%'}}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  props={{\n                    label: t('RequestCrossReferenceModal.message'),\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                    inputProps: {\n                      multiline: true,\n                      InputProps: {\n                        classes: {\n                          input: classes.messageDialog\n                        }\n                      }\n                    },\n                  }}\n                  name='message'\n                  component={FieldTextField}\n                  validate={[isNotEmptyStringRequired]}\n                />\n              </Grid>\n              {/* email field */}\n              <Grid item={true} style={{width: '100%'}}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='email'\n                    component={FieldTextField}\n                    props={{\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      label: t('signUpForm.email'),\n                    }}\n                    validate={[\n                      isNotEmptyStringRequired,\n                      isValidEmailAddress,\n                    ]}\n                  />\n                </Grid>\n              <Grid container={true} direction='row' justify='flex-end'>\n                <Grid item={true} xs={3}>\n                  <Button\n                    color='primary'\n                    onClick={() => dispatch(new ToggleOverlayComponentAction({open: false, id: REQUEST_XREF_MODAL}))}\n                  >\n                    {t('formButtons.cancel')}\n                  </Button>\n                </Grid>\n                <Grid item={true} xs={3}>\n                  <Button\n                    color='primary'\n                    type='submit'\n                  >\n                    {t('formButtons.submit')}\n                  </Button>\n                </Grid>\n              </Grid>\n            </Grid>\n          </form>\n        </Paper>\n      </ControlledModal>\n    </div>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectUserEmail = makeSelectUserEmail();\n\n  const mapStateToProps = (state) => ({\n    initialValues: fromJS({\n      email: selectUserEmail(state)\n    }),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    requestXref: (values) => {\n      dispatch(new RequestXrefAction(values));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IRequestCrossReferenceComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: REQUEST_XREF_MODAL }),\n  reduxForm({\n    form: REQUEST_XREF_MODAL,\n    destroyOnUnmount: true,\n    enableReinitialize : true\n  }),\n)(RequestCrossReference);\n","import * as React from 'react';\nimport {\n  Grid,\n  Input,\n  MenuItem,\n  Select,\n} from '@material-ui/core';\nimport {\n  Theme,\n  makeStyles\n} from '@material-ui/core/styles';\nimport { LocaleMap } from '../../containers/AppMenu';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport { useTranslation } from 'react-i18next';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { useSelector } from 'react-redux';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\nimport { createStyles } from '@material-ui/styles';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport { safeLocalStorage } from '../../utils/safeStorage';\n\nconst languageData = Object.keys(LocaleMap).sort();\n\ninterface ILocaleSelectorProps {\n}\n\nconst LocaleSelector: React.FC<ILocaleSelectorProps> = () => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const amplitudeData = useAmplitudeData();\n  const locale = useSelector(makeSelectLocale());\n\n  return (\n    <Grid\n      container={true}\n      direction='row'\n      alignItems='center'\n      justify='flex-end'\n      wrap='nowrap'\n      style={{ width: 'fit-content' } }\n    >\n      <LanguageIcon color='inherit' style={{ marginRight: 8 }} />\n      <Select\n        value={locale}\n        onChange={(event) => {\n          const singleLocale = event.target.value as string;\n          safeLocalStorage.setItem('languages💾', singleLocale);\n          const languageSelected = singleLocale === 'en' ? 'English' : 'French';\n          amplitude.logEvent(AMPLITUDE_EVENT.languageToggle, amplitudeData({ languageSelected }));\n\n          // If URL has locale prefix, replace it; otherwise just reload\n          const localeRegex = new RegExp(`^/(${languageData.join('|')})(\\/|$)`);\n          const match = window.location.pathname.match(localeRegex);\n          if (match) {\n            const newPath = window.location.pathname.replace(localeRegex, `/${singleLocale}$2`);\n            window.location.href = newPath + window.location.search + window.location.hash;\n          } else {\n            window.location.reload();\n          }\n        }}\n        input={\n          <Input classes={{\n            root: classes.localeSelectorInputRoot,\n          }}/>\n        }\n        classes={{\n          icon: classes.localeSelectorIcon,\n        }}\n      >\n        {languageData.map((singleLocale) => (\n          <MenuItem\n            key={singleLocale}\n            value={singleLocale}\n          >\n            {t(`LanguageSelector.${singleLocale}`)}\n          </MenuItem>\n        ))}\n      </Select>\n    </Grid>\n  );\n};\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  localeSelectorIcon: {\n    color: 'inherit',\n  },\n  localeSelectorInputRoot: {\n    color: 'inherit',\n    '&:before': {\n      borderBottomColor: 'inherit', // underline default\n    },\n    '&:hover:not(.Mui-disabled):before': {\n      borderBottomColor: 'inherit', // underline hover\n    },\n    '&:after': {\n      borderBottomColor: 'inherit', // underline focus\n    },\n  },\n}));\n\nexport default LocaleSelector;\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Stepper,\n  Step,\n  StepLabel,\n  StepContent,\n  WithTheme,\n  Orientation,\n  StepIconProps,\n  MenuItem,\n  Select,\n  Typography,\n  Button,\n  Input,\n  StepConnector,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport {\n  IAction, IMap, IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectOverlayComponentContent,\n} from '../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentContentAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport {XREF_REF_STEPPER} from './constants';\nimport {\n  CrossReferenceRecommendedProductsContainer,\n  CrossReferenceSearchContainer,\n} from '../../containers';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport {\n  MODAL_ID,\n  IModalProps,\n} from '../../containers/CrossReferenceModal';\nimport {\n  SetSearchTermAction, GetCompetitorProductsAction, ResetSearchResultsAction,\n} from '../../modules/CrossRefModule/actions';\nimport { makeSelectConfig, makeSelectDomain, makeSelectSite } from '../../modules/AtsModule/selectors';\nimport { AtsSvgStep1, AtsSvgStep2 } from '../../components/AtsSvg';\nimport { makeSelectGetCompetitorProductsLoading } from '../../modules/CrossRefModule/selectors';\nimport classnames from 'classnames';\nimport XrefBreadcrumb from './XrefBreadcrumb';\nimport Header from './Header';\nimport ConditionalPaper from './ConditionalPaper';\nimport { grey } from '@material-ui/core/colors';\nimport { GetRegionsListAction, SetSelectedRegion } from '../../modules/LocationModule/actions';\nimport { RegionsList, Address } from '../../models';\nimport { makeSelectRegionsList, makeSelectSelectedRegion } from '../../modules/LocationModule/selectors';\nimport { fromJS, List, Map } from 'immutable';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport caFlag from '../../images/productSelectionPage/canFlag.png';\nimport { makeSelectLocationForSeriesSearchFilter, makeSelectPTXrefLocation } from '../../modules/AccountModule/selectors';\nimport {\n  AMPLITUDE_EVENT,\n  AOSMITH_XREF_ID, BEMIS_XREF_ID,\n  CONTRAC_XREF_ID,\n  DELTA_COMMERCIAL_XREF_ID,\n  HAWS_XREF_ID,\n  LOCHINVAR_XREF_ID,\n  OSB_XREF_ID,\n  SiteName,\n  WATTS_SPEC_ID,\n  WATTS_XREF_ID\n} from '../../constants';\nimport { COUNTRIES_OBJECT } from '../../constants/countries';\nimport { GetXrefTypesAction } from '../../modules/ListModule/actions';\nimport { Mail } from '@material-ui/icons';\nimport { REQUEST_XREF_MODAL } from '../../components/RequestCrossReference';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport LocaleSelector from '../../components/LocaleSelector';\nimport theme from '../../themes/base';\n\ninterface ICrossReferencePageTypeComponentProps {\n}\n\ninterface ICrossReferencePageTypeProps extends ICrossReferencePageTypeComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  currentStepCount: number;\n  modalProps: IModalProps;\n  config: IMap<IConfig>;\n  loadingCompetitorsProducts: boolean;\n  regionsList: List<IMap<RegionsList>>;\n  selectedRegion: IMap<RegionsList>;\n  ptRegion: IMap<Address>;\n  specRegion: IMap<Address>;\n  site: SiteName;\n  domain: string;\n}\n\nexport const INITIAL_STEPPER_CONTENT_EDIT_KEY = 0;\n\ntype CrossReferencePageType = InjectedFormProps & WithTranslation & ICrossReferencePageTypeComponentProps & ICrossReferencePageTypeProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAmplitudeData;\n\n// xref layout based on ['layout', 'orientation'] key in config\n// can either be 'horizontal' or 'vertical' layout\n// default is 'vertical'\n\nclass CrossReferencePage extends React.Component<CrossReferencePageType, {}> {\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      modalProps,\n      loadingCompetitorsProducts,\n      regionsList\n    } = this.props;\n\n    if (!regionsList.size) {\n      dispatch(new GetRegionsListAction());\n    } else {\n      this.setDefaultRegion();\n    }\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: XREF_REF_STEPPER,\n      content: INITIAL_STEPPER_CONTENT_EDIT_KEY,\n    }));\n\n    const {\n      searchTerm,\n    } = modalProps;\n\n    if (searchTerm) {\n      dispatch(new SetSearchTermAction({searchTerm}));\n      dispatch(new GetCompetitorProductsAction({searchTerm}));\n    }\n\n    dispatch(new GetXrefTypesAction());\n  };\n\n  public componentDidUpdate(prevProps) {\n    if (prevProps.regionsList !== this.props.regionsList || prevProps.ptRegion !== this.props.ptRegion || prevProps.specRegion !== this.props.specRegion || (!Boolean(this.props.regionsList.size) && !Boolean(this.props.selectedRegion.size)) ) {\n      this.setDefaultRegion();\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    // clear the store\n    dispatch(new ResetSearchResultsAction());\n    // clear search field\n    dispatch(new SetSearchTermAction({searchTerm: ''}));\n  }\n\n  public getSteps = () => {\n    const { t, config } = this.props;\n    const appId = config.getIn(['atsApiOptions', 'apiKey']);\n    const isBemis = appId === BEMIS_XREF_ID;\n    return [t('CrossReference.step1Label'), isBemis ? t('CrossReference.step2LabelAlt') : t('CrossReference.step2Label')];\n  }\n\n  public getStepContent = (step: number) => {\n    const { config } = this.props;\n    const customProductImage = config.getIn(['layout', 'customProductImage']);\n    const orientation: Orientation = config.getIn(['layout', 'orientation'], 'vertical');\n    switch (step) {\n      case 1:\n        return <CrossReferenceRecommendedProductsContainer\n          handleBack={this.handleBack}\n          orientation={orientation}\n          customProductImage={customProductImage}\n        />;\n        default:\n          return <CrossReferenceSearchContainer\n            customProductImage={customProductImage}\n            orientation={orientation}\n          />;\n    }\n  }\n\n  public defaults = () => ({\n    [SiteName.spec]: this.props.specRegion,\n    [SiteName.pt]: this.props.ptRegion,\n  });\n\n  public setDefaultRegion = () => {\n    // If the URL has a valid /location/ param, use it instead of the default region.\n    // Without this, GetRegionsListAction returning later would overwrite the URL-selected region.\n    const urlLocationId: string | undefined = (window as any).__LOCATION_ID__;\n    if (urlLocationId) {\n      this.props.dispatch(new SetSelectedRegion({region: fromJS({country: {id: urlLocationId}})}));\n      return;\n    }\n    const region = this.props.regionsList.find(region => region.get('isDefault')) || Map();\n    const location = fromJS({country: {id: region.get('id')}});\n\n    this.props.dispatch(new SetSelectedRegion({region: this.defaults()[this.props.site] || location}))\n  }\n\n  public handleNext = (addStepNumber: number) => {\n    const {\n      dispatch,\n      currentStepCount = 0,\n    } = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: XREF_REF_STEPPER,\n      content: currentStepCount + addStepNumber,\n    }));\n  };\n\n  public handleBack = (backStepNumber: number) => {\n    const {\n      dispatch,\n      currentStepCount,\n    } = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: XREF_REF_STEPPER,\n      content: currentStepCount - backStepNumber,\n    }));\n  };\n\n  public requestXrefOpen = (open: boolean) => {\n    const {\n      amplitudeData,\n      dispatch,\n    } = this.props;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.xrefClickOnRequestCrossReferenceButton, amplitudeData());\n    dispatch(new ToggleOverlayComponentAction({id: REQUEST_XREF_MODAL, open}));\n  }\n\n  public CustomIcon = (iconProps: StepIconProps) => {\n    const { theme, config } = this.props;\n    const { icon, active } = iconProps;\n\n    const useWhite: boolean = config.getIn(['layout', 'useWhite'], false);\n    const fill = useWhite\n      ? '#FFF'\n      : !active\n        ? grey[600]\n        : theme.palette.primary.main\n    return icon === 1\n    ? <AtsSvgStep1 fill={fill }/>\n    : <AtsSvgStep2 fill={fill }/>\n  }\n\n  public render() {\n    const {\n      classes,\n      theme,\n      currentStepCount = 0,\n      config,\n      dispatch,\n      regionsList,\n      selectedRegion,\n      domain,\n      t,\n    } = this.props;\n    const isCanadianDomain = domain.includes('franke-xref-ca') || domain.includes('osb-xref-ca') || domain.includes('xref.osb.ca');\n    const steps = this.getSteps();\n    const appId = config.getIn(['atsApiOptions', 'apiKey']);\n    const homeLink = isCanadianDomain ? config.getIn(['linkProps', 'homeCA']) || '#' : config.getIn(['linkProps', 'home']) || '#';\n    const disableRegionSelection = config.get('disableRegionSelection');\n\n    const orientation: Orientation = config.getIn(['layout', 'orientation'], 'vertical');\n    const noBreadcrumb: boolean = config.getIn(['layout', 'noBreadcrumb'], false);\n    const noMainToolTitle: boolean = config.getIn(['layout', 'noMainToolTitle'], false);\n    const headerBackgroundColor: string = config.getIn(['layout', 'headerBackgroundColor'], 'inherit');\n    const stepperConnecterColor: string = config.getIn(['layout', 'stepperConnecterColor'], 'inherit');\n    const useWhite: boolean = config.getIn(['layout', 'useWhite'], false);\n    const customHeaderImage = config.getIn(['layout', 'customHeaderImage']);\n    const displayContactUsInHeader: boolean = config.getIn(['layout', 'displayContactUsInHeader'], false);\n    const hideLocationSelector: boolean = config.getIn(['layout', 'hideLocationSelector'], false);\n\n    const isWatts = appId === WATTS_XREF_ID;\n    const isAoSmith = appId === AOSMITH_XREF_ID;\n    const isLochinvar = appId === LOCHINVAR_XREF_ID;\n    const isDelta = appId === DELTA_COMMERCIAL_XREF_ID;\n    const isHaws = appId === HAWS_XREF_ID;\n    const isOSB = appId === OSB_XREF_ID;\n    const isBemis = appId === BEMIS_XREF_ID;\n    const isContrac = appId === CONTRAC_XREF_ID;\n    const selectOnChange = e => {\n      const newId = e.target.value;\n      const location = fromJS({country: {id: newId}});\n      dispatch(new SetSelectedRegion({region: location}));\n\n      // If the URL currently has a /location/ segment, keep it in sync with the selected region.\n      const w = window as any;\n      const currentLocationId: string | undefined = w.__LOCATION_ID__;\n      if (currentLocationId) {\n        const idToSegment: { [key: string]: string } = { '6251999': 'ca', '6252001': 'us' };\n        const newSegment = idToSegment[newId];\n        const oldSegment: string | undefined = w.__LOCATION_SEGMENT__;\n        const localePrefix: string = w.__LOCALE_PREFIX__ || '';\n        const localeSegment = localePrefix.split('/')[1];\n        if (newSegment && oldSegment && localeSegment) {\n          const newPath = window.location.pathname.replace(\n            new RegExp('^/' + localeSegment + '/' + oldSegment + '(/|$)'),\n            '/' + localeSegment + '/' + newSegment + '$1'\n          );\n          w.__LOCATION_ID__ = newId;\n          w.__LOCATION_SEGMENT__ = newSegment;\n          w.__LOCALE_PREFIX__ = '/' + localeSegment + '/' + newSegment;\n          window.history.replaceState({}, '', newPath + window.location.search + window.location.hash);\n        }\n      }\n    };\n    const flags = {\n      US: usFlag,\n      CA: caFlag\n    };\n\n    const regionsListAndSpecOrPtLocation = siteName => {\n      if (!this.defaults()[siteName]) {\n        return regionsList;\n      }\n      const id = this.defaults()[siteName].getIn(['country', 'id']);\n      const isRegionInRegionList = Boolean(regionsList.find(x => x.get('id') === id));\n      if (isRegionInRegionList) {\n        return regionsList;\n      }\n      const label = this.defaults()[siteName].getIn(['country', 'value']);\n      return regionsList.push(fromJS({id, label, isDefault: false}));\n    }\n\n    return (\n      <Grid\n        className={classes.fullWidth}\n        container={true}\n        direction='column'\n        alignItems='center'\n      >\n        <ConditionalPaper orientation={orientation} config={config}>\n          <Grid\n            item={true}\n            container={true}\n            sm={12}\n            md={9}\n            className={classes.content}\n            direction='column'\n            style={{\n              color: useWhite ? 'white' : 'inherit',\n              backgroundColor: headerBackgroundColor,\n            }}\n          >\n            <Grid container={true} alignItems='center' justify='space-between' wrap='nowrap'>\n              <Grid container={true} justify='flex-start'>\n                {\n                  (noBreadcrumb || isWatts || isAoSmith || isLochinvar || isDelta || isHaws || isOSB || isContrac) ?  null : <XrefBreadcrumb\n                    homeLink={homeLink}\n                    appId={appId}\n                    orientation={orientation}\n                  />\n                }\n              </Grid>\n              <Grid container={true} wrap='nowrap' alignItems='center' justify='flex-end'>\n                {\n                  displayContactUsInHeader && <>\n                    <LocaleSelector />\n                    <Button color='inherit' onClick={() => this.requestXrefOpen(true)} startIcon={<Mail />} style={{ marginLeft: 16}}>\n                      { t('CrossReference.contactUs') }\n                    </Button>\n                  </>\n                }\n              </Grid>\n            </Grid>\n\n            <Grid container={true} className={orientation === 'horizontal' ? classes.horizontalHeader : classes.verticalHeader}>\n              {\n                (noMainToolTitle || isWatts || isAoSmith || isLochinvar || isDelta || isHaws || isOSB || isContrac) ? null : <Header\n                  orientation={orientation}\n                  customHeaderImage={customHeaderImage}\n                  config={config}\n                />\n              }\n              {(hideLocationSelector || isDelta) ? null\n              : <Select\n                  value={selectedRegion.getIn(['country', 'id']) || ''}\n                  onChange={selectOnChange}\n                  disabled={disableRegionSelection}\n                  input={\n                    <Input classes={{\n                      underline: useWhite ? classes.useWhite : '',\n                    }}/>\n                  }\n                  classes={{\n                    selectMenu: classes.flexAlign,\n                    icon: useWhite ? classes.useWhite : disableRegionSelection ? classes.disabledregionSelectionArrow : '',\n                  }}\n                >\n                  {regionsListAndSpecOrPtLocation(this.props.site).map((region, i) => <MenuItem className={classes.flexAlign} key={i} value={region.get('id')}>\n                      <img className={classes.flag} src={flags[region.get('id') && COUNTRIES_OBJECT[region.get('id')].iso_alpha2]} />\n                      {region.get('id') && COUNTRIES_OBJECT[region.get('id')].iso_alpha2}\n                    </MenuItem>\n                  )}\n                </Select>\n              }\n            </Grid>\n            <Grid item={true}>\n              <Stepper\n                activeStep={currentStepCount}\n                orientation={orientation}\n                classes={{\n                  root: classes.stepper,\n                }}\n                connector={<StepConnector classes={{ line: useWhite ? classes.useWhite : ''}} />}\n              >\n                {steps.map((label, index) => {\n                  return (\n                    <Step key={label}>\n                      <StepLabel\n                        active={currentStepCount === index}\n                        StepIconComponent={orientation === 'horizontal' ? this.CustomIcon : undefined}\n                        classes={{\n                          iconContainer: classes.iconContainer,\n                          ...(orientation === 'horizontal' && {\n                            root: classnames(classes.label, classes.uppercase),\n                          })\n                        }}\n                        StepIconProps={{\n                          classes: {\n                            text: classnames({\n                              [classes.stepIcontext]: true,\n                              [classes.uppercase]: orientation === 'horizontal',\n                            }),\n                          },\n                        }}\n                      >\n                        <Typography variant='subtitle2' style={{ color: useWhite ? 'white' : 'inherit', fontWeight: 'inherit' }}>{label}</Typography>\n                      </StepLabel>\n                      {\n                        orientation === 'vertical' && (\n                          <StepContent\n                            classes={{\n                              root: classes.stepContent,\n                            }}\n                          >\n                            <Grid>{this.getStepContent(index)}</Grid>\n                          </StepContent>\n                        )\n                      }\n                    </Step>\n                  );\n                })}\n              </Stepper>\n            </Grid>\n          </Grid>\n        </ConditionalPaper>\n        {\n          orientation === 'horizontal' && (\n            <Grid\n              item={true}\n              container={true}\n              md={9}\n              sm={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n                className={classes.content}\n              >\n                {this.getStepContent(currentStepCount)}\n              </Grid>\n            </Grid>\n          )\n        }\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  content: {\n    padding: theme.spacing(4),\n  },\n  iconContainer: {\n    transform: 'scale(1.5)',\n    marginRight: theme.spacing(1),\n  },\n  stepIcontext: {\n    fontSize: '0.580em'\n  },\n  stepContent: {\n    paddingLeft: theme.spacing() * 4.5,\n  },\n  title: {\n    marginLeft: theme.spacing(2),\n  },\n  stepper: {\n    background: 'inherit',\n    padding: 0,\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  label: {\n    ...theme.typography.body1,\n    color: 'inherit',\n  },\n  uppercase: {\n    textTransform: 'uppercase',\n  },\n  customIcon: {\n    width: 20,\n  },\n  flexAlign: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  flag: {\n    height: '1em',\n    marginRight: theme.spacing(0.5)\n  },\n  verticalHeader: {\n    flexDirection: 'column',\n    alignItems: 'flex-end'\n  },\n  horizontalHeader: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    flexWrap: 'nowrap'\n  },\n  disabledregionSelectionArrow: {\n    color: theme.palette.action.disabled\n  },\n  useWhite: {\n    color: theme.palette.common.white,\n    borderColor: theme.palette.common.white,\n    '&:before': {\n      borderBottomColor: theme.palette.common.white,\n    },\n    '&:after': {\n      borderBottomColor: theme.palette.common.white,\n    },\n    '&:hover:not(.Mui-disabled):before': {\n      borderBottomColor: theme.palette.common.white,\n    },\n  }\n});\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ICrossReferencePageTypeComponentProps) => {\n  return createStructuredSelector({\n    modalProps: makeSelectOverlayComponentProp(MODAL_ID),\n    currentStepCount: makeSelectOverlayComponentContent(XREF_REF_STEPPER),\n    config: makeSelectConfig(),\n    loadingCompetitorsProducts: makeSelectGetCompetitorProductsLoading(),\n    regionsList: makeSelectRegionsList(),\n    selectedRegion: makeSelectSelectedRegion(),\n    ptRegion: makeSelectPTXrefLocation(),\n    specRegion: makeSelectLocationForSeriesSearchFilter({useXrefLogic: true}),\n    site: makeSelectSite(),\n    domain: makeSelectDomain()\n  })(originalState);\n}\n\n\nexport default compose<React.ComponentClass<ICrossReferencePageTypeComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps),\n)(CrossReferencePage);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Button,\n  AppBar,\n  Toolbar,\n  IconButton,\n  Typography,\n  PropTypes,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ToggleOverlayComponentAction,\n} from '../../modules/ApplicationModule/actions';\nimport CrossReferenceStepper from '../../containers/CrossReferenceStepper';\nimport {\n  ControlledModal,\n} from '../../components';\nimport { XrefData } from '../../models';\nimport RequestCrossReference, { REQUEST_XREF_MODAL  } from '../../components/RequestCrossReference';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { connect } from 'react-redux';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { makeSelectConfigUiOverridesAppBarColor } from '../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\n\nexport const MODAL_ID = '__CROSS_REFERENCE_MODAL__';\n\nexport interface IModalProps {\n  searchTerm?: string;\n  onXrefProductSelected?: (xrefData: IMap<XrefData>) => void;\n}\n\ninterface ICrossReferencePageComponentProps {\n}\n\ninterface ICrossReferencePageProps extends InjectedFormProps {\n  open: boolean;\n  appBarColor: PropTypes.Color;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype CrossReferencePageType = WithTranslation & ICrossReferencePageComponentProps & ICrossReferencePageProps & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\nclass CrossReferencePage extends React.Component<CrossReferencePageType, {}> {\n  public state = {\n    retry: 0,\n  };\n\n  public toggleModal = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: MODAL_ID\n    }))\n\n  };\n\n  public toggleRequestModal = () => {\n    const {\n      dispatch,\n      amplitudeData,\n    } = this.props;\n    amplitude.logEvent(AMPLITUDE_EVENT.xrefClickOnRequestCrossReferenceButton, amplitudeData());\n    dispatch(new ToggleOverlayComponentAction({\n      id: REQUEST_XREF_MODAL\n    }))\n\n  };\n\n  public render() {\n    const {\n      classes,\n      appBarColor,\n      t\n    } = this.props;\n\n    return (\n      <ControlledModal\n        localKey={MODAL_ID}\n        fullScreen={true}\n      >\n        <AppBar className={classes.appBar} color={appBarColor ?? 'primary'}>\n          <Toolbar>\n            <IconButton color='inherit' onClick={this.toggleModal} aria-label='Close'>\n              <CloseIcon />\n            </IconButton>\n            <Typography variant='h6' color='inherit' className={classes.flex}>\n              {t('formButtons.close')}\n            </Typography>\n            <Button color='inherit' onClick={this.toggleRequestModal}>\n              <FontAwesomeIcon icon='envelope' className={classes.envelope}/>\n              {t('CrossReference.requestCrossReference')}\n            </Button>\n          </Toolbar>\n        </AppBar>\n        <Grid>\n          <CrossReferenceStepper/>\n        </Grid>\n        <RequestCrossReference />\n      </ControlledModal>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  appBar: {\n    position: 'relative',\n  },\n  flex: {\n    flex: 1,\n  },\n  envelope: {\n    marginRight: theme.spacing() * 2\n  }\n});\n\nconst mapStateToProps = createStructuredSelector({\n  appBarColor: makeSelectConfigUiOverridesAppBarColor()\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ICrossReferencePageComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n)(CrossReferencePage);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { IMap } from 'ats-utils/src';\nimport { Option, Manufacturer, SearchArgs, Category, PureAttribute } from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n  initialize\n} from 'redux-form';\nimport { GetManufacturersAction, GetBrandRepCategoriesAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectToolSpecificManufacturers, makeSelectCategory } from '../../../modules/AccountModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nexport const ATTRIBUTES_LIST_FILTER_FORM = 'AttributesListFilters';\n\ninterface IAttributesListFilterComponentProps {\n  open: boolean;\n  form?: string;\n  options: Option<PureAttribute>;\n  toggleDrawer: () => void;\n  setSearchArgsAndSearch: (arg: SearchArgs<PureAttribute>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IAttributesListFilter extends IAttributesListFilterComponentProps {\n  formValues: Map<string, any>;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  dispatch: Dispatch<IAction>;\n  getManufacturers: () => void;\n  getCategories: () => void;\n}\n\ntype IAttributesListFilterType = IAttributesListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass AttributesListFilter extends React.Component<IAttributesListFilterType> {\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      getManufacturers,\n      getCategories,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      getManufacturers();\n      getCategories();\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    } else if (!formValues && prevProps.formValues) {\n      this.handleResetForm();\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const manufacturer = ctx.get('manufacturerId');\n        const category = ctx.get('categoryId');\n\n        if (manufacturer) {\n          manufacturer.getIn(['eq', 'value'])\n            ? ctx.setIn(['manufacturerId', 'eq'], manufacturer.getIn(['eq', 'id']))\n            : ctx.delete('manufacturerId');\n        }\n        if (category) {\n          category.getIn(['eq', 'value'])\n            ? ctx.setIn(['categoryId', 'eq'], category.getIn(['eq', 'id']))\n            : ctx.delete('categoryId');\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List());\n\n        const filters = valuesWithParsedKeys.size\n          ? { 'and': valuesWithParsedKeys.toJS() }\n          : {};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        ATTRIBUTES_LIST_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(ATTRIBUTES_LIST_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      handleSubmit,\n      manufacturers,\n      categories,\n      uniqueKey,\n      t,\n    } = this.props;\n\n    return (\n      <Drawer\n        className={classes.drawer}\n        classes={{\n          paper: classes.drawerPaper,\n        }}\n        variant='persistent'\n        anchor='right'\n        open={open}\n        style={{ width: open ? 'initial' : 0}}\n      >\n        <form\n          key={uniqueKey}\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          {/* Header */}\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('generalListFilter.title')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              item={true}\n              xs={5}\n            >\n              <Button\n                color='primary'\n                onClick={this.handleResetForm}\n              >\n                {t('generalListFilter.reset')}\n              </Button>\n              <IconButton\n                onClick={toggleDrawer}\n              >\n                <CloseIcon />\n              </IconButton>\n            </Grid>\n          </Grid>\n\n          {/* Content */}\n          <Grid\n            item={true}\n            className={classes.content}\n          >\n            {/* Manufacturer */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.manufacturer')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='manufacturerId.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: manufacturers.toJS(),\n                      placeholder: t('pimProductList.selectManufacturer'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Category */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.category')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='categoryId.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: categories.toJS(),\n                      placeholder: t('pimProductList.selectCategory'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n          </Grid>\n        </form>\n      </Drawer>\n    );\n  }\n}\n\nconst DRAWER_MAX_WIDTH = 370;\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: `${DRAWER_MAX_WIDTH}px`\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflowY: 'auto',\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16),\n  },\n});\n\nconst mapStateToProps = (state, ownProps: IAttributesListFilterComponentProps) => {\n  const form = ownProps.form != null ? ownProps.form : ATTRIBUTES_LIST_FILTER_FORM;\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      manufacturers: makeSelectToolSpecificManufacturers(),\n      categories: makeSelectCategory(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetBrandRepCategoriesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IAttributesListFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: ATTRIBUTES_LIST_FILTER_FORM }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(AttributesListFilter);\n","import * as React from 'react';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\nimport {AclRoles} from '../../../models';\nimport {useSelector} from 'react-redux';\nimport {makeSelectUserRole} from '../../../modules/AtsModule/selectors';\nimport {List} from 'immutable';\n\ninterface ICustomActionButtonComponentProps {\n  toggleCreateOverrideModeAction?: (reset?: boolean) => void;\n  editAction: () => void;\n  deleteAction?: () => void;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation;\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    toggleCreateOverrideModeAction,\n    editAction,\n    deleteAction,\n    t,\n  } = props;\n  const userRoles = useSelector(makeSelectUserRole()) || List();\n  const isATSUser = userRoles.includes(AclRoles.ATS_USER);\n\n  return (\n    <>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n          <Tooltip title={toggleCreateOverrideModeAction ? t('pimAttributesList.toggleCreateOverrideIconTooltip') : ''}>\n            <span>\n            <IconButton disabled={!toggleCreateOverrideModeAction} onClick={(e) => {e.stopPropagation(); toggleCreateOverrideModeAction();}}>\n                <LocalOfferIcon fontSize='small' />\n              </IconButton>\n            </span>\n          </Tooltip>\n          <Tooltip title={editAction ? t('formButtons.edit') : t('pimAttributesList.pleaseContactForAccess')}>\n            <span>\n              <IconButton disabled={!editAction} onClick={(e) => {e.stopPropagation(); editAction();}}>\n                <EditIcon fontSize='small' />\n              </IconButton>\n            </span>\n          </Tooltip>\n          {\n            isATSUser ? null : <Tooltip title={deleteAction ? t('formButtons.delete') : t('pimAttributesList.pleaseContactForAccess')}>\n            <span>\n              <IconButton disabled={!deleteAction} onClick={(e) => { e.stopPropagation(); deleteAction(); }}>\n                <DeleteIcon fontSize='small' />\n              </IconButton>\n            </span>\n            </Tooltip>\n          }\n        </Grid>\n      </TableCell>\n    </>\n  );\n};\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n)(CustomActionButton);","import * as React from 'react';\nimport {\n  TableCell,\n  useTheme,\n} from '@material-ui/core';\nimport { AtsSvgAtsLogo } from '../../../components/AtsSvg/AtsSvgAtsLogo';\n\ninterface IAtsAttributeCellProps {\n  isAtsAttribute: boolean;\n}\n\nconst AtsAttributeCell: React.FC<IAtsAttributeCellProps> = (props) => {\n  const theme = useTheme();\n\n  return (\n    <TableCell style={{ textAlign: 'center' }}>\n      { props.isAtsAttribute && <AtsSvgAtsLogo color={theme.palette.primary.main} /> }\n    </TableCell>\n  );\n};\n\nexport default AtsAttributeCell;\n","import * as React from 'react';\nimport {\n  FormHelperText,\n  Input,\n  Link,\n  TableCell,\n  Tooltip,\n  Typography\n} from '@material-ui/core';\nimport styled from 'styled-components';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { useTranslation } from 'react-i18next';\nimport { makeSelectIsCreatingAttribute } from '../../../modules/PimModule/selectors';\nimport { useSelector } from 'react-redux';\n\nconst useStyles = makeStyles((theme) => ({\n  link: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    maxWidth: 268,\n  },\n  reactRouterLink: {\n    color: theme.palette.primary.main\n  },\n  icon: {\n    position: 'absolute',\n    left: -12,\n  },\n  input: {\n    width: '100%'\n  }\n}));\ninterface IAttributeNameCellComponentProps {\n  name: string;\n  linkPath: string;\n  parentAttributeName: string;\n  hasParent: boolean;\n  isCreatingOverride: boolean;\n  nameExists: boolean;\n  overrideName: string;\n  setOverrideName: (e: any) => void;\n}\n\nconst AttributeNameCell: React.FC<IAttributeNameCellComponentProps> = (props) => {\n  const {\n    name,\n    parentAttributeName,\n    hasParent,\n    linkPath,\n    isCreatingOverride,\n    nameExists,\n    overrideName,\n    setOverrideName,\n  } = props;\n\n  const classes = useStyles();\n  const {t} = useTranslation('translations');\n  const isCreatingAttribute = useSelector(makeSelectIsCreatingAttribute());\n\n  return (\n    <StyledTableCell>\n      {\n        isCreatingOverride\n          ? (\n              <>\n                <Tooltip title={parentAttributeName || name || ''}>\n                  <InfoIcon color='action' className={classes.icon} />\n                </Tooltip>\n                <Input\n                  value={overrideName}\n                  disabled={isCreatingAttribute}\n                  placeholder={t('pimAttributesList.attributeNameInputPlaceholder')}\n                  className={classes.input}\n                  onChange={setOverrideName}\n                />\n                { nameExists && <FormHelperText error={nameExists}>{t('pureAttributeDialog.attributeExistsError')}</FormHelperText> }\n              </>\n            )\n          : (\n              <>\n                {\n                  hasParent && (\n                    <Tooltip title={parentAttributeName || ''}>\n                      <InfoIcon color='action' className={classes.icon} />\n                    </Tooltip>\n                  )\n                }\n                <div className={classes.link}>\n                  <Tooltip\n                    title={name || ''}\n                    placement='bottom-start'\n                  >\n                    <span>\n                      <ReactRouterLink to={linkPath} target='_blank' className={classes.reactRouterLink}>\n                        {name || ''}\n                      </ReactRouterLink>\n                    </span>\n                  </Tooltip>\n                </div>\n              </>\n            )\n      }\n    </StyledTableCell>\n  );\n};\n\nconst Cell = ({ ...props }) => (\n  <TableCell {...props} />\n);\n\nconst StyledTableCell = styled(Cell)`\n  max-width: 300px;\n  position: relative;\n`;\nexport default AttributeNameCell;\n","import * as React from 'react';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport CheckIcon from '@material-ui/icons/Check';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport { useSelector } from 'react-redux';\nimport { makeSelectIsCreatingAttribute } from '../../../modules/PimModule/selectors';\n\ninterface ICreateOverrideCellComponentProps {\n  disabledCreateTooltip?: string;\n  createOverride: () => void;\n  toggleCreateOverrideModeAction: () => void;\n}\n\nexport interface ICreateOverrideCellProps extends ICreateOverrideCellComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CreateOverrideCellProps = ICreateOverrideCellProps & WithTranslation;\n\nconst CreateOverrideCell: React.FC<CreateOverrideCellProps> = (props) => {\n  const {\n    disabledCreateTooltip,\n    createOverride,\n    toggleCreateOverrideModeAction,\n    t,\n  } = props;\n\n  const isCreatingAttribute = useSelector(makeSelectIsCreatingAttribute());\n\n  return (\n    <>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n          <Tooltip title={t('formButtons.cancel')}>\n            <span>\n              <IconButton disabled={isCreatingAttribute} onClick={(e) => {e.stopPropagation(); toggleCreateOverrideModeAction();}}>\n                <ClearIcon fontSize='small' />\n              </IconButton>\n            </span>\n          </Tooltip>\n          {\n            isCreatingAttribute\n              ? <CircularProgress size='1.5em' />\n              : <Tooltip title={disabledCreateTooltip ? disabledCreateTooltip : t('formButtons.create')}>\n                  <span>\n                    <IconButton disabled={Boolean(disabledCreateTooltip)} onClick={(e) => { e.stopPropagation(); createOverride(); }}>\n                      <CheckIcon fontSize='small' />\n                    </IconButton>\n                  </span>\n                </Tooltip>\n          }\n        </Grid>\n      </TableCell>\n    </>\n  );\n};\n\nexport default compose<React.ComponentClass<ICreateOverrideCellComponentProps>>(\n  withTranslation('translations'),\n)(CreateOverrideCell);","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  debounce\n} from 'lodash';\nimport NotFound from '../../../src/components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport emptyPimAttributesList from '../../images/project.svg';\nimport AttributesListFilter, { ATTRIBUTES_LIST_FILTER_FORM } from './AttributesListFilter';\nimport { Option, TableColumn, SearchArgs, Filter, PureAttribute, PureName, Attribute, AuthObject} from '../../models';\nimport { DeleteModal, TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport ToolBar from '../../components/ToolBar';\nimport { LinkCell, TextCell } from '../../components/_CellRenderers';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport { makeSelectIsSearchingPureAttributes, makeSelectPureAttributes, makeSelectPureAttributesCount } from '../../modules/PimModule/selectors';\nimport { CreatePureAttributeThenSearchPureAttributesAction, DeleteAttributeByIdThenSearchAttributesAction, SearchAllAttributesAction, SetIsSearchingAllAttributesAction, SetSelectedPureAttributeAction } from '../../modules/PimModule/actions';\nimport TagPopper from './TagPopper';\nimport DropDownCell, { DROPDOWN_CELL_DATATYPE } from './_CustomCellRenderers/DropDownCell';\nimport AttributeDialog, { ATTRIBUTE_DIALOG_ID } from './AttributeDialog';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectCanManageAttributeManagement, makeSelectIdentityObject, makeSelectUserIsAtsUser } from '../../modules/AtsModule/selectors';\nimport {\n  selectBrandRep,\n  selectBrandRepCategoryByManufacturer,\n  selectBrandRepManufacturerByCategory\n} from '../../modules/AccountModule/selectors';\nimport AttributeTag from '../../models/AttributeTag';\nimport {GetBrandRepAction} from '../../modules/AccountModule/actions';\nimport { AMPLITUDE_EVENT, NOT_FOUND_PATH } from '../../constants';\nimport { push } from 'connected-react-router';\nimport AtsAttributeCell from './_CustomCellRenderers/AtsAttributeCell';\nimport AttributeNameCell from './_CustomCellRenderers/AttributeNameCell';\nimport { AtsApiCallAction } from '../../modules/AtsModule/actions';\nimport CreateOverrideCell from './_CustomCellRenderers/CreateOverrideCell';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\n\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<PureAttribute> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\nexport const constructFilters = (searchTerm: string, filters: Filter) => {\n  if (!searchTerm && !filters?.and) {\n    return {};\n  }\n\n  const constructedfilters: any = { 'and': [] };\n\n  if (searchTerm) {\n    constructedfilters.and.push({\n      'attribute.name': {\n        'like': searchTerm\n      }\n    });\n  }\n  if (filters?.and) {\n    constructedfilters.and.push(...filters.and);\n  }\n\n  return constructedfilters;\n};\n\ninterface IPimAttributesListPageComponentProps {\n}\n\ninterface IPimAttributesListPageProps extends IPimAttributesListPageComponentProps {\n  dispatch: (s: IAction) => void;\n  searchPureAttributes: (options: Option<PureAttribute>, filters?: Filter) => void;\n  openDialog: (dialogProps?: object) => void;\n  pureAttributes: Map<number, IMap<PureAttribute>>;\n  pureAttributesCount: number;\n  searchingPureAttributes: boolean;\n  theme: Theme;\n  t: (key: string) => string;\n  getBrandRep: () => void;\n  categoryByManufacturer: {[index: string]: number[] | null};\n  manufacturerByCategory: {[index: string]: number[] | null};\n  canManageAttributeManagement: boolean;\n  identityObject: IMap<AuthObject>;\n  isAtsUser: boolean;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[200],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  }\n});\n\ntype IPimAttributesListPage = IPimAttributesListPageProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  // anchorEl: HTMLElement;\n  page: number;\n  searchTerm: string;\n  openFilterDrawer: boolean;\n  options: Option<PureAttribute>;\n  filters: Filter;\n  tagAnchorEl: any;\n  tagValueArray: string[];\n  openDeleteModal: boolean;\n  selectedAttribute: IMap<PureAttribute>;\n  attributeIdForOverride: number;\n  overrideName: string;\n  isValidating: boolean;\n  nameExists: boolean;\n  attributesListFilterUniqueKey: any;\n}\n\nclass PimAttributesListPage extends React.Component<IPimAttributesListPage, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  public validateAttribute = debounce((_name: string) => {\n    const { dispatch } = this.props;\n    this.setState({ isValidating: true });\n    dispatch(new AtsApiCallAction(\n      {\n        payload: {\n          service: 'pim',\n          endpoint: 'searchAllAttributes',\n          body: {\n            filters: {\n              'attribute.name': {\n                'eq': _name?.trim()\n              }\n            }\n          }\n        },\n      },\n      (apiResp) => {\n        if (!apiResp.err) {\n          const immutableResp = fromJS(apiResp);\n          const _exists: boolean = immutableResp.getIn(['data', 'payload', 'pim', 'count']);\n          this.setState({ nameExists: Boolean(_exists) });\n          if (_exists) {\n            // dispatch(stopSubmit(ATTRIBUTE_DIALOG_ID, { name: t('pureAttributeDialog.attributeExistsError') }));\n            // dispatch(touch(ATTRIBUTE_DIALOG_ID, 'name'));\n          } else {\n            // dispatch(clearSubmitErrors(ATTRIBUTE_DIALOG_ID));\n            // if (!selectedAttribute?.has('id') && !steps) {\n            //   setSteps(1);\n            // }\n          }\n        }\n        this.setState({ isValidating: false });\n      },\n    ));\n  }, 500);\n\n  constructor(props: IPimAttributesListPage) {\n    super(props);\n    this.state = {\n      columnsToDisplay: [\n        { id: 'ATS Attribute', label: 'pimAttributesList.atsAttributeColumLabel', path: ['parentAttributeName'], display: true, sortable: true, style: { textAlign: 'center' } },\n        { id: 'Attribute', label: 'pimAttributesList.attributeColumnLabel', path: ['name'], display: true, sortable: true },\n        { id: 'Key', label: 'pimAttributesList.keyColumnLabel', path: ['key'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'pimAttributesList.manufacturerColumnLabel', path: ['tags'], display: true, sortable: true },\n        { id: 'Category', label: 'pimAttributesList.categoryColumnLabel', path: ['tags'], display: true, sortable: true },\n        { id: 'Actions', label: 'pimAttributesList.actionsColumnLabel', display: true, sortable: true, style: { textAlign: 'center' } },\n      ],\n      openFilterDrawer: false,\n      page: 0,\n      searchTerm: '',\n      filters: null,\n      options: defaultOptions,\n      tagAnchorEl: null,\n      tagValueArray: [],\n      openDeleteModal: false,\n      selectedAttribute: Map() as IMap<PureAttribute>,\n      attributeIdForOverride: null,\n      overrideName: '',\n      isValidating: false,\n      nameExists: false,\n      attributesListFilterUniqueKey: '',\n    };\n  }\n\n  public componentDidMount() {\n    const { searchPureAttributes, getBrandRep } = this.props;\n    const { options } = this.state;\n    searchPureAttributes(options);\n    getBrandRep();\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      pureAttributes,\n      pureAttributesCount,\n      searchingPureAttributes,\n      canManageAttributeManagement,\n      identityObject,\n    } = this.props;\n    const { options, attributeIdForOverride } = this.state;\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no pureAttribute returned\n    if (prevProps.pureAttributes.size && pureAttributes.size === 0 && pureAttributesCount) {\n      const newPage = Math.floor(pureAttributesCount / options.limit) - (pureAttributesCount < options.limit ? 0 : 1);\n      const newOffset = options.limit * newPage;\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: newOffset\n        },\n        page: newPage\n      });\n    }\n\n    if (identityObject && !canManageAttributeManagement) {\n      this.props.dispatch(push(NOT_FOUND_PATH));\n    }\n    if (attributeIdForOverride && !searchingPureAttributes && prevProps.searchingPureAttributes) {\n      this.setState({\n        attributeIdForOverride: null,\n        overrideName: '',\n        isValidating: false,\n        nameExists: false,\n      });\n    }\n  }\n\n  public handleCreateOverride = (parentId: number) => {\n    const { dispatch, amplitudeData } = this.props;\n    const { options, filters, overrideName } = this.state;\n\n    const sendAmplitude = (newAttribute) => {\n      amplitude.logEvent(AMPLITUDE_EVENT.pureAttributeCreated, amplitudeData({\n        attributeName: newAttribute.get('name'),\n        attributeId: newAttribute.get('id'),\n        isOverride: newAttribute.get('parentId') !== null ? true : false\n      }));\n    };\n    dispatch(new CreatePureAttributeThenSearchPureAttributesAction({\n      pureAttribute: fromJS({ name: overrideName?.trim(), parentId }),\n      filters,\n      options,\n      sendAmplitude\n    }));\n  }\n\n  public handleOverrideOnChange = (e: any) => {\n    const newOverrideName = e.target.value;\n    this.setState({ overrideName: newOverrideName });\n    this.validateAttribute(newOverrideName);\n  }\n\n  public handleToggleCreateOverrideMode = (pureAttribute?: IMap<PureAttribute>) => {\n    this.setState({\n      attributeIdForOverride: pureAttribute?.get('id') ?? null,\n      overrideName: '',\n      isValidating: false,\n      nameExists: false,\n    });\n  }\n\n  public handleEdit = (pureAttribute: IMap<PureAttribute>) => {\n    const {\n      dispatch,\n      openDialog,\n      amplitudeData\n    } = this.props;\n\n    dispatch(new SetSelectedPureAttributeAction({ pureAttribute }));\n    openDialog({\n      sendAmplitude: (updatedAttribute) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pureAttributeUpdated, amplitudeData({\n          attributeName: updatedAttribute.get('name'),\n          attributeId: updatedAttribute.get('id'),\n          isOverride: updatedAttribute.get('parentId') !== null ? true : false,\n          originalAttributeName: pureAttribute.get('name')\n        }));\n      }\n    });\n  }\n\n  public handleDelete = () => {\n    const { dispatch } = this.props;\n    const {\n      // selectedSeries,\n      selectedAttribute,\n      options,\n      filters,\n      searchTerm,\n    } = this.state;\n\n    const _filters: any = searchTerm\n      ? {\n          'and': [\n            {\n              'attribute.name': {\n                'like': searchTerm\n              }\n            }\n          ]\n        }\n      : filters;\n    (filters && searchTerm) && _filters.and.push(...(filters as any).and); // tslint:disable-line\n\n    this.setState({ openDeleteModal: false });\n    dispatch(new SetIsSearchingAllAttributesAction({ isSearching: true }));\n    dispatch(new DeleteAttributeByIdThenSearchAttributesAction({\n      attributeId: selectedAttribute.get('id'),\n      filters: _filters,\n      options\n    }));\n  }\n\n  public openDeleteModal = (selectedAttribute: IMap<PureAttribute>) => {\n    this.setState({\n      openDeleteModal: true,\n      selectedAttribute\n    });\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<PureAttribute>) => {\n    const {\n      searchPureAttributes\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        const filters: Filter = constructFilters(this.state.searchTerm, this.state.filters);\n        searchPureAttributes(\n          this.state.options,\n          filters,\n        );\n      }\n    );\n  }\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddAttribute = () => {\n    const {\n      openDialog,\n      amplitudeData\n    } = this.props;\n    openDialog({\n      sendAmplitude: (newAttribute) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pureAttributeCreated, amplitudeData({\n          attributeName: newAttribute.get('name'),\n          attributeId: newAttribute.get('id'),\n          isOverride: newAttribute.get('parentId') !== null ? true : false\n        }));\n      }\n    });\n  }\n  public getTags = (pureAttribute: IMap<PureAttribute>, key: 'manufacturer' | 'category') => {\n    const { categoryByManufacturer, manufacturerByCategory } = this.props;\n    const filteredTags = pureAttribute.get('tags')?.filter((tag) => {\n      const _manufacturerId = tag.getIn(['manufacturer', 'id']);\n      const _categoryId = tag.getIn(['category', 'id']);\n      return (\n          categoryByManufacturer[_manufacturerId] === null ||\n          (Array.isArray(categoryByManufacturer[_manufacturerId]) && categoryByManufacturer[_manufacturerId].includes(_categoryId)) ||\n          manufacturerByCategory[_categoryId] === null ||\n          (Array.isArray(manufacturerByCategory[_categoryId])) && manufacturerByCategory[_categoryId].includes(_manufacturerId)\n      );\n    });\n    const result = filteredTags?.reduce((map, tag) => {\n      if (!map.get(tag.getIn([key, 'id']))) {\n        const id = tag.getIn([key, 'id']);\n        const name = tag.getIn([key, 'name']);\n        return map.set(id, name);\n      }\n      return map;\n    }, Map())\n        .toIndexedSeq()\n        .toArray() as string[];\n    return result;\n  }\n\n  public handleTagClick = (item: string[]) => (e: any) => {\n    this.setState({\n      tagAnchorEl: e.currentTarget,\n      tagValueArray: item\n    });\n  }\n\n  public handleClickAway = (e) => {\n    const isNotTagRelated = !(e?.target?.attributes?.datatype?.value === DROPDOWN_CELL_DATATYPE || e?.target?.offsetParent?.attributes?.datatype?.value === DROPDOWN_CELL_DATATYPE);\n    isNotTagRelated && this.setState({ tagAnchorEl: null });  // tslint:disable-line\n  }\n\n  public render() {\n    const {\n      classes,\n      pureAttributes,\n      searchingPureAttributes,\n      pureAttributesCount,\n      isAtsUser,\n      t\n    } = this.props;\n    const {\n      searchTerm,\n      filters,\n      options,\n      page,\n      openFilterDrawer,\n      columnsToDisplay,\n      tagValueArray,\n      openDeleteModal,\n      selectedAttribute = Map(),\n      attributeIdForOverride,\n      overrideName,\n    } = this.state;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display);\n\n    const labels = {\n      emptyviewSubtitle: '',\n      emptyviewAddButton: '',\n      emptyviewAlt: t('pimProductList.imageAlt'),\n      emptyviewNotFound: t('pimAttributesList.emptyviewNotFound')\n    };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <ToolBar\n          onClickFilterButton={this.toggleFilterDrawer}\n          onClickFab={this.handleAddAttribute}\n          searchTooltip={t('pimAttributesList.searchTooltip')}\n          handleSubmit={this.handleSubmit}\n          showColumn={false}\n        />\n        <FilterChipsBar\n          filtersFormId={ATTRIBUTES_LIST_FILTER_FORM}\n          setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n          options={options}\n          setUniqueKey={(key) => this.setState({ attributesListFilterUniqueKey: key})}\n        />\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            {searchingPureAttributes\n              ? <NotFound\n                  svgIcon={<LoadingImage />}\n                  firstRow={<LinearProgress color='secondary'/>}\n                  secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n                  paperContainer={true}\n                />\n              : <Paper\n                  className={classes.tableContainer}\n                >\n                  {pureAttributes.size !== 0\n                    ? <>\n                        <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                          <Table>\n                            <TableHead classes={{ root: classes.tableHead }}>\n                              <TableRow>\n                                {filteredColumnsToDisplay.map((header, index) => (\n                                  <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                    {t(header.label)}\n                                  </TableCell>\n                                ))}\n                              </TableRow>\n                            </TableHead>\n                            <TableBody>\n                              {pureAttributes && pureAttributes.map((pureAttribute: IMap<PureAttribute>, index: number) => (\n                                <TableRow id={`${index}`} key={index} hover={true}>\n                                  {pureAttribute && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                    const attributeId = pureAttribute.get('id');\n                                    const manufacturerTags = this.getTags(pureAttribute, 'manufacturer');\n                                    const categoryTags = this.getTags(pureAttribute, 'category');\n                                    const isAtsAttribute = pureAttribute.get('firmId') === null;\n                                    const parentId = pureAttribute.get('parentId');\n                                    const hasParent = parentId !== null;\n                                    const isStandaloneAttribute = !isAtsAttribute && parentId === null;\n                                    const isCreateOverrideMode = attributeIdForOverride === attributeId;\n                                    const overrideParentId = isAtsAttribute ? pureAttribute.get('id') : parentId;\n\n                                    switch (column.id) {\n                                      case 'ATS Attribute': return <AtsAttributeCell key={column.label} isAtsAttribute={isAtsAttribute && !isCreateOverrideMode} />;\n                                      case 'Attribute': return <AttributeNameCell\n                                                                  key={column.label}\n                                                                  hasParent={hasParent}\n                                                                  parentAttributeName={pureAttribute.get('parentAttributeName')}\n                                                                  name={pureAttribute.get('name')}\n                                                                  linkPath={`/attribute/${attributeId}/descriptions/`}\n                                                                  isCreatingOverride={isCreateOverrideMode}\n                                                                  nameExists={this.state.nameExists}\n                                                                  overrideName={overrideName}\n                                                                  setOverrideName={this.handleOverrideOnChange}\n                                                                />;\n                                      case 'Key': return <TextCell key={column.label} text={pureAttribute.getIn(column.path)} />;\n                                      case 'Manufacturer': return <DropDownCell key={column.label} valueArray={manufacturerTags} handleClick={this.handleTagClick} />;\n                                      case 'Category': return <DropDownCell key={column.label} valueArray={categoryTags} handleClick={this.handleTagClick} />;\n                                      case 'Actions': return  isCreateOverrideMode\n                                                                ? <CreateOverrideCell\n                                                                    key={column.label}\n                                                                    disabledCreateTooltip={(this.state.isValidating || this.state.nameExists || !this.state.overrideName?.trim()) ? t('pimAttributesList.disabledCreateOverride') : ''}\n                                                                    createOverride={() => this.handleCreateOverride(overrideParentId)}\n                                                                    toggleCreateOverrideModeAction={() => this.handleToggleCreateOverrideMode()}\n                                                                  />\n                                                                : <CustomActionButton\n                                                                    key={column.label}\n                                                                    toggleCreateOverrideModeAction={(isAtsUser || isStandaloneAttribute) ? null : () => this.handleToggleCreateOverrideMode(pureAttribute)}\n                                                                    editAction={() => this.handleEdit(pureAttribute)}\n                                                                    deleteAction={() => this.openDeleteModal(pureAttribute)}\n                                                                  />;\n                                    }\n                                  })}\n                                </TableRow>\n                              ))}\n                            </TableBody>\n                          </Table>\n                        </div>\n                        <TablePagination\n                          className={classes.pagination}\n                          component='div'\n                          labelRowsPerPage={t('Pagination.rowsPerPage')}\n                          onChangePage={this.handlePageChange}\n                          rowsPerPageOptions={[5, 10, 25, 50]}\n                          onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                          count={pureAttributesCount || 0}\n                          rowsPerPage={options.limit}\n                          page={page}\n                          ActionsComponent={TablePaginationActions}\n                          classes={{\n                            toolbar: classes.paginationToolbar\n                          }}\n                        />\n                      </>\n                    : <EmptyView\n                        image={emptyPimAttributesList}\n                        onButtonClicked={this.handleAddAttribute}\n                        emptyviewSubtitle={labels.emptyviewSubtitle}\n                        emptyviewAddButton={labels.emptyviewAddButton}\n                        emptyviewAlt={labels.emptyviewAlt}\n                        emptyviewNotFound={labels.emptyviewNotFound}\n                      />\n                  }\n                </Paper>\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            <AttributesListFilter\n              toggleDrawer={this.toggleFilterDrawer}\n              open={this.state.openFilterDrawer}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n              uniqueKey={this.state.attributesListFilterUniqueKey}\n              setUniqueKey={(key) => this.setState({ attributesListFilterUniqueKey: key})}\n            />\n          </Grid>\n        </Grid>\n        <TagPopper anchorEl={this.state.tagAnchorEl} valueArray={tagValueArray} onClose={this.handleClickAway}  />\n        <AttributeDialog\n          searchTerm={searchTerm}\n          filters={filters}\n          options={options}\n        />\n        <DeleteModal\n          idToDelete={selectedAttribute.get('id')}\n          open={openDeleteModal}\n          itemName={selectedAttribute.get('name')}\n          toggleDeleteModal={() => this.setState({ openDeleteModal: false })}\n          handleDelete={this.handleDelete}\n          withLoading={false}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getBrandRep: () => {\n      dispatch(new GetBrandRepAction());\n    },\n    searchPureAttributes: (options: Option<PureAttribute>, filters?: Filter) => {\n      dispatch(new SearchAllAttributesAction({\n        options,\n        filters\n      }));\n    },\n    openDialog: (dialogProps?: object) => {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: ATTRIBUTE_DIALOG_ID,\n        props: dialogProps\n      }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: ATTRIBUTE_DIALOG_ID,\n        open: true\n      }));\n    }\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  pureAttributes: makeSelectPureAttributes(),\n  pureAttributesCount: makeSelectPureAttributesCount(),\n  searchingPureAttributes: makeSelectIsSearchingPureAttributes(),\n  categoryByManufacturer: selectBrandRepCategoryByManufacturer,\n  manufacturerByCategory: selectBrandRepManufacturerByCategory,\n  canManageAttributeManagement: makeSelectCanManageAttributeManagement(),\n  identityObject: makeSelectIdentityObject(),\n  isAtsUser: makeSelectUserIsAtsUser(),\n});\n\nexport default compose<React.ComponentClass<IPimAttributesListPageComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps)\n)(PimAttributesListPage);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Grid,\n  Typography,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { CreatePureAttributeAction, CreatePureAttributeThenSearchPureAttributesAction, SearchAllAttributesSecondaryAction, SetSelectedPureAttributeAction, UpdateAttributeAction, UpdateAttributeThenSearchAttributesAction } from '../../../modules/PimModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport { ControlledModal } from '../../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { AttributeTag, Filter, Option, PureAttribute, Series } from '../../../models';\nimport { fromJS, List, Map } from 'immutable';\nimport {\n  reduxForm,\n  Field,\n  getFormValues\n} from 'redux-form/immutable';\nimport { InjectedFormProps, BaseFieldProps, stopSubmit, touch, change, clearSubmitErrors } from 'redux-form';\nimport { isNotEmptyStringRequired } from '../../../validators';\nimport { debounce } from 'lodash';\nimport { constructFilters, defaultOptions } from '../index';\nimport OptionFields from '../../PimDescriptionsListPage/DescriptionDialog/OptionFields';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport { makeSelectIsSearchingPureAttributesSecondary, makeSelectPureAttributesSecondary, makeSelectSelectedPureAttribute } from '../../../modules/PimModule/selectors';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { makeSelectOverlayComponentProp } from '../../../modules/ApplicationModule/selectors';\n\nexport const ATTRIBUTE_DIALOG_ID = 'ATTRIBUTE_DIALOG';\n\nexport const tagToTagMap = (tag: IAttributeTag) => {\n  return Map().set(`${tag.manufacturer.id}-${tag.category.id}`, {\n      manufacturer: { id: tag.manufacturer.id, name: tag.manufacturer.name },\n      category: { id: tag.category.id, name: tag.category.name },\n      disabled: tag.disabled\n    }) as Map<string, IAttributeTag>;\n};\n\nexport const tagListToTagMap = (tagList: List<IMap<IAttributeTag>>) => {\n  return tagList?.reduce((arr, tag) => {\n    return arr.set(`${tag.getIn(['manufacturer', 'id'])}-${tag.getIn(['category', 'id'])}`, {\n      manufacturer: { id: tag.getIn(['manufacturer', 'id']), name: tag.getIn(['manufacturer', 'name']) },\n      category: { id: tag.getIn(['category', 'id']), name: tag.getIn(['category', 'name']) },\n      disabled: tag.get('disabled')\n    });\n  }, Map()) as Map<string, IAttributeTag>;\n};\n\nexport interface IAttributeTag extends AttributeTag {\n  disabled?: boolean;\n}\n\ninterface IAttributeDialogContentComponentProps {\n  searchAfter?: boolean;\n  searchTerm?: string;\n  filters?: Filter;\n  options?: Option<Series>;\n  preAddedTags?: IAttributeTag;\n}\n\ninterface IAttributeDialogContentProps extends IAttributeDialogContentComponentProps {\n  formValues: Map<string, any>;\n  selectedPureAttribute: IMap<PureAttribute>;\n  pureAttributes: List<IMap<PureAttribute>>;\n  isSearchingPureAttributes: boolean;\n  overlayComponentProp: any;\n  dispatch: (s: IAction) => void;\n  resetSelectedPureAttribute: () => void;\n  closeDialog: () => void;\n  createAttribute: (pureAttribute: IMap<Partial<PureAttribute>>, successCB?: (newAttribute: IMap<PureAttribute>) => void, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => void;\n  createAttributeThenSearchAttributes: (pureAttribute: IMap<Partial<PureAttribute>>, options: Option<PureAttribute>, filters?: Filter, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => void;\n  searchPureAttributes: (name: string) => void;\n  updateAttribute: (id: number, name: string, successCB?: (newAttribute: IMap<PureAttribute>) => void, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => void;\n  updateAttributeThenSearchAttributes: (id: number, name: string, options: Option<PureAttribute>, filters?: Filter, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => void;\n}\n\ntype IAttributeDialogContent = IAttributeDialogContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & InjectedFormProps;\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    marginRight: theme.spacing() * 4,\n  },\n  root: {\n    width: 488\n  },\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n});\n\nconst AttributeDialog = (AttributeDialogProps: IAttributeDialogContent) => {\n  const {\n    classes,\n    searchAfter = true,\n    searchTerm,\n    filters,\n    options,\n    formValues = Map(),\n    selectedPureAttribute,\n    preAddedTags,\n    isSearchingPureAttributes,\n    pureAttributes,\n    overlayComponentProp,\n    searchPureAttributes,\n    reset,\n    resetSelectedPureAttribute,\n    closeDialog,\n    createAttribute,\n    createAttributeThenSearchAttributes,\n    updateAttribute,\n    updateAttributeThenSearchAttributes,\n    dispatch,\n    handleSubmit,\n    t\n  } = AttributeDialogProps;\n\n  const providedName = overlayComponentProp?.name;\n  const successCB = overlayComponentProp?.successCB;\n  const sendAmplitude = overlayComponentProp?.sendAmplitude;\n\n  const atsApi = useAtsApi();\n\n  const [selectedAttribute, setSelectedAttribute] = React.useState(selectedPureAttribute);\n  const [nameInput, setNameInput] = React.useState(selectedPureAttribute.get('name') || providedName || '');\n  const [isValidating, setIsValidating] = React.useState(false);\n  const [exists, setExists] = React.useState(false);\n  const [steps, setSteps] = React.useState(0);\n  const [tags, setTags] = React.useState<Map<string, IAttributeTag>>(preAddedTags ? tagToTagMap(preAddedTags) : Map());\n  const [emptyTagError, setEmptyTagError] = React.useState(false);\n\n  const selectedAttributeId = selectedAttribute?.get('id');\n  const selectedAttributeName = selectedAttribute?.get('name') || '';\n\n  React.useEffect(() => {\n    if (providedName) {\n      setNameInput(providedName);\n      if (!selectedAttributeId) {\n        validateAttribute(providedName);\n      }\n    }\n  }, [providedName, selectedAttributeId]);\n\n  React.useEffect(() => {\n    if (selectedAttributeId) {\n      dispatch(clearSubmitErrors(ATTRIBUTE_DIALOG_ID));\n      setExists(false);\n    }\n  }, [isValidating, selectedAttributeId]);\n\n  React.useEffect(() => {\n    setSelectedAttribute(selectedPureAttribute);\n    setNameInput(selectedPureAttribute.get('name') || '');\n  }, [selectedPureAttribute]);\n\n  React.useEffect(() => {\n    setTags(preAddedTags ? tagToTagMap(preAddedTags) : Map());\n  }, [preAddedTags]);\n\n  const name = formValues.getIn(['name', 'name']);\n  const manufacturer = formValues.get('manufacturer');\n  const category = formValues.get('category');\n\n  const validateAttribute = debounce((_name: string) => {\n    setIsValidating(true);\n\n    Promise.all([\n      atsApi.callApi({\n        service: 'pim',\n        endpoint: 'searchAllAttributes',\n        body: {\n          filters: {\n            'attribute.name': {\n              'eq': _name?.trim()\n            }\n          }\n        }\n        }) as any,\n      atsApi.callApi({\n        service: 'pim',\n        endpoint: 'validateAttributeExists',\n        body: {\n          name: _name\n        }\n      }) as any\n    ]).then(resArray => {\n      const data = fromJS(resArray);\n      const _exists = Boolean(data.getIn([0, 'payload', 'pim', 'count']) || data.getIn([1, 'payload', 'pim', 'exists']));\n\n      setExists(_exists);\n      if (_exists) {\n        dispatch(stopSubmit(ATTRIBUTE_DIALOG_ID, { name: t('pureAttributeDialog.attributeExistsError') }));\n        dispatch(touch(ATTRIBUTE_DIALOG_ID, 'name'));\n      } else {\n        dispatch(clearSubmitErrors(ATTRIBUTE_DIALOG_ID));\n        if (!selectedAttribute?.has('id') && !steps) {\n          setSteps(1);\n        }\n      }\n\n      setIsValidating(false);\n    }).catch((error) => {\n      console.error('validating name failed', {error}); // tslint:disable-line\n      setIsValidating(false);\n    });\n  }, 500);\n\n  const handleAddTag = () => {\n    setTags(tags.set(`${manufacturer.id}-${category.id}`, {\n      manufacturer: { id: manufacturer.id, name: manufacturer.value },\n      category: { id: category.id, name: category.value },\n    }));\n    setEmptyTagError(false);\n    dispatch(change(ATTRIBUTE_DIALOG_ID, 'manufacturer', null));\n    dispatch(change(ATTRIBUTE_DIALOG_ID, 'category', null));\n  };\n\n  const handleDeleteTag = (tag: IAttributeTag) => {\n    setTags(tags.delete(`${tag.manufacturer.id}-${tag.category.id}`));\n  };\n\n  const onExited = () => {\n    reset();\n    setIsValidating(false);\n    setExists(false);\n    setSteps(0);\n    setTags(preAddedTags ? tagToTagMap(preAddedTags) : Map());\n    setEmptyTagError(false);\n    setSelectedAttribute(Map() as IMap<PureAttribute>);\n    setNameInput('');\n    resetSelectedPureAttribute();\n  };\n\n  const onSubmit = (values: IMap<any>) => {\n    if (selectedAttribute.has('id')) {\n      if (successCB) {\n        updateAttribute(selectedAttributeId, nameInput, successCB, sendAmplitude);\n      } else {\n        updateAttributeThenSearchAttributes(\n          selectedAttributeId,\n          nameInput,\n          options,\n          constructFilters(searchTerm, filters),\n          sendAmplitude\n        );\n      }\n      closeDialog();\n    } else {\n      if (!tags.count()) {\n        setEmptyTagError(true);\n        return;\n      }\n\n      const unit = values.getIn(['unit'], '').trim().toLowerCase();\n\n      const pureAttribute = Map({\n        name: values.getIn(['name', 'name']) || nameInput || '',\n        options: [{\n          description: values.get('description'),\n          ... unit ? { unit } : {},\n          value: values.get('value').trim().toLowerCase(),\n          tags: tags.toIndexedSeq()\n        }]\n      });\n\n      searchAfter ? createAttributeThenSearchAttributes(pureAttribute, options, constructFilters(searchTerm, filters), sendAmplitude) : createAttribute(pureAttribute, successCB, sendAmplitude);\n      closeDialog();\n    }\n  };\n\n  return (\n    <ControlledModal\n      localKey={ATTRIBUTE_DIALOG_ID}\n      onExited={onExited}\n      classes={{\n        paper: classes.root\n      }}\n    >\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <DialogContent>\n          <DialogContentText id='alert-dialog-description' color='textPrimary' variant='h6'>\n            { selectedAttributeName ? `${t('pureAttributeDialog.editTitle')} (${selectedAttributeName})` : t('pureAttributeDialog.createTitle')}\n          </DialogContentText>\n\n          <Grid\n            container={true}\n            direction='column'\n          >\n            <Grid item={true}>\n              <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                name='name'\n                component={FieldAutocomplete}\n                validate={nameInput.trim() ? null : [isNotEmptyStringRequired]}\n                props={{\n                  require: true,\n                  inputProps: {\n                    options: pureAttributes.toJS(),\n                    freeSolo: true,\n                    inputValue: nameInput,\n                    label: t('pureAttributeDialog.attributeNameLabel'),\n                    placeholder: t('pureAttributeDialog.attributeNamePlaceholder'),\n                    getOptionLabel: option => option ? option.name : null,\n                    renderOption: option => option && (\n                      <Tooltip title={`Select this attribute to edit its name`}>\n                        <Typography color='textPrimary'>{option.name} - <span className={classes.span}>{option.key}</span></Typography>\n                      </Tooltip>\n                    ),\n                    onInputChange: (event: object, val: string, reason: string) => {\n                      if (reason !== 'reset') {\n                        setNameInput(val);\n                      }\n                      if (reason === 'input') {\n                        searchPureAttributes(val);\n                        if (!selectedAttribute.has('id')) {\n                          validateAttribute(val);\n                        }\n                      }\n                    },\n                    onChange: (val) => {\n                      if (val) {\n                        setNameInput(val.name);\n                        setSelectedAttribute(fromJS(val));\n                        setSteps(0);\n                      }\n                    }\n                  },\n                  formControlProps: {\n                    fullWidth: true\n                  }\n                }}\n              />\n            </Grid>\n            {\n              steps\n                ? (\n                    <OptionFields\n                      manufacturer={manufacturer}\n                      category={category}\n                      tags={fromJS(tags)}\n                      emptyTagError={emptyTagError}\n                      handleAddTag={handleAddTag}\n                      handleDeleteTag={handleDeleteTag}\n                    />\n                  )\n                : null\n            }\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={closeDialog}\n            color='primary'\n            className={classes.button}\n          >\n            { t('formButtons.cancel') }\n          </Button>\n          <Button\n            type='submit'\n            color='primary'\n            className={classes.button}\n            disabled={isValidating || exists || !(name || nameInput || '').trim()}\n          >\n            { selectedAttributeName ? t('formButtons.update') : t('formButtons.add') }\n          </Button>\n        </DialogActions>\n      </form>\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const selectedPureAttribute = makeSelectSelectedPureAttribute()(state);\n  const initialValues = selectedPureAttribute?.toJS() || {};\n\n  return {\n    initialValues,\n    selectedPureAttribute,\n    ...createStructuredSelector({\n      formValues: getFormValues(ATTRIBUTE_DIALOG_ID),\n      overlayComponentProp: makeSelectOverlayComponentProp(ATTRIBUTE_DIALOG_ID),\n      pureAttributes: makeSelectPureAttributesSecondary(),\n      isSearchingPureAttributes: makeSelectIsSearchingPureAttributesSecondary(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    createAttribute: (pureAttribute: IMap<Partial<PureAttribute>>, successCB?: (newAttribute: IMap<PureAttribute>) => void, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => {\n      dispatch(new CreatePureAttributeAction({\n        pureAttribute,\n        successCB,\n        sendAmplitude\n      }));\n    },\n    createAttributeThenSearchAttributes: (pureAttribute: IMap<Partial<PureAttribute>>, options: Option<PureAttribute>, filters?: Filter, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => {\n      dispatch(new CreatePureAttributeThenSearchPureAttributesAction({\n        pureAttribute,\n        filters,\n        options: options ? options : defaultOptions,\n        sendAmplitude\n      }));\n    },\n    resetSelectedPureAttribute: () => {\n      dispatch(new SetSelectedPureAttributeAction({ pureAttribute: Map() as IMap<PureAttribute> }));\n    },\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: ATTRIBUTE_DIALOG_ID,\n        open: false\n      }));\n      dispatch(new SetOverlayComponentPropsAction({\n        id: ATTRIBUTE_DIALOG_ID,\n        props: {}\n      }));\n      dispatch(new SetSelectedPureAttributeAction({ pureAttribute: Map() as IMap<PureAttribute> }));\n    },\n    searchPureAttributes: (name: string) => {\n      dispatch(new SearchAllAttributesSecondaryAction({\n        name\n      }));\n    },\n    updateAttribute: (id: number, name: string, successCB?: (newAttribute: IMap<PureAttribute>) => void, sendAmplitude?: (attribute: IMap<PureAttribute>) => void ) => {\n      dispatch(new UpdateAttributeAction({\n        id,\n        name,\n        successCB,\n        sendAmplitude\n      }));\n    },\n    updateAttributeThenSearchAttributes: (id: number, name: string, options: Option<PureAttribute>, filters?: Filter, sendAmplitude?: (attribute: IMap<PureAttribute>) => void) => {\n      dispatch(new UpdateAttributeThenSearchAttributesAction({\n        id,\n        name,\n        filters,\n        options: options ? options : defaultOptions,\n        sendAmplitude\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IAttributeDialogContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  reduxForm({\n    form: ATTRIBUTE_DIALOG_ID,\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(AttributeDialog);","export default __webpack_public_path__ + \"static/media/SpecToolLogo-Colour.646cde75.svg\";","export default __webpack_public_path__ + \"static/media/AutoQuoteLogo-Colour.18abcdc3.svg\";","export default __webpack_public_path__ + \"static/media/PIMToolLogo-Colour.0a070e4b.svg\";","export default __webpack_public_path__ + \"static/media/AmpLogo-Colour.d44f3249.svg\";","import * as Bowser from 'bowser';\nimport i18next from 'i18next';\n\nexport const SUPPORTED_BROSWERS =  ['Chrome', 'Chromium', 'Firefox'];\n\nfunction  useNotSupportedBrowserWarning(t: i18next.TFunction): null | string {\n  const browser = Bowser.getParser(window.navigator.userAgent).getBrowser().name;\n  return SUPPORTED_BROSWERS.includes(browser) ? null : `${browser} ${t('loginPage.notSupportedBrowserWarning')}`;\n}\n\nexport default useNotSupportedBrowserWarning;\n","import { useMemo } from 'react';\nimport { makeSelectSite } from '../modules/AtsModule/selectors';\nimport { useSelector } from 'react-redux';\n\nconst useSite = (): string  => {\n  const siteSelector = useMemo(() => makeSelectSite(), []);\n  return useSelector(siteSelector);\n};\n\nexport default useSite;\n","import * as React from 'react';\nimport {\n  Theme\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  Grid,\n  Tabs,\n  Tab,\n  Typography,\n  Snackbar,\n  Tooltip,\n  Button,\n  Link,\n  Select,\n  MenuItem,\n  useTheme,\n} from '@material-ui/core';\nimport { withRouter, RouteComponentProps } from 'react-router';\nimport {\n  Route,\n  Switch,\n } from 'react-router';\nimport {\n  SPEC_TOOL_ID, PROJECT_TRACKER_ID, QUOTE_TOOL_ID, PIM_ID, AMP_ID, WATTS_SPEC_ID, REQUEST_MASTER_PATH,\n  SiteName,\n  AMPLITUDE_EVENT,\n} from '../../../constants';\nimport AppStyle from '../../../components/AppStyle';\nimport {createStructuredSelector} from 'reselect';\nimport {Map} from 'immutable';\nimport {push} from 'connected-react-router';\nimport Login from './Login';\nimport Image from '../../../components/Image';\nimport {\n  LOGIN_PATH,\n  SIGNUP_PATH,\n  getLocalePrefix,\n} from '../../../constants';\nimport { makeStyles } from '@material-ui/styles';\nimport { makeSelectBadToken, makeSelectDisplayLanguageSelector } from '../../../modules/AtsModule/selectors';\nimport specLogo from '../../../images/SpecToolLogo-Colour.svg';\nimport ptLogo from '../../../images/AutoQuoteLogo-Colour.svg';\nimport pimLogo from '../../../images/PIMToolLogo-Colour.svg';\nimport ampLogo from '../../../images/AmpLogo-Colour.svg';\nimport SignUpFirstStep from '../../../containers/SignUpFirstStep';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {\n  useTranslation,\n  WithTranslation,\n  withTranslation\n} from 'react-i18next';\nimport SideDiv from '../shared/SideDiv';\nimport useNotSupportedBrowserWarning from '../../../hooks/useNotSupportedBrowserWarning';\nimport i18next from 'i18next';\nimport useConfig from '../../../hooks/useAppConfig';\nimport useSite from '../../../hooks/useSite';\nimport { togglePath } from '../../../components/TogglePath/utils';\nimport { IRouterReducerLocation, makeSelectLocation } from '../../../modules/RouterModule/selectors';\nimport { IMap } from 'ats-utils/src';\nimport RequestMasterModal from '../../../containers/RequestMasterModal';\nimport { RoutePartialPath } from '../../../components';\nimport { makeSelectLocale } from '../../../modules/LanguageModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { LocaleMap } from '../../../containers/AppMenu';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport { safeLocalStorage } from '../../../utils/safeStorage';\n\ninterface ILoginPageComponentProps {\n\n}\ninterface ILoginPageProps extends ILoginPageComponentProps, WithTranslation {\n  badToken: boolean;\n  _location: IMap<IRouterReducerLocation>;\n  displayLanguageSelector: boolean;\n}\n\n\nconst useStyles = makeStyles<Theme, ILoginPageProps>((theme: Theme) => {\n  return {\n    container: {\n      padding: theme.spacing(8),\n    },\n    logoItem: {\n      marginBottom: theme.spacing(4),\n    },\n    requestMasterContainer: {\n      marginTop: theme.spacing(2),\n    },\n    requestText: {\n      textTransform: 'uppercase',\n      cursor: 'pointer',\n      fontWeight: 'bold',\n      fontSize: '1.2em',\n    },\n    contentItem: {\n      padding: theme.spacing(4),\n    },\n    fullHeight: {\n      height: '100%',\n    },\n    fullWidth: {\n      width: '100%',\n    },\n    warningIcon: {\n      color: theme.palette.warning.main\n    },\n    closeIcon: {\n      cursor: 'pointer'\n    },\n    warningMessage: {\n      margin: theme.spacing(0, 1.5)\n    }\n  };\n});\n\ntype LoginPageType = ILoginPageProps & RouteComponentProps;\n\ninterface ITab {\n  label: string;\n  path: string;\n  elementId?: string;\n}\n\nexport const atsAppLogoLookUp = {\n  [SPEC_TOOL_ID]: {\n    logo: specLogo,\n    width: '280px',\n    backgroundStyle: {\n      backgroundPosition: 'left center'\n    }\n  },\n  [PROJECT_TRACKER_ID]: {\n    logo: ptLogo,\n    width: '280px',\n    backgroundStyle: {\n      backgroundPosition: 'left center'\n    }\n  },\n  [QUOTE_TOOL_ID]: {\n    logo: ptLogo\n  },\n  [PIM_ID]: {\n    logo: pimLogo,\n    width: '280px',\n    backgroundStyle: {\n      backgroundPosition: 'left center'\n    }\n  },\n  [AMP_ID]: {\n    logo: ampLogo,\n    width: '280px',\n    backgroundStyle: {\n      backgroundPosition: 'left center'\n    }\n  }\n};\n\nconst textBlurbLookUp = (t: i18next.TFunction) => ({\n  specTool: t('loginPage.specToolIntro'),\n  projectTracker: t('loginPage.projectTrackerIntro'),\n  quoteTool: t('loginPage.projectTrackerIntro'),\n});\n\nconst getSelectedTabIndex = (tabs: ITab[], path: string): number => tabs.findIndex(tab => tab.path === path) || 0;\n\nconst LoginPage: React.FC<LoginPageType> = (props) => {\n\n  const {\n    location,\n    _location,\n    badToken,\n    displayLanguageSelector,\n  } = props;\n\n  const [open, setOpen] = React.useState(false);\n\n  const config = useConfig();\n  const site = useSite();\n  const dispatch = useDispatch();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const { t } = useTranslation('translations');\n  const locale = useSelector(makeSelectLocale());\n  const logoPropsConfig = (config.get(`loginLogoProps${locale === 'fr' ? '_fr' : ''}`) || config.get('loginLogoProps') || config.get('logoProps') || Map<string, any>()).toJS();\n\n  const classes = useStyles(props);\n\n  const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n  const isSpecTool = site === SiteName.spec;\n  const isPimTool = site === SiteName.pim;\n\n  const languageData = Object.keys(LocaleMap).sort();\n\n  const hasRequestMaster = apiKey === WATTS_SPEC_ID;\n\n  const withSignUp = !config.get('noSignUp') && !isPimTool;\n\n  const tabs: ITab[] = [\n    {\n      label: t('loginPage.logIn'),\n      path: LOGIN_PATH,\n      elementId: 'login-tab',\n    },\n    ...withSignUp\n      ? [{\n          label: t('loginPage.signUp'),\n          path: SIGNUP_PATH,\n          elementId: 'signup-tab',\n        }]\n      : []\n  ];\n\n  const selectedTab = getSelectedTabIndex(tabs, location.pathname);\n\n  const textBlurb = textBlurbLookUp(t)[site];\n\n  const warningMsg = useNotSupportedBrowserWarning(t);\n\n  React.useEffect(() => {\n    warningMsg && setTimeout(() => setOpen(true), 1000); // tslint:disable-line\n  }, []);\n\n  const handleRequestMasterClick = () => {\n    togglePath({\n      pathName: REQUEST_MASTER_PATH,\n      dispatch,\n      location: _location,\n    })()();\n  };\n\n  return (\n  <AppStyle\n    style={{\n      overflowY: 'scroll',\n    }}\n  >\n    <Snackbar\n      open={open}\n      onClose={() => setOpen(false)}\n      transitionDuration={{\n        enter: 1500\n      }}\n      message={\n        <Grid\n          container={true}\n          justify='center'\n          wrap='nowrap'\n        >\n          <WarningIcon className={classes.warningIcon} />\n          <span className={classes.warningMessage}>{warningMsg}</span>\n          <CloseIcon className={classes.closeIcon} onClick={() => setOpen(false)}/>\n        </Grid>\n      }\n    />\n    <Grid\n      classes={{\n        container: classes.fullHeight\n      }}\n      container={true}\n    >\n      <SideDiv />\n      <Grid\n        classes={{\n          container: classes.container\n        }}\n        md={9}\n        xs={12}\n        container={true}\n        item={true}\n      >\n        <Grid\n          item={true}\n          container={true}\n          alignItems='center'\n          direction='column'\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            item={true}\n            classes={{\n              item: classes.logoItem\n            }}\n            justify='space-between'\n            alignItems='center'\n            wrap={'nowrap'}\n          >\n            <div\n              onClick={isSpecTool ? () => window.location.href = window.location.origin + getLocalePrefix() + '/' : null}\n              style={{ cursor: isSpecTool ? 'pointer' : 'default' }}\n            >\n              <Image\n                src={atsAppLogoLookUp[apiKey]?.logo || ''}\n                width={atsAppLogoLookUp[apiKey]?.width || '230px'}\n                aspectRatio='31.76%'\n                backgroundStyle={atsAppLogoLookUp[apiKey]?.backgroundStyle}\n                {...logoPropsConfig}\n              />\n            </div>\n            {\n              displayLanguageSelector && (\n                <Grid\n                  container={true}\n                  direction='column'\n                  justify='flex-end'\n                  alignItems='flex-end'\n                >\n                  <Grid\n                    container={true}\n                    direction='row'\n                    alignItems='center'\n                    justify='flex-end'\n                  >\n                    <LanguageIcon style={{ marginRight: 8, color: theme.palette.grey[600] }} />\n                    <Select\n                      value={locale}\n                      onChange={(event) => {\n                        const singleLocale = event.target.value as string;\n                        safeLocalStorage.setItem('languages💾', singleLocale);\n                        const languageSelected = singleLocale === 'en' ? 'English' : 'French';\n                        amplitude.logEvent(AMPLITUDE_EVENT.languageToggle, amplitudeData({ languageSelected }));\n\n                        // If URL has locale prefix, replace it; otherwise just reload\n                        const localeRegex = new RegExp(`^/(${languageData.join('|')})(\\/|$)`);\n                        const match = window.location.pathname.match(localeRegex);\n                        if (match) {\n                          const newPath = window.location.pathname.replace(localeRegex, `/${singleLocale}$2`);\n                          window.location.href = newPath + window.location.search + window.location.hash;\n                        } else {\n                          window.location.reload();\n                        }\n                      }}\n                    >\n                      {languageData.map((singleLocale) => (\n                        <MenuItem\n                          key={singleLocale}\n                          value={singleLocale}\n                        >\n                          {t(`LanguageSelector.${singleLocale}`)}\n                        </MenuItem>\n                      ))}\n                    </Select>\n                  </Grid>\n                  {\n                    hasRequestMaster && (\n                      <div className={classes.requestMasterContainer}>\n                        <Tooltip title={t('requestMaster.requestMasterTooltip')}>\n                          <Typography\n                            color='primary'\n                            className={classes.requestText}\n                            onClick={handleRequestMasterClick}\n                          >\n                            {t('requestMaster.requestMaster')}\n                          </Typography>\n                        </Tooltip>\n                      </div>\n                    )\n                  }\n                </Grid>\n              )\n            }\n          </Grid>\n\n          <Grid\n            classes={{\n              item: classes.contentItem\n            }}\n            direction='column'\n            wrap='nowrap'\n            container={true}\n            item={true}\n            spacing={3}\n          >\n            <Switch>\n              {\n                withSignUp && (\n                  <Route path={SIGNUP_PATH} render={() => {\n                    return <>\n                      <Grid\n                        container={true}\n                        item={true}\n                        justify='space-between'\n                        alignItems='center'\n                      >\n                        <Typography\n                          variant='h4'\n                        >\n                          {t('loginPage.signUp')}\n                        </Typography>\n                        {\n                          isSpecTool && (\n                            <Link\n                              href='/'\n                              onClick={() => window.location.href = window.location.origin + getLocalePrefix() + '/'}\n                            >\n                              {t('loginPage.exploreAsGuestLink')}\n                            </Link>\n                          )\n                        }\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        {\n                          badToken\n                            ? <Typography\n                                variant='subtitle1'\n                                color='error'\n                              >\n                                {t('loginPage.sessionExpired')}\n                              </Typography>\n                            : null\n                        }\n                        <Typography\n                          variant='subtitle1'\n                        >\n                          {textBlurb}\n                        </Typography>\n                      </Grid>\n                    </>;\n                  }} />\n                )\n              }\n              <Route render={() => {\n                return <>\n                  <Grid\n                    container={true}\n                    item={true}\n                    justify='space-between'\n                    alignItems='center'\n                  >\n                    <Typography\n                      variant='h4'\n                    >\n                      {t('loginPage.logIn')}\n                    </Typography>\n                    {\n                      isSpecTool && (\n                        <Link\n                          href='/'\n                          onClick={() => window.location.href = window.location.origin + getLocalePrefix() + '/'}\n                        >\n                          {t('loginPage.exploreAsGuestLink')}\n                        </Link>\n                      )\n                    }\n                  </Grid>\n                  <Grid\n                    item={true}\n                  >\n                    {\n                      badToken\n                        ? <Typography\n                            variant='subtitle1'\n                            color='error'\n                          >\n                            {t('loginPage.sessionExpired')}\n                          </Typography>\n                        : null\n                    }\n                    <Typography\n                      variant='subtitle1'\n                    >\n                      {textBlurb}\n                    </Typography>\n                  </Grid>\n                </>;\n              }} />\n            </Switch>\n            {\n              withSignUp && (\n                <Grid\n                  container={true}\n                  item={true}\n                >\n                  <Tabs\n                    classes={{\n                      root: classes.fullWidth\n                    }}\n                    value={selectedTab}\n                    indicatorColor='primary'\n                    textColor='primary'\n                    aria-label='login'\n                    variant='fullWidth'\n                  >\n                    {\n                      tabs.map((tab) => {\n                        return <Tab\n                          key={tab.path}\n                          label={tab.label}\n                          id={tab.elementId}\n                          onClick={() => dispatch(push(tab.path))}\n                        />;\n                      })\n                    }\n                  </Tabs>\n                </Grid>\n              )\n            }\n            <Grid\n              container={true}\n              item={true}\n            >\n              <Switch>\n                { withSignUp && <Route path={SIGNUP_PATH} component={SignUpFirstStep} /> }\n                <Route component={Login} />\n              </Switch>\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n\n      {\n        hasRequestMaster && (\n          <RoutePartialPath\n            partialPath={[\n              REQUEST_MASTER_PATH\n            ]}\n          >\n            {(routeProps: RouteComponentProps<{}>) => {\n              const _open = _location.get('pathname').indexOf(REQUEST_MASTER_PATH) !== -1;\n\n              return <RequestMasterModal\n                  {...routeProps}\n                  open={_open}\n                  toggle={(modalOpen) => {\n                    const pathName = REQUEST_MASTER_PATH;\n                    return togglePath({\n                      pathName,\n                      dispatch,\n                      location: _location,\n                    })(modalOpen);\n                  }}\n              />;\n            }}\n          </RoutePartialPath>\n        )\n      }\n    </Grid>\n  </AppStyle>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  badToken: makeSelectBadToken(),\n  _location: makeSelectLocation(),\n  displayLanguageSelector: makeSelectDisplayLanguageSelector(),\n});\n\n\nexport default compose<React.ComponentClass<ILoginPageProps>>(\n  withRouter,\n  connect(mapStateToProps),\n)(LoginPage);\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  var toParts = to && to.split('/') || [];\n  var fromParts = from && from.split('/') || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash = void 0;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) {\n    fromParts.unshift('..');\n  }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction valueEqual(a, b) {\n  if (a === b) return true;\n\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n      return valueEqual(item, b[index]);\n    });\n  }\n\n  var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n  var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n  if (aType !== bType) return false;\n\n  if (aType === 'object') {\n    var aValue = a.valueOf();\n    var bValue = b.valueOf();\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    var aKeys = Object.keys(a);\n    var bKeys = Object.keys(b);\n\n    if (aKeys.length !== bKeys.length) return false;\n\n    return aKeys.every(function (key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\nexport default valueEqual;","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n    process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  var hashIndex = window.location.href.indexOf('#');\n  window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    return '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","import React from 'react';\nimport {utcToLocal} from 'ats-utils/src/utcToLocal';\nimport {TextCell} from '../../../../../../components/_CellRenderers';\nimport {\n  TableCell,\n} from '@material-ui/core';\nconst getEmptyCell = (indexId) => {\n  return (\n    <TableCell key={`${indexId}`}>\n      <></>\n    </TableCell>\n  );\n};\n\nconst getTextCell = (data, indexId) => {\n  return (\n    <TextCell key={`${indexId}`} text={data}/>\n  );\n};\n\nconst getTimeCell = (time, indexId) => {\n  return (\n    <TextCell key={`${indexId}`} text={utcToLocal(time)}/>\n  );\n};\n\nconst TableDynamicCell = {\n  getEmptyCell,\n  getTextCell,\n  getTimeCell\n};\nexport default TableDynamicCell;","export * from \"./api/index\";\nexport * from \"./core/index\";\nexport * from \"./types/index\";\nexport * from \"./utils/index\";\n//# sourceMappingURL=index.js.map","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3z\"\n}), 'AccountTree');","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, Grid, Typography, Theme, makeStyles, createStyles, FormControlLabel, Checkbox, useTheme } from '@material-ui/core';\nimport { compose, Dispatch } from 'redux';\nimport { connect } from 'react-redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { makeSelectOverlayComponentProp } from '../../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentPropsAction } from '../../../modules/ApplicationModule/actions';\nimport { Product, Series } from '../../../models';\nimport { getFormValues } from 'redux-form/immutable';\nimport { PIM_PRODUCT_DRAWER_FORM } from '.';\nimport { change } from 'redux-form';\nimport Language from '../../../models/Language';\nimport { Map } from 'immutable';\nimport { mediaLocaleOptions } from '../../FileLocalizationSelector';\n\nexport const PRODUCT_ASSETS_CONFIRM_DIALOG = 'PRODUCT_ASSETS_CONFIRM_DIALOG';\n\ninterface IProductAssetsConfirmDialogComponentProps {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  selectedPimSeries: IMap<Series>;\n  selectedPimProduct: IMap<Product>;\n  setImageId: (imageId: string) => void;\n  uploadedCutsheetFileIds: Map<Language, string>;\n}\n\ninterface IProductAssetsConfirmDialogProps extends IProductAssetsConfirmDialogComponentProps {\n  dispatch: Dispatch;\n  overlayProps: any;\n  formValues: Map<string, any>;\n}\n\ntype ProductAssetsConfirmDialogProps = IProductAssetsConfirmDialogProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n}));\n\nconst ProductAssetsConfirmDialog: React.FC<ProductAssetsConfirmDialogProps> = props => {\n  const {\n    dispatch,\n    t,\n    open,\n    setOpen,\n    selectedPimSeries,\n    selectedPimProduct,\n    uploadedCutsheetFileIds,\n    setImageId,\n    overlayProps,\n    formValues\n  } = props;\n\n  const classes = useStyles();\n  const theme = useTheme();\n  const [applyImage, setApplyImage] = React.useState(false);\n  const [applyCutsheet, setApplyCutsheet] = React.useState(false);\n  const { useAsFinalImage, useAsFinalCutsheet, optionImageId, optionCutsheets } = overlayProps;\n\n  React.useEffect(() => {\n    if (open && optionImageId) {\n      setApplyImage(true);\n    }\n    if (open && optionCutsheets) {\n      setApplyCutsheet(true);\n    }\n  }, [overlayProps]);\n\n  const handleClose = () => {\n    setOpen(false);\n    dispatch(new SetOverlayComponentPropsAction({ props: {}, id: PRODUCT_ASSETS_CONFIRM_DIALOG }));\n  };\n\n  const onConfirm = () => {\n    if (useAsFinalImage && optionImageId) {\n      if (applyImage) {\n        setImageId(optionImageId);\n        dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'dropzone', '')); // override the upload too\n      } else {\n        const originalMainImageId = selectedPimProduct.getIn(['file', 'images', 'main', 'fileId']) || selectedPimSeries.getIn(['file', 'images', 'main', 'fileId']);\n        setImageId(originalMainImageId);\n      }\n    }\n    if (useAsFinalCutsheet && optionCutsheets?.size > 0) {\n      if (applyCutsheet) {\n        const formProductMedia = formValues.getIn(['file', 'media']) || Map();\n        const updatedFormMedia = formProductMedia.withMutations(ctx => {\n          mediaLocaleOptions.forEach(locale => {\n            const localeKey = locale.value;\n            if (optionCutsheets.get(localeKey)) {\n              ctx.setIn([localeKey, 'manufacturer_cutsheet'], optionCutsheets.get(localeKey));\n            } else if (formProductMedia.getIn([localeKey, 'manufacturer_cutsheet'])) {\n              ctx.deleteIn([localeKey, 'manufacturer_cutsheet']);\n            }\n          });\n          ctx.delete('manufacturer_cutsheet');\n        });\n        dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'file.media', updatedFormMedia));\n      } else {\n        const formProductMedia = formValues.getIn(['file', 'media']) || Map();\n        const updatedFormMedia = formProductMedia.withMutations(ctx => {\n          mediaLocaleOptions.forEach(locale => {\n            const localeKey = locale.value;\n            const formCutsheetFileId = formValues.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet', 'fileId']);\n            const isNotCustomUpload = uploadedCutsheetFileIds.get(localeKey as Language) !== formCutsheetFileId;\n            const originalCutsheet = selectedPimProduct.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet']) || selectedPimSeries.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet']);\n            if (isNotCustomUpload) {\n              if (originalCutsheet) {\n                ctx.setIn([localeKey, 'manufacturer_cutsheet'], originalCutsheet);\n                ctx.delete('manufacturer_cutsheet');\n              } else {\n                ctx.deleteIn([localeKey, 'manufacturer_cutsheet']);\n                ctx.delete('manufacturer_cutsheet');\n              }\n            }\n          });\n        });\n        dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'file.media', updatedFormMedia));\n      }\n    }\n    handleClose();\n  };\n\n  return (\n    <Dialog\n      open={open}\n      aria-labelledby='product-assets-confirm-dialog'\n    >\n        <DialogTitle id='product-assets-confirm-dialog-title'>\n          {t('pimProductDrawer.optionAssetsConfirmModalTitle')}\n        </DialogTitle>\n        <DialogContent>\n          <Grid container={true} alignItems='center'>\n            <Grid container={true} item={true} direction='column'>\n              <Typography variant='subtitle2'>{t('pimProductDrawer.optionAssetsConfirmModalText')}</Typography>\n              <Typography variant='subtitle1' style={{paddingTop: 8}}>{t('pimProductDrawer.optionAssetsConfirm')}</Typography>\n                {useAsFinalImage && optionImageId &&\n                  <FormControlLabel\n                    color='primary'\n                    control={<Checkbox color='primary' />}\n                    label={t('pimProductDrawer.applyImage')}\n                    checked={applyImage}\n                    onChange={(e, val) => setApplyImage(val)}\n                  />\n                }\n                {useAsFinalCutsheet && optionCutsheets?.size > 0 &&\n                  <FormControlLabel\n                    color='primary'\n                    control={<Checkbox color='primary' />}\n                    label={t('pimProductDrawer.applyCutsheet')}\n                    checked={applyCutsheet}\n                    onChange={(e, val) => setApplyCutsheet(val)}\n                  />\n                }\n            </Grid>\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            color='primary'\n            onClick={onConfirm}\n          >\n            {t('formButtons.confirm')}\n          </Button>\n        </DialogActions>\n    </Dialog>\n  );\n};\n\nconst mapStateToProps = (state) => {\n  return {\n    overlayProps: makeSelectOverlayComponentProp(PRODUCT_ASSETS_CONFIRM_DIALOG)(state),\n    formValues: getFormValues(PIM_PRODUCT_DRAWER_FORM)(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<IProductAssetsConfirmDialogComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductAssetsConfirmDialog);","import * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Typography,\n  IconButton,\n  Tooltip,\n  Button,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  StyleRules, WithTheme\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport { InjectedFormProps, BaseFieldProps, change } from 'redux-form';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport { Product, Series, Attribute } from '../../../models';\nimport ViewListOutlinedIcon from '@material-ui/icons/ViewListOutlined';\nimport { AccountTree, Edit, Delete, AttachFile } from '@material-ui/icons';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../FieldDropzone';\nimport { NoPhotoPreviewAction, FieldDropzoneStateResetAction, SetOverlayComponentPropsAction } from '../../../modules/ApplicationModule/actions';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../FieldTextField';\nimport { isEmptyOrContent, isNotEmptyStringRequired, required, requiredCheckbox, maxStringLength } from '../../../validators';\nimport { AddPimProductDraftThenSearchPimProductsAction, CheckAdvanceConfigMatchingProductAction, GetMatchingAttributesSucceededAction, GetPimMatchingProductSucceededAction, MatchingProductCheckingAction, UpdatePIMProductDraftAction, CanProductBeConfiguredAction } from '../../../modules/PimModule/actions';\nimport { withAtsApi } from '../../../contexts';\nimport Api from 'ats-api/src';\nimport Xhr from '../../../utils/Xhr';\nimport { getIn, Map, List, OrderedMap, merge, fromJS } from 'immutable';\nimport DrawerEditCTA from '../../DrawerEditCTA';\nimport FieldRadio, { IFieldRadioComponentProps } from '../../FieldRadio';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../FieldCheckbox';\nimport i18next from 'i18next';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { IMediaKey, linkKeys, mediaKeys1, mediaKeys2, designMediaKeys } from '../../../pages/SeriesEditPage/Attachments';\nimport MediaUpload from './MediaUpload';\nimport CurrencySelector from '../../CurrencySelector';\nimport { acceptedMainImageExtensions, mainImageUploadValidation } from '../../../pages/SeriesEditPage/SeriesInfo';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport FileLocalizationSelector, { mediaLocaleOptions } from '../../FileLocalizationSelector';\nimport Language from '../../../models/Language';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../FieldSwitch';\nimport InfoIcon from '@material-ui/icons/Info';\nimport FlagIcon from '@material-ui/icons/Flag';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport CheckIcon from '@material-ui/icons/Check';\nimport TextureIcon from '@material-ui/icons/Texture';\nimport { makeSelectMatchingProductChecking, makeSelectPimMatchingAttributes, makeSelectPimMatchingProduct, makeSelectSelectedPimProductId, makeSelectIsProductConfigurable, makeSelectIsProductConfigurableChecking } from '../../../modules/PimModule/selectors';\nimport { makeSelectCanManagePimPricing, makeSelectChildOrParentIsAtsUser } from '../../../modules/AtsModule/selectors';\nimport Image from '../../Image';\nimport classNames from 'classnames';\nimport ProductNumberDialog from './ProductNumberDialog';\nimport ProductAssetsConfirmDialog, { PRODUCT_ASSETS_CONFIRM_DIALOG } from './ProductAssetsConfirmDialog';\nimport { AMPLITUDE_EVENT, Currency } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport AttachMoneyIcon from '@material-ui/icons/AttachMoney';\nimport LinkItem from './LinkItem';\nimport FullMediaUpload from './FullMediaUpload';\nimport DrawerEditHeader from '../../DrawerEditHeader';\n\nexport const PIM_PRODUCT_DRAWER_FORM = 'PimProductDrawerForm';\n\nexport const isPricePoa = ({ priceIsOverride, isPoaIsOverride, isPoaCustom, isPoaCalculated }: { priceIsOverride: boolean, isPoaIsOverride: boolean, isPoaCustom: boolean, isPoaCalculated: boolean }) => {\n  if (priceIsOverride && isPoaIsOverride && isPoaCustom) {\n    return true;\n  }\n  if (!priceIsOverride && !isPoaIsOverride && isPoaCalculated) {\n    return true;\n  }\n  return false;\n};\n\nexport const externalLinkValidationFunction = (value: string) => {\n  if (!value) { return undefined; }\n\n  const _value = value.trim().toLowerCase();\n  return _value.startsWith('http://') || _value.startsWith('https://')\n    ? undefined\n    : i18next.t(['translations:errors.isExternalLink']);\n};\n\nexport const getPriceComparison = (originalProduct: Map<string, any>, updatedProduct: Map<any,any>, priceType: 'list' | 'cost' | 'sell') => {\n  const priceUpdate = updatedProduct.getIn(['price', 'default',]).reduce((acc, currency, currencyKey) => {\n    return currency.get(priceType) !== originalProduct.getIn(['price', 'default', currencyKey, priceType]) ? acc.push(`${currencyKey} - ${currency.get(priceType)}`) : acc;\n  }, List());\n  return priceUpdate.size ? priceUpdate.join(', ') : null;\n};\n\nconst emptyBulk = fromJS({ USD: {}, CAD: {} });\nexport const getBulkPriceComparison = (originalProduct: Map<string, any>, updatedProduct: Map<any,any>, bulkType: 'skid' | 'truck', itemKey: 'quantity' | 'price') => {\n  const bulkPriceUpdate = (updatedProduct.getIn(['bulkPrice', bulkType]) || emptyBulk)?.reduce((acc, currency, currencyKey) => {\n    const newValue = currency.get(itemKey) && Number(currency.get(itemKey));\n    const originalValue = originalProduct.getIn(['bulkPrice', bulkType, currencyKey, itemKey]) && Number(originalProduct.getIn(['bulkPrice', bulkType, currencyKey, itemKey]));\n    return newValue !== originalValue ? acc.push(`${currencyKey} - ${newValue ?? null}`) : acc;\n  }, List());\n  return bulkPriceUpdate.size ? bulkPriceUpdate.join(', ') : null;\n};\n\nexport const getPurchasabilityComparison = (originalProduct: Map<string, any>, updatedProduct: Map<any,any>) => {\n  const originalPurchasability = originalProduct.get('purchasability');\n  const updatedPurchasability = updatedProduct.get('purchasability');\n  const changes = ['country', 'province', 'city'].reduce((acc, key) => {\n    if (JSON.stringify(updatedPurchasability?.get(key)) !== JSON.stringify(originalPurchasability?.get(key))) {\n      return acc.push(`${key} - ${JSON.stringify(updatedPurchasability?.get(key)) || null}`);\n    }\n    return acc;\n  }, List());\n  return changes.size ? changes.join(', ') : null;\n};\n\nexport const getSpecSheetAvailability = (product: Map<string, any>, specSheetType: 'fileId' | 'url') => {\n  return mediaLocaleOptions.find(locale => product.getIn(['file', 'media', locale.value, 'manufacturer_cutsheet', specSheetType])) ? true : false;\n};\n\nconst seriesAttributesToProductAttributes = (attributeOption: IMap<Attribute>, attributeOptionValue: IMap<Attribute>) => ({\n  id: attributeOption.get('id'),\n  key: attributeOption.get('key'),\n  name: attributeOption.get('name'),\n  optionId: attributeOptionValue.get('id'),\n  description: attributeOptionValue.get('description'),\n  unit: attributeOptionValue.get('unit'),\n  value: attributeOptionValue.get('value'),\n  valueType: attributeOptionValue.get('valueType'),\n  suffix: attributeOptionValue.get('suffix'),\n  status: attributeOptionValue.get('status'),\n});\n\ninterface IPimProductDrawerEditContentProps {\n  setSelectedCurrency: (currency: Currency) => void;\n  toggleDrawer: (open?: boolean) => void;\n  selectedPimProduct?: IMap<Product>;\n  selectedPimSeries?: IMap<Series>;\n  selectedCurrency: Currency;\n}\n\ninterface IPimProductDrawerEditProps extends IPimProductDrawerEditContentProps {\n  dispatch: React.Dispatch<IAction>;\n  createPimProductDraft: (product: IMap<Partial<Product>>, onSuccess: (result: IMap<Product>) => void) => void;\n  updatePIMProductDraft: (productId: number, productInfo: Partial<Product>, onSuccess: () => void) => void;\n  isCheckingProduct: boolean;\n  pimMatchingProduct: List<IMap<Product>>;\n  selectedPimProductId: number;\n  atsApi: Api;\n  formValues: Map<string, any>;\n  childOrParentIsAtsUser: boolean;\n  form: string;\n  attributes: object;\n  theme: Theme;\n  canManagePimPricing: boolean;\n  pimMatchingAttributes: Map<string, IMap<Attribute>>;\n  isProductConfigurable: boolean;\n  isProductConfigurableChecking: boolean;\n}\n\ninterface IPimProductDrawerState {\n  imageId: string;\n  drawerOpen: boolean;\n  showLoading: boolean;\n  productNumberDialogOpen: boolean;\n  haveInformed: boolean;\n  selectedLanguage: Language;\n  stillHaveRequire: boolean;\n  uploadedCutsheetFileIds: Map<Language, string>;\n  productAssetsConfirmDialogOpen: boolean;\n}\n\ntype PimProductDrawerEditType = WithTranslation & IPimProductDrawerEditProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAmplitudeData;\n\nclass PimProductDrawerEdit extends React.Component<PimProductDrawerEditType, IPimProductDrawerState> {\n\n  public refProductNumber: React.RefObject<HTMLInputElement> = React.createRef();\n\n  constructor(props: PimProductDrawerEditType) {\n    super(props);\n    this.state = {\n      imageId: '',\n      drawerOpen: false,\n      showLoading: false,\n      productNumberDialogOpen: false,\n      haveInformed: false,\n      selectedLanguage: 'en',\n      stillHaveRequire: false,\n      uploadedCutsheetFileIds: Map(),\n      productAssetsConfirmDialogOpen: false\n    };\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { dispatch, formValues, selectedPimSeries, selectedPimProduct } = this.props;\n    // check product when drawer is open and form has value\n    if (prevProps.formValues === undefined && formValues) {\n      // only check for matching product if it's advance config and invalid\n      if ((selectedPimSeries.get('isConfigurator') && selectedPimProduct.get('invalid')) || !selectedPimSeries.get('isConfigurator')) {\n        const selectedAttributesValues = formValues.get('attributes');\n        dispatch(new CheckAdvanceConfigMatchingProductAction({series: selectedPimSeries, selectedAttributesValues}));\n        this.unselectedRequireCheck();\n      }\n    }\n\n    if (formValues && prevProps.formValues && formValues.get('attributes') !== prevProps.formValues.get('attributes')) {\n      const selectedAttributesValues = formValues.get('attributes');\n      dispatch(new CheckAdvanceConfigMatchingProductAction({series: selectedPimSeries, selectedAttributesValues}));\n      this.unselectedRequireCheck();\n    }\n  }\n\n  public componentWillUpdate = (prevProps, prevState) => {\n    const { formValues } = this.props;\n    const main = formValues && formValues.getIn(['file', 'images', 'main', 'fileId']);\n    if (main && !this.state.drawerOpen) {\n      this.setState({ imageId: main, drawerOpen: true });\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const {dispatch} = this.props;\n    // set pimMatchingProduct to null\n    dispatch(new GetPimMatchingProductSucceededAction({matchingProduct: null}));\n    dispatch(new GetMatchingAttributesSucceededAction({matchingAttributes: null}));\n    dispatch(new MatchingProductCheckingAction(false));\n  }\n\n  public updateImageOrCutsheetByOption = ({useAsFinalImage, useAsFinalCutsheet, selectedRadioOption}) => {\n    const { selectedPimSeries, selectedPimProduct, formValues, dispatch } = this.props;\n    const { uploadedCutsheetFileIds } = this.state;\n    // option image\n    const optionImageId = selectedRadioOption?.get('optionBasedProductImage');\n    // if use as final image but image not found set back to original main image\n    if (useAsFinalImage && !optionImageId) {\n      const originalMainImageId = selectedPimProduct.getIn(['file', 'images', 'main', 'fileId']) || selectedPimSeries.getIn(['file', 'images', 'main', 'fileId']);\n      this.setState({ imageId: originalMainImageId || '' });\n    }\n    // option spec\n    const optionCutsheets = selectedRadioOption?.get('optionBasedManufacturerCutsheet');\n    if (useAsFinalCutsheet && !(optionCutsheets?.size > 0)) {\n      // if use as final cutsheet but no cutsheet then go through all the locales and set to original cutsheet from each locales\n      const formProductMedia = formValues.getIn(['file', 'media']);\n      const updatedFormMedia = formProductMedia.withMutations(ctx => {\n        mediaLocaleOptions.forEach(locale => {\n          const localeKey = locale.value;\n          const formCutsheetFileId = formValues.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet', 'fileId']);\n          const isNotCustomUpload = uploadedCutsheetFileIds.get(localeKey as Language) !== formCutsheetFileId;\n          const originalCutsheet = selectedPimProduct.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet']) || selectedPimSeries.getIn(['file', 'media', localeKey, 'manufacturer_cutsheet']);\n          if (isNotCustomUpload) {\n            if (originalCutsheet) {\n              ctx.setIn([localeKey, 'manufacturer_cutsheet'], originalCutsheet);\n              ctx.delete('manufacturer_cutsheet');\n            } else {\n              ctx.deleteIn([localeKey, 'manufacturer_cutsheet']);\n              ctx.delete('manufacturer_cutsheet');\n            }\n          }\n        });\n      });\n      dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'file.media', updatedFormMedia));\n    }\n    if ((useAsFinalImage && optionImageId) || (useAsFinalCutsheet && optionCutsheets?.size > 0)) {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: PRODUCT_ASSETS_CONFIRM_DIALOG,\n        props: {\n          useAsFinalImage,\n          useAsFinalCutsheet,\n          optionImageId,\n          optionCutsheets\n        }\n      }));\n      this.setState({ productAssetsConfirmDialogOpen: true });\n    }\n  }\n\n  public unselectedRequireCheck = () => {\n    const {\n      dispatch,\n      selectedPimSeries,\n      formValues,\n    } = this.props;\n\n    const seriesAttributeOptions = selectedPimSeries.getIn(['attributes'])?.filter((attribute) => !attribute.get('isAttribute'));\n    const formAttributeOptions = formValues.get('attributes');\n\n    const missingRequire = seriesAttributeOptions?.entrySeq()?.some((entry => {\n      const values = entry[1].get('values');\n      const selectedOptionDescriptionId = formAttributeOptions?.get(entry[0]); // a number for option and a list of numbers for checkbox\n\n      if (entry[1].get('require') && entry[1].get('status') === 'active') {\n        if (entry[1].get('isOption')) {\n          if (!selectedOptionDescriptionId?.count()) { // if no checkbox is selected for the require option\n            return true;\n          } else { // if none of the selections are not deleted, then user is require to make a selection\n            const nonDeletedValueIds = values.filter((value) => value.get('status') !== 'deleted').map((value) => value.get('id'));\n            if (!selectedOptionDescriptionId.some((id) => nonDeletedValueIds.includes(id))) {\n              return true;\n            }\n          }\n        } else {\n          // if no radio is selected for the require option\n          // OR the selected radio is deleted status\n          // then that's consider missing require and the user would need to make a selection\n          if (\n              !selectedOptionDescriptionId\n              || (values.find((value) => value.get('id') === selectedOptionDescriptionId)?.get('status') === 'deleted')\n            ) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }));\n\n    this.setState({ stillHaveRequire: missingRequire }, () => {\n      if (!selectedPimSeries.get('isConfigurator') && !missingRequire) {\n        dispatch(new CanProductBeConfiguredAction({\n          series: selectedPimSeries,\n          selectedAttributesValues: formValues?.get('attributes'),\n          productId: formValues?.get('id'),\n          purchasability: formValues?.get('purchasability') ?? selectedPimSeries.get('purchasability'),\n        }));\n      }\n    });\n\n  }\n\n  public onSubmit = async (values: Map<string, any>) => {\n    const {\n      dispatch,\n      atsApi,\n      toggleDrawer,\n      updatePIMProductDraft,\n      createPimProductDraft,\n      selectedPimSeries,\n      attributes,\n      selectedPimProduct,\n      amplitudeData\n    } = this.props;\n\n    const imageArray = await Xhr({ atsApi, files: values.get('dropzone') });\n    const imageId = getIn(imageArray, [0, 'id'], '') || this.state.imageId;\n\n    const filteredAttributesEntries = Object.entries(attributes).filter( attribute => {\n      return attribute[1].status !== 'deleted';\n    });\n    const filteredAttributes = Object.fromEntries(filteredAttributesEntries);\n\n    const submitValues = values.withMutations(ctx => {\n      if (imageId) {\n        ctx.setIn(['file', 'images', 'main', 'fileId'], imageId);\n        ctx.delete('dropzone');\n        dispatch(new FieldDropzoneStateResetAction());\n      } else {\n        ctx.deleteIn(['file', 'images', 'main']);\n      }\n\n      // const generalEnManufacturerCutsheetUrl = ctx.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', 'url']);\n      // if (generalEnManufacturerCutsheetUrl) {\n      //   ctx.setIn(['file', 'media', 'manufacturer_cutsheet', 'url'], generalEnManufacturerCutsheetUrl);\n      // }\n\n      if (ctx.getIn(['file', 'media'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media']);\n      }\n      if (ctx.getIn(['file', 'links'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'links']);\n      }\n\n      if (ctx.get('itemNumber') === '') {\n        ctx.set('itemNumber', null);\n      }\n\n      if (ctx.get('upc') === '') {\n        ctx.set('upc', null);\n      }\n\n      if (ctx.get('sku') === '') {\n        ctx.set('sku', null);\n      }\n\n      if (!selectedPimSeries.get('isConfigurator')) {\n        const rawPrice = ctx.get('price');\n        const price = rawPrice && rawPrice.withMutations(region => {\n          region.forEach((regionCurrency, index) => {\n            regionCurrency.forEach((priceObj, _index) => {\n              priceObj.forEach((actualPrice, priceIndex) => {\n                if (actualPrice === '') {\n                  return region.setIn([index, _index, priceIndex], null);\n                }\n              });\n            });\n          });\n        });\n        if (price) {\n          ctx.set('price', price);\n        }\n      }\n\n      const optionsAndCheckboxes = {};\n      values.get('attributes').entrySeq().forEach(entry => {\n        const attributeOption = selectedPimSeries.getIn(['attributes', entry[0]]);\n        if (attributeOption.get('isOption')) { // checkbox\n          entry[1].forEach(optionId => {\n            const attributeOptionValue = attributeOption.get('values').find(value => value.get('id') === optionId && value.get('status') !== 'deleted');\n            if (attributeOptionValue) {\n              optionsAndCheckboxes[attributeOptionValue.get('key')] = seriesAttributesToProductAttributes(attributeOption, attributeOptionValue);\n            }\n          });\n        } else { // radio\n          if (entry[1] !== null) { // skip non require radio that have not been selected\n            const attributeOptionValue = attributeOption.get('values').find(value => value.get('id') === entry[1] && value.get('status') !== 'deleted');\n            if (attributeOptionValue) {\n              optionsAndCheckboxes[entry[0]] = seriesAttributesToProductAttributes(attributeOption, attributeOptionValue);\n            }\n          }\n        }\n      });\n      ctx.set('attributes', merge(filteredAttributes, optionsAndCheckboxes));\n    });\n\n    if (values.get('id')) {\n      const onSuccess = () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.productUpdated, amplitudeData({\n          seriesName: selectedPimSeries.get('name'),\n          productName: submitValues.get('name'),\n          productId: submitValues.get('id'),\n          manufacturerName: submitValues.get('brand'),\n          categoryName: submitValues.get('categoryName'),\n          numberOfOptions: fromJS(submitValues.get('attributes')).filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n          specSheetFileAvailable: getSpecSheetAvailability(submitValues, 'fileId'),\n          specSheetURLAvailable: getSpecSheetAvailability(submitValues, 'url'),\n          updated_productImage: submitValues.getIn(['file', 'images', 'main', 'filename']) !== selectedPimProduct.getIn(['file', 'images', 'main', 'filename']) ? submitValues.getIn(['file', 'images', 'main', 'filename']) : null,\n          updated_productNumber: submitValues.get('productNumber') !== selectedPimProduct.get('productNumber') ? submitValues.get('productNumber') : null,\n          updated_itemNumber: submitValues.get('itemNumber') !== selectedPimProduct.get('itemNumber') ? submitValues.get('itemNumber') : null,\n          updated_upc: submitValues.get('upc') !== selectedPimProduct.get('upc') ? submitValues.get('upc') : null,\n          updated_sku: submitValues.get('sku') !== selectedPimProduct.get('sku') ? submitValues.get('sku') : null,\n          updated_productDescription: submitValues.get('description') !== selectedPimProduct.get('description') ? submitValues.get('description') : null,\n          updated_listPrice: getPriceComparison(selectedPimProduct, submitValues, 'list'),\n          updated_sellPrice: getPriceComparison(selectedPimProduct, submitValues, 'sell'),\n          updated_costPrice: getPriceComparison(selectedPimProduct, submitValues, 'cost')\n        }));\n      };\n      updatePIMProductDraft(values.get('id'), submitValues.toJS(), onSuccess);\n    } else {\n      const onSuccess = (result: IMap<Product>) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.productCreated, amplitudeData({\n          seriesName: selectedPimSeries.get('name'),\n          productName: submitValues.get('name'),\n          productId: result.get('id'),\n          manufacturerName: submitValues.get('brand'),\n          categoryName: submitValues.get('categoryName'),\n          numberOfOptions: fromJS(submitValues.get('attributes')).filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n          specSheetFileAvailable: getSpecSheetAvailability(submitValues, 'fileId'),\n          specSheetURLAvailable: getSpecSheetAvailability(submitValues, 'url')\n        }));\n      };\n      createPimProductDraft(submitValues, onSuccess);\n    }\n    toggleDrawer();\n  }\n\n  public removePhoto = (): void => {\n    const { dispatch, form } = this.props;\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'file.images.main.fileId', ''));\n    dispatch(change(PIM_PRODUCT_DRAWER_FORM, 'dropzone', ''));\n    this.setState({ imageId: '' });\n  }\n\n  public uploadPhoto = (): JSX.Element => {\n    const { imageId } = this.state;\n    const {\n      t,\n      classes,\n      formValues\n    } = this.props;\n\n    return (\n      <Grid\n        container={true}\n        item={true}\n        direction='column'\n        justify='center'\n      >\n        <Grid\n          className={classes.imageContainer}\n        >\n          <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n            component={FieldDropzone}\n            name='dropzone'\n            validate={mainImageUploadValidation}\n            props={{\n              initialImage: imageId,\n              suggestText: t('SeriesDetailPage.uploadSuggest'),\n              dropzoneInputProps: {\n                accept: acceptedMainImageExtensions\n              }\n            }}\n          />\n        </Grid>\n        <Grid container={true} justify='flex-end'>\n          {\n            (imageId || (formValues && formValues.get('dropzone'))) &&\n            <IconButton size='small' onClick={this.removePhoto}>\n              <Tooltip title={t('formButtons.delete')}>\n                <Delete fontSize='small' />\n              </Tooltip>\n            </IconButton>\n          }\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public seriesNumber = () => {\n    const {\n      t,\n      classes,\n      selectedPimSeries\n    } = this.props;\n\n    return (\n      <Grid\n        container={true}\n        item={true}\n        wrap='nowrap'\n      >\n        {\n          selectedPimSeries.get('isConfigurator')\n            ? <WidgetsIcon fontSize='small' className={classes.icon} />\n            : <AccountTree fontSize='small' className={classes.icon} />\n        }\n        <Grid\n          container={true}\n          direction='column'\n        >\n          <Typography variant='body2' color='textPrimary'>\n            {t('pimProductDrawer.seriesNumber')}\n          </Typography>\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='seriesNumber'\n            props={{\n              inputProps: {\n                value: selectedPimSeries.get('productNumber'),\n                disabled: true,\n                classes: {\n                  root: classes.seriesNumber\n                }\n              },\n              formControlProps: {\n                fullWidth: true\n              },\n            }}\n            component={FieldTextField}\n          />\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public toggleProductNumberDialog = (open: boolean) => {\n    this.setState({ productNumberDialogOpen: open });\n  }\n\n  public priceInfo = () => {\n    const {\n      setSelectedCurrency,\n      t,\n      dispatch,\n      classes,\n      selectedCurrency,\n      formValues,\n      canManagePimPricing,\n    } = this.props;\n\n    const prices = [\n      {\n        label: t('pimProductDrawer.listPrice'),\n        calculatedLabel: t('pimProductDrawer.calculatedListPrice'),\n        name: `price.default.${selectedCurrency}.list`,\n        calculatedName: `price.default.${selectedCurrency}.calculatedPrice.list`,\n        isOverrideName: `price.default.${selectedCurrency}.listIsOverride`,\n        value: formValues?.getIn(['price', 'default', selectedCurrency, 'list']),\n        calculatedValue: formValues?.getIn(['price', 'default', selectedCurrency, 'calculatedPrice', 'list']),\n        isOverride: formValues?.getIn(['price', 'default', selectedCurrency, 'listIsOverride']),\n      },\n      {\n        label: t('pimProductDrawer.sellPrice'),\n        calculatedLabel: t('pimProductDrawer.calculatedSellPrice'),\n        name: `price.default.${selectedCurrency}.sell`,\n        calculatedName: `price.default.${selectedCurrency}.calculatedPrice.sell`,\n        isOverrideName: `price.default.${selectedCurrency}.sellIsOverride`,\n        value: formValues?.getIn(['price', 'default', selectedCurrency, 'sell']),\n        calculatedValue: formValues?.getIn(['price', 'default', selectedCurrency, 'calculatedPrice', 'sell']),\n        isOverride: formValues?.getIn(['price', 'default', selectedCurrency, 'sellIsOverride']),\n      },\n      {\n        label: t('pimProductDrawer.cost'),\n        calculatedLabel: t('pimProductDrawer.calculatedCost'),\n        name: `price.default.${selectedCurrency}.cost`,\n        calculatedName: `price.default.${selectedCurrency}.calculatedPrice.cost`,\n        isOverrideName: `price.default.${selectedCurrency}.costIsOverride`,\n        value: formValues?.getIn(['price', 'default', selectedCurrency, 'cost']),\n        calculatedValue: formValues?.getIn(['price', 'default', selectedCurrency, 'calculatedPrice', 'cost']),\n        isOverride: formValues?.getIn(['price', 'default', selectedCurrency, 'costIsOverride']),\n      },\n    ];\n\n    const isPOA = formValues && formValues.getIn(['price', 'default', selectedCurrency, 'isPoa']);\n    const calculatedIsPOA = formValues && formValues.getIn(['price', 'default', selectedCurrency, 'calculatedPrice', 'isPoa']);\n    const isPoaIsOverride = formValues && formValues.getIn(['price', 'default', selectedCurrency, 'isPoaIsOverride']);\n\n    return (\n      <Grid container={true} item={true} wrap='nowrap'>\n        <AttachMoneyIcon fontSize='small' className={classes.icon} />\n        <Grid container={true}>\n          <Typography variant='body2' color='textPrimary' style={{ width: '100%', marginBottom: 12 }}>\n            {t('pimProductDrawer.priceInfo')}\n          </Typography>\n          <Grid item={true} xs={3}>\n            <CurrencySelector\n              selectedCurrency={selectedCurrency}\n              setSelectedCurrency={setSelectedCurrency}\n              selectProps={{\n                fullWidth: true\n              }}\n            />\n          </Grid>\n          <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap' style={{ margin: '12px 0px' }}>\n            <Grid\n              item={true}\n              container={true}\n              alignItems='center'\n            >\n              <Tooltip title={ canManagePimPricing ? '' : t('permissions.noPermissionTooltip') }>\n                <span>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={isPoaIsOverride ? `price.default.${selectedCurrency}.isPoa` : `price.default.${selectedCurrency}.calculatedPrice.isPoa`}\n                    component={FieldSwitch}\n                    props={{\n                      label: isPoaIsOverride ? t('configuratorPage.optionsWidget.priceIsPOA') : t('pimProductDrawer.calculatedPriceIsPoa'),\n                      inputProps: {\n                        color: 'primary',\n                        disabled: !canManagePimPricing,\n                        onChange: (e) => {\n                          const newValue = e.target.checked;\n                          if (!isPoaIsOverride && calculatedIsPOA !== newValue) {\n                            dispatch(change(PIM_PRODUCT_DRAWER_FORM, `price.default.${selectedCurrency}.isPoaIsOverride`, true));\n                            dispatch(change(PIM_PRODUCT_DRAWER_FORM, `price.default.${selectedCurrency}.calculatedPrice.isPoa`, calculatedIsPOA ?? false));\n                            dispatch(change(PIM_PRODUCT_DRAWER_FORM, `price.default.${selectedCurrency}.isPoa`, newValue));\n                          }\n                        }\n                      }\n                    }}\n                  />\n                </span>\n              </Tooltip>\n              <Tooltip title={t('configuratorPage.optionsWidget.priceIsPOATooltip')}>\n                <InfoIcon fontSize='small' color='action' style={{marginLeft: -8, cursor: 'pointer'}} />\n              </Tooltip>\n            </Grid>\n            <Tooltip title={ canManagePimPricing ? '' : t('permissions.noPermissionTooltip') }>\n              <span style={{ whiteSpace: 'nowrap' }}>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={`price.default.${selectedCurrency}.isPoaIsOverride`}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('pimProductDrawer.poaOverrideSwitchLabel'),\n                    inputProps: {\n                      color: 'primary',\n                      disabled: !canManagePimPricing\n                    }\n                  }}\n                />\n              </span>\n            </Tooltip>\n          </Grid>\n          {\n            prices.map((price, index) => (\n              <Grid key={index} container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                <Grid item={true} xs={5}>\n                  <Typography variant='subtitle1' color='textPrimary'>\n                    {price.isOverride ? price.label : price.calculatedLabel}\n                  </Typography>\n                  {price.name.includes('list') && isPricePoa({ priceIsOverride: price.isOverride, isPoaIsOverride, isPoaCustom: isPOA, isPoaCalculated: calculatedIsPOA })\n                  ? <Typography align='left' variant='subtitle1' style={{ color: 'darkgrey', height: 50.67 }}>\n                      {price.isOverride ? price.label : price.calculatedLabel}\n                    </Typography>\n                  : <Tooltip title={ canManagePimPricing ? '' : t('permissions.noPermissionTooltip') }>\n                      <span>\n                        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                          name={price.isOverride ? price.name : price.calculatedName}\n                          props={{\n                            placeholder: price.isOverride ? price.label : price.calculatedLabel,\n                            formControlProps: {\n                              fullWidth: true\n                            },\n                            inputProps: {\n                              type: 'number',\n                              disabled: !canManagePimPricing,\n                              onChange: (e) => {\n                                const newValue = e.target.value;\n                                if (!price.isOverride && price.calculatedValue !== newValue) {\n                                  dispatch(change(PIM_PRODUCT_DRAWER_FORM, price.isOverrideName, true));\n                                  dispatch(change(PIM_PRODUCT_DRAWER_FORM, price.calculatedName, price.calculatedValue ?? null));\n                                  dispatch(change(PIM_PRODUCT_DRAWER_FORM, price.name, newValue));\n                                }\n                              }\n                            }\n                          }}\n                          component={FieldTextField}\n                        />\n                      </span>\n                    </Tooltip>\n                  }\n                </Grid>\n                <Tooltip title={ canManagePimPricing ? '' : t('permissions.noPermissionTooltip') }>\n                  <span>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={price.isOverrideName}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('pimProductDrawer.pricingOverrideSwitchLabel'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !canManagePimPricing\n                        }\n                      }}\n                    />\n                  </span>\n                </Tooltip>\n              </Grid>\n            ))\n          }\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public productInfo = () => {\n    const {\n      t,\n      classes,\n      selectedPimSeries,\n      selectedPimProduct,\n      childOrParentIsAtsUser\n    } = this.props;\n    const {\n      haveInformed\n    } = this.state;\n\n    const isConfigurator = selectedPimSeries.get('isConfigurator');\n    const invalid = selectedPimProduct.get('invalid');\n\n    return (\n      <Grid\n        container={true}\n        item={true}\n        wrap='nowrap'\n      >\n        <ProductNumberDialog\n          open={this.state.productNumberDialogOpen}\n          onClose={() => {\n            setTimeout(() => this.refProductNumber.current.blur(), 25);\n            this.toggleProductNumberDialog(false);\n          }}\n          onConfirm={() => {\n            this.toggleProductNumberDialog(false);\n          }}\n        />\n        <Edit fontSize='small' className={classes.icon} />\n        <Grid\n          container={true}\n          direction='column'\n        >\n          <Grid container={true}>\n            <Typography variant='body2' color='textPrimary'>\n              {t('pimProductDrawer.productInfo')}\n            </Typography>\n            {invalid && childOrParentIsAtsUser && <Tooltip title={t('pimProductDrawer.flagTooltip')}><FlagIcon color='error' className={classes.flagIcon}/></Tooltip>}\n          </Grid>\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='productNumber'\n            props={{\n              label: t('pimProductDrawer.productNumber'),\n              require: true,\n              formControlProps: {\n                fullWidth: true\n              },\n              inputProps: {\n                inputRef: this.refProductNumber,\n                onFocus: () => {\n                  if (isConfigurator && !haveInformed) {\n                    this.setState({ haveInformed: true });\n                    this.toggleProductNumberDialog(true);\n                  }\n                }\n              }\n            }}\n            component={FieldTextField}\n            validate={[isNotEmptyStringRequired]}\n          />\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='itemNumber'\n            props={{\n              label: t('pimProductDrawer.itemNumber'),\n              formControlProps: {\n                fullWidth: true\n              },\n            }}\n            component={FieldTextField}\n          />\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='upc'\n            props={{\n              label: t('pimProductDrawer.upc'),\n              formControlProps: {\n                fullWidth: true\n              },\n            }}\n            component={FieldTextField}\n            validate={[this._maxStringLength]}\n          />\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='sku'\n            props={{\n              label: t('pimProductDrawer.sku'),\n              formControlProps: {\n                fullWidth: true\n              },\n            }}\n            component={FieldTextField}\n            validate={[this._maxStringLength]}\n          />\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            name='description'\n            props={{\n              label: t('pimProductDrawer.productDescription'),\n              require: true,\n              formControlProps: {\n                fullWidth: true\n              }\n            }}\n            component={FieldTextField}\n            validate={[isNotEmptyStringRequired]}\n          />\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public options = () => {\n    const {\n      t,\n      classes,\n      theme,\n      selectedPimSeries,\n      selectedPimProduct,\n      formValues,\n      isCheckingProduct,\n      pimMatchingAttributes,\n      dispatch\n    } = this.props;\n\n    const disableOptions = (selectedPimSeries.get('isConfigurator') && !selectedPimProduct.get('invalid')) || isCheckingProduct;\n    const seriesAttributes = selectedPimSeries.get('attributes');\n    const optionKeys = seriesAttributes.reduce((acc, attribute: IMap<Attribute>, key: string) => !attribute.get('isAttribute') ? acc.push(key) : acc, List());\n\n    const invalidAttributesInfo = selectedPimProduct?.get('invalidAttributesInfo');\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n      >\n        <Grid\n          container={true}\n          alignItems='center'\n          className={classes.title}\n        >\n          <ViewListOutlinedIcon fontSize='small' className={classes.icon} />\n          <Typography variant='body2' color='textPrimary'>\n            {t('pimProductDrawer.setProductOptions')}\n          </Typography>\n        </Grid>\n        <Grid\n          container={true}\n        >\n          {\n            optionKeys.count()\n              ? optionKeys.map((optionKey, optionIndex) => {\n                  const option = seriesAttributes.get(optionKey);\n                  const attributesOptionValue = formValues && formValues.getIn(['attributes', option.get('key')]);\n                  const optionHasNoActiveValue = !option.get('values').find(value => value.get('status') === 'active');\n                  const disableResetButton = disableOptions || (List.isList(attributesOptionValue) ? attributesOptionValue.size === 0 : !Boolean(attributesOptionValue));\n                  const displayAsAttribute = option.get('displayAsAttribute');\n                  const useSwatch = option.get('useSwatch');\n                  const useAsFinalImage = option.get('declareOptionBasedProductImageAsFinal');\n                  const useAsFinalCutsheet = option.get('declareOptionBasedManufacturerCutsheetAsFinal');\n\n                  const invalidAttributeInfo = invalidAttributesInfo?.get(optionKey);\n                  return (\n                    <Grid\n                      key={optionIndex}\n                      container={true}\n                      direction='column'\n                      item={true}\n                      xs={useSwatch ? 12 : 6}\n                      className={classes.option}\n                      wrap='nowrap'\n                    >\n                      <Grid\n                        container={true}\n                        direction='row'\n                        justify='space-between'\n                        alignItems='center'\n                      >\n                        <Typography\n                          variant='body2'\n                          color={disableOptions ? 'textSecondary' : 'textPrimary'}\n                          style={optionHasNoActiveValue ? {color: theme.palette.grey[400], textDecorationLine: 'line-through'} : null}\n                        >{option.get('name') + (option.get('require') ? ' *' : '')}</Typography>\n                        <Button\n                          onClick={() => {\n                            // reset checkbox field to empty list but radio field to null\n                            if (option.get('isOption')) {\n                              dispatch(change(PIM_PRODUCT_DRAWER_FORM, `attributes.${option.get('key')}`, List()));\n                            } else {\n                              dispatch(change(PIM_PRODUCT_DRAWER_FORM, `attributes.${option.get('key')}`, null));\n                              // if radio option is reset then reset image or cutsheet that may cascade from the option\n                              if (useAsFinalImage || useAsFinalCutsheet) {\n                                this.updateImageOrCutsheetByOption({useAsFinalImage, useAsFinalCutsheet, selectedRadioOption: null});\n                              }\n                            }\n                          }}\n                          color='primary'\n                          style={{marginRight: 24}}\n                          disabled={disableResetButton}\n                        >\n                          {t('pimProductDrawer.reset')}\n                        </Button>\n                      </Grid>\n                      {\n                        displayAsAttribute && (\n                          <Typography color='textPrimary' className={classes.displayAsAttributeChip} style={{marginRight: 24}}>\n                            {t('SeriesDetailPage.displayAsAttribute')}\n                          </Typography>\n                        )\n                      }\n\n                      {\n                        invalidAttributeInfo && (\n                          <Grid container={true} wrap='nowrap'>\n                            <WarningIcon className={classes.warningIcon} />\n                            <Typography color='textPrimary' style={{ fontWeight: 700 }}>\n                              {invalidAttributeInfo}\n                            </Typography>\n                          </Grid>\n                        )\n                      }\n\n                      <Grid\n                        container={true}\n                        direction={useSwatch ? 'row' : 'column'}\n                        style={{margin: useSwatch ? theme.spacing(2,0) : null}}\n                      >\n                      {\n                        option.get('values').map((value, valueIndex) => {\n                          const isMatchingAttributeOptionValue = pimMatchingAttributes && pimMatchingAttributes.getIn([optionKey, 'values'])?.findIndex(optionValue => optionValue.get('id') === value.get('id')) > -1;\n                          const valueStatusNotActive = value.get('status') !== 'active';\n                          const wholeOptionsNotDeleted = option.get('values').find(_value => _value.get('status') !== 'deleted');\n                          const swatchId = value.get('swatch');\n                          const optionImageId = value.get('optionBasedProductImage');\n                          const optionCutsheets = value.get('optionBasedManufacturerCutsheet');\n\n                          return (useSwatch\n                          ? <Grid\n                              key={valueIndex}\n                              container={true}\n                              direction='column'\n                              alignItems='center'\n                              justify='center'\n                              item={true}\n                              xs={3}\n                              style={{ padding: 4 }}\n                            >\n                              {\n                                option.get('isOption')\n                                  ? <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                                      name={`attributes.${option.get('key')}`}\n                                      component={FieldCheckbox}\n                                      props={{\n                                        checkedIcon: <CheckIcon style={{color: theme.palette.primary[900], fontSize: '2.5rem'}}/>,\n                                        disabled: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue),\n                                        inputProps: {\n                                          className: classes.swatchInput,\n                                          style: {\n                                            visibility: attributesOptionValue && attributesOptionValue.find(selectedValue => selectedValue === value.get('id')) ? 'visible' : 'hidden'\n                                          }\n                                        },\n                                        formControlProps: {\n                                          style: {\n                                            border: attributesOptionValue && attributesOptionValue.find(selectedValue => selectedValue === value.get('id'))\n                                                      ? valueStatusNotActive\n                                                        ? `3px solid ${theme.palette.grey[600]}`\n                                                        : `3px solid ${theme.palette.primary[900]}`\n                                                      : valueStatusNotActive\n                                                        ? `3px solid ${theme.palette.grey[600]}`\n                                                        : `3px solid ${theme.palette.grey[400]}`\n                                          }\n                                        },\n                                        formControlLabelProps: {\n                                          label: <Tooltip\n                                                    title={\n                                                      <Grid>\n                                                        <Typography color='inherit' variant='body2'>{value.get('description')}</Typography>\n                                                        {!swatchId && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.swatchNotAvailable')}</Typography>}\n                                                        {valueStatusNotActive && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.optionDiscontinued')}</Typography>}\n                                                      </Grid>\n                                                  }>\n                                                  <Grid className={classes.swatchBox}>\n                                                    {/* cross over diagonal line when option is discontinued*/}\n                                                    {valueStatusNotActive &&\n                                                      <svg className={classes.crossOverLine}>\n                                                        <line x1='100%' y1='100%' x2='0' y2='0' style={{stroke: theme.palette.grey[600], strokeWidth: 3}}/>\n                                                      </svg>\n                                                    }\n                                                    {swatchId\n                                                    ? <Image\n                                                        src={swatchId || ''}\n                                                        aspectRatio={'100%'}\n                                                        fromService={true}\n                                                        cover={true}\n                                                        style={{opacity: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue) ? 0.2 : 1}}\n                                                      />\n                                                    : <TextureIcon\n                                                        className={classes.textureIcon}\n                                                        style={{\n                                                          color: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue) ? theme.palette.grey[200] : theme.palette.grey[400]\n                                                        }}\n                                                      />\n                                                    }\n                                                  </Grid>\n                                                </Tooltip>,\n                                          style: {\n                                            margin: 0,\n                                            width: '100%',\n                                            height: '100%',\n                                            position: 'relative'\n                                          }\n                                        },\n                                        checkedValue: value.get('id'),\n                                        helperText: false,\n                                      }}\n                                      validate={option.get('require') && wholeOptionsNotDeleted ? requiredCheckbox : null}\n                                    />\n                                  : <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                      name={`attributes.${option.get('key')}`}\n                                      component={FieldRadio}\n                                      props={{\n                                        onChange: (e) => {\n                                          dispatch(change(PIM_PRODUCT_DRAWER_FORM, `attributes.${option.get('key')}`, value.get('id')));\n                                          if (useAsFinalImage || useAsFinalCutsheet) {\n                                            this.updateImageOrCutsheetByOption({useAsFinalImage, useAsFinalCutsheet, selectedRadioOption: value});\n                                          }\n                                        },\n                                        checkedIcon: <CheckIcon style={{color: theme.palette.primary[900], fontSize: '2.5rem'}}/>,\n                                        disabled: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue),\n                                        inputProps: {\n                                          className: classes.swatchInput,\n                                          style: {\n                                            visibility: attributesOptionValue === value.get('id') ? 'visible' : 'hidden'\n                                          }\n                                        },\n                                        formControlProps: {\n                                          style: {\n                                            border: attributesOptionValue === value.get('id')\n                                                      ? valueStatusNotActive\n                                                        ? `3px solid ${theme.palette.grey[600]}`\n                                                        : `3px solid ${theme.palette.primary[900]}`\n                                                      : valueStatusNotActive\n                                                        ? `3px solid ${theme.palette.grey[600]}`\n                                                        : `3px solid ${theme.palette.grey[400]}`\n                                          }\n                                        },\n                                        formControlLabelProps: {\n                                          label: <Tooltip\n                                                    title={\n                                                      <Grid>\n                                                        <Typography color='inherit' variant='body2'>{value.get('description')}</Typography>\n                                                        {!swatchId && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.swatchNotAvailable')}</Typography>}\n                                                        {valueStatusNotActive && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.optionDiscontinued')}</Typography>}\n                                                      </Grid>\n                                                  }>\n                                                  <Grid className={classes.swatchBox}>\n                                                    {/* cross over diagonal line when option is discontinued*/}\n                                                    {valueStatusNotActive &&\n                                                      <svg className={classes.crossOverLine}>\n                                                        <line x1='100%' y1='100%' x2='0' y2='0' style={{stroke: theme.palette.grey[600], strokeWidth: 3}}/>\n                                                      </svg>\n                                                    }\n                                                    {swatchId\n                                                    ? <Image\n                                                        src={swatchId || ''}\n                                                        aspectRatio={'100%'}\n                                                        fromService={true}\n                                                        cover={true}\n                                                        style={{opacity: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue) ? 0.2 : 1}}\n                                                      />\n                                                    : <TextureIcon\n                                                        className={classes.textureIcon}\n                                                        style={{\n                                                          color: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue) ? theme.palette.grey[200] : theme.palette.grey[400]\n                                                        }}\n                                                      />\n                                                    }\n                                                  </Grid>\n                                                </Tooltip>,\n                                          style: {\n                                            margin: 0,\n                                            width: '100%',\n                                            height: '100%',\n                                            position: 'relative'\n                                          }\n                                        },\n                                        formHelperTextProps: {\n                                          style: {\n                                            position: 'absolute',\n                                            bottom: '-60%'\n                                          }\n                                        },\n                                        checkedValue: value.get('id'),\n                                        helperText: valueIndex === option.get('values').count() - 1 ? true : false,\n                                      }}\n                                      validate={option.get('require') && wholeOptionsNotDeleted ? required : null}\n                                    />\n                              }\n                              <Typography\n                                color='textPrimary'\n                                className={classNames({\n                                  [classes.truncateText]: true,\n                                })}\n                                style={{\n                                  color: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue) ? theme.palette.grey[400] : null,\n                                  textDecorationLine: valueStatusNotActive ? 'line-through' : null,\n                                  width: '100%',\n                                  textAlign: 'center',\n                                  marginTop: 12\n                                }}\n                              >{value.get('description')}</Typography>\n                            </Grid>\n                          : <Grid key={valueIndex} className={classes.optionValue}>\n                              {\n                                option.get('isOption')\n                                  ? <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                                      name={`attributes.${option.get('key')}`}\n                                      component={FieldCheckbox}\n                                      props={{\n                                        label: value.get('description'),\n                                        checkedValue: value.get('id'),\n                                        helperText: valueIndex === option.get('values').count() - 1 ? true : false,\n                                        inputProps: {\n                                          color: 'primary',\n                                          disabled: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue)\n                                        },\n                                        formControlLabelProps: {\n                                          style: {\n                                            color: theme.palette.grey[400],\n                                            textDecorationLine: valueStatusNotActive ? 'line-through' : null\n                                          }\n                                        }\n                                      }}\n                                      validate={option.get('require') && wholeOptionsNotDeleted ? requiredCheckbox : null}\n                                    />\n                                  : <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                      name={`attributes.${option.get('key')}`}\n                                      component={FieldRadio}\n                                      props={{\n                                        onChange: (e) => {\n                                          dispatch(change(PIM_PRODUCT_DRAWER_FORM, `attributes.${option.get('key')}`, value.get('id')));\n                                          if (useAsFinalImage || useAsFinalCutsheet) {\n                                            this.updateImageOrCutsheetByOption({useAsFinalImage, useAsFinalCutsheet, selectedRadioOption: value});\n                                          }\n                                        },\n                                        label: value.get('description'),\n                                        color: 'primary',\n                                        checkedValue: value.get('id'),\n                                        helperText: valueIndex === option.get('values').count() - 1 ? true : false,\n                                        disabled: disableOptions || valueStatusNotActive || (selectedPimSeries.get('isConfigurator') && !isMatchingAttributeOptionValue),\n                                        formControlLabelProps: {\n                                          style: {\n                                            color: theme.palette.grey[400],\n                                            textDecorationLine: valueStatusNotActive ? 'line-through' : null\n                                          }\n                                        }\n                                      }}\n                                      validate={option.get('require') && wholeOptionsNotDeleted ? required : null}\n                                    />\n                              }\n                            </Grid>\n                          );\n                        })\n                      }\n                      </Grid>\n                    </Grid>\n                  );\n                })\n            : <Typography className={classes.noOptionsAvailable}>\n                {t('pimProductDrawer.noSelectableOptions')}\n              </Typography>\n          }\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public attachments = () => {\n    const {\n      t,\n      classes,\n    } = this.props;\n    const { selectedLanguage } = this.state;\n\n    const renderUpload = (mediaKey: IMediaKey, index: number) => {\n      const UploadComponent = mediaKey.fullUpload ? FullMediaUpload : MediaUpload;\n      return <UploadComponent key={index} formName={PIM_PRODUCT_DRAWER_FORM} mediaKey={mediaKey} selectedLanguage={selectedLanguage} />;\n    };\n    // Split the design files into two balanced columns.\n    const designColumnSplit = Math.ceil(designMediaKeys.length / 2);\n\n    return (\n      <Grid\n        container={true}\n        alignItems='center'\n        className={classes.title}\n      >\n        <Grid\n          container={true}\n          justify='space-between'\n          className={classes.title}\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            alignItems='center'\n            className={classes.title}\n          >\n            <AttachFile fontSize='small' className={classes.icon} />\n            <Typography variant='body2' color='textPrimary'>\n              {t('pimProductDrawer.attachment')}\n            </Typography>\n          </Grid>\n          <FileLocalizationSelector\n            selectedLanguage={selectedLanguage}\n            setSelectedLanguage={(_selectedLanguage) => this.setState({ selectedLanguage: _selectedLanguage })}\n          />\n        </Grid>\n        <Grid container={true} className={classes.mediaContainer}>\n          <Typography variant='body2' color='textPrimary'>\n            {t('pimProductDrawer.media')}\n          </Typography>\n          <Grid container={true} justify='space-between'>\n            <Grid container={true} item={true} direction='column' spacing={1} className={classes.fileContainer}>\n              { mediaKeys1.filter((mediaKey) => !mediaKey.disabledForProduct).map((mediaKey: IMediaKey, index: number) => {\n                const UploadComponent = mediaKey.fullUpload ? FullMediaUpload : MediaUpload;\n                return (\n                  <UploadComponent\n                    key={index}\n                    formName={PIM_PRODUCT_DRAWER_FORM}\n                    mediaKey={mediaKey}\n                    selectedLanguage={selectedLanguage}\n                    isPimProductEditDrawer={true}\n                    uploadedCutSheetFileIds={this.state.uploadedCutsheetFileIds}\n                    setUploadedCutSheetFileIds={(_uploadedCutsheetFileIds) => this.setState({ uploadedCutsheetFileIds: _uploadedCutsheetFileIds })}\n                  />\n                );\n              })\n              }\n            </Grid>\n            <Grid container={true} item={true} direction='column' spacing={1} className={classes.fileContainer}>\n              { mediaKeys2.map(renderUpload) }\n            </Grid>\n          </Grid>\n        </Grid>\n        <Grid container={true} className={classes.mediaContainer}>\n          <Typography variant='body2' color='textPrimary'>\n            {t('pimProductDrawer.designFiles')}\n          </Typography>\n          <Grid container={true} justify='space-between'>\n            <Grid container={true} item={true} direction='column' spacing={1} className={classes.fileContainer}>\n              { designMediaKeys.slice(0, designColumnSplit).map(renderUpload) }\n            </Grid>\n            <Grid container={true} item={true} direction='column' spacing={1} className={classes.fileContainer}>\n              { designMediaKeys.slice(designColumnSplit).map(renderUpload) }\n            </Grid>\n          </Grid>\n        </Grid>\n        { this.links() }\n      </Grid>\n    );\n  }\n\n  public links = () => {\n    const {\n      t,\n    } = this.props;\n    const { selectedLanguage } = this.state;\n\n    return (\n      <Grid item={true} xs={12}>\n        <Typography variant='body2' color='textPrimary'>\n          {t('pimProductDrawer.links')}\n        </Typography>\n\n        <Grid style={{ margin: 8 }}>\n          {\n            linkKeys.map((linkKey, index: number) => {\n              return (\n                <LinkItem\n                  key={index}\n                  formName={PIM_PRODUCT_DRAWER_FORM}\n                  mediaKey={linkKey}\n                  selectedLanguage={selectedLanguage}\n                />\n              );\n            })\n          }\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public _maxStringLength = (value) => maxStringLength(32)(value);\n\n  public render() {\n    const {\n      classes,\n      handleSubmit,\n      toggleDrawer,\n      isCheckingProduct,\n      pimMatchingProduct,\n      selectedPimProduct,\n      selectedPimProductId,\n      selectedPimSeries,\n      theme,\n      isProductConfigurable,\n      isProductConfigurableChecking,\n      formValues,\n      dispatch,\n      t\n    } = this.props;\n\n    // const hasValidProduct = pimMatchingProduct?.count();\n\n    const matchingProductIds = pimMatchingProduct && pimMatchingProduct.map(product => product.get('id')).filter(x => x);\n    const matchingProductIsCurrentProduct = matchingProductIds && matchingProductIds.includes(selectedPimProductId);\n    const otherMatchingProductIds = matchingProductIds && matchingProductIds.filter(id => id !== selectedPimProductId);\n    const otherMatchingProductIdsExist = otherMatchingProductIds && otherMatchingProductIds.size > 0;\n    const noProductCanBeConfig = pimMatchingProduct && pimMatchingProduct.size === 0;\n\n    const isConfigurator = selectedPimSeries.get('isConfigurator');\n\n    const selectedAttributeKeys = formValues?.get('attributes').filter((attr => typeof attr === 'number' || attr?.size));\n    const hasSelectedDisplayAsAttribute = selectedAttributeKeys?.some((value, attrKey) => selectedPimSeries.getIn(['attributes', attrKey, 'displayAsAttribute']));\n\n    return (\n      <Grid className={classes.drawerContainer}>\n        <DrawerEditHeader\n          title={selectedPimProduct.get('id') ? t('pimProductDrawer.editProductTitle') : t('pimProductDrawer.createProductTitle')}\n          hideExpandButton={true}\n          handleClose={() => toggleDrawer(false)}\n        />\n        <form\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          <Grid\n            container={true}\n            direction='column'\n            wrap='nowrap'\n          >\n            {/* Image & ProductInfo */}\n            <Grid\n              container={true}\n              justify='center'\n              alignContent='center'\n              wrap='nowrap'\n              className={classes.imageProductRow}\n            >\n              <Grid item={true} className={classes.imageLayout}>\n                { this.uploadPhoto() }\n              </Grid>\n              <Grid container={true} direction='column'>\n                { this.seriesNumber() }\n                { this.productInfo() }\n                { this.priceInfo() }\n              </Grid>\n            </Grid>\n\n            {/* Product Options */}\n            { this.options() }\n\n            {/* Attachment */}\n            { this.attachments() }\n          </Grid>\n          <Grid\n            style={{\n              position: 'sticky',\n              bottom: 0,\n              background: theme.palette.common.white,\n              padding: theme.spacing(2, 0),\n            }}\n          >\n            {\n              (!isProductConfigurableChecking && !this.state.stillHaveRequire && !isProductConfigurable) || (isConfigurator && hasSelectedDisplayAsAttribute)\n                ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                    <WarningIcon className={classes.warningIcon} style={{ marginTop: theme.spacing(1), marginBottom: theme.spacing(1) }}/>\n                    <Typography color='textPrimary' variant='caption'>\n                      {t('pimProductDrawer.productIsUnconfigurableWarning')}\n                    </Typography>\n                  </Grid>\n                : null\n            }\n            {(isCheckingProduct || isProductConfigurableChecking)\n              ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                  <CircularProgress size='1.5rem' style={{marginRight: 8}}/><Typography color='textSecondary'>{t('pimProductDrawer.checkingProduct')}</Typography>\n                </Grid>\n              : ((noProductCanBeConfig && isConfigurator) || this.state.stillHaveRequire)\n                  ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                      <WarningIcon className={classes.warningIcon} style={{ marginTop: theme.spacing(1), marginBottom: theme.spacing(1) }}/>\n                      <Typography color='textPrimary' style={{fontWeight: 700}}>{t('pimProductDrawer.requiredOptionsMissingWarning')}</Typography>\n                    </Grid>\n                  : otherMatchingProductIdsExist && !matchingProductIsCurrentProduct\n                    ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                        <WarningIcon className={classes.warningIcon} style={{ marginTop: theme.spacing(1), marginBottom: theme.spacing(1) }}/>\n                        <Typography color='textPrimary' variant='caption'>\n                          {t('pimProductDrawer.productDuplicatedShortWarning')}\n                        </Typography>\n                      </Grid>\n                    : null\n            }\n            <Grid\n                container={true}\n                // style={{\n                //   padding: theme.spacing(2, 0),\n                //   minHeight: '120px',\n                //   gap: theme.spacing(2)\n                // }}\n                wrap='nowrap'\n                alignItems='center'\n            >\n              <Button\n                  style={{ flex: 0 }}\n                  onClick={() => toggleDrawer(false)}\n                  color='primary'\n              >\n                {t('formButtons.cancel') }\n              </Button>\n              <Button\n                  style={{ flex: 0 }}\n                  type='submit'\n                  color='primary'\n                  disabled={isCheckingProduct || isProductConfigurableChecking || (noProductCanBeConfig && isConfigurator) || this.state.stillHaveRequire}\n              >\n                {t('formButtons.save') }\n              </Button>\n            </Grid>\n          </Grid>\n        </form>\n        <ProductAssetsConfirmDialog\n          open={this.state.productAssetsConfirmDialogOpen}\n          setOpen={(open: boolean) => this.setState({ productAssetsConfirmDialogOpen: open})}\n          selectedPimSeries={selectedPimSeries}\n          selectedPimProduct={this.props.selectedPimProduct}\n          setImageId={(imageId: string) => this.setState({ imageId })}\n          uploadedCutsheetFileIds={this.state.uploadedCutsheetFileIds}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawerContainer: {\n    width: '707px'\n  },\n  body: {\n    padding: theme.spacing(3.5)\n  },\n  imageContainer: {\n    display: 'flex',\n    width: '160px',\n    height: '160px'\n  },\n  imageProductRow: {\n    padding: theme.spacing(2.75, 0)\n  },\n  imageLayout: {\n    padding: theme.spacing(0, 3, 0, 2.75)\n  },\n  icon: {\n    marginRight: theme.spacing(),\n    color: theme.palette.text.secondary\n  },\n  seriesNumber: {\n    '&&&:before': {\n      borderBottomStyle: 'solid'\n    }\n  },\n  title: {\n    marginBottom: theme.spacing(1.5)\n  },\n  option: {\n    marginBottom: theme.spacing(2),\n    padding: theme.spacing(0, 0.5)\n  },\n  optionValue: {\n    marginBottom: theme.spacing()\n  },\n  fileContainer: {\n    width: '47%',\n    margin: theme.spacing()\n  },\n  mediaContainer: {\n    marginBottom: theme.spacing()\n  },\n  noOptionsAvailable: {\n    margin: theme.spacing(0, 0, 1.5, 3.5)\n  },\n  flagIcon: {\n    marginLeft: theme.spacing()\n  },\n  crossOverLine: {\n    width: '100%',\n    height: '100%',\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    zIndex: 1\n  },\n  swatchBox: {\n    width: '100%',\n    height: '100%',\n    position: 'absolute',\n    top: 0,\n    left: 0\n  },\n  textureIcon: {\n    fontSize: 76,\n    position: 'absolute',\n    top: -9,\n    left: -9,\n  },\n  swatchInput: {\n    width: 58,\n    height: 58,\n    pointerEvents: 'none',\n    zIndex: 1\n  },\n  truncateText: {\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n  },\n  warningIcon: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing(1),\n  },\n  displayAsAttributeChip: {\n    padding: theme.spacing(0.5, 1),\n    backgroundColor: theme.palette.secondary[50],\n    borderRadius: 20,\n    width: 'fit-content',\n    marginLeft: 'auto',\n  }\n});\n\nconst mapStateToProps = (state, props: IPimProductDrawerEditContentProps) => {\n  const selectedPimSeries = props.selectedPimSeries;\n  const selectedPimProduct = props.selectedPimProduct;\n\n  // indicates whether this is an existing product, existing product has 'series', while new product doesn't\n  const withData = selectedPimProduct.get('series');\n\n  // attributes of the product which should be the same as the series\n  const attributes = {};\n  // OrderedMap of attributes that have more than one options, ie. the collection of selectable attributes in the series\n  let optionIdsMap: OrderedMap<number, IMap<any>> = selectedPimSeries.get('attributes').reduce((acc, attribute: IMap<Attribute>, key: string) => {\n    if (attribute.get('isAttribute')) {\n      attributes[key] = seriesAttributesToProductAttributes(attribute, (attribute.get('values')?.find((value) => value.get('status') === 'active') as IMap<Attribute>) || attribute.getIn(['values', 0]));\n      return acc;\n    } else {\n      const isOption = attribute.get('isOption');\n      return acc.set(\n        attribute.get('id'),\n        Map({\n          optionkey: key,\n          isOption,\n          value: isOption\n            ? List()\n            : null\n        })\n      );\n    }\n  }, OrderedMap());\n\n  // set value of options & checkboxes for existing products & duplicated product templates\n  if (withData && !optionIdsMap.isEmpty()) {\n    selectedPimProduct.get('attributes').valueSeq().forEach((attribute: IMap<Attribute>) => {\n      const id = attribute.get('id');\n      if (optionIdsMap.has(id)) {\n        optionIdsMap = optionIdsMap.setIn([id, 'value'], optionIdsMap.getIn([id, 'isOption']) ? optionIdsMap.getIn([id, 'value']).push(attribute.get('optionId')) : attribute.get('optionId'));\n      }\n    });\n  }\n\n  const initialValues = (withData\n    ? selectedPimProduct.filter((value, key) => (\n        ['name', 'category', 'productNumber', 'description', 'file', 'id', 'itemNumber', 'price', 'unavailability', 'upc', 'sku'].includes(key)\n      ))\n    : selectedPimSeries.filter((value, key) => (\n        ['name', 'category', 'productNumber', 'description', 'file', 'itemNumber', 'price', 'unavailability'].includes(key)\n      ))\n    )\n    .set('series', selectedPimSeries.get('id'))\n    .set('attributes', optionIdsMap.mapEntries((entry) => { // set initial values for attributes\n      return [entry[1].get('optionkey'), entry[1].get('value')];\n    }))\n    .withMutations(ctx => {\n      // BE use 1/0 flag but we need boolean for switch button as it accepts boolean type otherwise we get console error\n      const price = ctx.get('price');\n      const transformedIsPoaPrice = price.reduce((acc, priceRegion, priceRegionKey) => {\n        const transformPriceRegionIsPoa = priceRegion.reduce((_acc, currency, currencyKey) => {\n          const isPoaBooleanValue = Boolean(currency.get('isPoa'));\n          let updatedCurrency = currency.set('isPoa', isPoaBooleanValue);\n          if (!withData && selectedPimSeries) {\n            updatedCurrency = updatedCurrency.set('calculatedPrice', selectedPimSeries.getIn(['price', priceRegionKey, currencyKey]));\n          }\n          return _acc.set(currencyKey, updatedCurrency);\n        }, Map());\n        return acc.set(priceRegionKey, transformPriceRegionIsPoa);\n      }, Map());\n      ctx.set('price', transformedIsPoaPrice);\n    });\n\n  return {\n    initialValues,\n    attributes,\n    ...createStructuredSelector({\n      formValues: getFormValues(PIM_PRODUCT_DRAWER_FORM),\n      isCheckingProduct: makeSelectMatchingProductChecking(),\n      pimMatchingProduct: makeSelectPimMatchingProduct(),\n      selectedPimProductId: makeSelectSelectedPimProductId(),\n      canManagePimPricing: makeSelectCanManagePimPricing(),\n      childOrParentIsAtsUser : makeSelectChildOrParentIsAtsUser(),\n      pimMatchingAttributes: makeSelectPimMatchingAttributes(),\n      isProductConfigurable: makeSelectIsProductConfigurable(),\n      isProductConfigurableChecking: makeSelectIsProductConfigurableChecking(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    createPimProductDraft: (product: IMap<Partial<Product>>, onSuccess: (result: IMap<Product>) => void) => {\n      dispatch(new AddPimProductDraftThenSearchPimProductsAction({ product, onSuccess }));\n    },\n    updatePIMProductDraft: (productId: number, productInfo: Partial<Product>, onSuccess: () => void) => {\n      dispatch(new UpdatePIMProductDraftAction({\n        productId,\n        productInfo,\n        onSuccess\n      }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IPimProductDrawerEditContentProps>> (\n  withAtsApi(),\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  withAmplitudeData,\n  withReduxFormValidationTranslation({ formName: PIM_PRODUCT_DRAWER_FORM }),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: PIM_PRODUCT_DRAWER_FORM,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(PimProductDrawerEdit);\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","/* eslint no-unused-vars:0 */\n// WIP\n\nimport * as React from 'react';\nimport {\n  InputLabel,\n  FormControl,\n  FormHelperText,\n  Select,\n  Theme,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  withStyles,\n  WithStyles\n} from '@material-ui/core/styles';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldInputProps,\n  WrappedFieldProps,\n} from 'redux-form';\n\nconst handleChange = (onChange) => (evt) => {\n  onChange((evt && evt.target && evt.target.value) || evt);\n};\n\nconst handleBlur = (onBlur) => (...args) => {\n  // onBlur(...args);\n};\n\nexport interface IFieldSelectComponentProps {\n  formControlProps?: object;\n  inputProps?: object;\n  excludeEmpty?: boolean;\n  label?: string;\n  require?: boolean;\n  input?: WrappedFieldInputProps;\n  helperText?: boolean;\n}\n\ninterface IFieldSelectProps extends IFieldSelectComponentProps {\n\n}\n\ntype FieldSelectProps = IFieldSelectProps & WrappedFieldProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nconst FieldSelect: React.SFC<FieldSelectProps> = (props) => {\n  const {\n    classes,\n    input,\n    meta: {\n      error,\n      touched,\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    require = false,\n    inputProps = {},\n    formControlProps = {},\n    children,\n    excludeEmpty,\n    helperText = true,\n    ...rest\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    if (excludeEmpty) {\n      customOverrides.value = customOverrides.value !== '' && customOverrides.value != null\n        ? customOverrides.value\n        : customOverrides.defaultValue;\n    } else {\n      customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n    }\n    delete customOverrides.defaultValue;\n  }\n  if (customOverrides.onChange != null) {\n    customOverrides.onChange = handleChange(customOverrides.onChange);\n  }\n  if (customOverrides.onBlur != null) {\n    customOverrides.onBlur = handleBlur(customOverrides.onBlur);\n  }\n\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps}>\n      { label && <InputLabel htmlFor='input-field'>{require ? `${label} *` : label}</InputLabel> }\n      <Select\n        classes={{ select: classes.select }}\n        {...customOverrides}\n        {...rest}\n      >\n        {children}\n      </Select>\n      {helperText && <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nconst muiStyles = (theme: Theme): StyleRules => ({\n  select: {\n    textAlign: 'left',\n  },\n});\n\nexport default withStyles(muiStyles)(FieldSelect);\n","/**\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\n */\nexport function arrayMove<T>(array: T[], from: number, to: number): T[] {\n  const newArray = array.slice();\n  newArray.splice(\n    to < 0 ? newArray.length + to : to,\n    0,\n    newArray.splice(from, 1)[0]\n  );\n\n  return newArray;\n}\n","export function isValidIndex(index: number | null): index is number {\n  return index !== null && index >= 0;\n}\n","import {arrayMove} from '../utilities';\nimport type {SortingStrategy} from '../types';\n\nexport const rectSortingStrategy: SortingStrategy = ({\n  layoutRects,\n  activeIndex,\n  overIndex,\n  index,\n}) => {\n  const newRects = arrayMove(layoutRects, overIndex, activeIndex);\n\n  const oldRect = layoutRects[index];\n  const newRect = newRects[index];\n\n  if (!newRect || !oldRect) {\n    return null;\n  }\n\n  return {\n    x: newRect.offsetLeft - oldRect.offsetLeft,\n    y: newRect.offsetTop - oldRect.offsetTop,\n    scaleX: newRect.width / oldRect.width,\n    scaleY: newRect.height / oldRect.height,\n  };\n};\n","import type {LayoutRect} from '@dnd-kit/core';\nimport type {SortingStrategy} from '../types';\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n  scaleX: 1,\n  scaleY: 1,\n};\n\nexport const verticalListSortingStrategy: SortingStrategy = ({\n  activeIndex,\n  activeNodeRect: fallbackActiveRect,\n  index,\n  layoutRects,\n  overIndex,\n}) => {\n  const activeNodeRect = layoutRects[activeIndex] ?? fallbackActiveRect;\n\n  if (!activeNodeRect) {\n    return null;\n  }\n\n  if (index === activeIndex) {\n    const overIndexRect = layoutRects[overIndex];\n\n    if (!overIndexRect) {\n      return null;\n    }\n\n    return {\n      x: 0,\n      y:\n        activeIndex < overIndex\n          ? overIndexRect.offsetTop +\n            overIndexRect.height -\n            (activeNodeRect.offsetTop + activeNodeRect.height)\n          : overIndexRect.offsetTop - activeNodeRect.offsetTop,\n      ...defaultScale,\n    };\n  }\n\n  const itemGap = getItemGap(layoutRects, index, activeIndex);\n\n  if (index > activeIndex && index <= overIndex) {\n    return {\n      x: 0,\n      y: -activeNodeRect.height - itemGap,\n      ...defaultScale,\n    };\n  }\n\n  if (index < activeIndex && index >= overIndex) {\n    return {\n      x: 0,\n      y: activeNodeRect.height + itemGap,\n      ...defaultScale,\n    };\n  }\n\n  return {\n    x: 0,\n    y: 0,\n    ...defaultScale,\n  };\n};\n\nfunction getItemGap(\n  layoutRects: LayoutRect[],\n  index: number,\n  activeIndex: number\n) {\n  const currentRect = layoutRects[index];\n  const previousRect = layoutRects[index - 1];\n  const nextRect = layoutRects[index + 1];\n\n  if (!currentRect) {\n    return 0;\n  }\n\n  if (activeIndex < index) {\n    return previousRect\n      ? currentRect.offsetTop - (previousRect.offsetTop + previousRect.height)\n      : nextRect\n      ? nextRect.offsetTop - (currentRect.offsetTop + currentRect.height)\n      : 0;\n  }\n\n  return nextRect\n    ? nextRect.offsetTop - (currentRect.offsetTop + currentRect.height)\n    : previousRect\n    ? currentRect.offsetTop - (previousRect.offsetTop + previousRect.height)\n    : 0;\n}\n","import React, {MutableRefObject, useEffect, useMemo, useRef} from 'react';\nimport {useDndContext, LayoutRect, UniqueIdentifier} from '@dnd-kit/core';\nimport {useIsomorphicLayoutEffect, useUniqueId} from '@dnd-kit/utilities';\n\nimport type {SortingStrategy} from '../types';\nimport {getSortedRects} from '../utilities';\nimport {rectSortingStrategy} from '../strategies';\n\nexport interface Props {\n  children: React.ReactNode;\n  items: (UniqueIdentifier | {id: UniqueIdentifier})[];\n  strategy?: SortingStrategy;\n  id?: string;\n}\n\nconst ID_PREFIX = 'Sortable';\n\ninterface ContextDescriptor {\n  activeIndex: number;\n  containerId: string;\n  disableTransforms: boolean;\n  items: UniqueIdentifier[];\n  overIndex: number;\n  useDragOverlay: boolean;\n  sortedRects: LayoutRect[];\n  strategy: SortingStrategy;\n  wasSorting: MutableRefObject<boolean>;\n}\n\nexport const Context = React.createContext<ContextDescriptor>({\n  activeIndex: -1,\n  containerId: ID_PREFIX,\n  disableTransforms: false,\n  items: [],\n  overIndex: -1,\n  useDragOverlay: false,\n  sortedRects: [],\n  strategy: rectSortingStrategy,\n  wasSorting: {current: false},\n});\n\nexport function SortableContext({\n  children,\n  id,\n  items: userDefinedItems,\n  strategy = rectSortingStrategy,\n}: Props) {\n  const {\n    active,\n    overlayNode,\n    droppableRects,\n    over,\n    recomputeLayouts,\n    willRecomputeLayouts,\n  } = useDndContext();\n  const containerId = useUniqueId(ID_PREFIX, id);\n  const useDragOverlay = Boolean(overlayNode.rect !== null);\n  const items = useMemo(\n    () =>\n      userDefinedItems.map((item) =>\n        typeof item === 'string' ? item : item.id\n      ),\n    [userDefinedItems]\n  );\n  const activeIndex = active ? items.indexOf(active.id) : -1;\n  const isSorting = activeIndex !== -1;\n  const wasSorting = useRef(isSorting);\n  const overIndex = over ? items.indexOf(over.id) : -1;\n  const previousItemsRef = useRef(items);\n  const sortedRects = getSortedRects(items, droppableRects);\n  const itemsHaveChanged = !isEqual(items, previousItemsRef.current);\n  const disableTransforms =\n    (overIndex !== -1 && activeIndex === -1) || itemsHaveChanged;\n\n  useIsomorphicLayoutEffect(() => {\n    if (itemsHaveChanged && isSorting && !willRecomputeLayouts) {\n      // To-do: Add partial recompution of only subset of rects\n      recomputeLayouts();\n    }\n  }, [itemsHaveChanged, isSorting, recomputeLayouts, willRecomputeLayouts]);\n\n  useEffect(() => {\n    previousItemsRef.current = items;\n  }, [items]);\n\n  useEffect(() => {\n    requestAnimationFrame(() => {\n      wasSorting.current = isSorting;\n    });\n  }, [isSorting]);\n\n  const contextValue = useMemo(\n    (): ContextDescriptor => ({\n      activeIndex,\n      containerId,\n      disableTransforms,\n      items,\n      overIndex,\n      useDragOverlay,\n      sortedRects,\n      strategy,\n      wasSorting,\n    }),\n    [\n      activeIndex,\n      containerId,\n      disableTransforms,\n      items,\n      overIndex,\n      sortedRects,\n      useDragOverlay,\n      strategy,\n      wasSorting,\n    ]\n  );\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>;\n}\n\nfunction isEqual(arr1: string[], arr2: string[]) {\n  return arr1.join() === arr2.join();\n}\n","import type {\n  LayoutRect,\n  UniqueIdentifier,\n  UseDndContextReturnValue,\n} from '@dnd-kit/core';\n\nexport function getSortedRects(\n  items: UniqueIdentifier[],\n  layoutRects: UseDndContextReturnValue['droppableRects']\n) {\n  return items.reduce<LayoutRect[]>((accumulator, id, index) => {\n    const layoutRect = layoutRects.get(id);\n\n    if (layoutRect) {\n      accumulator[index] = layoutRect;\n    }\n\n    return accumulator;\n  }, Array(items.length));\n}\n","import {CSS} from '@dnd-kit/utilities';\n\nimport type {AnimateLayoutChanges, SortableTransition} from './types';\n\nexport const defaultAnimateLayoutChanges: AnimateLayoutChanges = ({\n  isSorting,\n  index,\n  newIndex,\n  transition,\n}) => {\n  if (!transition) {\n    return false;\n  }\n\n  if (isSorting) {\n    return true;\n  }\n\n  return newIndex !== index;\n};\n\nexport const defaultTransition: SortableTransition = {\n  duration: 200,\n  easing: 'ease',\n};\n\nexport const transitionProperty = 'transform';\n\nexport const disabledTransition = CSS.Transition.toString({\n  property: transitionProperty,\n  duration: 0,\n  easing: 'linear',\n});\n\nexport const defaultAttributes = {\n  roleDescription: 'sortable',\n};\n","import {useContext, useEffect, useMemo, useRef} from 'react';\nimport {useDraggable, useDroppable, UseDraggableArguments} from '@dnd-kit/core';\nimport {CSS, useCombinedRefs} from '@dnd-kit/utilities';\n\nimport {Context} from '../components';\nimport type {SortingStrategy} from '../types';\nimport {arrayMove, isValidIndex} from '../utilities';\nimport {\n  defaultAnimateLayoutChanges,\n  defaultAttributes,\n  defaultTransition,\n  disabledTransition,\n  transitionProperty,\n} from './defaults';\nimport type {AnimateLayoutChanges, SortableTransition} from './types';\nimport {useDerivedTransform} from './utilities';\n\nexport interface Arguments extends UseDraggableArguments {\n  animateLayoutChanges?: AnimateLayoutChanges;\n  strategy?: SortingStrategy;\n  transition?: SortableTransition | null;\n}\n\nexport function useSortable({\n  animateLayoutChanges = defaultAnimateLayoutChanges,\n  attributes: userDefinedAttributes,\n  disabled,\n  data: customData,\n  id,\n  strategy: localStrategy,\n  transition = defaultTransition,\n}: Arguments) {\n  const {\n    items,\n    containerId,\n    activeIndex,\n    disableTransforms,\n    sortedRects,\n    overIndex,\n    useDragOverlay,\n    strategy: globalStrategy,\n    wasSorting,\n  } = useContext(Context);\n  const index = items.indexOf(id);\n  const data = useMemo(\n    () => ({sortable: {containerId, index, items}, ...customData}),\n    [containerId, customData, index, items]\n  );\n  const {rect, node, setNodeRef: setDroppableNodeRef} = useDroppable({\n    id,\n    data,\n  });\n  const {\n    active,\n    activeNodeRect,\n    activatorEvent,\n    attributes,\n    setNodeRef: setDraggableNodeRef,\n    listeners,\n    isDragging,\n    over,\n    transform,\n  } = useDraggable({\n    id,\n    data,\n    attributes: {\n      ...defaultAttributes,\n      ...userDefinedAttributes,\n    },\n    disabled,\n  });\n  const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n  const isSorting = Boolean(active);\n  const displaceItem =\n    isSorting &&\n    wasSorting.current &&\n    !disableTransforms &&\n    isValidIndex(activeIndex) &&\n    isValidIndex(overIndex);\n  const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n  const dragSourceDisplacement =\n    shouldDisplaceDragSource && displaceItem ? transform : null;\n  const strategy = localStrategy ?? globalStrategy;\n  const finalTransform = displaceItem\n    ? dragSourceDisplacement ??\n      strategy({\n        layoutRects: sortedRects,\n        activeNodeRect,\n        activeIndex,\n        overIndex,\n        index,\n      })\n    : null;\n  const newIndex =\n    isValidIndex(activeIndex) && isValidIndex(overIndex)\n      ? arrayMove(items, activeIndex, overIndex).indexOf(id)\n      : index;\n  const prevNewIndex = useRef(newIndex);\n  const shouldAnimateLayoutChanges = animateLayoutChanges({\n    active,\n    isDragging,\n    isSorting,\n    id,\n    index,\n    items,\n    newIndex: prevNewIndex.current,\n    transition,\n    wasSorting: wasSorting.current,\n  });\n  const derivedTransform = useDerivedTransform({\n    disabled: !shouldAnimateLayoutChanges,\n    index,\n    node,\n    rect,\n  });\n\n  useEffect(() => {\n    if (isSorting) {\n      prevNewIndex.current = newIndex;\n    }\n  }, [isSorting, newIndex]);\n\n  return {\n    active,\n    attributes,\n    activatorEvent,\n    rect,\n    index,\n    isSorting,\n    isDragging,\n    listeners,\n    node,\n    overIndex,\n    over,\n    setNodeRef,\n    setDroppableNodeRef,\n    setDraggableNodeRef,\n    transform: derivedTransform ?? finalTransform,\n    transition: getTransition(),\n  };\n\n  function getTransition() {\n    if (derivedTransform) {\n      // Temporarily disable transitions for a single frame to set up derived transforms\n      return disabledTransition;\n    }\n\n    if (shouldDisplaceDragSource || !transition) {\n      return null;\n    }\n\n    if (isSorting || shouldAnimateLayoutChanges) {\n      return CSS.Transition.toString({\n        ...transition,\n        property: transitionProperty,\n      });\n    }\n\n    return null;\n  }\n}\n","import {useEffect, useRef, useState} from 'react';\nimport {getBoundingClientRect, LayoutRect} from '@dnd-kit/core';\nimport type {Transform} from '@dnd-kit/utilities';\n\ninterface Arguments {\n  rect: React.MutableRefObject<LayoutRect | null>;\n  disabled: boolean;\n  index: number;\n  node: React.MutableRefObject<HTMLElement | null>;\n}\n\n/*\n * When the index of an item changes while sorting,\n * we need to temporarily disable the transforms\n */\nexport function useDerivedTransform({rect, disabled, index, node}: Arguments) {\n  const [derivedTransform, setDerivedtransform] = useState<Transform | null>(\n    null\n  );\n  const prevIndex = useRef(index);\n\n  useEffect(() => {\n    if (!disabled && index !== prevIndex.current && node.current) {\n      const initial = rect.current;\n\n      if (initial) {\n        const current = getBoundingClientRect(node.current);\n        const delta = {\n          x: initial.offsetLeft - current.offsetLeft,\n          y: initial.offsetTop - current.offsetTop,\n          scaleX: initial.width / current.width,\n          scaleY: initial.height / current.height,\n        };\n\n        if (delta.x || delta.y) {\n          setDerivedtransform(delta);\n        }\n      }\n    }\n\n    if (index !== prevIndex.current) {\n      prevIndex.current = index;\n    }\n  }, [disabled, index, node, rect]);\n\n  useEffect(() => {\n    if (derivedTransform) {\n      requestAnimationFrame(() => {\n        setDerivedtransform(null);\n      });\n    }\n  }, [derivedTransform]);\n\n  return derivedTransform;\n}\n","import {\n  closestCorners,\n  getViewRect,\n  getScrollableAncestors,\n  KeyboardCode,\n  RectEntry,\n  KeyboardCoordinateGetter,\n} from '@dnd-kit/core';\n\nconst directions: string[] = [\n  KeyboardCode.Down,\n  KeyboardCode.Right,\n  KeyboardCode.Up,\n  KeyboardCode.Left,\n];\n\nexport const sortableKeyboardCoordinates: KeyboardCoordinateGetter = (\n  event,\n  {context: {droppableContainers, translatedRect, scrollableAncestors}}\n) => {\n  if (directions.includes(event.code)) {\n    event.preventDefault();\n\n    if (!translatedRect) {\n      return;\n    }\n\n    const layoutRects: RectEntry[] = [];\n\n    Object.entries(droppableContainers).forEach(([id, container]) => {\n      if (container?.disabled) {\n        return;\n      }\n\n      const node = container?.node.current;\n\n      if (!node) {\n        return;\n      }\n\n      const rect = getViewRect(node);\n\n      switch (event.code) {\n        case KeyboardCode.Down:\n          if (translatedRect.top + translatedRect.height <= rect.top) {\n            layoutRects.push([id, rect]);\n          }\n          break;\n        case KeyboardCode.Up:\n          if (translatedRect.top >= rect.top + rect.height) {\n            layoutRects.push([id, rect]);\n          }\n          break;\n        case KeyboardCode.Left:\n          if (translatedRect.left >= rect.left + rect.width) {\n            layoutRects.push([id, rect]);\n          }\n          break;\n        case KeyboardCode.Right:\n          if (translatedRect.left + translatedRect.width <= rect.left) {\n            layoutRects.push([id, rect]);\n          }\n          break;\n      }\n    });\n\n    const closestId = closestCorners(layoutRects, translatedRect);\n\n    if (closestId) {\n      const newNode = droppableContainers[closestId]?.node.current;\n\n      if (newNode) {\n        const newScrollAncestors = getScrollableAncestors(newNode);\n        const hasDifferentScrollAncestors = newScrollAncestors.some(\n          (element, index) => scrollableAncestors[index] !== element\n        );\n        const newRect = getViewRect(newNode);\n        const offset = hasDifferentScrollAncestors\n          ? {\n              x: 0,\n              y: 0,\n            }\n          : {\n              x: translatedRect.width - newRect.width,\n              y: translatedRect.height - newRect.height,\n            };\n        const newCoordinates = {\n          x: newRect.left - offset.x,\n          y: newRect.top - offset.y,\n        };\n\n        return newCoordinates;\n      }\n    }\n  }\n\n  return undefined;\n};\n","import {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Drawing, Project, ProjectSpec, Spec} from '../../../models';\nimport {List} from 'immutable';\nimport { Map } from 'immutable';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\n\nexport const getSpecsInProject = (project: IMap<Project>, specs: Map<number, IMap<Spec>>): Map<number, IMap<Spec>> => {\n    const projectSpecs: List<IMap<ProjectSpec>> = project?.get('specs') ?? List();\n    return projectSpecs?.reduce((acc, projectSpec) => {\n        const projectSpecId = projectSpec.get('id');\n        return acc.set(projectSpecId, specs.get(projectSpecId));\n    }, Map()) ?? Map();\n};\nexport const getDrawingsWithProduct = (specs: Map<number, IMap<Spec>>): List<Drawing> => {\n    if (!specs) {\n        return List();\n    }\n    return specs.reduce((acc, spec: IMap<Spec>) => {\n        const drawings = spec?.get('drawings') ?? List();\n        const drawingsHasProduct = drawings.filter((drawing) => drawing.get('products').size);\n        return acc.push(...drawingsHasProduct);\n    }, List());\n};\n\nexport const getProjectSpecsWithFilteredDrawingsWithProduct = (allSpecsInProject: Map<number, IMap<Spec>> = Map(), productSearchTerm: string) => {\n    return allSpecsInProject.reduce((acc,spec: IMap<Spec>, specId) => {\n        const filteredDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm).filter(drawing => drawing.get('products').size > 0);\n        if (filteredDrawings.size === 0) {\n            return acc;\n        }\n        return acc.setIn([specId, 'drawings'], filteredDrawings);\n    }, Map());\n};\n\nexport const getAllFilteredDrawingsInProjectWithProductSelected = (selectedDrawingsInProjectSize, projectSpecsWithFilteredDrawingsWithProduct, projectSpecDetailConfig) => {\n    if (selectedDrawingsInProjectSize === 0) {\n        return false;\n    }\n    return projectSpecsWithFilteredDrawingsWithProduct.every((spec: Map<string,any>, specId) => {\n        const drawings = spec?.get('drawings');\n        if (!drawings || drawings.size === 0) {\n            return true;\n        }\n        return drawings.every(drawing => {\n            return projectSpecDetailConfig.getIn([specId, drawing.get('id'), 'checked']);\n        });\n    });\n};\n\nexport const getHasSelectedFilteredDrawingWithProducts = (selectedDrawingsInProjectSize, projectSpecsWithFilteredDrawingsWithProduct, projectSpecDetailConfig) => {\n    if (selectedDrawingsInProjectSize === 0) {\n        return false;\n    }\n    return projectSpecsWithFilteredDrawingsWithProduct.some((spec: Map<string,any>, specId) => {\n        const drawings = spec?.get('drawings');\n        if (!drawings || drawings.size === 0) {\n            return false;\n        }\n        return drawings.some(drawing => {\n            return projectSpecDetailConfig.getIn([specId, drawing.get('id'), 'checked']);\n        });\n    });\n};\n\nexport const createDraggableTabId = (specId: number) => `draggable-product-group-tab-${specId}`;\nexport const parseDraggableTabId = (draggableTabId: string) => parseInt(draggableTabId.replace('draggable-product-group-tab-', ''), 10);\nexport const isDraggableTabId = (draggableTabId: string) => draggableTabId.startsWith('draggable-product-group-tab-');\n\nexport const createDroppableProductGroupTabId = (projectId: number, specId: number) => `droppable-product-group-tab-${projectId}-${specId}`;\nexport const parseDroppableProductGroupTabId = (draggableProductGroupTabId: string) => {\n    const [projectId, specId] = draggableProductGroupTabId.replace('droppable-product-group-tab-', '').split('-');\n    return {projectId: parseInt(projectId, 10), specId: parseInt(specId, 10)};\n};\nexport const isDroppableProductGroupTabId = (draggableProductGroupTabId: string) => draggableProductGroupTabId.startsWith('droppable-product-group-tab-');\n\n\nexport const createDroppableNewSpecTabId = (projectId: number) => `droppable-new-spec-tab-${projectId}`;\nexport const parseDroppableNewSpecTabId = (droppableNewSpecTabId: string) => parseInt(droppableNewSpecTabId.replace('droppable-new-spec-tab-', ''), 10);\nexport const isDroppableNewSpecTabId = (droppableNewSpecTabId: string) => droppableNewSpecTabId.startsWith('droppable-new-spec-tab-');","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z\"\n}), 'ThumbUp');\n\nexports.default = _default;","function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from './typings/date';\n\nexport const MuiPickersContext = React.createContext<IUtils<MaterialUiPickersDate> | null>(null);\n\nexport interface MuiPickersUtilsProviderProps {\n  utils: any;\n  children: React.ReactNode;\n  locale?: any;\n  libInstance?: any;\n}\n\nexport const MuiPickersUtilsProvider: React.FC<MuiPickersUtilsProviderProps> = ({\n  utils: Utils,\n  children,\n  locale,\n  libInstance,\n}) => {\n  const utils = React.useMemo(() => new Utils({ locale, instance: libInstance }), [\n    Utils,\n    libInstance,\n    locale,\n  ]);\n\n  return <MuiPickersContext.Provider value={utils} children={children} />;\n};\n\nMuiPickersUtilsProvider.propTypes = {\n  utils: PropTypes.func.isRequired,\n  locale: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n  children: PropTypes.oneOfType([\n    PropTypes.element.isRequired,\n    PropTypes.arrayOf(PropTypes.element.isRequired),\n  ]).isRequired,\n};\n\nexport default MuiPickersUtilsProvider;\n","import { useContext } from 'react';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { MuiPickersContext } from '../../MuiPickersUtilsProvider';\n\nexport const checkUtils = (utils: IUtils<MaterialUiPickersDate> | null | undefined) => {\n  if (!utils) {\n    // tslint:disable-next-line\n    throw new Error(\n      'Can not find utils in context. You either a) forgot to wrap your component tree in MuiPickersUtilsProvider; or b) mixed named and direct file imports.  Recommendation: use named imports from the module index.'\n    );\n  }\n};\n\nexport function useUtils() {\n  const utils = useContext(MuiPickersContext);\n  checkUtils(utils);\n\n  return utils!;\n}\n","\n\nexport default function calculateSizeAndPositionDataAndUpdateScrollOffset(_ref) {\n  var cellCount = _ref.cellCount,\n      cellSize = _ref.cellSize,\n      computeMetadataCallback = _ref.computeMetadataCallback,\n      computeMetadataCallbackProps = _ref.computeMetadataCallbackProps,\n      nextCellsCount = _ref.nextCellsCount,\n      nextCellSize = _ref.nextCellSize,\n      nextScrollToIndex = _ref.nextScrollToIndex,\n      scrollToIndex = _ref.scrollToIndex,\n      updateScrollOffsetForScrollToIndex = _ref.updateScrollOffsetForScrollToIndex;\n\n  // Don't compare cell sizes if they are functions because inline functions would cause infinite loops.\n  // In that event users should use the manual recompute methods to inform of changes.\n  if (cellCount !== nextCellsCount || (typeof cellSize === 'number' || typeof nextCellSize === 'number') && cellSize !== nextCellSize) {\n    computeMetadataCallback(computeMetadataCallbackProps);\n\n    // Updated cell metadata may have hidden the previous scrolled-to item.\n    // In this case we should also update the scrollTop to ensure it stays visible.\n    if (scrollToIndex >= 0 && scrollToIndex === nextScrollToIndex) {\n      updateScrollOffsetForScrollToIndex();\n    }\n  }\n}\n\n/**\n * Helper method that determines when to recalculate row or column metadata.\n */","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport LinearLayoutVector from 'linear-layout-vector';\n\n/**\n * Just-in-time calculates and caches size and position information for a collection of cells.\n */\n\nvar CellSizeAndPositionManager = function () {\n\n  // Measurements for cells up to this index can be trusted; cells afterward should be estimated.\n  function CellSizeAndPositionManager(_ref) {\n    var cellCount = _ref.cellCount,\n        cellSizeGetter = _ref.cellSizeGetter,\n        estimatedCellSize = _ref.estimatedCellSize;\n\n    _classCallCheck(this, CellSizeAndPositionManager);\n\n    this._lastMeasuredIndex = -1;\n\n    this._cellSizeGetter = cellSizeGetter;\n    this._cellCount = cellCount;\n    this._estimatedCellSize = estimatedCellSize;\n    this._layoutVector = new LinearLayoutVector();\n    this._layoutVector.setLength(cellCount);\n    this._layoutVector.setDefaultSize(estimatedCellSize);\n  }\n  // Cache of size and position data for cells, mapped by cell index.\n  // Note that invalid values may exist in this map so only rely on cells up to this._lastMeasuredIndex\n\n\n  _createClass(CellSizeAndPositionManager, [{\n    key: 'areOffsetsAdjusted',\n    value: function areOffsetsAdjusted() {\n      return false;\n    }\n  }, {\n    key: 'configure',\n    value: function configure(_ref2) {\n      var cellCount = _ref2.cellCount,\n          estimatedCellSize = _ref2.estimatedCellSize,\n          cellSizeGetter = _ref2.cellSizeGetter;\n\n      this._cellCount = cellCount;\n      this._estimatedCellSize = estimatedCellSize;\n      this._cellSizeGetter = cellSizeGetter;\n      this._layoutVector.setLength(cellCount);\n      this._layoutVector.setDefaultSize(estimatedCellSize);\n    }\n  }, {\n    key: 'getCellCount',\n    value: function getCellCount() {\n      return this._cellCount;\n    }\n  }, {\n    key: 'getEstimatedCellSize',\n    value: function getEstimatedCellSize() {\n      return this._estimatedCellSize;\n    }\n  }, {\n    key: 'getLastMeasuredIndex',\n    value: function getLastMeasuredIndex() {\n      return this._lastMeasuredIndex;\n    }\n  }, {\n    key: 'getOffsetAdjustment',\n    value: function getOffsetAdjustment() {\n      return 0;\n    }\n\n    /**\n     * This method returns the size and position for the cell at the specified index.\n     * It just-in-time calculates (or used cached values) for cells leading up to the index.\n     */\n\n  }, {\n    key: 'getSizeAndPositionOfCell',\n    value: function getSizeAndPositionOfCell(index) {\n      if (index < 0 || index >= this._cellCount) {\n        throw Error('Requested index ' + index + ' is outside of range 0..' + this._cellCount);\n      }\n      var vector = this._layoutVector;\n      if (index > this._lastMeasuredIndex) {\n        var token = { index: this._lastMeasuredIndex + 1 };\n\n        for (var i = token.index; i <= index; token.index = ++i) {\n          var _size = this._cellSizeGetter(token);\n          // undefined or NaN probably means a logic error in the size getter.\n          // null means we're using CellMeasurer and haven't yet measured a given index.\n          if (_size === undefined || _size !== _size) {\n            throw Error('Invalid size returned for cell ' + i + ' of value ' + _size);\n          } else if (_size !== null) {\n            vector.setItemSize(i, _size);\n          }\n        }\n        this._lastMeasuredIndex = Math.min(index, this._cellCount - 1);\n      }\n\n      return {\n        offset: vector.start(index),\n        size: vector.getItemSize(index)\n      };\n    }\n  }, {\n    key: 'getSizeAndPositionOfLastMeasuredCell',\n    value: function getSizeAndPositionOfLastMeasuredCell() {\n      var index = this._lastMeasuredIndex;\n      if (index <= 0) {\n        return {\n          offset: 0,\n          size: 0\n        };\n      }\n      var vector = this._layoutVector;\n      return {\n        offset: vector.start(index),\n        size: vector.getItemSize(index)\n      };\n    }\n\n    /**\n     * Total size of all cells being measured.\n     * This value will be completely estimated initially.\n     * As cells are measured, the estimate will be updated.\n     */\n\n  }, {\n    key: 'getTotalSize',\n    value: function getTotalSize() {\n      var lastIndex = this._cellCount - 1;\n      return lastIndex >= 0 ? this._layoutVector.end(lastIndex) : 0;\n    }\n\n    /**\n     * Determines a new offset that ensures a certain cell is visible, given the current offset.\n     * If the cell is already visible then the current offset will be returned.\n     * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n     *\n     * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n     * @param containerSize Size (width or height) of the container viewport\n     * @param currentOffset Container's current (x or y) offset\n     * @param totalSize Total size (width or height) of all cells\n     * @return Offset to use to ensure the specified cell is visible\n     */\n\n  }, {\n    key: 'getUpdatedOffsetForIndex',\n    value: function getUpdatedOffsetForIndex(_ref3) {\n      var _ref3$align = _ref3.align,\n          align = _ref3$align === undefined ? 'auto' : _ref3$align,\n          containerSize = _ref3.containerSize,\n          currentOffset = _ref3.currentOffset,\n          targetIndex = _ref3.targetIndex;\n\n      if (containerSize <= 0) {\n        return 0;\n      }\n\n      var datum = this.getSizeAndPositionOfCell(targetIndex);\n      var maxOffset = datum.offset;\n      var minOffset = maxOffset - containerSize + datum.size;\n\n      var idealOffset = void 0;\n\n      switch (align) {\n        case 'start':\n          idealOffset = maxOffset;\n          break;\n        case 'end':\n          idealOffset = minOffset;\n          break;\n        case 'center':\n          idealOffset = maxOffset - (containerSize - datum.size) / 2;\n          break;\n        default:\n          idealOffset = Math.max(minOffset, Math.min(maxOffset, currentOffset));\n          break;\n      }\n\n      var totalSize = this.getTotalSize();\n\n      return Math.max(0, Math.min(totalSize - containerSize, idealOffset));\n    }\n  }, {\n    key: 'getVisibleCellRange',\n    value: function getVisibleCellRange(params) {\n      if (this.getTotalSize() === 0) {\n        return {};\n      }\n\n      var containerSize = params.containerSize,\n          offset = params.offset;\n\n      var maxOffset = offset + containerSize - 1;\n      return {\n        start: this._findNearestCell(offset),\n        stop: this._findNearestCell(maxOffset)\n      };\n    }\n\n    /**\n     * Clear all cached values for cells after the specified index.\n     * This method should be called for any cell that has changed its size.\n     * It will not immediately perform any calculations; they'll be performed the next time getSizeAndPositionOfCell() is called.\n     */\n\n  }, {\n    key: 'resetCell',\n    value: function resetCell(index) {\n      this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1);\n    }\n\n    /**\n     * Searches for the cell (index) nearest the specified offset.\n     *\n     * If no exact match is found the next lowest cell index will be returned.\n     * This allows partially visible cells (with offsets just before/above the fold) to be visible.\n     */\n\n  }, {\n    key: '_findNearestCell',\n    value: function _findNearestCell(offset) {\n      if (isNaN(offset)) {\n        throw Error('Invalid offset ' + offset + ' specified');\n      }\n\n      var vector = this._layoutVector;\n      var lastIndex = this._cellCount - 1;\n      // Our search algorithms find the nearest match at or below the specified offset.\n      // So make sure the offset is at least 0 or no match will be found.\n      var targetOffset = Math.max(0, Math.min(offset, vector.start(lastIndex)));\n      // First interrogate the constant-time lookup table\n      var nearestCellIndex = vector.indexOf(targetOffset);\n\n      // If we haven't yet measured this high, compute sizes for each cell up to the desired offset.\n      while (nearestCellIndex > this._lastMeasuredIndex) {\n        // Measure all the cells up to the one we want to find presently.\n        // Do this before the last-index check to ensure the sparse array\n        // is fully populated.\n        this.getSizeAndPositionOfCell(nearestCellIndex);\n        // No need to search and compare again if we're at the end.\n        if (nearestCellIndex === lastIndex) {\n          return nearestCellIndex;\n        }\n        nearestCellIndex = vector.indexOf(targetOffset);\n        // Guard in case `getSizeAndPositionOfCell` didn't fully measure to\n        // the nearestCellIndex. This might happen scrolling quickly down\n        // and back up on large lists -- possible race with React or DOM?\n        if (nearestCellIndex === -1) {\n          nearestCellIndex = this._lastMeasuredIndex;\n          this._lastMeasuredIndex = nearestCellIndex - 1;\n          targetOffset = Math.max(0, Math.min(offset, vector.start(lastIndex)));\n        }\n      }\n\n      return nearestCellIndex;\n    }\n  }]);\n\n  return CellSizeAndPositionManager;\n}();\n\nexport default CellSizeAndPositionManager;\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSizeGetter } from '../types';\nimport { bpfrpt_proptype_VisibleCellRange } from '../types';","var DEFAULT_MAX_ELEMENT_SIZE = 1500000;\nvar CHROME_MAX_ELEMENT_SIZE = 1.67771e7;\n\nvar isBrowser = function isBrowser() {\n  return typeof window !== 'undefined';\n};\n\nvar isChrome = function isChrome() {\n  return !!window.chrome && !!window.chrome.webstore;\n};\n\nexport var getMaxElementSize = function getMaxElementSize() {\n  if (isBrowser()) {\n    if (isChrome()) {\n      return CHROME_MAX_ELEMENT_SIZE;\n    }\n  }\n  return DEFAULT_MAX_ELEMENT_SIZE;\n};","import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n\nimport CellSizeAndPositionManager from './CellSizeAndPositionManager';\n\nimport { getMaxElementSize } from './maxElementSize.js';\n\n/**\n * Browsers have scroll offset limitations (eg Chrome stops scrolling at ~33.5M pixels where as Edge tops out at ~1.5M pixels).\n * After a certain position, the browser won't allow the user to scroll further (even via JavaScript scroll offset adjustments).\n * This util picks a lower ceiling for max size and artificially adjusts positions within to make it transparent for users.\n */\n\n/**\n * Extends CellSizeAndPositionManager and adds scaling behavior for lists that are too large to fit within a browser's native limits.\n */\nvar ScalingCellSizeAndPositionManager = function () {\n  function ScalingCellSizeAndPositionManager(_ref) {\n    var _ref$maxScrollSize = _ref.maxScrollSize,\n        maxScrollSize = _ref$maxScrollSize === undefined ? getMaxElementSize() : _ref$maxScrollSize,\n        params = _objectWithoutProperties(_ref, ['maxScrollSize']);\n\n    _classCallCheck(this, ScalingCellSizeAndPositionManager);\n\n    // Favor composition over inheritance to simplify IE10 support\n    this._cellSizeAndPositionManager = new CellSizeAndPositionManager(params);\n    this._maxScrollSize = maxScrollSize;\n  }\n\n  _createClass(ScalingCellSizeAndPositionManager, [{\n    key: 'areOffsetsAdjusted',\n    value: function areOffsetsAdjusted() {\n      return this._cellSizeAndPositionManager.getTotalSize() > this._maxScrollSize;\n    }\n  }, {\n    key: 'configure',\n    value: function configure(params) {\n      this._cellSizeAndPositionManager.configure(params);\n    }\n  }, {\n    key: 'getCellCount',\n    value: function getCellCount() {\n      return this._cellSizeAndPositionManager.getCellCount();\n    }\n  }, {\n    key: 'getEstimatedCellSize',\n    value: function getEstimatedCellSize() {\n      return this._cellSizeAndPositionManager.getEstimatedCellSize();\n    }\n  }, {\n    key: 'getLastMeasuredIndex',\n    value: function getLastMeasuredIndex() {\n      return this._cellSizeAndPositionManager.getLastMeasuredIndex();\n    }\n\n    /**\n     * Number of pixels a cell at the given position (offset) should be shifted in order to fit within the scaled container.\n     * The offset passed to this function is scaled (safe) as well.\n     */\n\n  }, {\n    key: 'getOffsetAdjustment',\n    value: function getOffsetAdjustment(_ref2) {\n      var containerSize = _ref2.containerSize,\n          offset = _ref2.offset;\n\n      var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n      var safeTotalSize = this.getTotalSize();\n      var offsetPercentage = this._getOffsetPercentage({\n        containerSize: containerSize,\n        offset: offset,\n        totalSize: safeTotalSize\n      });\n\n      return Math.round(offsetPercentage * (safeTotalSize - totalSize));\n    }\n  }, {\n    key: 'getSizeAndPositionOfCell',\n    value: function getSizeAndPositionOfCell(index) {\n      return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);\n    }\n  }, {\n    key: 'getSizeAndPositionOfLastMeasuredCell',\n    value: function getSizeAndPositionOfLastMeasuredCell() {\n      return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();\n    }\n\n    /** See CellSizeAndPositionManager#getTotalSize */\n\n  }, {\n    key: 'getTotalSize',\n    value: function getTotalSize() {\n      return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());\n    }\n\n    /** See CellSizeAndPositionManager#getUpdatedOffsetForIndex */\n\n  }, {\n    key: 'getUpdatedOffsetForIndex',\n    value: function getUpdatedOffsetForIndex(_ref3) {\n      var _ref3$align = _ref3.align,\n          align = _ref3$align === undefined ? 'auto' : _ref3$align,\n          containerSize = _ref3.containerSize,\n          currentOffset = _ref3.currentOffset,\n          targetIndex = _ref3.targetIndex;\n\n      currentOffset = this._safeOffsetToOffset({\n        containerSize: containerSize,\n        offset: currentOffset\n      });\n\n      var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex({\n        align: align,\n        containerSize: containerSize,\n        currentOffset: currentOffset,\n        targetIndex: targetIndex\n      });\n\n      return this._offsetToSafeOffset({\n        containerSize: containerSize,\n        offset: offset\n      });\n    }\n\n    /** See CellSizeAndPositionManager#getVisibleCellRange */\n\n  }, {\n    key: 'getVisibleCellRange',\n    value: function getVisibleCellRange(_ref4) {\n      var containerSize = _ref4.containerSize,\n          offset = _ref4.offset;\n\n      offset = this._safeOffsetToOffset({\n        containerSize: containerSize,\n        offset: offset\n      });\n\n      return this._cellSizeAndPositionManager.getVisibleCellRange({\n        containerSize: containerSize,\n        offset: offset\n      });\n    }\n  }, {\n    key: 'resetCell',\n    value: function resetCell(index) {\n      this._cellSizeAndPositionManager.resetCell(index);\n    }\n  }, {\n    key: '_getOffsetPercentage',\n    value: function _getOffsetPercentage(_ref5) {\n      var containerSize = _ref5.containerSize,\n          offset = _ref5.offset,\n          totalSize = _ref5.totalSize;\n\n      return totalSize <= containerSize ? 0 : offset / (totalSize - containerSize);\n    }\n  }, {\n    key: '_offsetToSafeOffset',\n    value: function _offsetToSafeOffset(_ref6) {\n      var containerSize = _ref6.containerSize,\n          offset = _ref6.offset;\n\n      var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n      var safeTotalSize = this.getTotalSize();\n\n      if (totalSize === safeTotalSize) {\n        return offset;\n      } else {\n        var offsetPercentage = this._getOffsetPercentage({\n          containerSize: containerSize,\n          offset: offset,\n          totalSize: totalSize\n        });\n\n        return Math.round(offsetPercentage * (safeTotalSize - containerSize));\n      }\n    }\n  }, {\n    key: '_safeOffsetToOffset',\n    value: function _safeOffsetToOffset(_ref7) {\n      var containerSize = _ref7.containerSize,\n          offset = _ref7.offset;\n\n      var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n      var safeTotalSize = this.getTotalSize();\n\n      if (totalSize === safeTotalSize) {\n        return offset;\n      } else {\n        var offsetPercentage = this._getOffsetPercentage({\n          containerSize: containerSize,\n          offset: offset,\n          totalSize: safeTotalSize\n        });\n\n        return Math.round(offsetPercentage * (totalSize - containerSize));\n      }\n    }\n  }]);\n\n  return ScalingCellSizeAndPositionManager;\n}();\n\nexport default ScalingCellSizeAndPositionManager;\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSizeGetter } from '../types';\nimport { bpfrpt_proptype_VisibleCellRange } from '../types';","import _Object$keys from 'babel-runtime/core-js/object/keys';\n/**\n * Helper utility that updates the specified callback whenever any of the specified indices have changed.\n */\nexport default function createCallbackMemoizer() {\n  var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n  var cachedIndices = {};\n\n  return function (_ref) {\n    var callback = _ref.callback,\n        indices = _ref.indices;\n\n    var keys = _Object$keys(indices);\n    var allInitialized = !requireAllKeys || keys.every(function (key) {\n      var value = indices[key];\n      return Array.isArray(value) ? value.length > 0 : value >= 0;\n    });\n    var indexChanged = keys.length !== _Object$keys(cachedIndices).length || keys.some(function (key) {\n      var cachedValue = cachedIndices[key];\n      var value = indices[key];\n\n      return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;\n    });\n\n    cachedIndices = indices;\n\n    if (allInitialized && indexChanged) {\n      callback(indices);\n    }\n  };\n}","\n\nimport ScalingCellSizeAndPositionManager from './ScalingCellSizeAndPositionManager.js';\n\n/**\n * Helper function that determines when to update scroll offsets to ensure that a scroll-to-index remains visible.\n * This function also ensures that the scroll ofset isn't past the last column/row of cells.\n */\n\nexport default function updateScrollIndexHelper(_ref) {\n  var cellSize = _ref.cellSize,\n      cellSizeAndPositionManager = _ref.cellSizeAndPositionManager,\n      previousCellsCount = _ref.previousCellsCount,\n      previousCellSize = _ref.previousCellSize,\n      previousScrollToAlignment = _ref.previousScrollToAlignment,\n      previousScrollToIndex = _ref.previousScrollToIndex,\n      previousSize = _ref.previousSize,\n      scrollOffset = _ref.scrollOffset,\n      scrollToAlignment = _ref.scrollToAlignment,\n      scrollToIndex = _ref.scrollToIndex,\n      size = _ref.size,\n      sizeJustIncreasedFromZero = _ref.sizeJustIncreasedFromZero,\n      updateScrollIndexCallback = _ref.updateScrollIndexCallback;\n\n  var cellCount = cellSizeAndPositionManager.getCellCount();\n  var hasScrollToIndex = scrollToIndex >= 0 && scrollToIndex < cellCount;\n  var sizeHasChanged = size !== previousSize || sizeJustIncreasedFromZero || !previousCellSize || typeof cellSize === 'number' && cellSize !== previousCellSize;\n\n  // If we have a new scroll target OR if height/row-height has changed,\n  // We should ensure that the scroll target is visible.\n  if (hasScrollToIndex && (sizeHasChanged || scrollToAlignment !== previousScrollToAlignment || scrollToIndex !== previousScrollToIndex)) {\n    updateScrollIndexCallback(scrollToIndex);\n\n    // If we don't have a selected item but list size or number of children have decreased,\n    // Make sure we aren't scrolled too far past the current content.\n  } else if (!hasScrollToIndex && cellCount > 0 && (size < previousSize || cellCount < previousCellsCount)) {\n    // We need to ensure that the current scroll offset is still within the collection's range.\n    // To do this, we don't need to measure everything; CellMeasurer would perform poorly.\n    // Just check to make sure we're still okay.\n    // Only adjust the scroll position if we've scrolled below the last set of rows.\n    if (scrollOffset > cellSizeAndPositionManager.getTotalSize() - size) {\n      updateScrollIndexCallback(cellCount - 1);\n    }\n  }\n}\nimport { bpfrpt_proptype_Alignment } from '../types';\nimport { bpfrpt_proptype_CellSize } from '../types';","\n\n// Properly handle server-side rendering.\nvar win = void 0;\n\nif (typeof window !== 'undefined') {\n  win = window;\n} else if (typeof self !== 'undefined') {\n  win = self;\n} else {\n  win = {};\n}\n\n// requestAnimationFrame() shim by Paul Irish\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nvar request = win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || function (callback) {\n  return win.setTimeout(callback, 1000 / 60);\n};\n\nvar cancel = win.cancelAnimationFrame || win.webkitCancelAnimationFrame || win.mozCancelAnimationFrame || win.oCancelAnimationFrame || win.msCancelAnimationFrame || function (id) {\n  win.clearTimeout(id);\n};\n\nexport var raf = request;\nexport var caf = cancel;","import _Promise from 'babel-runtime/core-js/promise';\nimport { caf, raf } from './animationFrame';\n\nvar bpfrpt_proptype_AnimationTimeoutId = process.env.NODE_ENV === 'production' ? null : {\n  id: PropTypes.number.isRequired\n};\n\n\nexport var cancelAnimationTimeout = function cancelAnimationTimeout(frame) {\n  return caf(frame.id);\n};\n\n/**\n * Recursively calls requestAnimationFrame until a specified delay has been met or exceeded.\n * When the delay time has been reached the function you're timing out will be called.\n *\n * Credit: Joe Lambert (https://gist.github.com/joelambert/1002116#file-requesttimeout-js)\n */\nexport var requestAnimationTimeout = function requestAnimationTimeout(callback, delay) {\n  var start = void 0;\n  // wait for end of processing current event handler, because event handler may be long\n  _Promise.resolve().then(function () {\n    start = Date.now();\n  });\n\n  var timeout = function timeout() {\n    if (Date.now() - start >= delay) {\n      callback.call();\n    } else {\n      frame.id = raf(timeout);\n    }\n  };\n\n  var frame = {\n    id: raf(timeout)\n  };\n\n  return frame;\n};\nimport PropTypes from 'prop-types';\nexport { bpfrpt_proptype_AnimationTimeoutId };","import _Object$assign from 'babel-runtime/core-js/object/assign';\nimport _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport calculateSizeAndPositionDataAndUpdateScrollOffset from './utils/calculateSizeAndPositionDataAndUpdateScrollOffset';\nimport ScalingCellSizeAndPositionManager from './utils/ScalingCellSizeAndPositionManager';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport defaultOverscanIndicesGetter, { SCROLL_DIRECTION_BACKWARD, SCROLL_DIRECTION_FORWARD } from './defaultOverscanIndicesGetter';\nimport updateScrollIndexHelper from './utils/updateScrollIndexHelper';\nimport defaultCellRangeRenderer from './defaultCellRangeRenderer';\nimport scrollbarSize from 'dom-helpers/util/scrollbarSize';\nimport { polyfill } from 'react-lifecycles-compat';\nimport { requestAnimationTimeout, cancelAnimationTimeout } from '../utils/requestAnimationTimeout';\n\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\nvar SCROLL_POSITION_CHANGE_REASONS = {\n  OBSERVED: 'observed',\n  REQUESTED: 'requested'\n};\n\nvar renderNull = function renderNull() {\n  return null;\n};\n\n/**\n * Renders tabular data with virtualization along the vertical and horizontal axes.\n * Row heights and column widths must be known ahead of time and specified as properties.\n */\nvar Grid = function (_React$PureComponent) {\n  _inherits(Grid, _React$PureComponent);\n\n  // Invokes onSectionRendered callback only when start/stop row or column indices change\n  function Grid(props) {\n    _classCallCheck(this, Grid);\n\n    var _this = _possibleConstructorReturn(this, (Grid.__proto__ || _Object$getPrototypeOf(Grid)).call(this, props));\n\n    _this._onGridRenderedMemoizer = createCallbackMemoizer();\n    _this._onScrollMemoizer = createCallbackMemoizer(false);\n    _this._deferredInvalidateColumnIndex = null;\n    _this._deferredInvalidateRowIndex = null;\n    _this._recomputeScrollLeftFlag = false;\n    _this._recomputeScrollTopFlag = false;\n    _this._horizontalScrollBarSize = 0;\n    _this._verticalScrollBarSize = 0;\n    _this._scrollbarPresenceChanged = false;\n    _this._renderedColumnStartIndex = 0;\n    _this._renderedColumnStopIndex = 0;\n    _this._renderedRowStartIndex = 0;\n    _this._renderedRowStopIndex = 0;\n    _this._styleCache = {};\n    _this._cellCache = {};\n\n    _this._debounceScrollEndedCallback = function () {\n      _this._disablePointerEventsTimeoutId = null;\n      // isScrolling is used to determine if we reset styleCache\n      _this.setState({\n        isScrolling: false,\n        needToResetStyleCache: false\n      });\n    };\n\n    _this._invokeOnGridRenderedHelper = function () {\n      var onSectionRendered = _this.props.onSectionRendered;\n\n\n      _this._onGridRenderedMemoizer({\n        callback: onSectionRendered,\n        indices: {\n          columnOverscanStartIndex: _this._columnStartIndex,\n          columnOverscanStopIndex: _this._columnStopIndex,\n          columnStartIndex: _this._renderedColumnStartIndex,\n          columnStopIndex: _this._renderedColumnStopIndex,\n          rowOverscanStartIndex: _this._rowStartIndex,\n          rowOverscanStopIndex: _this._rowStopIndex,\n          rowStartIndex: _this._renderedRowStartIndex,\n          rowStopIndex: _this._renderedRowStopIndex\n        }\n      });\n    };\n\n    _this._setScrollingContainerRef = function (ref) {\n      _this._scrollingContainer = ref;\n    };\n\n    _this._onScroll = function (event) {\n      // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n      // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n      // See issue #404 for more information.\n      if (event.target === _this._scrollingContainer) {\n        _this.handleScrollEvent(event.target);\n      }\n    };\n\n    var columnSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n      cellCount: props.columnCount,\n      cellSizeGetter: function cellSizeGetter(params) {\n        return Grid._wrapSizeGetter(props.columnWidth)(params);\n      },\n      estimatedCellSize: Grid._getEstimatedColumnSize(props)\n    });\n    var rowSizeAndPositionManager = new ScalingCellSizeAndPositionManager({\n      cellCount: props.rowCount,\n      cellSizeGetter: function cellSizeGetter(params) {\n        return Grid._wrapSizeGetter(props.rowHeight)(params);\n      },\n      estimatedCellSize: Grid._getEstimatedRowSize(props)\n    });\n\n    _this.state = {\n      instanceProps: {\n        columnSizeAndPositionManager: columnSizeAndPositionManager,\n        rowSizeAndPositionManager: rowSizeAndPositionManager,\n\n        prevColumnWidth: props.columnWidth,\n        prevRowHeight: props.rowHeight,\n        prevColumnCount: props.columnCount,\n        prevRowCount: props.rowCount,\n        prevIsScrolling: props.isScrolling === true,\n        prevScrollToColumn: props.scrollToColumn,\n        prevScrollToRow: props.scrollToRow,\n        prevScrollLeft: props.scrollLeft,\n        prevScrollTop: props.scrollTop,\n\n        scrollbarSize: 0,\n        scrollbarSizeMeasured: false\n      },\n      isScrolling: false,\n      scrollDirectionHorizontal: SCROLL_DIRECTION_FORWARD,\n      scrollDirectionVertical: SCROLL_DIRECTION_FORWARD,\n      scrollLeft: props.scrollLeft || 0,\n      scrollTop: props.scrollTop || 0,\n      scrollPositionChangeReason: null,\n\n      needToResetStyleCache: false\n    };\n\n    if (props.scrollToRow > 0) {\n      _this._initialScrollTop = _this._getCalculatedScrollTop(props, _this.state);\n    }\n    if (props.scrollToColumn > 0) {\n      _this._initialScrollLeft = _this._getCalculatedScrollLeft(props, _this.state);\n    }\n    return _this;\n  }\n\n  /**\n   * Gets offsets for a given cell and alignment.\n   */\n\n\n  _createClass(Grid, [{\n    key: 'getOffsetForCell',\n    value: function getOffsetForCell() {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref$alignment = _ref.alignment,\n          alignment = _ref$alignment === undefined ? this.props.scrollToAlignment : _ref$alignment,\n          _ref$columnIndex = _ref.columnIndex,\n          columnIndex = _ref$columnIndex === undefined ? this.props.scrollToColumn : _ref$columnIndex,\n          _ref$rowIndex = _ref.rowIndex,\n          rowIndex = _ref$rowIndex === undefined ? this.props.scrollToRow : _ref$rowIndex;\n\n      var offsetProps = _extends({}, this.props, {\n        scrollToAlignment: alignment,\n        scrollToColumn: columnIndex,\n        scrollToRow: rowIndex\n      });\n\n      return {\n        scrollLeft: this._getCalculatedScrollLeft(offsetProps),\n        scrollTop: this._getCalculatedScrollTop(offsetProps)\n      };\n    }\n\n    /**\n     * Gets estimated total rows' height.\n     */\n\n  }, {\n    key: 'getTotalRowsHeight',\n    value: function getTotalRowsHeight() {\n      return this.state.instanceProps.rowSizeAndPositionManager.getTotalSize();\n    }\n\n    /**\n     * Gets estimated total columns' width.\n     */\n\n  }, {\n    key: 'getTotalColumnsWidth',\n    value: function getTotalColumnsWidth() {\n      return this.state.instanceProps.columnSizeAndPositionManager.getTotalSize();\n    }\n\n    /**\n     * This method handles a scroll event originating from an external scroll control.\n     * It's an advanced method and should probably not be used unless you're implementing a custom scroll-bar solution.\n     */\n\n  }, {\n    key: 'handleScrollEvent',\n    value: function handleScrollEvent(_ref2) {\n      var _ref2$scrollLeft = _ref2.scrollLeft,\n          scrollLeftParam = _ref2$scrollLeft === undefined ? 0 : _ref2$scrollLeft,\n          _ref2$scrollTop = _ref2.scrollTop,\n          scrollTopParam = _ref2$scrollTop === undefined ? 0 : _ref2$scrollTop;\n\n      // On iOS, we can arrive at negative offsets by swiping past the start.\n      // To prevent flicker here, we make playing in the negative offset zone cause nothing to happen.\n      if (scrollTopParam < 0) {\n        return;\n      }\n\n      // Prevent pointer events from interrupting a smooth scroll\n      this._debounceScrollEnded();\n\n      var _props = this.props,\n          autoHeight = _props.autoHeight,\n          autoWidth = _props.autoWidth,\n          height = _props.height,\n          width = _props.width;\n      var instanceProps = this.state.instanceProps;\n\n      // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n      // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n      // This causes a series of rapid renders that is slow for long lists.\n      // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n\n      var scrollbarSize = instanceProps.scrollbarSize;\n      var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n      var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n      var scrollLeft = Math.min(Math.max(0, totalColumnsWidth - width + scrollbarSize), scrollLeftParam);\n      var scrollTop = Math.min(Math.max(0, totalRowsHeight - height + scrollbarSize), scrollTopParam);\n\n      // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n      // Don't force a re-render if this is the case.\n      // The mouse may move faster then the animation frame does.\n      // Use requestAnimationFrame to avoid over-updating.\n      if (this.state.scrollLeft !== scrollLeft || this.state.scrollTop !== scrollTop) {\n        // Track scrolling direction so we can more efficiently overscan rows to reduce empty space around the edges while scrolling.\n        // Don't change direction for an axis unless scroll offset has changed.\n        var _scrollDirectionHorizontal = scrollLeft !== this.state.scrollLeft ? scrollLeft > this.state.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionHorizontal;\n        var _scrollDirectionVertical = scrollTop !== this.state.scrollTop ? scrollTop > this.state.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD : this.state.scrollDirectionVertical;\n\n        var newState = {\n          isScrolling: true,\n          scrollDirectionHorizontal: _scrollDirectionHorizontal,\n          scrollDirectionVertical: _scrollDirectionVertical,\n          scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.OBSERVED\n        };\n\n        if (!autoHeight) {\n          newState.scrollTop = scrollTop;\n        }\n\n        if (!autoWidth) {\n          newState.scrollLeft = scrollLeft;\n        }\n\n        newState.needToResetStyleCache = false;\n        this.setState(newState);\n      }\n\n      this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        totalColumnsWidth: totalColumnsWidth,\n        totalRowsHeight: totalRowsHeight\n      });\n    }\n\n    /**\n     * Invalidate Grid size and recompute visible cells.\n     * This is a deferred wrapper for recomputeGridSize().\n     * It sets a flag to be evaluated on cDM/cDU to avoid unnecessary renders.\n     * This method is intended for advanced use-cases like CellMeasurer.\n     */\n    // @TODO (bvaughn) Add automated test coverage for this.\n\n  }, {\n    key: 'invalidateCellSizeAfterRender',\n    value: function invalidateCellSizeAfterRender(_ref3) {\n      var columnIndex = _ref3.columnIndex,\n          rowIndex = _ref3.rowIndex;\n\n      this._deferredInvalidateColumnIndex = typeof this._deferredInvalidateColumnIndex === 'number' ? Math.min(this._deferredInvalidateColumnIndex, columnIndex) : columnIndex;\n      this._deferredInvalidateRowIndex = typeof this._deferredInvalidateRowIndex === 'number' ? Math.min(this._deferredInvalidateRowIndex, rowIndex) : rowIndex;\n    }\n\n    /**\n     * Pre-measure all columns and rows in a Grid.\n     * Typically cells are only measured as needed and estimated sizes are used for cells that have not yet been measured.\n     * This method ensures that the next call to getTotalSize() returns an exact size (as opposed to just an estimated one).\n     */\n\n  }, {\n    key: 'measureAllCells',\n    value: function measureAllCells() {\n      var _props2 = this.props,\n          columnCount = _props2.columnCount,\n          rowCount = _props2.rowCount;\n      var instanceProps = this.state.instanceProps;\n\n      instanceProps.columnSizeAndPositionManager.getSizeAndPositionOfCell(columnCount - 1);\n      instanceProps.rowSizeAndPositionManager.getSizeAndPositionOfCell(rowCount - 1);\n    }\n\n    /**\n     * Forced recompute of row heights and column widths.\n     * This function should be called if dynamic column or row sizes have changed but nothing else has.\n     * Since Grid only receives :columnCount and :rowCount it has no way of detecting when the underlying data changes.\n     */\n\n  }, {\n    key: 'recomputeGridSize',\n    value: function recomputeGridSize() {\n      var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref4$columnIndex = _ref4.columnIndex,\n          columnIndex = _ref4$columnIndex === undefined ? 0 : _ref4$columnIndex,\n          _ref4$rowIndex = _ref4.rowIndex,\n          rowIndex = _ref4$rowIndex === undefined ? 0 : _ref4$rowIndex;\n\n      var _props3 = this.props,\n          scrollToColumn = _props3.scrollToColumn,\n          scrollToRow = _props3.scrollToRow;\n      var instanceProps = this.state.instanceProps;\n\n\n      instanceProps.columnSizeAndPositionManager.resetCell(columnIndex);\n      instanceProps.rowSizeAndPositionManager.resetCell(rowIndex);\n\n      // Cell sizes may be determined by a function property.\n      // In this case the cDU handler can't know if they changed.\n      // Store this flag to let the next cDU pass know it needs to recompute the scroll offset.\n      this._recomputeScrollLeftFlag = scrollToColumn >= 0 && (this.state.scrollDirectionHorizontal === SCROLL_DIRECTION_FORWARD ? columnIndex <= scrollToColumn : columnIndex >= scrollToColumn);\n      this._recomputeScrollTopFlag = scrollToRow >= 0 && (this.state.scrollDirectionVertical === SCROLL_DIRECTION_FORWARD ? rowIndex <= scrollToRow : rowIndex >= scrollToRow);\n\n      // Clear cell cache in case we are scrolling;\n      // Invalid row heights likely mean invalid cached content as well.\n      this._styleCache = {};\n      this._cellCache = {};\n\n      this.forceUpdate();\n    }\n\n    /**\n     * Ensure column and row are visible.\n     */\n\n  }, {\n    key: 'scrollToCell',\n    value: function scrollToCell(_ref5) {\n      var columnIndex = _ref5.columnIndex,\n          rowIndex = _ref5.rowIndex;\n      var columnCount = this.props.columnCount;\n\n\n      var props = this.props;\n\n      // Don't adjust scroll offset for single-column grids (eg List, Table).\n      // This can cause a funky scroll offset because of the vertical scrollbar width.\n      if (columnCount > 1 && columnIndex !== undefined) {\n        this._updateScrollLeftForScrollToColumn(_extends({}, props, {\n          scrollToColumn: columnIndex\n        }));\n      }\n\n      if (rowIndex !== undefined) {\n        this._updateScrollTopForScrollToRow(_extends({}, props, {\n          scrollToRow: rowIndex\n        }));\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props4 = this.props,\n          getScrollbarSize = _props4.getScrollbarSize,\n          height = _props4.height,\n          scrollLeft = _props4.scrollLeft,\n          scrollToColumn = _props4.scrollToColumn,\n          scrollTop = _props4.scrollTop,\n          scrollToRow = _props4.scrollToRow,\n          width = _props4.width;\n      var instanceProps = this.state.instanceProps;\n\n      // Reset initial offsets to be ignored in browser\n\n      this._initialScrollTop = 0;\n      this._initialScrollLeft = 0;\n\n      // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n      // We must do this at the start of the method as we may calculate and update scroll position below.\n      this._handleInvalidatedGridSize();\n\n      // If this component was first rendered server-side, scrollbar size will be undefined.\n      // In that event we need to remeasure.\n      if (!instanceProps.scrollbarSizeMeasured) {\n        this.setState(function (prevState) {\n          var stateUpdate = _extends({}, prevState, { needToResetStyleCache: false });\n          stateUpdate.instanceProps.scrollbarSize = getScrollbarSize();\n          stateUpdate.instanceProps.scrollbarSizeMeasured = true;\n          return stateUpdate;\n        });\n      }\n\n      if (typeof scrollLeft === 'number' && scrollLeft >= 0 || typeof scrollTop === 'number' && scrollTop >= 0) {\n        var stateUpdate = Grid._getScrollToPositionStateUpdate({\n          prevState: this.state,\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop\n        });\n        if (stateUpdate) {\n          stateUpdate.needToResetStyleCache = false;\n          this.setState(stateUpdate);\n        }\n      }\n\n      // refs don't work in `react-test-renderer`\n      if (this._scrollingContainer) {\n        // setting the ref's scrollLeft and scrollTop.\n        // Somehow in MultiGrid the main grid doesn't trigger a update on mount.\n        if (this._scrollingContainer.scrollLeft !== this.state.scrollLeft) {\n          this._scrollingContainer.scrollLeft = this.state.scrollLeft;\n        }\n        if (this._scrollingContainer.scrollTop !== this.state.scrollTop) {\n          this._scrollingContainer.scrollTop = this.state.scrollTop;\n        }\n      }\n\n      // Don't update scroll offset if the size is 0; we don't render any cells in this case.\n      // Setting a state may cause us to later thing we've updated the offce when we haven't.\n      var sizeIsBiggerThanZero = height > 0 && width > 0;\n      if (scrollToColumn >= 0 && sizeIsBiggerThanZero) {\n        this._updateScrollLeftForScrollToColumn();\n      }\n      if (scrollToRow >= 0 && sizeIsBiggerThanZero) {\n        this._updateScrollTopForScrollToRow();\n      }\n\n      // Update onRowsRendered callback\n      this._invokeOnGridRenderedHelper();\n\n      // Initialize onScroll callback\n      this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft || 0,\n        scrollTop: scrollTop || 0,\n        totalColumnsWidth: instanceProps.columnSizeAndPositionManager.getTotalSize(),\n        totalRowsHeight: instanceProps.rowSizeAndPositionManager.getTotalSize()\n      });\n\n      this._maybeCallOnScrollbarPresenceChange();\n    }\n\n    /**\n     * @private\n     * This method updates scrollLeft/scrollTop in state for the following conditions:\n     * 1) New scroll-to-cell props have been set\n     */\n\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this2 = this;\n\n      var _props5 = this.props,\n          autoHeight = _props5.autoHeight,\n          autoWidth = _props5.autoWidth,\n          columnCount = _props5.columnCount,\n          height = _props5.height,\n          rowCount = _props5.rowCount,\n          scrollToAlignment = _props5.scrollToAlignment,\n          scrollToColumn = _props5.scrollToColumn,\n          scrollToRow = _props5.scrollToRow,\n          width = _props5.width;\n      var _state = this.state,\n          scrollLeft = _state.scrollLeft,\n          scrollPositionChangeReason = _state.scrollPositionChangeReason,\n          scrollTop = _state.scrollTop,\n          instanceProps = _state.instanceProps;\n      // If cell sizes have been invalidated (eg we are using CellMeasurer) then reset cached positions.\n      // We must do this at the start of the method as we may calculate and update scroll position below.\n\n      this._handleInvalidatedGridSize();\n\n      // Handle edge case where column or row count has only just increased over 0.\n      // In this case we may have to restore a previously-specified scroll offset.\n      // For more info see bvaughn/react-virtualized/issues/218\n      var columnOrRowCountJustIncreasedFromZero = columnCount > 0 && prevProps.columnCount === 0 || rowCount > 0 && prevProps.rowCount === 0;\n\n      // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n      // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n      // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n      // So we only set these when we require an adjustment of the scroll position.\n      // See issue #2 for more information.\n      if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n        // @TRICKY :autoHeight and :autoWidth properties instructs Grid to leave :scrollTop and :scrollLeft management to an external HOC (eg WindowScroller).\n        // In this case we should avoid checking scrollingContainer.scrollTop and scrollingContainer.scrollLeft since it forces layout/flow.\n        if (!autoWidth && scrollLeft >= 0 && (scrollLeft !== this._scrollingContainer.scrollLeft || columnOrRowCountJustIncreasedFromZero)) {\n          this._scrollingContainer.scrollLeft = scrollLeft;\n        }\n        if (!autoHeight && scrollTop >= 0 && (scrollTop !== this._scrollingContainer.scrollTop || columnOrRowCountJustIncreasedFromZero)) {\n          this._scrollingContainer.scrollTop = scrollTop;\n        }\n      }\n\n      // Special case where the previous size was 0:\n      // In this case we don't show any windowed cells at all.\n      // So we should always recalculate offset afterwards.\n      var sizeJustIncreasedFromZero = (prevProps.width === 0 || prevProps.height === 0) && height > 0 && width > 0;\n\n      // Update scroll offsets if the current :scrollToColumn or :scrollToRow values requires it\n      // @TODO Do we also need this check or can the one in componentWillUpdate() suffice?\n      if (this._recomputeScrollLeftFlag) {\n        this._recomputeScrollLeftFlag = false;\n        this._updateScrollLeftForScrollToColumn(this.props);\n      } else {\n        updateScrollIndexHelper({\n          cellSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n          previousCellsCount: prevProps.columnCount,\n          previousCellSize: prevProps.columnWidth,\n          previousScrollToAlignment: prevProps.scrollToAlignment,\n          previousScrollToIndex: prevProps.scrollToColumn,\n          previousSize: prevProps.width,\n          scrollOffset: scrollLeft,\n          scrollToAlignment: scrollToAlignment,\n          scrollToIndex: scrollToColumn,\n          size: width,\n          sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n          updateScrollIndexCallback: function updateScrollIndexCallback() {\n            return _this2._updateScrollLeftForScrollToColumn(_this2.props);\n          }\n        });\n      }\n\n      if (this._recomputeScrollTopFlag) {\n        this._recomputeScrollTopFlag = false;\n        this._updateScrollTopForScrollToRow(this.props);\n      } else {\n        updateScrollIndexHelper({\n          cellSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n          previousCellsCount: prevProps.rowCount,\n          previousCellSize: prevProps.rowHeight,\n          previousScrollToAlignment: prevProps.scrollToAlignment,\n          previousScrollToIndex: prevProps.scrollToRow,\n          previousSize: prevProps.height,\n          scrollOffset: scrollTop,\n          scrollToAlignment: scrollToAlignment,\n          scrollToIndex: scrollToRow,\n          size: height,\n          sizeJustIncreasedFromZero: sizeJustIncreasedFromZero,\n          updateScrollIndexCallback: function updateScrollIndexCallback() {\n            return _this2._updateScrollTopForScrollToRow(_this2.props);\n          }\n        });\n      }\n\n      // Update onRowsRendered callback if start/stop indices have changed\n      this._invokeOnGridRenderedHelper();\n\n      // Changes to :scrollLeft or :scrollTop should also notify :onScroll listeners\n      if (scrollLeft !== prevState.scrollLeft || scrollTop !== prevState.scrollTop) {\n        var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n        var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n\n        this._invokeOnScrollMemoizer({\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          totalColumnsWidth: totalColumnsWidth,\n          totalRowsHeight: totalRowsHeight\n        });\n      }\n\n      this._maybeCallOnScrollbarPresenceChange();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._disablePointerEventsTimeoutId) {\n        cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n      }\n    }\n\n    /**\n     * This method updates scrollLeft/scrollTop in state for the following conditions:\n     * 1) Empty content (0 rows or columns)\n     * 2) New scroll props overriding the current state\n     * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n     */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props6 = this.props,\n          autoContainerWidth = _props6.autoContainerWidth,\n          autoHeight = _props6.autoHeight,\n          autoWidth = _props6.autoWidth,\n          className = _props6.className,\n          containerProps = _props6.containerProps,\n          containerRole = _props6.containerRole,\n          containerStyle = _props6.containerStyle,\n          height = _props6.height,\n          id = _props6.id,\n          noContentRenderer = _props6.noContentRenderer,\n          role = _props6.role,\n          style = _props6.style,\n          tabIndex = _props6.tabIndex,\n          width = _props6.width;\n      var _state2 = this.state,\n          instanceProps = _state2.instanceProps,\n          needToResetStyleCache = _state2.needToResetStyleCache;\n\n\n      var isScrolling = this._isScrolling();\n\n      var gridStyle = {\n        boxSizing: 'border-box',\n        direction: 'ltr',\n        height: autoHeight ? 'auto' : height,\n        position: 'relative',\n        width: autoWidth ? 'auto' : width,\n        WebkitOverflowScrolling: 'touch',\n        willChange: 'transform'\n      };\n\n      if (needToResetStyleCache) {\n        this._styleCache = {};\n      }\n\n      // calculate _styleCache here\n      // if state.isScrolling (not from _isScrolling) then reset\n      if (!this.state.isScrolling) {\n        this._resetStyleCache();\n      }\n\n      // calculate children to render here\n      this._calculateChildrenToRender(this.props, this.state);\n\n      var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n      var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n\n      // Force browser to hide scrollbars when we know they aren't necessary.\n      // Otherwise once scrollbars appear they may not disappear again.\n      // For more info see issue #116\n      var verticalScrollBarSize = totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n      var horizontalScrollBarSize = totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n\n      if (horizontalScrollBarSize !== this._horizontalScrollBarSize || verticalScrollBarSize !== this._verticalScrollBarSize) {\n        this._horizontalScrollBarSize = horizontalScrollBarSize;\n        this._verticalScrollBarSize = verticalScrollBarSize;\n        this._scrollbarPresenceChanged = true;\n      }\n\n      // Also explicitly init styles to 'auto' if scrollbars are required.\n      // This works around an obscure edge case where external CSS styles have not yet been loaded,\n      // But an initial scroll index of offset is set as an external prop.\n      // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n      // This was originally reported via clauderic/react-infinite-calendar/issues/23\n      gridStyle.overflowX = totalColumnsWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n      gridStyle.overflowY = totalRowsHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n\n      var childrenToDisplay = this._childrenToDisplay;\n\n      var showNoContentRenderer = childrenToDisplay.length === 0 && height > 0 && width > 0;\n\n      return React.createElement(\n        'div',\n        _extends({\n          ref: this._setScrollingContainerRef\n        }, containerProps, {\n          'aria-label': this.props['aria-label'],\n          'aria-readonly': this.props['aria-readonly'],\n          className: clsx('ReactVirtualized__Grid', className),\n          id: id,\n          onScroll: this._onScroll,\n          role: role,\n          style: _extends({}, gridStyle, style),\n          tabIndex: tabIndex }),\n        childrenToDisplay.length > 0 && React.createElement(\n          'div',\n          {\n            className: 'ReactVirtualized__Grid__innerScrollContainer',\n            role: containerRole,\n            style: _extends({\n              width: autoContainerWidth ? 'auto' : totalColumnsWidth,\n              height: totalRowsHeight,\n              maxWidth: totalColumnsWidth,\n              maxHeight: totalRowsHeight,\n              overflow: 'hidden',\n              pointerEvents: isScrolling ? 'none' : '',\n              position: 'relative'\n            }, containerStyle) },\n          childrenToDisplay\n        ),\n        showNoContentRenderer && noContentRenderer()\n      );\n    }\n\n    /* ---------------------------- Helper methods ---------------------------- */\n\n  }, {\n    key: '_calculateChildrenToRender',\n    value: function _calculateChildrenToRender() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n      var cellRenderer = props.cellRenderer,\n          cellRangeRenderer = props.cellRangeRenderer,\n          columnCount = props.columnCount,\n          deferredMeasurementCache = props.deferredMeasurementCache,\n          height = props.height,\n          overscanColumnCount = props.overscanColumnCount,\n          overscanIndicesGetter = props.overscanIndicesGetter,\n          overscanRowCount = props.overscanRowCount,\n          rowCount = props.rowCount,\n          width = props.width,\n          isScrollingOptOut = props.isScrollingOptOut;\n      var scrollDirectionHorizontal = state.scrollDirectionHorizontal,\n          scrollDirectionVertical = state.scrollDirectionVertical,\n          instanceProps = state.instanceProps;\n\n\n      var scrollTop = this._initialScrollTop > 0 ? this._initialScrollTop : state.scrollTop;\n      var scrollLeft = this._initialScrollLeft > 0 ? this._initialScrollLeft : state.scrollLeft;\n\n      var isScrolling = this._isScrolling(props, state);\n\n      this._childrenToDisplay = [];\n\n      // Render only enough columns and rows to cover the visible area of the grid.\n      if (height > 0 && width > 0) {\n        var visibleColumnIndices = instanceProps.columnSizeAndPositionManager.getVisibleCellRange({\n          containerSize: width,\n          offset: scrollLeft\n        });\n        var visibleRowIndices = instanceProps.rowSizeAndPositionManager.getVisibleCellRange({\n          containerSize: height,\n          offset: scrollTop\n        });\n\n        var horizontalOffsetAdjustment = instanceProps.columnSizeAndPositionManager.getOffsetAdjustment({\n          containerSize: width,\n          offset: scrollLeft\n        });\n        var verticalOffsetAdjustment = instanceProps.rowSizeAndPositionManager.getOffsetAdjustment({\n          containerSize: height,\n          offset: scrollTop\n        });\n\n        // Store for _invokeOnGridRenderedHelper()\n        this._renderedColumnStartIndex = visibleColumnIndices.start;\n        this._renderedColumnStopIndex = visibleColumnIndices.stop;\n        this._renderedRowStartIndex = visibleRowIndices.start;\n        this._renderedRowStopIndex = visibleRowIndices.stop;\n\n        var overscanColumnIndices = overscanIndicesGetter({\n          direction: 'horizontal',\n          cellCount: columnCount,\n          overscanCellsCount: overscanColumnCount,\n          scrollDirection: scrollDirectionHorizontal,\n          startIndex: typeof visibleColumnIndices.start === 'number' ? visibleColumnIndices.start : 0,\n          stopIndex: typeof visibleColumnIndices.stop === 'number' ? visibleColumnIndices.stop : -1\n        });\n\n        var overscanRowIndices = overscanIndicesGetter({\n          direction: 'vertical',\n          cellCount: rowCount,\n          overscanCellsCount: overscanRowCount,\n          scrollDirection: scrollDirectionVertical,\n          startIndex: typeof visibleRowIndices.start === 'number' ? visibleRowIndices.start : 0,\n          stopIndex: typeof visibleRowIndices.stop === 'number' ? visibleRowIndices.stop : -1\n        });\n\n        // Store for _invokeOnGridRenderedHelper()\n        var columnStartIndex = overscanColumnIndices.overscanStartIndex;\n        var columnStopIndex = overscanColumnIndices.overscanStopIndex;\n        var rowStartIndex = overscanRowIndices.overscanStartIndex;\n        var rowStopIndex = overscanRowIndices.overscanStopIndex;\n\n        // Advanced use-cases (eg CellMeasurer) require batched measurements to determine accurate sizes.\n        if (deferredMeasurementCache) {\n          // If rows have a dynamic height, scan the rows we are about to render.\n          // If any have not yet been measured, then we need to render all columns initially,\n          // Because the height of the row is equal to the tallest cell within that row,\n          // (And so we can't know the height without measuring all column-cells first).\n          if (!deferredMeasurementCache.hasFixedHeight()) {\n            for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n              if (!deferredMeasurementCache.has(rowIndex, 0)) {\n                columnStartIndex = 0;\n                columnStopIndex = columnCount - 1;\n                break;\n              }\n            }\n          }\n\n          // If columns have a dynamic width, scan the columns we are about to render.\n          // If any have not yet been measured, then we need to render all rows initially,\n          // Because the width of the column is equal to the widest cell within that column,\n          // (And so we can't know the width without measuring all row-cells first).\n          if (!deferredMeasurementCache.hasFixedWidth()) {\n            for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n              if (!deferredMeasurementCache.has(0, columnIndex)) {\n                rowStartIndex = 0;\n                rowStopIndex = rowCount - 1;\n                break;\n              }\n            }\n          }\n        }\n\n        this._childrenToDisplay = cellRangeRenderer({\n          cellCache: this._cellCache,\n          cellRenderer: cellRenderer,\n          columnSizeAndPositionManager: instanceProps.columnSizeAndPositionManager,\n          columnStartIndex: columnStartIndex,\n          columnStopIndex: columnStopIndex,\n          deferredMeasurementCache: deferredMeasurementCache,\n          horizontalOffsetAdjustment: horizontalOffsetAdjustment,\n          isScrolling: isScrolling,\n          isScrollingOptOut: isScrollingOptOut,\n          parent: this,\n          rowSizeAndPositionManager: instanceProps.rowSizeAndPositionManager,\n          rowStartIndex: rowStartIndex,\n          rowStopIndex: rowStopIndex,\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          styleCache: this._styleCache,\n          verticalOffsetAdjustment: verticalOffsetAdjustment,\n          visibleColumnIndices: visibleColumnIndices,\n          visibleRowIndices: visibleRowIndices\n        });\n\n        // update the indices\n        this._columnStartIndex = columnStartIndex;\n        this._columnStopIndex = columnStopIndex;\n        this._rowStartIndex = rowStartIndex;\n        this._rowStopIndex = rowStopIndex;\n      }\n    }\n\n    /**\n     * Sets an :isScrolling flag for a small window of time.\n     * This flag is used to disable pointer events on the scrollable portion of the Grid.\n     * This prevents jerky/stuttery mouse-wheel scrolling.\n     */\n\n  }, {\n    key: '_debounceScrollEnded',\n    value: function _debounceScrollEnded() {\n      var scrollingResetTimeInterval = this.props.scrollingResetTimeInterval;\n\n\n      if (this._disablePointerEventsTimeoutId) {\n        cancelAnimationTimeout(this._disablePointerEventsTimeoutId);\n      }\n\n      this._disablePointerEventsTimeoutId = requestAnimationTimeout(this._debounceScrollEndedCallback, scrollingResetTimeInterval);\n    }\n  }, {\n    key: '_handleInvalidatedGridSize',\n\n\n    /**\n     * Check for batched CellMeasurer size invalidations.\n     * This will occur the first time one or more previously unmeasured cells are rendered.\n     */\n    value: function _handleInvalidatedGridSize() {\n      if (typeof this._deferredInvalidateColumnIndex === 'number' && typeof this._deferredInvalidateRowIndex === 'number') {\n        var columnIndex = this._deferredInvalidateColumnIndex;\n        var rowIndex = this._deferredInvalidateRowIndex;\n\n        this._deferredInvalidateColumnIndex = null;\n        this._deferredInvalidateRowIndex = null;\n\n        this.recomputeGridSize({ columnIndex: columnIndex, rowIndex: rowIndex });\n      }\n    }\n  }, {\n    key: '_invokeOnScrollMemoizer',\n    value: function _invokeOnScrollMemoizer(_ref6) {\n      var _this3 = this;\n\n      var scrollLeft = _ref6.scrollLeft,\n          scrollTop = _ref6.scrollTop,\n          totalColumnsWidth = _ref6.totalColumnsWidth,\n          totalRowsHeight = _ref6.totalRowsHeight;\n\n      this._onScrollMemoizer({\n        callback: function callback(_ref7) {\n          var scrollLeft = _ref7.scrollLeft,\n              scrollTop = _ref7.scrollTop;\n          var _props7 = _this3.props,\n              height = _props7.height,\n              onScroll = _props7.onScroll,\n              width = _props7.width;\n\n\n          onScroll({\n            clientHeight: height,\n            clientWidth: width,\n            scrollHeight: totalRowsHeight,\n            scrollLeft: scrollLeft,\n            scrollTop: scrollTop,\n            scrollWidth: totalColumnsWidth\n          });\n        },\n        indices: {\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop\n        }\n      });\n    }\n  }, {\n    key: '_isScrolling',\n    value: function _isScrolling() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n      // If isScrolling is defined in props, use it to override the value in state\n      // This is a performance optimization for WindowScroller + Grid\n      return Object.hasOwnProperty.call(props, 'isScrolling') ? Boolean(props.isScrolling) : Boolean(state.isScrolling);\n    }\n  }, {\n    key: '_maybeCallOnScrollbarPresenceChange',\n    value: function _maybeCallOnScrollbarPresenceChange() {\n      if (this._scrollbarPresenceChanged) {\n        var _onScrollbarPresenceChange = this.props.onScrollbarPresenceChange;\n\n\n        this._scrollbarPresenceChanged = false;\n\n        _onScrollbarPresenceChange({\n          horizontal: this._horizontalScrollBarSize > 0,\n          size: this.state.instanceProps.scrollbarSize,\n          vertical: this._verticalScrollBarSize > 0\n        });\n      }\n    }\n  }, {\n    key: 'scrollToPosition',\n\n\n    /**\n     * Scroll to the specified offset(s).\n     * Useful for animating position changes.\n     */\n    value: function scrollToPosition(_ref8) {\n      var scrollLeft = _ref8.scrollLeft,\n          scrollTop = _ref8.scrollTop;\n\n      var stateUpdate = Grid._getScrollToPositionStateUpdate({\n        prevState: this.state,\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop\n      });\n\n      if (stateUpdate) {\n        stateUpdate.needToResetStyleCache = false;\n        this.setState(stateUpdate);\n      }\n    }\n  }, {\n    key: '_getCalculatedScrollLeft',\n    value: function _getCalculatedScrollLeft() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n      return Grid._getCalculatedScrollLeft(props, state);\n    }\n  }, {\n    key: '_updateScrollLeftForScrollToColumn',\n    value: function _updateScrollLeftForScrollToColumn() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n      var stateUpdate = Grid._getScrollLeftForScrollToColumnStateUpdate(props, state);\n      if (stateUpdate) {\n        stateUpdate.needToResetStyleCache = false;\n        this.setState(stateUpdate);\n      }\n    }\n  }, {\n    key: '_getCalculatedScrollTop',\n    value: function _getCalculatedScrollTop() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n      return Grid._getCalculatedScrollTop(props, state);\n    }\n  }, {\n    key: '_resetStyleCache',\n    value: function _resetStyleCache() {\n      var styleCache = this._styleCache;\n      var cellCache = this._cellCache;\n      var isScrollingOptOut = this.props.isScrollingOptOut;\n\n      // Reset cell and style caches once scrolling stops.\n      // This makes Grid simpler to use (since cells commonly change).\n      // And it keeps the caches from growing too large.\n      // Performance is most sensitive when a user is scrolling.\n      // Don't clear visible cells from cellCache if isScrollingOptOut is specified.\n      // This keeps the cellCache to a resonable size.\n\n      this._cellCache = {};\n      this._styleCache = {};\n\n      // Copy over the visible cell styles so avoid unnecessary re-render.\n      for (var rowIndex = this._rowStartIndex; rowIndex <= this._rowStopIndex; rowIndex++) {\n        for (var columnIndex = this._columnStartIndex; columnIndex <= this._columnStopIndex; columnIndex++) {\n          var key = rowIndex + '-' + columnIndex;\n          this._styleCache[key] = styleCache[key];\n\n          if (isScrollingOptOut) {\n            this._cellCache[key] = cellCache[key];\n          }\n        }\n      }\n    }\n  }, {\n    key: '_updateScrollTopForScrollToRow',\n    value: function _updateScrollTopForScrollToRow() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n\n      var stateUpdate = Grid._getScrollTopForScrollToRowStateUpdate(props, state);\n      if (stateUpdate) {\n        stateUpdate.needToResetStyleCache = false;\n        this.setState(stateUpdate);\n      }\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      var newState = {};\n      var instanceProps = prevState.instanceProps;\n\n\n      if (nextProps.columnCount === 0 && prevState.scrollLeft !== 0 || nextProps.rowCount === 0 && prevState.scrollTop !== 0) {\n        newState.scrollLeft = 0;\n        newState.scrollTop = 0;\n\n        // only use scroll{Left,Top} from props if scrollTo{Column,Row} isn't specified\n        // scrollTo{Column,Row} should override scroll{Left,Top}\n      } else if (nextProps.scrollLeft !== instanceProps.prevScrollLeft && nextProps.scrollToColumn < 0 || nextProps.scrollTop !== instanceProps.prevScrollTop && nextProps.scrollToRow < 0) {\n        _Object$assign(newState, Grid._getScrollToPositionStateUpdate({\n          prevState: prevState,\n          scrollLeft: nextProps.scrollLeft,\n          scrollTop: nextProps.scrollTop\n        }));\n      }\n\n      // Initially we should not clearStyleCache\n      newState.needToResetStyleCache = false;\n      if (nextProps.columnWidth !== instanceProps.prevColumnWidth || nextProps.rowHeight !== instanceProps.prevRowHeight) {\n        // Reset cache. set it to {} in render\n        newState.needToResetStyleCache = true;\n      }\n\n      instanceProps.columnSizeAndPositionManager.configure({\n        cellCount: nextProps.columnCount,\n        estimatedCellSize: Grid._getEstimatedColumnSize(nextProps),\n        cellSizeGetter: Grid._wrapSizeGetter(nextProps.columnWidth)\n      });\n\n      instanceProps.rowSizeAndPositionManager.configure({\n        cellCount: nextProps.rowCount,\n        estimatedCellSize: Grid._getEstimatedRowSize(nextProps),\n        cellSizeGetter: Grid._wrapSizeGetter(nextProps.rowHeight)\n      });\n\n      if (instanceProps.prevColumnCount === 0 || instanceProps.prevRowCount === 0) {\n        instanceProps.prevColumnCount = 0;\n        instanceProps.prevRowCount = 0;\n      }\n\n      // If scrolling is controlled outside this component, clear cache when scrolling stops\n      if (nextProps.autoHeight && nextProps.isScrolling === false && instanceProps.prevIsScrolling === true) {\n        _Object$assign(newState, {\n          isScrolling: false\n        });\n      }\n\n      var maybeStateA = void 0;\n      var maybeStateB = void 0;\n\n      calculateSizeAndPositionDataAndUpdateScrollOffset({\n        cellCount: instanceProps.prevColumnCount,\n        cellSize: typeof instanceProps.prevColumnWidth === 'number' ? instanceProps.prevColumnWidth : null,\n        computeMetadataCallback: function computeMetadataCallback() {\n          return instanceProps.columnSizeAndPositionManager.resetCell(0);\n        },\n        computeMetadataCallbackProps: nextProps,\n        nextCellsCount: nextProps.columnCount,\n        nextCellSize: typeof nextProps.columnWidth === 'number' ? nextProps.columnWidth : null,\n        nextScrollToIndex: nextProps.scrollToColumn,\n        scrollToIndex: instanceProps.prevScrollToColumn,\n        updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n          maybeStateA = Grid._getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState);\n        }\n      });\n      calculateSizeAndPositionDataAndUpdateScrollOffset({\n        cellCount: instanceProps.prevRowCount,\n        cellSize: typeof instanceProps.prevRowHeight === 'number' ? instanceProps.prevRowHeight : null,\n        computeMetadataCallback: function computeMetadataCallback() {\n          return instanceProps.rowSizeAndPositionManager.resetCell(0);\n        },\n        computeMetadataCallbackProps: nextProps,\n        nextCellsCount: nextProps.rowCount,\n        nextCellSize: typeof nextProps.rowHeight === 'number' ? nextProps.rowHeight : null,\n        nextScrollToIndex: nextProps.scrollToRow,\n        scrollToIndex: instanceProps.prevScrollToRow,\n        updateScrollOffsetForScrollToIndex: function updateScrollOffsetForScrollToIndex() {\n          maybeStateB = Grid._getScrollTopForScrollToRowStateUpdate(nextProps, prevState);\n        }\n      });\n\n      instanceProps.prevColumnCount = nextProps.columnCount;\n      instanceProps.prevColumnWidth = nextProps.columnWidth;\n      instanceProps.prevIsScrolling = nextProps.isScrolling === true;\n      instanceProps.prevRowCount = nextProps.rowCount;\n      instanceProps.prevRowHeight = nextProps.rowHeight;\n      instanceProps.prevScrollToColumn = nextProps.scrollToColumn;\n      instanceProps.prevScrollToRow = nextProps.scrollToRow;\n      instanceProps.prevScrollLeft = nextProps.scrollLeft;\n      instanceProps.prevScrollTop = nextProps.scrollTop;\n\n      // getting scrollBarSize (moved from componentWillMount)\n      instanceProps.scrollbarSize = nextProps.getScrollbarSize();\n      if (instanceProps.scrollbarSize === undefined) {\n        instanceProps.scrollbarSizeMeasured = false;\n        instanceProps.scrollbarSize = 0;\n      } else {\n        instanceProps.scrollbarSizeMeasured = true;\n      }\n\n      newState.instanceProps = instanceProps;\n\n      return _extends({}, newState, maybeStateA, maybeStateB);\n    }\n  }, {\n    key: '_getEstimatedColumnSize',\n    value: function _getEstimatedColumnSize(props) {\n      return typeof props.columnWidth === 'number' ? props.columnWidth : props.estimatedColumnSize;\n    }\n  }, {\n    key: '_getEstimatedRowSize',\n    value: function _getEstimatedRowSize(props) {\n      return typeof props.rowHeight === 'number' ? props.rowHeight : props.estimatedRowSize;\n    }\n  }, {\n    key: '_getScrollToPositionStateUpdate',\n\n\n    /**\n     * Get the updated state after scrolling to\n     * scrollLeft and scrollTop\n     */\n    value: function _getScrollToPositionStateUpdate(_ref9) {\n      var prevState = _ref9.prevState,\n          scrollLeft = _ref9.scrollLeft,\n          scrollTop = _ref9.scrollTop;\n\n      var newState = {\n        scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n      };\n\n      if (typeof scrollLeft === 'number' && scrollLeft >= 0) {\n        newState.scrollDirectionHorizontal = scrollLeft > prevState.scrollLeft ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n        newState.scrollLeft = scrollLeft;\n      }\n\n      if (typeof scrollTop === 'number' && scrollTop >= 0) {\n        newState.scrollDirectionVertical = scrollTop > prevState.scrollTop ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_BACKWARD;\n        newState.scrollTop = scrollTop;\n      }\n\n      if (typeof scrollLeft === 'number' && scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft || typeof scrollTop === 'number' && scrollTop >= 0 && scrollTop !== prevState.scrollTop) {\n        return newState;\n      }\n      return null;\n    }\n  }, {\n    key: '_wrapSizeGetter',\n    value: function _wrapSizeGetter(value) {\n      return typeof value === 'function' ? value : function () {\n        return value;\n      };\n    }\n  }, {\n    key: '_getCalculatedScrollLeft',\n    value: function _getCalculatedScrollLeft(nextProps, prevState) {\n      var columnCount = nextProps.columnCount,\n          height = nextProps.height,\n          scrollToAlignment = nextProps.scrollToAlignment,\n          scrollToColumn = nextProps.scrollToColumn,\n          width = nextProps.width;\n      var scrollLeft = prevState.scrollLeft,\n          instanceProps = prevState.instanceProps;\n\n\n      if (columnCount > 0) {\n        var finalColumn = columnCount - 1;\n        var targetIndex = scrollToColumn < 0 ? finalColumn : Math.min(finalColumn, scrollToColumn);\n        var totalRowsHeight = instanceProps.rowSizeAndPositionManager.getTotalSize();\n        var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalRowsHeight > height ? instanceProps.scrollbarSize : 0;\n\n        return instanceProps.columnSizeAndPositionManager.getUpdatedOffsetForIndex({\n          align: scrollToAlignment,\n          containerSize: width - scrollBarSize,\n          currentOffset: scrollLeft,\n          targetIndex: targetIndex\n        });\n      }\n      return 0;\n    }\n  }, {\n    key: '_getScrollLeftForScrollToColumnStateUpdate',\n    value: function _getScrollLeftForScrollToColumnStateUpdate(nextProps, prevState) {\n      var scrollLeft = prevState.scrollLeft;\n\n      var calculatedScrollLeft = Grid._getCalculatedScrollLeft(nextProps, prevState);\n\n      if (typeof calculatedScrollLeft === 'number' && calculatedScrollLeft >= 0 && scrollLeft !== calculatedScrollLeft) {\n        return Grid._getScrollToPositionStateUpdate({\n          prevState: prevState,\n          scrollLeft: calculatedScrollLeft,\n          scrollTop: -1\n        });\n      }\n      return null;\n    }\n  }, {\n    key: '_getCalculatedScrollTop',\n    value: function _getCalculatedScrollTop(nextProps, prevState) {\n      var height = nextProps.height,\n          rowCount = nextProps.rowCount,\n          scrollToAlignment = nextProps.scrollToAlignment,\n          scrollToRow = nextProps.scrollToRow,\n          width = nextProps.width;\n      var scrollTop = prevState.scrollTop,\n          instanceProps = prevState.instanceProps;\n\n\n      if (rowCount > 0) {\n        var finalRow = rowCount - 1;\n        var targetIndex = scrollToRow < 0 ? finalRow : Math.min(finalRow, scrollToRow);\n        var totalColumnsWidth = instanceProps.columnSizeAndPositionManager.getTotalSize();\n        var scrollBarSize = instanceProps.scrollbarSizeMeasured && totalColumnsWidth > width ? instanceProps.scrollbarSize : 0;\n\n        return instanceProps.rowSizeAndPositionManager.getUpdatedOffsetForIndex({\n          align: scrollToAlignment,\n          containerSize: height - scrollBarSize,\n          currentOffset: scrollTop,\n          targetIndex: targetIndex\n        });\n      }\n      return 0;\n    }\n  }, {\n    key: '_getScrollTopForScrollToRowStateUpdate',\n    value: function _getScrollTopForScrollToRowStateUpdate(nextProps, prevState) {\n      var scrollTop = prevState.scrollTop;\n\n      var calculatedScrollTop = Grid._getCalculatedScrollTop(nextProps, prevState);\n\n      if (typeof calculatedScrollTop === 'number' && calculatedScrollTop >= 0 && scrollTop !== calculatedScrollTop) {\n        return Grid._getScrollToPositionStateUpdate({\n          prevState: prevState,\n          scrollLeft: -1,\n          scrollTop: calculatedScrollTop\n        });\n      }\n      return null;\n    }\n  }]);\n\n  return Grid;\n}(React.PureComponent);\n\nGrid.defaultProps = {\n  'aria-label': 'grid',\n  'aria-readonly': true,\n  autoContainerWidth: false,\n  autoHeight: false,\n  autoWidth: false,\n  cellRangeRenderer: defaultCellRangeRenderer,\n  containerRole: 'rowgroup',\n  containerStyle: {},\n  estimatedColumnSize: 100,\n  estimatedRowSize: 30,\n  getScrollbarSize: scrollbarSize,\n  noContentRenderer: renderNull,\n  onScroll: function onScroll() {},\n  onScrollbarPresenceChange: function onScrollbarPresenceChange() {},\n  onSectionRendered: function onSectionRendered() {},\n  overscanColumnCount: 0,\n  overscanIndicesGetter: defaultOverscanIndicesGetter,\n  overscanRowCount: 10,\n  role: 'grid',\n  scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n  scrollToAlignment: 'auto',\n  scrollToColumn: -1,\n  scrollToRow: -1,\n  style: {},\n  tabIndex: 0,\n  isScrollingOptOut: false\n};\nGrid.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  \"aria-label\": PropTypes.string.isRequired,\n  \"aria-readonly\": PropTypes.bool,\n\n\n  /**\n   * Set the width of the inner scrollable container to 'auto'.\n   * This is useful for single-column Grids to ensure that the column doesn't extend below a vertical scrollbar.\n   */\n  autoContainerWidth: PropTypes.bool.isRequired,\n\n\n  /**\n   * Removes fixed height from the scrollingContainer so that the total height of rows can stretch the window.\n   * Intended for use with WindowScroller\n   */\n  autoHeight: PropTypes.bool.isRequired,\n\n\n  /**\n   * Removes fixed width from the scrollingContainer so that the total width of rows can stretch the window.\n   * Intended for use with WindowScroller\n   */\n  autoWidth: PropTypes.bool.isRequired,\n\n\n  /** Responsible for rendering a cell given an row and column index.  */\n  cellRenderer: function cellRenderer() {\n    return (typeof bpfrpt_proptype_CellRenderer === 'function' ? bpfrpt_proptype_CellRenderer.isRequired ? bpfrpt_proptype_CellRenderer.isRequired : bpfrpt_proptype_CellRenderer : PropTypes.shape(bpfrpt_proptype_CellRenderer).isRequired).apply(this, arguments);\n  },\n\n\n  /** Responsible for rendering a group of cells given their index ranges.  */\n  cellRangeRenderer: function cellRangeRenderer() {\n    return (typeof bpfrpt_proptype_CellRangeRenderer === 'function' ? bpfrpt_proptype_CellRangeRenderer.isRequired ? bpfrpt_proptype_CellRangeRenderer.isRequired : bpfrpt_proptype_CellRangeRenderer : PropTypes.shape(bpfrpt_proptype_CellRangeRenderer).isRequired).apply(this, arguments);\n  },\n\n\n  /** Optional custom CSS class name to attach to root Grid element.  */\n  className: PropTypes.string,\n\n\n  /** Number of columns in grid.  */\n  columnCount: PropTypes.number.isRequired,\n\n\n  /** Either a fixed column width (number) or a function that returns the width of a column given its index.  */\n  columnWidth: function columnWidth() {\n    return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n  },\n\n\n  /** Unfiltered props for the Grid container. */\n  containerProps: PropTypes.object,\n\n\n  /** ARIA role for the cell-container.  */\n  containerRole: PropTypes.string.isRequired,\n\n\n  /** Optional inline style applied to inner cell-container */\n  containerStyle: PropTypes.object.isRequired,\n\n\n  /**\n   * If CellMeasurer is used to measure this Grid's children, this should be a pointer to its CellMeasurerCache.\n   * A shared CellMeasurerCache reference enables Grid and CellMeasurer to share measurement data.\n   */\n  deferredMeasurementCache: PropTypes.object,\n\n\n  /**\n   * Used to estimate the total width of a Grid before all of its columns have actually been measured.\n   * The estimated total width is adjusted as columns are rendered.\n   */\n  estimatedColumnSize: PropTypes.number.isRequired,\n\n\n  /**\n   * Used to estimate the total height of a Grid before all of its rows have actually been measured.\n   * The estimated total height is adjusted as rows are rendered.\n   */\n  estimatedRowSize: PropTypes.number.isRequired,\n\n\n  /** Exposed for testing purposes only.  */\n  getScrollbarSize: PropTypes.func.isRequired,\n\n\n  /** Height of Grid; this property determines the number of visible (vs virtualized) rows.  */\n  height: PropTypes.number.isRequired,\n\n\n  /** Optional custom id to attach to root Grid element.  */\n  id: PropTypes.string,\n\n\n  /**\n   * Override internal is-scrolling state tracking.\n   * This property is primarily intended for use with the WindowScroller component.\n   */\n  isScrolling: PropTypes.bool,\n\n\n  /**\n   * Opt-out of isScrolling param passed to cellRangeRenderer.\n   * To avoid the extra render when scroll stops.\n   */\n  isScrollingOptOut: PropTypes.bool.isRequired,\n\n\n  /** Optional renderer to be used in place of rows when either :rowCount or :columnCount is 0.  */\n  noContentRenderer: function noContentRenderer() {\n    return (typeof bpfrpt_proptype_NoContentRenderer === 'function' ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n  },\n\n\n  /**\n   * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n   * This callback can be used to sync scrolling between lists, tables, or grids.\n   */\n  onScroll: PropTypes.func.isRequired,\n\n\n  /**\n   * Called whenever a horizontal or vertical scrollbar is added or removed.\n   * This prop is not intended for end-user use;\n   * It is used by MultiGrid to support fixed-row/fixed-column scroll syncing.\n   */\n  onScrollbarPresenceChange: PropTypes.func.isRequired,\n\n\n  /** Callback invoked with information about the section of the Grid that was just rendered.  */\n  onSectionRendered: PropTypes.func.isRequired,\n\n\n  /**\n   * Number of columns to render before/after the visible section of the grid.\n   * These columns can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n   */\n  overscanColumnCount: PropTypes.number.isRequired,\n\n\n  /**\n   * Calculates the number of cells to overscan before and after a specified range.\n   * This function ensures that overscanning doesn't exceed the available cells.\n   */\n  overscanIndicesGetter: function overscanIndicesGetter() {\n    return (typeof bpfrpt_proptype_OverscanIndicesGetter === 'function' ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n  },\n\n\n  /**\n   * Number of rows to render above/below the visible section of the grid.\n   * These rows can help for smoother scrolling on touch devices or browsers that send scroll events infrequently.\n   */\n  overscanRowCount: PropTypes.number.isRequired,\n\n\n  /** ARIA role for the grid element.  */\n  role: PropTypes.string.isRequired,\n\n\n  /**\n   * Either a fixed row height (number) or a function that returns the height of a row given its index.\n   * Should implement the following interface: ({ index: number }): number\n   */\n  rowHeight: function rowHeight() {\n    return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n  },\n\n\n  /** Number of rows in grid.  */\n  rowCount: PropTypes.number.isRequired,\n\n\n  /** Wait this amount of time after the last scroll event before resetting Grid `pointer-events`. */\n  scrollingResetTimeInterval: PropTypes.number.isRequired,\n\n\n  /** Horizontal offset. */\n  scrollLeft: PropTypes.number,\n\n\n  /**\n   * Controls scroll-to-cell behavior of the Grid.\n   * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n   * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n   */\n  scrollToAlignment: function scrollToAlignment() {\n    return (typeof bpfrpt_proptype_Alignment === 'function' ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n  },\n\n\n  /** Column index to ensure visible (by forcefully scrolling if necessary) */\n  scrollToColumn: PropTypes.number.isRequired,\n\n\n  /** Vertical offset. */\n  scrollTop: PropTypes.number,\n\n\n  /** Row index to ensure visible (by forcefully scrolling if necessary) */\n  scrollToRow: PropTypes.number.isRequired,\n\n\n  /** Optional inline style */\n  style: PropTypes.object.isRequired,\n\n\n  /** Tab index for focus */\n  tabIndex: PropTypes.number,\n\n\n  /** Width of Grid; this property determines the number of visible (vs virtualized) columns.  */\n  width: PropTypes.number.isRequired\n};\n\n\npolyfill(Grid);\nexport default Grid;\nimport { bpfrpt_proptype_CellRenderer } from './types';\nimport { bpfrpt_proptype_CellRangeRenderer } from './types';\nimport { bpfrpt_proptype_CellPosition } from './types';\nimport { bpfrpt_proptype_CellSize } from './types';\nimport { bpfrpt_proptype_CellSizeGetter } from './types';\nimport { bpfrpt_proptype_NoContentRenderer } from './types';\nimport { bpfrpt_proptype_Scroll } from './types';\nimport { bpfrpt_proptype_ScrollbarPresenceChange } from './types';\nimport { bpfrpt_proptype_RenderedSection } from './types';\nimport { bpfrpt_proptype_OverscanIndicesGetter } from './types';\nimport { bpfrpt_proptype_Alignment } from './types';\nimport { bpfrpt_proptype_CellCache } from './types';\nimport { bpfrpt_proptype_StyleCache } from './types';\nimport { bpfrpt_proptype_AnimationTimeoutId } from '../utils/requestAnimationTimeout';\nimport PropTypes from 'prop-types';","\n\nexport var SCROLL_DIRECTION_BACKWARD = -1;\n\nexport var SCROLL_DIRECTION_FORWARD = 1;\n\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n  var cellCount = _ref.cellCount,\n      overscanCellsCount = _ref.overscanCellsCount,\n      scrollDirection = _ref.scrollDirection,\n      startIndex = _ref.startIndex,\n      stopIndex = _ref.stopIndex;\n\n  if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n    return {\n      overscanStartIndex: Math.max(0, startIndex),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n    };\n  } else {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex)\n    };\n  }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from './types';\nimport { bpfrpt_proptype_OverscanIndices } from './types';","\n\n/**\n * Default implementation of cellRangeRenderer used by Grid.\n * This renderer supports cell-caching while the user is scrolling.\n */\n\nexport default function defaultCellRangeRenderer(_ref) {\n  var cellCache = _ref.cellCache,\n      cellRenderer = _ref.cellRenderer,\n      columnSizeAndPositionManager = _ref.columnSizeAndPositionManager,\n      columnStartIndex = _ref.columnStartIndex,\n      columnStopIndex = _ref.columnStopIndex,\n      deferredMeasurementCache = _ref.deferredMeasurementCache,\n      horizontalOffsetAdjustment = _ref.horizontalOffsetAdjustment,\n      isScrolling = _ref.isScrolling,\n      isScrollingOptOut = _ref.isScrollingOptOut,\n      parent = _ref.parent,\n      rowSizeAndPositionManager = _ref.rowSizeAndPositionManager,\n      rowStartIndex = _ref.rowStartIndex,\n      rowStopIndex = _ref.rowStopIndex,\n      styleCache = _ref.styleCache,\n      verticalOffsetAdjustment = _ref.verticalOffsetAdjustment,\n      visibleColumnIndices = _ref.visibleColumnIndices,\n      visibleRowIndices = _ref.visibleRowIndices;\n\n  var renderedCells = [];\n\n  // Browsers have native size limits for elements (eg Chrome 33M pixels, IE 1.5M pixes).\n  // User cannot scroll beyond these size limitations.\n  // In order to work around this, ScalingCellSizeAndPositionManager compresses offsets.\n  // We should never cache styles for compressed offsets though as this can lead to bugs.\n  // See issue #576 for more.\n  var areOffsetsAdjusted = columnSizeAndPositionManager.areOffsetsAdjusted() || rowSizeAndPositionManager.areOffsetsAdjusted();\n\n  var canCacheStyle = !isScrolling && !areOffsetsAdjusted;\n\n  for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n    var rowDatum = rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n\n    for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n      var columnDatum = columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n      var isVisible = columnIndex >= visibleColumnIndices.start && columnIndex <= visibleColumnIndices.stop && rowIndex >= visibleRowIndices.start && rowIndex <= visibleRowIndices.stop;\n      var key = rowIndex + '-' + columnIndex;\n      var style = void 0;\n\n      // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n      if (canCacheStyle && styleCache[key]) {\n        style = styleCache[key];\n      } else {\n        // In deferred mode, cells will be initially rendered before we know their size.\n        // Don't interfere with CellMeasurer's measurements by setting an invalid size.\n        if (deferredMeasurementCache && !deferredMeasurementCache.has(rowIndex, columnIndex)) {\n          // Position not-yet-measured cells at top/left 0,0,\n          // And give them width/height of 'auto' so they can grow larger than the parent Grid if necessary.\n          // Positioning them further to the right/bottom influences their measured size.\n          style = {\n            height: 'auto',\n            left: 0,\n            position: 'absolute',\n            top: 0,\n            width: 'auto'\n          };\n        } else {\n          style = {\n            height: rowDatum.size,\n            left: columnDatum.offset + horizontalOffsetAdjustment,\n            position: 'absolute',\n            top: rowDatum.offset + verticalOffsetAdjustment,\n            width: columnDatum.size\n          };\n\n          styleCache[key] = style;\n        }\n      }\n\n      var cellRendererParams = {\n        columnIndex: columnIndex,\n        isScrolling: isScrolling,\n        isVisible: isVisible,\n        key: key,\n        parent: parent,\n        rowIndex: rowIndex,\n        style: style\n      };\n\n      var renderedCell = void 0;\n\n      // Avoid re-creating cells while scrolling.\n      // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n      // If a scroll is in progress- cache and reuse cells.\n      // This cache will be thrown away once scrolling completes.\n      // However if we are scaling scroll positions and sizes, we should also avoid caching.\n      // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n      // For more info refer to issue #395\n      //\n      // If isScrollingOptOut is specified, we always cache cells.\n      // For more info refer to issue #1028\n      if ((isScrollingOptOut || isScrolling) && !horizontalOffsetAdjustment && !verticalOffsetAdjustment) {\n        if (!cellCache[key]) {\n          cellCache[key] = cellRenderer(cellRendererParams);\n        }\n\n        renderedCell = cellCache[key];\n\n        // If the user is no longer scrolling, don't cache cells.\n        // This makes dynamic cell content difficult for users and would also lead to a heavier memory footprint.\n      } else {\n        renderedCell = cellRenderer(cellRendererParams);\n      }\n\n      if (renderedCell == null || renderedCell === false) {\n        continue;\n      }\n\n      if (process.env.NODE_ENV !== 'production') {\n        warnAboutMissingStyle(parent, renderedCell);\n      }\n\n      renderedCells.push(renderedCell);\n    }\n  }\n\n  return renderedCells;\n}\n\nfunction warnAboutMissingStyle(parent, renderedCell) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (renderedCell) {\n      // If the direct child is a CellMeasurer, then we should check its child\n      // See issue #611\n      if (renderedCell.type && renderedCell.type.__internalCellMeasurerFlag) {\n        renderedCell = renderedCell.props.children;\n      }\n\n      if (renderedCell && renderedCell.props && renderedCell.props.style === undefined && parent.__warnedAboutMissingStyle !== true) {\n        parent.__warnedAboutMissingStyle = true;\n\n        console.warn('Rendered cell should include style property for positioning.');\n      }\n    }\n  }\n}\nimport { bpfrpt_proptype_CellRangeRendererParams } from './types';","\n\nexport var SCROLL_DIRECTION_BACKWARD = -1;\n\nexport var SCROLL_DIRECTION_FORWARD = 1;\n\nexport var SCROLL_DIRECTION_HORIZONTAL = 'horizontal';\nexport var SCROLL_DIRECTION_VERTICAL = 'vertical';\n\n/**\n * Calculates the number of cells to overscan before and after a specified range.\n * This function ensures that overscanning doesn't exceed the available cells.\n */\n\nexport default function defaultOverscanIndicesGetter(_ref) {\n  var cellCount = _ref.cellCount,\n      overscanCellsCount = _ref.overscanCellsCount,\n      scrollDirection = _ref.scrollDirection,\n      startIndex = _ref.startIndex,\n      stopIndex = _ref.stopIndex;\n\n  // Make sure we render at least 1 cell extra before and after (except near boundaries)\n  // This is necessary in order to support keyboard navigation (TAB/SHIFT+TAB) in some cases\n  // For more info see issues #625\n  overscanCellsCount = Math.max(1, overscanCellsCount);\n\n  if (scrollDirection === SCROLL_DIRECTION_FORWARD) {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - 1),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n    };\n  } else {\n    return {\n      overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n      overscanStopIndex: Math.min(cellCount - 1, stopIndex + 1)\n    };\n  }\n}\nimport { bpfrpt_proptype_OverscanIndicesGetterParams } from './types';\nimport { bpfrpt_proptype_OverscanIndices } from './types';","var bpfrpt_proptype_ScrollIndices = process.env.NODE_ENV === 'production' ? null : {\n  scrollToColumn: PropTypes.number.isRequired,\n  scrollToRow: PropTypes.number.isRequired\n};\nimport PropTypes from \"prop-types\";\nexport { bpfrpt_proptype_ScrollIndices };","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\n\n/**\n * This HOC decorates a virtualized component and responds to arrow-key events by scrolling one row or column at a time.\n */\n\nvar ArrowKeyStepper = function (_React$PureComponent) {\n  _inherits(ArrowKeyStepper, _React$PureComponent);\n\n  function ArrowKeyStepper() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ArrowKeyStepper);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ArrowKeyStepper.__proto__ || _Object$getPrototypeOf(ArrowKeyStepper)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      scrollToColumn: 0,\n      scrollToRow: 0\n    }, _this._columnStartIndex = 0, _this._columnStopIndex = 0, _this._rowStartIndex = 0, _this._rowStopIndex = 0, _this._onKeyDown = function (event) {\n      var _this$props = _this.props,\n          columnCount = _this$props.columnCount,\n          disabled = _this$props.disabled,\n          mode = _this$props.mode,\n          rowCount = _this$props.rowCount;\n\n\n      if (disabled) {\n        return;\n      }\n\n      var _this$_getScrollState = _this._getScrollState(),\n          scrollToColumnPrevious = _this$_getScrollState.scrollToColumn,\n          scrollToRowPrevious = _this$_getScrollState.scrollToRow;\n\n      var _this$_getScrollState2 = _this._getScrollState(),\n          scrollToColumn = _this$_getScrollState2.scrollToColumn,\n          scrollToRow = _this$_getScrollState2.scrollToRow;\n\n      // The above cases all prevent default event event behavior.\n      // This is to keep the grid from scrolling after the snap-to update.\n\n\n      switch (event.key) {\n        case 'ArrowDown':\n          scrollToRow = mode === 'cells' ? Math.min(scrollToRow + 1, rowCount - 1) : Math.min(_this._rowStopIndex + 1, rowCount - 1);\n          break;\n        case 'ArrowLeft':\n          scrollToColumn = mode === 'cells' ? Math.max(scrollToColumn - 1, 0) : Math.max(_this._columnStartIndex - 1, 0);\n          break;\n        case 'ArrowRight':\n          scrollToColumn = mode === 'cells' ? Math.min(scrollToColumn + 1, columnCount - 1) : Math.min(_this._columnStopIndex + 1, columnCount - 1);\n          break;\n        case 'ArrowUp':\n          scrollToRow = mode === 'cells' ? Math.max(scrollToRow - 1, 0) : Math.max(_this._rowStartIndex - 1, 0);\n          break;\n      }\n\n      if (scrollToColumn !== scrollToColumnPrevious || scrollToRow !== scrollToRowPrevious) {\n        event.preventDefault();\n\n        _this._updateScrollState({ scrollToColumn: scrollToColumn, scrollToRow: scrollToRow });\n      }\n    }, _this._onSectionRendered = function (_ref2) {\n      var columnStartIndex = _ref2.columnStartIndex,\n          columnStopIndex = _ref2.columnStopIndex,\n          rowStartIndex = _ref2.rowStartIndex,\n          rowStopIndex = _ref2.rowStopIndex;\n\n      _this._columnStartIndex = columnStartIndex;\n      _this._columnStopIndex = columnStopIndex;\n      _this._rowStartIndex = rowStartIndex;\n      _this._rowStopIndex = rowStopIndex;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(ArrowKeyStepper, [{\n    key: 'setScrollIndexes',\n    value: function setScrollIndexes(_ref3) {\n      var scrollToColumn = _ref3.scrollToColumn,\n          scrollToRow = _ref3.scrollToRow;\n\n      this.setState({\n        scrollToRow: scrollToRow,\n        scrollToColumn: scrollToColumn\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          className = _props.className,\n          children = _props.children;\n\n      var _getScrollState2 = this._getScrollState(),\n          scrollToColumn = _getScrollState2.scrollToColumn,\n          scrollToRow = _getScrollState2.scrollToRow;\n\n      return React.createElement(\n        'div',\n        { className: className, onKeyDown: this._onKeyDown },\n        children({\n          onSectionRendered: this._onSectionRendered,\n          scrollToColumn: scrollToColumn,\n          scrollToRow: scrollToRow\n        })\n      );\n    }\n  }, {\n    key: '_getScrollState',\n    value: function _getScrollState() {\n      return this.props.isControlled ? this.props : this.state;\n    }\n  }, {\n    key: '_updateScrollState',\n    value: function _updateScrollState(_ref4) {\n      var scrollToColumn = _ref4.scrollToColumn,\n          scrollToRow = _ref4.scrollToRow;\n      var _props2 = this.props,\n          isControlled = _props2.isControlled,\n          onScrollToChange = _props2.onScrollToChange;\n\n\n      if (typeof onScrollToChange === 'function') {\n        onScrollToChange({ scrollToColumn: scrollToColumn, scrollToRow: scrollToRow });\n      }\n\n      if (!isControlled) {\n        this.setState({ scrollToColumn: scrollToColumn, scrollToRow: scrollToRow });\n      }\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.isControlled) {\n        return null;\n      }\n\n      if (nextProps.scrollToColumn !== prevState.scrollToColumn || nextProps.scrollToRow !== prevState.scrollToRow) {\n        return {\n          scrollToColumn: nextProps.scrollToColumn,\n          scrollToRow: nextProps.scrollToRow\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return ArrowKeyStepper;\n}(React.PureComponent);\n\nArrowKeyStepper.defaultProps = {\n  disabled: false,\n  isControlled: false,\n  mode: 'edges',\n  scrollToColumn: 0,\n  scrollToRow: 0\n};\nArrowKeyStepper.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  children: PropTypes.func.isRequired,\n  className: PropTypes.string,\n  columnCount: PropTypes.number.isRequired,\n  disabled: PropTypes.bool.isRequired,\n  isControlled: PropTypes.bool.isRequired,\n  mode: PropTypes.oneOf(['cells', 'edges']).isRequired,\n  onScrollToChange: PropTypes.func,\n  rowCount: PropTypes.number.isRequired,\n  scrollToColumn: PropTypes.number.isRequired,\n  scrollToRow: PropTypes.number.isRequired\n};\n\n\npolyfill(ArrowKeyStepper);\n\nexport default ArrowKeyStepper;\nimport { bpfrpt_proptype_RenderedSection } from '../Grid';\nimport { bpfrpt_proptype_ScrollIndices } from './types';\nimport PropTypes from 'prop-types';","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\nvar AutoSizer = function (_React$PureComponent) {\n  _inherits(AutoSizer, _React$PureComponent);\n\n  function AutoSizer() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, AutoSizer);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AutoSizer.__proto__ || _Object$getPrototypeOf(AutoSizer)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      height: _this.props.defaultHeight || 0,\n      width: _this.props.defaultWidth || 0\n    }, _this._onResize = function () {\n      var _this$props = _this.props,\n          disableHeight = _this$props.disableHeight,\n          disableWidth = _this$props.disableWidth,\n          onResize = _this$props.onResize;\n\n\n      if (_this._parentNode) {\n        // Guard against AutoSizer component being removed from the DOM immediately after being added.\n        // This can result in invalid style values which can result in NaN values if we don't handle them.\n        // See issue #150 for more context.\n\n        var _height = _this._parentNode.offsetHeight || 0;\n        var _width = _this._parentNode.offsetWidth || 0;\n\n        var _style = window.getComputedStyle(_this._parentNode) || {};\n        var paddingLeft = parseInt(_style.paddingLeft, 10) || 0;\n        var paddingRight = parseInt(_style.paddingRight, 10) || 0;\n        var paddingTop = parseInt(_style.paddingTop, 10) || 0;\n        var paddingBottom = parseInt(_style.paddingBottom, 10) || 0;\n\n        var newHeight = _height - paddingTop - paddingBottom;\n        var newWidth = _width - paddingLeft - paddingRight;\n\n        if (!disableHeight && _this.state.height !== newHeight || !disableWidth && _this.state.width !== newWidth) {\n          _this.setState({\n            height: _height - paddingTop - paddingBottom,\n            width: _width - paddingLeft - paddingRight\n          });\n\n          onResize({ height: _height, width: _width });\n        }\n      }\n    }, _this._setRef = function (autoSizer) {\n      _this._autoSizer = autoSizer;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(AutoSizer, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var nonce = this.props.nonce;\n\n      if (this._autoSizer && this._autoSizer.parentNode && this._autoSizer.parentNode.ownerDocument && this._autoSizer.parentNode.ownerDocument.defaultView && this._autoSizer.parentNode instanceof this._autoSizer.parentNode.ownerDocument.defaultView.HTMLElement) {\n        // Delay access of parentNode until mount.\n        // This handles edge-cases where the component has already been unmounted before its ref has been set,\n        // As well as libraries like react-lite which have a slightly different lifecycle.\n        this._parentNode = this._autoSizer.parentNode;\n\n        // Defer requiring resize handler in order to support server-side rendering.\n        // See issue #41\n        this._detectElementResize = createDetectElementResize(nonce);\n        this._detectElementResize.addResizeListener(this._parentNode, this._onResize);\n\n        this._onResize();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._detectElementResize && this._parentNode) {\n        this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          children = _props.children,\n          className = _props.className,\n          disableHeight = _props.disableHeight,\n          disableWidth = _props.disableWidth,\n          style = _props.style;\n      var _state = this.state,\n          height = _state.height,\n          width = _state.width;\n\n      // Outer div should not force width/height since that may prevent containers from shrinking.\n      // Inner component should overflow and use calculated width/height.\n      // See issue #68 for more information.\n\n      var outerStyle = { overflow: 'visible' };\n      var childParams = {};\n\n      if (!disableHeight) {\n        outerStyle.height = 0;\n        childParams.height = height;\n      }\n\n      if (!disableWidth) {\n        outerStyle.width = 0;\n        childParams.width = width;\n      }\n\n      /**\n       * TODO: Avoid rendering children before the initial measurements have been collected.\n       * At best this would just be wasting cycles.\n       * Add this check into version 10 though as it could break too many ref callbacks in version 9.\n       * Note that if default width/height props were provided this would still work with SSR.\n      if (\n        height !== 0 &&\n        width !== 0\n      ) {\n        child = children({ height, width })\n      }\n      */\n\n      return React.createElement(\n        'div',\n        {\n          className: className,\n          ref: this._setRef,\n          style: _extends({}, outerStyle, style) },\n        children(childParams)\n      );\n    }\n  }]);\n\n  return AutoSizer;\n}(React.PureComponent);\n\nAutoSizer.defaultProps = {\n  onResize: function onResize() {},\n  disableHeight: false,\n  disableWidth: false,\n  style: {}\n};\nAutoSizer.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  /** Function responsible for rendering children.*/\n  children: PropTypes.func.isRequired,\n\n\n  /** Optional custom CSS class name to attach to root AutoSizer element.  */\n  className: PropTypes.string,\n\n\n  /** Default height to use for initial render; useful for SSR */\n  defaultHeight: PropTypes.number,\n\n\n  /** Default width to use for initial render; useful for SSR */\n  defaultWidth: PropTypes.number,\n\n\n  /** Disable dynamic :height property */\n  disableHeight: PropTypes.bool.isRequired,\n\n\n  /** Disable dynamic :width property */\n  disableWidth: PropTypes.bool.isRequired,\n\n\n  /** Nonce of the inlined stylesheet for Content Security Policy */\n  nonce: PropTypes.string,\n\n\n  /** Callback to be invoked on-resize */\n  onResize: PropTypes.func.isRequired,\n\n\n  /** Optional inline style */\n  style: PropTypes.object\n};\nexport default AutoSizer;\nimport PropTypes from 'prop-types';","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\n\n/**\n * Wraps a cell and measures its rendered content.\n * Measurements are stored in a per-cell cache.\n * Cached-content is not be re-measured.\n */\nvar CellMeasurer = function (_React$PureComponent) {\n  _inherits(CellMeasurer, _React$PureComponent);\n\n  function CellMeasurer() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, CellMeasurer);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = CellMeasurer.__proto__ || _Object$getPrototypeOf(CellMeasurer)).call.apply(_ref, [this].concat(args))), _this), _this._measure = function () {\n      var _this$props = _this.props,\n          cache = _this$props.cache,\n          _this$props$columnInd = _this$props.columnIndex,\n          columnIndex = _this$props$columnInd === undefined ? 0 : _this$props$columnInd,\n          parent = _this$props.parent,\n          _this$props$rowIndex = _this$props.rowIndex,\n          rowIndex = _this$props$rowIndex === undefined ? _this.props.index || 0 : _this$props$rowIndex;\n\n      var _this$_getCellMeasure = _this._getCellMeasurements(),\n          height = _this$_getCellMeasure.height,\n          width = _this$_getCellMeasure.width;\n\n      if (height !== cache.getHeight(rowIndex, columnIndex) || width !== cache.getWidth(rowIndex, columnIndex)) {\n        cache.set(rowIndex, columnIndex, width, height);\n\n        if (parent && typeof parent.recomputeGridSize === 'function') {\n          parent.recomputeGridSize({\n            columnIndex: columnIndex,\n            rowIndex: rowIndex\n          });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(CellMeasurer, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._maybeMeasureCell();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this._maybeMeasureCell();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n\n\n      return typeof children === 'function' ? children({ measure: this._measure }) : children;\n    }\n  }, {\n    key: '_getCellMeasurements',\n    value: function _getCellMeasurements() {\n      var cache = this.props.cache;\n\n\n      var node = findDOMNode(this);\n\n      // TODO Check for a bad combination of fixedWidth and missing numeric width or vice versa with height\n\n      if (node && node.ownerDocument && node.ownerDocument.defaultView && node instanceof node.ownerDocument.defaultView.HTMLElement) {\n        var styleWidth = node.style.width;\n        var styleHeight = node.style.height;\n\n        // If we are re-measuring a cell that has already been measured,\n        // It will have a hard-coded width/height from the previous measurement.\n        // The fact that we are measuring indicates this measurement is probably stale,\n        // So explicitly clear it out (eg set to \"auto\") so we can recalculate.\n        // See issue #593 for more info.\n        // Even if we are measuring initially- if we're inside of a MultiGrid component,\n        // Explicitly clear width/height before measuring to avoid being tainted by another Grid.\n        // eg top/left Grid renders before bottom/right Grid\n        // Since the CellMeasurerCache is shared between them this taints derived cell size values.\n        if (!cache.hasFixedWidth()) {\n          node.style.width = 'auto';\n        }\n        if (!cache.hasFixedHeight()) {\n          node.style.height = 'auto';\n        }\n\n        var height = Math.ceil(node.offsetHeight);\n        var width = Math.ceil(node.offsetWidth);\n\n        // Reset after measuring to avoid breaking styles; see #660\n        if (styleWidth) {\n          node.style.width = styleWidth;\n        }\n        if (styleHeight) {\n          node.style.height = styleHeight;\n        }\n\n        return { height: height, width: width };\n      } else {\n        return { height: 0, width: 0 };\n      }\n    }\n  }, {\n    key: '_maybeMeasureCell',\n    value: function _maybeMeasureCell() {\n      var _props = this.props,\n          cache = _props.cache,\n          _props$columnIndex = _props.columnIndex,\n          columnIndex = _props$columnIndex === undefined ? 0 : _props$columnIndex,\n          parent = _props.parent,\n          _props$rowIndex = _props.rowIndex,\n          rowIndex = _props$rowIndex === undefined ? this.props.index || 0 : _props$rowIndex;\n\n\n      if (!cache.has(rowIndex, columnIndex)) {\n        var _getCellMeasurements2 = this._getCellMeasurements(),\n            height = _getCellMeasurements2.height,\n            width = _getCellMeasurements2.width;\n\n        cache.set(rowIndex, columnIndex, width, height);\n\n        // If size has changed, let Grid know to re-render.\n        if (parent && typeof parent.invalidateCellSizeAfterRender === 'function') {\n          parent.invalidateCellSizeAfterRender({\n            columnIndex: columnIndex,\n            rowIndex: rowIndex\n          });\n        }\n      }\n    }\n  }]);\n\n  return CellMeasurer;\n}(React.PureComponent);\n\n// Used for DEV mode warning check\n\n\nCellMeasurer.__internalCellMeasurerFlag = false;\nCellMeasurer.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  cache: function cache() {\n    return (typeof bpfrpt_proptype_CellMeasureCache === 'function' ? bpfrpt_proptype_CellMeasureCache.isRequired ? bpfrpt_proptype_CellMeasureCache.isRequired : bpfrpt_proptype_CellMeasureCache : PropTypes.shape(bpfrpt_proptype_CellMeasureCache).isRequired).apply(this, arguments);\n  },\n  children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\n  columnIndex: PropTypes.number,\n  index: PropTypes.number,\n  parent: PropTypes.shape({\n    invalidateCellSizeAfterRender: PropTypes.func,\n    recomputeGridSize: PropTypes.func\n  }).isRequired,\n  rowIndex: PropTypes.number\n};\nexport default CellMeasurer;\nif (process.env.NODE_ENV !== 'production') {\n  CellMeasurer.__internalCellMeasurerFlag = true;\n}\nimport { bpfrpt_proptype_CellMeasureCache } from './types';\nimport PropTypes from 'prop-types';","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n\nexport var DEFAULT_HEIGHT = 30;\n\nexport var DEFAULT_WIDTH = 100;\n\n// Enables more intelligent mapping of a given column and row index to an item ID.\n// This prevents a cell cache from being invalidated when its parent collection is modified.\n\n/**\n * Caches measurements for a given cell.\n */\nvar CellMeasurerCache = function () {\n  function CellMeasurerCache() {\n    var _this = this;\n\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, CellMeasurerCache);\n\n    this._cellHeightCache = {};\n    this._cellWidthCache = {};\n    this._columnWidthCache = {};\n    this._rowHeightCache = {};\n    this._columnCount = 0;\n    this._rowCount = 0;\n\n    this.columnWidth = function (_ref) {\n      var index = _ref.index;\n\n      var key = _this._keyMapper(0, index);\n\n      return _this._columnWidthCache.hasOwnProperty(key) ? _this._columnWidthCache[key] : _this._defaultWidth;\n    };\n\n    this.rowHeight = function (_ref2) {\n      var index = _ref2.index;\n\n      var key = _this._keyMapper(index, 0);\n\n      return _this._rowHeightCache.hasOwnProperty(key) ? _this._rowHeightCache[key] : _this._defaultHeight;\n    };\n\n    var defaultHeight = params.defaultHeight,\n        defaultWidth = params.defaultWidth,\n        fixedHeight = params.fixedHeight,\n        fixedWidth = params.fixedWidth,\n        keyMapper = params.keyMapper,\n        minHeight = params.minHeight,\n        minWidth = params.minWidth;\n\n\n    this._hasFixedHeight = fixedHeight === true;\n    this._hasFixedWidth = fixedWidth === true;\n    this._minHeight = minHeight || 0;\n    this._minWidth = minWidth || 0;\n    this._keyMapper = keyMapper || defaultKeyMapper;\n\n    this._defaultHeight = Math.max(this._minHeight, typeof defaultHeight === 'number' ? defaultHeight : DEFAULT_HEIGHT);\n    this._defaultWidth = Math.max(this._minWidth, typeof defaultWidth === 'number' ? defaultWidth : DEFAULT_WIDTH);\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (this._hasFixedHeight === false && this._hasFixedWidth === false) {\n        console.warn(\"CellMeasurerCache should only measure a cell's width or height. \" + 'You have configured CellMeasurerCache to measure both. ' + 'This will result in poor performance.');\n      }\n\n      if (this._hasFixedHeight === false && this._defaultHeight === 0) {\n        console.warn('Fixed height CellMeasurerCache should specify a :defaultHeight greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n      }\n\n      if (this._hasFixedWidth === false && this._defaultWidth === 0) {\n        console.warn('Fixed width CellMeasurerCache should specify a :defaultWidth greater than 0. ' + 'Failing to do so will lead to unnecessary layout and poor performance.');\n      }\n    }\n  }\n\n  _createClass(CellMeasurerCache, [{\n    key: 'clear',\n    value: function clear(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var key = this._keyMapper(rowIndex, columnIndex);\n\n      delete this._cellHeightCache[key];\n      delete this._cellWidthCache[key];\n\n      this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n    }\n  }, {\n    key: 'clearAll',\n    value: function clearAll() {\n      this._cellHeightCache = {};\n      this._cellWidthCache = {};\n      this._columnWidthCache = {};\n      this._rowHeightCache = {};\n      this._rowCount = 0;\n      this._columnCount = 0;\n    }\n  }, {\n    key: 'hasFixedHeight',\n    value: function hasFixedHeight() {\n      return this._hasFixedHeight;\n    }\n  }, {\n    key: 'hasFixedWidth',\n    value: function hasFixedWidth() {\n      return this._hasFixedWidth;\n    }\n  }, {\n    key: 'getHeight',\n    value: function getHeight(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (this._hasFixedHeight) {\n        return this._defaultHeight;\n      } else {\n        var _key = this._keyMapper(rowIndex, columnIndex);\n\n        return this._cellHeightCache.hasOwnProperty(_key) ? Math.max(this._minHeight, this._cellHeightCache[_key]) : this._defaultHeight;\n      }\n    }\n  }, {\n    key: 'getWidth',\n    value: function getWidth(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (this._hasFixedWidth) {\n        return this._defaultWidth;\n      } else {\n        var _key2 = this._keyMapper(rowIndex, columnIndex);\n\n        return this._cellWidthCache.hasOwnProperty(_key2) ? Math.max(this._minWidth, this._cellWidthCache[_key2]) : this._defaultWidth;\n      }\n    }\n  }, {\n    key: 'has',\n    value: function has(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var key = this._keyMapper(rowIndex, columnIndex);\n\n      return this._cellHeightCache.hasOwnProperty(key);\n    }\n  }, {\n    key: 'set',\n    value: function set(rowIndex, columnIndex, width, height) {\n      var key = this._keyMapper(rowIndex, columnIndex);\n\n      if (columnIndex >= this._columnCount) {\n        this._columnCount = columnIndex + 1;\n      }\n      if (rowIndex >= this._rowCount) {\n        this._rowCount = rowIndex + 1;\n      }\n\n      // Size is cached per cell so we don't have to re-measure if cells are re-ordered.\n      this._cellHeightCache[key] = height;\n      this._cellWidthCache[key] = width;\n\n      this._updateCachedColumnAndRowSizes(rowIndex, columnIndex);\n    }\n  }, {\n    key: '_updateCachedColumnAndRowSizes',\n    value: function _updateCachedColumnAndRowSizes(rowIndex, columnIndex) {\n      // :columnWidth and :rowHeight are derived based on all cells in a column/row.\n      // Pre-cache these derived values for faster lookup later.\n      // Reads are expected to occur more frequently than writes in this case.\n      // Only update non-fixed dimensions though to avoid doing unnecessary work.\n      if (!this._hasFixedWidth) {\n        var columnWidth = 0;\n        for (var i = 0; i < this._rowCount; i++) {\n          columnWidth = Math.max(columnWidth, this.getWidth(i, columnIndex));\n        }\n        var columnKey = this._keyMapper(0, columnIndex);\n        this._columnWidthCache[columnKey] = columnWidth;\n      }\n      if (!this._hasFixedHeight) {\n        var rowHeight = 0;\n        for (var _i = 0; _i < this._columnCount; _i++) {\n          rowHeight = Math.max(rowHeight, this.getHeight(rowIndex, _i));\n        }\n        var rowKey = this._keyMapper(rowIndex, 0);\n        this._rowHeightCache[rowKey] = rowHeight;\n      }\n    }\n  }, {\n    key: 'defaultHeight',\n    get: function get() {\n      return this._defaultHeight;\n    }\n  }, {\n    key: 'defaultWidth',\n    get: function get() {\n      return this._defaultWidth;\n    }\n  }]);\n\n  return CellMeasurerCache;\n}();\n\nexport default CellMeasurerCache;\n\n\nfunction defaultKeyMapper(rowIndex, columnIndex) {\n  return rowIndex + '-' + columnIndex;\n}\nimport { bpfrpt_proptype_CellMeasureCache } from './types';","import CellMeasurer from './CellMeasurer';\nimport CellMeasurerCache from './CellMeasurerCache';\n\nexport default CellMeasurer;\nexport { CellMeasurer, CellMeasurerCache };","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\nimport getScrollbarSize from 'dom-helpers/util/scrollbarSize';\n\n// @TODO Merge Collection and CollectionView\n\n/**\n * Specifies the number of milliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nvar IS_SCROLLING_TIMEOUT = 150;\n\n/**\n * Controls whether the Grid updates the DOM element's scrollLeft/scrollTop based on the current state or just observes it.\n * This prevents Grid from interrupting mouse-wheel animations (see issue #2).\n */\nvar SCROLL_POSITION_CHANGE_REASONS = {\n  OBSERVED: 'observed',\n  REQUESTED: 'requested'\n};\n\n/**\n * Monitors changes in properties (eg. cellCount) and state (eg. scroll offsets) to determine when rendering needs to occur.\n * This component does not render any visible content itself; it defers to the specified :cellLayoutManager.\n */\n\nvar CollectionView = function (_React$PureComponent) {\n  _inherits(CollectionView, _React$PureComponent);\n\n  // Invokes callbacks only when their values have changed.\n  function CollectionView() {\n    var _ref;\n\n    _classCallCheck(this, CollectionView);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    // If this component is being rendered server-side, getScrollbarSize() will return undefined.\n    // We handle this case in componentDidMount()\n    var _this = _possibleConstructorReturn(this, (_ref = CollectionView.__proto__ || _Object$getPrototypeOf(CollectionView)).call.apply(_ref, [this].concat(args)));\n\n    _this.state = {\n      isScrolling: false,\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    _this._calculateSizeAndPositionDataOnNextUpdate = false;\n    _this._onSectionRenderedMemoizer = createCallbackMemoizer();\n    _this._onScrollMemoizer = createCallbackMemoizer(false);\n\n    _this._invokeOnSectionRenderedHelper = function () {\n      var _this$props = _this.props,\n          cellLayoutManager = _this$props.cellLayoutManager,\n          onSectionRendered = _this$props.onSectionRendered;\n\n\n      _this._onSectionRenderedMemoizer({\n        callback: onSectionRendered,\n        indices: {\n          indices: cellLayoutManager.getLastRenderedIndices()\n        }\n      });\n    };\n\n    _this._setScrollingContainerRef = function (ref) {\n      _this._scrollingContainer = ref;\n    };\n\n    _this._updateScrollPositionForScrollToCell = function () {\n      var _this$props2 = _this.props,\n          cellLayoutManager = _this$props2.cellLayoutManager,\n          height = _this$props2.height,\n          scrollToAlignment = _this$props2.scrollToAlignment,\n          scrollToCell = _this$props2.scrollToCell,\n          width = _this$props2.width;\n      var _this$state = _this.state,\n          scrollLeft = _this$state.scrollLeft,\n          scrollTop = _this$state.scrollTop;\n\n\n      if (scrollToCell >= 0) {\n        var scrollPosition = cellLayoutManager.getScrollPositionForCell({\n          align: scrollToAlignment,\n          cellIndex: scrollToCell,\n          height: height,\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          width: width\n        });\n\n        if (scrollPosition.scrollLeft !== scrollLeft || scrollPosition.scrollTop !== scrollTop) {\n          _this._setScrollPosition(scrollPosition);\n        }\n      }\n    };\n\n    _this._onScroll = function (event) {\n      // In certain edge-cases React dispatches an onScroll event with an invalid target.scrollLeft / target.scrollTop.\n      // This invalid event can be detected by comparing event.target to this component's scrollable DOM element.\n      // See issue #404 for more information.\n      if (event.target !== _this._scrollingContainer) {\n        return;\n      }\n\n      // Prevent pointer events from interrupting a smooth scroll\n      _this._enablePointerEventsAfterDelay();\n\n      // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n      // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n      // This causes a series of rapid renders that is slow for long lists.\n      // We can avoid that by doing some simple bounds checking to ensure that scrollTop never exceeds the total height.\n      var _this$props3 = _this.props,\n          cellLayoutManager = _this$props3.cellLayoutManager,\n          height = _this$props3.height,\n          isScrollingChange = _this$props3.isScrollingChange,\n          width = _this$props3.width;\n\n      var scrollbarSize = _this._scrollbarSize;\n\n      var _cellLayoutManager$ge = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge.height,\n          totalWidth = _cellLayoutManager$ge.width;\n\n      var scrollLeft = Math.max(0, Math.min(totalWidth - width + scrollbarSize, event.target.scrollLeft));\n      var scrollTop = Math.max(0, Math.min(totalHeight - height + scrollbarSize, event.target.scrollTop));\n\n      // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n      // Don't force a re-render if this is the case.\n      // The mouse may move faster then the animation frame does.\n      // Use requestAnimationFrame to avoid over-updating.\n      if (_this.state.scrollLeft !== scrollLeft || _this.state.scrollTop !== scrollTop) {\n        // Browsers with cancelable scroll events (eg. Firefox) interrupt scrolling animations if scrollTop/scrollLeft is set.\n        // Other browsers (eg. Safari) don't scroll as well without the help under certain conditions (DOM or style changes during scrolling).\n        // All things considered, this seems to be the best current work around that I'm aware of.\n        // For more information see https://github.com/bvaughn/react-virtualized/pull/124\n        var scrollPositionChangeReason = event.cancelable ? SCROLL_POSITION_CHANGE_REASONS.OBSERVED : SCROLL_POSITION_CHANGE_REASONS.REQUESTED;\n\n        // Synchronously set :isScrolling the first time (since _setNextState will reschedule its animation frame each time it's called)\n        if (!_this.state.isScrolling) {\n          isScrollingChange(true);\n        }\n\n        _this.setState({\n          isScrolling: true,\n          scrollLeft: scrollLeft,\n          scrollPositionChangeReason: scrollPositionChangeReason,\n          scrollTop: scrollTop\n        });\n      }\n\n      _this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        totalWidth: totalWidth,\n        totalHeight: totalHeight\n      });\n    };\n\n    _this._scrollbarSize = getScrollbarSize();\n    if (_this._scrollbarSize === undefined) {\n      _this._scrollbarSizeMeasured = false;\n      _this._scrollbarSize = 0;\n    } else {\n      _this._scrollbarSizeMeasured = true;\n    }\n    return _this;\n  }\n\n  /**\n   * Forced recompute of cell sizes and positions.\n   * This function should be called if cell sizes have changed but nothing else has.\n   * Since cell positions are calculated by callbacks, the collection view has no way of detecting when the underlying data has changed.\n   */\n\n\n  _createClass(CollectionView, [{\n    key: 'recomputeCellSizesAndPositions',\n    value: function recomputeCellSizesAndPositions() {\n      this._calculateSizeAndPositionDataOnNextUpdate = true;\n      this.forceUpdate();\n    }\n\n    /* ---------------------------- Component lifecycle methods ---------------------------- */\n\n    /**\n     * @private\n     * This method updates scrollLeft/scrollTop in state for the following conditions:\n     * 1) Empty content (0 rows or columns)\n     * 2) New scroll props overriding the current state\n     * 3) Cells-count or cells-size has changed, making previous scroll offsets invalid\n     */\n\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props = this.props,\n          cellLayoutManager = _props.cellLayoutManager,\n          scrollLeft = _props.scrollLeft,\n          scrollToCell = _props.scrollToCell,\n          scrollTop = _props.scrollTop;\n\n      // If this component was first rendered server-side, scrollbar size will be undefined.\n      // In that event we need to remeasure.\n\n      if (!this._scrollbarSizeMeasured) {\n        this._scrollbarSize = getScrollbarSize();\n        this._scrollbarSizeMeasured = true;\n        this.setState({});\n      }\n\n      if (scrollToCell >= 0) {\n        this._updateScrollPositionForScrollToCell();\n      } else if (scrollLeft >= 0 || scrollTop >= 0) {\n        this._setScrollPosition({ scrollLeft: scrollLeft, scrollTop: scrollTop });\n      }\n\n      // Update onSectionRendered callback.\n      this._invokeOnSectionRenderedHelper();\n\n      var _cellLayoutManager$ge2 = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge2.height,\n          totalWidth = _cellLayoutManager$ge2.width;\n\n      // Initialize onScroll callback.\n\n\n      this._invokeOnScrollMemoizer({\n        scrollLeft: scrollLeft || 0,\n        scrollTop: scrollTop || 0,\n        totalHeight: totalHeight,\n        totalWidth: totalWidth\n      });\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _props2 = this.props,\n          height = _props2.height,\n          scrollToAlignment = _props2.scrollToAlignment,\n          scrollToCell = _props2.scrollToCell,\n          width = _props2.width;\n      var _state = this.state,\n          scrollLeft = _state.scrollLeft,\n          scrollPositionChangeReason = _state.scrollPositionChangeReason,\n          scrollTop = _state.scrollTop;\n\n      // Make sure requested changes to :scrollLeft or :scrollTop get applied.\n      // Assigning to scrollLeft/scrollTop tells the browser to interrupt any running scroll animations,\n      // And to discard any pending async changes to the scroll position that may have happened in the meantime (e.g. on a separate scrolling thread).\n      // So we only set these when we require an adjustment of the scroll position.\n      // See issue #2 for more information.\n\n      if (scrollPositionChangeReason === SCROLL_POSITION_CHANGE_REASONS.REQUESTED) {\n        if (scrollLeft >= 0 && scrollLeft !== prevState.scrollLeft && scrollLeft !== this._scrollingContainer.scrollLeft) {\n          this._scrollingContainer.scrollLeft = scrollLeft;\n        }\n        if (scrollTop >= 0 && scrollTop !== prevState.scrollTop && scrollTop !== this._scrollingContainer.scrollTop) {\n          this._scrollingContainer.scrollTop = scrollTop;\n        }\n      }\n\n      // Update scroll offsets if the current :scrollToCell values requires it\n      if (height !== prevProps.height || scrollToAlignment !== prevProps.scrollToAlignment || scrollToCell !== prevProps.scrollToCell || width !== prevProps.width) {\n        this._updateScrollPositionForScrollToCell();\n      }\n\n      // Update onRowsRendered callback if start/stop indices have changed\n      this._invokeOnSectionRenderedHelper();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._disablePointerEventsTimeoutId) {\n        clearTimeout(this._disablePointerEventsTimeoutId);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props3 = this.props,\n          autoHeight = _props3.autoHeight,\n          cellCount = _props3.cellCount,\n          cellLayoutManager = _props3.cellLayoutManager,\n          className = _props3.className,\n          height = _props3.height,\n          horizontalOverscanSize = _props3.horizontalOverscanSize,\n          id = _props3.id,\n          noContentRenderer = _props3.noContentRenderer,\n          style = _props3.style,\n          verticalOverscanSize = _props3.verticalOverscanSize,\n          width = _props3.width;\n      var _state2 = this.state,\n          isScrolling = _state2.isScrolling,\n          scrollLeft = _state2.scrollLeft,\n          scrollTop = _state2.scrollTop;\n\n      // Memoization reset\n\n      if (this._lastRenderedCellCount !== cellCount || this._lastRenderedCellLayoutManager !== cellLayoutManager || this._calculateSizeAndPositionDataOnNextUpdate) {\n        this._lastRenderedCellCount = cellCount;\n        this._lastRenderedCellLayoutManager = cellLayoutManager;\n        this._calculateSizeAndPositionDataOnNextUpdate = false;\n\n        cellLayoutManager.calculateSizeAndPositionData();\n      }\n\n      var _cellLayoutManager$ge3 = cellLayoutManager.getTotalSize(),\n          totalHeight = _cellLayoutManager$ge3.height,\n          totalWidth = _cellLayoutManager$ge3.width;\n\n      // Safely expand the rendered area by the specified overscan amount\n\n\n      var left = Math.max(0, scrollLeft - horizontalOverscanSize);\n      var top = Math.max(0, scrollTop - verticalOverscanSize);\n      var right = Math.min(totalWidth, scrollLeft + width + horizontalOverscanSize);\n      var bottom = Math.min(totalHeight, scrollTop + height + verticalOverscanSize);\n\n      var childrenToDisplay = height > 0 && width > 0 ? cellLayoutManager.cellRenderers({\n        height: bottom - top,\n        isScrolling: isScrolling,\n        width: right - left,\n        x: left,\n        y: top\n      }) : [];\n\n      var collectionStyle = {\n        boxSizing: 'border-box',\n        direction: 'ltr',\n        height: autoHeight ? 'auto' : height,\n        position: 'relative',\n        WebkitOverflowScrolling: 'touch',\n        width: width,\n        willChange: 'transform'\n      };\n\n      // Force browser to hide scrollbars when we know they aren't necessary.\n      // Otherwise once scrollbars appear they may not disappear again.\n      // For more info see issue #116\n      var verticalScrollBarSize = totalHeight > height ? this._scrollbarSize : 0;\n      var horizontalScrollBarSize = totalWidth > width ? this._scrollbarSize : 0;\n\n      // Also explicitly init styles to 'auto' if scrollbars are required.\n      // This works around an obscure edge case where external CSS styles have not yet been loaded,\n      // But an initial scroll index of offset is set as an external prop.\n      // Without this style, Grid would render the correct range of cells but would NOT update its internal offset.\n      // This was originally reported via clauderic/react-infinite-calendar/issues/23\n      collectionStyle.overflowX = totalWidth + verticalScrollBarSize <= width ? 'hidden' : 'auto';\n      collectionStyle.overflowY = totalHeight + horizontalScrollBarSize <= height ? 'hidden' : 'auto';\n\n      return React.createElement(\n        'div',\n        {\n          ref: this._setScrollingContainerRef,\n          'aria-label': this.props['aria-label'],\n          className: clsx('ReactVirtualized__Collection', className),\n          id: id,\n          onScroll: this._onScroll,\n          role: 'grid',\n          style: _extends({}, collectionStyle, style),\n          tabIndex: 0 },\n        cellCount > 0 && React.createElement(\n          'div',\n          {\n            className: 'ReactVirtualized__Collection__innerScrollContainer',\n            style: {\n              height: totalHeight,\n              maxHeight: totalHeight,\n              maxWidth: totalWidth,\n              overflow: 'hidden',\n              pointerEvents: isScrolling ? 'none' : '',\n              width: totalWidth\n            } },\n          childrenToDisplay\n        ),\n        cellCount === 0 && noContentRenderer()\n      );\n    }\n\n    /* ---------------------------- Helper methods ---------------------------- */\n\n    /**\n     * Sets an :isScrolling flag for a small window of time.\n     * This flag is used to disable pointer events on the scrollable portion of the Collection.\n     * This prevents jerky/stuttery mouse-wheel scrolling.\n     */\n\n  }, {\n    key: '_enablePointerEventsAfterDelay',\n    value: function _enablePointerEventsAfterDelay() {\n      var _this2 = this;\n\n      if (this._disablePointerEventsTimeoutId) {\n        clearTimeout(this._disablePointerEventsTimeoutId);\n      }\n\n      this._disablePointerEventsTimeoutId = setTimeout(function () {\n        var isScrollingChange = _this2.props.isScrollingChange;\n\n\n        isScrollingChange(false);\n\n        _this2._disablePointerEventsTimeoutId = null;\n        _this2.setState({\n          isScrolling: false\n        });\n      }, IS_SCROLLING_TIMEOUT);\n    }\n  }, {\n    key: '_invokeOnScrollMemoizer',\n    value: function _invokeOnScrollMemoizer(_ref2) {\n      var _this3 = this;\n\n      var scrollLeft = _ref2.scrollLeft,\n          scrollTop = _ref2.scrollTop,\n          totalHeight = _ref2.totalHeight,\n          totalWidth = _ref2.totalWidth;\n\n      this._onScrollMemoizer({\n        callback: function callback(_ref3) {\n          var scrollLeft = _ref3.scrollLeft,\n              scrollTop = _ref3.scrollTop;\n          var _props4 = _this3.props,\n              height = _props4.height,\n              onScroll = _props4.onScroll,\n              width = _props4.width;\n\n\n          onScroll({\n            clientHeight: height,\n            clientWidth: width,\n            scrollHeight: totalHeight,\n            scrollLeft: scrollLeft,\n            scrollTop: scrollTop,\n            scrollWidth: totalWidth\n          });\n        },\n        indices: {\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop\n        }\n      });\n    }\n  }, {\n    key: '_setScrollPosition',\n    value: function _setScrollPosition(_ref4) {\n      var scrollLeft = _ref4.scrollLeft,\n          scrollTop = _ref4.scrollTop;\n\n      var newState = {\n        scrollPositionChangeReason: SCROLL_POSITION_CHANGE_REASONS.REQUESTED\n      };\n\n      if (scrollLeft >= 0) {\n        newState.scrollLeft = scrollLeft;\n      }\n\n      if (scrollTop >= 0) {\n        newState.scrollTop = scrollTop;\n      }\n\n      if (scrollLeft >= 0 && scrollLeft !== this.state.scrollLeft || scrollTop >= 0 && scrollTop !== this.state.scrollTop) {\n        this.setState(newState);\n      }\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.cellCount === 0 && (prevState.scrollLeft !== 0 || prevState.scrollTop !== 0)) {\n        return {\n          scrollLeft: 0,\n          scrollTop: 0\n        };\n      } else if (nextProps.scrollLeft !== prevState.scrollLeft || nextProps.scrollTop !== prevState.scrollTop) {\n        return {\n          scrollLeft: nextProps.scrollLeft != null ? nextProps.scrollLeft : prevState.scrollLeft,\n          scrollTop: nextProps.scrollTop != null ? nextProps.scrollTop : prevState.scrollTop\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return CollectionView;\n}(React.PureComponent);\n\nCollectionView.defaultProps = {\n  'aria-label': 'grid',\n  horizontalOverscanSize: 0,\n  noContentRenderer: function noContentRenderer() {\n    return null;\n  },\n  onScroll: function onScroll() {\n    return null;\n  },\n  onSectionRendered: function onSectionRendered() {\n    return null;\n  },\n  scrollToAlignment: 'auto',\n  scrollToCell: -1,\n  style: {},\n  verticalOverscanSize: 0\n};\nCollectionView.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  'aria-label': PropTypes.string,\n\n  /**\n   * Removes fixed height from the scrollingContainer so that the total height\n   * of rows can stretch the window. Intended for use with WindowScroller\n   */\n  autoHeight: PropTypes.bool,\n\n  /**\n   * Number of cells in collection.\n   */\n  cellCount: PropTypes.number.isRequired,\n\n  /**\n   * Calculates cell sizes and positions and manages rendering the appropriate cells given a specified window.\n   */\n  cellLayoutManager: PropTypes.object.isRequired,\n\n  /**\n   * Optional custom CSS class name to attach to root Collection element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * Height of Collection; this property determines the number of visible (vs virtualized) rows.\n   */\n  height: PropTypes.number.isRequired,\n\n  /**\n   * Optional custom id to attach to root Collection element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * Enables the `Collection` to horiontally \"overscan\" its content similar to how `Grid` does.\n   * This can reduce flicker around the edges when a user scrolls quickly.\n   */\n  horizontalOverscanSize: PropTypes.number.isRequired,\n\n  isScrollingChange: PropTypes.func,\n\n  /**\n   * Optional renderer to be used in place of rows when either :rowCount or :cellCount is 0.\n   */\n  noContentRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n   * This callback can be used to sync scrolling between lists, tables, or grids.\n   * ({ clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth }): void\n   */\n  onScroll: PropTypes.func.isRequired,\n\n  /**\n   * Callback invoked with information about the section of the Collection that was just rendered.\n   * This callback is passed a named :indices parameter which is an Array of the most recently rendered section indices.\n   */\n  onSectionRendered: PropTypes.func.isRequired,\n\n  /**\n   * Horizontal offset.\n   */\n  scrollLeft: PropTypes.number,\n\n  /**\n   * Controls scroll-to-cell behavior of the Grid.\n   * The default (\"auto\") scrolls the least amount possible to ensure that the specified cell is fully visible.\n   * Use \"start\" to align cells to the top/left of the Grid and \"end\" to align bottom/right.\n   */\n  scrollToAlignment: PropTypes.oneOf(['auto', 'end', 'start', 'center']).isRequired,\n\n  /**\n   * Cell index to ensure visible (by forcefully scrolling if necessary).\n   */\n  scrollToCell: PropTypes.number.isRequired,\n\n  /**\n   * Vertical offset.\n   */\n  scrollTop: PropTypes.number,\n\n  /**\n   * Optional custom inline style to attach to root Collection element.\n   */\n  style: PropTypes.object,\n\n  /**\n   * Enables the `Collection` to vertically \"overscan\" its content similar to how `Grid` does.\n   * This can reduce flicker around the edges when a user scrolls quickly.\n   */\n  verticalOverscanSize: PropTypes.number.isRequired,\n\n  /**\n   * Width of Collection; this property determines the number of visible (vs virtualized) columns.\n   */\n  width: PropTypes.number.isRequired\n} : {};\n\n\npolyfill(CollectionView);\n\nexport default CollectionView;","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n\n/**\n * A section of the Window.\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * Sections have a fixed size and contain 0 to many cells (tracked by their indices).\n */\nvar Section = function () {\n  function Section(_ref) {\n    var height = _ref.height,\n        width = _ref.width,\n        x = _ref.x,\n        y = _ref.y;\n\n    _classCallCheck(this, Section);\n\n    this.height = height;\n    this.width = width;\n    this.x = x;\n    this.y = y;\n\n    this._indexMap = {};\n    this._indices = [];\n  }\n\n  /** Add a cell to this section. */\n\n\n  _createClass(Section, [{\n    key: 'addCellIndex',\n    value: function addCellIndex(_ref2) {\n      var index = _ref2.index;\n\n      if (!this._indexMap[index]) {\n        this._indexMap[index] = true;\n        this._indices.push(index);\n      }\n    }\n\n    /** Get all cell indices that have been added to this section. */\n\n  }, {\n    key: 'getCellIndices',\n    value: function getCellIndices() {\n      return this._indices;\n    }\n\n    /** Intended for debugger/test purposes only */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      return this.x + ',' + this.y + ' ' + this.width + 'x' + this.height;\n    }\n  }]);\n\n  return Section;\n}();\n\nexport default Section;\nimport { bpfrpt_proptype_Index } from './types';\nimport { bpfrpt_proptype_SizeAndPositionInfo } from './types';","import _Object$keys from 'babel-runtime/core-js/object/keys';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\n/**\n * Window Sections are used to group nearby cells.\n * This enables us to more quickly determine which cells to display in a given region of the Window.\n * \n */\nimport Section from './Section';\n\n\nvar SECTION_SIZE = 100;\n\n/**\n * Contains 0 to many Sections.\n * Grows (and adds Sections) dynamically as cells are registered.\n * Automatically adds cells to the appropriate Section(s).\n */\nvar SectionManager = function () {\n  function SectionManager() {\n    var sectionSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SECTION_SIZE;\n\n    _classCallCheck(this, SectionManager);\n\n    this._sectionSize = sectionSize;\n\n    this._cellMetadata = [];\n    this._sections = {};\n  }\n\n  /**\n   * Gets all cell indices contained in the specified region.\n   * A region may encompass 1 or more Sections.\n   */\n\n\n  _createClass(SectionManager, [{\n    key: 'getCellIndices',\n    value: function getCellIndices(_ref) {\n      var height = _ref.height,\n          width = _ref.width,\n          x = _ref.x,\n          y = _ref.y;\n\n      var indices = {};\n\n      this.getSections({ height: height, width: width, x: x, y: y }).forEach(function (section) {\n        return section.getCellIndices().forEach(function (index) {\n          indices[index] = index;\n        });\n      });\n\n      // Object keys are strings; this function returns numbers\n      return _Object$keys(indices).map(function (index) {\n        return indices[index];\n      });\n    }\n\n    /** Get size and position information for the cell specified. */\n\n  }, {\n    key: 'getCellMetadata',\n    value: function getCellMetadata(_ref2) {\n      var index = _ref2.index;\n\n      return this._cellMetadata[index];\n    }\n\n    /** Get all Sections overlapping the specified region. */\n\n  }, {\n    key: 'getSections',\n    value: function getSections(_ref3) {\n      var height = _ref3.height,\n          width = _ref3.width,\n          x = _ref3.x,\n          y = _ref3.y;\n\n      var sectionXStart = Math.floor(x / this._sectionSize);\n      var sectionXStop = Math.floor((x + width - 1) / this._sectionSize);\n      var sectionYStart = Math.floor(y / this._sectionSize);\n      var sectionYStop = Math.floor((y + height - 1) / this._sectionSize);\n\n      var sections = [];\n\n      for (var sectionX = sectionXStart; sectionX <= sectionXStop; sectionX++) {\n        for (var sectionY = sectionYStart; sectionY <= sectionYStop; sectionY++) {\n          var key = sectionX + '.' + sectionY;\n\n          if (!this._sections[key]) {\n            this._sections[key] = new Section({\n              height: this._sectionSize,\n              width: this._sectionSize,\n              x: sectionX * this._sectionSize,\n              y: sectionY * this._sectionSize\n            });\n          }\n\n          sections.push(this._sections[key]);\n        }\n      }\n\n      return sections;\n    }\n\n    /** Total number of Sections based on the currently registered cells. */\n\n  }, {\n    key: 'getTotalSectionCount',\n    value: function getTotalSectionCount() {\n      return _Object$keys(this._sections).length;\n    }\n\n    /** Intended for debugger/test purposes only */\n\n  }, {\n    key: 'toString',\n    value: function toString() {\n      var _this = this;\n\n      return _Object$keys(this._sections).map(function (index) {\n        return _this._sections[index].toString();\n      });\n    }\n\n    /** Adds a cell to the appropriate Sections and registers it metadata for later retrievable. */\n\n  }, {\n    key: 'registerCell',\n    value: function registerCell(_ref4) {\n      var cellMetadatum = _ref4.cellMetadatum,\n          index = _ref4.index;\n\n      this._cellMetadata[index] = cellMetadatum;\n\n      this.getSections(cellMetadatum).forEach(function (section) {\n        return section.addCellIndex({ index: index });\n      });\n    }\n  }]);\n\n  return SectionManager;\n}();\n\nexport default SectionManager;\nimport { bpfrpt_proptype_Index } from './types';\nimport { bpfrpt_proptype_SizeAndPositionInfo } from './types';","/**\n * Determines a new offset that ensures a certain cell is visible, given the current offset.\n * If the cell is already visible then the current offset will be returned.\n * If the current offset is too great or small, it will be adjusted just enough to ensure the specified index is visible.\n *\n * @param align Desired alignment within container; one of \"auto\" (default), \"start\", or \"end\"\n * @param cellOffset Offset (x or y) position for cell\n * @param cellSize Size (width or height) of cell\n * @param containerSize Total size (width or height) of the container\n * @param currentOffset Container's current (x or y) offset\n * @return Offset to use to ensure the specified cell is visible\n */\nexport default function getUpdatedOffsetForIndex(_ref) {\n  var _ref$align = _ref.align,\n      align = _ref$align === undefined ? 'auto' : _ref$align,\n      cellOffset = _ref.cellOffset,\n      cellSize = _ref.cellSize,\n      containerSize = _ref.containerSize,\n      currentOffset = _ref.currentOffset;\n\n  var maxOffset = cellOffset;\n  var minOffset = maxOffset - containerSize + cellSize;\n\n  switch (align) {\n    case 'start':\n      return maxOffset;\n    case 'end':\n      return minOffset;\n    case 'center':\n      return maxOffset - (containerSize - cellSize) / 2;\n    default:\n      return Math.max(minOffset, Math.min(maxOffset, currentOffset));\n  }\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport CollectionView from './CollectionView';\nimport _calculateSizeAndPositionData from './utils/calculateSizeAndPositionData';\nimport getUpdatedOffsetForIndex from '../utils/getUpdatedOffsetForIndex';\n\n/**\n * Renders scattered or non-linear data.\n * Unlike Grid, which renders checkerboard data, Collection can render arbitrarily positioned- even overlapping- data.\n */\nvar Collection = function (_React$PureComponent) {\n  _inherits(Collection, _React$PureComponent);\n\n  function Collection(props, context) {\n    _classCallCheck(this, Collection);\n\n    var _this = _possibleConstructorReturn(this, (Collection.__proto__ || _Object$getPrototypeOf(Collection)).call(this, props, context));\n\n    _this._cellMetadata = [];\n    _this._lastRenderedCellIndices = [];\n\n    // Cell cache during scroll (for perforamnce)\n    _this._cellCache = [];\n\n    _this._isScrollingChange = _this._isScrollingChange.bind(_this);\n    _this._setCollectionViewRef = _this._setCollectionViewRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(Collection, [{\n    key: 'forceUpdate',\n    value: function forceUpdate() {\n      if (this._collectionView !== undefined) {\n        this._collectionView.forceUpdate();\n      }\n    }\n\n    /** See Collection#recomputeCellSizesAndPositions */\n\n  }, {\n    key: 'recomputeCellSizesAndPositions',\n    value: function recomputeCellSizesAndPositions() {\n      this._cellCache = [];\n      this._collectionView.recomputeCellSizesAndPositions();\n    }\n\n    /** React lifecycle methods */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      var props = _objectWithoutProperties(this.props, []);\n\n      return React.createElement(CollectionView, _extends({\n        cellLayoutManager: this,\n        isScrollingChange: this._isScrollingChange,\n        ref: this._setCollectionViewRef\n      }, props));\n    }\n\n    /** CellLayoutManager interface */\n\n  }, {\n    key: 'calculateSizeAndPositionData',\n    value: function calculateSizeAndPositionData() {\n      var _props = this.props,\n          cellCount = _props.cellCount,\n          cellSizeAndPositionGetter = _props.cellSizeAndPositionGetter,\n          sectionSize = _props.sectionSize;\n\n\n      var data = _calculateSizeAndPositionData({\n        cellCount: cellCount,\n        cellSizeAndPositionGetter: cellSizeAndPositionGetter,\n        sectionSize: sectionSize\n      });\n\n      this._cellMetadata = data.cellMetadata;\n      this._sectionManager = data.sectionManager;\n      this._height = data.height;\n      this._width = data.width;\n    }\n\n    /**\n     * Returns the most recently rendered set of cell indices.\n     */\n\n  }, {\n    key: 'getLastRenderedIndices',\n    value: function getLastRenderedIndices() {\n      return this._lastRenderedCellIndices;\n    }\n\n    /**\n     * Calculates the minimum amount of change from the current scroll position to ensure the specified cell is (fully) visible.\n     */\n\n  }, {\n    key: 'getScrollPositionForCell',\n    value: function getScrollPositionForCell(_ref) {\n      var align = _ref.align,\n          cellIndex = _ref.cellIndex,\n          height = _ref.height,\n          scrollLeft = _ref.scrollLeft,\n          scrollTop = _ref.scrollTop,\n          width = _ref.width;\n      var cellCount = this.props.cellCount;\n\n\n      if (cellIndex >= 0 && cellIndex < cellCount) {\n        var cellMetadata = this._cellMetadata[cellIndex];\n\n        scrollLeft = getUpdatedOffsetForIndex({\n          align: align,\n          cellOffset: cellMetadata.x,\n          cellSize: cellMetadata.width,\n          containerSize: width,\n          currentOffset: scrollLeft,\n          targetIndex: cellIndex\n        });\n\n        scrollTop = getUpdatedOffsetForIndex({\n          align: align,\n          cellOffset: cellMetadata.y,\n          cellSize: cellMetadata.height,\n          containerSize: height,\n          currentOffset: scrollTop,\n          targetIndex: cellIndex\n        });\n      }\n\n      return {\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop\n      };\n    }\n  }, {\n    key: 'getTotalSize',\n    value: function getTotalSize() {\n      return {\n        height: this._height,\n        width: this._width\n      };\n    }\n  }, {\n    key: 'cellRenderers',\n    value: function cellRenderers(_ref2) {\n      var _this2 = this;\n\n      var height = _ref2.height,\n          isScrolling = _ref2.isScrolling,\n          width = _ref2.width,\n          x = _ref2.x,\n          y = _ref2.y;\n      var _props2 = this.props,\n          cellGroupRenderer = _props2.cellGroupRenderer,\n          cellRenderer = _props2.cellRenderer;\n\n      // Store for later calls to getLastRenderedIndices()\n\n      this._lastRenderedCellIndices = this._sectionManager.getCellIndices({\n        height: height,\n        width: width,\n        x: x,\n        y: y\n      });\n\n      return cellGroupRenderer({\n        cellCache: this._cellCache,\n        cellRenderer: cellRenderer,\n        cellSizeAndPositionGetter: function cellSizeAndPositionGetter(_ref3) {\n          var index = _ref3.index;\n          return _this2._sectionManager.getCellMetadata({ index: index });\n        },\n        indices: this._lastRenderedCellIndices,\n        isScrolling: isScrolling\n      });\n    }\n  }, {\n    key: '_isScrollingChange',\n    value: function _isScrollingChange(isScrolling) {\n      if (!isScrolling) {\n        this._cellCache = [];\n      }\n    }\n  }, {\n    key: '_setCollectionViewRef',\n    value: function _setCollectionViewRef(ref) {\n      this._collectionView = ref;\n    }\n  }]);\n\n  return Collection;\n}(React.PureComponent);\n\nCollection.defaultProps = {\n  'aria-label': 'grid',\n  cellGroupRenderer: defaultCellGroupRenderer\n};\nexport default Collection;\nCollection.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  'aria-label': PropTypes.string,\n\n  /**\n   * Number of cells in Collection.\n   */\n  cellCount: PropTypes.number.isRequired,\n\n  /**\n   * Responsible for rendering a group of cells given their indices.\n   * Should implement the following interface: ({\n   *   cellSizeAndPositionGetter:Function,\n   *   indices: Array<number>,\n   *   cellRenderer: Function\n   * }): Array<PropTypes.node>\n   */\n  cellGroupRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Responsible for rendering a cell given an row and column index.\n   * Should implement the following interface: ({ index: number, key: string, style: object }): PropTypes.element\n   */\n  cellRenderer: PropTypes.func.isRequired,\n\n  /**\n   * Callback responsible for returning size and offset/position information for a given cell (index).\n   * ({ index: number }): { height: number, width: number, x: number, y: number }\n   */\n  cellSizeAndPositionGetter: PropTypes.func.isRequired,\n\n  /**\n   * Optionally override the size of the sections a Collection's cells are split into.\n   */\n  sectionSize: PropTypes.number\n} : {};\n\n\nfunction defaultCellGroupRenderer(_ref4) {\n  var cellCache = _ref4.cellCache,\n      cellRenderer = _ref4.cellRenderer,\n      cellSizeAndPositionGetter = _ref4.cellSizeAndPositionGetter,\n      indices = _ref4.indices,\n      isScrolling = _ref4.isScrolling;\n\n  return indices.map(function (index) {\n    var cellMetadata = cellSizeAndPositionGetter({ index: index });\n\n    var cellRendererProps = {\n      index: index,\n      isScrolling: isScrolling,\n      key: index,\n      style: {\n        height: cellMetadata.height,\n        left: cellMetadata.x,\n        position: 'absolute',\n        top: cellMetadata.y,\n        width: cellMetadata.width\n      }\n    };\n\n    // Avoid re-creating cells while scrolling.\n    // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n    // If a scroll is in progress- cache and reuse cells.\n    // This cache will be thrown away once scrolling complets.\n    if (isScrolling) {\n      if (!(index in cellCache)) {\n        cellCache[index] = cellRenderer(cellRendererProps);\n      }\n\n      return cellCache[index];\n    } else {\n      return cellRenderer(cellRendererProps);\n    }\n  }).filter(function (renderedCell) {\n    return !!renderedCell;\n  });\n}\nimport { bpfrpt_proptype_ScrollPosition } from './types';\nimport { bpfrpt_proptype_SizeInfo } from './types';","import SectionManager from '../SectionManager';\n\nexport default function calculateSizeAndPositionData(_ref) {\n  var cellCount = _ref.cellCount,\n      cellSizeAndPositionGetter = _ref.cellSizeAndPositionGetter,\n      sectionSize = _ref.sectionSize;\n\n  var cellMetadata = [];\n  var sectionManager = new SectionManager(sectionSize);\n  var height = 0;\n  var width = 0;\n\n  for (var index = 0; index < cellCount; index++) {\n    var cellMetadatum = cellSizeAndPositionGetter({ index: index });\n\n    if (cellMetadatum.height == null || isNaN(cellMetadatum.height) || cellMetadatum.width == null || isNaN(cellMetadatum.width) || cellMetadatum.x == null || isNaN(cellMetadatum.x) || cellMetadatum.y == null || isNaN(cellMetadatum.y)) {\n      throw Error('Invalid metadata returned for cell ' + index + ':\\n        x:' + cellMetadatum.x + ', y:' + cellMetadatum.y + ', width:' + cellMetadatum.width + ', height:' + cellMetadatum.height);\n    }\n\n    height = Math.max(height, cellMetadatum.y + cellMetadatum.height);\n    width = Math.max(width, cellMetadatum.x + cellMetadatum.width);\n\n    cellMetadata[index] = cellMetadatum;\n    sectionManager.registerCell({\n      cellMetadatum: cellMetadatum,\n      index: index\n    });\n  }\n\n  return {\n    cellMetadata: cellMetadata,\n    height: height,\n    sectionManager: sectionManager,\n    width: width\n  };\n}","import Collection from './Collection';\n\nexport default Collection;\nexport { Collection };","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\n\n/**\n * High-order component that auto-calculates column-widths for `Grid` cells.\n */\n\nvar ColumnSizer = function (_React$PureComponent) {\n  _inherits(ColumnSizer, _React$PureComponent);\n\n  function ColumnSizer(props, context) {\n    _classCallCheck(this, ColumnSizer);\n\n    var _this = _possibleConstructorReturn(this, (ColumnSizer.__proto__ || _Object$getPrototypeOf(ColumnSizer)).call(this, props, context));\n\n    _this._registerChild = _this._registerChild.bind(_this);\n    return _this;\n  }\n\n  _createClass(ColumnSizer, [{\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps) {\n      var _props = this.props,\n          columnMaxWidth = _props.columnMaxWidth,\n          columnMinWidth = _props.columnMinWidth,\n          columnCount = _props.columnCount,\n          width = _props.width;\n\n\n      if (columnMaxWidth !== prevProps.columnMaxWidth || columnMinWidth !== prevProps.columnMinWidth || columnCount !== prevProps.columnCount || width !== prevProps.width) {\n        if (this._registeredChild) {\n          this._registeredChild.recomputeGridSize();\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props2 = this.props,\n          children = _props2.children,\n          columnMaxWidth = _props2.columnMaxWidth,\n          columnMinWidth = _props2.columnMinWidth,\n          columnCount = _props2.columnCount,\n          width = _props2.width;\n\n\n      var safeColumnMinWidth = columnMinWidth || 1;\n\n      var safeColumnMaxWidth = columnMaxWidth ? Math.min(columnMaxWidth, width) : width;\n\n      var columnWidth = width / columnCount;\n      columnWidth = Math.max(safeColumnMinWidth, columnWidth);\n      columnWidth = Math.min(safeColumnMaxWidth, columnWidth);\n      columnWidth = Math.floor(columnWidth);\n\n      var adjustedWidth = Math.min(width, columnWidth * columnCount);\n\n      return children({\n        adjustedWidth: adjustedWidth,\n        columnWidth: columnWidth,\n        getColumnWidth: function getColumnWidth() {\n          return columnWidth;\n        },\n        registerChild: this._registerChild\n      });\n    }\n  }, {\n    key: '_registerChild',\n    value: function _registerChild(child) {\n      if (child && typeof child.recomputeGridSize !== 'function') {\n        throw Error('Unexpected child type registered; only Grid/MultiGrid children are supported.');\n      }\n\n      this._registeredChild = child;\n\n      if (this._registeredChild) {\n        this._registeredChild.recomputeGridSize();\n      }\n    }\n  }]);\n\n  return ColumnSizer;\n}(React.PureComponent);\n\nexport default ColumnSizer;\nColumnSizer.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * Function responsible for rendering a virtualized Grid.\n   * This function should implement the following signature:\n   * ({ adjustedWidth, getColumnWidth, registerChild }) => PropTypes.element\n   *\n   * The specified :getColumnWidth function should be passed to the Grid's :columnWidth property.\n   * The :registerChild should be passed to the Grid's :ref property.\n   * The :adjustedWidth property is optional; it reflects the lesser of the overall width or the width of all columns.\n   */\n  children: PropTypes.func.isRequired,\n\n  /** Optional maximum allowed column width */\n  columnMaxWidth: PropTypes.number,\n\n  /** Optional minimum allowed column width */\n  columnMinWidth: PropTypes.number,\n\n  /** Number of columns in Grid or Table child */\n  columnCount: PropTypes.number.isRequired,\n\n  /** Width of Grid or Table child */\n  width: PropTypes.number.isRequired\n} : {};","import ColumnSizer from './ColumnSizer';\n\nexport default ColumnSizer;\nexport { ColumnSizer };","import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport createCallbackMemoizer from '../utils/createCallbackMemoizer';\n\n/**\n * Higher-order component that manages lazy-loading for \"infinite\" data.\n * This component decorates a virtual component and just-in-time prefetches rows as a user scrolls.\n * It is intended as a convenience component; fork it if you'd like finer-grained control over data-loading.\n */\n\nvar InfiniteLoader = function (_React$PureComponent) {\n  _inherits(InfiniteLoader, _React$PureComponent);\n\n  function InfiniteLoader(props, context) {\n    _classCallCheck(this, InfiniteLoader);\n\n    var _this = _possibleConstructorReturn(this, (InfiniteLoader.__proto__ || _Object$getPrototypeOf(InfiniteLoader)).call(this, props, context));\n\n    _this._loadMoreRowsMemoizer = createCallbackMemoizer();\n\n    _this._onRowsRendered = _this._onRowsRendered.bind(_this);\n    _this._registerChild = _this._registerChild.bind(_this);\n    return _this;\n  }\n\n  _createClass(InfiniteLoader, [{\n    key: 'resetLoadMoreRowsCache',\n    value: function resetLoadMoreRowsCache(autoReload) {\n      this._loadMoreRowsMemoizer = createCallbackMemoizer();\n\n      if (autoReload) {\n        this._doStuff(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n\n\n      return children({\n        onRowsRendered: this._onRowsRendered,\n        registerChild: this._registerChild\n      });\n    }\n  }, {\n    key: '_loadUnloadedRanges',\n    value: function _loadUnloadedRanges(unloadedRanges) {\n      var _this2 = this;\n\n      var loadMoreRows = this.props.loadMoreRows;\n\n\n      unloadedRanges.forEach(function (unloadedRange) {\n        var promise = loadMoreRows(unloadedRange);\n        if (promise) {\n          promise.then(function () {\n            // Refresh the visible rows if any of them have just been loaded.\n            // Otherwise they will remain in their unloaded visual state.\n            if (isRangeVisible({\n              lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n              lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n              startIndex: unloadedRange.startIndex,\n              stopIndex: unloadedRange.stopIndex\n            })) {\n              if (_this2._registeredChild) {\n                forceUpdateReactVirtualizedComponent(_this2._registeredChild, _this2._lastRenderedStartIndex);\n              }\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: '_onRowsRendered',\n    value: function _onRowsRendered(_ref) {\n      var startIndex = _ref.startIndex,\n          stopIndex = _ref.stopIndex;\n\n      this._lastRenderedStartIndex = startIndex;\n      this._lastRenderedStopIndex = stopIndex;\n\n      this._doStuff(startIndex, stopIndex);\n    }\n  }, {\n    key: '_doStuff',\n    value: function _doStuff(startIndex, stopIndex) {\n      var _ref2,\n          _this3 = this;\n\n      var _props = this.props,\n          isRowLoaded = _props.isRowLoaded,\n          minimumBatchSize = _props.minimumBatchSize,\n          rowCount = _props.rowCount,\n          threshold = _props.threshold;\n\n\n      var unloadedRanges = scanForUnloadedRanges({\n        isRowLoaded: isRowLoaded,\n        minimumBatchSize: minimumBatchSize,\n        rowCount: rowCount,\n        startIndex: Math.max(0, startIndex - threshold),\n        stopIndex: Math.min(rowCount - 1, stopIndex + threshold)\n      });\n\n      // For memoize comparison\n      var squashedUnloadedRanges = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(unloadedRanges.map(function (_ref3) {\n        var startIndex = _ref3.startIndex,\n            stopIndex = _ref3.stopIndex;\n        return [startIndex, stopIndex];\n      })));\n\n      this._loadMoreRowsMemoizer({\n        callback: function callback() {\n          _this3._loadUnloadedRanges(unloadedRanges);\n        },\n        indices: { squashedUnloadedRanges: squashedUnloadedRanges }\n      });\n    }\n  }, {\n    key: '_registerChild',\n    value: function _registerChild(registeredChild) {\n      this._registeredChild = registeredChild;\n    }\n  }]);\n\n  return InfiniteLoader;\n}(React.PureComponent);\n\n/**\n * Determines if the specified start/stop range is visible based on the most recently rendered range.\n */\n\n\nInfiniteLoader.defaultProps = {\n  minimumBatchSize: 10,\n  rowCount: 0,\n  threshold: 15\n};\nexport default InfiniteLoader;\nInfiniteLoader.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * Function responsible for rendering a virtualized component.\n   * This function should implement the following signature:\n   * ({ onRowsRendered, registerChild }) => PropTypes.element\n   *\n   * The specified :onRowsRendered function should be passed through to the child's :onRowsRendered property.\n   * The :registerChild callback should be set as the virtualized component's :ref.\n   */\n  children: PropTypes.func.isRequired,\n\n  /**\n   * Function responsible for tracking the loaded state of each row.\n   * It should implement the following signature: ({ index: number }): boolean\n   */\n  isRowLoaded: PropTypes.func.isRequired,\n\n  /**\n   * Callback to be invoked when more rows must be loaded.\n   * It should implement the following signature: ({ startIndex, stopIndex }): Promise\n   * The returned Promise should be resolved once row data has finished loading.\n   * It will be used to determine when to refresh the list with the newly-loaded data.\n   * This callback may be called multiple times in reaction to a single scroll event.\n   */\n  loadMoreRows: PropTypes.func.isRequired,\n\n  /**\n   * Minimum number of rows to be loaded at a time.\n   * This property can be used to batch requests to reduce HTTP requests.\n   */\n  minimumBatchSize: PropTypes.number.isRequired,\n\n  /**\n   * Number of rows in list; can be arbitrary high number if actual number is unknown.\n   */\n  rowCount: PropTypes.number.isRequired,\n\n  /**\n   * Threshold at which to pre-fetch data.\n   * A threshold X means that data will start loading when a user scrolls within X rows.\n   * This value defaults to 15.\n   */\n  threshold: PropTypes.number.isRequired\n} : {};\nexport function isRangeVisible(_ref4) {\n  var lastRenderedStartIndex = _ref4.lastRenderedStartIndex,\n      lastRenderedStopIndex = _ref4.lastRenderedStopIndex,\n      startIndex = _ref4.startIndex,\n      stopIndex = _ref4.stopIndex;\n\n  return !(startIndex > lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n\n/**\n * Returns all of the ranges within a larger range that contain unloaded rows.\n */\nexport function scanForUnloadedRanges(_ref5) {\n  var isRowLoaded = _ref5.isRowLoaded,\n      minimumBatchSize = _ref5.minimumBatchSize,\n      rowCount = _ref5.rowCount,\n      startIndex = _ref5.startIndex,\n      stopIndex = _ref5.stopIndex;\n\n  var unloadedRanges = [];\n\n  var rangeStartIndex = null;\n  var rangeStopIndex = null;\n\n  for (var index = startIndex; index <= stopIndex; index++) {\n    var loaded = isRowLoaded({ index: index });\n\n    if (!loaded) {\n      rangeStopIndex = index;\n      if (rangeStartIndex === null) {\n        rangeStartIndex = index;\n      }\n    } else if (rangeStopIndex !== null) {\n      unloadedRanges.push({\n        startIndex: rangeStartIndex,\n        stopIndex: rangeStopIndex\n      });\n\n      rangeStartIndex = rangeStopIndex = null;\n    }\n  }\n\n  // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n  // Scan forward to try filling our :minimumBatchSize.\n  if (rangeStopIndex !== null) {\n    var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), rowCount - 1);\n\n    for (var _index = rangeStopIndex + 1; _index <= potentialStopIndex; _index++) {\n      if (!isRowLoaded({ index: _index })) {\n        rangeStopIndex = _index;\n      } else {\n        break;\n      }\n    }\n\n    unloadedRanges.push({\n      startIndex: rangeStartIndex,\n      stopIndex: rangeStopIndex\n    });\n  }\n\n  // Check to see if our first range ended prematurely.\n  // In this case we should scan backwards to try filling our :minimumBatchSize.\n  if (unloadedRanges.length) {\n    var firstUnloadedRange = unloadedRanges[0];\n\n    while (firstUnloadedRange.stopIndex - firstUnloadedRange.startIndex + 1 < minimumBatchSize && firstUnloadedRange.startIndex > 0) {\n      var _index2 = firstUnloadedRange.startIndex - 1;\n\n      if (!isRowLoaded({ index: _index2 })) {\n        firstUnloadedRange.startIndex = _index2;\n      } else {\n        break;\n      }\n    }\n  }\n\n  return unloadedRanges;\n}\n\n/**\n * Since RV components use shallowCompare we need to force a render (even though props haven't changed).\n * However InfiniteLoader may wrap a Grid or it may wrap a Table or List.\n * In the first case the built-in React forceUpdate() method is sufficient to force a re-render,\n * But in the latter cases we need to use the RV-specific forceUpdateGrid() method.\n * Else the inner Grid will not be re-rendered and visuals may be stale.\n *\n * Additionally, while a Grid is scrolling the cells can be cached,\n * So it's important to invalidate that cache by recalculating sizes\n * before forcing a rerender.\n */\nexport function forceUpdateReactVirtualizedComponent(component) {\n  var currentIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  var recomputeSize = typeof component.recomputeGridSize === 'function' ? component.recomputeGridSize : component.recomputeRowHeights;\n\n  if (recomputeSize) {\n    recomputeSize.call(component, currentIndex);\n  } else {\n    component.forceUpdate();\n  }\n}","import InfiniteLoader from './InfiniteLoader';\n\nexport default InfiniteLoader;\nexport { InfiniteLoader };","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getOwnPropertyDescriptor from 'babel-runtime/core-js/object/get-own-property-descriptor';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport Grid, { accessibilityOverscanIndicesGetter } from '../Grid';\nimport * as React from 'react';\nimport clsx from 'clsx';\n\n/**\n * It is inefficient to create and manage a large list of DOM elements within a scrolling container\n * if only a few of those elements are visible. The primary purpose of this component is to improve\n * performance by only rendering the DOM nodes that a user is able to see based on their current\n * scroll position.\n *\n * This component renders a virtualized list of elements with either fixed or dynamic heights.\n */\n\nvar List = function (_React$PureComponent) {\n  _inherits(List, _React$PureComponent);\n\n  function List() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, List);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = List.__proto__ || _Object$getPrototypeOf(List)).call.apply(_ref, [this].concat(args))), _this), _this._cellRenderer = function (_ref2) {\n      var parent = _ref2.parent,\n          rowIndex = _ref2.rowIndex,\n          style = _ref2.style,\n          isScrolling = _ref2.isScrolling,\n          isVisible = _ref2.isVisible,\n          key = _ref2.key;\n      var rowRenderer = _this.props.rowRenderer;\n\n      // TRICKY The style object is sometimes cached by Grid.\n      // This prevents new style objects from bypassing shallowCompare().\n      // However as of React 16, style props are auto-frozen (at least in dev mode)\n      // Check to make sure we can still modify the style before proceeding.\n      // https://github.com/facebook/react/commit/977357765b44af8ff0cfea327866861073095c12#commitcomment-20648713\n\n      var _Object$getOwnPropert = _Object$getOwnPropertyDescriptor(style, 'width'),\n          writable = _Object$getOwnPropert.writable;\n\n      if (writable) {\n        // By default, List cells should be 100% width.\n        // This prevents them from flowing under a scrollbar (if present).\n        style.width = '100%';\n      }\n\n      return rowRenderer({\n        index: rowIndex,\n        style: style,\n        isScrolling: isScrolling,\n        isVisible: isVisible,\n        key: key,\n        parent: parent\n      });\n    }, _this._setRef = function (ref) {\n      _this.Grid = ref;\n    }, _this._onScroll = function (_ref3) {\n      var clientHeight = _ref3.clientHeight,\n          scrollHeight = _ref3.scrollHeight,\n          scrollTop = _ref3.scrollTop;\n      var onScroll = _this.props.onScroll;\n\n\n      onScroll({ clientHeight: clientHeight, scrollHeight: scrollHeight, scrollTop: scrollTop });\n    }, _this._onSectionRendered = function (_ref4) {\n      var rowOverscanStartIndex = _ref4.rowOverscanStartIndex,\n          rowOverscanStopIndex = _ref4.rowOverscanStopIndex,\n          rowStartIndex = _ref4.rowStartIndex,\n          rowStopIndex = _ref4.rowStopIndex;\n      var onRowsRendered = _this.props.onRowsRendered;\n\n\n      onRowsRendered({\n        overscanStartIndex: rowOverscanStartIndex,\n        overscanStopIndex: rowOverscanStopIndex,\n        startIndex: rowStartIndex,\n        stopIndex: rowStopIndex\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(List, [{\n    key: 'forceUpdateGrid',\n    value: function forceUpdateGrid() {\n      if (this.Grid) {\n        this.Grid.forceUpdate();\n      }\n    }\n\n    /** See Grid#getOffsetForCell */\n\n  }, {\n    key: 'getOffsetForRow',\n    value: function getOffsetForRow(_ref5) {\n      var alignment = _ref5.alignment,\n          index = _ref5.index;\n\n      if (this.Grid) {\n        var _Grid$getOffsetForCel = this.Grid.getOffsetForCell({\n          alignment: alignment,\n          rowIndex: index,\n          columnIndex: 0\n        }),\n            _scrollTop = _Grid$getOffsetForCel.scrollTop;\n\n        return _scrollTop;\n      }\n      return 0;\n    }\n\n    /** CellMeasurer compatibility */\n\n  }, {\n    key: 'invalidateCellSizeAfterRender',\n    value: function invalidateCellSizeAfterRender(_ref6) {\n      var columnIndex = _ref6.columnIndex,\n          rowIndex = _ref6.rowIndex;\n\n      if (this.Grid) {\n        this.Grid.invalidateCellSizeAfterRender({\n          rowIndex: rowIndex,\n          columnIndex: columnIndex\n        });\n      }\n    }\n\n    /** See Grid#measureAllCells */\n\n  }, {\n    key: 'measureAllRows',\n    value: function measureAllRows() {\n      if (this.Grid) {\n        this.Grid.measureAllCells();\n      }\n    }\n\n    /** CellMeasurer compatibility */\n\n  }, {\n    key: 'recomputeGridSize',\n    value: function recomputeGridSize() {\n      var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref7$columnIndex = _ref7.columnIndex,\n          columnIndex = _ref7$columnIndex === undefined ? 0 : _ref7$columnIndex,\n          _ref7$rowIndex = _ref7.rowIndex,\n          rowIndex = _ref7$rowIndex === undefined ? 0 : _ref7$rowIndex;\n\n      if (this.Grid) {\n        this.Grid.recomputeGridSize({\n          rowIndex: rowIndex,\n          columnIndex: columnIndex\n        });\n      }\n    }\n\n    /** See Grid#recomputeGridSize */\n\n  }, {\n    key: 'recomputeRowHeights',\n    value: function recomputeRowHeights() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.recomputeGridSize({\n          rowIndex: index,\n          columnIndex: 0\n        });\n      }\n    }\n\n    /** See Grid#scrollToPosition */\n\n  }, {\n    key: 'scrollToPosition',\n    value: function scrollToPosition() {\n      var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.scrollToPosition({ scrollTop: scrollTop });\n      }\n    }\n\n    /** See Grid#scrollToCell */\n\n  }, {\n    key: 'scrollToRow',\n    value: function scrollToRow() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.scrollToCell({\n          columnIndex: 0,\n          rowIndex: index\n        });\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          className = _props.className,\n          noRowsRenderer = _props.noRowsRenderer,\n          scrollToIndex = _props.scrollToIndex,\n          width = _props.width;\n\n\n      var classNames = clsx('ReactVirtualized__List', className);\n\n      return React.createElement(Grid, _extends({}, this.props, {\n        autoContainerWidth: true,\n        cellRenderer: this._cellRenderer,\n        className: classNames,\n        columnWidth: width,\n        columnCount: 1,\n        noContentRenderer: noRowsRenderer,\n        onScroll: this._onScroll,\n        onSectionRendered: this._onSectionRendered,\n        ref: this._setRef,\n        scrollToRow: scrollToIndex\n      }));\n    }\n  }]);\n\n  return List;\n}(React.PureComponent);\n\nList.defaultProps = {\n  autoHeight: false,\n  estimatedRowSize: 30,\n  onScroll: function onScroll() {},\n  noRowsRenderer: function noRowsRenderer() {\n    return null;\n  },\n  onRowsRendered: function onRowsRendered() {},\n  overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n  overscanRowCount: 10,\n  scrollToAlignment: 'auto',\n  scrollToIndex: -1,\n  style: {}\n};\nList.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  \"aria-label\": PropTypes.string,\n\n\n  /**\n   * Removes fixed height from the scrollingContainer so that the total height\n   * of rows can stretch the window. Intended for use with WindowScroller\n   */\n  autoHeight: PropTypes.bool.isRequired,\n\n\n  /** Optional CSS class name */\n  className: PropTypes.string,\n\n\n  /**\n   * Used to estimate the total height of a List before all of its rows have actually been measured.\n   * The estimated total height is adjusted as rows are rendered.\n   */\n  estimatedRowSize: PropTypes.number.isRequired,\n\n\n  /** Height constraint for list (determines how many actual rows are rendered) */\n  height: PropTypes.number.isRequired,\n\n\n  /** Optional renderer to be used in place of rows when rowCount is 0 */\n  noRowsRenderer: function noRowsRenderer() {\n    return (typeof bpfrpt_proptype_NoContentRenderer === 'function' ? bpfrpt_proptype_NoContentRenderer.isRequired ? bpfrpt_proptype_NoContentRenderer.isRequired : bpfrpt_proptype_NoContentRenderer : PropTypes.shape(bpfrpt_proptype_NoContentRenderer).isRequired).apply(this, arguments);\n  },\n\n\n  /** Callback invoked with information about the slice of rows that were just rendered.  */\n\n  onRowsRendered: PropTypes.func.isRequired,\n\n\n  /**\n   * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n   * This callback can be used to sync scrolling between lists, tables, or grids.\n   */\n  onScroll: PropTypes.func.isRequired,\n\n\n  /** See Grid#overscanIndicesGetter */\n  overscanIndicesGetter: function overscanIndicesGetter() {\n    return (typeof bpfrpt_proptype_OverscanIndicesGetter === 'function' ? bpfrpt_proptype_OverscanIndicesGetter.isRequired ? bpfrpt_proptype_OverscanIndicesGetter.isRequired : bpfrpt_proptype_OverscanIndicesGetter : PropTypes.shape(bpfrpt_proptype_OverscanIndicesGetter).isRequired).apply(this, arguments);\n  },\n\n\n  /**\n   * Number of rows to render above/below the visible bounds of the list.\n   * These rows can help for smoother scrolling on touch devices.\n   */\n  overscanRowCount: PropTypes.number.isRequired,\n\n\n  /** Either a fixed row height (number) or a function that returns the height of a row given its index.  */\n  rowHeight: function rowHeight() {\n    return (typeof bpfrpt_proptype_CellSize === 'function' ? bpfrpt_proptype_CellSize.isRequired ? bpfrpt_proptype_CellSize.isRequired : bpfrpt_proptype_CellSize : PropTypes.shape(bpfrpt_proptype_CellSize).isRequired).apply(this, arguments);\n  },\n\n\n  /** Responsible for rendering a row given an index; ({ index: number }): node */\n  rowRenderer: function rowRenderer() {\n    return (typeof bpfrpt_proptype_RowRenderer === 'function' ? bpfrpt_proptype_RowRenderer.isRequired ? bpfrpt_proptype_RowRenderer.isRequired : bpfrpt_proptype_RowRenderer : PropTypes.shape(bpfrpt_proptype_RowRenderer).isRequired).apply(this, arguments);\n  },\n\n\n  /** Number of rows in list. */\n  rowCount: PropTypes.number.isRequired,\n\n\n  /** See Grid#scrollToAlignment */\n  scrollToAlignment: function scrollToAlignment() {\n    return (typeof bpfrpt_proptype_Alignment === 'function' ? bpfrpt_proptype_Alignment.isRequired ? bpfrpt_proptype_Alignment.isRequired : bpfrpt_proptype_Alignment : PropTypes.shape(bpfrpt_proptype_Alignment).isRequired).apply(this, arguments);\n  },\n\n\n  /** Row index to ensure visible (by forcefully scrolling if necessary) */\n  scrollToIndex: PropTypes.number.isRequired,\n\n\n  /** Vertical offset. */\n  scrollTop: PropTypes.number,\n\n\n  /** Optional inline style */\n  style: PropTypes.object.isRequired,\n\n\n  /** Tab index for focus */\n  tabIndex: PropTypes.number,\n\n\n  /** Width of list */\n  width: PropTypes.number.isRequired\n};\nexport default List;\nimport { bpfrpt_proptype_NoContentRenderer } from '../Grid';\nimport { bpfrpt_proptype_Alignment } from '../Grid';\nimport { bpfrpt_proptype_CellSize } from '../Grid';\nimport { bpfrpt_proptype_CellPosition } from '../Grid';\nimport { bpfrpt_proptype_OverscanIndicesGetter } from '../Grid';\nimport { bpfrpt_proptype_RenderedSection } from '../Grid';\nimport { bpfrpt_proptype_CellRendererParams } from '../Grid';\nimport { bpfrpt_proptype_Scroll as bpfrpt_proptype_GridScroll } from '../Grid';\nimport { bpfrpt_proptype_RowRenderer } from './types';\nimport { bpfrpt_proptype_RenderedRows } from './types';\nimport { bpfrpt_proptype_Scroll } from './types';\nimport PropTypes from 'prop-types';","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/binary-search-bounds\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\n\nfunction _GEA(a, l, h, y) {\n  var i = h + 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (x >= y) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction _GEP(a, l, h, y, c) {\n  var i = h + 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (c(x, y) >= 0) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchGE(a, y, c, l, h) {\n  if (typeof c === 'function') {\n    return _GEP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n  } else {\n    return _GEA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n  }\n}\n\nfunction _GTA(a, l, h, y) {\n  var i = h + 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (x > y) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction _GTP(a, l, h, y, c) {\n  var i = h + 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (c(x, y) > 0) {\n      i = m;\n      h = m - 1;\n    } else {\n      l = m + 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchGT(a, y, c, l, h) {\n  if (typeof c === 'function') {\n    return _GTP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n  } else {\n    return _GTA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n  }\n}\n\nfunction _LTA(a, l, h, y) {\n  var i = l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (x < y) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction _LTP(a, l, h, y, c) {\n  var i = l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (c(x, y) < 0) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchLT(a, y, c, l, h) {\n  if (typeof c === 'function') {\n    return _LTP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n  } else {\n    return _LTA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n  }\n}\n\nfunction _LEA(a, l, h, y) {\n  var i = l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (x <= y) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction _LEP(a, l, h, y, c) {\n  var i = l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (c(x, y) <= 0) {\n      i = m;\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return i;\n}\nfunction dispatchBsearchLE(a, y, c, l, h) {\n  if (typeof c === 'function') {\n    return _LEP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n  } else {\n    return _LEA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n  }\n}\n\nfunction _EQA(a, l, h, y) {\n  l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    if (x === y) {\n      return m;\n    } else if (x <= y) {\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return -1;\n}\nfunction _EQP(a, l, h, y, c) {\n  l - 1;\n  while (l <= h) {\n    var m = l + h >>> 1,\n        x = a[m];\n    var p = c(x, y);\n    if (p === 0) {\n      return m;\n    } else if (p <= 0) {\n      l = m + 1;\n    } else {\n      h = m - 1;\n    }\n  }\n  return -1;\n}\nfunction dispatchBsearchEQ(a, y, c, l, h) {\n  if (typeof c === 'function') {\n    return _EQP(a, l === void 0 ? 0 : l | 0, h === void 0 ? a.length - 1 : h | 0, y, c);\n  } else {\n    return _EQA(a, c === void 0 ? 0 : c | 0, l === void 0 ? a.length - 1 : l | 0, y);\n  }\n}\n\nexport default {\n  ge: dispatchBsearchGE,\n  gt: dispatchBsearchGT,\n  lt: dispatchBsearchLT,\n  le: dispatchBsearchLE,\n  eq: dispatchBsearchEQ\n};","/**\n * Binary Search Bounds\n * https://github.com/mikolalysenko/interval-tree-1d\n * Mikola Lysenko\n *\n * Inlined because of Content Security Policy issue caused by the use of `new Function(...)` syntax in an upstream dependency.\n * Issue reported here: https://github.com/mikolalysenko/binary-search-bounds/issues/5\n **/\n\nimport bounds from './binarySearchBounds';\n\nvar NOT_FOUND = 0;\nvar SUCCESS = 1;\nvar EMPTY = 2;\n\nfunction IntervalTreeNode(mid, left, right, leftPoints, rightPoints) {\n  this.mid = mid;\n  this.left = left;\n  this.right = right;\n  this.leftPoints = leftPoints;\n  this.rightPoints = rightPoints;\n  this.count = (left ? left.count : 0) + (right ? right.count : 0) + leftPoints.length;\n}\n\nvar proto = IntervalTreeNode.prototype;\n\nfunction copy(a, b) {\n  a.mid = b.mid;\n  a.left = b.left;\n  a.right = b.right;\n  a.leftPoints = b.leftPoints;\n  a.rightPoints = b.rightPoints;\n  a.count = b.count;\n}\n\nfunction rebuild(node, intervals) {\n  var ntree = createIntervalTree(intervals);\n  node.mid = ntree.mid;\n  node.left = ntree.left;\n  node.right = ntree.right;\n  node.leftPoints = ntree.leftPoints;\n  node.rightPoints = ntree.rightPoints;\n  node.count = ntree.count;\n}\n\nfunction rebuildWithInterval(node, interval) {\n  var intervals = node.intervals([]);\n  intervals.push(interval);\n  rebuild(node, intervals);\n}\n\nfunction rebuildWithoutInterval(node, interval) {\n  var intervals = node.intervals([]);\n  var idx = intervals.indexOf(interval);\n  if (idx < 0) {\n    return NOT_FOUND;\n  }\n  intervals.splice(idx, 1);\n  rebuild(node, intervals);\n  return SUCCESS;\n}\n\nproto.intervals = function (result) {\n  result.push.apply(result, this.leftPoints);\n  if (this.left) {\n    this.left.intervals(result);\n  }\n  if (this.right) {\n    this.right.intervals(result);\n  }\n  return result;\n};\n\nproto.insert = function (interval) {\n  var weight = this.count - this.leftPoints.length;\n  this.count += 1;\n  if (interval[1] < this.mid) {\n    if (this.left) {\n      if (4 * (this.left.count + 1) > 3 * (weight + 1)) {\n        rebuildWithInterval(this, interval);\n      } else {\n        this.left.insert(interval);\n      }\n    } else {\n      this.left = createIntervalTree([interval]);\n    }\n  } else if (interval[0] > this.mid) {\n    if (this.right) {\n      if (4 * (this.right.count + 1) > 3 * (weight + 1)) {\n        rebuildWithInterval(this, interval);\n      } else {\n        this.right.insert(interval);\n      }\n    } else {\n      this.right = createIntervalTree([interval]);\n    }\n  } else {\n    var l = bounds.ge(this.leftPoints, interval, compareBegin);\n    var r = bounds.ge(this.rightPoints, interval, compareEnd);\n    this.leftPoints.splice(l, 0, interval);\n    this.rightPoints.splice(r, 0, interval);\n  }\n};\n\nproto.remove = function (interval) {\n  var weight = this.count - this.leftPoints;\n  if (interval[1] < this.mid) {\n    if (!this.left) {\n      return NOT_FOUND;\n    }\n    var rw = this.right ? this.right.count : 0;\n    if (4 * rw > 3 * (weight - 1)) {\n      return rebuildWithoutInterval(this, interval);\n    }\n    var r = this.left.remove(interval);\n    if (r === EMPTY) {\n      this.left = null;\n      this.count -= 1;\n      return SUCCESS;\n    } else if (r === SUCCESS) {\n      this.count -= 1;\n    }\n    return r;\n  } else if (interval[0] > this.mid) {\n    if (!this.right) {\n      return NOT_FOUND;\n    }\n    var lw = this.left ? this.left.count : 0;\n    if (4 * lw > 3 * (weight - 1)) {\n      return rebuildWithoutInterval(this, interval);\n    }\n    var r = this.right.remove(interval);\n    if (r === EMPTY) {\n      this.right = null;\n      this.count -= 1;\n      return SUCCESS;\n    } else if (r === SUCCESS) {\n      this.count -= 1;\n    }\n    return r;\n  } else {\n    if (this.count === 1) {\n      if (this.leftPoints[0] === interval) {\n        return EMPTY;\n      } else {\n        return NOT_FOUND;\n      }\n    }\n    if (this.leftPoints.length === 1 && this.leftPoints[0] === interval) {\n      if (this.left && this.right) {\n        var p = this;\n        var n = this.left;\n        while (n.right) {\n          p = n;\n          n = n.right;\n        }\n        if (p === this) {\n          n.right = this.right;\n        } else {\n          var l = this.left;\n          var r = this.right;\n          p.count -= n.count;\n          p.right = n.left;\n          n.left = l;\n          n.right = r;\n        }\n        copy(this, n);\n        this.count = (this.left ? this.left.count : 0) + (this.right ? this.right.count : 0) + this.leftPoints.length;\n      } else if (this.left) {\n        copy(this, this.left);\n      } else {\n        copy(this, this.right);\n      }\n      return SUCCESS;\n    }\n    for (var l = bounds.ge(this.leftPoints, interval, compareBegin); l < this.leftPoints.length; ++l) {\n      if (this.leftPoints[l][0] !== interval[0]) {\n        break;\n      }\n      if (this.leftPoints[l] === interval) {\n        this.count -= 1;\n        this.leftPoints.splice(l, 1);\n        for (var r = bounds.ge(this.rightPoints, interval, compareEnd); r < this.rightPoints.length; ++r) {\n          if (this.rightPoints[r][1] !== interval[1]) {\n            break;\n          } else if (this.rightPoints[r] === interval) {\n            this.rightPoints.splice(r, 1);\n            return SUCCESS;\n          }\n        }\n      }\n    }\n    return NOT_FOUND;\n  }\n};\n\nfunction reportLeftRange(arr, hi, cb) {\n  for (var i = 0; i < arr.length && arr[i][0] <= hi; ++i) {\n    var r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nfunction reportRightRange(arr, lo, cb) {\n  for (var i = arr.length - 1; i >= 0 && arr[i][1] >= lo; --i) {\n    var r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nfunction reportRange(arr, cb) {\n  for (var i = 0; i < arr.length; ++i) {\n    var r = cb(arr[i]);\n    if (r) {\n      return r;\n    }\n  }\n}\n\nproto.queryPoint = function (x, cb) {\n  if (x < this.mid) {\n    if (this.left) {\n      var r = this.left.queryPoint(x, cb);\n      if (r) {\n        return r;\n      }\n    }\n    return reportLeftRange(this.leftPoints, x, cb);\n  } else if (x > this.mid) {\n    if (this.right) {\n      var r = this.right.queryPoint(x, cb);\n      if (r) {\n        return r;\n      }\n    }\n    return reportRightRange(this.rightPoints, x, cb);\n  } else {\n    return reportRange(this.leftPoints, cb);\n  }\n};\n\nproto.queryInterval = function (lo, hi, cb) {\n  if (lo < this.mid && this.left) {\n    var r = this.left.queryInterval(lo, hi, cb);\n    if (r) {\n      return r;\n    }\n  }\n  if (hi > this.mid && this.right) {\n    var r = this.right.queryInterval(lo, hi, cb);\n    if (r) {\n      return r;\n    }\n  }\n  if (hi < this.mid) {\n    return reportLeftRange(this.leftPoints, hi, cb);\n  } else if (lo > this.mid) {\n    return reportRightRange(this.rightPoints, lo, cb);\n  } else {\n    return reportRange(this.leftPoints, cb);\n  }\n};\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction compareBegin(a, b) {\n  var d = a[0] - b[0];\n  if (d) {\n    return d;\n  }\n  return a[1] - b[1];\n}\n\nfunction compareEnd(a, b) {\n  var d = a[1] - b[1];\n  if (d) {\n    return d;\n  }\n  return a[0] - b[0];\n}\n\nfunction createIntervalTree(intervals) {\n  if (intervals.length === 0) {\n    return null;\n  }\n  var pts = [];\n  for (var i = 0; i < intervals.length; ++i) {\n    pts.push(intervals[i][0], intervals[i][1]);\n  }\n  pts.sort(compareNumbers);\n\n  var mid = pts[pts.length >> 1];\n\n  var leftIntervals = [];\n  var rightIntervals = [];\n  var centerIntervals = [];\n  for (var i = 0; i < intervals.length; ++i) {\n    var s = intervals[i];\n    if (s[1] < mid) {\n      leftIntervals.push(s);\n    } else if (mid < s[0]) {\n      rightIntervals.push(s);\n    } else {\n      centerIntervals.push(s);\n    }\n  }\n\n  //Split center intervals\n  var leftPoints = centerIntervals;\n  var rightPoints = centerIntervals.slice();\n  leftPoints.sort(compareBegin);\n  rightPoints.sort(compareEnd);\n\n  return new IntervalTreeNode(mid, createIntervalTree(leftIntervals), createIntervalTree(rightIntervals), leftPoints, rightPoints);\n}\n\n//User friendly wrapper that makes it possible to support empty trees\nfunction IntervalTree(root) {\n  this.root = root;\n}\n\nvar tproto = IntervalTree.prototype;\n\ntproto.insert = function (interval) {\n  if (this.root) {\n    this.root.insert(interval);\n  } else {\n    this.root = new IntervalTreeNode(interval[0], null, null, [interval], [interval]);\n  }\n};\n\ntproto.remove = function (interval) {\n  if (this.root) {\n    var r = this.root.remove(interval);\n    if (r === EMPTY) {\n      this.root = null;\n    }\n    return r !== NOT_FOUND;\n  }\n  return false;\n};\n\ntproto.queryPoint = function (p, cb) {\n  if (this.root) {\n    return this.root.queryPoint(p, cb);\n  }\n};\n\ntproto.queryInterval = function (lo, hi, cb) {\n  if (lo <= hi && this.root) {\n    return this.root.queryInterval(lo, hi, cb);\n  }\n};\n\nObject.defineProperty(tproto, 'count', {\n  get: function get() {\n    if (this.root) {\n      return this.root.count;\n    }\n    return 0;\n  }\n});\n\nObject.defineProperty(tproto, 'intervals', {\n  get: function get() {\n    if (this.root) {\n      return this.root.intervals([]);\n    }\n    return [];\n  }\n});\n\nexport default function createWrapper(intervals) {\n  if (!intervals || intervals.length === 0) {\n    return new IntervalTree(null);\n  }\n  return new IntervalTree(createIntervalTree(intervals));\n}","import _slicedToArray from 'babel-runtime/helpers/slicedToArray';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport createIntervalTree from '../vendor/intervalTree';\n\n// Position cache requirements:\n//   O(log(n)) lookup of cells to render for a given viewport size\n//   O(1) lookup of shortest measured column (so we know when to enter phase 1)\nvar PositionCache = function () {\n  function PositionCache() {\n    _classCallCheck(this, PositionCache);\n\n    this._columnSizeMap = {};\n    this._intervalTree = createIntervalTree();\n    this._leftMap = {};\n  }\n  // Tracks the height of each column\n\n\n  // Store tops and bottoms of each cell for fast intersection lookup.\n\n\n  // Maps cell index to x coordinates for quick lookup.\n\n\n  _createClass(PositionCache, [{\n    key: 'estimateTotalHeight',\n    value: function estimateTotalHeight(cellCount, columnCount, defaultCellHeight) {\n      var unmeasuredCellCount = cellCount - this.count;\n      return this.tallestColumnSize + Math.ceil(unmeasuredCellCount / columnCount) * defaultCellHeight;\n    }\n\n    // Render all cells visible within the viewport range defined.\n\n  }, {\n    key: 'range',\n    value: function range(scrollTop, clientHeight, renderCallback) {\n      var _this = this;\n\n      this._intervalTree.queryInterval(scrollTop, scrollTop + clientHeight, function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 3),\n            top = _ref2[0],\n            _ = _ref2[1],\n            index = _ref2[2];\n\n        return renderCallback(index, _this._leftMap[index], top);\n      });\n    }\n  }, {\n    key: 'setPosition',\n    value: function setPosition(index, left, top, height) {\n      this._intervalTree.insert([top, top + height, index]);\n      this._leftMap[index] = left;\n\n      var columnSizeMap = this._columnSizeMap;\n      var columnHeight = columnSizeMap[left];\n      if (columnHeight === undefined) {\n        columnSizeMap[left] = top + height;\n      } else {\n        columnSizeMap[left] = Math.max(columnHeight, top + height);\n      }\n    }\n  }, {\n    key: 'count',\n    get: function get() {\n      return this._intervalTree.count;\n    }\n  }, {\n    key: 'shortestColumnSize',\n    get: function get() {\n      var columnSizeMap = this._columnSizeMap;\n\n      var size = 0;\n\n      for (var i in columnSizeMap) {\n        var height = columnSizeMap[i];\n        size = size === 0 ? height : Math.min(size, height);\n      }\n\n      return size;\n    }\n  }, {\n    key: 'tallestColumnSize',\n    get: function get() {\n      var columnSizeMap = this._columnSizeMap;\n\n      var size = 0;\n\n      for (var i in columnSizeMap) {\n        var height = columnSizeMap[i];\n        size = Math.max(size, height);\n      }\n\n      return size;\n    }\n  }]);\n\n  return PositionCache;\n}();\n\nexport default PositionCache;","import _extends from 'babel-runtime/helpers/extends';\nimport _defineProperty from 'babel-runtime/helpers/defineProperty';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport PositionCache from './PositionCache';\nimport { requestAnimationTimeout, cancelAnimationTimeout } from '../utils/requestAnimationTimeout';\n\nvar emptyObject = {};\n\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150;\n\n/**\n * This component efficiently displays arbitrarily positioned cells using windowing techniques.\n * Cell position is determined by an injected `cellPositioner` property.\n * Windowing is vertical; this component does not support horizontal scrolling.\n *\n * Rendering occurs in two phases:\n * 1) First pass uses estimated cell sizes (provided by the cache) to determine how many cells to measure in a batch.\n *    Batch size is chosen using a fast, naive layout algorithm that stacks images in order until the viewport has been filled.\n *    After measurement is complete (componentDidMount or componentDidUpdate) this component evaluates positioned cells\n *    in order to determine if another measurement pass is required (eg if actual cell sizes were less than estimated sizes).\n *    All measurements are permanently cached (keyed by `keyMapper`) for performance purposes.\n * 2) Second pass uses the external `cellPositioner` to layout cells.\n *    At this time the positioner has access to cached size measurements for all cells.\n *    The positions it returns are cached by Masonry for fast access later.\n *    Phase one is repeated if the user scrolls beyond the current layout's bounds.\n *    If the layout is invalidated due to eg a resize, cached positions can be cleared using `recomputeCellPositions()`.\n *\n * Animation constraints:\n *   Simple animations are supported (eg translate/slide into place on initial reveal).\n *   More complex animations are not (eg flying from one position to another on resize).\n *\n * Layout constraints:\n *   This component supports multi-column layout.\n *   The height of each item may vary.\n *   The width of each item must not exceed the width of the column it is \"in\".\n *   The left position of all items within a column must align.\n *   (Items may not span multiple columns.)\n */\n\nvar Masonry = function (_React$PureComponent) {\n  _inherits(Masonry, _React$PureComponent);\n\n  function Masonry() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Masonry);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Masonry.__proto__ || _Object$getPrototypeOf(Masonry)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      isScrolling: false,\n      scrollTop: 0\n    }, _this._invalidateOnUpdateStartIndex = null, _this._invalidateOnUpdateStopIndex = null, _this._positionCache = new PositionCache(), _this._startIndex = null, _this._startIndexMemoized = null, _this._stopIndex = null, _this._stopIndexMemoized = null, _this._debounceResetIsScrollingCallback = function () {\n      _this.setState({\n        isScrolling: false\n      });\n    }, _this._setScrollingContainerRef = function (ref) {\n      _this._scrollingContainer = ref;\n    }, _this._onScroll = function (event) {\n      var height = _this.props.height;\n\n\n      var eventScrollTop = event.target.scrollTop;\n\n      // When this component is shrunk drastically, React dispatches a series of back-to-back scroll events,\n      // Gradually converging on a scrollTop that is within the bounds of the new, smaller height.\n      // This causes a series of rapid renders that is slow for long lists.\n      // We can avoid that by doing some simple bounds checking to ensure that scroll offsets never exceed their bounds.\n      var scrollTop = Math.min(Math.max(0, _this._getEstimatedTotalHeight() - height), eventScrollTop);\n\n      // On iOS, we can arrive at negative offsets by swiping past the start or end.\n      // Avoid re-rendering in this case as it can cause problems; see #532 for more.\n      if (eventScrollTop !== scrollTop) {\n        return;\n      }\n\n      // Prevent pointer events from interrupting a smooth scroll\n      _this._debounceResetIsScrolling();\n\n      // Certain devices (like Apple touchpad) rapid-fire duplicate events.\n      // Don't force a re-render if this is the case.\n      // The mouse may move faster then the animation frame does.\n      // Use requestAnimationFrame to avoid over-updating.\n      if (_this.state.scrollTop !== scrollTop) {\n        _this.setState({\n          isScrolling: true,\n          scrollTop: scrollTop\n        });\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Masonry, [{\n    key: 'clearCellPositions',\n    value: function clearCellPositions() {\n      this._positionCache = new PositionCache();\n      this.forceUpdate();\n    }\n\n    // HACK This method signature was intended for Grid\n\n  }, {\n    key: 'invalidateCellSizeAfterRender',\n    value: function invalidateCellSizeAfterRender(_ref2) {\n      var index = _ref2.rowIndex;\n\n      if (this._invalidateOnUpdateStartIndex === null) {\n        this._invalidateOnUpdateStartIndex = index;\n        this._invalidateOnUpdateStopIndex = index;\n      } else {\n        this._invalidateOnUpdateStartIndex = Math.min(this._invalidateOnUpdateStartIndex, index);\n        this._invalidateOnUpdateStopIndex = Math.max(this._invalidateOnUpdateStopIndex, index);\n      }\n    }\n  }, {\n    key: 'recomputeCellPositions',\n    value: function recomputeCellPositions() {\n      var stopIndex = this._positionCache.count - 1;\n\n      this._positionCache = new PositionCache();\n      this._populatePositionCache(0, stopIndex);\n\n      this.forceUpdate();\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._checkInvalidateOnUpdate();\n      this._invokeOnScrollCallback();\n      this._invokeOnCellsRenderedCallback();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      this._checkInvalidateOnUpdate();\n      this._invokeOnScrollCallback();\n      this._invokeOnCellsRenderedCallback();\n\n      if (this.props.scrollTop !== prevProps.scrollTop) {\n        this._debounceResetIsScrolling();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this._debounceResetIsScrollingId) {\n        cancelAnimationTimeout(this._debounceResetIsScrollingId);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props = this.props,\n          autoHeight = _props.autoHeight,\n          cellCount = _props.cellCount,\n          cellMeasurerCache = _props.cellMeasurerCache,\n          cellRenderer = _props.cellRenderer,\n          className = _props.className,\n          height = _props.height,\n          id = _props.id,\n          keyMapper = _props.keyMapper,\n          overscanByPixels = _props.overscanByPixels,\n          role = _props.role,\n          style = _props.style,\n          tabIndex = _props.tabIndex,\n          width = _props.width,\n          rowDirection = _props.rowDirection;\n      var _state = this.state,\n          isScrolling = _state.isScrolling,\n          scrollTop = _state.scrollTop;\n\n\n      var children = [];\n\n      var estimateTotalHeight = this._getEstimatedTotalHeight();\n\n      var shortestColumnSize = this._positionCache.shortestColumnSize;\n      var measuredCellCount = this._positionCache.count;\n\n      var startIndex = 0;\n      var stopIndex = void 0;\n\n      this._positionCache.range(Math.max(0, scrollTop - overscanByPixels), height + overscanByPixels * 2, function (index, left, top) {\n        var _style;\n\n        if (typeof stopIndex === 'undefined') {\n          startIndex = index;\n          stopIndex = index;\n        } else {\n          startIndex = Math.min(startIndex, index);\n          stopIndex = Math.max(stopIndex, index);\n        }\n\n        children.push(cellRenderer({\n          index: index,\n          isScrolling: isScrolling,\n          key: keyMapper(index),\n          parent: _this2,\n          style: (_style = {\n            height: cellMeasurerCache.getHeight(index)\n          }, _defineProperty(_style, rowDirection === 'ltr' ? 'left' : 'right', left), _defineProperty(_style, 'position', 'absolute'), _defineProperty(_style, 'top', top), _defineProperty(_style, 'width', cellMeasurerCache.getWidth(index)), _style)\n        }));\n      });\n\n      // We need to measure additional cells for this layout\n      if (shortestColumnSize < scrollTop + height + overscanByPixels && measuredCellCount < cellCount) {\n        var batchSize = Math.min(cellCount - measuredCellCount, Math.ceil((scrollTop + height + overscanByPixels - shortestColumnSize) / cellMeasurerCache.defaultHeight * width / cellMeasurerCache.defaultWidth));\n\n        for (var _index = measuredCellCount; _index < measuredCellCount + batchSize; _index++) {\n          stopIndex = _index;\n\n          children.push(cellRenderer({\n            index: _index,\n            isScrolling: isScrolling,\n            key: keyMapper(_index),\n            parent: this,\n            style: {\n              width: cellMeasurerCache.getWidth(_index)\n            }\n          }));\n        }\n      }\n\n      this._startIndex = startIndex;\n      this._stopIndex = stopIndex;\n\n      return React.createElement(\n        'div',\n        {\n          ref: this._setScrollingContainerRef,\n          'aria-label': this.props['aria-label'],\n          className: clsx('ReactVirtualized__Masonry', className),\n          id: id,\n          onScroll: this._onScroll,\n          role: role,\n          style: _extends({\n            boxSizing: 'border-box',\n            direction: 'ltr',\n            height: autoHeight ? 'auto' : height,\n            overflowX: 'hidden',\n            overflowY: estimateTotalHeight < height ? 'hidden' : 'auto',\n            position: 'relative',\n            width: width,\n            WebkitOverflowScrolling: 'touch',\n            willChange: 'transform'\n          }, style),\n          tabIndex: tabIndex },\n        React.createElement(\n          'div',\n          {\n            className: 'ReactVirtualized__Masonry__innerScrollContainer',\n            style: {\n              width: '100%',\n              height: estimateTotalHeight,\n              maxWidth: '100%',\n              maxHeight: estimateTotalHeight,\n              overflow: 'hidden',\n              pointerEvents: isScrolling ? 'none' : '',\n              position: 'relative'\n            } },\n          children\n        )\n      );\n    }\n  }, {\n    key: '_checkInvalidateOnUpdate',\n    value: function _checkInvalidateOnUpdate() {\n      if (typeof this._invalidateOnUpdateStartIndex === 'number') {\n        var _startIndex = this._invalidateOnUpdateStartIndex;\n        var _stopIndex = this._invalidateOnUpdateStopIndex;\n\n        this._invalidateOnUpdateStartIndex = null;\n        this._invalidateOnUpdateStopIndex = null;\n\n        // Query external layout logic for position of newly-measured cells\n        this._populatePositionCache(_startIndex, _stopIndex);\n\n        this.forceUpdate();\n      }\n    }\n  }, {\n    key: '_debounceResetIsScrolling',\n    value: function _debounceResetIsScrolling() {\n      var scrollingResetTimeInterval = this.props.scrollingResetTimeInterval;\n\n\n      if (this._debounceResetIsScrollingId) {\n        cancelAnimationTimeout(this._debounceResetIsScrollingId);\n      }\n\n      this._debounceResetIsScrollingId = requestAnimationTimeout(this._debounceResetIsScrollingCallback, scrollingResetTimeInterval);\n    }\n  }, {\n    key: '_getEstimatedTotalHeight',\n    value: function _getEstimatedTotalHeight() {\n      var _props2 = this.props,\n          cellCount = _props2.cellCount,\n          cellMeasurerCache = _props2.cellMeasurerCache,\n          width = _props2.width;\n\n\n      var estimatedColumnCount = Math.max(1, Math.floor(width / cellMeasurerCache.defaultWidth));\n\n      return this._positionCache.estimateTotalHeight(cellCount, estimatedColumnCount, cellMeasurerCache.defaultHeight);\n    }\n  }, {\n    key: '_invokeOnScrollCallback',\n    value: function _invokeOnScrollCallback() {\n      var _props3 = this.props,\n          height = _props3.height,\n          onScroll = _props3.onScroll;\n      var scrollTop = this.state.scrollTop;\n\n\n      if (this._onScrollMemoized !== scrollTop) {\n        onScroll({\n          clientHeight: height,\n          scrollHeight: this._getEstimatedTotalHeight(),\n          scrollTop: scrollTop\n        });\n\n        this._onScrollMemoized = scrollTop;\n      }\n    }\n  }, {\n    key: '_invokeOnCellsRenderedCallback',\n    value: function _invokeOnCellsRenderedCallback() {\n      if (this._startIndexMemoized !== this._startIndex || this._stopIndexMemoized !== this._stopIndex) {\n        var _onCellsRendered = this.props.onCellsRendered;\n\n\n        _onCellsRendered({\n          startIndex: this._startIndex,\n          stopIndex: this._stopIndex\n        });\n\n        this._startIndexMemoized = this._startIndex;\n        this._stopIndexMemoized = this._stopIndex;\n      }\n    }\n  }, {\n    key: '_populatePositionCache',\n    value: function _populatePositionCache(startIndex, stopIndex) {\n      var _props4 = this.props,\n          cellMeasurerCache = _props4.cellMeasurerCache,\n          cellPositioner = _props4.cellPositioner;\n\n\n      for (var _index2 = startIndex; _index2 <= stopIndex; _index2++) {\n        var _cellPositioner = cellPositioner(_index2),\n            _left = _cellPositioner.left,\n            _top = _cellPositioner.top;\n\n        this._positionCache.setPosition(_index2, _left, _top, cellMeasurerCache.getHeight(_index2));\n      }\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.scrollTop !== undefined && prevState.scrollTop !== nextProps.scrollTop) {\n        return {\n          isScrolling: true,\n          scrollTop: nextProps.scrollTop\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return Masonry;\n}(React.PureComponent);\n\nMasonry.defaultProps = {\n  autoHeight: false,\n  keyMapper: identity,\n  onCellsRendered: noop,\n  onScroll: noop,\n  overscanByPixels: 20,\n  role: 'grid',\n  scrollingResetTimeInterval: DEFAULT_SCROLLING_RESET_TIME_INTERVAL,\n  style: emptyObject,\n  tabIndex: 0,\n  rowDirection: 'ltr'\n};\nMasonry.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  autoHeight: PropTypes.bool.isRequired,\n  cellCount: PropTypes.number.isRequired,\n  cellMeasurerCache: function cellMeasurerCache() {\n    return (typeof CellMeasurerCache === 'function' ? PropTypes.instanceOf(CellMeasurerCache).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n  },\n  cellPositioner: function cellPositioner() {\n    return (typeof Positioner === 'function' ? PropTypes.instanceOf(Positioner).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n  },\n  cellRenderer: function cellRenderer() {\n    return (typeof CellRenderer === 'function' ? PropTypes.instanceOf(CellRenderer).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n  },\n  className: PropTypes.string,\n  height: PropTypes.number.isRequired,\n  id: PropTypes.string,\n  keyMapper: function keyMapper() {\n    return (typeof KeyMapper === 'function' ? PropTypes.instanceOf(KeyMapper).isRequired : PropTypes.any.isRequired).apply(this, arguments);\n  },\n  onCellsRendered: function onCellsRendered() {\n    return (typeof OnCellsRenderedCallback === 'function' ? PropTypes.instanceOf(OnCellsRenderedCallback) : PropTypes.any).apply(this, arguments);\n  },\n  onScroll: function onScroll() {\n    return (typeof OnScrollCallback === 'function' ? PropTypes.instanceOf(OnScrollCallback) : PropTypes.any).apply(this, arguments);\n  },\n  overscanByPixels: PropTypes.number.isRequired,\n  role: PropTypes.string.isRequired,\n  scrollingResetTimeInterval: PropTypes.number.isRequired,\n  style: function style(props, propName, componentName) {\n    if (!Object.prototype.hasOwnProperty.call(props, propName)) {\n      throw new Error('Prop `' + propName + '` has type \\'any\\' or \\'mixed\\', but was not provided to `' + componentName + '`. Pass undefined or any other value.');\n    }\n  },\n  tabIndex: PropTypes.number.isRequired,\n  width: PropTypes.number.isRequired,\n  rowDirection: PropTypes.string.isRequired\n};\n\n\nfunction identity(value) {\n  return value;\n}\n\nfunction noop() {}\n\nvar bpfrpt_proptype_CellMeasurerCache = process.env.NODE_ENV === 'production' ? null : {\n  defaultHeight: PropTypes.number.isRequired,\n  defaultWidth: PropTypes.number.isRequired,\n  getHeight: PropTypes.func.isRequired,\n  getWidth: PropTypes.func.isRequired\n};\n\n\npolyfill(Masonry);\n\nexport default Masonry;\n\nvar bpfrpt_proptype_Positioner = process.env.NODE_ENV === 'production' ? null : PropTypes.func;\nimport { bpfrpt_proptype_AnimationTimeoutId } from '../utils/requestAnimationTimeout';\nimport PropTypes from 'prop-types';\nexport { bpfrpt_proptype_CellMeasurerCache };\nexport { bpfrpt_proptype_Positioner };","import createCellPositioner from './createCellPositioner';\nimport Masonry from './Masonry';\n\nexport default Masonry;\nexport { createCellPositioner, Masonry };","import _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport { CellMeasurerCache } from '../CellMeasurer';\n\n/**\n * Caches measurements for a given cell.\n */\nvar CellMeasurerCacheDecorator = function () {\n  function CellMeasurerCacheDecorator() {\n    var _this = this;\n\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, CellMeasurerCacheDecorator);\n\n    this.columnWidth = function (_ref) {\n      var index = _ref.index;\n\n      _this._cellMeasurerCache.columnWidth({\n        index: index + _this._columnIndexOffset\n      });\n    };\n\n    this.rowHeight = function (_ref2) {\n      var index = _ref2.index;\n\n      _this._cellMeasurerCache.rowHeight({\n        index: index + _this._rowIndexOffset\n      });\n    };\n\n    var cellMeasurerCache = params.cellMeasurerCache,\n        _params$columnIndexOf = params.columnIndexOffset,\n        columnIndexOffset = _params$columnIndexOf === undefined ? 0 : _params$columnIndexOf,\n        _params$rowIndexOffse = params.rowIndexOffset,\n        rowIndexOffset = _params$rowIndexOffse === undefined ? 0 : _params$rowIndexOffse;\n\n\n    this._cellMeasurerCache = cellMeasurerCache;\n    this._columnIndexOffset = columnIndexOffset;\n    this._rowIndexOffset = rowIndexOffset;\n  }\n\n  _createClass(CellMeasurerCacheDecorator, [{\n    key: 'clear',\n    value: function clear(rowIndex, columnIndex) {\n      this._cellMeasurerCache.clear(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n    }\n  }, {\n    key: 'clearAll',\n    value: function clearAll() {\n      this._cellMeasurerCache.clearAll();\n    }\n  }, {\n    key: 'hasFixedHeight',\n    value: function hasFixedHeight() {\n      return this._cellMeasurerCache.hasFixedHeight();\n    }\n  }, {\n    key: 'hasFixedWidth',\n    value: function hasFixedWidth() {\n      return this._cellMeasurerCache.hasFixedWidth();\n    }\n  }, {\n    key: 'getHeight',\n    value: function getHeight(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      return this._cellMeasurerCache.getHeight(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n    }\n  }, {\n    key: 'getWidth',\n    value: function getWidth(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      return this._cellMeasurerCache.getWidth(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n    }\n  }, {\n    key: 'has',\n    value: function has(rowIndex) {\n      var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      return this._cellMeasurerCache.has(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset);\n    }\n  }, {\n    key: 'set',\n    value: function set(rowIndex, columnIndex, width, height) {\n      this._cellMeasurerCache.set(rowIndex + this._rowIndexOffset, columnIndex + this._columnIndexOffset, width, height);\n    }\n  }, {\n    key: 'defaultHeight',\n    get: function get() {\n      return this._cellMeasurerCache.defaultHeight;\n    }\n  }, {\n    key: 'defaultWidth',\n    get: function get() {\n      return this._cellMeasurerCache.defaultWidth;\n    }\n  }]);\n\n  return CellMeasurerCacheDecorator;\n}();\n\nexport default CellMeasurerCacheDecorator;","import _extends from 'babel-runtime/helpers/extends';\nimport _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport CellMeasurerCacheDecorator from './CellMeasurerCacheDecorator';\nimport Grid from '../Grid';\n\nvar SCROLLBAR_SIZE_BUFFER = 20;\n\n/**\n * Renders 1, 2, or 4 Grids depending on configuration.\n * A main (body) Grid will always be rendered.\n * Optionally, 1-2 Grids for sticky header rows will also be rendered.\n * If no sticky columns, only 1 sticky header Grid will be rendered.\n * If sticky columns, 2 sticky header Grids will be rendered.\n */\n\nvar MultiGrid = function (_React$PureComponent) {\n  _inherits(MultiGrid, _React$PureComponent);\n\n  function MultiGrid(props, context) {\n    _classCallCheck(this, MultiGrid);\n\n    var _this = _possibleConstructorReturn(this, (MultiGrid.__proto__ || _Object$getPrototypeOf(MultiGrid)).call(this, props, context));\n\n    _initialiseProps.call(_this);\n\n    var deferredMeasurementCache = props.deferredMeasurementCache,\n        fixedColumnCount = props.fixedColumnCount,\n        fixedRowCount = props.fixedRowCount;\n\n\n    _this._maybeCalculateCachedStyles(true);\n\n    if (deferredMeasurementCache) {\n      _this._deferredMeasurementCacheBottomLeftGrid = fixedRowCount > 0 ? new CellMeasurerCacheDecorator({\n        cellMeasurerCache: deferredMeasurementCache,\n        columnIndexOffset: 0,\n        rowIndexOffset: fixedRowCount\n      }) : deferredMeasurementCache;\n\n      _this._deferredMeasurementCacheBottomRightGrid = fixedColumnCount > 0 || fixedRowCount > 0 ? new CellMeasurerCacheDecorator({\n        cellMeasurerCache: deferredMeasurementCache,\n        columnIndexOffset: fixedColumnCount,\n        rowIndexOffset: fixedRowCount\n      }) : deferredMeasurementCache;\n\n      _this._deferredMeasurementCacheTopRightGrid = fixedColumnCount > 0 ? new CellMeasurerCacheDecorator({\n        cellMeasurerCache: deferredMeasurementCache,\n        columnIndexOffset: fixedColumnCount,\n        rowIndexOffset: 0\n      }) : deferredMeasurementCache;\n    }\n    return _this;\n  }\n\n  _createClass(MultiGrid, [{\n    key: 'forceUpdateGrids',\n    value: function forceUpdateGrids() {\n      this._bottomLeftGrid && this._bottomLeftGrid.forceUpdate();\n      this._bottomRightGrid && this._bottomRightGrid.forceUpdate();\n      this._topLeftGrid && this._topLeftGrid.forceUpdate();\n      this._topRightGrid && this._topRightGrid.forceUpdate();\n    }\n\n    /** See Grid#invalidateCellSizeAfterRender */\n\n  }, {\n    key: 'invalidateCellSizeAfterRender',\n    value: function invalidateCellSizeAfterRender() {\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref$columnIndex = _ref.columnIndex,\n          columnIndex = _ref$columnIndex === undefined ? 0 : _ref$columnIndex,\n          _ref$rowIndex = _ref.rowIndex,\n          rowIndex = _ref$rowIndex === undefined ? 0 : _ref$rowIndex;\n\n      this._deferredInvalidateColumnIndex = typeof this._deferredInvalidateColumnIndex === 'number' ? Math.min(this._deferredInvalidateColumnIndex, columnIndex) : columnIndex;\n      this._deferredInvalidateRowIndex = typeof this._deferredInvalidateRowIndex === 'number' ? Math.min(this._deferredInvalidateRowIndex, rowIndex) : rowIndex;\n    }\n\n    /** See Grid#measureAllCells */\n\n  }, {\n    key: 'measureAllCells',\n    value: function measureAllCells() {\n      this._bottomLeftGrid && this._bottomLeftGrid.measureAllCells();\n      this._bottomRightGrid && this._bottomRightGrid.measureAllCells();\n      this._topLeftGrid && this._topLeftGrid.measureAllCells();\n      this._topRightGrid && this._topRightGrid.measureAllCells();\n    }\n\n    /** See Grid#recomputeGridSize */\n\n  }, {\n    key: 'recomputeGridSize',\n    value: function recomputeGridSize() {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref2$columnIndex = _ref2.columnIndex,\n          columnIndex = _ref2$columnIndex === undefined ? 0 : _ref2$columnIndex,\n          _ref2$rowIndex = _ref2.rowIndex,\n          rowIndex = _ref2$rowIndex === undefined ? 0 : _ref2$rowIndex;\n\n      var _props = this.props,\n          fixedColumnCount = _props.fixedColumnCount,\n          fixedRowCount = _props.fixedRowCount;\n\n\n      var adjustedColumnIndex = Math.max(0, columnIndex - fixedColumnCount);\n      var adjustedRowIndex = Math.max(0, rowIndex - fixedRowCount);\n\n      this._bottomLeftGrid && this._bottomLeftGrid.recomputeGridSize({\n        columnIndex: columnIndex,\n        rowIndex: adjustedRowIndex\n      });\n      this._bottomRightGrid && this._bottomRightGrid.recomputeGridSize({\n        columnIndex: adjustedColumnIndex,\n        rowIndex: adjustedRowIndex\n      });\n      this._topLeftGrid && this._topLeftGrid.recomputeGridSize({\n        columnIndex: columnIndex,\n        rowIndex: rowIndex\n      });\n      this._topRightGrid && this._topRightGrid.recomputeGridSize({\n        columnIndex: adjustedColumnIndex,\n        rowIndex: rowIndex\n      });\n\n      this._leftGridWidth = null;\n      this._topGridHeight = null;\n      this._maybeCalculateCachedStyles(true);\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props2 = this.props,\n          scrollLeft = _props2.scrollLeft,\n          scrollTop = _props2.scrollTop;\n\n\n      if (scrollLeft > 0 || scrollTop > 0) {\n        var newState = {};\n\n        if (scrollLeft > 0) {\n          newState.scrollLeft = scrollLeft;\n        }\n\n        if (scrollTop > 0) {\n          newState.scrollTop = scrollTop;\n        }\n\n        this.setState(newState);\n      }\n      this._handleInvalidatedGridSize();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this._handleInvalidatedGridSize();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props3 = this.props,\n          onScroll = _props3.onScroll,\n          onSectionRendered = _props3.onSectionRendered,\n          onScrollbarPresenceChange = _props3.onScrollbarPresenceChange,\n          scrollLeftProp = _props3.scrollLeft,\n          scrollToColumn = _props3.scrollToColumn,\n          scrollTopProp = _props3.scrollTop,\n          scrollToRow = _props3.scrollToRow,\n          rest = _objectWithoutProperties(_props3, ['onScroll', 'onSectionRendered', 'onScrollbarPresenceChange', 'scrollLeft', 'scrollToColumn', 'scrollTop', 'scrollToRow']);\n\n      this._prepareForRender();\n\n      // Don't render any of our Grids if there are no cells.\n      // This mirrors what Grid does,\n      // And prevents us from recording inaccurage measurements when used with CellMeasurer.\n      if (this.props.width === 0 || this.props.height === 0) {\n        return null;\n      }\n\n      // scrollTop and scrollLeft props are explicitly filtered out and ignored\n\n      var _state = this.state,\n          scrollLeft = _state.scrollLeft,\n          scrollTop = _state.scrollTop;\n\n\n      return React.createElement(\n        'div',\n        { style: this._containerOuterStyle },\n        React.createElement(\n          'div',\n          { style: this._containerTopStyle },\n          this._renderTopLeftGrid(rest),\n          this._renderTopRightGrid(_extends({}, rest, {\n            onScroll: onScroll,\n            scrollLeft: scrollLeft\n          }))\n        ),\n        React.createElement(\n          'div',\n          { style: this._containerBottomStyle },\n          this._renderBottomLeftGrid(_extends({}, rest, {\n            onScroll: onScroll,\n            scrollTop: scrollTop\n          })),\n          this._renderBottomRightGrid(_extends({}, rest, {\n            onScroll: onScroll,\n            onSectionRendered: onSectionRendered,\n            scrollLeft: scrollLeft,\n            scrollToColumn: scrollToColumn,\n            scrollToRow: scrollToRow,\n            scrollTop: scrollTop\n          }))\n        )\n      );\n    }\n  }, {\n    key: '_getBottomGridHeight',\n    value: function _getBottomGridHeight(props) {\n      var height = props.height;\n\n\n      var topGridHeight = this._getTopGridHeight(props);\n\n      return height - topGridHeight;\n    }\n  }, {\n    key: '_getLeftGridWidth',\n    value: function _getLeftGridWidth(props) {\n      var fixedColumnCount = props.fixedColumnCount,\n          columnWidth = props.columnWidth;\n\n\n      if (this._leftGridWidth == null) {\n        if (typeof columnWidth === 'function') {\n          var leftGridWidth = 0;\n\n          for (var index = 0; index < fixedColumnCount; index++) {\n            leftGridWidth += columnWidth({ index: index });\n          }\n\n          this._leftGridWidth = leftGridWidth;\n        } else {\n          this._leftGridWidth = columnWidth * fixedColumnCount;\n        }\n      }\n\n      return this._leftGridWidth;\n    }\n  }, {\n    key: '_getRightGridWidth',\n    value: function _getRightGridWidth(props) {\n      var width = props.width;\n\n\n      var leftGridWidth = this._getLeftGridWidth(props);\n\n      return width - leftGridWidth;\n    }\n  }, {\n    key: '_getTopGridHeight',\n    value: function _getTopGridHeight(props) {\n      var fixedRowCount = props.fixedRowCount,\n          rowHeight = props.rowHeight;\n\n\n      if (this._topGridHeight == null) {\n        if (typeof rowHeight === 'function') {\n          var topGridHeight = 0;\n\n          for (var index = 0; index < fixedRowCount; index++) {\n            topGridHeight += rowHeight({ index: index });\n          }\n\n          this._topGridHeight = topGridHeight;\n        } else {\n          this._topGridHeight = rowHeight * fixedRowCount;\n        }\n      }\n\n      return this._topGridHeight;\n    }\n  }, {\n    key: '_handleInvalidatedGridSize',\n    value: function _handleInvalidatedGridSize() {\n      if (typeof this._deferredInvalidateColumnIndex === 'number') {\n        var columnIndex = this._deferredInvalidateColumnIndex;\n        var rowIndex = this._deferredInvalidateRowIndex;\n\n        this._deferredInvalidateColumnIndex = null;\n        this._deferredInvalidateRowIndex = null;\n\n        this.recomputeGridSize({\n          columnIndex: columnIndex,\n          rowIndex: rowIndex\n        });\n        this.forceUpdate();\n      }\n    }\n\n    /**\n     * Avoid recreating inline styles each render; this bypasses Grid's shallowCompare.\n     * This method recalculates styles only when specific props change.\n     */\n\n  }, {\n    key: '_maybeCalculateCachedStyles',\n    value: function _maybeCalculateCachedStyles(resetAll) {\n      var _props4 = this.props,\n          columnWidth = _props4.columnWidth,\n          enableFixedColumnScroll = _props4.enableFixedColumnScroll,\n          enableFixedRowScroll = _props4.enableFixedRowScroll,\n          height = _props4.height,\n          fixedColumnCount = _props4.fixedColumnCount,\n          fixedRowCount = _props4.fixedRowCount,\n          rowHeight = _props4.rowHeight,\n          style = _props4.style,\n          styleBottomLeftGrid = _props4.styleBottomLeftGrid,\n          styleBottomRightGrid = _props4.styleBottomRightGrid,\n          styleTopLeftGrid = _props4.styleTopLeftGrid,\n          styleTopRightGrid = _props4.styleTopRightGrid,\n          width = _props4.width;\n\n\n      var sizeChange = resetAll || height !== this._lastRenderedHeight || width !== this._lastRenderedWidth;\n      var leftSizeChange = resetAll || columnWidth !== this._lastRenderedColumnWidth || fixedColumnCount !== this._lastRenderedFixedColumnCount;\n      var topSizeChange = resetAll || fixedRowCount !== this._lastRenderedFixedRowCount || rowHeight !== this._lastRenderedRowHeight;\n\n      if (resetAll || sizeChange || style !== this._lastRenderedStyle) {\n        this._containerOuterStyle = _extends({\n          height: height,\n          overflow: 'visible', // Let :focus outline show through\n          width: width\n        }, style);\n      }\n\n      if (resetAll || sizeChange || topSizeChange) {\n        this._containerTopStyle = {\n          height: this._getTopGridHeight(this.props),\n          position: 'relative',\n          width: width\n        };\n\n        this._containerBottomStyle = {\n          height: height - this._getTopGridHeight(this.props),\n          overflow: 'visible', // Let :focus outline show through\n          position: 'relative',\n          width: width\n        };\n      }\n\n      if (resetAll || styleBottomLeftGrid !== this._lastRenderedStyleBottomLeftGrid) {\n        this._bottomLeftGridStyle = _extends({\n          left: 0,\n          overflowX: 'hidden',\n          overflowY: enableFixedColumnScroll ? 'auto' : 'hidden',\n          position: 'absolute'\n        }, styleBottomLeftGrid);\n      }\n\n      if (resetAll || leftSizeChange || styleBottomRightGrid !== this._lastRenderedStyleBottomRightGrid) {\n        this._bottomRightGridStyle = _extends({\n          left: this._getLeftGridWidth(this.props),\n          position: 'absolute'\n        }, styleBottomRightGrid);\n      }\n\n      if (resetAll || styleTopLeftGrid !== this._lastRenderedStyleTopLeftGrid) {\n        this._topLeftGridStyle = _extends({\n          left: 0,\n          overflowX: 'hidden',\n          overflowY: 'hidden',\n          position: 'absolute',\n          top: 0\n        }, styleTopLeftGrid);\n      }\n\n      if (resetAll || leftSizeChange || styleTopRightGrid !== this._lastRenderedStyleTopRightGrid) {\n        this._topRightGridStyle = _extends({\n          left: this._getLeftGridWidth(this.props),\n          overflowX: enableFixedRowScroll ? 'auto' : 'hidden',\n          overflowY: 'hidden',\n          position: 'absolute',\n          top: 0\n        }, styleTopRightGrid);\n      }\n\n      this._lastRenderedColumnWidth = columnWidth;\n      this._lastRenderedFixedColumnCount = fixedColumnCount;\n      this._lastRenderedFixedRowCount = fixedRowCount;\n      this._lastRenderedHeight = height;\n      this._lastRenderedRowHeight = rowHeight;\n      this._lastRenderedStyle = style;\n      this._lastRenderedStyleBottomLeftGrid = styleBottomLeftGrid;\n      this._lastRenderedStyleBottomRightGrid = styleBottomRightGrid;\n      this._lastRenderedStyleTopLeftGrid = styleTopLeftGrid;\n      this._lastRenderedStyleTopRightGrid = styleTopRightGrid;\n      this._lastRenderedWidth = width;\n    }\n  }, {\n    key: '_prepareForRender',\n    value: function _prepareForRender() {\n      if (this._lastRenderedColumnWidth !== this.props.columnWidth || this._lastRenderedFixedColumnCount !== this.props.fixedColumnCount) {\n        this._leftGridWidth = null;\n      }\n\n      if (this._lastRenderedFixedRowCount !== this.props.fixedRowCount || this._lastRenderedRowHeight !== this.props.rowHeight) {\n        this._topGridHeight = null;\n      }\n\n      this._maybeCalculateCachedStyles();\n\n      this._lastRenderedColumnWidth = this.props.columnWidth;\n      this._lastRenderedFixedColumnCount = this.props.fixedColumnCount;\n      this._lastRenderedFixedRowCount = this.props.fixedRowCount;\n      this._lastRenderedRowHeight = this.props.rowHeight;\n    }\n  }, {\n    key: '_renderBottomLeftGrid',\n    value: function _renderBottomLeftGrid(props) {\n      var enableFixedColumnScroll = props.enableFixedColumnScroll,\n          fixedColumnCount = props.fixedColumnCount,\n          fixedRowCount = props.fixedRowCount,\n          rowCount = props.rowCount,\n          hideBottomLeftGridScrollbar = props.hideBottomLeftGridScrollbar;\n      var showVerticalScrollbar = this.state.showVerticalScrollbar;\n\n\n      if (!fixedColumnCount) {\n        return null;\n      }\n\n      var additionalRowCount = showVerticalScrollbar ? 1 : 0,\n          height = this._getBottomGridHeight(props),\n          width = this._getLeftGridWidth(props),\n          scrollbarSize = this.state.showVerticalScrollbar ? this.state.scrollbarSize : 0,\n          gridWidth = hideBottomLeftGridScrollbar ? width + scrollbarSize : width;\n\n      var bottomLeftGrid = React.createElement(Grid, _extends({}, props, {\n        cellRenderer: this._cellRendererBottomLeftGrid,\n        className: this.props.classNameBottomLeftGrid,\n        columnCount: fixedColumnCount,\n        deferredMeasurementCache: this._deferredMeasurementCacheBottomLeftGrid,\n        height: height,\n        onScroll: enableFixedColumnScroll ? this._onScrollTop : undefined,\n        ref: this._bottomLeftGridRef,\n        rowCount: Math.max(0, rowCount - fixedRowCount) + additionalRowCount,\n        rowHeight: this._rowHeightBottomGrid,\n        style: this._bottomLeftGridStyle,\n        tabIndex: null,\n        width: gridWidth\n      }));\n\n      if (hideBottomLeftGridScrollbar) {\n        return React.createElement(\n          'div',\n          {\n            className: 'BottomLeftGrid_ScrollWrapper',\n            style: _extends({}, this._bottomLeftGridStyle, {\n              height: height,\n              width: width,\n              overflowY: 'hidden'\n            }) },\n          bottomLeftGrid\n        );\n      }\n      return bottomLeftGrid;\n    }\n  }, {\n    key: '_renderBottomRightGrid',\n    value: function _renderBottomRightGrid(props) {\n      var columnCount = props.columnCount,\n          fixedColumnCount = props.fixedColumnCount,\n          fixedRowCount = props.fixedRowCount,\n          rowCount = props.rowCount,\n          scrollToColumn = props.scrollToColumn,\n          scrollToRow = props.scrollToRow;\n\n\n      return React.createElement(Grid, _extends({}, props, {\n        cellRenderer: this._cellRendererBottomRightGrid,\n        className: this.props.classNameBottomRightGrid,\n        columnCount: Math.max(0, columnCount - fixedColumnCount),\n        columnWidth: this._columnWidthRightGrid,\n        deferredMeasurementCache: this._deferredMeasurementCacheBottomRightGrid,\n        height: this._getBottomGridHeight(props),\n        onScroll: this._onScroll,\n        onScrollbarPresenceChange: this._onScrollbarPresenceChange,\n        ref: this._bottomRightGridRef,\n        rowCount: Math.max(0, rowCount - fixedRowCount),\n        rowHeight: this._rowHeightBottomGrid,\n        scrollToColumn: scrollToColumn - fixedColumnCount,\n        scrollToRow: scrollToRow - fixedRowCount,\n        style: this._bottomRightGridStyle,\n        width: this._getRightGridWidth(props)\n      }));\n    }\n  }, {\n    key: '_renderTopLeftGrid',\n    value: function _renderTopLeftGrid(props) {\n      var fixedColumnCount = props.fixedColumnCount,\n          fixedRowCount = props.fixedRowCount;\n\n\n      if (!fixedColumnCount || !fixedRowCount) {\n        return null;\n      }\n\n      return React.createElement(Grid, _extends({}, props, {\n        className: this.props.classNameTopLeftGrid,\n        columnCount: fixedColumnCount,\n        height: this._getTopGridHeight(props),\n        ref: this._topLeftGridRef,\n        rowCount: fixedRowCount,\n        style: this._topLeftGridStyle,\n        tabIndex: null,\n        width: this._getLeftGridWidth(props)\n      }));\n    }\n  }, {\n    key: '_renderTopRightGrid',\n    value: function _renderTopRightGrid(props) {\n      var columnCount = props.columnCount,\n          enableFixedRowScroll = props.enableFixedRowScroll,\n          fixedColumnCount = props.fixedColumnCount,\n          fixedRowCount = props.fixedRowCount,\n          scrollLeft = props.scrollLeft,\n          hideTopRightGridScrollbar = props.hideTopRightGridScrollbar;\n      var _state2 = this.state,\n          showHorizontalScrollbar = _state2.showHorizontalScrollbar,\n          scrollbarSize = _state2.scrollbarSize;\n\n\n      if (!fixedRowCount) {\n        return null;\n      }\n\n      var additionalColumnCount = showHorizontalScrollbar ? 1 : 0,\n          height = this._getTopGridHeight(props),\n          width = this._getRightGridWidth(props),\n          additionalHeight = showHorizontalScrollbar ? scrollbarSize : 0;\n\n      var gridHeight = height,\n          style = this._topRightGridStyle;\n\n      if (hideTopRightGridScrollbar) {\n        gridHeight = height + additionalHeight;\n        style = _extends({}, this._topRightGridStyle, {\n          left: 0\n        });\n      }\n\n      var topRightGrid = React.createElement(Grid, _extends({}, props, {\n        cellRenderer: this._cellRendererTopRightGrid,\n        className: this.props.classNameTopRightGrid,\n        columnCount: Math.max(0, columnCount - fixedColumnCount) + additionalColumnCount,\n        columnWidth: this._columnWidthRightGrid,\n        deferredMeasurementCache: this._deferredMeasurementCacheTopRightGrid,\n        height: gridHeight,\n        onScroll: enableFixedRowScroll ? this._onScrollLeft : undefined,\n        ref: this._topRightGridRef,\n        rowCount: fixedRowCount,\n        scrollLeft: scrollLeft,\n        style: style,\n        tabIndex: null,\n        width: width\n      }));\n\n      if (hideTopRightGridScrollbar) {\n        return React.createElement(\n          'div',\n          {\n            className: 'TopRightGrid_ScrollWrapper',\n            style: _extends({}, this._topRightGridStyle, {\n              height: height,\n              width: width,\n              overflowX: 'hidden'\n            }) },\n          topRightGrid\n        );\n      }\n      return topRightGrid;\n    }\n  }], [{\n    key: 'getDerivedStateFromProps',\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      if (nextProps.scrollLeft !== prevState.scrollLeft || nextProps.scrollTop !== prevState.scrollTop) {\n        return {\n          scrollLeft: nextProps.scrollLeft != null && nextProps.scrollLeft >= 0 ? nextProps.scrollLeft : prevState.scrollLeft,\n          scrollTop: nextProps.scrollTop != null && nextProps.scrollTop >= 0 ? nextProps.scrollTop : prevState.scrollTop\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return MultiGrid;\n}(React.PureComponent);\n\nMultiGrid.defaultProps = {\n  classNameBottomLeftGrid: '',\n  classNameBottomRightGrid: '',\n  classNameTopLeftGrid: '',\n  classNameTopRightGrid: '',\n  enableFixedColumnScroll: false,\n  enableFixedRowScroll: false,\n  fixedColumnCount: 0,\n  fixedRowCount: 0,\n  scrollToColumn: -1,\n  scrollToRow: -1,\n  style: {},\n  styleBottomLeftGrid: {},\n  styleBottomRightGrid: {},\n  styleTopLeftGrid: {},\n  styleTopRightGrid: {},\n  hideTopRightGridScrollbar: false,\n  hideBottomLeftGridScrollbar: false\n};\n\nvar _initialiseProps = function _initialiseProps() {\n  var _this2 = this;\n\n  this.state = {\n    scrollLeft: 0,\n    scrollTop: 0,\n    scrollbarSize: 0,\n    showHorizontalScrollbar: false,\n    showVerticalScrollbar: false\n  };\n  this._deferredInvalidateColumnIndex = null;\n  this._deferredInvalidateRowIndex = null;\n\n  this._bottomLeftGridRef = function (ref) {\n    _this2._bottomLeftGrid = ref;\n  };\n\n  this._bottomRightGridRef = function (ref) {\n    _this2._bottomRightGrid = ref;\n  };\n\n  this._cellRendererBottomLeftGrid = function (_ref3) {\n    var rowIndex = _ref3.rowIndex,\n        rest = _objectWithoutProperties(_ref3, ['rowIndex']);\n\n    var _props5 = _this2.props,\n        cellRenderer = _props5.cellRenderer,\n        fixedRowCount = _props5.fixedRowCount,\n        rowCount = _props5.rowCount;\n\n\n    if (rowIndex === rowCount - fixedRowCount) {\n      return React.createElement('div', {\n        key: rest.key,\n        style: _extends({}, rest.style, {\n          height: SCROLLBAR_SIZE_BUFFER\n        })\n      });\n    } else {\n      return cellRenderer(_extends({}, rest, {\n        parent: _this2,\n        rowIndex: rowIndex + fixedRowCount\n      }));\n    }\n  };\n\n  this._cellRendererBottomRightGrid = function (_ref4) {\n    var columnIndex = _ref4.columnIndex,\n        rowIndex = _ref4.rowIndex,\n        rest = _objectWithoutProperties(_ref4, ['columnIndex', 'rowIndex']);\n\n    var _props6 = _this2.props,\n        cellRenderer = _props6.cellRenderer,\n        fixedColumnCount = _props6.fixedColumnCount,\n        fixedRowCount = _props6.fixedRowCount;\n\n\n    return cellRenderer(_extends({}, rest, {\n      columnIndex: columnIndex + fixedColumnCount,\n      parent: _this2,\n      rowIndex: rowIndex + fixedRowCount\n    }));\n  };\n\n  this._cellRendererTopRightGrid = function (_ref5) {\n    var columnIndex = _ref5.columnIndex,\n        rest = _objectWithoutProperties(_ref5, ['columnIndex']);\n\n    var _props7 = _this2.props,\n        cellRenderer = _props7.cellRenderer,\n        columnCount = _props7.columnCount,\n        fixedColumnCount = _props7.fixedColumnCount;\n\n\n    if (columnIndex === columnCount - fixedColumnCount) {\n      return React.createElement('div', {\n        key: rest.key,\n        style: _extends({}, rest.style, {\n          width: SCROLLBAR_SIZE_BUFFER\n        })\n      });\n    } else {\n      return cellRenderer(_extends({}, rest, {\n        columnIndex: columnIndex + fixedColumnCount,\n        parent: _this2\n      }));\n    }\n  };\n\n  this._columnWidthRightGrid = function (_ref6) {\n    var index = _ref6.index;\n    var _props8 = _this2.props,\n        columnCount = _props8.columnCount,\n        fixedColumnCount = _props8.fixedColumnCount,\n        columnWidth = _props8.columnWidth;\n    var _state3 = _this2.state,\n        scrollbarSize = _state3.scrollbarSize,\n        showHorizontalScrollbar = _state3.showHorizontalScrollbar;\n\n    // An extra cell is added to the count\n    // This gives the smaller Grid extra room for offset,\n    // In case the main (bottom right) Grid has a scrollbar\n    // If no scrollbar, the extra space is overflow:hidden anyway\n\n    if (showHorizontalScrollbar && index === columnCount - fixedColumnCount) {\n      return scrollbarSize;\n    }\n\n    return typeof columnWidth === 'function' ? columnWidth({ index: index + fixedColumnCount }) : columnWidth;\n  };\n\n  this._onScroll = function (scrollInfo) {\n    var scrollLeft = scrollInfo.scrollLeft,\n        scrollTop = scrollInfo.scrollTop;\n\n    _this2.setState({\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    });\n    var onScroll = _this2.props.onScroll;\n    if (onScroll) {\n      onScroll(scrollInfo);\n    }\n  };\n\n  this._onScrollbarPresenceChange = function (_ref7) {\n    var horizontal = _ref7.horizontal,\n        size = _ref7.size,\n        vertical = _ref7.vertical;\n    var _state4 = _this2.state,\n        showHorizontalScrollbar = _state4.showHorizontalScrollbar,\n        showVerticalScrollbar = _state4.showVerticalScrollbar;\n\n\n    if (horizontal !== showHorizontalScrollbar || vertical !== showVerticalScrollbar) {\n      _this2.setState({\n        scrollbarSize: size,\n        showHorizontalScrollbar: horizontal,\n        showVerticalScrollbar: vertical\n      });\n\n      var onScrollbarPresenceChange = _this2.props.onScrollbarPresenceChange;\n\n      if (typeof onScrollbarPresenceChange === 'function') {\n        onScrollbarPresenceChange({\n          horizontal: horizontal,\n          size: size,\n          vertical: vertical\n        });\n      }\n    }\n  };\n\n  this._onScrollLeft = function (scrollInfo) {\n    var scrollLeft = scrollInfo.scrollLeft;\n\n    _this2._onScroll({\n      scrollLeft: scrollLeft,\n      scrollTop: _this2.state.scrollTop\n    });\n  };\n\n  this._onScrollTop = function (scrollInfo) {\n    var scrollTop = scrollInfo.scrollTop;\n\n    _this2._onScroll({\n      scrollTop: scrollTop,\n      scrollLeft: _this2.state.scrollLeft\n    });\n  };\n\n  this._rowHeightBottomGrid = function (_ref8) {\n    var index = _ref8.index;\n    var _props9 = _this2.props,\n        fixedRowCount = _props9.fixedRowCount,\n        rowCount = _props9.rowCount,\n        rowHeight = _props9.rowHeight;\n    var _state5 = _this2.state,\n        scrollbarSize = _state5.scrollbarSize,\n        showVerticalScrollbar = _state5.showVerticalScrollbar;\n\n    // An extra cell is added to the count\n    // This gives the smaller Grid extra room for offset,\n    // In case the main (bottom right) Grid has a scrollbar\n    // If no scrollbar, the extra space is overflow:hidden anyway\n\n    if (showVerticalScrollbar && index === rowCount - fixedRowCount) {\n      return scrollbarSize;\n    }\n\n    return typeof rowHeight === 'function' ? rowHeight({ index: index + fixedRowCount }) : rowHeight;\n  };\n\n  this._topLeftGridRef = function (ref) {\n    _this2._topLeftGrid = ref;\n  };\n\n  this._topRightGridRef = function (ref) {\n    _this2._topRightGrid = ref;\n  };\n};\n\nMultiGrid.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  classNameBottomLeftGrid: PropTypes.string.isRequired,\n  classNameBottomRightGrid: PropTypes.string.isRequired,\n  classNameTopLeftGrid: PropTypes.string.isRequired,\n  classNameTopRightGrid: PropTypes.string.isRequired,\n  enableFixedColumnScroll: PropTypes.bool.isRequired,\n  enableFixedRowScroll: PropTypes.bool.isRequired,\n  fixedColumnCount: PropTypes.number.isRequired,\n  fixedRowCount: PropTypes.number.isRequired,\n  onScrollbarPresenceChange: PropTypes.func,\n  style: PropTypes.object.isRequired,\n  styleBottomLeftGrid: PropTypes.object.isRequired,\n  styleBottomRightGrid: PropTypes.object.isRequired,\n  styleTopLeftGrid: PropTypes.object.isRequired,\n  styleTopRightGrid: PropTypes.object.isRequired,\n  hideTopRightGridScrollbar: PropTypes.bool,\n  hideBottomLeftGridScrollbar: PropTypes.bool\n} : {};\n\n\npolyfill(MultiGrid);\n\nexport default MultiGrid;","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\n\n/**\n * HOC that simplifies the process of synchronizing scrolling between two or more virtualized components.\n */\n\nvar ScrollSync = function (_React$PureComponent) {\n  _inherits(ScrollSync, _React$PureComponent);\n\n  function ScrollSync(props, context) {\n    _classCallCheck(this, ScrollSync);\n\n    var _this = _possibleConstructorReturn(this, (ScrollSync.__proto__ || _Object$getPrototypeOf(ScrollSync)).call(this, props, context));\n\n    _this.state = {\n      clientHeight: 0,\n      clientWidth: 0,\n      scrollHeight: 0,\n      scrollLeft: 0,\n      scrollTop: 0,\n      scrollWidth: 0\n    };\n\n    _this._onScroll = _this._onScroll.bind(_this);\n    return _this;\n  }\n\n  _createClass(ScrollSync, [{\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n      var _state = this.state,\n          clientHeight = _state.clientHeight,\n          clientWidth = _state.clientWidth,\n          scrollHeight = _state.scrollHeight,\n          scrollLeft = _state.scrollLeft,\n          scrollTop = _state.scrollTop,\n          scrollWidth = _state.scrollWidth;\n\n\n      return children({\n        clientHeight: clientHeight,\n        clientWidth: clientWidth,\n        onScroll: this._onScroll,\n        scrollHeight: scrollHeight,\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        scrollWidth: scrollWidth\n      });\n    }\n  }, {\n    key: '_onScroll',\n    value: function _onScroll(_ref) {\n      var clientHeight = _ref.clientHeight,\n          clientWidth = _ref.clientWidth,\n          scrollHeight = _ref.scrollHeight,\n          scrollLeft = _ref.scrollLeft,\n          scrollTop = _ref.scrollTop,\n          scrollWidth = _ref.scrollWidth;\n\n      this.setState({\n        clientHeight: clientHeight,\n        clientWidth: clientWidth,\n        scrollHeight: scrollHeight,\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        scrollWidth: scrollWidth\n      });\n    }\n  }]);\n\n  return ScrollSync;\n}(React.PureComponent);\n\nexport default ScrollSync;\nScrollSync.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * Function responsible for rendering 2 or more virtualized components.\n   * This function should implement the following signature:\n   * ({ onScroll, scrollLeft, scrollTop }) => PropTypes.element\n   */\n  children: PropTypes.func.isRequired\n} : {};","import * as React from 'react';\n\n\nexport default function defaultHeaderRowRenderer(_ref) {\n  var className = _ref.className,\n      columns = _ref.columns,\n      style = _ref.style;\n\n  return React.createElement(\n    'div',\n    { className: className, role: 'row', style: style },\n    columns\n  );\n}\ndefaultHeaderRowRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_HeaderRowRendererParams === PropTypes.any ? {} : bpfrpt_proptype_HeaderRowRendererParams;\nimport { bpfrpt_proptype_HeaderRowRendererParams } from './types';\nimport PropTypes from 'prop-types';","var SortDirection = {\n  /**\n   * Sort items in ascending order.\n   * This means arranging from the lowest value to the highest (e.g. a-z, 0-9).\n   */\n  ASC: 'ASC',\n\n  /**\n   * Sort items in descending order.\n   * This means arranging from the highest value to the lowest (e.g. z-a, 9-0).\n   */\n  DESC: 'DESC'\n};\n\nexport default SortDirection;","import clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport SortDirection from './SortDirection';\n\n/**\n * Displayed beside a header to indicate that a Table is currently sorted by this column.\n */\nexport default function SortIndicator(_ref) {\n  var sortDirection = _ref.sortDirection;\n\n  var classNames = clsx('ReactVirtualized__Table__sortableHeaderIcon', {\n    'ReactVirtualized__Table__sortableHeaderIcon--ASC': sortDirection === SortDirection.ASC,\n    'ReactVirtualized__Table__sortableHeaderIcon--DESC': sortDirection === SortDirection.DESC\n  });\n\n  return React.createElement(\n    'svg',\n    { className: classNames, width: 18, height: 18, viewBox: '0 0 24 24' },\n    sortDirection === SortDirection.ASC ? React.createElement('path', { d: 'M7 14l5-5 5 5z' }) : React.createElement('path', { d: 'M7 10l5 5 5-5z' }),\n    React.createElement('path', { d: 'M0 0h24v24H0z', fill: 'none' })\n  );\n}\n\nSortIndicator.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  sortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC])\n} : {};","import * as React from 'react';\nimport SortIndicator from './SortIndicator';\n\n\n/**\n * Default table header renderer.\n */\nexport default function defaultHeaderRenderer(_ref) {\n  var dataKey = _ref.dataKey,\n      label = _ref.label,\n      sortBy = _ref.sortBy,\n      sortDirection = _ref.sortDirection;\n\n  var showSortIndicator = sortBy === dataKey;\n  var children = [React.createElement(\n    'span',\n    {\n      className: 'ReactVirtualized__Table__headerTruncatedText',\n      key: 'label',\n      title: typeof label === 'string' ? label : null },\n    label\n  )];\n\n  if (showSortIndicator) {\n    children.push(React.createElement(SortIndicator, { key: 'SortIndicator', sortDirection: sortDirection }));\n  }\n\n  return children;\n}\ndefaultHeaderRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_HeaderRendererParams === PropTypes.any ? {} : bpfrpt_proptype_HeaderRendererParams;\nimport { bpfrpt_proptype_HeaderRendererParams } from './types';\nimport PropTypes from 'prop-types';","import _extends from 'babel-runtime/helpers/extends';\nimport * as React from 'react';\n\n\n/**\n * Default row renderer for Table.\n */\nexport default function defaultRowRenderer(_ref) {\n  var className = _ref.className,\n      columns = _ref.columns,\n      index = _ref.index,\n      key = _ref.key,\n      onRowClick = _ref.onRowClick,\n      onRowDoubleClick = _ref.onRowDoubleClick,\n      onRowMouseOut = _ref.onRowMouseOut,\n      onRowMouseOver = _ref.onRowMouseOver,\n      onRowRightClick = _ref.onRowRightClick,\n      rowData = _ref.rowData,\n      style = _ref.style;\n\n  var a11yProps = { 'aria-rowindex': index + 1 };\n\n  if (onRowClick || onRowDoubleClick || onRowMouseOut || onRowMouseOver || onRowRightClick) {\n    a11yProps['aria-label'] = 'row';\n    a11yProps.tabIndex = 0;\n\n    if (onRowClick) {\n      a11yProps.onClick = function (event) {\n        return onRowClick({ event: event, index: index, rowData: rowData });\n      };\n    }\n    if (onRowDoubleClick) {\n      a11yProps.onDoubleClick = function (event) {\n        return onRowDoubleClick({ event: event, index: index, rowData: rowData });\n      };\n    }\n    if (onRowMouseOut) {\n      a11yProps.onMouseOut = function (event) {\n        return onRowMouseOut({ event: event, index: index, rowData: rowData });\n      };\n    }\n    if (onRowMouseOver) {\n      a11yProps.onMouseOver = function (event) {\n        return onRowMouseOver({ event: event, index: index, rowData: rowData });\n      };\n    }\n    if (onRowRightClick) {\n      a11yProps.onContextMenu = function (event) {\n        return onRowRightClick({ event: event, index: index, rowData: rowData });\n      };\n    }\n  }\n\n  return React.createElement(\n    'div',\n    _extends({}, a11yProps, {\n      className: className,\n      key: key,\n      role: 'row',\n      style: style }),\n    columns\n  );\n}\ndefaultRowRenderer.propTypes = process.env.NODE_ENV === 'production' ? null : bpfrpt_proptype_RowRendererParams === PropTypes.any ? {} : bpfrpt_proptype_RowRendererParams;\nimport { bpfrpt_proptype_RowRendererParams } from './types';\nimport PropTypes from 'prop-types';","import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport defaultHeaderRenderer from './defaultHeaderRenderer';\nimport defaultCellRenderer from './defaultCellRenderer';\nimport defaultCellDataGetter from './defaultCellDataGetter';\nimport SortDirection from './SortDirection';\n\n/**\n * Describes the header and cell contents of a table column.\n */\n\nvar Column = function (_React$Component) {\n  _inherits(Column, _React$Component);\n\n  function Column() {\n    _classCallCheck(this, Column);\n\n    return _possibleConstructorReturn(this, (Column.__proto__ || _Object$getPrototypeOf(Column)).apply(this, arguments));\n  }\n\n  return Column;\n}(React.Component);\n\nColumn.defaultProps = {\n  cellDataGetter: defaultCellDataGetter,\n  cellRenderer: defaultCellRenderer,\n  defaultSortDirection: SortDirection.ASC,\n  flexGrow: 0,\n  flexShrink: 1,\n  headerRenderer: defaultHeaderRenderer,\n  style: {}\n};\nexport default Column;\nColumn.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /** Optional aria-label value to set on the column header */\n  'aria-label': PropTypes.string,\n\n  /**\n   * Callback responsible for returning a cell's data, given its :dataKey\n   * ({ columnData: any, dataKey: string, rowData: any }): any\n   */\n  cellDataGetter: PropTypes.func,\n\n  /**\n   * Callback responsible for rendering a cell's contents.\n   * ({ cellData: any, columnData: any, dataKey: string, rowData: any, rowIndex: number }): node\n   */\n  cellRenderer: PropTypes.func,\n\n  /** Optional CSS class to apply to cell */\n  className: PropTypes.string,\n\n  /** Optional additional data passed to this column's :cellDataGetter */\n  columnData: PropTypes.object,\n\n  /** Uniquely identifies the row-data attribute corresponding to this cell */\n  dataKey: PropTypes.any.isRequired,\n\n  /** Optional direction to be used when clicked the first time */\n  defaultSortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC]),\n\n  /** If sort is enabled for the table at large, disable it for this column */\n  disableSort: PropTypes.bool,\n\n  /** Flex grow style; defaults to 0 */\n  flexGrow: PropTypes.number,\n\n  /** Flex shrink style; defaults to 1 */\n  flexShrink: PropTypes.number,\n\n  /** Optional CSS class to apply to this column's header */\n  headerClassName: PropTypes.string,\n\n  /**\n   * Optional callback responsible for rendering a column header contents.\n   * ({ columnData: object, dataKey: string, disableSort: boolean, label: node, sortBy: string, sortDirection: string }): PropTypes.node\n   */\n  headerRenderer: PropTypes.func.isRequired,\n\n  /** Optional inline style to apply to this column's header */\n  headerStyle: PropTypes.object,\n\n  /** Optional id to set on the column header */\n  id: PropTypes.string,\n\n  /** Header label for this column */\n  label: PropTypes.node,\n\n  /** Maximum width of column; this property will only be used if :flexGrow is > 0. */\n  maxWidth: PropTypes.number,\n\n  /** Minimum width of column. */\n  minWidth: PropTypes.number,\n\n  /** Optional inline style to apply to cell */\n  style: PropTypes.object,\n\n  /** Flex basis (width) for this column; This value can grow or shrink based on :flexGrow and :flexShrink properties. */\n  width: PropTypes.number.isRequired\n} : {};","\n\n/**\n * Default accessor for returning a cell value for a given attribute.\n * This function expects to operate on either a vanilla Object or an Immutable Map.\n * You should override the column's cellDataGetter if your data is some other type of object.\n */\nexport default function defaultCellDataGetter(_ref) {\n  var dataKey = _ref.dataKey,\n      rowData = _ref.rowData;\n\n  if (typeof rowData.get === 'function') {\n    return rowData.get(dataKey);\n  } else {\n    return rowData[dataKey];\n  }\n}\nimport { bpfrpt_proptype_CellDataGetterParams } from './types';","\n\n/**\n * Default cell renderer that displays an attribute as a simple string\n * You should override the column's cellRenderer if your data is some other type of object.\n */\nexport default function defaultCellRenderer(_ref) {\n  var cellData = _ref.cellData;\n\n  if (cellData == null) {\n    return '';\n  } else {\n    return String(cellData);\n  }\n}\nimport { bpfrpt_proptype_CellRendererParams } from './types';","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\n\n\nimport clsx from 'clsx';\n\nimport Column from './Column';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport Grid, { accessibilityOverscanIndicesGetter } from '../Grid';\n\nimport defaultRowRenderer from './defaultRowRenderer';\nimport defaultHeaderRowRenderer from './defaultHeaderRowRenderer';\nimport SortDirection from './SortDirection';\n\n/**\n * Table component with fixed headers and virtualized rows for improved performance with large data sets.\n * This component expects explicit width, height, and padding parameters.\n */\n\nvar Table = function (_React$PureComponent) {\n  _inherits(Table, _React$PureComponent);\n\n  function Table(props) {\n    _classCallCheck(this, Table);\n\n    var _this = _possibleConstructorReturn(this, (Table.__proto__ || _Object$getPrototypeOf(Table)).call(this, props));\n\n    _this.state = {\n      scrollbarWidth: 0\n    };\n\n    _this._createColumn = _this._createColumn.bind(_this);\n    _this._createRow = _this._createRow.bind(_this);\n    _this._onScroll = _this._onScroll.bind(_this);\n    _this._onSectionRendered = _this._onSectionRendered.bind(_this);\n    _this._setRef = _this._setRef.bind(_this);\n    return _this;\n  }\n\n  _createClass(Table, [{\n    key: 'forceUpdateGrid',\n    value: function forceUpdateGrid() {\n      if (this.Grid) {\n        this.Grid.forceUpdate();\n      }\n    }\n\n    /** See Grid#getOffsetForCell */\n\n  }, {\n    key: 'getOffsetForRow',\n    value: function getOffsetForRow(_ref) {\n      var alignment = _ref.alignment,\n          index = _ref.index;\n\n      if (this.Grid) {\n        var _Grid$getOffsetForCel = this.Grid.getOffsetForCell({\n          alignment: alignment,\n          rowIndex: index\n        }),\n            scrollTop = _Grid$getOffsetForCel.scrollTop;\n\n        return scrollTop;\n      }\n      return 0;\n    }\n\n    /** CellMeasurer compatibility */\n\n  }, {\n    key: 'invalidateCellSizeAfterRender',\n    value: function invalidateCellSizeAfterRender(_ref2) {\n      var columnIndex = _ref2.columnIndex,\n          rowIndex = _ref2.rowIndex;\n\n      if (this.Grid) {\n        this.Grid.invalidateCellSizeAfterRender({\n          rowIndex: rowIndex,\n          columnIndex: columnIndex\n        });\n      }\n    }\n\n    /** See Grid#measureAllCells */\n\n  }, {\n    key: 'measureAllRows',\n    value: function measureAllRows() {\n      if (this.Grid) {\n        this.Grid.measureAllCells();\n      }\n    }\n\n    /** CellMeasurer compatibility */\n\n  }, {\n    key: 'recomputeGridSize',\n    value: function recomputeGridSize() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref3$columnIndex = _ref3.columnIndex,\n          columnIndex = _ref3$columnIndex === undefined ? 0 : _ref3$columnIndex,\n          _ref3$rowIndex = _ref3.rowIndex,\n          rowIndex = _ref3$rowIndex === undefined ? 0 : _ref3$rowIndex;\n\n      if (this.Grid) {\n        this.Grid.recomputeGridSize({\n          rowIndex: rowIndex,\n          columnIndex: columnIndex\n        });\n      }\n    }\n\n    /** See Grid#recomputeGridSize */\n\n  }, {\n    key: 'recomputeRowHeights',\n    value: function recomputeRowHeights() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.recomputeGridSize({\n          rowIndex: index\n        });\n      }\n    }\n\n    /** See Grid#scrollToPosition */\n\n  }, {\n    key: 'scrollToPosition',\n    value: function scrollToPosition() {\n      var scrollTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.scrollToPosition({ scrollTop: scrollTop });\n      }\n    }\n\n    /** See Grid#scrollToCell */\n\n  }, {\n    key: 'scrollToRow',\n    value: function scrollToRow() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      if (this.Grid) {\n        this.Grid.scrollToCell({\n          columnIndex: 0,\n          rowIndex: index\n        });\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._setScrollbarWidth();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this._setScrollbarWidth();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props = this.props,\n          children = _props.children,\n          className = _props.className,\n          disableHeader = _props.disableHeader,\n          gridClassName = _props.gridClassName,\n          gridStyle = _props.gridStyle,\n          headerHeight = _props.headerHeight,\n          headerRowRenderer = _props.headerRowRenderer,\n          height = _props.height,\n          id = _props.id,\n          noRowsRenderer = _props.noRowsRenderer,\n          rowClassName = _props.rowClassName,\n          rowStyle = _props.rowStyle,\n          scrollToIndex = _props.scrollToIndex,\n          style = _props.style,\n          width = _props.width;\n      var scrollbarWidth = this.state.scrollbarWidth;\n\n\n      var availableRowsHeight = disableHeader ? height : height - headerHeight;\n\n      var rowClass = typeof rowClassName === 'function' ? rowClassName({ index: -1 }) : rowClassName;\n      var rowStyleObject = typeof rowStyle === 'function' ? rowStyle({ index: -1 }) : rowStyle;\n\n      // Precompute and cache column styles before rendering rows and columns to speed things up\n      this._cachedColumnStyles = [];\n      React.Children.toArray(children).forEach(function (column, index) {\n        var flexStyles = _this2._getFlexStyleForColumn(column, column.props.style);\n\n        _this2._cachedColumnStyles[index] = _extends({}, flexStyles, {\n          overflow: 'hidden'\n        });\n      });\n\n      // Note that we specify :rowCount, :scrollbarWidth, :sortBy, and :sortDirection as properties on Grid even though these have nothing to do with Grid.\n      // This is done because Grid is a pure component and won't update unless its properties or state has changed.\n      // Any property that should trigger a re-render of Grid then is specified here to avoid a stale display.\n      return React.createElement(\n        'div',\n        {\n          'aria-label': this.props['aria-label'],\n          'aria-labelledby': this.props['aria-labelledby'],\n          'aria-colcount': React.Children.toArray(children).length,\n          'aria-rowcount': this.props.rowCount,\n          className: clsx('ReactVirtualized__Table', className),\n          id: id,\n          role: 'grid',\n          style: style },\n        !disableHeader && headerRowRenderer({\n          className: clsx('ReactVirtualized__Table__headerRow', rowClass),\n          columns: this._getHeaderColumns(),\n          style: _extends({\n            height: headerHeight,\n            overflow: 'hidden',\n            paddingRight: scrollbarWidth,\n            width: width\n          }, rowStyleObject)\n        }),\n        React.createElement(Grid, _extends({}, this.props, {\n          autoContainerWidth: true,\n          className: clsx('ReactVirtualized__Table__Grid', gridClassName),\n          cellRenderer: this._createRow,\n          columnWidth: width,\n          columnCount: 1,\n          height: availableRowsHeight,\n          id: undefined,\n          noContentRenderer: noRowsRenderer,\n          onScroll: this._onScroll,\n          onSectionRendered: this._onSectionRendered,\n          ref: this._setRef,\n          role: 'rowgroup',\n          scrollbarWidth: scrollbarWidth,\n          scrollToRow: scrollToIndex,\n          style: _extends({}, gridStyle, {\n            overflowX: 'hidden'\n          })\n        }))\n      );\n    }\n  }, {\n    key: '_createColumn',\n    value: function _createColumn(_ref4) {\n      var column = _ref4.column,\n          columnIndex = _ref4.columnIndex,\n          isScrolling = _ref4.isScrolling,\n          parent = _ref4.parent,\n          rowData = _ref4.rowData,\n          rowIndex = _ref4.rowIndex;\n      var onColumnClick = this.props.onColumnClick;\n      var _column$props = column.props,\n          cellDataGetter = _column$props.cellDataGetter,\n          cellRenderer = _column$props.cellRenderer,\n          className = _column$props.className,\n          columnData = _column$props.columnData,\n          dataKey = _column$props.dataKey,\n          id = _column$props.id;\n\n\n      var cellData = cellDataGetter({ columnData: columnData, dataKey: dataKey, rowData: rowData });\n      var renderedCell = cellRenderer({\n        cellData: cellData,\n        columnData: columnData,\n        columnIndex: columnIndex,\n        dataKey: dataKey,\n        isScrolling: isScrolling,\n        parent: parent,\n        rowData: rowData,\n        rowIndex: rowIndex\n      });\n\n      var onClick = function onClick(event) {\n        onColumnClick && onColumnClick({ columnData: columnData, dataKey: dataKey, event: event });\n      };\n\n      var style = this._cachedColumnStyles[columnIndex];\n\n      var title = typeof renderedCell === 'string' ? renderedCell : null;\n\n      // Avoid using object-spread syntax with multiple objects here,\n      // Since it results in an extra method call to 'babel-runtime/helpers/extends'\n      // See PR https://github.com/bvaughn/react-virtualized/pull/942\n      return React.createElement(\n        'div',\n        {\n          'aria-colindex': columnIndex + 1,\n          'aria-describedby': id,\n          className: clsx('ReactVirtualized__Table__rowColumn', className),\n          key: 'Row' + rowIndex + '-' + 'Col' + columnIndex,\n          onClick: onClick,\n          role: 'gridcell',\n          style: style,\n          title: title },\n        renderedCell\n      );\n    }\n  }, {\n    key: '_createHeader',\n    value: function _createHeader(_ref5) {\n      var column = _ref5.column,\n          index = _ref5.index;\n      var _props2 = this.props,\n          headerClassName = _props2.headerClassName,\n          headerStyle = _props2.headerStyle,\n          onHeaderClick = _props2.onHeaderClick,\n          sort = _props2.sort,\n          sortBy = _props2.sortBy,\n          sortDirection = _props2.sortDirection;\n      var _column$props2 = column.props,\n          columnData = _column$props2.columnData,\n          dataKey = _column$props2.dataKey,\n          defaultSortDirection = _column$props2.defaultSortDirection,\n          disableSort = _column$props2.disableSort,\n          headerRenderer = _column$props2.headerRenderer,\n          id = _column$props2.id,\n          label = _column$props2.label;\n\n      var sortEnabled = !disableSort && sort;\n\n      var classNames = clsx('ReactVirtualized__Table__headerColumn', headerClassName, column.props.headerClassName, {\n        ReactVirtualized__Table__sortableHeaderColumn: sortEnabled\n      });\n      var style = this._getFlexStyleForColumn(column, _extends({}, headerStyle, column.props.headerStyle));\n\n      var renderedHeader = headerRenderer({\n        columnData: columnData,\n        dataKey: dataKey,\n        disableSort: disableSort,\n        label: label,\n        sortBy: sortBy,\n        sortDirection: sortDirection\n      });\n\n      var headerOnClick = void 0,\n          headerOnKeyDown = void 0,\n          headerTabIndex = void 0,\n          headerAriaSort = void 0,\n          headerAriaLabel = void 0;\n\n      if (sortEnabled || onHeaderClick) {\n        // If this is a sortable header, clicking it should update the table data's sorting.\n        var isFirstTimeSort = sortBy !== dataKey;\n\n        // If this is the firstTime sort of this column, use the column default sort order.\n        // Otherwise, invert the direction of the sort.\n        var newSortDirection = isFirstTimeSort ? defaultSortDirection : sortDirection === SortDirection.DESC ? SortDirection.ASC : SortDirection.DESC;\n\n        var onClick = function onClick(event) {\n          sortEnabled && sort({\n            defaultSortDirection: defaultSortDirection,\n            event: event,\n            sortBy: dataKey,\n            sortDirection: newSortDirection\n          });\n          onHeaderClick && onHeaderClick({ columnData: columnData, dataKey: dataKey, event: event });\n        };\n\n        var onKeyDown = function onKeyDown(event) {\n          if (event.key === 'Enter' || event.key === ' ') {\n            onClick(event);\n          }\n        };\n\n        headerAriaLabel = column.props['aria-label'] || label || dataKey;\n        headerAriaSort = 'none';\n        headerTabIndex = 0;\n        headerOnClick = onClick;\n        headerOnKeyDown = onKeyDown;\n      }\n\n      if (sortBy === dataKey) {\n        headerAriaSort = sortDirection === SortDirection.ASC ? 'ascending' : 'descending';\n      }\n\n      // Avoid using object-spread syntax with multiple objects here,\n      // Since it results in an extra method call to 'babel-runtime/helpers/extends'\n      // See PR https://github.com/bvaughn/react-virtualized/pull/942\n      return React.createElement(\n        'div',\n        {\n          'aria-label': headerAriaLabel,\n          'aria-sort': headerAriaSort,\n          className: classNames,\n          id: id,\n          key: 'Header-Col' + index,\n          onClick: headerOnClick,\n          onKeyDown: headerOnKeyDown,\n          role: 'columnheader',\n          style: style,\n          tabIndex: headerTabIndex },\n        renderedHeader\n      );\n    }\n  }, {\n    key: '_createRow',\n    value: function _createRow(_ref6) {\n      var _this3 = this;\n\n      var index = _ref6.rowIndex,\n          isScrolling = _ref6.isScrolling,\n          key = _ref6.key,\n          parent = _ref6.parent,\n          style = _ref6.style;\n      var _props3 = this.props,\n          children = _props3.children,\n          onRowClick = _props3.onRowClick,\n          onRowDoubleClick = _props3.onRowDoubleClick,\n          onRowRightClick = _props3.onRowRightClick,\n          onRowMouseOver = _props3.onRowMouseOver,\n          onRowMouseOut = _props3.onRowMouseOut,\n          rowClassName = _props3.rowClassName,\n          rowGetter = _props3.rowGetter,\n          rowRenderer = _props3.rowRenderer,\n          rowStyle = _props3.rowStyle;\n      var scrollbarWidth = this.state.scrollbarWidth;\n\n\n      var rowClass = typeof rowClassName === 'function' ? rowClassName({ index: index }) : rowClassName;\n      var rowStyleObject = typeof rowStyle === 'function' ? rowStyle({ index: index }) : rowStyle;\n      var rowData = rowGetter({ index: index });\n\n      var columns = React.Children.toArray(children).map(function (column, columnIndex) {\n        return _this3._createColumn({\n          column: column,\n          columnIndex: columnIndex,\n          isScrolling: isScrolling,\n          parent: parent,\n          rowData: rowData,\n          rowIndex: index,\n          scrollbarWidth: scrollbarWidth\n        });\n      });\n\n      var className = clsx('ReactVirtualized__Table__row', rowClass);\n      var flattenedStyle = _extends({}, style, {\n        height: this._getRowHeight(index),\n        overflow: 'hidden',\n        paddingRight: scrollbarWidth\n      }, rowStyleObject);\n\n      return rowRenderer({\n        className: className,\n        columns: columns,\n        index: index,\n        isScrolling: isScrolling,\n        key: key,\n        onRowClick: onRowClick,\n        onRowDoubleClick: onRowDoubleClick,\n        onRowRightClick: onRowRightClick,\n        onRowMouseOver: onRowMouseOver,\n        onRowMouseOut: onRowMouseOut,\n        rowData: rowData,\n        style: flattenedStyle\n      });\n    }\n\n    /**\n     * Determines the flex-shrink, flex-grow, and width values for a cell (header or column).\n     */\n\n  }, {\n    key: '_getFlexStyleForColumn',\n    value: function _getFlexStyleForColumn(column) {\n      var customStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var flexValue = column.props.flexGrow + ' ' + column.props.flexShrink + ' ' + column.props.width + 'px';\n\n      var style = _extends({}, customStyle, {\n        flex: flexValue,\n        msFlex: flexValue,\n        WebkitFlex: flexValue\n      });\n\n      if (column.props.maxWidth) {\n        style.maxWidth = column.props.maxWidth;\n      }\n\n      if (column.props.minWidth) {\n        style.minWidth = column.props.minWidth;\n      }\n\n      return style;\n    }\n  }, {\n    key: '_getHeaderColumns',\n    value: function _getHeaderColumns() {\n      var _this4 = this;\n\n      var _props4 = this.props,\n          children = _props4.children,\n          disableHeader = _props4.disableHeader;\n\n      var items = disableHeader ? [] : React.Children.toArray(children);\n\n      return items.map(function (column, index) {\n        return _this4._createHeader({ column: column, index: index });\n      });\n    }\n  }, {\n    key: '_getRowHeight',\n    value: function _getRowHeight(rowIndex) {\n      var rowHeight = this.props.rowHeight;\n\n\n      return typeof rowHeight === 'function' ? rowHeight({ index: rowIndex }) : rowHeight;\n    }\n  }, {\n    key: '_onScroll',\n    value: function _onScroll(_ref7) {\n      var clientHeight = _ref7.clientHeight,\n          scrollHeight = _ref7.scrollHeight,\n          scrollTop = _ref7.scrollTop;\n      var onScroll = this.props.onScroll;\n\n\n      onScroll({ clientHeight: clientHeight, scrollHeight: scrollHeight, scrollTop: scrollTop });\n    }\n  }, {\n    key: '_onSectionRendered',\n    value: function _onSectionRendered(_ref8) {\n      var rowOverscanStartIndex = _ref8.rowOverscanStartIndex,\n          rowOverscanStopIndex = _ref8.rowOverscanStopIndex,\n          rowStartIndex = _ref8.rowStartIndex,\n          rowStopIndex = _ref8.rowStopIndex;\n      var onRowsRendered = this.props.onRowsRendered;\n\n\n      onRowsRendered({\n        overscanStartIndex: rowOverscanStartIndex,\n        overscanStopIndex: rowOverscanStopIndex,\n        startIndex: rowStartIndex,\n        stopIndex: rowStopIndex\n      });\n    }\n  }, {\n    key: '_setRef',\n    value: function _setRef(ref) {\n      this.Grid = ref;\n    }\n  }, {\n    key: '_setScrollbarWidth',\n    value: function _setScrollbarWidth() {\n      if (this.Grid) {\n        var _Grid = findDOMNode(this.Grid);\n        var clientWidth = _Grid.clientWidth || 0;\n        var offsetWidth = _Grid.offsetWidth || 0;\n        var scrollbarWidth = offsetWidth - clientWidth;\n\n        this.setState({ scrollbarWidth: scrollbarWidth });\n      }\n    }\n  }]);\n\n  return Table;\n}(React.PureComponent);\n\nTable.defaultProps = {\n  disableHeader: false,\n  estimatedRowSize: 30,\n  headerHeight: 0,\n  headerStyle: {},\n  noRowsRenderer: function noRowsRenderer() {\n    return null;\n  },\n  onRowsRendered: function onRowsRendered() {\n    return null;\n  },\n  onScroll: function onScroll() {\n    return null;\n  },\n  overscanIndicesGetter: accessibilityOverscanIndicesGetter,\n  overscanRowCount: 10,\n  rowRenderer: defaultRowRenderer,\n  headerRowRenderer: defaultHeaderRowRenderer,\n  rowStyle: {},\n  scrollToAlignment: 'auto',\n  scrollToIndex: -1,\n  style: {}\n};\nexport default Table;\nTable.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /** This is just set on the grid top element. */\n  'aria-label': PropTypes.string,\n\n  /** This is just set on the grid top element. */\n  'aria-labelledby': PropTypes.string,\n\n  /**\n   * Removes fixed height from the scrollingContainer so that the total height\n   * of rows can stretch the window. Intended for use with WindowScroller\n   */\n  autoHeight: PropTypes.bool,\n\n  /** One or more Columns describing the data displayed in this row */\n  children: function children(props) {\n    var children = React.Children.toArray(props.children);\n    for (var i = 0; i < children.length; i++) {\n      var childType = children[i].type;\n      if (childType !== Column && !(childType.prototype instanceof Column)) {\n        return new Error('Table only accepts children of type Column');\n      }\n    }\n  },\n\n  /** Optional CSS class name */\n  className: PropTypes.string,\n\n  /** Disable rendering the header at all */\n  disableHeader: PropTypes.bool,\n\n  /**\n   * Used to estimate the total height of a Table before all of its rows have actually been measured.\n   * The estimated total height is adjusted as rows are rendered.\n   */\n  estimatedRowSize: PropTypes.number.isRequired,\n\n  /** Optional custom CSS class name to attach to inner Grid element. */\n  gridClassName: PropTypes.string,\n\n  /** Optional inline style to attach to inner Grid element. */\n  gridStyle: PropTypes.object,\n\n  /** Optional CSS class to apply to all column headers */\n  headerClassName: PropTypes.string,\n\n  /** Fixed height of header row */\n  headerHeight: PropTypes.number.isRequired,\n\n  /**\n   * Responsible for rendering a table row given an array of columns:\n   * Should implement the following interface: ({\n   *   className: string,\n   *   columns: any[],\n   *   style: any\n   * }): PropTypes.node\n   */\n  headerRowRenderer: PropTypes.func,\n\n  /** Optional custom inline style to attach to table header columns. */\n  headerStyle: PropTypes.object,\n\n  /** Fixed/available height for out DOM element */\n  height: PropTypes.number.isRequired,\n\n  /** Optional id */\n  id: PropTypes.string,\n\n  /** Optional renderer to be used in place of table body rows when rowCount is 0 */\n  noRowsRenderer: PropTypes.func,\n\n  /**\n   * Optional callback when a column is clicked.\n   * ({ columnData: any, dataKey: string }): void\n   */\n  onColumnClick: PropTypes.func,\n\n  /**\n   * Optional callback when a column's header is clicked.\n   * ({ columnData: any, dataKey: string }): void\n   */\n  onHeaderClick: PropTypes.func,\n\n  /**\n   * Callback invoked when a user clicks on a table row.\n   * ({ index: number }): void\n   */\n  onRowClick: PropTypes.func,\n\n  /**\n   * Callback invoked when a user double-clicks on a table row.\n   * ({ index: number }): void\n   */\n  onRowDoubleClick: PropTypes.func,\n\n  /**\n   * Callback invoked when the mouse leaves a table row.\n   * ({ index: number }): void\n   */\n  onRowMouseOut: PropTypes.func,\n\n  /**\n   * Callback invoked when a user moves the mouse over a table row.\n   * ({ index: number }): void\n   */\n  onRowMouseOver: PropTypes.func,\n\n  /**\n   * Callback invoked when a user right-clicks on a table row.\n   * ({ index: number }): void\n   */\n  onRowRightClick: PropTypes.func,\n\n  /**\n   * Callback invoked with information about the slice of rows that were just rendered.\n   * ({ startIndex, stopIndex }): void\n   */\n  onRowsRendered: PropTypes.func,\n\n  /**\n   * Callback invoked whenever the scroll offset changes within the inner scrollable region.\n   * This callback can be used to sync scrolling between lists, tables, or grids.\n   * ({ clientHeight, scrollHeight, scrollTop }): void\n   */\n  onScroll: PropTypes.func.isRequired,\n\n  /** See Grid#overscanIndicesGetter */\n  overscanIndicesGetter: PropTypes.func.isRequired,\n\n  /**\n   * Number of rows to render above/below the visible bounds of the list.\n   * These rows can help for smoother scrolling on touch devices.\n   */\n  overscanRowCount: PropTypes.number.isRequired,\n\n  /**\n   * Optional CSS class to apply to all table rows (including the header row).\n   * This property can be a CSS class name (string) or a function that returns a class name.\n   * If a function is provided its signature should be: ({ index: number }): string\n   */\n  rowClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n\n  /**\n   * Callback responsible for returning a data row given an index.\n   * ({ index: number }): any\n   */\n  rowGetter: PropTypes.func.isRequired,\n\n  /**\n   * Either a fixed row height (number) or a function that returns the height of a row given its index.\n   * ({ index: number }): number\n   */\n  rowHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.func]).isRequired,\n\n  /** Number of rows in table. */\n  rowCount: PropTypes.number.isRequired,\n\n  /**\n   * Responsible for rendering a table row given an array of columns:\n   * Should implement the following interface: ({\n   *   className: string,\n   *   columns: Array,\n   *   index: number,\n   *   isScrolling: boolean,\n   *   onRowClick: ?Function,\n   *   onRowDoubleClick: ?Function,\n   *   onRowMouseOver: ?Function,\n   *   onRowMouseOut: ?Function,\n   *   rowData: any,\n   *   style: any\n   * }): PropTypes.node\n   */\n  rowRenderer: PropTypes.func,\n\n  /** Optional custom inline style to attach to table rows. */\n  rowStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired,\n\n  /** See Grid#scrollToAlignment */\n  scrollToAlignment: PropTypes.oneOf(['auto', 'end', 'start', 'center']).isRequired,\n\n  /** Row index to ensure visible (by forcefully scrolling if necessary) */\n  scrollToIndex: PropTypes.number.isRequired,\n\n  /** Vertical offset. */\n  scrollTop: PropTypes.number,\n\n  /**\n   * Sort function to be called if a sortable header is clicked.\n   * Should implement the following interface: ({\n   *   defaultSortDirection: 'ASC' | 'DESC',\n   *   event: MouseEvent,\n   *   sortBy: string,\n   *   sortDirection: SortDirection\n   * }): void\n   */\n  sort: PropTypes.func,\n\n  /** Table data is currently sorted by this :dataKey (if it is sorted at all) */\n  sortBy: PropTypes.string,\n\n  /** Table data is currently sorted in this direction (if it is sorted at all) */\n  sortDirection: PropTypes.oneOf([SortDirection.ASC, SortDirection.DESC]),\n\n  /** Optional inline style */\n  style: PropTypes.object,\n\n  /** Tab index for focus */\n  tabIndex: PropTypes.number,\n\n  /** Width of list */\n  width: PropTypes.number.isRequired\n} : {};\nimport { bpfrpt_proptype_CellPosition } from '../Grid';","import createMultiSort from './createMultiSort';\nimport defaultCellDataGetter from './defaultCellDataGetter';\nimport defaultCellRenderer from './defaultCellRenderer';\nimport defaultHeaderRowRenderer from './defaultHeaderRowRenderer.js';\nimport defaultHeaderRenderer from './defaultHeaderRenderer';\nimport defaultRowRenderer from './defaultRowRenderer';\nimport Column from './Column';\nimport SortDirection from './SortDirection';\nimport SortIndicator from './SortIndicator';\nimport Table from './Table';\n\nexport default Table;\nexport { createMultiSort, defaultCellDataGetter, defaultCellRenderer, defaultHeaderRowRenderer, defaultHeaderRenderer, defaultRowRenderer, Column, SortDirection, SortIndicator, Table };","import { requestAnimationTimeout, cancelAnimationTimeout } from '../../utils/requestAnimationTimeout';\n\n\nvar mountedInstances = [];\nvar originalBodyPointerEvents = null;\nvar disablePointerEventsTimeoutId = null;\n\nfunction enablePointerEventsIfDisabled() {\n  if (disablePointerEventsTimeoutId) {\n    disablePointerEventsTimeoutId = null;\n\n    if (document.body && originalBodyPointerEvents != null) {\n      document.body.style.pointerEvents = originalBodyPointerEvents;\n    }\n\n    originalBodyPointerEvents = null;\n  }\n}\n\nfunction enablePointerEventsAfterDelayCallback() {\n  enablePointerEventsIfDisabled();\n  mountedInstances.forEach(function (instance) {\n    return instance.__resetIsScrolling();\n  });\n}\n\nfunction enablePointerEventsAfterDelay() {\n  if (disablePointerEventsTimeoutId) {\n    cancelAnimationTimeout(disablePointerEventsTimeoutId);\n  }\n\n  var maximumTimeout = 0;\n  mountedInstances.forEach(function (instance) {\n    maximumTimeout = Math.max(maximumTimeout, instance.props.scrollingResetTimeInterval);\n  });\n\n  disablePointerEventsTimeoutId = requestAnimationTimeout(enablePointerEventsAfterDelayCallback, maximumTimeout);\n}\n\nfunction onScrollWindow(event) {\n  if (event.currentTarget === window && originalBodyPointerEvents == null && document.body) {\n    originalBodyPointerEvents = document.body.style.pointerEvents;\n\n    document.body.style.pointerEvents = 'none';\n  }\n  enablePointerEventsAfterDelay();\n  mountedInstances.forEach(function (instance) {\n    if (instance.props.scrollElement === event.currentTarget) {\n      instance.__handleWindowScrollEvent();\n    }\n  });\n}\n\nexport function registerScrollListener(component, element) {\n  if (!mountedInstances.some(function (instance) {\n    return instance.props.scrollElement === element;\n  })) {\n    element.addEventListener('scroll', onScrollWindow);\n  }\n  mountedInstances.push(component);\n}\n\nexport function unregisterScrollListener(component, element) {\n  mountedInstances = mountedInstances.filter(function (instance) {\n    return instance !== component;\n  });\n  if (!mountedInstances.length) {\n    element.removeEventListener('scroll', onScrollWindow);\n    if (disablePointerEventsTimeoutId) {\n      cancelAnimationTimeout(disablePointerEventsTimeoutId);\n      enablePointerEventsIfDisabled();\n    }\n  }\n}\nimport { bpfrpt_proptype_WindowScroller } from '../WindowScroller.js';","\n\n/**\n * Gets the dimensions of the element, accounting for API differences between\n * `window` and other DOM elements.\n */\n\nvar isWindow = function isWindow(element) {\n  return element === window;\n};\n\n// TODO Move this into WindowScroller and import from there\n\n\nvar getBoundingBox = function getBoundingBox(element) {\n  return element.getBoundingClientRect();\n};\n\nexport function getDimensions(scrollElement, props) {\n  if (!scrollElement) {\n    return {\n      height: props.serverHeight,\n      width: props.serverWidth\n    };\n  } else if (isWindow(scrollElement)) {\n    var _window = window,\n        innerHeight = _window.innerHeight,\n        innerWidth = _window.innerWidth;\n\n    return {\n      height: typeof innerHeight === 'number' ? innerHeight : 0,\n      width: typeof innerWidth === 'number' ? innerWidth : 0\n    };\n  } else {\n    return getBoundingBox(scrollElement);\n  }\n}\n\n/**\n * Gets the vertical and horizontal position of an element within its scroll container.\n * Elements that have been “scrolled past” return negative values.\n * Handles edge-case where a user is navigating back (history) from an already-scrolled page.\n * In this case the body’s top or left position will be a negative number and this element’s top or left will be increased (by that amount).\n */\nexport function getPositionOffset(element, container) {\n  if (isWindow(container) && document.documentElement) {\n    var containerElement = document.documentElement;\n    var elementRect = getBoundingBox(element);\n    var containerRect = getBoundingBox(containerElement);\n    return {\n      top: elementRect.top - containerRect.top,\n      left: elementRect.left - containerRect.left\n    };\n  } else {\n    var scrollOffset = getScrollOffset(container);\n    var _elementRect = getBoundingBox(element);\n    var _containerRect = getBoundingBox(container);\n    return {\n      top: _elementRect.top + scrollOffset.top - _containerRect.top,\n      left: _elementRect.left + scrollOffset.left - _containerRect.left\n    };\n  }\n}\n\n/**\n * Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility\n * and API differences between `window` and other DOM elements.\n */\nexport function getScrollOffset(element) {\n  if (isWindow(element) && document.documentElement) {\n    return {\n      top: 'scrollY' in window ? window.scrollY : document.documentElement.scrollTop,\n      left: 'scrollX' in window ? window.scrollX : document.documentElement.scrollLeft\n    };\n  } else {\n    return {\n      top: element.scrollTop,\n      left: element.scrollLeft\n    };\n  }\n}","import _extends from 'babel-runtime/helpers/extends';\nimport _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of';\nimport _classCallCheck from 'babel-runtime/helpers/classCallCheck';\nimport _createClass from 'babel-runtime/helpers/createClass';\nimport _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';\nimport _inherits from 'babel-runtime/helpers/inherits';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { registerScrollListener, unregisterScrollListener } from './utils/onScroll';\nimport { getDimensions, getPositionOffset, getScrollOffset } from './utils/dimensions';\nimport createDetectElementResize from '../vendor/detectElementResize';\n\n/**\n * Specifies the number of miliseconds during which to disable pointer events while a scroll is in progress.\n * This improves performance and makes scrolling smoother.\n */\nexport var IS_SCROLLING_TIMEOUT = 150;\n\nvar getWindow = function getWindow() {\n  return typeof window !== 'undefined' ? window : undefined;\n};\n\nvar WindowScroller = function (_React$PureComponent) {\n  _inherits(WindowScroller, _React$PureComponent);\n\n  function WindowScroller() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, WindowScroller);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = WindowScroller.__proto__ || _Object$getPrototypeOf(WindowScroller)).call.apply(_ref, [this].concat(args))), _this), _this._window = getWindow(), _this._isMounted = false, _this._positionFromTop = 0, _this._positionFromLeft = 0, _this.state = _extends({}, getDimensions(_this.props.scrollElement, _this.props), {\n      isScrolling: false,\n      scrollLeft: 0,\n      scrollTop: 0\n    }), _this._registerChild = function (element) {\n      if (element && !(element instanceof Element)) {\n        console.warn('WindowScroller registerChild expects to be passed Element or null');\n      }\n      _this._child = element;\n      _this.updatePosition();\n    }, _this._onChildScroll = function (_ref2) {\n      var scrollTop = _ref2.scrollTop;\n\n      if (_this.state.scrollTop === scrollTop) {\n        return;\n      }\n\n      var scrollElement = _this.props.scrollElement;\n      if (scrollElement) {\n        if (typeof scrollElement.scrollTo === 'function') {\n          scrollElement.scrollTo(0, scrollTop + _this._positionFromTop);\n        } else {\n          scrollElement.scrollTop = scrollTop + _this._positionFromTop;\n        }\n      }\n    }, _this._registerResizeListener = function (element) {\n      if (element === window) {\n        window.addEventListener('resize', _this._onResize, false);\n      } else {\n        _this._detectElementResize.addResizeListener(element, _this._onResize);\n      }\n    }, _this._unregisterResizeListener = function (element) {\n      if (element === window) {\n        window.removeEventListener('resize', _this._onResize, false);\n      } else if (element) {\n        _this._detectElementResize.removeResizeListener(element, _this._onResize);\n      }\n    }, _this._onResize = function () {\n      _this.updatePosition();\n    }, _this.__handleWindowScrollEvent = function () {\n      if (!_this._isMounted) {\n        return;\n      }\n\n      var onScroll = _this.props.onScroll;\n\n\n      var scrollElement = _this.props.scrollElement;\n      if (scrollElement) {\n        var scrollOffset = getScrollOffset(scrollElement);\n        var _scrollLeft = Math.max(0, scrollOffset.left - _this._positionFromLeft);\n        var _scrollTop = Math.max(0, scrollOffset.top - _this._positionFromTop);\n\n        _this.setState({\n          isScrolling: true,\n          scrollLeft: _scrollLeft,\n          scrollTop: _scrollTop\n        });\n\n        onScroll({\n          scrollLeft: _scrollLeft,\n          scrollTop: _scrollTop\n        });\n      }\n    }, _this.__resetIsScrolling = function () {\n      _this.setState({\n        isScrolling: false\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(WindowScroller, [{\n    key: 'updatePosition',\n    value: function updatePosition() {\n      var scrollElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.scrollElement;\n      var onResize = this.props.onResize;\n      var _state = this.state,\n          height = _state.height,\n          width = _state.width;\n\n\n      var thisNode = this._child || ReactDOM.findDOMNode(this);\n      if (thisNode instanceof Element && scrollElement) {\n        var offset = getPositionOffset(thisNode, scrollElement);\n        this._positionFromTop = offset.top;\n        this._positionFromLeft = offset.left;\n      }\n\n      var dimensions = getDimensions(scrollElement, this.props);\n      if (height !== dimensions.height || width !== dimensions.width) {\n        this.setState({\n          height: dimensions.height,\n          width: dimensions.width\n        });\n        onResize({\n          height: dimensions.height,\n          width: dimensions.width\n        });\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var scrollElement = this.props.scrollElement;\n\n      this._detectElementResize = createDetectElementResize();\n\n      this.updatePosition(scrollElement);\n\n      if (scrollElement) {\n        registerScrollListener(this, scrollElement);\n        this._registerResizeListener(scrollElement);\n      }\n\n      this._isMounted = true;\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var scrollElement = this.props.scrollElement;\n      var prevScrollElement = prevProps.scrollElement;\n\n\n      if (prevScrollElement !== scrollElement && prevScrollElement != null && scrollElement != null) {\n        this.updatePosition(scrollElement);\n\n        unregisterScrollListener(this, prevScrollElement);\n        registerScrollListener(this, scrollElement);\n\n        this._unregisterResizeListener(prevScrollElement);\n        this._registerResizeListener(scrollElement);\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      var scrollElement = this.props.scrollElement;\n      if (scrollElement) {\n        unregisterScrollListener(this, scrollElement);\n        this._unregisterResizeListener(scrollElement);\n      }\n\n      this._isMounted = false;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n      var _state2 = this.state,\n          isScrolling = _state2.isScrolling,\n          scrollTop = _state2.scrollTop,\n          scrollLeft = _state2.scrollLeft,\n          height = _state2.height,\n          width = _state2.width;\n\n\n      return children({\n        onChildScroll: this._onChildScroll,\n        registerChild: this._registerChild,\n        height: height,\n        isScrolling: isScrolling,\n        scrollLeft: scrollLeft,\n        scrollTop: scrollTop,\n        width: width\n      });\n    }\n\n    // Referenced by utils/onScroll\n\n\n    // Referenced by utils/onScroll\n\n  }]);\n\n  return WindowScroller;\n}(React.PureComponent);\n\nWindowScroller.defaultProps = {\n  onResize: function onResize() {},\n  onScroll: function onScroll() {},\n  scrollingResetTimeInterval: IS_SCROLLING_TIMEOUT,\n  scrollElement: getWindow(),\n  serverHeight: 0,\n  serverWidth: 0\n};\nWindowScroller.propTypes = process.env.NODE_ENV === 'production' ? null : {\n  /**\n   * Function responsible for rendering children.\n   * This function should implement the following signature:\n   * ({ height, isScrolling, scrollLeft, scrollTop, width }) => PropTypes.element\n   */\n  children: PropTypes.func.isRequired,\n\n\n  /** Callback to be invoked on-resize: ({ height, width }) */\n  onResize: PropTypes.func.isRequired,\n\n\n  /** Callback to be invoked on-scroll: ({ scrollLeft, scrollTop }) */\n  onScroll: PropTypes.func.isRequired,\n\n\n  /** Element to attach scroll event listeners. Defaults to window. */\n  scrollElement: PropTypes.oneOfType([PropTypes.any, function () {\n    return (typeof Element === 'function' ? PropTypes.instanceOf(Element) : PropTypes.any).apply(this, arguments);\n  }]),\n\n  /**\n   * Wait this amount of time after the last scroll event before resetting child `pointer-events`.\n   */\n  scrollingResetTimeInterval: PropTypes.number.isRequired,\n\n\n  /** Height used for server-side rendering */\n  serverHeight: PropTypes.number.isRequired,\n\n\n  /** Width used for server-side rendering */\n  serverWidth: PropTypes.number.isRequired\n};\nexport default WindowScroller;\nimport PropTypes from 'prop-types';","import { QUOTE_PATH } from '../../constants';\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'quote';\nexport const getQuotePath = (id: number) => `${QUOTE_PATH}/${id}`;\nexport const getQuoteEditPath = (id: number) => `${QUOTE_PATH}/${id}/edit`;\n// export const getCreateQuotePath = () => `${QUOTE_PATH}/createQuote`;\n","import {\n  fromJS,\n  Map,\n  Set,\n  List,\n} from 'immutable';\nimport {\n  singleOrArray,\n} from 'ats-utils/src';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  ApplicationActionTypes,\n  ToggleOverlayComponentAction,\n  SetScrollNodeAction,\n  SetOverlayComponentContentAction,\n  SetOverlayComponentPropsAction,\n  SpecToolProjectListIsLoadingAction,\n  AtsApiState,\n  SetAtsApiState,\n  FileAttachmentIsLoadingAction,\n  FieldDropzoneStateChangeAction,\n  SetSnackbarOpenAction,\n  GetVsbEnvSucceededAction,\n  SetAppVersionAction,\n  SetAttributeDialogStateAction,\n  SetOptionDialogStateAction,\n  SetAppMenuOpenAction,\n  ToggleLiveChatAction,\n  SetTimerStartAction,\n  ToggleTakeoffListAction,\n} from './actions';\nimport {\n  Attribute,\n} from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport {\n  PrintActionTypes,\n  PrintSpecSucceededAction,\n  PrintSpecCompletedAction,\n  PrintQuoteSucceededAction,\n  PrintQuoteCompletedAction,\n  SetPollingPrintIdAction,\n  IPrintObj,\n} from '../PrintModule/actions';\nimport { XrefActionTypes } from '../CrossRefModule/actions';\nimport { ISnackBarOptions } from '../../components/CustomizedSnackbar/Component';\nimport { SPEC_PRINT_TYPE, QUOTE_PRINT_FORMAT } from '../../constants';\nimport VsbEnv from '../../models/VsbEnv';\nimport AppVersionData from '../../models/AppVersionData';\nimport { IAttributeWithOptionValues } from '../../pages/ProductConfiguratorPage/OptionsWidget/Options';\nimport { v4 as uuidv4 } from 'uuid';\n\ninterface ILoadingStates {\n  specToolProjectListIsLoading: boolean;\n  fileAttachmentIsLoading: boolean;\n  GET_PRODUCT_DETAILS_LOADING: boolean;\n}\nexport interface IAttributeOptionDialogState {\n  open: boolean;\n  attribute?: IMap<Attribute> | IMap<IAttributeWithOptionValues>;\n}\n\nexport const SNACKBAR_DEFAULT_MESSAGE = 'Changes not saved, please contact customer support';\nexport const SNACKBAR_DEFAULT_SEVERITY = 'error';\nexport const SNACKBAR_DEFAULT_ANCHOR_ORIGIN = {\n  vertical: 'bottom',\n  horizontal: 'center'\n};\n\nexport interface ISession {\n  session: string;\n  expireTime: number;\n  guestSpecId: number;\n}\nexport interface IApplicationReducerState {\n  atsApiState: IMap<AtsApiState>;\n  scrollNode?: React.RefObject<any>;\n  overlayComponents: Map<string, boolean>;\n  overlayComponentProps: Map<string, object>;\n  overlayComponentContent: Map<string, string>;\n  lastOpenedOverlayComponentId: string;\n  printSpecIdTypeMap: Map<number, Set<SPEC_PRINT_TYPE>>;\n  printSpecIdTypeFiles: Map<number, Map<SPEC_PRINT_TYPE, List<IMap<IPrintObj>>>>; // @@TODO-print fix typing\n  loadingStates: IMap<ILoadingStates>;\n  printQuoteMap: Map<number, Set<'quote'>>;\n  printQuoteFiles: Map<number, Map<QUOTE_PRINT_FORMAT, List<IMap<IPrintObj>>>>;\n  snackbarState: IMap<ISnackBarOptions>;\n  pollingPrintId: string;\n  vsbEnv: IMap<VsbEnv>;\n  appVersionData: IMap<AppVersionData>;\n  attributeDialogState: IMap<IAttributeOptionDialogState>;\n  optionDialogState: IMap<IAttributeOptionDialogState>;\n  appMenuOpen: boolean;\n  liveChatOpen: boolean;\n  timerTracker: Map<string, any>;\n  session: IMap<ISession>;\n  takeoffListOpen: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  atsApiState: {},\n  overlayComponents: {},\n  overlayComponentProps: {},\n  overlayComponentContent: {},\n  lastOpenedOverlayComponentId: '',\n  printSpecIdTypeMap: {},\n  printSpecIdTypeFiles: {},\n  loadingStates: {\n    specToolProjectListIsLoading: false,\n    fileAttachmentIsLoading: false,\n    GET_PRODUCT_DETAILS_LOADING: false\n  },\n  fieldDropzoneState: {\n    errorMessage: null,\n    hasError: null,\n    showLoading: false,\n    loadingPercentage: null,\n    loadingState: null,\n    timeoutId: null\n  },\n  showPhotoPreview: true,\n  showMobileAppMenu: false,\n  snackbarState: {\n    isSnackbarOpen: false,\n    message: SNACKBAR_DEFAULT_MESSAGE,\n    severity: SNACKBAR_DEFAULT_SEVERITY,\n    anchorOrigin: SNACKBAR_DEFAULT_ANCHOR_ORIGIN,\n    backgroundColor: null\n  },\n  pollingPrintId: '',\n  vsbEnv: {},\n  appVersionData: {},\n  attributeDialogState: {},\n  optionDialogState: {},\n  appMenuOpen: true,\n  liveChatOpen: false,\n  timerTracker: {\n    timerStart: 0,\n    action: ''\n  },\n  session: {},\n  takeoffListOpen: false,\n});\n\nexport const reducer = (state: IMapNonRecursive<IApplicationReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ApplicationActionTypes.TOGGLE_TAKEOFF_LIST: {\n      const {\n        payload\n      } = action as ToggleTakeoffListAction;\n      return state.set('takeoffListOpen', payload?.forceState ?? !state.get('takeoffListOpen'));\n    }\n    case ApplicationActionTypes.SET_TIMER_START: {\n      const {\n        payload\n      } = action as SetTimerStartAction;\n      return state.set('timerTracker', fromJS(payload));\n    }\n    case ApplicationActionTypes.TOGGLE_LIVE_CHAT: {\n      const {\n        payload,\n      } = action as ToggleLiveChatAction;\n\n      const {\n        open,\n      } = payload;\n      return state.set('liveChatOpen', open);\n    }\n    case ApplicationActionTypes.SET_APP_VERSION: {\n      const {\n        payload,\n      } = action as SetAppVersionAction;\n\n      const {\n        versionData,\n      } = payload;\n      return state.set('appVersionData', versionData);\n    }\n    case PrintActionTypes.SET_POLLING_PRINT_ID: {\n      const {\n        payload,\n      } = action as SetPollingPrintIdAction;\n\n      const {\n        printId,\n      } = payload;\n      return state.set('pollingPrintId', printId);\n    }\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE.withMutations((mutableState) => {\n\n        const persistKeys: Array<keyof IApplicationReducerState> = [\n          'scrollNode',\n          'atsApiState',\n          'appVersionData',\n          'session',\n        ];\n        persistKeys.forEach((key) => {\n          mutableState.set(key, state.get(key));\n        });\n      });\n    }\n    case ApplicationActionTypes.SET_ATS_API_STATE: {\n      const {\n        payload,\n      } = action as SetAtsApiState;\n\n      const {\n        state: atsApiState,\n      } = payload;\n      return state.set('atsApiState', atsApiState);\n    }\n    case ApplicationActionTypes.SET_SCROLL_NODE: {\n      const {\n        payload,\n      } = action as SetScrollNodeAction;\n\n      const {\n        scrollNode,\n      } = payload;\n      return state.set('scrollNode', scrollNode);\n    }\n    case PrintActionTypes.PRINT_SPEC_SUCCEEDED: {\n      const {\n        payload,\n      } = action as PrintSpecSucceededAction;\n\n      const {\n        type,\n        list,\n        printId,\n      } = payload;\n\n      const specId = payload.data.specId;\n\n      return state.setIn(['printSpecIdTypeFiles', specId, type, printId], list);\n    }\n    case PrintActionTypes.PRINT_SPEC_COMPLETED: {\n      const {\n        payload,\n      } = action as PrintSpecCompletedAction;\n\n      const {\n        type,\n      } = payload;\n\n      const specId = payload.data.specId;\n\n      const printSpecTypes: Set<SPEC_PRINT_TYPE> = state.getIn(['printSpecIdTypeMap', specId]) || Set<SPEC_PRINT_TYPE>();\n      const updatedPrintSpecTypes = printSpecTypes.subtract(singleOrArray(type));\n\n      return updatedPrintSpecTypes.isEmpty()\n      ? state.deleteIn(['printSpecIdTypeMap', specId])\n      : state.setIn(['printSpecIdTypeMap', specId], updatedPrintSpecTypes);\n    }\n    case PrintActionTypes.PRINT_QUOTE_SUCCEEDED: {\n      const {\n        payload,\n      } = action as PrintQuoteSucceededAction;\n\n      const quoteId = payload.getIn(['data', 'quoteId']);\n      const list = payload.get('list');\n\n      return state.setIn(['printQuoteFiles', quoteId], list);\n    }\n    case PrintActionTypes.PRINT_QUOTE_COMPLETED: {\n      const {\n        payload,\n      } = action as PrintQuoteCompletedAction;\n\n      const quoteId = payload.getIn(['data', 'quoteId']);\n      return state.deleteIn(['printQuoteMap', quoteId]);\n    }\n    case ApplicationActionTypes.SET_SCROLL_NODE: {\n      const {\n        payload,\n      } = action as SetScrollNodeAction;\n\n      const {\n        scrollNode,\n      } = payload;\n      return state.set('scrollNode', scrollNode);\n    }\n    case ApplicationActionTypes.SET_ATTRIBUTE_DIALOG_STATE: {\n      const {\n        payload\n      } = action as SetAttributeDialogStateAction;\n      return state.set('attributeDialogState', payload);\n    }\n    case ApplicationActionTypes.SET_OPTION_DIALOG_STATE: {\n      const {\n        payload\n      } = action as SetOptionDialogStateAction;\n      return state.set('optionDialogState', payload);\n    }\n    case ApplicationActionTypes.SET_OVERLAY_COMPONENT_PROPS: {\n      const {\n        payload,\n      } = action as SetOverlayComponentPropsAction;\n\n      const {\n        props,\n        id,\n      } = payload;\n      if (id == null) {\n        return state;\n      }\n      return state.setIn(['overlayComponentProps', id], props);\n    }\n    case ApplicationActionTypes.SET_OVERLAY_COMPONENT_CONTENT: {\n      const {\n        payload,\n      } = action as SetOverlayComponentContentAction;\n\n      const {\n        content,\n        id,\n      } = payload;\n      if (id == null) {\n        return state;\n      }\n      return state.setIn(['overlayComponentContent', id], content);\n    }\n    case ApplicationActionTypes.TOGGLE_OVERLAY_COMPONENT: {\n      const {\n        payload,\n      } = action as ToggleOverlayComponentAction;\n\n      const {\n        open,\n        id,\n      } = payload;\n      if (id == null) {\n        return state;\n      }\n\n      if (open) {\n          const lastOpenedOverlayComponentId = state.get('lastOpenedOverlayComponentId');\n          if (lastOpenedOverlayComponentId !== id || !lastOpenedOverlayComponentId) {\n            return state\n              .set('lastOpenedOverlayComponentId', id)\n              .setIn(['overlayComponents', lastOpenedOverlayComponentId], false)\n              .updateIn(['overlayComponents', id], false, (val) => open != null ? open : !val);\n          }\n      }\n      return state.updateIn(['overlayComponents', id], false, (val) => open != null ? open : !val);\n    }\n    case ApplicationActionTypes.SET_SNACKBAR_OPEN: {\n      const {\n        payload\n      } = action as SetSnackbarOpenAction;\n\n      const {\n        content,\n        message = SNACKBAR_DEFAULT_MESSAGE,\n        severity = SNACKBAR_DEFAULT_SEVERITY,\n        backgroundColor = null,\n        anchorOrigin = SNACKBAR_DEFAULT_ANCHOR_ORIGIN,\n        actionProps,\n        iconProps\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.setIn(['snackbarState', 'isSnackbarOpen'], true);\n        ctx.setIn(['snackbarState', 'content'], content);\n        ctx.setIn(['snackbarState', 'message'], message);\n        ctx.setIn(['snackbarState', 'severity'], severity);\n        ctx.setIn(['snackbarState', 'backgroundColor'], backgroundColor);\n        ctx.setIn(['snackbarState', 'anchorOrigin'], fromJS(anchorOrigin));\n        ctx.setIn(['snackbarState', 'actionProps'], actionProps);\n        ctx.setIn(['snackbarState', 'iconProps'], iconProps);\n      });\n    }\n    case ApplicationActionTypes.SET_SNACKBAR_CLOSED: {\n      return state.withMutations((ctx) => {\n        ctx.setIn(['snackbarState', 'isSnackbarOpen'], false);\n      });\n    }\n    case ApplicationActionTypes.SPEC_TOOL_PROJECT_LIST_IS_LOADING: {\n      const {\n        payload\n      } = action as SpecToolProjectListIsLoadingAction;\n\n      return state.setIn(['loadingStates', 'specToolProjectListIsLoading'], payload);\n    }\n    case ApplicationActionTypes.FILE_ATTACHMENT_IS_LOADING: {\n      const {\n        payload\n      } = action as FileAttachmentIsLoadingAction;\n\n      return state.setIn(['loadingStates', 'fileAttachmentIsLoading'], payload);\n    }\n    case ApplicationActionTypes.FIELD_DROPZONE_STATE_CHANGE: {\n      const {\n        payload: {\n          key,\n          value\n        }\n      } = action as FieldDropzoneStateChangeAction;\n\n      return state.setIn(['fieldDropzoneState', key], value);\n    }\n    case ApplicationActionTypes.FIELD_DROPZONE_STATE_RESET: {\n      return state.setIn(['fieldDropzoneState'], INITIAL_STATE.get('fieldDropzoneState'));\n    }\n    case ApplicationActionTypes.NO_PHOTO_PREVIEW: {\n      return state.setIn(['showPhotoPreview'], false);\n    }\n    case ApplicationActionTypes.SHOW_PHOTO_PREVIEW: {\n      return state.setIn(['showPhotoPreview'], true);\n    }\n    case ApplicationActionTypes.OPEN_MOBILE_APP_MENU: {\n      return state.setIn(['showMobileAppMenu'], true);\n    }\n    case ApplicationActionTypes.CLOSE_MOBILE_APP_MENU: {\n      return state.setIn(['showMobileAppMenu'], false);\n    }\n    case XrefActionTypes.GET_PRODUCT_DETAILS: {\n      return state.setIn(['loadingStates', 'GET_PRODUCT_DETAILS_LOADING'], true);\n    }\n    case XrefActionTypes.GET_PRODUCT_DETAILS_FAILED:\n    case XrefActionTypes.GET_PRODUCT_DETAILS_SUCCEEDED: {\n      return state.setIn(['loadingStates', 'GET_PRODUCT_DETAILS_LOADING'], false);\n    }\n    case ApplicationActionTypes.GET_VSB_ENV_SUCCEEDED: {\n      const { payload } = action as GetVsbEnvSucceededAction;\n      return state.setIn(['vsbEnv'], payload);\n    }\n    case ApplicationActionTypes.SET_APP_MENU_OPEN_ACTION: {\n      const { payload: { open } } = action as SetAppMenuOpenAction;\n      return state.set('appMenuOpen', open);\n    }\n    case ApplicationActionTypes.SET_SESSION_ACTION: {\n      return state.set('session', action.payload.session);\n    }\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","// This is for SPEC TOOL\nimport { connectedReduxRedirect } from 'redux-auth-wrapper/history4/redirect';\nimport locationHelperBuilder from 'redux-auth-wrapper/history4/locationHelper';\nimport { replace } from 'connected-react-router/immutable';\nimport {\n    makeSelectIsVerifyingUser,\n    makeSelectLoading,\n    makeSelectToken,\n} from '../modules/AtsModule/selectors';\nimport {\n    APPLICATION_BASE_PATH,\n    LOGIN_PATH,\n    NOT_FOUND_PATH,\n    PRODUCT_CATEGORY_PATH,\n} from '../constants';\nconst isAuthTokenExist = (state) => !!(makeSelectToken()(state));\nconst isVerifyingUser = (state) => makeSelectIsVerifyingUser()(state);\nexport const userIsAuthenticated = () => connectedReduxRedirect({\n    // The url to redirect user to if they fail\n    redirectPath: (state, ownProps) => LOGIN_PATH,\n    // This prevents us from adding the query parameter when we send the user away from the login page\n    allowRedirectBack: false,\n    // If selector is true, wrapper will not redirect\n    // For example let's check that state contains user data\n    authenticatingSelector: isVerifyingUser,\n    authenticatedSelector: isAuthTokenExist,\n    redirectAction: replace,\n    // A nice display name for this check\n    wrapperDisplayName: 'UserIsAuthenticated',\n    AuthenticatingComponent: defaultAuthenticatingComponent\n});\n\nconst defaultAuthenticatingComponent = () => null;\n\nconst locationHelper = locationHelperBuilder({});\n\nexport const userIsNotAuthenticated = (component?: any) => connectedReduxRedirect({\n    // This sends the user either to the query param route if we have one, or to the landing page if none is specified and the user is already logged in\n    redirectPath: (state, ownProps) => locationHelper.getRedirectQueryParam(ownProps) || APPLICATION_BASE_PATH,\n    // This prevents us from adding the query parameter when we send the user away from the login page\n    allowRedirectBack: false,\n    // If selector is true, wrapper will not redirect\n    // So if there is no user data, then we show the page\n    authenticatingSelector: isVerifyingUser,\n    authenticatedSelector: (state) => !isAuthTokenExist(state),\n    redirectAction: replace,\n    // A nice display name for this check\n    wrapperDisplayName: 'UserIsNotAuthenticated',\n    AuthenticatingComponent: component,\n});","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme,\n  Tooltip\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { IMap } from 'ats-utils/src';\nimport { Category, ListItem, Manufacturer } from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n} from 'redux-form';\nimport { GetCategoriesAction, GetManufacturersAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectCategory, makeSelectUserFirmCompanyName, makeSelectUserFirmCompanyAltName, makeSelectToolSpecificManufacturers } from '../../../modules/AccountModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  dateValidateFunc,\n  isValidMomentDate\n} from '../../../validators';\nimport { IXrefSearchArgs } from '../index';\nimport { makeSelectAllManufacturers, makeSelectXrefTypes } from '../../../modules/ListModule/selectors';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport { formatDateRangeFilter } from '../../ProjectList/ProjectListFilter';\nimport { CROSS_TYPE_NAMES } from '../../../constants';\nimport { crossTypes } from '../../../components/CrossReferenceTypesInfoPopup/Component';\nimport { GetAllManufacturersAction } from '../../../modules/ListModule/actions';\n\nexport const FORM_NAME = 'XrefListFilter';\n\nconst locations = [\n  {\n    labelPath: 'pimCrossRefListFilter.usa',\n    id: 6252001\n  },\n  {\n    labelPath: 'pimCrossRefListFilter.canada',\n    id: 6251999\n  },\n  {\n    labelPath: 'pimCrossRefListFilter.all',\n    id: null\n  }\n];\n\nconst inputStyle =  { fontSize: '0.9em' };\n\nconst modifiedDateValidateFunc = (value, allValues) => dateValidateFunc('modifiedDate', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\n\ninterface IXrefListFilterComponentProps {\n  open: boolean;\n  form?: string;\n  andFilters: object;\n  toggleDrawer: () => void;\n  setSearchArgsAndSearch: (arg: IXrefSearchArgs) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IXrefListFilter extends IXrefListFilterComponentProps {\n  formValues: Map<string, any>;\n  manufacturers: List<IMap<Manufacturer>>;\n  allManufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  xrefTypes: List<IMap<ListItem>>;\n  companyName: string;\n  companyAltName: string;\n  dispatch: Dispatch<IAction>;\n  getAllManufacturers: () => void;\n  getManufacturers: () => void;\n  getCategories: () => void;\n}\n\ntype IXrefListFilterType = IXrefListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass XrefListFilter extends React.Component<IXrefListFilterType> {\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      getManufacturers,\n      getAllManufacturers,\n      getCategories,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      getManufacturers();\n      getAllManufacturers();\n      getCategories();\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const locationId = values.getIn(['location', 'id']);\n      const location = locationId ? { country: { id: locationId } } : {};\n\n      const formatedValues = (Map() as Map<string, any>).withMutations(ctx => {\n        const modifiedDate = values.get('modifiedDate');\n        const formatedModifiedDate = modifiedDate && formatDateRangeFilter(modifiedDate);\n        if (formatedModifiedDate) {\n          ctx.set('modifiedDate', formatedModifiedDate);\n        }\n\n        const createdDate = values.get('createdDate');\n        const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n        if (formatedCreatedDate) {\n          ctx.set('createdDate', formatedCreatedDate);\n        }\n\n        const competitorManufacturer = values.getIn(['competitorProduct', 'value']);\n        if (competitorManufacturer) {\n          ctx.setIn(['competitorProduct.brand', 'eq'], competitorManufacturer);\n        }\n\n        const sponsorManufacturer = values.getIn(['sponsorProduct', 'value']);\n        if (sponsorManufacturer) {\n          ctx.setIn(['sponsorProduct.brand', 'eq'], sponsorManufacturer);\n        }\n\n        const category = values.getIn(['categoryName', 'value']);\n        if (category) {\n          ctx.setIn(['competitorProduct.categoryName', 'eq'], category);\n          ctx.setIn(['sponsorProduct.categoryName', 'eq'], category);\n        }\n\n        const crossType = values.getIn(['crossType', 'type']);\n        if (crossType) {\n          ctx.setIn(['xt.name', 'eq'], crossType);\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .mapKeys((key) => {\n          return key.replace(new RegExp('😈', 'g'), '.');\n        })\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List());\n\n      setSearchArgsAndSearch({\n        andFilters: valuesWithParsedKeys.size ? valuesWithParsedKeys.toJS() : null,\n        page: 0,\n        location,\n        reloadList: true\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      form,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(reset(form || FORM_NAME));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      andFilters: null,\n      page: 0,\n      location: null,\n      reloadList: true\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      open,\n      formValues = Map(),\n      toggleDrawer,\n      handleSubmit,\n      manufacturers,\n      allManufacturers,\n      categories,\n      xrefTypes,\n      companyName,\n      companyAltName,\n      uniqueKey,\n      t,\n    } = this.props;\n\n    const _companyName = companyAltName || companyName || '';\n\n    const types = crossTypes.filter(type => xrefTypes.find(xrefType => xrefType.get('value') === type.type));\n\n    return (\n      <Drawer\n        className={classes.drawer}\n        classes={{\n          paper: classes.drawerPaper,\n        }}\n        variant='persistent'\n        anchor='right'\n        open={open}\n        style={{ width: open ? 'initial' : 0}}\n      >\n        <form\n          key={uniqueKey}\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          {/* Header */}\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('generalListFilter.title')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              item={true}\n              xs={5}\n            >\n              <Button\n                color='primary'\n                onClick={this.handleResetForm}\n              >\n                {t('generalListFilter.reset')}\n              </Button>\n              <IconButton\n                onClick={toggleDrawer}\n              >\n                <CloseIcon />\n              </IconButton>\n            </Grid>\n          </Grid>\n\n          {/* Content */}\n          <Grid\n            item={true}\n            className={classes.content}\n          >\n            {/* Update date */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimCrossRefList.updatedDate')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`modifiedDate.gte`}\n                  props={{\n                    timeOfDay: 'start',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.startBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[isValidMomentDate, modifiedDateValidateFunc]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n\n              <Grid\n                item={true}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('generalListFilter.to')}\n                </Typography>\n              </Grid>\n\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`modifiedDate.lte`}\n                  props={{\n                    timeOfDay: 'end',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.endBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[isValidMomentDate, modifiedDateValidateFunc]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n            </Grid>\n\n            {/* created date */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('generalListFilter.createdDate')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`createdDate.gte`}\n                  props={{\n                    timeOfDay: 'start',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.startBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[isValidMomentDate, createdDateValidateFunc]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n\n              <Grid\n                item={true}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('generalListFilter.to')}\n                </Typography>\n              </Grid>\n\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`createdDate.lte`}\n                  props={{\n                    timeOfDay: 'end',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.endBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[isValidMomentDate, createdDateValidateFunc]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Competitor Product Manufacturer */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimCrossRefList.competitorManufacturer')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='competitorProduct'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: allManufacturers.toJS(),\n                      placeholder: t('pimCrossRefList.selectManufacturer'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    textField_inputProps: {\n                      style: inputStyle\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Recommended Product Manufacturer */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimCrossRefList.recommendedManufacturer')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='sponsorProduct'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: manufacturers.toJS(),\n                      placeholder: t('pimCrossRefList.selectManufacturer'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    textField_inputProps: {\n                      style: inputStyle\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              {/* Location */}\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('pimCrossRefListFilter.locationLabel')}\n                </Typography>\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='location'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: locations,\n                      placeholder: t('pimCrossRefListFilter.locationPlaceholder'),\n                      getOptionLabel: option => option ? t(option.labelPath) : null,\n                      renderOption: option => option && <Typography>{t(option.labelPath)}</Typography>\n                    },\n                    textField_inputProps: {\n                      style: inputStyle\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n\n              {/* Category */}\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('generalListFilter.categoryTitle')}\n                </Typography>\n                <Tooltip\n                  title={formValues.getIn(['categoryName', 'value']) || ''}\n                  classes={{ popper: classes.tooltipPlacement }}\n                >\n                  <div style={{ width: '100%' }}>\n                    <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                      name='categoryName'\n                      component={FieldAutocomplete}\n                      props={{\n                        inputProps: {\n                          options: categories && categories.toJS(),\n                          placeholder: t('generalListFilter.categoryPlaceholder'),\n                          getOptionLabel: option => option ? option.value : null,\n                          renderOption: option => option && <Typography>{option.value}</Typography>\n                        },\n                        textField_inputProps: {\n                          style: inputStyle\n                        },\n                        formControlProps: {\n                          fullWidth: true\n                        }\n                      }}\n                    />\n                  </div>\n                </Tooltip>\n              </Grid>\n            </Grid>\n\n            {/* Cross Type */}\n            <Grid\n              container={true}\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('pimCrossRefListFilter.crossTypeLabel')}\n                </Typography>\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='crossType'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: types,\n                      placeholder: t('pimCrossRefListFilter.crossTypePlaceholder'),\n                      getOptionLabel: option => option ? option.tooltip() : null,\n                      renderOption: option => option && (\n                        <Grid container={true}>\n                          {option.icon}\n                          <Typography className={classes.paddingLeft}>\n                            {option.type === CROSS_TYPE_NAMES.firm ? option.tooltip(_companyName) : option.tooltip()}\n                          </Typography>\n                        </Grid>\n                      )\n                    },\n                    textField_inputProps: {\n                      style: inputStyle\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n          </Grid>\n        </form>\n      </Drawer>\n    );\n  }\n}\n\nconst DRAWER_MAX_WIDTH = 370;\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: `${DRAWER_MAX_WIDTH}px`\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflowY: 'auto',\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16),\n  },\n  paddingLeft: {\n    paddingLeft: theme.spacing()\n  },\n  tooltipPlacement: {\n    top: `${theme.spacing(-3)}px !important`\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state, ownProps: IXrefListFilterComponentProps) => {\n  const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      manufacturers: makeSelectToolSpecificManufacturers(),\n      allManufacturers: makeSelectAllManufacturers(),\n      categories: makeSelectCategory(),\n      xrefTypes: makeSelectXrefTypes(),\n      companyName: makeSelectUserFirmCompanyName(),\n      companyAltName: makeSelectUserFirmCompanyAltName()\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    dispatch,\n    getAllManufacturers: () => dispatch(new GetAllManufacturersAction()),\n    getManufacturers: () => dispatch(new GetManufacturersAction()),\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IXrefListFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: FORM_NAME }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(XrefListFilter);\n","import * as React from 'react';\nimport {\n  Button,\n  Chip,\n  Grid,\n  Typography\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap/index';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { List, Map, fromJS } from 'immutable';\nimport { getFormValues, reduxForm } from 'redux-form/immutable';\nimport {\n  change,\n  reset,\n  initialize,\n} from 'redux-form';\nimport { makeSelectCities, makeSelectCountries, makeSelectProvinces } from '../../modules/ProjectLocationModule/selectors';\nimport { ListItem } from '../../models';\nimport { utcToLocal } from 'ats-utils/src';\nimport { FORM_NAME as MASTER_LIST_FILTER_FORM } from '../../containers/MasterList/MasterListFilter';\nimport { FORM_NAME as MASTER_TEMPLATE_LIST_FILTER_FORM } from '../../containers/TemplateList/MasterTemplateFilter';\nimport { PT_PROJECT_LIST_FILTER_FORM } from '../../containers/ProjectList/ProjectListFilter';\nimport { PT_QUOTE_LIST_FILTER_FORM } from '../../containers/QuoteListPage/QuoteFilter/QuoteFilter';\nimport { SERIES_LIST_FILTER_FORM } from '../../containers/PimSeriesListPage/SeriesListFilter';\nimport { DESCRIPTIONS_LIST_FILTER_FORM } from '../../containers/PimDescriptionsListPage/DescriptionsListFilter';\nimport { FORM_NAME as XREF_LIST_FILTER_FORM } from '../../containers/PimCrossReferenceListPage/XrefListFilter';\nimport { capitalize } from 'lodash';\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    padding: theme.spacing(0.5, 3),\n    marginBottom: theme.spacing(-2.5),\n  },\n  chip: {\n    borderRadius: theme.shape.borderRadius,\n    margin: theme.spacing(.25),\n    height: 'auto',\n    padding: `${theme.spacing(.5)}px 0`,\n    whiteSpace: 'normal',\n  },\n  chipWrap: {\n    whiteSpace: 'normal',\n  },\n}));\n\ninterface IFilterChipsBarComponentProps {\n  filtersFormId: any;\n  options?: any;\n  setSearchArgsAndSearch: (args: any) => void;\n  setUniqueKey?: (key: any) => void;\n  containerStyle?: React.CSSProperties;\n  updatePimSeriesListFilterFormValues?: (isDraft: boolean, newFormValues: Map<string, any>) => void;\n  isDraftPimSeriesList?: boolean;\n}\n\ninterface IFilterChipsBarProps extends IFilterChipsBarComponentProps {\n  filtersFormValues: IMap<any>;\n  fieldsList: IMap<any>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  dispatch(action: IAction): void;\n}\n\ntype FilterChipsBarPropsType = IFilterChipsBarProps & WithTranslation;\n\nconst FilterChipsBar: React.FC<FilterChipsBarPropsType> = (props) => {\n  const {\n    dispatch,\n    t,\n    filtersFormId,\n    options = {},\n    setSearchArgsAndSearch,\n    setUniqueKey = null,\n    filtersFormValues,\n    fieldsList,\n    countries,\n    provinces,\n    cities,\n    containerStyle = {},\n    updatePimSeriesListFilterFormValues = null,\n    isDraftPimSeriesList = null\n  } = props;\n\n  const {\n    container,\n    chip,\n    chipWrap\n  } = useStyles();\n\n  const clearFilters = () => {\n\n    dispatch(\n      initialize(\n        filtersFormId,\n        {}\n      )\n    );\n    dispatch(reset(filtersFormId));\n\n    if (setUniqueKey) {\n      setUniqueKey(Date.now());\n    }\n\n    if (filtersFormId === XREF_LIST_FILTER_FORM) {\n      setSearchArgsAndSearch({\n        andFilters: null,\n        page: 0,\n        location: null,\n        reloadList: true\n      });\n    } else {\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters: null,\n        page: 0,\n      });\n    }\n\n    if (filtersFormId === SERIES_LIST_FILTER_FORM && updatePimSeriesListFilterFormValues) {\n      updatePimSeriesListFilterFormValues(isDraftPimSeriesList, Map());\n    }\n  };\n\n  const getLabelKey = (fieldName: string) => {\n    switch (fieldName) {\n      case 'country.eq':\n      case 'countryId.eq': return `${t('filterChips.location')} ${t('filterChips.country')}`;\n      case 'province.eq':\n      case 'provinceId.eq': return `${t('filterChips.location')} ${t('filterChips.stateProvince')}`;\n      case 'city.eq':\n      case 'cityId.eq': return `${t('filterChips.location')} ${t('filterChips.city')}`;\n      case 'buildingTypeId.eq': return t('filterChips.buildingType');\n      case 'buildingClassId.eq': return t('filterChips.buildingClass');\n      case 'createdDate.gte':\n      case 'firmProduct😈dateAdded.gte':\n      case 'dateAdded.gte': return `${t('filterChips.createdDate')} ${t('filterChips.startBy')}`;\n      case 'modifiedDate.gte':\n      case 'firmProduct😈dateModified.gte':\n      case 'dateModified.gte': return `${t('filterChips.updatedDate')} ${t('filterChips.startBy')}`;\n      case 'createdDate.lte':\n      case 'firmProduct😈dateAdded.lte':\n      case 'dateAdded.lte': return `${t('filterChips.createdDate')} ${t('filterChips.endBy')}`;\n      case 'modifiedDate.lte':\n      case 'firmProduct😈dateModified.lte':\n      case 'dateModified.lte': return `${t('filterChips.updatedDate')} ${t('filterChips.endBy')}`;\n      case 'registerDate.gte': return `${t('filterChips.registerDate')} ${t('filterChips.startBy')}`;\n      case 'registerDate.lte': return `${t('filterChips.registerDate')} ${t('filterChips.endBy')}`;\n      case 'lastModified.gte': return `${t('filterChips.modifiedDate')} ${t('filterChips.startBy')}`;\n      case 'lastModified.lte': return `${t('filterChips.modifiedDate')} ${t('filterChips.endBy')}`;\n      case 'bidDate.gte': return `${t('filterChips.bidDate')} ${t('filterChips.startBy')}`;\n      case 'bidDate.lte': return `${t('filterChips.bidDate')} ${t('filterChips.endBy')}`;\n      case 'createdBy.eq':\n      case 'createdBy😈user😈id.eq':\n      case 'createdBy.in': {\n        switch (filtersFormId) {\n          case MASTER_TEMPLATE_LIST_FILTER_FORM:\n          case MASTER_LIST_FILTER_FORM: return t('filterChips.creator');\n          default: return t('filterChips.createdByUser');\n        }\n      }\n      case 'assignedTo😈id.in': return t('filterChips.assignedTo');\n      case 'modifiedBy😈user😈id.eq':\n      case 'modifiedBy😈user😈id.in':\n      case 'modifiedBy.eq': return t('filterChips.updatedBy');\n      case 'createdByOfficeId.eq':\n      case 'createdBy😈office😈id.eq':\n      case 'createdBy😈office😈id.in':\n      case 'createdByOfficeId.in': return t('filterChips.createdByOffice');\n      case 'isCollaborated.eq': return t('filterChips.collaborated');\n      case 'isAi.eq': {\n        switch (filtersFormId) {\n          case PT_PROJECT_LIST_FILTER_FORM: return t('filterChips.hasAiSpec');\n          default: return t('filterChips.aiSpec');\n        }\n      }\n      case 'isAi.neq': {\n        switch (filtersFormId) {\n          case PT_PROJECT_LIST_FILTER_FORM: return t('filterChips.hasDesignSpec');\n          default: return t('filterChips.designSpec');\n        }\n      }\n      case 'address1.like': return t('filterChips.address');\n      case 'contactType.like': return t('filterChips.contactType');\n      case 'officeNumber.like': return t('filterChips.phoneNumber');\n      case 'name.like': return t('filterChips.projectName');\n      case 'regionId.in': return t('filterChips.region');\n      case 'oppLabelId.eq': return t('filterChips.opportunityLabel');\n      case 'oppStatusId.eq': return t('filterChips.opportunityStatus');\n      case 'oppValue.gte': return `${t('filterChips.opportunityValue')} ${t('filterChips.min')}`;\n      case 'oppValue.lte': return `${t('filterChips.opportunityValue')} ${t('filterChips.max')}`;\n      case 'phaseName.eq': return t('filterChips.projectPhase');\n      case 'valuation.gte': return `${t('filterChips.projectValuation')} ${t('filterChips.min')}`;\n      case 'valuation.lte': return `${t('filterChips.projectValuation')} ${t('filterChips.max')}`;\n      case 'trackingOfficeId.eq': return t('filterChips.trackedByOffice');\n      case 'contacts.in': return t('filterChips.contact');\n      case 'sourceId.eq': return t('filterChips.leadSource');\n      case 'sourceName.eq': return t('filterChips.ref#');\n      case 'source.in': return t('filterChips.projectSource.label');\n      case 'isUserTracked.eq':\n      case 'isUserTracked.neq': return t('filterChips.trackedByMe');\n      case 'quoteCount.gte': return t('filterChips.hasQuote');\n      case 'hasAiValidatedSpec.eq': return t('filterChips.readyQuoteValidated');\n      case 'brand.eq':\n      case 'brand.in':\n      case 'manufacturerId.eq':\n      case 'sections😈products😈brand.eq': return t('filterChips.manufacturer');\n      case 'categoryName.eq':\n      case 'categoryName.in':\n      case 'category.eq':\n      case 'categoryId.eq':\n      case 'categoryName': return t('filterChips.category');\n      case 'status.eq':\n      case 'status.in':\n      case 'status.neq': return t('filterChips.status');\n      case 'firmId.eq': return t('filterChips.manufacturerRecommended');\n      case 'firmId.neq': return t('filterChips.firmConfigurator');\n      case 'quotePhase.like': return t('filterChips.quoteStatus');\n      case 'region😈id.eq': return t('filterChips.pricingRegion');\n      case 'customers😈id.eq': return t('filterChips.customer');\n      case 'collaborators😈id.eq': return t('filterChips.outsideSalesRep');\n      case 'architectName😈id.eq': return t('filterChips.architect');\n      case 'engineerName😈id.eq': return t('filterChips.engineer');\n      case 'contractorName😈id.eq': return t('filterChips.contractor');\n      case 'sections😈products😈categoryName.eq': return t('filterChips.productCategory');\n      case 'sections😈products😈productNumber.eq': return t('filterChips.productNumber');\n      case 'createdByFirmName.like': return t('filterChips.createdByFirm');\n      case 'source.like': return t('filterChips.source');\n      case 'invalid.eq': return t('filterChips.showInvalidSeriesOnly');\n      case 'isConfigurator.eq': return t('filterChips.seriesType');\n      case 'pimStatus.eq': return t('filterChips.publishStatus');\n      case 'testStatus.eq': return t('filterChips.testStatus');\n      case 'activated' : return t('filterChips.activated');\n      case 'deactivated' : return t('filterChips.deactivated');\n      case 'competitorProduct': return t('filterChips.competitorProductManufacturer');\n      case 'sponsorProduct': return t('filterChips.sponsorProductManufacturer');\n      case 'crossType': return t('filterChips.crossType');\n      case 'location': return t('filterChips.location');\n      case 'firm': return t('filterChips.firm');\n      case 'office': return t('filterChips.office');\n      case 'verified.eq':\n      case 'verified.neq': return t('filterChips.verified');\n      case 'firmType.eq':\n      case 'firmType': return 'Organization Type';\n      case 'firmRelation': return 'Firm Relation';\n      case 'jobTitle.like': return 'Role';\n      case 'sharedProduct.eq':\n      case 'sharedProduct.neq': return t('firmProductListFilter.sharedLibraryLabel');\n      case 'productSharedWithMe.eq':\n      case 'productSharedWithMe.neq': return t('firmProductListFilter.addedToFirmLibraryLabel');\n      default: return '';\n    }\n  };\n\n  const getLabelValue = (fieldName: string, valuePath: any[]) => {\n    switch (fieldName) {\n      case 'categoryName.eq':\n      case 'category.eq':\n      case 'sections😈products😈categoryName.eq':\n      case 'categoryName': return filtersFormValues.getIn(valuePath.concat(['label'])) || filtersFormValues.getIn(valuePath.concat(['value']));\n      case 'quotePhase.like': return filtersFormValues.getIn(valuePath.concat(['label'])) || filtersFormValues.getIn(valuePath.concat(['value']));\n      case 'country.eq':\n      case 'province.eq':\n      case 'city.eq':\n      case 'oppLabelId.eq':\n      case 'oppStatusId.eq':\n      case 'createdBy.eq':\n      case 'createdBy😈user😈id.eq':\n      case 'modifiedBy😈user😈id.eq':\n      case 'modifiedBy.eq':\n      case 'sourceId.eq':\n      case 'regionId.in':\n      case 'brand.eq':\n      case 'customers😈id.eq':\n      case 'collaborators😈id.eq':\n      case 'sections😈products😈brand.eq':\n      case 'architectName😈id.eq':\n      case 'engineerName😈id.eq':\n      case 'contractorName😈id.eq':\n      case 'pimStatus.eq':\n      case 'competitorProduct':\n      case 'sponsorProduct':\n      case 'testStatus.eq': return filtersFormValues.getIn(valuePath.concat(['value']));\n      case 'brand.in':\n      case 'categoryName.in': return filtersFormValues.getIn(valuePath).map(x => x.label || x.value);\n      case 'countryId.eq':\n      case 'provinceId.eq':\n      case 'cityId.eq': {\n        const locationId = filtersFormValues.getIn(valuePath);\n        const locationsList = fieldName === 'countryId.eq' ? countries : fieldName === 'provinceId.eq' ? provinces : cities;\n        const selectedLocation = locationsList.find((country) => country.get('id') === locationId);\n        return selectedLocation && selectedLocation.get('value');\n      }\n      case 'buildingTypeId.eq':\n      case 'buildingClassId.eq':\n      case 'region😈id.eq': return filtersFormValues.getIn(valuePath.concat(['label']));\n      case 'createdDate.gte':\n      case 'createdDate.lte':\n      case 'bidDate.gte':\n      case 'bidDate.lte':\n      case 'modifiedDate.gte':\n      case 'modifiedDate.lte':\n      case 'firmProduct😈dateAdded.gte':\n      case 'firmProduct😈dateAdded.lte':\n      case 'firmProduct😈dateModified.gte':\n      case 'firmProduct😈dateModified.lte':\n      case 'dateAdded.gte':\n      case 'dateAdded.lte':\n      case 'dateModified.gte':\n      case 'dateModified.lte':\n      case 'registerDate.gte':\n      case 'registerDate.lte':\n      case 'lastModified.gte':\n      case 'lastModified.lte': return utcToLocal(filtersFormValues.getIn(valuePath));\n      case 'createdByOfficeId.eq':\n      case 'createdBy😈office😈id.eq':\n      case 'trackingOfficeId.eq': return filtersFormValues.getIn(valuePath.concat(['officeName']));\n      case 'isCollaborated.eq': return filtersFormValues.getIn(valuePath.concat(['text']));\n      case 'isAi.eq':\n      case 'isAi.neq':\n      case 'quoteCount.gte':\n      case 'hasAiValidatedSpec.eq':\n      case 'activated' :\n      case 'deactivated' : return filtersFormValues.getIn(valuePath.concat([0]));\n      case 'address1.like':\n      case 'contactType.like':\n      case 'officeNumber.like':\n      case 'oppValue.gte':\n      case 'oppValue.lte':\n      case 'valuation.gte':\n      case 'valuation.lte':\n      case 'sourceName.eq':\n      case 'createdByFirmName.like':\n      case 'source.like':\n      case 'invalid.eq': return filtersFormValues.getIn(valuePath);\n      case 'name.like': return filtersFormValues.getIn(valuePath);\n      case 'modifiedBy😈user😈id.in':\n      case 'createdBy.in': return filtersFormValues.getIn(valuePath).map(x => x.value);\n      case 'createdBy😈office😈id.in':\n      case 'createdByOfficeId.in': return filtersFormValues.getIn(valuePath).map(x => x.officeName);\n      case 'assignedTo😈id.in': return filtersFormValues.getIn(valuePath).map(x => x.value);\n      case 'phaseName.eq': return filtersFormValues.getIn(valuePath.concat(['title']));\n      case 'contacts.in': return filtersFormValues.getIn(valuePath).map(x => {\n        const { firstName, lastName, organization } = x;\n        if (firstName && lastName) {\n          return firstName + ' ' + lastName;\n        }\n        if (firstName) {\n          return firstName;\n        }\n        return organization;\n      });\n      case 'source.in': return filtersFormValues.getIn(valuePath).map(value => t(`filterChips.projectSource.${value}Source`)).join(', ') || null;\n      case 'isUserTracked.eq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('filterChips.tracked') : null;\n      case 'isUserTracked.neq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('filterChips.untracked') : null;\n      case 'status.eq': {\n        const booleanValue = filtersFormValues.getIn(valuePath.concat([0]));\n        const statusString = filtersFormValues.getIn(valuePath.concat(['value']));\n        return booleanValue\n          ? t('filterChips.active')\n          : statusString?.charAt(0)?.toUpperCase() + statusString?.slice(1);\n      }\n      case 'status.neq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('filterChips.inactive') : null;\n      case 'status.in': return filtersFormValues.getIn(valuePath).map(x => x.labelPath ? t(x.labelPath) : capitalize(x.value));\n      case 'firmId.eq':\n      case 'firmId.neq': return filtersFormValues.getIn(valuePath).size === 1; // when checked, size is 1\n      case 'sections😈products😈productNumber.eq': return filtersFormValues.getIn(valuePath.concat(['productNumber']));\n      case 'isConfigurator.eq': return filtersFormValues.getIn(valuePath).map(x => x ? t('filterChips.advanceConfiguration') : t('filterChips.basicConfiguration'));\n      case 'manufacturerId.eq':\n      case 'categoryId.eq': {\n        switch (filtersFormId) {\n          case DESCRIPTIONS_LIST_FILTER_FORM: return filtersFormValues.getIn(valuePath.concat(['name']));\n          default: return filtersFormValues.getIn(valuePath.concat(['label'])) || filtersFormValues.getIn(valuePath.concat(['value']));\n        }\n      }\n      case 'crossType': return filtersFormValues.getIn(valuePath.concat(['tooltip']))();\n      case 'location': {\n        const labelPathTranslation = filtersFormValues.getIn(valuePath.concat(['labelPath']));\n        return t(labelPathTranslation);\n      }\n      case 'firm': return `${filtersFormValues.getIn(valuePath.concat(['companyName']))} (${filtersFormValues.getIn(valuePath.concat(['id']))})`;\n      case 'office': return `${filtersFormValues.getIn(valuePath.concat(['officeName']))} (${filtersFormValues.getIn(valuePath.concat(['id']))})`;\n      case 'verified.eq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('filterChips.verified') : null;\n      case 'verified.neq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('filterChips.unverified') : null;\n      case 'firmType.eq':\n      case 'firmType': return filtersFormValues.getIn(valuePath.concat(['value']));\n      case 'firmRelation': return filtersFormValues.getIn(valuePath.concat(['label']));\n      case 'jobTitle.like': return filtersFormValues.getIn(valuePath);\n      case 'sharedProduct.eq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('firmProductListFilter.sharedCheckboxLabel') : null;\n      case 'sharedProduct.neq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('firmProductListFilter.ownFirmCheckboxLabel') : null;\n      case 'productSharedWithMe.eq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('firmProductListFilter.addedToFirmLibraryCheckboxLabel') : null;\n      case 'productSharedWithMe.neq': return filtersFormValues.getIn(valuePath.concat([0])) ? t('firmProductListFilter.notAddedToFirmLibraryCheckboxLabel') : null;\n      default: return '';\n    }\n  };\n\n  const fieldsWithMultiValues = [\n    'isConfigurator.eq',\n    'name.like',\n    'createdBy.in',\n    'createdByOfficeId.in',\n    'contacts.in',\n    'brand.in',\n    'categoryName.in',\n    'modifiedBy😈user😈id.in',\n    'status.in',\n    'createdBy😈office😈id.in',\n    'assignedTo😈id.in',\n  ];\n  const filterChipsList = fieldsList && filtersFormValues && fieldsList.entrySeq().reduce((acc, filter) => {\n    const fieldName = filter[1].get('name');\n    const formsValuePath = filter[1].get('valuePath');\n    const labelValue = filtersFormValues.getIn(formsValuePath) && getLabelValue(fieldName, formsValuePath);\n    if (!labelValue) {\n      return acc;\n    }\n    const labelKey = getLabelKey(fieldName);\n    const label = typeof labelValue === 'boolean' ? labelKey : `${labelKey} - ${labelValue}`;\n    // some fields contain multi values and we want to display individual chips for each value\n    if (fieldsWithMultiValues.includes(fieldName)) {\n      const labelList = labelValue.map((value, index) => ( {fieldName: `${fieldName}.${index}`, label: `${labelKey} - ${value}`, originalFieldName: fieldName} ));\n      return acc.concat(labelList);\n    } else {\n      return acc.push({fieldName, label});\n    }\n  }, List())?.sort((a, b) => {\n    const {label: aLabel} = a;\n    const {label: bLabel} = b;\n    if (aLabel.toLowerCase() < bLabel.toLowerCase()) {\n      return -1;\n    }\n    if (aLabel.toLowerCase() > bLabel.toLowerCase()) {\n      return 1;\n    }\n    return 0;\n  }) || List();\n\n  return (\n    <Grid\n      container={true}\n      alignItems='baseline'\n      wrap='nowrap'\n      className={container}\n      style={containerStyle}\n    >\n      <Grid container={true} style={{width: 'auto'}} alignItems='center'>\n        <Typography>{t('filterChips.appliedFilters')}</Typography>\n      </Grid>\n      <Grid container={true} style={{flex: '1 0 0px'}}>\n        {\n          filterChipsList.map((filter) => {\n            const {fieldName, label, originalFieldName} = filter;\n            return (\n              <Grid item={true} key={fieldName}>\n                <Chip\n                  className={chip}\n                  label={label}\n                  onDelete={() => {\n                    // for fields with multi values, we remove the value from the array\n                    if (originalFieldName && fieldsWithMultiValues.includes(originalFieldName)) {\n                      const deleletedIndex = fieldName.split('.')[2];\n                      const valuePath = originalFieldName.split('.');\n                      // the config field from PIM series list filter is immutable,\n                      // the other fields are from AQ project list filter and are regular array\n                      const updatedList = originalFieldName === 'isConfigurator.eq'\n                        ? filtersFormValues.getIn(valuePath).delete(deleletedIndex)\n                        : filtersFormValues.getIn(valuePath).filter((value, index) => index !== Number(deleletedIndex));\n                      dispatch(change(filtersFormId, originalFieldName, updatedList));\n                    } else {\n                    dispatch(change(filtersFormId, fieldName, null));\n                    }\n                  }}\n                  classes={{\n                    label: chipWrap\n                  }}\n                />\n              </Grid>\n            );\n          })\n        }\n      </Grid>\n      <Grid container={true} style={{width: 'auto', marginRight: 80}}>\n        <Button\n          onClick={clearFilters}\n          color='primary'\n          style={{visibility: filterChipsList.size > 0 ? 'visible' : 'hidden'}}\n        >\n          {t('formButtons.reset')}\n        </Button>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state: any, ownProps) => {\n  const { filtersFormId } = ownProps;\n  const registeredFields = state.getIn(['form', filtersFormId, 'registeredFields']);\n  const fieldsList = registeredFields && registeredFields.reduce((acc, field: any) => {\n    const fieldName = field.get('name');\n    const valuePath = fieldName.split('.');\n    return acc.set(fieldName, Map({name: fieldName, valuePath}));\n  }, Map());\n\n  return {\n    fieldsList,\n    filtersFormValues: getFormValues(filtersFormId)(state),\n    countries: makeSelectCountries()(state),\n    provinces: makeSelectProvinces()(state),\n    cities: makeSelectCities()(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n  dispatch,\n});\n\nexport default compose<React.ComponentClass<IFilterChipsBarComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(FilterChipsBar);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M13 13v8h8v-8h-8zM3 21h8v-8H3v8zM3 3v8h8V3H3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66-5.66-5.65z\"\n}), 'Widgets');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\"\n}), 'CloudUpload');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  createStyles,\n  WithStyles,\n  withStyles,\n  Button,\n  CircularProgress,\n  Typography,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\n\ninterface IDrawerEditCTAComponentProps {\n  disabled?: boolean;\n  disableSubmit?: boolean;\n  cancelText?: string;\n  saveText?: string;\n  warningText?: React.ReactNode;\n  isProcessing?: boolean;\n  isProcessingText?: string;\n  handleClose: () => void;\n  handleSave?: () => void;\n}\n\ntype DrawerEditCTAProps = IDrawerEditCTAComponentProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  cta: {\n    padding: theme.spacing(2, 0),\n    position: 'sticky',\n    bottom: '0',\n    background: theme.palette.common.white\n  }\n});\n\nconst DrawerEditCTA: React.FC<DrawerEditCTAProps> = ({\n  classes,\n  disabled = false,\n  disableSubmit = false,\n  cancelText,\n  saveText,\n  warningText,\n  isProcessing,\n  isProcessingText,\n  handleClose,\n  handleSave,\n  t,\n}) => (\n  <Grid\n    container={true}\n    className={classes.cta}\n  >\n    {\n      isProcessing\n        ? <Grid container={true} alignItems='center' wrap='nowrap'>\n            <CircularProgress size='1.4em' style={{ marginRight: 12 }} />\n            <Typography variant='body2' color='textPrimary'>\n              { isProcessingText || 'processing...' }\n            </Typography>\n          </Grid>\n        : <>\n            <Button\n              onClick={handleClose}\n              color='primary'\n              disabled={disabled}\n            >\n              { cancelText || t('formButtons.cancel') }\n            </Button>\n            <Button\n              onClick={handleSave}\n              type='submit'\n              color='primary'\n              disabled={disableSubmit}\n            >\n              { saveText || t('formButtons.save') }\n            </Button>\n          </>\n    }\n    { warningText && warningText }\n  </Grid>\n);\n\nexport default compose<React.FC<IDrawerEditCTAComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(DrawerEditCTA);\n\n","/**\n * @licstart The following is the entire license notice for the\n * Javascript code in this page\n *\n * Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * Javascript code in this page\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf\"] = root.pdfjsLib = factory();\n})(this, function() {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.LinkTarget = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0;\nexports.addLinkAttributes = addLinkAttributes;\nexports.deprecated = deprecated;\nexports.getFilenameFromUrl = getFilenameFromUrl;\nexports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;\nexports.getXfaPageViewport = getXfaPageViewport;\nexports.isDataScheme = isDataScheme;\nexports.isPdfFile = isPdfFile;\nexports.isValidFetchUrl = isValidFetchUrl;\nexports.loadScript = loadScript;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _base_factory = __w_pdfjs_require__(135);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nvar SVG_NS = \"http://www.w3.org/2000/svg\";\nvar PixelsPerInch = {\n  CSS: 96.0,\n  PDF: 72.0,\n\n  get PDF_TO_CSS_UNITS() {\n    return (0, _util.shadow)(this, \"PDF_TO_CSS_UNITS\", this.CSS / this.PDF);\n  }\n\n};\nexports.PixelsPerInch = PixelsPerInch;\n\nvar DOMCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {\n  _inherits(DOMCanvasFactory, _BaseCanvasFactory);\n\n  var _super = _createSuper(DOMCanvasFactory);\n\n  function DOMCanvasFactory() {\n    var _this;\n\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        _ref$ownerDocument = _ref.ownerDocument,\n        ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument;\n\n    _classCallCheck(this, DOMCanvasFactory);\n\n    _this = _super.call(this);\n    _this._document = ownerDocument;\n    return _this;\n  }\n\n  _createClass(DOMCanvasFactory, [{\n    key: \"_createCanvas\",\n    value: function _createCanvas(width, height) {\n      var canvas = this._document.createElement(\"canvas\");\n\n      canvas.width = width;\n      canvas.height = height;\n      return canvas;\n    }\n  }]);\n\n  return DOMCanvasFactory;\n}(_base_factory.BaseCanvasFactory);\n\nexports.DOMCanvasFactory = DOMCanvasFactory;\n\nfunction fetchData(_x) {\n  return _fetchData.apply(this, arguments);\n}\n\nfunction _fetchData() {\n  _fetchData = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(url) {\n    var asTypedArray,\n        response,\n        _args = arguments;\n    return _regenerator[\"default\"].wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            asTypedArray = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;\n\n            if (!isValidFetchUrl(url, document.baseURI)) {\n              _context.next = 21;\n              break;\n            }\n\n            _context.next = 4;\n            return fetch(url);\n\n          case 4:\n            response = _context.sent;\n\n            if (response.ok) {\n              _context.next = 7;\n              break;\n            }\n\n            throw new Error(response.statusText);\n\n          case 7:\n            if (!asTypedArray) {\n              _context.next = 15;\n              break;\n            }\n\n            _context.t1 = Uint8Array;\n            _context.next = 11;\n            return response.arrayBuffer();\n\n          case 11:\n            _context.t2 = _context.sent;\n            _context.t0 = new _context.t1(_context.t2);\n            _context.next = 20;\n            break;\n\n          case 15:\n            _context.t3 = _util.stringToBytes;\n            _context.next = 18;\n            return response.text();\n\n          case 18:\n            _context.t4 = _context.sent;\n            _context.t0 = (0, _context.t3)(_context.t4);\n\n          case 20:\n            return _context.abrupt(\"return\", _context.t0);\n\n          case 21:\n            return _context.abrupt(\"return\", new Promise(function (resolve, reject) {\n              var request = new XMLHttpRequest();\n              request.open(\"GET\", url, true);\n\n              if (asTypedArray) {\n                request.responseType = \"arraybuffer\";\n              }\n\n              request.onreadystatechange = function () {\n                if (request.readyState !== XMLHttpRequest.DONE) {\n                  return;\n                }\n\n                if (request.status === 200 || request.status === 0) {\n                  var data;\n\n                  if (asTypedArray && request.response) {\n                    data = new Uint8Array(request.response);\n                  } else if (!asTypedArray && request.responseText) {\n                    data = (0, _util.stringToBytes)(request.responseText);\n                  }\n\n                  if (data) {\n                    resolve(data);\n                    return;\n                  }\n                }\n\n                reject(new Error(request.statusText));\n              };\n\n              request.send(null);\n            }));\n\n          case 22:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _callee);\n  }));\n  return _fetchData.apply(this, arguments);\n}\n\nvar DOMCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {\n  _inherits(DOMCMapReaderFactory, _BaseCMapReaderFactor);\n\n  var _super2 = _createSuper(DOMCMapReaderFactory);\n\n  function DOMCMapReaderFactory() {\n    _classCallCheck(this, DOMCMapReaderFactory);\n\n    return _super2.apply(this, arguments);\n  }\n\n  _createClass(DOMCMapReaderFactory, [{\n    key: \"_fetchData\",\n    value: function _fetchData(url, compressionType) {\n      return fetchData(url, this.isCompressed).then(function (data) {\n        return {\n          cMapData: data,\n          compressionType: compressionType\n        };\n      });\n    }\n  }]);\n\n  return DOMCMapReaderFactory;\n}(_base_factory.BaseCMapReaderFactory);\n\nexports.DOMCMapReaderFactory = DOMCMapReaderFactory;\n\nvar DOMStandardFontDataFactory = /*#__PURE__*/function (_BaseStandardFontData) {\n  _inherits(DOMStandardFontDataFactory, _BaseStandardFontData);\n\n  var _super3 = _createSuper(DOMStandardFontDataFactory);\n\n  function DOMStandardFontDataFactory() {\n    _classCallCheck(this, DOMStandardFontDataFactory);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(DOMStandardFontDataFactory, [{\n    key: \"_fetchData\",\n    value: function _fetchData(url) {\n      return fetchData(url, true);\n    }\n  }]);\n\n  return DOMStandardFontDataFactory;\n}(_base_factory.BaseStandardFontDataFactory);\n\nexports.DOMStandardFontDataFactory = DOMStandardFontDataFactory;\n\nvar DOMSVGFactory = /*#__PURE__*/function (_BaseSVGFactory) {\n  _inherits(DOMSVGFactory, _BaseSVGFactory);\n\n  var _super4 = _createSuper(DOMSVGFactory);\n\n  function DOMSVGFactory() {\n    _classCallCheck(this, DOMSVGFactory);\n\n    return _super4.apply(this, arguments);\n  }\n\n  _createClass(DOMSVGFactory, [{\n    key: \"_createSVG\",\n    value: function _createSVG(type) {\n      return document.createElementNS(SVG_NS, type);\n    }\n  }]);\n\n  return DOMSVGFactory;\n}(_base_factory.BaseSVGFactory);\n\nexports.DOMSVGFactory = DOMSVGFactory;\n\nvar PageViewport = /*#__PURE__*/function () {\n  function PageViewport(_ref2) {\n    var viewBox = _ref2.viewBox,\n        scale = _ref2.scale,\n        rotation = _ref2.rotation,\n        _ref2$offsetX = _ref2.offsetX,\n        offsetX = _ref2$offsetX === void 0 ? 0 : _ref2$offsetX,\n        _ref2$offsetY = _ref2.offsetY,\n        offsetY = _ref2$offsetY === void 0 ? 0 : _ref2$offsetY,\n        _ref2$dontFlip = _ref2.dontFlip,\n        dontFlip = _ref2$dontFlip === void 0 ? false : _ref2$dontFlip;\n\n    _classCallCheck(this, PageViewport);\n\n    this.viewBox = viewBox;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n    var centerX = (viewBox[2] + viewBox[0]) / 2;\n    var centerY = (viewBox[3] + viewBox[1]) / 2;\n    var rotateA, rotateB, rotateC, rotateD;\n    rotation %= 360;\n\n    if (rotation < 0) {\n      rotation += 360;\n    }\n\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n\n      default:\n        throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n    }\n\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n\n    var offsetCanvasX, offsetCanvasY;\n    var width, height;\n\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n      height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n      height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n    }\n\n    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\n    this.width = width;\n    this.height = height;\n  }\n\n  _createClass(PageViewport, [{\n    key: \"clone\",\n    value: function clone() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref3$scale = _ref3.scale,\n          scale = _ref3$scale === void 0 ? this.scale : _ref3$scale,\n          _ref3$rotation = _ref3.rotation,\n          rotation = _ref3$rotation === void 0 ? this.rotation : _ref3$rotation,\n          _ref3$offsetX = _ref3.offsetX,\n          offsetX = _ref3$offsetX === void 0 ? this.offsetX : _ref3$offsetX,\n          _ref3$offsetY = _ref3.offsetY,\n          offsetY = _ref3$offsetY === void 0 ? this.offsetY : _ref3$offsetY,\n          _ref3$dontFlip = _ref3.dontFlip,\n          dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip;\n\n      return new PageViewport({\n        viewBox: this.viewBox.slice(),\n        scale: scale,\n        rotation: rotation,\n        offsetX: offsetX,\n        offsetY: offsetY,\n        dontFlip: dontFlip\n      });\n    }\n  }, {\n    key: \"convertToViewportPoint\",\n    value: function convertToViewportPoint(x, y) {\n      return _util.Util.applyTransform([x, y], this.transform);\n    }\n  }, {\n    key: \"convertToViewportRectangle\",\n    value: function convertToViewportRectangle(rect) {\n      var topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);\n\n      var bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);\n\n      return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n    }\n  }, {\n    key: \"convertToPdfPoint\",\n    value: function convertToPdfPoint(x, y) {\n      return _util.Util.applyInverseTransform([x, y], this.transform);\n    }\n  }]);\n\n  return PageViewport;\n}();\n\nexports.PageViewport = PageViewport;\n\nvar RenderingCancelledException = /*#__PURE__*/function (_BaseException) {\n  _inherits(RenderingCancelledException, _BaseException);\n\n  var _super5 = _createSuper(RenderingCancelledException);\n\n  function RenderingCancelledException(msg, type) {\n    var _this2;\n\n    _classCallCheck(this, RenderingCancelledException);\n\n    _this2 = _super5.call(this, msg, \"RenderingCancelledException\");\n    _this2.type = type;\n    return _this2;\n  }\n\n  return RenderingCancelledException;\n}(_util.BaseException);\n\nexports.RenderingCancelledException = RenderingCancelledException;\nvar LinkTarget = {\n  NONE: 0,\n  SELF: 1,\n  BLANK: 2,\n  PARENT: 3,\n  TOP: 4\n};\nexports.LinkTarget = LinkTarget;\n\nfunction addLinkAttributes(link) {\n  var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      url = _ref4.url,\n      target = _ref4.target,\n      rel = _ref4.rel,\n      _ref4$enabled = _ref4.enabled,\n      enabled = _ref4$enabled === void 0 ? true : _ref4$enabled;\n\n  (0, _util.assert)(url && typeof url === \"string\", 'addLinkAttributes: A valid \"url\" parameter must provided.');\n  var urlNullRemoved = (0, _util.removeNullCharacters)(url);\n\n  if (enabled) {\n    link.href = link.title = urlNullRemoved;\n  } else {\n    link.href = \"\";\n    link.title = \"Disabled: \".concat(urlNullRemoved);\n\n    link.onclick = function () {\n      return false;\n    };\n  }\n\n  var targetStr = \"\";\n\n  switch (target) {\n    case LinkTarget.NONE:\n      break;\n\n    case LinkTarget.SELF:\n      targetStr = \"_self\";\n      break;\n\n    case LinkTarget.BLANK:\n      targetStr = \"_blank\";\n      break;\n\n    case LinkTarget.PARENT:\n      targetStr = \"_parent\";\n      break;\n\n    case LinkTarget.TOP:\n      targetStr = \"_top\";\n      break;\n  }\n\n  link.target = targetStr;\n  link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\nfunction isDataScheme(url) {\n  var ii = url.length;\n  var i = 0;\n\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\nfunction getFilenameFromUrl(url) {\n  var anchor = url.indexOf(\"#\");\n  var query = url.indexOf(\"?\");\n  var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);\n  return url.substring(url.lastIndexOf(\"/\", end) + 1, end);\n}\n\nfunction getPdfFilenameFromUrl(url) {\n  var defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"document.pdf\";\n\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n\n  if (isDataScheme(url)) {\n    (0, _util.warn)('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n\n  var reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n  var reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n  var splitURI = reURI.exec(url);\n  var suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);\n\n  if (suggestedFilename) {\n    suggestedFilename = suggestedFilename[0];\n\n    if (suggestedFilename.includes(\"%\")) {\n      try {\n        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];\n      } catch (ex) {}\n    }\n  }\n\n  return suggestedFilename || defaultFilename;\n}\n\nvar StatTimer = /*#__PURE__*/function () {\n  function StatTimer() {\n    _classCallCheck(this, StatTimer);\n\n    this.started = Object.create(null);\n    this.times = [];\n  }\n\n  _createClass(StatTimer, [{\n    key: \"time\",\n    value: function time(name) {\n      if (name in this.started) {\n        (0, _util.warn)(\"Timer is already running for \".concat(name));\n      }\n\n      this.started[name] = Date.now();\n    }\n  }, {\n    key: \"timeEnd\",\n    value: function timeEnd(name) {\n      if (!(name in this.started)) {\n        (0, _util.warn)(\"Timer has not been started for \".concat(name));\n      }\n\n      this.times.push({\n        name: name,\n        start: this.started[name],\n        end: Date.now()\n      });\n      delete this.started[name];\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var outBuf = [];\n      var longest = 0;\n\n      var _iterator = _createForOfIteratorHelper(this.times),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var time = _step.value;\n          var name = time.name;\n\n          if (name.length > longest) {\n            longest = name.length;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n\n      var _iterator2 = _createForOfIteratorHelper(this.times),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _time = _step2.value;\n          var duration = _time.end - _time.start;\n          outBuf.push(\"\".concat(_time.name.padEnd(longest), \" \").concat(duration, \"ms\\n\"));\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      return outBuf.join(\"\");\n    }\n  }]);\n\n  return StatTimer;\n}();\n\nexports.StatTimer = StatTimer;\n\nfunction isValidFetchUrl(url, baseUrl) {\n  try {\n    var _ref5 = baseUrl ? new URL(url, baseUrl) : new URL(url),\n        protocol = _ref5.protocol;\n\n    return protocol === \"http:\" || protocol === \"https:\";\n  } catch (ex) {\n    return false;\n  }\n}\n\nfunction loadScript(src) {\n  var removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  return new Promise(function (resolve, reject) {\n    var script = document.createElement(\"script\");\n    script.src = src;\n\n    script.onload = function (evt) {\n      if (removeScriptElement) {\n        script.remove();\n      }\n\n      resolve(evt);\n    };\n\n    script.onerror = function () {\n      reject(new Error(\"Cannot load script at: \".concat(script.src)));\n    };\n\n    (document.head || document.documentElement).appendChild(script);\n  });\n}\n\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\n\nvar pdfDateStringRegex;\n\nvar PDFDateString = /*#__PURE__*/function () {\n  function PDFDateString() {\n    _classCallCheck(this, PDFDateString);\n  }\n\n  _createClass(PDFDateString, null, [{\n    key: \"toDateObject\",\n    value: function toDateObject(input) {\n      if (!input || !(0, _util.isString)(input)) {\n        return null;\n      }\n\n      if (!pdfDateStringRegex) {\n        pdfDateStringRegex = new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+|-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\n      }\n\n      var matches = pdfDateStringRegex.exec(input);\n\n      if (!matches) {\n        return null;\n      }\n\n      var year = parseInt(matches[1], 10);\n      var month = parseInt(matches[2], 10);\n      month = month >= 1 && month <= 12 ? month - 1 : 0;\n      var day = parseInt(matches[3], 10);\n      day = day >= 1 && day <= 31 ? day : 1;\n      var hour = parseInt(matches[4], 10);\n      hour = hour >= 0 && hour <= 23 ? hour : 0;\n      var minute = parseInt(matches[5], 10);\n      minute = minute >= 0 && minute <= 59 ? minute : 0;\n      var second = parseInt(matches[6], 10);\n      second = second >= 0 && second <= 59 ? second : 0;\n      var universalTimeRelation = matches[7] || \"Z\";\n      var offsetHour = parseInt(matches[8], 10);\n      offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n      var offsetMinute = parseInt(matches[9], 10) || 0;\n      offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n      if (universalTimeRelation === \"-\") {\n        hour += offsetHour;\n        minute += offsetMinute;\n      } else if (universalTimeRelation === \"+\") {\n        hour -= offsetHour;\n        minute -= offsetMinute;\n      }\n\n      return new Date(Date.UTC(year, month, day, hour, minute, second));\n    }\n  }]);\n\n  return PDFDateString;\n}();\n\nexports.PDFDateString = PDFDateString;\n\nfunction getXfaPageViewport(xfaPage, _ref6) {\n  var _ref6$scale = _ref6.scale,\n      scale = _ref6$scale === void 0 ? 1 : _ref6$scale,\n      _ref6$rotation = _ref6.rotation,\n      rotation = _ref6$rotation === void 0 ? 0 : _ref6$rotation;\n  var _xfaPage$attributes$s = xfaPage.attributes.style,\n      width = _xfaPage$attributes$s.width,\n      height = _xfaPage$attributes$s.height;\n  var viewBox = [0, 0, parseInt(width), parseInt(height)];\n  return new PageViewport({\n    viewBox: viewBox,\n    scale: scale,\n    rotation: rotation\n  });\n}\n\n/***/ }),\n/* 2 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nmodule.exports = __w_pdfjs_require__(3);\n\n/***/ }),\n/* 3 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n/* module decorator */ module = __w_pdfjs_require__.nmd(module);\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar runtime = function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined;\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n\n  try {\n    define({}, \"\");\n  } catch (err) {\n    define = function define(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n    return generator;\n  }\n\n  exports.wrap = wrap;\n\n  function tryCatch(fn, obj, arg) {\n    try {\n      return {\n        type: \"normal\",\n        arg: fn.call(obj, arg)\n      };\n    } catch (err) {\n      return {\n        type: \"throw\",\n        arg: err\n      };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n  var ContinueSentinel = {};\n\n  function Generator() {}\n\n  function GeneratorFunction() {}\n\n  function GeneratorFunctionPrototype() {}\n\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n  if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  define(Gp, \"constructor\", GeneratorFunctionPrototype);\n  define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n  GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\");\n\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\n      define(prototype, method, function (arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function (genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n  };\n\n  exports.mark = function (genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  exports.awrap = function (arg) {\n    return {\n      __await: arg\n    };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n\n        if (value && _typeof(value) === \"object\" && hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function (value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function (err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function (unwrapped) {\n          result.value = unwrapped;\n          resolve(result);\n        }, function (error) {\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function (resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n    }\n\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n      return result.done ? result.value : iter.next();\n    });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          context.sent = context._sent = context.arg;\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n        var record = tryCatch(innerFn, self, context);\n\n        if (record.type === \"normal\") {\n          state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n\n    if (method === undefined) {\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator[\"return\"]) {\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (!info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      context[delegate.resultName] = info.value;\n      context.next = delegate.nextLoc;\n\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n    } else {\n      return info;\n    }\n\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  defineIteratorMethods(Gp);\n  define(Gp, toStringTagSymbol, \"Generator\");\n  define(Gp, iteratorSymbol, function () {\n    return this;\n  });\n  define(Gp, \"toString\", function () {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = {\n      tryLoc: locs[0]\n    };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function (object) {\n    var keys = [];\n\n    for (var key in object) {\n      keys.push(key);\n    }\n\n    keys.reverse();\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1,\n            next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    return {\n      next: doneResult\n    };\n  }\n\n  exports.values = values;\n\n  function doneResult() {\n    return {\n      value: undefined,\n      done: true\n    };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n    reset: function reset(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n      this.method = \"next\";\n      this.arg = undefined;\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n    stop: function stop() {\n      this.done = true;\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n    dispatchException: function dispatchException(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n    complete: function complete(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" || record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n    finish: function finish(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n    \"catch\": function _catch(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n\n          return thrown;\n        }\n      }\n\n      throw new Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n  return exports;\n}(( false ? 0 : _typeof(module)) === \"object\" ? module.exports : {});\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  if ((typeof globalThis === \"undefined\" ? \"undefined\" : _typeof(globalThis)) === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n\n/***/ }),\n/* 4 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;\nexports.arrayByteLength = arrayByteLength;\nexports.arraysToBytes = arraysToBytes;\nexports.assert = assert;\nexports.bytesToString = bytesToString;\nexports.createObjectURL = createObjectURL;\nexports.createPromiseCapability = createPromiseCapability;\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\nexports.escapeString = escapeString;\nexports.getModificationDate = getModificationDate;\nexports.getVerbosityLevel = getVerbosityLevel;\nexports.info = info;\nexports.isArrayBuffer = isArrayBuffer;\nexports.isArrayEqual = isArrayEqual;\nexports.isAscii = isAscii;\nexports.isBool = isBool;\nexports.isNum = isNum;\nexports.isSameOrigin = isSameOrigin;\nexports.isString = isString;\nexports.objectFromMap = objectFromMap;\nexports.objectSize = objectSize;\nexports.removeNullCharacters = removeNullCharacters;\nexports.setVerbosityLevel = setVerbosityLevel;\nexports.shadow = shadow;\nexports.string32 = string32;\nexports.stringToBytes = stringToBytes;\nexports.stringToPDFString = stringToPDFString;\nexports.stringToUTF16BEString = stringToUTF16BEString;\nexports.stringToUTF8String = stringToUTF8String;\nexports.unreachable = unreachable;\nexports.utf8StringToString = utf8StringToString;\nexports.warn = warn;\n\n__w_pdfjs_require__(5);\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\nvar RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  OPLIST: 0x100\n};\nexports.RenderingIntentFlag = RenderingIntentFlag;\nvar AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3\n};\nexports.AnnotationMode = AnnotationMode;\nvar PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800\n};\nexports.PermissionFlag = PermissionFlag;\nvar TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4\n};\nexports.TextRenderingMode = TextRenderingMode;\nvar ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3\n};\nexports.ImageKind = ImageKind;\nvar AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26\n};\nexports.AnnotationType = AnnotationType;\nvar AnnotationStateModelType = {\n  MARKED: \"Marked\",\n  REVIEW: \"Review\"\n};\nexports.AnnotationStateModelType = AnnotationStateModelType;\nvar AnnotationMarkedState = {\n  MARKED: \"Marked\",\n  UNMARKED: \"Unmarked\"\n};\nexports.AnnotationMarkedState = AnnotationMarkedState;\nvar AnnotationReviewState = {\n  ACCEPTED: \"Accepted\",\n  REJECTED: \"Rejected\",\n  CANCELLED: \"Cancelled\",\n  COMPLETED: \"Completed\",\n  NONE: \"None\"\n};\nexports.AnnotationReviewState = AnnotationReviewState;\nvar AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\"\n};\nexports.AnnotationReplyType = AnnotationReplyType;\nvar AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200\n};\nexports.AnnotationFlag = AnnotationFlag;\nvar AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000\n};\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\nvar AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5\n};\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\nvar AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\"\n};\nexports.AnnotationActionEventType = AnnotationActionEventType;\nvar DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\"\n};\nexports.DocumentActionEventType = DocumentActionEventType;\nvar PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\"\n};\nexports.PageActionEventType = PageActionEventType;\nvar StreamType = {\n  UNKNOWN: \"UNKNOWN\",\n  FLATE: \"FLATE\",\n  LZW: \"LZW\",\n  DCT: \"DCT\",\n  JPX: \"JPX\",\n  JBIG: \"JBIG\",\n  A85: \"A85\",\n  AHX: \"AHX\",\n  CCF: \"CCF\",\n  RLX: \"RLX\"\n};\nexports.StreamType = StreamType;\nvar FontType = {\n  UNKNOWN: \"UNKNOWN\",\n  TYPE1: \"TYPE1\",\n  TYPE1STANDARD: \"TYPE1STANDARD\",\n  TYPE1C: \"TYPE1C\",\n  CIDFONTTYPE0: \"CIDFONTTYPE0\",\n  CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n  TRUETYPE: \"TRUETYPE\",\n  CIDFONTTYPE2: \"CIDFONTTYPE2\",\n  TYPE3: \"TYPE3\",\n  OPENTYPE: \"OPENTYPE\",\n  TYPE0: \"TYPE0\",\n  MMTYPE1: \"MMTYPE1\"\n};\nexports.FontType = FontType;\nvar VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5\n};\nexports.VerbosityLevel = VerbosityLevel;\nvar CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1,\n  STREAM: 2\n};\nexports.CMapCompressionType = CMapCompressionType;\nvar OPS = {\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  beginAnnotations: 78,\n  endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  paintJpegXObject: 82,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91\n};\nexports.OPS = OPS;\nvar UNSUPPORTED_FEATURES = {\n  unknown: \"unknown\",\n  forms: \"forms\",\n  javaScript: \"javaScript\",\n  signatures: \"signatures\",\n  smask: \"smask\",\n  shadingPattern: \"shadingPattern\",\n  font: \"font\",\n  errorTilingPattern: \"errorTilingPattern\",\n  errorExtGState: \"errorExtGState\",\n  errorXObject: \"errorXObject\",\n  errorFontLoadType3: \"errorFontLoadType3\",\n  errorFontState: \"errorFontState\",\n  errorFontMissing: \"errorFontMissing\",\n  errorFontTranslate: \"errorFontTranslate\",\n  errorColorSpace: \"errorColorSpace\",\n  errorOperatorList: \"errorOperatorList\",\n  errorFontToUnicode: \"errorFontToUnicode\",\n  errorFontLoadNative: \"errorFontLoadNative\",\n  errorFontBuildPath: \"errorFontBuildPath\",\n  errorFontGetPath: \"errorFontGetPath\",\n  errorMarkedContent: \"errorMarkedContent\",\n  errorContentSubStream: \"errorContentSubStream\"\n};\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\nvar PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nexports.PasswordResponses = PasswordResponses;\nvar verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\n\nfunction getVerbosityLevel() {\n  return verbosity;\n}\n\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    console.log(\"Info: \".concat(msg));\n  }\n}\n\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.log(\"Warning: \".concat(msg));\n  }\n}\n\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\n\nfunction isSameOrigin(baseUrl, otherUrl) {\n  var base;\n\n  try {\n    base = new URL(baseUrl);\n\n    if (!base.origin || base.origin === \"null\") {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n\n  var other = new URL(otherUrl, base);\n  return base.origin === other.origin;\n}\n\nfunction _isValidProtocol(url) {\n  if (!url) {\n    return false;\n  }\n\n  switch (url.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nfunction createValidAbsoluteUrl(url) {\n  var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (!url) {\n    return null;\n  }\n\n  try {\n    if (options && typeof url === \"string\") {\n      if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n        var dots = url.match(/\\./g);\n\n        if (dots && dots.length >= 2) {\n          url = \"http://\".concat(url);\n        }\n      }\n\n      if (options.tryConvertEncoding) {\n        try {\n          url = stringToUTF8String(url);\n        } catch (ex) {}\n      }\n    }\n\n    var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch (ex) {}\n\n  return null;\n}\n\nfunction shadow(obj, prop, value) {\n  Object.defineProperty(obj, prop, {\n    value: value,\n    enumerable: true,\n    configurable: true,\n    writable: false\n  });\n  return value;\n}\n\nvar BaseException = function BaseExceptionClosure() {\n  function BaseException(message, name) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n\n    this.message = message;\n    this.name = name;\n  }\n\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n  return BaseException;\n}();\n\nexports.BaseException = BaseException;\n\nvar PasswordException = /*#__PURE__*/function (_BaseException) {\n  _inherits(PasswordException, _BaseException);\n\n  var _super = _createSuper(PasswordException);\n\n  function PasswordException(msg, code) {\n    var _this;\n\n    _classCallCheck(this, PasswordException);\n\n    _this = _super.call(this, msg, \"PasswordException\");\n    _this.code = code;\n    return _this;\n  }\n\n  return PasswordException;\n}(BaseException);\n\nexports.PasswordException = PasswordException;\n\nvar UnknownErrorException = /*#__PURE__*/function (_BaseException2) {\n  _inherits(UnknownErrorException, _BaseException2);\n\n  var _super2 = _createSuper(UnknownErrorException);\n\n  function UnknownErrorException(msg, details) {\n    var _this2;\n\n    _classCallCheck(this, UnknownErrorException);\n\n    _this2 = _super2.call(this, msg, \"UnknownErrorException\");\n    _this2.details = details;\n    return _this2;\n  }\n\n  return UnknownErrorException;\n}(BaseException);\n\nexports.UnknownErrorException = UnknownErrorException;\n\nvar InvalidPDFException = /*#__PURE__*/function (_BaseException3) {\n  _inherits(InvalidPDFException, _BaseException3);\n\n  var _super3 = _createSuper(InvalidPDFException);\n\n  function InvalidPDFException(msg) {\n    _classCallCheck(this, InvalidPDFException);\n\n    return _super3.call(this, msg, \"InvalidPDFException\");\n  }\n\n  return InvalidPDFException;\n}(BaseException);\n\nexports.InvalidPDFException = InvalidPDFException;\n\nvar MissingPDFException = /*#__PURE__*/function (_BaseException4) {\n  _inherits(MissingPDFException, _BaseException4);\n\n  var _super4 = _createSuper(MissingPDFException);\n\n  function MissingPDFException(msg) {\n    _classCallCheck(this, MissingPDFException);\n\n    return _super4.call(this, msg, \"MissingPDFException\");\n  }\n\n  return MissingPDFException;\n}(BaseException);\n\nexports.MissingPDFException = MissingPDFException;\n\nvar UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) {\n  _inherits(UnexpectedResponseException, _BaseException5);\n\n  var _super5 = _createSuper(UnexpectedResponseException);\n\n  function UnexpectedResponseException(msg, status) {\n    var _this3;\n\n    _classCallCheck(this, UnexpectedResponseException);\n\n    _this3 = _super5.call(this, msg, \"UnexpectedResponseException\");\n    _this3.status = status;\n    return _this3;\n  }\n\n  return UnexpectedResponseException;\n}(BaseException);\n\nexports.UnexpectedResponseException = UnexpectedResponseException;\n\nvar FormatError = /*#__PURE__*/function (_BaseException6) {\n  _inherits(FormatError, _BaseException6);\n\n  var _super6 = _createSuper(FormatError);\n\n  function FormatError(msg) {\n    _classCallCheck(this, FormatError);\n\n    return _super6.call(this, msg, \"FormatError\");\n  }\n\n  return FormatError;\n}(BaseException);\n\nexports.FormatError = FormatError;\n\nvar AbortException = /*#__PURE__*/function (_BaseException7) {\n  _inherits(AbortException, _BaseException7);\n\n  var _super7 = _createSuper(AbortException);\n\n  function AbortException(msg) {\n    _classCallCheck(this, AbortException);\n\n    return _super7.call(this, msg, \"AbortException\");\n  }\n\n  return AbortException;\n}(BaseException);\n\nexports.AbortException = AbortException;\nvar NullCharactersRegExp = /\\x00+/g;\nvar InvisibleCharactersRegExp = /[\\x01-\\x1F]/g;\n\nfunction removeNullCharacters(str) {\n  var replaceInvisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  if (typeof str !== \"string\") {\n    warn(\"The argument for removeNullCharacters must be a string.\");\n    return str;\n  }\n\n  if (replaceInvisible) {\n    str = str.replace(InvisibleCharactersRegExp, \" \");\n  }\n\n  return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n  assert(bytes !== null && _typeof(bytes) === \"object\" && bytes.length !== undefined, \"Invalid argument for bytesToString\");\n  var length = bytes.length;\n  var MAX_ARGUMENT_COUNT = 8192;\n\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n\n  var strBuf = [];\n\n  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    var chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n\n  return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n  assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\n  var length = str.length;\n  var bytes = new Uint8Array(length);\n\n  for (var i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n\n  return bytes;\n}\n\nfunction arrayByteLength(arr) {\n  if (arr.length !== undefined) {\n    return arr.length;\n  }\n\n  assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n  return arr.byteLength;\n}\n\nfunction arraysToBytes(arr) {\n  var length = arr.length;\n\n  if (length === 1 && arr[0] instanceof Uint8Array) {\n    return arr[0];\n  }\n\n  var resultLength = 0;\n\n  for (var i = 0; i < length; i++) {\n    resultLength += arrayByteLength(arr[i]);\n  }\n\n  var pos = 0;\n  var data = new Uint8Array(resultLength);\n\n  for (var _i = 0; _i < length; _i++) {\n    var item = arr[_i];\n\n    if (!(item instanceof Uint8Array)) {\n      if (typeof item === \"string\") {\n        item = stringToBytes(item);\n      } else {\n        item = new Uint8Array(item);\n      }\n    }\n\n    var itemLength = item.byteLength;\n    data.set(item, pos);\n    pos += itemLength;\n  }\n\n  return data;\n}\n\nfunction string32(value) {\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\n}\n\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\n\nfunction objectFromMap(map) {\n  var obj = Object.create(null);\n\n  var _iterator = _createForOfIteratorHelper(map),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var _step$value = _slicedToArray(_step.value, 2),\n          key = _step$value[0],\n          value = _step$value[1];\n\n      obj[key] = value;\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return obj;\n}\n\nfunction isLittleEndian() {\n  var buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  var view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\n\nvar IsLittleEndianCached = {\n  get value() {\n    return shadow(this, \"value\", isLittleEndian());\n  }\n\n};\nexports.IsLittleEndianCached = IsLittleEndianCached;\n\nfunction isEvalSupported() {\n  try {\n    new Function(\"\");\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nvar IsEvalSupportedCached = {\n  get value() {\n    return shadow(this, \"value\", isEvalSupported());\n  }\n\n};\nexports.IsEvalSupportedCached = IsEvalSupportedCached;\n\nvar hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) {\n  return n.toString(16).padStart(2, \"0\");\n});\n\nvar Util = /*#__PURE__*/function () {\n  function Util() {\n    _classCallCheck(this, Util);\n  }\n\n  _createClass(Util, null, [{\n    key: \"makeHexColor\",\n    value: function makeHexColor(r, g, b) {\n      return \"#\".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]);\n    }\n  }, {\n    key: \"transform\",\n    value: function transform(m1, m2) {\n      return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\n    }\n  }, {\n    key: \"applyTransform\",\n    value: function applyTransform(p, m) {\n      var xt = p[0] * m[0] + p[1] * m[2] + m[4];\n      var yt = p[0] * m[1] + p[1] * m[3] + m[5];\n      return [xt, yt];\n    }\n  }, {\n    key: \"applyInverseTransform\",\n    value: function applyInverseTransform(p, m) {\n      var d = m[0] * m[3] - m[1] * m[2];\n      var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n      var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n      return [xt, yt];\n    }\n  }, {\n    key: \"getAxialAlignedBoundingBox\",\n    value: function getAxialAlignedBoundingBox(r, m) {\n      var p1 = Util.applyTransform(r, m);\n      var p2 = Util.applyTransform(r.slice(2, 4), m);\n      var p3 = Util.applyTransform([r[0], r[3]], m);\n      var p4 = Util.applyTransform([r[2], r[1]], m);\n      return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];\n    }\n  }, {\n    key: \"inverseTransform\",\n    value: function inverseTransform(m) {\n      var d = m[0] * m[3] - m[1] * m[2];\n      return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n    }\n  }, {\n    key: \"apply3dTransform\",\n    value: function apply3dTransform(m, v) {\n      return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];\n    }\n  }, {\n    key: \"singularValueDecompose2dScale\",\n    value: function singularValueDecompose2dScale(m) {\n      var transpose = [m[0], m[2], m[1], m[3]];\n      var a = m[0] * transpose[0] + m[1] * transpose[2];\n      var b = m[0] * transpose[1] + m[1] * transpose[3];\n      var c = m[2] * transpose[0] + m[3] * transpose[2];\n      var d = m[2] * transpose[1] + m[3] * transpose[3];\n      var first = (a + d) / 2;\n      var second = Math.sqrt(Math.pow(a + d, 2) - 4 * (a * d - c * b)) / 2;\n      var sx = first + second || 1;\n      var sy = first - second || 1;\n      return [Math.sqrt(sx), Math.sqrt(sy)];\n    }\n  }, {\n    key: \"normalizeRect\",\n    value: function normalizeRect(rect) {\n      var r = rect.slice(0);\n\n      if (rect[0] > rect[2]) {\n        r[0] = rect[2];\n        r[2] = rect[0];\n      }\n\n      if (rect[1] > rect[3]) {\n        r[1] = rect[3];\n        r[3] = rect[1];\n      }\n\n      return r;\n    }\n  }, {\n    key: \"intersect\",\n    value: function intersect(rect1, rect2) {\n      function compare(a, b) {\n        return a - b;\n      }\n\n      var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n      var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n      var result = [];\n      rect1 = Util.normalizeRect(rect1);\n      rect2 = Util.normalizeRect(rect2);\n\n      if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\n        result[0] = orderedX[1];\n        result[2] = orderedX[2];\n      } else {\n        return null;\n      }\n\n      if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\n        result[1] = orderedY[1];\n        result[3] = orderedY[2];\n      } else {\n        return null;\n      }\n\n      return result;\n    }\n  }, {\n    key: \"bezierBoundingBox\",\n    value: function bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {\n      var tvalues = [],\n          bounds = [[], []];\n      var a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n      for (var i = 0; i < 2; ++i) {\n        if (i === 0) {\n          b = 6 * x0 - 12 * x1 + 6 * x2;\n          a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n          c = 3 * x1 - 3 * x0;\n        } else {\n          b = 6 * y0 - 12 * y1 + 6 * y2;\n          a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n          c = 3 * y1 - 3 * y0;\n        }\n\n        if (Math.abs(a) < 1e-12) {\n          if (Math.abs(b) < 1e-12) {\n            continue;\n          }\n\n          t = -c / b;\n\n          if (0 < t && t < 1) {\n            tvalues.push(t);\n          }\n\n          continue;\n        }\n\n        b2ac = b * b - 4 * c * a;\n        sqrtb2ac = Math.sqrt(b2ac);\n\n        if (b2ac < 0) {\n          continue;\n        }\n\n        t1 = (-b + sqrtb2ac) / (2 * a);\n\n        if (0 < t1 && t1 < 1) {\n          tvalues.push(t1);\n        }\n\n        t2 = (-b - sqrtb2ac) / (2 * a);\n\n        if (0 < t2 && t2 < 1) {\n          tvalues.push(t2);\n        }\n      }\n\n      var j = tvalues.length,\n          mt;\n      var jlen = j;\n\n      while (j--) {\n        t = tvalues[j];\n        mt = 1 - t;\n        bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n        bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n      }\n\n      bounds[0][jlen] = x0;\n      bounds[1][jlen] = y0;\n      bounds[0][jlen + 1] = x3;\n      bounds[1][jlen + 1] = y3;\n      bounds[0].length = bounds[1].length = jlen + 2;\n      return [Math.min.apply(Math, _toConsumableArray(bounds[0])), Math.min.apply(Math, _toConsumableArray(bounds[1])), Math.max.apply(Math, _toConsumableArray(bounds[0])), Math.max.apply(Math, _toConsumableArray(bounds[1]))];\n    }\n  }]);\n\n  return Util;\n}();\n\nexports.Util = Util;\nvar PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];\n\nfunction stringToPDFString(str) {\n  var length = str.length,\n      strBuf = [];\n\n  if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n    for (var i = 2; i < length; i += 2) {\n      strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\n    }\n  } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n    for (var _i2 = 2; _i2 < length; _i2 += 2) {\n      strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2)));\n    }\n  } else {\n    for (var _i3 = 0; _i3 < length; ++_i3) {\n      var code = PDFStringTranslateTable[str.charCodeAt(_i3)];\n      strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3));\n    }\n  }\n\n  return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n  return str.replace(/([()\\\\\\n\\r])/g, function (match) {\n    if (match === \"\\n\") {\n      return \"\\\\n\";\n    } else if (match === \"\\r\") {\n      return \"\\\\r\";\n    }\n\n    return \"\\\\\".concat(match);\n  });\n}\n\nfunction isAscii(str) {\n  return /^[\\x00-\\x7F]*$/.test(str);\n}\n\nfunction stringToUTF16BEString(str) {\n  var buf = [\"\\xFE\\xFF\"];\n\n  for (var i = 0, ii = str.length; i < ii; i++) {\n    var _char = str.charCodeAt(i);\n\n    buf.push(String.fromCharCode(_char >> 8 & 0xff), String.fromCharCode(_char & 0xff));\n  }\n\n  return buf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\n\nfunction isBool(v) {\n  return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n  return typeof v === \"number\";\n}\n\nfunction isString(v) {\n  return typeof v === \"string\";\n}\n\nfunction isArrayBuffer(v) {\n  return _typeof(v) === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n\n  for (var i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction getModificationDate() {\n  var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n  var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, \"0\"), date.getUTCDate().toString().padStart(2, \"0\"), date.getUTCHours().toString().padStart(2, \"0\"), date.getUTCMinutes().toString().padStart(2, \"0\"), date.getUTCSeconds().toString().padStart(2, \"0\")];\n  return buffer.join(\"\");\n}\n\nfunction createPromiseCapability() {\n  var capability = Object.create(null);\n  var isSettled = false;\n  Object.defineProperty(capability, \"settled\", {\n    get: function get() {\n      return isSettled;\n    }\n  });\n  capability.promise = new Promise(function (resolve, reject) {\n    capability.resolve = function (data) {\n      isSettled = true;\n      resolve(data);\n    };\n\n    capability.reject = function (reason) {\n      isSettled = true;\n      reject(reason);\n    };\n  });\n  return capability;\n}\n\nfunction createObjectURL(data) {\n  var contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n  var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  if (URL.createObjectURL && typeof Blob !== \"undefined\" && !forceDataSchema) {\n    return URL.createObjectURL(new Blob([data], {\n      type: contentType\n    }));\n  }\n\n  var digits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  var buffer = \"data:\".concat(contentType, \";base64,\");\n\n  for (var i = 0, ii = data.length; i < ii; i += 3) {\n    var b1 = data[i] & 0xff;\n    var b2 = data[i + 1] & 0xff;\n    var b3 = data[i + 2] & 0xff;\n    var d1 = b1 >> 2,\n        d2 = (b1 & 3) << 4 | b2 >> 4;\n    var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;\n    var d4 = i + 2 < ii ? b3 & 0x3f : 64;\n    buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n  }\n\n  return buffer;\n}\n\n/***/ }),\n/* 5 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nvar _is_node = __w_pdfjs_require__(6);\n\nif (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked) {\n  if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\n    globalThis = __w_pdfjs_require__(7);\n  }\n\n  globalThis._pdfjsCompatibilityChecked = true;\n\n  (function checkNodeBtoa() {\n    if (globalThis.btoa || !_is_node.isNodeJS) {\n      return;\n    }\n\n    globalThis.btoa = function (chars) {\n      return Buffer.from(chars, \"binary\").toString(\"base64\");\n    };\n  })();\n\n  (function checkNodeAtob() {\n    if (globalThis.atob || !_is_node.isNodeJS) {\n      return;\n    }\n\n    globalThis.atob = function (input) {\n      return Buffer.from(input, \"base64\").toString(\"binary\");\n    };\n  })();\n\n  (function checkDOMMatrix() {\n    if (globalThis.DOMMatrix || !_is_node.isNodeJS) {\n      return;\n    }\n\n    globalThis.DOMMatrix = __w_pdfjs_require__(69);\n  })();\n\n  (function checkObjectFromEntries() {\n    if (Object.fromEntries) {\n      return;\n    }\n\n    __w_pdfjs_require__(70);\n  })();\n\n  (function checkPromise() {\n    if (globalThis.Promise.allSettled) {\n      return;\n    }\n\n    globalThis.Promise = __w_pdfjs_require__(97);\n  })();\n\n  (function checkReadableStream() {\n    if (globalThis.ReadableStream || !_is_node.isNodeJS) {\n      return;\n    }\n\n    globalThis.ReadableStream = (__w_pdfjs_require__(134).ReadableStream);\n  })();\n}\n\n/***/ }),\n/* 6 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.isNodeJS = void 0;\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar isNodeJS = (typeof process === \"undefined\" ? \"undefined\" : _typeof(process)) === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\nexports.isNodeJS = isNodeJS;\n\n/***/ }),\n/* 7 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n__w_pdfjs_require__(8);\nmodule.exports = __w_pdfjs_require__(10);\n\n/***/ }),\n/* 8 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar $ = __w_pdfjs_require__(9);\nvar global = __w_pdfjs_require__(10);\n$({ global: true }, { globalThis: global });\n\n/***/ }),\n/* 9 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar getOwnPropertyDescriptor = (__w_pdfjs_require__(11).f);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nvar redefine = __w_pdfjs_require__(50);\nvar setGlobal = __w_pdfjs_require__(41);\nvar copyConstructorProperties = __w_pdfjs_require__(57);\nvar isForced = __w_pdfjs_require__(68);\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n  target = global;\n } else if (STATIC) {\n  target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n  target = (global[TARGET] || {}).prototype;\n }\n if (target)\n  for (key in source) {\n   sourceProperty = source[key];\n   if (options.noTargetGet) {\n    descriptor = getOwnPropertyDescriptor(target, key);\n    targetProperty = descriptor && descriptor.value;\n   } else\n    targetProperty = target[key];\n   FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n   if (!FORCED && targetProperty !== undefined) {\n    if (typeof sourceProperty == typeof targetProperty)\n     continue;\n    copyConstructorProperties(sourceProperty, targetProperty);\n   }\n   if (options.sham || targetProperty && targetProperty.sham) {\n    createNonEnumerableProperty(sourceProperty, 'sham', true);\n   }\n   redefine(target, key, sourceProperty, options);\n  }\n};\n\n/***/ }),\n/* 10 */\n/***/ ((module) => {\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\nmodule.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || (function () {\n return this;\n}()) || Function('return this')();\n\n/***/ }),\n/* 11 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar call = __w_pdfjs_require__(14);\nvar propertyIsEnumerableModule = __w_pdfjs_require__(15);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nvar toIndexedObject = __w_pdfjs_require__(17);\nvar toPropertyKey = __w_pdfjs_require__(22);\nvar hasOwn = __w_pdfjs_require__(42);\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(45);\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE)\n  try {\n   return $getOwnPropertyDescriptor(O, P);\n  } catch (error) {\n  }\n if (hasOwn(O, P))\n  return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n/***/ }),\n/* 12 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar fails = __w_pdfjs_require__(13);\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, {\n  get: function () {\n   return 7;\n  }\n })[1] != 7;\n});\n\n/***/ }),\n/* 13 */\n/***/ ((module) => {\n\nmodule.exports = function (exec) {\n try {\n  return !!exec();\n } catch (error) {\n  return true;\n }\n};\n\n/***/ }),\n/* 14 */\n/***/ ((module) => {\n\nvar call = Function.prototype.call;\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n\n/***/ }),\n/* 15 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\"use strict\";\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n/***/ }),\n/* 16 */\n/***/ ((module) => {\n\nmodule.exports = function (bitmap, value) {\n return {\n  enumerable: !(bitmap & 1),\n  configurable: !(bitmap & 2),\n  writable: !(bitmap & 4),\n  value: value\n };\n};\n\n/***/ }),\n/* 17 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar IndexedObject = __w_pdfjs_require__(18);\nvar requireObjectCoercible = __w_pdfjs_require__(21);\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n/***/ }),\n/* 18 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar uncurryThis = __w_pdfjs_require__(19);\nvar fails = __w_pdfjs_require__(13);\nvar classof = __w_pdfjs_require__(20);\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\nmodule.exports = fails(function () {\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n\n/***/ }),\n/* 19 */\n/***/ ((module) => {\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n  return call.apply(fn, arguments);\n };\n};\n\n/***/ }),\n/* 20 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n\n/***/ }),\n/* 21 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar TypeError = global.TypeError;\nmodule.exports = function (it) {\n if (it == undefined)\n  throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n/***/ }),\n/* 22 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toPrimitive = __w_pdfjs_require__(23);\nvar isSymbol = __w_pdfjs_require__(26);\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n\n/***/ }),\n/* 23 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar call = __w_pdfjs_require__(14);\nvar isObject = __w_pdfjs_require__(24);\nvar isSymbol = __w_pdfjs_require__(26);\nvar getMethod = __w_pdfjs_require__(33);\nvar ordinaryToPrimitive = __w_pdfjs_require__(36);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input))\n  return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n  if (pref === undefined)\n   pref = 'default';\n  result = call(exoticToPrim, input, pref);\n  if (!isObject(result) || isSymbol(result))\n   return result;\n  throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined)\n  pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n\n/***/ }),\n/* 24 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar isCallable = __w_pdfjs_require__(25);\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n/***/ }),\n/* 25 */\n/***/ ((module) => {\n\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n\n/***/ }),\n/* 26 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar isCallable = __w_pdfjs_require__(25);\nvar isPrototypeOf = __w_pdfjs_require__(28);\nvar USE_SYMBOL_AS_UID = __w_pdfjs_require__(29);\nvar Object = global.Object;\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n\n/***/ }),\n/* 27 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isCallable = __w_pdfjs_require__(25);\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n/***/ }),\n/* 28 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n/***/ }),\n/* 29 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar NATIVE_SYMBOL = __w_pdfjs_require__(30);\nmodule.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol';\n\n/***/ }),\n/* 30 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar V8_VERSION = __w_pdfjs_require__(31);\nvar fails = __w_pdfjs_require__(13);\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n return !String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n/***/ }),\n/* 31 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar userAgent = __w_pdfjs_require__(32);\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\nif (v8) {\n match = v8.split('.');\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n  match = userAgent.match(/Chrome\\/(\\d+)/);\n  if (match)\n   version = +match[1];\n }\n}\nmodule.exports = version;\n\n/***/ }),\n/* 32 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar getBuiltIn = __w_pdfjs_require__(27);\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n/***/ }),\n/* 33 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar aCallable = __w_pdfjs_require__(34);\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n\n/***/ }),\n/* 34 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isCallable = __w_pdfjs_require__(25);\nvar tryToString = __w_pdfjs_require__(35);\nvar TypeError = global.TypeError;\nmodule.exports = function (argument) {\n if (isCallable(argument))\n  return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n\n/***/ }),\n/* 35 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar String = global.String;\nmodule.exports = function (argument) {\n try {\n  return String(argument);\n } catch (error) {\n  return 'Object';\n }\n};\n\n/***/ }),\n/* 36 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar call = __w_pdfjs_require__(14);\nvar isCallable = __w_pdfjs_require__(25);\nvar isObject = __w_pdfjs_require__(24);\nvar TypeError = global.TypeError;\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))\n  return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input)))\n  return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input)))\n  return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n/***/ }),\n/* 37 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar shared = __w_pdfjs_require__(38);\nvar hasOwn = __w_pdfjs_require__(42);\nvar uid = __w_pdfjs_require__(44);\nvar NATIVE_SYMBOL = __w_pdfjs_require__(30);\nvar USE_SYMBOL_AS_UID = __w_pdfjs_require__(29);\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n  var description = 'Symbol.' + name;\n  if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n   WellKnownSymbolsStore[name] = Symbol[name];\n  } else if (USE_SYMBOL_AS_UID && symbolFor) {\n   WellKnownSymbolsStore[name] = symbolFor(description);\n  } else {\n   WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n  }\n }\n return WellKnownSymbolsStore[name];\n};\n\n/***/ }),\n/* 38 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar IS_PURE = __w_pdfjs_require__(39);\nvar store = __w_pdfjs_require__(40);\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n/***/ }),\n/* 39 */\n/***/ ((module) => {\n\nmodule.exports = false;\n\n/***/ }),\n/* 40 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar setGlobal = __w_pdfjs_require__(41);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\nmodule.exports = store;\n\n/***/ }),\n/* 41 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar defineProperty = Object.defineProperty;\nmodule.exports = function (key, value) {\n try {\n  defineProperty(global, key, {\n   value: value,\n   configurable: true,\n   writable: true\n  });\n } catch (error) {\n  global[key] = value;\n }\n return value;\n};\n\n/***/ }),\n/* 42 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar toObject = __w_pdfjs_require__(43);\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n\n/***/ }),\n/* 43 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar requireObjectCoercible = __w_pdfjs_require__(21);\nvar Object = global.Object;\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n/***/ }),\n/* 44 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n/***/ }),\n/* 45 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar fails = __w_pdfjs_require__(13);\nvar createElement = __w_pdfjs_require__(46);\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n  get: function () {\n   return 7;\n  }\n }).a != 7;\n});\n\n/***/ }),\n/* 46 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isObject = __w_pdfjs_require__(24);\nvar document = global.document;\nvar EXISTS = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n/***/ }),\n/* 47 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar definePropertyModule = __w_pdfjs_require__(48);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n/***/ }),\n/* 48 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(45);\nvar anObject = __w_pdfjs_require__(49);\nvar toPropertyKey = __w_pdfjs_require__(22);\nvar TypeError = global.TypeError;\nvar $defineProperty = Object.defineProperty;\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE)\n  try {\n   return $defineProperty(O, P, Attributes);\n  } catch (error) {\n  }\n if ('get' in Attributes || 'set' in Attributes)\n  throw TypeError('Accessors not supported');\n if ('value' in Attributes)\n  O[P] = Attributes.value;\n return O;\n};\n\n/***/ }),\n/* 49 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isObject = __w_pdfjs_require__(24);\nvar String = global.String;\nvar TypeError = global.TypeError;\nmodule.exports = function (argument) {\n if (isObject(argument))\n  return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n\n/***/ }),\n/* 50 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isCallable = __w_pdfjs_require__(25);\nvar hasOwn = __w_pdfjs_require__(42);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nvar setGlobal = __w_pdfjs_require__(41);\nvar inspectSource = __w_pdfjs_require__(51);\nvar InternalStateModule = __w_pdfjs_require__(52);\nvar CONFIGURABLE_FUNCTION_NAME = (__w_pdfjs_require__(56).CONFIGURABLE);\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n  if (String(name).slice(0, 7) === 'Symbol(') {\n   name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n  }\n  if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {\n   createNonEnumerableProperty(value, 'name', name);\n  }\n  state = enforceInternalState(value);\n  if (!state.source) {\n   state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n  }\n }\n if (O === global) {\n  if (simple)\n   O[key] = value;\n  else\n   setGlobal(key, value);\n  return;\n } else if (!unsafe) {\n  delete O[key];\n } else if (!noTargetGet && O[key]) {\n  simple = true;\n }\n if (simple)\n  O[key] = value;\n else\n  createNonEnumerableProperty(O, key, value);\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n\n/***/ }),\n/* 51 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar isCallable = __w_pdfjs_require__(25);\nvar store = __w_pdfjs_require__(40);\nvar functionToString = uncurryThis(Function.toString);\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n  return functionToString(it);\n };\n}\nmodule.exports = store.inspectSource;\n\n/***/ }),\n/* 52 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar NATIVE_WEAK_MAP = __w_pdfjs_require__(53);\nvar global = __w_pdfjs_require__(10);\nvar uncurryThis = __w_pdfjs_require__(19);\nvar isObject = __w_pdfjs_require__(24);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nvar hasOwn = __w_pdfjs_require__(42);\nvar shared = __w_pdfjs_require__(40);\nvar sharedKey = __w_pdfjs_require__(54);\nvar hiddenKeys = __w_pdfjs_require__(55);\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\nvar getterFor = function (TYPE) {\n return function (it) {\n  var state;\n  if (!isObject(it) || (state = get(it)).type !== TYPE) {\n   throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n  }\n  return state;\n };\n};\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n  if (wmhas(store, it))\n   throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n  metadata.facade = it;\n  wmset(store, it, metadata);\n  return metadata;\n };\n get = function (it) {\n  return wmget(store, it) || {};\n };\n has = function (it) {\n  return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n  if (hasOwn(it, STATE))\n   throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n  metadata.facade = it;\n  createNonEnumerableProperty(it, STATE, metadata);\n  return metadata;\n };\n get = function (it) {\n  return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n  return hasOwn(it, STATE);\n };\n}\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n/***/ }),\n/* 53 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isCallable = __w_pdfjs_require__(25);\nvar inspectSource = __w_pdfjs_require__(51);\nvar WeakMap = global.WeakMap;\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n/***/ }),\n/* 54 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar shared = __w_pdfjs_require__(38);\nvar uid = __w_pdfjs_require__(44);\nvar keys = shared('keys');\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n/***/ }),\n/* 55 */\n/***/ ((module) => {\n\nmodule.exports = {};\n\n/***/ }),\n/* 56 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar hasOwn = __w_pdfjs_require__(42);\nvar FunctionPrototype = Function.prototype;\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\nvar PROPER = EXISTS && function something() {\n}.name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable);\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n\n/***/ }),\n/* 57 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar hasOwn = __w_pdfjs_require__(42);\nvar ownKeys = __w_pdfjs_require__(58);\nvar getOwnPropertyDescriptorModule = __w_pdfjs_require__(11);\nvar definePropertyModule = __w_pdfjs_require__(48);\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n  var key = keys[i];\n  if (!hasOwn(target, key))\n   defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\n/***/ }),\n/* 58 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar uncurryThis = __w_pdfjs_require__(19);\nvar getOwnPropertyNamesModule = __w_pdfjs_require__(59);\nvar getOwnPropertySymbolsModule = __w_pdfjs_require__(67);\nvar anObject = __w_pdfjs_require__(49);\nvar concat = uncurryThis([].concat);\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n/***/ }),\n/* 59 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\nvar internalObjectKeys = __w_pdfjs_require__(60);\nvar enumBugKeys = __w_pdfjs_require__(66);\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n/***/ }),\n/* 60 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar hasOwn = __w_pdfjs_require__(42);\nvar toIndexedObject = __w_pdfjs_require__(17);\nvar indexOf = (__w_pdfjs_require__(61).indexOf);\nvar hiddenKeys = __w_pdfjs_require__(55);\nvar push = uncurryThis([].push);\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O)\n  !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n while (names.length > i)\n  if (hasOwn(O, key = names[i++])) {\n   ~indexOf(result, key) || push(result, key);\n  }\n return result;\n};\n\n/***/ }),\n/* 61 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toIndexedObject = __w_pdfjs_require__(17);\nvar toAbsoluteIndex = __w_pdfjs_require__(62);\nvar lengthOfArrayLike = __w_pdfjs_require__(64);\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n  var O = toIndexedObject($this);\n  var length = lengthOfArrayLike(O);\n  var index = toAbsoluteIndex(fromIndex, length);\n  var value;\n  if (IS_INCLUDES && el != el)\n   while (length > index) {\n    value = O[index++];\n    if (value != value)\n     return true;\n   }\n  else\n   for (; length > index; index++) {\n    if ((IS_INCLUDES || index in O) && O[index] === el)\n     return IS_INCLUDES || index || 0;\n   }\n  return !IS_INCLUDES && -1;\n };\n};\nmodule.exports = {\n includes: createMethod(true),\n indexOf: createMethod(false)\n};\n\n/***/ }),\n/* 62 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toIntegerOrInfinity = __w_pdfjs_require__(63);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n/***/ }),\n/* 63 */\n/***/ ((module) => {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (argument) {\n var number = +argument;\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n\n/***/ }),\n/* 64 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toLength = __w_pdfjs_require__(65);\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n\n/***/ }),\n/* 65 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toIntegerOrInfinity = __w_pdfjs_require__(63);\nvar min = Math.min;\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0;\n};\n\n/***/ }),\n/* 66 */\n/***/ ((module) => {\n\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n/***/ }),\n/* 67 */\n/***/ ((__unused_webpack_module, exports) => {\n\nexports.f = Object.getOwnPropertySymbols;\n\n/***/ }),\n/* 68 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar fails = __w_pdfjs_require__(13);\nvar isCallable = __w_pdfjs_require__(25);\nvar replacement = /#|\\.prototype\\./;\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;\n};\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\nmodule.exports = isForced;\n\n/***/ }),\n/* 69 */\n/***/ ((module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n  ( false ? 0 : _typeof(exports)) === 'object' && \"object\" !== 'undefined' ? module.exports = factory() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __w_pdfjs_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : (0);\n})(void 0, function () {\n  'use strict';\n\n  function fromArray(array) {\n    var m = new CSSMatrix();\n    var a = Array.from(array);\n\n    if (!a.every(function (n) {\n      return !Number.isNaN(n);\n    })) {\n      throw TypeError(\"CSSMatrix: \\\"\" + array + \"\\\" must only have numbers.\");\n    }\n\n    if (a.length === 16) {\n      var m11 = a[0];\n      var m12 = a[1];\n      var m13 = a[2];\n      var m14 = a[3];\n      var m21 = a[4];\n      var m22 = a[5];\n      var m23 = a[6];\n      var m24 = a[7];\n      var m31 = a[8];\n      var m32 = a[9];\n      var m33 = a[10];\n      var m34 = a[11];\n      var m41 = a[12];\n      var m42 = a[13];\n      var m43 = a[14];\n      var m44 = a[15];\n      m.m11 = m11;\n      m.a = m11;\n      m.m21 = m21;\n      m.c = m21;\n      m.m31 = m31;\n      m.m41 = m41;\n      m.e = m41;\n      m.m12 = m12;\n      m.b = m12;\n      m.m22 = m22;\n      m.d = m22;\n      m.m32 = m32;\n      m.m42 = m42;\n      m.f = m42;\n      m.m13 = m13;\n      m.m23 = m23;\n      m.m33 = m33;\n      m.m43 = m43;\n      m.m14 = m14;\n      m.m24 = m24;\n      m.m34 = m34;\n      m.m44 = m44;\n    } else if (a.length === 6) {\n      var M11 = a[0];\n      var M12 = a[1];\n      var M21 = a[2];\n      var M22 = a[3];\n      var M41 = a[4];\n      var M42 = a[5];\n      m.m11 = M11;\n      m.a = M11;\n      m.m12 = M12;\n      m.b = M12;\n      m.m21 = M21;\n      m.c = M21;\n      m.m22 = M22;\n      m.d = M22;\n      m.m41 = M41;\n      m.e = M41;\n      m.m42 = M42;\n      m.f = M42;\n    } else {\n      throw new TypeError('CSSMatrix: expecting an Array of 6/16 values.');\n    }\n\n    return m;\n  }\n\n  function fromMatrix(m) {\n    var keys = Object.keys(new CSSMatrix());\n\n    if (_typeof(m) === 'object' && keys.every(function (k) {\n      return k in m;\n    })) {\n      return fromArray([m.m11, m.m12, m.m13, m.m14, m.m21, m.m22, m.m23, m.m24, m.m31, m.m32, m.m33, m.m34, m.m41, m.m42, m.m43, m.m44]);\n    }\n\n    throw TypeError(\"CSSMatrix: \\\"\" + m + \"\\\" is not a DOMMatrix / CSSMatrix / JSON compatible object.\");\n  }\n\n  function fromString(source) {\n    if (typeof source !== 'string') {\n      throw TypeError(\"CSSMatrix: \\\"\" + source + \"\\\" is not a string.\");\n    }\n\n    var str = String(source).replace(/\\s/g, '');\n    var m = new CSSMatrix();\n    var invalidStringError = \"CSSMatrix: invalid transform string \\\"\" + source + \"\\\"\";\n    str.split(')').filter(function (f) {\n      return f;\n    }).forEach(function (tf) {\n      var ref = tf.split('(');\n      var prop = ref[0];\n      var value = ref[1];\n\n      if (!value) {\n        throw TypeError(invalidStringError);\n      }\n\n      var components = value.split(',').map(function (n) {\n        return n.includes('rad') ? parseFloat(n) * (180 / Math.PI) : parseFloat(n);\n      });\n      var x = components[0];\n      var y = components[1];\n      var z = components[2];\n      var a = components[3];\n      var xyz = [x, y, z];\n      var xyza = [x, y, z, a];\n\n      if (prop === 'perspective' && x && [y, z].every(function (n) {\n        return n === undefined;\n      })) {\n        m.m34 = -1 / x;\n      } else if (prop.includes('matrix') && [6, 16].includes(components.length) && components.every(function (n) {\n        return !Number.isNaN(+n);\n      })) {\n        var values = components.map(function (n) {\n          return Math.abs(n) < 1e-6 ? 0 : n;\n        });\n        m = m.multiply(fromArray(values));\n      } else if (prop === 'translate3d' && xyz.every(function (n) {\n        return !Number.isNaN(+n);\n      })) {\n        m = m.translate(x, y, z);\n      } else if (prop === 'translate' && x && z === undefined) {\n        m = m.translate(x, y || 0, 0);\n      } else if (prop === 'rotate3d' && xyza.every(function (n) {\n        return !Number.isNaN(+n);\n      }) && a) {\n        m = m.rotateAxisAngle(x, y, z, a);\n      } else if (prop === 'rotate' && x && [y, z].every(function (n) {\n        return n === undefined;\n      })) {\n        m = m.rotate(0, 0, x);\n      } else if (prop === 'scale3d' && xyz.every(function (n) {\n        return !Number.isNaN(+n);\n      }) && xyz.some(function (n) {\n        return n !== 1;\n      })) {\n        m = m.scale(x, y, z);\n      } else if (prop === 'scale' && !Number.isNaN(x) && x !== 1 && z === undefined) {\n        var nosy = Number.isNaN(+y);\n        var sy = nosy ? x : y;\n        m = m.scale(x, sy, 1);\n      } else if (prop === 'skew' && x && z === undefined) {\n        m = m.skewX(x);\n        m = y ? m.skewY(y) : m;\n      } else if (/[XYZ]/.test(prop) && x && [y, z].every(function (n) {\n        return n === undefined;\n      }) && ['translate', 'rotate', 'scale', 'skew'].some(function (p) {\n        return prop.includes(p);\n      })) {\n        if (['skewX', 'skewY'].includes(prop)) {\n          m = m[prop](x);\n        } else {\n          var fn = prop.replace(/[XYZ]/, '');\n          var axis = prop.replace(fn, '');\n          var idx = ['X', 'Y', 'Z'].indexOf(axis);\n          var axeValues = [idx === 0 ? x : 0, idx === 1 ? x : 0, idx === 2 ? x : 0];\n          m = m[fn].apply(m, axeValues);\n        }\n      } else {\n        throw TypeError(invalidStringError);\n      }\n    });\n    return m;\n  }\n\n  function Translate(x, y, z) {\n    var m = new CSSMatrix();\n    m.m41 = x;\n    m.e = x;\n    m.m42 = y;\n    m.f = y;\n    m.m43 = z;\n    return m;\n  }\n\n  function Rotate(rx, ry, rz) {\n    var m = new CSSMatrix();\n    var degToRad = Math.PI / 180;\n    var radX = rx * degToRad;\n    var radY = ry * degToRad;\n    var radZ = rz * degToRad;\n    var cosx = Math.cos(radX);\n    var sinx = -Math.sin(radX);\n    var cosy = Math.cos(radY);\n    var siny = -Math.sin(radY);\n    var cosz = Math.cos(radZ);\n    var sinz = -Math.sin(radZ);\n    var m11 = cosy * cosz;\n    var m12 = -cosy * sinz;\n    m.m11 = m11;\n    m.a = m11;\n    m.m12 = m12;\n    m.b = m12;\n    m.m13 = siny;\n    var m21 = sinx * siny * cosz + cosx * sinz;\n    m.m21 = m21;\n    m.c = m21;\n    var m22 = cosx * cosz - sinx * siny * sinz;\n    m.m22 = m22;\n    m.d = m22;\n    m.m23 = -sinx * cosy;\n    m.m31 = sinx * sinz - cosx * siny * cosz;\n    m.m32 = sinx * cosz + cosx * siny * sinz;\n    m.m33 = cosx * cosy;\n    return m;\n  }\n\n  function RotateAxisAngle(x, y, z, alpha) {\n    var m = new CSSMatrix();\n    var angle = alpha * (Math.PI / 360);\n    var sinA = Math.sin(angle);\n    var cosA = Math.cos(angle);\n    var sinA2 = sinA * sinA;\n    var length = Math.sqrt(x * x + y * y + z * z);\n    var X = x;\n    var Y = y;\n    var Z = z;\n\n    if (length === 0) {\n      X = 0;\n      Y = 0;\n      Z = 1;\n    } else {\n      X /= length;\n      Y /= length;\n      Z /= length;\n    }\n\n    var x2 = X * X;\n    var y2 = Y * Y;\n    var z2 = Z * Z;\n    var m11 = 1 - 2 * (y2 + z2) * sinA2;\n    m.m11 = m11;\n    m.a = m11;\n    var m12 = 2 * (X * Y * sinA2 + Z * sinA * cosA);\n    m.m12 = m12;\n    m.b = m12;\n    m.m13 = 2 * (X * Z * sinA2 - Y * sinA * cosA);\n    var m21 = 2 * (Y * X * sinA2 - Z * sinA * cosA);\n    m.m21 = m21;\n    m.c = m21;\n    var m22 = 1 - 2 * (z2 + x2) * sinA2;\n    m.m22 = m22;\n    m.d = m22;\n    m.m23 = 2 * (Y * Z * sinA2 + X * sinA * cosA);\n    m.m31 = 2 * (Z * X * sinA2 + Y * sinA * cosA);\n    m.m32 = 2 * (Z * Y * sinA2 - X * sinA * cosA);\n    m.m33 = 1 - 2 * (x2 + y2) * sinA2;\n    return m;\n  }\n\n  function Scale(x, y, z) {\n    var m = new CSSMatrix();\n    m.m11 = x;\n    m.a = x;\n    m.m22 = y;\n    m.d = y;\n    m.m33 = z;\n    return m;\n  }\n\n  function SkewX(angle) {\n    var m = new CSSMatrix();\n    var radA = angle * Math.PI / 180;\n    var t = Math.tan(radA);\n    m.m21 = t;\n    m.c = t;\n    return m;\n  }\n\n  function SkewY(angle) {\n    var m = new CSSMatrix();\n    var radA = angle * Math.PI / 180;\n    var t = Math.tan(radA);\n    m.m12 = t;\n    m.b = t;\n    return m;\n  }\n\n  function Multiply(m1, m2) {\n    var m11 = m2.m11 * m1.m11 + m2.m12 * m1.m21 + m2.m13 * m1.m31 + m2.m14 * m1.m41;\n    var m12 = m2.m11 * m1.m12 + m2.m12 * m1.m22 + m2.m13 * m1.m32 + m2.m14 * m1.m42;\n    var m13 = m2.m11 * m1.m13 + m2.m12 * m1.m23 + m2.m13 * m1.m33 + m2.m14 * m1.m43;\n    var m14 = m2.m11 * m1.m14 + m2.m12 * m1.m24 + m2.m13 * m1.m34 + m2.m14 * m1.m44;\n    var m21 = m2.m21 * m1.m11 + m2.m22 * m1.m21 + m2.m23 * m1.m31 + m2.m24 * m1.m41;\n    var m22 = m2.m21 * m1.m12 + m2.m22 * m1.m22 + m2.m23 * m1.m32 + m2.m24 * m1.m42;\n    var m23 = m2.m21 * m1.m13 + m2.m22 * m1.m23 + m2.m23 * m1.m33 + m2.m24 * m1.m43;\n    var m24 = m2.m21 * m1.m14 + m2.m22 * m1.m24 + m2.m23 * m1.m34 + m2.m24 * m1.m44;\n    var m31 = m2.m31 * m1.m11 + m2.m32 * m1.m21 + m2.m33 * m1.m31 + m2.m34 * m1.m41;\n    var m32 = m2.m31 * m1.m12 + m2.m32 * m1.m22 + m2.m33 * m1.m32 + m2.m34 * m1.m42;\n    var m33 = m2.m31 * m1.m13 + m2.m32 * m1.m23 + m2.m33 * m1.m33 + m2.m34 * m1.m43;\n    var m34 = m2.m31 * m1.m14 + m2.m32 * m1.m24 + m2.m33 * m1.m34 + m2.m34 * m1.m44;\n    var m41 = m2.m41 * m1.m11 + m2.m42 * m1.m21 + m2.m43 * m1.m31 + m2.m44 * m1.m41;\n    var m42 = m2.m41 * m1.m12 + m2.m42 * m1.m22 + m2.m43 * m1.m32 + m2.m44 * m1.m42;\n    var m43 = m2.m41 * m1.m13 + m2.m42 * m1.m23 + m2.m43 * m1.m33 + m2.m44 * m1.m43;\n    var m44 = m2.m41 * m1.m14 + m2.m42 * m1.m24 + m2.m43 * m1.m34 + m2.m44 * m1.m44;\n    return fromArray([m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44]);\n  }\n\n  var CSSMatrix = function CSSMatrix() {\n    var args = [],\n        len = arguments.length;\n\n    while (len--) {\n      args[len] = arguments[len];\n    }\n\n    var m = this;\n    m.a = 1;\n    m.b = 0;\n    m.c = 0;\n    m.d = 1;\n    m.e = 0;\n    m.f = 0;\n    m.m11 = 1;\n    m.m12 = 0;\n    m.m13 = 0;\n    m.m14 = 0;\n    m.m21 = 0;\n    m.m22 = 1;\n    m.m23 = 0;\n    m.m24 = 0;\n    m.m31 = 0;\n    m.m32 = 0;\n    m.m33 = 1;\n    m.m34 = 0;\n    m.m41 = 0;\n    m.m42 = 0;\n    m.m43 = 0;\n    m.m44 = 1;\n\n    if (args && args.length) {\n      var ARGS = [16, 6].some(function (l) {\n        return l === args.length;\n      }) ? args : args[0];\n      return m.setMatrixValue(ARGS);\n    }\n\n    return m;\n  };\n\n  var prototypeAccessors = {\n    isIdentity: {\n      configurable: true\n    },\n    is2D: {\n      configurable: true\n    }\n  };\n\n  prototypeAccessors.isIdentity.set = function (value) {\n    this.isIdentity = value;\n  };\n\n  prototypeAccessors.isIdentity.get = function () {\n    var m = this;\n    return m.m11 === 1 && m.m12 === 0 && m.m13 === 0 && m.m14 === 0 && m.m21 === 0 && m.m22 === 1 && m.m23 === 0 && m.m24 === 0 && m.m31 === 0 && m.m32 === 0 && m.m33 === 1 && m.m34 === 0 && m.m41 === 0 && m.m42 === 0 && m.m43 === 0 && m.m44 === 1;\n  };\n\n  prototypeAccessors.is2D.get = function () {\n    var m = this;\n    return m.m31 === 0 && m.m32 === 0 && m.m33 === 1 && m.m34 === 0 && m.m43 === 0 && m.m44 === 1;\n  };\n\n  prototypeAccessors.is2D.set = function (value) {\n    this.is2D = value;\n  };\n\n  CSSMatrix.prototype.setMatrixValue = function setMatrixValue(source) {\n    var m = this;\n\n    if ([Array, Float64Array, Float32Array].some(function (a) {\n      return source instanceof a;\n    })) {\n      return fromArray(source);\n    }\n\n    if (typeof source === 'string' && source.length && source !== 'none') {\n      return fromString(source);\n    }\n\n    if (_typeof(source) === 'object') {\n      return fromMatrix(source);\n    }\n\n    return m;\n  };\n\n  CSSMatrix.prototype.toArray = function toArray() {\n    var m = this;\n    var pow = Math.pow(10, 6);\n    var result;\n\n    if (m.is2D) {\n      result = [m.a, m.b, m.c, m.d, m.e, m.f];\n    } else {\n      result = [m.m11, m.m12, m.m13, m.m14, m.m21, m.m22, m.m23, m.m24, m.m31, m.m32, m.m33, m.m34, m.m41, m.m42, m.m43, m.m44];\n    }\n\n    return result.map(function (n) {\n      return Math.abs(n) < 1e-6 ? 0 : (n * pow >> 0) / pow;\n    });\n  };\n\n  CSSMatrix.prototype.toString = function toString() {\n    var m = this;\n    var values = m.toArray();\n    var type = m.is2D ? 'matrix' : 'matrix3d';\n    return type + \"(\" + values + \")\";\n  };\n\n  CSSMatrix.prototype.toJSON = function toJSON() {\n    var m = this;\n    var is2D = m.is2D;\n    var isIdentity = m.isIdentity;\n    return Object.assign({}, m, {\n      is2D: is2D,\n      isIdentity: isIdentity\n    });\n  };\n\n  CSSMatrix.prototype.multiply = function multiply(m2) {\n    return Multiply(this, m2);\n  };\n\n  CSSMatrix.prototype.translate = function translate(x, y, z) {\n    var X = x;\n    var Y = y;\n    var Z = z;\n\n    if (Z === undefined) {\n      Z = 0;\n    }\n\n    if (Y === undefined) {\n      Y = 0;\n    }\n\n    return Multiply(this, Translate(X, Y, Z));\n  };\n\n  CSSMatrix.prototype.scale = function scale(x, y, z) {\n    var X = x;\n    var Y = y;\n    var Z = z;\n\n    if (Y === undefined) {\n      Y = x;\n    }\n\n    if (Z === undefined) {\n      Z = 1;\n    }\n\n    return Multiply(this, Scale(X, Y, Z));\n  };\n\n  CSSMatrix.prototype.rotate = function rotate(rx, ry, rz) {\n    var RX = rx;\n    var RY = ry;\n    var RZ = rz;\n\n    if (RY === undefined) {\n      RY = 0;\n    }\n\n    if (RZ === undefined) {\n      RZ = RX;\n      RX = 0;\n    }\n\n    return Multiply(this, Rotate(RX, RY, RZ));\n  };\n\n  CSSMatrix.prototype.rotateAxisAngle = function rotateAxisAngle(x, y, z, angle) {\n    if ([x, y, z, angle].some(function (n) {\n      return Number.isNaN(n);\n    })) {\n      throw new TypeError('CSSMatrix: expecting 4 values');\n    }\n\n    return Multiply(this, RotateAxisAngle(x, y, z, angle));\n  };\n\n  CSSMatrix.prototype.skewX = function skewX(angle) {\n    return Multiply(this, SkewX(angle));\n  };\n\n  CSSMatrix.prototype.skewY = function skewY(angle) {\n    return Multiply(this, SkewY(angle));\n  };\n\n  CSSMatrix.prototype.transformPoint = function transformPoint(v) {\n    var M = this;\n    var m = Translate(v.x, v.y, v.z);\n    m.m44 = v.w || 1;\n    m = M.multiply(m);\n    return {\n      x: m.m41,\n      y: m.m42,\n      z: m.m43,\n      w: m.m44\n    };\n  };\n\n  CSSMatrix.prototype.transform = function transform(t) {\n    var m = this;\n    var x = m.m11 * t.x + m.m12 * t.y + m.m13 * t.z + m.m14 * t.w;\n    var y = m.m21 * t.x + m.m22 * t.y + m.m23 * t.z + m.m24 * t.w;\n    var z = m.m31 * t.x + m.m32 * t.y + m.m33 * t.z + m.m34 * t.w;\n    var w = m.m41 * t.x + m.m42 * t.y + m.m43 * t.z + m.m44 * t.w;\n    return {\n      x: x / w,\n      y: y / w,\n      z: z / w,\n      w: w\n    };\n  };\n\n  Object.defineProperties(CSSMatrix.prototype, prototypeAccessors);\n  Object.assign(CSSMatrix, {\n    Translate: Translate,\n    Rotate: Rotate,\n    RotateAxisAngle: RotateAxisAngle,\n    Scale: Scale,\n    SkewX: SkewX,\n    SkewY: SkewY,\n    Multiply: Multiply,\n    fromArray: fromArray,\n    fromMatrix: fromMatrix,\n    fromString: fromString\n  });\n  var version = \"0.0.24\";\n  var Version = version;\n  Object.assign(CSSMatrix, {\n    Version: Version\n  });\n  return CSSMatrix;\n});\n\n/***/ }),\n/* 70 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n__w_pdfjs_require__(71);\n__w_pdfjs_require__(86);\nvar path = __w_pdfjs_require__(96);\nmodule.exports = path.Object.fromEntries;\n\n/***/ }),\n/* 71 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar toIndexedObject = __w_pdfjs_require__(17);\nvar addToUnscopables = __w_pdfjs_require__(72);\nvar Iterators = __w_pdfjs_require__(77);\nvar InternalStateModule = __w_pdfjs_require__(52);\nvar defineIterator = __w_pdfjs_require__(78);\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n  type: ARRAY_ITERATOR,\n  target: toIndexedObject(iterated),\n  index: 0,\n  kind: kind\n });\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n  state.target = undefined;\n  return {\n   value: undefined,\n   done: true\n  };\n }\n if (kind == 'keys')\n  return {\n   value: index,\n   done: false\n  };\n if (kind == 'values')\n  return {\n   value: target[index],\n   done: false\n  };\n return {\n  value: [\n   index,\n   target[index]\n  ],\n  done: false\n };\n}, 'values');\nIterators.Arguments = Iterators.Array;\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n/***/ }),\n/* 72 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar create = __w_pdfjs_require__(73);\nvar definePropertyModule = __w_pdfjs_require__(48);\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n  configurable: true,\n  value: create(null)\n });\n}\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n/***/ }),\n/* 73 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar anObject = __w_pdfjs_require__(49);\nvar defineProperties = __w_pdfjs_require__(74);\nvar enumBugKeys = __w_pdfjs_require__(66);\nvar hiddenKeys = __w_pdfjs_require__(55);\nvar html = __w_pdfjs_require__(76);\nvar documentCreateElement = __w_pdfjs_require__(46);\nvar sharedKey = __w_pdfjs_require__(54);\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar EmptyConstructor = function () {\n};\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null;\n return temp;\n};\nvar NullProtoObjectViaIFrame = function () {\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n  activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) {\n }\n NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);\n var length = enumBugKeys.length;\n while (length--)\n  delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\nhiddenKeys[IE_PROTO] = true;\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n  EmptyConstructor[PROTOTYPE] = anObject(O);\n  result = new EmptyConstructor();\n  EmptyConstructor[PROTOTYPE] = null;\n  result[IE_PROTO] = O;\n } else\n  result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n/***/ }),\n/* 74 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar definePropertyModule = __w_pdfjs_require__(48);\nvar anObject = __w_pdfjs_require__(49);\nvar toIndexedObject = __w_pdfjs_require__(17);\nvar objectKeys = __w_pdfjs_require__(75);\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index)\n  definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n\n/***/ }),\n/* 75 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar internalObjectKeys = __w_pdfjs_require__(60);\nvar enumBugKeys = __w_pdfjs_require__(66);\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n/***/ }),\n/* 76 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar getBuiltIn = __w_pdfjs_require__(27);\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n/***/ }),\n/* 77 */\n/***/ ((module) => {\n\nmodule.exports = {};\n\n/***/ }),\n/* 78 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar call = __w_pdfjs_require__(14);\nvar IS_PURE = __w_pdfjs_require__(39);\nvar FunctionName = __w_pdfjs_require__(56);\nvar isCallable = __w_pdfjs_require__(25);\nvar createIteratorConstructor = __w_pdfjs_require__(79);\nvar getPrototypeOf = __w_pdfjs_require__(81);\nvar setPrototypeOf = __w_pdfjs_require__(84);\nvar setToStringTag = __w_pdfjs_require__(83);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nvar redefine = __w_pdfjs_require__(50);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar Iterators = __w_pdfjs_require__(77);\nvar IteratorsCore = __w_pdfjs_require__(80);\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\nvar returnThis = function () {\n return this;\n};\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n var getIterationMethod = function (KIND) {\n  if (KIND === DEFAULT && defaultIterator)\n   return defaultIterator;\n  if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)\n   return IterablePrototype[KIND];\n  switch (KIND) {\n  case KEYS:\n   return function keys() {\n    return new IteratorConstructor(this, KIND);\n   };\n  case VALUES:\n   return function values() {\n    return new IteratorConstructor(this, KIND);\n   };\n  case ENTRIES:\n   return function entries() {\n    return new IteratorConstructor(this, KIND);\n   };\n  }\n  return function () {\n   return new IteratorConstructor(this);\n  };\n };\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n if (anyNativeIterator) {\n  CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n  if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n   if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n    if (setPrototypeOf) {\n     setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n    } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n     redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n    }\n   }\n   setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n   if (IS_PURE)\n    Iterators[TO_STRING_TAG] = returnThis;\n  }\n }\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n  if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n   createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n  } else {\n   INCORRECT_VALUES_NAME = true;\n   defaultIterator = function values() {\n    return call(nativeIterator, this);\n   };\n  }\n }\n if (DEFAULT) {\n  methods = {\n   values: getIterationMethod(VALUES),\n   keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n   entries: getIterationMethod(ENTRIES)\n  };\n  if (FORCED)\n   for (KEY in methods) {\n    if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n     redefine(IterablePrototype, KEY, methods[KEY]);\n    }\n   }\n  else\n   $({\n    target: NAME,\n    proto: true,\n    forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME\n   }, methods);\n }\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n  redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n return methods;\n};\n\n/***/ }),\n/* 79 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar IteratorPrototype = (__w_pdfjs_require__(80).IteratorPrototype);\nvar create = __w_pdfjs_require__(73);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nvar setToStringTag = __w_pdfjs_require__(83);\nvar Iterators = __w_pdfjs_require__(77);\nvar returnThis = function () {\n return this;\n};\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n\n/***/ }),\n/* 80 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar fails = __w_pdfjs_require__(13);\nvar isCallable = __w_pdfjs_require__(25);\nvar create = __w_pdfjs_require__(73);\nvar getPrototypeOf = __w_pdfjs_require__(81);\nvar redefine = __w_pdfjs_require__(50);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar IS_PURE = __w_pdfjs_require__(39);\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\nif ([].keys) {\n arrayIterator = [].keys();\n if (!('next' in arrayIterator))\n  BUGGY_SAFARI_ITERATORS = true;\n else {\n  PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n  if (PrototypeOfArrayIteratorPrototype !== Object.prototype)\n   IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\nif (NEW_ITERATOR_PROTOTYPE)\n IteratorPrototype = {};\nelse if (IS_PURE)\n IteratorPrototype = create(IteratorPrototype);\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n  return this;\n });\n}\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n/***/ }),\n/* 81 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar hasOwn = __w_pdfjs_require__(42);\nvar isCallable = __w_pdfjs_require__(25);\nvar toObject = __w_pdfjs_require__(43);\nvar sharedKey = __w_pdfjs_require__(54);\nvar CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(82);\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO))\n  return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n  return constructor.prototype;\n }\n return object instanceof Object ? ObjectPrototype : null;\n};\n\n/***/ }),\n/* 82 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar fails = __w_pdfjs_require__(13);\nmodule.exports = !fails(function () {\n function F() {\n }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n/***/ }),\n/* 83 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar defineProperty = (__w_pdfjs_require__(48).f);\nvar hasOwn = __w_pdfjs_require__(42);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n  defineProperty(it, TO_STRING_TAG, {\n   configurable: true,\n   value: TAG\n  });\n }\n};\n\n/***/ }),\n/* 84 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar anObject = __w_pdfjs_require__(49);\nvar aPossiblePrototype = __w_pdfjs_require__(85);\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n  setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n  setter(test, []);\n  CORRECT_SETTER = test instanceof Array;\n } catch (error) {\n }\n return function setPrototypeOf(O, proto) {\n  anObject(O);\n  aPossiblePrototype(proto);\n  if (CORRECT_SETTER)\n   setter(O, proto);\n  else\n   O.__proto__ = proto;\n  return O;\n };\n}()) : undefined);\n\n/***/ }),\n/* 85 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isCallable = __w_pdfjs_require__(25);\nvar String = global.String;\nvar TypeError = global.TypeError;\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument))\n  return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n\n/***/ }),\n/* 86 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar $ = __w_pdfjs_require__(9);\nvar iterate = __w_pdfjs_require__(87);\nvar createProperty = __w_pdfjs_require__(95);\n$({\n target: 'Object',\n stat: true\n}, {\n fromEntries: function fromEntries(iterable) {\n  var obj = {};\n  iterate(iterable, function (k, v) {\n   createProperty(obj, k, v);\n  }, { AS_ENTRIES: true });\n  return obj;\n }\n});\n\n/***/ }),\n/* 87 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar bind = __w_pdfjs_require__(88);\nvar call = __w_pdfjs_require__(14);\nvar anObject = __w_pdfjs_require__(49);\nvar tryToString = __w_pdfjs_require__(35);\nvar isArrayIteratorMethod = __w_pdfjs_require__(89);\nvar lengthOfArrayLike = __w_pdfjs_require__(64);\nvar isPrototypeOf = __w_pdfjs_require__(28);\nvar getIterator = __w_pdfjs_require__(90);\nvar getIteratorMethod = __w_pdfjs_require__(91);\nvar iteratorClose = __w_pdfjs_require__(94);\nvar TypeError = global.TypeError;\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\nvar ResultPrototype = Result.prototype;\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n var stop = function (condition) {\n  if (iterator)\n   iteratorClose(iterator, 'normal', condition);\n  return new Result(true, condition);\n };\n var callFn = function (value) {\n  if (AS_ENTRIES) {\n   anObject(value);\n   return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n  }\n  return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n if (IS_ITERATOR) {\n  iterator = iterable;\n } else {\n  iterFn = getIteratorMethod(iterable);\n  if (!iterFn)\n   throw TypeError(tryToString(iterable) + ' is not iterable');\n  if (isArrayIteratorMethod(iterFn)) {\n   for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n    result = callFn(iterable[index]);\n    if (result && isPrototypeOf(ResultPrototype, result))\n     return result;\n   }\n   return new Result(false);\n  }\n  iterator = getIterator(iterable, iterFn);\n }\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n  try {\n   result = callFn(step.value);\n  } catch (error) {\n   iteratorClose(iterator, 'throw', error);\n  }\n  if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result))\n   return result;\n }\n return new Result(false);\n};\n\n/***/ }),\n/* 88 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar aCallable = __w_pdfjs_require__(34);\nvar bind = uncurryThis(uncurryThis.bind);\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function () {\n  return fn.apply(that, arguments);\n };\n};\n\n/***/ }),\n/* 89 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar Iterators = __w_pdfjs_require__(77);\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n/***/ }),\n/* 90 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar call = __w_pdfjs_require__(14);\nvar aCallable = __w_pdfjs_require__(34);\nvar anObject = __w_pdfjs_require__(49);\nvar tryToString = __w_pdfjs_require__(35);\nvar getIteratorMethod = __w_pdfjs_require__(91);\nvar TypeError = global.TypeError;\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod))\n  return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n\n/***/ }),\n/* 91 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar classof = __w_pdfjs_require__(92);\nvar getMethod = __w_pdfjs_require__(33);\nvar Iterators = __w_pdfjs_require__(77);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar ITERATOR = wellKnownSymbol('iterator');\nmodule.exports = function (it) {\n if (it != undefined)\n  return getMethod(it, ITERATOR) || getMethod(it, '@@iterator') || Iterators[classof(it)];\n};\n\n/***/ }),\n/* 92 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(93);\nvar isCallable = __w_pdfjs_require__(25);\nvar classofRaw = __w_pdfjs_require__(20);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\nvar CORRECT_ARGUMENTS = classofRaw((function () {\n return arguments;\n}())) == 'Arguments';\nvar tryGet = function (it, key) {\n try {\n  return it[key];\n } catch (error) {\n }\n};\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n/***/ }),\n/* 93 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\ntest[TO_STRING_TAG] = 'z';\nmodule.exports = String(test) === '[object z]';\n\n/***/ }),\n/* 94 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar call = __w_pdfjs_require__(14);\nvar anObject = __w_pdfjs_require__(49);\nvar getMethod = __w_pdfjs_require__(33);\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n  innerResult = getMethod(iterator, 'return');\n  if (!innerResult) {\n   if (kind === 'throw')\n    throw value;\n   return value;\n  }\n  innerResult = call(innerResult, iterator);\n } catch (error) {\n  innerError = true;\n  innerResult = error;\n }\n if (kind === 'throw')\n  throw value;\n if (innerError)\n  throw innerResult;\n anObject(innerResult);\n return value;\n};\n\n/***/ }),\n/* 95 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar toPropertyKey = __w_pdfjs_require__(22);\nvar definePropertyModule = __w_pdfjs_require__(48);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object)\n  definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else\n  object[propertyKey] = value;\n};\n\n/***/ }),\n/* 96 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nmodule.exports = global;\n\n/***/ }),\n/* 97 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n__w_pdfjs_require__(98);\n__w_pdfjs_require__(71);\n__w_pdfjs_require__(105);\n__w_pdfjs_require__(107);\n__w_pdfjs_require__(129);\n__w_pdfjs_require__(130);\n__w_pdfjs_require__(131);\n__w_pdfjs_require__(132);\nvar path = __w_pdfjs_require__(96);\nmodule.exports = path.Promise;\n\n/***/ }),\n/* 98 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar global = __w_pdfjs_require__(10);\nvar isPrototypeOf = __w_pdfjs_require__(28);\nvar getPrototypeOf = __w_pdfjs_require__(81);\nvar setPrototypeOf = __w_pdfjs_require__(84);\nvar copyConstructorProperties = __w_pdfjs_require__(57);\nvar create = __w_pdfjs_require__(73);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nvar clearErrorStack = __w_pdfjs_require__(99);\nvar installErrorCause = __w_pdfjs_require__(101);\nvar iterate = __w_pdfjs_require__(87);\nvar normalizeStringArgument = __w_pdfjs_require__(102);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(104);\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Error = global.Error;\nvar push = [].push;\nvar $AggregateError = function AggregateError(errors, message) {\n var options = arguments.length > 2 ? arguments[2] : undefined;\n var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n var that;\n if (setPrototypeOf) {\n  that = setPrototypeOf(new Error(undefined), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n } else {\n  that = isInstance ? this : create(AggregateErrorPrototype);\n  createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n }\n createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n if (ERROR_STACK_INSTALLABLE)\n  createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\nif (setPrototypeOf)\n setPrototypeOf($AggregateError, Error);\nelse\n copyConstructorProperties($AggregateError, Error);\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n$({ global: true }, { AggregateError: $AggregateError });\n\n/***/ }),\n/* 99 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar arraySlice = __w_pdfjs_require__(100);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\nvar TEST = function (arg) {\n return String(Error(arg).stack);\n}('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\nmodule.exports = function (stack, dropEntries) {\n if (typeof stack != 'string')\n  return stack;\n if (IS_V8_OR_CHAKRA_STACK) {\n  while (dropEntries--)\n   stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n  return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n }\n return stack;\n};\n\n/***/ }),\n/* 100 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar toAbsoluteIndex = __w_pdfjs_require__(62);\nvar lengthOfArrayLike = __w_pdfjs_require__(64);\nvar createProperty = __w_pdfjs_require__(95);\nvar Array = global.Array;\nvar max = Math.max;\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++)\n  createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n\n/***/ }),\n/* 101 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar isObject = __w_pdfjs_require__(24);\nvar createNonEnumerableProperty = __w_pdfjs_require__(47);\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n  createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n\n/***/ }),\n/* 102 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar toString = __w_pdfjs_require__(103);\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n/***/ }),\n/* 103 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar classof = __w_pdfjs_require__(92);\nvar String = global.String;\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol')\n  throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n\n/***/ }),\n/* 104 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar fails = __w_pdfjs_require__(13);\nvar createPropertyDescriptor = __w_pdfjs_require__(16);\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error))\n  return true;\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n\n/***/ }),\n/* 105 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(93);\nvar redefine = __w_pdfjs_require__(50);\nvar toString = __w_pdfjs_require__(106);\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n/***/ }),\n/* 106 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(93);\nvar classof = __w_pdfjs_require__(92);\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n\n/***/ }),\n/* 107 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar IS_PURE = __w_pdfjs_require__(39);\nvar global = __w_pdfjs_require__(10);\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar call = __w_pdfjs_require__(14);\nvar NativePromise = __w_pdfjs_require__(108);\nvar redefine = __w_pdfjs_require__(50);\nvar redefineAll = __w_pdfjs_require__(109);\nvar setPrototypeOf = __w_pdfjs_require__(84);\nvar setToStringTag = __w_pdfjs_require__(83);\nvar setSpecies = __w_pdfjs_require__(110);\nvar aCallable = __w_pdfjs_require__(34);\nvar isCallable = __w_pdfjs_require__(25);\nvar isObject = __w_pdfjs_require__(24);\nvar anInstance = __w_pdfjs_require__(111);\nvar inspectSource = __w_pdfjs_require__(51);\nvar iterate = __w_pdfjs_require__(87);\nvar checkCorrectnessOfIteration = __w_pdfjs_require__(112);\nvar speciesConstructor = __w_pdfjs_require__(113);\nvar task = (__w_pdfjs_require__(116).set);\nvar microtask = __w_pdfjs_require__(121);\nvar promiseResolve = __w_pdfjs_require__(124);\nvar hostReportErrors = __w_pdfjs_require__(126);\nvar newPromiseCapabilityModule = __w_pdfjs_require__(125);\nvar perform = __w_pdfjs_require__(127);\nvar InternalStateModule = __w_pdfjs_require__(52);\nvar isForced = __w_pdfjs_require__(68);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar IS_BROWSER = __w_pdfjs_require__(128);\nvar IS_NODE = __w_pdfjs_require__(120);\nvar V8_VERSION = __w_pdfjs_require__(31);\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66)\n  return true;\n if (IS_PURE && !PromisePrototype['finally'])\n  return true;\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE))\n  return false;\n var promise = new PromiseConstructor(function (resolve) {\n  resolve(1);\n });\n var FakePromise = function (exec) {\n  exec(function () {\n  }, function () {\n  });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () {\n }) instanceof FakePromise;\n if (!SUBCLASSING)\n  return true;\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () {\n });\n});\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\nvar notify = function (state, isReject) {\n if (state.notified)\n  return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n  var value = state.value;\n  var ok = state.state == FULFILLED;\n  var index = 0;\n  while (chain.length > index) {\n   var reaction = chain[index++];\n   var handler = ok ? reaction.ok : reaction.fail;\n   var resolve = reaction.resolve;\n   var reject = reaction.reject;\n   var domain = reaction.domain;\n   var result, then, exited;\n   try {\n    if (handler) {\n     if (!ok) {\n      if (state.rejection === UNHANDLED)\n       onHandleUnhandled(state);\n      state.rejection = HANDLED;\n     }\n     if (handler === true)\n      result = value;\n     else {\n      if (domain)\n       domain.enter();\n      result = handler(value);\n      if (domain) {\n       domain.exit();\n       exited = true;\n      }\n     }\n     if (result === reaction.promise) {\n      reject(TypeError('Promise-chain cycle'));\n     } else if (then = isThenable(result)) {\n      call(then, result, resolve, reject);\n     } else\n      resolve(result);\n    } else\n     reject(value);\n   } catch (error) {\n    if (domain && !exited)\n     domain.exit();\n    reject(error);\n   }\n  }\n  state.reactions = [];\n  state.notified = false;\n  if (isReject && !state.rejection)\n   onUnhandled(state);\n });\n};\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n  event = document.createEvent('Event');\n  event.promise = promise;\n  event.reason = reason;\n  event.initEvent(name, false, true);\n  global.dispatchEvent(event);\n } else\n  event = {\n   promise: promise,\n   reason: reason\n  };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name]))\n  handler(event);\n else if (name === UNHANDLED_REJECTION)\n  hostReportErrors('Unhandled promise rejection', reason);\n};\nvar onUnhandled = function (state) {\n call(task, global, function () {\n  var promise = state.facade;\n  var value = state.value;\n  var IS_UNHANDLED = isUnhandled(state);\n  var result;\n  if (IS_UNHANDLED) {\n   result = perform(function () {\n    if (IS_NODE) {\n     process.emit('unhandledRejection', value, promise);\n    } else\n     dispatchEvent(UNHANDLED_REJECTION, promise, value);\n   });\n   state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n   if (result.error)\n    throw result.value;\n  }\n });\n};\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n  var promise = state.facade;\n  if (IS_NODE) {\n   process.emit('rejectionHandled', promise);\n  } else\n   dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n  fn(state, value, unwrap);\n };\n};\nvar internalReject = function (state, value, unwrap) {\n if (state.done)\n  return;\n state.done = true;\n if (unwrap)\n  state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\nvar internalResolve = function (state, value, unwrap) {\n if (state.done)\n  return;\n state.done = true;\n if (unwrap)\n  state = unwrap;\n try {\n  if (state.facade === value)\n   throw TypeError(\"Promise can't be resolved itself\");\n  var then = isThenable(value);\n  if (then) {\n   microtask(function () {\n    var wrapper = { done: false };\n    try {\n     call(then, value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state));\n    } catch (error) {\n     internalReject(wrapper, error, state);\n    }\n   });\n  } else {\n   state.value = value;\n   state.state = FULFILLED;\n   notify(state, false);\n  }\n } catch (error) {\n  internalReject({ done: false }, error, state);\n }\n};\nif (FORCED) {\n PromiseConstructor = function Promise(executor) {\n  anInstance(this, PromisePrototype);\n  aCallable(executor);\n  call(Internal, this);\n  var state = getInternalState(this);\n  try {\n   executor(bind(internalResolve, state), bind(internalReject, state));\n  } catch (error) {\n   internalReject(state, error);\n  }\n };\n PromisePrototype = PromiseConstructor.prototype;\n Internal = function Promise(executor) {\n  setInternalState(this, {\n   type: PROMISE,\n   done: false,\n   notified: false,\n   parent: false,\n   reactions: [],\n   rejection: false,\n   state: PENDING,\n   value: undefined\n  });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n  then: function then(onFulfilled, onRejected) {\n   var state = getInternalPromiseState(this);\n   var reactions = state.reactions;\n   var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n   reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n   reaction.fail = isCallable(onRejected) && onRejected;\n   reaction.domain = IS_NODE ? process.domain : undefined;\n   state.parent = true;\n   reactions[reactions.length] = reaction;\n   if (state.state != PENDING)\n    notify(state, false);\n   return reaction.promise;\n  },\n  'catch': function (onRejected) {\n   return this.then(undefined, onRejected);\n  }\n });\n OwnPromiseCapability = function () {\n  var promise = new Internal();\n  var state = getInternalState(promise);\n  this.promise = promise;\n  this.resolve = bind(internalResolve, state);\n  this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n  return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);\n };\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n  nativeThen = NativePromisePrototype.then;\n  if (!SUBCLASSING) {\n   redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n    var that = this;\n    return new PromiseConstructor(function (resolve, reject) {\n     call(nativeThen, that, resolve, reject);\n    }).then(onFulfilled, onRejected);\n   }, { unsafe: true });\n   redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n  }\n  try {\n   delete NativePromisePrototype.constructor;\n  } catch (error) {\n  }\n  if (setPrototypeOf) {\n   setPrototypeOf(NativePromisePrototype, PromisePrototype);\n  }\n }\n}\n$({\n global: true,\n wrap: true,\n forced: FORCED\n}, { Promise: PromiseConstructor });\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\nPromiseWrapper = getBuiltIn(PROMISE);\n$({\n target: PROMISE,\n stat: true,\n forced: FORCED\n}, {\n reject: function reject(r) {\n  var capability = newPromiseCapability(this);\n  call(capability.reject, undefined, r);\n  return capability.promise;\n }\n});\n$({\n target: PROMISE,\n stat: true,\n forced: IS_PURE || FORCED\n}, {\n resolve: function resolve(x) {\n  return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n$({\n target: PROMISE,\n stat: true,\n forced: INCORRECT_ITERATION\n}, {\n all: function all(iterable) {\n  var C = this;\n  var capability = newPromiseCapability(C);\n  var resolve = capability.resolve;\n  var reject = capability.reject;\n  var result = perform(function () {\n   var $promiseResolve = aCallable(C.resolve);\n   var values = [];\n   var counter = 0;\n   var remaining = 1;\n   iterate(iterable, function (promise) {\n    var index = counter++;\n    var alreadyCalled = false;\n    remaining++;\n    call($promiseResolve, C, promise).then(function (value) {\n     if (alreadyCalled)\n      return;\n     alreadyCalled = true;\n     values[index] = value;\n     --remaining || resolve(values);\n    }, reject);\n   });\n   --remaining || resolve(values);\n  });\n  if (result.error)\n   reject(result.value);\n  return capability.promise;\n },\n race: function race(iterable) {\n  var C = this;\n  var capability = newPromiseCapability(C);\n  var reject = capability.reject;\n  var result = perform(function () {\n   var $promiseResolve = aCallable(C.resolve);\n   iterate(iterable, function (promise) {\n    call($promiseResolve, C, promise).then(capability.resolve, reject);\n   });\n  });\n  if (result.error)\n   reject(result.value);\n  return capability.promise;\n }\n});\n\n/***/ }),\n/* 108 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nmodule.exports = global.Promise;\n\n/***/ }),\n/* 109 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar redefine = __w_pdfjs_require__(50);\nmodule.exports = function (target, src, options) {\n for (var key in src)\n  redefine(target, key, src[key], options);\n return target;\n};\n\n/***/ }),\n/* 110 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar definePropertyModule = __w_pdfjs_require__(48);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar DESCRIPTORS = __w_pdfjs_require__(12);\nvar SPECIES = wellKnownSymbol('species');\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n  defineProperty(Constructor, SPECIES, {\n   configurable: true,\n   get: function () {\n    return this;\n   }\n  });\n }\n};\n\n/***/ }),\n/* 111 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isPrototypeOf = __w_pdfjs_require__(28);\nvar TypeError = global.TypeError;\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it))\n  return it;\n throw TypeError('Incorrect invocation');\n};\n\n/***/ }),\n/* 112 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\ntry {\n var called = 0;\n var iteratorWithReturn = {\n  next: function () {\n   return { done: !!called++ };\n  },\n  'return': function () {\n   SAFE_CLOSING = true;\n  }\n };\n iteratorWithReturn[ITERATOR] = function () {\n  return this;\n };\n Array.from(iteratorWithReturn, function () {\n  throw 2;\n });\n} catch (error) {\n}\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING)\n  return false;\n var ITERATION_SUPPORT = false;\n try {\n  var object = {};\n  object[ITERATOR] = function () {\n   return {\n    next: function () {\n     return { done: ITERATION_SUPPORT = true };\n    }\n   };\n  };\n  exec(object);\n } catch (error) {\n }\n return ITERATION_SUPPORT;\n};\n\n/***/ }),\n/* 113 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar anObject = __w_pdfjs_require__(49);\nvar aConstructor = __w_pdfjs_require__(114);\nvar wellKnownSymbol = __w_pdfjs_require__(37);\nvar SPECIES = wellKnownSymbol('species');\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n\n/***/ }),\n/* 114 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar isConstructor = __w_pdfjs_require__(115);\nvar tryToString = __w_pdfjs_require__(35);\nvar TypeError = global.TypeError;\nmodule.exports = function (argument) {\n if (isConstructor(argument))\n  return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n\n/***/ }),\n/* 115 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar fails = __w_pdfjs_require__(13);\nvar isCallable = __w_pdfjs_require__(25);\nvar classof = __w_pdfjs_require__(92);\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar inspectSource = __w_pdfjs_require__(51);\nvar noop = function () {\n};\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument))\n  return false;\n try {\n  construct(noop, empty, argument);\n  return true;\n } catch (error) {\n  return false;\n }\n};\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument))\n  return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction':\n  return false;\n }\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () {\n  called = true;\n }) || called;\n}) ? isConstructorLegacy : isConstructorModern;\n\n/***/ }),\n/* 116 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar apply = __w_pdfjs_require__(117);\nvar bind = __w_pdfjs_require__(88);\nvar isCallable = __w_pdfjs_require__(25);\nvar hasOwn = __w_pdfjs_require__(42);\nvar fails = __w_pdfjs_require__(13);\nvar html = __w_pdfjs_require__(76);\nvar arraySlice = __w_pdfjs_require__(118);\nvar createElement = __w_pdfjs_require__(46);\nvar IS_IOS = __w_pdfjs_require__(119);\nvar IS_NODE = __w_pdfjs_require__(120);\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\ntry {\n location = global.location;\n} catch (error) {\n}\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n  var fn = queue[id];\n  delete queue[id];\n  fn();\n }\n};\nvar runner = function (id) {\n return function () {\n  run(id);\n };\n};\nvar listener = function (event) {\n run(event.data);\n};\nvar post = function (id) {\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\nif (!set || !clear) {\n set = function setImmediate(fn) {\n  var args = arraySlice(arguments, 1);\n  queue[++counter] = function () {\n   apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n  };\n  defer(counter);\n  return counter;\n };\n clear = function clearImmediate(id) {\n  delete queue[id];\n };\n if (IS_NODE) {\n  defer = function (id) {\n   process.nextTick(runner(id));\n  };\n } else if (Dispatch && Dispatch.now) {\n  defer = function (id) {\n   Dispatch.now(runner(id));\n  };\n } else if (MessageChannel && !IS_IOS) {\n  channel = new MessageChannel();\n  port = channel.port2;\n  channel.port1.onmessage = listener;\n  defer = bind(port.postMessage, port);\n } else if (global.addEventListener && isCallable(global.postMessage) && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) {\n  defer = post;\n  global.addEventListener('message', listener, false);\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n  defer = function (id) {\n   html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n    html.removeChild(this);\n    run(id);\n   };\n  };\n } else {\n  defer = function (id) {\n   setTimeout(runner(id), 0);\n  };\n }\n}\nmodule.exports = {\n set: set,\n clear: clear\n};\n\n/***/ }),\n/* 117 */\n/***/ ((module) => {\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n\n/***/ }),\n/* 118 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nmodule.exports = uncurryThis([].slice);\n\n/***/ }),\n/* 119 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar userAgent = __w_pdfjs_require__(32);\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n\n/***/ }),\n/* 120 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar classof = __w_pdfjs_require__(20);\nvar global = __w_pdfjs_require__(10);\nmodule.exports = classof(global.process) == 'process';\n\n/***/ }),\n/* 121 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nvar bind = __w_pdfjs_require__(88);\nvar getOwnPropertyDescriptor = (__w_pdfjs_require__(11).f);\nvar macrotask = (__w_pdfjs_require__(116).set);\nvar IS_IOS = __w_pdfjs_require__(119);\nvar IS_IOS_PEBBLE = __w_pdfjs_require__(122);\nvar IS_WEBOS_WEBKIT = __w_pdfjs_require__(123);\nvar IS_NODE = __w_pdfjs_require__(120);\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\nvar flush, head, last, notify, toggle, node, promise, then;\nif (!queueMicrotask) {\n flush = function () {\n  var parent, fn;\n  if (IS_NODE && (parent = process.domain))\n   parent.exit();\n  while (head) {\n   fn = head.fn;\n   head = head.next;\n   try {\n    fn();\n   } catch (error) {\n    if (head)\n     notify();\n    else\n     last = undefined;\n    throw error;\n   }\n  }\n  last = undefined;\n  if (parent)\n   parent.enter();\n };\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n  toggle = true;\n  node = document.createTextNode('');\n  new MutationObserver(flush).observe(node, { characterData: true });\n  notify = function () {\n   node.data = toggle = !toggle;\n  };\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n  promise = Promise.resolve(undefined);\n  promise.constructor = Promise;\n  then = bind(promise.then, promise);\n  notify = function () {\n   then(flush);\n  };\n } else if (IS_NODE) {\n  notify = function () {\n   process.nextTick(flush);\n  };\n } else {\n  macrotask = bind(macrotask, global);\n  notify = function () {\n   macrotask(flush);\n  };\n }\n}\nmodule.exports = queueMicrotask || function (fn) {\n var task = {\n  fn: fn,\n  next: undefined\n };\n if (last)\n  last.next = task;\n if (!head) {\n  head = task;\n  notify();\n }\n last = task;\n};\n\n/***/ }),\n/* 122 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar userAgent = __w_pdfjs_require__(32);\nvar global = __w_pdfjs_require__(10);\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n\n/***/ }),\n/* 123 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar userAgent = __w_pdfjs_require__(32);\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n\n/***/ }),\n/* 124 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar anObject = __w_pdfjs_require__(49);\nvar isObject = __w_pdfjs_require__(24);\nvar newPromiseCapability = __w_pdfjs_require__(125);\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C)\n  return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n/***/ }),\n/* 125 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar aCallable = __w_pdfjs_require__(34);\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n  if (resolve !== undefined || reject !== undefined)\n   throw TypeError('Bad Promise constructor');\n  resolve = $$resolve;\n  reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n/***/ }),\n/* 126 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar global = __w_pdfjs_require__(10);\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n  arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n\n/***/ }),\n/* 127 */\n/***/ ((module) => {\n\nmodule.exports = function (exec) {\n try {\n  return {\n   error: false,\n   value: exec()\n  };\n } catch (error) {\n  return {\n   error: true,\n   value: error\n  };\n }\n};\n\n/***/ }),\n/* 128 */\n/***/ ((module) => {\n\nmodule.exports = typeof window == 'object';\n\n/***/ }),\n/* 129 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar call = __w_pdfjs_require__(14);\nvar aCallable = __w_pdfjs_require__(34);\nvar newPromiseCapabilityModule = __w_pdfjs_require__(125);\nvar perform = __w_pdfjs_require__(127);\nvar iterate = __w_pdfjs_require__(87);\n$({\n target: 'Promise',\n stat: true\n}, {\n allSettled: function allSettled(iterable) {\n  var C = this;\n  var capability = newPromiseCapabilityModule.f(C);\n  var resolve = capability.resolve;\n  var reject = capability.reject;\n  var result = perform(function () {\n   var promiseResolve = aCallable(C.resolve);\n   var values = [];\n   var counter = 0;\n   var remaining = 1;\n   iterate(iterable, function (promise) {\n    var index = counter++;\n    var alreadyCalled = false;\n    remaining++;\n    call(promiseResolve, C, promise).then(function (value) {\n     if (alreadyCalled)\n      return;\n     alreadyCalled = true;\n     values[index] = {\n      status: 'fulfilled',\n      value: value\n     };\n     --remaining || resolve(values);\n    }, function (error) {\n     if (alreadyCalled)\n      return;\n     alreadyCalled = true;\n     values[index] = {\n      status: 'rejected',\n      reason: error\n     };\n     --remaining || resolve(values);\n    });\n   });\n   --remaining || resolve(values);\n  });\n  if (result.error)\n   reject(result.value);\n  return capability.promise;\n }\n});\n\n/***/ }),\n/* 130 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar aCallable = __w_pdfjs_require__(34);\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar call = __w_pdfjs_require__(14);\nvar newPromiseCapabilityModule = __w_pdfjs_require__(125);\nvar perform = __w_pdfjs_require__(127);\nvar iterate = __w_pdfjs_require__(87);\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n$({\n target: 'Promise',\n stat: true\n}, {\n any: function any(iterable) {\n  var C = this;\n  var AggregateError = getBuiltIn('AggregateError');\n  var capability = newPromiseCapabilityModule.f(C);\n  var resolve = capability.resolve;\n  var reject = capability.reject;\n  var result = perform(function () {\n   var promiseResolve = aCallable(C.resolve);\n   var errors = [];\n   var counter = 0;\n   var remaining = 1;\n   var alreadyResolved = false;\n   iterate(iterable, function (promise) {\n    var index = counter++;\n    var alreadyRejected = false;\n    remaining++;\n    call(promiseResolve, C, promise).then(function (value) {\n     if (alreadyRejected || alreadyResolved)\n      return;\n     alreadyResolved = true;\n     resolve(value);\n    }, function (error) {\n     if (alreadyRejected || alreadyResolved)\n      return;\n     alreadyRejected = true;\n     errors[index] = error;\n     --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n    });\n   });\n   --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n  });\n  if (result.error)\n   reject(result.value);\n  return capability.promise;\n }\n});\n\n/***/ }),\n/* 131 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar $ = __w_pdfjs_require__(9);\nvar IS_PURE = __w_pdfjs_require__(39);\nvar NativePromise = __w_pdfjs_require__(108);\nvar fails = __w_pdfjs_require__(13);\nvar getBuiltIn = __w_pdfjs_require__(27);\nvar isCallable = __w_pdfjs_require__(25);\nvar speciesConstructor = __w_pdfjs_require__(113);\nvar promiseResolve = __w_pdfjs_require__(124);\nvar redefine = __w_pdfjs_require__(50);\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({\n  then: function () {\n  }\n }, function () {\n });\n});\n$({\n target: 'Promise',\n proto: true,\n real: true,\n forced: NON_GENERIC\n}, {\n 'finally': function (onFinally) {\n  var C = speciesConstructor(this, getBuiltIn('Promise'));\n  var isFunction = isCallable(onFinally);\n  return this.then(isFunction ? function (x) {\n   return promiseResolve(C, onFinally()).then(function () {\n    return x;\n   });\n  } : onFinally, isFunction ? function (e) {\n   return promiseResolve(C, onFinally()).then(function () {\n    throw e;\n   });\n  } : onFinally);\n }\n});\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n  redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n\n/***/ }),\n/* 132 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\nvar charAt = (__w_pdfjs_require__(133).charAt);\nvar toString = __w_pdfjs_require__(103);\nvar InternalStateModule = __w_pdfjs_require__(52);\nvar defineIterator = __w_pdfjs_require__(78);\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n  type: STRING_ITERATOR,\n  string: toString(iterated),\n  index: 0\n });\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length)\n  return {\n   value: undefined,\n   done: true\n  };\n point = charAt(string, index);\n state.index += point.length;\n return {\n  value: point,\n  done: false\n };\n});\n\n/***/ }),\n/* 133 */\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\n\nvar uncurryThis = __w_pdfjs_require__(19);\nvar toIntegerOrInfinity = __w_pdfjs_require__(63);\nvar toString = __w_pdfjs_require__(103);\nvar requireObjectCoercible = __w_pdfjs_require__(21);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n  var S = toString(requireObjectCoercible($this));\n  var position = toIntegerOrInfinity(pos);\n  var size = S.length;\n  var first, second;\n  if (position < 0 || position >= size)\n   return CONVERT_TO_STRING ? '' : undefined;\n  first = charCodeAt(S, position);\n  return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\nmodule.exports = {\n codeAt: createMethod(false),\n charAt: createMethod(true)\n};\n\n/***/ }),\n/* 134 */\n/***/ (function(__unused_webpack_module, exports) {\n\n(function (global, factory) {\n  true ? factory(exports) : 0;\n}(this, function (exports) {\n 'use strict';\n var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) {\n  return \"Symbol(\" + description + \")\";\n };\n function noop() {\n  return undefined;\n }\n function getGlobals() {\n  if (typeof self !== 'undefined') {\n   return self;\n  } else if (typeof window !== 'undefined') {\n   return window;\n  } else if (typeof global !== 'undefined') {\n   return global;\n  }\n  return undefined;\n }\n var globals = getGlobals();\n function typeIsObject(x) {\n  return typeof x === 'object' && x !== null || typeof x === 'function';\n }\n var rethrowAssertionErrorRejection = noop;\n var originalPromise = Promise;\n var originalPromiseThen = Promise.prototype.then;\n var originalPromiseResolve = Promise.resolve.bind(originalPromise);\n var originalPromiseReject = Promise.reject.bind(originalPromise);\n function newPromise(executor) {\n  return new originalPromise(executor);\n }\n function promiseResolvedWith(value) {\n  return originalPromiseResolve(value);\n }\n function promiseRejectedWith(reason) {\n  return originalPromiseReject(reason);\n }\n function PerformPromiseThen(promise, onFulfilled, onRejected) {\n  return originalPromiseThen.call(promise, onFulfilled, onRejected);\n }\n function uponPromise(promise, onFulfilled, onRejected) {\n  PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\n }\n function uponFulfillment(promise, onFulfilled) {\n  uponPromise(promise, onFulfilled);\n }\n function uponRejection(promise, onRejected) {\n  uponPromise(promise, undefined, onRejected);\n }\n function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\n  return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n }\n function setPromiseIsHandledToTrue(promise) {\n  PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n }\n var queueMicrotask = (function () {\n  var globalQueueMicrotask = globals && globals.queueMicrotask;\n  if (typeof globalQueueMicrotask === 'function') {\n   return globalQueueMicrotask;\n  }\n  var resolvedPromise = promiseResolvedWith(undefined);\n  return function (fn) {\n   return PerformPromiseThen(resolvedPromise, fn);\n  };\n }());\n function reflectCall(F, V, args) {\n  if (typeof F !== 'function') {\n   throw new TypeError('Argument is not a function');\n  }\n  return Function.prototype.apply.call(F, V, args);\n }\n function promiseCall(F, V, args) {\n  try {\n   return promiseResolvedWith(reflectCall(F, V, args));\n  } catch (value) {\n   return promiseRejectedWith(value);\n  }\n }\n var QUEUE_MAX_ARRAY_SIZE = 16384;\n var SimpleQueue = (function () {\n  function SimpleQueue() {\n   this._cursor = 0;\n   this._size = 0;\n   this._front = {\n    _elements: [],\n    _next: undefined\n   };\n   this._back = this._front;\n   this._cursor = 0;\n   this._size = 0;\n  }\n  Object.defineProperty(SimpleQueue.prototype, \"length\", {\n   get: function () {\n    return this._size;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  SimpleQueue.prototype.push = function (element) {\n   var oldBack = this._back;\n   var newBack = oldBack;\n   if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n    newBack = {\n     _elements: [],\n     _next: undefined\n    };\n   }\n   oldBack._elements.push(element);\n   if (newBack !== oldBack) {\n    this._back = newBack;\n    oldBack._next = newBack;\n   }\n   ++this._size;\n  };\n  SimpleQueue.prototype.shift = function () {\n   var oldFront = this._front;\n   var newFront = oldFront;\n   var oldCursor = this._cursor;\n   var newCursor = oldCursor + 1;\n   var elements = oldFront._elements;\n   var element = elements[oldCursor];\n   if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n    newFront = oldFront._next;\n    newCursor = 0;\n   }\n   --this._size;\n   this._cursor = newCursor;\n   if (oldFront !== newFront) {\n    this._front = newFront;\n   }\n   elements[oldCursor] = undefined;\n   return element;\n  };\n  SimpleQueue.prototype.forEach = function (callback) {\n   var i = this._cursor;\n   var node = this._front;\n   var elements = node._elements;\n   while (i !== elements.length || node._next !== undefined) {\n    if (i === elements.length) {\n     node = node._next;\n     elements = node._elements;\n     i = 0;\n     if (elements.length === 0) {\n      break;\n     }\n    }\n    callback(elements[i]);\n    ++i;\n   }\n  };\n  SimpleQueue.prototype.peek = function () {\n   var front = this._front;\n   var cursor = this._cursor;\n   return front._elements[cursor];\n  };\n  return SimpleQueue;\n }());\n function ReadableStreamReaderGenericInitialize(reader, stream) {\n  reader._ownerReadableStream = stream;\n  stream._reader = reader;\n  if (stream._state === 'readable') {\n   defaultReaderClosedPromiseInitialize(reader);\n  } else if (stream._state === 'closed') {\n   defaultReaderClosedPromiseInitializeAsResolved(reader);\n  } else {\n   defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n  }\n }\n function ReadableStreamReaderGenericCancel(reader, reason) {\n  var stream = reader._ownerReadableStream;\n  return ReadableStreamCancel(stream, reason);\n }\n function ReadableStreamReaderGenericRelease(reader) {\n  if (reader._ownerReadableStream._state === 'readable') {\n   defaultReaderClosedPromiseReject(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\n  } else {\n   defaultReaderClosedPromiseResetToRejected(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\n  }\n  reader._ownerReadableStream._reader = undefined;\n  reader._ownerReadableStream = undefined;\n }\n function readerLockException(name) {\n  return new TypeError('Cannot ' + name + ' a stream using a released reader');\n }\n function defaultReaderClosedPromiseInitialize(reader) {\n  reader._closedPromise = newPromise(function (resolve, reject) {\n   reader._closedPromise_resolve = resolve;\n   reader._closedPromise_reject = reject;\n  });\n }\n function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n  defaultReaderClosedPromiseInitialize(reader);\n  defaultReaderClosedPromiseReject(reader, reason);\n }\n function defaultReaderClosedPromiseInitializeAsResolved(reader) {\n  defaultReaderClosedPromiseInitialize(reader);\n  defaultReaderClosedPromiseResolve(reader);\n }\n function defaultReaderClosedPromiseReject(reader, reason) {\n  if (reader._closedPromise_reject === undefined) {\n   return;\n  }\n  setPromiseIsHandledToTrue(reader._closedPromise);\n  reader._closedPromise_reject(reason);\n  reader._closedPromise_resolve = undefined;\n  reader._closedPromise_reject = undefined;\n }\n function defaultReaderClosedPromiseResetToRejected(reader, reason) {\n  defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n }\n function defaultReaderClosedPromiseResolve(reader) {\n  if (reader._closedPromise_resolve === undefined) {\n   return;\n  }\n  reader._closedPromise_resolve(undefined);\n  reader._closedPromise_resolve = undefined;\n  reader._closedPromise_reject = undefined;\n }\n var AbortSteps = SymbolPolyfill('[[AbortSteps]]');\n var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\n var CancelSteps = SymbolPolyfill('[[CancelSteps]]');\n var PullSteps = SymbolPolyfill('[[PullSteps]]');\n var NumberIsFinite = Number.isFinite || function (x) {\n  return typeof x === 'number' && isFinite(x);\n };\n var MathTrunc = Math.trunc || function (v) {\n  return v < 0 ? Math.ceil(v) : Math.floor(v);\n };\n function isDictionary(x) {\n  return typeof x === 'object' || typeof x === 'function';\n }\n function assertDictionary(obj, context) {\n  if (obj !== undefined && !isDictionary(obj)) {\n   throw new TypeError(context + \" is not an object.\");\n  }\n }\n function assertFunction(x, context) {\n  if (typeof x !== 'function') {\n   throw new TypeError(context + \" is not a function.\");\n  }\n }\n function isObject(x) {\n  return typeof x === 'object' && x !== null || typeof x === 'function';\n }\n function assertObject(x, context) {\n  if (!isObject(x)) {\n   throw new TypeError(context + \" is not an object.\");\n  }\n }\n function assertRequiredArgument(x, position, context) {\n  if (x === undefined) {\n   throw new TypeError(\"Parameter \" + position + \" is required in '\" + context + \"'.\");\n  }\n }\n function assertRequiredField(x, field, context) {\n  if (x === undefined) {\n   throw new TypeError(field + \" is required in '\" + context + \"'.\");\n  }\n }\n function convertUnrestrictedDouble(value) {\n  return Number(value);\n }\n function censorNegativeZero(x) {\n  return x === 0 ? 0 : x;\n }\n function integerPart(x) {\n  return censorNegativeZero(MathTrunc(x));\n }\n function convertUnsignedLongLongWithEnforceRange(value, context) {\n  var lowerBound = 0;\n  var upperBound = Number.MAX_SAFE_INTEGER;\n  var x = Number(value);\n  x = censorNegativeZero(x);\n  if (!NumberIsFinite(x)) {\n   throw new TypeError(context + \" is not a finite number\");\n  }\n  x = integerPart(x);\n  if (x < lowerBound || x > upperBound) {\n   throw new TypeError(context + \" is outside the accepted range of \" + lowerBound + \" to \" + upperBound + \", inclusive\");\n  }\n  if (!NumberIsFinite(x) || x === 0) {\n   return 0;\n  }\n  return x;\n }\n function assertReadableStream(x, context) {\n  if (!IsReadableStream(x)) {\n   throw new TypeError(context + \" is not a ReadableStream.\");\n  }\n }\n function AcquireReadableStreamDefaultReader(stream) {\n  return new ReadableStreamDefaultReader(stream);\n }\n function ReadableStreamAddReadRequest(stream, readRequest) {\n  stream._reader._readRequests.push(readRequest);\n }\n function ReadableStreamFulfillReadRequest(stream, chunk, done) {\n  var reader = stream._reader;\n  var readRequest = reader._readRequests.shift();\n  if (done) {\n   readRequest._closeSteps();\n  } else {\n   readRequest._chunkSteps(chunk);\n  }\n }\n function ReadableStreamGetNumReadRequests(stream) {\n  return stream._reader._readRequests.length;\n }\n function ReadableStreamHasDefaultReader(stream) {\n  var reader = stream._reader;\n  if (reader === undefined) {\n   return false;\n  }\n  if (!IsReadableStreamDefaultReader(reader)) {\n   return false;\n  }\n  return true;\n }\n var ReadableStreamDefaultReader = (function () {\n  function ReadableStreamDefaultReader(stream) {\n   assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n   assertReadableStream(stream, 'First parameter');\n   if (IsReadableStreamLocked(stream)) {\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n   }\n   ReadableStreamReaderGenericInitialize(this, stream);\n   this._readRequests = new SimpleQueue();\n  }\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, \"closed\", {\n   get: function () {\n    if (!IsReadableStreamDefaultReader(this)) {\n     return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n    }\n    return this._closedPromise;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableStreamDefaultReader.prototype.cancel = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsReadableStreamDefaultReader(this)) {\n    return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n   }\n   if (this._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('cancel'));\n   }\n   return ReadableStreamReaderGenericCancel(this, reason);\n  };\n  ReadableStreamDefaultReader.prototype.read = function () {\n   if (!IsReadableStreamDefaultReader(this)) {\n    return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n   }\n   if (this._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('read from'));\n   }\n   var resolvePromise;\n   var rejectPromise;\n   var promise = newPromise(function (resolve, reject) {\n    resolvePromise = resolve;\n    rejectPromise = reject;\n   });\n   var readRequest = {\n    _chunkSteps: function (chunk) {\n     return resolvePromise({\n      value: chunk,\n      done: false\n     });\n    },\n    _closeSteps: function () {\n     return resolvePromise({\n      value: undefined,\n      done: true\n     });\n    },\n    _errorSteps: function (e) {\n     return rejectPromise(e);\n    }\n   };\n   ReadableStreamDefaultReaderRead(this, readRequest);\n   return promise;\n  };\n  ReadableStreamDefaultReader.prototype.releaseLock = function () {\n   if (!IsReadableStreamDefaultReader(this)) {\n    throw defaultReaderBrandCheckException('releaseLock');\n   }\n   if (this._ownerReadableStream === undefined) {\n    return;\n   }\n   if (this._readRequests.length > 0) {\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n   }\n   ReadableStreamReaderGenericRelease(this);\n  };\n  return ReadableStreamDefaultReader;\n }());\n Object.defineProperties(ReadableStreamDefaultReader.prototype, {\n  cancel: { enumerable: true },\n  read: { enumerable: true },\n  releaseLock: { enumerable: true },\n  closed: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableStreamDefaultReader',\n   configurable: true\n  });\n }\n function IsReadableStreamDefaultReader(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n   return false;\n  }\n  return x instanceof ReadableStreamDefaultReader;\n }\n function ReadableStreamDefaultReaderRead(reader, readRequest) {\n  var stream = reader._ownerReadableStream;\n  stream._disturbed = true;\n  if (stream._state === 'closed') {\n   readRequest._closeSteps();\n  } else if (stream._state === 'errored') {\n   readRequest._errorSteps(stream._storedError);\n  } else {\n   stream._readableStreamController[PullSteps](readRequest);\n  }\n }\n function defaultReaderBrandCheckException(name) {\n  return new TypeError(\"ReadableStreamDefaultReader.prototype.\" + name + \" can only be used on a ReadableStreamDefaultReader\");\n }\n var _a;\n var AsyncIteratorPrototype;\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n  AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () {\n   return this;\n  }, _a);\n  Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\n }\n var ReadableStreamAsyncIteratorImpl = (function () {\n  function ReadableStreamAsyncIteratorImpl(reader, preventCancel) {\n   this._ongoingPromise = undefined;\n   this._isFinished = false;\n   this._reader = reader;\n   this._preventCancel = preventCancel;\n  }\n  ReadableStreamAsyncIteratorImpl.prototype.next = function () {\n   var _this = this;\n   var nextSteps = function () {\n    return _this._nextSteps();\n   };\n   this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps();\n   return this._ongoingPromise;\n  };\n  ReadableStreamAsyncIteratorImpl.prototype.return = function (value) {\n   var _this = this;\n   var returnSteps = function () {\n    return _this._returnSteps(value);\n   };\n   return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps();\n  };\n  ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () {\n   var _this = this;\n   if (this._isFinished) {\n    return Promise.resolve({\n     value: undefined,\n     done: true\n    });\n   }\n   var reader = this._reader;\n   if (reader._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('iterate'));\n   }\n   var resolvePromise;\n   var rejectPromise;\n   var promise = newPromise(function (resolve, reject) {\n    resolvePromise = resolve;\n    rejectPromise = reject;\n   });\n   var readRequest = {\n    _chunkSteps: function (chunk) {\n     _this._ongoingPromise = undefined;\n     queueMicrotask(function () {\n      return resolvePromise({\n       value: chunk,\n       done: false\n      });\n     });\n    },\n    _closeSteps: function () {\n     _this._ongoingPromise = undefined;\n     _this._isFinished = true;\n     ReadableStreamReaderGenericRelease(reader);\n     resolvePromise({\n      value: undefined,\n      done: true\n     });\n    },\n    _errorSteps: function (reason) {\n     _this._ongoingPromise = undefined;\n     _this._isFinished = true;\n     ReadableStreamReaderGenericRelease(reader);\n     rejectPromise(reason);\n    }\n   };\n   ReadableStreamDefaultReaderRead(reader, readRequest);\n   return promise;\n  };\n  ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) {\n   if (this._isFinished) {\n    return Promise.resolve({\n     value: value,\n     done: true\n    });\n   }\n   this._isFinished = true;\n   var reader = this._reader;\n   if (reader._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('finish iterating'));\n   }\n   if (!this._preventCancel) {\n    var result = ReadableStreamReaderGenericCancel(reader, value);\n    ReadableStreamReaderGenericRelease(reader);\n    return transformPromiseWith(result, function () {\n     return {\n      value: value,\n      done: true\n     };\n    });\n   }\n   ReadableStreamReaderGenericRelease(reader);\n   return promiseResolvedWith({\n    value: value,\n    done: true\n   });\n  };\n  return ReadableStreamAsyncIteratorImpl;\n }());\n var ReadableStreamAsyncIteratorPrototype = {\n  next: function () {\n   if (!IsReadableStreamAsyncIterator(this)) {\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n   }\n   return this._asyncIteratorImpl.next();\n  },\n  return: function (value) {\n   if (!IsReadableStreamAsyncIterator(this)) {\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n   }\n   return this._asyncIteratorImpl.return(value);\n  }\n };\n if (AsyncIteratorPrototype !== undefined) {\n  Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n }\n function AcquireReadableStreamAsyncIterator(stream, preventCancel) {\n  var reader = AcquireReadableStreamDefaultReader(stream);\n  var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\n  iterator._asyncIteratorImpl = impl;\n  return iterator;\n }\n function IsReadableStreamAsyncIterator(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n   return false;\n  }\n  try {\n   return x._asyncIteratorImpl instanceof ReadableStreamAsyncIteratorImpl;\n  } catch (_a) {\n   return false;\n  }\n }\n function streamAsyncIteratorBrandCheckException(name) {\n  return new TypeError(\"ReadableStreamAsyncIterator.\" + name + \" can only be used on a ReadableSteamAsyncIterator\");\n }\n var NumberIsNaN = Number.isNaN || function (x) {\n  return x !== x;\n };\n function CreateArrayFromList(elements) {\n  return elements.slice();\n }\n function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\n  new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n }\n function TransferArrayBuffer(O) {\n  return O;\n }\n function IsDetachedBuffer(O) {\n  return false;\n }\n function ArrayBufferSlice(buffer, begin, end) {\n  if (buffer.slice) {\n   return buffer.slice(begin, end);\n  }\n  var length = end - begin;\n  var slice = new ArrayBuffer(length);\n  CopyDataBlockBytes(slice, 0, buffer, begin, length);\n  return slice;\n }\n function IsNonNegativeNumber(v) {\n  if (typeof v !== 'number') {\n   return false;\n  }\n  if (NumberIsNaN(v)) {\n   return false;\n  }\n  if (v < 0) {\n   return false;\n  }\n  return true;\n }\n function CloneAsUint8Array(O) {\n  var buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n  return new Uint8Array(buffer);\n }\n function DequeueValue(container) {\n  var pair = container._queue.shift();\n  container._queueTotalSize -= pair.size;\n  if (container._queueTotalSize < 0) {\n   container._queueTotalSize = 0;\n  }\n  return pair.value;\n }\n function EnqueueValueWithSize(container, value, size) {\n  if (!IsNonNegativeNumber(size) || size === Infinity) {\n   throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n  }\n  container._queue.push({\n   value: value,\n   size: size\n  });\n  container._queueTotalSize += size;\n }\n function PeekQueueValue(container) {\n  var pair = container._queue.peek();\n  return pair.value;\n }\n function ResetQueue(container) {\n  container._queue = new SimpleQueue();\n  container._queueTotalSize = 0;\n }\n var ReadableStreamBYOBRequest = (function () {\n  function ReadableStreamBYOBRequest() {\n   throw new TypeError('Illegal constructor');\n  }\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, \"view\", {\n   get: function () {\n    if (!IsReadableStreamBYOBRequest(this)) {\n     throw byobRequestBrandCheckException('view');\n    }\n    return this._view;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) {\n   if (!IsReadableStreamBYOBRequest(this)) {\n    throw byobRequestBrandCheckException('respond');\n   }\n   assertRequiredArgument(bytesWritten, 1, 'respond');\n   bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n   if (this._associatedReadableByteStreamController === undefined) {\n    throw new TypeError('This BYOB request has been invalidated');\n   }\n   if (IsDetachedBuffer(this._view.buffer));\n   ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n  };\n  ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) {\n   if (!IsReadableStreamBYOBRequest(this)) {\n    throw byobRequestBrandCheckException('respondWithNewView');\n   }\n   assertRequiredArgument(view, 1, 'respondWithNewView');\n   if (!ArrayBuffer.isView(view)) {\n    throw new TypeError('You can only respond with array buffer views');\n   }\n   if (this._associatedReadableByteStreamController === undefined) {\n    throw new TypeError('This BYOB request has been invalidated');\n   }\n   if (IsDetachedBuffer(view.buffer));\n   ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n  };\n  return ReadableStreamBYOBRequest;\n }());\n Object.defineProperties(ReadableStreamBYOBRequest.prototype, {\n  respond: { enumerable: true },\n  respondWithNewView: { enumerable: true },\n  view: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableStreamBYOBRequest',\n   configurable: true\n  });\n }\n var ReadableByteStreamController = (function () {\n  function ReadableByteStreamController() {\n   throw new TypeError('Illegal constructor');\n  }\n  Object.defineProperty(ReadableByteStreamController.prototype, \"byobRequest\", {\n   get: function () {\n    if (!IsReadableByteStreamController(this)) {\n     throw byteStreamControllerBrandCheckException('byobRequest');\n    }\n    return ReadableByteStreamControllerGetBYOBRequest(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(ReadableByteStreamController.prototype, \"desiredSize\", {\n   get: function () {\n    if (!IsReadableByteStreamController(this)) {\n     throw byteStreamControllerBrandCheckException('desiredSize');\n    }\n    return ReadableByteStreamControllerGetDesiredSize(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableByteStreamController.prototype.close = function () {\n   if (!IsReadableByteStreamController(this)) {\n    throw byteStreamControllerBrandCheckException('close');\n   }\n   if (this._closeRequested) {\n    throw new TypeError('The stream has already been closed; do not close it again!');\n   }\n   var state = this._controlledReadableByteStream._state;\n   if (state !== 'readable') {\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be closed\");\n   }\n   ReadableByteStreamControllerClose(this);\n  };\n  ReadableByteStreamController.prototype.enqueue = function (chunk) {\n   if (!IsReadableByteStreamController(this)) {\n    throw byteStreamControllerBrandCheckException('enqueue');\n   }\n   assertRequiredArgument(chunk, 1, 'enqueue');\n   if (!ArrayBuffer.isView(chunk)) {\n    throw new TypeError('chunk must be an array buffer view');\n   }\n   if (chunk.byteLength === 0) {\n    throw new TypeError('chunk must have non-zero byteLength');\n   }\n   if (chunk.buffer.byteLength === 0) {\n    throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\n   }\n   if (this._closeRequested) {\n    throw new TypeError('stream is closed or draining');\n   }\n   var state = this._controlledReadableByteStream._state;\n   if (state !== 'readable') {\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be enqueued to\");\n   }\n   ReadableByteStreamControllerEnqueue(this, chunk);\n  };\n  ReadableByteStreamController.prototype.error = function (e) {\n   if (e === void 0) {\n    e = undefined;\n   }\n   if (!IsReadableByteStreamController(this)) {\n    throw byteStreamControllerBrandCheckException('error');\n   }\n   ReadableByteStreamControllerError(this, e);\n  };\n  ReadableByteStreamController.prototype[CancelSteps] = function (reason) {\n   ReadableByteStreamControllerClearPendingPullIntos(this);\n   ResetQueue(this);\n   var result = this._cancelAlgorithm(reason);\n   ReadableByteStreamControllerClearAlgorithms(this);\n   return result;\n  };\n  ReadableByteStreamController.prototype[PullSteps] = function (readRequest) {\n   var stream = this._controlledReadableByteStream;\n   if (this._queueTotalSize > 0) {\n    var entry = this._queue.shift();\n    this._queueTotalSize -= entry.byteLength;\n    ReadableByteStreamControllerHandleQueueDrain(this);\n    var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n    readRequest._chunkSteps(view);\n    return;\n   }\n   var autoAllocateChunkSize = this._autoAllocateChunkSize;\n   if (autoAllocateChunkSize !== undefined) {\n    var buffer = void 0;\n    try {\n     buffer = new ArrayBuffer(autoAllocateChunkSize);\n    } catch (bufferE) {\n     readRequest._errorSteps(bufferE);\n     return;\n    }\n    var pullIntoDescriptor = {\n     buffer: buffer,\n     bufferByteLength: autoAllocateChunkSize,\n     byteOffset: 0,\n     byteLength: autoAllocateChunkSize,\n     bytesFilled: 0,\n     elementSize: 1,\n     viewConstructor: Uint8Array,\n     readerType: 'default'\n    };\n    this._pendingPullIntos.push(pullIntoDescriptor);\n   }\n   ReadableStreamAddReadRequest(stream, readRequest);\n   ReadableByteStreamControllerCallPullIfNeeded(this);\n  };\n  return ReadableByteStreamController;\n }());\n Object.defineProperties(ReadableByteStreamController.prototype, {\n  close: { enumerable: true },\n  enqueue: { enumerable: true },\n  error: { enumerable: true },\n  byobRequest: { enumerable: true },\n  desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableByteStreamController',\n   configurable: true\n  });\n }\n function IsReadableByteStreamController(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n   return false;\n  }\n  return x instanceof ReadableByteStreamController;\n }\n function IsReadableStreamBYOBRequest(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n   return false;\n  }\n  return x instanceof ReadableStreamBYOBRequest;\n }\n function ReadableByteStreamControllerCallPullIfNeeded(controller) {\n  var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n  if (!shouldPull) {\n   return;\n  }\n  if (controller._pulling) {\n   controller._pullAgain = true;\n   return;\n  }\n  controller._pulling = true;\n  var pullPromise = controller._pullAlgorithm();\n  uponPromise(pullPromise, function () {\n   controller._pulling = false;\n   if (controller._pullAgain) {\n    controller._pullAgain = false;\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\n   }\n  }, function (e) {\n   ReadableByteStreamControllerError(controller, e);\n  });\n }\n function ReadableByteStreamControllerClearPendingPullIntos(controller) {\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n  controller._pendingPullIntos = new SimpleQueue();\n }\n function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n  var done = false;\n  if (stream._state === 'closed') {\n   done = true;\n  }\n  var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n  if (pullIntoDescriptor.readerType === 'default') {\n   ReadableStreamFulfillReadRequest(stream, filledView, done);\n  } else {\n   ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n  }\n }\n function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n  var bytesFilled = pullIntoDescriptor.bytesFilled;\n  var elementSize = pullIntoDescriptor.elementSize;\n  return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n }\n function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n  controller._queue.push({\n   buffer: buffer,\n   byteOffset: byteOffset,\n   byteLength: byteLength\n  });\n  controller._queueTotalSize += byteLength;\n }\n function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n  var elementSize = pullIntoDescriptor.elementSize;\n  var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n  var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n  var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n  var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n  var totalBytesToCopyRemaining = maxBytesToCopy;\n  var ready = false;\n  if (maxAlignedBytes > currentAlignedBytes) {\n   totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n   ready = true;\n  }\n  var queue = controller._queue;\n  while (totalBytesToCopyRemaining > 0) {\n   var headOfQueue = queue.peek();\n   var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n   var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n   CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n   if (headOfQueue.byteLength === bytesToCopy) {\n    queue.shift();\n   } else {\n    headOfQueue.byteOffset += bytesToCopy;\n    headOfQueue.byteLength -= bytesToCopy;\n   }\n   controller._queueTotalSize -= bytesToCopy;\n   ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n   totalBytesToCopyRemaining -= bytesToCopy;\n  }\n  return ready;\n }\n function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n  pullIntoDescriptor.bytesFilled += size;\n }\n function ReadableByteStreamControllerHandleQueueDrain(controller) {\n  if (controller._queueTotalSize === 0 && controller._closeRequested) {\n   ReadableByteStreamControllerClearAlgorithms(controller);\n   ReadableStreamClose(controller._controlledReadableByteStream);\n  } else {\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\n  }\n }\n function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n  if (controller._byobRequest === null) {\n   return;\n  }\n  controller._byobRequest._associatedReadableByteStreamController = undefined;\n  controller._byobRequest._view = null;\n  controller._byobRequest = null;\n }\n function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n  while (controller._pendingPullIntos.length > 0) {\n   if (controller._queueTotalSize === 0) {\n    return;\n   }\n   var pullIntoDescriptor = controller._pendingPullIntos.peek();\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n    ReadableByteStreamControllerShiftPendingPullInto(controller);\n    ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n   }\n  }\n }\n function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\n  var stream = controller._controlledReadableByteStream;\n  var elementSize = 1;\n  if (view.constructor !== DataView) {\n   elementSize = view.constructor.BYTES_PER_ELEMENT;\n  }\n  var ctor = view.constructor;\n  var buffer = TransferArrayBuffer(view.buffer);\n  var pullIntoDescriptor = {\n   buffer: buffer,\n   bufferByteLength: buffer.byteLength,\n   byteOffset: view.byteOffset,\n   byteLength: view.byteLength,\n   bytesFilled: 0,\n   elementSize: elementSize,\n   viewConstructor: ctor,\n   readerType: 'byob'\n  };\n  if (controller._pendingPullIntos.length > 0) {\n   controller._pendingPullIntos.push(pullIntoDescriptor);\n   ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n   return;\n  }\n  if (stream._state === 'closed') {\n   var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n   readIntoRequest._closeSteps(emptyView);\n   return;\n  }\n  if (controller._queueTotalSize > 0) {\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n    var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n    ReadableByteStreamControllerHandleQueueDrain(controller);\n    readIntoRequest._chunkSteps(filledView);\n    return;\n   }\n   if (controller._closeRequested) {\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n    ReadableByteStreamControllerError(controller, e);\n    readIntoRequest._errorSteps(e);\n    return;\n   }\n  }\n  controller._pendingPullIntos.push(pullIntoDescriptor);\n  ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n  var stream = controller._controlledReadableByteStream;\n  if (ReadableStreamHasBYOBReader(stream)) {\n   while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n    var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n    ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n   }\n  }\n }\n function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n  ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n  if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n   return;\n  }\n  ReadableByteStreamControllerShiftPendingPullInto(controller);\n  var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n  if (remainderSize > 0) {\n   var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n   var remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n  }\n  pullIntoDescriptor.bytesFilled -= remainderSize;\n  ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n  ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n }\n function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n  var firstDescriptor = controller._pendingPullIntos.peek();\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n  var state = controller._controlledReadableByteStream._state;\n  if (state === 'closed') {\n   ReadableByteStreamControllerRespondInClosedState(controller);\n  } else {\n   ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n  }\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerShiftPendingPullInto(controller) {\n  var descriptor = controller._pendingPullIntos.shift();\n  return descriptor;\n }\n function ReadableByteStreamControllerShouldCallPull(controller) {\n  var stream = controller._controlledReadableByteStream;\n  if (stream._state !== 'readable') {\n   return false;\n  }\n  if (controller._closeRequested) {\n   return false;\n  }\n  if (!controller._started) {\n   return false;\n  }\n  if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n   return true;\n  }\n  if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n   return true;\n  }\n  var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n  if (desiredSize > 0) {\n   return true;\n  }\n  return false;\n }\n function ReadableByteStreamControllerClearAlgorithms(controller) {\n  controller._pullAlgorithm = undefined;\n  controller._cancelAlgorithm = undefined;\n }\n function ReadableByteStreamControllerClose(controller) {\n  var stream = controller._controlledReadableByteStream;\n  if (controller._closeRequested || stream._state !== 'readable') {\n   return;\n  }\n  if (controller._queueTotalSize > 0) {\n   controller._closeRequested = true;\n   return;\n  }\n  if (controller._pendingPullIntos.length > 0) {\n   var firstPendingPullInto = controller._pendingPullIntos.peek();\n   if (firstPendingPullInto.bytesFilled > 0) {\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n    ReadableByteStreamControllerError(controller, e);\n    throw e;\n   }\n  }\n  ReadableByteStreamControllerClearAlgorithms(controller);\n  ReadableStreamClose(stream);\n }\n function ReadableByteStreamControllerEnqueue(controller, chunk) {\n  var stream = controller._controlledReadableByteStream;\n  if (controller._closeRequested || stream._state !== 'readable') {\n   return;\n  }\n  var buffer = chunk.buffer;\n  var byteOffset = chunk.byteOffset;\n  var byteLength = chunk.byteLength;\n  var transferredBuffer = TransferArrayBuffer(buffer);\n  if (controller._pendingPullIntos.length > 0) {\n   var firstPendingPullInto = controller._pendingPullIntos.peek();\n   if (IsDetachedBuffer(firstPendingPullInto.buffer));\n   firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n  }\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n  if (ReadableStreamHasDefaultReader(stream)) {\n   if (ReadableStreamGetNumReadRequests(stream) === 0) {\n    ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n   } else {\n    if (controller._pendingPullIntos.length > 0) {\n     ReadableByteStreamControllerShiftPendingPullInto(controller);\n    }\n    var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n    ReadableStreamFulfillReadRequest(stream, transferredView, false);\n   }\n  } else if (ReadableStreamHasBYOBReader(stream)) {\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n   ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n  } else {\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n  }\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n function ReadableByteStreamControllerError(controller, e) {\n  var stream = controller._controlledReadableByteStream;\n  if (stream._state !== 'readable') {\n   return;\n  }\n  ReadableByteStreamControllerClearPendingPullIntos(controller);\n  ResetQueue(controller);\n  ReadableByteStreamControllerClearAlgorithms(controller);\n  ReadableStreamError(stream, e);\n }\n function ReadableByteStreamControllerGetBYOBRequest(controller) {\n  if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n   var firstDescriptor = controller._pendingPullIntos.peek();\n   var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n   var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n   SetUpReadableStreamBYOBRequest(byobRequest, controller, view);\n   controller._byobRequest = byobRequest;\n  }\n  return controller._byobRequest;\n }\n function ReadableByteStreamControllerGetDesiredSize(controller) {\n  var state = controller._controlledReadableByteStream._state;\n  if (state === 'errored') {\n   return null;\n  }\n  if (state === 'closed') {\n   return 0;\n  }\n  return controller._strategyHWM - controller._queueTotalSize;\n }\n function ReadableByteStreamControllerRespond(controller, bytesWritten) {\n  var firstDescriptor = controller._pendingPullIntos.peek();\n  var state = controller._controlledReadableByteStream._state;\n  if (state === 'closed') {\n   if (bytesWritten !== 0) {\n    throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n   }\n  } else {\n   if (bytesWritten === 0) {\n    throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n   }\n   if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n    throw new RangeError('bytesWritten out of range');\n   }\n  }\n  firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n  ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n }\n function ReadableByteStreamControllerRespondWithNewView(controller, view) {\n  var firstDescriptor = controller._pendingPullIntos.peek();\n  var state = controller._controlledReadableByteStream._state;\n  if (state === 'closed') {\n   if (view.byteLength !== 0) {\n    throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n   }\n  } else {\n   if (view.byteLength === 0) {\n    throw new TypeError('The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream');\n   }\n  }\n  if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n   throw new RangeError('The region specified by view does not match byobRequest');\n  }\n  if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n   throw new RangeError('The buffer of view has different capacity than byobRequest');\n  }\n  if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n   throw new RangeError('The region specified by view is larger than byobRequest');\n  }\n  var viewByteLength = view.byteLength;\n  firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n  ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n }\n function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\n  controller._controlledReadableByteStream = stream;\n  controller._pullAgain = false;\n  controller._pulling = false;\n  controller._byobRequest = null;\n  controller._queue = controller._queueTotalSize = undefined;\n  ResetQueue(controller);\n  controller._closeRequested = false;\n  controller._started = false;\n  controller._strategyHWM = highWaterMark;\n  controller._pullAlgorithm = pullAlgorithm;\n  controller._cancelAlgorithm = cancelAlgorithm;\n  controller._autoAllocateChunkSize = autoAllocateChunkSize;\n  controller._pendingPullIntos = new SimpleQueue();\n  stream._readableStreamController = controller;\n  var startResult = startAlgorithm();\n  uponPromise(promiseResolvedWith(startResult), function () {\n   controller._started = true;\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\n  }, function (r) {\n   ReadableByteStreamControllerError(controller, r);\n  });\n }\n function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\n  var controller = Object.create(ReadableByteStreamController.prototype);\n  var startAlgorithm = function () {\n   return undefined;\n  };\n  var pullAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  var cancelAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  if (underlyingByteSource.start !== undefined) {\n   startAlgorithm = function () {\n    return underlyingByteSource.start(controller);\n   };\n  }\n  if (underlyingByteSource.pull !== undefined) {\n   pullAlgorithm = function () {\n    return underlyingByteSource.pull(controller);\n   };\n  }\n  if (underlyingByteSource.cancel !== undefined) {\n   cancelAlgorithm = function (reason) {\n    return underlyingByteSource.cancel(reason);\n   };\n  }\n  var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n  if (autoAllocateChunkSize === 0) {\n   throw new TypeError('autoAllocateChunkSize must be greater than 0');\n  }\n  SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\n }\n function SetUpReadableStreamBYOBRequest(request, controller, view) {\n  request._associatedReadableByteStreamController = controller;\n  request._view = view;\n }\n function byobRequestBrandCheckException(name) {\n  return new TypeError(\"ReadableStreamBYOBRequest.prototype.\" + name + \" can only be used on a ReadableStreamBYOBRequest\");\n }\n function byteStreamControllerBrandCheckException(name) {\n  return new TypeError(\"ReadableByteStreamController.prototype.\" + name + \" can only be used on a ReadableByteStreamController\");\n }\n function AcquireReadableStreamBYOBReader(stream) {\n  return new ReadableStreamBYOBReader(stream);\n }\n function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\n  stream._reader._readIntoRequests.push(readIntoRequest);\n }\n function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n  var reader = stream._reader;\n  var readIntoRequest = reader._readIntoRequests.shift();\n  if (done) {\n   readIntoRequest._closeSteps(chunk);\n  } else {\n   readIntoRequest._chunkSteps(chunk);\n  }\n }\n function ReadableStreamGetNumReadIntoRequests(stream) {\n  return stream._reader._readIntoRequests.length;\n }\n function ReadableStreamHasBYOBReader(stream) {\n  var reader = stream._reader;\n  if (reader === undefined) {\n   return false;\n  }\n  if (!IsReadableStreamBYOBReader(reader)) {\n   return false;\n  }\n  return true;\n }\n var ReadableStreamBYOBReader = (function () {\n  function ReadableStreamBYOBReader(stream) {\n   assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n   assertReadableStream(stream, 'First parameter');\n   if (IsReadableStreamLocked(stream)) {\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n   }\n   if (!IsReadableByteStreamController(stream._readableStreamController)) {\n    throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');\n   }\n   ReadableStreamReaderGenericInitialize(this, stream);\n   this._readIntoRequests = new SimpleQueue();\n  }\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, \"closed\", {\n   get: function () {\n    if (!IsReadableStreamBYOBReader(this)) {\n     return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n    }\n    return this._closedPromise;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableStreamBYOBReader.prototype.cancel = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsReadableStreamBYOBReader(this)) {\n    return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n   }\n   if (this._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('cancel'));\n   }\n   return ReadableStreamReaderGenericCancel(this, reason);\n  };\n  ReadableStreamBYOBReader.prototype.read = function (view) {\n   if (!IsReadableStreamBYOBReader(this)) {\n    return promiseRejectedWith(byobReaderBrandCheckException('read'));\n   }\n   if (!ArrayBuffer.isView(view)) {\n    return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n   }\n   if (view.byteLength === 0) {\n    return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n   }\n   if (view.buffer.byteLength === 0) {\n    return promiseRejectedWith(new TypeError(\"view's buffer must have non-zero byteLength\"));\n   }\n   if (IsDetachedBuffer(view.buffer));\n   if (this._ownerReadableStream === undefined) {\n    return promiseRejectedWith(readerLockException('read from'));\n   }\n   var resolvePromise;\n   var rejectPromise;\n   var promise = newPromise(function (resolve, reject) {\n    resolvePromise = resolve;\n    rejectPromise = reject;\n   });\n   var readIntoRequest = {\n    _chunkSteps: function (chunk) {\n     return resolvePromise({\n      value: chunk,\n      done: false\n     });\n    },\n    _closeSteps: function (chunk) {\n     return resolvePromise({\n      value: chunk,\n      done: true\n     });\n    },\n    _errorSteps: function (e) {\n     return rejectPromise(e);\n    }\n   };\n   ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n   return promise;\n  };\n  ReadableStreamBYOBReader.prototype.releaseLock = function () {\n   if (!IsReadableStreamBYOBReader(this)) {\n    throw byobReaderBrandCheckException('releaseLock');\n   }\n   if (this._ownerReadableStream === undefined) {\n    return;\n   }\n   if (this._readIntoRequests.length > 0) {\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n   }\n   ReadableStreamReaderGenericRelease(this);\n  };\n  return ReadableStreamBYOBReader;\n }());\n Object.defineProperties(ReadableStreamBYOBReader.prototype, {\n  cancel: { enumerable: true },\n  read: { enumerable: true },\n  releaseLock: { enumerable: true },\n  closed: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableStreamBYOBReader',\n   configurable: true\n  });\n }\n function IsReadableStreamBYOBReader(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n   return false;\n  }\n  return x instanceof ReadableStreamBYOBReader;\n }\n function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\n  var stream = reader._ownerReadableStream;\n  stream._disturbed = true;\n  if (stream._state === 'errored') {\n   readIntoRequest._errorSteps(stream._storedError);\n  } else {\n   ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\n  }\n }\n function byobReaderBrandCheckException(name) {\n  return new TypeError(\"ReadableStreamBYOBReader.prototype.\" + name + \" can only be used on a ReadableStreamBYOBReader\");\n }\n function ExtractHighWaterMark(strategy, defaultHWM) {\n  var highWaterMark = strategy.highWaterMark;\n  if (highWaterMark === undefined) {\n   return defaultHWM;\n  }\n  if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n   throw new RangeError('Invalid highWaterMark');\n  }\n  return highWaterMark;\n }\n function ExtractSizeAlgorithm(strategy) {\n  var size = strategy.size;\n  if (!size) {\n   return function () {\n    return 1;\n   };\n  }\n  return size;\n }\n function convertQueuingStrategy(init, context) {\n  assertDictionary(init, context);\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n  var size = init === null || init === void 0 ? void 0 : init.size;\n  return {\n   highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n   size: size === undefined ? undefined : convertQueuingStrategySize(size, context + \" has member 'size' that\")\n  };\n }\n function convertQueuingStrategySize(fn, context) {\n  assertFunction(fn, context);\n  return function (chunk) {\n   return convertUnrestrictedDouble(fn(chunk));\n  };\n }\n function convertUnderlyingSink(original, context) {\n  assertDictionary(original, context);\n  var abort = original === null || original === void 0 ? void 0 : original.abort;\n  var close = original === null || original === void 0 ? void 0 : original.close;\n  var start = original === null || original === void 0 ? void 0 : original.start;\n  var type = original === null || original === void 0 ? void 0 : original.type;\n  var write = original === null || original === void 0 ? void 0 : original.write;\n  return {\n   abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + \" has member 'abort' that\"),\n   close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + \" has member 'close' that\"),\n   start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + \" has member 'start' that\"),\n   write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + \" has member 'write' that\"),\n   type: type\n  };\n }\n function convertUnderlyingSinkAbortCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (reason) {\n   return promiseCall(fn, original, [reason]);\n  };\n }\n function convertUnderlyingSinkCloseCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function () {\n   return promiseCall(fn, original, []);\n  };\n }\n function convertUnderlyingSinkStartCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (controller) {\n   return reflectCall(fn, original, [controller]);\n  };\n }\n function convertUnderlyingSinkWriteCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (chunk, controller) {\n   return promiseCall(fn, original, [\n    chunk,\n    controller\n   ]);\n  };\n }\n function assertWritableStream(x, context) {\n  if (!IsWritableStream(x)) {\n   throw new TypeError(context + \" is not a WritableStream.\");\n  }\n }\n function isAbortSignal(value) {\n  if (typeof value !== 'object' || value === null) {\n   return false;\n  }\n  try {\n   return typeof value.aborted === 'boolean';\n  } catch (_a) {\n   return false;\n  }\n }\n var supportsAbortController = typeof AbortController === 'function';\n function createAbortController() {\n  if (supportsAbortController) {\n   return new AbortController();\n  }\n  return undefined;\n }\n var WritableStream = (function () {\n  function WritableStream(rawUnderlyingSink, rawStrategy) {\n   if (rawUnderlyingSink === void 0) {\n    rawUnderlyingSink = {};\n   }\n   if (rawStrategy === void 0) {\n    rawStrategy = {};\n   }\n   if (rawUnderlyingSink === undefined) {\n    rawUnderlyingSink = null;\n   } else {\n    assertObject(rawUnderlyingSink, 'First parameter');\n   }\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n   var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n   InitializeWritableStream(this);\n   var type = underlyingSink.type;\n   if (type !== undefined) {\n    throw new RangeError('Invalid type is specified');\n   }\n   var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n   var highWaterMark = ExtractHighWaterMark(strategy, 1);\n   SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n  }\n  Object.defineProperty(WritableStream.prototype, \"locked\", {\n   get: function () {\n    if (!IsWritableStream(this)) {\n     throw streamBrandCheckException$2('locked');\n    }\n    return IsWritableStreamLocked(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  WritableStream.prototype.abort = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsWritableStream(this)) {\n    return promiseRejectedWith(streamBrandCheckException$2('abort'));\n   }\n   if (IsWritableStreamLocked(this)) {\n    return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n   }\n   return WritableStreamAbort(this, reason);\n  };\n  WritableStream.prototype.close = function () {\n   if (!IsWritableStream(this)) {\n    return promiseRejectedWith(streamBrandCheckException$2('close'));\n   }\n   if (IsWritableStreamLocked(this)) {\n    return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n   }\n   if (WritableStreamCloseQueuedOrInFlight(this)) {\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n   }\n   return WritableStreamClose(this);\n  };\n  WritableStream.prototype.getWriter = function () {\n   if (!IsWritableStream(this)) {\n    throw streamBrandCheckException$2('getWriter');\n   }\n   return AcquireWritableStreamDefaultWriter(this);\n  };\n  return WritableStream;\n }());\n Object.defineProperties(WritableStream.prototype, {\n  abort: { enumerable: true },\n  close: { enumerable: true },\n  getWriter: { enumerable: true },\n  locked: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\n   value: 'WritableStream',\n   configurable: true\n  });\n }\n function AcquireWritableStreamDefaultWriter(stream) {\n  return new WritableStreamDefaultWriter(stream);\n }\n function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n  if (highWaterMark === void 0) {\n   highWaterMark = 1;\n  }\n  if (sizeAlgorithm === void 0) {\n   sizeAlgorithm = function () {\n    return 1;\n   };\n  }\n  var stream = Object.create(WritableStream.prototype);\n  InitializeWritableStream(stream);\n  var controller = Object.create(WritableStreamDefaultController.prototype);\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n  return stream;\n }\n function InitializeWritableStream(stream) {\n  stream._state = 'writable';\n  stream._storedError = undefined;\n  stream._writer = undefined;\n  stream._writableStreamController = undefined;\n  stream._writeRequests = new SimpleQueue();\n  stream._inFlightWriteRequest = undefined;\n  stream._closeRequest = undefined;\n  stream._inFlightCloseRequest = undefined;\n  stream._pendingAbortRequest = undefined;\n  stream._backpressure = false;\n }\n function IsWritableStream(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n   return false;\n  }\n  return x instanceof WritableStream;\n }\n function IsWritableStreamLocked(stream) {\n  if (stream._writer === undefined) {\n   return false;\n  }\n  return true;\n }\n function WritableStreamAbort(stream, reason) {\n  var _a;\n  if (stream._state === 'closed' || stream._state === 'errored') {\n   return promiseResolvedWith(undefined);\n  }\n  stream._writableStreamController._abortReason = reason;\n  (_a = stream._writableStreamController._abortController) === null || _a === void 0 ? void 0 : _a.abort();\n  var state = stream._state;\n  if (state === 'closed' || state === 'errored') {\n   return promiseResolvedWith(undefined);\n  }\n  if (stream._pendingAbortRequest !== undefined) {\n   return stream._pendingAbortRequest._promise;\n  }\n  var wasAlreadyErroring = false;\n  if (state === 'erroring') {\n   wasAlreadyErroring = true;\n   reason = undefined;\n  }\n  var promise = newPromise(function (resolve, reject) {\n   stream._pendingAbortRequest = {\n    _promise: undefined,\n    _resolve: resolve,\n    _reject: reject,\n    _reason: reason,\n    _wasAlreadyErroring: wasAlreadyErroring\n   };\n  });\n  stream._pendingAbortRequest._promise = promise;\n  if (!wasAlreadyErroring) {\n   WritableStreamStartErroring(stream, reason);\n  }\n  return promise;\n }\n function WritableStreamClose(stream) {\n  var state = stream._state;\n  if (state === 'closed' || state === 'errored') {\n   return promiseRejectedWith(new TypeError(\"The stream (in \" + state + \" state) is not in the writable state and cannot be closed\"));\n  }\n  var promise = newPromise(function (resolve, reject) {\n   var closeRequest = {\n    _resolve: resolve,\n    _reject: reject\n   };\n   stream._closeRequest = closeRequest;\n  });\n  var writer = stream._writer;\n  if (writer !== undefined && stream._backpressure && state === 'writable') {\n   defaultWriterReadyPromiseResolve(writer);\n  }\n  WritableStreamDefaultControllerClose(stream._writableStreamController);\n  return promise;\n }\n function WritableStreamAddWriteRequest(stream) {\n  var promise = newPromise(function (resolve, reject) {\n   var writeRequest = {\n    _resolve: resolve,\n    _reject: reject\n   };\n   stream._writeRequests.push(writeRequest);\n  });\n  return promise;\n }\n function WritableStreamDealWithRejection(stream, error) {\n  var state = stream._state;\n  if (state === 'writable') {\n   WritableStreamStartErroring(stream, error);\n   return;\n  }\n  WritableStreamFinishErroring(stream);\n }\n function WritableStreamStartErroring(stream, reason) {\n  var controller = stream._writableStreamController;\n  stream._state = 'erroring';\n  stream._storedError = reason;\n  var writer = stream._writer;\n  if (writer !== undefined) {\n   WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n  }\n  if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n   WritableStreamFinishErroring(stream);\n  }\n }\n function WritableStreamFinishErroring(stream) {\n  stream._state = 'errored';\n  stream._writableStreamController[ErrorSteps]();\n  var storedError = stream._storedError;\n  stream._writeRequests.forEach(function (writeRequest) {\n   writeRequest._reject(storedError);\n  });\n  stream._writeRequests = new SimpleQueue();\n  if (stream._pendingAbortRequest === undefined) {\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n   return;\n  }\n  var abortRequest = stream._pendingAbortRequest;\n  stream._pendingAbortRequest = undefined;\n  if (abortRequest._wasAlreadyErroring) {\n   abortRequest._reject(storedError);\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n   return;\n  }\n  var promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n  uponPromise(promise, function () {\n   abortRequest._resolve();\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n  }, function (reason) {\n   abortRequest._reject(reason);\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n  });\n }\n function WritableStreamFinishInFlightWrite(stream) {\n  stream._inFlightWriteRequest._resolve(undefined);\n  stream._inFlightWriteRequest = undefined;\n }\n function WritableStreamFinishInFlightWriteWithError(stream, error) {\n  stream._inFlightWriteRequest._reject(error);\n  stream._inFlightWriteRequest = undefined;\n  WritableStreamDealWithRejection(stream, error);\n }\n function WritableStreamFinishInFlightClose(stream) {\n  stream._inFlightCloseRequest._resolve(undefined);\n  stream._inFlightCloseRequest = undefined;\n  var state = stream._state;\n  if (state === 'erroring') {\n   stream._storedError = undefined;\n   if (stream._pendingAbortRequest !== undefined) {\n    stream._pendingAbortRequest._resolve();\n    stream._pendingAbortRequest = undefined;\n   }\n  }\n  stream._state = 'closed';\n  var writer = stream._writer;\n  if (writer !== undefined) {\n   defaultWriterClosedPromiseResolve(writer);\n  }\n }\n function WritableStreamFinishInFlightCloseWithError(stream, error) {\n  stream._inFlightCloseRequest._reject(error);\n  stream._inFlightCloseRequest = undefined;\n  if (stream._pendingAbortRequest !== undefined) {\n   stream._pendingAbortRequest._reject(error);\n   stream._pendingAbortRequest = undefined;\n  }\n  WritableStreamDealWithRejection(stream, error);\n }\n function WritableStreamCloseQueuedOrInFlight(stream) {\n  if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n   return false;\n  }\n  return true;\n }\n function WritableStreamHasOperationMarkedInFlight(stream) {\n  if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n   return false;\n  }\n  return true;\n }\n function WritableStreamMarkCloseRequestInFlight(stream) {\n  stream._inFlightCloseRequest = stream._closeRequest;\n  stream._closeRequest = undefined;\n }\n function WritableStreamMarkFirstWriteRequestInFlight(stream) {\n  stream._inFlightWriteRequest = stream._writeRequests.shift();\n }\n function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n  if (stream._closeRequest !== undefined) {\n   stream._closeRequest._reject(stream._storedError);\n   stream._closeRequest = undefined;\n  }\n  var writer = stream._writer;\n  if (writer !== undefined) {\n   defaultWriterClosedPromiseReject(writer, stream._storedError);\n  }\n }\n function WritableStreamUpdateBackpressure(stream, backpressure) {\n  var writer = stream._writer;\n  if (writer !== undefined && backpressure !== stream._backpressure) {\n   if (backpressure) {\n    defaultWriterReadyPromiseReset(writer);\n   } else {\n    defaultWriterReadyPromiseResolve(writer);\n   }\n  }\n  stream._backpressure = backpressure;\n }\n var WritableStreamDefaultWriter = (function () {\n  function WritableStreamDefaultWriter(stream) {\n   assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n   assertWritableStream(stream, 'First parameter');\n   if (IsWritableStreamLocked(stream)) {\n    throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n   }\n   this._ownerWritableStream = stream;\n   stream._writer = this;\n   var state = stream._state;\n   if (state === 'writable') {\n    if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n     defaultWriterReadyPromiseInitialize(this);\n    } else {\n     defaultWriterReadyPromiseInitializeAsResolved(this);\n    }\n    defaultWriterClosedPromiseInitialize(this);\n   } else if (state === 'erroring') {\n    defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n    defaultWriterClosedPromiseInitialize(this);\n   } else if (state === 'closed') {\n    defaultWriterReadyPromiseInitializeAsResolved(this);\n    defaultWriterClosedPromiseInitializeAsResolved(this);\n   } else {\n    var storedError = stream._storedError;\n    defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n    defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n   }\n  }\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"closed\", {\n   get: function () {\n    if (!IsWritableStreamDefaultWriter(this)) {\n     return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n    }\n    return this._closedPromise;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"desiredSize\", {\n   get: function () {\n    if (!IsWritableStreamDefaultWriter(this)) {\n     throw defaultWriterBrandCheckException('desiredSize');\n    }\n    if (this._ownerWritableStream === undefined) {\n     throw defaultWriterLockException('desiredSize');\n    }\n    return WritableStreamDefaultWriterGetDesiredSize(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"ready\", {\n   get: function () {\n    if (!IsWritableStreamDefaultWriter(this)) {\n     return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n    }\n    return this._readyPromise;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  WritableStreamDefaultWriter.prototype.abort = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsWritableStreamDefaultWriter(this)) {\n    return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n   }\n   if (this._ownerWritableStream === undefined) {\n    return promiseRejectedWith(defaultWriterLockException('abort'));\n   }\n   return WritableStreamDefaultWriterAbort(this, reason);\n  };\n  WritableStreamDefaultWriter.prototype.close = function () {\n   if (!IsWritableStreamDefaultWriter(this)) {\n    return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n   }\n   var stream = this._ownerWritableStream;\n   if (stream === undefined) {\n    return promiseRejectedWith(defaultWriterLockException('close'));\n   }\n   if (WritableStreamCloseQueuedOrInFlight(stream)) {\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n   }\n   return WritableStreamDefaultWriterClose(this);\n  };\n  WritableStreamDefaultWriter.prototype.releaseLock = function () {\n   if (!IsWritableStreamDefaultWriter(this)) {\n    throw defaultWriterBrandCheckException('releaseLock');\n   }\n   var stream = this._ownerWritableStream;\n   if (stream === undefined) {\n    return;\n   }\n   WritableStreamDefaultWriterRelease(this);\n  };\n  WritableStreamDefaultWriter.prototype.write = function (chunk) {\n   if (chunk === void 0) {\n    chunk = undefined;\n   }\n   if (!IsWritableStreamDefaultWriter(this)) {\n    return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n   }\n   if (this._ownerWritableStream === undefined) {\n    return promiseRejectedWith(defaultWriterLockException('write to'));\n   }\n   return WritableStreamDefaultWriterWrite(this, chunk);\n  };\n  return WritableStreamDefaultWriter;\n }());\n Object.defineProperties(WritableStreamDefaultWriter.prototype, {\n  abort: { enumerable: true },\n  close: { enumerable: true },\n  releaseLock: { enumerable: true },\n  write: { enumerable: true },\n  closed: { enumerable: true },\n  desiredSize: { enumerable: true },\n  ready: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\n   value: 'WritableStreamDefaultWriter',\n   configurable: true\n  });\n }\n function IsWritableStreamDefaultWriter(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n   return false;\n  }\n  return x instanceof WritableStreamDefaultWriter;\n }\n function WritableStreamDefaultWriterAbort(writer, reason) {\n  var stream = writer._ownerWritableStream;\n  return WritableStreamAbort(stream, reason);\n }\n function WritableStreamDefaultWriterClose(writer) {\n  var stream = writer._ownerWritableStream;\n  return WritableStreamClose(stream);\n }\n function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n  var stream = writer._ownerWritableStream;\n  var state = stream._state;\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n   return promiseResolvedWith(undefined);\n  }\n  if (state === 'errored') {\n   return promiseRejectedWith(stream._storedError);\n  }\n  return WritableStreamDefaultWriterClose(writer);\n }\n function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n  if (writer._closedPromiseState === 'pending') {\n   defaultWriterClosedPromiseReject(writer, error);\n  } else {\n   defaultWriterClosedPromiseResetToRejected(writer, error);\n  }\n }\n function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n  if (writer._readyPromiseState === 'pending') {\n   defaultWriterReadyPromiseReject(writer, error);\n  } else {\n   defaultWriterReadyPromiseResetToRejected(writer, error);\n  }\n }\n function WritableStreamDefaultWriterGetDesiredSize(writer) {\n  var stream = writer._ownerWritableStream;\n  var state = stream._state;\n  if (state === 'errored' || state === 'erroring') {\n   return null;\n  }\n  if (state === 'closed') {\n   return 0;\n  }\n  return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n }\n function WritableStreamDefaultWriterRelease(writer) {\n  var stream = writer._ownerWritableStream;\n  var releasedError = new TypeError(\"Writer was released and can no longer be used to monitor the stream's closedness\");\n  WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n  WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n  stream._writer = undefined;\n  writer._ownerWritableStream = undefined;\n }\n function WritableStreamDefaultWriterWrite(writer, chunk) {\n  var stream = writer._ownerWritableStream;\n  var controller = stream._writableStreamController;\n  var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n  if (stream !== writer._ownerWritableStream) {\n   return promiseRejectedWith(defaultWriterLockException('write to'));\n  }\n  var state = stream._state;\n  if (state === 'errored') {\n   return promiseRejectedWith(stream._storedError);\n  }\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n   return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n  }\n  if (state === 'erroring') {\n   return promiseRejectedWith(stream._storedError);\n  }\n  var promise = WritableStreamAddWriteRequest(stream);\n  WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n  return promise;\n }\n var closeSentinel = {};\n var WritableStreamDefaultController = (function () {\n  function WritableStreamDefaultController() {\n   throw new TypeError('Illegal constructor');\n  }\n  Object.defineProperty(WritableStreamDefaultController.prototype, \"abortReason\", {\n   get: function () {\n    if (!IsWritableStreamDefaultController(this)) {\n     throw defaultControllerBrandCheckException$2('abortReason');\n    }\n    return this._abortReason;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(WritableStreamDefaultController.prototype, \"signal\", {\n   get: function () {\n    if (!IsWritableStreamDefaultController(this)) {\n     throw defaultControllerBrandCheckException$2('signal');\n    }\n    if (this._abortController === undefined) {\n     throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n    }\n    return this._abortController.signal;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  WritableStreamDefaultController.prototype.error = function (e) {\n   if (e === void 0) {\n    e = undefined;\n   }\n   if (!IsWritableStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException$2('error');\n   }\n   var state = this._controlledWritableStream._state;\n   if (state !== 'writable') {\n    return;\n   }\n   WritableStreamDefaultControllerError(this, e);\n  };\n  WritableStreamDefaultController.prototype[AbortSteps] = function (reason) {\n   var result = this._abortAlgorithm(reason);\n   WritableStreamDefaultControllerClearAlgorithms(this);\n   return result;\n  };\n  WritableStreamDefaultController.prototype[ErrorSteps] = function () {\n   ResetQueue(this);\n  };\n  return WritableStreamDefaultController;\n }());\n Object.defineProperties(WritableStreamDefaultController.prototype, {\n  abortReason: { enumerable: true },\n  signal: { enumerable: true },\n  error: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n   value: 'WritableStreamDefaultController',\n   configurable: true\n  });\n }\n function IsWritableStreamDefaultController(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n   return false;\n  }\n  return x instanceof WritableStreamDefaultController;\n }\n function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n  controller._controlledWritableStream = stream;\n  stream._writableStreamController = controller;\n  controller._queue = undefined;\n  controller._queueTotalSize = undefined;\n  ResetQueue(controller);\n  controller._abortReason = undefined;\n  controller._abortController = createAbortController();\n  controller._started = false;\n  controller._strategySizeAlgorithm = sizeAlgorithm;\n  controller._strategyHWM = highWaterMark;\n  controller._writeAlgorithm = writeAlgorithm;\n  controller._closeAlgorithm = closeAlgorithm;\n  controller._abortAlgorithm = abortAlgorithm;\n  var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n  WritableStreamUpdateBackpressure(stream, backpressure);\n  var startResult = startAlgorithm();\n  var startPromise = promiseResolvedWith(startResult);\n  uponPromise(startPromise, function () {\n   controller._started = true;\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n  }, function (r) {\n   controller._started = true;\n   WritableStreamDealWithRejection(stream, r);\n  });\n }\n function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\n  var controller = Object.create(WritableStreamDefaultController.prototype);\n  var startAlgorithm = function () {\n   return undefined;\n  };\n  var writeAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  var closeAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  var abortAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  if (underlyingSink.start !== undefined) {\n   startAlgorithm = function () {\n    return underlyingSink.start(controller);\n   };\n  }\n  if (underlyingSink.write !== undefined) {\n   writeAlgorithm = function (chunk) {\n    return underlyingSink.write(chunk, controller);\n   };\n  }\n  if (underlyingSink.close !== undefined) {\n   closeAlgorithm = function () {\n    return underlyingSink.close();\n   };\n  }\n  if (underlyingSink.abort !== undefined) {\n   abortAlgorithm = function (reason) {\n    return underlyingSink.abort(reason);\n   };\n  }\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n }\n function WritableStreamDefaultControllerClearAlgorithms(controller) {\n  controller._writeAlgorithm = undefined;\n  controller._closeAlgorithm = undefined;\n  controller._abortAlgorithm = undefined;\n  controller._strategySizeAlgorithm = undefined;\n }\n function WritableStreamDefaultControllerClose(controller) {\n  EnqueueValueWithSize(controller, closeSentinel, 0);\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }\n function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n  try {\n   return controller._strategySizeAlgorithm(chunk);\n  } catch (chunkSizeE) {\n   WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n   return 1;\n  }\n }\n function WritableStreamDefaultControllerGetDesiredSize(controller) {\n  return controller._strategyHWM - controller._queueTotalSize;\n }\n function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n  try {\n   EnqueueValueWithSize(controller, chunk, chunkSize);\n  } catch (enqueueE) {\n   WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n   return;\n  }\n  var stream = controller._controlledWritableStream;\n  if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n   var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n   WritableStreamUpdateBackpressure(stream, backpressure);\n  }\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n }\n function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n  var stream = controller._controlledWritableStream;\n  if (!controller._started) {\n   return;\n  }\n  if (stream._inFlightWriteRequest !== undefined) {\n   return;\n  }\n  var state = stream._state;\n  if (state === 'erroring') {\n   WritableStreamFinishErroring(stream);\n   return;\n  }\n  if (controller._queue.length === 0) {\n   return;\n  }\n  var value = PeekQueueValue(controller);\n  if (value === closeSentinel) {\n   WritableStreamDefaultControllerProcessClose(controller);\n  } else {\n   WritableStreamDefaultControllerProcessWrite(controller, value);\n  }\n }\n function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n  if (controller._controlledWritableStream._state === 'writable') {\n   WritableStreamDefaultControllerError(controller, error);\n  }\n }\n function WritableStreamDefaultControllerProcessClose(controller) {\n  var stream = controller._controlledWritableStream;\n  WritableStreamMarkCloseRequestInFlight(stream);\n  DequeueValue(controller);\n  var sinkClosePromise = controller._closeAlgorithm();\n  WritableStreamDefaultControllerClearAlgorithms(controller);\n  uponPromise(sinkClosePromise, function () {\n   WritableStreamFinishInFlightClose(stream);\n  }, function (reason) {\n   WritableStreamFinishInFlightCloseWithError(stream, reason);\n  });\n }\n function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n  var stream = controller._controlledWritableStream;\n  WritableStreamMarkFirstWriteRequestInFlight(stream);\n  var sinkWritePromise = controller._writeAlgorithm(chunk);\n  uponPromise(sinkWritePromise, function () {\n   WritableStreamFinishInFlightWrite(stream);\n   var state = stream._state;\n   DequeueValue(controller);\n   if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n    var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n    WritableStreamUpdateBackpressure(stream, backpressure);\n   }\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n  }, function (reason) {\n   if (stream._state === 'writable') {\n    WritableStreamDefaultControllerClearAlgorithms(controller);\n   }\n   WritableStreamFinishInFlightWriteWithError(stream, reason);\n  });\n }\n function WritableStreamDefaultControllerGetBackpressure(controller) {\n  var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n  return desiredSize <= 0;\n }\n function WritableStreamDefaultControllerError(controller, error) {\n  var stream = controller._controlledWritableStream;\n  WritableStreamDefaultControllerClearAlgorithms(controller);\n  WritableStreamStartErroring(stream, error);\n }\n function streamBrandCheckException$2(name) {\n  return new TypeError(\"WritableStream.prototype.\" + name + \" can only be used on a WritableStream\");\n }\n function defaultControllerBrandCheckException$2(name) {\n  return new TypeError(\"WritableStreamDefaultController.prototype.\" + name + \" can only be used on a WritableStreamDefaultController\");\n }\n function defaultWriterBrandCheckException(name) {\n  return new TypeError(\"WritableStreamDefaultWriter.prototype.\" + name + \" can only be used on a WritableStreamDefaultWriter\");\n }\n function defaultWriterLockException(name) {\n  return new TypeError('Cannot ' + name + ' a stream using a released writer');\n }\n function defaultWriterClosedPromiseInitialize(writer) {\n  writer._closedPromise = newPromise(function (resolve, reject) {\n   writer._closedPromise_resolve = resolve;\n   writer._closedPromise_reject = reject;\n   writer._closedPromiseState = 'pending';\n  });\n }\n function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n  defaultWriterClosedPromiseInitialize(writer);\n  defaultWriterClosedPromiseReject(writer, reason);\n }\n function defaultWriterClosedPromiseInitializeAsResolved(writer) {\n  defaultWriterClosedPromiseInitialize(writer);\n  defaultWriterClosedPromiseResolve(writer);\n }\n function defaultWriterClosedPromiseReject(writer, reason) {\n  if (writer._closedPromise_reject === undefined) {\n   return;\n  }\n  setPromiseIsHandledToTrue(writer._closedPromise);\n  writer._closedPromise_reject(reason);\n  writer._closedPromise_resolve = undefined;\n  writer._closedPromise_reject = undefined;\n  writer._closedPromiseState = 'rejected';\n }\n function defaultWriterClosedPromiseResetToRejected(writer, reason) {\n  defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n }\n function defaultWriterClosedPromiseResolve(writer) {\n  if (writer._closedPromise_resolve === undefined) {\n   return;\n  }\n  writer._closedPromise_resolve(undefined);\n  writer._closedPromise_resolve = undefined;\n  writer._closedPromise_reject = undefined;\n  writer._closedPromiseState = 'resolved';\n }\n function defaultWriterReadyPromiseInitialize(writer) {\n  writer._readyPromise = newPromise(function (resolve, reject) {\n   writer._readyPromise_resolve = resolve;\n   writer._readyPromise_reject = reject;\n  });\n  writer._readyPromiseState = 'pending';\n }\n function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n  defaultWriterReadyPromiseInitialize(writer);\n  defaultWriterReadyPromiseReject(writer, reason);\n }\n function defaultWriterReadyPromiseInitializeAsResolved(writer) {\n  defaultWriterReadyPromiseInitialize(writer);\n  defaultWriterReadyPromiseResolve(writer);\n }\n function defaultWriterReadyPromiseReject(writer, reason) {\n  if (writer._readyPromise_reject === undefined) {\n   return;\n  }\n  setPromiseIsHandledToTrue(writer._readyPromise);\n  writer._readyPromise_reject(reason);\n  writer._readyPromise_resolve = undefined;\n  writer._readyPromise_reject = undefined;\n  writer._readyPromiseState = 'rejected';\n }\n function defaultWriterReadyPromiseReset(writer) {\n  defaultWriterReadyPromiseInitialize(writer);\n }\n function defaultWriterReadyPromiseResetToRejected(writer, reason) {\n  defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n }\n function defaultWriterReadyPromiseResolve(writer) {\n  if (writer._readyPromise_resolve === undefined) {\n   return;\n  }\n  writer._readyPromise_resolve(undefined);\n  writer._readyPromise_resolve = undefined;\n  writer._readyPromise_reject = undefined;\n  writer._readyPromiseState = 'fulfilled';\n }\n var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\n function isDOMExceptionConstructor(ctor) {\n  if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n   return false;\n  }\n  try {\n   new ctor();\n   return true;\n  } catch (_a) {\n   return false;\n  }\n }\n function createDOMExceptionPolyfill() {\n  var ctor = function DOMException(message, name) {\n   this.message = message || '';\n   this.name = name || 'Error';\n   if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n   }\n  };\n  ctor.prototype = Object.create(Error.prototype);\n  Object.defineProperty(ctor.prototype, 'constructor', {\n   value: ctor,\n   writable: true,\n   configurable: true\n  });\n  return ctor;\n }\n var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\n  var reader = AcquireReadableStreamDefaultReader(source);\n  var writer = AcquireWritableStreamDefaultWriter(dest);\n  source._disturbed = true;\n  var shuttingDown = false;\n  var currentWrite = promiseResolvedWith(undefined);\n  return newPromise(function (resolve, reject) {\n   var abortAlgorithm;\n   if (signal !== undefined) {\n    abortAlgorithm = function () {\n     var error = new DOMException$1('Aborted', 'AbortError');\n     var actions = [];\n     if (!preventAbort) {\n      actions.push(function () {\n       if (dest._state === 'writable') {\n        return WritableStreamAbort(dest, error);\n       }\n       return promiseResolvedWith(undefined);\n      });\n     }\n     if (!preventCancel) {\n      actions.push(function () {\n       if (source._state === 'readable') {\n        return ReadableStreamCancel(source, error);\n       }\n       return promiseResolvedWith(undefined);\n      });\n     }\n     shutdownWithAction(function () {\n      return Promise.all(actions.map(function (action) {\n       return action();\n      }));\n     }, true, error);\n    };\n    if (signal.aborted) {\n     abortAlgorithm();\n     return;\n    }\n    signal.addEventListener('abort', abortAlgorithm);\n   }\n   function pipeLoop() {\n    return newPromise(function (resolveLoop, rejectLoop) {\n     function next(done) {\n      if (done) {\n       resolveLoop();\n      } else {\n       PerformPromiseThen(pipeStep(), next, rejectLoop);\n      }\n     }\n     next(false);\n    });\n   }\n   function pipeStep() {\n    if (shuttingDown) {\n     return promiseResolvedWith(true);\n    }\n    return PerformPromiseThen(writer._readyPromise, function () {\n     return newPromise(function (resolveRead, rejectRead) {\n      ReadableStreamDefaultReaderRead(reader, {\n       _chunkSteps: function (chunk) {\n        currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n        resolveRead(false);\n       },\n       _closeSteps: function () {\n        return resolveRead(true);\n       },\n       _errorSteps: rejectRead\n      });\n     });\n    });\n   }\n   isOrBecomesErrored(source, reader._closedPromise, function (storedError) {\n    if (!preventAbort) {\n     shutdownWithAction(function () {\n      return WritableStreamAbort(dest, storedError);\n     }, true, storedError);\n    } else {\n     shutdown(true, storedError);\n    }\n   });\n   isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\n    if (!preventCancel) {\n     shutdownWithAction(function () {\n      return ReadableStreamCancel(source, storedError);\n     }, true, storedError);\n    } else {\n     shutdown(true, storedError);\n    }\n   });\n   isOrBecomesClosed(source, reader._closedPromise, function () {\n    if (!preventClose) {\n     shutdownWithAction(function () {\n      return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);\n     });\n    } else {\n     shutdown();\n    }\n   });\n   if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n    var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it');\n    if (!preventCancel) {\n     shutdownWithAction(function () {\n      return ReadableStreamCancel(source, destClosed_1);\n     }, true, destClosed_1);\n    } else {\n     shutdown(true, destClosed_1);\n    }\n   }\n   setPromiseIsHandledToTrue(pipeLoop());\n   function waitForWritesToFinish() {\n    var oldCurrentWrite = currentWrite;\n    return PerformPromiseThen(currentWrite, function () {\n     return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;\n    });\n   }\n   function isOrBecomesErrored(stream, promise, action) {\n    if (stream._state === 'errored') {\n     action(stream._storedError);\n    } else {\n     uponRejection(promise, action);\n    }\n   }\n   function isOrBecomesClosed(stream, promise, action) {\n    if (stream._state === 'closed') {\n     action();\n    } else {\n     uponFulfillment(promise, action);\n    }\n   }\n   function shutdownWithAction(action, originalIsError, originalError) {\n    if (shuttingDown) {\n     return;\n    }\n    shuttingDown = true;\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n     uponFulfillment(waitForWritesToFinish(), doTheRest);\n    } else {\n     doTheRest();\n    }\n    function doTheRest() {\n     uponPromise(action(), function () {\n      return finalize(originalIsError, originalError);\n     }, function (newError) {\n      return finalize(true, newError);\n     });\n    }\n   }\n   function shutdown(isError, error) {\n    if (shuttingDown) {\n     return;\n    }\n    shuttingDown = true;\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n     uponFulfillment(waitForWritesToFinish(), function () {\n      return finalize(isError, error);\n     });\n    } else {\n     finalize(isError, error);\n    }\n   }\n   function finalize(isError, error) {\n    WritableStreamDefaultWriterRelease(writer);\n    ReadableStreamReaderGenericRelease(reader);\n    if (signal !== undefined) {\n     signal.removeEventListener('abort', abortAlgorithm);\n    }\n    if (isError) {\n     reject(error);\n    } else {\n     resolve(undefined);\n    }\n   }\n  });\n }\n var ReadableStreamDefaultController = (function () {\n  function ReadableStreamDefaultController() {\n   throw new TypeError('Illegal constructor');\n  }\n  Object.defineProperty(ReadableStreamDefaultController.prototype, \"desiredSize\", {\n   get: function () {\n    if (!IsReadableStreamDefaultController(this)) {\n     throw defaultControllerBrandCheckException$1('desiredSize');\n    }\n    return ReadableStreamDefaultControllerGetDesiredSize(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableStreamDefaultController.prototype.close = function () {\n   if (!IsReadableStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException$1('close');\n   }\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n    throw new TypeError('The stream is not in a state that permits close');\n   }\n   ReadableStreamDefaultControllerClose(this);\n  };\n  ReadableStreamDefaultController.prototype.enqueue = function (chunk) {\n   if (chunk === void 0) {\n    chunk = undefined;\n   }\n   if (!IsReadableStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException$1('enqueue');\n   }\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n    throw new TypeError('The stream is not in a state that permits enqueue');\n   }\n   return ReadableStreamDefaultControllerEnqueue(this, chunk);\n  };\n  ReadableStreamDefaultController.prototype.error = function (e) {\n   if (e === void 0) {\n    e = undefined;\n   }\n   if (!IsReadableStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException$1('error');\n   }\n   ReadableStreamDefaultControllerError(this, e);\n  };\n  ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) {\n   ResetQueue(this);\n   var result = this._cancelAlgorithm(reason);\n   ReadableStreamDefaultControllerClearAlgorithms(this);\n   return result;\n  };\n  ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) {\n   var stream = this._controlledReadableStream;\n   if (this._queue.length > 0) {\n    var chunk = DequeueValue(this);\n    if (this._closeRequested && this._queue.length === 0) {\n     ReadableStreamDefaultControllerClearAlgorithms(this);\n     ReadableStreamClose(stream);\n    } else {\n     ReadableStreamDefaultControllerCallPullIfNeeded(this);\n    }\n    readRequest._chunkSteps(chunk);\n   } else {\n    ReadableStreamAddReadRequest(stream, readRequest);\n    ReadableStreamDefaultControllerCallPullIfNeeded(this);\n   }\n  };\n  return ReadableStreamDefaultController;\n }());\n Object.defineProperties(ReadableStreamDefaultController.prototype, {\n  close: { enumerable: true },\n  enqueue: { enumerable: true },\n  error: { enumerable: true },\n  desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableStreamDefaultController',\n   configurable: true\n  });\n }\n function IsReadableStreamDefaultController(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n   return false;\n  }\n  return x instanceof ReadableStreamDefaultController;\n }\n function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n  var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n  if (!shouldPull) {\n   return;\n  }\n  if (controller._pulling) {\n   controller._pullAgain = true;\n   return;\n  }\n  controller._pulling = true;\n  var pullPromise = controller._pullAlgorithm();\n  uponPromise(pullPromise, function () {\n   controller._pulling = false;\n   if (controller._pullAgain) {\n    controller._pullAgain = false;\n    ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n   }\n  }, function (e) {\n   ReadableStreamDefaultControllerError(controller, e);\n  });\n }\n function ReadableStreamDefaultControllerShouldCallPull(controller) {\n  var stream = controller._controlledReadableStream;\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n   return false;\n  }\n  if (!controller._started) {\n   return false;\n  }\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n   return true;\n  }\n  var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n  if (desiredSize > 0) {\n   return true;\n  }\n  return false;\n }\n function ReadableStreamDefaultControllerClearAlgorithms(controller) {\n  controller._pullAlgorithm = undefined;\n  controller._cancelAlgorithm = undefined;\n  controller._strategySizeAlgorithm = undefined;\n }\n function ReadableStreamDefaultControllerClose(controller) {\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n   return;\n  }\n  var stream = controller._controlledReadableStream;\n  controller._closeRequested = true;\n  if (controller._queue.length === 0) {\n   ReadableStreamDefaultControllerClearAlgorithms(controller);\n   ReadableStreamClose(stream);\n  }\n }\n function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n   return;\n  }\n  var stream = controller._controlledReadableStream;\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n   ReadableStreamFulfillReadRequest(stream, chunk, false);\n  } else {\n   var chunkSize = void 0;\n   try {\n    chunkSize = controller._strategySizeAlgorithm(chunk);\n   } catch (chunkSizeE) {\n    ReadableStreamDefaultControllerError(controller, chunkSizeE);\n    throw chunkSizeE;\n   }\n   try {\n    EnqueueValueWithSize(controller, chunk, chunkSize);\n   } catch (enqueueE) {\n    ReadableStreamDefaultControllerError(controller, enqueueE);\n    throw enqueueE;\n   }\n  }\n  ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n function ReadableStreamDefaultControllerError(controller, e) {\n  var stream = controller._controlledReadableStream;\n  if (stream._state !== 'readable') {\n   return;\n  }\n  ResetQueue(controller);\n  ReadableStreamDefaultControllerClearAlgorithms(controller);\n  ReadableStreamError(stream, e);\n }\n function ReadableStreamDefaultControllerGetDesiredSize(controller) {\n  var state = controller._controlledReadableStream._state;\n  if (state === 'errored') {\n   return null;\n  }\n  if (state === 'closed') {\n   return 0;\n  }\n  return controller._strategyHWM - controller._queueTotalSize;\n }\n function ReadableStreamDefaultControllerHasBackpressure(controller) {\n  if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n   return false;\n  }\n  return true;\n }\n function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\n  var state = controller._controlledReadableStream._state;\n  if (!controller._closeRequested && state === 'readable') {\n   return true;\n  }\n  return false;\n }\n function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n  controller._controlledReadableStream = stream;\n  controller._queue = undefined;\n  controller._queueTotalSize = undefined;\n  ResetQueue(controller);\n  controller._started = false;\n  controller._closeRequested = false;\n  controller._pullAgain = false;\n  controller._pulling = false;\n  controller._strategySizeAlgorithm = sizeAlgorithm;\n  controller._strategyHWM = highWaterMark;\n  controller._pullAlgorithm = pullAlgorithm;\n  controller._cancelAlgorithm = cancelAlgorithm;\n  stream._readableStreamController = controller;\n  var startResult = startAlgorithm();\n  uponPromise(promiseResolvedWith(startResult), function () {\n   controller._started = true;\n   ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n  }, function (r) {\n   ReadableStreamDefaultControllerError(controller, r);\n  });\n }\n function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\n  var startAlgorithm = function () {\n   return undefined;\n  };\n  var pullAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  var cancelAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  if (underlyingSource.start !== undefined) {\n   startAlgorithm = function () {\n    return underlyingSource.start(controller);\n   };\n  }\n  if (underlyingSource.pull !== undefined) {\n   pullAlgorithm = function () {\n    return underlyingSource.pull(controller);\n   };\n  }\n  if (underlyingSource.cancel !== undefined) {\n   cancelAlgorithm = function (reason) {\n    return underlyingSource.cancel(reason);\n   };\n  }\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n }\n function defaultControllerBrandCheckException$1(name) {\n  return new TypeError(\"ReadableStreamDefaultController.prototype.\" + name + \" can only be used on a ReadableStreamDefaultController\");\n }\n function ReadableStreamTee(stream, cloneForBranch2) {\n  if (IsReadableByteStreamController(stream._readableStreamController)) {\n   return ReadableByteStreamTee(stream);\n  }\n  return ReadableStreamDefaultTee(stream);\n }\n function ReadableStreamDefaultTee(stream, cloneForBranch2) {\n  var reader = AcquireReadableStreamDefaultReader(stream);\n  var reading = false;\n  var readAgain = false;\n  var canceled1 = false;\n  var canceled2 = false;\n  var reason1;\n  var reason2;\n  var branch1;\n  var branch2;\n  var resolveCancelPromise;\n  var cancelPromise = newPromise(function (resolve) {\n   resolveCancelPromise = resolve;\n  });\n  function pullAlgorithm() {\n   if (reading) {\n    readAgain = true;\n    return promiseResolvedWith(undefined);\n   }\n   reading = true;\n   var readRequest = {\n    _chunkSteps: function (chunk) {\n     queueMicrotask(function () {\n      readAgain = false;\n      var chunk1 = chunk;\n      var chunk2 = chunk;\n      if (!canceled1) {\n       ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);\n      }\n      if (!canceled2) {\n       ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);\n      }\n      reading = false;\n      if (readAgain) {\n       pullAlgorithm();\n      }\n     });\n    },\n    _closeSteps: function () {\n     reading = false;\n     if (!canceled1) {\n      ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n     }\n     if (!canceled2) {\n      ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n     }\n     if (!canceled1 || !canceled2) {\n      resolveCancelPromise(undefined);\n     }\n    },\n    _errorSteps: function () {\n     reading = false;\n    }\n   };\n   ReadableStreamDefaultReaderRead(reader, readRequest);\n   return promiseResolvedWith(undefined);\n  }\n  function cancel1Algorithm(reason) {\n   canceled1 = true;\n   reason1 = reason;\n   if (canceled2) {\n    var compositeReason = CreateArrayFromList([\n     reason1,\n     reason2\n    ]);\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\n    resolveCancelPromise(cancelResult);\n   }\n   return cancelPromise;\n  }\n  function cancel2Algorithm(reason) {\n   canceled2 = true;\n   reason2 = reason;\n   if (canceled1) {\n    var compositeReason = CreateArrayFromList([\n     reason1,\n     reason2\n    ]);\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\n    resolveCancelPromise(cancelResult);\n   }\n   return cancelPromise;\n  }\n  function startAlgorithm() {\n  }\n  branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n  branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n  uponRejection(reader._closedPromise, function (r) {\n   ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n   ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n   if (!canceled1 || !canceled2) {\n    resolveCancelPromise(undefined);\n   }\n  });\n  return [\n   branch1,\n   branch2\n  ];\n }\n function ReadableByteStreamTee(stream) {\n  var reader = AcquireReadableStreamDefaultReader(stream);\n  var reading = false;\n  var readAgainForBranch1 = false;\n  var readAgainForBranch2 = false;\n  var canceled1 = false;\n  var canceled2 = false;\n  var reason1;\n  var reason2;\n  var branch1;\n  var branch2;\n  var resolveCancelPromise;\n  var cancelPromise = newPromise(function (resolve) {\n   resolveCancelPromise = resolve;\n  });\n  function forwardReaderError(thisReader) {\n   uponRejection(thisReader._closedPromise, function (r) {\n    if (thisReader !== reader) {\n     return;\n    }\n    ReadableByteStreamControllerError(branch1._readableStreamController, r);\n    ReadableByteStreamControllerError(branch2._readableStreamController, r);\n    if (!canceled1 || !canceled2) {\n     resolveCancelPromise(undefined);\n    }\n   });\n  }\n  function pullWithDefaultReader() {\n   if (IsReadableStreamBYOBReader(reader)) {\n    ReadableStreamReaderGenericRelease(reader);\n    reader = AcquireReadableStreamDefaultReader(stream);\n    forwardReaderError(reader);\n   }\n   var readRequest = {\n    _chunkSteps: function (chunk) {\n     queueMicrotask(function () {\n      readAgainForBranch1 = false;\n      readAgainForBranch2 = false;\n      var chunk1 = chunk;\n      var chunk2 = chunk;\n      if (!canceled1 && !canceled2) {\n       try {\n        chunk2 = CloneAsUint8Array(chunk);\n       } catch (cloneE) {\n        ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n        ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n        resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n        return;\n       }\n      }\n      if (!canceled1) {\n       ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n      }\n      if (!canceled2) {\n       ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n      }\n      reading = false;\n      if (readAgainForBranch1) {\n       pull1Algorithm();\n      } else if (readAgainForBranch2) {\n       pull2Algorithm();\n      }\n     });\n    },\n    _closeSteps: function () {\n     reading = false;\n     if (!canceled1) {\n      ReadableByteStreamControllerClose(branch1._readableStreamController);\n     }\n     if (!canceled2) {\n      ReadableByteStreamControllerClose(branch2._readableStreamController);\n     }\n     if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n      ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n     }\n     if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n      ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n     }\n     if (!canceled1 || !canceled2) {\n      resolveCancelPromise(undefined);\n     }\n    },\n    _errorSteps: function () {\n     reading = false;\n    }\n   };\n   ReadableStreamDefaultReaderRead(reader, readRequest);\n  }\n  function pullWithBYOBReader(view, forBranch2) {\n   if (IsReadableStreamDefaultReader(reader)) {\n    ReadableStreamReaderGenericRelease(reader);\n    reader = AcquireReadableStreamBYOBReader(stream);\n    forwardReaderError(reader);\n   }\n   var byobBranch = forBranch2 ? branch2 : branch1;\n   var otherBranch = forBranch2 ? branch1 : branch2;\n   var readIntoRequest = {\n    _chunkSteps: function (chunk) {\n     queueMicrotask(function () {\n      readAgainForBranch1 = false;\n      readAgainForBranch2 = false;\n      var byobCanceled = forBranch2 ? canceled2 : canceled1;\n      var otherCanceled = forBranch2 ? canceled1 : canceled2;\n      if (!otherCanceled) {\n       var clonedChunk = void 0;\n       try {\n        clonedChunk = CloneAsUint8Array(chunk);\n       } catch (cloneE) {\n        ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n        ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n        resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n        return;\n       }\n       if (!byobCanceled) {\n        ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n       }\n       ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n      } else if (!byobCanceled) {\n       ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n      }\n      reading = false;\n      if (readAgainForBranch1) {\n       pull1Algorithm();\n      } else if (readAgainForBranch2) {\n       pull2Algorithm();\n      }\n     });\n    },\n    _closeSteps: function (chunk) {\n     reading = false;\n     var byobCanceled = forBranch2 ? canceled2 : canceled1;\n     var otherCanceled = forBranch2 ? canceled1 : canceled2;\n     if (!byobCanceled) {\n      ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n     }\n     if (!otherCanceled) {\n      ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n     }\n     if (chunk !== undefined) {\n      if (!byobCanceled) {\n       ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n      }\n      if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n       ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n      }\n     }\n     if (!byobCanceled || !otherCanceled) {\n      resolveCancelPromise(undefined);\n     }\n    },\n    _errorSteps: function () {\n     reading = false;\n    }\n   };\n   ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);\n  }\n  function pull1Algorithm() {\n   if (reading) {\n    readAgainForBranch1 = true;\n    return promiseResolvedWith(undefined);\n   }\n   reading = true;\n   var byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n   if (byobRequest === null) {\n    pullWithDefaultReader();\n   } else {\n    pullWithBYOBReader(byobRequest._view, false);\n   }\n   return promiseResolvedWith(undefined);\n  }\n  function pull2Algorithm() {\n   if (reading) {\n    readAgainForBranch2 = true;\n    return promiseResolvedWith(undefined);\n   }\n   reading = true;\n   var byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n   if (byobRequest === null) {\n    pullWithDefaultReader();\n   } else {\n    pullWithBYOBReader(byobRequest._view, true);\n   }\n   return promiseResolvedWith(undefined);\n  }\n  function cancel1Algorithm(reason) {\n   canceled1 = true;\n   reason1 = reason;\n   if (canceled2) {\n    var compositeReason = CreateArrayFromList([\n     reason1,\n     reason2\n    ]);\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\n    resolveCancelPromise(cancelResult);\n   }\n   return cancelPromise;\n  }\n  function cancel2Algorithm(reason) {\n   canceled2 = true;\n   reason2 = reason;\n   if (canceled1) {\n    var compositeReason = CreateArrayFromList([\n     reason1,\n     reason2\n    ]);\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\n    resolveCancelPromise(cancelResult);\n   }\n   return cancelPromise;\n  }\n  function startAlgorithm() {\n  }\n  branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n  branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n  forwardReaderError(reader);\n  return [\n   branch1,\n   branch2\n  ];\n }\n function convertUnderlyingDefaultOrByteSource(source, context) {\n  assertDictionary(source, context);\n  var original = source;\n  var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\n  var cancel = original === null || original === void 0 ? void 0 : original.cancel;\n  var pull = original === null || original === void 0 ? void 0 : original.pull;\n  var start = original === null || original === void 0 ? void 0 : original.start;\n  var type = original === null || original === void 0 ? void 0 : original.type;\n  return {\n   autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + \" has member 'autoAllocateChunkSize' that\"),\n   cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + \" has member 'cancel' that\"),\n   pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + \" has member 'pull' that\"),\n   start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + \" has member 'start' that\"),\n   type: type === undefined ? undefined : convertReadableStreamType(type, context + \" has member 'type' that\")\n  };\n }\n function convertUnderlyingSourceCancelCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (reason) {\n   return promiseCall(fn, original, [reason]);\n  };\n }\n function convertUnderlyingSourcePullCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (controller) {\n   return promiseCall(fn, original, [controller]);\n  };\n }\n function convertUnderlyingSourceStartCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (controller) {\n   return reflectCall(fn, original, [controller]);\n  };\n }\n function convertReadableStreamType(type, context) {\n  type = \"\" + type;\n  if (type !== 'bytes') {\n   throw new TypeError(context + \" '\" + type + \"' is not a valid enumeration value for ReadableStreamType\");\n  }\n  return type;\n }\n function convertReaderOptions(options, context) {\n  assertDictionary(options, context);\n  var mode = options === null || options === void 0 ? void 0 : options.mode;\n  return { mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + \" has member 'mode' that\") };\n }\n function convertReadableStreamReaderMode(mode, context) {\n  mode = \"\" + mode;\n  if (mode !== 'byob') {\n   throw new TypeError(context + \" '\" + mode + \"' is not a valid enumeration value for ReadableStreamReaderMode\");\n  }\n  return mode;\n }\n function convertIteratorOptions(options, context) {\n  assertDictionary(options, context);\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n  return { preventCancel: Boolean(preventCancel) };\n }\n function convertPipeOptions(options, context) {\n  assertDictionary(options, context);\n  var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n  var preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\n  var signal = options === null || options === void 0 ? void 0 : options.signal;\n  if (signal !== undefined) {\n   assertAbortSignal(signal, context + \" has member 'signal' that\");\n  }\n  return {\n   preventAbort: Boolean(preventAbort),\n   preventCancel: Boolean(preventCancel),\n   preventClose: Boolean(preventClose),\n   signal: signal\n  };\n }\n function assertAbortSignal(signal, context) {\n  if (!isAbortSignal(signal)) {\n   throw new TypeError(context + \" is not an AbortSignal.\");\n  }\n }\n function convertReadableWritablePair(pair, context) {\n  assertDictionary(pair, context);\n  var readable = pair === null || pair === void 0 ? void 0 : pair.readable;\n  assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n  assertReadableStream(readable, context + \" has member 'readable' that\");\n  var writable = pair === null || pair === void 0 ? void 0 : pair.writable;\n  assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n  assertWritableStream(writable, context + \" has member 'writable' that\");\n  return {\n   readable: readable,\n   writable: writable\n  };\n }\n var ReadableStream = (function () {\n  function ReadableStream(rawUnderlyingSource, rawStrategy) {\n   if (rawUnderlyingSource === void 0) {\n    rawUnderlyingSource = {};\n   }\n   if (rawStrategy === void 0) {\n    rawStrategy = {};\n   }\n   if (rawUnderlyingSource === undefined) {\n    rawUnderlyingSource = null;\n   } else {\n    assertObject(rawUnderlyingSource, 'First parameter');\n   }\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n   var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n   InitializeReadableStream(this);\n   if (underlyingSource.type === 'bytes') {\n    if (strategy.size !== undefined) {\n     throw new RangeError('The strategy for a byte stream cannot have a size function');\n    }\n    var highWaterMark = ExtractHighWaterMark(strategy, 0);\n    SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\n   } else {\n    var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n    var highWaterMark = ExtractHighWaterMark(strategy, 1);\n    SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\n   }\n  }\n  Object.defineProperty(ReadableStream.prototype, \"locked\", {\n   get: function () {\n    if (!IsReadableStream(this)) {\n     throw streamBrandCheckException$1('locked');\n    }\n    return IsReadableStreamLocked(this);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  ReadableStream.prototype.cancel = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsReadableStream(this)) {\n    return promiseRejectedWith(streamBrandCheckException$1('cancel'));\n   }\n   if (IsReadableStreamLocked(this)) {\n    return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n   }\n   return ReadableStreamCancel(this, reason);\n  };\n  ReadableStream.prototype.getReader = function (rawOptions) {\n   if (rawOptions === void 0) {\n    rawOptions = undefined;\n   }\n   if (!IsReadableStream(this)) {\n    throw streamBrandCheckException$1('getReader');\n   }\n   var options = convertReaderOptions(rawOptions, 'First parameter');\n   if (options.mode === undefined) {\n    return AcquireReadableStreamDefaultReader(this);\n   }\n   return AcquireReadableStreamBYOBReader(this);\n  };\n  ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) {\n   if (rawOptions === void 0) {\n    rawOptions = {};\n   }\n   if (!IsReadableStream(this)) {\n    throw streamBrandCheckException$1('pipeThrough');\n   }\n   assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n   var transform = convertReadableWritablePair(rawTransform, 'First parameter');\n   var options = convertPipeOptions(rawOptions, 'Second parameter');\n   if (IsReadableStreamLocked(this)) {\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n   }\n   if (IsWritableStreamLocked(transform.writable)) {\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n   }\n   var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n   setPromiseIsHandledToTrue(promise);\n   return transform.readable;\n  };\n  ReadableStream.prototype.pipeTo = function (destination, rawOptions) {\n   if (rawOptions === void 0) {\n    rawOptions = {};\n   }\n   if (!IsReadableStream(this)) {\n    return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\n   }\n   if (destination === undefined) {\n    return promiseRejectedWith(\"Parameter 1 is required in 'pipeTo'.\");\n   }\n   if (!IsWritableStream(destination)) {\n    return promiseRejectedWith(new TypeError(\"ReadableStream.prototype.pipeTo's first argument must be a WritableStream\"));\n   }\n   var options;\n   try {\n    options = convertPipeOptions(rawOptions, 'Second parameter');\n   } catch (e) {\n    return promiseRejectedWith(e);\n   }\n   if (IsReadableStreamLocked(this)) {\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n   }\n   if (IsWritableStreamLocked(destination)) {\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n   }\n   return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n  };\n  ReadableStream.prototype.tee = function () {\n   if (!IsReadableStream(this)) {\n    throw streamBrandCheckException$1('tee');\n   }\n   var branches = ReadableStreamTee(this);\n   return CreateArrayFromList(branches);\n  };\n  ReadableStream.prototype.values = function (rawOptions) {\n   if (rawOptions === void 0) {\n    rawOptions = undefined;\n   }\n   if (!IsReadableStream(this)) {\n    throw streamBrandCheckException$1('values');\n   }\n   var options = convertIteratorOptions(rawOptions, 'First parameter');\n   return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n  };\n  return ReadableStream;\n }());\n Object.defineProperties(ReadableStream.prototype, {\n  cancel: { enumerable: true },\n  getReader: { enumerable: true },\n  pipeThrough: { enumerable: true },\n  pipeTo: { enumerable: true },\n  tee: { enumerable: true },\n  values: { enumerable: true },\n  locked: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ReadableStream',\n   configurable: true\n  });\n }\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\n   value: ReadableStream.prototype.values,\n   writable: true,\n   configurable: true\n  });\n }\n function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n  if (highWaterMark === void 0) {\n   highWaterMark = 1;\n  }\n  if (sizeAlgorithm === void 0) {\n   sizeAlgorithm = function () {\n    return 1;\n   };\n  }\n  var stream = Object.create(ReadableStream.prototype);\n  InitializeReadableStream(stream);\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n  return stream;\n }\n function CreateReadableByteStream(startAlgorithm, pullAlgorithm, cancelAlgorithm) {\n  var stream = Object.create(ReadableStream.prototype);\n  InitializeReadableStream(stream);\n  var controller = Object.create(ReadableByteStreamController.prototype);\n  SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n  return stream;\n }\n function InitializeReadableStream(stream) {\n  stream._state = 'readable';\n  stream._reader = undefined;\n  stream._storedError = undefined;\n  stream._disturbed = false;\n }\n function IsReadableStream(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n   return false;\n  }\n  return x instanceof ReadableStream;\n }\n function IsReadableStreamLocked(stream) {\n  if (stream._reader === undefined) {\n   return false;\n  }\n  return true;\n }\n function ReadableStreamCancel(stream, reason) {\n  stream._disturbed = true;\n  if (stream._state === 'closed') {\n   return promiseResolvedWith(undefined);\n  }\n  if (stream._state === 'errored') {\n   return promiseRejectedWith(stream._storedError);\n  }\n  ReadableStreamClose(stream);\n  var reader = stream._reader;\n  if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n   reader._readIntoRequests.forEach(function (readIntoRequest) {\n    readIntoRequest._closeSteps(undefined);\n   });\n   reader._readIntoRequests = new SimpleQueue();\n  }\n  var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n  return transformPromiseWith(sourceCancelPromise, noop);\n }\n function ReadableStreamClose(stream) {\n  stream._state = 'closed';\n  var reader = stream._reader;\n  if (reader === undefined) {\n   return;\n  }\n  defaultReaderClosedPromiseResolve(reader);\n  if (IsReadableStreamDefaultReader(reader)) {\n   reader._readRequests.forEach(function (readRequest) {\n    readRequest._closeSteps();\n   });\n   reader._readRequests = new SimpleQueue();\n  }\n }\n function ReadableStreamError(stream, e) {\n  stream._state = 'errored';\n  stream._storedError = e;\n  var reader = stream._reader;\n  if (reader === undefined) {\n   return;\n  }\n  defaultReaderClosedPromiseReject(reader, e);\n  if (IsReadableStreamDefaultReader(reader)) {\n   reader._readRequests.forEach(function (readRequest) {\n    readRequest._errorSteps(e);\n   });\n   reader._readRequests = new SimpleQueue();\n  } else {\n   reader._readIntoRequests.forEach(function (readIntoRequest) {\n    readIntoRequest._errorSteps(e);\n   });\n   reader._readIntoRequests = new SimpleQueue();\n  }\n }\n function streamBrandCheckException$1(name) {\n  return new TypeError(\"ReadableStream.prototype.\" + name + \" can only be used on a ReadableStream\");\n }\n function convertQueuingStrategyInit(init, context) {\n  assertDictionary(init, context);\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n  assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n  return { highWaterMark: convertUnrestrictedDouble(highWaterMark) };\n }\n var byteLengthSizeFunction = function (chunk) {\n  return chunk.byteLength;\n };\n Object.defineProperty(byteLengthSizeFunction, 'name', {\n  value: 'size',\n  configurable: true\n });\n var ByteLengthQueuingStrategy = (function () {\n  function ByteLengthQueuingStrategy(options) {\n   assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n   options = convertQueuingStrategyInit(options, 'First parameter');\n   this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n  }\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"highWaterMark\", {\n   get: function () {\n    if (!IsByteLengthQueuingStrategy(this)) {\n     throw byteLengthBrandCheckException('highWaterMark');\n    }\n    return this._byteLengthQueuingStrategyHighWaterMark;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"size\", {\n   get: function () {\n    if (!IsByteLengthQueuingStrategy(this)) {\n     throw byteLengthBrandCheckException('size');\n    }\n    return byteLengthSizeFunction;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  return ByteLengthQueuingStrategy;\n }());\n Object.defineProperties(ByteLengthQueuingStrategy.prototype, {\n  highWaterMark: { enumerable: true },\n  size: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n   value: 'ByteLengthQueuingStrategy',\n   configurable: true\n  });\n }\n function byteLengthBrandCheckException(name) {\n  return new TypeError(\"ByteLengthQueuingStrategy.prototype.\" + name + \" can only be used on a ByteLengthQueuingStrategy\");\n }\n function IsByteLengthQueuingStrategy(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n   return false;\n  }\n  return x instanceof ByteLengthQueuingStrategy;\n }\n var countSizeFunction = function () {\n  return 1;\n };\n Object.defineProperty(countSizeFunction, 'name', {\n  value: 'size',\n  configurable: true\n });\n var CountQueuingStrategy = (function () {\n  function CountQueuingStrategy(options) {\n   assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n   options = convertQueuingStrategyInit(options, 'First parameter');\n   this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n  }\n  Object.defineProperty(CountQueuingStrategy.prototype, \"highWaterMark\", {\n   get: function () {\n    if (!IsCountQueuingStrategy(this)) {\n     throw countBrandCheckException('highWaterMark');\n    }\n    return this._countQueuingStrategyHighWaterMark;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(CountQueuingStrategy.prototype, \"size\", {\n   get: function () {\n    if (!IsCountQueuingStrategy(this)) {\n     throw countBrandCheckException('size');\n    }\n    return countSizeFunction;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  return CountQueuingStrategy;\n }());\n Object.defineProperties(CountQueuingStrategy.prototype, {\n  highWaterMark: { enumerable: true },\n  size: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n   value: 'CountQueuingStrategy',\n   configurable: true\n  });\n }\n function countBrandCheckException(name) {\n  return new TypeError(\"CountQueuingStrategy.prototype.\" + name + \" can only be used on a CountQueuingStrategy\");\n }\n function IsCountQueuingStrategy(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n   return false;\n  }\n  return x instanceof CountQueuingStrategy;\n }\n function convertTransformer(original, context) {\n  assertDictionary(original, context);\n  var flush = original === null || original === void 0 ? void 0 : original.flush;\n  var readableType = original === null || original === void 0 ? void 0 : original.readableType;\n  var start = original === null || original === void 0 ? void 0 : original.start;\n  var transform = original === null || original === void 0 ? void 0 : original.transform;\n  var writableType = original === null || original === void 0 ? void 0 : original.writableType;\n  return {\n   flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + \" has member 'flush' that\"),\n   readableType: readableType,\n   start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + \" has member 'start' that\"),\n   transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + \" has member 'transform' that\"),\n   writableType: writableType\n  };\n }\n function convertTransformerFlushCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (controller) {\n   return promiseCall(fn, original, [controller]);\n  };\n }\n function convertTransformerStartCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (controller) {\n   return reflectCall(fn, original, [controller]);\n  };\n }\n function convertTransformerTransformCallback(fn, original, context) {\n  assertFunction(fn, context);\n  return function (chunk, controller) {\n   return promiseCall(fn, original, [\n    chunk,\n    controller\n   ]);\n  };\n }\n var TransformStream = (function () {\n  function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) {\n   if (rawTransformer === void 0) {\n    rawTransformer = {};\n   }\n   if (rawWritableStrategy === void 0) {\n    rawWritableStrategy = {};\n   }\n   if (rawReadableStrategy === void 0) {\n    rawReadableStrategy = {};\n   }\n   if (rawTransformer === undefined) {\n    rawTransformer = null;\n   }\n   var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n   var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n   var transformer = convertTransformer(rawTransformer, 'First parameter');\n   if (transformer.readableType !== undefined) {\n    throw new RangeError('Invalid readableType specified');\n   }\n   if (transformer.writableType !== undefined) {\n    throw new RangeError('Invalid writableType specified');\n   }\n   var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n   var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n   var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n   var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n   var startPromise_resolve;\n   var startPromise = newPromise(function (resolve) {\n    startPromise_resolve = resolve;\n   });\n   InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n   SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n   if (transformer.start !== undefined) {\n    startPromise_resolve(transformer.start(this._transformStreamController));\n   } else {\n    startPromise_resolve(undefined);\n   }\n  }\n  Object.defineProperty(TransformStream.prototype, \"readable\", {\n   get: function () {\n    if (!IsTransformStream(this)) {\n     throw streamBrandCheckException('readable');\n    }\n    return this._readable;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  Object.defineProperty(TransformStream.prototype, \"writable\", {\n   get: function () {\n    if (!IsTransformStream(this)) {\n     throw streamBrandCheckException('writable');\n    }\n    return this._writable;\n   },\n   enumerable: false,\n   configurable: true\n  });\n  return TransformStream;\n }());\n Object.defineProperties(TransformStream.prototype, {\n  readable: { enumerable: true },\n  writable: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\n   value: 'TransformStream',\n   configurable: true\n  });\n }\n function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\n  function startAlgorithm() {\n   return startPromise;\n  }\n  function writeAlgorithm(chunk) {\n   return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n  }\n  function abortAlgorithm(reason) {\n   return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n  }\n  function closeAlgorithm() {\n   return TransformStreamDefaultSinkCloseAlgorithm(stream);\n  }\n  stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\n  function pullAlgorithm() {\n   return TransformStreamDefaultSourcePullAlgorithm(stream);\n  }\n  function cancelAlgorithm(reason) {\n   TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n   return promiseResolvedWith(undefined);\n  }\n  stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n  stream._backpressure = undefined;\n  stream._backpressureChangePromise = undefined;\n  stream._backpressureChangePromise_resolve = undefined;\n  TransformStreamSetBackpressure(stream, true);\n  stream._transformStreamController = undefined;\n }\n function IsTransformStream(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n   return false;\n  }\n  return x instanceof TransformStream;\n }\n function TransformStreamError(stream, e) {\n  ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n  TransformStreamErrorWritableAndUnblockWrite(stream, e);\n }\n function TransformStreamErrorWritableAndUnblockWrite(stream, e) {\n  TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n  WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n  if (stream._backpressure) {\n   TransformStreamSetBackpressure(stream, false);\n  }\n }\n function TransformStreamSetBackpressure(stream, backpressure) {\n  if (stream._backpressureChangePromise !== undefined) {\n   stream._backpressureChangePromise_resolve();\n  }\n  stream._backpressureChangePromise = newPromise(function (resolve) {\n   stream._backpressureChangePromise_resolve = resolve;\n  });\n  stream._backpressure = backpressure;\n }\n var TransformStreamDefaultController = (function () {\n  function TransformStreamDefaultController() {\n   throw new TypeError('Illegal constructor');\n  }\n  Object.defineProperty(TransformStreamDefaultController.prototype, \"desiredSize\", {\n   get: function () {\n    if (!IsTransformStreamDefaultController(this)) {\n     throw defaultControllerBrandCheckException('desiredSize');\n    }\n    var readableController = this._controlledTransformStream._readable._readableStreamController;\n    return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n   },\n   enumerable: false,\n   configurable: true\n  });\n  TransformStreamDefaultController.prototype.enqueue = function (chunk) {\n   if (chunk === void 0) {\n    chunk = undefined;\n   }\n   if (!IsTransformStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException('enqueue');\n   }\n   TransformStreamDefaultControllerEnqueue(this, chunk);\n  };\n  TransformStreamDefaultController.prototype.error = function (reason) {\n   if (reason === void 0) {\n    reason = undefined;\n   }\n   if (!IsTransformStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException('error');\n   }\n   TransformStreamDefaultControllerError(this, reason);\n  };\n  TransformStreamDefaultController.prototype.terminate = function () {\n   if (!IsTransformStreamDefaultController(this)) {\n    throw defaultControllerBrandCheckException('terminate');\n   }\n   TransformStreamDefaultControllerTerminate(this);\n  };\n  return TransformStreamDefaultController;\n }());\n Object.defineProperties(TransformStreamDefaultController.prototype, {\n  enqueue: { enumerable: true },\n  error: { enumerable: true },\n  terminate: { enumerable: true },\n  desiredSize: { enumerable: true }\n });\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\n  Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n   value: 'TransformStreamDefaultController',\n   configurable: true\n  });\n }\n function IsTransformStreamDefaultController(x) {\n  if (!typeIsObject(x)) {\n   return false;\n  }\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n   return false;\n  }\n  return x instanceof TransformStreamDefaultController;\n }\n function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\n  controller._controlledTransformStream = stream;\n  stream._transformStreamController = controller;\n  controller._transformAlgorithm = transformAlgorithm;\n  controller._flushAlgorithm = flushAlgorithm;\n }\n function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\n  var controller = Object.create(TransformStreamDefaultController.prototype);\n  var transformAlgorithm = function (chunk) {\n   try {\n    TransformStreamDefaultControllerEnqueue(controller, chunk);\n    return promiseResolvedWith(undefined);\n   } catch (transformResultE) {\n    return promiseRejectedWith(transformResultE);\n   }\n  };\n  var flushAlgorithm = function () {\n   return promiseResolvedWith(undefined);\n  };\n  if (transformer.transform !== undefined) {\n   transformAlgorithm = function (chunk) {\n    return transformer.transform(chunk, controller);\n   };\n  }\n  if (transformer.flush !== undefined) {\n   flushAlgorithm = function () {\n    return transformer.flush(controller);\n   };\n  }\n  SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n }\n function TransformStreamDefaultControllerClearAlgorithms(controller) {\n  controller._transformAlgorithm = undefined;\n  controller._flushAlgorithm = undefined;\n }\n function TransformStreamDefaultControllerEnqueue(controller, chunk) {\n  var stream = controller._controlledTransformStream;\n  var readableController = stream._readable._readableStreamController;\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n   throw new TypeError('Readable side is not in a state that permits enqueue');\n  }\n  try {\n   ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n  } catch (e) {\n   TransformStreamErrorWritableAndUnblockWrite(stream, e);\n   throw stream._readable._storedError;\n  }\n  var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n  if (backpressure !== stream._backpressure) {\n   TransformStreamSetBackpressure(stream, true);\n  }\n }\n function TransformStreamDefaultControllerError(controller, e) {\n  TransformStreamError(controller._controlledTransformStream, e);\n }\n function TransformStreamDefaultControllerPerformTransform(controller, chunk) {\n  var transformPromise = controller._transformAlgorithm(chunk);\n  return transformPromiseWith(transformPromise, undefined, function (r) {\n   TransformStreamError(controller._controlledTransformStream, r);\n   throw r;\n  });\n }\n function TransformStreamDefaultControllerTerminate(controller) {\n  var stream = controller._controlledTransformStream;\n  var readableController = stream._readable._readableStreamController;\n  ReadableStreamDefaultControllerClose(readableController);\n  var error = new TypeError('TransformStream terminated');\n  TransformStreamErrorWritableAndUnblockWrite(stream, error);\n }\n function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\n  var controller = stream._transformStreamController;\n  if (stream._backpressure) {\n   var backpressureChangePromise = stream._backpressureChangePromise;\n   return transformPromiseWith(backpressureChangePromise, function () {\n    var writable = stream._writable;\n    var state = writable._state;\n    if (state === 'erroring') {\n     throw writable._storedError;\n    }\n    return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n   });\n  }\n  return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n }\n function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\n  TransformStreamError(stream, reason);\n  return promiseResolvedWith(undefined);\n }\n function TransformStreamDefaultSinkCloseAlgorithm(stream) {\n  var readable = stream._readable;\n  var controller = stream._transformStreamController;\n  var flushPromise = controller._flushAlgorithm();\n  TransformStreamDefaultControllerClearAlgorithms(controller);\n  return transformPromiseWith(flushPromise, function () {\n   if (readable._state === 'errored') {\n    throw readable._storedError;\n   }\n   ReadableStreamDefaultControllerClose(readable._readableStreamController);\n  }, function (r) {\n   TransformStreamError(stream, r);\n   throw readable._storedError;\n  });\n }\n function TransformStreamDefaultSourcePullAlgorithm(stream) {\n  TransformStreamSetBackpressure(stream, false);\n  return stream._backpressureChangePromise;\n }\n function defaultControllerBrandCheckException(name) {\n  return new TypeError(\"TransformStreamDefaultController.prototype.\" + name + \" can only be used on a TransformStreamDefaultController\");\n }\n function streamBrandCheckException(name) {\n  return new TypeError(\"TransformStream.prototype.\" + name + \" can only be used on a TransformStream\");\n }\n exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;\n exports.CountQueuingStrategy = CountQueuingStrategy;\n exports.ReadableByteStreamController = ReadableByteStreamController;\n exports.ReadableStream = ReadableStream;\n exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;\n exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;\n exports.ReadableStreamDefaultController = ReadableStreamDefaultController;\n exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;\n exports.TransformStream = TransformStream;\n exports.TransformStreamDefaultController = TransformStreamDefaultController;\n exports.WritableStream = WritableStream;\n exports.WritableStreamDefaultController = WritableStreamDefaultController;\n exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;\n Object.defineProperty(exports, '__esModule', { value: true });\n}));\n\n/***/ }),\n/* 135 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar BaseCanvasFactory = /*#__PURE__*/function () {\n  function BaseCanvasFactory() {\n    _classCallCheck(this, BaseCanvasFactory);\n\n    if (this.constructor === BaseCanvasFactory) {\n      (0, _util.unreachable)(\"Cannot initialize BaseCanvasFactory.\");\n    }\n  }\n\n  _createClass(BaseCanvasFactory, [{\n    key: \"create\",\n    value: function create(width, height) {\n      if (width <= 0 || height <= 0) {\n        throw new Error(\"Invalid canvas size\");\n      }\n\n      var canvas = this._createCanvas(width, height);\n\n      return {\n        canvas: canvas,\n        context: canvas.getContext(\"2d\")\n      };\n    }\n  }, {\n    key: \"reset\",\n    value: function reset(canvasAndContext, width, height) {\n      if (!canvasAndContext.canvas) {\n        throw new Error(\"Canvas is not specified\");\n      }\n\n      if (width <= 0 || height <= 0) {\n        throw new Error(\"Invalid canvas size\");\n      }\n\n      canvasAndContext.canvas.width = width;\n      canvasAndContext.canvas.height = height;\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy(canvasAndContext) {\n      if (!canvasAndContext.canvas) {\n        throw new Error(\"Canvas is not specified\");\n      }\n\n      canvasAndContext.canvas.width = 0;\n      canvasAndContext.canvas.height = 0;\n      canvasAndContext.canvas = null;\n      canvasAndContext.context = null;\n    }\n  }, {\n    key: \"_createCanvas\",\n    value: function _createCanvas(width, height) {\n      (0, _util.unreachable)(\"Abstract method `_createCanvas` called.\");\n    }\n  }]);\n\n  return BaseCanvasFactory;\n}();\n\nexports.BaseCanvasFactory = BaseCanvasFactory;\n\nvar BaseCMapReaderFactory = /*#__PURE__*/function () {\n  function BaseCMapReaderFactory(_ref) {\n    var _ref$baseUrl = _ref.baseUrl,\n        baseUrl = _ref$baseUrl === void 0 ? null : _ref$baseUrl,\n        _ref$isCompressed = _ref.isCompressed,\n        isCompressed = _ref$isCompressed === void 0 ? false : _ref$isCompressed;\n\n    _classCallCheck(this, BaseCMapReaderFactory);\n\n    if (this.constructor === BaseCMapReaderFactory) {\n      (0, _util.unreachable)(\"Cannot initialize BaseCMapReaderFactory.\");\n    }\n\n    this.baseUrl = baseUrl;\n    this.isCompressed = isCompressed;\n  }\n\n  _createClass(BaseCMapReaderFactory, [{\n    key: \"fetch\",\n    value: function () {\n      var _fetch = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(_ref2) {\n        var _this = this;\n\n        var name, url, compressionType;\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                name = _ref2.name;\n\n                if (this.baseUrl) {\n                  _context.next = 3;\n                  break;\n                }\n\n                throw new Error('The CMap \"baseUrl\" parameter must be specified, ensure that ' + 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.');\n\n              case 3:\n                if (name) {\n                  _context.next = 5;\n                  break;\n                }\n\n                throw new Error(\"CMap name must be specified.\");\n\n              case 5:\n                url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n                compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;\n                return _context.abrupt(\"return\", this._fetchData(url, compressionType)[\"catch\"](function (reason) {\n                  throw new Error(\"Unable to load \".concat(_this.isCompressed ? \"binary \" : \"\", \"CMap at: \").concat(url));\n                }));\n\n              case 8:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function fetch(_x) {\n        return _fetch.apply(this, arguments);\n      }\n\n      return fetch;\n    }()\n  }, {\n    key: \"_fetchData\",\n    value: function _fetchData(url, compressionType) {\n      (0, _util.unreachable)(\"Abstract method `_fetchData` called.\");\n    }\n  }]);\n\n  return BaseCMapReaderFactory;\n}();\n\nexports.BaseCMapReaderFactory = BaseCMapReaderFactory;\n\nvar BaseStandardFontDataFactory = /*#__PURE__*/function () {\n  function BaseStandardFontDataFactory(_ref3) {\n    var _ref3$baseUrl = _ref3.baseUrl,\n        baseUrl = _ref3$baseUrl === void 0 ? null : _ref3$baseUrl;\n\n    _classCallCheck(this, BaseStandardFontDataFactory);\n\n    if (this.constructor === BaseStandardFontDataFactory) {\n      (0, _util.unreachable)(\"Cannot initialize BaseStandardFontDataFactory.\");\n    }\n\n    this.baseUrl = baseUrl;\n  }\n\n  _createClass(BaseStandardFontDataFactory, [{\n    key: \"fetch\",\n    value: function () {\n      var _fetch2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(_ref4) {\n        var filename, url;\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                filename = _ref4.filename;\n\n                if (this.baseUrl) {\n                  _context2.next = 3;\n                  break;\n                }\n\n                throw new Error('The standard font \"baseUrl\" parameter must be specified, ensure that ' + 'the \"standardFontDataUrl\" API parameter is provided.');\n\n              case 3:\n                if (filename) {\n                  _context2.next = 5;\n                  break;\n                }\n\n                throw new Error(\"Font filename must be specified.\");\n\n              case 5:\n                url = \"\".concat(this.baseUrl).concat(filename);\n                return _context2.abrupt(\"return\", this._fetchData(url)[\"catch\"](function (reason) {\n                  throw new Error(\"Unable to load font data at: \".concat(url));\n                }));\n\n              case 7:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function fetch(_x2) {\n        return _fetch2.apply(this, arguments);\n      }\n\n      return fetch;\n    }()\n  }, {\n    key: \"_fetchData\",\n    value: function _fetchData(url) {\n      (0, _util.unreachable)(\"Abstract method `_fetchData` called.\");\n    }\n  }]);\n\n  return BaseStandardFontDataFactory;\n}();\n\nexports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;\n\nvar BaseSVGFactory = /*#__PURE__*/function () {\n  function BaseSVGFactory() {\n    _classCallCheck(this, BaseSVGFactory);\n\n    if (this.constructor === BaseSVGFactory) {\n      (0, _util.unreachable)(\"Cannot initialize BaseSVGFactory.\");\n    }\n  }\n\n  _createClass(BaseSVGFactory, [{\n    key: \"create\",\n    value: function create(width, height) {\n      if (width <= 0 || height <= 0) {\n        throw new Error(\"Invalid SVG dimensions\");\n      }\n\n      var svg = this._createSVG(\"svg:svg\");\n\n      svg.setAttribute(\"version\", \"1.1\");\n      svg.setAttribute(\"width\", \"\".concat(width, \"px\"));\n      svg.setAttribute(\"height\", \"\".concat(height, \"px\"));\n      svg.setAttribute(\"preserveAspectRatio\", \"none\");\n      svg.setAttribute(\"viewBox\", \"0 0 \".concat(width, \" \").concat(height));\n      return svg;\n    }\n  }, {\n    key: \"createElement\",\n    value: function createElement(type) {\n      if (typeof type !== \"string\") {\n        throw new Error(\"Invalid SVG element type\");\n      }\n\n      return this._createSVG(type);\n    }\n  }, {\n    key: \"_createSVG\",\n    value: function _createSVG(type) {\n      (0, _util.unreachable)(\"Abstract method `_createSVG` called.\");\n    }\n  }]);\n\n  return BaseSVGFactory;\n}();\n\nexports.BaseSVGFactory = BaseSVGFactory;\n\n/***/ }),\n/* 136 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.build = exports.RenderTask = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;\nexports.getDocument = getDocument;\nexports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;\nexports.version = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _font_loader = __w_pdfjs_require__(137);\n\nvar _node_utils = __w_pdfjs_require__(138);\n\nvar _annotation_storage = __w_pdfjs_require__(139);\n\nvar _canvas = __w_pdfjs_require__(140);\n\nvar _worker_options = __w_pdfjs_require__(142);\n\nvar _is_node = __w_pdfjs_require__(6);\n\nvar _message_handler = __w_pdfjs_require__(143);\n\nvar _metadata = __w_pdfjs_require__(144);\n\nvar _optional_content_config = __w_pdfjs_require__(145);\n\nvar _transport_stream = __w_pdfjs_require__(146);\n\nvar _xfa_text = __w_pdfjs_require__(147);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar DEFAULT_RANGE_CHUNK_SIZE = 65536;\nvar RENDERING_CANCELLED_TIMEOUT = 100;\nvar DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;\nexports.DefaultCanvasFactory = DefaultCanvasFactory;\nvar DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;\nexports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;\nvar DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;\nexports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;\nvar createPDFNetworkStream;\n\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n  createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\nfunction getDocument(src) {\n  var task = new PDFDocumentLoadingTask();\n  var source;\n\n  if (typeof src === \"string\" || src instanceof URL) {\n    source = {\n      url: src\n    };\n  } else if ((0, _util.isArrayBuffer)(src)) {\n    source = {\n      data: src\n    };\n  } else if (src instanceof PDFDataRangeTransport) {\n    source = {\n      range: src\n    };\n  } else {\n    if (_typeof(src) !== \"object\") {\n      throw new Error(\"Invalid parameter in getDocument, \" + \"need either string, URL, Uint8Array, or parameter object.\");\n    }\n\n    if (!src.url && !src.data && !src.range) {\n      throw new Error(\"Invalid parameter object: need either .data, .range or .url\");\n    }\n\n    source = src;\n  }\n\n  var params = Object.create(null);\n  var rangeTransport = null,\n      worker = null;\n\n  for (var key in source) {\n    var value = source[key];\n\n    switch (key) {\n      case \"url\":\n        if (typeof window !== \"undefined\") {\n          try {\n            params[key] = new URL(value, window.location).href;\n            continue;\n          } catch (ex) {\n            (0, _util.warn)(\"Cannot create valid URL: \\\"\".concat(ex, \"\\\".\"));\n          }\n        } else if (typeof value === \"string\" || value instanceof URL) {\n          params[key] = value.toString();\n          continue;\n        }\n\n        throw new Error(\"Invalid PDF url data: \" + \"either string or URL-object is expected in the url property.\");\n\n      case \"range\":\n        rangeTransport = value;\n        continue;\n\n      case \"worker\":\n        worker = value;\n        continue;\n\n      case \"data\":\n        if (_is_node.isNodeJS && typeof Buffer !== \"undefined\" && value instanceof Buffer) {\n          params[key] = new Uint8Array(value);\n        } else if (value instanceof Uint8Array) {\n          break;\n        } else if (typeof value === \"string\") {\n          params[key] = (0, _util.stringToBytes)(value);\n        } else if (_typeof(value) === \"object\" && value !== null && !isNaN(value.length)) {\n          params[key] = new Uint8Array(value);\n        } else if ((0, _util.isArrayBuffer)(value)) {\n          params[key] = new Uint8Array(value);\n        } else {\n          throw new Error(\"Invalid PDF binary data: either typed array, \" + \"string, or array-like object is expected in the data property.\");\n        }\n\n        continue;\n    }\n\n    params[key] = value;\n  }\n\n  params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n  params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory;\n  params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory;\n  params.ignoreErrors = params.stopAtErrors !== true;\n  params.fontExtraProperties = params.fontExtraProperties === true;\n  params.pdfBug = params.pdfBug === true;\n  params.enableXfa = params.enableXfa === true;\n\n  if (typeof params.docBaseUrl !== \"string\" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) {\n    params.docBaseUrl = null;\n  }\n\n  if (!Number.isInteger(params.maxImageSize)) {\n    params.maxImageSize = -1;\n  }\n\n  if (typeof params.useWorkerFetch !== \"boolean\") {\n    params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory;\n  }\n\n  if (typeof params.isEvalSupported !== \"boolean\") {\n    params.isEvalSupported = true;\n  }\n\n  if (typeof params.disableFontFace !== \"boolean\") {\n    params.disableFontFace = _is_node.isNodeJS;\n  }\n\n  if (typeof params.useSystemFonts !== \"boolean\") {\n    params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace;\n  }\n\n  if (typeof params.ownerDocument === \"undefined\") {\n    params.ownerDocument = globalThis.document;\n  }\n\n  if (typeof params.disableRange !== \"boolean\") {\n    params.disableRange = false;\n  }\n\n  if (typeof params.disableStream !== \"boolean\") {\n    params.disableStream = false;\n  }\n\n  if (typeof params.disableAutoFetch !== \"boolean\") {\n    params.disableAutoFetch = false;\n  }\n\n  (0, _util.setVerbosityLevel)(params.verbosity);\n\n  if (!worker) {\n    var workerParams = {\n      verbosity: params.verbosity,\n      port: _worker_options.GlobalWorkerOptions.workerPort\n    };\n    worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);\n    task._worker = worker;\n  }\n\n  var docId = task.docId;\n  worker.promise.then(function () {\n    if (task.destroyed) {\n      throw new Error(\"Loading aborted\");\n    }\n\n    var workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);\n\n    var networkStreamPromise = new Promise(function (resolve) {\n      var networkStream;\n\n      if (rangeTransport) {\n        networkStream = new _transport_stream.PDFDataTransportStream({\n          length: params.length,\n          initialData: params.initialData,\n          progressiveDone: params.progressiveDone,\n          contentDispositionFilename: params.contentDispositionFilename,\n          disableRange: params.disableRange,\n          disableStream: params.disableStream\n        }, rangeTransport);\n      } else if (!params.data) {\n        networkStream = createPDFNetworkStream({\n          url: params.url,\n          length: params.length,\n          httpHeaders: params.httpHeaders,\n          withCredentials: params.withCredentials,\n          rangeChunkSize: params.rangeChunkSize,\n          disableRange: params.disableRange,\n          disableStream: params.disableStream\n        });\n      }\n\n      resolve(networkStream);\n    });\n    return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          workerId = _ref2[0],\n          networkStream = _ref2[1];\n\n      if (task.destroyed) {\n        throw new Error(\"Loading aborted\");\n      }\n\n      var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);\n      var transport = new WorkerTransport(messageHandler, task, networkStream, params);\n      task._transport = transport;\n      messageHandler.send(\"Ready\", null);\n    });\n  })[\"catch\"](task._capability.reject);\n  return task;\n}\n\nfunction _fetchDocument(_x, _x2, _x3, _x4) {\n  return _fetchDocument2.apply(this, arguments);\n}\n\nfunction _fetchDocument2() {\n  _fetchDocument2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(worker, source, pdfDataRangeTransport, docId) {\n    var workerId;\n    return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n      while (1) {\n        switch (_context7.prev = _context7.next) {\n          case 0:\n            if (!worker.destroyed) {\n              _context7.next = 2;\n              break;\n            }\n\n            throw new Error(\"Worker was destroyed\");\n\n          case 2:\n            if (pdfDataRangeTransport) {\n              source.length = pdfDataRangeTransport.length;\n              source.initialData = pdfDataRangeTransport.initialData;\n              source.progressiveDone = pdfDataRangeTransport.progressiveDone;\n              source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename;\n            }\n\n            _context7.next = 5;\n            return worker.messageHandler.sendWithPromise(\"GetDocRequest\", {\n              docId: docId,\n              apiVersion: '2.12.313',\n              source: {\n                data: source.data,\n                url: source.url,\n                password: source.password,\n                disableAutoFetch: source.disableAutoFetch,\n                rangeChunkSize: source.rangeChunkSize,\n                length: source.length\n              },\n              maxImageSize: source.maxImageSize,\n              disableFontFace: source.disableFontFace,\n              docBaseUrl: source.docBaseUrl,\n              ignoreErrors: source.ignoreErrors,\n              isEvalSupported: source.isEvalSupported,\n              fontExtraProperties: source.fontExtraProperties,\n              enableXfa: source.enableXfa,\n              useSystemFonts: source.useSystemFonts,\n              cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,\n              standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null\n            });\n\n          case 5:\n            workerId = _context7.sent;\n\n            if (!worker.destroyed) {\n              _context7.next = 8;\n              break;\n            }\n\n            throw new Error(\"Worker was destroyed\");\n\n          case 8:\n            return _context7.abrupt(\"return\", workerId);\n\n          case 9:\n          case \"end\":\n            return _context7.stop();\n        }\n      }\n    }, _callee7);\n  }));\n  return _fetchDocument2.apply(this, arguments);\n}\n\nvar PDFDocumentLoadingTask = /*#__PURE__*/function () {\n  function PDFDocumentLoadingTask() {\n    _classCallCheck(this, PDFDocumentLoadingTask);\n\n    this._capability = (0, _util.createPromiseCapability)();\n    this._transport = null;\n    this._worker = null;\n    this.docId = \"d\".concat(PDFDocumentLoadingTask.idCounters.doc++);\n    this.destroyed = false;\n    this.onPassword = null;\n    this.onProgress = null;\n    this.onUnsupportedFeature = null;\n  }\n\n  _createClass(PDFDocumentLoadingTask, [{\n    key: \"promise\",\n    get: function get() {\n      return this._capability.promise;\n    }\n  }, {\n    key: \"destroy\",\n    value: function () {\n      var _destroy = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n        var _this$_transport;\n\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                this.destroyed = true;\n                _context.next = 3;\n                return (_this$_transport = this._transport) === null || _this$_transport === void 0 ? void 0 : _this$_transport.destroy();\n\n              case 3:\n                this._transport = null;\n\n                if (this._worker) {\n                  this._worker.destroy();\n\n                  this._worker = null;\n                }\n\n              case 5:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function destroy() {\n        return _destroy.apply(this, arguments);\n      }\n\n      return destroy;\n    }()\n  }], [{\n    key: \"idCounters\",\n    get: function get() {\n      return (0, _util.shadow)(this, \"idCounters\", {\n        doc: 0\n      });\n    }\n  }]);\n\n  return PDFDocumentLoadingTask;\n}();\n\nexports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;\n\nvar PDFDataRangeTransport = /*#__PURE__*/function () {\n  function PDFDataRangeTransport(length, initialData) {\n    var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    _classCallCheck(this, PDFDataRangeTransport);\n\n    this.length = length;\n    this.initialData = initialData;\n    this.progressiveDone = progressiveDone;\n    this.contentDispositionFilename = contentDispositionFilename;\n    this._rangeListeners = [];\n    this._progressListeners = [];\n    this._progressiveReadListeners = [];\n    this._progressiveDoneListeners = [];\n    this._readyCapability = (0, _util.createPromiseCapability)();\n  }\n\n  _createClass(PDFDataRangeTransport, [{\n    key: \"addRangeListener\",\n    value: function addRangeListener(listener) {\n      this._rangeListeners.push(listener);\n    }\n  }, {\n    key: \"addProgressListener\",\n    value: function addProgressListener(listener) {\n      this._progressListeners.push(listener);\n    }\n  }, {\n    key: \"addProgressiveReadListener\",\n    value: function addProgressiveReadListener(listener) {\n      this._progressiveReadListeners.push(listener);\n    }\n  }, {\n    key: \"addProgressiveDoneListener\",\n    value: function addProgressiveDoneListener(listener) {\n      this._progressiveDoneListeners.push(listener);\n    }\n  }, {\n    key: \"onDataRange\",\n    value: function onDataRange(begin, chunk) {\n      var _iterator = _createForOfIteratorHelper(this._rangeListeners),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var listener = _step.value;\n          listener(begin, chunk);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"onDataProgress\",\n    value: function onDataProgress(loaded, total) {\n      var _this = this;\n\n      this._readyCapability.promise.then(function () {\n        var _iterator2 = _createForOfIteratorHelper(_this._progressListeners),\n            _step2;\n\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var listener = _step2.value;\n            listener(loaded, total);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n      });\n    }\n  }, {\n    key: \"onDataProgressiveRead\",\n    value: function onDataProgressiveRead(chunk) {\n      var _this2 = this;\n\n      this._readyCapability.promise.then(function () {\n        var _iterator3 = _createForOfIteratorHelper(_this2._progressiveReadListeners),\n            _step3;\n\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var listener = _step3.value;\n            listener(chunk);\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n      });\n    }\n  }, {\n    key: \"onDataProgressiveDone\",\n    value: function onDataProgressiveDone() {\n      var _this3 = this;\n\n      this._readyCapability.promise.then(function () {\n        var _iterator4 = _createForOfIteratorHelper(_this3._progressiveDoneListeners),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var listener = _step4.value;\n            listener();\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      });\n    }\n  }, {\n    key: \"transportReady\",\n    value: function transportReady() {\n      this._readyCapability.resolve();\n    }\n  }, {\n    key: \"requestDataRange\",\n    value: function requestDataRange(begin, end) {\n      (0, _util.unreachable)(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n    }\n  }, {\n    key: \"abort\",\n    value: function abort() {}\n  }]);\n\n  return PDFDataRangeTransport;\n}();\n\nexports.PDFDataRangeTransport = PDFDataRangeTransport;\n\nvar PDFDocumentProxy = /*#__PURE__*/function () {\n  function PDFDocumentProxy(pdfInfo, transport) {\n    var _this4 = this;\n\n    _classCallCheck(this, PDFDocumentProxy);\n\n    this._pdfInfo = pdfInfo;\n    this._transport = transport;\n    Object.defineProperty(this, \"fingerprint\", {\n      get: function get() {\n        (0, _display_utils.deprecated)(\"`PDFDocumentProxy.fingerprint`, \" + \"please use `PDFDocumentProxy.fingerprints` instead.\");\n        return this.fingerprints[0];\n      }\n    });\n    Object.defineProperty(this, \"getStats\", {\n      value: function () {\n        var _value = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n          return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n            while (1) {\n              switch (_context2.prev = _context2.next) {\n                case 0:\n                  (0, _display_utils.deprecated)(\"`PDFDocumentProxy.getStats`, \" + \"please use the `PDFDocumentProxy.stats`-getter instead.\");\n                  return _context2.abrupt(\"return\", _this4.stats || {\n                    streamTypes: {},\n                    fontTypes: {}\n                  });\n\n                case 2:\n                case \"end\":\n                  return _context2.stop();\n              }\n            }\n          }, _callee2);\n        }));\n\n        function value() {\n          return _value.apply(this, arguments);\n        }\n\n        return value;\n      }()\n    });\n  }\n\n  _createClass(PDFDocumentProxy, [{\n    key: \"annotationStorage\",\n    get: function get() {\n      return this._transport.annotationStorage;\n    }\n  }, {\n    key: \"numPages\",\n    get: function get() {\n      return this._pdfInfo.numPages;\n    }\n  }, {\n    key: \"fingerprints\",\n    get: function get() {\n      return this._pdfInfo.fingerprints;\n    }\n  }, {\n    key: \"stats\",\n    get: function get() {\n      return this._transport.stats;\n    }\n  }, {\n    key: \"isPureXfa\",\n    get: function get() {\n      return !!this._transport._htmlForXfa;\n    }\n  }, {\n    key: \"allXfaHtml\",\n    get: function get() {\n      return this._transport._htmlForXfa;\n    }\n  }, {\n    key: \"getPage\",\n    value: function getPage(pageNumber) {\n      return this._transport.getPage(pageNumber);\n    }\n  }, {\n    key: \"getPageIndex\",\n    value: function getPageIndex(ref) {\n      return this._transport.getPageIndex(ref);\n    }\n  }, {\n    key: \"getDestinations\",\n    value: function getDestinations() {\n      return this._transport.getDestinations();\n    }\n  }, {\n    key: \"getDestination\",\n    value: function getDestination(id) {\n      return this._transport.getDestination(id);\n    }\n  }, {\n    key: \"getPageLabels\",\n    value: function getPageLabels() {\n      return this._transport.getPageLabels();\n    }\n  }, {\n    key: \"getPageLayout\",\n    value: function getPageLayout() {\n      return this._transport.getPageLayout();\n    }\n  }, {\n    key: \"getPageMode\",\n    value: function getPageMode() {\n      return this._transport.getPageMode();\n    }\n  }, {\n    key: \"getViewerPreferences\",\n    value: function getViewerPreferences() {\n      return this._transport.getViewerPreferences();\n    }\n  }, {\n    key: \"getOpenAction\",\n    value: function getOpenAction() {\n      return this._transport.getOpenAction();\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      return this._transport.getAttachments();\n    }\n  }, {\n    key: \"getJavaScript\",\n    value: function getJavaScript() {\n      return this._transport.getJavaScript();\n    }\n  }, {\n    key: \"getJSActions\",\n    value: function getJSActions() {\n      return this._transport.getDocJSActions();\n    }\n  }, {\n    key: \"getOutline\",\n    value: function getOutline() {\n      return this._transport.getOutline();\n    }\n  }, {\n    key: \"getOptionalContentConfig\",\n    value: function getOptionalContentConfig() {\n      return this._transport.getOptionalContentConfig();\n    }\n  }, {\n    key: \"getPermissions\",\n    value: function getPermissions() {\n      return this._transport.getPermissions();\n    }\n  }, {\n    key: \"getMetadata\",\n    value: function getMetadata() {\n      return this._transport.getMetadata();\n    }\n  }, {\n    key: \"getMarkInfo\",\n    value: function getMarkInfo() {\n      return this._transport.getMarkInfo();\n    }\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      return this._transport.getData();\n    }\n  }, {\n    key: \"getDownloadInfo\",\n    value: function getDownloadInfo() {\n      return this._transport.downloadInfoCapability.promise;\n    }\n  }, {\n    key: \"cleanup\",\n    value: function cleanup() {\n      var keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      return this.loadingTask.destroy();\n    }\n  }, {\n    key: \"loadingParams\",\n    get: function get() {\n      return this._transport.loadingParams;\n    }\n  }, {\n    key: \"loadingTask\",\n    get: function get() {\n      return this._transport.loadingTask;\n    }\n  }, {\n    key: \"saveDocument\",\n    value: function saveDocument() {\n      if (this._transport.annotationStorage.size <= 0) {\n        (0, _display_utils.deprecated)(\"saveDocument called while `annotationStorage` is empty, \" + \"please use the getData-method instead.\");\n      }\n\n      return this._transport.saveDocument();\n    }\n  }, {\n    key: \"getFieldObjects\",\n    value: function getFieldObjects() {\n      return this._transport.getFieldObjects();\n    }\n  }, {\n    key: \"hasJSActions\",\n    value: function hasJSActions() {\n      return this._transport.hasJSActions();\n    }\n  }, {\n    key: \"getCalculationOrderIds\",\n    value: function getCalculationOrderIds() {\n      return this._transport.getCalculationOrderIds();\n    }\n  }]);\n\n  return PDFDocumentProxy;\n}();\n\nexports.PDFDocumentProxy = PDFDocumentProxy;\n\nvar PDFPageProxy = /*#__PURE__*/function () {\n  function PDFPageProxy(pageIndex, pageInfo, transport, ownerDocument) {\n    var pdfBug = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    _classCallCheck(this, PDFPageProxy);\n\n    this._pageIndex = pageIndex;\n    this._pageInfo = pageInfo;\n    this._ownerDocument = ownerDocument;\n    this._transport = transport;\n    this._stats = pdfBug ? new _display_utils.StatTimer() : null;\n    this._pdfBug = pdfBug;\n    this.commonObjs = transport.commonObjs;\n    this.objs = new PDFObjects();\n    this.cleanupAfterRender = false;\n    this.pendingCleanup = false;\n    this._intentStates = new Map();\n    this._annotationPromises = new Map();\n    this.destroyed = false;\n  }\n\n  _createClass(PDFPageProxy, [{\n    key: \"pageNumber\",\n    get: function get() {\n      return this._pageIndex + 1;\n    }\n  }, {\n    key: \"rotate\",\n    get: function get() {\n      return this._pageInfo.rotate;\n    }\n  }, {\n    key: \"ref\",\n    get: function get() {\n      return this._pageInfo.ref;\n    }\n  }, {\n    key: \"userUnit\",\n    get: function get() {\n      return this._pageInfo.userUnit;\n    }\n  }, {\n    key: \"view\",\n    get: function get() {\n      return this._pageInfo.view;\n    }\n  }, {\n    key: \"getViewport\",\n    value: function getViewport() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          scale = _ref3.scale,\n          _ref3$rotation = _ref3.rotation,\n          rotation = _ref3$rotation === void 0 ? this.rotate : _ref3$rotation,\n          _ref3$offsetX = _ref3.offsetX,\n          offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX,\n          _ref3$offsetY = _ref3.offsetY,\n          offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY,\n          _ref3$dontFlip = _ref3.dontFlip,\n          dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip;\n\n      return new _display_utils.PageViewport({\n        viewBox: this.view,\n        scale: scale,\n        rotation: rotation,\n        offsetX: offsetX,\n        offsetY: offsetY,\n        dontFlip: dontFlip\n      });\n    }\n  }, {\n    key: \"getAnnotations\",\n    value: function getAnnotations() {\n      var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref4$intent = _ref4.intent,\n          intent = _ref4$intent === void 0 ? \"display\" : _ref4$intent;\n\n      var intentArgs = this._transport.getRenderingIntent(intent);\n\n      var promise = this._annotationPromises.get(intentArgs.cacheKey);\n\n      if (!promise) {\n        promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);\n\n        this._annotationPromises.set(intentArgs.cacheKey, promise);\n\n        promise = promise.then(function (annotations) {\n          var _iterator5 = _createForOfIteratorHelper(annotations),\n              _step5;\n\n          try {\n            var _loop = function _loop() {\n              var annotation = _step5.value;\n\n              if (annotation.titleObj !== undefined) {\n                Object.defineProperty(annotation, \"title\", {\n                  get: function get() {\n                    (0, _display_utils.deprecated)(\"`title`-property on annotation, please use `titleObj` instead.\");\n                    return annotation.titleObj.str;\n                  }\n                });\n              }\n\n              if (annotation.contentsObj !== undefined) {\n                Object.defineProperty(annotation, \"contents\", {\n                  get: function get() {\n                    (0, _display_utils.deprecated)(\"`contents`-property on annotation, please use `contentsObj` instead.\");\n                    return annotation.contentsObj.str;\n                  }\n                });\n              }\n            };\n\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n              _loop();\n            }\n          } catch (err) {\n            _iterator5.e(err);\n          } finally {\n            _iterator5.f();\n          }\n\n          return annotations;\n        });\n      }\n\n      return promise;\n    }\n  }, {\n    key: \"getJSActions\",\n    value: function getJSActions() {\n      return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex));\n    }\n  }, {\n    key: \"getXfa\",\n    value: function () {\n      var _getXfa = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n        var _this$_transport$_htm;\n\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                return _context3.abrupt(\"return\", ((_this$_transport$_htm = this._transport._htmlForXfa) === null || _this$_transport$_htm === void 0 ? void 0 : _this$_transport$_htm.children[this._pageIndex]) || null);\n\n              case 1:\n              case \"end\":\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getXfa() {\n        return _getXfa.apply(this, arguments);\n      }\n\n      return getXfa;\n    }()\n  }, {\n    key: \"render\",\n    value: function render(_ref5) {\n      var _arguments$,\n          _arguments$2,\n          _this5 = this,\n          _intentState;\n\n      var canvasContext = _ref5.canvasContext,\n          viewport = _ref5.viewport,\n          _ref5$intent = _ref5.intent,\n          intent = _ref5$intent === void 0 ? \"display\" : _ref5$intent,\n          _ref5$annotationMode = _ref5.annotationMode,\n          annotationMode = _ref5$annotationMode === void 0 ? _util.AnnotationMode.ENABLE : _ref5$annotationMode,\n          _ref5$transform = _ref5.transform,\n          transform = _ref5$transform === void 0 ? null : _ref5$transform,\n          _ref5$imageLayer = _ref5.imageLayer,\n          imageLayer = _ref5$imageLayer === void 0 ? null : _ref5$imageLayer,\n          _ref5$canvasFactory = _ref5.canvasFactory,\n          canvasFactory = _ref5$canvasFactory === void 0 ? null : _ref5$canvasFactory,\n          _ref5$background = _ref5.background,\n          background = _ref5$background === void 0 ? null : _ref5$background,\n          _ref5$optionalContent = _ref5.optionalContentConfigPromise,\n          optionalContentConfigPromise = _ref5$optionalContent === void 0 ? null : _ref5$optionalContent,\n          _ref5$annotationCanva = _ref5.annotationCanvasMap,\n          annotationCanvasMap = _ref5$annotationCanva === void 0 ? null : _ref5$annotationCanva;\n\n      if (((_arguments$ = arguments[0]) === null || _arguments$ === void 0 ? void 0 : _arguments$.renderInteractiveForms) !== undefined) {\n        (0, _display_utils.deprecated)(\"render no longer accepts the `renderInteractiveForms`-option, \" + \"please use the `annotationMode`-option instead.\");\n\n        if (arguments[0].renderInteractiveForms === true && annotationMode === _util.AnnotationMode.ENABLE) {\n          annotationMode = _util.AnnotationMode.ENABLE_FORMS;\n        }\n      }\n\n      if (((_arguments$2 = arguments[0]) === null || _arguments$2 === void 0 ? void 0 : _arguments$2.includeAnnotationStorage) !== undefined) {\n        (0, _display_utils.deprecated)(\"render no longer accepts the `includeAnnotationStorage`-option, \" + \"please use the `annotationMode`-option instead.\");\n\n        if (arguments[0].includeAnnotationStorage === true && annotationMode === _util.AnnotationMode.ENABLE) {\n          annotationMode = _util.AnnotationMode.ENABLE_STORAGE;\n        }\n      }\n\n      if (this._stats) {\n        this._stats.time(\"Overall\");\n      }\n\n      var intentArgs = this._transport.getRenderingIntent(intent, annotationMode);\n\n      this.pendingCleanup = false;\n\n      if (!optionalContentConfigPromise) {\n        optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n      }\n\n      var intentState = this._intentStates.get(intentArgs.cacheKey);\n\n      if (!intentState) {\n        intentState = Object.create(null);\n\n        this._intentStates.set(intentArgs.cacheKey, intentState);\n      }\n\n      if (intentState.streamReaderCancelTimeout) {\n        clearTimeout(intentState.streamReaderCancelTimeout);\n        intentState.streamReaderCancelTimeout = null;\n      }\n\n      var canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({\n        ownerDocument: this._ownerDocument\n      });\n      var intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);\n\n      if (!intentState.displayReadyCapability) {\n        intentState.displayReadyCapability = (0, _util.createPromiseCapability)();\n        intentState.operatorList = {\n          fnArray: [],\n          argsArray: [],\n          lastChunk: false\n        };\n\n        if (this._stats) {\n          this._stats.time(\"Page Request\");\n        }\n\n        this._pumpOperatorList(intentArgs);\n      }\n\n      var complete = function complete(error) {\n        intentState.renderTasks[\"delete\"](internalRenderTask);\n\n        if (_this5.cleanupAfterRender || intentPrint) {\n          _this5.pendingCleanup = true;\n        }\n\n        _this5._tryCleanup();\n\n        if (error) {\n          internalRenderTask.capability.reject(error);\n\n          _this5._abortOperatorList({\n            intentState: intentState,\n            reason: error instanceof Error ? error : new Error(error)\n          });\n        } else {\n          internalRenderTask.capability.resolve();\n        }\n\n        if (_this5._stats) {\n          _this5._stats.timeEnd(\"Rendering\");\n\n          _this5._stats.timeEnd(\"Overall\");\n        }\n      };\n\n      var internalRenderTask = new InternalRenderTask({\n        callback: complete,\n        params: {\n          canvasContext: canvasContext,\n          viewport: viewport,\n          transform: transform,\n          imageLayer: imageLayer,\n          background: background\n        },\n        objs: this.objs,\n        commonObjs: this.commonObjs,\n        annotationCanvasMap: annotationCanvasMap,\n        operatorList: intentState.operatorList,\n        pageIndex: this._pageIndex,\n        canvasFactory: canvasFactoryInstance,\n        useRequestAnimationFrame: !intentPrint,\n        pdfBug: this._pdfBug\n      });\n      ((_intentState = intentState).renderTasks || (_intentState.renderTasks = new Set())).add(internalRenderTask);\n      var renderTask = internalRenderTask.task;\n      Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(function (_ref6) {\n        var _ref7 = _slicedToArray(_ref6, 2),\n            transparency = _ref7[0],\n            optionalContentConfig = _ref7[1];\n\n        if (_this5.pendingCleanup) {\n          complete();\n          return;\n        }\n\n        if (_this5._stats) {\n          _this5._stats.time(\"Rendering\");\n        }\n\n        internalRenderTask.initializeGraphics({\n          transparency: transparency,\n          optionalContentConfig: optionalContentConfig\n        });\n        internalRenderTask.operatorListChanged();\n      })[\"catch\"](complete);\n      return renderTask;\n    }\n  }, {\n    key: \"getOperatorList\",\n    value: function getOperatorList() {\n      var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref8$intent = _ref8.intent,\n          intent = _ref8$intent === void 0 ? \"display\" : _ref8$intent,\n          _ref8$annotationMode = _ref8.annotationMode,\n          annotationMode = _ref8$annotationMode === void 0 ? _util.AnnotationMode.ENABLE : _ref8$annotationMode;\n\n      function operatorListChanged() {\n        if (intentState.operatorList.lastChunk) {\n          intentState.opListReadCapability.resolve(intentState.operatorList);\n          intentState.renderTasks[\"delete\"](opListTask);\n        }\n      }\n\n      var intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true);\n\n      var intentState = this._intentStates.get(intentArgs.cacheKey);\n\n      if (!intentState) {\n        intentState = Object.create(null);\n\n        this._intentStates.set(intentArgs.cacheKey, intentState);\n      }\n\n      var opListTask;\n\n      if (!intentState.opListReadCapability) {\n        var _intentState2;\n\n        opListTask = Object.create(null);\n        opListTask.operatorListChanged = operatorListChanged;\n        intentState.opListReadCapability = (0, _util.createPromiseCapability)();\n        ((_intentState2 = intentState).renderTasks || (_intentState2.renderTasks = new Set())).add(opListTask);\n        intentState.operatorList = {\n          fnArray: [],\n          argsArray: [],\n          lastChunk: false\n        };\n\n        if (this._stats) {\n          this._stats.time(\"Page Request\");\n        }\n\n        this._pumpOperatorList(intentArgs);\n      }\n\n      return intentState.opListReadCapability.promise;\n    }\n  }, {\n    key: \"streamTextContent\",\n    value: function streamTextContent() {\n      var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref9$normalizeWhites = _ref9.normalizeWhitespace,\n          normalizeWhitespace = _ref9$normalizeWhites === void 0 ? false : _ref9$normalizeWhites,\n          _ref9$disableCombineT = _ref9.disableCombineTextItems,\n          disableCombineTextItems = _ref9$disableCombineT === void 0 ? false : _ref9$disableCombineT,\n          _ref9$includeMarkedCo = _ref9.includeMarkedContent,\n          includeMarkedContent = _ref9$includeMarkedCo === void 0 ? false : _ref9$includeMarkedCo;\n\n      var TEXT_CONTENT_CHUNK_SIZE = 100;\n      return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n        pageIndex: this._pageIndex,\n        normalizeWhitespace: normalizeWhitespace === true,\n        combineTextItems: disableCombineTextItems !== true,\n        includeMarkedContent: includeMarkedContent === true\n      }, {\n        highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n        size: function size(textContent) {\n          return textContent.items.length;\n        }\n      });\n    }\n  }, {\n    key: \"getTextContent\",\n    value: function getTextContent() {\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      if (this._transport._htmlForXfa) {\n        return this.getXfa().then(function (xfa) {\n          return _xfa_text.XfaText.textContent(xfa);\n        });\n      }\n\n      var readableStream = this.streamTextContent(params);\n      return new Promise(function (resolve, reject) {\n        function pump() {\n          reader.read().then(function (_ref10) {\n            var _textContent$items;\n\n            var value = _ref10.value,\n                done = _ref10.done;\n\n            if (done) {\n              resolve(textContent);\n              return;\n            }\n\n            Object.assign(textContent.styles, value.styles);\n\n            (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));\n\n            pump();\n          }, reject);\n        }\n\n        var reader = readableStream.getReader();\n        var textContent = {\n          items: [],\n          styles: Object.create(null)\n        };\n        pump();\n      });\n    }\n  }, {\n    key: \"getStructTree\",\n    value: function getStructTree() {\n      return this._structTreePromise || (this._structTreePromise = this._transport.getStructTree(this._pageIndex));\n    }\n  }, {\n    key: \"_destroy\",\n    value: function _destroy() {\n      this.destroyed = true;\n      var waitOn = [];\n\n      var _iterator6 = _createForOfIteratorHelper(this._intentStates.values()),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var intentState = _step6.value;\n\n          this._abortOperatorList({\n            intentState: intentState,\n            reason: new Error(\"Page was destroyed.\"),\n            force: true\n          });\n\n          if (intentState.opListReadCapability) {\n            continue;\n          }\n\n          var _iterator7 = _createForOfIteratorHelper(intentState.renderTasks),\n              _step7;\n\n          try {\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n              var internalRenderTask = _step7.value;\n              waitOn.push(internalRenderTask.completed);\n              internalRenderTask.cancel();\n            }\n          } catch (err) {\n            _iterator7.e(err);\n          } finally {\n            _iterator7.f();\n          }\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n\n      this.objs.clear();\n\n      this._annotationPromises.clear();\n\n      this._jsActionsPromise = null;\n      this._structTreePromise = null;\n      this.pendingCleanup = false;\n      return Promise.all(waitOn);\n    }\n  }, {\n    key: \"cleanup\",\n    value: function cleanup() {\n      var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      this.pendingCleanup = true;\n      return this._tryCleanup(resetStats);\n    }\n  }, {\n    key: \"_tryCleanup\",\n    value: function _tryCleanup() {\n      var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.pendingCleanup) {\n        return false;\n      }\n\n      var _iterator8 = _createForOfIteratorHelper(this._intentStates.values()),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _step8$value = _step8.value,\n              renderTasks = _step8$value.renderTasks,\n              operatorList = _step8$value.operatorList;\n\n          if (renderTasks.size > 0 || !operatorList.lastChunk) {\n            return false;\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n\n      this._intentStates.clear();\n\n      this.objs.clear();\n\n      this._annotationPromises.clear();\n\n      this._jsActionsPromise = null;\n      this._structTreePromise = null;\n\n      if (resetStats && this._stats) {\n        this._stats = new _display_utils.StatTimer();\n      }\n\n      this.pendingCleanup = false;\n      return true;\n    }\n  }, {\n    key: \"_startRenderPage\",\n    value: function _startRenderPage(transparency, cacheKey) {\n      var intentState = this._intentStates.get(cacheKey);\n\n      if (!intentState) {\n        return;\n      }\n\n      if (this._stats) {\n        this._stats.timeEnd(\"Page Request\");\n      }\n\n      if (intentState.displayReadyCapability) {\n        intentState.displayReadyCapability.resolve(transparency);\n      }\n    }\n  }, {\n    key: \"_renderPageChunk\",\n    value: function _renderPageChunk(operatorListChunk, intentState) {\n      for (var i = 0, ii = operatorListChunk.length; i < ii; i++) {\n        intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n        intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n      }\n\n      intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n      var _iterator9 = _createForOfIteratorHelper(intentState.renderTasks),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var internalRenderTask = _step9.value;\n          internalRenderTask.operatorListChanged();\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n\n      if (operatorListChunk.lastChunk) {\n        this._tryCleanup();\n      }\n    }\n  }, {\n    key: \"_pumpOperatorList\",\n    value: function _pumpOperatorList(_ref11) {\n      var _this6 = this;\n\n      var renderingIntent = _ref11.renderingIntent,\n          cacheKey = _ref11.cacheKey;\n\n      var readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", {\n        pageIndex: this._pageIndex,\n        intent: renderingIntent,\n        cacheKey: cacheKey,\n        annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null\n      });\n\n      var reader = readableStream.getReader();\n\n      var intentState = this._intentStates.get(cacheKey);\n\n      intentState.streamReader = reader;\n\n      var pump = function pump() {\n        reader.read().then(function (_ref12) {\n          var value = _ref12.value,\n              done = _ref12.done;\n\n          if (done) {\n            intentState.streamReader = null;\n            return;\n          }\n\n          if (_this6._transport.destroyed) {\n            return;\n          }\n\n          _this6._renderPageChunk(value, intentState);\n\n          pump();\n        }, function (reason) {\n          intentState.streamReader = null;\n\n          if (_this6._transport.destroyed) {\n            return;\n          }\n\n          if (intentState.operatorList) {\n            intentState.operatorList.lastChunk = true;\n\n            var _iterator10 = _createForOfIteratorHelper(intentState.renderTasks),\n                _step10;\n\n            try {\n              for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n                var internalRenderTask = _step10.value;\n                internalRenderTask.operatorListChanged();\n              }\n            } catch (err) {\n              _iterator10.e(err);\n            } finally {\n              _iterator10.f();\n            }\n\n            _this6._tryCleanup();\n          }\n\n          if (intentState.displayReadyCapability) {\n            intentState.displayReadyCapability.reject(reason);\n          } else if (intentState.opListReadCapability) {\n            intentState.opListReadCapability.reject(reason);\n          } else {\n            throw reason;\n          }\n        });\n      };\n\n      pump();\n    }\n  }, {\n    key: \"_abortOperatorList\",\n    value: function _abortOperatorList(_ref13) {\n      var _this7 = this;\n\n      var intentState = _ref13.intentState,\n          reason = _ref13.reason,\n          _ref13$force = _ref13.force,\n          force = _ref13$force === void 0 ? false : _ref13$force;\n\n      if (!intentState.streamReader) {\n        return;\n      }\n\n      if (!force) {\n        if (intentState.renderTasks.size > 0) {\n          return;\n        }\n\n        if (reason instanceof _display_utils.RenderingCancelledException) {\n          intentState.streamReaderCancelTimeout = setTimeout(function () {\n            _this7._abortOperatorList({\n              intentState: intentState,\n              reason: reason,\n              force: true\n            });\n\n            intentState.streamReaderCancelTimeout = null;\n          }, RENDERING_CANCELLED_TIMEOUT);\n          return;\n        }\n      }\n\n      intentState.streamReader.cancel(new _util.AbortException(reason.message))[\"catch\"](function () {});\n      intentState.streamReader = null;\n\n      if (this._transport.destroyed) {\n        return;\n      }\n\n      var _iterator11 = _createForOfIteratorHelper(this._intentStates),\n          _step11;\n\n      try {\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n          var _step11$value = _slicedToArray(_step11.value, 2),\n              curCacheKey = _step11$value[0],\n              curIntentState = _step11$value[1];\n\n          if (curIntentState === intentState) {\n            this._intentStates[\"delete\"](curCacheKey);\n\n            break;\n          }\n        }\n      } catch (err) {\n        _iterator11.e(err);\n      } finally {\n        _iterator11.f();\n      }\n\n      this.cleanup();\n    }\n  }, {\n    key: \"stats\",\n    get: function get() {\n      return this._stats;\n    }\n  }]);\n\n  return PDFPageProxy;\n}();\n\nexports.PDFPageProxy = PDFPageProxy;\n\nvar LoopbackPort = /*#__PURE__*/function () {\n  function LoopbackPort() {\n    _classCallCheck(this, LoopbackPort);\n\n    this._listeners = [];\n    this._deferred = Promise.resolve();\n  }\n\n  _createClass(LoopbackPort, [{\n    key: \"postMessage\",\n    value: function postMessage(obj, transfers) {\n      var _this8 = this;\n\n      function cloneValue(object) {\n        if (globalThis.structuredClone) {\n          return globalThis.structuredClone(object, transfers);\n        }\n\n        function fallbackCloneValue(value) {\n          if (typeof value === \"function\" || _typeof(value) === \"symbol\" || value instanceof URL) {\n            throw new Error(\"LoopbackPort.postMessage - cannot clone: \".concat(value === null || value === void 0 ? void 0 : value.toString()));\n          }\n\n          if (_typeof(value) !== \"object\" || value === null) {\n            return value;\n          }\n\n          if (cloned.has(value)) {\n            return cloned.get(value);\n          }\n\n          var buffer, result;\n\n          if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {\n            if (transfers !== null && transfers !== void 0 && transfers.includes(buffer)) {\n              result = new value.constructor(buffer, value.byteOffset, value.byteLength);\n            } else {\n              result = new value.constructor(value);\n            }\n\n            cloned.set(value, result);\n            return result;\n          }\n\n          if (value instanceof Map) {\n            result = new Map();\n            cloned.set(value, result);\n\n            var _iterator12 = _createForOfIteratorHelper(value),\n                _step12;\n\n            try {\n              for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n                var _step12$value = _slicedToArray(_step12.value, 2),\n                    key = _step12$value[0],\n                    val = _step12$value[1];\n\n                result.set(key, fallbackCloneValue(val));\n              }\n            } catch (err) {\n              _iterator12.e(err);\n            } finally {\n              _iterator12.f();\n            }\n\n            return result;\n          }\n\n          if (value instanceof Set) {\n            result = new Set();\n            cloned.set(value, result);\n\n            var _iterator13 = _createForOfIteratorHelper(value),\n                _step13;\n\n            try {\n              for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n                var _val = _step13.value;\n                result.add(fallbackCloneValue(_val));\n              }\n            } catch (err) {\n              _iterator13.e(err);\n            } finally {\n              _iterator13.f();\n            }\n\n            return result;\n          }\n\n          result = Array.isArray(value) ? [] : Object.create(null);\n          cloned.set(value, result);\n\n          for (var i in value) {\n            var _value$hasOwnProperty;\n\n            var desc = void 0,\n                p = value;\n\n            while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\n              p = Object.getPrototypeOf(p);\n            }\n\n            if (typeof desc.value === \"undefined\") {\n              continue;\n            }\n\n            if (typeof desc.value === \"function\" && !((_value$hasOwnProperty = value.hasOwnProperty) !== null && _value$hasOwnProperty !== void 0 && _value$hasOwnProperty.call(value, i))) {\n              continue;\n            }\n\n            result[i] = fallbackCloneValue(desc.value);\n          }\n\n          return result;\n        }\n\n        var cloned = new WeakMap();\n        return fallbackCloneValue(object);\n      }\n\n      var event = {\n        data: cloneValue(obj)\n      };\n\n      this._deferred.then(function () {\n        var _iterator14 = _createForOfIteratorHelper(_this8._listeners),\n            _step14;\n\n        try {\n          for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n            var listener = _step14.value;\n            listener.call(_this8, event);\n          }\n        } catch (err) {\n          _iterator14.e(err);\n        } finally {\n          _iterator14.f();\n        }\n      });\n    }\n  }, {\n    key: \"addEventListener\",\n    value: function addEventListener(name, listener) {\n      this._listeners.push(listener);\n    }\n  }, {\n    key: \"removeEventListener\",\n    value: function removeEventListener(name, listener) {\n      var i = this._listeners.indexOf(listener);\n\n      this._listeners.splice(i, 1);\n    }\n  }, {\n    key: \"terminate\",\n    value: function terminate() {\n      this._listeners.length = 0;\n    }\n  }]);\n\n  return LoopbackPort;\n}();\n\nexports.LoopbackPort = LoopbackPort;\nvar PDFWorkerUtil = {\n  isWorkerDisabled: false,\n  fallbackWorkerSrc: null,\n  fakeWorkerId: 0\n};\n{\n  if (_is_node.isNodeJS && typeof require === \"function\") {\n    PDFWorkerUtil.isWorkerDisabled = true;\n    PDFWorkerUtil.fallbackWorkerSrc = \"./pdf.worker.js\";\n  } else if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === \"object\") {\n    var _document, _document$currentScri;\n\n    var pdfjsFilePath = (_document = document) === null || _document === void 0 ? void 0 : (_document$currentScri = _document.currentScript) === null || _document$currentScri === void 0 ? void 0 : _document$currentScri.src;\n\n    if (pdfjsFilePath) {\n      PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i, \".worker$1$2\");\n    }\n  }\n\n  PDFWorkerUtil.createCDNWrapper = function (url) {\n    var wrapper = \"importScripts(\\\"\".concat(url, \"\\\");\");\n    return URL.createObjectURL(new Blob([wrapper]));\n  };\n}\n\nvar PDFWorker = /*#__PURE__*/function () {\n  function PDFWorker() {\n    var _ref14 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        _ref14$name = _ref14.name,\n        name = _ref14$name === void 0 ? null : _ref14$name,\n        _ref14$port = _ref14.port,\n        port = _ref14$port === void 0 ? null : _ref14$port,\n        _ref14$verbosity = _ref14.verbosity,\n        verbosity = _ref14$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref14$verbosity;\n\n    _classCallCheck(this, PDFWorker);\n\n    if (port && PDFWorker._workerPorts.has(port)) {\n      throw new Error(\"Cannot use more than one PDFWorker per port.\");\n    }\n\n    this.name = name;\n    this.destroyed = false;\n    this.verbosity = verbosity;\n    this._readyCapability = (0, _util.createPromiseCapability)();\n    this._port = null;\n    this._webWorker = null;\n    this._messageHandler = null;\n\n    if (port) {\n      PDFWorker._workerPorts.set(port, this);\n\n      this._initializeFromPort(port);\n\n      return;\n    }\n\n    this._initialize();\n  }\n\n  _createClass(PDFWorker, [{\n    key: \"promise\",\n    get: function get() {\n      return this._readyCapability.promise;\n    }\n  }, {\n    key: \"port\",\n    get: function get() {\n      return this._port;\n    }\n  }, {\n    key: \"messageHandler\",\n    get: function get() {\n      return this._messageHandler;\n    }\n  }, {\n    key: \"_initializeFromPort\",\n    value: function _initializeFromPort(port) {\n      this._port = port;\n      this._messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", port);\n\n      this._messageHandler.on(\"ready\", function () {});\n\n      this._readyCapability.resolve();\n    }\n  }, {\n    key: \"_initialize\",\n    value: function _initialize() {\n      var _this9 = this;\n\n      if (typeof Worker !== \"undefined\" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {\n        var workerSrc = PDFWorker.workerSrc;\n\n        try {\n          if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {\n            workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);\n          }\n\n          var worker = new Worker(workerSrc);\n          var messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", worker);\n\n          var terminateEarly = function terminateEarly() {\n            worker.removeEventListener(\"error\", onWorkerError);\n            messageHandler.destroy();\n            worker.terminate();\n\n            if (_this9.destroyed) {\n              _this9._readyCapability.reject(new Error(\"Worker was destroyed\"));\n            } else {\n              _this9._setupFakeWorker();\n            }\n          };\n\n          var onWorkerError = function onWorkerError() {\n            if (!_this9._webWorker) {\n              terminateEarly();\n            }\n          };\n\n          worker.addEventListener(\"error\", onWorkerError);\n          messageHandler.on(\"test\", function (data) {\n            worker.removeEventListener(\"error\", onWorkerError);\n\n            if (_this9.destroyed) {\n              terminateEarly();\n              return;\n            }\n\n            if (data) {\n              _this9._messageHandler = messageHandler;\n              _this9._port = worker;\n              _this9._webWorker = worker;\n\n              _this9._readyCapability.resolve();\n\n              messageHandler.send(\"configure\", {\n                verbosity: _this9.verbosity\n              });\n            } else {\n              _this9._setupFakeWorker();\n\n              messageHandler.destroy();\n              worker.terminate();\n            }\n          });\n          messageHandler.on(\"ready\", function (data) {\n            worker.removeEventListener(\"error\", onWorkerError);\n\n            if (_this9.destroyed) {\n              terminateEarly();\n              return;\n            }\n\n            try {\n              sendTest();\n            } catch (e) {\n              _this9._setupFakeWorker();\n            }\n          });\n\n          var sendTest = function sendTest() {\n            var testObj = new Uint8Array([255]);\n\n            try {\n              messageHandler.send(\"test\", testObj, [testObj.buffer]);\n            } catch (ex) {\n              (0, _util.warn)(\"Cannot use postMessage transfers.\");\n              testObj[0] = 0;\n              messageHandler.send(\"test\", testObj);\n            }\n          };\n\n          sendTest();\n          return;\n        } catch (e) {\n          (0, _util.info)(\"The worker has been disabled.\");\n        }\n      }\n\n      this._setupFakeWorker();\n    }\n  }, {\n    key: \"_setupFakeWorker\",\n    value: function _setupFakeWorker() {\n      var _this10 = this;\n\n      if (!PDFWorkerUtil.isWorkerDisabled) {\n        (0, _util.warn)(\"Setting up fake worker.\");\n        PDFWorkerUtil.isWorkerDisabled = true;\n      }\n\n      PDFWorker._setupFakeWorkerGlobal.then(function (WorkerMessageHandler) {\n        if (_this10.destroyed) {\n          _this10._readyCapability.reject(new Error(\"Worker was destroyed\"));\n\n          return;\n        }\n\n        var port = new LoopbackPort();\n        _this10._port = port;\n        var id = \"fake\".concat(PDFWorkerUtil.fakeWorkerId++);\n        var workerHandler = new _message_handler.MessageHandler(id + \"_worker\", id, port);\n        WorkerMessageHandler.setup(workerHandler, port);\n        var messageHandler = new _message_handler.MessageHandler(id, id + \"_worker\", port);\n        _this10._messageHandler = messageHandler;\n\n        _this10._readyCapability.resolve();\n\n        messageHandler.send(\"configure\", {\n          verbosity: _this10.verbosity\n        });\n      })[\"catch\"](function (reason) {\n        _this10._readyCapability.reject(new Error(\"Setting up fake worker failed: \\\"\".concat(reason.message, \"\\\".\")));\n      });\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.destroyed = true;\n\n      if (this._webWorker) {\n        this._webWorker.terminate();\n\n        this._webWorker = null;\n      }\n\n      PDFWorker._workerPorts[\"delete\"](this._port);\n\n      this._port = null;\n\n      if (this._messageHandler) {\n        this._messageHandler.destroy();\n\n        this._messageHandler = null;\n      }\n    }\n  }], [{\n    key: \"_workerPorts\",\n    get: function get() {\n      return (0, _util.shadow)(this, \"_workerPorts\", new WeakMap());\n    }\n  }, {\n    key: \"fromPort\",\n    value: function fromPort(params) {\n      if (!(params !== null && params !== void 0 && params.port)) {\n        throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n      }\n\n      if (this._workerPorts.has(params.port)) {\n        return this._workerPorts.get(params.port);\n      }\n\n      return new PDFWorker(params);\n    }\n  }, {\n    key: \"workerSrc\",\n    get: function get() {\n      if (_worker_options.GlobalWorkerOptions.workerSrc) {\n        return _worker_options.GlobalWorkerOptions.workerSrc;\n      }\n\n      if (PDFWorkerUtil.fallbackWorkerSrc !== null) {\n        if (!_is_node.isNodeJS) {\n          (0, _display_utils.deprecated)('No \"GlobalWorkerOptions.workerSrc\" specified.');\n        }\n\n        return PDFWorkerUtil.fallbackWorkerSrc;\n      }\n\n      throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n    }\n  }, {\n    key: \"_mainThreadWorkerMessageHandler\",\n    get: function get() {\n      try {\n        var _globalThis$pdfjsWork;\n\n        return ((_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler) || null;\n      } catch (ex) {\n        return null;\n      }\n    }\n  }, {\n    key: \"_setupFakeWorkerGlobal\",\n    get: function get() {\n      var _this11 = this;\n\n      var loader = /*#__PURE__*/function () {\n        var _ref15 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\n          var mainWorkerMessageHandler, worker;\n          return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n            while (1) {\n              switch (_context4.prev = _context4.next) {\n                case 0:\n                  mainWorkerMessageHandler = _this11._mainThreadWorkerMessageHandler;\n\n                  if (!mainWorkerMessageHandler) {\n                    _context4.next = 3;\n                    break;\n                  }\n\n                  return _context4.abrupt(\"return\", mainWorkerMessageHandler);\n\n                case 3:\n                  if (!(_is_node.isNodeJS && typeof require === \"function\")) {\n                    _context4.next = 6;\n                    break;\n                  }\n\n                  worker = eval(\"require\")(_this11.workerSrc);\n                  return _context4.abrupt(\"return\", worker.WorkerMessageHandler);\n\n                case 6:\n                  _context4.next = 8;\n                  return (0, _display_utils.loadScript)(_this11.workerSrc);\n\n                case 8:\n                  return _context4.abrupt(\"return\", window.pdfjsWorker.WorkerMessageHandler);\n\n                case 9:\n                case \"end\":\n                  return _context4.stop();\n              }\n            }\n          }, _callee4);\n        }));\n\n        return function loader() {\n          return _ref15.apply(this, arguments);\n        };\n      }();\n\n      return (0, _util.shadow)(this, \"_setupFakeWorkerGlobal\", loader());\n    }\n  }]);\n\n  return PDFWorker;\n}();\n\nexports.PDFWorker = PDFWorker;\n{\n  PDFWorker.getWorkerSrc = function () {\n    (0, _display_utils.deprecated)(\"`PDFWorker.getWorkerSrc()`, please use `PDFWorker.workerSrc` instead.\");\n    return this.workerSrc;\n  };\n}\n\nvar _docStats = /*#__PURE__*/new WeakMap();\n\nvar _pageCache = /*#__PURE__*/new WeakMap();\n\nvar _pagePromises = /*#__PURE__*/new WeakMap();\n\nvar _metadataPromise = /*#__PURE__*/new WeakMap();\n\nvar WorkerTransport = /*#__PURE__*/function () {\n  function WorkerTransport(messageHandler, loadingTask, networkStream, params) {\n    _classCallCheck(this, WorkerTransport);\n\n    _classPrivateFieldInitSpec(this, _docStats, {\n      writable: true,\n      value: null\n    });\n\n    _classPrivateFieldInitSpec(this, _pageCache, {\n      writable: true,\n      value: new Map()\n    });\n\n    _classPrivateFieldInitSpec(this, _pagePromises, {\n      writable: true,\n      value: new Map()\n    });\n\n    _classPrivateFieldInitSpec(this, _metadataPromise, {\n      writable: true,\n      value: null\n    });\n\n    this.messageHandler = messageHandler;\n    this.loadingTask = loadingTask;\n    this.commonObjs = new PDFObjects();\n    this.fontLoader = new _font_loader.FontLoader({\n      docId: loadingTask.docId,\n      onUnsupportedFeature: this._onUnsupportedFeature.bind(this),\n      ownerDocument: params.ownerDocument,\n      styleElement: params.styleElement\n    });\n    this._params = params;\n\n    if (!params.useWorkerFetch) {\n      this.CMapReaderFactory = new params.CMapReaderFactory({\n        baseUrl: params.cMapUrl,\n        isCompressed: params.cMapPacked\n      });\n      this.StandardFontDataFactory = new params.StandardFontDataFactory({\n        baseUrl: params.standardFontDataUrl\n      });\n    }\n\n    this.destroyed = false;\n    this.destroyCapability = null;\n    this._passwordCapability = null;\n    this._networkStream = networkStream;\n    this._fullReader = null;\n    this._lastProgress = null;\n    this.downloadInfoCapability = (0, _util.createPromiseCapability)();\n    this.setupMessageHandler();\n  }\n\n  _createClass(WorkerTransport, [{\n    key: \"annotationStorage\",\n    get: function get() {\n      return (0, _util.shadow)(this, \"annotationStorage\", new _annotation_storage.AnnotationStorage());\n    }\n  }, {\n    key: \"stats\",\n    get: function get() {\n      return _classPrivateFieldGet(this, _docStats);\n    }\n  }, {\n    key: \"getRenderingIntent\",\n    value: function getRenderingIntent(intent) {\n      var annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util.AnnotationMode.ENABLE;\n      var isOpList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var renderingIntent = _util.RenderingIntentFlag.DISPLAY;\n      var lastModified = \"\";\n\n      switch (intent) {\n        case \"any\":\n          renderingIntent = _util.RenderingIntentFlag.ANY;\n          break;\n\n        case \"display\":\n          break;\n\n        case \"print\":\n          renderingIntent = _util.RenderingIntentFlag.PRINT;\n          break;\n\n        default:\n          (0, _util.warn)(\"getRenderingIntent - invalid intent: \".concat(intent));\n      }\n\n      switch (annotationMode) {\n        case _util.AnnotationMode.DISABLE:\n          renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;\n          break;\n\n        case _util.AnnotationMode.ENABLE:\n          break;\n\n        case _util.AnnotationMode.ENABLE_FORMS:\n          renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;\n          break;\n\n        case _util.AnnotationMode.ENABLE_STORAGE:\n          renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;\n          lastModified = this.annotationStorage.lastModified;\n          break;\n\n        default:\n          (0, _util.warn)(\"getRenderingIntent - invalid annotationMode: \".concat(annotationMode));\n      }\n\n      if (isOpList) {\n        renderingIntent += _util.RenderingIntentFlag.OPLIST;\n      }\n\n      return {\n        renderingIntent: renderingIntent,\n        cacheKey: \"\".concat(renderingIntent, \"_\").concat(lastModified)\n      };\n    }\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this12 = this;\n\n      if (this.destroyCapability) {\n        return this.destroyCapability.promise;\n      }\n\n      this.destroyed = true;\n      this.destroyCapability = (0, _util.createPromiseCapability)();\n\n      if (this._passwordCapability) {\n        this._passwordCapability.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n      }\n\n      var waitOn = [];\n\n      var _iterator15 = _createForOfIteratorHelper(_classPrivateFieldGet(this, _pageCache).values()),\n          _step15;\n\n      try {\n        for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n          var page = _step15.value;\n          waitOn.push(page._destroy());\n        }\n      } catch (err) {\n        _iterator15.e(err);\n      } finally {\n        _iterator15.f();\n      }\n\n      _classPrivateFieldGet(this, _pageCache).clear();\n\n      _classPrivateFieldGet(this, _pagePromises).clear();\n\n      if (this.hasOwnProperty(\"annotationStorage\")) {\n        this.annotationStorage.resetModified();\n      }\n\n      var terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\n      waitOn.push(terminated);\n      Promise.all(waitOn).then(function () {\n        _this12.commonObjs.clear();\n\n        _this12.fontLoader.clear();\n\n        _classPrivateFieldSet(_this12, _metadataPromise, null);\n\n        _this12._getFieldObjectsPromise = null;\n        _this12._hasJSActionsPromise = null;\n\n        if (_this12._networkStream) {\n          _this12._networkStream.cancelAllRequests(new _util.AbortException(\"Worker was terminated.\"));\n        }\n\n        if (_this12.messageHandler) {\n          _this12.messageHandler.destroy();\n\n          _this12.messageHandler = null;\n        }\n\n        _this12.destroyCapability.resolve();\n      }, this.destroyCapability.reject);\n      return this.destroyCapability.promise;\n    }\n  }, {\n    key: \"setupMessageHandler\",\n    value: function setupMessageHandler() {\n      var _this13 = this;\n\n      var messageHandler = this.messageHandler,\n          loadingTask = this.loadingTask;\n      messageHandler.on(\"GetReader\", function (data, sink) {\n        (0, _util.assert)(_this13._networkStream, \"GetReader - no `IPDFStream` instance available.\");\n        _this13._fullReader = _this13._networkStream.getFullReader();\n\n        _this13._fullReader.onProgress = function (evt) {\n          _this13._lastProgress = {\n            loaded: evt.loaded,\n            total: evt.total\n          };\n        };\n\n        sink.onPull = function () {\n          _this13._fullReader.read().then(function (_ref16) {\n            var value = _ref16.value,\n                done = _ref16.done;\n\n            if (done) {\n              sink.close();\n              return;\n            }\n\n            (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetReader - expected an ArrayBuffer.\");\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })[\"catch\"](function (reason) {\n            sink.error(reason);\n          });\n        };\n\n        sink.onCancel = function (reason) {\n          _this13._fullReader.cancel(reason);\n\n          sink.ready[\"catch\"](function (readyReason) {\n            if (_this13.destroyed) {\n              return;\n            }\n\n            throw readyReason;\n          });\n        };\n      });\n      messageHandler.on(\"ReaderHeadersReady\", function (data) {\n        var headersCapability = (0, _util.createPromiseCapability)();\n        var fullReader = _this13._fullReader;\n        fullReader.headersReady.then(function () {\n          if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {\n            if (_this13._lastProgress) {\n              var _loadingTask$onProgre;\n\n              (_loadingTask$onProgre = loadingTask.onProgress) === null || _loadingTask$onProgre === void 0 ? void 0 : _loadingTask$onProgre.call(loadingTask, _this13._lastProgress);\n            }\n\n            fullReader.onProgress = function (evt) {\n              var _loadingTask$onProgre2;\n\n              (_loadingTask$onProgre2 = loadingTask.onProgress) === null || _loadingTask$onProgre2 === void 0 ? void 0 : _loadingTask$onProgre2.call(loadingTask, {\n                loaded: evt.loaded,\n                total: evt.total\n              });\n            };\n          }\n\n          headersCapability.resolve({\n            isStreamingSupported: fullReader.isStreamingSupported,\n            isRangeSupported: fullReader.isRangeSupported,\n            contentLength: fullReader.contentLength\n          });\n        }, headersCapability.reject);\n        return headersCapability.promise;\n      });\n      messageHandler.on(\"GetRangeReader\", function (data, sink) {\n        (0, _util.assert)(_this13._networkStream, \"GetRangeReader - no `IPDFStream` instance available.\");\n\n        var rangeReader = _this13._networkStream.getRangeReader(data.begin, data.end);\n\n        if (!rangeReader) {\n          sink.close();\n          return;\n        }\n\n        sink.onPull = function () {\n          rangeReader.read().then(function (_ref17) {\n            var value = _ref17.value,\n                done = _ref17.done;\n\n            if (done) {\n              sink.close();\n              return;\n            }\n\n            (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetRangeReader - expected an ArrayBuffer.\");\n            sink.enqueue(new Uint8Array(value), 1, [value]);\n          })[\"catch\"](function (reason) {\n            sink.error(reason);\n          });\n        };\n\n        sink.onCancel = function (reason) {\n          rangeReader.cancel(reason);\n          sink.ready[\"catch\"](function (readyReason) {\n            if (_this13.destroyed) {\n              return;\n            }\n\n            throw readyReason;\n          });\n        };\n      });\n      messageHandler.on(\"GetDoc\", function (_ref18) {\n        var pdfInfo = _ref18.pdfInfo;\n        _this13._numPages = pdfInfo.numPages;\n        _this13._htmlForXfa = pdfInfo.htmlForXfa;\n        delete pdfInfo.htmlForXfa;\n\n        loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, _this13));\n      });\n      messageHandler.on(\"DocException\", function (ex) {\n        var reason;\n\n        switch (ex.name) {\n          case \"PasswordException\":\n            reason = new _util.PasswordException(ex.message, ex.code);\n            break;\n\n          case \"InvalidPDFException\":\n            reason = new _util.InvalidPDFException(ex.message);\n            break;\n\n          case \"MissingPDFException\":\n            reason = new _util.MissingPDFException(ex.message);\n            break;\n\n          case \"UnexpectedResponseException\":\n            reason = new _util.UnexpectedResponseException(ex.message, ex.status);\n            break;\n\n          case \"UnknownErrorException\":\n            reason = new _util.UnknownErrorException(ex.message, ex.details);\n            break;\n\n          default:\n            (0, _util.unreachable)(\"DocException - expected a valid Error.\");\n        }\n\n        loadingTask._capability.reject(reason);\n      });\n      messageHandler.on(\"PasswordRequest\", function (exception) {\n        _this13._passwordCapability = (0, _util.createPromiseCapability)();\n\n        if (loadingTask.onPassword) {\n          var updatePassword = function updatePassword(password) {\n            _this13._passwordCapability.resolve({\n              password: password\n            });\n          };\n\n          try {\n            loadingTask.onPassword(updatePassword, exception.code);\n          } catch (ex) {\n            _this13._passwordCapability.reject(ex);\n          }\n        } else {\n          _this13._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));\n        }\n\n        return _this13._passwordCapability.promise;\n      });\n      messageHandler.on(\"DataLoaded\", function (data) {\n        var _loadingTask$onProgre3;\n\n        (_loadingTask$onProgre3 = loadingTask.onProgress) === null || _loadingTask$onProgre3 === void 0 ? void 0 : _loadingTask$onProgre3.call(loadingTask, {\n          loaded: data.length,\n          total: data.length\n        });\n\n        _this13.downloadInfoCapability.resolve(data);\n      });\n      messageHandler.on(\"StartRenderPage\", function (data) {\n        if (_this13.destroyed) {\n          return;\n        }\n\n        var page = _classPrivateFieldGet(_this13, _pageCache).get(data.pageIndex);\n\n        page._startRenderPage(data.transparency, data.cacheKey);\n      });\n      messageHandler.on(\"commonobj\", function (_ref19) {\n        var _globalThis$FontInspe;\n\n        var _ref20 = _slicedToArray(_ref19, 3),\n            id = _ref20[0],\n            type = _ref20[1],\n            exportedData = _ref20[2];\n\n        if (_this13.destroyed) {\n          return;\n        }\n\n        if (_this13.commonObjs.has(id)) {\n          return;\n        }\n\n        switch (type) {\n          case \"Font\":\n            var params = _this13._params;\n\n            if (\"error\" in exportedData) {\n              var exportedError = exportedData.error;\n              (0, _util.warn)(\"Error during font loading: \".concat(exportedError));\n\n              _this13.commonObjs.resolve(id, exportedError);\n\n              break;\n            }\n\n            var fontRegistry = null;\n\n            if (params.pdfBug && (_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled) {\n              fontRegistry = {\n                registerFont: function registerFont(font, url) {\n                  globalThis.FontInspector.fontAdded(font, url);\n                }\n              };\n            }\n\n            var font = new _font_loader.FontFaceObject(exportedData, {\n              isEvalSupported: params.isEvalSupported,\n              disableFontFace: params.disableFontFace,\n              ignoreErrors: params.ignoreErrors,\n              onUnsupportedFeature: _this13._onUnsupportedFeature.bind(_this13),\n              fontRegistry: fontRegistry\n            });\n\n            _this13.fontLoader.bind(font)[\"catch\"](function (reason) {\n              return messageHandler.sendWithPromise(\"FontFallback\", {\n                id: id\n              });\n            })[\"finally\"](function () {\n              if (!params.fontExtraProperties && font.data) {\n                font.data = null;\n              }\n\n              _this13.commonObjs.resolve(id, font);\n            });\n\n            break;\n\n          case \"FontPath\":\n          case \"Image\":\n            _this13.commonObjs.resolve(id, exportedData);\n\n            break;\n\n          default:\n            throw new Error(\"Got unknown common object type \".concat(type));\n        }\n      });\n      messageHandler.on(\"obj\", function (_ref21) {\n        var _imageData$data;\n\n        var _ref22 = _slicedToArray(_ref21, 4),\n            id = _ref22[0],\n            pageIndex = _ref22[1],\n            type = _ref22[2],\n            imageData = _ref22[3];\n\n        if (_this13.destroyed) {\n          return;\n        }\n\n        var pageProxy = _classPrivateFieldGet(_this13, _pageCache).get(pageIndex);\n\n        if (pageProxy.objs.has(id)) {\n          return;\n        }\n\n        switch (type) {\n          case \"Image\":\n            pageProxy.objs.resolve(id, imageData);\n            var MAX_IMAGE_SIZE_TO_STORE = 8000000;\n\n            if ((imageData === null || imageData === void 0 ? void 0 : (_imageData$data = imageData.data) === null || _imageData$data === void 0 ? void 0 : _imageData$data.length) > MAX_IMAGE_SIZE_TO_STORE) {\n              pageProxy.cleanupAfterRender = true;\n            }\n\n            break;\n\n          case \"Pattern\":\n            pageProxy.objs.resolve(id, imageData);\n            break;\n\n          default:\n            throw new Error(\"Got unknown object type \".concat(type));\n        }\n      });\n      messageHandler.on(\"DocProgress\", function (data) {\n        var _loadingTask$onProgre4;\n\n        if (_this13.destroyed) {\n          return;\n        }\n\n        (_loadingTask$onProgre4 = loadingTask.onProgress) === null || _loadingTask$onProgre4 === void 0 ? void 0 : _loadingTask$onProgre4.call(loadingTask, {\n          loaded: data.loaded,\n          total: data.total\n        });\n      });\n      messageHandler.on(\"DocStats\", function (data) {\n        if (_this13.destroyed) {\n          return;\n        }\n\n        _classPrivateFieldSet(_this13, _docStats, Object.freeze({\n          streamTypes: Object.freeze(data.streamTypes),\n          fontTypes: Object.freeze(data.fontTypes)\n        }));\n      });\n      messageHandler.on(\"UnsupportedFeature\", this._onUnsupportedFeature.bind(this));\n      messageHandler.on(\"FetchBuiltInCMap\", function (data) {\n        if (_this13.destroyed) {\n          return Promise.reject(new Error(\"Worker was destroyed.\"));\n        }\n\n        if (!_this13.CMapReaderFactory) {\n          return Promise.reject(new Error(\"CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.\"));\n        }\n\n        return _this13.CMapReaderFactory.fetch(data);\n      });\n      messageHandler.on(\"FetchStandardFontData\", function (data) {\n        if (_this13.destroyed) {\n          return Promise.reject(new Error(\"Worker was destroyed.\"));\n        }\n\n        if (!_this13.StandardFontDataFactory) {\n          return Promise.reject(new Error(\"StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.\"));\n        }\n\n        return _this13.StandardFontDataFactory.fetch(data);\n      });\n    }\n  }, {\n    key: \"_onUnsupportedFeature\",\n    value: function _onUnsupportedFeature(_ref23) {\n      var _this$loadingTask$onU, _this$loadingTask;\n\n      var featureId = _ref23.featureId;\n\n      if (this.destroyed) {\n        return;\n      }\n\n      (_this$loadingTask$onU = (_this$loadingTask = this.loadingTask).onUnsupportedFeature) === null || _this$loadingTask$onU === void 0 ? void 0 : _this$loadingTask$onU.call(_this$loadingTask, featureId);\n    }\n  }, {\n    key: \"getData\",\n    value: function getData() {\n      return this.messageHandler.sendWithPromise(\"GetData\", null);\n    }\n  }, {\n    key: \"getPage\",\n    value: function getPage(pageNumber) {\n      var _this14 = this;\n\n      if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {\n        return Promise.reject(new Error(\"Invalid page request\"));\n      }\n\n      var pageIndex = pageNumber - 1,\n          cachedPromise = _classPrivateFieldGet(this, _pagePromises).get(pageIndex);\n\n      if (cachedPromise) {\n        return cachedPromise;\n      }\n\n      var promise = this.messageHandler.sendWithPromise(\"GetPage\", {\n        pageIndex: pageIndex\n      }).then(function (pageInfo) {\n        if (_this14.destroyed) {\n          throw new Error(\"Transport destroyed\");\n        }\n\n        var page = new PDFPageProxy(pageIndex, pageInfo, _this14, _this14._params.ownerDocument, _this14._params.pdfBug);\n\n        _classPrivateFieldGet(_this14, _pageCache).set(pageIndex, page);\n\n        return page;\n      });\n\n      _classPrivateFieldGet(this, _pagePromises).set(pageIndex, promise);\n\n      return promise;\n    }\n  }, {\n    key: \"getPageIndex\",\n    value: function getPageIndex(ref) {\n      return this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n        ref: ref\n      });\n    }\n  }, {\n    key: \"getAnnotations\",\n    value: function getAnnotations(pageIndex, intent) {\n      return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n        pageIndex: pageIndex,\n        intent: intent\n      });\n    }\n  }, {\n    key: \"saveDocument\",\n    value: function saveDocument() {\n      var _this$_fullReader$fil,\n          _this$_fullReader,\n          _this15 = this;\n\n      return this.messageHandler.sendWithPromise(\"SaveDocument\", {\n        isPureXfa: !!this._htmlForXfa,\n        numPages: this._numPages,\n        annotationStorage: this.annotationStorage.serializable,\n        filename: (_this$_fullReader$fil = (_this$_fullReader = this._fullReader) === null || _this$_fullReader === void 0 ? void 0 : _this$_fullReader.filename) !== null && _this$_fullReader$fil !== void 0 ? _this$_fullReader$fil : null\n      })[\"finally\"](function () {\n        _this15.annotationStorage.resetModified();\n      });\n    }\n  }, {\n    key: \"getFieldObjects\",\n    value: function getFieldObjects() {\n      return this._getFieldObjectsPromise || (this._getFieldObjectsPromise = this.messageHandler.sendWithPromise(\"GetFieldObjects\", null));\n    }\n  }, {\n    key: \"hasJSActions\",\n    value: function hasJSActions() {\n      return this._hasJSActionsPromise || (this._hasJSActionsPromise = this.messageHandler.sendWithPromise(\"HasJSActions\", null));\n    }\n  }, {\n    key: \"getCalculationOrderIds\",\n    value: function getCalculationOrderIds() {\n      return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n    }\n  }, {\n    key: \"getDestinations\",\n    value: function getDestinations() {\n      return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n    }\n  }, {\n    key: \"getDestination\",\n    value: function getDestination(id) {\n      if (typeof id !== \"string\") {\n        return Promise.reject(new Error(\"Invalid destination request.\"));\n      }\n\n      return this.messageHandler.sendWithPromise(\"GetDestination\", {\n        id: id\n      });\n    }\n  }, {\n    key: \"getPageLabels\",\n    value: function getPageLabels() {\n      return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n    }\n  }, {\n    key: \"getPageLayout\",\n    value: function getPageLayout() {\n      return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n    }\n  }, {\n    key: \"getPageMode\",\n    value: function getPageMode() {\n      return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n    }\n  }, {\n    key: \"getViewerPreferences\",\n    value: function getViewerPreferences() {\n      return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n    }\n  }, {\n    key: \"getOpenAction\",\n    value: function getOpenAction() {\n      return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments() {\n      return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n    }\n  }, {\n    key: \"getJavaScript\",\n    value: function getJavaScript() {\n      return this.messageHandler.sendWithPromise(\"GetJavaScript\", null);\n    }\n  }, {\n    key: \"getDocJSActions\",\n    value: function getDocJSActions() {\n      return this.messageHandler.sendWithPromise(\"GetDocJSActions\", null);\n    }\n  }, {\n    key: \"getPageJSActions\",\n    value: function getPageJSActions(pageIndex) {\n      return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n        pageIndex: pageIndex\n      });\n    }\n  }, {\n    key: \"getStructTree\",\n    value: function getStructTree(pageIndex) {\n      return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n        pageIndex: pageIndex\n      });\n    }\n  }, {\n    key: \"getOutline\",\n    value: function getOutline() {\n      return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n    }\n  }, {\n    key: \"getOptionalContentConfig\",\n    value: function getOptionalContentConfig() {\n      return this.messageHandler.sendWithPromise(\"GetOptionalContentConfig\", null).then(function (results) {\n        return new _optional_content_config.OptionalContentConfig(results);\n      });\n    }\n  }, {\n    key: \"getPermissions\",\n    value: function getPermissions() {\n      return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n    }\n  }, {\n    key: \"getMetadata\",\n    value: function getMetadata() {\n      var _this16 = this;\n\n      return _classPrivateFieldGet(this, _metadataPromise) || _classPrivateFieldSet(this, _metadataPromise, this.messageHandler.sendWithPromise(\"GetMetadata\", null).then(function (results) {\n        var _this16$_fullReader$f, _this16$_fullReader, _this16$_fullReader$c, _this16$_fullReader2;\n\n        return {\n          info: results[0],\n          metadata: results[1] ? new _metadata.Metadata(results[1]) : null,\n          contentDispositionFilename: (_this16$_fullReader$f = (_this16$_fullReader = _this16._fullReader) === null || _this16$_fullReader === void 0 ? void 0 : _this16$_fullReader.filename) !== null && _this16$_fullReader$f !== void 0 ? _this16$_fullReader$f : null,\n          contentLength: (_this16$_fullReader$c = (_this16$_fullReader2 = _this16._fullReader) === null || _this16$_fullReader2 === void 0 ? void 0 : _this16$_fullReader2.contentLength) !== null && _this16$_fullReader$c !== void 0 ? _this16$_fullReader$c : null\n        };\n      }));\n    }\n  }, {\n    key: \"getMarkInfo\",\n    value: function getMarkInfo() {\n      return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n    }\n  }, {\n    key: \"startCleanup\",\n    value: function () {\n      var _startCleanup = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5() {\n        var keepLoadedFonts,\n            _iterator16,\n            _step16,\n            page,\n            cleanupSuccessful,\n            _args5 = arguments;\n\n        return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                keepLoadedFonts = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false;\n                _context5.next = 3;\n                return this.messageHandler.sendWithPromise(\"Cleanup\", null);\n\n              case 3:\n                if (!this.destroyed) {\n                  _context5.next = 5;\n                  break;\n                }\n\n                return _context5.abrupt(\"return\");\n\n              case 5:\n                _iterator16 = _createForOfIteratorHelper(_classPrivateFieldGet(this, _pageCache).values());\n                _context5.prev = 6;\n\n                _iterator16.s();\n\n              case 8:\n                if ((_step16 = _iterator16.n()).done) {\n                  _context5.next = 15;\n                  break;\n                }\n\n                page = _step16.value;\n                cleanupSuccessful = page.cleanup();\n\n                if (cleanupSuccessful) {\n                  _context5.next = 13;\n                  break;\n                }\n\n                throw new Error(\"startCleanup: Page \".concat(page.pageNumber, \" is currently rendering.\"));\n\n              case 13:\n                _context5.next = 8;\n                break;\n\n              case 15:\n                _context5.next = 20;\n                break;\n\n              case 17:\n                _context5.prev = 17;\n                _context5.t0 = _context5[\"catch\"](6);\n\n                _iterator16.e(_context5.t0);\n\n              case 20:\n                _context5.prev = 20;\n\n                _iterator16.f();\n\n                return _context5.finish(20);\n\n              case 23:\n                this.commonObjs.clear();\n\n                if (!keepLoadedFonts) {\n                  this.fontLoader.clear();\n                }\n\n                _classPrivateFieldSet(this, _metadataPromise, null);\n\n                this._getFieldObjectsPromise = null;\n                this._hasJSActionsPromise = null;\n\n              case 28:\n              case \"end\":\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this, [[6, 17, 20, 23]]);\n      }));\n\n      function startCleanup() {\n        return _startCleanup.apply(this, arguments);\n      }\n\n      return startCleanup;\n    }()\n  }, {\n    key: \"loadingParams\",\n    get: function get() {\n      var params = this._params;\n      return (0, _util.shadow)(this, \"loadingParams\", {\n        disableAutoFetch: params.disableAutoFetch,\n        enableXfa: params.enableXfa\n      });\n    }\n  }]);\n\n  return WorkerTransport;\n}();\n\nvar PDFObjects = /*#__PURE__*/function () {\n  function PDFObjects() {\n    _classCallCheck(this, PDFObjects);\n\n    this._objs = Object.create(null);\n  }\n\n  _createClass(PDFObjects, [{\n    key: \"_ensureObj\",\n    value: function _ensureObj(objId) {\n      if (this._objs[objId]) {\n        return this._objs[objId];\n      }\n\n      return this._objs[objId] = {\n        capability: (0, _util.createPromiseCapability)(),\n        data: null,\n        resolved: false\n      };\n    }\n  }, {\n    key: \"get\",\n    value: function get(objId) {\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (callback) {\n        this._ensureObj(objId).capability.promise.then(callback);\n\n        return null;\n      }\n\n      var obj = this._objs[objId];\n\n      if (!obj || !obj.resolved) {\n        throw new Error(\"Requesting object that isn't resolved yet \".concat(objId, \".\"));\n      }\n\n      return obj.data;\n    }\n  }, {\n    key: \"has\",\n    value: function has(objId) {\n      var obj = this._objs[objId];\n      return (obj === null || obj === void 0 ? void 0 : obj.resolved) || false;\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(objId, data) {\n      var obj = this._ensureObj(objId);\n\n      obj.resolved = true;\n      obj.data = data;\n      obj.capability.resolve(data);\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this._objs = Object.create(null);\n    }\n  }]);\n\n  return PDFObjects;\n}();\n\nvar RenderTask = /*#__PURE__*/function () {\n  function RenderTask(internalRenderTask) {\n    _classCallCheck(this, RenderTask);\n\n    this._internalRenderTask = internalRenderTask;\n    this.onContinue = null;\n  }\n\n  _createClass(RenderTask, [{\n    key: \"promise\",\n    get: function get() {\n      return this._internalRenderTask.capability.promise;\n    }\n  }, {\n    key: \"cancel\",\n    value: function cancel() {\n      this._internalRenderTask.cancel();\n    }\n  }]);\n\n  return RenderTask;\n}();\n\nexports.RenderTask = RenderTask;\n\nvar InternalRenderTask = /*#__PURE__*/function () {\n  function InternalRenderTask(_ref24) {\n    var callback = _ref24.callback,\n        params = _ref24.params,\n        objs = _ref24.objs,\n        commonObjs = _ref24.commonObjs,\n        annotationCanvasMap = _ref24.annotationCanvasMap,\n        operatorList = _ref24.operatorList,\n        pageIndex = _ref24.pageIndex,\n        canvasFactory = _ref24.canvasFactory,\n        _ref24$useRequestAnim = _ref24.useRequestAnimationFrame,\n        useRequestAnimationFrame = _ref24$useRequestAnim === void 0 ? false : _ref24$useRequestAnim,\n        _ref24$pdfBug = _ref24.pdfBug,\n        pdfBug = _ref24$pdfBug === void 0 ? false : _ref24$pdfBug;\n\n    _classCallCheck(this, InternalRenderTask);\n\n    this.callback = callback;\n    this.params = params;\n    this.objs = objs;\n    this.commonObjs = commonObjs;\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.operatorListIdx = null;\n    this.operatorList = operatorList;\n    this._pageIndex = pageIndex;\n    this.canvasFactory = canvasFactory;\n    this._pdfBug = pdfBug;\n    this.running = false;\n    this.graphicsReadyCallback = null;\n    this.graphicsReady = false;\n    this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\n    this.cancelled = false;\n    this.capability = (0, _util.createPromiseCapability)();\n    this.task = new RenderTask(this);\n    this._cancelBound = this.cancel.bind(this);\n    this._continueBound = this._continue.bind(this);\n    this._scheduleNextBound = this._scheduleNext.bind(this);\n    this._nextBound = this._next.bind(this);\n    this._canvas = params.canvasContext.canvas;\n  }\n\n  _createClass(InternalRenderTask, [{\n    key: \"completed\",\n    get: function get() {\n      return this.capability.promise[\"catch\"](function () {});\n    }\n  }, {\n    key: \"initializeGraphics\",\n    value: function initializeGraphics(_ref25) {\n      var _globalThis$StepperMa;\n\n      var _ref25$transparency = _ref25.transparency,\n          transparency = _ref25$transparency === void 0 ? false : _ref25$transparency,\n          optionalContentConfig = _ref25.optionalContentConfig;\n\n      if (this.cancelled) {\n        return;\n      }\n\n      if (this._canvas) {\n        if (InternalRenderTask.canvasInUse.has(this._canvas)) {\n          throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\n        }\n\n        InternalRenderTask.canvasInUse.add(this._canvas);\n      }\n\n      if (this._pdfBug && (_globalThis$StepperMa = globalThis.StepperManager) !== null && _globalThis$StepperMa !== void 0 && _globalThis$StepperMa.enabled) {\n        this.stepper = globalThis.StepperManager.create(this._pageIndex);\n        this.stepper.init(this.operatorList);\n        this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\n      }\n\n      var _this$params = this.params,\n          canvasContext = _this$params.canvasContext,\n          viewport = _this$params.viewport,\n          transform = _this$params.transform,\n          imageLayer = _this$params.imageLayer,\n          background = _this$params.background;\n      this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap);\n      this.gfx.beginDrawing({\n        transform: transform,\n        viewport: viewport,\n        transparency: transparency,\n        background: background\n      });\n      this.operatorListIdx = 0;\n      this.graphicsReady = true;\n\n      if (this.graphicsReadyCallback) {\n        this.graphicsReadyCallback();\n      }\n    }\n  }, {\n    key: \"cancel\",\n    value: function cancel() {\n      var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      this.running = false;\n      this.cancelled = true;\n\n      if (this.gfx) {\n        this.gfx.endDrawing();\n      }\n\n      if (this._canvas) {\n        InternalRenderTask.canvasInUse[\"delete\"](this._canvas);\n      }\n\n      this.callback(error || new _display_utils.RenderingCancelledException(\"Rendering cancelled, page \".concat(this._pageIndex + 1), \"canvas\"));\n    }\n  }, {\n    key: \"operatorListChanged\",\n    value: function operatorListChanged() {\n      if (!this.graphicsReady) {\n        if (!this.graphicsReadyCallback) {\n          this.graphicsReadyCallback = this._continueBound;\n        }\n\n        return;\n      }\n\n      if (this.stepper) {\n        this.stepper.updateOperatorList(this.operatorList);\n      }\n\n      if (this.running) {\n        return;\n      }\n\n      this._continue();\n    }\n  }, {\n    key: \"_continue\",\n    value: function _continue() {\n      this.running = true;\n\n      if (this.cancelled) {\n        return;\n      }\n\n      if (this.task.onContinue) {\n        this.task.onContinue(this._scheduleNextBound);\n      } else {\n        this._scheduleNext();\n      }\n    }\n  }, {\n    key: \"_scheduleNext\",\n    value: function _scheduleNext() {\n      var _this17 = this;\n\n      if (this._useRequestAnimationFrame) {\n        window.requestAnimationFrame(function () {\n          _this17._nextBound()[\"catch\"](_this17._cancelBound);\n        });\n      } else {\n        Promise.resolve().then(this._nextBound)[\"catch\"](this._cancelBound);\n      }\n    }\n  }, {\n    key: \"_next\",\n    value: function () {\n      var _next2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6() {\n        return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                if (!this.cancelled) {\n                  _context6.next = 2;\n                  break;\n                }\n\n                return _context6.abrupt(\"return\");\n\n              case 2:\n                this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);\n\n                if (this.operatorListIdx === this.operatorList.argsArray.length) {\n                  this.running = false;\n\n                  if (this.operatorList.lastChunk) {\n                    this.gfx.endDrawing();\n\n                    if (this._canvas) {\n                      InternalRenderTask.canvasInUse[\"delete\"](this._canvas);\n                    }\n\n                    this.callback();\n                  }\n                }\n\n              case 4:\n              case \"end\":\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function _next() {\n        return _next2.apply(this, arguments);\n      }\n\n      return _next;\n    }()\n  }], [{\n    key: \"canvasInUse\",\n    get: function get() {\n      return (0, _util.shadow)(this, \"canvasInUse\", new WeakSet());\n    }\n  }]);\n\n  return InternalRenderTask;\n}();\n\nvar version = '2.12.313';\nexports.version = version;\nvar build = 'a2ae56f39';\nexports.build = build;\n\n/***/ }),\n/* 137 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.FontLoader = exports.FontFaceObject = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar BaseFontLoader = /*#__PURE__*/function () {\n  function BaseFontLoader(_ref) {\n    var docId = _ref.docId,\n        onUnsupportedFeature = _ref.onUnsupportedFeature,\n        _ref$ownerDocument = _ref.ownerDocument,\n        ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument,\n        _ref$styleElement = _ref.styleElement,\n        styleElement = _ref$styleElement === void 0 ? null : _ref$styleElement;\n\n    _classCallCheck(this, BaseFontLoader);\n\n    if (this.constructor === BaseFontLoader) {\n      (0, _util.unreachable)(\"Cannot initialize BaseFontLoader.\");\n    }\n\n    this.docId = docId;\n    this._onUnsupportedFeature = onUnsupportedFeature;\n    this._document = ownerDocument;\n    this.nativeFontFaces = [];\n    this.styleElement = null;\n  }\n\n  _createClass(BaseFontLoader, [{\n    key: \"addNativeFontFace\",\n    value: function addNativeFontFace(nativeFontFace) {\n      this.nativeFontFaces.push(nativeFontFace);\n\n      this._document.fonts.add(nativeFontFace);\n    }\n  }, {\n    key: \"insertRule\",\n    value: function insertRule(rule) {\n      var styleElement = this.styleElement;\n\n      if (!styleElement) {\n        styleElement = this.styleElement = this._document.createElement(\"style\");\n        styleElement.id = \"PDFJS_FONT_STYLE_TAG_\".concat(this.docId);\n\n        this._document.documentElement.getElementsByTagName(\"head\")[0].appendChild(styleElement);\n      }\n\n      var styleSheet = styleElement.sheet;\n      styleSheet.insertRule(rule, styleSheet.cssRules.length);\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var _iterator = _createForOfIteratorHelper(this.nativeFontFaces),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var nativeFontFace = _step.value;\n\n          this._document.fonts[\"delete\"](nativeFontFace);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n\n      this.nativeFontFaces.length = 0;\n\n      if (this.styleElement) {\n        this.styleElement.remove();\n        this.styleElement = null;\n      }\n    }\n  }, {\n    key: \"bind\",\n    value: function () {\n      var _bind = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(font) {\n        var _this = this;\n\n        var nativeFontFace, rule;\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (!(font.attached || font.missingFile)) {\n                  _context.next = 2;\n                  break;\n                }\n\n                return _context.abrupt(\"return\");\n\n              case 2:\n                font.attached = true;\n\n                if (!this.isFontLoadingAPISupported) {\n                  _context.next = 19;\n                  break;\n                }\n\n                nativeFontFace = font.createNativeFontFace();\n\n                if (!nativeFontFace) {\n                  _context.next = 18;\n                  break;\n                }\n\n                this.addNativeFontFace(nativeFontFace);\n                _context.prev = 7;\n                _context.next = 10;\n                return nativeFontFace.loaded;\n\n              case 10:\n                _context.next = 18;\n                break;\n\n              case 12:\n                _context.prev = 12;\n                _context.t0 = _context[\"catch\"](7);\n\n                this._onUnsupportedFeature({\n                  featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative\n                });\n\n                (0, _util.warn)(\"Failed to load font '\".concat(nativeFontFace.family, \"': '\").concat(_context.t0, \"'.\"));\n                font.disableFontFace = true;\n                throw _context.t0;\n\n              case 18:\n                return _context.abrupt(\"return\");\n\n              case 19:\n                rule = font.createFontFaceRule();\n\n                if (!rule) {\n                  _context.next = 26;\n                  break;\n                }\n\n                this.insertRule(rule);\n\n                if (!this.isSyncFontLoadingSupported) {\n                  _context.next = 24;\n                  break;\n                }\n\n                return _context.abrupt(\"return\");\n\n              case 24:\n                _context.next = 26;\n                return new Promise(function (resolve) {\n                  var request = _this._queueLoadingCallback(resolve);\n\n                  _this._prepareFontLoadEvent([rule], [font], request);\n                });\n\n              case 26:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this, [[7, 12]]);\n      }));\n\n      function bind(_x) {\n        return _bind.apply(this, arguments);\n      }\n\n      return bind;\n    }()\n  }, {\n    key: \"_queueLoadingCallback\",\n    value: function _queueLoadingCallback(callback) {\n      (0, _util.unreachable)(\"Abstract method `_queueLoadingCallback`.\");\n    }\n  }, {\n    key: \"isFontLoadingAPISupported\",\n    get: function get() {\n      var _this$_document;\n\n      var hasFonts = !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts);\n      return (0, _util.shadow)(this, \"isFontLoadingAPISupported\", hasFonts);\n    }\n  }, {\n    key: \"isSyncFontLoadingSupported\",\n    get: function get() {\n      (0, _util.unreachable)(\"Abstract method `isSyncFontLoadingSupported`.\");\n    }\n  }, {\n    key: \"_loadTestFont\",\n    get: function get() {\n      (0, _util.unreachable)(\"Abstract method `_loadTestFont`.\");\n    }\n  }, {\n    key: \"_prepareFontLoadEvent\",\n    value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {\n      (0, _util.unreachable)(\"Abstract method `_prepareFontLoadEvent`.\");\n    }\n  }]);\n\n  return BaseFontLoader;\n}();\n\nvar FontLoader;\nexports.FontLoader = FontLoader;\n{\n  exports.FontLoader = FontLoader = /*#__PURE__*/function (_BaseFontLoader) {\n    _inherits(GenericFontLoader, _BaseFontLoader);\n\n    var _super = _createSuper(GenericFontLoader);\n\n    function GenericFontLoader(params) {\n      var _this2;\n\n      _classCallCheck(this, GenericFontLoader);\n\n      _this2 = _super.call(this, params);\n      _this2.loadingContext = {\n        requests: [],\n        nextRequestId: 0\n      };\n      _this2.loadTestFontId = 0;\n      return _this2;\n    }\n\n    _createClass(GenericFontLoader, [{\n      key: \"isSyncFontLoadingSupported\",\n      get: function get() {\n        var supported = false;\n\n        if (typeof navigator === \"undefined\") {\n          supported = true;\n        } else {\n          var m = /Mozilla\\/5.0.*?rv:(\\d+).*? Gecko/.exec(navigator.userAgent);\n\n          if ((m === null || m === void 0 ? void 0 : m[1]) >= 14) {\n            supported = true;\n          }\n        }\n\n        return (0, _util.shadow)(this, \"isSyncFontLoadingSupported\", supported);\n      }\n    }, {\n      key: \"_queueLoadingCallback\",\n      value: function _queueLoadingCallback(callback) {\n        function completeRequest() {\n          (0, _util.assert)(!request.done, \"completeRequest() cannot be called twice.\");\n          request.done = true;\n\n          while (context.requests.length > 0 && context.requests[0].done) {\n            var otherRequest = context.requests.shift();\n            setTimeout(otherRequest.callback, 0);\n          }\n        }\n\n        var context = this.loadingContext;\n        var request = {\n          id: \"pdfjs-font-loading-\".concat(context.nextRequestId++),\n          done: false,\n          complete: completeRequest,\n          callback: callback\n        };\n        context.requests.push(request);\n        return request;\n      }\n    }, {\n      key: \"_loadTestFont\",\n      get: function get() {\n        var getLoadTestFont = function getLoadTestFont() {\n          return atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" + \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" + \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" + \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" + \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" + \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" + \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" + \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" + \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" + \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" + \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" + \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" + \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" + \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" + \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" + \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" + \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\n        };\n\n        return (0, _util.shadow)(this, \"_loadTestFont\", getLoadTestFont());\n      }\n    }, {\n      key: \"_prepareFontLoadEvent\",\n      value: function _prepareFontLoadEvent(rules, fonts, request) {\n        function int32(data, offset) {\n          return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\n        }\n\n        function spliceString(s, offset, remove, insert) {\n          var chunk1 = s.substring(0, offset);\n          var chunk2 = s.substring(offset + remove);\n          return chunk1 + insert + chunk2;\n        }\n\n        var i, ii;\n\n        var canvas = this._document.createElement(\"canvas\");\n\n        canvas.width = 1;\n        canvas.height = 1;\n        var ctx = canvas.getContext(\"2d\");\n        var called = 0;\n\n        function isFontReady(name, callback) {\n          called++;\n\n          if (called > 30) {\n            (0, _util.warn)(\"Load test font never loaded.\");\n            callback();\n            return;\n          }\n\n          ctx.font = \"30px \" + name;\n          ctx.fillText(\".\", 0, 20);\n          var imageData = ctx.getImageData(0, 0, 1, 1);\n\n          if (imageData.data[3] > 0) {\n            callback();\n            return;\n          }\n\n          setTimeout(isFontReady.bind(null, name, callback));\n        }\n\n        var loadTestFontId = \"lt\".concat(Date.now()).concat(this.loadTestFontId++);\n        var data = this._loadTestFont;\n        var COMMENT_OFFSET = 976;\n        data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\n        var CFF_CHECKSUM_OFFSET = 16;\n        var XXXX_VALUE = 0x58585858;\n        var checksum = int32(data, CFF_CHECKSUM_OFFSET);\n\n        for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n          checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\n        }\n\n        if (i < loadTestFontId.length) {\n          checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\n        }\n\n        data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));\n        var url = \"url(data:font/opentype;base64,\".concat(btoa(data), \");\");\n        var rule = \"@font-face {font-family:\\\"\".concat(loadTestFontId, \"\\\";src:\").concat(url, \"}\");\n        this.insertRule(rule);\n        var names = [];\n\n        var _iterator2 = _createForOfIteratorHelper(fonts),\n            _step2;\n\n        try {\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n            var font = _step2.value;\n            names.push(font.loadedName);\n          }\n        } catch (err) {\n          _iterator2.e(err);\n        } finally {\n          _iterator2.f();\n        }\n\n        names.push(loadTestFontId);\n\n        var div = this._document.createElement(\"div\");\n\n        div.style.visibility = \"hidden\";\n        div.style.width = div.style.height = \"10px\";\n        div.style.position = \"absolute\";\n        div.style.top = div.style.left = \"0px\";\n\n        for (var _i = 0, _names = names; _i < _names.length; _i++) {\n          var name = _names[_i];\n\n          var span = this._document.createElement(\"span\");\n\n          span.textContent = \"Hi\";\n          span.style.fontFamily = name;\n          div.appendChild(span);\n        }\n\n        this._document.body.appendChild(div);\n\n        isFontReady(loadTestFontId, function () {\n          div.remove();\n          request.complete();\n        });\n      }\n    }]);\n\n    return GenericFontLoader;\n  }(BaseFontLoader);\n}\n\nvar FontFaceObject = /*#__PURE__*/function () {\n  function FontFaceObject(translatedData, _ref2) {\n    var _ref2$isEvalSupported = _ref2.isEvalSupported,\n        isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,\n        _ref2$disableFontFace = _ref2.disableFontFace,\n        disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,\n        _ref2$ignoreErrors = _ref2.ignoreErrors,\n        ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,\n        onUnsupportedFeature = _ref2.onUnsupportedFeature,\n        _ref2$fontRegistry = _ref2.fontRegistry,\n        fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;\n\n    _classCallCheck(this, FontFaceObject);\n\n    this.compiledGlyphs = Object.create(null);\n\n    for (var i in translatedData) {\n      this[i] = translatedData[i];\n    }\n\n    this.isEvalSupported = isEvalSupported !== false;\n    this.disableFontFace = disableFontFace === true;\n    this.ignoreErrors = ignoreErrors === true;\n    this._onUnsupportedFeature = onUnsupportedFeature;\n    this.fontRegistry = fontRegistry;\n  }\n\n  _createClass(FontFaceObject, [{\n    key: \"createNativeFontFace\",\n    value: function createNativeFontFace() {\n      if (!this.data || this.disableFontFace) {\n        return null;\n      }\n\n      var nativeFontFace;\n\n      if (!this.cssFontInfo) {\n        nativeFontFace = new FontFace(this.loadedName, this.data, {});\n      } else {\n        var css = {\n          weight: this.cssFontInfo.fontWeight\n        };\n\n        if (this.cssFontInfo.italicAngle) {\n          css.style = \"oblique \".concat(this.cssFontInfo.italicAngle, \"deg\");\n        }\n\n        nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);\n      }\n\n      if (this.fontRegistry) {\n        this.fontRegistry.registerFont(this);\n      }\n\n      return nativeFontFace;\n    }\n  }, {\n    key: \"createFontFaceRule\",\n    value: function createFontFaceRule() {\n      if (!this.data || this.disableFontFace) {\n        return null;\n      }\n\n      var data = (0, _util.bytesToString)(this.data);\n      var url = \"url(data:\".concat(this.mimetype, \";base64,\").concat(btoa(data), \");\");\n      var rule;\n\n      if (!this.cssFontInfo) {\n        rule = \"@font-face {font-family:\\\"\".concat(this.loadedName, \"\\\";src:\").concat(url, \"}\");\n      } else {\n        var css = \"font-weight: \".concat(this.cssFontInfo.fontWeight, \";\");\n\n        if (this.cssFontInfo.italicAngle) {\n          css += \"font-style: oblique \".concat(this.cssFontInfo.italicAngle, \"deg;\");\n        }\n\n        rule = \"@font-face {font-family:\\\"\".concat(this.cssFontInfo.fontFamily, \"\\\";\").concat(css, \"src:\").concat(url, \"}\");\n      }\n\n      if (this.fontRegistry) {\n        this.fontRegistry.registerFont(this, url);\n      }\n\n      return rule;\n    }\n  }, {\n    key: \"getPathGenerator\",\n    value: function getPathGenerator(objs, character) {\n      if (this.compiledGlyphs[character] !== undefined) {\n        return this.compiledGlyphs[character];\n      }\n\n      var cmds;\n\n      try {\n        cmds = objs.get(this.loadedName + \"_path_\" + character);\n      } catch (ex) {\n        if (!this.ignoreErrors) {\n          throw ex;\n        }\n\n        this._onUnsupportedFeature({\n          featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath\n        });\n\n        (0, _util.warn)(\"getPathGenerator - ignoring character: \\\"\".concat(ex, \"\\\".\"));\n        return this.compiledGlyphs[character] = function (c, size) {};\n      }\n\n      if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {\n        var jsBuf = [];\n\n        var _iterator3 = _createForOfIteratorHelper(cmds),\n            _step3;\n\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var current = _step3.value;\n            var args = current.args !== undefined ? current.args.join(\",\") : \"\";\n            jsBuf.push(\"c.\", current.cmd, \"(\", args, \");\\n\");\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n\n        return this.compiledGlyphs[character] = new Function(\"c\", \"size\", jsBuf.join(\"\"));\n      }\n\n      return this.compiledGlyphs[character] = function (c, size) {\n        var _iterator4 = _createForOfIteratorHelper(cmds),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var _current = _step4.value;\n\n            if (_current.cmd === \"scale\") {\n              _current.args = [size, -size];\n            }\n\n            c[_current.cmd].apply(c, _current.args);\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      };\n    }\n  }]);\n\n  return FontFaceObject;\n}();\n\nexports.FontFaceObject = FontFaceObject;\n\n/***/ }),\n/* 138 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;\n\nvar _base_factory = __w_pdfjs_require__(135);\n\nvar _is_node = __w_pdfjs_require__(6);\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NodeCanvasFactory = function NodeCanvasFactory() {\n  _classCallCheck(this, NodeCanvasFactory);\n\n  (0, _util.unreachable)(\"Not implemented: NodeCanvasFactory\");\n};\n\nexports.NodeCanvasFactory = NodeCanvasFactory;\n\nvar NodeCMapReaderFactory = function NodeCMapReaderFactory() {\n  _classCallCheck(this, NodeCMapReaderFactory);\n\n  (0, _util.unreachable)(\"Not implemented: NodeCMapReaderFactory\");\n};\n\nexports.NodeCMapReaderFactory = NodeCMapReaderFactory;\n\nvar NodeStandardFontDataFactory = function NodeStandardFontDataFactory() {\n  _classCallCheck(this, NodeStandardFontDataFactory);\n\n  (0, _util.unreachable)(\"Not implemented: NodeStandardFontDataFactory\");\n};\n\nexports.NodeStandardFontDataFactory = NodeStandardFontDataFactory;\n\nif (_is_node.isNodeJS) {\n  var fetchData = function fetchData(url) {\n    return new Promise(function (resolve, reject) {\n      var fs = require(\"fs\");\n\n      fs.readFile(url, function (error, data) {\n        if (error || !data) {\n          reject(new Error(error));\n          return;\n        }\n\n        resolve(new Uint8Array(data));\n      });\n    });\n  };\n\n  exports.NodeCanvasFactory = NodeCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {\n    _inherits(NodeCanvasFactory, _BaseCanvasFactory);\n\n    var _super = _createSuper(NodeCanvasFactory);\n\n    function NodeCanvasFactory() {\n      _classCallCheck(this, NodeCanvasFactory);\n\n      return _super.apply(this, arguments);\n    }\n\n    _createClass(NodeCanvasFactory, [{\n      key: \"_createCanvas\",\n      value: function _createCanvas(width, height) {\n        var Canvas = require(\"canvas\");\n\n        return Canvas.createCanvas(width, height);\n      }\n    }]);\n\n    return NodeCanvasFactory;\n  }(_base_factory.BaseCanvasFactory);\n\n  exports.NodeCMapReaderFactory = NodeCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {\n    _inherits(NodeCMapReaderFactory, _BaseCMapReaderFactor);\n\n    var _super2 = _createSuper(NodeCMapReaderFactory);\n\n    function NodeCMapReaderFactory() {\n      _classCallCheck(this, NodeCMapReaderFactory);\n\n      return _super2.apply(this, arguments);\n    }\n\n    _createClass(NodeCMapReaderFactory, [{\n      key: \"_fetchData\",\n      value: function _fetchData(url, compressionType) {\n        return fetchData(url).then(function (data) {\n          return {\n            cMapData: data,\n            compressionType: compressionType\n          };\n        });\n      }\n    }]);\n\n    return NodeCMapReaderFactory;\n  }(_base_factory.BaseCMapReaderFactory);\n\n  exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = /*#__PURE__*/function (_BaseStandardFontData) {\n    _inherits(NodeStandardFontDataFactory, _BaseStandardFontData);\n\n    var _super3 = _createSuper(NodeStandardFontDataFactory);\n\n    function NodeStandardFontDataFactory() {\n      _classCallCheck(this, NodeStandardFontDataFactory);\n\n      return _super3.apply(this, arguments);\n    }\n\n    _createClass(NodeStandardFontDataFactory, [{\n      key: \"_fetchData\",\n      value: function _fetchData(url) {\n        return fetchData(url);\n      }\n    }]);\n\n    return NodeStandardFontDataFactory;\n  }(_base_factory.BaseStandardFontDataFactory);\n}\n\n/***/ }),\n/* 139 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.AnnotationStorage = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar AnnotationStorage = /*#__PURE__*/function () {\n  function AnnotationStorage() {\n    _classCallCheck(this, AnnotationStorage);\n\n    this._storage = new Map();\n    this._timeStamp = Date.now();\n    this._modified = false;\n    this.onSetModified = null;\n    this.onResetModified = null;\n  }\n\n  _createClass(AnnotationStorage, [{\n    key: \"getValue\",\n    value: function getValue(key, defaultValue) {\n      var value = this._storage.get(key);\n\n      if (value === undefined) {\n        return defaultValue;\n      }\n\n      return Object.assign(defaultValue, value);\n    }\n  }, {\n    key: \"setValue\",\n    value: function setValue(key, value) {\n      var obj = this._storage.get(key);\n\n      var modified = false;\n\n      if (obj !== undefined) {\n        for (var _i = 0, _Object$entries = Object.entries(value); _i < _Object$entries.length; _i++) {\n          var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n              entry = _Object$entries$_i[0],\n              val = _Object$entries$_i[1];\n\n          if (obj[entry] !== val) {\n            modified = true;\n            obj[entry] = val;\n          }\n        }\n      } else {\n        modified = true;\n\n        this._storage.set(key, value);\n      }\n\n      if (modified) {\n        this._timeStamp = Date.now();\n\n        this._setModified();\n      }\n    }\n  }, {\n    key: \"getAll\",\n    value: function getAll() {\n      return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null;\n    }\n  }, {\n    key: \"size\",\n    get: function get() {\n      return this._storage.size;\n    }\n  }, {\n    key: \"_setModified\",\n    value: function _setModified() {\n      if (!this._modified) {\n        this._modified = true;\n\n        if (typeof this.onSetModified === \"function\") {\n          this.onSetModified();\n        }\n      }\n    }\n  }, {\n    key: \"resetModified\",\n    value: function resetModified() {\n      if (this._modified) {\n        this._modified = false;\n\n        if (typeof this.onResetModified === \"function\") {\n          this.onResetModified();\n        }\n      }\n    }\n  }, {\n    key: \"serializable\",\n    get: function get() {\n      return this._storage.size > 0 ? this._storage : null;\n    }\n  }, {\n    key: \"lastModified\",\n    get: function get() {\n      return this._timeStamp.toString();\n    }\n  }]);\n\n  return AnnotationStorage;\n}();\n\nexports.AnnotationStorage = AnnotationStorage;\n\n/***/ }),\n/* 140 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.CanvasGraphics = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _pattern_helper = __w_pdfjs_require__(141);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar MIN_FONT_SIZE = 16;\nvar MAX_FONT_SIZE = 100;\nvar MAX_GROUP_SIZE = 4096;\nvar EXECUTION_TIME = 15;\nvar EXECUTION_STEPS = 10;\nvar COMPILE_TYPE3_GLYPHS = true;\nvar MAX_SIZE_TO_COMPILE = 1000;\nvar FULL_CHUNK_HEIGHT = 16;\nvar LINEWIDTH_SCALE_FACTOR = 1.000001;\n\nfunction mirrorContextOperations(ctx, destCtx) {\n  if (ctx._removeMirroring) {\n    throw new Error(\"Context is already forwarding operations.\");\n  }\n\n  ctx.__originalSave = ctx.save;\n  ctx.__originalRestore = ctx.restore;\n  ctx.__originalRotate = ctx.rotate;\n  ctx.__originalScale = ctx.scale;\n  ctx.__originalTranslate = ctx.translate;\n  ctx.__originalTransform = ctx.transform;\n  ctx.__originalSetTransform = ctx.setTransform;\n  ctx.__originalResetTransform = ctx.resetTransform;\n  ctx.__originalClip = ctx.clip;\n  ctx.__originalMoveTo = ctx.moveTo;\n  ctx.__originalLineTo = ctx.lineTo;\n  ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n  ctx.__originalRect = ctx.rect;\n  ctx.__originalClosePath = ctx.closePath;\n  ctx.__originalBeginPath = ctx.beginPath;\n\n  ctx._removeMirroring = function () {\n    ctx.save = ctx.__originalSave;\n    ctx.restore = ctx.__originalRestore;\n    ctx.rotate = ctx.__originalRotate;\n    ctx.scale = ctx.__originalScale;\n    ctx.translate = ctx.__originalTranslate;\n    ctx.transform = ctx.__originalTransform;\n    ctx.setTransform = ctx.__originalSetTransform;\n    ctx.resetTransform = ctx.__originalResetTransform;\n    ctx.clip = ctx.__originalClip;\n    ctx.moveTo = ctx.__originalMoveTo;\n    ctx.lineTo = ctx.__originalLineTo;\n    ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n    ctx.rect = ctx.__originalRect;\n    ctx.closePath = ctx.__originalClosePath;\n    ctx.beginPath = ctx.__originalBeginPath;\n    delete ctx._removeMirroring;\n  };\n\n  ctx.save = function ctxSave() {\n    destCtx.save();\n\n    this.__originalSave();\n  };\n\n  ctx.restore = function ctxRestore() {\n    destCtx.restore();\n\n    this.__originalRestore();\n  };\n\n  ctx.translate = function ctxTranslate(x, y) {\n    destCtx.translate(x, y);\n\n    this.__originalTranslate(x, y);\n  };\n\n  ctx.scale = function ctxScale(x, y) {\n    destCtx.scale(x, y);\n\n    this.__originalScale(x, y);\n  };\n\n  ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n    destCtx.transform(a, b, c, d, e, f);\n\n    this.__originalTransform(a, b, c, d, e, f);\n  };\n\n  ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n    destCtx.setTransform(a, b, c, d, e, f);\n\n    this.__originalSetTransform(a, b, c, d, e, f);\n  };\n\n  ctx.resetTransform = function ctxResetTransform() {\n    destCtx.resetTransform();\n\n    this.__originalResetTransform();\n  };\n\n  ctx.rotate = function ctxRotate(angle) {\n    destCtx.rotate(angle);\n\n    this.__originalRotate(angle);\n  };\n\n  ctx.clip = function ctxRotate(rule) {\n    destCtx.clip(rule);\n\n    this.__originalClip(rule);\n  };\n\n  ctx.moveTo = function (x, y) {\n    destCtx.moveTo(x, y);\n\n    this.__originalMoveTo(x, y);\n  };\n\n  ctx.lineTo = function (x, y) {\n    destCtx.lineTo(x, y);\n\n    this.__originalLineTo(x, y);\n  };\n\n  ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n    destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n\n    this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n  };\n\n  ctx.rect = function (x, y, width, height) {\n    destCtx.rect(x, y, width, height);\n\n    this.__originalRect(x, y, width, height);\n  };\n\n  ctx.closePath = function () {\n    destCtx.closePath();\n\n    this.__originalClosePath();\n  };\n\n  ctx.beginPath = function () {\n    destCtx.beginPath();\n\n    this.__originalBeginPath();\n  };\n}\n\nfunction addContextCurrentTransform(ctx) {\n  if (ctx.mozCurrentTransform) {\n    return;\n  }\n\n  ctx._originalSave = ctx.save;\n  ctx._originalRestore = ctx.restore;\n  ctx._originalRotate = ctx.rotate;\n  ctx._originalScale = ctx.scale;\n  ctx._originalTranslate = ctx.translate;\n  ctx._originalTransform = ctx.transform;\n  ctx._originalSetTransform = ctx.setTransform;\n  ctx._originalResetTransform = ctx.resetTransform;\n  ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];\n  ctx._transformStack = [];\n\n  try {\n    var desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), \"lineWidth\");\n    ctx._setLineWidth = desc.set;\n    ctx._getLineWidth = desc.get;\n    Object.defineProperty(ctx, \"lineWidth\", {\n      set: function setLineWidth(width) {\n        this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR);\n      },\n      get: function getLineWidth() {\n        return this._getLineWidth();\n      }\n    });\n  } catch (_) {}\n\n  Object.defineProperty(ctx, \"mozCurrentTransform\", {\n    get: function getCurrentTransform() {\n      return this._transformMatrix;\n    }\n  });\n  Object.defineProperty(ctx, \"mozCurrentTransformInverse\", {\n    get: function getCurrentTransformInverse() {\n      var _this$_transformMatri = _slicedToArray(this._transformMatrix, 6),\n          a = _this$_transformMatri[0],\n          b = _this$_transformMatri[1],\n          c = _this$_transformMatri[2],\n          d = _this$_transformMatri[3],\n          e = _this$_transformMatri[4],\n          f = _this$_transformMatri[5];\n\n      var ad_bc = a * d - b * c;\n      var bc_ad = b * c - a * d;\n      return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];\n    }\n  });\n\n  ctx.save = function ctxSave() {\n    var old = this._transformMatrix;\n\n    this._transformStack.push(old);\n\n    this._transformMatrix = old.slice(0, 6);\n\n    this._originalSave();\n  };\n\n  ctx.restore = function ctxRestore() {\n    var prev = this._transformStack.pop();\n\n    if (prev) {\n      this._transformMatrix = prev;\n\n      this._originalRestore();\n    }\n  };\n\n  ctx.translate = function ctxTranslate(x, y) {\n    var m = this._transformMatrix;\n    m[4] = m[0] * x + m[2] * y + m[4];\n    m[5] = m[1] * x + m[3] * y + m[5];\n\n    this._originalTranslate(x, y);\n  };\n\n  ctx.scale = function ctxScale(x, y) {\n    var m = this._transformMatrix;\n    m[0] *= x;\n    m[1] *= x;\n    m[2] *= y;\n    m[3] *= y;\n\n    this._originalScale(x, y);\n  };\n\n  ctx.transform = function ctxTransform(a, b, c, d, e, f) {\n    var m = this._transformMatrix;\n    this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];\n\n    ctx._originalTransform(a, b, c, d, e, f);\n  };\n\n  ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\n    this._transformMatrix = [a, b, c, d, e, f];\n\n    ctx._originalSetTransform(a, b, c, d, e, f);\n  };\n\n  ctx.resetTransform = function ctxResetTransform() {\n    this._transformMatrix = [1, 0, 0, 1, 0, 0];\n\n    ctx._originalResetTransform();\n  };\n\n  ctx.rotate = function ctxRotate(angle) {\n    var cosValue = Math.cos(angle);\n    var sinValue = Math.sin(angle);\n    var m = this._transformMatrix;\n    this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];\n\n    this._originalRotate(angle);\n  };\n}\n\nvar CachedCanvases = /*#__PURE__*/function () {\n  function CachedCanvases(canvasFactory) {\n    _classCallCheck(this, CachedCanvases);\n\n    this.canvasFactory = canvasFactory;\n    this.cache = Object.create(null);\n  }\n\n  _createClass(CachedCanvases, [{\n    key: \"getCanvas\",\n    value: function getCanvas(id, width, height, trackTransform) {\n      var canvasEntry;\n\n      if (this.cache[id] !== undefined) {\n        canvasEntry = this.cache[id];\n        this.canvasFactory.reset(canvasEntry, width, height);\n        canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);\n      } else {\n        canvasEntry = this.canvasFactory.create(width, height);\n        this.cache[id] = canvasEntry;\n      }\n\n      if (trackTransform) {\n        addContextCurrentTransform(canvasEntry.context);\n      }\n\n      return canvasEntry;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      for (var id in this.cache) {\n        var canvasEntry = this.cache[id];\n        this.canvasFactory.destroy(canvasEntry);\n        delete this.cache[id];\n      }\n    }\n  }]);\n\n  return CachedCanvases;\n}();\n\nfunction compileType3Glyph(imgData) {\n  var POINT_TO_PROCESS_LIMIT = 1000;\n  var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\n  var width = imgData.width,\n      height = imgData.height,\n      width1 = width + 1;\n  var i, ii, j, j0;\n  var points = new Uint8Array(width1 * (height + 1));\n  var lineSize = width + 7 & ~7,\n      data0 = imgData.data;\n  var data = new Uint8Array(lineSize * height);\n  var pos = 0;\n\n  for (i = 0, ii = data0.length; i < ii; i++) {\n    var elem = data0[i];\n    var mask = 128;\n\n    while (mask > 0) {\n      data[pos++] = elem & mask ? 0 : 255;\n      mask >>= 1;\n    }\n  }\n\n  var count = 0;\n  pos = 0;\n\n  if (data[pos] !== 0) {\n    points[0] = 1;\n    ++count;\n  }\n\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j] = data[pos] ? 2 : 1;\n      ++count;\n    }\n\n    pos++;\n  }\n\n  if (data[pos] !== 0) {\n    points[j] = 2;\n    ++count;\n  }\n\n  for (i = 1; i < height; i++) {\n    pos = i * lineSize;\n    j0 = i * width1;\n\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0] = data[pos] ? 1 : 8;\n      ++count;\n    }\n\n    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\n\n    for (j = 1; j < width; j++) {\n      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);\n\n      if (POINT_TYPES[sum]) {\n        points[j0 + j] = POINT_TYPES[sum];\n        ++count;\n      }\n\n      pos++;\n    }\n\n    if (data[pos - lineSize] !== data[pos]) {\n      points[j0 + j] = data[pos] ? 2 : 4;\n      ++count;\n    }\n\n    if (count > POINT_TO_PROCESS_LIMIT) {\n      return null;\n    }\n  }\n\n  pos = lineSize * (height - 1);\n  j0 = i * width1;\n\n  if (data[pos] !== 0) {\n    points[j0] = 8;\n    ++count;\n  }\n\n  for (j = 1; j < width; j++) {\n    if (data[pos] !== data[pos + 1]) {\n      points[j0 + j] = data[pos] ? 4 : 8;\n      ++count;\n    }\n\n    pos++;\n  }\n\n  if (data[pos] !== 0) {\n    points[j0 + j] = 4;\n    ++count;\n  }\n\n  if (count > POINT_TO_PROCESS_LIMIT) {\n    return null;\n  }\n\n  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\n  var outlines = [];\n\n  for (i = 0; count && i <= height; i++) {\n    var p = i * width1;\n    var end = p + width;\n\n    while (p < end && !points[p]) {\n      p++;\n    }\n\n    if (p === end) {\n      continue;\n    }\n\n    var coords = [p % width1, i];\n    var p0 = p;\n    var type = points[p];\n\n    do {\n      var step = steps[type];\n\n      do {\n        p += step;\n      } while (!points[p]);\n\n      var pp = points[p];\n\n      if (pp !== 5 && pp !== 10) {\n        type = pp;\n        points[p] = 0;\n      } else {\n        type = pp & 0x33 * type >> 4;\n        points[p] &= type >> 2 | type << 2;\n      }\n\n      coords.push(p % width1, p / width1 | 0);\n\n      if (!points[p]) {\n        --count;\n      }\n    } while (p0 !== p);\n\n    outlines.push(coords);\n    --i;\n  }\n\n  var drawOutline = function drawOutline(c) {\n    c.save();\n    c.scale(1 / width, -1 / height);\n    c.translate(0, -height);\n    c.beginPath();\n\n    for (var k = 0, kk = outlines.length; k < kk; k++) {\n      var o = outlines[k];\n      c.moveTo(o[0], o[1]);\n\n      for (var l = 2, ll = o.length; l < ll; l += 2) {\n        c.lineTo(o[l], o[l + 1]);\n      }\n    }\n\n    c.fill();\n    c.beginPath();\n    c.restore();\n  };\n\n  return drawOutline;\n}\n\nvar CanvasExtraState = /*#__PURE__*/function () {\n  function CanvasExtraState(width, height) {\n    _classCallCheck(this, CanvasExtraState);\n\n    this.alphaIsShape = false;\n    this.fontSize = 0;\n    this.fontSizeScale = 1;\n    this.textMatrix = _util.IDENTITY_MATRIX;\n    this.textMatrixScale = 1;\n    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n    this.leading = 0;\n    this.x = 0;\n    this.y = 0;\n    this.lineX = 0;\n    this.lineY = 0;\n    this.charSpacing = 0;\n    this.wordSpacing = 0;\n    this.textHScale = 1;\n    this.textRenderingMode = _util.TextRenderingMode.FILL;\n    this.textRise = 0;\n    this.fillColor = \"#000000\";\n    this.strokeColor = \"#000000\";\n    this.patternFill = false;\n    this.fillAlpha = 1;\n    this.strokeAlpha = 1;\n    this.lineWidth = 1;\n    this.activeSMask = null;\n    this.transferMaps = null;\n    this.startNewPathAndClipBox([0, 0, width, height]);\n  }\n\n  _createClass(CanvasExtraState, [{\n    key: \"clone\",\n    value: function clone() {\n      var clone = Object.create(this);\n      clone.clipBox = this.clipBox.slice();\n      return clone;\n    }\n  }, {\n    key: \"setCurrentPoint\",\n    value: function setCurrentPoint(x, y) {\n      this.x = x;\n      this.y = y;\n    }\n  }, {\n    key: \"updatePathMinMax\",\n    value: function updatePathMinMax(transform, x, y) {\n      var _Util$applyTransform = _util.Util.applyTransform([x, y], transform);\n\n      var _Util$applyTransform2 = _slicedToArray(_Util$applyTransform, 2);\n\n      x = _Util$applyTransform2[0];\n      y = _Util$applyTransform2[1];\n      this.minX = Math.min(this.minX, x);\n      this.minY = Math.min(this.minY, y);\n      this.maxX = Math.max(this.maxX, x);\n      this.maxY = Math.max(this.maxY, y);\n    }\n  }, {\n    key: \"updateCurvePathMinMax\",\n    value: function updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) {\n      var box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);\n\n      this.updatePathMinMax(transform, box[0], box[1]);\n      this.updatePathMinMax(transform, box[2], box[3]);\n    }\n  }, {\n    key: \"getPathBoundingBox\",\n    value: function getPathBoundingBox() {\n      var pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;\n      var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var box = [this.minX, this.minY, this.maxX, this.maxY];\n\n      if (pathType === _pattern_helper.PathType.STROKE) {\n        if (!transform) {\n          (0, _util.unreachable)(\"Stroke bounding box must include transform.\");\n        }\n\n        var scale = _util.Util.singularValueDecompose2dScale(transform);\n\n        var xStrokePad = scale[0] * this.lineWidth / 2;\n        var yStrokePad = scale[1] * this.lineWidth / 2;\n        box[0] -= xStrokePad;\n        box[1] -= yStrokePad;\n        box[2] += xStrokePad;\n        box[3] += yStrokePad;\n      }\n\n      return box;\n    }\n  }, {\n    key: \"updateClipFromPath\",\n    value: function updateClipFromPath() {\n      var intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());\n\n      this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n    }\n  }, {\n    key: \"startNewPathAndClipBox\",\n    value: function startNewPathAndClipBox(box) {\n      this.clipBox = box;\n      this.minX = Infinity;\n      this.minY = Infinity;\n      this.maxX = 0;\n      this.maxY = 0;\n    }\n  }, {\n    key: \"getClippedPathBoundingBox\",\n    value: function getClippedPathBoundingBox() {\n      var pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL;\n      var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));\n    }\n  }]);\n\n  return CanvasExtraState;\n}();\n\nfunction putBinaryImageData(ctx, imgData) {\n  var transferMaps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n  if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\n    ctx.putImageData(imgData, 0, 0);\n    return;\n  }\n\n  var height = imgData.height,\n      width = imgData.width;\n  var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  var srcPos = 0,\n      destPos;\n  var src = imgData.data;\n  var dest = chunkImgData.data;\n  var i, j, thisChunkHeight, elemsInThisChunk;\n  var transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;\n\n  if (transferMaps) {\n    switch (transferMaps.length) {\n      case 1:\n        transferMapRed = transferMaps[0];\n        transferMapGreen = transferMaps[0];\n        transferMapBlue = transferMaps[0];\n        transferMapGray = transferMaps[0];\n        break;\n\n      case 4:\n        transferMapRed = transferMaps[0];\n        transferMapGreen = transferMaps[1];\n        transferMapBlue = transferMaps[2];\n        transferMapGray = transferMaps[3];\n        break;\n    }\n  }\n\n  if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {\n    var srcLength = src.byteLength;\n    var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n    var dest32DataLength = dest32.length;\n    var fullSrcDiff = width + 7 >> 3;\n    var white = 0xffffffff;\n    var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;\n\n    if (transferMapGray) {\n      if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {\n        var _ref = [black, white];\n        white = _ref[0];\n        black = _ref[1];\n      }\n    }\n\n    for (i = 0; i < totalChunks; i++) {\n      thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n      destPos = 0;\n\n      for (j = 0; j < thisChunkHeight; j++) {\n        var srcDiff = srcLength - srcPos;\n        var k = 0;\n        var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n        var kEndUnrolled = kEnd & ~7;\n        var mask = 0;\n        var srcByte = 0;\n\n        for (; k < kEndUnrolled; k += 8) {\n          srcByte = src[srcPos++];\n          dest32[destPos++] = srcByte & 128 ? white : black;\n          dest32[destPos++] = srcByte & 64 ? white : black;\n          dest32[destPos++] = srcByte & 32 ? white : black;\n          dest32[destPos++] = srcByte & 16 ? white : black;\n          dest32[destPos++] = srcByte & 8 ? white : black;\n          dest32[destPos++] = srcByte & 4 ? white : black;\n          dest32[destPos++] = srcByte & 2 ? white : black;\n          dest32[destPos++] = srcByte & 1 ? white : black;\n        }\n\n        for (; k < kEnd; k++) {\n          if (mask === 0) {\n            srcByte = src[srcPos++];\n            mask = 128;\n          }\n\n          dest32[destPos++] = srcByte & mask ? white : black;\n          mask >>= 1;\n        }\n      }\n\n      while (destPos < dest32DataLength) {\n        dest32[destPos++] = 0;\n      }\n\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {\n    var hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);\n    j = 0;\n    elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n\n    for (i = 0; i < fullChunks; i++) {\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n      srcPos += elemsInThisChunk;\n\n      if (hasTransferMaps) {\n        for (var _k = 0; _k < elemsInThisChunk; _k += 4) {\n          if (transferMapRed) {\n            dest[_k + 0] = transferMapRed[dest[_k + 0]];\n          }\n\n          if (transferMapGreen) {\n            dest[_k + 1] = transferMapGreen[dest[_k + 1]];\n          }\n\n          if (transferMapBlue) {\n            dest[_k + 2] = transferMapBlue[dest[_k + 2]];\n          }\n        }\n      }\n\n      ctx.putImageData(chunkImgData, 0, j);\n      j += FULL_CHUNK_HEIGHT;\n    }\n\n    if (i < totalChunks) {\n      elemsInThisChunk = width * partialChunkHeight * 4;\n      dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n      if (hasTransferMaps) {\n        for (var _k2 = 0; _k2 < elemsInThisChunk; _k2 += 4) {\n          if (transferMapRed) {\n            dest[_k2 + 0] = transferMapRed[dest[_k2 + 0]];\n          }\n\n          if (transferMapGreen) {\n            dest[_k2 + 1] = transferMapGreen[dest[_k2 + 1]];\n          }\n\n          if (transferMapBlue) {\n            dest[_k2 + 2] = transferMapBlue[dest[_k2 + 2]];\n          }\n        }\n      }\n\n      ctx.putImageData(chunkImgData, 0, j);\n    }\n  } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {\n    var _hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);\n\n    thisChunkHeight = FULL_CHUNK_HEIGHT;\n    elemsInThisChunk = width * thisChunkHeight;\n\n    for (i = 0; i < totalChunks; i++) {\n      if (i >= fullChunks) {\n        thisChunkHeight = partialChunkHeight;\n        elemsInThisChunk = width * thisChunkHeight;\n      }\n\n      destPos = 0;\n\n      for (j = elemsInThisChunk; j--;) {\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = src[srcPos++];\n        dest[destPos++] = 255;\n      }\n\n      if (_hasTransferMaps) {\n        for (var _k3 = 0; _k3 < destPos; _k3 += 4) {\n          if (transferMapRed) {\n            dest[_k3 + 0] = transferMapRed[dest[_k3 + 0]];\n          }\n\n          if (transferMapGreen) {\n            dest[_k3 + 1] = transferMapGreen[dest[_k3 + 1]];\n          }\n\n          if (transferMapBlue) {\n            dest[_k3 + 2] = transferMapBlue[dest[_k3 + 2]];\n          }\n        }\n      }\n\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n    }\n  } else {\n    throw new Error(\"bad image kind: \".concat(imgData.kind));\n  }\n}\n\nfunction putBinaryImageMask(ctx, imgData) {\n  var height = imgData.height,\n      width = imgData.width;\n  var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n  var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n  var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n  var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n  var srcPos = 0;\n  var src = imgData.data;\n  var dest = chunkImgData.data;\n\n  for (var i = 0; i < totalChunks; i++) {\n    var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n    var destPos = 3;\n\n    for (var j = 0; j < thisChunkHeight; j++) {\n      var elem = void 0,\n          mask = 0;\n\n      for (var k = 0; k < width; k++) {\n        if (!mask) {\n          elem = src[srcPos++];\n          mask = 128;\n        }\n\n        dest[destPos] = elem & mask ? 0 : 255;\n        destPos += 4;\n        mask >>= 1;\n      }\n    }\n\n    ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n  }\n}\n\nfunction copyCtxState(sourceCtx, destCtx) {\n  var properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\"];\n\n  for (var i = 0, ii = properties.length; i < ii; i++) {\n    var property = properties[i];\n\n    if (sourceCtx[property] !== undefined) {\n      destCtx[property] = sourceCtx[property];\n    }\n  }\n\n  if (sourceCtx.setLineDash !== undefined) {\n    destCtx.setLineDash(sourceCtx.getLineDash());\n    destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n  }\n}\n\nfunction resetCtxToDefault(ctx) {\n  ctx.strokeStyle = \"#000000\";\n  ctx.fillStyle = \"#000000\";\n  ctx.fillRule = \"nonzero\";\n  ctx.globalAlpha = 1;\n  ctx.lineWidth = 1;\n  ctx.lineCap = \"butt\";\n  ctx.lineJoin = \"miter\";\n  ctx.miterLimit = 10;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.font = \"10px sans-serif\";\n\n  if (ctx.setLineDash !== undefined) {\n    ctx.setLineDash([]);\n    ctx.lineDashOffset = 0;\n  }\n}\n\nfunction composeSMaskBackdrop(bytes, r0, g0, b0) {\n  var length = bytes.length;\n\n  for (var i = 3; i < length; i += 4) {\n    var alpha = bytes[i];\n\n    if (alpha === 0) {\n      bytes[i - 3] = r0;\n      bytes[i - 2] = g0;\n      bytes[i - 1] = b0;\n    } else if (alpha < 255) {\n      var alpha_ = 255 - alpha;\n      bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;\n      bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;\n      bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;\n    }\n  }\n}\n\nfunction composeSMaskAlpha(maskData, layerData, transferMap) {\n  var length = maskData.length;\n  var scale = 1 / 255;\n\n  for (var i = 3; i < length; i += 4) {\n    var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];\n    layerData[i] = layerData[i] * alpha * scale | 0;\n  }\n}\n\nfunction composeSMaskLuminosity(maskData, layerData, transferMap) {\n  var length = maskData.length;\n\n  for (var i = 3; i < length; i += 4) {\n    var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;\n    layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;\n  }\n}\n\nfunction genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {\n  var hasBackdrop = !!backdrop;\n  var r0 = hasBackdrop ? backdrop[0] : 0;\n  var g0 = hasBackdrop ? backdrop[1] : 0;\n  var b0 = hasBackdrop ? backdrop[2] : 0;\n  var composeFn;\n\n  if (subtype === \"Luminosity\") {\n    composeFn = composeSMaskLuminosity;\n  } else {\n    composeFn = composeSMaskAlpha;\n  }\n\n  var PIXELS_TO_PROCESS = 1048576;\n  var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));\n\n  for (var row = 0; row < height; row += chunkSize) {\n    var chunkHeight = Math.min(chunkSize, height - row);\n    var maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight);\n    var layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight);\n\n    if (hasBackdrop) {\n      composeSMaskBackdrop(maskData.data, r0, g0, b0);\n    }\n\n    composeFn(maskData.data, layerData.data, transferMap);\n    layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY);\n  }\n}\n\nfunction composeSMask(ctx, smask, layerCtx, layerBox) {\n  var layerOffsetX = layerBox[0];\n  var layerOffsetY = layerBox[1];\n  var layerWidth = layerBox[2] - layerOffsetX;\n  var layerHeight = layerBox[3] - layerOffsetY;\n\n  if (layerWidth === 0 || layerHeight === 0) {\n    return;\n  }\n\n  genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);\n  ctx.save();\n  ctx.globalAlpha = 1;\n  ctx.globalCompositeOperation = \"source-over\";\n  ctx.setTransform(1, 0, 0, 1, 0, 0);\n  ctx.drawImage(layerCtx.canvas, 0, 0);\n  ctx.restore();\n}\n\nfunction getImageSmoothingEnabled(transform, interpolate) {\n  var scale = _util.Util.singularValueDecompose2dScale(transform);\n\n  scale[0] = Math.fround(scale[0]);\n  scale[1] = Math.fround(scale[1]);\n  var actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);\n\n  if (interpolate !== undefined) {\n    return interpolate;\n  } else if (scale[0] <= actualScale || scale[1] <= actualScale) {\n    return true;\n  }\n\n  return false;\n}\n\nvar LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nvar LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nvar NORMAL_CLIP = {};\nvar EO_CLIP = {};\n\nvar CanvasGraphics = /*#__PURE__*/function () {\n  function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap) {\n    _classCallCheck(this, CanvasGraphics);\n\n    this.ctx = canvasCtx;\n    this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n    this.stateStack = [];\n    this.pendingClip = null;\n    this.pendingEOFill = false;\n    this.res = null;\n    this.xobjs = null;\n    this.commonObjs = commonObjs;\n    this.objs = objs;\n    this.canvasFactory = canvasFactory;\n    this.imageLayer = imageLayer;\n    this.groupStack = [];\n    this.processingType3 = null;\n    this.baseTransform = null;\n    this.baseTransformStack = [];\n    this.groupLevel = 0;\n    this.smaskStack = [];\n    this.smaskCounter = 0;\n    this.tempSMask = null;\n    this.suspendedCtx = null;\n    this.contentVisible = true;\n    this.markedContentStack = [];\n    this.optionalContentConfig = optionalContentConfig;\n    this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n    this.cachedPatterns = new Map();\n    this.annotationCanvasMap = annotationCanvasMap;\n    this.viewportScale = 1;\n    this.outputScaleX = 1;\n    this.outputScaleY = 1;\n\n    if (canvasCtx) {\n      addContextCurrentTransform(canvasCtx);\n    }\n\n    this._cachedGetSinglePixelWidth = null;\n  }\n\n  _createClass(CanvasGraphics, [{\n    key: \"beginDrawing\",\n    value: function beginDrawing(_ref2) {\n      var transform = _ref2.transform,\n          viewport = _ref2.viewport,\n          _ref2$transparency = _ref2.transparency,\n          transparency = _ref2$transparency === void 0 ? false : _ref2$transparency,\n          _ref2$background = _ref2.background,\n          background = _ref2$background === void 0 ? null : _ref2$background;\n      var width = this.ctx.canvas.width;\n      var height = this.ctx.canvas.height;\n      this.ctx.save();\n      this.ctx.fillStyle = background || \"rgb(255, 255, 255)\";\n      this.ctx.fillRect(0, 0, width, height);\n      this.ctx.restore();\n\n      if (transparency) {\n        var transparentCanvas = this.cachedCanvases.getCanvas(\"transparent\", width, height, true);\n        this.compositeCtx = this.ctx;\n        this.transparentCanvas = transparentCanvas.canvas;\n        this.ctx = transparentCanvas.context;\n        this.ctx.save();\n        this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);\n      }\n\n      this.ctx.save();\n      resetCtxToDefault(this.ctx);\n\n      if (transform) {\n        this.ctx.transform.apply(this.ctx, transform);\n        this.outputScaleX = transform[0];\n        this.outputScaleY = transform[0];\n      }\n\n      this.ctx.transform.apply(this.ctx, viewport.transform);\n      this.viewportScale = viewport.scale;\n      this.baseTransform = this.ctx.mozCurrentTransform.slice();\n      this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]);\n\n      if (this.imageLayer) {\n        this.imageLayer.beginLayout();\n      }\n    }\n  }, {\n    key: \"executeOperatorList\",\n    value: function executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {\n      var argsArray = operatorList.argsArray;\n      var fnArray = operatorList.fnArray;\n      var i = executionStartIdx || 0;\n      var argsArrayLen = argsArray.length;\n\n      if (argsArrayLen === i) {\n        return i;\n      }\n\n      var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\n      var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n      var steps = 0;\n      var commonObjs = this.commonObjs;\n      var objs = this.objs;\n      var fnId;\n\n      while (true) {\n        if (stepper !== undefined && i === stepper.nextBreakPoint) {\n          stepper.breakIt(i, continueCallback);\n          return i;\n        }\n\n        fnId = fnArray[i];\n\n        if (fnId !== _util.OPS.dependency) {\n          this[fnId].apply(this, argsArray[i]);\n        } else {\n          var _iterator = _createForOfIteratorHelper(argsArray[i]),\n              _step;\n\n          try {\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\n              var depObjId = _step.value;\n              var objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n              if (!objsPool.has(depObjId)) {\n                objsPool.get(depObjId, continueCallback);\n                return i;\n              }\n            }\n          } catch (err) {\n            _iterator.e(err);\n          } finally {\n            _iterator.f();\n          }\n        }\n\n        i++;\n\n        if (i === argsArrayLen) {\n          return i;\n        }\n\n        if (chunkOperations && ++steps > EXECUTION_STEPS) {\n          if (Date.now() > endTime) {\n            continueCallback();\n            return i;\n          }\n\n          steps = 0;\n        }\n      }\n    }\n  }, {\n    key: \"endDrawing\",\n    value: function endDrawing() {\n      while (this.stateStack.length || this.current.activeSMask !== null) {\n        this.restore();\n      }\n\n      this.ctx.restore();\n\n      if (this.transparentCanvas) {\n        this.ctx = this.compositeCtx;\n        this.ctx.save();\n        this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n        this.ctx.drawImage(this.transparentCanvas, 0, 0);\n        this.ctx.restore();\n        this.transparentCanvas = null;\n      }\n\n      this.cachedCanvases.clear();\n      this.cachedPatterns.clear();\n\n      if (this.imageLayer) {\n        this.imageLayer.endLayout();\n      }\n    }\n  }, {\n    key: \"_scaleImage\",\n    value: function _scaleImage(img, inverseTransform) {\n      var width = img.width;\n      var height = img.height;\n      var widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);\n      var heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);\n      var paintWidth = width,\n          paintHeight = height;\n      var tmpCanvasId = \"prescale1\";\n      var tmpCanvas, tmpCtx;\n\n      while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {\n        var newWidth = paintWidth,\n            newHeight = paintHeight;\n\n        if (widthScale > 2 && paintWidth > 1) {\n          newWidth = Math.ceil(paintWidth / 2);\n          widthScale /= paintWidth / newWidth;\n        }\n\n        if (heightScale > 2 && paintHeight > 1) {\n          newHeight = Math.ceil(paintHeight / 2);\n          heightScale /= paintHeight / newHeight;\n        }\n\n        tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);\n        tmpCtx = tmpCanvas.context;\n        tmpCtx.clearRect(0, 0, newWidth, newHeight);\n        tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\n        img = tmpCanvas.canvas;\n        paintWidth = newWidth;\n        paintHeight = newHeight;\n        tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n      }\n\n      return {\n        img: img,\n        paintWidth: paintWidth,\n        paintHeight: paintHeight\n      };\n    }\n  }, {\n    key: \"_createMaskCanvas\",\n    value: function _createMaskCanvas(img) {\n      var ctx = this.ctx;\n      var width = img.width,\n          height = img.height;\n      var fillColor = this.current.fillColor;\n      var isPatternFill = this.current.patternFill;\n      var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n      var maskCtx = maskCanvas.context;\n      putBinaryImageMask(maskCtx, img);\n      var objToCanvas = ctx.mozCurrentTransform;\n\n      var maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]);\n\n      maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n\n      var cord1 = _util.Util.applyTransform([0, 0], maskToCanvas);\n\n      var cord2 = _util.Util.applyTransform([width, height], maskToCanvas);\n\n      var rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]);\n\n      var drawnWidth = Math.ceil(rect[2] - rect[0]);\n      var drawnHeight = Math.ceil(rect[3] - rect[1]);\n      var fillCanvas = this.cachedCanvases.getCanvas(\"fillCanvas\", drawnWidth, drawnHeight, true);\n      var fillCtx = fillCanvas.context;\n      var offsetX = Math.min(cord1[0], cord2[0]);\n      var offsetY = Math.min(cord1[1], cord2[1]);\n      fillCtx.translate(-offsetX, -offsetY);\n      fillCtx.transform.apply(fillCtx, maskToCanvas);\n\n      var scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse);\n\n      fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate);\n      fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height);\n      fillCtx.globalCompositeOperation = \"source-in\";\n\n      var inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]);\n\n      fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor;\n      fillCtx.fillRect(0, 0, width, height);\n      return {\n        canvas: fillCanvas.canvas,\n        offsetX: Math.round(offsetX),\n        offsetY: Math.round(offsetY)\n      };\n    }\n  }, {\n    key: \"setLineWidth\",\n    value: function setLineWidth(width) {\n      this.current.lineWidth = width;\n      this.ctx.lineWidth = width;\n    }\n  }, {\n    key: \"setLineCap\",\n    value: function setLineCap(style) {\n      this.ctx.lineCap = LINE_CAP_STYLES[style];\n    }\n  }, {\n    key: \"setLineJoin\",\n    value: function setLineJoin(style) {\n      this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n    }\n  }, {\n    key: \"setMiterLimit\",\n    value: function setMiterLimit(limit) {\n      this.ctx.miterLimit = limit;\n    }\n  }, {\n    key: \"setDash\",\n    value: function setDash(dashArray, dashPhase) {\n      var ctx = this.ctx;\n\n      if (ctx.setLineDash !== undefined) {\n        ctx.setLineDash(dashArray);\n        ctx.lineDashOffset = dashPhase;\n      }\n    }\n  }, {\n    key: \"setRenderingIntent\",\n    value: function setRenderingIntent(intent) {}\n  }, {\n    key: \"setFlatness\",\n    value: function setFlatness(flatness) {}\n  }, {\n    key: \"setGState\",\n    value: function setGState(states) {\n      for (var i = 0, ii = states.length; i < ii; i++) {\n        var state = states[i];\n        var key = state[0];\n        var value = state[1];\n\n        switch (key) {\n          case \"LW\":\n            this.setLineWidth(value);\n            break;\n\n          case \"LC\":\n            this.setLineCap(value);\n            break;\n\n          case \"LJ\":\n            this.setLineJoin(value);\n            break;\n\n          case \"ML\":\n            this.setMiterLimit(value);\n            break;\n\n          case \"D\":\n            this.setDash(value[0], value[1]);\n            break;\n\n          case \"RI\":\n            this.setRenderingIntent(value);\n            break;\n\n          case \"FL\":\n            this.setFlatness(value);\n            break;\n\n          case \"Font\":\n            this.setFont(value[0], value[1]);\n            break;\n\n          case \"CA\":\n            this.current.strokeAlpha = state[1];\n            break;\n\n          case \"ca\":\n            this.current.fillAlpha = state[1];\n            this.ctx.globalAlpha = state[1];\n            break;\n\n          case \"BM\":\n            this.ctx.globalCompositeOperation = value;\n            break;\n\n          case \"SMask\":\n            this.current.activeSMask = value ? this.tempSMask : null;\n            this.tempSMask = null;\n            this.checkSMaskState();\n            break;\n\n          case \"TR\":\n            this.current.transferMaps = value;\n        }\n      }\n    }\n  }, {\n    key: \"checkSMaskState\",\n    value: function checkSMaskState() {\n      var inSMaskMode = !!this.suspendedCtx;\n\n      if (this.current.activeSMask && !inSMaskMode) {\n        this.beginSMaskMode();\n      } else if (!this.current.activeSMask && inSMaskMode) {\n        this.endSMaskMode();\n      }\n    }\n  }, {\n    key: \"beginSMaskMode\",\n    value: function beginSMaskMode() {\n      if (this.suspendedCtx) {\n        throw new Error(\"beginSMaskMode called while already in smask mode\");\n      }\n\n      var drawnWidth = this.ctx.canvas.width;\n      var drawnHeight = this.ctx.canvas.height;\n      var cacheId = \"smaskGroupAt\" + this.groupLevel;\n      var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\n      this.suspendedCtx = this.ctx;\n      this.ctx = scratchCanvas.context;\n      var ctx = this.ctx;\n      ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform);\n      copyCtxState(this.suspendedCtx, ctx);\n      mirrorContextOperations(ctx, this.suspendedCtx);\n      this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n    }\n  }, {\n    key: \"endSMaskMode\",\n    value: function endSMaskMode() {\n      if (!this.suspendedCtx) {\n        throw new Error(\"endSMaskMode called while not in smask mode\");\n      }\n\n      this.ctx._removeMirroring();\n\n      copyCtxState(this.ctx, this.suspendedCtx);\n      this.ctx = this.suspendedCtx;\n      this.current.activeSMask = null;\n      this.suspendedCtx = null;\n    }\n  }, {\n    key: \"compose\",\n    value: function compose(dirtyBox) {\n      if (!this.current.activeSMask) {\n        return;\n      }\n\n      if (!dirtyBox) {\n        dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n      } else {\n        dirtyBox[0] = Math.floor(dirtyBox[0]);\n        dirtyBox[1] = Math.floor(dirtyBox[1]);\n        dirtyBox[2] = Math.ceil(dirtyBox[2]);\n        dirtyBox[3] = Math.ceil(dirtyBox[3]);\n      }\n\n      var smask = this.current.activeSMask;\n      var suspendedCtx = this.suspendedCtx;\n      composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n      this.ctx.save();\n      this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n      this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n      this.ctx.restore();\n    }\n  }, {\n    key: \"save\",\n    value: function save() {\n      this.ctx.save();\n      var old = this.current;\n      this.stateStack.push(old);\n      this.current = old.clone();\n    }\n  }, {\n    key: \"restore\",\n    value: function restore() {\n      if (this.stateStack.length === 0 && this.current.activeSMask) {\n        this.endSMaskMode();\n      }\n\n      if (this.stateStack.length !== 0) {\n        this.current = this.stateStack.pop();\n        this.ctx.restore();\n        this.checkSMaskState();\n        this.pendingClip = null;\n        this._cachedGetSinglePixelWidth = null;\n      }\n    }\n  }, {\n    key: \"transform\",\n    value: function transform(a, b, c, d, e, f) {\n      this.ctx.transform(a, b, c, d, e, f);\n      this._cachedGetSinglePixelWidth = null;\n    }\n  }, {\n    key: \"constructPath\",\n    value: function constructPath(ops, args) {\n      var ctx = this.ctx;\n      var current = this.current;\n      var x = current.x,\n          y = current.y;\n      var startX, startY;\n\n      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {\n        switch (ops[i] | 0) {\n          case _util.OPS.rectangle:\n            x = args[j++];\n            y = args[j++];\n            var width = args[j++];\n            var height = args[j++];\n            var xw = x + width;\n            var yh = y + height;\n            ctx.moveTo(x, y);\n\n            if (width === 0 || height === 0) {\n              ctx.lineTo(xw, yh);\n            } else {\n              ctx.lineTo(xw, y);\n              ctx.lineTo(xw, yh);\n              ctx.lineTo(x, yh);\n            }\n\n            current.updatePathMinMax(ctx.mozCurrentTransform, x, y);\n            current.updatePathMinMax(ctx.mozCurrentTransform, xw, yh);\n            ctx.closePath();\n            break;\n\n          case _util.OPS.moveTo:\n            x = args[j++];\n            y = args[j++];\n            ctx.moveTo(x, y);\n            current.updatePathMinMax(ctx.mozCurrentTransform, x, y);\n            break;\n\n          case _util.OPS.lineTo:\n            x = args[j++];\n            y = args[j++];\n            ctx.lineTo(x, y);\n            current.updatePathMinMax(ctx.mozCurrentTransform, x, y);\n            break;\n\n          case _util.OPS.curveTo:\n            startX = x;\n            startY = y;\n            x = args[j + 4];\n            y = args[j + 5];\n            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);\n            current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y);\n            j += 6;\n            break;\n\n          case _util.OPS.curveTo2:\n            startX = x;\n            startY = y;\n            ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);\n            current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);\n            x = args[j + 2];\n            y = args[j + 3];\n            j += 4;\n            break;\n\n          case _util.OPS.curveTo3:\n            startX = x;\n            startY = y;\n            x = args[j + 2];\n            y = args[j + 3];\n            ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);\n            current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], x, y, x, y);\n            j += 4;\n            break;\n\n          case _util.OPS.closePath:\n            ctx.closePath();\n            break;\n        }\n      }\n\n      current.setCurrentPoint(x, y);\n    }\n  }, {\n    key: \"closePath\",\n    value: function closePath() {\n      this.ctx.closePath();\n    }\n  }, {\n    key: \"stroke\",\n    value: function stroke(consumePath) {\n      consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\n      var ctx = this.ctx;\n      var strokeColor = this.current.strokeColor;\n      ctx.globalAlpha = this.current.strokeAlpha;\n\n      if (this.contentVisible) {\n        if (_typeof(strokeColor) === \"object\" && strokeColor !== null && strokeColor !== void 0 && strokeColor.getPattern) {\n          var lineWidth = this.getSinglePixelWidth();\n          ctx.save();\n          ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE);\n          ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth);\n          ctx.stroke();\n          ctx.restore();\n        } else {\n          var _lineWidth = this.getSinglePixelWidth();\n\n          if (_lineWidth < 0 && -_lineWidth >= this.current.lineWidth) {\n            ctx.save();\n            ctx.resetTransform();\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\n            ctx.stroke();\n            ctx.restore();\n          } else {\n            ctx.lineWidth = Math.max(_lineWidth, this.current.lineWidth);\n            ctx.stroke();\n          }\n        }\n      }\n\n      if (consumePath) {\n        this.consumePath(this.current.getClippedPathBoundingBox());\n      }\n\n      ctx.globalAlpha = this.current.fillAlpha;\n    }\n  }, {\n    key: \"closeStroke\",\n    value: function closeStroke() {\n      this.closePath();\n      this.stroke();\n    }\n  }, {\n    key: \"fill\",\n    value: function fill(consumePath) {\n      consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\n      var ctx = this.ctx;\n      var fillColor = this.current.fillColor;\n      var isPatternFill = this.current.patternFill;\n      var needRestore = false;\n\n      if (isPatternFill) {\n        ctx.save();\n        ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);\n        needRestore = true;\n      }\n\n      var intersect = this.current.getClippedPathBoundingBox();\n\n      if (this.contentVisible && intersect !== null) {\n        if (this.pendingEOFill) {\n          ctx.fill(\"evenodd\");\n          this.pendingEOFill = false;\n        } else {\n          ctx.fill();\n        }\n      }\n\n      if (needRestore) {\n        ctx.restore();\n      }\n\n      if (consumePath) {\n        this.consumePath(intersect);\n      }\n    }\n  }, {\n    key: \"eoFill\",\n    value: function eoFill() {\n      this.pendingEOFill = true;\n      this.fill();\n    }\n  }, {\n    key: \"fillStroke\",\n    value: function fillStroke() {\n      this.fill(false);\n      this.stroke(false);\n      this.consumePath();\n    }\n  }, {\n    key: \"eoFillStroke\",\n    value: function eoFillStroke() {\n      this.pendingEOFill = true;\n      this.fillStroke();\n    }\n  }, {\n    key: \"closeFillStroke\",\n    value: function closeFillStroke() {\n      this.closePath();\n      this.fillStroke();\n    }\n  }, {\n    key: \"closeEOFillStroke\",\n    value: function closeEOFillStroke() {\n      this.pendingEOFill = true;\n      this.closePath();\n      this.fillStroke();\n    }\n  }, {\n    key: \"endPath\",\n    value: function endPath() {\n      this.consumePath();\n    }\n  }, {\n    key: \"clip\",\n    value: function clip() {\n      this.pendingClip = NORMAL_CLIP;\n    }\n  }, {\n    key: \"eoClip\",\n    value: function eoClip() {\n      this.pendingClip = EO_CLIP;\n    }\n  }, {\n    key: \"beginText\",\n    value: function beginText() {\n      this.current.textMatrix = _util.IDENTITY_MATRIX;\n      this.current.textMatrixScale = 1;\n      this.current.x = this.current.lineX = 0;\n      this.current.y = this.current.lineY = 0;\n    }\n  }, {\n    key: \"endText\",\n    value: function endText() {\n      var paths = this.pendingTextPaths;\n      var ctx = this.ctx;\n\n      if (paths === undefined) {\n        ctx.beginPath();\n        return;\n      }\n\n      ctx.save();\n      ctx.beginPath();\n\n      for (var i = 0; i < paths.length; i++) {\n        var path = paths[i];\n        ctx.setTransform.apply(ctx, path.transform);\n        ctx.translate(path.x, path.y);\n        path.addToPath(ctx, path.fontSize);\n      }\n\n      ctx.restore();\n      ctx.clip();\n      ctx.beginPath();\n      delete this.pendingTextPaths;\n    }\n  }, {\n    key: \"setCharSpacing\",\n    value: function setCharSpacing(spacing) {\n      this.current.charSpacing = spacing;\n    }\n  }, {\n    key: \"setWordSpacing\",\n    value: function setWordSpacing(spacing) {\n      this.current.wordSpacing = spacing;\n    }\n  }, {\n    key: \"setHScale\",\n    value: function setHScale(scale) {\n      this.current.textHScale = scale / 100;\n    }\n  }, {\n    key: \"setLeading\",\n    value: function setLeading(leading) {\n      this.current.leading = -leading;\n    }\n  }, {\n    key: \"setFont\",\n    value: function setFont(fontRefName, size) {\n      var fontObj = this.commonObjs.get(fontRefName);\n      var current = this.current;\n\n      if (!fontObj) {\n        throw new Error(\"Can't find font for \".concat(fontRefName));\n      }\n\n      current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n\n      if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n        (0, _util.warn)(\"Invalid font matrix for font \" + fontRefName);\n      }\n\n      if (size < 0) {\n        size = -size;\n        current.fontDirection = -1;\n      } else {\n        current.fontDirection = 1;\n      }\n\n      this.current.font = fontObj;\n      this.current.fontSize = size;\n\n      if (fontObj.isType3Font) {\n        return;\n      }\n\n      var name = fontObj.loadedName || \"sans-serif\";\n      var bold = \"normal\";\n\n      if (fontObj.black) {\n        bold = \"900\";\n      } else if (fontObj.bold) {\n        bold = \"bold\";\n      }\n\n      var italic = fontObj.italic ? \"italic\" : \"normal\";\n      var typeface = \"\\\"\".concat(name, \"\\\", \").concat(fontObj.fallbackName);\n      var browserFontSize = size;\n\n      if (size < MIN_FONT_SIZE) {\n        browserFontSize = MIN_FONT_SIZE;\n      } else if (size > MAX_FONT_SIZE) {\n        browserFontSize = MAX_FONT_SIZE;\n      }\n\n      this.current.fontSizeScale = size / browserFontSize;\n      this.ctx.font = \"\".concat(italic, \" \").concat(bold, \" \").concat(browserFontSize, \"px \").concat(typeface);\n    }\n  }, {\n    key: \"setTextRenderingMode\",\n    value: function setTextRenderingMode(mode) {\n      this.current.textRenderingMode = mode;\n    }\n  }, {\n    key: \"setTextRise\",\n    value: function setTextRise(rise) {\n      this.current.textRise = rise;\n    }\n  }, {\n    key: \"moveText\",\n    value: function moveText(x, y) {\n      this.current.x = this.current.lineX += x;\n      this.current.y = this.current.lineY += y;\n    }\n  }, {\n    key: \"setLeadingMoveText\",\n    value: function setLeadingMoveText(x, y) {\n      this.setLeading(-y);\n      this.moveText(x, y);\n    }\n  }, {\n    key: \"setTextMatrix\",\n    value: function setTextMatrix(a, b, c, d, e, f) {\n      this.current.textMatrix = [a, b, c, d, e, f];\n      this.current.textMatrixScale = Math.hypot(a, b);\n      this.current.x = this.current.lineX = 0;\n      this.current.y = this.current.lineY = 0;\n    }\n  }, {\n    key: \"nextLine\",\n    value: function nextLine() {\n      this.moveText(0, this.current.leading);\n    }\n  }, {\n    key: \"paintChar\",\n    value: function paintChar(character, x, y, patternTransform, resetLineWidthToOne) {\n      var ctx = this.ctx;\n      var current = this.current;\n      var font = current.font;\n      var textRenderingMode = current.textRenderingMode;\n      var fontSize = current.fontSize / current.fontSizeScale;\n      var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n      var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\n      var patternFill = current.patternFill && !font.missingFile;\n      var addToPath;\n\n      if (font.disableFontFace || isAddToPathSet || patternFill) {\n        addToPath = font.getPathGenerator(this.commonObjs, character);\n      }\n\n      if (font.disableFontFace || patternFill) {\n        ctx.save();\n        ctx.translate(x, y);\n        ctx.beginPath();\n        addToPath(ctx, fontSize);\n\n        if (patternTransform) {\n          ctx.setTransform.apply(ctx, patternTransform);\n        }\n\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          ctx.fill();\n        }\n\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          if (resetLineWidthToOne) {\n            ctx.resetTransform();\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\n          }\n\n          ctx.stroke();\n        }\n\n        ctx.restore();\n      } else {\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          ctx.fillText(character, x, y);\n        }\n\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          if (resetLineWidthToOne) {\n            ctx.save();\n            ctx.moveTo(x, y);\n            ctx.resetTransform();\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\n            ctx.strokeText(character, 0, 0);\n            ctx.restore();\n          } else {\n            ctx.strokeText(character, x, y);\n          }\n        }\n      }\n\n      if (isAddToPathSet) {\n        var paths = this.pendingTextPaths || (this.pendingTextPaths = []);\n        paths.push({\n          transform: ctx.mozCurrentTransform,\n          x: x,\n          y: y,\n          fontSize: fontSize,\n          addToPath: addToPath\n        });\n      }\n    }\n  }, {\n    key: \"isFontSubpixelAAEnabled\",\n    get: function get() {\n      var _this$cachedCanvases$ = this.cachedCanvases.getCanvas(\"isFontSubpixelAAEnabled\", 10, 10),\n          ctx = _this$cachedCanvases$.context;\n\n      ctx.scale(1.5, 1);\n      ctx.fillText(\"I\", 0, 10);\n      var data = ctx.getImageData(0, 0, 10, 10).data;\n      var enabled = false;\n\n      for (var i = 3; i < data.length; i += 4) {\n        if (data[i] > 0 && data[i] < 255) {\n          enabled = true;\n          break;\n        }\n      }\n\n      return (0, _util.shadow)(this, \"isFontSubpixelAAEnabled\", enabled);\n    }\n  }, {\n    key: \"showText\",\n    value: function showText(glyphs) {\n      var current = this.current;\n      var font = current.font;\n\n      if (font.isType3Font) {\n        return this.showType3Text(glyphs);\n      }\n\n      var fontSize = current.fontSize;\n\n      if (fontSize === 0) {\n        return undefined;\n      }\n\n      var ctx = this.ctx;\n      var fontSizeScale = current.fontSizeScale;\n      var charSpacing = current.charSpacing;\n      var wordSpacing = current.wordSpacing;\n      var fontDirection = current.fontDirection;\n      var textHScale = current.textHScale * fontDirection;\n      var glyphsLength = glyphs.length;\n      var vertical = font.vertical;\n      var spacingDir = vertical ? 1 : -1;\n      var defaultVMetrics = font.defaultVMetrics;\n      var widthAdvanceScale = fontSize * current.fontMatrix[0];\n      var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\n      ctx.save();\n      ctx.transform.apply(ctx, current.textMatrix);\n      ctx.translate(current.x, current.y + current.textRise);\n\n      if (fontDirection > 0) {\n        ctx.scale(textHScale, -1);\n      } else {\n        ctx.scale(textHScale, 1);\n      }\n\n      var patternTransform;\n\n      if (current.patternFill) {\n        ctx.save();\n        var pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);\n        patternTransform = ctx.mozCurrentTransform;\n        ctx.restore();\n        ctx.fillStyle = pattern;\n      }\n\n      var lineWidth = current.lineWidth;\n      var resetLineWidthToOne = false;\n      var scale = current.textMatrixScale;\n\n      if (scale === 0 || lineWidth === 0) {\n        var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          this._cachedGetSinglePixelWidth = null;\n          lineWidth = this.getSinglePixelWidth();\n          resetLineWidthToOne = lineWidth < 0;\n        }\n      } else {\n        lineWidth /= scale;\n      }\n\n      if (fontSizeScale !== 1.0) {\n        ctx.scale(fontSizeScale, fontSizeScale);\n        lineWidth /= fontSizeScale;\n      }\n\n      ctx.lineWidth = lineWidth;\n      var x = 0,\n          i;\n\n      for (i = 0; i < glyphsLength; ++i) {\n        var glyph = glyphs[i];\n\n        if ((0, _util.isNum)(glyph)) {\n          x += spacingDir * glyph * fontSize / 1000;\n          continue;\n        }\n\n        var restoreNeeded = false;\n        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n        var character = glyph.fontChar;\n        var accent = glyph.accent;\n        var scaledX = void 0,\n            scaledY = void 0;\n        var width = glyph.width;\n\n        if (vertical) {\n          var vmetric = glyph.vmetric || defaultVMetrics;\n          var vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n          var vy = vmetric[2] * widthAdvanceScale;\n          width = vmetric ? -vmetric[0] : width;\n          scaledX = vx / fontSizeScale;\n          scaledY = (x + vy) / fontSizeScale;\n        } else {\n          scaledX = x / fontSizeScale;\n          scaledY = 0;\n        }\n\n        if (font.remeasure && width > 0) {\n          var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;\n\n          if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n            var characterScaleX = width / measuredWidth;\n            restoreNeeded = true;\n            ctx.save();\n            ctx.scale(characterScaleX, 1);\n            scaledX /= characterScaleX;\n          } else if (width !== measuredWidth) {\n            scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\n          }\n        }\n\n        if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n          if (simpleFillText && !accent) {\n            ctx.fillText(character, scaledX, scaledY);\n          } else {\n            this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne);\n\n            if (accent) {\n              var scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;\n              var scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;\n              this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne);\n            }\n          }\n        }\n\n        var charWidth = void 0;\n\n        if (vertical) {\n          charWidth = width * widthAdvanceScale - spacing * fontDirection;\n        } else {\n          charWidth = width * widthAdvanceScale + spacing * fontDirection;\n        }\n\n        x += charWidth;\n\n        if (restoreNeeded) {\n          ctx.restore();\n        }\n      }\n\n      if (vertical) {\n        current.y -= x;\n      } else {\n        current.x += x * textHScale;\n      }\n\n      ctx.restore();\n      this.compose();\n      return undefined;\n    }\n  }, {\n    key: \"showType3Text\",\n    value: function showType3Text(glyphs) {\n      var ctx = this.ctx;\n      var current = this.current;\n      var font = current.font;\n      var fontSize = current.fontSize;\n      var fontDirection = current.fontDirection;\n      var spacingDir = font.vertical ? 1 : -1;\n      var charSpacing = current.charSpacing;\n      var wordSpacing = current.wordSpacing;\n      var textHScale = current.textHScale * fontDirection;\n      var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n      var glyphsLength = glyphs.length;\n      var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;\n      var i, glyph, width, spacingLength;\n\n      if (isTextInvisible || fontSize === 0) {\n        return;\n      }\n\n      this._cachedGetSinglePixelWidth = null;\n      ctx.save();\n      ctx.transform.apply(ctx, current.textMatrix);\n      ctx.translate(current.x, current.y);\n      ctx.scale(textHScale, fontDirection);\n\n      for (i = 0; i < glyphsLength; ++i) {\n        glyph = glyphs[i];\n\n        if ((0, _util.isNum)(glyph)) {\n          spacingLength = spacingDir * glyph * fontSize / 1000;\n          this.ctx.translate(spacingLength, 0);\n          current.x += spacingLength * textHScale;\n          continue;\n        }\n\n        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n        var operatorList = font.charProcOperatorList[glyph.operatorListId];\n\n        if (!operatorList) {\n          (0, _util.warn)(\"Type3 character \\\"\".concat(glyph.operatorListId, \"\\\" is not available.\"));\n          continue;\n        }\n\n        if (this.contentVisible) {\n          this.processingType3 = glyph;\n          this.save();\n          ctx.scale(fontSize, fontSize);\n          ctx.transform.apply(ctx, fontMatrix);\n          this.executeOperatorList(operatorList);\n          this.restore();\n        }\n\n        var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);\n\n        width = transformed[0] * fontSize + spacing;\n        ctx.translate(width, 0);\n        current.x += width * textHScale;\n      }\n\n      ctx.restore();\n      this.processingType3 = null;\n    }\n  }, {\n    key: \"setCharWidth\",\n    value: function setCharWidth(xWidth, yWidth) {}\n  }, {\n    key: \"setCharWidthAndBounds\",\n    value: function setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\n      this.ctx.rect(llx, lly, urx - llx, ury - lly);\n      this.clip();\n      this.endPath();\n    }\n  }, {\n    key: \"getColorN_Pattern\",\n    value: function getColorN_Pattern(IR) {\n      var _this = this;\n\n      var pattern;\n\n      if (IR[0] === \"TilingPattern\") {\n        var color = IR[1];\n        var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();\n        var canvasGraphicsFactory = {\n          createCanvasGraphics: function createCanvasGraphics(ctx) {\n            return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory);\n          }\n        };\n        pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);\n      } else {\n        pattern = this._getPattern(IR[1], IR[2]);\n      }\n\n      return pattern;\n    }\n  }, {\n    key: \"setStrokeColorN\",\n    value: function setStrokeColorN() {\n      this.current.strokeColor = this.getColorN_Pattern(arguments);\n    }\n  }, {\n    key: \"setFillColorN\",\n    value: function setFillColorN() {\n      this.current.fillColor = this.getColorN_Pattern(arguments);\n      this.current.patternFill = true;\n    }\n  }, {\n    key: \"setStrokeRGBColor\",\n    value: function setStrokeRGBColor(r, g, b) {\n      var color = _util.Util.makeHexColor(r, g, b);\n\n      this.ctx.strokeStyle = color;\n      this.current.strokeColor = color;\n    }\n  }, {\n    key: \"setFillRGBColor\",\n    value: function setFillRGBColor(r, g, b) {\n      var color = _util.Util.makeHexColor(r, g, b);\n\n      this.ctx.fillStyle = color;\n      this.current.fillColor = color;\n      this.current.patternFill = false;\n    }\n  }, {\n    key: \"_getPattern\",\n    value: function _getPattern(objId) {\n      var matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var pattern;\n\n      if (this.cachedPatterns.has(objId)) {\n        pattern = this.cachedPatterns.get(objId);\n      } else {\n        pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId));\n        this.cachedPatterns.set(objId, pattern);\n      }\n\n      if (matrix) {\n        pattern.matrix = matrix;\n      }\n\n      return pattern;\n    }\n  }, {\n    key: \"shadingFill\",\n    value: function shadingFill(objId) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var ctx = this.ctx;\n      this.save();\n\n      var pattern = this._getPattern(objId);\n\n      ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING);\n      var inv = ctx.mozCurrentTransformInverse;\n\n      if (inv) {\n        var canvas = ctx.canvas;\n        var width = canvas.width;\n        var height = canvas.height;\n\n        var bl = _util.Util.applyTransform([0, 0], inv);\n\n        var br = _util.Util.applyTransform([0, height], inv);\n\n        var ul = _util.Util.applyTransform([width, 0], inv);\n\n        var ur = _util.Util.applyTransform([width, height], inv);\n\n        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\n        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\n        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\n        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\n        this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n      } else {\n        this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n      }\n\n      this.compose(this.current.getClippedPathBoundingBox());\n      this.restore();\n    }\n  }, {\n    key: \"beginInlineImage\",\n    value: function beginInlineImage() {\n      (0, _util.unreachable)(\"Should not call beginInlineImage\");\n    }\n  }, {\n    key: \"beginImageData\",\n    value: function beginImageData() {\n      (0, _util.unreachable)(\"Should not call beginImageData\");\n    }\n  }, {\n    key: \"paintFormXObjectBegin\",\n    value: function paintFormXObjectBegin(matrix, bbox) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.save();\n      this.baseTransformStack.push(this.baseTransform);\n\n      if (Array.isArray(matrix) && matrix.length === 6) {\n        this.transform.apply(this, matrix);\n      }\n\n      this.baseTransform = this.ctx.mozCurrentTransform;\n\n      if (bbox) {\n        var width = bbox[2] - bbox[0];\n        var height = bbox[3] - bbox[1];\n        this.ctx.rect(bbox[0], bbox[1], width, height);\n        this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[0], bbox[1]);\n        this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[2], bbox[3]);\n        this.clip();\n        this.endPath();\n      }\n    }\n  }, {\n    key: \"paintFormXObjectEnd\",\n    value: function paintFormXObjectEnd() {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.restore();\n      this.baseTransform = this.baseTransformStack.pop();\n    }\n  }, {\n    key: \"beginGroup\",\n    value: function beginGroup(group) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.save();\n      var suspendedCtx = this.suspendedCtx;\n\n      if (this.current.activeSMask) {\n        this.suspendedCtx = null;\n        this.current.activeSMask = null;\n      }\n\n      var currentCtx = this.ctx;\n\n      if (!group.isolated) {\n        (0, _util.info)(\"TODO: Support non-isolated groups.\");\n      }\n\n      if (group.knockout) {\n        (0, _util.warn)(\"Knockout groups not supported.\");\n      }\n\n      var currentTransform = currentCtx.mozCurrentTransform;\n\n      if (group.matrix) {\n        currentCtx.transform.apply(currentCtx, group.matrix);\n      }\n\n      if (!group.bbox) {\n        throw new Error(\"Bounding box is required.\");\n      }\n\n      var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);\n\n      var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\n      bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n      var offsetX = Math.floor(bounds[0]);\n      var offsetY = Math.floor(bounds[1]);\n      var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n      var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n      var scaleX = 1,\n          scaleY = 1;\n\n      if (drawnWidth > MAX_GROUP_SIZE) {\n        scaleX = drawnWidth / MAX_GROUP_SIZE;\n        drawnWidth = MAX_GROUP_SIZE;\n      }\n\n      if (drawnHeight > MAX_GROUP_SIZE) {\n        scaleY = drawnHeight / MAX_GROUP_SIZE;\n        drawnHeight = MAX_GROUP_SIZE;\n      }\n\n      this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n      var cacheId = \"groupAt\" + this.groupLevel;\n\n      if (group.smask) {\n        cacheId += \"_smask_\" + this.smaskCounter++ % 2;\n      }\n\n      var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\n      var groupCtx = scratchCanvas.context;\n      groupCtx.scale(1 / scaleX, 1 / scaleY);\n      groupCtx.translate(-offsetX, -offsetY);\n      groupCtx.transform.apply(groupCtx, currentTransform);\n\n      if (group.smask) {\n        this.smaskStack.push({\n          canvas: scratchCanvas.canvas,\n          context: groupCtx,\n          offsetX: offsetX,\n          offsetY: offsetY,\n          scaleX: scaleX,\n          scaleY: scaleY,\n          subtype: group.smask.subtype,\n          backdrop: group.smask.backdrop,\n          transferMap: group.smask.transferMap || null,\n          startTransformInverse: null\n        });\n      } else {\n        currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n        currentCtx.translate(offsetX, offsetY);\n        currentCtx.scale(scaleX, scaleY);\n        currentCtx.save();\n      }\n\n      copyCtxState(currentCtx, groupCtx);\n      this.ctx = groupCtx;\n      this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n      this.groupStack.push({\n        ctx: currentCtx,\n        suspendedCtx: suspendedCtx\n      });\n      this.groupLevel++;\n    }\n  }, {\n    key: \"endGroup\",\n    value: function endGroup(group) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.groupLevel--;\n      var groupCtx = this.ctx;\n\n      var _this$groupStack$pop = this.groupStack.pop(),\n          ctx = _this$groupStack$pop.ctx,\n          suspendedCtx = _this$groupStack$pop.suspendedCtx;\n\n      this.ctx = ctx;\n      this.ctx.imageSmoothingEnabled = false;\n\n      if (suspendedCtx) {\n        this.suspendedCtx = suspendedCtx;\n      }\n\n      if (group.smask) {\n        this.tempSMask = this.smaskStack.pop();\n        this.restore();\n      } else {\n        this.ctx.restore();\n        var currentMtx = this.ctx.mozCurrentTransform;\n        this.restore();\n        this.ctx.save();\n        this.ctx.setTransform.apply(this.ctx, currentMtx);\n\n        var dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);\n\n        this.ctx.drawImage(groupCtx.canvas, 0, 0);\n        this.ctx.restore();\n        this.compose(dirtyBox);\n      }\n    }\n  }, {\n    key: \"beginAnnotations\",\n    value: function beginAnnotations() {\n      this.save();\n\n      if (this.baseTransform) {\n        this.ctx.setTransform.apply(this.ctx, this.baseTransform);\n      }\n    }\n  }, {\n    key: \"endAnnotations\",\n    value: function endAnnotations() {\n      this.restore();\n    }\n  }, {\n    key: \"beginAnnotation\",\n    value: function beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {\n      this.save();\n\n      if (Array.isArray(rect) && rect.length === 4) {\n        var width = rect[2] - rect[0];\n        var height = rect[3] - rect[1];\n\n        if (hasOwnCanvas && this.annotationCanvasMap) {\n          transform = transform.slice();\n          transform[4] -= rect[0];\n          transform[5] -= rect[1];\n          rect = rect.slice();\n          rect[0] = rect[1] = 0;\n          rect[2] = width;\n          rect[3] = height;\n\n          var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform),\n              _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),\n              scaleX = _Util$singularValueDe2[0],\n              scaleY = _Util$singularValueDe2[1];\n\n          var viewportScale = this.viewportScale;\n          var canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);\n          var canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);\n          this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);\n          var _this$annotationCanva = this.annotationCanvas,\n              canvas = _this$annotationCanva.canvas,\n              context = _this$annotationCanva.context;\n          canvas.style.width = \"calc(\".concat(width, \"px * var(--viewport-scale-factor))\");\n          canvas.style.height = \"calc(\".concat(height, \"px * var(--viewport-scale-factor))\");\n          this.annotationCanvasMap.set(id, canvas);\n          this.annotationCanvas.savedCtx = this.ctx;\n          this.ctx = context;\n          this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);\n          addContextCurrentTransform(this.ctx);\n          resetCtxToDefault(this.ctx);\n        } else {\n          resetCtxToDefault(this.ctx);\n          this.ctx.rect(rect[0], rect[1], width, height);\n          this.clip();\n          this.endPath();\n        }\n      }\n\n      this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\n      this.transform.apply(this, transform);\n      this.transform.apply(this, matrix);\n    }\n  }, {\n    key: \"endAnnotation\",\n    value: function endAnnotation() {\n      if (this.annotationCanvas) {\n        this.ctx = this.annotationCanvas.savedCtx;\n        delete this.annotationCanvas.savedCtx;\n        delete this.annotationCanvas;\n      }\n\n      this.restore();\n    }\n  }, {\n    key: \"paintImageMaskXObject\",\n    value: function paintImageMaskXObject(img) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var ctx = this.ctx;\n      var width = img.width,\n          height = img.height;\n      var glyph = this.processingType3;\n\n      if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {\n        if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {\n          glyph.compiled = compileType3Glyph({\n            data: img.data,\n            width: width,\n            height: height\n          });\n        } else {\n          glyph.compiled = null;\n        }\n      }\n\n      if (glyph !== null && glyph !== void 0 && glyph.compiled) {\n        glyph.compiled(ctx);\n        return;\n      }\n\n      var mask = this._createMaskCanvas(img);\n\n      var maskCanvas = mask.canvas;\n      ctx.save();\n      ctx.setTransform(1, 0, 0, 1, 0, 0);\n      ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n      ctx.restore();\n      this.compose();\n    }\n  }, {\n    key: \"paintImageMaskXObjectRepeat\",\n    value: function paintImageMaskXObjectRepeat(imgData, scaleX) {\n      var skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      var skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var scaleY = arguments.length > 4 ? arguments[4] : undefined;\n      var positions = arguments.length > 5 ? arguments[5] : undefined;\n\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var ctx = this.ctx;\n      ctx.save();\n      var currentTransform = ctx.mozCurrentTransform;\n      ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n\n      var mask = this._createMaskCanvas(imgData);\n\n      ctx.setTransform(1, 0, 0, 1, 0, 0);\n\n      for (var i = 0, ii = positions.length; i < ii; i += 2) {\n        var trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);\n\n        var _Util$applyTransform3 = _util.Util.applyTransform([0, 0], trans),\n            _Util$applyTransform4 = _slicedToArray(_Util$applyTransform3, 2),\n            x = _Util$applyTransform4[0],\n            y = _Util$applyTransform4[1];\n\n        ctx.drawImage(mask.canvas, x, y);\n      }\n\n      ctx.restore();\n      this.compose();\n    }\n  }, {\n    key: \"paintImageMaskXObjectGroup\",\n    value: function paintImageMaskXObjectGroup(images) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var ctx = this.ctx;\n      var fillColor = this.current.fillColor;\n      var isPatternFill = this.current.patternFill;\n\n      for (var i = 0, ii = images.length; i < ii; i++) {\n        var image = images[i];\n        var width = image.width,\n            height = image.height;\n        var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n        var maskCtx = maskCanvas.context;\n        maskCtx.save();\n        putBinaryImageMask(maskCtx, image);\n        maskCtx.globalCompositeOperation = \"source-in\";\n        maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor;\n        maskCtx.fillRect(0, 0, width, height);\n        maskCtx.restore();\n        ctx.save();\n        ctx.transform.apply(ctx, image.transform);\n        ctx.scale(1, -1);\n        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\n        ctx.restore();\n      }\n\n      this.compose();\n    }\n  }, {\n    key: \"paintImageXObject\",\n    value: function paintImageXObject(objId) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\n\n      if (!imgData) {\n        (0, _util.warn)(\"Dependent image isn't ready yet\");\n        return;\n      }\n\n      this.paintInlineImageXObject(imgData);\n    }\n  }, {\n    key: \"paintImageXObjectRepeat\",\n    value: function paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\n\n      if (!imgData) {\n        (0, _util.warn)(\"Dependent image isn't ready yet\");\n        return;\n      }\n\n      var width = imgData.width;\n      var height = imgData.height;\n      var map = [];\n\n      for (var i = 0, ii = positions.length; i < ii; i += 2) {\n        map.push({\n          transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n          x: 0,\n          y: 0,\n          w: width,\n          h: height\n        });\n      }\n\n      this.paintInlineImageXObjectGroup(imgData, map);\n    }\n  }, {\n    key: \"paintInlineImageXObject\",\n    value: function paintInlineImageXObject(imgData) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var width = imgData.width;\n      var height = imgData.height;\n      var ctx = this.ctx;\n      this.save();\n      ctx.scale(1 / width, -1 / height);\n      var imgToPaint;\n\n      if (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement || !imgData.data) {\n        imgToPaint = imgData;\n      } else {\n        var tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\n        var tmpCtx = tmpCanvas.context;\n        putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\n        imgToPaint = tmpCanvas.canvas;\n      }\n\n      var scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse);\n\n      ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate);\n      ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);\n\n      if (this.imageLayer) {\n        var position = this.getCanvasPosition(0, -height);\n        this.imageLayer.appendImage({\n          imgData: imgData,\n          left: position[0],\n          top: position[1],\n          width: width / ctx.mozCurrentTransformInverse[0],\n          height: height / ctx.mozCurrentTransformInverse[3]\n        });\n      }\n\n      this.compose();\n      this.restore();\n    }\n  }, {\n    key: \"paintInlineImageXObjectGroup\",\n    value: function paintInlineImageXObjectGroup(imgData, map) {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      var ctx = this.ctx;\n      var w = imgData.width;\n      var h = imgData.height;\n      var tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n      var tmpCtx = tmpCanvas.context;\n      putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\n\n      for (var i = 0, ii = map.length; i < ii; i++) {\n        var entry = map[i];\n        ctx.save();\n        ctx.transform.apply(ctx, entry.transform);\n        ctx.scale(1, -1);\n        ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\n\n        if (this.imageLayer) {\n          var position = this.getCanvasPosition(entry.x, entry.y);\n          this.imageLayer.appendImage({\n            imgData: imgData,\n            left: position[0],\n            top: position[1],\n            width: w,\n            height: h\n          });\n        }\n\n        ctx.restore();\n      }\n\n      this.compose();\n    }\n  }, {\n    key: \"paintSolidColorImageMask\",\n    value: function paintSolidColorImageMask() {\n      if (!this.contentVisible) {\n        return;\n      }\n\n      this.ctx.fillRect(0, 0, 1, 1);\n      this.compose();\n    }\n  }, {\n    key: \"markPoint\",\n    value: function markPoint(tag) {}\n  }, {\n    key: \"markPointProps\",\n    value: function markPointProps(tag, properties) {}\n  }, {\n    key: \"beginMarkedContent\",\n    value: function beginMarkedContent(tag) {\n      this.markedContentStack.push({\n        visible: true\n      });\n    }\n  }, {\n    key: \"beginMarkedContentProps\",\n    value: function beginMarkedContentProps(tag, properties) {\n      if (tag === \"OC\") {\n        this.markedContentStack.push({\n          visible: this.optionalContentConfig.isVisible(properties)\n        });\n      } else {\n        this.markedContentStack.push({\n          visible: true\n        });\n      }\n\n      this.contentVisible = this.isContentVisible();\n    }\n  }, {\n    key: \"endMarkedContent\",\n    value: function endMarkedContent() {\n      this.markedContentStack.pop();\n      this.contentVisible = this.isContentVisible();\n    }\n  }, {\n    key: \"beginCompat\",\n    value: function beginCompat() {}\n  }, {\n    key: \"endCompat\",\n    value: function endCompat() {}\n  }, {\n    key: \"consumePath\",\n    value: function consumePath(clipBox) {\n      if (this.pendingClip) {\n        this.current.updateClipFromPath();\n      }\n\n      if (!this.pendingClip) {\n        this.compose(clipBox);\n      }\n\n      var ctx = this.ctx;\n\n      if (this.pendingClip) {\n        if (this.pendingClip === EO_CLIP) {\n          ctx.clip(\"evenodd\");\n        } else {\n          ctx.clip();\n        }\n\n        this.pendingClip = null;\n      }\n\n      this.current.startNewPathAndClipBox(this.current.clipBox);\n      ctx.beginPath();\n    }\n  }, {\n    key: \"getSinglePixelWidth\",\n    value: function getSinglePixelWidth() {\n      if (this._cachedGetSinglePixelWidth === null) {\n        var m = this.ctx.mozCurrentTransform;\n        var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n        var sqNorm1 = Math.pow(m[0], 2) + Math.pow(m[2], 2);\n        var sqNorm2 = Math.pow(m[1], 2) + Math.pow(m[3], 2);\n        var pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet;\n\n        if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) {\n          this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight);\n        } else if (absDet > Number.EPSILON) {\n          this._cachedGetSinglePixelWidth = pixelHeight;\n        } else {\n          this._cachedGetSinglePixelWidth = 1;\n        }\n      }\n\n      return this._cachedGetSinglePixelWidth;\n    }\n  }, {\n    key: \"getCanvasPosition\",\n    value: function getCanvasPosition(x, y) {\n      var transform = this.ctx.mozCurrentTransform;\n      return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];\n    }\n  }, {\n    key: \"isContentVisible\",\n    value: function isContentVisible() {\n      for (var i = this.markedContentStack.length - 1; i >= 0; i--) {\n        if (!this.markedContentStack[i].visible) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n  }]);\n\n  return CanvasGraphics;\n}();\n\nexports.CanvasGraphics = CanvasGraphics;\n\nfor (var op in _util.OPS) {\n  if (CanvasGraphics.prototype[op] !== undefined) {\n    CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];\n  }\n}\n\n/***/ }),\n/* 141 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.TilingPattern = exports.PathType = void 0;\nexports.getShadingPattern = getShadingPattern;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar PathType = {\n  FILL: \"Fill\",\n  STROKE: \"Stroke\",\n  SHADING: \"Shading\"\n};\nexports.PathType = PathType;\n\nfunction applyBoundingBox(ctx, bbox) {\n  if (!bbox || typeof Path2D === \"undefined\") {\n    return;\n  }\n\n  var width = bbox[2] - bbox[0];\n  var height = bbox[3] - bbox[1];\n  var region = new Path2D();\n  region.rect(bbox[0], bbox[1], width, height);\n  ctx.clip(region);\n}\n\nvar BaseShadingPattern = /*#__PURE__*/function () {\n  function BaseShadingPattern() {\n    _classCallCheck(this, BaseShadingPattern);\n\n    if (this.constructor === BaseShadingPattern) {\n      (0, _util.unreachable)(\"Cannot initialize BaseShadingPattern.\");\n    }\n  }\n\n  _createClass(BaseShadingPattern, [{\n    key: \"getPattern\",\n    value: function getPattern() {\n      (0, _util.unreachable)(\"Abstract method `getPattern` called.\");\n    }\n  }]);\n\n  return BaseShadingPattern;\n}();\n\nvar RadialAxialShadingPattern = /*#__PURE__*/function (_BaseShadingPattern) {\n  _inherits(RadialAxialShadingPattern, _BaseShadingPattern);\n\n  var _super = _createSuper(RadialAxialShadingPattern);\n\n  function RadialAxialShadingPattern(IR) {\n    var _this;\n\n    _classCallCheck(this, RadialAxialShadingPattern);\n\n    _this = _super.call(this);\n    _this._type = IR[1];\n    _this._bbox = IR[2];\n    _this._colorStops = IR[3];\n    _this._p0 = IR[4];\n    _this._p1 = IR[5];\n    _this._r0 = IR[6];\n    _this._r1 = IR[7];\n    _this.matrix = null;\n    return _this;\n  }\n\n  _createClass(RadialAxialShadingPattern, [{\n    key: \"_createGradient\",\n    value: function _createGradient(ctx) {\n      var grad;\n\n      if (this._type === \"axial\") {\n        grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);\n      } else if (this._type === \"radial\") {\n        grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);\n      }\n\n      var _iterator = _createForOfIteratorHelper(this._colorStops),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var colorStop = _step.value;\n          grad.addColorStop(colorStop[0], colorStop[1]);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n\n      return grad;\n    }\n  }, {\n    key: \"getPattern\",\n    value: function getPattern(ctx, owner, inverse, pathType) {\n      var pattern;\n\n      if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n        var ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0];\n        var width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n        var height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n        var tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", width, height, true);\n        var tmpCtx = tmpCanvas.context;\n        tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n        tmpCtx.beginPath();\n        tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n        tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n        inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);\n        tmpCtx.transform.apply(tmpCtx, owner.baseTransform);\n\n        if (this.matrix) {\n          tmpCtx.transform.apply(tmpCtx, this.matrix);\n        }\n\n        applyBoundingBox(tmpCtx, this._bbox);\n        tmpCtx.fillStyle = this._createGradient(tmpCtx);\n        tmpCtx.fill();\n        pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n        var domMatrix = new DOMMatrix(inverse);\n\n        try {\n          pattern.setTransform(domMatrix);\n        } catch (ex) {\n          (0, _util.warn)(\"RadialAxialShadingPattern.getPattern: \\\"\".concat(ex === null || ex === void 0 ? void 0 : ex.message, \"\\\".\"));\n        }\n      } else {\n        applyBoundingBox(ctx, this._bbox);\n        pattern = this._createGradient(ctx);\n      }\n\n      return pattern;\n    }\n  }]);\n\n  return RadialAxialShadingPattern;\n}(BaseShadingPattern);\n\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n  var coords = context.coords,\n      colors = context.colors;\n  var bytes = data.data,\n      rowSize = data.width * 4;\n  var tmp;\n\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n\n  if (coords[p2 + 1] > coords[p3 + 1]) {\n    tmp = p2;\n    p2 = p3;\n    p3 = tmp;\n    tmp = c2;\n    c2 = c3;\n    c3 = tmp;\n  }\n\n  if (coords[p1 + 1] > coords[p2 + 1]) {\n    tmp = p1;\n    p1 = p2;\n    p2 = tmp;\n    tmp = c1;\n    c1 = c2;\n    c2 = tmp;\n  }\n\n  var x1 = (coords[p1] + context.offsetX) * context.scaleX;\n  var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n  var x2 = (coords[p2] + context.offsetX) * context.scaleX;\n  var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n  var x3 = (coords[p3] + context.offsetX) * context.scaleX;\n  var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n\n  if (y1 >= y3) {\n    return;\n  }\n\n  var c1r = colors[c1],\n      c1g = colors[c1 + 1],\n      c1b = colors[c1 + 2];\n  var c2r = colors[c2],\n      c2g = colors[c2 + 1],\n      c2b = colors[c2 + 2];\n  var c3r = colors[c3],\n      c3g = colors[c3 + 1],\n      c3b = colors[c3 + 2];\n  var minY = Math.round(y1),\n      maxY = Math.round(y3);\n  var xa, car, cag, cab;\n  var xb, cbr, cbg, cbb;\n\n  for (var y = minY; y <= maxY; y++) {\n    if (y < y2) {\n      var _k = void 0;\n\n      if (y < y1) {\n        _k = 0;\n      } else {\n        _k = (y1 - y) / (y1 - y2);\n      }\n\n      xa = x1 - (x1 - x2) * _k;\n      car = c1r - (c1r - c2r) * _k;\n      cag = c1g - (c1g - c2g) * _k;\n      cab = c1b - (c1b - c2b) * _k;\n    } else {\n      var _k2 = void 0;\n\n      if (y > y3) {\n        _k2 = 1;\n      } else if (y2 === y3) {\n        _k2 = 0;\n      } else {\n        _k2 = (y2 - y) / (y2 - y3);\n      }\n\n      xa = x2 - (x2 - x3) * _k2;\n      car = c2r - (c2r - c3r) * _k2;\n      cag = c2g - (c2g - c3g) * _k2;\n      cab = c2b - (c2b - c3b) * _k2;\n    }\n\n    var k = void 0;\n\n    if (y < y1) {\n      k = 0;\n    } else if (y > y3) {\n      k = 1;\n    } else {\n      k = (y1 - y) / (y1 - y3);\n    }\n\n    xb = x1 - (x1 - x3) * k;\n    cbr = c1r - (c1r - c3r) * k;\n    cbg = c1g - (c1g - c3g) * k;\n    cbb = c1b - (c1b - c3b) * k;\n    var x1_ = Math.round(Math.min(xa, xb));\n    var x2_ = Math.round(Math.max(xa, xb));\n    var j = rowSize * y + x1_ * 4;\n\n    for (var x = x1_; x <= x2_; x++) {\n      k = (xa - x) / (xa - xb);\n\n      if (k < 0) {\n        k = 0;\n      } else if (k > 1) {\n        k = 1;\n      }\n\n      bytes[j++] = car - (car - cbr) * k | 0;\n      bytes[j++] = cag - (cag - cbg) * k | 0;\n      bytes[j++] = cab - (cab - cbb) * k | 0;\n      bytes[j++] = 255;\n    }\n  }\n}\n\nfunction drawFigure(data, figure, context) {\n  var ps = figure.coords;\n  var cs = figure.colors;\n  var i, ii;\n\n  switch (figure.type) {\n    case \"lattice\":\n      var verticesPerRow = figure.verticesPerRow;\n      var rows = Math.floor(ps.length / verticesPerRow) - 1;\n      var cols = verticesPerRow - 1;\n\n      for (i = 0; i < rows; i++) {\n        var q = i * verticesPerRow;\n\n        for (var j = 0; j < cols; j++, q++) {\n          drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);\n          drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);\n        }\n      }\n\n      break;\n\n    case \"triangles\":\n      for (i = 0, ii = ps.length; i < ii; i += 3) {\n        drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);\n      }\n\n      break;\n\n    default:\n      throw new Error(\"illegal figure\");\n  }\n}\n\nvar MeshShadingPattern = /*#__PURE__*/function (_BaseShadingPattern2) {\n  _inherits(MeshShadingPattern, _BaseShadingPattern2);\n\n  var _super2 = _createSuper(MeshShadingPattern);\n\n  function MeshShadingPattern(IR) {\n    var _this2;\n\n    _classCallCheck(this, MeshShadingPattern);\n\n    _this2 = _super2.call(this);\n    _this2._coords = IR[2];\n    _this2._colors = IR[3];\n    _this2._figures = IR[4];\n    _this2._bounds = IR[5];\n    _this2._bbox = IR[7];\n    _this2._background = IR[8];\n    _this2.matrix = null;\n    return _this2;\n  }\n\n  _createClass(MeshShadingPattern, [{\n    key: \"_createMeshCanvas\",\n    value: function _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n      var EXPECTED_SCALE = 1.1;\n      var MAX_PATTERN_SIZE = 3000;\n      var BORDER_SIZE = 2;\n      var offsetX = Math.floor(this._bounds[0]);\n      var offsetY = Math.floor(this._bounds[1]);\n      var boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n      var boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n      var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n      var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\n      var scaleX = boundsWidth / width;\n      var scaleY = boundsHeight / height;\n      var context = {\n        coords: this._coords,\n        colors: this._colors,\n        offsetX: -offsetX,\n        offsetY: -offsetY,\n        scaleX: 1 / scaleX,\n        scaleY: 1 / scaleY\n      };\n      var paddedWidth = width + BORDER_SIZE * 2;\n      var paddedHeight = height + BORDER_SIZE * 2;\n      var tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\n      var tmpCtx = tmpCanvas.context;\n      var data = tmpCtx.createImageData(width, height);\n\n      if (backgroundColor) {\n        var bytes = data.data;\n\n        for (var i = 0, ii = bytes.length; i < ii; i += 4) {\n          bytes[i] = backgroundColor[0];\n          bytes[i + 1] = backgroundColor[1];\n          bytes[i + 2] = backgroundColor[2];\n          bytes[i + 3] = 255;\n        }\n      }\n\n      var _iterator2 = _createForOfIteratorHelper(this._figures),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var figure = _step2.value;\n          drawFigure(data, figure, context);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n      var canvas = tmpCanvas.canvas;\n      return {\n        canvas: canvas,\n        offsetX: offsetX - BORDER_SIZE * scaleX,\n        offsetY: offsetY - BORDER_SIZE * scaleY,\n        scaleX: scaleX,\n        scaleY: scaleY\n      };\n    }\n  }, {\n    key: \"getPattern\",\n    value: function getPattern(ctx, owner, inverse, pathType) {\n      applyBoundingBox(ctx, this._bbox);\n      var scale;\n\n      if (pathType === PathType.SHADING) {\n        scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);\n      } else {\n        scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);\n\n        if (this.matrix) {\n          var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);\n\n          scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\n        }\n      }\n\n      var temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);\n\n      if (pathType !== PathType.SHADING) {\n        ctx.setTransform.apply(ctx, owner.baseTransform);\n\n        if (this.matrix) {\n          ctx.transform.apply(ctx, this.matrix);\n        }\n      }\n\n      ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n      ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n      return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n    }\n  }]);\n\n  return MeshShadingPattern;\n}(BaseShadingPattern);\n\nvar DummyShadingPattern = /*#__PURE__*/function (_BaseShadingPattern3) {\n  _inherits(DummyShadingPattern, _BaseShadingPattern3);\n\n  var _super3 = _createSuper(DummyShadingPattern);\n\n  function DummyShadingPattern() {\n    _classCallCheck(this, DummyShadingPattern);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(DummyShadingPattern, [{\n    key: \"getPattern\",\n    value: function getPattern() {\n      return \"hotpink\";\n    }\n  }]);\n\n  return DummyShadingPattern;\n}(BaseShadingPattern);\n\nfunction getShadingPattern(IR) {\n  switch (IR[0]) {\n    case \"RadialAxial\":\n      return new RadialAxialShadingPattern(IR);\n\n    case \"Mesh\":\n      return new MeshShadingPattern(IR);\n\n    case \"Dummy\":\n      return new DummyShadingPattern();\n  }\n\n  throw new Error(\"Unknown IR type: \".concat(IR[0]));\n}\n\nvar PaintType = {\n  COLORED: 1,\n  UNCOLORED: 2\n};\n\nvar TilingPattern = /*#__PURE__*/function () {\n  function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {\n    _classCallCheck(this, TilingPattern);\n\n    this.operatorList = IR[2];\n    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];\n    this.bbox = IR[4];\n    this.xstep = IR[5];\n    this.ystep = IR[6];\n    this.paintType = IR[7];\n    this.tilingType = IR[8];\n    this.color = color;\n    this.ctx = ctx;\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\n    this.baseTransform = baseTransform;\n  }\n\n  _createClass(TilingPattern, [{\n    key: \"createPatternCanvas\",\n    value: function createPatternCanvas(owner) {\n      var operatorList = this.operatorList;\n      var bbox = this.bbox;\n      var xstep = this.xstep;\n      var ystep = this.ystep;\n      var paintType = this.paintType;\n      var tilingType = this.tilingType;\n      var color = this.color;\n      var canvasGraphicsFactory = this.canvasGraphicsFactory;\n      (0, _util.info)(\"TilingType: \" + tilingType);\n      var x0 = bbox[0],\n          y0 = bbox[1],\n          x1 = bbox[2],\n          y1 = bbox[3];\n\n      var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);\n\n      var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);\n\n      var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];\n      var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);\n      var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);\n      var tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", dimx.size, dimy.size, true);\n      var tmpCtx = tmpCanvas.context;\n      var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n      graphics.groupLevel = owner.groupLevel;\n      this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n      var adjustedX0 = x0;\n      var adjustedY0 = y0;\n      var adjustedX1 = x1;\n      var adjustedY1 = y1;\n\n      if (x0 < 0) {\n        adjustedX0 = 0;\n        adjustedX1 += Math.abs(x0);\n      }\n\n      if (y0 < 0) {\n        adjustedY0 = 0;\n        adjustedY1 += Math.abs(y0);\n      }\n\n      tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));\n      graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n      this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);\n      graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice();\n      graphics.executeOperatorList(operatorList);\n      graphics.endDrawing();\n      return {\n        canvas: tmpCanvas.canvas,\n        scaleX: dimx.scale,\n        scaleY: dimy.scale,\n        offsetX: adjustedX0,\n        offsetY: adjustedY0\n      };\n    }\n  }, {\n    key: \"getSizeAndScale\",\n    value: function getSizeAndScale(step, realOutputSize, scale) {\n      step = Math.abs(step);\n      var maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n      var size = Math.ceil(step * scale);\n\n      if (size >= maxSize) {\n        size = maxSize;\n      } else {\n        scale = size / step;\n      }\n\n      return {\n        scale: scale,\n        size: size\n      };\n    }\n  }, {\n    key: \"clipBbox\",\n    value: function clipBbox(graphics, x0, y0, x1, y1) {\n      var bboxWidth = x1 - x0;\n      var bboxHeight = y1 - y0;\n      graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n      graphics.clip();\n      graphics.endPath();\n    }\n  }, {\n    key: \"setFillAndStrokeStyleToContext\",\n    value: function setFillAndStrokeStyleToContext(graphics, paintType, color) {\n      var context = graphics.ctx,\n          current = graphics.current;\n\n      switch (paintType) {\n        case PaintType.COLORED:\n          var ctx = this.ctx;\n          context.fillStyle = ctx.fillStyle;\n          context.strokeStyle = ctx.strokeStyle;\n          current.fillColor = ctx.fillStyle;\n          current.strokeColor = ctx.strokeStyle;\n          break;\n\n        case PaintType.UNCOLORED:\n          var cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);\n\n          context.fillStyle = cssColor;\n          context.strokeStyle = cssColor;\n          current.fillColor = cssColor;\n          current.strokeColor = cssColor;\n          break;\n\n        default:\n          throw new _util.FormatError(\"Unsupported paint type: \".concat(paintType));\n      }\n    }\n  }, {\n    key: \"getPattern\",\n    value: function getPattern(ctx, owner, inverse, pathType) {\n      var matrix = inverse;\n\n      if (pathType !== PathType.SHADING) {\n        matrix = _util.Util.transform(matrix, owner.baseTransform);\n\n        if (this.matrix) {\n          matrix = _util.Util.transform(matrix, this.matrix);\n        }\n      }\n\n      var temporaryPatternCanvas = this.createPatternCanvas(owner);\n      var domMatrix = new DOMMatrix(matrix);\n      domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\n      domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);\n      var pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n\n      try {\n        pattern.setTransform(domMatrix);\n      } catch (ex) {\n        (0, _util.warn)(\"TilingPattern.getPattern: \\\"\".concat(ex === null || ex === void 0 ? void 0 : ex.message, \"\\\".\"));\n      }\n\n      return pattern;\n    }\n  }], [{\n    key: \"MAX_PATTERN_SIZE\",\n    get: function get() {\n      return (0, _util.shadow)(this, \"MAX_PATTERN_SIZE\", 3000);\n    }\n  }]);\n\n  return TilingPattern;\n}();\n\nexports.TilingPattern = TilingPattern;\n\n/***/ }),\n/* 142 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.GlobalWorkerOptions = void 0;\nvar GlobalWorkerOptions = Object.create(null);\nexports.GlobalWorkerOptions = GlobalWorkerOptions;\nGlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;\nGlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? \"\" : GlobalWorkerOptions.workerSrc;\n\n/***/ }),\n/* 143 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.MessageHandler = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar CallbackKind = {\n  UNKNOWN: 0,\n  DATA: 1,\n  ERROR: 2\n};\nvar StreamKind = {\n  UNKNOWN: 0,\n  CANCEL: 1,\n  CANCEL_COMPLETE: 2,\n  CLOSE: 3,\n  ENQUEUE: 4,\n  ERROR: 5,\n  PULL: 6,\n  PULL_COMPLETE: 7,\n  START_COMPLETE: 8\n};\n\nfunction wrapReason(reason) {\n  if (!(reason instanceof Error || _typeof(reason) === \"object\" && reason !== null)) {\n    (0, _util.warn)('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.');\n    return reason;\n  }\n\n  switch (reason.name) {\n    case \"AbortException\":\n      return new _util.AbortException(reason.message);\n\n    case \"MissingPDFException\":\n      return new _util.MissingPDFException(reason.message);\n\n    case \"PasswordException\":\n      return new _util.PasswordException(reason.message, reason.code);\n\n    case \"UnexpectedResponseException\":\n      return new _util.UnexpectedResponseException(reason.message, reason.status);\n\n    case \"UnknownErrorException\":\n      return new _util.UnknownErrorException(reason.message, reason.details);\n\n    default:\n      return new _util.UnknownErrorException(reason.message, reason.toString());\n  }\n}\n\nvar MessageHandler = /*#__PURE__*/function () {\n  function MessageHandler(sourceName, targetName, comObj) {\n    var _this = this;\n\n    _classCallCheck(this, MessageHandler);\n\n    this.sourceName = sourceName;\n    this.targetName = targetName;\n    this.comObj = comObj;\n    this.callbackId = 1;\n    this.streamId = 1;\n    this.streamSinks = Object.create(null);\n    this.streamControllers = Object.create(null);\n    this.callbackCapabilities = Object.create(null);\n    this.actionHandler = Object.create(null);\n\n    this._onComObjOnMessage = function (event) {\n      var data = event.data;\n\n      if (data.targetName !== _this.sourceName) {\n        return;\n      }\n\n      if (data.stream) {\n        _this._processStreamMessage(data);\n\n        return;\n      }\n\n      if (data.callback) {\n        var callbackId = data.callbackId;\n        var capability = _this.callbackCapabilities[callbackId];\n\n        if (!capability) {\n          throw new Error(\"Cannot resolve callback \".concat(callbackId));\n        }\n\n        delete _this.callbackCapabilities[callbackId];\n\n        if (data.callback === CallbackKind.DATA) {\n          capability.resolve(data.data);\n        } else if (data.callback === CallbackKind.ERROR) {\n          capability.reject(wrapReason(data.reason));\n        } else {\n          throw new Error(\"Unexpected callback case\");\n        }\n\n        return;\n      }\n\n      var action = _this.actionHandler[data.action];\n\n      if (!action) {\n        throw new Error(\"Unknown action from worker: \".concat(data.action));\n      }\n\n      if (data.callbackId) {\n        var cbSourceName = _this.sourceName;\n        var cbTargetName = data.sourceName;\n        new Promise(function (resolve) {\n          resolve(action(data.data));\n        }).then(function (result) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.DATA,\n            callbackId: data.callbackId,\n            data: result\n          });\n        }, function (reason) {\n          comObj.postMessage({\n            sourceName: cbSourceName,\n            targetName: cbTargetName,\n            callback: CallbackKind.ERROR,\n            callbackId: data.callbackId,\n            reason: wrapReason(reason)\n          });\n        });\n        return;\n      }\n\n      if (data.streamId) {\n        _this._createStreamSink(data);\n\n        return;\n      }\n\n      action(data.data);\n    };\n\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\n  }\n\n  _createClass(MessageHandler, [{\n    key: \"on\",\n    value: function on(actionName, handler) {\n      var ah = this.actionHandler;\n\n      if (ah[actionName]) {\n        throw new Error(\"There is already an actionName called \\\"\".concat(actionName, \"\\\"\"));\n      }\n\n      ah[actionName] = handler;\n    }\n  }, {\n    key: \"send\",\n    value: function send(actionName, data, transfers) {\n      this.comObj.postMessage({\n        sourceName: this.sourceName,\n        targetName: this.targetName,\n        action: actionName,\n        data: data\n      }, transfers);\n    }\n  }, {\n    key: \"sendWithPromise\",\n    value: function sendWithPromise(actionName, data, transfers) {\n      var callbackId = this.callbackId++;\n      var capability = (0, _util.createPromiseCapability)();\n      this.callbackCapabilities[callbackId] = capability;\n\n      try {\n        this.comObj.postMessage({\n          sourceName: this.sourceName,\n          targetName: this.targetName,\n          action: actionName,\n          callbackId: callbackId,\n          data: data\n        }, transfers);\n      } catch (ex) {\n        capability.reject(ex);\n      }\n\n      return capability.promise;\n    }\n  }, {\n    key: \"sendWithStream\",\n    value: function sendWithStream(actionName, data, queueingStrategy, transfers) {\n      var _this2 = this;\n\n      var streamId = this.streamId++,\n          sourceName = this.sourceName,\n          targetName = this.targetName,\n          comObj = this.comObj;\n      return new ReadableStream({\n        start: function start(controller) {\n          var startCapability = (0, _util.createPromiseCapability)();\n          _this2.streamControllers[streamId] = {\n            controller: controller,\n            startCall: startCapability,\n            pullCall: null,\n            cancelCall: null,\n            isClosed: false\n          };\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            action: actionName,\n            streamId: streamId,\n            data: data,\n            desiredSize: controller.desiredSize\n          }, transfers);\n          return startCapability.promise;\n        },\n        pull: function pull(controller) {\n          var pullCapability = (0, _util.createPromiseCapability)();\n          _this2.streamControllers[streamId].pullCall = pullCapability;\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            stream: StreamKind.PULL,\n            streamId: streamId,\n            desiredSize: controller.desiredSize\n          });\n          return pullCapability.promise;\n        },\n        cancel: function cancel(reason) {\n          (0, _util.assert)(reason instanceof Error, \"cancel must have a valid reason\");\n          var cancelCapability = (0, _util.createPromiseCapability)();\n          _this2.streamControllers[streamId].cancelCall = cancelCapability;\n          _this2.streamControllers[streamId].isClosed = true;\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            stream: StreamKind.CANCEL,\n            streamId: streamId,\n            reason: wrapReason(reason)\n          });\n          return cancelCapability.promise;\n        }\n      }, queueingStrategy);\n    }\n  }, {\n    key: \"_createStreamSink\",\n    value: function _createStreamSink(data) {\n      var streamId = data.streamId,\n          sourceName = this.sourceName,\n          targetName = data.sourceName,\n          comObj = this.comObj;\n      var self = this,\n          action = this.actionHandler[data.action];\n      var streamSink = {\n        enqueue: function enqueue(chunk) {\n          var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n          var transfers = arguments.length > 2 ? arguments[2] : undefined;\n\n          if (this.isCancelled) {\n            return;\n          }\n\n          var lastDesiredSize = this.desiredSize;\n          this.desiredSize -= size;\n\n          if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n            this.sinkCapability = (0, _util.createPromiseCapability)();\n            this.ready = this.sinkCapability.promise;\n          }\n\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            stream: StreamKind.ENQUEUE,\n            streamId: streamId,\n            chunk: chunk\n          }, transfers);\n        },\n        close: function close() {\n          if (this.isCancelled) {\n            return;\n          }\n\n          this.isCancelled = true;\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            stream: StreamKind.CLOSE,\n            streamId: streamId\n          });\n          delete self.streamSinks[streamId];\n        },\n        error: function error(reason) {\n          (0, _util.assert)(reason instanceof Error, \"error must have a valid reason\");\n\n          if (this.isCancelled) {\n            return;\n          }\n\n          this.isCancelled = true;\n          comObj.postMessage({\n            sourceName: sourceName,\n            targetName: targetName,\n            stream: StreamKind.ERROR,\n            streamId: streamId,\n            reason: wrapReason(reason)\n          });\n        },\n        sinkCapability: (0, _util.createPromiseCapability)(),\n        onPull: null,\n        onCancel: null,\n        isCancelled: false,\n        desiredSize: data.desiredSize,\n        ready: null\n      };\n      streamSink.sinkCapability.resolve();\n      streamSink.ready = streamSink.sinkCapability.promise;\n      this.streamSinks[streamId] = streamSink;\n      new Promise(function (resolve) {\n        resolve(action(data.data, streamSink));\n      }).then(function () {\n        comObj.postMessage({\n          sourceName: sourceName,\n          targetName: targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId: streamId,\n          success: true\n        });\n      }, function (reason) {\n        comObj.postMessage({\n          sourceName: sourceName,\n          targetName: targetName,\n          stream: StreamKind.START_COMPLETE,\n          streamId: streamId,\n          reason: wrapReason(reason)\n        });\n      });\n    }\n  }, {\n    key: \"_processStreamMessage\",\n    value: function _processStreamMessage(data) {\n      var streamId = data.streamId,\n          sourceName = this.sourceName,\n          targetName = data.sourceName,\n          comObj = this.comObj;\n      var streamController = this.streamControllers[streamId],\n          streamSink = this.streamSinks[streamId];\n\n      switch (data.stream) {\n        case StreamKind.START_COMPLETE:\n          if (data.success) {\n            streamController.startCall.resolve();\n          } else {\n            streamController.startCall.reject(wrapReason(data.reason));\n          }\n\n          break;\n\n        case StreamKind.PULL_COMPLETE:\n          if (data.success) {\n            streamController.pullCall.resolve();\n          } else {\n            streamController.pullCall.reject(wrapReason(data.reason));\n          }\n\n          break;\n\n        case StreamKind.PULL:\n          if (!streamSink) {\n            comObj.postMessage({\n              sourceName: sourceName,\n              targetName: targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId: streamId,\n              success: true\n            });\n            break;\n          }\n\n          if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n            streamSink.sinkCapability.resolve();\n          }\n\n          streamSink.desiredSize = data.desiredSize;\n          new Promise(function (resolve) {\n            resolve(streamSink.onPull && streamSink.onPull());\n          }).then(function () {\n            comObj.postMessage({\n              sourceName: sourceName,\n              targetName: targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId: streamId,\n              success: true\n            });\n          }, function (reason) {\n            comObj.postMessage({\n              sourceName: sourceName,\n              targetName: targetName,\n              stream: StreamKind.PULL_COMPLETE,\n              streamId: streamId,\n              reason: wrapReason(reason)\n            });\n          });\n          break;\n\n        case StreamKind.ENQUEUE:\n          (0, _util.assert)(streamController, \"enqueue should have stream controller\");\n\n          if (streamController.isClosed) {\n            break;\n          }\n\n          streamController.controller.enqueue(data.chunk);\n          break;\n\n        case StreamKind.CLOSE:\n          (0, _util.assert)(streamController, \"close should have stream controller\");\n\n          if (streamController.isClosed) {\n            break;\n          }\n\n          streamController.isClosed = true;\n          streamController.controller.close();\n\n          this._deleteStreamController(streamController, streamId);\n\n          break;\n\n        case StreamKind.ERROR:\n          (0, _util.assert)(streamController, \"error should have stream controller\");\n          streamController.controller.error(wrapReason(data.reason));\n\n          this._deleteStreamController(streamController, streamId);\n\n          break;\n\n        case StreamKind.CANCEL_COMPLETE:\n          if (data.success) {\n            streamController.cancelCall.resolve();\n          } else {\n            streamController.cancelCall.reject(wrapReason(data.reason));\n          }\n\n          this._deleteStreamController(streamController, streamId);\n\n          break;\n\n        case StreamKind.CANCEL:\n          if (!streamSink) {\n            break;\n          }\n\n          new Promise(function (resolve) {\n            resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason)));\n          }).then(function () {\n            comObj.postMessage({\n              sourceName: sourceName,\n              targetName: targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId: streamId,\n              success: true\n            });\n          }, function (reason) {\n            comObj.postMessage({\n              sourceName: sourceName,\n              targetName: targetName,\n              stream: StreamKind.CANCEL_COMPLETE,\n              streamId: streamId,\n              reason: wrapReason(reason)\n            });\n          });\n          streamSink.sinkCapability.reject(wrapReason(data.reason));\n          streamSink.isCancelled = true;\n          delete this.streamSinks[streamId];\n          break;\n\n        default:\n          throw new Error(\"Unexpected stream case\");\n      }\n    }\n  }, {\n    key: \"_deleteStreamController\",\n    value: function () {\n      var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(streamController, streamId) {\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]);\n\n              case 2:\n                delete this.streamControllers[streamId];\n\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function _deleteStreamController(_x, _x2) {\n        return _deleteStreamController2.apply(this, arguments);\n      }\n\n      return _deleteStreamController;\n    }()\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n    }\n  }]);\n\n  return MessageHandler;\n}();\n\nexports.MessageHandler = MessageHandler;\n\n/***/ }),\n/* 144 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.Metadata = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\"attempted to \" + action + \" private field on non-instance\"); } return privateMap.get(receiver); }\n\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\nvar _metadataMap = /*#__PURE__*/new WeakMap();\n\nvar _data = /*#__PURE__*/new WeakMap();\n\nvar Metadata = /*#__PURE__*/function () {\n  function Metadata(_ref) {\n    var parsedData = _ref.parsedData,\n        rawData = _ref.rawData;\n\n    _classCallCheck(this, Metadata);\n\n    _classPrivateFieldInitSpec(this, _metadataMap, {\n      writable: true,\n      value: void 0\n    });\n\n    _classPrivateFieldInitSpec(this, _data, {\n      writable: true,\n      value: void 0\n    });\n\n    _classPrivateFieldSet(this, _metadataMap, parsedData);\n\n    _classPrivateFieldSet(this, _data, rawData);\n  }\n\n  _createClass(Metadata, [{\n    key: \"getRaw\",\n    value: function getRaw() {\n      return _classPrivateFieldGet(this, _data);\n    }\n  }, {\n    key: \"get\",\n    value: function get(name) {\n      var _classPrivateFieldGet2;\n\n      return (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _metadataMap).get(name)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : null;\n    }\n  }, {\n    key: \"getAll\",\n    value: function getAll() {\n      return (0, _util.objectFromMap)(_classPrivateFieldGet(this, _metadataMap));\n    }\n  }, {\n    key: \"has\",\n    value: function has(name) {\n      return _classPrivateFieldGet(this, _metadataMap).has(name);\n    }\n  }]);\n\n  return Metadata;\n}();\n\nexports.Metadata = Metadata;\n\n/***/ }),\n/* 145 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.OptionalContentConfig = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OptionalContentGroup = function OptionalContentGroup(name, intent) {\n  _classCallCheck(this, OptionalContentGroup);\n\n  this.visible = true;\n  this.name = name;\n  this.intent = intent;\n};\n\nvar OptionalContentConfig = /*#__PURE__*/function () {\n  function OptionalContentConfig(data) {\n    _classCallCheck(this, OptionalContentConfig);\n\n    this.name = null;\n    this.creator = null;\n    this._order = null;\n    this._groups = new Map();\n\n    if (data === null) {\n      return;\n    }\n\n    this.name = data.name;\n    this.creator = data.creator;\n    this._order = data.order;\n\n    var _iterator = _createForOfIteratorHelper(data.groups),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var _group = _step.value;\n\n        this._groups.set(_group.id, new OptionalContentGroup(_group.name, _group.intent));\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    if (data.baseState === \"OFF\") {\n      var _iterator2 = _createForOfIteratorHelper(this._groups),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var group = _step2.value;\n          group.visible = false;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    }\n\n    var _iterator3 = _createForOfIteratorHelper(data.on),\n        _step3;\n\n    try {\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n        var on = _step3.value;\n        this._groups.get(on).visible = true;\n      }\n    } catch (err) {\n      _iterator3.e(err);\n    } finally {\n      _iterator3.f();\n    }\n\n    var _iterator4 = _createForOfIteratorHelper(data.off),\n        _step4;\n\n    try {\n      for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n        var off = _step4.value;\n        this._groups.get(off).visible = false;\n      }\n    } catch (err) {\n      _iterator4.e(err);\n    } finally {\n      _iterator4.f();\n    }\n  }\n\n  _createClass(OptionalContentConfig, [{\n    key: \"_evaluateVisibilityExpression\",\n    value: function _evaluateVisibilityExpression(array) {\n      var length = array.length;\n\n      if (length < 2) {\n        return true;\n      }\n\n      var operator = array[0];\n\n      for (var i = 1; i < length; i++) {\n        var element = array[i];\n        var state = void 0;\n\n        if (Array.isArray(element)) {\n          state = this._evaluateVisibilityExpression(element);\n        } else if (this._groups.has(element)) {\n          state = this._groups.get(element).visible;\n        } else {\n          (0, _util.warn)(\"Optional content group not found: \".concat(element));\n          return true;\n        }\n\n        switch (operator) {\n          case \"And\":\n            if (!state) {\n              return false;\n            }\n\n            break;\n\n          case \"Or\":\n            if (state) {\n              return true;\n            }\n\n            break;\n\n          case \"Not\":\n            return !state;\n\n          default:\n            return true;\n        }\n      }\n\n      return operator === \"And\";\n    }\n  }, {\n    key: \"isVisible\",\n    value: function isVisible(group) {\n      if (this._groups.size === 0) {\n        return true;\n      }\n\n      if (!group) {\n        (0, _util.warn)(\"Optional content group not defined.\");\n        return true;\n      }\n\n      if (group.type === \"OCG\") {\n        if (!this._groups.has(group.id)) {\n          (0, _util.warn)(\"Optional content group not found: \".concat(group.id));\n          return true;\n        }\n\n        return this._groups.get(group.id).visible;\n      } else if (group.type === \"OCMD\") {\n        if (group.expression) {\n          return this._evaluateVisibilityExpression(group.expression);\n        }\n\n        if (!group.policy || group.policy === \"AnyOn\") {\n          var _iterator5 = _createForOfIteratorHelper(group.ids),\n              _step5;\n\n          try {\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n              var id = _step5.value;\n\n              if (!this._groups.has(id)) {\n                (0, _util.warn)(\"Optional content group not found: \".concat(id));\n                return true;\n              }\n\n              if (this._groups.get(id).visible) {\n                return true;\n              }\n            }\n          } catch (err) {\n            _iterator5.e(err);\n          } finally {\n            _iterator5.f();\n          }\n\n          return false;\n        } else if (group.policy === \"AllOn\") {\n          var _iterator6 = _createForOfIteratorHelper(group.ids),\n              _step6;\n\n          try {\n            for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n              var _id = _step6.value;\n\n              if (!this._groups.has(_id)) {\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id));\n                return true;\n              }\n\n              if (!this._groups.get(_id).visible) {\n                return false;\n              }\n            }\n          } catch (err) {\n            _iterator6.e(err);\n          } finally {\n            _iterator6.f();\n          }\n\n          return true;\n        } else if (group.policy === \"AnyOff\") {\n          var _iterator7 = _createForOfIteratorHelper(group.ids),\n              _step7;\n\n          try {\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n              var _id2 = _step7.value;\n\n              if (!this._groups.has(_id2)) {\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id2));\n                return true;\n              }\n\n              if (!this._groups.get(_id2).visible) {\n                return true;\n              }\n            }\n          } catch (err) {\n            _iterator7.e(err);\n          } finally {\n            _iterator7.f();\n          }\n\n          return false;\n        } else if (group.policy === \"AllOff\") {\n          var _iterator8 = _createForOfIteratorHelper(group.ids),\n              _step8;\n\n          try {\n            for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n              var _id3 = _step8.value;\n\n              if (!this._groups.has(_id3)) {\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id3));\n                return true;\n              }\n\n              if (this._groups.get(_id3).visible) {\n                return false;\n              }\n            }\n          } catch (err) {\n            _iterator8.e(err);\n          } finally {\n            _iterator8.f();\n          }\n\n          return true;\n        }\n\n        (0, _util.warn)(\"Unknown optional content policy \".concat(group.policy, \".\"));\n        return true;\n      }\n\n      (0, _util.warn)(\"Unknown group type \".concat(group.type, \".\"));\n      return true;\n    }\n  }, {\n    key: \"setVisibility\",\n    value: function setVisibility(id) {\n      var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      if (!this._groups.has(id)) {\n        (0, _util.warn)(\"Optional content group not found: \".concat(id));\n        return;\n      }\n\n      this._groups.get(id).visible = !!visible;\n    }\n  }, {\n    key: \"getOrder\",\n    value: function getOrder() {\n      if (!this._groups.size) {\n        return null;\n      }\n\n      if (this._order) {\n        return this._order.slice();\n      }\n\n      return Array.from(this._groups.keys());\n    }\n  }, {\n    key: \"getGroups\",\n    value: function getGroups() {\n      return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null;\n    }\n  }, {\n    key: \"getGroup\",\n    value: function getGroup(id) {\n      return this._groups.get(id) || null;\n    }\n  }]);\n\n  return OptionalContentConfig;\n}();\n\nexports.OptionalContentConfig = OptionalContentConfig;\n\n/***/ }),\n/* 146 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFDataTransportStream = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar PDFDataTransportStream = /*#__PURE__*/function () {\n  function PDFDataTransportStream(params, pdfDataRangeTransport) {\n    var _this = this;\n\n    _classCallCheck(this, PDFDataTransportStream);\n\n    (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.');\n    this._queuedChunks = [];\n    this._progressiveDone = params.progressiveDone || false;\n    this._contentDispositionFilename = params.contentDispositionFilename || null;\n    var initialData = params.initialData;\n\n    if ((initialData === null || initialData === void 0 ? void 0 : initialData.length) > 0) {\n      var buffer = new Uint8Array(initialData).buffer;\n\n      this._queuedChunks.push(buffer);\n    }\n\n    this._pdfDataRangeTransport = pdfDataRangeTransport;\n    this._isStreamingSupported = !params.disableStream;\n    this._isRangeSupported = !params.disableRange;\n    this._contentLength = params.length;\n    this._fullRequestReader = null;\n    this._rangeReaders = [];\n\n    this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) {\n      _this._onReceiveData({\n        begin: begin,\n        chunk: chunk\n      });\n    });\n\n    this._pdfDataRangeTransport.addProgressListener(function (loaded, total) {\n      _this._onProgress({\n        loaded: loaded,\n        total: total\n      });\n    });\n\n    this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {\n      _this._onReceiveData({\n        chunk: chunk\n      });\n    });\n\n    this._pdfDataRangeTransport.addProgressiveDoneListener(function () {\n      _this._onProgressiveDone();\n    });\n\n    this._pdfDataRangeTransport.transportReady();\n  }\n\n  _createClass(PDFDataTransportStream, [{\n    key: \"_onReceiveData\",\n    value: function _onReceiveData(args) {\n      var buffer = new Uint8Array(args.chunk).buffer;\n\n      if (args.begin === undefined) {\n        if (this._fullRequestReader) {\n          this._fullRequestReader._enqueue(buffer);\n        } else {\n          this._queuedChunks.push(buffer);\n        }\n      } else {\n        var found = this._rangeReaders.some(function (rangeReader) {\n          if (rangeReader._begin !== args.begin) {\n            return false;\n          }\n\n          rangeReader._enqueue(buffer);\n\n          return true;\n        });\n\n        (0, _util.assert)(found, \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n      }\n    }\n  }, {\n    key: \"_progressiveDataLength\",\n    get: function get() {\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\n\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\n    }\n  }, {\n    key: \"_onProgress\",\n    value: function _onProgress(evt) {\n      if (evt.total === undefined) {\n        var firstReader = this._rangeReaders[0];\n\n        if (firstReader !== null && firstReader !== void 0 && firstReader.onProgress) {\n          firstReader.onProgress({\n            loaded: evt.loaded\n          });\n        }\n      } else {\n        var fullReader = this._fullRequestReader;\n\n        if (fullReader !== null && fullReader !== void 0 && fullReader.onProgress) {\n          fullReader.onProgress({\n            loaded: evt.loaded,\n            total: evt.total\n          });\n        }\n      }\n    }\n  }, {\n    key: \"_onProgressiveDone\",\n    value: function _onProgressiveDone() {\n      if (this._fullRequestReader) {\n        this._fullRequestReader.progressiveDone();\n      }\n\n      this._progressiveDone = true;\n    }\n  }, {\n    key: \"_removeRangeReader\",\n    value: function _removeRangeReader(reader) {\n      var i = this._rangeReaders.indexOf(reader);\n\n      if (i >= 0) {\n        this._rangeReaders.splice(i, 1);\n      }\n    }\n  }, {\n    key: \"getFullReader\",\n    value: function getFullReader() {\n      (0, _util.assert)(!this._fullRequestReader, \"PDFDataTransportStream.getFullReader can only be called once.\");\n      var queuedChunks = this._queuedChunks;\n      this._queuedChunks = null;\n      return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);\n    }\n  }, {\n    key: \"getRangeReader\",\n    value: function getRangeReader(begin, end) {\n      if (end <= this._progressiveDataLength) {\n        return null;\n      }\n\n      var reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n\n      this._pdfDataRangeTransport.requestDataRange(begin, end);\n\n      this._rangeReaders.push(reader);\n\n      return reader;\n    }\n  }, {\n    key: \"cancelAllRequests\",\n    value: function cancelAllRequests(reason) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader.cancel(reason);\n      }\n\n      var _iterator = _createForOfIteratorHelper(this._rangeReaders.slice(0)),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var reader = _step.value;\n          reader.cancel(reason);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n\n      this._pdfDataRangeTransport.abort();\n    }\n  }]);\n\n  return PDFDataTransportStream;\n}();\n\nexports.PDFDataTransportStream = PDFDataTransportStream;\n\nvar PDFDataTransportStreamReader = /*#__PURE__*/function () {\n  function PDFDataTransportStreamReader(stream, queuedChunks) {\n    var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    _classCallCheck(this, PDFDataTransportStreamReader);\n\n    this._stream = stream;\n    this._done = progressiveDone || false;\n    this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null;\n    this._queuedChunks = queuedChunks || [];\n    this._loaded = 0;\n\n    var _iterator2 = _createForOfIteratorHelper(this._queuedChunks),\n        _step2;\n\n    try {\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n        var chunk = _step2.value;\n        this._loaded += chunk.byteLength;\n      }\n    } catch (err) {\n      _iterator2.e(err);\n    } finally {\n      _iterator2.f();\n    }\n\n    this._requests = [];\n    this._headersReady = Promise.resolve();\n    stream._fullRequestReader = this;\n    this.onProgress = null;\n  }\n\n  _createClass(PDFDataTransportStreamReader, [{\n    key: \"_enqueue\",\n    value: function _enqueue(chunk) {\n      if (this._done) {\n        return;\n      }\n\n      if (this._requests.length > 0) {\n        var requestCapability = this._requests.shift();\n\n        requestCapability.resolve({\n          value: chunk,\n          done: false\n        });\n      } else {\n        this._queuedChunks.push(chunk);\n      }\n\n      this._loaded += chunk.byteLength;\n    }\n  }, {\n    key: \"headersReady\",\n    get: function get() {\n      return this._headersReady;\n    }\n  }, {\n    key: \"filename\",\n    get: function get() {\n      return this._filename;\n    }\n  }, {\n    key: \"isRangeSupported\",\n    get: function get() {\n      return this._stream._isRangeSupported;\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._stream._isStreamingSupported;\n    }\n  }, {\n    key: \"contentLength\",\n    get: function get() {\n      return this._stream._contentLength;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n        var chunk, requestCapability;\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (!(this._queuedChunks.length > 0)) {\n                  _context.next = 3;\n                  break;\n                }\n\n                chunk = this._queuedChunks.shift();\n                return _context.abrupt(\"return\", {\n                  value: chunk,\n                  done: false\n                });\n\n              case 3:\n                if (!this._done) {\n                  _context.next = 5;\n                  break;\n                }\n\n                return _context.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 5:\n                requestCapability = (0, _util.createPromiseCapability)();\n\n                this._requests.push(requestCapability);\n\n                return _context.abrupt(\"return\", requestCapability.promise);\n\n              case 8:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function read() {\n        return _read.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      this._done = true;\n\n      var _iterator3 = _createForOfIteratorHelper(this._requests),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var requestCapability = _step3.value;\n          requestCapability.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      this._requests.length = 0;\n    }\n  }, {\n    key: \"progressiveDone\",\n    value: function progressiveDone() {\n      if (this._done) {\n        return;\n      }\n\n      this._done = true;\n    }\n  }]);\n\n  return PDFDataTransportStreamReader;\n}();\n\nvar PDFDataTransportStreamRangeReader = /*#__PURE__*/function () {\n  function PDFDataTransportStreamRangeReader(stream, begin, end) {\n    _classCallCheck(this, PDFDataTransportStreamRangeReader);\n\n    this._stream = stream;\n    this._begin = begin;\n    this._end = end;\n    this._queuedChunk = null;\n    this._requests = [];\n    this._done = false;\n    this.onProgress = null;\n  }\n\n  _createClass(PDFDataTransportStreamRangeReader, [{\n    key: \"_enqueue\",\n    value: function _enqueue(chunk) {\n      if (this._done) {\n        return;\n      }\n\n      if (this._requests.length === 0) {\n        this._queuedChunk = chunk;\n      } else {\n        var requestsCapability = this._requests.shift();\n\n        requestsCapability.resolve({\n          value: chunk,\n          done: false\n        });\n\n        var _iterator4 = _createForOfIteratorHelper(this._requests),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var requestCapability = _step4.value;\n            requestCapability.resolve({\n              value: undefined,\n              done: true\n            });\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n\n        this._requests.length = 0;\n      }\n\n      this._done = true;\n\n      this._stream._removeRangeReader(this);\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n        var chunk, requestCapability;\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!this._queuedChunk) {\n                  _context2.next = 4;\n                  break;\n                }\n\n                chunk = this._queuedChunk;\n                this._queuedChunk = null;\n                return _context2.abrupt(\"return\", {\n                  value: chunk,\n                  done: false\n                });\n\n              case 4:\n                if (!this._done) {\n                  _context2.next = 6;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 6:\n                requestCapability = (0, _util.createPromiseCapability)();\n\n                this._requests.push(requestCapability);\n\n                return _context2.abrupt(\"return\", requestCapability.promise);\n\n              case 9:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function read() {\n        return _read2.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      this._done = true;\n\n      var _iterator5 = _createForOfIteratorHelper(this._requests),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var requestCapability = _step5.value;\n          requestCapability.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n\n      this._requests.length = 0;\n\n      this._stream._removeRangeReader(this);\n    }\n  }]);\n\n  return PDFDataTransportStreamRangeReader;\n}();\n\n/***/ }),\n/* 147 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.XfaText = void 0;\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar XfaText = /*#__PURE__*/function () {\n  function XfaText() {\n    _classCallCheck(this, XfaText);\n  }\n\n  _createClass(XfaText, null, [{\n    key: \"textContent\",\n    value: function textContent(xfa) {\n      var items = [];\n      var output = {\n        items: items,\n        styles: Object.create(null)\n      };\n\n      function walk(node) {\n        var _node$attributes;\n\n        if (!node) {\n          return;\n        }\n\n        var str = null;\n        var name = node.name;\n\n        if (name === \"#text\") {\n          str = node.value;\n        } else if (!XfaText.shouldBuildText(name)) {\n          return;\n        } else if (node !== null && node !== void 0 && (_node$attributes = node.attributes) !== null && _node$attributes !== void 0 && _node$attributes.textContent) {\n          str = node.attributes.textContent;\n        } else if (node.value) {\n          str = node.value;\n        }\n\n        if (str !== null) {\n          items.push({\n            str: str\n          });\n        }\n\n        if (!node.children) {\n          return;\n        }\n\n        var _iterator = _createForOfIteratorHelper(node.children),\n            _step;\n\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var child = _step.value;\n            walk(child);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n\n      walk(xfa);\n      return output;\n    }\n  }, {\n    key: \"shouldBuildText\",\n    value: function shouldBuildText(name) {\n      return !(name === \"textarea\" || name === \"input\" || name === \"option\" || name === \"select\");\n    }\n  }]);\n\n  return XfaText;\n}();\n\nexports.XfaText = XfaText;\n\n/***/ }),\n/* 148 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.AnnotationLayer = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _annotation_storage = __w_pdfjs_require__(139);\n\nvar _scripting_utils = __w_pdfjs_require__(149);\n\nvar _xfa_layer = __w_pdfjs_require__(150);\n\nfunction _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess(receiver, classConstructor); return method; }\n\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar DEFAULT_TAB_INDEX = 1000;\nvar GetElementsByNameSet = new WeakSet();\n\nvar AnnotationElementFactory = /*#__PURE__*/function () {\n  function AnnotationElementFactory() {\n    _classCallCheck(this, AnnotationElementFactory);\n  }\n\n  _createClass(AnnotationElementFactory, null, [{\n    key: \"create\",\n    value: function create(parameters) {\n      var subtype = parameters.data.annotationType;\n\n      switch (subtype) {\n        case _util.AnnotationType.LINK:\n          return new LinkAnnotationElement(parameters);\n\n        case _util.AnnotationType.TEXT:\n          return new TextAnnotationElement(parameters);\n\n        case _util.AnnotationType.WIDGET:\n          var fieldType = parameters.data.fieldType;\n\n          switch (fieldType) {\n            case \"Tx\":\n              return new TextWidgetAnnotationElement(parameters);\n\n            case \"Btn\":\n              if (parameters.data.radioButton) {\n                return new RadioButtonWidgetAnnotationElement(parameters);\n              } else if (parameters.data.checkBox) {\n                return new CheckboxWidgetAnnotationElement(parameters);\n              }\n\n              return new PushButtonWidgetAnnotationElement(parameters);\n\n            case \"Ch\":\n              return new ChoiceWidgetAnnotationElement(parameters);\n          }\n\n          return new WidgetAnnotationElement(parameters);\n\n        case _util.AnnotationType.POPUP:\n          return new PopupAnnotationElement(parameters);\n\n        case _util.AnnotationType.FREETEXT:\n          return new FreeTextAnnotationElement(parameters);\n\n        case _util.AnnotationType.LINE:\n          return new LineAnnotationElement(parameters);\n\n        case _util.AnnotationType.SQUARE:\n          return new SquareAnnotationElement(parameters);\n\n        case _util.AnnotationType.CIRCLE:\n          return new CircleAnnotationElement(parameters);\n\n        case _util.AnnotationType.POLYLINE:\n          return new PolylineAnnotationElement(parameters);\n\n        case _util.AnnotationType.CARET:\n          return new CaretAnnotationElement(parameters);\n\n        case _util.AnnotationType.INK:\n          return new InkAnnotationElement(parameters);\n\n        case _util.AnnotationType.POLYGON:\n          return new PolygonAnnotationElement(parameters);\n\n        case _util.AnnotationType.HIGHLIGHT:\n          return new HighlightAnnotationElement(parameters);\n\n        case _util.AnnotationType.UNDERLINE:\n          return new UnderlineAnnotationElement(parameters);\n\n        case _util.AnnotationType.SQUIGGLY:\n          return new SquigglyAnnotationElement(parameters);\n\n        case _util.AnnotationType.STRIKEOUT:\n          return new StrikeOutAnnotationElement(parameters);\n\n        case _util.AnnotationType.STAMP:\n          return new StampAnnotationElement(parameters);\n\n        case _util.AnnotationType.FILEATTACHMENT:\n          return new FileAttachmentAnnotationElement(parameters);\n\n        default:\n          return new AnnotationElement(parameters);\n      }\n    }\n  }]);\n\n  return AnnotationElementFactory;\n}();\n\nvar AnnotationElement = /*#__PURE__*/function () {\n  function AnnotationElement(parameters) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n        _ref$isRenderable = _ref.isRenderable,\n        isRenderable = _ref$isRenderable === void 0 ? false : _ref$isRenderable,\n        _ref$ignoreBorder = _ref.ignoreBorder,\n        ignoreBorder = _ref$ignoreBorder === void 0 ? false : _ref$ignoreBorder,\n        _ref$createQuadrilate = _ref.createQuadrilaterals,\n        createQuadrilaterals = _ref$createQuadrilate === void 0 ? false : _ref$createQuadrilate;\n\n    _classCallCheck(this, AnnotationElement);\n\n    this.isRenderable = isRenderable;\n    this.data = parameters.data;\n    this.layer = parameters.layer;\n    this.page = parameters.page;\n    this.viewport = parameters.viewport;\n    this.linkService = parameters.linkService;\n    this.downloadManager = parameters.downloadManager;\n    this.imageResourcesPath = parameters.imageResourcesPath;\n    this.renderForms = parameters.renderForms;\n    this.svgFactory = parameters.svgFactory;\n    this.annotationStorage = parameters.annotationStorage;\n    this.enableScripting = parameters.enableScripting;\n    this.hasJSActions = parameters.hasJSActions;\n    this._fieldObjects = parameters.fieldObjects;\n    this._mouseState = parameters.mouseState;\n\n    if (isRenderable) {\n      this.container = this._createContainer(ignoreBorder);\n    }\n\n    if (createQuadrilaterals) {\n      this.quadrilaterals = this._createQuadrilaterals(ignoreBorder);\n    }\n  }\n\n  _createClass(AnnotationElement, [{\n    key: \"_createContainer\",\n    value: function _createContainer() {\n      var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var data = this.data,\n          page = this.page,\n          viewport = this.viewport;\n      var container = document.createElement(\"section\");\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      container.setAttribute(\"data-annotation-id\", data.id);\n\n      var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\n\n      if (data.hasOwnCanvas) {\n        var transform = viewport.transform.slice();\n\n        var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(transform),\n            _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),\n            scaleX = _Util$singularValueDe2[0],\n            scaleY = _Util$singularValueDe2[1];\n\n        width = Math.ceil(width * scaleX);\n        height = Math.ceil(height * scaleY);\n        rect[0] *= scaleX;\n        rect[1] *= scaleY;\n\n        for (var i = 0; i < 4; i++) {\n          transform[i] = Math.sign(transform[i]);\n        }\n\n        container.style.transform = \"matrix(\".concat(transform.join(\",\"), \")\");\n      } else {\n        container.style.transform = \"matrix(\".concat(viewport.transform.join(\",\"), \")\");\n      }\n\n      container.style.transformOrigin = \"\".concat(-rect[0], \"px \").concat(-rect[1], \"px\");\n\n      if (!ignoreBorder && data.borderStyle.width > 0) {\n        container.style.borderWidth = \"\".concat(data.borderStyle.width, \"px\");\n\n        if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {\n          width -= 2 * data.borderStyle.width;\n          height -= 2 * data.borderStyle.width;\n        }\n\n        var horizontalRadius = data.borderStyle.horizontalCornerRadius;\n        var verticalRadius = data.borderStyle.verticalCornerRadius;\n\n        if (horizontalRadius > 0 || verticalRadius > 0) {\n          var radius = \"\".concat(horizontalRadius, \"px / \").concat(verticalRadius, \"px\");\n          container.style.borderRadius = radius;\n        }\n\n        switch (data.borderStyle.style) {\n          case _util.AnnotationBorderStyleType.SOLID:\n            container.style.borderStyle = \"solid\";\n            break;\n\n          case _util.AnnotationBorderStyleType.DASHED:\n            container.style.borderStyle = \"dashed\";\n            break;\n\n          case _util.AnnotationBorderStyleType.BEVELED:\n            (0, _util.warn)(\"Unimplemented border style: beveled\");\n            break;\n\n          case _util.AnnotationBorderStyleType.INSET:\n            (0, _util.warn)(\"Unimplemented border style: inset\");\n            break;\n\n          case _util.AnnotationBorderStyleType.UNDERLINE:\n            container.style.borderBottomStyle = \"solid\";\n            break;\n\n          default:\n            break;\n        }\n\n        var borderColor = data.borderColor || data.color || null;\n\n        if (borderColor) {\n          container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);\n        } else {\n          container.style.borderWidth = 0;\n        }\n      }\n\n      container.style.left = \"\".concat(rect[0], \"px\");\n      container.style.top = \"\".concat(rect[1], \"px\");\n\n      if (data.hasOwnCanvas) {\n        container.style.width = container.style.height = \"auto\";\n      } else {\n        container.style.width = \"\".concat(width, \"px\");\n        container.style.height = \"\".concat(height, \"px\");\n      }\n\n      return container;\n    }\n  }, {\n    key: \"_createQuadrilaterals\",\n    value: function _createQuadrilaterals() {\n      var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.data.quadPoints) {\n        return null;\n      }\n\n      var quadrilaterals = [];\n      var savedRect = this.data.rect;\n\n      var _iterator = _createForOfIteratorHelper(this.data.quadPoints),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var quadPoint = _step.value;\n          this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y];\n          quadrilaterals.push(this._createContainer(ignoreBorder));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n\n      this.data.rect = savedRect;\n      return quadrilaterals;\n    }\n  }, {\n    key: \"_createPopup\",\n    value: function _createPopup(trigger, data) {\n      var container = this.container;\n\n      if (this.quadrilaterals) {\n        trigger = trigger || this.quadrilaterals;\n        container = this.quadrilaterals[0];\n      }\n\n      if (!trigger) {\n        trigger = document.createElement(\"div\");\n        trigger.style.height = container.style.height;\n        trigger.style.width = container.style.width;\n        container.appendChild(trigger);\n      }\n\n      var popupElement = new PopupElement({\n        container: container,\n        trigger: trigger,\n        color: data.color,\n        titleObj: data.titleObj,\n        modificationDate: data.modificationDate,\n        contentsObj: data.contentsObj,\n        richText: data.richText,\n        hideWrapper: true\n      });\n      var popup = popupElement.render();\n      popup.style.left = container.style.width;\n      container.appendChild(popup);\n    }\n  }, {\n    key: \"_renderQuadrilaterals\",\n    value: function _renderQuadrilaterals(className) {\n      var _iterator2 = _createForOfIteratorHelper(this.quadrilaterals),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var quadrilateral = _step2.value;\n          quadrilateral.className = className;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      return this.quadrilaterals;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      (0, _util.unreachable)(\"Abstract method `AnnotationElement.render` called\");\n    }\n  }, {\n    key: \"_getElementsByName\",\n    value: function _getElementsByName(name) {\n      var skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      var fields = [];\n\n      if (this._fieldObjects) {\n        var fieldObj = this._fieldObjects[name];\n\n        if (fieldObj) {\n          var _iterator3 = _createForOfIteratorHelper(fieldObj),\n              _step3;\n\n          try {\n            for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n              var _step3$value = _step3.value,\n                  page = _step3$value.page,\n                  id = _step3$value.id,\n                  exportValues = _step3$value.exportValues;\n\n              if (page === -1) {\n                continue;\n              }\n\n              if (id === skipId) {\n                continue;\n              }\n\n              var exportValue = typeof exportValues === \"string\" ? exportValues : null;\n              var domElement = document.getElementById(id);\n\n              if (domElement && !GetElementsByNameSet.has(domElement)) {\n                (0, _util.warn)(\"_getElementsByName - element not allowed: \".concat(id));\n                continue;\n              }\n\n              fields.push({\n                id: id,\n                exportValue: exportValue,\n                domElement: domElement\n              });\n            }\n          } catch (err) {\n            _iterator3.e(err);\n          } finally {\n            _iterator3.f();\n          }\n        }\n\n        return fields;\n      }\n\n      var _iterator4 = _createForOfIteratorHelper(document.getElementsByName(name)),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var _domElement = _step4.value;\n          var _id = _domElement.id,\n              _exportValue = _domElement.exportValue;\n\n          if (_id === skipId) {\n            continue;\n          }\n\n          if (!GetElementsByNameSet.has(_domElement)) {\n            continue;\n          }\n\n          fields.push({\n            id: _id,\n            exportValue: _exportValue,\n            domElement: _domElement\n          });\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n\n      return fields;\n    }\n  }], [{\n    key: \"platform\",\n    get: function get() {\n      var platform = typeof navigator !== \"undefined\" ? navigator.platform : \"\";\n      return (0, _util.shadow)(this, \"platform\", {\n        isWin: platform.includes(\"Win\"),\n        isMac: platform.includes(\"Mac\")\n      });\n    }\n  }]);\n\n  return AnnotationElement;\n}();\n\nvar LinkAnnotationElement = /*#__PURE__*/function (_AnnotationElement) {\n  _inherits(LinkAnnotationElement, _AnnotationElement);\n\n  var _super = _createSuper(LinkAnnotationElement);\n\n  function LinkAnnotationElement(parameters) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    _classCallCheck(this, LinkAnnotationElement);\n\n    var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions[\"Mouse Up\"] || parameters.data.actions[\"Mouse Down\"]));\n    return _super.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: !!(options !== null && options !== void 0 && options.ignoreBorder),\n      createQuadrilaterals: true\n    });\n  }\n\n  _createClass(LinkAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var data = this.data,\n          linkService = this.linkService;\n      var link = document.createElement(\"a\");\n\n      if (data.url) {\n        var _linkService$addLinkA;\n\n        if (!linkService.addLinkAttributes) {\n          (0, _util.warn)(\"LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance.\");\n        }\n\n        (_linkService$addLinkA = linkService.addLinkAttributes) === null || _linkService$addLinkA === void 0 ? void 0 : _linkService$addLinkA.call(linkService, link, data.url, data.newWindow);\n      } else if (data.action) {\n        this._bindNamedAction(link, data.action);\n      } else if (data.dest) {\n        this._bindLink(link, data.dest);\n      } else {\n        var hasClickAction = false;\n\n        if (data.actions && (data.actions.Action || data.actions[\"Mouse Up\"] || data.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions) {\n          hasClickAction = true;\n\n          this._bindJSAction(link, data);\n        }\n\n        if (data.resetForm) {\n          this._bindResetFormAction(link, data.resetForm);\n        } else if (!hasClickAction) {\n          this._bindLink(link, \"\");\n        }\n      }\n\n      if (this.quadrilaterals) {\n        return this._renderQuadrilaterals(\"linkAnnotation\").map(function (quadrilateral, index) {\n          var linkElement = index === 0 ? link : link.cloneNode();\n          quadrilateral.appendChild(linkElement);\n          return quadrilateral;\n        });\n      }\n\n      this.container.className = \"linkAnnotation\";\n      this.container.appendChild(link);\n      return this.container;\n    }\n  }, {\n    key: \"_bindLink\",\n    value: function _bindLink(link, destination) {\n      var _this = this;\n\n      link.href = this.linkService.getDestinationHash(destination);\n\n      link.onclick = function () {\n        if (destination) {\n          _this.linkService.goToDestination(destination);\n        }\n\n        return false;\n      };\n\n      if (destination || destination === \"\") {\n        link.className = \"internalLink\";\n      }\n    }\n  }, {\n    key: \"_bindNamedAction\",\n    value: function _bindNamedAction(link, action) {\n      var _this2 = this;\n\n      link.href = this.linkService.getAnchorUrl(\"\");\n\n      link.onclick = function () {\n        _this2.linkService.executeNamedAction(action);\n\n        return false;\n      };\n\n      link.className = \"internalLink\";\n    }\n  }, {\n    key: \"_bindJSAction\",\n    value: function _bindJSAction(link, data) {\n      var _this3 = this;\n\n      link.href = this.linkService.getAnchorUrl(\"\");\n      var map = new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\n\n      var _loop = function _loop() {\n        var name = _Object$keys[_i2];\n        var jsName = map.get(name);\n\n        if (!jsName) {\n          return \"continue\";\n        }\n\n        link[jsName] = function () {\n          var _this3$linkService$ev;\n\n          (_this3$linkService$ev = _this3.linkService.eventBus) === null || _this3$linkService$ev === void 0 ? void 0 : _this3$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\n            source: _this3,\n            detail: {\n              id: data.id,\n              name: name\n            }\n          });\n          return false;\n        };\n      };\n\n      for (var _i2 = 0, _Object$keys = Object.keys(data.actions); _i2 < _Object$keys.length; _i2++) {\n        var _ret = _loop();\n\n        if (_ret === \"continue\") continue;\n      }\n\n      if (!link.onclick) {\n        link.onclick = function () {\n          return false;\n        };\n      }\n\n      link.className = \"internalLink\";\n    }\n  }, {\n    key: \"_bindResetFormAction\",\n    value: function _bindResetFormAction(link, resetForm) {\n      var _this4 = this;\n\n      var otherClickAction = link.onclick;\n\n      if (!otherClickAction) {\n        link.href = this.linkService.getAnchorUrl(\"\");\n      }\n\n      link.className = \"internalLink\";\n\n      if (!this._fieldObjects) {\n        (0, _util.warn)(\"_bindResetFormAction - \\\"resetForm\\\" action not supported, \" + \"ensure that the `fieldObjects` parameter is provided.\");\n\n        if (!otherClickAction) {\n          link.onclick = function () {\n            return false;\n          };\n        }\n\n        return;\n      }\n\n      link.onclick = function () {\n        if (otherClickAction) {\n          otherClickAction();\n        }\n\n        var resetFormFields = resetForm.fields,\n            resetFormRefs = resetForm.refs,\n            include = resetForm.include;\n        var allFields = [];\n\n        if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n          var fieldIds = new Set(resetFormRefs);\n\n          var _iterator5 = _createForOfIteratorHelper(resetFormFields),\n              _step5;\n\n          try {\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n              var fieldName = _step5.value;\n\n              var _fields = _this4._fieldObjects[fieldName] || [];\n\n              var _iterator7 = _createForOfIteratorHelper(_fields),\n                  _step7;\n\n              try {\n                for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n                  var id = _step7.value.id;\n                  fieldIds.add(id);\n                }\n              } catch (err) {\n                _iterator7.e(err);\n              } finally {\n                _iterator7.f();\n              }\n            }\n          } catch (err) {\n            _iterator5.e(err);\n          } finally {\n            _iterator5.f();\n          }\n\n          for (var _i3 = 0, _Object$values = Object.values(_this4._fieldObjects); _i3 < _Object$values.length; _i3++) {\n            var fields = _Object$values[_i3];\n\n            var _iterator6 = _createForOfIteratorHelper(fields),\n                _step6;\n\n            try {\n              for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n                var field = _step6.value;\n\n                if (fieldIds.has(field.id) === include) {\n                  allFields.push(field);\n                }\n              }\n            } catch (err) {\n              _iterator6.e(err);\n            } finally {\n              _iterator6.f();\n            }\n          }\n        } else {\n          for (var _i4 = 0, _Object$values2 = Object.values(_this4._fieldObjects); _i4 < _Object$values2.length; _i4++) {\n            var _fields2 = _Object$values2[_i4];\n            allFields.push.apply(allFields, _toConsumableArray(_fields2));\n          }\n        }\n\n        var storage = _this4.annotationStorage;\n        var allIds = [];\n\n        for (var _i5 = 0, _allFields = allFields; _i5 < _allFields.length; _i5++) {\n          var _field = _allFields[_i5];\n          var _id2 = _field.id;\n          allIds.push(_id2);\n\n          switch (_field.type) {\n            case \"text\":\n              {\n                var value = _field.defaultValue || \"\";\n                storage.setValue(_id2, {\n                  value: value,\n                  valueAsString: value\n                });\n                break;\n              }\n\n            case \"checkbox\":\n            case \"radiobutton\":\n              {\n                var _value = _field.defaultValue === _field.exportValues;\n\n                storage.setValue(_id2, {\n                  value: _value\n                });\n                break;\n              }\n\n            case \"combobox\":\n            case \"listbox\":\n              {\n                var _value2 = _field.defaultValue || \"\";\n\n                storage.setValue(_id2, {\n                  value: _value2\n                });\n                break;\n              }\n\n            default:\n              continue;\n          }\n\n          var domElement = document.getElementById(_id2);\n\n          if (!domElement || !GetElementsByNameSet.has(domElement)) {\n            continue;\n          }\n\n          domElement.dispatchEvent(new Event(\"resetform\"));\n        }\n\n        if (_this4.enableScripting) {\n          var _this4$linkService$ev;\n\n          (_this4$linkService$ev = _this4.linkService.eventBus) === null || _this4$linkService$ev === void 0 ? void 0 : _this4$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\n            source: _this4,\n            detail: {\n              id: \"app\",\n              ids: allIds,\n              name: \"ResetForm\"\n            }\n          });\n        }\n\n        return false;\n      };\n    }\n  }]);\n\n  return LinkAnnotationElement;\n}(AnnotationElement);\n\nvar TextAnnotationElement = /*#__PURE__*/function (_AnnotationElement2) {\n  _inherits(TextAnnotationElement, _AnnotationElement2);\n\n  var _super2 = _createSuper(TextAnnotationElement);\n\n  function TextAnnotationElement(parameters) {\n    var _parameters$data$titl, _parameters$data$cont, _parameters$data$rich;\n\n    _classCallCheck(this, TextAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl = parameters.data.titleObj) !== null && _parameters$data$titl !== void 0 && _parameters$data$titl.str || (_parameters$data$cont = parameters.data.contentsObj) !== null && _parameters$data$cont !== void 0 && _parameters$data$cont.str || (_parameters$data$rich = parameters.data.richText) !== null && _parameters$data$rich !== void 0 && _parameters$data$rich.str);\n    return _super2.call(this, parameters, {\n      isRenderable: isRenderable\n    });\n  }\n\n  _createClass(TextAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"textAnnotation\";\n      var image = document.createElement(\"img\");\n      image.style.height = this.container.style.height;\n      image.style.width = this.container.style.width;\n      image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\n      image.alt = \"[{{type}} Annotation]\";\n      image.dataset.l10nId = \"text_annotation_type\";\n      image.dataset.l10nArgs = JSON.stringify({\n        type: this.data.name\n      });\n\n      if (!this.data.hasPopup) {\n        this._createPopup(image, this.data);\n      }\n\n      this.container.appendChild(image);\n      return this.container;\n    }\n  }]);\n\n  return TextAnnotationElement;\n}(AnnotationElement);\n\nvar WidgetAnnotationElement = /*#__PURE__*/function (_AnnotationElement3) {\n  _inherits(WidgetAnnotationElement, _AnnotationElement3);\n\n  var _super3 = _createSuper(WidgetAnnotationElement);\n\n  function WidgetAnnotationElement() {\n    _classCallCheck(this, WidgetAnnotationElement);\n\n    return _super3.apply(this, arguments);\n  }\n\n  _createClass(WidgetAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (this.data.alternativeText) {\n        this.container.title = this.data.alternativeText;\n      }\n\n      return this.container;\n    }\n  }, {\n    key: \"_getKeyModifier\",\n    value: function _getKeyModifier(event) {\n      var _AnnotationElement$pl = AnnotationElement.platform,\n          isWin = _AnnotationElement$pl.isWin,\n          isMac = _AnnotationElement$pl.isMac;\n      return isWin && event.ctrlKey || isMac && event.metaKey;\n    }\n  }, {\n    key: \"_setEventListener\",\n    value: function _setEventListener(element, baseName, eventName, valueGetter) {\n      var _this5 = this;\n\n      if (baseName.includes(\"mouse\")) {\n        element.addEventListener(baseName, function (event) {\n          var _this5$linkService$ev;\n\n          (_this5$linkService$ev = _this5.linkService.eventBus) === null || _this5$linkService$ev === void 0 ? void 0 : _this5$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\n            source: _this5,\n            detail: {\n              id: _this5.data.id,\n              name: eventName,\n              value: valueGetter(event),\n              shift: event.shiftKey,\n              modifier: _this5._getKeyModifier(event)\n            }\n          });\n        });\n      } else {\n        element.addEventListener(baseName, function (event) {\n          var _this5$linkService$ev2;\n\n          (_this5$linkService$ev2 = _this5.linkService.eventBus) === null || _this5$linkService$ev2 === void 0 ? void 0 : _this5$linkService$ev2.dispatch(\"dispatcheventinsandbox\", {\n            source: _this5,\n            detail: {\n              id: _this5.data.id,\n              name: eventName,\n              value: event.target.checked\n            }\n          });\n        });\n      }\n    }\n  }, {\n    key: \"_setEventListeners\",\n    value: function _setEventListeners(element, names, getter) {\n      var _iterator8 = _createForOfIteratorHelper(names),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var _this$data$actions;\n\n          var _step8$value = _slicedToArray(_step8.value, 2),\n              baseName = _step8$value[0],\n              eventName = _step8$value[1];\n\n          if (eventName === \"Action\" || (_this$data$actions = this.data.actions) !== null && _this$data$actions !== void 0 && _this$data$actions[eventName]) {\n            this._setEventListener(element, baseName, eventName, getter);\n          }\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n    }\n  }, {\n    key: \"_setBackgroundColor\",\n    value: function _setBackgroundColor(element) {\n      var color = this.data.backgroundColor || null;\n      element.style.backgroundColor = color === null ? \"transparent\" : _util.Util.makeHexColor(color[0], color[1], color[2]);\n    }\n  }, {\n    key: \"_dispatchEventFromSandbox\",\n    value: function _dispatchEventFromSandbox(actions, jsEvent) {\n      var _this6 = this;\n\n      var setColor = function setColor(jsName, styleName, event) {\n        var color = event.detail[jsName];\n        event.target.style[styleName] = _scripting_utils.ColorConverters[\"\".concat(color[0], \"_HTML\")](color.slice(1));\n      };\n\n      var commonActions = {\n        display: function display(event) {\n          var hidden = event.detail.display % 2 === 1;\n          event.target.style.visibility = hidden ? \"hidden\" : \"visible\";\n\n          _this6.annotationStorage.setValue(_this6.data.id, {\n            hidden: hidden,\n            print: event.detail.display === 0 || event.detail.display === 3\n          });\n        },\n        print: function print(event) {\n          _this6.annotationStorage.setValue(_this6.data.id, {\n            print: event.detail.print\n          });\n        },\n        hidden: function hidden(event) {\n          event.target.style.visibility = event.detail.hidden ? \"hidden\" : \"visible\";\n\n          _this6.annotationStorage.setValue(_this6.data.id, {\n            hidden: event.detail.hidden\n          });\n        },\n        focus: function focus(event) {\n          setTimeout(function () {\n            return event.target.focus({\n              preventScroll: false\n            });\n          }, 0);\n        },\n        userName: function userName(event) {\n          event.target.title = event.detail.userName;\n        },\n        readonly: function readonly(event) {\n          if (event.detail.readonly) {\n            event.target.setAttribute(\"readonly\", \"\");\n          } else {\n            event.target.removeAttribute(\"readonly\");\n          }\n        },\n        required: function required(event) {\n          if (event.detail.required) {\n            event.target.setAttribute(\"required\", \"\");\n          } else {\n            event.target.removeAttribute(\"required\");\n          }\n        },\n        bgColor: function bgColor(event) {\n          setColor(\"bgColor\", \"backgroundColor\", event);\n        },\n        fillColor: function fillColor(event) {\n          setColor(\"fillColor\", \"backgroundColor\", event);\n        },\n        fgColor: function fgColor(event) {\n          setColor(\"fgColor\", \"color\", event);\n        },\n        textColor: function textColor(event) {\n          setColor(\"textColor\", \"color\", event);\n        },\n        borderColor: function borderColor(event) {\n          setColor(\"borderColor\", \"borderColor\", event);\n        },\n        strokeColor: function strokeColor(event) {\n          setColor(\"strokeColor\", \"borderColor\", event);\n        }\n      };\n\n      for (var _i6 = 0, _Object$keys2 = Object.keys(jsEvent.detail); _i6 < _Object$keys2.length; _i6++) {\n        var name = _Object$keys2[_i6];\n        var action = actions[name] || commonActions[name];\n\n        if (action) {\n          action(jsEvent);\n        }\n      }\n    }\n  }]);\n\n  return WidgetAnnotationElement;\n}(AnnotationElement);\n\nvar TextWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem) {\n  _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem);\n\n  var _super4 = _createSuper(TextWidgetAnnotationElement);\n\n  function TextWidgetAnnotationElement(parameters) {\n    _classCallCheck(this, TextWidgetAnnotationElement);\n\n    var isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\n    return _super4.call(this, parameters, {\n      isRenderable: isRenderable\n    });\n  }\n\n  _createClass(TextWidgetAnnotationElement, [{\n    key: \"setPropertyOnSiblings\",\n    value: function setPropertyOnSiblings(base, key, value, keyInStorage) {\n      var storage = this.annotationStorage;\n\n      var _iterator9 = _createForOfIteratorHelper(this._getElementsByName(base.name, base.id)),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var element = _step9.value;\n\n          if (element.domElement) {\n            element.domElement[key] = value;\n          }\n\n          storage.setValue(element.id, _defineProperty({}, keyInStorage, value));\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this7 = this;\n\n      var storage = this.annotationStorage;\n      var id = this.data.id;\n      this.container.className = \"textWidgetAnnotation\";\n      var element = null;\n\n      if (this.renderForms) {\n        var storedData = storage.getValue(id, {\n          value: this.data.fieldValue,\n          valueAsString: this.data.fieldValue\n        });\n        var textContent = storedData.valueAsString || storedData.value || \"\";\n        var elementData = {\n          userValue: null,\n          formattedValue: null,\n          beforeInputSelectionRange: null,\n          beforeInputValue: null\n        };\n\n        if (this.data.multiLine) {\n          element = document.createElement(\"textarea\");\n          element.textContent = textContent;\n        } else {\n          element = document.createElement(\"input\");\n          element.type = \"text\";\n          element.setAttribute(\"value\", textContent);\n        }\n\n        GetElementsByNameSet.add(element);\n        element.disabled = this.data.readOnly;\n        element.name = this.data.fieldName;\n        element.tabIndex = DEFAULT_TAB_INDEX;\n        elementData.userValue = textContent;\n        element.setAttribute(\"id\", id);\n        element.addEventListener(\"input\", function (event) {\n          storage.setValue(id, {\n            value: event.target.value\n          });\n\n          _this7.setPropertyOnSiblings(element, \"value\", event.target.value, \"value\");\n        });\n        element.addEventListener(\"resetform\", function (event) {\n          var defaultValue = _this7.data.defaultFieldValue || \"\";\n          element.value = elementData.userValue = defaultValue;\n          delete elementData.formattedValue;\n        });\n\n        var blurListener = function blurListener(event) {\n          if (elementData.formattedValue) {\n            event.target.value = elementData.formattedValue;\n          }\n\n          event.target.scrollLeft = 0;\n          elementData.beforeInputSelectionRange = null;\n        };\n\n        if (this.enableScripting && this.hasJSActions) {\n          var _this$data$actions2;\n\n          element.addEventListener(\"focus\", function (event) {\n            if (elementData.userValue) {\n              event.target.value = elementData.userValue;\n            }\n          });\n          element.addEventListener(\"updatefromsandbox\", function (jsEvent) {\n            var actions = {\n              value: function value(event) {\n                elementData.userValue = event.detail.value || \"\";\n                storage.setValue(id, {\n                  value: elementData.userValue.toString()\n                });\n\n                if (!elementData.formattedValue) {\n                  event.target.value = elementData.userValue;\n                }\n              },\n              valueAsString: function valueAsString(event) {\n                elementData.formattedValue = event.detail.valueAsString || \"\";\n\n                if (event.target !== document.activeElement) {\n                  event.target.value = elementData.formattedValue;\n                }\n\n                storage.setValue(id, {\n                  formattedValue: elementData.formattedValue\n                });\n              },\n              selRange: function selRange(event) {\n                var _event$detail$selRang = _slicedToArray(event.detail.selRange, 2),\n                    selStart = _event$detail$selRang[0],\n                    selEnd = _event$detail$selRang[1];\n\n                if (selStart >= 0 && selEnd < event.target.value.length) {\n                  event.target.setSelectionRange(selStart, selEnd);\n                }\n              }\n            };\n\n            _this7._dispatchEventFromSandbox(actions, jsEvent);\n          });\n          element.addEventListener(\"keydown\", function (event) {\n            var _this7$linkService$ev;\n\n            elementData.beforeInputValue = event.target.value;\n            var commitKey = -1;\n\n            if (event.key === \"Escape\") {\n              commitKey = 0;\n            } else if (event.key === \"Enter\") {\n              commitKey = 2;\n            } else if (event.key === \"Tab\") {\n              commitKey = 3;\n            }\n\n            if (commitKey === -1) {\n              return;\n            }\n\n            elementData.userValue = event.target.value;\n            (_this7$linkService$ev = _this7.linkService.eventBus) === null || _this7$linkService$ev === void 0 ? void 0 : _this7$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\n              source: _this7,\n              detail: {\n                id: id,\n                name: \"Keystroke\",\n                value: event.target.value,\n                willCommit: true,\n                commitKey: commitKey,\n                selStart: event.target.selectionStart,\n                selEnd: event.target.selectionEnd\n              }\n            });\n          });\n          var _blurListener = blurListener;\n          blurListener = null;\n          element.addEventListener(\"blur\", function (event) {\n            if (_this7._mouseState.isDown) {\n              var _this7$linkService$ev2;\n\n              elementData.userValue = event.target.value;\n              (_this7$linkService$ev2 = _this7.linkService.eventBus) === null || _this7$linkService$ev2 === void 0 ? void 0 : _this7$linkService$ev2.dispatch(\"dispatcheventinsandbox\", {\n                source: _this7,\n                detail: {\n                  id: id,\n                  name: \"Keystroke\",\n                  value: event.target.value,\n                  willCommit: true,\n                  commitKey: 1,\n                  selStart: event.target.selectionStart,\n                  selEnd: event.target.selectionEnd\n                }\n              });\n            }\n\n            _blurListener(event);\n          });\n          element.addEventListener(\"mousedown\", function (event) {\n            elementData.beforeInputValue = event.target.value;\n            elementData.beforeInputSelectionRange = null;\n          });\n          element.addEventListener(\"keyup\", function (event) {\n            if (event.target.selectionStart === event.target.selectionEnd) {\n              elementData.beforeInputSelectionRange = null;\n            }\n          });\n          element.addEventListener(\"select\", function (event) {\n            elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd];\n          });\n\n          if ((_this$data$actions2 = this.data.actions) !== null && _this$data$actions2 !== void 0 && _this$data$actions2.Keystroke) {\n            element.addEventListener(\"input\", function (event) {\n              var _this7$linkService$ev3;\n\n              var selStart = -1;\n              var selEnd = -1;\n\n              if (elementData.beforeInputSelectionRange) {\n                var _elementData$beforeIn = _slicedToArray(elementData.beforeInputSelectionRange, 2);\n\n                selStart = _elementData$beforeIn[0];\n                selEnd = _elementData$beforeIn[1];\n              }\n\n              (_this7$linkService$ev3 = _this7.linkService.eventBus) === null || _this7$linkService$ev3 === void 0 ? void 0 : _this7$linkService$ev3.dispatch(\"dispatcheventinsandbox\", {\n                source: _this7,\n                detail: {\n                  id: id,\n                  name: \"Keystroke\",\n                  value: elementData.beforeInputValue,\n                  change: event.data,\n                  willCommit: false,\n                  selStart: selStart,\n                  selEnd: selEnd\n                }\n              });\n            });\n          }\n\n          this._setEventListeners(element, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\n            return event.target.value;\n          });\n        }\n\n        if (blurListener) {\n          element.addEventListener(\"blur\", blurListener);\n        }\n\n        if (this.data.maxLen !== null) {\n          element.maxLength = this.data.maxLen;\n        }\n\n        if (this.data.comb) {\n          var fieldWidth = this.data.rect[2] - this.data.rect[0];\n          var combWidth = fieldWidth / this.data.maxLen;\n          element.classList.add(\"comb\");\n          element.style.letterSpacing = \"calc(\".concat(combWidth, \"px - 1ch)\");\n        }\n      } else {\n        element = document.createElement(\"div\");\n        element.textContent = this.data.fieldValue;\n        element.style.verticalAlign = \"middle\";\n        element.style.display = \"table-cell\";\n      }\n\n      this._setTextStyle(element);\n\n      this._setBackgroundColor(element);\n\n      this.container.appendChild(element);\n      return this.container;\n    }\n  }, {\n    key: \"_setTextStyle\",\n    value: function _setTextStyle(element) {\n      var TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n      var _this$data$defaultApp = this.data.defaultAppearanceData,\n          fontSize = _this$data$defaultApp.fontSize,\n          fontColor = _this$data$defaultApp.fontColor;\n      var style = element.style;\n\n      if (fontSize) {\n        style.fontSize = \"\".concat(fontSize, \"px\");\n      }\n\n      style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\n\n      if (this.data.textAlignment !== null) {\n        style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n      }\n    }\n  }]);\n\n  return TextWidgetAnnotationElement;\n}(WidgetAnnotationElement);\n\nvar CheckboxWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem2) {\n  _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2);\n\n  var _super5 = _createSuper(CheckboxWidgetAnnotationElement);\n\n  function CheckboxWidgetAnnotationElement(parameters) {\n    _classCallCheck(this, CheckboxWidgetAnnotationElement);\n\n    return _super5.call(this, parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n\n  _createClass(CheckboxWidgetAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var _this8 = this;\n\n      var storage = this.annotationStorage;\n      var data = this.data;\n      var id = data.id;\n      var value = storage.getValue(id, {\n        value: data.exportValue === data.fieldValue\n      }).value;\n\n      if (typeof value === \"string\") {\n        value = value !== \"Off\";\n        storage.setValue(id, {\n          value: value\n        });\n      }\n\n      this.container.className = \"buttonWidgetAnnotation checkBox\";\n      var element = document.createElement(\"input\");\n      GetElementsByNameSet.add(element);\n      element.disabled = data.readOnly;\n      element.type = \"checkbox\";\n      element.name = data.fieldName;\n\n      if (value) {\n        element.setAttribute(\"checked\", true);\n      }\n\n      element.setAttribute(\"id\", id);\n      element.setAttribute(\"exportValue\", data.exportValue);\n      element.tabIndex = DEFAULT_TAB_INDEX;\n      element.addEventListener(\"change\", function (event) {\n        var _event$target = event.target,\n            name = _event$target.name,\n            checked = _event$target.checked;\n\n        var _iterator10 = _createForOfIteratorHelper(_this8._getElementsByName(name, id)),\n            _step10;\n\n        try {\n          for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n            var checkbox = _step10.value;\n            var curChecked = checked && checkbox.exportValue === data.exportValue;\n\n            if (checkbox.domElement) {\n              checkbox.domElement.checked = curChecked;\n            }\n\n            storage.setValue(checkbox.id, {\n              value: curChecked\n            });\n          }\n        } catch (err) {\n          _iterator10.e(err);\n        } finally {\n          _iterator10.f();\n        }\n\n        storage.setValue(id, {\n          value: checked\n        });\n      });\n      element.addEventListener(\"resetform\", function (event) {\n        var defaultValue = data.defaultFieldValue || \"Off\";\n        event.target.checked = defaultValue === data.exportValue;\n      });\n\n      if (this.enableScripting && this.hasJSActions) {\n        element.addEventListener(\"updatefromsandbox\", function (jsEvent) {\n          var actions = {\n            value: function value(event) {\n              event.target.checked = event.detail.value !== \"Off\";\n              storage.setValue(id, {\n                value: event.target.checked\n              });\n            }\n          };\n\n          _this8._dispatchEventFromSandbox(actions, jsEvent);\n        });\n\n        this._setEventListeners(element, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\n          return event.target.checked;\n        });\n      }\n\n      this._setBackgroundColor(element);\n\n      this.container.appendChild(element);\n      return this.container;\n    }\n  }]);\n\n  return CheckboxWidgetAnnotationElement;\n}(WidgetAnnotationElement);\n\nvar RadioButtonWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem3) {\n  _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3);\n\n  var _super6 = _createSuper(RadioButtonWidgetAnnotationElement);\n\n  function RadioButtonWidgetAnnotationElement(parameters) {\n    _classCallCheck(this, RadioButtonWidgetAnnotationElement);\n\n    return _super6.call(this, parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n\n  _createClass(RadioButtonWidgetAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var _this9 = this;\n\n      this.container.className = \"buttonWidgetAnnotation radioButton\";\n      var storage = this.annotationStorage;\n      var data = this.data;\n      var id = data.id;\n      var value = storage.getValue(id, {\n        value: data.fieldValue === data.buttonValue\n      }).value;\n\n      if (typeof value === \"string\") {\n        value = value !== data.buttonValue;\n        storage.setValue(id, {\n          value: value\n        });\n      }\n\n      var element = document.createElement(\"input\");\n      GetElementsByNameSet.add(element);\n      element.disabled = data.readOnly;\n      element.type = \"radio\";\n      element.name = data.fieldName;\n\n      if (value) {\n        element.setAttribute(\"checked\", true);\n      }\n\n      element.setAttribute(\"id\", id);\n      element.tabIndex = DEFAULT_TAB_INDEX;\n      element.addEventListener(\"change\", function (event) {\n        var _event$target2 = event.target,\n            name = _event$target2.name,\n            checked = _event$target2.checked;\n\n        var _iterator11 = _createForOfIteratorHelper(_this9._getElementsByName(name, id)),\n            _step11;\n\n        try {\n          for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n            var radio = _step11.value;\n            storage.setValue(radio.id, {\n              value: false\n            });\n          }\n        } catch (err) {\n          _iterator11.e(err);\n        } finally {\n          _iterator11.f();\n        }\n\n        storage.setValue(id, {\n          value: checked\n        });\n      });\n      element.addEventListener(\"resetform\", function (event) {\n        var defaultValue = data.defaultFieldValue;\n        event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;\n      });\n\n      if (this.enableScripting && this.hasJSActions) {\n        var pdfButtonValue = data.buttonValue;\n        element.addEventListener(\"updatefromsandbox\", function (jsEvent) {\n          var actions = {\n            value: function value(event) {\n              var checked = pdfButtonValue === event.detail.value;\n\n              var _iterator12 = _createForOfIteratorHelper(_this9._getElementsByName(event.target.name)),\n                  _step12;\n\n              try {\n                for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n                  var radio = _step12.value;\n                  var curChecked = checked && radio.id === id;\n\n                  if (radio.domElement) {\n                    radio.domElement.checked = curChecked;\n                  }\n\n                  storage.setValue(radio.id, {\n                    value: curChecked\n                  });\n                }\n              } catch (err) {\n                _iterator12.e(err);\n              } finally {\n                _iterator12.f();\n              }\n            }\n          };\n\n          _this9._dispatchEventFromSandbox(actions, jsEvent);\n        });\n\n        this._setEventListeners(element, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\n          return event.target.checked;\n        });\n      }\n\n      this._setBackgroundColor(element);\n\n      this.container.appendChild(element);\n      return this.container;\n    }\n  }]);\n\n  return RadioButtonWidgetAnnotationElement;\n}(WidgetAnnotationElement);\n\nvar PushButtonWidgetAnnotationElement = /*#__PURE__*/function (_LinkAnnotationElemen) {\n  _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen);\n\n  var _super7 = _createSuper(PushButtonWidgetAnnotationElement);\n\n  function PushButtonWidgetAnnotationElement(parameters) {\n    _classCallCheck(this, PushButtonWidgetAnnotationElement);\n\n    return _super7.call(this, parameters, {\n      ignoreBorder: parameters.data.hasAppearance\n    });\n  }\n\n  _createClass(PushButtonWidgetAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), \"render\", this).call(this);\n\n      container.className = \"buttonWidgetAnnotation pushButton\";\n\n      if (this.data.alternativeText) {\n        container.title = this.data.alternativeText;\n      }\n\n      return container;\n    }\n  }]);\n\n  return PushButtonWidgetAnnotationElement;\n}(LinkAnnotationElement);\n\nvar ChoiceWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem4) {\n  _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4);\n\n  var _super8 = _createSuper(ChoiceWidgetAnnotationElement);\n\n  function ChoiceWidgetAnnotationElement(parameters) {\n    _classCallCheck(this, ChoiceWidgetAnnotationElement);\n\n    return _super8.call(this, parameters, {\n      isRenderable: parameters.renderForms\n    });\n  }\n\n  _createClass(ChoiceWidgetAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var _this10 = this;\n\n      this.container.className = \"choiceWidgetAnnotation\";\n      var storage = this.annotationStorage;\n      var id = this.data.id;\n      storage.getValue(id, {\n        value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined\n      });\n      var fontSize = this.data.defaultAppearanceData.fontSize;\n\n      if (!fontSize) {\n        fontSize = 9;\n      }\n\n      var fontSizeStyle = \"calc(\".concat(fontSize, \"px * var(--zoom-factor))\");\n      var selectElement = document.createElement(\"select\");\n      GetElementsByNameSet.add(selectElement);\n      selectElement.disabled = this.data.readOnly;\n      selectElement.name = this.data.fieldName;\n      selectElement.setAttribute(\"id\", id);\n      selectElement.tabIndex = DEFAULT_TAB_INDEX;\n      selectElement.style.fontSize = \"\".concat(fontSize, \"px\");\n\n      if (!this.data.combo) {\n        selectElement.size = this.data.options.length;\n\n        if (this.data.multiSelect) {\n          selectElement.multiple = true;\n        }\n      }\n\n      selectElement.addEventListener(\"resetform\", function (event) {\n        var defaultValue = _this10.data.defaultFieldValue;\n\n        var _iterator13 = _createForOfIteratorHelper(selectElement.options),\n            _step13;\n\n        try {\n          for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n            var option = _step13.value;\n            option.selected = option.value === defaultValue;\n          }\n        } catch (err) {\n          _iterator13.e(err);\n        } finally {\n          _iterator13.f();\n        }\n      });\n\n      var _iterator14 = _createForOfIteratorHelper(this.data.options),\n          _step14;\n\n      try {\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n          var option = _step14.value;\n          var optionElement = document.createElement(\"option\");\n          optionElement.textContent = option.displayValue;\n          optionElement.value = option.exportValue;\n\n          if (this.data.combo) {\n            optionElement.style.fontSize = fontSizeStyle;\n          }\n\n          if (this.data.fieldValue.includes(option.exportValue)) {\n            optionElement.setAttribute(\"selected\", true);\n          }\n\n          selectElement.appendChild(optionElement);\n        }\n      } catch (err) {\n        _iterator14.e(err);\n      } finally {\n        _iterator14.f();\n      }\n\n      var getValue = function getValue(event, isExport) {\n        var name = isExport ? \"value\" : \"textContent\";\n        var options = event.target.options;\n\n        if (!event.target.multiple) {\n          return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];\n        }\n\n        return Array.prototype.filter.call(options, function (option) {\n          return option.selected;\n        }).map(function (option) {\n          return option[name];\n        });\n      };\n\n      var getItems = function getItems(event) {\n        var options = event.target.options;\n        return Array.prototype.map.call(options, function (option) {\n          return {\n            displayValue: option.textContent,\n            exportValue: option.value\n          };\n        });\n      };\n\n      if (this.enableScripting && this.hasJSActions) {\n        selectElement.addEventListener(\"updatefromsandbox\", function (jsEvent) {\n          var actions = {\n            value: function value(event) {\n              var value = event.detail.value;\n              var values = new Set(Array.isArray(value) ? value : [value]);\n\n              var _iterator15 = _createForOfIteratorHelper(selectElement.options),\n                  _step15;\n\n              try {\n                for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n                  var option = _step15.value;\n                  option.selected = values.has(option.value);\n                }\n              } catch (err) {\n                _iterator15.e(err);\n              } finally {\n                _iterator15.f();\n              }\n\n              storage.setValue(id, {\n                value: getValue(event, true)\n              });\n            },\n            multipleSelection: function multipleSelection(event) {\n              selectElement.multiple = true;\n            },\n            remove: function remove(event) {\n              var options = selectElement.options;\n              var index = event.detail.remove;\n              options[index].selected = false;\n              selectElement.remove(index);\n\n              if (options.length > 0) {\n                var i = Array.prototype.findIndex.call(options, function (option) {\n                  return option.selected;\n                });\n\n                if (i === -1) {\n                  options[0].selected = true;\n                }\n              }\n\n              storage.setValue(id, {\n                value: getValue(event, true),\n                items: getItems(event)\n              });\n            },\n            clear: function clear(event) {\n              while (selectElement.length !== 0) {\n                selectElement.remove(0);\n              }\n\n              storage.setValue(id, {\n                value: null,\n                items: []\n              });\n            },\n            insert: function insert(event) {\n              var _event$detail$insert = event.detail.insert,\n                  index = _event$detail$insert.index,\n                  displayValue = _event$detail$insert.displayValue,\n                  exportValue = _event$detail$insert.exportValue;\n              var optionElement = document.createElement(\"option\");\n              optionElement.textContent = displayValue;\n              optionElement.value = exportValue;\n              selectElement.insertBefore(optionElement, selectElement.children[index]);\n              storage.setValue(id, {\n                value: getValue(event, true),\n                items: getItems(event)\n              });\n            },\n            items: function items(event) {\n              var items = event.detail.items;\n\n              while (selectElement.length !== 0) {\n                selectElement.remove(0);\n              }\n\n              var _iterator16 = _createForOfIteratorHelper(items),\n                  _step16;\n\n              try {\n                for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n                  var item = _step16.value;\n                  var displayValue = item.displayValue,\n                      exportValue = item.exportValue;\n                  var optionElement = document.createElement(\"option\");\n                  optionElement.textContent = displayValue;\n                  optionElement.value = exportValue;\n                  selectElement.appendChild(optionElement);\n                }\n              } catch (err) {\n                _iterator16.e(err);\n              } finally {\n                _iterator16.f();\n              }\n\n              if (selectElement.options.length > 0) {\n                selectElement.options[0].selected = true;\n              }\n\n              storage.setValue(id, {\n                value: getValue(event, true),\n                items: getItems(event)\n              });\n            },\n            indices: function indices(event) {\n              var indices = new Set(event.detail.indices);\n\n              var _iterator17 = _createForOfIteratorHelper(event.target.options),\n                  _step17;\n\n              try {\n                for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n                  var option = _step17.value;\n                  option.selected = indices.has(option.index);\n                }\n              } catch (err) {\n                _iterator17.e(err);\n              } finally {\n                _iterator17.f();\n              }\n\n              storage.setValue(id, {\n                value: getValue(event, true)\n              });\n            },\n            editable: function editable(event) {\n              event.target.disabled = !event.detail.editable;\n            }\n          };\n\n          _this10._dispatchEventFromSandbox(actions, jsEvent);\n        });\n        selectElement.addEventListener(\"input\", function (event) {\n          var _this10$linkService$e;\n\n          var exportValue = getValue(event, true);\n          var value = getValue(event, false);\n          storage.setValue(id, {\n            value: exportValue\n          });\n          (_this10$linkService$e = _this10.linkService.eventBus) === null || _this10$linkService$e === void 0 ? void 0 : _this10$linkService$e.dispatch(\"dispatcheventinsandbox\", {\n            source: _this10,\n            detail: {\n              id: id,\n              name: \"Keystroke\",\n              value: value,\n              changeEx: exportValue,\n              willCommit: true,\n              commitKey: 1,\n              keyDown: false\n            }\n          });\n        });\n\n        this._setEventListeners(selectElement, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"]], function (event) {\n          return event.target.checked;\n        });\n      } else {\n        selectElement.addEventListener(\"input\", function (event) {\n          storage.setValue(id, {\n            value: getValue(event)\n          });\n        });\n      }\n\n      this._setBackgroundColor(selectElement);\n\n      this.container.appendChild(selectElement);\n      return this.container;\n    }\n  }]);\n\n  return ChoiceWidgetAnnotationElement;\n}(WidgetAnnotationElement);\n\nvar PopupAnnotationElement = /*#__PURE__*/function (_AnnotationElement4) {\n  _inherits(PopupAnnotationElement, _AnnotationElement4);\n\n  var _super9 = _createSuper(PopupAnnotationElement);\n\n  function PopupAnnotationElement(parameters) {\n    var _parameters$data$titl2, _parameters$data$cont2, _parameters$data$rich2;\n\n    _classCallCheck(this, PopupAnnotationElement);\n\n    var isRenderable = !!((_parameters$data$titl2 = parameters.data.titleObj) !== null && _parameters$data$titl2 !== void 0 && _parameters$data$titl2.str || (_parameters$data$cont2 = parameters.data.contentsObj) !== null && _parameters$data$cont2 !== void 0 && _parameters$data$cont2.str || (_parameters$data$rich2 = parameters.data.richText) !== null && _parameters$data$rich2 !== void 0 && _parameters$data$rich2.str);\n    return _super9.call(this, parameters, {\n      isRenderable: isRenderable\n    });\n  }\n\n  _createClass(PopupAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var IGNORE_TYPES = [\"Line\", \"Square\", \"Circle\", \"PolyLine\", \"Polygon\", \"Ink\"];\n      this.container.className = \"popupAnnotation\";\n\n      if (IGNORE_TYPES.includes(this.data.parentType)) {\n        return this.container;\n      }\n\n      var selector = \"[data-annotation-id=\\\"\".concat(this.data.parentId, \"\\\"]\");\n      var parentElements = this.layer.querySelectorAll(selector);\n\n      if (parentElements.length === 0) {\n        return this.container;\n      }\n\n      var popup = new PopupElement({\n        container: this.container,\n        trigger: Array.from(parentElements),\n        color: this.data.color,\n        titleObj: this.data.titleObj,\n        modificationDate: this.data.modificationDate,\n        contentsObj: this.data.contentsObj,\n        richText: this.data.richText\n      });\n      var page = this.page;\n\n      var rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]);\n\n      var popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0];\n      var popupTop = rect[1];\n      this.container.style.transformOrigin = \"\".concat(-popupLeft, \"px \").concat(-popupTop, \"px\");\n      this.container.style.left = \"\".concat(popupLeft, \"px\");\n      this.container.style.top = \"\".concat(popupTop, \"px\");\n      this.container.appendChild(popup.render());\n      return this.container;\n    }\n  }]);\n\n  return PopupAnnotationElement;\n}(AnnotationElement);\n\nvar PopupElement = /*#__PURE__*/function () {\n  function PopupElement(parameters) {\n    _classCallCheck(this, PopupElement);\n\n    this.container = parameters.container;\n    this.trigger = parameters.trigger;\n    this.color = parameters.color;\n    this.titleObj = parameters.titleObj;\n    this.modificationDate = parameters.modificationDate;\n    this.contentsObj = parameters.contentsObj;\n    this.richText = parameters.richText;\n    this.hideWrapper = parameters.hideWrapper || false;\n    this.pinned = false;\n  }\n\n  _createClass(PopupElement, [{\n    key: \"render\",\n    value: function render() {\n      var _this$richText, _this$contentsObj;\n\n      var BACKGROUND_ENLIGHT = 0.7;\n      var wrapper = document.createElement(\"div\");\n      wrapper.className = \"popupWrapper\";\n      this.hideElement = this.hideWrapper ? wrapper : this.container;\n      this.hideElement.hidden = true;\n      var popup = document.createElement(\"div\");\n      popup.className = \"popup\";\n      var color = this.color;\n\n      if (color) {\n        var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];\n        var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];\n        var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];\n        popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0);\n      }\n\n      var title = document.createElement(\"h1\");\n      title.dir = this.titleObj.dir;\n      title.textContent = this.titleObj.str;\n      popup.appendChild(title);\n\n      var dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);\n\n      if (dateObject) {\n        var modificationDate = document.createElement(\"span\");\n        modificationDate.className = \"popupDate\";\n        modificationDate.textContent = \"{{date}}, {{time}}\";\n        modificationDate.dataset.l10nId = \"annotation_date_string\";\n        modificationDate.dataset.l10nArgs = JSON.stringify({\n          date: dateObject.toLocaleDateString(),\n          time: dateObject.toLocaleTimeString()\n        });\n        popup.appendChild(modificationDate);\n      }\n\n      if ((_this$richText = this.richText) !== null && _this$richText !== void 0 && _this$richText.str && (!((_this$contentsObj = this.contentsObj) !== null && _this$contentsObj !== void 0 && _this$contentsObj.str) || this.contentsObj.str === this.richText.str)) {\n        _xfa_layer.XfaLayer.render({\n          xfaHtml: this.richText.html,\n          intent: \"richText\",\n          div: popup\n        });\n\n        popup.lastChild.className = \"richText popupContent\";\n      } else {\n        var contents = this._formatContents(this.contentsObj);\n\n        popup.appendChild(contents);\n      }\n\n      if (!Array.isArray(this.trigger)) {\n        this.trigger = [this.trigger];\n      }\n\n      var _iterator18 = _createForOfIteratorHelper(this.trigger),\n          _step18;\n\n      try {\n        for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n          var element = _step18.value;\n          element.addEventListener(\"click\", this._toggle.bind(this));\n          element.addEventListener(\"mouseover\", this._show.bind(this, false));\n          element.addEventListener(\"mouseout\", this._hide.bind(this, false));\n        }\n      } catch (err) {\n        _iterator18.e(err);\n      } finally {\n        _iterator18.f();\n      }\n\n      popup.addEventListener(\"click\", this._hide.bind(this, true));\n      wrapper.appendChild(popup);\n      return wrapper;\n    }\n  }, {\n    key: \"_formatContents\",\n    value: function _formatContents(_ref2) {\n      var str = _ref2.str,\n          dir = _ref2.dir;\n      var p = document.createElement(\"p\");\n      p.className = \"popupContent\";\n      p.dir = dir;\n      var lines = str.split(/(?:\\r\\n?|\\n)/);\n\n      for (var i = 0, ii = lines.length; i < ii; ++i) {\n        var line = lines[i];\n        p.appendChild(document.createTextNode(line));\n\n        if (i < ii - 1) {\n          p.appendChild(document.createElement(\"br\"));\n        }\n      }\n\n      return p;\n    }\n  }, {\n    key: \"_toggle\",\n    value: function _toggle() {\n      if (this.pinned) {\n        this._hide(true);\n      } else {\n        this._show(true);\n      }\n    }\n  }, {\n    key: \"_show\",\n    value: function _show() {\n      var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (pin) {\n        this.pinned = true;\n      }\n\n      if (this.hideElement.hidden) {\n        this.hideElement.hidden = false;\n        this.container.style.zIndex += 1;\n      }\n    }\n  }, {\n    key: \"_hide\",\n    value: function _hide() {\n      var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (unpin) {\n        this.pinned = false;\n      }\n\n      if (!this.hideElement.hidden && !this.pinned) {\n        this.hideElement.hidden = true;\n        this.container.style.zIndex -= 1;\n      }\n    }\n  }]);\n\n  return PopupElement;\n}();\n\nvar FreeTextAnnotationElement = /*#__PURE__*/function (_AnnotationElement5) {\n  _inherits(FreeTextAnnotationElement, _AnnotationElement5);\n\n  var _super10 = _createSuper(FreeTextAnnotationElement);\n\n  function FreeTextAnnotationElement(parameters) {\n    var _parameters$data$titl3, _parameters$data$cont3, _parameters$data$rich3;\n\n    _classCallCheck(this, FreeTextAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl3 = parameters.data.titleObj) !== null && _parameters$data$titl3 !== void 0 && _parameters$data$titl3.str || (_parameters$data$cont3 = parameters.data.contentsObj) !== null && _parameters$data$cont3 !== void 0 && _parameters$data$cont3.str || (_parameters$data$rich3 = parameters.data.richText) !== null && _parameters$data$rich3 !== void 0 && _parameters$data$rich3.str);\n    return _super10.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(FreeTextAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"freeTextAnnotation\";\n\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      return this.container;\n    }\n  }]);\n\n  return FreeTextAnnotationElement;\n}(AnnotationElement);\n\nvar LineAnnotationElement = /*#__PURE__*/function (_AnnotationElement6) {\n  _inherits(LineAnnotationElement, _AnnotationElement6);\n\n  var _super11 = _createSuper(LineAnnotationElement);\n\n  function LineAnnotationElement(parameters) {\n    var _parameters$data$titl4, _parameters$data$cont4, _parameters$data$rich4;\n\n    _classCallCheck(this, LineAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl4 = parameters.data.titleObj) !== null && _parameters$data$titl4 !== void 0 && _parameters$data$titl4.str || (_parameters$data$cont4 = parameters.data.contentsObj) !== null && _parameters$data$cont4 !== void 0 && _parameters$data$cont4.str || (_parameters$data$rich4 = parameters.data.richText) !== null && _parameters$data$rich4 !== void 0 && _parameters$data$rich4.str);\n    return _super11.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(LineAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"lineAnnotation\";\n      var data = this.data;\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      var svg = this.svgFactory.create(width, height);\n      var line = this.svgFactory.createElement(\"svg:line\");\n      line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n      line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n      line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n      line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n      line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n      line.setAttribute(\"stroke\", \"transparent\");\n      line.setAttribute(\"fill\", \"transparent\");\n      svg.appendChild(line);\n      this.container.append(svg);\n\n      this._createPopup(line, data);\n\n      return this.container;\n    }\n  }]);\n\n  return LineAnnotationElement;\n}(AnnotationElement);\n\nvar SquareAnnotationElement = /*#__PURE__*/function (_AnnotationElement7) {\n  _inherits(SquareAnnotationElement, _AnnotationElement7);\n\n  var _super12 = _createSuper(SquareAnnotationElement);\n\n  function SquareAnnotationElement(parameters) {\n    var _parameters$data$titl5, _parameters$data$cont5, _parameters$data$rich5;\n\n    _classCallCheck(this, SquareAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl5 = parameters.data.titleObj) !== null && _parameters$data$titl5 !== void 0 && _parameters$data$titl5.str || (_parameters$data$cont5 = parameters.data.contentsObj) !== null && _parameters$data$cont5 !== void 0 && _parameters$data$cont5.str || (_parameters$data$rich5 = parameters.data.richText) !== null && _parameters$data$rich5 !== void 0 && _parameters$data$rich5.str);\n    return _super12.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(SquareAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"squareAnnotation\";\n      var data = this.data;\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      var svg = this.svgFactory.create(width, height);\n      var borderWidth = data.borderStyle.width;\n      var square = this.svgFactory.createElement(\"svg:rect\");\n      square.setAttribute(\"x\", borderWidth / 2);\n      square.setAttribute(\"y\", borderWidth / 2);\n      square.setAttribute(\"width\", width - borderWidth);\n      square.setAttribute(\"height\", height - borderWidth);\n      square.setAttribute(\"stroke-width\", borderWidth || 1);\n      square.setAttribute(\"stroke\", \"transparent\");\n      square.setAttribute(\"fill\", \"transparent\");\n      svg.appendChild(square);\n      this.container.append(svg);\n\n      this._createPopup(square, data);\n\n      return this.container;\n    }\n  }]);\n\n  return SquareAnnotationElement;\n}(AnnotationElement);\n\nvar CircleAnnotationElement = /*#__PURE__*/function (_AnnotationElement8) {\n  _inherits(CircleAnnotationElement, _AnnotationElement8);\n\n  var _super13 = _createSuper(CircleAnnotationElement);\n\n  function CircleAnnotationElement(parameters) {\n    var _parameters$data$titl6, _parameters$data$cont6, _parameters$data$rich6;\n\n    _classCallCheck(this, CircleAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl6 = parameters.data.titleObj) !== null && _parameters$data$titl6 !== void 0 && _parameters$data$titl6.str || (_parameters$data$cont6 = parameters.data.contentsObj) !== null && _parameters$data$cont6 !== void 0 && _parameters$data$cont6.str || (_parameters$data$rich6 = parameters.data.richText) !== null && _parameters$data$rich6 !== void 0 && _parameters$data$rich6.str);\n    return _super13.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(CircleAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"circleAnnotation\";\n      var data = this.data;\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      var svg = this.svgFactory.create(width, height);\n      var borderWidth = data.borderStyle.width;\n      var circle = this.svgFactory.createElement(\"svg:ellipse\");\n      circle.setAttribute(\"cx\", width / 2);\n      circle.setAttribute(\"cy\", height / 2);\n      circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n      circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n      circle.setAttribute(\"stroke-width\", borderWidth || 1);\n      circle.setAttribute(\"stroke\", \"transparent\");\n      circle.setAttribute(\"fill\", \"transparent\");\n      svg.appendChild(circle);\n      this.container.append(svg);\n\n      this._createPopup(circle, data);\n\n      return this.container;\n    }\n  }]);\n\n  return CircleAnnotationElement;\n}(AnnotationElement);\n\nvar PolylineAnnotationElement = /*#__PURE__*/function (_AnnotationElement9) {\n  _inherits(PolylineAnnotationElement, _AnnotationElement9);\n\n  var _super14 = _createSuper(PolylineAnnotationElement);\n\n  function PolylineAnnotationElement(parameters) {\n    var _parameters$data$titl7, _parameters$data$cont7, _parameters$data$rich7;\n\n    var _this11;\n\n    _classCallCheck(this, PolylineAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl7 = parameters.data.titleObj) !== null && _parameters$data$titl7 !== void 0 && _parameters$data$titl7.str || (_parameters$data$cont7 = parameters.data.contentsObj) !== null && _parameters$data$cont7 !== void 0 && _parameters$data$cont7.str || (_parameters$data$rich7 = parameters.data.richText) !== null && _parameters$data$rich7 !== void 0 && _parameters$data$rich7.str);\n    _this11 = _super14.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n    _this11.containerClassName = \"polylineAnnotation\";\n    _this11.svgElementName = \"svg:polyline\";\n    return _this11;\n  }\n\n  _createClass(PolylineAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = this.containerClassName;\n      var data = this.data;\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      var svg = this.svgFactory.create(width, height);\n      var points = [];\n\n      var _iterator19 = _createForOfIteratorHelper(data.vertices),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var coordinate = _step19.value;\n          var x = coordinate.x - data.rect[0];\n          var y = data.rect[3] - coordinate.y;\n          points.push(x + \",\" + y);\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n\n      points = points.join(\" \");\n      var polyline = this.svgFactory.createElement(this.svgElementName);\n      polyline.setAttribute(\"points\", points);\n      polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n      polyline.setAttribute(\"stroke\", \"transparent\");\n      polyline.setAttribute(\"fill\", \"transparent\");\n      svg.appendChild(polyline);\n      this.container.append(svg);\n\n      this._createPopup(polyline, data);\n\n      return this.container;\n    }\n  }]);\n\n  return PolylineAnnotationElement;\n}(AnnotationElement);\n\nvar PolygonAnnotationElement = /*#__PURE__*/function (_PolylineAnnotationEl) {\n  _inherits(PolygonAnnotationElement, _PolylineAnnotationEl);\n\n  var _super15 = _createSuper(PolygonAnnotationElement);\n\n  function PolygonAnnotationElement(parameters) {\n    var _this12;\n\n    _classCallCheck(this, PolygonAnnotationElement);\n\n    _this12 = _super15.call(this, parameters);\n    _this12.containerClassName = \"polygonAnnotation\";\n    _this12.svgElementName = \"svg:polygon\";\n    return _this12;\n  }\n\n  return PolygonAnnotationElement;\n}(PolylineAnnotationElement);\n\nvar CaretAnnotationElement = /*#__PURE__*/function (_AnnotationElement10) {\n  _inherits(CaretAnnotationElement, _AnnotationElement10);\n\n  var _super16 = _createSuper(CaretAnnotationElement);\n\n  function CaretAnnotationElement(parameters) {\n    var _parameters$data$titl8, _parameters$data$cont8, _parameters$data$rich8;\n\n    _classCallCheck(this, CaretAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl8 = parameters.data.titleObj) !== null && _parameters$data$titl8 !== void 0 && _parameters$data$titl8.str || (_parameters$data$cont8 = parameters.data.contentsObj) !== null && _parameters$data$cont8 !== void 0 && _parameters$data$cont8.str || (_parameters$data$rich8 = parameters.data.richText) !== null && _parameters$data$rich8 !== void 0 && _parameters$data$rich8.str);\n    return _super16.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(CaretAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"caretAnnotation\";\n\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      return this.container;\n    }\n  }]);\n\n  return CaretAnnotationElement;\n}(AnnotationElement);\n\nvar InkAnnotationElement = /*#__PURE__*/function (_AnnotationElement11) {\n  _inherits(InkAnnotationElement, _AnnotationElement11);\n\n  var _super17 = _createSuper(InkAnnotationElement);\n\n  function InkAnnotationElement(parameters) {\n    var _parameters$data$titl9, _parameters$data$cont9, _parameters$data$rich9;\n\n    var _this13;\n\n    _classCallCheck(this, InkAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl9 = parameters.data.titleObj) !== null && _parameters$data$titl9 !== void 0 && _parameters$data$titl9.str || (_parameters$data$cont9 = parameters.data.contentsObj) !== null && _parameters$data$cont9 !== void 0 && _parameters$data$cont9.str || (_parameters$data$rich9 = parameters.data.richText) !== null && _parameters$data$rich9 !== void 0 && _parameters$data$rich9.str);\n    _this13 = _super17.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n    _this13.containerClassName = \"inkAnnotation\";\n    _this13.svgElementName = \"svg:polyline\";\n    return _this13;\n  }\n\n  _createClass(InkAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = this.containerClassName;\n      var data = this.data;\n      var width = data.rect[2] - data.rect[0];\n      var height = data.rect[3] - data.rect[1];\n      var svg = this.svgFactory.create(width, height);\n\n      var _iterator20 = _createForOfIteratorHelper(data.inkLists),\n          _step20;\n\n      try {\n        for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n          var inkList = _step20.value;\n          var points = [];\n\n          var _iterator21 = _createForOfIteratorHelper(inkList),\n              _step21;\n\n          try {\n            for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n              var coordinate = _step21.value;\n              var x = coordinate.x - data.rect[0];\n              var y = data.rect[3] - coordinate.y;\n              points.push(\"\".concat(x, \",\").concat(y));\n            }\n          } catch (err) {\n            _iterator21.e(err);\n          } finally {\n            _iterator21.f();\n          }\n\n          points = points.join(\" \");\n          var polyline = this.svgFactory.createElement(this.svgElementName);\n          polyline.setAttribute(\"points\", points);\n          polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n          polyline.setAttribute(\"stroke\", \"transparent\");\n          polyline.setAttribute(\"fill\", \"transparent\");\n\n          this._createPopup(polyline, data);\n\n          svg.appendChild(polyline);\n        }\n      } catch (err) {\n        _iterator20.e(err);\n      } finally {\n        _iterator20.f();\n      }\n\n      this.container.append(svg);\n      return this.container;\n    }\n  }]);\n\n  return InkAnnotationElement;\n}(AnnotationElement);\n\nvar HighlightAnnotationElement = /*#__PURE__*/function (_AnnotationElement12) {\n  _inherits(HighlightAnnotationElement, _AnnotationElement12);\n\n  var _super18 = _createSuper(HighlightAnnotationElement);\n\n  function HighlightAnnotationElement(parameters) {\n    var _parameters$data$titl10, _parameters$data$cont10, _parameters$data$rich10;\n\n    _classCallCheck(this, HighlightAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl10 = parameters.data.titleObj) !== null && _parameters$data$titl10 !== void 0 && _parameters$data$titl10.str || (_parameters$data$cont10 = parameters.data.contentsObj) !== null && _parameters$data$cont10 !== void 0 && _parameters$data$cont10.str || (_parameters$data$rich10 = parameters.data.richText) !== null && _parameters$data$rich10 !== void 0 && _parameters$data$rich10.str);\n    return _super18.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n\n  _createClass(HighlightAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      if (this.quadrilaterals) {\n        return this._renderQuadrilaterals(\"highlightAnnotation\");\n      }\n\n      this.container.className = \"highlightAnnotation\";\n      return this.container;\n    }\n  }]);\n\n  return HighlightAnnotationElement;\n}(AnnotationElement);\n\nvar UnderlineAnnotationElement = /*#__PURE__*/function (_AnnotationElement13) {\n  _inherits(UnderlineAnnotationElement, _AnnotationElement13);\n\n  var _super19 = _createSuper(UnderlineAnnotationElement);\n\n  function UnderlineAnnotationElement(parameters) {\n    var _parameters$data$titl11, _parameters$data$cont11, _parameters$data$rich11;\n\n    _classCallCheck(this, UnderlineAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl11 = parameters.data.titleObj) !== null && _parameters$data$titl11 !== void 0 && _parameters$data$titl11.str || (_parameters$data$cont11 = parameters.data.contentsObj) !== null && _parameters$data$cont11 !== void 0 && _parameters$data$cont11.str || (_parameters$data$rich11 = parameters.data.richText) !== null && _parameters$data$rich11 !== void 0 && _parameters$data$rich11.str);\n    return _super19.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n\n  _createClass(UnderlineAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      if (this.quadrilaterals) {\n        return this._renderQuadrilaterals(\"underlineAnnotation\");\n      }\n\n      this.container.className = \"underlineAnnotation\";\n      return this.container;\n    }\n  }]);\n\n  return UnderlineAnnotationElement;\n}(AnnotationElement);\n\nvar SquigglyAnnotationElement = /*#__PURE__*/function (_AnnotationElement14) {\n  _inherits(SquigglyAnnotationElement, _AnnotationElement14);\n\n  var _super20 = _createSuper(SquigglyAnnotationElement);\n\n  function SquigglyAnnotationElement(parameters) {\n    var _parameters$data$titl12, _parameters$data$cont12, _parameters$data$rich12;\n\n    _classCallCheck(this, SquigglyAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl12 = parameters.data.titleObj) !== null && _parameters$data$titl12 !== void 0 && _parameters$data$titl12.str || (_parameters$data$cont12 = parameters.data.contentsObj) !== null && _parameters$data$cont12 !== void 0 && _parameters$data$cont12.str || (_parameters$data$rich12 = parameters.data.richText) !== null && _parameters$data$rich12 !== void 0 && _parameters$data$rich12.str);\n    return _super20.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n\n  _createClass(SquigglyAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      if (this.quadrilaterals) {\n        return this._renderQuadrilaterals(\"squigglyAnnotation\");\n      }\n\n      this.container.className = \"squigglyAnnotation\";\n      return this.container;\n    }\n  }]);\n\n  return SquigglyAnnotationElement;\n}(AnnotationElement);\n\nvar StrikeOutAnnotationElement = /*#__PURE__*/function (_AnnotationElement15) {\n  _inherits(StrikeOutAnnotationElement, _AnnotationElement15);\n\n  var _super21 = _createSuper(StrikeOutAnnotationElement);\n\n  function StrikeOutAnnotationElement(parameters) {\n    var _parameters$data$titl13, _parameters$data$cont13, _parameters$data$rich13;\n\n    _classCallCheck(this, StrikeOutAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl13 = parameters.data.titleObj) !== null && _parameters$data$titl13 !== void 0 && _parameters$data$titl13.str || (_parameters$data$cont13 = parameters.data.contentsObj) !== null && _parameters$data$cont13 !== void 0 && _parameters$data$cont13.str || (_parameters$data$rich13 = parameters.data.richText) !== null && _parameters$data$rich13 !== void 0 && _parameters$data$rich13.str);\n    return _super21.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true,\n      createQuadrilaterals: true\n    });\n  }\n\n  _createClass(StrikeOutAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      if (this.quadrilaterals) {\n        return this._renderQuadrilaterals(\"strikeoutAnnotation\");\n      }\n\n      this.container.className = \"strikeoutAnnotation\";\n      return this.container;\n    }\n  }]);\n\n  return StrikeOutAnnotationElement;\n}(AnnotationElement);\n\nvar StampAnnotationElement = /*#__PURE__*/function (_AnnotationElement16) {\n  _inherits(StampAnnotationElement, _AnnotationElement16);\n\n  var _super22 = _createSuper(StampAnnotationElement);\n\n  function StampAnnotationElement(parameters) {\n    var _parameters$data$titl14, _parameters$data$cont14, _parameters$data$rich14;\n\n    _classCallCheck(this, StampAnnotationElement);\n\n    var isRenderable = !!(parameters.data.hasPopup || (_parameters$data$titl14 = parameters.data.titleObj) !== null && _parameters$data$titl14 !== void 0 && _parameters$data$titl14.str || (_parameters$data$cont14 = parameters.data.contentsObj) !== null && _parameters$data$cont14 !== void 0 && _parameters$data$cont14.str || (_parameters$data$rich14 = parameters.data.richText) !== null && _parameters$data$rich14 !== void 0 && _parameters$data$rich14.str);\n    return _super22.call(this, parameters, {\n      isRenderable: isRenderable,\n      ignoreBorder: true\n    });\n  }\n\n  _createClass(StampAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      this.container.className = \"stampAnnotation\";\n\n      if (!this.data.hasPopup) {\n        this._createPopup(null, this.data);\n      }\n\n      return this.container;\n    }\n  }]);\n\n  return StampAnnotationElement;\n}(AnnotationElement);\n\nvar FileAttachmentAnnotationElement = /*#__PURE__*/function (_AnnotationElement17) {\n  _inherits(FileAttachmentAnnotationElement, _AnnotationElement17);\n\n  var _super23 = _createSuper(FileAttachmentAnnotationElement);\n\n  function FileAttachmentAnnotationElement(parameters) {\n    var _this14$linkService$e;\n\n    var _this14;\n\n    _classCallCheck(this, FileAttachmentAnnotationElement);\n\n    _this14 = _super23.call(this, parameters, {\n      isRenderable: true\n    });\n    var _this14$data$file = _this14.data.file,\n        filename = _this14$data$file.filename,\n        content = _this14$data$file.content;\n    _this14.filename = (0, _display_utils.getFilenameFromUrl)(filename);\n    _this14.content = content;\n    (_this14$linkService$e = _this14.linkService.eventBus) === null || _this14$linkService$e === void 0 ? void 0 : _this14$linkService$e.dispatch(\"fileattachmentannotation\", {\n      source: _assertThisInitialized(_this14),\n      id: (0, _util.stringToPDFString)(filename),\n      filename: filename,\n      content: content\n    });\n    return _this14;\n  }\n\n  _createClass(FileAttachmentAnnotationElement, [{\n    key: \"render\",\n    value: function render() {\n      var _this$data$titleObj, _this$data$contentsOb;\n\n      this.container.className = \"fileAttachmentAnnotation\";\n      var trigger = document.createElement(\"div\");\n      trigger.style.height = this.container.style.height;\n      trigger.style.width = this.container.style.width;\n      trigger.addEventListener(\"dblclick\", this._download.bind(this));\n\n      if (!this.data.hasPopup && ((_this$data$titleObj = this.data.titleObj) !== null && _this$data$titleObj !== void 0 && _this$data$titleObj.str || (_this$data$contentsOb = this.data.contentsObj) !== null && _this$data$contentsOb !== void 0 && _this$data$contentsOb.str || this.data.richText)) {\n        this._createPopup(trigger, this.data);\n      }\n\n      this.container.appendChild(trigger);\n      return this.container;\n    }\n  }, {\n    key: \"_download\",\n    value: function _download() {\n      var _this$downloadManager;\n\n      (_this$downloadManager = this.downloadManager) === null || _this$downloadManager === void 0 ? void 0 : _this$downloadManager.openOrDownloadData(this.container, this.content, this.filename);\n    }\n  }]);\n\n  return FileAttachmentAnnotationElement;\n}(AnnotationElement);\n\nvar AnnotationLayer = /*#__PURE__*/function () {\n  function AnnotationLayer() {\n    _classCallCheck(this, AnnotationLayer);\n  }\n\n  _createClass(AnnotationLayer, null, [{\n    key: \"render\",\n    value: function render(parameters) {\n      var sortedAnnotations = [],\n          popupAnnotations = [];\n\n      var _iterator22 = _createForOfIteratorHelper(parameters.annotations),\n          _step22;\n\n      try {\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n          var _data = _step22.value;\n\n          if (!_data) {\n            continue;\n          }\n\n          if (_data.annotationType === _util.AnnotationType.POPUP) {\n            popupAnnotations.push(_data);\n            continue;\n          }\n\n          sortedAnnotations.push(_data);\n        }\n      } catch (err) {\n        _iterator22.e(err);\n      } finally {\n        _iterator22.f();\n      }\n\n      if (popupAnnotations.length) {\n        sortedAnnotations.push.apply(sortedAnnotations, popupAnnotations);\n      }\n\n      var div = parameters.div;\n\n      for (var _i7 = 0, _sortedAnnotations = sortedAnnotations; _i7 < _sortedAnnotations.length; _i7++) {\n        var data = _sortedAnnotations[_i7];\n        var element = AnnotationElementFactory.create({\n          data: data,\n          layer: div,\n          page: parameters.page,\n          viewport: parameters.viewport,\n          linkService: parameters.linkService,\n          downloadManager: parameters.downloadManager,\n          imageResourcesPath: parameters.imageResourcesPath || \"\",\n          renderForms: parameters.renderForms !== false,\n          svgFactory: new _display_utils.DOMSVGFactory(),\n          annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(),\n          enableScripting: parameters.enableScripting,\n          hasJSActions: parameters.hasJSActions,\n          fieldObjects: parameters.fieldObjects,\n          mouseState: parameters.mouseState || {\n            isDown: false\n          }\n        });\n\n        if (element.isRenderable) {\n          var rendered = element.render();\n\n          if (data.hidden) {\n            rendered.style.visibility = \"hidden\";\n          }\n\n          if (Array.isArray(rendered)) {\n            var _iterator23 = _createForOfIteratorHelper(rendered),\n                _step23;\n\n            try {\n              for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n                var renderedElement = _step23.value;\n                div.appendChild(renderedElement);\n              }\n            } catch (err) {\n              _iterator23.e(err);\n            } finally {\n              _iterator23.f();\n            }\n          } else {\n            if (element instanceof PopupAnnotationElement) {\n              div.prepend(rendered);\n            } else {\n              div.appendChild(rendered);\n            }\n          }\n        }\n      }\n\n      _classStaticPrivateMethodGet(this, AnnotationLayer, _setAnnotationCanvasMap).call(this, div, parameters.annotationCanvasMap);\n    }\n  }, {\n    key: \"update\",\n    value: function update(parameters) {\n      var page = parameters.page,\n          viewport = parameters.viewport,\n          annotations = parameters.annotations,\n          annotationCanvasMap = parameters.annotationCanvasMap,\n          div = parameters.div;\n      var transform = viewport.transform;\n      var matrix = \"matrix(\".concat(transform.join(\",\"), \")\");\n      var scale, ownMatrix;\n\n      var _iterator24 = _createForOfIteratorHelper(annotations),\n          _step24;\n\n      try {\n        for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n          var data = _step24.value;\n          var elements = div.querySelectorAll(\"[data-annotation-id=\\\"\".concat(data.id, \"\\\"]\"));\n\n          if (elements) {\n            var _iterator25 = _createForOfIteratorHelper(elements),\n                _step25;\n\n            try {\n              for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n                var element = _step25.value;\n\n                if (data.hasOwnCanvas) {\n                  var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\n\n                  if (!ownMatrix) {\n                    scale = Math.abs(transform[0] || transform[1]);\n                    var ownTransform = transform.slice();\n\n                    for (var i = 0; i < 4; i++) {\n                      ownTransform[i] = Math.sign(ownTransform[i]);\n                    }\n\n                    ownMatrix = \"matrix(\".concat(ownTransform.join(\",\"), \")\");\n                  }\n\n                  var left = rect[0] * scale;\n                  var top = rect[1] * scale;\n                  element.style.left = \"\".concat(left, \"px\");\n                  element.style.top = \"\".concat(top, \"px\");\n                  element.style.transformOrigin = \"\".concat(-left, \"px \").concat(-top, \"px\");\n                  element.style.transform = ownMatrix;\n                } else {\n                  element.style.transform = matrix;\n                }\n              }\n            } catch (err) {\n              _iterator25.e(err);\n            } finally {\n              _iterator25.f();\n            }\n          }\n        }\n      } catch (err) {\n        _iterator24.e(err);\n      } finally {\n        _iterator24.f();\n      }\n\n      _classStaticPrivateMethodGet(this, AnnotationLayer, _setAnnotationCanvasMap).call(this, div, annotationCanvasMap);\n\n      div.hidden = false;\n    }\n  }]);\n\n  return AnnotationLayer;\n}();\n\nexports.AnnotationLayer = AnnotationLayer;\n\nfunction _setAnnotationCanvasMap(div, annotationCanvasMap) {\n  if (!annotationCanvasMap) {\n    return;\n  }\n\n  var _iterator26 = _createForOfIteratorHelper(annotationCanvasMap),\n      _step26;\n\n  try {\n    for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\n      var _step26$value = _slicedToArray(_step26.value, 2),\n          id = _step26$value[0],\n          canvas = _step26$value[1];\n\n      var element = div.querySelector(\"[data-annotation-id=\\\"\".concat(id, \"\\\"]\"));\n\n      if (!element) {\n        continue;\n      }\n\n      var firstChild = element.firstChild;\n\n      if (firstChild.nodeName === \"CANVAS\") {\n        element.replaceChild(canvas, firstChild);\n      } else {\n        element.insertBefore(canvas, firstChild);\n      }\n    }\n  } catch (err) {\n    _iterator26.e(err);\n  } finally {\n    _iterator26.f();\n  }\n\n  annotationCanvasMap.clear();\n}\n\n/***/ }),\n/* 149 */\n/***/ ((__unused_webpack_module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.ColorConverters = void 0;\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction makeColorComp(n) {\n  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, \"0\");\n}\n\nvar ColorConverters = /*#__PURE__*/function () {\n  function ColorConverters() {\n    _classCallCheck(this, ColorConverters);\n  }\n\n  _createClass(ColorConverters, null, [{\n    key: \"CMYK_G\",\n    value: function CMYK_G(_ref) {\n      var _ref2 = _slicedToArray(_ref, 4),\n          c = _ref2[0],\n          y = _ref2[1],\n          m = _ref2[2],\n          k = _ref2[3];\n\n      return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n    }\n  }, {\n    key: \"G_CMYK\",\n    value: function G_CMYK(_ref3) {\n      var _ref4 = _slicedToArray(_ref3, 1),\n          g = _ref4[0];\n\n      return [\"CMYK\", 0, 0, 0, 1 - g];\n    }\n  }, {\n    key: \"G_RGB\",\n    value: function G_RGB(_ref5) {\n      var _ref6 = _slicedToArray(_ref5, 1),\n          g = _ref6[0];\n\n      return [\"RGB\", g, g, g];\n    }\n  }, {\n    key: \"G_HTML\",\n    value: function G_HTML(_ref7) {\n      var _ref8 = _slicedToArray(_ref7, 1),\n          g = _ref8[0];\n\n      var G = makeColorComp(g);\n      return \"#\".concat(G).concat(G).concat(G);\n    }\n  }, {\n    key: \"RGB_G\",\n    value: function RGB_G(_ref9) {\n      var _ref10 = _slicedToArray(_ref9, 3),\n          r = _ref10[0],\n          g = _ref10[1],\n          b = _ref10[2];\n\n      return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n    }\n  }, {\n    key: \"RGB_HTML\",\n    value: function RGB_HTML(_ref11) {\n      var _ref12 = _slicedToArray(_ref11, 3),\n          r = _ref12[0],\n          g = _ref12[1],\n          b = _ref12[2];\n\n      var R = makeColorComp(r);\n      var G = makeColorComp(g);\n      var B = makeColorComp(b);\n      return \"#\".concat(R).concat(G).concat(B);\n    }\n  }, {\n    key: \"T_HTML\",\n    value: function T_HTML() {\n      return \"#00000000\";\n    }\n  }, {\n    key: \"CMYK_RGB\",\n    value: function CMYK_RGB(_ref13) {\n      var _ref14 = _slicedToArray(_ref13, 4),\n          c = _ref14[0],\n          y = _ref14[1],\n          m = _ref14[2],\n          k = _ref14[3];\n\n      return [\"RGB\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\n    }\n  }, {\n    key: \"CMYK_HTML\",\n    value: function CMYK_HTML(components) {\n      return this.RGB_HTML(this.CMYK_RGB(components));\n    }\n  }, {\n    key: \"RGB_CMYK\",\n    value: function RGB_CMYK(_ref15) {\n      var _ref16 = _slicedToArray(_ref15, 3),\n          r = _ref16[0],\n          g = _ref16[1],\n          b = _ref16[2];\n\n      var c = 1 - r;\n      var m = 1 - g;\n      var y = 1 - b;\n      var k = Math.min(c, m, y);\n      return [\"CMYK\", c, m, y, k];\n    }\n  }]);\n\n  return ColorConverters;\n}();\n\nexports.ColorConverters = ColorConverters;\n\n/***/ }),\n/* 150 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.XfaLayer = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _xfa_text = __w_pdfjs_require__(147);\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar XfaLayer = /*#__PURE__*/function () {\n  function XfaLayer() {\n    _classCallCheck(this, XfaLayer);\n  }\n\n  _createClass(XfaLayer, null, [{\n    key: \"setupStorage\",\n    value: function setupStorage(html, id, element, storage, intent) {\n      var storedData = storage.getValue(id, {\n        value: null\n      });\n\n      switch (element.name) {\n        case \"textarea\":\n          if (storedData.value !== null) {\n            html.textContent = storedData.value;\n          }\n\n          if (intent === \"print\") {\n            break;\n          }\n\n          html.addEventListener(\"input\", function (event) {\n            storage.setValue(id, {\n              value: event.target.value\n            });\n          });\n          break;\n\n        case \"input\":\n          if (element.attributes.type === \"radio\" || element.attributes.type === \"checkbox\") {\n            if (storedData.value === element.attributes.xfaOn) {\n              html.setAttribute(\"checked\", true);\n            } else if (storedData.value === element.attributes.xfaOff) {\n              html.removeAttribute(\"checked\");\n            }\n\n            if (intent === \"print\") {\n              break;\n            }\n\n            html.addEventListener(\"change\", function (event) {\n              storage.setValue(id, {\n                value: event.target.checked ? event.target.getAttribute(\"xfaOn\") : event.target.getAttribute(\"xfaOff\")\n              });\n            });\n          } else {\n            if (storedData.value !== null) {\n              html.setAttribute(\"value\", storedData.value);\n            }\n\n            if (intent === \"print\") {\n              break;\n            }\n\n            html.addEventListener(\"input\", function (event) {\n              storage.setValue(id, {\n                value: event.target.value\n              });\n            });\n          }\n\n          break;\n\n        case \"select\":\n          if (storedData.value !== null) {\n            var _iterator = _createForOfIteratorHelper(element.children),\n                _step;\n\n            try {\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                var option = _step.value;\n\n                if (option.attributes.value === storedData.value) {\n                  option.attributes.selected = true;\n                }\n              }\n            } catch (err) {\n              _iterator.e(err);\n            } finally {\n              _iterator.f();\n            }\n          }\n\n          html.addEventListener(\"input\", function (event) {\n            var options = event.target.options;\n            var value = options.selectedIndex === -1 ? \"\" : options[options.selectedIndex].value;\n            storage.setValue(id, {\n              value: value\n            });\n          });\n          break;\n      }\n    }\n  }, {\n    key: \"setAttributes\",\n    value: function setAttributes(_ref) {\n      var html = _ref.html,\n          element = _ref.element,\n          _ref$storage = _ref.storage,\n          storage = _ref$storage === void 0 ? null : _ref$storage,\n          intent = _ref.intent,\n          linkService = _ref.linkService;\n      var attributes = element.attributes;\n      var isHTMLAnchorElement = html instanceof HTMLAnchorElement;\n\n      if (attributes.type === \"radio\") {\n        attributes.name = \"\".concat(attributes.name, \"-\").concat(intent);\n      }\n\n      for (var _i = 0, _Object$entries = Object.entries(attributes); _i < _Object$entries.length; _i++) {\n        var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n            key = _Object$entries$_i[0],\n            value = _Object$entries$_i[1];\n\n        if (value === null || value === undefined || key === \"dataId\") {\n          continue;\n        }\n\n        if (key !== \"style\") {\n          if (key === \"textContent\") {\n            html.textContent = value;\n          } else if (key === \"class\") {\n            if (value.length) {\n              html.setAttribute(key, value.join(\" \"));\n            }\n          } else {\n            if (isHTMLAnchorElement && (key === \"href\" || key === \"newWindow\")) {\n              continue;\n            }\n\n            html.setAttribute(key, value);\n          }\n        } else {\n          Object.assign(html.style, value);\n        }\n      }\n\n      if (isHTMLAnchorElement) {\n        var _linkService$addLinkA;\n\n        if (!linkService.addLinkAttributes) {\n          (0, _util.warn)(\"XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance.\");\n        }\n\n        (_linkService$addLinkA = linkService.addLinkAttributes) === null || _linkService$addLinkA === void 0 ? void 0 : _linkService$addLinkA.call(linkService, html, attributes.href, attributes.newWindow);\n      }\n\n      if (storage && attributes.dataId) {\n        this.setupStorage(html, attributes.dataId, element, storage);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render(parameters) {\n      var storage = parameters.annotationStorage;\n      var linkService = parameters.linkService;\n      var root = parameters.xfaHtml;\n      var intent = parameters.intent || \"display\";\n      var rootHtml = document.createElement(root.name);\n\n      if (root.attributes) {\n        this.setAttributes({\n          html: rootHtml,\n          element: root,\n          intent: intent,\n          linkService: linkService\n        });\n      }\n\n      var stack = [[root, -1, rootHtml]];\n      var rootDiv = parameters.div;\n      rootDiv.appendChild(rootHtml);\n\n      if (parameters.viewport) {\n        var transform = \"matrix(\".concat(parameters.viewport.transform.join(\",\"), \")\");\n        rootDiv.style.transform = transform;\n      }\n\n      if (intent !== \"richText\") {\n        rootDiv.setAttribute(\"class\", \"xfaLayer xfaFont\");\n      }\n\n      var textDivs = [];\n\n      while (stack.length > 0) {\n        var _child$attributes;\n\n        var _stack = _slicedToArray(stack[stack.length - 1], 3),\n            parent = _stack[0],\n            i = _stack[1],\n            html = _stack[2];\n\n        if (i + 1 === parent.children.length) {\n          stack.pop();\n          continue;\n        }\n\n        var child = parent.children[++stack[stack.length - 1][1]];\n\n        if (child === null) {\n          continue;\n        }\n\n        var name = child.name;\n\n        if (name === \"#text\") {\n          var node = document.createTextNode(child.value);\n          textDivs.push(node);\n          html.appendChild(node);\n          continue;\n        }\n\n        var childHtml = void 0;\n\n        if (child !== null && child !== void 0 && (_child$attributes = child.attributes) !== null && _child$attributes !== void 0 && _child$attributes.xmlns) {\n          childHtml = document.createElementNS(child.attributes.xmlns, name);\n        } else {\n          childHtml = document.createElement(name);\n        }\n\n        html.appendChild(childHtml);\n\n        if (child.attributes) {\n          this.setAttributes({\n            html: childHtml,\n            element: child,\n            storage: storage,\n            intent: intent,\n            linkService: linkService\n          });\n        }\n\n        if (child.children && child.children.length > 0) {\n          stack.push([child, -1, childHtml]);\n        } else if (child.value) {\n          var _node = document.createTextNode(child.value);\n\n          if (_xfa_text.XfaText.shouldBuildText(name)) {\n            textDivs.push(_node);\n          }\n\n          childHtml.appendChild(_node);\n        }\n      }\n\n      var _iterator2 = _createForOfIteratorHelper(rootDiv.querySelectorAll(\".xfaNonInteractive input, .xfaNonInteractive textarea\")),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var el = _step2.value;\n          el.setAttribute(\"readOnly\", true);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      return {\n        textDivs: textDivs\n      };\n    }\n  }, {\n    key: \"update\",\n    value: function update(parameters) {\n      var transform = \"matrix(\".concat(parameters.viewport.transform.join(\",\"), \")\");\n      parameters.div.style.transform = transform;\n      parameters.div.hidden = false;\n    }\n  }]);\n\n  return XfaLayer;\n}();\n\nexports.XfaLayer = XfaLayer;\n\n/***/ }),\n/* 151 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.renderTextLayer = renderTextLayer;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar MAX_TEXT_DIVS_TO_RENDER = 100000;\nvar DEFAULT_FONT_SIZE = 30;\nvar DEFAULT_FONT_ASCENT = 0.8;\nvar ascentCache = new Map();\nvar AllWhitespaceRegexp = /^\\s+$/g;\n\nfunction getAscent(fontFamily, ctx) {\n  var cachedAscent = ascentCache.get(fontFamily);\n\n  if (cachedAscent) {\n    return cachedAscent;\n  }\n\n  ctx.save();\n  ctx.font = \"\".concat(DEFAULT_FONT_SIZE, \"px \").concat(fontFamily);\n  var metrics = ctx.measureText(\"\");\n  var ascent = metrics.fontBoundingBoxAscent;\n  var descent = Math.abs(metrics.fontBoundingBoxDescent);\n\n  if (ascent) {\n    ctx.restore();\n    var ratio = ascent / (ascent + descent);\n    ascentCache.set(fontFamily, ratio);\n    return ratio;\n  }\n\n  ctx.strokeStyle = \"red\";\n  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n  ctx.strokeText(\"g\", 0, 0);\n  var pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;\n  descent = 0;\n\n  for (var i = pixels.length - 1 - 3; i >= 0; i -= 4) {\n    if (pixels[i] > 0) {\n      descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);\n      break;\n    }\n  }\n\n  ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);\n  ctx.strokeText(\"A\", 0, DEFAULT_FONT_SIZE);\n  pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;\n  ascent = 0;\n\n  for (var _i = 0, ii = pixels.length; _i < ii; _i += 4) {\n    if (pixels[_i] > 0) {\n      ascent = DEFAULT_FONT_SIZE - Math.floor(_i / 4 / DEFAULT_FONT_SIZE);\n      break;\n    }\n  }\n\n  ctx.restore();\n\n  if (ascent) {\n    var _ratio = ascent / (ascent + descent);\n\n    ascentCache.set(fontFamily, _ratio);\n    return _ratio;\n  }\n\n  ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);\n  return DEFAULT_FONT_ASCENT;\n}\n\nfunction appendText(task, geom, styles, ctx) {\n  var textDiv = document.createElement(\"span\");\n  var textDivProperties = task._enhanceTextSelection ? {\n    angle: 0,\n    canvasWidth: 0,\n    hasText: geom.str !== \"\",\n    hasEOL: geom.hasEOL,\n    originalTransform: null,\n    paddingBottom: 0,\n    paddingLeft: 0,\n    paddingRight: 0,\n    paddingTop: 0,\n    scale: 1\n  } : {\n    angle: 0,\n    canvasWidth: 0,\n    hasText: geom.str !== \"\",\n    hasEOL: geom.hasEOL\n  };\n\n  task._textDivs.push(textDiv);\n\n  var tx = _util.Util.transform(task._viewport.transform, geom.transform);\n\n  var angle = Math.atan2(tx[1], tx[0]);\n  var style = styles[geom.fontName];\n\n  if (style.vertical) {\n    angle += Math.PI / 2;\n  }\n\n  var fontHeight = Math.hypot(tx[2], tx[3]);\n  var fontAscent = fontHeight * getAscent(style.fontFamily, ctx);\n  var left, top;\n\n  if (angle === 0) {\n    left = tx[4];\n    top = tx[5] - fontAscent;\n  } else {\n    left = tx[4] + fontAscent * Math.sin(angle);\n    top = tx[5] - fontAscent * Math.cos(angle);\n  }\n\n  textDiv.style.left = \"\".concat(left, \"px\");\n  textDiv.style.top = \"\".concat(top, \"px\");\n  textDiv.style.fontSize = \"\".concat(fontHeight, \"px\");\n  textDiv.style.fontFamily = style.fontFamily;\n  textDiv.setAttribute(\"role\", \"presentation\");\n  textDiv.textContent = geom.str;\n  textDiv.dir = geom.dir;\n\n  if (task._fontInspectorEnabled) {\n    textDiv.dataset.fontName = geom.fontName;\n  }\n\n  if (angle !== 0) {\n    textDivProperties.angle = angle * (180 / Math.PI);\n  }\n\n  var shouldScaleText = false;\n\n  if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) {\n    shouldScaleText = true;\n  } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n    var absScaleX = Math.abs(geom.transform[0]),\n        absScaleY = Math.abs(geom.transform[3]);\n\n    if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\n      shouldScaleText = true;\n    }\n  }\n\n  if (shouldScaleText) {\n    if (style.vertical) {\n      textDivProperties.canvasWidth = geom.height * task._viewport.scale;\n    } else {\n      textDivProperties.canvasWidth = geom.width * task._viewport.scale;\n    }\n  }\n\n  task._textDivProperties.set(textDiv, textDivProperties);\n\n  if (task._textContentStream) {\n    task._layoutText(textDiv);\n  }\n\n  if (task._enhanceTextSelection && textDivProperties.hasText) {\n    var angleCos = 1,\n        angleSin = 0;\n\n    if (angle !== 0) {\n      angleCos = Math.cos(angle);\n      angleSin = Math.sin(angle);\n    }\n\n    var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;\n    var divHeight = fontHeight;\n    var m, b;\n\n    if (angle !== 0) {\n      m = [angleCos, angleSin, -angleSin, angleCos, left, top];\n      b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);\n    } else {\n      b = [left, top, left + divWidth, top + divHeight];\n    }\n\n    task._bounds.push({\n      left: b[0],\n      top: b[1],\n      right: b[2],\n      bottom: b[3],\n      div: textDiv,\n      size: [divWidth, divHeight],\n      m: m\n    });\n  }\n}\n\nfunction render(task) {\n  if (task._canceled) {\n    return;\n  }\n\n  var textDivs = task._textDivs;\n  var capability = task._capability;\n  var textDivsLength = textDivs.length;\n\n  if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {\n    task._renderingDone = true;\n    capability.resolve();\n    return;\n  }\n\n  if (!task._textContentStream) {\n    for (var i = 0; i < textDivsLength; i++) {\n      task._layoutText(textDivs[i]);\n    }\n  }\n\n  task._renderingDone = true;\n  capability.resolve();\n}\n\nfunction findPositiveMin(ts, offset, count) {\n  var result = 0;\n\n  for (var i = 0; i < count; i++) {\n    var t = ts[offset++];\n\n    if (t > 0) {\n      result = result ? Math.min(t, result) : t;\n    }\n  }\n\n  return result;\n}\n\nfunction expand(task) {\n  var bounds = task._bounds;\n  var viewport = task._viewport;\n  var expanded = expandBounds(viewport.width, viewport.height, bounds);\n\n  for (var i = 0; i < expanded.length; i++) {\n    var div = bounds[i].div;\n\n    var divProperties = task._textDivProperties.get(div);\n\n    if (divProperties.angle === 0) {\n      divProperties.paddingLeft = bounds[i].left - expanded[i].left;\n      divProperties.paddingTop = bounds[i].top - expanded[i].top;\n      divProperties.paddingRight = expanded[i].right - bounds[i].right;\n      divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;\n\n      task._textDivProperties.set(div, divProperties);\n\n      continue;\n    }\n\n    var e = expanded[i],\n        b = bounds[i];\n    var m = b.m,\n        c = m[0],\n        s = m[1];\n    var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];\n    var ts = new Float64Array(64);\n\n    for (var j = 0, jj = points.length; j < jj; j++) {\n      var t = _util.Util.applyTransform(points[j], m);\n\n      ts[j + 0] = c && (e.left - t[0]) / c;\n      ts[j + 4] = s && (e.top - t[1]) / s;\n      ts[j + 8] = c && (e.right - t[0]) / c;\n      ts[j + 12] = s && (e.bottom - t[1]) / s;\n      ts[j + 16] = s && (e.left - t[0]) / -s;\n      ts[j + 20] = c && (e.top - t[1]) / c;\n      ts[j + 24] = s && (e.right - t[0]) / -s;\n      ts[j + 28] = c && (e.bottom - t[1]) / c;\n      ts[j + 32] = c && (e.left - t[0]) / -c;\n      ts[j + 36] = s && (e.top - t[1]) / -s;\n      ts[j + 40] = c && (e.right - t[0]) / -c;\n      ts[j + 44] = s && (e.bottom - t[1]) / -s;\n      ts[j + 48] = s && (e.left - t[0]) / s;\n      ts[j + 52] = c && (e.top - t[1]) / -c;\n      ts[j + 56] = s && (e.right - t[0]) / s;\n      ts[j + 60] = c && (e.bottom - t[1]) / -c;\n    }\n\n    var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));\n    divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;\n    divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;\n    divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;\n    divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;\n\n    task._textDivProperties.set(div, divProperties);\n  }\n}\n\nfunction expandBounds(width, height, boxes) {\n  var bounds = boxes.map(function (box, i) {\n    return {\n      x1: box.left,\n      y1: box.top,\n      x2: box.right,\n      y2: box.bottom,\n      index: i,\n      x1New: undefined,\n      x2New: undefined\n    };\n  });\n  expandBoundsLTR(width, bounds);\n  var expanded = new Array(boxes.length);\n\n  var _iterator = _createForOfIteratorHelper(bounds),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var b = _step.value;\n      var i = b.index;\n      expanded[i] = {\n        left: b.x1New,\n        top: 0,\n        right: b.x2New,\n        bottom: 0\n      };\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  boxes.map(function (box, i) {\n    var e = expanded[i],\n        b = bounds[i];\n    b.x1 = box.top;\n    b.y1 = width - e.right;\n    b.x2 = box.bottom;\n    b.y2 = width - e.left;\n    b.index = i;\n    b.x1New = undefined;\n    b.x2New = undefined;\n  });\n  expandBoundsLTR(height, bounds);\n\n  var _iterator2 = _createForOfIteratorHelper(bounds),\n      _step2;\n\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var _b = _step2.value;\n      var _i2 = _b.index;\n      expanded[_i2].top = _b.x1New;\n      expanded[_i2].bottom = _b.x2New;\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n\n  return expanded;\n}\n\nfunction expandBoundsLTR(width, bounds) {\n  bounds.sort(function (a, b) {\n    return a.x1 - b.x1 || a.index - b.index;\n  });\n  var fakeBoundary = {\n    x1: -Infinity,\n    y1: -Infinity,\n    x2: 0,\n    y2: Infinity,\n    index: -1,\n    x1New: 0,\n    x2New: 0\n  };\n  var horizon = [{\n    start: -Infinity,\n    end: Infinity,\n    boundary: fakeBoundary\n  }];\n\n  var _iterator3 = _createForOfIteratorHelper(bounds),\n      _step3;\n\n  try {\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n      var boundary = _step3.value;\n      var i = 0;\n\n      while (i < horizon.length && horizon[i].end <= boundary.y1) {\n        i++;\n      }\n\n      var j = horizon.length - 1;\n\n      while (j >= 0 && horizon[j].start >= boundary.y2) {\n        j--;\n      }\n\n      var _horizonPart = void 0,\n          _affectedBoundary = void 0;\n\n      var q = void 0,\n          k = void 0,\n          maxXNew = -Infinity;\n\n      for (q = i; q <= j; q++) {\n        _horizonPart = horizon[q];\n        _affectedBoundary = _horizonPart.boundary;\n        var xNew = void 0;\n\n        if (_affectedBoundary.x2 > boundary.x1) {\n          xNew = _affectedBoundary.index > boundary.index ? _affectedBoundary.x1New : boundary.x1;\n        } else if (_affectedBoundary.x2New === undefined) {\n          xNew = (_affectedBoundary.x2 + boundary.x1) / 2;\n        } else {\n          xNew = _affectedBoundary.x2New;\n        }\n\n        if (xNew > maxXNew) {\n          maxXNew = xNew;\n        }\n      }\n\n      boundary.x1New = maxXNew;\n\n      for (q = i; q <= j; q++) {\n        _horizonPart = horizon[q];\n        _affectedBoundary = _horizonPart.boundary;\n\n        if (_affectedBoundary.x2New === undefined) {\n          if (_affectedBoundary.x2 > boundary.x1) {\n            if (_affectedBoundary.index > boundary.index) {\n              _affectedBoundary.x2New = _affectedBoundary.x2;\n            }\n          } else {\n            _affectedBoundary.x2New = maxXNew;\n          }\n        } else if (_affectedBoundary.x2New > maxXNew) {\n          _affectedBoundary.x2New = Math.max(maxXNew, _affectedBoundary.x2);\n        }\n      }\n\n      var changedHorizon = [];\n      var lastBoundary = null;\n\n      for (q = i; q <= j; q++) {\n        _horizonPart = horizon[q];\n        _affectedBoundary = _horizonPart.boundary;\n        var useBoundary = _affectedBoundary.x2 > boundary.x2 ? _affectedBoundary : boundary;\n\n        if (lastBoundary === useBoundary) {\n          changedHorizon[changedHorizon.length - 1].end = _horizonPart.end;\n        } else {\n          changedHorizon.push({\n            start: _horizonPart.start,\n            end: _horizonPart.end,\n            boundary: useBoundary\n          });\n          lastBoundary = useBoundary;\n        }\n      }\n\n      if (horizon[i].start < boundary.y1) {\n        changedHorizon[0].start = boundary.y1;\n        changedHorizon.unshift({\n          start: horizon[i].start,\n          end: boundary.y1,\n          boundary: horizon[i].boundary\n        });\n      }\n\n      if (boundary.y2 < horizon[j].end) {\n        changedHorizon[changedHorizon.length - 1].end = boundary.y2;\n        changedHorizon.push({\n          start: boundary.y2,\n          end: horizon[j].end,\n          boundary: horizon[j].boundary\n        });\n      }\n\n      for (q = i; q <= j; q++) {\n        _horizonPart = horizon[q];\n        _affectedBoundary = _horizonPart.boundary;\n\n        if (_affectedBoundary.x2New !== undefined) {\n          continue;\n        }\n\n        var used = false;\n\n        for (k = i - 1; !used && k >= 0 && horizon[k].start >= _affectedBoundary.y1; k--) {\n          used = horizon[k].boundary === _affectedBoundary;\n        }\n\n        for (k = j + 1; !used && k < horizon.length && horizon[k].end <= _affectedBoundary.y2; k++) {\n          used = horizon[k].boundary === _affectedBoundary;\n        }\n\n        for (k = 0; !used && k < changedHorizon.length; k++) {\n          used = changedHorizon[k].boundary === _affectedBoundary;\n        }\n\n        if (!used) {\n          _affectedBoundary.x2New = maxXNew;\n        }\n      }\n\n      Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));\n    }\n  } catch (err) {\n    _iterator3.e(err);\n  } finally {\n    _iterator3.f();\n  }\n\n  for (var _i3 = 0, _horizon = horizon; _i3 < _horizon.length; _i3++) {\n    var horizonPart = _horizon[_i3];\n    var affectedBoundary = horizonPart.boundary;\n\n    if (affectedBoundary.x2New === undefined) {\n      affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);\n    }\n  }\n}\n\nvar TextLayerRenderTask = /*#__PURE__*/function () {\n  function TextLayerRenderTask(_ref) {\n    var _globalThis$FontInspe,\n        _this = this;\n\n    var textContent = _ref.textContent,\n        textContentStream = _ref.textContentStream,\n        container = _ref.container,\n        viewport = _ref.viewport,\n        textDivs = _ref.textDivs,\n        textContentItemsStr = _ref.textContentItemsStr,\n        enhanceTextSelection = _ref.enhanceTextSelection;\n\n    _classCallCheck(this, TextLayerRenderTask);\n\n    this._textContent = textContent;\n    this._textContentStream = textContentStream;\n    this._container = container;\n    this._document = container.ownerDocument;\n    this._viewport = viewport;\n    this._textDivs = textDivs || [];\n    this._textContentItemsStr = textContentItemsStr || [];\n    this._enhanceTextSelection = !!enhanceTextSelection;\n    this._fontInspectorEnabled = !!((_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled);\n    this._reader = null;\n    this._layoutTextLastFontSize = null;\n    this._layoutTextLastFontFamily = null;\n    this._layoutTextCtx = null;\n    this._textDivProperties = new WeakMap();\n    this._renderingDone = false;\n    this._canceled = false;\n    this._capability = (0, _util.createPromiseCapability)();\n    this._renderTimer = null;\n    this._bounds = [];\n\n    this._capability.promise[\"finally\"](function () {\n      if (!_this._enhanceTextSelection) {\n        _this._textDivProperties = null;\n      }\n\n      if (_this._layoutTextCtx) {\n        _this._layoutTextCtx.canvas.width = 0;\n        _this._layoutTextCtx.canvas.height = 0;\n        _this._layoutTextCtx = null;\n      }\n    })[\"catch\"](function () {});\n  }\n\n  _createClass(TextLayerRenderTask, [{\n    key: \"promise\",\n    get: function get() {\n      return this._capability.promise;\n    }\n  }, {\n    key: \"cancel\",\n    value: function cancel() {\n      this._canceled = true;\n\n      if (this._reader) {\n        this._reader.cancel(new _util.AbortException(\"TextLayer task cancelled.\"))[\"catch\"](function () {});\n\n        this._reader = null;\n      }\n\n      if (this._renderTimer !== null) {\n        clearTimeout(this._renderTimer);\n        this._renderTimer = null;\n      }\n\n      this._capability.reject(new Error(\"TextLayer task cancelled.\"));\n    }\n  }, {\n    key: \"_processItems\",\n    value: function _processItems(items, styleCache) {\n      for (var i = 0, len = items.length; i < len; i++) {\n        if (items[i].str === undefined) {\n          if (items[i].type === \"beginMarkedContentProps\" || items[i].type === \"beginMarkedContent\") {\n            var parent = this._container;\n            this._container = document.createElement(\"span\");\n\n            this._container.classList.add(\"markedContent\");\n\n            if (items[i].id !== null) {\n              this._container.setAttribute(\"id\", \"\".concat(items[i].id));\n            }\n\n            parent.appendChild(this._container);\n          } else if (items[i].type === \"endMarkedContent\") {\n            this._container = this._container.parentNode;\n          }\n\n          continue;\n        }\n\n        this._textContentItemsStr.push(items[i].str);\n\n        appendText(this, items[i], styleCache, this._layoutTextCtx);\n      }\n    }\n  }, {\n    key: \"_layoutText\",\n    value: function _layoutText(textDiv) {\n      var textDivProperties = this._textDivProperties.get(textDiv);\n\n      var transform = \"\";\n\n      if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) {\n        var _textDiv$style = textDiv.style,\n            fontSize = _textDiv$style.fontSize,\n            fontFamily = _textDiv$style.fontFamily;\n\n        if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {\n          this._layoutTextCtx.font = \"\".concat(fontSize, \" \").concat(fontFamily);\n          this._layoutTextLastFontSize = fontSize;\n          this._layoutTextLastFontFamily = fontFamily;\n        }\n\n        var _this$_layoutTextCtx$ = this._layoutTextCtx.measureText(textDiv.textContent),\n            width = _this$_layoutTextCtx$.width;\n\n        if (width > 0) {\n          var scale = textDivProperties.canvasWidth / width;\n\n          if (this._enhanceTextSelection) {\n            textDivProperties.scale = scale;\n          }\n\n          transform = \"scaleX(\".concat(scale, \")\");\n        }\n      }\n\n      if (textDivProperties.angle !== 0) {\n        transform = \"rotate(\".concat(textDivProperties.angle, \"deg) \").concat(transform);\n      }\n\n      if (transform.length > 0) {\n        if (this._enhanceTextSelection) {\n          textDivProperties.originalTransform = transform;\n        }\n\n        textDiv.style.transform = transform;\n      }\n\n      if (textDivProperties.hasText) {\n        this._container.appendChild(textDiv);\n      }\n\n      if (textDivProperties.hasEOL) {\n        var br = document.createElement(\"br\");\n        br.setAttribute(\"role\", \"presentation\");\n\n        this._container.appendChild(br);\n      }\n    }\n  }, {\n    key: \"_render\",\n    value: function _render() {\n      var _this2 = this;\n\n      var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var capability = (0, _util.createPromiseCapability)();\n      var styleCache = Object.create(null);\n\n      var canvas = this._document.createElement(\"canvas\");\n\n      canvas.height = canvas.width = DEFAULT_FONT_SIZE;\n      canvas.mozOpaque = true;\n      this._layoutTextCtx = canvas.getContext(\"2d\", {\n        alpha: false\n      });\n\n      if (this._textContent) {\n        var textItems = this._textContent.items;\n        var textStyles = this._textContent.styles;\n\n        this._processItems(textItems, textStyles);\n\n        capability.resolve();\n      } else if (this._textContentStream) {\n        var pump = function pump() {\n          _this2._reader.read().then(function (_ref2) {\n            var value = _ref2.value,\n                done = _ref2.done;\n\n            if (done) {\n              capability.resolve();\n              return;\n            }\n\n            Object.assign(styleCache, value.styles);\n\n            _this2._processItems(value.items, styleCache);\n\n            pump();\n          }, capability.reject);\n        };\n\n        this._reader = this._textContentStream.getReader();\n        pump();\n      } else {\n        throw new Error('Neither \"textContent\" nor \"textContentStream\" parameters specified.');\n      }\n\n      capability.promise.then(function () {\n        styleCache = null;\n\n        if (!timeout) {\n          render(_this2);\n        } else {\n          _this2._renderTimer = setTimeout(function () {\n            render(_this2);\n            _this2._renderTimer = null;\n          }, timeout);\n        }\n      }, this._capability.reject);\n    }\n  }, {\n    key: \"expandTextDivs\",\n    value: function expandTextDivs() {\n      var expandDivs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this._enhanceTextSelection || !this._renderingDone) {\n        return;\n      }\n\n      if (this._bounds !== null) {\n        expand(this);\n        this._bounds = null;\n      }\n\n      var transformBuf = [],\n          paddingBuf = [];\n\n      for (var i = 0, ii = this._textDivs.length; i < ii; i++) {\n        var div = this._textDivs[i];\n\n        var divProps = this._textDivProperties.get(div);\n\n        if (!divProps.hasText) {\n          continue;\n        }\n\n        if (expandDivs) {\n          transformBuf.length = 0;\n          paddingBuf.length = 0;\n\n          if (divProps.originalTransform) {\n            transformBuf.push(divProps.originalTransform);\n          }\n\n          if (divProps.paddingTop > 0) {\n            paddingBuf.push(\"\".concat(divProps.paddingTop, \"px\"));\n            transformBuf.push(\"translateY(\".concat(-divProps.paddingTop, \"px)\"));\n          } else {\n            paddingBuf.push(0);\n          }\n\n          if (divProps.paddingRight > 0) {\n            paddingBuf.push(\"\".concat(divProps.paddingRight / divProps.scale, \"px\"));\n          } else {\n            paddingBuf.push(0);\n          }\n\n          if (divProps.paddingBottom > 0) {\n            paddingBuf.push(\"\".concat(divProps.paddingBottom, \"px\"));\n          } else {\n            paddingBuf.push(0);\n          }\n\n          if (divProps.paddingLeft > 0) {\n            paddingBuf.push(\"\".concat(divProps.paddingLeft / divProps.scale, \"px\"));\n            transformBuf.push(\"translateX(\".concat(-divProps.paddingLeft / divProps.scale, \"px)\"));\n          } else {\n            paddingBuf.push(0);\n          }\n\n          div.style.padding = paddingBuf.join(\" \");\n\n          if (transformBuf.length) {\n            div.style.transform = transformBuf.join(\" \");\n          }\n        } else {\n          div.style.padding = null;\n          div.style.transform = divProps.originalTransform;\n        }\n      }\n    }\n  }]);\n\n  return TextLayerRenderTask;\n}();\n\nfunction renderTextLayer(renderParameters) {\n  var task = new TextLayerRenderTask({\n    textContent: renderParameters.textContent,\n    textContentStream: renderParameters.textContentStream,\n    container: renderParameters.container,\n    viewport: renderParameters.viewport,\n    textDivs: renderParameters.textDivs,\n    textContentItemsStr: renderParameters.textContentItemsStr,\n    enhanceTextSelection: renderParameters.enhanceTextSelection\n  });\n\n  task._render(renderParameters.timeout);\n\n  return task;\n}\n\n/***/ }),\n/* 152 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.SVGGraphics = void 0;\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _is_node = __w_pdfjs_require__(6);\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SVGGraphics = function SVGGraphics() {\n  _classCallCheck(this, SVGGraphics);\n\n  (0, _util.unreachable)(\"Not implemented: SVGGraphics\");\n};\n\nexports.SVGGraphics = SVGGraphics;\n{\n  var opListToTree = function opListToTree(opList) {\n    var opTree = [];\n    var tmp = [];\n\n    var _iterator = _createForOfIteratorHelper(opList),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var opListElement = _step.value;\n\n        if (opListElement.fn === \"save\") {\n          opTree.push({\n            fnId: 92,\n            fn: \"group\",\n            items: []\n          });\n          tmp.push(opTree);\n          opTree = opTree[opTree.length - 1].items;\n          continue;\n        }\n\n        if (opListElement.fn === \"restore\") {\n          opTree = tmp.pop();\n        } else {\n          opTree.push(opListElement);\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    return opTree;\n  };\n\n  var pf = function pf(value) {\n    if (Number.isInteger(value)) {\n      return value.toString();\n    }\n\n    var s = value.toFixed(10);\n    var i = s.length - 1;\n\n    if (s[i] !== \"0\") {\n      return s;\n    }\n\n    do {\n      i--;\n    } while (s[i] === \"0\");\n\n    return s.substring(0, s[i] === \".\" ? i : i + 1);\n  };\n\n  var pm = function pm(m) {\n    if (m[4] === 0 && m[5] === 0) {\n      if (m[1] === 0 && m[2] === 0) {\n        if (m[0] === 1 && m[3] === 1) {\n          return \"\";\n        }\n\n        return \"scale(\".concat(pf(m[0]), \" \").concat(pf(m[3]), \")\");\n      }\n\n      if (m[0] === m[3] && m[1] === -m[2]) {\n        var a = Math.acos(m[0]) * 180 / Math.PI;\n        return \"rotate(\".concat(pf(a), \")\");\n      }\n    } else {\n      if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {\n        return \"translate(\".concat(pf(m[4]), \" \").concat(pf(m[5]), \")\");\n      }\n    }\n\n    return \"matrix(\".concat(pf(m[0]), \" \").concat(pf(m[1]), \" \").concat(pf(m[2]), \" \").concat(pf(m[3]), \" \").concat(pf(m[4]), \" \") + \"\".concat(pf(m[5]), \")\");\n  };\n\n  var SVG_DEFAULTS = {\n    fontStyle: \"normal\",\n    fontWeight: \"normal\",\n    fillColor: \"#000000\"\n  };\n  var XML_NS = \"http://www.w3.org/XML/1998/namespace\";\n  var XLINK_NS = \"http://www.w3.org/1999/xlink\";\n  var LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\n  var LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\n\n  var convertImgDataToPng = function () {\n    var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n    var CHUNK_WRAPPER_SIZE = 12;\n    var crcTable = new Int32Array(256);\n\n    for (var i = 0; i < 256; i++) {\n      var c = i;\n\n      for (var h = 0; h < 8; h++) {\n        if (c & 1) {\n          c = 0xedb88320 ^ c >> 1 & 0x7fffffff;\n        } else {\n          c = c >> 1 & 0x7fffffff;\n        }\n      }\n\n      crcTable[i] = c;\n    }\n\n    function crc32(data, start, end) {\n      var crc = -1;\n\n      for (var _i = start; _i < end; _i++) {\n        var a = (crc ^ data[_i]) & 0xff;\n        var b = crcTable[a];\n        crc = crc >>> 8 ^ b;\n      }\n\n      return crc ^ -1;\n    }\n\n    function writePngChunk(type, body, data, offset) {\n      var p = offset;\n      var len = body.length;\n      data[p] = len >> 24 & 0xff;\n      data[p + 1] = len >> 16 & 0xff;\n      data[p + 2] = len >> 8 & 0xff;\n      data[p + 3] = len & 0xff;\n      p += 4;\n      data[p] = type.charCodeAt(0) & 0xff;\n      data[p + 1] = type.charCodeAt(1) & 0xff;\n      data[p + 2] = type.charCodeAt(2) & 0xff;\n      data[p + 3] = type.charCodeAt(3) & 0xff;\n      p += 4;\n      data.set(body, p);\n      p += body.length;\n      var crc = crc32(data, offset + 4, p);\n      data[p] = crc >> 24 & 0xff;\n      data[p + 1] = crc >> 16 & 0xff;\n      data[p + 2] = crc >> 8 & 0xff;\n      data[p + 3] = crc & 0xff;\n    }\n\n    function adler32(data, start, end) {\n      var a = 1;\n      var b = 0;\n\n      for (var _i2 = start; _i2 < end; ++_i2) {\n        a = (a + (data[_i2] & 0xff)) % 65521;\n        b = (b + a) % 65521;\n      }\n\n      return b << 16 | a;\n    }\n\n    function deflateSync(literals) {\n      if (!_is_node.isNodeJS) {\n        return deflateSyncUncompressed(literals);\n      }\n\n      try {\n        var input;\n\n        if (parseInt(process.versions.node) >= 8) {\n          input = literals;\n        } else {\n          input = Buffer.from(literals);\n        }\n\n        var output = require(\"zlib\").deflateSync(input, {\n          level: 9\n        });\n\n        return output instanceof Uint8Array ? output : new Uint8Array(output);\n      } catch (e) {\n        (0, _util.warn)(\"Not compressing PNG because zlib.deflateSync is unavailable: \" + e);\n      }\n\n      return deflateSyncUncompressed(literals);\n    }\n\n    function deflateSyncUncompressed(literals) {\n      var len = literals.length;\n      var maxBlockLength = 0xffff;\n      var deflateBlocks = Math.ceil(len / maxBlockLength);\n      var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);\n      var pi = 0;\n      idat[pi++] = 0x78;\n      idat[pi++] = 0x9c;\n      var pos = 0;\n\n      while (len > maxBlockLength) {\n        idat[pi++] = 0x00;\n        idat[pi++] = 0xff;\n        idat[pi++] = 0xff;\n        idat[pi++] = 0x00;\n        idat[pi++] = 0x00;\n        idat.set(literals.subarray(pos, pos + maxBlockLength), pi);\n        pi += maxBlockLength;\n        pos += maxBlockLength;\n        len -= maxBlockLength;\n      }\n\n      idat[pi++] = 0x01;\n      idat[pi++] = len & 0xff;\n      idat[pi++] = len >> 8 & 0xff;\n      idat[pi++] = ~len & 0xffff & 0xff;\n      idat[pi++] = (~len & 0xffff) >> 8 & 0xff;\n      idat.set(literals.subarray(pos), pi);\n      pi += literals.length - pos;\n      var adler = adler32(literals, 0, literals.length);\n      idat[pi++] = adler >> 24 & 0xff;\n      idat[pi++] = adler >> 16 & 0xff;\n      idat[pi++] = adler >> 8 & 0xff;\n      idat[pi++] = adler & 0xff;\n      return idat;\n    }\n\n    function encode(imgData, kind, forceDataSchema, isMask) {\n      var width = imgData.width;\n      var height = imgData.height;\n      var bitDepth, colorType, lineSize;\n      var bytes = imgData.data;\n\n      switch (kind) {\n        case _util.ImageKind.GRAYSCALE_1BPP:\n          colorType = 0;\n          bitDepth = 1;\n          lineSize = width + 7 >> 3;\n          break;\n\n        case _util.ImageKind.RGB_24BPP:\n          colorType = 2;\n          bitDepth = 8;\n          lineSize = width * 3;\n          break;\n\n        case _util.ImageKind.RGBA_32BPP:\n          colorType = 6;\n          bitDepth = 8;\n          lineSize = width * 4;\n          break;\n\n        default:\n          throw new Error(\"invalid format\");\n      }\n\n      var literals = new Uint8Array((1 + lineSize) * height);\n      var offsetLiterals = 0,\n          offsetBytes = 0;\n\n      for (var y = 0; y < height; ++y) {\n        literals[offsetLiterals++] = 0;\n        literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);\n        offsetBytes += lineSize;\n        offsetLiterals += lineSize;\n      }\n\n      if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {\n        offsetLiterals = 0;\n\n        for (var _y = 0; _y < height; _y++) {\n          offsetLiterals++;\n\n          for (var _i3 = 0; _i3 < lineSize; _i3++) {\n            literals[offsetLiterals++] ^= 0xff;\n          }\n        }\n      }\n\n      var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);\n      var idat = deflateSync(literals);\n      var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;\n      var data = new Uint8Array(pngLength);\n      var offset = 0;\n      data.set(PNG_HEADER, offset);\n      offset += PNG_HEADER.length;\n      writePngChunk(\"IHDR\", ihdr, data, offset);\n      offset += CHUNK_WRAPPER_SIZE + ihdr.length;\n      writePngChunk(\"IDATA\", idat, data, offset);\n      offset += CHUNK_WRAPPER_SIZE + idat.length;\n      writePngChunk(\"IEND\", new Uint8Array(0), data, offset);\n      return (0, _util.createObjectURL)(data, \"image/png\", forceDataSchema);\n    }\n\n    return function convertImgDataToPng(imgData, forceDataSchema, isMask) {\n      var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;\n      return encode(imgData, kind, forceDataSchema, isMask);\n    };\n  }();\n\n  var SVGExtraState = /*#__PURE__*/function () {\n    function SVGExtraState() {\n      _classCallCheck(this, SVGExtraState);\n\n      this.fontSizeScale = 1;\n      this.fontWeight = SVG_DEFAULTS.fontWeight;\n      this.fontSize = 0;\n      this.textMatrix = _util.IDENTITY_MATRIX;\n      this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\n      this.leading = 0;\n      this.textRenderingMode = _util.TextRenderingMode.FILL;\n      this.textMatrixScale = 1;\n      this.x = 0;\n      this.y = 0;\n      this.lineX = 0;\n      this.lineY = 0;\n      this.charSpacing = 0;\n      this.wordSpacing = 0;\n      this.textHScale = 1;\n      this.textRise = 0;\n      this.fillColor = SVG_DEFAULTS.fillColor;\n      this.strokeColor = \"#000000\";\n      this.fillAlpha = 1;\n      this.strokeAlpha = 1;\n      this.lineWidth = 1;\n      this.lineJoin = \"\";\n      this.lineCap = \"\";\n      this.miterLimit = 0;\n      this.dashArray = [];\n      this.dashPhase = 0;\n      this.dependencies = [];\n      this.activeClipUrl = null;\n      this.clipGroup = null;\n      this.maskId = \"\";\n    }\n\n    _createClass(SVGExtraState, [{\n      key: \"clone\",\n      value: function clone() {\n        return Object.create(this);\n      }\n    }, {\n      key: \"setCurrentPoint\",\n      value: function setCurrentPoint(x, y) {\n        this.x = x;\n        this.y = y;\n      }\n    }]);\n\n    return SVGExtraState;\n  }();\n\n  var clipCount = 0;\n  var maskCount = 0;\n  var shadingCount = 0;\n\n  exports.SVGGraphics = SVGGraphics = /*#__PURE__*/function () {\n    function SVGGraphics(commonObjs, objs) {\n      var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      _classCallCheck(this, SVGGraphics);\n\n      this.svgFactory = new _display_utils.DOMSVGFactory();\n      this.current = new SVGExtraState();\n      this.transformMatrix = _util.IDENTITY_MATRIX;\n      this.transformStack = [];\n      this.extraStack = [];\n      this.commonObjs = commonObjs;\n      this.objs = objs;\n      this.pendingClip = null;\n      this.pendingEOFill = false;\n      this.embedFonts = false;\n      this.embeddedFonts = Object.create(null);\n      this.cssStyle = null;\n      this.forceDataSchema = !!forceDataSchema;\n      this._operatorIdMapping = [];\n\n      for (var op in _util.OPS) {\n        this._operatorIdMapping[_util.OPS[op]] = op;\n      }\n    }\n\n    _createClass(SVGGraphics, [{\n      key: \"save\",\n      value: function save() {\n        this.transformStack.push(this.transformMatrix);\n        var old = this.current;\n        this.extraStack.push(old);\n        this.current = old.clone();\n      }\n    }, {\n      key: \"restore\",\n      value: function restore() {\n        this.transformMatrix = this.transformStack.pop();\n        this.current = this.extraStack.pop();\n        this.pendingClip = null;\n        this.tgrp = null;\n      }\n    }, {\n      key: \"group\",\n      value: function group(items) {\n        this.save();\n        this.executeOpTree(items);\n        this.restore();\n      }\n    }, {\n      key: \"loadDependencies\",\n      value: function loadDependencies(operatorList) {\n        var _this = this;\n\n        var fnArray = operatorList.fnArray;\n        var argsArray = operatorList.argsArray;\n\n        for (var i = 0, ii = fnArray.length; i < ii; i++) {\n          if (fnArray[i] !== _util.OPS.dependency) {\n            continue;\n          }\n\n          var _iterator2 = _createForOfIteratorHelper(argsArray[i]),\n              _step2;\n\n          try {\n            var _loop = function _loop() {\n              var obj = _step2.value;\n              var objsPool = obj.startsWith(\"g_\") ? _this.commonObjs : _this.objs;\n              var promise = new Promise(function (resolve) {\n                objsPool.get(obj, resolve);\n              });\n\n              _this.current.dependencies.push(promise);\n            };\n\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              _loop();\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n        }\n\n        return Promise.all(this.current.dependencies);\n      }\n    }, {\n      key: \"transform\",\n      value: function transform(a, b, c, d, e, f) {\n        var transformMatrix = [a, b, c, d, e, f];\n        this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);\n        this.tgrp = null;\n      }\n    }, {\n      key: \"getSVG\",\n      value: function getSVG(operatorList, viewport) {\n        var _this2 = this;\n\n        this.viewport = viewport;\n\n        var svgElement = this._initialize(viewport);\n\n        return this.loadDependencies(operatorList).then(function () {\n          _this2.transformMatrix = _util.IDENTITY_MATRIX;\n\n          _this2.executeOpTree(_this2.convertOpList(operatorList));\n\n          return svgElement;\n        });\n      }\n    }, {\n      key: \"convertOpList\",\n      value: function convertOpList(operatorList) {\n        var operatorIdMapping = this._operatorIdMapping;\n        var argsArray = operatorList.argsArray;\n        var fnArray = operatorList.fnArray;\n        var opList = [];\n\n        for (var i = 0, ii = fnArray.length; i < ii; i++) {\n          var fnId = fnArray[i];\n          opList.push({\n            fnId: fnId,\n            fn: operatorIdMapping[fnId],\n            args: argsArray[i]\n          });\n        }\n\n        return opListToTree(opList);\n      }\n    }, {\n      key: \"executeOpTree\",\n      value: function executeOpTree(opTree) {\n        var _iterator3 = _createForOfIteratorHelper(opTree),\n            _step3;\n\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var opTreeElement = _step3.value;\n            var fn = opTreeElement.fn;\n            var fnId = opTreeElement.fnId;\n            var args = opTreeElement.args;\n\n            switch (fnId | 0) {\n              case _util.OPS.beginText:\n                this.beginText();\n                break;\n\n              case _util.OPS.dependency:\n                break;\n\n              case _util.OPS.setLeading:\n                this.setLeading(args);\n                break;\n\n              case _util.OPS.setLeadingMoveText:\n                this.setLeadingMoveText(args[0], args[1]);\n                break;\n\n              case _util.OPS.setFont:\n                this.setFont(args);\n                break;\n\n              case _util.OPS.showText:\n                this.showText(args[0]);\n                break;\n\n              case _util.OPS.showSpacedText:\n                this.showText(args[0]);\n                break;\n\n              case _util.OPS.endText:\n                this.endText();\n                break;\n\n              case _util.OPS.moveText:\n                this.moveText(args[0], args[1]);\n                break;\n\n              case _util.OPS.setCharSpacing:\n                this.setCharSpacing(args[0]);\n                break;\n\n              case _util.OPS.setWordSpacing:\n                this.setWordSpacing(args[0]);\n                break;\n\n              case _util.OPS.setHScale:\n                this.setHScale(args[0]);\n                break;\n\n              case _util.OPS.setTextMatrix:\n                this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\n                break;\n\n              case _util.OPS.setTextRise:\n                this.setTextRise(args[0]);\n                break;\n\n              case _util.OPS.setTextRenderingMode:\n                this.setTextRenderingMode(args[0]);\n                break;\n\n              case _util.OPS.setLineWidth:\n                this.setLineWidth(args[0]);\n                break;\n\n              case _util.OPS.setLineJoin:\n                this.setLineJoin(args[0]);\n                break;\n\n              case _util.OPS.setLineCap:\n                this.setLineCap(args[0]);\n                break;\n\n              case _util.OPS.setMiterLimit:\n                this.setMiterLimit(args[0]);\n                break;\n\n              case _util.OPS.setFillRGBColor:\n                this.setFillRGBColor(args[0], args[1], args[2]);\n                break;\n\n              case _util.OPS.setStrokeRGBColor:\n                this.setStrokeRGBColor(args[0], args[1], args[2]);\n                break;\n\n              case _util.OPS.setStrokeColorN:\n                this.setStrokeColorN(args);\n                break;\n\n              case _util.OPS.setFillColorN:\n                this.setFillColorN(args);\n                break;\n\n              case _util.OPS.shadingFill:\n                this.shadingFill(args[0]);\n                break;\n\n              case _util.OPS.setDash:\n                this.setDash(args[0], args[1]);\n                break;\n\n              case _util.OPS.setRenderingIntent:\n                this.setRenderingIntent(args[0]);\n                break;\n\n              case _util.OPS.setFlatness:\n                this.setFlatness(args[0]);\n                break;\n\n              case _util.OPS.setGState:\n                this.setGState(args[0]);\n                break;\n\n              case _util.OPS.fill:\n                this.fill();\n                break;\n\n              case _util.OPS.eoFill:\n                this.eoFill();\n                break;\n\n              case _util.OPS.stroke:\n                this.stroke();\n                break;\n\n              case _util.OPS.fillStroke:\n                this.fillStroke();\n                break;\n\n              case _util.OPS.eoFillStroke:\n                this.eoFillStroke();\n                break;\n\n              case _util.OPS.clip:\n                this.clip(\"nonzero\");\n                break;\n\n              case _util.OPS.eoClip:\n                this.clip(\"evenodd\");\n                break;\n\n              case _util.OPS.paintSolidColorImageMask:\n                this.paintSolidColorImageMask();\n                break;\n\n              case _util.OPS.paintImageXObject:\n                this.paintImageXObject(args[0]);\n                break;\n\n              case _util.OPS.paintInlineImageXObject:\n                this.paintInlineImageXObject(args[0]);\n                break;\n\n              case _util.OPS.paintImageMaskXObject:\n                this.paintImageMaskXObject(args[0]);\n                break;\n\n              case _util.OPS.paintFormXObjectBegin:\n                this.paintFormXObjectBegin(args[0], args[1]);\n                break;\n\n              case _util.OPS.paintFormXObjectEnd:\n                this.paintFormXObjectEnd();\n                break;\n\n              case _util.OPS.closePath:\n                this.closePath();\n                break;\n\n              case _util.OPS.closeStroke:\n                this.closeStroke();\n                break;\n\n              case _util.OPS.closeFillStroke:\n                this.closeFillStroke();\n                break;\n\n              case _util.OPS.closeEOFillStroke:\n                this.closeEOFillStroke();\n                break;\n\n              case _util.OPS.nextLine:\n                this.nextLine();\n                break;\n\n              case _util.OPS.transform:\n                this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);\n                break;\n\n              case _util.OPS.constructPath:\n                this.constructPath(args[0], args[1]);\n                break;\n\n              case _util.OPS.endPath:\n                this.endPath();\n                break;\n\n              case 92:\n                this.group(opTreeElement.items);\n                break;\n\n              default:\n                (0, _util.warn)(\"Unimplemented operator \".concat(fn));\n                break;\n            }\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n      }\n    }, {\n      key: \"setWordSpacing\",\n      value: function setWordSpacing(wordSpacing) {\n        this.current.wordSpacing = wordSpacing;\n      }\n    }, {\n      key: \"setCharSpacing\",\n      value: function setCharSpacing(charSpacing) {\n        this.current.charSpacing = charSpacing;\n      }\n    }, {\n      key: \"nextLine\",\n      value: function nextLine() {\n        this.moveText(0, this.current.leading);\n      }\n    }, {\n      key: \"setTextMatrix\",\n      value: function setTextMatrix(a, b, c, d, e, f) {\n        var current = this.current;\n        current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];\n        current.textMatrixScale = Math.hypot(a, b);\n        current.x = current.lineX = 0;\n        current.y = current.lineY = 0;\n        current.xcoords = [];\n        current.ycoords = [];\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n        current.txtElement = this.svgFactory.createElement(\"svg:text\");\n        current.txtElement.appendChild(current.tspan);\n      }\n    }, {\n      key: \"beginText\",\n      value: function beginText() {\n        var current = this.current;\n        current.x = current.lineX = 0;\n        current.y = current.lineY = 0;\n        current.textMatrix = _util.IDENTITY_MATRIX;\n        current.lineMatrix = _util.IDENTITY_MATRIX;\n        current.textMatrixScale = 1;\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n        current.txtElement = this.svgFactory.createElement(\"svg:text\");\n        current.txtgrp = this.svgFactory.createElement(\"svg:g\");\n        current.xcoords = [];\n        current.ycoords = [];\n      }\n    }, {\n      key: \"moveText\",\n      value: function moveText(x, y) {\n        var current = this.current;\n        current.x = current.lineX += x;\n        current.y = current.lineY += y;\n        current.xcoords = [];\n        current.ycoords = [];\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n      }\n    }, {\n      key: \"showText\",\n      value: function showText(glyphs) {\n        var current = this.current;\n        var font = current.font;\n        var fontSize = current.fontSize;\n\n        if (fontSize === 0) {\n          return;\n        }\n\n        var fontSizeScale = current.fontSizeScale;\n        var charSpacing = current.charSpacing;\n        var wordSpacing = current.wordSpacing;\n        var fontDirection = current.fontDirection;\n        var textHScale = current.textHScale * fontDirection;\n        var vertical = font.vertical;\n        var spacingDir = vertical ? 1 : -1;\n        var defaultVMetrics = font.defaultVMetrics;\n        var widthAdvanceScale = fontSize * current.fontMatrix[0];\n        var x = 0;\n\n        var _iterator4 = _createForOfIteratorHelper(glyphs),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var glyph = _step4.value;\n\n            if (glyph === null) {\n              x += fontDirection * wordSpacing;\n              continue;\n            } else if ((0, _util.isNum)(glyph)) {\n              x += spacingDir * glyph * fontSize / 1000;\n              continue;\n            }\n\n            var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n            var character = glyph.fontChar;\n            var scaledX = void 0,\n                scaledY = void 0;\n            var width = glyph.width;\n\n            if (vertical) {\n              var vx = void 0;\n              var vmetric = glyph.vmetric || defaultVMetrics;\n              vx = glyph.vmetric ? vmetric[1] : width * 0.5;\n              vx = -vx * widthAdvanceScale;\n              var vy = vmetric[2] * widthAdvanceScale;\n              width = vmetric ? -vmetric[0] : width;\n              scaledX = vx / fontSizeScale;\n              scaledY = (x + vy) / fontSizeScale;\n            } else {\n              scaledX = x / fontSizeScale;\n              scaledY = 0;\n            }\n\n            if (glyph.isInFont || font.missingFile) {\n              current.xcoords.push(current.x + scaledX);\n\n              if (vertical) {\n                current.ycoords.push(-current.y + scaledY);\n              }\n\n              current.tspan.textContent += character;\n            } else {}\n\n            var charWidth = void 0;\n\n            if (vertical) {\n              charWidth = width * widthAdvanceScale - spacing * fontDirection;\n            } else {\n              charWidth = width * widthAdvanceScale + spacing * fontDirection;\n            }\n\n            x += charWidth;\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n\n        current.tspan.setAttributeNS(null, \"x\", current.xcoords.map(pf).join(\" \"));\n\n        if (vertical) {\n          current.tspan.setAttributeNS(null, \"y\", current.ycoords.map(pf).join(\" \"));\n        } else {\n          current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n        }\n\n        if (vertical) {\n          current.y -= x;\n        } else {\n          current.x += x * textHScale;\n        }\n\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\n\n        if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {\n          current.tspan.setAttributeNS(null, \"font-style\", current.fontStyle);\n        }\n\n        if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {\n          current.tspan.setAttributeNS(null, \"font-weight\", current.fontWeight);\n        }\n\n        var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\n\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          if (current.fillColor !== SVG_DEFAULTS.fillColor) {\n            current.tspan.setAttributeNS(null, \"fill\", current.fillColor);\n          }\n\n          if (current.fillAlpha < 1) {\n            current.tspan.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\n          }\n        } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {\n          current.tspan.setAttributeNS(null, \"fill\", \"transparent\");\n        } else {\n          current.tspan.setAttributeNS(null, \"fill\", \"none\");\n        }\n\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\n          var lineWidthScale = 1 / (current.textMatrixScale || 1);\n\n          this._setStrokeAttributes(current.tspan, lineWidthScale);\n        }\n\n        var textMatrix = current.textMatrix;\n\n        if (current.textRise !== 0) {\n          textMatrix = textMatrix.slice();\n          textMatrix[5] += current.textRise;\n        }\n\n        current.txtElement.setAttributeNS(null, \"transform\", \"\".concat(pm(textMatrix), \" scale(\").concat(pf(textHScale), \", -1)\"));\n        current.txtElement.setAttributeNS(XML_NS, \"xml:space\", \"preserve\");\n        current.txtElement.appendChild(current.tspan);\n        current.txtgrp.appendChild(current.txtElement);\n\n        this._ensureTransformGroup().appendChild(current.txtElement);\n      }\n    }, {\n      key: \"setLeadingMoveText\",\n      value: function setLeadingMoveText(x, y) {\n        this.setLeading(-y);\n        this.moveText(x, y);\n      }\n    }, {\n      key: \"addFontStyle\",\n      value: function addFontStyle(fontObj) {\n        if (!fontObj.data) {\n          throw new Error(\"addFontStyle: No font data available, \" + 'ensure that the \"fontExtraProperties\" API parameter is set.');\n        }\n\n        if (!this.cssStyle) {\n          this.cssStyle = this.svgFactory.createElement(\"svg:style\");\n          this.cssStyle.setAttributeNS(null, \"type\", \"text/css\");\n          this.defs.appendChild(this.cssStyle);\n        }\n\n        var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);\n        this.cssStyle.textContent += \"@font-face { font-family: \\\"\".concat(fontObj.loadedName, \"\\\";\") + \" src: url(\".concat(url, \"); }\\n\");\n      }\n    }, {\n      key: \"setFont\",\n      value: function setFont(details) {\n        var current = this.current;\n        var fontObj = this.commonObjs.get(details[0]);\n        var size = details[1];\n        current.font = fontObj;\n\n        if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {\n          this.addFontStyle(fontObj);\n          this.embeddedFonts[fontObj.loadedName] = fontObj;\n        }\n\n        current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;\n        var bold = \"normal\";\n\n        if (fontObj.black) {\n          bold = \"900\";\n        } else if (fontObj.bold) {\n          bold = \"bold\";\n        }\n\n        var italic = fontObj.italic ? \"italic\" : \"normal\";\n\n        if (size < 0) {\n          size = -size;\n          current.fontDirection = -1;\n        } else {\n          current.fontDirection = 1;\n        }\n\n        current.fontSize = size;\n        current.fontFamily = fontObj.loadedName;\n        current.fontWeight = bold;\n        current.fontStyle = italic;\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\n        current.xcoords = [];\n        current.ycoords = [];\n      }\n    }, {\n      key: \"endText\",\n      value: function endText() {\n        var _current$txtElement;\n\n        var current = this.current;\n\n        if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && (_current$txtElement = current.txtElement) !== null && _current$txtElement !== void 0 && _current$txtElement.hasChildNodes()) {\n          current.element = current.txtElement;\n          this.clip(\"nonzero\");\n          this.endPath();\n        }\n      }\n    }, {\n      key: \"setLineWidth\",\n      value: function setLineWidth(width) {\n        if (width > 0) {\n          this.current.lineWidth = width;\n        }\n      }\n    }, {\n      key: \"setLineCap\",\n      value: function setLineCap(style) {\n        this.current.lineCap = LINE_CAP_STYLES[style];\n      }\n    }, {\n      key: \"setLineJoin\",\n      value: function setLineJoin(style) {\n        this.current.lineJoin = LINE_JOIN_STYLES[style];\n      }\n    }, {\n      key: \"setMiterLimit\",\n      value: function setMiterLimit(limit) {\n        this.current.miterLimit = limit;\n      }\n    }, {\n      key: \"setStrokeAlpha\",\n      value: function setStrokeAlpha(strokeAlpha) {\n        this.current.strokeAlpha = strokeAlpha;\n      }\n    }, {\n      key: \"setStrokeRGBColor\",\n      value: function setStrokeRGBColor(r, g, b) {\n        this.current.strokeColor = _util.Util.makeHexColor(r, g, b);\n      }\n    }, {\n      key: \"setFillAlpha\",\n      value: function setFillAlpha(fillAlpha) {\n        this.current.fillAlpha = fillAlpha;\n      }\n    }, {\n      key: \"setFillRGBColor\",\n      value: function setFillRGBColor(r, g, b) {\n        this.current.fillColor = _util.Util.makeHexColor(r, g, b);\n        this.current.tspan = this.svgFactory.createElement(\"svg:tspan\");\n        this.current.xcoords = [];\n        this.current.ycoords = [];\n      }\n    }, {\n      key: \"setStrokeColorN\",\n      value: function setStrokeColorN(args) {\n        this.current.strokeColor = this._makeColorN_Pattern(args);\n      }\n    }, {\n      key: \"setFillColorN\",\n      value: function setFillColorN(args) {\n        this.current.fillColor = this._makeColorN_Pattern(args);\n      }\n    }, {\n      key: \"shadingFill\",\n      value: function shadingFill(args) {\n        var width = this.viewport.width;\n        var height = this.viewport.height;\n\n        var inv = _util.Util.inverseTransform(this.transformMatrix);\n\n        var bl = _util.Util.applyTransform([0, 0], inv);\n\n        var br = _util.Util.applyTransform([0, height], inv);\n\n        var ul = _util.Util.applyTransform([width, 0], inv);\n\n        var ur = _util.Util.applyTransform([width, height], inv);\n\n        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\n        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\n        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\n        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\n        var rect = this.svgFactory.createElement(\"svg:rect\");\n        rect.setAttributeNS(null, \"x\", x0);\n        rect.setAttributeNS(null, \"y\", y0);\n        rect.setAttributeNS(null, \"width\", x1 - x0);\n        rect.setAttributeNS(null, \"height\", y1 - y0);\n        rect.setAttributeNS(null, \"fill\", this._makeShadingPattern(args));\n\n        if (this.current.fillAlpha < 1) {\n          rect.setAttributeNS(null, \"fill-opacity\", this.current.fillAlpha);\n        }\n\n        this._ensureTransformGroup().appendChild(rect);\n      }\n    }, {\n      key: \"_makeColorN_Pattern\",\n      value: function _makeColorN_Pattern(args) {\n        if (args[0] === \"TilingPattern\") {\n          return this._makeTilingPattern(args);\n        }\n\n        return this._makeShadingPattern(args);\n      }\n    }, {\n      key: \"_makeTilingPattern\",\n      value: function _makeTilingPattern(args) {\n        var color = args[1];\n        var operatorList = args[2];\n        var matrix = args[3] || _util.IDENTITY_MATRIX;\n\n        var _args$ = _slicedToArray(args[4], 4),\n            x0 = _args$[0],\n            y0 = _args$[1],\n            x1 = _args$[2],\n            y1 = _args$[3];\n\n        var xstep = args[5];\n        var ystep = args[6];\n        var paintType = args[7];\n        var tilingId = \"shading\".concat(shadingCount++);\n\n        var _Util$normalizeRect = _util.Util.normalizeRect([].concat(_toConsumableArray(_util.Util.applyTransform([x0, y0], matrix)), _toConsumableArray(_util.Util.applyTransform([x1, y1], matrix)))),\n            _Util$normalizeRect2 = _slicedToArray(_Util$normalizeRect, 4),\n            tx0 = _Util$normalizeRect2[0],\n            ty0 = _Util$normalizeRect2[1],\n            tx1 = _Util$normalizeRect2[2],\n            ty1 = _Util$normalizeRect2[3];\n\n        var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(matrix),\n            _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),\n            xscale = _Util$singularValueDe2[0],\n            yscale = _Util$singularValueDe2[1];\n\n        var txstep = xstep * xscale;\n        var tystep = ystep * yscale;\n        var tiling = this.svgFactory.createElement(\"svg:pattern\");\n        tiling.setAttributeNS(null, \"id\", tilingId);\n        tiling.setAttributeNS(null, \"patternUnits\", \"userSpaceOnUse\");\n        tiling.setAttributeNS(null, \"width\", txstep);\n        tiling.setAttributeNS(null, \"height\", tystep);\n        tiling.setAttributeNS(null, \"x\", \"\".concat(tx0));\n        tiling.setAttributeNS(null, \"y\", \"\".concat(ty0));\n        var svg = this.svg;\n        var transformMatrix = this.transformMatrix;\n        var fillColor = this.current.fillColor;\n        var strokeColor = this.current.strokeColor;\n        var bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);\n        this.svg = bbox;\n        this.transformMatrix = matrix;\n\n        if (paintType === 2) {\n          var cssColor = _util.Util.makeHexColor.apply(_util.Util, _toConsumableArray(color));\n\n          this.current.fillColor = cssColor;\n          this.current.strokeColor = cssColor;\n        }\n\n        this.executeOpTree(this.convertOpList(operatorList));\n        this.svg = svg;\n        this.transformMatrix = transformMatrix;\n        this.current.fillColor = fillColor;\n        this.current.strokeColor = strokeColor;\n        tiling.appendChild(bbox.childNodes[0]);\n        this.defs.appendChild(tiling);\n        return \"url(#\".concat(tilingId, \")\");\n      }\n    }, {\n      key: \"_makeShadingPattern\",\n      value: function _makeShadingPattern(args) {\n        if (typeof args === \"string\") {\n          args = this.objs.get(args);\n        }\n\n        switch (args[0]) {\n          case \"RadialAxial\":\n            var shadingId = \"shading\".concat(shadingCount++);\n            var colorStops = args[3];\n            var gradient;\n\n            switch (args[1]) {\n              case \"axial\":\n                var point0 = args[4];\n                var point1 = args[5];\n                gradient = this.svgFactory.createElement(\"svg:linearGradient\");\n                gradient.setAttributeNS(null, \"id\", shadingId);\n                gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\n                gradient.setAttributeNS(null, \"x1\", point0[0]);\n                gradient.setAttributeNS(null, \"y1\", point0[1]);\n                gradient.setAttributeNS(null, \"x2\", point1[0]);\n                gradient.setAttributeNS(null, \"y2\", point1[1]);\n                break;\n\n              case \"radial\":\n                var focalPoint = args[4];\n                var circlePoint = args[5];\n                var focalRadius = args[6];\n                var circleRadius = args[7];\n                gradient = this.svgFactory.createElement(\"svg:radialGradient\");\n                gradient.setAttributeNS(null, \"id\", shadingId);\n                gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\n                gradient.setAttributeNS(null, \"cx\", circlePoint[0]);\n                gradient.setAttributeNS(null, \"cy\", circlePoint[1]);\n                gradient.setAttributeNS(null, \"r\", circleRadius);\n                gradient.setAttributeNS(null, \"fx\", focalPoint[0]);\n                gradient.setAttributeNS(null, \"fy\", focalPoint[1]);\n                gradient.setAttributeNS(null, \"fr\", focalRadius);\n                break;\n\n              default:\n                throw new Error(\"Unknown RadialAxial type: \".concat(args[1]));\n            }\n\n            var _iterator5 = _createForOfIteratorHelper(colorStops),\n                _step5;\n\n            try {\n              for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n                var colorStop = _step5.value;\n                var stop = this.svgFactory.createElement(\"svg:stop\");\n                stop.setAttributeNS(null, \"offset\", colorStop[0]);\n                stop.setAttributeNS(null, \"stop-color\", colorStop[1]);\n                gradient.appendChild(stop);\n              }\n            } catch (err) {\n              _iterator5.e(err);\n            } finally {\n              _iterator5.f();\n            }\n\n            this.defs.appendChild(gradient);\n            return \"url(#\".concat(shadingId, \")\");\n\n          case \"Mesh\":\n            (0, _util.warn)(\"Unimplemented pattern Mesh\");\n            return null;\n\n          case \"Dummy\":\n            return \"hotpink\";\n\n          default:\n            throw new Error(\"Unknown IR type: \".concat(args[0]));\n        }\n      }\n    }, {\n      key: \"setDash\",\n      value: function setDash(dashArray, dashPhase) {\n        this.current.dashArray = dashArray;\n        this.current.dashPhase = dashPhase;\n      }\n    }, {\n      key: \"constructPath\",\n      value: function constructPath(ops, args) {\n        var current = this.current;\n        var x = current.x,\n            y = current.y;\n        var d = [];\n        var j = 0;\n\n        var _iterator6 = _createForOfIteratorHelper(ops),\n            _step6;\n\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var op = _step6.value;\n\n            switch (op | 0) {\n              case _util.OPS.rectangle:\n                x = args[j++];\n                y = args[j++];\n                var width = args[j++];\n                var height = args[j++];\n                var xw = x + width;\n                var yh = y + height;\n                d.push(\"M\", pf(x), pf(y), \"L\", pf(xw), pf(y), \"L\", pf(xw), pf(yh), \"L\", pf(x), pf(yh), \"Z\");\n                break;\n\n              case _util.OPS.moveTo:\n                x = args[j++];\n                y = args[j++];\n                d.push(\"M\", pf(x), pf(y));\n                break;\n\n              case _util.OPS.lineTo:\n                x = args[j++];\n                y = args[j++];\n                d.push(\"L\", pf(x), pf(y));\n                break;\n\n              case _util.OPS.curveTo:\n                x = args[j + 4];\n                y = args[j + 5];\n                d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));\n                j += 6;\n                break;\n\n              case _util.OPS.curveTo2:\n                d.push(\"C\", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));\n                x = args[j + 2];\n                y = args[j + 3];\n                j += 4;\n                break;\n\n              case _util.OPS.curveTo3:\n                x = args[j + 2];\n                y = args[j + 3];\n                d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));\n                j += 4;\n                break;\n\n              case _util.OPS.closePath:\n                d.push(\"Z\");\n                break;\n            }\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n\n        d = d.join(\" \");\n\n        if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {\n          d = current.path.getAttributeNS(null, \"d\") + d;\n        } else {\n          current.path = this.svgFactory.createElement(\"svg:path\");\n\n          this._ensureTransformGroup().appendChild(current.path);\n        }\n\n        current.path.setAttributeNS(null, \"d\", d);\n        current.path.setAttributeNS(null, \"fill\", \"none\");\n        current.element = current.path;\n        current.setCurrentPoint(x, y);\n      }\n    }, {\n      key: \"endPath\",\n      value: function endPath() {\n        var current = this.current;\n        current.path = null;\n\n        if (!this.pendingClip) {\n          return;\n        }\n\n        if (!current.element) {\n          this.pendingClip = null;\n          return;\n        }\n\n        var clipId = \"clippath\".concat(clipCount++);\n        var clipPath = this.svgFactory.createElement(\"svg:clipPath\");\n        clipPath.setAttributeNS(null, \"id\", clipId);\n        clipPath.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\n        var clipElement = current.element.cloneNode(true);\n\n        if (this.pendingClip === \"evenodd\") {\n          clipElement.setAttributeNS(null, \"clip-rule\", \"evenodd\");\n        } else {\n          clipElement.setAttributeNS(null, \"clip-rule\", \"nonzero\");\n        }\n\n        this.pendingClip = null;\n        clipPath.appendChild(clipElement);\n        this.defs.appendChild(clipPath);\n\n        if (current.activeClipUrl) {\n          current.clipGroup = null;\n\n          var _iterator7 = _createForOfIteratorHelper(this.extraStack),\n              _step7;\n\n          try {\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n              var prev = _step7.value;\n              prev.clipGroup = null;\n            }\n          } catch (err) {\n            _iterator7.e(err);\n          } finally {\n            _iterator7.f();\n          }\n\n          clipPath.setAttributeNS(null, \"clip-path\", current.activeClipUrl);\n        }\n\n        current.activeClipUrl = \"url(#\".concat(clipId, \")\");\n        this.tgrp = null;\n      }\n    }, {\n      key: \"clip\",\n      value: function clip(type) {\n        this.pendingClip = type;\n      }\n    }, {\n      key: \"closePath\",\n      value: function closePath() {\n        var current = this.current;\n\n        if (current.path) {\n          var d = \"\".concat(current.path.getAttributeNS(null, \"d\"), \"Z\");\n          current.path.setAttributeNS(null, \"d\", d);\n        }\n      }\n    }, {\n      key: \"setLeading\",\n      value: function setLeading(leading) {\n        this.current.leading = -leading;\n      }\n    }, {\n      key: \"setTextRise\",\n      value: function setTextRise(textRise) {\n        this.current.textRise = textRise;\n      }\n    }, {\n      key: \"setTextRenderingMode\",\n      value: function setTextRenderingMode(textRenderingMode) {\n        this.current.textRenderingMode = textRenderingMode;\n      }\n    }, {\n      key: \"setHScale\",\n      value: function setHScale(scale) {\n        this.current.textHScale = scale / 100;\n      }\n    }, {\n      key: \"setRenderingIntent\",\n      value: function setRenderingIntent(intent) {}\n    }, {\n      key: \"setFlatness\",\n      value: function setFlatness(flatness) {}\n    }, {\n      key: \"setGState\",\n      value: function setGState(states) {\n        var _iterator8 = _createForOfIteratorHelper(states),\n            _step8;\n\n        try {\n          for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n            var _step8$value = _slicedToArray(_step8.value, 2),\n                key = _step8$value[0],\n                value = _step8$value[1];\n\n            switch (key) {\n              case \"LW\":\n                this.setLineWidth(value);\n                break;\n\n              case \"LC\":\n                this.setLineCap(value);\n                break;\n\n              case \"LJ\":\n                this.setLineJoin(value);\n                break;\n\n              case \"ML\":\n                this.setMiterLimit(value);\n                break;\n\n              case \"D\":\n                this.setDash(value[0], value[1]);\n                break;\n\n              case \"RI\":\n                this.setRenderingIntent(value);\n                break;\n\n              case \"FL\":\n                this.setFlatness(value);\n                break;\n\n              case \"Font\":\n                this.setFont(value);\n                break;\n\n              case \"CA\":\n                this.setStrokeAlpha(value);\n                break;\n\n              case \"ca\":\n                this.setFillAlpha(value);\n                break;\n\n              default:\n                (0, _util.warn)(\"Unimplemented graphic state operator \".concat(key));\n                break;\n            }\n          }\n        } catch (err) {\n          _iterator8.e(err);\n        } finally {\n          _iterator8.f();\n        }\n      }\n    }, {\n      key: \"fill\",\n      value: function fill() {\n        var current = this.current;\n\n        if (current.element) {\n          current.element.setAttributeNS(null, \"fill\", current.fillColor);\n          current.element.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\n          this.endPath();\n        }\n      }\n    }, {\n      key: \"stroke\",\n      value: function stroke() {\n        var current = this.current;\n\n        if (current.element) {\n          this._setStrokeAttributes(current.element);\n\n          current.element.setAttributeNS(null, \"fill\", \"none\");\n          this.endPath();\n        }\n      }\n    }, {\n      key: \"_setStrokeAttributes\",\n      value: function _setStrokeAttributes(element) {\n        var lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n        var current = this.current;\n        var dashArray = current.dashArray;\n\n        if (lineWidthScale !== 1 && dashArray.length > 0) {\n          dashArray = dashArray.map(function (value) {\n            return lineWidthScale * value;\n          });\n        }\n\n        element.setAttributeNS(null, \"stroke\", current.strokeColor);\n        element.setAttributeNS(null, \"stroke-opacity\", current.strokeAlpha);\n        element.setAttributeNS(null, \"stroke-miterlimit\", pf(current.miterLimit));\n        element.setAttributeNS(null, \"stroke-linecap\", current.lineCap);\n        element.setAttributeNS(null, \"stroke-linejoin\", current.lineJoin);\n        element.setAttributeNS(null, \"stroke-width\", pf(lineWidthScale * current.lineWidth) + \"px\");\n        element.setAttributeNS(null, \"stroke-dasharray\", dashArray.map(pf).join(\" \"));\n        element.setAttributeNS(null, \"stroke-dashoffset\", pf(lineWidthScale * current.dashPhase) + \"px\");\n      }\n    }, {\n      key: \"eoFill\",\n      value: function eoFill() {\n        if (this.current.element) {\n          this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\n        }\n\n        this.fill();\n      }\n    }, {\n      key: \"fillStroke\",\n      value: function fillStroke() {\n        this.stroke();\n        this.fill();\n      }\n    }, {\n      key: \"eoFillStroke\",\n      value: function eoFillStroke() {\n        if (this.current.element) {\n          this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\n        }\n\n        this.fillStroke();\n      }\n    }, {\n      key: \"closeStroke\",\n      value: function closeStroke() {\n        this.closePath();\n        this.stroke();\n      }\n    }, {\n      key: \"closeFillStroke\",\n      value: function closeFillStroke() {\n        this.closePath();\n        this.fillStroke();\n      }\n    }, {\n      key: \"closeEOFillStroke\",\n      value: function closeEOFillStroke() {\n        this.closePath();\n        this.eoFillStroke();\n      }\n    }, {\n      key: \"paintSolidColorImageMask\",\n      value: function paintSolidColorImageMask() {\n        var rect = this.svgFactory.createElement(\"svg:rect\");\n        rect.setAttributeNS(null, \"x\", \"0\");\n        rect.setAttributeNS(null, \"y\", \"0\");\n        rect.setAttributeNS(null, \"width\", \"1px\");\n        rect.setAttributeNS(null, \"height\", \"1px\");\n        rect.setAttributeNS(null, \"fill\", this.current.fillColor);\n\n        this._ensureTransformGroup().appendChild(rect);\n      }\n    }, {\n      key: \"paintImageXObject\",\n      value: function paintImageXObject(objId) {\n        var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\n\n        if (!imgData) {\n          (0, _util.warn)(\"Dependent image with object ID \".concat(objId, \" is not ready yet\"));\n          return;\n        }\n\n        this.paintInlineImageXObject(imgData);\n      }\n    }, {\n      key: \"paintInlineImageXObject\",\n      value: function paintInlineImageXObject(imgData, mask) {\n        var width = imgData.width;\n        var height = imgData.height;\n        var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);\n        var cliprect = this.svgFactory.createElement(\"svg:rect\");\n        cliprect.setAttributeNS(null, \"x\", \"0\");\n        cliprect.setAttributeNS(null, \"y\", \"0\");\n        cliprect.setAttributeNS(null, \"width\", pf(width));\n        cliprect.setAttributeNS(null, \"height\", pf(height));\n        this.current.element = cliprect;\n        this.clip(\"nonzero\");\n        var imgEl = this.svgFactory.createElement(\"svg:image\");\n        imgEl.setAttributeNS(XLINK_NS, \"xlink:href\", imgSrc);\n        imgEl.setAttributeNS(null, \"x\", \"0\");\n        imgEl.setAttributeNS(null, \"y\", pf(-height));\n        imgEl.setAttributeNS(null, \"width\", pf(width) + \"px\");\n        imgEl.setAttributeNS(null, \"height\", pf(height) + \"px\");\n        imgEl.setAttributeNS(null, \"transform\", \"scale(\".concat(pf(1 / width), \" \").concat(pf(-1 / height), \")\"));\n\n        if (mask) {\n          mask.appendChild(imgEl);\n        } else {\n          this._ensureTransformGroup().appendChild(imgEl);\n        }\n      }\n    }, {\n      key: \"paintImageMaskXObject\",\n      value: function paintImageMaskXObject(imgData) {\n        var current = this.current;\n        var width = imgData.width;\n        var height = imgData.height;\n        var fillColor = current.fillColor;\n        current.maskId = \"mask\".concat(maskCount++);\n        var mask = this.svgFactory.createElement(\"svg:mask\");\n        mask.setAttributeNS(null, \"id\", current.maskId);\n        var rect = this.svgFactory.createElement(\"svg:rect\");\n        rect.setAttributeNS(null, \"x\", \"0\");\n        rect.setAttributeNS(null, \"y\", \"0\");\n        rect.setAttributeNS(null, \"width\", pf(width));\n        rect.setAttributeNS(null, \"height\", pf(height));\n        rect.setAttributeNS(null, \"fill\", fillColor);\n        rect.setAttributeNS(null, \"mask\", \"url(#\".concat(current.maskId, \")\"));\n        this.defs.appendChild(mask);\n\n        this._ensureTransformGroup().appendChild(rect);\n\n        this.paintInlineImageXObject(imgData, mask);\n      }\n    }, {\n      key: \"paintFormXObjectBegin\",\n      value: function paintFormXObjectBegin(matrix, bbox) {\n        if (Array.isArray(matrix) && matrix.length === 6) {\n          this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n        }\n\n        if (bbox) {\n          var width = bbox[2] - bbox[0];\n          var height = bbox[3] - bbox[1];\n          var cliprect = this.svgFactory.createElement(\"svg:rect\");\n          cliprect.setAttributeNS(null, \"x\", bbox[0]);\n          cliprect.setAttributeNS(null, \"y\", bbox[1]);\n          cliprect.setAttributeNS(null, \"width\", pf(width));\n          cliprect.setAttributeNS(null, \"height\", pf(height));\n          this.current.element = cliprect;\n          this.clip(\"nonzero\");\n          this.endPath();\n        }\n      }\n    }, {\n      key: \"paintFormXObjectEnd\",\n      value: function paintFormXObjectEnd() {}\n    }, {\n      key: \"_initialize\",\n      value: function _initialize(viewport) {\n        var svg = this.svgFactory.create(viewport.width, viewport.height);\n        var definitions = this.svgFactory.createElement(\"svg:defs\");\n        svg.appendChild(definitions);\n        this.defs = definitions;\n        var rootGroup = this.svgFactory.createElement(\"svg:g\");\n        rootGroup.setAttributeNS(null, \"transform\", pm(viewport.transform));\n        svg.appendChild(rootGroup);\n        this.svg = rootGroup;\n        return svg;\n      }\n    }, {\n      key: \"_ensureClipGroup\",\n      value: function _ensureClipGroup() {\n        if (!this.current.clipGroup) {\n          var clipGroup = this.svgFactory.createElement(\"svg:g\");\n          clipGroup.setAttributeNS(null, \"clip-path\", this.current.activeClipUrl);\n          this.svg.appendChild(clipGroup);\n          this.current.clipGroup = clipGroup;\n        }\n\n        return this.current.clipGroup;\n      }\n    }, {\n      key: \"_ensureTransformGroup\",\n      value: function _ensureTransformGroup() {\n        if (!this.tgrp) {\n          this.tgrp = this.svgFactory.createElement(\"svg:g\");\n          this.tgrp.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\n\n          if (this.current.activeClipUrl) {\n            this._ensureClipGroup().appendChild(this.tgrp);\n          } else {\n            this.svg.appendChild(this.tgrp);\n          }\n        }\n\n        return this.tgrp;\n      }\n    }]);\n\n    return SVGGraphics;\n  }();\n}\n\n/***/ }),\n/* 153 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFNodeStream = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _network_utils = __w_pdfjs_require__(154);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n;\n\nvar fs = require(\"fs\");\n\nvar http = require(\"http\");\n\nvar https = require(\"https\");\n\nvar url = require(\"url\");\n\nvar fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\n\nfunction parseUrl(sourceUrl) {\n  var parsedUrl = url.parse(sourceUrl);\n\n  if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\n    return parsedUrl;\n  }\n\n  if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\n    return url.parse(\"file:///\".concat(sourceUrl));\n  }\n\n  if (!parsedUrl.host) {\n    parsedUrl.protocol = \"file:\";\n  }\n\n  return parsedUrl;\n}\n\nvar PDFNodeStream = /*#__PURE__*/function () {\n  function PDFNodeStream(source) {\n    _classCallCheck(this, PDFNodeStream);\n\n    this.source = source;\n    this.url = parseUrl(source.url);\n    this.isHttp = this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\n    this.isFsUrl = this.url.protocol === \"file:\";\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  _createClass(PDFNodeStream, [{\n    key: \"_progressiveDataLength\",\n    get: function get() {\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\n\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\n    }\n  }, {\n    key: \"getFullReader\",\n    value: function getFullReader() {\n      (0, _util.assert)(!this._fullRequestReader, \"PDFNodeStream.getFullReader can only be called once.\");\n      this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);\n      return this._fullRequestReader;\n    }\n  }, {\n    key: \"getRangeReader\",\n    value: function getRangeReader(start, end) {\n      if (end <= this._progressiveDataLength) {\n        return null;\n      }\n\n      var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);\n\n      this._rangeRequestReaders.push(rangeReader);\n\n      return rangeReader;\n    }\n  }, {\n    key: \"cancelAllRequests\",\n    value: function cancelAllRequests(reason) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader.cancel(reason);\n      }\n\n      var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var reader = _step.value;\n          reader.cancel(reason);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }]);\n\n  return PDFNodeStream;\n}();\n\nexports.PDFNodeStream = PDFNodeStream;\n\nvar BaseFullReader = /*#__PURE__*/function () {\n  function BaseFullReader(stream) {\n    _classCallCheck(this, BaseFullReader);\n\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    var source = stream.source;\n    this._contentLength = source.length;\n    this._loaded = 0;\n    this._filename = null;\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n    this._readableStream = null;\n    this._readCapability = (0, _util.createPromiseCapability)();\n    this._headersCapability = (0, _util.createPromiseCapability)();\n  }\n\n  _createClass(BaseFullReader, [{\n    key: \"headersReady\",\n    get: function get() {\n      return this._headersCapability.promise;\n    }\n  }, {\n    key: \"filename\",\n    get: function get() {\n      return this._filename;\n    }\n  }, {\n    key: \"contentLength\",\n    get: function get() {\n      return this._contentLength;\n    }\n  }, {\n    key: \"isRangeSupported\",\n    get: function get() {\n      return this._isRangeSupported;\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._isStreamingSupported;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n        var chunk, buffer;\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this._readCapability.promise;\n\n              case 2:\n                if (!this._done) {\n                  _context.next = 4;\n                  break;\n                }\n\n                return _context.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 4:\n                if (!this._storedError) {\n                  _context.next = 6;\n                  break;\n                }\n\n                throw this._storedError;\n\n              case 6:\n                chunk = this._readableStream.read();\n\n                if (!(chunk === null)) {\n                  _context.next = 10;\n                  break;\n                }\n\n                this._readCapability = (0, _util.createPromiseCapability)();\n                return _context.abrupt(\"return\", this.read());\n\n              case 10:\n                this._loaded += chunk.length;\n\n                if (this.onProgress) {\n                  this.onProgress({\n                    loaded: this._loaded,\n                    total: this._contentLength\n                  });\n                }\n\n                buffer = new Uint8Array(chunk).buffer;\n                return _context.abrupt(\"return\", {\n                  value: buffer,\n                  done: false\n                });\n\n              case 14:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function read() {\n        return _read.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      if (!this._readableStream) {\n        this._error(reason);\n\n        return;\n      }\n\n      this._readableStream.destroy(reason);\n    }\n  }, {\n    key: \"_error\",\n    value: function _error(reason) {\n      this._storedError = reason;\n\n      this._readCapability.resolve();\n    }\n  }, {\n    key: \"_setReadableStream\",\n    value: function _setReadableStream(readableStream) {\n      var _this = this;\n\n      this._readableStream = readableStream;\n      readableStream.on(\"readable\", function () {\n        _this._readCapability.resolve();\n      });\n      readableStream.on(\"end\", function () {\n        readableStream.destroy();\n        _this._done = true;\n\n        _this._readCapability.resolve();\n      });\n      readableStream.on(\"error\", function (reason) {\n        _this._error(reason);\n      });\n\n      if (!this._isStreamingSupported && this._isRangeSupported) {\n        this._error(new _util.AbortException(\"streaming is disabled\"));\n      }\n\n      if (this._storedError) {\n        this._readableStream.destroy(this._storedError);\n      }\n    }\n  }]);\n\n  return BaseFullReader;\n}();\n\nvar BaseRangeReader = /*#__PURE__*/function () {\n  function BaseRangeReader(stream) {\n    _classCallCheck(this, BaseRangeReader);\n\n    this._url = stream.url;\n    this._done = false;\n    this._storedError = null;\n    this.onProgress = null;\n    this._loaded = 0;\n    this._readableStream = null;\n    this._readCapability = (0, _util.createPromiseCapability)();\n    var source = stream.source;\n    this._isStreamingSupported = !source.disableStream;\n  }\n\n  _createClass(BaseRangeReader, [{\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._isStreamingSupported;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n        var chunk, buffer;\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this._readCapability.promise;\n\n              case 2:\n                if (!this._done) {\n                  _context2.next = 4;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 4:\n                if (!this._storedError) {\n                  _context2.next = 6;\n                  break;\n                }\n\n                throw this._storedError;\n\n              case 6:\n                chunk = this._readableStream.read();\n\n                if (!(chunk === null)) {\n                  _context2.next = 10;\n                  break;\n                }\n\n                this._readCapability = (0, _util.createPromiseCapability)();\n                return _context2.abrupt(\"return\", this.read());\n\n              case 10:\n                this._loaded += chunk.length;\n\n                if (this.onProgress) {\n                  this.onProgress({\n                    loaded: this._loaded\n                  });\n                }\n\n                buffer = new Uint8Array(chunk).buffer;\n                return _context2.abrupt(\"return\", {\n                  value: buffer,\n                  done: false\n                });\n\n              case 14:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function read() {\n        return _read2.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      if (!this._readableStream) {\n        this._error(reason);\n\n        return;\n      }\n\n      this._readableStream.destroy(reason);\n    }\n  }, {\n    key: \"_error\",\n    value: function _error(reason) {\n      this._storedError = reason;\n\n      this._readCapability.resolve();\n    }\n  }, {\n    key: \"_setReadableStream\",\n    value: function _setReadableStream(readableStream) {\n      var _this2 = this;\n\n      this._readableStream = readableStream;\n      readableStream.on(\"readable\", function () {\n        _this2._readCapability.resolve();\n      });\n      readableStream.on(\"end\", function () {\n        readableStream.destroy();\n        _this2._done = true;\n\n        _this2._readCapability.resolve();\n      });\n      readableStream.on(\"error\", function (reason) {\n        _this2._error(reason);\n      });\n\n      if (this._storedError) {\n        this._readableStream.destroy(this._storedError);\n      }\n    }\n  }]);\n\n  return BaseRangeReader;\n}();\n\nfunction createRequestOptions(parsedUrl, headers) {\n  return {\n    protocol: parsedUrl.protocol,\n    auth: parsedUrl.auth,\n    host: parsedUrl.hostname,\n    port: parsedUrl.port,\n    path: parsedUrl.path,\n    method: \"GET\",\n    headers: headers\n  };\n}\n\nvar PDFNodeStreamFullReader = /*#__PURE__*/function (_BaseFullReader) {\n  _inherits(PDFNodeStreamFullReader, _BaseFullReader);\n\n  var _super = _createSuper(PDFNodeStreamFullReader);\n\n  function PDFNodeStreamFullReader(stream) {\n    var _this3;\n\n    _classCallCheck(this, PDFNodeStreamFullReader);\n\n    _this3 = _super.call(this, stream);\n\n    var handleResponse = function handleResponse(response) {\n      if (response.statusCode === 404) {\n        var error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(_this3._url, \"\\\".\"));\n        _this3._storedError = error;\n\n        _this3._headersCapability.reject(error);\n\n        return;\n      }\n\n      _this3._headersCapability.resolve();\n\n      _this3._setReadableStream(response);\n\n      var getResponseHeader = function getResponseHeader(name) {\n        return _this3._readableStream.headers[name.toLowerCase()];\n      };\n\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\n        getResponseHeader: getResponseHeader,\n        isHttp: stream.isHttp,\n        rangeChunkSize: _this3._rangeChunkSize,\n        disableRange: _this3._disableRange\n      }),\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\n          suggestedLength = _validateRangeRequest.suggestedLength;\n\n      _this3._isRangeSupported = allowRangeRequests;\n      _this3._contentLength = suggestedLength || _this3._contentLength;\n      _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n    };\n\n    _this3._request = null;\n\n    if (_this3._url.protocol === \"http:\") {\n      _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);\n    } else {\n      _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);\n    }\n\n    _this3._request.on(\"error\", function (reason) {\n      _this3._storedError = reason;\n\n      _this3._headersCapability.reject(reason);\n    });\n\n    _this3._request.end();\n\n    return _this3;\n  }\n\n  return PDFNodeStreamFullReader;\n}(BaseFullReader);\n\nvar PDFNodeStreamRangeReader = /*#__PURE__*/function (_BaseRangeReader) {\n  _inherits(PDFNodeStreamRangeReader, _BaseRangeReader);\n\n  var _super2 = _createSuper(PDFNodeStreamRangeReader);\n\n  function PDFNodeStreamRangeReader(stream, start, end) {\n    var _this4;\n\n    _classCallCheck(this, PDFNodeStreamRangeReader);\n\n    _this4 = _super2.call(this, stream);\n    _this4._httpHeaders = {};\n\n    for (var property in stream.httpHeaders) {\n      var value = stream.httpHeaders[property];\n\n      if (typeof value === \"undefined\") {\n        continue;\n      }\n\n      _this4._httpHeaders[property] = value;\n    }\n\n    _this4._httpHeaders.Range = \"bytes=\".concat(start, \"-\").concat(end - 1);\n\n    var handleResponse = function handleResponse(response) {\n      if (response.statusCode === 404) {\n        var error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(_this4._url, \"\\\".\"));\n        _this4._storedError = error;\n        return;\n      }\n\n      _this4._setReadableStream(response);\n    };\n\n    _this4._request = null;\n\n    if (_this4._url.protocol === \"http:\") {\n      _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);\n    } else {\n      _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);\n    }\n\n    _this4._request.on(\"error\", function (reason) {\n      _this4._storedError = reason;\n    });\n\n    _this4._request.end();\n\n    return _this4;\n  }\n\n  return PDFNodeStreamRangeReader;\n}(BaseRangeReader);\n\nvar PDFNodeStreamFsFullReader = /*#__PURE__*/function (_BaseFullReader2) {\n  _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2);\n\n  var _super3 = _createSuper(PDFNodeStreamFsFullReader);\n\n  function PDFNodeStreamFsFullReader(stream) {\n    var _this5;\n\n    _classCallCheck(this, PDFNodeStreamFsFullReader);\n\n    _this5 = _super3.call(this, stream);\n    var path = decodeURIComponent(_this5._url.path);\n\n    if (fileUriRegex.test(_this5._url.href)) {\n      path = path.replace(/^\\//, \"\");\n    }\n\n    fs.lstat(path, function (error, stat) {\n      if (error) {\n        if (error.code === \"ENOENT\") {\n          error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(path, \"\\\".\"));\n        }\n\n        _this5._storedError = error;\n\n        _this5._headersCapability.reject(error);\n\n        return;\n      }\n\n      _this5._contentLength = stat.size;\n\n      _this5._setReadableStream(fs.createReadStream(path));\n\n      _this5._headersCapability.resolve();\n    });\n    return _this5;\n  }\n\n  return PDFNodeStreamFsFullReader;\n}(BaseFullReader);\n\nvar PDFNodeStreamFsRangeReader = /*#__PURE__*/function (_BaseRangeReader2) {\n  _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2);\n\n  var _super4 = _createSuper(PDFNodeStreamFsRangeReader);\n\n  function PDFNodeStreamFsRangeReader(stream, start, end) {\n    var _this6;\n\n    _classCallCheck(this, PDFNodeStreamFsRangeReader);\n\n    _this6 = _super4.call(this, stream);\n    var path = decodeURIComponent(_this6._url.path);\n\n    if (fileUriRegex.test(_this6._url.href)) {\n      path = path.replace(/^\\//, \"\");\n    }\n\n    _this6._setReadableStream(fs.createReadStream(path, {\n      start: start,\n      end: end - 1\n    }));\n\n    return _this6;\n  }\n\n  return PDFNodeStreamFsRangeReader;\n}(BaseRangeReader);\n\n/***/ }),\n/* 154 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.createResponseStatusError = createResponseStatusError;\nexports.extractFilenameFromHeader = extractFilenameFromHeader;\nexports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;\nexports.validateResponseStatus = validateResponseStatus;\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _content_disposition = __w_pdfjs_require__(155);\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nfunction validateRangeRequestCapabilities(_ref) {\n  var getResponseHeader = _ref.getResponseHeader,\n      isHttp = _ref.isHttp,\n      rangeChunkSize = _ref.rangeChunkSize,\n      disableRange = _ref.disableRange;\n  (0, _util.assert)(rangeChunkSize > 0, \"Range chunk size must be larger than zero\");\n  var returnValues = {\n    allowRangeRequests: false,\n    suggestedLength: undefined\n  };\n  var length = parseInt(getResponseHeader(\"Content-Length\"), 10);\n\n  if (!Number.isInteger(length)) {\n    return returnValues;\n  }\n\n  returnValues.suggestedLength = length;\n\n  if (length <= 2 * rangeChunkSize) {\n    return returnValues;\n  }\n\n  if (disableRange || !isHttp) {\n    return returnValues;\n  }\n\n  if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\n    return returnValues;\n  }\n\n  var contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\n\n  if (contentEncoding !== \"identity\") {\n    return returnValues;\n  }\n\n  returnValues.allowRangeRequests = true;\n  return returnValues;\n}\n\nfunction extractFilenameFromHeader(getResponseHeader) {\n  var contentDisposition = getResponseHeader(\"Content-Disposition\");\n\n  if (contentDisposition) {\n    var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);\n\n    if (filename.includes(\"%\")) {\n      try {\n        filename = decodeURIComponent(filename);\n      } catch (ex) {}\n    }\n\n    if ((0, _display_utils.isPdfFile)(filename)) {\n      return filename;\n    }\n  }\n\n  return null;\n}\n\nfunction createResponseStatusError(status, url) {\n  if (status === 404 || status === 0 && url.startsWith(\"file:\")) {\n    return new _util.MissingPDFException('Missing PDF \"' + url + '\".');\n  }\n\n  return new _util.UnexpectedResponseException(\"Unexpected server response (\".concat(status, \") while retrieving PDF \\\"\").concat(url, \"\\\".\"), status);\n}\n\nfunction validateResponseStatus(status) {\n  return status === 200 || status === 206;\n}\n\n/***/ }),\n/* 155 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;\n\nvar _util = __w_pdfjs_require__(4);\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n  var needsEncodingFixup = true;\n  var tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n\n  if (tmp) {\n    tmp = tmp[1];\n    var filename = rfc2616unquote(tmp);\n    filename = unescape(filename);\n    filename = rfc5987decode(filename);\n    filename = rfc2047decode(filename);\n    return fixupEncoding(filename);\n  }\n\n  tmp = rfc2231getparam(contentDisposition);\n\n  if (tmp) {\n    var _filename = rfc2047decode(tmp);\n\n    return fixupEncoding(_filename);\n  }\n\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n\n  if (tmp) {\n    tmp = tmp[1];\n\n    var _filename2 = rfc2616unquote(tmp);\n\n    _filename2 = rfc2047decode(_filename2);\n    return fixupEncoding(_filename2);\n  }\n\n  function toParamRegExp(attributePattern, flags) {\n    return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\n  }\n\n  function textdecode(encoding, value) {\n    if (encoding) {\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\n        return value;\n      }\n\n      try {\n        var decoder = new TextDecoder(encoding, {\n          fatal: true\n        });\n        var buffer = (0, _util.stringToBytes)(value);\n        value = decoder.decode(buffer);\n        needsEncodingFixup = false;\n      } catch (e) {\n        if (/^utf-?8$/i.test(encoding)) {\n          try {\n            value = decodeURIComponent(escape(value));\n            needsEncodingFixup = false;\n          } catch (err) {}\n        }\n      }\n    }\n\n    return value;\n  }\n\n  function fixupEncoding(value) {\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n      value = textdecode(\"utf-8\", value);\n\n      if (needsEncodingFixup) {\n        value = textdecode(\"iso-8859-1\", value);\n      }\n    }\n\n    return value;\n  }\n\n  function rfc2231getparam(contentDispositionStr) {\n    var matches = [];\n    var match;\n    var iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\n      var _match = match,\n          _match2 = _slicedToArray(_match, 4),\n          n = _match2[1],\n          quot = _match2[2],\n          part = _match2[3];\n\n      n = parseInt(n, 10);\n\n      if (n in matches) {\n        if (n === 0) {\n          break;\n        }\n\n        continue;\n      }\n\n      matches[n] = [quot, part];\n    }\n\n    var parts = [];\n\n    for (var _n2 = 0; _n2 < matches.length; ++_n2) {\n      if (!(_n2 in matches)) {\n        break;\n      }\n\n      var _matches$_n = _slicedToArray(matches[_n2], 2),\n          _quot = _matches$_n[0],\n          _part = _matches$_n[1];\n\n      _part = rfc2616unquote(_part);\n\n      if (_quot) {\n        _part = unescape(_part);\n\n        if (_n2 === 0) {\n          _part = rfc5987decode(_part);\n        }\n      }\n\n      parts.push(_part);\n    }\n\n    return parts.join(\"\");\n  }\n\n  function rfc2616unquote(value) {\n    if (value.startsWith('\"')) {\n      var parts = value.slice(1).split('\\\\\"');\n\n      for (var i = 0; i < parts.length; ++i) {\n        var quotindex = parts[i].indexOf('\"');\n\n        if (quotindex !== -1) {\n          parts[i] = parts[i].slice(0, quotindex);\n          parts.length = i + 1;\n        }\n\n        parts[i] = parts[i].replace(/\\\\(.)/g, \"$1\");\n      }\n\n      value = parts.join('\"');\n    }\n\n    return value;\n  }\n\n  function rfc5987decode(extvalue) {\n    var encodingend = extvalue.indexOf(\"'\");\n\n    if (encodingend === -1) {\n      return extvalue;\n    }\n\n    var encoding = extvalue.slice(0, encodingend);\n    var langvalue = extvalue.slice(encodingend + 1);\n    var value = langvalue.replace(/^[^']*'/, \"\");\n    return textdecode(encoding, value);\n  }\n\n  function rfc2047decode(value) {\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n      return value;\n    }\n\n    return value.replace(/=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g, function (matches, charset, encoding, text) {\n      if (encoding === \"q\" || encoding === \"Q\") {\n        text = text.replace(/_/g, \" \");\n        text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n          return String.fromCharCode(parseInt(hex, 16));\n        });\n        return textdecode(charset, text);\n      }\n\n      try {\n        text = atob(text);\n      } catch (e) {}\n\n      return textdecode(charset, text);\n    });\n  }\n\n  return \"\";\n}\n\n/***/ }),\n/* 156 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFNetworkStream = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _network_utils = __w_pdfjs_require__(154);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n;\nvar OK_RESPONSE = 200;\nvar PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n  var data = xhr.response;\n\n  if (typeof data !== \"string\") {\n    return data;\n  }\n\n  var array = (0, _util.stringToBytes)(data);\n  return array.buffer;\n}\n\nvar NetworkManager = /*#__PURE__*/function () {\n  function NetworkManager(url) {\n    var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, NetworkManager);\n\n    this.url = url;\n    this.isHttp = /^https?:/i.test(url);\n    this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);\n    this.withCredentials = args.withCredentials || false;\n\n    this.getXhr = args.getXhr || function NetworkManager_getXhr() {\n      return new XMLHttpRequest();\n    };\n\n    this.currXhrId = 0;\n    this.pendingRequests = Object.create(null);\n  }\n\n  _createClass(NetworkManager, [{\n    key: \"requestRange\",\n    value: function requestRange(begin, end, listeners) {\n      var args = {\n        begin: begin,\n        end: end\n      };\n\n      for (var prop in listeners) {\n        args[prop] = listeners[prop];\n      }\n\n      return this.request(args);\n    }\n  }, {\n    key: \"requestFull\",\n    value: function requestFull(listeners) {\n      return this.request(listeners);\n    }\n  }, {\n    key: \"request\",\n    value: function request(args) {\n      var xhr = this.getXhr();\n      var xhrId = this.currXhrId++;\n      var pendingRequest = this.pendingRequests[xhrId] = {\n        xhr: xhr\n      };\n      xhr.open(\"GET\", this.url);\n      xhr.withCredentials = this.withCredentials;\n\n      for (var property in this.httpHeaders) {\n        var value = this.httpHeaders[property];\n\n        if (typeof value === \"undefined\") {\n          continue;\n        }\n\n        xhr.setRequestHeader(property, value);\n      }\n\n      if (this.isHttp && \"begin\" in args && \"end\" in args) {\n        xhr.setRequestHeader(\"Range\", \"bytes=\".concat(args.begin, \"-\").concat(args.end - 1));\n        pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n      } else {\n        pendingRequest.expectedStatus = OK_RESPONSE;\n      }\n\n      xhr.responseType = \"arraybuffer\";\n\n      if (args.onError) {\n        xhr.onerror = function (evt) {\n          args.onError(xhr.status);\n        };\n      }\n\n      xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n      xhr.onprogress = this.onProgress.bind(this, xhrId);\n      pendingRequest.onHeadersReceived = args.onHeadersReceived;\n      pendingRequest.onDone = args.onDone;\n      pendingRequest.onError = args.onError;\n      pendingRequest.onProgress = args.onProgress;\n      xhr.send(null);\n      return xhrId;\n    }\n  }, {\n    key: \"onProgress\",\n    value: function onProgress(xhrId, evt) {\n      var _pendingRequest$onPro;\n\n      var pendingRequest = this.pendingRequests[xhrId];\n\n      if (!pendingRequest) {\n        return;\n      }\n\n      (_pendingRequest$onPro = pendingRequest.onProgress) === null || _pendingRequest$onPro === void 0 ? void 0 : _pendingRequest$onPro.call(pendingRequest, evt);\n    }\n  }, {\n    key: \"onStateChange\",\n    value: function onStateChange(xhrId, evt) {\n      var pendingRequest = this.pendingRequests[xhrId];\n\n      if (!pendingRequest) {\n        return;\n      }\n\n      var xhr = pendingRequest.xhr;\n\n      if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n        pendingRequest.onHeadersReceived();\n        delete pendingRequest.onHeadersReceived;\n      }\n\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      if (!(xhrId in this.pendingRequests)) {\n        return;\n      }\n\n      delete this.pendingRequests[xhrId];\n\n      if (xhr.status === 0 && this.isHttp) {\n        var _pendingRequest$onErr;\n\n        (_pendingRequest$onErr = pendingRequest.onError) === null || _pendingRequest$onErr === void 0 ? void 0 : _pendingRequest$onErr.call(pendingRequest, xhr.status);\n        return;\n      }\n\n      var xhrStatus = xhr.status || OK_RESPONSE;\n      var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n      if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {\n        var _pendingRequest$onErr2;\n\n        (_pendingRequest$onErr2 = pendingRequest.onError) === null || _pendingRequest$onErr2 === void 0 ? void 0 : _pendingRequest$onErr2.call(pendingRequest, xhr.status);\n        return;\n      }\n\n      var chunk = getArrayBuffer(xhr);\n\n      if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n        var rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n        var matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n        pendingRequest.onDone({\n          begin: parseInt(matches[1], 10),\n          chunk: chunk\n        });\n      } else if (chunk) {\n        pendingRequest.onDone({\n          begin: 0,\n          chunk: chunk\n        });\n      } else {\n        var _pendingRequest$onErr3;\n\n        (_pendingRequest$onErr3 = pendingRequest.onError) === null || _pendingRequest$onErr3 === void 0 ? void 0 : _pendingRequest$onErr3.call(pendingRequest, xhr.status);\n      }\n    }\n  }, {\n    key: \"getRequestXhr\",\n    value: function getRequestXhr(xhrId) {\n      return this.pendingRequests[xhrId].xhr;\n    }\n  }, {\n    key: \"isPendingRequest\",\n    value: function isPendingRequest(xhrId) {\n      return xhrId in this.pendingRequests;\n    }\n  }, {\n    key: \"abortRequest\",\n    value: function abortRequest(xhrId) {\n      var xhr = this.pendingRequests[xhrId].xhr;\n      delete this.pendingRequests[xhrId];\n      xhr.abort();\n    }\n  }]);\n\n  return NetworkManager;\n}();\n\nvar PDFNetworkStream = /*#__PURE__*/function () {\n  function PDFNetworkStream(source) {\n    _classCallCheck(this, PDFNetworkStream);\n\n    this._source = source;\n    this._manager = new NetworkManager(source.url, {\n      httpHeaders: source.httpHeaders,\n      withCredentials: source.withCredentials\n    });\n    this._rangeChunkSize = source.rangeChunkSize;\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  _createClass(PDFNetworkStream, [{\n    key: \"_onRangeRequestReaderClosed\",\n    value: function _onRangeRequestReaderClosed(reader) {\n      var i = this._rangeRequestReaders.indexOf(reader);\n\n      if (i >= 0) {\n        this._rangeRequestReaders.splice(i, 1);\n      }\n    }\n  }, {\n    key: \"getFullReader\",\n    value: function getFullReader() {\n      (0, _util.assert)(!this._fullRequestReader, \"PDFNetworkStream.getFullReader can only be called once.\");\n      this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);\n      return this._fullRequestReader;\n    }\n  }, {\n    key: \"getRangeReader\",\n    value: function getRangeReader(begin, end) {\n      var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);\n      reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n\n      this._rangeRequestReaders.push(reader);\n\n      return reader;\n    }\n  }, {\n    key: \"cancelAllRequests\",\n    value: function cancelAllRequests(reason) {\n      var _this$_fullRequestRea;\n\n      (_this$_fullRequestRea = this._fullRequestReader) === null || _this$_fullRequestRea === void 0 ? void 0 : _this$_fullRequestRea.cancel(reason);\n\n      var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var reader = _step.value;\n          reader.cancel(reason);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }]);\n\n  return PDFNetworkStream;\n}();\n\nexports.PDFNetworkStream = PDFNetworkStream;\n\nvar PDFNetworkStreamFullRequestReader = /*#__PURE__*/function () {\n  function PDFNetworkStreamFullRequestReader(manager, source) {\n    _classCallCheck(this, PDFNetworkStreamFullRequestReader);\n\n    this._manager = manager;\n    var args = {\n      onHeadersReceived: this._onHeadersReceived.bind(this),\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this)\n    };\n    this._url = source.url;\n    this._fullRequestId = manager.requestFull(args);\n    this._headersReceivedCapability = (0, _util.createPromiseCapability)();\n    this._disableRange = source.disableRange || false;\n    this._contentLength = source.length;\n    this._rangeChunkSize = source.rangeChunkSize;\n\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    this._isStreamingSupported = false;\n    this._isRangeSupported = false;\n    this._cachedChunks = [];\n    this._requests = [];\n    this._done = false;\n    this._storedError = undefined;\n    this._filename = null;\n    this.onProgress = null;\n  }\n\n  _createClass(PDFNetworkStreamFullRequestReader, [{\n    key: \"_onHeadersReceived\",\n    value: function _onHeadersReceived() {\n      var fullRequestXhrId = this._fullRequestId;\n\n      var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n      var getResponseHeader = function getResponseHeader(name) {\n        return fullRequestXhr.getResponseHeader(name);\n      };\n\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\n        getResponseHeader: getResponseHeader,\n        isHttp: this._manager.isHttp,\n        rangeChunkSize: this._rangeChunkSize,\n        disableRange: this._disableRange\n      }),\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\n          suggestedLength = _validateRangeRequest.suggestedLength;\n\n      if (allowRangeRequests) {\n        this._isRangeSupported = true;\n      }\n\n      this._contentLength = suggestedLength || this._contentLength;\n      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n\n      if (this._isRangeSupported) {\n        this._manager.abortRequest(fullRequestXhrId);\n      }\n\n      this._headersReceivedCapability.resolve();\n    }\n  }, {\n    key: \"_onDone\",\n    value: function _onDone(data) {\n      if (data) {\n        if (this._requests.length > 0) {\n          var requestCapability = this._requests.shift();\n\n          requestCapability.resolve({\n            value: data.chunk,\n            done: false\n          });\n        } else {\n          this._cachedChunks.push(data.chunk);\n        }\n      }\n\n      this._done = true;\n\n      if (this._cachedChunks.length > 0) {\n        return;\n      }\n\n      var _iterator2 = _createForOfIteratorHelper(this._requests),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var _requestCapability = _step2.value;\n\n          _requestCapability.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      this._requests.length = 0;\n    }\n  }, {\n    key: \"_onError\",\n    value: function _onError(status) {\n      this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);\n\n      this._headersReceivedCapability.reject(this._storedError);\n\n      var _iterator3 = _createForOfIteratorHelper(this._requests),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          var requestCapability = _step3.value;\n          requestCapability.reject(this._storedError);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      this._requests.length = 0;\n      this._cachedChunks.length = 0;\n    }\n  }, {\n    key: \"_onProgress\",\n    value: function _onProgress(evt) {\n      var _this$onProgress;\n\n      (_this$onProgress = this.onProgress) === null || _this$onProgress === void 0 ? void 0 : _this$onProgress.call(this, {\n        loaded: evt.loaded,\n        total: evt.lengthComputable ? evt.total : this._contentLength\n      });\n    }\n  }, {\n    key: \"filename\",\n    get: function get() {\n      return this._filename;\n    }\n  }, {\n    key: \"isRangeSupported\",\n    get: function get() {\n      return this._isRangeSupported;\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._isStreamingSupported;\n    }\n  }, {\n    key: \"contentLength\",\n    get: function get() {\n      return this._contentLength;\n    }\n  }, {\n    key: \"headersReady\",\n    get: function get() {\n      return this._headersReceivedCapability.promise;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n        var chunk, requestCapability;\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                if (!this._storedError) {\n                  _context.next = 2;\n                  break;\n                }\n\n                throw this._storedError;\n\n              case 2:\n                if (!(this._cachedChunks.length > 0)) {\n                  _context.next = 5;\n                  break;\n                }\n\n                chunk = this._cachedChunks.shift();\n                return _context.abrupt(\"return\", {\n                  value: chunk,\n                  done: false\n                });\n\n              case 5:\n                if (!this._done) {\n                  _context.next = 7;\n                  break;\n                }\n\n                return _context.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 7:\n                requestCapability = (0, _util.createPromiseCapability)();\n\n                this._requests.push(requestCapability);\n\n                return _context.abrupt(\"return\", requestCapability.promise);\n\n              case 10:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function read() {\n        return _read.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      this._done = true;\n\n      this._headersReceivedCapability.reject(reason);\n\n      var _iterator4 = _createForOfIteratorHelper(this._requests),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var requestCapability = _step4.value;\n          requestCapability.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n\n      this._requests.length = 0;\n\n      if (this._manager.isPendingRequest(this._fullRequestId)) {\n        this._manager.abortRequest(this._fullRequestId);\n      }\n\n      this._fullRequestReader = null;\n    }\n  }]);\n\n  return PDFNetworkStreamFullRequestReader;\n}();\n\nvar PDFNetworkStreamRangeRequestReader = /*#__PURE__*/function () {\n  function PDFNetworkStreamRangeRequestReader(manager, begin, end) {\n    _classCallCheck(this, PDFNetworkStreamRangeRequestReader);\n\n    this._manager = manager;\n    var args = {\n      onDone: this._onDone.bind(this),\n      onError: this._onError.bind(this),\n      onProgress: this._onProgress.bind(this)\n    };\n    this._url = manager.url;\n    this._requestId = manager.requestRange(begin, end, args);\n    this._requests = [];\n    this._queuedChunk = null;\n    this._done = false;\n    this._storedError = undefined;\n    this.onProgress = null;\n    this.onClosed = null;\n  }\n\n  _createClass(PDFNetworkStreamRangeRequestReader, [{\n    key: \"_close\",\n    value: function _close() {\n      var _this$onClosed;\n\n      (_this$onClosed = this.onClosed) === null || _this$onClosed === void 0 ? void 0 : _this$onClosed.call(this, this);\n    }\n  }, {\n    key: \"_onDone\",\n    value: function _onDone(data) {\n      var chunk = data.chunk;\n\n      if (this._requests.length > 0) {\n        var requestCapability = this._requests.shift();\n\n        requestCapability.resolve({\n          value: chunk,\n          done: false\n        });\n      } else {\n        this._queuedChunk = chunk;\n      }\n\n      this._done = true;\n\n      var _iterator5 = _createForOfIteratorHelper(this._requests),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var _requestCapability2 = _step5.value;\n\n          _requestCapability2.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n\n      this._requests.length = 0;\n\n      this._close();\n    }\n  }, {\n    key: \"_onError\",\n    value: function _onError(status) {\n      this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);\n\n      var _iterator6 = _createForOfIteratorHelper(this._requests),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var requestCapability = _step6.value;\n          requestCapability.reject(this._storedError);\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n\n      this._requests.length = 0;\n      this._queuedChunk = null;\n    }\n  }, {\n    key: \"_onProgress\",\n    value: function _onProgress(evt) {\n      if (!this.isStreamingSupported) {\n        var _this$onProgress2;\n\n        (_this$onProgress2 = this.onProgress) === null || _this$onProgress2 === void 0 ? void 0 : _this$onProgress2.call(this, {\n          loaded: evt.loaded\n        });\n      }\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return false;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n        var chunk, requestCapability;\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                if (!this._storedError) {\n                  _context2.next = 2;\n                  break;\n                }\n\n                throw this._storedError;\n\n              case 2:\n                if (!(this._queuedChunk !== null)) {\n                  _context2.next = 6;\n                  break;\n                }\n\n                chunk = this._queuedChunk;\n                this._queuedChunk = null;\n                return _context2.abrupt(\"return\", {\n                  value: chunk,\n                  done: false\n                });\n\n              case 6:\n                if (!this._done) {\n                  _context2.next = 8;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", {\n                  value: undefined,\n                  done: true\n                });\n\n              case 8:\n                requestCapability = (0, _util.createPromiseCapability)();\n\n                this._requests.push(requestCapability);\n\n                return _context2.abrupt(\"return\", requestCapability.promise);\n\n              case 11:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function read() {\n        return _read2.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      this._done = true;\n\n      var _iterator7 = _createForOfIteratorHelper(this._requests),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var requestCapability = _step7.value;\n          requestCapability.resolve({\n            value: undefined,\n            done: true\n          });\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n\n      this._requests.length = 0;\n\n      if (this._manager.isPendingRequest(this._requestId)) {\n        this._manager.abortRequest(this._requestId);\n      }\n\n      this._close();\n    }\n  }]);\n\n  return PDFNetworkStreamRangeRequestReader;\n}();\n\n/***/ }),\n/* 157 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.PDFFetchStream = void 0;\n\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _network_utils = __w_pdfjs_require__(154);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n;\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n  return {\n    method: \"GET\",\n    headers: headers,\n    signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal,\n    mode: \"cors\",\n    credentials: withCredentials ? \"include\" : \"same-origin\",\n    redirect: \"follow\"\n  };\n}\n\nfunction createHeaders(httpHeaders) {\n  var headers = new Headers();\n\n  for (var property in httpHeaders) {\n    var value = httpHeaders[property];\n\n    if (typeof value === \"undefined\") {\n      continue;\n    }\n\n    headers.append(property, value);\n  }\n\n  return headers;\n}\n\nvar PDFFetchStream = /*#__PURE__*/function () {\n  function PDFFetchStream(source) {\n    _classCallCheck(this, PDFFetchStream);\n\n    this.source = source;\n    this.isHttp = /^https?:/i.test(source.url);\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\n    this._fullRequestReader = null;\n    this._rangeRequestReaders = [];\n  }\n\n  _createClass(PDFFetchStream, [{\n    key: \"_progressiveDataLength\",\n    get: function get() {\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\n\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\n    }\n  }, {\n    key: \"getFullReader\",\n    value: function getFullReader() {\n      (0, _util.assert)(!this._fullRequestReader, \"PDFFetchStream.getFullReader can only be called once.\");\n      this._fullRequestReader = new PDFFetchStreamReader(this);\n      return this._fullRequestReader;\n    }\n  }, {\n    key: \"getRangeReader\",\n    value: function getRangeReader(begin, end) {\n      if (end <= this._progressiveDataLength) {\n        return null;\n      }\n\n      var reader = new PDFFetchStreamRangeReader(this, begin, end);\n\n      this._rangeRequestReaders.push(reader);\n\n      return reader;\n    }\n  }, {\n    key: \"cancelAllRequests\",\n    value: function cancelAllRequests(reason) {\n      if (this._fullRequestReader) {\n        this._fullRequestReader.cancel(reason);\n      }\n\n      var _iterator = _createForOfIteratorHelper(this._rangeRequestReaders.slice(0)),\n          _step;\n\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var reader = _step.value;\n          reader.cancel(reason);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }]);\n\n  return PDFFetchStream;\n}();\n\nexports.PDFFetchStream = PDFFetchStream;\n\nvar PDFFetchStreamReader = /*#__PURE__*/function () {\n  function PDFFetchStreamReader(stream) {\n    var _this = this;\n\n    _classCallCheck(this, PDFFetchStreamReader);\n\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    this._filename = null;\n    var source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._contentLength = source.length;\n    this._headersCapability = (0, _util.createPromiseCapability)();\n    this._disableRange = source.disableRange || false;\n    this._rangeChunkSize = source.rangeChunkSize;\n\n    if (!this._rangeChunkSize && !this._disableRange) {\n      this._disableRange = true;\n    }\n\n    if (typeof AbortController !== \"undefined\") {\n      this._abortController = new AbortController();\n    }\n\n    this._isStreamingSupported = !source.disableStream;\n    this._isRangeSupported = !source.disableRange;\n    this._headers = createHeaders(this._stream.httpHeaders);\n    var url = source.url;\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {\n      if (!(0, _network_utils.validateResponseStatus)(response.status)) {\n        throw (0, _network_utils.createResponseStatusError)(response.status, url);\n      }\n\n      _this._reader = response.body.getReader();\n\n      _this._headersCapability.resolve();\n\n      var getResponseHeader = function getResponseHeader(name) {\n        return response.headers.get(name);\n      };\n\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\n        getResponseHeader: getResponseHeader,\n        isHttp: _this._stream.isHttp,\n        rangeChunkSize: _this._rangeChunkSize,\n        disableRange: _this._disableRange\n      }),\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\n          suggestedLength = _validateRangeRequest.suggestedLength;\n\n      _this._isRangeSupported = allowRangeRequests;\n      _this._contentLength = suggestedLength || _this._contentLength;\n      _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\n\n      if (!_this._isStreamingSupported && _this._isRangeSupported) {\n        _this.cancel(new _util.AbortException(\"Streaming is disabled.\"));\n      }\n    })[\"catch\"](this._headersCapability.reject);\n    this.onProgress = null;\n  }\n\n  _createClass(PDFFetchStreamReader, [{\n    key: \"headersReady\",\n    get: function get() {\n      return this._headersCapability.promise;\n    }\n  }, {\n    key: \"filename\",\n    get: function get() {\n      return this._filename;\n    }\n  }, {\n    key: \"contentLength\",\n    get: function get() {\n      return this._contentLength;\n    }\n  }, {\n    key: \"isRangeSupported\",\n    get: function get() {\n      return this._isRangeSupported;\n    }\n  }, {\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._isStreamingSupported;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n        var _yield$this$_reader$r, value, done, buffer;\n\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this._headersCapability.promise;\n\n              case 2:\n                _context.next = 4;\n                return this._reader.read();\n\n              case 4:\n                _yield$this$_reader$r = _context.sent;\n                value = _yield$this$_reader$r.value;\n                done = _yield$this$_reader$r.done;\n\n                if (!done) {\n                  _context.next = 9;\n                  break;\n                }\n\n                return _context.abrupt(\"return\", {\n                  value: value,\n                  done: done\n                });\n\n              case 9:\n                this._loaded += value.byteLength;\n\n                if (this.onProgress) {\n                  this.onProgress({\n                    loaded: this._loaded,\n                    total: this._contentLength\n                  });\n                }\n\n                buffer = new Uint8Array(value).buffer;\n                return _context.abrupt(\"return\", {\n                  value: buffer,\n                  done: false\n                });\n\n              case 13:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function read() {\n        return _read.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      if (this._reader) {\n        this._reader.cancel(reason);\n      }\n\n      if (this._abortController) {\n        this._abortController.abort();\n      }\n    }\n  }]);\n\n  return PDFFetchStreamReader;\n}();\n\nvar PDFFetchStreamRangeReader = /*#__PURE__*/function () {\n  function PDFFetchStreamRangeReader(stream, begin, end) {\n    var _this2 = this;\n\n    _classCallCheck(this, PDFFetchStreamRangeReader);\n\n    this._stream = stream;\n    this._reader = null;\n    this._loaded = 0;\n    var source = stream.source;\n    this._withCredentials = source.withCredentials || false;\n    this._readCapability = (0, _util.createPromiseCapability)();\n    this._isStreamingSupported = !source.disableStream;\n\n    if (typeof AbortController !== \"undefined\") {\n      this._abortController = new AbortController();\n    }\n\n    this._headers = createHeaders(this._stream.httpHeaders);\n\n    this._headers.append(\"Range\", \"bytes=\".concat(begin, \"-\").concat(end - 1));\n\n    var url = source.url;\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {\n      if (!(0, _network_utils.validateResponseStatus)(response.status)) {\n        throw (0, _network_utils.createResponseStatusError)(response.status, url);\n      }\n\n      _this2._readCapability.resolve();\n\n      _this2._reader = response.body.getReader();\n    })[\"catch\"](this._readCapability.reject);\n    this.onProgress = null;\n  }\n\n  _createClass(PDFFetchStreamRangeReader, [{\n    key: \"isStreamingSupported\",\n    get: function get() {\n      return this._isStreamingSupported;\n    }\n  }, {\n    key: \"read\",\n    value: function () {\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n        var _yield$this$_reader$r2, value, done, buffer;\n\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this._readCapability.promise;\n\n              case 2:\n                _context2.next = 4;\n                return this._reader.read();\n\n              case 4:\n                _yield$this$_reader$r2 = _context2.sent;\n                value = _yield$this$_reader$r2.value;\n                done = _yield$this$_reader$r2.done;\n\n                if (!done) {\n                  _context2.next = 9;\n                  break;\n                }\n\n                return _context2.abrupt(\"return\", {\n                  value: value,\n                  done: done\n                });\n\n              case 9:\n                this._loaded += value.byteLength;\n\n                if (this.onProgress) {\n                  this.onProgress({\n                    loaded: this._loaded\n                  });\n                }\n\n                buffer = new Uint8Array(value).buffer;\n                return _context2.abrupt(\"return\", {\n                  value: buffer,\n                  done: false\n                });\n\n              case 13:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function read() {\n        return _read2.apply(this, arguments);\n      }\n\n      return read;\n    }()\n  }, {\n    key: \"cancel\",\n    value: function cancel(reason) {\n      if (this._reader) {\n        this._reader.cancel(reason);\n      }\n\n      if (this._abortController) {\n        this._abortController.abort();\n      }\n    }\n  }]);\n\n  return PDFFetchStreamRangeReader;\n}();\n\n/***/ })\n/******/ \t]);\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t(() => {\n/******/ \t\t__w_pdfjs_require__.nmd = (module) => {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n(() => {\n\"use strict\";\nvar exports = __webpack_exports__;\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nObject.defineProperty(exports, \"AnnotationLayer\", ({\n  enumerable: true,\n  get: function get() {\n    return _annotation_layer.AnnotationLayer;\n  }\n}));\nObject.defineProperty(exports, \"AnnotationMode\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.AnnotationMode;\n  }\n}));\nObject.defineProperty(exports, \"CMapCompressionType\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.CMapCompressionType;\n  }\n}));\nObject.defineProperty(exports, \"GlobalWorkerOptions\", ({\n  enumerable: true,\n  get: function get() {\n    return _worker_options.GlobalWorkerOptions;\n  }\n}));\nObject.defineProperty(exports, \"InvalidPDFException\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.InvalidPDFException;\n  }\n}));\nObject.defineProperty(exports, \"LinkTarget\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.LinkTarget;\n  }\n}));\nObject.defineProperty(exports, \"LoopbackPort\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.LoopbackPort;\n  }\n}));\nObject.defineProperty(exports, \"MissingPDFException\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.MissingPDFException;\n  }\n}));\nObject.defineProperty(exports, \"OPS\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.OPS;\n  }\n}));\nObject.defineProperty(exports, \"PDFDataRangeTransport\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.PDFDataRangeTransport;\n  }\n}));\nObject.defineProperty(exports, \"PDFDateString\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.PDFDateString;\n  }\n}));\nObject.defineProperty(exports, \"PDFWorker\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.PDFWorker;\n  }\n}));\nObject.defineProperty(exports, \"PasswordResponses\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.PasswordResponses;\n  }\n}));\nObject.defineProperty(exports, \"PermissionFlag\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.PermissionFlag;\n  }\n}));\nObject.defineProperty(exports, \"PixelsPerInch\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.PixelsPerInch;\n  }\n}));\nObject.defineProperty(exports, \"RenderingCancelledException\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.RenderingCancelledException;\n  }\n}));\nObject.defineProperty(exports, \"SVGGraphics\", ({\n  enumerable: true,\n  get: function get() {\n    return _svg.SVGGraphics;\n  }\n}));\nObject.defineProperty(exports, \"UNSUPPORTED_FEATURES\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.UNSUPPORTED_FEATURES;\n  }\n}));\nObject.defineProperty(exports, \"UnexpectedResponseException\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.UnexpectedResponseException;\n  }\n}));\nObject.defineProperty(exports, \"Util\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.Util;\n  }\n}));\nObject.defineProperty(exports, \"VerbosityLevel\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.VerbosityLevel;\n  }\n}));\nObject.defineProperty(exports, \"XfaLayer\", ({\n  enumerable: true,\n  get: function get() {\n    return _xfa_layer.XfaLayer;\n  }\n}));\nObject.defineProperty(exports, \"addLinkAttributes\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.addLinkAttributes;\n  }\n}));\nObject.defineProperty(exports, \"build\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.build;\n  }\n}));\nObject.defineProperty(exports, \"createObjectURL\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.createObjectURL;\n  }\n}));\nObject.defineProperty(exports, \"createPromiseCapability\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.createPromiseCapability;\n  }\n}));\nObject.defineProperty(exports, \"createValidAbsoluteUrl\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.createValidAbsoluteUrl;\n  }\n}));\nObject.defineProperty(exports, \"getDocument\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.getDocument;\n  }\n}));\nObject.defineProperty(exports, \"getFilenameFromUrl\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.getFilenameFromUrl;\n  }\n}));\nObject.defineProperty(exports, \"getPdfFilenameFromUrl\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.getPdfFilenameFromUrl;\n  }\n}));\nObject.defineProperty(exports, \"getXfaPageViewport\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.getXfaPageViewport;\n  }\n}));\nObject.defineProperty(exports, \"isPdfFile\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.isPdfFile;\n  }\n}));\nObject.defineProperty(exports, \"loadScript\", ({\n  enumerable: true,\n  get: function get() {\n    return _display_utils.loadScript;\n  }\n}));\nObject.defineProperty(exports, \"removeNullCharacters\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.removeNullCharacters;\n  }\n}));\nObject.defineProperty(exports, \"renderTextLayer\", ({\n  enumerable: true,\n  get: function get() {\n    return _text_layer.renderTextLayer;\n  }\n}));\nObject.defineProperty(exports, \"shadow\", ({\n  enumerable: true,\n  get: function get() {\n    return _util.shadow;\n  }\n}));\nObject.defineProperty(exports, \"version\", ({\n  enumerable: true,\n  get: function get() {\n    return _api.version;\n  }\n}));\n\nvar _display_utils = __w_pdfjs_require__(1);\n\nvar _util = __w_pdfjs_require__(4);\n\nvar _api = __w_pdfjs_require__(136);\n\nvar _annotation_layer = __w_pdfjs_require__(148);\n\nvar _worker_options = __w_pdfjs_require__(142);\n\nvar _is_node = __w_pdfjs_require__(6);\n\nvar _text_layer = __w_pdfjs_require__(151);\n\nvar _svg = __w_pdfjs_require__(152);\n\nvar _xfa_layer = __w_pdfjs_require__(150);\n\nvar pdfjsVersion = '2.12.313';\nvar pdfjsBuild = 'a2ae56f39';\n{\n  if (_is_node.isNodeJS) {\n    var _require = __w_pdfjs_require__(153),\n        PDFNodeStream = _require.PDFNodeStream;\n\n    (0, _api.setPDFNetworkStreamFactory)(function (params) {\n      return new PDFNodeStream(params);\n    });\n  } else {\n    var _require2 = __w_pdfjs_require__(156),\n        PDFNetworkStream = _require2.PDFNetworkStream;\n\n    var _require3 = __w_pdfjs_require__(157),\n        PDFFetchStream = _require3.PDFFetchStream;\n\n    (0, _api.setPDFNetworkStreamFactory)(function (params) {\n      if ((0, _display_utils.isValidFetchUrl)(params.url)) {\n        return new PDFFetchStream(params);\n      }\n\n      return new PDFNetworkStream(params);\n    });\n  }\n}\n})();\n\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pdf.js.map","import i18next from 'i18next';\n\n/**\n * Wraps the handler returned by redux-form's `handleSubmit(submit)` for use as a form's\n * `onSubmit`.\n *\n * When async validation fails on submit, redux-form returns a rejected promise carrying the\n * field errors. Those errors are already in form state and shown under the inputs, but React\n * ignores the return value of `onSubmit`, so the rejection would otherwise surface as an\n * unhandled promise rejection (Sentry: \"Object captured as promise rejection with keys: ...\").\n *\n * Field-error objects (and any other non-Error rejection) are swallowed here. Real `Error`s\n * thrown by the submit function are re-thrown so genuine failures stay visible.\n */\nexport const preventUnhandledSubmitRejection = <E = any>(\n  submitHandler: (event?: E) => any\n) => (event?: E): Promise<void> => {\n  return Promise.resolve(submitHandler(event)).then(\n    () => undefined,\n    (rejection) => {\n      if (rejection instanceof Error) {\n        throw rejection;\n      }\n    }\n  );\n};\n\n/**\n * Field error for an `email` async validation whose backing request failed (network or server\n * error), as opposed to the address itself being invalid. Returning a field-error object keeps\n * the failure inside redux-form instead of leaking it as an unhandled promise rejection.\n */\nexport const emailCheckFailedFieldError = () => ({\n  email: i18next.t(['translations:errors.emailCheckFailed', 'Unable to verify the email address. Please try again.']),\n});\n","import * as React from 'react';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport EditIcon from '@material-ui/icons/Edit';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport RestoreIcon from '@material-ui/icons/Restore';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {useSelector} from 'react-redux';\nimport {makeSelectUserRole} from '../../../modules/AtsModule/selectors';\nimport {List} from 'immutable';\nimport {AclRoles} from '../../../models';\n\ninterface ICustomActionButtonComponentProps {\n  editAction: () => void;\n  deleteAction?: () => void;\n  activateAction?: () => void;\n  deactivateAction?: () => void;\n  status?: string;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation;\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    editAction,\n    deleteAction,\n    activateAction,\n    deactivateAction,\n    t,\n    status = 'inactive'\n  } = props;\n  const userRoles = useSelector(makeSelectUserRole()) || List();\n  const isATSUser = userRoles.includes(AclRoles.ATS_USER);\n  return (\n    <>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n          <Tooltip title={editAction ? t('formButtons.edit') : t('pimAttributesList.pleaseContactForAccess')}>\n            <span>\n              <IconButton disabled={!editAction} onClick={(e) => {e.stopPropagation(); editAction();}}>\n                <EditIcon fontSize='small' />\n              </IconButton>\n            </span>\n          </Tooltip>\n          {!isATSUser && <Tooltip title={deleteAction ? t('formButtons.delete') : t('pimAttributesList.pleaseContactForAccess')}>\n            <span>\n                <IconButton\n                    disabled={!deleteAction}\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      deleteAction();\n                    }}\n                >\n                  <DeleteIcon fontSize='small' />\n                </IconButton>\n            </span>\n          </Tooltip>\n          }\n          {isATSUser && status === 'active' &&\n              <Tooltip title={deactivateAction ? t('formButtons.deactivateOptionDescription') : t('pimAttributesList.pleaseContactForAccess')}>\n                <span>\n                  <IconButton\n                      disabled={!deactivateAction}\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        deactivateAction();\n                      }}\n                  >\n                    <RemoveCircleIcon fontSize='small' />\n                  </IconButton>\n                </span>\n              </Tooltip>\n          }\n          {isATSUser && status === 'inactive' &&\n              <Tooltip title={activateAction ? t('formButtons.activateOptionDescription') : t('pimAttributesList.pleaseContactForAccess')}>\n                <span>\n                  <IconButton\n                      disabled={!activateAction}\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        activateAction();\n                      }}\n                  >\n                    <RestoreIcon fontSize='small'/>\n                  </IconButton>\n                </span>\n              </Tooltip>\n          }\n        </Grid>\n      </TableCell>\n    </>\n  );\n};\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n)(CustomActionButton);","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n    withStyles,\n    WithStyles,\n    Theme,\n    Button,\n    Dialog,\n    DialogContent,\n    DialogContentText,\n    DialogActions,\n} from '@material-ui/core';\nimport {\n    withTranslation,\n    WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\n\ninterface IComponentProps {\n    open: boolean;\n    itemName: string;\n    onClose: () => void;\n    onConfirm: () => void;\n}\n\ntype Props = IComponentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n    dialog: {\n        paddingTop: theme.spacing(2.5),\n        paddingBottom: theme.spacing(),\n    },\n    confirmationButton: {\n        marginRight: theme.spacing(4),\n        textTransform: 'uppercase',\n    },\n    additionalText: {\n        marginTop: theme.spacing()\n    }\n});\nconst DeactivateModal = (props: Props) => {\n    const {\n        onClose,\n        open,\n        itemName,\n        classes,\n        t,\n        onConfirm,\n    } = props;\n\n    return (\n        <Dialog\n            aria-describedby='deactivate-confirmation-dialog'\n            open={open}\n            onClose={() => onClose()}\n        >\n            <div className={classes.dialog}>\n                <DialogContent>\n                    <DialogContentText id='alert-dialog-description' color='textPrimary' variant='h6'>\n                        { t('deactivateModal.areYouSure') }\n                    </DialogContentText>\n                    <DialogContentText id='alert-dialog-description' color='textPrimary' variant='h6'>\n                        { `${itemName}?` }\n                    </DialogContentText>\n                    <DialogContentText className={classes.additionalText}>\n                        {t('deactivateModal.descriptionText')}\n                    </DialogContentText>\n                </DialogContent>\n                <DialogActions>\n                    <Button\n                        onClick={() => onClose()}\n                        color='primary'\n                        className={classes.confirmationButton}\n                    >\n                        {t('formButtons.cancel')}\n                    </Button>\n\n                    <Button\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            onConfirm();\n                        }}\n                        color='primary' autoFocus={true}\n                        className={classes.confirmationButton}\n                    >\n                        {t('deactivateModal.deactivate') }\n                    </Button>\n                </DialogActions>\n            </div>\n        </Dialog>\n    );\n};\n\nexport default compose<React.ComponentClass<IComponentProps>>(\n    withStyles(styles),\n    withTranslation('translations'),\n)(DeactivateModal);","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n    withStyles,\n    WithStyles,\n    Theme,\n    Button,\n    Dialog,\n    DialogContent,\n    DialogContentText,\n    DialogActions,\n} from '@material-ui/core';\nimport {\n    withTranslation,\n    WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\n\ninterface IComponentProps {\n    open: boolean;\n    itemName: string;\n    onClose: () => void;\n    onConfirm: () => void;\n}\n\ntype Props = IComponentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n    dialog: {\n        paddingTop: theme.spacing(2.5),\n        paddingBottom: theme.spacing(),\n    },\n    confirmationButton: {\n        marginRight: theme.spacing(4),\n        textTransform: 'uppercase',\n    },\n    additionalText: {\n        marginTop: theme.spacing()\n    }\n});\nconst ActivateModal = (props: Props) => {\n    const {\n        onClose,\n        open,\n        itemName,\n        classes,\n        t,\n        onConfirm,\n    } = props;\n\n    return (\n        <Dialog\n            aria-describedby='activate-confirmation-dialog'\n            open={open}\n            onClose={() => onClose()}\n        >\n            <div className={classes.dialog}>\n                <DialogContent>\n                    <DialogContentText id='alert-dialog-description' color='textPrimary' variant='h6'>\n                        { t('activateModal.areYouSure') }\n                    </DialogContentText>\n                    <DialogContentText id='alert-dialog-description' variant='h6'>\n                        { `${itemName}?` }\n                    </DialogContentText>\n                </DialogContent>\n                <DialogActions>\n                    <Button\n                        onClick={() => onClose()}\n                        color='primary'\n                        className={classes.confirmationButton}\n                    >\n                        {t('formButtons.cancel')}\n                    </Button>\n\n                    <Button\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            onConfirm();\n                        }}\n                        color='primary' autoFocus={true}\n                        className={classes.confirmationButton}\n                    >\n                        {t('activateModal.activate') }\n                    </Button>\n                </DialogActions>\n            </div>\n        </Dialog>\n    );\n};\n\nexport default compose<React.ComponentClass<IComponentProps>>(\n    withStyles(styles),\n    withTranslation('translations'),\n)(ActivateModal);","import * as React from 'react';\nimport {\n  connect, useSelector,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n  Tab,\n  Tabs,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  List, Map\n} from 'immutable';\nimport { makeSelectIsSearchingPureAttributeOptions, makeSelectPureAttributeOptions, makeSelectPureAttributeOptionsCount, makeSelectFirstPureAttributes } from '../../modules/PimModule/selectors';\nimport {\n  DeleteAttributeOptionByIdThenSearchAttributeOptionsAction,\n  SearchAllAttributeOptionsAction,\n  SearchAllAttributesAction,\n  SetIsSearchingAllAttributeOptionsAction,\n  SetSelectedPureAttributeOptionAction,\n  UpdateAttributeOptionThenSearchAttributeOptionsAction\n} from '../../modules/PimModule/actions';\nimport {\n  debounce\n} from 'lodash';\nimport NotFound from '../../components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport emptyPimAttributesList from '../../images/project.svg';\nimport DescriptionsListFilter, { DESCRIPTIONS_LIST_FILTER_FORM } from './DescriptionsListFilter';\nimport {\n  Option,\n  TableColumn,\n  SearchArgs,\n  Filter,\n  PureAttribute,\n  PureAttributeOption,\n  AuthObject,\n  AclRoles\n} from '../../models';\nimport { DeleteModal, TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport ToolBar from '../../components/ToolBar';\nimport { TextCell } from '../../components/_CellRenderers';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport { AMPLITUDE_EVENT, NOT_FOUND_PATH } from '../../constants';\nimport { RouteComponentProps } from 'react-router';\nimport { push } from 'connected-react-router';\nimport DescriptionDialog, { DESCRIPTION_DIALOG_ID } from './DescriptionDialog';\nimport {SetOverlayComponentPropsAction, SetSnackbarOpenAction, ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport DropDownCell, { DROPDOWN_CELL_DATATYPE } from '../PimAttributesListPage/_CustomCellRenderers/DropDownCell';\nimport TagPopper from '../PimAttributesListPage/TagPopper';\nimport {\n  makeSelectCanManageAttribute,\n  makeSelectCanManageAttributeManagement,\n  makeSelectIdentityObject,\n  makeSelectUserIsAtsUser,\n  makeSelectUserIsPimAdmin,\n} from '../../modules/AtsModule/selectors';\nimport {\n  selectBrandRepCategoryByManufacturer,\n  selectBrandRepManufacturerByCategory\n} from '../../modules/AccountModule/selectors';\nimport {GetBrandRepAction} from '../../modules/AccountModule/actions';\nimport DeactivateModal from './DeactivateModal';\nimport ActivateModal from './ActivateModal';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\n\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<PureAttributeOption> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\nexport const constructFilters = (searchTerm: string, filters: Filter) => {\n  if (!searchTerm && !filters?.and) {\n    return {};\n  }\n\n  const constructedfilters: any = { 'and': [] };\n\n  if (searchTerm) {\n    constructedfilters.and.push({\n      'option.description': {\n        'like': searchTerm\n      }\n    });\n  }\n  if (filters?.and) {\n    constructedfilters.and.push(...filters.and);\n  }\n\n  return constructedfilters;\n};\n\ninterface IPimDescriptionsListPageComponentProps {\n}\n\ninterface IPimDescriptionsListPageProps extends IPimDescriptionsListPageComponentProps {\n  dispatch: (s: IAction) => void;\n  openDialog: (dialogProps?: object) => void;\n  searchPureAttributeById: (pureAttributeId: number) => void;\n  searchAllAttributeOptions: (attributeId: number, options: Option<PureAttributeOption>, filters?: Filter) => void;\n  selectedPureAttribute: IMap<PureAttribute>;\n  searchedPureAttributeOptions: List<IMap<PureAttributeOption>>;\n  searchedPureAttributeOptionsCount: number;\n  searchingPureAttributeOptions: boolean;\n  canManageAttribute: boolean;\n  canCreateAttributeOption: boolean;\n  theme: Theme;\n  t: (key: string) => string;\n  getBrandRep: () => void;\n  categoryByManufacturer: {[index: string]: number[] | null};\n  manufacturerByCategory: {[index: string]: number[] | null};\n  canManageAttributeManagement: boolean;\n  identityObject: IMap<AuthObject>;\n  isAtsUser: boolean;\n  updateAttributeOptionThenSearchAttributeOptions: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, options?: Option<PureAttributeOption>, filters?: Filter, successCB?: () => void, failedCB?: () => void) => void;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[200],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n  tabs: {\n    overflow: 'initial',\n    minHeight: 'initial',\n    marginTop: theme.spacing(0.75)\n  },\n  tabWrapper: {\n    flexDirection: 'row',\n    whiteSpace: 'nowrap',\n  },\n  tabLabelIcon: {\n    minHeight: 'initial',\n    paddingTop: 0\n  },\n  indicator: {\n    backgroundColor: theme.palette.primary[700]\n  }\n});\n\ntype IPimDescriptionsListPage = IPimDescriptionsListPageProps & WithTranslation & RouteComponentProps & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  anchorEl: HTMLElement;\n  page: number;\n  searchTerm: string;\n  openFilterDrawer: boolean;\n  options: Option<PureAttributeOption>;\n  filters: Filter;\n  selectedPureAttributeId: number;\n  tagAnchorEl: any;\n  tagValueArray: string[];\n  selectedAttributeOption: IMap<PureAttributeOption>;\n  openDeleteModal: boolean;\n  openActivateModal: boolean;\n  openDeactivateModal: boolean;\n  descriptionsListFilterUniqueKey: any;\n}\n\nclass PimDescriptionsListPage extends React.Component<IPimDescriptionsListPage, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  constructor(props: IPimDescriptionsListPage) {\n    super(props);\n    this.state = {\n      anchorEl: null,\n      columnsToDisplay: [\n        { id: 'Description', label: 'pimDescriptionsList.descriptionColumnLabel', path: ['description'], display: true, sortable: true },\n        { id: 'Unit', label: 'pimDescriptionsList.unitColumnLabel', path: ['unit'], display: true, sortable: true },\n        { id: 'Value', label: 'pimDescriptionsList.valueColumnLabel', path: ['value'], display: true, sortable: true },\n        { id: 'Tags', label: 'pimDescriptionsList.tagsColumnLabel', path: ['tags'], display: true, sortable: true },\n        { id: 'Actions', label: 'pimDescriptionsList.actionsColumnLabel', display: true, sortable: true, style: { textAlign: 'center' } },\n      ],\n      openFilterDrawer: false,\n      page: 0,\n      searchTerm: '',\n      filters: null,\n      options: defaultOptions,\n      selectedPureAttributeId: -1,\n      tagAnchorEl: null,\n      tagValueArray: [],\n      selectedAttributeOption: Map() as IMap<PureAttributeOption>,\n      openDeleteModal: false,\n      openActivateModal: false,\n      openDeactivateModal: false,\n      descriptionsListFilterUniqueKey: '',\n    };\n  }\n\n  public componentDidMount() {\n    const { dispatch, searchPureAttributeById, searchAllAttributeOptions, match, getBrandRep } = this.props;\n    const { options } = this.state;\n    const pureAttributeId = Number((match.params as any).attributeId);\n\n    if (isNaN(pureAttributeId) || !Number.isInteger(pureAttributeId) || pureAttributeId < 0) {\n      dispatch(push(NOT_FOUND_PATH));\n    } else {\n      this.setState({ selectedPureAttributeId: pureAttributeId });\n      searchPureAttributeById(pureAttributeId);\n      searchAllAttributeOptions(pureAttributeId, options);\n      getBrandRep();\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      searchedPureAttributeOptions,\n      searchedPureAttributeOptionsCount,\n      canManageAttributeManagement,\n      identityObject,\n    } = this.props;\n    const { options, page } = this.state;\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no PureAttributeOptions returned\n    if (prevProps.searchedPureAttributeOptions.size && searchedPureAttributeOptions.size === 0 && searchedPureAttributeOptionsCount) {\n      const newPage = Math.floor(searchedPureAttributeOptionsCount / options.limit) - (searchedPureAttributeOptionsCount < options.limit ? 0 : 1);\n      const newOffset = options.limit * newPage;\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: newOffset\n        },\n        page: newPage\n      });\n    }\n\n    if (identityObject && !canManageAttributeManagement) {\n      this.props.dispatch(push(NOT_FOUND_PATH));\n    }\n  }\n\n  public handleEdit = (pureAttributeOption: IMap<PureAttributeOption>) => {\n    const {\n      dispatch,\n      openDialog,\n      amplitudeData,\n      selectedPureAttribute\n    } = this.props;\n\n    dispatch(new SetSelectedPureAttributeOptionAction({ pureAttributeOption }));\n    openDialog({\n      sendAmplitude: (updatedAttributeOption) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pureAttributeDescriptionUpdated, amplitudeData({\n          attributeName: selectedPureAttribute.get('name'),\n          descriptionName: updatedAttributeOption.get('description'),\n          descriptionId: updatedAttributeOption.get('id'),\n          isOverride: selectedPureAttribute.get('parentId') !== null ? true : false,\n          originalDescriptionName: pureAttributeOption.get('description')\n        }));\n      }\n    });\n  }\n\n  public handleDelete = () => {\n    const { dispatch } = this.props;\n    const {\n      selectedPureAttributeId,\n      selectedAttributeOption,\n      options,\n      filters,\n      searchTerm,\n    } = this.state;\n\n    const _filters: any = searchTerm\n      ? {\n          'and': [\n            {\n              'attribute.name': {\n                'like': searchTerm\n              }\n            }\n          ]\n        }\n      : filters;\n    (filters && searchTerm) && _filters.and.push(...(filters as any).and); // tslint:disable-line\n\n    this.setState({ openDeleteModal: false });\n    dispatch(new SetIsSearchingAllAttributeOptionsAction({ isSearching: true }));\n    dispatch(new DeleteAttributeOptionByIdThenSearchAttributeOptionsAction({\n      attributeId: selectedPureAttributeId,\n      optionId: selectedAttributeOption.get('id'),\n      filters: _filters,\n      options\n    }));\n  }\n\n  public activateOption = () => {\n    const {\n      selectedAttributeOption,\n      selectedPureAttributeId,\n      options,\n      filters,\n      searchTerm,\n    } = this.state;\n    const { updateAttributeOptionThenSearchAttributeOptions, dispatch, t } = this.props;\n\n    const _filters: any = searchTerm\n      ? {\n          'and': [\n            {\n              'attribute.name': {\n                'like': searchTerm\n              }\n            }\n          ]\n        }\n      : filters;\n    (filters && searchTerm) && _filters.and.push(...(filters as any).and); // tslint:disable-line\n\n    this.setState({ openActivateModal: false });\n    const successCB = () => {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('activateModal.successMesssage'),\n        severity: 'success'\n      }));\n    };\n    updateAttributeOptionThenSearchAttributeOptions(\n        selectedPureAttributeId,\n        selectedAttributeOption.get('id'),\n        selectedAttributeOption.withMutations(ctx => {\n          ctx.set('status', 'active');\n        }),\n        options,\n        _filters,\n        successCB,\n    );\n  }\n  public deactivateOption = () => {\n    const {\n      selectedAttributeOption,\n      selectedPureAttributeId,\n      options,\n      filters,\n      searchTerm,\n    } = this.state;\n    const { updateAttributeOptionThenSearchAttributeOptions, dispatch, t } = this.props;\n\n    const _filters: any = searchTerm\n      ? {\n          'and': [\n            {\n              'attribute.name': {\n                'like': searchTerm\n              }\n            }\n          ]\n        }\n      : filters;\n    (filters && searchTerm) && _filters.and.push(...(filters as any).and); // tslint:disable-line\n\n    this.setState({ openDeactivateModal: false });\n    const successCB = () => {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('deactivateModal.successMesssage'),\n        severity: 'success'\n      }));\n    };\n    updateAttributeOptionThenSearchAttributeOptions(\n        selectedPureAttributeId,\n        selectedAttributeOption.get('id'),\n        selectedAttributeOption.withMutations(ctx => {\n          ctx.set('status', 'inactive');\n        }),\n        options,\n        _filters,\n        successCB,\n    );\n  }\n  public openDeleteModal = (selectedAttributeOption: IMap<PureAttributeOption>) => {\n    this.setState({\n      openDeleteModal: true,\n      selectedAttributeOption\n    });\n  }\n\n  public openActivateModal = (selectedAttributeOption: IMap<PureAttributeOption>) => {\n    this.setState({\n      openActivateModal: true,\n      selectedAttributeOption\n    });\n  }\n  public openDeactivateModal = (selectedAttributeOption: IMap<PureAttributeOption>) => {\n    this.setState({\n      openDeactivateModal: true,\n      selectedAttributeOption\n    });\n  }\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<PureAttributeOption>) => {\n    const {\n      searchPureAttributeById,\n      searchAllAttributeOptions\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        const filters: Filter = constructFilters(this.state.searchTerm, this.state.filters);\n        // if filter is open, searching attribute to get most updated tags which is used for the manufacturer & category filters\n        this.state.openFilterDrawer && searchPureAttributeById(this.state.selectedPureAttributeId); // tslint:disable-line\n        searchAllAttributeOptions(\n          this.state.selectedPureAttributeId,\n          this.state.options,\n          filters,\n        );\n      }\n    );\n  }\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddPureAttributeOption = () => {\n    const { selectedPureAttribute, openDialog, amplitudeData } = this.props;\n    openDialog({\n      sendAmplitude: (newAttributeOption) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pureAttributeDescriptionCreated, amplitudeData({\n          attributeName: selectedPureAttribute.get('name'),\n          descriptionName: newAttributeOption.get('description'),\n          descriptionId: newAttributeOption.get('id'),\n          isOverride: selectedPureAttribute.get('parentId') !== null ? true : false\n        }));\n      }\n    });\n  }\n\n  public getTags = (pureAttributeOption: IMap<PureAttributeOption>) => {\n    const { categoryByManufacturer, manufacturerByCategory } = this.props;\n    return pureAttributeOption.get('tags')?.filter((tag) => {\n      const _manufacturerId = tag.getIn(['manufacturer', 'id']);\n      const _categoryId = tag.getIn(['category', 'id']);\n      return (\n          categoryByManufacturer[_manufacturerId] === null ||\n          (Array.isArray(categoryByManufacturer[_manufacturerId]) && categoryByManufacturer[_manufacturerId].includes(_categoryId)) ||\n          manufacturerByCategory[_categoryId] === null ||\n          (Array.isArray(manufacturerByCategory[_categoryId])) && manufacturerByCategory[_categoryId].includes(_manufacturerId)\n      );\n    }).reduce((arr, tag) => {\n      const id = `${tag.getIn(['manufacturer', 'id'])}-${tag.getIn(['category', 'id'])}`;\n      if (!arr.get(id)) {\n        return arr.set(id, `${tag.getIn(['manufacturer', 'name'])} - ${tag.getIn(['category', 'name'])}`);\n      }\n      return arr;\n    }, Map()).toIndexedSeq().toArray() as string[];\n  }\n\n  public handleTagClick = (item: string[]) => (e: any) => {\n    this.setState({\n      tagAnchorEl: e.currentTarget,\n      tagValueArray: item\n    });\n  }\n\n  public handleClickAway = (e) => {\n    const isNotTagRelated = !(e?.target?.attributes?.datatype?.value === DROPDOWN_CELL_DATATYPE || e?.target?.offsetParent?.attributes?.datatype?.value === DROPDOWN_CELL_DATATYPE);\n    isNotTagRelated && this.setState({ tagAnchorEl: null });  // tslint:disable-line\n  }\n\n  public render() {\n    const {\n      classes,\n      selectedPureAttribute,\n      searchedPureAttributeOptions,\n      searchingPureAttributeOptions,\n      searchedPureAttributeOptionsCount,\n      canManageAttribute,\n      canCreateAttributeOption,\n      isAtsUser,\n      t,\n    } = this.props;\n    const {\n      selectedPureAttributeId,\n      searchTerm,\n      options,\n      filters,\n      page,\n      openFilterDrawer,\n      columnsToDisplay,\n      tagValueArray,\n      openDeleteModal,\n      selectedAttributeOption,\n    } = this.state;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display);\n\n    const labels = {\n      emptyviewSubtitle: '',\n      emptyviewAddButton: '',\n      emptyviewAlt: t('pimProductList.imageAlt'),\n      emptyviewNotFound: t('pimDescriptionsList.emptyviewNotFound')\n    };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <ToolBar\n          onClickFilterButton={this.toggleFilterDrawer}\n          onClickFab={this.handleAddPureAttributeOption}\n          disabledFab={!canCreateAttributeOption}\n          fabTooltip={canCreateAttributeOption ? '' : 'Please contact ATS for access'}\n          searchTooltip={t('pimDescriptionsList.searchTooltip')}\n          handleSubmit={this.handleSubmit}\n          showColumn={false}\n          leftComponent={\n            <Tabs\n              className={classes.tabs}\n              value={1}\n              onChange={null}\n              textColor='primary'\n              variant='fullWidth'\n              aria-label={t('pimProductList.tabsAriaLabel')}\n              classes={{\n                indicator: classes.indicator\n              }}\n            >\n              <Tab\n                label={selectedPureAttributeId === -1 ? '' : selectedPureAttribute.get('name')}\n                value={1}\n                icon={<div/>}\n                classes={{\n                  wrapper: classes.tabWrapper,\n                  labelIcon: classes.tabLabelIcon\n                }}\n              />\n            </Tabs>\n          }\n        />\n        <FilterChipsBar\n          filtersFormId={DESCRIPTIONS_LIST_FILTER_FORM}\n          setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n          options={options}\n          setUniqueKey={(key) => this.setState({ descriptionsListFilterUniqueKey: key})}\n        />\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            {searchingPureAttributeOptions\n              ? <NotFound\n                  svgIcon={<LoadingImage />}\n                  firstRow={<LinearProgress color='secondary'/>}\n                  secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n                  paperContainer={true}\n                />\n              : <Paper\n                  className={classes.tableContainer}\n                >\n                  {searchedPureAttributeOptions.size !== 0\n                    ? <>\n                        <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                          <Table>\n                            <TableHead classes={{ root: classes.tableHead }}>\n                              <TableRow>\n                                {filteredColumnsToDisplay.map((header, index) => (\n                                  <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                    {t(header.label)}\n                                  </TableCell>\n                                ))}\n                              </TableRow>\n                            </TableHead>\n                            <TableBody>\n                              {searchedPureAttributeOptions && searchedPureAttributeOptions.map((pureAttributeOption: IMap<PureAttributeOption>, index: number) => (\n                                <TableRow id={`${index}`} key={index} hover={true}>\n                                  {pureAttributeOption && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                    switch (column.id) {\n                                      case 'Description':\n                                      case 'Unit':\n                                      case 'Value': return <TextCell key={column.label} text={pureAttributeOption.getIn(column.path)} />;\n                                      case 'Tags': return <DropDownCell key={column.label} valueArray={this.getTags(pureAttributeOption)} handleClick={this.handleTagClick} />;\n                                      case 'Actions': return <CustomActionButton\n                                          key={column.label}\n                                          editAction={canManageAttribute ? () => this.handleEdit(pureAttributeOption) : null}\n                                          deleteAction={canManageAttribute ? () => this.openDeleteModal(pureAttributeOption) : null}\n                                          activateAction={canManageAttribute && isAtsUser ? () => this.openActivateModal(pureAttributeOption) : null}\n                                          deactivateAction={canManageAttribute && isAtsUser ? () => this.openDeactivateModal(pureAttributeOption) : null}\n                                          status={pureAttributeOption.get('status')}\n                                      />;\n                                    }\n                                  })}\n                                </TableRow>\n                              ))}\n                            </TableBody>\n                          </Table>\n                        </div>\n                        <TablePagination\n                          className={classes.pagination}\n                          component='div'\n                          labelRowsPerPage={t('Pagination.rowsPerPage')}\n                          onChangePage={this.handlePageChange}\n                          rowsPerPageOptions={[5, 10, 25, 50]}\n                          onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                          count={searchedPureAttributeOptionsCount || 0}\n                          rowsPerPage={options.limit}\n                          page={page}\n                          ActionsComponent={TablePaginationActions}\n                          classes={{\n                            toolbar: classes.paginationToolbar\n                          }}\n                        />\n                      </>\n                    : <EmptyView\n                        image={emptyPimAttributesList}\n                        onButtonClicked={this.handleAddPureAttributeOption}\n                        emptyviewSubtitle={labels.emptyviewSubtitle}\n                        emptyviewAddButton={labels.emptyviewAddButton}\n                        emptyviewAlt={labels.emptyviewAlt}\n                        emptyviewNotFound={labels.emptyviewNotFound}\n                      />\n                  }\n                </Paper>\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            <DescriptionsListFilter\n              toggleDrawer={this.toggleFilterDrawer}\n              open={this.state.openFilterDrawer}\n              selectedPureAttribute={selectedPureAttribute}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n              uniqueKey={this.state.descriptionsListFilterUniqueKey}\n              setUniqueKey={(key) => this.setState({ descriptionsListFilterUniqueKey: key})}\n            />\n          </Grid>\n        </Grid>\n        <TagPopper anchorEl={this.state.tagAnchorEl} valueArray={tagValueArray} onClose={this.handleClickAway} />\n        <DescriptionDialog\n          attributeId={selectedPureAttributeId}\n          searchTerm={searchTerm}\n          filters={filters}\n          options={options}\n        />\n        <DeleteModal\n          idToDelete={selectedAttributeOption.get('id')}\n          open={openDeleteModal}\n          itemName={selectedAttributeOption.get('description')}\n          toggleDeleteModal={() => this.setState({ openDeleteModal: false })}\n          handleDelete={this.handleDelete}\n          withLoading={false}\n        />\n        <DeactivateModal\n          onConfirm={this.deactivateOption}\n          onClose={() => this.setState({ openDeactivateModal: false})}\n          open={this.state.openDeactivateModal}\n          itemName={selectedAttributeOption.get('description')}\n        />\n        <ActivateModal\n          onConfirm={this.activateOption}\n          onClose={() => this.setState({ openActivateModal: false})}\n          open={this.state.openActivateModal}\n          itemName={selectedAttributeOption.get('description')}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchPureAttributeById: (pureAttributeId: number) => {\n      dispatch(new SearchAllAttributesAction({\n        options: { limit: 1 },\n        filters: { and: [{ attributeId: { eq: pureAttributeId } }]}\n      }));\n    },\n    searchAllAttributeOptions: (attributeId: number, options: Option<PureAttributeOption>, filters?: Filter) => {\n      dispatch(new SearchAllAttributeOptionsAction({\n        attributeId,\n        options,\n        filters\n      }));\n    },\n    openDialog: (dialogProps?: object) => {\n      dispatch(new SetOverlayComponentPropsAction({\n        id: DESCRIPTION_DIALOG_ID,\n        props: dialogProps\n      }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: DESCRIPTION_DIALOG_ID,\n        open: true\n      }));\n    },\n    getBrandRep: () => {\n      dispatch(new GetBrandRepAction());\n    },\n    updateAttributeOptionThenSearchAttributeOptions: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, options?: Option<PureAttributeOption>, filters?: Filter, successCB?, failedCB?) => {\n      dispatch(new UpdateAttributeOptionThenSearchAttributeOptionsAction({\n        attributeId,\n        optionId,\n        attributeOption,\n        filters,\n        options: options ? options : defaultOptions,\n        successCB,\n        failedCB\n      }));\n    },\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  selectedPureAttribute: makeSelectFirstPureAttributes(),\n  searchedPureAttributeOptions: makeSelectPureAttributeOptions(),\n  searchedPureAttributeOptionsCount: makeSelectPureAttributeOptionsCount(),\n  searchingPureAttributeOptions: makeSelectIsSearchingPureAttributeOptions(),\n  canManageAttribute: makeSelectCanManageAttribute(),\n  canCreateAttributeOption: makeSelectUserIsPimAdmin(),\n  categoryByManufacturer: selectBrandRepCategoryByManufacturer,\n  manufacturerByCategory: selectBrandRepManufacturerByCategory,\n  canManageAttributeManagement: makeSelectCanManageAttributeManagement(),\n  identityObject: makeSelectIdentityObject(),\n  isAtsUser: makeSelectUserIsAtsUser(),\n});\n\nexport default compose<React.ComponentClass<IPimDescriptionsListPageComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps)\n)(PimDescriptionsListPage);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Grid,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { CreatePureAttributeOptionAction, CreatePureAttributeOptionThenSearchPureAttributeOptionsAction, SearchAttributeOptionsSecondaryAction, SearchAttributeOptionsSucceededSecondaryAction, SetIsCreatingAttributeAction, SetSelectedPureAttributeOptionAction, UpdateAttributeOptionAction, UpdateAttributeOptionThenSearchAttributeOptionsAction } from '../../../modules/PimModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport { ControlledModal } from '../../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { AttributeTag, Filter, Option, PureAttributeOption, Series } from '../../../models';\nimport { AtsApiCallAction } from '../../../modules/AtsModule/actions';\nimport { fromJS, List, Map } from 'immutable';\nimport {\n  reduxForm,\n  getFormValues\n} from 'redux-form/immutable';\nimport { InjectedFormProps, stopSubmit, touch, change, clearSubmitErrors } from 'redux-form';\nimport { debounce } from 'lodash';\nimport { constructFilters, defaultOptions } from '../index';\nimport OptionFields from '../../PimDescriptionsListPage/DescriptionDialog/OptionFields';\nimport { IAttributeTag, tagListToTagMap, tagToTagMap } from '../../PimAttributesListPage/AttributeDialog';\nimport { makeSelectSelectedPureAttributeOption } from '../../../modules/PimModule/selectors';\nimport { makeSelectOverlayComponentProp } from '../../../modules/ApplicationModule/selectors';\n\nexport const DESCRIPTION_DIALOG_ID = 'DESCRIPTION_DIALOG';\n\ninterface IDescriptionDialogContentComponentProps {\n  attributeId: number;\n  searchAfter?: boolean;\n  searchTerm?: string;\n  filters?: Filter;\n  options?: Option<Series>;\n  preAddedTags?: IAttributeTag;\n}\n\ninterface IDescriptionDialogContentProps extends IDescriptionDialogContentComponentProps {\n  formValues: Map<string, any>;\n  selectedPureAttributeOption: IMap<PureAttributeOption>;\n  overlayComponentProp: any;\n  dispatch: (s: IAction) => void;\n  resetSelectedPureAttributeOption: () => void;\n  closeDialog: () => void;\n  SearchAttributeOptions: (attributeId: number, value: string) => void;\n  createAttributeOption: (pureAttributeOption: IMap<Partial<PureAttributeOption>>, attributeId: number, setLoading?: boolean, successCB?: (newAttributeOption: IMap<PureAttributeOption>) => void, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => void;\n  createAttributeOptionThenSearchAttributeOptions: (pureAttributeOption: IMap<Partial<PureAttributeOption>>, attributeId: number, options: Option<PureAttributeOption>, filters?: Filter, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => void;\n  updateAttributeOption: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, successCB?: (newAttributeOption: IMap<PureAttributeOption>) => void, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => void;\n  updateAttributeOptionThenSearchAttributeOptions: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, options: Option<PureAttributeOption>, filters?: Filter, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => void;\n}\n\ntype IDescriptionDialogContent = IDescriptionDialogContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & InjectedFormProps;\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    marginRight: theme.spacing() * 4,\n  },\n  root: {\n    width: 488\n  },\n});\n\nconst DescriptionDialog = (DescriptionDialogProps: IDescriptionDialogContent) => {\n  const {\n    attributeId,\n    preAddedTags,\n    classes,\n    searchAfter = true,\n    searchTerm,\n    filters,\n    options,\n    formValues = Map(),\n    selectedPureAttributeOption,\n    overlayComponentProp,\n    reset,\n    resetSelectedPureAttributeOption,\n    closeDialog,\n    SearchAttributeOptions,\n    createAttributeOption,\n    createAttributeOptionThenSearchAttributeOptions,\n    updateAttributeOption,\n    updateAttributeOptionThenSearchAttributeOptions,\n    dispatch,\n    handleSubmit,\n    t\n  } = DescriptionDialogProps;\n\n  const providedDescription = overlayComponentProp?.description;\n  const successCB = overlayComponentProp?.successCB;\n  const sendAmplitude = overlayComponentProp?.sendAmplitude;\n  const setLoading = overlayComponentProp?.setLoading;\n\n  const [selectedAttributeOption, setSelectedAttributeOption] = React.useState(selectedPureAttributeOption);\n  const [valueInput, setValueInput] = React.useState(selectedPureAttributeOption?.get('value')?.toString() || '');\n  const [isValidating, setIsValidating] = React.useState(false);\n  const [exists, setExists] = React.useState(false);\n  const [tags, setTags] = React.useState<Map<string, IAttributeTag>>(preAddedTags ? tagToTagMap(preAddedTags) || Map() : Map());\n  const [emptyTagError, setEmptyTagError] = React.useState(false);\n\n  const selectedAttributeOptionId = selectedAttributeOption?.get('id');\n\n  React.useEffect(() => {\n    if (providedDescription) {\n      dispatch(change(DESCRIPTION_DIALOG_ID, 'description', providedDescription));\n    }\n  }, [providedDescription]);\n\n  React.useEffect(() => {\n    setSelectedAttributeOption(selectedPureAttributeOption);\n    setValueInput(selectedPureAttributeOption?.get('value')?.toString() || '');\n    setTags(tagListToTagMap(selectedPureAttributeOption?.get('tags')) || Map());\n  }, [selectedPureAttributeOption]);\n\n  React.useEffect(() => {\n    setTags(preAddedTags ? tagToTagMap(preAddedTags) || Map() : Map());\n  }, [preAddedTags]);\n\n  const manufacturer = formValues.get('manufacturer');\n  const category = formValues.get('category');\n\n  const validateAttributeOption = debounce((e: any, _value: string) => {\n    setIsValidating(true);\n    dispatch(new AtsApiCallAction(\n      {\n        payload: {\n          service: 'pim',\n          endpoint: 'validateAttributeOptionExists',\n          params: {\n            attributeId\n          },\n          body: {\n            value: _value\n          }\n        },\n      },\n      (apiResp) => {\n        if (!apiResp.err) {\n          const immutableResp = fromJS(apiResp);\n          const _exists: boolean = immutableResp.getIn(['data', 'payload', 'pim', 'exists']);\n          setExists(_exists);\n          if (_exists) {\n            dispatch(stopSubmit(DESCRIPTION_DIALOG_ID, { value: t('pureAttributeOptionDialog.descriptioExistsError') }));\n            dispatch(touch(DESCRIPTION_DIALOG_ID, 'value'));\n          } else {\n            dispatch(clearSubmitErrors(DESCRIPTION_DIALOG_ID));\n          }\n        }\n        setIsValidating(false);\n      },\n    ));\n  }, 500);\n\n  const handleAddTag = () => {\n    setTags(tags.set(`${manufacturer.id}-${category.id}`, {\n      manufacturer: { id: manufacturer.id, name: manufacturer.value },\n      category: { id: category.id, name: category.value },\n    }));\n    setEmptyTagError(false);\n    dispatch(change(DESCRIPTION_DIALOG_ID, 'manufacturer', null));\n    dispatch(change(DESCRIPTION_DIALOG_ID, 'category', null));\n  };\n\n  const handleDeleteTag = (tag: AttributeTag) => {\n    setTags(tags.delete(`${tag.manufacturer.id}-${tag.category.id}`));\n  };\n\n  const valueAutocompleteOnInputChange = (event: object, val: string, reason: string) => {\n    if (!selectedAttributeOptionId) {\n      setValueInput(val?.toString() || '');\n      if (reason === 'input') {\n        validateAttributeOption(null, val?.toString()?.trim());\n        SearchAttributeOptions(attributeId, val?.toString());\n      }\n    }\n  };\n\n  const valueAutocompleteOnChange = (attributeOption: PureAttributeOption) => {\n    setSelectedAttributeOption(fromJS(attributeOption));\n    dispatch(new SetSelectedPureAttributeOptionAction({ pureAttributeOption: fromJS(attributeOption) }));\n    setValueInput('');\n    dispatch(clearSubmitErrors(DESCRIPTION_DIALOG_ID));\n  };\n\n  const onExited = () => {\n    reset();\n    setIsValidating(false);\n    setExists(false);\n    setTags(preAddedTags ? tagToTagMap(preAddedTags) : Map());\n    setEmptyTagError(false);\n    setSelectedAttributeOption(Map() as IMap<PureAttributeOption>);\n    resetSelectedPureAttributeOption();\n    setValueInput('');\n    dispatch(new SearchAttributeOptionsSucceededSecondaryAction({ attributeOptions: List() }));\n  };\n\n  const onSubmit = (values: IMap<any>) => {\n    // values is not update for some reason so using formValues instead\n    if (!tags.count()) {\n      setEmptyTagError(true);\n      return;\n    }\n\n    const unit = values.getIn(['unit'], '')?.trim()?.toLowerCase();\n\n    const pureAttributeOption = Map({\n      description: values.get('description'),\n      ... unit ? { unit } : {},\n      value: values.getIn(['value', 'value'])?.toString()?.trim().toLowerCase() || valueInput?.toString()?.trim().toLowerCase() || '',\n      tags: tags.toIndexedSeq()\n    });\n\n    if (selectedAttributeOptionId) {\n      if (successCB) {\n        updateAttributeOption(\n          attributeId,\n          selectedAttributeOptionId,\n          pureAttributeOption,\n          successCB,\n          sendAmplitude\n        );\n      }\n      updateAttributeOptionThenSearchAttributeOptions(\n        attributeId,\n        selectedAttributeOptionId,\n        pureAttributeOption,\n        options,\n        constructFilters(searchTerm, filters),\n        sendAmplitude\n      );\n    } else {\n      searchAfter ? createAttributeOptionThenSearchAttributeOptions(pureAttributeOption, attributeId, options, constructFilters(searchTerm, filters), sendAmplitude) : createAttributeOption(pureAttributeOption, attributeId, setLoading, successCB, sendAmplitude);\n    }\n    closeDialog();\n  };\n\n  return (\n    <ControlledModal\n      localKey={DESCRIPTION_DIALOG_ID}\n      onExited={onExited}\n      classes={{\n        paper: classes.root\n      }}\n    >\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <DialogContent>\n          <DialogContentText id='alert-dialog-description' color='textPrimary' variant='h6'>\n            { selectedAttributeOptionId ? t('pureAttributeOptionDialog.editTitle') : t('pureAttributeOptionDialog.createTitle')}\n          </DialogContentText>\n\n          <Grid\n            container={true}\n            direction='column'\n          >\n            <OptionFields\n              manufacturer={manufacturer}\n              category={category}\n              tags={fromJS(tags)}\n              emptyTagError={emptyTagError}\n              handleAddTag={handleAddTag}\n              handleDeleteTag={handleDeleteTag}\n              valueInput={valueInput?.toString()}\n              hasSelectedOption={selectedAttributeOptionId != null}\n              valueAutocompleteOnInputChange={valueAutocompleteOnInputChange}\n              valueAutocompleteOnChange={valueAutocompleteOnChange}\n            />\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={closeDialog}\n            color='primary'\n            className={classes.button}\n          >\n            { t('formButtons.cancel') }\n          </Button>\n          <Button\n            type='submit'\n            color='primary'\n            className={classes.button}\n            disabled={isValidating || (exists && !selectedAttributeOptionId)}\n          >\n            { selectedAttributeOptionId ? t('formButtons.update') : t('formButtons.add') }\n          </Button>\n        </DialogActions>\n      </form>\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const selectedPureAttributeOption = makeSelectSelectedPureAttributeOption()(state);\n  const initialValues = selectedPureAttributeOption?.has('id') ? selectedPureAttributeOption.set('value', selectedPureAttributeOption).toJS() : {};\n\n  return {\n    initialValues,\n    selectedPureAttributeOption,\n    ...createStructuredSelector({\n      formValues: getFormValues(DESCRIPTION_DIALOG_ID),\n      overlayComponentProp: makeSelectOverlayComponentProp(DESCRIPTION_DIALOG_ID),\n      selectedPureAttributeOption: makeSelectSelectedPureAttributeOption(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    createAttributeOption: (pureAttributeOption: IMap<Partial<PureAttributeOption>>, attributeId: number, setLoading?: boolean, successCB?: (newAttributeOption: IMap<PureAttributeOption>) => void, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => {\n      dispatch(new CreatePureAttributeOptionAction({\n        pureAttributeOption,\n        attributeId,\n        setLoading,\n        successCB,\n        sendAmplitude\n      }));\n    },\n    createAttributeOptionThenSearchAttributeOptions: (pureAttributeOption: IMap<Partial<PureAttributeOption>>, attributeId: number, options: Option<PureAttributeOption>, filters?: Filter, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => {\n      dispatch(new CreatePureAttributeOptionThenSearchPureAttributeOptionsAction({\n        pureAttributeOption,\n        attributeId,\n        filters,\n        options: options ? options : defaultOptions,\n        sendAmplitude\n      }));\n    },\n    resetSelectedPureAttributeOption: () => {\n      dispatch(new SetSelectedPureAttributeOptionAction({ pureAttributeOption: Map() as IMap<PureAttributeOption> }));\n    },\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: DESCRIPTION_DIALOG_ID,\n        open: false\n      }));\n      dispatch(new SetOverlayComponentPropsAction({\n        id: DESCRIPTION_DIALOG_ID,\n        props: {}\n      }));\n      dispatch(new SetSelectedPureAttributeOptionAction({ pureAttributeOption: Map() as IMap<PureAttributeOption> }));\n    },\n    updateAttributeOption: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, successCB?: (newAttributeOption?: IMap<PureAttributeOption>) => void, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => {\n      dispatch(new UpdateAttributeOptionAction({\n        attributeId,\n        optionId,\n        attributeOption,\n        successCB,\n        sendAmplitude\n      }));\n    },\n    updateAttributeOptionThenSearchAttributeOptions: (attributeId: number, optionId: number, attributeOption: IMap<Partial<PureAttributeOption>>, options: Option<PureAttributeOption>, filters?: Filter, sendAmplitude?: (attributeOption: IMap<PureAttributeOption>) => void) => {\n      dispatch(new UpdateAttributeOptionThenSearchAttributeOptionsAction({\n        attributeId,\n        optionId,\n        attributeOption,\n        filters,\n        options: options ? options : defaultOptions,\n        sendAmplitude\n      }));\n    },\n    SearchAttributeOptions: (attributeId: number, value: string) => {\n      dispatch(new SearchAttributeOptionsSecondaryAction({ attributeId, value }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IDescriptionDialogContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: DESCRIPTION_DIALOG_ID,\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n  }),\n)(DescriptionDialog);","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport enum CreateNewMasterFromStepperActionTypes {\n  CLEAR_FORM_VALUES = 'CLEAR_FORM_VALUES',\n  SET_FORM_VALUES = 'SET_FORM_VALUES',\n}\n\nexport class ClearFormValuesAction implements IAction {\n  public readonly type = CreateNewMasterFromStepperActionTypes.CLEAR_FORM_VALUES;\n}\n\nexport class SetFormValuesAction implements IAction {\n  public readonly type = CreateNewMasterFromStepperActionTypes.SET_FORM_VALUES;\n  constructor(\n    public payload: Map<string, any>\n  ) {}\n}","import { createStyles, Divider, Grid, IconButton, LinearProgress, Link, ListItem, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { SeriesProductFile } from '../../../models';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport { IProductFile } from '../../../models/File';\nimport useFileUpload, { ERROR_TYPE } from '../../../hooks/useFileUpload';\nimport Language from '../../../models/Language';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  warning: {\n    marginRight: theme.spacing(1),\n  },\n  iconButton: {\n    width: 36,\n    height: 36,\n  },\n  contentColumn: {\n    width: 'calc(100% - 75px)'\n  },\n  iconColumn: {\n    width: 75,\n  },\n  na: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n}));\n\ninterface IUploadFileItemComponentProps {\n  selectedLanguage: Language;\n  mediaKey: string;\n  label: string;\n  tooltip: string;\n  accept: string[];\n  formName: string;\n}\n\ninterface IUploadFileItemProps extends IUploadFileItemComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\n\nconst UploadFileItem: React.FC<IUploadFileItemProps & WithTranslation> = ({\n  selectedLanguage = 'en',\n  mediaKey,\n  label,\n  accept,\n  tooltip,\n  formValues,\n  formName,\n  dispatch,\n  t,\n}) => {\n\n  const atsApi = useAtsApi();\n  const classes = useStyles();\n  const acceptString = accept.join(', ');\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n\n  const media = formFile.getIn(['media', selectedLanguage, mediaKey], Map() as IMap<IProductFile>);\n  const fileId = media?.get('fileId', '');\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setFile\n   } = useFileUpload(accept);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = formFile.withMutations((ctx) => {\n      ctx.updateIn(['media', selectedLanguage, mediaKey], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n        }));\n      });\n      ctx.deleteIn(['media', mediaKey]);\n    });\n    dispatch(change(formName, 'file', transformedFile));\n  }, [uploadedFile]);\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      _fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const filename = media?.get('filename', '');\n  const fileLink = fileId && generateFileLink(fileId);\n\n  return (\n    <>\n      <ListItem dense={true}>\n        <Grid container={true} alignItems='center' spacing={1}>\n          <Grid item={true} xs={4}>\n            <Typography variant='body1'>{label}</Typography>\n          </Grid>\n          <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n            {\n              fileLink\n                ? <>\n                    <Grid item={true} container={true} className={classes.contentColumn}>\n                      <Tooltip title={filename}>\n                        <Link href={fileLink} className={classes.ellipsis}>{filename}</Link>\n                      </Tooltip>\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                      <IconButton\n                        className={classes.iconButton}\n                        onClick={() => {\n                          const updated = formFile && formFile.withMutations((ctx) => {\n                            if (ctx.getIn(['media', selectedLanguage, mediaKey, 'url'])) {\n                              ctx.deleteIn(['media', selectedLanguage, mediaKey, 'fileId']);\n                              ctx.deleteIn(['media', selectedLanguage, mediaKey, 'filename']);\n                              ctx.deleteIn(['media', selectedLanguage, mediaKey, 'mimeType']);\n                              ctx.deleteIn(['media', selectedLanguage, mediaKey, 'size']);\n                            } else {\n                              ctx.deleteIn(['media', selectedLanguage, mediaKey]);\n                            }\n                            ctx.deleteIn(['media', mediaKey]);\n                          });\n                          dispatch(change(formName, 'file', updated));\n                        }}\n                      >\n                        <DeleteIcon />\n                      </IconButton>\n                    </Grid>\n                  </>\n                : <>\n                    <Grid\n                      item={true}\n                      wrap='nowrap'\n                      alignItems='center'\n                      container={true}\n                      className={classes.contentColumn}\n                    >\n                      {\n                        isUploading\n                          ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                              <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='primary' style={{ flexGrow: 1}} />\n                              <Typography>{loadingPercentage}%</Typography>\n                            </Grid>\n                          : <Grid>\n                              <Typography className={classes.na}>{ t('pimProductDrawer.na') }</Typography>\n                                {\n                                  uploadErr && (\n                                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                                      <WarningRoundedIcon color='error' fontSize='small' className={classes.warning}/>\n                                      <Typography color='error' variant='caption'>\n                                        {\n                                          uploadErr === ERROR_TYPE.size\n                                            ? t('pimProductDrawer.overLimitMessage')\n                                            : uploadErr === ERROR_TYPE.type\n                                              ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                                              : t('attachmentDrawer.notUploaded')\n                                        }\n                                      </Typography>\n                                    </Grid>\n                                  )\n                                }\n                            </Grid>\n                      }\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                      <input\n                        className={classes.hiddenInput}\n                        type='file'\n                        name='file'\n                        onChange={(e) => setFile(e.target.files[0])}\n                        accept={acceptString}\n                        id={mediaKey}\n                      />\n                      <label htmlFor={mediaKey}>\n                        <Tooltip title={tooltip}>\n                          <span>\n                            <IconButton\n                              disabled={isUploading}\n                              component='span'\n                              className={classes.iconButton}\n                            >\n                              <PublishIcon />\n                            </IconButton>\n                          </span>\n                        </Tooltip>\n                      </label>\n                    </Grid>\n                  </>\n            }\n          </Grid>\n        </Grid>\n      </ListItem>\n      <Divider component='li'/>\n    </>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<IUploadFileItemComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(UploadFileItem);","import { CircularProgress, createStyles, Divider, FormControl, Grid, IconButton, LinearProgress, Link, ListItem, makeStyles, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { SeriesProductFile } from '../../../models';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport { IProductFile } from '../../../models/File';\nimport { ERROR_TYPE } from '../../../hooks/useFileUpload';\nimport Language from '../../../models/Language';\nimport useFileUploadByAny from '../../../hooks/useFileUploadByAny';\nimport { isURL } from './EditLink';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport CachedIcon from '@material-ui/icons/Cached';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  warning: {\n    marginRight: theme.spacing(1),\n  },\n  input: {\n    padding: theme.spacing(0.5, 1.75),\n    fontSize: theme.typography.body1.fontSize,\n  },\n  noMargin: {\n    marginLeft: 0,\n    marginRight: 0,\n  },\n  iconButton: {\n    width: 36,\n    height: 36,\n  },\n  contentColumn: {\n    width: 'calc(100% - 75px)'\n  },\n  iconColumn: {\n    width: 75,\n  },\n  na: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n}));\n\ninterface IFullMediaItemComponentProps {\n  selectedLanguage: Language;\n  mediaKey: string;\n  label: string;\n  tooltip: string;\n  accept: string[];\n  formName: string;\n}\n\ninterface IFullMediaItemProps extends IFullMediaItemComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\n\nconst FullMediaItem: React.FC<IFullMediaItemProps & WithTranslation> = ({\n  selectedLanguage = 'en',\n  mediaKey,\n  label,\n  accept,\n  tooltip,\n  formValues,\n  formName,\n  dispatch,\n  t,\n}) => {\n\n  const atsApi = useAtsApi();\n  const classes = useStyles();\n  const acceptString = accept.join(', ');\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n\n  const media = formFile.getIn(['media', selectedLanguage, mediaKey], Map() as IMap<IProductFile>);\n  const fileId = media?.get('fileId', '');\n  const url = media?.get('url', '');\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setFile,\n    setUrl,\n    setUploadErr,\n    uploadFileByUrl,\n   } = useFileUploadByAny(accept);\n\n  const [errorText, setErrorText] = React.useState('');\n  const [urlTempValue, setUrlTempValue] = React.useState('');\n\n  React.useEffect(() => {\n    setUrlTempValue(url || '');\n  }, [url]);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = formFile.withMutations((ctx) => {\n      ctx.updateIn(['media', selectedLanguage, mediaKey], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n        }));\n      });\n      ctx.deleteIn(['media', mediaKey]);\n    });\n    dispatch(change(formName, 'file', transformedFile));\n    setUrlTempValue('');\n    setErrorText('');\n  }, [uploadedFile]);\n\n  const handleDeleteFile = () => {\n    const updated = formFile && formFile.withMutations((ctx) => {\n      if (ctx.getIn(['media', selectedLanguage, mediaKey, 'url'])) {\n        ctx.deleteIn(['media', selectedLanguage, mediaKey, 'fileId']);\n        ctx.deleteIn(['media', selectedLanguage, mediaKey, 'filename']);\n        ctx.deleteIn(['media', selectedLanguage, mediaKey, 'mimeType']);\n        ctx.deleteIn(['media', selectedLanguage, mediaKey, 'size']);\n      } else {\n        ctx.deleteIn(['media', selectedLanguage, mediaKey]);\n      }\n      ctx.deleteIn(['media', mediaKey]);\n    });\n    dispatch(change(formName, 'file', updated));\n    setUploadErr(null);\n  };\n\n  const handleDeleteUrl = () => {\n    if (formFile.getIn(['media', selectedLanguage, mediaKey, 'fileId'])) {\n      const updated = formFile.setIn(['media', selectedLanguage, mediaKey, 'url'], '').deleteIn(['media', mediaKey]);\n      dispatch(change(formName, 'file', updated));\n    } else {\n      const newFiles = formFile.deleteIn(['media', selectedLanguage, mediaKey]).deleteIn(['media', mediaKey]);\n      dispatch(change(formName, 'file', newFiles));\n    }\n    setUploadErr(null);\n  };\n\n  const handleDeleteMediaType = () => {\n    const newFiles = formFile.deleteIn(['media', selectedLanguage, mediaKey]).deleteIn(['media', mediaKey]);\n    dispatch(change(formName, 'file', newFiles));\n    setUploadErr(null);\n  };\n\n  const onAttachLink = () => {\n    setErrorText('');\n\n    if (urlTempValue && isURL(urlTempValue)) {\n      setUrl(urlTempValue);\n\n      const updated = formFile.setIn(['media', selectedLanguage, mediaKey, 'url'], urlTempValue).deleteIn(['media', mediaKey]);\n      dispatch(change(formName, 'file', updated));\n    } else if (urlTempValue && !isURL(urlTempValue)) {\n      setErrorText(t('errors.isExternalLink'));\n    }\n  };\n\n  const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setUrlTempValue(e.target.value);\n  };\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      _fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const filename = media?.get('filename', '');\n  const fileLink = fileId && generateFileLink(fileId);\n\n  const uploadErrFile = !uploadErr?.includes('FromUrl') && uploadErr;\n  const uploadErrUrl = uploadErr?.includes('FromUrl') && uploadErr;\n\n  return (\n    <>\n      <ListItem dense={true}>\n        <Grid style={{ width: '100%' }}>\n          <Grid container={true} alignItems='center' spacing={1}>\n            <Grid item={true} xs={4}>\n              <Typography variant='body1'>{label}</Typography>\n            </Grid>\n            {\n              (fileLink && !isUploading)\n                ? <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n                    <Grid item={true} container={true} className={classes.contentColumn}>\n                      <Tooltip title={filename}>\n                        <Link href={fileLink} className={classes.ellipsis}>{filename}</Link>\n                      </Tooltip>\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                      <Tooltip title={(fileLink && url) ? t('pimProductDrawer.deleteMediaTypeTooltip') : ''}>\n                        <IconButton\n                          className={classes.iconButton}\n                          onClick={handleDeleteMediaType}\n                        >\n                          <DeleteIcon />\n                        </IconButton>\n                      </Tooltip>\n                    </Grid>\n                  </Grid>\n                : <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n                    <Grid\n                      item={true}\n                      wrap='nowrap'\n                      alignItems='center'\n                      container={true}\n                      className={classes.contentColumn}\n                    >\n                      {\n                        isUploading\n                          ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                              <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='primary' style={{ flexGrow: 1}} />\n                              <Typography>{loadingPercentage}%</Typography>\n                              <CircularProgress color='primary' size={18} style={{ marginLeft: 8 }} />\n                            </Grid>\n                          : <Grid>\n                              <Typography className={classes.na}>{ t('pimProductDrawer.na') }</Typography>\n                                {\n                                  uploadErrFile && (\n                                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                                      <WarningRoundedIcon color='error' fontSize='small' className={classes.warning}/>\n                                      <Typography color='error' variant='caption'>\n                                        {\n                                          uploadErr === ERROR_TYPE.size\n                                            ? t('pimProductDrawer.overLimitMessage')\n                                            : uploadErr === ERROR_TYPE.type\n                                              ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                                              : t('attachmentDrawer.notUploaded')\n                                        }\n                                      </Typography>\n                                    </Grid>\n                                  )\n                                }\n                            </Grid>\n                      }\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                      <input\n                        className={classes.hiddenInput}\n                        type='file'\n                        name='file'\n                        onChange={(e) => setFile(e.target.files[0])}\n                        accept={acceptString}\n                        id={mediaKey}\n                      />\n                      <label htmlFor={mediaKey}>\n                        <Tooltip title={url ? t('pimProductDrawer.deleteUrlFirstPrompt') : tooltip}>\n                          <span>\n                            <IconButton\n                              component='span'\n                              disabled={isUploading || Boolean(url)}\n                              className={classes.iconButton}\n                            >\n                              <PublishIcon />\n                            </IconButton>\n                          </span>\n                        </Tooltip>\n                      </label>\n                    </Grid>\n                  </Grid>\n            }\n          </Grid>\n\n          <Grid container={true} spacing={1} alignItems='center' wrap='nowrap'>\n            <Grid item={true} xs={4} />\n            {\n              url\n                ? <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n                    <Grid item={true} container={true} className={classes.contentColumn}>\n                      <Tooltip title={url}>\n                        <Link href={url} className={classes.ellipsis} target='_blank' rel='noopener'>{url}</Link>\n                      </Tooltip>\n                      {\n                        uploadErrUrl && (\n                          <Grid container={true} wrap='nowrap' alignItems='center'>\n                            <WarningRoundedIcon color='error' fontSize='small' className={classes.warning}/>\n                            <Typography color='error' variant='caption'>\n                              {\n                                uploadErr === ERROR_TYPE.sizeFromUrl\n                                  ? t('pimProductDrawer.overLimitMessage')\n                                  : uploadErr === ERROR_TYPE.typeFromUrl\n                                    ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                                    : t('attachmentDrawer.notUploaded')\n                              }\n                            </Typography>\n                          </Grid>\n                        )\n                      }\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' wrap='nowrap' className={classes.iconColumn}>\n                      <Tooltip title={t('pimProductDrawer.refreshFileByUrlTooltip')}>\n                        <span>\n                          <IconButton\n                            className={classes.iconButton}\n                            disabled={isUploading}\n                            onClick={() => uploadFileByUrl(url)}\n                          >\n                            <CachedIcon />\n                          </IconButton>\n                        </span>\n                      </Tooltip>\n                      <Tooltip title={(fileLink && url) ? t('pimProductDrawer.deleteMediaTypeTooltip') : ''}>\n                        <span>\n                          <IconButton\n                            className={classes.iconButton}\n                            disabled={isUploading}\n                            onClick={handleDeleteMediaType}\n                          >\n                            <DeleteIcon />\n                          </IconButton>\n                        </span>\n                      </Tooltip>\n                    </Grid>\n                  </Grid>\n                : <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n                    <Grid item={true} className={classes.contentColumn}>\n                      <Tooltip title={fileLink ? t('pimProductDrawer.deleteFileFirstPrompt') : ''}>\n                        <FormControl\n                          fullWidth={true}\n                        >\n                          <TextField\n                            type='text'\n                            variant='outlined'\n                            placeholder={t('pimProductDrawer.urlPlaceholder')}\n                            value={urlTempValue}\n                            onChange={onChange}\n                            disabled={isUploading || Boolean(fileLink)}\n                            InputProps={{\n                              classes: {\n                                input: classes.input,\n                              }\n                            }}\n                            FormHelperTextProps={{\n                              margin: 'dense',\n                              classes: {\n                                contained: classes.noMargin,\n                              }\n                            }}\n                            error={Boolean(errorText)}\n                            helperText={errorText}\n                          />\n                        </FormControl>\n                      </Tooltip>\n                    </Grid>\n                    <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                      <Tooltip title={fileLink ? t('pimProductDrawer.deleteFileFirstPrompt') : t('pimProductDrawer.uploadFileByUrlTooltip')}>\n                        <span>\n                          <IconButton\n                            disabled={isUploading || Boolean(fileLink)}\n                            onClick={onAttachLink}\n                            className={classes.iconButton}\n                          >\n                            <AttachFileIcon />\n                          </IconButton>\n                        </span>\n                      </Tooltip>\n                    </Grid>\n                  </Grid>\n            }\n          </Grid>\n        </Grid>\n      </ListItem>\n      <Divider component='li'/>\n    </>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<IFullMediaItemComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(FullMediaItem);","import * as React from 'react';\nimport { IAction } from 'ats-utils/src';\nimport { createStyles, Grid, List as MuiList, ListSubheader, makeStyles, Theme } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport { getFormValues } from 'redux-form/immutable';\nimport EditLink from './EditLink';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport UploadFileItem from './UploadFileItem';\nimport { withAtsApi } from '../../../contexts';\nimport { WithAtsApi } from '../../../contexts/AtsApiContext';\nimport Language from '../../../models/Language';\nimport FullMediaItem from './FullMediaItem';\n\nexport const mediaKeys1 = [\n  {\n    key: 'roughin',\n    label: 'fileTypes.roughin',\n    accept: ['.JPG', '.JPEG', '.PNG'],\n    tooltip: 'pimProductDrawer.imageUploadTooltip',\n  },\n  {\n    key: 'manufacturer_cutsheet',\n    label: 'fileTypes.manufacturerCutsheet',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n    fullUpload: true,\n  },\n  {\n    key: 'epd',\n    label: 'fileTypes.epd',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n    disabledForProduct: true,\n  },\n  {\n    key: 'shop_drawing',\n    label: 'fileTypes.shopDrawing',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'troubleshooting_document',\n    label: 'fileTypes.troubleshootingDocument',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'product_summary',\n    label: 'fileTypes.productSummary',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'sales_brochure',\n    label: 'fileTypes.salesBrochure',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'bill_of_material',\n    label: 'fileTypes.billOfMaterial',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'operation_guide',\n    label: 'fileTypes.operationGuide',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'installation_manual',\n    label: 'fileTypes.installationManual',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  // {\n  //   key: 'sales_brochure',\n  //   label: 'fileTypes.salesBrochure',\n  //   accept: ['.PDF'],\n  //   tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  // },\n  // {\n  //   key: 'vsb website assets',\n  //   label: 'VSB Website Assets',\n  // },\n  // {\n  //   key: 'vsb desktop assets',\n  //   label: 'VSB Desktop Assets',\n  // }\n];\n\nexport const mediaKeys2 = [\n  {\n    key: 'warranty',\n    label: 'fileTypes.warranty',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'cut_out_template',\n    label: 'fileTypes.cutOutTemplate',\n    accept: ['.DXF', '.DWG', '.PDF', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/DWG/PDF/ZIP' },\n  },\n  {\n    key: 'swatch_sheet',\n    label: 'fileTypes.swatchSheet',\n    accept: ['.PDF'],\n    tooltip: 'pimProductDrawer.pdfUploadTooltip',\n  },\n  {\n    key: 'pump_curve',\n    label: 'fileTypes.pumpCurve',\n    accept: ['.JPG', '.JPEG', '.PNG'],\n    tooltip: 'pimProductDrawer.imageUploadTooltip',\n  },\n  {\n    key: 'fan_curve',\n    label: 'fileTypes.fanCurve',\n    accept: ['.JPG', '.JPEG', '.PNG'],\n    tooltip: 'pimProductDrawer.imageUploadTooltip',\n  },\n  {\n    key: 'configurations',\n    label: 'fileTypes.configurations',\n    accept: ['.JPG', '.JPEG', '.PNG'],\n    tooltip: 'pimProductDrawer.imageUploadTooltip',\n  },\n];\n\nexport const designMediaKeys = [\n  {\n    key: 'revit',\n    label: 'fileTypes.revit',\n    accept: ['.RFA', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'RFA/ZIP' },\n  },\n  {\n    key: 'cad',\n    label: 'fileTypes.cad',\n    accept: ['.DXF', '.DWG', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/DWG/ZIP' },\n  },\n  {\n    key: 'sketchup',\n    label: 'fileTypes.sketchup',\n    accept: ['.SKP', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'SKP/ZIP' },\n  },\n  {\n    key: 'dxf_plan',\n    label: 'fileTypes.dxf_plan',\n    accept: ['.DXF', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/ZIP' },\n  },\n  {\n    key: 'dwg_plan',\n    label: 'fileTypes.dwg_plan',\n    accept: ['.DWG', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DWG/ZIP' },\n  },\n  {\n    key: 'dxf_front',\n    label: 'fileTypes.dxf_front',\n    accept: ['.DXF', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/ZIP' },\n  },\n  {\n    key: 'dwg_front',\n    label: 'fileTypes.dwg_front',\n    accept: ['.DWG', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DWG/ZIP' },\n  },\n  {\n    key: 'dxf_side',\n    label: 'fileTypes.dxf_side',\n    accept: ['.DXF', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/ZIP' },\n  },\n  {\n    key: 'dwg_side',\n    label: 'fileTypes.dwg_side',\n    accept: ['.DWG', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DWG/ZIP' },\n  },\n  {\n    key: 'dxf_model',\n    label: 'fileTypes.dxf_model',\n    accept: ['.DXF', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DXF/ZIP' },\n  },\n  {\n    key: 'dwg_model',\n    label: 'fileTypes.dwg_model',\n    accept: ['.DWG', '.ZIP'],\n    tooltip: 'pimProductDrawer.uploadFileTooltip',\n    tArgs: { fileTypes: 'DWG/ZIP' },\n  },\n];\n\nexport const fullMediaKeys = mediaKeys1.concat(mediaKeys2);\nexport const allMediaKeys = fullMediaKeys.concat(designMediaKeys);\n\nexport const linkKeys = [\n  // {\n  //   key: 'manufacturer_cutsheet',\n  //   label: 'fileTypes.manufacturerCutsheet',\n  //   uploadFileByUrl: true,\n  //   accept: ['.PDF'],\n  // },\n  {\n    key: 'marketing_video',\n    label: 'fileTypes.marketingVideo',\n  },\n  {\n    key: 'product_webpage',\n    label: 'fileTypes.productWebpage',\n  }\n];\n\nexport interface IMediaKey {\n  key: string;\n  label: string;\n  accept: string[];\n  tooltip: string;\n  tArgs?: object;\n  disabledForProduct?: boolean;\n  fullUpload?: boolean;\n}\n\ninterface IAttachmentsComponentProps {\n  formName: string;\n  selectedLanguage?: Language;\n}\n\ninterface IAttachmentsProps extends IAttachmentsComponentProps {\n  formValues: any;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype AttachmentProps = IAttachmentsProps & WithTranslation & WithAtsApi;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  sectionHeader: {\n    fontSize: theme.typography.body2.fontSize,\n  }\n}));\n\nconst Attachments: React.FC<AttachmentProps> = (props): JSX.Element => {\n  const {\n    t,\n    formName,\n    selectedLanguage = 'en'\n  } = props;\n  const classes = useStyles();\n\n  const renderMediaColumn = (_mediaKeys: IMediaKey[]) => {\n    return _mediaKeys.map(({ key, label, accept, tooltip, tArgs, fullUpload }) => {\n      if (fullUpload) {\n        return (\n          <FullMediaItem\n            key={key}\n            selectedLanguage={selectedLanguage}\n            mediaKey={key}\n            label={t(label)}\n            accept={accept}\n            tooltip={t(tooltip, tArgs)}\n            formName={formName}\n          />\n        );\n      }\n\n      return (\n        <UploadFileItem\n          key={key}\n          selectedLanguage={selectedLanguage}\n          mediaKey={key}\n          label={t(label)}\n          accept={accept}\n          tooltip={t(tooltip, tArgs)}\n          formName={formName}\n        />\n      );\n    });\n  };\n\n  const renderMediaColumns = () => (\n    <Grid\n      lg={8}\n      md={12}\n      xs={12}\n      item={true}\n    >\n      <MuiList\n        subheader={<ListSubheader className={classes.sectionHeader} color='inherit'>{t('SeriesDetailPage.media')}</ListSubheader>}\n      >\n        <Grid\n          container={true}\n          spacing={2}\n        >\n          <Grid\n            md={6}\n            xs={12}\n            item={true}\n          >\n            {renderMediaColumn(mediaKeys1)}\n          </Grid>\n          <Grid\n            md={6}\n            xs={12}\n            item={true}\n          >\n            {renderMediaColumn(mediaKeys2)}\n          </Grid>\n        </Grid>\n      </MuiList>\n    </Grid>\n  );\n\n  const renderDesignMediaColumns = () => (\n    <Grid\n      lg={4}\n      md={12}\n      xs={12}\n      item={true}\n    >\n      <MuiList\n        subheader={<ListSubheader className={classes.sectionHeader} color='inherit'>{t('SeriesDetailPage.designFiles')}</ListSubheader>}\n      >\n        {renderMediaColumn(designMediaKeys)}\n      </MuiList>\n    </Grid>\n  );\n\n  const renderLinksColumn = () => (\n    <Grid\n      lg={4}\n      md={12}\n      xs={12}\n      item={true}\n    >\n      <MuiList\n        subheader={<ListSubheader className={classes.sectionHeader} color='inherit'>{t('SeriesDetailPage.links')}</ListSubheader>}\n      >\n        {\n          linkKeys.map(({ key, label }) => {\n            return (\n              <EditLink\n                key={key}\n                selectedLanguage={selectedLanguage}\n                label={label}\n                linkKey={key}\n                formName={formName}\n              />\n            );\n          })\n        }\n      </MuiList>\n    </Grid>\n  );\n\n  return (\n    <Grid\n      xs={12}\n      container={true}\n      item={true}\n      spacing={2}\n    >\n      {renderMediaColumns()}\n      {renderDesignMediaColumns()}\n      {renderLinksColumn()}\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<IAttachmentsComponentProps>>(\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n)(Attachments);","import { safeLocalStorage } from './safeStorage';\n// Deliberately a single app-wide \"prefer wide drawers\" preference shared by every\n// expandable drawer (drawers opt out via `hideExpandButton`); not scoped per drawer.\nexport const DRAWER_EXPANDED_KEY = 'drawerExpanded';\nexport const DRAWER_EXPANDED_EVENT = 'drawerExpandedChange';\n\nexport const getDrawerExpanded = (): boolean =>\n  safeLocalStorage.getItem(DRAWER_EXPANDED_KEY) === 'true';\n\n/**\n * Persists the expanded state and notifies listeners in the same tab.\n * `localStorage` only fires `storage` events in *other* tabs, so we dispatch a\n * custom event to let components in the current tab react immediately.\n */\nexport const setDrawerExpanded = (expanded: boolean): void => {\n  safeLocalStorage.setItem(DRAWER_EXPANDED_KEY, String(expanded));\n  window.dispatchEvent(new Event(DRAWER_EXPANDED_EVENT));\n};\n","export async function getBytes(stream, onChunk) {\r\n    const reader = stream.getReader();\r\n    let result;\r\n    while (!(result = await reader.read()).done) {\r\n        onChunk(result.value);\r\n    }\r\n}\r\nexport function getLines(onLine) {\r\n    let buffer;\r\n    let position;\r\n    let fieldLength;\r\n    let discardTrailingNewline = false;\r\n    return function onChunk(arr) {\r\n        if (buffer === undefined) {\r\n            buffer = arr;\r\n            position = 0;\r\n            fieldLength = -1;\r\n        }\r\n        else {\r\n            buffer = concat(buffer, arr);\r\n        }\r\n        const bufLength = buffer.length;\r\n        let lineStart = 0;\r\n        while (position < bufLength) {\r\n            if (discardTrailingNewline) {\r\n                if (buffer[position] === 10) {\r\n                    lineStart = ++position;\r\n                }\r\n                discardTrailingNewline = false;\r\n            }\r\n            let lineEnd = -1;\r\n            for (; position < bufLength && lineEnd === -1; ++position) {\r\n                switch (buffer[position]) {\r\n                    case 58:\r\n                        if (fieldLength === -1) {\r\n                            fieldLength = position - lineStart;\r\n                        }\r\n                        break;\r\n                    case 13:\r\n                        discardTrailingNewline = true;\r\n                    case 10:\r\n                        lineEnd = position;\r\n                        break;\r\n                }\r\n            }\r\n            if (lineEnd === -1) {\r\n                break;\r\n            }\r\n            onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\r\n            lineStart = position;\r\n            fieldLength = -1;\r\n        }\r\n        if (lineStart === bufLength) {\r\n            buffer = undefined;\r\n        }\r\n        else if (lineStart !== 0) {\r\n            buffer = buffer.subarray(lineStart);\r\n            position -= lineStart;\r\n        }\r\n    };\r\n}\r\nexport function getMessages(onId, onRetry, onMessage) {\r\n    let message = newMessage();\r\n    const decoder = new TextDecoder();\r\n    return function onLine(line, fieldLength) {\r\n        if (line.length === 0) {\r\n            onMessage === null || onMessage === void 0 ? void 0 : onMessage(message);\r\n            message = newMessage();\r\n        }\r\n        else if (fieldLength > 0) {\r\n            const field = decoder.decode(line.subarray(0, fieldLength));\r\n            const valueOffset = fieldLength + (line[fieldLength + 1] === 32 ? 2 : 1);\r\n            const value = decoder.decode(line.subarray(valueOffset));\r\n            switch (field) {\r\n                case 'data':\r\n                    message.data = message.data\r\n                        ? message.data + '\\n' + value\r\n                        : value;\r\n                    break;\r\n                case 'event':\r\n                    message.event = value;\r\n                    break;\r\n                case 'id':\r\n                    onId(message.id = value);\r\n                    break;\r\n                case 'retry':\r\n                    const retry = parseInt(value, 10);\r\n                    if (!isNaN(retry)) {\r\n                        onRetry(message.retry = retry);\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n    };\r\n}\r\nfunction concat(a, b) {\r\n    const res = new Uint8Array(a.length + b.length);\r\n    res.set(a);\r\n    res.set(b, a.length);\r\n    return res;\r\n}\r\nfunction newMessage() {\r\n    return {\r\n        data: '',\r\n        event: '',\r\n        id: '',\r\n        retry: undefined,\r\n    };\r\n}\r\n//# sourceMappingURL=parse.js.map","var __rest = (this && this.__rest) || function (s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n};\r\nimport { getBytes, getLines, getMessages } from './parse';\r\nexport const EventStreamContentType = 'text/event-stream';\r\nconst DefaultRetryInterval = 1000;\r\nconst LastEventId = 'last-event-id';\r\nexport function fetchEventSource(input, _a) {\r\n    var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, [\"signal\", \"headers\", \"onopen\", \"onmessage\", \"onclose\", \"onerror\", \"openWhenHidden\", \"fetch\"]);\r\n    return new Promise((resolve, reject) => {\r\n        const headers = Object.assign({}, inputHeaders);\r\n        if (!headers.accept) {\r\n            headers.accept = EventStreamContentType;\r\n        }\r\n        let curRequestController;\r\n        function onVisibilityChange() {\r\n            curRequestController.abort();\r\n            if (!document.hidden) {\r\n                create();\r\n            }\r\n        }\r\n        if (!openWhenHidden) {\r\n            document.addEventListener('visibilitychange', onVisibilityChange);\r\n        }\r\n        let retryInterval = DefaultRetryInterval;\r\n        let retryTimer = 0;\r\n        function dispose() {\r\n            document.removeEventListener('visibilitychange', onVisibilityChange);\r\n            window.clearTimeout(retryTimer);\r\n            curRequestController.abort();\r\n        }\r\n        inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {\r\n            dispose();\r\n            resolve();\r\n        });\r\n        const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;\r\n        const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;\r\n        async function create() {\r\n            var _a;\r\n            curRequestController = new AbortController();\r\n            try {\r\n                const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));\r\n                await onopen(response);\r\n                await getBytes(response.body, getLines(getMessages(id => {\r\n                    if (id) {\r\n                        headers[LastEventId] = id;\r\n                    }\r\n                    else {\r\n                        delete headers[LastEventId];\r\n                    }\r\n                }, retry => {\r\n                    retryInterval = retry;\r\n                }, onmessage)));\r\n                onclose === null || onclose === void 0 ? void 0 : onclose();\r\n                dispose();\r\n                resolve();\r\n            }\r\n            catch (err) {\r\n                if (!curRequestController.signal.aborted) {\r\n                    try {\r\n                        const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;\r\n                        window.clearTimeout(retryTimer);\r\n                        retryTimer = window.setTimeout(create, interval);\r\n                    }\r\n                    catch (innerErr) {\r\n                        dispose();\r\n                        reject(innerErr);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        create();\r\n    });\r\n}\r\nfunction defaultOnOpen(response) {\r\n    const contentType = response.headers.get('content-type');\r\n    if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {\r\n        throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);\r\n    }\r\n}\r\n//# sourceMappingURL=fetch.js.map","import { fetchEventSource } from '@microsoft/fetch-event-source';\nimport { getEnv } from '../../constants';\n\n// Broadcast after the stream reconnects following a drop, so consumers can\n// re-fetch anything they missed while offline.\nexport const SSE_RECONNECTED_EVENT = 'sse.reconnected';\n\nconst RECONNECT_INTERVAL = 5000;\n\n// Non-retryable auth failure detected via a name tag rather than `instanceof`:\n// the build target is ES5, where `class extends Error` loses the prototype chain.\nconst SSE_AUTH_ERROR = 'SseAuthError';\n\nexport interface ISseConnectionParams {\n  apiGateway: string;\n  userId: number;\n  token: string;\n}\n\ntype Handler = (data: Record<string, unknown>) => void;\n\nfunction isCompleteParams(params: ISseConnectionParams | null): params is ISseConnectionParams {\n  return !!params && !!params.apiGateway && params.userId != null && !!params.token;\n}\n\n// A refreshed token requires rebuilding the stream: fetch-event-source reuses\n// the token captured at connect time across its internal retries.\nfunction shouldReconnect(active: string | null, next: string | null): boolean {\n  return !!active && !!next && active !== next;\n}\n\n// Business-agnostic SSE client: one instance owns a single connection that is\n// driven by subscriber presence. Dispatches each frame by `data.type` so many\n// features can share the same socket. Instantiate more than one only if a second\n// independent connection is ever needed; the app uses the shared `sseClient`.\nexport class SseClient {\n  private listeners = new Map<string, Set<Handler>>();\n  // Connection params from the session layer; null when logged out / not configured.\n  private connectionParams: ISseConnectionParams | null = null;\n  private controller: AbortController | null = null;\n  private activeToken: string | null = null;\n  private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n  // Instance-scoped (not per-fetch) so an EOF-triggered reopen still counts as a\n  // reconnect and broadcasts SSE_RECONNECTED.\n  private hasEverOpened = false;\n  // Token that last failed auth (401/403): not retried on subscriber churn —\n  // syncConnection parks until configureSSE supplies a different token.\n  private failedAuthToken: string | null = null;\n\n  public onSseEvent(type: string, handler: Handler): () => void {\n    if (!this.listeners.has(type)) {\n      this.listeners.set(type, new Set());\n    }\n    this.listeners.get(type).add(handler);\n    this.syncConnection();\n    return () => {\n      const set = this.listeners.get(type);\n      if (set) {\n        set.delete(handler);\n      }\n      this.syncConnection();\n    };\n  }\n\n  // Provide / refresh / clear the connection params. Pass null on logout.\n  public configureSSE(params: ISseConnectionParams | null): void {\n    const next = isCompleteParams(params) ? params : null;\n    // A refreshed (or cleared) token gets a fresh attempt: drop the auth-failure\n    // block unless the exact same rejected token is being re-supplied.\n    if (!next || next.token !== this.failedAuthToken) {\n      this.failedAuthToken = null;\n    }\n    this.connectionParams = next;\n    this.syncConnection();\n  }\n\n  private subscriberCount(): number {\n    let total = 0;\n    this.listeners.forEach(set => { total += set.size; });\n    return total;\n  }\n\n  private emit(type: string, data: Record<string, unknown>): void {\n    const set = this.listeners.get(type);\n    if (set) {\n      set.forEach(handler => handler(data));\n    }\n  }\n\n  // Single source of truth for connection state: stay connected only while there\n  // is at least one subscriber and params are available; reconnect when the token\n  // changes; disconnect otherwise.\n  private syncConnection(): void {\n    const wantConnection = this.subscriberCount() > 0 && this.connectionParams != null;\n    if (!wantConnection) {\n      this.closeConnection(); // also clears any pending reconnect timer\n      return;\n    }\n    // A token that already failed auth will only 401 again; do not reconnect on\n    // subscriber churn — wait for configureSSE to supply a refreshed token.\n    if (this.connectionParams.token === this.failedAuthToken) {\n      return;\n    }\n    if (this.controller) {\n      if (shouldReconnect(this.activeToken, this.connectionParams.token)) {\n        // A token rotation is a reconnect, not a teardown: preserve hasEverOpened\n        // so the reopened stream still broadcasts SSE_RECONNECTED and consumers\n        // recover any frames missed during the abort -> reopen gap.\n        this.closeConnection(true);\n        this.openConnection(this.connectionParams);\n      }\n      return;\n    }\n    this.openConnection(this.connectionParams);\n  }\n\n  private openConnection(params: ISseConnectionParams): void {\n    // A live connection cancels any queued reconnect (e.g. a re-subscribe during the EOF backoff).\n    if (this.reconnectTimer != null) {\n      clearTimeout(this.reconnectTimer);\n      this.reconnectTimer = null;\n    }\n    const controller = new AbortController();\n    this.controller = controller;\n    this.activeToken = params.token;\n\n    const tokenKey = getEnv().TOKEN_KEY || 'X-ATS-Token';\n    const url = `${params.apiGateway}/msnotification/sse/events?userId=${params.userId}`;\n\n    fetchEventSource(url, {\n      signal: controller.signal,\n      openWhenHidden: true,\n      headers: {\n        [tokenKey]: params.token,\n      },\n      onopen: async (response) => {\n        if (response.status === 401 || response.status === 403) {\n          const err = new Error(`SSE auth failed: ${response.status}`);\n          err.name = SSE_AUTH_ERROR;\n          throw err; // stop retrying\n        }\n        if (this.hasEverOpened) {\n          this.emit(SSE_RECONNECTED_EVENT, {}); // reconnected after a drop\n        }\n        this.hasEverOpened = true;\n      },\n      onmessage: (event) => {\n        if (!event.data) {\n          return; // heartbeat\n        }\n        try {\n          const parsed = JSON.parse(event.data);\n          const type = parsed.type || event.event;\n          if (type) {\n            this.emit(type, parsed);\n          }\n        } catch {\n          // non-JSON heartbeat / keep-alive frame\n        }\n      },\n      onerror: (err) => {\n        if (err instanceof Error && err.name === SSE_AUTH_ERROR) {\n          throw err; // fatal, stop reconnecting\n        }\n        return RECONNECT_INTERVAL; // retry in 5s\n      },\n    }).then(() => {\n      // Stream ended with no error (graceful close / idle timeout). fetch-event-source\n      // only auto-retries via onerror, so reopen manually. The identity check skips this\n      // when an abort / token-rotation already replaced the connection.\n      if (this.controller === controller) {\n        this.controller = null;\n        this.activeToken = null;\n        this.scheduleReconnect();\n      }\n    }).catch((err) => {\n      // Fatal stop (auth). Reset so a later refresh / re-subscribe can re-establish, but\n      // don't auto-reconnect; remember the rejected token so churn won't immediately retry it.\n      if (this.controller === controller) {\n        this.controller = null;\n        this.activeToken = null;\n        if (err instanceof Error && err.name === SSE_AUTH_ERROR) {\n          this.failedAuthToken = params.token;\n        }\n      }\n    });\n  }\n\n  private scheduleReconnect(): void {\n    if (this.reconnectTimer != null) {\n      return; // a reconnect is already pending\n    }\n    this.reconnectTimer = setTimeout(() => {\n      this.reconnectTimer = null;\n      this.syncConnection();\n    }, RECONNECT_INTERVAL);\n  }\n\n  // preserveReconnectFlag keeps hasEverOpened set so the next open is still treated\n  // as a reconnect (token rotation). A genuine teardown (last unsubscribe / logout)\n  // leaves it false so the next open is a fresh first-open with no broadcast.\n  private closeConnection(preserveReconnectFlag = false): void {\n    if (this.reconnectTimer != null) {\n      clearTimeout(this.reconnectTimer);\n      this.reconnectTimer = null;\n    }\n    if (this.controller) {\n      this.controller.abort();\n    }\n    this.controller = null;\n    this.activeToken = null;\n    if (!preserveReconnectFlag) {\n      this.hasEverOpened = false;\n    }\n  }\n}\n\n// Shared single connection for the whole app (notifications + takeoff reuse it).\nexport const sseClient = new SseClient();\n","import {SPEC_PRINT_TYPE} from '../../constants';\n\nexport type DownloadFormat = SPEC_PRINT_TYPE;\nexport type DownloadStatus = 'failed' | 'loading' | 'succeed';\n\nexport enum DOWNLOAD_GROUP {\n    specifications = 'specifications',\n    bimCad = 'bimCad',\n    projectDocuments = 'projectDocuments',\n}\n\ninterface IDownloadFormatItemBase {\n    key: string;\n    label: string;\n    isActive: boolean;\n    selected?: boolean;\n    isProjectLevel?: boolean;\n    formName?: string;\n    requiredFields?: string[];\n}\n\nexport interface IGroupedFormatItem extends IDownloadFormatItemBase {\n    group: DOWNLOAD_GROUP;\n    isAdditionalFormat?: never;\n}\n\nexport interface IAdditionalFormatItem extends IDownloadFormatItemBase {\n    isAdditionalFormat: true;\n    group?: never;\n}\n\n// a format either belongs to a DOWNLOAD_GROUP or is an additional document — never neither,\n// so a new format cannot silently vanish from the grouped list rendering\nexport type IDownloadFormatItem = IGroupedFormatItem | IAdditionalFormatItem;\nexport interface IFiles {\n    name: string;\n    status: DownloadStatus;\n    type: SPEC_PRINT_TYPE;\n    fileId?: string;\n    specId: number;\n}","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'dashboard';\n\nexport const CANVAS_COLUMN_COUNT = 4; // how many columns to divide the screen width into\nexport const STYLE_CANVAS_ROW_HEIGHT = 180; // height of each dashboard row\nexport const STYLE_WIDGET_BORDER_RADIUS = '5px';\nexport const STYLE_WIDGET_DRAG_COLOR = '#cfe4c7';\nexport const STYLE_WIDGET_SHADOW_HEIGHT = 4;\nexport const STYLE_WIDGET_SHADOW_HEIGHT_DRAGGING = 10;\nexport const STYLE_WIDGET_HANDLE_WIDTH = '40px';\nexport const STYLE_WIDGET_HANDLE_HEIGHT = '40px';\nexport const STYLE_WIDGET_FLOATING_WIDGET_WIDTH = 60;\nexport const STYLE_WIDGET_MARGIN = 4;\n\nexport const DRAGGABLE_ANCHOR_ID = '__draggable_anchor__';\nexport const DASHBOARD_EDIT_MENU_ID = '__dashboard_edit_menu__';","import { fromJS, List, Map as ImmutableMap } from 'immutable';\nimport { VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID } from '../../constants';\nimport { updateDiscountsAndVisibilityPerspective } from '../../containers/Quote/utils';\nimport { IMap } from 'ats-utils/src';\nimport { Product } from '../../models';\nimport * as uuid from 'uuid/v1';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../containers/QuoteTemplate/utils';\nimport { formatThousandsNumber, truncateToDecimal } from '../../utils/format-number';\nimport { accurateSum, round } from '../../utils/parseFormulaFields';\n\nexport const constructSectionColumnSums = (sectionTemplateFieldsData: List<IMap<any>>, products: List<IMap<Product>>) => {\n  let countOfNotEmptyRows = 0;\n  const columnSums = sectionTemplateFieldsData?.map((cell: any, fieldsDataIndex: number) => {\n    const columnValues = products?.reduce((values: Array<string | number>, product: any) => {\n      if (!product || product.get('id') === -1) {\n        return values;\n      }\n      if (!product.get('excluded') && !product.get('notVisibleToSelectedCustomer')) {\n        const productFieldValue = product.getIn(['templateCells', fieldsDataIndex, 'fieldValue']);\n        countOfNotEmptyRows += productFieldValue ? 1 : 0;\n        values.push(productFieldValue);\n      }\n      return values;\n    }, []) ?? [];\n    const fieldSum = accurateSum(columnValues);\n\n    return cell.set('fieldValue', fieldSum.toString()).set('formattedValue', fieldSum.toString()).set('fieldNumValue', fieldSum);\n  }) ?? ImmutableMap();\n\n  return { columnSums, countOfNotEmptyRows };\n};\n\nexport const updateSectionIsRequestingProduct = ({\n                                                   products,\n                                                   isRequestingProduct,\n                                                   parsedVendorProduct,\n                                                   selectedCustomer,\n                                                   discounts,\n                                                  discountPriority,\n                                                   excluded,\n                                                   regionId,\n                                                 }: {\n  products: List<IMap<Product>>,\n  isRequestingProduct: boolean,\n  parsedVendorProduct: IMap<Product>,\n  selectedCustomer: IMap<any>,\n  discounts: IMap<any>,\n  discountPriority: string,\n  excluded: boolean,\n  regionId: string | number,\n}) => {\n  const updatedProducts = products.map((product: IMap<Product>) => {\n    if (product.getIn(['specToQuoteValues', 'specProductId']) && !product.get('productIndex')) {\n      if (isRequestingProduct && product.get('id') === -1) {\n        const parsedProduct = parsedVendorProduct.withMutations(map => {\n          map\n            .set('label', product.get('productNumber'))\n            .set('labelColumn', product.get('labelColumn') || '')\n            .set('defaultPrint', true)\n            .set('excluded', excluded)\n            .set('note', product.get('note'))\n            .set('isRecommended', false)\n            .set('quoteProductId', map.get('quoteProductId') || product.get('quoteProductId') || uuid())\n            .set('isRequestingProduct', isRequestingProduct)\n            .set('specToQuoteValues', product.get('specToQuoteValues'))\n            .delete('createdBy');\n        });\n        return updateDiscountsAndVisibilityPerspective({\n          discounts,\n          discountPriority,\n          selectedCustomer,\n          products: List([parsedProduct]),\n          regionId,\n        }).get(0);\n      } else if (!isRequestingProduct && product.get('id') === VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID) {\n        return fromJS({\n          id: -1,\n          quoteProductId: product.get('quoteProductId') || uuid(),\n          labelColumn: product.get('labelColumn') || '',\n          isRequestingProduct: false,\n          specToQuoteValues: product.get('specToQuoteValues')\n        });\n      }\n      return product.set('isRequestingProduct', isRequestingProduct);\n    } else if (!product.get('specProductId') && product.get('id') > 0) { // row with quote product but no spec product\n      return product.set('isRequestingProduct', isRequestingProduct);\n    } else {\n      return product;\n    }\n  });\n\n  return updatedProducts;\n};\n\nconst INCREMENT_CENTS: Record<string, number> = {\n  '0.01': 1,\n  '0.05': 5,\n  '0.10': 10,\n  '1.00': 100,\n};\n\n// Decimals kept beyond the requested precision while clearing float noise, so that genuine\n// digits entered by a user are never mistaken for noise.\nconst FLOAT_NOISE_GUARD_DIGITS = 6;\n\n/**\n * Float arithmetic represents a total such as 318.136 as 318.13599999999997, and cutting that\n * string down to three decimals would show 318.135. Re-render the number with a few guard\n * decimals first so only the representation noise is dropped.\n */\nconst stripFloatNoise = (value: number, decimalPrecision: number): string =>\n  value.toFixed(Math.min(decimalPrecision + FLOAT_NOISE_GUARD_DIGITS, 20));\n\nexport const applyRoundingOption = ({\n  value,\n  roundingOption,\n  decimalPrecision: _decimalPrecision,\n  truncateDecimals = false,\n}: {\n  value: string;\n  roundingOption: ROUNDING_OPTIONS;\n  decimalPrecision?: DECIMAL_PRECISION;\n  truncateDecimals?: boolean;\n}): string => {\n  const decimalPrecision = _decimalPrecision ?? DECIMAL_PRECISION.TWO;\n\n  if (!value) {\n    return value;\n  }\n\n  const numValue = Number(value);\n  if (isNaN(numValue)) {\n    return value;\n  }\n\n  if (!roundingOption) {\n    const dotIndex = value.indexOf('.');\n    const decimalPlaces = dotIndex === -1 ? 0 : value.length - dotIndex - 1;\n    return decimalPlaces < decimalPrecision\n      ? numValue.toFixed(decimalPrecision)\n      : truncateDecimals\n        ? truncateToDecimal(stripFloatNoise(numValue, decimalPrecision), decimalPrecision)\n        : value;\n  }\n\n  const incrementCents = INCREMENT_CENTS[roundingOption];\n  const valueCents = Math.round(numValue * 100);\n  const roundedCents = Math.round(valueCents / incrementCents) * incrementCents;\n\n  const roundedValue = (roundedCents / 100).toFixed(decimalPrecision);\n\n  if (truncateDecimals) {\n    return truncateToDecimal(roundedValue, decimalPrecision);\n  }\n\n  return roundedValue;\n};\n\nexport const formatSectionTotal = ({\n  value: _value,\n  roundingOption,\n  decimalPrecision: _decimalPrecision,\n  applyThousandsSeparator = true,\n}: {\n  value: number;\n  roundingOption: ROUNDING_OPTIONS;\n  decimalPrecision?: DECIMAL_PRECISION;\n  applyThousandsSeparator?: boolean;\n}): string => {\n  const value = Number(_value);\n  const roundedValue = applyRoundingOption({\n    value: isNaN(value) ? '0' : value.toString(),\n    roundingOption: roundingOption ?? ROUNDING_OPTIONS.NEAREST_CENT,\n    decimalPrecision: _decimalPrecision ?? DECIMAL_PRECISION.TWO,\n    truncateDecimals: true,\n  });\n  return applyThousandsSeparator ? formatThousandsNumber(roundedValue) : roundedValue;\n};\n\nexport const formatGrandTotal = ({\n  value: _value,\n  decimalPrecision: _decimalPrecision,\n  applyThousandsSeparator = true,\n}: {\n  value: number;\n  decimalPrecision?: DECIMAL_PRECISION;\n  applyThousandsSeparator?: boolean;\n}): string => {\n  const value = Number(_value);\n  const dp = _decimalPrecision ?? DECIMAL_PRECISION.TWO;\n  const roundedValue = round(isNaN(value) ? 0 : value, dp).toFixed(dp);\n  return applyThousandsSeparator ? formatThousandsNumber(roundedValue) : roundedValue;\n};\n","import i18next from 'i18next';\n\n/** Shaped like the file service's own `payload.error`, so callers can reuse their error branch. */\nexport interface IUploadResponseError {\n  error: string;\n  status?: number;\n  [key: string]: any;\n}\n\nexport interface IUploadResponse {\n  /** The parsed response payload, or null when the body was empty or not JSON. */\n  payload: any | null;\n  /** Set for a failed request, a non-JSON body, or a service-reported error. */\n  error: IUploadResponseError | null;\n}\n\nconst parseBody = (req: XMLHttpRequest): any | null => {\n  try {\n    return req.responseText ? JSON.parse(req.responseText) : null;\n  } catch (e) {\n    return null;\n  }\n};\n\n/**\n * Reads the outcome of a finished file upload request.\n *\n * `loadend` fires for successful, failed, aborted and timed out requests alike, and the upload\n * handlers used to run JSON.parse(req.responseText) unconditionally. A dropped connection (status 0)\n * or a gateway error page (a 504 with an HTML body) then threw 'Unexpected end of JSON input' out of\n * the event listener and left the upload UI hanging (Sentry issue 7720109668).\n *\n * Returns the payload of a 2xx JSON response with `error: null`. Otherwise `error` holds the\n * service's own error when it sent one, or a translated message describing the failed request.\n */\nexport const readUploadResponse = (req: XMLHttpRequest): IUploadResponse => {\n  const payload = parseBody(req)?.payload ?? null;\n  const serviceError: IUploadResponseError | null = payload?.error || null;\n\n  if (req.status < 200 || req.status >= 300) {\n    return {\n      payload,\n      error: serviceError || {\n        error: req.status === 0\n          ? i18next.t(['translations:errors.uploadIncomplete', 'The upload did not complete. Please check your connection and try again.'])\n          : i18next.t(['translations:errors.uploadFailed', 'The upload failed. Please try again.']),\n        status: req.status,\n      },\n    };\n  }\n\n  if (serviceError) {\n    return { payload, error: serviceError };\n  }\n\n  if (!payload) {\n    return {\n      payload: null,\n      error: {\n        error: i18next.t(['translations:errors.uploadFailed', 'The upload failed. Please try again.']),\n        status: req.status,\n      },\n    };\n  }\n\n  return { payload, error: null };\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"\n}), 'AttachFile');\n\nexports.default = _default;","export const camelizeString = (text: string) => {\n    return text.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) => {\n        if (p2) {\n            return p2.toUpperCase();\n        }\n        return p1.toLowerCase();\n    });\n};\n","import { Button, createStyles, Divider, FormControl, Grid, IconButton, Link, ListItem, makeStyles, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { getFormValues } from 'redux-form/immutable';\nimport { change } from 'redux-form';\nimport { connect } from 'react-redux';\nimport { IAction } from 'ats-utils/src';\nimport { createStructuredSelector } from 'reselect';\nimport { Map } from 'immutable';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport Language from '../../../models/Language';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\n\nexport function isURL(str: string) {\n  const pattern = new RegExp('^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)+[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$');\n  return pattern.test(str.toLowerCase());\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  input: {\n    padding: theme.spacing(0.5, 1.75),\n    fontSize: theme.typography.body1.fontSize,\n  },\n  noMargin: {\n    marginLeft: 0,\n    marginRight: 0,\n  },\n  iconButton: {\n    width: 36,\n    height: 36,\n  },\n  contentColumn: {\n    width: 'calc(100% - 75px)'\n  },\n  iconColumn: {\n    width: 75,\n  }\n}));\n\ninterface IEditLinkComponentProps {\n  linkKey: string;\n  label: string;\n  formName: string;\n  selectedLanguage: Language;\n}\n\ninterface IEditLinkProps extends IEditLinkComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n}\n\nconst EditLink: React.FC<IEditLinkProps & WithTranslation> = ({\n  linkKey,\n  label,\n  dispatch,\n  formValues,\n  formName,\n  selectedLanguage = 'en',\n  t,\n}) => {\n\n  const [errorText, setErrorText] = React.useState('');\n  const [value, setValue] = React.useState('');\n\n  const classes = useStyles();\n  const file = formValues.get('file') || Map();\n  const url = file.getIn(['links', selectedLanguage, linkKey, 'url']);\n\n  React.useEffect(() => {\n    setValue(url || '');\n  }, [url, selectedLanguage]);\n\n  const onAttachLink = () => {\n    setErrorText('');\n\n    if (value && isURL(value)) {\n      const updated = file.setIn(['links', selectedLanguage, linkKey, 'url'], value).deleteIn(['links', linkKey]);\n      dispatch(change(formName, 'file', updated));\n    } else if (value && !isURL(value)) {\n      setErrorText(t('errors.isExternalLink'));\n    }\n  };\n\n  const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setValue(e.target.value);\n  };\n\n  return (\n    <React.Fragment key={linkKey}>\n      <ListItem dense={true}>\n        <Grid container={true} alignItems='center'>\n          <Grid item={true} xs={4}>\n            <Typography variant='body1'>{t(label)}</Typography>\n          </Grid>\n          <Grid item={true} xs={8} container={true} wrap='nowrap' alignItems='center'>\n          {\n            url\n              ? <>\n                  <Grid item={true} container={true} className={classes.contentColumn}>\n                    <Tooltip title={url}>\n                      <Link href={url} className={classes.ellipsis} target='_blank' rel='noopener'>{url}</Link>\n                    </Tooltip>\n                  </Grid>\n                  <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}  >\n                    <IconButton\n                      className={classes.iconButton}\n                      onClick={() => {\n                        const newFiles = file.deleteIn(['links', selectedLanguage, linkKey]).deleteIn(['links', linkKey]);\n                        dispatch(change(formName, 'file', newFiles));\n                      }}\n                    >\n                      <DeleteIcon />\n                    </IconButton>\n                  </Grid>\n                </>\n              : <>\n                  <Grid item={true} className={classes.contentColumn}>\n                    <FormControl\n                      fullWidth={true}\n                    >\n                      <TextField\n                        type='text'\n                        variant='outlined'\n                        placeholder={t('pimProductDrawer.urlPlaceholder')}\n                        value={value}\n                        onChange={onChange}\n                        InputProps={{\n                          classes: {\n                            input: classes.input,\n                          }\n                        }}\n                        FormHelperTextProps={{\n                          margin: 'dense',\n                          classes: {\n                            contained: classes.noMargin,\n                          }\n                        }}\n                        error={Boolean(errorText)}\n                        helperText={errorText}\n                      />\n                    </FormControl>\n                  </Grid>\n                  <Grid item={true} container={true} justify='flex-end' className={classes.iconColumn}>\n                    <IconButton\n                      onClick={onAttachLink}\n                      className={classes.iconButton}\n                    >\n                      <AttachFileIcon />\n                    </IconButton>\n                  </Grid>\n                </>\n          }\n          </Grid>\n        </Grid>\n      </ListItem>\n      <Divider component='li'/>\n    </React.Fragment>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\n\nexport default compose<React.FC<IEditLinkComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(EditLink);","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport { INotificationState } from './reducer';\n\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectNotificationByIndex = (index: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => {\n    const id = state.getIn(['notificationsItemStatusList', index, 'id']);\n    return state.getIn(['notifications', id]);\n  }\n);\n\nexport const makeSelectNotificationById = (id: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.getIn(['notifications', id])\n);\n\nexport const makeSelectNotifications = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('notifications')\n);\n\nexport const makeSelectNotificationsSize = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('notifications').size\n);\n\nexport const makeSelectNotificationsUnreadCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('unreadCount')\n);\n\nexport const makeSelectNotificationsCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('count')\n);\n\nexport const makeSelectIsNotificationDropDownOpen = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('isDropDownOpen')\n);\n\nexport const makeSelectListItemStatus = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('notificationsItemStatusList')\n);\n\nexport const makeSelectShouldScrollToTop = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INotificationState>) => state.get('scollToTop')\n);\n\nexport default {\n  selectReducerState,\n};\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  List,\n  fromJS,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IContactsState,\n} from './reducer';\n\n// import {\n//   Settings,\n// } from '../../models';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectLoadingCustomerDiscount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IContactsState>) => state.get('loadingCustomerDiscount')\n);\n\nexport const makeSelectContactsList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IContactsState>) => state.get('contactsList', List()),\n);\n\nexport const makeSelectSelectedContactId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IContactsState>) => state.get('selectedContact'),\n);\n\nexport const makeSelectSelectedContact = () => createSelector(\n  selectReducerState(),\n  makeSelectContactsList(),\n  (state: IMapNonRecursive<IContactsState>,\n   customersList: List<IMap<IContactsState>>) => customersList.find((customer: any) => {\n    return state.get('selectedContact') ? customer.get('id') === state.get('selectedContact') : undefined;\n  }) || fromJS({}),\n);\n\nexport const makeSelectStoredContactData = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IContactsState>) => state.get('storedContactData'),\n);\n\nexport const makeSelectSelectedCustomerDiscounts = () => createSelector(\n  makeSelectSelectedContact(),\n  makeSelectStoredContactData(),\n  (selectedCustomerData: IMap<any>, storedCustomerData: IMap<any>) => selectedCustomerData.size ? selectedCustomerData.get('discounts') : storedCustomerData?.get('discounts') || List()\n);\n\nexport default {\n  selectReducerState,\n};\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'contact';\n","import defineProperty from \"./defineProperty.js\";\nexport default function _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? Object(arguments[i]) : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}","\nconst getProductNumber = (product) => {\n  return product?.firmProductProductNumber || product?.productProductNumber;\n};\n\nconst getDescription = (product) => {\n  return product?.firmProductDescription || product?.productDescription;\n};\n\nconst getManufacturer = (product) => {\n  return product?.Manufacturer?.manufacturerName || product?.productBrand || '-';\n};\n\nconst getResponseSuggestProductNumber = (vendorQuoteProduct) => {\n  return vendorQuoteProduct?.firmProductProductNumber || vendorQuoteProduct?.productProductNumber;\n};\n\nconst QuoteConnectUtil = {\n  getProductNumber,\n  getManufacturer,\n  getResponseSuggestProductNumber,\n  getDescription,\n};\nexport default QuoteConnectUtil;","import {fromJS, Map} from 'immutable';\nimport {SetOverlayComponentPropsAction, ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {COPY_MODAL} from '../../containers/CopyModal';\nimport {createDroppableSpecListId, getFormattedCopyDrawingsForBE} from '../../components/ProjectDetail/helpers';\nimport {getSelectedDrawings, getSelectedProducts} from '../../components/detailPageComponents/helpers';\nimport filterSpecDrawingsByProductName from '../../utils/filterSpecDrawingsByProductName';\n\nexport const getSourceSpecs = (specsDictionary: { [specId: number]: { drawingIds: number[] } }) => Object.keys(specsDictionary).map(specId => ({\n    id: parseInt(specId, 10),\n    drawings: specsDictionary[specId].drawingIds.map(drawingId => ({ id: drawingId }))\n}));\nexport const buildSpecsDictionaryFromDrawingIds = (drawingIds: number[][]) => {\n    const specs: {\n        [sourceType: string]: {\n            [specId: number]: {\n                drawingIds: number[],\n            }\n        }\n    } = {};\n    drawingIds.forEach(([projectId, specId, drawingId, sourceType]) => {\n        if (!specs[sourceType]) {\n            specs[sourceType] = {};\n        }\n        if (!specs[sourceType][specId]) {\n            specs[sourceType][specId] = {\n                drawingIds: [],\n            };\n        }\n        specs[sourceType][specId].drawingIds.push(drawingId);\n    });\n    return specs;\n};\n\n// Shared by the SpecDetail and ProjectSpecDetail pages: the drawer's Import button reuses\n// the drag-and-drop flow by feeding a synthetic drop onto the current spec list (appended\n// to the end) through the page's onDragEnd, so all existing copy logic stays in one place.\nexport const importSelectedDrawingsViaDrop = ({\n    spec,\n    productSearchTerm,\n    draggableId,\n    onDragEnd,\n}: {\n    spec: any,\n    productSearchTerm: string,\n    draggableId: string,\n    onDragEnd: (result: any) => void,\n}) => {\n    if (!spec) {\n        return;\n    }\n    const displayedDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n    onDragEnd({\n        draggableId,\n        source: { droppableId: 'import-selected-drawings-button', index: 0 },\n        destination: {\n            droppableId: createDroppableSpecListId(spec.get('id'), spec.get('name')),\n            index: displayedDrawings.size,\n        },\n    });\n};\n\nexport const handleClickCopyTo = ({\n     spec,\n     projectSpecDetailConfig,\n     dispatch\n}) => {\n    const specId = spec.get('id');\n    const specs = fromJS({}).set(specId, spec);\n    dispatch(new SetOverlayComponentPropsAction({\n        id: COPY_MODAL,\n        props: {\n            sourceType: 'standard',\n            sourceSpecs: getFormattedCopyDrawingsForBE(projectSpecDetailConfig),\n            amplitudeSourceData: {\n                sourceType: 'Spec',\n                sourceId: spec.get('id'),\n                sourceName: spec.get('name'),\n                totalDrawings: getSelectedDrawings(projectSpecDetailConfig).length,\n                totalProducts: getSelectedProducts(projectSpecDetailConfig, specs).length,\n            }\n        }\n    }));\n    dispatch(new ToggleOverlayComponentAction({\n        id: COPY_MODAL,\n        open: true\n    }));\n};\n\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nvar SIZE = 44;\n\nfunction getRelativeValue(value, min, max) {\n  return (Math.min(Math.max(min, value), max) - min) / (max - min);\n}\n\nfunction easeOut(t) {\n  t = getRelativeValue(t, 0, 1); // https://gist.github.com/gre/1650294\n\n  t = (t -= 1) * t * t + 1;\n  return t;\n}\n\nfunction easeIn(t) {\n  return t * t;\n}\n\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-block'\n    },\n\n    /* Styles applied to the root element if `variant=\"static\"`. */\n    static: {\n      transition: theme.transitions.create('transform')\n    },\n\n    /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n    indeterminate: {\n      animation: '$circular-rotate 1.4s linear infinite'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the `svg` element. */\n    svg: {\n      display: 'block' // Keeps the progress centered\n\n    },\n\n    /* Styles applied to the `circle` svg path. */\n    circle: {\n      stroke: 'currentColor' // Use butt to follow the specification, by chance, it's already the default CSS value.\n      // strokeLinecap: 'butt',\n\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"static\"`. */\n    circleStatic: {\n      transition: theme.transitions.create('stroke-dashoffset')\n    },\n\n    /* Styles applied to the `circle` svg path if `variant=\"indeterminate\"`. */\n    circleIndeterminate: {\n      animation: '$circular-dash 1.4s ease-in-out infinite',\n      // Some default value that looks fine waiting for the animation to kicks in.\n      strokeDasharray: '80px, 200px',\n      strokeDashoffset: '0px' // Add the unit to fix a Edge 16 and below bug.\n\n    },\n    '@keyframes circular-rotate': {\n      '100%': {\n        transform: 'rotate(360deg)'\n      }\n    },\n    '@keyframes circular-dash': {\n      '0%': {\n        strokeDasharray: '1px, 200px',\n        strokeDashoffset: '0px'\n      },\n      '50%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-15px'\n      },\n      '100%': {\n        strokeDasharray: '100px, 200px',\n        strokeDashoffset: '-125px'\n      }\n    },\n\n    /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n    circleDisableShrink: {\n      animation: 'none'\n    }\n  };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar CircularProgress = React.forwardRef(function CircularProgress(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$disableShrink = props.disableShrink,\n      disableShrink = _props$disableShrink === void 0 ? false : _props$disableShrink,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 40 : _props$size,\n      style = props.style,\n      _props$thickness = props.thickness,\n      thickness = _props$thickness === void 0 ? 3.6 : _props$thickness,\n      _props$value = props.value,\n      value = _props$value === void 0 ? 0 : _props$value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'indeterminate' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"]);\n\n  var circleStyle = {};\n  var rootStyle = {};\n  var rootProps = {};\n\n  if (variant === 'determinate' || variant === 'static') {\n    var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n    circleStyle.strokeDasharray = circumference.toFixed(3);\n    rootProps['aria-valuenow'] = Math.round(value);\n\n    if (variant === 'static') {\n      circleStyle.strokeDashoffset = \"\".concat(((100 - value) / 100 * circumference).toFixed(3), \"px\");\n      rootStyle.transform = 'rotate(-90deg)';\n    } else {\n      circleStyle.strokeDashoffset = \"\".concat((easeIn((100 - value) / 100) * circumference).toFixed(3), \"px\");\n      rootStyle.transform = \"rotate(\".concat((easeOut(value / 70) * 270).toFixed(3), \"deg)\");\n    }\n  }\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, color !== 'inherit' && classes[\"color\".concat(capitalize(color))], {\n      indeterminate: classes.indeterminate,\n      static: classes.static\n    }[variant]),\n    style: _extends({\n      width: size,\n      height: size\n    }, rootStyle, {}, style),\n    ref: ref,\n    role: \"progressbar\"\n  }, rootProps, other), React.createElement(\"svg\", {\n    className: classes.svg,\n    viewBox: \"\".concat(SIZE / 2, \" \").concat(SIZE / 2, \" \").concat(SIZE, \" \").concat(SIZE)\n  }, React.createElement(\"circle\", {\n    className: clsx(classes.circle, disableShrink && classes.circleDisableShrink, {\n      indeterminate: classes.circleIndeterminate,\n      static: classes.circleStatic\n    }[variant]),\n    style: circleStyle,\n    cx: SIZE,\n    cy: SIZE,\n    r: (SIZE - thickness) / 2,\n    fill: \"none\",\n    strokeWidth: thickness\n  })));\n});\nprocess.env.NODE_ENV !== \"production\" ? CircularProgress.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary', 'inherit']),\n\n  /**\n   * If `true`, the shrink animation is disabled.\n   * This only works if variant is `indeterminate`.\n   */\n  disableShrink: chainPropTypes(PropTypes.bool, function (props) {\n    if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n      return new Error('Material-UI: you have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * The size of the circle.\n   * If using a number, the pixel unit is assumed.\n   * If using a string, you need to provide the CSS unit, e.g '3rem'.\n   */\n  size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The thickness of the circle.\n   */\n  thickness: PropTypes.number,\n\n  /**\n   * The value of the progress indicator for the determinate and static variants.\n   * Value between 0 and 100.\n   */\n  value: PropTypes.number,\n\n  /**\n   * The variant to use.\n   * Use indeterminate when there is no progress value.\n   */\n  variant: PropTypes.oneOf(['determinate', 'indeterminate', 'static'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCircularProgress',\n  flip: false\n})(CircularProgress);","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","/* tslint:disable */\n\nimport { fromJS, List, Map } from 'immutable';\nimport _ from 'lodash';\nimport { IFilter, IFilterTemplate } from '../../models/Dashboard';\nimport { IMap } from 'ats-utils/src';\nimport { removeTZ } from '../FieldDatePickerV2';\nimport { DATE_INTERVAL } from '../../constants';\nvar moment = require('moment');\n\nfunction getValue(operandValue) {\n  const _option =  operandValue.get('option') || operandValue;\n  const filterValue = operandValue.get('filterValue');\n  if (filterValue) {\n    return  _option.get(filterValue);\n  }\n  return _option.get('value');\n}\n\nexport const getFilterConfigFromPropsAndName = ({ props, name }) => {\n\n  const bracketRegex = new RegExp('\\\\[([^[]+)\\\\]');\n  const match = bracketRegex.exec(name);\n\n  if (match == null) {\n    console.error(`Unable to extract index from ${name}, must contain [##]`);\n    return null;\n  }\n\n  const index = match[1];\n\n  if (props.filters == null) {\n    console.error('Did you forget to set the filters prop on the root form HoC?');\n    return null;\n  }\n  if (!List.isList(props.filters)) {\n    console.error('The filters prop on the root form HoC must be an immutable List', props.filters);\n    return null;\n  }\n\n  const filterConfig = props.filters.get(index);\n\n  if (filterConfig == null) {\n    console.error(`Missing filterConfig for ${name}`);\n  }\n  return filterConfig;\n};\n\n// TODO: Rewrite this function, kinda misleading!!\nexport const transformFiltersConfigToFormState = (filters: List<IMap<IFilter>>, filtersTemplate: List<IMap<IFilterTemplate>> = List()) => {\n  const keyIndexObject = filtersTemplate.reduce((acc, filterTemplate, _index) => {\n    const key = filterTemplate.get('key');\n    if (key) {\n      acc[key] = _index;\n    }\n    return acc;\n  }, {});\n\n  return filters.reduce((acc: List<IMap<IFilter>>, filter: IMap<IFilter>) => {\n    const index = keyIndexObject[filter.get('key')] ?? (_.toNumber(filter.get('index')) || undefined);\n\n    const filterKeysSplit: string[] = filter.get('key').split('.');\n    // Handle 'buildingTypes' filter\n    const {key, operand, valueKey, keyBackendNeeds = ''} = filterKeysSplit.includes('buildingTypes')\n      ? {\n          key: filterKeysSplit[0],\n          keyBackendNeeds: filterKeysSplit[1],\n          operand: filterKeysSplit[2],\n          valueKey: filterKeysSplit[3],\n        }\n      : {\n        key: filterKeysSplit[0],\n        operand: filterKeysSplit[1],\n        valueKey: filterKeysSplit[2],\n      }\n\n    if (key === 'p' && operand === 'hasAiValidatedSpec') { // handle for p.hasAiValidatedSpec\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn(\n          ['hasAiValidatedSpec', filter.get('operand')],\n          fromJS([filter.get('value')])\n        );\n      })\n    }\n\n    if (key === 'specCount' && !filters.find((filter) => filter.get('key') === 'isAi')) {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn(\n          ['isAi', 'neq'],\n          fromJS([true])\n        );\n      }).update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn(\n          ['isAi', 'eq'],\n          fromJS([true])\n        );\n      })\n    }\n\n    if (key === 'isAi' || key === 'quoteCount' || key === 'isUserTracked') {\n      const value = filter.get('value');\n      const isAiChecking = (key === 'isAi' && filter.get('operand') === 'eq' && !value);\n      const isUserTrackedChecking = (key === 'isUserTracked' && filter.get('operand') === 'eq' && !value);\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn(\n          [key, (isAiChecking || isUserTrackedChecking) ? 'neq' : filter.get('operand')],\n          key === 'quoteCount' && value === 1 ? fromJS([true]) : (isAiChecking || isUserTrackedChecking) ? fromJS([true]) : fromJS([value])\n        );\n      })\n    }\n\n    if (key === 'address' && operand === 'address1') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn([key, operand, filter.get('operand')], filter.get('value'));\n      })\n    }\n\n    if (key === 'customerId' || key === 'createdByOfficeId' || key === 'quotePhase' || key === 'createdById' || key === 'regionId' || key === 'taskStatus' || key === 'taskFrom' || key === 'user_id') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn([key, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: key === 'quotePhase' ? 'value' : 'id',\n          displayControl: null\n        }));\n      })\n    }\n\n    if (key === 'sourceId') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn([key, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: 'value',\n          displayControl: null\n        }));\n      })\n    }\n    if ((key === 'productBrand' || key === 'productCategoryName') && filter?.get('operand') === 'in') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn([key, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: 'id',\n          displayControl: null\n        }));\n      })\n    }\n\n    if ((key === 'tracking' && (operand === 'officeId' || operand === 'userId'))) {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n          return newFilter.setIn([key, operand, filter.get('operand')], fromJS({\n            value: filter.get('defaultOption'),\n            option: filter.get('defaultOption'),\n            filterValue: 'id',\n            displayControl: null\n          }));\n        })\n    }\n\n    if (key === 'location' || (key === 'address' && operand !== 'address1' && operand !== undefined)) {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter .setIn([key, operand, valueKey, filter.get('operand')], filter.get('value'));\n      });\n    }\n    if (key === 'sections') {\n      return acc.update(index,(newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([key, operand, valueKey, filter.get('operand')], filter.get('value'));\n      })\n    }\n\n    if (key === 'opp') {\n      if (operand === 'labelID' || operand === 'statusID') {\n        return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n          return newFilter.setIn([key, operand, filter.get('operand')], fromJS({\n            value: filter.get('defaultOption'),\n            option: filter.get('defaultOption'),\n            filterValue: 'id',  // hard code here for now, suppose to init the value with the widget config, unless we are going to save filterValue in the user widget config, same for other filterValue\n            displayControl: null\n          }));\n        })\n      }\n      // update for Opportunity value filter by min & max range\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([filter.get('key'), filter.get('operand')], filter.get('value'));\n      });\n      // return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n      //   return newFilter.setIn([key, operand, filter.get('operand')], filter.get('value'));\n      // })\n    }\n\n    if (key === 'phase' && operand === 'name') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({})) => {\n        return newFilter.setIn([key, operand, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: 'id',\n          displayControl: null\n        }));\n      })\n    }\n\n    if (key === 't') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n\n        return newFilter.setIn([key, operand, filter.get('operand')], filter.get('value'));\n      })\n    }\n\n    if (key === 'building') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([key, operand, valueKey, filter.get('operand')], filter.get('value'))\n      })\n    }\n\n    if (key === 'completionDueDate' || key === 'bidDate' || key === 'createdDate' || key === 'rstq.date' || key === 'fbt.transactionDateTime') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        if (filter.get('operand') === 'gte' || filter.get('operand') === 'lte') {\n          newFilter = newFilter.setIn([filter.get('key'), 'interval'], DATE_INTERVAL.CUSTOM);\n          return newFilter.setIn([filter.get('key'), filter.get('operand')], moment.utc(filter.get('value')).toISOString());\n        } else {\n          // transform for interval and set date range accordingly\n          const keyArray = filter.get('key').split('.');\n          const interval = keyArray[keyArray.length - 1];\n\n          newFilter = newFilter.setIn([key, 'interval'], interval || '');\n          switch (interval) {\n            case DATE_INTERVAL.TODAY:\n              newFilter = newFilter.setIn([key, 'gte'], moment().startOf('day').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().endOf('day').toISOString());\n              break;\n            case DATE_INTERVAL.YESTERDAY:\n              newFilter = newFilter.setIn([key, 'gte'], moment().subtract(1, 'days').startOf('day').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().subtract(1, 'days').endOf('day').toISOString());\n              break;\n            case DATE_INTERVAL.THIS_WEEK:\n              newFilter = newFilter.setIn([key, 'gte'], moment().startOf('week').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().endOf('week').toISOString());\n              break;\n            case DATE_INTERVAL.LAST_WEEK:\n              newFilter = newFilter.setIn([key, 'gte'], moment().subtract(7, 'days').startOf('week').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().subtract(7, 'days').endOf('week').toISOString());\n              break;\n            case DATE_INTERVAL.THIS_MONTH:\n              newFilter = newFilter.setIn([key, 'gte'], moment().startOf('month').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().endOf('month').toISOString());\n              break;\n            case DATE_INTERVAL.LAST_MONTH:\n              newFilter = newFilter.setIn([key, 'gte'], moment().subtract(1, 'months').startOf('month').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().subtract(1, 'months').endOf('month').toISOString());\n              break;\n            case DATE_INTERVAL.THIS_QUARTER:\n              newFilter = newFilter.setIn([key, 'gte'], moment().startOf('quarter').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().endOf('quarter').toISOString());\n              break;\n            case DATE_INTERVAL.LAST_QUARTER:\n              newFilter = newFilter.setIn([key, 'gte'], moment().subtract(1, 'quarters').startOf('quarter').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().subtract(1, 'quarters').endOf('quarter').toISOString());\n              break;\n            case DATE_INTERVAL.THIS_YEAR:\n              newFilter = newFilter.setIn([key, 'gte'], moment().startOf('year').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().endOf('year').toISOString());\n              break;\n            case DATE_INTERVAL.LAST_YEAR:\n              newFilter = newFilter.setIn([key, 'gte'], moment().subtract(1, 'years').startOf('year').toISOString());\n              newFilter = newFilter.setIn([key, 'lte'], moment().subtract(1, 'years').endOf('year').toISOString());\n              break;\n            default:\n              break;\n          }\n          return newFilter;\n        }\n      });\n    }\n\n    if (key === 'customers' && operand === 'id') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([key, operand, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: 'id',\n          displayControl: null\n        }));\n      })\n    }\n\n    if (key === 'createdBy') {\n      if (operand === 'office' || operand === 'user') {\n        return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n          return newFilter.setIn([key, operand, valueKey, filter.get('operand')], fromJS({\n            value: filter.get('defaultOption'),\n            option: filter.get('defaultOption'),\n            filterValue: valueKey,\n            displayControl: null\n          }));\n        })\n      }\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([key, operand, valueKey, filter.get('operand')], filter.get('value'))\n      })\n    }\n\n    if (key === 'assignedTo') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([key, operand, filter.get('operand')], fromJS({\n          value: filter.get('defaultOption'),\n          option: filter.get('defaultOption'),\n          filterValue: operand,\n          displayControl: null\n        }));\n      })\n    }\n\n    if (key === 'isCollaborated') {\n      return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n        return newFilter.setIn([filter.get('key'), filter.get('operand')], filter.get('value') ? 1 : 0);\n      });\n    }\n\n    return acc.update(index, (newFilter: IMap<IFilter> = fromJS({}))  => {\n      return newFilter.setIn([filter.get('key'), filter.get('operand')], filter.get('value'));\n    });\n  }, List<IMap<IFilter>>());\n};\n\nexport const transformFiltersFormStateToConfig = (filters) => {\n  return filters ? filters.reduce((filtersList, filter, filterIndex) => {\n    if (filter == null || typeof filter === 'string' || typeof filter === 'number') {\n      return filtersList;\n    }\n    const locationIds = ['city', 'province', 'country'];\n    const filterArr = filter.reduce((filterList, filterOperands, filterKey) => {\n      if (filterOperands == null) {\n        return filterList;\n      }\n      const filterArrEl = filterOperands.reduce((operandAcc, operandValue, operandKey) => {\n\n        if (operandValue == null || operandValue === '' || (Array.isArray(operandValue) && operandValue.length === 0)) {\n          return operandAcc;\n        }\n\n        if ((filterKey === 'isAi' || filterKey === 'quoteCount' || filterKey === 'hasAiValidatedSpec' || filterKey === 'isUserTracked')) {\n          const key = filterKey === 'hasAiValidatedSpec' ? 'p.hasAiValidatedSpec' : filterKey;\n          const operandElement = fromJS({\n            key,\n            index: filterIndex,\n            operand: operandKey,\n            value: filterKey === 'quoteCount' && operandValue.get(0) ? 1 : operandValue.get(0),\n          });\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'address' && operandKey === 'address1') {\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const operand = operandValue.keySeq().get(0);\n          const value = operandValue.get(operand);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if ((filterKey === 'location' && !locationIds.includes(operandKey))|| (filterKey === 'address' && operandKey !== 'like')) {\n          const valueKey = operandValue.keySeq().get(0);\n          const key = [filterKey, operandKey, valueKey].join('.');\n          const index = filterIndex;\n          const operand = operandValue.get(valueKey).keySeq().get(0);\n          const value = operandValue.getIn([valueKey, operand]);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'location' && locationIds.includes(operandKey)) {\n\n          const id = operandValue.keySeq().get(0);\n          const operand = operandValue.get(id).keySeq().get(0);\n          const key = [filterKey, operandKey, id].join('.');\n          const index = filterIndex;\n          const value = operandValue.getIn([id, operand]);\n\n          if (value) {\n            const operandElement = fromJS({\n              key,\n              index,\n              operand,\n              value,\n            });\n\n            return operandAcc.push(operandElement);\n          }\n          return operandAcc;\n        }\n\n        if (filterKey === 'tracking' && (operandKey === 'officeId' || operandKey === 'userId')) {\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const operand = operandValue.keySeq().get(0);\n          const filterValue = operandValue.getIn([operand, 'filterValue']);\n          const selectedOptions = operandValue.getIn([operand, 'value']);\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n          selectedOptions.map(val => val.get(filterValue)) : \n            List.isList(selectedOptions) && selectedOptions.size ?\n            selectedOptions.map(val => val.get(filterValue)).toJS() :\n              operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n            defaultOption: selectedOptions,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'sourceId' && operandKey === 'in') {\n          const key = filterKey;\n          const index = filterIndex;\n          const operand = operandKey;\n          const filterValue = operandValue.get('filterValue');\n          const selectedOptions = operandValue.get('value');\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ?\n              selectedOptions.map(val => val.get(filterValue)) :\n              List.isList(selectedOptions) && selectedOptions.size ?\n                  selectedOptions.map(val => val.get(filterValue)).toJS() :\n                  operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'phase' && operandKey === 'name') {\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const operand = operandValue.keySeq().get(0);\n          const filterValue = operandValue.getIn([operand, 'filterValue']);\n          const selectedOptions = operandValue.getIn([operand, 'value']);\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ?\n          selectedOptions.map(val => val.get(filterValue)) :\n            List.isList(selectedOptions) && selectedOptions.size ?\n            selectedOptions.map(val => val.get(filterValue)).toJS() :\n              operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n            defaultOption: selectedOptions,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 't') {\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const operand = operandValue.keySeq().get(0);\n          const value = operandValue.get(operand);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'bidDate' || filterKey === 'completionDueDate' || filterKey === 'createdDate' || filterKey === 'rstq.date' || filterKey === 'fbt.transactionDateTime') {\n          const rawDate = typeof operandValue === 'string' ? moment.utc(operandValue) : operandValue;\n          if (rawDate && rawDate !== 'Invalid date') {\n            const hasInterval = operandAcc.find(filter => filter.get('key').startsWith(filterKey) && filter.get('key') !== filterKey);\n            if (operandKey === 'interval' && operandValue && operandValue !== DATE_INTERVAL.CUSTOM) { // push intervals\n              const operandElement = fromJS({\n                key: `${filterKey}.${operandValue}`,\n                index: filterIndex,\n                operand: 'eq',\n                value: true,\n              });\n  \n              // filter out gte and lte from operandAcc, then push interval\n              const newOperandAcc = operandAcc\n                .filter(filter => filter.get('key') !== filterKey)\n                .push(operandElement);\n\n              return newOperandAcc;\n            } else if (operandKey !== 'interval' && !hasInterval) { // push custom date\n              const newTime = removeTZ(rawDate.toISOString());\n              const operandElement = fromJS({\n                key: filterKey,\n                index: filterIndex,\n                operand: operandKey,\n                value: newTime,\n              });\n              return operandAcc.push(operandElement);\n            }\n          }\n\n          return operandAcc;\n        }\n\n        if (filterKey === 'opp') {\n          if (operandKey === 'labelID' || operandKey === 'statusID') {\n            const key = [filterKey, operandKey].join('.');\n            const index = filterIndex;\n            const operand = operandValue.keySeq().get(0);\n            const filterValue = operandValue.getIn([operand, 'filterValue']);\n            const selectedOptions = operandValue.getIn([operand, 'value']);\n            const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n            selectedOptions.map(val => val.get(filterValue)) : \n              List.isList(selectedOptions) && selectedOptions.size ?\n              selectedOptions.map(val => val.get(filterValue)).toJS() :\n                operandValue.get(filterValue);\n\n            const operandElement = fromJS({\n              key,\n              index,\n              operand,\n              value,\n              defaultOption: selectedOptions,\n            });\n\n            return operandAcc.push(operandElement);\n          }\n\n          const index = filterIndex;\n          const value = operandValue;\n          const operandElement = fromJS({\n            key: filterKey,\n            index,\n            operand: operandKey,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'building') {\n\n          // id\n          const id = operandValue.keySeq().get(0);\n\n          // like\n          const operand = operandValue.get(id).keySeq().get(0);\n          const key = operandKey === 'buildingTypes' ? [filterKey, 'buildingClasses', operandKey, id].join('.') : [filterKey, operandKey, id].join('.');\n          const index = filterIndex;\n          const value = operandValue.getIn([id, operand]);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'customers') {\n          const operand = operandValue.keySeq().get(0);\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const filterValue = operandValue.getIn([operand, 'filterValue']);\n          const selectedOptions = operandValue.getIn([operand, 'value']);\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n           selectedOptions.map(val => val.get(filterValue)) : \n            List.isList(selectedOptions) && selectedOptions.size ?\n             selectedOptions.map(val => val.get(filterValue)).toJS() :\n              operandValue.getIn([operand, filterValue]);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'quotePhase') {\n          const index = filterIndex;\n          const filterValue = operandValue.get('filterValue');\n          const selectedOptions = operandValue.get('value');\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n           selectedOptions.map(val => val.get(filterValue)) : \n            List.isList(selectedOptions) && selectedOptions.size ?\n             selectedOptions.map(val => val.get(filterValue)).toJS() :\n              operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key: filterKey,\n            index,\n            operand: operandKey,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n        if (filterKey === 'createdBy') {\n          if (operandKey === 'office' || operandKey === 'user') {\n            const id = operandValue.keySeq().get(0);\n            const operand = operandValue.get(id).keySeq().get(0);\n            const key = [filterKey, operandKey, id].join('.');\n            const index = filterIndex;\n            const filterValue = operandValue.getIn([id, operand, 'filterValue']);\n            const selectedOptions = operandValue.getIn([id, operand, 'value']);\n            const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n            selectedOptions.map(val => val.get(filterValue)) : \n             List.isList(selectedOptions) && selectedOptions.size ?\n              selectedOptions.map(val => val.get(filterValue)).toJS() :\n               operandValue.getIn([operand, filterValue]);\n\n            const operandElement = fromJS({\n              key,\n              index,\n              operand,\n              value,\n              defaultOption: selectedOptions,\n            });\n            return operandAcc.push(operandElement);\n          }\n          const operandType = operandValue.keySeq().get(0);\n          const operand = operandValue.get(operandType).keySeq().get(0);\n          const key = [filterKey, operandKey, operandType].join('.');\n          const index = filterIndex;\n          const value = operandValue.getIn([operandType, operand]);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'createdById' || filterKey === 'regionId' || filterKey === 'taskStatus' || filterKey === 'taskFrom' || filterKey === 'user_id' || filterKey === 'createdByOfficeId' || filterKey === 'customerId') {\n          const index = filterIndex;\n          const filterValue = operandValue.get('filterValue') || 'id';\n          const selectedOptions = operandValue.get('value');\n          const value = Array.isArray(selectedOptions) && selectedOptions.length\n            ? selectedOptions.map(val => val.get(filterValue))\n            : List.isList(selectedOptions) && selectedOptions.size\n              ? selectedOptions.map(val => val.get(filterValue)).toJS()\n              : operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key: filterKey,\n            index,\n            operand: operandKey,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n\n        if (filterKey === 'assignedTo') {\n          const id = filterOperands.keySeq().get(0);\n          const operand = filterOperands.get(id).keySeq().get(0);\n          const key = [filterKey, operandKey].join('.');\n          const index = filterIndex;\n          const filterValue = operandKey;\n          const selectedOptions = operandValue.getIn([operand, 'value']);\n          const value = Array.isArray(selectedOptions) && selectedOptions.length ? \n          selectedOptions.map(val => val.get(filterValue)) : \n            List.isList(selectedOptions) && selectedOptions.size ?\n            selectedOptions.map(val => val.get(filterValue)).toJS() :\n              operandValue.getIn([operand, filterValue]);\n\n          const operandElement = fromJS({\n            key,\n            index,\n            operand,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n\n        if ((filterKey === 'productBrand' || filterKey === 'productCategoryName') && operandKey === 'in') {\n          const index = filterIndex;\n          const filterValue = operandValue.get('filterValue') || 'id';\n          const selectedOptions = operandValue.get('value');\n          const value = Array.isArray(selectedOptions) && selectedOptions.length\n            ? selectedOptions.map(val => val.get(filterValue))\n            : List.isList(selectedOptions) && selectedOptions.size\n              ? selectedOptions.map(val => val.get(filterValue)).toJS()\n              : operandValue.get(filterValue);\n\n          const operandElement = fromJS({\n            key: filterKey,\n            index,\n            operand: operandKey,\n            value,\n            defaultOption: selectedOptions,\n          });\n          return operandAcc.push(operandElement);\n        }\n        \n\n        if (filterKey === 'isCollaborated') {\n          const operandElement = fromJS({\n            key: filterKey,\n            index: filterIndex,\n            operand: operandKey,\n            value: Boolean(operandValue),\n          });\n\n          return operandAcc.push(operandElement);\n        }\n\n\n        if (filterKey === 'createdBy.office.id') {\n          const operandElement = fromJS({\n            key: filterKey,\n            index: filterIndex,\n            operand: operandKey,\n            value: getValue(operandValue),\n            defaultOption: operandValue,\n          })\n          return operandAcc.push(operandElement);\n        }\n\n\n        if (filterKey === 'sections' && operandKey === 'products') {\n\n          const id = operandValue.keySeq().get(0);\n          const operand = operandValue.get(id).keySeq().get(0);\n          const key = [filterKey, operandKey, id].join('.');\n          const index = filterIndex;\n          const value = operandValue.getIn([id, operand]);\n\n          if (value) {\n            const operandElement = fromJS({\n              key,\n              index,\n              operand,\n              value,\n            });\n\n            return operandAcc.push(operandElement);\n          }\n          return operandAcc;\n        }\n\n        const operandElement = fromJS({\n          key: filterKey,\n          index: filterIndex,\n          operand: operandKey,\n          value: operandValue,\n        });\n\n        return operandAcc.push(operandElement);\n      }, List());\n\n      return filterList.concat(filterArrEl);\n    }, List());\n\n\n    // handle for Tracked Project list filter\n    let newFilterArr = filterArr;\n\n    const isAiEq = filterArr.find(f => f.get('key') === 'isAi' && f.get('operand') === 'eq');\n    const isAineq = filterArr.find(f => f.get('key') === 'isAi' && f.get('operand') === 'neq');\n    const isAiEqIdx = filterArr.indexOf(isAiEq);\n    const isAineqIdx = filterArr.indexOf(isAineq);\n\n    if ((isAiEq && isAiEqIdx > -1) || (isAineq && isAineqIdx > -1)) {\n      if (isAiEq && isAiEq.get('value') === true && isAineq && isAineq.get('value') === true ) {\n        newFilterArr = newFilterArr.filter((f) => {\n          if (f.get('key') === 'isAi' && f.get('operand') === 'eq' || f.get('key') === 'isAi' && f.get('operand') === 'neq') {\n            return false;\n          }\n          return true;\n        });\n      } else {\n        if (isAiEqIdx > -1  && isAiEq.get('value') === true) {\n          newFilterArr = newFilterArr.setIn([isAiEqIdx, 'value'], true);\n        } else if (isAineqIdx > -1 && isAineq.get('value') === true) {\n          newFilterArr = newFilterArr.push(fromJS({\n            index: isAineq.get('index'),\n            key: 'isAi',\n            operand: 'eq',\n            value: false\n          }));\n          newFilterArr = newFilterArr.delete(isAineqIdx);\n        }\n      }\n  \n      if (isAiEq && typeof isAiEq.get('value') === 'boolean' || isAineq && typeof isAineq.get('value') === 'boolean') {\n        newFilterArr = newFilterArr.push(fromJS({\n          index: isAiEq ? isAiEq.get('index') : isAineq.get('index'),\n          key: 'specCount',\n          operand: 'gte',\n          value: 1\n        }));\n      }\n    }\n\n    const isUserTrackedEq = filterArr.find(f => f.get('key') === 'isUserTracked' && f.get('operand') === 'eq');\n    const isUserTrackedNeq = filterArr.find(f => f.get('key') === 'isUserTracked' && f.get('operand') === 'neq');\n    const isUserTrackedEqIdx = filterArr.indexOf(isUserTrackedEq);\n    const isUserTrackedNeqIdx = filterArr.indexOf(isUserTrackedNeq);\n\n    if ((isUserTrackedEq && isUserTrackedEqIdx > -1) || (isUserTrackedNeq && isUserTrackedNeqIdx > -1)) {\n      if (isUserTrackedEq && isUserTrackedEq.get('value') === true && isUserTrackedNeq && isUserTrackedNeq.get('value') === true) {\n        newFilterArr = newFilterArr.filter((f) => {\n          if (f.get('key') === 'isUserTracked' && f.get('operand') === 'eq' || f.get('key') === 'isUserTracked' && f.get('operand') === 'neq') {\n            return false;\n          }\n          return true;\n        });\n      } else {\n        if (isUserTrackedEqIdx > -1  && isUserTrackedEq.get('value') === true) {\n          newFilterArr = newFilterArr.setIn([isUserTrackedEqIdx, 'value'], true);\n        } else if (isUserTrackedNeqIdx > -1 && isUserTrackedNeq.get('value') === true) {\n          newFilterArr = newFilterArr.push(fromJS({\n            index: isUserTrackedNeq.get('index'),\n            key: 'isUserTracked',\n            operand: 'eq',\n            value: false\n          }));\n          newFilterArr = newFilterArr.delete(isUserTrackedNeqIdx);\n        }\n      }\n    }\n\n    return filtersList.concat(newFilterArr);\n  }, List()) : null;\n};\n\nexport default {\n  transformFiltersFormStateToConfig,\n  getFilterConfigFromPropsAndName,\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');\n\nexports.default = _default;","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Clear');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"\n}), 'Email');\n\nexports.default = _default;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\nexport default function createSvgIcon(path, displayName) {\n  var Component = React.memo(React.forwardRef(function (props, ref) {\n    return React.createElement(SvgIcon, _extends({\n      ref: ref\n    }, props), path);\n  }));\n\n  if (process.env.NODE_ENV !== 'production') {\n    Component.displayName = \"\".concat(displayName, \"Icon\");\n  }\n\n  Component.muiName = SvgIcon.muiName;\n  return Component;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z\"\n}), 'Shuffle');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3z\"\n}), 'AccountTree');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Checkbox,\n  Grid,\n  ListItem,\n  RootRef\n} from '@material-ui/core';\nimport HeightIcon from '@material-ui/core/SvgIcon/SvgIcon';\nimport ReactDOM from 'react-dom';\nimport {\n  DraggableProvided,\n  DraggableStateSnapshot\n} from 'react-beautiful-dnd';\nimport { TableColumn } from '../../../models';\nimport i18next from 'i18next';\n\n// REACT DND PORTAL\n\nconst portal: HTMLElement = document.createElement('div');\n\nif (!document.body) {\n  throw new Error('body not ready for portal creation!');\n}\n\ndocument.body.appendChild(portal);\n\ninterface IPortalAwareItemProps {\n  provided: DraggableProvided;\n  snapshot: DraggableStateSnapshot;\n  data: TableColumn;\n  disabledColumns?: string[];\n  onSelect(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\n\nconst getItemStyle = (isDragging, draggableStyle) => ({\n  // some basic styles to make the items look a bit nicer\n  userSelect: 'none',\n  background: isDragging ? 'lightgrey' : 'white', /* lightgrey is used here to match the default styling applied by materialUI */\n  margin: 'none',\n  borderBottom: '1px solid lightgrey', /* lightgrey is used here to match the default styling applied by materialUI */\n  // styles we need to apply on draggables\n  display: 'flex',\n  justifyContent: 'space-between',\n  padding: 'none',\n  ...draggableStyle,\n});\n\nconst PortalAwareItem: React.FC<IPortalAwareItemProps> = (props) => {\n  const {\n    provided,\n    snapshot,\n    data,\n    disabledColumns = [],\n    onSelect,\n  } = props;\n\n  const usePortal: boolean = snapshot.isDragging;\n\n  const child: JSX.Element = (\n    <RootRef rootRef={provided.innerRef}>\n      <ListItem\n        {...provided.draggableProps}\n        {...provided.dragHandleProps}\n        style={getItemStyle(\n          snapshot.isDragging,\n          provided.draggableProps.style\n        )}\n      >\n        <Grid container={true} alignItems='center' style={{ flexWrap: 'nowrap' }}>\n          <Checkbox\n            color='primary'\n            disabled={ disabledColumns.includes(data.id)}\n            onClick={(e: React.SyntheticEvent) => e.stopPropagation()}\n            onChange={onSelect}\n            checked={data.display}\n          />\n          {i18next.t(`translations:${data.label}`)}\n        </Grid>\n        <HeightIcon fontSize='small'/>\n      </ListItem>\n    </RootRef>\n  );\n\n  if (!usePortal) {\n    return child;\n  }\n\n  // if dragging - put the item in a portal\n  return ReactDOM.createPortal(child, portal);\n};\n\n\nexport default PortalAwareItem;\n","import * as React from 'react';\nimport {\n  Drawer,\n  Grid,\n  IconButton,\n  List,\n  RootRef,\n  Typography\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {\n  DragDropContext,\n  Draggable,\n  Droppable,\n  DropResult,\n  ResponderProvided\n} from 'react-beautiful-dnd';\nimport { makeStyles } from '@material-ui/core/styles';\nimport PortalAwareItem from './PortalAwareItem';\nimport { TableColumn } from '../../models';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { CreateFilterAction, GetFiltersByType, UpdateFilterByIdAction } from '../../modules/AccountModule/actions';\nimport { makeSelectFilterList, makeSelectGettingFilterList } from '../../modules/AccountModule/selectors';\nimport { isEqual } from 'lodash';\nimport { makeSelectIdentityObject } from '../../modules/AtsModule/selectors';\n\nconst useStyles = makeStyles((theme) => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit' as 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`\n  },\n  header: {\n    padding: theme.spacing(1, 3, 1, 3)\n  },\n}));\n\nconst getListStyle = isDraggingOver => ({\n  padding: 8,\n});\n\ntype OnSelectHandlerType = (index: number) => (event: React.ChangeEvent<HTMLInputElement>) => void;\n\ninterface IColumnSelectorProps {\n  defaultColumns: TableColumn[];\n  columnsToDisplay: TableColumn[];\n  disabledColumns?: string[];\n  hiddenColumns?: string[];\n  isOpen: boolean;\n  columnType?: string;\n  onClose: (event: React.MouseEvent<HTMLButtonElement>) => void;\n  handleColumnsChange: (newColumnsToDisplay: TableColumn[]) => void;\n  disableUpdate?: boolean;\n}\n\ntype ColumnSelectorPropsType = IColumnSelectorProps & WithTranslation;\n\nconst ColumnSelector: React.FC<ColumnSelectorPropsType> = ({\n   columnsToDisplay,\n   disabledColumns,\n   hiddenColumns = [], isOpen,\n   columnType,\n   defaultColumns,\n   onClose,\n   handleColumnsChange,\n   t,\n   disableUpdate = false\n}) => {\n  const classes = useStyles();\n  const dispatch = useDispatch();\n\n  const isRegisteredUser = useSelector(makeSelectIdentityObject());\n  const columnList = useSelector(makeSelectFilterList(columnType));\n  // const gettingColumnList = useSelector(makeSelectGettingFilterList);\n\n  const rawColumns = columnList?.getIn([0, 'filterData']);\n  const parsedRawColumns = rawColumns ? JSON.parse(rawColumns) : null;\n  // filter the saved columns that exist in UI, and add non overlap from UI columns to filtered saved columns if any\n  // this is for in case we remove or add more columns on UI later\n  const overlappedColumns = parsedRawColumns ? parsedRawColumns.filter((col) => {\n    return defaultColumns.find((item) => item.id === col.id);\n  }) : null;\n  const nonOverlappedDefaultColumns = parsedRawColumns ? defaultColumns.filter((col) => {\n    return !parsedRawColumns.find((item) => item.id === col.id);\n  }) : [];\n\n  const columns = overlappedColumns ? [...overlappedColumns] : null;\n  if (columns && nonOverlappedDefaultColumns.length > 0) {\n    nonOverlappedDefaultColumns.forEach((col) => {\n      const defaultIndex = defaultColumns.findIndex((item) => item.id === col.id);\n      if (defaultIndex === 0) {\n        columns.unshift(col);\n      } else {\n        const prevDefaultCol = defaultColumns[defaultIndex - 1];\n        const insertAfterIndex = columns.findIndex((item) => item.id === prevDefaultCol.id);\n        if (insertAfterIndex !== -1) {\n          columns.splice(insertAfterIndex + 1, 0, col);\n        } else {\n          columns.push(col);\n        }\n      }\n    });\n  }\n\n  React.useEffect(() => {\n    if (columnType && !columnList) {\n      // dispatch(new GetFiltersByType({ filterType: columnType }));\n    } else if (columns) {\n      const newColumns = columns.map((col) => {\n        const colToMerge = columnsToDisplay.find((item) => item.id === col.id);\n        if (colToMerge) {\n          return { ...colToMerge, ...col };\n        } else {\n          return col;\n        }\n      });\n      handleColumnsChange(newColumns);\n    }\n  }, []);\n\n  React.useEffect(() => {\n    if (rawColumns && !isEqual(columns, columnsToDisplay)) {\n      const newColumns = columns.map((col) => {\n        const colToMerge = columnsToDisplay.find((item) => item.id === col.id);\n        if (colToMerge) {\n          return { ...colToMerge, ...col };\n        } else {\n          return col;\n        }\n      });\n      handleColumnsChange(newColumns);\n    }\n  }, [rawColumns]);\n\n  const updateDefault = (newColumnsToDisplay) => {\n    const id = columnList?.getIn([0, 'id']);\n    if (isRegisteredUser && columnList && !disableUpdate) {\n      if (id) {\n        dispatch(new UpdateFilterByIdAction({ filterId: id, filterName: 'default_columns', filterData: newColumnsToDisplay, filterType: columnType, isDefault: true, onSuccess: () => null, onFail: () => null }));\n      } else {\n        dispatch(new CreateFilterAction({ filterName: 'default_columns', filterType: columnType, filterData: newColumnsToDisplay, isDefault: true, onSuccess: () => null, onFail: () => null}));\n      }\n    }\n  };\n\n  const onSelect: OnSelectHandlerType = (index) => () => {\n    const toggle = {...columnsToDisplay[index]};\n    toggle.display = !toggle.display;\n    const newColumnsToDisplay = [...columnsToDisplay];\n    newColumnsToDisplay[index] = toggle;\n\n    handleColumnsChange(newColumnsToDisplay);\n    updateDefault(newColumnsToDisplay);\n  };\n\n  const onDragEnd = (result: DropResult, provider: ResponderProvided) => {\n    // dropped outside the list\n     if (!result.destination) {\n      return;\n    }\n    let sortableColumns: TableColumn[] = [];\n    const unsortableColumns: TableColumn[] = [];\n    columnsToDisplay.forEach(column => {\n      if (column.sortable) {\n        sortableColumns.push(column);\n      } else {\n        unsortableColumns.push(column);\n      }\n    });\n    sortableColumns = reorder(\n      sortableColumns,\n      result.source.index,\n      result.destination.index\n    );\n\n    const newColumnsToDisplay = [...unsortableColumns, ...sortableColumns ];\n\n    handleColumnsChange(newColumnsToDisplay);\n    updateDefault(newColumnsToDisplay);\n  };\n\n  const reorder = (listToReorder: TableColumn[], startIndex, endIndex) => {\n    const result = Array.from(listToReorder);\n    const [removed] = result.splice(startIndex, 1); // take out item from original index\n    result.splice(endIndex, 0, removed); // place the item to a new index\n\n    return result;\n  };\n\n  let notSortableColumnsCount = 0;\n  columnsToDisplay.forEach(item => !item.sortable && (notSortableColumnsCount++));\n\n  return (\n    <Drawer\n      variant='persistent'\n      anchor='right'\n      open={isOpen}\n      onClose={onClose}\n      className={classes.drawer}\n      classes={{\n        paper: classes.drawerPaper,\n      }}\n      style={{\n        width: isOpen ? 'initial' : 0,\n      }}\n    >\n      <Grid\n        className={classes.header}\n        container={true}\n        justify='space-between'\n        alignItems='center'\n      >\n        <Typography\n          variant='h5'\n        >\n          {t('generalListColumn.title')}\n        </Typography>\n        <IconButton\n          onClick={onClose}\n        >\n          <CloseIcon/>\n        </IconButton>\n      </Grid>\n      <DragDropContext onDragEnd={onDragEnd}>\n        <Droppable droppableId='droppable'>\n          {(provided, snapshot) => (\n            <RootRef rootRef={provided.innerRef}>\n              <List\n                {...provided.droppableProps}\n                style={getListStyle(snapshot.isDraggingOver)}\n              >\n                {columnsToDisplay.filter(item => item.sortable && !hiddenColumns.includes(item.id)).map((item, index) => (\n                    <Draggable key={index} draggableId={item.label + index} index={index}>\n                      {(provided2, snapshot2) => (\n                        <PortalAwareItem\n                          data={item}\n                          disabledColumns={disabledColumns}\n                          provided={provided2}\n                          snapshot={snapshot2}\n                          onSelect={onSelect(index + notSortableColumnsCount)}\n                        />\n                      )}\n                    </Draggable>\n                  )\n                )}\n                {provided.placeholder}\n              </List>\n            </RootRef>\n          )}\n        </Droppable>\n      </DragDropContext>\n    </Drawer>\n  );\n};\n\nexport default compose<React.FC<IColumnSelectorProps>>(\n  withTranslation('translations')\n)(ColumnSelector);","import { Dispatch } from 'redux';\nimport { Map } from 'immutable';\nimport i18next from 'i18next';\nimport { IAction } from 'ats-utils/src';\nimport { CheckEmailAlreadyExistsAction } from '../../modules/AtsModule/actions';\nimport { emailCheckFailedFieldError } from '../../utils/reduxForm';\n\ninterface IAsyncValidateProps {\n  initialValues?: Map<string, any>;\n}\n\n/**\n * redux-form async validation shared by the user forms (team management drawer, user profile,\n * user edit page, vendor quotation bid email): a changed email address must not be taken already.\n */\nexport const asyncValidate = async (values: Map<string, any>, dispatch: Dispatch<IAction>, props: IAsyncValidateProps) => {\n  const email = values.get('email');\n  const initialEmail = props.initialValues && props.initialValues.get('email');\n  if (email !== initialEmail) {\n    return new Promise<{ emailIsUnique: boolean }>((resolve, reject) => {\n      dispatch(new CheckEmailAlreadyExistsAction({\n        email,\n        resolve,\n        reject,\n      }));\n    }).then(\n      ({ emailIsUnique }) => {\n        if (!emailIsUnique) {\n          throw { email: i18next.t('translations:teamManagementUserDrawer.emailError') };\n        }\n      },\n      () => {\n        // The email check itself failed (e.g. network or server error). Surface it as a field\n        // error so redux-form shows it instead of leaking an unhandled promise rejection.\n        throw emailCheckFailedFieldError();\n      }\n    );\n  }\n};\n","import * as React from 'react';\nimport { compose, Dispatch } from 'redux';\nimport { Theme, Grid, Typography, IconButton, MenuItem, FormControl, Select, InputLabel, FormControlLabel, Checkbox, Switch, Chip, Tooltip } from '@material-ui/core';\nimport { StyleRules, withStyles, WithStyles } from '@material-ui/core/styles';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { InjectedFormProps, BaseFieldProps, change } from 'redux-form';\nimport { Field, reduxForm, Form, getFormValues } from 'redux-form/immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { DRAWER_ID } from '../../containers/Dashboard/WidgetLoader/TeamManagementWidgets/User';\nimport { ToggleOverlayComponentAction, NoPhotoPreviewAction, FieldDropzoneStateResetAction, SetSnackbarOpenAction, ToggleLiveChatAction } from '../../modules/ApplicationModule/actions';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../FieldDropzone';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport { isNotEmptyStringRequired, required, isValidEmailAddress } from '../../validators';\nimport FieldSelect, { IFieldSelectComponentProps } from '../FieldSelect';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectFirmId, makeSelectOffices, makeSelectOfficesByFirm, makeSelectSelectedFirmId, makeSelectTeamOrganization, makeSelectTeamOrganizationSelectedUser, makeSelectAclRoles } from '../../modules/AccountModule/selectors';\nimport { Office, User, AclItem, AclRoles } from '../../models';\nimport { List, Map, getIn, fromJS } from 'immutable';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport { CreateUserAction, UpdateUserByIdAction, SearchUsersByOfficeIdAction, GetAclRolesAction } from '../../modules/AccountModule/actions';\nimport Xhr from '../../utils/Xhr';\nimport Api from 'ats-api/src';\nimport { withAtsApi } from '../../contexts';\nimport { MAX_FILE_SIZE, ACCEPTED_FILE_TYPES } from '../UserContactDrawerDetailsContactEdit';\n\nimport PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid';\nimport PhoneEnabledIcon from '@material-ui/icons/PhoneEnabled';\nimport EmailIcon from '@material-ui/icons/Email';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PeopleAltRoundedIcon from '@material-ui/icons/PeopleAltRounded';\nimport {\n  default as withUserPermissions,\n  IWithUserPermissions\n} from '../../hoc/withUserPermissions';\nimport { makeSelectSite, makeSelectUId } from '../../modules/AtsModule/selectors';\nimport DrawerRow from '../DrawerRow';\nimport classnames from 'classnames';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport i18next from 'i18next';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { SiteName } from '../../constants';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../FieldAutocomplete';\nimport { preventUnhandledSubmitRejection } from '../../utils/reduxForm';\nimport { asyncValidate } from './asyncValidate';\n\nconst TEAM_MANAGEMENT_USER_FORM = 'TeamManagementUserDrawerForm';\n\ninterface IUserEditDrawerComponentProps {\n  data: IMap<User>;\n  onCloseOverride: () => void;\n  getUserAfterUpdate?: boolean;\n  customOnSubmit: any;\n}\n\ninterface IUserEditDrawerProps extends IUserEditDrawerComponentProps {\n  dispatch: Dispatch<IAction>;\n  offices: List<IMap<Office>>;\n  formValues: Map<string, any>;\n  initialValues: Map<string, any>;\n  user?: IMap<User>;\n  teamOrganization: any;\n  atsApi: Api;\n  uid: number;\n  site: SiteName;\n  aclRoles: List<IMap<AclItem>>;\n  createUser: ({user, site, rolesToGrant}: {user: IMap<Partial<User>>, site: SiteName, rolesToGrant?: string[]}) => void;\n  updateUser: ({user, id, refreshToken, getUserAfterUpdate, rolesToGrant, rolesToRevoke, onSuccess}: {user: IMap<Partial<User>>, id?: number, refreshToken?: boolean, getUserAfterUpdate?: boolean, rolesToGrant?: string[], rolesToRevoke?: string[], onSuccess?: () => void}) => void;\n}\n\ninterface IUserEditDrawerState {\n  fileId: string;\n  imageId: string;\n  initialEmailFromUser: string;\n}\n\ntype UserDrawerProps = IUserEditDrawerProps\n& InjectedFormProps\n& WithTranslation\n& WithStyles<keyof ReturnType<typeof styles>>\n& IWithUserPermissions;\n\nconst styles = (theme: Theme): StyleRules => ({\n  title: {\n    marginLeft: theme.spacing(2),\n  },\n  body: {\n    padding: theme.spacing(3, 3, 0, 3),\n    color: theme.palette.text.primary\n  },\n  activeOfficeInput: {\n    width: '100%',\n  },\n  uploadPhoto: {\n    height: theme.spacing(18),\n    marginBottom: theme.spacing()\n  },\n  uploadTitle: {\n    marginBottom: theme.spacing()\n  },\n  officeName: {\n    padding: theme.spacing(1, 0, 2),\n  },\n});\n\n// Re-exported for UserProfile, UserEditPage and VendorQuotationBidEmail, which share this validator.\nexport { asyncValidate };\n\nexport const uploadFileValidation = (value) => {\n  const size = value && value[0] && value[0]['size'] || false;\n  const type = value && value[0] && value[0]['type'] || false;\n\n  const validateSize = size > MAX_FILE_SIZE && `${i18next.t('translations:teamManagementUserDrawer.sizeLimitError')} ${MAX_FILE_SIZE / (1024 * 1024)}MiB`;\n  const validateFileType = !ACCEPTED_FILE_TYPES.includes(type) && type && i18next.t('translations:teamManagementUserDrawer.fileTypeError');\n\n  const message = [validateSize, validateFileType].filter((x) => x).join(' & ');\n  return message || undefined;\n};\n\nclass UserEditDrawer extends React.Component<UserDrawerProps, IUserEditDrawerState> {\n  public state = {\n    fileId: '',\n    imageId: '',\n    initialEmailFromUser: '',\n  };\n\n  public componentDidMount() {\n    const {\n      data,\n      aclRoles,\n      dispatch,\n    } = this.props;\n    if (data) {\n      this.setState({\n        initialEmailFromUser: data.get('email'),\n        imageId: data.get('imageId'),\n      });\n    }\n    if (!aclRoles.size) {\n      dispatch(new GetAclRolesAction());\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      teamOrganization: prevTeamOrganization\n    } = prevProps;\n    const {\n      teamOrganization,\n      dispatch,\n      reset,\n      form,\n    } = this.props;\n    const {\n      fileId\n    } = this.state;\n\n    if (fileId !== prevState.fileId) {\n      dispatch(change(form, 'imageId', fileId));\n    }\n    if (teamOrganization.get('drawerUserId') !== prevTeamOrganization.get('drawerUserId')) {\n      reset();\n    }\n  }\n\n  public handleSubmit = async (values: Map<string, any>) => {\n    const {\n      teamOrganization,\n      dispatch,\n      onCloseOverride,\n      atsApi,\n      uid,\n      data,\n    } = this.props;\n\n    const imageArray = await Xhr({atsApi, files: values.get('dropzone')});\n    const imageId = getIn(imageArray, [0, 'id'], '');\n    const submitValues = values.filter((value, key) => (\n      ['officeId', 'salutation', 'jobTitle', 'firstName', 'lastName', 'username',\n        'password', 'email', 'officePhone', 'extension', 'mobilePhone', 'restriction', 'imageId'].includes(key)\n    )).set('imageId', imageId ? imageId : values.get('imageId'));\n    const id = data && data.get('id');\n\n    dispatch(new FieldDropzoneStateResetAction());\n    onCloseOverride ? onCloseOverride() : this.handleClose();\n\n    if (!submitValues.get('officeId')) {\n      this.createOrUpdateUser(\n        submitValues.set('officeId', teamOrganization.get('selectedOfficeId')),\n        id,\n      );\n    } else {\n      this.createOrUpdateUser(submitValues, id);\n    }\n  }\n\n  public createOrUpdateUser = (user: IMap<Partial<User>>, id?: number) => {\n    const {\n      createUser,\n      updateUser,\n      teamOrganization,\n      dispatch,\n      uid,\n      getUserAfterUpdate,\n      customOnSubmit,\n      site,\n      formValues,\n      data,\n      isFirmAdmin,\n    } = this.props;\n\n    const officeId = teamOrganization.get('selectedOfficeId');\n    const formRoles = formValues.getIn(['aclRoles', 'default'], []);\n    const newRoles = Array.isArray(formRoles) ? formRoles : formRoles.toArray();\n    const includeAclRoles = isFirmAdmin && site === SiteName.spec;\n\n    if (!id) {\n      const selectedFirmId = teamOrganization.get('selectedFirmId');\n      const updatedUser = user.set('firmId', selectedFirmId).set('verified', true);\n      const rolesToGrant = includeAclRoles ? newRoles.filter(role => role !== AclRoles.MEMBER) : null;\n\n      createUser({ user: updatedUser, site, rolesToGrant });\n    } else {\n      const currentRoles = data?.getIn(['aclRoles', 'default'])?.toArray() || [];\n      const rolesToGrant = includeAclRoles ? newRoles.filter(role => !currentRoles.includes(role)) : null;\n      const rolesToRevoke = includeAclRoles ? currentRoles.filter(role => !newRoles.includes(role)) : null;\n\n      updateUser({\n        user,\n        id,\n        refreshToken: id === uid,\n        getUserAfterUpdate,\n        rolesToGrant,\n        rolesToRevoke,\n        onSuccess: officeId !== -1 ? () => dispatch(new SearchUsersByOfficeIdAction({ officeId, status: 'active' })) : undefined\n      });\n    }\n    if (customOnSubmit) {\n      customOnSubmit(user);\n    }\n  }\n\n  public handleClose = (): void => {\n    const { reset, dispatch} = this.props;\n    reset();\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID,\n      open: false,\n    }));\n  }\n\n  public removePhoto = (): void => {\n    const { dispatch, form } = this.props;\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(form, 'imageId', ''));\n    dispatch(change(form, 'dropzone', ''));\n    this.setState({ imageId: ''});\n  }\n\n  public uploadPhoto = (): JSX.Element => {\n    const { imageId } = this.state;\n    const {\n      classes,\n      formValues,\n      t\n    } = this.props;\n    return (\n      <Grid\n        container={true}\n        item={true}\n        direction='column'\n        justify='center'\n        className={classes.uploadPhoto}\n      >\n        <Grid\n          container={true}\n          justify='space-between'\n          className={classes.uploadTitle}\n        >\n          <Typography variant='body2' color='inherit'>{t('teamManagementUserDrawer.uploadPhotoTitle')}</Typography>\n          {\n            (imageId || (formValues && formValues.get('dropzone'))) &&\n            <IconButton onClick={this.removePhoto} size='small'>\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          }\n        </Grid>\n        <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n          component={FieldDropzone}\n          name='dropzone'\n          props={{initialImage: imageId}}\n          validate={uploadFileValidation}\n        />\n      </Grid>\n    );\n  }\n\n  public userInfo = (): JSX.Element => {\n    const {\n      classes,\n      offices,\n      selfOfficeId,\n      isSuperUser,\n      isFirmAdmin,\n      site,\n      aclRoles,\n      t\n    } = this.props;\n\n    const selfAdminOffice = offices.find(office => office.get('id') === selfOfficeId);\n    const displayAclRolesInput = isFirmAdmin && site === SiteName.spec;\n    const revokableRoles = new Set<string>(aclRoles?.map((role) => role.get('value')).toArray() || []);\n\n    return (\n      <Grid\n        item={true}\n        container={true}\n        direction='column'\n        justify='center'\n      >\n        <Typography variant='body2' color='inherit'>{t('teamManagementUserDrawer.userInfoTitle')}</Typography>\n        <DrawerTextFieldRow\n          name='firstName'\n          muiIcon={<PeopleAltRoundedIcon />}\n          validate={[isNotEmptyStringRequired]}\n          props={{\n            label: t('teamManagementUserDrawer.firstNameLabel'),\n            require: true,\n          }}\n        />\n        <DrawerTextFieldRow\n          name='lastName'\n          validate={[isNotEmptyStringRequired]}\n          props={{\n            label: t('teamManagementUserDrawer.lastNameLabel'),\n            require: true,\n          }}\n        />\n        <DrawerTextFieldRow\n          name='jobTitle'\n          validate={[isNotEmptyStringRequired]}\n          props={{\n            label: t('teamManagementUserDrawer.jobTitleLabel'),\n            require: true,\n          }}\n        />\n        <DrawerTextFieldRow\n          name='email'\n          muiIcon={<EmailIcon />}\n          validate={[isNotEmptyStringRequired, isValidEmailAddress]}\n          props={{\n            label: t('teamManagementUserDrawer.emailLabel'),\n            require: true,\n          }}\n        />\n        <DrawerRow drawerView={false}>\n          {\n            isSuperUser || isFirmAdmin\n            ? <Field<BaseFieldProps<IFieldSelectComponentProps>>\n                name='officeId'\n                validate={[required]}\n                component={FieldSelect}\n                props={{\n                  label: t('teamManagementUserDrawer.activeOfficeLabel'),\n                  require: true,\n                  excludeEmpty: true,\n                  inputProps: {\n                    fullWidth: true,\n                  },\n                  formControlProps: {\n                    className: classnames(classes.activeOfficeInput)\n                  }\n                }}\n              >\n                {\n                  offices.toIndexedSeq().toArray().map((office) =>\n                    <MenuItem\n                      key={office.get('id')}\n                      value={office.get('id')}\n                    >\n                      {office.get('officeName') || office.get('address1')}\n                    </MenuItem>\n                )}\n              </Field>\n            : <Typography variant='subtitle1' className={classes.officeName}>\n                {selfAdminOffice.get('officeName') || selfAdminOffice.get('address1')}\n              </Typography>\n          }\n        </DrawerRow>\n        <DrawerRow\n          muiIcon={<PhoneEnabledIcon />}\n          drawerView={false}\n          childrenJustify='space-between'\n        >\n          <Grid item={true} xs={8}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='officePhone'\n              component={FieldTextField}\n              props={{\n                label: t('teamManagementUserDrawer.directLineLabel'),\n                formControlProps: {\n                  fullWidth: true\n                },\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={3}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='extension'\n              component={FieldTextField}\n              props={{\n                label: t('teamManagementUserDrawer.extensionLabel'),\n                formControlProps: {\n                  fullWidth: true\n                },\n              }}\n            />\n          </Grid>\n        </DrawerRow>\n        <DrawerTextFieldRow\n          name='mobilePhone'\n          muiIcon={<PhoneAndroidIcon />}\n          props={{\n            label: t('teamManagementUserDrawer.mobileLabel'),\n          }}\n        />\n        {\n          displayAclRolesInput && (\n            <DrawerRow drawerView={false}>\n              <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                name='aclRoles.default'\n                component={FieldAutocomplete}\n                normalize={(newValue, previousValue) => {\n                  const previousArray: string[] = Array.isArray(previousValue)\n                    ? previousValue\n                    : (previousValue?.toArray?.() || []);\n                  const newArray: string[] = newValue || [];\n                  const restoredRoles = previousArray.filter(\n                    role => !newArray.includes(role) && (!revokableRoles.has(role) || role === AclRoles.MEMBER)\n                  );\n                  return [...newArray, ...restoredRoles];\n                }}\n                props={{\n                  inputProps: {\n                    multiple: true,\n                    label: t('teamManagementUserDrawer.roleTypeLabel'),\n                    options: aclRoles?.map((role) => role.get('value')).toArray() || [],\n                    getOptionSelected: (option, value) => option === value,\n                    filterSelectedOptions: true,\n                    getOptionLabel: option => option ? option : null,\n                    renderOption: option => option && <Typography>{option}</Typography>,\n                    renderTags: (tagValue: string[], getTagProps) =>\n                      tagValue.map((option, index) => {\n                        const { onDelete, ...tagProps } = getTagProps({ index });\n                        return (\n                          <Tooltip key={index} title={option}>\n                            <Chip\n                              label={option}\n                              {...tagProps}\n                              onDelete={revokableRoles.has(option) && option !== AclRoles.MEMBER ? onDelete : undefined}\n                            />\n                          </Tooltip>\n                        );\n                      }),\n                  },\n                  formControlProps: {\n                    fullWidth: true\n                  },\n                }}\n              />\n            </DrawerRow>\n          )\n        }\n      </Grid>\n    );\n  }\n\n  public main = (): JSX.Element => (\n    <Grid\n      container={true}\n      direction='column'\n    >\n      {this.uploadPhoto()}\n      {this.userInfo()}\n    </Grid>\n  )\n\n  public render() {\n    const {\n      classes,\n      handleSubmit,\n      t\n    } = this.props;\n    return (\n      <Grid>\n        <DrawerEditHeader title={t('teamManagementUserDrawer.drawerTitle')} handleClose={this.handleClose} />\n        <Form onSubmit={preventUnhandledSubmitRejection(handleSubmit(this.handleSubmit))} className={classes.body}>\n          {this.main()}\n          <DrawerEditCTA handleClose={this.handleClose} />\n        </Form>\n      </Grid>\n    );\n  }\n}\n\nconst mapStateToProps = (state, ownProps) => {\n  const teamOrganization = makeSelectTeamOrganization()(state);\n  const firmId = teamOrganization.get('selectedFirmId');\n  const offices = firmId === -1 ? makeSelectOffices()(state) : makeSelectOfficesByFirm({ firmId })(state);\n  const officeId = offices.find(office => office.get('id') === ownProps.selfOfficeId)?.get('id');\n\n  const createInitialValue = (ownProps.isOfficeAdmin && officeId)\n    ? fromJS({\n        officeId,\n        aclRoles: {\n          default: ['Member']\n        }\n      })\n    : Map<string, any>();\n\n  const existingRoles = ownProps.data?.get('aclRoles');\n  let adjustedRoles = existingRoles;\n  if (!existingRoles?.get('default')) {\n    if (existingRoles?.size) {\n      adjustedRoles = existingRoles.set('default', List());\n    } else {\n      adjustedRoles = fromJS({ default: [] });\n    }\n  } else {\n    if (typeof existingRoles.get('default').get(0) !== 'string') {\n      adjustedRoles = existingRoles.set('default', existingRoles.get('default').map(role => role.get('value')));\n    }\n  }\n  const initialValues = ownProps.data != null\n    ? ownProps.data.set('aclRoles', adjustedRoles)\n    : createInitialValue;\n\n  return {\n    initialValues,\n    offices,\n    teamOrganization,\n    ...createStructuredSelector({\n      formValues: getFormValues(TEAM_MANAGEMENT_USER_FORM),\n      uid: makeSelectUId(),\n      site: makeSelectSite(),\n      aclRoles: makeSelectAclRoles(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>, ownProps: UserDrawerProps) => {\n  const { t } = ownProps;\n  return {\n    createUser: ({user, site, rolesToGrant}: {user: IMap<Partial<User>>, site: SiteName, rolesToGrant?: string[]}) => {\n      const onSuccess = (newUser) => {\n        if (newUser && site === SiteName.pt) {\n          dispatch(new SetSnackbarOpenAction({\n            message: t('teamManagementUserDrawer.createUserSuccessMessage'),\n            severity: 'success',\n            anchorOrigin: {\n              horizontal: 'center',\n              vertical: 'bottom'\n            },\n            actionProps: {\n              label: t('teamManagementUserDrawer.liveChat'),\n              autoHideDuration: null,\n              onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n              buttonStyle: {\n                color: 'white',\n                textDecoration: 'underline'\n              }\n            }\n          }));\n        }\n      };\n      dispatch(new CreateUserAction({ user, rolesToGrant, onSuccess }));\n    },\n    updateUser: ({user, id, refreshToken, getUserAfterUpdate, rolesToGrant, rolesToRevoke, onSuccess}: {user: IMap<Partial<User>>, id?: number, refreshToken?: boolean, getUserAfterUpdate?: boolean, rolesToGrant?: string[], rolesToRevoke?: string[], onSuccess?: () => void}) => {\n      dispatch(new UpdateUserByIdAction({ id, user, refreshToken, getUserAfterUpdate, rolesToGrant, rolesToRevoke, onSuccess }) );\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IUserEditDrawerProps>>(\n  withAtsApi(),\n  withUserPermissions,\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: TEAM_MANAGEMENT_USER_FORM}),\n  reduxForm({\n    form: TEAM_MANAGEMENT_USER_FORM,\n    enableReinitialize: true,\n    asyncValidate,\n    asyncBlurFields: ['email']\n  })\n)(UserEditDrawer);","import {AclRoles} from '../../models';\n\nexport const hasQuoteConnectRepAcl = (identity) => {\n  return identity && identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.QUOTE_CONNECT_REP) !== -1;\n};\n\nexport const isQuoteConnectRepLogin = (identity) => {\n  if (identity) {\n    const isMember = identity.getIn(['acl_role_names']).findIndex(role => role === AclRoles.MEMBER) !== -1;\n    if (isMember) {\n      return false;\n    } else {\n      return identity.get('ssoIssuer') === 'QuoteConnect';\n    }\n  }\n};\n\nexport const getQuoteConnectLightColor = () => {\n  return '#FAB454';\n};\n\nexport const getGradientColors = () => {\n  return ['#F9a238', '#F8951D'];\n};\n\nexport default {\n  hasQuoteConnectRepAcl,\n  isQuoteConnectRepLogin,\n  getQuoteConnectLightColor,\n  getGradientColors\n};","import { IMap } from 'ats-utils/src';\nimport { fromJS, List, Map, Set } from 'immutable';\nimport { isEqual, template } from 'lodash';\nimport { QuoteSectionTemplateFieldsData } from '../../models';\nimport { parseAllFormulaFields } from '../../utils/parseFormulaFields';\nimport { applyRoundingOption } from '../../modules/QuoteEditModule/utils';\nimport { DECIMAL_PRECISION } from '../QuoteTemplate/utils';\n\n/**\n * Constructs a discount map from customer and manufacturer discounts.\n *\n * Output format:\n * {\n *   [regionId]: {\n *     [manufacturerId-categoryId]: {\n *       [discountType]: value\n *     }\n *   }\n * }\n *\n * - customerDiscounts have no region, so use 'all' for regionId\n * - manufacturerDiscounts have regions with region.id (can be 'default')\n * - If categories array is empty, use 'all' for categoryId\n * - If manufacturerId is missing, use 'all'\n * - If duplicate region/manufacturer/category/type exists, values are summed\n */\nexport const constructDiscountsMap = ({\n  customerDiscounts,\n  manufacturerDiscounts\n}: {\n  customerDiscounts?: List<any>,\n  manufacturerDiscounts?: List<any>\n}) => {\n  let discountMap = fromJS({});\n\n  // Process customerDiscounts - no region, use 'all'\n  if (customerDiscounts) {\n    (customerDiscounts || List()).forEach((discount: any) => {\n      const manufacturerId = discount.get('manufacturerId') ?? 'all';\n      const categoryId = discount.get('categoryId') ?? 'all';\n      const type = discount.get('type');\n      const amount = discount.get('amount') || 0;\n\n      if (!type) { return; }\n\n      const key = `${manufacturerId}-${categoryId}`;\n      const path = ['all', key, type];\n\n      // const existingValue = discountMap.getIn(path, 0) as number;\n      discountMap = discountMap.setIn(path, amount);\n    });\n    return discountMap;\n  }\n\n  // Process manufacturerDiscounts\n  (manufacturerDiscounts || List()).forEach((manufacturerGroup: any) => {\n    const manufacturerId = manufacturerGroup.getIn(['manufacturer', 'id']) ?? 'all';\n    const regions = manufacturerGroup.get('regions') || List();\n\n    regions.forEach((region: any) => {\n      const regionId = String(region.getIn(['region', 'id']) ?? 'default');\n      const types = region.get('types') || List();\n\n      types.forEach((typeEntry: any) => {\n        const discountType = typeEntry.get('type');\n        const value = typeEntry.get('value') || 0;\n        const categories = typeEntry.get('categories') || List();\n\n        if (!discountType) { return; }\n\n        if (categories.size === 0) {\n          // No categories means 'all'\n          const key = `${manufacturerId}-all`;\n          const path = [regionId, key, discountType];\n          // const existingValue = discountMap.getIn(path, 0) as number;\n          discountMap = discountMap.setIn(path, value);\n        } else {\n          // Process each category\n          categories.forEach((category: any) => {\n            const categoryId = category.get('id') ?? 'all';\n            const key = `${manufacturerId}-${categoryId}`;\n            const path = [regionId, key, discountType];\n            // const existingValue = discountMap.getIn(path, 0) as number;\n            discountMap = discountMap.setIn(path, value);\n          });\n        }\n      });\n    });\n  });\n  return discountMap;\n};\n\n/**\n * Calculates the total discount value for a given product based on priority, region, manufacturer, category, and discount type.\n *\n * Lookup order (returns first match):\n * 1. Specific match (manufacturerId-categoryId + discountType) in the given discountPriority\n * 2. Specific match (manufacturerId-categoryId + discountType) in the other priority\n * 3. General match (manufacturerId-all + discountType) in the given discountPriority\n * 4. General match (manufacturerId-all + discountType) in the other priority\n *\n * Within each step, checks regions in order: currentRegionId, then 'all'.\n *\n * @returns The first matching discount value, or null if no matching discounts found\n */\nexport const calculcateDiscountValue = ({ discounts = fromJS({}), discountPriority, currentRegionId = 'default', pManufacturerId, pCategoryId, discountType }: {\n  discounts: IMap<any>;\n  discountPriority: string;\n  currentRegionId: string | number;\n  pManufacturerId: string | number;\n  pCategoryId: string | number;\n  discountType: string;\n}) => {\n  if (!discounts || discounts.size === 0) {\n    return null;\n  }\n\n  const otherPriority = discountPriority === 'customer' ? 'manufacturer' : 'customer';\n  const priorityOrder = [discountPriority, otherPriority];\n  const regionsToCheck = [String(currentRegionId), 'all'];\n\n  const specificKey = `${pManufacturerId}-${pCategoryId}`;\n  const generalKey = `${pManufacturerId}-all`;\n\n  // Check specific match (exact manufacturerId + categoryId + discountType) across priorities\n  for (const priority of priorityOrder) {\n    const priorityDiscounts = discounts.get(priority);\n    if (!priorityDiscounts) { continue; }\n\n    for (const regionId of regionsToCheck) {\n      const regionDiscounts = priorityDiscounts.get(regionId);\n      if (!regionDiscounts) { continue; }\n\n      const value = regionDiscounts.getIn([specificKey, discountType]);\n      if (value !== undefined) {\n        return value;\n      }\n    }\n  }\n\n  // Check general match (exact manufacturerId + all categories + discountType) across priorities\n  for (const priority of priorityOrder) {\n    const priorityDiscounts = discounts.get(priority);\n    if (!priorityDiscounts) { continue; }\n\n    for (const regionId of regionsToCheck) {\n      const regionDiscounts = priorityDiscounts.get(regionId);\n      if (!regionDiscounts) { continue; }\n\n      const value = regionDiscounts.getIn([generalKey, discountType]);\n      if (value !== undefined) {\n        return value;\n      }\n    }\n  }\n\n  return null;\n};\n\n/**\n * Populates customer discount fields in a product's templateCells based on the discounts map.\n *\n * @param product - The product containing templateCells to populate\n * @param discounts - The discounts map constructed from constructDiscountsMap\n * @param customerDiscountColumns - A map of discount types to their column indices in templateCells\n * @param currentRegionId - The current region ID for region-specific manufacturer discounts\n * @param pManufacturerId - Optional manufacturer ID (defaults to product.manufacturerId or product.brandId)\n * @param pCategoryId - Optional category ID (defaults to product.categoryId)\n *\n * @returns Updated templateCells with populated discount values\n */\nexport const populateDiscountFields = ({\n  product,\n  discounts,\n  discountPriority,\n  customerDiscountColumns = fromJS({}),\n  currentRegionId = 'default',\n}: {\n  product: any;\n  discounts: any;\n  discountPriority: string;\n  customerDiscountColumns: Map<string, number>; // discountType: columnIndex\n  currentRegionId?: string | number;\n}) => {\n  let templateCells = product.get('templateCells', fromJS([]));\n\n  const manufacturerId = product.get('brandId');\n  const categoryId = product.get('category');\n\n  // Reset multiplier cell to '1' if it exists (default value for multiplier)\n  const multiplierCellIndex = customerDiscountColumns.get('multiplier');\n  if (multiplierCellIndex !== undefined && multiplierCellIndex !== null) {\n    templateCells = templateCells.setIn([multiplierCellIndex, 'fieldValue'], '1.00');\n  }\n\n  // Populate each discount type column with the calculated value\n  customerDiscountColumns.forEach((cellIndex: number, discountType: string) => {\n    const discountValue = calculcateDiscountValue({\n      discounts,\n      discountPriority,\n      currentRegionId,\n      pManufacturerId: manufacturerId,\n      pCategoryId: categoryId,\n      discountType,\n    });\n\n    if (discountValue !== null) {\n      const roundingOption = templateCells.getIn([cellIndex, 'roundingOption']);\n      const decimalPrecision = templateCells.getIn([cellIndex, 'decimalPrecision'], DECIMAL_PRECISION.TWO);\n      const val = applyRoundingOption({ value: String(discountValue), roundingOption, decimalPrecision });\n      templateCells = templateCells\n        .setIn([cellIndex, 'fieldValue'], val)\n        .setIn([cellIndex, 'formattedValue'], val);\n    }\n  });\n\n  return templateCells;\n};\n\nconst resetCustomerDiscountFields = (product, customerDiscountColumns) => {\n  const templateCells = product.get('templateCells', fromJS([]));\n  return customerDiscountColumns.reduce((cells, discount) => {\n    const decimalPrecision = templateCells.getIn([discount, 'decimalPrecision'], DECIMAL_PRECISION.TWO);\n    return cells.setIn([discount, 'fieldValue'], product.getIn(['templateCells', discount, 'pimData']) === 'multiplier' ? (1).toFixed(decimalPrecision) : '');\n  }, templateCells);\n};\n\nexport const checkBrandMatch = (product, combos) => {\n  const fullMatchForProductBrand = combos.find((v) => {\n    return v.get('manufacturer') === product.get('brand') && v.get('category') === product.get('categoryName');\n  });\n  const wildcardBrand = combos.find((v) => {\n    return v.get('manufacturer') === product.get('brand') && v.get('category') === null;\n  });\n  return fullMatchForProductBrand || wildcardBrand;\n};\n\n// export const hasMatchingDiscounts = ({\n//   regionId,\n//   pManufacturerId,\n//   pCategoryId,\n//   customerDiscountTypesInProduct,\n//   discounts = fromJS({}), // should be constructed using constructDiscountsMap function\n// }) => {\n//   const regionDiscounts = discounts.get(String(regionId));\n//   if (!regionDiscounts) {\n//     return false;\n//   }\n\n//   // Keys to check for matching discounts\n//   const keysToCheck = [\n//     `${pManufacturerId}-${pCategoryId}`,  // Exact match\n//     `${pManufacturerId}-all`,              // Specific manufacturer with all categories\n//   ];\n\n//   for (const key of keysToCheck) {\n//     const discountEntry = regionDiscounts.get(key);\n//     if (discountEntry) {\n//       // Check if any of the discount types in the product have a value\n//       const hasMatch = customerDiscountTypesInProduct.some((discountType) => {\n//         const value = discountEntry.get(discountType);\n//         return value !== undefined && value !== null;\n//       });\n//       if (hasMatch) {\n//         return true;\n//       }\n//     }\n//   }\n\n//   return false;\n// };\n\nexport const hasMatchingDiscounts = ({\n  regionId,\n  pManufacturerId,\n  pCategoryId,\n  customerDiscountTypesInProduct,\n  discounts = fromJS({}), // should be constructed using constructDiscountsMap function with priority layer\n}) => {\n  // Keys to check for matching discounts\n  const keysToCheck = [\n    `${pManufacturerId}-${pCategoryId}`,  // Exact match\n    `${pManufacturerId}-all`,              // Specific manufacturer with all categories\n  ];\n\n  // Check manufacturer priority layer using the given regionId\n  const manufacturerRegionDiscounts = discounts.getIn(['manufacturer', String(regionId)]);\n  if (manufacturerRegionDiscounts) {\n    for (const key of keysToCheck) {\n      const discountEntry = manufacturerRegionDiscounts.get(key);\n      if (discountEntry) {\n        const hasMatch = customerDiscountTypesInProduct.some((discountType) => {\n          const value = discountEntry.get(discountType);\n          return value !== undefined && value !== null;\n        });\n        if (hasMatch) {\n          return true;\n        }\n      }\n    }\n  }\n\n  // Check customer priority layer using 'all' region (customer discounts have no region)\n  const customerRegionDiscounts = discounts.getIn(['customer', 'all']);\n  if (customerRegionDiscounts) {\n    for (const key of keysToCheck) {\n      const discountEntry = customerRegionDiscounts.get(key);\n      if (discountEntry) {\n        const hasMatch = customerDiscountTypesInProduct.some((discountType) => {\n          const value = discountEntry.get(discountType);\n          return value !== undefined && value !== null;\n        });\n        if (hasMatch) {\n          return true;\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\nconst hasSpecific = (regionDisc, manufacturerCategory, type) => {\n  return regionDisc?.has([manufacturerCategory, type]) ?? false;\n};\nconst hasGeneral = (regionDisc, manufacturerCategory, type) => {\n  return regionDisc?.has([manufacturerCategory, type]) ?? false;\n};\nexport const getTypesToUpdateForApplyManDiscounts = ({\n  regionId,\n  pManufacturerId,\n  pCategoryId,\n  customerDiscountTypesInProduct,\n  discounts = fromJS({}), // includes priority layer\n  deltaDiscounts = fromJS({}), // should be constructed using constructDiscountsMap function, only contains the discounts that are being updated (added/removed)\n  discountPriority,\n}) => {\n  const customerDiscounts = discounts.getIn(['customer', 'all']);\n  const newManufacturerDiscounts = deltaDiscounts.get(String(regionId));\n\n  const specificKey = `${pManufacturerId}-${pCategoryId}`;\n  const generalKey = `${pManufacturerId}-all`;\n\n  return customerDiscountTypesInProduct.filter((type) => {\n    if (discountPriority === 'manufacturer') {\n      if (hasSpecific(newManufacturerDiscounts, specificKey, type)) {\n        return true;\n      }\n      if (!hasSpecific(customerDiscounts, specificKey, type) && hasGeneral(newManufacturerDiscounts, generalKey, type)) {\n        return true;\n      }\n      return false;\n    } else {\n      if (!hasSpecific(customerDiscounts, specificKey, type)) {\n        if (hasSpecific(newManufacturerDiscounts, specificKey, type)) {\n          return true;\n        }\n        if (!hasGeneral(customerDiscounts, generalKey, type) && hasGeneral(newManufacturerDiscounts, generalKey, type)) {\n          return true;\n        }\n      }\n      return false;\n    }\n  });\n};\nexport const getTypesToUpdateForRemoveManDiscounts = ({\n  regionId,\n  pManufacturerId,\n  pCategoryId,\n  customerDiscountTypesInProduct,\n  discounts = fromJS({}), // includes priority layer\n  deltaDiscounts = fromJS({}), // should be constructed using constructDiscountsMap function, only contains the discounts that are being updated (added/removed)\n  discountPriority,\n}) => {\n  const customerDiscounts = discounts.getIn(['customer', 'all']);\n  const newManufacturerDiscounts = deltaDiscounts.get(String(regionId));\n\n  const specificKey = `${pManufacturerId}-${pCategoryId}`;\n  const generalKey = `${pManufacturerId}-all`;\n\n  return customerDiscountTypesInProduct.filter((type) => {\n    if (discountPriority === 'manufacturer') {\n      if (hasSpecific(newManufacturerDiscounts, specificKey, type)) {\n        if (hasSpecific(customerDiscounts, specificKey, type)) {\n          return true;\n        }\n        if (hasGeneral(newManufacturerDiscounts, generalKey, type) && hasGeneral(customerDiscounts, generalKey, type)) {\n          return true;\n        }\n      } else {\n        if (!hasSpecific(customerDiscounts, specificKey, type) && hasGeneral(newManufacturerDiscounts, generalKey, type) && hasGeneral(customerDiscounts, generalKey, type)) {\n          return true;\n        }\n      }\n      return false;\n    } else {\n      if (!hasSpecific(customerDiscounts, specificKey, type)) {\n        if (hasSpecific(newManufacturerDiscounts, specificKey, type) && hasGeneral(customerDiscounts, generalKey, type)) {\n          return true;\n        }\n      }\n      return false;\n    }\n  });\n};\n\n// export const updateManufacturerDiscountsPerspective = ({\n//   discounts, // includes priority layer\n//   discountsToApply, // does not include priority layer since it's only the discounts that are being updated (added/removed)\n//   discountsToRemove, // does not include priority layer since it's only the discounts that are being updated (added/removed)\n//   discountPriority,\n//   products,\n//   regionId = 'default',\n// }: {\n//   discounts: IMap<any>,\n//   discountsToApply?: IMap<any>,\n//   discountsToRemove?: IMap<any>,\n//   discountPriority: string,\n//   products: List<IMap<any>>,\n//   regionId: string | number,\n// }) => {\n//   if (products.size === 0 || (!discountsToApply?.size && !discountsToRemove?.size)) {\n//     return products;\n//   }\n\n//   const firstProduct = products.find(product => product.get('id') !== -1);\n//   if (!firstProduct) {\n//     return products;\n//   }\n\n//   const customerDiscountColumns = firstProduct.get('templateCells').reduce((cols, column, idx) => {\n//     if (column.get('valueType') === 'storedData' && column.get('pimType') === 'customer') {\n//       return cols.set(column.get('pimData'), idx);\n//     }\n//     return cols;\n//   }, fromJS({}));\n\n//   const customerDiscountTypesInProduct = customerDiscountColumns.keySeq().toSet();\n\n//   if (discountsToApply?.size && customerDiscountTypesInProduct.size) {\n//     const updatedProducts = products.map((product) => {\n//       if (!product || product.get('id') < 0) {\n//         return product;\n//       }\n\n//       const typesToUpdate = getTypesToUpdateForApplyManDiscounts({ regionId, pManufacturerId: product.get('brandId'), pCategoryId: product.get('category'), customerDiscountTypesInProduct, discounts, deltaDiscounts: discountsToApply, discountPriority });\n//       if (typesToUpdate.size) {\n//         const currenctTemplateCells = product.get('templateCells');\n//         const customerDiscountColumnsToUpdate = customerDiscountColumns.filter((idx, discountType) => typesToUpdate.has(discountType));\n//         const updatedTemplateCells = populateDiscountFields({product, discounts: discountsToApply, discountPriority, customerDiscountColumns: customerDiscountColumnsToUpdate , currentRegionId: regionId});\n//         return product.withMutations((ctx) => {\n//           if (!isEqual(updatedTemplateCells, currenctTemplateCells)) {\n//             ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n//           }\n//         });\n//       }\n//       return product;\n//     });\n\n//     return updatedProducts;\n//   } else if (discountsToRemove?.size && customerDiscountTypesInProduct.size) {\n//     const updatedProducts = products.map((product) => {\n//       if (!product || product.get('id') === -1) {\n//         return product;\n//       }\n\n//       const typesToUpdate = getTypesToUpdateForRemoveManDiscounts({ regionId, pManufacturerId: product.get('brandId'), pCategoryId: product.get('category'), customerDiscountTypesInProduct, discounts, deltaDiscounts: discountsToRemove, discountPriority });\n//       const currenctTemplateCells = product.get('templateCells');\n//       let updatedTemplateCells;\n//       const customerDiscountColumnsToUpdate = customerDiscountColumns.filter((idx, discountType) => typesToUpdate.has(discountType));\n//       const customerDiscountColumnsToReset = customerDiscountColumns.filter((idx, discountType) => !typesToUpdate.has(discountType));\n\n//       if (customerDiscountColumnsToUpdate.size) {\n//         updatedTemplateCells = populateDiscountFields({product, discounts: discountsToApply, discountPriority, customerDiscountColumns: customerDiscountColumnsToUpdate , currentRegionId: regionId});\n//       }\n//       if (customerDiscountColumnsToReset.size && !hasMatchingDiscounts({ regionId, pManufacturerId: product.get('brandId'), pCategoryId: product.get('category'), customerDiscountTypesInProduct: customerDiscountColumnsToReset.keySeq().toSet(), discounts: discountsToRemove })) {\n//         updatedTemplateCells = resetCustomerDiscountFields(product, customerDiscountColumnsToReset);\n//       }\n//       if (updatedTemplateCells) {\n//         return product.withMutations((ctx) => {\n//           if (!isEqual(updatedTemplateCells, currenctTemplateCells)) {\n//             ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n//           }\n//         });\n//       }\n\n//       return product;\n//     });\n//     return updatedProducts;\n//   }\n// };\n\nexport const updateManufacturerDiscountsPerspective = ({\n  discounts, // includes priority layer\n  discountsToApply, // does not include priority layer since it's only the discounts that are being updated (added/removed)\n  discountsToRemove, // does not include priority layer since it's only the discounts that are being updated (added/removed)\n  discountPriority,\n  products,\n  regionId = 'default',\n}: {\n  discounts: IMap<any>,\n  discountsToApply?: IMap<any>,\n  discountsToRemove?: IMap<any>,\n  discountPriority: string,\n  products: List<IMap<any>>,\n  regionId: string | number,\n}) => {\n  if (products.size === 0 || (!discountsToApply?.size && !discountsToRemove?.size)) {\n    return products;\n  }\n\n  const firstProduct = products.find(product => product.get('id') !== -1);\n  if (!firstProduct) {\n    return products;\n  }\n\n  const customerDiscountColumns = firstProduct.get('templateCells').reduce((cols, column, idx) => {\n    if (column.get('valueType') === 'storedData' && column.get('pimType') === 'customer') {\n      return cols.set(column.get('pimData'), idx);\n    }\n    return cols;\n  }, fromJS({}));\n\n  const customerDiscountTypesInProduct = customerDiscountColumns.keySeq().toSet();\n\n  if (discountsToApply?.size && customerDiscountTypesInProduct.size) {\n    const updatedProducts = products.map((product) => {\n      if (!product || product.get('id') < 0) {\n        return product;\n      }\n\n      if (hasMatchingDiscounts({ regionId, pManufacturerId: product.get('brandId'), pCategoryId: product.get('category'), customerDiscountTypesInProduct, discounts: discountsToApply })) {\n        const currenctTemplateCells = product.get('templateCells');\n        const updatedTemplateCells = populateDiscountFields({product, discounts, discountPriority, customerDiscountColumns, currentRegionId: regionId});\n        return product.withMutations((ctx) => {\n          if (!isEqual(updatedTemplateCells, currenctTemplateCells)) {\n            ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n          }\n        });\n      }\n      return product;\n    });\n\n    return updatedProducts;\n  } else if (discountsToRemove?.size && customerDiscountTypesInProduct.size) {\n    const updatedProducts = products.map((product) => {\n      if (!product || product.get('id') === -1) {\n        return product;\n      }\n\n      if (hasMatchingDiscounts({ regionId, pManufacturerId: product.get('brandId'), pCategoryId: product.get('category'), customerDiscountTypesInProduct, discounts: discountsToRemove })) {\n        const currentTemplateCells = product.get('templateCells');\n        const updatedTemplateCells = resetCustomerDiscountFields(product, customerDiscountColumns);\n        return product.withMutations((ctx) => {\n          if (!isEqual(updatedTemplateCells, currentTemplateCells)) {\n            ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n          }\n        });\n      }\n      return product;\n    });\n    return updatedProducts;\n  }\n};\n\n// export const updateCustomerDiscountsPerspective = ({\n//   discounts,\n//   discountPriority,\n//   selectedCustomer,\n//   products,\n//   regionId = 'default',\n// }: {\n//   discounts: IMap<any>,\n//   discountPriority: string,\n//   newCustomerDiscounts?: IMap<any>,\n//   oldCustomerDiscounts?: IMap<any>,\n//   selectedCustomer: IMap<any>,\n//   products: List<IMap<any>>,\n//   regionId: string | number,\n// }) => {\n//   if (products.size === 0) {\n//     return products;\n//   }\n\n//   const firstProduct = products.find(product => product.get('id') !== -1);\n//   if (!firstProduct) {\n//     return products;\n//   }\n\n//   const customerDiscountColumns = firstProduct.get('templateCells').reduce((cols, column, idx) => {\n//     if (column.get('valueType') === 'storedData' && column.get('pimType') === 'customer') {\n//       return cols.set(column.get('pimData'), idx);\n//     }\n//     return cols;\n//   }, fromJS({}));\n\n//   if (selectedCustomer.get('visibility') || discounts?.get('customer')?.size || discounts?.get('manufacturer')?.size) {\n//     const updatedProducts = products.map((product) => {\n//       if (!product || product.get('id') < 0) {\n//         return product;\n//       }\n\n//       if (selectedCustomer.get('visibility')?.size && !checkBrandMatch(product, selectedCustomer.get('visibility'))) {\n//         return product.set('notVisibleToSelectedCustomer', true);\n//       } else {\n//         const currenctTemplateCells = product.get('templateCells');\n//         const updatedTemplateCells = populateDiscountFields({product, discounts, discountPriority, customerDiscountColumns, currentRegionId: regionId});\n//         return product.withMutations((ctx) => {\n//           ctx.set('notVisibleToSelectedCustomer', false);\n//           // since parseAllFormulaFields will recalculated all formula fields including ones that\n//           // are not directly/indirectly customer related ones, we need to check if there's any changes\n//           if (!isEqual(updatedTemplateCells, currenctTemplateCells)) {\n//             ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n//           }\n//         });\n//       }\n//     });\n//     return updatedProducts;\n//   } else if (!selectedCustomer.get('id')) {\n//     const updatedProducts = products.map((product) => {\n//       if (!product || product.get('id') === -1) {\n//         return product;\n//       }\n\n//       const currentTemplateCells = product.get('templateCells');\n//       const updatedTemplateCells = resetCustomerDiscountFields(product, customerDiscountColumns);\n//       return product.withMutations((ctx) => {\n//         ctx.set('notVisibleToSelectedCustomer', false);\n//         // since parseAllFormulaFields will recalculated all formula fields including ones that\n//         // are not directly/indirectly customer related ones, we need to check if there's any changes\n//         if (!isEqual(updatedTemplateCells, currentTemplateCells)) {\n//           ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n//         }\n//       });\n\n//     });\n//     return updatedProducts;\n//   }\n// };\n\nexport const updateDiscountsAndVisibilityPerspective = ({\n  discounts,\n  discountPriority,\n  selectedCustomer,\n  products,\n  regionId = 'default',\n}: {\n  discounts: IMap<any>,\n  discountPriority: string,\n  selectedCustomer: IMap<any>,\n  products: List<IMap<any>>,\n  regionId: string | number,\n}) => {\n  if (products.size === 0) {\n    return products;\n  }\n\n  const firstProduct = products.find(product => product.get('id') !== -1);\n  if (!firstProduct) {\n    return products;\n  }\n\n  const customerDiscountColumns = firstProduct.get('templateCells').reduce((cols, column, idx) => {\n    if (column.get('valueType') === 'storedData' && column.get('pimType') === 'customer') {\n      return cols.set(column.get('pimData'), idx);\n    }\n    return cols;\n  }, fromJS({}));\n  // const customerDiscountTypesInProduct = customerDiscountColumns.keySeq().toSet();\n\n  if (selectedCustomer.get('visibility') || discounts?.get('customer')?.size || discounts?.get('manufacturer')?.size) {\n    const updatedProducts = products.map((product) => {\n      if (!product || product.get('id') < 0) {\n        return product;\n      }\n\n      if (selectedCustomer.get('visibility')?.size && !checkBrandMatch(product, selectedCustomer.get('visibility'))) {\n        return product.set('notVisibleToSelectedCustomer', true);\n      } else {\n        const currenctTemplateCells = product.get('templateCells');\n        const updatedTemplateCells = populateDiscountFields({product, discounts, discountPriority, customerDiscountColumns, currentRegionId: regionId});\n        return product.withMutations((ctx) => {\n          ctx.set('notVisibleToSelectedCustomer', false);\n          // since parseAllFormulaFields will recalculated all formula fields including ones that\n          // are not directly/indirectly customer related ones, we need to check if there's any changes\n          if (!isEqual(updatedTemplateCells, currenctTemplateCells)) {\n            ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n          }\n        });\n      }\n    });\n    return updatedProducts;\n  } else {\n    const updatedProducts = products.map((product) => {\n      if (!product || product.get('id') === -1) {\n        return product;\n      }\n\n      const currentTemplateCells = product.get('templateCells');\n      const updatedTemplateCells = resetCustomerDiscountFields(product, customerDiscountColumns);\n      return product.withMutations((ctx) => {\n        ctx.set('notVisibleToSelectedCustomer', false);\n        // since parseAllFormulaFields will recalculated all formula fields including ones that\n        // are not directly/indirectly customer related ones, we need to check if there's any changes\n        if (!isEqual(updatedTemplateCells, currentTemplateCells)) {\n          ctx.set('templateCells', fromJS(parseAllFormulaFields({ productFields: updatedTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] })));\n        }\n      });\n\n    });\n    return updatedProducts;\n  }\n};\n","// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n  set: function set(cache, key1, key2, value) {\n    var subCache = cache.get(key1);\n\n    if (!subCache) {\n      subCache = new Map();\n      cache.set(key1, subCache);\n    }\n\n    subCache.set(key2, value);\n  },\n  get: function get(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    return subCache ? subCache.get(key2) : undefined;\n  },\n  delete: function _delete(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    subCache.delete(key2);\n  }\n};\nexport default multiKeyStore;","/* eslint-disable import/prefer-default-export */\n// Global index counter to preserve source order.\n// We create the style sheet during at the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\nvar indexCounter = -1e9;\nexport function increment() {\n  indexCounter += 1;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (indexCounter >= 0) {\n      console.warn(['Material-UI: you might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n'));\n    }\n  }\n\n  return indexCounter;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { deepmerge } from '@material-ui/utils';\nimport noopTheme from './noopTheme';\n\nfunction getStylesCreator(stylesOrCreator) {\n  var themingEnabled = typeof stylesOrCreator === 'function';\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (_typeof(stylesOrCreator) !== 'object' && !themingEnabled) {\n      console.error(['Material-UI: the `styles` argument provided is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n'));\n    }\n  }\n\n  return {\n    create: function create(theme, name) {\n      var styles;\n\n      try {\n        styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n      } catch (err) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (themingEnabled === true && theme === noopTheme) {\n            // TODO: prepend error message/name instead\n            console.error(['Material-UI: the `styles` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n          }\n        }\n\n        throw err;\n      }\n\n      if (!name || !theme.overrides || !theme.overrides[name]) {\n        return styles;\n      }\n\n      var overrides = theme.overrides[name];\n\n      var stylesWithOverrides = _extends({}, styles);\n\n      Object.keys(overrides).forEach(function (key) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (!stylesWithOverrides[key]) {\n            console.warn(['Material-UI: you are trying to override a style that does not exist.', \"Fix the `\".concat(key, \"` key of `theme.overrides.\").concat(name, \"`.\")].join('\\n'));\n          }\n        }\n\n        stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]);\n      });\n      return stylesWithOverrides;\n    },\n    options: {}\n  };\n}\n\nexport default getStylesCreator;","// We use the same empty object to ref count the styles that don't need a theme object.\nvar noopTheme = {};\nexport default noopTheme;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport { getDynamicStyles } from 'jss';\nimport mergeClasses from '../mergeClasses';\nimport multiKeyStore from './multiKeyStore';\nimport useTheme from '../useTheme';\nimport { StylesContext } from '../StylesProvider';\nimport { increment } from './indexCounter';\nimport getStylesCreator from '../getStylesCreator';\nimport noopTheme from '../getStylesCreator/noopTheme';\n\nfunction getClasses(_ref, classes, Component) {\n  var state = _ref.state,\n      stylesOptions = _ref.stylesOptions;\n\n  if (stylesOptions.disableGeneration) {\n    return classes || {};\n  }\n\n  if (!state.cacheClasses) {\n    state.cacheClasses = {\n      // Cache for the finalized classes value.\n      value: null,\n      // Cache for the last used classes prop pointer.\n      lastProp: null,\n      // Cache for the last used rendered classes pointer.\n      lastJSS: {}\n    };\n  } // Tracks if either the rendered classes or classes prop has changed,\n  // requiring the generation of a new finalized classes object.\n\n\n  var generate = false;\n\n  if (state.classes !== state.cacheClasses.lastJSS) {\n    state.cacheClasses.lastJSS = state.classes;\n    generate = true;\n  }\n\n  if (classes !== state.cacheClasses.lastProp) {\n    state.cacheClasses.lastProp = classes;\n    generate = true;\n  }\n\n  if (generate) {\n    state.cacheClasses.value = mergeClasses({\n      baseClasses: state.cacheClasses.lastJSS,\n      newClasses: classes,\n      Component: Component\n    });\n  }\n\n  return state.cacheClasses.value;\n}\n\nfunction attach(_ref2, props) {\n  var state = _ref2.state,\n      theme = _ref2.theme,\n      stylesOptions = _ref2.stylesOptions,\n      stylesCreator = _ref2.stylesCreator,\n      name = _ref2.name;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme);\n\n  if (!sheetManager) {\n    sheetManager = {\n      refs: 0,\n      staticSheet: null,\n      dynamicStyles: null\n    };\n    multiKeyStore.set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager);\n  }\n\n  var options = _extends({}, stylesCreator.options, {}, stylesOptions, {\n    theme: theme,\n    flip: typeof stylesOptions.flip === 'boolean' ? stylesOptions.flip : theme.direction === 'rtl'\n  });\n\n  options.generateId = options.serverGenerateClassName || options.generateClassName;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    var staticSheet;\n\n    if (stylesOptions.sheetsCache) {\n      staticSheet = multiKeyStore.get(stylesOptions.sheetsCache, stylesCreator, theme);\n    }\n\n    var styles = stylesCreator.create(theme, name);\n\n    if (!staticSheet) {\n      staticSheet = stylesOptions.jss.createStyleSheet(styles, _extends({\n        link: false\n      }, options));\n      staticSheet.attach();\n\n      if (stylesOptions.sheetsCache) {\n        multiKeyStore.set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet);\n      }\n    }\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(staticSheet);\n    }\n\n    sheetManager.staticSheet = staticSheet;\n    sheetManager.dynamicStyles = getDynamicStyles(styles);\n  }\n\n  if (sheetManager.dynamicStyles) {\n    var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, _extends({\n      link: true\n    }, options));\n    dynamicSheet.update(props);\n    dynamicSheet.attach();\n    state.dynamicSheet = dynamicSheet;\n    state.classes = mergeClasses({\n      baseClasses: sheetManager.staticSheet.classes,\n      newClasses: dynamicSheet.classes\n    });\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(dynamicSheet);\n    }\n  } else {\n    state.classes = sheetManager.staticSheet.classes;\n  }\n\n  sheetManager.refs += 1;\n}\n\nfunction update(_ref3, props) {\n  var state = _ref3.state;\n\n  if (state.dynamicSheet) {\n    state.dynamicSheet.update(props);\n  }\n}\n\nfunction detach(_ref4) {\n  var state = _ref4.state,\n      theme = _ref4.theme,\n      stylesOptions = _ref4.stylesOptions,\n      stylesCreator = _ref4.stylesCreator;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme);\n  sheetManager.refs -= 1;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    multiKeyStore.delete(stylesOptions.sheetsManager, stylesCreator, theme);\n    stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(sheetManager.staticSheet);\n    }\n  }\n\n  if (state.dynamicSheet) {\n    stylesOptions.jss.removeStyleSheet(state.dynamicSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(state.dynamicSheet);\n    }\n  }\n}\n\nfunction useSynchronousEffect(func, values) {\n  var key = React.useRef([]);\n  var output; // Store \"generation\" key. Just returns a new object every time\n\n  var currentKey = React.useMemo(function () {\n    return {};\n  }, values); // eslint-disable-line react-hooks/exhaustive-deps\n  // \"the first render\", or \"memo dropped the value\"\n\n  if (key.current !== currentKey) {\n    key.current = currentKey;\n    output = func();\n  }\n\n  React.useEffect(function () {\n    return function () {\n      if (output) {\n        output();\n      }\n    };\n  }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}\n\nfunction makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var name = options.name,\n      classNamePrefixOption = options.classNamePrefix,\n      Component = options.Component,\n      _options$defaultTheme = options.defaultTheme,\n      defaultTheme = _options$defaultTheme === void 0 ? noopTheme : _options$defaultTheme,\n      stylesOptions2 = _objectWithoutProperties(options, [\"name\", \"classNamePrefix\", \"Component\", \"defaultTheme\"]);\n\n  var stylesCreator = getStylesCreator(stylesOrCreator);\n  var classNamePrefix = name || classNamePrefixOption || 'makeStyles';\n  stylesCreator.options = {\n    index: increment(),\n    name: name,\n    meta: classNamePrefix,\n    classNamePrefix: classNamePrefix\n  };\n  return function () {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var theme = useTheme() || defaultTheme;\n\n    var stylesOptions = _extends({}, React.useContext(StylesContext), {}, stylesOptions2);\n\n    var instance = React.useRef();\n    var shouldUpdate = React.useRef();\n    useSynchronousEffect(function () {\n      var current = {\n        name: name,\n        state: {},\n        stylesCreator: stylesCreator,\n        stylesOptions: stylesOptions,\n        theme: theme\n      };\n      attach(current, props);\n      shouldUpdate.current = false;\n      instance.current = current;\n      return function () {\n        detach(current);\n      };\n    }, [theme, stylesCreator]);\n    React.useEffect(function () {\n      if (shouldUpdate.current) {\n        update(instance.current, props);\n      }\n\n      shouldUpdate.current = true;\n    });\n    return getClasses(instance.current, props.classes, Component);\n  };\n}\n\nexport default makeStyles;","import '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport '@babel/runtime/helpers/esm/extends';\nimport '@babel/runtime/helpers/esm/toConsumableArray';\nimport '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { CacheProvider } from '@emotion/core';\nimport 'react-dom';\nimport 'prop-types';\nimport '@babel/runtime/helpers/esm/typeof';\nimport 'raf';\nimport './chunk-e8ae4b0f.browser.esm.js';\nexport { y as components } from './chunk-5d200a41.browser.esm.js';\nimport { S as Select } from './base/dist/react-select-a34e9d12.browser.esm.js';\nexport { c as createFilter, a as defaultTheme, m as mergeStyles } from './base/dist/react-select-a34e9d12.browser.esm.js';\nimport '@emotion/css';\nimport '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport 'react-input-autosize';\nimport { m as manageState } from './chunk-b36baf1a.browser.esm.js';\nimport createCache from '@emotion/cache';\n\nvar NonceProvider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(NonceProvider, _Component);\n\n  function NonceProvider(props) {\n    var _this;\n\n    _classCallCheck(this, NonceProvider);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(NonceProvider).call(this, props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"createEmotionCache\", function (nonce) {\n      return createCache({\n        nonce: nonce\n      });\n    });\n\n    _this.createEmotionCache = memoizeOne(_this.createEmotionCache);\n    return _this;\n  }\n\n  _createClass(NonceProvider, [{\n    key: \"render\",\n    value: function render() {\n      var emotionCache = this.createEmotionCache(this.props.nonce);\n      return React.createElement(CacheProvider, {\n        value: emotionCache\n      }, this.props.children);\n    }\n  }]);\n\n  return NonceProvider;\n}(Component);\n\nvar index = manageState(Select);\n\nexport default index;\nexport { NonceProvider };\n","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nexport default {};\n\nexport enum LanguageActionTypes {\n  CHANGE_LOCALE = 'CHANGE_LOCALE',\n}\n\nexport class ChangeLocaleAction implements IAction {\n  public readonly type = LanguageActionTypes.CHANGE_LOCALE;\n\n  constructor(\n    public payload: string\n  ) {}\n}\n","import { safeLocalStorage } from '../../utils/safeStorage';\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'languages💾';\n// This runs at module evaluation. A bare localStorage read here threw a SecurityError before the\n// app could boot whenever the browser denied storage access; safeStorage falls back to 'en'.\nexport const DEFAULT_LOCALE = safeLocalStorage.getItem('languages💾') || 'en';\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"\n}), 'Error');\n\nexports.default = _default;","/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport React from 'react';\nexport default function useControlled(_ref) {\n  var controlled = _ref.controlled,\n      defaultProp = _ref.default,\n      name = _ref.name;\n\n  var _React$useRef = React.useRef(controlled !== undefined),\n      isControlled = _React$useRef.current;\n\n  var _React$useState = React.useState(defaultProp),\n      valueState = _React$useState[0],\n      setValue = _React$useState[1];\n\n  var value = isControlled ? controlled : valueState;\n\n  if (process.env.NODE_ENV !== 'production') {\n    React.useEffect(function () {\n      if (isControlled !== (controlled !== undefined)) {\n        console.error([\"Material-UI: A component is changing \".concat(isControlled ? 'a ' : 'an un', \"controlled \").concat(name, \" to be \").concat(isControlled ? 'un' : '', \"controlled.\"), 'Elements should not switch from uncontrolled to controlled (or vice versa).', \"Decide between using a controlled or uncontrolled \".concat(name, \" \") + 'element for the lifetime of the component.', 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [controlled]);\n\n    var _React$useRef2 = React.useRef(defaultProp),\n        defaultValue = _React$useRef2.current;\n\n    React.useEffect(function () {\n      if (defaultValue !== defaultProp) {\n        console.error([\"Material-UI: A component is changing the default value of an uncontrolled \".concat(name, \" after being initialized. \") + \"To suppress this warning opt to use a controlled \".concat(name, \".\")].join('\\n'));\n      }\n    }, [JSON.stringify(defaultProp)]);\n  }\n\n  var setValueIfUncontrolled = React.useCallback(function (newValue) {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n  return [value, setValueIfUncontrolled];\n}","import React from 'react';\nimport FormControlContext from './FormControlContext';\nexport default function useFormControl() {\n  return React.useContext(FormControlContext);\n}","/**\n * Safe chained function\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n *\n * @param {function} functions to chain\n * @returns {function|null}\n */\nexport default function createChainedFunction() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  return funcs.reduce(function (acc, func) {\n    if (func == null) {\n      return acc;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof func !== 'function') {\n        console.error('Material-UI: invalid Argument Type, must only provide functions, undefined, or null.');\n      }\n    }\n\n    return function chainedFunction() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, function () {});\n}","import React from 'react';\nimport {\n  Grid,\n  Typography,\n  Tooltip\n} from '@material-ui/core';\n\ninterface ICountryFlagProps {\n  src: string;\n  alt: string;\n  width?: number;\n  countryName?: string;\n  tooltip?: string;\n}\n\nconst CountryFlag: React.FC<ICountryFlagProps> = ({\n  src,\n  countryName,\n  alt,\n  width = 26,\n  tooltip,\n}) => {\n\n  return (\n    <Tooltip title={tooltip || ''}>\n      <Grid\n        container={true}\n        direction='row'\n        alignItems='center'\n        style={{width: 'auto'}}\n      >\n        <img src={src} style={{ width }} alt={alt} />\n        { countryName && <Typography>{countryName}</Typography> }\n      </Grid>\n    </Tooltip>\n  );\n};\n\nexport default CountryFlag;\n","import { createElement, createContext as createContextOrig, useContext as useContextOrig, useEffect, useLayoutEffect, useReducer, useRef, useState, } from 'react';\nimport { unstable_NormalPriority as NormalPriority, unstable_runWithPriority as runWithPriority, } from 'scheduler';\nconst CONTEXT_VALUE = Symbol();\nconst ORIGINAL_PROVIDER = Symbol();\nconst isSSR = typeof window === 'undefined' ||\n    /ServerSideRendering/.test(window.navigator && window.navigator.userAgent);\nconst useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;\n// for preact that doesn't have runWithPriority\nconst runWithNormalPriority = runWithPriority\n    ? (fn) => {\n        try {\n            runWithPriority(NormalPriority, fn);\n        }\n        catch (e) {\n            if (e.message === 'Not implemented.') {\n                fn();\n            }\n            else {\n                throw e;\n            }\n        }\n    }\n    : (fn) => fn();\nconst createProvider = (ProviderOrig) => {\n    const ContextProvider = ({ value, children, }) => {\n        const valueRef = useRef(value);\n        const versionRef = useRef(0);\n        const [resolve, setResolve] = useState(null);\n        if (resolve) {\n            resolve(value);\n            setResolve(null);\n        }\n        const contextValue = useRef();\n        if (!contextValue.current) {\n            const listeners = new Set();\n            const update = (fn, options) => {\n                versionRef.current += 1;\n                const action = {\n                    n: versionRef.current,\n                };\n                if (options === null || options === void 0 ? void 0 : options.suspense) {\n                    action.n *= -1; // this is intentional to make it temporary version\n                    action.p = new Promise((r) => {\n                        setResolve(() => (v) => {\n                            action.v = v;\n                            delete action.p;\n                            r(v);\n                        });\n                    });\n                }\n                listeners.forEach((listener) => listener(action));\n                fn();\n            };\n            contextValue.current = {\n                [CONTEXT_VALUE]: {\n                    /* \"v\"alue     */ v: valueRef,\n                    /* versio\"n\"   */ n: versionRef,\n                    /* \"l\"isteners */ l: listeners,\n                    /* \"u\"pdate    */ u: update,\n                },\n            };\n        }\n        useIsomorphicLayoutEffect(() => {\n            valueRef.current = value;\n            versionRef.current += 1;\n            runWithNormalPriority(() => {\n                contextValue.current[CONTEXT_VALUE].l.forEach((listener) => {\n                    listener({ n: versionRef.current, v: value });\n                });\n            });\n        }, [value]);\n        return createElement(ProviderOrig, { value: contextValue.current }, children);\n    };\n    return ContextProvider;\n};\nconst identity = (x) => x;\n/**\n * This creates a special context for `useContextSelector`.\n *\n * @example\n * import { createContext } from 'use-context-selector';\n *\n * const PersonContext = createContext({ firstName: '', familyName: '' });\n */\nexport function createContext(defaultValue) {\n    const context = createContextOrig({\n        [CONTEXT_VALUE]: {\n            /* \"v\"alue     */ v: { current: defaultValue },\n            /* versio\"n\"   */ n: { current: -1 },\n            /* \"l\"isteners */ l: new Set(),\n            /* \"u\"pdate    */ u: (f) => f(),\n        },\n    });\n    context[ORIGINAL_PROVIDER] = context.Provider;\n    context.Provider = createProvider(context.Provider);\n    delete context.Consumer; // no support for Consumer\n    return context;\n}\n/**\n * This hook returns context selected value by selector.\n *\n * It will only accept context created by `createContext`.\n * It will trigger re-render if only the selected value is referentially changed.\n *\n * The selector should return referentially equal result for same input for better performance.\n *\n * @example\n * import { useContextSelector } from 'use-context-selector';\n *\n * const firstName = useContextSelector(PersonContext, (state) => state.firstName);\n */\nexport function useContextSelector(context, selector) {\n    const contextValue = useContextOrig(context)[CONTEXT_VALUE];\n    if (typeof process === 'object' && process.env.NODE_ENV !== 'production') {\n        if (!contextValue) {\n            throw new Error('useContextSelector requires special context');\n        }\n    }\n    const { \n    /* \"v\"alue     */ v: { current: value }, \n    /* versio\"n\"   */ n: { current: version }, \n    /* \"l\"isteners */ l: listeners, } = contextValue;\n    const selected = selector(value);\n    const [state, dispatch] = useReducer((prev, action) => {\n        if (!action) {\n            // case for `dispatch()` below\n            return [value, selected];\n        }\n        if ('p' in action) {\n            throw action.p;\n        }\n        if (action.n === version) {\n            if (Object.is(prev[1], selected)) {\n                return prev; // bail out\n            }\n            return [value, selected];\n        }\n        try {\n            if ('v' in action) {\n                if (Object.is(prev[0], action.v)) {\n                    return prev; // do not update\n                }\n                const nextSelected = selector(action.v);\n                if (Object.is(prev[1], nextSelected)) {\n                    return prev; // do not update\n                }\n                return [action.v, nextSelected];\n            }\n        }\n        catch (_e) {\n            // ignored (stale props or some other reason)\n        }\n        return [...prev]; // schedule update\n    }, [value, selected]);\n    if (!Object.is(state[1], selected)) {\n        // schedule re-render\n        // this is safe because it's self contained\n        dispatch();\n    }\n    useIsomorphicLayoutEffect(() => {\n        listeners.add(dispatch);\n        return () => {\n            listeners.delete(dispatch);\n        };\n    }, [listeners]);\n    return state[1];\n}\n/**\n * This hook returns the entire context value.\n * Use this instead of React.useContext for consistent behavior.\n *\n * @example\n * import { useContext } from 'use-context-selector';\n *\n * const person = useContext(PersonContext);\n */\nexport function useContext(context) {\n    return useContextSelector(context, identity);\n}\n/**\n * This hook returns an update function to wrap an updating function\n *\n * Use this for a function that will change a value in\n * concurrent rendering in React 18.\n * Otherwise, there's no need to use this hook.\n *\n * @example\n * import { useContextUpdate } from 'use-context-selector';\n *\n * const update = useContextUpdate();\n *\n * // Wrap set state function\n * update(() => setState(...));\n *\n * // Experimental suspense mode\n * update(() => setState(...), { suspense: true });\n */\nexport function useContextUpdate(context) {\n    const contextValue = useContextOrig(context)[CONTEXT_VALUE];\n    if (typeof process === 'object' && process.env.NODE_ENV !== 'production') {\n        if (!contextValue) {\n            throw new Error('useContextUpdate requires special context');\n        }\n    }\n    const { u: update } = contextValue;\n    return update;\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * This is a Provider component for bridging multiple react roots\n *\n * @example\n * const valueToBridge = useBridgeValue(PersonContext);\n * return (\n *   <Renderer>\n *     <BridgeProvider context={PersonContext} value={valueToBridge}>\n *       {children}\n *     </BridgeProvider>\n *   </Renderer>\n * );\n */\nexport const BridgeProvider = ({ context, value, children, }) => {\n    const { [ORIGINAL_PROVIDER]: ProviderOrig } = context;\n    if (typeof process === 'object' && process.env.NODE_ENV !== 'production') {\n        if (!ProviderOrig) {\n            throw new Error('BridgeProvider requires special context');\n        }\n    }\n    return createElement(ProviderOrig, { value }, children);\n};\n/**\n * This hook return a value for BridgeProvider\n */\nexport const useBridgeValue = (context) => {\n    const bridgeValue = useContextOrig(context);\n    if (typeof process === 'object' && process.env.NODE_ENV !== 'production') {\n        if (!bridgeValue[CONTEXT_VALUE]) {\n            throw new Error('useBridgeValue requires special context');\n        }\n    }\n    return bridgeValue;\n};\n","import { Button, Dialog, Grid, IconButton, Link, MenuItem, Select, Tooltip, Typography, WithStyles, withStyles, Theme, CircularProgress } from '@material-ui/core';\nimport { StyleRules, WithTheme } from '@material-ui/core/styles';\nimport * as React from 'react';\nimport { Attribute, Product, Series } from '../../../../models';\nimport { IAction, IMap, utcToLocal } from 'ats-utils/src';\nimport { List, Map, OrderedMap, fromJS, getIn } from 'immutable';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../../components/FieldDropzone';\nimport { acceptedMainImageExtensions, mainImageUploadValidation } from '../../../SeriesEditPage/SeriesInfo';\nimport { AttachFile, AttachMoney, Check, Delete, Edit, Info, Texture } from '@material-ui/icons';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { InjectedFormProps, BaseFieldProps, change } from 'redux-form';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport {\n  compose,\n} from 'redux';\nimport { withAtsApi } from '../../../../contexts';\nimport { WithAtsApi } from '../../../../contexts/AtsApiContext';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { FieldDropzoneStateResetAction, NoPhotoPreviewAction } from '../../../../modules/ApplicationModule/actions';\nimport { FieldSwitch, Image } from '../../../../components';\nimport Xhr from '../../../../utils/Xhr';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../../components/FieldTextField';\nimport { isEmptyOrContent, isNotEmptyStringRequired, maxStringLength } from '../../../../validators';\nimport CurrencySelector from '../../../../components/CurrencySelector';\nimport canFlag from '../../../../images/productSelectionPage/canFlag.png';\nimport usFlag from '../../../../images/productSelectionPage/usFlag.png';\nimport { IFieldSwitchComponentProps } from '../../../../components/FieldSwitch';\nimport { makeSelectCanManagePimPricing } from '../../../../modules/AtsModule/selectors';\nimport FileLocalizationSelector, { mediaLocaleOptions } from '../../../../components/FileLocalizationSelector';\nimport Language from '../../../../models/Language';\nimport { IMediaKey, fullMediaKeys, linkKeys, designMediaKeys, allMediaKeys } from '../../../SeriesEditPage/Attachments';\nimport MediaUpload from '../../../../components/PimProductDrawer/PimProductDrawerEdit/MediaUpload';\nimport { AMPLITUDE_EVENT, IS_PRODUCTION } from '../../../../constants';\nimport ProductNumberDialog from '../../../../components/PimProductDrawer/PimProductDrawerEdit/ProductNumberDialog';\nimport { GetSeriesDuplicateProductsByIdAction, MergeProductsAction, SetPrimaryMergeProductAction } from '../../../../modules/PimModule/actions';\nimport { makeSelectIsMergingProducts, makeSelectPrimaryMergeProduct } from '../../../../modules/PimModule/selectors';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport CloseIcon from '@material-ui/icons/Close';\nimport BeenhereIcon from '@material-ui/icons/Beenhere';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport ConfirmDuplicateValuesDialog from './ConfirmDuplicateValuesDialog';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../../hoc/withAmplitudeData';\nimport LinkItem from '../../../../components/PimProductDrawer/PimProductDrawerEdit/LinkItem';\nimport FullMediaUpload from '../../../../components/PimProductDrawer/PimProductDrawerEdit/FullMediaUpload';\n\nexport const MERGE_DUPLICATE_FORM = 'MergeDuplicateForm';\n\nconst IMG_SIZE = 160;\n\nconst INFO_COLUMN_WIDTH = '35%';\nconst LABEL_COLUMN_WIDTH = '25%';\nconst ICON_COLUMN_WIDTH = '40px';\nconst ARROW_COLUMN_WIDTH = '5%';\n\nenum CONFIRMATION_STEP {\n  discard = -1,\n  initial = 0,\n  confirm = 1\n}\n\ninterface IMergeProductsDialogComponentProps {\n  series: IMap<Series>;\n  initialPrimaryIndex: number;\n  setPrimaryIndex: (index: number) => void;\n  products: List<IMap<Product>>;\n  setSelectedProducts: (selectedProducts) => void;\n  open: boolean;\n  onClose: () => void;\n}\n\ninterface IMergeProductsDialogProps extends IMergeProductsDialogComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  canManagePimPricing: boolean;\n  isMergingProducts: boolean;\n}\n\ninterface IMergeProductsDialogState {\n  selectedProductIndex: number;\n  selectedCurrency: 'USD' | 'CAD';\n  selectedLanguage: Language;\n  imageId: string;\n  isFetchingProductNumber: boolean;\n  cleanProductNumber: string;\n  haveInformed: boolean;\n  isProductNumberDialogOpen: boolean;\n  confirmationStep: CONFIRMATION_STEP;\n  initialValues: Map<string, any>;\n  isConfirmDuplicateValuesDialogOpen: boolean;\n  currentPrimaryIndex: number;\n  selectingPrimaryIndex: number;\n}\n\ntype MergeProductsDialogType = IMergeProductsDialogProps & WithAtsApi & WithTranslation & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAmplitudeData;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    maxWidth: '100%',\n    overflow: 'hidden'\n  },\n  contentContainer: {\n    width: 905,\n    maxHeight: '90vh',\n    overflowY: 'auto',\n    padding: theme.spacing(2)\n  },\n  imageContainer: {\n    display: 'flex',\n    width: IMG_SIZE,\n    height: IMG_SIZE,\n    position: 'relative'\n  },\n  iconColumn: {\n    width: ICON_COLUMN_WIDTH\n  },\n  labelColumn: {\n    width: LABEL_COLUMN_WIDTH,\n    paddingRight: theme.spacing()\n  },\n  infoColumn: {\n    width: INFO_COLUMN_WIDTH,\n    padding: theme.spacing(0, 2)\n  },\n  sectionRow: {\n    marginTop: theme.spacing(2),\n    marginBottom: theme.spacing()\n  },\n  countryFlag: {\n    width: 26,\n  },\n  attributeDescription: {\n    marginLeft: theme.spacing(2),\n    position: 'relative',\n    '&:before': {\n      position: 'absolute',\n      content: '\"•\"',\n      left: theme.spacing(-1)\n    }\n  },\n  bold: {\n    fontWeight: 'bold'\n  },\n  link: {\n    cursor: 'pointer',\n    fontSize: theme.typography.caption.fontSize,\n    wordBreak: 'break-all',\n  },\n  cta: {\n    position: 'sticky',\n    bottom: 0,\n    background: theme.palette.common.white,\n    padding: theme.spacing(1, 2)\n  },\n  loadingContainer: {\n    padding: theme.spacing(2),\n  },\n  arrowColumn: {\n    width: ARROW_COLUMN_WIDTH\n  }\n});\n\nconst INITIAL_STATE = {\n  selectedProductIndex: 0,\n  selectedCurrency: 'CAD' as 'USD' | 'CAD',\n  selectedLanguage: 'en' as Language,\n  imageId: '',\n  isFetchingProductNumber: false,\n  cleanProductNumber: '',\n  haveInformed: false,\n  isProductNumberDialogOpen: false,\n  confirmationStep: CONFIRMATION_STEP.initial,\n  initialValues: Map() as Map<string, any>,\n  isConfirmDuplicateValuesDialogOpen: false,\n  currentPrimaryIndex: 0,\n  selectingPrimaryIndex: -1\n};\n\nclass MergeProductsDialog extends React.Component<MergeProductsDialogType, IMergeProductsDialogState> {\n  public refProductNumber: React.RefObject<HTMLInputElement> = React.createRef();\n\n  constructor(props: MergeProductsDialogType) {\n    super(props);\n    this.state = INITIAL_STATE;\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      series,\n      products,\n      atsApi,\n      initialPrimaryIndex,\n      open,\n    } = this.props;\n\n    if (open && !prevProps.open) {\n      this.setState({ selectedProductIndex: initialPrimaryIndex, currentPrimaryIndex: initialPrimaryIndex });\n      this.handleCopyFromDuplicate(initialPrimaryIndex);\n    }\n    if (!open && prevProps.open) {\n      this.setState(INITIAL_STATE);\n    }\n\n    const isAdvanceConfig = products.getIn([this.state.selectedProductIndex, 'isConfigurator']);\n    if (open && !prevProps.open && isAdvanceConfig) {\n      const seriesId = products.getIn([0, 'series']);\n      const productAttributes = products.getIn([0, 'attributes']).filter((attribute) => attribute.get('status') !== 'deleted');\n\n      const selectedAttributes = productAttributes.reduce((acc, option, descriptionKey) => {\n        const attributeKey = option.get('attributeKey');\n        if (option.get('status') !== 'deleted' && series.get('attributes').has(attributeKey)) {\n          if (acc.has(attributeKey)) {\n            return acc.setIn([attributeKey, 'values'], acc.getIn([attributeKey, 'values']).push(option.set('id', option.get('optionId'))));\n          } else {\n            return acc.set(attributeKey, series.getIn(['attributes', attributeKey]).delete('values').set('values', List([option.set('id', option.get('optionId'))])));\n          }\n        }\n        return acc;\n      }, Map());\n\n      this.setState({ isFetchingProductNumber: true });\n      (atsApi.callApi({\n        service: 'pim',\n        endpoint: 'createProducts',\n        suppressErrors: IS_PRODUCTION,\n        withToken: true,\n        withAppId: true,\n        queries: {\n          create: false\n        },\n        body: {\n          seriesId,\n          attributes: selectedAttributes\n        }\n      }) as Promise<any>).then((response) => {\n        const productNumber = response?.payload?.pim?.product[0]?.productNumber;\n        // if (productNumber) {\n        //   dispatch(change(MERGE_DUPLICATE_FORM, 'productNumber', productNumber));\n        // }\n        this.setState({ cleanProductNumber: productNumber });\n      }).catch((err) => {\n        console.error('createProducts error', { err }); // tslint:disable-line\n      }).finally(() => {\n        this.setState({ isFetchingProductNumber: false });\n      });\n    }\n  }\n\n  public removePhoto = (): void => {\n    const { dispatch } = this.props;\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(MERGE_DUPLICATE_FORM, 'file.images.main.fileId', ''));\n    dispatch(change(MERGE_DUPLICATE_FORM, 'dropzone', ''));\n    this.setState({ imageId: '' });\n  }\n\n  public handleChangeReference = (e) => {\n    this.setState({ selectedProductIndex: e.target.value });\n  }\n\n  public generateFileLink = (mediaType: string, fileId: string) => {\n    const service = mediaType.includes('image') ? 'image' : 'file';\n    const endpoint = mediaType.includes('image') ? 'getImageFile' : 'getFile';\n    return this.props.atsApi.callApi(\n      fileId,\n      { service, endpoint, urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: {download: false} }\n    ) as string;\n  }\n\n  public handleClearLink = (value: string, fileType: string) => {\n    const {\n      dispatch,\n      formValues,\n    } = this.props;\n    const {\n      selectedLanguage,\n    } = this.state;\n\n    if (!value) {\n      if (formValues.getIn(['file', 'media', selectedLanguage, fileType, 'fileId'])) {\n        const newFormValues = formValues.setIn(['file', 'media', selectedLanguage, fileType, 'url'], '');\n        dispatch(change(MERGE_DUPLICATE_FORM, `file.media.${selectedLanguage}`, newFormValues.getIn(['file', 'media', selectedLanguage])));\n\n        // if a 'en' file is being removed, then need to remove it from the media.key level,\n        // until BE/FE fully transitions the media object to only have localization level this will remain the case\n        if (selectedLanguage === 'en') {\n          dispatch(change(MERGE_DUPLICATE_FORM, `file.media`, newFormValues.setIn(['file', 'media', fileType, 'url'], '').getIn(['file', 'media'])));\n        }\n      } else {\n        const newFormValues = formValues.deleteIn(['file', 'media', selectedLanguage, fileType]);\n        dispatch(change(MERGE_DUPLICATE_FORM, `file.media.${selectedLanguage}`, newFormValues.getIn(['file', 'media', selectedLanguage])));\n\n        // if a 'en' file is being removed, then need to remove it from the media.key level,\n        // until BE/FE fully transitions the media object to only have localization level this will remain the case\n        if (selectedLanguage === 'en') {\n          dispatch(change(MERGE_DUPLICATE_FORM, `file.media`, newFormValues.deleteIn(['file', 'media', fileType]).getIn(['file', 'media'])));\n        }\n      }\n    }\n  }\n\n  public handleCopyFromDuplicate = (index?: number) => {\n    const {\n      dispatch,\n      products,\n    } = this.props;\n\n    const selectedProduct = products.get(index ?? this.state.selectedProductIndex);\n    dispatch(new SetPrimaryMergeProductAction({\n      product: fromJS({\n        attributes: selectedProduct.get('attributes'),\n        productNumber: selectedProduct.get('productNumber'),\n        customProductNumber: selectedProduct.get('customProductNumber'),\n        itemNumber: selectedProduct.get('itemNumber'),\n        upc: selectedProduct.get('upc'),\n        sku: selectedProduct.get('sku'),\n        description: selectedProduct.get('description'),\n        price: selectedProduct.get('price'),\n        file: selectedProduct.get('file'),\n        REINITIALIZE_DATE: new Date(),\n      })\n    }));\n    this.removePhoto();\n    this.setState({\n      imageId: selectedProduct.getIn(['file', 'images', 'main', 'fileId']),\n    });\n  }\n\n  public onSubmit = async (values) => {\n    const {\n      dispatch,\n      onClose,\n      atsApi,\n      series,\n      products,\n      amplitudeData\n    } = this.props;\n    const {\n      imageId,\n      selectedProductIndex,\n      currentPrimaryIndex\n    } = this.state;\n    const imageArray = await Xhr({ atsApi, files: values.get('dropzone') });\n    const imageFileId = getIn(imageArray, [0, 'id'], '') || imageId;\n\n    const submitValues = values.withMutations((ctx) => {\n      // ctx.set('attributes', products.getIn([selectedProductIndex, 'attributes']));\n      ctx.delete('attributes');\n\n      if (imageFileId) {\n        ctx.setIn(['file', 'images', 'main', 'fileId'], imageFileId);\n        ctx.delete('dropzone');\n        dispatch(new FieldDropzoneStateResetAction());\n      } else {\n        if (ctx.getIn(['file', 'images', 'main'])) {\n          ctx.deleteIn(['file', 'images', 'main']);\n        }\n      }\n\n      const generalEnManufacturerCutsheetUrl = ctx.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', 'url']);\n      if (generalEnManufacturerCutsheetUrl) {\n        ctx.setIn(['file', 'media', 'manufacturer_cutsheet', 'url'], generalEnManufacturerCutsheetUrl);\n      }\n\n      // BE does not accept empty media object so need to remove that;\n      if (ctx.getIn(['file', 'media', 'en'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'en']);\n      }\n      if (ctx.getIn(['file', 'media', 'fr'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'fr']);\n      }\n      if (ctx.getIn(['file', 'media', 'en-us'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'en-us']);\n      }\n      if (ctx.getIn(['file', 'media', 'en-ca'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'en-ca']);\n      }\n      if (ctx.getIn(['file', 'media', 'fr.ca'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'fr.ca']);\n      }\n      if (ctx.getIn(['file', 'media'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media']);\n      }\n\n      if (ctx.get('itemNumber') === '') {\n        ctx.set('itemNumber', null);\n      }\n\n      if (ctx.get('upc') === '') {\n        ctx.set('upc', null);\n      }\n\n      if (ctx.get('sku') === '') {\n        ctx.set('sku', null);\n      }\n\n      const rawPrice = ctx.get('price');\n      const price = rawPrice && rawPrice.withMutations(region => {\n        region.forEach((regionCurrency, index) => {\n          regionCurrency.forEach((priceObj, _index) => {\n            priceObj.forEach((actualPrice, priceIndex) => {\n              if (actualPrice === '') {\n                return region.setIn([index, _index, priceIndex], null);\n              }\n            });\n          });\n        });\n      });\n      if (price) {\n        ctx.set('price', price);\n      }\n\n      // ctx.set('unavailability', series.get('unavailability'));\n      ctx.delete('REINITIALIZE_DATE');\n    });\n\n    const primaryProductId = products.getIn([currentPrimaryIndex, 'id']);\n\n    // trigger action for merge\n    dispatch(new MergeProductsAction({\n      productId: primaryProductId,\n      duplicateProductIds: products.reduce((acc, product, index) => primaryProductId === product.get('id') ? acc : acc.push(product.get('id')), List()),\n      productInfo: submitValues.toJS(),\n      onSuccess: () => {\n        // Amplitude\n        amplitude.logEvent(AMPLITUDE_EVENT.productMerged, amplitudeData({\n          seriesName: series.get('name'),\n          manufacturerName: series.get('brand'),\n          categoryName: series.get('categoryName'),\n          numberOfProductsMerged: products.size,\n          AffectedProductNumbers: products.map(product => product.get('productNumber')).join(', '),\n          AffectedProductIds: products.map(product => product.get('id')).join(', ')\n        }));\n        dispatch(new GetSeriesDuplicateProductsByIdAction({\n          seriesId: series.get('id'),\n        }));\n        onClose();\n      }\n    }));\n  }\n\n  public _maxStringLength = (value) => maxStringLength(32)(value);\n\n  public SelectedOptions = (productAttributes: IMap<any>) => {\n    const {\n      classes,\n      theme,\n      series,\n      t,\n    } = this.props;\n\n    let optionIdsMap: OrderedMap<number, IMap<any>> = series\n      ?.get('attributes')\n      .reduce((acc, attribute: IMap<Attribute>) => attribute.get('isAttribute')\n        ? acc\n        : acc.set(attribute.get('id'), Map({ name: attribute.get('name'), useSwatch: attribute.get('useSwatch'), values: List() }))\n      , OrderedMap());\n\n    if (!optionIdsMap.isEmpty()) {\n      productAttributes\n        ?.valueSeq()\n        .forEach(attribute => {\n          const id = Number(attribute.get('id'));\n          if (optionIdsMap.has(id)) {\n            optionIdsMap = optionIdsMap.setIn([id, 'values'], optionIdsMap.getIn([id, 'values']).push({\n              description: attribute.get('description'),\n              status: attribute.get('status'),\n              swatch: attribute.get('swatch')\n            }));\n          }\n        });\n    }\n\n    const selectedOptionValues = optionIdsMap.valueSeq().filter(option => option.get('values').count());\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        spacing={1}\n      >\n        {\n          selectedOptionValues.isEmpty()\n            ? <Typography variant='caption' color='inherit'>\n                {t('pimProductDrawer.noOptionsSelected')}\n              </Typography>\n            : selectedOptionValues.map((option: any, index: number) => {\n                const allValuesNotActive = option.get('values').filter(value => value.status === 'active').size === 0;\n                return (\n                  <Grid item={true} key={index}>\n                    <Typography variant='caption' color='textPrimary' display='block' className={classes.bold} style={allValuesNotActive ? {color: theme.palette.grey[500], textDecorationLine: 'line-through', textTransform: 'capitalize'} : { textTransform: 'capitalize' }}>\n                      {option.get('name')}:\n                    </Typography>\n                    {\n                      option.get('values').map((value, valueIndex) => {\n                        const description = value.description;\n                        const useSwatch = option.get('useSwatch');\n                        const swatchId = value.swatch;\n                        return (\n                          <div key={valueIndex}>\n                            <Tooltip\n                              title={ value.status === 'discontinued' || (useSwatch && !swatchId)\n                                ? <Grid>\n                                    <Typography color='inherit' variant='body2'>{description}</Typography>\n                                    {useSwatch && !swatchId && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.swatchNotAvailable')}</Typography>}\n                                    {value.status === 'discontinued' && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.optionDiscontinued')}</Typography>}\n                                  </Grid> : ''\n                            }>\n                              <div>\n                              {useSwatch &&\n                                  <Grid style={{border: `3px solid ${theme.palette.grey[600]}`, width: 136, height: 136, position: 'relative'}}>\n                                  {swatchId\n                                    ? <Image\n                                        src={swatchId || ''}\n                                        aspectRatio={'100%'}\n                                        fromService={true}\n                                        cover={true}\n                                      />\n                                    : <Texture style={{fontSize: 170, position: 'absolute', top: -20, left: -20, color: theme.palette.grey[500]}}/>\n                                  }\n                                  </Grid>\n                              }\n                              <Typography\n                                key={valueIndex}\n                                variant='caption'\n                                color='textPrimary'\n                                display='block'\n                                className={classes.attributeDescription}\n                                style={value.status === 'discontinued' ? {color: theme.palette.grey[500], textDecorationLine: 'line-through'} : null}\n                              >\n                                {description}\n                              </Typography>\n                              </div>\n                            </Tooltip>\n                          </div>);\n                      })\n                    }\n                  </Grid>\n                );\n              })\n        }\n      </Grid>\n    );\n  }\n\n  public CTA = () => {\n    const {\n      t,\n      onClose,\n      classes,\n    } = this.props;\n    const {\n      confirmationStep\n    } = this.state;\n\n    switch (confirmationStep) {\n      case CONFIRMATION_STEP.initial: {\n        return (\n          <div className={classes.cta}>\n            <Button\n              onClick={() => this.setState({ confirmationStep: CONFIRMATION_STEP.discard })}\n              color='primary'\n              style={{ marginRight: 24 }}\n            >\n              { t('formButtons.cancel') }\n            </Button>\n            <Button\n              onClick={() => this.setState({ confirmationStep: CONFIRMATION_STEP.confirm })}\n              color='primary'\n            >\n              {t('MergeDuplicatesDialog.saveAndMerge')}\n            </Button>\n          </div>\n        );\n      }\n      case CONFIRMATION_STEP.discard: {\n        return (\n          <div className={classes.cta}>\n            <Typography display='block' style={{ marginLeft: 8 }}>\n              {t('MergeDuplicatesDialog.discardUnsaved')}\n            </Typography>\n            <Button\n              onClick={() => {\n                this.setState({ confirmationStep: CONFIRMATION_STEP.initial });\n              }}\n              color='primary'\n              style={{ marginRight: 24 }}\n            >\n              { t('formButtons.cancel') }\n            </Button>\n            <Button\n              onClick={onClose}\n              color='primary'\n            >\n              { t('formButtons.discard') }\n            </Button>\n          </div>\n        );\n      }\n      case CONFIRMATION_STEP.confirm: {\n        return (\n          <div className={classes.cta}>\n            <Typography display='block' style={{ marginLeft: 8 }}>\n              {t('MergeDuplicatesDialog.confirmQuestion')}\n            </Typography>\n            <Button\n              onClick={() => {\n                this.setState({ confirmationStep: CONFIRMATION_STEP.initial });\n              }}\n              color='primary'\n              style={{ marginRight: 24 }}\n            >\n              { t('formButtons.cancel') }\n            </Button>\n            <Button\n              color='primary'\n              type='submit'\n            >\n              {t('MergeDuplicatesDialog.merge')}\n            </Button>\n          </div>\n        );\n      }\n    }\n  }\n\n  public copyMediaLinksCleanUp = (cleanupPath: string[], key: string) => {\n    const { dispatch, formValues } = this.props;\n    if (formValues?.getIn(cleanupPath)?.get(key) !== undefined) {\n      dispatch(change(MERGE_DUPLICATE_FORM, cleanupPath.join('.'), formValues.getIn(cleanupPath).delete(key)));\n    }\n  }\n\n  public copyRowButton = (formFieldPath: string, productKeyPath: any[], cleanupFn = null) => {\n    const {classes, products, dispatch, t} = this.props;\n    const {selectedProductIndex} = this.state;\n    const isPoaField = formFieldPath.includes('isPoa');\n    const copiedValue = products.getIn([selectedProductIndex, ...productKeyPath]);\n    const poaValue = isPoaField && products.getIn([selectedProductIndex, ...productKeyPath]) ? true : false;\n    return (\n      <Grid container={true} alignItems='center' className={classes.arrowColumn}>\n        <Tooltip title={!copiedValue && !isPoaField ? '' : t('MergeDuplicatesDialog.applyAttributeValue')}>\n          <div>\n            <IconButton\n              style={{alignSelf: 'center'}}\n              disabled={!copiedValue && !isPoaField}\n              onClick={() => {\n                // for image\n                if (formFieldPath === 'file.images.main') {\n                  this.removePhoto();\n                  this.setState({\n                    imageId: products.getIn([selectedProductIndex, 'file', 'images', 'main', 'fileId']),\n                  });\n                }\n                // copy to form\n                if (isPoaField) {\n                  dispatch(change(MERGE_DUPLICATE_FORM, formFieldPath, poaValue));\n                } else {\n                  dispatch(change(MERGE_DUPLICATE_FORM, formFieldPath, copiedValue));\n                }\n\n                if (cleanupFn) {\n                  cleanupFn();\n                }\n              }}\n              >\n              <ArrowBackIcon color='inherit' />\n            </IconButton>\n          </div>\n        </Tooltip>\n      </Grid>\n    );\n  }\n\n  public closeConfirmDuplicateValuesDialog = () => {\n    this.setState({\n      isConfirmDuplicateValuesDialogOpen: false,\n      selectingPrimaryIndex: -1,\n    });\n  }\n\n  public rowWarningicondisplay = (productKeyPath: any[], style?: object) => {\n    const {formValues, products, theme, classes, t} = this.props;\n    const {selectedProductIndex} = this.state;\n    // check if left and right column are empty\n    const bothColumnsEmpty = !formValues?.getIn(productKeyPath) && !products.getIn([selectedProductIndex, ...productKeyPath]);\n    if (!bothColumnsEmpty) {\n      return <Grid className={classes.iconColumn}/>;\n    }\n    // then check if there's value in other products in the group\n    const valueExistInOtherProducts = products.find((product) => product.getIn(productKeyPath));\n    return <Grid container={true} alignItems='center' className={classes.iconColumn} style={style ? style : {}}>\n      {valueExistInOtherProducts &&\n        <Tooltip title={t('MergeDuplicatesDialog.attributeExistsOnDuplicates')}>\n          <WarningIcon fontSize='small' style={{color: theme.palette.warning.main, marginLeft: theme.spacing(2)}}/>\n        </Tooltip>\n      }\n    </Grid>;\n  }\n\n  public displayAttachmentWarningForOtherLanguages = () => {\n    const {formValues, products} = this.props;\n    const {selectedLanguage, selectedProductIndex} = this.state;\n    const allAvailbleLanguages = mediaLocaleOptions.map((locale) => locale.value);\n    const otherLanguages = allAvailbleLanguages.filter((language) => language !== selectedLanguage);\n    // check if any attachments in other language\n    const findWarningForAttachedFile = otherLanguages.filter((language) => {\n      return Boolean(allMediaKeys.find((mediaKey: IMediaKey, index: number) => {\n        const formValuesContainMediaFiles = formValues?.getIn(['file', 'media', language, mediaKey.key, 'fileId']);\n        const duplicatesContainMediaFiles = products.filter((product) => product.getIn(['file', 'media', language, mediaKey.key, 'fileId'])).size > 0;\n        return formValuesContainMediaFiles || duplicatesContainMediaFiles;\n      }));\n    });\n    const findWarningForCutSheetUrl = otherLanguages.filter((language) => {\n      return formValues?.getIn(['file', 'media', language, 'manufacturer_cutsheet', 'url']) || products.filter((product) => product.getIn(['file', 'media', language, 'manufacturer_cutsheet', 'url'])).size > 0;\n    });\n    const findWarningForVdoUrl = otherLanguages.filter((language) => {\n      return formValues?.getIn(['file', 'media', language, 'marketing_video', 'url']) || products.filter((product) => product.getIn(['file', 'media', language, 'marketing_video', 'url'])).size > 0;\n    });\n    return [...new Set([...findWarningForAttachedFile, ...findWarningForCutSheetUrl, ...findWarningForVdoUrl])];\n  }\n\n  // Renders one media/design attachment row in the merge table. The media and design sections\n  // share the same row; design keys simply have no `fullUpload`. A row with no file shows N/A\n  // (or \"Available\" for asset bundles).\n  public renderMergeMediaRow = (mediaKey: IMediaKey, index: number, sectionLabel: string) => {\n    const { classes, products, t } = this.props;\n    const { selectedProductIndex, selectedLanguage } = this.state;\n    const mediaPath = ['file', 'media', selectedLanguage, mediaKey.key];\n    const fileId = products.getIn([selectedProductIndex, ...mediaPath, 'fileId']);\n    const fileName = products.getIn([selectedProductIndex, ...mediaPath, 'filename']);\n    const url = products.getIn([selectedProductIndex, ...mediaPath, 'url']);\n    const assetBundle = products.getIn([selectedProductIndex, ...mediaPath, 'assetBundle']);\n    const mediaType = products.getIn([selectedProductIndex, ...mediaPath, 'mimeType']);\n    const fullUpload = mediaKey.fullUpload;\n    return (\n      <Grid key={index} container={true} alignItems='center' style={{ marginBottom: 16 }}>\n        <Grid container={true} item={true} className={classes.labelColumn} style={{ paddingLeft: ICON_COLUMN_WIDTH, position: 'relative' }}>\n          {\n            index === 0 && <Typography variant='body2' color='textPrimary'>{t(sectionLabel)}</Typography>\n          }\n          {this.rowWarningicondisplay([...mediaPath, 'fileId'], {position: 'absolute', left: '85%'})}\n        </Grid>\n        <Grid item={true} className={classes.infoColumn}>\n          {\n            fullUpload\n              ? <FullMediaUpload formName={MERGE_DUPLICATE_FORM} mediaKey={mediaKey} selectedLanguage={selectedLanguage} />\n              : <MediaUpload formName={MERGE_DUPLICATE_FORM} mediaKey={mediaKey} selectedLanguage={selectedLanguage} />\n          }\n        </Grid>\n        {this.copyRowButton(\n          `file.media.${selectedLanguage}.${mediaKey.key}`,\n          ['file', 'media', selectedLanguage, mediaKey.key],\n          this.copyMediaLinksCleanUp(['file', 'media'], mediaKey.key)\n        )}\n        <Grid item={true} container={true} direction='column' className={classes.infoColumn}>\n          <Typography variant='caption' color='textPrimary' style={{ display: 'block' }}>\n            { t(mediaKey.label) }\n          </Typography>\n          {\n            fileId\n              ? <Tooltip title={fileName}>\n                  <Link href={this.generateFileLink(mediaType, fileId)} target='_blank' rel='noopener' className={classes.link}>\n                    {fileName}\n                  </Link>\n                </Tooltip>\n              : <Typography variant='caption'>\n                  { assetBundle ? t('pimProductDrawer.available') : t('pimProductDrawer.na') }\n                </Typography>\n          }\n          {\n            fullUpload\n              ? url\n                  ? <Tooltip title={url}>\n                      <Link href={url} target='_blank' rel='noopener' className={classes.link}>\n                        {url}\n                      </Link>\n                    </Tooltip>\n                  : <Typography variant='caption'>\n                      { t('pimProductDrawer.na') }\n                    </Typography>\n              : null\n          }\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      setPrimaryIndex,\n      products,\n      setSelectedProducts,\n      open,\n      onClose,\n      handleSubmit,\n      dispatch,\n      t,\n      formValues = Map(),\n      canManagePimPricing,\n      isMergingProducts,\n      theme\n    } = this.props;\n    const {\n      selectedProductIndex,\n      selectedCurrency,\n      selectedLanguage,\n      imageId,\n      isFetchingProductNumber,\n      cleanProductNumber,\n      haveInformed,\n      isProductNumberDialogOpen,\n      isConfirmDuplicateValuesDialogOpen,\n      currentPrimaryIndex,\n      selectingPrimaryIndex\n    } = this.state;\n\n    const isAdvanceConfig = products.getIn([selectedProductIndex, 'isConfigurator']);\n    const vdoURL = products.getIn([selectedProductIndex, 'file', 'media', selectedLanguage, 'marketing_video', 'url']);\n\n    if (isMergingProducts) {\n      return (\n        <Dialog open={open} onClose={onClose} classes={{ paper: classes.root }}>\n          <Grid container={true} justify='center' alignItems='center' className={classes.loadingContainer}>\n            <CircularProgress style={{ marginRight: 8 }} />\n            <Typography color='textPrimary'>{t('MergeDuplicatesDialog.merging')}</Typography>\n          </Grid>\n        </Dialog>\n      );\n    }\n\n    return (\n      <Dialog open={open} onClose={onClose} classes={{ paper: classes.root }}>\n        <form onSubmit={handleSubmit(this.onSubmit)}>\n          <div className={classes.contentContainer}>\n            <Typography variant='h5' style={{ marginBottom: 16 }}>{t('MergeDuplicatesDialog.title')}</Typography>\n\n            {/* Image */}\n            <Grid container={true} justify='flex-end'>\n              <Grid\n                container={true}\n                item={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n                className={classes.infoColumn}\n              >\n                <Grid style={{ width: '100%', height: 100, textAlign: 'center' }}>\n                  <Typography>{t('MergeDuplicatesDialog.primaryProduct')}</Typography>\n                  <Select\n                    value={currentPrimaryIndex}\n                    onChange={(e) => {\n                      const selectingIndex = e.target.value as number;\n                      if (selectingIndex === currentPrimaryIndex) {\n                        return;\n                      }\n                      this.setState({isConfirmDuplicateValuesDialogOpen: true, selectingPrimaryIndex: selectingIndex});\n                    }}\n                    style={{ width: '100%', marginBottom: 18, marginTop: 8}}\n                  >\n                    {\n                      products.map((product, index) => <MenuItem key={index} value={index}>\n                          <Typography variant='body2' style={{textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', textAlign: 'left'}}>{product.get('productNumber')}</Typography>\n                        </MenuItem>\n                      )\n                    }\n                  </Select>\n                </Grid>\n                <Grid\n                  className={classes.imageContainer}\n                >\n                  <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                    component={FieldDropzone}\n                    name='dropzone'\n                    validate={mainImageUploadValidation}\n                    props={{\n                      initialImage: imageId,\n                      suggestText: t('SeriesDetailPage.uploadSuggest'),\n                      dropzoneInputProps: {\n                        accept: acceptedMainImageExtensions\n                      }\n                    }}\n                  />\n                  {\n                    (formValues?.get('dropzone') || imageId) &&\n                    <IconButton size='small' onClick={this.removePhoto} style={{ position: 'absolute', bottom: 0, right: -36 }}>\n                      <Tooltip title={t('formButtons.delete')}>\n                        <Delete fontSize='small' />\n                      </Tooltip>\n                    </IconButton>\n                  }\n                </Grid>\n              </Grid>\n              <Grid container={true} className={classes.arrowColumn}>\n                <Grid container={true} alignItems='flex-start' style={{height: 0}}>\n                  <Tooltip title={t('MergeDuplicatesDialog.applyAllAttributeValue')}>\n                    <div>\n                      <IconButton disabled={isFetchingProductNumber} onClick={() => this.handleCopyFromDuplicate()}>\n                        <ArrowBackIcon />\n                      </IconButton>\n                    </div>\n                  </Tooltip>\n                </Grid>\n                {this.copyRowButton('file.images.main', ['file', 'images', 'main'])}\n              </Grid>\n              <Grid\n                container={true}\n                item={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n                className={classes.infoColumn}\n              >\n                <Grid style={{ height: 100 }}>\n                  <Typography>{t('MergeDuplicatesDialog.duplicates')}</Typography>\n                </Grid>\n                <Image\n                  src={`${products.getIn([selectedProductIndex, 'file', 'images', 'main', 'fileId'])}|fit:${IMG_SIZE},${IMG_SIZE}`}\n                  width={`${IMG_SIZE}px`}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Product Info */}\n            <>\n              <Grid container={true} justify='space-between' wrap='nowrap' className={classes.sectionRow}>\n                <Grid container={true} item={true} alignItems='center' style={{ width: 'fit-content'}}>\n                  <Edit color='action' className={classes.iconColumn} />\n                  <Typography variant='h6'>{t('pimProductDrawer.productInfo')}</Typography>\n                </Grid>\n                <Grid item={true} style={{ width: INFO_COLUMN_WIDTH,  paddingLeft: 16 }}>\n                  <Typography>{t('MergeDuplicatesDialog.selectDuplicate')}</Typography>\n                </Grid>\n              </Grid>\n              <Grid container={true} alignItems='center' wrap='nowrap'>\n                <Grid item={true} className={classes.labelColumn} style={{ paddingLeft: ICON_COLUMN_WIDTH }}>\n                  <Typography color='textPrimary'>{t('pimProductDrawer.productNumber')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='productNumber'\n                    props={{\n                      placeholder: t('pimProductDrawer.productNumber'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      inputProps: {\n                        disabled: isFetchingProductNumber || (isAdvanceConfig && !formValues.get('customProductNumber')),\n                        inputRef: this.refProductNumber,\n                        // onFocus: () => {\n                        //   if (isAdvanceConfig && !haveInformed) {\n                        //     setHaveInformed(true);\n                        //     setIsProductNumberDialogOpen(true);\n                        //   }\n                        // }\n                      }\n                    }}\n                    component={FieldTextField}\n                    validate={[isNotEmptyStringRequired]}\n                  />\n                </Grid>\n                {this.copyRowButton('productNumber', ['productNumber'])}\n                <Grid item={true} className={classes.infoColumn}>\n                  <Select\n                    value={selectedProductIndex}\n                    onChange={this.handleChangeReference}\n                    style={{ width: '100%', marginBottom: 18 }}\n                    renderValue={(value) => products.getIn([value, 'productNumber'])}\n                  >\n                    {\n                      products.map((product, index) => {\n                        const primaryProductId = products.getIn([currentPrimaryIndex, 'id']);\n                        const isPrimaryProduct = primaryProductId === product.get('id');\n                        const selectedProductId = products.getIn([selectedProductIndex, 'id']);\n                        const disableRemoveProduct = products.size < 3;\n                        return <MenuItem key={index} value={index}>\n                          <Grid container={true} justify='space-between' alignItems='flex-start' style={{padding: '4px 0'}}>\n                            <Grid container={true} item={true} xs={1}>\n                              {isPrimaryProduct && <BeenhereIcon fontSize='small'/>}\n                            </Grid>\n                            <Grid container={true} item={true} xs={10} direction='column'>\n                              <Typography variant='body2' color='textPrimary' style={{fontWeight: isPrimaryProduct ? 700 : null, marginRight: 40}}>{product.get('productNumber')}</Typography>\n                              <Typography variant='body1' style={{paddingTop: 4}}>Last updated: {utcToLocal(product.get('dateModified'), true)}</Typography>\n                            </Grid>\n                            <Grid container={true} item={true} xs={1} justify='flex-end'>\n                            {!isPrimaryProduct &&\n                              <Tooltip title={disableRemoveProduct ? t('MergeDuplicatesDialog.disableRemoveDuplicateProduct') : t('MergeDuplicatesDialog.removeDuplicateProduct') }>\n                                <CloseIcon\n                                  color={disableRemoveProduct ? 'disabled' : 'inherit'}\n                                  fontSize='small'\n                                  onClick={(e) => {\n                                    e.stopPropagation();\n                                    if (disableRemoveProduct) {\n                                      return;\n                                    }\n                                    // update products group, selected product index and primary product index\n                                    const updatedProducts = products.delete(index);\n                                    const updatedSelectedProductIndex = updatedProducts.findIndex((_product) => _product.get('id') === selectedProductId);\n                                    const updatedPrimaryProductIndex = updatedProducts.findIndex((_product) => _product.get('id') === primaryProductId);\n                                    setSelectedProducts(updatedProducts);\n                                    setPrimaryIndex(updatedPrimaryProductIndex);\n                                    this.setState({ selectedProductIndex: updatedSelectedProductIndex !== -1 ? updatedSelectedProductIndex : updatedPrimaryProductIndex});\n                                  }}\n                                />\n                              </Tooltip>\n                            }\n                            </Grid>\n                          </Grid>\n                        </MenuItem>;\n                      })\n                    }\n                  </Select>\n                </Grid>\n              </Grid>\n              {\n                isAdvanceConfig && (\n                  <Grid container={true} alignItems='center' wrap='nowrap'>\n                    <Grid item={true} className={classes.labelColumn} />\n                    <Grid item={true} className={classes.infoColumn}>\n                      <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                        name={'customProductNumber'}\n                        component={FieldSwitch}\n                        props={{\n                          label: 'Enable custom product number',\n                          inputProps: {\n                            color: 'primary',\n                            disabled: isFetchingProductNumber,\n                            onChange: (e, value) => {\n                              if (value && !haveInformed) {\n                                this.setState({\n                                  haveInformed: true,\n                                  isProductNumberDialogOpen: true,\n                                });\n                              } else {\n                                dispatch(change(MERGE_DUPLICATE_FORM, 'productNumber', cleanProductNumber));\n                              }\n                            }\n                          }\n                        }}\n                      />\n                    </Grid>\n                  </Grid>\n                )\n              }\n              <Grid container={true} alignItems='center' wrap='nowrap'>\n                <Grid container={true} item={true} className={classes.labelColumn}>\n                  {this.rowWarningicondisplay(['itemNumber'])}\n                  <Typography color='textPrimary'>{t('pimProductDrawer.itemNumber')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='itemNumber'\n                    props={{\n                      placeholder: t('pimProductDrawer.itemNumber'),\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldTextField}\n                  />\n                </Grid>\n                {this.copyRowButton('itemNumber', ['itemNumber'])}\n                <Grid item={true} className={classes.infoColumn}>\n                  <Typography>{products.getIn([selectedProductIndex, 'itemNumber']) || '-'}</Typography>\n                </Grid>\n              </Grid>\n              <Grid container={true} alignItems='center' wrap='nowrap'>\n                <Grid container={true} item={true} className={classes.labelColumn}>\n                  {this.rowWarningicondisplay(['upc'])}\n                  <Typography color='textPrimary'>{t('pimProductDrawer.upc')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='upc'\n                    props={{\n                      placeholder: t('pimProductDrawer.upc'),\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldTextField}\n                    validate={[this._maxStringLength]}\n                  />\n                </Grid>\n                {this.copyRowButton('upc', ['upc'])}\n                <Grid item={true} className={classes.infoColumn}>\n                  <Typography>{products.getIn([selectedProductIndex, 'upc']) || '-'}</Typography>\n                </Grid>\n              </Grid>\n              <Grid container={true} alignItems='center' wrap='nowrap'>\n                <Grid container={true} item={true} className={classes.labelColumn}>\n                  {this.rowWarningicondisplay(['sku'])}\n                  <Typography color='textPrimary'>{t('pimProductDrawer.sku')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='sku'\n                      props={{\n                        placeholder: t('pimProductDrawer.sku'),\n                        formControlProps: {\n                          fullWidth: true\n                        },\n                      }}\n                      component={FieldTextField}\n                      validate={[this._maxStringLength]}\n                  />\n                </Grid>\n                {this.copyRowButton('sku', ['sku'])}\n                <Grid item={true} className={classes.infoColumn}>\n                  <Typography>{products.getIn([selectedProductIndex, 'sku']) || '-'}</Typography>\n                </Grid>\n              </Grid>\n              <Grid container={true} alignItems='center' wrap='nowrap'>\n                <Grid container={true} item={true} className={classes.labelColumn}>\n                  {this.rowWarningicondisplay(['description'])}\n                  <Typography color='textPrimary'>{t('pimProductDrawer.productDescription')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='description'\n                    props={{\n                      placeholder: t('pimProductDrawer.productDescription'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldTextField}\n                    validate={[isNotEmptyStringRequired]}\n                  />\n                </Grid>\n                {this.copyRowButton('description', ['description'])}\n                <Grid item={true} className={classes.infoColumn}>\n                  <Typography>{products.getIn([selectedProductIndex, 'description']) || '-'}</Typography>\n                </Grid>\n              </Grid>\n            </>\n\n            {/* Price Info */}\n            <Grid container={true} wrap='nowrap' className={classes.sectionRow}>\n              <Grid container={true} item={true} alignItems='center' style={{ width: 'fit-content'}}>\n                <AttachMoney color='action' className={classes.iconColumn} />\n                <Typography variant='h6'>{t('MergeDuplicatesDialog.priceInfo')}</Typography>\n              </Grid>\n            </Grid>\n            {\n              ['CAD', 'USD'].map((currencyKey, index) => {\n                const isCAD = currencyKey === 'CAD';\n                return (\n                  <div key={currencyKey} style={{marginTop: 16}}>\n                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                      <Grid container={true} item={true} className={classes.labelColumn} alignItems='center' style={{ paddingLeft: ICON_COLUMN_WIDTH }}>\n                        <Grid\n                          container={true}\n                          wrap='nowrap'\n                        >\n                          <img src={isCAD ? canFlag : usFlag} className={classes.countryFlag} alt={isCAD ? t('configuratorPage.canadianFlagIconAlt') : t('configuratorPage.usFlagIconAlt')} />\n                          <Typography variant='body2'>{isCAD ? t('configuratorPage.CAD') : t('configuratorPage.USD')}</Typography>\n                        </Grid>\n                      </Grid>\n                    </Grid>\n                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                      <Grid container={true} item={true} className={classes.labelColumn} alignItems='center' wrap='nowrap'>\n                        {this.rowWarningicondisplay(['price', 'default', currencyKey, 'isPoa'])}\n                        <Typography color='textPrimary'>{t('productDrawer.POA')}</Typography>\n                        <Tooltip title={t('configuratorPage.optionsWidget.priceIsPOATooltip')}>\n                          <Info fontSize='small' color='action' style={{marginLeft: 8, cursor: 'pointer'}} />\n                        </Tooltip>\n                      </Grid>\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Tooltip title={canManagePimPricing ? '' : t('permissions.noPermissionTooltip')}>\n                          <span>\n                            <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                              name={`price.default.${currencyKey}.isPoa`}\n                              component={FieldSwitch}\n                              props={{\n                                inputProps: {\n                                  color: 'primary',\n                                  disabled: !canManagePimPricing\n                                }\n                              }}\n                            />\n                          </span>\n                        </Tooltip>\n                      </Grid>\n                      {this.copyRowButton(`price.default.${currencyKey}.isPoa`, ['price', 'default', currencyKey, 'isPoa'])}\n                      <Grid item={true} className={classes.infoColumn}>\n                        {\n                          products.getIn([selectedProductIndex, 'price', 'default', currencyKey, 'isPoa']) ? <Check color='primary' /> : null\n                        }\n                      </Grid>\n                    </Grid>\n                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                      <Grid container={true} item={true} className={classes.labelColumn}>\n                        {this.rowWarningicondisplay(['price', 'default', currencyKey, 'list'])}\n                        <Typography color='textPrimary'>{t('pimProductDrawer.listPrice')}</Typography>\n                      </Grid>\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Tooltip title={canManagePimPricing ? '' : t('permissions.noPermissionTooltip')}>\n                          <span>\n                            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                              name={`price.default.${currencyKey}.list`}\n                              props={{\n                                placeholder: t('pimProductDrawer.listPrice'),\n                                inputProps: {\n                                  color: 'primary',\n                                  disabled: !canManagePimPricing\n                                },\n                                formControlProps: {\n                                  fullWidth: true\n                                },\n                              }}\n                              component={FieldTextField}\n                            />\n                          </span>\n                        </Tooltip>\n                      </Grid>\n                      {this.copyRowButton(`price.default.${currencyKey}.list`, ['price', 'default', currencyKey, 'list'])}\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Typography>{products.getIn([selectedProductIndex, 'price', 'default', currencyKey, 'list']) || '-'}</Typography>\n                      </Grid>\n                    </Grid>\n                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                      <Grid container={true} item={true} className={classes.labelColumn}>\n                        {this.rowWarningicondisplay(['price', 'default', currencyKey, 'sell'])}\n                        <Typography color='textPrimary'>{t('pimProductDrawer.sellPrice')}</Typography>\n                      </Grid>\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Tooltip title={canManagePimPricing ? '' : t('permissions.noPermissionTooltip')}>\n                          <span>\n                            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                              name={`price.default.${currencyKey}.sell`}\n                              props={{\n                                placeholder: t('pimProductDrawer.sellPrice'),\n                                inputProps: {\n                                  color: 'primary',\n                                  disabled: !canManagePimPricing\n                                },\n                                formControlProps: {\n                                  fullWidth: true\n                                },\n                              }}\n                              component={FieldTextField}\n                            />\n                          </span>\n                        </Tooltip>\n                      </Grid>\n                      {this.copyRowButton(`price.default.${currencyKey}.sell`, ['price', 'default', currencyKey, 'sell'])}\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Typography>{products.getIn([selectedProductIndex, 'price', 'default', currencyKey, 'sell']) || '-'}</Typography>\n                      </Grid>\n                    </Grid>\n                    <Grid container={true} alignItems='center' wrap='nowrap'>\n                      <Grid container={true} item={true} className={classes.labelColumn}>\n                        {this.rowWarningicondisplay(['price', 'default', currencyKey, 'cost'])}\n                        <Typography color='textPrimary'>{t('pimProductDrawer.cost')}</Typography>\n                      </Grid>\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Tooltip title={canManagePimPricing ? '' : t('permissions.noPermissionTooltip')}>\n                          <span>\n                            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                              name={`price.default.${currencyKey}.cost`}\n                              props={{\n                                placeholder: t('pimProductDrawer.cost'),\n                                inputProps: {\n                                  color: 'primary',\n                                  disabled: !canManagePimPricing\n                                },\n                                formControlProps: {\n                                  fullWidth: true\n                                },\n                              }}\n                              component={FieldTextField}\n                            />\n                          </span>\n                        </Tooltip>\n                      </Grid>\n                      {this.copyRowButton(`price.default.${currencyKey}.cost`, ['price', 'default', currencyKey, 'cost'])}\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Typography>{products.getIn([selectedProductIndex, 'price', 'default', currencyKey, 'cost']) || '-'}</Typography>\n                      </Grid>\n                    </Grid>\n                  </div>\n                );\n              })\n            }\n\n            {/* Options */}\n            <>\n              <Grid container={true} wrap='nowrap' className={classes.sectionRow}>\n                <Grid container={true} item={true} alignItems='center' style={{ width: 'fit-content'}}>\n                  <AttachMoney color='action' className={classes.iconColumn} />\n                  <Typography variant='h6'>{t('pimProductDrawer.setProductOptions')}</Typography>\n                </Grid>\n              </Grid>\n              <Grid container={true} alignItems='center' justify='flex-end' wrap='nowrap'>\n                {/* <Grid item={true} className={classes.labelColumn} /> */}\n                <Grid item={true} className={classes.infoColumn}>\n                  { this.SelectedOptions(formValues.get('attributes')) }\n                </Grid>\n                <Grid className={classes.arrowColumn} />\n                <Grid item={true} className={classes.infoColumn}>\n                  { this.SelectedOptions(products?.getIn([selectedProductIndex, 'attributes'])) }\n                </Grid>\n              </Grid>\n            </>\n\n            {/* Attachments */}\n            <>\n              <Grid container={true} wrap='nowrap' className={classes.sectionRow} style={{ width: `calc(${LABEL_COLUMN_WIDTH} + ${INFO_COLUMN_WIDTH})`}}>\n                <Grid container={true} item={true} alignItems='center'>\n                  <AttachFile color='action' className={classes.iconColumn} />\n                  <Typography variant='h6'>{t('pimProductDrawer.attachment')}</Typography>\n                </Grid>\n                <Grid item={true} className={classes.infoColumn}>\n                  <Grid container={true} justify='flex-end' alignItems='center' wrap='nowrap'>\n                    {this.displayAttachmentWarningForOtherLanguages().length > 0 &&\n                      <Tooltip title={t('MergeDuplicatesDialog.warningOnLanguage')}>\n                        <WarningIcon fontSize='small' style={{color: theme.palette.warning.main, marginRight: theme.spacing()}}/>\n                      </Tooltip>\n                    }\n                    <Typography color='textPrimary' style={{ marginRight: 8 }}>{t('LanguageSelector.Language')}</Typography>\n                    <FileLocalizationSelector\n                      displayLabel={false}\n                      selectedLanguage={selectedLanguage}\n                      setSelectedLanguage={(_selectedLanguage) => this.setState({ selectedLanguage: _selectedLanguage })}\n                      mergeDuplicateWarningIcon={(languageOption) => (\n                        <Tooltip title={t('MergeDuplicatesDialog.warningOnLanguageSelect')}>\n                          <WarningIcon\n                            fontSize='small'\n                            style={{\n                              color: theme.palette.warning.main,\n                              marginLeft: theme.spacing(),\n                              visibility: this.displayAttachmentWarningForOtherLanguages().includes(languageOption) ? 'visible' : 'hidden'}}/>\n                        </Tooltip>\n                      )}\n                    />\n                  </Grid>\n                </Grid>\n              </Grid>\n              {\n                fullMediaKeys.filter(f => !f.disabledForProduct).map((mediaKey: IMediaKey, index: number) =>\n                  this.renderMergeMediaRow(mediaKey, index, 'pimProductDrawer.media')\n                )\n              }\n              {\n                designMediaKeys.map((mediaKey: IMediaKey, index: number) =>\n                  this.renderMergeMediaRow(mediaKey, index, 'pimProductDrawer.designFiles')\n                )\n              }\n              {\n                linkKeys.map((mediaKey: IMediaKey, index: number) => {\n                  const url = products.getIn([selectedProductIndex, 'file', 'links', selectedLanguage, mediaKey.key, 'url']);\n                  return (\n                    <Grid key={index} container={true} alignItems='center' style={{ marginBottom: 16 }}>\n                      <Grid container={true} item={true} className={classes.labelColumn} style={{ paddingLeft: ICON_COLUMN_WIDTH, position: 'relative' }}>\n                        {\n                          index === 0 && <Typography variant='body2' color='textPrimary'>{t('pimProductDrawer.links')}</Typography>\n                        }\n                        {this.rowWarningicondisplay(['file', 'media', selectedLanguage, 'marketing_video', 'url'], {position: 'absolute', left: '85%'})}\n                      </Grid>\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Grid container={true}>\n                          <LinkItem\n                            formName={MERGE_DUPLICATE_FORM}\n                            mediaKey={mediaKey}\n                            selectedLanguage={selectedLanguage}\n                          />\n                        </Grid>\n                      </Grid>\n                      {this.copyRowButton(\n                        `file.links.${selectedLanguage}.${mediaKey.key}`,\n                        ['file', 'links', selectedLanguage, mediaKey.key],\n                        this.copyMediaLinksCleanUp(['file', 'links'], mediaKey.key)\n                      )}\n                      <Grid item={true} className={classes.infoColumn}>\n                        <Grid item={true} xs={12}>\n                          <Typography variant='caption' color='textPrimary' style={{ textTransform: 'capitalize', display: 'block' }}>\n                            { t(mediaKey.label) }:\n                          </Typography>\n                          {\n                            url\n                              ? <Tooltip title={url}>\n                                  <Link href={url} target='_blank' rel='noopener' className={classes.link}>\n                                    {url}\n                                  </Link>\n                                </Tooltip>\n                              : <Typography variant='caption'>\n                                  {t('pimProductDrawer.na')}\n                                </Typography>\n                          }\n                        </Grid>\n                      </Grid>\n                    </Grid>\n                  );\n                })\n              }\n            </>\n          </div>\n\n          { this.CTA() }\n        </form>\n        <ProductNumberDialog\n          open={isProductNumberDialogOpen}\n          onClose={() => {\n            dispatch(change(MERGE_DUPLICATE_FORM, 'customProductNumber', false));\n            setTimeout(() => this.refProductNumber?.current?.blur(), 25);\n            this.setState({ isProductNumberDialogOpen: false });\n          }}\n          onConfirm={() => {\n            this.setState({ isProductNumberDialogOpen: false });\n          }}\n        />\n        <ConfirmDuplicateValuesDialog\n          open={isConfirmDuplicateValuesDialogOpen}\n          onClose={this.closeConfirmDuplicateValuesDialog}\n          onKeepExistingValues={() => {\n            this.setState({ currentPrimaryIndex: selectingPrimaryIndex });\n            this.closeConfirmDuplicateValuesDialog();\n          }}\n          onApplyNewValues={() => {\n            this.handleCopyFromDuplicate(selectingPrimaryIndex);\n            this.setState({ currentPrimaryIndex: selectingPrimaryIndex });\n            this.closeConfirmDuplicateValuesDialog();\n          }}\n        />\n      </Dialog>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IMergeProductsDialogComponentProps) => {\n  const initialValues = makeSelectPrimaryMergeProduct()(state);\n  return {\n    initialValues,\n    ...createStructuredSelector({\n      formValues: getFormValues(MERGE_DUPLICATE_FORM),\n      canManagePimPricing: makeSelectCanManagePimPricing(),\n      isMergingProducts: makeSelectIsMergingProducts(),\n    })(state)\n  };\n};\n\nexport default compose<React.ComponentClass<IMergeProductsDialogComponentProps>> (\n  withAtsApi(),\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, null),\n  reduxForm({\n    form: MERGE_DUPLICATE_FORM,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(MergeProductsDialog);\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19.51 3.08L3.08 19.51c.09.34.27.65.51.9.25.24.56.42.9.51L20.93 4.49c-.19-.69-.73-1.23-1.42-1.41zM11.88 3L3 11.88v2.83L14.71 3h-2.83zM5 3c-1.1 0-2 .9-2 2v2l4-4H5zm14 18c.55 0 1.05-.22 1.41-.59.37-.36.59-.86.59-1.41v-2l-4 4h2zm-9.71 0h2.83L21 12.12V9.29L9.29 21z\"\n}), 'Texture');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M11.8 10.9c-2.27-.59-3-1.2-3-2.15 0-1.09 1.01-1.85 2.7-1.85 1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-1.94.42-3.5 1.68-3.5 3.61 0 2.31 1.91 3.46 4.7 4.13 2.5.6 3 1.48 3 2.41 0 .69-.49 1.79-2.7 1.79-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c1.95-.37 3.5-1.5 3.5-3.55 0-2.84-2.43-3.81-4.7-4.4z\"\n}), 'AttachMoney');","import { Button, createStyles, Dialog, DialogActions, DialogContent, Grid, makeStyles, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  confirmDuplicateValuesDialogRoot: {\n    maxWidth: 665,\n    padding: theme.spacing()\n  },\n  dialogTitle: {\n    marginBottom: theme.spacing(2)\n  },\n}));\n\ninterface IConfirmDuplicateValuesDialogComponentProps {\n  open: boolean;\n  onClose: () => void;\n  onKeepExistingValues: () => void;\n  onApplyNewValues: () => void;\n}\n\ninterface IConfirmDuplicateValuesDialogProps extends IConfirmDuplicateValuesDialogComponentProps {\n}\n\n\nconst ConfirmDuplicateValuesDialog: React.FC<IConfirmDuplicateValuesDialogProps> = ({\n  open,\n  onClose,\n  onKeepExistingValues,\n  onApplyNewValues\n}) => {\n\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      classes={{\n        paper: classes.confirmDuplicateValuesDialogRoot\n      }}\n    >\n      <DialogContent>\n        <Grid container={true}>\n          <Typography variant='h6' color='textPrimary' className={classes.dialogTitle}>\n            Change Primary Product\n          </Typography>\n          <Typography variant='body2'>\n            You are selecting a different primary product for merging duplicates.\n          </Typography>\n          <Typography variant='body2'>\n            Do you want to apply a new primary product attribute values or keep existing ones?\n          </Typography>\n        </Grid>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={onClose}\n          color='primary'\n        >\n          { t('formButtons.cancel') }\n        </Button>\n        <Button\n          onClick={onKeepExistingValues}\n          color='primary'\n        >\n          keep existing values\n        </Button>\n        <Button\n          onClick={onApplyNewValues}\n          color='primary'\n        >\n          apply new values\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nexport default ConfirmDuplicateValuesDialog;","import * as React from 'react';\nimport { compose } from 'redux';\nimport { connect, useSelector } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { Grid, Typography, Theme, Tooltip, IconButton, Dialog, Divider, CircularProgress, Button, Checkbox, Radio } from '@material-ui/core';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { GetSeriesDuplicateProductsByIdAction, UpdatePimSeriesDraftAction } from '../../../../modules/PimModule/actions';\nimport { makeSelectPimStatuses } from '../../../../modules/ListModule/selectors';\nimport { fromJS, getIn, List } from 'immutable';\nimport { Product, Series, Status } from '../../../../models';\nimport classnames from 'classnames';\nimport { makeSelectChildOrParentIsAtsUser, makeSelectHasPublishPermission } from '../../../../modules/AtsModule/selectors';\nimport { ToggleOverlayComponentAction } from '../../../../modules/ApplicationModule/actions';\nimport { PUBLISH_DIALOG_ID } from '../../../../containers/PimSeriesListPage/PublishDialog';\nimport FlagIcon from '@material-ui/icons/Flag';\nimport { makeSelectIsGettingSeriesDuplicateProducts, makeSelectSeriesDuplicateProducts, makeSelectHasUnconfigurableProducts } from '../../../../modules/PimModule/selectors';\nimport DiscFullIcon from '@material-ui/icons/DiscFull';\nimport MergeProductsDialog from './MergeProductsDialog';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport WarningIcon from '@material-ui/icons/Warning';\n\ninterface IRowStatus {\n  isSelected: boolean;\n  isPrimary: boolean;\n}\n\ninterface ISeriesPublishStatusComponentProps {\n  seriesId: number;\n  series: IMap<Series>;\n  pimStatus: string;\n  invalid: boolean;\n}\n\ninterface ISeriesPublishStatusProps extends ISeriesPublishStatusComponentProps {\n  pimStatuses: List<IMap<Status>>;\n  hasPublishPermission: boolean;\n  childOrParentIsAtsUser: boolean;\n  isGettingSeriesDuplicateProducts: boolean;\n  seriesDuplicateProducts: List<List<IMap<Product>>>;\n  updatePimSeriesDraft: (seriesId: number, pimStatus: string, cascade?: boolean) => void;\n  openPublishDialog: () => void;\n  getSeriesDuplicateProductsById: (seriesId: number) => void;\n}\n\ntype SeriesPublishStatusProps = ISeriesPublishStatusProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    margin: theme.spacing(3, 0, 1)\n  },\n  statusChip: {\n    borderRadius: theme.shape.borderRadius,\n    fontSize: '14px',\n    textTransform: 'uppercase',\n    minWidth: '100px',\n    padding: theme.spacing(0.75, 1.25),\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    cursor: 'pointer'\n  },\n  chipConnectionContainer: {\n    display: 'flex',\n    alignItems: 'center'\n  },\n  unselectedChip: {\n    backgroundColor: '#d4d4d4'\n  },\n   _1: { // Draft\n    backgroundColor: '#efdad8'\n  },\n  _2: { // Pending For Approval\n    backgroundColor: '#f0e9d2'\n  },\n  _3: { // Approved\n    backgroundColor: '#d1e0e7'\n  },\n  _4: { // Changes Required\n    backgroundColor: '#d6d1e7'\n  },\n  _5: { // Publish\n    backgroundColor: getIn(theme.palette, ['status', 'completed'], 'none')\n  },\n  _extraChip: { // any status that's not accounted for\n    backgroundColor: '#d9c4ec'\n  },\n  connection: {\n    width: 60,\n    height: 1,\n  },\n  highlightedConnection: {\n    backgroundColor: '#76bbd7'\n  },\n  unHighlightedConnection: {\n    backgroundColor: '#979797'\n  },\n  icon: {\n    marginLeft: theme.spacing()\n  },\n  rootPadding: {\n    padding: theme.spacing(2)\n  },\n  productListGroups: {\n    maxHeight: 660,\n    overflowY: 'auto'\n  },\n  mergeButton: {\n    whiteSpace: 'nowrap',\n    width: 'fit-content'\n  }\n});\n\nconst SeriesPublishStatus: React.FC<SeriesPublishStatusProps> = ({\n  classes,\n  series,\n  seriesId,\n  pimStatus,\n  invalid,\n  pimStatuses,\n  childOrParentIsAtsUser,\n  hasPublishPermission,\n  isGettingSeriesDuplicateProducts,\n  seriesDuplicateProducts,\n  updatePimSeriesDraft,\n  openPublishDialog,\n  getSeriesDuplicateProductsById,\n  t,\n}): JSX.Element => {\n\n  const [isProductSelectionOpen, setIsProductSelectionOpen] = React.useState(false);\n  const [rowStatuses, setRowStatuses] = React.useState<List<List<IMap<IRowStatus>>>>(List());\n\n  const [isMergeDialogOpen, setIsMergeDialogOpen] = React.useState(false);\n  const [selectedProducts, setSelectedProducts] = React.useState(List());\n  const [primaryIndex, setPrimaryIndex] = React.useState(null);\n\n  const isConfigurator = series.get('isConfigurator');\n  const hasUnconfigurableProducts = isConfigurator\n    ? series.get('attributes')?.some(attr => attr.get('displayAsAttribute') && attr.get('status') === 'active')\n    : useSelector(makeSelectHasUnconfigurableProducts());\n\n  const canPublish = hasPublishPermission && !invalid && series?.get('status') !== 'deleted' && !(hasUnconfigurableProducts && !isConfigurator);\n\n  React.useEffect(() => {\n    getSeriesDuplicateProductsById(seriesId);\n  }, []);\n\n  React.useEffect(() => {\n    if (isProductSelectionOpen && seriesDuplicateProducts) {\n      setRowStatuses(List(Array(seriesDuplicateProducts.size).fill(List())));\n    } else {\n      setRowStatuses(List());\n    }\n  }, [isProductSelectionOpen]);\n\n  React.useEffect(() => {\n    if (!isMergeDialogOpen) {\n      setSelectedProducts(List());\n      setPrimaryIndex(null);\n    }\n  }, [isMergeDialogOpen]);\n\n  const handleGroupCheck = (value: boolean, groupIndex: number, size: number) => {\n    if (value) {\n      // if check is true then reset and select this group\n      setRowStatuses(List(Array(seriesDuplicateProducts.size).fill(List())).set(groupIndex, List(Array(size).fill(fromJS({ isSelected: true, isPrimary: false }))).setIn([0, 'isPrimary'], true)));\n    } else {\n      setRowStatuses((currentRowStatuses) => currentRowStatuses.set(groupIndex, List()));\n    }\n  };\n\n  const handleProductCheck = (value: boolean, groupIndex: number, productIndex: number) => {\n    const isCheckOnCurrentSelectedGroup = rowStatuses.get(groupIndex).find(row => row?.get('isSelected'));\n    if (isCheckOnCurrentSelectedGroup) {\n      setRowStatuses((currentRowStatuses) => currentRowStatuses.setIn([groupIndex, productIndex], fromJS({ isSelected: value, isPrimary: false })));\n    } else {\n      // reset and select new group\n      setRowStatuses(List(Array(seriesDuplicateProducts.size).fill(List())).setIn([groupIndex, productIndex], fromJS({ isSelected: value, isPrimary: false })));\n    }\n  };\n\n  const handleProductPrimarySelect = (groupIndex: number, productIndex: number) => {\n    setRowStatuses((currentRowStatuses) => {\n      const indexAlreadySelected = currentRowStatuses.get(groupIndex).findIndex((row, index) => row?.get('isPrimary'));\n      const newRowStatuses = currentRowStatuses.setIn([groupIndex, productIndex, 'isPrimary'], true);\n      if (indexAlreadySelected !== - 1) {\n        return newRowStatuses.setIn([groupIndex, indexAlreadySelected, 'isPrimary'], false);\n      }\n      return newRowStatuses;\n    });\n  };\n\n  const handleOpenMergeDialog = (groupIndex: number) => {\n    let _primaryIndex = 0;\n    const _selectedProducts = seriesDuplicateProducts\n      .get(groupIndex)\n      .reduce((acc, product, index) => {\n        if (rowStatuses.getIn([groupIndex, index, 'isPrimary'])) {\n          _primaryIndex = acc.count();\n        }\n        return rowStatuses.getIn([groupIndex, index, 'isSelected']) ? acc.push(product) : acc;\n      }, List());\n\n    setPrimaryIndex(_primaryIndex);\n    setSelectedProducts(_selectedProducts);\n    setIsProductSelectionOpen(false);\n    setIsMergeDialogOpen(true);\n  };\n\n  return (\n    <Grid\n      xs={12}\n      item={true}\n      container={true}\n      alignContent='center'\n      alignItems='center'\n      className={classes.container}\n    >\n      {\n        pimStatuses && pimStatuses.pop().map((status: IMap<Status>, index: number) => {\n          const statusValue = status.get('value');\n          const statusId = status.get('id');\n          const chipClass = pimStatus === statusValue\n            ? classes[`_${statusId}`]\n                ? classes[`_${statusId}`]\n                : classes._extraChip\n            : classes.unselectedChip;\n          const connectionClass = pimStatus === statusValue ? classes.highlightedConnection : classes.unHighlightedConnection;\n          return (\n            <div key={index} className={classes.chipConnectionContainer}>\n              <div className={classnames(classes.statusChip, chipClass)}>\n                <Typography onClick={() => {updatePimSeriesDraft(seriesId, statusValue);}}>\n                  {statusValue}\n                </Typography>\n              </div>\n              <div className={classnames(classes.connection, connectionClass)}/>\n            </div>\n          );\n        })\n      }\n      <Tooltip title={\n        hasPublishPermission\n          ? invalid\n            ? t('SeriesDetailPage.invalidSeriesTooltip')\n            : ''\n          : t('permissions.noPermissionTooltip')\n      }>\n        <div className={classes.chipConnectionContainer}>\n          <div className={classnames(classes.statusChip, classes.unselectedChip)}>\n            <Typography\n              style={{ color: canPublish ? 'inherit' : 'rgba(0, 0, 0, 0.3)'}}\n              onClick={() => canPublish ? openPublishDialog() : null}\n            >\n              {pimStatuses && pimStatuses.getIn([-1, 'value'])}\n            </Typography>\n          </div>\n        </div>\n      </Tooltip>\n      {invalid && childOrParentIsAtsUser &&\n        <Tooltip title={t('SeriesDetailPage.seriesContainsInvalidFlagTooltip')}>\n          <FlagIcon color='error' className={classes.icon} />\n        </Tooltip>\n      }\n      {\n        isGettingSeriesDuplicateProducts\n          ? <CircularProgress size='1.4em' className={classes.icon} />\n          : <>\n              {\n                seriesDuplicateProducts?.count()\n                  ? <Tooltip title={t('SeriesDetailPage.mergeDuplicationTooltip')}>\n                      <IconButton size='small' className={classes.icon} onClick={() => setIsProductSelectionOpen(true)}>\n                        <DiscFullIcon color='error' />\n                      </IconButton>\n                    </Tooltip>\n                  : null\n              }\n              {\n                (hasUnconfigurableProducts && !isConfigurator) && (\n                  <Tooltip title={t('SeriesDetailPage.hasUnconfigurableProductsErrorTooltip')}>\n                    <ErrorIcon fontSize='small' color='error' className={classes.icon} />\n                  </Tooltip>\n                )\n              }\n            </>\n      }\n      {\n        (hasUnconfigurableProducts && isConfigurator) && (\n          <Tooltip title={t('SeriesDetailPage.hasUnconfigurableProductsWarningTooltip')}>\n            <WarningIcon fontSize='small' className={classes.icon} style={{ color: '#E6B160'}} />\n          </Tooltip>\n        )\n      }\n      <Dialog open={isProductSelectionOpen} onClose={() => setIsProductSelectionOpen(false)}>\n        <div style={{ width: 450 }}>\n          <div className={classes.rootPadding}>\n            <Typography variant='caption' display='block'>\n              {t('MergeDuplicatesDialog.followingProductsAreDuplicates')}\n            </Typography>\n            <Typography variant='caption'>\n              {t('MergeDuplicatesDialog.pleaseSelectDuplicates')}\n            </Typography>\n          </div>\n          <Divider />\n          <Grid container={true} justify='space-between' className={classes.rootPadding}>\n            <Typography variant='caption' color='textPrimary'>\n              {t('pimProductDrawer.productNumber')}\n            </Typography>\n            <Typography variant='caption' color='textPrimary'>\n              {t('MergeDuplicatesDialog.setAsPrimaryProduct')}\n            </Typography>\n          </Grid>\n          <div className={classnames(classes.productListGroups)}>\n            {\n              seriesDuplicateProducts?.map((duplicateProductsGroup: List<IMap<Product>>, groupIndex) => {\n                const selectedCount = rowStatuses.get(groupIndex)?.filter(row => row?.get('isSelected')).count();\n                const hasPrimary = rowStatuses.get(groupIndex)?.find(row => row?.get('isPrimary'));\n                const isSelectAllIndeterminate = selectedCount > 0 && selectedCount !== duplicateProductsGroup.count();\n                return <div key={groupIndex}>\n                  <Divider />\n                  <div key={groupIndex} className={classes.rootPadding}>\n                    <Grid container={true}>\n                      <Grid container={true} alignItems='center'>\n                        <Checkbox\n                          color='primary'\n                          checked={selectedCount === duplicateProductsGroup.count()}\n                          indeterminate={isSelectAllIndeterminate}\n                          onChange={(e, value) => handleGroupCheck(isSelectAllIndeterminate ? false : value, groupIndex, duplicateProductsGroup.count())}\n                        />\n                        <Typography color='textPrimary'>\n                          {t('MergeDuplicatesDialog.selectAllProducts')}\n                        </Typography>\n                      </Grid>\n                      {\n                        duplicateProductsGroup.map((duplicateProduct: IMap<Product>, productIndex) => {\n                          const productIsSelected = Boolean(rowStatuses.getIn([groupIndex, productIndex, 'isSelected']));\n                          return (\n                            <Grid key={productIndex} container={true} alignItems='center' wrap='nowrap'>\n                              <Grid container={true} alignItems='center' wrap='nowrap' item={true} xs={10}>\n                                <Checkbox\n                                  color='primary'\n                                  checked={productIsSelected}\n                                  onChange={(e, value) => handleProductCheck(value, groupIndex, productIndex)}\n                                />\n                                <Tooltip title={duplicateProduct.get('productNumber')}>\n                                  <Typography noWrap={true}>\n                                    {duplicateProduct.get('productNumber')}\n                                  </Typography>\n                                </Tooltip>\n                              </Grid>\n                              {\n                                productIsSelected && (\n                                  <Grid item={true} xs={2}>\n                                    <Radio\n                                      color='primary'\n                                      checked={Boolean(rowStatuses.getIn([groupIndex, productIndex, 'isPrimary']))}\n                                      onChange={() => handleProductPrimarySelect(groupIndex, productIndex)}\n                                    />\n                                  </Grid>\n                                )\n                              }\n                            </Grid>\n                          );\n                        })\n                      }\n                      <Grid container={true} justify='flex-end'>\n                        <Tooltip placement='top' title={childOrParentIsAtsUser ? '' : 'Please contact ATS for access'}>\n                          <span>\n                            <Button\n                              color='primary'\n                              className={classes.mergeButton}\n                              disabled={!childOrParentIsAtsUser || selectedCount < 2 || !hasPrimary}\n                              onClick={() => handleOpenMergeDialog(groupIndex)}\n                            >\n                              {t('MergeDuplicatesDialog.selectDuplicatesGroup')}\n                            </Button>\n                          </span>\n                        </Tooltip>\n                      </Grid>\n                    </Grid>\n                  </div>\n                </div>;\n              })\n            }\n          </div>\n        </div>\n      </Dialog>\n      <MergeProductsDialog\n        series={series}\n        initialPrimaryIndex={primaryIndex || 0}\n        setPrimaryIndex={setPrimaryIndex}\n        products={selectedProducts}\n        setSelectedProducts={setSelectedProducts}\n        open={isMergeDialogOpen}\n        onClose={() => setIsMergeDialogOpen(false)} />\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state: any, ownProps: any) => createStructuredSelector({\n  pimStatuses: makeSelectPimStatuses(),\n  hasPublishPermission: makeSelectHasPublishPermission(),\n  childOrParentIsAtsUser: makeSelectChildOrParentIsAtsUser(),\n  isGettingSeriesDuplicateProducts: makeSelectIsGettingSeriesDuplicateProducts(),\n  seriesDuplicateProducts: makeSelectSeriesDuplicateProducts(),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    updatePimSeriesDraft: (seriesId: number, pimStatus: string) => {\n      dispatch(new UpdatePimSeriesDraftAction({\n        seriesId,\n        seriesInfo: {\n          pimStatus\n        }\n      }));\n    },\n    openPublishDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: PUBLISH_DIALOG_ID,\n        open: true\n      }));\n    },\n    getSeriesDuplicateProductsById: (seriesId: number) => {\n      dispatch(new GetSeriesDuplicateProductsByIdAction({\n        seriesId,\n      }));\n    }\n  };\n};\n\nexport default compose<React.FC<ISeriesPublishStatusComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations')\n)(SeriesPublishStatus);","import * as React from 'react';\nimport { Grid, Typography, Theme, Tooltip, Button, Backdrop, Dialog, Divider, CircularProgress, IconButton } from '@material-ui/core';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { Image, StatusChipPim } from '../../../components';\nimport { IMap, IConfig } from 'ats-utils/src';\nimport { AclRoles, Product, Series } from '../../../models';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport SeriesPublishStatus from './SeriesPublishStatus';\nimport { List, Map } from 'immutable';\nimport { Currency, PIM_DRAFT_DETAIL_PATH, PIM_SERIES_DETAIL_PATH, SiteName } from '../../../constants';\nimport { compose } from 'redux';\nimport { connect, useSelector } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectChildOrParentIsAtsUser, makeSelectSite, makeSelectUserIsAtsUser, makeSelectUserRole } from '../../../modules/AtsModule/selectors';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport CurrencySelector from '../../../components/CurrencySelector';\nimport RegionFlags from '../../../components/_CellRenderers/RegionCell/RegionFlags';\nimport ImageViewer from '../../../components/ImageViewer';\nimport CheckIcon from '@material-ui/icons/Check';\nimport FlagIcon from '@material-ui/icons/Flag';\nimport DiscFullIcon from '@material-ui/icons/DiscFull';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { makeSelectIsGettingSeriesDuplicateProducts, makeSelectSeriesDuplicateProducts } from '../../../modules/PimModule/selectors';\n\ninterface ISeriesHeaderComponentProps {\n  series: IMap<Series>;\n  selectedCurrency: Currency;\n  setSelectedCurrency: (currency: Currency) => void;\n}\n\ninterface ISeriesHeaderProps extends ISeriesHeaderComponentProps {\n  userHasAtsUserAcl: boolean;\n  childOrParentIsAtsUser: boolean;\n  site: SiteName;\n}\n\ntype SeriesHeaderProps = ISeriesHeaderProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  headerContainer: {\n    padding: theme.spacing(2, 0.5),\n  },\n  headerText: {\n    paddingLeft: theme.spacing(2),\n  },\n  brandCategory: {\n    marginBottom: theme.spacing(1.5)\n  },\n  description: {\n    margin: theme.spacing(1, 0, 1.5)\n  },\n  statusChip: {\n    borderRadius: theme.shape.borderRadius,\n    background: '#74C2E6', // couldn't find the exact shade in our theme palette :(\n    textTransform: 'capitalize',\n  },\n  draftBadge: {\n    backgroundColor: '#EBDDDB',\n    color: '#DD4C39',\n    width: 78,\n    borderRadius: 100,\n    padding: '2px 0px',\n    fontSize: '13px',\n    textAlign: 'center'\n  },\n  chipContainer: {\n    borderRadius: theme.shape.borderRadius,\n    fontSize: '14px',\n    textTransform: 'uppercase',\n    minWidth: '100px',\n    padding: theme.spacing(0.75, 1.25),\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    backgroundColor: 'white'\n  },\n  selectRoot: {\n    padding: '4px 24px 4px 0'\n  },\n  backdrop: {\n    zIndex: theme.zIndex.drawer + 1,\n    color: '#fff',\n  },\n  icon: {\n    marginLeft: theme.spacing()\n  },\n  rootPadding: {\n    padding: theme.spacing(2)\n  },\n  productListGroups: {\n    maxHeight: 660,\n    overflowY: 'auto'\n  },\n  closeIcon: {\n    position: 'absolute',\n    top: 0,\n    right: 0,\n  },\n  bulkPriceContainer: {\n    width: 2,\n    height: '65%',\n    alignSelf: 'center',\n    marginLeft: theme.spacing(3),\n    marginRight: theme.spacing(3)\n  }\n});\n\nexport const getTestChipColor = (testStatus: string) => {\n  switch (testStatus) {\n    case 'Pending':\n      return {\n        backgroundColor: '#efdad8',\n        color: '#df6353'\n      };\n    case 'Verified':\n      return {\n        backgroundColor: '#d6d1e7',\n        color: '#784bda'\n      };\n    case 'VSB Ready':\n      return {\n        backgroundColor: '#d1e0e7',\n        color: '#2288ba'\n      };\n    case 'Complete':\n      return {\n        backgroundColor: '#dbe7db',\n        color: '#57a257'\n      };\n    default:\n      return {};\n  }\n};\n\nconst SeriesHeader: React.FC<SeriesHeaderProps> = ({classes, series = Map() as IMap<Series>, userHasAtsUserAcl, childOrParentIsAtsUser, selectedCurrency, t, setSelectedCurrency, site }): JSX.Element => {\n\n  const [isProductSelectionOpen, setIsProductSelectionOpen] = React.useState(false);\n  const isGettingSeriesDuplicateProducts = useSelector(makeSelectIsGettingSeriesDuplicateProducts());\n  const seriesDuplicateProducts = useSelector(makeSelectSeriesDuplicateProducts());\n\n  const imgSize = 120;\n  const mainId = series.getIn(['file', 'images', 'main', 'fileId']);\n  const mainName = series.getIn(['file', 'images', 'main', 'filename']);\n  const main = `${mainId}|fit:${imgSize},${imgSize}`;\n  const name = series.get('name') || '';\n  const description = series.get('description') || '';\n  const brand = series.get('brand') || '';\n  const categoryName = series.get('categoryName') || '';\n  const brandCategory = brand && categoryName ? `${brand} | ${categoryName}` : `${brand}${categoryName}`;\n  const isConfigurator = series.get('isConfigurator');\n  const seriesId = series.get('id');\n  const isDraft = series.get('draft');\n  const draftId = series.get('draftId');\n  const parentId = series.get('draftParentId');\n  const pimStatus = series.get('pimStatus');\n  const testStatus = series.get('testStatus');\n  const testChipStyle = getTestChipColor(testStatus);\n  const invalid = series.get('invalid');\n\n  const [open, setOpen] = React.useState(false);\n\n  const parentOrChildButton = () => {\n    if (draftId && !isDraft) {\n      return (\n        <Button color='primary' style={{ whiteSpace: 'nowrap' }} onClick={() => window.open(`${window.location.origin}${PIM_DRAFT_DETAIL_PATH}/${draftId}`, '_blank')}>\n          {t('SeriesDetailPage.draftAvailable')}\n        </Button>\n      );\n    } else if (parentId && isDraft) {\n      return (\n        <Button color='primary' style={{ whiteSpace: 'nowrap' }} onClick={() => window.open(`${window.location.origin}${PIM_SERIES_DETAIL_PATH}/${parentId}`, '_blank')}>\n          {t('SeriesDetailPage.viewPublishedVersion')}\n        </Button>\n      );\n    }\n  };\n\n  return (\n    <Grid\n      item={true}\n      container={true}\n      className={classes.headerContainer}\n    >\n      <ImageViewer\n        open={open}\n        setOpen={setOpen}\n        fileId={mainId}\n        fileName={mainName}\n      />\n      <Grid\n        container={true}\n        justify='space-between'\n        wrap='nowrap'\n      >\n        <Grid container={true} wrap='nowrap'>\n          <Grid item={true} style={{ cursor: 'pointer' }}>\n            <Tooltip title={mainName || ''}>\n              <div onClick={() => setOpen(true)}>\n                <Image\n                  src={main}\n                  width={`${imgSize}px`}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                  margin='0'\n                />\n              </div>\n            </Tooltip>\n          </Grid>\n          <Grid\n            item={true}\n            container={true}\n            direction='column'\n            justify='space-evenly'\n            className={classes.headerText}\n          >\n            <Grid item={true} container={true} justify='space-between' alignItems='center'>\n              <Grid>\n                <Typography color='textPrimary' className={classes.brandCategory}>{brandCategory}</Typography>\n              </Grid>\n              {site === SiteName.pim &&\n                <Grid item={true}>\n                  { parentOrChildButton() }\n                </Grid>\n              }\n            </Grid>\n            <Grid container={true} alignItems='center' spacing={2}>\n              {site === SiteName.pim &&\n                isDraft && <div className={classes.draftBadge}>\n                  { t('SeriesDetailPage.draftBadge') }\n                </div>\n              }\n              <Grid item={true}>\n                <Typography variant='h5'>{name}</Typography>\n              </Grid>\n              <Grid item={true}>\n                { isConfigurator\n                  ? <Tooltip title={t('SeriesDetailPage.advancedConfigurationTooltip')}>\n                      <WidgetsIcon />\n                    </Tooltip>\n                  : <Tooltip title={t('SeriesDetailPage.basicConfigurationTooltip')}>\n                      <AccountTreeIcon />\n                    </Tooltip>\n                }\n              </Grid>\n              <Grid item={true}>\n                <RegionFlags series={series} />\n              </Grid>\n              {site === SiteName.pim &&\n                <Grid item={true}>\n                  <StatusChipPim row={series} editable={isDraft} />\n                </Grid>\n              }\n              {site === SiteName.pim &&\n                userHasAtsUserAcl && (\n                  <Grid item={true}>\n                    <div className={classes.chipContainer} style={{ backgroundColor: testChipStyle.backgroundColor }}>\n                      <Typography variant='body2' style={{ color: testChipStyle.color }}>{testStatus || '-'}</Typography>\n                    </div>\n                  </Grid>\n                )\n              }\n              {!isDraft && invalid && childOrParentIsAtsUser && <Tooltip title={t('SeriesDetailPage.seriesContainsInvalidFlagTooltip')}><FlagIcon color='error'/></Tooltip>}\n              {\n                (isDraft || site === SiteName.pt)\n                  ? null\n                  : isGettingSeriesDuplicateProducts\n                      ? <CircularProgress size='1.4em' className={classes.icon} />\n                      : seriesDuplicateProducts?.count()\n                          ? <Tooltip title={t('SeriesDetailPage.viewDuplicationTooltip')}>\n                              <IconButton size='small' className={classes.icon} onClick={() => setIsProductSelectionOpen(true)}>\n                                <DiscFullIcon color='error' />\n                              </IconButton>\n                            </Tooltip>\n                          : null\n              }\n            </Grid>\n            <Grid className={classes.description}>\n              <Typography variant='body2' color='textPrimary'>{description}</Typography>\n            </Grid>\n            <Grid container={true} spacing={3}>\n              <Grid\n                item={true}\n              >\n                <CurrencySelector\n                  variant={'body1'}\n                  selectedCurrency={selectedCurrency}\n                  setSelectedCurrency={setSelectedCurrency}\n                  selectProps={{\n                    classes: { root: classes.selectRoot }\n                  }}\n                />\n              </Grid>\n              {\n                ['list', 'sell', 'cost'].map((priceType, index) => {\n                  const isPOA = series.getIn(['price', 'default', selectedCurrency, 'isPoa']);\n                  const isListPrice = priceType === 'list';\n                  return (\n                    <Grid key={index} item={true}>\n                      <Typography color='textPrimary' gutterBottom={true}>{isPOA && isListPrice ? t(`SeriesDetailPage.priceOnApplication`) : t(`SeriesDetailPage.${priceType}`)}</Typography>\n                      <Typography color='textSecondary' style={{ textAlign: (isPOA && isListPrice) ? 'center' : 'left' }}>{isPOA && isListPrice ? <CheckIcon color='primary'/> : series.getIn(['price', 'default', selectedCurrency, priceType])}</Typography>\n                    </Grid>\n                  );\n                })\n              }\n              {\n                site === SiteName.pim && <>\n                  <Divider orientation='vertical' className={classes.bulkPriceContainer} />\n                  {\n                    [\n                      {\n                        label: t(`SeriesDetailPage.skidUnit`),\n                        path: ['bulkPrice', 'skid', 'USD', 'quantity']\n                      },\n                      {\n                        label: t(`SeriesDetailPage.skidUnitPrice`),\n                        path: ['bulkPrice', 'skid', 'USD', 'price']\n                      },\n                      {\n                        label: t(`SeriesDetailPage.truckUnit`),\n                        path: ['bulkPrice', 'truck', 'USD', 'quantity']\n                      },\n                      {\n                        label: t(`SeriesDetailPage.truckUnitPrice`),\n                        path: ['bulkPrice', 'truck', 'USD', 'price']\n                      },\n                    ].map((bulkPrice, index) => {\n                      return (\n                        <Grid key={index} item={true}>\n                          <Typography color='textPrimary' gutterBottom={true}>{bulkPrice.label}</Typography>\n                          <Typography color='textSecondary' style={{textAlign: 'center'}}>{series.getIn(bulkPrice.path)}</Typography>\n                        </Grid>\n                      );\n                    })\n                  }\n                </>\n              }\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n      {\n        isDraft && site === SiteName.pim && <SeriesPublishStatus seriesId={seriesId} series={series} pimStatus={pimStatus} invalid={invalid}/>\n      }\n\n      <Dialog open={isProductSelectionOpen} onClose={() => setIsProductSelectionOpen(false)}>\n        <div style={{ width: 450 }}>\n          <div className={classes.rootPadding}>\n            <Typography variant='caption' display='block'>\n              {t('MergeDuplicatesDialog.followingProductsAreDuplicates')}\n            </Typography>\n            <IconButton onClick={() => setIsProductSelectionOpen(false)} className={classes.closeIcon}>\n              <CloseIcon />\n            </IconButton>\n          </div>\n          <Divider />\n          <Grid container={true} justify='space-between' className={classes.rootPadding}>\n            <Typography variant='caption' color='textPrimary'>\n              {t('pimProductDrawer.productNumber')}\n            </Typography>\n          </Grid>\n          <div className={classes.productListGroups}>\n            {\n              seriesDuplicateProducts?.map((duplicateProductsGroup: List<IMap<Product>>, groupIndex) => {\n                return <div key={groupIndex}>\n                  <Divider />\n                  <div key={groupIndex} className={classes.rootPadding}>\n                    <Grid container={true}>\n                      {\n                        duplicateProductsGroup.map((duplicateProduct: IMap<Product>, productIndex) => {\n                          return (\n                            <Grid key={productIndex} container={true} alignItems='center' wrap='nowrap'>\n                              <Grid container={true} alignItems='center' wrap='nowrap' item={true} xs={10}>\n                                <Tooltip title={duplicateProduct.get('productNumber')}>\n                                  <Typography noWrap={true}>\n                                    {duplicateProduct.get('productNumber')}\n                                  </Typography>\n                                </Tooltip>\n                              </Grid>\n                            </Grid>\n                          );\n                        })\n                      }\n                    </Grid>\n                  </div>\n                </div>;\n              })\n            }\n          </div>\n        </div>\n      </Dialog>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state: any) => createStructuredSelector({\n  userHasAtsUserAcl: makeSelectUserIsAtsUser(),\n  childOrParentIsAtsUser: makeSelectChildOrParentIsAtsUser(),\n  site: makeSelectSite(),\n})(state);\n\nexport default compose<React.FC<ISeriesHeaderComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, null)\n)(SeriesHeader);","import * as React from 'react';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { Series, Status } from '../../models';\nimport { WithStyles, StyleRules, withStyles } from '@material-ui/styles';\nimport { fromJS, getIn, List } from 'immutable';\nimport { Theme, Typography, Menu, MenuItem, ListItemText, Dialog, DialogContent, DialogContentText, DialogActions, Button, Tooltip } from '@material-ui/core';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { UpdatePimSeriesDraftAction, UpdatePIMProductDraftAction } from '../../modules/PimModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport classNames from 'classnames';\nimport i18next from 'i18next';\nimport { makeSelectPimStatuses } from '../../modules/ListModule/selectors';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { PUBLISH_DIALOG_ID } from '../../containers/PimSeriesListPage/PublishDialog';\nimport { makeSelectHasPublishPermission } from '../../modules/AtsModule/selectors';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { getTestChipColor } from '../../pages/SeriesDetailPage/SeriesHeader';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\n\n\n// generic Pim Status Chip Dropdown\n// made by @Jeffrey Xu\n\nconst styles = (theme: Theme): StyleRules => ({\n  chipContainer: {\n    borderRadius: theme.shape.borderRadius,\n    fontSize: '14px',\n    textTransform: 'uppercase',\n    width: '165px',\n    textAlign: 'center',\n    background: 'white'\n  },\n  chip: {\n    padding: '6px 10px',\n    backgroundColor: '#d9c4ec'\n  },\n  disabled: {\n    color: 'rgba(0, 0, 0, 0.3)'\n  },\n  primary: {\n    textTransform: 'capitalize'\n  },\n\n  ///// statuses /////\n  __1: { // active\n    background: getIn(theme.palette, ['status', 'inProgress'], 'none'),\n  },\n  __2: { // discontinued\n    background: getIn(theme.palette, ['status', 'missed'], 'none'),\n  },\n  __3: { // inactive\n    background: getIn(theme.palette, ['status', 'rejected'], 'none'),\n  },\n  __4: { // deleted\n    background: '#d4d4d4',\n  },\n\n  ///// testStatuses /////\n  // _2: { // Pending\n  //   backgroundColor: '#efdad8'\n  // },\n  // _1: { // Verified\n  //   backgroundColor: '#f0e9d2'\n  // },\n  // _4: { // VSB Ready\n  //   backgroundColor: '#d1e0e7'\n  // },\n  // _3: { // Complete\n  //   backgroundColor: '#dbe7db'\n  // },\n\n  ///// pimStatuses /////\n  _1: { // Draft\n    backgroundColor: '#efdad8'\n  },\n  _2: { // Pending For Approval\n    backgroundColor: '#f0e9d2'\n  },\n  _3: { // Approved\n    backgroundColor: '#d1e0e7'\n  },\n  _4: { // Changes Required\n    backgroundColor: '#d6d1e7'\n  },\n  _5: { // Publish\n    backgroundColor: getIn(theme.palette, ['status', 'completed'], 'none')\n  },\n\n  null: { // null\n    backgroundColor: '#d4d4d4'\n  }\n});\n\nexport const seriesStatusList = fromJS([\n  {\n    id: 1,\n    value: 'active',\n    labelPath: 'status.active'\n  },\n  {\n    id: 2,\n    value: 'discontinued',\n    labelPath: 'status.discontinued'\n  },\n  // {\n  //   id: 3,\n  //   value: 'inactive'\n  // },\n  {\n    id: 4,\n    value: 'deleted',\n    labelPath: 'status.deleted',\n    hide: true,\n  },\n  {\n    id: 6,\n    value: 'archived',\n    labelPath: 'status.archived'\n  },\n]);\n\nexport const SERIES_STATUS_VALUE_MAP = fromJS({\n  active: {\n    id: 1,\n    labelPath: 'status.active'\n  },\n  discontinued: {\n    id: 2,\n    labelPath: 'status.discontinued'\n  },\n  // inactive: {\n  //   id: 3,\n  //   labelPath: 'status.inactive'\n  // },\n  deleted: {\n    id: 4,\n    labelPath: 'status.deleted'\n  },\n  archived: {\n    id: 6,\n    labelPath: 'status.archived'\n  }\n});\n\ninterface IStatusChipPimComponentProps {\n  row: IMap<Series>;\n  type?: 'series' | 'product';\n  statusType?: 'status' | 'pimStatus' | 'testStatus';\n  marginAuto?: boolean;\n  editable?: boolean;\n  providedStatuses?: List<IMap<Status>>;\n  seriesInvalidStatus?: boolean;\n  seriesStatus?: string;\n}\n\ninterface IStatusChipPimProps extends IStatusChipPimComponentProps {\n  updatePimSeriesDraft: (seriesId: number, statusType: string, newStatus: string, onSuccess?: () => void, cascade?: boolean) => void;\n  updatePIMProductDraft: (productId: number, statusType: string, newStatus: string, onSuccess?: () => void) => void;\n  openPublishDialog: () => void;\n  pimStatuses: List<IMap<Status>>;\n  hasPublishPermission: boolean;\n}\n\ntype StatusChipPimProps = IStatusChipPimProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nconst StatusChipPim: React.FC<StatusChipPimProps> = (props) => {\n  const {\n    classes,\n    row,\n    updatePimSeriesDraft,\n    updatePIMProductDraft,\n    openPublishDialog,\n    type = 'series',\n    statusType = 'status',\n    marginAuto = false,\n    pimStatuses,\n    providedStatuses,\n    editable = true,\n    hasPublishPermission,\n    seriesInvalidStatus,\n    seriesStatus,\n    t,\n    amplitudeData\n  } = props;\n\n  const [menuState, setMenuState] = React.useState(null);\n  const [confirmationOpen, setConfirmationOpen] = React.useState(false);\n  const [statusValue, setStatusValue] = React.useState(null);\n\n  const isStatus = statusType === 'status';\n  const isTestStatus = statusType === 'testStatus';\n  const list = providedStatuses || (isStatus ? seriesStatusList : pimStatuses);\n\n  const isDeletedStatusSeries = seriesStatus === 'deleted';\n\n  const currentStatus = row.get(statusType);\n  const currentStatusMap = list && list.find((status: IMap<Status>) => status.get('value') === currentStatus);\n  const currentStatusClass = currentStatus\n    ? classes[`${isStatus ? '__' : '_'}${currentStatusMap && currentStatusMap.get('id')}`]\n    : classes.null;\n  const testChipStyle = isTestStatus ? getTestChipColor(currentStatus) : {};\n  const _statusLabel = SERIES_STATUS_VALUE_MAP.getIn([currentStatus, 'labelPath']);\n  const statusLabel = _statusLabel ? t(_statusLabel) : currentStatus;\n\n  const updatePimSeriesDraftWithAmplitude = (seriesId: number, _statusType: string, newStatus: string, cascade?: boolean) => {\n    const eventName = newStatus === 'deleted' ? AMPLITUDE_EVENT.seriesDeleted : newStatus === 'discontinued' ? AMPLITUDE_EVENT.seriesDiscontinued : null;\n    const sendAmplitudeOnDeleteOrDiscontinued = _statusType === 'status' && eventName ? () => {\n      amplitude.logEvent(eventName, amplitudeData({\n        seriesName: row.get('name'),\n        seriesId: row.get('id'),\n        manufacturerName: row.get('brand'),\n        categoryName: row.get('categoryName'),\n      }));\n    } : null;\n    updatePimSeriesDraft(seriesId, statusType, newStatus, sendAmplitudeOnDeleteOrDiscontinued, cascade);\n  };\n\n  return (\n    <>\n      <div className={classes.chipContainer} style={{ margin: marginAuto ? '0 auto' : 'initial', cursor: editable ? 'pointer' : 'initial' }}>\n        {isTestStatus\n          ? <div className={classes.chip} style={{ backgroundColor: testChipStyle.backgroundColor }}>\n              <Typography style={{ color: testChipStyle.color }}>{statusLabel || '-'}</Typography>\n            </div>\n          : <div\n              onClick={e => editable ? setMenuState(e.currentTarget) : null}\n              aria-owns={menuState ? 'change-status' : undefined}\n              className={classNames(classes.chip, currentStatusClass)}\n              onMouseDown={e => e.stopPropagation()}\n            >\n              <Typography>\n                {statusLabel || '-'}\n              </Typography>\n            </div>\n        }\n      </div>\n      <Menu\n        id='change-status'\n        anchorEl={menuState}\n        open={Boolean(menuState)}\n        onClose={e => setMenuState(null)}\n      >\n        {list.filter((_status) => !_status.get('hide')).map((status, index) => (\n          <Tooltip\n            key={index}\n            title={!isStatus && status.get('id') === 5\n                    ? !hasPublishPermission\n                      ? t('permissions.noPermissionTooltip')\n                      : seriesInvalidStatus\n                        ? t('pimProductList.flagTooltip')\n                        : ''\n                    : ''}\n          >\n            <MenuItem\n              onClick={(e) => {\n                if (type === 'series') {\n                  if (isStatus) {\n                    setStatusValue(status.get('value'));\n                    setConfirmationOpen(true);\n                  } else {\n                    if (status.get('id') === 5) {\n                      if (hasPublishPermission && !seriesInvalidStatus && !isDeletedStatusSeries) {\n                        openPublishDialog();\n                      }\n                    } else {\n                      updatePimSeriesDraft(row.get('id'), statusType, status.get('value'));\n                      setConfirmationOpen(false);\n                    }\n                  }\n                } else {\n                  const updatedStatus = status.get('value');\n                  const eventName = updatedStatus === 'deleted' ? AMPLITUDE_EVENT.productDeleted : updatedStatus === 'discontinued' ? AMPLITUDE_EVENT.productDiscontinued : null;\n                  const sendAmplitudeOnDeleteOrDiscontinued = statusType === 'status' && eventName ? () => {\n                    amplitude.logEvent(eventName, amplitudeData({\n                      seriesName: row.get('seriesName'),\n                      seriesId: row.get('series'),\n                      productName: row.get('productNumber'),\n                      productId: row.get('id'),\n                      manufacturerName: row.get('brand'),\n                      categoryName: row.get('categoryName'),\n                    }));\n                  } : null;\n                  updatePIMProductDraft(row.get('id'), statusType, updatedStatus, sendAmplitudeOnDeleteOrDiscontinued);\n                }\n                setMenuState(null);\n              }}\n            >\n              <ListItemText classes={{primary: classNames(classes.primary, (!hasPublishPermission || seriesInvalidStatus || isDeletedStatusSeries) && status.get('id') === 5 && !isStatus ? classes.disabled : '')}}\n                inset={false}\n                primary={status.get('value')}\n              />\n            </MenuItem>\n          </Tooltip>\n        ))}\n      </Menu>\n      <Dialog\n        open={confirmationOpen}\n        onClose={() => setConfirmationOpen(false)}\n        aria-labelledby='status-change-confirmation-dialog'\n        aria-describedby='confirmation for whether status change is isolated or applied to products under series with the same status'\n      >\n        <DialogContent>\n          <DialogContentText variant='h6' color='textPrimary'>\n            {i18next.t('translations:pimStatusChangePopup.confirmationMessage')}\n          </DialogContentText>\n        </DialogContent>\n        <DialogActions>\n          <Button color='primary' onClick={() => {\n            updatePimSeriesDraftWithAmplitude(row.get('id'), statusType, statusValue, true);\n            setConfirmationOpen(false);\n          }}>\n            {i18next.t('translations:pimStatusChangePopup.yes')}\n          </Button>\n          <Button color='primary' onClick={() => {\n            updatePimSeriesDraftWithAmplitude(row.get('id'), statusType, statusValue);\n            setConfirmationOpen(false);\n          }}>\n            {i18next.t('translations:pimStatusChangePopup.no')}\n          </Button>\n          <Button color='primary' onClick={() => setConfirmationOpen(false)}>\n            {i18next.t('translations:formButtons.cancel')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    updatePimSeriesDraft: (seriesId: number, statusType: string, newStatus: string, onSuccess?: () => void, cascade?: boolean) => {\n      dispatch(new UpdatePimSeriesDraftAction({\n        seriesId,\n        cascade,\n        seriesInfo: {\n          [statusType]: newStatus\n        },\n        onSuccess\n      }));\n    },\n    updatePIMProductDraft: (productId: number, statusType: string, newStatus: string, onSuccess?: () => void) => {\n      dispatch(new UpdatePIMProductDraftAction({\n        productId,\n        productInfo: {\n          [statusType]: newStatus\n        },\n        onSuccess\n      }));\n    },\n    openPublishDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: PUBLISH_DIALOG_ID,\n        open: true\n      }));\n    }\n  };\n};\n\nconst mapStateToProps = (state: any, ownProps: any) => createStructuredSelector({\n  pimStatuses: makeSelectPimStatuses(),\n  hasPublishPermission: makeSelectHasPublishPermission()\n})(state);\n\nexport default compose<React.ComponentClass<IStatusChipPimComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps)\n)(StatusChipPim);","import HasId from '../HasId';\n\nexport enum CriteriaStatus {\n  Created = 'Created',\n  InProgress = 'In Progress',\n  Completed = 'Completed',\n  Rejected = 'Rejected',\n}\n\nexport class BodyCriteria extends HasId {\n  public params: {\n    criteria?: string;\n    status?: CriteriaStatus;\n  };\n}\n\nexport default class Criteria extends HasId {\n  public criteria?: string;\n  public ordinance?: number;\n  public status?: CriteriaStatus;\n  public taskId?: number;\n\n  public constructor(init?: Partial<Criteria> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import {BOBRICK_CSI_MASTER_SPEC_FORM} from '../BobrickCSIMasterSpecBeta';\nimport {BOBRICK_PLANNING_GUIDE_FORM} from '../BobrickPlanningGuideBeta';\nimport {BORBRICK_CSI_MASTER_SPECS, BORBRICK_PLANNING_GUIDE, WATTS_CSI_MASTER_SPEC} from './constant';\nimport {IDownloadFormatItem} from './types';\n\ninterface IFormBackedFormat {\n    formName: string;\n    dataKey: string;\n    fields: string[];\n}\n\n// formats whose selection lives in redux-form fields instead of the format's `selected` flag;\n// dataKey is the entry in useDownloadViewData() holding the form values\nexport const FORM_BACKED_FORMATS: { [key: string]: IFormBackedFormat } = {\n    [BORBRICK_CSI_MASTER_SPECS]: {\n        formName: BOBRICK_CSI_MASTER_SPEC_FORM,\n        dataKey: 'bobrickCSIMasterSpec',\n        fields: ['traditionalSeriesPartition', 'evolvePartition', 'privadaPartition'],\n    },\n    [BORBRICK_PLANNING_GUIDE]: {\n        formName: BOBRICK_PLANNING_GUIDE_FORM,\n        dataKey: 'bobrickPlanningGuide',\n        fields: ['planningGuide'],\n    },\n};\n\n// the Watts CSI master spec row has no checkbox (different print flow) — excluded from all selection math\nexport const isSelectableFormat = (format: IDownloadFormatItem): boolean => format.key !== WATTS_CSI_MASTER_SPEC;\n\nconst countCheckedFields = (formBacked: IFormBackedFormat, data: any): number =>\n    formBacked.fields.filter((field) => data?.[formBacked.dataKey]?.get(field) === true).length;\n\nexport const getFormatChecked = (format: IDownloadFormatItem, data: any): boolean => {\n    const formBacked = FORM_BACKED_FORMATS[format.key];\n    if (formBacked) {\n        return countCheckedFields(formBacked, data) === formBacked.fields.length;\n    }\n    return Boolean(format.selected);\n};\n\nexport const getFormatPartiallyChecked = (format: IDownloadFormatItem, data: any): boolean => {\n    const formBacked = FORM_BACKED_FORMATS[format.key];\n    if (!formBacked) {\n        return false;\n    }\n    const checkedCount = countCheckedFields(formBacked, data);\n    return checkedCount > 0 && checkedCount < formBacked.fields.length;\n};\n\nexport const hasFormatSelection = (format: IDownloadFormatItem, data: any): boolean =>\n    getFormatChecked(format, data) || getFormatPartiallyChecked(format, data);\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric } from '../../types';\nimport { observe } from '../observe';\n\ndeclare global {\n  interface Performance {\n    interactionCount: number;\n  }\n}\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries: Metric['entries']): void => {\n  (entries as PerformanceEventTiming[]).forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po: PerformanceObserver | undefined;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = (): number => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = (): void => {\n  if ('interactionCount' in performance || po) return;\n\n  po = observe('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } as PerformanceObserverInit);\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onINP } from './web-vitals/getINP';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\nimport { onTTFB } from './web-vitals/onTTFB';\n\ntype InstrumentHandlerTypePerformanceObserver =\n  | 'longtask'\n  | 'event'\n  | 'navigation'\n  | 'paint'\n  | 'resource'\n  | 'first-input';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid' | 'ttfb' | 'inp';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n  readonly duration: number;\n  readonly entryType: string;\n  readonly name: string;\n  readonly startTime: number;\n  toJSON(): Record<string, unknown>;\n}\ninterface PerformanceEventTiming extends PerformanceEntry {\n  processingStart: number;\n  processingEnd: number;\n  duration: number;\n  cancelable?: boolean;\n  target?: unknown | null;\n  interactionId?: number;\n}\n\ninterface Metric {\n  /**\n   * The name of the metric (in acronym form).\n   */\n  name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * The delta between the current value and the last-reported value.\n   * On the first report, `delta` and `value` will always be the same.\n   */\n  delta: number;\n\n  /**\n   * A unique ID representing this particular metric instance. This ID can\n   * be used by an analytics tool to dedupe multiple values sent for the same\n   * metric instance, or to group multiple deltas together and calculate a\n   * total. It can also be used to differentiate multiple different metric\n   * instances sent from the same page, which can happen if the page is\n   * restored from the back/forward cache (in that case new metrics object\n   * get created).\n   */\n  id: string;\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[];\n\n  /**\n   * The type of navigation\n   *\n   * Navigation Timing API (or `undefined` if the browser doesn't\n   * support that API). For pages that are restored from the bfcache, this\n   * value will be 'back-forward-cache'.\n   */\n  navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\nlet _previousTtfb: Metric | undefined;\nlet _previousInp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nexport function addTtfbInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addInpInstrumentationHandler(\n  callback: (data: { metric: Omit<Metric, 'entries'> & { entries: PerformanceEventTiming[] } }) => void,\n): CleanupHandlerCallback {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\nexport function addPerformanceInstrumentationHandler(\n  type: 'event' | 'first-input',\n  callback: (data: { entries: ((PerformanceEntry & { target?: unknown | null }) | PerformanceEventTiming)[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers || !typeHandlers.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls(): StopListening {\n  return onCLS(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid(): void {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp(): StopListening {\n  return onLCP(metric => {\n    triggerHandlers('lcp', {\n      metric,\n    });\n    _previousLcp = metric;\n  });\n}\n\nfunction instrumentTtfb(): StopListening {\n  return onTTFB(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp(): void {\n  return onINP(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type: InstrumentHandlerTypeMetric,\n  callback: InstrumentHandlerCallback,\n  instrumentFn: () => StopListening,\n  previousValue: Metric | undefined,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  let stopListening: StopListening | undefined;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n  const options: PerformanceObserverInit = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type: InstrumentHandlerType,\n  callback: InstrumentHandlerCallback,\n  stopListening: StopListening,\n): CleanupHandlerCallback {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n  callback: ReportCallback,\n  metric: Metric,\n  reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n  let prevValue: number;\n  let delta: number;\n  return (forceReport?: boolean) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n  const navEntry = getNavigationEntry();\n  let navigationType: Metric['navigationType'] = 'navigate';\n\n  if (navEntry) {\n    if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else {\n      navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n    }\n  }\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good', // Will be updated if the value changes.\n    delta: 0,\n    entries: [],\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n  (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n  event: PerformanceEventTiming[];\n  paint: PerformancePaintTiming[];\n  'layout-shift': LayoutShift[];\n  'largest-contentful-paint': LargestContentfulPaint[];\n  'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n  navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n  resource: PerformanceResourceTiming[];\n  longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n  type: K,\n  callback: (entries: PerformanceEntryMap[K]) => void,\n  opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        callback(list.getEntries() as PerformanceEntryMap[K]);\n      });\n      po.observe({\n        type,\n        buffered: true,\n        ...opts,\n      } as PerformanceObserverInit);\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { getInteractionCount, initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { INPMetric } from './types/inp';\n\ninterface Interaction {\n  id: number;\n  latency: number;\n  entries: PerformanceEventTiming[];\n}\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = (): number => {\n  return getInteractionCount();\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList: Interaction[] = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap: { [interactionId: string]: Interaction } = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry: PerformanceEventTiming): void => {\n  // The least-long of the 10 longest interactions.\n  const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const existingInteraction = longestInteractionMap[entry.interactionId!];\n\n  // Only process the entry if it's possibly one of the ten longest,\n  // or if it's part of an existing interaction.\n  if (\n    existingInteraction ||\n    longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n    entry.duration > minLongestInteraction.latency\n  ) {\n    // If the interaction already exists, update it. Otherwise create one.\n    if (existingInteraction) {\n      existingInteraction.entries.push(entry);\n      existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n    } else {\n      const interaction = {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        id: entry.interactionId!,\n        latency: entry.duration,\n        entries: [entry],\n      };\n      longestInteractionMap[interaction.id] = interaction;\n      longestInteractionList.push(interaction);\n    }\n\n    // Sort the entries by latency (descending) and keep only the top ten.\n    longestInteractionList.sort((a, b) => b.latency - a.latency);\n    longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete longestInteractionMap[i.id];\n    });\n  }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = (): Interaction => {\n  const candidateInteractionIndex = Math.min(\n    longestInteractionList.length - 1,\n    Math.floor(getInteractionCountForNavigation() / 50),\n  );\n\n  return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/responsiveness/) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/inp/#what-is-a-good-inp-score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport: ReportCallback, opts?: ReportOpts): void => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/inp/#what's-a-%22good%22-inp-value\n  // const thresholds = [200, 500];\n\n  // TODO(philipwalton): remove once the polyfill is no longer needed.\n  initInteractionCountPolyfill();\n\n  const metric = initMetric('INP');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: INPMetric['entries']): void => {\n    entries.forEach(entry => {\n      if (entry.interactionId) {\n        processEntry(entry);\n      }\n\n      // Entries of type `first-input` don't currently have an `interactionId`,\n      // so to consider them in INP we have to first check that an existing\n      // entry doesn't match the `duration` and `startTime`.\n      // Note that this logic assumes that `event` entries are dispatched\n      // before `first-input` entries. This is true in Chrome but it is not\n      // true in Firefox; however, Firefox doesn't support interactionId, so\n      // it's not an issue at the moment.\n      // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n      if (entry.entryType === 'first-input') {\n        const noMatchingEntry = !longestInteractionList.some(interaction => {\n          return interaction.entries.some(prevEntry => {\n            return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n          });\n        });\n        if (noMatchingEntry) {\n          processEntry(entry);\n        }\n      }\n    });\n\n    const inp = estimateP98LongestInteraction();\n\n    if (inp && inp.latency !== metric.value) {\n      metric.value = inp.latency;\n      metric.entries = inp.entries;\n      report();\n    }\n  };\n\n  const po = observe('event', handleEntries, {\n    // Event Timing entries have their durations rounded to the nearest 8ms,\n    // so a duration of 40ms would be any event that spans 2.5 or more frames\n    // at 60Hz. This threshold is chosen to strike a balance between usefulness\n    // and performance. Running this callback for any interaction that spans\n    // just one or two frames is likely not worth the insight that could be\n    // gained.\n    durationThreshold: opts.durationThreshold || 40,\n  } as PerformanceObserverInit);\n\n  report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  if (po) {\n    // Also observe entries of type `first-input`. This is useful in cases\n    // where the first interaction is less than the `durationThreshold`.\n    po.observe({ type: 'first-input', buffered: true });\n\n    onHidden(() => {\n      handleEntries(po.takeRecords() as INPMetric['entries']);\n\n      // If the interaction count shows that there were interactions but\n      // none were captured by the PerformanceObserver, report a latency of 0.\n      if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n        metric.value = 0;\n        metric.entries = [];\n      }\n\n      report(true);\n    });\n  }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('LCP');\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: LCPMetric['entries']): void => {\n    const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n    if (lastEntry) {\n      // The startTime attribute returns the value of the renderTime if it is\n      // not 0, and the value of the loadTime otherwise. The activationStart\n      // reference is used because LCP should be relative to page activation\n      // rather than navigation start if the page was prerendered.\n      const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n      // Only report if the page wasn't hidden prior to LCP.\n      if (value < visibilityWatcher.firstHiddenTime) {\n        metric.value = value;\n        metric.entries = [lastEntry];\n        report();\n      }\n    }\n  };\n\n  const po = observe('largest-contentful-paint', handleEntries);\n\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      if (!reportedMetricIDs[metric.id]) {\n        handleEntries(po.takeRecords() as LCPMetric['entries']);\n        po.disconnect();\n        reportedMetricIDs[metric.id] = true;\n        report(true);\n      }\n    };\n\n    // Stop listening after input. Note: while scrolling is an input that\n    // stop LCP observation, it's unreliable since it can be programmatically\n    // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n    ['keydown', 'click'].forEach(type => {\n      if (WINDOW.document) {\n        addEventListener(type, stopListening, { once: true, capture: true });\n      }\n    });\n\n    onHidden(stopListening, true);\n\n    return stopListening;\n  }\n\n  return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getNavigationEntry } from './lib/getNavigationEntry';\nimport { initMetric } from './lib/initMetric';\nimport type { ReportCallback, ReportOpts } from './types';\nimport type { TTFBMetric } from './types/ttfb';\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback: () => void): void => {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  if (WINDOW.document.prerendering) {\n    addEventListener('prerenderingchange', () => whenReady(callback), true);\n  } else if (WINDOW.document.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback, 0);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/time-to-first-byte/) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport: ReportCallback, opts?: ReportOpts): void => {\n  // Set defaults\n  // eslint-disable-next-line no-param-reassign\n  opts = opts || {};\n\n  // https://web.dev/ttfb/#what-is-a-good-ttfb-score\n  // const thresholds = [800, 1800];\n\n  const metric = initMetric('TTFB');\n  const report = bindReporter(onReport, metric, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navEntry = getNavigationEntry() as TTFBMetric['entries'][number];\n\n    if (navEntry) {\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(navEntry.responseStart - getActivationStart(), 0);\n\n      // In some cases the value reported is negative or is larger\n      // than the current page time. Ignore these cases:\n      // https://github.com/GoogleChrome/web-vitals/issues/137\n      // https://github.com/GoogleChrome/web-vitals/issues/162\n      if (metric.value < 0 || metric.value > performance.now()) return;\n\n      metric.entries = [navEntry];\n\n      report(true);\n    }\n  });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (\n  onReport: ReportCallback,\n  options: { reportAllChanges?: boolean } = {},\n): StopListening | undefined => {\n  const metric = initMetric('CLS', 0);\n  let report: ReturnType<typeof bindReporter>;\n\n  let sessionValue = 0;\n  let sessionEntries: PerformanceEntry[] = [];\n\n  // const handleEntries = (entries: Metric['entries']) => {\n  const handleEntries = (entries: LayoutShift[]): void => {\n    entries.forEach(entry => {\n      // Only count layout shifts without recent user input.\n      if (!entry.hadRecentInput) {\n        const firstSessionEntry = sessionEntries[0];\n        const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n        // If the entry occurred less than 1 second after the previous entry and\n        // less than 5 seconds after the first entry in the session, include the\n        // entry in the current session. Otherwise, start a new session.\n        if (\n          sessionValue &&\n          sessionEntries.length !== 0 &&\n          entry.startTime - lastSessionEntry.startTime < 1000 &&\n          entry.startTime - firstSessionEntry.startTime < 5000\n        ) {\n          sessionValue += entry.value;\n          sessionEntries.push(entry);\n        } else {\n          sessionValue = entry.value;\n          sessionEntries = [entry];\n        }\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          if (report) {\n            report();\n          }\n        }\n      }\n    });\n  };\n\n  const po = observe('layout-shift', handleEntries);\n  if (po) {\n    report = bindReporter(onReport, metric, options.reportAllChanges);\n\n    const stopListening = (): void => {\n      handleEntries(po.takeRecords() as CLSMetric['entries']);\n      report(true);\n    };\n\n    onHidden(stopListening);\n\n    return stopListening;\n  }\n\n  return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('FID');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntry = (entry: PerformanceEventTiming): void => {\n    // Only report if the page wasn't hidden prior to the first input.\n    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n      metric.value = entry.processingStart - entry.startTime;\n      metric.entries.push(entry);\n      report(true);\n    }\n  };\n\n  const handleEntries = (entries: FIDMetric['entries']): void => {\n    (entries as PerformanceEventTiming[]).forEach(handleEntry);\n  };\n\n  const po = observe('first-input', handleEntries);\n  report = bindReporter(onReport, metric);\n\n  if (po) {\n    onHidden(() => {\n      handleEntries(po.takeRecords() as FIDMetric['entries']);\n      po.disconnect();\n    }, true);\n  }\n};\n","import * as React from 'react';\nimport { WithStyles, StyleRules, withStyles } from '@material-ui/styles';\nimport { Theme, RootRef, Grid, Paper } from '@material-ui/core';\nimport { STYLE_WIDGET_MARGIN } from '../../modules/DashboardModule/constants';\n\ninterface IWidgetWrapperProps {\n  gridProps?: any;\n  rootRef?: React.RefObject<any>;\n  noFlex?: boolean;\n}\n\ntype WidgetWrapperProps = IWidgetWrapperProps & WithStyles<keyof ReturnType<typeof styles>>;\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  widgetStyle: {\n    padding: STYLE_WIDGET_MARGIN,\n  },\n  widgetStylePaper: {\n    flex: '1 0 0',\n    width: '100%',\n    padding: theme.spacing(2),\n  },\n});\n\n\nconst WidgetWrapper: React.FC<WidgetWrapperProps> = (props): JSX.Element => {\n  const {\n    children,\n    gridProps,\n    rootRef,\n    classes,\n    noFlex,\n  } = props;\n\n  const widgetWrapperInner = (\n    <Grid\n      item={true}\n      container={true}\n      direction='column'\n      xs={12}\n      {...gridProps}\n      className={classes.widgetStyle}\n    >\n      <Paper\n        elevation={0}\n        classes={{\n          root: classes.widgetStylePaper\n        }}\n        style={{\n          ...noFlex ? {flex: 'none'} : {}\n        }}\n      >\n        {children}\n      </Paper>\n    </Grid>\n  );\n\n  if (!rootRef) {\n    return widgetWrapperInner;\n  }\n\n  return (\n    <RootRef rootRef={rootRef}>\n      {widgetWrapperInner}\n    </RootRef>\n  );\n};\n\nexport default withStyles(styles)(WidgetWrapper);","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {\n  Button,\n  Drawer,\n  Grid,\n  IconButton,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { List, Map } from 'immutable';\nimport { IMap, IAction } from 'ats-utils/src';\nimport {\n  Manufacturer,\n  User,\n  Category,\n  Option,\n  Product,\n  SearchArgs,\n} from '../../../models';\nimport {\n  SearchUsersQuickByOfficeIdAction,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectUsers,\n} from '../../../modules/AccountModule/selectors';\nimport { makeSelectIsChildFirm, makeSelectIsSuperFirm, makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n} from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  dateValidateFunc,\n  isValidMomentDate\n} from '../../../validators';\nimport { FieldAutocomplete, FieldCheckbox } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { IFieldDatePickerV2CustomProps } from '../../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../FieldDatePickerV2';\nimport { formatDateRangeFilter } from '../../../containers/ProjectList/ProjectListFilter';\nimport {seriesStatusList} from '../../StatusChipPim/Component';\nimport { IFieldCheckboxComponentProps } from '../../FieldCheckbox';\nimport { GetAllCategoriesAction, GetAllManufacturersAction } from '../../../modules/ListModule/actions';\nimport { makeSelectAllCategories, makeSelectAllManufacturers } from '../../../modules/ListModule/selectors';\nimport { capitalize } from 'lodash';\nimport { GetFirmProductCategoriesAction, GetFirmProductManufacturersAction } from '../../../modules/PimModule/actions';\nimport { makeSelectFirmProductCategories, makeSelectFirmProductManufacturers, makeSelectIsFetchingFirmProductCategories } from '../../../modules/PimModule/selectors';\nimport { normalizeExclusiveCheckbox } from '../productFilterUtils';\n\nexport const PRODUCT_LIST_FILTER_FORM = 'ProductListFilters';\nexport const PARENT_PRODUCT_LIST_FILTER_FORM = 'ParentProductListFilters';\n\nconst dateModifiedValidateFunc = (value, allValues) => dateValidateFunc('firmProduct😈dateModified', allValues);\nconst dateAddedValidateFunc = (value, allValues) => dateValidateFunc('firmProduct😈dateAdded', allValues);\n\ninterface IProductListFilterComponentProps {\n  formName?: string;\n  open: boolean;\n  options: Option<Product>;\n  setSearchArgsAndSearch: (arg: SearchArgs<Product>) => void;\n  toggleDrawer: () => void;\n  resetProductsSelection: () => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IProductListFilter extends IProductListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n  theme: Theme;\n\n  getCategories: (isQuoteConnect: boolean, manufacturerIds?: string) => void;\n  getManufacturers: (isQuoteConnect: boolean) => void;\n  searchUsers: (searchTerm: string, officeId: number) => void;\n\n  formValues: Map<string, any>;\n  officeUsers: List<IMap<User>>;\n  signedInUserOfficeId: number;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  isSuperFirm: boolean;\n  isChildFirm: boolean;\n  isFetchingFirmProductCategories: boolean;\n\n  isQuoteConnect: boolean;\n}\n\ntype IProductListFilterType = IProductListFilter & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ProductsListFilter extends React.PureComponent<IProductListFilterType, {}> {\n  public state = {\n    currentSelection: null,\n    modifiedByUserInput: '',\n  };\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      getCategories,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      this.getFilterData();\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n\n    const brandsFilter = formValues?.getIn(['brand', 'in']);\n    if (brandsFilter?.length !== prevProps.formValues?.getIn(['brand', 'in'])?.length) {\n      const manufacturerIds = brandsFilter?.map((brand) => brand.id)?.join(',');\n      getCategories(this.props.isQuoteConnect, manufacturerIds);\n    }\n  }\n\n  public getFilterData = () => {\n    const {\n      searchUsers,\n      getManufacturers,\n      getCategories,\n      signedInUserOfficeId,\n      isQuoteConnect,\n      formValues,\n      formName,\n    } = this.props;\n\n    if (formName === PRODUCT_LIST_FILTER_FORM) {\n      searchUsers('', signedInUserOfficeId);\n    }\n    getManufacturers(isQuoteConnect);\n    getCategories(isQuoteConnect, formValues?.getIn(['brand', 'in'])?.map((brand) => brand.id)?.join(','));\n  }\n\n  public toggleDrawer = (open) => () => {\n    this.setState({\n      isDrawerOpened: open,\n    });\n  }\n\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n      resetProductsSelection\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const modifiedBy = ctx.getIn(['modifiedBy😈user😈id', 'in']);\n        const manufacturers = ctx.getIn(['brand', 'in']);\n        const categories = ctx.getIn(['categoryName', 'in']);\n        const status = ctx.getIn(['status', 'in']);\n\n        if (modifiedBy?.length) {\n          ctx.setIn(['modifiedBy😈user😈id', 'in'], modifiedBy.map((by) => by.id));\n        } else {\n          ctx.delete('modifiedBy😈user😈id');\n        }\n        if (manufacturers?.length) {\n          ctx.setIn(['brand', 'in'], manufacturers.map((manufacturer) => manufacturer.value));\n        } else {\n          ctx.delete('brand');\n        }\n        if (categories?.length) {\n          ctx.setIn(['categoryName', 'in'], categories.map((category) => category.value));\n        } else {\n          ctx.delete('categoryName');\n        }\n        if (status?.length) {\n          ctx.setIn(['status', 'in'], status.map((s) => s.value));\n        } else {\n          ctx.delete('status');\n        }\n\n        const dateModified = ctx.get('firmProduct😈dateModified');\n        const formatedDateModified = dateModified && formatDateRangeFilter(dateModified);\n        if (formatedDateModified) {\n          ctx.set('firmProduct😈dateModified', formatedDateModified);\n        } else if (dateModified) {\n          ctx.delete('firmProduct😈dateModified');\n        }\n\n        const dateAdded = ctx.get('firmProduct😈dateAdded');\n        const formatedDateAdded = dateAdded && formatDateRangeFilter(dateAdded);\n        if (formatedDateAdded) {\n          ctx.set('firmProduct😈dateAdded', formatedDateAdded);\n        } else if (dateAdded) {\n          ctx.delete('firmProduct😈dateAdded');\n        }\n\n        normalizeExclusiveCheckbox(ctx, 'sharedProduct');\n        normalizeExclusiveCheckbox(ctx, 'productSharedWithMe');\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .mapKeys((key) => {\n          return key.replace(new RegExp('😈', 'g'), '.');\n        })\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.getIn([key[0], 'eq']) !== null;\n        });\n\n      const filters = valuesWithParsedKeys.size\n                        ? { 'and': valuesWithParsedKeys.toJS() }\n                        : { 'and': []};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n      resetProductsSelection();\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      setSearchArgsAndSearch,\n      resetProductsSelection,\n      setUniqueKey,\n      formName,\n    } = this.props;\n\n    dispatch(reset(formName || PRODUCT_LIST_FILTER_FORM));\n    this.setState({\n      currentSelection: null\n    });\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n    resetProductsSelection();\n  }\n\n  public renderCheckboxFilterSection = (\n    titleKey: string,\n    eqName: string,\n    eqLabelKey: string,\n    neqName: string,\n    neqLabelKey: string,\n  ) => {\n    const { classes, t } = this.props;\n    return (\n      <>\n        <Typography\n          variant='caption'\n          className={classes.subtitle}\n        >\n          {t(titleKey)}\n        </Typography>\n        <Grid\n          container={true}\n          justify='space-evenly'\n          item={true}\n          xs={12}\n        >\n          <Grid\n            item={true}\n            xs={6}\n          >\n            <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n              name={eqName}\n              component={FieldCheckbox}\n              props={{\n                label: t(eqLabelKey),\n                color: 'primary',\n                inputProps: {\n                  classes: {\n                    root: classes.checkbox\n                  }\n                }\n              }}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            xs={6}\n          >\n            <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n              name={neqName}\n              component={FieldCheckbox}\n              props={{\n                label: t(neqLabelKey),\n                color: 'primary',\n                inputProps: {\n                  classes: {\n                    root: classes.checkbox\n                  }\n                }\n              }}\n            />\n          </Grid>\n        </Grid>\n      </>\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      open,\n      toggleDrawer,\n      officeUsers,\n      handleSubmit,\n      categories,\n      manufacturers,\n      signedInUserOfficeId,\n      searchUsers,\n      uniqueKey,\n      isFetchingFirmProductCategories,\n      isSuperFirm,\n      isChildFirm,\n      formName,\n      t,\n    } = this.props;\n\n    const isProductForm = formName === PRODUCT_LIST_FILTER_FORM;\n\n    // Only the product form renders the \"modified by\" autocomplete that consumes this list.\n    const usersListItem = isProductForm\n      ? officeUsers.reduce((acc, user: IMap<User>) => {\n        const userId = user.get('id');\n        const firstName = user.get('firstName');\n        const lastName = user.get('lastName');\n        const listItem = Map().withMutations((immutableMap) => {\n          immutableMap.set('id', userId),\n          immutableMap.set('value', `${firstName} ${lastName}`);\n        });\n\n        return acc.push(listItem);\n      }, List())\n      : List();\n    return (\n      <React.Fragment>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Header */}\n            <Grid\n              className={classes.header}\n              container={true}\n              justify='space-between'\n              alignItems='center'\n            >\n              <Typography\n                variant='h5'\n              >\n                {t('generalListFilter.title')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='flex-end'\n                item={true}\n                xs={6}\n              >\n                <Button\n                  color='primary'\n                  onClick={this.handleResetForm}\n                >\n                  {t('generalListFilter.reset')}\n                </Button>\n                <IconButton\n                  onClick={toggleDrawer}\n                >\n                  <CloseIcon />\n                </IconButton>\n              </Grid>\n            </Grid>\n\n            {/* Content */}\n\n            {/* shared library filter (own firm vs shared products) */}\n            {\n              (isSuperFirm || isChildFirm) && isProductForm &&\n              this.renderCheckboxFilterSection(\n                'firmProductListFilter.sharedLibraryLabel',\n                'sharedProduct.eq', 'firmProductListFilter.sharedCheckboxLabel',\n                'sharedProduct.neq', 'firmProductListFilter.ownFirmCheckboxLabel',\n              )\n            }\n\n            {/* added-to-firm-library filter (parent products shared with this firm) */}\n            {\n              formName === PARENT_PRODUCT_LIST_FILTER_FORM &&\n              this.renderCheckboxFilterSection(\n                'firmProductListFilter.addedToFirmLibraryLabel',\n                'productSharedWithMe.eq', 'firmProductListFilter.addedToFirmLibraryCheckboxLabel',\n                'productSharedWithMe.neq', 'firmProductListFilter.notAddedToFirmLibraryCheckboxLabel',\n              )\n            }\n\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* manufacturer */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.manufacturerTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='brand.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        multiple: true,\n                        placeholder: t('generalListFilter.manufacturerPlaceholder'),\n                        options: manufacturers.toJS(),\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* category */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.categoryTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='categoryName.in'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        multiple: true,\n                        placeholder: t('generalListFilter.categoryPlaceholder'),\n                        options: isFetchingFirmProductCategories ? [] : categories?.toJS(),\n                        loading: isFetchingFirmProductCategories,\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? (option.label || option.value) : null,\n                        renderOption: option => option && <Typography>{option.label || option.value}</Typography>,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Update date, created date and modified-by only apply to the firm's own product list */}\n              {\n                isProductForm && <>\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.updatedDate')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    alignItems='center'\n                    wrap='nowrap'\n                    item={true}\n                    xs={12}\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                        name={'firmProduct😈dateModified.gte'}\n                        props={{\n                          timeOfDay: 'start',\n                          keyboardDatePickerProps: {\n                            placeholder: t('generalListFilter.startBy'),\n                            className: classes.dateInput\n                          },\n                          formControlProps: {\n                            fullWidth: true,\n                          },\n                        }}\n                        validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                        component={FieldDatePickerV2}\n                      />\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                    >\n                      <Typography\n                        variant='caption'\n                        className={classes.subtitle}\n                      >\n                        {t('generalListFilter.to')}\n                      </Typography>\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                        name={'firmProduct😈dateModified.lte'}\n                        props={{\n                          timeOfDay: 'end',\n                          keyboardDatePickerProps: {\n                            placeholder: t('generalListFilter.endBy'),\n                            className: classes.dateInput\n                          },\n                          formControlProps: {\n                            fullWidth: true,\n                          },\n                        }}\n                        validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                        component={FieldDatePickerV2}\n                      />\n                    </Grid>\n                  </Grid>\n\n                  {/* date added */}\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.createdDate')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    alignItems='center'\n                    wrap='nowrap'\n                    item={true}\n                    xs={12}\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                    >\n                      <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                        name={'firmProduct😈dateAdded.gte'}\n                        props={{\n                          keyboardDatePickerProps: {\n                            placeholder: t('generalListFilter.startBy'),\n                            className: classes.dateInput\n                          },\n                          timeOfDay: 'start',\n                          formControlProps: {\n                            fullWidth: true,\n                          },\n                        }}\n                        validate={[isValidMomentDate, dateAddedValidateFunc]}\n                        component={FieldDatePickerV2}\n                      />\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                    >\n                      <Typography\n                        variant='caption'\n                        className={classes.subtitle}\n                      >\n                        {t('generalListFilter.to')}\n                      </Typography>\n                    </Grid>\n\n                    <Grid\n                      item={true}\n                    >\n                      <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                        name={'firmProduct😈dateAdded.lte'}\n                        props={{\n                          keyboardDatePickerProps: {\n                            placeholder: t('generalListFilter.endBy'),\n                            className: classes.dateInput\n                          },\n                          timeOfDay: 'end',\n                          formControlProps: {\n                            fullWidth: true,\n                          },\n                        }}\n                        validate={[isValidMomentDate, dateAddedValidateFunc]}\n                        component={FieldDatePickerV2}\n                      />\n                    </Grid>\n                  </Grid>\n\n                  {/* modified by */}\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.updatedByTitle')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    item={true}\n                    xs={12}\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                      xs={12}\n                    >\n                      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                        name='modifiedBy😈user😈id.in'\n                        component={FieldAutocomplete}\n                        props={{\n                          inputProps: {\n                            multiple: true,\n                            placeholder: t('generalListFilter.updatedByPlaceholder'),\n                            options: usersListItem.toJS(),\n                            inputValue: this.state.modifiedByUserInput,\n                            getOptionSelected: (option, value) => option.id === value.id,\n                            filterSelectedOptions: true,\n                            getOptionLabel: option => option ? option.value : null,\n                            renderOption: option => option && <Typography>{option.value}</Typography>,\n                            onInputChange: (event: object, val: string, reason: string) => {\n                              if (reason === 'input') {\n                                searchUsers(val, signedInUserOfficeId);\n                              }\n                              // have to set the inputValue like below to prevent it from resetting\n                              if (reason !== 'reset' || (reason === 'reset' && event)) {\n                                this.setState({ modifiedByUserInput: val });\n                              }\n                            },\n                          },\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                      />\n                    </Grid>\n                  </Grid>\n                </>\n              }\n\n              {/* Status */}\n              <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n              >\n                {t('generalListFilter.statusTitle')}\n              </Typography>\n              <Grid\n                  container={true}\n                  item={true}\n                  spacing={2}\n                  xs={12}\n              >\n                <Grid\n                    item={true}\n                    xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                      name='status.in'\n                      component={FieldAutocomplete}\n                      props={{\n                        textField_inputProps: {\n                          style: { textTransform: 'capitalize'},\n                        },\n                        inputProps: {\n                          multiple: true,\n                          placeholder: t('generalListFilter.statusPlaceholder'),\n                          options: seriesStatusList.toJS().filter(status => status.id === 1 || status.id === 2),\n                          getOptionSelected: (option, value) => option.id === value.id,\n                          filterSelectedOptions: true,\n                          getOptionLabel: option => option ? t(option.labelPath) : null,\n                          renderOption: option => option && <Typography>{t(option.labelPath)}</Typography>,\n                        },\n                        formControlProps: {\n                          fullWidth: true\n                        }\n                      }}\n                  />\n                </Grid>\n              </Grid>\n            </Grid>\n          </form>\n        </Drawer>\n      </React.Fragment>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n\n  const form = ownProps.formName != null ? ownProps.formName : PRODUCT_LIST_FILTER_FORM;\n  const isQuoteConnect = ownProps.isQuoteConnect;\n\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      officeUsers: makeSelectUsers(),\n      categories: isQuoteConnect ? makeSelectAllCategories() : makeSelectFirmProductCategories(),\n      manufacturers: isQuoteConnect ? makeSelectAllManufacturers() : makeSelectFirmProductManufacturers(),\n      signedInUserOfficeId: makeSelectUserOfficeId(),\n      isSuperFirm: makeSelectIsSuperFirm(),\n      isChildFirm: makeSelectIsChildFirm(),\n      isFetchingFirmProductCategories: makeSelectIsFetchingFirmProductCategories(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCategories: (isQuoteConnect: boolean, manufacturerIds?: string) => {\n      if (isQuoteConnect) {\n        dispatch(new GetAllCategoriesAction());\n      } else {\n        dispatch(new GetFirmProductCategoriesAction({ manufacturerIds }));\n      }\n    },\n    getManufacturers: (isQuoteConnect: boolean) => {\n      if (isQuoteConnect) {\n        dispatch(new GetAllManufacturersAction());\n      } else {\n        dispatch(new GetFirmProductManufacturersAction());\n      }\n    },\n    searchUsers: (searchTerm: string, officeId: number) => {\n      dispatch(new SearchUsersQuickByOfficeIdAction({searchTerm, officeId}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductListFilterComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(ProductsListFilter);\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport Modal from '../Modal';\nimport Backdrop from '../Backdrop';\nimport Fade from '../Fade';\nimport { duration } from '../styles/transitions';\nimport Paper from '../Paper';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      '@media print': {\n        // Use !important to override the Modal inline-style.\n        position: 'absolute !important'\n      }\n    },\n\n    /* Styles applied to the container element if `scroll=\"paper\"`. */\n    scrollPaper: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the container element if `scroll=\"body\"`. */\n    scrollBody: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&:after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    },\n\n    /* Styles applied to the container element. */\n    container: {\n      height: '100%',\n      '@media print': {\n        height: 'auto'\n      },\n      // We disable the focus ring for mouse, touch and keyboard users.\n      outline: 0\n    },\n\n    /* Styles applied to the `Paper` component. */\n    paper: {\n      margin: 32,\n      position: 'relative',\n      overflowY: 'auto',\n      // Fix IE 11 issue, to remove at some point.\n      '@media print': {\n        overflowY: 'visible',\n        boxShadow: 'none'\n      }\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"paper\"`. */\n    paperScrollPaper: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `scroll=\"body\"`. */\n    paperScrollBody: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'left' // 'initial' doesn't work on IE 11\n\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=false`. */\n    paperWidthFalse: {\n      maxWidth: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xs\"`. */\n    paperWidthXs: {\n      maxWidth: Math.max(theme.breakpoints.values.xs, 444),\n      '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"sm\"`. */\n    paperWidthSm: {\n      maxWidth: theme.breakpoints.values.sm,\n      '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.sm + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"md\"`. */\n    paperWidthMd: {\n      maxWidth: theme.breakpoints.values.md,\n      '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.md + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"lg\"`. */\n    paperWidthLg: {\n      maxWidth: theme.breakpoints.values.lg,\n      '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.lg + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `maxWidth=\"xl\"`. */\n    paperWidthXl: {\n      maxWidth: theme.breakpoints.values.xl,\n      '&$paperScrollBody': _defineProperty({}, theme.breakpoints.down(theme.breakpoints.values.xl + 32 * 2), {\n        maxWidth: 'calc(100% - 64px)'\n      })\n    },\n\n    /* Styles applied to the `Paper` component if `fullWidth={true}`. */\n    paperFullWidth: {\n      width: 'calc(100% - 64px)'\n    },\n\n    /* Styles applied to the `Paper` component if `fullScreen={true}`. */\n    paperFullScreen: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      '&$paperScrollBody': {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  };\n};\nvar defaultTransitionDuration = {\n  enter: duration.enteringScreen,\n  exit: duration.leavingScreen\n};\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\n\nvar Dialog = React.forwardRef(function Dialog(props, ref) {\n  var BackdropProps = props.BackdropProps,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$fullScreen = props.fullScreen,\n      fullScreen = _props$fullScreen === void 0 ? false : _props$fullScreen,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$maxWidth = props.maxWidth,\n      maxWidth = _props$maxWidth === void 0 ? 'sm' : _props$maxWidth,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperComponent = props.PaperComponent,\n      PaperComponent = _props$PaperComponent === void 0 ? Paper : _props$PaperComponent,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$scroll = props.scroll,\n      scroll = _props$scroll === void 0 ? 'paper' : _props$scroll,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Fade : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      ariaDescribedby = props['aria-describedby'],\n      ariaLabelledby = props['aria-labelledby'],\n      other = _objectWithoutProperties(props, [\"BackdropProps\", \"children\", \"classes\", \"className\", \"disableBackdropClick\", \"disableEscapeKeyDown\", \"fullScreen\", \"fullWidth\", \"maxWidth\", \"onBackdropClick\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onEscapeKeyDown\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperComponent\", \"PaperProps\", \"scroll\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\", \"aria-describedby\", \"aria-labelledby\"]);\n\n  var mouseDownTarget = React.useRef();\n\n  var handleMouseDown = function handleMouseDown(event) {\n    mouseDownTarget.current = event.target;\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    // Ignore the events not coming from the \"backdrop\"\n    // We don't want to close the dialog when clicking the dialog content.\n    if (event.target !== event.currentTarget) {\n      return;\n    } // Make sure the event starts and ends on the same DOM element.\n\n\n    if (event.target !== mouseDownTarget.current) {\n      return;\n    }\n\n    mouseDownTarget.current = null;\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  return React.createElement(Modal, _extends({\n    className: clsx(classes.root, className),\n    BackdropComponent: Backdrop,\n    BackdropProps: _extends({\n      transitionDuration: transitionDuration\n    }, BackdropProps),\n    closeAfterTransition: true,\n    disableBackdropClick: disableBackdropClick,\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onEscapeKeyDown: onEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    ref: ref\n  }, other), React.createElement(TransitionComponent, _extends({\n    appear: true,\n    in: open,\n    timeout: transitionDuration,\n    onEnter: onEnter,\n    onEntering: onEntering,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExiting: onExiting,\n    onExited: onExited,\n    role: \"none presentation\"\n  }, TransitionProps), React.createElement(\"div\", {\n    className: clsx(classes.container, classes[\"scroll\".concat(capitalize(scroll))]),\n    onClick: handleBackdropClick,\n    onMouseDown: handleMouseDown\n  }, React.createElement(PaperComponent, _extends({\n    elevation: 24,\n    role: \"dialog\",\n    \"aria-describedby\": ariaDescribedby,\n    \"aria-labelledby\": ariaLabelledby\n  }, PaperProps, {\n    className: clsx(classes.paper, classes[\"paperScroll\".concat(capitalize(scroll))], classes[\"paperWidth\".concat(capitalize(String(maxWidth)))], PaperProps.className, fullScreen && classes.paperFullScreen, fullWidth && classes.paperFullWidth)\n  }), children))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes = {\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': PropTypes.string,\n\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  BackdropProps: PropTypes.object,\n\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, clicking the backdrop will not fire the `onClose` callback.\n   */\n  disableBackdropClick: PropTypes.bool,\n\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n\n  /**\n   * If `true`, the dialog will be full-screen\n   */\n  fullScreen: PropTypes.bool,\n\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   */\n  maxWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]),\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired before the dialog enters.\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired when the dialog has entered.\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired when the dialog is entering.\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableKeyboard` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: PropTypes.func,\n\n  /**\n   * Callback fired before the dialog exits.\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired when the dialog has exited.\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * Callback fired when the dialog is exiting.\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * If `true`, the Dialog is open.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * The component used to render the body of the dialog.\n   */\n  PaperComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: PropTypes.object,\n\n  /**\n   * Determine the container for scrolling the dialog.\n   */\n  scroll: PropTypes.oneOf(['body', 'paper']),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDialog'\n})(Dialog);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      flex: '1 1 auto',\n      WebkitOverflowScrolling: 'touch',\n      // Add iOS momentum scrolling.\n      overflowY: 'auto',\n      padding: '8px 24px',\n      '&:first-child': {\n        // dialog without title\n        paddingTop: 20\n      }\n    },\n\n    /* Styles applied to the root element if `dividers={true}`. */\n    dividers: {\n      padding: '16px 24px',\n      borderTop: \"1px solid \".concat(theme.palette.divider),\n      borderBottom: \"1px solid \".concat(theme.palette.divider)\n    }\n  };\n};\nvar DialogContent = React.forwardRef(function DialogContent(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$dividers = props.dividers,\n      dividers = _props$dividers === void 0 ? false : _props$dividers,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"dividers\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, dividers && classes.dividers),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContent.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Display the top and bottom dividers.\n   */\n  dividers: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDialogContent'\n})(DialogContent);","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getDisplayName } from '@material-ui/utils';\nimport { getThemeProps } from '@material-ui/styles';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport useTheme from '../styles/useTheme';\nimport { keys as breakpointKeys } from '../styles/createBreakpoints';\nimport useMediaQuery from '../useMediaQuery'; // By default, returns true if screen width is the same or greater than the given breakpoint.\n\nexport var isWidthUp = function isWidthUp(breakpoint, width) {\n  var inclusive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  if (inclusive) {\n    return breakpointKeys.indexOf(breakpoint) <= breakpointKeys.indexOf(width);\n  }\n\n  return breakpointKeys.indexOf(breakpoint) < breakpointKeys.indexOf(width);\n}; // By default, returns true if screen width is the same or less than the given breakpoint.\n\nexport var isWidthDown = function isWidthDown(breakpoint, width) {\n  var inclusive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  if (inclusive) {\n    return breakpointKeys.indexOf(width) <= breakpointKeys.indexOf(breakpoint);\n  }\n\n  return breakpointKeys.indexOf(width) < breakpointKeys.indexOf(breakpoint);\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n\nvar withWidth = function withWidth() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (Component) {\n    var _options$withTheme = options.withTheme,\n        withThemeOption = _options$withTheme === void 0 ? false : _options$withTheme,\n        _options$noSSR = options.noSSR,\n        noSSR = _options$noSSR === void 0 ? false : _options$noSSR,\n        initialWidthOption = options.initialWidth;\n\n    function WithWidth(props) {\n      var contextTheme = useTheme();\n      var theme = props.theme || contextTheme;\n\n      var _getThemeProps = getThemeProps({\n        theme: theme,\n        name: 'MuiWithWidth',\n        props: _extends({}, props)\n      }),\n          initialWidth = _getThemeProps.initialWidth,\n          width = _getThemeProps.width,\n          other = _objectWithoutProperties(_getThemeProps, [\"initialWidth\", \"width\"]);\n\n      var _React$useState = React.useState(false),\n          mountedState = _React$useState[0],\n          setMountedState = _React$useState[1];\n\n      useEnhancedEffect(function () {\n        setMountedState(true);\n      }, []);\n      /**\n       * innerWidth |xs      sm      md      lg      xl\n       *            |-------|-------|-------|-------|------>\n       * width      |  xs   |  sm   |  md   |  lg   |  xl\n       */\n\n      var keys = _toConsumableArray(theme.breakpoints.keys).reverse();\n\n      var widthComputed = keys.reduce(function (output, key) {\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        var matches = useMediaQuery(theme.breakpoints.up(key));\n        return !output && matches ? key : output;\n      }, null);\n\n      var more = _extends({\n        width: width || (mountedState || noSSR ? widthComputed : undefined) || initialWidth || initialWidthOption\n      }, withThemeOption ? {\n        theme: theme\n      } : {}, {}, other); // When rendering the component on the server,\n      // we have no idea about the client browser screen width.\n      // In order to prevent blinks and help the reconciliation of the React tree\n      // we are not rendering the child component.\n      //\n      // An alternative is to use the `initialWidth` property.\n\n\n      if (more.width === undefined) {\n        return null;\n      }\n\n      return React.createElement(Component, more);\n    }\n\n    process.env.NODE_ENV !== \"production\" ? WithWidth.propTypes = {\n      /**\n       * As `window.innerWidth` is unavailable on the server,\n       * we default to rendering an empty component during the first mount.\n       * You might want to use an heuristic to approximate\n       * the screen width of the client browser screen width.\n       *\n       * For instance, you could be using the user-agent or the client-hints.\n       * https://caniuse.com/#search=client%20hint\n       */\n      initialWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n\n      /**\n       * @ignore\n       */\n      theme: PropTypes.object,\n\n      /**\n       * Bypass the width calculation logic.\n       */\n      width: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl'])\n    } : void 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      WithWidth.displayName = \"WithWidth(\".concat(getDisplayName(Component), \")\");\n    }\n\n    hoistNonReactStatics(WithWidth, Component);\n    return WithWidth;\n  };\n};\n\nexport default withWidth;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    marginBottom: 12\n  }\n};\nvar DialogContentText = React.forwardRef(function DialogContentText(props, ref) {\n  return React.createElement(Typography, _extends({\n    component: \"p\",\n    variant: \"body1\",\n    color: \"textSecondary\",\n    ref: ref\n  }, props));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContentText.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDialogContentText'\n})(DialogContentText);","var arrayMap = require('./_arrayMap'),\n    copyArray = require('./_copyArray'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol'),\n    stringToPath = require('./_stringToPath'),\n    toKey = require('./_toKey'),\n    toString = require('./toString');\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return arrayMap(value, toKey);\n  }\n  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nmodule.exports = toPath;\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nexport default {};\n\nexport enum ThemeActionTypes {\n  CHANGE_THEME = 'CHANGE_THEME',\n}\n\nexport class ChangeThemeAction implements IAction {\n  public readonly type = ThemeActionTypes.CHANGE_THEME;\n\n  constructor(\n    public payload?: object\n  ) {}\n}\n","/* tslint:disable */\nimport * as React from 'react';\n// import {\n//   InjectedFormProps,\n// } from 'redux-form';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  Dialog,\n} from '@material-ui/core';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  ToggleOverlayComponentAction\n} from '../../modules/ApplicationModule/actions';\nimport {\n  makeSelectOverlayComponent\n} from '../../modules/ApplicationModule/selectors';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport { DialogProps } from '@material-ui/core/Dialog';\n\ninterface IControlledModalComponentProps {\n  localKey: string;\n  handleClose?(...args: any[]): void;\n}\n\ninterface IControlledModalProps extends IControlledModalComponentProps {\n  open: boolean;\n  toggleComponent: (open?: boolean) => Dispatch<IAction>;\n}\n\ntype ControlledModalType = IControlledModalProps & Partial<DialogProps>;\nclass ControlledModal extends React.Component<ControlledModalType, {}> {\n  public handleClose = () => {\n    const {\n      toggleComponent,\n      handleClose\n    } = this.props;\n\n    handleClose && handleClose();\n\n    toggleComponent(false);\n  }\n\n\n  public render() {\n    const {\n      children,\n      open,\n      localKey,\n      handleClose,\n      toggleComponent,\n      maxWidth,\n      ...rest\n    } = this.props;\n\n    return (\n      <Dialog\n        open={open}\n        onClose={this.handleClose}\n        maxWidth={maxWidth}\n        {...rest}\n      >\n        {children}\n      </Dialog>\n    );\n  }\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IControlledModalComponentProps) => {\n  const {\n    localKey,\n  } = originalOwnProps;\n  return createStructuredSelector({\n    open: makeSelectOverlayComponent(localKey),\n  })(originalState);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, originalOwnProps: IControlledModalComponentProps & Partial<DialogProps>) => {\n  const toggleComponent = (open?: boolean) => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: originalOwnProps.localKey,\n      open,\n    }))\n\n  };\n  return {\n    toggleComponent,\n  };\n};\n\nexport default compose<React.ComponentClass<IControlledModalComponentProps & Partial<DialogProps>>> (\n  connect(mapStateToProps, mapDispatchToProps),\n)(ControlledModal);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  makeStyles,\n  Theme,\n  Chip\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\n\ninterface IDraftStatusChip {\n  pimStatus: string;\n}\n\nconst DraftStatusChip = (props: IDraftStatusChip) => {\n  const { t } = useTranslation('translations');\n\n  const {\n    pimStatus,\n  } = props;\n\n    const testChipLabel = (() => {\n      switch (pimStatus) {\n        case 'Pending for Approval':\n          return t('DraftStatusChip.pending');\n        case 'Changes Required':\n          return t('DraftStatusChip.changes');\n        case 'Approved':\n          return t('DraftStatusChip.approved');;\n        default:\n          return t('DraftStatusChip.draft');;\n      }\n    })();\n\n    const testChipColor = (() => {\n      switch (pimStatus) {\n        case 'Pending for Approval':\n          return '#FFF8DE';\n        case 'Changes Required':\n          return '#E6DFF8';\n        case 'Approved':\n          return '#DDEFF7';\n        default:\n          return '#FFE8E6';\n      }\n    })();\n\n  return (\n    <Chip\n      style={{ borderRadius: '4px', background: testChipColor }}\n      label={testChipLabel}\n    />\n  );\n}\n\nexport default DraftStatusChip;\n","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","export default function formControlState(_ref) {\n  var props = _ref.props,\n      states = _ref.states,\n      muiFormControl = _ref.muiFormControl;\n  return states.reduce(function (acc, state) {\n    acc[state] = props[state];\n\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n\n    return acc;\n  }, {});\n}","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  createStyles,\n  WithStyles,\n  withStyles,\n  Typography,\n  IconButton,\n  Avatar,\n  MenuItem,\n  Tooltip,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport CloseIcon from '@material-ui/icons/Close';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { Image, DropdownContainer } from '..';\nimport ImageViewer from '../ImageViewer';\nimport DrawerExpandButton from '../DrawerExpandButton';\n\ninterface IImageProps {\n  imgComponentProps?: { // Image\n    imgId: any;\n    imgSize: number;\n    imgName?: string;\n    circleImg?: boolean;\n  };\n  imgProps?: { // img\n    src: any;\n    alt: string;\n  };\n  avatarProps?: { // Avatar\n    classNames: string;\n    initial: string;\n  };\n}\n\ninterface IMenuItemProps {\n  action: string;\n  onClick: () => void;\n}\n\ninterface IDrawerViewHeaderComponentProps {\n  imageProps: IImageProps;\n  menuItems: IMenuItemProps[];\n  title: string;\n  otherElements?: JSX.Element;\n  hideExpandButton?: boolean;\n  handleClose: () => void;\n}\n\ntype DrawerViewHeaderProps = IDrawerViewHeaderComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  header: {\n    color: theme.palette.common.white,\n    background: `linear-gradient(225deg, ${theme.palette.secondary[700]} 0%, ${theme.palette.secondary[900]} 100%)`,\n    textAlign: 'center',\n    paddingBottom: theme.spacing(2),\n    minHeight: 48,\n  },\n  menu: {\n    marginTop: theme.spacing(-1)\n  },\n  menuIcon: {\n    color: theme.palette.common.white\n  },\n  titleRow: {\n    marginTop: theme.spacing()\n  },\n  icons: {\n    whiteSpace: 'nowrap',\n    marginRight: theme.spacing(1),\n    marginTop: theme.spacing(1),\n  },\n  icon: {\n    marginLeft: theme.spacing(0.5),\n  }\n});\n\nconst DrawerViewHeader: React.FC<DrawerViewHeaderProps> = ({\n  classes,\n  imageProps,\n  menuItems,\n  title,\n  otherElements = null,\n  hideExpandButton = false,\n  handleClose\n}) => {\n  const {\n    imgComponentProps,\n    imgProps,\n    avatarProps\n  } = imageProps;\n\n  const [open, setOpen] = React.useState(false);\n\n  const displayPictureContainer = () => (\n    imgComponentProps\n      ? <Tooltip title={imgComponentProps.imgName || ''}>\n          <div onClick={imgComponentProps.imgName ? () => setOpen(true) : null}>\n            <Image\n              src={imgComponentProps.imgId}\n              width={`${imgComponentProps.imgSize}px`}\n              margin='0'\n              aspectRatio={'100%'}\n              fromService={true}\n              backgroundStyle={imgComponentProps.circleImg ? { borderRadius: '50%', backgroundSize: 'cover' } : {}}\n            />\n          </div>\n        </Tooltip>\n      : imgProps\n          ? <img src={imgProps.src} alt={imgProps.alt} />\n          : avatarProps\n            ? <Avatar className={avatarProps.classNames}>\n                {avatarProps.initial}\n              </Avatar>\n            : null\n  );\n\n  return (\n    <Grid\n      className={classes.header}\n      container={true}\n      direction='column'\n      wrap='nowrap'\n    >\n      <ImageViewer\n        open={open}\n        setOpen={setOpen}\n        fileId={imgComponentProps && imgComponentProps.imgId}\n        fileName={imgComponentProps && imgComponentProps.imgName}\n      />\n      <Grid\n        container={true}\n        justify='flex-end'\n      >\n        <span className={classes.icons}>\n          { hideExpandButton ? null : <DrawerExpandButton /> }\n          <IconButton\n            onClick={handleClose}\n            color='inherit'\n            size='small'\n            className={classes.icon}\n          >\n            <CloseIcon />\n          </IconButton>\n        </span>\n      </Grid>\n      <Grid\n        container={true}\n        justify='center'\n        style={imgComponentProps && imgComponentProps.imgName ? { cursor: 'pointer' } : {}}\n      >\n        { displayPictureContainer() }\n      </Grid>\n      <Grid container={true} className={classes.titleRow}>\n        <Grid item={true} xs={2} />\n        <Grid item={true} xs={8}>\n          <Typography\n            color='inherit'\n            variant='h6'\n          >\n            { title }\n          </Typography>\n        </Grid>\n        <Grid item={true} xs={2} className={classes.menu}>\n          {\n            menuItems?.length\n              ? <DropdownContainer materialIcon={<MoreVertIcon className={classes.menuIcon} />}>\n                  {\n                    menuItems.map((item: IMenuItemProps, index: number) => (\n                      <MenuItem key={index} disabled={!item.onClick} onClick={item.onClick}>\n                        { item.action }\n                      </MenuItem>\n                    ))\n                  }\n                </DropdownContainer>\n              : null\n          }\n        </Grid>\n      </Grid>\n      <Grid container={true} item={true} justify='center'>\n        { otherElements }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default compose<React.ComponentClass<IDrawerViewHeaderComponentProps>>(\n  withStyles(styles),\n)(DrawerViewHeader);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17.38 10.79l-2.2-2.2c-.28-.28-.36-.67-.25-1.02.37-1.12.57-2.32.57-3.57 0-.55.45-1 1-1H20c.55 0 1 .45 1 1 0 9.39-7.61 17-17 17-.55 0-1-.45-1-1v-3.49c0-.55.45-1 1-1 1.24 0 2.45-.2 3.57-.57.35-.12.75-.03 1.02.24l2.2 2.2c2.83-1.45 5.15-3.76 6.59-6.59z\"\n}), 'PhoneEnabled');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z\"\n}), 'LocalOffer');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z\"\n}), 'RemoveCircle');\n\nexports.default = _default;","import { Button, Grid, Tooltip, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { withTranslation, WithTranslation } from 'react-i18next';\n\ninterface INoOptionsMessage {\n  buttonText?: string;\n  onClick?: () => void;\n  disableButton?: boolean;\n}\n\nconst NoOptionsMessage: React.FC<INoOptionsMessage & WithTranslation> = (props) => {\n  const {\n    t,\n    buttonText,\n    onClick,\n    disableButton = false\n  } = props;\n\n  return (\n    <Grid\n      style={{ height: 180 }}\n      container={true}\n      direction='column'\n      wrap='nowrap'\n      justify='center'\n      alignItems='center'\n      spacing={2}\n    >\n      <Grid\n        item={true}\n      >\n        <Typography>{t('LogInAsModal.noResults')}</Typography>\n        <Typography>{t('LogInAsModal.cantFind')}</Typography>\n      </Grid>\n      {\n        buttonText && onClick && (\n          <Tooltip title={disableButton ? t('AttributesDialog.disableButtonTooltip') : ''}>\n            <Grid\n              item={true}\n              >\n              <Button\n                fullWidth={true}\n                variant='text'\n                color='primary'\n                onClick={onClick}\n                disabled={disableButton}\n                >\n                {buttonText}\n              </Button>\n            </Grid>\n          </Tooltip>\n        )\n      }\n    </Grid>\n  );\n};\n\nexport default withTranslation('translations')(NoOptionsMessage);","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IQuoteTemplatesState,\n} from './reducer';\nimport { makeSelectLoggedInUserOfficeId } from '../AccountModule/selectors';\n// import {\n//   Settings,\n// } from '../../models';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectQuoteTemplateList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteTemplatesState>) => state.get('quoteTemplates', Map()),\n);\n\nexport const makeSelectUserOfficeDefaultQuoteTemplate = () => createSelector(\n  makeSelectQuoteTemplateList(),\n  makeSelectLoggedInUserOfficeId(),\n  (quoteTemplates: Map<any, IMap<any>>, userOfficeId: number) => quoteTemplates.find((template) => {\n    return template.get('defaultOfficeIds')?.includes(userOfficeId);\n  })\n);\n\nexport const makeSelectSelectedQuoteTemplateId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteTemplatesState>) => state.get('selectedQuoteTemplateId'),\n);\n\nexport const makeSelectQuoteTemplate = (quoteTemplateId: any) => createSelector(\n  makeSelectQuoteTemplateList(),\n  (quoteTemplates: Map<any, IMap<any>>) => {\n    return quoteTemplateId !== undefined ? quoteTemplates.get(Number(quoteTemplateId)) : undefined;\n  }\n);\n\nexport const makeSelectQuoteTemplateSaveSuccess = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteTemplatesState>) => state.get('quoteTemplateSaveSuccess'),\n);\n\nexport const makeSelectIsFetchingQuoteTemplates = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuoteTemplatesState>) => state.get('isFetchingQuoteTemplates'),\n);\n\nexport default {\n  selectReducerState,\n};","export default {};\nexport const DEFAULT_MOUNT_POINT = 'quoteTemplate';","export const PG = 'ats-framework/Pagination';\n\nexport const CHANGE_PAGE = `${PG}_CHANGE_PAGE`;\nexport const CHANGE_RECORD = `${PG}_CHANGE_RECORD`;\nexport const CHANGE_PER_PAGE = `${PG}_CHANGE_PER_PAGE`;\nexport const FIND_RECORD = `${PG}_FIND_RECORD`;\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string,\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns: Array<string | RegExp> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","// material-ui Button that can be used as a child in material-ui Tabs\n\nimport * as React from 'react';\nimport {\n  Button,\n} from '@material-ui/core';\n\nconst ButtonTab = ({ children, indicator, textColor, ...props }: any) => {\n  return <Button\n      {...props}\n      color={textColor ? textColor : undefined}\n      indicator={indicator ? indicator : undefined}\n  >\n      {children}\n  </Button>;\n};\n\nexport default ButtonTab;","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport enum CreateNewProjectFormStepperActionTypes {\n  CLEAR_FORM_VALUES = 'CLEAR_FORM_VALUES',\n  SET_FORM_VALUES = 'SET_FORM_VALUES',\n}\n\nexport class ClearFormValuesAction implements IAction {\n  public readonly type = CreateNewProjectFormStepperActionTypes.CLEAR_FORM_VALUES;\n}\n\nexport class SetFormValuesAction implements IAction {\n  public readonly type = CreateNewProjectFormStepperActionTypes.SET_FORM_VALUES;\n  constructor(\n    public payload: Map<string, any>\n  ) {}\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport Input from '../Input';\nimport FilledInput from '../FilledInput';\nimport OutlinedInput from '../OutlinedInput';\nimport InputLabel from '../InputLabel';\nimport FormControl from '../FormControl';\nimport FormHelperText from '../FormHelperText';\nimport Select from '../Select';\nimport withStyles from '../styles/withStyles';\nvar variantComponent = {\n  standard: Input,\n  filled: FilledInput,\n  outlined: OutlinedInput\n};\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {}\n};\n/**\n * The `TextField` is a convenience wrapper for the most common cases (80%).\n * It cannot be all things to all people, otherwise the API would grow out of control.\n *\n * ## Advanced Configuration\n *\n * It's important to understand that the text field is a simple abstraction\n * on top of the following components:\n *\n * - [FormControl](/api/form-control/)\n * - [InputLabel](/api/input-label/)\n * - [FilledInput](/api/filled-input/)\n * - [OutlinedInput](/api/outlined-input/)\n * - [Input](/api/input/)\n * - [FormHelperText](/api/form-helper-text/)\n *\n * If you wish to alter the props applied to the `input` element, you can do so as follows:\n *\n * ```jsx\n * const inputProps = {\n *   step: 300,\n * };\n *\n * return <TextField id=\"time\" type=\"time\" inputProps={inputProps} />;\n * ```\n *\n * For advanced cases, please look at the source of TextField by clicking on the\n * \"Edit this page\" button above. Consider either:\n *\n * - using the upper case props for passing values directly to the components\n * - using the underlying components directly as shown in the demos\n */\n\nvar TextField = React.forwardRef(function TextField(props, ref) {\n  var autoComplete = props.autoComplete,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      defaultValue = props.defaultValue,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      FormHelperTextProps = props.FormHelperTextProps,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      helperText = props.helperText,\n      hiddenLabel = props.hiddenLabel,\n      id = props.id,\n      InputLabelProps = props.InputLabelProps,\n      inputProps = props.inputProps,\n      InputProps = props.InputProps,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      placeholder = props.placeholder,\n      _props$required = props.required,\n      required = _props$required === void 0 ? false : _props$required,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$select = props.select,\n      select = _props$select === void 0 ? false : _props$select,\n      SelectProps = props.SelectProps,\n      type = props.type,\n      value = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoComplete\", \"autoFocus\", \"children\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"error\", \"FormHelperTextProps\", \"fullWidth\", \"helperText\", \"hiddenLabel\", \"id\", \"InputLabelProps\", \"inputProps\", \"InputProps\", \"inputRef\", \"label\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"placeholder\", \"required\", \"rows\", \"rowsMax\", \"select\", \"SelectProps\", \"type\", \"value\", \"variant\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (select && !children) {\n      console.error('Material-UI: `children` must be passed when using the `TextField` component with `select`.');\n    }\n  }\n\n  var InputMore = {};\n\n  if (variant === 'outlined') {\n    if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {\n      InputMore.notched = InputLabelProps.shrink;\n    }\n\n    InputMore.label = label ? React.createElement(React.Fragment, null, label, required && \"\\xA0*\") : label;\n  }\n\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectProps || !SelectProps.native) {\n      InputMore.id = undefined;\n    }\n\n    InputMore['aria-describedby'] = undefined;\n  }\n\n  var helperTextId = helperText && id ? \"\".concat(id, \"-helper-text\") : undefined;\n  var inputLabelId = label && id ? \"\".concat(id, \"-label\") : undefined;\n  var InputComponent = variantComponent[variant];\n  var InputElement = React.createElement(InputComponent, _extends({\n    \"aria-describedby\": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    rowsMax: rowsMax,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: inputProps\n  }, InputMore, InputProps));\n  return React.createElement(FormControl, _extends({\n    className: clsx(classes.root, className),\n    disabled: disabled,\n    error: error,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    ref: ref,\n    required: required,\n    color: color,\n    variant: variant\n  }, other), label && React.createElement(InputLabel, _extends({\n    htmlFor: id,\n    id: inputLabelId\n  }, InputLabelProps), label), select ? React.createElement(Select, _extends({\n    \"aria-describedby\": helperTextId,\n    id: id,\n    labelId: inputLabelId,\n    value: value,\n    input: InputElement\n  }, SelectProps), children) : InputElement, helperText && React.createElement(FormHelperText, _extends({\n    id: helperTextId\n  }, FormHelperTextProps), helperText));\n});\nprocess.env.NODE_ENV !== \"production\" ? TextField.propTypes = {\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default value of the `input` element.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * Props applied to the [`FormHelperText`](/api/form-helper-text/) element.\n   */\n  FormHelperTextProps: PropTypes.object,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The helper text content.\n   */\n  helperText: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  hiddenLabel: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   * Use this prop to make `label` and `helperText` accessible for screen readers.\n   */\n  id: PropTypes.string,\n\n  /**\n   * Props applied to the [`InputLabel`](/api/input-label/) element.\n   */\n  InputLabelProps: PropTypes.object,\n\n  /**\n   * Props applied to the Input element.\n   * It will be a [`FilledInput`](/api/filled-input/),\n   * [`OutlinedInput`](/api/outlined-input/) or [`Input`](/api/input/)\n   * component depending on the `variant` prop value.\n   */\n  InputProps: PropTypes.object,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * The label content.\n   */\n  label: PropTypes.node,\n\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   */\n  margin: PropTypes.oneOf(['none', 'dense', 'normal']),\n\n  /**\n   * If `true`, a textarea element will be rendered instead of an input.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * If `true`, the label is displayed as required and the `input` element` will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Render a [`Select`](/api/select/) element while passing the Input element to `Select` as `input` parameter.\n   * If this option is set you must pass the options of the select as children.\n   */\n  select: PropTypes.bool,\n\n  /**\n   * Props applied to the [`Select`](/api/select/) element.\n   */\n  SelectProps: PropTypes.object,\n\n  /**\n   * The size of the text field.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTextField'\n})(TextField);","/** The status of an event. */\nexport enum Status {\n  /** The status could not be determined. */\n  Unknown = 'unknown',\n  /** The event was skipped due to configuration or callbacks. */\n  Skipped = 'skipped',\n  /** The event was sent successfully. */\n  Success = 'success',\n  /** A user or device in the payload is currently rate limited and should try again later. */\n  RateLimit = 'rate_limit',\n  /** The sent payload was too large to be processed. */\n  PayloadTooLarge = 'payload_too_large',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n  /** a server or client side error occuring when a request takes too long and is cancelled */\n  Timeout = 'Timeout',\n  /** NodeJS runtime environment error.. E.g. disconnected from network */\n  SystemError = 'SystemError',\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: 8,\n    justifyContent: 'flex-end',\n    flex: '0 0 auto'\n  },\n\n  /* Styles applied to the root element if `disableSpacing={false}`. */\n  spacing: {\n    '& > :not(:first-child)': {\n      marginLeft: 8\n    }\n  }\n};\nvar DialogActions = React.forwardRef(function DialogActions(props, ref) {\n  var _props$disableSpacing = props.disableSpacing,\n      disableSpacing = _props$disableSpacing === void 0 ? false : _props$disableSpacing,\n      classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"disableSpacing\", \"classes\", \"className\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, !disableSpacing && classes.spacing),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the actions do not have additional margin.\n   */\n  disableSpacing: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDialogActions'\n})(DialogActions);","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.red = exports.getContrastingColor = exports.isValidHex = exports.toState = exports.simpleCheckForValidColor = undefined;\n\nvar _each = require('lodash/each');\n\nvar _each2 = _interopRequireDefault(_each);\n\nvar _tinycolor = require('tinycolor2');\n\nvar _tinycolor2 = _interopRequireDefault(_tinycolor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar simpleCheckForValidColor = exports.simpleCheckForValidColor = function simpleCheckForValidColor(data) {\n  var keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n  var checked = 0;\n  var passed = 0;\n  (0, _each2.default)(keysToCheck, function (letter) {\n    if (data[letter]) {\n      checked += 1;\n      if (!isNaN(data[letter])) {\n        passed += 1;\n      }\n      if (letter === 's' || letter === 'l') {\n        var percentPatt = /^\\d+%$/;\n        if (percentPatt.test(data[letter])) {\n          passed += 1;\n        }\n      }\n    }\n  });\n  return checked === passed ? data : false;\n};\n\nvar toState = exports.toState = function toState(data, oldHue) {\n  var color = data.hex ? (0, _tinycolor2.default)(data.hex) : (0, _tinycolor2.default)(data);\n  var hsl = color.toHsl();\n  var hsv = color.toHsv();\n  var rgb = color.toRgb();\n  var hex = color.toHex();\n  if (hsl.s === 0) {\n    hsl.h = oldHue || 0;\n    hsv.h = oldHue || 0;\n  }\n  var transparent = hex === '000000' && rgb.a === 0;\n\n  return {\n    hsl: hsl,\n    hex: transparent ? 'transparent' : '#' + hex,\n    rgb: rgb,\n    hsv: hsv,\n    oldHue: data.h || oldHue || hsl.h,\n    source: data.source\n  };\n};\n\nvar isValidHex = exports.isValidHex = function isValidHex(hex) {\n  // disable hex4 and hex8\n  var lh = String(hex).charAt(0) === '#' ? 1 : 0;\n  return hex.length !== 4 + lh && hex.length < 7 + lh && (0, _tinycolor2.default)(hex).isValid();\n};\n\nvar getContrastingColor = exports.getContrastingColor = function getContrastingColor(data) {\n  if (!data) {\n    return '#fff';\n  }\n  var col = toState(data);\n  if (col.hex === 'transparent') {\n    return 'rgba(0,0,0,0.4)';\n  }\n  var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n  return yiq >= 128 ? '#000' : '#fff';\n};\n\nvar red = exports.red = {\n  hsl: { a: 1, h: 0, l: 0.5, s: 1 },\n  hex: '#ff0000',\n  rgb: { r: 255, g: 0, b: 0, a: 1 },\n  hsv: { h: 0, s: 1, v: 1, a: 1 }\n};\n\nexports.default = exports;","import * as React from 'react';\n\nconst StoreContext = React.createContext(undefined);\n\nexport const withStore = () => (Component) => function ThemedComponent(props) {\n  return (\n    <StoreContext.Consumer>\n      {(store) => <Component {...props} store={store} />}\n    </StoreContext.Consumer>\n  );\n};\n\nexport default StoreContext;\n","import {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createSelector,\n} from 'reselect';\nimport {\n  ITaskReducerState\n} from './reducer';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Task,\n} from '../../models';\nimport Criteria, {CriteriaStatus} from '../../models/Criteria';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added TaskModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectTasks = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ITaskReducerState>) => {\n    return state.get('tasks') || Map<number, IMap<Task>>();\n  }\n);\n\nexport const makeSelectTasksByTypeId = (typeId: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ITaskReducerState>) => {\n    return state.get('tasks').filter((task) => task.get('taskToId') === typeId) || Map<number, IMap<Task>>();\n  }\n);\n\n// export const _makeSelectTasks = () => createSelector(\n//   selectReducerState(),\n//   (state: IMapNonRecursive<ITaskReducerState>) => {\n//     return state.get('tasks') || Map<number, IMap<Task>>();\n//   }\n// );\n\n// export const makeSelectTasks = (type?: string, typeId?: number) => createSelector(\n//   _makeSelectTasks(),\n//   (stateTasks) => {\n//     const tasks = stateTasks.filter( task => {\n//       let passFilter = true;\n//       if (type != null) {\n//         passFilter = passFilter && (task.get('taskToType') === type);\n//       }\n\n//       if (typeId != null) {\n//         passFilter = passFilter && (task.get('taskToId') === typeId);\n//       }\n//       return passFilter;\n//     });\n\n//     const tasksWithStatus = tasks.map((task: IMap<Task>, taskId: number) => {\n//       const taskCriterias = task.get('criteria');\n//       const criteriaStatuses = taskCriterias.map((criteria: IMap<Criteria>) => {\n//         return criteria.get('status');\n//       });\n\n//       const completed = criteriaStatuses.includes(CriteriaStatus.Completed);\n//       const inProgress = criteriaStatuses.includes(CriteriaStatus.InProgress);\n//       const toDo = criteriaStatuses.includes(CriteriaStatus.Created);\n//       const cancelled = criteriaStatuses.includes(CriteriaStatus.Rejected);\n\n//       const taskStatus = (() => {\n//         if (completed && !inProgress && !toDo) {\n//           return CriteriaStatus.Completed;\n//         }\n//         else if (completed && inProgress) {\n//           return CriteriaStatus.InProgress;\n//         }\n//         else if (completed && toDo) {\n//           return CriteriaStatus.InProgress;\n//         }\n//         else if (inProgress && toDo) {\n//           return CriteriaStatus.InProgress;\n//         }\n//         else if (toDo && !inProgress) {\n//           return CriteriaStatus.Created;\n//         }\n//         else if (inProgress) {\n//           return CriteriaStatus.InProgress;\n//         }\n//         else {\n//           return CriteriaStatus.Rejected;\n//         }\n//       })();\n\n//       return task.set('taskStatus', taskStatus);\n//     });\n//     if (type) {\n//       return tasksWithStatus.filter(task => task.get('taskToType') === type);\n//     }\n//     return tasksWithStatus;\n//   }\n// );\n\nexport const makeSelectSelectedTaskId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<ITaskReducerState>) => state.get('selectedTaskId')\n);\n\nexport const makeSelectTask = () => createSelector(\n  makeSelectTasks(),\n  makeSelectSelectedTaskId(),\n  (tasks: Map<number, IMap<Task>>, taskId: number) => {\n    return tasks.get(taskId);\n  }\n);\n\nexport const makeSelectTaskCriteria = () => createSelector(\n  makeSelectTask(),\n  (task: IMap<Task>) => (task != null && task.get('criteria')) || List<IMap<Criteria>>()\n);\n\nexport const makeSelectTaskCriteriaStatuses = () => createSelector(\n  makeSelectTaskCriteria(),\n  (criterias: List<IMap<Criteria>>) => criterias.map((criteria: IMap<Criteria>) => {\n    return criteria.get('status');\n  })\n);\n\nexport default {\n  selectReducerState,\n};\n","/*\n * DataFieldSelect\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\n\nimport { createStructuredSelector } from 'reselect';\nimport {\n  selectReducerState,\n} from '../../modules/AtsModule/selectors';\nimport {\n  isArray,\n  singleOrArray,\n} from 'ats-utils/src';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  FieldSelect,\n} from '../../components';\n\nimport { fromJS, Map, Set, Record, isImmutable, List, Seq } from 'immutable';\nimport { ApiCallAction, IBaseAtsApiCall, IBaseAtsApiCallPayload } from '../../modules/AtsModule/actions';\nimport { WrappedFieldProps } from 'redux-form';\nimport { IconButton, MenuItem } from '@material-ui/core';\nimport ClearIcon from '@material-ui/icons/Clear';\nconst defaultParameter = fromJS({\n  required: false,\n});\n\nconst sortBy = (param) => (cmpA, cmpB) => {\n  const cmpAParam = cmpA.get(param);\n  const cmpBParam = cmpB.get(param);\n\n  if (cmpAParam && !cmpBParam) {\n    return -1;\n  } else if (!cmpAParam && cmpBParam) {\n    return 1;\n  } else if (cmpAParam === cmpBParam) {\n    return 0;\n  }\n  return cmpAParam < cmpBParam ? -1 : 1;\n};\n\nconst parseArrayOrObjectParamsIntoMap = (arrayOrObject: List<string | IMapNonRecursive<IParamInterface>> | Map<string, IMapNonRecursive<IParamInterface>> = List<string>()): Map<string, IMapNonRecursive<IParamInterface>> => {\n  const asObject = (\n    isArray(arrayOrObject)\n    ? (arrayOrObject as List<string | IMapNonRecursive<IParamInterface>>).reduce(\n      (acc, parameter) => {\n        return Map.isMap(parameter) ? acc.set(parameter.get('key') || '__NO_KEY__', defaultParameter.mergeDeep(parameter)) : acc.set(`${parameter}`, defaultParameter);\n      }, Map<string, IMapNonRecursive<IParamInterface>>()\n    )\n    : arrayOrObject\n  ) as Map<string, IMapNonRecursive<IParamInterface>>;\n  return asObject.map((value, key) => {\n    return value.set('key', key);\n  });\n};\n\ninterface IDataProviderProps extends IBaseAtsApiCall {\n  parameters?: List<string>;\n  patterns?: Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n}\n\nexport interface IDataFieldSelectComponentProps {\n  dataProviderProps: IMapNonRecursive<IDataProviderProps>;\n  filterValue?: string;\n  parameters?: object | Map<string, any>;\n  exact?: boolean; // if exact, it will only match with a pattern that is exactly the same as the parameters passed in. Otherwise, it matches the first valid subset of parameters passed in.\n\n  formControlProps?: object;\n  inputProps?: object;\n  label?: string;\n  multiple?: boolean;\n}\n\ninterface IDataFieldSelectProps extends IDataFieldSelectComponentProps {\n  atsState: Map<string, any>;\n  dispatch: React.Dispatch<IAction>;\n  immutableParameters: Map<string, any>;\n}\n\ninterface IParamInterface {\n  key?: string;\n  required?: boolean;\n}\n\ninterface IDataFieldSelectState {\n  initialized: boolean;\n  immutablePatternSetCache: Map<string, Set<string>>;\n  params?: Map<string, IMapNonRecursive<IParamInterface>>;\n  sortedParams?: Map<string, IMapNonRecursive<IParamInterface>>;\n  ParameterRecord: () => void;\n}\n\ntype DataFieldSelectProps = IDataFieldSelectProps & WrappedFieldProps;\n\nconst cachedApiCallActionParams = Map<string, IBaseAtsApiCall>();\n\nclass DataFieldSelect extends React.Component<DataFieldSelectProps, IDataFieldSelectState> { // eslint-disable-line react/prefer-stateless-function\n\n  public state: IDataFieldSelectState = {\n    initialized: false,\n\n    immutablePatternSetCache: Map<string, Set<string>>(),\n    params: undefined,\n    sortedParams: undefined,\n    ParameterRecord: () => {console.error('NO PARAMETER RECORD');}, // tslint:disable-line\n  };\n\n  public UNSAFE_componentWillMount() {\n    const {\n      dataProviderProps,\n    } = this.props;\n\n    const parameters = dataProviderProps.get('parameters');\n    const patterns = dataProviderProps.get('patterns') || Map<string, any>() as Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n\n    const immutablePatternSetCache = patterns.map((value, key) => {\n      return Set(key.split(',').map((patternKey) => patternKey.trim()));\n    }) as Map<string, Set<string>>;\n\n    let {\n      params,\n      sortedParams,\n      ParameterRecord,\n    } = this.state;\n    if (parameters != null) {\n      params = parseArrayOrObjectParamsIntoMap(parameters);\n\n      sortedParams = params.sort((paramA, paramB) => {\n        return sortBy('key')(paramA, paramB);\n      });\n      ParameterRecord = Record(sortedParams.map(() => null).toJS());\n    }\n\n    this.setState({\n      immutablePatternSetCache,\n      params,\n      sortedParams,\n      ParameterRecord\n    });\n  }\n\n  public componentDidMount() {\n\n    const {\n      immutableParameters,\n      dispatch,\n      atsState,\n    } = this.props;\n\n    this.getDataIfValid(dispatch, atsState)({immutableParameters});\n  }\n\n  public parametersValid({immutableParameters}: {immutableParameters: Map<string, any>}): boolean {\n    const {\n      sortedParams,\n    } = this.state;\n\n    if (sortedParams == null) {\n      return true;\n    }\n\n    return sortedParams.valueSeq().reduce((valid, param) => {\n      return valid && (!param.get('required') || immutableParameters.has(param.get('key') || ''));\n    }, true);\n  }\n\n  public getValidParameterKeys(immutableParameters: Map<string, any>): Seq.Indexed<string> {\n    const {\n      sortedParams,\n    } = this.state;\n\n    if (sortedParams == null) {\n      return immutableParameters.keySeq();\n    }\n\n    return sortedParams.filter((value, key) => {\n      return immutableParameters.has(key);\n    }).keySeq();\n  }\n\n  public getApiCallAction({immutableParameters}): IBaseAtsApiCall {\n    const {\n      dataProviderProps,\n      exact,\n    } = this.props;\n\n    const stringifiedImmutableParameters = JSON.stringify(immutableParameters);\n    let params = cachedApiCallActionParams.get(stringifiedImmutableParameters);\n\n    if (params != null) {\n      return params;\n    }\n\n    const patterns = dataProviderProps.get('patterns') || Map<string, any>() as Map<string, IMapNonRecursive<IBaseAtsApiCall>>;\n    params = {\n      payload: dataProviderProps.get('payload'),\n    };\n    const {\n      immutablePatternSetCache,\n    } = this.state;\n\n    const paramSet = Set(this.getValidParameterKeys(immutableParameters));\n\n    const patternKey = immutablePatternSetCache.findKey(\n      (patternSet) => {\n        return exact\n          ? patternSet.equals(paramSet)\n          : patternSet.isSubset(paramSet);\n      }\n    );\n\n    if (patternKey != null) {\n      const immutablePattern = patterns.get(patternKey);\n      if (immutablePattern != null) {\n        params = {\n          payload: immutablePattern.get('payload'),\n        };\n        if (params.payload == null) {\n          console.debug('DataFieldSelect invalid payload', { // tslint:disable-line\n            params,immutablePattern\n          });\n        }\n      }\n    }\n    cachedApiCallActionParams.set(stringifiedImmutableParameters, params);\n    // TODO where are immutable parameters?\n\n    if (params.payload == null) {\n      console.debug('DataFieldSelect invalid payload', { // tslint:disable-line\n        params,\n        dataProviderProps,\n        immutableParameters,\n      });\n      return {\n        payload: fromJS({}) as IMapNonRecursive<IBaseAtsApiCallPayload>,\n      };\n    }\n\n    const atsApiPayload = singleOrArray(params.payload.toJS().payload);\n    const modifiedOptions = {\n      ...atsApiPayload.slice(-1)[0],\n      params: immutableParameters.toJS(),\n    };\n    const atsApiPayloadWithModifiedOptions = [...atsApiPayload.slice(0, -1), modifiedOptions];\n    // console.error('test', {\n    //   atsApiPayload,\n    //   pp2: params.payload.get('payload'),\n    //   pp: {\n    //     ...params,\n    //     payload: params.payload.set('payload', atsApiPayloadWithModifiedOptions),\n    //   },\n    //   atsApiPayloadWithModifiedOptions,\n    // });\n    return {\n      ...params,\n      payload: params.payload.set('payload', atsApiPayloadWithModifiedOptions),\n    };\n  }\n\n  public getDataKey({immutableParameters}) {\n    const apiCallAction = this.getApiCallAction({immutableParameters});\n    return ['DataFieldSelect', JSON.stringify(apiCallAction.payload.get('payload')), JSON.stringify(immutableParameters)];\n  }\n\n  public getDataIfValid(dispatch, atsState) {\n    return ({immutableParameters}: {immutableParameters: Map<string, any>}) => {\n      const key = this.getDataKey({immutableParameters});\n\n      const previousDataParams = atsState.getIn(['dataParams', ...key]);\n\n      if (previousDataParams == null && this.parametersValid({immutableParameters})) {\n        const apiCallAction = this.getApiCallAction({immutableParameters});\n        dispatch(new ApiCallAction({\n          ...(apiCallAction.payload.toJS()),\n          key,\n        }));\n      }\n    };\n  }\n\n  public componentWillReceiveProps(nextProps) {\n    const {\n      immutableParameters: prevImmutableParameters,\n      dispatch\n    } = this.props;\n\n    const {\n      immutableParameters,\n      atsState,\n    } = nextProps;\n\n    if (!prevImmutableParameters.equals(immutableParameters)) {\n      this.getDataIfValid(dispatch, atsState)({immutableParameters});\n    }\n  }\n\n  public render() {\n    const {\n      immutableParameters,\n\n      dispatch, // eslint-disable-line no-unused-vars\n      atsState,\n      dataProviderProps, // eslint-disable-line no-unused-vars\n      filterValue = 'value',\n      input: {onChange, value},\n      inputProps,\n      ...rest\n    } = this.props;\n\n    const key = this.getDataKey({immutableParameters});\n    const data = atsState.getIn(['data', ...key], Set()).toJS();\n\n    const menuItems = data && data.map ? data.map((d) => {\n      // Use filterValue from BE to control whether use data.value or data.id as option value.\n      switch (filterValue) {\n        case 'id': {\n          return (<MenuItem key={d.id} value={d.id}>{d.value}</MenuItem>);\n        }\n        case 'value':\n        default : {\n          return (<MenuItem key={d.id} value={d.value}>{d.label || d.value}</MenuItem>);\n        }\n      }\n    }) : [];\n\n    return (\n      <FieldSelect\n        input={{\n          ...this.props.input,\n          onChange: (val) => {\n            if (Array.isArray(val)) {\n              if (val.length) {\n                onChange(val);\n              } else if (val.length === 0) {\n                onChange(null);\n              }\n            } else {\n              onChange(val);\n            }\n          },\n          value: (this.props.multiple && !Array.isArray(this.props.input.value) ? [...this.props.input.value] : this.props.input.value),\n        }}\n        inputProps={{\n          ...this.props.inputProps,\n          endAdornment: (value && this.props.multiple && <IconButton style={{marginRight: 30}} onClick={() => onChange(null)}><ClearIcon/></IconButton>)\n        }}\n        {...rest}\n      >\n        {this.props.children}\n        {menuItems}\n      </FieldSelect>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  atsState: selectReducerState(),\n});\n\nexport function mergeProps(stateProps, dispatchProps, ownProps) {\n  const immutableParameters = isImmutable(ownProps.parameters) ? ownProps.parameters : fromJS(ownProps.parameters || {});\n\n  return Object.assign({}, ownProps, stateProps, dispatchProps, {\n    immutableParameters,\n  });\n}\n\nexport default compose<React.ComponentClass<IDataFieldSelectComponentProps & WrappedFieldProps>>(\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n)(DataFieldSelect);\n","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 166;\n  var timeout;\n\n  function debounced() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    // eslint-disable-next-line consistent-this\n    var that = this;\n\n    var later = function later() {\n      func.apply(that, args);\n    };\n\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n\n  debounced.clear = function () {\n    clearTimeout(timeout);\n  };\n\n  return debounced;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'DragIndicator');\n\nexports.default = _default;","import {useAtsApi} from '../contexts/AtsApiContext';\nimport {IS_PRODUCTION} from '../constants';\n\nfunction useFileSrc({\n    fileId\n}) {\n    const atsApi = useAtsApi();\n    let fileSrc = '';\n    if (fileId) {\n        try {\n            fileSrc = atsApi.callApi(fileId, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: IS_PRODUCTION, withToken: true, withAppId: true }) as string;\n        } catch (e) {\n            console.error('filesrc fail', { // tslint:disable-line\n                atsApi,\n            });\n            console.error(e); // tslint:disable-line\n        }\n    }\n    return {\n        fileSrc,\n    };\n}\n\nexport default useFileSrc;","import * as React from 'react';\nimport { Toolbar, Grid, Breadcrumbs, Link, Button, withStyles, Theme, WithStyles, LinkProps, ButtonProps, Tooltip, CircularProgress } from '@material-ui/core';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectSpec, makeSelectDrawing } from '../../modules/SpecModule/selectors';\nimport { makeSelectSelectedProjectId, makeSelectProjects } from '../../modules/ProjectModule/selectors';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { Spec, Project, Drawing } from '../../models';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningIcon from '@material-ui/icons/Error';\n\ninterface IBreadcrumb {\n  label: string;\n  onClick?: (e?: any) => void;\n  linkProps?: LinkProps<React.ElementType>;\n}\n\nexport interface IButton {\n  label: string;\n  onClick?: (e?: any) => void;\n  isLoading?: boolean;\n  buttonProps?: ButtonProps;\n  tooltipDisable?: string;\n  tooltipEnable?: string;\n}\n\ninterface IBreadcrumbProjectSpecBarComponentProps {\n  breadcrumbs?: IBreadcrumb[];\n  buttons: IButton[];\n  showBreadscrumbWarningIcon?: boolean;\n  renderSearch?: () => React.ReactNode;\n}\n\ninterface IBreadcrumbProjectSpecBarProps extends IBreadcrumbProjectSpecBarComponentProps {\n  selectedSpec: IMap<Spec>;\n  selectedProject: IMap<Project>;\n  selectedProjectId: number;\n  selectedDrawing: IMap<Drawing>;\n  dispatch: (action: IAction) => void;\n  projects: any;\n}\n\ntype BreadcrumbProjectSpecBarProps = IBreadcrumbProjectSpecBarProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst BreadcrumbProjectSpecBarComponent = (props: BreadcrumbProjectSpecBarProps) => {\n  const {\n    classes,\n    t,\n    breadcrumbs = null,\n    buttons,\n    showBreadscrumbWarningIcon = false,\n    renderSearch = () => null,\n  } = props;\n  return (\n    <div className={classes.appBar}>\n      <Toolbar variant='dense'>\n        <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n          <Grid container={true} style={{width: 'auto'}} alignItems='center'>\n            {breadcrumbs && <>\n              <Breadcrumbs>\n              {\n                breadcrumbs && breadcrumbs.map((breadcrumb, index) => {\n                  const isLastBreadcrumb = (index + 1) === breadcrumbs.length;\n                  return (\n                      <Tooltip title={breadcrumb.label} key={index}>\n                        <Link\n                            key={index}\n                            href='#'\n                            onClick={\n                              e => {\n                                e.preventDefault();\n                                if (breadcrumb.onClick) { breadcrumb.onClick(e); }\n                              }\n                            }\n                            color={isLastBreadcrumb ? 'textPrimary' : 'inherit'}\n                            {...breadcrumb.linkProps}\n                        >\n                          {breadcrumb.label.length > 20 ? `${breadcrumb.label.slice(0, 20)}...` : breadcrumb.label}\n                        </Link>\n                      </Tooltip>\n                  );\n                })\n              }\n              </Breadcrumbs>\n              {showBreadscrumbWarningIcon ? <Tooltip title={t('listPageToolbar.ruleWarning')}>\n                <WarningIcon className={classes.breadcrumbsWarningIcon} fontSize='small'/>\n              </Tooltip> : null}\n            </>\n            }\n          </Grid>\n          <Grid className={classes.searchBar}>\n            {renderSearch()}\n          </Grid>\n          <Grid>\n            {\n              buttons && buttons.map((button, index) => {\n                const isLastButton = (index + 1) === buttons.length;\n                return (\n                  <Tooltip\n                    key={index}\n                    title={button.buttonProps && button.buttonProps.disabled ? button.tooltipDisable || '' : button.tooltipEnable || ''}\n                  >\n                    <span>\n                      <Button\n                        size='small'\n                        className={classes.backToSpecButton}\n                        onClick={e => button.onClick && button.onClick(e)}\n                        color='primary'\n                        variant={isLastButton ? 'contained' : 'text'}\n                        {...button.buttonProps}\n                      >\n                        {\n                          button.isLoading && <CircularProgress size='1em' style={{ marginRight: 8 }} />\n                        }\n                        {button.label}\n                      </Button>\n                    </span>\n                  </Tooltip>\n                );\n              })\n            }\n          </Grid>\n        </Grid>\n      </Toolbar>\n    </div>\n  );\n};\n\nconst styles = (theme: Theme) => ({\n  appBar: {\n    position: 'sticky',\n    top: '0',\n    zIndex: theme.zIndex.appBar - 1,\n    background: theme.palette.grey[100],\n    paddingRight: theme.spacing(2),\n    width: '100%'\n  },\n  backToSpecButton: {\n    marginRight: theme.spacing()\n  },\n  searchBar: {\n    marginLeft: 'auto',\n    marginRight: theme.spacing(2)\n  },\n  breadcrumbsWarningIcon: {\n    color: theme.palette.warning.main,\n    marginLeft: theme.spacing(1)\n  }\n}) as const;\n\nconst mapStateToProps = createStructuredSelector({\n  selectedSpec: makeSelectSpec(),\n  projects: makeSelectProjects(),\n  selectedProjectId: makeSelectSelectedProjectId(),\n  selectedDrawing: makeSelectDrawing()\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst BreadcrumbProjectSpecBar = compose<React.ComponentClass<IBreadcrumbProjectSpecBarComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations')\n)(BreadcrumbProjectSpecBarComponent);\n\nexport { BreadcrumbProjectSpecBar };","import { IMap } from 'ats-utils/src';\nimport { Contact, User } from '../models';\n\nexport const getContactDisplayText = (entity: IMap<Contact> | IMap<User>) => {\n  return entity\n          ? entity.get('firstName')\n            ? `${entity.get('firstName')}${entity.get('lastName') ? ' ' + entity.get('lastName') : ''}`\n            : entity.get('organization')\n          : '';\n};\n","// @@TODO temporary hack to get material-ui to use next variants\nimport { SetDebug } from './modules/DebugModule/actions';\n\n(window as any).__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__ = true;\n\nconsole.log( //  tslint:disable-line\n  `\n▄▄▄     ▄▄▄█████▓  ██████\n▒████▄   ▓  ██▒ ▓▒▒██    ▒\n▒██  ▀█▄ ▒ ▓██░ ▒░░ ▓██▄\n░██▄▄▄▄██░ ▓██▓ ░   ▒   ██▒\n ▓█   ▓██▒ ▒██▒ ░ ▒██████▒▒\n ▒▒   ▓▒█░ ▒ ░░   ▒ ▒▓▒ ▒ ░\n  ▒   ▒▒ ░   ░    ░ ░▒  ░ ░\n  ░   ▒    ░      ░  ░  ░\n      ░  ░              ░\n`);\n\nimport AtsStore from './store';\nimport configureStore, {\n  AtsStore as AtsStoreType,\n  sagaMiddleware\n} from './configureStore';\nimport { SagaMiddleware } from 'redux-saga';\nimport utils from './utils';\nimport {\n  singleOrArray,\n  parseQueryString,\n} from 'ats-utils/src';\n\nimport {\n  GenericReducer,\n  GenericSaga,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  IConfig,\n  siteType,\n} from 'ats-utils/src/Interfaces/IConfig';\n\nimport {\n  IApiOptions,\n  IServiceData\n} from 'ats-utils/src/Interfaces/AtsApi';\n\nimport * as style from './style';\nimport styleSheet from './style/styles.scss';\nimport {\n  ChangeLabelAction,\n  ConfigLoadedAction,\n  ChangeSiteAction,\n  EnvLoadedAction,\n  GetDomainSucceededAction,\n  PresetTokenAction,\n  SetUngatedCurrencyAction,\n} from './modules/AtsModule/actions';\n\nimport actions from './actions';\n\nimport * as constants from './constants';\nimport {\n  getEnv,\n  cacheBuster,\n} from './constants';\n\nimport * as containers from './containers';\nimport * as components from './components';\nimport * as contexts from './contexts';\nimport * as DebugData from './containers/Debug';\nimport * as LanguageProviderData from './containers/LanguageProvider';\nimport * as ThemeProviderData from './containers/ThemeProvider';\nimport * as ErrorHandlerData from './containers/ErrorHandler/index';\nimport { ChangeThemeAction } from './modules/ThemeModule/actions';\nimport {\n  createBrowserHistory,\n  History,\n} from 'history';\nimport initFontAwesome from './initFontAwesome';\nimport { installDomTranslationGuard } from './utils/domTranslationGuard';\n\nimport atsApi, { Api } from 'ats-api/src';\n\nimport {\n  fromJS,\n  Map,\n  mergeDeep,\n} from 'immutable';\nimport { debounce, } from 'lodash';\nimport { Middleware } from 'redux';\nimport { SetAtsApiState } from './modules/ApplicationModule/actions';\nexport {\n  default as createReducers,\n} from './reducers';\nexport {\n  default as selectors,\n} from './selectors';\nconst {fetch} = utils as any;\nexport { style };\n\nexport {\n  styleSheet,\n};\nexport {\n  default as themes,\n} from './themes';\n\nexport { containers };\n\nexport { components };\n\nexport { contexts };\n\nexport {\n  default as AppWrapper,\n} from './containers/AppWrapper/index';\nexport {\n  default as Debug,\n} from './containers/Debug';\nexport {\n  DebugData,\n};\nexport {\n  default as LanguageProvider,\n} from './containers/LanguageProvider';\nexport {\n  LanguageProviderData,\n};\nexport {\n  default as ThemeProvider,\n} from './containers/ThemeProvider';\nexport {\n  ThemeProviderData,\n};\nexport {\n  default as ErrorHandler,\n} from './containers/ErrorHandler/index';\nexport {\n  ErrorHandlerData,\n};\n\nexport const useShutDownSplashPage = () => {\n  // using location instead of a flag in the app config so that we can remove dependency of this check from BE/data;\n  const host = window.location.host;\n  const applyShutDownSplashPage = false;\n  const whitelabel = host.split('.')[0];\n  return { applyShutDownSplashPage, whitelabel };\n};\n\ninterface IInitParams {\n  site: siteType;\n  versionPath?: string;\n  configPath?: string;\n  envPath?: string;\n  env?: {\n    [key: string]: any;\n  };\n  config?: IMap<IConfig>;\n  initialState: object;\n  additionalSagas: GenericSaga | GenericSaga[];\n  theme: any;\n  reducers?: {\n    [key: string]: GenericReducer;\n  };\n  history: History;\n  beforeMiddleware?: Middleware[];\n  afterMiddleware?: Middleware[];\n  endpointData?: IServiceData;\n  domain?: string;\n  ungatedCurrency?: string;\n}\n\ninterface IInitCallbackParams {\n  env?: {\n    [key: string]: any;\n  };\n  config?: IMap<IConfig>;\n  history: History;\n  store: AtsStoreType;\n  sagaMiddleware: SagaMiddleware<any>;\n  atsApi: Api;\n}\n\ntype IInitCallback = (params: IInitCallbackParams) => void;\n\n(window as any).Ats = {\n  atsApi,\n  AtsStore,\n};\n\n// placeholder variables to hold query string params\nlet paramAppId;\nlet paramToken;\nlet paramSite;\nlet debug;\nlet paramLabel;\n// parse query string into easier to manage object\nconst queryString = parseQueryString();\n// dynamic query string keys\nconst tokenKey = (getEnv().TOKEN_KEY || 'x-ats-token').toLowerCase();\nconst appIdKey = 'x-ats-app-id';\n\nconst paramMapping: {\n  [key: string]: (value: string) => void;\n} = {\n  [tokenKey]: (value) => paramToken = value,\n  [appIdKey]: (value) => paramAppId = value,\n  'site': (value) => paramSite = value,\n  'label': (value) => paramLabel = value,\n  'debug': (value) => debug = parseInt(value, 10) || 1,\n};\n\nObject.keys(\n  queryString\n).forEach(\n  (key) => {\n    const lowerKey = key.toLowerCase();\n    const value = queryString[key];\n    const mapping = paramMapping[lowerKey];\n    if (mapping != null) {\n      mapping(value);\n    }\n  }\n);\n\nconst init = async (\n  initParams: IInitParams,\n  callback?: IInitCallback,\n  ) => {\n    try {\n      if (!(global as any)._babelPolyfill) { // eslint-disable-line no-underscore-dangle\n        throw new Error('babel-polyfill required! please include <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js\"></script> at the top of your file');\n      }\n      // before anything renders: keeps browser page translation from crashing React (see the util)\n      installDomTranslationGuard();\n      const {\n        configPath,\n        envPath,\n        site: _siteNamespace\n      } = initParams;\n\n      let bootAtsApiInstance;\n      let config: IMap<IConfig> = fromJS({\n        site: 'error'\n      });\n\n      const [\n        {data: envData, err: envErr},\n        {data: configData, err: configErr}\n      ]: Array<{ data?: any, err?: any } | null> = await Promise.all([\n        utils.request(`${envPath}?cb=${cacheBuster}`),\n        utils.request(`${configPath}?cb=${cacheBuster}`),\n      ]);\n      if (envErr != null) {\n        throw (new Error(`Failed to fetch env.js, try prebuilt import: ${envErr}`));\n      }\n      if (configErr != null) {\n        throw (new Error(`Failed to fetch ${configPath}`));\n      }\n      if (configData != null) {\n        const baseConfig = fromJS(configData);\n        config = baseConfig.mergeDeep(baseConfig.get(_siteNamespace));\n      }\n      if (config.getIn(['atsApiOptions', 'apiKey'])) {\n        const env = {\n          ...envData,\n          LOADED: true,\n        };\n        // get whitelabel config and env setting from server, apikey indicate which tool's whitelabel setting we want to fetch\n        bootAtsApiInstance = new Api({\n          apiKey: configData.atsApiOptions.apiKey,\n          serviceBlacklist: configData.atsApiOptions.serviceBlacklist,\n        });\n\n        const whiteLabelData = await bootAtsApiInstance\n          .setEnv(env)\n          .callApi({\n            service: 'auth',\n            endpoint: 'getAppConfigByDomain',\n            body: {\n              url: window.location.href,\n              // url: 'https://neptune-xref.dev.atssoftware.com/'\n              // url: 'https://wolseley-xref.dev.atssoftware.com/'\n              // url: 'https://demo1-xref.dev.atssoftware.com/'\n              // url: 'https://nu-air.dev.atssoftware.com/'\n              // url: 'https://bemis-xref.dev.atssoftware.com'\n              // url: 'https://lixilspecification.americanstandard-us.com/'\n              // url: 'https://osb-xref-ca.dev.atssoftware.com'\n              // url: 'https://aosmith.dev.atssoftware.com/'\n              // url: 'https://bobrick.staging.atssoftware.com/'\n              // url: 'https://pim.uat.atssoftware.com/',\n              // url: 'https://project-tracker.dev.atssoftware.com/',\n              // url: 'https://lixil-xref.staging.atssoftware.com'\n              // url: 'https://mcguire-dal.dev.atssoftware.com'\n              // url: 'https://ppp-dal.dev.atssoftware.com'\n              // url: \"https://morrislee.dev.atssoftware.com/\"\n              // url: \"https://morrislee.staging.atssoftware.com\"\n              // url: 'https://watts.staging.atssoftware.com/'\n              // url: 'https://zoeller.staging.atssoftware.com/'\n              // url: 'https://lochinvar-xref.staging.atssoftware.com/'\n              // url: 'https://lixil.staging.atssoftware.com/'\n              // url: 'https://xref.staging.atssoftware.com/'\n              // url: 'https://aosmith-xref.staging.atssoftware.com/'\n              // url: 'https://aosmith-xref-fr.staging.atssoftware.com/'\n              // url: 'https://dobbinsales.staging.atssoftware.com/'\n              // url: 'https://spectrum.staging.atssoftware.com/'\n              // url: 'https://sternwilliams.staging.atssoftware.com/'\n              // url: 'https://franke-dal.staging.atssoftware.com/'\n              // url: 'https://franke-ca.dev.atssoftware.com/'\n              // url: 'https://bobrick.dev.atssoftware.com/'\n              // url: 'https://sternwilliams-xref.staging.atssoftware.com'\n              // url: 'https://prier-xref.staging.atssoftware.com'\n              // url: 'https://prier.staging.atssoftware.com'\n              // url: 'https://fiat-xref.staging.atssoftware.com'\n              // url: 'https://fiat.staging.atssoftware.com'\n              // url: 'https://williamsbrothers.staging.atssoftware.com'\n              // url: 'https://delta-xref-ca.dev.atssoftware.com'\n              // url: 'https://pressalit-xref-us.dev.atssoftware.com'\n              // url: 'https://kohlerxref.dev.atssoftware.com'\n            }\n          });\n        if (whiteLabelData == null) {\n          throw (new Error('No configuration file data from service'));\n        }\n\n        const immutableData = fromJS(whiteLabelData);\n        const whitelabelConfig = immutableData.getIn(['payload', 'auth', 'app', 0]); // whitelabel special config\n        const whitelabelEnv = immutableData.getIn(['payload', 'auth', 'env', 0]); // whitelabel special env\n        const domain = immutableData.getIn(['payload', 'auth', 'domain']);\n\n        const useDefaultTheme = useShutDownSplashPage()?.applyShutDownSplashPage;\n\n        const ungatedCurrency = immutableData.getIn(['payload', 'auth', 'ungatedCurrency']);\n        if (whitelabelConfig != null && whitelabelConfig.size && !useDefaultTheme) {\n          config = whitelabelConfig.mergeDeep(whitelabelConfig.get(_siteNamespace));\n        }\n        const newParams = {\n          ...initParams,\n          env: {\n            ...env,\n            ...whitelabelEnv && whitelabelEnv.toJS(),\n          },\n          config,\n          domain,\n          ungatedCurrency,\n        };\n        initWithData(\n          newParams,\n          callback\n        );\n      }\n    } catch (e) {\n      console.error(e);  // tslint:disable-line\n    }\n  };\n\nconst initWithData = (\n  initParams: IInitParams,\n  callback?: IInitCallback,\n) => {\n\n  console.debug('init', {\n    initParams,\n    callback,\n  });\n\n  const {\n    config,\n    env,\n    initialState,\n    additionalSagas,\n    theme: defaultTheme,\n    reducers = null,\n    history: customHistory,\n    beforeMiddleware = [],\n    afterMiddleware = [],\n    endpointData = {},\n    domain,\n    ungatedCurrency,\n  } = initParams;\n\n  const atsApiOptionsFromConfig: IApiOptions = (config.get('atsApiOptions') || Map<string, any>()).toJS();\n\n  // for development purposes, we dont want to use pregenerated endpoint data\n  const shouldPreloadEndpointData = (Object.keys(endpointData).length !== 0);\n  const atsApiOptions = {\n      ...(shouldPreloadEndpointData ? endpointData : {}),\n      ...atsApiOptionsFromConfig,\n  };\n  // format atsApiOptions\n  const apiKey = paramAppId != null ? paramAppId : config.getIn(['atsApiOptions', 'apiKey']);\n  const atsApiOptionsFinal = {\n    ...atsApiOptions,\n    apiKey,\n    suppressErrors: constants.IS_PRODUCTION,\n  };\n\n  const atsApiInstance = new Api(atsApiOptionsFinal);\n  atsApiInstance.every('trigger', debounce((api, event) => {\n    store.dispatch(new SetAtsApiState({state: fromJS(api.onEvent)}));\n  }, 100));\n\n\n\n  const history = customHistory || createBrowserHistory();\n  const store = configureStore({\n    initialState,\n    history,\n    reducers,\n    beforeMiddleware,\n    afterMiddleware,\n  });\n  // Run services\n  [\n    ...singleOrArray(additionalSagas),\n  ].forEach((saga) =>\n    store.runSaga(saga)\n  );\n  const theme = mergeDeep({}, defaultTheme, (config.get('theme') && config.get('theme').toJS()) || {});\n  const site = config.get('site') || paramSite;\n  const label = config.get('label') || paramLabel;\n  // if a theme is given, we want to preload it before triggering siteChange\n  // since that might come with further theme changes in the application\n  setTimeout(() => { // weird.... for some reason when running in background tab in chrome, without setTimeout here the store isn't initlized in time or something and these actions never fire.\n    if (paramToken != null) {\n      store.dispatch(new PresetTokenAction({ token: paramToken }));\n    }\n    if (theme != null) {\n      store.dispatch(new ChangeThemeAction(theme));\n    }\n\n    if (site != null) {\n      store.dispatch(new ChangeSiteAction({ site }));\n    }\n\n    if (label != null) {\n      store.dispatch(new ChangeLabelAction({label}));\n    }\n\n    if (debug != null) {\n      store.dispatch(new SetDebug(debug));\n    }\n\n    if (config != null) {\n      store.dispatch(new ConfigLoadedAction({config}));\n    }\n    if (ungatedCurrency != null) {\n      store.dispatch(new SetUngatedCurrencyAction({ ungatedCurrency }));\n\n    }\n    // set domain in redux store\n    store.dispatch(new GetDomainSucceededAction(domain));\n    store.dispatch(new EnvLoadedAction({env}));\n  }, 100);\n\n\n  initFontAwesome();\n  AtsStore.set('atsApi', atsApiInstance);\n  AtsStore.set('env', env);\n  AtsStore.set('store', store);\n  AtsStore.set('history', history);\n\n  const retParams: IInitCallbackParams = {\n    env,\n    config,\n    history,\n    store,\n    sagaMiddleware,\n    atsApi: atsApiInstance,\n  };\n\n  if (callback != null) {\n    callback(retParams);\n  }\n\n  return retParams;\n};\n\nexport {\n  init,\n  fetch,\n  utils,\n  constants,\n  AtsStore as store,\n  actions,\n  configureStore,\n};\n\n\nexport default {\n  init,\n  fetch,\n  utils,\n  constants,\n  store: AtsStore,\n  actions,\n  configureStore,\n};\n","\nimport * as React from 'react';\nimport {\n  TextField,\n  InputLabel,\n  FormControl,\n  FormHelperText,\n} from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  debounce,\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\nimport { useCallback } from 'react';\nconst handleChange = (onChange) => (...args: any[]) => {\n  onChange(...args);\n};\n\nexport interface IFieldTextFieldComponentProps {\n  formControlProps?: object;\n  inputProps?: {\n    [key: string]: any\n  };\n  label?: string;\n  require?: boolean;\n}\n\ninterface IFieldTextFieldProps extends IFieldTextFieldComponentProps {\n\n}\n\ntype FieldTextFieldProps = IFieldTextFieldProps & WrappedFieldProps;\n\nconst FieldTextField: React.FC<FieldTextFieldProps> = (props) => {\n  const {\n    input,\n    meta: {\n      error,\n      touched, // eslint-disable-line no-unused-vars\n      warning,\n    } = {\n      error: undefined,\n      touched: undefined,\n      warning: undefined,\n    },\n    label,\n    require = false,\n    inputProps = {\n    },\n    formControlProps = {},\n    ...rest\n  } = props;\n  let valueFromStore;\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([(input as any)[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n  valueFromStore = input.value;\n  if (customOverrides.defaultValue != null) {\n    valueFromStore = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n  }\n  delete customOverrides.value;\n  delete customOverrides.defaultValue;\n\n  const onChange = customOverrides.onChange && handleChange(customOverrides.onChange) || input.onChange;\n  // This is done to disconnect the input value from the state upon execution of the onChange, which means that the value\n  // from store is displayed instead. It is necessary for fields which get their data based on an index (like the ones\n  // in ProductRow), which upon somehow changing their index would display their stateful input value in whatever Field\n  // happens to be at that index now. So basically while a debounced action is in progress, we show the value from state,\n  // otherwise we show the one from the store.\n  const enhancedOnChange = (e) => {\n    onChange(e);\n    setTemporaryValue(null);\n  };\n\n  const debounceChange = useCallback(debounce(enhancedOnChange || (() => null), customOverrides.debounce || 175), []);\n  const [value, setTemporaryValue] = React.useState(null);\n\n  // Immediately shows the input value and calls the onChange later\n  const handleDebounceChange = (event) => {\n    event.persist();\n    const inputValue = event.target.value;\n    setTemporaryValue(inputValue);\n    debounceChange(event);\n  };\n\n  const placeholder = customOverrides.placeholder && customOverrides.require ? `${customOverrides.placeholder} *` : customOverrides.placeholder;\n  return (\n    <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n      <TextField\n        label={require ? `${label} *` : label}\n        {...customOverrides}\n        {...rest}\n        value={value !== null ? value : valueFromStore}\n        onChange={handleDebounceChange}\n        placeholder={placeholder ? placeholder : ''}\n      />\n      <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>\n    </FormControl>\n  );\n};\n\nexport default FieldTextField;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 6.5c2.76 0 5 2.24 5 5 0 .51-.1 1-.24 1.46l3.06 3.06c1.39-1.23 2.49-2.77 3.18-4.53C21.27 7.11 17 4 12 4c-1.27 0-2.49.2-3.64.57l2.17 2.17c.47-.14.96-.24 1.47-.24zM2.71 3.16c-.39.39-.39 1.02 0 1.41l1.97 1.97C3.06 7.83 1.77 9.53 1 11.5 2.73 15.89 7 19 12 19c1.52 0 2.97-.3 4.31-.82l2.72 2.72c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L4.13 3.16c-.39-.39-1.03-.39-1.42 0zM12 16.5c-2.76 0-5-2.24-5-5 0-.77.18-1.5.49-2.14l1.57 1.57c-.03.18-.06.37-.06.57 0 1.66 1.34 3 3 3 .2 0 .38-.03.57-.07L14.14 16c-.65.32-1.37.5-2.14.5zm2.97-5.33c-.15-1.4-1.25-2.49-2.64-2.64l2.64 2.64z\"\n}), 'VisibilityOffRounded');\n\nexports.default = _default;","import type {\n  Client,\n  Event,\n  EventHint,\n  EventProcessor,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  IntegrationFnResult,\n  Options,\n} from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { addGlobalEventProcessor } from './eventProcessors';\nimport { getClient } from './exports';\nimport { getCurrentHub } from './hub';\n\ndeclare module '@sentry/types' {\n  interface Integration {\n    isDefaultInstance?: boolean;\n  }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration && integration.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    // eslint-disable-next-line deprecation/deprecation\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor: EventProcessor = (event: Event, hint: EventHint): ReturnType<typeof callback> =>\n      callback(event, hint, client);\n    processor.id = integration.name;\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getClient();\n\n  if (!client || !client.addIntegration) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nexport function convertIntegrationFnToClass<Fn extends IntegrationFn>(\n  name: string,\n  fn: Fn,\n): IntegrationClass<Integration> {\n  const ConvertedIntegration = function ConvertedIntegration(...args: Parameters<Fn>): Integration {\n    return fn(...args);\n  };\n  ConvertedIntegration.id = name;\n  return ConvertedIntegration as unknown as IntegrationClass<Integration>;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => IntegrationFnResult {\n  return fn;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport var keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nexport default function createBreakpoints(breakpoints) {\n  var _breakpoints$values = breakpoints.values,\n      values = _breakpoints$values === void 0 ? {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920\n  } : _breakpoints$values,\n      _breakpoints$unit = breakpoints.unit,\n      unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n      _breakpoints$step = breakpoints.step,\n      step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n      other = _objectWithoutProperties(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n  function up(key) {\n    var value = typeof values[key] === 'number' ? values[key] : key;\n    return \"@media (min-width:\".concat(value).concat(unit, \")\");\n  }\n\n  function down(key) {\n    var endIndex = keys.indexOf(key) + 1;\n    var upperbound = values[keys[endIndex]];\n\n    if (endIndex === keys.length) {\n      // xl down applies to all sizes\n      return up('xs');\n    }\n\n    var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n    return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n  }\n\n  function between(start, end) {\n    var endIndex = keys.indexOf(end);\n\n    if (endIndex === keys.length - 1) {\n      return up(start);\n    }\n\n    return \"@media (min-width:\".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, \") and \") + \"(max-width:\".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, \")\");\n  }\n\n  function only(key) {\n    return between(key, key);\n  }\n\n  function width(key) {\n    return values[key];\n  }\n\n  return _extends({\n    keys: keys,\n    values: values,\n    up: up,\n    down: down,\n    between: between,\n    only: only,\n    width: width\n  }, other);\n}","import { AmplitudeReturn } from '@amplitude/analytics-types';\n\nexport const returnWrapper: {\n  (): AmplitudeReturn<void>;\n  <T>(awaitable: Promise<T>): AmplitudeReturn<T>;\n} = <T>(awaitable?: Promise<T>) => ({\n  promise: awaitable || Promise.resolve(),\n});\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nfunction _getRequireWildcardCache(nodeInterop) {\n  if (typeof WeakMap !== \"function\") return null;\n  var cacheBabelInterop = new WeakMap();\n  var cacheNodeInterop = new WeakMap();\n  return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {\n    return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n  })(nodeInterop);\n}\n\nfunction _interopRequireWildcard(obj, nodeInterop) {\n  if (!nodeInterop && obj && obj.__esModule) {\n    return obj;\n  }\n\n  if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") {\n    return {\n      \"default\": obj\n    };\n  }\n\n  var cache = _getRequireWildcardCache(nodeInterop);\n\n  if (cache && cache.has(obj)) {\n    return cache.get(obj);\n  }\n\n  var newObj = {};\n  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n  for (var key in obj) {\n    if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n\n      if (desc && (desc.get || desc.set)) {\n        Object.defineProperty(newObj, key, desc);\n      } else {\n        newObj[key] = obj[key];\n      }\n    }\n  }\n\n  newObj[\"default\"] = obj;\n\n  if (cache) {\n    cache.set(obj, newObj);\n  }\n\n  return newObj;\n}\n\nmodule.exports = _interopRequireWildcard;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","import * as React from 'react';\nimport { makeSelectUserRole, makeSelectUserId, makeSelectUserFirmId, makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { List } from 'immutable';\nimport { AclRoles } from '../../models';\n\nexport interface IWithUserPermissions {\n  selfUserRoles: List<string>;\n  selfUserId: number;\n  selfFirmId: number;\n  selfOfficeId: number;\n  isFirmAdmin: boolean;\n  isOfficeAdmin: boolean;\n  isSuperUser: boolean;\n  hasOfficeAdminPermissions: (officeId: number) => boolean;\n  hasFirmAdminPermissions: (firmId: number) => boolean;\n  hasEditSelfPermissions: (userId: number) => boolean;\n}\n\nconst withUserPermissions = (ChildComponent) => {\n  const useUserPermissions = (props: IWithUserPermissions) => {\n    const {\n      selfUserId,\n      selfOfficeId,\n      selfFirmId,\n      isFirmAdmin,\n      isOfficeAdmin,\n      isSuperUser,\n    } = props;\n\n    const hasOfficeAdminPermissions = (officeId: number): boolean => {\n      const isInOffice = selfOfficeId === officeId;\n      return isInOffice && isOfficeAdmin || isSuperUser && isInOffice;\n    };\n\n    const hasFirmAdminPermissions = (firmId: number): boolean => {\n      const isInFirm = selfFirmId === firmId;\n      return isFirmAdmin && isInFirm || isSuperUser && isInFirm;\n    };\n\n    const hasEditSelfPermissions = (userId: number): boolean => {\n      return selfUserId === userId;\n    };\n\n    return <ChildComponent\n      hasOfficeAdminPermissions={hasOfficeAdminPermissions}\n      hasFirmAdminPermissions={hasFirmAdminPermissions}\n      hasEditSelfPermissions={hasEditSelfPermissions}\n      {...props}\n    />;\n  };\n\n  const mapStateToProps = (state, ownProps) => {\n    const selfUserRoles = makeSelectUserRole()(state);\n    const isFirmAdmin = selfUserRoles.includes(AclRoles.FIRM_ADMIN);\n    const isOfficeAdmin = selfUserRoles.includes(AclRoles.OFFICE_ADMIN);\n    const isSuperUser = selfUserRoles.includes(AclRoles.SUPER_USER);\n    return {\n      selfUserRoles,\n      isFirmAdmin,\n      isOfficeAdmin,\n      isSuperUser,\n      ...createStructuredSelector({\n        selfUserId: makeSelectUserId(),\n        selfFirmId: makeSelectUserFirmId(),\n        selfOfficeId: makeSelectUserOfficeId(),\n      })(state)\n    };\n  };\n\n  return connect(mapStateToProps)(useUserPermissions);\n};\n\nexport default withUserPermissions;","import { serializeStyles } from '@emotion/serialize';\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nexport default css;\n","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nexport default {};\n\nexport enum DebugActionTypes {\n  DEBUG = 'DEBUG/4949',\n}\n\nexport class SetDebug implements IAction {\n  public readonly type = DebugActionTypes.DEBUG;\n\n  constructor(\n    public payload?: number\n  ) {}\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5s-3 1.34-3 3 1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-1.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05.02.01.03.03.04.04 1.14.83 1.93 1.94 1.93 3.41V18c0 .35-.07.69-.18 1H22c.55 0 1-.45 1-1v-1.5c0-2.33-4.67-3.5-7-3.5z\"\n}), 'PeopleRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v1c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-1c0-2.66-5.33-4-8-4z\"\n}), 'PersonRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1.41 16.09V20h-2.67v-1.93c-1.71-.36-3.16-1.46-3.27-3.4h1.96c.1 1.05.82 1.87 2.65 1.87 1.96 0 2.4-.98 2.4-1.59 0-.83-.44-1.61-2.67-2.14-2.48-.6-4.18-1.62-4.18-3.67 0-1.72 1.39-2.84 3.11-3.21V4h2.67v1.95c1.86.45 2.79 1.86 2.85 3.39H14.3c-.05-1.11-.64-1.87-2.22-1.87-1.5 0-2.4.68-2.4 1.64 0 .84.65 1.39 2.67 1.91s4.18 1.39 4.18 3.91c-.01 1.83-1.38 2.83-3.12 3.16z\"\n}), 'MonetizationOn');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\n\nexports.default = _default;","import {\n  Map, List,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createSelector,\n} from 'reselect';\nimport {\n  IErrorReducerState\n} from './reducer';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ErrorModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const selectErrors = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IErrorReducerState>) => state.get('errors')\n);\n\nexport const selectErrorMenuOpen = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IErrorReducerState>) => state.get('errorMenuOpen')\n);\n\nexport default {\n  selectReducerState,\n  selectErrors,\n  selectErrorMenuOpen,\n};\n","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n  if (isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}","/* tslint:disable */\nimport * as React from 'react';\nimport {AnyAction, bindActionCreators, compose, Dispatch,} from 'redux';\nimport {connect} from 'react-redux';\nimport {\n  makeSelectMasterProjectspec,\n  makeSelectMode,\n  makeSelectSelectedMasterSpecId,\n  makeSelectSelectedSpecId, makeSelectSelectedTemplateSpecId,\n  makeSelectSpec, makeSelectTemplateProjectSpec,\n} from '../../modules/SpecModule/selectors';\nimport {getIn,} from 'immutable';\nimport {\n  GetMasterSpecsAction,\n  GetSpecsAction,\n  GetTemplateSpecsAction,\n  SelectMasterSpecAction,\n  SelectSpecAction, SelectTemplateSpecAction,\n  SetTestSpecModeAction,\n} from '../../modules/SpecModule/actions';\nimport {Spec,} from '../../models';\nimport {IMap, IMatch,} from 'ats-utils/src/Interfaces';\nimport {generatePath,} from 'react-router';\nimport {replace,} from 'connected-react-router';\nimport {Mode, SPEC_TYPE} from '../../constants';\n\nconst getSpecs = (...args) => new GetSpecsAction(...args);\nconst getMasterSpecs = (...args) => new GetMasterSpecsAction(...args);\nconst getTemplateSpecs = (...args) => new GetTemplateSpecsAction(...args);\nconst setSpec = (specId: number) => new SelectSpecAction(specId);\nconst setMasterSpec = (specId: number) => new SelectMasterSpecAction(specId);\nconst setTemplateSpec = (specId: number) => new SelectTemplateSpecAction(specId);\nconst setTestSpec = (mode: boolean) => new SetTestSpecModeAction(mode);\n\n\nexport type WithSpecId = {\n  getSpecs: ({ specId, onFailed }: { specId?: number, onFailed: (error: any) => void }) => void;\n  getMasterSpecs: ({ specId }: { specId?: number }) => void;\n  getTemplateSpecs: (specId?: number) => void;\n  setSpec: (specId: number) => void;\n  setMasterSpec: (specId: number) => void;\n  setTemplateSpec: (specId: number) => void;\n  replace: (path: string) => void;\n  setTestSpec: (mode: boolean) => void;\n  specId: number;\n  selectedId: number;\n  controlledId?: number;\n  isControlled: boolean;\n  spec?: IMap<Spec>;\n  specType: string;\n  specTestMode: boolean;\n  dispatch: Dispatch<AnyAction>;\n}\n\nexport type WithSpecIdOptions = {\n  withSpec?: boolean;\n  getAll?: boolean;\n  redirectToControlled?: boolean;\n  onGetSpecFailed?: ({ dispatch, error } : { dispatch: Dispatch<AnyAction>, error: any }) => void;\n}\n\nconst withSpecId = ({\n  withSpec,\n  getAll,\n  redirectToControlled,\n  onGetSpecFailed = () => {},\n}: WithSpecIdOptions = {}) => <T extends React.Component, OriginalProps extends {}>(Component: React.ComponentClass<OriginalProps> | React.FC<OriginalProps>) => {\n\n  type PrivateProps = {\n    forwardedRef: React.RefObject<T>;\n  };\n\n  type ComponentProps = {\n    specId?: number;\n    match: IMatch;\n  };\n\n  type Props = OriginalProps & PrivateProps & ComponentProps;\n\n  class WithSpecIdInner extends React.Component<Props & WithSpecId> {\n\n    // this is only used to get data for controlled spec id\n    // we assume that if we're using selected spec id, the data already exists\n    public getData(id?: number) {\n      const {\n        getSpecs,\n        getMasterSpecs,\n        getTemplateSpecs,\n        setSpec,\n        setMasterSpec,\n        setTemplateSpec,\n        selectedId,\n        specType,\n        dispatch,\n      } = this.props;\n\n      // only get data for specs if we have a controlled id ( e.g. not null ) OR if getAll option is set \n      // null id passed to getSpecs will get *all* specs - we want to be explicit with this\n      if ((id != null && id !== -1 && !isNaN(id)) || getAll) {\n        if (specType === SPEC_TYPE.spec || !specType) {\n          getSpecs({\n            specId: id,\n            onFailed: (error) => {\n              onGetSpecFailed({ dispatch, error });\n            }\n          });\n        } else if (specType === SPEC_TYPE.masterTemplate) {\n          getTemplateSpecs(id);\n        } else {\n          getMasterSpecs({ specId: id });\n        }\n        if (selectedId !== id) {\n          if (specType === SPEC_TYPE.spec || !specType) {\n            setSpec(id != null ? id : -1)\n          } else if (specType === SPEC_TYPE.masterTemplate) {\n            setTemplateSpec(id != null ? id : -1);\n          } else {\n            setMasterSpec(id != null ? id : -1);\n          }\n        }\n      }\n    }\n\n    public redirectToControlled(nextId?: number) {\n      const {\n        controlledId,\n        match,\n        specId: _specId,\n      } = this.props;\n\n      const specId = nextId != null ? nextId : _specId;\n\n      if (controlledId != null || specId === -1) {\n        return;\n      }\n      if (match == null) {\n        console.debug(`When using redirectToControlled option, match must not be null`, { match });\n      }\n      if (!match.params.hasOwnProperty('specId')) {\n        console.debug(`When using redirectToControlled option, path [${match.path}] must contain specId parameter`);\n        return;\n      }\n\n      const redirectPath = generatePath(match.path, { ...match.params, specId })\n      replace(redirectPath);\n    }\n  \n    public componentDidMount() {\n      const {\n        controlledId,\n        spec,\n      } = this.props;\n\n      if (redirectToControlled) {\n        this.redirectToControlled();\n      }\n      this.getData(controlledId);\n    }\n\n    public componentWillUpdate(nextProps: any, nextState: any) {\n      const {\n        controlledId: nextControlledId,\n        specId: nextSpecId,\n        specTestMode: nextSpecTestMode,\n        spec: nextSpec,\n      } = nextProps;\n\n      const {\n        controlledId,\n        specTestMode,\n        spec,\n        setTestSpec,\n      } = this.props;\n\n      if (nextSpecTestMode !== specTestMode) {\n        nextSpec && setTestSpec(nextSpecTestMode);\n      }\n\n      if (redirectToControlled) {\n        this.redirectToControlled(nextSpecId);\n      }\n      if ((controlledId !== nextControlledId) && (controlledId !== undefined)) {\n        this.getData(nextControlledId);\n      }\n    }\n\n    public render() {\n      const {\n        forwardedRef,\n        ...restPropsTmp\n      } = this.props as PrivateProps;\n\n      const rest = restPropsTmp as OriginalProps;\n  \n      return (\n        <Component\n          ref={forwardedRef as React.RefObject<any>}\n          {...rest}\n        />\n      );\n    }\n  }\n\n  const mapStateToProps = (state: any, props: ComponentProps) => {\n    const {\n      match,\n      specId: originalId, // passed in to component\n    } = props;\n    // if (match == null) {\n    //   console.error('Missing match, component must either be used in <Route /> or be provided match prop using createMatchSelector', { // tslint:disable-line\n    //     match,\n    //   });\n    // }\n    const mode = makeSelectMode()(state);\n    let specType;\n    let selectedId;\n    switch(mode) {\n      case Mode.master: {\n        specType = SPEC_TYPE.masterSpec;\n        selectedId = makeSelectSelectedMasterSpecId()(state)\n        break;\n      }\n      case Mode.masterTemplate: {\n        specType = SPEC_TYPE.masterTemplate;\n        selectedId = makeSelectSelectedTemplateSpecId()(state)\n        break;\n      }\n      default: {\n        specType = SPEC_TYPE.spec;\n        selectedId = makeSelectSelectedSpecId()(state);\n      }\n    }\n    const paramsId = getIn(match, ['params', 'specId'], undefined); // from path / router\n\n    // masterSpec or normal spec\n    const controlledId = originalId != null // passed in to component OR from path\n      ? originalId\n      : paramsId != null\n        ? parseInt(paramsId, 10)\n        : undefined;\n    const isControlled = controlledId != null; // if it was from component OR from path\n    const specId = controlledId != null // controlled OR selected from state\n      ? controlledId\n      : selectedId;\n    let spec = null;\n    if (withSpec) {\n      switch (specType) {\n        case SPEC_TYPE.masterSpec: {\n          spec = makeSelectMasterProjectspec({ specId })(state);\n          break;\n        }\n        case SPEC_TYPE.masterTemplate: {\n          spec = makeSelectTemplateProjectSpec({ specId })(state);\n          break;\n        }\n        default: {\n          spec = makeSelectSpec({ specId })(state);\n        }\n      }\n    }\n    const specTestMode = spec && (spec.get('status') === 'test' ? true : false);\n    return {\n      selectedId,\n      controlledId,\n      isControlled,\n      specId,\n      spec,\n      specType,\n      specTestMode,\n    }\n  };\n  \n  const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n    return {\n      ...bindActionCreators({ replace, getSpecs, getMasterSpecs, getTemplateSpecs, setSpec, setMasterSpec, setTemplateSpec, setTestSpec }, dispatch),\n      dispatch,\n    };\n  };\n\n  const WrappedWithSpecIdInner = compose<React.ComponentClass<Props>>(\n    connect(mapStateToProps, mapDispatchToProps),\n  )(WithSpecIdInner);    \n\n  const RefForwardingFactory = (props: Props, ref: T) => {\n    return <WrappedWithSpecIdInner {...props} forwardedRef={ref} />\n  };\n\n  const WithSpecId = React.forwardRef<T, OriginalProps>(RefForwardingFactory as any);\n  return WithSpecId;\n}\n\nexport default withSpecId;","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n  (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n  const onHiddenOrPageHide = (event: Event): void => {\n    if (event.type === 'pagehide' || WINDOW.document!.visibilityState === 'hidden') {\n      cb(event);\n      if (once) {\n        removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n        removeEventListener('pagehide', onHiddenOrPageHide, true);\n      }\n    }\n  };\n\n  if (WINDOW.document) {\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n  }\n};\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'ats💾';","import React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar Tablelvl2Context = React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n  Tablelvl2Context.displayName = 'Tablelvl2Context';\n}\n\nexport default Tablelvl2Context;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0z\"\n})), 'Star');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11.8 10.9c-2.27-.59-3-1.2-3-2.15 0-1.09 1.01-1.85 2.7-1.85 1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-1.94.42-3.5 1.68-3.5 3.61 0 2.31 1.91 3.46 4.7 4.13 2.5.6 3 1.48 3 2.41 0 .69-.49 1.79-2.7 1.79-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c1.95-.37 3.5-1.5 3.5-3.55 0-2.84-2.43-3.81-4.7-4.4z\"\n}), 'AttachMoney');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M5 4v2h14V4H5zm0 10h4v6h6v-6h4l-7-7-7 7z\"\n}), 'Publish');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n}), 'Create');\n\nexports.default = _default;","import * as React from 'react';\n\n// Lets the Import button (deep inside the drawer's tabs/tables) trigger the host page's\n// existing drop logic. Each page provides a callback that takes the same draggableId the\n// drag-and-drop flow would produce and feeds it through its onDragEnd handler, so no\n// import logic is duplicated.\nexport type ImportSelectedDrawingsHandler = (draggableId: string) => void;\n\nconst ImportSelectedDrawingsContext = React.createContext<ImportSelectedDrawingsHandler>(() => undefined);\n\nexport const useImportSelectedDrawings = () => React.useContext(ImportSelectedDrawingsContext);\n\nexport default ImportSelectedDrawingsContext;\n","import React from 'react';\nimport {Grid} from '@material-ui/core';\n\nfunction ViewContainer({ children }) {\n    return (\n        <Grid\n            container={true}\n            item={true}\n            style={{ flex: 1 }}\n            direction='column'\n        >\n            {children}\n        </Grid>\n    );\n}\n\nexport default ViewContainer;","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {connect} from 'react-redux';\nimport { fromJS, List, Map } from 'immutable';\nimport {\n  WithTranslation,\n  withTranslation,\n} from 'react-i18next';\nimport {\n  Button,\n  Divider,\n  Grid,\n  IconButton,\n  InputAdornment,\n  ListItem,\n  List as MuiList,\n  Paper,\n  TablePagination,\n  TextField,\n  Theme,\n  Tooltip,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {StyleRules, WithTheme} from '@material-ui/core/styles';\nimport {IAction, IMap} from 'ats-utils/src/Interfaces';\nimport { Field, reduxForm } from 'redux-form/immutable';\nimport { BaseFieldProps, change } from 'redux-form';\nimport HomeWorkIcon from '@material-ui/icons/HomeWork';\nimport SearchIcon from '@material-ui/icons/Search';\nimport AddIcon from '@material-ui/icons/Add';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteRoundedIcon from '@material-ui/icons/DeleteRounded';\nimport FieldRadio, { IFieldRadioComponentProps } from '../../components/FieldRadio';\nimport { SETTINGS_ATTACHMENT_FOLDERS_TEMPLATE_PATH, SETTINGS_PATH } from '../../constants';\nimport { push } from 'connected-react-router';\nimport { CreateAttachmentFolderTemplateAction, GetAttachmentFolderTemplatesAction, GetDefaultAttachmentFolderTemplateAction, SetFirmDefaultAttachmentFolderTemplateAction, SetSelectedAttachmentFolderTemplateIdAction, SetUserDefaultAttachmentFolderTemplateAction, UpdateAttachmentFolderTemplateAction } from '../../modules/AccountModule/actions';\nimport { makeSelectAttachmentFolderTemplates, makeSelectDefaultAttachmentFolderTemplate } from '../../modules/AccountModule/selectors';\nimport DeleteModalDialog from '../../components/DeleteModalDialog';\nimport { makeSelectUserHasFirmAdmin, makeSelectCanManageFolderTemplates } from '../../modules/AtsModule/selectors';\n\ninterface IAttachmentFoldersPage {\n  isFirmAdmin: boolean;\n  attachmentFolderTemplatesList: List<Map<string, any>>;\n  canManageFolderTemplates: boolean;\n  defaultTemplate: Map<string,any>;\n  getAttachmentFolderTemplates: () => void;\n  getDefaultAttachmentFolderTemplate: () => void;\n  dispatch: Dispatch<IAction>;\n}\n\nexport const DEFAULT_FOLDER_ATTACHMENT_TEMPLATE = 'defaultFolderAtttachmentTemplate';\nexport const ADD_ATTACHMENT_FOLDERS_TEMPLATE_PATH = `${SETTINGS_PATH}${SETTINGS_ATTACHMENT_FOLDERS_TEMPLATE_PATH}`;\n\nexport enum DEFAULT_ATTACHMENT_TEMPLATE_VISIBILITY_LEVEL {\n  FIRM = 'firm',\n  USER = 'user'\n}\n\ntype AttachmentFoldersPageProps = IAttachmentFoldersPage & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nclass AttachmentFoldersPage extends React.PureComponent<AttachmentFoldersPageProps> {\n  public state = {\n    isDeleteModalOpen: false,\n    page: 0,\n    rowsPerPage: 10,\n    searchTerm: '',\n    templatesList: this.props.attachmentFolderTemplatesList,\n    idToDelete: null,\n    itemName: ''\n  };\n\n  public componentDidMount() {\n    this.props.getAttachmentFolderTemplates();\n    this.props.getDefaultAttachmentFolderTemplate();\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {attachmentFolderTemplatesList} = this.props;\n    if (attachmentFolderTemplatesList !== prevProps.attachmentFolderTemplatesList) {\n      this.setState({templatesList : attachmentFolderTemplatesList});\n    }\n  }\n\n  public goToTemplatePage = (templateId: number) => {\n    const {dispatch} = this.props;\n    dispatch(new SetSelectedAttachmentFolderTemplateIdAction(templateId));\n    dispatch(push(ADD_ATTACHMENT_FOLDERS_TEMPLATE_PATH));\n  }\n\n  public render() {\n    const {\n      classes,\n      dispatch,\n      isFirmAdmin,\n      defaultTemplate,\n      canManageFolderTemplates,\n      theme,\n      t\n    } = this.props;\n    const {\n      isDeleteModalOpen,\n      page,\n      rowsPerPage,\n      searchTerm,\n      templatesList,\n      idToDelete,\n      itemName\n    } = this.state;\n\n    return (\n    <form>\n      <Paper\n        classes={{\n          root: classes.paperContainer\n        }}\n      >\n        <Grid container={true} className={classes.container}>\n          <Grid container={true} item={true} xs={12} className={classes.headerContainer}>\n            <Grid item={true} xs={10}>\n              <Grid container={true} direction='row' alignItems='center'>\n                <Typography variant='h5'>\n                  {t('attachmentFoldersTemplate.title')}\n                </Typography>\n              </Grid>\n              <Typography variant='caption'>\n                {t('attachmentFoldersTemplate.subTitle')}\n              </Typography>\n            </Grid>\n            <Grid item={true} container={true} xs={2}  direction='row' justify='flex-end' alignItems='center'>\n              <Grid item={true}>\n                <Button\n                  color='primary'\n                  onClick={() => {\n                    dispatch(change(DEFAULT_FOLDER_ATTACHMENT_TEMPLATE, `myDefaultTemplate`, null));\n                    dispatch(new SetUserDefaultAttachmentFolderTemplateAction({templateId: null}));\n                    if (isFirmAdmin) {\n                      dispatch(change(DEFAULT_FOLDER_ATTACHMENT_TEMPLATE, `firmDefaultTemplate`, null));\n                      dispatch(new SetFirmDefaultAttachmentFolderTemplateAction({templateId: null}));\n                    }\n                  }}\n                >\n                  {t('formButtons.reset')}\n                </Button>\n              </Grid>\n              <Grid item={true}>\n                <Tooltip title={canManageFolderTemplates ? '' : t('generalTooltip.disabledAskAdminForAssistance')}>\n                  <span>\n                    <IconButton\n                      disabled={!canManageFolderTemplates}\n                      onClick={() => {\n                        dispatch(new CreateAttachmentFolderTemplateAction({templateName: t('attachmentFoldersTemplate.defaultTemplateName')}));\n                      }}\n                    >\n                      <AddIcon fontSize='large'/>\n                    </IconButton>\n                    </span>\n                </Tooltip>\n              </Grid>\n            </Grid>\n            <Grid container={true} item={true} xs={4} wrap='nowrap' alignItems='center' style={{marginLeft: 'auto', marginRight: theme.spacing(2)}}>\n              <TextField\n                placeholder={t('attachmentFoldersTemplate.searchPlaceholder')}\n                value={searchTerm}\n                onChange={ (e) => {\n                  const value = e.target.value;\n                  this.setState({searchTerm: value});\n                  setTimeout(() => this.searchTemplates(value), 500);\n                }}\n                InputProps={{\n                  startAdornment: (\n                    <InputAdornment position='start'>\n                      <SearchIcon />\n                    </InputAdornment>\n                  )\n                }}\n                fullWidth={true}\n              />\n            </Grid>\n          </Grid>\n          <Grid container={true} item={true} xs={12} />\n          <Grid container={true} item={true} xs={12} spacing={2}>\n            <Grid item={true} xs={12}>\n              <Divider/>\n            </Grid>\n            {isFirmAdmin &&\n              <Grid container={true} item={true} xs={3} justify='center' className={classes.listTitle}>\n                <Typography variant='caption' align='center'>\n                  {t('attachmentFoldersTemplate.setAsFirmDefault')}\n                </Typography>\n              </Grid>\n            }\n            <Grid container={true} item={true} xs={isFirmAdmin ? 3 : 4} justify='center' className={classes.listTitle}>\n              <Typography variant='caption' align='center'>\n                {t('attachmentFoldersTemplate.setAsMyDefault')}\n              </Typography>\n            </Grid>\n            <Grid item={true} xs={isFirmAdmin ? 4 : 6} className={classes.listTitle}>\n              <Typography variant='caption' >\n                {t('attachmentFoldersTemplate.folderTemplateName')}\n              </Typography>\n            </Grid>\n            <Grid item={true} xs={2} className={classes.listTitle}>\n              <Typography variant='caption' >\n                {t('attachmentFoldersTemplate.action')}\n              </Typography>\n            </Grid>\n            <Grid item={true} xs={12}>\n              <Divider/>\n            </Grid>\n            <Grid item={true} xs={12}>\n              <MuiList dense={false} disablePadding={true}>\n                {\n                  templatesList && templatesList\n                    .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n                    .map((template, index: number) => {\n                      const templateName = template.get('name');\n                      const templateId = template.get('id');\n                      const isFirmDefault = defaultTemplate.getIn(['firm', 'id']) === templateId;\n                      return (\n                        <React.Fragment key={index}>\n                          <ListItem className={classes.listItem}>\n                            <Grid container={true} alignItems='center' spacing={2}>\n                              {isFirmAdmin &&\n                                <Grid item={true} xs={3} container={true} justify='center' alignItems='center'>\n                                  <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                    name='firmDefaultTemplate'\n                                    component={FieldRadio}\n                                    props={{\n                                      color: 'primary',\n                                      checkedValue: templateId,\n                                      onClick: () => dispatch(new SetFirmDefaultAttachmentFolderTemplateAction({templateId})),\n                                      helperText: false, // align radio\n                                    }}\n                                    />\n                                </Grid>\n                              }\n                              <Grid item={true} xs={isFirmAdmin ? 3 : 4} container={true} justify='center' alignItems='center'>\n                                <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                  name='myDefaultTemplate'\n                                  component={FieldRadio}\n                                  props={{\n                                    color: 'primary',\n                                    checkedValue: templateId,\n                                    onClick: () => dispatch(new SetUserDefaultAttachmentFolderTemplateAction({templateId})),\n                                    helperText: false, // align radio\n                                  }}\n                                />\n                              </Grid>\n                              <Grid item={true} xs={isFirmAdmin ? 4 : 6} style={{position: 'relative'}}>\n                                {isFirmDefault && !isFirmAdmin &&\n                                  <Tooltip title={t('attachmentFoldersTemplate.homeIconTooltip')} style={{position: 'absolute', left: -25}}>\n                                    <HomeWorkIcon color='primary' />\n                                  </Tooltip>\n                                }\n                                <Typography\n                                  variant='caption'\n                                  color='primary'\n                                  className={classes.templateName}\n                                  onClick={() => this.goToTemplatePage(templateId)}\n                                >\n                                  {templateName}\n                                </Typography>\n                              </Grid>\n                              <Grid item={true} xs={2} className={classes.buttonsContainer}>\n                                <Tooltip title={canManageFolderTemplates ? '' : t('generalTooltip.disabledAskAdminForAssistance')}>\n                                  <span>\n                                    <IconButton\n                                      onClick={() => this.goToTemplatePage(templateId)}\n                                      disabled={!canManageFolderTemplates}\n                                      size='small'\n                                    >\n                                      <EditRoundedIcon fontSize='small'/>\n                                    </IconButton>\n                                  </span>\n                                </Tooltip>\n                                <Tooltip title={canManageFolderTemplates ? '' : t('generalTooltip.disabledAskAdminForAssistance')}>\n                                  <span>\n                                    <IconButton\n                                      onClick={() => {\n                                        this.setState({\n                                          isDeleteModalOpen: true,\n                                          idToDelete: templateId,\n                                          itemName: templateName\n                                        });\n                                      }}\n                                      disabled={!canManageFolderTemplates}\n                                      size='small'\n                                    >\n                                      <DeleteRoundedIcon fontSize='small'/>\n                                    </IconButton>\n                                  </span>\n                                </Tooltip>\n                              </Grid>\n                            </Grid>\n                          </ListItem>\n                        </React.Fragment>\n                      );\n                    })\n                }\n              </MuiList>\n            </Grid>\n          </Grid>\n          <Grid item={true} xs={12} className={classes.paginationContainer}>\n            <TablePagination\n              component='div'\n              count={templatesList && templatesList.size}\n              rowsPerPage={rowsPerPage}\n              page={page}\n              backIconButtonProps={{\n                'aria-label': 'Previous Page',\n              }}\n              nextIconButtonProps={{\n                'aria-label': 'Next Page',\n              }}\n              labelDisplayedRows={({ from, to, count }) => t('Pagination.labelFormat', {from, to, count, defaultValue: `${from}-${to} of ${count}`})}\n              labelRowsPerPage=''\n              onChangePage={this.handleChangePage}\n              onChangeRowsPerPage={this.handleChangeRowsPerPage}\n            />\n          </Grid>\n        </Grid>\n      </Paper>\n      <DeleteModalDialog\n        open={isDeleteModalOpen}\n        itemName={itemName}\n        dialogProps={{\n          maxWidth: 'xs',\n          fullWidth: true\n        }}\n        toggleDeleteModal={() => this.setState({isDeleteModalOpen: false})}\n        handleDelete={() => {\n          // it's a soft delete so we update status to 'deleted'\n          if (idToDelete) {\n            const updatedTemplate = {status: 'deleted'};\n            dispatch(new UpdateAttachmentFolderTemplateAction({templateId: idToDelete, updatedTemplate}));\n            this.setState({\n              isDeleteModalOpen: false\n            });\n          }\n        }}\n        withLoading={true}\n      />\n    </form>\n    );\n  }\n\n  private searchTemplates = (searchTerm: string) => {\n    const { attachmentFolderTemplatesList } = this.props;\n    const filteredTemplates = attachmentFolderTemplatesList.filter(template => template.get('name').toLowerCase().includes(searchTerm.toLowerCase()));\n    this.setState({templatesList: filteredTemplates});\n  }\n\n  private handleChangePage = (event, page) => {\n    this.setState({page});\n  }\n\n  private handleChangeRowsPerPage = event => {\n    this.setState({rowsPerPage: event.target.value});\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(2),\n  },\n  headerContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  paginationContainer: {\n    display: 'flex',\n    justifyContent: 'flex-end'\n  },\n  paperContainer: {\n    margin: `${theme.spacing() * 2}px`,\n  },\n  listTitle: {\n    padding: theme.spacing(2, 0),\n  },\n  listItem: {\n    color: theme.palette.text.primary,\n    paddingLeft: 0,\n    paddingRight: 0,\n    '&:hover': {\n      backgroundColor: theme.palette.grey[50],\n    }\n  },\n  buttonsContainer: {\n    maxHeight: '20px',\n    display: 'flex',\n    alignItems: 'center',\n  },\n  templateName: {\n    cursor: 'pointer',\n    '&:hover': {\n      textDecoration: 'underline',\n    }\n  }\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getAttachmentFolderTemplates: () => {\n      dispatch(new GetAttachmentFolderTemplatesAction({}));\n    },\n    getDefaultAttachmentFolderTemplate: () => {\n      dispatch(new GetDefaultAttachmentFolderTemplateAction({visibilityLevel: 'user'}));\n      dispatch(new GetDefaultAttachmentFolderTemplateAction({visibilityLevel: 'firm'}));\n    },\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  const defaultTemplate = makeSelectDefaultAttachmentFolderTemplate()(state);\n  return {\n    isFirmAdmin: makeSelectUserHasFirmAdmin()(state),\n    attachmentFolderTemplatesList: makeSelectAttachmentFolderTemplates()(state),\n    canManageFolderTemplates: makeSelectCanManageFolderTemplates()(state),\n    defaultTemplate,\n    initialValues: fromJS({\n      firmDefaultTemplate: defaultTemplate.getIn(['firm', 'id']) || null,\n      myDefaultTemplate: defaultTemplate.getIn(['user', 'id']) || null\n    })\n  };\n};\n\nexport default compose(\n  withStyles(styles, {withTheme: true}),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: DEFAULT_FOLDER_ATTACHMENT_TEMPLATE,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(AttachmentFoldersPage);\n","import * as React from 'react';\nimport {\n  Typography,\n  useTheme,\n  Grid,\n  Dialog,\n  DialogContent,\n  Theme,\n  Button,\n  TextField,\n  Chip,\n  Checkbox,\n  Radio,\n  CircularProgress\n} from '@material-ui/core';\nimport { ProductCategory } from '../../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { List, fromJS } from 'immutable';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectCategory, makeSelectFirmBrandTagsKeyed, makeSelectIsGettingFirmBrandTags, makeSelectMasterFormatRoots } from '../../../../modules/AccountModule/selectors';\nimport { makeSelectAllManufacturers } from '../../../../modules/ListModule/selectors';\nimport { GetAllManufacturersAction } from '../../../../modules/ListModule/actions';\nimport { AddBrandTagsAction, GetCategoriesAction, GetFirmBrandTagsAction, GetMasterFormatRootsAction, GetOfficeBrandTagsAction } from '../../../../modules/AccountModule/actions';\nimport { Autocomplete } from '@material-ui/lab';\nimport { VirtualizedList } from './VirtualizedList';\n\nenum SelectionType {\n  BRAND = 'brand',\n  CATEGORY = 'category',\n  DIVISION = 'division',\n  ALL = 'all',\n}\n\nexport interface IProductCategoryMenuHelper {\n  id: string;\n  label: string;\n  subList: List<string>;\n  categories: List<IMap<ProductCategory>>;\n  categoriesMap?: IMap<any>;\n}\n\ninterface IAddBrandTagDialogContentComponentProps {\n  open: boolean;\n  selectedOfficeId: number;\n  isHeadOffice?: boolean;\n  onClose: () => void;\n}\n\ninterface IAddBrandTagDialogContentProps extends IAddBrandTagDialogContentComponentProps {\n}\n\ntype AddBrandTagDialogContentProps = IAddBrandTagDialogContentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  paper: {\n    maxWidth: 660,\n    width: 660,\n  },\n  chip: {\n    margin: 2,\n  },\n  chipContainer: {\n    maxHeight: 144,\n    overflowY: 'auto',\n  },\n  orDivider: {\n    borderBottom: '1px solid #D8D8D8',\n    width: `calc(50% - ${theme.spacing(3)}px)`\n  }\n});\n\nconst AddBrandTagDialog = (props: AddBrandTagDialogContentProps) => {\n  const {\n    classes,\n    open,\n    selectedOfficeId,\n    isHeadOffice,\n    onClose,\n  } = props;\n\n  const dispatch = useDispatch();\n  const theme = useTheme();\n\n  const masterFormatRoots = useSelector(makeSelectMasterFormatRoots());\n  const firmBrandTagsKeyed = useSelector(makeSelectFirmBrandTagsKeyed());\n  const isAddingBrandTags = useSelector(makeSelectIsGettingFirmBrandTags());\n\n  const manufacturers = useSelector(makeSelectAllManufacturers());\n  const categories = useSelector(makeSelectCategory());\n\n  const [manufacturerInput, setManufacturerInput] = React.useState('');\n  const [selectedManufacturers, setSelectedManufacturers] = React.useState(List());\n  // const [selectedManufacturer, setSelectedManufacturer] = React.useState(null);\n  const [categoryInput, setCategoryInput] = React.useState('');\n  const [selectedCategories, setSelectedCategories] = React.useState(List());\n  const [divisionInput, setDivisionInput] = React.useState('');\n  const [selectedDivisions, setSelectedDivisions] = React.useState(List());\n\n  const [selectionType, setSelectionType] = React.useState(SelectionType.BRAND);\n  const [applyToFirm, setApplyToFirm] = React.useState(false);\n  const [canConfirm, setCanConfirm] = React.useState(false);\n\n  const disabledAdd = !(selectedManufacturers.size || selectedCategories.size || selectedDivisions.size);\n  // const disabledAdd = !selectedManufacturers.size;\n\n  React.useEffect(() => {\n    if (!masterFormatRoots?.size) {\n      dispatch(new GetMasterFormatRootsAction());\n    }\n    if (!manufacturers?.size) {\n      dispatch(new GetAllManufacturersAction());\n    }\n    if (!categories?.size) {\n      dispatch(new GetCategoriesAction());\n    }\n  }, []);\n\n  React.useEffect(() => {\n    if (!open) {\n      setSelectedManufacturers(List());\n      setSelectedCategories(List());\n      setSelectedDivisions(List());\n      setSelectionType(SelectionType.BRAND);\n      setApplyToFirm(false);\n      setCanConfirm(false);\n    }\n  }, [open]);\n\n  const handleAdd = () => {\n    if (isAddingBrandTags) {\n      return;\n    }\n\n    const officeIds = applyToFirm ? firmBrandTagsKeyed?.keySeq().toList() : List([String(selectedOfficeId)]);\n    let newBrandTags = List();\n\n    if (selectedDivisions.size) {\n      // add brand tag by divisions\n      const masterFormatRootIdsToAdd = selectedDivisions.map((division) => division.masterFormatRootId);\n\n      officeIds.forEach((officeId) => {\n        masterFormatRootIdsToAdd.forEach((masterFormatRootId) => {\n          newBrandTags = newBrandTags.push(fromJS({\n            officeId: Number(officeId),\n            masterFormatRootId: Number(masterFormatRootId),\n          }));\n        });\n      });\n    } else {\n      if (selectedManufacturers.size) {\n        // add brand tag by manufacturers\n        selectedManufacturers.forEach((manufacturer) => {\n          newBrandTags = newBrandTags.push(fromJS({\n            manufacturer: manufacturer.get('value'),\n            manufacturerId: manufacturer.get('id'),\n          }));\n        });\n      } else {\n        // add brand tag by categories\n        selectedCategories.forEach((category) => {\n          newBrandTags = newBrandTags.push(fromJS({\n            categoryId: category.id,\n            category: category.value,\n          }));\n        });\n      }\n\n      // filter for brand tags does doesn't already exist then add officeId to the new brand tags\n      newBrandTags = officeIds.reduce((acc, officeId) => {\n        const netNewBrandTags = newBrandTags.reduce((_acc, newBrandTag) => {\n          if (!firmBrandTagsKeyed.get(String(officeId))?.has(`${newBrandTag.get('manufacturerId') || 0}-${newBrandTag.get('categoryId') || 0}`)) {\n            return _acc.push(newBrandTag.set('officeId', Number(officeId)));\n          } else {\n            return _acc;\n          }\n        }, List());\n        return acc.concat(netNewBrandTags);\n      }, List());\n    }\n\n    if (newBrandTags.size) {\n      dispatch(new AddBrandTagsAction({\n        brandReps: newBrandTags,\n        byDivision: Boolean(selectedDivisions.size),\n        // byDivision: false,\n        onSuccess: () => {\n          if (officeIds.size > 1) {\n            dispatch(new GetFirmBrandTagsAction({ officeIds: officeIds.toJS() }));\n          } else {\n            dispatch(new GetOfficeBrandTagsAction({ officeId: Number(officeIds.get(0)) }));\n          }\n          onClose();\n        }\n      }));\n    } else {\n      onClose();\n    }\n  };\n\n\n  const handleDeleteManufacturer = (index: number) => {\n    setSelectedManufacturers(selectedManufacturers.delete(index));\n  };\n\n  const handleDeleteCategory = (index: number) => {\n    setSelectedCategories(selectedCategories.delete(index));\n  };\n\n  const handleDeleteDivision = (index: number) => {\n    setSelectedDivisions(selectedDivisions.delete(index));\n  };\n\n  const handleSelectionTypeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = e.target.value as SelectionType;\n    if (newValue !== selectionType) {\n      switch (newValue) {\n        case SelectionType.BRAND:\n          setSelectedCategories(List());\n          setSelectedDivisions(List());\n          break;\n        case SelectionType.CATEGORY:\n          setSelectedManufacturers(List());\n          setSelectedDivisions(List());\n          break;\n        case SelectionType.DIVISION:\n          setSelectedManufacturers(List());\n          setSelectedCategories(List());\n          break;\n        case SelectionType.ALL:\n          setSelectedManufacturers(manufacturers);\n          setSelectedCategories(List());\n          setSelectedDivisions(List());\n          break;\n      }\n      // if (newValue === SelectionType.SEARCH) {\n      //   setSelectedManufacturers(List());\n      // } else {\n      //   setSelectedManufacturers(manufacturers);\n      // }\n      setSelectionType(newValue);\n    }\n  };\n\n  const VirtualizedListComp = (defaultprops, ref) => {\n    return <VirtualizedList ref={ref} {...defaultprops} rowheight={32} />;\n  };\n  const vList = React.forwardRef(VirtualizedListComp);\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      classes={{\n        paper: classes.paper\n      }}\n    >\n      <DialogContent>\n        <Typography variant='h6' color='textPrimary' style={{ marginTop: theme.spacing(0) }}>\n        {'Add New Brand Tag'}\n        </Typography>\n        <Typography style={{ marginBottom: theme.spacing(1) }}>\n          {'Add manufacturers to the office'}\n        </Typography>\n        {/* <Typography color='textPrimary' style={{ margin: theme.spacing(2, 0) }}>\n          {'Add brand tags by one of the following options:'}\n        </Typography>\n        <Typography color='textPrimary'>\n          {'- Select one manufacturer'}\n        </Typography>\n        <Typography color='textPrimary'>\n          {'- Select one manufacturer + one or multiple categories as a combination'}\n        </Typography>\n        <Typography color='textPrimary'>\n          {'- Select one or multiple categories'}\n        </Typography>\n        <Typography color='textPrimary'>\n          {'- Select one or multiple division, where all categories involved would be added'}\n        </Typography> */}\n\n        {/* add brands via brands */}\n        <Grid container={true} wrap='nowrap' alignItems='center'>\n          <Radio\n            color='primary'\n            checked={selectionType === SelectionType.BRAND}\n            value={SelectionType.BRAND}\n            disabled={canConfirm}\n            onChange={handleSelectionTypeChange}\n          />\n          <Typography color='textPrimary'>\n            {'Search and add brand tags via manufacturers'}\n          </Typography>\n        </Grid>\n        {\n          selectionType === SelectionType.BRAND && <div style={{ marginLeft: 40, marginBottom: 16 }}>\n            <Autocomplete\n              options={manufacturers?.toJS() || []}\n              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n              value={null}\n              onChange={(e, value) => {\n                setSelectedManufacturers(selectedManufacturers.push(fromJS(value)));\n              }}\n              inputValue={manufacturerInput}\n              onInputChange={(e, value, reason) => {\n                if (reason === 'reset') {\n                  setManufacturerInput('');\n                } else {\n                  setManufacturerInput(value);\n                }\n              }}\n              blurOnSelect={true}\n              getOptionLabel={(option) => option?.value || ''}\n              renderInput={(params) => <TextField placeholder='Select Manufacturer' style={{ width: '100%' }} {...params} />}\n              renderOption={(option) => option && <Typography>{option.value}</Typography>}\n            />\n            {\n              selectedManufacturers.size > 0 && (\n                <>\n                  <Typography color='textPrimary' style={{ margin: theme.spacing(1, 0) }}>\n                    {`${selectedManufacturers.size} ${selectedManufacturers.size === 1 ? 'Manufacturer' : 'Manufacturers'} Added`}\n                  </Typography>\n                  <Grid container={true} className={classes.chipContainer}>\n                    {\n                      selectedManufacturers.map((manufacturer, index) => <Chip key={index} className={classes.chip} label={manufacturer.get('value')} onDelete={() => handleDeleteManufacturer(index)} />)\n                    }\n                  </Grid>\n                </>\n              )\n            }\n          </div>\n        }\n\n        {/* add brands via categories */}\n        <Grid container={true} wrap='nowrap' alignItems='center'>\n          <Radio\n            color='primary'\n            checked={selectionType === SelectionType.CATEGORY}\n            value={SelectionType.CATEGORY}\n            disabled={canConfirm}\n            onChange={handleSelectionTypeChange}\n          />\n          <Typography color='textPrimary'>\n            {'Search and add brand tags via categories'}\n          </Typography>\n        </Grid>\n        {\n          selectionType === SelectionType.CATEGORY && <div style={{ marginLeft: 40, marginBottom: 16 }}>\n            <Autocomplete\n              options={categories?.toJS() || []}\n              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n              value={null}\n              // onChange={(e, value) => {\n              //   setSelectedManufacturers(selectedManufacturers.push(fromJS(value)));\n              // }}\n              onChange={(e, value) => {\n                setSelectedCategories(selectedCategories.push(value));\n                if (selectedDivisions.size > 0) {\n                  setSelectedDivisions(List());\n                }\n              }}\n              inputValue={categoryInput}\n              onInputChange={(e, value, reason) => {\n                if (reason === 'reset') {\n                  setCategoryInput('');\n                } else {\n                  setCategoryInput(value);\n                }\n              }}\n              blurOnSelect={true}\n              getOptionLabel={(option) => option?.value || ''}\n              renderInput={(params) => <TextField placeholder='Select Category' style={{ width: '100%' }} {...params} />}\n              renderOption={(option) => option && <Typography>{option.value}</Typography>}\n            />\n            {\n              selectedCategories.size > 0 && (\n                <>\n                  <Typography color='textPrimary' style={{ margin: theme.spacing(1, 0) }}>\n                    {`${selectedCategories.size} ${selectedCategories.size === 1 ? 'Category' : 'Categories'} Added`}\n                  </Typography>\n                  <Grid container={true} className={classes.chipContainer}>\n                    {\n                      selectedCategories.map((category, index) => <Chip key={index} className={classes.chip} label={category.value} onDelete={() => handleDeleteCategory(index)} />)\n                    }\n                  </Grid>\n                </>\n              )\n            }\n          </div>\n        }\n\n        {/* add brands via divisions */}\n        <Grid container={true} wrap='nowrap' alignItems='center'>\n          <Radio\n            color='primary'\n            checked={selectionType === SelectionType.DIVISION}\n            value={SelectionType.DIVISION}\n            disabled={canConfirm}\n            onChange={handleSelectionTypeChange}\n          />\n          <Typography color='textPrimary'>\n            {'Search and add brand tags via divisions'}\n          </Typography>\n        </Grid>\n        {\n          selectionType === SelectionType.DIVISION && <div style={{ marginLeft: 40, marginBottom: 16 }}>\n            <Autocomplete\n              options={masterFormatRoots?.toJS() || []}\n              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n              value={null}\n              // onChange={(e, value) => {\n              //   setSelectedManufacturers(selectedManufacturers.push(fromJS(value)));\n              // }}\n              onChange={(e, value) => {\n                setSelectedDivisions(selectedDivisions.push(value));\n                if (selectedManufacturers.size > 0) {\n                  setSelectedManufacturers(List());\n                }\n                if (selectedCategories.size > 0) {\n                  setSelectedCategories(List());\n                }\n              }}\n              inputValue={divisionInput}\n              onInputChange={(e, value, reason) => {\n                if (reason === 'reset') {\n                  setDivisionInput('');\n                } else {\n                  setDivisionInput(value);\n                }\n              }}\n              blurOnSelect={true}\n              getOptionLabel={(option) => option?.value || ''}\n              renderInput={(params) => <TextField placeholder='Select Division' style={{ width: '100%' }} {...params} />}\n              renderOption={(option) => option && <Typography>{`Division ${option.division_number}`}</Typography>}\n            />\n            {\n              selectedDivisions.size > 0 && (\n                <>\n                  <Typography color='textPrimary' style={{ margin: theme.spacing(1, 0) }}>\n                    {`${selectedDivisions.size} ${selectedDivisions.size === 1 ? 'Division' : 'Divisions'} Added`}\n                  </Typography>\n                  <Grid container={true} className={classes.chipContainer}>\n                    {\n                      selectedDivisions.map((division, index) => <Chip key={index} className={classes.chip} label={division.division_number} onDelete={() => handleDeleteDivision(index)} />)\n                    }\n                  </Grid>\n                </>\n              )\n            }\n          </div>\n        }\n\n        <Grid container={true} wrap='nowrap' alignItems='center'>\n          <Radio\n            color='primary'\n            checked={selectionType === SelectionType.ALL}\n            value={SelectionType.ALL}\n            disabled={canConfirm}\n            onChange={handleSelectionTypeChange}\n          />\n          <Typography color='textPrimary'>\n            {'Add all brand tags'}\n          </Typography>\n        </Grid>\n\n        {\n          isHeadOffice && (\n            <Grid container={true} wrap='nowrap' alignItems='center' style={{ marginTop: theme.spacing(2) }}>\n              <Checkbox color='primary' disabled={canConfirm} onChange={(e, value) => setApplyToFirm(value)} />\n              <Typography color='textPrimary'>\n                {'Apply new brand tags to all offices'}\n              </Typography>\n            </Grid>\n          )\n        }\n\n        <Grid container={true} justify='flex-end' style={{ marginTop: theme.spacing(2) }}>\n          <Button\n            color='primary'\n            onClick={onClose}\n            style={{ marginRight: theme.spacing(2) }}\n            disabled={canConfirm || isAddingBrandTags}\n          >\n            { 'Cancel' }\n          </Button>\n          <Button\n            color='primary'\n            onClick={selectionType === SelectionType.ALL ? () => setCanConfirm(true) : handleAdd}\n            disabled={disabledAdd || canConfirm || isAddingBrandTags}\n            startIcon={isAddingBrandTags && <CircularProgress size='1em' />}\n          >\n            { 'Add' }\n          </Button>\n        </Grid>\n\n        {\n          canConfirm && <>\n            <Typography color='textPrimary' style={{ marginTop: theme.spacing(2), textAlign: 'right' }}>\n              {'Are you sure you want to add all brand tags?'}\n            </Typography>\n            <Grid container={true} justify='flex-end' style={{ marginTop: theme.spacing(2) }}>\n              <Button\n                color='primary'\n                onClick={() => setCanConfirm(false)}\n                style={{ marginRight: theme.spacing(2) }}\n                disabled={isAddingBrandTags}\n              >\n                { 'Cancel' }\n              </Button>\n              <Button\n                color='primary'\n                onClick={handleAdd}\n                disabled={isAddingBrandTags}\n                startIcon={isAddingBrandTags && <CircularProgress size='1em' />}\n              >\n                { 'Confirm' }\n              </Button>\n            </Grid>\n          </>\n        }\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default withStyles(styles)(AddBrandTagDialog);\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n}), 'Search');","import * as React from 'react';\nimport {\n  Paper,\n  ClickAwayListener,\n  Typography,\n  useTheme,\n  Popper,\n  Grid,\n  IconButton,\n  Dialog,\n  DialogContent,\n  Button,\n  Checkbox\n} from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { BrandTag } from '../../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\n\ninterface IDeleteDialogContentComponentProps {\n  open: boolean;\n  isHeadOffice?: boolean;\n  onClose: (e) => void;\n  handleDelete: (applyToFirm?: boolean) => void;\n}\n\ninterface IDeleteDialogContentProps extends IDeleteDialogContentComponentProps {\n}\n\nconst DeleteDialog = (props: IDeleteDialogContentProps) => {\n  const {\n    open,\n    isHeadOffice,\n    onClose,\n    handleDelete,\n  } = props;\n\n  const theme = useTheme();\n  const [applyToFirm, setApplyToFirm] = React.useState(false);\n\n  React.useEffect(() => {\n    if (!open) {\n      setApplyToFirm(false);\n    }\n  }, [open]);\n\n  return (\n    <Dialog\n      onClose={onClose}\n      aria-describedby='delete-brand-tag-dialog'\n      open={open}\n    >\n      <DialogContent>\n        <Typography color='textPrimary'>\n          {'Are you sure you want to delete brand tag from current office?'}\n        </Typography>\n\n        {\n          isHeadOffice && (\n            <Grid container={true} wrap='nowrap' alignItems='center' style={{ marginTop: theme.spacing(2) }}>\n              <Checkbox color='primary' onChange={(e, value) => setApplyToFirm(value)} />\n              <Typography color='textPrimary'>\n                {'Delete brand tag from all offices'}\n              </Typography>\n            </Grid>\n          )\n        }\n\n        <Grid container={true} justify='flex-end' style={{ marginTop: theme.spacing(2) }}>\n          <Button\n            color='primary'\n            onClick={onClose}\n            style={{ marginRight: theme.spacing(2) }}\n          >\n            { 'CANCEL' }\n          </Button>\n          <Button\n            color='primary'\n            onClick={() => handleDelete(applyToFirm)}\n          >\n            { 'DELETE' }\n          </Button>\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default DeleteDialog;","import * as React from 'react';\nimport {\n  Typography,\n  useTheme,\n  Grid,\n  Dialog,\n  DialogContent,\n  Theme,\n  Button,\n  Checkbox,\n} from '@material-ui/core';\nimport { ProductCategory } from '../../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectFirmBrandTags } from '../../../../modules/AccountModule/selectors';\nimport { DeleteBrandTagsByIdAction, GetFirmBrandTagsAction, GetOfficeBrandTagsAction } from '../../../../modules/AccountModule/actions';\n\n\nexport interface IProductCategoryMenuHelper {\n  id: string;\n  label: string;\n  subList: List<string>;\n  categories: List<IMap<ProductCategory>>;\n}\n\ninterface IDeleteAllDialogContentComponentProps {\n  open: boolean;\n  selectedOfficeId: number;\n  firmId: number;\n  isHeadOffice?: boolean;\n  onClose: () => void;\n}\n\ninterface IDeleteAllDialogContentProps extends IDeleteAllDialogContentComponentProps {\n}\n\ntype DeleteAllDialogContentProps = IDeleteAllDialogContentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  // paper: {\n  //   maxWidth: 460,\n  //   width: 460,\n  // },\n  chip: {\n    margin: 2,\n  },\n  chipContainer: {\n    maxHeight: 144,\n    overflowY: 'auto',\n  },\n  orDivider: {\n    borderBottom: '1px solid #D8D8D8',\n    width: `calc(50% - ${theme.spacing(3)}px)`\n  }\n});\n\nconst DeleteAllDialog = (props: DeleteAllDialogContentProps) => {\n  const {\n    classes,\n    open,\n    selectedOfficeId,\n    firmId,\n    isHeadOffice,\n    onClose,\n  } = props;\n\n  const dispatch = useDispatch();\n  const theme = useTheme();\n\n  const firmBrandTags = useSelector(makeSelectFirmBrandTags());\n\n  const [applyToFirm, setApplyToFirm] = React.useState(false);\n\n  React.useEffect(() => {\n    setApplyToFirm(false);\n  }, [open]);\n\n  const handleDeleteAll = () => {\n    if (applyToFirm) {\n      let officeIds = List<number>([]);\n      firmBrandTags?.forEach((officeBrandTags, officeId) => {\n        officeIds = officeIds.push(Number(officeId));\n      });\n\n      dispatch(new DeleteBrandTagsByIdAction({\n        firmIds: List([firmId]),\n        onSuccess: () => {\n          dispatch(new GetFirmBrandTagsAction({ officeIds: officeIds.toJS() }));\n        }\n      }));\n      onClose();\n    } else {\n      dispatch(new DeleteBrandTagsByIdAction({\n        officeIds: List([selectedOfficeId]),\n        onSuccess: () => {\n          dispatch(new GetOfficeBrandTagsAction({ officeId: selectedOfficeId }));\n        }\n      }));\n      onClose();\n    }\n  };\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      classes={{\n        paper: classes.paper\n      }}\n    >\n      <DialogContent>\n        <Typography variant='h6' color='textPrimary'>\n          {'Are you sure you want to delete all brand tags from current office?'}\n        </Typography>\n\n        {\n          isHeadOffice && (\n            <Grid container={true} wrap='nowrap' alignItems='center' style={{ marginTop: theme.spacing(2) }}>\n              <Checkbox color='primary' checked={applyToFirm} onChange={() => setApplyToFirm(!applyToFirm)} />\n              <Typography color='textPrimary'>\n                {'Delete all brand tags from all offices'}\n              </Typography>\n            </Grid>\n          )\n        }\n\n        <Grid container={true} justify='flex-end' style={{ marginTop: theme.spacing(2) }}>\n          <Button\n            color='primary'\n            onClick={onClose}\n            style={{ marginRight: theme.spacing(2) }}\n          >\n            { 'Cancel' }\n          </Button>\n          <Button\n            color='primary'\n            onClick={handleDeleteAll}\n          >\n            { 'Confirm' }\n          </Button>\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default withStyles(styles)(DeleteAllDialog);\n","import * as React from 'react';\nimport { Grid, Typography, Theme, Button, Input, InputAdornment, LinearProgress, useTheme, Chip, TablePagination } from '@material-ui/core';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { IMap } from 'ats-utils/src';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Search } from '@material-ui/icons';\nimport { NotFound, TablePaginationActions } from '../../../../components';\nimport { ReactComponent as LoadingImage } from '../../../../images/loadingCart.svg';\nimport { BrandTag } from '../../../../models';\nimport EmptyWidgetContent from '../../../../containers/Dashboard/WidgetLoader/EmptyWidgetContent';\nimport { AtsSvgEmptyAttachment } from '../../../../components/AtsSvg';\nimport { List, Map, fromJS } from 'immutable';\nimport { makeSelectFirmBrandTagsKeyed, makeSelectIsGettingFirmBrandTags, makeSelectOfficeBrandTags } from '../../../../modules/AccountModule/selectors';\nimport { DeleteBrandTagsByIdAction, GetFirmBrandTagsAction, GetOfficeBrandTagsAction } from '../../../../modules/AccountModule/actions';\nimport AddBrandTagDialog from './AddBrandTagDialog';\nimport DeleteDialog from './DeleteDialog';\nimport DeleteAllDialog from './DeleteAllDialog';\n\nconst CHIPS_PER_PAGE = 100;\n\nexport function brandTagsKeyMapped(selectedOfficebrandTags: List<IMap<BrandTag>>) {\n  return selectedOfficebrandTags?.reduce((acc, brandTag) => {\n    return acc.set(`${brandTag.getIn(['manufacturer', 'id']) || 0}-${brandTag.getIn(['category', 'id']) || 0}`, brandTag);\n  }, Map());\n}\n\nexport function sortBrandTagsByManufacturerAndDivision(selectedOfficebrandTags: List<IMap<BrandTag>>) {\n  const selectedOfficeBrandTagsMapByBrandAndDivision = selectedOfficebrandTags?.reduce((acc, brandTag) => {\n    const manufacturerName = brandTag.getIn(['manufacturer', 'name']) || null;\n    const divisionName = brandTag.getIn(['category', 'divisionNumber']) || null;\n    // const categoryName = brandTag.getIn(['category', 'name']) || null;\n\n    // const key = `${brandTag.getIn(['manufacturer', 'id'])}-${brandTag.getIn(['category', 'masterFormatRootId'])}-${brandTag.getIn(['category', 'id'])}`;\n    if (manufacturerName) {\n      if (acc.getIn(['manufacturer', manufacturerName])) {\n        return acc.setIn(['manufacturer', manufacturerName], acc.getIn(['manufacturer', manufacturerName]).push(brandTag));\n      } else {\n        return acc.setIn(['manufacturer', manufacturerName], List([brandTag]));\n        // return acc.setIn(['manufacturer', manufacturerName], OrderedMap({ 'sdf': brandTag }));\n      }\n    } else if (divisionName) {\n      if (acc.getIn(['division', divisionName])) {\n        return acc.setIn(['division', divisionName], acc.getIn(['division', divisionName]).push(brandTag));\n      } else {\n        return acc.setIn(['division', divisionName], List([brandTag]));\n      }\n    } else {\n      if (acc.get('category')) {\n        return acc.set('category', (acc.get('category') as List<any>).push(brandTag));\n      } else {\n        return acc.set('category', List([brandTag]));\n      }\n    }\n  }, Map());\n\n  const selectedOfficeBrandTagsSortedBrandList = (selectedOfficeBrandTagsMapByBrandAndDivision?.get('manufacturer') as any)?.keySeq().sort();\n  const selectedOfficeBrandTagsSortedDivisionList = (selectedOfficeBrandTagsMapByBrandAndDivision?.get('division') as any)?.keySeq().sort();\n\n  let selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse = List();\n  selectedOfficeBrandTagsSortedBrandList?.forEach(manufacturerName => {\n    selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse = selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse.push(fromJS({\n      manufacturer: selectedOfficeBrandTagsMapByBrandAndDivision.getIn(['manufacturer', manufacturerName, 0, 'manufacturer']),\n      collection: selectedOfficeBrandTagsMapByBrandAndDivision.getIn(['manufacturer', manufacturerName]).sortBy((brandTag) => brandTag.getIn(['category', 'name']))\n    }));\n  });\n  selectedOfficeBrandTagsSortedDivisionList?.forEach(divisionName => {\n    selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse = selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse.push(fromJS({\n      division: selectedOfficeBrandTagsMapByBrandAndDivision.getIn(['division', divisionName, 0, 'category']),\n      collection: selectedOfficeBrandTagsMapByBrandAndDivision.getIn(['division', divisionName]).sortBy((brandTag) => brandTag.getIn(['category', 'name']))\n    }));\n  });\n  if (selectedOfficeBrandTagsMapByBrandAndDivision?.get('category')) {\n    selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse = selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse.concat((selectedOfficeBrandTagsMapByBrandAndDivision?.get('category') as any).sortBy((brandTag) => brandTag.getIn(['category', 'name'])));\n  }\n\n  return selectedOfficeBrandTagsSortedByBrandAndDivisionCollapse;\n}\n\nexport const expandBrandTags = (collapsedBrandTags: List<IMap<BrandTag>>) => {\n  return collapsedBrandTags.reduce((acc, collapsedBrandTag) => {\n    if (collapsedBrandTag.get('collection')) {\n      return acc.concat(collapsedBrandTag.get('collection'));\n    } else {\n      return acc.push(collapsedBrandTag);\n    }\n  }, List());\n};\n\nenum SORT {\n  brandAndDivision = 'Manufacturers & Divisions',\n  all = 'All Brand Tags',\n}\n\ninterface IBrandTagsProps {\n  firmId?: number;\n  selectedOfficeId?: number;\n  isHeadOffice?: boolean;\n}\n\ntype BrandTagsProps = IBrandTagsProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  singleInfoContainer: {\n    padding: theme.spacing()\n  },\n  info: {\n    overflowWrap: 'anywhere',\n    fontWeight: 'bold'\n  },\n  input: {\n    width: 350\n  },\n  chipsContainer: {\n    margin: theme.spacing(2, 0),\n    maxHeight: 300,\n    overflowY: 'auto',\n  },\n  chip: {\n    margin: 2\n  },\n  toolbar: {\n    paddingLeft: 8\n  },\n  spacer: {\n    flex: 'none'\n  }\n});\n\nconst BrandTags: React.FC<BrandTagsProps> = ({classes, selectedOfficeId, firmId, isHeadOffice}): JSX.Element => {\n  const dispatch = useDispatch();\n  const theme = useTheme();\n\n  const firmBrandTagsKeyed = useSelector(makeSelectFirmBrandTagsKeyed());\n  const isGettingFirmBrandTags = useSelector(makeSelectIsGettingFirmBrandTags());\n\n  const selectedOfficebrandTags = useSelector(makeSelectOfficeBrandTags(String(selectedOfficeId)));\n\n  const [selectedOfficeDisplayedBrandTags, setSelectedOfficeDisplayedBrandTags] = React.useState(selectedOfficebrandTags);\n  const [searchTerm, setSearchTerm] = React.useState('');\n  const [page, setPage] = React.useState(0);\n\n  const [newBrandTagDialogOpen, setNewBrandTagDialogOpen] = React.useState(false);\n  const [openDeleteModal, setOpenDeleteModal] = React.useState(false);\n  const [brandTagToDelete, setBrandTagToDelete] = React.useState(null);\n\n  const [deleteAllDialogOpen, setDeleteAllDialogOpen] = React.useState(false);\n\n  const paginatedSelectedOfficeDisplayedBrandTags = selectedOfficeDisplayedBrandTags?.slice(page * CHIPS_PER_PAGE, (page + 1) * CHIPS_PER_PAGE);\n  const paginatedSelectedOfficeDisplayedBrandTagsCount = paginatedSelectedOfficeDisplayedBrandTags?.size;\n\n  React.useEffect(() => {\n    if (paginatedSelectedOfficeDisplayedBrandTagsCount === 0 && page > 0) {\n      setPage(page - 1);\n    }\n  }, [paginatedSelectedOfficeDisplayedBrandTagsCount, page]);\n\n  React.useEffect(() => {\n    setSelectedOfficeDisplayedBrandTags(handleFilterBrandTags(searchTerm));\n  }, [selectedOfficebrandTags]);\n\n  const handleDelete = (applyToFirm?: boolean) => {\n    const contentKeyToDelete = `${brandTagToDelete.getIn(['manufacturer', 'id']) || 0}-${brandTagToDelete.getIn(['category', 'id']) || 0}`;\n\n    // add brandTagIds to delete for current office\n    let idsToDelete = List<number>([brandTagToDelete.get('brandRepId')]);\n\n    // add brandTagIds to delete for other offices\n    let officeIds = List<number>([]);\n    if (applyToFirm) {\n      firmBrandTagsKeyed.forEach((officeBrandTagsKeyed, officeId) => {\n        officeIds = officeIds.push(Number(officeId));\n        if (officeId !== String(selectedOfficeId)) {\n          const brandTag = officeBrandTagsKeyed.get(contentKeyToDelete);\n          if (brandTag) {\n            idsToDelete = idsToDelete.push(brandTag.get('brandRepId'));\n          }\n        }\n      });\n\n      dispatch(new DeleteBrandTagsByIdAction({\n        brandRepIds: idsToDelete,\n        onSuccess: () => {\n          dispatch(new GetFirmBrandTagsAction({ officeIds: officeIds.toJS() }));\n        }\n      }));\n      setOpenDeleteModal(false);\n    } else {\n      dispatch(new DeleteBrandTagsByIdAction({\n        brandRepIds: idsToDelete,\n        onSuccess: () => {\n          dispatch(new GetOfficeBrandTagsAction({ officeId: selectedOfficeId }));\n        }\n      }));\n      setOpenDeleteModal(false);\n    }\n  };\n\n  const handleFilterBrandTags = (_searchTerm: string) => {\n    if (_searchTerm?.trim()) {\n      return selectedOfficebrandTags.reduce((acc, brandTag) => {\n        const manufacturerName = brandTag.getIn(['manufacturer', 'name']) || null;\n        const divisionName = brandTag.getIn(['category', 'divisionNumber']) || null;\n        const categoryName = brandTag.getIn(['category', 'name']) || null;\n        if (manufacturerName?.toLowerCase().includes(_searchTerm.toLowerCase()) || divisionName?.toLowerCase().includes(_searchTerm.toLowerCase()) || categoryName?.toLowerCase().includes(_searchTerm.toLowerCase())) {\n          return acc.push(brandTag);\n        } else {\n          return acc;\n        }\n      }, List());\n    } else {\n      return selectedOfficebrandTags;\n    }\n  };\n\n  const handleChangeSearchTerm = (e: React.ChangeEvent<{ value: unknown }>) => {\n    const newSearchTerm = e.target.value as string;\n    setSearchTerm(newSearchTerm);\n    setPage(0);\n    setSelectedOfficeDisplayedBrandTags(handleFilterBrandTags(newSearchTerm));\n  };\n\n  const handleChangePage = (event: unknown, newPage: number) => {\n    setPage(newPage);\n  };\n\n  const NoAttachmentsFound = (): JSX.Element => (\n    <EmptyWidgetContent\n      SvgElement={\n        <AtsSvgEmptyAttachment\n          color={theme.palette.secondary[300]}\n          shadowColor={theme.palette.secondary.main}\n          width='125'\n          height='125'\n          style={{marginTop: theme.spacing(3), marginLeft: theme.spacing(3)}}\n        />\n      }\n    >\n      <Typography variant='h6'>{'We found 0 brand tags...'}</Typography>\n    </EmptyWidgetContent>\n  );\n\n  return (\n    <Grid container={true}>\n      <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n        <Typography color='textPrimary' style={{ fontSize: '1em' }}>\n          {'Brand Tags'}\n        </Typography>\n        <Grid container={true} wrap='nowrap' justify='flex-end' style={{ width: 200 }}>\n          {\n            selectedOfficebrandTags?.size > 0 && (\n              <Button\n                color='primary'\n                onClick={() => setDeleteAllDialogOpen(true)}\n              >\n                {'DELETE ALL'}\n              </Button>\n            )\n          }\n          <Button\n            color='primary'\n            onClick={() => setNewBrandTagDialogOpen(true)}\n          >\n            {'ADD NEW'}\n          </Button>\n        </Grid>\n      </Grid>\n\n      <Grid container={true} justify='flex-end' wrap='nowrap'>\n        <Input\n          placeholder='Search by Manufacturer'\n          value={searchTerm}\n          onChange={handleChangeSearchTerm}\n          disabled={!selectedOfficebrandTags}\n          endAdornment={\n            <InputAdornment position='end'>\n              <Search fontSize='small' style={{ color: 'grey' }} />\n            </InputAdornment>\n          }\n          classes={{\n            input: classes.input,\n          }}\n        />\n      </Grid>\n\n      {\n        isGettingFirmBrandTags\n          ? <div style={{ height: 'auto', width: '100%' }}>\n              <NotFound\n                svgIcon={<LoadingImage />}\n                firstRow={<LinearProgress color='secondary'/>}\n                secondRow={<Typography variant='h4'>{'Loading...'}</Typography>}\n                paperContainer={false}\n              />\n            </div>\n            : paginatedSelectedOfficeDisplayedBrandTagsCount\n              ? <div>\n                  <div className={classes.chipsContainer}>\n                    {\n                      paginatedSelectedOfficeDisplayedBrandTags?.map((brandTag, index) => {\n                        const brand = brandTag.getIn(['manufacturer', 'name']);\n                        const cat = brandTag.getIn(['category', 'name']);\n                        const label = brand && !cat\n                          ? brand\n                          : `${brand || '{ }'} - ${cat || '{ }'}`;\n                        return (\n                          <Chip\n                            key={index}\n                            className={classes.chip}\n                            label={label}\n                            onDelete={() => {\n                              setBrandTagToDelete(brandTag);\n                              setOpenDeleteModal(true);\n                            }}\n                          />\n                        );\n                      })\n                    }\n                  </div>\n                  <TablePagination\n                    component='div'\n                    count={selectedOfficeDisplayedBrandTags?.size}\n                    onChangePage={handleChangePage}\n                    page={page}\n                    rowsPerPage={CHIPS_PER_PAGE}\n                    rowsPerPageOptions={[]}\n                    ActionsComponent={TablePaginationActions}\n                    className={classes.pagination}\n                    classes={{\n                      toolbar: classes.toolbar,\n                      spacer: classes.spacer\n                    }}\n                  />\n                </div>\n              : <NoAttachmentsFound />\n      }\n\n      <DeleteDialog\n        open={openDeleteModal}\n        isHeadOffice={isHeadOffice}\n        onClose={() => setOpenDeleteModal(false)}\n        handleDelete={handleDelete}\n      />\n\n      <AddBrandTagDialog\n        open={newBrandTagDialogOpen}\n        selectedOfficeId={selectedOfficeId}\n        isHeadOffice={isHeadOffice}\n        onClose={() => setNewBrandTagDialogOpen(false)}\n      />\n\n      <DeleteAllDialog\n        open={deleteAllDialogOpen}\n        selectedOfficeId={selectedOfficeId}\n        firmId={firmId}\n        isHeadOffice={isHeadOffice}\n        onClose={() => setDeleteAllDialogOpen(false)}\n      />\n    </Grid>\n  );\n};\n\nexport default withStyles(styles)(BrandTags);","function downloadBlob(content, filename, contentType) {\n    // Create a blob\n    const blob = new Blob([content], { type: contentType });\n    const url = URL.createObjectURL(blob);\n\n    // Create a link to download it\n    const pom = document.createElement('a');\n    pom.href = url;\n    pom.setAttribute('download', filename);\n    pom.click();\n    pom.remove();\n}\n\nexport default downloadBlob;","import { CircularProgress, Typography, Box, makeStyles } from '@material-ui/core';\nimport React from 'react';\nimport _ from 'lodash';\n\ninterface ILoadingComponentProps {\n  onFinish: () => void;\n  showPercentage?: boolean;\n  progress?: number;\n  label?: string | string[];\n  onFinishDelay?: number;\n  color?: 'primary' | 'secondary' | 'inherit';\n}\n\nconst useStyles = makeStyles((theme) => ({\n  progress: {\n    width: '80%',\n    margin: '0 auto'\n  },\n}));\n\nconst CircularProgressWithLabels: React.FC<ILoadingComponentProps> = ({\n  onFinish,\n  onFinishDelay = 800,\n  showPercentage = true,\n  progress = 0,\n  label = '',\n  color = 'secondary'\n}) => {\n\n  const classes = useStyles();\n\n  const getProgressLabel = () => {\n    if (_.isArray(label)) {\n      return label[progress];\n    }\n    return label;\n  };\n\n  return (\n    <Box\n      position='relative'\n      display='inline-flex'\n      flexDirection='column'\n    >\n      <CircularProgress className={classes.progress} color={color} variant='static' size={200} value={progress} onTransitionEnd={(e) => {\n        if (progress >= 100) {\n          setTimeout(() => {\n            onFinish();\n          }, onFinishDelay);\n        }\n      }} />\n      {\n        showPercentage && (\n          <Box\n            top={0}\n            left={0}\n            bottom={0}\n            right={0}\n            position='absolute'\n            display='flex'\n            alignItems='center'\n            justifyContent='center'\n          >\n            <Typography variant='h3'>{`${progress}%`}</Typography>\n          </Box>\n        )\n      }\n      {\n        label && (\n          <Box\n            top={250}\n            left={0}\n            bottom={0}\n            right={0}\n            position='absolute'\n            display='flex'\n            alignItems='center'\n            justifyContent='center'\n          >\n            <Typography variant='h5' align='center'>{getProgressLabel()}</Typography>\n          </Box>\n        )\n      }\n    </Box>\n  );\n};\n\nexport default React.memo(CircularProgressWithLabels);","import { CircularProgress, Typography, Box, makeStyles, Grid, InputAdornment, IconButton, TextField } from '@material-ui/core';\nimport React from 'react';\nimport _ from 'lodash';\nimport { Field, reduxForm, getFormNames, getFormValues } from 'redux-form/immutable';\nimport { BaseFieldProps, change } from 'redux-form';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../FieldDropzone';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IMap } from 'ats-utils/src';\nimport { MAX_FILE_SIZE } from '../../../constants';\nimport i18next from 'i18next';\n\nexport const ACCEPTED_FILE_TYPES = [\n  'text/csv',\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n];\n\nexport const uploadFileValidation = (value) => {\n  const size = value && value[0] && value[0]['size'] || false;\n  const type = value && value[0] && value[0]['type'] || false;\n\n  const validateSize = size > MAX_FILE_SIZE && `${i18next.t('translations:teamManagementUserDrawer.sizeLimitError')} ${MAX_FILE_SIZE / (1024 * 1024)}MiB`;\n  const validateFileType = !ACCEPTED_FILE_TYPES.includes(type) && type && i18next.t('translations:teamManagementUserDrawer.fileTypeError');\n\n  const message = [validateSize, validateFileType].filter((x) => x).join(' & ');\n  return message || undefined;\n};\n\ninterface IDragAndDropWithLabelsProps {\n  formName: string;\n  labelTextArea?: JSX.Element | string;\n  onClearFile?: () => void;\n}\n\nconst useStyles = makeStyles((theme) => ({\n\n}));\n\nconst DragAndDropWithLabels: React.FC<IDragAndDropWithLabelsProps> = ({\n  formName,\n  labelTextArea = ''\n}) => {\n\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const formValues = useSelector(getFormValues(formName)) as IMap<FormData>;\n  const file = formValues?.get('file')?.[0];\n\n  const onClearFile = () => {\n    dispatch(change(formName, 'file', null));\n  };\n\n  return (\n    <Box\n      position='relative'\n      display='inline-flex'\n      flexDirection='column'\n    >\n      <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n        component={FieldDropzone}\n        name='file'\n        validate={uploadFileValidation}\n        props={{\n          dropzoneRootProps: {\n            style: { width: '600px', height: '200px' }\n          }\n        }}\n      />\n\n      {\n        file &&\n        <Grid item={true}>\n          <Grid container={true} justify='center'>\n            <TextField\n              style={{ width: '600px' }}\n              disabled={true}\n              value={file?.name}\n              InputProps={{\n                startAdornment: file && <InputAdornment position='start'>\n                  <DescriptionIcon />\n                </InputAdornment>,\n                endAdornment: <InputAdornment position='end'>\n                  <IconButton onClick={onClearFile}><ClearIcon /></IconButton>\n                </InputAdornment>,\n              }}\n            />\n          </Grid>\n        </Grid>\n      }\n\n      {\n        labelTextArea && (\n          <Box paddingTop={2}>\n            {labelTextArea}\n          </Box>\n        )\n      }\n    </Box>\n  );\n};\n\nexport default DragAndDropWithLabels;","import {\n  Button,\n  Typography,\n  Box,\n  TableHead,\n  Table,\n  TableBody,\n  TableCell,\n  TableRow\n} from '@material-ui/core';\nimport React from 'react';\nimport _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport {\n  makeStyles\n} from '@material-ui/core/styles';\nimport {\n  ErrorOutline as ErrorOutlineIcon,\n  CheckCircle as CheckCircleIcon,\n  Error as ErrorIcon,\n  CheckCircleOutline as CheckCircleOutlineIcon\n} from '@material-ui/icons';\n\nconst useStyles = makeStyles((theme) => ({\n  tickBigIconStyles: {\n    fontSize: '180px',\n    marginBottom: theme.spacing()\n  },\n  errorBigIconStyles: {\n    fontSize: '180px',\n    marginBottom: theme.spacing()\n  },\n  errorSmallIconStyles: {\n    marginRight: theme.spacing(2),\n  },\n  tickIconStyles: {\n    marginRight: theme.spacing(2),\n    color: 'green'\n  },\n  button: {\n    width: '280px',\n    margin: theme.spacing(4)\n  },\n  errorMessage: {\n    marginBottom: theme.spacing(4)\n  },\n  table: {\n    width: '880px',\n    overflowY: 'auto',\n    overflowX: 'auto',\n    marginBottom: '36px',\n    maxHeight: '320px'\n  }\n}));\n\ninterface ISummaryProps {\n  details?: any;\n  iconColor?: string;\n  onReUploadClick?: () => void;\n}\n\nconst Summary: React.FC<ISummaryProps> = (props) => {\n\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const { onReUploadClick, details } = props;\n  const type = details?.get('type');\n\n  const unvalidCount = details?.get('errors') || details?.get('invalid');\n  const vaildCount = details?.get('total') - unvalidCount;\n\n  const handleOnExportDetails = () => {\n    if (details?.get('details')) {\n      const text = details.get('details').map(detail => `Row ${detail.get('row')}: ${detail.get('message').join(', ')}`).join('\\n');\n      exportFile(text);\n    }\n  };\n\n  return (\n    <Box display='flex' flexDirection='column' alignItems='center' justifyContent='center' height='100%'>\n      {\n        type === 'success' ?\n          <CheckCircleOutlineIcon className={classes.tickBigIconStyles} htmlColor='#4DAE66' />\n          :\n          <ErrorOutlineIcon className={classes.errorBigIconStyles} color='primary' />\n      }\n      {\n        type !== 'success' ? <Typography className={classes.errorMessage} variant='h6'>{t('bulkUploadUsers.errorsMessage')}</Typography>\n          :\n          <Typography className={classes.errorMessage} variant='h6'>{t('bulkUploadUsers.completeMessage')}</Typography>\n      }\n      {\n        unvalidCount > 0 ?\n          <Box maxWidth='880px'>\n            <Box\n              display='flex'\n              alignItems='center'\n              marginBottom='12px'>\n              <CheckCircleIcon className={classes.tickIconStyles} fontSize='large' />\n              <Typography variant='h6'>{t('bulkUploadUsers.totalValidEntriesDescription', { valid: vaildCount, total: details?.get('total') })}</Typography>\n            </Box>\n\n            <Box\n              display='flex'\n              alignItems='center'\n              marginBottom='36px'\n            >\n              <ErrorIcon className={classes.errorSmallIconStyles} color='primary' fontSize='large' />\n              <Box\n                width='100%'\n                display='flex'\n                alignItems='center'\n                justifyContent='space-between'\n              >\n                <Typography variant='h6'>{t('bulkUploadUsers.invalidEntriesDescription', { count: unvalidCount })}</Typography>\n                <Button disabled={!details?.get('details')} onClick={handleOnExportDetails} color='primary'>{t('bulkUploadUsers.exportDetails')}</Button>\n              </Box>\n            </Box>\n\n            <Box\n              display='flex'\n              flexDirection='column'\n              marginBottom='36px'\n              marginLeft='52px'\n              maxHeight='200px'\n              overflow='auto'\n            >\n              {\n                details?.get('details').map((data, i) =>\n                  <Typography key={i} variant='h6'>{t('bulkUploadUsers.row', { row: data?.get('row') })}\n                    &nbsp;\n                    <Typography variant='inherit'>{data.get('message').join(', ')}</Typography>\n                  </Typography>\n                )\n              }\n            </Box>\n            <Typography variant='h6' style={{ marginLeft: '52px', marginTop: '32px' }}>{t('bulkUploadUsers.reuploadMessage')}</Typography>\n          </Box>\n          :\n          <Box className={classes.table}>\n            <Table>\n              <TableHead>\n                <TableCell>{t('bulkUploadUsers.field_firstName')}</TableCell>\n                <TableCell>{t('bulkUploadUsers.field_lastName')}</TableCell>\n                <TableCell>{t('bulkUploadUsers.field_email')}</TableCell>\n              </TableHead>\n\n              <TableBody>\n                {details?.get('details').map((data, i) => (\n                  <TableRow key={i}>\n                    <TableCell>{data.get('firstName')}</TableCell>\n                    <TableCell>{data.get('lastName')}</TableCell>\n                    <TableCell>{data.get('email')}</TableCell>\n                  </TableRow>\n                ))}\n              </TableBody>\n            </Table>\n          </Box>\n      }\n\n      {\n        type === 'success' ?\n          <Button className={classes.button} color='primary' variant='contained' onClick={onReUploadClick}>\n            {t('bulkUploadUsers.uploadAnotherFile')}\n          </Button>\n          :\n          <Button className={classes.button} color='primary' variant='contained' onClick={onReUploadClick}>\n            {t('bulkUploadUsers.reupload')}\n          </Button>\n      }\n\n\n    </Box>\n\n  );\n};\n\nexport default React.memo(Summary);\n\nfunction exportFile(text: string) {\n  const element = document.createElement('a');\n  const file = new Blob([text], { type: 'text/plain' });\n  element.href = URL.createObjectURL(file);\n  element.download = 'error_details.txt';\n  document.body.appendChild(element); // Required for this to work in FireFox\n  element.click();\n}","import * as React from 'react';\nimport { Grid, Typography, makeStyles, Paper } from '@material-ui/core';\nimport CircularProgressWithLabels from '../../components/BulkImportExport/CircularProgressWithLabels';\nimport { makeSelectUploadUsersProgress } from '../../modules/AccountModule/selectors';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport DragAndDropWithLabels from '../../components/BulkImportExport/DragAndDropWithLabels';\nimport Summary from '../../components/BulkImportExport/Summary';\nimport { BULK_IMPORT_USERS_FORM } from '../../pages/UserUploadPage/Component';\n\ninterface IUserUploadStepperViewProps {\n  step: number;\n  onFinishLoading?: () => void;\n  onReUploadClick?: () => void;\n}\n\ntype UserUploadStepperViewProps = IUserUploadStepperViewProps;\n\nconst useStyles = makeStyles((theme) => ({\n  container: {\n    height: '95%',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    overflow: 'auto',\n  },\n  listItem: {\n    'li::marker': { content: '•', fontSize: '10pt' }\n  }\n}));\n\nconst getLoadingText = (status, t) => {\n  switch (status) {\n    case 'start': return t('bulkUploadUsers.uploading');\n    case 'scanning':\n    case 'uploaded': return t('bulkUploadUsers.scanning');\n    case 'processing': return t('bulkUploadUsers.processing');\n    case 'complete':\n    case 'failed': return t('bulkUploadUsers.complete');\n    default: return '';\n  }\n};\n\nconst UserUploadStepperView: React.FC<UserUploadStepperViewProps> = ({\n  step,\n  onFinishLoading,\n  onReUploadClick\n}): JSX.Element => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  const uploadProgress = useSelector(makeSelectUploadUsersProgress());\n  const percentage = uploadProgress.get('percentage');\n  const status = uploadProgress.get('status');\n  const details = uploadProgress.get('details');\n\n  const renderStatusContent = () => {\n    switch (status) {\n      case 'pending':\n        return <DragAndDropWithLabels\n          formName={BULK_IMPORT_USERS_FORM}\n          labelTextArea={\n            <>\n              <Typography>{t('bulkUploadUsers.fieldNote')}</Typography>\n              <Grid container={true}>\n                <Grid item={true} xs={6} container={true} direction='column'>\n                  <ul>\n                    <li><Typography>{t('bulkUploadUsers.field_firstName')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_lastName')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_email')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_role')}</Typography></li>\n                  </ul>\n                </Grid>\n\n                <Grid item={true} xs={6} container={true} direction='column'>\n                  <ul>\n                    <li><Typography>{t('bulkUploadUsers.field_sendForgotPassword')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_registrationOrigin')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_firmId')}</Typography></li>\n                    <li><Typography>{t('bulkUploadUsers.field_officeId')}</Typography></li>\n                  </ul>\n                </Grid>\n\n              </Grid>\n            </>\n          } />;\n      case 'start':\n      case 'scanning':\n      case 'uploaded':\n      case 'processing':\n      case 'complete':\n      case 'failed': return <CircularProgressWithLabels progress={percentage} label={getLoadingText(status, t)} onFinish={onFinishLoading} />;\n      default: return;\n    }\n  };\n\n  const renderStepContent = () => {\n    switch (step) {\n      case 0:\n        return renderStatusContent();\n      case 1:\n        return <Summary details={details} onReUploadClick={onReUploadClick}/>;\n      default:\n        return;\n    }\n  };\n\n  return (\n    <Paper className={classes.container} elevation={1}>\n      {renderStepContent()}\n    </Paper>\n  );\n};\n\nexport default UserUploadStepperView;","import { Button, Menu, MenuItem, Step, StepLabel, Stepper, Typography, makeStyles } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport React, { useState } from 'react';\nimport { compose } from 'redux';\nimport ToolBar from '../../components/ToolBar';\nimport { InfoRounded } from '@material-ui/icons';\nimport {  useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { push } from 'connected-react-router';\nimport { BULK_UPLOAD_USERS_TEMPLATE_CSV_FILE_ID, BULK_UPLOAD_USERS_TEMPLATE_XLSX_FILE_ID, USER_LIST_PATH } from '../../constants';\nimport UserUploadStepperView from '../../containers/UserUploadStepperView';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { reduxForm, getFormValues } from 'redux-form/immutable';\nimport { makeSelectUploadUsersProgress } from '../../modules/AccountModule/selectors';\nimport useFileSrc from '../../utils/useFileSrc';\nimport { BulkUploadUsers, SetUploadUsersProgress } from '../../modules/AccountModule/actions';\nimport { change } from 'redux-form';\nimport { ACCEPTED_FILE_TYPES } from '../../components/BulkImportExport/DragAndDropWithLabels';\n\nexport const BULK_IMPORT_USERS_FORM = 'BulkImportUsersForm';\nconst uploadSteps = ['Upload', 'Summary'];\n\nconst useStyles = makeStyles((theme) => ({\n  stepContainer: {\n    width: '500px',\n    height: '36px',\n    background: theme.palette.grey[100],\n    padding: 0,\n  },\n  step1Container: {\n    paddingLeft: 0\n  },\n  ul: {\n    margin: 0,\n    marginLeft: 10,\n    paddingLeft: 'inherit',\n  },\n  stepPageContainer: {\n    padding: theme.spacing(1, 3),\n    height: '100%',\n    background: theme.palette.grey[100],\n  },\n  toolBarButton: {\n    marginLeft: 10,\n    width: '134px'\n  },\n  infoContainer: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 10\n  }\n}));\n\nconst UserUploadPage: React.FC = () => {\n\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n\n  const [activeStep, setActiveStep] = useState(0);\n  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n\n  const formValues = useSelector(getFormValues(BULK_IMPORT_USERS_FORM)) as IMap<FormData>;\n  const file = formValues?.get('file')?.[0];\n  const template_csv = useFileSrc({ fileId: BULK_UPLOAD_USERS_TEMPLATE_CSV_FILE_ID }).fileSrc;\n  const template_xlsx = useFileSrc({ fileId: BULK_UPLOAD_USERS_TEMPLATE_XLSX_FILE_ID }).fileSrc;\n\n  const uploadProgress = useSelector(makeSelectUploadUsersProgress());\n  const status = uploadProgress.get('status');\n\n  React.useEffect(() => {\n    return () => {\n      dispatch(new SetUploadUsersProgress({ status: 'pending', percentage: 0, details: null }));\n      dispatch(change(BULK_IMPORT_USERS_FORM, 'file', null));\n    };\n  }, []);\n\n  const renderStepInfo = () => {\n    switch (activeStep) {\n      case 0:\n        return status === 'pending' ? <div className={classes.infoContainer}>\n          <Typography>{t('bulkUploadUsers.downloadTemplateNote')}</Typography>\n          <Button onClick={(e) => setAnchorEl(e.currentTarget)} color='primary'>{t('bulkUploadUsers.downloadTemplate')}</Button>\n        </div>\n          :\n          <Typography>{t('bulkUploadUsers.doNotLeave')}</Typography>\n          ;\n      default: return;\n    }\n  };\n\n  const onDownloadTemplate = (type: string) => {\n    switch (type) {\n      case 'csv': return window.location.replace(template_csv);\n      case 'xlsx': return window.location.replace(template_xlsx);\n    }\n  };\n\n  const onFinishLoading = () => {\n    if (status === 'complete' || status === 'failed') {\n      setActiveStep(1);\n    }\n  };\n\n  const onReUploadClick = () => {\n    dispatch(new SetUploadUsersProgress({ status: 'pending', percentage: 0, details: null }));\n    dispatch(change(BULK_IMPORT_USERS_FORM, 'file', null));\n    setActiveStep(0);\n  };\n\n  const backToListPage = () => {\n    dispatch(push(USER_LIST_PATH));\n  };\n\n  const onUploadClick = () => {\n    dispatch(new BulkUploadUsers());\n  };\n\n  return (\n    <>\n      <ToolBar\n        showSearchInput={false}\n        showColumn={false}\n        showFilter={false}\n        showFab={false}\n        leftComponent={\n          <Stepper className={classes.stepContainer} activeStep={activeStep}>\n            {uploadSteps.map((step, i) =>\n              <Step className={activeStep === 0 && classes.step1Container} key={step + i}>\n                <StepLabel style={{ marginLeft: 10 }} StepIconProps={{ style: { fontSize: 36 } }}>{step}</StepLabel>\n              </Step>)}\n          </Stepper>\n        }\n        rightComponent={\n          status === 'pending' && activeStep === 0 ?\n            <>\n              <Button\n                className={classes.toolBarButton}\n                color='primary'\n                variant='contained'\n                onClick={backToListPage}\n              >\n                {t('bulkUploadUsers.cancel')}\n              </Button>\n              <Button\n                className={classes.toolBarButton}\n                color='primary'\n                variant='contained'\n                onClick={onUploadClick}\n                disabled={!Boolean(file) || !ACCEPTED_FILE_TYPES.includes(file.type)}>\n                {t('bulkUploadUsers.upload')}\n              </Button>\n            </>\n            :\n            status === 'complete' && activeStep === 1 ?\n              <Button\n                className={classes.toolBarButton}\n                color='primary'\n                variant='contained'\n                onClick={backToListPage}>\n                {t('bulkUploadUsers.complete')}\n              </Button>\n              :\n              null\n        }\n        handleSubmit={null} />\n\n      <div className={classes.stepPageContainer}>\n        {renderStepInfo()}\n        <UserUploadStepperView step={activeStep} onFinishLoading={onFinishLoading} onReUploadClick={onReUploadClick} />\n      </div>\n\n      <Menu\n        anchorEl={anchorEl}\n        getContentAnchorEl={null}\n        anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n        transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n        open={Boolean(anchorEl)}\n        onClose={() => setAnchorEl(null)}\n      >\n        <MenuItem onClick={() => onDownloadTemplate('csv')}>{t('bulkUploadUsers.downloadCSV')}</MenuItem>\n        <MenuItem onClick={() => onDownloadTemplate('xlsx')}>{t('bulkUploadUsers.downloadXLSX')}</MenuItem>\n      </Menu>\n    </>\n  );\n};\nexport default compose(\n  withReduxFormValidationTranslation({ formName: BULK_IMPORT_USERS_FORM }),\n  reduxForm({\n    form: BULK_IMPORT_USERS_FORM,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n    initialValues: {\n      file: null,\n      conflicts: null\n    }\n  }),\n)(UserUploadPage);\n\n// export default UserUploadPage;","import {\n  call,\n  takeLatest,\n  takeEvery,\n  put,\n  select, takeLeading, all,\n} from 'redux-saga/effects';\n\n// import {\n//   atsRequire,\n//   getAtsApiState,\n// } from '../AtsModule/saga';\n\nimport {\n  AccountActionTypes,\n  GetContactsAction,\n  GetContactsByIdAction,\n  DeleteContactsByIdAction,\n  AddContactAction,\n  GetContactsSucceededAction,\n  EditContactAction,\n  GetLogInAsUsersAction,\n  GetLogInAsUsersSucceededAction,\n  GetCollaboratorsAction,\n  AddCollaboratorAction,\n  // GetCollaboratorsSucceededAction,\n  GetFirmCollaboratorsSucceededAction,\n  GetNonFirmCollaboratorsSucceededAction,\n  GetPartnershipsAction,\n  GetPartnershipsSucceededAction,\n  SetPartnershipsAction,\n  SetPartnershipsSucceededAction,\n  GetOfficeByIdAction,\n  GetOfficeByIdSucceededAction,\n  GetOpportunityGroupsAction,\n  GetOpportunityGroupsActionSucceeded,\n  SetLogInAsUsersIsSearchingAction,\n  SearchUsersAction,\n  SearchUsersFinishedAction,\n  GetUserByIdAction,\n  GetUserByIdSucceededAction,\n  GetUserFirmAction,\n  GetFirmByIdSucceededAction,\n  GetCollaboratorsOfficeAction,\n  GetCollaboratorsOfficeSucceededAction,\n  GetOfficesAction,\n  GetOfficesSucceededAction,\n  EditPreferencesAction,\n  GetPreferencesAction,\n  GetPreferencesSucceededAction,\n  SetPreferencesAction,\n  GetFirmsAction,\n  GetFirmsSucceededAction,\n  GetOfficesByFirmIdAction,\n  GetQuoteOfficesByFirmAction,\n  GetOfficesByFirmIdSucceededAction,\n  SearchUsersByOfficeIdAction,\n  SearchUsersByUserIdAction,\n  SearchUsersbyUserIdFinishedAction,\n  SearchUsersQuickAction,\n  GetUsersSucceededAction,\n  SearchUsersByOfficeIdFinishedAction,\n  UpdateOfficeByIdAction,\n  CreateOfficeAction,\n  CreateUserAction,\n  UpdateUserByIdAction,\n  GetCategoriesAction,\n  GetCategoriesSucceededAction,\n  GetManufacturersAction,\n  GetManufacturersSucceededAction,\n  GetUserByIdMultiSucceededAction,\n  GetDiscountsForCustomerId,\n  GetDiscountsForCustomerIdSucceeded,\n  GetOpportunityStatusesPreferencesAction,\n  ResetPreferenceAction,\n  ResetPreferenceSucceededAction,\n  GetDiscountsForOfficeId,\n  GetDiscountsForOfficeIdSucceeded,\n  DeleteContactsByIdSucceededAction,\n  DeleteOfficeByIdAction,\n  DeleteOfficeByIdSucceededAction,\n  DeleteUserByIdAction,\n  DeleteUserByIdSucceededAction,\n  GetOpportunityLabelsAction,\n  GetOpportunityStatusesAction,\n  GetOpportunityLabelsSucceededAction,\n  GetOpportunityStatusesSucceededAction,\n  GetVisibilityListAction,\n  SearchContactsAction,\n  SearchContactsSucceededAction,\n  SearchContactsFindIndexAction,\n  SetContactsLoadingAction,\n  DeleteContactAndSearchContactsAction,\n  GetUsersListAction,\n  SearchContactsFindIndexSucceededAction,\n  SearchUsersQuickByOfficeIdAction,\n  AddCustomerDiscountAction,\n  EditCustomerDiscountAction,\n  DeleteCustomerDiscountAction,\n  GetNoteCreatorsAction,\n  GetNoteCreatorsSucceededAction,\n  GetVisibilityListSucceededAction,\n  SetPasswordSuccessAction,\n  SetPasswordFailAction,\n  SetPasswordAction,\n  VerifyPasswordAction,\n  UpdateUserByIdSucceededAction,\n  UpdateUserByIdFailedAction,\n  GetRTypeRegionsAction,\n  GetRTypeRegionsSucceededAction,\n  SearchContactsBySearchTermAction,\n  SearchContactsBySearchTermSucceededAction,\n  CreateFilterAction,\n  GetFiltersByType,\n  GetFiltersByTypeSucceededAction,\n  DeleteFilterByIdAction,\n  DeleteFilterByIdSucceededAction,\n  CreateFilterSucceededAction,\n  UpdateFilterByIdAction,\n  UpdateFilterByIdSucceededAction,\n  TrackFormSubmitFailedAction,\n  TrackFormSubmitSucceededAction,\n  GetBrandRepCategoriesAction,\n  SearchManufacturer,\n  SearchDivisionsSuccessAction,\n  SearchProductCategoriesSuccessAction,\n  SearchManufacturersSuccessAction,\n  GetUserPreferenceOverTakeOffSuccess,\n  UpdateUserPreferenceAction,\n  UpdateUserPreferenceActionSuccess,\n  SaveFavouriteCategoryAction,\n  DeleteFavouriteCategoryAction,\n  UpdateFirmByIdAction,\n  PatchUpdateFirmByIdAction,\n  PatchUpdateFirmByIdSucceededAction,\n  SetUpdateFirmByIdLoadingAction,\n  SearchQuoteUsersAction,\n  GetQuoteOfficesByFirmSucceededAction,\n  GetBrandRepAction,\n  GetBrandRepSucceededAction,\n  GetBrandRepFailedAction,\n  GetManufacturerRankingsSucceededAction,\n  GetManufacturerPreferenceSucceededAction,\n  GetManufacturerPreferenceFailedAction,\n  CreateManufacturerPreferenceSucceededAction,\n  CreateManufacturerPreferenceFailedAction,\n  UpdateManufacturerPreferenceAction,\n  UpdateManufacturerPreferenceSucceededAction,\n  CreateManufacturerPreferenceAction,\n  DeleteManufacturerPreferenceAction,\n  DeleteManufacturerPreferenceSucceededAction,\n  DeleteManufacturerPreferenceFailedAction,\n  UpdateManufacturerPreferenceFailedAction,\n  CreateManufacturerRankingAction,\n  CreateManufacturerRankingSucceededAction,\n  UpdateManufacturerRankingAction,\n  GetManufacturerRankingsAction,\n  DeleteManufacturerRankingAction,\n  DeleteManufacturerRankingSucceededAction,\n  DeleteManufacturerRankingFailedAction,\n  GetSearchMode,\n  SetSearchMode,\n  GetSearchModeSucceed,\n  GetAttachmentFolderTemplatesAction,\n  GetAttachmentFolderTemplatesSucceededAction,\n  GetAttachmentFolderTemplateWithFoldersAction,\n  GetAttachmentFolderTemplateWithFoldersSucceededAction,\n  CreateTemplateFolderAction,\n  CreateAttachmentFolderTemplateAction,\n  SetSelectedAttachmentFolderTemplateIdAction,\n  UpdateAttachmentFolderTemplateAction,\n  SetIsSearchingFolderTemplatesAction,\n  DeleteTemplateFolderAction,\n  UpdateTemplateFolderAction,\n  SetUserDefaultAttachmentFolderTemplateAction,\n  SetFirmDefaultAttachmentFolderTemplateAction,\n  GetDefaultAttachmentFolderTemplateAction,\n  GetDefaultAttachmentFolderTemplateSucceededAction,\n  SearchAllUsersAction,\n  SetIsSearchingAllUsersAction,\n  SearchingAllUsersSucceededAction,\n  DeleteUserByIdAndSearchAllUsersAction,\n  MoveUserByIdAction,\n  SetIsSearchingAllFirmsAction,\n  SearchingAllFirmsSucceededAction,\n  SearchAllFirmsAction,\n  IsFetchingFirmByIdAction,\n  GetFirmByIdAction,\n  GetUserFirmSucceededAction,\n  CreateFirmAction,\n  GetFirmsForSuperFirmFirmAdminAction,\n  GetFirmsForSuperFirmFirmAdminSucceededAction,\n  GetDefaultCustomEmail,\n  GetDefaultCustomEmailSucceed,\n  GetDefaultCustomEmailFailed,\n  SetDefaultCustomEmail,\n  SetUseDefaultCustomEmail,\n  GetAppsAction,\n  SetIsGettingAppsAction,\n  GetAppsSucceededAction,\n  GetAclRolesSucceededAction,\n  SetIsGettingAclRolesAction,\n  GetAclRolesAction,\n  AddAclRoleAction,\n  SetIsAddingAclRoleAction,\n  DeleteAclRoleAction,\n  SetIsDeletingAclRoleAction,\n  DeleteFirmByIdAction,\n  DeleteFirmByIdThenSearchAllFirmsAction,\n  SearchCategories,\n  GetFirmBrandTagsAction,\n  GetFirmBrandTagsSucceededAction,\n  SetIsGettingFirmBrandTagsAction,\n  GetOfficeBrandTagsAction,\n  GetOfficeBrandTagsSucceededAction,\n  DeleteBrandTagsByIdAction,\n  AddBrandTagsAction,\n  GetMasterFormatRootsAction,\n  GetMasterFormatRootsSucceededAction,\n  ExportUsersAction,\n  BulkUploadUsers,\n  SetUploadUsersProgress,\n  GetAutoTrackingProjectSettingSucceededAction,\n  SetIsGettingAutoTrackingProjectSettingAction,\n  GetAutoTrackingProjectSettingAction,\n  GetCustomerDiscountVisibilitySettingAction,\n  SetIsGettingCustomerDiscountVisibilitySettingAction,\n  GetCustomerDiscountVisibilitySettingSucceededAction,\n  GetQuoteExcelColumnPreferencesAction,\n  SetIsGettingQuoteExcelColumnPreferencesAction,\n  GetQuoteExcelColumnPreferencesSucceededAction,\n  SetIsUpdatingQuoteExcelColumnPreferencesAction,\n  UpdateQuoteExcelColumnPreferencesSucceededAction,\n  UpdateQuoteExcelColumnPreferencesAction,\n  GetVendorQuotationAutoTakeoffSettingAction,\n  SetIsGettingVendorQuotationAutoTakeoffSettingAction,\n  GetVendorQuotationAutoTakeoffSettingSucceededAction,\n  GetVendorQuotationNotificationsSucceededAction,\n  GetVendorQuotationNotificationsAction,\n  SetIsGettingVendorQuotationNotificationsAction,\n  GetVendorQuotationMyLogoAction,\n  GetVendorQuotationMyLogoSucceededAction,\n  SetIsGettingVendorQuotationMyLogoAction,\n  GetVendorQuotationBidEmailAction,\n  GetVendorQuotationBidEmailSucceededAction,\n  SetIsGettingVendorQuotationBidEmailAction,\n  SearchManufacturerDiscountsAction,\n  SetIsSearchingManufacturerDiscountsAction,\n  SearchManufacturerDiscountsSucceededAction,\n  GetDiscountPriorityAction,\n  GetDiscountPrioritySucceededAction,\n  GetQuoteDiscountListAction,\n  GetQuoteDiscountListSucceededAction,\n  GetShopDrawingColorAction,\n  GetShopDrawingColorSucceededAction,\n  PotentiallyFetchManufacturerDiscountsAndPriorityAction,\n  GetDefaultProjectVisibilityAction,\n  GetDefaultProjectVisibilitySucceededAction,\n  SetDefaultProjectVisibilityAction,\n  GetFirmEmailSettingAction,\n  GetFirmEmailSettingSucceededAction,\n  GetLoggedInUserDataAction,\n  GetLoggedInUserDataSucceededAction,\n  GetQuoteAutoSavePreferenceAction,\n  GetQuoteAutoSavePreferenceSucceededAction,\n  UpdateQuoteAutoSavePreferenceAction,\n  UpdateQuoteAutoSavePreferenceSucceededAction,\n} from './actions';\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n  taggedDelay,\n} from '../AtsModule/saga';\nimport {\n  AtsApiCallAction, RefreshTokenAction,\n} from '../AtsModule/actions';\nimport { fromJS, List, Map, OrderedMap, OrderedSet } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport {\n  Contact,\n  User,\n  Collaborator,\n  Identity,\n  Firm,\n  Filter,\n  Office,\n  OpportunityStatusListItem,\n  ProjectPhase,\n  OpportunityLabel,\n  OpportunityStatus,\n  VisibilityListItem,\n  SavedFilter,\n  ListItem,\n  BrandTag,\n  MasterFormatRoot,\n  AclItem,\n} from '../../models';\nimport {\n  makeSelectAmplitudeData,\n  makeSelectIdentityObject,\n  makeSelectUserEmail,\n  makeSelectUserFirmId,\n  makeSelectUserId\n} from '../AtsModule/selectors';\nimport Category from '../../models/Category';\nimport Manufacturer from '../../models/Manufacturer';\nimport Discount from '../../models/Discount';\nimport Preferences, { PreferenceType } from '../../models/Preferences';\nimport { ProjectFailedAction } from '../ProjectModule/actions';\nimport { CustomerDiscount } from '../../components/UserContactDrawerDetailsContactEdit';\nimport { SetOverlayComponentPropsAction, SetSnackbarOpenAction, ToggleOverlayComponentAction } from '../ApplicationModule/actions';\nimport { SNACKBAR_DEFAULT_MESSAGE, SNACKBAR_DEFAULT_SEVERITY } from '../ApplicationModule/reducer';\nimport Region from '../../models/Region';\nimport i18next from 'i18next';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport { ProjectVisibility, DEFAULT_QUOTE_AUTO_SAVE_PREFERENCE, QUOTE_DISCOUNT_LIST_PREFERENCE, QUOTE_DISCOUNT_LIST_USER_TYPE } from './constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { GetProductCategoriesAction } from '../ProductModule/actions';\nimport AttributeTag from '../../models/AttributeTag';\nimport ManufacturerPreference from '../../models/ManufacturerPreference';\nimport ManufacturerRanking from '../../models/ManufacturerRanking';\nimport { push } from 'connected-react-router';\nimport { ADD_ATTACHMENT_FOLDERS_TEMPLATE_PATH, DEFAULT_ATTACHMENT_TEMPLATE_VISIBILITY_LEVEL } from '../../containers/AttachmentFoldersPage';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { brandTagsKeyMapped, sortBrandTagsByManufacturerAndDivision } from '../../pages/FirmDetailPage/OfficesInfo/BrandTags';\nimport { makeSelectDiscountPriority, makeSelectHasAlreadyFetchedManufacturerDiscounts, makeSelectHasFetchedDiscountPriority, makeSelectTeamOrganizationSelectedOfficeId } from './selectors';\nimport { SearchCategoriesAction } from '../PimModule/actions';\nimport atsApi from 'ats-api/src';\nimport downloadBlob from '../../utils/downloadBlob';\nimport { getFormValues } from 'redux-form/immutable';\nimport { BULK_IMPORT_USERS_FORM } from '../../pages/UserUploadPage/Component';\nimport FileServiceFile from '../../models/FileServiceFile';\nimport { pollPrint } from '../PrintModule/saga';\nimport { PollPrintAction } from '../PrintModule/actions';\nimport store from '../../store';\nimport { IExcelColumn } from '../../containers/QuoteExcelColumnPreference/Component';\nimport AccountServiceApi from './AccountServiceApi';\nimport { makeSelectEnv, makeSelectAppId } from '../AtsModule/selectors';\nimport { IQuoteAutoSavePreference, IQuoteDiscountListItem } from './types';\nimport { readUploadResponse } from '../../utils/uploadResponse';\n\nconst defaultContactSearchFilter = (searchTerm: string) => ({\n  'or': [\n    {\n      'email': {\n        'like': searchTerm\n      }\n    },\n    {\n      'firstName': {\n        'like': searchTerm\n      }\n    },\n    {\n      'lastName': {\n        'like': searchTerm\n      }\n    },\n    {\n      'CONCAT(firstName,\\' \\',lastName)': {\n        'like': searchTerm\n      }\n    },\n    {\n      'organization': {\n        'like': searchTerm\n      }\n    },\n    {\n      'internalNo': {\n        'like': searchTerm\n      }\n    },\n    {\n      'billToCustomer': {\n        'like': searchTerm\n      }\n    }\n\n  ]\n});\n\nexport default function* defaultSaga() {\n\n  // yield call(atsRequire, getAtsApiState('init'));\n  // yield call(atsRequire, getAtsApiState('token'));\n  // yield call(atsRequire, getAtsApiState('identity'));\n  yield takeLatest(AccountActionTypes.GET_CONTACTS, getContacts);\n  yield takeLatest(AccountActionTypes.GET_CONTACT_BY_ID, getContactsById);\n  yield takeLatest(AccountActionTypes.DELETE_CONTACT_BY_ID, deleteContactsById);\n  yield takeLatest(AccountActionTypes.DELETE_OFFICE_BY_ID, deleteOfficeById);\n  yield takeLatest(AccountActionTypes.ADD_CONTACT, addContactByUserId);\n  yield takeLatest(AccountActionTypes.EDIT_CONTACT, editContactByUserId);\n  yield takeLatest(AccountActionTypes.GET_LOG_IN_AS_USERS, getLogInAsUsers);\n  yield takeLatest(AccountActionTypes.GET_COLLABORATORS, getCollaborators);\n  yield takeLatest(AccountActionTypes.ADD_COLLABORATOR, addCollaboratorToSpec);\n  yield takeLatest(AccountActionTypes.GET_PARTNERSHIPS, getPartnerships);\n  yield takeLatest(AccountActionTypes.SET_PARTNERSHIPS, setPartnerships);\n  // yield takeLatest(AccountActionTypes.GET_OFFICE_BY_ID, getOfficesByFirmId);\n  yield takeLatest(AccountActionTypes.SEARCH_ALL_FIRMS, searchAllFirms);\n  yield takeLatest(AccountActionTypes.DELETE_FIRM_BY_ID, deleteFirmById);\n  yield takeLatest(AccountActionTypes.DELETE_FIRM_BY_ID_THEN_SEARCH_ALL_FIRMS, deleteFirmByIdThenSearchAllFirms);\n  yield takeLatest(AccountActionTypes.GET_FIRM_BY_ID, getFirmById);\n  yield takeLatest(AccountActionTypes.GET_USER_FIRM, getUserFirm);\n  yield takeLatest(AccountActionTypes.GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN, getFirmsForSuperFirmFirmAdmin);\n  yield takeLatest(AccountActionTypes.SEARCH_ALL_USERS, searchAllUsers);\n  yield takeLatest(AccountActionTypes.SEARCH_USERS, searchUsers);\n  yield takeLatest(AccountActionTypes.SEARCH_USERS_QUICK, searchUsersQuick);\n  yield takeLatest(AccountActionTypes.SEARCH_USERS_QUICK_BY_OFFICE_ID, searchUsersQuickByOfficeId);\n  yield takeEvery(AccountActionTypes.SEARCH_USERS_BY_OFFICE_ID, searchUsersByOfficeId);\n  yield takeEvery(AccountActionTypes.GET_USER_BY_ID, getUserById);\n  yield takeLatest(AccountActionTypes.SEARCH_USERS_BY_USER_ID, searchUsersByUserId);\n  yield takeLatest(AccountActionTypes.GET_NOTE_CREATORS, getNoteCreators);\n  yield takeLatest(AccountActionTypes.GET_COLLABORATORS_OFFICE, getCollaboratorsOffice);\n  yield takeLatest(AccountActionTypes.GET_OFFICES, getOffices);\n  yield takeLatest(AccountActionTypes.GET_OFFICES_BY_FIRM_ID, getOfficesByFirmId);\n  yield takeLatest(AccountActionTypes.GET_QUOTE_OFFICES_BY_FIRM, getQuoteOfficesByFirm);\n  yield takeLatest(AccountActionTypes.GET_FIRMS, getFirms);\n  yield takeEvery(AccountActionTypes.GET_PREFERENCES, getPreferences);\n  yield takeLatest(AccountActionTypes.GET_OPPORTUNITY_STATUSES_PREFERENCES, getOpportunityStatusesPreferences);\n  yield takeLatest(AccountActionTypes.SET_PREFERENCES, setPreferences);\n  yield takeLatest(AccountActionTypes.EDIT_PREFERENCES, editPreferences);\n  yield takeLatest(AccountActionTypes.UPDATE_OFFICE_BY_ID, updateOfficeById);\n  yield takeLatest(AccountActionTypes.CREATE_OFFICE, createOffice);\n  yield takeLatest(AccountActionTypes.UPDATE_USER_BY_ID, updateUserById);\n  yield takeLatest(AccountActionTypes.MOVE_USER_BY_ID, moveUserById);\n  yield takeLatest(AccountActionTypes.CREATE_USER, createUser);\n  yield takeLatest(AccountActionTypes.GET_BRAND_REP_CATEGORIES, getBrandRepCategories);\n  yield takeLatest(AccountActionTypes.GET_CATEGORIES, getCategories);\n  yield takeLatest(AccountActionTypes.GET_MANUFACTURERS, getManufacturers);\n  yield takeLatest(AccountActionTypes.GET_DISCOUNTS_FOR_CUSTOMER_ID, getDiscounts);\n  yield takeLatest(AccountActionTypes.GET_DISCOUNTS_FOR_OFFICE_ID, getOfficeDiscounts);\n  yield takeLatest(AccountActionTypes.ADD_CUSTOMER_DISCOUNT, addCustomerDiscount);\n  yield takeLatest(AccountActionTypes.EDIT_CUSTOMER_DISCOUNT, editCustomerDiscount);\n  yield takeLatest(AccountActionTypes.DELETE_CUSTOMER_DISCOUNT, deleteCustomerDiscount);\n  yield takeLatest(AccountActionTypes.RESET_PREFERENCE, resetPreferenceAction);\n  yield takeLatest(AccountActionTypes.GET_OFFICE_BY_ID, getOfficeById);\n  yield takeLatest(AccountActionTypes.DELETE_USER_BY_ID, deleteUserById);\n  yield takeLatest(AccountActionTypes.DELETE_USER_BY_ID_AND_SEARCH_ALL_USERS, deleteUserByIdAndSearchAllUsers);\n  yield takeLatest(AccountActionTypes.GET_OPPORTUNITY_LABELS, getOpportunityLabels);\n  yield takeLatest(AccountActionTypes.GET_OPPORTUNITY_STATUSES, getOpportunityStatuses);\n  yield takeLatest(AccountActionTypes.SEARCH_CONTACTS, searchContacts);\n  yield takeLatest(AccountActionTypes.SEARCH_CONTACTS_FIND_INDEX, searchContactsFindIndex);\n  yield takeLatest(AccountActionTypes.DELETE_CONTACT_AND_SEARCH_CONTACTS, deleteContactAndSearchContacts);\n  yield takeLatest(AccountActionTypes.GET_USERS_LIST, getUsersList);\n  yield takeLatest(AccountActionTypes.GET_VISIBILITY_LIST, getVisibiltyList);\n  yield takeLatest(AccountActionTypes.VERIFY_PASSWORD, verifyPassword);\n  yield takeLatest(AccountActionTypes.SET_PASSWORD, setPassword);\n  yield takeLatest(AccountActionTypes.GET_R_TYPE_REGIONS, getRTypeRegions);\n  yield takeLatest(AccountActionTypes.SEARCH_CONTACTS_BY_SEARCH_TERM, searchContactsBySearchTerm);\n  yield takeLatest(AccountActionTypes.CREATE_FILTER, createFilter);\n  yield takeEvery(AccountActionTypes.GET_FILTERS_BY_TYPE, getFiltersByType);\n  yield takeLatest(AccountActionTypes.DELETE_FILTER_BY_ID, deleteFilterById);\n  yield takeLatest(AccountActionTypes.UPDATE_FILTER_BY_ID, updateFilterById);\n  yield takeLatest(AccountActionTypes.TRACK_FORM_SUBMIT_FAILED, trackFormSubmitFailed);\n  yield takeLatest(AccountActionTypes.TRACK_FORM_SUBMIT_SUCCEEDED, trackFormSubmitSucceeded);\n  yield takeLatest(AccountActionTypes.SEARCH_DIVISIONS, searchDivisions);\n  yield takeLatest(AccountActionTypes.SEARCH_CATEGORIES, searchCategories);\n  yield takeLatest(AccountActionTypes.SEARCH_MANUFACTURER, searchManufacturers);\n  yield takeLatest(AccountActionTypes.GET_USER_PREFERENCE_OVER_TAKE_OFF, getUserPreferenceOverTakeoff);\n  yield takeLatest(AccountActionTypes.UPDATE_USER_PREFERENCE, updateUserPreference);\n  yield takeLatest(AccountActionTypes.SAVE_FAVOURITE_CATEGORY, saveFavouriteCategory);\n  yield takeLatest(AccountActionTypes.DELETE_FAVOURITE_CATEGORY, deleteFavouriteCategory);\n  yield takeLatest(AccountActionTypes.CREATE_FIRM, createFirm);\n  yield takeLatest(AccountActionTypes.UPDATE_FIRM_BY_ID, updateFirmById);\n  yield takeLatest(AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID, patchUpdateFirmById);\n  yield takeLatest(AccountActionTypes.SEARCH_QUOTE_USERS, searchQuoteUsers);\n  yield takeLatest(AccountActionTypes.GET_BRAND_REP, getBrandRep);\n  yield takeLatest(AccountActionTypes.GET_LOGGED_IN_USER_DATA, getLoggedInUserData);\n  // alternative preferences\n  yield takeLatest(AccountActionTypes.GET_MANUFACTURER_PREFERENCES, getAllManufacturerPreferences);\n  yield takeLatest(AccountActionTypes.CREATE_MANUFACTURER_PREFERENCE, createManufacturerPreference);\n  yield takeLatest(AccountActionTypes.UPDATE_MANUFACTURER_PREFERENCE, updateManufacturerPreference);\n  yield takeLatest(AccountActionTypes.DELETE_MANUFACTURER_PREFERENCE, deleteManufacturerPreference);\n  // rankings\n  yield takeLatest(AccountActionTypes.GET_MANUFACTURER_RANKINGS, getManufacturerRankings);\n  yield takeLatest(AccountActionTypes.CREATE_MANUFACTURER_RANKING, createManufacturerRanking);\n  yield takeLatest(AccountActionTypes.UPDATE_MANUFACTURER_RANKING, updateManufacturerRanking);\n  yield takeLatest(AccountActionTypes.DELETE_MANUFACTURER_RANKING, deleteManufacturerRanking);\n  // search mode\n  yield takeLatest(AccountActionTypes.GET_SEARCH_MODE, getSearchMode);\n  yield takeLatest(AccountActionTypes.SET_SEARCH_MODE, setSearchMode);\n  // attachment folder template\n  yield takeLatest(AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATES, getAttachmentFolderTemplates);\n  yield takeLatest(AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS, getAttachmentFolderTemplateWithFolders);\n  yield takeLatest(AccountActionTypes.CREATE_ATTACHMENT_FOLDER_TEMPLATE, createAttachmentFolderTemplate);\n  yield takeLatest(AccountActionTypes.UPDATE_ATTACHMENT_FOLDER_TEMPLATE, updateAttachmentFolderTemplate);\n  yield takeLatest(AccountActionTypes.CREATE_TEMPLATE_FOLDER, createTemplateFolder);\n  yield takeLatest(AccountActionTypes.UPDATE_TEMPLATE_FOLDER, updateTemplateFolder);\n  yield takeLatest(AccountActionTypes.DELETE_TEMPLATE_FOLDER, deleteTemplateFolder);\n  yield takeLatest(AccountActionTypes.SET_USER_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE, setUserDefaultAttachmentFolderTemplate);\n  yield takeLatest(AccountActionTypes.SET_FIRM_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE, setFirmDefaultAttachmentFolderTemplate);\n  yield takeEvery(AccountActionTypes.GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE, getDefaultAttachmentFolderTemplate);\n  yield takeLatest(AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL, getDefaultCustomEmail);\n  yield takeLatest(AccountActionTypes.SET_DEFAULT_CUSTOM_EMAIL, setDefaultCustomEmail);\n  yield takeLatest(AccountActionTypes.SET_USE_DEFAULT_CUSTOM_EMAIL, setUseDefaultCustomEmail);\n  // acl related\n  yield takeLatest(AccountActionTypes.GET_APPS, getApps);\n  yield takeLatest(AccountActionTypes.GET_ACL_ROLES, getAclRoles);\n  yield takeLatest(AccountActionTypes.ADD_ACL_ROLE, addAclRole);\n  yield takeLatest(AccountActionTypes.DELETE_ACL_ROLE, deleteAclRole);\n  // brand tag related\n  yield takeLatest(AccountActionTypes.GET_FIRM_BRAND_TAGS, getFirmBrandTags);\n  yield takeLatest(AccountActionTypes.GET_OFFICE_BRAND_TAGS, getOfficeBrandTags);\n  yield takeLatest(AccountActionTypes.DELETE_BRAND_TAGS_BY_ID, deleteBrandTagsById);\n  yield takeLatest(AccountActionTypes.ADD_BRAND_TAGS, addBrandTags);\n  yield takeLatest(AccountActionTypes.GET_MASTER_FORMAT_ROOTS, getMasterFormatRoots);\n  yield takeLatest(AccountActionTypes.EXPORT_USERS, exportUsers);\n\n  // bulk upload users\n  yield takeLatest(AccountActionTypes.BULK_UPLOAD_USERS, bulkUploadUsers);\n  // auto track project setting\n  yield takeLatest(AccountActionTypes.GET_AUTO_TRACK_PROJECT_SETTING, getAutoTrackProjectSetting);\n  // customer discount visibility setting\n  yield takeLatest(AccountActionTypes.GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING, getCustomerDiscountVisibilitySetting);\n  // quote excel column preference setting\n  yield takeLatest(AccountActionTypes.GET_QUOTE_EXCEL_COLUMN_PREFERENCES, getQuoteExcelColumnPreference);\n  yield takeLatest(AccountActionTypes.UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES, updateQuoteExcelColumnPreference);\n  yield takeLatest(AccountActionTypes.GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING, getVendorQuotationAutoTakeoffSetting);\n  yield takeLatest(AccountActionTypes.GET_VENDOR_QUOTATION_NOTIFICATIONS, getVendorQuotationNotifications);\n  yield takeLatest(AccountActionTypes.GET_VENDOR_QUOTATION_MY_LOGO, getVendorQuotationMyLogo);\n  yield takeLatest(AccountActionTypes.GET_VENDOR_QUOTATION_BID_EMAIL, getVendorQuotationBidEmail);\n  // discount priority setting\n  yield takeLatest(AccountActionTypes.GET_DISCOUNT_PRIORITY, getDiscountPriority);\n  // default quote charge/discount/tax list setting\n  yield takeLatest(AccountActionTypes.GET_QUOTE_DISCOUNT_LIST, getQuoteDiscountList);\n  // shop drawing color setting\n  yield takeLatest(AccountActionTypes.GET_SHOP_DRAWING_COLOR, getShopDrawingColor);\n  // project visibility setting\n  yield takeLatest(AccountActionTypes.GET_DEFAULT_PROJECT_VISIBILITY, getDefaultProjectVisibility);\n  yield takeLatest(AccountActionTypes.SET_DEFAULT_PROJECT_VISIBILITY, setDefaultProjectVisibility);\n  // manufacturer discounts\n  yield takeLatest(AccountActionTypes.SEARCH_MANUFACTURER_DISCOUNTS, searchManufacturerDiscounts);\n  yield takeLatest(AccountActionTypes.POTENTIALLY_FETCH_MANUFACTURER_DISCOUNTS_AND_PRIORITY, potentiallyFetchManufacturerDiscountsAndPriority);\n  // firm email setting\n  yield takeLatest(AccountActionTypes.GET_FIRM_EMAIL_SETTING, getFirmEmailSetting);\n  // quote auto save preference\n  yield takeLatest(AccountActionTypes.GET_QUOTE_AUTO_SAVE_PREFERENCE, getQuoteAutoSavePreference);\n  yield takeLatest(AccountActionTypes.UPDATE_QUOTE_AUTO_SAVE_PREFERENCE, updateQuoteAutoSavePreference);\n}\n\nfunction* updateQuoteAutoSavePreference(\n  action: UpdateQuoteAutoSavePreferenceAction,\n) {\n  const {\n    quoteAutoSavePreference: newPreference,\n    onSuccess,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      params: {\n        userType: 'user',\n        preference: 'quoteAutosave',\n      },\n      body: newPreference?.toJS()\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const quoteAutoSavePreference: IMap<IQuoteAutoSavePreference> = immuData.getIn(['payload', 'account', 'preference', 'quoteAutosave']);\n    if (quoteAutoSavePreference == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new UpdateQuoteAutoSavePreferenceSucceededAction({ quoteAutoSavePreference }));\n    }\n  } else {\n    console.error('updateQuoteAutoSavePreference error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteAutoSavePreference.updateFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getQuoteAutoSavePreference(\n  action: GetQuoteAutoSavePreferenceAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'quoteAutosave',\n      }\n    }\n  }));\n  const fetched: IMap<IQuoteAutoSavePreference> | null = data\n    ? fromJS(data).getIn(['payload', 'account', 'preference', 'quoteAutosave'])\n    : null;\n\n  if (!data) {\n    console.error('getQuoteAutoSavePreference error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteAutoSavePreference.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  } else if (fetched == null) {\n    console.error('Invalid response', data); // tslint:disable-line\n  }\n\n  yield put(new GetQuoteAutoSavePreferenceSucceededAction({\n    quoteAutoSavePreference: fetched ?? fromJS(DEFAULT_QUOTE_AUTO_SAVE_PREFERENCE),\n  }));\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateQuoteExcelColumnPreference(\n  action: UpdateQuoteExcelColumnPreferencesAction,\n) {\n  const {\n    quoteExcelColumnPreferences,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsUpdatingQuoteExcelColumnPreferencesAction({ isUpdatingQuoteExcelColumnPreferences: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      params: {\n        userType: 'firm',\n        preference: 'quoteExcelDownload',\n      },\n      body: quoteExcelColumnPreferences?.toJS()\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const newQuoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>> = immuData.getIn(['payload', 'account', 'preference', 'quoteExcelDownload']);\n    if (newQuoteExcelColumnPreferences == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new UpdateQuoteExcelColumnPreferencesSucceededAction({ quoteExcelColumnPreferences: newQuoteExcelColumnPreferences }));\n      onSuccess?.();\n    }\n  } else {\n    console.error('updateQuoteExcelColumnPreference error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteExcelColumnPreferenceSettings.updateFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsUpdatingQuoteExcelColumnPreferencesAction({ isUpdatingQuoteExcelColumnPreferences: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getQuoteExcelColumnPreference(\n  action: GetQuoteExcelColumnPreferencesAction,\n) {\n  yield put(new SetIsGettingQuoteExcelColumnPreferencesAction({ isGettingQuoteExcelColumnPreferences: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: 'firm',\n        preference: 'quoteExcelDownload',\n      },\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const quoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>> = immuData.getIn(['payload', 'account', 'preference', 'quoteExcelDownload']);\n    if (quoteExcelColumnPreferences == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetQuoteExcelColumnPreferencesSucceededAction({ quoteExcelColumnPreferences }));\n    }\n  } else {\n    console.error('getQuoteExcelColumnPreference error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteExcelColumnPreferenceSettings.getFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingQuoteExcelColumnPreferencesAction({ isGettingQuoteExcelColumnPreferences: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getCustomerDiscountVisibilitySetting(\n  action: GetCustomerDiscountVisibilitySettingAction,\n) {\n  yield put(new SetIsGettingCustomerDiscountVisibilitySettingAction({ isGettingCustomerVisibilitySetting: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: 'firm',\n        preference: 'applyDiscountsKeepAllBrandsQuoted',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const displayAllBrands: boolean = immuData.getIn(['payload', 'account', 'preference', 'applyDiscountsKeepAllBrandsQuoted']);\n    if (displayAllBrands == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCustomerDiscountVisibilitySettingSucceededAction({ displayAllBrands }));\n    }\n  } else {\n    console.error('getCustomerDiscountVisibilitySetting error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:CustomerDiscountsSetting.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingCustomerDiscountVisibilitySettingAction({ isGettingCustomerVisibilitySetting: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getAutoTrackProjectSetting(\n  action: GetAutoTrackingProjectSettingAction,\n) {\n  yield put(new SetIsGettingAutoTrackingProjectSettingAction({ isGettingAutoTrackProjectSetting: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'autoTrackProjects',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const autoTrackProjects: boolean = immuData.getIn(['payload', 'account', 'preference', 'autoTrackProjects']);\n    if (autoTrackProjects == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAutoTrackingProjectSettingSucceededAction({ autoTrackProjects }));\n    }\n  } else {\n    console.error('getAutoTrackProjectSetting error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:AutoTrackingSetup.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingAutoTrackingProjectSettingAction({ isGettingAutoTrackProjectSetting: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getVendorQuotationAutoTakeoffSetting(\n  action: GetVendorQuotationAutoTakeoffSettingAction,\n) {\n  yield put(new SetIsGettingVendorQuotationAutoTakeoffSettingAction({ isGettingVendorQuotationAutoTakeoffSetting: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'vendorQuotationAutoTakeoff',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const vendorQuotationAutoTakeoff: boolean = immuData.getIn(['payload', 'account', 'preference', 'vendorQuotationAutoTakeoff']);\n    if (vendorQuotationAutoTakeoff == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetVendorQuotationAutoTakeoffSettingSucceededAction({ vendorQuotationAutoTakeoff }));\n    }\n  } else {\n    console.error('getVendorQuotationAutoTakeoffSetting error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:vendorQuotationAutoTakeoff.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingVendorQuotationAutoTakeoffSettingAction({ isGettingVendorQuotationAutoTakeoffSetting: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getVendorQuotationNotifications(\n  action: GetVendorQuotationNotificationsAction,\n) {\n  yield put(new SetIsGettingVendorQuotationNotificationsAction({ isGettingVendorQuotationNotifications: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'vendorQuotationNotifications',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const vendorQuotationNotifications: any = immuData.getIn(['payload', 'account', 'preference', 'vendorQuotationNotifications']);\n    if (vendorQuotationNotifications == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetVendorQuotationNotificationsSucceededAction({ vendorQuotationNotifications }));\n    }\n  } else {\n    console.error('getVendorQuotationNotifications error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:vendorQuotationNotification.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n\n  yield put(new SetIsGettingVendorQuotationNotificationsAction({ isGettingVendorQuotationNotifications: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getVendorQuotationMyLogo(\n  action: GetVendorQuotationMyLogoAction,\n) {\n  yield put(new SetIsGettingVendorQuotationMyLogoAction({ isGettingVendorQuotationMyLogo: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'vendorQuotationMyLogo',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    let vendorQuotationMyLogo = immuData.getIn(['payload', 'account', 'preference', 'vendorQuotationMyLogo']);\n    if (vendorQuotationMyLogo) {\n      vendorQuotationMyLogo = vendorQuotationMyLogo.toJS();\n    }\n    if (vendorQuotationMyLogo == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetVendorQuotationMyLogoSucceededAction({ vendorQuotationMyLogo }));\n    }\n  } else {\n    console.error('getVendorQuotationMyLogo error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:vendorQuotationMyLogo.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n\n  yield put(new SetIsGettingVendorQuotationMyLogoAction({ isGettingVendorQuotationMyLogo: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getVendorQuotationBidEmail(\n  action: GetVendorQuotationBidEmailAction,\n) {\n  yield put(new SetIsGettingVendorQuotationBidEmailAction({ isGettingVendorQuotationBidEmail: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      body: {\n        userType: 'user',\n        preference: 'vendorQuotationBidEmail',\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const vendorQuotationBidEmail = immuData.getIn(['payload', 'account', 'preference', 'vendorQuotationBidEmail']);\n    if (vendorQuotationBidEmail == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetVendorQuotationBidEmailSucceededAction({ vendorQuotationBidEmail }));\n    }\n  } else {\n    console.error('getVendorQuotationBidEmail error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:vendorQuotationBidEmail.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n\n  yield put(new SetIsGettingVendorQuotationBidEmailAction({ isGettingVendorQuotationBidEmail: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* getMasterFormatRoots(\n  action: GetMasterFormatRootsAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getMasterFormatRoots',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const masterFormatRoots: List<IMap<MasterFormatRoot>> = immutableData.getIn(['payload', 'account', 'masterFormatRoots']);\n    if (masterFormatRoots == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetMasterFormatRootsSucceededAction({ masterFormatRoots: masterFormatRoots.sortBy((division) => division.get('masterFormatRootId')) }));\n    }\n  } else {\n    console.error('getMasterFormatRoots failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to delete brand tags, please try again later.',\n      severity: 'error'\n    }));\n  }\n\n  yield put(new SetIsGettingFirmBrandTagsAction(false));\n}\n\nexport function* addBrandTags(\n  action: AddBrandTagsAction\n) {\n  const {\n    brandReps,\n    byDivision,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsGettingFirmBrandTagsAction(true));\n\n  const endpoint = byDivision ? 'addBrandRepByDivision' : 'addBrandRep';\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint,\n      body: {\n        brandReps\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const status: boolean = immutableData.getIn(['payload', 'account', 'status']);\n    if (!status) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Failed to add brand tags, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: 'Brand tags have been successfully added.',\n        severity: 'success'\n      }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n  } else {\n    console.error('addBrandTags failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to add brand tags, please try again later.',\n      severity: 'error'\n    }));\n  }\n\n  yield put(new SetIsGettingFirmBrandTagsAction(false));\n}\n\nexport function* deleteBrandTagsById(\n  action: DeleteBrandTagsByIdAction\n) {\n  const {\n    brandRepIds,\n    officeIds,\n    firmIds,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsGettingFirmBrandTagsAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteBrandRep',\n      body: {\n        ...brandRepIds ? { brandRepIds } : {},\n        ...officeIds ? { officeIds } : {},\n        ...firmIds ? { firmIds } : {},\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const status: boolean = immutableData.getIn(['payload', 'account', 'status']);\n    if (!status) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Failed to delete brand tags, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: 'Brand tags have been successfully deleted.',\n        severity: 'success'\n      }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n  } else {\n    console.error('deleteBrandTagsById failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to delete brand tags, please try again later.',\n      severity: 'error'\n    }));\n  }\n\n  yield put(new SetIsGettingFirmBrandTagsAction(false));\n}\n\nexport function* getOfficeBrandTags(\n  action: GetOfficeBrandTagsAction\n) {\n  const {\n    officeId\n  } = action.payload;\n\n  yield put(new SetIsGettingFirmBrandTagsAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getBrandRep',\n      queries: {\n        officeId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const brandTags: List<IMap<BrandTag>> = immutableData.getIn(['payload', 'account', 'brandrep']);\n    if (brandTags == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetOfficeBrandTagsSucceededAction({\n        officeId,\n        // officeBrandTags: sortBrandTagsByManufacturerAndDivision(brandTags),\n        officeBrandTags: brandTags,\n        officeBrandTagsKeyed: brandTagsKeyMapped(brandTags) as Map<string, IMap<BrandTag>>\n      }));\n    }\n  } else {\n    console.error('getOfficeBrandTags failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to fetch office brand tags, please try again later.',\n      severity: 'error'\n    }));\n  }\n\n  yield put(new SetIsGettingFirmBrandTagsAction(false));\n}\n\nexport function* getFirmBrandTags(\n  action: GetFirmBrandTagsAction\n) {\n  const {\n    officeIds,\n  } = action.payload;\n\n  yield put(new SetIsGettingFirmBrandTagsAction(true));\n\n  const requests = officeIds.map((officeId) => call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getBrandRep',\n      queries: {\n        officeId,\n      }\n    }\n  })));\n  try {\n    const responses = yield all(requests);\n\n    let firmBrandTags = fromJS({});\n    let firmBrandTagsKeyed = fromJS({});\n    fromJS(responses).forEach((response, index) => {\n      const officeBrandTags = response.getIn(['data', 'payload', 'account', 'brandrep']);\n      // firmBrandTags = firmBrandTags.set(String(officeIds[index]), sortBrandTagsByManufacturerAndDivision(officeBrandTags));\n      firmBrandTags = firmBrandTags.set(String(officeIds[index]), officeBrandTags);\n      firmBrandTagsKeyed = firmBrandTagsKeyed.set(String(officeIds[index]), brandTagsKeyMapped(officeBrandTags));\n    });\n    yield put(new GetFirmBrandTagsSucceededAction({\n      firmBrandTags,\n      firmBrandTagsKeyed\n    }));\n  } catch (error) {\n    yield put(new SetSnackbarOpenAction({\n      message: `Failed to fetch brand tags, please try again later.`,\n      severity: 'error'\n    }));\n    console.error('getFirmBrandTags error'); // tslint:disable-line\n  }\n  yield put(new SetIsGettingFirmBrandTagsAction(false));\n}\n\nexport function* deleteAclRole(\n  action: DeleteAclRoleAction\n) {\n  const {\n    userId,\n    aclRoles,\n    refreshToken,\n  } = action.payload;\n\n  yield put(new SetIsDeletingAclRoleAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'revokeAclRoleFromUser',\n      params: {\n        userId\n      },\n      body: aclRoles\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const user: IMap<User> = immutableData.getIn(['payload', 'account', 'user', 0]);\n    if (user == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (refreshToken) {\n        yield put(new RefreshTokenAction({}));\n      }\n      yield put(new GetUserByIdSucceededAction(user));\n      yield put(new SetSnackbarOpenAction({\n        message: `ACL role(s) has been successfully revoked from the user.`,\n        severity: 'success'\n      }));\n    }\n  } else {\n    console.error('deleteAclRole failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: `ACL role(s) failed to be revoked from the user, please refresh the page and try again later.`,\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsDeletingAclRoleAction(false));\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* addAclRole(\n  action: AddAclRoleAction\n) {\n  const {\n    userId,\n    aclRoles,\n    refreshToken,\n  } = action.payload;\n\n  yield put(new SetIsAddingAclRoleAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'grantAclRoleToUser',\n      params: {\n        userId\n      },\n      body: aclRoles\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const user: IMap<User> = immutableData.getIn(['payload', 'account', 'user', 0]);\n    if (user == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (refreshToken) {\n        yield put(new RefreshTokenAction({}));\n      }\n      yield put(new GetUserByIdSucceededAction(user));\n      yield put(new SetSnackbarOpenAction({\n        message: `ACL role(s) has been successfully granted to the user.`,\n        severity: 'success'\n      }));\n    }\n  } else {\n    console.error('addAclRole failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: `ACL role(s) failed to be granted to the user, please refresh the page and try again later.`,\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsAddingAclRoleAction(false));\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* getAclRoles(\n  action: GetAclRolesAction\n) {\n  yield put(new SetIsGettingAclRolesAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'listAclRoleGrants',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const aclRoles: List<IMap<AclItem>> = immutableData.getIn(['payload', 'account', 'aclRole', 0]);\n    if (aclRoles == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Failed to fetch ACL roles, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new GetAclRolesSucceededAction({ aclRoles }));\n    }\n  } else {\n    console.error('getAclRoles failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to fetch ACL roles, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsGettingAclRolesAction(false));\n}\n\nexport function* getApps(\n  action: GetAppsAction\n) {\n  yield put(new SetIsGettingAppsAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'listAppGrants',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const apps: List<IMap<ListItem>> = immutableData.getIn(['payload', 'account', 'app']);\n    if (apps == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAppsSucceededAction({ apps }));\n    }\n  } else {\n    console.error('getApps failed', err); // tslint:disable-line\n  }\n  yield put(new SetIsGettingAppsAction(false));\n}\n\nexport function* saveFavouriteCategory(\n  action: SaveFavouriteCategoryAction\n) {\n  const { categoryId } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createCategoryFavourite',\n      body: {\n      },\n      params: {\n        categoryId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const savedFavouriteCategory = immutableData.getIn(['payload', 'account', 'categoryFavourite']);\n    if (savedFavouriteCategory == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProductCategoriesAction({ applyUnavailabilityFilter: true }));\n    }\n  } else {\n    console.error('save favourite category failed', err); // tslint:disable-line\n  }\n}\n\nexport function* deleteFavouriteCategory(\n  action: DeleteFavouriteCategoryAction\n) {\n  const { categoryId } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteCategoryFavourite',\n      body: {\n      },\n      params: {\n        categoryId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const deletedFavouriteCategory = immutableData.getIn(['payload', 'account', 'categoryFavourite']);\n    if (deletedFavouriteCategory == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProductCategoriesAction({ applyUnavailabilityFilter: true }));\n    }\n  } else {\n    console.error('delete favourite category failed', err); // tslint:disable-line\n  }\n}\n\nfunction* updateFilterById(\n  { payload }: UpdateFilterByIdAction\n) {\n  const {\n    filterId,\n    filterName,\n    filterData,\n    filterType,\n    index,\n    isDefault,\n    onSuccess,\n    onFail,\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateFilterById',\n      body: {\n        filterId,\n        ...filterName ? { filterName } : {},\n        ...filterData ? { filterData } : {},\n        isDefault\n      }\n    }\n  }));\n  if (data) {\n\n    const immutableData = fromJS(data);\n    const savedFilter: IMap<SavedFilter> = immutableData.getIn(['payload', 'account', 'filter', 0]);\n    if (savedFilter) {\n      yield put(new UpdateFilterByIdSucceededAction({ savedFilter, filterId, filterType, index, isDefault }));\n      if (onSuccess) {\n        onSuccess();\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:savedFilterList.updateSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n    } else {\n      console.error('updateFilterById: No response', immutableData); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:savedFilterList.updateFailMessage'),\n          severity: 'error'\n        }));\n      }\n    }\n  } else {\n    console.error('failed to updateFilterById', { err }); // tslint:disable-line\n    if (onFail) {\n      onFail();\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:savedFilterList.updateFailMessage'),\n        severity: 'error'\n      }));\n    }\n  }\n}\n\nfunction* deleteFilterById(\n  { payload }: DeleteFilterByIdAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteUserFilter',\n      body: {\n        filterId: payload.id\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const id: number = immutableData.getIn(['payload', 'account', 'filter', 0, 'id']);\n    if (id) {\n      yield put(new DeleteFilterByIdSucceededAction({ id, filterType: payload.filterType }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:savedFilterList.deleteSuccessMessage'),\n        severity: 'success'\n      }));\n    } else {\n      console.error('deleteUserFilter: No response', immutableData); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:savedFilterList.deleteFailMessage'),\n        severity: 'error'\n      }));\n    }\n  } else {\n    console.error('failed to deleteUserFilter', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getFiltersByType(\n  { payload }: GetFiltersByType\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getFilterByType',\n      body: {\n        ...payload\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const filterList: List<IMap<SavedFilter>> = immutableData.getIn(['payload', 'account', 'filter']);\n    if (filterList) {\n      yield put(new GetFiltersByTypeSucceededAction({ filterList, filterType: payload.filterType }));\n    } else {\n      console.error('getFilterByType: No response', immutableData); // tslint:disable-line\n    }\n  } else {\n    console.error('failed to getFilterByType', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createFilter(\n  { payload }: CreateFilterAction\n) {\n  const {\n    filterName,\n    filterType,\n    filterData,\n    isDefault,\n    onSuccess,\n    onFail,\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createUserFilter',\n      body: {\n        filterName,\n        filterType,\n        filterData,\n        isDefault,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const savedFilter: IMap<SavedFilter> = immutableData.getIn(['payload', 'account', 'filter', 0]);\n    if (savedFilter) {\n      yield put(new CreateFilterSucceededAction({ savedFilter, filterType: payload.filterType }));\n      if (onSuccess) {\n        onSuccess();\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:savedFilterList.createSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n    } else {\n      console.error('createUserFilter: No response', immutableData); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:savedFilterList.createFailMessage'),\n          severity: 'success'\n        }));\n      }\n    }\n  } else {\n    console.error('failed to createFilter', { err }); // tslint:disable-line\n    if (onFail) {\n      onFail();\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:savedFilterList.createFailMessage'),\n        severity: 'success'\n      }));\n    }\n  }\n}\n\nfunction* getRTypeRegions(\n  action: GetRTypeRegionsAction\n) {\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getRTypeRegions',\n      body: {\n      },\n      params: {\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const regions: List<IMap<Region>> = immutableData.getIn(['payload', 'account', 'regions']);\n    if (!regions) {\n      console.error('getRTypeRegions: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetRTypeRegionsSucceededAction(regions));\n    }\n  } else {\n    console.error('failed to getRTypeRegions', { err }); // tslint:disable-line\n  }\n}\n\nexport function* verifyPassword({\n  payload,\n}: VerifyPasswordAction) {\n  const {\n    password,\n    resolve,\n    reject,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload:\n    {\n      service: 'auth',\n      endpoint: 'verifyPassword',\n      body: {\n        password\n      }\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const passwordCorrect: boolean = immutableData.getIn(['payload', 'auth', 'verified']);\n    return resolve({ passwordCorrect });\n  } else {\n    console.error('error verifyPassword', err); // tslint:disable-line\n  }\n  reject(err);\n}\n\nexport function* setPassword({\n  payload,\n}: SetPasswordAction) {\n  const {\n    password,\n    passwordNew\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload:\n    {\n      service: 'auth',\n      endpoint: 'setPassword',\n      body: {\n        password,\n        passwordNew\n      }\n    },\n  }));\n\n  if (data) {\n    yield put(new SetPasswordSuccessAction());\n  } else {\n    console.error('error setPassword', { err }); // tslint:disable-line\n    yield put(new SetPasswordFailAction());\n  }\n}\n\nfunction* getUsersList(\n  action: GetUsersListAction\n) {\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getUsersList',\n      body: {\n      },\n      params: {\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('getUsersList: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n    }\n  } else {\n    console.error('failed to getUsersList', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOpportunityLabels(\n  action: GetOpportunityLabelsAction\n) {\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOpportunityLabels',\n      body: {\n      },\n      params: {\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const opportunityLabels: List<IMap<OpportunityLabel>> = immutableData.getIn(['payload', 'account', 'opportunityLabel']);\n    if (opportunityLabels == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetOpportunityLabelsSucceededAction({ opportunityLabels }));\n    }\n  } else {\n    console.error('failed to getOpportunityLabels', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOpportunityStatuses(\n  action: GetOpportunityStatusesAction\n) {\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOpportunityStatuses',\n      body: {\n      },\n      params: {\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const opportunityStatuses: List<IMap<OpportunityStatus>> = immutableData.getIn(['payload', 'account', 'opportunityStatus']);\n    if (opportunityStatuses == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetOpportunityStatusesSucceededAction({ opportunityStatuses }));\n    }\n  } else {\n    console.error('failed to getOpportunityStatuses', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getVisibiltyList(\n  action: GetVisibilityListAction\n) {\n  const customerId = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getVisibilityList',\n      body: {},\n      params: {\n        id: customerId,\n        type: 'contact'\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const visibilityListItems: List<IMap<VisibilityListItem>> = immutableData.getIn(['payload', 'account', 'visibilitylist']);\n\n    if (visibilityListItems == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetVisibilityListSucceededAction({ visibilityListItems }));\n    }\n  } else {\n    console.error('failed to getVisibiltyList', { err }); // tslint:disable-line\n  }\n}\n\nfunction* resetPreferenceAction(\n  action: ResetPreferenceAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    userType,\n    preference,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'resetPreference',\n      body: {\n      },\n      params: {\n        userType,\n        preference,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const projectPhase: List<IMap<ProjectPhase>> = immutableData.getIn(['payload', 'account', 'preference', 'projectPhase']);\n    if (projectPhase == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new ResetPreferenceSucceededAction(projectPhase));\n    }\n  } else {\n    yield put(new ProjectFailedAction({ err }));\n  }\n}\n\nfunction* editContactByUserId(\n  {\n    payload,\n  }: EditContactAction,\n) {\n  const {\n    contactId,\n    contact: contactData,\n    postSearch = true,\n    searchTerm = '',\n    filters = null,\n    options = null,\n    onSuccess,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateContactById',\n      params: {\n        contactId,\n      },\n      body: {\n        ...contactData,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const contact: IMap<Contact> = immutableData.getIn(['payload', 'account', 'contact', '0']);\n    if (postSearch) {\n      yield put(new SearchContactsAction({ searchTerm, filters, options }));\n    }\n    if (onSuccess) {\n      onSuccess(contact);\n    }\n  } else {\n    console.error('edit contact by users id', { err }); // tslint:disable-line\n  }\n}\n\nfunction* addContactByUserId(\n  {\n    payload,\n  }: AddContactAction,\n) {\n  const {\n    contact: contactData,\n    searchTerm = '',\n    filters = null,\n    options = null,\n    discounts = null,\n    onSuccess,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'addContact',\n      body: {\n        ...contactData,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const contact: IMap<Contact> = immutableData.getIn(['payload', 'account', 'contact', '0']);\n\n    yield put(new SearchContactsAction({ searchTerm, filters, options }));\n    if (discounts) {\n      // setting the customerId for the discounts now that it exist\n      const completedDiscounts = JSON.parse(JSON.stringify(discounts))\n        .map(discount => ({ ...discount, customerId: data.payload.account.contact[0].id }));\n      yield put(new AddCustomerDiscountAction({ discounts: completedDiscounts }));\n    }\n\n    if (onSuccess) {\n      onSuccess(contact);\n    }\n  } else {\n    console.error('add contact by users id', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteOfficeById(\n  {\n    payload,\n  }: DeleteOfficeByIdAction,\n) {\n  const {\n    officeId,\n    onSuccess,\n    onFail,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteOfficeById',\n      body: {\n      },\n      params: {\n        officeId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const deletedOfficeId: number = immutableData.getIn(['payload', 'account', 'office', '0', 'id']);\n\n    if (deletedOfficeId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new DeleteOfficeByIdSucceededAction({ officeId: deletedOfficeId }));\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    console.error('deleteOfficeById failed', err); // tslint:disable-line\n    if (onFail) {\n      onFail();\n    }\n  }\n}\n\nfunction* deleteContactsById(\n  action: DeleteContactsByIdAction,\n) {\n  const contactId = action.payload.contactId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteContactById',\n      body: {\n      },\n      params: {\n        contactId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const deletedContactId: number = immutableData.getIn(['payload', 'account', 'contact', '0', 'id']);\n\n    if (deletedContactId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new DeleteContactsByIdSucceededAction({ contactId: deletedContactId }));\n    }\n  }\n}\n\nfunction* deleteUserByIdRaw(userId: number) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteUser',\n      params: {\n        userId\n      }\n    }\n  }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteUserById(\n  action: DeleteUserByIdAction,\n) {\n  const {\n    userId,\n    onSuccess,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteUserByIdRaw, userId);\n  if (data) {\n    const immutableData = fromJS(data);\n    const deleteduserId: number = immutableData.getIn(['payload', 'account', 'user', '0', 'id']);\n\n    if (deleteduserId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new DeleteUserByIdSucceededAction({ userId: deleteduserId }));\n      // need to get office again to update active user count\n      const userOfficeId = yield select(makeSelectTeamOrganizationSelectedOfficeId());\n      yield put(new GetOfficeByIdAction({ officeId: userOfficeId }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    console.error('deleteUser failed', err); // tslint:disable-line\n  }\n}\n\nfunction* deleteUserByIdAndSearchAllUsers(\n  action: DeleteUserByIdAndSearchAllUsersAction,\n) {\n  const {\n    userId,\n    filters,\n    options,\n    queries,\n    onSuccess,\n    onFail,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteUserByIdRaw, userId);\n  if (data) {\n    const immutableData = fromJS(data);\n    const deleteduserId: number = immutableData.getIn(['payload', 'account', 'user', '0', 'id']);\n\n    if (deleteduserId == null) {\n      console.error('deleteUserByIdAndSearchAllUsers - Invalid response', data); // tslint:disable-line\n      yield put(new SetIsSearchingAllUsersAction(false));\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      yield put(new SearchAllUsersAction({ filters, options, queries }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n  } else {\n    console.error('deleteUserByIdAndSearchAllUsers failed', err); // tslint:disable-line\n    yield put(new SetIsSearchingAllUsersAction(false));\n    if (onFail) {\n      onFail();\n    }\n  }\n}\n\nfunction* getContactsById(\n  {\n    payload,\n    callback,\n  }: GetContactsByIdAction,\n) {\n  const contactId = payload.contactId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction(\n    {\n      payload: {\n        service: 'account',\n        endpoint: 'getContactById',\n        body: {\n        },\n        params: {\n          contactId,\n        }\n      },\n    },\n    callback\n  ));\n  if (!data) {\n    console.error('get contacts by id', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getCollaborators(\n  action: GetCollaboratorsAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getCollaborators',\n      body: {\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const collaborators: List<IMap<Collaborator>> = immutableData.getIn(['payload', 'account', 'collaborator']);\n    if (collaborators == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetNonFirmCollaboratorsSucceededAction({ collaborators }));\n    }\n    // yield put(new GetCollaboratorsSucceededAction({ collaborators }));\n\n    // console.error('getCollabs', {\n    //   collaborators,\n    //   getUserCollaboratorsByFirm,\n    //   getOfficeCollaboratorsByFirm,\n    // });\n  } else {\n    console.error('get collaborators error', { err }); // tslint:disable-line\n  }\n\n  yield call(getUserCollaboratorsByFirm, action);\n  yield call(getOfficeCollaboratorsByFirm, action);\n}\n\nfunction* getUserCollaboratorsByFirm(\n  action: GetCollaboratorsAction,\n) {\n  const identity: IMap<Identity> = yield select(makeSelectIdentityObject());\n\n  if (identity != null) {\n    const firmId = identity.get('firm_id');\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getCollaboratorsUser',\n        body: {\n        },\n        params: {\n          firmId,\n        }\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const collaborators: List<IMap<Collaborator>> = immutableData.getIn(['payload', 'account', 'collaborator']);\n      if (collaborators == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetFirmCollaboratorsSucceededAction({ collaborators }));\n      }\n    } else {\n      console.error('get collaborators error', { err }); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getOfficeCollaboratorsByFirm(\n  action: GetCollaboratorsAction,\n) {\n\n  const identity: IMap<Identity> = yield select(makeSelectIdentityObject());\n\n  if (identity != null) {\n    const firmId = identity.get('firm_id');\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getCollaboratorsOffice',\n        body: {\n        },\n        params: {\n          firmId,\n        }\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const collaborators: List<IMap<Collaborator>> = immutableData.getIn(['payload', 'account', 'collaborator']);\n      if (collaborators == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetFirmCollaboratorsSucceededAction({ collaborators }));\n      }\n    } else {\n      console.error('get collaborators error', { err }); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getContacts(\n  action: GetContactsAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getContacts',\n      body: {\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const contacts: List<IMap<Contact>> = immutableData.getIn(['payload', 'account', 'contact']);\n    if (contacts == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetContactsSucceededAction({ contacts }));\n    }\n  } else {\n    console.error('get contacts error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getLogInAsUsers(\n  payload: GetLogInAsUsersAction,\n) {\n\n  yield call(taggedDelay, 500, {\n    message: 'getLogInAsUsers',\n  });\n  const searchTerm = payload.payload;\n  const userEmail = yield select(makeSelectUserEmail());\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getLoginAsUser',\n      body: {\n        'filters': {\n          'and': [\n            {\n              'or': [\n                {\n                  'email': {\n                    'like': searchTerm\n                  }\n                },\n                {\n                  'fullName': {\n                    'like': searchTerm\n                  }\n                }\n              ]\n            },\n            {\n              'email': {\n                'neq': userEmail,\n              }\n            }\n          ]\n        }\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (users == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetLogInAsUsersSucceededAction({ users }));\n    }\n  } else {\n    console.error('get logInAsUsers error', { err }); // tslint:disable-line\n  }\n  yield put(new SetLogInAsUsersIsSearchingAction(false));\n\n}\n\n\n// @@TODO under construction - not required at the moment so leaving it\nfunction* addCollaboratorToSpec(\n  {\n    payload: collaboratorData,\n  }: AddCollaboratorAction,\n) {\n\n  // const body = {\n  //   id: collaboratorData.get('specId'),\n  // };\n\n  // console.error('addCollaboratorToSpec data', { collaboratorData });\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'addCollaboratorToSpec',\n      body: {\n        ...collaboratorData,\n      },\n      params: {\n        // id: body.id,\n      }\n    }\n  }));\n\n  if (data) {\n    yield put(new GetCollaboratorsAction());\n  } else {\n    console.error('add collaborators by users id', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getPartnerships(\n  action: GetPartnershipsAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPartnerships',\n      body: {\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const partnerships: any = immutableData.getIn(['payload', 'account', 'partnership']);\n    if (partnerships == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetPartnershipsSucceededAction({ partnerships }));\n    }\n  } else {\n    console.error('get Partnerships error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setPartnerships(\n  {\n    payload,\n  }: SetPartnershipsAction,\n) {\n  const config = payload.config;\n  const partnershipId = payload.partnershipId;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updatePartnershipConfig',\n      body: {\n        config\n      },\n      params: {\n        partnershipId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const partnership: any = immutableData.getIn(['payload', 'account', 'partnership', 0]);\n    if (partnership == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const dataConfig = partnership.get('config');\n      const dataPartnershipId = partnership.get('id');\n      yield put(new SetPartnershipsSucceededAction({ config: dataConfig, partnershipId: dataPartnershipId }));\n    }\n  } else {\n    console.error('Set Partnership', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOfficesByFirmId(\n  { payload }: GetOfficesByFirmIdAction,\n) {\n\n  const {\n    firmId,\n    onSuccess,\n  } = payload;\n  const userFirmId = yield select(makeSelectUserFirmId());\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOfficesByFirm',\n      body: {\n      },\n      params: {\n        firmId: firmId || userFirmId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n\n    const officeList: List<IMap<Office>> = immutableData.getIn(['payload', 'account', 'office']);\n    if (officeList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetOfficesSucceededAction(officeList));\n      yield put(new GetOfficesByFirmIdSucceededAction({\n        firmId: firmId || userFirmId,\n        officeList,\n      }));\n      yield put(new GetOfficeByIdSucceededAction(officeList));\n      if (onSuccess) {\n        onSuccess(officeList);\n      }\n    }\n  } else {\n    console.error('get offices by firm id error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getQuoteOfficesByFirm(\n  { payload }: GetQuoteOfficesByFirmAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getQuoteOfficesByFirm'\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n\n    const officeList: List<IMap<Office>> = immutableData.getIn(['payload', 'account', 'office']);\n    if (officeList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // yield put(new GetOfficesSucceededAction(officeList));\n      yield put(new GetQuoteOfficesByFirmSucceededAction({\n        officeList,\n      }));\n      // yield put(new GetOfficeByIdSucceededAction(officeList));\n    }\n  } else {\n    console.error('get quote offices by firm error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOfficeById(\n  { payload }: GetOfficeByIdAction,\n) {\n\n  const { officeId } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOfficeById',\n      body: {\n      },\n      params: {\n        officeId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n\n    const officeList: List<IMap<Office>> = immutableData.getIn(['payload', 'account', 'office']);\n    yield put(new GetOfficesSucceededAction(officeList));\n  } else {\n    console.error('get offices by firm id error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* getUserFirm(\n  { payload }: GetUserFirmAction,\n) {\n  const { firmId } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getFirmById',\n      body: {\n      },\n      params: {\n        firmId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firm: IMap<Firm> = immutableData.getIn(['payload', 'account', 'firm', 0]);\n    if (firm == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetUserFirmSucceededAction(firm));\n    }\n  } else {\n    console.error('getUserFirm error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* getFirmById(\n  { payload }: GetFirmByIdAction,\n) {\n  const {\n    firmId,\n    withLoading = true,\n  } = payload;\n\n  if (withLoading) {\n    yield put(new IsFetchingFirmByIdAction(true));\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getFirmById',\n      body: {\n      },\n      params: {\n        firmId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firm: IMap<Firm> = immutableData.getIn(['payload', 'account', 'firm', 0]);\n    if (firm == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetFirmByIdSucceededAction(firm));\n    }\n  } else {\n    console.error('getFirmById error', { err }); // tslint:disable-line\n  }\n\n  if (withLoading) {\n    yield put(new IsFetchingFirmByIdAction(false));\n  }\n}\n\nfunction* searchUsersQuick({ payload }: SearchUsersQuickAction) {\n  const {\n    searchTerm,\n    firmId,\n    officeId,\n    includeAtsUsers,\n    queries,\n    delay = true\n  } = payload;\n  if (delay) {\n    yield call(taggedDelay, 500, {\n      message: 'searchUsersQuick',\n    });\n  }\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, new SearchUsersAction({\n    filters: new Filter({\n      'and': [\n        {\n          'status': {\n            'eq': 'active'\n          }\n        },\n        {\n          'or': [\n            {\n              'email': {\n                'like': searchTerm\n              }\n            },\n            {\n              'fullName': {\n                'like': searchTerm\n              }\n            }\n          ],\n        },\n        ...(firmId || officeId || includeAtsUsers) ? [{\n          'or': [\n            ...(firmId ? [\n              {\n                'firmId': {\n                  'eq': firmId\n                }\n              }\n            ] : []),\n            ...(officeId ? [\n              {\n                'a.office_id': {\n                  'eq': officeId\n                }\n              }\n            ] : []),\n            ...(includeAtsUsers ? [\n              {\n                'firmId': {\n                  'eq': 2368648\n                }\n              }\n            ] : [])\n          ]\n        }] : []\n      ]\n    }).toImmutable(),\n    queries\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('searchUsersRaw: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n      yield put(new SearchUsersFinishedAction(users.map((user) => user.get('id') as number).toOrderedSet()));\n    }\n  } else {\n    console.error('searchUsersRaw: error', { err }); // tslint:disable-line\n    yield put(new SearchUsersFinishedAction(OrderedSet<number>()));\n  }\n}\n\nfunction* searchUsersQuickByOfficeId(\n  action: SearchUsersQuickByOfficeIdAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    searchTerm,\n    officeId,\n  } = payload;\n\n  yield call(taggedDelay, 500, {\n    message: 'searchUsersQuickByOfficeId',\n  });\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, new SearchUsersAction({\n    filters: new Filter({\n      'and': [\n        {\n          'status': {\n            'eq': 'active'\n          }\n        },\n        {\n          'or': [\n            {\n              'email': {\n                'like': searchTerm\n              }\n            },\n            {\n              'fullName': {\n                'like': searchTerm\n              }\n            }\n          ],\n        },\n        {\n          'a.office_id': {\n            'eq': officeId\n          }\n        }\n      ]\n    }).toImmutable(),\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('SearchUsersQuickByOfficeIdAction: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n      yield put(new SearchUsersFinishedAction(users.map((user) => user.get('id') as number).toOrderedSet()));\n    }\n  } else {\n    console.error('SearchUsersQuickByOfficeIdAction: error', { err }); // tslint:disable-line\n    yield put(new SearchUsersFinishedAction(OrderedSet<number>()));\n  }\n}\n\nfunction* searchQuoteUsers(\n  action: SearchQuoteUsersAction\n) {\n\n  const {\n    payload\n  } = action;\n\n  let filters: IMap<Filter> = null;\n  if (payload && payload.searchTerm) {\n    const { searchTerm } = payload;\n\n    filters = new Filter({\n      'or': [\n        {\n          'email': {\n            'like': searchTerm\n          }\n        },\n        {\n          'fullName': {\n            'like': searchTerm\n          }\n        }\n      ]\n    }).toImmutable();\n  }\n\n  yield call(taggedDelay, 500, {\n    message: 'searchQuoteUsers',\n  });\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchQuoteUsers',\n      body: {\n        filters\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('SearchQuoteUsersAction: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n      yield put(new SearchUsersFinishedAction(users.map((user) => user.get('id') as number).toOrderedSet()));\n    }\n  } else {\n    console.error('SearchQuoteUsersAction: error', { err }); // tslint:disable-line\n    yield put(new SearchUsersFinishedAction(OrderedSet<number>()));\n  }\n}\n\nfunction* getNoteCreators({ payload }: GetNoteCreatorsAction) {\n  yield call(taggedDelay, 500, {\n    message: 'getNoteCreators'\n  });\n\n  const {\n    userIds,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, new SearchUsersAction({\n    filters: new Filter({\n      'and': [\n        {\n          'id': {\n            'in': userIds\n          }\n        }\n      ]\n    }).toImmutable(),\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('getNoteCreators: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetNoteCreatorsSucceededAction(users));\n    }\n  } else {\n    console.error('getNoteCreators: error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchUsersByUserId({ payload }: SearchUsersByUserIdAction) {\n  yield call(taggedDelay, 500, {\n    message: 'searchUsersByUserId'\n  });\n\n  const {\n    userIds,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, new SearchUsersAction({\n    filters: new Filter({\n      'and': [\n        {\n          'id': {\n            'in': userIds\n          }\n        },\n        {\n          'status': {\n            'eq': 'active'\n          }\n        }\n      ]\n    }).toImmutable(),\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('searchUsersByUserId: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new SearchUsersbyUserIdFinishedAction(users));\n    }\n  } else {\n    console.error('searchUsersByUserId: error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchUsersByOfficeId({ payload }: SearchUsersByOfficeIdAction) {\n  yield call(taggedDelay, 500, {\n    message: 'searchUsersByOfficeId',\n  });\n\n  const {\n    officeId,\n    status,\n  } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, new SearchUsersAction({\n    filters: new Filter({\n      'and': [\n        {\n          'office_id': {\n            'eq': officeId\n          }\n        },\n        ...status ? [{\n          'status': {\n            'eq': status\n          }\n        }] : []\n      ]\n    }).toImmutable(),\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('searchUsersByOfficeId: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n      yield put(new SearchUsersByOfficeIdFinishedAction({\n        officeId,\n        userIdList: users.map((user) => user.get('id') as number).toOrderedSet()\n      }));\n    }\n  } else {\n    console.error('searchUsersByOfficeId: Error', { err }); // tslint:disable-line\n    // yield put(new SearchUsersFinishedAction(List()));\n  }\n}\n\nfunction* searchUsers(action: SearchUsersAction) {\n  yield call(taggedDelay, 500, {\n    message: 'searchUsers',\n  });\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchUsersRaw, action);\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('searchUsers: No response', { // tslint:disable-line\n        data,\n        err,\n      }); // tslint:disable-line\n    } else {\n      yield put(new GetUsersSucceededAction(users));\n    }\n  } else {\n    console.error('searchUsers: Error', { // tslint:disable-line\n      data,\n      err,\n    }); // tslint:disable-line\n  }\n}\n\nfunction* getFirmsForSuperFirmFirmAdmin(action: GetFirmsForSuperFirmFirmAdminAction) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getSearchFirms',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firms: List<IMap<Firm>> = immutableData.getIn(['payload', 'account', 'firm']);\n    if (!firms) {\n      console.error('getFirmsForSuperFirmFirmAdmin: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetFirmsForSuperFirmFirmAdminSucceededAction({ firmList: firms }));\n    }\n  } else {\n    console.error('getFirmsForSuperFirmFirmAdmin', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchAllFirms({ payload }: SearchAllFirmsAction) {\n  const {\n    filters,\n    options,\n  } = payload;\n\n  yield put(new SetIsSearchingAllFirmsAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getSearchFirms',\n      body: {\n        filters,\n        options,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firms: List<IMap<Firm>> = immutableData.getIn(['payload', 'account', 'firm']);\n    const firmsCount: number = immutableData.getIn(['payload', 'account', 'count']) ?? 10;\n    if (!firms) {\n      console.error('searchAllFirms: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new SearchingAllFirmsSucceededAction({ firms, firmsCount }));\n    }\n  } else {\n    console.error('searchAllFirms Error', { err }); // tslint:disable-line\n  }\n  yield put(new SetIsSearchingAllFirmsAction(false));\n\n  return {\n    data,\n    err\n  };\n}\n\nfunction* deleteFirmById({ payload }: DeleteFirmByIdAction) {\n  const {\n    firmId,\n    onSuccess,\n    onFail,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteFirmById',\n      params: {\n        firmId,\n      }\n    }\n  }));\n  if (data) {\n    if (onSuccess) {\n      onSuccess();\n    }\n  } else {\n    if (onFail) {\n      onFail();\n    }\n    console.error('searchAllFirms Error', { err }); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err\n  };\n}\n\nfunction* deleteFirmByIdThenSearchAllFirms(\n  action: DeleteFirmByIdThenSearchAllFirmsAction\n) {\n  const {\n    firmId,\n    filters,\n    options,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteFirmById, new DeleteFirmByIdAction({ firmId }));\n\n  if (data) {\n    yield put(new SetSnackbarOpenAction({\n      message: 'Firm deleted successfully',\n      severity: 'success',\n    }));\n\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(searchAllFirms, new SearchAllFirmsAction({\n      options,\n      filters,\n    }));\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: 'Firm failed to be deleted, please try again later',\n      severity: 'error',\n    }));\n    console.error('deleteFirmByIdThenSearchAllFirms Error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchAllUsers({ payload }: SearchAllUsersAction) {\n  const {\n    filters,\n    options,\n    queries = Map()\n  } = payload;\n\n  yield put(new SetIsSearchingAllUsersAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchUsers',\n      body: {\n        filters,\n        options,\n      },\n      queries: queries.toJS()\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    const usersCount: number = immutableData.getIn(['payload', 'account', 'count']) ?? 10;\n    if (!users) {\n      console.error('searchAllUsers: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new SearchingAllUsersSucceededAction({ users, usersCount }));\n    }\n  } else {\n    console.error('searchAllUsers Error', { err }); // tslint:disable-line\n  }\n  yield put(new SetIsSearchingAllUsersAction(false));\n}\n\nfunction* searchUsersRaw({ payload }: SearchUsersAction) {\n  const {\n    filters: _filters,\n    queries = Map()\n  } = payload;\n\n  const filters = _filters != null\n    ? _filters.toJS()\n    : {};\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchUsers',\n      body: {\n        filters\n      },\n      params: {\n      },\n      queries: queries.toJS()\n    }\n  }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getUserByIdRaw(userId: number) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getUserById',\n      params: {\n        userId\n      }\n    }\n  }));\n  return { data, err };\n}\n\nfunction* getUserById({ payload }: GetUserByIdAction) {\n  const { id, saveMulti = false } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(getUserByIdRaw, id);\n  if (data) {\n    const immutableData = fromJS(data);\n    const userData = immutableData.getIn(['payload', 'account', 'user', 0]);\n\n    if (!userData) {\n      console.error('No user found', { // tslint:disable-line\n        data,\n        err,\n      }); // tslint:disable-line\n    } else {\n      const firmId = userData.get('firmId');\n      if (saveMulti) {\n        yield put(new GetUserByIdMultiSucceededAction(userData));\n      } else {\n        yield put(new GetUserByIdSucceededAction(userData));\n        if (firmId != null) {\n          yield put(new GetUserFirmAction({ firmId })); // @@TODO no firmID????\n        }\n      }\n    }\n  } else {\n    console.error('get user by id error', { err }); // tslint:disable-line\n    if ((err as any)?.payload?.error?.code === 404) {\n      yield put(new SetSnackbarOpenAction({\n        message: `Error - this user does not exist or have been deleted.`,\n        severity: 'error',\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: `Error - cannot fetch user, please try again later.`,\n        severity: 'error',\n      }));\n    }\n  }\n}\n\nfunction* getLoggedInUserData() {\n  const id = yield select(makeSelectUserId());\n  if (!id) {\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(getUserByIdRaw, id);\n  if (data) {\n    const immutableData = fromJS(data);\n    const user = immutableData.getIn(['payload', 'account', 'user', 0]);\n\n    if (!user) {\n      console.error('No user found', { // tslint:disable-line\n        data,\n        err,\n      }); // tslint:disable-line\n    } else {\n      yield put(new GetLoggedInUserDataSucceededAction({ user }));\n    }\n  } else {\n    console.error('getLoggedInUserData error', { err }); // tslint:disable-line\n  }\n}\n\n\nfunction* getCollaboratorsOffice({ payload }: GetCollaboratorsOfficeAction) {\n\n  const firmId = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getCollaboratorsOffice',\n      params: {\n        firmId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const collaboratorsOffice: List<Collaborator> = immutableData.getIn(['payload', 'account', 'collaborator']);\n    if (collaboratorsOffice == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCollaboratorsOfficeSucceededAction(collaboratorsOffice));\n    }\n  } else {\n    console.error('get collaborators office error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOffices(\n  action: GetOfficesAction\n) {\n  const officeId: number | undefined = action.payload;\n\n  if (officeId != null) {\n    const {\n      data,\n      err\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getOfficeById',\n        body: {\n        },\n        params: {\n          officeId\n        }\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const offices = immutableData.getIn(['payload', 'account', 'office']);\n      if (offices == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetOfficesSucceededAction(offices));\n      }\n    } else {\n      console.error('get offices by id failed: ', err); // tslint:disable-line\n      if ((err as any)?.payload?.error?.code === 404) {\n        yield put(new SetSnackbarOpenAction({\n          message: `Error - this office does not exist or have been deleted.`,\n          severity: 'error',\n        }));\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: `Error - cannot fetch office, please try again later.`,\n          severity: 'error',\n        }));\n      }\n    }\n  } else {\n    const {\n      data,\n      err\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getOffices'\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      // console.log('get offices without id succeed: ', data);\n    }\n    else {\n      console.error('get offices failed:', { err }); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getFirms(\n  action: GetFirmsAction\n) {\n  const firmId: number | undefined = action.payload;\n\n  if (firmId != null) {\n    const {\n      data,\n      err\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getFirmById',\n        body: {\n        },\n        params: {\n          firmId\n        }\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const firms: List<IMap<Firm>> = immutableData.getIn(['payload', 'account', 'firm']);\n      if (firms == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetFirmsSucceededAction(firms));\n      }\n    } else {\n      console.error('get firms failed: ', err); // tslint:disable-line\n    }\n  } else {\n    const {\n      data,\n      err\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getFirms'\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      // console.log('get offices without id succeed: ', data);\n    }\n    else {\n      console.error('get firms failed:', { err }); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getPreferences(\n  action: GetPreferencesAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    userType,\n    preference\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType,\n        preference\n      }\n    }\n  }));\n  if (data) {\n    console.debug('get preferences succeeded: ', data);\n    const immutableData = fromJS(data);\n    const preferences = immutableData.getIn(['payload', 'account', 'preference']);\n    yield put(new GetPreferencesSucceededAction({\n      preference,\n      preferences\n    }));\n  } else {\n    console.error('get preferences failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getOpportunityStatusesPreferences(\n  action: GetOpportunityStatusesPreferencesAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOpportunityStatuses',\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    console.debug('getOpportunityStatuses succeeded: ', data);\n    const immutableData = fromJS(data);\n    const preferences = immutableData.getIn(['payload', 'account', 'opportunityStatus']) as List<IMap<OpportunityStatusListItem>>;\n    const preference = PreferenceType.opportunityStatus;\n    yield put(new GetPreferencesSucceededAction({\n      preference,\n      preferences: new Preferences({\n        [preference]: preferences,\n      }).toImmutable()\n    }));\n  } else {\n    console.error('getOpportunityStatuses', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setPreferences(\n  action: SetPreferencesAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    userType,\n    preference,\n    preferences\n  } = payload;\n\n  // const requestBody = {\n  //   [preference]: preferences.toJS()\n  // };\n  const requestBody = preferences.toJS();\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      body: requestBody,\n      params: {\n        userType,\n        preference\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newPreferences = immutableData.getIn(['payload', 'account', 'preference']);\n    yield put(new GetPreferencesSucceededAction({\n      preference,\n      preferences: newPreferences\n    }));\n  } else {\n    console.error('set preferences failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* editPreferences(\n  action: EditPreferencesAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    userType,\n    preference,\n    preferences\n  } = payload;\n\n  yield put(new GetPreferencesSucceededAction({\n    preference,\n    preferences: new Preferences({\n      [preference]: preferences,\n    }).toImmutable()\n  }));\n\n  yield put(new SetPreferencesAction({\n    userType,\n    preference,\n    preferences\n  }));\n}\n\nfunction* updateOfficeById(\n  action: UpdateOfficeByIdAction\n) {\n  const {\n    payload: { id, office, onSuccess, onFail }\n  } = action;\n\n  const requestBody = office.toJS();\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateOfficeById',\n      body: {\n        ...requestBody\n      },\n      params: {\n        officeId: id\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const officeList: List<IMap<Office>> = immutableData.getIn(['payload', 'account', 'office']);\n    if (officeList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      const firmId = officeList.getIn([0, 'firmId']);\n      yield put(new GetOfficesSucceededAction(officeList));\n      yield put(new GetOfficesByFirmIdAction({ firmId }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n  } else {\n    console.error('update office failed', { err }); // tslint:disable-line\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    if (onFail) {\n      onFail();\n    }\n  }\n}\n\nfunction* createOffice(\n  action: CreateOfficeAction\n) {\n  const {\n    payload: { office, onSuccess, onFail }\n  } = action;\n\n  const requestBody = office.toJS();\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createOffice',\n      body: {\n        ...requestBody\n      },\n      params: {\n      }\n    },\n  }));\n  if (data) {\n    console.debug('update office succeeded: ', data);\n    // TODO call it with the response when it'll return an object.\n    const immutableData = fromJS(data);\n    const officeList: List<IMap<Office>> = immutableData.getIn(['payload', 'account', 'office']);\n    if (officeList == null) {\n      console.error('createOffice Invalid response', { // tslint:disable-line\n        data,\n        err,\n      }); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      const firmId = officeList.getIn([0, 'firmId']);\n      yield put(new GetOfficesSucceededAction(officeList));\n      yield put(new GetOfficesByFirmIdAction({ firmId }));\n      if (onSuccess) {\n        onSuccess(officeList.getIn([0, 'id']));\n      }\n\n      // reset the quote excel column preferences so it will be refetch as needed;\n      yield put(new GetQuoteExcelColumnPreferencesSucceededAction({ quoteExcelColumnPreferences: Map() }));\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    console.error('createOffice failed', { // tslint:disable-line\n      data,\n      err,\n    }); // tslint:disable-line\n    if (onFail) {\n      onFail();\n    }\n  }\n}\n\nfunction* moveUserById(\n  action: MoveUserByIdAction\n) {\n  const {\n    payload: { userId, newOfficeId, onSuccess, onFail }\n  } = action;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'moveUserToOfficeWithData',\n      body: {\n        newOfficeId\n      },\n      params: {\n        userId\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const _user: IMap<User> = immutableData.getIn(['payload', 'account', 'user', 0]);\n    if (!_user) {\n      console.error('moveUserById: No response', immutableData); // tslint:disable-line\n      if (onFail) {\n        onFail(err);\n      }\n    } else {\n      // yield put(new GetUsersSucceededAction(users));\n      // yield put(new UpdateUserByIdSucceededAction());\n      // if (refreshToken) {\n      //   yield put(new RefreshTokenAction());\n      // }\n      // if (getUserAfterUpdate) {\n      //   yield put(new GetUserByIdAction({ id }));\n      // }\n      if (onSuccess) {\n        onSuccess(_user);\n      }\n    }\n  } else {\n    // const immutableErr = fromJS(err);\n    // const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    // const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    // if (errorCode === 500) {\n    //   yield put(new SetSnackbarOpenAction({\n    //     message: SNACKBAR_DEFAULT_MESSAGE,\n    //     severity: SNACKBAR_DEFAULT_SEVERITY\n    //   }));\n    // } else {\n    //   yield put(new SetSnackbarOpenAction({\n    //     message: errorMessage,\n    //     severity: 'error'\n    //   }));\n    // }\n    // yield put(new UpdateUserByIdFailedAction());\n    console.error('moveUserById failed', { err }); // tslint:disable-line\n    if (onFail) {\n      onFail(err);\n    }\n  }\n}\n\nfunction* updateUserByIdRaw({ user, userId }: { user: IMap<Partial<User>>, userId: number }) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateUserById',\n      body: {\n        ...user.toJS()\n      },\n      params: {\n        userId\n      }\n    },\n  }));\n  return { data, err };\n}\n\nfunction* updateUserById(\n  action: UpdateUserByIdAction\n) {\n  const {\n    payload: {\n      id,\n      user,\n      rolesToGrant,\n      rolesToRevoke,\n      refreshToken,\n      getUserAfterUpdate,\n      onSuccess,\n      onFail\n    }\n  } = action;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updateUserByIdRaw, { user, userId: id });\n  if (data) {\n    // console.debug('update user succeeded: ', data);\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('updateUserById: No response', immutableData); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      let newData;\n      let newErr;\n      if (rolesToGrant?.length) {\n        const { data: addData, err: addErr } = yield call(addAclRole, new AddAclRoleAction({\n          userId: id,\n          aclRoles: rolesToGrant.map((aclRole) => ({\n            appId: 'default',\n            aclRoleName: aclRole\n          }))\n        }));\n        newData = addData;\n        newErr = addErr;\n      }\n      if (rolesToRevoke?.length) {\n        const { data: revokeData, err: revokeErr } = yield call(deleteAclRole, new DeleteAclRoleAction({\n          userId: id,\n          aclRoles: rolesToRevoke.map((aclRole) => ({\n            appId: 'default',\n            aclRoleName: aclRole\n          }))\n        }));\n        newData = revokeData;\n        newErr = revokeErr;\n      }\n\n      const finalUsers = newData ? fromJS(newData).getIn(['payload', 'account', 'user']) : users;\n      yield put(new GetUserByIdSucceededAction(finalUsers.get(0)));\n      yield put(new GetUsersSucceededAction(finalUsers));\n      yield put(new UpdateUserByIdSucceededAction());\n      // need to get office again to update active user count\n      yield put(new GetOfficeByIdAction({ officeId: finalUsers.getIn([0, 'officeId']) }));\n      if (refreshToken) {\n        yield put(new RefreshTokenAction({}));\n      }\n      if (getUserAfterUpdate) {\n        yield put(new GetUserByIdAction({ id }));\n      }\n      if (onSuccess) {\n        onSuccess(finalUsers.getIn([0, 'id']));\n      }\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    yield put(new UpdateUserByIdFailedAction());\n    if (onFail) {\n      onFail();\n    }\n    console.error('update user failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createUser(\n  action: CreateUserAction\n) {\n  const {\n    payload: {\n      user,\n      userTypeId,\n      rolesToGrant,\n      onSuccess,\n      onFail,\n    }\n  } = action;\n\n  const requestBody = user.toJS();\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createUser',\n      body: {\n        ...userTypeId ? { userTypeId } : {},\n        ...requestBody\n      }\n    },\n  }));\n  if (data) {\n    console.debug('create user succeeded: ', data);\n    const immutableData = fromJS(data);\n    const users: List<IMap<User>> = immutableData.getIn(['payload', 'account', 'user']);\n    if (!users) {\n      console.error('createUser: No response', immutableData); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      let newData;\n      let newErr;\n      if (rolesToGrant?.length) {\n        const { data: addData, err: addErr } = yield call(addAclRole, new AddAclRoleAction({\n          userId: users.getIn([0, 'id']),\n          aclRoles: rolesToGrant.map((aclRole) => ({\n            appId: 'default',\n            aclRoleName: aclRole\n          }))\n        }));\n        newData = addData;\n        newErr = addErr;\n      }\n      const finalUsers = newData ? fromJS(newData).getIn(['payload', 'account', 'user']) : users;\n      yield put(new GetUsersSucceededAction(finalUsers));\n      // need to get office again to update active user count\n      yield put(new GetOfficeByIdAction({ officeId: finalUsers.getIn([0, 'officeId']) }));\n      if (onSuccess) {\n        onSuccess(finalUsers.getIn([0, 'id']));\n      }\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 500) {\n      yield put(new SetSnackbarOpenAction({\n        message: SNACKBAR_DEFAULT_MESSAGE,\n        severity: SNACKBAR_DEFAULT_SEVERITY\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: errorMessage,\n        severity: 'error'\n      }));\n    }\n    if (onFail) {\n      onFail();\n    }\n    console.error('create user failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getManufacturers(\n  action: GetManufacturersAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getManufacturers',\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturerList: List<IMap<Manufacturer>> = immutableData.getIn(['payload', 'account', 'manufacturer']);\n    if (manufacturerList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetManufacturersSucceededAction({ manufacturerList }));\n    }\n\n  } else {\n    console.error('account manufacturer list API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getBrandRepCategories(\n  action: GetBrandRepCategoriesAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getBrandRepCategories',\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categoryList: List<IMap<Category>> = immutableData.getIn(['payload', 'account', 'category']);\n    if (categoryList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCategoriesSucceededAction({ categoryList }));\n    }\n\n  } else {\n    console.error('account categories list API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getCategories(\n  action: GetCategoriesAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getCategories',\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categoryList: List<IMap<Category>> = immutableData.getIn(['payload', 'account', 'category']);\n    if (categoryList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCategoriesSucceededAction({ categoryList }));\n    }\n\n  } else {\n    console.error('account categories list API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getDiscounts(\n  action: GetDiscountsForCustomerId\n) {\n  const { customerId } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getCustomerDiscountById',\n      body: {\n      },\n      params: {\n        customerId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const discounts: List<IMap<CustomerDiscount>> = immutableData.getIn(['payload', 'account', 'discounts']);\n    if (discounts == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetDiscountsForCustomerIdSucceeded({ discounts }));\n    }\n  } else {\n    console.error('account discounts by customer id API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* addCustomerDiscount(\n  action: AddCustomerDiscountAction\n) {\n  const { discounts } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'addCustomerDiscount',\n      body: {\n        'customer': discounts\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const status: boolean = immutableData.getIn(['payload', 'account', 'status']);\n    if (!status) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('account addDiscount', err); // tslint:disable-line\n  }\n}\n\nexport function* editCustomerDiscount(\n  action: EditCustomerDiscountAction\n) {\n  const {\n    discounts\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'editCustomerDiscount',\n      body: {\n        'customer': discounts\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const status: boolean = immutableData.getIn(['payload', 'account', 'status']);\n    if (!status) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('account editDiscount', err); // tslint:disable-line\n  }\n}\n\nexport function* deleteCustomerDiscount(\n  action: DeleteCustomerDiscountAction\n) {\n  const { brandRepId } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteCustomerDiscount',\n      body: {\n        brandRepId\n      },\n      params: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const status = immutableData.getIn(['payload', 'account', 'status']);\n    if (!status) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('account deleteCustomerDiscount', err); // tslint:disable-line\n  }\n}\n\nexport function* getOfficeDiscounts(\n  action: GetDiscountsForOfficeId\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getOfficeDiscount',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const discounts: List<IMap<Discount>> = immutableData.getIn(['payload', 'account', 'discounts']);\n    if (discounts == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetDiscountsForOfficeIdSucceeded({ discounts }));\n    }\n\n  } else {\n    console.error('account discounts by customer id API failed', err); // tslint:disable-line\n  }\n}\n\nfunction* searchContacts(\n  payload: SearchContactsAction,\n) {\n  const {\n    searchTerm,\n    filters,\n    options,\n    noLoadingScreen\n  } = payload.payload;\n\n  yield put(new SetContactsLoadingAction(noLoadingScreen ? false : true));\n\n  yield call(taggedDelay, 500, {\n    message: 'SearchContactsAction',\n  });\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchContacts',\n      body: {\n        'filters': filters || defaultContactSearchFilter(searchTerm),\n        options\n      },\n      params: {\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const contacts: List<IMap<Contact>> = immutableData.getIn(['payload', 'account', 'contact']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'account', 'hasNextPage']);\n    const count: number = immutableData.getIn(['payload', 'account', 'count']);\n    yield put(new SearchContactsSucceededAction({ contacts, hasNextPage, count }));\n  } else {\n    console.error('search contacts error', { err }); // tslint:disable-line\n  }\n  yield put(new SetContactsLoadingAction(false));\n}\n\nfunction* searchContactsBySearchTerm(\n  payload: SearchContactsBySearchTermAction,\n) {\n\n  yield call(taggedDelay, 500, {\n    message: 'SearchContactsBySearchTermAction',\n  });\n\n  const {\n    searchTerm,\n  } = payload.payload;\n\n  //  yield put(new SetContactsLoadingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchContacts',\n      body: {\n        'filters': defaultContactSearchFilter(searchTerm)\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const contacts: List<IMap<Contact>> = immutableData.getIn(['payload', 'account', 'contact']);\n    yield put(new SearchContactsBySearchTermSucceededAction({ contacts }));\n  } else {\n    console.error('search contacts by search term error', { err }); // tslint:disable-line\n  }\n  // yield put(new SetContactsLoadingAction(false));\n}\n\nfunction* deleteContactAndSearchContacts(\n  action: DeleteContactAndSearchContactsAction,\n) {\n  yield put(new SetContactsLoadingAction(true));\n\n  const {\n    searchTerm = '',\n    contactId,\n    options,\n    filters\n  } = action.payload;\n\n  yield call(deleteContactsById, { payload: { contactId } } as any);\n\n  yield call(searchContacts, { payload: { searchTerm, filters, options } } as any);\n\n  yield put(new SetContactsLoadingAction(false));\n\n}\n\nfunction* searchContactsFindIndex(\n  payload: SearchContactsFindIndexAction,\n) {\n\n  yield call(taggedDelay, 500, {\n    message: 'searchContactsFindIndex',\n  });\n\n  const searchTerm = payload.payload.searchTerm || null;\n  const indexToFind = payload.payload.indexToFind;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      indexToFind,\n      {\n        service: 'account',\n        endpoint: 'searchContactsIndex',\n        body: {\n          'filters': defaultContactSearchFilter(searchTerm)\n        },\n        params: {\n        }\n      }]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const indexOfLetter: number = immutableData.getIn(['payload', 'account', 'index']);\n    yield put(new SearchContactsFindIndexSucceededAction(indexOfLetter));\n  } else {\n    console.error('search contacts index of letter error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* trackFormSubmitFailed(\n  {\n    payload: {\n      errors,\n      eventName,\n    }\n  }: TrackFormSubmitFailedAction,\n) {\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(eventName, {\n    success: false,\n    ...amplitudeData,\n    errors,\n  });\n}\n\nfunction* trackFormSubmitSucceeded(\n  {\n    payload: {\n      eventName,\n    }\n  }: TrackFormSubmitSucceededAction,\n) {\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(eventName, {\n    success: true,\n    ...amplitudeData,\n  });\n}\n\nfunction* searchDivisions() {\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getDivisions',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const divisions = immutableData.getIn(['payload', 'list', 'divisions']);\n    yield put(new SearchDivisionsSuccessAction({\n      divisions,\n    }));\n  } else {\n    console.error('get divisions error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchCategories(\n  action: SearchCategories\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getProductCategories',\n      queries: action.payload.queryParam\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categories = immutableData.getIn(['payload', 'list', 'productCategories']);\n    yield put(new SearchProductCategoriesSuccessAction({\n      categories,\n    }));\n  } else {\n    console.error('get product categories error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* searchManufacturers(action: SearchManufacturer) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getManufacturers',\n      queries: action.payload.queryParam\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturers = immutableData.getIn(['payload', 'list', 'manufacturers']);\n    yield put(new SearchManufacturersSuccessAction({\n      manufacturers,\n    }));\n  } else {\n    console.error('get manufacturers error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getUserPreferenceOverTakeoff() {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getTakeoffPreferences',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturerIds = immutableData.getIn(['payload', 'account', 'manufacturers']).map(manufacturer => manufacturer.get('id'));\n    const divisionIds = immutableData.getIn(['payload', 'account', 'divisions']);\n    const productCategoryIds = immutableData.getIn(['payload', 'account', 'productCategories']).map(productCategory => productCategory.get('id'));\n    const level = immutableData.getIn(['payload', 'account', 'level']);\n    yield put(new GetUserPreferenceOverTakeOffSuccess({\n      manufacturerIds,\n      divisionIds,\n      productCategoryIds,\n      level\n    }));\n  } else {\n    console.error('get preference error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* updateUserPreference(action: UpdateUserPreferenceAction) {\n  const {\n    onSuccess\n  } = action.payload;\n\n  const payload: { service: string, endpoint: string, body: any, queries: any } = {\n    service: 'account',\n    endpoint: 'updateTakeoffPreferences',\n    body: {\n      manufacturerIds: action.payload.manufacturerIds,\n      divisionIds: action.payload.divisionIds,\n      productCategoryIds: action.payload.productCategoryIds\n    },\n    queries: {}\n  };\n\n  if (typeof action.payload.share === 'boolean') {\n    payload.queries.share = action.payload.share;\n  }\n  if (action.payload.from) {\n    payload.queries.from = action.payload.from;\n  }\n  if (Object.keys(payload.queries).length === 0) {\n    payload.queries = null;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({ payload }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturerIds = immutableData.getIn(['payload', 'account', 'manufacturers']).map(manufacturer => manufacturer.get('id'));\n    const divisionIds = immutableData.getIn(['payload', 'account', 'divisions']);\n    const productCategoryIds = immutableData.getIn(['payload', 'account', 'productCategories']).map(productCategory => productCategory.get('id'));\n    const level = immutableData.getIn(['payload', 'account', 'level']);\n    yield put(new UpdateUserPreferenceActionSuccess({\n      manufacturerIds,\n      divisionIds,\n      productCategoryIds,\n      level\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:takeoffOptions.updateSuccessMessage'),\n      severity: 'success'\n    }));\n    if (onSuccess) {\n      onSuccess();\n    }\n  } else {\n    console.error('update preference error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:takeoffOptions.updateFailedMessage'),\n      severity: 'error'\n    }));\n  }\n}\n\nfunction* createFirm(\n  action: CreateFirmAction\n) {\n  const {\n    firm,\n    onSuccess,\n    onFail\n  } = action.payload;\n\n  yield put(new IsFetchingFirmByIdAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createFirm',\n      body: {\n        ...firm.toJS()\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newFirm = immutableData.getIn(['payload', 'account', 'firm', 0]);\n    if (!newFirm) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Firm failed to be created',\n        severity: 'error'\n      }));\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      yield put(new GetFirmByIdSucceededAction(newFirm));\n      yield put(new SetSnackbarOpenAction({\n        message: 'Firm successfully created',\n        severity: 'success'\n      }));\n      if (onSuccess) {\n        onSuccess(newFirm.get('id'));\n      }\n    }\n  } else {\n    console.error('createFirm error', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Firm failed to be created',\n      severity: 'error'\n    }));\n    if (onFail) {\n      onFail();\n    }\n  }\n  yield put(new IsFetchingFirmByIdAction(false));\n}\n\nfunction* updateFirmById(\n  action: UpdateFirmByIdAction\n) {\n  const {\n    firmId,\n    firm,\n    onSuccess,\n    onFail\n  } = action.payload;\n\n  yield put(new IsFetchingFirmByIdAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateFirmById',\n      body: {\n        ...firm.toJS()\n      },\n      params: {\n        firmId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const updatedFirm = immutableData.getIn(['payload', 'account', 'firm', 0]);\n    if (!updatedFirm) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Firm failed to be updated',\n        severity: 'error'\n      }));\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      yield put(new GetFirmByIdSucceededAction(updatedFirm));\n      yield put(new SetSnackbarOpenAction({\n        message: 'Firm successfully update',\n        severity: 'success'\n      }));\n      if (onSuccess) {\n        onSuccess(updatedFirm.get('id'));\n      }\n    }\n  } else {\n    console.error('updateFirmById error', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Firm failed to be updated',\n      severity: 'error'\n    }));\n    if (onFail) {\n      onFail();\n    }\n  }\n  yield put(new IsFetchingFirmByIdAction(false));\n}\n\nfunction* patchUpdateFirmById(action: PatchUpdateFirmByIdAction) {\n  yield put(new SetUpdateFirmByIdLoadingAction(true));\n\n  const userFirmId = yield select(makeSelectUserFirmId());\n  const {\n    shareQuotes,\n    shareContacts\n  } = action.payload;\n\n  const bodyToSubmit: {\n    shareQuotes?: number,\n    shareContacts?: number\n  } = {};\n\n  if (shareQuotes !== undefined) {\n    bodyToSubmit.shareQuotes = shareQuotes;\n  }\n  if (shareContacts !== undefined) {\n    bodyToSubmit.shareContacts = shareContacts;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateFirmById',\n      body: {\n        ...bodyToSubmit\n      },\n      params: {\n        firmId: userFirmId\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firm = immutableData.getIn(['payload', 'account', 'firm', 0]);\n    yield put(new PatchUpdateFirmByIdSucceededAction(firm));\n  } else {\n    console.error('update preference error', { err }); // tslint:disable-line\n  }\n  yield put(new SetUpdateFirmByIdLoadingAction(false));\n}\n\nfunction* getBrandRep(action: GetBrandRepAction) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getBrandRep',\n    }\n  }));\n\n  if (data) {\n    const immutableBrandRepResponse = fromJS(data);\n    const brandRep: List<IMap<AttributeTag>> = immutableBrandRepResponse.getIn(['payload', 'account', 'brandrep'], List());\n    yield put(new GetBrandRepSucceededAction({\n      brandRep,\n    }));\n  } else {\n    yield put(new GetBrandRepFailedAction());\n    console.error('get brandrep failed', { err }); // tslint:disable-line\n  }\n}\n\n// alternative visibility preferences settings\nfunction* getAllManufacturerPreferences(action: any) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getManufacturerPreferences',\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const manufacturerPreferences: List<IMap<ManufacturerPreference>> = immutableResponse.getIn(['payload', 'spec', 'manufacturerPreferences'], List());\n    yield put(new GetManufacturerPreferenceSucceededAction({ manufacturerPreferences }));\n  } else {\n    yield put(new GetManufacturerPreferenceFailedAction());\n    console.error('getAllManufacturerPreferences failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getManufacturerPreferenceById(action: any) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getManufacturerPreferences',\n    }\n  }));\n\n  if (data) {\n    const immutableBrandRepResponse = fromJS(data);\n    const brandRep: List<IMap<AttributeTag>> = immutableBrandRepResponse.getIn(['payload', 'account', 'brandrep'], List());\n    yield put(new GetBrandRepSucceededAction({\n      brandRep,\n    }));\n  } else {\n    yield put(new GetBrandRepFailedAction());\n    console.error('getManufacturerPreferenceById failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createManufacturerPreference(action: CreateManufacturerPreferenceAction) {\n  const { manufacturerPreferences } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'createManufacturerPreference',\n      body: manufacturerPreferences.toJS()\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const newManufacturerPreferences: List<IMap<ManufacturerPreference>> = immutableResponse.getIn(['payload', 'spec', 'manufacturerPreferences'], List());\n    yield put(new CreateManufacturerPreferenceSucceededAction({ manufacturerPreferences: newManufacturerPreferences }));\n    // yield put(new SetSnackbarOpenAction({\n    //   message: 'Successfully Create Visibility Preference',\n    //   severity: 'success',\n    // }));\n  } else {\n    yield put(new CreateManufacturerPreferenceFailedAction());\n    console.error('create manufacturer preference failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* updateManufacturerPreference(action: UpdateManufacturerPreferenceAction) {\n  const { manufacturerPreference } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'updateManufacturerPreference',\n      params: {\n        preferenceId: manufacturerPreference.get('id'),\n      },\n      body: manufacturerPreference.toJS()\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const newManufacturerPreference: IMap<ManufacturerPreference> = immutableResponse.getIn(['payload', 'spec', 'manufacturerPreference', 0], Map());\n    yield put(new UpdateManufacturerPreferenceSucceededAction({\n      manufacturerPreference: newManufacturerPreference,\n    }));\n  } else {\n    yield put(new UpdateManufacturerPreferenceFailedAction());\n    console.error('update manufacturer preference failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteManufacturerPreference(action: DeleteManufacturerPreferenceAction) {\n  const { preferenceId } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'removeManufacturerPreference',\n      params: { preferenceId }\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const deletedPreferenceId = immutableResponse.getIn(['payload', 'spec', 'manufacturerPreference', 'id']);\n    yield put(new DeleteManufacturerPreferenceSucceededAction({ preferenceId: deletedPreferenceId }));\n  } else {\n    yield put(new DeleteManufacturerPreferenceFailedAction());\n    console.error('delete manufacturer preference failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getManufacturerRankings(action: GetManufacturerRankingsAction) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getXrefAlternativeManufacturerRankings',\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const rankings: List<IMap<ManufacturerRanking>> = immutableResponse.getIn(['payload', 'xref', 'rankings'], List());\n    yield put(new GetManufacturerRankingsSucceededAction({\n      rankings,\n    }));\n  } else {\n    yield put(new GetBrandRepFailedAction());\n    console.error('getManufacturerRankings failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createManufacturerRanking(action: CreateManufacturerRankingAction) {\n  const { ranking } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'patchXrefAlternativeManufacturerRankings',\n      body: {\n        command: {\n          upsert: [\n            ranking.toJS()\n          ],\n        }\n      },\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const rankings: List<IMap<ManufacturerRanking>> = immutableResponse.getIn(['payload', 'xref', 'rankings'], List());\n    yield put(new CreateManufacturerRankingSucceededAction({\n      rankings,\n    }));\n  } else {\n    // yield put(new GetBrandRepFailedAction());\n    console.error('create ranking failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* updateManufacturerRanking(action: UpdateManufacturerRankingAction) {\n  const { ranking } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'patchXrefAlternativeManufacturerRankings',\n      body: {\n        command: {\n          upsert: [\n            ranking.toJS()\n          ]\n        }\n      },\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    // console.log('update ranking (add)', immutableResponse);\n    const rankings: List<IMap<ManufacturerRanking>> = immutableResponse.getIn(['payload', 'xref', 'rankings'], List());\n    yield put(new CreateManufacturerRankingSucceededAction({\n      rankings,\n    }));\n  } else {\n    // yield put(new GetBrandRepFailedAction());\n    console.error('updateManufacturerRanking failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteManufacturerRanking(action: DeleteManufacturerRankingAction) {\n  const { ranking, manufacturerPreferences } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'patchXrefAlternativeManufacturerRankings',\n      body: {\n        command: {\n          delete: [ranking.toJS()]\n        }\n      },\n    }\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const rankings: List<IMap<ManufacturerRanking>> = immutableResponse.getIn(['payload', 'xref', 'rankings'], List());\n    yield put(new DeleteManufacturerRankingSucceededAction({\n      rankings,\n    }));\n    // delete all preferences\n    const newPreferences = manufacturerPreferences.filter((mp) => mp.get('sponsorBrand') !== ranking.get('targetManufacturerId'));\n    const {\n      data: _data,\n      err: _err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: 'createManufacturerPreference',\n        body: newPreferences.toJS()\n      }\n    }));\n\n    if (_data) {\n      const _immutableResponse = fromJS(_data);\n      const newManufacturerPreferences: List<IMap<ManufacturerPreference>> = _immutableResponse.getIn(['payload', 'spec', 'manufacturerPreferences'], List());\n      yield put(new CreateManufacturerPreferenceSucceededAction({ manufacturerPreferences: newManufacturerPreferences }));\n    } else {\n      console.error('delete preferences failed', { _err }); // tslint:disable-line\n    }\n  } else {\n    console.error('delete ranking failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getAttachmentFolderTemplates(\n  action: GetAttachmentFolderTemplatesAction,\n) {\n  const { searchTerm = '' } = action.payload;\n\n  yield put(new SetIsSearchingFolderTemplatesAction(true));\n  const filters = searchTerm\n    ? {\n      and: [\n        {\n          status: {\n            eq: 'active'\n          }\n        },\n        {\n          name: {\n            like: searchTerm\n          }\n        }\n      ]\n    }\n    : {\n      status: {\n        eq: 'active'\n      }\n    };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchDirectoryTemplates',\n      body: {\n        filters\n      }\n    }\n  }));\n  yield put(new SetIsSearchingFolderTemplatesAction(false));\n  if (data) {\n    const immuData = fromJS(data);\n    const templates = immuData.getIn(['payload', 'account', 'templateDirectories']);\n    if (templates == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAttachmentFolderTemplatesSucceededAction({ templates }));\n    }\n  } else {\n    console.error('attachment folder templates no data', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getAttachmentFolderTemplateWithFolders(\n  action: GetAttachmentFolderTemplateWithFoldersAction,\n) {\n  const { directoryTemplateId } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getDirectoryTemplateFiles',\n      params: {\n        directoryTemplateId\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const templateFolders = immuData.getIn(['payload', 'account', 'file']);\n    if (templateFolders == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (templateFolders.get('main')) {\n        // If there is at least 1 folder in the template, files array is under main\n        yield put(new GetAttachmentFolderTemplateWithFoldersSucceededAction({ templateFolders: templateFolders.get('main') }));\n      } else {\n        // If there is 0 folder in the template, empty array is under file\n        yield put(new GetAttachmentFolderTemplateWithFoldersSucceededAction({ templateFolders }));\n      }\n    }\n  } else {\n    console.error('attachment folder template no data', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createAttachmentFolderTemplate(\n  action: CreateAttachmentFolderTemplateAction,\n) {\n  const { templateName } = action.payload;\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: 'Creating template' }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createDirectoryTemplate',\n      params: {\n        visibilityType: 'firm'\n      },\n      body: {\n        directoryTemplate: {\n          name: templateName\n        }\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const newTemplateId: number = immuData.getIn(['payload', 'account', 'newDirectoryTemplate', 'id']);\n    if (newTemplateId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      // if create new template succeeded then set selected template id and go to template page\n      yield put(new SetSelectedAttachmentFolderTemplateIdAction(newTemplateId));\n      yield put(push(ADD_ATTACHMENT_FOLDERS_TEMPLATE_PATH));\n    }\n  } else {\n    console.error('create directory template failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* updateAttachmentFolderTemplate(\n  action: UpdateAttachmentFolderTemplateAction,\n) {\n  const { templateId, updatedTemplate } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateDirectoryTemplateById',\n      params: {\n        visibilityType: 'firm',\n        directoryTemplateId: templateId\n      },\n      body: {\n        directoryTemplate: updatedTemplate\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const updatedTemplateRes: number = immuData.getIn(['payload', 'account', 'directoryTemplate']);\n    if (updatedTemplateRes == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // lading modal is open. After deleting, set modal open to false\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      // if update template succeeded then get template again\n      yield put(new GetAttachmentFolderTemplatesAction({}));\n      yield put(new GetAttachmentFolderTemplateWithFoldersAction({ directoryTemplateId: templateId }));\n    }\n  } else {\n    console.error('update attachment folder template failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* createTemplateFolder(\n  action: CreateTemplateFolderAction,\n) {\n  const {\n    templateId,\n    parentId,\n    folderName,\n    permission,\n    labels = []\n  } = action.payload;\n\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: 'Creating Folder' }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'createDirectoryTemplateFile',\n      params: {\n        directoryTemplateId: templateId\n      },\n      body: {\n        files: {\n          main: [\n            {\n              parentId,\n              folderName,\n              permission,\n              labels: [...labels]\n            }\n          ]\n        }\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const newFolder = immuData.getIn(['payload', 'account', 'file', 'main', 0]);\n    if (newFolder == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // if create new folder succeeded then load the template again\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      yield put(new GetAttachmentFolderTemplateWithFoldersAction({ directoryTemplateId: templateId }));\n    }\n  } else {\n    console.error('create template folder failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* updateTemplateFolder(\n  action: UpdateTemplateFolderAction,\n) {\n  const {\n    templateId,\n    folderId,\n    updatedFolder\n  } = action.payload;\n\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: 'Updating Folder' }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateDirectoryTemplateFile',\n      params: {\n        directoryTemplateId: templateId,\n        linkedFileId: folderId\n      },\n      body: updatedFolder\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const newFolder = immuData.getIn(['payload', 'account', 'file']);\n    if (newFolder == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      // if create new folder succeeded then load the template again\n      yield put(new GetAttachmentFolderTemplateWithFoldersAction({ directoryTemplateId: templateId }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:attachmentFoldersTemplate.folderUpdated'),\n        severity: 'success'\n      }));\n    }\n  } else {\n    console.error('update template folder failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteTemplateFolder(\n  action: DeleteTemplateFolderAction,\n) {\n  const {\n    templateId,\n    folderId\n  } = action.payload;\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: 'Deleting Folder' }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'deleteDirectoryTemplateFile',\n      params: {\n        directoryTemplateId: templateId,\n        linkedFileId: folderId\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const deletedFolder = immuData.getIn(['payload', 'account', 'file', 0]);\n    if (deletedFolder == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // if delete folder succeeded then load the template again\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      yield put(new GetAttachmentFolderTemplateWithFoldersAction({ directoryTemplateId: templateId }));\n    }\n  } else {\n    console.error('delete template folder failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setUserDefaultAttachmentFolderTemplate(\n  action: SetUserDefaultAttachmentFolderTemplateAction,\n) {\n  const {\n    templateId\n  } = action.payload;\n  // if no template id, then we unset to no default\n  const endpoint = templateId ? 'setDefaultUserDirectoryTemplate' : 'unsetDefaultUserDirectoryTemplate';\n  const body = templateId ? { templateId } : {};\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint,\n      params: {\n        type: 'project'\n      },\n      body\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const response = immuData.getIn(['payload', 'account', 'defaultTemplate']) || immuData.getIn(['payload', 'account', 'defaultType']);\n    if (response == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetDefaultAttachmentFolderTemplateAction({ visibilityLevel: 'user' }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:attachmentFoldersTemplate.myDefaultSaved'),\n        severity: 'success'\n      }));\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:attachmentFoldersTemplate.myDefaultSaveFailed'),\n      severity: 'error'\n    }));\n    console.error('set user default template failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setFirmDefaultAttachmentFolderTemplate(\n  action: SetFirmDefaultAttachmentFolderTemplateAction,\n) {\n  const {\n    templateId\n  } = action.payload;\n  // if no template id, then we unset to no default\n  const endpoint = templateId ? 'setDefaultFirmDirectoryTemplate' : 'unsetDefaultFirmDirectoryTemplate';\n  const body = templateId ? { templateId } : {};\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint,\n      params: {\n        type: 'project'\n      },\n      body\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const response = immuData.getIn(['payload', 'account', 'defaultTemplate']) || immuData.getIn(['payload', 'account', 'defaultType']);\n    if (response == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetDefaultAttachmentFolderTemplateAction({ visibilityLevel: 'firm' }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:attachmentFoldersTemplate.firmDefaultSaved'),\n        severity: 'success'\n      }));\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:attachmentFoldersTemplate.firmDefaultSaveFailed'),\n      severity: 'error'\n    }));\n    console.error('set firm default template failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getDefaultAttachmentFolderTemplate(\n  action: GetDefaultAttachmentFolderTemplateAction,\n) {\n  const { visibilityLevel } = action.payload;\n  const endpoint = visibilityLevel === DEFAULT_ATTACHMENT_TEMPLATE_VISIBILITY_LEVEL.FIRM ? 'getDefaultFirmDirectoryTemplate' : 'getDefaultUserDirectoryTemplate';\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint,\n      params: {\n        type: 'project'\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const defaultTemplate = immuData.getIn(['payload', 'account', 'defaultTemplate']);\n    if (defaultTemplate == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetDefaultAttachmentFolderTemplateSucceededAction({ visibilityLevel, defaultTemplate }));\n    }\n  } else {\n    // if no default set, it return 404\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    if (errorCode === 404 && errorMessage === 'No resource with provided id found') {\n      yield put(new GetDefaultAttachmentFolderTemplateSucceededAction({ visibilityLevel, defaultTemplate: fromJS({}) }));\n    } else {\n      console.error('get default template failed', { err }); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getSearchMode(action: GetSearchMode) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getProductSearchParameters',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    yield put(new GetSearchModeSucceed({\n      searchMode: immutableData.getIn(['payload', 'account', 'preference'])\n    }));\n  } else {\n    console.error('get search mode failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setSearchMode(action: SetSearchMode) {\n  const { searchMode } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateProductSearchParameters',\n      body: {\n        preference: searchMode,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    yield put(new GetSearchModeSucceed({\n      searchMode: immutableData.getIn(['payload', 'account', 'preference'])\n    }));\n  } else {\n    console.error('get search mode failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getDefaultCustomEmail() {\n  const [defaultCustomEmailResponse, useDefaultCustomEmailResponse] = yield all([\n    call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getPreference',\n        body: {\n          preference: 'defaultCustomEmail',\n          userType: 'user',\n        }\n      }\n    })),\n    call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'getPreference',\n        body: {\n          preference: 'useDefaultCustomEmail',\n          userType: 'user',\n        }\n      }\n    }))\n  ]);\n  if (defaultCustomEmailResponse.data && useDefaultCustomEmailResponse.data) {\n    yield put(new GetDefaultCustomEmailSucceed({\n      defaultCustomEmail: fromJS(defaultCustomEmailResponse.data).getIn(['payload', 'account', 'preference', 'defaultCustomEmail']),\n      useDefaultCustomEmail: fromJS(useDefaultCustomEmailResponse.data).getIn(['payload', 'account', 'preference', 'useDefaultCustomEmail'])\n    }));\n  } else {\n    const err = defaultCustomEmailResponse.err || useDefaultCustomEmailResponse.err;\n    yield put(new GetDefaultCustomEmailFailed(err));\n    console.error('get default customer email failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* setUseDefaultCustomEmail(action) {\n  const {\n    payload = false\n  } = action as SetUseDefaultCustomEmail;\n  yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      body: {\n        preference: 'useDefaultCustomEmail',\n        userType: 'user',\n        useDefaultCustomEmail: payload,\n      }\n    }\n  }));\n}\nfunction* setDefaultCustomEmail(action) {\n  const {\n    payload: {\n      email,\n      onSuccess\n    }\n  } = action as SetDefaultCustomEmail;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      body: {\n        preference: 'defaultCustomEmail',\n        userType: 'user',\n        email,\n      }\n    }\n  }));\n  if (data) {\n    onSuccess?.();\n  } else {\n    console.error('set default customer email failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* exportUsers(action: ExportUsersAction) {\n  const { filters, options, queries } = action.payload;\n  const { data, error } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getUsersListInCsv',\n      body: {\n        filters,\n        options,\n      },\n      queries: queries?.toJS()\n    }\n  }));\n  if (data) {\n    downloadBlob(data, 'users.csv', 'text/csv');\n  } else {\n    console.error('export users failed', { error }); // tslint:disable-line\n  }\n}\n\nexport function* bulkUploadUsers(\n  action: BulkUploadUsers,\n) {\n  const formValue = yield select(getFormValues(BULK_IMPORT_USERS_FORM));\n  const file: File = formValue.getIn(['file', 0]);\n\n  const fileUploadUrl = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'file',\n        endpoint: 'uploadFile',\n        urlOnly: true,\n        withToken: true,\n        withAppId: true\n      }\n    ]\n  }));\n\n  if (file) {\n    const uploadedFile: IMap<FileServiceFile> = yield call(uploadFile, fileUploadUrl.data, file);\n    yield put(new SetUploadUsersProgress({\n      percentage: 75,\n      status: 'processing'\n    }));\n\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: any\n    } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'account',\n        endpoint: 'bulkImportUsers',\n        body: {\n          fileId: uploadedFile.get('id')\n        }\n      }\n    }));\n\n    if (data) {\n      const immutableData = fromJS(data);\n      const importData = immutableData.getIn(['payload', 'account', 'bulkimportusers', 0]);\n      const printId: string = importData.get('id');\n      yield put(new SetUploadUsersProgress({\n        percentage: 75,\n        status: 'processing'\n      }));\n      yield call(pollPrint, new PollPrintAction({\n        printId,\n        type: importData.get('type')\n      }));\n    } else {\n      yield put(new SetUploadUsersProgress({\n        percentage: 100,\n        status: 'failed'\n      }));\n      console.error('bulkExportProducts error', { err }); // tslint:disable-line\n      const errorCode = err.payload.error.code;\n      const errorMessage = err.payload.error.error;\n      if (errorCode && errorMessage) {\n        yield put(new SetSnackbarOpenAction({\n          message: `Error: ${errorCode} ${errorMessage}`,\n          severity: 'error',\n          anchorOrigin: {\n            horizontal: 'center',\n            vertical: 'bottom'\n          }\n        }));\n      }\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:importPricing.fileNotFoundError'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'center',\n        vertical: 'bottom'\n      }\n    }));\n  }\n}\n\nfunction uploadFile(url: string, file: File): Promise<FileServiceFile> {\n  const {\n    dispatch\n  } = store.get('store');\n\n  return url && file && new Promise((resolve, reject) => {\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    data.append('file', file);\n    data.append('type', 'file');\n\n    req.open('POST', url);\n\n    req.onloadstart = (e) => {\n      dispatch(new SetUploadUsersProgress({\n        percentage: 0,\n        status: 'start'\n      }));\n    };\n\n    req.upload.addEventListener('progress', (event) => {\n      const percentage = Math.round((event.loaded / event.total) * 100) / 4;\n      dispatch(new SetUploadUsersProgress({\n        percentage,\n        status: 'scanning'\n      }));\n    });\n\n    req.addEventListener('loadend', (e) => {\n      const { payload, error } = readUploadResponse(req);\n      if (error) {\n        console.error('error uploading file', error); //tslint:disable-line\n        reject(error);\n        dispatch(new SetUploadUsersProgress({\n          percentage: 100,\n          status: 'failed'\n        }));\n      } else {\n        resolve(fromJS(payload.file.files[0]));\n        dispatch(new SetUploadUsersProgress({\n          percentage: 50,\n          status: 'uploaded'\n        }));\n      }\n    });\n    req.send(data);\n  });\n}\n\nexport function* getDiscountPriority(\n  action: GetDiscountPriorityAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: 'firm',\n        preference: 'discountPriority',\n      },\n    }\n  }));\n  let discountPriority = 'customer' as 'customer' | 'manufacturer';\n  if (data) {\n    const immuData = fromJS(data);\n    const rawDiscountPriority = immuData.getIn(['payload', 'account', 'preference', 'discountPriority']);\n    discountPriority = (rawDiscountPriority === 'customer' || rawDiscountPriority === 'manufacturer') ? rawDiscountPriority : 'customer';\n    yield put(new GetDiscountPrioritySucceededAction({ discountPriority }));\n  } else {\n    console.error('getDiscountPriority error', { err }); // tslint:disable-line\n  }\n  return {\n    discountPriority,\n    data,\n    err,\n  };\n}\n\nexport function* getQuoteDiscountList(\n  action: GetQuoteDiscountListAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: QUOTE_DISCOUNT_LIST_USER_TYPE,\n        preference: QUOTE_DISCOUNT_LIST_PREFERENCE,\n      },\n    }\n  }));\n  let quoteDiscountList: List<IMap<IQuoteDiscountListItem>> = List();\n  if (data) {\n    const rawQuoteDiscountList = fromJS(data).getIn(['payload', 'account', 'preference', QUOTE_DISCOUNT_LIST_PREFERENCE]);\n    // an office that has never saved the preference gets nothing back, which means no defaults\n    quoteDiscountList = List.isList(rawQuoteDiscountList) ? rawQuoteDiscountList : List();\n    yield put(new GetQuoteDiscountListSucceededAction({ quoteDiscountList }));\n  } else {\n    console.error('getQuoteDiscountList error', { err }); // tslint:disable-line\n  }\n  return {\n    quoteDiscountList,\n    data,\n    err,\n  };\n}\n\nexport function* getShopDrawingColor(\n  action: GetShopDrawingColorAction,\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: 'firm',\n        preference: 'shopDrawing',\n      },\n    }\n  }));\n  let shopDrawingColor;\n  if (data) {\n    const immuData = fromJS(data);\n    shopDrawingColor = immuData.getIn(['payload', 'account', 'preference', 'shopDrawing', 'color']);\n    yield put(new GetShopDrawingColorSucceededAction({ shopDrawingColor }));\n  } else {\n    console.error('getShopDrawingColor error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:shopDrawingColor.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  return {\n    shopDrawingColor,\n    data,\n    err,\n  };\n}\n\nexport function* searchManufacturerDiscounts(\n  action: SearchManufacturerDiscountsAction,\n) {\n  yield put(new SetIsSearchingManufacturerDiscountsAction({ isSearchingManufacturerDiscounts: true }));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchManufacturerDiscounts',\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const manufacturerDiscounts: List<IMap<any>> = immuData.getIn(['payload', 'account', 'discount']) || List();\n    const sortedManufacturerDiscounts = manufacturerDiscounts\n      .map((md) => {\n        // Sort regions within each manufacturer group by region label\n        const regions = md.get('regions') as List<IMap<any>> || List();\n        const sortedRegions = regions\n          .map((region) => {\n            // Sort types within each region by type name\n            const types = region.get('types') as List<IMap<any>> || List();\n            const sortedTypes = types.sortBy((t) => (t.get('type') || '').toLowerCase());\n            return region.set('types', sortedTypes);\n          })\n          .sortBy((r) => ((r.getIn(['region', 'label']) as string) || '').toLowerCase());\n        return md.set('regions', sortedRegions);\n      })\n      .sortBy((md) => ((md.getIn(['manufacturer', 'label']) as string) || '').toLowerCase());\n    yield put(new SearchManufacturerDiscountsSucceededAction({ manufacturerDiscounts: sortedManufacturerDiscounts }));\n  } else {\n    console.error('searchManufacturerDiscounts error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:discountManagement.fetchFailedMessage'),\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsSearchingManufacturerDiscountsAction({ isSearchingManufacturerDiscounts: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* potentiallyFetchManufacturerDiscountsAndPriority(\n  action: PotentiallyFetchManufacturerDiscountsAndPriorityAction,\n) {\n  const hasFetchedDiscountPriority = yield select(makeSelectHasFetchedDiscountPriority());\n  if (!hasFetchedDiscountPriority) {\n    yield call(getDiscountPriority, new GetDiscountPriorityAction());\n  }\n\n  const hasAlreadyFetchedManufacturerDiscounts = yield select(makeSelectHasAlreadyFetchedManufacturerDiscounts());\n  if (!hasAlreadyFetchedManufacturerDiscounts) {\n    yield call(searchManufacturerDiscounts, new SearchManufacturerDiscountsAction());\n  }\n}\n\nexport function* getDefaultProjectVisibility(\n  action: GetDefaultProjectVisibilityAction,\n) {\n  const onSuccess = action.payload?.onSuccess;\n  const onFail = action.payload?.onFail;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getPreference',\n      params: {\n        userType: 'firm',\n        preference: 'defaultProjectVisibility',\n      },\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const raw = immuData.getIn(['payload', 'account', 'preference', 'defaultProjectVisibility']);\n    const defaultProjectVisibility = (raw === ProjectVisibility.PUBLIC || raw === ProjectVisibility.FIRM_ONLY || raw === ProjectVisibility.OFFICE_ONLY) ? raw : ProjectVisibility.PUBLIC;\n    yield put(new GetDefaultProjectVisibilitySucceededAction({ defaultProjectVisibility }));\n    if (onSuccess) {\n      onSuccess();\n    }\n  } else {\n    console.error('getDefaultProjectVisibility error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectVisibilitySetting.fetchFailed'),\n      severity: 'error',\n    }));\n    if (onFail) {\n      onFail(err);\n    }\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* setDefaultProjectVisibility(\n  action: SetDefaultProjectVisibilityAction,\n) {\n  const { defaultProjectVisibility } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'changePreference',\n      params: {\n        userType: 'firm',\n        preference: 'defaultProjectVisibility',\n      },\n      body: { defaultProjectVisibility },\n    },\n  }));\n  if (data) {\n    yield put(new GetDefaultProjectVisibilitySucceededAction({ defaultProjectVisibility }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectVisibilitySetting.updated'),\n      severity: 'success',\n    }));\n  } else {\n    console.error('setDefaultProjectVisibility error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:projectVisibilitySetting.updateFailed'),\n      severity: 'error',\n    }));\n  }\n}\n\nfunction* getFirmEmailSetting(action: GetFirmEmailSettingAction) {\n  try {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    const { firmId } = action.payload;\n    const result = yield call(AccountServiceApi.getEmailSetting, env, appId, firmId);\n    yield put(new GetFirmEmailSettingSucceededAction(result));\n  } catch (error) {\n    console.error('getFirmEmailSetting error', error); // tslint:disable-line\n  }\n}","import React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar FormControlContext = React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n  FormControlContext.displayName = 'FormControlContext';\n}\n\nexport function useFormControl() {\n  return React.useContext(FormControlContext);\n}\nexport default FormControlContext;","import React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar ListContext = React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n  ListContext.displayName = 'ListContext';\n}\n\nexport default ListContext;","import * as React from 'react';\n\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport {\n  Card,\n  CardHeader,\n  CardContent,\n  Collapse,\n  IconButton,\n  Theme,\n} from '@material-ui/core';\nimport { CardHeaderProps as CardHeaderPropsType } from '@material-ui/core/CardHeader';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nconst styles = (theme: Theme): StyleRules => ({\n  expand: {\n    transform: 'rotate(0deg)',\n    transition: theme.transitions.create('transform', {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: 'rotate(180deg)',\n  },\n});\n\ninterface ICollapsibleCardComponentProps {\n  CardHeaderProps?: CardHeaderPropsType;\n  title?: string;\n}\n\ninterface ICollapsibleCardProps extends ICollapsibleCardComponentProps {\n\n}\n\ntype CollapsibleCardProps = ICollapsibleCardProps & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface ICollapsibleCardState {\n  expanded: boolean;\n}\n\n\nclass CollapsibleCard extends React.Component<CollapsibleCardProps, ICollapsibleCardState> { // eslint-disable-line react/prefer-stateless-function\n\n  public state = { expanded: false }; // eslint-disable-line no-undef\n\n  public handleExpandClick = () => { // eslint-disable-line no-undef\n    this.setState({ expanded: !this.state.expanded });\n  }\n\n  public render() {\n    const { classes, children, CardHeaderProps } = this.props;\n\n    return (\n      <Card>\n        <CardHeader\n          action={\n            <IconButton\n              className={classnames(classes.expand, {\n                [classes.expandOpen]: this.state.expanded,\n              })}\n              onClick={this.handleExpandClick}\n              aria-expanded={this.state.expanded}\n              aria-label='Show more'\n            >\n              <ExpandMoreIcon />\n            </IconButton>\n          }\n          {...CardHeaderProps}\n        />\n        <Collapse in={this.state.expanded} timeout='auto' unmountOnExit={true}>\n          <CardContent>\n            {children}\n          </CardContent>\n        </Collapse>\n      </Card>\n    );\n  }\n}\n\nexport default withStyles(styles)(CollapsibleCard);\n","import {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport { Filter, Package, Product, Option } from '../../models';\nimport { Map, List } from 'immutable';\nexport default {};\n\nexport enum PackageActionTypes {\n  GET_LIST_PACKAGE = 'GET_LIST_PACKAGE',\n  GET_LIST_PACKAGE_LOADING = 'GET_LIST_PACKAGE_LOADING',\n  GET_LIST_PACKAGE_SUCCEEDED = 'GET_LIST_PACKAGE_SUCCEEDED',\n  CREATE_PACKAGE = 'CREATE_PACKAGE',\n  CREATE_PACKAGE_AND_ADD_TO_QUOTE = 'CREATE_PACKAGE_AND_ADD_TO_QUOTE',\n  GET_PACKAGE_WITH_PRODUCTS = 'GET_PACKAGE_WITH_PRODUCTS',\n  GET_PACKAGE_WITH_PRODUCTS_SUCCEEDED = 'GET_PACKAGE_WITH_PRODUCTS_SUCCEEDED',\n  DELETE_PACKAGE = 'DELETE_PACKAGE',\n  DELETE_PACKAGE_SUCCEEDED = 'DELETE_PACKAGE_SUCCEEDED',\n  SEARCH_FIRM_PACKAGE = 'SEARCH_FIRM_PACKAGE',\n  SEARCH_FIRM_PACKAGE_SUCCEEDED = 'SEARCH_FIRM_PACKAGE_SUCCEEDED',\n  UPDATE_QUOTE_ROW_WITH_PACKAGE = 'UPDATE_QUOTE_ROW_WITH_PACKAGE',\n  EDIT_PACKAGE = 'EDIT_PACKAGE',\n  EDIT_PACKAGE_AND_ADD_TO_QUOTE = 'EDIT_PACKAGE_AND_ADD_TO_QUOTE',\n  QUICK_SEARCH_FIRM_PACKAGE = 'QUICK_SEARCH_FIRM_PACKAGE',\n  QUICK_SEARCH_FIRM_PACKAGE_SUCCEEDED = 'QUICK_SEARCH_FIRM_PACKAGE_SUCCEEDED',\n  DELETE_PACKAGE_AND_SEARCH_FIRM_PACKAGE = 'DELETE_PACKAGE_AND_SEARCH_FIRM_PACKAGE',\n  CHECKING_PRODUCT_IN_PACKAGES = 'CHECKING_PRODUCT_IN_PACKAGES',\n  FETCHING_FIRM_PACKAGES = 'FETCHING_FIRM_PACKAGES',\n}\n\nexport class GetPackageWithProductsAction implements IAction {\n  public readonly type = PackageActionTypes.GET_PACKAGE_WITH_PRODUCTS;\n\n  constructor (\n    public payload: {\n      packageId: number,\n      resolve: any,\n      reject: any,\n    }\n  ) {}\n}\n\nexport class GetPackageWithProductsSucceededAction implements IAction {\n  public readonly type = PackageActionTypes.GET_PACKAGE_WITH_PRODUCTS_SUCCEEDED;\n\n  constructor (\n    public payload: List<IMap<Product>>\n  ) {}\n}\n\nexport class SearchPackagesAction implements IAction {\n  public readonly type = PackageActionTypes.GET_LIST_PACKAGE;\n\n  constructor (\n    public payload?: Filter\n  ) {}\n}\n\nexport class SearchPackagesLoadingAction implements IAction {\n  public readonly type = PackageActionTypes.GET_LIST_PACKAGE_LOADING;\n\n  constructor (\n    public payload: boolean\n  ) {}\n}\n\nexport class SearchPackagesSucceededAction implements IAction {\n  public readonly type = PackageActionTypes.GET_LIST_PACKAGE_SUCCEEDED;\n\n  constructor (\n    public payload: Map<string, IMap<any>>\n  ) {}\n}\n\nexport class CreatePackageAction implements IAction {\n  public readonly type = PackageActionTypes.CREATE_PACKAGE;\n\n  constructor(\n    public payload: {\n      createPackageData: IMap<Partial<Package>>,\n      closeDrawer?: boolean,\n    }\n  ) {}\n}\n\nexport class CreatePackageAndAddToQuoteAction implements IAction {\n  public readonly type = PackageActionTypes.CREATE_PACKAGE_AND_ADD_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      createPackageData: IMap<Partial<Package>>,\n      closeDrawer?: boolean,\n      addToQuote?: boolean,\n    }\n  ) {}\n}\n\nexport class UpdateQuoteRowWithPackageAction implements IAction {\n  public readonly type = PackageActionTypes.UPDATE_QUOTE_ROW_WITH_PACKAGE;\n\n  constructor(\n    public payload: {\n      packageId: number,\n      packageData: IMap<Package>,\n      isNewPackage?: boolean,\n      addActionCallback?: () => void,\n    }\n  ) {}\n}\n\nexport class EditPackageAction implements IAction {\n  public readonly type = PackageActionTypes.EDIT_PACKAGE;\n\n  constructor(\n    public payload: {\n      packageId?: number,\n      createPackageData: IMap<Partial<Package>>,\n      closeDrawer?: boolean,\n    }\n  ) {}\n}\n\nexport class EditPackageAndAddToQuoteAction implements IAction {\n  public readonly type = PackageActionTypes.EDIT_PACKAGE_AND_ADD_TO_QUOTE;\n\n  constructor(\n    public payload: {\n      packageId?: number,\n      createPackageData: IMap<Partial<Package>>,\n      closeDrawer?: boolean,\n      updateQuoteProductRow?: boolean,\n    }\n  ) {}\n}\n\nexport class DeletePackageAction implements IAction {\n  public readonly type = PackageActionTypes.DELETE_PACKAGE;\n\n  constructor(\n    public payload: {\n      packageId: number;\n    }\n  ) {}\n}\n\nexport class DeletePackageSucceededAction implements IAction {\n  public readonly type = PackageActionTypes.DELETE_PACKAGE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      packageId: number;\n    }\n  ) {}\n}\n\nexport class SearchFirmPackagesAction implements IAction {\n  public readonly type = PackageActionTypes.SEARCH_FIRM_PACKAGE;\n\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Package>,\n      sharedProduct?: boolean,\n    }\n  ) { }\n}\n\nexport class SearchFirmPackagesSucceeded implements IAction {\n  public readonly type = PackageActionTypes.SEARCH_FIRM_PACKAGE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Package>>,\n      hasNextPage: boolean,\n      count?: number\n    }\n  ) { }\n}\n\nexport class QuickSearchFirmPackagesAction implements IAction {\n  public readonly type = PackageActionTypes.QUICK_SEARCH_FIRM_PACKAGE;\n\n  constructor(\n    public payload: {\n      filters?: Filter,\n      options?: Option<Package>,\n      sharedProduct?: boolean,\n    }\n  ) { }\n}\n\nexport class QuickSearchFirmPackagesSucceeded implements IAction {\n  public readonly type = PackageActionTypes.QUICK_SEARCH_FIRM_PACKAGE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      results: List<IMap<Package>>,\n      hasNextPage: boolean,\n      count?: number\n    }\n  ) { }\n}\n\n\nexport class DeletePackageAndSearchFirmPackagesAction implements IAction {\n  public readonly type = PackageActionTypes.DELETE_PACKAGE_AND_SEARCH_FIRM_PACKAGE;\n\n  constructor(\n    public payload: {\n      packageId: number;\n      filters?: Filter,\n      options?: Option<Package>\n    }\n  ) { }\n}\n\nexport class CheckingProductInPackages implements IAction {\n  public readonly type = PackageActionTypes.CHECKING_PRODUCT_IN_PACKAGES;\n\n  constructor(\n    public payload: boolean\n  ) { }\n}\n\nexport class IsFetchingFirmPackages implements IAction {\n  public readonly type = PackageActionTypes.FETCHING_FIRM_PACKAGES;\n}\n","import * as React from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Grid,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { CancelPublishSeriesDraftPollingAction, PublishSeriesDraftAction } from '../../../modules/PimModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectIsPublishing } from '../../../modules/PimModule/selectors';\nimport { ControlledModal } from '../../../components';\nimport { ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { Filter, Option, Series } from '../../../models';\nimport { makeSelectUserIsAtsUser } from '../../../modules/AtsModule/selectors';\nimport { constructFilters } from '..';\n\nexport const PUBLISH_DIALOG_ID = 'PUBLISH_DIALOG';\n\ninterface IPublishDialogContentComponentProps {\n  series: IMap<Series>;\n  redirectToDetail?: boolean;\n  searchTerm?: string;\n  filters?: Filter;\n  options?: Option<Series>;\n}\n\ninterface IPublishDialogContentProps extends IPublishDialogContentComponentProps {\n  isPublishing: boolean;\n  overlyComponentProp: any;\n  dispatch: (s: IAction) => void;\n  closeDialog: () => void;\n  publishSeriesDraft: (series: IMap<Series>, redirectToDetail?: boolean, filters?: Filter, options?: Option<Series>) => void;\n}\n\ntype IPublishDialogContent = IPublishDialogContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    marginRight: theme.spacing() * 4,\n  },\n  root: {\n    width: 488\n  }\n});\nconst PublishDialog = (PublishDialogProps: IPublishDialogContent) => {\n  const {\n    series,\n    classes,\n    isPublishing,\n    redirectToDetail,\n    searchTerm = '',\n    filters,\n    options,\n    closeDialog,\n    publishSeriesDraft,\n    t\n  } = PublishDialogProps;\n\n  const userHasAtsUserAcl = useSelector(makeSelectUserIsAtsUser());\n\n  const handlePublish = () => {\n    const completedFilters: any = constructFilters(filters, searchTerm, !userHasAtsUserAcl);\n    publishSeriesDraft(series, redirectToDetail, completedFilters, options);\n  };\n\n  return (\n    <ControlledModal\n      localKey={PUBLISH_DIALOG_ID}\n      classes={{\n        paper: classes.root\n      }}\n      handleClose={closeDialog}\n    >\n      {\n        isPublishing\n          ? (\n            <DialogContent>\n              <Grid\n                container={true}\n                direction='column'\n                justify='center'\n                alignItems='center'\n              >\n                <CircularProgress />\n                <DialogContentText id='alert-dialog-loading' variant='h6'>\n                  { t('publishSeriesDraftDialog.publishing') }\n                </DialogContentText>\n              </Grid>\n            </DialogContent>\n          )\n          : <>\n              <DialogContent>\n                <DialogContentText id='alert-dialog-description' variant='h6'>\n                  { t('publishSeriesDraftDialog.dialogQuery') }\n                </DialogContentText>\n                <DialogContentText id='alert-dialog-description' variant='body2'>\n                  { t('publishSeriesDraftDialog.dialogQueryDetail') }\n                </DialogContentText>\n              </DialogContent>\n              <DialogActions>\n                <Button\n                  onClick={handlePublish}\n                  color='primary'\n                  className={classes.button}\n                >\n                  { t('publishSeriesDraftDialog.confirm') }\n                </Button>\n\n                <Button\n                  onClick={closeDialog}\n                  color='primary'\n                  className={classes.button}\n                >\n                  { t('formButtons.cancel') }\n                </Button>\n              </DialogActions>\n            </>\n      }\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state: any) => createStructuredSelector({\n  isPublishing: makeSelectIsPublishing()\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    publishSeriesDraft: (series: IMap<Series>, redirectToDetail?: boolean, filters?: Filter, options?: Option<Series>) => {\n      dispatch(new PublishSeriesDraftAction({\n        dispatch,\n        series,\n        redirectToDetail,\n        filters,\n        options\n      }));\n    },\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: PUBLISH_DIALOG_ID,\n        open: false\n      }));\n      // dispatch(new CancelPublishSeriesDraftPollingAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IPublishDialogContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(PublishDialog);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19.51 3.08L3.08 19.51c.09.34.27.65.51.9.25.24.56.42.9.51L20.93 4.49c-.19-.69-.73-1.23-1.42-1.41zM11.88 3L3 11.88v2.83L14.71 3h-2.83zM5 3c-1.1 0-2 .9-2 2v2l4-4H5zm14 18c.55 0 1.05-.22 1.41-.59.37-.36.59-.86.59-1.41v-2l-4 4h2zm-9.71 0h2.83L21 12.12V9.29L9.29 21z\"\n}), 'Texture');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\"\n}), 'AddCircle');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27-7.38 5.74zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16z\"\n}), 'Layers');\n\nexports.default = _default;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  change,\n  BaseFieldProps,\n} from 'redux-form';\n\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../../../components/FieldTextField';\nimport FieldAutoSuggest, {IFieldAutoSuggestComponentProps} from '../../../components/FieldAutoSuggest';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n  MenuItem,\n  Button,\n} from '@material-ui/core';\nimport {\n  required,\n  isNotEmpty,\n} from '../../../validators';\nimport {\n  TrackFormSubmitFailedAction,\n  TrackFormSubmitSucceededAction,\n} from '../../../modules/AccountModule/actions';\nimport {\n  GetProvinceAction,\n  GetCountriesAction,\n  GetCityAction,\n  GetCountryAdminDivisionAction,\n} from '../../../modules/ProjectLocationModule/actions';\nimport {\n  makeSelectCountries,\n  makeSelectProvinces,\n  makeSelectCities,\n  makeSelectDivisionName,\n} from '../../../modules/ProjectLocationModule/selectors';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {ListItem, Project} from '../../../models';\nimport { createStructuredSelector } from 'reselect';\nimport { GetFirmTypesAction } from '../../../modules/AtsModule/actions';\nimport { makeSelectFirmTypes } from '../../../modules/AtsModule/selectors';\nimport FieldSelect, { IFieldSelectComponentProps } from '../../../components/FieldSelect';\nimport { AMPLITUDE_EVENT, SIGNUP_PATH } from '../../../constants';\nimport { push } from 'connected-react-router';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  dropdown: {\n    padding: theme.spacing(1.5),\n  },\n  nextButton: {\n    marginTop: theme.spacing(4),\n  },\n  button: {\n    color: theme.palette.common.white,\n  }\n});\n\ninterface IProjectFormComponentProps {\n  data?: IMap<Project>;\n  form?: string;\n  nextStep: () => void;\n  renderActionButtons: () => React.ReactNode;\n}\n\ninterface IProjectForm extends IProjectFormComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  initialValues: IMap<Project>;\n  editMode: boolean;\n  forProjectTracker: boolean;\n  getFirmTypes: () => void;\n  firmTypes: List<IMap<ListItem>>;\n}\nexport const SIGN_UP_ORG_FORM_NAME = 'SignUpOrganizationForm';\ntype SignUpOrganizationProps = WithTranslation & IProjectForm & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nclass SignUpOrganizationForm extends React.PureComponent<SignUpOrganizationProps, {}> {\n  public componentDidMount() {\n    const {\n      getCountries,\n      formValues,\n      getFirmTypes,\n    } = this.props;\n\n    getCountries();\n    getFirmTypes();\n\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (countryId != null) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (provinceId != null) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      amplitudeData,\n    } = this.props;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(_countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }))\n      dispatch(change(form, 'location.country', countries.find((country) => {\n        return country.get('id') === _countryId;\n      })));\n\n      amplitude.logEvent(AMPLITUDE_EVENT.step2Country, amplitudeData());\n    } else {\n      dispatch(change(form, 'countryId', ''));\n      dispatch(change(form, 'location.country', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n      amplitudeData,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(form, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n\n      amplitude.logEvent(AMPLITUDE_EVENT.step2StateProvince, amplitudeData());\n    } else {\n      dispatch(change(form, 'provinceId', ''));\n      dispatch(change(form, 'location.province', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n      amplitudeData,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n\n      amplitude.logEvent(AMPLITUDE_EVENT.step2City, amplitudeData());\n    } else {\n      dispatch(change(form, 'cityId', ''));\n      dispatch(change(form, 'location.city', null));\n    }\n  }\n\n  public onSubmit = (values) => {\n    const {\n      nextStep,\n    } = this.props;\n\n    nextStep();\n  }\n\n  public onBlurTrack = (eventName: AMPLITUDE_EVENT) => (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n    const { amplitudeData } = this.props;\n    if (e.target.value) {\n      amplitude.logEvent(eventName, amplitudeData());\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      t,\n      countries,\n      provinces,\n      cities,\n      classes,\n      formValues,\n      firmTypes,\n      amplitudeData,\n      renderActionButtons\n    } = this.props;\n\n    const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'id']) : -1;\n    const countryId: number = _countryId != null ? Number(_countryId) : -1;\n\n    return (\n      <form\n        onSubmit={handleSubmit(this.onSubmit)}\n        style={{\n          padding: '24px 0',\n        }}\n      >\n        <Grid\n          container={true}\n          justify='flex-start'\n          alignItems='center'\n          spacing={3}\n        >\n          <Grid\n            container={true}\n            item={true}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('login.companyName'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                  onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step2CompanyName),\n                }\n              }}\n              name='companyName'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            container={true}\n            item={true}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('login.companyAddress'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                  onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step2CompanyAddress),\n                }\n              }}\n              name='address1'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            lg={3}\n            md={6}\n            xs={12}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={countryName || t('placeholders.CountrySelection')}\n              props={{\n                label: t('createNewProject.Country'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: countries.toJS(),\n                  renderMissingData: (value: any) => `Loading`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCountry,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.country.id'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldAutoSuggest}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            lg={3}\n            md={6}\n            xs={12}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={provinceName || t('placeholders.ProvinceSelection')}\n              props={{\n                label: t('createNewProject.StateProvince'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                autosuggestProps:{\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: provinces.toJS(),\n                  renderMissingData: (value: any) => `Loading`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps:{\n                  onChange: this.selectProvince,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.province.id'\n              component={FieldAutoSuggest}\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            lg={3}\n            md={6}\n            xs={12}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={cityName || t('placeholders.CitySelection')}\n              props={{\n                label: t('createNewProject.City'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: cities.toJS(),\n                  renderMissingData: (value: any) => `Loading`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return value.length !== 0;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCity,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.city.id'\n              component={FieldAutoSuggest}\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            lg={3}\n            md={6}\n            xs={12}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewProject.ZipPostalCode'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                  onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step2PostalCode),\n                },\n              }}\n              name='postalZip'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            container={true}\n            className={classes.dropdown}\n          >\n            <Field<BaseFieldProps<IFieldSelectComponentProps>>\n              props={{\n                label: t('login.organizationType'),\n                require: true,\n                excludeEmpty: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  onChange: () => {\n                    amplitude.logEvent(AMPLITUDE_EVENT.step2OrganizationType, amplitudeData());\n                  },\n                }\n              }}\n              name='firmTypeId'\n              validate={[required]}\n              component={FieldSelect}\n            >\n              {firmTypes && firmTypes.map((firm) => {\n                return <MenuItem key={firm.get('id')} value={firm.get('id')}>{firm.get('value')}</MenuItem>;\n              })}\n            </Field>\n          </Grid>\n        </Grid>\n        <Grid\n          container={true}\n          className={classes.nextButton}\n        >\n          {renderActionButtons()}\n        </Grid>\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IProjectFormComponentProps) => {\n\n  const form = ownProps.form != null\n    ? ownProps.form\n    : SIGN_UP_ORG_FORM_NAME;\n\n  return {\n    form,\n    ...createStructuredSelector({\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      divisionName: makeSelectDivisionName(),\n      formValues: getFormValues(form),\n      firmTypes: makeSelectFirmTypes(),\n    })(state)\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getFirmTypes: () => {\n      dispatch(new GetFirmTypesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectFormComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: false,\n    onSubmitFail: (errors, dispatch) => dispatch(new TrackFormSubmitFailedAction({\n      errors,\n      eventName: AMPLITUDE_EVENT.step2Final,\n    })),\n    onSubmitSuccess: (result, dispatch) => dispatch(new TrackFormSubmitSucceededAction({\n      eventName: AMPLITUDE_EVENT.step2Final,\n    })),\n  }),\n  withAmplitudeData,\n)(SignUpOrganizationForm);\n","export enum SpecModalFormVariant {\n  WITH_EDIT_MODE = 'WITH_EDIT_MODE',\n  MASTER_MODE = 'MASTER_MODE',\n  TEMPLATE_MODE = 'TEMPLATE_MODE'\n}","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\n\nexport default {};\n\nexport enum ContactTypes {\n  GET_CONTACTS_LIST = 'GET_CONTACTS_LIST',\n  GET_CONTACTS_LIST_SUCCESS = 'GET_CONTACTS_LIST_SUCCESS',\n  GET_CONTACTS_LIST_FAIL = 'GET_CONTACTS_LIST_FAIL',\n  SELECT_CONTACT = 'SELECT_CONTACT',\n  GET_CONTACT_PRODUCT_VISIBILITY = 'GET_CONTACT_PRODUCT_VISIBILITY',\n  GET_CONTACT_DISCOUNT_SUCCESS = 'GET_CONTACT_DISCOUNT_SUCCESS',\n  LOADING_CUSTOMER_DISCOUNT = 'LOADING_CUSTOMER_DISCOUNT',\n  SET_SELECTED_CONTACT = 'SET_SELECTED_CONTACT',\n  SET_STORED_CONTACT_DATA_ACTION = 'SET_STORED_CONTACT_DATA_ACTION'\n}\n\n// TODO: add models to replace interfaces declared here\n\ninterface IContactListResponse {\n  list: List<IMap<any>>;\n}\n\nexport class GetContactsList implements IAction {\n  public readonly type = ContactTypes.GET_CONTACTS_LIST;\n}\n\nexport class GetContactsListSuccess implements IAction {\n  public readonly type = ContactTypes.GET_CONTACTS_LIST_SUCCESS;\n\n  constructor(\n    public payload?: IContactListResponse\n  ) {\n  }\n}\n\nexport class GetContactsListFail implements IAction {\n  public readonly type = ContactTypes.GET_CONTACTS_LIST_FAIL;\n\n  constructor(\n    public payload?: {\n      error: any\n    }\n  ) {\n  }\n}\n\nexport class SelectContact implements IAction {\n  public readonly type = ContactTypes.SELECT_CONTACT;\n\n  constructor(\n    public payload: {\n      selectedContact: number,\n      toggleSnackbar?: boolean,\n    }\n  ) {\n  }\n}\n\nexport class SetSelectedContact implements IAction {\n  public readonly type = ContactTypes.SET_SELECTED_CONTACT;\n\n  constructor(\n    public payload: {\n      contactId: number;\n    }\n  ) {\n  }\n}\n\nexport class LoadingCustomerDiscountAction implements IAction {\n  public readonly type = ContactTypes.LOADING_CUSTOMER_DISCOUNT;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class GetContactDiscountSuccess implements IAction {\n  public readonly type = ContactTypes.GET_CONTACT_DISCOUNT_SUCCESS;\n\n  constructor(\n    public payload?: any\n  ) {\n  }\n}\n\nexport class GetContactProductVisibility implements IAction {\n  public readonly type = ContactTypes.GET_CONTACT_PRODUCT_VISIBILITY;\n\n  constructor(\n    public payload: number\n  ) {\n  }\n}\n\nexport class SetStoredContactDataAction implements IAction {\n  public readonly type = ContactTypes.SET_STORED_CONTACT_DATA_ACTION;\n\n  constructor(\n    public payload: {\n      data: any;\n    }\n  ) {}\n}\n","/* tslint:disable */ \nimport * as React from 'react';\nimport {\n  compose,\n  bindActionCreators,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  makeSelectSelectedProjectId,\n  makeSelectProject,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  getIn,\n} from 'immutable';\nimport {\n  GetProjectsAction,\n} from '../../modules/ProjectModule/actions';\nimport {\n  Project, Series,\n} from '../../models';\nimport {\n  IMap,\n  IMatch,\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  RouteProps, RouteComponentProps,\n} from 'react-router-dom';\nimport {\n  generatePath,\n} from 'react-router';\nimport {\n  replace,\n} from 'connected-react-router';\nimport { RouterProps } from 'react-router';\nimport { GetFirmSeriesAction, GetPimSeriesdDraftAction, SetSelectedFirmSeriesIdAction } from '../../modules/PimModule/actions';\nimport { makeSelectSelectedSeriesId } from '../../modules/ProductModule/selectors';\nimport { makeSelectSelectedFirmSeriesId, makeSelectSelectedPimSeries, makeSelectSelectedFirmSeries } from '../../modules/PimModule/selectors';\nimport { makeSelectSite, makeSelectUserIsAtsUser } from '../../modules/AtsModule/selectors';\nimport { SiteName } from '../../constants';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\n\nexport interface IWithConfiguratorSeriesId {\n  seriesId: number;\n  site: SiteName;\n  selectedId: number;\n  controlledId?: number;\n  isControlled: boolean;\n  userHasAtsUserAcl: boolean;\n  series?: IMap<Series>;\n  getSeries: (seriesId?: number) => void;\n  getSeriesDraft: (seriesId: number, onSuccess?: (series: IMap<Series>) => void, onFail?: () => void) => void;\n  setConfigSeriesId: (seriesId: number) => void;\n  dispatch: React.Dispatch<IAction>;\n}\n\nexport interface IWithConfiguratorSeriesIdOptions {\n  withConfiguratorSeries?: boolean;\n  getAll?: boolean;\n  redirectToControlled?: boolean;\n}\n\nexport type ComponentProps = {\n  seriesId?: number;\n} & Partial<RouteComponentProps>;\n\ninterface PrivateProps {\n  forwardedRef: React.RefObject<any>;\n}\n\ninterface OriginalProps {}\n\ntype Props =  OriginalProps & PrivateProps & ComponentProps;\n\nconst withConfiguratorSeriesId = ({\n  withConfiguratorSeries,\n  getAll,\n  redirectToControlled,\n}: IWithConfiguratorSeriesIdOptions = {}) => <T extends React.Component, OriginalProps>(Component: React.ComponentClass<ComponentProps>) => {\n\n  class WithConfiguratorSeriesIdInner extends React.Component<Props & IWithConfiguratorSeriesId> {\n\n    // this is only used to get data for controlled project id\n    // we assume that if we're using selected project id, the data already exists\n    public getData(id?: number) {\n      const {\n        site,\n        userHasAtsUserAcl,\n        getSeries,\n        getSeriesDraft,\n        setConfigSeriesId,\n        dispatch,\n      } = this.props;\n\n      // only get data for series if we have a controlled id ( e.g. not null ) OR if getAll option is set\n      // null id passed to getSeries will get *all* series - we want to be explicit with this\n      if (id != null || getAll) {\n        setConfigSeriesId(id);\n        if (site === SiteName.pt) {\n          getSeries(id);\n        } else {\n          const onSuccess = (series: IMap<Series>) => {\n            if (!userHasAtsUserAcl && site === SiteName.pim && series.get('brandId') === 785) {\n              dispatch(new SetSnackbarOpenAction({\n                message: 'Error - This series does not exist',\n                severity: 'error',\n              }));\n            }\n          };\n      \n          const onFail = () => {\n            dispatch(new SetSnackbarOpenAction({\n              message: 'Error - Failed to find series',\n              severity: 'error',\n            }));\n          };\n\n          getSeriesDraft(id, onSuccess, onFail);\n        }\n      }\n    }\n\n    public redirectToControlled(nextId?: number) {\n      const {\n        controlledId,\n        match,\n        seriesId: _seriesId,\n        dispatch,\n      } = this.props;\n\n      const seriesId = nextId != null ? nextId : _seriesId;\n\n      if (controlledId != null || seriesId === -1) {\n        return;\n      }\n      if (match == null) {\n        console.debug(`When using redirectToControlled option, match must not be null`, { match });\n        return;\n      }\n      if (!match.params.hasOwnProperty('seriesId')) {\n        console.debug(`When using redirectToControlled option, path [${match.path}] must contain seriesId parameter`);\n        return;\n      }\n\n      const redirectPath = generatePath(match.path, { ...match.params, seriesId });\n      dispatch(replace(redirectPath));\n    }\n\n    public componentDidMount() {\n      const {\n        controlledId,\n      } = this.props;\n\n\n      if (redirectToControlled) {\n        this.redirectToControlled();\n      }\n      this.getData(controlledId);\n    }\n\n    public componentWillUpdate(nextProps: any, nextState: any) {\n      const {\n        controlledId: nextControlledId,\n        seriesId: nextseriesId,\n      } = nextProps;\n\n      const {\n        controlledId,\n      } = this.props;\n\n      if (controlledId !== nextControlledId) {\n        if (redirectToControlled) {\n          this.redirectToControlled(nextseriesId);\n        }\n        this.getData(nextControlledId);\n      }\n    }\n\n    public render() {\n      const {\n        forwardedRef,\n        ...restProps\n      } = this.props;\n\n      return (\n        <Component\n          ref={forwardedRef}\n          {...restProps}\n        />\n      );\n    }\n  }\n\n  const mapStateToProps = (state: any, props: ComponentProps) => {\n    const {\n      match,\n      seriesId: originalId, // passed in to component\n    } = props;\n\n    const site = makeSelectSite()(state);\n    const selectedId = makeSelectSelectedFirmSeriesId()(state); // selected from state\n    const paramsId = getIn(match, ['params', 'seriesId'], undefined); // from path / router\n    const type = getIn(match, ['params', 'type'], undefined);\n    const controlledId = originalId != null // passed in to component OR from path\n      ? originalId\n      : paramsId != null\n        ? parseInt(paramsId, 10)\n        : undefined;\n\n    const isControlled = controlledId != null; // if it was from component OR from path\n    const seriesId = controlledId != null // controlled OR selected from state\n      ? controlledId\n      : selectedId;\n    const series = withConfiguratorSeries\n      ? site === SiteName.pt\n        ? makeSelectSelectedFirmSeries()(state)\n        : makeSelectSelectedPimSeries()(state)\n      : null; // only pass down Series object itself if requested\n\n    const userHasAtsUserAcl = makeSelectUserIsAtsUser()(state);\n\n    return {\n      site,\n      selectedId,\n      controlledId,\n      isControlled,\n      seriesId,\n      series,\n      type,\n      userHasAtsUserAcl,\n    };\n  };\n\n  const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n    return {\n      getSeries: (seriesId: number) => { // PT configurator\n        dispatch(new GetFirmSeriesAction({\n          seriesId,\n          isConfigurator: true,\n        }));\n      },\n      getSeriesDraft: (seriesId: number, onSuccess?: (series: IMap<Series>) => void, onFail?: () => void) => { // PIM configurator\n        dispatch(new GetPimSeriesdDraftAction({ seriesId, onSuccess, onFail }));\n      },\n      setConfigSeriesId: (seriesId: number) => {\n        dispatch(new SetSelectedFirmSeriesIdAction(seriesId));\n      },\n      dispatch,\n    };\n  };\n\n  const WrappedWithConfiguratorSeriesIdInner = compose<React.ComponentClass<any>>(\n    connect(mapStateToProps, mapDispatchToProps),\n  )(WithConfiguratorSeriesIdInner);\n\n  const RefForwardingFactory = (props: Props, ref: T) => {\n    return <WrappedWithConfiguratorSeriesIdInner {...props} forwardedRef={ref} />;\n  };\n\n  const WithConfiguratorSeriesId = React.forwardRef<T, OriginalProps>(RefForwardingFactory as any);\n  return WithConfiguratorSeriesId;\n};\n\nexport default withConfiguratorSeriesId;","import * as React from 'react';\nimport { Grid, Theme, IconButton, makeStyles, createStyles, Typography, GridSize, Tooltip } from '@material-ui/core';\nimport { IMap, IAction } from 'ats-utils/src';\nimport { Manufacturer, Filter, Category } from '../../../models';\nimport { List, Map } from 'immutable';\nimport { Field, getFormValues } from 'redux-form/immutable';\nimport { FieldRadio, FieldTextField } from '../../../components';\nimport { NoPhotoPreviewAction } from '../../../modules/ApplicationModule/actions';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../components/FieldDropzone';\nimport { BaseFieldProps, change } from 'redux-form';\nimport { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { connect }from 'react-redux';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { AnyAction, compose, Dispatch } from 'redux';\nimport { createStructuredSelector } from 'reselect';\nimport { GetBrandRepCategoriesAction, GetManufacturersAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectCategory, makeSelectManufacturer, makeSelectToolSpecificManufacturers } from '../../../modules/AccountModule/selectors';\nimport { GetAttributeOrderAction } from '../../../modules/ProductModule/actions';\nimport { ResetPimStateAction, SearchRecommendedAttributesAction } from '../../../modules/PimModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { required, isNotEmptyStringRequired, requiredList } from '../../../validators';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport { PRODUCT_CONFIG_FORM } from '../Component';\nimport { makeSelectCanManagePimPricing, makeSelectIsPimTool } from '../../../modules/AtsModule/selectors';\nimport CurrencySelector from '../../../components/CurrencySelector';\nimport { _isBiggerThan, _isPositiveFloatSmallerThan, _isPositiveIntegerSmallerThan, _isSmallerThan, acceptedMainImageExtensions, isBothSkidValid, isBothTruckValid, mainImageUploadValidation, PURCHASABILITY_RADIO_LABEL_ARRAY } from '../../SeriesEditPage/SeriesInfo';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../components/FieldSwitch';\nimport InfoIcon from '@material-ui/icons/Info';\nimport MandatoryRecommendedAttributes from '../../../models/MandatoryRecommendedAttributes';\nimport { IFieldRadioComponentProps } from '../../../components/FieldRadio';\nimport { Currency } from '../../../constants';\nimport { COUNTRIES_ARRAY, COUNTRIES_OBJECT } from '../../../constants/countries';\n\ninterface IInputProps {\n  size: GridSize;\n  label: string;\n  name: string;\n  tooltip?: string;\n  inputProps?: object;\n  require?: boolean;\n  validate?: any;\n}\n\ninterface ISeriesInfoComponentProps {\n  seriesId: number;\n  selectedCurrency: Currency;\n  onCurrencyChange: (currency: Currency) => void;\n}\n\ninterface ISeriesInfoProps extends ISeriesInfoComponentProps {\n  formValues: Map<string, any>;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  canManagePimPricing: boolean;\n  isPimTool: boolean;\n  dispatch: React.Dispatch<IAction>;\n  getManufacturers: () => void;\n  searchRecommendedAttributes: ({ categoryId, brandId, seriesId, onSuccess }: { categoryId: number, brandId: number, seriesId?: number, onSuccess?: (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => void }) => void;\n  getAttributeOrder: (categoryId: number) => void;\n  getBrandRepCategories: () => void;\n}\n\ntype SeriesInfoProps = ISeriesInfoProps;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  container: {\n    marginTop: theme.spacing()\n  },\n  uploadFileContainer: {\n    marginBottom: theme.spacing(),\n    height: theme.spacing(18)\n  },\n}));\n\nconst SeriesInfo: React.FC<SeriesInfoProps & WithTranslation>  = (props) => {\n  const {\n    seriesId,\n    manufacturers,\n    categories,\n    formValues,\n    selectedCurrency,\n    canManagePimPricing,\n    isPimTool,\n    dispatch,\n    getManufacturers,\n    getBrandRepCategories,\n    searchRecommendedAttributes,\n    getAttributeOrder,\n    t,\n    onCurrencyChange,\n  } = props;\n\n  const [completedInitialRecAttributesSearch, setCompletedInitialRecAttributesSearch] = React.useState(false);\n\n  const mainFileId = formValues && formValues.get('mainFileId');\n  const categoryId = formValues && formValues.getIn(['categoryName', 'id']);\n  const brandId = formValues && formValues.getIn(['manufacturer', 'id']);\n\n  const classes = useStyles();\n\n  React.useEffect(() => {\n    getManufacturers();\n    getBrandRepCategories();\n  }, []);\n\n  React.useEffect(() => {\n    if (!completedInitialRecAttributesSearch && brandId && categoryId) {\n      const onSuccess = (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => {\n        dispatch(change(PRODUCT_CONFIG_FORM, 'initialMandatoryAttributes', mandatoryRecommendedAttributes?.get('required')));\n      };\n      setCompletedInitialRecAttributesSearch(true);\n      searchRecommendedAttributes({ categoryId, brandId, seriesId, onSuccess });\n      getAttributeOrder(categoryId);\n    }\n  }, [brandId]);\n\n  const onBrandChange = (val) => {\n\n    const updatedBrandId = val && val.id;\n    if (brandId !== updatedBrandId) {\n      dispatch(change(PRODUCT_CONFIG_FORM, 'categoryName', ''));\n      return dispatch(new ResetPimStateAction('mandatoryRecommendedAttributes'));\n    }\n  };\n\n  const onCategoryChange = (val) => {\n    // changing the category will:\n    // get new recommended attributes list - displays in features table\n    // get new attribute order list - effects order displayed in features table\n\n    const updatedCategoryId = val && val.id;\n    if (updatedCategoryId && brandId) {\n      const onSuccess = (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => {\n        dispatch(change(PRODUCT_CONFIG_FORM, 'initialMandatoryAttributes', mandatoryRecommendedAttributes?.get('required')));\n      };\n      searchRecommendedAttributes({ categoryId: updatedCategoryId, brandId, seriesId, onSuccess });\n    }\n    getAttributeOrder(updatedCategoryId);\n  };\n\n  const removePhoto = () => {\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(PRODUCT_CONFIG_FORM, 'mainFileId', ''));\n    dispatch(change(PRODUCT_CONFIG_FORM, 'dropzone', ''));\n  };\n\n  const renderDropzone = (): JSX.Element => {\n    return (\n      <Grid container={true} item={true} direction='column' className={classes.uploadFileContainer} wrap='nowrap' xs={12}>\n        <Grid container={true} item={true} justify='space-between'>\n          {\n            (mainFileId || (formValues && formValues.get('dropzone'))) &&\n            <IconButton\n              onClick={removePhoto}\n              size='small'\n            >\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          }\n        </Grid>\n        <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n          component={FieldDropzone}\n          name='dropzone'\n          validate={mainImageUploadValidation}\n          props={{\n            initialImage: mainFileId,\n            suggestText: t('SeriesDetailPage.uploadSuggest'),\n            dropzoneInputProps: {\n              accept: acceptedMainImageExtensions\n            }\n          }}\n        />\n      </Grid>\n    );\n  };\n\n  const renderInput = ({size, label, name, tooltip = '', inputProps, require, validate = []}: IInputProps): JSX.Element => {\n\n    const isListPriceField = name.includes('list');\n    const isPOA = formValues && formValues.getIn(['price', 'default', selectedCurrency, 'isPoa']);\n    return (\n      <Grid\n        item={true}\n        xs={size}\n      >\n        <Typography align='left' variant='subtitle1' color='textPrimary'>\n          { label }\n        </Typography>\n        {isListPriceField && isPOA\n        ? <Typography align='left' variant='subtitle1' style={{color: 'darkgrey'}}>\n            { label }\n          </Typography>\n        : <Tooltip title={tooltip}>\n            <div>\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name={name}\n                validate={validate}\n                props={{\n                  require: require ? true : false,\n                  inputProps,\n                  formControlProps: {\n                    fullWidth: true\n                  },\n                }}\n                component={FieldTextField}\n              />\n            </div>\n          </Tooltip>\n        }\n      </Grid>\n    );\n  };\n\n  return (\n    <Grid\n      container={true}\n      item={true}\n      xs={12}\n      spacing={2}\n      justify={isPimTool ? 'space-between' : 'center'}\n      className={classes.container}\n    >\n      {\n        isPimTool && (\n          <Grid item={true} lg={3} md={3} xs={12}>\n            { renderDropzone() }\n          </Grid>\n        )\n      }\n      <Grid\n        container={true}\n        item={true}\n        lg={isPimTool ? 9 : 12}\n        md={isPimTool ? 9 : 12}\n        xs={12}\n        spacing={2}\n        justify='center'\n      >\n        <Grid\n          container={true}\n          item={true}\n          spacing={2}\n        >\n          {renderInput({\n            size: 6,\n            label: t('configuratorPage.baseModelLabel'),\n            name: 'name',\n            require: true,\n            inputProps: {\n              type: 'text',\n              placeholder: t('configuratorPage.baseModelPlaceholder')\n            },\n            validate: isNotEmptyStringRequired\n          })}\n          {renderInput({\n            size: 6,\n            label: t('configuratorPage.descriptionLabel'),\n            name: 'description',\n            require: true,\n            inputProps: {\n              type: 'text',\n              placeholder: t('configuratorPage.descriptionLabel')\n            },\n            validate: isNotEmptyStringRequired\n          })}\n          <Grid\n            item={true}\n            xs={6}\n          >\n            <Grid>\n              <Typography align='left' variant='subtitle1' color='textPrimary'>\n                {t('configuratorPage.manufacturerLabel')}\n              </Typography>\n            </Grid>\n            <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n              name='manufacturer'\n              component={FieldAutocomplete}\n              validate={[required]}\n              props={{\n                require: true,\n                inputProps: {\n                  options: manufacturers.toJS(),\n                  placeholder: t('configuratorPage.manufacturerLabel'),\n                  getOptionLabel: option => option ? option.value || '' : null,\n                  renderOption: option => option && <Typography>{option.value}</Typography>,\n                  onChange: onBrandChange\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            xs={6}\n          >\n            <Grid>\n              <Typography align='left' variant='subtitle1' color='textPrimary'>\n                {t('configuratorPage.categoryLabel')}\n              </Typography>\n            </Grid>\n            <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n              name='categoryName'\n              component={FieldAutocomplete}\n              validate={[required]}\n              props={{\n                require: true,\n                inputProps: {\n                  options: categories.toJS(),\n                  placeholder: t('configuratorPage.categoryLabel'),\n                  getOptionLabel: option => option ? option.label || option.value || '' : null,\n                  renderOption: option => option && <Typography>{option.label || option.value}</Typography>,\n                  onChange: onCategoryChange\n                },\n                formControlProps: {\n                  fullWidth: true\n                }\n              }}\n            />\n          </Grid>\n\n          {\n            (isPimTool) ? <Grid container={true} item={true} xs={12} wrap='nowrap'>\n              <Typography color='textPrimary' variant='subtitle1' style={{ whiteSpace: 'nowrap' }}>\n                { t('SeriesDetailPage.purchasableLabel') } *\n              </Typography>\n              <Grid\n                item={true}\n                xs={12}\n                style={{ paddingLeft: 8 }}\n              >\n                {\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='purchasability.country'\n                    component={FieldAutocomplete}\n                    validate={[requiredList]}\n                    props={{\n                      inputProps: {\n                        multiple: true,\n                        placeholder: t('SeriesDetailPage.purchasablePlaceholder'),\n                        options: COUNTRIES_ARRAY,\n                        getOptionSelected: (option, value) => option.id === value.id,\n                        filterSelectedOptions: true,\n                        getOptionLabel: option => option ? option.value || COUNTRIES_OBJECT[option.id]?.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                  />\n                }\n              </Grid>\n            </Grid> : null\n          }\n\n          <Grid\n            item={true}\n            container={true}\n            alignItems='center'\n            style={{ paddingTop: 0 }}\n          >\n            <Tooltip title={isPimTool && !canManagePimPricing ? t('permissions.noPermissionTooltip') : ''}>\n              <span>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={`price.default.${selectedCurrency}.isPoa`}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.priceIsPOA'),\n                    inputProps: {\n                      color: 'primary',\n                      disabled: !canManagePimPricing && isPimTool\n                    }\n                  }}\n                />\n              </span>\n            </Tooltip>\n            <Tooltip title={t('configuratorPage.optionsWidget.priceIsPOATooltip')}>\n              <InfoIcon fontSize='small' color='action' style={{marginLeft: -8, cursor: 'pointer'}} />\n            </Tooltip>\n          </Grid>\n          <Grid\n            item={true}\n            xs={3}\n          >\n            <CurrencySelector\n              selectedCurrency={selectedCurrency}\n              setSelectedCurrency={onCurrencyChange}\n              selectProps={{\n                fullWidth: true\n              }}\n            />\n          </Grid>\n          {renderInput({\n            size: 3,\n            label: t('configuratorPage.listPriceLabel'),\n            name: `price.default.${selectedCurrency}.list`,\n            tooltip: isPimTool && !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n            inputProps: {\n              type: 'number',\n              placeholder: t('configuratorPage.listPriceLabel'),\n              disabled: !canManagePimPricing && isPimTool\n            }\n          })}\n          {renderInput({\n            size: 3,\n            label: t('configuratorPage.sellPriceLabel'),\n            name: `price.default.${selectedCurrency}.sell`,\n            tooltip: isPimTool && !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n            inputProps: {\n              type: 'number',\n              placeholder: t('configuratorPage.sellPriceLabel'),\n              disabled: !canManagePimPricing && isPimTool\n            }\n          })}\n          {renderInput({\n            size: 3,\n            label: t('configuratorPage.costPriceLabel'),\n            name: `price.default.${selectedCurrency}.cost`,\n            tooltip: isPimTool && !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n            inputProps: {\n              type: 'number',\n              placeholder: t('configuratorPage.costPriceLabel'),\n              disabled: !canManagePimPricing && isPimTool\n            }\n          })}\n\n          {/* skid/truck values */}\n          {\n            isPimTool && <>\n              {renderInput({\n                size: 3,\n                label: t('SeriesDetailPage.skidUnit'),\n                name: `bulkPrice.skid.CAD.quantity`,\n                tooltip: !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.skidUnit'),\n                  disabled: !canManagePimPricing\n                },\n                validate: [_isPositiveIntegerSmallerThan, _isSmallerThan, isBothSkidValid]\n              })}\n              {renderInput({\n                size: 3,\n                label: t('SeriesDetailPage.skidUnitPrice'),\n                name: `bulkPrice.skid.CAD.price`,\n                tooltip: !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.skidUnitPrice'),\n                  disabled: !canManagePimPricing\n                },\n                validate: [_isPositiveFloatSmallerThan, isBothSkidValid],\n              })}\n              {renderInput({\n                size: 3,\n                label: t('SeriesDetailPage.truckUnit'),\n                name: `bulkPrice.truck.CAD.quantity`,\n                tooltip: !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.truckUnit'),\n                  disabled: !canManagePimPricing\n                },\n                validate: [_isPositiveIntegerSmallerThan, _isBiggerThan, isBothTruckValid],\n              })}\n              {renderInput({\n                size: 3,\n                label: t('SeriesDetailPage.truckUnitPrice'),\n                name: `bulkPrice.truck.CAD.price`,\n                tooltip: !canManagePimPricing ? t('permissions.noPermissionTooltip') : '',\n                inputProps: {\n                  placeholder: t('SeriesDetailPage.truckUnitPrice'),\n                  disabled: !canManagePimPricing\n                },\n                validate: [_isPositiveFloatSmallerThan, isBothTruckValid],\n              })}\n            </>\n          }\n        </Grid>\n      </Grid>\n    </Grid>\n\n  );\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => ({\n  dispatch,\n  getManufacturers: () => {\n    dispatch(new GetManufacturersAction());\n  },\n  getBrandRepCategories: () => {\n    dispatch(new GetBrandRepCategoriesAction());\n  },\n  searchRecommendedAttributes: ({ categoryId, brandId, seriesId, onSuccess }: { categoryId: number, brandId: number, seriesId?: number, onSuccess?: (mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>) => void }) => {\n    dispatch(new SearchRecommendedAttributesAction({categoryId, brandId, seriesId, onSuccess }));\n  },\n  getAttributeOrder: (categoryId: number) => {\n    dispatch(new GetAttributeOrderAction({categoryId}));\n  },\n});\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(PRODUCT_CONFIG_FORM),\n  manufacturers: makeSelectToolSpecificManufacturers(),\n  categories: makeSelectCategory(),\n  canManagePimPricing: makeSelectCanManagePimPricing(),\n  isPimTool: makeSelectIsPimTool(),\n})(state);\n\nexport default compose<React.FC<ISeriesInfoComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(SeriesInfo);\n","// this comp makes the chips for \"mask\"\n// handled with local state\n// ex mask is like \"base{material}{mounting}base2{fixtureType}\"\n// unfortunately its a string which means its not actually bound to the existing options that's already on the series\n// everything within {} are the exclusion key. everything outside of that is a \"base\"\n// base is arbitrary\n\n// there's two sections to this\n// 1. all available chips that could be added\n// 2. chips that's already added or to be added\n// for #1 it's bound to the \"options\" in the series so this will always be \"synced\"\n// for #2 it's from the string. which means for w/e reason if the mask string value on series is out of \"sync\", it'll not match chips in #1\n// that issue is mostly ok since BE has a check on patch that will remove it from the mask string\n// ex of the issue is that the mask is \"base{material}{mounting}base2{fixtureType}\" but someone accidentally removed the \"mounting\" option from the series. in that case, the mask will remain \"base{material}{mounting}base2{fixtureType}\" at least on the UI. Until they \"save\", at which point BE will remove the extra \"mounting\" from the mask string and make it \"synced\" with the actual options on the series\n\nimport * as React from 'react';\nimport { Grid, makeStyles, Theme, createStyles, Typography, IconButton, TextField } from '@material-ui/core';\nimport { List, OrderedMap } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport CheckIcon from '@material-ui/icons/Check';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\nimport EditIcon from '@material-ui/icons/Edit';\nimport PimAttribute from '../../../models/PimAttribute';\nimport { IMaskChip } from '../Component';\n\n// the PIM attribute & options are pretty much the same as the\n// attributes and options in spec tool\n// difference being the \"id\" and \"key\" are called\n// \"attributeId\", \"attributeKey\", \"optionId\", \"optionKey\"\ninterface IAttributeDescriptionAndSelectedAttribute {\n  selectedAttribute: IMap<PimAttribute>;\n}\n\ninterface IProductNumberGeneratorComponentProps {\n  isPT: boolean;\n  theme: Theme;\n  formValues: any;\n  maskOptions: IMaskChip[];\n  setMaskOptions: (newMaskOptions: IMaskChip[]) => void;\n}\n\ninterface IProductNumberGeneratorProps extends IProductNumberGeneratorComponentProps {\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  maskSectionContainer: {\n    marginBottom: theme.spacing(4),\n    width: '100%'\n  },\n  maskSectionContainerTitle: {\n    marginBottom: theme.spacing(),\n  },\n  emptyMaskDisplay: {\n    padding: `${theme.spacing()}px ${theme.spacing(2)}px`,\n    background: '#F7F7F9',\n    borderStyle: 'dashed',\n    border: `1px dashed rgba(151,151,151,0.5)`,\n  },\n  chipStyle: {\n    padding: `${theme.spacing(1.5)}px ${theme.spacing(2.5)}px`,\n    borderRadius: '4px',\n    margin: `0 ${theme.spacing()}px ${theme.spacing()}px 0`,\n    cursor: 'pointer',\n    background: 'rgba(0,0,0,0.1)',\n  },\n  input: {\n    width: 100\n  }\n}));\n\nconst ProductNumberGenerator: React.FC<IProductNumberGeneratorProps & WithTranslation> = (props): JSX.Element => {\n  const {\n    theme,\n    isPT,\n    formValues,\n    maskOptions,\n    setMaskOptions,\n    t,\n  } = props;\n\n  const classes = useStyles();\n\n  const attributeOptions: OrderedMap<string, IMap<IAttributeDescriptionAndSelectedAttribute>> = formValues && formValues.getIn(['attributeOptions'], OrderedMap()).filter((attribute) => {\n    // Tolerate a malformed entry: a missing `values` list must not blank the whole page.\n    const values = attribute.get('values') || List();\n    const optionDescriptionAllDeleted = values.every((optionDescription) => optionDescription.get('status') === 'deleted');\n    if (!optionDescriptionAllDeleted) {\n      return attribute;\n    }\n  });\n\n  const baseModelNumber = formValues && formValues.get('name') || 'BaseModelNumber';\n\n  const optionButtons = attributeOptions && attributeOptions.reduce((acc, attributeOption, index) => {\n    const attributeOptionName = attributeOption.getIn(['name']);\n    const attributeOptionKey = attributeOption.getIn(['attributeKey']);\n\n    return acc.push(\n      <Grid\n        className={classes.chipStyle}\n        key={index}\n        onClick={() => handleOptionChipAdd({\n          key: attributeOptionKey,\n          label: attributeOptionName,\n          base: false,\n          editMode: false,\n        })}\n      >\n        <Typography\n          variant='body2'\n        >\n          {attributeOptionName}\n        </Typography>\n      </Grid>\n    );\n  }, List()).unshift(\n    // need to be always available\n    <Grid\n      className={classes.chipStyle}\n      key={attributeOptions.size + 1}\n      onClick={() => handleOptionChipAdd({\n        key: baseModelNumber,\n        label: baseModelNumber,\n        base: true,\n        editMode: false,\n      })}\n    >\n      <Typography\n        variant='body2'\n      >\n        {t('configuratorPage.baseModelNumberChip')}\n      </Typography>\n    </Grid>\n  );\n\n  const handleOptionChipAdd = (maskChip: IMaskChip) => {\n    setMaskOptions([...maskOptions, maskChip]);\n  };\n\n  const onChipDelete = (index) => {\n    if (index > -1) {\n      const maskOptionsCopy = [...maskOptions];\n      maskOptionsCopy.splice(index, 1);\n\n      setMaskOptions(maskOptionsCopy);\n    }\n  };\n\n  const onChipEditModeToggle = (index) => {\n    if (index > -1) {\n      const maskOptionsCopy = [...maskOptions];\n      maskOptionsCopy[index].editMode = !maskOptionsCopy[index].editMode;\n\n      setMaskOptions(maskOptionsCopy);\n    }\n  };\n\n  const reorder = (list: IMaskChip[], startIndex, endIndex) => {\n    const result = Array.from(list);\n    const [removed] = result.splice(startIndex, 1);\n    result.splice(endIndex, 0, removed);\n\n    return result;\n  };\n\n  const onDragEnd = (result) => {\n    // dropped outside the list\n    if (!result.destination) {\n      return;\n    }\n\n    const newMaskOptions = reorder(\n      maskOptions,\n      result.source.index,\n      result.destination.index\n    );\n\n    setMaskOptions(newMaskOptions);\n  };\n\n  const getItemStyle = (isDragging, draggableStyle) => ({\n    padding: theme.spacing(),\n    borderRadius: '4px',\n    margin: `0 ${theme.spacing()}px 0 0`,\n    display: 'flex',\n\n    // change background colour if dragging\n    background: isPT ? theme.palette.secondary[100] : 'rgb(217, 239, 204)',\n    borderLeft: isDragging ? '4px solid #5CB85C' : null,\n\n    // styles we need to apply on draggables\n    ...draggableStyle,\n  });\n\n  const getListStyle = isDraggingOver => ({\n    background: isDraggingOver ? 'lightblue' : '#F7F7F9',\n    display: 'flex',\n    padding: theme.spacing(),\n    overflow: 'auto',\n  });\n\n  const handleBaseKeyChange = (index: number) => (event: React.ChangeEvent<HTMLInputElement>) => {\n\n    const maskOptionsCopy = [...maskOptions];\n    maskOptionsCopy[index].key = event.target.value;\n    maskOptionsCopy[index].label = event.target.value;\n\n    setMaskOptions(maskOptionsCopy);\n  };\n\n  const selectedMaskChips = (\n    <Grid>\n      <Grid\n        className={classes.maskSectionContainerTitle}\n      >\n        <Typography\n          variant='subtitle1'\n          color='textPrimary'\n        >\n          {t('configuratorPage.productNumberGeneratorWidgetSubtitle')}\n        </Typography>\n      </Grid>\n      {\n        maskOptions.length > 0\n        ? <DragDropContext onDragEnd={onDragEnd}>\n            <Droppable droppableId='droppable' direction='horizontal'>\n              {(provided, snapshot) => (\n                <div\n                  ref={provided.innerRef}\n                  style={getListStyle(snapshot.isDraggingOver)}\n                  {...provided.droppableProps}\n                >\n                  {maskOptions.map((item, index) => (\n                    <Draggable key={index} draggableId={item.key + index} index={index}>\n                      {(_provided, _snapshot) => (\n                        <Grid\n                          ref={_provided.innerRef}\n                          {..._provided.draggableProps}\n                          {..._provided.dragHandleProps}\n                          style={getItemStyle(\n                            _snapshot.isDragging,\n                            _provided.draggableProps.style\n                          )}\n                        >\n                          <Grid\n                            container={true}\n                            alignItems='center'\n                            wrap='nowrap'\n                            spacing={1}\n                          >\n                            <Grid item={true} style={{ display: 'flex' }}>\n                              <DragIndicatorIcon />\n                            </Grid>\n                            <Grid item={true}>\n                              {\n                                item.editMode\n                                  ? <TextField\n                                      value={maskOptions[index].key}\n                                      onChange={handleBaseKeyChange(index)}\n                                      className={classes.input}\n                                    />\n                                  : <Typography variant='body2'>{item.label}</Typography>\n                              }\n                            </Grid>\n                            <Grid item={true}>\n                              {\n                                item.base\n                                  ? <IconButton\n                                      onClick={() => onChipEditModeToggle(index)}\n                                      size='small'\n                                    >\n                                      {\n                                        item.editMode\n                                          ? <CheckIcon />\n                                          : <EditIcon />\n                                      }\n                                    </IconButton>\n                                  : null\n                              }\n                            </Grid>\n                            <IconButton\n                              onClick={() => onChipDelete(index)}\n                              size='small'\n                            >\n                              <CancelIcon />\n                            </IconButton>\n                          </Grid>\n                        </Grid>\n                      )}\n                    </Draggable>\n                  ))}\n                  {provided.placeholder}\n                </div>\n              )}\n            </Droppable>\n          </DragDropContext>\n        : <Grid\n            className={classes.emptyMaskDisplay}\n          >\n            <Typography\n              variant='caption'\n            >\n              {t('configuratorPage.productNumberGeneratorWidgetEmpty')}\n            </Typography>\n          </Grid>\n      }\n    </Grid>\n  );\n\n  return (\n    <Grid container={true}>\n      <Grid\n        className={classes.maskSectionContainer}\n        container={true}\n      >\n        { optionButtons }\n      </Grid>\n\n      <Grid\n        className={classes.maskSectionContainer}\n      >\n        { selectedMaskChips }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default withTranslation('translations')(ProductNumberGenerator);","import { List, Map } from 'immutable';\n\n// The configurator form's attributeOptions: an OrderedMap of attribute key -> attribute option Map.\ntype AttributeOptions = Map<string, any>;\n\n/**\n * True when `key` names an attribute option that currently exists in the configurator form.\n *\n * Both exclusion dialogs reset their selected key to '' while closing, so a Save that lands during\n * the close transition (a backdrop click, or the second click of a double-click on Save) must not\n * write through it: Immutable's setIn would create a new attribute entry without `values`, and the\n * next render of the options list and product number generator threw on it, blanking the whole\n * configurator page (Sentry issue 7719311907).\n */\nexport const hasAttributeOption = (attributeOptions: AttributeOptions, key: string): boolean =>\n  !!key && Map.isMap(attributeOptions) && attributeOptions.has(key);\n\n/** True when `key` / `index` address an existing option value of an existing attribute option. */\nexport const hasAttributeOptionValue = (attributeOptions: AttributeOptions, key: string, index: number): boolean =>\n  hasAttributeOption(attributeOptions, key) && index >= 0 && attributeOptions.hasIn([key, 'values', index]);\n\n/**\n * Applies a whole-attribute exclusion edit to the form's attributeOptions.\n *\n * Exclusions are linked in both directions (A excludes B means B excludes A), so for every attribute\n * removed from the list the reverse link on that attribute is dropped too, otherwise the backend\n * would relink them. Returns null when `attributeKey` is not a current attribute option, in which\n * case there is nothing valid to save.\n */\nexport const applyWholeExclusion = (\n  attributeOptions: AttributeOptions,\n  attributeKey: string,\n  previousExcludes: List<any>,\n  nextExcludes: List<any>\n): AttributeOptions | null => {\n  if (!hasAttributeOption(attributeOptions, attributeKey)) {\n    return null;\n  }\n\n  const removedOptions = (previousExcludes || List()).filter((exclusion) => !(nextExcludes || List()).includes(exclusion));\n\n  const withReverseLinksRemoved = removedOptions.reduce((acc, removedOption) => {\n    const removedOptionKey = removedOption.get('attributeKey');\n    if (!acc.has(removedOptionKey)) {\n      // The excluded attribute is no longer on the series; there is no reverse link to break.\n      return acc;\n    }\n    const excludes: List<any> = acc.getIn([removedOptionKey, 'exclude']) || List();\n    return acc.setIn([removedOptionKey, 'exclude'], excludes.filter((x) => x.get('attributeKey') !== attributeKey));\n  }, attributeOptions);\n\n  return withReverseLinksRemoved.setIn([attributeKey, 'exclude'], nextExcludes || List());\n};\n","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, Grid, Typography, Tooltip, makeStyles, createStyles, Theme, IconButton, TextField, Chip } from '@material-ui/core';\nimport { BaseFieldProps, change, InjectedFormProps } from 'redux-form';\nimport { Field, getFormValues, reduxForm } from 'redux-form/immutable';\nimport { FieldAutocomplete } from '../../../components';\nimport { compose, Dispatch } from 'redux';\nimport { connect } from 'react-redux';\nimport { Map, List, fromJS, isImmutable } from 'immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { IAction } from 'ats-utils/src';\nimport { SetSelectedAttributeIdAction } from '../../../modules/PimModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { PRODUCT_CONFIG_FORM } from '../Component';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { hasAttributeOptionValue } from './exclusionAttributeOptions';\n\nexport const OPTION_EXCLUSION_DIALOG_FORM = 'OptionExclusionDialogForm';\n\ninterface IExclusionDialogComponentProps {\n  exclusionPopperAttributeOptionKey: string;\n  exclusionPopperOptionDescriptionIndex: number;\n  exclusionDialogOpen: boolean;\n  closeExclusionDialog: () => void;\n}\n\ninterface IExclusionDialogProps extends IExclusionDialogComponentProps {\n  formValues: Map<string, any>;\n  configFormValues: Map<string, any>;\n  setSelectedAttributeId: (attributeId: number) => void;\n  dispatch: Dispatch;\n}\n\ntype ExclusionDialogProps = IExclusionDialogProps & InjectedFormProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  exclusionInput: {\n    padding: theme.spacing(0, 2, 0, 0)\n  },\n  addNewButton: {\n    margin: theme.spacing(2, 0 , 1)\n  },\n}));\n\nconst ExclusionDialog: React.FC<ExclusionDialogProps> = props => {\n  const {\n    formValues = Map(),\n    configFormValues = Map(),\n    exclusionDialogOpen,\n    exclusionPopperAttributeOptionKey,\n    exclusionPopperOptionDescriptionIndex,\n    setSelectedAttributeId,\n    closeExclusionDialog,\n    dispatch,\n    t,\n  } = props;\n\n  const classes = useStyles();\n\n  const attributeOptionAddId = configFormValues.getIn(['attributeOption', 'attributeId']);\n\n  const attributeOptions = configFormValues.get('attributeOptions', List());\n\n  const exclusionAddList = formValues.get('exclusionAddList', List());\n  const selectedExclusionAttributeAddId = formValues.getIn(['exclusionAdd', 'attributeId']);\n  const selectedExclusionAttributeAddKey = formValues.getIn(['exclusionAdd', 'attributeKey']);\n\n  let unselectedAttributes = configFormValues.get('attributeOptions', List());\n  exclusionAddList.forEach(exclusion => {\n    if (exclusion) {\n      unselectedAttributes = unselectedAttributes.delete(isImmutable(exclusion) ? exclusion.get('attributeKey') : exclusion.attributeKey);\n    }\n  });\n  if (selectedExclusionAttributeAddKey) {\n    unselectedAttributes = unselectedAttributes.delete(selectedExclusionAttributeAddKey);\n  }\n\n  // need to calculate a list of options that's allowed in exclusion\n  // the exclusion list needs to come from the already added list \"options\"\n  // can't exclude what you haven't added\n  const attributesForExclusion = unselectedAttributes && unselectedAttributes.reduce((acc, attributeOption) => {\n    // need to delete values in order to decouple the options that's already associate with that attribute\n    // we'll be replacing the deleted \"values\" with a list of exclusion \"values\"\n    return acc.push(attributeOption.delete('values'));\n  }, List());\n\n  const exclusionOptionsBySelectedAttributeAdd = attributeOptions && attributeOptions.reduce((acc, attributeOption) => {\n    const attributeOptionId = attributeOption.getIn(['attributeId']);\n    return attributeOptionId === selectedExclusionAttributeAddId ? acc.push(attributeOption) : acc;\n  }, List());\n\n  const ImmutableExclusionOptionsBySelectedAttributeAdd = isImmutable(exclusionOptionsBySelectedAttributeAdd) ? exclusionOptionsBySelectedAttributeAdd : fromJS(exclusionOptionsBySelectedAttributeAdd);\n\n  const exclusionOptionsBySelectedAttributeAddValues = ImmutableExclusionOptionsBySelectedAttributeAdd && ImmutableExclusionOptionsBySelectedAttributeAdd.getIn([0, 'values']);\n  let newExclusionOptionList = exclusionPopperAttributeOptionKey === formValues.getIn(['exclusionAdd', 'attributeKey'])\n    ? exclusionOptionsBySelectedAttributeAddValues.delete(exclusionPopperOptionDescriptionIndex)\n    : exclusionOptionsBySelectedAttributeAddValues;\n\n  const newExclusionOptionValues = formValues.getIn(['exclusionAdd', 'values'], List());\n\n  newExclusionOptionValues.forEach(exclusionValue => {\n    const indexToDelete = newExclusionOptionList.findIndex((optionValue) => optionValue.get('optionId') === exclusionValue.get('optionId'));\n    if (indexToDelete !== -1) {\n      newExclusionOptionList = newExclusionOptionList.delete(indexToDelete);\n    }\n  });\n\n  const valuesArray = formValues.getIn(['exclusionAdd', 'values'], List()).toJS();\n\n  return (\n    <Dialog\n      open={exclusionDialogOpen}\n      onClose={closeExclusionDialog}\n      aria-labelledby='add-options-exclusion-title'\n      fullWidth={true}\n      scroll='body'\n    >\n      <DialogTitle id='add-options-exclusion-title'>\n        {t('configuratorPage.optionsWidget.exclusionDialogTitle')}\n      </DialogTitle>\n      <DialogContent>\n        <Grid>\n          <Grid>\n            {/* existing exclusions */}\n            {\n              exclusionAddList && exclusionAddList.map((exclusion, exclusionAddIndex) => {\n                const exclusionValues = formValues.getIn(['exclusionAddList', exclusionAddIndex, 'values'], List()).toJS();\n                const selectedExclusionAttributeOptionId = formValues.getIn(['exclusionAddList', exclusionAddIndex, 'attributeId']);\n\n                const optionsForExistingExclusion = attributeOptions.reduce((acc, attributeOption) => {\n                  const attributeOptionId = attributeOption.getIn(['attributeId']);\n                  return attributeOptionId === selectedExclusionAttributeOptionId ? acc.push(attributeOption) : acc;\n                }, List());\n\n                const imutableOptionsForExistingExclusion = isImmutable(optionsForExistingExclusion) ? optionsForExistingExclusion : fromJS(optionsForExistingExclusion);\n                const exclusionOptionsBySelectedExistingAttributeAddValues = imutableOptionsForExistingExclusion\n                  && imutableOptionsForExistingExclusion.getIn([0, 'values']) || List();\n                const immutableExclusion = isImmutable(exclusion) ? exclusion : fromJS(exclusion);\n\n                let existingExclusionOptionList = immutableExclusion && immutableExclusion.get('attributeKey') === exclusionPopperAttributeOptionKey\n                  ? exclusionOptionsBySelectedExistingAttributeAddValues.delete(exclusionPopperOptionDescriptionIndex)\n                  : exclusionOptionsBySelectedExistingAttributeAddValues;\n\n                exclusionValues.forEach(exclusionValue => {\n                  const indexToDelete = existingExclusionOptionList.findIndex((optionValue) => optionValue.get('optionId') === exclusionValue.optionId);\n                  if (indexToDelete !== -1) {\n                    existingExclusionOptionList = existingExclusionOptionList.delete(indexToDelete);\n                  }\n                });\n\n                return (\n                  <Grid\n                    key={exclusionAddIndex}\n                    container={true}\n                    alignItems='center'\n                    wrap='nowrap'\n                  >\n                    <Grid\n                      className={classes.exclusionInput}\n                      item={true}\n                      lg={4}\n                      md={4}\n                    >\n                      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                        name={`exclusionAddList[${exclusionAddIndex}]`}\n                        component={FieldAutocomplete}\n                        props={{\n                          inputProps: {\n                            options: attributesForExclusion && attributesForExclusion.toJS(),\n                            label: t('configuratorPage.optionsWidget.excludedOptionLabel'),\n                            getOptionLabel: option => option ? option.name || '' : null,\n                            renderOption: option => option && <Typography>{option.name}</Typography>,\n                            onOpen: () => {\n                              setSelectedAttributeId(attributeOptionAddId);\n                            }\n                          },\n                          helperText: false\n                        }}\n                      />\n                    </Grid>\n                    <Grid\n                      className={classes.exclusionInput}\n                      item={true}\n                      lg={7}\n                      md={7}\n                    >\n                      <Autocomplete\n                        multiple={true}\n                        options={existingExclusionOptionList && existingExclusionOptionList.toJS()}\n                        getOptionLabel={(option: any) => option ? option.description || '' : null}\n                        value={exclusionValues}\n                        onChange={(event: React.ChangeEvent<{}>, newValue: any[]) => {\n                          dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, `exclusionAddList[${exclusionAddIndex}].values`, fromJS(newValue)));\n                        }}\n                        onOpen={() => {\n                          setSelectedAttributeId(attributeOptionAddId);\n                        }}\n                        renderInput={(params) => (\n                          <TextField\n                            fullWidth={true}\n                            {...params}\n                            label={t('configuratorPage.optionsWidget.exclusionOptionsLabel')}\n                          />\n                        )}\n                        renderTags={(tagValue, getTagProps) =>\n                          tagValue.map((option, index) => (\n                            <Tooltip key={index} title={option.description}>\n                              <Chip\n                                label={option.description}\n                                {...getTagProps({ index })}\n                              />\n                            </Tooltip>\n                          ))\n                        }\n                      />\n                    </Grid>\n                    <Grid\n                      container={true}\n                      justify='center'\n                      alignItems='center'\n                      item={true}\n                      lg={1}\n                      md={1}\n                    >\n                      <IconButton\n                        onClick={() => {\n                          const newExclusionAddList = exclusionAddList.delete(exclusionAddIndex);\n                          dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAddList', newExclusionAddList));\n                        }}\n                      >\n                        <DeleteIcon />\n                      </IconButton>\n                    </Grid>\n                  </Grid>\n                );\n              })\n            }\n          </Grid>\n\n          <Grid\n            container={true}\n            alignItems='center'\n            wrap='nowrap'\n          >\n            <Grid\n              className={classes.exclusionInput}\n              item={true}\n              lg={4}\n              md={4}\n            >\n              <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                name={`exclusionAdd`}\n                component={FieldAutocomplete}\n                props={{\n                  inputProps: {\n                    // disabled: attributesForExclusion && attributesForExclusion.size > 0 ? false : true,\n                    options: attributesForExclusion && attributesForExclusion.toJS(),\n                    label: t('configuratorPage.optionsWidget.excludedOptionLabel'),\n                    getOptionLabel: option => option ? option.name || '' : null,\n                    renderOption: option => option && <Typography>{option.name}</Typography>,\n                    onOpen: () => {\n                      setSelectedAttributeId(attributeOptionAddId);\n                    }\n                  },\n                  helperText: false\n                }}\n              />\n            </Grid>\n            <Grid\n              className={classes.exclusionInput}\n              item={true}\n              lg={8}\n              md={8}\n            >\n              <Autocomplete\n                multiple={true}\n                options={newExclusionOptionList && newExclusionOptionList.toJS()}\n                getOptionLabel={(option: any) => option ? option.description || '' : null}\n                value={valuesArray}\n                onChange={(event: React.ChangeEvent<{}>, newValue: any[]) => {\n                  dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAdd.values', fromJS(newValue)));\n                }}\n                onOpen={ () => {\n                  setSelectedAttributeId(attributeOptionAddId);\n                }}\n                renderInput={(params) => (\n                  <TextField\n                    fullWidth={true}\n                    {...params}\n                    label={t('configuratorPage.optionsWidget.exclusionOptionsLabel')}\n                  />\n                )}\n                renderTags={(tagValue, getTagProps) =>\n                  tagValue.map((option, index) => (\n                    <Tooltip key={index} title={option.description}>\n                      <Chip\n                        label={option.description}\n                        {...getTagProps({ index })}\n                      />\n                    </Tooltip>\n                  ))\n                }\n              />\n            </Grid>\n          </Grid>\n          <Grid\n            container={true}\n            justify='flex-end'\n          >\n            <Button\n              color='primary'\n              className={classes.addNewButton}\n              onClick={() => {\n                const exclusionAddInForm = formValues.get('exclusionAdd');\n                const exclusionAddListInForm = formValues.get('exclusionAddList', List()).filter(x => x != null) || List();\n\n                const immutableExclusionAddInForm = isImmutable(exclusionAddInForm) ? exclusionAddInForm : fromJS(exclusionAddInForm);\n\n                const newExclusionAddList = exclusionAddListInForm.push(immutableExclusionAddInForm);\n\n                dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAddList', newExclusionAddList));\n                dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAdd', null));\n\n              }}\n            >\n              {t('configuratorPage.optionsWidget.addNewExclusionButton')}\n            </Button>\n          </Grid>\n        </Grid>\n      </DialogContent>\n\n      <DialogActions>\n        <Button\n          onClick={closeExclusionDialog}\n          color='primary'\n        >\n          {t('formButtons.cancel')}\n        </Button>\n        <Button\n          color='primary'\n          onClick={() => {\n            // The key and index are reset while the dialog closes (backdrop click, or the second click\n            // of a double-click on Save); writing through them would plant a bogus attribute entry.\n            if (!hasAttributeOptionValue(attributeOptions, exclusionPopperAttributeOptionKey, exclusionPopperOptionDescriptionIndex)) {\n              closeExclusionDialog();\n              return;\n            }\n\n            const exclusionAdd = formValues.get('exclusionAdd');\n            const immutableExclusionAdd = isImmutable(exclusionAdd) ? exclusionAdd : fromJS(exclusionAdd);\n            const exclusionAddListInForm = formValues.get('exclusionAddList', List());\n\n            // since exclusions go both ways meaning if A excludes B, than B would also exclude A\n            // not much of an issue when we are adding since BE would do the link both ways\n            // the issue arises when we are trying to remove exclude\n            // without having the user manually remove both ways of exclusion, we'll need to break the link on the FE\n            // doing this by comparing the previous exclusion values (prevOptionExclusion) with\n            // the new exclusion values (exclusionAddListInFormWithOrWithoutExclusionAdd)\n\n            // current option that's being edited\n            const currentOption = attributeOptions.getIn([exclusionPopperAttributeOptionKey, 'values', exclusionPopperOptionDescriptionIndex]);\n\n            // the new changes to exclude\n            const exclusionAddListInFormWithOrWithoutExclusionAdd = immutableExclusionAdd\n              ? exclusionAddListInForm.push(immutableExclusionAdd)\n              : exclusionAddListInForm;\n\n            // before the change\n            const prevOptionExclusion = (currentOption && currentOption.get('exclude')) || List();\n\n            // changes the structure to be keyed by id to make the search/compare easier laterz\n            const keyExclusionsById = (exclusions) => {\n              return exclusions.reduce((acc, exclusion) => {\n                if (!exclusion) {\n                  return acc;\n                }\n                const immutableExclusion = isImmutable(exclusion) ? exclusion : fromJS(exclusion);\n                const attributeId = immutableExclusion.get('attributeId');\n                const keyedValues = (immutableExclusion.get('values') || List()).reduce((_acc, value) => {\n                  const optionId = value.get('optionId');\n                  return _acc.set(optionId, value);\n                }, Map<string, any>());\n\n                const newExclusion = immutableExclusion.set('values', keyedValues);\n                return acc.set(attributeId, newExclusion);\n              }, Map<string, any>());\n            };\n\n            const nowExclusionKeyedById = keyExclusionsById(exclusionAddListInFormWithOrWithoutExclusionAdd);\n            const prevExclusionKeyedById = keyExclusionsById(prevOptionExclusion);\n\n            // check to see what's been removed by comparing nowExclusionKeyedById and prevExclusionKeyedById\n            // removedValues that's keyed by \"key\" of attribute ie. \"finish\"\n            // and value is the \"id\" of the removed option ie. 233\n            const removedValues: Map<string, number[]> = prevExclusionKeyedById.reduce((acc, exclusion) => {\n              const attributeId = exclusion.get('attributeId');\n              const attributeKey = exclusion.get('attributeKey');\n\n              const prevExclusionValues = exclusion.get('values');\n              const nowExclusionValues = nowExclusionKeyedById ? nowExclusionKeyedById.getIn([attributeId, 'values']) : null;\n\n              if (!nowExclusionValues) {\n                return acc.set(attributeKey, prevExclusionKeyedById\n                  .getIn([attributeId, 'values'])\n                  .keySeq()\n                  .toList()\n                );\n              }\n\n              return acc.set(attributeKey, prevExclusionValues\n                .deleteAll(nowExclusionValues.keys())\n                .keySeq()\n                .toList()\n              );\n            }, Map<string, number[]>()).filter(x => x.size !== 0);\n\n            const validExclusionAddListInFormWithOrWithoutExclusionAdd = exclusionAddListInFormWithOrWithoutExclusionAdd\n              .filter(exclusion => {\n                const immutableExclusion = isImmutable(exclusion) ? exclusion : fromJS(exclusion);\n                return immutableExclusion && immutableExclusion.get('values') && immutableExclusion.get('values').count();\n              });\n\n            const newAttributeOptions = attributeOptions.setIn([exclusionPopperAttributeOptionKey, 'values', exclusionPopperOptionDescriptionIndex, 'exclude'], validExclusionAddListInFormWithOrWithoutExclusionAdd);\n\n            // we go in and actually break the link of exclusions\n            // check against removedValues and remove whatever is not needed anymore\n            const newAttributeOptionsWithUpdatedExclusions = newAttributeOptions.map((attributeOption, key) => {\n              if (removedValues.has(key)) {\n                const attributeOptionValues = attributeOption.get('values');\n                const currentOptionId = currentOption.get('optionId');\n\n                const newAttributeOptionValues = attributeOptionValues.map((attributeOptionValue) => {\n                  const optionId = attributeOptionValue.get('optionId');\n                  const valueIndex = removedValues.get(key).indexOf(optionId);\n\n                  if (valueIndex !== -1) {\n                    const excludes = attributeOptionValue.get('exclude', List());\n\n                    // checks against the current option that's being edited\n                    // use the exclusionPopperAttributeOptionKey to look through and find match\n                    // use the index in order to find the 'exclude values'\n                    const excludeIndex = excludes.findIndex(exclude => {\n                      return exclude.get('attributeKey') === exclusionPopperAttributeOptionKey;\n                    });\n\n                    const excludeValues = attributeOptionValue.getIn(['exclude', excludeIndex, 'values']);\n                    const newExcludeValues = excludeValues ? excludeValues.filter(x => x.get('optionId') !== currentOptionId) : Map();\n\n                    // need to check the size and do a delete when 0 so the option won't show as\n                    // an exclusion with an \"excluded option\", but no \"exclusion options\"\n                    // would cause exclusion display in the config table to have \"undefined\" shown\n                    const newAttributeOptionValue = newExcludeValues.size === 0\n                    ? attributeOptionValue.deleteIn(['exclude', excludeIndex])\n                    : attributeOptionValue.setIn(['exclude', excludeIndex, 'values'], newExcludeValues);\n\n                    return newAttributeOptionValue;\n                  }\n                  return attributeOptionValue;\n                });\n\n                return attributeOption.set('values', newAttributeOptionValues);\n              }\n              return attributeOption;\n            });\n\n            dispatch(change(PRODUCT_CONFIG_FORM, 'attributeOptions', newAttributeOptionsWithUpdatedExclusions));\n            dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAddList', List()));\n            closeExclusionDialog();\n          }}\n        >\n          {t('formButtons.save')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nconst mapStateToProps = (state) => {\n  return {\n    ...createStructuredSelector({\n      formValues: getFormValues(OPTION_EXCLUSION_DIALOG_FORM),\n      configFormValues: getFormValues(PRODUCT_CONFIG_FORM),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setSelectedAttributeId: (attributeId: number) => {\n      dispatch(new SetSelectedAttributeIdAction(attributeId));\n    },\n  };\n};\n\nexport default compose<React.FC<IExclusionDialogComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: OPTION_EXCLUSION_DIALOG_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true,\n  }),\n)(ExclusionDialog);","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, Grid, makeStyles, createStyles, Theme, Checkbox, FormControlLabel } from '@material-ui/core';\nimport { change, InjectedFormProps } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { compose, Dispatch } from 'redux';\nimport { connect } from 'react-redux';\nimport { Map, List, fromJS } from 'immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { IAction } from 'ats-utils/src';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { PRODUCT_CONFIG_FORM } from '../Component';\nimport { applyWholeExclusion } from './exclusionAttributeOptions';\n\ninterface IExclusionDialogComponentProps {\n  wholeExclusionOptionDialogOpen: boolean;\n  wholeExclusionPopperAttributeOptionKey: string;\n  closeWholeExclusionDialog: () => void;\n}\n\ninterface IExclusionDialogProps extends IExclusionDialogComponentProps {\n  formValues: any;\n  dispatch: Dispatch;\n}\n\ntype ExclusionDialogProps = IExclusionDialogProps & InjectedFormProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  dialogContent: {\n    width: 300\n  }\n}));\n\nconst ExclusionDialog: React.FC<ExclusionDialogProps> = props => {\n  const {\n    dispatch,\n    t,\n    closeWholeExclusionDialog,\n    formValues = Map(),\n    wholeExclusionOptionDialogOpen,\n    wholeExclusionPopperAttributeOptionKey,\n  } = props;\n\n  const classes = useStyles();\n\n  const attributeOptions = formValues.get('attributeOptions', Map());\n  const initalList = attributeOptions.getIn([wholeExclusionPopperAttributeOptionKey, 'exclude'], List());\n  const [wholeExcludeList, setWholeExcludeList] = React.useState(initalList);\n\n  React.useEffect(() => {\n    setWholeExcludeList(initalList);\n  }, [initalList]);\n\n  const handleChange = (event, value) => {\n    const checked = event.target.checked;\n\n    const newExcludes = checked\n      ? wholeExcludeList.push(value)\n      : wholeExcludeList.filter(x => {\n        return x.get('attributeId') !== value.get('attributeId');\n      });\n\n    setWholeExcludeList(newExcludes);\n  };\n\n  const handleSave = () => {\n    // null when the key was already reset by a close in progress (backdrop click, or the second\n    // click of a double-click on Save): writing through it would corrupt the form, see the helper.\n    const finalAttributeOptions = applyWholeExclusion(attributeOptions, wholeExclusionPopperAttributeOptionKey, initalList, wholeExcludeList);\n\n    closeWholeExclusionDialog();\n    setWholeExcludeList(initalList);\n    if (finalAttributeOptions) {\n      dispatch(change(PRODUCT_CONFIG_FORM, `attributeOptions`, finalAttributeOptions));\n    }\n  };\n\n  const handleCancel = () => {\n    closeWholeExclusionDialog();\n    setWholeExcludeList(initalList);\n  };\n\n  const filteredAttributeOptions = attributeOptions.filter(x => {\n    return x.get('attributeKey') !== wholeExclusionPopperAttributeOptionKey;\n  });\n\n  // wholeExclusionPopperAttributeOptionKey is needed as the closeWholeExclusionDialog() will set the key back to empty string\n  // will cause a flash of all the attributeOptions\n  const checkboxes = wholeExclusionPopperAttributeOptionKey && filteredAttributeOptions.map((attributeOption, index) => {\n    const name = attributeOption.get('name');\n    const attributeId = attributeOption.get('attributeId');\n    const attributeKey = attributeOption.get('attributeKey');\n\n    const checked = wholeExcludeList.find((exclude) => exclude.get('attributeId') === attributeId);\n    const value = fromJS({\n      attributeId,\n      attributeKey,\n      name,\n    });\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        key={index}\n      >\n        <FormControlLabel\n          control={\n            <Checkbox\n              checked={checked ? true : false}\n              onChange={(e) => handleChange(e, value)}\n              value={value}\n            />\n          }\n          label={name}\n        />\n      </Grid>\n    );\n  }).valueSeq().toArray();\n\n  return (\n    <Dialog\n      open={wholeExclusionOptionDialogOpen}\n      onClose={handleCancel}\n      aria-labelledby='add-options-exclusion-title'\n      scroll='body'\n      >\n      <DialogTitle id='add-options-exclusion-title'>\n        {t('configuratorPage.optionsWidget.exclusionDialogTitle')}\n      </DialogTitle>\n      <DialogContent\n        className={classes.dialogContent}\n      >\n        {checkboxes}\n      </DialogContent>\n\n      <DialogActions>\n        <Button\n          onClick={handleCancel}\n          color='primary'\n        >\n          {t('formButtons.cancel')}\n        </Button>\n        <Button\n          color='primary'\n          onClick={handleSave}\n        >\n          {t('formButtons.save')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nconst mapStateToProps = (state) => {\n  return {\n    ...createStructuredSelector({\n      formValues: getFormValues(PRODUCT_CONFIG_FORM),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<IExclusionDialogComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(ExclusionDialog);","import { createStyles, Grid, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { createStructuredSelector } from 'reselect';\nimport { BaseFieldProps } from 'redux-form';\nimport { Field, getFormValues } from 'redux-form/immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { FieldTextField } from '../../../../components';\nimport { IFieldTextFieldComponentProps } from '../../../../components/FieldTextField';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../../components/FieldSwitch';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { CONFIG_OPTION_DIALOG_FORM } from './Component';\nimport { makeSelectCanManagePimPricing, makeSelectSite } from '../../../../modules/AtsModule/selectors';\nimport { SiteName } from '../../../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  priceInputContainer: {\n    padding: theme.spacing(0, 1),\n  },\n}));\n\ninterface ISuffixAndPricesComponentProps {\n  suffixPath: string;\n  pricesPath: string;\n  hasOptionDescription: boolean;\n}\ninterface ISuffixAndPricesProps extends ISuffixAndPricesComponentProps {\n  formValues: any;\n  site: SiteName;\n  canManagePimPricing: boolean;\n}\n\ntype SuffixAndPricesProps = ISuffixAndPricesProps & WithTranslation;\n\nconst SuffixAndPrices: React.FC<SuffixAndPricesProps> = (props) => {\n  const {\n    suffixPath,\n    pricesPath,\n    hasOptionDescription,\n    formValues,\n    site,\n    canManagePimPricing,\n    t,\n  } = props;\n\n  const classes = useStyles();\n  const formattedPricesPath = pricesPath.includes('values') ? pricesPath.replace('[', '.').replace(']', '') : pricesPath;\n  const isPOAPath = [...formattedPricesPath.split('.'), 'isPoa'];\n  const isPOA = formValues && formValues.getIn(isPOAPath);\n  const disabled = site === SiteName.pim && !canManagePimPricing;\n\n  const pricesType = [\n    { label: t('configuratorPage.optionsWidget.listPriceLabel'), type: 'list'},\n    { label: t('configuratorPage.optionsWidget.sellPriceLabel'), type: 'sell'},\n    { label: t('configuratorPage.optionsWidget.costPriceLabel'), type: 'cost'}\n  ];\n\n  return (\n    <Grid container={true}>\n      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n        name={`${suffixPath}.suffix`}\n        props={{\n          inputProps: {\n            disabled: hasOptionDescription ? false : true,\n            type: 'text',\n            placeholder: t('configuratorPage.optionsWidget.suffixLabel')\n          },\n          formControlProps: {\n            fullWidth: true\n          },\n        }}\n        component={FieldTextField}\n      />\n      <Grid container={true} item={true} alignItems='center' className={classes.priceInputContainer}>\n        <Tooltip title={disabled ? t('permissions.noPermissionTooltip') : ''}>\n          <span>\n            <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n              name={`${pricesPath}.isPoa`}\n              component={FieldSwitch}\n              props={{\n                label: t('configuratorPage.optionsWidget.priceIsPOA'),\n                inputProps: {\n                  disabled: disabled || !hasOptionDescription ? true : false,\n                  color: 'primary',\n                }\n              }}\n            />\n          </span>\n        </Tooltip>\n        <Tooltip title={t('configuratorPage.optionsWidget.priceIsPOATooltip')}>\n          <InfoIcon fontSize='small' color='action' style={{marginLeft: -8, cursor: 'pointer'}} />\n        </Tooltip>\n      </Grid>\n      <Grid container={true}>\n        {\n          pricesType.map((price, index) => (\n            <Grid\n              key={index}\n              item={true}\n              xs={4}\n              className={classes.priceInputContainer}\n            >\n              <Grid>\n                <Typography align='left' variant='subtitle1'>\n                  { price.label }\n                </Typography>\n              </Grid>\n              <Grid>\n                {price.type === 'list' && isPOA\n                ? <Typography align='left' variant='subtitle1' style={{color: 'darkgrey'}}>\n                    { price.label }\n                  </Typography>\n                : <Tooltip title={disabled ? t('permissions.noPermissionTooltip') : ''}>\n                    <span>\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name={`${pricesPath}.${price.type}`}\n                        props={{\n                          inputProps: {\n                            disabled: disabled || !hasOptionDescription ? true : false,\n                            type: 'number',\n                            placeholder: price.label\n                          },\n                          formControlProps: {\n                            fullWidth: true\n                          },\n                        }}\n                        component={FieldTextField}\n                      />\n                    </span>\n                  </Tooltip>\n                }\n              </Grid>\n            </Grid>\n          ))\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  formValues: getFormValues(CONFIG_OPTION_DIALOG_FORM),\n  site: makeSelectSite(),\n  canManagePimPricing: makeSelectCanManagePimPricing(),\n});\n\nexport default compose<React.FC<ISuffixAndPricesComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps,null)\n)(SuffixAndPrices);","import { Button, CircularProgress, createStyles, Divider, Grid, IconButton, ListItem, makeStyles, Theme, Tooltip, Typography, useTheme } from '@material-ui/core';\nimport * as React from 'react';\nimport { BaseFieldProps, change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { Field } from 'redux-form/immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { FieldReactSelect, FieldSwitch, FieldTextField } from '../../../../components';\nimport { fieldReactSelectStyles, IFieldReactSelectComponentProps } from '../../../../components/FieldReactSelect';\nimport { fromJS, isImmutable, List } from 'immutable';\nimport { Filter, PureAttributeOption } from '../../../../models';\nimport SuffixAndPrices from './SuffixAndPrices';\nimport { IMap } from 'ats-utils/src';\nimport PimAttributeOption from '../../../../models/PimAttributeOption';\nimport NoOptionsMessage from '../../../SeriesEditPage/Attributes/NoOptionsMessage';\nimport { connect, useDispatch } from 'react-redux';\nimport { CONFIG_OPTION_DIALOG_FORM } from './Component';\nimport { IFieldTextFieldComponentProps } from '../../../../components/FieldTextField';\nimport { IFieldSwitchComponentProps } from '../../../../components/FieldSwitch';\nimport { createStructuredSelector } from 'reselect';\nimport { compose } from 'redux';\nimport { makeSelectUserHasPimPrintDescriptionAcl } from '../../../../modules/AtsModule/selectors';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { SetOverlayComponentPropsAction } from '../../../../modules/ApplicationModule/actions';\nimport { DESCRIPTION_DIALOG_ID } from '../../../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport { Currency } from '../../../../constants';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../../components/FieldDropzone';\nimport { acceptedMainImageExtensions, mainImageUploadValidation } from '../../../SeriesEditPage/SeriesInfo';\nimport CutsheetDisplay from '../../../SeriesEditPage/OptionsDialog/CutsheetDisplay';\nimport FileLocalizationSelector from '../../../../components/FileLocalizationSelector';\nimport Language from '../../../../models/Language';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  addNewButtonContainer: {\n    alignSelf: 'flex-end'\n  },\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200],\n    }\n  },\n}));\n\ninterface INewOptionDescriptionItemComponentProps {\n  isFetchingAttributeOptions: boolean;\n  pimAttributeOptions: List<IMap<PimAttributeOption>>;\n  attributeOptionAddId: number;\n  attributeOptionValuesAdd: List<IMap<PimAttributeOption>>;\n  attributeDescriptionAddId: number;\n  immutableDescriptionOptionValueAdd: IMap<PimAttributeOption>;\n  immutableAttributeOption: IMap<PimAttributeOption>;\n  categoryId: number;\n  isCheckbox: boolean;\n  brandFilter: any;\n  selectedCurrency: Currency;\n  isPimTool: boolean;\n  canManageAttributeManagement: boolean;\n  originalSeriesDeletedOptionValueIds: List<number>;\n  formUseSwatch: boolean;\n  formUseImage: boolean;\n  formUseSpec: boolean;\n  selectedLanguage: Language;\n  isCategoryLocked: boolean;\n  getAttributeOptions: (categoryId: number, attributeId: number, filters?: Filter) => void;\n  setSelectedAttributeId: (attributeId: number) => void;\n  setToBeRevokeObjectURLs: (value: React.SetStateAction<List<any>>) => void;\n  openDialog: () => void;\n  setSelectedLanguage: (language: Language) => void;\n}\n\ninterface INewOptionDescriptionItemProps extends INewOptionDescriptionItemComponentProps {\n  formValues: any;\n  hasPimPrintDescriptionAcl: boolean;\n}\n\ntype NewOptionDescriptionItemProps = INewOptionDescriptionItemProps & WithTranslation;\n\nconst NewOptionDescriptionItem: React.FC<NewOptionDescriptionItemProps> = (props) => {\n  const {\n    isFetchingAttributeOptions,\n    pimAttributeOptions,\n    attributeOptionAddId,\n    attributeOptionValuesAdd,\n    attributeDescriptionAddId,\n    immutableDescriptionOptionValueAdd,\n    immutableAttributeOption,\n    categoryId,\n    isCheckbox,\n    brandFilter,\n    selectedCurrency,\n    isPimTool,\n    originalSeriesDeletedOptionValueIds,\n    openDialog,\n    getAttributeOptions,\n    setSelectedAttributeId,\n    setToBeRevokeObjectURLs,\n    formValues,\n    hasPimPrintDescriptionAcl,\n    canManageAttributeManagement,\n    formUseSwatch,\n    formUseImage,\n    formUseSpec,\n    selectedLanguage,\n    setSelectedLanguage,\n    isCategoryLocked,\n    t,\n  } = props;\n\n  const classes = useStyles();\n  const theme = useTheme();\n  const dispatch = useDispatch();\n\n  const [descriptionInputValue, setDescriptionInputValue] = React.useState('');\n\n  const descriptionOptionValues = formValues && formValues.get('descriptionOption');\n\n  const activeStatusFilter = [{\n    'status.name': {\n      'eq': 'active'\n    }\n  }];\n  const searchOptionDescriptions = () => {\n    const optionExclusionIds = attributeOptionValuesAdd.map((option) => {\n      if (option == null) {\n        return;\n      }\n      const immutableOption = isImmutable(option) ? option : fromJS(option);\n      const optionId = immutableOption.get('optionId');\n\n      return optionId === attributeDescriptionAddId ? null : optionId;\n    }).filter(x => x != null);\n\n    const filters: Filter = attributeOptionValuesAdd && {\n      'and': [\n        {\n          'optionId': {\n            'nin': optionExclusionIds.toJS()\n          }\n        },\n        ...brandFilter,\n        ...activeStatusFilter\n      ]\n    };\n\n    if (isCheckbox) {\n      filters.and.push({\n        'optionKey': {\n          'neq': null\n        }\n      });\n    }\n\n    getAttributeOptions(categoryId, attributeOptionAddId, optionExclusionIds.size > 0 ? filters : {\n      'and': [...brandFilter, ...activeStatusFilter]\n    });\n    setSelectedAttributeId(attributeOptionAddId);\n  };\n\n  const removeSwatch = () => {\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.swatch`, null));\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.swatchDropzone`, null));\n  };\n\n  const removeImage = () => {\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.image`, null));\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.imageDropzone`, null));\n  };\n\n  return (\n    <Grid\n      container={true}\n      direction='column'\n    >\n      <Typography variant='caption' noWrap={true}>\n        {t('configuratorPage.optionsWidget.addDescription')}\n      </Typography>\n      <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n        name={'descriptionOption'}\n        component={FieldReactSelect}\n        inputProps={{\n          options: isFetchingAttributeOptions ? [] : (pimAttributeOptions && pimAttributeOptions.toList()),\n          onChange: (option) => {\n            const currentPrice = formValues.getIn(['descriptionOption', 'price']);\n            const currentSuffix = formValues.getIn(['descriptionOption', 'suffix']);\n            const currentExclude = formValues.getIn(['descriptionOption', 'exclude']);\n            const seriesAttributeOptionId = formValues.getIn(['descriptionOption', 'seriesAttributeOptionId']);\n            if (seriesAttributeOptionId) {\n              dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.seriesAttributeOptionId`, seriesAttributeOptionId));\n            }\n            dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.price`, currentPrice));\n            dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.suffix`, currentSuffix));\n            dispatch(change(CONFIG_OPTION_DIALOG_FORM, `descriptionOption.exclude`, currentExclude));\n          },\n          getOptionValue: (option) => option.get('value'),\n          getOptionLabel: (option) => (\n            <Tooltip title={[option.get('description'), option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}>\n              <div>\n                {option.get('description')} - <span className={classes.span}>{[option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}</span>\n              </div>\n            </Tooltip>\n          ),\n          filterOption: (option, inputValue: string) => {\n            const label = option.label.props.title.toLowerCase();\n            return label.includes(inputValue.toLowerCase());\n          },\n          placeholder: t('configuratorPage.optionsWidget.addDescription'),\n          components: {\n            Option: ({value, innerProps, data, label}) => {\n              const hasBeenDeleted = originalSeriesDeletedOptionValueIds?.includes(data.get('optionId'));\n              const disabled = Boolean(hasBeenDeleted && descriptionOptionValues?.getIn(['seriesAttributeOptionId']));\n              return (\n                <ListItem\n                  value={value}\n                  disabled={disabled}\n                  disableGutters={false}\n                  {...innerProps}\n                  className={classes.optionComponentRoot}\n                  style={{ cursor: disabled ? 'default' : 'pointer' }}\n                  onClick={disabled ? (e) => e.stopPropagation() : innerProps.onClick}\n                >\n                  <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                    {label}\n                    {\n                      hasBeenDeleted && (\n                        <Tooltip title={t('configuratorPage.optionsWidget.deletedValueSelectionTooltip')}>\n                          <WarningIcon color='action' />\n                        </Tooltip>\n                      )\n                    }\n                  </Grid>\n                </ListItem>\n              );\n            }\n          },\n          styles: fieldReactSelectStyles(theme),\n          isClearable: true,\n          menuPosition: 'fixed',\n          menuShouldScrollIntoView: false,\n          isDisabled: attributeOptionAddId ? false : true,\n          isLoading: isFetchingAttributeOptions,\n          loadingMessage: () => (\n            <Grid container={true} justify='center' alignContent='center' wrap='nowrap'>\n              <CircularProgress size='1.25rem' style={{ marginRight: 8 }} />\n              {t('generalLoading.searching')}\n            </Grid>\n          ),\n          onInputChange: (val: string) => {\n            setDescriptionInputValue(val);\n          },\n          noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newDescription')} disableButton={isCategoryLocked} onClick={canManageAttributeManagement ? () => {\n            dispatch(new SetOverlayComponentPropsAction({\n              id: DESCRIPTION_DIALOG_ID,\n              props: {\n                description: descriptionInputValue,\n                successCB: (newAttributeOption: IMap<PureAttributeOption>) => {\n                  const newAttributeOptionId = newAttributeOption.get('id');\n                  // searchOptions(seriesCategoryId, formAttributeId, brandOnlyFilter);\n\n                  const convertedAttributeOption = fromJS({\n                    optionId: newAttributeOptionId,\n                    optionKey: newAttributeOption.get('key'),\n                    description: newAttributeOption.get('description'),\n                    unit: newAttributeOption.get('unit'),\n                    value: newAttributeOption.get('value'),\n                    seriesAttributeOptionId: formValues.getIn(['descriptionOption', 'seriesAttributeOptionId']) ?? null,\n                  });\n\n                  // pre-populate feature modal form with new attribute option description\n                  dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption', convertedAttributeOption));\n                  // dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'printDescription.csi', null));\n                }\n              }\n            }));\n            openDialog();\n          } : null} />,\n          onFocus: () => searchOptionDescriptions()\n        }}\n        formControlProps={{\n          fullWidth: true\n        }}\n      />\n\n      {hasPimPrintDescriptionAcl && isPimTool &&\n        <Grid\n          item={true}\n        >\n          <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n            name='descriptionOption.displayPrintDescription'\n            component={FieldSwitch}\n            props={{\n              label: t('SeriesDetailPage.displayPrintDescription'),\n              inputProps: {\n                color: 'primary',\n                disabled: Boolean(attributeDescriptionAddId) ? false : true,\n              }\n            }}\n          />\n          {descriptionOptionValues && descriptionOptionValues.get('displayPrintDescription') &&\n            <Grid container={true}>\n              <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center'>\n                <Typography>{t('SeriesDetailPage.printDescription')}</Typography>\n                <Button\n                  color='primary'\n                  onClick={() => dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption.printDescription.csi', null))}\n                  disabled={!descriptionOptionValues.getIn(['printDescription', 'csi'])}\n                >{t('formButtons.clear')}</Button>\n              </Grid>\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='descriptionOption.printDescription.csi'\n                props={{\n                  inputProps: {\n                    type: 'text',\n                    multiline: true\n                  },\n                  formControlProps: {\n                    fullWidth: true\n                  }\n                }}\n                component={FieldTextField}\n              />\n            </Grid>\n          }\n        </Grid>\n      }\n      <SuffixAndPrices\n        suffixPath={'descriptionOption'}\n        pricesPath={`descriptionOption.price.default.${selectedCurrency}`}\n        hasOptionDescription={Boolean(attributeDescriptionAddId)}\n      />\n\n      {/* swatch upload */}\n      {formUseSwatch && Boolean(attributeDescriptionAddId) &&\n        <Grid\n          item={true}\n          style={{marginTop: 8, marginBottom: 16}}\n        >\n          <Typography>{t('configuratorPage.optionsWidget.swatchPreview')}</Typography>\n          <Grid container={true} alignItems='flex-end'>\n            <Grid container={true} style={{width: 192, height: 192}}>\n              <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                component={FieldDropzone}\n                name={`descriptionOption.swatchDropzone`}\n                validate={mainImageUploadValidation}\n                props={{\n                  suggestText: t('SeriesDetailPage.uploadSuggest'),\n                  dropzoneInputProps: {\n                    accept: acceptedMainImageExtensions,\n                  },\n                  dropzoneProps: {\n                    onDropAccepted: (fileArray: any[], event) => setToBeRevokeObjectURLs((prevValue) => prevValue.push(fileArray[0].preview))\n                  },\n                  autoRevokeURL: false,\n                }}\n              />\n            </Grid>\n            <IconButton size='small' onClick={() => removeSwatch()}>\n              <Tooltip title={t('formButtons.delete')}>\n                <DeleteIcon />\n              </Tooltip>\n            </IconButton>\n          </Grid>\n        </Grid>\n      }\n      {/* image upload */}\n      {formUseImage && isPimTool && Boolean(attributeDescriptionAddId) &&\n        <Grid item={true} style={{marginTop: 8, marginBottom: 16}}>\n          <Typography>{t('configuratorPage.optionsWidget.productImagePreview')}</Typography>\n          <Grid container={true} alignItems='flex-end'>\n            <Grid container={true} style={{width: 192, height: 192}}>\n              <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                component={FieldDropzone}\n                name={`descriptionOption.imageDropzone`}\n                validate={mainImageUploadValidation}\n                props={{\n                  suggestText: t('SeriesDetailPage.uploadSuggest'),\n                  dropzoneInputProps: {\n                    accept: acceptedMainImageExtensions\n                  }\n                }}\n              />\n            </Grid>\n            <IconButton size='small' onClick={() => removeImage()}>\n              <Tooltip title={t('formButtons.delete')}>\n                <DeleteIcon />\n              </Tooltip>\n            </IconButton>\n          </Grid>\n        </Grid>\n      }\n      {/* cutsheet upload */}\n      {formUseSpec && isPimTool && Boolean(attributeDescriptionAddId) &&\n        <Grid item={true} style={{marginTop: 8, marginBottom: 16}}>\n          <Grid container={true} spacing={1} alignItems='center' justify='space-between'>\n            <CutsheetDisplay\n              formName={CONFIG_OPTION_DIALOG_FORM}\n              formFilePathArray={['descriptionOption', 'optionBasedManufacturerCutsheet']}\n              formFilePathString={`descriptionOption.optionBasedManufacturerCutsheet`}\n              selectedLanguage={selectedLanguage}\n              index={-1}\n            />\n          </Grid>\n          <Divider />\n          <Grid container={true} spacing={1} justify='flex-end'>\n            <FileLocalizationSelector\n              selectedLanguage={selectedLanguage}\n              setSelectedLanguage={(_selectedLanguage) => setSelectedLanguage(_selectedLanguage)}\n              container={true}\n              direction={'row'}\n              justify={'flex-end'}\n              color={'textSecondary'}\n              variant={'caption'}\n              labelStyle={{marginRight: 16}}\n            />\n          </Grid>\n        </Grid>\n      }\n\n      <Grid\n        className={classes.addNewButtonContainer}\n      >\n        <Button\n          disabled={attributeDescriptionAddId ? false : true}\n          color='primary'\n          onClick={() => {\n            const newAttributeOptionValues = attributeOptionValuesAdd && attributeOptionValuesAdd.size !== 0\n            ? attributeOptionValuesAdd.push(immutableDescriptionOptionValueAdd)\n            : List().push(immutableDescriptionOptionValueAdd);\n\n            const newAttributeOption = immutableAttributeOption.set('values', newAttributeOptionValues);\n\n            // setTimeout(() => dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption', newAttributeOption)), 100);\n            dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption', newAttributeOption));\n            dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption', null));\n          }}\n        >\n          {t('configuratorPage.optionsWidget.addNewOptionButton')}\n        </Button>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  return {\n    ...createStructuredSelector({\n      formValues: getFormValues(CONFIG_OPTION_DIALOG_FORM),\n      hasPimPrintDescriptionAcl: makeSelectUserHasPimPrintDescriptionAcl()\n    })(state)\n  };\n};\n\nexport default compose<React.FC<INewOptionDescriptionItemComponentProps>>(\n  connect(mapStateToProps, null),\n  withTranslation('translations'),\n)(NewOptionDescriptionItem);","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, Grid, useTheme, Typography, Tooltip, makeStyles, createStyles, Theme, Paper, IconButton, ListItem, CircularProgress, Divider } from '@material-ui/core';\nimport { BaseFieldProps, change, touch, InjectedFormProps, stopSubmit, reset } from 'redux-form';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport { DeleteModal, FieldRadio } from '../../../../components';\nimport { compose, Dispatch } from 'redux';\nimport { connect } from 'react-redux';\nimport { List, fromJS, OrderedMap, isImmutable, Map, getIn } from 'immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { SearchAttributeOptionsAction, SearchAttributesAction, SetSelectedAttributeIdAction } from '../../../../modules/PimModule/actions';\nimport { makeSelectPimAttributes, makeSelectPimAttributeOptionsBySelectedAttributeId, makeSelectIsFetchingAttributeOptions } from '../../../../modules/PimModule/selectors';\nimport { Category, Filter, PureAttribute, PureAttributeOption, Series } from '../../../../models';\nimport PimAttribute from '../../../../models/PimAttribute';\nimport PimAttributeOption from '../../../../models/PimAttributeOption';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { PRODUCT_CONFIG_FORM } from '../../Component';\nimport { IFieldRadioComponentProps } from '../../../../components/FieldRadio';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../../components/FieldSwitch';\nimport { DragDropContext, Draggable, Droppable, DropResult, ResponderProvided } from 'react-beautiful-dnd';\nimport HeightIcon from '@material-ui/icons/Height';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport ReactDOM from 'react-dom';\nimport { IAttributeWithOptionValues } from '../Options';\nimport FieldReactSelect, { fieldReactSelectStyles, IFieldReactSelectComponentProps } from '../../../../components/FieldReactSelect';\nimport NoOptionsMessage from '../../../SeriesEditPage/Attributes/NoOptionsMessage';\nimport SuffixAndPrices from './SuffixAndPrices';\nimport NewOptionDescriptionItem from './NewOptionDescriptionItem';\nimport { required } from '../../../../validators';\nimport { FieldDropzoneStateResetAction, SetOptionDialogStateAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../../modules/ApplicationModule/actions';\nimport { Currency } from '../../../../constants';\nimport { ATTRIBUTE_DIALOG_ID } from '../../../../containers/PimAttributesListPage/AttributeDialog';\nimport { DESCRIPTION_DIALOG_ID } from '../../../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../../components/FieldTextField';\nimport { makeSelectCanManageAttributeManagement, makeSelectIsPimTool, makeSelectUserHasFeatOptionBasedCutsheets, makeSelectUserHasFeatOptionBasedImages, makeSelectUserHasPimPrintDescriptionAcl } from '../../../../modules/AtsModule/selectors';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../../components/FieldDropzone';\nimport { acceptedMainImageExtensions, mainImageUploadValidation } from '../../../SeriesEditPage/SeriesInfo';\nimport Xhr from '../../../../utils/Xhr';\nimport Api from 'ats-api/src';\nimport { withAtsApi } from '../../../../contexts';\nimport { makeSelectCategory } from '../../../../modules/AccountModule/selectors';\nimport CutsheetDisplay from '../../../SeriesEditPage/OptionsDialog/CutsheetDisplay';\nimport Language from '../../../../models/Language';\nimport FileLocalizationSelector from '../../../../components/FileLocalizationSelector';\nimport { makeSelectOptionDialogState } from '../../../../modules/ApplicationModule/selectors';\n\nexport const CONFIG_OPTION_DIALOG_FORM = 'ConfigOptionDialogForm';\n\nconst portal: HTMLElement = document.createElement('div');\n\nif (!document.body) {\n  throw new Error('body not ready for portal creation!');\n}\n\ndocument.body.appendChild(portal);\n\nconst LEFT_COLUMN_WIDTH = 32;\n\ninterface IOptionsDialogComponentProps {\n  series: IMap<Series>;\n  selectedCurrency: Currency;\n  addNewAttributeOptionsPopperEditModeKey: string;\n  setAddNewAttributeOptionsPopperEditModeKey: (key: string) => void;\n}\n\ninterface IOptionsDialogProps extends IOptionsDialogComponentProps {\n  getAttributes: (categoryId: number, filters?: Filter) => void;\n  getAttributeOptions: (categoryId: number, attributeId: number, filters?: Filter) => void;\n  setSelectedAttributeId: (attributeId: number) => void;\n  dispatch: Dispatch;\n  optionsDialogOpen: boolean;\n  formValues: Map<string, any>;\n  configFormValues: Map<string, any>;\n  pimAttributes: List<IMap<PimAttribute>>;\n  pimAttributeOptions: List<IMap<PimAttributeOption>>;\n  isFetchingAttributeOptions: boolean;\n  hasPimPrintDescriptionAcl: boolean;\n  canManageAttributeManagement: boolean;\n  isPimTool: boolean;\n  atsApi: Api;\n  hasFeatOptionBasedImages: boolean;\n  hasFeatOptionBasedCutsheets: boolean;\n  categoriesList: List<IMap<Category>>;\n}\n\ntype OptionsDialogProps = IOptionsDialogProps & InjectedFormProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  addedOptionInputs: {\n    padding: theme.spacing(),\n    marginTop: theme.spacing(),\n    'border-left': `2px solid ${theme.palette.secondary.light}`\n  },\n  optionsInput: {\n    padding: theme.spacing(),\n    marginTop: theme.spacing(),\n  },\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200],\n    }\n  },\n  effectedListContainer: {\n    maxHeight: '150px',\n    overflowY: 'auto',\n    margin: theme.spacing(1.5, 0)\n  },\n  warning: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing()\n  },\n}));\n\n\nconst OptionsDialog: React.FC<OptionsDialogProps> = props => {\n  const {\n    series,\n    formValues = Map(),\n    configFormValues = Map(),\n    selectedCurrency,\n    optionsDialogOpen,\n    pimAttributes,\n    pimAttributeOptions,\n    isFetchingAttributeOptions,\n    hasPimPrintDescriptionAcl,\n    isPimTool,\n    atsApi,\n    addNewAttributeOptionsPopperEditModeKey,\n    canManageAttributeManagement,\n    setAddNewAttributeOptionsPopperEditModeKey,\n    getAttributes,\n    getAttributeOptions,\n    setSelectedAttributeId,\n    dispatch,\n    handleSubmit,\n    hasFeatOptionBasedImages,\n    hasFeatOptionBasedCutsheets,\n    categoriesList,\n    t,\n  } = props;\n\n  const [attributeInputValue, setAttributeInputValue] = React.useState('');\n  const [descriptionInputValue, setDescriptionInputValue] = React.useState('');\n  const [optionsPopperError, setOptionsPopperError] = React.useState('');\n  const [initialAttributeId, setInitialAttributeId] = React.useState(null);\n  const [deleteOptionValueModalOpen, toggleOptionValueDeleteModal] = React.useState(false);\n  const [optionValueDescriptionsWithEffect, setOptionValueDescriptionsWithEffect] = React.useState([]);\n  const [newOptionValues, setNewOptionValues] = React.useState(null);\n  const [toBeRevokeObjectURLs, setToBeRevokeObjectURLs] = React.useState(List());\n  const [newlyDeletedOptionValueIds, setNewlyDeletedOptionValueIds] = React.useState([]);\n  const [selectedLanguage, setSelectedLanguage] = React.useState<Language>('en');\n  const [bypassFrozenCategory, setBypassFrozenCategory] = React.useState(false);\n\n  React.useEffect(() => {\n    if (optionsDialogOpen) {\n      setInitialAttributeId(attributeOptionAddId);\n      searchAttributes();\n      setSelectedLanguage('en');\n    } else {\n      // console.log(toBeRevokeObjectURLs.toJS());\n      toBeRevokeObjectURLs.map((url) => URL.revokeObjectURL(url));\n      setInitialAttributeId(null);\n    }\n  },[optionsDialogOpen]);\n\n  React.useEffect(() => {\n    searchAttributes();\n  }, [initialAttributeId]);\n\n  const usePrevious = <T extends unknown>(value: T): T | undefined => {\n    const ref = React.useRef<T>();\n    React.useEffect(() => {\n      ref.current = value;\n    }, [value]);\n    return ref.current;\n  };\n\n  const classes = useStyles();\n  const theme = useTheme();\n\n  const isAccessFeatSwatches = isPimTool;\n\n  const attributeName = formValues?.getIn(['attributeOption', 'name']) ?? '';\n\n  const attributeKey = formValues?.getIn(['attributeOption', 'attributeKey']);\n  const originalSeriesOptionValues = attributeKey && series?.getIn(['attributes', attributeKey, 'values']);\n  const originalSeriesDeletedOptionValueIds = originalSeriesOptionValues?.filter((value) => value.get('status') === 'deleted')?.map((value) => value.get('id'));\n\n  const categoryId = configFormValues.getIn(['categoryName', 'id']);\n  const isCategoryLocked = categoriesList.find(category => category.get('id') === categoryId)?.get('isLocked');\n  const manufacturerId = configFormValues.getIn(['manufacturer', 'id']);\n\n  const attributeOptionAddId = formValues.getIn(['attributeOption', 'attributeId']);\n  const attributeOptionValuesAdd: List<IMap<PimAttributeOption>> = formValues.getIn(['attributeOption', 'values'], List())?.filter( value => value.get('status') !== 'deleted');\n  const attributeOptionValuesAddCount: number = attributeOptionValuesAdd ? attributeOptionValuesAdd.count() : 0;\n  const attributeDescriptionAddId: number = formValues.getIn(['descriptionOption', 'optionId']);\n\n  const descriptionOptionValueAdd = formValues.get('descriptionOption') && formValues.get('descriptionOption').set('status', 'active');\n  const immutableDescriptionOptionValueAdd = isImmutable(descriptionOptionValueAdd)\n    ? descriptionOptionValueAdd\n    : fromJS(descriptionOptionValueAdd);\n\n  const attributeOption = formValues.getIn(['attributeOption']);\n  const immutableAttributeOption = isImmutable(attributeOption) ? attributeOption : fromJS(attributeOption);\n\n  const isCheckbox = formValues.get('isCheckbox');\n  const require = formValues.get('attributeOptionRequire');\n  const formDisplayAsAttribute = formValues.getIn(['attributeOption', 'displayAsAttribute']) ?? false;\n  const formUseSwatch = formValues.getIn(['attributeOption', 'useSwatch']) && isAccessFeatSwatches;\n  const formUseImage = formValues.getIn(['attributeOption', 'enableOptionBasedProductImage']) && hasFeatOptionBasedImages;\n  const formUseSpec = formValues.getIn(['attributeOption', 'enableOptionBasedManufacturerCutsheet']) && hasFeatOptionBasedCutsheets;\n  const formUseAsProductImage = formValues.getIn(['attributeOption', 'declareOptionBasedProductImageAsFinal']);\n  const formUseAsProductSpec = formValues.getIn(['attributeOption', 'declareOptionBasedManufacturerCutsheetAsFinal']);\n  const seriesAttributeOptions = configFormValues.get('attributeOptions') || Map();\n  const foundOtherCurrentFinalProductImageOption = seriesAttributeOptions.find(attr => attr.get('declareOptionBasedProductImageAsFinal') && attr.get('attributeId') !== attributeOptionAddId);\n  const foundOtherCurrentFinalProductCutsheetOption = seriesAttributeOptions.find(attr => attr.get('declareOptionBasedManufacturerCutsheetAsFinal') && attr.get('attributeId') !== attributeOptionAddId);\n\n  const lastValidDNDIndex: number = (descriptionOptionValueAdd && attributeOptionValuesAddCount) ? attributeOptionValuesAddCount : null;\n  const addedOptionDragableDisabled: boolean = !Boolean(attributeOptionValuesAddCount > 1 || lastValidDNDIndex);\n\n  const brandFilter = manufacturerId\n    ? [{\n        'manufacturerId': {\n          'eq': manufacturerId\n        }\n      }]\n    : [];\n  // const brandOnlyFilter = {\n  //   'and': [\n  //     ...brandFilter\n  //   ]\n  // };\n  const activeStatusFilter = [{\n    'status.name': {\n      'eq': 'active'\n    }\n  }];\n  const descriptionCount = (attributeOptionValuesAdd || List()).filter(description => description).count() + (attributeDescriptionAddId ? 1 : 0);\n\n  const prevValues = usePrevious({ isCheckbox, descriptionCount, attributeOptionValuesAdd, attributeDescriptionAddId, attributeOptionAddId });\n  React.useEffect(() => {\n    if (\n      prevValues &&\n      ((!prevValues.attributeOptionAddId && attributeOptionAddId) // reset error when selecting a valid attribute\n      || (!prevValues.isCheckbox && isCheckbox) // reset error when changing from radio to checkbox\n      || (!isCheckbox && prevValues.descriptionCount < 2 && descriptionCount >= 2) // reset error when added enough descriptions(2+) for radio\n      || (isCheckbox && prevValues.descriptionCount < 1 && descriptionCount >= 1)) // reset error when added enough descriptions(1+) for checkbox\n    ) {\n      setOptionsPopperError('');\n    }\n  }, [isCheckbox, descriptionCount, attributeOptionValuesAdd, attributeDescriptionAddId, attributeOptionAddId]);\n\n  React.useEffect(() => {\n    if (isCategoryLocked && attributeOptionAddId && pimAttributes) {\n      const selectedAttribute = pimAttributes.find(attr => attr.get('attributeId') === attributeOptionAddId);\n      if (selectedAttribute?.get('allowOverride')) {\n        setBypassFrozenCategory(true);\n      }\n    } else {\n      setBypassFrozenCategory(false);\n    }\n  }, [attributeOptionAddId, pimAttributes]);\n\n  const closeOptionPopper = () => {\n    setOptionsPopperError('');\n    setAddNewAttributeOptionsPopperEditModeKey('');\n    dispatch(new SetOptionDialogStateAction(fromJS({\n      open: false,\n    })));\n    setOptionValueDescriptionsWithEffect([]);\n    setNewOptionValues(null);\n    dispatch(reset(CONFIG_OPTION_DIALOG_FORM));\n  };\n\n  const removeSwatch = (index: number) => {\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}].swatch`, null));\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}].swatchDropzone`, null));\n  };\n\n  const removeImage = (index: number) => {\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}].optionBasedProductImage`, null));\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}].imageDropzone`, null));\n  };\n\n  const onDragEnd = (result: DropResult, provider: ResponderProvided) => {\n    if (!result.destination) {\n      return;\n    }\n    if (result.destination.index === result.source.index) {\n      return;\n    }\n\n    if (result.source.index === lastValidDNDIndex) {\n      const newAttributeOptionValuesAdd = attributeOptionValuesAdd\n                                            .insert(result.destination.index, descriptionOptionValueAdd)\n                                            .pop();\n      const newDescriptionOptionValueAdd = attributeOptionValuesAdd.get(-1);\n\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.values', newAttributeOptionValuesAdd));\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption', newDescriptionOptionValueAdd));\n\n    } else if (result.destination.index === lastValidDNDIndex) {\n      const newDescriptionOptionValueAdd = attributeOptionValuesAdd.get(result.source.index);\n      const newAttributeOptionValuesAdd = attributeOptionValuesAdd\n                                            .splice(result.source.index, 1)\n                                            .push(descriptionOptionValueAdd);\n\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.values', newAttributeOptionValuesAdd));\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption', newDescriptionOptionValueAdd));\n\n    } else {\n      const removed = attributeOptionValuesAdd.get(result.source.index);\n      const attributeOptionValuesAddWithoutRemoved = attributeOptionValuesAdd.splice(result.source.index, 1);\n      const newAttributeOptionValuesAdd = attributeOptionValuesAddWithoutRemoved.splice(result.destination.index, 0, removed);\n\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.values', newAttributeOptionValuesAdd));\n    }\n  };\n\n  const searchAttributes = (val?: string) => {\n    if (categoryId) {\n      const attributes = configFormValues.getIn(['attributes']);\n      const attributeOptions = configFormValues.getIn(['attributeOptions']);\n      const isOption = formValues.getIn(['attributeOption', 'isOption']);\n\n      const attributeIds = attributes && attributes\n        .filter((attr) => attr.get('values')?.some((value) => value.get('status') !== 'deleted'))\n        .reduce((acc, attribute) => {\n          return acc.push(attribute.getIn(['id']) || attribute.getIn(['attributeId']));\n        }, List());\n\n      const attributeOptionIds = attributeOptions && attributeOptions.reduce((acc, _attributeOption) => {\n        const notEntireAttributeDescriptionDeleted = _attributeOption.get('values').find(value => value.get('status') !== 'deleted');\n        const _attributeOptionId = _attributeOption.getIn(['attributeId']);\n        if (notEntireAttributeDescriptionDeleted && _attributeOptionId !== initialAttributeId && _attributeOptionId !== attributeOptionAddId) {\n          return acc.push(_attributeOption.getIn(['attributeId']));\n        } else {\n          return acc;\n        }\n      }, List());\n\n      const filters: any = [\n        {\n          'manufacturerId': {\n              'eq': manufacturerId\n          }\n        }\n      ];\n\n      if ((attributeIds && attributeIds.size !== 0) || (attributeOptionIds && attributeOptionIds.size !== 0)) {\n        const exclusionIds = [\n          ... attributeIds ? attributeIds.toJS() : [],\n          ... attributeOptionIds ? attributeOptionIds.toJS() : [],\n        ];\n\n        filters.push({\n          'attributeId': {\n            'nin': exclusionIds\n          }\n        });\n      }\n\n      if (isOption) {\n        filters.push({\n          'optionKey': {\n            'neq': null\n          }\n        });\n      }\n\n      if (val) {\n        filters.push({\n          'or': [\n            {\n              'attributeKey': {\n                  'like': val\n              }\n            },\n            {\n              'name': {\n                'like': val\n              }\n            }\n          ]\n        });\n      }\n\n      getAttributes(categoryId, { and: filters });\n    }\n  };\n\n  const handleAttributeOptionDelete = (index: number) => {\n    const newAttributeOption = formValues\n                                .getIn(['attributeOption'])\n                                .deleteIn(['values', index]);\n\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption', newAttributeOption));\n\n    // prevent this option from being replaced to other fields\n    const isDeletedFromOriginalSeriesOptionValues = originalSeriesOptionValues?.find((optionValue) => optionValue.get('id') === formValues.getIn(['attributeOption', 'values', index, 'optionId']));\n    if (isDeletedFromOriginalSeriesOptionValues) {\n      setNewlyDeletedOptionValueIds([...newlyDeletedOptionValueIds, formValues.getIn(['attributeOption', 'values', index, 'optionId'])]);\n    }\n  };\n\n  const onDescriptionFocus = (index: number) => {\n    const currentSelectedOption = attributeOptionValuesAdd.get(index);\n    const immutablecurrentSelectedOption = isImmutable(currentSelectedOption) ? currentSelectedOption : fromJS(currentSelectedOption);\n    const currentSelectedOptionId = immutablecurrentSelectedOption && immutablecurrentSelectedOption.get('optionId');\n\n    // since there is already a value, when editing we need to take the id out of the array suing the currentSelectedOptionId\n    // this way you are able to change it to another overwrite by the currentSelectedOptionId\n\n    const attributeOptionValuesAddWithImmutableDescriptionOptionValueAdd = immutableDescriptionOptionValueAdd\n      ? attributeOptionValuesAdd.push(immutableDescriptionOptionValueAdd)\n      : attributeOptionValuesAdd;\n\n    const optionExclusionIds = attributeOptionValuesAddWithImmutableDescriptionOptionValueAdd && attributeOptionValuesAddWithImmutableDescriptionOptionValueAdd.map((option) => {\n      const immutableOption = isImmutable(option) ? option : fromJS(option);\n      const optionId = immutableOption && immutableOption.get('optionId');\n\n      return optionId === currentSelectedOptionId ? null : optionId;\n    }).filter(x => x != null);\n\n    const filters: Filter = attributeOptionValuesAdd && {\n      'and': [\n        {\n          'optionId': {\n            'nin': optionExclusionIds.toJS()\n          }\n        },\n        ...brandFilter,\n        ...activeStatusFilter\n      ]\n    };\n\n    if (isCheckbox) {\n      filters.and.push({\n        'optionKey': {\n          'neq': null\n        }\n      });\n    }\n\n    getAttributeOptions(categoryId, attributeOptionAddId, optionExclusionIds.size > 0 ? filters : {\n      'and': [...brandFilter, ...activeStatusFilter]\n    });\n    setSelectedAttributeId(attributeOptionAddId);\n  };\n\n  const checkAddToSeries = async (values) => {\n    if (typeof attributeOptionAddId !== 'number') {\n      setOptionsPopperError('configuratorPage.optionsWidget.noAttributeErrorMessage');\n      dispatch(touch(CONFIG_OPTION_DIALOG_FORM, 'attributeOption'));\n      dispatch(stopSubmit(\n        CONFIG_OPTION_DIALOG_FORM,\n      ));\n      return;\n    }\n\n    const descriptionOptionValues = await Promise.all(values\n      .getIn(['attributeOption', 'values'], List())\n      .filter( value => value.get('status') !== 'deleted')\n      ?.withMutations( ctx => {\n        ctx.forEach( (value, index) => {\n          // delete the display switch value\n          ctx.deleteIn([index, 'displayPrintDescription']);\n          // turn map back to null value if csi value is not valid\n          if (!value.getIn(['printDescription', 'csi'])) {\n            ctx.setIn([index, 'printDescription'], null);\n          }\n        });\n      })\n      ?.map(async (value) => {\n        let _imageArray;\n        if (value.get('swatchDropzone')) {\n          _imageArray = await Xhr({ atsApi, files: value.get('swatchDropzone') });\n        }\n        const imageId = getIn(_imageArray, [0, 'id'], '') || value.get('swatch');\n        let _productImageArray;\n        if (value.get('imageDropzone')) {\n          _productImageArray = await Xhr({ atsApi, files: value.get('imageDropzone') });\n        }\n        const productImageId = getIn(_productImageArray, [0, 'id'], '') || value.get('optionBasedProductImage');\n        const valueWithSwatchFileId = !imageId ? value : value.delete('swatchDropzone').set('swatch', imageId || null);\n        const valueWithSwatchProductImageFileId = !productImageId ? valueWithSwatchFileId : valueWithSwatchFileId.delete('imageDropzone').set('optionBasedProductImage', productImageId || null);\n        dispatch(new FieldDropzoneStateResetAction());\n        return value.get('status') ? valueWithSwatchProductImageFileId : valueWithSwatchProductImageFileId.set('status', 'active');\n      }));\n    const immutableDescriptionOptionValues = isImmutable(descriptionOptionValues)\n      ? descriptionOptionValues\n      : fromJS(descriptionOptionValues);\n\n    const immutableDescriptionOptionValuesFiltered = immutableDescriptionOptionValues\n      .filter(x => x != null)\n      .map(description => !description.get('price') ? description : description.set('price', description.get('price').withMutations(region => {\n        region.forEach((regionCurrency, index) => {\n          regionCurrency.forEach((priceObj, _index) => {\n            priceObj.forEach((actualPrice, priceIndex) => {\n              if (actualPrice === '') {\n                return region.setIn([index, _index, priceIndex], null);\n              }\n            });\n          });\n        });\n      })));\n\n    // dropzone fileId on added description block\n    let immutableDescriptionOptionValueAddWithSwatchProductImageFileId = immutableDescriptionOptionValueAdd;\n    if (immutableDescriptionOptionValueAdd && (immutableDescriptionOptionValueAdd.get('swatchDropzone') || immutableDescriptionOptionValueAdd.get('imageDropzone'))) {\n      const imageArray = await Xhr({ atsApi, files: immutableDescriptionOptionValueAdd?.get('swatchDropzone') });\n      const imageId = getIn(imageArray, [0, 'id'], '') || immutableDescriptionOptionValueAdd?.get('swatch');\n      const productImageArray = await Xhr({ atsApi, files: immutableDescriptionOptionValueAdd?.get('imageDropzone') });\n      const productImageId = getIn(productImageArray, [0, 'id'], '') || immutableDescriptionOptionValueAdd?.get('optionBasedProductImage');\n      const immutableDescriptionOptionValueAddWithSwatchFileId = !imageId ? immutableDescriptionOptionValueAdd : immutableDescriptionOptionValueAdd?.delete('swatchDropzone')?.set('swatch', imageId || null);\n      immutableDescriptionOptionValueAddWithSwatchProductImageFileId = !productImageId ? immutableDescriptionOptionValueAddWithSwatchFileId : immutableDescriptionOptionValueAddWithSwatchFileId?.delete('imageDropzone')?.set('optionBasedProductImage', productImageId || null);\n      dispatch(new FieldDropzoneStateResetAction());\n    }\n\n    const descriptionOptionValuesWithOrWithoutImmutableDescriptionOptionValueAdd = immutableDescriptionOptionValueAdd\n      ? immutableDescriptionOptionValuesFiltered.push(immutableDescriptionOptionValueAddWithSwatchProductImageFileId)\n      : immutableDescriptionOptionValuesFiltered;\n\n    const attributeOptions: OrderedMap<string, IMap<IAttributeWithOptionValues>> = configFormValues.get('attributeOptions', OrderedMap());\n    const attributeOptionKey = immutableAttributeOption.get('attributeKey');\n\n    const newAttributeOption = immutableAttributeOption\n      .set('values', descriptionOptionValuesWithOrWithoutImmutableDescriptionOptionValueAdd)\n      .set('isOption', isCheckbox);\n\n    const newAttributeOptionWithRequire = newAttributeOption.set('require', require);\n\n    const newAttributeOptionWithRequireFilteredValues = newAttributeOptionWithRequire.get('values').filter(optionValue => {\n      const optionId = isImmutable(optionValue) ? optionValue.get('optionId') : optionValue.optionId;\n      return optionId ? true : false;\n    });\n\n    const newAttributeOptionWithRequireFiltered = newAttributeOptionWithRequire.set('values', newAttributeOptionWithRequireFilteredValues);\n\n    const newAttributeOptions = addNewAttributeOptionsPopperEditModeKey\n      ? attributeOptions.set(addNewAttributeOptionsPopperEditModeKey, newAttributeOptionWithRequireFiltered)\n      : attributeOptions.set(attributeOptionKey, newAttributeOptionWithRequireFiltered);\n\n    const newAttributesWithChangedKey = addNewAttributeOptionsPopperEditModeKey\n      ? newAttributeOptions.mapEntries(([key, value], index) => {\n          if (key === addNewAttributeOptionsPopperEditModeKey) {\n            return [attributeOptionKey, value];\n          } else {\n            return [key, value];\n          }\n        })\n      : newAttributeOptions;\n    if (newAttributesWithChangedKey.getIn([attributeOptionKey, 'values']).size <= 1 && isCheckbox === false) {\n      setOptionsPopperError('configuratorPage.optionsWidget.radioOptionsErrorMessage');\n      return;\n    } else if (newAttributesWithChangedKey.getIn([attributeOptionKey, 'values']).size === 0 && isCheckbox === true) {\n      setOptionsPopperError('configuratorPage.optionsWidget.checkboxOptionsErrorMessage');\n      return;\n    }\n    // if set as final image is true and there is existing final image option or if set as final cutsheet is true, and there is existing final cutsheet option\n    // then override the existing option to false\n    let updatedNewAttributesWithOverride = newAttributesWithChangedKey;\n    const declareOptionBasedProductImageAsFinal = values.getIn(['attributeOption', 'declareOptionBasedProductImageAsFinal']);\n    const declareOptionBasedManufacturerCutsheetAsFinal = values.getIn(['attributeOption', 'declareOptionBasedManufacturerCutsheetAsFinal']);\n    if ((declareOptionBasedProductImageAsFinal && foundOtherCurrentFinalProductImageOption) || (declareOptionBasedManufacturerCutsheetAsFinal && foundOtherCurrentFinalProductCutsheetOption)) {\n      updatedNewAttributesWithOverride = newAttributesWithChangedKey.withMutations(ctx => {\n        if (declareOptionBasedProductImageAsFinal && foundOtherCurrentFinalProductImageOption) {\n          const existingFinalImageOptionKey = foundOtherCurrentFinalProductImageOption.get('attributeKey');\n          ctx.setIn([existingFinalImageOptionKey, 'declareOptionBasedProductImageAsFinal'], false);\n        }\n        if (declareOptionBasedManufacturerCutsheetAsFinal && foundOtherCurrentFinalProductCutsheetOption) {\n          const existingFinalCutsheetOptionKey = foundOtherCurrentFinalProductCutsheetOption.get('attributeKey');\n          ctx.setIn([existingFinalCutsheetOptionKey, 'declareOptionBasedManufacturerCutsheetAsFinal'], false);\n        }\n      });\n    }\n    checkMissingValueAndProceed(updatedNewAttributesWithOverride);\n  };\n\n  const checkMissingValueAndProceed = (validatedOptionValues) => {\n    // compare form series attribute option values to form option values to find what is missing\n    const formValueIds = formValues\n                          ?.getIn(['attributeOption', 'values'], List())\n                          .concat(immutableDescriptionOptionValueAdd ? [immutableDescriptionOptionValueAdd] : [])\n                          .filter(value => value && value.get('status') !== 'deleted')\n                          .map(val => val.get('optionId')).toJS();\n    const seriesOptionValues = configFormValues.getIn(['attributeOptions', attributeKey, 'values'], []);\n    const missingOptionValueIds = seriesOptionValues.reduce((acc, optionValue) => { // array of optionIds that the series has but the form does not\n      const optionId = optionValue.get('optionId') || optionValue.get('id');\n      const isDeleted = optionValue.get('status') === 'deleted';\n      if (formValueIds.includes(optionId) || isDeleted) {\n        return acc;\n      } else {\n        setOptionValueDescriptionsWithEffect(current => ([...current, optionValue.getIn(['description'])]));\n        return acc.concat([optionId]);\n      }\n    }, []);\n\n    setNewOptionValues(validatedOptionValues);\n    if (missingOptionValueIds.length ) {\n      toggleOptionValueDeleteModal(true);\n    } else {\n      onSubmit(validatedOptionValues);\n    }\n  };\n\n  const onSubmit = (_newOptionValues?) => {\n    dispatch(change(PRODUCT_CONFIG_FORM, 'attributeOptions', _newOptionValues ?? newOptionValues));\n    closeOptionPopper();\n  };\n\n  const handleDelete = () => {\n    toggleOptionValueDeleteModal(false);\n    onSubmit();\n  };\n\n  const openDialog = (id: string) => () => {\n    dispatch(new ToggleOverlayComponentAction({\n      id,\n      open: true\n    }));\n  };\n\n  const onAttributeChange = (value) => {\n    let newValue = null;\n    if (value) {\n      const attributeId = value.get('attributeId');\n      getAttributeOptions(categoryId, attributeId, {\n        'and': [...brandFilter, ...activeStatusFilter]\n      });\n      setSelectedAttributeId(attributeId);\n      newValue = value\n        .set('isAttribute', false)\n        .set('isOption', isCheckbox)\n        .set('require', require)\n        .set('exclude', List());\n    }\n\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'descriptionOption', null));\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption', newValue));\n  };\n\n  const onOptionTypeChange = (checkValue: boolean) => {\n    dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'isCheckbox', checkValue));\n    if (checkValue && attributeOption) {\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.enableOptionBasedProductImage', false));\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.declareOptionBasedProductImageAsFinal', false));\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.enableOptionBasedManufacturerCutsheet', false));\n      dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.declareOptionBasedManufacturerCutsheetAsFinal', false));\n    }\n  };\n\n  const NewOptionItem = () => (\n    <NewOptionDescriptionItem\n      isFetchingAttributeOptions={isFetchingAttributeOptions}\n      pimAttributeOptions={pimAttributeOptions}\n      attributeOptionAddId={attributeOptionAddId}\n      attributeOptionValuesAdd={attributeOptionValuesAdd}\n      attributeDescriptionAddId={attributeDescriptionAddId}\n      immutableDescriptionOptionValueAdd={immutableDescriptionOptionValueAdd}\n      immutableAttributeOption={immutableAttributeOption}\n      categoryId={categoryId}\n      isCheckbox={isCheckbox}\n      brandFilter={brandFilter}\n      selectedCurrency={selectedCurrency}\n      getAttributeOptions={getAttributeOptions}\n      setSelectedAttributeId={setSelectedAttributeId}\n      setToBeRevokeObjectURLs={setToBeRevokeObjectURLs}\n      openDialog={openDialog(DESCRIPTION_DIALOG_ID)}\n      isPimTool={isPimTool}\n      canManageAttributeManagement={canManageAttributeManagement}\n      originalSeriesDeletedOptionValueIds={originalSeriesDeletedOptionValueIds}\n      formUseSwatch={formUseSwatch}\n      formUseImage={formUseImage}\n      formUseSpec={formUseSpec}\n      isCategoryLocked={isCategoryLocked && !bypassFrozenCategory}\n      selectedLanguage={selectedLanguage}\n      setSelectedLanguage={setSelectedLanguage}\n    />\n  );\n\n  return (\n    <Dialog\n      open={optionsDialogOpen}\n      onClose={closeOptionPopper}\n      aria-labelledby='add-series-attribute-title'\n      fullWidth={true}\n      scroll='body'\n    >\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <DialogTitle id='add-series-attribute-title' style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n          {addNewAttributeOptionsPopperEditModeKey ? t('configuratorPage.optionsWidget.editOptionsDialogTitle') : t('configuratorPage.optionsWidget.addOptionsDialogTitle')}\n        </DialogTitle>\n        <DialogContent>\n          <Grid\n            container={true}\n            direction='column'\n          >\n            <Grid style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n              <Typography\n                variant='caption'\n              >\n                {t('configuratorPage.optionsWidget.optionType')}\n              </Typography>\n              <Grid\n                container={true}\n                direction='row'\n              >\n                <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                  name='isCheckbox'\n                  component={FieldRadio}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.radioButtonType'),\n                    color: 'primary',\n                    checkedValue: false,\n                    helperText: false,\n                    onChange: (event) => onOptionTypeChange(false),\n                  }}\n                />\n                <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                  name='isCheckbox'\n                  component={FieldRadio}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.checkboxType'),\n                    color: 'primary',\n                    checkedValue: true,\n                    helperText: false,\n                    onChange: (event) => onOptionTypeChange(true),\n                    value: isCheckbox,\n                  }}\n                />\n              </Grid>\n              <Grid\n                container={true}\n                justify='flex-start'\n              >\n                <Tooltip title={t('configuratorPage.optionsWidget.optionsDialogRequireTooltip')}>\n                  <Grid>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name='attributeOptionRequire'\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.optionsDialogRequireLabel'),\n                        inputProps: {\n                          color: 'primary',\n                        }\n                      }}\n                    />\n                  </Grid>\n                </Tooltip>\n              </Grid>\n            </Grid>\n\n            <Grid style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n              <Typography variant='caption' noWrap={true}>\n                {t('configuratorPage.optionsWidget.addAttribute')}\n              </Typography>\n              <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                name='attributeOption'\n                component={FieldReactSelect}\n                validate={required}\n                inputProps={{\n                  options: pimAttributes && pimAttributes.toList(),\n                  getOptionValue: (option) => option.get('value'),\n                  getOptionLabel: (option) => (\n                    <div>\n                      {option && option.get('name')} - <span className={classes.span}>{option && option.get('attributeKey')}</span>\n                    </div>\n                  ),\n                  filterOption: ({ data }, inputValue: string) => {\n                    const name: string = data.get('name').toLowerCase();\n                    const _attributeKey: string = data.get('attributeKey').toLowerCase();\n                    return name.includes(inputValue.toLowerCase()) || _attributeKey.includes(inputValue.toLowerCase());\n                  },\n                  placeholder: t('configuratorPage.optionsWidget.addAttribute'),\n                  components: {\n                    Option: option => (\n                      <ListItem value={option.value} disableGutters={false} {...option.innerProps} className={classes.optionComponentRoot}>\n                        {option.label}\n                      </ListItem>\n                    ),\n                  },\n                  styles: fieldReactSelectStyles(theme),\n                  isClearable: true,\n                  menuPosition: 'fixed',\n                  menuShouldScrollIntoView: false,\n                  onInputChange: (val: string, actionMeta) => {\n                    setAttributeInputValue(val);\n                    if (actionMeta.action === 'input-change' || actionMeta.action === 'input-blur') {\n                      searchAttributes(val);\n                    }\n                  },\n                  onChange: (value) => {\n                    onAttributeChange(value);\n                  },\n                  noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newAttribute')} disableButton={isCategoryLocked} onClick={canManageAttributeManagement ? () => {\n                    dispatch(new SetOverlayComponentPropsAction({\n                      id: ATTRIBUTE_DIALOG_ID,\n                      props: {\n                        name: attributeInputValue,\n                        successCB: (newAttribute: IMap<PureAttribute>) => {\n                          const newAttributeId = newAttribute.get('id');\n                          searchAttributes();\n\n                          const convertedAttribute = fromJS({\n                            attributeId: newAttributeId,\n                            attributeKey: newAttribute.get('key'),\n                            name: newAttribute.get('name'),\n                            display: null\n                          });\n                          onAttributeChange(convertedAttribute);\n                        }\n                      }\n                    }));\n                    openDialog(ATTRIBUTE_DIALOG_ID)();\n                  } : null} />,\n                  isDisabled: categoryId && manufacturerId && !addNewAttributeOptionsPopperEditModeKey ? false : true,\n                }}\n                formControlProps={{\n                  fullWidth: true\n                }}\n              />\n            </Grid>\n\n            {\n              isPimTool && <>\n                <Grid style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={`attributeOption.displayAsAttribute`}\n                    component={FieldSwitch}\n                    props={{\n                      label: t('configuratorPage.optionsWidget.optionDisplayAsAttribute'),\n                      inputProps: {\n                        color: 'primary',\n                        disabled: !attributeOption,\n                      }\n                    }}\n                  />\n                </Grid>\n                {\n                  formDisplayAsAttribute && <>\n                    <Grid container={true} wrap='nowrap' style={{ paddingLeft: LEFT_COLUMN_WIDTH }}>\n                      <WarningIcon fontSize='small' className={classes.warning}/>\n                      <Typography variant='caption'>\n                        {t('configuratorPage.optionsWidget.displayAsAttributeWarningText')}\n                      </Typography>\n                    </Grid>\n                    <Grid container={true} wrap='nowrap' style={{ paddingLeft: LEFT_COLUMN_WIDTH }}>\n                      <WarningIcon fontSize='small' className={classes.warning}/>\n                      <Typography variant='caption'>\n                        {t('configuratorPage.optionsWidget.displayAsAttributeWarningText2')}\n                      </Typography>\n                    </Grid>\n                  </>\n                }\n              </>\n            }\n            {isAccessFeatSwatches &&\n              <Grid style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={`attributeOption.useSwatch`}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.optionIncludesSwatches'),\n                    inputProps: {\n                      color: 'primary',\n                      disabled: !attributeOption,\n                    }\n                  }}\n                />\n              </Grid>\n            }\n            {attributeOption && !isCheckbox && hasFeatOptionBasedImages && isPimTool &&\n              <Grid container={true} style={{ paddingLeft: LEFT_COLUMN_WIDTH, marginBottom: 8 }}>\n                <Grid xs={6} item={true}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={`attributeOption.enableOptionBasedProductImage`}\n                    component={FieldSwitch}\n                    props={{\n                      label: t('configuratorPage.optionsWidget.includeProductImages'),\n                      inputProps: {\n                        color: 'primary',\n                        onChange: (e) => {\n                          const checked = e.target.checked;\n                          if (!checked) {\n                            dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.declareOptionBasedProductImageAsFinal', false));\n                          }\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n                <Grid xs={6} item={true}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={`attributeOption.declareOptionBasedProductImageAsFinal`}\n                    component={FieldSwitch}\n                    props={{\n                      label: t('configuratorPage.optionsWidget.useAsFinalProductImage'),\n                      inputProps: {\n                        color: 'primary',\n                        disabled: !formUseImage\n                      }\n                    }}\n                  />\n                  {formUseAsProductImage && foundOtherCurrentFinalProductImageOption &&\n                  <Grid container={true} alignItems='flex-start' wrap='nowrap' style={{paddingBottom: 8}}>\n                    <WarningIcon className={classes.warning}/>\n                    <Typography variant='caption'>{t('configuratorPage.optionsWidget.productImageOverrideWarning')}</Typography>\n                  </Grid>\n                  }\n                </Grid>\n              </Grid>\n            }\n            {attributeOption && !isCheckbox && hasFeatOptionBasedCutsheets && isPimTool &&\n              <Grid container={true} style={{ paddingLeft: LEFT_COLUMN_WIDTH, marginBottom: 8 }}>\n                <Grid xs={6} item={true}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={`attributeOption.enableOptionBasedManufacturerCutsheet`}\n                    component={FieldSwitch}\n                    props={{\n                      label: t('configuratorPage.optionsWidget.includeManufacturerCutsheets'),\n                      inputProps: {\n                        color: 'primary',\n                        onChange: (e) => {\n                          const checked = e.target.checked;\n                          if (!checked) {\n                            dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'attributeOption.declareOptionBasedManufacturerCutsheetAsFinal', false));\n                          }\n                        }\n                      }\n                    }}\n                  />\n                </Grid>\n                <Grid xs={6} item={true}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    name={`attributeOption.declareOptionBasedManufacturerCutsheetAsFinal`}\n                    component={FieldSwitch}\n                    props={{\n                      label: t('configuratorPage.optionsWidget.useAsFinalProductManufacturerCutsheet'),\n                      inputProps: {\n                        color: 'primary',\n                        disabled: !formUseSpec\n                      }\n                    }}\n                  />\n                  {formUseAsProductSpec && foundOtherCurrentFinalProductCutsheetOption &&\n                  <Grid container={true} alignItems='flex-start' wrap='nowrap' style={{paddingTop: 8}}>\n                    <WarningIcon className={classes.warning}/>\n                    <Typography variant='caption'>{t('configuratorPage.optionsWidget.productCutsheetOverrideWarning')}</Typography>\n                  </Grid>\n                  }\n                </Grid>\n              </Grid>\n            }\n\n            <DragDropContext onDragEnd={onDragEnd}>\n              <Droppable droppableId='droppable'>\n                {\n                  provided => (\n                    <div ref={provided.innerRef} {...provided.droppableProps} style={{ width: '100%' }}>\n                      {\n                        attributeOptionValuesAdd?.map((_attributeOption, index) => {\n                          return (\n                            <Draggable key={index} isDragDisabled={addedOptionDragableDisabled} draggableId={'_' + index} index={index}>\n                              {\n                                (provided2, snapshot2) => {\n                                  const child: JSX.Element = (\n                                    <Grid\n                                      ref={provided2.innerRef}\n                                      {...provided2.draggableProps}\n                                      {...provided2.dragHandleProps}\n                                      container={true}\n                                      alignItems='center'\n                                      wrap='nowrap'\n                                    >\n                                      <Grid item={true} style={{ width: LEFT_COLUMN_WIDTH, display: 'table' }}>\n                                        <HeightIcon color={ addedOptionDragableDisabled ? 'disabled' : 'action' } />\n                                      </Grid>\n                                      <Paper\n                                        key={index}\n                                        elevation={2}\n                                        className={classes.addedOptionInputs}\n                                      >\n                                        <Grid\n                                          container={true}\n                                          wrap='nowrap'\n                                        >\n                                          <Grid\n                                            container={true}\n                                            direction='column'\n                                          >\n                                            <Grid\n                                              container={true}\n                                              direction='column'\n                                              style={{\n                                                width: '100%'\n                                              }}\n                                            >\n                                              <Typography variant='caption' noWrap={true}>\n                                                {t('configuratorPage.optionsWidget.descriptionLabel')}\n                                              </Typography>\n                                              <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                                                name={`attributeOption.values[${index}]`}\n                                                component={FieldReactSelect}\n                                                inputProps={{\n                                                  options: isFetchingAttributeOptions ? [] : pimAttributeOptions && pimAttributeOptions.toList(),\n                                                  onChange: (option) => {\n                                                    const currentPrice = formValues.getIn(['attributeOption', 'values', index, 'price']);\n                                                    const currentSuffix = formValues.getIn(['attributeOption', 'values', index, 'suffix']);\n                                                    const currentExclude = formValues.getIn(['attributeOption', 'values', index, 'exclude']);\n                                                    const seriesAttributeOptionId = formValues.getIn(['attributeOption', 'values', index, 'seriesAttributeOptionId']);\n                                                    if (seriesAttributeOptionId) {\n                                                      dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values.${index}.seriesAttributeOptionId`, seriesAttributeOptionId));\n                                                    }\n                                                    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values.${index}.price`, currentPrice));\n                                                    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values.${index}.suffix`, currentSuffix));\n                                                    dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values.${index}.exclude`, currentExclude));\n                                                  },\n                                                  getOptionValue: (option) => option.get('value'),\n                                                  getOptionLabel: (option) => (\n                                                    <Tooltip title={[option.get('description'), option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}>\n                                                      <div>\n                                                        {option.get('description')} - <span className={classes.span}>{[option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}</span>\n                                                      </div>\n                                                    </Tooltip>\n                                                  ),\n                                                  filterOption: (option, inputValue: string) => {\n                                                    const label = option.label.props.title.toLowerCase();\n                                                    return label.includes(inputValue.toLowerCase());\n                                                  },\n                                                  placeholder: t('configuratorPage.optionsWidget.descriptionLabel'),\n                                                  components: {\n                                                    Option: ({value, innerProps, data, label}) => {\n                                                      const hasBeenDeleted = originalSeriesDeletedOptionValueIds?.includes(data.get('optionId'));\n                                                      const isReplacingWithNewlyDeleted = newlyDeletedOptionValueIds.includes(data.get('optionId')) && formValues.getIn(['attributeOption', 'values', index, 'seriesAttributeOptionId']);\n                                                      const disabled = Boolean(hasBeenDeleted && formValues.getIn(['attributeOption', 'values', index, 'seriesAttributeOptionId'])) || Boolean(isReplacingWithNewlyDeleted);\n                                                      return (\n                                                        <ListItem\n                                                          value={value}\n                                                          disabled={disabled}\n                                                          disableGutters={false}\n                                                          {...innerProps}\n                                                          className={classes.optionComponentRoot}\n                                                          style={{ cursor: disabled ? 'default' : 'pointer' }}\n                                                          onClick={disabled ? (e) => e.stopPropagation() : innerProps.onClick}\n                                                        >\n                                                          <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                                                            {label}\n                                                            {\n                                                              hasBeenDeleted && (\n                                                                <Tooltip title={t('configuratorPage.optionsWidget.deletedValueSelectionTooltip')}>\n                                                                  <WarningIcon color='action' />\n                                                                </Tooltip>\n                                                              )\n                                                            }\n                                                          </Grid>\n                                                        </ListItem>\n                                                      );\n                                                    }\n                                                  },\n                                                  styles: fieldReactSelectStyles(theme),\n                                                  isClearable: false,\n                                                  menuPosition: 'fixed',\n                                                  menuShouldScrollIntoView: false,\n                                                  isLoading: isFetchingAttributeOptions,\n                                                  loadingMessage: () => (\n                                                    <Grid container={true} justify='center' alignContent='center' wrap='nowrap'>\n                                                      <CircularProgress size='1.25rem' style={{ marginRight: 8 }} />\n                                                      {t('generalLoading.searching')}\n                                                    </Grid>\n                                                  ),\n                                                  onInputChange: (val: string) => {\n                                                    setDescriptionInputValue(val);\n                                                  },\n                                                  noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newDescription')} disableButton={isCategoryLocked && !bypassFrozenCategory} onClick={canManageAttributeManagement ? () => {\n                                                    dispatch(new SetOverlayComponentPropsAction({\n                                                      id: DESCRIPTION_DIALOG_ID,\n                                                      props: {\n                                                        description: descriptionInputValue,\n                                                        successCB: (newAttributeOption: IMap<PureAttributeOption>) => {\n                                                          const newAttributeOptionId = newAttributeOption.get('id');\n                                                          // searchOptions(seriesCategoryId, formAttributeId, brandOnlyFilter);\n\n                                                          const convertedAttributeOption = fromJS({\n                                                            optionId: newAttributeOptionId,\n                                                            optionKey: newAttributeOption.get('key'),\n                                                            description: newAttributeOption.get('description'),\n                                                            unit: newAttributeOption.get('unit'),\n                                                            value: newAttributeOption.get('value'),\n                                                            seriesAttributeOptionId: formValues.getIn(['attributeOption', 'values', index, 'seriesAttributeOptionId']) ?? null,\n                                                          });\n\n                                                          // pre-populate feature modal form with new attribute option description\n                                                          dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}]`, convertedAttributeOption));\n                                                          // dispatch(change(CONFIG_OPTION_DIALOG_FORM, 'printDescription.csi', null));\n                                                        }\n                                                      }\n                                                    }));\n                                                    openDialog(DESCRIPTION_DIALOG_ID)();\n                                                  } : null} />,\n                                                  onFocus: () => onDescriptionFocus(index)\n                                                }}\n                                                formControlProps={{\n                                                  fullWidth: true\n                                                }}\n                                              />\n                                            </Grid>\n                                            {hasPimPrintDescriptionAcl && isPimTool &&\n                                              <Grid\n                                                item={true}\n                                              >\n                                                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                                                  name={`attributeOption.values[${index}].displayPrintDescription`}\n                                                  component={FieldSwitch}\n                                                  props={{\n                                                    label: t('SeriesDetailPage.displayPrintDescription'),\n                                                    inputProps: {\n                                                      color: 'primary'\n                                                    }\n                                                  }}\n                                                />\n                                                { formValues && formValues.getIn(['attributeOption', 'values', index, 'displayPrintDescription']) &&\n                                                  <Grid container={true}>\n                                                    <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center'>\n                                                      <Typography>{t('SeriesDetailPage.printDescription')}</Typography>\n                                                      <Button\n                                                        color='primary'\n                                                        onClick={() => dispatch(change(CONFIG_OPTION_DIALOG_FORM, `attributeOption.values[${index}].printDescription.csi`, null))}\n                                                        disabled={!formValues.getIn(['attributeOption', 'values', index, 'printDescription', 'csi'])}\n                                                      >{t('formButtons.clear')}</Button>\n                                                    </Grid>\n                                                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                                                      name={`attributeOption.values[${index}].printDescription.csi`}\n                                                      props={{\n                                                        inputProps: {\n                                                          type: 'text',\n                                                          multiline: true\n                                                        },\n                                                        formControlProps: {\n                                                          fullWidth: true\n                                                        }\n                                                      }}\n                                                      component={FieldTextField}\n                                                    />\n                                                  </Grid>\n                                                }\n                                              </Grid>\n                                            }\n                                            <SuffixAndPrices\n                                              suffixPath={`attributeOption.values[${index}]`}\n                                              pricesPath={`attributeOption.values[${index}].price.default.${selectedCurrency}`}\n                                              hasOptionDescription={Boolean(_attributeOption)}\n                                            />\n                                            {/* swatch upload */}\n                                            {formUseSwatch &&\n                                              <Grid\n                                                item={true}\n                                                style={{marginTop: 8, marginBottom: 16}}\n                                              >\n                                                <Typography>{t('configuratorPage.optionsWidget.swatchPreview')}</Typography>\n                                                <Grid container={true} alignItems='flex-end'>\n                                                  <Grid container={true} style={{width: 192, height: 192}}>\n                                                    <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                                                      component={FieldDropzone}\n                                                      name={`attributeOption.values[${index}].swatchDropzone`}\n                                                      validate={mainImageUploadValidation}\n                                                      props={{\n                                                        initialImage: formValues.getIn(['attributeOption', 'values', index, 'swatch']),\n                                                        suggestText: t('SeriesDetailPage.uploadSuggest'),\n                                                        dropzoneInputProps: {\n                                                          accept: acceptedMainImageExtensions,                                                        },\n                                                        dropzoneProps: {\n                                                          onDropAccepted: (fileArray: any[], event) => setToBeRevokeObjectURLs((prevValue) => prevValue.push(fileArray[0].preview))\n                                                        },\n                                                        autoRevokeURL: false,\n                                                      }}\n                                                    />\n                                                  </Grid>\n                                                  <IconButton size='small' onClick={() => removeSwatch(index)}>\n                                                    <Tooltip title={t('formButtons.delete')}>\n                                                      <DeleteIcon />\n                                                    </Tooltip>\n                                                  </IconButton>\n                                                </Grid>\n                                              </Grid>\n                                            }\n                                            {/* image upload */}\n                                            {formUseImage &&  isPimTool &&\n                                              <Grid item={true} style={{marginTop: 8, marginBottom: 16}}>\n                                                <Typography>{t('configuratorPage.optionsWidget.productImagePreview')}</Typography>\n                                                <Grid container={true} alignItems='flex-end'>\n                                                  <Grid container={true} style={{width: 192, height: 192}}>\n                                                    <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                                                      component={FieldDropzone}\n                                                      name={`attributeOption.values[${index}].imageDropzone`}\n                                                      validate={mainImageUploadValidation}\n                                                      props={{\n                                                        initialImage: formValues.getIn(['attributeOption', 'values', index, 'optionBasedProductImage']),\n                                                        suggestText: t('SeriesDetailPage.uploadSuggest'),\n                                                        dropzoneInputProps: {\n                                                          accept: acceptedMainImageExtensions\n                                                        }\n                                                      }}\n                                                    />\n                                                  </Grid>\n                                                  <IconButton size='small' onClick={() => removeImage(index)}>\n                                                    <Tooltip title={t('formButtons.delete')}>\n                                                      <DeleteIcon />\n                                                    </Tooltip>\n                                                  </IconButton>\n                                                </Grid>\n                                              </Grid>\n                                            }\n                                            {/* cutsheet upload */}\n                                            {formUseSpec &&  isPimTool &&\n                                              <Grid item={true} style={{marginTop: 8, marginBottom: 16}}>\n                                                <Grid container={true} spacing={1} alignItems='center' justify='space-between'>\n                                                  <CutsheetDisplay\n                                                    formName={CONFIG_OPTION_DIALOG_FORM}\n                                                    formFilePathArray={['attributeOption', 'values', index, 'optionBasedManufacturerCutsheet']}\n                                                    formFilePathString={`attributeOption.values[${index}].optionBasedManufacturerCutsheet`}\n                                                    selectedLanguage={selectedLanguage}\n                                                    index={index}\n                                                  />\n                                                </Grid>\n                                                <Divider />\n                                                <Grid container={true} spacing={1} justify='flex-end'>\n                                                  <FileLocalizationSelector\n                                                    selectedLanguage={selectedLanguage}\n                                                    setSelectedLanguage={(_selectedLanguage) => setSelectedLanguage(_selectedLanguage)}\n                                                    container={true}\n                                                    direction={'row'}\n                                                    justify={'flex-end'}\n                                                    color={'textSecondary'}\n                                                    variant={'caption'}\n                                                    labelStyle={{marginRight: 16}}\n                                                  />\n                                                </Grid>\n                                              </Grid>\n                                            }\n                                          </Grid>\n                                          <Grid>\n                                            <IconButton\n                                              onClick={() => handleAttributeOptionDelete(index)}\n                                            >\n                                              <DeleteIcon />\n                                            </IconButton>\n                                          </Grid>\n                                        </Grid>\n                                      </Paper>\n                                    </Grid>\n                                  );\n                                  if (snapshot2.isDragging) {\n                                    return ReactDOM.createPortal(child, portal);\n                                  } else {\n                                    return child;\n                                  }\n                                }\n                              }\n                            </Draggable>\n                          );\n                        })\n                      }\n\n                      {\n                        lastValidDNDIndex &&\n                          <Draggable draggableId={'__' + lastValidDNDIndex} index={lastValidDNDIndex}>\n                            {\n                              (provided3, snapshot3) => {\n                                const child: JSX.Element = (\n                                  <Grid\n                                    ref={provided3.innerRef}\n                                    {...provided3.draggableProps}\n                                    {...provided3.dragHandleProps}\n                                    container={true}\n                                    alignItems='center'\n                                    wrap='nowrap'\n                                  >\n                                    <Grid item={true} style={{ width: LEFT_COLUMN_WIDTH, display: 'table' }}>\n                                      <HeightIcon color={ 'action' } />\n                                    </Grid>\n                                    <Paper\n                                      className={classes.optionsInput}\n                                    >\n                                      { NewOptionItem() }\n                                    </Paper>\n                                  </Grid>\n                                );\n                                if (snapshot3.isDragging) {\n                                  return ReactDOM.createPortal(child, portal);\n                                } else {\n                                  return child;\n                                }\n                              }\n                            }\n                          </Draggable>\n                      }\n                      { provided.placeholder }\n                    </div>\n                  )\n                }\n              </Droppable>\n            </DragDropContext>\n\n            {\n              !lastValidDNDIndex &&\n                <Grid container={true} alignItems='center' wrap='nowrap'>\n                  <Grid item={true} style={{ width: LEFT_COLUMN_WIDTH, display: 'table' }}>\n                    <HeightIcon color={'disabled'} />\n                  </Grid>\n                  <Paper\n                    className={classes.optionsInput}\n                  >\n                    { NewOptionItem() }\n                  </Paper>\n                </Grid>\n            }\n\n            {\n              optionsPopperError\n                ? <Grid\n                    style={{\n                      marginTop: theme.spacing(),\n                      marginLeft: LEFT_COLUMN_WIDTH\n                    }}\n                  >\n                    <Typography\n                      variant='subtitle2'\n                      color='error'\n                    >\n                      {t(optionsPopperError)}\n                    </Typography>\n                  </Grid>\n                : null\n            }\n          </Grid>\n        </DialogContent>\n\n        <DialogActions>\n          <Button\n            onClick={closeOptionPopper}\n            color='primary'\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            onClick={() => checkAddToSeries(formValues)}\n          >\n            {t('formButtons.save')}\n          </Button>\n        </DialogActions>\n\n        <DeleteModal\n          open={deleteOptionValueModalOpen}\n          content={\n            <Grid>\n              <Typography variant='h6'>\n                {`${t('AttributesDialog.updateConfirmationTitle', { attributeName })}`}\n              </Typography>\n              <Grid container={true} direction='column' spacing={1} className={classes.effectedListContainer}>\n                {\n                  optionValueDescriptionsWithEffect.map((description: string, index: number) => (\n                    <Grid key={index} item={true}>\n                      <Typography variant='body1'>\n                        { description }\n                      </Typography>\n                    </Grid>\n                  ))\n                }\n              </Grid>\n              <Typography variant='body2' color='textPrimary'>\n                {t('SeriesDetailPage.invalidProductWarning')}\n              </Typography>\n            </Grid>\n          }\n          buttonOk={t('formButtons.confirm')}\n          toggleDeleteModal={() => { toggleOptionValueDeleteModal(false); setOptionValueDescriptionsWithEffect([]); }}\n          handleDelete={handleDelete}\n          withLoading={false}\n        />\n      </form>\n    </Dialog>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const optionDialogState = makeSelectOptionDialogState()(state);\n\n  const selectedAttributeOption = optionDialogState?.get('attribute') || null;\n  const optionsDialogOpen = optionDialogState?.get('open') || false;\n\n  const filteredSelectedAttributeOption = selectedAttributeOption?.set('values', selectedAttributeOption?.get('values')?.filter((value) => value.get('status') !== 'deleted') ?? List());\n\n  const transformedSelectedAttributeOption = filteredSelectedAttributeOption && filteredSelectedAttributeOption.withMutations( ctx => {\n    ctx.get('values').forEach( (value, index) => {\n      // BE use 1/0 flag but we need boolean for switch button as it accepts boolean type otherwise we get console error\n      const price = value.get('price');\n      const transformedIsPoaPrice = price && price.reduce((acc, priceRegion, priceRegionKey) => {\n        const transformPriceRegionIsPoa = priceRegion.reduce((_acc, currency, currencyKey) => {\n          const isPoaBooleanValue = Boolean(currency.get('isPoa'));\n          const transformedIsPoa = currency.set('isPoa', isPoaBooleanValue);\n          return _acc.set(currencyKey, transformedIsPoa);\n        }, Map());\n        return acc.set(priceRegionKey, transformPriceRegionIsPoa);\n      }, Map());\n      ctx.setIn(['values', index, 'price'], transformedIsPoaPrice || Map());\n\n      // has to transform null value to a map or the form won't allow to make change\n      if (value.get('printDescription') === null) {\n        ctx.setIn(['values', index, 'printDescription'], Map());\n      }\n    });\n  });\n  const initialValues = filteredSelectedAttributeOption\n    ? fromJS({\n        'attributeOption': transformedSelectedAttributeOption,\n        'isCheckbox': filteredSelectedAttributeOption.get('isOption') ?? false,\n        'attributeOptionRequire': filteredSelectedAttributeOption.get('require') ?? false,\n      })\n    : fromJS({\n      'attributeOption': null,\n      'isCheckbox': false,\n      'attributeOptionRequire': false\n    });\n\n  return {\n    optionsDialogOpen,\n    initialValues,\n    ...createStructuredSelector({\n      pimAttributes: makeSelectPimAttributes(),\n      pimAttributeOptions: makeSelectPimAttributeOptionsBySelectedAttributeId(),\n      isFetchingAttributeOptions: makeSelectIsFetchingAttributeOptions(),\n      formValues: getFormValues(CONFIG_OPTION_DIALOG_FORM),\n      configFormValues: getFormValues(PRODUCT_CONFIG_FORM),\n      hasPimPrintDescriptionAcl: makeSelectUserHasPimPrintDescriptionAcl(),\n      isPimTool: makeSelectIsPimTool(),\n      canManageAttributeManagement: makeSelectCanManageAttributeManagement(),\n      hasFeatOptionBasedImages:  makeSelectUserHasFeatOptionBasedImages(),\n      hasFeatOptionBasedCutsheets: makeSelectUserHasFeatOptionBasedCutsheets(),\n      categoriesList: makeSelectCategory()\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getAttributes: (categoryId: number, filters?: Filter) => {\n      dispatch(new SearchAttributesAction({categoryId, filters}));\n    },\n    getAttributeOptions: (categoryId: number, attributeId: number, filters?: Filter) => {\n      dispatch(new SearchAttributeOptionsAction({\n        categoryId,\n        attributeId,\n        filters\n      }));\n    },\n    setSelectedAttributeId: (attributeId: number) => {\n      dispatch(new SetSelectedAttributeIdAction(attributeId));\n    },\n  };\n};\n\nexport default compose<React.FC<IOptionsDialogComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withAtsApi(),\n  withTranslation('translations'),\n  reduxForm({\n    form: CONFIG_OPTION_DIALOG_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true,\n  }),\n)(OptionsDialog);","import * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  Grid,\n  LinearProgress,\n  Theme,\n  Typography,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport {\n  IAction\n} from 'ats-utils/src/Interfaces';\nimport {\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  fromJS,\n  getIn,\n  isImmutable,\n  List,\n  Map,\n  OrderedMap,\n} from 'immutable';\nimport {\n  ButtonTab,\n  NotFound,\n  WidgetHeaderStyle,\n  WidgetLoaderStyle,\n} from '../../components';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Series,\n  Attribute,\n  Office\n} from '../../models';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { makeSelectOffice, makeSelectOfficeLoading } from '../../modules/AccountModule/selectors';\nimport { GetCategoriesAction, GetManufacturersAction, GetOfficeByIdAction, SelectOfficeAction } from '../../modules/AccountModule/actions';\nimport { ScrollTabContainer } from '../../containers';\nimport { makeSelectScrollNode } from '../../modules/ApplicationModule/selectors';\nimport { AddFirmSeriesAndRedirectAction, AddPimSeriesDraftAction, ResetPimStateAction, SearchRecommendedAttributesSuccessAction, SetSelectedFirmSeriesIdAction, UpdateFirmSeriesAndRedirectAction, UpdatePimSeriesDraftAction } from '../../modules/PimModule/actions';\nimport withConfiguratorSeriesId,{ IWithConfiguratorSeriesId } from '../../hoc/withConfiguratorSeries';\nimport { RouteProps } from 'react-router';\nimport { DivInterceptor } from '../../containers/Quote/Quote';\nimport { push } from 'connected-react-router';\nimport { AMPLITUDE_EVENT, Currency, GEOLOCATION_ID, PIM_DRAFT_DETAIL_PATH, PIM_DRAFT_LIST_PATH, PIM_SERIES_DETAIL_PATH, PRODUCTS_PATH, SiteName } from '../../constants';\nimport { PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES } from '../../components/ProductAndPackageList/Component';\nimport { makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport WidgetWrapper from '../SeriesDetailPage/WidgetWrapper';\nimport Attachments from '../SeriesEditPage/Attachments';\nimport { WithAtsApi, withAtsApi } from '../../contexts/AtsApiContext';\nimport { FieldDropzoneStateResetAction } from '../../modules/ApplicationModule/actions';\nimport Xhr from '../../utils/Xhr';\nimport SeriesInfo from './SeriesInfo';\nimport FeaturesWidget from '../SeriesEditPage/Attributes/FeaturesWidget';\nimport FeaturesDialog, { ATTRIBUTE_DIALOG_FORM } from '../SeriesEditPage/FeaturesDialog';\nimport ProductNumberGenerator from './ProductNumberGenerator';\nimport TooltipTab from '../../components/TooltipTab';\nimport OptionsWidget from './OptionsWidget';\nimport AttributeDialog from '../../containers/PimAttributesListPage/AttributeDialog';\nimport DescriptionDialog from '../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport { CONFIG_OPTION_DIALOG_FORM } from './OptionsWidget/OptionDialog/Component';\nimport FileLocalizationSelector from '../../components/FileLocalizationSelector';\nimport Language from '../../models/Language';\nimport PrintDescriptionModal from '../../components/PrintDescriptionModal';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { getBulkPriceComparison, getPriceComparison, getPurchasabilityComparison } from '../../components/PimProductDrawer/PimProductDrawerEdit';\nimport { getOptionDescriptionStatusUpdatedCount, getOptionStatusUpdatedCount, getTotalOptionDescriptionsCountByStatus, extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes } from '../SeriesEditPage/Component';\nimport UnlistedAttributesWidget from '../SeriesEditPage/Attributes/UnlistedAttributesWidget';\nimport { SeriesType } from '../SeriesEditPage/Attributes/UnlistedAttributesWidget/UnlistedAttributes';\nimport RecommendedAttribute from '../../models/RecommendedAttribute';\nimport { makeSelectMandatoryAttributes } from '../../modules/PimModule/selectors';\nimport MandatoryRecommendedAttributes from '../../models/MandatoryRecommendedAttributes';\nimport { ReactComponent as LoadingFile } from '../../images/expansion/loadingFile.svg';\n\n// logic is everything within {} will be a maskChip with base set to false\n// everything else outside will be a maskChip with base set to true\nexport const makeMaskArray = (maskStringInput: string = '', attributesInSeries) => {\n  const array = [];\n  let startIndex = 0;\n\n  const attributesInSeriesSplit = maskStringInput && maskStringInput.split('');\n\n  // 'sliding window' method using two pointers\n  // loop through the array of chars\n  // use startIndex to keep track of the start of the 'selectedString' which is the same as the key\n  for (let endIndex = 0; endIndex < attributesInSeriesSplit.length; endIndex++) {\n      const selectedString = attributesInSeriesSplit\n        .slice(startIndex !== 0\n          ? startIndex + 1\n          // skip first char if it doesn't start with a base\n          : maskStringInput[0] === '{' ? 1 : 0\n        , endIndex)\n        .join('');\n\n      const attributeLabel = attributesInSeries.getIn([selectedString, 'name']);\n\n      // case when there's no masks and only base\n      // idk why they would ever do that lol\n      if (!attributesInSeriesSplit.includes('{')) {\n        selectedString !== ''\n          ? array.push({\n                key: attributesInSeriesSplit.join(''),\n                label: attributesInSeriesSplit.join(''),\n                base: true,\n                editMode: false,\n            })\n          : null; //  tslint:disable-line\n        startIndex = endIndex;\n      }\n\n      if (attributesInSeriesSplit[endIndex] === '{') {\n        selectedString !== ''\n          ? array.push({\n                key: selectedString,\n                label: selectedString,\n                base: true,\n                editMode: false,\n            })\n          : null; //  tslint:disable-line\n        startIndex = endIndex;\n      }\n\n      if (attributesInSeriesSplit[endIndex] === '}') {\n        // we assume if the getIn for 'attributesInSeries.getIn([selectedString, 'name'])' returns undefined\n        // then it means it doesn't exist. so there's a mismatch between the mask string\n        // and the actual options (attributes) in the series\n        // so we ignore it\n        // BE also has a similar check in case the mask goes out of sync with the series' attributes\n        attributeLabel ? array.push({\n            key: selectedString,\n            label: attributeLabel,\n            base: false,\n            editMode: false,\n        }) : null; //  tslint:disable-line\n        startIndex = endIndex;\n\n        // add check to see from this endIndex and the very end if there are any more }.\n        // if not than we can assume the rest is a base\n        // this scenario is for adding base{option}base. user \"shouldn't\" ever do this but just in case they do\n        const toTheEnd = attributesInSeriesSplit.slice(endIndex + 1, attributesInSeriesSplit.length);\n\n        if (!toTheEnd.includes('}') && toTheEnd.length !== 0) {\n          const endingMask = toTheEnd.join('');\n          array.push({\n            key: endingMask,\n            label: endingMask,\n            base: true,\n            editMode: false,\n          });\n        }\n      }\n  }\n\n  return array;\n};\n\n// this comp is a bit beefy\n// a refactor later could be to separate into different comps\n// issue atm is that almost all of them require redux form and its just hooked up to one form\n// later each separated section would need its own form and at the end we merge all of them on final submit\n\nexport const PRODUCT_CONFIG_FORM = 'PRODUCT_CONFIG_FORM';\n\ninterface IProductConfiguratorPageComponentProps {\n  series: IMap<Series>;\n  type: string;\n}\n\ninterface IProductConfiguratorPageProps extends InjectedFormProps {\n  dispatch: React.Dispatch<IAction>;\n  getCategories: () => void;\n  // getCategoriesWithFilter: (filters: Filter) => void;\n  getManufacturers: () => void;\n  getOfficeAndSelectOffice: (officeId: number) => void;\n  setSeriesId: (seriesId: number) => void;\n  updateSeriesAndRoute: (firmSeries: IMap<Partial<Series>>, firmSeriesId: number, site: string, skipAttributes: number[], onSuccess: (result?: IMap<Series>) => void, onFinally: () => void) => void;\n  addSeriesAndRoute: (firmSeries: Map<string, any>, site: string, skipAttributes: number[], onSuccess: (result?: IMap<Series>) => void, onFinally: () => void) => void;\n  scrollNode?: React.RefObject<any>;\n  formValues: any;\n  theme: Theme;\n  series: IMap<Series>;\n  isRecommendedConfig: boolean;\n  seriesNotVisibleToUser: boolean;\n  searchingOffice: boolean;\n  userOfficeId: number;\n  office: IMap<Office>;\n  attributeId: number;\n  mandatoryAttributes: List<IMap<RecommendedAttribute>>;\n  isPimTool: boolean;\n  isAutoquote: boolean;\n}\n\ninterface IProductConfiguratorPageState {\n  anchorEl: HTMLButtonElement | null;\n  maskOptions: IMaskChip[];\n  selectedCurrency: Currency;\n  selectedLanguage: Language;\n  isSaving: boolean;\n}\n\nexport interface IMaskChip {\n  key: string;\n  label: string;\n  base: boolean;\n  editMode: boolean;\n}\n\nexport enum CONFIG_PAGE_ROUTE_TYPES {\n  EDIT = 'edit',\n  CREATE = 'create',\n  DUPLCIATE = 'duplicate',\n}\n\ntype ProductConfiguratorPageType = WithTranslation & IWithConfiguratorSeriesId & IProductConfiguratorPageComponentProps & IProductConfiguratorPageProps & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData & RouteProps;\nclass ProductConfiguratorPage extends React.Component<ProductConfiguratorPageType, IProductConfiguratorPageState> {\n\n  public state: IProductConfiguratorPageState = {\n    anchorEl: null,\n    maskOptions: [],\n    selectedCurrency: 'CAD',\n    selectedLanguage: 'en',\n    isSaving: false,\n  };\n\n  private anchorEl: HTMLElement;\n\n  // all refs\n  private refSeriesInfo = React.createRef<HTMLElement>();\n  private refUnlistedAttributes = React.createRef<HTMLElement>();\n  private refFeatures = React.createRef<HTMLElement>();\n  private refOptions = React.createRef<HTMLElement>();\n  private refConfigurator = React.createRef<HTMLElement>();\n  private refAttachment = React.createRef<HTMLElement>();\n\n  public componentDidMount() {\n    const {\n      getManufacturers,\n      getOfficeAndSelectOffice,\n      userOfficeId,\n      office\n    } = this.props;\n\n    getManufacturers();\n    if (userOfficeId !== -1 && (!office || (office && office.get('id') !== userOfficeId))) {\n      getOfficeAndSelectOffice(userOfficeId);\n    } else {\n      if (office && office.getIn(['location', 'country', 'id']) !== 6251999) { // id for Canada\n        this.setState({ selectedCurrency: 'USD' });\n      }\n    }\n  }\n\n  public componentDidUpdate(prevProps) {\n    const {\n      getCategories,\n      // getCategoriesWithFilter,\n      getOfficeAndSelectOffice,\n      searchingOffice,\n      userOfficeId,\n      office,\n      formValues,\n      series,\n    } = this.props;\n\n    const manufacturerId = formValues && formValues.getIn(['manufacturer', 'id']);\n    const prevManufacturerId = prevProps.formValues && prevProps.formValues.getIn(['manufacturer', 'id']);\n\n    if (!searchingOffice && userOfficeId !== -1 && (!office || (office && office.get('id') !== userOfficeId))) {\n      getOfficeAndSelectOffice(userOfficeId);\n    }\n\n    if (office && !prevProps.office) {\n      if (office.getIn(['location', 'country', 'id']) !== 6251999) { // id for Canada\n        this.setState({ selectedCurrency: 'USD' });\n      }\n    }\n\n    if (manufacturerId !== prevManufacturerId) {\n      // no filters for now. logic kinda weird. may need to turn it back on\n      // getCategoriesWithFilter(brandOnlyFilter);\n      getCategories();\n    }\n\n    if (series !== prevProps.series) {\n      const attributesInSeries = series.get('attributes');\n      const mask = series.get('mask');\n\n      if (series.size === 0) {\n        return;\n      }\n\n      this.setState({\n        maskOptions: makeMaskArray(mask, attributesInSeries)\n      });\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      setSeriesId,\n      dispatch,\n    } = this.props;\n\n    setSeriesId(-1);\n    dispatch(new ResetPimStateAction('searchedSeries'));\n    dispatch(new ResetPimStateAction('selectedPimSeries'));\n    dispatch(new ResetPimStateAction('selectedFirmSeries'));\n    dispatch(new ResetPimStateAction('mandatoryRecommendedAttributes'));\n    dispatch((new FieldDropzoneStateResetAction()));\n    dispatch(new SearchRecommendedAttributesSuccessAction(Map() as IMap<MandatoryRecommendedAttributes>));\n  }\n\n  // currency is track on a global level\n  // the two places that have currency at bound together\n  public onCurrencyChange = (currency: 'CAD' | 'USD') => {\n    this.setState({\n      selectedCurrency: currency\n    });\n  }\n\n  public onSubmit = async (values) => {\n    const {\n      updateSeriesAndRoute,\n      addSeriesAndRoute,\n      series,\n      type,\n      atsApi,\n      amplitudeData,\n      mandatoryAttributes,\n      site,\n      isPimTool,\n      isAutoquote,\n    } = this.props;\n\n    const {\n      maskOptions,\n    } = this.state;\n\n    this.setState({\n      isSaving: true,\n    });\n\n    const uploadedFiles = await Xhr({ atsApi, files: values.get('dropzone') });\n    const imageId = getIn(uploadedFiles, ['0', 'id'], '') || values.get('mainFileId');\n\n    const maskString = maskOptions && maskOptions.reduce((acc: string, maskOption: IMaskChip, index: number) => {\n      const maskOptionIsBase = maskOption.base;\n      const maskKey = maskOption.key;\n      const keyWithSyntax = maskOptionIsBase ? maskKey : `{${maskKey}}`;\n\n      return acc.concat(keyWithSyntax);\n    }, '');\n\n    const brand = values.getIn(['manufacturer', 'value']);\n    const brandId = values.getIn(['manufacturer', 'id']);\n\n    const category = values.getIn(['categoryName', 'id']);\n    const categoryName = values.getIn(['categoryName', 'value']);\n\n    const description = values.get('description');\n    const price = values.get('price');\n\n    const priceWithNullValues = price && price.withMutations(region => {\n      region.forEach((regionCurrency, index) => {\n        regionCurrency.forEach((priceObj, _index) => {\n          priceObj.forEach((actualPrice, priceIndex) => {\n            if (actualPrice === '') {\n              return region.setIn([index, _index, priceIndex], null);\n            }\n          });\n        });\n      });\n    });\n\n    const name = values.get('name');\n\n    const file = values.get('file') || Map();\n\n    const attributesOnly = values.get('attributes');\n\n    const options = values.get('attributeOptions');\n\n    const immutableAttributesOnly = (isImmutable(attributesOnly) ? attributesOnly : fromJS(attributesOnly))?.filter(attr => attr.get('status') !== 'deleted');\n    const immutableOptions = ((isImmutable(options) ? options : fromJS(options)) || Map()).filter(option => option.get('status') !== 'deleted');\n\n    const attributesAndOptions = immutableAttributesOnly\n      ? immutableAttributesOnly.merge(immutableOptions)\n      : immutableOptions;\n\n    const attributesAndOptionsWithNewKeys = attributesAndOptions && attributesAndOptions.reduce((acc, _attribute) => {\n\n      const keyedAttribute = _attribute\n        .set('id', _attribute.get('id') || _attribute.get('attributeId'))\n        .delete('attributeId')\n        .set('key', _attribute.get('key') || _attribute.get('attributeKey'))\n        .delete('attributeKey');\n\n      const _attributeValues = _attribute.get('values', List());\n\n      const newAttributeValues = _attributeValues.reduce((_acc, option) => {\n        const immutableOption = isImmutable(option) ? option : fromJS(option);\n        const id = immutableOption.get('id') || immutableOption.get('optionId');\n        const key = immutableOption.get('key') || immutableOption.get('optionKey');\n        const optionWithNewKey = immutableOption\n          .set('id', id)\n          .delete('optionId')\n          .set('key', key)\n          .delete('optionKey');\n\n        return _acc.push(optionWithNewKey);\n\n      }, List());\n\n      const finalAttribute = keyedAttribute.set('values', newAttributeValues);\n      const finalAttributeKey = finalAttribute.get('key');\n\n      return acc.set(finalAttributeKey, finalAttribute);\n    }, Map<string, IMap<Attribute>>());\n\n    // update exclusionGroups and/or priceGroups if any options are replaced\n    let replacementsList = List();\n    // make a list of replacements if exist, if type is create nothing exists so no need to check\n    if (type !== CONFIG_PAGE_ROUTE_TYPES.CREATE) {\n      const updatedOptions = attributesAndOptionsWithNewKeys && attributesAndOptionsWithNewKeys.filter((attr) => !attr.get('isAttribute') && attr.get('status') !== 'deleted');\n      const currentSeriesOptions = series.get('attributes').filter((attr) => !attr.get('isAttribute') && attr.get('status') !== 'deleted');\n      replacementsList = updatedOptions.reduce((acc, option, optionKey) => {\n        const newOptionValues = option.get('values');\n        const currentSeriesOptionValues = currentSeriesOptions.getIn([optionKey, 'values']);\n        const replacements = newOptionValues.reduce((_acc,newOptionValue) => {\n          const replacementFound = currentSeriesOptionValues?.find((currentOptionValue) => currentOptionValue.get('seriesAttributeOptionId') === newOptionValue.get('seriesAttributeOptionId') && currentOptionValue.get('id') !== newOptionValue.get('id'));\n          if (replacementFound?.size > 0) {\n            const replacementData = fromJS({\n              replacement: `${optionKey}:${newOptionValue.get('id')}`,\n              initial: `${optionKey}:${replacementFound.get('id')}`\n            });\n            return _acc.push(replacementData);\n          } else {\n            return _acc;\n          }\n        }, List());\n        return replacements.size > 0 ? acc.push(replacements) : acc;\n      }, List()).flatten(1);\n    }\n    // if replacement and exclusionGroups list are not empty\n    // then we have to find if any initial options exist in exclusionGroups then we have to replace them\n    const exclusionGroups = series.getIn(['configurator', 'options', 'exclusionGroups']);\n    const updatedExclusionGroups = replacementsList.size > 0 && exclusionGroups.size > 0\n      ? exclusionGroups.map((group) => {\n          const updatedValues = group.get('values').map((exclusionStringValue) => {\n            const replacement = replacementsList.find((replacementOption) => replacementOption.get('initial') === exclusionStringValue);\n            return replacement ? replacement.get('replacement') : exclusionStringValue;\n          });\n          return group.set('values', updatedValues);\n        })\n      : exclusionGroups;\n\n    // if replacement and pricGroups list are not empty\n    // then we have to find if any initial options exist in priceGroups then we have to replace them\n    const priceGroups = series.getIn(['configurator', 'options', 'priceGroups']);\n    const updatedPriceGroups = replacementsList.size > 0 && priceGroups.size > 0\n      ? priceGroups.map((group) => {\n          const updatedValues = group.get('values').map((priceOptionStringValue) => {\n            const replacement = replacementsList.find((replacementOption) => replacementOption.get('initial') === priceOptionStringValue);\n            return replacement ? replacement.get('replacement') : priceOptionStringValue;\n          });\n          return group.set('values', updatedValues);\n        })\n      : priceGroups;\n\n    const formPurchasability = values.get('purchasability');\n\n    const formSkid = values.getIn(['bulkPrice', 'skid', 'CAD']);\n    const formTruck = values.getIn(['bulkPrice', 'truck', 'CAD']);\n\n    // construct the firmSeries\n    // need to always set isConfigurator to true on this page\n    // since that's the only different between firmSeries and a \"firmConfigSeries\"\n    // even though we pretty much treat the two the same\n    const firmSeries = Map<string, any>().withMutations((ctx) => {\n      ctx\n        .set('brand', brand)\n        .set('brandId', brandId)\n        .set('category', category)\n        .set('categoryName', categoryName)\n        .set('description', description)\n        .set('price', priceWithNullValues)\n        .set('name', name)\n        .set('isConfigurator', true)\n        .set('attributes', attributesAndOptionsWithNewKeys)\n        .set('mask', maskString);\n\n      // update group options replacement on edit and duplicate\n      if (type !== CONFIG_PAGE_ROUTE_TYPES.CREATE) {\n        ctx\n          .setIn(['configurator', 'options', 'exclusionGroups'], updatedExclusionGroups)\n          .setIn(['configurator', 'options', 'priceGroups'], updatedPriceGroups);\n      }\n\n      if (type !== CONFIG_PAGE_ROUTE_TYPES.CREATE && isAutoquote) {\n        ctx.set('file', series.get('file') || Map());\n      } else {\n        ctx.set('file', file);\n      }\n\n      if (isPimTool) {\n        if (imageId) {\n          ctx.setIn(['file','images', 'main', 'fileId'], imageId);\n        } else {\n          ctx.deleteIn(['file', 'images']);\n        }\n      }\n\n      // BE does not accept empty media object so need to remove that;\n      if (ctx.getIn(['file', 'media', 'en'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'en']);\n      }\n      if (ctx.getIn(['file', 'media', 'fr'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media', 'fr']);\n      }\n      if (ctx.getIn(['file', 'media'])?.isEmpty()) {\n        ctx.deleteIn(['file', 'media']);\n      }\n\n      if (!formPurchasability?.get('country')) {\n        if (isAutoquote) {\n          ctx.set('purchasability', fromJS({ country: [{ id: GEOLOCATION_ID.canada, value: '' }, { id: GEOLOCATION_ID.usa, value: '' }]}));\n        } else {\n          ctx.setIn(['purchasability', 'country'], List());\n        }\n      } else {\n        ctx.set('purchasability', formPurchasability);\n      }\n\n      const skidQuantity = formSkid?.get('quantity') ? Number(formSkid.get('quantity')) : null;\n      const skidPrice = formSkid?.get('price') ? Number(formSkid.get('price')).toString() : null;\n      const truckQuantity = formTruck?.get('quantity') ? Number(formTruck.get('quantity')) : null;\n      const truckPrice = formTruck?.get('price') ? Number(formTruck.get('price')).toString() : null;\n\n      if (!skidQuantity && !skidPrice && !truckQuantity && !truckPrice) {\n        ctx.set('bulkPrice', Map());\n      } else {\n        if (skidQuantity && skidPrice) {\n          const skid = {\n            quantity: skidQuantity,\n            price: skidPrice,\n          };\n          ctx.setIn(['bulkPrice', 'skid'], fromJS({\n            USD: skid,\n            CAD: skid\n          }));\n        }\n        if (truckQuantity && truckPrice) {\n          const truck = {\n            quantity: truckQuantity,\n            price: truckPrice,\n          };\n          ctx.setIn(['bulkPrice', 'truck'], fromJS({\n            USD: truck,\n            CAD: truck\n          }));\n        }\n      }\n    });\n\n    // we check the type to see if it should update or create\n    // there's edit, duplicate and create\n    const toBeUpdatedSeriesid = series.get('id');\n\n    // construct skip attributeIds list\n    const skippedMandatoryAttributes = extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes(mandatoryAttributes, attributesAndOptionsWithNewKeys);\n    // const skipListHasChanged = !isEqual(extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes(values?.get('initialMandatoryAttributes')), skippedMandatoryAttributes);\n    // const skipAttributes = skipListHasChanged ? skippedMandatoryAttributes.toJS() : null;\n    const skipAttributes = skippedMandatoryAttributes.toJS();\n\n    const onFinally = () => {\n      this.setState({\n        isSaving: false,\n      });\n    };\n\n    try {\n      if (type === CONFIG_PAGE_ROUTE_TYPES.EDIT) {\n        const onSuccess = (result: IMap<Series>) => {\n          amplitude.logEvent(AMPLITUDE_EVENT.seriesDraftUpdated, amplitudeData({\n            seriesName: result.get('name'),\n            seriesId: result.get('id'),\n            manufacturerName: result.get('brand'),\n            categoryName: result.get('categoryName'),\n            numberOfOptions: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n            seriesType: 'Advance',\n            totalNumberOfOptions_active: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'active').size,\n            totalNumberOfOptions_discontinued: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'discontinued').size,\n            totalNumberOfOptions_deleted: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') === 'deleted').size,\n            totalNumberOfOptionDescriptions_active: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'active'),\n            totalNumberOfOptionDescriptions_discontinued: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'discontinued'),\n            totalNumberOfOptionDescriptions_deleted: getTotalOptionDescriptionsCountByStatus(result.get('attributes'), 'deleted'),\n            totalNumberOfFeatures_active: result.get('attributes').filter(attr => attr.get('isAttribute') && attr.get('status') === 'active').size,\n            totalNumberOfFeatures_deleted: result.get('attributes').filter(attr => attr.get('isAttribute') && attr.get('status') === 'deleted').size,\n            updated_seriesImage: series.getIn(['file', 'images', 'main', 'filename']) !== result.getIn(['file', 'images', 'main', 'filename']) ? result.getIn(['file', 'images', 'main', 'filename']) : null,\n            updated_seriesName: series.get('name') !== result.get('name') ? result.get('name') : null,\n            updated_seriesDescription: series.get('description') !== result.get('description') ? result.get('description') : null,\n            updated_manufacturerName: series.get('brand') !== result.get('brand') ? result.get('brand') : null,\n            updated_categoryName: series.get('categoryName') !== result.get('categoryName') ? result.get('categoryName') : null,\n            updated_listPrice: getPriceComparison(series, result, 'list'),\n            updated_sellPrice: getPriceComparison(series, result, 'sell'),\n            updated_costPrice: getPriceComparison(series, result, 'cost'),\n            updated_skid_quantity: getBulkPriceComparison(series, result, 'skid', 'quantity'),\n            updated_skid_price: getBulkPriceComparison(series, result, 'skid', 'price'),\n            updated_truck_quantity: getBulkPriceComparison(series, result, 'truck', 'quantity'),\n            updated_truck_price: getBulkPriceComparison(series, result, 'truck', 'price'),\n            updated_purchasability: getPurchasabilityComparison(series, result),\n            updated_numberOfOptionsActivated: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active', 'option'),\n            updated_numberOfOptionsDiscontinued: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'discontinued', 'option'),\n            updated_numberOfOptionsDeleted: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted', 'option'),\n            updated_numberOfOptionDescriptionsActivated: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active'),\n            updated_numberOfOptionDescriptionsDiscontinued: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'discontinued'),\n            updated_numberOfOptionDescriptionsDeleted: getOptionDescriptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted'),\n            updated_numberOfFeaturesActivated: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'active', 'feature'),\n            updated_numberOfFeaturesDeleted: getOptionStatusUpdatedCount(series.get('attributes'), result.get('attributes'), 'deleted', 'feature')\n          }));\n        };\n        updateSeriesAndRoute(firmSeries, toBeUpdatedSeriesid, site, skipAttributes, onSuccess, onFinally);\n      } else {\n        const onSuccess = (result: IMap<Series>) => {\n          amplitude.logEvent(AMPLITUDE_EVENT.seriesDraftCreated, amplitudeData({\n            seriesName: result.get('name'),\n            seriesId: result.get('id'),\n            manufacturerName: result.get('brand'),\n            categoryName: result.get('categoryName'),\n            numberOfOptions: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n            seriesType: result.get('isConfigurator') ? 'Advance' : 'Basic',\n          }));\n        };\n        addSeriesAndRoute(firmSeries, site, skipAttributes, onSuccess, onFinally);\n      }\n    } catch (error) {\n      onFinally();\n    }\n  }\n\n  public getUnscrollableTabItems = () => {\n    const { classes, isRecommendedConfig, type, dispatch, t, series, site } = this.props;\n    const { isSaving } = this.state;\n\n    const disableSave = isRecommendedConfig && type === CONFIG_PAGE_ROUTE_TYPES.EDIT && site === SiteName.pt;\n\n    return [\n      <DivInterceptor key='divInterceptor' className={classes.spacer}/>\n      ].concat([\n      <ButtonTab\n        key='__tab_cancel__'\n        variant='text'\n        textColor='primary'\n        buttonRef={(node: any) => {\n          this.anchorEl = node;\n        }}\n        aria-haspopup='true'\n        onClick={() => {\n          const seriesId = series.get('id');\n          if (site === SiteName.pt) {\n            seriesId\n              ? dispatch(push(`${PIM_SERIES_DETAIL_PATH}/${seriesId}`))\n              : dispatch(push(PRODUCTS_PATH, { initialTabValue: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS }));\n          } else {\n            seriesId\n              ? dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesId}`))\n              : dispatch(push(PIM_DRAFT_LIST_PATH));\n          }\n        }}\n        className={classes.scrollTabButton}\n      >\n        {t('formButtons.cancel')}\n      </ButtonTab>,\n      <TooltipTab key='__tab_save__' title={disableSave ? t('configuratorPage.disabledSaveTooltip') : ''}>\n        <div>\n          <ButtonTab\n          variant='contained'\n          textColor='primary'\n          buttonRef={(node: any) => {\n            this.anchorEl = node;\n          }}\n          aria-haspopup='true'\n          className={classes.scrollTabButton}\n          disabled={disableSave || isSaving}\n          type='submit'\n        >\n          {t('formButtons.save')}\n        </ButtonTab>\n        </div>\n      </TooltipTab>\n    ]);\n  }\n\n  public SeriesInfoWidget = () => (\n    <WidgetWrapper\n      rootRef={this.refSeriesInfo}\n    >\n      <WidgetLoaderStyle\n        noAuto={true}\n        header={\n          <Grid container={true}>\n            <Grid container={true} item={true} xs={true} alignItems='center'>\n              <WidgetHeaderStyle>\n                {this.props.t('configuratorPage.seriesInfo')}\n              </WidgetHeaderStyle>\n            </Grid>\n            <SeriesInfo\n              seriesId={this.props.series?.get('id')}\n              selectedCurrency={this.state.selectedCurrency}\n              onCurrencyChange={this.onCurrencyChange}\n            />\n          </Grid>\n        }\n      />\n    </WidgetWrapper>\n  )\n\n  public ConfigUnlistedAttributesWidget = () => (\n    <WidgetWrapper\n      rootRef={this.refUnlistedAttributes}\n    >\n      <UnlistedAttributesWidget\n        formName={PRODUCT_CONFIG_FORM}\n        seriesType={SeriesType.ADVANCED}\n      />\n    </WidgetWrapper>\n  )\n\n  public ConfigFeaturesWidget = () => (\n    <WidgetWrapper\n      rootRef={this.refFeatures}\n    >\n      <FeaturesWidget\n        formName={PRODUCT_CONFIG_FORM}\n      />\n    </WidgetWrapper>\n  )\n\n  public ConfigOptionsWidget = () => (\n    <WidgetWrapper\n      rootRef={this.refOptions}\n    >\n      <OptionsWidget\n        selectedCurrency={this.state.selectedCurrency}\n        formValues={this.props.formValues}\n        series={this.props.series}\n        deleteMaskOption={this.deleteMaskOption}\n      />\n    </WidgetWrapper>\n  )\n\n  public deleteMaskOption = (key: string) => {\n    const { maskOptions } = this.state;\n\n    const indexToDelete = maskOptions.findIndex(maskOption => maskOption.key === key);\n\n    if (indexToDelete > -1) {\n      const maskOptionsCopy = [...maskOptions];\n      maskOptionsCopy.splice(indexToDelete, 1);\n\n      this.setMaskOptions(maskOptionsCopy);\n    }\n  }\n\n  public setMaskOptions = (newMaskOptions: IMaskChip[]) => this.setState({ maskOptions: newMaskOptions});\n\n  public NumberGeneratorWidget = () => {\n    const {\n      t,\n      site,\n      classes,\n      theme,\n      formValues\n    } = this.props;\n    const {\n      maskOptions\n    } = this.state;\n\n    return (\n      <WidgetWrapper\n        rootRef={this.refConfigurator}\n      >\n        <WidgetLoaderStyle\n          noAuto={true}\n          header={\n            <Grid container={true}>\n              <Grid container={true} item={true} xs={true} alignItems='center' className={classes.sectionTitle}>\n                <WidgetHeaderStyle>\n                  { site === SiteName.pim ? t('SeriesDetailPage.productNumberGenerator') : 'Product Configurator' }\n                </WidgetHeaderStyle>\n              </Grid>\n              <ProductNumberGenerator\n                isPT={site === SiteName.pt}\n                theme={theme}\n                formValues={formValues}\n                maskOptions={maskOptions}\n                setMaskOptions={this.setMaskOptions}\n              />\n            </Grid>\n          }\n        />\n      </WidgetWrapper>\n    );\n  }\n\n  public AttachmentWidget = () => {\n    const {\n      t,\n      classes\n    } = this.props;\n    const { selectedLanguage } = this.state;\n\n    return (\n      <WidgetWrapper\n        rootRef={this.refAttachment}\n      >\n        <WidgetLoaderStyle\n          noAuto={true}\n          header={\n            <Grid container={true}>\n              <Grid container={true} item={true} xs={true} justify='space-between' alignItems='center' className={classes.sectionTitle}>\n                <WidgetHeaderStyle>\n                  {t('SeriesDetailPage.attachment')}\n                </WidgetHeaderStyle>\n                <FileLocalizationSelector\n                  selectedLanguage={selectedLanguage}\n                  setSelectedLanguage={(_selectedLanguage) => this.setState({ selectedLanguage: _selectedLanguage })}\n                />\n              </Grid>\n              <Attachments\n                formName={PRODUCT_CONFIG_FORM}\n                selectedLanguage={selectedLanguage}\n              />\n            </Grid>\n          }\n        />\n      </WidgetWrapper>\n    );\n  }\n\n  public render() {\n    const {\n      t,\n      handleSubmit,\n      classes,\n      scrollNode,\n      formValues = Map(),\n      attributeId,\n      series,\n      seriesNotVisibleToUser,\n      isPimTool,\n    } = this.props;\n\n    const allRefs = {\n      seriesInfo: this.refSeriesInfo,\n      unlistedAttributesInfo: this.refUnlistedAttributes,\n      features: this.refFeatures,\n      options: this.refOptions,\n      configurator: this.refConfigurator,\n      attachment: this.refAttachment\n    };\n    const menuLabels =  [\n      {\n        label: t('configuratorPage.seriesInfo'),\n        ref: allRefs.seriesInfo\n      },\n      ...(\n        isPimTool\n          ? [{\n              label: 'Unlisted Attributes',\n              ref: allRefs.unlistedAttributesInfo\n            }]\n          : []\n      ),\n      {\n        label: t('configuratorPage.featuresWidgetTitle'),\n        ref: allRefs.features\n      },\n      {\n        label: t('configuratorPage.optionsWidget.optionsWidgetTitle'),\n        ref: allRefs.options\n      },\n      {\n        label: t('configuratorPage.productNumberGeneratorWidgetTitle'),\n        ref: allRefs.configurator\n      },\n      ...(\n        isPimTool\n          ? [{\n              label: t('configuratorPage.attachmentWidgetTitle'),\n              ref: allRefs.attachment\n            }]\n          : []\n      )\n    ];\n\n    const manufacturer = isPimTool && (Map.isMap(formValues.get('manufacturer')) ? formValues.get('manufacturer').toJS() : formValues.get('manufacturer'));\n    const category = isPimTool && (Map.isMap(formValues.get('categoryName')) ? formValues.get('categoryName').toJS() : formValues.get('categoryName'));\n\n    const preAddedTags = manufacturer && category && {\n      manufacturer: {\n        id: manufacturer?.id,\n        name: manufacturer?.value\n      },\n      category: {\n        id: category?.id,\n        name: category?.value\n      },\n      disabled: true\n    };\n\n    if (seriesNotVisibleToUser) {\n      return <>\n        <NotFound\n          firstRow={<LinearProgress color='secondary' />}\n          secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n          paperContainer={true}\n          svgIcon={<LoadingFile />}\n        />\n      </>;\n    }\n\n    return (\n      <Grid className={classes.root}>\n        <form\n          onSubmit={handleSubmit(this.onSubmit)}\n        >\n          <ScrollTabContainer\n            scrollNode={scrollNode}\n            labels={menuLabels}\n            unscrollableTabItems={this.getUnscrollableTabItems()}\n          >\n            <div className={classes.container}>\n              <this.SeriesInfoWidget />\n\n              { isPimTool && <this.ConfigUnlistedAttributesWidget /> }\n\n              <this.ConfigFeaturesWidget />\n\n              <this.ConfigOptionsWidget />\n\n              <this.NumberGeneratorWidget />\n\n              { isPimTool && <this.AttachmentWidget /> }\n            </div>\n          </ScrollTabContainer>\n        </form>\n        <FeaturesDialog\n          formName={PRODUCT_CONFIG_FORM}\n          brandKey={'manufacturer'}\n          isPimTool={isPimTool}\n        />\n        {\n          isPimTool && (\n            <>\n              <AttributeDialog preAddedTags={preAddedTags} searchAfter={false} />\n              <DescriptionDialog attributeId={attributeId} preAddedTags={preAddedTags} searchAfter={false} />\n            </>\n          )\n        }\n        <PrintDescriptionModal />\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(2),\n    backgroundColor: 'rgb(238,238,238)',\n  },\n  scrollTabButton: {\n    minWidth: 120,\n    minHeight: '100%',\n    margin: theme.spacing(0, 2),\n  },\n  spacer: {\n    flexGrow: 1\n  },\n  attachmentContainer: {\n    margin: theme.spacing(2)\n  },\n  uploadFileContainer: {\n    marginBottom: theme.spacing(),\n    height: theme.spacing(18)\n  },\n  sectionTitle: {\n    marginBottom: theme.spacing()\n  }\n});\n\n// need to transform the \"series\" obj to what we need for the form\n// mainly the keys. ex key to attributeKey and key to optionKey\nconst transformInitialValues = (configSeries) => {\n  const name = configSeries.get('name');\n  const description = configSeries.get('description');\n\n  const brand = configSeries.get('brand');\n  const brandId = configSeries.get('brandId');\n\n  // category is actually categoryId. need to refactor this shit with BE\n  const category = configSeries.get('category');\n  const categoryName = configSeries.get('categoryName');\n\n  const mask = configSeries.get('mask');\n\n  const allAttributesFromSeries = configSeries.get('attributes');\n\n  const price = configSeries.get('price');\n  // BE use 1/0 flag but we need boolean for switch button as it accepts boolean type otherwise we get console error\n  const transformedIsPoaPrice = price && price.reduce((acc, priceRegion, priceRegionKey) => {\n    const transformPriceRegionIsPoa = priceRegion.reduce((_acc, currency, currencyKey) => {\n      const isPoaBooleanValue = Boolean(currency.get('isPoa'));\n      const transformedIsPoa = currency.set('isPoa', isPoaBooleanValue);\n      return _acc.set(currencyKey, transformedIsPoa);\n    }, Map());\n    return acc.set(priceRegionKey, transformPriceRegionIsPoa);\n  }, Map());\n\n  const bulkPrice = configSeries.get('bulkPrice')?.size ? configSeries.get('bulkPrice') : Map();\n\n  const file = configSeries.get('file');\n  const mainFileId = configSeries.getIn(['file', 'images', 'main', 'fileId']);\n\n  const purchasability = configSeries.get('purchasability');\n\n  // to be refactored later\n  // right now the id and key is not standardized\n  // there's attributeKey, attributeId, optionId and optionKey\n  // sometimes those just becomes id/key\n  // requires BE changes\n  // breaking change on spec tool / VSB\n  const changeKeys = (attr) => {\n    const attrWithNewKeyNames = attr\n    .set('attributeKey', attr.get('key'))\n    .delete('key')\n    .set('attributeId', attr.get('id'))\n    .delete('id')\n    .update('values', (valuesList) => {\n\n      const newValuesList = valuesList.map((_ctx) => {\n        return _ctx\n          .set('optionKey', _ctx.get('key'))\n          .delete('key')\n          .set('optionId', _ctx.get('id'))\n          .delete('id');\n      });\n\n      return newValuesList;\n    });\n\n    return attrWithNewKeyNames;\n  };\n\n  const attributesAndOptions = fromJS({\n      attributes: OrderedMap<string, IMap<Attribute>>(),\n      attributeOptions: OrderedMap<string, IMap<Attribute>>()\n    }).withMutations((ctx) => {\n      allAttributesFromSeries && allAttributesFromSeries.forEach((attr, attrKey) => {\n        if (attr.get('isAttribute')) {\n          ctx.update('attributes', (attrMap) => attrMap.set(attrKey, changeKeys(attr)));\n        } else {\n          ctx.update('attributeOptions', (attrMap) => attrMap.set(attrKey, changeKeys(attr)));\n        }\n      }); //  tslint:disable-line\n    });\n\n  const initialValuesSeries = Map<string, any>().withMutations((ctx) => {\n    ctx\n      .set('name', name)\n      .set('description', description)\n      .set('categoryName', fromJS({\n        id: category,\n        value: categoryName\n      }))\n      .set('manufacturer', fromJS({\n        id: brandId,\n        value: brand\n      }))\n      .set('mask', mask)\n      .set('attributes', attributesAndOptions.get('attributes'))\n      .set('price', transformedIsPoaPrice)\n      .set('bulkPrice', bulkPrice)\n      .set('attributeOptions', attributesAndOptions.get('attributeOptions'))\n      .set('file', file)\n      .set('mainFileId', mainFileId)\n      .set('purchasability', purchasability?.size ? purchasability : fromJS({ country: List() }) );\n  });\n\n  return initialValuesSeries;\n};\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ProductConfiguratorPageType) => {\n  const locationState = originalOwnProps.location.state;\n  const configSeries = (locationState && (locationState as any).configSeries) || originalOwnProps.series;\n  const isRecommendedConfig = configSeries && (configSeries.get('firmId') === null);\n\n  const initialValues = originalOwnProps.type === CONFIG_PAGE_ROUTE_TYPES.CREATE ? Map() : transformInitialValues(configSeries);\n\n  const isAutoquote = originalOwnProps.site === SiteName.pt;\n  const isPimTool = originalOwnProps.site === SiteName.pim;\n\n  const attributeId = isPimTool\n                        && (getFormValues(ATTRIBUTE_DIALOG_FORM)(originalState) as Map<string, any> || Map()).getIn(['attribute', 'attributeId'])\n                        || (getFormValues(CONFIG_OPTION_DIALOG_FORM)(originalState) as Map<string, any> || Map()).getIn(['attributeOption', 'attributeId']);\n\n  const seriesNotVisibleToUser = Boolean(!originalOwnProps.userHasAtsUserAcl && isPimTool && configSeries && configSeries.get('brandId') === 785);\n\n  return {\n    initialValues,\n    attributeId,\n    isRecommendedConfig,\n    seriesNotVisibleToUser,\n    isPimTool,\n    isAutoquote,\n    ...createStructuredSelector({\n      formValues: getFormValues(PRODUCT_CONFIG_FORM),\n      scrollNode: makeSelectScrollNode(),\n      searchingOffice: makeSelectOfficeLoading(),\n      userOfficeId: makeSelectUserOfficeId(),\n      office: makeSelectOffice(),\n      mandatoryAttributes: makeSelectMandatoryAttributes(),\n    })(originalState)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, ownProps: ProductConfiguratorPageType) => {\n\n  return {\n    dispatch,\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n    // getCategoriesWithFilter: (filters: Filter) => {\n    //   dispatch(new SearchCategoriesAction({filters}));\n    // },\n    getOfficeAndSelectOffice: (officeId: number) => {\n      dispatch(new GetOfficeByIdAction({ officeId }));\n      dispatch(new SelectOfficeAction({ officeId }));\n    },\n    setSeriesId: (seriesId: number) => {\n      dispatch(new SetSelectedFirmSeriesIdAction(seriesId));\n    },\n    updateSeriesAndRoute: (firmSeries: IMap<Partial<Series>>, firmSeriesId: number, site: string, skipAttributes: number[], onSuccess: (result?: IMap<Series>) => void, onFinally: () => void) => {\n      if (site === SiteName.pt) {\n        dispatch(new UpdateFirmSeriesAndRedirectAction({\n          firmSeries,\n          firmSeriesId,\n          onFinally,\n        }));\n      } else {\n        dispatch(new UpdatePimSeriesDraftAction({\n          seriesId: firmSeriesId,\n          seriesInfo: firmSeries.toJS(),\n          redirectPath: `${PIM_DRAFT_DETAIL_PATH}/${firmSeriesId}`,\n          onSuccess,\n          skipAttributes,\n          onFinally,\n        }));\n      }\n    },\n    addSeriesAndRoute: (firmSeries: Map<string, any>, site: string, skipAttributes: number[], onSuccess: (result: IMap<Series>) => void, onFinally: () => void) => {\n      if (site === SiteName.pt) {\n        dispatch(new AddFirmSeriesAndRedirectAction({firmSeries, onFinally}));\n      } else {\n        dispatch(new AddPimSeriesDraftAction({\n          series: firmSeries,\n          skipAttributes,\n          onSuccess,\n          onFinally,\n        }));\n      }\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IProductConfiguratorPageComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withConfiguratorSeriesId({withConfiguratorSeries: true, redirectToControlled: true}),\n  withTranslation('translations'),\n  withAmplitudeData,\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: PRODUCT_CONFIG_FORM,\n    enableReinitialize : true,\n    destroyOnUnmount: true,\n  }),\n)(ProductConfiguratorPage);\n","import * as React from 'react';\nimport { Grid, IconButton, Theme, createStyles, makeStyles, GridSize, Typography, Button, useTheme, Tooltip } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, isImmutable, List, Map, OrderedMap } from 'immutable';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport EmptyWidgetContent from '../../../containers/Dashboard/WidgetLoader/EmptyWidgetContent';\nimport RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckIcon from '@material-ui/icons/Check';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport RestoreIcon from '@material-ui/icons/Restore';\nimport ZoomInIcon from '@material-ui/icons/ZoomIn';\nimport TextureIcon from '@material-ui/icons/Texture';\nimport { change, reset } from 'redux-form';\nimport { PRODUCT_CONFIG_FORM } from '../Component';\nimport ExclusionDialog, { OPTION_EXCLUSION_DIALOG_FORM } from './ExclusionDialog';\nimport PimAttributeOption from '../../../models/PimAttributeOption';\nimport WholeExclusionDialog from './WholeExclusionDialog';\nimport { SetSelectedAttributeIdAction } from '../../../modules/PimModule/actions';\nimport OptionDialog from './OptionDialog/Component';\nimport { AtsSvgEmptyFeaturesOptions } from '../../../components/AtsSvg';\nimport classNames from 'classnames';\nimport { DeleteModal, Image } from '../../../components';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectSearchedPimProductsList } from '../../../modules/PimModule/selectors';\nimport { Product, Series } from '../../../models';\nimport { SetAttributeDialogStateAction, SetOptionDialogStateAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { PRINT_DESCRIPTION_MODAL_ID } from '../../../components/PrintDescriptionModal/Component';\nimport { makeSelectSite, makeSelectUserHasFeatOptionBasedCutsheets, makeSelectUserHasFeatOptionBasedImages, makeSelectUserHasPimPrintDescriptionAcl } from '../../../modules/AtsModule/selectors';\nimport { Currency, SiteName } from '../../../constants';\nimport NoAttributesFound from '../../SeriesEditPage/Attributes/NoAttributesFound';\n\nexport interface IAttributeWithOptionValues {\n  attributeId: number;\n  attributeKey: string;\n  display: any;\n  name: string;\n  overrides: string[];\n  values?: List<IMap<PimAttributeOption>>;\n}\n\ninterface IOptionsComponentProps {\n  selectedCurrency: Currency;\n  formValues: any;\n  series: IMap<Series>;\n  deleteMaskOption: (key: string) => void;\n}\n\ninterface IOptionsProps extends IOptionsComponentProps {\n  hasPimPrintDescriptionAcl: boolean;\n  site: string;\n  hasFeatOptionBasedImages: boolean;\n  hasFeatOptionBasedCutsheets: boolean;\n  dispatch: React.Dispatch<IAction>;\n  setSelectedAttributeId: (attributeId: number) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  optionContainer: {\n    padding: theme.spacing(0, 2)\n  },\n  optionSection: {\n    border: `1px solid #D8D8D8`,\n    padding: theme.spacing(2),\n    borderRadius: 4,\n    margin: theme.spacing(2, 0),\n  },\n  optionRow: {\n    margin: theme.spacing(1, 0)\n  },\n  optionColumn: {\n    paddingRight: theme.spacing(2)\n  },\n  staticSelectIcons: {\n    marginRight: theme.spacing(2),\n  },\n  optionNotActiveIcon: {\n    color: theme.palette.grey[400]\n  },\n  exclusionDisplay: {\n    padding: '5px 8px 4px',\n    color: theme.palette.primary[800],\n  },\n  exclusionIcon: {\n    marginRight: theme.spacing()\n  },\n  overflowAuto: {\n    overflow: 'auto'\n  },\n  optionNotActive: {\n    color: theme.palette.grey[400],\n    textDecorationLine: 'line-through'\n  },\n  effectedListContainer: {\n    maxHeight: '150px',\n    overflowY: 'auto',\n    margin: theme.spacing(1.5, 0)\n  },\n  warningMessage: {\n    marginTop: theme.spacing(1.5)\n  },\n  displayAsAttributeChip: {\n    padding: theme.spacing(0.5, 1),\n    backgroundColor: theme.palette.secondary[50],\n    borderRadius: 20,\n    width: 'fit-content',\n    marginLeft: 'auto',\n    display: 'flex',\n    justifySelf: 'flex-end',\n  }\n}));\n\nexport const compactStringDisplay = (stringValue: string) => {\n  return stringValue.length > 20 ? stringValue.substring(0, 20) + '...' : stringValue;\n};\n\nconst Options: React.FC<IOptionsProps & WithTranslation> = (props) => {\n  const {\n    selectedCurrency,\n    formValues,\n    series,\n    deleteMaskOption,\n    t,\n    dispatch,\n    setSelectedAttributeId,\n    hasPimPrintDescriptionAcl,\n    site,\n    hasFeatOptionBasedImages,\n    hasFeatOptionBasedCutsheets,\n  } = props;\n\n  const [deleteOptionModalOpen, toggleOptionDeleteModal] = React.useState(false);\n  const [addNewAttributeOptionsPopperEditModeKey, setAddNewAttributeOptionsPopperEditModeKey] = React.useState('');\n  const [exclusionDialogOpen, setExclusionDialogOpen] = React.useState(false);\n  const [wholeExclusionOptionDialogOpen, setWholeExclusionOptionDialogOpen] = React.useState(false);\n  const [wholeExclusionPopperAttributeOptionKey, setwholeExclusionPopperAttributeOptionKey] = React.useState('');\n  const [exclusionPopperAttributeOptionKey, setExclusionPopperAttributeOptionKey] = React.useState('');\n  const [exclusionPopperOptionDescriptionIndex, setExclusionPopperOptionDescriptionIndex] = React.useState(-1);\n  const [discontinueModalOpen, toggleDiscontinueModalOpen] = React.useState({open: false, bulkUpdate: false});\n  const [keyToUpdate, setKeyToUpdate] = React.useState(null);\n  const [valueIndexToUpdate, setValueIndexToUpdate] = React.useState(null);\n  const [optionValueDescriptionsWithEffect, setOptionValueDescriptionsWithEffect] = React.useState([]);\n\n  const theme = useTheme();\n  const classes = useStyles();\n  const isPimTool = site === SiteName.pim;\n\n  const attributeOptionsInForm: OrderedMap<string, IMap<IAttributeWithOptionValues>> = formValues && formValues.get('attributeOptions', OrderedMap()) || OrderedMap();\n\n  const optionsTableColumns = [\n    { size: 3, label: t('configuratorPage.optionsWidget.descriptionLabel')},\n    { size: 1, label: t('configuratorPage.optionsWidget.suffixLabel')},\n    { size: 2, label: t('configuratorPage.optionsWidget.exclusionLabel')},\n    { size: 2, label: t('configuratorPage.optionsWidget.priceOnApplication')},\n    { size: 1, label: t('configuratorPage.optionsWidget.listPriceLabel')},\n    { size: 1, label: t('configuratorPage.optionsWidget.sellPriceLabel')},\n    { size: 1, label: t('configuratorPage.optionsWidget.costPriceLabel')}\n  ];\n\n  const closeExclusionDialog = () => {\n    setExclusionPopperAttributeOptionKey('');\n    setExclusionPopperOptionDescriptionIndex(-1);\n    setExclusionDialogOpen(false);\n    dispatch(reset(OPTION_EXCLUSION_DIALOG_FORM));\n  };\n\n  const closeWholeExclusionDialog = () => {\n    setwholeExclusionPopperAttributeOptionKey('');\n    setWholeExclusionOptionDialogOpen(false);\n  };\n\n  const updateOptionValueStatus = (optionKey: string, index: number, status: 'active' | 'discontinued') => {\n    if (status === 'discontinued') {\n      toggleDiscontinueModalOpen({open: true, bulkUpdate: false});\n    } else {\n      dispatch(change(PRODUCT_CONFIG_FORM, `attributeOptions.${optionKey}.values.${index}.status`, 'active'));\n      setKeyToUpdate(null);\n      setValueIndexToUpdate(null);\n      setOptionValueDescriptionsWithEffect([]);\n    }\n  };\n\n  const bulkStatusChange = (optionKey, status: 'active' | 'discontinued') => {\n    const option = attributeOptionsInForm.get(optionKey);\n    const allValues = (option && option.get('values')) || List();\n    allValues.map((value, index) => {\n      dispatch(change(PRODUCT_CONFIG_FORM, `attributeOptions.${optionKey}.values.${index}.status`, status));\n    });\n    setKeyToUpdate(null);\n    setOptionValueDescriptionsWithEffect([]);\n  };\n\n  const updateEntireOptionValueStatus = (option, status: 'active' | 'discontinued') => {\n    const optionKey = option.get('attributeKey');\n    const allValues = option.get('values') || List();\n    setKeyToUpdate(optionKey);\n    setOptionValueDescriptionsWithEffect(allValues.reduce((acc, value) => acc.concat([value.get('description')]), []));\n    if (status === 'discontinued') {\n      toggleDiscontinueModalOpen({open: true, bulkUpdate: true});\n    } else {\n      bulkStatusChange(optionKey, 'active');\n    }\n  };\n\n  const discontinueOptionValues = () => {\n    if (discontinueModalOpen.bulkUpdate) {\n      bulkStatusChange(keyToUpdate, 'discontinued');\n    } else {\n      dispatch(change(PRODUCT_CONFIG_FORM, `attributeOptions.${keyToUpdate}.values.${valueIndexToUpdate}.status`, 'discontinued'));\n    }\n    toggleDiscontinueModalOpen({open: false, bulkUpdate: false});\n    setKeyToUpdate(null);\n    setValueIndexToUpdate(null);\n    setOptionValueDescriptionsWithEffect([]);\n  };\n\n  const deleteOption = (key: string) => {\n    deleteMaskOption(key);\n\n    const newAttributeOptions = attributeOptionsInForm.filter((opt, optKey) => optKey !== key);\n    // const newAttributeOptions = attributeOptionsInForm.delete(attributeOptionIndex);\n\n    dispatch(change(PRODUCT_CONFIG_FORM, 'attributeOptions', newAttributeOptions));\n    toggleOptionDeleteModal(false);\n  };\n\n  const everyOptionsValuesDeleted = attributeOptionsInForm && attributeOptionsInForm.filter( option => {\n    return (option.get('values') || List()).find( value => value.get('status') !== 'deleted');\n  }).size === 0;\n\n  return (\n    <div style={{ width: '100%' }}>\n      {\n        attributeOptionsInForm && (attributeOptionsInForm.size !== 0 && !everyOptionsValuesDeleted)\n          ? <Grid>\n              <Grid\n                container={true}\n                wrap='nowrap'\n                className={classes.optionContainer}\n              >\n                <Grid\n                  container={true}\n                  justify='space-between'\n                  item={true}\n                  xs={11}\n                >\n                  {\n                    optionsTableColumns.map((column, index) => (\n                      <Grid\n                        key={index}\n                        item={true}\n                        xs={column.size as GridSize}\n                      >\n                        <Typography\n                          variant='subtitle1'\n                          color='textPrimary'\n                        >\n                          { column.label }\n                        </Typography>\n                      </Grid>\n                    ))\n                  }\n                </Grid>\n                <Grid\n                  container={true}\n                  justify='space-around'\n                  item={true}\n                  xs={1}\n                >\n                  <Typography\n                    variant='subtitle1'\n                    color='textPrimary'\n                  >\n                    {t('configuratorPage.optionsWidget.actionsLabel')}\n                  </Typography>\n                </Grid>\n              </Grid>\n              {\n                attributeOptionsInForm.map((attributeOptionInForm, attributeOptionIndex: string) => {\n                  const attributeOption: IMap<IAttributeWithOptionValues> = attributeOptionInForm;\n                  const attributeOptionValues = attributeOptionInForm.getIn(['values'], List());\n                  const attributeOptionKey = attributeOptionInForm.get('attributeKey');\n                  const attributeOptionName = attributeOptionInForm.get('name');\n                  const isOption = attributeOptionInForm.get('isOption');\n                  const isRequire = attributeOptionInForm.get('require');\n                  const displayAsAttribute = attributeOptionInForm.get('displayAsAttribute');\n                  const isAccessFeatSwatches = isPimTool;\n                  const useSwatch = attributeOptionInForm.get('useSwatch') && isAccessFeatSwatches;\n                  const useImage = attributeOptionInForm.get('enableOptionBasedProductImage') && hasFeatOptionBasedImages;\n                  const useSpec = attributeOptionInForm.get('enableOptionBasedManufacturerCutsheet') && hasFeatOptionBasedCutsheets;\n                  const topLevelExclude = attributeOptionInForm.get('exclude');\n                  const allExcludeNames = topLevelExclude?.reduce((acc, exclude) => {\n                    const name = exclude.get('name');\n                    return acc ? acc.concat(`, ${name}`) : acc.concat(`${name}`);\n                  }, '') ?? '';\n\n                  const topLevelExcludeDisplay = allExcludeNames && compactStringDisplay(allExcludeNames);\n\n                  const allValues = attributeOptionInForm && attributeOptionInForm.get('values');\n                  const discontinuedValues = allValues.filter(value => value.get('status') === 'discontinued');\n                  const activeValues = allValues.filter(value => value.get('status') === 'active');\n                  const deletedValues = allValues.filter(value => value.get('status') === 'deleted');\n                  const isAllOptionsDiscontinued = discontinuedValues.size === allValues.size;\n                  const isAllOptionsActive = activeValues.size === allValues.size;\n                  const isAllOptionsDeleted = deletedValues.size === allValues.size;\n                  const onlyActive = allValues.filter((value) => value.get('status') === 'active').count() <= 1;\n\n                  return !isAllOptionsDeleted && (\n                    <Grid\n                      key={attributeOptionIndex}\n                      className={classes.optionSection}\n                    >\n                      <Grid\n                        container={true}\n                        alignItems='center'\n                        spacing={2}\n                      >\n                        <Grid\n                          item={true}\n                        >\n                          <Typography\n                            variant='body2'\n                            color='textPrimary'\n                            className={classNames({\n                              [classes.optionNotActive]: isAllOptionsDiscontinued,\n                            })}\n                          >\n                            { `${attributeOptionName}${isRequire ? ' *' : ''}` }\n                          </Typography>\n                        </Grid>\n\n                        <Grid\n                          item={true}\n                        >\n                          {\n                            <Button\n                            className={classes.exclusionDisplay}\n                            onClick={(e) => {\n                              setWholeExclusionOptionDialogOpen(true);\n                              setwholeExclusionPopperAttributeOptionKey(attributeOptionKey);\n                            }}\n                            disabled={isAllOptionsDiscontinued}\n                            >\n                              {\n                                topLevelExclude && topLevelExclude.size !== 0\n                                ? [\n                                    <VisibilityIcon\n                                      key={0}\n                                      className={classes.exclusionIcon}\n                                    />,\n                                    <Typography\n                                      key={1}\n                                      color={isAllOptionsDiscontinued ? 'inherit' : 'primary'}\n                                    >\n                                      {topLevelExcludeDisplay}\n                                    </Typography>\n                                  ]\n                                : [\n                                    <AddCircleIcon\n                                      key={0}\n                                      className={classes.exclusionIcon}\n                                    />,\n                                    <Typography\n                                      key={1}\n                                      color={isAllOptionsDiscontinued ? 'inherit' : 'primary'}\n                                    >\n                                      {t('configuratorPage.optionsWidget.exclusionGroup')}\n                                    </Typography>\n                                  ]\n                              }\n                            </Button>\n                          }\n                        </Grid>\n                        <Grid\n                          item={true}\n                          style={{marginLeft: 'auto'}}\n                        >\n                          <Grid\n                            container={true}\n                            direction='row'\n                            justify='flex-end'\n                            wrap='nowrap'\n                          >\n                            <Tooltip title={isRequire ? t('SeriesDetailPage.disabledDiscontinueEntireOptionTooltip') : ''}>\n                              <span>\n                                <IconButton\n                                  onClick={(e) => {\n                                    updateEntireOptionValueStatus(attributeOptionInForm, 'discontinued');\n                                  }}\n                                  disabled={isRequire || isAllOptionsDiscontinued || isAllOptionsDeleted}\n                                >\n                                  <Tooltip title={t('SeriesDetailPage.discontinueEntireOption')}><RemoveCircleIcon /></Tooltip>\n                                </IconButton>\n                              </span>\n                            </Tooltip>\n                            <IconButton\n                              onClick={(e) => {\n                                updateEntireOptionValueStatus(attributeOptionInForm, 'active');\n                              }}\n                              disabled={isAllOptionsActive || isAllOptionsDeleted}\n                            >\n                              <Tooltip title={t('SeriesDetailPage.activateEntireOption')}><RestoreIcon /></Tooltip>\n                            </IconButton>\n                            <IconButton\n                              onClick={(e) => {\n                                setAddNewAttributeOptionsPopperEditModeKey(attributeOptionKey);\n                                setSelectedAttributeId(attributeOption.get('attributeId'));\n                                dispatch(new SetOptionDialogStateAction(fromJS({\n                                  open: true,\n                                  attribute: attributeOption,\n                                })));\n                              }}\n                            >\n                              <EditIcon />\n                            </IconButton>\n                            <IconButton\n                              onClick={() => {\n                                setKeyToUpdate(attributeOptionKey);\n                                toggleOptionDeleteModal(true);\n                              }}\n                            >\n                              <DeleteIcon />\n                            </IconButton>\n                          </Grid>\n                        </Grid>\n                      </Grid>\n                      {\n                        isPimTool && displayAsAttribute && (\n                          <Typography color='textPrimary' className={classes.displayAsAttributeChip}>\n                            {t('SeriesDetailPage.displayAsAttribute')}\n                          </Typography>\n                        )\n                      }\n                      <Grid\n                        container={true}\n                        wrap='nowrap'\n                      >\n                        <Grid\n                          container={true}\n                          item={true}\n                          xs={12}\n                          direction='column'\n                          wrap='nowrap'\n                        >\n                          {\n                            attributeOptionValues && attributeOptionValues.map((optionDescription, optionDescriptionIndex: number) => {\n                              const immutableOptionDescription = isImmutable(optionDescription) ? optionDescription : fromJS(optionDescription);\n                              const descriptionOptionValue = immutableOptionDescription.get('description');\n                              const descriptionSuffix = immutableOptionDescription.get('suffix');\n                              const swatchId = immutableOptionDescription.get('swatch');\n                              const imageId = immutableOptionDescription.get('optionBasedProductImage');\n                              const cutsheet = immutableOptionDescription.get('optionBasedManufacturerCutsheet');\n                              const printDescriptionCsi = immutableOptionDescription.getIn(['printDescription', 'csi']);\n                              const exclusions = immutableOptionDescription.get('exclude');\n                              const exclusionDisplayString = exclusions && `${exclusions.getIn([0, 'name'])}, ${exclusions.getIn([0, 'values', 0, 'description'])}` || '';\n                              const exclusionDisplay = compactStringDisplay(exclusionDisplayString);\n                              const priceMap = immutableOptionDescription.getIn(['price', 'default', selectedCurrency], Map());\n                              const prices = [priceMap.get('list'), priceMap.get('sell'), priceMap.get('cost')];\n                              const isOptionActive = immutableOptionDescription.get('status') === 'active';\n                              const isOptionDeleted = immutableOptionDescription.get('status') === 'deleted';\n                              const disabledDiscontinue = isRequire && onlyActive && isOptionActive;\n\n                              return !isOptionDeleted && (\n                                <Grid\n                                  key={optionDescriptionIndex + attributeOptionIndex}\n                                  container={true}\n                                  wrap='nowrap'\n                                  justify='space-between'\n                                  alignItems='center'\n                                  className={classes.optionRow}\n                                >\n                                  {\n                                    useSwatch\n                                      ? <Grid\n                                          container={true}\n                                          alignItems='center'\n                                          item={true}\n                                          xs={3}\n                                          className={classes.optionColumn}\n                                        >\n                                          <Grid\n                                            container={true}\n                                            alignItems={'center'}\n                                            wrap='nowrap'\n                                          >\n                                            <Tooltip\n                                              title={\n                                                <Grid>\n                                                  <Typography color='inherit' variant='body2'>{descriptionOptionValue}</Typography>\n                                                  {!swatchId && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.swatchNotAvailable')}</Typography>}\n                                                  {!isOptionActive && <Typography color='inherit' variant='body2'>{t('SeriesDetailPage.optionDiscontinued')}</Typography>}\n                                                </Grid>\n                                              }\n                                            >\n                                              <Grid item={true} style={{border: !isOptionActive ? `3px solid ${theme.palette.grey[600]}` : `3px solid ${theme.palette.grey[400]}`, minWidth: 60, height: 60, position: 'relative', marginRight: 8 }}>\n                                                {/* cross over diagonal line when option is discontinued*/}\n                                                {!isOptionActive &&\n                                                  <svg style={{width: '100%', height: '100%', position: 'absolute', zIndex: 1}} >\n                                                    <line x1='100%' y1='100%' x2='0' y2='0' style={{stroke: theme.palette.grey[600], strokeWidth: 3}}/>\n                                                  </svg>\n                                                }\n                                                {swatchId\n                                                  ? <Image\n                                                      src={swatchId || ''}\n                                                      aspectRatio={'100%'}\n                                                      fromService={true}\n                                                      cover={true}\n                                                      style={{opacity: isOptionActive ? 1 : 0.2}}\n                                                    />\n                                                  : <TextureIcon style={{fontSize: 72, position: 'absolute', top: -9, left: -9, color: !isOptionActive ? theme.palette.grey[200] : theme.palette.grey[400]}}/>\n                                                }\n                                                {swatchId && isOptionActive &&\n                                                  <IconButton\n                                                    style={{padding: 0, position: 'absolute', right: 0, bottom: 0}}\n                                                    onClick={() => {\n                                                      dispatch(new SetOverlayComponentPropsAction({\n                                                        id: PRINT_DESCRIPTION_MODAL_ID,\n                                                        props: {\n                                                          description: descriptionOptionValue,\n                                                          imageId: swatchId\n                                                        }\n                                                      }));\n                                                      dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                                                    }}\n                                                  >\n                                                    <ZoomInIcon fontSize='small' style={{color: 'white', backgroundColor: theme.palette.grey[600]}}/>\n                                                  </IconButton>\n                                                }\n                                              </Grid>\n                                            </Tooltip>\n                                            <Grid item={true} container={true} direction='column' alignItems='flex-start' style={{width: 'auto'}}>\n                                              {printDescriptionCsi && hasPimPrintDescriptionAcl && isPimTool &&\n                                                <Button\n                                                  color='primary'\n                                                  size='small'\n                                                  className={classNames({\n                                                    [classes.overflowAuto]: true,\n                                                    [classes.optionNotActive]: !isOptionActive,\n                                                  })}\n                                                  onClick={() => {\n                                                    dispatch(new SetOverlayComponentPropsAction({\n                                                      id: PRINT_DESCRIPTION_MODAL_ID,\n                                                      props: {\n                                                        description: descriptionOptionValue,\n                                                        printDescription: printDescriptionCsi\n                                                      }\n                                                    }));\n                                                    dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                                                  }}\n                                                  disabled={!isOptionActive}\n                                                >\n                                                  {t('SeriesDetailPage.printDescription')}\n                                                </Button>\n                                              }\n                                              {((useImage && imageId) || (useSpec && cutsheet?.size > 0)) && isPimTool &&\n                                                <Button\n                                                  color='primary'\n                                                  size='small'\n                                                  className={classNames({\n                                                    [classes.optionNotActive]: !isOptionActive,\n                                                  })}\n                                                  onClick={() => {\n                                                    dispatch(new SetOverlayComponentPropsAction({\n                                                      id: PRINT_DESCRIPTION_MODAL_ID,\n                                                      props: {\n                                                        description: descriptionOptionValue,\n                                                        productImageId: imageId,\n                                                        cutsheet\n                                                      }\n                                                    }));\n                                                    dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                                                  }}\n                                                  disabled={!isOptionActive}\n                                                >\n                                                  {t('SeriesDetailPage.additionalInfo')}\n                                                </Button>\n                                              }\n                                            </Grid>\n                                          </Grid>\n                                          <Grid item={true}>\n                                            <Typography\n                                              variant='body2'\n                                              color='textPrimary'\n                                              className={classNames({\n                                                [classes.overflowAuto]: true,\n                                                [classes.optionNotActive]: !isOptionActive,\n                                              })}\n                                              style={{ marginTop: 4 }}\n                                            >\n                                              {descriptionOptionValue}\n                                            </Typography>\n                                          </Grid>\n                                        </Grid>\n                                      : <Grid\n                                          container={true}\n                                          alignItems='center'\n                                          wrap='nowrap'\n                                          item={true}\n                                          xs={3}\n                                          className={classes.optionColumn}\n                                        >\n                                          {\n                                            isOption\n                                              ? <CheckBoxIcon color='primary' className={classNames({\n                                                  [classes.staticSelectIcons]: true,\n                                                  [classes.optionNotActiveIcon]: !isOptionActive,\n                                                })}/>\n                                              : <RadioButtonCheckedIcon color='primary' className={classNames({\n                                                  [classes.staticSelectIcons]: true,\n                                                  [classes.optionNotActiveIcon]: !isOptionActive,\n                                                })}/>\n                                          }\n                                          <Grid\n                                            container={true}\n                                            direction={'column'}\n                                            alignItems={'flex-start'}\n                                          >\n                                            <Grid>\n                                              <Typography\n                                                variant='body2'\n                                                color='textPrimary'\n                                                className={classNames({\n                                                  [classes.overflowAuto]: true,\n                                                  [classes.optionNotActive]: !isOptionActive,\n                                                })}\n                                              >\n                                                {descriptionOptionValue}\n                                              </Typography>\n                                            </Grid>\n                                            {printDescriptionCsi && hasPimPrintDescriptionAcl && isPimTool &&\n                                              <Button\n                                                color='primary'\n                                                size='small'\n                                                className={classNames({\n                                                  [classes.overflowAuto]: true,\n                                                  [classes.optionNotActive]: !isOptionActive,\n                                                })}\n                                                onClick={() => {\n                                                  dispatch(new SetOverlayComponentPropsAction({\n                                                    id: PRINT_DESCRIPTION_MODAL_ID,\n                                                    props: {\n                                                      description: descriptionOptionValue,\n                                                      printDescription: printDescriptionCsi\n                                                    }\n                                                  }));\n                                                  dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                                                }}\n                                                disabled={!isOptionActive}\n                                              >\n                                                {t('SeriesDetailPage.printDescription')}\n                                              </Button>\n                                            }\n                                            {((useImage && imageId) || (useSpec && cutsheet?.size > 0)) && isPimTool &&\n                                              <Button\n                                                color='primary'\n                                                size='small'\n                                                className={classNames({\n                                                  [classes.optionNotActive]: !isOptionActive,\n                                                })}\n                                                onClick={() => {\n                                                  dispatch(new SetOverlayComponentPropsAction({\n                                                    id: PRINT_DESCRIPTION_MODAL_ID,\n                                                    props: {\n                                                      description: descriptionOptionValue,\n                                                      productImageId: imageId,\n                                                      cutsheet\n                                                    }\n                                                  }));\n                                                  dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                                                }}\n                                                disabled={!isOptionActive}\n                                              >\n                                                {t('SeriesDetailPage.additionalInfo')}\n                                              </Button>\n                                            }\n                                          </Grid>\n                                        </Grid>\n                                  }\n                                  <Grid\n                                    item={true}\n                                    xs={1}\n                                  >\n                                    <Typography\n                                      variant='body2'\n                                      color='textPrimary'\n                                      className={classNames({\n                                        [classes.optionNotActive]: !isOptionActive,\n                                      })}\n                                    >\n                                      {descriptionSuffix}\n                                    </Typography>\n                                  </Grid>\n                                  <Grid\n                                    item={true}\n                                    xs={2}\n                                  >\n                                    {\n                                      exclusions && exclusions.size !== 0\n                                        ? <Button\n                                            onClick={(e) => {\n                                              dispatch(change(OPTION_EXCLUSION_DIALOG_FORM, 'exclusionAddList', exclusions));\n                                              setExclusionDialogOpen(true);\n                                              setExclusionPopperAttributeOptionKey(attributeOptionKey);\n                                              setExclusionPopperOptionDescriptionIndex(optionDescriptionIndex);\n                                            }}\n                                            className={classes.exclusionDisplay}\n                                            disabled={!isOptionActive}\n                                          >\n                                            <VisibilityIcon className={classNames({\n                                              [classes.exclusionIcon]: true,\n                                              [classes.optionNotActiveIcon]: !isOptionActive,\n                                            })}/>\n                                            <Typography\n                                              color='primary'\n                                              className={classNames({\n                                                [classes.optionNotActive]: !isOptionActive,\n                                              })}\n                                            >\n                                              {exclusionDisplay}\n                                            </Typography>\n                                          </Button>\n                                        : <Button\n                                            className={classes.exclusionDisplay}\n                                            onClick={(e) => {\n                                              setExclusionDialogOpen(true);\n                                              setExclusionPopperAttributeOptionKey(attributeOptionKey);\n                                              setExclusionPopperOptionDescriptionIndex(optionDescriptionIndex);\n                                            }}\n                                            disabled={!isOptionActive}\n                                          >\n                                            <AddCircleIcon className={classNames({\n                                              [classes.exclusionIcon]: true,\n                                              [classes.optionNotActiveIcon]: !isOptionActive,\n                                            })}/>\n                                            <Typography\n                                              color='primary'\n                                              className={classNames({\n                                                [classes.optionNotActive]: !isOptionActive,\n                                              })}\n                                            >\n                                              {t('configuratorPage.optionsWidget.addNewExclusionsButton')}\n                                            </Typography>\n                                          </Button>\n                                      }\n                                  </Grid>\n                                  <Grid\n                                    item={true}\n                                    xs={2}\n                                  >\n                                    <Typography\n                                      variant='body2'\n                                      color='textPrimary'\n                                    >\n                                      {priceMap.get('isPoa')\n                                        ? <CheckIcon color='primary' className={classNames({\n                                            [classes.optionNotActiveIcon]: !isOptionActive,\n                                          })}/>\n                                        : null}\n                                    </Typography>\n                                  </Grid>\n                                  {\n                                    prices.map((price, index) => {\n                                      const isPOA = priceMap.get('isPoa');\n                                      const isListPrice = index === 0;\n                                      return (\n                                        <Grid\n                                          key={index}\n                                          item={true}\n                                          xs={1}\n                                        >\n                                          <Typography\n                                            variant='body2'\n                                            color='textPrimary'\n                                            className={classNames({\n                                              [classes.optionNotActive]: !isOptionActive,\n                                            })}\n                                          >\n                                            {isPOA && isListPrice ? null : price}\n                                          </Typography>\n                                        </Grid>\n                                      );\n                                    })\n                                  }\n                                  <Grid\n                                    container={true}\n                                    item={true}\n                                    xs={1}\n                                    justify='space-around'\n                                  >\n                                    {isOptionActive\n                                      ? <Tooltip title={disabledDiscontinue ? t('SeriesDetailPage.disabledDescriptionDiscontinueTooltip') : ''}>\n                                          <span>\n                                            <Button\n                                              color='primary'\n                                              size='small'\n                                              disabled={disabledDiscontinue}\n                                              onClick={() => {\n                                                setKeyToUpdate(attributeOptionKey);\n                                                setValueIndexToUpdate(optionDescriptionIndex);\n                                                setOptionValueDescriptionsWithEffect([descriptionOptionValue]);\n                                                updateOptionValueStatus(attributeOptionKey, optionDescriptionIndex, 'discontinued');\n                                              }}\n                                            >\n                                              {t('SeriesDetailPage.discontinue')}\n                                            </Button>\n                                          </span>\n                                        </Tooltip>\n                                      : <Button\n                                          color='primary'\n                                          size='small'\n                                          onClick={() => {\n                                            updateOptionValueStatus(attributeOptionKey, optionDescriptionIndex, 'active');\n                                          }}\n                                        >{t('SeriesDetailPage.activate')}</Button>\n                                    }\n                                  </Grid>\n                                </Grid>\n                              );\n                            })\n                          }\n\n                        </Grid>\n                      </Grid>\n                    </Grid>\n                  );\n                }).valueSeq().toArray()\n              }\n            </Grid>\n          : <NoAttributesFound\n              title={t('configuratorPage.noOptions')}\n              subtitle={t('SeriesDetailPage.noOptionsSubtitle')}\n              buttonText={t('SeriesDetailPage.addOption')}\n              SvgElement={<AtsSvgEmptyFeaturesOptions width='95' height='95' color={theme.palette.secondary[300]} shadowColor={theme.palette.secondary.main}/>}\n              onClick={() => {\n                dispatch(new SetOptionDialogStateAction(fromJS({\n                  open: true,\n                })));\n              }}\n            />\n      }\n      <OptionDialog\n        series={series}\n        selectedCurrency={selectedCurrency}\n        addNewAttributeOptionsPopperEditModeKey={addNewAttributeOptionsPopperEditModeKey}\n        setAddNewAttributeOptionsPopperEditModeKey={setAddNewAttributeOptionsPopperEditModeKey}\n      />\n      <ExclusionDialog\n        exclusionDialogOpen={exclusionDialogOpen}\n        closeExclusionDialog={closeExclusionDialog}\n        exclusionPopperAttributeOptionKey={exclusionPopperAttributeOptionKey}\n        exclusionPopperOptionDescriptionIndex={exclusionPopperOptionDescriptionIndex}\n      />\n      <WholeExclusionDialog\n        closeWholeExclusionDialog={closeWholeExclusionDialog}\n        wholeExclusionOptionDialogOpen={wholeExclusionOptionDialogOpen}\n        wholeExclusionPopperAttributeOptionKey={wholeExclusionPopperAttributeOptionKey}\n      />\n      <DeleteModal // for activate, discontinue options\n        open={deleteOptionModalOpen || discontinueModalOpen.open}\n        content={\n          <Grid>\n            { deleteOptionModalOpen &&\n              <Typography variant='h6'>\n                {`${t('SeriesDetailPage.deleteConfirmation')} ${attributeOptionsInForm.getIn([keyToUpdate, 'name'])}?`}\n              </Typography>\n            }\n            { discontinueModalOpen.open &&\n              <>\n              <Typography variant='h6'>\n                {`${t('SeriesDetailPage.discontinueConfirmation')} ${attributeOptionsInForm.getIn([keyToUpdate, 'name'])}:`}\n              </Typography>\n              <Grid container={true} direction='column' spacing={1} className={classes.effectedListContainer}>\n                {\n                  optionValueDescriptionsWithEffect.map((description: string, index: number) => (\n                    <Grid key={index} item={true}>\n                      <Typography variant='body1'>\n                        { description }\n                      </Typography>\n                    </Grid>\n                  ))\n                }\n              </Grid>\n              </>\n            }\n            { deleteOptionModalOpen &&\n              <Typography variant='body2' color='textPrimary' className={classes.warningMessage}>\n                {t('SeriesDetailPage.invalidProductWarning')}\n              </Typography>\n            }\n            { discontinueModalOpen.open &&\n              <Typography variant='body2' color='textPrimary' className={classes.warningMessage}>\n                {t('SeriesDetailPage.discontinuedProductWarning')}\n              </Typography>\n            }\n          </Grid>\n        }\n        toggleDeleteModal={() => {\n          toggleOptionDeleteModal(false);\n          toggleDiscontinueModalOpen({open: false, bulkUpdate: false});\n        }}\n        handleDelete={() => {\n          if (deleteOptionModalOpen) {\n            deleteOption(keyToUpdate);\n          }\n          if (discontinueModalOpen.open) {\n            discontinueOptionValues();\n          }\n        }}\n        withLoading={false}\n        buttonOk={discontinueModalOpen.open ? t('SeriesDetailPage.discontinue') : null}\n      />\n    </div>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectUserHasPimPrintDescriptionAcl = makeSelectUserHasPimPrintDescriptionAcl();\n  const selectSite = makeSelectSite();\n  const selectUserHasFeatOptionBasedImages = makeSelectUserHasFeatOptionBasedImages();\n  const selectUserHasFeatOptionBasedCutsheets = makeSelectUserHasFeatOptionBasedCutsheets();\n  return function mapStateToProps(state) {\n    return ({\n      hasPimPrintDescriptionAcl: selectUserHasPimPrintDescriptionAcl(state),\n      site: selectSite(state),\n      hasFeatOptionBasedImages: selectUserHasFeatOptionBasedImages(state),\n      hasFeatOptionBasedCutsheets: selectUserHasFeatOptionBasedCutsheets(state)\n    });\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setSelectedAttributeId: (attributeId: number) => {\n      dispatch(new SetSelectedAttributeIdAction(attributeId));\n    },\n  };\n};\n\nexport default compose<React.FC<IOptionsComponentProps>>(\n  connect(makeMapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(Options);","import * as React from 'react';\nimport { Grid, IconButton, makeStyles } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { WidgetHeaderEndStyle, WidgetHeaderStyle, WidgetLoaderStyle } from '../../../components';\nimport Options from './Options';\nimport { Series } from '../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { SetOptionDialogStateAction } from '../../../modules/ApplicationModule/actions';\nimport { useDispatch } from 'react-redux';\nimport { fromJS } from 'immutable';\nimport { Currency } from '../../../constants';\n\ninterface IOptionsWidgetComponentProps {\n  selectedCurrency: Currency;\n  formValues: any;\n  series: IMap<Series>;\n  deleteMaskOption: (key: string) => void;\n}\n\nconst useStyles = makeStyles((theme) => ({\n}));\n\nconst OptionsWidget: React.FC<IOptionsWidgetComponentProps & WithTranslation> = (props) => {\n  const {\n    t,\n    deleteMaskOption,\n    selectedCurrency,\n    formValues,\n    series,\n  } = props;\n\n  const dispatch = useDispatch();\n\n  const openOptionsDialog = () => {\n    dispatch(new SetOptionDialogStateAction(fromJS({\n      open: true,\n    })));\n  };\n\n  return (\n    <WidgetLoaderStyle\n      noAuto={true}\n      header={\n        <Grid\n          container={true}\n        >\n          <Grid container={true} item={true} xs={true} alignItems='center'>\n            <WidgetHeaderStyle>\n              {t('configuratorPage.optionsWidget.optionsWidgetTitle')}\n            </WidgetHeaderStyle>\n          </Grid>\n          <WidgetHeaderEndStyle>\n            <IconButton onClick={openOptionsDialog}>\n              <AddIcon fontSize='large'/>\n            </IconButton>\n          </WidgetHeaderEndStyle>\n          <Options\n            selectedCurrency={selectedCurrency}\n            formValues={formValues}\n            series={series}\n            deleteMaskOption={deleteMaskOption}\n          />\n        </Grid>\n      }\n    />\n  );\n};\n\nexport default withTranslation('translations')(OptionsWidget);","/*\n * The `chars`, `lookup`, and `decodeFromBase64` members of this file are\n * licensed under the following:\n *\n *     base64-arraybuffer\n *     https://github.com/niklasvh/base64-arraybuffer\n *\n *     Copyright (c) 2012 Niklas von Hertzen\n *     Licensed under the MIT license.\n *\n */\nimport pako from 'pako';\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nexport var decodeFromBase64 = function (base64) {\n    var bufferLength = base64.length * 0.75;\n    var len = base64.length;\n    var i;\n    var p = 0;\n    var encoded1;\n    var encoded2;\n    var encoded3;\n    var encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var bytes = new Uint8Array(bufferLength);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return bytes;\n};\nvar arrayToString = function (array) {\n    var str = '';\n    for (var i = 0; i < array.length; i++) {\n        str += String.fromCharCode(array[i]);\n    }\n    return str;\n};\nexport var decompressJson = function (compressedJson) {\n    return arrayToString(pako.inflate(decodeFromBase64(compressedJson)));\n};\nexport var padStart = function (value, length, padChar) {\n    var padding = '';\n    for (var idx = 0, len = length - value.length; idx < len; idx++) {\n        padding += padChar;\n    }\n    return padding + value;\n};\n","import { decompressJson } from './utils';\nimport CourierBoldCompressed from './Courier-Bold.compressed.json';\nimport CourierBoldObliqueCompressed from './Courier-BoldOblique.compressed.json';\nimport CourierObliqueCompressed from './Courier-Oblique.compressed.json';\nimport CourierCompressed from './Courier.compressed.json';\nimport HelveticaBoldCompressed from './Helvetica-Bold.compressed.json';\nimport HelveticaBoldObliqueCompressed from './Helvetica-BoldOblique.compressed.json';\nimport HelveticaObliqueCompressed from './Helvetica-Oblique.compressed.json';\nimport HelveticaCompressed from './Helvetica.compressed.json';\nimport TimesBoldCompressed from './Times-Bold.compressed.json';\nimport TimesBoldItalicCompressed from './Times-BoldItalic.compressed.json';\nimport TimesItalicCompressed from './Times-Italic.compressed.json';\nimport TimesRomanCompressed from './Times-Roman.compressed.json';\nimport SymbolCompressed from './Symbol.compressed.json';\nimport ZapfDingbatsCompressed from './ZapfDingbats.compressed.json';\n// prettier-ignore\nvar compressedJsonForFontName = {\n    'Courier': CourierCompressed,\n    'Courier-Bold': CourierBoldCompressed,\n    'Courier-Oblique': CourierObliqueCompressed,\n    'Courier-BoldOblique': CourierBoldObliqueCompressed,\n    'Helvetica': HelveticaCompressed,\n    'Helvetica-Bold': HelveticaBoldCompressed,\n    'Helvetica-Oblique': HelveticaObliqueCompressed,\n    'Helvetica-BoldOblique': HelveticaBoldObliqueCompressed,\n    'Times-Roman': TimesRomanCompressed,\n    'Times-Bold': TimesBoldCompressed,\n    'Times-Italic': TimesItalicCompressed,\n    'Times-BoldItalic': TimesBoldItalicCompressed,\n    'Symbol': SymbolCompressed,\n    'ZapfDingbats': ZapfDingbatsCompressed,\n};\nexport var FontNames;\n(function (FontNames) {\n    FontNames[\"Courier\"] = \"Courier\";\n    FontNames[\"CourierBold\"] = \"Courier-Bold\";\n    FontNames[\"CourierOblique\"] = \"Courier-Oblique\";\n    FontNames[\"CourierBoldOblique\"] = \"Courier-BoldOblique\";\n    FontNames[\"Helvetica\"] = \"Helvetica\";\n    FontNames[\"HelveticaBold\"] = \"Helvetica-Bold\";\n    FontNames[\"HelveticaOblique\"] = \"Helvetica-Oblique\";\n    FontNames[\"HelveticaBoldOblique\"] = \"Helvetica-BoldOblique\";\n    FontNames[\"TimesRoman\"] = \"Times-Roman\";\n    FontNames[\"TimesRomanBold\"] = \"Times-Bold\";\n    FontNames[\"TimesRomanItalic\"] = \"Times-Italic\";\n    FontNames[\"TimesRomanBoldItalic\"] = \"Times-BoldItalic\";\n    FontNames[\"Symbol\"] = \"Symbol\";\n    FontNames[\"ZapfDingbats\"] = \"ZapfDingbats\";\n})(FontNames || (FontNames = {}));\nvar fontCache = {};\nvar Font = /** @class */ (function () {\n    function Font() {\n        var _this = this;\n        this.getWidthOfGlyph = function (glyphName) {\n            return _this.CharWidths[glyphName];\n        };\n        this.getXAxisKerningForPair = function (leftGlyphName, rightGlyphName) {\n            return (_this.KernPairXAmounts[leftGlyphName] || {})[rightGlyphName];\n        };\n    }\n    Font.load = function (fontName) {\n        var cachedFont = fontCache[fontName];\n        if (cachedFont)\n            return cachedFont;\n        var json = decompressJson(compressedJsonForFontName[fontName]);\n        var font = Object.assign(new Font(), JSON.parse(json));\n        font.CharWidths = font.CharMetrics.reduce(function (acc, metric) {\n            acc[metric.N] = metric.WX;\n            return acc;\n        }, {});\n        font.KernPairXAmounts = font.KernPairs.reduce(function (acc, _a) {\n            var name1 = _a[0], name2 = _a[1], width = _a[2];\n            if (!acc[name1])\n                acc[name1] = {};\n            acc[name1][name2] = width;\n            return acc;\n        }, {});\n        fontCache[fontName] = font;\n        return font;\n    };\n    return Font;\n}());\nexport { Font };\n","/* tslint:disable max-classes-per-file */\nimport { decompressJson, padStart } from './utils';\nimport AllEncodingsCompressed from './all-encodings.compressed.json';\nvar decompressedEncodings = decompressJson(AllEncodingsCompressed);\nvar allUnicodeMappings = JSON.parse(decompressedEncodings);\nvar Encoding = /** @class */ (function () {\n    function Encoding(name, unicodeMappings) {\n        var _this = this;\n        this.canEncodeUnicodeCodePoint = function (codePoint) {\n            return codePoint in _this.unicodeMappings;\n        };\n        this.encodeUnicodeCodePoint = function (codePoint) {\n            var mapped = _this.unicodeMappings[codePoint];\n            if (!mapped) {\n                var str = String.fromCharCode(codePoint);\n                var hexCode = \"0x\" + padStart(codePoint.toString(16), 4, '0');\n                var msg = _this.name + \" cannot encode \\\"\" + str + \"\\\" (\" + hexCode + \")\";\n                throw new Error(msg);\n            }\n            return { code: mapped[0], name: mapped[1] };\n        };\n        this.name = name;\n        this.supportedCodePoints = Object.keys(unicodeMappings)\n            .map(Number)\n            .sort(function (a, b) { return a - b; });\n        this.unicodeMappings = unicodeMappings;\n    }\n    return Encoding;\n}());\nexport var Encodings = {\n    Symbol: new Encoding('Symbol', allUnicodeMappings.symbol),\n    ZapfDingbats: new Encoding('ZapfDingbats', allUnicodeMappings.zapfdingbats),\n    WinAnsi: new Encoding('WinAnsi', allUnicodeMappings.win1252),\n};\n","import { all, call, delay, put, select, take, takeEvery, takeLatest, takeLeading, } from 'redux-saga/effects';\nimport {\n  CopyRevisionAction,\n  CreateQuoteAction,\n  CreateQuoteWithSpecToQuoteAction,\n  CreateQuoteWithSpecToQuoteActionSuccess,\n  CreateRequoteAction,\n  CreateRevisionAction,\n  CreateSalesOrderAction,\n  DeleteQuoteAction,\n  DeleteQuoteAndGetProjectAction,\n  DeleteQuoteSuccessAction,\n  DeleteRevisionAction,\n  DeleteRevisionFailAction,\n  DeleteRevisionSuccessAction,\n  DownloadQuoteBillingAction,\n  DownloadQuoteBillingFailedAction, DownloadQuoteBillingSucceedAction,\n  DuplicateQuoteAction,\n  GetProductMediaAction,\n  GetProductMediaSucceededAction,\n  GetQuoteBillingAction,\n  GetQuoteBillingFailedAction,\n  GetQuoteBillingSucceedAction,\n  GetQuoteFailAction,\n  GetQuotePhasesAction,\n  GetQuotePhasesSuccessAction,\n  GetQuotesAction,\n  GetQuoteSearchResultsSucceededAction,\n  GetQuotesFailAction,\n  GetQuotesSuccessAction,\n  GetRevisionsAction,\n  GetRevisionsFailAction,\n  GetRevisionsSuccessAction,\n  GetSpecToQuoteDraftAction,\n  GetSpecToQuoteDraftFailedAction,\n  GetSpecToQuoteDraftSucceededAction,\n  GetSpecToQuoteProductsAction,\n  GetSpecToQuoteProductsFailedAction,\n  GetSpecToQuoteProductsSucceededAction,\n  GetSpecToQuoteStatusAction,\n  MapSpecToQuoteProductAction,\n  PatchQuoteAction,\n  PatchQuoteSuccessAction,\n  QuoteTypes,\n  SaveSpecToQuoteDraftAction,\n  SearchQuotesAction,\n  SelectQuoteAction,\n  SelectQuoteIdAction,\n  SendQuoteToErpAction,\n  SendRecommendedProductFeedbacksAction,\n  SetIsCreatingQuoteWithSpecToQuoteAction,\n  SetIsCreatingSalesOrderAction,\n  SetRevisionAction,\n  SetRevisionFailAction,\n  SetRevisionLoadingAction,\n  SetRevisionSuccessAction,\n  SubmittingQuoteAction,\n  UnmapSpecToQuoteProductAction,\n  UpdateQuoteAction,\n  UpdateQuoteAssignedToAction,\n  UpdateQuoteAssignedToSucceededAction,\n  UpdateQuotePhaseAction,\n  UpdateQuotePhaseSucceededAction,\n  UpdateSpecToQuoteLoadingAction\n} from './actions';\nimport { SetSortProductsByManufacturerAction } from './../QuoteEditModule/actions';\nimport {\n  GetCitiesAction,\n  GetCountriesAction,\n  GetProvincesAction,\n  SaveCityNameAction,\n  SaveCountryNameAction,\n  SaveProvinceNameAction,\n} from '../LocationModule/actions';\nimport {\n  AddQuoteToProjectAction,\n  CreatePTProjectAction,\n  GetProjectsAction,\n  PatchKeyContactsAction,\n  ProjectActionTypes,\n  RedirectToQuoteAction,\n  RedirectToQuoteEditAction,\n  RemoveQuoteFromProjectAction,\n  SelectProjectAction,\n} from '../ProjectModule/actions';\nimport { fromJS, List, Map, Set, } from 'immutable';\nimport { atsApiCallWaitingAction, } from '../AtsModule/saga';\nimport { AtsApiCallAction, } from '../AtsModule/actions';\nimport { push } from 'connected-react-router/immutable';\nimport { DEFAULT_MOUNT_POINT, getQuoteEditPath, getQuotePath } from './constants';\nimport { IMap, } from 'ats-utils/src/Interfaces';\nimport  { makeSelectSortProductsByManufacturer, } from '../QuoteEditModule/selectors';\nimport { SetQuoteDirtyAction, RestartAutoSaveTimerAction } from '../QuoteEditModule/actions';\nimport {\n  makeSelectIsSpecToQuote,\n  makeSelectQuote,\n  makeSelectSelectedQuoteId,\n  makeSelectSpecToQuoteLinkedListBySpecId,\n  makeSelectsSpecProductsRecommendations,\n  selectReduxFormState,\n} from './selectors';\nimport { Contact, HasId, ListItem, Quote } from '../../models';\nimport { makeSelectProject } from '../ProjectModule/selectors';\nimport Project from '../../models/Project';\nimport {\n  AI_IDENTIFIED_PRODUCT_ID,\n  AMPLITUDE_EVENT,\n  NOT_FOUND_PATH,\n  QUOTE_LIST_PATH,\n  REPORT_PRINT_TYPE,\n  SPEC_TO_QUOTE_CRONJOB_TYPE,\n  TIME_OUT_LIMIT\n} from '../../constants';\nimport { IProductMedia } from '../../components/ShopDrawingPrint';\nimport * as uuid from 'uuid/v1';\nimport {\n  SetOverlayComponentPropsAction,\n  SetSnackbarOpenAction,\n  ToggleLiveChatAction,\n  ToggleOverlayComponentAction\n} from '../ApplicationModule/actions';\nimport { ISpecToQuote } from './reducer';\nimport { addQuoteToProject, createPTProject, getProjects, patchKeyContacts, removeQuoteFromProject } from '../ProjectModule/saga';\nimport { makeSelectAmplitudeData, makeSelectUserHasCurrencyConversion, makeSelectEnv, makeSelectAppId } from '../AtsModule/selectors';\nimport SpecTakeoffFilterServiceApi from '../SpecModule/SpecTakeoffFilterServiceApi';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport i18next from 'i18next';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { removeTZ } from '../../components/FieldDatePickerV2';\nimport moment from 'moment';\nimport { SALES_ORDER_MODAL_KEY } from '../../components/SalesOrderModal/Component';\nimport { change, getFormValues, initialize } from 'redux-form';\nimport { makeSelectSpec } from '../SpecModule/selectors';\nimport { bidFormSelector, initialBidFormSelector } from '../QuoteEditModule/selectors';\nimport { IPrintObj, PollPrintAction } from '../PrintModule/actions';\nimport { pollPrint, quoteBillingPrint } from '../PrintModule/saga';\nimport { setUsetifulTags, TOUR_TRIGGER_KEY, TourTriggerValue } from '../../utils';\nimport { timeoutResetUsetifulTags } from '../../utils/setUsetifulTags';\nimport { constructUpdatedKeyContactsForQuoteSave, normalizeAttributes, setProductDefaultPrint } from './utils';\nimport {IMPORT_PRICING_FORM_NAME} from '../../constants/quote';\nimport store from '../../store';\n\n// Success snackbars are suppressed for auto-save (silent background save). The\n// failure snackbar always fires regardless of mode.\nfunction* showQuoteSavedSnackbar(messageKey: string, isAutoSave: boolean) {\n  if (isAutoSave) {\n    return;\n  }\n  yield put(new SetSnackbarOpenAction({\n    message: i18next.t(messageKey),\n    severity: 'success',\n    anchorOrigin: {\n      vertical: 'top',\n      horizontal: 'right',\n    },\n  }));\n}\n\nexport default function* quoteSaga() {\n  yield takeEvery(QuoteTypes.GET_QUOTES, getQuotes);\n  yield takeLeading(QuoteTypes.CREATE_QUOTE, createQuote);\n  yield takeLatest(QuoteTypes.CREATE_QUOTE_WITH_SPEC_TO_QUOTE, createQuoteWithSpecToQuote);\n  yield takeLeading(QuoteTypes.UPDATE_QUOTE, updateQuote);\n  yield takeEvery(QuoteTypes.DUPLICATE_QUOTE, duplicateQuote);\n  yield takeLatest(QuoteTypes.DELETE_QUOTE_AND_GET_PROJECT, deleteQuoteAndGetAction);\n  yield takeEvery(QuoteTypes.DELETE_QUOTE, deleteQuote);\n  yield takeEvery(QuoteTypes.CREATE_REVISION, createRevision);\n  yield takeEvery(QuoteTypes.CREATE_REQUOTE, createRequote);\n  yield takeEvery(QuoteTypes.SET_REVISION, setRevision);\n  yield takeEvery(QuoteTypes.GET_REVISIONS, getRevisions);\n  yield takeEvery(QuoteTypes.DELETE_REVISION, deleteRevision);\n  yield takeEvery(QuoteTypes.COPY_REVISION, copyRevision);\n  yield takeEvery(QuoteTypes.GET_QUOTE_PHASES, getQuotePhases);\n  yield takeEvery(QuoteTypes.PATCH_QUOTE, patchQuote);\n  yield takeLatest(QuoteTypes.SEARCH_QUOTES, searchQuotes);\n  yield takeEvery(QuoteTypes.GET_PRODUCT_MEDIA, getProductMedia);\n  yield takeEvery(ProjectActionTypes.REDIRECT_TO_QUOTE, redirectToQuoteDetails);\n  yield takeEvery(ProjectActionTypes.REDIRECT_TO_QUOTE_EDIT, redirectToQuoteEdit);\n  yield takeLatest(ProjectActionTypes.SELECT_PROJECT, projectSelected);\n  // yield takeLatest(QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS, getSpecToQuoteProductsParallel);\n  yield takeLatest(QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS, getSpecToQuoteProducts);\n  yield takeLatest(QuoteTypes.MAP_SPEC_TO_QUOTE_PRODUCT, mapSpecToQuoteProduct);\n  yield takeLatest(QuoteTypes.UNMAP_SPEC_TO_QUOTE_PRODUCT, unmapSpecToQuoteProduct);\n  yield takeLatest(QuoteTypes.UPDATE_QUOTE_PHASE, updateQuotePhase);\n  yield takeLatest(QuoteTypes.UPDATE_QUOTE_ASSIGNED_TO, updateQuoteAssignedTo);\n  yield takeLatest(QuoteTypes.SEND_RECOMMENDED_PRODUCT_FEEDBACKS, sendRecommendedProductFeedbacks);\n  yield takeLatest(QuoteTypes.CREATE_SALES_ORDER, createSalesOrder);\n  yield takeLatest(QuoteTypes.SEND_QUOTE_TO_ERP, sendQuoteToErp);\n  yield takeLatest(QuoteTypes.GET_SPEC_TO_QUOTE_STATUS, getSpecToQuoteStatus);\n  yield takeLatest(QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT, getSpecToQuoteDraft);\n  yield takeLatest(QuoteTypes.SAVE_SPEC_TO_QUOTE_DRAFT, saveSpecToQuoteDraft);\n  yield takeLatest(QuoteTypes.GET_QUOTE_BILLING, getQuoteBilling);\n  yield takeLatest(QuoteTypes.DOWNLOAD_QUOTE_BILLING, downloadQuoteBilling);\n}\n\nexport function* saveSpecToQuoteDraft(\n  action: SaveSpecToQuoteDraftAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    quoteId,\n    draft\n  } = payload;\n\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'upsertQuoteDraft',\n      params: {\n        // specId\n        quoteId\n      },\n      body: {\n        draft: JSON.stringify(draft)\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const savedDraft = immutableData.getIn(['payload', 'quotation', 'draft', 0]);\n    if (savedDraft == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:specToQuotePage.draftSavedFailedMessage'),\n        severity: 'error',\n      }));\n    }\n  } else {\n    console.error('saveSpecToQuoteDraft failed', { error }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:specToQuotePage.draftSavedFailedMessage'),\n      severity: 'error',\n    }));\n  }\n}\n\nexport function* getSpecToQuoteDraft(\n  action: GetSpecToQuoteDraftAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    quoteId,\n    onSuccess,\n  } = payload;\n\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getQuoteDraft',\n      params: {\n        quoteId\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const specToQuoteDraft = immutableData.getIn(['payload', 'quotation', 'draft', 0]);\n    if (specToQuoteDraft == null) {\n      // console.error('Invalid response', data); // tslint:disable-line\n      yield put(new GetSpecToQuoteDraftFailedAction());\n    } else {\n      const parsedDraft = fromJS(JSON.parse(specToQuoteDraft.get('draft')));\n      yield put(new GetSpecToQuoteDraftSucceededAction({\n        quoteId,\n        userId: specToQuoteDraft.get('userId'),\n        createdDate: specToQuoteDraft.get('createdDate'),\n        draft: parsedDraft,\n      }));\n      // yield put(new PrepareInitialValuesForSpecToQuote({\n      //   initialValues: parsedDraft.get('formSections'),\n      //   sort: parsedDraft.get('sortValue'),\n      //   specId,\n      //   userId: specToQuoteDraft.get('userId'),\n      //   createdDate: specToQuoteDraft.get('createdDate'),\n      //   draft: parsedDraft,\n      // }));\n      // yield put(initialize(SPEC_TO_QUOTE_FORM, Map().set('sections', parsedDraft.get('formSections'))));\n      if (onSuccess) {\n        onSuccess(specToQuoteDraft);\n      }\n    }\n  } else {\n    console.error('getSpecToQuoteDraft failed', { error }); // tslint:disable-line\n  }\n}\n\nexport function* sendQuoteToErp(\n  action: SendQuoteToErpAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteId\n  } = payload;\n\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: i18next.t('translations:sendQuoteToErp.sending') }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createErp',\n      params: {\n        quoteId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const erpId: string = immutableData.getIn(['payload', 'quotation', 'erpId']);\n    if (erpId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:sendQuoteToErp.errorMessage'),\n        severity: 'error',\n        anchorOrigin: {\n          horizontal: 'right',\n          vertical: 'top'\n        }\n      }));\n    } else {\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:sendQuoteToErp.successMessage'),\n        severity: 'success',\n        anchorOrigin: {\n          horizontal: 'right',\n          vertical: 'top'\n        }\n      }));\n    }\n  } else {\n    console.error('SendQuoteToErpAction failed', { err }); // tslint:disable-line\n    yield put(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:sendQuoteToErp.errorMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n}\n\nexport function* createSalesOrder(\n  action: CreateSalesOrderAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteId,\n    dispatch\n  } = payload;\n\n  yield put(new SetIsCreatingSalesOrderAction({ isCreatingSalesOrder: true }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createErp',\n      params: {\n        quoteId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const salesOrderId: string = immutableData.getIn(['payload', 'quotation', 'salesOrderId']);\n    yield put(new ToggleOverlayComponentAction({\n      id: SALES_ORDER_MODAL_KEY,\n      open: false\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:salesOrderModal.successMessage', { salesOrderId }),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    console.error('CreateSalesOrderAction failed', { err }); // tslint:disable-line\n    yield put(new ToggleOverlayComponentAction({\n      id: SALES_ORDER_MODAL_KEY,\n      open: false\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:salesOrderModal.errorMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      },\n      actionProps: {\n        label: i18next.t('translations:salesOrderModal.liveChat'),\n        autoHideDuration: null,\n        onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n        buttonStyle: {\n          color: 'white',\n          textDecoration: 'underline'\n        }\n      }\n    }));\n  }\n  yield put(new SetIsCreatingSalesOrderAction({ isCreatingSalesOrder: false }));\n  return { data, err };\n}\n\nfunction* sendRecommendedProductFeedbacks(\n  action: SendRecommendedProductFeedbacksAction\n) {\n  const { feedbacks, specId } = action.payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'recommendedProductFeedback',\n      params: {\n      },\n      body: {\n        feedbacks,\n        specId\n      }\n    }\n  }));\n  if (data) {\n    console.debug('Submit feedbacks succeeded');\n  } else {\n    console.error('Submit feedbacks failed', { err }); // tslint:disable-line\n  }\n}\n\nexport function* updateQuotePhase(\n  action: UpdateQuotePhaseAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteId,\n    quotePhase\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'updateQuotePhase',\n      params: {\n        quoteId\n      },\n      body: {\n        quotePhase\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const phase: string = immutableData.getIn(['payload', 'quotation', 'quote', 0, 'quotePhase']);\n    yield put(new UpdateQuotePhaseSucceededAction({ quoteId, quotePhase: phase }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.statusUpdateSuccessfulMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    console.error('updateQuotePhase failed', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.statusUpdateFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n  return { data, err };\n}\n\nexport function* updateQuoteAssignedTo(\n  action: UpdateQuoteAssignedToAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteId,\n    assignedTo\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'updateQuote',\n      params: {\n        quoteId\n      },\n      body: {\n        assignedTo\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const updatedAssignedTo = immutableData.getIn(['payload', 'quotation', 'quote', 0, 'assignedTo']);\n    yield put(new UpdateQuoteAssignedToSucceededAction({\n      quoteId,\n      assignedTo: updatedAssignedTo ? updatedAssignedTo.toJS() : assignedTo,\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.assignedToUpdateSuccessfulMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  } else {\n    console.error('updateQuoteAssignedTo failed', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.assignedToUpdateFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n  }\n  return { data, err };\n}\n\nfunction* unmapSpecToQuoteProduct(\n  action: UnmapSpecToQuoteProductAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    quoteProductId,\n    specProductId,\n    type,\n    specId,\n  } = payload;\n  console.debug('Unmapping spec to quote product', { quoteProductId, specProductId, type, specId });\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'unmapSpecToQuoteProduct',\n      params: {\n      },\n      body: {\n        quoteProductId,\n        specProductId,\n        type,\n        specId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const completionStatus: boolean = immuData.getIn(['payload', 'quotation', 'specToQuote']);\n    if (completionStatus == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('unmapSpecToQuoteProduct failed', { err }); // tslint:disable-line\n  }\n}\n\nfunction* mapSpecToQuoteProduct(\n  action: MapSpecToQuoteProductAction,\n) {\n  const {\n    payload,\n  } = action;\n  console.debug('Mapping spec to quote product', { ...payload });\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'mapSpecToQuoteProduct',\n      params: {\n      },\n      body: {\n        ...payload\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    // const project: List<IMap<Spec>> = immuData.getIn(['payload', 'spec', 'spec']);\n    // if (project == null) {\n    //   console.error('Invalid response', data); // tslint:disable-line\n    // } else {\n    //   if (redirect) {\n    //     yield put(new GetSpecsSucceededAction(project));\n    //     yield put(push(`${PROJECT_DETAIL_PATH}/${projectId}`));\n    //   }\n    // }\n  } else {\n    console.error('mapSpecToQuoteProduct failed', { err }); // tslint:disable-line\n  }\n}\nfunction* fetchDrawing(action) {\n  const res = yield call(atsApiCallWaitingAction, action);\n\n  yield put(new UpdateSpecToQuoteLoadingAction());\n  return res;\n}\n\nconst failCB = ({ specId, data, err, start, end, amplitudeData }) => {\n  const trackingData = {\n    specId,\n    resultsCount: null\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteInitialQuoteProductSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    processTime: end - start,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n};\n\nfunction* getSpecToQuoteProducts(\n  action: GetSpecToQuoteProductsAction,\n) {\n  const {\n    specId\n  } = action.payload;\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createSpecToQuote',\n      params: {\n        specId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const queuedDownloads: List<IMap<IPrintObj>> = immutableData.getIn(['payload', 'quotation', SPEC_TO_QUOTE_CRONJOB_TYPE.spectoquote]);\n    if (queuedDownloads == null) {\n      console.error('print response error', { // tslint:disable-line\n        data,\n        err,\n      });\n    } else {\n      const type = queuedDownloads.getIn([-1, 'type']);\n      const printId = queuedDownloads.getIn([-1, 'id']);\n      yield put(new PollPrintAction({\n        id: specId,\n        printId,\n        type,\n        start,\n        onFailCb: failCB\n      }));\n    }\n  } else {\n    console.error('createSpecToQuote failed', { err }); // tslint:disable-line\n    yield put(new GetSpecToQuoteProductsFailedAction());\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.genericInternalErrorMessage'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null\n      }\n    }));\n\n    const end = Date.now();\n    const amplitudeData = yield select(makeSelectAmplitudeData());\n    failCB({ specId, data, err, start, end, amplitudeData });\n  }\n}\nfunction* getSpecToQuoteStatus(\n  action: GetSpecToQuoteStatusAction,\n) {\n  yield put(new SetSortProductsByManufacturerAction({ sortProductsByManufacturer: false }));\n  const {\n    id: specId,\n    printId,\n    start = 0,\n  } = action.payload;\n\n  const localStart = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getSpecToQuoteStatus',\n      params: {\n        specId,\n        printJobId: printId\n      }\n    }\n  }));\n  const localEnd = Date.now();\n  const end = localEnd;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  const spec = yield select(makeSelectSpec({ specId }));\n  let specToQuoteLinkedList: List<IMap<ISpecToQuote>>;\n  if (data) {\n    const immuData = fromJS(data);\n    specToQuoteLinkedList = immuData.getIn(['payload', 'quotation', 'printJob', 0, 'details']);\n\n    // clean the specTOQuoteLinkedList for null quoteProducts\n    if (specToQuoteLinkedList) {\n      const specProductIdsWithNullQuoteProducts = [];\n      specToQuoteLinkedList = specToQuoteLinkedList.map((specToQuote) => {\n        return specToQuote.update('recommendations', (recommendations) => {\n          let NullQuoteProductCount = 0;\n\n          const newRecommendations = recommendations?.filter((recommendation) => {\n            if (recommendation.get('quoteProduct') === null) {\n              NullQuoteProductCount++;\n            }\n            return recommendation.get('quoteProduct') !== null;\n          });\n\n          // if there are null products for this specProduct then add the specProductId to specProductIdsMissingQuoteProducts\n          if (NullQuoteProductCount) {\n            specProductIdsWithNullQuoteProducts.push(specToQuote.get('specProductId'));\n          }\n\n          return newRecommendations || null;\n        });\n      });\n\n      if (specProductIdsWithNullQuoteProducts.length) {\n        amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteNullQuoteProductRecommendations, {\n          ...amplitudeData,\n          specId,\n          specProductIdsWithNullQuoteProducts\n        });\n      }\n    }\n\n    if (specToQuoteLinkedList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // amplitude tracking for cross efficiency\n      let totalRecommendations = 0;\n      let aiIdentifiedGenericProducts = 0;\n      let aiIdentifiedProducts = 0;\n      let totalAutoLinkedProducts = 0;\n      let specToQuoteProducts = 0;\n      let parentProducts = 0;\n      let feedbackProducts = 0;\n      let productNumberProducts = 0;\n      let identifiedFieldsProducts = 0;\n      let matchIdentitieldFieldsProducts = 0;\n      specToQuoteLinkedList?.forEach((specToQuote) => {\n        const recommendations = specToQuote.get('recommendations');\n        const recommendationCount = recommendations?.count();\n        if (recommendationCount) {\n          totalRecommendations = totalRecommendations + recommendationCount;\n          totalAutoLinkedProducts++;\n          recommendations.forEach((recommdation) => {\n            const source = recommdation.get('source');\n            switch (source) {\n              case 'specToQuote': {\n                specToQuoteProducts++;\n                break;\n              }\n              case 'parent': {\n                parentProducts++;\n                break;\n              }\n              case 'feedback': {\n                feedbackProducts++;\n                break;\n              }\n              case 'productNumber': {\n                productNumberProducts++;\n                break;\n              }\n              case 'identifiedFields': {\n                identifiedFieldsProducts++;\n                break;\n              }\n              case 'matchIdentifiedFields': {\n                matchIdentitieldFieldsProducts++;\n                break;\n              }\n            }\n          });\n        }\n        if (specToQuote.getIn(['specProduct', 'id']) !== AI_IDENTIFIED_PRODUCT_ID) {\n          aiIdentifiedProducts++;\n        } else {\n          aiIdentifiedGenericProducts++;\n        }\n      });\n      const trackedData = {\n        specId,\n        createdInAppId: spec?.getIn(['createdInApp', 'id']),\n        createdInAppName: spec?.getIn(['createdInApp', 'name']),\n        totalProducts: specToQuoteLinkedList?.size,\n        totalRecommendations,\n        aiIdentifiedGenericProducts,\n        aiIdentifiedProducts,\n        totalAutoLinkedProducts,\n        specToQuoteProducts,\n        parentProducts,\n        feedbackProducts,\n        productNumberProducts,\n        identifiedFieldsProducts,\n        matchIdentitieldFieldsProducts,\n      };\n      amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteCrossEfficiency, { ...trackedData, ...amplitudeData });\n\n      // Takeoff-preference filter (ms-spec): drop spec products the firm blocks\n      // (manufacturer / category / division) from the recommendation list. That\n      // list is what gates row visibility in getInitialQuoteFromSpec, so removing\n      // an entry hides the product. ms-ai applies this at ingestion ONLY for the\n      // Bold Spec app; AutoQuote specs keep every product, so the blocklist is\n      // enforced here, read-time. Runs AFTER the amplitude tracking above so that\n      // still measures the full recommendation set. Fail-open: on error or no\n      // blocked ids, render as-is; and never strip to empty (an empty list flips\n      // getInitialQuoteFromSpec into its \"no recommendations\" all-empty-rows branch).\n      try {\n        const env = yield select(makeSelectEnv());\n        const appId = yield select(makeSelectAppId());\n        const filterRes = yield call(\n          SpecTakeoffFilterServiceApi.getBlockedSpecProductIds,\n          env,\n          appId,\n          specId,\n        );\n        const blockedIds = filterRes?.data?.payload?.msspec?.blockedSpecProductIds;\n        if (filterRes?.success && Array.isArray(blockedIds) && blockedIds.length) {\n          const blocked = Set(blockedIds.map((id) => String(id)));\n          const filtered = specToQuoteLinkedList.filter(\n            (specToQuote) => !blocked.has(String(specToQuote.get('specProductId')))\n          );\n          if (!filtered.isEmpty()) {\n            specToQuoteLinkedList = filtered;\n          }\n        }\n      } catch (filterErr) {\n        console.error('spec-to-quote takeoff filter failed', filterErr); // tslint:disable-line\n      }\n\n      yield put(new GetSpecToQuoteProductsSucceededAction({ specId, specToQuoteLinkedList }));\n    }\n  } else {\n    console.error('getSpecToQuoteStatus failed', { err }); // tslint:disable-line\n    yield put(new GetSpecToQuoteProductsFailedAction());\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.genericInternalErrorMessage'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null\n      }\n    }));\n  }\n\n  const trackingData = {\n    specId,\n    resultsCount: specToQuoteLinkedList ? specToQuoteLinkedList.size : null\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (localEnd - localStart > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteInitialQuoteProductSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    processTime: end - start,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* createQuoteWithSpecToQuote(action: CreateQuoteWithSpecToQuoteAction) {\n\n  const {\n    exitAfterSave = true,\n    isAutoSave = false,\n    onSuccess,\n  } = action.payload;\n\n  const _partialQuote = yield select(selectReduxFormState());\n  const hasCurrencyConversionACLRole = yield select(makeSelectUserHasCurrencyConversion());\n\n  const specId = _partialQuote.get('specId');\n  const isAi = _partialQuote.get('isAi');\n  const isAiValidated = _partialQuote.get('isAiValidated');\n\n  const internalNo = _partialQuote.get('internalNo');\n  // PT-5484 (2026-09-16): internal-only note. Trim + null-if-empty so\n  // whitespace-only entries aren't persisted. Same handling as internalNo.\n  const internalNote = _partialQuote.get('internalNote');\n  const assignedTo = _partialQuote.get('assignedTo');\n  const engineer = _partialQuote.get('engineerName') && _partialQuote.get('engineerName').size ? List([_partialQuote.get('engineerName')]) : List([]);\n  const architect = _partialQuote.get('architectName') && _partialQuote.get('architectName').size ? List([_partialQuote.get('architectName')]) : List([]);\n  const contractor = _partialQuote.get('contractorName') && _partialQuote.get('contractorName').size ? List([_partialQuote.get('contractorName')]) : List([]);\n  const bidDate = removeTZ(moment.utc(_partialQuote.get('bidDate')).toISOString());\n  const expiryDate = removeTZ(moment.utc(_partialQuote.get('expiryDate')).toISOString());\n  const conversionDate = removeTZ(moment.utc(new Date()).toISOString());\n\n  const customers = _partialQuote.get('customers') ? _partialQuote.get('customers') : List();\n  const sortProductsByManufacturer = yield select(makeSelectSortProductsByManufacturer());\n\n  const updatedPartialQuote = _partialQuote.withMutations(ctx => {\n    const sections = ctx.get('sections').withMutations(_ctx => {\n      for (const [sectionIndex, section] of _ctx.toArray().entries()) {\n        const updatedProducts = section.get('products')\n          .filter(product => product.get('id') !== -1 || product.get('specToQuoteValues'))\n          .map(product => {\n            const updatedProduct = product.withMutations(ctx_ => {\n              if (!ctx_.get('quoteProductId')) {\n                ctx_ = ctx_.set('quoteProductId', uuid());\n              }\n              if (!ctx_.get('attributes')?.isEmpty()) {\n                ctx_ = ctx_.set('attributes', fromJS({}));\n              }\n              ctx_ = ctx_.deleteIn(['specToQuoteValues', 'specProduct']);\n              return ctx_;\n            });\n\n            return updatedProduct.get('id') === -1 ? updatedProduct : updatedProduct.set('defaultPrint', setProductDefaultPrint(customers, updatedProduct.get('defaultPrint') ?? true));\n          });\n\n        if (_ctx.getIn([sectionIndex, 'sectionTitle']) == null) {\n          _ctx.setIn([sectionIndex, 'sectionTitle'], '');\n        }\n\n        _ctx.setIn([sectionIndex, 'products'], updatedProducts);\n      }\n      return _ctx;\n    });\n\n    if (hasCurrencyConversionACLRole) {\n      ctx.set('conversionDate', conversionDate);\n    }\n\n    if (!ctx.get('projectId')) {\n      ctx.set('projectId', null);\n    }\n\n    return ctx\n      .set('sections', sections)\n      .set('internalNo', typeof internalNo === 'string' ? internalNo.trim() : null)\n      .set('internalNote', typeof internalNote === 'string' ? internalNote.trim() : '')\n      .set('assignedTo', (Map.isMap(assignedTo) ? assignedTo?.get('id') : assignedTo?.id) ? List([assignedTo]) : List([]))\n      .set('engineerName', engineer)\n      .set('architectName', architect)\n      .set('contractorName', contractor)\n      .set('bidDate', bidDate)\n      .set('expiryDate', expiryDate)\n      .delete('temp')\n      .set('sortProductsByManufacturer', sortProductsByManufacturer);\n  });\n\n  const allProductsAndPackages = _partialQuote.get('sections').reduce((acc, section) => {\n    const products = section.get('products').filter(product => product.get('id') !== -1).map(product => product);\n    const extracted = products.filter(x => x != null);\n    return acc.push(...extracted);\n  }, List());\n\n  const productAndPackagesIdLists = allProductsAndPackages && allProductsAndPackages.reduce((acc: Map<string, any>, productOrPackage) => {\n    const packageIds = acc.get('packageIds', List());\n    const productIds = acc.get('productIds', List());\n\n    const id = productOrPackage.get('packageId') && productOrPackage.get('uniquePackageId') ? productOrPackage.get('packageId') : productOrPackage.get('id');\n    const isPackage = productOrPackage.get('packageId') && productOrPackage.get('uniquePackageId');\n\n    const newAcc = isPackage ? productOrPackage.get('productIndex') === 0 ? acc.set('packageIds', packageIds.push(id)) : acc : acc.set('productIds', productIds.push(id));\n\n    return newAcc;\n  }, Map<string, any>());\n\n  yield put(new SetQuoteDirtyAction({ dirty: false }));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createQuoteFromSpec',\n      body: {\n        ...updatedPartialQuote\n          .delete('isAi')\n          .delete('isAiValidated')\n          .toJS(),\n        // specId,\n        // createdFromSpecId: specId,\n        productIds: productAndPackagesIdLists.get('productIds'),\n        packageIds: productAndPackagesIdLists.get('packageIds'),\n      },\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newQuote = immutableData.getIn(['payload', 'quotation', 'quote', 0]);\n    const quoteId = newQuote.get('id');\n\n    // save draft\n    const spec = yield select(makeSelectSpec({ specId }));\n    const trimmedSpec = spec?.updateIn(['drawings'], drawings =>\n      drawings?.map(drawing =>\n        drawing.updateIn(['products'], products =>\n          products?.map(normalizeAttributes)\n        )\n      )\n    );\n\n    const specToQuoteLinkedList = yield select(makeSelectSpecToQuoteLinkedListBySpecId(specId));\n    const trimmedSpecToQuoteLinkedList = specToQuoteLinkedList?.map(entry =>\n      entry\n        .updateIn(['specProduct', 'attributes'], attrs =>\n          attrs?.isEmpty() ? attrs : Map()\n        )\n        .update('recommendations', recs =>\n          recs?.map(rec =>\n            rec.updateIn(['quoteProduct', 'attributes'], attrs =>\n              attrs?.isEmpty() ? attrs : Map()\n            )\n          )\n        )\n    );\n\n    yield put(new SaveSpecToQuoteDraftAction({\n      quoteId,\n      draft: {\n        specId,\n        spec: trimmedSpec, // spec module // trim ?\n        specToQuoteLinkedList: trimmedSpecToQuoteLinkedList, // quote module\n      }\n    }));\n\n    const projectId = newQuote.get('projectId');\n\n    if (newQuote == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteGeneratedQuote, { quoteId, ...amplitudeData });\n      // yield put(push(getQuotePath(quoteId)));\n\n      ///////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n      const allProducts = newQuote.get('sections').reduce((acc, section) => {\n        const products = section?.get('products');\n        if (products?.count()) {\n          return acc.concat(products);\n        }\n        return acc;\n      }, List());\n\n      let aiIdentifiedGenericProducts = 0;\n      let aiIdentifiedProducts = 0;\n      let totalExistingRecommendationsUsed = 0;\n      let totalNewProductsUsed = 0;\n\n      const specProductsRecommendations = yield select(makeSelectsSpecProductsRecommendations(specId));\n\n      allProducts?.forEach((product) => {\n        const quoteProductFirmProductId = product.get('firmProductId');\n        const productId = product.get('id');\n        const specProductId = product.getIn(['specToQuoteValues', 'specProductId']);\n        const recommendations = specProductsRecommendations.get(String(specProductId));\n        const recommendationCount = recommendations?.count();\n\n        if (product.get('id') !== -1 && specProductId) {\n          if (recommendationCount) {\n            const usingExistingRecommendation = product.get('flag') === 'package'\n              ? recommendations.some((recommendation) => recommendation.getIn(['quoteProduct', 'flag']) === 'package' && recommendation.getIn(['quoteProduct', 'id']) === productId)\n              : recommendations.some((recommendation) => recommendation.getIn(['quoteProduct', 'firmProductId']) === quoteProductFirmProductId);\n            if (usingExistingRecommendation) {\n              totalExistingRecommendationsUsed++;\n            } else {\n              totalNewProductsUsed++;\n            }\n          } else {\n            totalNewProductsUsed++;\n          }\n        }\n\n        if (product.get('id') !== AI_IDENTIFIED_PRODUCT_ID) {\n          aiIdentifiedProducts++;\n        } else {\n          aiIdentifiedGenericProducts++;\n        }\n      });\n\n      const eventVersion = 2;\n      const trackedData = {\n        quoteId,\n        eventVersion,\n        specId,\n        isAi,\n        totalSpecProducts: allProducts?.size ?? 0,\n        aiIdentifiedGenericProducts,\n        aiIdentifiedProducts,\n        totalExistingRecommendationsUsed,\n        totalNewProductsUsed,\n        isAiValidated,\n        ...amplitudeData\n      };\n\n      amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteBilling, trackedData);\n\n      ///////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n      if (projectId && quoteId) {\n        // yield call(addQuoteToProject, new AddQuoteToProjectAction({ projectId, quoteId, exitAfterSave }));\n        const keyContacts: List<any> = yield select(bidFormSelector(['keyContacts']));\n        yield call(addQuoteToProject, new AddQuoteToProjectAction({\n          projectId,\n          quoteId,\n          exitAfterSave,\n          projectKeyContacts: _partialQuote.getIn(['projectInfo', 'data', 'keyContacts']),\n          keyContacts,\n          onSuccess: onSuccess ? () => onSuccess(newQuote) : null,\n        }));\n        // yield take(ProjectActionTypes.REDIRECT_TO_QUOTE); // fix quote redirect 48f70fd\n        // CreateQuoteWithSpecToQuoteActionSuccess will never been call\n        // temp hide for now to see if any issues\n        yield put(new CreateQuoteWithSpecToQuoteActionSuccess());\n        yield call(showQuoteSavedSnackbar, 'translations:quoteSnackbar.quoteCreatedSuccessMessage', isAutoSave);\n      } else if (quoteId) {\n        if (onSuccess) {\n          onSuccess(newQuote);\n        } else {\n          if (exitAfterSave) {\n            yield call(redirectToQuoteDetails, new RedirectToQuoteAction({ quoteId, withQuoteReload: true }));\n          } else {\n            yield call(redirectToQuoteEdit, new RedirectToQuoteEditAction({ quoteId, withQuoteReload: true }));\n          }\n        }\n        yield put(new CreateQuoteWithSpecToQuoteActionSuccess());\n        yield call(showQuoteSavedSnackbar, 'translations:quoteSnackbar.quoteCreatedSuccessMessage', isAutoSave);\n      }\n\n      yield put(new RestartAutoSaveTimerAction());\n\n      // update usetifulTags to trigger tour\n      if (exitAfterSave) { // only set for save & exist\n        setUsetifulTags(TOUR_TRIGGER_KEY, TourTriggerValue.NEW_QUOTE_CREATED);\n        timeoutResetUsetifulTags(TOUR_TRIGGER_KEY);\n      }\n    }\n  } else {\n    console.error('createQuoteWithSpecToQuote failed', { err }); // tslint:disable-line\n    yield put(new SetIsCreatingQuoteWithSpecToQuoteAction({ isLoading: false }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.genericInternalErrorMessage'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null\n      }\n    }));\n    // Save failed — restore dirty so the next auto-save cycle retries.\n    yield put(new SetQuoteDirtyAction({ dirty: true }));\n  }\n}\n\nexport function* getProductMedia(\n  {\n    payload\n  }: GetProductMediaAction\n) {\n  const {\n    quoteId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getProductMedia',\n      params: {\n        quoteId\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productFiles: List<IMap<IProductMedia>> = immutableData.getIn(['payload', 'quotation', 'productMedia']);\n\n    yield put(new GetProductMediaSucceededAction(productFiles));\n  } else {\n    console.error('Error getting getProductMedia', { err }); // tslint:disable-line\n  }\n}\n\nexport function* getQuotes(action: GetQuotesAction) {\n  yield put(new SetSortProductsByManufacturerAction({ sortProductsByManufacturer: false }));\n  const {\n    payload,\n  } = action;\n  if (payload != null) {\n    const {\n      quoteId,\n      withLocation,\n      fallbackTo404,\n    } = payload;\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'quotation',\n        endpoint: 'getQuote',\n        body: {\n          quoteId,\n        }\n      },\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n      const quote = quotes.first<IMap<Quote>>();\n      yield put(new GetQuotesSuccessAction({ quotes }));\n\n      const sortProductsByManufacturer: boolean = quote.get('sortProductsByManufacturer');\n      yield put(new SetSortProductsByManufacturerAction({ sortProductsByManufacturer }));\n\n      if (withLocation && quote) {\n        const country = quote.getIn(['address', 'country']);\n        const province = quote.getIn(['address', 'province']);\n        const city = quote.getIn(['address', 'city']);\n        yield put(new GetCountriesAction());\n        if (country) {\n          yield put(new SaveCountryNameAction({\n            country,\n            storeKey: 'selectedShippingCountry',\n            provinceKey: 'selectedShippingProvince',\n            cityKey: 'selectedShippingCity',\n          }));\n          if (province) {\n            yield put(new GetProvincesAction({ countryId: country.get('id'), storeKey: 'shippingProvinces' }));\n            yield put(new SaveProvinceNameAction({\n              province,\n              storeKey: 'selectedShippingProvince',\n              cityKey: 'selectedShippingCity',\n            }));\n            if (city) {\n              yield put(new GetCitiesAction({ provinceId: province.get('id'), storeKey: 'shippingCities' }));\n              yield put(new SaveCityNameAction({\n                city,\n                storeKey: 'selectedShippingCity',\n              }));\n            }\n          }\n        }\n      }\n    } else {\n      yield put(new GetQuoteFailAction({ error: err }));\n      if (fallbackTo404 && (err as any)?.payload?.error?.code === 404) {\n        yield put(push(NOT_FOUND_PATH));\n      }\n    }\n  } else {\n    const {\n      data,\n      error,\n    }: {\n      data: any,\n      error: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'quotation',\n        endpoint: 'getSearchQuotes',\n        body: {\n        }\n      },\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n      yield put(new GetQuotesSuccessAction({ quotes }));\n    } else {\n      yield put(new GetQuotesFailAction({ error }));\n    }\n  }\n}\n\nexport function* searchQuotes(action: SearchQuotesAction) {\n  const {\n    options,\n    searchTerm,\n    filters,\n  } = action.payload;\n\n  const defaultFilters = {\n    'or': [\n      {\n        'quoteNumber': {\n          'like': searchTerm\n        }\n      },\n      {\n        'name': {\n          'like': searchTerm\n        }\n      },\n      {\n        'internalNo': {\n          'like': searchTerm\n        }\n      }\n    ]\n  };\n\n  let finalFilters = filters ? { ...filters } : {};\n  if (finalFilters.and) {\n    finalFilters.and.push(defaultFilters);\n  } else if (finalFilters.or) {\n    finalFilters.or.push(defaultFilters);\n  } else {\n    finalFilters = searchTerm ? defaultFilters : null;\n  }\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getSearchQuotes',\n      body: {\n        filters: finalFilters,\n        options\n      }\n    },\n  }));\n  const end = Date.now();\n  let count: number = 0;\n  if (data) {\n    const immutableData = fromJS(data);\n    const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'quotation', 'hasNextPage']);\n    count = immutableData.getIn(['payload', 'quotation', 'count']);\n    yield put(new GetQuoteSearchResultsSucceededAction({ quotes, count, hasNextPage }));\n  } else {\n    console.error('searchQuotes failed', { err }); // tslint:disable-line\n    yield put(new GetQuotesFailAction({ error: err }));\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    quoteNumber: searchTerm || null,\n    quoteName: searchTerm || null,\n    internalNo: searchTerm || null,\n    architectId: immutableFilters.getIn(['architectName.id', 'eq']) || null,\n    bidDateGte: immutableFilters.getIn(['bidDate', 'gte']) || null,\n    bidDateLte: immutableFilters.getIn(['bidDate', 'lte']) || null,\n    productNumber: immutableFilters.getIn(['sections.products.productNumber', 'eq']) || null,\n    createdByUserId: immutableFilters.getIn(['createdBy.user.id', 'eq']) || null,\n    engineerId: immutableFilters.getIn(['engineerName.id', 'eq']) || null,\n    contractorId: immutableFilters.getIn(['contractorName.id', 'eq']) || null,\n    categoryName: immutableFilters.getIn(['sections.products.categoryName', 'eq']) || null,\n    customerId: immutableFilters.getIn(['customers.id', 'eq']) || null,\n    regionId: immutableFilters.getIn(['region.id', 'eq']) || null,\n    createdDateGte: immutableFilters.getIn(['createdDate', 'gte']) || null,\n    createdDateLte: immutableFilters.getIn(['createdDate', 'lte']) || null,\n    collaboratorsId: immutableFilters.getIn(['collaborators.id', 'eq']) || null,\n    brand: immutableFilters.getIn(['sections.products.brand', 'eq']) || null,\n    quotePhase: immutableFilters.getIn(['quotePhase', 'like']) || null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.quoteSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* redirectToQuoteDetails(action) {\n  const { quoteId } = action.payload;\n  if (action.payload.withQuoteReload) {\n    yield put(new GetQuotesAction({ quoteId }));\n  }\n  yield put(push(getQuotePath(quoteId)));\n}\n\nexport function* redirectToQuoteEdit(action) {\n  const { quoteId } = action.payload;\n  if (action.payload.withQuoteReload) {\n    yield put(new GetQuotesAction({ quoteId }));\n  }\n  yield put(push(getQuoteEditPath(quoteId)));\n}\n\n\nexport function* getQuotePhases(action: GetQuotePhasesAction) {\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getQuotePhase',\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const quotePhases: List<IMap<ListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (quotePhases != null) {\n      yield put(new GetQuotePhasesSuccessAction({ quotePhases }));\n    } else {\n      console.error('getQuotePhases response error', { // tslint:disable-line\n        data,\n        error,\n      });\n    }\n  } else {\n    yield put(new GetQuoteFailAction({ error }));\n  }\n}\n\nexport function* patchQuote(action: PatchQuoteAction) {\n  const {\n    quoteId,\n    payload,\n  } = action;\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'updateQuote',\n      body: action.payload,\n      params: {\n        quoteId: action.quoteId,\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const quote: Quote = immutableData.getIn(['payload', 'quotation', 'quote', 0]);\n    yield put(new PatchQuoteSuccessAction(quote));\n  } else {\n    yield put(new GetQuoteFailAction({ error }));\n  }\n}\n\nexport function* createQuote(action: CreateQuoteAction) {\n  const {\n    exitAfterSave = true,\n    isAutoSave = false,\n    onSuccess,\n  } = action.payload;\n  yield put(new SubmittingQuoteAction(true));\n\n  const quoteForm = yield select(selectReduxFormState());\n  const customers = quoteForm.get('customers') ? quoteForm.get('customers') : List();\n  const hasCurrencyConversionACLRole = yield select(makeSelectUserHasCurrencyConversion());\n\n  const sections = quoteForm.get('sections') && quoteForm.get('sections')\n    .map(section => {\n      section = section.delete('uiData');\n      if (!section.get('sectionId')) {\n        section = section.set('sectionId', uuid());\n      }\n      if (section.get('sectionTitle') == null) {\n        section = section.set('sectionTitle', '');\n      }\n\n      const products = section.get('products').reduce((acc, crr) => {\n        if (crr.get('label') || crr.get('id') !== -1) {\n          acc = acc.push(crr.withMutations((ctx) => {\n            if (!ctx.get('quoteProductId')) {\n              ctx.set('quoteProductId', uuid());\n            }\n            if (!ctx.get('attributes')?.isEmpty()) {\n              ctx.set('attributes', fromJS({}));\n            }\n            ctx.deleteIn(['specToQuoteValues', 'specProduct']);\n            ctx.deleteIn(['templateCells', 'isFieldUpdatedByRate']);\n            ctx.deleteIn(['templateCells', 'appliedConversion']);\n            ctx.set('defaultPrint', setProductDefaultPrint(customers, ctx.get('defaultPrint') ?? true));\n          }));\n          return acc;\n        }\n      }, List([]));\n      return section.set('products', products);\n    });\n\n  const internalNo = quoteForm.get('internalNo');\n  // PT-5484 (2026-09-16): internal-only note. Same trim/null-if-empty rule.\n  const internalNote = quoteForm.get('internalNote');\n  const assignedTo = quoteForm.get('assignedTo');\n  const engineer = quoteForm.get('engineerName') && quoteForm.get('engineerName').size ? List([quoteForm.get('engineerName')]) : List([]);\n  const architect = quoteForm.get('architectName') && quoteForm.get('architectName').size ? List([quoteForm.get('architectName')]) : List([]);\n  const contractor = quoteForm.get('contractorName') && quoteForm.get('contractorName').size ? List([quoteForm.get('contractorName')]) : List([]);\n  const bidDate = removeTZ(moment.utc(quoteForm.get('bidDate')).toISOString());\n  const expiryDate = removeTZ(moment.utc(quoteForm.get('expiryDate')).toISOString());\n  const conversionDate = removeTZ(moment.utc(new Date()).toISOString());\n  const quote = quoteForm.withMutations(mutable => {\n    mutable\n      .set('internalNo', typeof internalNo === 'string' ? internalNo.trim() : null)\n      .set('internalNote', typeof internalNote === 'string' ? internalNote.trim() : '')\n      .set('assignedTo', (Map.isMap(assignedTo) ? assignedTo?.get('id') : assignedTo?.id) ? List([assignedTo]) : List([]))\n      .set('sections', sections)\n      .set('engineerName', engineer)\n      .set('architectName', architect)\n      .set('contractorName', contractor)\n      .set('bidDate', bidDate)\n      .set('expiryDate', expiryDate)\n      .delete('temp');\n\n    if (hasCurrencyConversionACLRole) {\n      mutable.set('conversionDate', conversionDate);\n    }\n\n    if (!quoteForm.get('customers')) {\n      mutable.set('customers', List());\n    }\n\n    if (!quoteForm.get('projectId')) {\n      mutable.set('projectId', null);\n    }\n  });\n\n  const projectData = quote.getIn(['projectInfo', 'data']);\n  const linked = quote.getIn(['projectInfo', 'isLinked']);\n  const createNew = quote.getIn(['projectInfo', 'data', 'createNew']);\n  const createProject = quote.getIn(['projectInfo', 'data', 'createProject']);\n  const sortProductsByManufacturer = yield select(makeSelectSortProductsByManufacturer());\n\n  yield put(new SetQuoteDirtyAction({ dirty: false }));\n\n  const {\n    data,\n    // error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createQuote',\n      body: {\n        ...quote\n            .set('sortProductsByManufacturer', sortProductsByManufacturer)\n            .toJS()\n      },\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newQuote: IMap<Quote> = immutableData.getIn(['payload', 'quotation', 'quote'], []).first();\n    const responseQuoteId = newQuote.get('id');\n\n    if (projectData && linked) {\n      const keyContacts: List<any> = yield select(bidFormSelector(['keyContacts']));\n      yield call(addQuoteToProject, new AddQuoteToProjectAction({\n        projectId: projectData.get('id'),\n        quoteId: newQuote.get('id'),\n        exitAfterSave,\n        projectKeyContacts: projectData.get('keyContacts'),\n        keyContacts,\n        onSuccess: onSuccess ? () => onSuccess(newQuote) : null,\n      }));\n    } else if (projectData && (createNew || createProject)) {\n      yield call(createPTProject, new CreatePTProjectAction({ project: projectData.get('data').set('quoteId', newQuote.get('id')), exitQuoteAfterQuoteSave: exitAfterSave }));\n    } else if (responseQuoteId) {\n      if (onSuccess) {\n        onSuccess(newQuote);\n      } else {\n        if (exitAfterSave) {\n          yield put(push(getQuotePath(responseQuoteId)));\n        } else {\n          yield put(push(getQuoteEditPath(responseQuoteId)));\n        }\n      }\n    }\n\n    // update usetifulTags to trigger tour\n    if (exitAfterSave) { // only set for save & exist\n      setUsetifulTags(TOUR_TRIGGER_KEY, TourTriggerValue.NEW_QUOTE_CREATED);\n      timeoutResetUsetifulTags(TOUR_TRIGGER_KEY);\n    }\n\n    yield call(showQuoteSavedSnackbar, 'translations:quoteSnackbar.quoteCreatedSuccessMessage', isAutoSave);\n    yield put(new RestartAutoSaveTimerAction());\n\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.quoteCreatedFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'right',\n        vertical: 'top'\n      }\n    }));\n    // Save failed — restore dirty so the next auto-save cycle retries.\n    yield put(new SetQuoteDirtyAction({ dirty: true }));\n    // yield put(new GetQuoteListFailAction({error}));\n  }\n  yield put(new SubmittingQuoteAction(false));\n}\nexport function* updateQuote(\n  action: UpdateQuoteAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    exitAfterSave = true,\n    isAutoSave = false,\n    onSuccess,\n  } = payload;\n\n  const dispatch = store.store.store.dispatch;\n\n  yield put(new SubmittingQuoteAction(true));\n  const quoteForm = yield select(selectReduxFormState());\n  const isSpecToQuote = yield select(makeSelectIsSpecToQuote());\n  const quote = yield select(makeSelectQuote(quoteForm.get('id')));\n  yield put(change(IMPORT_PRICING_FORM_NAME, 'saved', true));\n  yield put(change(IMPORT_PRICING_FORM_NAME, 'attachSection', null));\n\n  const customers = quoteForm.get('customers') ? quoteForm.get('customers') : List();\n  const sortProductsByManufacturer = yield select(makeSelectSortProductsByManufacturer());\n\n  let quoteToSubmit;\n  let quoteId;\n  let originalQuote;\n  let projectData;\n  let toBeLinkedProjectId;\n  let linked;\n  let createNew;\n  let linkedProjectChanged;\n  let createProject;\n\n  try {\n    const sections = quoteForm.get('sections') && quoteForm.get('sections')\n      .map((section, index) => {\n        if (!section) {\n          console.debug(`Section at index: ${index} is invalid`);\n        }\n        if (!section?.get('products')) {\n          console.debug(`Section at index: ${index} has invalid type for products`);\n        }\n        const sectionData = section?.get('products')?.reduce((acc, crr) => {\n          if (crr.get('id') !== -1 && crr.get('label')) {\n            const quoteProduct = quote?.getIn(['sections', index, 'products'])?.find(product => product.get('quoteProductId') === crr.get('quoteProductId'));\n\n            // By clicking Save & Continue will remain stay on quote edit page and won't update form values to avoid reload/reinitialize\n            // make sure product has the following fields to be most updated\n            const updatedQuoteProduct = crr.get('quoteProductId')\n              ? quoteProduct\n                ? crr\n                  .set('modifiedBy', quoteProduct.get('modifiedBy'))\n                  .set('modifiedDoneBy', quoteProduct.get('modifiedDoneBy'))\n                  .set('createdBy', quoteProduct.get('createdBy'))\n                  .set('createdDoneBy', quoteProduct.get('createdDoneBy'))\n                : crr\n              : crr.set('quoteProductId', uuid());\n\n            acc = {\n              products: acc.products.push(updatedQuoteProduct.set('defaultPrint', setProductDefaultPrint(customers, updatedQuoteProduct.get('defaultPrint') ?? true))),\n              excludedRowCount: acc.excludedRowCount += crr.get('excluded') ? 1 : 0\n            };\n          } else {\n            const quoteProduct = crr.get('quoteProductId') ? crr : (crr?.set('quoteProductId', uuid()) ?? crr);\n            acc = {\n              products: acc.products.push(quoteProduct),\n              excludedRowCount: acc.excludedRowCount += quoteProduct.get('excluded') ? 1 : 0\n            };\n          }\n\n          return acc;\n        }, {\n          products: List([]),\n          excludedRowCount: 0,\n        });\n        return section.set('products', sectionData.products).set('excludedRowCount', sectionData.excludedRowCount);\n      })\n      // add id on the section level\n      .map((section, sectionIndex) => {\n        section = section.delete('uiData');\n\n        const products = section.get('products').map((product, productIndex) => {\n          let updatedProduct = product.withMutations((ctx) => {\n            if (!ctx.get('attributes')?.isEmpty()) {\n              ctx.set('attributes', fromJS({}));\n            }\n            ctx.deleteIn(['specToQuoteValues', 'specProduct']);\n          });\n\n          if (updatedProduct.get('id') === -1) {\n            return updatedProduct;\n          }\n          let templateCells = updatedProduct.get('templateCells');\n          templateCells = templateCells.map(cell => {\n            return cell\n              .delete('isFieldUpdated')\n              .delete('isFieldUpdatedByRate')\n              .delete('appliedConversion');\n          });\n          updatedProduct = updatedProduct.set('templateCells', templateCells);\n\n          return updatedProduct;\n        }).filter(product => product.get('id') !== -1 || product.get('specToQuoteValues'));\n\n        section = section.delete('isSectionUpdated');\n        section = section.set('products', products);\n\n        if (!section.get('sectionTitle')) {\n          section = section.set('sectionTitle', '');\n        }\n\n        if (!section.get('sectionId')) {\n          section = section.set('sectionId', uuid());\n        } else {\n          const quoteSection = quote?.get('sections')?.find(_section => _section?.get('sectionId') === section.get('sectionId'));\n          if (quoteSection) {\n            // By clicking Save & Continue will remain stay on quote edit page and won't update form values to avoid reload/reinitialize\n            // make sure product has the following fields to be most updated\n            section = section\n              .set('modifiedBy', quoteSection.get('modifiedBy'))\n              .set('modifiedDoneBy', quoteSection.get('modifiedDoneBy'))\n              .set('createdBy', quoteSection.get('createdBy'))\n              .set('createdDoneBy', quoteSection.get('createdDoneBy'));\n          }\n        }\n\n        return section;\n      });\n\n    const internalNo = quoteForm.get('internalNo');\n    // PT-5484 (2026-09-16): internal-only note included in PATCH payload.\n    const internalNote = quoteForm.get('internalNote');\n    const assignedTo = quoteForm.get('assignedTo');\n    const engineer = quoteForm.get('engineerName') && quoteForm.get('engineerName').size ? List([quoteForm.get('engineerName')]) : List([]);\n    const architect = quoteForm.get('architectName') && quoteForm.get('architectName').size ? List([quoteForm.get('architectName')]) : List([]);\n    const contractor = quoteForm.get('contractorName') && quoteForm.get('contractorName').size ? List([quoteForm.get('contractorName')]) : List([]);\n    const bidDate = removeTZ(quoteForm.get('bidDate'));\n    const expiryDate = removeTZ(quoteForm.get('expiryDate'));\n\n    quoteToSubmit = quoteForm.withMutations(mutable => {\n      mutable\n        .set('internalNo', typeof internalNo === 'string' ? internalNo.trim() : null)\n        .set('internalNote', typeof internalNote === 'string' ? internalNote.trim() : '')\n        .set('assignedTo', (Map.isMap(assignedTo) ? assignedTo?.get('id') : assignedTo?.id) ? List([assignedTo]) : List([]))\n        .set('sections', sections)\n        .set('engineerName', engineer)\n        .set('architectName', architect)\n        .set('contractorName', contractor)\n        .set('bidDate', bidDate)\n        .set('sortProductsByManufacturer', sortProductsByManufacturer)\n        .set('expiryDate', expiryDate)\n        .delete('temp');\n\n      if (!quoteForm.get('customers')) {\n        mutable.set('customers', List());\n      }\n\n      if (!quoteForm.get('projectId')) {\n        mutable.set('projectId', null);\n      }\n    });\n\n    quoteId = quoteToSubmit.get('id');\n    originalQuote = yield select(makeSelectQuote(quoteId));\n    projectData = quoteToSubmit.getIn(['projectInfo', 'data']);\n    toBeLinkedProjectId = quoteToSubmit.getIn(['projectInfo', 'data', 'id']);\n    linked = quoteToSubmit.getIn(['projectInfo', 'isLinked']);\n    createNew = quoteToSubmit.getIn(['projectInfo', 'data', 'createNew']);\n    linkedProjectChanged = originalQuote.get('projectId') !== toBeLinkedProjectId;\n    createProject = quoteToSubmit.getIn(['projectInfo', 'data', 'createProject']);\n\n    if (quoteId && isSpecToQuote) {\n      const spec = yield select(makeSelectSpec({ specId: quoteToSubmit.get('createdFromSpecId') }));\n      const specToQuoteLinkedList = yield select(makeSelectSpecToQuoteLinkedListBySpecId(quoteToSubmit.get('createdFromSpecId')));\n\n      const trimmedSpec = spec?.updateIn(['drawings'], drawings =>\n        drawings?.map(drawing =>\n          drawing.updateIn(['products'], products =>\n            products?.map(normalizeAttributes)\n          )\n        )\n      );\n      const trimmedSpecToQuoteLinkedList = specToQuoteLinkedList?.map(entry =>\n        entry\n          .updateIn(['specProduct', 'attributes'], attrs =>\n            attrs?.isEmpty() ? attrs : Map()\n          )\n          .update('recommendations', recs =>\n            recs?.map(rec =>\n              rec.updateIn(['quoteProduct', 'attributes'], attrs =>\n                attrs?.isEmpty() ? attrs : Map()\n              )\n            )\n          )\n      );\n\n      yield put(new SaveSpecToQuoteDraftAction({\n        quoteId,\n        draft: {\n          specId: quoteToSubmit.get('createdFromSpecId'),\n          spec: trimmedSpec, // spec module // trim ?\n          specToQuoteLinkedList: trimmedSpecToQuoteLinkedList, // quote module\n        }\n      }));\n    }\n  } catch (error) {\n    console.error(error); // tslint:disable-line\n    console.debug('///////////////////////// beginning of quoteForm ///////////////////////////');\n    console.debug(quoteForm?.toJS());\n    console.debug('///////////////////////// end of quoteForm ///////////////////////////');\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.quoteUpdateFailedMessageWithAction'),\n      severity: 'error',\n      anchorOrigin: {\n        vertical: 'top',\n        horizontal: 'right'\n      },\n      actionProps: {\n        label: i18next.t('translations:salesOrderModal.liveChat'),\n        autoHideDuration: null,\n        onclick: () => dispatch(new ToggleLiveChatAction({ open: true })),\n        buttonStyle: {\n          color: 'white',\n          textDecoration: 'underline'\n        }\n      }\n    }));\n    yield put(new SubmittingQuoteAction(false));\n    return;\n  }\n\n  // Clear dirty before the API call so any edit during the round-trip re-marks\n  // dirty and the next auto-save cycle picks it up. Restored on failure below.\n  yield put(new SetQuoteDirtyAction({ dirty: false }));\n\n  const {\n    data,\n    // error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'updateQuote',\n      body: quoteToSubmit.toJS(),\n      params: {\n        quoteId,\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n    yield put(new GetQuotesSuccessAction({ quotes }));\n    const responseQuoteId = immutableData.getIn(['payload', 'quotation', 'quote', 0, 'id']);\n    const responseQuoteProjectId = immutableData.getIn(['payload', 'quotation', 'quote', 0, 'projectId']);\n\n    const initialKeyContacts = yield select(initialBidFormSelector(['keyContacts']));\n    const keyContacts = yield select(bidFormSelector(['keyContacts']));\n    const updateKeyContacts = !initialKeyContacts.equals(keyContacts);\n\n    if (projectData && linked && linkedProjectChanged) {\n      yield call(addQuoteToProject, new AddQuoteToProjectAction({\n        projectId: projectData.get('id'),\n        quoteId,\n        projectKeyContacts: projectData.get('keyContacts'),\n        keyContacts,\n        exitAfterSave,\n        onSuccess: onSuccess ? () => onSuccess(quotes.first()) : null,\n      }));\n    } else if (projectData && linked && updateKeyContacts) {\n      yield call(patchKeyContacts, new PatchKeyContactsAction({\n        quoteId: responseQuoteId,\n        projectId: projectData.get('id'),\n        projectKeyContacts: projectData.get('keyContacts'),\n        keyContacts: constructUpdatedKeyContactsForQuoteSave({ keyContacts, quoteId: responseQuoteId }),\n        exitAfterSave,\n        onSuccess: onSuccess ? () => onSuccess(quotes.first()) : null,\n      }));\n    } else if (projectData && linked === false && !createNew) {\n      // if remove existing linked project, then create new project, have to get original projectId from `quote.get('projectId')`  \t( ╯°□°)╯ ┻━━┻\n      yield call(removeQuoteFromProject, new RemoveQuoteFromProjectAction({ projectId: projectData.get('id') || quote.get('projectId'), quoteId, withResetSelectedProject: true, exitAfterSave: !createProject && exitAfterSave }));\n      if (createProject) {\n        yield call(createPTProject, new CreatePTProjectAction({ project: projectData.get('data').set('quoteId', responseQuoteId), exitQuoteAfterQuoteSave: exitAfterSave }));\n      }\n    } else if (projectData && (createNew || createProject)) {\n      yield call(createPTProject, new CreatePTProjectAction({ project: projectData.get('data').set('quoteId', responseQuoteId), exitQuoteAfterQuoteSave: exitAfterSave }));\n    } else if (responseQuoteId) {\n      if (onSuccess) {\n        onSuccess(quotes.first());\n      } else if (exitAfterSave) {\n        yield put(push(getQuotePath(responseQuoteId)));\n      }\n    }\n\n    yield call(showQuoteSavedSnackbar, 'translations:quoteSnackbar.quoteUpdateSuccessMessage', isAutoSave);\n    yield put(new RestartAutoSaveTimerAction());\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteSnackbar.quoteUpdateFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        vertical: 'top',\n        horizontal: 'right'\n      }\n    }));\n    // Save failed — restore dirty so the next auto-save cycle retries.\n    yield put(new SetQuoteDirtyAction({ dirty: true }));\n    // yield put(new GetQuoteListFailAction({error}));\n  }\n  yield put(new SubmittingQuoteAction(false));\n}\n\nexport function* duplicateQuote(action: DuplicateQuoteAction) {\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.createNewQuote, { type: 'Duplicate', ...amplitudeData });\n\n  const {\n    data,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createQuoteDuplicate',\n      body: {\n        quoteId: action.payload,\n      },\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const quote: IMap<any> = immutableData.getIn(['payload', 'quotation', 'quote'], []).first();\n    const quoteId: number = quote.get('id');\n    yield put(push(`/quote/${quoteId}/edit`));\n  }\n}\n\n\nfunction* deleteQuoteAndGetAction(\n  action: DeleteQuoteAndGetProjectAction,\n) {\n  const {\n    quoteId,\n    projectId,\n  } = action.payload;\n\n  yield call(deleteQuote, new DeleteQuoteAction({ quoteId }));\n  yield call(getProjects, new GetProjectsAction({ projectId }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nexport function* deleteQuote(action: any) {\n  const {\n    quoteId,\n    redirectTo,\n    options,\n    searchTerm,\n    filters,\n    onFinally,\n  } = action.payload;\n  const {\n    data,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'deleteQuote',\n      body: {\n        quoteId\n      },\n    },\n  }));\n\n  if (data) {\n    if (options) {\n      yield put(new SearchQuotesAction({ options, searchTerm, filters }));\n    } else {\n      yield put(new DeleteQuoteSuccessAction(action.payload));\n    }\n    if (redirectTo) {\n      yield put(push(redirectTo));\n    }\n  }\n\n  if (onFinally) {\n    onFinally();\n  }\n}\n\nexport function* createRevision(action: CreateRevisionAction) {\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.createNewQuote, { type: 'Revision', ...amplitudeData });\n  const {\n    data,\n    // error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createQuoteRevision',\n      params: {\n        quoteId: action.payload\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const quote: IMap<Quote> = immutableData.getIn(['payload', 'quotation', 'quote', 0]);\n    if (quote) {\n      yield put(push(getQuoteEditPath(quote.get('id'))));\n    } else {\n      yield put(push(QUOTE_LIST_PATH));\n    }\n  } else {\n    // yield put(new GetQuoteListFailAction({error}));\n  }\n}\n\nexport function* createRequote(action: CreateRequoteAction) {\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.createNewQuote, { type: 'Requote', ...amplitudeData });\n\n  const {\n    data,\n    // error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createReQuote',\n      params: {\n        quoteId: action.payload\n      }\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n    yield put(new GetQuotesSuccessAction({ quotes }));\n    if (quotes.get(0)) {\n      yield put(push(getQuoteEditPath(quotes.getIn([0, 'id']))));\n    } else {\n      yield put(push(QUOTE_LIST_PATH));\n    }\n  } else {\n    // yield put(new GetQuoteListFailAction({error}));\n  }\n}\n\nexport function* setRevision(action: SetRevisionAction) {\n\n  yield put(new SetRevisionLoadingAction({\n    isLoading: true,\n    message: i18next.t('translations:quoteDetail.creatingNewRevisionMessage')\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createQuoteRevision',\n      body: {\n        quoteId: action.payload.quoteId,\n      },\n    }\n  }));\n\n  yield put(new SetRevisionLoadingAction({ isLoading: false }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n    const quote = quotes.first<IMap<Quote>>();\n    yield put(new SetRevisionSuccessAction({ quote }));\n    yield put(new GetQuotesSuccessAction({ quotes }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:quoteDetail.newRevisionCreatedMessage'),\n      severity: 'success',\n      backgroundColor: 'black',\n      anchorOrigin: {\n        vertical: 'top',\n        horizontal: 'right'\n      }\n    }));\n  } else {\n    yield put(new SetRevisionFailAction({ err }));\n  }\n}\n\nexport function* getRevisions(action: GetRevisionsAction) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getRevisions',\n      body: {\n        quoteId: action.payload.quoteId,\n      },\n    }\n  }));\n\n  if (data) {\n    console.debug('get revision SUCCESS: ', data);\n    const immutableData = fromJS(data);\n    const revisions: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'revisions']);\n    yield put(new GetRevisionsSuccessAction({ revisions }));\n    yield put(new GetQuotesSuccessAction({ quotes: revisions }));\n  } else {\n    yield put(new GetRevisionsFailAction({ err }));\n  }\n}\n\nexport function* deleteRevision(action: DeleteRevisionAction) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'deleteQuote',\n      body: {\n        quoteId: action.payload.quoteId,\n      },\n    }\n  }));\n\n  if (data) {\n    console.debug('delete revision SUCCESS: ', data); //tslint:disable-line\n    const immutableData = fromJS(data);\n    const responseMessage = immutableData.getIn(['payload', 'quotation', 'message']);\n    const deletedRevisionId = immutableData.getIn(['payload', 'quotation', 'quote']).first().get('id');\n\n    if (responseMessage === 'Successfully deleted') {\n      const theRevision = yield select(makeSelectQuote(deletedRevisionId));\n      const parentQuoteId = theRevision.get('parentQuoteId');\n      const previousQuoteId = theRevision.get('previousQuoteId');\n\n      yield put(new DeleteRevisionSuccessAction({ quoteId: deletedRevisionId, parentQuoteId, previousQuoteId }));\n\n      const selectedQuoteId = yield select(makeSelectSelectedQuoteId());\n      if (selectedQuoteId === deletedRevisionId) {\n        const currentQuote = yield select(makeSelectQuote(selectedQuoteId));\n        const previousId = currentQuote.get('previousQuoteId');\n        if (previousId) {\n          yield put(push(`/${DEFAULT_MOUNT_POINT}/${previousId}`));\n          yield put(new SelectQuoteIdAction({ quoteId: previousId }));\n        } else {\n          yield put(new DeleteQuoteSuccessAction({ quoteId: deletedRevisionId }));\n          yield put(push(QUOTE_LIST_PATH));\n        }\n      } else {\n        yield put(new GetQuotesAction({ quoteId: selectedQuoteId, withLocation: true })); // update (locked status) selected quote when deleted revision PT-1688\n      }\n    } else {\n      yield put(new DeleteRevisionFailAction({ err: `Cannot delete revision with id: ${deletedRevisionId}` }));\n    }\n  } else {\n    yield put(new DeleteRevisionFailAction({ err }));\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nexport function* copyRevision(action: CopyRevisionAction) {\n\n  yield put(new SetRevisionLoadingAction({\n    isLoading: true,\n    message: i18next.t('translations:quoteDetail.copyingRevisionMessage')\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'createCopyRevision',\n      body: {\n        quoteId: action.payload.quoteId,\n      },\n    }\n  }));\n\n  yield put(new SetRevisionLoadingAction({ isLoading: false }));\n\n  if (data) {\n    console.debug('copy revision succeeded: ', data); // tslint:disable-line\n    const immutableData = fromJS(data);\n    const quotes: List<IMap<Quote>> = immutableData.getIn(['payload', 'quotation', 'quote']);\n    const quote = quotes.first<IMap<Quote>>();\n    yield put(new SetRevisionSuccessAction({ quote }));\n    yield put(new GetQuotesSuccessAction({ quotes }));\n  } else {\n    yield put(new SetRevisionFailAction({ err }));\n  }\n}\n\n// if project selected, respond to that by fetching the included quotes\nfunction* projectSelected(\n  action: SelectProjectAction,\n) {\n  const {\n    projectId,\n    quoteId,\n    withoutLinkedQuotes,\n  } = action.payload;\n  const project: IMap<Project> = yield select(makeSelectProject({ projectId }));\n  const selectedQuoteId = yield select(makeSelectSelectedQuoteId());\n\n  if (!withoutLinkedQuotes && project != null && ((selectedQuoteId === -1) || project.get('quotes').findIndex((projectQuoteId) => projectQuoteId === selectedQuoteId) === -1)) {\n    const projectQuotes = project.get('quotes');\n    const firstQuote = projectQuotes.get(0);\n    const firstQuoteId = quoteId != null ? quoteId : firstQuote != null && firstQuote.get('id');\n\n    if (firstQuoteId != null) {\n      const getQuoteActions = projectQuotes.map((projectQuoteIdObject: IMap<HasId>) => {\n        const projectQuoteId = projectQuoteIdObject.get('id');\n        return put(new GetQuotesAction({ quoteId: Number(projectQuoteId) }));\n      });\n     yield all(getQuoteActions.valueSeq().toArray());\n      yield put(new SelectQuoteAction(firstQuoteId));\n    } else {\n      console.debug('no first spec found'); // tslint:disable-line\n    }\n  }\n}\n\nfunction* getQuoteBilling(action) {\n  const {\n    payload: {\n      startDate,\n      endDate,\n    },\n  } = action as GetQuoteBillingAction;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'quotation',\n      endpoint: 'getQuoteBillingData',\n      body: {\n        filters: {\n          and: [\n            {\n              'fbt.transactionDateTime': {\n                gte: startDate,\n              },\n            },\n            {\n              'fbt.transactionDateTime': {\n                lte: endDate,\n              }\n            }\n          ]\n        }\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data).getIn(['payload', 'quotation', 'data']);\n    yield put(new GetQuoteBillingSucceedAction({\n      data: immutableData\n    }));\n  } else {\n    yield put(new GetQuoteBillingFailedAction());\n  }\n}\n\nfunction* downloadQuoteBilling(action) {\n  const {\n    payload: {\n      startDate,\n      endDate,\n      onSuccess,\n      onFail,\n    },\n  } = action as DownloadQuoteBillingAction;\n  let errorMessage = '';\n  const { error, data } = yield call(quoteBillingPrint, action);\n  try {\n    if (error) {\n      throw new Error('call quoteBillingPrint failed');\n    } else {\n      const immutableData = fromJS(data);\n      const id = immutableData.getIn(['payload', 'report', 'reportquotebillablelines', 0, 'id']);\n      const { data: printResult, err } = yield call(pollPrint, new PollPrintAction({\n        printId: id,\n        type: REPORT_PRINT_TYPE.reportquotebillablelines\n      }));\n      if (err || !printResult?.payload?.print?.printJob?.[0]?.fileId) {\n        errorMessage = printResult?.payload?.print?.printJob?.[0]?.details?.message ?? '';\n        throw new Error('poll quoteBillingPrint failed');\n      } else {\n        const immutablePrintResult = fromJS(printResult);\n        const fileId = immutablePrintResult.getIn(['payload', 'print', 'printJob', 0, 'fileId']);\n        onSuccess?.(fileId);\n        yield put(new DownloadQuoteBillingSucceedAction());\n      }\n    }\n  } catch (err) {\n    yield put(new DownloadQuoteBillingFailedAction());\n    yield put(new SetSnackbarOpenAction({\n      message: errorMessage || i18next.t('translations:billingInfo.generateReportFailMessage'),\n      severity: 'error',\n    }));\n    onFail?.();\n  }\n}","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nexport const timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Modal from '../Modal';\nimport Backdrop from '../Backdrop';\nimport withStyles from '../styles/withStyles';\nimport Slide from '../Slide';\nimport Paper from '../Paper';\nimport capitalize from '../utils/capitalize';\nimport { duration } from '../styles/transitions';\nimport useTheme from '../styles/useTheme';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {},\n\n    /* Styles applied to the root element if `variant=\"permanent or persistent\"`. */\n    docked: {\n      flex: '0 0 auto'\n    },\n\n    /* Styles applied to the `Paper` component. */\n    paper: {\n      overflowY: 'auto',\n      display: 'flex',\n      flexDirection: 'column',\n      height: '100%',\n      flex: '1 0 auto',\n      zIndex: theme.zIndex.drawer,\n      WebkitOverflowScrolling: 'touch',\n      // Add iOS momentum scrolling.\n      // temporary style\n      position: 'fixed',\n      top: 0,\n      // We disable the focus ring for mouse, touch and keyboard users.\n      // At some point, it would be better to keep it for keyboard users.\n      // :focus-ring CSS pseudo-class will help.\n      outline: 0\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"left\"`. */\n    paperAnchorLeft: {\n      left: 0,\n      right: 'auto'\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"right\"`. */\n    paperAnchorRight: {\n      left: 'auto',\n      right: 0\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"top\"`. */\n    paperAnchorTop: {\n      top: 0,\n      left: 0,\n      bottom: 'auto',\n      right: 0,\n      height: 'auto',\n      maxHeight: '100%'\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"bottom\"`. */\n    paperAnchorBottom: {\n      top: 'auto',\n      left: 0,\n      bottom: 0,\n      right: 0,\n      height: 'auto',\n      maxHeight: '100%'\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"left\"` and `variant` is not \"temporary\". */\n    paperAnchorDockedLeft: {\n      borderRight: \"1px solid \".concat(theme.palette.divider)\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"top\"` and `variant` is not \"temporary\". */\n    paperAnchorDockedTop: {\n      borderBottom: \"1px solid \".concat(theme.palette.divider)\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"right\"` and `variant` is not \"temporary\". */\n    paperAnchorDockedRight: {\n      borderLeft: \"1px solid \".concat(theme.palette.divider)\n    },\n\n    /* Styles applied to the `Paper` component if `anchor=\"bottom\"` and `variant` is not \"temporary\". */\n    paperAnchorDockedBottom: {\n      borderTop: \"1px solid \".concat(theme.palette.divider)\n    },\n\n    /* Styles applied to the `Modal` component. */\n    modal: {}\n  };\n};\nvar oppositeDirection = {\n  left: 'right',\n  right: 'left',\n  top: 'down',\n  bottom: 'up'\n};\nexport function isHorizontal(anchor) {\n  return ['left', 'right'].indexOf(anchor) !== -1;\n}\nexport function getAnchor(theme, anchor) {\n  return theme.direction === 'rtl' && isHorizontal(anchor) ? oppositeDirection[anchor] : anchor;\n}\nvar defaultTransitionDuration = {\n  enter: duration.enteringScreen,\n  exit: duration.leavingScreen\n};\n/**\n * The props of the [Modal](/api/modal/) component are available\n * when `variant=\"temporary\"` is set.\n */\n\nvar Drawer = React.forwardRef(function Drawer(props, ref) {\n  var _props$anchor = props.anchor,\n      anchorProp = _props$anchor === void 0 ? 'left' : _props$anchor,\n      BackdropProps = props.BackdropProps,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 16 : _props$elevation,\n      _props$ModalProps = props.ModalProps;\n  _props$ModalProps = _props$ModalProps === void 0 ? {} : _props$ModalProps;\n\n  var BackdropPropsProp = _props$ModalProps.BackdropProps,\n      ModalProps = _objectWithoutProperties(_props$ModalProps, [\"BackdropProps\"]),\n      onClose = props.onClose,\n      _props$open = props.open,\n      open = _props$open === void 0 ? false : _props$open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      SlideProps = props.SlideProps,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'temporary' : _props$variant,\n      other = _objectWithoutProperties(props, [\"anchor\", \"BackdropProps\", \"children\", \"classes\", \"className\", \"elevation\", \"ModalProps\", \"onClose\", \"open\", \"PaperProps\", \"SlideProps\", \"transitionDuration\", \"variant\"]);\n\n  var theme = useTheme(); // Let's assume that the Drawer will always be rendered on user space.\n  // We use this state is order to skip the appear transition during the\n  // initial mount of the component.\n\n  var mounted = React.useRef(false);\n  React.useEffect(function () {\n    mounted.current = true;\n  }, []);\n  var anchor = getAnchor(theme, anchorProp);\n  var drawer = React.createElement(Paper, _extends({\n    elevation: variant === 'temporary' ? elevation : 0,\n    square: true\n  }, PaperProps, {\n    className: clsx(classes.paper, classes[\"paperAnchor\".concat(capitalize(anchor))], PaperProps.className, variant !== 'temporary' && classes[\"paperAnchorDocked\".concat(capitalize(anchor))])\n  }), children);\n\n  if (variant === 'permanent') {\n    return React.createElement(\"div\", _extends({\n      className: clsx(classes.root, classes.docked, className),\n      ref: ref\n    }, other), drawer);\n  }\n\n  var slidingDrawer = React.createElement(Slide, _extends({\n    in: open,\n    direction: oppositeDirection[anchor],\n    timeout: transitionDuration,\n    appear: mounted.current\n  }, SlideProps), drawer);\n\n  if (variant === 'persistent') {\n    return React.createElement(\"div\", _extends({\n      className: clsx(classes.root, classes.docked, className),\n      ref: ref\n    }, other), slidingDrawer);\n  } // variant === temporary\n\n\n  return React.createElement(Modal, _extends({\n    BackdropProps: _extends({}, BackdropProps, {}, BackdropPropsProp, {\n      transitionDuration: transitionDuration\n    }),\n    BackdropComponent: Backdrop,\n    className: clsx(classes.root, classes.modal, className),\n    open: open,\n    onClose: onClose,\n    ref: ref\n  }, other, ModalProps), slidingDrawer);\n});\nprocess.env.NODE_ENV !== \"production\" ? Drawer.propTypes = {\n  /**\n   * Side from which the drawer will appear.\n   */\n  anchor: PropTypes.oneOf(['left', 'top', 'right', 'bottom']),\n\n  /**\n   * @ignore\n   */\n  BackdropProps: PropTypes.object,\n\n  /**\n   * The contents of the drawer.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The elevation of the drawer.\n   */\n  elevation: PropTypes.number,\n\n  /**\n   * Props applied to the [`Modal`](/api/modal/) element.\n   */\n  ModalProps: PropTypes.object,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * If `true`, the drawer is open.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: PropTypes.object,\n\n  /**\n   * Props applied to the [`Slide`](/api/slide/) element.\n   */\n  SlideProps: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['permanent', 'persistent', 'temporary'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDrawer',\n  flip: false\n})(Drawer);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _splice = _interopRequireDefault(require(\"./splice\"));\n\nvar _getIn = _interopRequireDefault(require(\"./getIn\"));\n\nvar _setIn = _interopRequireDefault(require(\"./setIn\"));\n\nvar _deepEqual = _interopRequireDefault(require(\"./deepEqual\"));\n\nvar _deleteIn = _interopRequireDefault(require(\"./deleteIn\"));\n\nvar _keys = _interopRequireDefault(require(\"./keys\"));\n\nvar structure = {\n  allowsArrayErrors: true,\n  empty: {},\n  emptyList: [],\n  getIn: _getIn[\"default\"],\n  setIn: _setIn[\"default\"],\n  deepEqual: _deepEqual[\"default\"],\n  deleteIn: _deleteIn[\"default\"],\n  forEach: function forEach(items, callback) {\n    return items.forEach(callback);\n  },\n  fromJS: function fromJS(value) {\n    return value;\n  },\n  keys: _keys[\"default\"],\n  size: function size(array) {\n    return array ? array.length : 0;\n  },\n  some: function some(items, callback) {\n    return items.some(callback);\n  },\n  splice: _splice[\"default\"],\n  equals: function equals(a, b) {\n    return b.every(function (val) {\n      return ~a.indexOf(val);\n    });\n  },\n  orderChanged: function orderChanged(a, b) {\n    return b.some(function (val, index) {\n      return val !== a[index];\n    });\n  },\n  toJS: function toJS(value) {\n    return value;\n  }\n};\nvar _default = structure;\nexports[\"default\"] = _default;","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\n// this component simply wraps FieldReactSelect and gives sane defaults for accepting an array of IMap<ListItem> as options\n\nimport * as React from 'react';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport FieldReactSelect, { FieldReactSelectProps, IFieldReactSelectComponentProps} from '../FieldReactSelect';\nimport { ListItem } from '../../models';\nimport { MenuItem, Typography } from '@material-ui/core';\nimport {\n  createFilter,\n  components,\n} from 'react-select';\nimport i18next from 'i18next';\nexport interface IFieldListItemReactSelectComponentProps extends IFieldReactSelectComponentProps {\n\n}\n\nexport const Option: React.SFC<any> = ({\n  children,\n  isFocused,\n  isDisabled,\n  innerProps,\n  // data, // this is the option being passed in\n  ...rest\n}) => {\n  // console.error('option', {\n  //   rest,\n  //   data,\n  // });\n  return (\n    <MenuItem\n      selected={isFocused}\n      disabled={isDisabled}\n      {...innerProps}\n    >\n      {children}\n    </MenuItem>\n  );\n};\n\nconst TypographyWrapper = (Component): React.SFC<any> => ({\n  ...props\n}) => {\n  return (\n    <Typography component='span'>\n      <Component {...props} />\n    </Typography>\n  );\n};\n\nexport const filterOption = createFilter({\n  ignoreCase: true,\n  ignoreAccents: true,\n  stringify: (option: IMap<ListItem<string, any>>) => {\n    const optionString = JSON.stringify(option);\n    return optionString;\n  },\n  trim: true,\n  matchFrom: 'any',\n});\n\nexport const defaultInputProps = {\n  getOptionValue: (option: IMap<ListItem<string, any>>) => {\n    if (option && option.get) {\n      return `${option.get('id')}`;\n    }\n    console.error('invalid option', { // tslint:disable-line\n      option,\n    });\n    return option as unknown as string;\n  },\n  getOptionLabel: (option: IMap<ListItem<string, any>>) => {\n    if (option && option.get) {\n      return option.get('value');\n    }\n    console.error('invalid option', { // tslint:disable-line\n      option,\n    });\n    return option as unknown as string;\n  },\n  formatOptionLabel: (option: IMap<ListItem<string, any>>, {context, inputValue, selectValue}) => {\n    let value = option as any;\n    if (option && option.get) {\n      value = option.get('value');\n    } else {\n      console.error('invalid option', { // tslint:disable-line\n        option,\n      });\n    }\n    return <Typography>{value}</Typography>;\n  },\n  loadingMessage: () => i18next.t('translations:generalLoading.loading'),\n  selectOption: (option: IMap<ListItem<string, any>>) => {\n    // console.error('unimplemented selectOption', { // tslint:disable-line\n    //   option,\n    // });\n  },\n  onChange: (option: IMap<ListItem<string, any>>) => {\n    // console.error('unimplemented onChange', { // tslint:disable-line\n    //   option,\n    // });\n  },\n  isOptionDisabled: (option: IMap<ListItem<string, any>>) => {\n    return option.get('disabled') || false;\n  },\n  components: {\n    Option,\n    Input: TypographyWrapper(components.Input),\n    NoOptionsMessage: TypographyWrapper(components.NoOptionsMessage),\n    // SingleValue,\n  },\n  filterOption,\n};\n\nconst FieldListItemReactSelect: React.SFC<FieldReactSelectProps> = ({ inputProps, ...rest }) => {\n  return (\n    <FieldReactSelect\n      inputProps={{\n        ...defaultInputProps,\n        ...inputProps,\n      }}\n      {...rest}\n    />\n  );\n};\n\nexport default FieldListItemReactSelect;\n","module.exports = isPromise;\nmodule.exports.default = isPromise;\n\nfunction isPromise(obj) {\n  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component, PureComponent } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { jsx } from '@emotion/core';\nimport { findDOMNode } from 'react-dom';\nimport { i as isTouchCapable, d as isMobileDevice, e as isDocumentElement, f as cleanValue, h as scrollIntoView, j as classNames, n as noop } from '../../chunk-e8ae4b0f.browser.esm.js';\nimport { c as clearIndicatorCSS, a as containerCSS, b as css, d as dropdownIndicatorCSS, g as groupCSS, e as groupHeadingCSS, i as indicatorsContainerCSS, f as indicatorSeparatorCSS, h as inputCSS, l as loadingIndicatorCSS, j as loadingMessageCSS, m as menuCSS, k as menuListCSS, n as menuPortalCSS, o as multiValueCSS, p as multiValueLabelCSS, q as multiValueRemoveCSS, r as noOptionsMessageCSS, s as optionCSS, t as placeholderCSS, u as css$1, v as valueContainerCSS, w as defaultComponents, x as exportedEqual, M as MenuPlacer } from '../../chunk-5d200a41.browser.esm.js';\nimport _css from '@emotion/css';\n\nvar diacritics = [{\n  base: 'A',\n  letters: /[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]/g\n}, {\n  base: 'AA',\n  letters: /[\\uA732]/g\n}, {\n  base: 'AE',\n  letters: /[\\u00C6\\u01FC\\u01E2]/g\n}, {\n  base: 'AO',\n  letters: /[\\uA734]/g\n}, {\n  base: 'AU',\n  letters: /[\\uA736]/g\n}, {\n  base: 'AV',\n  letters: /[\\uA738\\uA73A]/g\n}, {\n  base: 'AY',\n  letters: /[\\uA73C]/g\n}, {\n  base: 'B',\n  letters: /[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]/g\n}, {\n  base: 'C',\n  letters: /[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]/g\n}, {\n  base: 'D',\n  letters: /[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]/g\n}, {\n  base: 'DZ',\n  letters: /[\\u01F1\\u01C4]/g\n}, {\n  base: 'Dz',\n  letters: /[\\u01F2\\u01C5]/g\n}, {\n  base: 'E',\n  letters: /[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]/g\n}, {\n  base: 'F',\n  letters: /[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]/g\n}, {\n  base: 'G',\n  letters: /[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]/g\n}, {\n  base: 'H',\n  letters: /[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]/g\n}, {\n  base: 'I',\n  letters: /[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]/g\n}, {\n  base: 'J',\n  letters: /[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]/g\n}, {\n  base: 'K',\n  letters: /[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]/g\n}, {\n  base: 'L',\n  letters: /[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]/g\n}, {\n  base: 'LJ',\n  letters: /[\\u01C7]/g\n}, {\n  base: 'Lj',\n  letters: /[\\u01C8]/g\n}, {\n  base: 'M',\n  letters: /[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]/g\n}, {\n  base: 'N',\n  letters: /[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]/g\n}, {\n  base: 'NJ',\n  letters: /[\\u01CA]/g\n}, {\n  base: 'Nj',\n  letters: /[\\u01CB]/g\n}, {\n  base: 'O',\n  letters: /[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]/g\n}, {\n  base: 'OI',\n  letters: /[\\u01A2]/g\n}, {\n  base: 'OO',\n  letters: /[\\uA74E]/g\n}, {\n  base: 'OU',\n  letters: /[\\u0222]/g\n}, {\n  base: 'P',\n  letters: /[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]/g\n}, {\n  base: 'Q',\n  letters: /[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]/g\n}, {\n  base: 'R',\n  letters: /[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]/g\n}, {\n  base: 'S',\n  letters: /[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]/g\n}, {\n  base: 'T',\n  letters: /[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]/g\n}, {\n  base: 'TZ',\n  letters: /[\\uA728]/g\n}, {\n  base: 'U',\n  letters: /[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]/g\n}, {\n  base: 'V',\n  letters: /[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]/g\n}, {\n  base: 'VY',\n  letters: /[\\uA760]/g\n}, {\n  base: 'W',\n  letters: /[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]/g\n}, {\n  base: 'X',\n  letters: /[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]/g\n}, {\n  base: 'Y',\n  letters: /[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]/g\n}, {\n  base: 'Z',\n  letters: /[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]/g\n}, {\n  base: 'a',\n  letters: /[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]/g\n}, {\n  base: 'aa',\n  letters: /[\\uA733]/g\n}, {\n  base: 'ae',\n  letters: /[\\u00E6\\u01FD\\u01E3]/g\n}, {\n  base: 'ao',\n  letters: /[\\uA735]/g\n}, {\n  base: 'au',\n  letters: /[\\uA737]/g\n}, {\n  base: 'av',\n  letters: /[\\uA739\\uA73B]/g\n}, {\n  base: 'ay',\n  letters: /[\\uA73D]/g\n}, {\n  base: 'b',\n  letters: /[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]/g\n}, {\n  base: 'c',\n  letters: /[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]/g\n}, {\n  base: 'd',\n  letters: /[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]/g\n}, {\n  base: 'dz',\n  letters: /[\\u01F3\\u01C6]/g\n}, {\n  base: 'e',\n  letters: /[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]/g\n}, {\n  base: 'f',\n  letters: /[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]/g\n}, {\n  base: 'g',\n  letters: /[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]/g\n}, {\n  base: 'h',\n  letters: /[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]/g\n}, {\n  base: 'hv',\n  letters: /[\\u0195]/g\n}, {\n  base: 'i',\n  letters: /[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]/g\n}, {\n  base: 'j',\n  letters: /[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]/g\n}, {\n  base: 'k',\n  letters: /[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]/g\n}, {\n  base: 'l',\n  letters: /[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]/g\n}, {\n  base: 'lj',\n  letters: /[\\u01C9]/g\n}, {\n  base: 'm',\n  letters: /[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]/g\n}, {\n  base: 'n',\n  letters: /[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]/g\n}, {\n  base: 'nj',\n  letters: /[\\u01CC]/g\n}, {\n  base: 'o',\n  letters: /[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]/g\n}, {\n  base: 'oi',\n  letters: /[\\u01A3]/g\n}, {\n  base: 'ou',\n  letters: /[\\u0223]/g\n}, {\n  base: 'oo',\n  letters: /[\\uA74F]/g\n}, {\n  base: 'p',\n  letters: /[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]/g\n}, {\n  base: 'q',\n  letters: /[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]/g\n}, {\n  base: 'r',\n  letters: /[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]/g\n}, {\n  base: 's',\n  letters: /[\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]/g\n}, {\n  base: 't',\n  letters: /[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]/g\n}, {\n  base: 'tz',\n  letters: /[\\uA729]/g\n}, {\n  base: 'u',\n  letters: /[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]/g\n}, {\n  base: 'v',\n  letters: /[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]/g\n}, {\n  base: 'vy',\n  letters: /[\\uA761]/g\n}, {\n  base: 'w',\n  letters: /[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]/g\n}, {\n  base: 'x',\n  letters: /[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]/g\n}, {\n  base: 'y',\n  letters: /[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]/g\n}, {\n  base: 'z',\n  letters: /[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]/g\n}];\nvar stripDiacritics = function stripDiacritics(str) {\n  for (var i = 0; i < diacritics.length; i++) {\n    str = str.replace(diacritics[i].letters, diacritics[i].base);\n  }\n\n  return str;\n};\n\nvar trimString = function trimString(str) {\n  return str.replace(/^\\s+|\\s+$/g, '');\n};\n\nvar defaultStringify = function defaultStringify(option) {\n  return \"\".concat(option.label, \" \").concat(option.value);\n};\n\nvar createFilter = function createFilter(config) {\n  return function (option, rawInput) {\n    var _ignoreCase$ignoreAcc = _objectSpread({\n      ignoreCase: true,\n      ignoreAccents: true,\n      stringify: defaultStringify,\n      trim: true,\n      matchFrom: 'any'\n    }, config),\n        ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n        ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n        stringify = _ignoreCase$ignoreAcc.stringify,\n        trim = _ignoreCase$ignoreAcc.trim,\n        matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n\n    var input = trim ? trimString(rawInput) : rawInput;\n    var candidate = trim ? trimString(stringify(option)) : stringify(option);\n\n    if (ignoreCase) {\n      input = input.toLowerCase();\n      candidate = candidate.toLowerCase();\n    }\n\n    if (ignoreAccents) {\n      input = stripDiacritics(input);\n      candidate = stripDiacritics(candidate);\n    }\n\n    return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n  };\n};\n\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n  name: \"1laao21-a11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;\"\n} : {\n  name: \"1laao21-a11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFNIiwiZmlsZSI6IkExMXlUZXh0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgdHlwZSBFbGVtZW50Q29uZmlnIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5cbi8vIEFzc2lzdGl2ZSB0ZXh0IHRvIGRlc2NyaWJlIHZpc3VhbCBlbGVtZW50cy4gSGlkZGVuIGZvciBzaWdodGVkIHVzZXJzLlxuY29uc3QgQTExeVRleHQgPSAocHJvcHM6IEVsZW1lbnRDb25maWc8J3NwYW4nPikgPT4gKFxuICAgIDxzcGFuXG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdhMTF5VGV4dCcsXG4gICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICBjbGlwOiAncmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpJyxcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBBMTF5VGV4dDtcbiJdfQ== */\"\n};\n\nvar A11yText = function A11yText(props) {\n  return jsx(\"span\", _extends({\n    css: _ref\n  }, props));\n};\n\nvar DummyInput =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(DummyInput, _Component);\n\n  function DummyInput() {\n    _classCallCheck(this, DummyInput);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(DummyInput).apply(this, arguments));\n  }\n\n  _createClass(DummyInput, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          inProp = _this$props.in,\n          out = _this$props.out,\n          onExited = _this$props.onExited,\n          appear = _this$props.appear,\n          enter = _this$props.enter,\n          exit = _this$props.exit,\n          innerRef = _this$props.innerRef,\n          emotion = _this$props.emotion,\n          props = _objectWithoutProperties(_this$props, [\"in\", \"out\", \"onExited\", \"appear\", \"enter\", \"exit\", \"innerRef\", \"emotion\"]);\n\n      return jsx(\"input\", _extends({\n        ref: innerRef\n      }, props, {\n        css:\n        /*#__PURE__*/\n        _css({\n          label: 'dummyInput',\n          // get rid of any default styles\n          background: 0,\n          border: 0,\n          fontSize: 'inherit',\n          outline: 0,\n          padding: 0,\n          // important! without `width` browsers won't allow focus\n          width: 1,\n          // remove cursor on desktop\n          color: 'transparent',\n          // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n          left: -100,\n          opacity: 0,\n          position: 'relative',\n          transform: 'scale(0)'\n        }, process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWVEiLCJmaWxlIjoiRHVtbXlJbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdW1teUlucHV0IGV4dGVuZHMgQ29tcG9uZW50PGFueT4ge1xuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgaW46IGluUHJvcCwgb3V0LCBvbkV4aXRlZCwgYXBwZWFyLCBlbnRlciwgZXhpdCwgaW5uZXJSZWYsIGVtb3Rpb24sIC4uLnByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybihcbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNzcz17e1xuICAgICAgICAgIGxhYmVsOiAnZHVtbXlJbnB1dCcsXG4gICAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAwLFxuICAgICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICAgIG91dGxpbmU6IDAsXG4gICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICAgIHdpZHRoOiAxLFxuXG4gICAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBkZXNrdG9wXG4gICAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIG1vYmlsZSB3aGlsc3QgbWFpbnRhaW5pbmcgXCJzY3JvbGwgaW50byB2aWV3XCIgYmVoYXZpb3VyXG4gICAgICAgICAgbGVmdDogLTEwMCxcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIl19 */\")\n      }));\n    }\n  }]);\n\n  return DummyInput;\n}(Component);\n\nvar NodeResolver =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(NodeResolver, _Component);\n\n  function NodeResolver() {\n    _classCallCheck(this, NodeResolver);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(NodeResolver).apply(this, arguments));\n  }\n\n  _createClass(NodeResolver, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.props.innerRef(findDOMNode(this));\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.props.innerRef(null);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return NodeResolver;\n}(Component);\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n  boxSizing: 'border-box',\n  // account for possible declaration `width: 100%;` on body\n  overflow: 'hidden',\n  position: 'relative',\n  height: '100%'\n};\n\nfunction preventTouchMove(e) {\n  e.preventDefault();\n}\nfunction allowTouchMove(e) {\n  e.stopPropagation();\n}\nfunction preventInertiaScroll() {\n  var top = this.scrollTop;\n  var totalScroll = this.scrollHeight;\n  var currentScroll = top + this.offsetHeight;\n\n  if (top === 0) {\n    this.scrollTop = 1;\n  } else if (currentScroll === totalScroll) {\n    this.scrollTop = top - 1;\n  }\n} // `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\n\nfunction isTouchDevice() {\n  return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\nvar canUseDOM = !!(window.document && window.document.createElement);\nvar activeScrollLocks = 0;\n\nvar ScrollLock =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ScrollLock, _Component);\n\n  function ScrollLock() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ScrollLock);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollLock)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"originalStyles\", {});\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"listenerOptions\", {\n      capture: false,\n      passive: false\n    });\n\n    return _this;\n  }\n\n  _createClass(ScrollLock, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      if (!canUseDOM) return;\n      var _this$props = this.props,\n          accountForScrollbars = _this$props.accountForScrollbars,\n          touchScrollTarget = _this$props.touchScrollTarget;\n      var target = document.body;\n      var targetStyle = target && target.style;\n\n      if (accountForScrollbars) {\n        // store any styles already applied to the body\n        STYLE_KEYS.forEach(function (key) {\n          var val = targetStyle && targetStyle[key];\n          _this2.originalStyles[key] = val;\n        });\n      } // apply the lock styles and padding if this is the first scroll lock\n\n\n      if (accountForScrollbars && activeScrollLocks < 1) {\n        var currentPadding = parseInt(this.originalStyles.paddingRight, 10) || 0;\n        var clientWidth = document.body ? document.body.clientWidth : 0;\n        var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n        Object.keys(LOCK_STYLES).forEach(function (key) {\n          var val = LOCK_STYLES[key];\n\n          if (targetStyle) {\n            targetStyle[key] = val;\n          }\n        });\n\n        if (targetStyle) {\n          targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n        }\n      } // account for touch devices\n\n\n      if (target && isTouchDevice()) {\n        // Mobile Safari ignores { overflow: hidden } declaration on the body.\n        target.addEventListener('touchmove', preventTouchMove, this.listenerOptions); // Allow scroll on provided target\n\n        if (touchScrollTarget) {\n          touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, this.listenerOptions);\n          touchScrollTarget.addEventListener('touchmove', allowTouchMove, this.listenerOptions);\n        }\n      } // increment active scroll locks\n\n\n      activeScrollLocks += 1;\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var _this3 = this;\n\n      if (!canUseDOM) return;\n      var _this$props2 = this.props,\n          accountForScrollbars = _this$props2.accountForScrollbars,\n          touchScrollTarget = _this$props2.touchScrollTarget;\n      var target = document.body;\n      var targetStyle = target && target.style; // safely decrement active scroll locks\n\n      activeScrollLocks = Math.max(activeScrollLocks - 1, 0); // reapply original body styles, if any\n\n      if (accountForScrollbars && activeScrollLocks < 1) {\n        STYLE_KEYS.forEach(function (key) {\n          var val = _this3.originalStyles[key];\n\n          if (targetStyle) {\n            targetStyle[key] = val;\n          }\n        });\n      } // remove touch listeners\n\n\n      if (target && isTouchDevice()) {\n        target.removeEventListener('touchmove', preventTouchMove, this.listenerOptions);\n\n        if (touchScrollTarget) {\n          touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, this.listenerOptions);\n          touchScrollTarget.removeEventListener('touchmove', allowTouchMove, this.listenerOptions);\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return ScrollLock;\n}(Component);\n\n_defineProperty(ScrollLock, \"defaultProps\", {\n  accountForScrollbars: true\n});\n\nvar _ref$1 = process.env.NODE_ENV === \"production\" ? {\n  name: \"1dsbpcp\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0;\"\n} : {\n  name: \"1dsbpcp\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbEJsb2NrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZEVSIsImZpbGUiOiJTY3JvbGxCbG9jay5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IFB1cmVDb21wb25lbnQsIHR5cGUgRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IE5vZGVSZXNvbHZlciBmcm9tICcuL05vZGVSZXNvbHZlcic7XG5pbXBvcnQgU2Nyb2xsTG9jayBmcm9tICcuL1Njcm9sbExvY2svaW5kZXgnO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogRWxlbWVudDwqPixcbiAgaXNFbmFibGVkOiBib29sZWFuLFxufTtcbnR5cGUgU3RhdGUgPSB7XG4gIHRvdWNoU2Nyb2xsVGFyZ2V0OiBIVE1MRWxlbWVudCB8IG51bGwsXG59O1xuXG4vLyBOT1RFOlxuLy8gV2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhZnRlciB1cGRhdGluZyB0byBSZWFjdCB2MTYuMy4wLCB3aGljaCBpbnRyb2R1Y2VzOlxuLy8gLSBjcmVhdGVSZWYoKSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjcmVhdGVyZWZcbi8vIC0gZm9yd2FyZFJlZigpIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGZvcndhcmRyZWZcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Nyb2xsQmxvY2sgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzLCBTdGF0ZT4ge1xuICBzdGF0ZSA9IHsgdG91Y2hTY3JvbGxUYXJnZXQ6IG51bGwgfTtcblxuICAvLyBtdXN0IGJlIGluIHN0YXRlIHRvIHRyaWdnZXIgYSByZS1yZW5kZXIsIG9ubHkgcnVucyBvbmNlIHBlciBpbnN0YW5jZVxuICBnZXRTY3JvbGxUYXJnZXQgPSAocmVmOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGlmIChyZWYgPT09IHRoaXMuc3RhdGUudG91Y2hTY3JvbGxUYXJnZXQpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgdG91Y2hTY3JvbGxUYXJnZXQ6IHJlZiB9KTtcbiAgfTtcblxuICAvLyB0aGlzIHdpbGwgY2xvc2UgdGhlIG1lbnUgd2hlbiBhIHVzZXIgY2xpY2tzIG91dHNpZGVcbiAgYmx1clNlbGVjdElucHV0ID0gKCkgPT4ge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGlzRW5hYmxlZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHRvdWNoU2Nyb2xsVGFyZ2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gYmFpbCBlYXJseSBpZiBub3QgZW5hYmxlZFxuICAgIGlmICghaXNFbmFibGVkKSByZXR1cm4gY2hpbGRyZW47XG5cbiAgICAvKlxuICAgICAqIERpdlxuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGJsb2NrcyBzY3JvbGxpbmcgb24gbm9uLWJvZHkgZWxlbWVudHMgYmVoaW5kIHRoZSBtZW51XG5cbiAgICAgKiBOb2RlUmVzb2x2ZXJcbiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgKiB3ZSBuZWVkIGEgcmVmZXJlbmNlIHRvIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQgdG8gXCJ1bmxvY2tcIiBzY3JvbGwgb25cbiAgICAgKiBtb2JpbGUgZGV2aWNlc1xuXG4gICAgICogU2Nyb2xsTG9ja1xuICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAqIGFjdHVhbGx5IGRvZXMgdGhlIHNjcm9sbCBsb2NraW5nXG4gICAgICovXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmJsdXJTZWxlY3RJbnB1dH1cbiAgICAgICAgICBjc3M9e3sgcG9zaXRpb246ICdmaXhlZCcsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAsIHRvcDogMCB9fVxuICAgICAgICAvPlxuICAgICAgICA8Tm9kZVJlc29sdmVyIGlubmVyUmVmPXt0aGlzLmdldFNjcm9sbFRhcmdldH0+e2NoaWxkcmVufTwvTm9kZVJlc29sdmVyPlxuICAgICAgICB7dG91Y2hTY3JvbGxUYXJnZXQgPyAoXG4gICAgICAgICAgPFNjcm9sbExvY2sgdG91Y2hTY3JvbGxUYXJnZXQ9e3RvdWNoU2Nyb2xsVGFyZ2V0fSAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiJdfQ== */\"\n};\n\n// NOTE:\n// We shouldn't need this after updating to React v16.3.0, which introduces:\n// - createRef() https://reactjs.org/docs/react-api.html#reactcreateref\n// - forwardRef() https://reactjs.org/docs/react-api.html#reactforwardref\nvar ScrollBlock =\n/*#__PURE__*/\nfunction (_PureComponent) {\n  _inherits(ScrollBlock, _PureComponent);\n\n  function ScrollBlock() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ScrollBlock);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollBlock)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      touchScrollTarget: null\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getScrollTarget\", function (ref) {\n      if (ref === _this.state.touchScrollTarget) return;\n\n      _this.setState({\n        touchScrollTarget: ref\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blurSelectInput\", function () {\n      if (document.activeElement) {\n        document.activeElement.blur();\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(ScrollBlock, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          isEnabled = _this$props.isEnabled;\n      var touchScrollTarget = this.state.touchScrollTarget; // bail early if not enabled\n\n      if (!isEnabled) return children;\n      /*\n       * Div\n       * ------------------------------\n       * blocks scrolling on non-body elements behind the menu\n        * NodeResolver\n       * ------------------------------\n       * we need a reference to the scrollable element to \"unlock\" scroll on\n       * mobile devices\n        * ScrollLock\n       * ------------------------------\n       * actually does the scroll locking\n       */\n\n      return jsx(\"div\", null, jsx(\"div\", {\n        onClick: this.blurSelectInput,\n        css: _ref$1\n      }), jsx(NodeResolver, {\n        innerRef: this.getScrollTarget\n      }, children), touchScrollTarget ? jsx(ScrollLock, {\n        touchScrollTarget: touchScrollTarget\n      }) : null);\n    }\n  }]);\n\n  return ScrollBlock;\n}(PureComponent);\n\nvar ScrollCaptor =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(ScrollCaptor, _Component);\n\n  function ScrollCaptor() {\n    var _getPrototypeOf2;\n\n    var _this;\n\n    _classCallCheck(this, ScrollCaptor);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(ScrollCaptor)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isBottom\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isTop\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"scrollTarget\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"touchStart\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"cancelScroll\", function (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleEventDelta\", function (event, delta) {\n      var _this$props = _this.props,\n          onBottomArrive = _this$props.onBottomArrive,\n          onBottomLeave = _this$props.onBottomLeave,\n          onTopArrive = _this$props.onTopArrive,\n          onTopLeave = _this$props.onTopLeave;\n      var _this$scrollTarget = _this.scrollTarget,\n          scrollTop = _this$scrollTarget.scrollTop,\n          scrollHeight = _this$scrollTarget.scrollHeight,\n          clientHeight = _this$scrollTarget.clientHeight;\n      var target = _this.scrollTarget;\n      var isDeltaPositive = delta > 0;\n      var availableScroll = scrollHeight - clientHeight - scrollTop;\n      var shouldCancelScroll = false; // reset bottom/top flags\n\n      if (availableScroll > delta && _this.isBottom) {\n        if (onBottomLeave) onBottomLeave(event);\n        _this.isBottom = false;\n      }\n\n      if (isDeltaPositive && _this.isTop) {\n        if (onTopLeave) onTopLeave(event);\n        _this.isTop = false;\n      } // bottom limit\n\n\n      if (isDeltaPositive && delta > availableScroll) {\n        if (onBottomArrive && !_this.isBottom) {\n          onBottomArrive(event);\n        }\n\n        target.scrollTop = scrollHeight;\n        shouldCancelScroll = true;\n        _this.isBottom = true; // top limit\n      } else if (!isDeltaPositive && -delta > scrollTop) {\n        if (onTopArrive && !_this.isTop) {\n          onTopArrive(event);\n        }\n\n        target.scrollTop = 0;\n        shouldCancelScroll = true;\n        _this.isTop = true;\n      } // cancel scroll\n\n\n      if (shouldCancelScroll) {\n        _this.cancelScroll(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onWheel\", function (event) {\n      _this.handleEventDelta(event, event.deltaY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchStart\", function (event) {\n      // set touch start so we can calculate touchmove delta\n      _this.touchStart = event.changedTouches[0].clientY;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchMove\", function (event) {\n      var deltaY = _this.touchStart - event.changedTouches[0].clientY;\n\n      _this.handleEventDelta(event, deltaY);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getScrollTarget\", function (ref) {\n      _this.scrollTarget = ref;\n    });\n\n    return _this;\n  }\n\n  _createClass(ScrollCaptor, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.startListening(this.scrollTarget);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.stopListening(this.scrollTarget);\n    }\n  }, {\n    key: \"startListening\",\n    value: function startListening(el) {\n      // bail early if no scroll available\n      if (!el) return;\n      if (el.scrollHeight <= el.clientHeight) return; // all the if statements are to appease Flow 😢\n\n      if (typeof el.addEventListener === 'function') {\n        el.addEventListener('wheel', this.onWheel, false);\n      }\n\n      if (typeof el.addEventListener === 'function') {\n        el.addEventListener('touchstart', this.onTouchStart, false);\n      }\n\n      if (typeof el.addEventListener === 'function') {\n        el.addEventListener('touchmove', this.onTouchMove, false);\n      }\n    }\n  }, {\n    key: \"stopListening\",\n    value: function stopListening(el) {\n      // bail early if no scroll available\n      if (el.scrollHeight <= el.clientHeight) return; // all the if statements are to appease Flow 😢\n\n      if (typeof el.removeEventListener === 'function') {\n        el.removeEventListener('wheel', this.onWheel, false);\n      }\n\n      if (typeof el.removeEventListener === 'function') {\n        el.removeEventListener('touchstart', this.onTouchStart, false);\n      }\n\n      if (typeof el.removeEventListener === 'function') {\n        el.removeEventListener('touchmove', this.onTouchMove, false);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return React.createElement(NodeResolver, {\n        innerRef: this.getScrollTarget\n      }, this.props.children);\n    }\n  }]);\n\n  return ScrollCaptor;\n}(Component);\n\nvar ScrollCaptorSwitch =\n/*#__PURE__*/\nfunction (_Component2) {\n  _inherits(ScrollCaptorSwitch, _Component2);\n\n  function ScrollCaptorSwitch() {\n    _classCallCheck(this, ScrollCaptorSwitch);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(ScrollCaptorSwitch).apply(this, arguments));\n  }\n\n  _createClass(ScrollCaptorSwitch, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          isEnabled = _this$props2.isEnabled,\n          props = _objectWithoutProperties(_this$props2, [\"isEnabled\"]);\n\n      return isEnabled ? React.createElement(ScrollCaptor, props) : this.props.children;\n    }\n  }]);\n\n  return ScrollCaptorSwitch;\n}(Component);\n\n_defineProperty(ScrollCaptorSwitch, \"defaultProps\", {\n  isEnabled: true\n});\n\nvar instructionsAriaMessage = function instructionsAriaMessage(event) {\n  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var isSearchable = context.isSearchable,\n      isMulti = context.isMulti,\n      label = context.label,\n      isDisabled = context.isDisabled;\n\n  switch (event) {\n    case 'menu':\n      return \"Use Up and Down to choose options\".concat(isDisabled ? '' : ', press Enter to select the currently focused option', \", press Escape to exit the menu, press Tab to select the option and exit the menu.\");\n\n    case 'input':\n      return \"\".concat(label ? label : 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '');\n\n    case 'value':\n      return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n  }\n};\nvar valueEventAriaMessage = function valueEventAriaMessage(event, context) {\n  var value = context.value,\n      isDisabled = context.isDisabled;\n  if (!value) return;\n\n  switch (event) {\n    case 'deselect-option':\n    case 'pop-value':\n    case 'remove-value':\n      return \"option \".concat(value, \", deselected.\");\n\n    case 'select-option':\n      return isDisabled ? \"option \".concat(value, \" is disabled. Select another option.\") : \"option \".concat(value, \", selected.\");\n  }\n};\nvar valueFocusAriaMessage = function valueFocusAriaMessage(_ref) {\n  var focusedValue = _ref.focusedValue,\n      getOptionLabel = _ref.getOptionLabel,\n      selectValue = _ref.selectValue;\n  return \"value \".concat(getOptionLabel(focusedValue), \" focused, \").concat(selectValue.indexOf(focusedValue) + 1, \" of \").concat(selectValue.length, \".\");\n};\nvar optionFocusAriaMessage = function optionFocusAriaMessage(_ref2) {\n  var focusedOption = _ref2.focusedOption,\n      getOptionLabel = _ref2.getOptionLabel,\n      options = _ref2.options;\n  return \"option \".concat(getOptionLabel(focusedOption), \" focused\").concat(focusedOption.isDisabled ? ' disabled' : '', \", \").concat(options.indexOf(focusedOption) + 1, \" of \").concat(options.length, \".\");\n};\nvar resultsAriaMessage = function resultsAriaMessage(_ref3) {\n  var inputValue = _ref3.inputValue,\n      screenReaderMessage = _ref3.screenReaderMessage;\n  return \"\".concat(screenReaderMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n};\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n  return group.label;\n};\nvar getOptionLabel = function getOptionLabel(option) {\n  return option.label;\n};\nvar getOptionValue = function getOptionValue(option) {\n  return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n  return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n  clearIndicator: clearIndicatorCSS,\n  container: containerCSS,\n  control: css,\n  dropdownIndicator: dropdownIndicatorCSS,\n  group: groupCSS,\n  groupHeading: groupHeadingCSS,\n  indicatorsContainer: indicatorsContainerCSS,\n  indicatorSeparator: indicatorSeparatorCSS,\n  input: inputCSS,\n  loadingIndicator: loadingIndicatorCSS,\n  loadingMessage: loadingMessageCSS,\n  menu: menuCSS,\n  menuList: menuListCSS,\n  menuPortal: menuPortalCSS,\n  multiValue: multiValueCSS,\n  multiValueLabel: multiValueLabelCSS,\n  multiValueRemove: multiValueRemoveCSS,\n  noOptionsMessage: noOptionsMessageCSS,\n  option: optionCSS,\n  placeholder: placeholderCSS,\n  singleValue: css$1,\n  valueContainer: valueContainerCSS\n}; // Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n  var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  // initialize with source styles\n  var styles = _objectSpread({}, source); // massage in target styles\n\n\n  Object.keys(target).forEach(function (key) {\n    if (source[key]) {\n      styles[key] = function (rsCss, props) {\n        return target[key](source[key](rsCss, props), props);\n      };\n    } else {\n      styles[key] = target[key];\n    }\n  });\n  return styles;\n}\n\nvar colors = {\n  primary: '#2684FF',\n  primary75: '#4C9AFF',\n  primary50: '#B2D4FF',\n  primary25: '#DEEBFF',\n  danger: '#DE350B',\n  dangerLight: '#FFBDAD',\n  neutral0: 'hsl(0, 0%, 100%)',\n  neutral5: 'hsl(0, 0%, 95%)',\n  neutral10: 'hsl(0, 0%, 90%)',\n  neutral20: 'hsl(0, 0%, 80%)',\n  neutral30: 'hsl(0, 0%, 70%)',\n  neutral40: 'hsl(0, 0%, 60%)',\n  neutral50: 'hsl(0, 0%, 50%)',\n  neutral60: 'hsl(0, 0%, 40%)',\n  neutral70: 'hsl(0, 0%, 30%)',\n  neutral80: 'hsl(0, 0%, 20%)',\n  neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4; // Used to calculate consistent margin/padding on elements\n\nvar baseUnit = 4; // The minimum height of the control\n\nvar controlHeight = 38; // The amount of space between the control and menu */\n\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n  baseUnit: baseUnit,\n  controlHeight: controlHeight,\n  menuGutter: menuGutter\n};\nvar defaultTheme = {\n  borderRadius: borderRadius,\n  colors: colors,\n  spacing: spacing\n};\n\nvar defaultProps = {\n  backspaceRemovesValue: true,\n  blurInputOnSelect: isTouchCapable(),\n  captureMenuScroll: !isTouchCapable(),\n  closeMenuOnSelect: true,\n  closeMenuOnScroll: false,\n  components: {},\n  controlShouldRenderValue: true,\n  escapeClearsValue: false,\n  filterOption: createFilter(),\n  formatGroupLabel: formatGroupLabel,\n  getOptionLabel: getOptionLabel,\n  getOptionValue: getOptionValue,\n  isDisabled: false,\n  isLoading: false,\n  isMulti: false,\n  isRtl: false,\n  isSearchable: true,\n  isOptionDisabled: isOptionDisabled,\n  loadingMessage: function loadingMessage() {\n    return 'Loading...';\n  },\n  maxMenuHeight: 300,\n  minMenuHeight: 140,\n  menuIsOpen: false,\n  menuPlacement: 'bottom',\n  menuPosition: 'absolute',\n  menuShouldBlockScroll: false,\n  menuShouldScrollIntoView: !isMobileDevice(),\n  noOptionsMessage: function noOptionsMessage() {\n    return 'No options';\n  },\n  openMenuOnFocus: false,\n  openMenuOnClick: true,\n  options: [],\n  pageSize: 5,\n  placeholder: 'Select...',\n  screenReaderStatus: function screenReaderStatus(_ref) {\n    var count = _ref.count;\n    return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n  },\n  styles: {},\n  tabIndex: '0',\n  tabSelectsValue: true\n};\nvar instanceId = 1;\n\nvar Select =\n/*#__PURE__*/\nfunction (_Component) {\n  _inherits(Select, _Component);\n\n  // Misc. Instance Properties\n  // ------------------------------\n  // TODO\n  // Refs\n  // ------------------------------\n  // Lifecycle\n  // ------------------------------\n  function Select(_props) {\n    var _this;\n\n    _classCallCheck(this, Select);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Select).call(this, _props));\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n      ariaLiveSelection: '',\n      ariaLiveContext: '',\n      focusedOption: null,\n      focusedValue: null,\n      inputIsHidden: false,\n      isFocused: false,\n      menuOptions: {\n        render: [],\n        focusable: []\n      },\n      selectValue: []\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blockOptionHover\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"isComposing\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clearFocusValueOnUpdate\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"commonProps\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"components\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"hasGroups\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"initialTouchX\", 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"initialTouchY\", 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputIsHiddenAfterUpdate\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"instancePrefix\", '');\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"openAfterFocus\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"scrollToFocusedOptionOnUpdate\", false);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"userIsDragging\", void 0);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"controlRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getControlRef\", function (ref) {\n      _this.controlRef = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focusedOptionRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getFocusedOptionRef\", function (ref) {\n      _this.focusedOptionRef = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"menuListRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getMenuListRef\", function (ref) {\n      _this.menuListRef = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"inputRef\", null);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getInputRef\", function (ref) {\n      _this.inputRef = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"cacheComponents\", function (components) {\n      _this.components = defaultComponents({\n        components: components\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"focus\", _this.focusInput);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"blur\", _this.blurInput);\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onChange\", function (newValue, actionMeta) {\n      var _this$props = _this.props,\n          onChange = _this$props.onChange,\n          name = _this$props.name;\n      onChange(newValue, _objectSpread({}, actionMeta, {\n        name: name\n      }));\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"setValue\", function (newValue) {\n      var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'set-value';\n      var option = arguments.length > 2 ? arguments[2] : undefined;\n      var _this$props2 = _this.props,\n          closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n          isMulti = _this$props2.isMulti;\n\n      _this.onInputChange('', {\n        action: 'set-value'\n      });\n\n      if (closeMenuOnSelect) {\n        _this.inputIsHiddenAfterUpdate = !isMulti;\n\n        _this.onMenuClose();\n      } // when the select value should change, we should reset focusedValue\n\n\n      _this.clearFocusValueOnUpdate = true;\n\n      _this.onChange(newValue, {\n        action: action,\n        option: option\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"selectOption\", function (newValue) {\n      var _this$props3 = _this.props,\n          blurInputOnSelect = _this$props3.blurInputOnSelect,\n          isMulti = _this$props3.isMulti;\n      var selectValue = _this.state.selectValue;\n\n      if (isMulti) {\n        if (_this.isOptionSelected(newValue, selectValue)) {\n          var candidate = _this.getOptionValue(newValue);\n\n          _this.setValue(selectValue.filter(function (i) {\n            return _this.getOptionValue(i) !== candidate;\n          }), 'deselect-option', newValue);\n\n          _this.announceAriaLiveSelection({\n            event: 'deselect-option',\n            context: {\n              value: _this.getOptionLabel(newValue)\n            }\n          });\n        } else {\n          if (!_this.isOptionDisabled(newValue, selectValue)) {\n            _this.setValue([].concat(_toConsumableArray(selectValue), [newValue]), 'select-option', newValue);\n\n            _this.announceAriaLiveSelection({\n              event: 'select-option',\n              context: {\n                value: _this.getOptionLabel(newValue)\n              }\n            });\n          } else {\n            // announce that option is disabled\n            _this.announceAriaLiveSelection({\n              event: 'select-option',\n              context: {\n                value: _this.getOptionLabel(newValue),\n                isDisabled: true\n              }\n            });\n          }\n        }\n      } else {\n        if (!_this.isOptionDisabled(newValue, selectValue)) {\n          _this.setValue(newValue, 'select-option');\n\n          _this.announceAriaLiveSelection({\n            event: 'select-option',\n            context: {\n              value: _this.getOptionLabel(newValue)\n            }\n          });\n        } else {\n          // announce that option is disabled\n          _this.announceAriaLiveSelection({\n            event: 'select-option',\n            context: {\n              value: _this.getOptionLabel(newValue),\n              isDisabled: true\n            }\n          });\n        }\n      }\n\n      if (blurInputOnSelect) {\n        _this.blurInput();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"removeValue\", function (removedValue) {\n      var selectValue = _this.state.selectValue;\n\n      var candidate = _this.getOptionValue(removedValue);\n\n      var newValue = selectValue.filter(function (i) {\n        return _this.getOptionValue(i) !== candidate;\n      });\n\n      _this.onChange(newValue.length ? newValue : null, {\n        action: 'remove-value',\n        removedValue: removedValue\n      });\n\n      _this.announceAriaLiveSelection({\n        event: 'remove-value',\n        context: {\n          value: removedValue ? _this.getOptionLabel(removedValue) : ''\n        }\n      });\n\n      _this.focusInput();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"clearValue\", function () {\n      var isMulti = _this.props.isMulti;\n\n      _this.onChange(isMulti ? [] : null, {\n        action: 'clear'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"popValue\", function () {\n      var selectValue = _this.state.selectValue;\n      var lastSelectedValue = selectValue[selectValue.length - 1];\n      var newValue = selectValue.slice(0, selectValue.length - 1);\n\n      _this.announceAriaLiveSelection({\n        event: 'pop-value',\n        context: {\n          value: lastSelectedValue ? _this.getOptionLabel(lastSelectedValue) : ''\n        }\n      });\n\n      _this.onChange(newValue.length ? newValue : null, {\n        action: 'pop-value',\n        removedValue: lastSelectedValue\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getOptionLabel\", function (data) {\n      return _this.props.getOptionLabel(data);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getOptionValue\", function (data) {\n      return _this.props.getOptionValue(data);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getStyles\", function (key, props) {\n      var base = defaultStyles[key](props);\n      base.boxSizing = 'border-box';\n      var custom = _this.props.styles[key];\n      return custom ? custom(base, props) : base;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getElementId\", function (element) {\n      return \"\".concat(_this.instancePrefix, \"-\").concat(element);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getActiveDescendentId\", function () {\n      var menuIsOpen = _this.props.menuIsOpen;\n      var _this$state = _this.state,\n          menuOptions = _this$state.menuOptions,\n          focusedOption = _this$state.focusedOption;\n      if (!focusedOption || !menuIsOpen) return undefined;\n      var index = menuOptions.focusable.indexOf(focusedOption);\n      var option = menuOptions.render[index];\n      return option && option.key;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"announceAriaLiveSelection\", function (_ref2) {\n      var event = _ref2.event,\n          context = _ref2.context;\n\n      _this.setState({\n        ariaLiveSelection: valueEventAriaMessage(event, context)\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"announceAriaLiveContext\", function (_ref3) {\n      var event = _ref3.event,\n          context = _ref3.context;\n\n      _this.setState({\n        ariaLiveContext: instructionsAriaMessage(event, _objectSpread({}, context, {\n          label: _this.props['aria-label']\n        }))\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuMouseDown\", function (event) {\n      if (event.button !== 0) {\n        return;\n      }\n\n      event.stopPropagation();\n      event.preventDefault();\n\n      _this.focusInput();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuMouseMove\", function (event) {\n      _this.blockOptionHover = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onControlMouseDown\", function (event) {\n      var openMenuOnClick = _this.props.openMenuOnClick;\n\n      if (!_this.state.isFocused) {\n        if (openMenuOnClick) {\n          _this.openAfterFocus = true;\n        }\n\n        _this.focusInput();\n      } else if (!_this.props.menuIsOpen) {\n        if (openMenuOnClick) {\n          _this.openMenu('first');\n        }\n      } else {\n        //$FlowFixMe\n        if (event.target.tagName !== 'INPUT') {\n          _this.onMenuClose();\n        }\n      } //$FlowFixMe\n\n\n      if (event.target.tagName !== 'INPUT') {\n        event.preventDefault();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDropdownIndicatorMouseDown\", function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n\n      if (_this.props.isDisabled) return;\n      var _this$props4 = _this.props,\n          isMulti = _this$props4.isMulti,\n          menuIsOpen = _this$props4.menuIsOpen;\n\n      _this.focusInput();\n\n      if (menuIsOpen) {\n        _this.inputIsHiddenAfterUpdate = !isMulti;\n\n        _this.onMenuClose();\n      } else {\n        _this.openMenu('first');\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onClearIndicatorMouseDown\", function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n\n      _this.clearValue();\n\n      event.stopPropagation();\n      _this.openAfterFocus = false;\n\n      if (event.type === 'touchend') {\n        _this.focusInput();\n      } else {\n        setTimeout(function () {\n          return _this.focusInput();\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onScroll\", function (event) {\n      if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n        if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n          _this.props.onMenuClose();\n        }\n      } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n        if (_this.props.closeMenuOnScroll(event)) {\n          _this.props.onMenuClose();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onCompositionStart\", function () {\n      _this.isComposing = true;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onCompositionEnd\", function () {\n      _this.isComposing = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchStart\", function (_ref4) {\n      var touches = _ref4.touches;\n      var touch = touches.item(0);\n\n      if (!touch) {\n        return;\n      }\n\n      _this.initialTouchX = touch.clientX;\n      _this.initialTouchY = touch.clientY;\n      _this.userIsDragging = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchMove\", function (_ref5) {\n      var touches = _ref5.touches;\n      var touch = touches.item(0);\n\n      if (!touch) {\n        return;\n      }\n\n      var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n      var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n      var moveThreshold = 5;\n      _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onTouchEnd\", function (event) {\n      if (_this.userIsDragging) return; // close the menu if the user taps outside\n      // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n      // on events on child elements, not the document (which we've attached this handler to).\n\n      if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n        _this.blurInput();\n      } // reset move vars\n\n\n      _this.initialTouchX = 0;\n      _this.initialTouchY = 0;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onControlTouchEnd\", function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onControlMouseDown(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onClearIndicatorTouchEnd\", function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onClearIndicatorMouseDown(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onDropdownIndicatorTouchEnd\", function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onDropdownIndicatorMouseDown(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"handleInputChange\", function (event) {\n      var inputValue = event.currentTarget.value;\n      _this.inputIsHiddenAfterUpdate = false;\n\n      _this.onInputChange(inputValue, {\n        action: 'input-change'\n      });\n\n      _this.onMenuOpen();\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputFocus\", function (event) {\n      var _this$props5 = _this.props,\n          isSearchable = _this$props5.isSearchable,\n          isMulti = _this$props5.isMulti;\n\n      if (_this.props.onFocus) {\n        _this.props.onFocus(event);\n      }\n\n      _this.inputIsHiddenAfterUpdate = false;\n\n      _this.announceAriaLiveContext({\n        event: 'input',\n        context: {\n          isSearchable: isSearchable,\n          isMulti: isMulti\n        }\n      });\n\n      _this.setState({\n        isFocused: true\n      });\n\n      if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n        _this.openMenu('first');\n      }\n\n      _this.openAfterFocus = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputBlur\", function (event) {\n      if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n        _this.inputRef.focus();\n\n        return;\n      }\n\n      if (_this.props.onBlur) {\n        _this.props.onBlur(event);\n      }\n\n      _this.onInputChange('', {\n        action: 'input-blur'\n      });\n\n      _this.onMenuClose();\n\n      _this.setState({\n        focusedValue: null,\n        isFocused: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onOptionHover\", function (focusedOption) {\n      if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n        return;\n      }\n\n      _this.setState({\n        focusedOption: focusedOption\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"shouldHideSelectedOptions\", function () {\n      var _this$props6 = _this.props,\n          hideSelectedOptions = _this$props6.hideSelectedOptions,\n          isMulti = _this$props6.isMulti;\n      if (hideSelectedOptions === undefined) return isMulti;\n      return hideSelectedOptions;\n    });\n\n    _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onKeyDown\", function (event) {\n      var _this$props7 = _this.props,\n          isMulti = _this$props7.isMulti,\n          backspaceRemovesValue = _this$props7.backspaceRemovesValue,\n          escapeClearsValue = _this$props7.escapeClearsValue,\n          inputValue = _this$props7.inputValue,\n          isClearable = _this$props7.isClearable,\n          isDisabled = _this$props7.isDisabled,\n          menuIsOpen = _this$props7.menuIsOpen,\n          onKeyDown = _this$props7.onKeyDown,\n          tabSelectsValue = _this$props7.tabSelectsValue,\n          openMenuOnFocus = _this$props7.openMenuOnFocus;\n      var _this$state2 = _this.state,\n          focusedOption = _this$state2.focusedOption,\n          focusedValue = _this$state2.focusedValue,\n          selectValue = _this$state2.selectValue;\n      if (isDisabled) return;\n\n      if (typeof onKeyDown === 'function') {\n        onKeyDown(event);\n\n        if (event.defaultPrevented) {\n          return;\n        }\n      } // Block option hover events when the user has just pressed a key\n\n\n      _this.blockOptionHover = true;\n\n      switch (event.key) {\n        case 'ArrowLeft':\n          if (!isMulti || inputValue) return;\n\n          _this.focusValue('previous');\n\n          break;\n\n        case 'ArrowRight':\n          if (!isMulti || inputValue) return;\n\n          _this.focusValue('next');\n\n          break;\n\n        case 'Delete':\n        case 'Backspace':\n          if (inputValue) return;\n\n          if (focusedValue) {\n            _this.removeValue(focusedValue);\n          } else {\n            if (!backspaceRemovesValue) return;\n\n            if (isMulti) {\n              _this.popValue();\n            } else if (isClearable) {\n              _this.clearValue();\n            }\n          }\n\n          break;\n\n        case 'Tab':\n          if (_this.isComposing) return;\n\n          if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused\n          // option is already selected; it breaks the flow of navigation\n          openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n            return;\n          }\n\n          _this.selectOption(focusedOption);\n\n          break;\n\n        case 'Enter':\n          if (event.keyCode === 229) {\n            // ignore the keydown event from an Input Method Editor(IME)\n            // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n            break;\n          }\n\n          if (menuIsOpen) {\n            if (!focusedOption) return;\n            if (_this.isComposing) return;\n\n            _this.selectOption(focusedOption);\n\n            break;\n          }\n\n          return;\n\n        case 'Escape':\n          if (menuIsOpen) {\n            _this.inputIsHiddenAfterUpdate = false;\n\n            _this.onInputChange('', {\n              action: 'menu-close'\n            });\n\n            _this.onMenuClose();\n          } else if (isClearable && escapeClearsValue) {\n            _this.clearValue();\n          }\n\n          break;\n\n        case ' ':\n          // space\n          if (inputValue) {\n            return;\n          }\n\n          if (!menuIsOpen) {\n            _this.openMenu('first');\n\n            break;\n          }\n\n          if (!focusedOption) return;\n\n          _this.selectOption(focusedOption);\n\n          break;\n\n        case 'ArrowUp':\n          if (menuIsOpen) {\n            _this.focusOption('up');\n          } else {\n            _this.openMenu('last');\n          }\n\n          break;\n\n        case 'ArrowDown':\n          if (menuIsOpen) {\n            _this.focusOption('down');\n          } else {\n            _this.openMenu('first');\n          }\n\n          break;\n\n        case 'PageUp':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('pageup');\n\n          break;\n\n        case 'PageDown':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('pagedown');\n\n          break;\n\n        case 'Home':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('first');\n\n          break;\n\n        case 'End':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('last');\n\n          break;\n\n        default:\n          return;\n      }\n\n      event.preventDefault();\n    });\n\n    var value = _props.value;\n    _this.cacheComponents = memoizeOne(_this.cacheComponents, exportedEqual).bind(_assertThisInitialized(_assertThisInitialized(_this)));\n\n    _this.cacheComponents(_props.components);\n\n    _this.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n\n    var _selectValue = cleanValue(value);\n\n    var _menuOptions = _props.menuIsOpen ? _this.buildMenuOptions(_props, _selectValue) : {\n      render: [],\n      focusable: []\n    };\n\n    _this.state.menuOptions = _menuOptions;\n    _this.state.selectValue = _selectValue;\n    return _this;\n  }\n\n  _createClass(Select, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.startListeningComposition();\n      this.startListeningToTouch();\n\n      if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n        // Listen to all scroll events, and filter them out inside of 'onScroll'\n        document.addEventListener('scroll', this.onScroll, true);\n      }\n\n      if (this.props.autoFocus) {\n        this.focusInput();\n      }\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      var _this$props8 = this.props,\n          options = _this$props8.options,\n          value = _this$props8.value,\n          menuIsOpen = _this$props8.menuIsOpen,\n          inputValue = _this$props8.inputValue; // re-cache custom components\n\n      this.cacheComponents(nextProps.components); // rebuild the menu options\n\n      if (nextProps.value !== value || nextProps.options !== options || nextProps.menuIsOpen !== menuIsOpen || nextProps.inputValue !== inputValue) {\n        var selectValue = cleanValue(nextProps.value);\n        var menuOptions = nextProps.menuIsOpen ? this.buildMenuOptions(nextProps, selectValue) : {\n          render: [],\n          focusable: []\n        };\n        var focusedValue = this.getNextFocusedValue(selectValue);\n        var focusedOption = this.getNextFocusedOption(menuOptions.focusable);\n        this.setState({\n          menuOptions: menuOptions,\n          selectValue: selectValue,\n          focusedOption: focusedOption,\n          focusedValue: focusedValue\n        });\n      } // some updates should toggle the state of the input visibility\n\n\n      if (this.inputIsHiddenAfterUpdate != null) {\n        this.setState({\n          inputIsHidden: this.inputIsHiddenAfterUpdate\n        });\n        delete this.inputIsHiddenAfterUpdate;\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props9 = this.props,\n          isDisabled = _this$props9.isDisabled,\n          menuIsOpen = _this$props9.menuIsOpen;\n      var isFocused = this.state.isFocused;\n\n      if ( // ensure focus is restored correctly when the control becomes enabled\n      isFocused && !isDisabled && prevProps.isDisabled || // ensure focus is on the Input when the menu opens\n      isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n        this.focusInput();\n      } // scroll the focused option into view if necessary\n\n\n      if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n        scrollIntoView(this.menuListRef, this.focusedOptionRef);\n      }\n\n      this.scrollToFocusedOptionOnUpdate = false;\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.stopListeningComposition();\n      this.stopListeningToTouch();\n      document.removeEventListener('scroll', this.onScroll, true);\n    }\n  }, {\n    key: \"onMenuOpen\",\n    // ==============================\n    // Consumer Handlers\n    // ==============================\n    value: function onMenuOpen() {\n      this.props.onMenuOpen();\n    }\n  }, {\n    key: \"onMenuClose\",\n    value: function onMenuClose() {\n      var _this$props10 = this.props,\n          isSearchable = _this$props10.isSearchable,\n          isMulti = _this$props10.isMulti;\n      this.announceAriaLiveContext({\n        event: 'input',\n        context: {\n          isSearchable: isSearchable,\n          isMulti: isMulti\n        }\n      });\n      this.onInputChange('', {\n        action: 'menu-close'\n      });\n      this.props.onMenuClose();\n    }\n  }, {\n    key: \"onInputChange\",\n    value: function onInputChange(newValue, actionMeta) {\n      this.props.onInputChange(newValue, actionMeta);\n    } // ==============================\n    // Methods\n    // ==============================\n\n  }, {\n    key: \"focusInput\",\n    value: function focusInput() {\n      if (!this.inputRef) return;\n      this.inputRef.focus();\n    }\n  }, {\n    key: \"blurInput\",\n    value: function blurInput() {\n      if (!this.inputRef) return;\n      this.inputRef.blur();\n    } // aliased for consumers\n\n  }, {\n    key: \"openMenu\",\n    value: function openMenu(focusOption) {\n      var _this$state3 = this.state,\n          menuOptions = _this$state3.menuOptions,\n          selectValue = _this$state3.selectValue,\n          isFocused = _this$state3.isFocused;\n      var isMulti = this.props.isMulti;\n      var openAtIndex = focusOption === 'first' ? 0 : menuOptions.focusable.length - 1;\n\n      if (!isMulti) {\n        var selectedIndex = menuOptions.focusable.indexOf(selectValue[0]);\n\n        if (selectedIndex > -1) {\n          openAtIndex = selectedIndex;\n        }\n      } // only scroll if the menu isn't already open\n\n\n      this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n      this.inputIsHiddenAfterUpdate = false;\n      this.onMenuOpen();\n      this.setState({\n        focusedValue: null,\n        focusedOption: menuOptions.focusable[openAtIndex]\n      });\n      this.announceAriaLiveContext({\n        event: 'menu'\n      });\n    }\n  }, {\n    key: \"focusValue\",\n    value: function focusValue(direction) {\n      var _this$props11 = this.props,\n          isMulti = _this$props11.isMulti,\n          isSearchable = _this$props11.isSearchable;\n      var _this$state4 = this.state,\n          selectValue = _this$state4.selectValue,\n          focusedValue = _this$state4.focusedValue; // Only multiselects support value focusing\n\n      if (!isMulti) return;\n      this.setState({\n        focusedOption: null\n      });\n      var focusedIndex = selectValue.indexOf(focusedValue);\n\n      if (!focusedValue) {\n        focusedIndex = -1;\n        this.announceAriaLiveContext({\n          event: 'value'\n        });\n      }\n\n      var lastIndex = selectValue.length - 1;\n      var nextFocus = -1;\n      if (!selectValue.length) return;\n\n      switch (direction) {\n        case 'previous':\n          if (focusedIndex === 0) {\n            // don't cycle from the start to the end\n            nextFocus = 0;\n          } else if (focusedIndex === -1) {\n            // if nothing is focused, focus the last value first\n            nextFocus = lastIndex;\n          } else {\n            nextFocus = focusedIndex - 1;\n          }\n\n          break;\n\n        case 'next':\n          if (focusedIndex > -1 && focusedIndex < lastIndex) {\n            nextFocus = focusedIndex + 1;\n          }\n\n          break;\n      }\n\n      if (nextFocus === -1) {\n        this.announceAriaLiveContext({\n          event: 'input',\n          context: {\n            isSearchable: isSearchable,\n            isMulti: isMulti\n          }\n        });\n      }\n\n      this.setState({\n        inputIsHidden: nextFocus !== -1,\n        focusedValue: selectValue[nextFocus]\n      });\n    }\n  }, {\n    key: \"focusOption\",\n    value: function focusOption() {\n      var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n      var pageSize = this.props.pageSize;\n      var _this$state5 = this.state,\n          focusedOption = _this$state5.focusedOption,\n          menuOptions = _this$state5.menuOptions;\n      var options = menuOptions.focusable;\n      if (!options.length) return;\n      var nextFocus = 0; // handles 'first'\n\n      var focusedIndex = options.indexOf(focusedOption);\n\n      if (!focusedOption) {\n        focusedIndex = -1;\n        this.announceAriaLiveContext({\n          event: 'menu'\n        });\n      }\n\n      if (direction === 'up') {\n        nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n      } else if (direction === 'down') {\n        nextFocus = (focusedIndex + 1) % options.length;\n      } else if (direction === 'pageup') {\n        nextFocus = focusedIndex - pageSize;\n        if (nextFocus < 0) nextFocus = 0;\n      } else if (direction === 'pagedown') {\n        nextFocus = focusedIndex + pageSize;\n        if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n      } else if (direction === 'last') {\n        nextFocus = options.length - 1;\n      }\n\n      this.scrollToFocusedOptionOnUpdate = true;\n      this.setState({\n        focusedOption: options[nextFocus],\n        focusedValue: null\n      });\n      this.announceAriaLiveContext({\n        event: 'menu',\n        context: {\n          isDisabled: isOptionDisabled(options[nextFocus])\n        }\n      });\n    }\n  }, {\n    key: \"getTheme\",\n    // ==============================\n    // Getters\n    // ==============================\n    value: function getTheme() {\n      // Use the default theme if there are no customizations.\n      if (!this.props.theme) {\n        return defaultTheme;\n      } // If the theme prop is a function, assume the function\n      // knows how to merge the passed-in default theme with\n      // its own modifications.\n\n\n      if (typeof this.props.theme === 'function') {\n        return this.props.theme(defaultTheme);\n      } // Otherwise, if a plain theme object was passed in,\n      // overlay it with the default theme.\n\n\n      return _objectSpread({}, defaultTheme, this.props.theme);\n    }\n  }, {\n    key: \"getCommonProps\",\n    value: function getCommonProps() {\n      var clearValue = this.clearValue,\n          getStyles = this.getStyles,\n          setValue = this.setValue,\n          selectOption = this.selectOption,\n          props = this.props;\n      var classNamePrefix = props.classNamePrefix,\n          isMulti = props.isMulti,\n          isRtl = props.isRtl,\n          options = props.options;\n      var selectValue = this.state.selectValue;\n      var hasValue = this.hasValue();\n\n      var getValue = function getValue() {\n        return selectValue;\n      };\n\n      var cx = classNames.bind(null, classNamePrefix);\n      return {\n        cx: cx,\n        clearValue: clearValue,\n        getStyles: getStyles,\n        getValue: getValue,\n        hasValue: hasValue,\n        isMulti: isMulti,\n        isRtl: isRtl,\n        options: options,\n        selectOption: selectOption,\n        setValue: setValue,\n        selectProps: props,\n        theme: this.getTheme()\n      };\n    }\n  }, {\n    key: \"getNextFocusedValue\",\n    value: function getNextFocusedValue(nextSelectValue) {\n      if (this.clearFocusValueOnUpdate) {\n        this.clearFocusValueOnUpdate = false;\n        return null;\n      }\n\n      var _this$state6 = this.state,\n          focusedValue = _this$state6.focusedValue,\n          lastSelectValue = _this$state6.selectValue;\n      var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n\n      if (lastFocusedIndex > -1) {\n        var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n\n        if (nextFocusedIndex > -1) {\n          // the focused value is still in the selectValue, return it\n          return focusedValue;\n        } else if (lastFocusedIndex < nextSelectValue.length) {\n          // the focusedValue is not present in the next selectValue array by\n          // reference, so return the new value at the same index\n          return nextSelectValue[lastFocusedIndex];\n        }\n      }\n\n      return null;\n    }\n  }, {\n    key: \"getNextFocusedOption\",\n    value: function getNextFocusedOption(options) {\n      var lastFocusedOption = this.state.focusedOption;\n      return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue() {\n      var selectValue = this.state.selectValue;\n      return selectValue.length > 0;\n    }\n  }, {\n    key: \"hasOptions\",\n    value: function hasOptions() {\n      return !!this.state.menuOptions.render.length;\n    }\n  }, {\n    key: \"countOptions\",\n    value: function countOptions() {\n      return this.state.menuOptions.focusable.length;\n    }\n  }, {\n    key: \"isClearable\",\n    value: function isClearable() {\n      var _this$props12 = this.props,\n          isClearable = _this$props12.isClearable,\n          isMulti = _this$props12.isMulti; // single select, by default, IS NOT clearable\n      // multi select, by default, IS clearable\n\n      if (isClearable === undefined) return isMulti;\n      return isClearable;\n    }\n  }, {\n    key: \"isOptionDisabled\",\n    value: function isOptionDisabled(option, selectValue) {\n      return typeof this.props.isOptionDisabled === 'function' ? this.props.isOptionDisabled(option, selectValue) : false;\n    }\n  }, {\n    key: \"isOptionSelected\",\n    value: function isOptionSelected(option, selectValue) {\n      var _this2 = this;\n\n      if (selectValue.indexOf(option) > -1) return true;\n\n      if (typeof this.props.isOptionSelected === 'function') {\n        return this.props.isOptionSelected(option, selectValue);\n      }\n\n      var candidate = this.getOptionValue(option);\n      return selectValue.some(function (i) {\n        return _this2.getOptionValue(i) === candidate;\n      });\n    }\n  }, {\n    key: \"filterOption\",\n    value: function filterOption(option, inputValue) {\n      return this.props.filterOption ? this.props.filterOption(option, inputValue) : true;\n    }\n  }, {\n    key: \"formatOptionLabel\",\n    value: function formatOptionLabel(data, context) {\n      if (typeof this.props.formatOptionLabel === 'function') {\n        var inputValue = this.props.inputValue;\n        var selectValue = this.state.selectValue;\n        return this.props.formatOptionLabel(data, {\n          context: context,\n          inputValue: inputValue,\n          selectValue: selectValue\n        });\n      } else {\n        return this.getOptionLabel(data);\n      }\n    }\n  }, {\n    key: \"formatGroupLabel\",\n    value: function formatGroupLabel(data) {\n      return this.props.formatGroupLabel(data);\n    } // ==============================\n    // Mouse Handlers\n    // ==============================\n\n  }, {\n    key: \"startListeningComposition\",\n    // ==============================\n    // Composition Handlers\n    // ==============================\n    value: function startListeningComposition() {\n      if (document && document.addEventListener) {\n        document.addEventListener('compositionstart', this.onCompositionStart, false);\n        document.addEventListener('compositionend', this.onCompositionEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningComposition\",\n    value: function stopListeningComposition() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('compositionstart', this.onCompositionStart);\n        document.removeEventListener('compositionend', this.onCompositionEnd);\n      }\n    }\n  }, {\n    key: \"startListeningToTouch\",\n    // ==============================\n    // Touch Handlers\n    // ==============================\n    value: function startListeningToTouch() {\n      if (document && document.addEventListener) {\n        document.addEventListener('touchstart', this.onTouchStart, false);\n        document.addEventListener('touchmove', this.onTouchMove, false);\n        document.addEventListener('touchend', this.onTouchEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningToTouch\",\n    value: function stopListeningToTouch() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('touchstart', this.onTouchStart);\n        document.removeEventListener('touchmove', this.onTouchMove);\n        document.removeEventListener('touchend', this.onTouchEnd);\n      }\n    }\n  }, {\n    key: \"buildMenuOptions\",\n    // ==============================\n    // Menu Options\n    // ==============================\n    value: function buildMenuOptions(props, selectValue) {\n      var _this3 = this;\n\n      var _props$inputValue = props.inputValue,\n          inputValue = _props$inputValue === void 0 ? '' : _props$inputValue,\n          options = props.options;\n\n      var toOption = function toOption(option, id) {\n        var isDisabled = _this3.isOptionDisabled(option, selectValue);\n\n        var isSelected = _this3.isOptionSelected(option, selectValue);\n\n        var label = _this3.getOptionLabel(option);\n\n        var value = _this3.getOptionValue(option);\n\n        if (_this3.shouldHideSelectedOptions() && isSelected || !_this3.filterOption({\n          label: label,\n          value: value,\n          data: option\n        }, inputValue)) {\n          return;\n        }\n\n        var onHover = isDisabled ? undefined : function () {\n          return _this3.onOptionHover(option);\n        };\n        var onSelect = isDisabled ? undefined : function () {\n          return _this3.selectOption(option);\n        };\n        var optionId = \"\".concat(_this3.getElementId('option'), \"-\").concat(id);\n        return {\n          innerProps: {\n            id: optionId,\n            onClick: onSelect,\n            onMouseMove: onHover,\n            onMouseOver: onHover,\n            tabIndex: -1\n          },\n          data: option,\n          isDisabled: isDisabled,\n          isSelected: isSelected,\n          key: optionId,\n          label: label,\n          type: 'option',\n          value: value\n        };\n      };\n\n      return options.reduce(function (acc, item, itemIndex) {\n        if (item.options) {\n          // TODO needs a tidier implementation\n          if (!_this3.hasGroups) _this3.hasGroups = true;\n          var items = item.options;\n          var children = items.map(function (child, i) {\n            var option = toOption(child, \"\".concat(itemIndex, \"-\").concat(i));\n            if (option) acc.focusable.push(child);\n            return option;\n          }).filter(Boolean);\n\n          if (children.length) {\n            var groupId = \"\".concat(_this3.getElementId('group'), \"-\").concat(itemIndex);\n            acc.render.push({\n              type: 'group',\n              key: groupId,\n              data: item,\n              options: children\n            });\n          }\n        } else {\n          var option = toOption(item, \"\".concat(itemIndex));\n\n          if (option) {\n            acc.render.push(option);\n            acc.focusable.push(item);\n          }\n        }\n\n        return acc;\n      }, {\n        render: [],\n        focusable: []\n      });\n    } // ==============================\n    // Renderers\n    // ==============================\n\n  }, {\n    key: \"constructAriaLiveMessage\",\n    value: function constructAriaLiveMessage() {\n      var _this$state7 = this.state,\n          ariaLiveContext = _this$state7.ariaLiveContext,\n          selectValue = _this$state7.selectValue,\n          focusedValue = _this$state7.focusedValue,\n          focusedOption = _this$state7.focusedOption;\n      var _this$props13 = this.props,\n          options = _this$props13.options,\n          menuIsOpen = _this$props13.menuIsOpen,\n          inputValue = _this$props13.inputValue,\n          screenReaderStatus = _this$props13.screenReaderStatus; // An aria live message representing the currently focused value in the select.\n\n      var focusedValueMsg = focusedValue ? valueFocusAriaMessage({\n        focusedValue: focusedValue,\n        getOptionLabel: this.getOptionLabel,\n        selectValue: selectValue\n      }) : ''; // An aria live message representing the currently focused option in the select.\n\n      var focusedOptionMsg = focusedOption && menuIsOpen ? optionFocusAriaMessage({\n        focusedOption: focusedOption,\n        getOptionLabel: this.getOptionLabel,\n        options: options\n      }) : ''; // An aria live message representing the set of focusable results and current searchterm/inputvalue.\n\n      var resultsMsg = resultsAriaMessage({\n        inputValue: inputValue,\n        screenReaderMessage: screenReaderStatus({\n          count: this.countOptions()\n        })\n      });\n      return \"\".concat(focusedValueMsg, \" \").concat(focusedOptionMsg, \" \").concat(resultsMsg, \" \").concat(ariaLiveContext);\n    }\n  }, {\n    key: \"renderInput\",\n    value: function renderInput() {\n      var _this$props14 = this.props,\n          isDisabled = _this$props14.isDisabled,\n          isSearchable = _this$props14.isSearchable,\n          inputId = _this$props14.inputId,\n          inputValue = _this$props14.inputValue,\n          tabIndex = _this$props14.tabIndex;\n      var Input = this.components.Input;\n      var inputIsHidden = this.state.inputIsHidden;\n      var id = inputId || this.getElementId('input');\n\n      if (!isSearchable) {\n        // use a dummy input to maintain focus/blur functionality\n        return React.createElement(DummyInput, {\n          id: id,\n          innerRef: this.getInputRef,\n          onBlur: this.onInputBlur,\n          onChange: noop,\n          onFocus: this.onInputFocus,\n          readOnly: true,\n          disabled: isDisabled,\n          tabIndex: tabIndex,\n          value: \"\"\n        });\n      } // aria attributes makes the JSX \"noisy\", separated for clarity\n\n\n      var ariaAttributes = {\n        'aria-autocomplete': 'list',\n        'aria-label': this.props['aria-label'],\n        'aria-labelledby': this.props['aria-labelledby']\n      };\n      var _this$commonProps = this.commonProps,\n          cx = _this$commonProps.cx,\n          theme = _this$commonProps.theme,\n          selectProps = _this$commonProps.selectProps;\n      return React.createElement(Input, _extends({\n        autoCapitalize: \"none\",\n        autoComplete: \"off\",\n        autoCorrect: \"off\",\n        cx: cx,\n        getStyles: this.getStyles,\n        id: id,\n        innerRef: this.getInputRef,\n        isDisabled: isDisabled,\n        isHidden: inputIsHidden,\n        onBlur: this.onInputBlur,\n        onChange: this.handleInputChange,\n        onFocus: this.onInputFocus,\n        selectProps: selectProps,\n        spellCheck: \"false\",\n        tabIndex: tabIndex,\n        theme: theme,\n        type: \"text\",\n        value: inputValue\n      }, ariaAttributes));\n    }\n  }, {\n    key: \"renderPlaceholderOrValue\",\n    value: function renderPlaceholderOrValue() {\n      var _this4 = this;\n\n      var _this$components = this.components,\n          MultiValue = _this$components.MultiValue,\n          MultiValueContainer = _this$components.MultiValueContainer,\n          MultiValueLabel = _this$components.MultiValueLabel,\n          MultiValueRemove = _this$components.MultiValueRemove,\n          SingleValue = _this$components.SingleValue,\n          Placeholder = _this$components.Placeholder;\n      var commonProps = this.commonProps;\n      var _this$props15 = this.props,\n          controlShouldRenderValue = _this$props15.controlShouldRenderValue,\n          isDisabled = _this$props15.isDisabled,\n          isMulti = _this$props15.isMulti,\n          inputValue = _this$props15.inputValue,\n          placeholder = _this$props15.placeholder;\n      var _this$state8 = this.state,\n          selectValue = _this$state8.selectValue,\n          focusedValue = _this$state8.focusedValue,\n          isFocused = _this$state8.isFocused;\n\n      if (!this.hasValue() || !controlShouldRenderValue) {\n        return inputValue ? null : React.createElement(Placeholder, _extends({}, commonProps, {\n          key: \"placeholder\",\n          isDisabled: isDisabled,\n          isFocused: isFocused\n        }), placeholder);\n      }\n\n      if (isMulti) {\n        var selectValues = selectValue.map(function (opt) {\n          var isOptionFocused = opt === focusedValue;\n          return React.createElement(MultiValue, _extends({}, commonProps, {\n            components: {\n              Container: MultiValueContainer,\n              Label: MultiValueLabel,\n              Remove: MultiValueRemove\n            },\n            isFocused: isOptionFocused,\n            isDisabled: isDisabled,\n            key: _this4.getOptionValue(opt),\n            removeProps: {\n              onClick: function onClick() {\n                return _this4.removeValue(opt);\n              },\n              onTouchEnd: function onTouchEnd() {\n                return _this4.removeValue(opt);\n              },\n              onMouseDown: function onMouseDown(e) {\n                e.preventDefault();\n                e.stopPropagation();\n              }\n            },\n            data: opt\n          }), _this4.formatOptionLabel(opt, 'value'));\n        });\n        return selectValues;\n      }\n\n      if (inputValue) {\n        return null;\n      }\n\n      var singleValue = selectValue[0];\n      return React.createElement(SingleValue, _extends({}, commonProps, {\n        data: singleValue,\n        isDisabled: isDisabled\n      }), this.formatOptionLabel(singleValue, 'value'));\n    }\n  }, {\n    key: \"renderClearIndicator\",\n    value: function renderClearIndicator() {\n      var ClearIndicator = this.components.ClearIndicator;\n      var commonProps = this.commonProps;\n      var _this$props16 = this.props,\n          isDisabled = _this$props16.isDisabled,\n          isLoading = _this$props16.isLoading;\n      var isFocused = this.state.isFocused;\n\n      if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n        return null;\n      }\n\n      var innerProps = {\n        onMouseDown: this.onClearIndicatorMouseDown,\n        onTouchEnd: this.onClearIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return React.createElement(ClearIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderLoadingIndicator\",\n    value: function renderLoadingIndicator() {\n      var LoadingIndicator = this.components.LoadingIndicator;\n      var commonProps = this.commonProps;\n      var _this$props17 = this.props,\n          isDisabled = _this$props17.isDisabled,\n          isLoading = _this$props17.isLoading;\n      var isFocused = this.state.isFocused;\n      if (!LoadingIndicator || !isLoading) return null;\n      var innerProps = {\n        'aria-hidden': 'true'\n      };\n      return React.createElement(LoadingIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderIndicatorSeparator\",\n    value: function renderIndicatorSeparator() {\n      var _this$components2 = this.components,\n          DropdownIndicator = _this$components2.DropdownIndicator,\n          IndicatorSeparator = _this$components2.IndicatorSeparator; // separator doesn't make sense without the dropdown indicator\n\n      if (!DropdownIndicator || !IndicatorSeparator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      return React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderDropdownIndicator\",\n    value: function renderDropdownIndicator() {\n      var DropdownIndicator = this.components.DropdownIndicator;\n      if (!DropdownIndicator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      var innerProps = {\n        onMouseDown: this.onDropdownIndicatorMouseDown,\n        onTouchEnd: this.onDropdownIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return React.createElement(DropdownIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderMenu\",\n    value: function renderMenu() {\n      var _this5 = this;\n\n      var _this$components3 = this.components,\n          Group = _this$components3.Group,\n          GroupHeading = _this$components3.GroupHeading,\n          Menu = _this$components3.Menu,\n          MenuList = _this$components3.MenuList,\n          MenuPortal = _this$components3.MenuPortal,\n          LoadingMessage = _this$components3.LoadingMessage,\n          NoOptionsMessage = _this$components3.NoOptionsMessage,\n          Option = _this$components3.Option;\n      var commonProps = this.commonProps;\n      var _this$state9 = this.state,\n          focusedOption = _this$state9.focusedOption,\n          menuOptions = _this$state9.menuOptions;\n      var _this$props18 = this.props,\n          captureMenuScroll = _this$props18.captureMenuScroll,\n          inputValue = _this$props18.inputValue,\n          isLoading = _this$props18.isLoading,\n          loadingMessage = _this$props18.loadingMessage,\n          minMenuHeight = _this$props18.minMenuHeight,\n          maxMenuHeight = _this$props18.maxMenuHeight,\n          menuIsOpen = _this$props18.menuIsOpen,\n          menuPlacement = _this$props18.menuPlacement,\n          menuPosition = _this$props18.menuPosition,\n          menuPortalTarget = _this$props18.menuPortalTarget,\n          menuShouldBlockScroll = _this$props18.menuShouldBlockScroll,\n          menuShouldScrollIntoView = _this$props18.menuShouldScrollIntoView,\n          noOptionsMessage = _this$props18.noOptionsMessage,\n          onMenuScrollToTop = _this$props18.onMenuScrollToTop,\n          onMenuScrollToBottom = _this$props18.onMenuScrollToBottom;\n      if (!menuIsOpen) return null; // TODO: Internal Option Type here\n\n      var render = function render(props) {\n        // for performance, the menu options in state aren't changed when the\n        // focused option changes so we calculate additional props based on that\n        var isFocused = focusedOption === props.data;\n        props.innerRef = isFocused ? _this5.getFocusedOptionRef : undefined;\n        return React.createElement(Option, _extends({}, commonProps, props, {\n          isFocused: isFocused\n        }), _this5.formatOptionLabel(props.data, 'menu'));\n      };\n\n      var menuUI;\n\n      if (this.hasOptions()) {\n        menuUI = menuOptions.render.map(function (item) {\n          if (item.type === 'group') {\n            var type = item.type,\n                group = _objectWithoutProperties(item, [\"type\"]);\n\n            var headingId = \"\".concat(item.key, \"-heading\");\n            return React.createElement(Group, _extends({}, commonProps, group, {\n              Heading: GroupHeading,\n              headingProps: {\n                id: headingId\n              },\n              label: _this5.formatGroupLabel(item.data)\n            }), item.options.map(function (option) {\n              return render(option);\n            }));\n          } else if (item.type === 'option') {\n            return render(item);\n          }\n        });\n      } else if (isLoading) {\n        var message = loadingMessage({\n          inputValue: inputValue\n        });\n        if (message === null) return null;\n        menuUI = React.createElement(LoadingMessage, commonProps, message);\n      } else {\n        var _message = noOptionsMessage({\n          inputValue: inputValue\n        });\n\n        if (_message === null) return null;\n        menuUI = React.createElement(NoOptionsMessage, commonProps, _message);\n      }\n\n      var menuPlacementProps = {\n        minMenuHeight: minMenuHeight,\n        maxMenuHeight: maxMenuHeight,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition,\n        menuShouldScrollIntoView: menuShouldScrollIntoView\n      };\n      var menuElement = React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref6) {\n        var ref = _ref6.ref,\n            _ref6$placerProps = _ref6.placerProps,\n            placement = _ref6$placerProps.placement,\n            maxHeight = _ref6$placerProps.maxHeight;\n        return React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n          innerRef: ref,\n          innerProps: {\n            onMouseDown: _this5.onMenuMouseDown,\n            onMouseMove: _this5.onMenuMouseMove\n          },\n          isLoading: isLoading,\n          placement: placement\n        }), React.createElement(ScrollCaptorSwitch, {\n          isEnabled: captureMenuScroll,\n          onTopArrive: onMenuScrollToTop,\n          onBottomArrive: onMenuScrollToBottom\n        }, React.createElement(ScrollBlock, {\n          isEnabled: menuShouldBlockScroll\n        }, React.createElement(MenuList, _extends({}, commonProps, {\n          innerRef: _this5.getMenuListRef,\n          isLoading: isLoading,\n          maxHeight: maxHeight\n        }), menuUI))));\n      }); // positioning behaviour is almost identical for portalled and fixed,\n      // so we use the same component. the actual portalling logic is forked\n      // within the component based on `menuPosition`\n\n      return menuPortalTarget || menuPosition === 'fixed' ? React.createElement(MenuPortal, _extends({}, commonProps, {\n        appendTo: menuPortalTarget,\n        controlElement: this.controlRef,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition\n      }), menuElement) : menuElement;\n    }\n  }, {\n    key: \"renderFormField\",\n    value: function renderFormField() {\n      var _this6 = this;\n\n      var _this$props19 = this.props,\n          delimiter = _this$props19.delimiter,\n          isDisabled = _this$props19.isDisabled,\n          isMulti = _this$props19.isMulti,\n          name = _this$props19.name;\n      var selectValue = this.state.selectValue;\n      if (!name || isDisabled) return;\n\n      if (isMulti) {\n        if (delimiter) {\n          var value = selectValue.map(function (opt) {\n            return _this6.getOptionValue(opt);\n          }).join(delimiter);\n          return React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\",\n            value: value\n          });\n        } else {\n          var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n            return React.createElement(\"input\", {\n              key: \"i-\".concat(i),\n              name: name,\n              type: \"hidden\",\n              value: _this6.getOptionValue(opt)\n            });\n          }) : React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\"\n          });\n          return React.createElement(\"div\", null, input);\n        }\n      } else {\n        var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n\n        return React.createElement(\"input\", {\n          name: name,\n          type: \"hidden\",\n          value: _value\n        });\n      }\n    }\n  }, {\n    key: \"renderLiveRegion\",\n    value: function renderLiveRegion() {\n      if (!this.state.isFocused) return null;\n      return React.createElement(A11yText, {\n        \"aria-live\": \"polite\"\n      }, React.createElement(\"p\", {\n        id: \"aria-selection-event\"\n      }, \"\\xA0\", this.state.ariaLiveSelection), React.createElement(\"p\", {\n        id: \"aria-context\"\n      }, \"\\xA0\", this.constructAriaLiveMessage()));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$components4 = this.components,\n          Control = _this$components4.Control,\n          IndicatorsContainer = _this$components4.IndicatorsContainer,\n          SelectContainer = _this$components4.SelectContainer,\n          ValueContainer = _this$components4.ValueContainer;\n      var _this$props20 = this.props,\n          className = _this$props20.className,\n          id = _this$props20.id,\n          isDisabled = _this$props20.isDisabled,\n          menuIsOpen = _this$props20.menuIsOpen;\n      var isFocused = this.state.isFocused;\n      var commonProps = this.commonProps = this.getCommonProps();\n      return React.createElement(SelectContainer, _extends({}, commonProps, {\n        className: className,\n        innerProps: {\n          id: id,\n          onKeyDown: this.onKeyDown\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }), this.renderLiveRegion(), React.createElement(Control, _extends({}, commonProps, {\n        innerRef: this.getControlRef,\n        innerProps: {\n          onMouseDown: this.onControlMouseDown,\n          onTouchEnd: this.onControlTouchEnd\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        menuIsOpen: menuIsOpen\n      }), React.createElement(ValueContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderPlaceholderOrValue(), this.renderInput()), React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n    }\n  }]);\n\n  return Select;\n}(Component);\n\n_defineProperty(Select, \"defaultProps\", defaultProps);\n\nexport { Select as S, defaultTheme as a, createFilter as c, defaultProps as d, mergeStyles as m };\n","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'themes💾';\n","import {\n  takeEvery,\n  takeLatest,\n  takeLeading,\n  put,\n  call,\n  select,\n  fork,\n  join,\n  all,\n  putResolve,\n  race,\n  take,\n} from 'redux-saga/effects';\nimport {\n  SpecActionTypes,\n  CreateSpecAction,\n  CreateSpecFailedAction,\n  GetPrintFormatsSucceededAction,\n  GetSpecsSucceededAction,\n  SelectSpecAction,\n  SelectDrawingAction,\n  UpdateDrawingAction,\n  UpdateSpecAction,\n  DeleteDrawingAction,\n  DuplicateDrawingWithinSpecAction,\n  GetDrawingRulesAction,\n  UpdateRulesAction,\n  GetSpecsAction,\n  CreateSpecSucceededAction,\n  CreateDrawingAction,\n  CreateDrawingThenSelectAndRedirectAction,\n  EditSpecTitleAction,\n  DeleteSpecAction,\n  SpecToolSpecListSearchSpecsAction,\n  SearchSpecsAction,\n  SearchSpecsSucceededAction,\n  SearchSpecsFailedAction,\n  DeleteSpecAndSearchSpecsAction,\n  UpdatingRulesAction,\n  UpdateRulesSucceededAction,\n  UpdateRulesFailededAction,\n  GetSpecsFailedAction,\n  GetDrawingRulesAndGetSpecAction,\n  GetSeriesWithCombinedFiltersAction,\n  ValidateDrawingAction,\n  SelectDrawingWithoutRulesAction,\n  GetMasterSpecsAction,\n  GetMasterSpecsSucceededAction,\n  SelectMasterSpecAction,\n  SetModeAction,\n  CreateMasterSpecAndRedirectAction,\n  SelectDrawingAndRedirectAction,\n  DeleteMasterSpecAction,\n  DeleteMasterSpecAndGetMasterProjectByIdAction,\n  DeleteMasterDrawingAction,\n  DeleteMasterDrawingAndGetMasterSpecAction,\n  UpdateMasterDrawingAction,\n  UpdateMasterSpecAction,\n  UpdateMasterSpecAndRedirectAction,\n  SetSelectedSpecIdAction,\n  SetSelectedMasterSpecIdAction,\n  UpdateMasterDrawingAndGetMasterSpecAction,\n  DeleteSpecAndGetProjectAction,\n  SetRedirectPathAction,\n  SetTestSpecModeAction,\n  GetSpecFilesAction,\n  GetSpecFilesSucceededAction,\n  GetSpecsTakeEveryAction,\n  ValidateAddProductToDrawingAction,\n  UpdateSelfFailedRulesAction,\n  UpdateSelfFailedRulesLoadingAction,\n  GetSpecPrintConfigAction,\n  SetSpecPrintConfigAction,\n  GetSpecPrintConfigSucceededAction,\n  SaveAlternativeProductsAction,\n  SetIsSavingAlternativeProductsAction,\n  DeleteAlternativeProductAction,\n  SetIsDeletingAlternativeProductAction,\n  DeleteAlternativeProductSucceededAction,\n  GetDrawingByIdAction,\n  LoadingSearchedSpecAction,\n  PureValidateDrawingAction,\n  GetTemplateSpecsSucceededAction,\n  SelectTemplateSpecAction,\n  CreateTemplateSpecAndRedirectAction,\n  GetTemplateSpecsAction,\n  UpdateTemplateSpecAndRedirectAction,\n  UpdateTemplateSpecAction,\n  DeleteTemplateSpecAndGetTemplateProjectByIdAction,\n  DeleteTemplateSpecAction,\n  SetSelectedTemplateSpecIdAction,\n  UpdateTemplateDrawingAction,\n  DeleteTemplateDrawingAction,\n  UpdateTemplateDrawingAndGetTemplateSpecAction,\n  LinkGenericProductToProductAction,\n  UnlinkGenericProductAction,\n  UpdateSpecFilesPermissionAction,\n  IsUpdatingSpecFilesAction,\n  CopyAction,\n  CopySucceedAction,\n  CopyFailedAction,\n  SetIsLinkingOrUnlinkGenericProductAction,\n  SetNewDrawingIdAction,\n  SetIsUpdatingDrawingAction,\n  ReorderSpecsAndGetProjectAction,\n  GetMasterDrawerDataSucceededAction,\n  GetMasterDrawerDataAction,\n  MasterDrawerLoadSpecAction,\n  MasterDrawerLoadSpecSucceededAction,\n  GetPinnedDrawingAction,\n  GetPinnedDrawingSucceededAction,\n  UpdateDrawingSucceededAction,\n  ProductCatalogueCreateDrawingAction,\n  CreateMasterSpecAction,\n  TogglePinMasterDrawingAction,\n  TogglePinTemplateDrawingAction, LogGuestUserDownloadSpecAction,\n  AutoSetDrawingNameAction,\n  DeleteSpecAndGetProjectByIdAction,\n  TriggerSpecAssistAction,\n  BulkDeleteDrawingsAction,\n} from './actions';\n\n\nimport {\n  AddErrorAction,\n  ResetErrorAction,\n} from '../ErrorModule/actions';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  ProjectActionTypes,\n  SelectProjectAction,\n  LinkSpecWithIdAction,\n  SelectMasterProjectAction,\n  GetMasterProjectByIdAction,\n  GetProjectsAction,\n  SetProjectIdForCreatingSpec,\n  GetTemplateProjectByIdAction,\n  SelectTemplateProjectAction,\n  DeleteSpecFromProjectSpecDetailConfigAction,\n  UpdateProjectSpecDetailConfigAction,\n} from '../ProjectModule/actions';\nimport {\n  makeSelectProject,\n  makeSelectMaster,\n  makeSelectSelectedMasterProjectId,\n  makeSelectSelectedTemplateProjectId,\n  makeSelectTemplate,\n} from '../ProjectModule/selectors';\nimport {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  Project,\n  Spec,\n  PageData,\n  Drawing,\n  DrawingRules,\n  HasId,\n  Filter,\n  MissingRule,\n  AlternativeProduct,\n} from '../../models';\nimport {\n  makeSelectSpec,\n  makeSelectSelectedSpecId,\n  makeSelectSelectedDrawingId,\n  makeSelectDrawing,\n  makeSelectSelectedMasterSpecId,\n  makeSelectMasterProjectspec,\n  makeSelectRedirectPath,\n  makeSelectMode,\n  makeSelectSelectedTemplateSpecId, makeSelectTemplateProjectSpec, makeSelectSelectedSpec, makeSelectMasterDrawerData,\n  makeSelectNewDrawingId,\n  makeSelectMasterDrawing,\n  makeSelectTemplateDrawing\n} from './selectors';\nimport { SelectNewCategoryAction, ProductActionTypes, SelectCategoryAction, GetAttributeOrderAction, SearchSeriesWithFilterAction, SetCategoryIdAction, SeriesLoadingAction, SelectCategoryAndGetSpecsAction, GetSeriesAction, SkipRuleEngineAction, SelectCategoryFinishedAction, ResetEditingProductIndexAction, ProductFilterClearAction, SeriesFilterClearAction, SeriesLoadingFinishedAction } from '../ProductModule/actions';\n\nimport {\n  taggedDelay,\n  atsApiCallWaitingAction, apiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  AtsApiCallAction,\n} from '../AtsModule/actions';\nimport {\n  makeSelectProductTypeIdToProductTypeMap,\n  makeSelectProductCategoryId,\n  makeSelectProductCategory,\n  makeSelectSkipRuleEngine,\n  makeSelectSelectedSeriesId,\n  makeSelectSeriesFilterInput,\n  makeSelectEditingProductIndex,\n  selectSeriesFilters,\n  makeSelectHideDiscontinuedSeries,\n  makeSelectAttributeOptions\n } from '../ProductModule/selectors';\nimport { push, routerActions, go } from 'connected-react-router';\nimport {\n  SPEC_DETAIL_PATH,\n  PRODUCT_SELECTION_PATH,\n  PRODUCT_CATEGORY_PATH,\n  MASTER_DETAIL_PATH,\n  PROJECT_DETAIL_PATH,\n  Mode, TEMPLATE_DETAIL_PATH, AMPLITUDE_EVENT, PT_SPEC_DETAIL_PATH, TIME_OUT_LIMIT, GEOLOCATION_ID,\n  SPEC_POLLING_TYPES\n} from '../../constants';\nimport { getProjects, linkSpecWithId } from '../ProjectModule/saga';\nimport { SetOverlayComponentPropsAction, SetSnackbarOpenAction, SpecToolProjectListIsLoadingAction, ToggleOverlayComponentAction } from '../ApplicationModule/actions';\n\nimport i18next from 'i18next';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { RULES_DIALOG_KEY } from '../../containers/Expansion/SeriesPanel';\nimport { PollPrintAction, ShouldDisablePrintContinueAction } from '../PrintModule/actions';\nimport { SearchContactsAction } from '../AccountModule/actions';\nimport { ALTERNATIVES_MODAL_ID } from '../../containers/AlternativesModal';\nimport {makeSelectAmplitudeData, makeSelectUseSpecAssist, makeSelectIdentityObject} from '../AtsModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { QuickSearchPimProductsSucceeded } from '../PimModule/actions';\nimport { makeSelectLocationPathname } from '../RouterModule/selectors';\nimport { BARIATRIC_COMPATIBLE_CATEGORY_IDS, CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS } from '../../containers/ProductSelectionControl';\nimport { makeSelectLocationForSeriesSearchFilter, makeSelectLoggedInUserOfficeLocation } from '../AccountModule/selectors';\nimport {makeSelectSession} from '../ApplicationModule/selectors';\nimport { getDrawingLabelBaseOnProducts } from '../../containers/ProductCategorySelection';\nimport { pollPrint } from '../PrintModule/saga';\n\ninterface ISpecResponse {\n  payload: {\n    specService: {\n      spec: object\n    }\n  };\n}\n\nexport default function* specificationSaga() {\n  yield takeLeading(SpecActionTypes.CREATE_SPEC, createSpec);\n  yield takeLatest(SpecActionTypes.REORDER_SPECS_AND_GET_PROJECT, reorderSpecsAndGetProject);\n  yield takeLatest(SpecActionTypes.DELETE_SPEC, deleteSpec);\n  yield takeLatest(SpecActionTypes.DELETE_SPEC_AND_GET_PROJECT, deleteSpecAndGetProject);\n  yield takeLatest(SpecActionTypes.DELETE_SPEC_AND_GET_PROJECT_BY_ID, deleteSpecAndGetProjectById);\n  yield takeLatest(SpecActionTypes.CREATE_DRAWING, createDrawing);\n  yield takeLatest(SpecActionTypes.CREATE_DRAWING_THEN_SELECT_AND_REDIRECT, createDrawingThenSelectAndRedirect);\n  yield takeLatest(SpecActionTypes.GET_SPECS, getSpecs);\n  yield takeEvery(SpecActionTypes.GET_SPECS_TAKE_EVERY, getSpecs);\n  yield takeLatest(SpecActionTypes.SEARCH_SPECS, searchSpecs);\n  yield takeLatest(SpecActionTypes.SELECT_SPEC, selectSpec);\n  yield takeLatest(SpecActionTypes.SELECT_MASTER_SPEC, selectMasterSpec);\n  yield takeLatest(SpecActionTypes.SELECT_TEMPLATE_SPEC, selectTemplateSpec);\n  yield takeLatest([\n    SpecActionTypes.UPDATE_SPEC,\n  ], updateSpec);\n  yield takeLatest(SpecActionTypes.SELECT_DRAWING, SelectDrawing);\n  yield takeLatest(SpecActionTypes.UPDATE_DRAWING, updateDrawing);\n  yield takeLatest(SpecActionTypes.DELETE_DRAWING, deleteDrawing);\n  yield takeLatest(SpecActionTypes.DUPLICATE_DRAWING_WITHIN_SPEC, duplicateDrawingWithinSpec);\n  yield takeLatest(SpecActionTypes.GET_DRAWING_RULES, getDrawingRules);\n  yield takeLatest(SpecActionTypes.GET_DRAWING_RULES_AND_GET_SPEC, getDrawingRulesAndGetSpec);\n  yield takeLatest(SpecActionTypes.GET_PRINT_FORMATS, getPrintFormats);\n  yield takeLatest(SpecActionTypes.EDIT_SPEC_TITLE, editSpecTitle);\n  yield takeLatest(SpecActionTypes.SPEC_TOOL_SPEC_LIST_SEARCH_SPECS, specToolSpecListSearchSpecs);\n  yield takeLatest(SpecActionTypes.DELETE_AND_SEARCH_SPECS, deleteSpecAndSearchSpecs);\n  yield takeLatest(SpecActionTypes.GET_SPECS_WITH_COMBINED_FILTERS, getSeriesWithCombinedFilters);\n  yield takeLatest(SpecActionTypes.VALIDATE_DRAWING, validateDrawing);\n  yield takeLatest(SpecActionTypes.PURE_VALIDATE_DRAWING, pureValidateDrawing);\n  yield takeLatest(SpecActionTypes.VALIDATE_ADD_PRODUCT_TO_DRAWING, validateAddProductToDrawing);\n  yield takeEvery(SpecActionTypes.GET_MASTER_SPEC_BY_ID, getMasterSpec);\n  yield takeEvery(SpecActionTypes.GET_TEMPLATE_SPEC_BY_ID, getTemplateSpec);\n  yield takeLatest(ProjectActionTypes.SELECT_PROJECT, projectSelected);\n  yield takeLatest(ProjectActionTypes.SELECT_MASTER_PROJECT, selectMasterProject);\n  yield takeLatest(ProjectActionTypes.SELECT_TEMPLATE_PROJECT, selectTemplateProject);\n  yield takeLatest(ProductActionTypes.SELECT_CATEGORY, selectCategory);\n  yield takeLatest(ProductActionTypes.SELECT_CATEGORY_AND_GET_SPECS, selectCategoryAndGetSpecs);\n  yield takeLatest(SpecActionTypes.SELECT_DRAWING_AND_REDIRECT, selectDrawingAndRedirect);\n  yield takeLatest(SpecActionTypes.CREATE_MASTER_SPEC, createMasterSpec);\n  yield takeLatest(SpecActionTypes.CREATE_MASTER_SPEC_AND_REDIRECT, createMasterSpecAndRedirect);\n  yield takeLatest(SpecActionTypes.CREATE_TEMPLATE_SPEC_AND_REDIRECT, createTemplateSpecAndRedirect);\n  yield takeLatest(SpecActionTypes.DELETE_MASTER_SPEC, deleteMasterSpec);\n  yield takeLatest(SpecActionTypes.DELETE_MASTER_SPEC_AND_GET_MASTER_PROJECT_BY_ID, deleteMasterSpecAndGetMasterProjectById);\n  yield takeLatest(SpecActionTypes.DELETE_TEMPLATE_SPEC_AND_GET_TEMPLATE_PROJECT_BY_ID, deleteTemplateSpecAndGetTemplateProjectById);\n  yield takeLatest(SpecActionTypes.DELETE_MASTER_DRAWING, deleteMasterDrawing);\n  yield takeLatest(SpecActionTypes.DELETE_TEMPLATE_DRAWING, deleteTemplateDrawing);\n  yield takeLatest(SpecActionTypes.DELETE_MASTER_DRAWING_AND_GET_MASTER_SPEC, deleteMasterDrawingAndGetMasterSpec);\n  yield takeLatest(SpecActionTypes.DELETE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC, deleteTemplateDrawingAndGetTemplateSpec);\n  yield takeEvery(SpecActionTypes.UPDATE_MASTER_DRAWING, updateMasterDrawing);\n  yield takeEvery(SpecActionTypes.UPDATE_TEMPLATE_DRAWING, updateTemplateDrawing);\n  yield takeLatest(SpecActionTypes.UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC, updateMasterDrawingAndGetMasterSpec);\n  yield takeLatest(SpecActionTypes.UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC, updateTemplateDrawingAndGetTemplateSpec),\n  yield takeLatest(SpecActionTypes.UPDATE_MASTER_SPEC, updateMasterSpec);\n  yield takeLatest(SpecActionTypes.UPDATE_MASTER_SPEC_AND_REDIRECT, updateMasterSpecAndRedirect);\n  yield takeLatest(SpecActionTypes.UPDATE_TEMPLATE_SPEC_AND_REDIRECT, updateTemplateSpecAndRedirect);\n  yield takeLatest(SpecActionTypes.GET_SPEC_FILES, getSpecFiles);\n  yield takeLatest(SpecActionTypes.GET_SPEC_PRINT_CONFIG, getSpecPrintConfig);\n  yield takeLatest(SpecActionTypes.SET_SPEC_PRINT_CONFIG, setSpecPrintConfig);\n  yield takeLatest(SpecActionTypes.SAVE_ALTERNATIVE_PRODUCTS, saveAlternativeProducts);\n  yield takeLatest(SpecActionTypes.DELETE_ALTERNATIVE_PRODUCT, deleteAlternativeProduct);\n  yield takeLatest(SpecActionTypes.GET_DRAWING_BY_ID, getDrawingById);\n  yield takeLatest(SpecActionTypes.LINK_GENERIC_PRODUCT_TO_PRODUCT, linkGenericProductToProduct);\n  yield takeLatest(SpecActionTypes.UNLINK_GENERIC_PRODUCT, unlinkGenericProduct);\n  yield takeLatest(SpecActionTypes.UPDATE_SPEC_FILES_PERMISSION, updateSpecFilesPermission);\n  yield takeLatest(SpecActionTypes.COPY_ACTION, copy);\n  yield takeLatest(SpecActionTypes.GET_MASTER_DRAWER_DATA, getMasterDrawerData);\n  yield takeLatest(SpecActionTypes.MASTER_DRAWER_LOAD_SPEC, loadSpec);\n  yield takeLatest(SpecActionTypes.GET_PINNED_DRAWING, getPinnedDrawing);\n  yield takeLatest(SpecActionTypes.PRODUCT_BROWSING_CREATE_DRAWING, productCatalogueCreateDrawing);\n  yield takeEvery(SpecActionTypes.TOGGLE_PIN_MASTER_DRAWING, togglePinMasterDrawing);\n  yield takeEvery(SpecActionTypes.TOGGLE_PIN_TEMPLATE_DRAWING, togglePinTemplateDrawing);\n  yield takeEvery(SpecActionTypes.LOG_GUEST_USER_DOWNLOAD_SPEC, logGuestUserDownloadSpec);\n  yield takeEvery(SpecActionTypes.AUTO_SET_DRAWING_NAME, autoSetDrawingName);\n  yield takeLatest(SpecActionTypes.TRIGGER_SPEC_ASSIST, triggerSpecAssist);\n  yield takeLatest(SpecActionTypes.BULK_DELETE_DRAWINGS, bulkDeleteDrawings);\n}\n\nfunction* bulkDeleteDrawings(action: BulkDeleteDrawingsAction) {\n  const { type, specDrawings } = action.payload;\n\n  let fetchEndpoint;\n  switch (type) {\n    case 'project': {\n      fetchEndpoint = 'getSpec';\n      break;\n    }\n    case 'master': {\n      fetchEndpoint = 'getMasterSpec';\n      break;\n    }\n    case 'template': {\n      fetchEndpoint = 'getMasterTemplateSpec';\n      break;\n    }\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'bulkDeleteDrawings',\n      body: specDrawings,\n    }\n  }));\n  if (data) {\n    // refresh specs for each specId involved\n    const uniqueSpecIds = Array.from(new Set(specDrawings.map(specDrawing => specDrawing.specId)));\n    const results = yield all(uniqueSpecIds.map((specId) => call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: fetchEndpoint,\n        body: type === 'template' ? { masterTemplateSpecId: specId } : { specId },\n      }\n    }))));\n    // construct a List of specs from results\n    const specs = results.reduce((acc, result) => {\n      if (result.data) {\n        const spec = fromJS(result.data).getIn(['payload', 'spec', 'spec', 0]);\n        if (spec) {\n          return acc.push(spec);\n        }\n      }\n      return acc;\n    }, fromJS([]));\n\n    switch (type) {\n      case 'master': {\n        yield put(new GetMasterSpecsSucceededAction(specs));\n        break;\n      }\n      case 'template': {\n        yield put(new GetTemplateSpecsSucceededAction(specs));\n        break;\n      }\n      default: {\n        yield put(new GetSpecsSucceededAction(specs));\n      }\n    }\n\n    // update project spec detail config to remove deleted drawings\n    yield all(\n      specDrawings.flatMap(({ specId, drawingIds }) =>\n        drawingIds.map((drawingId) =>\n          put(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }))\n        )\n      )\n    );\n  } else {\n    console.error('bulkDeleteDrawings failed', err); // tslint:disable-line\n  }\n\n  yield put (new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false,\n  }));\n}\n\nexport function* triggerSpecAssist(\n  action: TriggerSpecAssistAction\n) {\n  yield race({\n    printReport: call(triggerSpecAssistRequest, action),\n    cancellation: call(cancelGetSeriesDuplicateProductsByIdPolling)\n  });\n}\n\nfunction* cancelGetSeriesDuplicateProductsByIdPolling() {\n  yield take(SpecActionTypes.CANCEL_SPEC_ASSIST);\n}\n\nfunction* triggerSpecAssistRequest(action: TriggerSpecAssistAction) {\n  const {\n    specId,\n    drawingIds,\n    onSuccessCb,\n    onFailCb,\n    onFinallyCb,\n  } = action.payload;\n\n  const location = yield select(makeSelectLocationForSeriesSearchFilter());\n  const mode = yield select(makeSelectMode());\n\n  let endpoint;\n  switch (mode) {\n    case Mode.master: {\n      endpoint = 'createMasterSpecAssist';\n      break;\n    }\n    case Mode.masterTemplate: {\n      endpoint = 'createMasterTemplateSpecAssist';\n      break;\n    }\n    default: {\n      endpoint = 'createSpecAssist';\n      break;\n    }\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint,\n      params: {\n        specId,\n      },\n      body: {\n        drawingIds,\n        location,\n      },\n    }\n  }));\n  if (data) {\n    const printId = fromJS(data).getIn(['payload', 'spec', 'specAssist', 0, 'id']);\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type: SPEC_POLLING_TYPES.specAssist,\n      onSuccessCb,\n      onFailCb,\n      onFinallyCb,\n    }));\n  } else {\n    console.error('triggerSpecAssistRequest failed', err); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* autoSetDrawingName(action: AutoSetDrawingNameAction) {\n  const {\n    setAndStartNewDrawing = false,\n  } = action.payload;\n\n  const newDrawingId = yield select(makeSelectNewDrawingId());\n  const mode = yield select(makeSelectMode());\n\n  let selectedSpec;\n  let selectedDrawing;\n  let partialProjectPath;\n  let partialSpecPath;\n  let endpoint;\n\n  switch (mode) {\n    case Mode.master: {\n      selectedSpec = yield select(makeSelectMasterProjectspec());\n      selectedDrawing = yield select(makeSelectMasterDrawing());\n      partialProjectPath = MASTER_DETAIL_PATH;\n      endpoint = 'updateMasterDrawing';\n      break;\n    }\n    case Mode.masterTemplate: {\n      selectedSpec = yield select(makeSelectTemplateProjectSpec());\n      selectedDrawing = yield select(makeSelectTemplateDrawing());\n      partialProjectPath = TEMPLATE_DETAIL_PATH;\n      endpoint = 'updateMasterTemplateDrawing';\n      break;\n    }\n    default: {\n      selectedSpec = yield select(makeSelectSpec());\n      selectedDrawing = yield select(makeSelectDrawing());\n      partialProjectPath = PROJECT_DETAIL_PATH;\n      partialSpecPath = SPEC_DETAIL_PATH;\n      endpoint = 'updateDrawing';\n    }\n  }\n\n  const selectedProjectId = selectedSpec.get('projectId') || '';\n  const projectpath = `${partialProjectPath}/${selectedProjectId}`;\n  const specpath = `${partialSpecPath}/${selectedSpec.get('id') || ''}`;\n\n  // update drawing label for new drawing then go back or start new drawing\n  if (newDrawingId !== -1 && !selectedDrawing?.get('name') && selectedDrawing?.get('products')?.count()) {\n    const newDrawingName = getDrawingLabelBaseOnProducts(selectedDrawing, selectedSpec.get('drawings'));\n\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint,\n        body: {\n          name: newDrawingName\n        },\n        params: {\n          specId: selectedSpec.get('id'),\n          drawingId: selectedDrawing.get('id')\n        }\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const newDrawing = immuData.getIn(['payload', 'spec', 'drawing', 0]);\n      if (newDrawing == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield putResolve(new UpdateDrawingSucceededAction({ drawingId: newDrawing.get('id'), drawing: newDrawing }));\n        yield putResolve(new SetNewDrawingIdAction(-1));\n        yield putResolve(new SetIsUpdatingDrawingAction(false));\n        if (setAndStartNewDrawing) {\n          yield put(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH  }));\n        } else {\n          yield put(push(mode === Mode.spec ? specpath : projectpath));\n        }\n      }\n    } else {\n      console.error('autoSetDrawingName', {err}); // tslint:disable-line\n    }\n  } else {\n    if (newDrawingId !== -1) {\n      yield putResolve(new SetNewDrawingIdAction(-1));\n    }\n    if (setAndStartNewDrawing) {\n      yield put(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH  }));\n    } else {\n      yield put(push(mode === Mode.spec ? specpath : projectpath));\n    }\n  }\n}\n\nfunction* togglePinMasterDrawing(action: TogglePinMasterDrawingAction) {\n  const { specId, drawingId, isPinned, onSuccess } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'pinMasterSpecDrawing',\n      params: {\n        specId,\n        drawingId,\n      },\n      body: {\n        isPinned,\n      },\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const spec = immuData.getIn(['payload', 'spec', 'drawing', 0, 'id']);\n    if (spec == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess?.(data);\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n        severity: 'success',\n        backgroundColor: 'black'\n      }));\n    }\n  } else {\n    console.error('TogglePinMasterDrawingAction', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* togglePinTemplateDrawing(action: TogglePinTemplateDrawingAction) {\n  const { specId, drawingId, isPinned, onSuccess } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'pinMasterTemplateDrawing',\n      params: {\n        specId,\n        drawingId,\n      },\n      body: {\n        isPinned,\n      },\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const spec = immuData.getIn(['payload', 'spec', 'drawing', 0, 'id']);\n    if (spec == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      onSuccess?.(data);\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n        severity: 'success',\n        backgroundColor: 'black'\n      }));\n    }\n  } else {\n    console.error('TogglePinTemplateDrawingAction', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getPinnedDrawing(action: GetPinnedDrawingAction) {\n  const masterDrawerData = yield select(makeSelectMasterDrawerData());\n  const masterSpecsCount = masterDrawerData.get('masterSpecsCount');\n  const templateSpecsCount = masterDrawerData.get('templateSpecsCount');\n  const fetchedSpecsSize = masterDrawerData.get('specs').size;\n  const masterSpecsOffset = masterDrawerData.get('masterSpecsOffset');\n  const templateSpecsOffset = masterDrawerData.get('templateSpecsOffset');\n\n  const { filters, options, withInfiniteScroll } = action.payload;\n  const endpoint = {\n    master: 'searchMasterSpecs',\n    template: 'searchMasterTemplateSpecs'\n  };\n  if (!withInfiniteScroll) {\n    const [masterSpecsResponse, templateSpecsResponse] = yield all([\n      call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'spec',\n          endpoint: endpoint.master,\n          body: {\n            filters,\n            options: {\n              ...options,\n              offset: 0,\n            },\n          },\n          queries: {\n            populate: true\n          }\n        }\n      })),\n      call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'spec',\n          endpoint: endpoint.template,\n          body: {\n            filters,\n            options: {\n              ...options,\n              offset: 0\n            },\n          },\n          queries: {\n            populate: true\n          }\n        }\n      }))\n    ]);\n    // Search master specs first then template specs\n    const { data: mastersSpecsData } = masterSpecsResponse;\n    const { data: templateSpecsData } = templateSpecsResponse;\n    if (mastersSpecsData && templateSpecsData) {\n      const immutableMastersSpecsData = fromJS(mastersSpecsData);\n      // tslint:disable-next-line:no-shadowed-variable\n      const masterSpecsCount = immutableMastersSpecsData.getIn(['payload', 'spec', 'count']);\n      const masterSpecs = immutableMastersSpecsData.getIn(['payload', 'spec', 'specs']);\n      const immutableTemplateSpecsData = fromJS(templateSpecsData);\n      // tslint:disable-next-line:no-shadowed-variable\n      const templateSpecsCount = immutableTemplateSpecsData.getIn(['payload', 'spec', 'count']);\n      const templateSpecs = immutableTemplateSpecsData.getIn(['payload', 'spec', 'specs']);\n      const data = masterSpecs.concat(templateSpecs).slice(0, options.limit);\n      yield put(new GetPinnedDrawingSucceededAction({\n        data,\n        masterSpecsCount,\n        templateSpecsCount,\n        masterSpecsOffset: masterSpecs.size,\n        templateSpecsOffset: data.size - masterSpecs.size,\n        hasNextPage: data.size < masterSpecsCount + templateSpecsCount,\n        withInfiniteScroll\n      }));\n    }\n  } else {\n    if (fetchedSpecsSize + options.limit <= masterSpecsCount) {\n        const { data: mastersSpecsData } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n            payload: {\n              service: 'spec',\n              endpoint: endpoint.master,\n              body: {\n                  filters,\n                  options: {\n                    ...options,\n                    offset: fetchedSpecsSize,\n                  },\n              },\n              queries: {\n                populate: true\n              }\n            }\n        }));\n        if (mastersSpecsData) {\n            const immutableMastersSpecsData = fromJS(mastersSpecsData);\n            const masterSpecs = immutableMastersSpecsData.getIn(['payload', 'spec', 'specs']);\n            yield put(new GetPinnedDrawingSucceededAction({\n              data: masterSpecs,\n              masterSpecsOffset: masterSpecsOffset + masterSpecs.size,\n              hasNextPage: fetchedSpecsSize + masterSpecs.size < masterSpecsCount + templateSpecsCount,\n              withInfiniteScroll\n            }));\n        }\n    } else {\n      if (fetchedSpecsSize >= masterSpecsCount) {\n        const { data: templateSpecsData } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n          payload: {\n            service: 'spec',\n            endpoint: endpoint.template,\n            body: {\n              filters,\n              options: {\n                ...options,\n                offset: templateSpecsOffset\n              },\n            },\n            queries: {\n              populate: true\n            }\n          }\n        }));\n        if (templateSpecsData) {\n          const immutableTemplateSpecsData = fromJS(templateSpecsData);\n          const templateSpecs = immutableTemplateSpecsData.getIn(['payload', 'spec', 'specs']);\n          yield put(new GetPinnedDrawingSucceededAction({\n            data: templateSpecs,\n            templateSpecsOffset: templateSpecsOffset + templateSpecs.size,\n            hasNextPage: fetchedSpecsSize + templateSpecs.size < masterSpecsCount + templateSpecsCount,\n            withInfiniteScroll\n          }));\n        }\n      } else {\n        const [masterSpecsResponse, templateSpecsResponse] = yield all([\n          call(atsApiCallWaitingAction, new AtsApiCallAction({\n            payload: {\n              service: 'spec',\n              endpoint: endpoint.master,\n              body: {\n                filters,\n                options: {\n                  ...options,\n                  offset: masterSpecsOffset,\n                },\n              },\n              queries: {\n                populate: true\n              }\n            }\n          })),\n          call(atsApiCallWaitingAction, new AtsApiCallAction({\n            payload: {\n              service: 'spec',\n              endpoint: endpoint.template,\n              body: {\n                filters,\n                options: {\n                  ...options,\n                  offset: templateSpecsOffset,\n                }\n              },\n              queries: {\n                populate: true\n              }\n            }\n          }))\n        ]);\n        // Search master specs first then template specs\n        const { data: mastersSpecsData } = masterSpecsResponse;\n        const { data: templateSpecsData } = templateSpecsResponse;\n        if (mastersSpecsData && templateSpecsData) {\n          const immutableMastersSpecsData = fromJS(mastersSpecsData);\n          const masterSpecs = immutableMastersSpecsData.getIn(['payload', 'spec', 'specs']);\n          const immutableTemplateSpecsData = fromJS(templateSpecsData);\n          const templateSpecs = immutableTemplateSpecsData.getIn(['payload', 'spec', 'specs']);\n          const data = masterSpecs.concat(templateSpecs).slice(0, options.limit);\n          yield put(new GetPinnedDrawingSucceededAction({\n            data,\n            masterSpecsOffset: masterSpecsOffset + masterSpecs.size,\n            templateSpecsOffset: templateSpecsOffset + data.size - masterSpecs.size,\n            hasNextPage: fetchedSpecsSize + data.size < masterSpecsCount + templateSpecsCount,\n            withInfiniteScroll\n          }));\n        }\n      }\n    }\n  }\n}\nfunction* loadSpec(action: MasterDrawerLoadSpecAction) {\n  const { projectId, specId, type } = action.payload;\n  const body = type === 'template' ? { masterTemplateSpecId: specId } : { specId };\n  const endpoint = {\n    master: 'getMasterSpec',\n    template: 'getMasterTemplateSpec',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[type],\n      body\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    yield put(new MasterDrawerLoadSpecSucceededAction({\n      projectId,\n      type,\n      specData: immuData.getIn(['payload', 'spec', 'spec', 0]),\n    }));\n  } else {\n    console.error('spec no data', {err}); // tslint:disable-line\n  }\n}\nfunction* getMasterDrawerData(action: GetMasterDrawerDataAction) {\n  const { filters, options, withInfiniteScroll, type, onSuccess } = action.payload;\n  const endpoint = {\n    master: 'searchMasterProjects',\n    template: 'searchMasterTemplates',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'project',\n      endpoint: endpoint[type],\n      body: {\n        filters,\n        options,\n      },\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'project', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'project', 'hasNextPage']);\n    const masters: List<IMap<Project>> = immuData.getIn(['payload', 'project', 'projects']);\n    if (masters == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetMasterDrawerDataSucceededAction({\n        data: masters,\n        count,\n        hasNextPage,\n        type,\n        withInfiniteScroll\n      }));\n      onSuccess?.(masters);\n    }\n  } else {\n    console.error('masters no data', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\nfunction* getDrawingById(\n  action: GetDrawingByIdAction,\n) {\n\n  const {\n    specId,\n    drawingId,\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getDrawing',\n      params: {\n        specId,\n        drawingId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    // const id: number = immuData.getIn(['payload', 'spec', 'alternativeProduct', 0, 'id']);\n    // if (id == null) {\n    //   console.error('Invalid response', data); // tslint:disable-line\n    // } else {\n    //   const masterMode = yield select(makeSelectMasterMode());\n    // }\n  } else {\n    console.error('getDrawingById failed', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteAlternativeProduct(\n  action: DeleteAlternativeProductAction,\n) {\n  yield put(new SetIsDeletingAlternativeProductAction({ isDeletingAlternativeProduct: true }));\n\n  const {\n    specId,\n    drawingId,\n    productId, // specProductId\n    alternativeId,\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'removeAlternativeProduct',\n      params: {\n        specId,\n        drawingId,\n        productId,\n        alternativeId,\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const id: number = immuData.getIn(['payload', 'spec', 'alternativeProduct', 0, 'id']);\n    if (id == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new LoadingSearchedSpecAction());\n      yield call(getSpecs, new GetSpecsAction({specId}));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:alternativeDropDown.alternativeDeleteSuccessMessage'),\n        severity: 'success',\n        backgroundColor: 'black'\n      }));\n    }\n  } else {\n    console.error('deleteAlternativeProduct failed', {err}); // tslint:disable-line\n  }\n  yield put(new SetIsDeletingAlternativeProductAction({ isDeletingAlternativeProduct: false }));\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* saveAlternativeProducts(\n  action: SaveAlternativeProductsAction,\n) {\n  yield put(new SetIsSavingAlternativeProductsAction({ isSavingAlternativeProducts: true }));\n\n  const {\n    specId,\n    drawingId,\n    productId, // specProductId\n    alternativeProducts,\n    closeModalAfter = true,\n    displaySnackbar = true,\n    baseProduct = Map()\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'createAlternativeProduct',\n      params: {\n        specId,\n        drawingId,\n        productId,\n      },\n      body: alternativeProducts.toJS()\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const _alternativeProducts: List<IMap<AlternativeProduct>> = immuData.getIn(['payload', 'spec', 'alternativeProducts']);\n\n    // tracking through amplitude\n    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n    const trackingAlternativeProducts = _alternativeProducts?.map((alternativeProduct, index) => ({\n      productId: alternativeProduct.get('productId') || null,\n      seriesId: alternativeProduct.get('seriesId') || null,\n      productNumber: alternativeProduct.get('productNumber') || null,\n      seriesName: alternativeProduct.get('seriesName') || null,\n      manufacturer: alternativeProduct.get('manufacturer') || null,\n      manufacturerId: alternativeProduct.get('manufacturerId') || null,\n      categoryName: alternativeProduct.get('categoryName') || null,\n      note: alternativeProduct.get('note'),\n      savedByUser: alternativeProduct.getIn(['createdBy', 'user', 'name']),\n      savedByOffice: alternativeProduct.getIn(['createdBy', 'office', 'name']),\n      savedByFirm: alternativeProduct.getIn(['createdBy', 'firm', 'name']),\n    }));\n\n    const selectedSpec = yield select(makeSelectSelectedSpec({ specId }));\n    const projectId = selectedSpec?.get('projectId');\n    const projectName = selectedSpec?.get('projectTitle');\n    const isMaster = selectedSpec?.get('isMaster');\n    const isMasterTemplate = selectedSpec?.get('isMasterTemplate');\n    const isTestProject = projectId && !isMaster && !isMasterTemplate && selectedSpec?.get('status') === 'test';\n    const isProject = projectId && !isMaster && !isMasterTemplate && selectedSpec?.get('status') !== 'test';\n    let projectType = 'none';\n    if (isProject) {\n      projectType = 'project';\n    } else if (isMaster) {\n      projectType = 'master';\n    } else if (isMasterTemplate) {\n      projectType = 'template';\n    } else if (isTestProject) {\n      projectType = 'test project';\n    }\n\n    const amplitudeData = yield select(makeSelectAmplitudeData());\n    const trackingData = {\n      basisProductId: baseProduct.get('id'),\n      basisProductNumber: baseProduct.get('productNumber'),\n      basisBrand: baseProduct.get('brand'),\n      basisBrandId: baseProduct.get('brandId'),\n      basisCategoryName: baseProduct.get('categoryName'),\n      basisCategoryId: baseProduct.get('category'),\n      alternativeProducts: trackingAlternativeProducts?.toJS() ?? [],\n      specId,\n      specName: selectedSpec?.get('name') || '',\n      projectId,\n      projectName,\n      projectType,\n      ...amplitudeData\n    };\n\n    amplitude.logEvent(AMPLITUDE_EVENT.saveAlternatives, trackingData);\n\n    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n    yield put(new LoadingSearchedSpecAction());\n    yield call(getSpecs, new GetSpecsAction({specId}));\n    if (closeModalAfter) {\n      yield put(new ToggleOverlayComponentAction({\n        id: ALTERNATIVES_MODAL_ID,\n        open: false\n      }));\n    }\n    if (displaySnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:alternativeModal.savedSuccessfullyMessage'),\n        severity: 'success',\n        backgroundColor: 'black'\n      }));\n    }\n  } else {\n    console.error('saveAlternativesProducts failed', {err}); // tslint:disable-line\n  }\n  yield put(new SetIsSavingAlternativeProductsAction({ isSavingAlternativeProducts: false }));\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* setSpecPrintConfig(\n  action: SetSpecPrintConfigAction,\n) {\n  const {\n    specId,\n    type,\n    config,\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'setSpecPrintConfig',\n      params: {\n        specId,\n        type,\n      },\n      body: {\n        ...config.toJS()\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n\n  } else {\n    console.error('SetSpecPrintConfigAction failed', {err}); // tslint:disable-line\n  }\n}\n\nfunction* getSpecPrintConfig(\n  action: GetSpecPrintConfigAction,\n) {\n  const {\n    specId,\n    type,\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getSpecPrintConfig',\n      params: {\n        specId,\n        type,\n      },\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const config: Map<string, any> = immutableData.getIn(['payload', 'spec', 'config']);\n    const productGroups = config.get('productGroups');\n\n    if (!productGroups || (productGroups.size === 0)) {\n      yield put(new ShouldDisablePrintContinueAction(true));\n    }\n\n    if (config.size !== 0) {\n      // if there is customerId in config then search for customer so we can access the data\n      const customerId = config.get('customer');\n      if (customerId) {\n        yield put(new SearchContactsAction({\n          searchTerm: '',\n          filters: {\n            and: [\n              {\n                id: {\n                  eq: customerId\n                }\n              }\n            ]\n          }\n        }));\n      }\n\n      yield put(new GetSpecPrintConfigSucceededAction({\n        specId,\n        config\n      }));\n    }\n\n  } else {\n    console.error('GetSpecPrintConfigAction failed', {err}); // tslint:disable-line\n  }\n}\n\nfunction* updateMasterDrawingAndGetMasterSpec(\n  action: UpdateMasterDrawingAndGetMasterSpecAction\n) {\n  yield call(updateMasterDrawing, new UpdateMasterDrawingAction(action.payload));\n  yield put(new GetMasterSpecsAction({ specId: action.payload.specId, withLoading: false }));\n}\nfunction* updateTemplateDrawingAndGetTemplateSpec(\n    action: UpdateTemplateDrawingAndGetTemplateSpecAction\n) {\n  yield call(updateTemplateDrawing, new UpdateTemplateDrawingAction(action.payload));\n  yield put(new GetTemplateSpecsAction(action.payload.specId, {withLoading: false}));\n}\n\nfunction* updateMasterSpecAndRedirect(\n  action: UpdateMasterSpecAndRedirectAction\n) {\n  const {\n    specId,\n    body\n  } = action.payload;\n\n  const masterProjectId = yield select(makeSelectSelectedMasterProjectId());\n  yield call(updateMasterSpec, new UpdateMasterSpecAction(action.payload));\n  yield put(new GetMasterProjectByIdAction({ id: masterProjectId }));\n  yield put(push(`${MASTER_DETAIL_PATH}/${masterProjectId}`));\n}\nfunction* updateTemplateSpecAndRedirect(\n    action: UpdateTemplateSpecAndRedirectAction\n) {\n  const {\n    specId,\n    body\n  } = action.payload;\n\n  const templateProjectId = yield select(makeSelectSelectedTemplateProjectId());\n  yield call(updateTemplateSpec, new UpdateTemplateSpecAction(action.payload));\n  yield put(new GetTemplateProjectByIdAction({ id: templateProjectId }));\n  yield put(push(`${TEMPLATE_DETAIL_PATH}/${templateProjectId}`));\n}\n\nfunction* updateMasterDrawing(\n  action: UpdateMasterDrawingAction\n) {\n  const {\n    specId,\n    drawingId,\n    drawing: body = {},\n    onSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'updateMasterDrawing',\n      params: {\n        specId,\n        drawingId\n      },\n      body\n    }\n  }));\n  if (!data) {\n    console.error('err in update master drawing', {err}); // tslint:disable-line\n  } else if (data) {\n    onSuccess?.(data);\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n      severity: 'success',\n      backgroundColor: 'black'\n    }));\n  }\n}\nfunction* updateTemplateDrawing(\n    action: UpdateTemplateDrawingAction\n) {\n  const {\n    specId,\n    drawingId,\n    drawing: body = {},\n    onSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'updateMasterTemplateDrawing',\n      params: {\n        specId,\n        drawingId\n      },\n      body\n    }\n  }));\n  if (!data) {\n    console.error('err in update master template drawing', {err}); // tslint:disable-line\n  } else if (data) {\n    onSuccess?.(data);\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n      severity: 'success',\n      backgroundColor: 'black'\n    }));\n  }\n}\n\nfunction* deleteMasterDrawingAndGetMasterSpec(\n  action: DeleteMasterDrawingAndGetMasterSpecAction\n) {\n  const {\n    specIdToGet,\n    drawingSpecId,\n    drawingId,\n    onDeleteSuccess\n  } = action.payload;\n\n  yield call(deleteMasterDrawing, new DeleteMasterDrawingAction({drawingId, specId: drawingSpecId, onDeleteSuccess }));\n  yield put(new GetMasterSpecsAction({ specId: specIdToGet }));\n}\nfunction* deleteTemplateDrawingAndGetTemplateSpec(\n    action: DeleteMasterDrawingAndGetMasterSpecAction\n) {\n  const {\n    specIdToGet,\n    drawingSpecId,\n    drawingId,\n    onDeleteSuccess\n  } = action.payload;\n\n  yield call(deleteTemplateDrawing, new DeleteTemplateDrawingAction({drawingId, specId: drawingSpecId, onDeleteSuccess}));\n  yield put(new GetTemplateSpecsAction(specIdToGet));\n}\nfunction* deleteMasterDrawing(\n  action: DeleteMasterDrawingAction,\n) {\n  const {\n    specId,\n    drawingId,\n    onDeleteSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteMasterDrawing',\n      params: {\n        specId,\n        drawingId\n      },\n    }\n  }));\n  if (!data) {\n    console.error('err in delete master drawing', {err}); // tslint:disable-line\n  } else {\n    onDeleteSuccess?.();\n  }\n}\nfunction* deleteTemplateDrawing(\n    action: DeleteTemplateDrawingAction,\n) {\n  const {\n    specId,\n    drawingId,\n    onDeleteSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteMasterTemplateDrawing',\n      params: {\n        specId,\n        drawingId\n      },\n    }\n  }));\n  if (!data) {\n    console.error('err in delete master template drawing', {err}); // tslint:disable-line\n  } else {\n    onDeleteSuccess?.();\n  }\n}\n\nfunction* deleteMasterSpecAndGetMasterProjectById(\n  action: DeleteMasterSpecAndGetMasterProjectByIdAction,\n) {\n  const {\n    deleteId,\n    getId\n  } = action.payload;\n\n  const selectedMasterProjectId = yield select(makeSelectSelectedMasterProjectId());\n  const {\n    data,\n    err,\n  } = yield call(deleteMasterSpec, new DeleteMasterSpecAction({ specId: deleteId }));\n  if (data) {\n    yield put(new DeleteSpecFromProjectSpecDetailConfigAction({ specId: deleteId }));\n    yield put(new GetMasterProjectByIdAction({ id: getId || selectedMasterProjectId }));\n  }\n}\n\nfunction* deleteTemplateSpecAndGetTemplateProjectById(\n    action: DeleteTemplateSpecAndGetTemplateProjectByIdAction,\n) {\n  const {\n    deleteId,\n    getId\n  } = action.payload;\n\n  const selectedTemplateProjectId = yield select(makeSelectSelectedTemplateProjectId());\n  const {\n    data,\n    err,\n  } = yield call(deleteTemplateSpec, new DeleteTemplateSpecAction({ specId: deleteId }));\n  if (data) {\n    yield put(new DeleteSpecFromProjectSpecDetailConfigAction({ specId: deleteId }));\n    yield put(new GetTemplateProjectByIdAction({ id: getId || selectedTemplateProjectId }));\n  }\n}\n\nfunction* selectMasterSpec(\n  action: SelectMasterSpecAction,\n) {\n  const selectedDrawingId: number = yield select(makeSelectSelectedDrawingId());\n  const setSelectDrawingId = action.setSelectDrawingId ?? true;\n  const specId: number = action.payload;\n  const masterSpec: IMap<Spec> = yield select(makeSelectMasterProjectspec({specId}));\n  if (\n    setSelectDrawingId && (\n      selectedDrawingId == null ||\n      (\n        masterSpec &&\n        masterSpec\n        .get('drawings', List())\n        .filter((drawing: IMap<Drawing>) => drawing.get('id') === selectedDrawingId).count() === 0\n      )\n    )\n  ) {\n    const firstDrawingId = masterSpec.getIn(['drawings', 0, 'id']);\n    if (firstDrawingId != null) {\n      yield put(new SelectDrawingAction(firstDrawingId));\n    }\n  }\n}\n\nfunction* selectTemplateSpec(\n    action: SelectTemplateSpecAction,\n) {\n  const selectedDrawingId: number = yield select(makeSelectSelectedDrawingId());\n  const specId: number = action.payload;\n  const templateSpec: IMap<Spec> = yield select(makeSelectTemplateProjectSpec({specId}));\n  if (\n      selectedDrawingId == null ||\n      (\n          templateSpec &&\n          templateSpec\n              .get('drawings', List())\n              .filter((drawing: IMap<Drawing>) => drawing.get('id') === selectedDrawingId).count() === 0\n      )\n  ) {\n    const firstDrawingId = templateSpec.getIn(['drawings', 0, 'id']);\n    if (firstDrawingId != null) {\n      yield put(new SelectDrawingAction(firstDrawingId));\n    }\n  }\n}\n\nfunction* selectMasterProject(\n  action: SelectMasterProjectAction,\n) {\n  const {\n    projectId,\n    specId,\n    setSelectDrawingId,\n    onSuccess,\n  } = action.payload;\n  const master: IMap<Project> = yield select(makeSelectMaster({projectId}));\n  const selectedSpecId = yield select(makeSelectSelectedMasterSpecId());\n  // only autoload master spec if none selected\n  if (\n    master != null && (\n      (specId != null)\n      || (selectedSpecId === -1)\n      || (master.get('specs').findIndex((masterSpecId) => masterSpecId.get('id') === selectedSpecId) === -1)\n    )\n  ) {\n    const masterSpecs = master.get('specs');\n    const firstSpec = masterSpecs.get(0);\n    const firstMasterSpecId = specId != null\n                                ? specId\n                                : firstSpec != null && firstSpec.get('id');\n    yield put(new SetModeAction(Mode.master));\n\n    if (firstMasterSpecId != null) {\n      const getSpecActions = masterSpecs.map((masterSpecIdObject: IMap<HasId>) => {\n        const masterSpecId = masterSpecIdObject.get('id');\n        if (masterSpecId === firstMasterSpecId) {\n          return put(new GetMasterSpecsAction({\n            specId: Number(masterSpecId),\n            onSuccess: onSuccess ? () => {\n              onSuccess();\n            } : undefined\n          }));\n        } else {\n          return put(new GetMasterSpecsAction({\n            specId: Number(masterSpecId),\n          }));\n        }\n      });\n\n      yield all(getSpecActions.valueSeq().toArray());\n      yield put(new SelectMasterSpecAction(firstMasterSpecId, setSelectDrawingId));\n    } else {\n      console.debug('no first spec found'); // tslint:disable-line\n    }\n  }\n}\n\nexport function* selectTemplateProject(\n    action: SelectTemplateProjectAction,\n) {\n  const {\n    projectId,\n    specId,\n  } = action.payload;\n  const template: IMap<Project> = yield select(makeSelectTemplate({projectId}));\n  const selectedSpecId = yield select(makeSelectSelectedTemplateSpecId());\n  // only autoload master spec if none selected\n  if (\n      template != null && (\n          (specId != null)\n          || (selectedSpecId === -1)\n          || (template.get('specs').findIndex((templateSpecId) => templateSpecId.get('id') === selectedSpecId) === -1)\n      )\n  ) {\n    const templateSpecs = template.get('specs');\n    const firstSpec = templateSpecs.get(0);\n    const firstTemplateSpecId = specId != null ? specId : firstSpec != null && firstSpec.get('id');\n    yield put(new SetModeAction(Mode.masterTemplate));\n\n    if (firstTemplateSpecId != null) {\n      if (templateSpecs?.size === 1) {\n        yield call(getTemplateSpec, new GetTemplateSpecsAction(Number(firstTemplateSpecId)));\n      } else {\n        const getSpecActions = templateSpecs.map((templateSpecIdObject: IMap<HasId>) => {\n          const templateSpecId = templateSpecIdObject.get('id');\n          return put(new GetTemplateSpecsAction(Number(templateSpecId)));\n        });\n        yield all(getSpecActions.valueSeq().toArray());\n      }\n      yield put(new SelectTemplateSpecAction(firstTemplateSpecId));\n    } else {\n      console.debug('no first spec found'); // tslint:disable-line\n    }\n  }\n}\nfunction* getMasterSpec(\n  action: GetMasterSpecsAction,\n) {\n  const {\n    specId,\n    onSuccess,\n  } = action.payload;\n  if (specId != null) {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: 'getMasterSpec',\n        body: {\n          specId,\n        }\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const specs = immuData.getIn(['payload', 'spec', 'spec']);\n      if (specs == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetMasterSpecsSucceededAction(specs));\n        onSuccess?.();\n      }\n    } else {\n      yield put(new GetSpecsFailedAction());\n      console.error('master spec no data', {err}); // tslint:disable-line\n    }\n  } else {\n    yield put(new GetSpecsFailedAction());\n    console.error('master spec error'); // tslint:disable-line\n  }\n}\nfunction* receiveData(response) {\n  const { data, err } = response;\n  if (data) {\n    const immuData = fromJS(data);\n    const specs = immuData.getIn(['payload', 'spec', 'spec']);\n    if (specs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetTemplateSpecsSucceededAction(specs));\n    }\n  } else {\n    yield put(new GetSpecsFailedAction());\n    console.error('master template spec no data', {err}); // tslint:disable-line\n  }\n}\nfunction* getTemplateSpec(\n    action: GetTemplateSpecsAction,\n) {\n  if (typeof action.payload === 'number') {\n    const {\n          data,\n          err,\n        }: {\n          data: any,\n          err: Error\n        } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n          payload: {\n            service: 'spec',\n            endpoint: 'getMasterTemplateSpec',\n            body: {\n              masterTemplateSpecId: action.payload,\n            }\n          }\n        }));\n        if (data) {\n          const immuData = fromJS(data);\n          const specs = immuData.getIn(['payload', 'spec', 'spec']);\n          if (specs == null) {\n            console.error('Invalid response', data); // tslint:disable-line\n          } else {\n            yield put(new GetTemplateSpecsSucceededAction(specs));\n          }\n        } else {\n          yield put(new GetSpecsFailedAction());\n          console.error('master template spec no data', {err}); // tslint:disable-line\n        }\n  } else {\n    const requests = action.payload.map((specId) => call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: 'getMasterTemplateSpec',\n        body: {\n          masterTemplateSpecId: specId,\n        }\n      }\n    })));\n    try {\n      const responses = yield all(requests);\n      yield all(responses.map((response) => fork(receiveData, response)));\n      action.options.onSuccess(responses.map((response) => fromJS(response.data).getIn(['payload', 'spec', 'spec'])));\n    } catch (error) {\n      yield put(new GetSpecsFailedAction());\n      console.error('master template spec error'); // tslint:disable-line\n    }\n    // if (specId != null) {\n    //   const {\n    //     data,\n    //     err,\n    //   }: {\n    //     data: any,\n    //     err: Error\n    //   } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    //     payload: {\n    //       service: 'spec',\n    //       endpoint: 'getMasterTemplateSpec',\n    //       body: {\n    //         masterTemplateSpecId: specId,\n    //       }\n    //     }\n    //   }));\n    //   if (data) {\n    //     const immuData = fromJS(data);\n    //     const specs = immuData.getIn(['payload', 'spec', 'spec']);\n    //     if (specs == null) {\n    //       console.error('Invalid response', data); // tslint:disable-line\n    //     } else {\n    //       yield put(new GetTemplateSpecsSucceededAction(specs));\n    //     }\n    //   } else {\n    //     yield put(new GetSpecsFailedAction());\n    //     console.error('master template spec no data', {err}); // tslint:disable-line\n    //   }\n    // } else {\n    //   yield put(new GetSpecsFailedAction());\n    //   console.error('master template spec error'); // tslint:disable-line\n    // }\n  }\n}\nfunction* pureValidateDrawing(\n  action: PureValidateDrawingAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    specId,\n    drawingId,\n    useAccessibilityStandard,\n    products,\n  } = payload;\n\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        drawingId,\n        products,\n        useAccessibilityStandard,\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n\n  if (!data) {\n    yield put(new UpdateRulesFailededAction());\n    console.error('pureValidateDrawing', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err\n  };\n}\n\nfunction* validateDrawing(\n  action: ValidateDrawingAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    specId,\n    useAccessibilityStandard,\n    products,\n    category,\n    seriesIdToOrderBy,\n  } = payload;\n\n  const categoryId = category.get('id');\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        // missingCategoryId is required when editing the first product in the drawing\n        // products need to be [] if its first product in the drawing\n        missingCategoryId: categoryId,\n        products,\n        useAccessibilityStandard,\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const rules: IMap<DrawingRules> = immutableData.getIn(['payload', 'spec']);\n    const missingCategoryFilter = Filter.generateCategoryFilter(\n      category\n    );\n    const missingRules = rules.getIn(['missing'], List());\n    const missingRuleByCategoryId = missingRules.reduce((acc, rule) => {\n      const categoryIdFromRule = rule.getIn(['category', 'id']);\n      return Number(categoryIdFromRule) === Number(categoryId) ? rule : acc;\n    }, Map());\n\n    const missingRuleWithMissingCategoryId = new MissingRule({\n      filters: missingCategoryFilter,\n    }).toImmutable();\n\n    const seriesFilterInput = yield select(makeSelectSeriesFilterInput());\n    const seriesFilters = yield select(selectSeriesFilters());\n    const productCategoryId = yield select(makeSelectProductCategoryId());\n    const attributeFiltersList = yield select(makeSelectAttributeOptions());\n    const loginUserOfficeLocation = yield select(makeSelectLoggedInUserOfficeLocation());\n    const hideDiscontinuedSeries = yield select(makeSelectHideDiscontinuedSeries());\n\n    const seriesFilterInputFilterValue = Map(\n        {\n          'or': [\n            {\n              productNumber: {\n                'like': seriesFilterInput\n              }\n            },\n            {\n              name: {\n                'like': seriesFilterInput\n              }\n            },\n            {\n              description: {\n                'like': seriesFilterInput\n              }\n            }\n          ]\n        },\n    );\n\n    // use the rules from this response if its not empty\n    // else we need to pass a filter with category\n    // with ADA on, it should always return some missing rules that also has categoryId\n    // when its off, if we don't pass in categoryId as part of the filters then the endpoint will just do a general search on all series instead of a search on that one specific series\n    const finalMissingRuleFilter = missingRuleByCategoryId.size !== 0 ? missingRuleByCategoryId : missingRuleWithMissingCategoryId;\n\n    const valueFilters = seriesFilters.reduce((acc, filter, key) => {\n      if (!filter || filter?.size === 0) {\n        return acc;\n      }\n\n      if (key === 'manufacturer') {\n        if (filter.size === 0) {\n          return acc;\n        } else {\n          const manufacturerList = filter.map((manufacturer) => {\n            const manufacturerValue = manufacturer.get('value');\n            return fromJS({\n              brand: {\n                'like': manufacturerValue\n              }\n            });\n          });\n          const manufacturerFilter = fromJS({\n            or: manufacturerList\n          });\n          return acc.push(manufacturerFilter);\n        }\n      }\n\n      const attriValuePath = `attributes.${key}.values.value`;\n      if (!filter || filter?.size === 0) {\n        return acc;\n      }\n\n      // bariatric and child is multi selected\n      if (key === 'use') {\n        // remove bariatric or child filter if category is not compatible with it;\n        // https://atsinc.atlassian.net/browse/SPEC-3437\n        const useList = filter\n          .filter((use) => {\n            if (\n                (use.get('value') === 'child' && CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS.includes(productCategoryId))\n                || (use.get('value') === 'bariatric' && BARIATRIC_COMPATIBLE_CATEGORY_IDS.includes(productCategoryId))\n              ) {\n              return use;\n            }\n          })\n          .map((use) => {\n            const useValue = use.get('value');\n            return fromJS({\n              [attriValuePath]: {\n                'eq': useValue\n              }\n            });\n          });\n\n        if (useList.count()) {\n          const useFilter = fromJS({\n            and: useList\n          });\n          return acc.push(useFilter);\n        }\n      }\n\n      // SHOULD only be radios or a set of range so only 1 value set. If it ever changes, then we can't use first()\n      const value = filter.first().get('value');\n      const isRangeValue = List.isList(value);\n      let lowerRangeValue = isRangeValue && value.get(0);\n      let upperRangeValue = isRangeValue && value.get(1);\n      // if range filter is used in imperial, we need to convert to metric for the filter to work\n      if (isRangeValue) {\n        const attributeFilterInfo = attributeFiltersList.find(attribute => attribute.get('value') === key);\n        const isQuantizedRange = attributeFilterInfo.getIn(['values', 0, 'meta', 'isQuantizedRange']);\n        const metricMin = attributeFilterInfo.getIn(['values', 0, 'value', 0]);\n        const metricMax = attributeFilterInfo.getIn(['values', 0, 'value', 1]);\n        const imperialMin = attributeFilterInfo.getIn(['values', 1, 'value', 0]);\n        const imperialMax = attributeFilterInfo.getIn(['values', 1, 'value', 1]);\n        const isUSLocation = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.usa;\n        const currentFilterValueIsImperial = !isQuantizedRange && isUSLocation;\n        if (currentFilterValueIsImperial) {\n          lowerRangeValue = lowerRangeValue ? ((lowerRangeValue - imperialMin) / (imperialMax - imperialMin) * (metricMax - metricMin)) + metricMin : '';\n          upperRangeValue = upperRangeValue ? ((upperRangeValue - imperialMin) / (imperialMax - imperialMin) * (metricMax - metricMin)) + metricMin : '';\n        }\n      }\n      // filter has a primitive value or range value which need to be build different way\n      const valueFilter = !isRangeValue\n        ? fromJS({\n            [attriValuePath]: {\n              'eq': value\n            }\n          })\n        : fromJS({\n            [attriValuePath]: {\n              'le': upperRangeValue,\n              'ge': lowerRangeValue\n            }\n          });\n      return acc.push(valueFilter);\n    }, List());\n\n    const missingFilter = finalMissingRuleFilter.getIn(['filters', 'and']);\n    const finalFinalFilters = seriesFilterInput\n      ? finalMissingRuleFilter.setIn(['filters', 'and'], missingFilter.push(seriesFilterInputFilterValue))\n      : finalMissingRuleFilter;\n\n    const filterArray = finalFinalFilters.getIn(['filters', 'and']);\n\n    const statusFilter = {\n      'status': {\n        'nin': ['deleted', 'inactive', ...hideDiscontinuedSeries ? ['discontinued'] : []]\n      }\n    };\n\n    const finalFinalFinalFilters = finalFinalFilters.setIn(['filters', 'and'], filterArray.push(...valueFilters, statusFilter));\n\n    if (rules == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SetCategoryIdAction({\n        productCategoryId: categoryId\n      }));\n\n      yield put(new SeriesLoadingAction());\n\n      yield put(new GetSeriesAction({\n        missingRule: finalFinalFinalFilters,\n        seriesIdToOrderBy,\n      }));\n    }\n\n  } else {\n    yield put(new UpdateRulesFailededAction());\n    console.error('ValidateDrawingAction', {err}); // tslint:disable-line\n  }\n}\n\n\nfunction* validateAddProductToDrawing(\n  action: ValidateAddProductToDrawingAction\n) {\n  const {\n    payload,\n  } = action;\n\n  yield put(new UpdateSelfFailedRulesLoadingAction(true));\n\n  const {\n    specId,\n    useAccessibilityStandard,\n    products,\n    category,\n    openAlternativeModal,\n    callback\n  } = payload;\n\n  const categoryId = category.get('id');\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        // self is used to validate if there will be any rule failures before actually adding\n        // the product into the drawing\n        self: true,\n\n        // missingCategoryId is required when editing the first product in the drawing\n        // products need to be [] if its first product in the drawing\n        missingCategoryId: categoryId,\n        products,\n        useAccessibilityStandard,\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n\n  if (data) {\n    yield put(new UpdateSelfFailedRulesLoadingAction(false));\n\n    const immutableData = fromJS(data);\n    const rules: IMap<DrawingRules> = immutableData.getIn(['payload', 'spec']);\n    const failedSelfRules = rules && rules.get('selfFailed');\n\n    // callback passed in is for the actual func to addToDrawing\n    if (failedSelfRules && (failedSelfRules.size > 0)) {\n      yield put(new UpdateSelfFailedRulesAction({rules: failedSelfRules}));\n      yield put(new ToggleOverlayComponentAction({\n        id: RULES_DIALOG_KEY,\n        open: true,\n      }));\n      yield put(new SetOverlayComponentPropsAction({ id: RULES_DIALOG_KEY, props: {\n        callback,\n        openAlternativeModal\n      }}));\n    } else {\n      callback();\n      if (openAlternativeModal) {\n        yield put(new ToggleOverlayComponentAction({\n          id: ALTERNATIVES_MODAL_ID,\n          open: true\n        }));\n      }\n    }\n\n  } else {\n    yield put(new UpdateSelfFailedRulesLoadingAction(false));\n    console.error('ValidateAddProductToDrawingAction', {err}); // tslint:disable-line\n  }\n}\n\nfunction* getSeriesWithCombinedFilters(\n  action: GetSeriesWithCombinedFiltersAction\n) {\n  const updateAccessible = action.payload?.updateAccessible;\n  const products = action.payload?.products;\n  const additionalSingleUsedFilters = action.payload?.additionalSingleUsedFilters;\n\n  const mode = yield select(makeSelectMode());\n\n  let specId;\n  switch (mode) {\n    case Mode.master: {\n      specId = yield select(makeSelectSelectedMasterSpecId());\n      break;\n    }\n    case Mode.masterTemplate: {\n      specId = yield select(makeSelectSelectedTemplateSpecId());\n      break;\n    }\n    case Mode.productCatalogue: {\n      specId = -1;\n      break;\n    }\n    default: {\n      specId = yield select(makeSelectSelectedSpecId());\n    }\n  }\n  const drawingId: number = yield select(makeSelectSelectedDrawingId());\n\n  const selectedCategoryId = yield select(makeSelectProductCategoryId());\n  const selectedCategory = yield select(makeSelectProductCategory());\n  const selectedDrawing = yield select(makeSelectDrawing());\n  const editProductIndex = yield select(makeSelectEditingProductIndex());\n\n  if (specId === -1 || drawingId === -1) {\n    if (mode === Mode.productCatalogue) {\n      yield put(new SearchSeriesWithFilterAction({ additionalSingleUsedFilters }));\n    }\n    return;\n  }\n\n  const _products = selectedDrawing && selectedDrawing.get('products', List()) || List();\n  const useAccessibilityStandard = selectedDrawing && selectedDrawing.get('useAccessibilityStandard', false) || false;\n\n  // if its the first product, pass [], else pass everything except the current edit product\n  const filteredProducts = editProductIndex === 0\n    ? []\n    : editProductIndex !== -1\n      ? _products.delete(editProductIndex)\n      : _products;\n\n  yield put(new UpdatingRulesAction());\n  yield put(new UpdateRulesAction({\n    drawingId,\n    rules: fromJS({\n      scores: {},\n      failed: {},\n      missing: [],\n    }),\n  }));\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        // missingCategoryId is required when editing the first product in the drawing\n        // products need to be [] if its first product in the drawing\n        ...(selectedCategoryId !== -1 && {missingCategoryId: selectedCategoryId}),\n        products: products || filteredProducts,\n        useAccessibilityStandard,\n        ...(updateAccessible && { drawingId })\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const rules: IMap<DrawingRules> = immutableData.getIn(['payload', 'spec']);\n    if (rules == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new UpdateRulesAction({ drawingId, rules }));\n      yield put(new UpdateRulesSucceededAction());\n\n      const missingRules = rules.getIn(['missing'], List());\n\n      // if selectedCategoryId is -1 then we can assume that the user is going through the normal selection process\n      // meaning the next steps that are provided by the rule engine\n      // if selectedCategoryId is not -1 then we can assume that the user clicked on a missing category but it may not be the next one in line\n\n      // example\n      // missing category from rules: basin => basin pedestal => faucet => mixing valve\n      // basin is already added to drawing\n      // selectedCategoryId would be -1 in this case and we would take the next one in the missing list which would be basin pedestal\n      // BUT if the user clicks on faucet, then the selectedCategoryId would be 2 and in this case we need to select the filter from rules that are specific to that categoryId\n\n      // came logic used on searchSeriesWithFilter in product sagas\n      const missingRuleByCategoryId = selectedCategoryId !== -1\n        ? missingRules.reduce((acc, rule) => {\n          const categoryIdFromRule = rule.getIn(['category', 'id']);\n          return Number(categoryIdFromRule) === Number(selectedCategoryId) ? rule : acc;\n        }, Map())\n        : missingRules.get(0);\n\n      const category = missingRuleByCategoryId && missingRuleByCategoryId.get('category', Map());\n      const categoryId = category && category.get('id');\n\n      if (categoryId) {\n        yield put(new SetCategoryIdAction({ productCategoryId: categoryId }));\n      }\n\n      yield put(new SearchSeriesWithFilterAction({ additionalSingleUsedFilters }));\n\n      // if (firstMissingRule != null) {\n      //   yield put(new SelectNewCategoryAction(firstMissingRule));\n      // }\n    }\n  } else {\n    yield put(new UpdateRulesFailededAction());\n    console.error('no created GetSeriesWithCombinedFiltersAction', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err\n  };\n}\n\n\n// @@TODO we need to break this up... put all this logic somewhere else e.g. SelectProjectAndFetchSpecs\nfunction* projectSelected(\n  action: SelectProjectAction,\n) {\n  const {\n    projectId,\n    specId,\n    setSelectDrawingId,\n    onSuccess,\n  } = action.payload;\n  const project: IMap<Project> = yield select(makeSelectProject({projectId}));\n  const selectedSpecId = yield select(makeSelectSelectedSpecId());\n  // only autoload spec if none selected\n  if (\n    project != null && (\n      (specId != null)\n      || (selectedSpecId === -1)\n      || (project.get('specs').findIndex((projectSpecId) => projectSpecId.get('id') === selectedSpecId) === -1)\n    )\n  ) {\n    const projectSpecs = project.get('specs');\n    const firstSpec = projectSpecs.get(0);\n    const firstSpecId = specId != null ? specId : firstSpec != null && firstSpec.get('id');\n    yield put(new SetModeAction(project.get('status') === 'test' ? Mode.testProject : Mode.project));\n\n    if (firstSpecId != null) {\n      const getSpecActions = projectSpecs.map((projectSpecIdObject: IMap<HasId>) => {\n        const projectSpecId = projectSpecIdObject.get('id');\n        if (projectSpecId === firstSpecId) {\n          return put(new GetSpecsTakeEveryAction({\n            specId: Number(projectSpecId),\n            onSuccess: onSuccess ? () => {\n              onSuccess();\n            } : undefined\n          }));\n        } else {\n          return put(new GetSpecsTakeEveryAction({\n            specId: Number(projectSpecId),\n          }));\n        }\n      });\n      yield all(getSpecActions.valueSeq().toArray());\n      yield put(new SelectSpecAction(firstSpecId, setSelectDrawingId));\n    } else {\n      console.debug('no first spec found'); // tslint:disable-line\n    }\n  }\n}\n\nexport function* updateDrawing(\n  action: UpdateDrawingAction\n) {\n  yield put(new SetIsUpdatingDrawingAction(true));\n\n  yield call(taggedDelay, 0);\n  yield call(taggedDelay, 50);\n  const drawingId: number = action.payload.drawingId;\n  const drawing: IMap<Drawing> = action.payload.drawing;\n  const openSnackbar = action.payload.openSnackbar || false;\n  const {\n    getSeries = true,\n    resetEditProductIndex,\n    editProductIndex,\n    alternativeProducts,\n    updateAccessible,\n    clearFilters,\n    useSpecAssist = false,\n  } = action.payload;\n  const mode = yield select(makeSelectMode());\n  let spec;\n  switch (mode) {\n    case Mode.master: {\n      spec = yield select(makeSelectMasterProjectspec());\n      break;\n    }\n    case Mode.masterTemplate: {\n      spec = yield select(makeSelectTemplateProjectSpec());\n      break;\n    }\n    default: {\n      spec = yield select(makeSelectSpec());\n    }\n  }\n\n  const baseUseSpecAssist = yield select(makeSelectUseSpecAssist());\n  const finalEnableSpecAssist = useSpecAssist && baseUseSpecAssist;\n\n  const location = yield select(makeSelectLocationForSeriesSearchFilter());\n\n  if (spec == null || drawing == null) {\n    return new Error(`spec or drawing is null ${spec} --- ${drawing}`);\n  }\n  const specId = spec.get('id');\n  // const drawingId = drawing.get('id');\n  const endpoint = {\n    [Mode.master]: 'updateMasterDrawing',\n    [Mode.masterTemplate]: 'updateMasterTemplateDrawing',\n    [Mode.project]: 'updateDrawing',\n    [Mode.testProject]: 'updateDrawing',\n    [Mode.spec]: 'updateDrawing',\n    [Mode.productCatalogue]: 'updateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      specId,\n      drawingId,\n      {\n        service: 'spec',\n        endpoint: endpoint[mode],\n        body: {\n          ...drawing.toJS(),\n          location\n        },\n        queries: {\n          useSpecAssist: finalEnableSpecAssist\n        }\n      },\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const _drawings: List<IMap<Drawing>> = immutableData.getIn(['payload', 'spec', 'drawing']);\n    const products = _drawings?.getIn([0, 'products']);\n\n    yield put(new SetIsUpdatingDrawingAction(false));\n\n    // if adding the same product in the same index through edit, then copy over alternative products\n    // from the old product, new product will have new specProductId\n    if (alternativeProducts?.count()) {\n      const cleanAlternativeProducts = alternativeProducts.map((alternativeProduct, index) => {\n        return alternativeProduct.get('productId')\n          ? Map({ productId: alternativeProduct.get('productId') })\n          : Map({\n              manufacturerId: alternativeProduct.get('manufacturerId'),\n              note: alternativeProduct.get('note')\n            });\n      });\n      yield call(saveAlternativeProducts, new SaveAlternativeProductsAction({\n        specId,\n        drawingId,\n        productId: _drawings.getIn([0, 'products', editProductIndex, 'specProductId']),\n        alternativeProducts: cleanAlternativeProducts,\n        closeModalAfter: false,\n        displaySnackbar: false,\n      }));\n\n      // hacky flow: setting load early to prevent flashing in alternative modal when using this flow\n      // yield put(new UpdatingRulesAction());\n    }\n\n    // validates drawing against the rule engine with updated changes\n    // GetDrawingRulesAndGetSpecAction also fetchs the new spec after validate call\n    // yield put(new GetDrawingRulesAndGetSpecAction(specAndDrawingIds));\n    if (openSnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n        severity: 'success',\n        backgroundColor: 'black',\n      }));\n    }\n    if (getSeries) {\n      yield put(new SeriesLoadingAction());\n    }\n\n    if (resetEditProductIndex) {\n      yield put(new ResetEditingProductIndexAction());\n    }\n\n    if (!getSeries && updateAccessible) {\n      yield call(pureValidateDrawing, new PureValidateDrawingAction({\n        specId,\n        drawingId,\n        products: products || List(),\n        useAccessibilityStandard: _drawings.getIn([0, 'useAccessibilityStandard']) || false\n      }));\n    }\n\n    if (clearFilters) {\n      // clear the filters once user adds product\n      // clear filter except `use` key (bariatric & child)\n      yield put(new ProductFilterClearAction({clearUseFilter: false}));\n      yield put(new SeriesFilterClearAction({clearUseFilter: false}));\n    }\n\n    if (getSeries) {\n      yield call(getSeriesWithCombinedFilters, new GetSeriesWithCombinedFiltersAction({ updateAccessible, products }));\n    }\n\n    // gets master or normal spec\n    yield call(getSpecs, new GetSpecsAction({specId}));\n  } else {\n    console.error('updateDrawing error', {err}); // tslint:disable-line\n  }\n\n  yield put(new SetIsUpdatingDrawingAction(false));\n\n  action.payload.onFinally?.();\n}\n\nfunction* updateSpec(\n  action: UpdateSpecAction\n) {\n  yield call(taggedDelay, 0);\n  const spec: IMap<Partial<Spec>> = action.payload.spec;\n  const specId: number = action.payload.specId;\n  const openSnackbar = action.payload.openSnackbar || false;\n  const onSuccess = action.payload.onSuccess;\n  const onFail = action.payload.onFail;\n  yield call(taggedDelay, 500);\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      specId,\n      {\n        service: 'spec',\n        endpoint: 'updateSpec',\n        body: {\n          ...spec.toJS(),\n        }\n      },\n    ]\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const updatedSpecs = immuData.getIn(['payload', 'spec', 'spec']);\n    if (updatedSpecs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      if (onFail) {\n        onFail();\n      }\n    } else {\n      yield put(new SelectSpecAction(specId));\n      yield put(new GetSpecsSucceededAction(updatedSpecs));\n      if (onSuccess) {\n        onSuccess();\n      }\n      if (openSnackbar) {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:specDrawing.savedSuccessfullyMessage'),\n          severity: 'success',\n          backgroundColor: 'black',\n        }));\n      }\n    }\n  } else {\n    console.error('no updateSpec api', {err}); // tslint:disable-line\n    if (onFail) {\n      onFail();\n    }\n  }\n}\n\nfunction* updateMasterSpec(\n  action: UpdateMasterSpecAction\n) {\n\n  const {\n    body,\n    specId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      specId,\n      {\n        service: 'spec',\n        endpoint: 'updateMasterSpec',\n        body\n      },\n    ]\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const updatedSpecs = immuData.getIn(['payload', 'spec', 'spec']);\n  } else {\n    console.error('update master spec error', {err}); // tslint:disable-line\n  }\n}\nfunction* updateTemplateSpec(\n    action: UpdateTemplateSpecAction\n) {\n\n  const {\n    body,\n    specId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      specId,\n      {\n        service: 'spec',\n        endpoint: 'updateMasterTemplateSpec',\n        body\n      },\n    ]\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const updatedSpecs = immuData.getIn(['payload', 'spec', 'spec']);\n  } else {\n    console.error('update template spec error', {err}); // tslint:disable-line\n  }\n}\nfunction* getPrintFormats(\n) {\n  yield call(taggedDelay, 100);\n  const {\n    data,\n    err,\n  }: {\n    data: ISpecResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getPrintFormats',\n    },\n  }));\n  if (data) {\n    console.error('getPRintFormatsData', { // tslint:disable-line\n      data,\n    });\n    const immutableResponse = fromJS(data);\n    const pageData: Map<string, IMap<PageData>> = immutableResponse.getIn(['payload', 'spec', 'printformats']);\n    if (pageData == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetPrintFormatsSucceededAction(pageData));\n    }\n\n  } else {\n    yield put(new CreateSpecFailedAction({err}));\n  }\n}\n\nfunction* createSpec(\n  action: CreateSpecAction\n) {\n  // console.error('createSpec', { // tslint:disable-line\n  //   action,\n  // });\n\n  yield call(taggedDelay, 100);\n  const {\n    payload,\n  } = action;\n\n  const {\n    spec: specCreateParams,\n    projectId = -1,\n    isTestSpec = false,\n    onSuccess,\n  } = payload;\n\n  const specName = specCreateParams.get('name') ? specCreateParams.get('name') : i18next.t('translations.ProjectDownload.untitledSpec');\n\n  const {\n    data: specCreateData,\n    err: specCreateError,\n  }: {\n    data: ISpecResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'createSpec',\n      body: {\n        ...specCreateParams.toJS(),\n        name: specName,\n        ...(isTestSpec\n          ? { status: 'test' }\n          : {}\n        ),\n        ...(projectId !== -1 ? { projectId } : {}) // new spec will have last order in project\n      },\n    },\n  }));\n  if (specCreateData) {\n    const immutableSpecCreateData = fromJS(specCreateData);\n    const spec: List<IMap<Spec>> = immutableSpecCreateData.getIn(['payload', 'spec', 'spec']);\n    if (spec == null) {\n      console.error('Invalid response', specCreateData); // tslint:disable-line\n    } else {\n      yield put(new GetSpecsSucceededAction(spec));\n      const specId = spec.getIn([0, 'id']);\n      if (projectId !== -1) {\n        yield call(linkSpecWithId, new LinkSpecWithIdAction({projectId, specId}));\n      }\n      if (onSuccess) {\n        onSuccess?.(specId, spec.getIn([0, 'name']));\n      } else {\n        yield put(new SelectProjectAction({ projectId, specId }));\n        yield put(new SelectSpecAction(specId));\n        yield put(new CreateSpecSucceededAction());\n      }\n\n      const pathname = yield select(makeSelectLocationPathname());\n      if (!(pathname.includes('projectDetail') || pathname.includes('masterDetail') || pathname.includes('templateDetail'))) {\n        yield put(new SetModeAction(Mode.spec));\n      }\n    }\n  } else {\n    yield put(new CreateSpecFailedAction({err: specCreateError}));\n  }\n  if (projectId !== -1) {\n    yield put(new SetProjectIdForCreatingSpec({ projectId: -1 }));\n  }\n  if (isTestSpec) {\n    yield put(new SetTestSpecModeAction(isTestSpec));\n  }\n}\n\nfunction* createMasterSpec(\n  action: CreateMasterSpecAction\n) {\n\n  const {\n    payload: {\n      projectId,\n      spec = Map(),\n      onSuccess\n    }\n  } = action;\n\n  const {\n    data,\n    err,\n  }: {\n    data: ISpecResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      // projectId,\n      {\n        service: 'spec',\n        endpoint: 'createMasterSpec',\n        body: {\n          ...spec.toJS(),\n          projectId\n        },\n      }],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newSpec: IMap<Spec> = immutableData.getIn(['payload', 'spec', 'spec', 0]);\n\n    if (newSpec == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const specId = newSpec.get('id');\n      yield put(new GetMasterProjectByIdAction({id: projectId}));\n      yield call(selectMasterSpec, new SelectMasterSpecAction(specId));\n      if (onSuccess) {\n        onSuccess(specId);\n      }\n    }\n  } else {\n    console.error('Error', err); // tslint:disable-line\n  }\n}\n\nfunction* createMasterSpecAndRedirect(\n  action: CreateMasterSpecAndRedirectAction\n) {\n\n  const {\n    payload: {\n      projectId,\n      spec = Map()\n    }\n  } = action;\n\n  const {\n    data,\n    err,\n  }: {\n    data: ISpecResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      // projectId,\n      {\n        service: 'spec',\n        endpoint: 'createMasterSpec',\n        body: {\n          ...spec.toJS(),\n          projectId\n        },\n      }],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newSpec: IMap<Spec> = immutableData.getIn(['payload', 'spec', 'spec', 0]);\n\n    if (newSpec == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const specId = newSpec.get('id');\n      yield put(new GetMasterProjectByIdAction({id: projectId}));\n      yield call(selectMasterSpec, new SelectMasterSpecAction(specId));\n      yield put(push(PRODUCT_CATEGORY_PATH + '/' + specId));\n    }\n  } else {\n    console.error('Error', err); // tslint:disable-line\n  }\n}\nfunction* createTemplateSpecAndRedirect(\n    action: CreateTemplateSpecAndRedirectAction\n) {\n\n  const {\n    payload: {\n      projectId,\n      spec = Map()\n    }\n  } = action;\n\n  const {\n    data,\n    err,\n  }: {\n    data: ISpecResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      // projectId,\n      {\n        service: 'spec',\n        endpoint: 'createMasterTemplateSpec',\n        body: {\n          ...spec.toJS(),\n          projectId\n        },\n      }],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newSpec: IMap<Spec> = immutableData.getIn(['payload', 'spec', 'spec', 0]);\n\n    if (newSpec == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const specId = newSpec.get('id');\n      yield put(new GetTemplateProjectByIdAction({id: projectId}));\n      yield call(selectTemplateSpec, new SelectTemplateSpecAction(specId));\n      yield put(push(PRODUCT_CATEGORY_PATH + '/' + specId));\n    }\n  } else {\n    console.error('Error', err); // tslint:disable-line\n  }\n}\n\nfunction* reorderSpecsAndGetProject(\n  action: ReorderSpecsAndGetProjectAction,\n) {\n  const {\n    projectId,\n    specsOrder\n   } = action.payload;\n\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'reorderMasterSpec',\n    [Mode.masterTemplate]: 'reorderMasterTemplateSpec',\n    [Mode.project]: 'reorderSpec',\n    [Mode.testProject]: 'reorderSpec',\n  };\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        specIds: specsOrder,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const reorderSuccess = immutableData.getIn(['payload', 'spec', 'reorder']);\n    if (reorderSuccess) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:ProjectDetail.reorderProductGroupsSuccess'),\n        severity: 'success',\n        backgroundColor: 'black'\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:ProjectDetail.reorderProductGroupsFailed'),\n        severity: 'error'\n      }));\n    }\n    if (reorderSuccess == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('Error reorder specs', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:ProjectDetail.reorderProductGroupsFailed'),\n      severity: 'error'\n    }));\n  }\n  switch (mode) {\n    case Mode.master: {\n      yield put(new GetMasterProjectByIdAction({id: projectId}));\n      break;\n    }\n    case Mode.masterTemplate: {\n      yield put(new GetTemplateProjectByIdAction({id: projectId}));\n      break;\n    }\n    case Mode.project:\n    case Mode.testProject:  {\n      yield put(new GetProjectsAction({ projectId }));\n      break;\n    }\n    default: {\n      yield put(new GetProjectsAction({ projectId }));\n    }\n  }\n}\n\nfunction* deleteSpec(\n  action: DeleteSpecAction,\n) {\n  const {\n    specId,\n    specName,\n    newSelectedSpecId = -1,\n    redirectPath\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteSpec',\n      body: {\n        specId,\n      },\n    }\n  }));\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.deleteSpec, {\n    specId,\n    specName,\n    ...amplitudeData,\n  });\n  if (data) {\n    yield put(new SetSelectedSpecIdAction(newSelectedSpecId));\n    if (redirectPath) {\n      yield put(push(redirectPath));\n    }\n  } else {\n    console.error('err in delete spec', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteSpecAndGetProject(\n  action: DeleteSpecAndGetProjectAction,\n) {\n  const {\n    specId,\n    specName,\n    projectId,\n  } = action.payload;\n\n  yield call(deleteSpec, new DeleteSpecAction({ specId, specName }));\n  yield call(getProjects, new GetProjectsAction({ projectId }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nfunction* deleteSpecAndGetProjectById(\n  action: DeleteSpecAndGetProjectByIdAction,\n) {\n  const {\n    specId,\n    specName,\n    newSelectedSpecId,\n    projectId\n  } = action.payload;\n\n\n  const {\n    data,\n    err,\n  } = yield call(deleteSpec, new DeleteSpecAction({ specId, specName, newSelectedSpecId }));\n  if (data) {\n    yield put(new DeleteSpecFromProjectSpecDetailConfigAction({ specId }));\n    yield put(new GetProjectsAction({ projectId }));\n  }\n}\n\nfunction* deleteMasterSpec(\n  action: DeleteMasterSpecAction,\n) {\n  const {\n    specId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteMasterSpec',\n      params: {\n        specId,\n      },\n    }\n  }));\n\n  if (data) {\n    yield put(new SetSelectedMasterSpecIdAction(-1));\n  } else {\n    console.error('err in delete master spec', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteTemplateSpec(\n    action: DeleteTemplateSpecAction,\n) {\n  const {\n    specId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteMasterTemplateSpec',\n      params: {\n        masterTemplateSpecId: specId,\n      },\n    }\n  }));\n\n  if (data) {\n    yield put(new SetSelectedTemplateSpecIdAction(-1));\n  } else {\n    console.error('err in delete template spec', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* getDrawingRules(\n  action: GetDrawingRulesAction\n) {\n  const {\n    specId,\n    drawingId,\n  } = action.payload;\n  if (specId === -1 || drawingId === -1) {\n    return;\n  }\n  const selectedCategoryId = yield select(makeSelectProductCategoryId());\n  const selectedDrawing = yield select(makeSelectDrawing());\n\n  const products = selectedDrawing && selectedDrawing.get('products') || List();\n  const useAccessibilityStandard = selectedDrawing && selectedDrawing.get('useAccessibilityStandard') || false;\n\n  yield put(new UpdatingRulesAction());\n  yield put(new UpdateRulesAction({\n    drawingId,\n    rules: fromJS({\n      scores: {},\n      failed: {},\n      missing: [],\n    }),\n  }));\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        // missingCategoryId is required when editing the first product in the drawing\n        // products need to be [] if its first product in the drawing\n        ...(selectedCategoryId !== -1 && {missingCategoryId: selectedCategoryId}),\n        products,\n        useAccessibilityStandard,\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const rules: IMap<DrawingRules> = immutableData.getIn(['payload', 'spec']);\n    if (rules == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new UpdateRulesAction({ drawingId, rules }));\n      yield put(new UpdateRulesSucceededAction());\n      const seriesId = yield select(makeSelectSelectedSeriesId());\n      const firstMissingRule = rules.getIn(['missing', 0]);\n      const skipRules = Boolean(seriesId) && seriesId !== -1;\n      const missingRule = skipRules\n        ? firstMissingRule?.updateIn(['filters', 'and'], x => x.push(fromJS({id: { eq: seriesId }})))\n        : firstMissingRule;\n\n      if (firstMissingRule != null) {\n        yield put(new SelectNewCategoryAction({\n          missingRule,\n          skipRules\n        }));\n      }\n    }\n\n  } else {\n    yield put(new UpdateRulesFailededAction());\n    console.error('no created getDrawingRules', {err}); // tslint:disable-line\n  }\n}\n\nfunction* getDrawingRulesAndGetSpec(\n  action: GetDrawingRulesAndGetSpecAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    specId,\n    drawingId,\n  } = payload;\n\n  const specAndDrawingIds = {\n    specId,\n    drawingId,\n  };\n\n  // used to call validate. main purpose is to use validate to check the rules\n  // BE on validate will check if drawing is 'ADA' certifed. if it is, then BE will update key in drawing obj\n  // We need to get new Spec that will contain updated drawing\n  yield call(getDrawingRules, new GetDrawingRulesAction(specAndDrawingIds));\n\n  // yield call(getSeriesWithCombinedFilters, new GetSeriesWithCombinedFiltersAction());\n  yield call(getSpecs, new GetSpecsAction({specId}));\n}\n\nfunction* createDrawingThenSelectAndRedirect(\n  {\n    payload: {\n      specId,\n      redirect,\n    }\n  }: CreateDrawingThenSelectAndRedirectAction\n) {\n  const task = yield fork(createDrawing, new CreateDrawingAction({ specId }) );\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield join(task);\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firstDrawing = immutableData.getIn(['payload', 'spec', 'drawing', 0]);\n    yield put(new SelectDrawingAction(firstDrawing.get('id')));\n    yield putResolve(new GetSpecsAction({specId}));\n    if (redirect != null) {\n      yield put(push(redirect));\n    }\n  } else {\n    console.error('Could not create a new drawing - redirect cancelled', {err}); // tslint:disable-line\n  }\n}\n\nfunction* duplicateDrawingWithinSpec(\n  action: DuplicateDrawingWithinSpecAction\n) {\n  const originalDrawingId = action.payload;\n  const mode = yield select(makeSelectMode());\n  let spec;\n  switch (mode) {\n    case Mode.master: {\n      spec = yield select(makeSelectMasterProjectspec());\n      break;\n    }\n    case Mode.masterTemplate: {\n      spec = yield select(makeSelectTemplateProjectSpec());\n      break;\n    }\n    default: {\n      spec = yield select(makeSelectSpec());\n    }\n  }\n  const specId = spec.get('id');\n  const drawings = spec.get('drawings');\n  const originalDrawing = drawings.filter((specDrawing: IMap<Drawing>) => specDrawing.get('id') === originalDrawingId).get(0);\n  if (originalDrawing != null) {\n    const task = yield fork(createDrawing, new CreateDrawingAction({ specId }) );\n\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield join(task);\n    if (data) {\n      const immutableData = fromJS(data);\n      const immuFirstDrawing = immutableData.getIn(['payload', 'spec', 'drawing', 0]);\n      if (immuFirstDrawing == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        const newDrawingId = immuFirstDrawing.get('id');\n        const duplicatedDrawing = originalDrawing.set('id', immuFirstDrawing.get('id'));\n        yield call(updateDrawing, new UpdateDrawingAction({\n          drawingId: newDrawingId,\n          drawing: duplicatedDrawing,\n          getSeries: false,\n        }));\n        yield put(new ToggleOverlayComponentAction({\n          id: LOADING_MODAL_ID,\n          open: false\n        }));\n        yield put(new SetOverlayComponentPropsAction({\n          id: LOADING_MODAL_ID,\n          props: {}\n        }));\n      }\n    } else {\n      console.error('duplicateDrawingWithinSpec error', {err}); // tslint:disable-line\n    }\n  } else {\n    console.error('no drawing', { // tslint:disable-line\n      action,\n      spec,\n    });\n  }\n}\n\nfunction* deleteDrawing(\n  action: DeleteDrawingAction,\n) {\n  const {\n    drawingId,\n    withLoad = true,\n    onDeleteSuccess,\n  } = action.payload;\n\n  const specId = yield select(makeSelectSelectedSpecId());\n\n  yield call(taggedDelay, 50);\n  if (specId == null || drawingId == null || specId === -1 || drawingId === -1) {\n    return new Error(`spec or drawing is null ${specId} --- ${drawingId}`);\n  }\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      specId,\n      drawingId,\n      {\n        service: 'spec',\n        endpoint: 'deleteDrawing',\n      },\n    ]\n  }));\n  if (data) {\n    if (onDeleteSuccess) {\n      onDeleteSuccess();\n    }\n    if (withLoad) {\n      yield put(new GetSpecsAction({specId}));\n    } else {\n      const {\n        data: data2,\n        err: err2\n      } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'spec',\n          endpoint: 'getSpec',\n          body: {\n            specId\n          }\n        }\n      }));\n      if (data2) {\n        const immuData = fromJS(data2);\n        const specs = immuData.getIn(['payload', 'spec', 'spec']);\n        if (specs == null) {\n          console.error('Invalid response', data); // tslint:disable-line\n        } else {\n          yield put(new GetSpecsSucceededAction(specs));\n        }\n      } else {\n        console.error('get spec from link generic product to product failed', {err2}); // tslint:disable-line\n      }\n    }\n  } else {\n    console.error('deleteDrawing error', {err}); // tslint:disable-line\n  }\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nexport function* getSpecs(\n  action: GetSpecsAction,\n) {\n  const {\n    specId,\n    onSuccess,\n    onFailed\n  } = action.payload;\n  const mode = yield select(makeSelectMode());\n  // tslint:disable-next-line:no-shadowed-variable\n  const getMasterSpec = [atsApiCallWaitingAction, 'getMasterSpec'];\n  const getMasterTemplateSpec = [apiCallWaitingAction, 'getMasterTemplateSpec'];\n  const getSpec = [apiCallWaitingAction, 'getSpec'];\n  const endpoint = {\n    [Mode.master]: getMasterSpec,\n    [Mode.masterTemplate]: getMasterTemplateSpec,\n    [Mode.project]: getSpec,\n    [Mode.testProject]: getSpec,\n    [Mode.spec]: getSpec,\n    [Mode.productCatalogue]: getSpec,\n  };\n\n  const body = mode === Mode.masterTemplate ? { masterTemplateSpecId: specId } : { specId };\n  const identityObject = yield select(makeSelectIdentityObject());\n  const isGuestUser = !identityObject;\n  const session = yield select(makeSelectSession());\n  if (specId != null) {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(endpoint[mode][0], new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: endpoint[mode][1],\n        body,\n        ...(isGuestUser && session) ? { sessionId: session.get('session') } : {}\n      }\n    }));\n    if (data) {\n      const immuData = fromJS(data);\n      const specs = immuData.getIn(['payload', 'spec', 'spec']);\n      if (specs == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        switch (mode) {\n          case Mode.master: {\n            yield put(new GetMasterSpecsSucceededAction(specs));\n            break;\n          }\n          case Mode.masterTemplate: {\n            yield put(new GetTemplateSpecsSucceededAction(specs));\n            break;\n          }\n          default: {\n            yield put(new GetSpecsSucceededAction(specs));\n          }\n        }\n        onSuccess?.(specs);\n      }\n    } else {\n      yield put(new GetSpecsFailedAction());\n      onFailed?.(err);\n      console.error('spec no data', {err}); // tslint:disable-line\n    }\n  } else {\n    console.error('specId null', specId); // tslint:disable-line\n  }\n}\n\nfunction* selectSpec(\n  action: SelectSpecAction,\n) {\n  const selectedDrawingId: number = yield select(makeSelectSelectedDrawingId());\n  const setSelectDrawingId = action.setSelectDrawingId ?? true;\n  const specId: number = action.payload;\n  const spec: IMap<Spec> = yield select(makeSelectSpec({specId}));\n  if (\n    setSelectDrawingId && (\n      selectedDrawingId == null ||\n      (\n        spec &&\n        spec\n        .get('drawings', List())\n        .filter((drawing: IMap<Drawing>) => drawing.get('id') === selectedDrawingId).count() === 0\n      )\n    )\n  ) {\n    const firstDrawingId = spec.getIn(['drawings', 0, 'id']);\n    if (firstDrawingId != null) {\n      yield put(new SelectDrawingAction(firstDrawingId));\n    }\n  }\n}\n\nfunction* SelectDrawing(\n  action: SelectDrawingAction,\n) {\n  const drawingId = action.payload;\n  const mode = yield select(makeSelectMode());\n  let specId;\n  switch (mode) {\n    case Mode.master: {\n      specId = yield select(makeSelectSelectedMasterSpecId());\n      break;\n    }\n    case Mode.masterTemplate: {\n      specId = yield select(makeSelectSelectedTemplateSpecId());\n      break;\n    }\n    default: {\n      specId = yield select(makeSelectSelectedSpecId());\n    }\n  }\n\n  if (drawingId === -1 || specId === -1) {\n    return;\n  }\n  yield put(new GetDrawingRulesAction({\n    specId,\n    drawingId,\n  }));\n}\n\nexport function* createDrawing(\n  {\n    payload: {\n      specId: _specId\n    },\n  }: CreateDrawingAction\n) {\n\n  const mode = yield select(makeSelectMode());\n  const endpoint = {\n    [Mode.master]: 'createMasterDrawing',\n    [Mode.masterTemplate]: 'createMasterTemplateDrawing',\n    [Mode.project]: 'createDrawing',\n    [Mode.testProject]: 'createDrawing',\n    [Mode.spec]: 'createDrawing',\n    [Mode.productCatalogue]: 'createDrawing',\n  };\n  let selectedSpecId;\n  switch (mode) {\n    case Mode.master: {\n      selectedSpecId = yield select(makeSelectSelectedMasterSpecId());\n      break;\n    }\n    case Mode.masterTemplate: {\n      selectedSpecId = yield select(makeSelectSelectedTemplateSpecId());\n      break;\n    }\n    default: {\n      selectedSpecId = yield select(makeSelectSelectedSpecId());\n    }\n  }\n  const specId: number = _specId != null\n    ? _specId\n    : selectedSpecId;\n\n  return yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: endpoint[mode],\n      body: {\n        __PLACEHOLDER__: '__PLACEHOLDER__'\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n}\n\nexport function* selectDrawingAndRedirect(\n  action: SelectDrawingAndRedirectAction\n) {\n  const {\n    drawingId,\n    path,\n  } = action.payload;\n\n  yield putResolve(new SelectDrawingWithoutRulesAction(drawingId));\n  yield put(push(path));\n}\n\nconst SELECT_CATEGORY_ERROR = 'SELECT_CATEGORY_ERROR';\n\nfunction* selectCategory(\n  action: SelectCategoryAction,\n) {\n  // get categoryId from action\n  const {\n    payload\n  } = action;\n\n  const {\n    productCategoryId: categoryId,\n    selectDrawing,\n  } = payload;\n\n  const mode = yield select(makeSelectMode());\n\n  if (categoryId === -1) {\n    return;\n  }\n  // make api call for cateogry list (if it doesn't exist if you want to be more efficient)\n  const selectedCategoryNameList = yield select(makeSelectProductTypeIdToProductTypeMap());\n\n  // if (categoryId !== -1) {\n  //   const selectedCategoryName: string = selectedCategoryNameList.getIn([categoryId, 'name']);\n  //   yield put (new GetAttributeOrderAction({categoryId, categoryName: selectedCategoryName}));\n  // }\n\n  let specId;\n  let spec;\n  switch (mode) {\n    case Mode.master: {\n      specId = yield select(makeSelectSelectedMasterSpecId());\n      spec = yield select(makeSelectMasterProjectspec());\n      break;\n    }\n    case Mode.masterTemplate: {\n      specId = yield select(makeSelectSelectedTemplateSpecId());\n      spec = yield select(makeSelectTemplateProjectSpec());\n      break;\n    }\n    case Mode.productCatalogue: {\n      specId = -1;\n      spec = null;\n      break;\n    }\n    default: {\n      specId = yield select(makeSelectSelectedSpecId());\n      spec = yield select(makeSelectSpec());\n    }\n  }\n  const drawingId: number = yield select(makeSelectSelectedDrawingId());\n\n  if (specId !== -1) {\n    yield put(new ResetErrorAction({\n      index: undefined,\n      id: SELECT_CATEGORY_ERROR,\n    }));\n\n    if (\n      spec == null ||\n      drawingId === -1 ||\n      spec.get('drawings').findIndex((specDrawing: IMap<Drawing>) => {\n        return specDrawing.get('id') === drawingId;\n      }) === -1\n    ) {\n      // toggling updatingRules to keep loading state between seriesLoading in sync in Expansion component\n      // to prevent rendering of loading after content has been mounted already, refer to SPEC-2839\n      yield put(new UpdatingRulesAction());\n\n      const task = yield fork(createDrawing, new CreateDrawingAction({ specId }) );\n      const {\n        data,\n        err,\n      }: {\n        data: any,\n        err: Error\n      } = yield join(task);\n\n      if (data) {\n        const immutableData = fromJS(data);\n        const firstDrawing = immutableData.getIn(['payload', 'spec', 'drawing', 0]);\n\n        // selects drawing and gets the rules from validate\n        yield put(new SelectDrawingAction(firstDrawing.get('id')));\n        yield put(new GetSpecsAction({specId}));\n\n        // set new drawing id for auto label drawing when user click complete or back to\n        yield put(new SetNewDrawingIdAction(firstDrawing.get('id')));\n      } else {\n        console.error('selectCategory - no created new drawing', {err}); // tslint:disable-line\n        yield put(new UpdateRulesFailededAction());\n      }\n    } else if (drawingId !== -1 && selectDrawing) {\n      yield put(new SelectDrawingAction(drawingId));\n    }\n  } else {\n    console.error('No spec selected1'); // tslint:disable-line\n    yield put(new AddErrorAction({\n      message: 'No spec selected',\n      id: SELECT_CATEGORY_ERROR,\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: undefined,\n      }\n    }));\n  }\n  yield put(new SelectCategoryFinishedAction());\n}\n\n\nfunction* selectCategoryAndGetSpecs(\n  action: SelectCategoryAndGetSpecsAction,\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    productCategory,\n  } = payload;\n\n  // get categoryId from action\n  const categoryId: number = productCategory.get('id');\n  if (categoryId === -1) {\n    return;\n  }\n  // make api call for cateogry list (if it doesn't exist if you want to be more efficient)\n  const selectedCategoryNameList = yield select(makeSelectProductTypeIdToProductTypeMap());\n\n  // if (categoryId !== -1) {\n  //   const selectedCategoryName: string = selectedCategoryNameList.getIn([categoryId, 'name']);\n  //   yield put(new GetAttributeOrderAction({categoryId, categoryName: selectedCategoryName}));\n  // }\n\n  const mode = yield select(makeSelectMode());\n  let specId;\n  let spec;\n  switch (mode) {\n    case Mode.master: {\n      specId = yield select(makeSelectSelectedMasterSpecId());\n      spec = yield select(makeSelectMasterProjectspec());\n      break;\n    }\n    case Mode.masterTemplate: {\n      specId = yield select(makeSelectSelectedTemplateSpecId());\n      spec = yield select(makeSelectTemplateProjectSpec());\n      break;\n    }\n    default: {\n      specId = yield select(makeSelectSelectedSpecId());\n      spec = yield select(makeSelectSpec());\n    }\n  }\n  const drawingId: number = yield select(makeSelectSelectedDrawingId());\n\n  if (specId !== -1) {\n    yield put(new ResetErrorAction({\n      index: undefined,\n      id: SELECT_CATEGORY_ERROR,\n    }));\n\n    // create new drawing and get specs\n    if (\n      spec == null ||\n      drawingId === -1 ||\n      spec.get('drawings').findIndex((specDrawing: IMap<Drawing>) => {\n        return specDrawing.get('id') === drawingId;\n      }) === -1\n    ) {\n      const task = yield fork(createDrawing, new CreateDrawingAction({ specId }) );\n      const {\n        data,\n        err,\n      }: {\n        data: any,\n        err: Error\n      } = yield join(task);\n\n      if (data) {\n        const immutableData = fromJS(data);\n        const firstDrawing = immutableData.getIn(['payload', 'spec', 'drawing', 0]);\n\n        yield put(new GetSpecsAction({specId}));\n        yield put(new SelectDrawingWithoutRulesAction(firstDrawing.get('id')));\n        yield put(routerActions.push(`${PRODUCT_SELECTION_PATH}`));\n\n        yield put(new SetCategoryIdAction({\n          productCategoryId: categoryId\n        }));\n\n        yield put(new SeriesLoadingAction());\n        yield put(new GetSeriesWithCombinedFiltersAction());\n\n        // set new drawing id for auto label drawing when user click complete or back to\n        yield put(new SetNewDrawingIdAction(firstDrawing.get('id')));\n      } else {\n        console.error('selectCategoryAndGetSpecs - no created new drawing', {err}); // tslint:disable-line\n      }\n    } else {\n\n      // if there's an existing drawing, just use the current drawingId and get specs\n      yield put(new SelectDrawingWithoutRulesAction(drawingId));\n      yield put(routerActions.push(`${PRODUCT_SELECTION_PATH}`));\n\n      yield put(new SetCategoryIdAction({\n        productCategoryId: categoryId\n      }));\n\n      yield put(new SeriesLoadingAction());\n      yield put(new GetSeriesWithCombinedFiltersAction());\n\n    }\n  } else {\n    console.error('No spec selected2'); // tslint:disable-line\n    yield put(new AddErrorAction({\n      message: 'No spec selected',\n      id: SELECT_CATEGORY_ERROR,\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: undefined,\n      }\n    }));\n  }\n  yield put(new SelectCategoryFinishedAction());\n}\n\nfunction* editSpecTitle(\n  action: EditSpecTitleAction\n) {\n\n  const values = action.payload.values;\n  const specId = action.payload.specId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'updateSpec',\n      body: values.toJS(),\n      params: {\n        specId\n      }\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const updatedSpec = immutableData.getIn(['payload', 'spec', 'spec']);\n    const redirectPath = yield select(makeSelectRedirectPath());\n    yield put(new GetSpecsSucceededAction(updatedSpec));\n\n    if (redirectPath) {\n      const pathDetail = redirectPath.split('/');\n      if (`/${pathDetail[1]}` === PROJECT_DETAIL_PATH && pathDetail[2]) {\n        // pathDetail holds strings; the projects map is keyed by number and the fetched project is\n        // selected under the id given here (Sentry issue 7721703926)\n        yield put(new GetProjectsAction({ projectId: Number(pathDetail[2]) }));\n      }\n      yield put(push(redirectPath));\n      yield put(new SetRedirectPathAction());\n    } else {\n      yield put(push( `${SPEC_DETAIL_PATH}/${specId}`));\n    }\n  } else {\n    console.error(err); //tslint:disable-line\n  }\n}\n\nfunction* searchSpecs(\n  action: SearchSpecsAction,\n) {\n  const { filters, options } = action.payload;\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'searchSpecs',\n      body: {\n        filters,\n        options,\n      }\n    }\n  }));\n  const end = Date.now();\n  if (data) {\n    const immuData = fromJS(data);\n    const count: number = immuData.getIn(['payload', 'spec', 'count']);\n    const hasNextPage: boolean = immuData.getIn(['payload', 'spec', 'hasNextPage']);\n    const specs: List<IMap<Spec>> = immuData.getIn(['payload', 'spec', 'specs']);\n    if (specs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchSpecsSucceededAction({\n        specs,\n        count,\n        hasNextPage,\n      }));\n      yield put(new SpecToolProjectListIsLoadingAction(false));\n    }\n  } else {\n    yield put(new SearchSpecsFailedAction(err));\n    yield put(new SpecToolProjectListIsLoadingAction(false));\n    console.error('specs no data', {err}); // tslint:disable-line\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    specName: immutableFilters.getIn(['name', 'like']) || null,\n    createdByFirmName: immutableFilters.getIn(['createdByFirmName', 'like']) || null,\n    createdByUserId: immutableFilters.getIn(['createdBy.user.id', 'eq']) || null,\n    createdByOfficeId: immutableFilters.getIn(['createdBy.office.id', 'eq']) || null,\n    createdDateGte: immutableFilters.getIn(['createdDate', 'gte']) || null,\n    createdDateLte: immutableFilters.getIn(['createdDate', 'lte']) || null,\n    modifiedDateGte: immutableFilters.getIn(['modifiedDate', 'gte']) || null,\n    modifiedDateLte: immutableFilters.getIn(['modifiedDate', 'lte']) || null,\n    isAi: immutableFilters.getIn(['isAi', 'eq']) !== undefined ? immutableFilters.getIn(['isAi', 'eq']) : null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.specSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* specToolSpecListSearchSpecs(\n  action: SpecToolSpecListSearchSpecsAction,\n) {\n\n  const { filters, options } = action.payload;\n\n  yield put(new SpecToolProjectListIsLoadingAction(true));\n\n  yield call(searchSpecs, new SearchSpecsAction({\n    filters,\n    options\n  }));\n\n  yield put(new SpecToolProjectListIsLoadingAction(false));\n\n}\n\nfunction* deleteSpecAndSearchSpecs(\n  action: DeleteSpecAndSearchSpecsAction,\n) {\n\n  const { id, name, filters, options } = action.payload;\n\n  yield call(deleteSpec, new DeleteSpecAction({ specId: id, specName: name }));\n  yield call(searchSpecs, new SearchSpecsAction({\n      options,\n      filters\n  }));\n\n}\n\nfunction* getSpecFiles(\n  action: GetSpecFilesAction,\n) {\n\n  const { specId } = action;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'getSpecFiles',\n      params: {\n        specId\n      }\n    }\n  }));\n\n  if (data) {\n    const immuData = fromJS(data);\n    const files = immuData.getIn(['payload', 'spec', 'file']);\n    yield put(new GetSpecFilesSucceededAction(files));\n  } else {\n    console.error('get spec files error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* linkGenericProductToProduct(\n    action: LinkGenericProductToProductAction\n) {\n  yield put(new SetIsLinkingOrUnlinkGenericProductAction(true));\n  yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: i18next.t('translations:generalLoading.linking') } }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'linkGenericProductToProduct',\n      body: {\n        manufacturer: action.payload.manufacturer,\n        productNumber: action.payload.productNumber,\n      },\n      params: {\n        productId: action.payload.productId,\n        specId: action.payload.specId,\n      }\n    },\n  }));\n  if (data) {\n    yield put(new QuickSearchPimProductsSucceeded({ results: List() }));\n    const {\n      data: data2,\n      err: err2\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: 'getSpec',\n        body: {\n          specId: action.payload.specId\n        }\n      }\n    }));\n    if (data2) {\n      const immuData = fromJS(data2);\n      const specs = immuData.getIn(['payload', 'spec', 'spec']);\n      if (specs == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetSpecsSucceededAction(specs));\n      }\n    } else {\n      console.error('get spec from link generic product to product failed', {err2}); // tslint:disable-line\n    }\n  } else {\n    console.error('link generic product to product failed', {err}); // tslint:disable-line\n  }\n  yield put(new SetIsLinkingOrUnlinkGenericProductAction(false));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nfunction* unlinkGenericProduct(\n    action: UnlinkGenericProductAction\n) {\n  yield put(new SetIsLinkingOrUnlinkGenericProductAction(true));\n  yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: i18next.t('translations:generalLoading.unlinking') } }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'deleteGenericProductLink',\n      body: {\n        identifiedBrand: action.payload.identifiedBrand,\n        identifiedProductNumber: action.payload.identifiedProductNumber,\n      },\n      params: {\n        productId: action.payload.productId,\n        specId: action.payload.specId,\n      }\n    },\n  }));\n  if (data) {\n    yield put(new QuickSearchPimProductsSucceeded({ results: List() }));\n    const {\n      data: data2,\n      err: err2\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'spec',\n        endpoint: 'getSpec',\n        body: {\n          specId: action.payload.specId\n        }\n      }\n    }));\n    if (data2) {\n      const immuData = fromJS(data2);\n      const specs = immuData.getIn(['payload', 'spec', 'spec']);\n      if (specs == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetSpecsSucceededAction(specs));\n      }\n    } else {\n      console.error('get spec from unlink generic product to product failed', {err2}); // tslint:disable-line\n    }\n  } else {\n    console.error('unlink generic product failed', {err}); // tslint:disable-line\n  }\n  yield put(new SetIsLinkingOrUnlinkGenericProductAction(false));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n}\n\nfunction* updateSpecFilesPermission(\n  action: UpdateSpecFilesPermissionAction\n) {\n  const { spec, linkedFiles, permission } = action.payload;\n  yield put(new IsUpdatingSpecFilesAction(true));\n\n  const specId = spec.get('id');\n  const specName = spec.get('name');\n  const projectId = spec.get('projectId');\n  const projectName = spec.get('projectTitle');\n  const permissionLowercase = permission.toLowerCase();\n  const linkedFileArray = linkedFiles && linkedFiles.toJS();\n  if (linkedFiles.size > 0) {\n    const responses = yield all(linkedFileArray.map((linkedFile) => {\n      const linkedFileId = linkedFile.id;\n      const updatedLinkedFile = {...linkedFile, permission: permissionLowercase};\n      return call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'spec',\n          endpoint: 'updateSpecFile',\n          params: {\n            specId,\n            linkedFileId\n          },\n          body: updatedLinkedFile\n        }\n      }));\n    }));\n    if (responses) {\n      const newLinkedFilesRes = responses.map((res) => {\n        const { data, err}: {data: any, err: Error} = res;\n        if (data) {\n          const immutableData = fromJS(data);\n          const newLinkedFile = immutableData.getIn(['payload', 'spec', 'file']);\n          if (newLinkedFile == null) {\n            console.error('Invalid response', data); // tslint:disable-line\n          } else {\n            return newLinkedFile;\n          }\n        } else {\n          console.error('update spec files error', {err}); // tslint:disable-line\n        }\n      });\n      if (!newLinkedFilesRes[0]) {\n        console.error('update spec files error', {responses}); // tslint:disable-line\n        yield put(new IsUpdatingSpecFilesAction(false));\n        yield put(new SetSnackbarOpenAction({\n          message: `${i18next.t(`translations:specDetail.filesConvertError${permission}`)}`,\n          severity: 'error'\n        }));\n      } else {\n        const amplitudeData = yield select(makeSelectAmplitudeData());\n        const trackingData = {\n          specId,\n          specName,\n          projectId: projectId || '-',\n          projectName: projectName || '-',\n          visibility: permission,\n          ...amplitudeData\n        };\n        amplitude.logEvent(AMPLITUDE_EVENT.toggleSpecFileVisibility, trackingData);\n\n        yield call(getSpecFiles, new GetSpecFilesAction(specId));\n        yield put(new IsUpdatingSpecFilesAction(false));\n        yield put(new SetSnackbarOpenAction({\n          message: `${i18next.t(`translations:specDetail.filesConvertSuccess${permission}`)}`,\n          severity: 'success'\n        }));\n      }\n    }\n  } else {\n    console.error('no linked file(s)', { // tslint:disable-line\n      action\n    });\n  }\n}\n\n// tslint:disable-next-line:no-empty\nconst noop = () => {};\nfunction* copy(\n    action: CopyAction,\n) {\n  const {\n     onSuccess = noop,\n     onFailed = noop,\n     ...rest\n  } = action.payload;\n  let body;\n  if ('body' in action.payload) {\n    body = action.payload.body;\n  } else {\n    body = rest;\n  }\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: 'specsCopyTo',\n      body: JSON.parse(JSON.stringify(body)),\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const specs: List<IMap<Spec>> = immuData.getIn(['payload', 'spec', 'specs']);\n    if (specs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new CopySucceedAction());\n      onSuccess(specs);\n    }\n  } else {\n    yield put(new CopyFailedAction());\n    onFailed();\n    console.error('copyToProject failed', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* productCatalogueCreateDrawing(\n  action: ProductCatalogueCreateDrawingAction\n) {\n  const {\n    specId,\n    specType,\n    projectId = null,\n    onSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'spec',\n      endpoint: specType === 'master' ? 'createMasterDrawing' : 'createDrawing',\n      body: {\n        __PLACEHOLDER__: '__PLACEHOLDER__'\n      },\n      params: {\n        specId,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const newDrawing = immutableData.getIn(['payload', 'spec', 'drawing', 0]);\n    yield put(new SetNewDrawingIdAction(newDrawing.get('id'))); // set new drawing id for auto label drawing when user click complete or back to\n    yield put(new SelectDrawingAction(newDrawing.get('id'))); // select drawing before select spec otherwise it'll select first drawing in spec\n    // once drawing created successfully, have to set mode, get spec, select spec to continue as in regular flow\n    yield put(new SetModeAction(specType as Mode));\n    yield call(getSpecs, new GetSpecsAction({specId}));\n    if (specType === 'master') {\n      yield put(new SetSelectedMasterSpecIdAction(specId));\n    } else {\n      yield put(new SelectSpecAction(specId));\n      // if add to project, we also need project detail and all its specs data as in regular flow\n      if (specType === 'project') {\n        yield call(getProjects, new GetProjectsAction({projectId}));\n        yield put(new SelectProjectAction({projectId, specId}));\n      }\n    }\n    onSuccess();\n  } else {\n    console.error('Product catalogue create new drawing failed', {err}); // tslint:disable-line\n  }\n}\n\nfunction* logGuestUserDownloadSpec(\n    action: LogGuestUserDownloadSpecAction\n) {\n  const { specId, guestEmail } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'report',\n      endpoint: 'updateSpecGuestEmail',\n      body: {\n        eventType: 'updateSpecGuestEmail',\n        spec: {\n          id: specId,\n          guestEmail,\n        }\n      }\n    }\n  }));\n}","import * as React from 'react';\nimport {\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  Typography,\n  WithStyles,\n  withStyles,\n  Theme,\n  Grid,\n  FormControlLabel,\n  Radio,\n  Checkbox,\n  Button,\n  Divider,\n  Tooltip,\n  CircularProgress,\n  Chip,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableRow,\n  Switch,\n  Tabs,\n  Tab,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  Box, SvgIcon,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  PRODUCT_SELECTION_GROUP_FORM,\n} from '../../modules/ProductModule/constants';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  connect, useDispatch, useSelector,\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  useTranslation,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  compose,\n} from 'redux';\nimport {\n  Image,\n} from '../../components';\nimport {\n  Set,\n  List,\n  Map,\n  fromJS,\n  OrderedSet,\n  OrderedMap,\n} from 'immutable';\n// import value from '*.json';\n\nimport {\n  SelectSeriesAction,\n  UpdateSeriesFilterInputAction,\n  CheckProductAndAttributesLoadingAction,\n  SeriesSpecificFilterAddAction,\n  SeriesSpecificFilterRemoveAction,\n  ConvertInitSelectionsToSeriesSpecificFiltersAction,\n  SkipRuleEngineAction,\n  ISeriesFilterPayload,\n  CreateMatchingProductThenUpdateDrawingAction,\n  ProductFilterClearThenCheckProductAndAttributesAction,\n  SeriesSpecificFilterClearThenCheckProductAndAttributesAction,\n  GetRecommendedSpecProductAction,\n  SetIsRecommendedSpecProductLoadingAction,\n  CheckProductAndAttributesLoadingDoneAction,\n  GetMatchingPriceSummarySucceededAction,\n  SetSelectedSeriesSpecificInitDisabledSelectionsAction,\n  DeleteSelectedSeriesSpecificInitDisabledSelectionsAction\n} from '../../modules/ProductModule/actions';\nimport {\n  makeSelectMatchingProductForSpecificSeries,\n  makeSelectAttributeWhitelistMapWithSelectedCategoryId,\n  makeSelectEditingProductIndex,\n  makeSelectCheckProductsAndAttributesLoading,\n  selectProductFilters,\n  makeSelectSelectedSeriesSpecificFilters,\n  makeSelectSelectedSeriesSpecificFiltersKeys,\n  makeSelectSelectedSeriesSpecificValuesArray,\n  makeSelectDirectMatchingProductForSeries,\n  makeSelectIsRecommendedSpecProductLoading,\n  makeSelectRecommendedSpecProducts,\n  makeSelectSelectedSeriesId,\n  makeSelectSeriesSpecificFilters,\n  makeSelectMatchingProductPriceSummary,\n  makeSelectSelectedSeriesSpecificInitSelections,\n  makeSelectSelectedSeriesSpecificInitDisabledSelections,\n} from '../../modules/ProductModule/selectors';\n\nimport {\n  makeSelectDrawing,\n  makeSelectMissingCategory,\n  makeSelectMasterDrawing,\n  makeSelectSpec,\n  makeSelectMasterProjectspec,\n  makeSelectfailedSelfDrawingRulesLoading, makeSelectTemplateDrawing, makeSelectTemplateProjectSpec, makeSelectMode,\n} from '../../modules/SpecModule/selectors';\n\nimport {\n  SelectCategoryAction,\n} from '../../modules/ProductModule/actions';\n\nimport {\n  ProductCatalogueCreateDrawingAction,\n  UpdateSelfFailedRulesLoadingAction,\n  UpdatingRulesAction,\n  ValidateAddProductToDrawingAction,\n} from '../../modules/SpecModule/actions';\n\nimport {\n  ProductCategory,\n  Drawing,\n  Product,\n  Series,\n  MissingRule,\n  MatchingProduct,\n  Attribute,\n  AttributeValue,\n  Spec,\n} from '../../models';\n\nimport {\n  reset,\n} from 'redux-form';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\nimport {\n  withAtsApi,\n  WithAtsApi,\n} from '../../contexts/AtsApiContext';\nimport {\n  makeSelectAppMenuOpen,\n  makeSelectAtsApiState,\n  makeSelectOverlayComponent,\n  makeSelectSession\n} from '../../modules/ApplicationModule/selectors';\nimport AttributeItem from './AttributeItem';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport mexicoFlag from '../../images/productSelectionPage/mexicoFlag.png';\nimport { AMPLITUDE_EVENT, ATS_EVENT, Currency, GEOLOCATION_ID, Mode, SiteName, SPEC_TOOL_ID, SPEC_TYPE, FlagOrder, FlagCountriesSet } from '../../constants';\nimport {\n  makeSelectConfig,\n  makeSelectIdentityObject,\n  makeSelectSite,\n  makeSelectSpecToolSeriesLinkTemplate,\n  makeSelectAppId,\n  makeSelectUngatedCurrency,\n  makeSelectUserHasSpecAssistAcl,\n} from '../../modules/AtsModule/selectors';\nimport CountryFlag from './CountryFlag';\nimport DraftStatusChip from '../../components/DraftStatusChip';\nimport { makeSelectLocationForSeriesSearchFilter } from '../../modules/AccountModule/selectors';\nimport i18next from 'i18next';\nimport { createStyles, makeStyles, useTheme } from '@material-ui/styles';\nimport { debounce } from 'lodash';\nimport { ALTERNATIVES_MODAL_ID } from '../AlternativesModal';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { buildSeriesShareLink } from '../../utils/shareLinkUtmParams';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport InfoIcon from '@material-ui/icons/Info';\nimport ZoomInIcon from '@material-ui/icons/ZoomIn';\nimport CheckIcon from '@material-ui/icons/Check';\nimport TextureIcon from '@material-ui/icons/Texture';\nimport RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport ShowChartIcon from '@material-ui/icons/ShowChart';\nimport classnames from 'classnames';\nimport { CURVE_PREVIEW_MODAL_ID } from '../ProductSelection/CurvePreviewModal/Component';\nimport { ADD_PRODUCT_TO_DRAWING_MODAL_ID } from '../AddProductToDrawingModal';\nimport {ISession} from '../../modules/ApplicationModule/reducer';\nimport { utcToLocal } from 'ats-utils/src';\nimport EcoIcon from '@material-ui/icons/Eco';\nimport { makeSelectBrandsToHidePrice } from '../../modules/PimModule/selectors';\nimport waterSenseLogo from '../../images/WaterSense_logo.svg';\nimport ShareIcon from '@material-ui/icons/Share';\nimport CopyLinkButton from '../../components/CopyLinkButton';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\nimport { COUNTRIES_OBJECT } from '../../constants/countries';\nimport RegionFlags from '../../components/_CellRenderers/RegionCell/RegionFlags';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nenum TAB_VALUE {\n  FEATURES = 'features',\n  OPTIONS = 'options',\n  SWATCH = 'swatch'\n}\n\nexport const makeFlagsWithCountryIds = (props: { whiteList?: List<number>, withName?: boolean, width?: number }) => {\n  const { whiteList, withName = true, width } = props;\n\n  return FlagOrder\n    .filter(countryId => whiteList?.includes(countryId))\n    .map((countryId: number, index: number) => {\n      switch (countryId) {\n        case GEOLOCATION_ID.canada:\n          return <CountryFlag\n            key={countryId}\n            alt={COUNTRIES_OBJECT[countryId]?.value}\n            countryName={withName ? COUNTRIES_OBJECT[countryId]?.value : ''}\n            src={canFlag}\n            width={width}\n            tooltip={COUNTRIES_OBJECT[countryId]?.value}\n          />;\n        case GEOLOCATION_ID.usa:\n          return <CountryFlag\n            key={countryId}\n            alt={COUNTRIES_OBJECT[countryId]?.value}\n            countryName={withName ? COUNTRIES_OBJECT[countryId]?.value : ''}\n            src={usFlag}\n            width={width}\n            tooltip={COUNTRIES_OBJECT[countryId]?.value}\n          />;\n        case GEOLOCATION_ID.mexico:\n          return <CountryFlag\n            key={countryId}\n            alt={COUNTRIES_OBJECT[countryId]?.value}\n            countryName={withName ? COUNTRIES_OBJECT[countryId]?.value : ''}\n            src={mexicoFlag}\n            width={width}\n            tooltip={COUNTRIES_OBJECT[countryId]?.value}\n          />;\n        default:\n          return null;\n      }\n  });\n};\n\ninterface ITabPanelProps {\n  children: React.ReactNode;\n  value: string;\n  tabValueString: string;\n  className: string;\n}\n\ninterface ISeriesPanelComponentProps {\n  buttonAction?: (prod) => void;\n  addButtonText?: string;\n  specType: string;\n  series?: any;\n  expanded?: boolean;\n  currencyType?: Currency;\n  header?: JSX.Element;\n  onToggleExpand?: () => void;\n}\n\ninterface ISeriesPanel extends ISeriesPanelComponentProps {\n  disableOptions: () => void;\n  dispatch: React.Dispatch<IAction>;\n  validateAddProductToDrawing: (specId, category, useAccessibilityStandard, products, openAlternativeModal, callback) => void;\n  classes?: any;\n  children?: React.ReactNode;\n  series: IMap<Series>;\n  selectedDrawing: IMap<Drawing>;\n  productFilters: Map<string, Set<any>>;\n  productFiltersForSelectedSeries: Map<string, Set<any>>;\n  matchingProduct: IMap<MatchingProduct>;\n  expanded: boolean;\n  selectedMissingCategories: List<IMap<MissingRule>>;\n  reset: any;\n  selectedCategoryIdWhiteList: OrderedSet<string>;\n  locale: string;\n  atsApiIdentity?: boolean;\n  editProductIndex: number;\n  checkProductsAndAttributesLoading: boolean;\n  optionsDisabled: boolean;\n  seriesSpecificFilterKeys: string[];\n  seriesSpecificFilterValuesArray: List<IMap<ISeriesFilterPayload>>;\n  selectedSeriesSpecificInitSelections: Map<string, string>;\n  selectedSeriesSpecificInitDisabledSelections:  Map<string, Set<string | number>>;\n  config: IMap<IConfig>;\n  specOrOfficeLocation: any;\n  ungatedCurrency: string;\n  spec: IMap<Spec>;\n  selfFailedRulesLoading: boolean;\n  rulesModalOpen: boolean;\n  recommendedSpecProducts: Map<number, Map<string, IMap<Product>>>;\n  selectedSeriesId: number;\n  seriesSpecificFilters: Map<number, Map<string, Set<any>>>;\n  mode: Mode;\n  site: SiteName;\n  isGuestUser: boolean;\n  session: IMap<ISession>;\n  hasSpecAssistAcl: boolean;\n  brandsToHidePrice: Map<number, number>;\n  specToolSeriesLinkTemplate: string;\n  appId: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: '100%',\n  },\n  heading: {\n    flexBasis: '33.33%',\n    flexShrink: 0,\n    fontSize: theme.typography.fontSize * 1.1\n  },\n  categoryName: {\n    color: theme.palette.primary.main,\n  },\n  attrOptionTitle: {\n    margin: `${theme.spacing() * 2}px ${theme.spacing() * 3}px`,\n  },\n  attributeTitle: {\n    fontWeight: 'bold',\n    textTransform: 'capitalize',\n    color: 'rgba(0, 0, 0, 0.8)',\n    lineHeight: `${theme.spacing() * 2.75}px`,\n    width: '95%'\n  },\n  formControl: {\n    width: '100%',\n  },\n  selectOption: {\n    marginTop: theme.spacing(),\n    marginBottom: theme.spacing(),\n  },\n  controlProps: {\n    paddingTop: 0,\n    paddingBottom: 0,\n    alignSelf: 'baseline'\n  },\n  controlPropsError: {\n    color: '#F0AD4E',\n  },\n  expansionDetailsButtonContainer: {\n    margin: `${theme.spacing() * 2.5}px 0`,\n  },\n  dalConfigureProductPrompt: {\n    display: 'flex',\n    alignItems: 'center',\n    marginLeft: theme.spacing(3),\n  },\n  ExpansionPanelDetailsRoot: {\n    padding: 0,\n    flexFlow: 'column',\n  },\n  viewMediaIcon: {\n    marginRight: `${theme.spacing(1.5)}px`,\n    fontSize: '1.2rem',\n    color: 'rgba(0, 0, 0, 0.6)'\n  },\n  includeAlternates: {\n    marginLeft: 24\n  },\n  addToDrawingBtn: {\n    marginRight: `${theme.spacing() * 2}px`,\n  },\n  addToDrawingBtnLoader: {\n    marginRight: theme.spacing()\n  },\n  seriesName: {\n    color: theme.palette.primary.main,\n  },\n  expansionContent: {\n    padding: `0 ${theme.spacing(3)}px ${theme.spacing(3)}px ${theme.spacing(3)}px`,\n    columnCount: 4,\n    columnGap: '1em',\n    [theme.breakpoints.down('sm')]: {\n      columnCount: 2,\n      padding: `${theme.spacing()}px`,\n      marginLeft: '1em'\n    },\n    [theme.breakpoints.down('xs')]: {\n      columnCount: 1,\n      padding: `${theme.spacing()}px`,\n      marginLeft: '1em'\n    },\n  },\n  optionsContainer: {\n    padding: theme.spacing(0, 3, 3, 3),\n    marginLeft: 0,\n    marginRight: 0,\n    width: '100%'\n  },\n  expansionPanelSummary: {\n    // Hacky crap below. honestly matrialUI is dumb, they applied a style inline with ridiculous specificity and pseudo selectors like :hover:not(.Mui-disabled), how are you supposed to target that? they dont even give you a way in the classes api\n    cursor: 'default !important'\n  },\n  label: {\n    width: '100%'\n  },\n  option: {\n    width: '88%'\n  },\n  priceListCell: {\n    width: theme.spacing(13),\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    textTransform: 'capitalize'\n  },\n  statusChip: {\n    marginLeft: theme.spacing()\n  },\n  attributeContainer: {\n    flexGrow: 1,\n    width: '25%',\n    minWidth: '250px',\n    paddingTop: theme.spacing(3),\n    paddingBottom: theme.spacing(3)\n  },\n  priceList: {\n    width: 'auto',\n    marginBottom: theme.spacing(),\n  },\n  warningMessage: {\n    justifyContent: 'end',\n    marginTop: theme.spacing(2),\n    marginRight: theme.spacing(2)\n  },\n  warning: {\n    marginLeft: theme.spacing(),\n    color: 'red'\n  },\n  infoIcon: {\n    fontSize: '1rem',\n    color: theme.palette.grey[600],\n    position: 'relative',\n    top: theme.spacing(0.3),\n    left: theme.spacing(0.25)\n  },\n  tooltip: {\n    width: 200\n  },\n  tabs: {\n    overflow: 'initial !important'\n  },\n  tabContentContainer: {\n    backgroundColor: '#F5F5F5'\n  },\n  selectedTab: {\n    backgroundColor: '#F5F5F5',\n    borderLeft: '1px lightgray solid',\n    borderTop: '1px lightgray solid',\n    borderRight: '1px lightgray solid',\n  },\n  priceBreakdownContainer: {\n    backgroundColor: '#F5F5F5',\n    padding: theme.spacing(0, 3, 3,3),\n  },\n  productIsNotCompliantWarning: {\n    backgroundColor: '#FEF2E1',\n    padding: theme.spacing(1, 2),\n  },\n  notCompliantWarningIcon: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing(1)\n  },\n});\n\nexport const RULES_DIALOG_KEY = '__RULES_DIALOG_KEY__';\n\ntype ExpansionProps = ISeriesPanel & ISeriesPanelComponentProps & WithTranslation & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nclass Expansion extends React.Component<ExpansionProps, {}> {\n  public state = {\n    retry: 0,\n    create: false,\n    currentTabValue: TAB_VALUE.OPTIONS,\n    timeStamp: Date.now(),\n    optionsTabUsage: 0,\n    featuresTabUsage: 0,\n    swatchTabUsage: 0,\n    showPrice: false,\n    showSuffix: true,\n    includeAlternates: false,\n    haveSetInitDisabledSelections: false,\n    productIsNotCompliant: false,\n  };\n\n  public firstMissingRequiredOptionRef = React.createRef<HTMLSpanElement>();\n  public firstMissingRequiredSwatchRef = React.createRef<HTMLSpanElement>();\n\n  // aborts the in-flight checkProductCompliance request when the product changes\n  // faster than the previous request returns, so a stale response can't win the race\n  public checkComplianceController: AbortController | null = null;\n\n  public componentDidMount() {\n    const {series, selectedSeriesId, specType, dispatch, site, atsApi} = this.props;\n    // if no option set currentTabValue default to features\n    const options = series.get('attributes')?.filter(attribute => !attribute.get('isAttribute'));\n    const atLeastOneOptionWithoutSwatch = options?.find((option) => !option.get('useSwatch'));\n\n    if (!options?.count()) {\n      this.setState({currentTabValue: TAB_VALUE.FEATURES});\n    } else if (!atLeastOneOptionWithoutSwatch) {\n      this.setState({currentTabValue: TAB_VALUE.SWATCH});\n    }\n\n    // in normal cases, series panels expansion are mounted unexpanded and hidden\n    // and when we expand it, it does some actions and rerender component so the current missingRequired ref get forced to rerender\n    // when landing directly from quick search (determined by preselected series id), most actions are done before mount and expanded is preset to open\n    // on latest rerender, the ref is not up to most current and breaks the addProductToDrawingButtonProps logic\n    // work around by trigger rerender so missingRequired ref rerender the most current ref.\n    if (selectedSeriesId !== -1) {\n      dispatch(new CheckProductAndAttributesLoadingAction());\n      setTimeout(() => dispatch(new CheckProductAndAttributesLoadingDoneAction()), 1000);\n    }\n\n    // default show price to true for AQ\n    if (specType === 'quoteProductConfigurator') {\n      this.setState({showPrice: true});\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      dispatch,\n      expanded,\n      matchingProduct,\n      specType,\n      buttonAction,\n      selectedSeriesSpecificInitSelections,\n      series,\n      atsApi,\n      isGuestUser,\n      specOrOfficeLocation,\n      site,\n    } = this.props;\n    const {\n      create,\n      optionsTabUsage,\n      featuresTabUsage,\n      swatchTabUsage,\n      currentTabValue,\n      timeStamp,\n      haveSetInitDisabledSelections,\n    } = this.state;\n\n    const product = matchingProduct.getIn(['product', 0]);\n    const productId = matchingProduct.getIn(['product', 0, 'id']);\n    const firmProductId = matchingProduct.getIn(['product', 0, 'firmProductId']);\n\n    if (specType === 'quoteProductConfigurator' && create === true && firmProductId && productId) {\n      buttonAction(product);\n      this.setState({ create: false });\n    }\n    if (specType === 'AmpFeaturedProductsConfigurator' && create === true && productId) {\n      buttonAction(product);\n      this.setState({ create: false });\n    }\n\n    // for analytic tracking on time spent on each tab on series panel\n    // only track when Tab view is displayed\n    if (expanded !== prevProps.expanded) {\n      if (expanded) {\n        // start time stamped\n        const startTime = Date.now();\n        this.setState({timeStamp: startTime});\n      }\n      if (!expanded) {\n        // send amplitude tracking\n        this.TabsTimeAmplitudeTrack();\n      }\n    }\n\n    if (expanded && selectedSeriesSpecificInitSelections && !selectedSeriesSpecificInitSelections.isEmpty()) {\n      dispatch(new SetSelectedSeriesSpecificInitDisabledSelectionsAction({ series, selectedSeriesSpecificInitSelections }));\n      dispatch(new ConvertInitSelectionsToSeriesSpecificFiltersAction({ series }));\n    }\n\n    // trigger tracking if the closes/refreshes the tab/browser\n    if (\n      (optionsTabUsage !== prevState.optionsTabUsage\n      || featuresTabUsage !== prevState.featuresTabUsage\n      || swatchTabUsage !== prevState.swatchTabUsage\n      || currentTabValue !== prevState.currentTabValue\n      || timeStamp !== prevState.timeStamp)\n      ) {\n        window.addEventListener('beforeunload', this.TabsTimeAmplitudeTrack);\n    }\n\n    if (\n      site === SiteName.spec\n      && !isGuestUser\n      && specOrOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.canada\n      && product\n      && !product.equals(prevProps.matchingProduct?.getIn(['product', 0]))\n    ) {\n      // cancel any request still in flight for a previous product so its (now stale)\n      // response can't win the race and overwrite productIsNotCompliant for the current product\n      if (this.checkComplianceController) {\n        this.checkComplianceController.abort();\n      }\n      const controller = new AbortController();\n      this.checkComplianceController = controller;\n      (atsApi.callApi({\n        service: 'product',\n        endpoint: 'checkProductCompliance',\n        params: { type: 'nrcan' },\n        body: { products: [product.toJS()] },\n        signal: controller.signal,\n      }) as any).then((res) => {\n        // ignore a response that has been superseded by a newer product change, even if\n        // the abort didn't reject this promise (belt-and-suspenders against a stale win)\n        if (this.checkComplianceController !== controller) {\n          return;\n        }\n        // productIsNotCompliant is only true when the endpoint explicitly reports non-compliant;\n        // a null/undefined result is treated as compliant\n        const isCompliant = res?.payload?.product?.compliance?.[0];\n        this.setState({ productIsNotCompliant: isCompliant === false });\n      }).catch((err) => {\n        // a newer request has already started — don't let this one's failure reset the state\n        if (this.checkComplianceController !== controller) {\n          return;\n        }\n        this.setState({ productIsNotCompliant: false });\n      });\n    }\n  }\n\n  public componentWillUnmount() {\n    const { series, selectedSeriesId } = this.props;\n    // send amplitude tracking tab time for current series upon component unmount\n    // (when add to drawing begins process, leave the page, etc.)\n    // only track when Tab view is displayed\n    if (selectedSeriesId === series.get('id')) {\n      this.TabsTimeAmplitudeTrack();\n    }\n\n    window.removeEventListener('beforeunload', this.TabsTimeAmplitudeTrack);\n\n    // abort any in-flight compliance request so its response can't setState after unmount\n    if (this.checkComplianceController) {\n      this.checkComplianceController.abort();\n    }\n  }\n\n  public TabsTimeAmplitudeTrack = () => {\n    const {\n      series,\n      matchingProduct,\n      amplitudeData\n    } = this.props;\n    const {\n      optionsTabUsage,\n      featuresTabUsage,\n      swatchTabUsage,\n      currentTabValue,\n      timeStamp\n    } = this.state;\n    const endTime = Date.now();\n    const lastAddedTabUsage = endTime - timeStamp;\n    // add last period tab time then send amplitude\n    let updatedOptionsTabUsage = optionsTabUsage;\n    let updatedFeaturesTabUsage = featuresTabUsage;\n    let updatedSwatchTabUsage = swatchTabUsage;\n    if (currentTabValue === TAB_VALUE.FEATURES) {\n      updatedFeaturesTabUsage = featuresTabUsage + lastAddedTabUsage;\n    }\n    if (currentTabValue === TAB_VALUE.OPTIONS) {\n      updatedOptionsTabUsage = optionsTabUsage + lastAddedTabUsage;\n    }\n    if (currentTabValue === TAB_VALUE.SWATCH) {\n      updatedSwatchTabUsage = swatchTabUsage + lastAddedTabUsage;\n    }\n    const trackedData = {\n      featuresTime: updatedFeaturesTabUsage / 1000,\n      optionsTime: updatedOptionsTabUsage / 1000,\n      swatchesTime: updatedSwatchTabUsage / 1000,\n      seriesId: series.get('id'),\n      seriesName: series.get('name'),\n      productId: matchingProduct.getIn(['product', 0, 'id']) || '-',\n      productNumber: matchingProduct.getIn(['product', 0, 'productNumber']) || '-'\n    };\n    amplitude.logEvent(AMPLITUDE_EVENT.seriesPanelTabsTime, amplitudeData(trackedData));\n    // clear tab periods after sended\n    this.setState({...this.state, optionsTabUsage: 0, featuresTabUsage: 0, swatchTabUsage: 0});\n  }\n\n  public checked = (key: string, value: any, multi: boolean, label: string, seriesId: number, optionValueId: number) => (e: React.MouseEvent<HTMLElement>, checked: boolean) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    const ActionCreator = (e && (e.target as HTMLInputElement).checked) || checked ? SeriesSpecificFilterAddAction : SeriesSpecificFilterRemoveAction;\n\n    dispatch(new ActionCreator({\n      filters: [{ key, value, multi, label, optionValueId }],\n      seriesId\n    }, (this.props.specType === 'quoteProductConfigurator' || this.props.specType === 'AmpFeaturedProductsConfigurator') && this.props.series));\n  }\n\n  public clearFilters = (seriesId: number) => (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      specType,\n      series\n    } = this.props;\n    // when reset we only want to clear series specific filters\n    // dispatch(new ProductFilterClearThenCheckProductAndAttributesAction());\n    dispatch(new SeriesSpecificFilterClearThenCheckProductAndAttributesAction({ seriesId }, (specType === 'quoteProductConfigurator' || specType === 'AmpFeaturedProductsConfigurator') && series));\n    // dispatch(new ProductFilterClearAction());\n    // dispatch(new SeriesSpecificFilterClearAction({seriesId}, specType === 'quoteProductConfigurator' && series));\n\n    dispatch(new DeleteSelectedSeriesSpecificInitDisabledSelectionsAction({ seriesId }));\n\n    // also clear price breakdown on AQ\n    if (specType === 'quoteProductConfigurator') {\n     dispatch(new GetMatchingPriceSummarySucceededAction({priceSummary: null}));\n    }\n  }\n\n  public addToDrawing = (product: IMap<Product>) => (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      spec,\n      selectedDrawing,\n      selectedMissingCategories,\n      editProductIndex,\n      series,\n      specType,\n      amplitudeData,\n      recommendedSpecProducts\n    } = this.props;\n\n    const seriesId = series.get('id');\n    const categoryId: number = product.get('category');\n    const drawingId: number = selectedDrawing.get('id');\n    const productId = product.get('id');\n    const recommendedProductId = recommendedSpecProducts.getIn([seriesId, 'product', 'id']);\n\n    // check if the product user is adding is the same as matching product then send amplitude data\n    if (specType !== 'quoteProductConfigurator' && specType !== 'AmpFeaturedProductsConfigurator' && productId === recommendedProductId) {\n      const trackedData = {\n        id: productId,\n        productNumber: product.get('productNumber'),\n        itemNumber: product.get('itemNumber') || '-',\n        upc: product.get('upc') || '-',\n        customProductNumber: product.get('customProductNumber'),\n        brandId: product.get('brandId'),\n        brand: product.get('brand'),\n        category: product.get('category'),\n        categoryName: product.get('categoryName'),\n        series: product.get('series'),\n        draft: product.get('draft'),\n        isConfigurator: product.get('isConfigurator'),\n        status: product.get('status'),\n        pimStatus: product.get('pimStatus') || '-',\n        testStatus: product.get('testStatus')\n      };\n      amplitude.logEvent(AMPLITUDE_EVENT.addingRecommendedProductToDrawing, amplitudeData(trackedData));\n    }\n\n    dispatch(new UpdatingRulesAction());\n    dispatch(new CreateMatchingProductThenUpdateDrawingAction({ spec, drawingId, selectedDrawing, editProductIndex }));\n\n    const productCategory: IMap<ProductCategory> = new ProductCategory({ id: -1, name: '' }).toImmutable();\n    dispatch(new SelectCategoryAction({ productCategoryId: -1 }));\n\n    dispatch(new UpdateSeriesFilterInputAction());\n    dispatch(reset(PRODUCT_SELECTION_GROUP_FORM));\n\n    // reset skip rules to false\n    dispatch(new SkipRuleEngineAction(false));\n  }\n\n  public getMediaFileIdByRegionLocaleOrFallback = (dataMap: IMap<Series | Product>, mediaKey: string) => {\n    const {locale, specOrOfficeLocation, isGuestUser} = this.props;\n    const isFr = locale === 'fr';\n    const specOrLoginUserOfficeCountryId = specOrOfficeLocation.getIn(['country', 'id']);\n    const isCanada = specOrLoginUserOfficeCountryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n\n    // If fr, determine location If nothing available in fr at all,then fall back to en\n    if (mediaKey === 'manufacturer_cutsheet') { // for cutsheet, we want to fallback to URL too\n      if (isGuestUser) {\n        if (isFr) {\n          return dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'fr', mediaKey, 'url'])\n          || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url']);\n        } else {\n          return dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url']);\n        }\n      }\n\n      const frCutSheet = isCanada\n        ? dataMap.getIn(['file', 'media', 'fr-ca', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'fr-ca', mediaKey, 'url'])\n          || dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'fr', mediaKey, 'url'])\n          || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url'])\n        : dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'fr', mediaKey, 'url'])\n          || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url']);\n      const fileId = isFr\n        ? frCutSheet\n        : isCanada\n          ? dataMap.getIn(['file', 'media', 'en-ca', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en-ca', mediaKey, 'url'])\n            || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url'])\n          : dataMap.getIn(['file', 'media', 'en-us', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en-us', mediaKey, 'url'])\n            || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'url']);\n      return fileId;\n    } else {\n      if (isGuestUser) {\n        if (isFr) {\n          return dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']);\n        } else {\n          return dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']);\n        }\n      }\n\n      const frCutSheet = isCanada\n        ? dataMap.getIn(['file', 'media', 'fr-ca', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId'])\n        : dataMap.getIn(['file', 'media', 'fr', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']);\n      const fileId = isFr\n        ? frCutSheet\n        : isCanada\n          ? dataMap.getIn(['file', 'media', 'en-ca', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId'])\n          : dataMap.getIn(['file', 'media', 'en-us', mediaKey, 'fileId']) || dataMap.getIn(['file', 'media', 'en', mediaKey, 'fileId']);\n      return fileId;\n    }\n  }\n\n  public manufacturerCutsheetSrc = () => {\n    const {\n      retry\n    } = this.state;\n    const {\n      series,\n      atsApi,\n      atsApiIdentity,\n      matchingProduct,\n      locale\n    } = this.props;\n\n    const manufacturerCutsheet =  (matchingProduct.getIn(['product', 0]) && this.getMediaFileIdByRegionLocaleOrFallback(matchingProduct.getIn(['product', 0]), 'manufacturer_cutsheet'))\n                                  || this.getMediaFileIdByRegionLocaleOrFallback(series, 'manufacturer_cutsheet');\n    if (!manufacturerCutsheet) {\n      return null;\n    }\n    if (manufacturerCutsheet.includes('http')) { // it's a URL\n      return manufacturerCutsheet;\n    }\n    try {\n      return atsApiIdentity && atsApi.callApi(manufacturerCutsheet, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: { download: false } }) as string;\n    } catch (e) {\n      if (retry < 5) {\n        setTimeout(() => {\n          this.setState({ retry: retry + 1 });\n        }, 1000);\n      }\n      console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', {\n        e,\n        retry,\n        atsApi,\n      });\n      return null;\n    }\n  }\n\n  public handleAddToDrawing = (product, openAlternativeModal?) => {\n    const {\n      validateAddProductToDrawing,\n      dispatch,\n      spec,\n      session,\n      selectedDrawing,\n      isGuestUser,\n    } = this.props;\n\n    const useAccessibilityStandard = selectedDrawing && selectedDrawing.get('useAccessibilityStandard');\n    const selectedDrawingProducts = selectedDrawing && selectedDrawing.get('products');\n    const specId = isGuestUser ? session.get('guestSpecId') : spec.get('id');\n    const category = Product.getCategoryFromProduct(product);\n\n    validateAddProductToDrawing(\n      specId,\n      category,\n      useAccessibilityStandard,\n      selectedDrawingProducts.push(product),\n      openAlternativeModal,\n      this.addToDrawing(product)\n    );\n  }\n\n  public handleAddToDrawingThenOpenAlternatives = (product, _editProductIndex) => {\n    const {\n      spec,\n      selectedDrawing,\n      dispatch,\n    } = this.props;\n    this.handleAddToDrawing(product, true);\n    dispatch(new SetOverlayComponentPropsAction({\n      id: ALTERNATIVES_MODAL_ID,\n      props: {\n        specId: spec.get('id'),\n        drawingId: selectedDrawing.get('id'),\n        productId: product.get('id'),\n        productIndex: _editProductIndex,\n        product\n      }\n    }));\n    // dispatch(new ToggleOverlayComponentAction({\n    //   id: ALTERNATIVES_MODAL_ID,\n    //   open: true\n    // }));\n  }\n\n  public handleAlternativeFeatureClick = (product: IMap<Product>) => {\n    const {\n      amplitudeData,\n    } = this.props;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.accessAlternativeFeature, amplitudeData({\n      hasFeatAlternativesAclRole: 'N/A',\n      accessPoint: 'Add To Drawing',\n      productId: product.get('id'),\n      productNumber: product.get('productNumber'),\n      brand: product.get('brand'),\n      categoryName: product.get('categoryName'),\n      status: product.get('status'),\n      pimStatus: product.get('pimStatus')\n    }));\n  }\n\n  public handleGoToMissingRequiredOption = () => {\n    const {currentTabValue} = this.state;\n    const switchTabAndScrollToFirstOption = () => {\n      this.setState({currentTabValue: TAB_VALUE.OPTIONS}, () => {\n        this.firstMissingRequiredOptionRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\n      });\n    };\n    const switchTabAndScrollToFirstSwatch = () => {\n      this.setState({currentTabValue: TAB_VALUE.SWATCH}, () => {\n        this.firstMissingRequiredSwatchRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\n      });\n    };\n\n    if (currentTabValue === TAB_VALUE.FEATURES) {\n      this.firstMissingRequiredOptionRef.current\n      ? switchTabAndScrollToFirstOption()\n      : switchTabAndScrollToFirstSwatch();\n    }\n    if (currentTabValue === TAB_VALUE.OPTIONS) {\n      this.firstMissingRequiredOptionRef.current\n      ? this.firstMissingRequiredOptionRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' })\n      : switchTabAndScrollToFirstSwatch();\n    }\n    if (currentTabValue === TAB_VALUE.SWATCH) {\n      this.firstMissingRequiredSwatchRef.current\n      ? this.firstMissingRequiredSwatchRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' })\n      : switchTabAndScrollToFirstOption();\n    }\n  }\n\n  public render() {\n\n    const {\n      t,\n      dispatch,\n      expanded,\n      productFilters,\n      classes,\n      matchingProduct,\n      series,\n      selectedDrawing,\n      selectedCategoryIdWhiteList,\n      locale,\n      checkProductsAndAttributesLoading,\n      productFiltersForSelectedSeries,\n      seriesSpecificFilterKeys,\n      seriesSpecificFilterValuesArray,\n      config,\n      specType,\n      currencyType,\n      specOrOfficeLocation,\n      ungatedCurrency,\n      spec,\n      selfFailedRulesLoading,\n      editProductIndex,\n      rulesModalOpen,\n      addButtonText,\n      amplitudeData,\n      // recommendedSpecProducts,\n      mode,\n      isGuestUser,\n      session,\n      site,\n      hasSpecAssistAcl,\n      brandsToHidePrice,\n      header,\n      onToggleExpand,\n      specToolSeriesLinkTemplate = '',\n      appId,\n      selectedSeriesSpecificInitDisabledSelections,\n    } = this.props;\n    const {\n      productIsNotCompliant,\n    } = this.state;\n\n    const isSpecTool = site === SiteName.spec;\n\n    const {currentTabValue, timeStamp, featuresTabUsage, optionsTabUsage, showPrice, showSuffix, swatchTabUsage, includeAlternates} = this.state;\n    const TabPanel = ({ children, tabValueString, value, ...other }: ITabPanelProps) => {\n      return (\n        <Grid\n          hidden={tabValueString !== value}\n          {...other}\n        >\n          {children}\n        </Grid>\n      );\n    };\n\n    const seriesId = series?.get('id');\n    const seriesStatus = series?.get('status');\n    const resetButtonProps = !productFiltersForSelectedSeries.isEmpty()\n      ? {\n        color: 'primary' as 'primary',\n        disabled: false,\n      }\n      : {\n        color: 'default' as 'default',\n        disabled: true,\n      };\n    const product: IMap<Product> = matchingProduct.getIn(['product', 0]);\n    const status = product && product.get('status');\n    const isNotActive = status !== 'active';\n\n    const pumpCurveImageId = product != null\n      ? this.getMediaFileIdByRegionLocaleOrFallback(product, 'pump_curve')\n      : this.getMediaFileIdByRegionLocaleOrFallback(series, 'pump_curve');\n\n    const fanCurveImageId = product != null\n      ? this.getMediaFileIdByRegionLocaleOrFallback(product, 'fan_curve')\n      : this.getMediaFileIdByRegionLocaleOrFallback(series, 'fan_curve');\n\n    const epdFileId = product != null\n      ? this.getMediaFileIdByRegionLocaleOrFallback(product, 'epd')\n      : this.getMediaFileIdByRegionLocaleOrFallback(series, 'epd');\n\n    const configurationsFileId = product != null\n      ? this.getMediaFileIdByRegionLocaleOrFallback(product, 'configurations')\n      : this.getMediaFileIdByRegionLocaleOrFallback(series, 'configurations');\n\n    const hasWaterSenseAttribute = product != null ? product.getIn(['attributes', 'watersense']) : series.getIn(['attributes', 'watersense']);\n\n    const attributeWhitelist = matchingProduct.get('attribute');\n\n    // const sameProductasEdited = selectedDrawing?.getIn(['products', editProductIndex, 'id']) === product?.get('id');\n    const sameProductasEdited = false;\n\n    let addProductToDrawingButtonProps;\n    if (specType === 'AmpFeaturedProductsConfigurator') {\n      addProductToDrawingButtonProps = checkProductsAndAttributesLoading || selfFailedRulesLoading\n        ? {\n            color: 'default' as 'default',\n            disabled: true,\n          }\n        : this.firstMissingRequiredOptionRef.current || this.firstMissingRequiredSwatchRef.current\n          ? {\n              color: 'primary' as 'primary',\n              disabled: false,\n            }\n          : product\n            ? {\n                color: 'primary' as 'primary',\n                disabled: false,\n              }\n            : {\n                color: 'default' as 'default',\n                disabled: true,\n              };\n    } else {\n      addProductToDrawingButtonProps = checkProductsAndAttributesLoading || selfFailedRulesLoading\n        ? {\n            color: 'default' as 'default',\n            disabled: true,\n          }\n        : this.firstMissingRequiredOptionRef.current || this.firstMissingRequiredSwatchRef.current\n          ? {\n              color: 'primary' as 'primary',\n              disabled: false,\n            }\n          : (product == null || (specType !== 'quoteProductConfigurator' && mode !== Mode.productCatalogue && selectedDrawing == null) || isNotActive || sameProductasEdited || seriesStatus !== 'active')\n            ? {\n                color: 'default' as 'default',\n                disabled: true,\n              }\n            : {\n                color: 'primary' as 'primary',\n                disabled: false,\n              };\n    }\n\n    let addProductToDrawingButtonLabel = 'SeriesPanel.addToDrawing';\n    let addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingHint';\n    if (selectedDrawing == null) {\n      addProductToDrawingButtonLabel = 'SeriesPanel.addToDrawingNoDrawing';\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingNoDrawingHint';\n    } else if (product == null) {\n      addProductToDrawingButtonLabel = 'SeriesPanel.addToDrawingNoProduct';\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingNoProductHint';\n    } else if (status === 'discontinued') {\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingHintForDiscontinuedProduct';\n    } else if (status === 'deleted') {\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingHintForDeletedProduct';\n    } else if (status === 'archived') {\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingHintForArchivedProduct';\n    } else if (sameProductasEdited) {\n      addProductToDrawingTooltipLabel = 'SeriesPanel.addToDrawingSameProductAsEdited';\n    }\n\n    const seriesAttributes = series.get('attributes');\n    const whiteListedAttributesAndOptions = selectedCategoryIdWhiteList && !selectedCategoryIdWhiteList.isEmpty()\n      ? OrderedMap<string, IMap<Attribute>>().withMutations((mapCtx) => {\n        selectedCategoryIdWhiteList.forEach((categoryId) => {\n          const seriesAttribute = seriesAttributes && seriesAttributes.get(categoryId);\n          if (seriesAttribute != null) {\n            mapCtx.set(categoryId, seriesAttributes.get(categoryId));\n          }\n        });\n      })\n      : seriesAttributes;\n\n    interface IAttributesAndOptions {\n      attributes: OrderedMap<string, IMap<Attribute>>;\n      options: OrderedMap<string, IMap<Attribute>>;\n    }\n\n    const attributesAndOptions: IMap<IAttributesAndOptions> = (fromJS({ attributes: OrderedMap<string, IMap<Attribute>>(), options: OrderedMap<string, IMap<Attribute>>() }) as IMap<IAttributesAndOptions>).withMutations(\n      (attributesAndOptionsCtx: IMap<IAttributesAndOptions>) => {\n        whiteListedAttributesAndOptions && whiteListedAttributesAndOptions.forEach( // tslint:disable-line\n          (\n            attr,\n            attrKey\n          ) => {\n            if (attr.get('isAttribute')) {\n              attributesAndOptionsCtx.update('attributes', (attrMap) => attrMap.set(attrKey, attr));\n            } else {\n              attributesAndOptionsCtx.update('options', (attrMap) => attrMap.set(attrKey, attr));\n            }\n          },\n        );\n        seriesAttributes && seriesAttributes.forEach((attr, attrKey) => { // tslint:disable-line\n          if (!attr.get('isAttribute')) {\n            attributesAndOptionsCtx.update('options', OrderedMap<string, IMap<Attribute>>(), (attrMap) => {\n              return !attrMap.has(attrKey) ? attrMap.set(attrKey, attr) : attrMap;\n            });\n          }\n        });\n      }\n    );\n\n    const imgSize = 80;\n    const media = (\n      product != null\n        ? product.getIn(['file', 'images', 'main', 'fileId'])\n        : series.getIn(['file', 'images', 'main', 'fileId'])\n    ) + `|fit:${imgSize},${imgSize}`;\n\n    const isAtsSpecTool = appId === SPEC_TOOL_ID;\n    const enableAlternativeFeature = isAtsSpecTool && !isGuestUser;\n\n    const availabilityByAppId = product && product.getIn(['unavailability', appId, 'country']);\n    const availabilityByDefaultLocation = product && product.getIn(['unavailability', 'default', 'country']);\n\n    const productUnavailability = (availabilityByAppId ? availabilityByAppId : availabilityByDefaultLocation) ?? List();\n\n    const productPurchasability = product && product.getIn(['purchasability', 'country']);\n\n    let dynamicExpansionPanelProps;\n    if (specType === 'dalProductConfigurator') {\n      dynamicExpansionPanelProps = {\n        elevation: 2,\n      };\n    } else if (specType !== 'quoteProductConfigurator' && specType !== 'AmpFeaturedProductsConfigurator') {\n      dynamicExpansionPanelProps = {\n        onChange: this.handleChange(series),\n      };\n    } else {\n      dynamicExpansionPanelProps = {\n        elevation: 0,\n      };\n    }\n\n    let dynamicExpansionPanelSummaryProps;\n    if (specType === 'dalProductConfigurator') {\n      dynamicExpansionPanelSummaryProps = {\n        expandIcon: <FontAwesomeIcon style={{ width: '0.7rem' }} icon='chevron-down'  />,\n        onClick: onToggleExpand\n      };\n\n    } else if (specType !== 'quoteProductConfigurator' && specType !== 'AmpFeaturedProductsConfigurator') {\n      dynamicExpansionPanelSummaryProps = {\n        expandIcon: <FontAwesomeIcon style={{ width: '0.7rem' }} icon='chevron-down' />\n      };\n    } else {\n      dynamicExpansionPanelSummaryProps = {\n        className: classes.expansionPanelSummary\n      };\n    }\n\n    // Price displayed in Project Tracker\n    const productOrSeriesPrice = key => {\n      if (currencyType === 'CAD' || currencyType === 'USD') {\n        // Canada or USA\n        const _isPOA = (product != null ? product : series).getIn(['price', 'default', currencyType, 'isPoa']);\n        if (_isPOA && key === 'list') {\n          return 'P.O.A.';\n        } else {\n          return (product != null ? product : series).getIn(['price', 'default', currencyType, key]) || '-';\n        }\n      } else {\n        return '-';\n      }\n    };\n    // Price displayed in Spec Tool\n    const isPoaDisplay = <span>{t('SeriesPanel.POA')}<Tooltip title={t('SeriesPanel.specPOATooltip')} classes={{popper: classes.tooltip}}><InfoIcon className={classes.infoIcon}/></Tooltip></span>;\n    const productOrSeriesPriceForSpec = (product != null ? product : series).get('price');\n    // CAN 6251999 239\n    // USA 6252001 240\n    // grab the price per region (project location or if no location then use user office location) USA or Canada\n    // if spec is standalone (no location), we use officeLocation instead\n    // if location is international (outside USA or Canada) then list price is -\n    // currency will determined by the region as well\n    // CAN will use CAD\n    // USA will use USD\n    // use only list price\n    const countryId = specOrOfficeLocation.getIn(['country', 'id']);\n    const currencyBySpecOrOfficeRegion = isGuestUser ? ungatedCurrency : countryId === GEOLOCATION_ID.canada ? 'CAD' : 'USD';\n    const isPOA = productOrSeriesPriceForSpec.getIn(['default', currencyBySpecOrOfficeRegion, 'isPoa']);\n    const canadaLocationId = GEOLOCATION_ID.canada;\n    const usaLocationId = GEOLOCATION_ID.usa;\n    const productOrSeriesListPrice = key => {\n      if (countryId === canadaLocationId || countryId === usaLocationId || isGuestUser) {\n        // Canada or USA\n        const price = isPOA\n                      ? isPoaDisplay\n                      : productOrSeriesPriceForSpec.getIn(['default', currencyBySpecOrOfficeRegion, key]);\n        return price ? price : '-';\n      } else {\n        // international\n        return '-';\n      }\n    };\n\n    const priceDisplay = () => {\n      if (brandsToHidePrice?.get((product || series).get('brandId'))) {\n        return null;\n      }\n\n      if (specType === 'quoteProductConfigurator') {\n        return <Typography>{t('SeriesPanel.price')}: {t('SeriesPanel.list')} {productOrSeriesPrice('list') === 'P.O.A.' ? t('SeriesPanel.POA') : productOrSeriesPrice('list')}, {t('SeriesPanel.sell')} {productOrSeriesPrice('sell')}, {t('SeriesPanel.cost')} {productOrSeriesPrice('cost')}</Typography>;\n      } else if (specType === 'AmpFeaturedProductsConfigurator') {\n        return <Typography>{t('SeriesPanel.listPrice')}: {productOrSeriesListPrice('list')} {isNaN(productOrSeriesListPrice('list')) ? null : currencyBySpecOrOfficeRegion}</Typography>;\n      } else {\n        if (product) {\n          const listPrice = productOrSeriesListPrice('list');\n          const listLastUpdatedAt = (product != null ? product : series).getIn(['price', 'default', currencyBySpecOrOfficeRegion, 'listLastUpdatedAt']);\n          if (isPOA) {\n            return <Typography>{t('SeriesPanel.listPrice')}: {isPoaDisplay}</Typography>;\n          }\n          return (\n            <Tooltip title={Number(listPrice) > 0 ? t('SeriesPanel.lastPriceUpdated', { date: listLastUpdatedAt ? utcToLocal(listLastUpdatedAt) : '-'  }) : t('SeriesPanel.priceNotAvailable')}>\n              <Typography>{t('SeriesPanel.listPrice')}: {Number(listPrice) > 0 ? `${listPrice} ${currencyBySpecOrOfficeRegion}` : '-'}</Typography>\n            </Tooltip>\n          );\n        } else {\n          const minListPrice = series.getIn(['minPrice', 'default', currencyBySpecOrOfficeRegion, 'list']);\n          const validMinListPrice = Number(minListPrice) > 0;\n          const minListPriceLastUpdatedAt = series.getIn(['minPrice', 'default', currencyBySpecOrOfficeRegion, 'lastUpdatedAt']);\n          const date = validMinListPrice\n            ? minListPriceLastUpdatedAt\n              ? utcToLocal(minListPriceLastUpdatedAt)\n              : '-'\n            : '';\n          const title = validMinListPrice ? t('SeriesPanel.lastPriceUpdated', { date }) : t('SeriesPanel.priceNotAvailable');\n          const price = validMinListPrice\n            ? `${minListPrice} ${currencyBySpecOrOfficeRegion}`\n            : '-';\n\n          if (isPOA && !validMinListPrice) {\n            return <Typography>{t('SeriesPanel.listPrice')}: {isPoaDisplay}</Typography>;\n          }\n          return (\n            <Tooltip title={title}>\n              <Typography>{t('SeriesPanel.listPrice')}: {price}</Typography>\n            </Tooltip>\n          );\n        }\n      }\n    };\n\n    const logosDisplay = () => {\n      if (!isSpecTool) {\n        return null;\n      }\n\n      return (\n        <Grid container={true} direction='row' alignItems='center' style={{ marginTop: 4 }}>\n          {\n            hasWaterSenseAttribute && (\n              <Tooltip title={t('SeriesPanel.waterSenseTooltip')}>\n                <img src={waterSenseLogo} alt='water sense logo' style={{ marginRight: 10 }} />\n              </Tooltip>\n            )\n          }\n          {\n            epdFileId &&\n              <Tooltip title={t('SeriesPanel.epdTooltip')}>\n                <Chip\n                  icon={<EcoIcon fontSize='small' />}\n                  label={<Typography variant='body1'>{t('SeriesPanel.epd')}</Typography>}\n                  size={'small'}\n                />\n              </Tooltip>\n          }\n        </Grid>\n      );\n    };\n\n    // pimStatus\n    const draftProduct = product && product.get('draft');\n    const draftSeries = series && series.get('draft');\n    const seriesPimStatus = series && series.get('pimStatus');\n    const productPimStatus = product && product.get('pimStatus');\n    const pimStatus = productPimStatus ? productPimStatus : seriesPimStatus;\n\n    // status (active, discontinued, or deleted)\n    const productStatus = product && product.get('status');\n    const availabilityStatus = productStatus ? productStatus : seriesStatus;\n\n    // for tab conditions\n    const isAtLeastOneRequiredOption = attributesAndOptions.get('options')?.find(option => option.get('require') && !option.get('useSwatch'))?.size > 0;\n    const isAtLeastOneRequiredSwatch = attributesAndOptions.get('options')?.find(option => option.get('require') && option.get('useSwatch'))?.size > 0;\n    const disableOptionsTab = attributesAndOptions.get('options')?.filter(option => !option.get('useSwatch'))?.size === 0;\n    const disableSwatchPreviewTab = attributesAndOptions.get('options')?.find(option => option.get('useSwatch')) === undefined;\n\n    const displayAttributeSubheader = specType !== 'quoteProductConfigurator' && specType !== 'AmpFeaturedProductsConfigurator';\n    const stillHaveMissingHardRequire = this.firstMissingRequiredOptionRef.current || this.firstMissingRequiredSwatchRef.current;\n\n    const handleShowPrice = () => {\n      this.setState({showPrice: !this.state.showPrice});\n    };\n\n    const handleShowSuffix = () => {\n      this.setState({showSuffix: !this.state.showSuffix});\n    };\n\n    const generateInputProps = ({ attribute,\n      key,\n      value }) => generateProps({\n        productFilters,\n        productFiltersForSelectedSeries,\n        attributeWhitelist,\n        seriesSpecificFilterKeys,\n        seriesSpecificFilterValuesArray,\n        checkProductsAndAttributesLoading,\n        checkedProp: this.checked,\n        seriesId,\n        seriesStatus,\n        attribute,\n        key,\n        value,\n        initDisabled: selectedSeriesSpecificInitDisabledSelections?.get(attribute.get('key'))?.includes(value.get('value')),\n      });\n\n    return (\n      <ExpansionPanel\n        key={seriesId}\n        expanded={expanded}\n        {...dynamicExpansionPanelProps}\n        style={expanded ? { margin: '16px 0' } : null}\n        TransitionProps={{ unmountOnExit: true, mountOnEnter: true }}\n      >\n        <ExpansionPanelSummary {...dynamicExpansionPanelSummaryProps}>\n          {\n            header\n              ? header\n              : (\n                  <Grid\n                    container={true}\n                    wrap='nowrap'\n                  >\n                    <Grid\n                      item={true}\n                      md={2}\n                    >\n                      <Image\n                        src={media}\n                        width={`${imgSize}px`}\n                        aspectRatio={'100%'}\n                        fromService={true}\n                      />\n                    </Grid>\n                    <Grid\n                      item={true}\n                      md={4}\n                    >\n                      <Typography className={classes.heading}>\n                        {series.get('brand')}\n                      </Typography>\n\n                      <Grid container={true} alignItems='center' wrap='nowrap'>\n                        <Typography className={classes.seriesName}>\n                          {series.get('name')}\n                        </Typography>\n                        {\n                          isSpecTool && (\n                            <CopyLinkButton\n                              tooltip={t('SeriesPanel.copySeriesLinkTooltip')}\n                              iconButtonProps={{ size: 'small', style: { marginLeft: 8 } }}\n                              getLink={() => buildSeriesShareLink({\n                                seriesLinkTemplate: specToolSeriesLinkTemplate,\n                                seriesId,\n                                appId,\n                                mode,\n                                spec,\n                              })}\n                              // only track a share once the link is actually on the clipboard\n                              onCopied={(linkShared) => {\n                                const customData = {\n                                  seriesId,\n                                  seriesName: series.get('name'),\n                                  brandId: series.get('brandId'),\n                                  brandName: series.get('brand'),\n                                  categoryId: series.get('category'),\n                                  categoryName: series.get('categoryName'),\n                                  linkShared,\n                                };\n\n                                amplitude.logEvent(AMPLITUDE_EVENT.shareConfiguratorLink, amplitudeData(customData));\n\n                                const trackingData = {\n                                  eventType: ATS_EVENT.shareConfiguratorLink,\n                                  defaultData: amplitudeData(),\n                                  customData,\n                                };\n                                dispatch(new CreateAnalyticsEventsAction({\n                                  trackingData\n                                }));\n                              }}\n                            >\n                              <ShareIcon fontSize='small' />\n                            </CopyLinkButton>\n                          )\n                        }\n                      </Grid>\n\n                      <Typography className={classes.subtitle1}>\n                        {product != null ? product.get('description') : series.get('description')}\n                      </Typography>\n                    </Grid>\n                    <Grid\n                      item={true}\n                      md={4}\n                    >\n                      <Grid\n                        container={true}\n                        alignItems='center'\n                        wrap='nowrap'\n                      >\n                        {\n                          product != null\n                            ? <div style={{ overflow: 'hidden' }}>\n                                <Typography display='inline'>{t('SeriesPanel.modelProduct') }</Typography> <Typography color='primary' display='inline'>{product.get('productNumber')}</Typography>\n                              </div>\n                            : <div style={{ overflow: 'hidden' }}>\n                                <Typography display='inline'>{t('SeriesPanel.modelSeries') }</Typography> <Typography color='primary' display='inline'>{series.get('productNumber')}</Typography>\n                              </div>\n                        }\n                        {\n                          (draftProduct || draftSeries) &&\n                          <Grid\n                            className={classes.statusChip}\n                          >\n                            <DraftStatusChip\n                              pimStatus={pimStatus}\n                            />\n                          </Grid>\n                        }\n                        {\n                          (availabilityStatus !== 'active') &&\n                          <Grid\n                            className={classes.statusChip}\n                          >\n                            <Chip\n                              style={{ borderRadius: '3px' }}\n                              label={t(`status.${availabilityStatus}`)}\n                              disabled={true}\n                              size='small'\n                            />\n                          </Grid>\n                        }\n                      </Grid>\n                      {priceDisplay()}\n                      {\n                        !isSpecTool && (\n                          <Grid\n                            container={true}\n                            direction='row'\n                            wrap='nowrap'\n                          >\n                            <Typography style={{ marginRight: 8 }}>{t('SeriesPanel.country')}: </Typography>\n                            <RegionFlags\n                              series={product || series}\n                              justify='flex-start'\n                              flagWidth={26}\n                            />\n                          </Grid>\n                        )\n                      }\n                      {logosDisplay()}\n                    </Grid>\n                    <Grid\n                      container={true}\n                      item={true}\n                      md={2}\n                      alignItems='center'\n                      onClick={(e) => e.stopPropagation()}\n                    >\n                      <Button\n                        color='primary'\n                        href={this.manufacturerCutsheetSrc()}\n                        target={'_blank'}\n                        disabled={( product && this.getMediaFileIdByRegionLocaleOrFallback(product, 'manufacturer_cutsheet')\n                                    || this.getMediaFileIdByRegionLocaleOrFallback(series, 'manufacturer_cutsheet')\n                                  ) ? false\n                                    : true\n                                }\n                      >\n                        <FontAwesomeIcon\n                          icon='file-alt'\n                          className={classes.viewMediaIcon}\n                        />\n                        {t('SeriesPanel.viewSpecSheet')}\n                      </Button>\n                      {(isSpecTool && pumpCurveImageId) &&\n                        <Button\n                          color='primary'\n                          style={{textAlign: 'left'}}\n                          onClick={() => {\n                            amplitude.logEvent(AMPLITUDE_EVENT.viewPumpCurveClicked, amplitudeData({\n                              seriesId,\n                              seriesName: series.get('name'),\n                            }));\n                            dispatch(new SetOverlayComponentPropsAction({\n                              id: CURVE_PREVIEW_MODAL_ID,\n                              props: {\n                                label: t('SeriesPanel.pumpCurvePreview'),\n                                modelNumber: product ? product.get('productNumber') : series.get('productNumber'),\n                                imageId: pumpCurveImageId\n                              }\n                            }));\n                            dispatch(new ToggleOverlayComponentAction({open: true, id: CURVE_PREVIEW_MODAL_ID}));\n                          }}\n                        >\n                          <ShowChartIcon className={classes.viewMediaIcon} style={{marginRight: 8}} />\n                          {t('SeriesPanel.viewPumpCurve')}\n                        </Button>\n                      }\n                      {(isSpecTool && fanCurveImageId) &&\n                        <Button\n                          color='primary'\n                          style={{textAlign: 'left'}}\n                          onClick={() => {\n                            amplitude.logEvent(AMPLITUDE_EVENT.viewFanCurveClicked, amplitudeData({\n                              seriesId,\n                              seriesName: series.get('name'),\n                            }));\n                            dispatch(new SetOverlayComponentPropsAction({\n                              id: CURVE_PREVIEW_MODAL_ID,\n                              props: {\n                                label: t('SeriesPanel.fanCurvePreview'),\n                                modelNumber: product ? product.get('productNumber') : series.get('productNumber'),\n                                imageId: fanCurveImageId\n                              }\n                            }));\n                            dispatch(new ToggleOverlayComponentAction({open: true, id: CURVE_PREVIEW_MODAL_ID}));\n                          }}\n                        >\n                          <ShowChartIcon className={classes.viewMediaIcon} style={{marginRight: 8}} />\n                          {t('SeriesPanel.viewFanCurve')}\n                        </Button>\n                      }\n                      {(isSpecTool && configurationsFileId) &&\n                        <Button\n                          color='primary'\n                          style={{textAlign: 'left'}}\n                          onClick={() => {\n                            amplitude.logEvent(AMPLITUDE_EVENT.viewConfigurationsClicked, amplitudeData({\n                              seriesId,\n                              seriesName: series.get('name'),\n                            }));\n                            dispatch(new SetOverlayComponentPropsAction({\n                              id: CURVE_PREVIEW_MODAL_ID,\n                              props: {\n                                label: t('SeriesPanel.configurationGuide'),\n                                modelNumber: product ? product.get('productNumber') : series.get('productNumber'),\n                                imageId: configurationsFileId\n                              }\n                            }));\n                            dispatch(new ToggleOverlayComponentAction({open: true, id: CURVE_PREVIEW_MODAL_ID}));\n                          }}\n                        >\n                          <ShuffleIcon className={classes.viewMediaIcon} style={{marginRight: 8}} />\n                          {t('SeriesPanel.viewConfigurations')}\n                        </Button>\n                      }\n                    </Grid>\n                  </Grid>\n                )\n          }\n        </ExpansionPanelSummary>\n        <ExpansionPanelDetails classes={{\n          root: classes.ExpansionPanelDetailsRoot,\n        }}>\n          {\n            (isSpecTool && productIsNotCompliant) && (\n              <Grid container={true} wrap='nowrap' justify='center' alignItems='center' className={classes.productIsNotCompliantWarning}>\n                <WarningRoundedIcon className={classes.notCompliantWarningIcon} />\n                <Typography color='textPrimary' variant='body2'>\n                  {t('SeriesPanel.productIsNotCompliantWarning')}\n                </Typography>\n              </Grid>\n            )\n          }\n          <Divider light={true} />\n            <Tabs\n              value={currentTabValue}\n              onChange={(event, selectedTab) => {\n                // update currentTabValue, new timeStamp, add TabUsage\n                const timeStampOnChange = Date.now();\n                const addedTabUsage = timeStampOnChange - timeStamp;\n                this.setState({\n                  ...this.state,\n                  currentTabValue: selectedTab,\n                  timeStamp: timeStampOnChange,\n                  featuresTabUsage: currentTabValue === 'features' ? featuresTabUsage + addedTabUsage : featuresTabUsage,\n                  optionsTabUsage: currentTabValue === 'options' ? optionsTabUsage + addedTabUsage : optionsTabUsage,\n                  swatchTabUsage: currentTabValue === 'options' ? swatchTabUsage + addedTabUsage : swatchTabUsage\n                });\n              }}\n              textColor='primary'\n              classes={{\n                root: classes.tabs,\n                fixed: classes.tabs\n              }}\n              style={{\n                borderBottom: '1px lightgray solid'\n              }}\n              TabIndicatorProps={{\n                style: {\n                  backgroundColor: '#F5F5F5',\n                  height: 1,\n                  bottom: -1\n                }\n              }}\n            >\n              <Tab\n                label={t('SeriesPanel.features')}\n                value={TAB_VALUE.FEATURES}\n                classes={{\n                  selected: classes.selectedTab\n                }}\n              />\n              <Tab\n                label={<Tooltip title={disableOptionsTab ? t('SeriesPanel.noOptionsAvailable') : ''}><span>{t('SeriesPanel.options') + (isAtLeastOneRequiredOption ? ' *' : '')}</span></Tooltip>}\n                style={{pointerEvents: 'auto'}} // this is needed for tooltip to work on disabled tab\n                disabled={disableOptionsTab}\n                value={TAB_VALUE.OPTIONS}\n                classes={{\n                  selected: classes.selectedTab\n                }}\n              />\n              {\n                !disableSwatchPreviewTab ?\n                <Tab\n                  label={<Tooltip title={disableSwatchPreviewTab ? t('SeriesPanel.noOptionsAvailable') : ''}><span>{t('SeriesPanel.swatchPreview') + (!disableSwatchPreviewTab && isAtLeastOneRequiredSwatch ? ' *' : '')}</span></Tooltip>}\n                  style={{pointerEvents: 'auto'}} // this is needed for tooltip to work on disabled tab\n                  disabled={disableSwatchPreviewTab}\n                  value={TAB_VALUE.SWATCH}\n                  classes={{\n                    selected: classes.selectedTab\n                  }}\n                />\n                :\n                null\n              }\n            </Tabs>\n            <TabPanel tabValueString={currentTabValue} value={TAB_VALUE.FEATURES} className={classes.tabContentContainer}>\n              <Typography variant='h6' className={classes.attrOptionTitle}>\n                {t('SeriesPanel.features')}\n              </Typography>\n              <Grid\n                className={classes.expansionContent}\n              >\n                {\n                  attributesAndOptions.get('attributes').map((attribute, key) => {\n                    const attrName = attribute.get('name');\n                    const attrFirstValue: IMap<AttributeValue> = attribute.getIn(['values', 0], Map());\n                    const attrDescription = attrFirstValue.get('description');\n                    const attrImage = attrFirstValue.getIn(['media', 'images', 'main']);\n\n                    {\n                      return (\n                        <AttributeItem\n                          key={key}\n                          attrName={attrName}\n                          attrDescription={attrDescription}\n                          attrImage={attrImage}\n                        />\n                      );\n                    }\n                  }).valueSeq()\n                }\n              </Grid>\n            </TabPanel>\n            <TabPanel tabValueString={currentTabValue} value={TAB_VALUE.OPTIONS} className={classes.tabContentContainer}>\n              {attributesAndOptions.get('options').size !== 0 && <Grid\n                container={true}\n                className={classes.optionsContainer}\n                spacing={5}\n                style={{paddingTop: 20}}\n              >\n                <OptionsTable\n                  options={attributesAndOptions.get('options')}\n                  generateInputProps={generateInputProps}\n                  descriptionsOnly={specType !== 'quoteProductConfigurator'}\n                  currencyType={currencyType}\n                  series={series}\n                  seriesId={seriesId}\n                  attributeSelection={productFiltersForSelectedSeries}\n                  attributeWhitelist={attributeWhitelist}\n                  hasProduct={Boolean(product)}\n                  productFilters={productFilters}\n                  showPrice={showPrice}\n                  handleShowPrice={handleShowPrice}\n                  showSuffix={showSuffix}\n                  handleShowSuffix={handleShowSuffix}\n                  firstMissingRequiredOptionRef={this.firstMissingRequiredOptionRef}\n                  specType={specType}\n                  displayAttributeSubheader={displayAttributeSubheader}\n                />\n              </Grid>}\n            </TabPanel>\n            {\n              !disableSwatchPreviewTab ?\n                <TabPanel tabValueString={currentTabValue} value={TAB_VALUE.SWATCH} className={classes.tabContentContainer}>\n                  {attributesAndOptions.get('options').size !== 0 && <Grid\n                    container={true}\n                    className={classes.optionsContainer}\n                    spacing={5}\n                    style={{paddingTop: 20}}\n                  >\n                    <Grid container={true} justify='flex-end' style={{ marginTop: 16 }}>\n                      {specType === 'quoteProductConfigurator' && <FormControlLabel\n                        style={{opacity: showPrice ? 1 : 0.5}}\n                        control={<Switch\n                        color='primary'\n                        checked={showPrice}\n                        value={showPrice}\n                        onChange={() => {\n                          handleShowPrice();\n                        }}\n                        />}\n                        label={showPrice ? t('quoteProductConfigurator.hidePrice') : t('quoteProductConfigurator.showPrice')}\n                      />}\n                    </Grid>\n                    <SwatchList\n                      options={attributesAndOptions.get('options')}\n                      generateInputProps={generateInputProps}\n                      attributeSelection={productFiltersForSelectedSeries}\n                      attributeWhitelist={attributeWhitelist}\n                      hasProduct={Boolean(product)}\n                      productFilters={productFilters}\n                      showPrice={showPrice}\n                      currencyType={currencyType}\n                      firstMissingRequiredSwatchRef={this.firstMissingRequiredSwatchRef}\n                      displayAttributeSubheader={displayAttributeSubheader}\n                    />\n                  </Grid>}\n                </TabPanel>\n                :\n                null\n            }\n          {specType === 'quoteProductConfigurator' && showPrice &&\n          <Grid className={classes.priceBreakdownContainer}>\n            <PriceBreakdownTable\n              series={series}\n              product={product}\n              currencyType={currencyType}\n            />\n          </Grid>\n          }\n          <Divider light={true} />\n          {\n            specType === 'dalProductConfigurator'\n             ? (\n                <Grid\n                  container={true}\n                  direction='row'\n                  wrap='nowrap'\n                  justify={stillHaveMissingHardRequire ? 'space-between' : 'flex-end'}\n                  className={classes.expansionDetailsButtonContainer}\n                >\n                  {\n                    stillHaveMissingHardRequire ? (\n                      <span className={classes.dalConfigureProductPrompt}>\n                        <InfoIcon color='primary' style={{ marginRight: 8 }} />\n                        <Typography>\n                          {'Configure the options above to generate the product model number'}\n                        </Typography>\n                      </span>\n                    ) : null\n                  }\n                  <Button\n                    onClick={this.clearFilters(seriesId)}\n                    style={isAtsSpecTool ? null : { marginRight: 40 }}\n                    {...resetButtonProps}\n                  >\n                    {t('SeriesPanel.reset')}\n                  </Button>\n                </Grid>\n             )\n             : (\n                <Grid\n                  container={true}\n                  direction='row'\n                  wrap='wrap'\n                  justify='flex-end'\n                  className={classes.expansionDetailsButtonContainer}\n                >\n                  <Button\n                    onClick={this.clearFilters(seriesId)}\n                    style={isAtsSpecTool ? null : { marginRight: 40 }}\n                    {...resetButtonProps}\n                  >\n                    {t('SeriesPanel.reset')}\n                  </Button>\n                  {\n                    isGuestUser ? !stillHaveMissingHardRequire ? (\n                      <Button\n                        style={{ marginLeft: 16, marginRight: 16 }}\n                        onClick={(e) => {\n                          if (selectedDrawing) {\n                            this.handleAddToDrawing(product);\n                          } else {\n                            const specId = session.get('guestSpecId');\n                            dispatch(new ProductCatalogueCreateDrawingAction({\n                              specId,\n                              specType: 'spec',\n                              onSuccess: () => {\n                                this.handleAddToDrawing(product);\n                              }\n                            }));\n                          }\n                        }}\n                        variant='outlined'\n                        color='primary'\n                        {...addProductToDrawingButtonProps}\n                      >\n                        {checkProductsAndAttributesLoading || selfFailedRulesLoading ? <CircularProgress color='primary' size='1em' className={classes.addToDrawingBtnLoader} /> : null}\n                        {t('SeriesPanel.addToQuickSpec')}\n                      </Button>\n                    ) : (\n                        <Tooltip title={t('SeriesPanel.continueConfiguringTooltip')}>\n                          <Grid>\n                            <Button\n                                className={classes.addToDrawingBtn}\n                                onClick={(e) => {\n                                  this.handleGoToMissingRequiredOption();\n                                }}\n                                variant='outlined'\n                                color='primary'\n                                {...addProductToDrawingButtonProps}\n                            >\n                              {checkProductsAndAttributesLoading || selfFailedRulesLoading ? <CircularProgress color='primary' size='1em' className={classes.addToDrawingBtnLoader} /> : null}\n                              {t('SeriesPanel.continueConfiguring')}\n                            </Button>\n                          </Grid>\n                        </Tooltip>\n                    ) : (\n                        <>\n                          {(isAtsSpecTool && !hasSpecAssistAcl) &&\n                          <Tooltip title={enableAlternativeFeature ? '' : t('alternativeModal.disabledAlternativeFeatureTooltip')}>\n                            <span>\n                              <FormControlLabel\n                                  control={\n                                    <Checkbox\n                                        checked={includeAlternates}\n                                        onChange={(event) => this.setState({ includeAlternates: event.target.checked})}\n                                        color='primary'\n                                    />\n                                  }\n                                  disabled={!enableAlternativeFeature}\n                                  label={t('SeriesPanel.includeAlternatesCheckbox')}\n                                  className={classes.includeAlternates}\n                              />\n                            </span>\n                          </Tooltip>\n                          }\n                          <Tooltip\n                              title={\n                                stillHaveMissingHardRequire\n                                    ? t('SeriesPanel.continueConfiguringTooltip')\n                                    : specType === 'quoteProductConfigurator'\n                                        ? checkProductsAndAttributesLoading ? t('SeriesPanel.addToDrawingLoading') : matchingProduct.getIn(['product', 0]) ? t('quoteProductConfigurator.addToProductList') : t(addProductToDrawingTooltipLabel)\n                                        : specType === 'AmpFeaturedProductsConfigurator'\n                                            ? checkProductsAndAttributesLoading ? t('SeriesPanel.addToDrawingLoading') : matchingProduct.getIn(['product', 0]) ? addButtonText || 'Add Product' : t(addProductToDrawingTooltipLabel)\n                                            : checkProductsAndAttributesLoading ? t('SeriesPanel.addToDrawingLoading') : sameProductasEdited ? t(addProductToDrawingTooltipLabel) : ''\n                              }\n                          >\n                            <Grid>{/* required for tooltip to work on disabled button  */}\n                              {\n                                specType === 'quoteProductConfigurator'\n                                    ? (\n                                        <Button\n                                            className={classes.addToDrawingBtn}\n                                            onClick={(e) => {\n                                              if (this.firstMissingRequiredOptionRef.current || this.firstMissingRequiredSwatchRef.current) {\n                                                this.handleGoToMissingRequiredOption();\n                                              } else {\n                                                this.props.dispatch(new SeriesSpecificFilterAddAction({ filters: [], seriesId, }, series, true));\n                                                this.setState({ create: true });\n                                              }\n                                            }}\n                                            variant='outlined'\n                                            color='primary'\n                                            {...addProductToDrawingButtonProps}\n                                        >\n                                          {checkProductsAndAttributesLoading || selfFailedRulesLoading ? <CircularProgress color='primary' size='1em' className={classes.addToDrawingBtnLoader} /> : null}\n                                          {stillHaveMissingHardRequire ? t('SeriesPanel.continueConfiguring') : t('quoteProductConfigurator.addToProductList')}\n                                        </Button>\n                                    )\n                                    : specType === 'AmpFeaturedProductsConfigurator'\n                                        ? (\n                                            <Button\n                                                className={classes.addToDrawingBtn}\n                                                onClick={(e) => {\n                                                  if (this.firstMissingRequiredOptionRef.current || this.firstMissingRequiredSwatchRef.current) {\n                                                    this.handleGoToMissingRequiredOption();\n                                                  } else {\n                                                    this.props.dispatch(new SeriesSpecificFilterAddAction({ filters: [], seriesId, }, series, true));\n                                                    this.setState({ create: true });\n                                                  }\n                                                }}\n                                                variant='outlined'\n                                                color='primary'\n                                                {...addProductToDrawingButtonProps}\n                                            >\n                                              {checkProductsAndAttributesLoading || selfFailedRulesLoading ? <CircularProgress color='primary' size='1em' className={classes.addToDrawingBtnLoader} /> : null}\n                                              {stillHaveMissingHardRequire ? t('SeriesPanel.continueConfiguring') : addButtonText || 'Add Product'}\n                                            </Button>\n                                        )\n                                        : (\n                                            <Button\n                                                className={classes.addToDrawingBtn}\n                                                onClick={(e) => {\n                                                  if (stillHaveMissingHardRequire) {\n                                                    this.handleGoToMissingRequiredOption();\n                                                  } else if (mode === Mode.productCatalogue) {\n                                                    // add product and add alternative but because no spec and drawing yet, need to create or choose from existing first\n                                                    dispatch(new SetOverlayComponentPropsAction({\n                                                      id: ADD_PRODUCT_TO_DRAWING_MODAL_ID,\n                                                      props: {\n                                                        product,\n                                                        includeAlternates,\n                                                        handleAddToDrawing: this.handleAddToDrawing,\n                                                        handleAddToDrawingThenOpenAlternatives: this.handleAddToDrawingThenOpenAlternatives,\n                                                        productUnavailability,\n                                                        productPurchasability,\n                                                      }\n                                                    }));\n                                                    dispatch(new ToggleOverlayComponentAction({\n                                                      id: ADD_PRODUCT_TO_DRAWING_MODAL_ID,\n                                                      open: true\n                                                    }));\n                                                  } else {\n                                                    if (includeAlternates) {\n                                                      this.handleAlternativeFeatureClick(product);\n                                                      this.handleAddToDrawingThenOpenAlternatives(product, editProductIndex);\n                                                    } else {\n                                                      this.handleAddToDrawing(product);\n                                                    }\n                                                  }\n                                                }}\n                                                variant='outlined'\n                                                color='primary'\n                                                {...addProductToDrawingButtonProps}\n                                            >\n                                              {checkProductsAndAttributesLoading || selfFailedRulesLoading ? <CircularProgress color='primary' size='1em' className={classes.addToDrawingBtnLoader} /> : null}\n                                              {stillHaveMissingHardRequire ? t('SeriesPanel.continueConfiguring') : t('SeriesPanel.addProduct')}\n                                            </Button>\n                                        )\n                              }\n                            </Grid>\n                          </Tooltip>\n                          {specType === 'quoteProductConfigurator' && productOrSeriesPrice('list') === 'P.O.A.' &&\n                          <Grid container={true} direction='row' className={classes.warningMessage}>\n                            <WarningRoundedIcon className={classes.warning} />\n                            <Typography className={classes.warning}>{t('SeriesPanel.POAWarning')}</Typography>\n                          </Grid>\n                          }\n                        </>\n                    )\n                  }\n                </Grid>\n              )\n          }\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  private handleChange = (series: IMap<Series>) => (event: React.MouseEvent<HTMLElement>, expanded: boolean) => {\n    const {\n      dispatch,\n      productFilters,\n      seriesSpecificFilters\n    } = this.props;\n\n    dispatch(new UpdateSelfFailedRulesLoadingAction(false));\n    dispatch(new SelectSeriesAction(expanded ? series.get('id') : -1));\n    // when expand series, what selected on product filter, apply to seriesSpecificFilters\n    // so the only source that control checked value on series options is seriesSpecificFilters\n    if (expanded) {\n      const expandedSeriesId = series.get('id');\n      const filters =  productFilters.map((filter, filterKey) => {\n        const optionValueAlreadyCheck = seriesSpecificFilters.getIn([expandedSeriesId, filterKey])?.first()?.get('value'); // check if the filter already has value\n        const isFeatures = series.getIn(['attributes', filterKey, 'isAttribute']); // check if it's features then no need to include in filter\n        const filterOptionValue = filter.first(); // currently only 1 filter value per attribute, if this changes to more than 1, we can't use .first()\n        if (isFeatures || !filterOptionValue || optionValueAlreadyCheck) {\n          return;\n        }\n        return {\n          multi: filterOptionValue.get('multi'),\n          key: filterOptionValue.get('key'),\n          value: filterOptionValue.get('value'),\n          label: filterOptionValue.get('label'),\n          optionValueId: series.getIn(['attributes', filterKey, 'values'])?.find(optionValue => optionValue.get('value') === filterOptionValue.get('value'))?.get('id')\n        };\n      }).valueSeq().toJS().filter(x => x);\n      dispatch(new SeriesSpecificFilterAddAction({\n        filters,\n        seriesId: expandedSeriesId\n      }));\n    }\n  }\n}\n\nconst mapStateToProps = (state: any, props: any) => {\n  const series = props.series;\n  const seriesId = series.get('id');\n  const selectMatchingProduct = (props.specType === 'quoteProductConfigurator' || props.specType === 'AmpFeaturedProductsConfigurator' || props.specType === 'dalProductConfigurator')\n    ? makeSelectDirectMatchingProductForSeries({ series })\n    : makeSelectMatchingProductForSpecificSeries({ seriesId });\n    // const selectMatchingProduct = (props.specType === 'quoteProductConfigurator' || props.specType === 'AmpFeaturedProductsConfigurator')\n    // ? makeSelectDirectMatchingProductForSeries({ series })\n    // : makeSelectMatchingProductForSpecificSeries({ seriesId });\n  let selectedDrawing;\n  let selectedSpec;\n  switch (props.specType) {\n    case SPEC_TYPE.masterSpec: {\n      selectedDrawing = makeSelectMasterDrawing()(state);\n      selectedSpec = makeSelectMasterProjectspec();\n      break;\n    }\n    case SPEC_TYPE.masterTemplate: {\n      selectedDrawing = makeSelectTemplateDrawing()(state);\n      selectedSpec = makeSelectTemplateProjectSpec();\n      break;\n    }\n    default: {\n      selectedDrawing = makeSelectDrawing()(state);\n      selectedSpec = makeSelectSpec();\n    }\n  }\n\n  const identityObjectSelector = makeSelectIdentityObject();\n  const isGuestUser = !identityObjectSelector(state);\n  return {\n    selectedDrawing,\n    isGuestUser,\n    ...createStructuredSelector({\n      session: makeSelectSession(),\n      specOrOfficeLocation: makeSelectLocationForSeriesSearchFilter(),\n      ungatedCurrency: makeSelectUngatedCurrency(),\n      locale: makeSelectLocale(),\n      productFilters: selectProductFilters(),\n      matchingProduct: selectMatchingProduct,\n      selectedMissingCategories: makeSelectMissingCategory(),\n      selectedCategoryIdWhiteList: makeSelectAttributeWhitelistMapWithSelectedCategoryId(),\n      atsApiIdentity: makeSelectAtsApiState('envLoaded'),\n      editProductIndex: makeSelectEditingProductIndex(),\n      checkProductsAndAttributesLoading: makeSelectCheckProductsAndAttributesLoading(),\n      productFiltersForSelectedSeries: makeSelectSelectedSeriesSpecificFilters(),\n      seriesSpecificFilterKeys: makeSelectSelectedSeriesSpecificFiltersKeys(),\n      seriesSpecificFilterValuesArray: makeSelectSelectedSeriesSpecificValuesArray(),\n      selectedSeriesSpecificInitSelections: makeSelectSelectedSeriesSpecificInitSelections(),\n      selectedSeriesSpecificInitDisabledSelections: makeSelectSelectedSeriesSpecificInitDisabledSelections(),\n      config: makeSelectConfig(),\n      spec: selectedSpec,\n      selfFailedRulesLoading: makeSelectfailedSelfDrawingRulesLoading(),\n      rulesModalOpen: makeSelectOverlayComponent(RULES_DIALOG_KEY),\n      recommendedSpecProducts: makeSelectRecommendedSpecProducts(),\n      selectedSeriesId: makeSelectSelectedSeriesId(),\n      seriesSpecificFilters: makeSelectSeriesSpecificFilters(),\n      mode: makeSelectMode(),\n      site: makeSelectSite(),\n      hasSpecAssistAcl: makeSelectUserHasSpecAssistAcl(),\n      brandsToHidePrice: makeSelectBrandsToHidePrice(),\n      specToolSeriesLinkTemplate: makeSelectSpecToolSeriesLinkTemplate(),\n      appId: makeSelectAppId(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    disableOptions: () => {\n      dispatch(new CheckProductAndAttributesLoadingAction());\n    },\n    validateAddProductToDrawing: (specId, category, useAccessibilityStandard, products, openAlternativeModal, callback) => {\n      dispatch(new ValidateAddProductToDrawingAction({\n        specId,\n        category,\n        useAccessibilityStandard,\n        products,\n        openAlternativeModal,\n        callback\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<ISeriesPanelComponentProps>>(\n  withAtsApi(),\n  withStyles(styles),\n  withAmplitudeData,\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(Expansion);\n\nconst useStyles = makeStyles((theme: Theme) =>\n  createStyles({\n    img: {\n      maxWidth: '56px',\n      maxHeight: '56px',\n    },\n    item: {\n      position: 'relative',\n      width: '60px',\n      height: '60px',\n      border: '2px solid',\n      borderColor: '#757575',\n      '&:hover': {\n        cursor: 'pointer'\n      },\n      boxSizing: 'border-box',\n      padding: '2px'\n    },\n    disabledItem: {\n      position: 'relative',\n      width: '60px',\n      height: '60px',\n      border: '2px solid #4D4D4D',\n      boxSizing: 'border-box',\n      padding: '2px'\n    },\n    zoomInIcon: {\n      position: 'absolute',\n      bottom: -1,\n      right: -1,\n      zIndex: 1,\n      width: '18px !important',\n      height: '18px !important',\n      backgroundColor: 'rgba(33,33,33,0.6)',\n      color: 'white'\n    },\n    checkBoxIcon: {\n      position: 'absolute',\n      top: -3,\n      left: -3,\n      zIndex: 1,\n      width: '61px !important',\n      height: '61px !important',\n      border: `5px solid ${theme.palette.primary.main}`,\n      boxSizing: 'border-box',\n    },\n    checkBoxIconOnDisabled: {\n      border: `5px solid ${theme.palette.text.disabled}`\n    },\n    discontinusLine: {\n      width: '80px',\n      height: '2px',\n      position: 'absolute',\n      top: '26px',\n      left: '-13px',\n      zIndex: 1,\n      borderTop: '2px solid #4E4E4E',\n      transform: 'rotate(45deg)'\n    },\n    swatchPreviewDialog: {\n      maxWidth: '344px',\n      overflow: 'hidden'\n    },\n    noPreviewContainer: {\n      position: 'relative',\n      width: '296px',\n      height: '296px',\n      margin: '24px'\n    },\n    noPreviewL: {\n      position: 'absolute',\n      top: -46,\n      left: -38,\n      fontSize: 375, color: theme.palette.grey[400]\n    },\n    noPreviewS: {\n      top: -9,\n      left: -9,\n      fontSize: 74,\n      position: 'absolute'\n    },\n    boldPriceTitle: {\n      fontWeight: 'bold'\n    },\n    priceBreakdownSectionMargin: {\n      marginBottom: theme.spacing(3)\n    },\n    priceBreakdownLineMargin: {\n      marginBottom: theme.spacing()\n    },\n    priceBreakdownPricePadding: {\n      paddingLeft: theme.spacing(1.5)\n    }\n  }),\n);\n\n// price breakdown table for AQ\nconst PriceBreakdownTable = ({series, product, currencyType}) => {\n  const classes = useStyles();\n  const theme = useTheme<Theme>();\n  const {t} = useTranslation('translations');\n  const matchingProductPriceSummary = useSelector(makeSelectMatchingProductPriceSummary());\n  // since create is false, product possibly return with null id\n  // priceSummary is an object of product id as key and price object as value\n  // in the case that product returns with id null, BE set the key id of price to 1\n  const productId = product\n    ? product.get('id') === null ? 1 : product.get('id')\n    : null;\n  const basePrices = matchingProductPriceSummary?.getIn([String(productId), 'basePrices', 'default', currencyType, 0]);\n  const optionPrices = matchingProductPriceSummary?.getIn([String(productId), 'optionPrices', 'default', currencyType]);\n  const groupPrices = matchingProductPriceSummary?.getIn([String(productId), 'groupPrices', 'default', currencyType]);\n\n  const getKeyPrice = (pricesMap, key) => {\n    if (!pricesMap) {\n      return '-';\n    }\n    const isPOA = pricesMap.get('isPoa');\n    if (isPOA && key === 'list') {\n      return 'P.O.A.';\n    } else {\n      return pricesMap.get(key) || '-';\n    }\n  };\n  const getKeyTotoalPrice = (key) => product ? getKeyPrice(product.getIn(['price', 'default', currencyType ]), key) : '-';\n\n  return (\n    <>\n      <Divider light={true} className={classes.priceBreakdownSectionMargin}/>\n      <Grid container={true}>\n        <Typography color='textPrimary' variant='h6' className={classes.priceBreakdownSectionMargin}>{t('SeriesPanel.priceSummary')}</Typography>\n        <Grid container={true} className={classes.priceBreakdownSectionMargin}>\n          <Grid item={true} xs={7}>\n            <Typography color='textPrimary' variant='body2' className={classes.boldPriceTitle}>{t('SeriesPanel.basePrice')}</Typography>\n          </Grid>\n          {basePrices?.size > 0 &&\n          <Grid container={true} item={true} xs={5}>\n            <Grid item={true} xs={4}>\n              <Typography>{t('SeriesPanel.list')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(basePrices, 'list')}</span></Typography>\n            </Grid>\n            <Grid item={true} xs={4}>\n              <Typography>{t('SeriesPanel.sell')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(basePrices, 'sell')}</span></Typography>\n            </Grid>\n            <Grid item={true} xs={4}>\n              <Typography>{t('SeriesPanel.cost')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(basePrices, 'cost')}</span></Typography>\n            </Grid>\n          </Grid>\n          }\n        </Grid>\n        <Grid container={true} className={classes.priceBreakdownSectionMargin}>\n          <Grid container={true} item={true} xs={12}>\n            <Typography color='textPrimary' variant='body2' className={classes.boldPriceTitle}>{t('SeriesPanel.combinedPricing')}</Typography>\n            <Tooltip title={t('SeriesPanel.combinedPricingTooltip')}>\n              <InfoIcon fontSize='small' color='action' style={{marginLeft: 8}}/>\n            </Tooltip>\n          </Grid>\n          {groupPrices?.size > 0 &&\n            <>\n              <Grid container={true} style={{marginTop: 12, marginBottom: 12}}>\n                <Grid item={true} xs={3}>\n                  <Typography color='textPrimary'>{t('SeriesPanel.options')}</Typography>\n                </Grid>\n                <Grid item={true} xs={4}>\n                  <Typography color='textPrimary'>{t('SeriesPanel.descriptions')}</Typography>\n                </Grid>\n                <Grid item={true} xs={5}>\n                  <Typography color='textPrimary' className={classes.boldPriceTitle}>{t('SeriesPanel.price')}</Typography>\n                </Grid>\n              </Grid>\n              {groupPrices.map((groupPrice, groupPriceIndex) => {\n                const groupId = groupPrice.get('priceGroupId');\n                const priceGroupDataFromSeries = series.getIn(['configurator', 'options', 'priceGroups']).find(group => group.get('id') === groupId);\n                const values = priceGroupDataFromSeries?.get('values') || List();\n                return (\n                  <Grid container={true} key={groupId} className={classes.priceBreakdownLineMargin}>\n                    {values.size > 0 && values.map((value, valueIndex) => {\n                      const optionKey = value.split(':')[0];\n                      const attributeName = product.getIn(['attributes', optionKey, 'name']);\n                      const description = product.getIn(['attributes', optionKey, 'description']);\n                      const isOption = product.getIn(['attributes', optionKey, 'isOption']);\n                      return (\n                        <Grid container={true} key={optionKey} className={classes.priceBreakdownLineMargin}>\n                          <Grid item={true} xs={3}>\n                            <Typography>{attributeName}</Typography>\n                          </Grid>\n                          <Grid container={true} item={true} xs={4}>\n                            {isOption\n                              ? <CheckBoxIcon color='primary' />\n                              : <RadioButtonCheckedIcon color='primary' />\n                            }\n                            <Typography style={{marginLeft: 8}}>{description}</Typography>\n                          </Grid>\n                          {valueIndex === 0 &&\n                          <Grid container={true} item={true} xs={5}>\n                            <Grid item={true} xs={4}>\n                              <Typography>{t('SeriesPanel.list')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(groupPrice, 'list')}</span></Typography>\n                            </Grid>\n                            <Grid item={true} xs={4}>\n                              <Typography>{t('SeriesPanel.sell')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(groupPrice, 'sell')}</span></Typography>\n                            </Grid>\n                            <Grid item={true} xs={4}>\n                              <Typography>{t('SeriesPanel.cost')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(groupPrice, 'cost')}</span></Typography>\n                            </Grid>\n                          </Grid>\n                          }\n                        </Grid>\n                      );\n                    })}\n                  </Grid>\n                );\n              })}\n            </>\n          }\n        </Grid>\n        <Grid container={true} className={classes.priceBreakdownSectionMargin}>\n          <Grid container={true} item={true} xs={12}>\n            <Typography color='textPrimary' variant='body2' className={classes.boldPriceTitle}>{t('SeriesPanel.individualPricing')}</Typography>\n          </Grid>\n          {optionPrices?.size > 0 &&\n          <>\n            <Grid container={true} style={{marginTop: 12, marginBottom: 12}}>\n              <Grid item={true} xs={3}>\n                <Typography color='textPrimary'>{t('SeriesPanel.options')}</Typography>\n              </Grid>\n              <Grid item={true} xs={4}>\n                <Typography color='textPrimary'>{t('SeriesPanel.descriptions')}</Typography>\n              </Grid>\n              <Grid item={true} xs={5}>\n                <Typography color='textPrimary' className={classes.boldPriceTitle}>{t('SeriesPanel.price')}</Typography>\n              </Grid>\n            </Grid>\n            {optionPrices.map((individualPrice, individualPriceIndex) => {\n              const attributeKey = individualPrice.get('attributeKey');\n              const optionKey = individualPrice.get('optionKey');\n              const attributeName = product.getIn(['attributes', optionKey, 'name']);\n              const description = product.getIn(['attributes', optionKey, 'description']);\n              const isOption = product.getIn(['attributes', optionKey, 'isOption']);\n              return (\n                <Grid container={true} key={optionKey} className={classes.priceBreakdownLineMargin}>\n                  <Grid item={true} xs={3}>\n                    <Typography>{attributeName}</Typography>\n                  </Grid>\n                  <Grid container={true} item={true} xs={4}>\n                    {isOption\n                      ? <CheckBoxIcon color='primary' />\n                      : <RadioButtonCheckedIcon color='primary' />\n                    }\n                    <Typography style={{marginLeft: 8}}>{description}</Typography>\n                  </Grid>\n                  <Grid container={true} item={true} xs={5}>\n                    <Grid item={true} xs={4}>\n                      <Typography>{t('SeriesPanel.list')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(individualPrice, 'list')}</span></Typography>\n                    </Grid>\n                    <Grid item={true} xs={4}>\n                      <Typography>{t('SeriesPanel.sell')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(individualPrice, 'sell')}</span></Typography>\n                    </Grid>\n                    <Grid item={true} xs={4}>\n                      <Typography>{t('SeriesPanel.cost')}<span className={classes.priceBreakdownPricePadding}>{getKeyPrice(individualPrice, 'cost')}</span></Typography>\n                    </Grid>\n                  </Grid>\n                </Grid>\n              );\n            })}\n          </>\n          }\n        </Grid>\n      </Grid>\n      <Divider light={true} className={classes.priceBreakdownSectionMargin}/>\n      <Grid container={true}>\n        <Grid item={true} xs={6} />\n        <Grid item={true} xs={1}>\n          <Typography color='textPrimary' className={classes.boldPriceTitle}>{t('SeriesPanel.totalPrice')}</Typography>\n        </Grid>\n        {product &&\n        <Grid container={true} item={true} xs={5}>\n          <Grid item={true} xs={4}>\n            <Typography>{t('SeriesPanel.list')}<span className={classes.priceBreakdownPricePadding}>{getKeyTotoalPrice('list')}</span></Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography>{t('SeriesPanel.sell')}<span className={classes.priceBreakdownPricePadding}>{getKeyTotoalPrice('sell')}</span></Typography>\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Typography>{t('SeriesPanel.cost')}<span className={classes.priceBreakdownPricePadding}>{getKeyTotoalPrice('cost')}</span></Typography>\n          </Grid>\n        </Grid>\n        }\n      </Grid>\n    </>\n  );\n};\n\n// similar with OptionTable\nconst SwatchList = ({ options: _options, generateInputProps, attributeSelection, attributeWhitelist, hasProduct, productFilters, currencyType, showPrice, firstMissingRequiredSwatchRef, displayAttributeSubheader }) => {\n  const classes = useStyles();\n  const [open, setOpen] = React.useState(false);\n  const keyValues = _options.entrySeq().toList();\n  const options = keyValues.map(([key, value]) => value);\n  const {t} = useTranslation('translations');\n  const theme = useTheme<Theme>();\n\n  const [currectInputProps, setCurrentInputProps] = React.useState(null);\n  const [selectedOption, setSelectOption] = React.useState(null);\n\n  const handleOnOpen = (inputProps, data) => (e) => {\n    setOpen(true);\n    setCurrentInputProps(inputProps);\n    setSelectOption(data);\n  };\n\n  const handleOnSelect = () => {\n    const { onClick, checked } = currectInputProps;\n    onClick(null, !checked); // (event, checked)\n    setOpen(false);\n  };\n\n  return options.push(...Array.from({ length: (Math.ceil(options.size / 4) * 4) - options.size })).reduce((accum, current, currentIndex) => {\n    const index = Math.floor(currentIndex / 4);\n    accum[index] = [...(accum[index] || []), current];\n    return accum;\n  }, []).map((row, rowIndex) => {\n    return row.map((option, i) => {\n      const useSwatch: boolean = option?.get('useSwatch');\n      const name = option?.get('name');\n      const optionKey = option?.get('key') || '';\n      const attributeDescription = option?.get('description');\n      const isHardRequired = option?.get('require');\n      const isSoftRequired =\n        !hasProduct // no product returned by matchProduct\n        && attributeWhitelist?.getIn([optionKey, 'values'])?.size // is part of the attributes list returned by matchProduct\n        && !attributeSelection.get(optionKey)?.size; // not selected by user\n      const firstMissingRequiredSwatchKey = options.find(_option => {\n          const required = _option.get('require');\n          const theKey = _option.get('key');\n          return _option.get('useSwatch') && required && !attributeSelection.get(theKey)?.size;\n        })?.get('key');\n      const isHardRequiredButNotSelected = isHardRequired && !attributeSelection.get(optionKey)?.size;\n      if (useSwatch) {\n        return (\n        <div key={i} style={{width: '100%', marginTop: '16px'}}>\n          <Grid\n            container={true}\n            alignContent='center'\n            alignItems='center'\n            wrap='nowrap'\n          >\n            {(displayAttributeSubheader && attributeDescription) ? (\n              <Tooltip title={attributeDescription}>\n                <DescriptionIcon fontSize='small' color='action' style={{ marginRight: 4 }} />\n              </Tooltip>\n            ) : null}\n            <Typography\n              variant='body2'\n              color='textPrimary'\n              style={{\n                width: 'fit-content',\n                fontWeight: isSoftRequired ? 'bold' : 'initial',\n                textDecoration: isSoftRequired ? 'underline' : 'none',\n                fontSize: 'inherit'\n              }}\n            >\n              {name}\n            </Typography>\n            {\n              isHardRequiredButNotSelected && (\n                <Typography\n                  variant='caption'\n                  style={{\n                    color: 'white',\n                    marginLeft: 12,\n                    backgroundColor: '#FF4B54',\n                    borderRadius: 10,\n                    padding: '2px 12px'\n                  }}\n                  ref={firstMissingRequiredSwatchKey === optionKey ? firstMissingRequiredSwatchRef : null}\n                >\n                  {t('SeriesPanel.required')}\n                </Typography>\n              )\n            }\n          </Grid>\n          <Grid container={true} item={true} spacing={4} style={{ margin: 0, marginLeft: -16 }}>\n            {\n              option.get('values').map((value, x) => {\n                const inputProps = generateInputProps({ attribute: option, key: keyValues.getIn([(rowIndex * 4) + i, 0]), value });\n                const { checked, disabled } = inputProps;\n                const isValueDiscontinued: boolean = value.get('status') === 'discontinued';\n                const swatch: string = value.get('swatch');\n                const description: string = value.get('description');\n\n                const parse = num => {\n                  return (num !== undefined && num !== null) ? (Math.round(num * 100) / 100).toFixed(2) : '';\n                };\n\n                const isPoa = value.getIn(['price', 'default', currencyType, 'isPoa']) || false;\n                const list = isPoa ? t('SeriesPanel.POA') : parse(value.getIn(['price', 'default', currencyType, 'list']));\n                const sell = parse(value.getIn(['price', 'default', currencyType, 'sell']));\n                const cost = parse(value.getIn(['price', 'default', currencyType, 'cost']));\n\n                const ListComponent = ({data, ...rest}: {data: any[]} & any) =>\n                  <div {...rest}>\n                    {data.map((item, dataIndex) => <Typography\n                                                      key={dataIndex}\n                                                      component='div'\n                                                      variant='caption'\n                                                      noWrap={true}\n                                                      style={isValueDiscontinued ? {color: theme.palette.grey[400], textDecorationLine: 'line-through'} : null}\n                                                    >{item}</Typography>)}\n                  </div>;\n\n                return (\n                  <Grid\n                    container={true}\n                    item={true}\n                    xs={2}\n                    direction='column'\n                    alignItems='center'\n                    key={x}\n                  >\n                    <Tooltip title={\n                      <Grid direction='column' container={true} spacing={1} justify='center' alignItems='center'>\n                        {description ? <Grid item={true}><span>{description}</span></Grid> : null}\n                        {!swatch ? <Grid item={true}><span>{t('SeriesPanel.swatchPreviewNotAvailableTooltip')}</span></Grid> : null}\n                        {isValueDiscontinued ? <Grid item={true}><span>{t('SeriesPanel.discontinuedOptionTooltip')}</span></Grid> : null}\n                      </Grid>\n                    }>\n                      <div className={disabled ? classes.disabledItem : classes.item} onClick={disabled ? null : handleOnOpen(inputProps, value)}>\n                        {\n                          swatch ?\n                          <Image\n                          className={classes.img}\n                          src={`${swatch}|resize:${'56'},${'56'}`}\n                          width={`${'56'}px`}\n                          aspectRatio={'100%'}\n                          fromService={true}\n                          margin='-2px'\n                          style={{opacity: disabled || isValueDiscontinued ? 0.2 : 1}}\n                          />\n                          :\n                          <TextureIcon\n                          className={classes.noPreviewS}\n                          style={{color: disabled || isValueDiscontinued ? theme.palette.grey[200] : theme.palette.grey[400]}}\n                          />\n                        }\n                        {!isValueDiscontinued ? <ZoomInIcon className={classes.zoomInIcon} /> : null}\n                        {checked ? <CheckIcon className={classnames(classes.checkBoxIcon, {[classes.checkBoxIconOnDisabled]: isValueDiscontinued})} color={isValueDiscontinued ? 'disabled' : 'primary'} /> : null}\n                        {isValueDiscontinued ? <Box className={classes.discontinusLine} /> : null}\n                      </div>\n                    </Tooltip>\n                    <Typography\n                      style={{\n                        color: disabled || isValueDiscontinued ? theme.palette.grey[400] : null,\n                        textDecorationLine: isValueDiscontinued ? 'line-through' : null,\n                        marginTop: 4,\n                        textAlign: 'center'\n                      }}\n                    >{description}</Typography>\n                    {\n                      showPrice && <Grid container={true} wrap='nowrap' justify='center'>\n                        <div style={{display: 'flex'}}>\n                          <ListComponent data={[list && 'List', sell && 'Sell', cost && 'Cost']} style={{marginRight: theme.spacing()}}/>\n                          <ListComponent data={[list, sell, cost]} style={{textAlign: 'end'}}/>\n                        </div>\n                      </Grid>\n                    }\n                  </Grid>\n                );\n              })\n            }\n          </Grid>\n          <Dialog open={open} onClose={() => setOpen(false)}>\n            <div className={classes.swatchPreviewDialog}>\n            {\n              selectedOption?.get('swatch') ?\n                <Image\n                  src={`${selectedOption?.get('swatch')}`}\n                  width={`${'296'}px`}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                  margin='24px'\n                />\n                :\n                <div className={classes.noPreviewContainer}>\n                  <TextureIcon className={classes.noPreviewL}/>\n                </div>\n            }\n            <DialogContent>\n              <Typography variant='h6'>{selectedOption?.get('description')}</Typography>\n            </DialogContent>\n\n            <DialogActions>\n              <Button onClick={() => setOpen(false)} color='primary'>\n                {t('formButtons.cancel')}\n              </Button>\n              <Button onClick={handleOnSelect} color='primary'>\n                {currectInputProps?.checked ? t('formButtons.deselect') : t('formButtons.select')}\n              </Button>\n            </DialogActions>\n            </div>\n          </Dialog>\n        </div>\n        );\n      }\n    });\n  });\n};\n\nconst OptionsTable = ({ options: _options, generateInputProps, descriptionsOnly = false, currencyType, series, seriesId, attributeSelection, attributeWhitelist, hasProduct, productFilters, showPrice, handleShowPrice, showSuffix, handleShowSuffix, firstMissingRequiredOptionRef, specType, displayAttributeSubheader }) => {\n  const keyValues = _options.entrySeq().toList().filter((keyValue) => !keyValue[1].get('useSwatch'));\n  const options = keyValues.map(([key, value]) => value);\n  const [heights, setHeights] = React.useState<any>([]);\n  // const [showPrice, setShowPrice] = React.useState(false);\n  const { t } = useTranslation('translations');\n  const theme = useTheme<Theme>();\n  const dispatch = useDispatch();\n  const appMenuOpen = useSelector(makeSelectAppMenuOpen());\n  const isRecommendedProductLoading = useSelector(makeSelectIsRecommendedSpecProductLoading());\n  const isQuoteConfigurator = specType === 'quoteProductConfigurator';\n  const columnsPerRow = isQuoteConfigurator ? 3 : 4;\n\n  const getNewHeights = () => options.push(...Array.from({ length: (Math.ceil(options.size / columnsPerRow) * columnsPerRow) - options.size })).reduce((accum, current, currentIndex) => {\n    const index = Math.floor(currentIndex / columnsPerRow);\n    const index2 = currentIndex % columnsPerRow;\n\n    const newArray = current?.get('values')?.toArray()?.map((option, index3) => {\n      // fix text overlapping when toggle the drawer, reference the content in order to update the height for the container\n      const radioHeight = document.getElementById('option-content' + index + '-' + index2 + '-' + 'radio' + '-' + index3 + '-' + seriesId)?.getBoundingClientRect().height;\n      const descriptionHeight = document.getElementById('option-content' + index + '-' + index2 + '-' + 'description' + '-' + index3 + '-' + seriesId)?.getBoundingClientRect().height;\n      const priceListHeight = showPrice ? document.getElementById('option-content' + index + '-' + index2 + '-' + 'priceList' + '-' + index3 + '-' + seriesId)?.getBoundingClientRect().height : 0;\n\n      return Math.max(radioHeight, descriptionHeight, priceListHeight);\n    });\n    accum[index] = [...(accum[index] || []), newArray];\n    return accum;\n  }, []);\n  const [width, setWidth] = React.useState(0);\n\n  const listener = debounce(() => {\n    const _width = document.getElementById('options-container')?.getBoundingClientRect().width;\n    setHeights([]);\n    setWidth(x => x + 1);\n  }, 250);\n\n  React.useLayoutEffect(() => {\n    window.addEventListener('resize', listener);\n    return () => window.removeEventListener('resize', listener);\n  }, []);\n\n  React.useEffect(() => {\n    setHeights(getNewHeights());\n  }, [_options, showPrice, showSuffix, width, generateInputProps, descriptionsOnly]);\n\n  React.useLayoutEffect(() => {\n    const _width = document.getElementById('options-container')?.getBoundingClientRect().width;\n    setHeights([]);\n    setWidth(x => x + 1);\n  }, [appMenuOpen]);\n\n  const handleUseRecommendedOptions = () => {\n    dispatch(new SetIsRecommendedSpecProductLoadingAction(true));\n    dispatch(new GetRecommendedSpecProductAction({ series, useDirectMatchProduct: specType === 'AmpFeaturedProductsConfigurator' }));\n  };\n\n  const optionContainerMargin = {\n    marginBottom: isQuoteConfigurator ? theme.spacing(1.5) : theme.spacing(1),\n  };\n\n  return <Grid container={true} id='options-container' style={{paddingBottom: theme.spacing(2)}}>\n    <Grid container={true} justify='space-between' alignItems='center' style={{marginBottom: theme.spacing(2), marginTop: theme.spacing(2)}}>\n      <Typography\n        variant='h6'\n      >\n        {t('SeriesPanel.options')}\n      </Typography>\n      { descriptionsOnly && series.get('status') === 'active' && specType !== 'dalProductConfigurator' &&\n          <Tooltip title={t('Expansion.selectMostPopularTooltip')}>\n            <Button\n              onClick={handleUseRecommendedOptions}\n              color='primary'\n              variant='outlined'\n              size='small'\n              style={{ fontSize: '10px', margin: `0 auto 0 ${theme.spacing(2)}px`}}\n              startIcon={isRecommendedProductLoading ? <CircularProgress size='1em'/> : <ThumbUpIcon/>}\n            >\n              {t('Expansion.selectMostPopular')}\n            </Button>\n          </Tooltip>\n      }\n      <Grid item={true} container={true} alignItems='center' style={{ width: 'auto' }}>\n        {isQuoteConfigurator && <FormControlLabel\n          style={{opacity: showSuffix ? 1 : 0.5}}\n          control={<Switch\n          color='primary'\n          checked={showSuffix}\n          value={showSuffix}\n          onChange={() => {\n            setHeights([]);\n            handleShowSuffix();\n          }}\n          />}\n          label={showSuffix ? t('quoteProductConfigurator.hideSuffix') : t('quoteProductConfigurator.showSuffix')}\n        />}\n        {!descriptionsOnly && <FormControlLabel\n          style={{opacity: showPrice ? 1 : 0.5}}\n          control={<Switch\n          color='primary'\n          checked={showPrice}\n          value={showPrice}\n          onChange={() => {\n            setHeights([]);\n            handleShowPrice();\n          }}\n          />}\n          label={showPrice ? t('quoteProductConfigurator.hidePrice') : t('quoteProductConfigurator.showPrice')}\n        />}\n      </Grid>\n    </Grid>\n    <Table>\n    {options.push(...Array.from({ length: (Math.ceil(options.size / columnsPerRow) * columnsPerRow) - options.size })).reduce((accum, current, currentIndex) => {\n      const index = Math.floor(currentIndex / columnsPerRow);\n      accum[index] = [...(accum[index] || []), current];\n      return accum;\n    }, []).map((row, rowIndex) => {\n    {/* {handledOptions.map((row, rowIndex) => { */}\n      return <React.Fragment key={rowIndex}>\n      { rowIndex ? <TableBody style={{ height: 24 }} /> : null }\n      <TableHead>\n        <TableRow style={{ verticalAlign: 'top' }}>\n          {row.map((option, i) => {\n            if (option?.get('useSwatch')) { // for swatch preview\n              return;\n            }\n            const name = option?.get('name');\n            const optionKey = option?.get('key') || '';\n            const attributeDescription = option?.get('description');\n            const isHardRequired = option?.get('require');\n            const isSoftRequired =\n              !hasProduct // no product returned by matchProduct\n              && attributeWhitelist?.getIn([optionKey, 'values'])?.size // is part of the attributes list returned by matchProduct\n              && !attributeSelection.get(optionKey)?.size; // not selected by user\n            const firstMissingRequiredOptionKey = options.find(_option => {\n                  const required = _option.get('require');\n                  const theKey = _option.get('key');\n                  return required && !attributeSelection.get(theKey)?.size;\n                })?.get('key');\n            const isHardRequiredButNotSelected = isHardRequired && !attributeSelection.get(optionKey)?.size;\n\n            return <React.Fragment key={i}>\n              <TableCell padding='none' style={{ width: 0, borderBottom: 'none', paddingBottom: theme.spacing(0.5) }} />\n              <TableCell padding='none' style={{ borderBottom: 'none', paddingBottom: theme.spacing(0.5) }}>\n                <Grid\n                  container={true}\n                  alignContent='flex-start'\n                  alignItems='flex-start'\n                  justify='space-between'\n                  wrap='nowrap'\n                  style={{\n                    marginLeft: -27,\n                    marginRight: 16,\n                  }}\n                >\n                  <Grid\n                    container={true}\n                    alignContent='flex-start'\n                    alignItems='flex-start'\n                    wrap='nowrap'\n                  >\n                    {(displayAttributeSubheader && attributeDescription) ? (\n                      <Tooltip title={attributeDescription}>\n                        <DescriptionIcon fontSize='small' color='action' style={{ marginRight: 4 }} />\n                      </Tooltip>\n                    ) : null}\n                    <Typography\n                      variant='body2'\n                      color='textPrimary'\n                      style={{\n                        width: 'fit-content',\n                        fontWeight: isSoftRequired ? 'bold' : 'initial',\n                        textDecoration: isSoftRequired ? 'underline' : 'none',\n                        fontSize: 'inherit'\n                      }}\n                    >\n                      {name}\n                    </Typography>\n                  </Grid>\n                  {\n                    isHardRequiredButNotSelected && (\n                      <Typography\n                        variant='caption'\n                        style={{\n                          color: 'white',\n                          marginLeft: 12,\n                          backgroundColor: '#FF4B54',\n                          borderRadius: 10,\n                          padding: '2px 12px',\n                          height: 'fit-content',\n                        }}\n                        ref={firstMissingRequiredOptionKey === optionKey ? firstMissingRequiredOptionRef : null}\n                      >\n                        {t('SeriesPanel.required')}\n                      </Typography>\n                    )\n                  }\n                </Grid>\n              </TableCell>\n              {\n                isQuoteConfigurator && <TableCell style={{ borderBottom: 'none', paddingTop: 0, paddingBottom: theme.spacing(0.5), paddingLeft: 24, paddingRight: 12, maxWidth: 120 }}>\n                  {showSuffix && option && <Typography variant='body2' style={{fontWeight: 'normal', color: theme.typography.h6.color, fontSize: 'inherit'}}>{t('configuratorPage.optionsWidget.suffixLabel')}</Typography>}\n                </TableCell>\n              }\n              {\n                isQuoteConfigurator\n                  ? <TableCell style={{ width: 0, borderBottom: 'none', paddingTop: 0, paddingBottom: theme.spacing(0.5), paddingLeft: 12, paddingRight: 24 }}>\n                      {showPrice && option && <Typography variant='body2' style={{fontWeight: 'normal', color: theme.typography.h6.color, fontSize: 'inherit'}}>{t('quoteProductConfigurator.price')}</Typography>}\n                    </TableCell>\n                  : showPrice && <TableCell style={{ width: 0, borderBottom: 'none', paddingTop: 0, paddingBottom: theme.spacing(0.5) }}>\n                      {option && <Typography variant='body2' style={{fontWeight: 'bold', color: theme.typography.h6.color, fontSize: 'inherit'}}>{t('quoteProductConfigurator.price')}</Typography>}\n                    </TableCell>\n              }\n            </React.Fragment>;\n          })}\n        </TableRow>\n      </TableHead>\n        <TableBody>\n          <TableRow style={{ verticalAlign: 'top' }}>\n            {row.map((option, i) => {\n\n              const multi = option?.get('isOption'); // if 1, display as checkbox, if 0 display as radio\n              const InputType = multi ? Checkbox : Radio;\n\n              if (option?.get('useSwatch')) {  // for swatch preview\n                return;\n              }\n\n              return option !== undefined\n                ? <React.Fragment key={i}>\n                  <TableCell padding='none' style={{ width: 0, borderBottom: 'none' }}>\n                    {option.get('values').map((value, x) => {\n                      const height = heights[rowIndex]?.[i]?.[x];\n                      const containerId = 'option-container' + rowIndex + '-' + i + '-' + 'radio' + '-' + x + '-' + seriesId;\n                      const contentId = 'option-content' + rowIndex + '-' + i + '-' + 'radio' + '-' + x + '-' + seriesId;\n\n                      return <Grid style={{ display: 'flex', alignItems: 'center', height, marginRight: theme.spacing(0.5), ...optionContainerMargin }} id={containerId} key={x}>\n                        <InputType id={contentId} {...generateInputProps({ attribute: option, key: keyValues.getIn([(rowIndex * columnsPerRow) + i, 0]), value })} color='primary' style={{ padding: 0 }} />\n                      </Grid>;\n                    })}\n                  </TableCell>\n                  <TableCell padding='none' style={{ borderBottom: 'none', width: '25%' }}>\n                    {option.get('values').map((value, x) => {\n                      const optionValueDisabled = value.get('status') === 'discontinued';\n                      const height = heights[rowIndex]?.[i]?.[x];\n                      const containerId = 'option-container' + rowIndex + '-' + i + '-' + 'description' + '-' + x + '-' + seriesId;\n                      const contentId = 'option-content' + rowIndex + '-' + i + '-' + 'description' + '-' + x + '-' + seriesId;\n                      return <Grid container={true} style={{ height, ...optionContainerMargin }} id={containerId} key={x} alignItems='center'>\n                        <Tooltip title={optionValueDisabled ? t('Expansion.optionDiscontinued') : ''}>\n                          <Typography\n                            display='block'\n                            id={contentId}\n                            variant='caption'\n                            style={optionValueDisabled ? {color: theme.palette.grey[400], textDecorationLine: 'line-through', marginTop: height > 25 ? '0.18rem' : 0} : { marginTop: height > 25 ? '0.18rem' : 0}} // to make the first line align center with the radio/checkbox button\n                          >{value.get('description')}</Typography>\n                        </Tooltip>\n                      </Grid>;\n                    })}\n                  </TableCell>\n                  {isQuoteConfigurator && <TableCell style={{ borderBottom: 'none', paddingTop: 0, paddingBottom: 0, paddingLeft: 24, paddingRight: 12, maxWidth: 120 }}>\n                    {showSuffix && option.get('values').map((value, x) => {\n                      const optionValueDisabled = value.get('status') === 'discontinued';\n                      const height = heights[rowIndex]?.[i]?.[x];\n                      const suffix = value.get('suffix');\n                      return <Tooltip title={suffix || ''} key={x}>\n                        <Grid container={true} wrap='nowrap' alignItems='center' style={{ height, ...optionContainerMargin }}>\n                          <Typography\n                            variant='caption'\n                            noWrap={true}\n                            style={{ overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: '100%', ...(optionValueDisabled ? {color: theme.palette.grey[400], textDecorationLine: 'line-through'} : null) }}\n                          >{suffix}</Typography>\n                        </Grid>\n                      </Tooltip>;\n                    })}\n                  </TableCell>}\n                  {(isQuoteConfigurator || showPrice) && <TableCell style={{ width: 0, borderBottom: 'none', paddingTop: 0, paddingBottom: 0, ...(isQuoteConfigurator && { paddingLeft: 12, paddingRight: 24 }) }}>\n                    {showPrice && option.get('values').map((value, x) => {\n                      const optionValueDisabled = value.get('status') === 'discontinued';\n                      const height = heights[rowIndex]?.[i]?.[x];\n                      const containerId = 'option-container' + rowIndex + '-' + i + '-' + 'priceList' + '-' + x + '-' + seriesId;\n                      const contentId = 'option-content' + rowIndex + '-' + i + '-' + 'priceList' + '-' + x + '-' + seriesId;\n\n                      const parse = num => {\n                        return (num !== undefined && num !== null) ? (Math.round(num * 100) / 100).toFixed(2) : '';\n                      };\n\n                      const isPoa = value.getIn(['price', 'default', currencyType, 'isPoa']) || false;\n                      const list = isPoa ? t('SeriesPanel.POA') : parse(value.getIn(['price', 'default', currencyType, 'list']));\n                      const sell = parse(value.getIn(['price', 'default', currencyType, 'sell']));\n                      const cost = parse(value.getIn(['price', 'default', currencyType, 'cost']));\n\n                      const ListComponent = ({data, ...rest}: {data: any[]} & any) =>\n                        <div {...rest}>\n                          {data.map((item, dataIndex) => <Typography\n                                                            key={dataIndex}\n                                                            component='div'\n                                                            variant='caption'\n                                                            noWrap={true}\n                                                            style={optionValueDisabled ? {color: theme.palette.grey[400], textDecorationLine: 'line-through'} : null}\n                                                          >{item}</Typography>)}\n                        </div>;\n\n                      return <Grid container={true} wrap='nowrap' justify='space-between' style={{ height, ...optionContainerMargin }} id={containerId} key={x}>\n                        <div id={contentId} style={{display: 'flex'}}>\n                          <ListComponent data={[list && 'List', sell && 'Sell', cost && 'Cost']} style={{marginRight: theme.spacing()}}/>\n                          <ListComponent data={[list, sell, cost]} style={{textAlign: 'end'}}/>\n                        </div>\n                      </Grid>;\n                    })}\n                  </TableCell>}\n                </React.Fragment>\n                : <React.Fragment key={i}>\n                  <TableCell padding='none' style={{ width: 0, borderBottom: 'none' }} />\n                  <TableCell padding='none' style={{ borderBottom: 'none' }} />\n                  {isQuoteConfigurator && <TableCell padding='none' style={{ borderBottom: 'none' }} />}\n                  {(isQuoteConfigurator || showPrice) && <TableCell padding='none' style={{ width: 0, borderBottom: 'none' }} />}\n                </React.Fragment>;\n            })}\n          </TableRow>\n        </TableBody>\n      </React.Fragment>;\n    })}\n  </Table>\n  {/* {\n    row.get('useSwatch') ? <>swatch</> : null\n  } */}\n  {/* <SwatchList generateInputProps={generateInputProps} options={_options} attributeSelection={attributeSelection} attributeWhitelist={attributeWhitelist} hasProduct={hasProduct} productFilters={productFilters}/> */}\n  </Grid>;\n};\n\nconst generateProps = ({\n  productFilters,\n  productFiltersForSelectedSeries,\n  attributeWhitelist,\n  seriesSpecificFilterKeys,\n  seriesSpecificFilterValuesArray,\n  checkProductsAndAttributesLoading,\n  checkedProp,\n  seriesId,\n  seriesStatus,\n  attribute,\n  key,\n  value,\n  initDisabled,\n}) => {\n  // This is a bunch of crazy logic for the options and filters. I kept the logic exactly as before, and everything is in this function.\n\n  const multi = attribute.get('isOption'); // if 1, display as checkbox, if 0 display as radio\n  // const keyProductFilters = productFilters.get(key, Set());\n  // const keyProductFiltersValues = keyProductFilters.toList().map((filter) => {\n  //   return filter.get('value');\n  // });\n  const keyProductSeriesSpecificFilters = productFiltersForSelectedSeries.get(key, Set());\n  const keyProductSeriesSpecificFiltersValues = keyProductSeriesSpecificFilters.toList().map((filter) => {\n    return filter.get('value');\n  });\n\n  const attributeValuesWhitelistSet = (attributeWhitelist) && attributeWhitelist.getIn([key, 'values'], Map()).map((awlValue: any) => awlValue.get('value')).toSet();\n\n  const valueValue = value.get('value');\n  const valueDisplay = value.get('description');\n  const optionValueId = value.get('id');\n\n  // checks the filter by seriesId if it includes the key\n  const hasSeriesKey = seriesSpecificFilterKeys.includes(key);\n\n  // checks 'product' level filters and see if it includes the value\n  // const hasProductFilterValues = keyProductFiltersValues.includes(valueValue);\n\n  // checks the product filter for that specific series if it includes the value\n  const hasProductSeriesSpecificFilterValues = keyProductSeriesSpecificFiltersValues.includes(valueValue);\n  const hasValueValue = hasSeriesKey && hasProductSeriesSpecificFilterValues;\n  const optionObj = seriesSpecificFilterValuesArray.find((_optionObj) => {\n    const _optionValueId = _optionObj.get('optionValueId');\n    const optionValue = _optionObj.get('value');\n    if ((_optionValueId === optionValueId) && (optionValue === valueValue)) {\n      return true;\n    }\n    return false;\n  });\n\n  const hasOptionObj = optionObj && (optionObj.size === 0 ? false : true);\n\n  // pre check the checkboxes\n  const checkboxChecked = multi\n    ? hasOptionObj\n    : false;\n\n  const checked = multi ? checkboxChecked : hasValueValue;\n  const hasThisValue = hasValueValue;\n  const shouldDisable = checkProductsAndAttributesLoading ? checkProductsAndAttributesLoading : attributeValuesWhitelistSet != null && !attributeValuesWhitelistSet.has(valueValue);\n  const isValueDiscontinued = value.get('status') === 'discontinued';\n  const disabled = initDisabled || (!hasThisValue && shouldDisable) || isValueDiscontinued || seriesStatus !== 'active';\n\n  const controlProps = {\n    color: 'secondary' as 'secondary',\n    value: valueValue,\n    onClick: checkedProp(key, valueValue, multi, valueDisplay, seriesId, optionValueId),\n    checked: checked ? checked : false,\n    disabled,\n  };\n\n  return controlProps;\n};\n","import * as React from 'react';\nimport { Grid, Typography, WithStyles, withStyles, Theme } from '@material-ui/core';\nimport { Image } from '../../components';\nimport { compose } from 'redux';\nimport { StyleRules } from '@material-ui/styles';\n\ninterface IAttributeItemComponentProps {\n  attrName: string;\n  attrDescription: string;\n  attrImage: string;\n}\n\ntype  AttributeItemProps = IAttributeItemComponentProps &  WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  attributeTitle: {\n    fontWeight: 'bold',\n    color: theme.typography.h6.color,\n  },\n  attributeContainer: {\n    display: 'inline-block',\n    margin: '0 0 1em',\n    width: '100%',\n  },\n  attributeBody: {\n    lineHeight: `${theme.spacing(2.75)}px`,\n    width: '100%',\n  },\n});\n\nconst AttributeItem: React.FC<AttributeItemProps> = (props) => {\n  const {\n    attrName,\n    attrDescription,\n    attrImage,\n    classes,\n  } = props;\n\n  return (\n    <Grid\n      className={classes.attributeContainer}\n    >\n      <Typography\n        variant='body2'\n        className={classes.attributeTitle}\n      >\n        {attrName}\n      </Typography>\n      <Grid\n        container={true}\n        alignItems='center'\n      >\n        <Typography\n          variant='body2'\n          className={classes.attributeBody}\n        >\n          {attrDescription}\n        </Typography>\n        {\n          attrImage !== undefined\n            ? <Image\n              src={attrImage || ''}\n              width={'100px'}\n              aspectRatio={'100%'}\n              fromService={true}\n            />\n            : null\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default compose<React.FC<IAttributeItemComponentProps>>(\n  withStyles(styles)\n)(AttributeItem);","import { IMap } from 'ats-utils/src/Interfaces';\nimport { Mode } from '../constants';\nimport Spec from '../models/Spec';\n\n// UTM parameters generated at share time for the configurator \"copy link\" action (SPEC-4444).\n// The read path (ProductSelection) picks these back up from the URL and attaches them to the\n// startOnSeriesOrProduct analytics event.\nexport const UTM_SOURCE_PLATFORM_APP = 'platform_app';\nexport const UTM_MEDIUM_SHARE_BUTTON = 'share_button';\nexport const UTM_CAMPAIGN_USER_REFERRAL_PREFIX = 'user_referral_';\n// Emitted verbatim when there is no selected content, so the params are always present for reporting.\nexport const UTM_NULL_VALUE = 'null';\n\n// Which object `utm_content` carries the id of.\nexport type UtmContentType = 'spec' | 'project' | 'master' | 'template';\n\nexport interface IShareLinkUtmParams {\n  [key: string]: string;\n  utm_source: string;\n  utm_medium: string;\n  utm_campaign: string;\n  utm_content: string;\n  utm_content_type: string;\n}\n\nexport interface IShareLinkUtmContent {\n  utmContent: number | null;\n  utmContentType: UtmContentType | null;\n}\n\nconst modeToUtmContentType = (mode: Mode): UtmContentType | null => {\n  switch (mode) {\n    case Mode.spec:\n      return 'spec';\n    case Mode.project:\n    case Mode.testProject:\n      return 'project';\n    case Mode.master:\n      return 'master';\n    case Mode.masterTemplate:\n      return 'template';\n    default:\n      return null;\n  }\n};\n\n// `utm_content_type` names the object `utm_content` is the id of: the project id for project\n// (and test project) specs, otherwise the selected spec's own id. Both are null when nothing is selected.\nexport const getShareLinkUtmContent = ({\n  mode,\n  spec,\n}: {\n  mode: Mode;\n  spec?: IMap<Spec>;\n}): IShareLinkUtmContent => {\n  const utmContentType = modeToUtmContentType(mode);\n  if (utmContentType == null || spec == null || spec.get('id') == null) {\n    return { utmContent: null, utmContentType: null };\n  }\n  const utmContent = utmContentType === 'project' ? spec.get('projectId') : spec.get('id');\n  return {\n    utmContent: utmContent != null ? utmContent : null,\n    utmContentType,\n  };\n};\n\nexport const buildShareLinkUtmParams = ({\n  appId,\n  mode,\n  spec,\n}: {\n  appId: string;\n  mode: Mode;\n  spec?: IMap<Spec>;\n}): IShareLinkUtmParams => {\n  const { utmContent, utmContentType } = getShareLinkUtmContent({ mode, spec });\n  return {\n    utm_source: UTM_SOURCE_PLATFORM_APP,\n    utm_medium: UTM_MEDIUM_SHARE_BUTTON,\n    utm_campaign: `${UTM_CAMPAIGN_USER_REFERRAL_PREFIX}${appId}`,\n    utm_content: utmContent != null ? String(utmContent) : UTM_NULL_VALUE,\n    utm_content_type: utmContentType != null ? utmContentType : UTM_NULL_VALUE,\n  };\n};\n\n// Appends `params` to `url`, keeping existing query params and the hash. A param that already\n// exists on the url is overwritten rather than duplicated.\nexport const appendQueryParams = (url: string, params: { [key: string]: string }): string => {\n  const hashIndex = url.indexOf('#');\n  const hash = hashIndex === -1 ? '' : url.slice(hashIndex);\n  const urlWithoutHash = hashIndex === -1 ? url : url.slice(0, hashIndex);\n\n  const queryIndex = urlWithoutHash.indexOf('?');\n  const base = queryIndex === -1 ? urlWithoutHash : urlWithoutHash.slice(0, queryIndex);\n  const searchParams = new URLSearchParams(queryIndex === -1 ? '' : urlWithoutHash.slice(queryIndex + 1));\n\n  Object.keys(params).forEach((key) => {\n    searchParams.set(key, params[key]);\n  });\n\n  const query = searchParams.toString();\n  return `${base}${query ? `?${query}` : ''}${hash}`;\n};\n\n// The link copied from the series panel share icon: the app's series link template plus the\n// series id, with the share UTM parameters appended.\nexport const buildSeriesShareLink = ({\n  seriesLinkTemplate,\n  seriesId,\n  appId,\n  mode,\n  spec,\n}: {\n  seriesLinkTemplate: string;\n  seriesId: number | string;\n  appId: string;\n  mode: Mode;\n  spec?: IMap<Spec>;\n}): string => appendQueryParams(`${seriesLinkTemplate}${seriesId}`, buildShareLinkUtmParams({ appId, mode, spec }));\n","export default __webpack_public_path__ + \"static/media/WaterSense_logo.e073f810.svg\";","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Button, Grid, IconButton, Popover, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IconButtonProps } from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/styles';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport { copyToClipboard } from '../../utils/copyToClipboard';\n\nexport interface ICopyLinkButtonProps {\n  // built when clicked, so it always reflects the current selection\n  getLink: () => string;\n  tooltip: string;\n  // called only once the link is actually on the clipboard\n  onCopied?: (link: string) => void;\n  iconButtonProps?: IconButtonProps;\n  children: React.ReactNode;\n}\n\ninterface ICopyFallback {\n  anchorEl: HTMLElement;\n  link: string;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  content: {\n    padding: theme.spacing(2),\n    width: 360,\n    maxWidth: 'calc(100vw - 32px)',\n    boxSizing: 'border-box',\n  },\n}));\n\nconst stopPropagation = (e: React.SyntheticEvent) => e.stopPropagation();\n\n/**\n * Icon button that copies a link and confirms it with a snackbar. When the browser refuses both ways of\n * copying, it opens a popover with the link selected in a read-only field so the user can copy it by hand.\n */\nconst CopyLinkButton: React.FC<ICopyLinkButtonProps> = ({ getLink, tooltip, onCopied, iconButtonProps, children }) => {\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const [fallback, setFallback] = React.useState<ICopyFallback | null>(null);\n  const inputRef = React.useRef<HTMLInputElement>(null);\n\n  const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n    // the button usually sits on an expansion panel summary, which must not toggle\n    e.stopPropagation();\n    e.preventDefault();\n    // read before the copy resolves: React reuses the event object\n    const anchorEl = e.currentTarget;\n    const link = getLink();\n    copyToClipboard(link).then((copied) => {\n      if (copied) {\n        dispatch(new SetSnackbarOpenAction({ message: t('copyLink.copied'), severity: 'success' }));\n        if (onCopied) {\n          onCopied(link);\n        }\n      } else {\n        setFallback({ anchorEl, link });\n      }\n    });\n  };\n\n  const selectLink = () => {\n    if (inputRef.current) {\n      inputRef.current.focus();\n      inputRef.current.select();\n    }\n  };\n\n  const closeFallback = () => setFallback(null);\n\n  return (\n    <>\n      <Tooltip title={tooltip}>\n        <IconButton {...iconButtonProps} onClick={handleClick}>\n          {children}\n        </IconButton>\n      </Tooltip>\n      <Popover\n        open={Boolean(fallback)}\n        anchorEl={fallback ? fallback.anchorEl : null}\n        onClose={closeFallback}\n        onEntered={selectLink}\n        anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n        transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n        // the popover renders in a portal, but React still bubbles its events to the panel summary\n        onClick={stopPropagation}\n        onMouseDown={stopPropagation}\n        onKeyDown={stopPropagation}\n      >\n        <div className={classes.content}>\n          <Typography variant='body2'>{t('copyLink.copyManually')}</Typography>\n          <TextField\n            value={fallback ? fallback.link : ''}\n            inputRef={inputRef}\n            InputProps={{ readOnly: true }}\n            inputProps={{ onFocus: (e: React.FocusEvent<HTMLInputElement>) => e.target.select() }}\n            variant='outlined'\n            margin='dense'\n            fullWidth={true}\n          />\n          <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n            <Typography variant='caption' color='textSecondary'>{t('copyLink.shortcut')}</Typography>\n            <Button color='primary' onClick={closeFallback}>{t('formButtons.close')}</Button>\n          </Grid>\n        </div>\n      </Popover>\n    </>\n  );\n};\n\nexport default CopyLinkButton;\n","import type { Client, DynamicSamplingContext, Scope, Span, Transaction } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient, getCurrentScope } from '../exports';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport { spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n  trace_id: string,\n  client: Client,\n  scope?: Scope,\n): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  // TODO(v8): Remove segment from User\n  // eslint-disable-next-line deprecation/deprecation\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) as DynamicSamplingContext;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\ntype TransactionWithV7FrozenDsc = Transaction & { _frozenDynamicSamplingContext?: DynamicSamplingContext };\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  // passing emit=false here to only emit later once the DSC is actually populated\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  const txn = getRootSpan(span) as TransactionWithV7FrozenDsc | undefined;\n  if (!txn) {\n    return dsc;\n  }\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n  // @see Transaction class constructor\n  const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n  if (v7FrozenDsc) {\n    return v7FrozenDsc;\n  }\n\n  // TODO (v8): Replace txn.metadata with txn.attributes[]\n  // We can't do this yet because attributes aren't always set yet.\n  // eslint-disable-next-line deprecation/deprecation\n  const { sampleRate: maybeSampleRate, source } = txn.metadata;\n  if (maybeSampleRate != null) {\n    dsc.sample_rate = `${maybeSampleRate}`;\n  }\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const jsonSpan = spanToJSON(txn);\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  if (source && source !== 'url') {\n    dsc.transaction = jsonSpan.description;\n  }\n\n  dsc.sampled = String(spanIsSampled(txn));\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","var _typeof = require(\"@babel/runtime/helpers/typeof\")[\"default\"];\n\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"defs\", null, _react.default.createElement(\"path\", {\n  id: \"a\",\n  d: \"M0 0h24v24H0V0z\"\n})), _react.default.createElement(\"path\", {\n  d: \"M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1a6.875 6.875 0 000 9.79c2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z\"\n})), 'Update');\n\nexports.default = _default;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  change,\n  BaseFieldProps,\n} from 'redux-form';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../../../components/FieldTextField';\nimport FieldAutoSuggest, {IFieldAutoSuggestComponentProps} from '../../../components/FieldAutoSuggest';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {\n  required,\n  isNotEmpty,\n  isNotEmptyStringRequired,\n} from '../../../validators';\nimport {\n  GetProvinceAction,\n  GetCountriesAction,\n  GetCityAction,\n  GetCountryAdminDivisionAction,\n} from '../../../modules/ProjectLocationModule/actions';\nimport {\n  makeSelectCountries,\n  makeSelectProvinces,\n  makeSelectCities,\n} from '../../../modules/ProjectLocationModule/selectors';\nimport {\n  selectVisibleCountries,\n  getCountryDisabledPredicate,\n} from '../../../modules/ProjectLocationModule/countryFilter';\nimport {\n  Map,\n  List,\n  Set,\n  is,\n} from 'immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {ListItem, Project} from '../../../models';\nimport { createStructuredSelector } from 'reselect';\nimport { CreateMasterProjectFormVariant } from '../../CreateNewMasterModal/constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport  * as amplitude from '@amplitude/analytics-browser';\n\nconst ITEM_HEIGHT = 30;\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1,\n    height: 250,\n  },\n  chip: {\n    margin: theme.spacing() / 4,\n  },\n  // We had to use a lot of global selectors in order to style react-select.\n  // We are waiting on https://github.com/JedWatson/react-select/issues/1679\n  // to provide a much better implementation.\n  // Also, we had to reset the default style injected by the library.\n  '@global': {\n    '.Select-control': {\n      display: 'flex',\n      alignItems: 'center',\n      border: 0,\n      height: 'auto',\n      background: 'transparent',\n      '&:hover': {\n        boxShadow: 'none',\n      },\n    },\n    '.Select-multi-value-wrapper': {\n      flexGrow: 1,\n      display: 'flex',\n      flexWrap: 'wrap',\n    },\n    '.Select--multi .Select-input': {\n      margin: 0,\n    },\n    '.Select.has-value.is-clearable.Select--single > .Select-control .Select-value': {\n      padding: 0,\n    },\n    '.Select-noresults': {\n      padding: theme.spacing() * 2,\n    },\n    '.Select-input': {\n      display: 'inline-flex !important',\n      padding: 0,\n      height: 'auto',\n      width: 178,\n      outline: 'none',\n      border: 'none'\n    },\n    '.Select-input input': {\n      background: 'transparent',\n      border: 0,\n      padding: 0,\n      cursor: 'default',\n      display: 'inline-block',\n      fontFamily: 'inherit',\n      fontSize: 'inherit',\n      margin: 0,\n      outline: 0,\n    },\n    '.Select-placeholder, .Select--single .Select-value': {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      display: 'flex',\n      alignItems: 'center',\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(16),\n      padding: 0,\n    },\n    '.Select-placeholder': {\n      opacity: 0.42,\n      color: theme.palette.common.black,\n      width: '100%',\n    },\n    '.Select-menu-outer': {\n      backgroundColor: theme.palette.background.paper,\n      boxShadow: theme.shadows[2],\n      position: 'absolute',\n      left: 0,\n      top: `calc(100% + ${theme.spacing()}px)`,\n      width: '100%',\n      zIndex: 2,\n      maxHeight: ITEM_HEIGHT * 3,\n    },\n    '.Select.is-focused:not(.is-open) > .Select-control': {\n      boxShadow: 'none',\n    },\n    '.Select-menu': {\n      maxHeight: ITEM_HEIGHT * 3,\n      overflowY: 'auto',\n    },\n    '.Select-menu div': {\n      boxSizing: 'content-box',\n    },\n    '.Select-arrow-zone, .Select-clear-zone': {\n      color: theme.palette.action.active,\n      cursor: 'pointer',\n      height: 21,\n      width: 21,\n      zIndex: 1,\n    },\n    // Only for screen readers. We can't use display none.\n    '.Select-aria-only': {\n      position: 'absolute',\n      overflow: 'hidden',\n      clip: 'rect(0 0 0 0)',\n      height: 1,\n      width: 1,\n      margin: -1,\n    },\n  },\n});\ninterface IProjectFormComponentProps {\n  onSubmit: (values: any) => void;\n  variantSet: Set<CreateMasterProjectFormVariant>;\n  data?: IMap<Project>;\n  form?: string;\n  filterOutCountryIds?: number[];\n  enabledCountryIds?: number[];\n}\n\ninterface IProjectForm extends IProjectFormComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  initialValues: IMap<Project>;\n  editMode: boolean;\n}\n\nexport const FORM_NAME = 'NewMasterModalForm';\ntype NewProjectModalProps = WithTranslation & WithAmplitudeData & IProjectForm & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass NewProjectModalForm extends React.PureComponent<NewProjectModalProps, {}> {\n\n  public componentDidMount() {\n    const {\n      getCountries,\n    } = this.props;\n    getCountries();\n  }\n\n  public componentDidUpdate(prevProps: NewProjectModalProps) {\n    const {\n      formValues: prevFormValues,\n    } = prevProps;\n    const {\n      formValues,\n      initialValues,\n    } = this.props;\n\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (prevFormValues == null || countryId !== prevFormValues.getIn(['location', 'country', 'id'])) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (prevFormValues == null || provinceId !== prevFormValues.getIn(['location', 'province', 'id'])) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      untouch,\n      amplitudeData,\n    } = this.props;\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      if (isNaN(countryId)) {\n        amplitude.logEvent('NaN Province Search', amplitudeData({\n          countryId: _countryId,\n          type: typeof _countryId,\n          source: 'Master Modal',\n          data: countries?.toJS(),\n        }));\n      }\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(form, 'location.country', countries.find((country) => {\n        return country.get('id') === _countryId;\n      })));\n    } else {\n      dispatch(change(form, 'location.country', null));\n    }\n    untouch('location.province.id');\n    untouch('location.city.id');\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n      untouch,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(form, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n    } else {\n      dispatch(change(form, 'location.province', null));\n    }\n    untouch('location.city.id');\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n    } else {\n      dispatch(change(form, 'location.city', null));\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      onSubmit,\n      t,\n      countries,\n      provinces,\n      cities,\n      children,\n      formValues = Map(),\n      enabledCountryIds,\n    } = this.props;\n\n    const country = formValues.getIn(['location', 'country']) || Map();\n    const province = formValues.getIn(['location', 'province']) || Map();\n\n    return (\n      <form\n        onSubmit={handleSubmit(onSubmit)}\n        style={{\n          padding: '24px 0',\n        }}\n      >\n        <Grid\n          container={true}\n          justify='flex-start'\n          alignItems='center'\n          spacing={3}\n        >\n          <Grid\n            item={true}\n            sm={12}\n            md={12}\n            lg={12}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewMasterProject.Name'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  autoComplete: 'no',\n                }\n              }}\n              name='name'\n              validate={[isNotEmptyStringRequired]}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={countryName || t('placeholders.CountrySelection')}\n              props={{\n                label: t('createNewProject.Country'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.country.id')\n                },\n                autosuggestProps: {\n                  directMode: false,\n                  data: countries.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  },\n                  getSuggestionDisabled: getCountryDisabledPredicate(enabledCountryIds),\n                },\n                inputProps: {\n                  onChange: this.selectCountry,\n                  type: 'text',\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.country.id'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldAutoSuggest}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              props={{\n                label: t('createNewProject.StateProvince'),\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.province.id')\n                },\n                autosuggestProps:{\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: provinces.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps:{\n                  onChange: this.selectProvince,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty()\n                },\n              }}\n              name='location.province.id'\n              component={FieldAutoSuggest}\n              // validate={[\n              //   required,\n              //   isNotEmpty\n              // ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={cityName || t('placeholders.CitySelection')}\n              props={{\n                label: t('createNewProject.City'),\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.city.id')\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: cities.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return value.length !== 0;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCity,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty() || province.isEmpty()\n                },\n              }}\n              name='location.city.id'\n              component={FieldAutoSuggest}\n              // validate={[\n              //   required,\n              //   isNotEmpty\n              // ]}\n            />\n          </Grid>\n        </Grid>\n        {children}\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IProjectFormComponentProps) => {\n\n  const editMode = ownProps.variantSet.has(CreateMasterProjectFormVariant.WITH_EDIT_MODE);\n\n  // set up initial values\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const initialValues = data;\n\n  const form = ownProps.form != null\n    ? ownProps.form\n    : editMode\n      ? `${FORM_NAME}Edit`\n      : FORM_NAME;\n\n  const rawCountriesList = makeSelectCountries()(state);\n  const countries = selectVisibleCountries(rawCountriesList, {\n    enabledCountryIds: ownProps.enabledCountryIds,\n    filterOutCountryIds: ownProps.filterOutCountryIds,\n  });\n\n  return {\n    form,\n    initialValues,\n    editMode,\n    countries,\n    ...createStructuredSelector({\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      formValues: getFormValues(form),\n    })(state)\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectFormComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: false,\n  }),\n)(NewProjectModalForm);\n","import * as React from 'react';\nimport {\n  TableCell,\n  makeStyles,\n  Grid,\n  useTheme,\n  Tooltip,\n} from '@material-ui/core';\n\nexport const DROPDOWN_CELL_DATATYPE = 'dropDownCellDatatype';\n\ninterface IDropDownCellProps {\n  valueArray: string[];\n  handleClick: (valueArray: string[]) => (e: any) => void;\n  enableDropdownLength?: number;\n  type?: 'table' | 'grid';\n  withTooltip?: boolean;\n}\n\nconst useStyles = makeStyles((theme) => ({\n  chip: {\n    padding: theme.spacing(1, 1.25),\n    backgroundColor: theme.palette.grey[200],\n    margin: theme.spacing(0, 0.25),\n    whiteSpace: 'nowrap',\n    borderRadius: theme.shape.borderRadius\n  }\n}));\n\nconst DropDownCell: React.FC<IDropDownCellProps> = (props) => {\n  const {\n    valueArray = [],\n    handleClick,\n    enableDropdownLength = 3,\n    type = 'table',\n    withTooltip = false\n  } = props;\n\n  const theme = useTheme();\n  const classes = useStyles(theme);\n\n  const length = valueArray.length;\n  const enableDropdown = length > enableDropdownLength;\n\n  switch (type) {\n    case 'grid': return (\n      <Grid\n        onClick={enableDropdown ? handleClick(valueArray.slice(enableDropdownLength)) : null}\n        container={true} alignItems='center' wrap='nowrap'\n        style={{ cursor: enableDropdown ? 'pointer' : 'initial' }}\n      >\n        {\n          length\n            ? (\n              valueArray.slice(0, enableDropdownLength).map((value: string, index) =>\n                withTooltip ? (\n                  <Tooltip title={value} key={index}>\n                    <span className={classes.chip}>\n                      {value}\n                    </span>\n                  </Tooltip>\n                )\n                :\n                (\n                  <span key={index} className={classes.chip}>\n                    {value}\n                  </span>\n                )\n              )\n            )\n            : '-'\n        }\n        {\n          enableDropdown ? <span>{`+${length - enableDropdownLength}...`}</span> : null\n        }\n      </Grid>\n    );\n    case 'table':\n    default: return (\n      <TableCell\n        onClick={enableDropdown ? handleClick(valueArray.slice(enableDropdownLength)) : null}\n        datatype={enableDropdown ? DROPDOWN_CELL_DATATYPE : ''}\n        style={{ cursor: enableDropdown ? 'pointer' : 'initial' }}\n      >\n        <Grid container={true} alignItems='center' wrap='nowrap'>\n          {\n            length\n              ? (\n                valueArray.slice(0, enableDropdownLength).map((value: string, index) =>\n                  withTooltip ? (\n                    <Tooltip title={value} key={index}>\n                      <span className={classes.chip}>\n                        {value}\n                      </span>\n                    </Tooltip>\n                  )\n                  :\n                  (\n                    <span key={index} className={classes.chip}>\n                      {value}\n                    </span>\n                  )\n                )\n              )\n              : '-'\n          }\n          {\n            enableDropdown ? <span>{`+${length - enableDropdownLength}...`}</span> : null\n          }\n        </Grid>\n      </TableCell>\n    );\n  }\n};\n\nexport default DropDownCell;\n","import ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_ACCOUNT2';\nconst gatewayEndPoint = 'ENDPOINT_APIGATEWAY';\n\n// On failure ApiClient.post and fetchDataWithSuccess resolve with the raw\n// fetch Response in `data`; the gateway wraps errors as\n// { payload: { error: { error } } } where error is a string or, for\n// validation failures, an array of messages.\nconst extractGatewayError = async (response: any): Promise<string> => {\n  try {\n    const body = await response?.data?.json?.();\n    const error = body?.payload?.error?.error;\n    if (Array.isArray(error)) {\n      return error.join('; ') || 'Unexpected error';\n    }\n    return error || 'Unexpected error';\n  } catch (error) {\n    return 'Unexpected error';\n  }\n};\n\nconst AccountServiceApi = {\n\n  async fetchPreference(env: any, appId: string, preference: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.fetchData(`/preference/user/${preference}`);\n      if (response?.payload?.account?.preference?.[preference]) {\n        return response.payload.account.preference[preference];\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get preference:', error);\n      throw error;\n    }\n  },\n\n  async savePreference(env: any, appId: string, preference: any, data: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      data = {\n        [preference]: JSON.stringify(data)\n      };\n      const response = await apiClient.put(`/preference/user/${preference}`, data);\n      if (response?.payload?.account?.preference?.[preference]) {\n        return response.payload.account.preference[preference];\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get preference:', error);\n      throw error;\n    }\n  },\n\n  // PT-5486 (2026-08-25): raw-body PUT for prefs that store an\n  // object directly (no `{ [preference]: JSON.stringify(...) }`\n  // wrapper). Matches the old `changePreference` shape used by\n  // QuoteDownloadPreview — the read side (`fetchPreference`)\n  // returns the same object back, so shapes align.\n  async saveRawPreference(env: any, appId: string, preference: string, userType: 'user' | 'firm', data: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.put(`/preference/${userType}/${preference}`, data);\n      if (response?.payload?.account?.preference?.[preference]) {\n        return response.payload.account.preference[preference];\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error save raw preference:', error);\n      throw error;\n    }\n  },\n\n  async getCategories(env: any, appId: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.fetchData(`/categories`);\n      if (response?.payload?.account?.category) {\n        return response?.payload?.account?.category;\n      } else {\n        return [];\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get categories:', error);\n      throw error;\n    }\n  },\n\n  async getManufacturers(env: any, appId: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.fetchData(`/manufacturers`);\n      if (response?.payload?.account?.manufacturer) {\n        return response?.payload?.account?.manufacturer;\n      } else {\n        return [];\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get manufacturers:', error);\n      throw error;\n    }\n  },\n\n  async getEmailSetting(env: any, appId: string, firmId: number): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.fetchData(`/msaccount/firm-email-setting.findOne?firmId=${firmId}`);\n      return response?.payload?.msaccount || null;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get email setting:', error);\n      throw error;\n    }\n  },\n\n  async createEmailSetting(env: any, appId: string, data: { firmId: number; domain: string; status?: number }): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post(`/msaccount/firm-email-setting.create`, data);\n      return response?.data?.payload?.msaccount || null;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error create email setting:', error);\n      throw error;\n    }\n  },\n\n  async updateEmailSetting(env: any, appId: string, data: { id: number; domain?: string; status?: number }): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const { id, ...updateData } = data;\n      const response = await apiClient.update(`/msaccount/firm-email-setting.update`, id, updateData);\n      return response?.data?.payload?.msaccount || null;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error update email setting:', error);\n      throw error;\n    }\n  },\n\n  // PT-5486: per-user Email Settings page — saves go through mono so\n  // base64 signature images get uploaded to file-service. Reads use\n  // the legacy `fetchPreference(env, appId, 'emailSettings')` above.\n  async upsertUserEmailSetting(\n    env: any,\n    appId: string,\n    data: {\n      signature?: string;\n      fromMail?: string;\n      fromFlag?: number;\n      cc?: string[];\n      ccFlag?: number;\n      bcc?: string[];\n      bccFlag?: number;\n    },\n  ): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post(`/msaccount/user-email-setting.upsert`, data);\n      return response?.data?.payload?.msaccount || null;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error upsert user email setting:', error);\n      throw error;\n    }\n  },\n  // Rejects rather than resolving to an empty list on failure: the edit form\n  // treats the result as the firm's whole rule set, and a save deletes every\n  // rule it leaves out.\n  async getFirmBillingRules(env: any, appId: string, firmId: number): Promise<any[]> {\n    const baseURL = env.get(gatewayEndPoint);\n    const apiClient = new ApiClient(baseURL, appId);\n    const response = await apiClient.fetchDataWithSuccess(`/msaccount/firm-billing.find?firmId=${firmId}`);\n    if (!response?.success) {\n      throw new Error(response?.error || await extractGatewayError(response));\n    }\n    const rules = response.data?.payload?.msaccount;\n    if (!Array.isArray(rules)) {\n      throw new Error('Unexpected billing rules response');\n    }\n    return rules;\n  },\n\n  // Replaces the firm's billing rules with exactly the given list; rules\n  // omitted from it are deleted by the backend. The baseline is the rule set\n  // the edit started from, and the backend refuses the save with 409 if it has\n  // changed; the thrown error carries the HTTP status so callers can tell.\n  async saveFirmBillingRules(\n    env: any,\n    appId: string,\n    data: {\n      firmId: number;\n      rules: Array<{ ruleType: string; ruleConfiguration: { [field: string]: any } }>;\n      baseline: Array<{ ruleType: string; updatedAt: string }>;\n    },\n  ): Promise<any[]> {\n    const baseURL = env.get(gatewayEndPoint);\n    const apiClient = new ApiClient(baseURL, appId);\n    const response = await apiClient.post(`/msaccount/firm-billing.save`, data);\n    if (!response?.success) {\n      throw Object.assign(new Error(response?.error || await extractGatewayError(response)), { status: response?.status });\n    }\n    const rules = response.data?.payload?.msaccount;\n    if (!Array.isArray(rules)) {\n      throw new Error('Unexpected billing rules response');\n    }\n    return rules;\n  },\n};\n\nexport default AccountServiceApi;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"\n}), 'KeyboardArrowUp');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"\n}), 'KeyboardArrowDown');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\"\n}), 'Folder');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import { createStyles, Grid, makeStyles, Table, TableBody, TableCell, TableRow, Theme, Typography } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport * as React from 'react';\nimport { ListItem } from '../../../../models';\nimport { useTranslation } from 'react-i18next';\n\n\ninterface IKeyContactsAddedToProjectComponentProps {\n  keyContactArr: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  tableCell: {\n    borderBottom: 'none',\n  }\n}));\n\nconst KeyContactsAddedToProject: React.FC<IKeyContactsAddedToProjectComponentProps> = ({ keyContactArr }) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  if (!keyContactArr.length) {\n    return null;\n  }\n\n  return (\n    <Grid\n      item={true}\n      xs={12}\n    >\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        <Typography>{t('formStepping.createProjectSteps.step2KeyContactsSubtitle')}</Typography>\n        <Grid>\n          <Table>\n            <TableBody>\n              {\n                keyContactArr.map((contactListItem: IMap<ListItem<number>>, index: number) => {\n                  return <TableRow key={index}>\n                    <TableCell className={classes.tableCell}>\n                      {\n                        [\n                          contactListItem.getIn(['contact', 'firstName']),\n                          contactListItem.getIn(['contact', 'lastName'])\n                        ].filter(x => x).join(' ')\n                        || contactListItem.getIn(['contact', 'organization'])\n                        || 'no name'\n                      }\n                    </TableCell>\n                    <TableCell className={classes.tableCell}>\n                      {contactListItem.getIn(['contact', 'email']) || t('formStepping.createProjectSteps.noEmail')}\n                    </TableCell>\n                    <TableCell className={classes.tableCell}>\n                      {contactListItem.getIn(['contact', 'contactType']) || t('formStepping.createProjectSteps.noOccupation')}\n                    </TableCell>\n                    <TableCell className={classes.tableCell}>\n                      {\n                        [\n                          contactListItem.getIn(['contact', 'address1']),\n                          contactListItem.getIn(['contact', 'address2'])\n                        ].filter((val) => val).join(', ') || t('formStepping.createProjectSteps.noAddress')\n                      }\n                    </TableCell>\n                  </TableRow>;\n                })\n              }\n            </TableBody>\n          </Table>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default KeyContactsAddedToProject;","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  WithTheme,\n} from '@material-ui/core/styles';\nimport {\n  createSelectorCreator,\n  defaultMemoize\n} from 'reselect';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose,\n} from 'redux';\nimport {\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  reduxForm\n} from 'redux-form/immutable';\nimport {\n  List,\n  Map,\n  isImmutable,\n  is,\n} from 'immutable';\nimport {\n  IMap,\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ListItem,\n  Collaborator,\n  Contact,\n  Project,\n  KeyContact,\n} from '../../../models';\nimport { ControlledDrawer, UserContactDrawerDetails } from '../../../components';\nimport AddKeyContacts from './AddKeyContacts';\nimport KeyContactsAddedToProject from './KeyContactsAddedToProject/Component';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\n\ninterface IContributorsComponentProps {\n  onSubmit: (values: any) => void;\n  projectData?: IMap<Project>;\n}\n\ninterface IContributors extends IContributorsComponentProps {\n  firmCollaborators: Map<number, IMap<Collaborator>>;\n  nonFirmCollaborators: Map<number, IMap<Collaborator>>;\n  addCollaborator: any;\n  dispatch: React.Dispatch<IAction>;\n  permissions: Map<number, List<string>>;\n  contactFormValues: Map<string, any>;\n}\n\nexport const FORM_NAME = 'NewProjectKeyContactsForm';\n\ntype ContributorsType = IContributors & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nconst styles = (theme: Theme): StyleRules => ({\n  formContainer: {\n    margin: theme.spacing() * 2,\n    width: '100%',\n  },\n});\n\nexport const CONTACT_DRAWER_ID = 'contactDrawer';\nexport const CONTACT_CONTENT_EDIT_KEY = '__UserContactDrawerDetailsContactEdit__';\n\ntype ReactSelectMultiAction = 'remove-value' | 'select-option';\ninterface IReactSelectMultiChange<T> {\n  action: ReactSelectMultiAction;\n  option?: T;\n  removedValue?: T;\n}\n\ninterface IContactListItem extends ListItem {\n  contact: IMap<Contact>;\n}\n\n// interface INewProjectKeyContactsFormState {\n//   selectedCollaborators: Map<number, IMap<Collaborator>>;\n// }\nclass NewProjectKeyContactsForm extends React.Component<ContributorsType, {\n}> {\n  public state = {\n    selectedCollaborators: Map<number, IMap<Collaborator>>(),\n  };\n\n  public updateCollaborator = (updatedValues: Array<IMap<ListItem>>, updateAction: IReactSelectMultiChange<IMap<Contact>>) => {\n    // console.error('selected', {\n    //   updatedValues, updateAction\n    // })\n    this.setState({\n      selectedContacts: updatedValues\n    });\n  }\n\n  public getKeyContactsArr = () => {\n    const {\n      contactFormValues,\n    } = this.props;\n    const keyContactArrImmutable = (contactFormValues.get('keyContacts') || []);\n    const keyContactArrImmutableWithContactData = keyContactArrImmutable\n      // .filter((keyContact: IMap<Partial<KeyContact>>) => keyContact.get('contact'))\n      .filter((keyContact: IMap<Partial<KeyContact>>) => keyContact.get('contact') && !keyContact.get('quoteId'));\n      // only show one contact per contact\n      // .reduce((newArr, keyContact: IMap<Partial<KeyContact>>) => {\n      //   if (newArr.findIndex((item: IMap<Partial<KeyContact>>) => item.getIn(['contact', 'id']) === keyContact.getIn(['contact', 'id'])) === -1) {\n      //     if (isImmutable(keyContactArrImmutable)) {\n      //       newArr = newArr.push(keyContact);\n      //     } else {\n      //       newArr.push(keyContact);\n      //     }\n      //     return newArr;\n      //   }\n      //   return newArr;\n      // }, isImmutable(keyContactArrImmutable) ? List<IMap<Partial<KeyContact>>>() : []);\n\n    return isImmutable(keyContactArrImmutable) ? keyContactArrImmutableWithContactData.toArray() : keyContactArrImmutableWithContactData;\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      onSubmit,\n      children,\n      classes,\n    } = this.props;\n\n    const keyContactArr = this.getKeyContactsArr();\n\n    return (\n      <Grid\n        container={true}\n      >\n        <ControlledDrawer\n          localKey={CONTACT_DRAWER_ID}\n          menuComponent={<UserContactDrawerDetails drawerId={CONTACT_DRAWER_ID} />}\n        />\n        <form\n          onSubmit={handleSubmit(onSubmit)}\n          className={classes.formContainer}\n        >\n          <Grid\n            container={true}\n            spacing={2}\n          >\n            <AddKeyContacts keyContactArr={keyContactArr} />\n            <KeyContactsAddedToProject keyContactArr={keyContactArr} />\n          </Grid>\n          {/* back/finish buttons */}\n          {children}\n        </form>\n      </Grid>\n    );\n  }\n}\n\nconst createImmutableEqualSelector = createSelectorCreator(\n  defaultMemoize,\n  is\n);\n\nconst getInitialValue = createImmutableEqualSelector(\n  (ownProps: IContributorsComponentProps) => ownProps.projectData,\n  (project) => {\n    return Map<string, any>().withMutations((mutableMap) => {\n      mutableMap.set('keyContacts', (project || new Project({ id: -1 }).toImmutable()).get('keyContacts'));\n    });\n  }\n);\n\nconst mapStateToProps = (state: any, ownProps: IContributorsComponentProps) => {\n  return {\n    initialValues: getInitialValue(ownProps),\n    contactFormValues: getFormValues(FORM_NAME)(state) || Map<string, any>(),\n  };\n};\n\nexport default compose<React.ComponentClass<IContributorsComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps),\n  withTranslation('translations'),\n  withReduxFormValidationTranslation({ formName: FORM_NAME }),\n  reduxForm({\n    form: FORM_NAME,\n    touchOnChange: true,\n    enableReinitialize: true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: true,\n  }),\n)(NewProjectKeyContactsForm);\n","import superPropBase from \"@babel/runtime/helpers/esm/superPropBase\";\nexport default function _get(target, property, receiver) {\n  if (typeof Reflect !== \"undefined\" && Reflect.get) {\n    _get = Reflect.get;\n  } else {\n    _get = function _get(target, property, receiver) {\n      var base = superPropBase(target, property);\n      if (!base) return;\n      var desc = Object.getOwnPropertyDescriptor(base, property);\n\n      if (desc.get) {\n        return desc.get.call(receiver);\n      }\n\n      return desc.value;\n    };\n  }\n\n  return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n  while (!Object.prototype.hasOwnProperty.call(object, property)) {\n    object = getPrototypeOf(object);\n    if (object === null) break;\n  }\n\n  return object;\n}","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IQuickTextState,\n} from './reducer';\n\n// import {\n//   Settings,\n// } from '../../models';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectAllQuickTextList = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuickTextState>) => state.get('allQuickTextList', List()),\n);\n\nexport const makeSelectAddEditStatus = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuickTextState>) => state.get('addQuickTextSuccess', false),\n);\n\nexport const makeSelectDefaultQuickTextByType = (type: string) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IQuickTextState>) => state.getIn(['defaultQuickText', type])\n);\n\nexport default {\n  selectReducerState,\n};\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'quicktext';\n","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List, fromJS} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { IMap } from 'ats-utils/src';\nimport { User, Office, Series, Option, Manufacturer, SearchArgs, Category, Status, AclRoles } from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n  change,\n  initialize\n} from 'redux-form';\nimport { GetOfficeByIdAction, GetOfficesByFirmIdAction, SearchUsersQuickByOfficeIdAction, GetManufacturersAction, GetBrandRepCategoriesAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectUsers, makeSelectFirmOfficeIdsMap, makeSelectOffices, makeSelectManufacturer, makeSelectCategory, makeSelectToolSpecificManufacturers } from '../../../modules/AccountModule/selectors';\nimport { makeSelectChildOrParentIsAtsUser, makeSelectUserOfficeId, makeSelectUserRole } from '../../../modules/AtsModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { seriesStatusList } from '../../../components/StatusChipPim/Component';\nimport { dateValidateFunc, isValidMomentDate } from '../../../validators';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../../components/FieldCheckbox';\nimport { makeSelectPimStatuses, makeSelectTestStatuses } from '../../../modules/ListModule/selectors';\nimport { formatDateRangeFilter } from '../../ProjectList/ProjectListFilter';\n\nexport const SERIES_LIST_FILTER_FORM = 'SeriesListFilters';\n\nconst dateModifiedValidateFunc = (value, allValues) => dateValidateFunc('dateModified', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('dateAdded', allValues);\n\ninterface ISeriesListFilterComponentProps {\n  open: boolean;\n  form?: string;\n  options: Option<Series>;\n  isDraft: boolean;\n  toggleDrawer: () => void;\n  setSearchArgsAndSearch: (arg: SearchArgs<Series>) => void;\n  updateFiltersFormValues: (isDraft: boolean, newFormValues: Map<string, any>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface ISeriesListFilter extends ISeriesListFilterComponentProps {\n  formValues: Map<string, any>;\n  officeUsers: List<IMap<User>>;\n  manufacturers: List<IMap<Manufacturer>>;\n  signedInUserOfficeId: number;\n  signedInUserOffice: IMap<Office>;\n  firmOfficesId: any;\n  categories: List<IMap<Category>>;\n  pimStatuses: List<IMap<Status>>;\n  testStatuses: List<IMap<Status>>;\n  childOrParentIsAtsUser: boolean;\n  userRoles: List<AclRoles>;\n  dispatch: Dispatch<IAction>;\n  searchUsers: (searchTerm: string, officeId: number) => void;\n  getManufacturers: () => void;\n  getOfficeOfLoginUser: (officeId: number) => void;\n  getOfficesByFirmId: (firmId: number) => void;\n  getCategories: () => void;\n}\n\ntype ISeriesListFilterType = ISeriesListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass SeriesListFilter extends React.Component<ISeriesListFilterType> {\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      searchUsers,\n      signedInUserOfficeId,\n      getOfficeOfLoginUser,\n      getOfficesByFirmId,\n      firmOfficesId,\n      getManufacturers,\n      getCategories,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      searchUsers('', signedInUserOfficeId);\n      getManufacturers();\n      getCategories();\n      getOfficeOfLoginUser(signedInUserOfficeId);\n    }\n\n    if (this.props.signedInUserOffice && !this.props.signedInUserOffice.equals(prevProps.signedInUserOffice) && firmOfficesId.size === 0) {\n      getOfficesByFirmId(this.props.signedInUserOffice.get('firmId'));\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    } else if (!formValues && prevProps.formValues) {\n      this.handleResetForm();\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      isDraft,\n      setSearchArgsAndSearch,\n      updateFiltersFormValues,\n    } = this.props;\n\n    if (values.size) {\n      const formattedValues = values.withMutations(ctx => {\n        const invalid = ctx.getIn(['invalid', 'eq']);\n        const createdBy = ctx.get('createdBy😈user😈id');\n        const modifiedBy = ctx.get('modifiedBy😈user😈id');\n        const status = ctx.get('status');\n        const pimStatus = ctx.get('pimStatus');\n        const testStatus = ctx.get('testStatus');\n        const manufacturer = ctx.get('brand');\n        const category = ctx.get('category');\n        const seriesType = ctx.getIn(['isConfigurator', 'eq']);\n\n        if (!invalid) {\n          ctx.delete('invalid');\n        }\n\n        if (seriesType && seriesType.count() === 1) {\n          ctx.setIn(['isConfigurator', 'eq'], seriesType.get(0));\n        } else if (seriesType) {\n          ctx.delete('isConfigurator');\n        }\n\n        const dateAdded = ctx.get('dateAdded');\n        const formattedDateAdded = dateAdded && formatDateRangeFilter(dateAdded);\n        if (formattedDateAdded) {\n          ctx.set('dateAdded', formattedDateAdded);\n        } else if (dateAdded) {\n          ctx.delete('dateAdded');\n        }\n\n        const dateModified = ctx.get('dateModified');\n        const formattedDateModified = dateModified && formatDateRangeFilter(dateModified);\n        if (formattedDateModified) {\n          ctx.set('dateModified', formattedDateModified);\n        } else if (dateModified) {\n          ctx.delete('dateModified');\n        }\n\n        if (createdBy) {\n          createdBy.getIn(['eq', 'id'])\n            ? ctx.setIn(['createdBy😈user😈id', 'eq'], createdBy.getIn(['eq', 'id']))\n            : ctx.delete('createdBy😈user😈id');\n        }\n\n        if (modifiedBy) {\n          modifiedBy.getIn(['eq', 'id'])\n            ? ctx.setIn(['modifiedBy😈user😈id', 'eq'], modifiedBy.getIn(['eq', 'id']))\n            : ctx.delete('modifiedBy😈user😈id');\n        }\n        if (status) {\n          status.getIn(['eq', 'value'])\n            ? ctx.setIn(['status', 'eq'], status.getIn(['eq', 'value']))\n            : ctx.delete('status');\n        }\n        if (pimStatus) {\n          pimStatus.getIn(['eq', 'value'])\n            ? ctx.setIn(['pimStatus', 'eq'], pimStatus.getIn(['eq', 'value']))\n            : ctx.delete('pimStatus');\n        }\n        if (testStatus) {\n          testStatus.getIn(['eq', 'value'])\n            ? ctx.setIn(['testStatus', 'eq'], testStatus.getIn(['eq', 'id']))\n            : ctx.delete('testStatus');\n        }\n        if (manufacturer) {\n          manufacturer.getIn(['eq', 'value'])\n          ? ctx.setIn(['brand', 'eq'], manufacturer.getIn(['eq', 'value']))\n          : ctx.delete('brand');\n        }\n        if (category) {\n          category.getIn(['eq', 'value'])\n          ? ctx.setIn(['category', 'eq'], category.getIn(['eq', 'id']))\n          : ctx.delete('category');\n        }\n      });\n\n      const valuesWithParsedKeys = formattedValues\n        .mapKeys((key) => {\n          return key.replace(new RegExp('😈', 'g'), '.');\n        })\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List());\n\n        const filters = valuesWithParsedKeys.size\n          ? { 'and': valuesWithParsedKeys.toJS() }\n          : {};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n      updateFiltersFormValues(isDraft, values);\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      isDraft,\n      setSearchArgsAndSearch,\n      updateFiltersFormValues,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        SERIES_LIST_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(SERIES_LIST_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n    updateFiltersFormValues(isDraft, Map());\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      officeUsers,\n      handleSubmit,\n      signedInUserOfficeId,\n      searchUsers,\n      manufacturers,\n      categories,\n      t,\n      pimStatuses,\n      testStatuses,\n      isDraft,\n      childOrParentIsAtsUser,\n      uniqueKey,\n      userRoles\n    } = this.props;\n\n    const usersListItem = officeUsers.reduce((acc, user: IMap<User>) => {\n      const userId = user.get('id');\n      const firstName = user.get('firstName');\n      const lastName = user.get('lastName');\n      const listItem = Map().withMutations((immutableMap) => {\n        immutableMap.set('id', userId),\n        immutableMap.set('value', `${firstName} ${lastName}`);\n      });\n\n      return acc.push(listItem);\n    }, List());\n\n    const amendedpimStatuses = pimStatuses ? List([fromJS({ id: null, value: '-' })]).concat(pimStatuses.pop()) : List([fromJS({ id: null, value: '-' })]);\n    const amendedStatues = isDraft ? seriesStatusList : seriesStatusList.filter(status => status.get('id') !== 4);\n\n    return (\n      <Drawer\n        className={classes.drawer}\n        classes={{\n          paper: classes.drawerPaper,\n        }}\n        variant='persistent'\n        anchor='right'\n        open={open}\n        style={{ width: open ? 'initial' : 0}}\n      >\n        <form\n          key={uniqueKey}\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          {/* Header */}\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('generalListFilter.title')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              item={true}\n              xs={5}\n            >\n              <Button\n                color='primary'\n                onClick={this.handleResetForm}\n              >\n                {t('generalListFilter.reset')}\n              </Button>\n              <IconButton\n                onClick={toggleDrawer}\n              >\n                <CloseIcon />\n              </IconButton>\n            </Grid>\n          </Grid>\n\n          {/* Content */}\n          <Grid\n            item={true}\n            className={classes.content}\n          >\n            {/* Invalid status flag */}\n            {childOrParentIsAtsUser &&\n              <Grid\n                container={true}\n                item={true}\n                spacing={2}\n                xs={12}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='invalid.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: 'Show invalid series only',\n                      variant: 'single',\n                      inputProps: {\n                        color: 'primary'\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n            }\n\n            {/* Series Type */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.seriesTypeLabel')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              xs={12}\n              className={classes.configTypesCheckboxesContainer}\n            >\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='isConfigurator.eq'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('pimProductList.advancedConfiguration'),\n                    checkedValue: true,\n                    inputProps: {\n                      color: 'primary',\n                    }\n                  }}\n                />\n              </Grid>\n              <Grid\n                item={true}\n                xs={5}\n              >\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='isConfigurator.eq'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('pimProductList.basicConfiguration'),\n                    checkedValue: false,\n                    inputProps: {\n                      color: 'primary',\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Update date */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.updatedDate')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`dateModified.gte`}\n                  props={{\n                    timeOfDay: 'start',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.startBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[dateModifiedValidateFunc, isValidMomentDate]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n\n              <Grid\n                item={true}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('generalListFilter.to')}\n                </Typography>\n              </Grid>\n\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`dateModified.lte`}\n                  props={{\n                    timeOfDay: 'end',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.endBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[dateModifiedValidateFunc, isValidMomentDate]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n            </Grid>\n\n            {/* created date */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('generalListFilter.createdDate')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n              item={true}\n              xs={12}\n              spacing={2}\n            >\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`dateAdded.gte`}\n                  props={{\n                    timeOfDay: 'start',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.startBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[createdDateValidateFunc, isValidMomentDate]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n\n              <Grid\n                item={true}\n              >\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('generalListFilter.to')}\n                </Typography>\n              </Grid>\n\n              <Grid\n                item={true}\n                xs={6}\n              >\n                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                  name={`dateAdded.lte`}\n                  props={{\n                    timeOfDay: 'end',\n                    keyboardDatePickerProps: {\n                      placeholder: t('generalListFilter.endBy'),\n                      className: classes.dateInput\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                  validate={[createdDateValidateFunc, isValidMomentDate]}\n                  component={FieldDatePickerV2}\n                />\n              </Grid>\n            </Grid>\n\n            {/* created by */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.creator')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='createdBy😈user😈id.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: usersListItem.toJS(),\n                      placeholder: t('pimProductList.selectUser'),\n                      onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Updated by */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.updatedBy')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='modifiedBy😈user😈id.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: usersListItem.toJS(),\n                      placeholder: t('pimProductList.selectUser'),\n                      onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Status */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.status')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='status.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: amendedStatues.toJS(),\n                      placeholder: t('pimProductList.selectStatus'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Publish Status */}\n            {\n              isDraft &&\n                <>\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('pimProductList.publishStatus')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    item={true}\n                    spacing={2}\n                    xs={12}\n                  >\n                    <Grid\n                      item={true}\n                      xs={12}\n                    >\n                      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                        name='pimStatus.eq'\n                        component={FieldAutocomplete}\n                        props={{\n                          inputProps: {\n                            options: amendedpimStatuses.toJS(),\n                            placeholder: t('pimProductList.selectPublishStatus'),\n                            getOptionLabel: option => option ? option.value : null,\n                            renderOption: option => option && <Typography>{option.value}</Typography>\n                          },\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                      />\n                    </Grid>\n                  </Grid>\n                </>\n            }\n\n            {/* Test Status */}\n            { isDraft && userRoles.includes(AclRoles.ATS_USER) &&\n              <>\n                <Typography\n                  variant='caption'\n                  className={classes.subtitle}\n                >\n                  {t('pimProductList.testStatus')}\n                </Typography>\n                <Grid\n                  container={true}\n                  item={true}\n                  spacing={2}\n                  xs={12}\n                >\n                  <Grid\n                    item={true}\n                    xs={12}\n                  >\n                    <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                      name='testStatus.eq'\n                      component={FieldAutocomplete}\n                      props={{\n                        inputProps: {\n                          options: testStatuses?.toJS(),\n                          placeholder: t('pimProductList.selectTestStatus'),\n                          getOptionLabel: option => option ? option.value : null,\n                          renderOption: option => option && <Typography>{option.value}</Typography>\n                        },\n                        formControlProps: {\n                          fullWidth: true\n                        }\n                      }}\n                    />\n                  </Grid>\n                </Grid>\n              </>\n            }\n\n            {/* Manufacturer */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.manufacturer')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='brand.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: manufacturers.toJS(),\n                      placeholder: t('pimProductList.selectManufacturer'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Category */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.category')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='category.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: categories.toJS(),\n                      placeholder: t('pimProductList.selectCategory'),\n                      getOptionLabel: option => option ? option.value : null,\n                      renderOption: option => option && <Typography>{option.value}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Source */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.source')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  name='source.like'\n                  props={{\n                    label: t('pimProductList.source'),\n                    inputProps: {\n                      type: 'text',\n                      onChange: (e) => {\n                        if (!e.target.value) {\n                          dispatch(change(SERIES_LIST_FILTER_FORM, 'source', ''));\n                        }\n                      },\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                  component={FieldTextField}\n                />\n              </Grid>\n            </Grid>\n\n          </Grid>\n        </form>\n      </Drawer>\n    );\n  }\n}\n\nconst DRAWER_MAX_WIDTH = 370;\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: `${DRAWER_MAX_WIDTH}px`\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflowY: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16),\n  },\n  buttonContainer: {\n    marginTop: 0,\n  },\n  configTypesCheckboxesContainer: {\n    marginTop: theme.spacing()\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state, ownProps: ISeriesListFilterComponentProps) => {\n  const form = ownProps.form != null ? ownProps.form : SERIES_LIST_FILTER_FORM;\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      officeUsers: makeSelectUsers(),\n      signedInUserOfficeId: makeSelectUserOfficeId(),\n      firmOfficesId: makeSelectFirmOfficeIdsMap(),\n      offices: makeSelectOffices(),\n      manufacturers: makeSelectToolSpecificManufacturers(),\n      categories: makeSelectCategory(),\n      pimStatuses: makeSelectPimStatuses(),\n      testStatuses: makeSelectTestStatuses(),\n      childOrParentIsAtsUser : makeSelectChildOrParentIsAtsUser(),\n      userRoles: makeSelectUserRole(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    searchUsers: (searchTerm: string, officeId: number) => {\n      dispatch(new SearchUsersQuickByOfficeIdAction({searchTerm, officeId}));\n    },\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetBrandRepCategoriesAction());\n    },\n    getOfficeOfLoginUser: (officeId: number) => {\n      dispatch(new GetOfficeByIdAction({officeId}));\n    },\n    getOfficesByFirmId: (firmId: number) => {\n      dispatch(new GetOfficesByFirmIdAction({firmId}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ISeriesListFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: SERIES_LIST_FILTER_FORM }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(SeriesListFilter);\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Breadcrumbs,\n  Card,\n  CardContent,\n  Grid,\n  IconButton,\n  Link,\n  Theme,\n  Tooltip,\n  Typography,\n  Divider,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport { compose, } from 'redux';\nimport { connect } from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  LoadingSearchedSpecAction,\n  SelectDrawingWithoutRulesAction,\n  UpdateDrawingAction,\n} from '../../modules/SpecModule/actions';\nimport {\n  makeSelectMode,\n  makeSelectMasterProjectspec,\n  makeSelectSpec\n} from '../../modules/SpecModule/selectors';\n\nimport { List, } from 'immutable';\nimport {\n  Address,\n  Drawing,\n  MissingRule,\n  Product,\n  Project,\n  Spec,\n} from '../../models';\nimport {\n  DeleteModal,\n  Image,\n} from '../../components';\nimport {\n  IWithAtsApi,\n  withAtsApi,\n} from '../../contexts/AtsApiContext';\nimport { MediaFileType } from '../../models/File';\nimport { makeSelectAtsApiState, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\n\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport SyncAltRoundedIcon from '@material-ui/icons/SyncAltRounded';\nimport {\n  SelectNewCategoryAction,\n} from '../../modules/ProductModule/actions';\nimport {\n  AMPLITUDE_EVENT, GEOLOCATION_ID, Mode,\n} from '../../constants';\nimport {\n  WithTranslation,\n  withTranslation\n} from 'react-i18next';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { _makeSelectProject, } from '../../modules/ProjectModule/selectors';\nimport memoizeOne from 'memoize-one';\nimport { fromJS } from 'immutable';\nimport DraftStatusChip from '../../components/DraftStatusChip';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport { SetOverlayComponentPropsAction } from '../../modules/ApplicationModule/actions';\nimport { ALTERNATIVES_DROP_DOWN_ID } from '../AlternativeDropDown';\nimport {\n  makeSelectIdentityObject,\n  makeSelectIsAtsSpecTool,\n} from '../../modules/AtsModule/selectors';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\n\ninterface IProjectDetailSpecDrawingProductComponentProps {\n  product: IMap<Product>;\n  dragHandleProps: any;\n  drawingId: number;\n  ProductCategoryPath: string;\n  productIndex: number;\n  showDnDIcon?: boolean;\n  specId: number;\n  editProduct: (product: IMap<Product>, index: number) => void;\n  drawingContainsCompetitorProduct: boolean;\n  isUpdatingDrawing: boolean;\n  setIsUpdatingDrawing: (value: boolean) => void;\n}\n\ninterface IProjectDetailSpecDrawingProductProps extends IProjectDetailSpecDrawingProductComponentProps {\n  drawing: IMap<Drawing>;\n  dispatch: React.Dispatch<IAction>;\n  atsApiIdentity?: boolean;\n  selectedProjectId: number;\n  project: IMap<Project>;\n  spec: IMap<Spec>;\n  selectedSpecProductId: number;\n  locale: string;\n  loginUserOfficeLocation: IMap<Address>;\n  isAtsSpecTool: boolean;\n  isGuestUser: boolean;\n}\n\ntype ProjectDetailSpecProps =\n  IProjectDetailSpecDrawingProductProps\n  & IWithAtsApi\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithAmplitudeData;\n\ninterface IProjectDetailSpecDrawingProductState {\n  hover: boolean;\n  retry: number;\n  deleteModalOpen: boolean;\n}\n\nexport const deleteProduct = ({\n  product,\n  dispatch,\n  drawing,\n  setIsUpdatingDrawing\n}) => {\n  setIsUpdatingDrawing(true);\n  const productIndex = product != null\n      ? drawing.get('products').findIndex(\n          (drawingProduct: IMap<Product>) => drawingProduct.get('id') === product.get('id')\n      )\n      : -1;\n  // here, we should look for a product in the products list with the same id as this product and remove it instead, then fire updatedrawingaction\n  if (productIndex !== -1) {\n    dispatch(\n        new UpdateDrawingAction({\n          drawingId: drawing.get('id'),\n          drawing: drawing.update('products', List<IMap<Product>>(),\n              (productList:\n                   List<IMap<Product>>) =>\n                  productList.remove(productIndex)\n          ),\n          getSeries: false,\n          updateAccessible: true,\n          onFinally: () => {\n            setIsUpdatingDrawing(false);\n          }\n        })\n    );\n    dispatch(new LoadingSearchedSpecAction());\n  }\n}\nexport const getMediaFileIdByRegionLocaleOrFallback = (mediaType: string, {\n  locale,\n  countryId,\n  product,\n  isGuestUser = false,\n  includeUrl = true,\n}) => {\n  const isFr = locale === 'fr';\n  const isCanada = countryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n  // If fr, determine location If nothing available in fr at all,then fall back to en\n  if (mediaType === 'manufacturer_cutsheet' && includeUrl) { // for cutsheet, we want to fallback to URL too\n    if (isGuestUser) {\n      if (isFr) {\n        return product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr', mediaType, 'url'])\n        || product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url']);\n      } else {\n        return product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url']);\n      }\n    }\n\n    const frCutSheet = isCanada\n    ? product.getIn(['file', 'media', 'fr-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr-ca', mediaType, 'url'])\n      || product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr', mediaType, 'url'])\n      || product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url'])\n    : product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr', mediaType, 'url'])\n      || product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url']);\n    const cutsheetMediaSrc = isFr\n      ? frCutSheet\n      : isCanada\n        ? product.getIn(['file', 'media', 'en-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en-ca', mediaType, 'url'])\n          || product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url'])\n        : product.getIn(['file', 'media', 'en-us', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en-us', mediaType, 'url'])\n          || product.getIn(['file', 'media', 'en', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'url']);\n    return cutsheetMediaSrc;\n  } else {\n    if (isGuestUser) {\n      if (isFr) {\n        return product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n      } else {\n        return product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n      }\n    }\n\n    const frFileId = isCanada\n      ? product.getIn(['file', 'media', 'fr-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId'])\n      : product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n    const fileId = isFr\n      ? frFileId\n      : isCanada\n        ? product.getIn(['file', 'media', 'en-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId'])\n        : product.getIn(['file', 'media', 'en-us', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n    return fileId;\n  }\n};\n\nexport const handleRevit = ({ amplitudeData, product, project, specId, spec }) => {\n  amplitude.logEvent(AMPLITUDE_EVENT.downloadProductMedia, amplitudeData({\n    fileType: 'revit',\n    productNumber: product.get('productNumber'),\n    category: product.get('categoryName'),\n    productManufacturer: product.get('brand'),\n    specId,\n    specName: spec.get('name'),\n    projectId: project.get('id'),\n    projectName: project.get('name'),\n    projectAddress: project.get('address'),\n    isDirectDownload: true\n  }));\n};\nclass ProjectDetailSpecDrawingProduct extends React.Component<ProjectDetailSpecProps, IProjectDetailSpecDrawingProductState> {\n  public state = {\n    hover: false,\n    retry: -1,\n    deleteModalOpen: false,\n  };\n\n  public toggleDeleteModal = () => {\n    this.setState({deleteModalOpen: !this.state.deleteModalOpen});\n  };\n\n  public addProduct = (missingRule: IMap<MissingRule>) => {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(new SelectNewCategoryAction({missingRule}));\n  };\n\n  public _deleteProduct = () => {\n    const {\n      product,\n      dispatch,\n      drawing,\n      setIsUpdatingDrawing\n    } = this.props;\n    deleteProduct({ product, dispatch, drawing, setIsUpdatingDrawing });\n  };\n\n  public hoverOn = () => {\n    this.setState({hover: true});\n  };\n\n  public hoverOff = () => {\n    this.setState({hover: false});\n  };\n\n  public _handleRevit = () => {\n    const { amplitudeData, product, project, specId, spec } = this.props;\n    handleRevit({ amplitudeData, product, project, specId, spec });\n  };\n\n  public handleAlternativeFeatureClick = () => {\n    const {\n      product,\n      amplitudeData,\n    } = this.props;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.accessAlternativeFeature, amplitudeData({\n      hasFeatAlternativesAclRole: 'N/A',\n      accessPoint: 'Detail Page',\n      productId: product.get('id'),\n      productNumber: product.get('productNumber'),\n      brand: product.get('brand'),\n      categoryName: product.get('categoryName'),\n      status: product.get('status'),\n      pimStatus: product.get('pimStatus')\n    }));\n  }\n\n  public getMediaFileIdByRegionLocaleOrFallback = (mediaType: string) => {\n    const {locale, spec, product, loginUserOfficeLocation, isGuestUser} = this.props;\n\n    const isFr = locale === 'fr';\n\n    if (isGuestUser) {\n      if (isFr) {\n        return product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n      } else {\n        return product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n      }\n    }\n\n    const specOrLoginUserOfficeCountryId = spec.getIn(['address', 'country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n    const isCanada = specOrLoginUserOfficeCountryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n    // If fr, determine location If nothing available in fr at all,then fall back to en\n    const frCutSheet = isCanada\n      ? product.getIn(['file', 'media', 'fr-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId'])\n      : product.getIn(['file', 'media', 'fr', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n    const fileId = isFr\n      ? frCutSheet\n      : isCanada\n        ? product.getIn(['file', 'media', 'en-ca', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId'])\n        : product.getIn(['file', 'media', 'en-us', mediaType, 'fileId']) || product.getIn(['file', 'media', 'en', mediaType, 'fileId']);\n    return fileId;\n  }\n\n  public render() {\n    const {\n      hover,\n      retry,\n    } = this.state;\n\n    const {\n      spec,\n      drawing,\n      product,\n      classes,\n      dragHandleProps,\n      atsApi,\n      atsApiIdentity,\n      showDnDIcon,\n      productIndex,\n      selectedSpecProductId,\n      t,\n      editProduct,\n      drawingContainsCompetitorProduct,\n      dispatch,\n      isUpdatingDrawing,\n      locale,\n      isAtsSpecTool,\n      loginUserOfficeLocation,\n      isGuestUser\n    } = this.props;\n\n    const {\n      deleteModalOpen,\n    } = this.state;\n\n    if (product == null) {\n      return <div>\n        no product given\n      </div>;\n    }\n\n    const enableAlternativeFeature = isAtsSpecTool && !isGuestUser;\n\n    const isAi = spec?.get('isAi');\n    const isArchived = product?.get('status') === 'archived';\n\n    const fileTypes: MediaFileType[] = ['cad', 'revit', 'manufacturer_cutsheet'];\n    const fileSrc: {\n      [key in MediaFileType]?: string;\n    } = {};\n\n    try {\n      fileTypes.forEach((fileType) => {\n        const fileId = this.getMediaFileIdByRegionLocaleOrFallback(fileType);\n        if (fileId != null) {\n          fileSrc[fileType] = atsApiIdentity && atsApi.callApi(fileId, {\n            service: 'file',\n            endpoint: 'getFile',\n            urlOnly: true,\n            suppressErrors: true,\n            withToken: true,\n            withAppId: true\n          }) as string;\n        }\n      });\n    } catch (e) {\n      if (retry < 5) {\n        setTimeout(() => {\n          this.setState({retry: retry + 1});\n        }, 1000);\n      }\n      console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', {\n        e,\n        retry,\n        atsApi,\n      });\n    }\n\n    const Icons = () => {\n      if (!hover) {\n        return null;\n      }\n      return (\n        <Grid style={{position: 'absolute', top: 0, right: 0}}>\n          {showDnDIcon &&\n          <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : t('drawingProduct.moveTooltip')}>\n            <span>\n              <IconButton\n                {...dragHandleProps}\n                component='div'\n                size='small'\n                disabled={isAi || isUpdatingDrawing}\n              >\n                <SyncAltRoundedIcon fontSize='small'/>\n              </IconButton>\n            </span>\n          </Tooltip>\n          }\n          <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : drawingContainsCompetitorProduct ? t('drawingProduct.editDisabledTooltip') : t('drawingProduct.editTooltip')}>\n            <span style={{cursor: 'pointer'}}> {/* need span to display tooltip when disable and style is to keep the pointer*/}\n              <IconButton\n                onClick={() => editProduct(product, productIndex)}\n                disabled={isAi || drawingContainsCompetitorProduct || isUpdatingDrawing}\n                size='small'\n              >\n                <EditRoundedIcon fontSize='small'/>\n              </IconButton>\n            </span>\n          </Tooltip>\n          <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : t('drawingProduct.deleteTooltip')}>\n            <span>\n              <IconButton\n                onClick={this.toggleDeleteModal}\n                size='small'\n                disabled={isAi || isUpdatingDrawing}\n              >\n                <DeleteIcon fontSize='small'/>\n              </IconButton>\n            </span>\n          </Tooltip>\n          <DeleteModal\n            open={deleteModalOpen}\n            toggleDeleteModal={this.toggleDeleteModal}\n            itemName={product.get('productNumber') ? `${t('drawingProduct.deleteModalProductName')} ${product.get('productNumber')}` : 'unnamed product'}\n            handleDelete={this._deleteProduct}\n            withLoading={false}\n          />\n        </Grid>\n      );\n    };\n\n    const imgSize = 70;\n    const media = product.getIn(['file', 'images', 'main', 'fileId']) + `|resize:${imgSize},${imgSize}`;\n\n    const draftStatus = product.get('draft');\n    const pimStatus = product.get('pimStatus');\n\n    return (\n      <Card\n        classes={{\n          root: classes.cardContainer\n        }}\n        elevation={hover ? 4 : 0}\n        onMouseEnter={this.hoverOn}\n        onMouseLeave={this.hoverOff}\n      >\n        <CardContent className={classes.cardContent}>\n          <Icons/>\n          <Grid\n            container={true}\n            alignItems='flex-start'\n            wrap='nowrap'\n            spacing={1}\n            className={classes.infoContainer}\n          > \n            <Grid item={true}>\n              <Image\n                src={media || ''}\n                width={`${imgSize}px`}\n                aspectRatio={'100%'}\n                fromService={true}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              style={{overflow: 'auto'}}\n            >\n              {\n                draftStatus && \n                  <Grid className={classes.statusChip}>\n                    <DraftStatusChip\n                      pimStatus={pimStatus}\n                    />\n                  </Grid>\n              }\n              <Tooltip\n                title={product.get('brand')}\n                placement='top-start'\n              >\n                <Typography\n                  variant='body1'\n                  color='inherit'\n                  noWrap={true}\n                >\n                  {product.get('brand')}\n                </Typography>\n              </Tooltip>\n\n              <Tooltip\n                title={product.get('productNumber')}\n                placement='top-start'\n              >\n                <Typography\n                  variant='body1'\n                  noWrap={true}\n                >\n                  {product.get('productNumber')}\n                </Typography>\n              </Tooltip>\n\n              <Tooltip\n                title={product.get('categoryName')}\n                placement='top-start'\n              >\n                <Typography\n                  variant='body1'\n                  noWrap={true}\n                >\n                  {product.get('categoryName')}\n                </Typography>\n              </Tooltip>\n              <Breadcrumbs separator='|'>\n                {fileSrc['revit'] &&\n                <Link href={fileSrc['revit']} onClick={this._handleRevit}>{t('drawingProduct.revit')}</Link>}\n                {fileSrc['cad'] && <Link href={fileSrc['cad']}>{t('drawingProduct.cad')}</Link>}\n                {fileSrc['manufacturer_cutsheet'] &&\n                <Link href={fileSrc['manufacturer_cutsheet']}>{t('drawingProduct.cutsheet')}</Link>}\n              </Breadcrumbs>\n            </Grid>\n          </Grid>\n          {\n            isAtsSpecTool && !isGuestUser && (\n              <div onClick={this.handleAlternativeFeatureClick}>\n                <Divider className={classes.divider} />\n                <Tooltip title={enableAlternativeFeature ? '' : t('alternativeModal.disabledAlternativeFeatureTooltip')}>\n                  <Grid\n                    container={true}\n                    justify='center'\n                    alignContent='center'\n                    className={classes.alternativeContainer}\n                    style={{\n                      cursor: enableAlternativeFeature ? 'pointer' : 'grab',\n                      color: enableAlternativeFeature ? '' : 'lightgray'\n                    }}\n                    onClick={(e) => {\n                      if (enableAlternativeFeature) {\n                        dispatch(new SelectDrawingWithoutRulesAction(drawing.get('id')));\n                        dispatch(new SetOverlayComponentPropsAction({\n                          id: ALTERNATIVES_DROP_DOWN_ID,\n                          props: {\n                            specId: spec.get('id'),\n                            drawingId: drawing.get('id'),\n                            productId: product.get('id'),\n                            seriesName: product.get('seriesName'),\n                            specProductId: product.get('specProductId'),\n                            productIndex: productIndex,\n                            anchorEl: e.currentTarget,\n                            basisProductNumber: product.get('productNumber'),\n                            basisBrand: product.get('brand'),\n                            basisBrandId: product.get('brandId'),\n                            basisCategoryname: product.get('categoryName'),\n                            basisCategoryId: product.get('category'),\n                            disableActions: isArchived,\n                            disableManageAlternativeButton: isArchived,\n                          }\n                        }));\n                      }\n                    }}\n                  >\n                      <Typography color={enableAlternativeFeature ? 'primary' : 'inherit'}>\n                        {t('drawingProduct.alternativeProducts')}\n                      </Typography>\n                      {\n                        product.get('specProductId') === selectedSpecProductId\n                            ? <ExpandLessIcon color='primary' />\n                            : <ExpandMoreIcon color={enableAlternativeFeature ? 'primary' : 'inherit'} />\n                      }\n                    </Grid>\n                  </Tooltip>\n                </div>\n            )\n          }\n        </CardContent>\n      </Card>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  displayNone: {\n    visibility: 'hidden',\n  },\n  iconButton: {\n    width: '1em',\n    height: '1em'\n  },\n  container: {\n    padding: '20px',\n  },\n  cardContent: {\n    position: 'relative',\n    width: 290,\n    padding: theme.spacing(3, 0),\n    paddingBottom: `0px !important`,\n    display: 'flex',\n    flexDirection: 'column',\n    justifyContent: 'space-between',\n  },\n  detailsContainer: {\n    padding: theme.spacing(),\n    flexWrap: 'nowrap',\n    width: '100%',\n  },\n  productName: {\n    marginBottom: theme.spacing() * 2,\n  },\n  productNumber: {\n    fontSize: '14px',\n  },\n  productActionButtonsContainer: {\n    alignSelf: 'flex-start',\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'flex-end',\n  },\n  productContainer: {\n    margin: theme.spacing() * 1.25,\n    minWidth: '390px',\n    width: '390px',\n    maxWidth: '390px',\n    '&:first-child': {\n      marginLeft: 1,\n    },\n    '&:last-child': {\n      marginRight: 0,\n      marginBottom: 0\n    },\n  },\n  cardContainer: {\n    margin: theme.spacing(1),\n    border: '0.5px solid rgba(0,0,0,0.12)',\n    padding: theme.spacing(1, 1, 0),\n    display: 'flex'\n  },\n  infoContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  divider: {\n    marginBottom: theme.spacing(2)\n  },\n  alternativeContainer: {\n    paddingBottom: theme.spacing()\n  },\n  statusChip: {\n    marginBottom: theme.spacing()\n  }\n});\n\nconst makeMapStateToProps = () => {\n  const selectAtsApiState = makeSelectAtsApiState('envLoaded');\n  const selectProject = _makeSelectProject();\n  const selectSpec = makeSelectSpec();\n  const selectMasterProjectSepc = makeSelectMasterProjectspec();\n  const selectMode = makeSelectMode();\n  const getDrawing = memoizeOne((finalSpec, drawingId) => {\n    return finalSpec && finalSpec\n      .get('drawings', List())\n      .find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n  });\n  const selectOverlayProps = makeSelectOverlayComponentProp(ALTERNATIVES_DROP_DOWN_ID);\n  const selectLocale = makeSelectLocale();\n  const selectloggedInUserOfficeLocation = makeSelectLoggedInUserOfficeLocation();\n  const selectIsAtsSpecTool = makeSelectIsAtsSpecTool();\n  const selectIdentity = makeSelectIdentityObject();\n  return function mapStateToProps(state, {drawingId}: IProjectDetailSpecDrawingProductComponentProps) {\n    const mode = selectMode(state);\n    const finalSpec = mode === Mode.master ? selectMasterProjectSepc(state) : selectSpec(state);\n    const overlayProps = selectOverlayProps(state);\n    const selectedSpecProductId = overlayProps.specProductId;\n    const isGuestUser = !selectIdentity(state);\n    return ({\n      atsApiIdentity: selectAtsApiState(state),\n      drawing: getDrawing(finalSpec, drawingId),\n      project: selectProject(state) || fromJS({}),\n      spec: selectSpec(state),\n      selectedSpecProductId,\n      locale: selectLocale(state),\n      loginUserOfficeLocation: selectloggedInUserOfficeLocation(state),\n      isAtsSpecTool: selectIsAtsSpecTool(state),\n      isGuestUser,\n    });\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectDetailSpecDrawingProductComponentProps>>(\n  withAtsApi(),\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(makeMapStateToProps),\n)(ProjectDetailSpecDrawingProduct);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  WithTheme,\n  Grid,\n  Typography,\n  MenuItem,\n  Button,\n  Chip,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Map,\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change\n} from 'redux-form';\nimport { reduxForm, Field, getFormValues } from 'redux-form/immutable'\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport specBookletSample from '../../images/printPage/specBookletSample.png';\nimport { GetCoverImagesAction, ICoverImage, ShouldDisablePrintContinueAction } from '../../modules/PrintModule/actions';\nimport { SPEC_PRINT_TYPE } from '../../constants';\nimport { makeSelectCoverImages } from '../../modules/PrintModule/selectors';\nimport { GetSpecPrintConfigAction } from '../../modules/SpecModule/actions';\nimport CoverImageComp from './CoverImageComp';\nimport FieldSelect, { IFieldSelectComponentProps } from '../FieldSelect';\nimport { GetOfficesAction, GetUserByIdAction } from '../../modules/AccountModule/actions';\nimport { makeSelectOffice, makeSelectSearchedContacts, makeSelectUserById } from '../../modules/AccountModule/selectors';\nimport { Office, Spec, User } from '../../models';\nimport { ControlledDrawer, UserContactDrawerDetails } from '..';\nimport { StyleRules } from '@material-ui/styles';\nimport { DRAWER_ID as USER_DRAWER_ID } from '../../containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/constants';\nimport TeamManagementUserDrawer from '../TeamManagementUserDrawer';\nimport withUserPermissions, { IWithUserPermissions } from '../../hoc/withUserPermissions';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport LixilPrintSpecDetail from './LixilPrintSpecDetail';\nimport KeyboardArrowRightRoundedIcon from '@material-ui/icons/KeyboardArrowRightRounded';\nimport UploadCoverDrawer from './UploadCoverDrawer';\nimport { makeSelectSelectedSpecId, makeSelectSpec, makeSelectSpecPrintConfigBySelectedSpecId } from '../../modules/SpecModule/selectors';\nimport FieldRadio, { IFieldRadioComponentProps } from '../FieldRadio';\nimport UserSearchInput from './UserSearchInput';\nimport ContactSearchInput from './ContactSearchInput';\nimport { CONTACT_DRAWER_ID } from '../../containers/Forms/NewProjectKeyContactsForm';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\n\n\n\nexport const SPEC_BOOKLET_FORM_NAME = 'specBookletPrint';\nexport const UPLOAD_COVER_DRAWER = 'UPLOAD_COVER_DRAWER';\nexport enum BRAND {\n  LIXIL = 'lixil',\n  ASB = 'asb',\n  DXV = 'dxv',\n  GROHE = 'grohe'\n}\n\ninterface ISpecificationBookletBetaComponentProps {\n}\ninterface ISpecificationBookletBetaProps extends ISpecificationBookletBetaComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  getCoverImages: () => void;\n  getUser: (id: number) => void;\n  getOffice: (officeId: number) => void;\n  getSpecPrintConfig: (specId: number, type: SPEC_PRINT_TYPE) => void;\n  shouldDisablePrintContinue: (payload: boolean) => void;\n  coverImages: List<IMap<ICoverImage>>;\n  selfUser: IMap<User>;\n  selfOffice: IMap<Office>;\n  formValues: any;\n  specId: number;\n  spec: IMap<Spec>;\n  savedPrintConfig: Map<string, any>;\n}\n\ntype SpecificationBookletBetaProps = ISpecificationBookletBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & InjectedFormProps & IWithUserPermissions;\n\n\nconst sampleModalKey = 'specBookletSampleModalKey';\nclass SpecificationBookletBeta extends React.Component<SpecificationBookletBetaProps> {\n  public state = {\n    printStep: 1\n  }\n\n  public componentDidMount() {\n    const {\n      getCoverImages,\n      getUser,\n      getOffice,\n      getSpecPrintConfig,\n      specId,\n      spec,\n      selfUserId,\n      selfOfficeId,\n    } = this.props;\n\n    const specCreatorOfficeId = spec.getIn(['createdBy', 'office', 'id']);\n\n    if (selfUserId) {\n      getUser(selfUserId);\n    }\n    if (selfOfficeId) {\n      getOffice(selfOfficeId);\n    }\n    // need spec creator office location in case of standalone spec\n    getOffice(specCreatorOfficeId);\n    getCoverImages();\n    getSpecPrintConfig(specId, SPEC_PRINT_TYPE.specBooklet);\n  }\n\n  public componentWillUnmount() {\n    const {\n      shouldDisablePrintContinue,\n    } = this.props;\n\n    shouldDisablePrintContinue(false);\n  }\n\n  public handleCancelUser = () => {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: USER_DRAWER_ID,\n      open: false,\n    }));\n  }\n\n  public render() {\n    const {\n      classes,\n      theme,\n      dispatch,\n      coverImages = List(),\n      selfUser,\n      t\n    } = this.props;\n\n    const {\n      printStep,\n    } = this.state;\n\n    const maximumCustomCoverImages = 4;\n    const customCoverImages = coverImages.filter(coverImage => coverImage.get('isCustom'));\n    const customCoverImagesIsMax = customCoverImages.size === maximumCustomCoverImages || customCoverImages.size > maximumCustomCoverImages;\n\n    return (\n      <>\n        <form style={{ maxWidth: '100%' }}>\n          <PrintWrapper>\n            <PrintHeader\n              title={t('specBookletPrint.specificationBooklet')}\n              description={t('specBookletPrint.description')}\n              fontIcon={['far', 'file-word']}\n              sampleModalKey={sampleModalKey}\n              sampleAlt={t('specBookletPrint.sampleImageAlt')}\n              sampleSrc={specBookletSample}\n            />\n            {/* step1/2 button */}\n            <Grid\n              container={true}\n              alignItems='center'\n            >\n              <Button\n                onClick={() => this.setState({printStep: 1})}\n                className={printStep === 1 ? classes.stepButtonHilight : classes.stepButtonHilightNoBorder}\n              >\n                <Grid>\n                  <Typography variant='button' className={classes.stepButtonTitle}>{t('specBookletPrint.step1')}</Typography>\n                  <Typography variant='subtitle1' className={classes.stepButtonSubtitle}>{t('specBookletPrint.selectCoverPage')}</Typography>\n                </Grid>\n              </Button>\n              <KeyboardArrowRightRoundedIcon\n                className={printStep === 1 ? classes.arrowRight : classes.arrowRightOrange}\n                style={{transform: 'translateX(30%)'}}\n              />\n              <KeyboardArrowRightRoundedIcon\n                className={printStep === 1 ? classes.arrowRight : classes.arrowRightOrange}\n                style={{transform: 'translateX(-30%)'}}\n              />\n              <Button\n                onClick={() => this.setState({printStep: 2})}\n                className={printStep === 1 ? classes.stepButton: classes.stepButtonHilight}\n              >\n                <Grid>\n                  <Chip label={t('specBookletPrint.new')} color='primary' className={classes.newChip}/>\n                  <Typography variant='button' className={classes.stepButtonTitle}>{t('specBookletPrint.step2')}</Typography>\n                  <Typography variant='subtitle1' className={classes.stepButtonSubtitle}>{t('specBookletPrint.selectProducts')}</Typography>\n                </Grid>\n              </Button>\n            </Grid>\n            { printStep === 1\n              ? <Grid style={{padding: '8px'}}>\n                  <CoverImageComp\n                    coverImages={coverImages}\n                    formName={SPEC_BOOKLET_FORM_NAME}\n                    customImagesIsMax={customCoverImagesIsMax}\n                    printType={SPEC_PRINT_TYPE.specBooklet}\n                  />\n\n                  {/* cover pages radio field */}\n                  <Grid item={true} className={classes.formField}>\n                    <Typography variant='body2' color='inherit'>{t('specBookletPrint.coverPages')}</Typography>\n                    <Grid\n                      container={true}\n                      spacing={2}\n                    >\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='brandingPages'\n                          component={FieldRadio}\n                          props={{\n                            label: 'Lixil',\n                            color: 'primary',\n                            checkedValue: BRAND.LIXIL\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='brandingPages'\n                          component={FieldRadio}\n                          props={{\n                            label: 'ASB',\n                            color: 'primary',\n                            checkedValue: BRAND.ASB\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='brandingPages'\n                          component={FieldRadio}\n                          props={{\n                            label: 'DXV',\n                            color: 'primary',\n                            checkedValue: BRAND.DXV\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='brandingPages'\n                          component={FieldRadio}\n                          props={{\n                            label: 'GROHE',\n                            color: 'primary',\n                            checkedValue: BRAND.GROHE\n                          }}\n                        />\n                      </Grid>\n                    </Grid>\n                  </Grid>\n\n                  {/* brand story pages */}\n                  <Grid item={true}>\n                    <Typography variant='body2' color='inherit'>{t('specBookletPrint.brandStoryPages')}</Typography>\n                    <Grid\n                      container={true}\n                      spacing={2}\n                    >\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeStoryPages'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.includeBrandStoryPages'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                    </Grid>\n                  </Grid>\n\n                  {/* back cover pages select field */}\n                  <Grid item={true} xs={12} className={classes.formField}>\n                    <Typography variant='body2' color='inherit'>{t('specBookletPrint.backCoverPages')}</Typography>\n                    <Field<BaseFieldProps<IFieldSelectComponentProps>>\n                      name='backCoverPages'\n                      component={FieldSelect}\n                      props={{\n                        inputProps: {\n                          IconComponent: () => <KeyboardArrowDownRoundedIcon className={classes.arrowDown} />,\n                          style: {\n                            marginTop: '8px'\n                          },\n                          disableUnderline: true,\n                          classes: {\n                            root: classes.underline\n                          }\n                        }\n                      }}\n                    >\n                      <MenuItem value={'asb_commercial'}>{t('specBookletPrint.asbCommercial')}</MenuItem>\n                      <MenuItem value={'asb_engineering'}>{t('specBookletPrint.asbEngineering')}</MenuItem>\n                      <MenuItem value={'asb_standard'}>{t('specBookletPrint.asbStandard')}</MenuItem>\n                      <MenuItem value={'dxv_design'}>{t('specBookletPrint.dxvDesign')}</MenuItem>\n                      <MenuItem value={'grohe_professional'}>{t('specBookletPrint.groheProfessional')}</MenuItem>\n                      <MenuItem value={'grohe_quality'}>{t('specBookletPrint.groheQuality')}</MenuItem>\n                      <MenuItem value={'grohe_sustainability'}>{t('specBookletPrint.groheSustainability')}</MenuItem>\n                      <MenuItem value={'grohe_technology'}>{t('specBookletPrint.groheTechnology')}</MenuItem>\n                      <MenuItem value={'lixil_military'}>{t('specBookletPrint.lixilMilitary')}</MenuItem>\n                    </Field>\n                  </Grid>\n\n                  {/* include product information checkbox field */}\n                  <Grid item={true} className={classes.formField}>\n                    <Typography variant='body2' color='inherit'>{t('specBookletPrint.includeProductInfo')}</Typography>\n                    <Grid\n                      container={true}\n                      spacing={2}\n                    >\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includePNumber'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.p-Number'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeBudgetPrice'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.budget'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeListPrice'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.list'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeQuantity'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.quantity'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeSwatches'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('specBookletPrint.includeSwatchPreviewLabel'),\n                            variant: 'single',\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false\n                          }}\n                        />\n                      </Grid>\n                    </Grid>\n                  </Grid>\n\n                  {/* include user and customer info field */}\n                  <Grid item={true} className={classes.formField}>\n                    <Typography variant='body2' color='inherit' style={{marginBottom:0}}>{t('specBookletPrint.includeUserCustomerInfo')}</Typography>\n                    <Grid container={true} direction='row' justify='space-between' alignItems='flex-start' style={{marginBottom: 160}}>\n                      <Grid container={true} item={true} className={classes.userCustomerfield}>\n                        <UserSearchInput selfUser={selfUser} />\n                      </Grid>\n                      <Grid container={true} item={true} className={classes.userCustomerfield}>\n                        <ContactSearchInput selfUser={selfUser}/>\n                      </Grid>\n                    </Grid> \n                  </Grid>\n                </Grid>\n              : <LixilPrintSpecDetail />\n            }\n          </PrintWrapper>\n        </form>  \n        <ControlledDrawer\n          localKey={USER_DRAWER_ID}\n          menuComponent={<TeamManagementUserDrawer drawerId={USER_DRAWER_ID} handleCancel={this.handleCancelUser} useCustomData={true}/>}\n        />\n        <ControlledDrawer\n          localKey={CONTACT_DRAWER_ID}\n          menuComponent={\n            <UserContactDrawerDetails\n              drawerId={CONTACT_DRAWER_ID}\n            />\n          }\n        />\n        <div style={{width: 0, overflow: 'hidden'}}>\n          <ControlledDrawer\n            localKey={UPLOAD_COVER_DRAWER}\n            hideExpandButton={true}\n            menuComponent={<UploadCoverDrawer customImagesSize={customCoverImages.size} />}\n          />\n        </div>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  stepButton: {\n    width: '200px',\n    backgroundColor: theme.palette.secondary[100],\n    border: `1px solid ${theme.palette.secondary[200]}`,\n    borderRadius: theme.spacing(0.5),\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\n    margin: theme.spacing(2),\n    fontSize: '0.8rem',\n    color: theme.palette.secondary[400],\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700] + '14',\n    }\n  },\n  stepButtonHilight: {\n    width: '200px',\n    backgroundColor: theme.palette.primary[700] + '06',\n    border: `1px solid ${theme.palette.primary[500]}`,\n    borderRadius: theme.spacing(0.5),\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\n    margin: theme.spacing(2),\n    fontSize: '0.8rem',\n    textTransform: 'uppercase',\n    color: theme.palette.primary[800],\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700] + '14',\n    }\n  },\n  stepButtonHilightNoBorder: {\n    width: '200px',\n    backgroundColor: theme.palette.primary[700] + '06',\n    border: '1px solid transparent',\n    borderRadius: theme.spacing(0.5),\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\n    margin: theme.spacing(2),\n    fontSize: '0.8rem',\n    textTransform: 'uppercase',\n    color: theme.palette.primary[800],\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700] + '14',\n    }\n  },\n  stepButtonTitle: {\n    fontSize: '0.9rem',\n    fontWeight: 600,\n    color: 'inherit'\n  },\n  stepButtonSubtitle: {\n    color: 'inherit'\n  },\n  arrowRight: {\n    fontSize: '1.5rem',\n    color: theme.palette.secondary[400]\n  },\n  arrowRightOrange: {\n    // fontSize: '1.5rem',\n    color: theme.palette.primary[800]\n  },\n  newChip: {\n    position: 'absolute',\n    fontSize: '0.7rem',\n    height: theme.spacing(3),\n    bottom: '80%',\n    right: '-15%'\n  },\n  contactInfo: {\n    paddingLeft: theme.spacing(2),\n  },\n  card: {\n    cursor: 'pointer',\n    margin: theme.spacing()\n  },\n  cardContent: {\n    position: 'relative',\n    // over writing material ui's custom stuff\n    padding: 0,\n    paddingBottom: `0 !important`,\n  },\n  coverTitle: {\n    padding: theme.spacing(1, 1),\n  },\n  textEllipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n  },\n  formField: {\n    marginTop: theme.spacing(4)\n  },\n  addIcon: {\n    fontSize: '4rem',\n    color: theme.palette.secondary[300]\n  },\n  userCustomerfield: {\n    margin: '8px 12px 8px 0',\n    flex: '1 1 45%',\n    minWidth: 400\n  },\n  underline: {\n    marginRight: '-25px',\n    minWidth: 200,\n\t\tborderBottom: '1px solid black',\n    cursor: 'default',\n    zIndex: 10,\n    '&:hover': {\n      borderBottom: `1px solid ${theme.palette.primary[900]}`,\n    },\n    '&:focus': {\n      backgroundColor: 'transparent',\n    },\n    // target the dropdown arrow in select field when hover\n    '&:hover&~svg': {\n      color: theme.palette.secondary[500],\n    }\n  },\n  arrowDown: {\n    color: theme.palette.secondary[300],\n    zIndex: 5\n  },\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getCoverImages: () => {\n      dispatch(new GetCoverImagesAction(SPEC_PRINT_TYPE.specBooklet));\n    },\n    getUser: (id: number) => {\n      dispatch(new GetUserByIdAction({ id }));\n    },\n    getOffice: (officeId: number) => {\n      dispatch(new GetOfficesAction(officeId));\n    },\n    getSpecPrintConfig: (specId: number, type: SPEC_PRINT_TYPE) => {\n      dispatch(new GetSpecPrintConfigAction({\n        specId,\n        type,\n      }))\n    },\n    shouldDisablePrintContinue: (payload: boolean) => {\n      dispatch(new ShouldDisablePrintContinueAction(payload));\n    },\n    \n  };\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const coverImages = makeSelectCoverImages(SPEC_PRINT_TYPE.specBooklet)(state);\n  const selfOffice = makeSelectOffice({ officeId: ownProps.selfOfficeId })(state);\n  const selfUser = makeSelectUserById()(state)\n  const specId = makeSelectSelectedSpecId()(state);\n  const spec = makeSelectSpec()(state);\n  const savedPrintConfig = makeSelectSpecPrintConfigBySelectedSpecId()(state);\n\n  const lastName = selfUser && selfUser.get('lastName') || '';\n  const firstName = selfUser && selfUser.get('firstName') || '';\n  const selfUserLabel = [firstName, lastName].filter(x => x).join(' ');\n\n  // check if savedPrintConfig over size of one\n  // savedPrintConfig is either from BE or user selection on step2\n  // the size of 1 would be w/e values the user inputted on step2\n  // if we don't check that then we run into the issue of step1 reinitializing by reduxform with no values\n  // https://atsinc.atlassian.net/browse/SPEC-3100\n  const savedPrintConfigAsInitialValues = savedPrintConfig && savedPrintConfig.size > 1 && savedPrintConfig.withMutations(ctx => {\n    // FE cover image deleted but BE config still save that cover image\n    // if cover image in savedPrintConfig no loger exists on UI, switch to default\n    const savedCoverImage = ctx.get('coverImageId');\n    const foundCoverImage = coverImages && coverImages.find(image => image.get('id') === savedCoverImage);\n    if (foundCoverImage === undefined) {\n      const defaultCoverImage = coverImages && coverImages.getIn(['0', 'id']);\n      ctx.set('coverImageId', defaultCoverImage);\n    }\n    // don't need product Groups in this form\n    ctx.delete('productGroups');\n    // set log in user as default contact\n    ctx.set('contact', fromJS({\n      id: ownProps.selfUserId,\n      label: selfUserLabel,\n      value: selfUser\n    }));\n    // set include brand story page to true as default\n    ctx.set('includeStoryPages', true);\n    // from config, change value of brandingPages and backCoverPage from array to string\n    const brandingPage = ctx.getIn(['brandingPages', 0]) || 'lixil'; //to accommodate old config that has no brandingPages\n    const backCoverPage = ctx.getIn(['backCoverPages', 0]) || 'asb_commercial'; //to accommodate old config that has no backCoverpages\n    ctx.set('brandingPages', brandingPage);\n    ctx.set('backCoverPages', backCoverPage);\n    // if there's customer id in config, need to change to object to match value in the form\n    if (ctx.get('customer')) {\n      const customerId = ctx.get('customer');\n      const contacts = makeSelectSearchedContacts()(state);\n      const organization = contacts && contacts.getIn([0,'organization']);\n      const firstName = contacts && contacts.getIn([0,'firstName']);\n      const lastName = contacts && contacts.getIn([0,'lastName']);\n      const customerLabel = organization || [firstName, lastName].filter(x => x).join(' ') || '';\n      const customerData = contacts && contacts.get(0);\n      ctx.set('customer', fromJS({\n        id: customerId,\n        label: customerLabel,\n        value: customerData\n      }));\n    }\n  });\n\n  const initialValues = savedPrintConfig && savedPrintConfig.size > 1\n    ? savedPrintConfigAsInitialValues\n    : fromJS({\n        coverImageId: coverImages && coverImages.getIn(['0', 'id']),\n        includeStoryPages: true,\n        includePNumber: true,\n        includeBudgetPrice: true,\n        includeQuantity: true,\n        contact: fromJS({\n          id: ownProps.selfUserId,\n          label: selfUserLabel,\n          value: selfUser\n        }),\n        brandingPages: 'lixil',\n        backCoverPages: 'asb_commercial'\n      });\n  return {\n    initialValues,\n    coverImages,\n    selfOffice,\n    selfUser,\n    specId,\n    spec,\n    savedPrintConfig,\n    ...createStructuredSelector({\n      formValues: getFormValues(SPEC_BOOKLET_FORM_NAME),\n    })(state)\n  }\n};\n\nexport default compose<React.ComponentClass<ISpecificationBookletBetaComponentProps>>(\n  withUserPermissions,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: SPEC_BOOKLET_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n    keepDirtyOnReinitialize: true,\n    updateUnregisteredFields: true,\n  }),\n  withTranslation('translations'),\n  withStyles(styles, {withTheme:true}),\n)(SpecificationBookletBeta);\n","export default __webpack_public_path__ + \"static/media/specBookletSample.2af90c00.png\";","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","export default __webpack_public_path__ + \"static/media/success.4be3862c.svg\";","import * as React from 'react';\nimport { Grid, Typography, Theme, FormControl, RadioGroup, Radio, FormControlLabel, Button, Tooltip } from '@material-ui/core';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { compose } from 'redux';\nimport { IAction } from 'ats-utils/src';\nimport { connect } from 'react-redux';\nimport { FieldDropzoneStateResetAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { CreateCoverImageAction } from '../../../modules/PrintModule/actions';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport { BaseFieldProps, InjectedFormProps, WrappedFieldProps, SubmissionError } from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport success from '../../../../../ats-framework/src/images/projectDetail/success.svg';\nimport DrawerEditHeader from '../../DrawerEditHeader';\nimport DrawerEditCTA from '../../DrawerEditCTA';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { UPLOAD_COVER_DRAWER } from '..';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../FieldDropzone';\nimport Xhr from '../../../utils/Xhr';\nimport { withAtsApi } from '../../../contexts';\nimport Api from 'ats-api/src';\nimport { SPEC_PRINT_TYPE } from '../../../constants';\nimport { uploadFileValidation } from '../../TeamManagementUserEditDrawer/Component';\n\nexport const UPLOAD_COVER_DRAWER_FORM = 'UploadCoverDrawerForm';\n\ninterface IUploadCoverDrawerComponentProps {\n  customImagesSize?: number;\n}\n\ninterface IUploadCoverDrawerProps {\n  theme: Theme;\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n  atsApi: Api;\n  resetFieldDropzoneState: () => void;\n  closeDrawer: () => void;\n  createCoverImage: (printType: SPEC_PRINT_TYPE, title: string, fileId: string) => void;\n}\n\ntype IUploadCoverDrawer = IUploadCoverDrawerComponentProps & IUploadCoverDrawerProps & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => ({\n  radioGroupTitleText: {\n    marginLeft: theme.spacing(),\n    color: theme.palette.text.primary\n  },\n  body: {\n    padding: theme.spacing(3, 3, 0, 3),\n    color: theme.palette.text.primary\n  },\n  title: {\n    marginBottom: theme.spacing(),\n    display: 'block'\n  },\n  linearProgress: {\n    flexGrow: 1\n  },\n  downloadComplete: {\n    padding: theme.spacing(2)\n  },\n  primaryTextColor: {\n    color: theme.palette.text.primary\n  }\n});\n\nclass UploadCoverDrawer extends React.Component<IUploadCoverDrawer> {\n  public state = {\n    isComplete: false,\n    customImagesSize: 0\n  };\n\n  public componentDidMount() {\n    this.setState({\n      customImagesSize: this.props.customImagesSize\n    });\n  }\n\n  public componentDidUpdate(prevProps) {\n    if (this.props.customImagesSize !== prevProps.customImagesSize) {\n      this.setState({customImagesSize: this.props.customImagesSize});\n    }\n  }\n\n  public FormElement = () => {\n    const {\n      handleSubmit,\n      classes,\n      theme,\n      t,\n      formValues,\n      closeDrawer\n    } = this.props;\n\n    const dropzone = formValues && formValues.get('dropzone');\n    const isUploading: boolean = dropzone ? dropzone.isUploading : false;\n\n    return (\n      <form onSubmit={handleSubmit(this.submitForm)} className={classes.body}>\n        <Grid container={true} direction='column'>\n          <Grid item={true} style={{ marginBottom: theme.spacing(2)}}>\n            <Typography variant='caption' color='inherit' className={classes.title}>{t('attachmentDrawer.uploadNewCover')}</Typography>\n            <Grid\n              item={true}\n              container={true}\n              direction='column'\n              wrap='nowrap'\n              justify='center'\n              style={{height: theme.spacing(18)}}\n            >\n              <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                component={FieldDropzone}\n                name='dropzone'\n                props= {{\n                  dropzoneProps: {\n                    accept: 'image/*',\n                  }\n                }}\n                validate={uploadFileValidation}\n              />\n            </Grid>\n          </Grid>\n          <DrawerEditCTA\n            saveText={t('attachmentDrawer.addButton')}\n            disabled={isUploading}\n            disableSubmit={isUploading}\n            handleClose={closeDrawer}\n          />\n        </Grid>\n      </form>\n    );\n  }\n\n  public submitForm = async (formData) => {\n    const {\n      atsApi,\n      resetFieldDropzoneState,\n      t,\n      createCoverImage,\n    } = this.props;\n\n    const dropzone  = formData.get('dropzone');\n    if (!dropzone) {\n      throw new SubmissionError({\n        dropzone: t('attachmentDrawer.uploadPromptError'),\n      });\n    }\n\n    const imageArray = await Xhr({atsApi, files: dropzone});\n    const file = imageArray[0];\n    const fileId = file.id;\n    const printType = SPEC_PRINT_TYPE.specBooklet;\n    const title = file.origFileName;\n\n    createCoverImage(printType, title, fileId);\n    resetFieldDropzoneState();\n    this.setState({\n      isComplete: true,\n      customImagesSize: this.state.customImagesSize + 1\n     });\n  }\n\n  public DownloadComplete = () => {\n    const {\n      classes,\n      t,\n      reset,\n    } = this.props;\n\n    const { customImagesSize } = this.state;\n    const maximumCustomCoverImages = 4;\n    const isAddMoreButtonDisabled = customImagesSize === maximumCustomCoverImages || customImagesSize > maximumCustomCoverImages;\n    return (\n      <Grid container={true} direction='column' alignItems='center' className={classes.downloadComplete}>\n        <img src={success}/>\n        <Typography variant='h6'>{t('attachmentDrawer.uploadSuccessTitle')}</Typography>\n        <Typography variant='caption'>{t('attachmentDrawer.imageAdded')}</Typography>\n        <Tooltip\n          title={isAddMoreButtonDisabled ? 'You have reached the maximum number of cover pages.' : ''}\n          placement='bottom'\n          style={{cursor: 'pointer'}}\n        >\n          <div>\n            <Button\n              color='primary'\n              onClick={() => {\n                reset();\n                this.setState({ isComplete: false });\n              }}\n              disabled={isAddMoreButtonDisabled}\n            >\n              {t('attachmentDrawer.addMoreButton')}\n            </Button>\n          </div>\n        </Tooltip>\n      </Grid>\n    );\n  }\n\n\n  public render() {\n    const {\n      t,\n      formValues,\n      closeDrawer\n    } = this.props;\n\n    const {\n      isComplete,\n    } = this.state;\n\n    const dropzone = formValues && formValues.get('dropzone');\n    const isUploading: boolean = dropzone ? dropzone.isUploading : false;\n    return (\n      <>\n        <DrawerEditHeader\n          title='Upload New Cover'\n          hideExpandButton={true}\n          disableCloseButton={isUploading}\n          handleClose={closeDrawer}\n        />\n        {\n          isComplete\n          ? <this.DownloadComplete />\n          : <this.FormElement />\n        }\n      </>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  formValues: getFormValues(UPLOAD_COVER_DRAWER_FORM),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({\n  dispatch,\n  resetFieldDropzoneState: () => {\n    dispatch(new FieldDropzoneStateResetAction());\n  },\n  closeDrawer: () => {\n    dispatch(new ToggleOverlayComponentAction({ open: false, id: UPLOAD_COVER_DRAWER }));\n  },\n  createCoverImage: (printType: SPEC_PRINT_TYPE, title: string, fileId: string) => {\n    dispatch(new CreateCoverImageAction({\n      printType,\n      title,\n      fileId,\n    }));\n  }\n});\n\nexport default compose<React.ComponentClass<IUploadCoverDrawerComponentProps>>(\n  withAtsApi(),\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: UPLOAD_COVER_DRAWER_FORM }),\n  reduxForm({\n    form: UPLOAD_COVER_DRAWER_FORM,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n    initialValues: {\n      dropzone: null\n    }\n  })\n)(UploadCoverDrawer);","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('prop-types'), require('react-dom')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', 'react', 'prop-types', 'react-dom'], factory) :\n\t(global = global || self, factory(global.SortableHOC = {}, global.React, global.PropTypes, global.ReactDOM));\n}(this, function (exports, React, PropTypes, reactDom) { 'use strict';\n\n\tPropTypes = PropTypes && PropTypes.hasOwnProperty('default') ? PropTypes['default'] : PropTypes;\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\tvar _extends_1 = createCommonjsModule(function (module) {\n\tfunction _extends() {\n\t  module.exports = _extends = Object.assign || function (target) {\n\t    for (var i = 1; i < arguments.length; i++) {\n\t      var source = arguments[i];\n\n\t      for (var key in source) {\n\t        if (Object.prototype.hasOwnProperty.call(source, key)) {\n\t          target[key] = source[key];\n\t        }\n\t      }\n\t    }\n\n\t    return target;\n\t  };\n\n\t  return _extends.apply(this, arguments);\n\t}\n\n\tmodule.exports = _extends;\n\t});\n\n\tfunction _arrayWithHoles(arr) {\n\t  if (Array.isArray(arr)) return arr;\n\t}\n\n\tvar arrayWithHoles = _arrayWithHoles;\n\n\tfunction _iterableToArrayLimit(arr, i) {\n\t  var _arr = [];\n\t  var _n = true;\n\t  var _d = false;\n\t  var _e = undefined;\n\n\t  try {\n\t    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t      _arr.push(_s.value);\n\n\t      if (i && _arr.length === i) break;\n\t    }\n\t  } catch (err) {\n\t    _d = true;\n\t    _e = err;\n\t  } finally {\n\t    try {\n\t      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n\t    } finally {\n\t      if (_d) throw _e;\n\t    }\n\t  }\n\n\t  return _arr;\n\t}\n\n\tvar iterableToArrayLimit = _iterableToArrayLimit;\n\n\tfunction _nonIterableRest() {\n\t  throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t}\n\n\tvar nonIterableRest = _nonIterableRest;\n\n\tfunction _slicedToArray(arr, i) {\n\t  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n\t}\n\n\tvar slicedToArray = _slicedToArray;\n\n\tfunction _defineProperty(obj, key, value) {\n\t  if (key in obj) {\n\t    Object.defineProperty(obj, key, {\n\t      value: value,\n\t      enumerable: true,\n\t      configurable: true,\n\t      writable: true\n\t    });\n\t  } else {\n\t    obj[key] = value;\n\t  }\n\n\t  return obj;\n\t}\n\n\tvar defineProperty = _defineProperty;\n\n\tfunction _objectSpread(target) {\n\t  for (var i = 1; i < arguments.length; i++) {\n\t    var source = arguments[i] != null ? arguments[i] : {};\n\t    var ownKeys = Object.keys(source);\n\n\t    if (typeof Object.getOwnPropertySymbols === 'function') {\n\t      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n\t        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n\t      }));\n\t    }\n\n\t    ownKeys.forEach(function (key) {\n\t      defineProperty(target, key, source[key]);\n\t    });\n\t  }\n\n\t  return target;\n\t}\n\n\tvar objectSpread = _objectSpread;\n\n\tfunction _classCallCheck(instance, Constructor) {\n\t  if (!(instance instanceof Constructor)) {\n\t    throw new TypeError(\"Cannot call a class as a function\");\n\t  }\n\t}\n\n\tvar classCallCheck = _classCallCheck;\n\n\tfunction _defineProperties(target, props) {\n\t  for (var i = 0; i < props.length; i++) {\n\t    var descriptor = props[i];\n\t    descriptor.enumerable = descriptor.enumerable || false;\n\t    descriptor.configurable = true;\n\t    if (\"value\" in descriptor) descriptor.writable = true;\n\t    Object.defineProperty(target, descriptor.key, descriptor);\n\t  }\n\t}\n\n\tfunction _createClass(Constructor, protoProps, staticProps) {\n\t  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n\t  if (staticProps) _defineProperties(Constructor, staticProps);\n\t  return Constructor;\n\t}\n\n\tvar createClass = _createClass;\n\n\tvar _typeof_1 = createCommonjsModule(function (module) {\n\tfunction _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n\tfunction _typeof(obj) {\n\t  if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n\t    module.exports = _typeof = function _typeof(obj) {\n\t      return _typeof2(obj);\n\t    };\n\t  } else {\n\t    module.exports = _typeof = function _typeof(obj) {\n\t      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n\t    };\n\t  }\n\n\t  return _typeof(obj);\n\t}\n\n\tmodule.exports = _typeof;\n\t});\n\n\tfunction _assertThisInitialized(self) {\n\t  if (self === void 0) {\n\t    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t  }\n\n\t  return self;\n\t}\n\n\tvar assertThisInitialized = _assertThisInitialized;\n\n\tfunction _possibleConstructorReturn(self, call) {\n\t  if (call && (_typeof_1(call) === \"object\" || typeof call === \"function\")) {\n\t    return call;\n\t  }\n\n\t  return assertThisInitialized(self);\n\t}\n\n\tvar possibleConstructorReturn = _possibleConstructorReturn;\n\n\tvar getPrototypeOf = createCommonjsModule(function (module) {\n\tfunction _getPrototypeOf(o) {\n\t  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n\t    return o.__proto__ || Object.getPrototypeOf(o);\n\t  };\n\t  return _getPrototypeOf(o);\n\t}\n\n\tmodule.exports = _getPrototypeOf;\n\t});\n\n\tvar setPrototypeOf = createCommonjsModule(function (module) {\n\tfunction _setPrototypeOf(o, p) {\n\t  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n\t    o.__proto__ = p;\n\t    return o;\n\t  };\n\n\t  return _setPrototypeOf(o, p);\n\t}\n\n\tmodule.exports = _setPrototypeOf;\n\t});\n\n\tfunction _inherits(subClass, superClass) {\n\t  if (typeof superClass !== \"function\" && superClass !== null) {\n\t    throw new TypeError(\"Super expression must either be null or a function\");\n\t  }\n\n\t  subClass.prototype = Object.create(superClass && superClass.prototype, {\n\t    constructor: {\n\t      value: subClass,\n\t      writable: true,\n\t      configurable: true\n\t    }\n\t  });\n\t  if (superClass) setPrototypeOf(subClass, superClass);\n\t}\n\n\tvar inherits = _inherits;\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\tvar invariant = function(condition, format, a, b, c, d, e, f) {\n\t  {\n\t    if (format === undefined) {\n\t      throw new Error('invariant requires an error message argument');\n\t    }\n\t  }\n\n\t  if (!condition) {\n\t    var error;\n\t    if (format === undefined) {\n\t      error = new Error(\n\t        'Minified exception occurred; use the non-minified dev environment ' +\n\t        'for the full error message and additional helpful warnings.'\n\t      );\n\t    } else {\n\t      var args = [a, b, c, d, e, f];\n\t      var argIndex = 0;\n\t      error = new Error(\n\t        format.replace(/%s/g, function() { return args[argIndex++]; })\n\t      );\n\t      error.name = 'Invariant Violation';\n\t    }\n\n\t    error.framesToPop = 1; // we don't care about invariant's own frame\n\t    throw error;\n\t  }\n\t};\n\n\tvar invariant_1 = invariant;\n\n\tvar Manager = function () {\n\t  function Manager() {\n\t    classCallCheck(this, Manager);\n\n\t    defineProperty(this, \"refs\", {});\n\t  }\n\n\t  createClass(Manager, [{\n\t    key: \"add\",\n\t    value: function add(collection, ref) {\n\t      if (!this.refs[collection]) {\n\t        this.refs[collection] = [];\n\t      }\n\n\t      this.refs[collection].push(ref);\n\t    }\n\t  }, {\n\t    key: \"remove\",\n\t    value: function remove(collection, ref) {\n\t      var index = this.getIndex(collection, ref);\n\n\t      if (index !== -1) {\n\t        this.refs[collection].splice(index, 1);\n\t      }\n\t    }\n\t  }, {\n\t    key: \"isActive\",\n\t    value: function isActive() {\n\t      return this.active;\n\t    }\n\t  }, {\n\t    key: \"getActive\",\n\t    value: function getActive() {\n\t      var _this = this;\n\n\t      return this.refs[this.active.collection].find(function (_ref) {\n\t        var node = _ref.node;\n\t        return node.sortableInfo.index == _this.active.index;\n\t      });\n\t    }\n\t  }, {\n\t    key: \"getIndex\",\n\t    value: function getIndex(collection, ref) {\n\t      return this.refs[collection].indexOf(ref);\n\t    }\n\t  }, {\n\t    key: \"getOrderedRefs\",\n\t    value: function getOrderedRefs() {\n\t      var collection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.active.collection;\n\t      return this.refs[collection].sort(sortByIndex);\n\t    }\n\t  }]);\n\n\t  return Manager;\n\t}();\n\n\tfunction sortByIndex(_ref2, _ref3) {\n\t  var index1 = _ref2.node.sortableInfo.index;\n\t  var index2 = _ref3.node.sortableInfo.index;\n\t  return index1 - index2;\n\t}\n\n\tfunction _arrayWithoutHoles(arr) {\n\t  if (Array.isArray(arr)) {\n\t    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n\t      arr2[i] = arr[i];\n\t    }\n\n\t    return arr2;\n\t  }\n\t}\n\n\tvar arrayWithoutHoles = _arrayWithoutHoles;\n\n\tfunction _iterableToArray(iter) {\n\t  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n\t}\n\n\tvar iterableToArray = _iterableToArray;\n\n\tfunction _nonIterableSpread() {\n\t  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n\t}\n\n\tvar nonIterableSpread = _nonIterableSpread;\n\n\tfunction _toConsumableArray(arr) {\n\t  return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n\t}\n\n\tvar toConsumableArray = _toConsumableArray;\n\n\tfunction arrayMove(array, from, to) {\n\t  {\n\t    if (typeof console !== 'undefined') {\n\t      console.warn(\"Deprecation warning: arrayMove will no longer be exported by 'react-sortable-hoc' in the next major release. Please install the `array-move` package locally instead. https://www.npmjs.com/package/array-move\");\n\t    }\n\t  }\n\n\t  array = array.slice();\n\t  array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n\t  return array;\n\t}\n\tfunction omit(obj) {\n\t  for (var _len = arguments.length, keysToOmit = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t    keysToOmit[_key - 1] = arguments[_key];\n\t  }\n\n\t  return Object.keys(obj).reduce(function (acc, key) {\n\t    if (keysToOmit.indexOf(key) === -1) {\n\t      acc[key] = obj[key];\n\t    }\n\n\t    return acc;\n\t  }, {});\n\t}\n\tvar events = {\n\t  end: ['touchend', 'touchcancel', 'mouseup'],\n\t  move: ['touchmove', 'mousemove'],\n\t  start: ['touchstart', 'mousedown']\n\t};\n\tvar vendorPrefix = function () {\n\t  if (typeof window === 'undefined' || typeof document === 'undefined') {\n\t    return '';\n\t  }\n\n\t  var styles = window.getComputedStyle(document.documentElement, '') || ['-moz-hidden-iframe'];\n\t  var pre = (Array.prototype.slice.call(styles).join('').match(/-(moz|webkit|ms)-/) || styles.OLink === '' && ['', 'o'])[1];\n\n\t  switch (pre) {\n\t    case 'ms':\n\t      return 'ms';\n\n\t    default:\n\t      return pre && pre.length ? pre[0].toUpperCase() + pre.substr(1) : '';\n\t  }\n\t}();\n\tfunction setInlineStyles(node, styles) {\n\t  Object.keys(styles).forEach(function (key) {\n\t    node.style[key] = styles[key];\n\t  });\n\t}\n\tfunction setTranslate3d(node, translate) {\n\t  node.style[\"\".concat(vendorPrefix, \"Transform\")] = translate == null ? '' : \"translate3d(\".concat(translate.x, \"px,\").concat(translate.y, \"px,0)\");\n\t}\n\tfunction setTransitionDuration(node, duration) {\n\t  node.style[\"\".concat(vendorPrefix, \"TransitionDuration\")] = duration == null ? '' : \"\".concat(duration, \"ms\");\n\t}\n\tfunction closest(el, fn) {\n\t  while (el) {\n\t    if (fn(el)) {\n\t      return el;\n\t    }\n\n\t    el = el.parentNode;\n\t  }\n\n\t  return null;\n\t}\n\tfunction limit(min, max, value) {\n\t  return Math.max(min, Math.min(value, max));\n\t}\n\n\tfunction getPixelValue(stringValue) {\n\t  if (stringValue.substr(-2) === 'px') {\n\t    return parseFloat(stringValue);\n\t  }\n\n\t  return 0;\n\t}\n\n\tfunction getElementMargin(element) {\n\t  var style = window.getComputedStyle(element);\n\t  return {\n\t    bottom: getPixelValue(style.marginBottom),\n\t    left: getPixelValue(style.marginLeft),\n\t    right: getPixelValue(style.marginRight),\n\t    top: getPixelValue(style.marginTop)\n\t  };\n\t}\n\tfunction provideDisplayName(prefix, Component) {\n\t  var componentName = Component.displayName || Component.name;\n\t  return componentName ? \"\".concat(prefix, \"(\").concat(componentName, \")\") : prefix;\n\t}\n\tfunction getScrollAdjustedBoundingClientRect(node, scrollDelta) {\n\t  var boundingClientRect = node.getBoundingClientRect();\n\t  return {\n\t    top: boundingClientRect.top + scrollDelta.top,\n\t    left: boundingClientRect.left + scrollDelta.left\n\t  };\n\t}\n\tfunction getPosition(event) {\n\t  if (event.touches && event.touches.length) {\n\t    return {\n\t      x: event.touches[0].pageX,\n\t      y: event.touches[0].pageY\n\t    };\n\t  } else if (event.changedTouches && event.changedTouches.length) {\n\t    return {\n\t      x: event.changedTouches[0].pageX,\n\t      y: event.changedTouches[0].pageY\n\t    };\n\t  } else {\n\t    return {\n\t      x: event.pageX,\n\t      y: event.pageY\n\t    };\n\t  }\n\t}\n\tfunction isTouchEvent(event) {\n\t  return event.touches && event.touches.length || event.changedTouches && event.changedTouches.length;\n\t}\n\tfunction getEdgeOffset(node, parent) {\n\t  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n\t    left: 0,\n\t    top: 0\n\t  };\n\n\t  if (!node) {\n\t    return undefined;\n\t  }\n\n\t  var nodeOffset = {\n\t    left: offset.left + node.offsetLeft,\n\t    top: offset.top + node.offsetTop\n\t  };\n\n\t  if (node.parentNode === parent) {\n\t    return nodeOffset;\n\t  }\n\n\t  return getEdgeOffset(node.parentNode, parent, nodeOffset);\n\t}\n\tfunction getTargetIndex(newIndex, prevIndex, oldIndex) {\n\t  if (newIndex < oldIndex && newIndex > prevIndex) {\n\t    return newIndex - 1;\n\t  } else if (newIndex > oldIndex && newIndex < prevIndex) {\n\t    return newIndex + 1;\n\t  } else {\n\t    return newIndex;\n\t  }\n\t}\n\tfunction getLockPixelOffset(_ref) {\n\t  var lockOffset = _ref.lockOffset,\n\t      width = _ref.width,\n\t      height = _ref.height;\n\t  var offsetX = lockOffset;\n\t  var offsetY = lockOffset;\n\t  var unit = 'px';\n\n\t  if (typeof lockOffset === 'string') {\n\t    var match = /^[+-]?\\d*(?:\\.\\d*)?(px|%)$/.exec(lockOffset);\n\t    invariant_1(match !== null, 'lockOffset value should be a number or a string of a ' + 'number followed by \"px\" or \"%\". Given %s', lockOffset);\n\t    offsetX = parseFloat(lockOffset);\n\t    offsetY = parseFloat(lockOffset);\n\t    unit = match[1];\n\t  }\n\n\t  invariant_1(isFinite(offsetX) && isFinite(offsetY), 'lockOffset value should be a finite. Given %s', lockOffset);\n\n\t  if (unit === '%') {\n\t    offsetX = offsetX * width / 100;\n\t    offsetY = offsetY * height / 100;\n\t  }\n\n\t  return {\n\t    x: offsetX,\n\t    y: offsetY\n\t  };\n\t}\n\tfunction getLockPixelOffsets(_ref2) {\n\t  var height = _ref2.height,\n\t      width = _ref2.width,\n\t      lockOffset = _ref2.lockOffset;\n\t  var offsets = Array.isArray(lockOffset) ? lockOffset : [lockOffset, lockOffset];\n\t  invariant_1(offsets.length === 2, 'lockOffset prop of SortableContainer should be a single ' + 'value or an array of exactly two values. Given %s', lockOffset);\n\n\t  var _offsets = slicedToArray(offsets, 2),\n\t      minLockOffset = _offsets[0],\n\t      maxLockOffset = _offsets[1];\n\n\t  return [getLockPixelOffset({\n\t    height: height,\n\t    lockOffset: minLockOffset,\n\t    width: width\n\t  }), getLockPixelOffset({\n\t    height: height,\n\t    lockOffset: maxLockOffset,\n\t    width: width\n\t  })];\n\t}\n\n\tfunction isScrollable(el) {\n\t  var computedStyle = window.getComputedStyle(el);\n\t  var overflowRegex = /(auto|scroll)/;\n\t  var properties = ['overflow', 'overflowX', 'overflowY'];\n\t  return properties.find(function (property) {\n\t    return overflowRegex.test(computedStyle[property]);\n\t  });\n\t}\n\n\tfunction getScrollingParent(el) {\n\t  if (!(el instanceof HTMLElement)) {\n\t    return null;\n\t  } else if (isScrollable(el)) {\n\t    return el;\n\t  } else {\n\t    return getScrollingParent(el.parentNode);\n\t  }\n\t}\n\tvar KEYCODE = {\n\t  TAB: 9,\n\t  ESC: 27,\n\t  SPACE: 32,\n\t  LEFT: 37,\n\t  UP: 38,\n\t  RIGHT: 39,\n\t  DOWN: 40\n\t};\n\tvar NodeType = {\n\t  Anchor: 'A',\n\t  Button: 'BUTTON',\n\t  Canvas: 'CANVAS',\n\t  Input: 'INPUT',\n\t  Option: 'OPTION',\n\t  Textarea: 'TEXTAREA',\n\t  Select: 'SELECT'\n\t};\n\tfunction cloneNode(node) {\n\t  var selector = 'input, textarea, select, canvas, [contenteditable]';\n\t  var fields = node.querySelectorAll(selector);\n\t  var clonedNode = node.cloneNode(true);\n\n\t  var clonedFields = toConsumableArray(clonedNode.querySelectorAll(selector));\n\n\t  clonedFields.forEach(function (field, i) {\n\t    if (field.type !== 'file') {\n\t      field.value = fields[i].value;\n\t    }\n\n\t    if (field.type === 'radio' && field.name) {\n\t      field.name = \"__sortableClone__\".concat(field.name);\n\t    }\n\n\t    if (field.tagName === NodeType.Canvas && fields[i].width > 0 && fields[i].height > 0) {\n\t      var destCtx = field.getContext('2d');\n\t      destCtx.drawImage(fields[i], 0, 0);\n\t    }\n\t  });\n\t  return clonedNode;\n\t}\n\n\tfunction sortableHandle(WrappedComponent) {\n\t  var _class, _temp;\n\n\t  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n\t    withRef: false\n\t  };\n\t  return _temp = _class = function (_React$Component) {\n\t    inherits(WithSortableHandle, _React$Component);\n\n\t    function WithSortableHandle() {\n\t      classCallCheck(this, WithSortableHandle);\n\n\t      return possibleConstructorReturn(this, getPrototypeOf(WithSortableHandle).apply(this, arguments));\n\t    }\n\n\t    createClass(WithSortableHandle, [{\n\t      key: \"componentDidMount\",\n\t      value: function componentDidMount() {\n\t        var node = reactDom.findDOMNode(this);\n\t        node.sortableHandle = true;\n\t      }\n\t    }, {\n\t      key: \"getWrappedInstance\",\n\t      value: function getWrappedInstance() {\n\t        invariant_1(config.withRef, 'To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableHandle() call');\n\t        return this.refs.wrappedInstance;\n\t      }\n\t    }, {\n\t      key: \"render\",\n\t      value: function render() {\n\t        var ref = config.withRef ? 'wrappedInstance' : null;\n\t        return React.createElement(WrappedComponent, _extends_1({\n\t          ref: ref\n\t        }, this.props));\n\t      }\n\t    }]);\n\n\t    return WithSortableHandle;\n\t  }(React.Component), defineProperty(_class, \"displayName\", provideDisplayName('sortableHandle', WrappedComponent)), _temp;\n\t}\n\tfunction isSortableHandle(node) {\n\t  return node.sortableHandle != null;\n\t}\n\n\tvar AutoScroller = function () {\n\t  function AutoScroller(container, onScrollCallback) {\n\t    classCallCheck(this, AutoScroller);\n\n\t    this.container = container;\n\t    this.onScrollCallback = onScrollCallback;\n\t  }\n\n\t  createClass(AutoScroller, [{\n\t    key: \"clear\",\n\t    value: function clear() {\n\t      clearInterval(this.interval);\n\t      this.interval = null;\n\t    }\n\t  }, {\n\t    key: \"update\",\n\t    value: function update(_ref) {\n\t      var _this = this;\n\n\t      var translate = _ref.translate,\n\t          minTranslate = _ref.minTranslate,\n\t          maxTranslate = _ref.maxTranslate,\n\t          width = _ref.width,\n\t          height = _ref.height;\n\t      var direction = {\n\t        x: 0,\n\t        y: 0\n\t      };\n\t      var speed = {\n\t        x: 1,\n\t        y: 1\n\t      };\n\t      var acceleration = {\n\t        x: 10,\n\t        y: 10\n\t      };\n\t      var _this$container = this.container,\n\t          scrollTop = _this$container.scrollTop,\n\t          scrollLeft = _this$container.scrollLeft,\n\t          scrollHeight = _this$container.scrollHeight,\n\t          scrollWidth = _this$container.scrollWidth,\n\t          clientHeight = _this$container.clientHeight,\n\t          clientWidth = _this$container.clientWidth;\n\t      var isTop = scrollTop === 0;\n\t      var isBottom = scrollHeight - scrollTop - clientHeight === 0;\n\t      var isLeft = scrollLeft === 0;\n\t      var isRight = scrollWidth - scrollLeft - clientWidth === 0;\n\n\t      if (translate.y >= maxTranslate.y - height / 2 && !isBottom) {\n\t        direction.y = 1;\n\t        speed.y = acceleration.y * Math.abs((maxTranslate.y - height / 2 - translate.y) / height);\n\t      } else if (translate.x >= maxTranslate.x - width / 2 && !isRight) {\n\t        direction.x = 1;\n\t        speed.x = acceleration.x * Math.abs((maxTranslate.x - width / 2 - translate.x) / width);\n\t      } else if (translate.y <= minTranslate.y + height / 2 && !isTop) {\n\t        direction.y = -1;\n\t        speed.y = acceleration.y * Math.abs((translate.y - height / 2 - minTranslate.y) / height);\n\t      } else if (translate.x <= minTranslate.x + width / 2 && !isLeft) {\n\t        direction.x = -1;\n\t        speed.x = acceleration.x * Math.abs((translate.x - width / 2 - minTranslate.x) / width);\n\t      }\n\n\t      if (this.interval) {\n\t        this.clear();\n\t        this.isAutoScrolling = false;\n\t      }\n\n\t      if (direction.x !== 0 || direction.y !== 0) {\n\t        this.interval = setInterval(function () {\n\t          _this.isAutoScrolling = true;\n\t          var offset = {\n\t            left: speed.x * direction.x,\n\t            top: speed.y * direction.y\n\t          };\n\t          _this.container.scrollTop += offset.top;\n\t          _this.container.scrollLeft += offset.left;\n\n\t          _this.onScrollCallback(offset);\n\t        }, 5);\n\t      }\n\t    }\n\t  }]);\n\n\t  return AutoScroller;\n\t}();\n\n\tfunction defaultGetHelperDimensions(_ref) {\n\t  var node = _ref.node;\n\t  return {\n\t    height: node.offsetHeight,\n\t    width: node.offsetWidth\n\t  };\n\t}\n\n\tfunction defaultShouldCancelStart(event) {\n\t  var interactiveElements = [NodeType.Input, NodeType.Textarea, NodeType.Select, NodeType.Option, NodeType.Button];\n\n\t  if (interactiveElements.indexOf(event.target.tagName) !== -1) {\n\t    return true;\n\t  }\n\n\t  if (closest(event.target, function (el) {\n\t    return el.contentEditable === 'true';\n\t  })) {\n\t    return true;\n\t  }\n\n\t  return false;\n\t}\n\n\tvar propTypes = {\n\t  axis: PropTypes.oneOf(['x', 'y', 'xy']),\n\t  contentWindow: PropTypes.any,\n\t  disableAutoscroll: PropTypes.bool,\n\t  distance: PropTypes.number,\n\t  getContainer: PropTypes.func,\n\t  getHelperDimensions: PropTypes.func,\n\t  helperClass: PropTypes.string,\n\t  helperContainer: PropTypes.oneOfType([PropTypes.func, typeof HTMLElement === 'undefined' ? PropTypes.any : PropTypes.instanceOf(HTMLElement)]),\n\t  hideSortableGhost: PropTypes.bool,\n\t  keyboardSortingTransitionDuration: PropTypes.number,\n\t  lockAxis: PropTypes.string,\n\t  lockOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]))]),\n\t  lockToContainerEdges: PropTypes.bool,\n\t  onSortEnd: PropTypes.func,\n\t  onSortMove: PropTypes.func,\n\t  onSortOver: PropTypes.func,\n\t  onSortStart: PropTypes.func,\n\t  pressDelay: PropTypes.number,\n\t  pressThreshold: PropTypes.number,\n\t  shouldCancelStart: PropTypes.func,\n\t  transitionDuration: PropTypes.number,\n\t  updateBeforeSortStart: PropTypes.func,\n\t  useDragHandle: PropTypes.bool,\n\t  useWindowAsScrollContainer: PropTypes.bool\n\t};\n\tvar defaultProps = {\n\t  axis: 'y',\n\t  disableAutoscroll: false,\n\t  distance: 0,\n\t  getHelperDimensions: defaultGetHelperDimensions,\n\t  hideSortableGhost: true,\n\t  lockOffset: '50%',\n\t  lockToContainerEdges: false,\n\t  pressDelay: 0,\n\t  pressThreshold: 5,\n\t  shouldCancelStart: defaultShouldCancelStart,\n\t  transitionDuration: 300,\n\t  useWindowAsScrollContainer: false\n\t};\n\tvar omittedProps = Object.keys(propTypes);\n\tfunction validateProps(props) {\n\t  invariant_1(!(props.distance && props.pressDelay), 'Attempted to set both `pressDelay` and `distance` on SortableContainer, you may only use one or the other, not both at the same time.');\n\t}\n\n\tfunction _finallyRethrows(body, finalizer) {\n\t  try {\n\t    var result = body();\n\t  } catch (e) {\n\t    return finalizer(true, e);\n\t  }\n\n\t  if (result && result.then) {\n\t    return result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t  }\n\n\t  return finalizer(false, value);\n\t}\n\tfunction sortableContainer(WrappedComponent) {\n\t  var _class, _temp;\n\n\t  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n\t    withRef: false\n\t  };\n\t  return _temp = _class = function (_React$Component) {\n\t    inherits(WithSortableContainer, _React$Component);\n\n\t    function WithSortableContainer(props) {\n\t      var _this;\n\n\t      classCallCheck(this, WithSortableContainer);\n\n\t      _this = possibleConstructorReturn(this, getPrototypeOf(WithSortableContainer).call(this, props));\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleStart\", function (event) {\n\t        var _this$props = _this.props,\n\t            distance = _this$props.distance,\n\t            shouldCancelStart = _this$props.shouldCancelStart;\n\n\t        if (event.button === 2 || shouldCancelStart(event)) {\n\t          return;\n\t        }\n\n\t        _this.touched = true;\n\t        _this.position = getPosition(event);\n\t        var node = closest(event.target, function (el) {\n\t          return el.sortableInfo != null;\n\t        });\n\n\t        if (node && node.sortableInfo && _this.nodeIsChild(node) && !_this.state.sorting) {\n\t          var useDragHandle = _this.props.useDragHandle;\n\t          var _node$sortableInfo = node.sortableInfo,\n\t              index = _node$sortableInfo.index,\n\t              collection = _node$sortableInfo.collection,\n\t              disabled = _node$sortableInfo.disabled;\n\n\t          if (disabled) {\n\t            return;\n\t          }\n\n\t          if (useDragHandle && !closest(event.target, isSortableHandle)) {\n\t            return;\n\t          }\n\n\t          _this.manager.active = {\n\t            collection: collection,\n\t            index: index\n\t          };\n\n\t          if (!isTouchEvent(event) && event.target.tagName === NodeType.Anchor) {\n\t            event.preventDefault();\n\t          }\n\n\t          if (!distance) {\n\t            if (_this.props.pressDelay === 0) {\n\t              _this.handlePress(event);\n\t            } else {\n\t              _this.pressTimer = setTimeout(function () {\n\t                return _this.handlePress(event);\n\t              }, _this.props.pressDelay);\n\t            }\n\t          }\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"nodeIsChild\", function (node) {\n\t        return node.sortableInfo.manager === _this.manager;\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleMove\", function (event) {\n\t        var _this$props2 = _this.props,\n\t            distance = _this$props2.distance,\n\t            pressThreshold = _this$props2.pressThreshold;\n\n\t        if (!_this.state.sorting && _this.touched && !_this._awaitingUpdateBeforeSortStart) {\n\t          var position = getPosition(event);\n\t          var delta = {\n\t            x: _this.position.x - position.x,\n\t            y: _this.position.y - position.y\n\t          };\n\t          var combinedDelta = Math.abs(delta.x) + Math.abs(delta.y);\n\t          _this.delta = delta;\n\n\t          if (!distance && (!pressThreshold || combinedDelta >= pressThreshold)) {\n\t            clearTimeout(_this.cancelTimer);\n\t            _this.cancelTimer = setTimeout(_this.cancel, 0);\n\t          } else if (distance && combinedDelta >= distance && _this.manager.isActive()) {\n\t            _this.handlePress(event);\n\t          }\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleEnd\", function () {\n\t        _this.touched = false;\n\n\t        _this.cancel();\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"cancel\", function () {\n\t        var distance = _this.props.distance;\n\t        var sorting = _this.state.sorting;\n\n\t        if (!sorting) {\n\t          if (!distance) {\n\t            clearTimeout(_this.pressTimer);\n\t          }\n\n\t          _this.manager.active = null;\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handlePress\", function (event) {\n\t        try {\n\t          var active = _this.manager.getActive();\n\n\t          var _temp6 = function () {\n\t            if (active) {\n\t              var _temp7 = function _temp7() {\n\t                var index = _node.sortableInfo.index;\n\t                var margin = getElementMargin(_node);\n\n\t                var containerBoundingRect = _this.scrollContainer.getBoundingClientRect();\n\n\t                var dimensions = _getHelperDimensions({\n\t                  collection: _collection,\n\t                  index: index,\n\t                  node: _node\n\t                });\n\n\t                _this.node = _node;\n\t                _this.margin = margin;\n\t                _this.width = dimensions.width;\n\t                _this.height = dimensions.height;\n\t                _this.marginOffset = {\n\t                  x: _this.margin.left + _this.margin.right,\n\t                  y: Math.max(_this.margin.top, _this.margin.bottom)\n\t                };\n\t                _this.boundingClientRect = _node.getBoundingClientRect();\n\t                _this.containerBoundingRect = containerBoundingRect;\n\t                _this.index = index;\n\t                _this.newIndex = index;\n\t                _this.axis = {\n\t                  x: _axis.indexOf('x') >= 0,\n\t                  y: _axis.indexOf('y') >= 0\n\t                };\n\t                _this.offsetEdge = getEdgeOffset(_node, _this.container);\n\n\t                if (_isKeySorting) {\n\t                  _this.initialOffset = getPosition(objectSpread({}, event, {\n\t                    pageX: _this.boundingClientRect.left,\n\t                    pageY: _this.boundingClientRect.top\n\t                  }));\n\t                } else {\n\t                  _this.initialOffset = getPosition(event);\n\t                }\n\n\t                _this.initialScroll = {\n\t                  left: _this.scrollContainer.scrollLeft,\n\t                  top: _this.scrollContainer.scrollTop\n\t                };\n\t                _this.initialWindowScroll = {\n\t                  left: window.pageXOffset,\n\t                  top: window.pageYOffset\n\t                };\n\t                _this.helper = _this.helperContainer.appendChild(cloneNode(_node));\n\t                setInlineStyles(_this.helper, {\n\t                  boxSizing: 'border-box',\n\t                  height: \"\".concat(_this.height, \"px\"),\n\t                  left: \"\".concat(_this.boundingClientRect.left - margin.left, \"px\"),\n\t                  pointerEvents: 'none',\n\t                  position: 'fixed',\n\t                  top: \"\".concat(_this.boundingClientRect.top - margin.top, \"px\"),\n\t                  width: \"\".concat(_this.width, \"px\")\n\t                });\n\n\t                if (_isKeySorting) {\n\t                  _this.helper.focus();\n\t                }\n\n\t                if (_hideSortableGhost) {\n\t                  _this.sortableGhost = _node;\n\t                  setInlineStyles(_node, {\n\t                    opacity: 0,\n\t                    visibility: 'hidden'\n\t                  });\n\t                }\n\n\t                _this.minTranslate = {};\n\t                _this.maxTranslate = {};\n\n\t                if (_isKeySorting) {\n\t                  var _ref = _useWindowAsScrollContainer ? {\n\t                    top: 0,\n\t                    left: 0,\n\t                    width: _this.contentWindow.innerWidth,\n\t                    height: _this.contentWindow.innerHeight\n\t                  } : _this.containerBoundingRect,\n\t                      containerTop = _ref.top,\n\t                      containerLeft = _ref.left,\n\t                      containerWidth = _ref.width,\n\t                      containerHeight = _ref.height;\n\n\t                  var containerBottom = containerTop + containerHeight;\n\t                  var containerRight = containerLeft + containerWidth;\n\n\t                  if (_this.axis.x) {\n\t                    _this.minTranslate.x = containerLeft - _this.boundingClientRect.left;\n\t                    _this.maxTranslate.x = containerRight - (_this.boundingClientRect.left + _this.width);\n\t                  }\n\n\t                  if (_this.axis.y) {\n\t                    _this.minTranslate.y = containerTop - _this.boundingClientRect.top;\n\t                    _this.maxTranslate.y = containerBottom - (_this.boundingClientRect.top + _this.height);\n\t                  }\n\t                } else {\n\t                  if (_this.axis.x) {\n\t                    _this.minTranslate.x = (_useWindowAsScrollContainer ? 0 : containerBoundingRect.left) - _this.boundingClientRect.left - _this.width / 2;\n\t                    _this.maxTranslate.x = (_useWindowAsScrollContainer ? _this.contentWindow.innerWidth : containerBoundingRect.left + containerBoundingRect.width) - _this.boundingClientRect.left - _this.width / 2;\n\t                  }\n\n\t                  if (_this.axis.y) {\n\t                    _this.minTranslate.y = (_useWindowAsScrollContainer ? 0 : containerBoundingRect.top) - _this.boundingClientRect.top - _this.height / 2;\n\t                    _this.maxTranslate.y = (_useWindowAsScrollContainer ? _this.contentWindow.innerHeight : containerBoundingRect.top + containerBoundingRect.height) - _this.boundingClientRect.top - _this.height / 2;\n\t                  }\n\t                }\n\n\t                if (_helperClass) {\n\t                  _helperClass.split(' ').forEach(function (className) {\n\t                    return _this.helper.classList.add(className);\n\t                  });\n\t                }\n\n\t                _this.listenerNode = event.touches ? _node : _this.contentWindow;\n\n\t                if (_isKeySorting) {\n\t                  _this.listenerNode.addEventListener('wheel', _this.handleKeyEnd, true);\n\n\t                  _this.listenerNode.addEventListener('mousedown', _this.handleKeyEnd, true);\n\n\t                  _this.listenerNode.addEventListener('keydown', _this.handleKeyDown);\n\t                } else {\n\t                  events.move.forEach(function (eventName) {\n\t                    return _this.listenerNode.addEventListener(eventName, _this.handleSortMove, false);\n\t                  });\n\t                  events.end.forEach(function (eventName) {\n\t                    return _this.listenerNode.addEventListener(eventName, _this.handleSortEnd, false);\n\t                  });\n\t                }\n\n\t                _this.setState({\n\t                  sorting: true,\n\t                  sortingIndex: index\n\t                });\n\n\t                if (_onSortStart) {\n\t                  _onSortStart({\n\t                    node: _node,\n\t                    index: index,\n\t                    collection: _collection,\n\t                    isKeySorting: _isKeySorting\n\t                  }, event);\n\t                }\n\n\t                if (_isKeySorting) {\n\t                  _this.keyMove(0);\n\t                }\n\t              };\n\n\t              var _this$props3 = _this.props,\n\t                  _axis = _this$props3.axis,\n\t                  _getHelperDimensions = _this$props3.getHelperDimensions,\n\t                  _helperClass = _this$props3.helperClass,\n\t                  _hideSortableGhost = _this$props3.hideSortableGhost,\n\t                  updateBeforeSortStart = _this$props3.updateBeforeSortStart,\n\t                  _onSortStart = _this$props3.onSortStart,\n\t                  _useWindowAsScrollContainer = _this$props3.useWindowAsScrollContainer;\n\t              var _node = active.node,\n\t                  _collection = active.collection;\n\t              var _isKeySorting = _this.manager.isKeySorting;\n\n\t              var _temp8 = function () {\n\t                if (typeof updateBeforeSortStart === 'function') {\n\t                  _this._awaitingUpdateBeforeSortStart = true;\n\n\t                  var _temp9 = _finallyRethrows(function () {\n\t                    var index = _node.sortableInfo.index;\n\t                    return Promise.resolve(updateBeforeSortStart({\n\t                      collection: _collection,\n\t                      index: index,\n\t                      node: _node,\n\t                      isKeySorting: _isKeySorting\n\t                    }, event)).then(function () {});\n\t                  }, function (_wasThrown, _result) {\n\t                    _this._awaitingUpdateBeforeSortStart = false;\n\t                    if (_wasThrown) throw _result;\n\t                    return _result;\n\t                  });\n\n\t                  if (_temp9 && _temp9.then) return _temp9.then(function () {});\n\t                }\n\t              }();\n\n\t              return _temp8 && _temp8.then ? _temp8.then(_temp7) : _temp7(_temp8);\n\t            }\n\t          }();\n\n\t          return Promise.resolve(_temp6 && _temp6.then ? _temp6.then(function () {}) : void 0);\n\t        } catch (e) {\n\t          return Promise.reject(e);\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleSortMove\", function (event) {\n\t        var onSortMove = _this.props.onSortMove;\n\n\t        if (typeof event.preventDefault === 'function') {\n\t          event.preventDefault();\n\t        }\n\n\t        _this.updateHelperPosition(event);\n\n\t        _this.animateNodes();\n\n\t        _this.autoscroll();\n\n\t        if (onSortMove) {\n\t          onSortMove(event);\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleSortEnd\", function (event) {\n\t        var _this$props4 = _this.props,\n\t            hideSortableGhost = _this$props4.hideSortableGhost,\n\t            onSortEnd = _this$props4.onSortEnd;\n\t        var _this$manager = _this.manager,\n\t            collection = _this$manager.active.collection,\n\t            isKeySorting = _this$manager.isKeySorting;\n\t        var nodes = _this.manager.refs[collection];\n\n\t        if (_this.listenerNode) {\n\t          if (isKeySorting) {\n\t            _this.listenerNode.removeEventListener('wheel', _this.handleKeyEnd, true);\n\n\t            _this.listenerNode.removeEventListener('mousedown', _this.handleKeyEnd, true);\n\n\t            _this.listenerNode.removeEventListener('keydown', _this.handleKeyDown);\n\t          } else {\n\t            events.move.forEach(function (eventName) {\n\t              return _this.listenerNode.removeEventListener(eventName, _this.handleSortMove);\n\t            });\n\t            events.end.forEach(function (eventName) {\n\t              return _this.listenerNode.removeEventListener(eventName, _this.handleSortEnd);\n\t            });\n\t          }\n\t        }\n\n\t        _this.helper.parentNode.removeChild(_this.helper);\n\n\t        if (hideSortableGhost && _this.sortableGhost) {\n\t          setInlineStyles(_this.sortableGhost, {\n\t            opacity: '',\n\t            visibility: ''\n\t          });\n\t        }\n\n\t        for (var i = 0, len = nodes.length; i < len; i++) {\n\t          var _node2 = nodes[i];\n\t          var el = _node2.node;\n\t          _node2.edgeOffset = null;\n\t          _node2.boundingClientRect = null;\n\t          setTranslate3d(el, null);\n\t          setTransitionDuration(el, null);\n\t          _node2.translate = null;\n\t        }\n\n\t        _this.autoScroller.clear();\n\n\t        _this.manager.active = null;\n\t        _this.manager.isKeySorting = false;\n\n\t        _this.setState({\n\t          sorting: false,\n\t          sortingIndex: null\n\t        });\n\n\t        if (typeof onSortEnd === 'function') {\n\t          onSortEnd({\n\t            collection: collection,\n\t            newIndex: _this.newIndex,\n\t            oldIndex: _this.index,\n\t            isKeySorting: isKeySorting\n\t          }, event);\n\t        }\n\n\t        _this.touched = false;\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"autoscroll\", function () {\n\t        var disableAutoscroll = _this.props.disableAutoscroll;\n\t        var isKeySorting = _this.manager.isKeySorting;\n\n\t        if (disableAutoscroll) {\n\t          return;\n\t        }\n\n\t        if (isKeySorting) {\n\t          var translate = objectSpread({}, _this.translate);\n\n\t          var scrollX = 0;\n\t          var scrollY = 0;\n\n\t          if (_this.axis.x) {\n\t            translate.x = Math.min(_this.maxTranslate.x, Math.max(_this.minTranslate.x, _this.translate.x));\n\t            scrollX = _this.translate.x - translate.x;\n\t          }\n\n\t          if (_this.axis.y) {\n\t            translate.y = Math.min(_this.maxTranslate.y, Math.max(_this.minTranslate.y, _this.translate.y));\n\t            scrollY = _this.translate.y - translate.y;\n\t          }\n\n\t          _this.translate = translate;\n\t          setTranslate3d(_this.helper, _this.translate);\n\t          _this.scrollContainer.scrollLeft += scrollX;\n\t          _this.scrollContainer.scrollTop += scrollY;\n\t          return;\n\t        }\n\n\t        _this.autoScroller.update({\n\t          height: _this.height,\n\t          maxTranslate: _this.maxTranslate,\n\t          minTranslate: _this.minTranslate,\n\t          translate: _this.translate,\n\t          width: _this.width\n\t        });\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"onAutoScroll\", function (offset) {\n\t        _this.translate.x += offset.left;\n\t        _this.translate.y += offset.top;\n\n\t        _this.animateNodes();\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleKeyDown\", function (event) {\n\t        var keyCode = event.keyCode;\n\t        var shouldCancelStart = _this.props.shouldCancelStart;\n\n\t        if (_this.manager.active && !_this.manager.isKeySorting || !_this.manager.active && (keyCode !== KEYCODE.SPACE || shouldCancelStart(event) || !_this.isValidSortingTarget(event))) {\n\t          return;\n\t        }\n\n\t        event.stopPropagation();\n\t        event.preventDefault();\n\n\t        switch (keyCode) {\n\t          case KEYCODE.SPACE:\n\t            if (_this.manager.active) {\n\t              _this.keyDrop(event);\n\t            } else {\n\t              _this.keyLift(event);\n\t            }\n\n\t            break;\n\n\t          case KEYCODE.DOWN:\n\t          case KEYCODE.RIGHT:\n\t            _this.keyMove(1);\n\n\t            break;\n\n\t          case KEYCODE.UP:\n\t          case KEYCODE.LEFT:\n\t            _this.keyMove(-1);\n\n\t            break;\n\n\t          case KEYCODE.ESC:\n\t            _this.newIndex = _this.manager.active.index;\n\n\t            _this.keyDrop(event);\n\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"keyLift\", function (event) {\n\t        var target = event.target;\n\t        var node = closest(target, function (el) {\n\t          return el.sortableInfo != null;\n\t        });\n\t        var _node$sortableInfo2 = node.sortableInfo,\n\t            index = _node$sortableInfo2.index,\n\t            collection = _node$sortableInfo2.collection;\n\t        _this.initialFocusedNode = target;\n\t        _this.manager.isKeySorting = true;\n\t        _this.manager.active = {\n\t          index: index,\n\t          collection: collection\n\t        };\n\n\t        _this.handlePress(event);\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"keyMove\", function (shift) {\n\t        var nodes = _this.manager.getOrderedRefs();\n\n\t        var lastIndex = nodes[nodes.length - 1].node.sortableInfo.index;\n\t        var newIndex = _this.newIndex + shift;\n\t        var prevIndex = _this.newIndex;\n\n\t        if (newIndex < 0 || newIndex > lastIndex) {\n\t          return;\n\t        }\n\n\t        _this.prevIndex = prevIndex;\n\t        _this.newIndex = newIndex;\n\t        var targetIndex = getTargetIndex(_this.newIndex, _this.prevIndex, _this.index);\n\t        var target = nodes.find(function (_ref2) {\n\t          var node = _ref2.node;\n\t          return node.sortableInfo.index === targetIndex;\n\t        });\n\t        var targetNode = target.node;\n\t        var scrollDelta = _this.containerScrollDelta;\n\t        var targetBoundingClientRect = target.boundingClientRect || getScrollAdjustedBoundingClientRect(targetNode, scrollDelta);\n\t        var targetTranslate = target.translate || {\n\t          x: 0,\n\t          y: 0\n\t        };\n\t        var targetPosition = {\n\t          top: targetBoundingClientRect.top + targetTranslate.y - scrollDelta.top,\n\t          left: targetBoundingClientRect.left + targetTranslate.x - scrollDelta.left\n\t        };\n\t        var shouldAdjustForSize = prevIndex < newIndex;\n\t        var sizeAdjustment = {\n\t          x: shouldAdjustForSize && _this.axis.x ? targetNode.offsetWidth - _this.width : 0,\n\t          y: shouldAdjustForSize && _this.axis.y ? targetNode.offsetHeight - _this.height : 0\n\t        };\n\n\t        _this.handleSortMove({\n\t          pageX: targetPosition.left + sizeAdjustment.x,\n\t          pageY: targetPosition.top + sizeAdjustment.y,\n\t          ignoreTransition: shift === 0\n\t        });\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"keyDrop\", function (event) {\n\t        _this.handleSortEnd(event);\n\n\t        if (_this.initialFocusedNode) {\n\t          _this.initialFocusedNode.focus();\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"handleKeyEnd\", function (event) {\n\t        if (_this.manager.active) {\n\t          _this.keyDrop(event);\n\t        }\n\t      });\n\n\t      defineProperty(assertThisInitialized(assertThisInitialized(_this)), \"isValidSortingTarget\", function (event) {\n\t        var useDragHandle = _this.props.useDragHandle;\n\t        var target = event.target;\n\t        var node = closest(target, function (el) {\n\t          return el.sortableInfo != null;\n\t        });\n\t        return node && node.sortableInfo && !node.sortableInfo.disabled && (useDragHandle ? isSortableHandle(target) : target.sortableInfo);\n\t      });\n\n\t      validateProps(props);\n\t      _this.state = {};\n\t      _this.manager = new Manager();\n\t      _this.events = {\n\t        end: _this.handleEnd,\n\t        move: _this.handleMove,\n\t        start: _this.handleStart\n\t      };\n\t      return _this;\n\t    }\n\n\t    createClass(WithSortableContainer, [{\n\t      key: \"getChildContext\",\n\t      value: function getChildContext() {\n\t        return {\n\t          manager: this.manager\n\t        };\n\t      }\n\t    }, {\n\t      key: \"componentDidMount\",\n\t      value: function componentDidMount() {\n\t        var _this2 = this;\n\n\t        var useWindowAsScrollContainer = this.props.useWindowAsScrollContainer;\n\t        var container = this.getContainer();\n\t        Promise.resolve(container).then(function (containerNode) {\n\t          _this2.container = containerNode;\n\t          _this2.document = _this2.container.ownerDocument || document;\n\t          var contentWindow = _this2.props.contentWindow || _this2.document.defaultView || window;\n\t          _this2.contentWindow = typeof contentWindow === 'function' ? contentWindow() : contentWindow;\n\t          _this2.scrollContainer = useWindowAsScrollContainer ? _this2.document.scrollingElement || _this2.document.documentElement : getScrollingParent(_this2.container) || _this2.container;\n\t          _this2.autoScroller = new AutoScroller(_this2.scrollContainer, _this2.onAutoScroll);\n\t          Object.keys(_this2.events).forEach(function (key) {\n\t            return events[key].forEach(function (eventName) {\n\t              return _this2.container.addEventListener(eventName, _this2.events[key], false);\n\t            });\n\t          });\n\n\t          _this2.container.addEventListener('keydown', _this2.handleKeyDown);\n\t        });\n\t      }\n\t    }, {\n\t      key: \"componentWillUnmount\",\n\t      value: function componentWillUnmount() {\n\t        var _this3 = this;\n\n\t        if (this.helper && this.helper.parentNode) {\n\t          this.helper.parentNode.removeChild(this.helper);\n\t        }\n\n\t        if (!this.container) {\n\t          return;\n\t        }\n\n\t        Object.keys(this.events).forEach(function (key) {\n\t          return events[key].forEach(function (eventName) {\n\t            return _this3.container.removeEventListener(eventName, _this3.events[key]);\n\t          });\n\t        });\n\t        this.container.removeEventListener('keydown', this.handleKeyDown);\n\t      }\n\t    }, {\n\t      key: \"updateHelperPosition\",\n\t      value: function updateHelperPosition(event) {\n\t        var _this$props5 = this.props,\n\t            lockAxis = _this$props5.lockAxis,\n\t            lockOffset = _this$props5.lockOffset,\n\t            lockToContainerEdges = _this$props5.lockToContainerEdges,\n\t            transitionDuration = _this$props5.transitionDuration,\n\t            _this$props5$keyboard = _this$props5.keyboardSortingTransitionDuration,\n\t            keyboardSortingTransitionDuration = _this$props5$keyboard === void 0 ? transitionDuration : _this$props5$keyboard;\n\t        var isKeySorting = this.manager.isKeySorting;\n\t        var ignoreTransition = event.ignoreTransition;\n\t        var offset = getPosition(event);\n\t        var translate = {\n\t          x: offset.x - this.initialOffset.x,\n\t          y: offset.y - this.initialOffset.y\n\t        };\n\t        translate.y -= window.pageYOffset - this.initialWindowScroll.top;\n\t        translate.x -= window.pageXOffset - this.initialWindowScroll.left;\n\t        this.translate = translate;\n\n\t        if (lockToContainerEdges) {\n\t          var _getLockPixelOffsets = getLockPixelOffsets({\n\t            height: this.height,\n\t            lockOffset: lockOffset,\n\t            width: this.width\n\t          }),\n\t              _getLockPixelOffsets2 = slicedToArray(_getLockPixelOffsets, 2),\n\t              minLockOffset = _getLockPixelOffsets2[0],\n\t              maxLockOffset = _getLockPixelOffsets2[1];\n\n\t          var minOffset = {\n\t            x: this.width / 2 - minLockOffset.x,\n\t            y: this.height / 2 - minLockOffset.y\n\t          };\n\t          var maxOffset = {\n\t            x: this.width / 2 - maxLockOffset.x,\n\t            y: this.height / 2 - maxLockOffset.y\n\t          };\n\t          translate.x = limit(this.minTranslate.x + minOffset.x, this.maxTranslate.x - maxOffset.x, translate.x);\n\t          translate.y = limit(this.minTranslate.y + minOffset.y, this.maxTranslate.y - maxOffset.y, translate.y);\n\t        }\n\n\t        if (lockAxis === 'x') {\n\t          translate.y = 0;\n\t        } else if (lockAxis === 'y') {\n\t          translate.x = 0;\n\t        }\n\n\t        if (isKeySorting && keyboardSortingTransitionDuration && !ignoreTransition) {\n\t          setTransitionDuration(this.helper, keyboardSortingTransitionDuration);\n\t        }\n\n\t        setTranslate3d(this.helper, translate);\n\t      }\n\t    }, {\n\t      key: \"animateNodes\",\n\t      value: function animateNodes() {\n\t        var _this$props6 = this.props,\n\t            transitionDuration = _this$props6.transitionDuration,\n\t            hideSortableGhost = _this$props6.hideSortableGhost,\n\t            onSortOver = _this$props6.onSortOver;\n\t        var containerScrollDelta = this.containerScrollDelta,\n\t            windowScrollDelta = this.windowScrollDelta;\n\t        var nodes = this.manager.getOrderedRefs();\n\t        var sortingOffset = {\n\t          left: this.offsetEdge.left + this.translate.x + containerScrollDelta.left,\n\t          top: this.offsetEdge.top + this.translate.y + containerScrollDelta.top\n\t        };\n\t        var isKeySorting = this.manager.isKeySorting;\n\t        var prevIndex = this.newIndex;\n\t        this.newIndex = null;\n\n\t        for (var i = 0, len = nodes.length; i < len; i++) {\n\t          var _node3 = nodes[i].node;\n\t          var index = _node3.sortableInfo.index;\n\t          var width = _node3.offsetWidth;\n\t          var height = _node3.offsetHeight;\n\t          var offset = {\n\t            height: this.height > height ? height / 2 : this.height / 2,\n\t            width: this.width > width ? width / 2 : this.width / 2\n\t          };\n\t          var mustShiftBackward = isKeySorting && index > this.index && index <= prevIndex;\n\t          var mustShiftForward = isKeySorting && index < this.index && index >= prevIndex;\n\t          var translate = {\n\t            x: 0,\n\t            y: 0\n\t          };\n\t          var edgeOffset = nodes[i].edgeOffset;\n\n\t          if (!edgeOffset) {\n\t            edgeOffset = getEdgeOffset(_node3, this.container);\n\t            nodes[i].edgeOffset = edgeOffset;\n\n\t            if (isKeySorting) {\n\t              nodes[i].boundingClientRect = getScrollAdjustedBoundingClientRect(_node3, containerScrollDelta);\n\t            }\n\t          }\n\n\t          var nextNode = i < nodes.length - 1 && nodes[i + 1];\n\t          var prevNode = i > 0 && nodes[i - 1];\n\n\t          if (nextNode && !nextNode.edgeOffset) {\n\t            nextNode.edgeOffset = getEdgeOffset(nextNode.node, this.container);\n\n\t            if (isKeySorting) {\n\t              nextNode.boundingClientRect = getScrollAdjustedBoundingClientRect(nextNode.node, containerScrollDelta);\n\t            }\n\t          }\n\n\t          if (index === this.index) {\n\t            if (hideSortableGhost) {\n\t              this.sortableGhost = _node3;\n\t              setInlineStyles(_node3, {\n\t                opacity: 0,\n\t                visibility: 'hidden'\n\t              });\n\t            }\n\n\t            continue;\n\t          }\n\n\t          if (transitionDuration) {\n\t            setTransitionDuration(_node3, transitionDuration);\n\t          }\n\n\t          if (this.axis.x) {\n\t            if (this.axis.y) {\n\t              if (mustShiftForward || index < this.index && (sortingOffset.left + windowScrollDelta.left - offset.width <= edgeOffset.left && sortingOffset.top + windowScrollDelta.top <= edgeOffset.top + offset.height || sortingOffset.top + windowScrollDelta.top + offset.height <= edgeOffset.top)) {\n\t                translate.x = this.width + this.marginOffset.x;\n\n\t                if (edgeOffset.left + translate.x > this.containerBoundingRect.width - offset.width) {\n\t                  if (nextNode) {\n\t                    translate.x = nextNode.edgeOffset.left - edgeOffset.left;\n\t                    translate.y = nextNode.edgeOffset.top - edgeOffset.top;\n\t                  }\n\t                }\n\n\t                if (this.newIndex === null) {\n\t                  this.newIndex = index;\n\t                }\n\t              } else if (mustShiftBackward || index > this.index && (sortingOffset.left + windowScrollDelta.left + offset.width >= edgeOffset.left && sortingOffset.top + windowScrollDelta.top + offset.height >= edgeOffset.top || sortingOffset.top + windowScrollDelta.top + offset.height >= edgeOffset.top + height)) {\n\t                translate.x = -(this.width + this.marginOffset.x);\n\n\t                if (edgeOffset.left + translate.x < this.containerBoundingRect.left + offset.width) {\n\t                  if (prevNode) {\n\t                    translate.x = prevNode.edgeOffset.left - edgeOffset.left;\n\t                    translate.y = prevNode.edgeOffset.top - edgeOffset.top;\n\t                  }\n\t                }\n\n\t                this.newIndex = index;\n\t              }\n\t            } else {\n\t              if (mustShiftBackward || index > this.index && sortingOffset.left + windowScrollDelta.left + offset.width >= edgeOffset.left) {\n\t                translate.x = -(this.width + this.marginOffset.x);\n\t                this.newIndex = index;\n\t              } else if (mustShiftForward || index < this.index && sortingOffset.left + windowScrollDelta.left <= edgeOffset.left + offset.width) {\n\t                translate.x = this.width + this.marginOffset.x;\n\n\t                if (this.newIndex == null) {\n\t                  this.newIndex = index;\n\t                }\n\t              }\n\t            }\n\t          } else if (this.axis.y) {\n\t            if (mustShiftBackward || index > this.index && sortingOffset.top + windowScrollDelta.top + offset.height >= edgeOffset.top) {\n\t              translate.y = -(this.height + this.marginOffset.y);\n\t              this.newIndex = index;\n\t            } else if (mustShiftForward || index < this.index && sortingOffset.top + windowScrollDelta.top <= edgeOffset.top + offset.height) {\n\t              translate.y = this.height + this.marginOffset.y;\n\n\t              if (this.newIndex == null) {\n\t                this.newIndex = index;\n\t              }\n\t            }\n\t          }\n\n\t          setTranslate3d(_node3, translate);\n\t          nodes[i].translate = translate;\n\t        }\n\n\t        if (this.newIndex == null) {\n\t          this.newIndex = this.index;\n\t        }\n\n\t        if (isKeySorting) {\n\t          this.newIndex = prevIndex;\n\t        }\n\n\t        var oldIndex = isKeySorting ? this.prevIndex : prevIndex;\n\n\t        if (onSortOver && this.newIndex !== oldIndex) {\n\t          onSortOver({\n\t            collection: this.manager.active.collection,\n\t            index: this.index,\n\t            newIndex: this.newIndex,\n\t            oldIndex: oldIndex,\n\t            isKeySorting: isKeySorting\n\t          });\n\t        }\n\t      }\n\t    }, {\n\t      key: \"getWrappedInstance\",\n\t      value: function getWrappedInstance() {\n\t        invariant_1(config.withRef, 'To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableContainer() call');\n\t        return this.refs.wrappedInstance;\n\t      }\n\t    }, {\n\t      key: \"getContainer\",\n\t      value: function getContainer() {\n\t        var getContainer = this.props.getContainer;\n\n\t        if (typeof getContainer !== 'function') {\n\t          return reactDom.findDOMNode(this);\n\t        }\n\n\t        return getContainer(config.withRef ? this.getWrappedInstance() : undefined);\n\t      }\n\t    }, {\n\t      key: \"render\",\n\t      value: function render() {\n\t        var ref = config.withRef ? 'wrappedInstance' : null;\n\t        return React.createElement(WrappedComponent, _extends_1({\n\t          ref: ref\n\t        }, omit(this.props, omittedProps)));\n\t      }\n\t    }, {\n\t      key: \"helperContainer\",\n\t      get: function get() {\n\t        var helperContainer = this.props.helperContainer;\n\n\t        if (typeof helperContainer === 'function') {\n\t          return helperContainer();\n\t        }\n\n\t        return this.props.helperContainer || this.document.body;\n\t      }\n\t    }, {\n\t      key: \"containerScrollDelta\",\n\t      get: function get() {\n\t        var useWindowAsScrollContainer = this.props.useWindowAsScrollContainer;\n\n\t        if (useWindowAsScrollContainer) {\n\t          return {\n\t            left: 0,\n\t            top: 0\n\t          };\n\t        }\n\n\t        return {\n\t          left: this.scrollContainer.scrollLeft - this.initialScroll.left,\n\t          top: this.scrollContainer.scrollTop - this.initialScroll.top\n\t        };\n\t      }\n\t    }, {\n\t      key: \"windowScrollDelta\",\n\t      get: function get() {\n\t        return {\n\t          left: this.contentWindow.pageXOffset - this.initialWindowScroll.left,\n\t          top: this.contentWindow.pageYOffset - this.initialWindowScroll.top\n\t        };\n\t      }\n\t    }]);\n\n\t    return WithSortableContainer;\n\t  }(React.Component), defineProperty(_class, \"displayName\", provideDisplayName('sortableList', WrappedComponent)), defineProperty(_class, \"defaultProps\", defaultProps), defineProperty(_class, \"propTypes\", propTypes), defineProperty(_class, \"childContextTypes\", {\n\t    manager: PropTypes.object.isRequired\n\t  }), _temp;\n\t}\n\n\tvar propTypes$1 = {\n\t  index: PropTypes.number.isRequired,\n\t  collection: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\t  disabled: PropTypes.bool\n\t};\n\tvar omittedProps$1 = Object.keys(propTypes$1);\n\tfunction sortableElement(WrappedComponent) {\n\t  var _class, _temp;\n\n\t  var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n\t    withRef: false\n\t  };\n\t  return _temp = _class = function (_React$Component) {\n\t    inherits(WithSortableElement, _React$Component);\n\n\t    function WithSortableElement() {\n\t      classCallCheck(this, WithSortableElement);\n\n\t      return possibleConstructorReturn(this, getPrototypeOf(WithSortableElement).apply(this, arguments));\n\t    }\n\n\t    createClass(WithSortableElement, [{\n\t      key: \"componentDidMount\",\n\t      value: function componentDidMount() {\n\t        this.register();\n\t      }\n\t    }, {\n\t      key: \"componentDidUpdate\",\n\t      value: function componentDidUpdate(prevProps) {\n\t        if (this.node) {\n\t          if (prevProps.index !== this.props.index) {\n\t            this.node.sortableInfo.index = this.props.index;\n\t          }\n\n\t          if (prevProps.disabled !== this.props.disabled) {\n\t            this.node.sortableInfo.disabled = this.props.disabled;\n\t          }\n\t        }\n\n\t        if (prevProps.collection !== this.props.collection) {\n\t          this.unregister(prevProps.collection);\n\t          this.register();\n\t        }\n\t      }\n\t    }, {\n\t      key: \"componentWillUnmount\",\n\t      value: function componentWillUnmount() {\n\t        this.unregister();\n\t      }\n\t    }, {\n\t      key: \"register\",\n\t      value: function register() {\n\t        var _this$props = this.props,\n\t            collection = _this$props.collection,\n\t            disabled = _this$props.disabled,\n\t            index = _this$props.index;\n\t        var node = reactDom.findDOMNode(this);\n\t        node.sortableInfo = {\n\t          collection: collection,\n\t          disabled: disabled,\n\t          index: index,\n\t          manager: this.context.manager\n\t        };\n\t        this.node = node;\n\t        this.ref = {\n\t          node: node\n\t        };\n\t        this.context.manager.add(collection, this.ref);\n\t      }\n\t    }, {\n\t      key: \"unregister\",\n\t      value: function unregister() {\n\t        var collection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.collection;\n\t        this.context.manager.remove(collection, this.ref);\n\t      }\n\t    }, {\n\t      key: \"getWrappedInstance\",\n\t      value: function getWrappedInstance() {\n\t        invariant_1(config.withRef, 'To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableElement() call');\n\t        return this.refs.wrappedInstance;\n\t      }\n\t    }, {\n\t      key: \"render\",\n\t      value: function render() {\n\t        var ref = config.withRef ? 'wrappedInstance' : null;\n\t        return React.createElement(WrappedComponent, _extends_1({\n\t          ref: ref\n\t        }, omit(this.props, omittedProps$1)));\n\t      }\n\t    }]);\n\n\t    return WithSortableElement;\n\t  }(React.Component), defineProperty(_class, \"displayName\", provideDisplayName('sortableElement', WrappedComponent)), defineProperty(_class, \"contextTypes\", {\n\t    manager: PropTypes.object.isRequired\n\t  }), defineProperty(_class, \"propTypes\", propTypes$1), defineProperty(_class, \"defaultProps\", {\n\t    collection: 0\n\t  }), _temp;\n\t}\n\n\texports.SortableContainer = sortableContainer;\n\texports.sortableContainer = sortableContainer;\n\texports.SortableElement = sortableElement;\n\texports.sortableElement = sortableElement;\n\texports.SortableHandle = sortableHandle;\n\texports.sortableHandle = sortableHandle;\n\texports.arrayMove = arrayMove;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { chainPropTypes, getDisplayName } from '@material-ui/utils';\nimport makeStyles from '../makeStyles';\nimport getThemeProps from '../getThemeProps';\nimport useTheme from '../useTheme'; // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `classes` property.\n\nvar withStyles = function withStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function (Component) {\n    var defaultTheme = options.defaultTheme,\n        _options$withTheme = options.withTheme,\n        withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n        name = options.name,\n        stylesOptions = _objectWithoutProperties(options, [\"defaultTheme\", \"withTheme\", \"name\"]);\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (Component === undefined) {\n        throw new Error(['You are calling withStyles(styles)(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var classNamePrefix = name;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = getDisplayName(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var useStyles = makeStyles(stylesOrCreator, _extends({\n      defaultTheme: defaultTheme,\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var WithStyles = React.forwardRef(function WithStyles(props, ref) {\n      var classesProp = props.classes,\n          innerRef = props.innerRef,\n          other = _objectWithoutProperties(props, [\"classes\", \"innerRef\"]);\n\n      var classes = useStyles(props);\n      var theme;\n      var more = other;\n\n      if (typeof name === 'string' || withTheme) {\n        // name and withTheme are invariant in the outer scope\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        theme = useTheme() || defaultTheme;\n\n        if (name) {\n          more = getThemeProps({\n            theme: theme,\n            name: name,\n            props: other\n          });\n        } // Provide the theme to the wrapped component.\n        // So we don't have to use the `withTheme()` Higher-order Component.\n\n\n        if (withTheme && !more.theme) {\n          more.theme = theme;\n        }\n      }\n\n      return React.createElement(Component, _extends({\n        ref: innerRef || ref,\n        classes: classes\n      }, more));\n    });\n    process.env.NODE_ENV !== \"production\" ? WithStyles.propTypes = {\n      /**\n       * Override or extend the styles applied to the component.\n       */\n      classes: PropTypes.object,\n\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: chainPropTypes(PropTypes.oneOfType([PropTypes.func, PropTypes.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return null; // return new Error(\n        //   'Material-UI: the `innerRef` prop is deprecated and will be removed in v5. ' +\n        //     'Refs are now automatically forwarded to the inner component.',\n        // );\n      })\n    } : void 0; // The wrapper receives only user supplied props, which could be a subset of\n    // the actual props Component might receive due to merging with defaultProps.\n    // So copying it here would give us the same result in the wrapper as well.\n\n    WithStyles.defaultProps = Component.defaultProps;\n\n    if (process.env.NODE_ENV !== 'production') {\n      WithStyles.displayName = \"WithStyles(\".concat(getDisplayName(Component), \")\");\n    }\n\n    hoistNonReactStatics(WithStyles, Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Exposed for test purposes.\n      WithStyles.Naked = Component;\n      WithStyles.options = options;\n      WithStyles.useStyles = useStyles;\n    }\n\n    return WithStyles;\n  };\n};\n\nexport default withStyles;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListContext from './ListContext';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    listStyle: 'none',\n    margin: 0,\n    padding: 0,\n    position: 'relative'\n  },\n\n  /* Styles applied to the root element if `disablePadding={false}`. */\n  padding: {\n    paddingTop: 8,\n    paddingBottom: 8\n  },\n\n  /* Styles applied to the root element if dense. */\n  dense: {},\n\n  /* Styles applied to the root element if a `subheader` is provided. */\n  subheader: {\n    paddingTop: 0\n  }\n};\nvar List = React.forwardRef(function List(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'ul' : _props$component,\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disablePadding = props.disablePadding,\n      disablePadding = _props$disablePadding === void 0 ? false : _props$disablePadding,\n      subheader = props.subheader,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n\n  var context = React.useMemo(function () {\n    return {\n      dense: dense\n    };\n  }, [dense]);\n  return React.createElement(ListContext.Provider, {\n    value: context\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className, dense && classes.dense, !disablePadding && classes.padding, subheader && classes.subheader),\n    ref: ref\n  }, other), subheader, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * If `true`, vertical padding will be removed from the list.\n   */\n  disablePadding: PropTypes.bool,\n\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: PropTypes.node\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiList'\n})(List);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport capitalize from '../utils/capitalize';\nimport { refType } from '@material-ui/utils';\nimport Menu from '../Menu/Menu';\nimport { isFilled } from '../InputBase/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useControlled from '../utils/useControlled';\n\nfunction areEqualValues(a, b) {\n  if (_typeof(b) === 'object' && b !== null) {\n    return a === b;\n  }\n\n  return String(a) === String(b);\n}\n\nfunction isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}\n/**\n * @ignore - internal component.\n */\n\n\nvar SelectInput = React.forwardRef(function SelectInput(props, ref) {\n  var autoFocus = props.autoFocus,\n      autoWidth = props.autoWidth,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      displayEmpty = props.displayEmpty,\n      IconComponent = props.IconComponent,\n      inputRefProp = props.inputRef,\n      labelId = props.labelId,\n      _props$MenuProps = props.MenuProps,\n      MenuProps = _props$MenuProps === void 0 ? {} : _props$MenuProps,\n      multiple = props.multiple,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onFocus = props.onFocus,\n      onOpen = props.onOpen,\n      openProp = props.open,\n      readOnly = props.readOnly,\n      renderValue = props.renderValue,\n      required = props.required,\n      _props$SelectDisplayP = props.SelectDisplayProps,\n      SelectDisplayProps = _props$SelectDisplayP === void 0 ? {} : _props$SelectDisplayP,\n      tabIndexProp = props.tabIndex,\n      type = props.type,\n      valueProp = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoFocus\", \"autoWidth\", \"children\", \"classes\", \"className\", \"defaultValue\", \"disabled\", \"displayEmpty\", \"IconComponent\", \"inputRef\", \"labelId\", \"MenuProps\", \"multiple\", \"name\", \"onBlur\", \"onChange\", \"onClose\", \"onFocus\", \"onOpen\", \"open\", \"readOnly\", \"renderValue\", \"required\", \"SelectDisplayProps\", \"tabIndex\", \"type\", \"value\", \"variant\"]);\n\n  var _useControlled = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'SelectInput'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  var inputRef = React.useRef(null);\n\n  var _React$useState = React.useState(null),\n      displayNode = _React$useState[0],\n      setDisplayNode = _React$useState[1];\n\n  var _React$useRef = React.useRef(openProp != null),\n      isOpenControlled = _React$useRef.current;\n\n  var _React$useState2 = React.useState(),\n      menuMinWidthState = _React$useState2[0],\n      setMenuMinWidthState = _React$useState2[1];\n\n  var _React$useState3 = React.useState(false),\n      openState = _React$useState3[0],\n      setOpenState = _React$useState3[1];\n\n  var handleRef = useForkRef(ref, inputRefProp);\n  React.useImperativeHandle(handleRef, function () {\n    return {\n      focus: function focus() {\n        displayNode.focus();\n      },\n      node: inputRef.current,\n      value: value\n    };\n  }, [displayNode, value]);\n  React.useEffect(function () {\n    if (autoFocus && displayNode) {\n      displayNode.focus();\n    }\n  }, [autoFocus, displayNode]);\n\n  var update = function update(open, event) {\n    if (open) {\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else if (onClose) {\n      onClose(event);\n    }\n\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : displayNode.clientWidth);\n      setOpenState(open);\n    }\n  };\n\n  var handleMouseDown = function handleMouseDown(event) {\n    // Hijack the default focus behavior.\n    event.preventDefault();\n    displayNode.focus();\n    update(true, event);\n  };\n\n  var handleClose = function handleClose(event) {\n    update(false, event);\n  };\n\n  var handleItemClick = function handleItemClick(child) {\n    return function (event) {\n      if (!multiple) {\n        update(false, event);\n      }\n\n      var newValue;\n\n      if (multiple) {\n        newValue = Array.isArray(value) ? _toConsumableArray(value) : [];\n        var itemIndex = value.indexOf(child.props.value);\n\n        if (itemIndex === -1) {\n          newValue.push(child.props.value);\n        } else {\n          newValue.splice(itemIndex, 1);\n        }\n      } else {\n        newValue = child.props.value;\n      }\n\n      setValue(newValue);\n\n      if (onChange) {\n        event.persist(); // Preact support, target is read only property on a native event.\n\n        Object.defineProperty(event, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name: name\n          }\n        });\n        onChange(event, child);\n      }\n    };\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    if (!readOnly) {\n      var validKeys = [' ', 'ArrowUp', 'ArrowDown', // The native select doesn't respond to enter on MacOS, but it's recommended by\n      // https://www.w3.org/TR/wai-aria-practices/examples/listbox/listbox-collapsible.html\n      'Enter'];\n\n      if (validKeys.indexOf(event.key) !== -1) {\n        event.preventDefault();\n        update(true, event);\n      }\n    }\n  };\n\n  var open = displayNode !== null && (isOpenControlled ? openProp : openState);\n\n  var handleBlur = function handleBlur(event) {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      event.persist(); // Preact support, target is read only property on a native event.\n\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value: value,\n          name: name\n        }\n      });\n      onBlur(event);\n    }\n  };\n\n  delete other['aria-invalid'];\n  var display;\n  var displaySingle;\n  var displayMultiple = [];\n  var computeDisplay = false;\n  var foundMatch = false; // No need to display any value if the field is empty.\n\n  if (isFilled({\n    value: value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n\n  var items = React.Children.map(children, function (child) {\n    if (!React.isValidElement(child)) {\n      return null;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    var selected;\n\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error('Material-UI: the `value` prop must be an array ' + 'when using the `Select` component with `multiple`.');\n      }\n\n      selected = value.some(function (v) {\n        return areEqualValues(v, child.props.value);\n      });\n\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n\n    if (selected) {\n      foundMatch = true;\n    }\n\n    return React.cloneElement(child, {\n      'aria-selected': selected ? 'true' : undefined,\n      onClick: handleItemClick(child),\n      onKeyUp: function onKeyUp(event) {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n\n        var onKeyUp = child.props.onKeyUp;\n\n        if (typeof onKeyUp === 'function') {\n          onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected: selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n\n    });\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(function () {\n      if (!foundMatch && !multiple && value !== '') {\n        var values = React.Children.toArray(children).map(function (child) {\n          return child.props.value;\n        });\n        console.warn([\"Material-UI: you have provided an out-of-range value `\".concat(value, \"` for the select \").concat(name ? \"(name=\\\"\".concat(name, \"\\\") \") : '', \"component.\"), \"Consider providing a value that matches one of the available options or ''.\", \"The available values are \".concat(values.filter(function (x) {\n          return x != null;\n        }).map(function (x) {\n          return \"`\".concat(x, \"`\");\n        }).join(', ') || '\"\"', \".\")].join('\\n'));\n      }\n    }, [foundMatch, children, multiple, name, value]);\n  }\n\n  if (computeDisplay) {\n    display = multiple ? displayMultiple.join(', ') : displaySingle;\n  } // Avoid performing a layout computation in the render method.\n\n\n  var menuMinWidth = menuMinWidthState;\n\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = displayNode.clientWidth;\n  }\n\n  var tabIndex;\n\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n\n  var buttonId = SelectDisplayProps.id || (name ? \"mui-component-select-\".concat(name) : undefined);\n  return React.createElement(React.Fragment, null, React.createElement(\"div\", _extends({\n    className: clsx(classes.root, // TODO v5: merge root and select\n    classes.select, classes.selectMenu, classes[variant], className, disabled && classes.disabled),\n    ref: setDisplayNode,\n    tabIndex: tabIndex,\n    role: \"button\",\n    \"aria-expanded\": open ? 'true' : undefined,\n    \"aria-labelledby\": \"\".concat(labelId || '', \" \").concat(buttonId || ''),\n    \"aria-haspopup\": \"listbox\",\n    onKeyDown: handleKeyDown,\n    onMouseDown: disabled || readOnly ? null : handleMouseDown,\n    onBlur: handleBlur,\n    onFocus: onFocus\n  }, SelectDisplayProps, {\n    // The id is required for proper a11y\n    id: buttonId\n  }), isEmpty(display) ? // eslint-disable-next-line react/no-danger\n  React.createElement(\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : display), React.createElement(\"input\", _extends({\n    value: Array.isArray(value) ? value.join(',') : value,\n    name: name,\n    ref: inputRef,\n    type: \"hidden\",\n    autoFocus: autoFocus\n  }, other)), React.createElement(IconComponent, {\n    className: clsx(classes.icon, classes[\"icon\".concat(capitalize(variant))], open && classes.iconOpen)\n  }), React.createElement(Menu, _extends({\n    id: \"menu-\".concat(name || ''),\n    anchorEl: displayNode,\n    open: open,\n    onClose: handleClose\n  }, MenuProps, {\n    MenuListProps: _extends({\n      'aria-labelledby': labelId,\n      role: 'listbox',\n      disableListWrap: true\n    }, MenuProps.MenuListProps),\n    PaperProps: _extends({}, MenuProps.PaperProps, {\n      style: _extends({\n        minWidth: menuMinWidth\n      }, MenuProps.PaperProps != null ? MenuProps.PaperProps.style : null)\n    })\n  }), items));\n});\nprocess.env.NODE_ENV !== \"production\" ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: refType,\n\n  /**\n   * The idea of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control `select` open state.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * @ignore\n   */\n  type: PropTypes.any,\n\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default SelectInput;","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport capitalize from '../utils/capitalize';\n/**\n * @ignore - internal component.\n */\n\nvar NativeSelectInput = React.forwardRef(function NativeSelectInput(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      disabled = props.disabled,\n      IconComponent = props.IconComponent,\n      inputRef = props.inputRef,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"disabled\", \"IconComponent\", \"inputRef\", \"variant\"]);\n\n  return React.createElement(React.Fragment, null, React.createElement(\"select\", _extends({\n    className: clsx(classes.root, // TODO v5: merge root and select\n    classes.select, classes[variant], className, disabled && classes.disabled),\n    disabled: disabled,\n    ref: inputRef || ref\n  }, other)), props.multiple ? null : React.createElement(IconComponent, {\n    className: clsx(classes.icon, classes[\"icon\".concat(capitalize(variant))])\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: refType,\n\n  /**\n   * @ignore\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default NativeSelectInput;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport NativeSelectInput from './NativeSelectInput';\nimport withStyles from '../styles/withStyles';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport Input from '../Input';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the select component `root` class. */\n    root: {},\n\n    /* Styles applied to the select component `select` class. */\n    select: {\n      '-moz-appearance': 'none',\n      // Reset\n      '-webkit-appearance': 'none',\n      // Reset\n      // When interacting quickly, the text can end up selected.\n      // Native select can't be selected either.\n      userSelect: 'none',\n      borderRadius: 0,\n      // Reset\n      minWidth: 16,\n      // So it doesn't collapse.\n      cursor: 'pointer',\n      '&:focus': {\n        // Show that it's not an text input\n        backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)',\n        borderRadius: 0 // Reset Chrome style\n\n      },\n      // Remove IE 11 arrow\n      '&::-ms-expand': {\n        display: 'none'\n      },\n      '&$disabled': {\n        cursor: 'default'\n      },\n      '&[multiple]': {\n        height: 'auto'\n      },\n      '&:not([multiple]) option, &:not([multiple]) optgroup': {\n        backgroundColor: theme.palette.background.paper\n      },\n      '&&': {\n        paddingRight: 24\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"filled\"`. */\n    filled: {\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"outlined\"`. */\n    outlined: {\n      borderRadius: theme.shape.borderRadius,\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component `selectMenu` class. */\n    selectMenu: {\n      height: 'auto',\n      // Reset\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden'\n    },\n\n    /* Pseudo-class applied to the select component `disabled` class. */\n    disabled: {},\n\n    /* Styles applied to the icon component. */\n    icon: {\n      // We use a position absolute over a flexbox in order to forward the pointer events\n      // to the input and to support wrapping tags..\n      position: 'absolute',\n      right: 0,\n      top: 'calc(50% - 12px)',\n      // Center vertically\n      color: theme.palette.action.active,\n      pointerEvents: 'none' // Don't block pointer events on the select under the icon.\n\n    },\n\n    /* Styles applied to the icon component if the popup is open. */\n    iconOpen: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the icon component if `variant=\"filled\"`. */\n    iconFilled: {\n      right: 7\n    },\n\n    /* Styles applied to the icon component if `variant=\"outlined\"`. */\n    iconOutlined: {\n      right: 7\n    }\n  };\n};\nvar defaultInput = React.createElement(Input, null);\n/**\n * An alternative to `<Select native />` with a much smaller bundle size footprint.\n */\n\nvar NativeSelect = React.forwardRef(function NativeSelect(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? ArrowDropDownIcon : _props$IconComponent,\n      _props$input = props.input,\n      input = _props$input === void 0 ? defaultInput : _props$input,\n      inputProps = props.inputProps,\n      variant = props.variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"IconComponent\", \"input\", \"inputProps\", \"variant\"]);\n\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  return React.cloneElement(input, _extends({\n    // Most of the logic is implemented in `NativeSelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: NativeSelectInput,\n    inputProps: _extends({\n      children: children,\n      classes: classes,\n      IconComponent: IconComponent,\n      variant: fcs.variant,\n      type: undefined\n    }, inputProps, {}, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelect.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n\n  /**\n   * Attributes applied to the `select` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The input value. The DOM API casts this to a string.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nNativeSelect.muiName = 'Select';\nexport default withStyles(styles, {\n  name: 'MuiNativeSelect'\n})(NativeSelect);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { mergeClasses } from '@material-ui/styles';\nimport SelectInput from './SelectInput';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport withStyles from '../styles/withStyles';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport Input from '../Input';\nimport { styles as nativeSelectStyles } from '../NativeSelect/NativeSelect';\nimport NativeSelectInput from '../NativeSelect/NativeSelectInput';\nimport FilledInput from '../FilledInput';\nimport OutlinedInput from '../OutlinedInput';\nexport var styles = nativeSelectStyles;\n\nvar _ref = React.createElement(Input, null);\n\nvar _ref2 = React.createElement(FilledInput, null);\n\nvar Select = React.forwardRef(function Select(props, ref) {\n  var _props$autoWidth = props.autoWidth,\n      autoWidth = _props$autoWidth === void 0 ? false : _props$autoWidth,\n      children = props.children,\n      classes = props.classes,\n      _props$displayEmpty = props.displayEmpty,\n      displayEmpty = _props$displayEmpty === void 0 ? false : _props$displayEmpty,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? ArrowDropDownIcon : _props$IconComponent,\n      id = props.id,\n      input = props.input,\n      inputProps = props.inputProps,\n      label = props.label,\n      labelId = props.labelId,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      MenuProps = props.MenuProps,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      _props$native = props.native,\n      native = _props$native === void 0 ? false : _props$native,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      open = props.open,\n      renderValue = props.renderValue,\n      SelectDisplayProps = props.SelectDisplayProps,\n      _props$variant = props.variant,\n      variantProps = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoWidth\", \"children\", \"classes\", \"displayEmpty\", \"IconComponent\", \"id\", \"input\", \"inputProps\", \"label\", \"labelId\", \"labelWidth\", \"MenuProps\", \"multiple\", \"native\", \"onClose\", \"onOpen\", \"open\", \"renderValue\", \"SelectDisplayProps\", \"variant\"]);\n\n  var inputComponent = native ? NativeSelectInput : SelectInput;\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  var variant = fcs.variant || variantProps;\n  var InputComponent = input || {\n    standard: _ref,\n    outlined: React.createElement(OutlinedInput, {\n      label: label,\n      labelWidth: labelWidth\n    }),\n    filled: _ref2\n  }[variant];\n  return React.cloneElement(InputComponent, _extends({\n    // Most of the logic is implemented in `SelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: inputComponent,\n    inputProps: _extends({\n      children: children,\n      IconComponent: IconComponent,\n      variant: variant,\n      type: undefined,\n      // We render a select. We can ignore the type provided by the `Input`.\n      multiple: multiple\n    }, native ? {\n      id: id\n    } : {\n      autoWidth: autoWidth,\n      displayEmpty: displayEmpty,\n      labelId: labelId,\n      MenuProps: MenuProps,\n      onClose: onClose,\n      onOpen: onOpen,\n      open: open,\n      renderValue: renderValue,\n      SelectDisplayProps: _extends({\n        id: id\n      }, SelectDisplayProps)\n    }, {}, inputProps, {\n      classes: inputProps ? mergeClasses({\n        baseClasses: classes,\n        newClasses: inputProps.classes,\n        Component: Select\n      }) : classes\n    }, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Select.propTypes = {\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function should be passed to the `renderValue` prop which returns the value to be displayed when no items are selected.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  displayEmpty: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType,\n\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * See [OutlinedLabel#label](/api/outlined-input/#props)\n   */\n  label: PropTypes.node,\n\n  /**\n   * The idea of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n\n  /**\n   * See OutlinedLabel#label\n   */\n  labelWidth: PropTypes.number,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * If `true`, the component will be using a native `select` element.\n   */\n  native: PropTypes.bool,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control `select` open state.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n\n  /**\n   * The input value. Providing an empty string will select no options.\n   * This prop is required when the `native` prop is `false` (default).\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nSelect.muiName = 'Select';\nexport default withStyles(styles, {\n  name: 'MuiSelect'\n})(Select);","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withReduxForm = exports.ReduxFormContext = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar ReduxFormContext = React.createContext(null);\nexports.ReduxFormContext = ReduxFormContext;\n\nvar withReduxForm = function withReduxForm(Component) {\n  var Hoc =\n  /*#__PURE__*/\n  function (_React$Component) {\n    (0, _inheritsLoose2[\"default\"])(Hoc, _React$Component);\n\n    function Hoc() {\n      return _React$Component.apply(this, arguments) || this;\n    }\n\n    var _proto = Hoc.prototype;\n\n    _proto.render = function render() {\n      var _this$props = this.props,\n          forwardedRef = _this$props.forwardedRef,\n          rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props, [\"forwardedRef\"]);\n      return React.createElement(ReduxFormContext.Consumer, {\n        children: function children(_reduxForm) {\n          return React.createElement(Component, (0, _extends2[\"default\"])({\n            _reduxForm: _reduxForm,\n            ref: forwardedRef\n          }, rest));\n        }\n      });\n    };\n\n    return Hoc;\n  }(React.Component);\n\n  var ref = React.forwardRef(function (props, ref) {\n    return React.createElement(Hoc, (0, _extends2[\"default\"])({}, props, {\n      forwardedRef: ref\n    }));\n  });\n  ref.displayName = Component.displayName || Component.name || 'Component';\n  return ref;\n};\n\nexports.withReduxForm = withReduxForm;","export { default } from './SvgIcon';","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Typography,\n  Avatar,\n  Tooltip,\n  Divider,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ToggleOverlayComponentAction,\n  SetOverlayComponentContentAction,\n} from '../../modules/ApplicationModule/actions';\nimport {\n  DRAWER_ID\n} from '../../containers/MyContactsPage/constants';\nimport {\n  CONTENT_EDIT_KEY\n} from '../../components/UserContactDrawerDetails';\nimport { DeleteContactsByIdAction, GetContactsAction, DeleteContactAction, DeleteContactAndSearchContactsAction } from '../../modules/AccountModule/actions';\nimport { Contact } from '../../models';\nimport {makeSelectCustomerDiscounts, makeSelectUserDefinedLabel} from '../../modules/AccountModule/selectors';\nimport {List} from 'immutable';\nimport Discount from '../../models/Discount';\nimport DeleteModal from '../DeleteModalDialog';\nimport { MY_CONTACTS_PATH, SiteName, getLocalePrefix } from '../../constants';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\nimport ApartmentRoundedIcon from '@material-ui/icons/ApartmentRounded';\nimport BusinessCenterIcon from '@material-ui/icons/BusinessCenter';\nimport EmailIcon from '@material-ui/icons/Email';\nimport RoomIcon from '@material-ui/icons/Room';\nimport PhoneEnabledIcon from '@material-ui/icons/PhoneEnabled';\nimport PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid';\nimport MoneyOffRoundedIcon from '@material-ui/icons/MoneyOffRounded';\nimport PeopleAltRoundedIcon from '@material-ui/icons/PeopleAltRounded';\nimport FolderSharedRoundedIcon from '@material-ui/icons/FolderSharedRounded';\nimport DrawerRow from '../DrawerRow';\nimport DrawerViewHeader from '../DrawerViewHeader';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport NoteIcon from '@material-ui/icons/Note';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport MonetizationOnIcon from '@material-ui/icons/MonetizationOn';\nimport LocalShippingIcon from '@material-ui/icons/LocalShipping';\nimport LibraryAddIcon from '@material-ui/icons/LibraryAdd';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\n\ninterface IUserContactDrawerDetailsContactProps {\n  contactData: IMap<Contact>;\n  editable?: boolean;\n  deletable?: boolean;\n}\n\ninterface IUserContactDrawerDetailsContact extends IUserContactDrawerDetailsContactProps {\n  dispatch: React.Dispatch<IAction>;\n  customerDiscounts?: List<IMap<Discount>>;\n  site: SiteName;\n  contactListProps: any;\n  userDefinedLabel: string;\n}\n\n\ntype UserContactDrawerDetailsContactType = WithTranslation & IUserContactDrawerDetailsContact & WithStyles<keyof ReturnType<typeof styles>>;\nclass UserContactDrawerDetailsContact extends React.Component<UserContactDrawerDetailsContactType, {}> {\n\n  public state = {\n    showDeleteModal: false,\n  };\n\n  public toggleDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID\n    }))\n  };\n\n  public editContact = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: DRAWER_ID,\n      content: CONTENT_EDIT_KEY\n    }));\n  };\n\n  public deleteContact = (contactId: number) => {\n    const {\n      dispatch,\n      contactListProps\n    } = this.props;\n\n    if (`/${window.location.pathname.replace(getLocalePrefix(), '').split('/')[1]}` === MY_CONTACTS_PATH) {\n      dispatch(new DeleteContactAndSearchContactsAction({\n        contactId,\n        options: contactListProps.options,\n        filters: contactListProps.filters\n      }));\n    } else {\n      dispatch(new DeleteContactsByIdAction({contactId}));\n    }\n    dispatch(new DeleteContactAction(contactId));\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID\n    }))\n  }\n\n  public getManufacturerAndCategory = (manufacturer, category) => {\n    if (!manufacturer) {\n      return category;\n    }\n    if (!category) {\n      return manufacturer;\n    }\n    return manufacturer + ' | ' + category;\n  }\n\n  public getDiscountAndAmount = (discount, amount) => {\n    const { t } = this.props;\n    if (!discount) {\n      return t('contactDrawerView.na') + ' - ' + amount;\n    }\n    return t(`contactDrawerEdit.${discount}`) + ' - ' + amount;\n  }\n\n  public toggleDeleteModal = () => {\n    this.setState({\n      showDeleteModal: !this.state.showDeleteModal\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      contactData,\n      customerDiscounts,\n      site,\n      editable = true,\n      deletable = true,\n      userDefinedLabel = '',\n      t\n    } = this.props;\n\n    if (contactData == null) {\n      return <Typography>\n        {t('contactDrawerView.noContact')}\n      </Typography>\n    }\n\n    const firstName = contactData.get('firstName') || '';\n    const lastName = contactData.get('lastName') || '';\n    const organization = contactData.get('organization') || '';\n    const internalNumber = contactData.get('internalNo') || '';\n\n    const name = `${firstName} ${lastName}`.trim();\n    const initials = (firstName || lastName) ? `${firstName[0] || ''}${lastName[0] || ''}` : `${organization[0]}`;\n    const title = contactData.get('title', '');\n    const ownerType = contactData.get('ownerType', '');\n    const contactType = contactData.get('contactType', '');\n    const email = contactData.get('email', '');\n\n    let officeContact = contactData.get('officeNumber') || '';\n    const [officeNumber, extension] = (officeContact as string).split(',');\n    officeContact = extension ? officeNumber + \" - Ext: \" + extension : officeNumber;\n\n    const fullAddress = [\n      contactData.get('address1'),\n      contactData.get('cityName'),\n      contactData.get('provinceName'),\n      contactData.get('postalZip'),\n      contactData.get('countryName')\n    ].filter(location => location).join(', ');\n    const mobileNumber = contactData.get('mobileNumber');\n    const contactId = contactData.get('id');\n    const imageId = contactData.get('imageId');\n    const imgSize = 108;\n\n    const salesReps = contactData.get('salesReps')?.reduce((acc, user) => acc.push(user.get('name')), List())?.join(', ') || '';\n    const internalNote = contactData.get('internalNote') || '';\n\n    const branchId = contactData.get('branchId') || '';\n    const pricingRegion = contactData.getIn(['region', 'label']) ?? contactData.getIn(['region', 'value']) ?? '';\n    const billTo = contactData.get('billToCustomer') || '';\n    const shipTo = contactData.get('shipToCustomer') || '';\n    const userDefined = contactData.get('userDefined') || '';\n\n    return (\n      <Grid \n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        <DrawerViewHeader\n          imageProps={{\n            ...(imageId\n              ? {\n                  imgComponentProps: {\n                    imgId: imageId,\n                    imgSize: imgSize,\n                    circleImg: true\n                  }\n                }\n              : {\n                  avatarProps: {\n                    classNames: classes.avatar,\n                    initial: initials\n                  }\n                }\n              )\n          }}\n          menuItems={\n            editable ?\n              [\n                { action: t('formButtons.edit'), onClick: this.editContact },\n                ...(deletable ? [{ action: t('formButtons.delete'), onClick: this.toggleDeleteModal }] : [])\n              ]\n              :\n              null\n          }\n          title={name}\n          otherElements={\n            <>\n              <Typography\n                variant='body2'\n                className={classes.title}\n              >\n                {title}\n              </Typography>\n            </>\n          }\n          handleClose={this.toggleDrawer}\n        />\n\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Typography\n            variant='body2'\n            className={classes.subtitle}\n          >\n            {t('contactDrawerView.contactDetails')}\n          </Typography>\n          {/* internal customer number row */}\n          <DrawerRow\n            muiIcon={<FolderSharedRoundedIcon />}\n            text={internalNumber}\n            tooltip={`${t('contactDrawerEdit.internalCustomerNumber')}: ${internalNumber}`}\n          />\n          {/* firm row */}\n          <DrawerRow\n            muiIcon={<ApartmentRoundedIcon />}\n            text={organization}\n            tooltip={`${t('contactDrawerEdit.organization')}: ${organization}`}\n          />\n          {/* contactType row */}\n          <DrawerRow\n            muiIcon={<BusinessCenterIcon />}\n            text={contactType}\n            tooltip={`${t('contactDrawerEdit.contactType')}: ${contactType}`}\n          />\n          {/* email row */}\n          <DrawerRow muiIcon={<EmailIcon />}>\n            <Tooltip title={`${t('contactDrawerEdit.email')}: ${email}`} placement='bottom'>\n              <Typography variant='body2' color='inherit' style={{ wordBreak: 'break-all' }}>\n                <a href={'mailto:' + email}>\n                  {email}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n          {/* address row */}\n          <DrawerRow\n            muiIcon={<RoomIcon />}\n            text={fullAddress}\n            tooltip={`${t('contactDrawerEdit.address')}: ${fullAddress}`}\n            alignItems='flex-start'\n          />\n          {/* office phone row */}\n          <DrawerRow muiIcon={<PhoneEnabledIcon />}>\n            <Tooltip title={`${t('contactDrawerView.callOfficeNumber')}: ${officeNumber}`} placement='bottom'>\n              <Typography variant='body2' color='inherit'>\n                <a href={'tel:' + officeNumber}>\n                  {officeContact}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n          {/* mobile phone row */}\n          <DrawerRow muiIcon={<PhoneAndroidIcon />}>\n            <Tooltip title={`${t('contactDrawerView.callMobileNumber')}: ${mobileNumber}`} placement='bottom'>\n              <Typography variant='body2' color='inherit'>\n                <a href={'tel:' + mobileNumber}>\n                  {mobileNumber}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n\n          {/* sales reps row */}\n          <DrawerRow\n            muiIcon={<PeopleAltRoundedIcon />}\n            text={salesReps}\n            tooltip={`${t('contactDrawerEdit.salesRepsTitle')}: ${salesReps}`}\n            alignItems='flex-start'\n          />\n\n          {/* branchId */}\n          {\n            site === SiteName.pt && (\n              <DrawerRow\n                muiIcon={<AccountTreeIcon />}\n                text={branchId}\n                tooltip={`${t('contactDrawerEdit.branchId')}: ${branchId}`}\n              />\n            )\n          }\n\n          <DrawerRow\n            muiIcon={<LocalOfferIcon />}\n            text={pricingRegion}\n            tooltip={`${t('quoteListFilter.regionTitle')}: ${pricingRegion}`}\n            alignItems='flex-start'\n          />\n        </Grid>\n\n        <Divider />\n        {/* internal note */}\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Typography\n            variant='body2'\n            className={classes.subtitle}\n          >\n            {t('contactDrawerEdit.internalNote')}\n          </Typography>\n          <DrawerRow\n            muiIcon={<NoteIcon />}\n            alignItems='flex-start'\n          >\n            <Typography variant='body2' color='inherit' style={{ overflowWrap: 'anywhere' }}>\n              {internalNote}\n            </Typography>\n          </DrawerRow>\n        </Grid>\n        <Divider />\n\n        {/* Bill to and ship to */}\n        {\n          site === SiteName.pt && <>\n            <Divider />\n            <Grid\n              container={true}\n              direction='column'\n              className={classes.body}\n            >\n              <Typography\n                variant='body2'\n                className={classes.subtitle}\n              >\n                {t('contactDrawerEdit.billAndShipSectionTitle')}\n              </Typography>\n              <DrawerRow\n                muiIcon={<MonetizationOnIcon />}\n                alignItems='flex-start'\n              >\n                <Typography variant='body2' color='inherit' style={{ overflowWrap: 'anywhere' }}>\n                  {billTo}\n                </Typography>\n              </DrawerRow>\n              <DrawerRow\n                muiIcon={<LocalShippingIcon />}\n                alignItems='flex-start'\n              >\n                <Typography variant='body2' color='inherit' style={{ overflowWrap: 'anywhere' }}>\n                  {shipTo}\n                </Typography>\n              </DrawerRow>\n            </Grid>\n          </>\n        }\n\n        {/* user defined */}\n        {\n          site === SiteName.pt && <>\n            <Divider />\n            <Grid\n              container={true}\n              direction='column'\n              className={classes.body}\n            >\n              <Typography\n                variant='body2'\n                className={classes.subtitle}\n                style={{ wordBreak: 'break-word' }}\n              >\n                {userDefinedLabel || t('contactDrawerEdit.userDefinedLabelFallback')}\n              </Typography>\n              <DrawerRow\n                muiIcon={<LibraryAddIcon />}\n                alignItems='flex-start'\n              >\n                <Typography variant='body2' color='inherit' style={{ overflowWrap: 'anywhere' }}>\n                  {userDefined}\n                </Typography>\n              </DrawerRow>\n            </Grid>\n            <Divider />\n          </>\n        }\n\n        {/* DISCOUNTS */}\n        {site !== SiteName.spec &&\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Typography\n            variant='body2'\n            className={classes.subtitle}\n          >\n            {t('contactDrawerEdit.customerDiscount')}\n          </Typography>\n          { customerDiscounts.size > 0 && customerDiscounts.map((discount, i) => (\n            <DrawerRow\n              key={i}\n              muiIcon={i ? null : <MoneyOffRoundedIcon />}\n              alignItems='flex-start'\n              \n            >\n              <Typography variant='body2' color='inherit' style={{ width: '100%' }}>\n                {this.getManufacturerAndCategory(discount.get('manufacturer'), discount.get('category'))}\n              </Typography>\n              <Typography variant='body2' color='inherit'>\n                {this.getDiscountAndAmount(discount.get('type'), discount.get('amount'))}\n              </Typography>\n            </DrawerRow>\n          ))}\n        </Grid>\n        }\n\n        <DeleteModal\n          idToDelete={contactId}\n          open={this.state.showDeleteModal}\n          itemName={name || organization}\n          toggleDeleteModal={this.toggleDeleteModal}\n          handleDelete={() => this.deleteContact(contactId)}\n          withLoading={false}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  avatar: {\n    fontSize: '3rem',\n    width: 108,\n    height: 108,\n    margin: 0,\n    color: '#b5b5b5',\n    backgroundColor: '#e6e6e6',\n    textTransform: 'uppercase',\n  },\n  title: {\n    color: 'rgba(255, 255, 255, .6)',\n  },\n  ownerType: {\n    fontSize: '.7rem',\n    display: 'inline-block',\n    marginTop: theme.spacing(2),\n    marginBottom: theme.spacing(3),\n    padding: theme.spacing(.25, 1.5),\n    borderRadius: theme.shape.borderRadius,\n    color: 'inherit',\n    backgroundColor: theme.palette.secondary[400],\n  },\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary,\n    '& a': {\n      color: theme.palette.primary.main,\n      textDecoration: 'none',\n    },\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    marginBottom: theme.spacing(1.25),\n  },\n  ellipseEditButton: {\n    color: theme.palette.common.white,\n  }\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = state => ({\n  customerDiscounts: makeSelectCustomerDiscounts()(state),\n  site: makeSelectSite()(state),\n  contactListProps: makeSelectOverlayComponentProp(DRAWER_ID)(state),\n  userDefinedLabel: makeSelectUserDefinedLabel()(state),\n});\n\nexport default compose<React.ComponentClass<IUserContactDrawerDetailsContactProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(UserContactDrawerDetailsContact);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\n\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport UserContactDrawerDetailsContact from '../UserContactDrawerDetailsContact';\nimport UserContactDrawerDetailsContactEdit from '../UserContactDrawerDetailsContactEdit';\nimport {makeSelectContact, makeSelectDefaultCustomEmail, makeSelectShareContacts} from '../../modules/AccountModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { Contact, Option } from '../../models';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport {\n  GetDefaultCustomEmail,\n  GetDiscountsForCustomerId,\n  GetDiscountsForCustomerIdSucceeded\n} from '../../modules/AccountModule/actions';\nimport { makeSelectIsRestrictedOutsideSalesRep, makeSelectSite, makeSelectUserId, makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport { getIn, List } from 'immutable';\nimport Filter from '../../models/Filter';\nimport { SiteName } from '../../constants';\nimport { makeSelectShareContactsPricingRegions } from '../../modules/LocationModule/selectors';\nimport { GetRegionsAction } from '../../modules/LocationModule/actions';\n\ninterface IUserContactDrawerDetailsContentProps {\n  drawerId: string;\n  options?: Option<Contact>;\n  filters?: Filter;\n}\n\nexport interface IModalProps {\n  ownerType: string;\n  ownerId: number;\n}\n\ninterface IUserContactDrawerDetailsProps extends IUserContactDrawerDetailsContentProps {\n  contact?: IMap<Contact>;\n  content: string;\n  dispatch: React.Dispatch<IAction>;\n  getCustomerDiscounts(customerId: number): void;\n  modalProps: IModalProps;\n  officeId: number;\n  site: string;\n  defaultCustomEmail: IMap<{\n    data: string;\n    error: any;\n    isLoading: boolean;\n  }>\n  isRestrictedOutsideSalesRep: boolean;\n  loginUserId: number;\n  shareContacts: boolean;\n  pricingRegions: List<IMap<any>>;\n}\n\nexport const CONTENT_EDIT_KEY = '__UserContactDrawerDetailsContactEdit__';\n\ntype UserContactDrawerDetailsType = WithTranslation & IUserContactDrawerDetailsProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass UserContactDrawerDetails extends React.Component<UserContactDrawerDetailsType, {}> {\n\n  public handleClick = (contentId?: string) => () => {\n    const {\n      drawerId,\n      dispatch,\n    } = this.props;\n    dispatch(new SetOverlayComponentContentAction({\n      id: drawerId,\n      content: contentId,\n    }));\n  }\n\n  public componentDidMount = () =>{\n    const {\n      dispatch,\n      contact,\n      site,\n      pricingRegions,\n      shareContacts,\n      getCustomerDiscounts,\n    } = this.props;\n    const id = contact && contact.get('id');\n\n    if (site !== SiteName.spec && id) {\n      getCustomerDiscounts(id);\n    }\n    dispatch(new GetDefaultCustomEmail());\n\n    if (!pricingRegions.size) {\n      dispatch(new GetRegionsAction({ type: shareContacts ? 'firm' : 'office', regionType: 'P' }));\n    }\n  }\n\n  public componentDidUpdate(prevProps) {\n    const {\n      contact,\n      site,\n      getCustomerDiscounts,\n    } = this.props;\n    const id = contact && contact.get('id');\n\n    if (site !== SiteName.spec && id && id != getIn(prevProps, ['contact', 'id'], null)) {\n      getCustomerDiscounts(id);\n    }\n  }\n\n  public componentWillUnmount = () => {\n    this.props.dispatch(new GetDiscountsForCustomerIdSucceeded({ discounts: List() }));\n  }\n\n  public render() {\n    const {\n      contact,\n      content: _contentString,\n      officeId,\n      modalProps: _modalProps,\n      filters,\n      options,\n      defaultCustomEmail,\n      isRestrictedOutsideSalesRep,\n      loginUserId,\n    } = this.props;\n\n    const modalProps = {\n      ownerId: officeId,\n      ownerType: 'office',\n      ..._modalProps,\n    };\n    const content = (() => {\n      switch (_contentString) {\n        case CONTENT_EDIT_KEY: {\n          return <UserContactDrawerDetailsContactEdit\n            defaultCustomEmail={defaultCustomEmail.getIn(['data', 'defaultCustomEmail'])}\n            contactData={contact}\n            toggleHandle={this.handleClick()}\n            options={options}\n            filters={filters}\n            {...modalProps}\n          />\n        }\n        default: {\n          return <UserContactDrawerDetailsContact\n            contactData={contact}\n            editable={!(isRestrictedOutsideSalesRep && loginUserId !== contact.get('createdByUser'))}\n            deletable={(_modalProps as any)?.deletable}\n          />\n        }\n      }\n    })();\n\n    // CONTENT_EDIT_KEY\n    return <Grid>\n      {\n        content\n      }\n    </Grid>\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  }\n});\n\nconst mapStateToProps = (state, props: IUserContactDrawerDetailsContentProps) => {\n  const {\n    drawerId,\n  } = props;\n  return createStructuredSelector({\n    officeId: makeSelectUserOfficeId(),\n    modalProps: makeSelectOverlayComponentProp(drawerId),\n    contact: makeSelectContact(),\n    defaultCustomEmail: makeSelectDefaultCustomEmail(),\n    content: makeSelectOverlayComponentContent(drawerId),\n    site: makeSelectSite(),\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n    loginUserId: makeSelectUserId(),\n    shareContacts: makeSelectShareContacts(),\n    pricingRegions: makeSelectShareContactsPricingRegions(),\n  })(state);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getCustomerDiscounts: (customerId) => {\n      dispatch(new GetDiscountsForCustomerId({customerId}))\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IUserContactDrawerDetailsContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(UserContactDrawerDetails);\n","/*\n *\n * ThemeProvider\n *\n * this component connects the redux state language locale to the\n * MuiThemeProvider component and i18n messages (loaded from `app/translations`)\n */\nimport * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {connect} from 'react-redux';\nimport selectors, { makeSelectTheme } from '../../modules/ThemeModule/selectors';\nimport actions from '../../modules/ThemeModule/actions';\nimport constants from '../../modules/ThemeModule/constants';\nexport {\n  selectors,\n  actions,\n  constants,\n};\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  MuiThemeProvider,\n  createMuiTheme,\n} from '@material-ui/core/styles';\nimport {\n  ThemeProvider as MuiStylesThemeProvider,\n} from '@material-ui/styles';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\ninterface IIndexSignature {\n  [propName: string]: any;\n}\ninterface IThemeProviderComponentProps {\n  defaultTheme?: object;\n  children?: any;\n}\ninterface IThemeProviderProps extends IThemeProviderComponentProps {\n  theme?: IIndexSignature;\n  forcedTheme?: IIndexSignature;\n  dispatch?: Dispatch<IAction>;\n}\ntype ThemeProviderProps = IThemeProviderProps;\nclass ThemeProvider extends React.PureComponent<ThemeProviderProps> { // eslint-disable-line react/prefer-stateless-function\n  public render() {\n    const {\n      theme,\n      forcedTheme,\n      defaultTheme,\n      children,\n    } = this.props;\n    const muiTheme = createMuiTheme(forcedTheme || theme || defaultTheme);\n    console.debug('createTheme', { // tslint:disable-line\n      muiTheme,\n      theme,\n      defaultTheme,\n    });\n    return (\n      <MuiStylesThemeProvider theme={muiTheme}>\n        <MuiThemeProvider theme={muiTheme}>\n          {React.Children.only(children)}\n        </MuiThemeProvider>\n      </MuiStylesThemeProvider>\n    );\n  }\n}\nconst mapStateToProps = createStructuredSelector({\n  theme: makeSelectTheme(),\n});\nfunction mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\nexport default compose<React.ComponentClass<IThemeProviderProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n)(ThemeProvider);","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n *   if (isGreeting(objValue) && isGreeting(othValue)) {\n *     return true;\n *   }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  var result = customizer ? customizer(value, other) : undefined;\n  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nmodule.exports = isEqualWith;\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IDebugReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added DebugModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectDebugState = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IDebugReducerState>) => state.get('debug'),\n);\n\nexport default {\n  selectReducerState,\n};\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  makeSelectSelectedProjectId,\n  makeSelectProject,\n  makeSelectSelectedMasterProjectId,\n  makeSelectMaster, makeSelectSelectedTemplateProjectId, makeSelectTemplate,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  getIn,\n} from 'immutable';\nimport {\n  GetProjectsAction, GetMasterProjectsAction, GetTemplateProjectsAction,\n} from '../../modules/ProjectModule/actions';\nimport {\n  Project,\n} from '../../models';\nimport {\n  IMap,\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  RouteComponentProps,\n} from 'react-router-dom';\nimport {\n  generatePath,\n} from 'react-router';\nimport {\n  replace,\n} from 'connected-react-router';\nimport { PROJECT_TYPE } from '../../constants';\nimport { IRouterReducerLocation, makeSelectLocation } from '../../modules/RouterModule/selectors';\n\nexport type WithProjectId = {\n  projectId: number;\n  selectedId: number;\n  controlledId?: number;\n  isControlled: boolean;\n  project?: IMap<Project>;\n  getProjects: ({projectId, initialSelectedSpecId, onFailed}: {projectId?: number, initialSelectedSpecId?: number, onFailed?: () => void}) => void;\n  getMasterProjects: (projectId?: number) => void;\n  getTemplateProjects: (projectId?: number) => void;\n  dispatch: Dispatch<AnyAction>;\n  projectType: string;\n  location?: IMap<IRouterReducerLocation>;\n}\n\nexport type WithProjectIdOptions = {\n  withProject?: boolean;\n  redirectToControlled?: boolean;\n  onGetProjectFailed?: ({ dispatch } : { dispatch: Dispatch<AnyAction> }) => void;\n}\n\nexport type ComponentProps = {\n  projectId?: number;\n} & Partial<RouteComponentProps>;\n\nconst withProjectId = ({\n  withProject,\n  redirectToControlled,\n  onGetProjectFailed,\n}: WithProjectIdOptions = {}) => <T extends React.Component, OriginalProps extends {}>(Component: React.ComponentClass<OriginalProps> | React.FC<OriginalProps>) => {\n\n  type PrivateProps = {\n    forwardedRef: React.RefObject<T>;\n  };\n\n  type Props = OriginalProps & PrivateProps & ComponentProps;\n\n  class WithProjectIdInner extends React.Component<Props & WithProjectId> {\n\n    // this is only used to get data for controlled project id\n    // we assume that if we're using selected project id, the data already exists\n    public getData(id?: number, type?: string) {\n      const {\n        getProjects,\n        getMasterProjects,\n        getTemplateProjects,\n        dispatch,\n        projectType,\n        location,\n      } = this.props;\n\n      // componentWillUpdate needs to use nextProps project type or it'll default to 'project'\n      if (type) {\n        if ((id != null && id !== -1)) {\n          if (type === PROJECT_TYPE.templateProject) {\n            getTemplateProjects(id);\n          } else if (type === PROJECT_TYPE.masterProject) {\n            getMasterProjects(id);\n          } else {\n            if (location?.getIn(['state', 'initialSelectedSpecId'])) {\n              getProjects({\n                projectId: id,\n                initialSelectedSpecId: location?.getIn(['state', 'initialSelectedSpecId']),\n                onFailed: onGetProjectFailed ? () => onGetProjectFailed({ dispatch }) : undefined,\n              });\n            } else {\n              getProjects({\n                projectId: id,\n                onFailed: onGetProjectFailed ? () => onGetProjectFailed({ dispatch }) : undefined,\n              });\n            }\n          }\n        }\n        return;\n      }\n\n      // only get data for projects if we have a controlled id ( e.g. not null )\n      // null id passed to getProjects will get *all* projects - we want to be explicit with this\n      if ((id != null && id !== -1)) {\n        if (projectType === PROJECT_TYPE.masterProject) {\n          getMasterProjects(id);\n        } else if (projectType === PROJECT_TYPE.templateProject){\n          getTemplateProjects(id);\n        } else {\n          if (location?.getIn(['state', 'initialSelectedSpecId'])) {\n            getProjects({\n              projectId: id,\n              initialSelectedSpecId: location?.getIn(['state', 'initialSelectedSpecId']),\n              onFailed: onGetProjectFailed ? () => onGetProjectFailed({ dispatch }) : undefined,\n            });\n          } else {\n            getProjects({\n              projectId: id,\n              onFailed: onGetProjectFailed ? () => onGetProjectFailed({ dispatch }) : undefined,\n            });\n          }\n        }\n      }\n    }\n\n    public redirectToControlled(nextId?: number) {\n      const {\n        controlledId,\n        match,\n        projectId: _projectId,\n        dispatch,\n      } = this.props;\n\n      const projectId = nextId != null ? nextId : _projectId;\n      if (controlledId != null || projectId === -1) {\n        return;\n      }\n      if (match == null) {\n        console.debug(`When using redirectToControlled option, match must not be null`, { match });\n        return;\n      }\n      if (!match.params.hasOwnProperty('projectId')) {\n        console.debug(`When using redirectToControlled option, path [${match.path}] must contain projectId parameter`);\n        return;\n      }\n\n      const redirectPath = generatePath(match.path, { ...match.params, projectId })\n      dispatch(replace(redirectPath));\n    }\n  \n    public componentDidMount() {\n      const {\n        controlledId,\n      } = this.props;\n      if (redirectToControlled) {\n        this.redirectToControlled();\n      }\n      this.getData(controlledId);\n    }\n  \n    public componentWillUpdate(nextProps: any, nextState: any) {\n      const {\n        controlledId: nextControlledId,\n        projectId: nextProjectId,\n        projectType: nextProjectType\n      } = nextProps;\n  \n      const {\n        controlledId,\n      } = this.props;\n  \n      if (controlledId !== nextControlledId) {\n        if (redirectToControlled) {\n          this.redirectToControlled(nextProjectId);\n        }\n        this.getData(nextControlledId, nextProjectType);\n      }\n    }\n\n    public render() {\n      const {\n        forwardedRef,\n        ...restPropsTmp\n      } = this.props as PrivateProps;\n\n      const rest = restPropsTmp as OriginalProps;\n  \n      return (\n        <Component\n          ref={forwardedRef as React.RefObject<any>}\n          {...rest} \n        />\n      );\n    }\n  }\n\n  const mapStateToProps = (state: any, props: ComponentProps) => {\n    const {\n      match,\n      projectId: originalId, // passed in to component\n    } = props;\n    // if (match == null) {\n    //   console.error('Missing match, component must either be used in <Route /> or be provided match prop using createMatchSelector', { // tslint:disable-line\n    //     match,\n    //   });\n    // }\n    const paramsIdMaster = getIn(match, ['params', 'masterId'], undefined); // from path / router\n    const paramsIdProject = getIn(match, ['params', 'projectId'], undefined); // from path / route\n    const paramsIdTemplate = getIn(match, ['params', 'templateId'], undefined); // from path / route\n    const paramsId = paramsIdMaster || paramsIdProject || paramsIdTemplate;\n    let projectType;\n    if (paramsIdMaster) {\n      projectType = PROJECT_TYPE.masterProject;\n    } else if (paramsIdTemplate) {\n      projectType = PROJECT_TYPE.templateProject;\n    } else {\n      projectType = PROJECT_TYPE.project;\n    }\n    let selectedId;\n    if (projectType === PROJECT_TYPE.masterProject) {\n      selectedId = makeSelectSelectedMasterProjectId()(state);\n    } else if (projectType === PROJECT_TYPE.templateProject) {\n      selectedId = makeSelectSelectedTemplateProjectId()(state);\n    } else {\n      selectedId = makeSelectSelectedProjectId()(state)\n    }\n\n    const controlledId = originalId != null // passed in to component OR from path\n      ? originalId\n      : paramsId != null\n        ? parseInt(paramsId, 10)\n        : undefined;\n    const isControlled = controlledId != null; // if it was from component OR from path\n    const projectId = controlledId != null // controlled OR selected from state\n      ? controlledId\n      : selectedId;\n    let project = null;\n    if (withProject) {\n      if (projectType === PROJECT_TYPE.masterProject) {\n        project = makeSelectMaster({ projectId })(state);\n      } else if (projectType === PROJECT_TYPE.templateProject) {\n        project = makeSelectTemplate({ projectId })(state);\n      } else {\n        project = makeSelectProject({ projectId })(state)\n      }\n    }\n\n    return {\n      selectedId,\n      controlledId,\n      isControlled,\n      projectId,\n      project,\n      projectType,\n      location: makeSelectLocation()(state),\n    }\n  };\n  \n  const mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n    return {\n      getProjects: ({projectId, initialSelectedSpecId, onFailed}: {projectId: number, initialSelectedSpecId?: number, onFailed?: () => void}) => {\n        dispatch(new GetProjectsAction({projectId, initialSelectedSpecId, onFailed}));\n      },\n      getMasterProjects: (projectId: number) => {\n        dispatch(new GetMasterProjectsAction(projectId));\n      },\n      getTemplateProjects: (projectId: number) => {\n        dispatch(new GetTemplateProjectsAction(projectId));\n      },\n      dispatch\n    };\n  };\n\n  const WrappedWithProjectIdInner = compose<React.ComponentClass<any>>(\n    connect(mapStateToProps, mapDispatchToProps),\n  )(WithProjectIdInner);    \n\n  const RefForwardingFactory = (props: Props, ref: T) => {\n    return <WrappedWithProjectIdInner {...props} forwardedRef={ref} />\n  };\n\n  const WithProjectId = React.forwardRef<T, OriginalProps>(RefForwardingFactory as any);\n  return WithProjectId;\n}\n\nexport default withProjectId;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM9.29 16.29L5.7 12.7a.9959.9959 0 010-1.41c.39-.39 1.02-.39 1.41 0L10 14.17l6.88-6.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-7.59 7.59c-.38.39-1.02.39-1.41 0z\"\n}), 'CheckCircleRounded');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  compose\n} from 'redux';\n\nimport {\n  TableCell,\n  Button, Tooltip,\n} from '@material-ui/core';\nimport DeleteModal from '../../DeleteModalDialog';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport NestedMenu from '../../NestedMenu';\nimport { IMenuItem } from '../../NestedMenu/atsMenu';\n\ninterface IActionButtonProps {\n  id: number;\n  name: string;\n  menuItems: IMenuItem[];\n  deleteMenuItem: IMenuItem;\n  deleteItem: () => void;\n  ActionButtonContainer?: React.FC<{}>;\n  withLoading?: boolean;\n  disabled?: boolean;\n  tooltip?: string;\n}\n\nconst DefaultActionButtonContainer: React.FC = ({children}) => (\n  <TableCell\n    style={{\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n    }}\n  >\n    {children}\n  </TableCell>\n);\n\ntype ActionButtonProps = IActionButtonProps & WithTranslation;\n\nconst ActionButton: React.FC<ActionButtonProps> = (props) => {\n  const {\n    id,\n    name,\n    menuItems,\n    deleteMenuItem,\n    deleteItem,\n    ActionButtonContainer = DefaultActionButtonContainer,\n    withLoading,\n    disabled = false,\n    tooltip = '',\n  } = props;\n\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [showDeleteModal, setShowDeleteModal] = React.useState(false);\n  const [menuItemsState, setMenuItemsState] = React.useState([]);\n\n  React.useEffect(() => {\n    if (deleteMenuItem) {\n      deleteMenuItem.onClick = () => toggleDeleteModal();\n      menuItems.push(deleteMenuItem);\n    }\n    setMenuItemsState(menuItems);\n  }, [menuItems]);\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const handleOpen = (e: React.MouseEvent<HTMLButtonElement>) => {\n    setAnchorEl(e.currentTarget);\n  };\n\n  const handleDelete = (idToDelete: number) => {\n    deleteItem();\n    toggleDeleteModal();\n  };\n\n  const toggleDeleteModal = () => {\n    setShowDeleteModal(!showDeleteModal);\n  };\n\n  return (\n    <ActionButtonContainer>\n      <Tooltip title={tooltip}>\n        <span>\n          <Button\n              color='primary'\n              onClick={handleOpen}\n              disabled={disabled}\n          >\n          ACTION\n        </Button>\n        </span>\n      </Tooltip>\n      <NestedMenu\n        anchorEl={anchorEl}\n        open={Boolean(anchorEl)}\n        onClose={handleClose}\n        menuItems={menuItemsState}\n      />\n      <DeleteModal\n        idToDelete={id}\n        open={showDeleteModal}\n        itemName={name}\n        toggleDeleteModal={toggleDeleteModal}\n        handleDelete={handleDelete}\n        withLoading={withLoading}\n      />\n    </ActionButtonContainer>\n  );\n};\n\nexport default compose<React.ComponentClass<IActionButtonProps>>(\n  withTranslation('translations'),\n)(ActionButton);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\n\nexports.default = _default;","import * as React from 'react';\nimport { VariableSizeList } from 'react-window';\n// import { List } from \"react-virtualized\";\n\nconst Row = ({ data, index, style }) => {\n  const elem = data[index];\n  return (\n    <div style={style}>\n      <React.Fragment>{elem}</React.Fragment>\n    </div>\n  );\n};\n\nconst useResetCache = (data: any) => {\n  const ref = React.useRef<VariableSizeList>(null);\n  React.useEffect(() => {\n    if (ref.current !== null) {\n      ref.current.resetAfterIndex(0, true);\n    }\n  }, [data]);\n  return ref;\n};\n\nconst OuterElementContext = React.createContext({});\n\nconst OuterElementType = React.forwardRef<HTMLDivElement>((props, ref) => {\n  const outerProps = React.useContext(OuterElementContext);\n  return <div ref={ref} {...props} {...outerProps} />;\n});\n\nexport const VirtualizedList = React.forwardRef((props: any, ref: any) => {\n  const itemCount = props.children.length;\n  const gridRef = useResetCache(itemCount);\n  const outerProps = { ...props };\n  delete outerProps.children;\n  return (\n    <div ref={ref}>\n      <OuterElementContext.Provider value={outerProps}>\n        <VariableSizeList\n          ref={gridRef}\n          outerElementType={OuterElementType}\n          className='list'\n          height={itemCount < 8 ? (30 * itemCount) + 30 : 260}\n          itemCount={itemCount}\n          itemSize={() => props.rowheight}\n          overscanCount={5}\n          itemData={{ ...props.children }}\n        >\n          {Row}\n        </VariableSizeList>\n      </OuterElementContext.Provider>\n    </div>\n  );\n});\n\n// export const ListboxComponent = React.forwardRef(function ListboxComponent(\n//   props,\n//   ref: any\n// ) {\n//   const { children, ...other } = props;\n//   const itemCount = Array.isArray(children) ? children.length : 0;\n//   const itemSize = 36;\n\n//   return (\n//     <div ref={ref}>\n//       <div {...other}>\n//         <List\n//           height={250}\n//           width={612}\n//           rowHeight={itemSize}\n//           overscanCount={5}\n//           rowCount={itemCount}\n//           rowRenderer={props => {\n//             return React.cloneElement(children[props.index], {\n//               style: props.style\n//             });\n//           }}\n//         />\n//       </div>\n//     </div>\n//   );\n// });","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z\"\n}), 'Language');\n\nexports.default = _default;","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n  // eslint-disable-next-line deprecation/deprecation\n  const timing = WINDOW.performance.timing;\n  // eslint-disable-next-line deprecation/deprecation\n  const type = WINDOW.performance.navigation.type;\n\n  const navigationEntry: { [key: string]: number | string } = {\n    entryType: 'navigation',\n    startTime: 0,\n    type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n  };\n\n  for (const key in timing) {\n    if (key !== 'navigationStart' && key !== 'toJSON') {\n      // eslint-disable-next-line deprecation/deprecation\n      navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n    }\n  }\n  return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n  if (WINDOW.__WEB_VITALS_POLYFILL__) {\n    return (\n      WINDOW.performance &&\n      ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n        getNavigationEntryFromPerformanceTiming())\n    );\n  } else {\n    return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n  }\n};\n","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'project';","import {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List,\n} from 'immutable';\nimport HasId from '../HasId';\nimport User from '../User';\nimport Criteria, { CriteriaStatus } from '../Criteria';\n\nexport class Tags {\n  public user: List<IMap<User>>;\n}\n\nexport enum TagEntityType {\n  USER = 'user',\n  PROJECT = 'project',\n  SPEC = 'spec',\n}\n\nexport class TagEntity {\n  public taskId: number;\n  public type: TagEntityType;\n  public typeId: number;\n}\n\nexport default class Task extends HasId {\n  public id: number;\n  public completeDate?: string;\n  public completionDueDate?: string;\n  public createdDate?: string;\n  public criteria?: IMap<Criteria>;\n  public tag?: IMap<Tags>;\n  public task?: string;\n  public taskFrom?: IMap<{\n    id: string;\n    first_name: string;\n    last_name: string;\n  }>;\n  public taskToId?: number;\n  public taskToType?: string;\n  public taskStatus?: CriteriaStatus;\n  public status: string;\n\n  public constructor(init?: Partial<Task> & HasId) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'application';","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'spec';","import createMuiTheme from './createMuiTheme';\nvar defaultTheme = createMuiTheme();\nexport default defaultTheme;","import ownerDocument from './ownerDocument';\nexport default function ownerWindow(node) {\n  var doc = ownerDocument(node);\n  return doc.defaultView || window;\n}","// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nvar hadKeyboardEvent = true;\nvar hadFocusVisibleRecently = false;\nvar hadFocusVisibleRecentlyTimeout = null;\nvar inputTypesWhitelist = {\n  text: true,\n  search: true,\n  url: true,\n  tel: true,\n  email: true,\n  password: true,\n  number: true,\n  date: true,\n  month: true,\n  week: true,\n  time: true,\n  datetime: true,\n  'datetime-local': true\n};\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @return {boolean}\n */\n\nfunction focusTriggersKeyboardModality(node) {\n  var type = node.type,\n      tagName = node.tagName;\n\n  if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n    return true;\n  }\n\n  if (tagName === 'TEXTAREA' && !node.readOnly) {\n    return true;\n  }\n\n  if (node.isContentEditable) {\n    return true;\n  }\n\n  return false;\n}\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\n\n\nfunction handleKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n\n  hadKeyboardEvent = true;\n}\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\n\n\nfunction handlePointerDown() {\n  hadKeyboardEvent = false;\n}\n\nfunction handleVisibilityChange() {\n  if (this.visibilityState === 'hidden') {\n    // If the tab becomes active again, the browser will handle calling focus\n    // on the element (Safari actually calls it twice).\n    // If this tab change caused a blur on an element with focus-visible,\n    // re-apply the class when the user switches back to the tab.\n    if (hadFocusVisibleRecently) {\n      hadKeyboardEvent = true;\n    }\n  }\n}\n\nfunction prepare(doc) {\n  doc.addEventListener('keydown', handleKeyDown, true);\n  doc.addEventListener('mousedown', handlePointerDown, true);\n  doc.addEventListener('pointerdown', handlePointerDown, true);\n  doc.addEventListener('touchstart', handlePointerDown, true);\n  doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nexport function teardown(doc) {\n  doc.removeEventListener('keydown', handleKeyDown, true);\n  doc.removeEventListener('mousedown', handlePointerDown, true);\n  doc.removeEventListener('pointerdown', handlePointerDown, true);\n  doc.removeEventListener('touchstart', handlePointerDown, true);\n  doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\n\nfunction isFocusVisible(event) {\n  var target = event.target;\n\n  try {\n    return target.matches(':focus-visible');\n  } catch (error) {} // browsers not implementing :focus-visible will throw a SyntaxError\n  // we use our own heuristic for those browsers\n  // rethrow might be better if it's not the expected error but do we really\n  // want to crash if focus-visible malfunctioned?\n  // no need for validFocusTarget check. the user does that by attaching it to\n  // focusable events only\n\n\n  return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\n/**\n * Should be called if a blur event is fired on a focus-visible element\n */\n\n\nfunction handleBlurVisible() {\n  // To detect a tab/window switch, we look for a blur event followed\n  // rapidly by a visibility change.\n  // If we don't see a visibility change within 100ms, it's probably a\n  // regular focus change.\n  hadFocusVisibleRecently = true;\n  window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n  hadFocusVisibleRecentlyTimeout = window.setTimeout(function () {\n    hadFocusVisibleRecently = false;\n  }, 100);\n}\n\nexport function useIsFocusVisible() {\n  var ref = React.useCallback(function (instance) {\n    var node = ReactDOM.findDOMNode(instance);\n\n    if (node != null) {\n      prepare(node.ownerDocument);\n    }\n  }, []);\n  return {\n    isFocusVisible: isFocusVisible,\n    onBlurVisible: handleBlurVisible,\n    ref: ref\n  };\n}","import * as uuid from 'uuid/v1';\n\nexport const uniqueId = uuid;\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'location';\n","// A Customized MenuItem Component based on Material UI MenuItem\nimport * as React from 'react';\nimport { ButtonProps, MenuItem } from '@material-ui/core';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n} from '@material-ui/core/styles';\nimport { STYLE_WIDGET_MARGIN } from '../../modules/DashboardModule/constants';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { withForwardedRef } from '../../hoc';\nimport { Link } from 'react-router-dom';\nimport { compose } from 'redux';\nimport { MenuItemProps as MenuItemPropsType } from '@material-ui/core/MenuItem';\nimport { IHref } from '../../utils/generateLinkParams';\n\n// @@TODO strip off styles once get rid of all FA Icons\nconst styles = (theme): StyleRules => ({\n  spacing: {\n    marginRight: (theme.spacing(4)) + STYLE_WIDGET_MARGIN,\n  },\n});\n\ninterface IWidgetMenuItemComponentProps<D extends React.ElementType , P extends { button?: true }> {\n  href?: string | IHref;\n  to?: string;\n  iconName?: IconProp;\n  materialIcon?: JSX.Element;\n  MenuItemProps?: MenuItemPropsType<D, P> | ButtonProps;\n  onClick?(evt: React.MouseEvent): void;\n  onMouseUp?(evt: React.MouseEvent): void;\n}\ninterface IWidgetMenuItemProps<D extends React.ElementType , P extends { button?: true }> extends IWidgetMenuItemComponentProps<D, P> {\n}\n\ntype WidgetMenuType<D extends React.ElementType , P extends { button?: true }> = IWidgetMenuItemProps<D, P> & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst WidgetMenuItem: React.FC<WidgetMenuType<'li', {button?: true}>> = <D extends React.ElementType = 'li', P extends { button?: true } = {}>(props) => {\n  const {\n    classes,\n    iconName,\n    children,\n    href,\n    to,\n    onClick,\n    onMouseUp,\n    MenuItemProps,\n    materialIcon,\n    forwardedRef,\n  } = props;\n\n  let linkProps = {};\n\n  // based on props, decide which root node to use for material ui MenuItem\n  if (href) {\n    linkProps = {\n      component: 'a',\n      href,\n      target: '_top',\n    };\n  }\n  if (to) {\n    linkProps = {\n      component: Link,\n      to,\n    };\n  }\n  if (onClick) {\n    linkProps = {\n      onClick,\n    };\n  }\n\n  return (\n    <MenuItem\n      ref={forwardedRef}\n      {...linkProps}\n      {...MenuItemProps}\n      {...(onMouseUp && {onMouseUp})}\n    >\n      {iconName && <FontAwesomeIcon\n        className={classes.spacing}\n        icon={iconName}\n      />}\n      {materialIcon}\n      {children}\n    </MenuItem>\n  );\n};\n\nexport default compose<React.ComponentClass<IWidgetMenuItemComponentProps<'li', {}>>>(\n  withForwardedRef(),\n  withStyles(styles),\n)(WidgetMenuItem);\n","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'task';\n","import {\n  Map\n} from 'immutable';\n\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport {\n  parseDate,\n  isValidDate,\n} from 'ats-utils/src';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\nimport { Validator } from 'redux-form';\n\nexport const defaultConfig = Map({\n  label: 'Date'\n});\n\nlet cachedValidate = Map<any, Validator>();\n\nexport const validate = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidate.has(validatorKey)) {\n    cachedValidate = cachedValidate.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label');\n\n        const required = config.get('required');\n\n        const parsedDate = parseDate(value, false);\n\n        if (parsedDate == null) {\n          if (required) {\n            return `${label} is required`;\n          }\n        } else {\n          const min = parseDate(config.get('min'), false);\n\n          if (isValidDate(min) && parsedDate < min) {\n            return `${label} can't be earlier than ${config.get('min')}`;\n          }\n\n          const max = parseDate(config.get('max'), false);\n\n          if (isValidDate(max) && parsedDate > max) {\n            return `${label} can't be later than ${config.get('max')}`;\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidate.get(validatorKey);\n};\n\nexport default validate;\n","\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'projectLocation';","import _ from 'lodash';\nimport { Map } from 'immutable';\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport { Validator } from 'redux-form';\nimport { TableColumnConfig } from '../../../models';\nimport { IMap } from 'ats-utils/src';\n\nexport const defaultConfig = Map({\n  label: 'Number'\n});\nlet cachedValidateAmount = Map<any, Validator>();\n\nexport const validateAmount = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidateAmount.has(validatorKey)) {\n    cachedValidateAmount = cachedValidateAmount.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n\n        const label = config.get('label');\n        const numberValue = _.toNumber(value);\n\n        if (value === '' || value == null) {\n          if (config.get('required')) {\n            return `${label} is required`;\n          }\n        } else {\n          if (!_.isNumber(numberValue) || _.isNaN(numberValue)) {\n            return `${value} is not a number`;\n          }\n          const min = _.toNumber(config.get('min'));\n\n          if (_.isNumber(min) && !_.isNaN(min) && numberValue < min) {\n            return `${label} can't be less than ${min}`;\n          }\n          const max = _.toNumber(config.get('max'));\n\n          if (_.isNumber(max) && !_.isNaN(min) && numberValue > max) {\n            return `${label} can't be greater than ${max}`;\n          }\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidateAmount.get(validatorKey);\n};\n\nexport default validateAmount;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\"\n}), 'Room');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Grid,\n  StyleRules,\n  Theme,\n  Tooltip,\n  Typography,\n  WithStyles,\n  WithTheme,\n} from '@material-ui/core';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\nimport { withStyles } from '@material-ui/styles';\nimport {makeSelectAppId, makeSelectUserFirmId} from '../../modules/AtsModule/selectors';\nimport { makeSelectUserFirmCompanyAltName, makeSelectUserFirmCompanyName } from '../../modules/AccountModule/selectors';\nimport { GetFirmsAction } from '../../modules/AccountModule/actions';\nimport BuildIcon from '@material-ui/icons/Build';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport AttachMoneyIcon from '@material-ui/icons/AttachMoney';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport BrushIcon from '@material-ui/icons/Brush';\nimport StarIcon from '@material-ui/icons/Star';\nimport {BEMIS_XREF_ID, CROSS_TYPE_NAMES} from '../../constants';\nimport i18next from 'i18next';\nimport { ListItem } from '../../models';\nimport { makeSelectXrefTypes } from '../../modules/ListModule/selectors';\nimport { GetXrefTypesAction } from '../../modules/ListModule/actions';\n\nexport interface IDetailCrossTypes {\n  type: string;\n  icon: JSX.Element;\n  tooltip: (firmName?: string) => string;\n  descriptionTooltip: (firmName?: string) => string;\n}\n\nexport const crossTypes: IDetailCrossTypes[] = [\n  {\n    type: CROSS_TYPE_NAMES.firm,\n    icon: <StarIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => `${firmName} ${i18next.t('translations:crossReferenceTypes.firm')}`,\n    descriptionTooltip: (firmName?: string) => `${firmName} ${i18next.t('translations:crossReferenceTypes.firmTooltip')}`\n  },\n  {\n    type: CROSS_TYPE_NAMES.recommended,\n    icon: <ThumbUpIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.recommended'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.recommendedTooltip')\n  },\n  {\n    type: CROSS_TYPE_NAMES.function,\n    icon: <BuildIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.function'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.functionTooltip')\n  },\n  {\n    type: CROSS_TYPE_NAMES.value,\n    icon: <AttachMoneyIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.value'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.valueTooltip')\n  },\n  {\n    type: CROSS_TYPE_NAMES.finish,\n    icon: <BrushIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.finish'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.finishTooltip')\n  },\n  {\n    type: CROSS_TYPE_NAMES.closestMatch,\n    icon: <ShuffleIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.closestMatch'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.closestMatchTooltip')\n  },\n  {\n    type: CROSS_TYPE_NAMES.aesthetics,\n    icon: <VisibilityIcon color='action' fontSize='small' />,\n    tooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.aesthetics'),\n    descriptionTooltip: (firmName?: string) => i18next.t('translations:crossReferenceTypes.aestheticsTooltip')\n  }\n];\n\ninterface ICrossReferenceTypesInfoPopupComponentProps {\n  children: JSX.Element;\n  direction?: 'left' | 'right';\n}\n\ninterface ICrossReferenceTypesInfoPopupProps extends ICrossReferenceTypesInfoPopupComponentProps {\n  userFirmId: number;\n  companyName: string;\n  companyAltName: string;\n  xrefTypes: List<IMap<ListItem>>;\n  getFirm: (firmId: number) => void;\n  getXrefTypes: () => void;\n  appId: string;\n}\n\ntype CrossReferenceTypesInfoPopupProps = ICrossReferenceTypesInfoPopupProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nconst styles = (theme: Theme): StyleRules => ({\n  tooltip: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[2]\n  },\n  arrow: {\n    fontSize: 20,\n    color: theme.palette.common.white,\n    overflow: 'hidden',\n    top: `54px !important`,\n    '&::before': {\n      boxShadow: theme.shadows[2],\n      backgroundColor: 'currentColor',\n      transform: 'rotate(45deg)',\n      'transform-origin': '100% 100%',\n    }\n  },\n  altArrow: {\n    fontSize: 20,\n    color: theme.palette.common.white,\n    overflow: 'hidden',\n    top: `54px !important`,\n    '&::before': {\n      boxShadow: theme.shadows[2],\n      backgroundColor: 'currentColor',\n      transform: 'rotate(45deg)',\n      'transform-origin': '0% 0%',\n    }\n  },\n  popper: {\n    left: `${theme.spacing()}px !important`\n  },\n  typesContainer: {\n    padding: theme.spacing(0.5)\n  },\n  typeContainer: {\n    margin: theme.spacing(0.25, 0)\n  },\n  typesTitle: {\n    fontWeight: 'bold',\n    marginBottom: theme.spacing()\n  },\n  paddingLeft: {\n    paddingLeft: theme.spacing(),\n  }\n});\n\nconst CrossReferenceTypesInfoPopup: React.FC<CrossReferenceTypesInfoPopupProps> = ({\n  t,\n  classes,\n  direction,\n  userFirmId,\n  companyName,\n  companyAltName,\n  xrefTypes,\n  children,\n  getFirm,\n  getXrefTypes,\n  appId\n}) => {\n\n  React.useEffect(() => {\n    if (userFirmId && userFirmId !== -1) {\n      getFirm(userFirmId);\n    }\n    getXrefTypes();\n  }, []);\n\n  const _companyName = companyAltName || companyName || '';\n  const isBemis = appId === BEMIS_XREF_ID;\n  return (\n    <Grid>\n      <Tooltip\n        arrow={true}\n        interactive={true}\n        placement={direction || 'right'}\n        classes={{\n          tooltip: classes.tooltip,\n          arrow: direction === 'left' ? classes.altArrow : classes.arrow,\n          popper: classes.popper\n        }}\n        title={(\n          <Grid className={classes.typesContainer}>\n            <Typography variant='h5' color='textPrimary' className={classes.typesTitle}>\n              {isBemis ? t('CrossReference.crossReferenceTypesAlt') : t('CrossReference.crossReferenceTypes')}\n            </Typography>\n            <Grid container={true} className={classes.typeContainer}>\n              {\n                xrefTypes && xrefTypes.map(xrefType => {\n                  const value = xrefType.get('value');\n                  const found = crossTypes.find(({ type }) => type === value);\n\n                  if (!found) {\n                    return;\n                  }\n\n                  return (\n                    <Grid container={true} className={classes.typeContainer} key={value}>\n                      {found.icon}\n                      <Typography variant='h6' color='textPrimary' className={classes.paddingLeft}>\n                        {value === CROSS_TYPE_NAMES.firm ? found.tooltip(_companyName) : found.tooltip()}\n                      </Typography>\n                    </Grid>\n                  );\n                })\n              }\n            </Grid>\n          </Grid>\n        )}\n      >\n        { children }\n      </Tooltip>\n    </Grid>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectUserFirmId = makeSelectUserFirmId();\n  const selectCompanyName = makeSelectUserFirmCompanyName();\n  const selectCompanyAltName = makeSelectUserFirmCompanyAltName();\n  const selectXrefTypes = makeSelectXrefTypes();\n  const selectAppId = makeSelectAppId();\n  return function mapStateToProps(state) {\n    return ({\n      userFirmId: selectUserFirmId(state),\n      companyName: selectCompanyName(state),\n      companyAltName: selectCompanyAltName(state),\n      xrefTypes: selectXrefTypes(state),\n      appId: selectAppId(state),\n    });\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getXrefTypes: () => {\n      dispatch(new GetXrefTypesAction());\n    },\n    getFirm: (firmId: number) => {\n      dispatch(new GetFirmsAction(firmId));\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<ICrossReferenceTypesInfoPopupComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles, { withTheme: true }),\n  connect(makeMapStateToProps, mapDispatchToProps),\n)(CrossReferenceTypesInfoPopup);","var _style, _desc, _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLoadingFile(_ref, svgRef) {\n  var title = _ref.title,\n      titleId = _ref.titleId,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: \"500px\",\n    height: \"350px\",\n    viewBox: \"0 0 500 350\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \"\\n@keyframes page-3rd_t { 0% { transform: translate(190.703003px,146px); } 36.8421% { transform: translate(190.703003px,146px); } 52.6315% { transform: translate(190.703003px,131.70628px); } 100% { transform: translate(190.703003px,131.70628px); } }\\n@keyframes page-2nd_t { 0% { transform: translate(203px,175px); } 28.9473% { transform: translate(203px,175px); } 44.7368% { transform: translate(203px,145.499554px); } 100% { transform: translate(203px,145.499554px); } }\\n@keyframes page-top_t { 0% { transform: translate(215px,124px); } 18.421% { transform: translate(215px,124px); } 34.2105% { transform: translate(215px,77.21px); } 100% { transform: translate(215px,77.21px); } }\\n@keyframes text-4_t { 0% { transform: translate(228px,189.193549px) scale(0,1) translate(-228px,-171.194px); } 89.4736% { transform: translate(228px,189.193549px) scale(0,1) translate(-228px,-171.194px); } 100% { transform: translate(228px,189.193549px) scale(1,1) translate(-228px,-171.194px); } }\\n@keyframes text-3_t { 0% { transform: translate(228px,174.903px) scale(0,1) translate(-228px,-156.903px); } 78.9473% { transform: translate(228px,174.903px) scale(0,1) translate(-228px,-156.903px); } 89.4736% { transform: translate(228px,174.903px) scale(1,1) translate(-228px,-156.903px); } 100% { transform: translate(228px,174.903px) scale(1,1) translate(-228px,-156.903px); } }\\n@keyframes text-2_t { 0% { transform: translate(228px,159.548px) scale(0,1) translate(-228px,-141.548px); } 68.421% { transform: translate(228px,159.548px) scale(0,1) translate(-228px,-141.548px); } 78.9473% { transform: translate(228px,159.548px) scale(1,1) translate(-228px,-141.548px); } 100% { transform: translate(228px,159.548px) scale(1,1) translate(-228px,-141.548px); } }\\n@keyframes text-1_t { 0% { transform: translate(228px,144.194px) scale(0,1) translate(-228px,-126.194px); } 57.8947% { transform: translate(228px,144.194px) scale(0,1) translate(-228px,-126.194px); } 68.421% { transform: translate(228px,144.194px) scale(1,1) translate(-228px,-126.194px); } 100% { transform: translate(228px,144.194px) scale(1,1) translate(-228px,-126.194px); } }\\n@keyframes folder-top_t { 0% { transform: translate(181px,245px) skewX(16deg) skewY(0deg) scale(1.00078,1.00078) translate(-181px,-245px); } 10.5263% { transform: translate(181px,245px) skewX(0deg) skewY(0deg) scale(1.00078,1.00078) translate(-181px,-245px); } 100% { transform: translate(181px,245px) skewX(0deg) skewY(0deg) scale(1.00078,1.00078) translate(-181px,-245px); } }\\n    \")), _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    id: \"folder-bottom\",\n    d: \"M292.17,157.426L236.288,157.426L225.231,142L184.83,142C182.716,142,181,143.708,181,145.817C181,208.588,181.151,239.982,181.453,240L296,240C296.271,238.997,296.271,212.744,296,161.243C296,159.134,294.284,157.426,292.17,157.426Z\",\n    fill: \"#EBBA16\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1\n  })), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"page-3rd\",\n    fill: \"#D1BF86\",\n    fillRule: \"evenodd\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    d: \"M2,0L77,0C78.1046,0,79,0.8954,79,2L79,97C79,98.1046,78.1046,99,77,99L2,99C0.895431,99,0,98.1046,0,97L0,2C0,0.8954,0.895431,0,2,0Z\",\n    transform: \"translate(230.203,245) translate(-39.5,-99)\",\n    style: {\n      animation: \"3.8s linear infinite both page-3rd_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"page-2nd\",\n    fill: \"#CEC9AE\",\n    fillRule: \"evenodd\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    d: \"M2,-29L77,-29C78.1046,-29,79,-28.1046,79,-27L79,68C79,69.1046,78.1046,70,77,70L2,70C0.895431,70,0,69.1046,0,68L0,-27C0,-28.1046,0.895431,-29,2,-29Z\",\n    transform: \"translate(242.5,274) translate(-39.5,-99)\",\n    style: {\n      animation: \"3.8s linear infinite both page-2nd_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"page-top\",\n    fill: \"#F4EFDC\",\n    fillRule: \"evenodd\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    d: \"M2,22L77,22C78.1046,22,79,22.8954,79,24L79,119C79,120.105,78.1046,121,77,121L2,121C0.895431,121,0,120.105,0,119L0,24C0,22.8954,0.895431,22,2,22Z\",\n    transform: \"translate(254.5,223) translate(-39.5,-99)\",\n    style: {\n      animation: \"3.8s linear infinite both page-top_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"text-4\",\n    d: \"M283.087,148L230.203,148C228.987,148,228,148.981,228,150.194C228,151.407,228.987,152.387,230.203,152.387L283.087,152.387C284.303,152.387,285.29,151.407,285.29,150.194C285.29,148.981,284.303,148,283.087,148Z\",\n    fill: \"#CEC9AE\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    opacity: 1,\n    transform: \"translate(228,189.194) scale(0,1) translate(-228,-171.194)\",\n    style: {\n      animation: \"3.8s linear infinite both text-4_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"text-3\",\n    d: \"M283.087,130.71L230.203,130.71C228.987,130.71,228,131.69,228,132.903C228,134.116,228.987,135.097,230.203,135.097L283.087,135.097C284.303,135.097,285.29,134.116,285.29,132.903C285.29,131.69,284.303,130.71,283.087,130.71Z\",\n    fill: \"#CEC9AE\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    opacity: 1,\n    transform: \"translate(228,174.903) scale(0,1) translate(-228,-156.903)\",\n    style: {\n      animation: \"3.8s linear infinite both text-3_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"text-2\",\n    d: \"M230.203,118.387L283.087,118.387C284.303,118.387,285.29,117.407,285.29,116.194C285.29,114.981,284.303,114,283.087,114L230.203,114C228.987,114,228,114.981,228,116.194C228,117.407,228.987,118.387,230.203,118.387Z\",\n    fill: \"#CEC9AE\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    opacity: 1,\n    transform: \"translate(228,159.548) scale(0,1) translate(-228,-141.548)\",\n    style: {\n      animation: \"3.8s linear infinite both text-2_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"text-1\",\n    d: \"M230.203,101.387L265.238,101.387C266.455,101.387,267.442,100.407,267.442,99.194C267.442,97.981,266.455,97,265.238,97L230.203,97C228.987,97,228,97.981,228,99.194C228,100.407,228.987,101.387,230.203,101.387Z\",\n    fill: \"#CEC9AE\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    opacity: 1,\n    transform: \"translate(228,144.194) scale(0,1) translate(-228,-126.194)\",\n    style: {\n      animation: \"3.8s linear infinite both text-1_t\"\n    }\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    id: \"folder-top\",\n    d: \"M292.018,245L184.751,245C182.283,245,180.487,242.855,181.132,240.672L198.392,181.256C198.833,179.76,200.317,178.72,202.011,178.72L309.278,178.72C311.746,178.72,312.897,180.878,312.897,183.048L295.637,242.464C295.196,243.96,293.712,245,292.018,245Z\",\n    fill: \"#EFCE4A\",\n    fillRule: \"nonzero\",\n    stroke: \"none\",\n    strokeWidth: 1,\n    transform: \"translate(181,245) skewX(16) scale(1.00078,1.00078) translate(-181,-245)\",\n    style: {\n      animation: \"3.8s linear infinite both folder-top_t\"\n    }\n  }));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLoadingFile);\nexport default __webpack_public_path__ + \"static/media/loadingFile.8236d636.svg\";\nexport { ForwardRef as ReactComponent };","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), _react.default.createElement(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 0a.9959.9959 0 010-1.41L10.59 12 7.7 9.11a.9959.9959 0 010-1.41c.39-.39 1.02-.39 1.41 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z\"\n})), 'CancelRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17 11V5c0-1.1-.9-2-2-2H9c-1.1 0-2 .9-2 2v2H5c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h5c.55 0 1-.45 1-1v-3h2v3c0 .55.45 1 1 1h5c1.1 0 2-.9 2-2v-6c0-1.1-.9-2-2-2h-2zM7 19H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm4 4H9v-2h2v2zm0-4H9V9h2v2zm0-4H9V5h2v2zm4 8h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm4 12h-2v-2h2v2zm0-4h-2v-2h2v2z\"\n}), 'ApartmentRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16 1H8C6.34 1 5 2.34 5 4v16c0 1.66 1.34 3 3 3h8c1.66 0 3-1.34 3-3V4c0-1.66-1.34-3-3-3zm-2 20h-4v-1h4v1zm3.25-3H6.75V4h10.5v14z\"\n}), 'PhoneAndroid');\n\nexports.default = _default;","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'pim';","import { IMap } from 'ats-utils/src/Interfaces';\n\n/**\n * True when `product`'s `productSharing` list contains an entry for `firmId` —\n * i.e. the (parent/shared) product has already been shared with / adopted by\n * that firm. Mirrors the check used across the product drawers, product list,\n * and quote product search.\n */\nexport const isProductSharedWithFirm = (product: IMap<any>, firmId: number): boolean =>\n  Boolean(product.get('productSharing')?.find((sharing) => sharing.get('firmId') === firmId));\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n}), _react.default.createElement(\"path\", {\n  d: \"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\"\n})), 'ZoomIn');\n\nexports.default = _default;","import _ from 'lodash';\nimport ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\ninterface IAiServiceApiGetPrintJobsFilterParam {\n  projectId?: number;\n  offset?: number;\n  limit?: number;\n}\n\nconst AiServiceApi = {\n  async createTakeoff(env: any, appId: string, projectId: number, files: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post(`/msai/operations.create?projectId=${projectId}`, { files });\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error AiServiceApi.hidePrintJob:', error);\n      throw error;\n    }\n  },\n\n  async getPrintJobs(env: any, appId: string, filterParam?: IAiServiceApiGetPrintJobsFilterParam): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msai/operations.find`;\n      if (filterParam) {\n        endpoint += `?filter=${JSON.stringify(filterParam)}`;\n      }\n      const response = await apiClient.fetchData(endpoint);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error AiServiceApi.getPrintJobs:', error);\n      throw error;\n    }\n  },\n\n  async hidePrintJob(env: any, appId: string, id?: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post('/msai/operations.hide', { id });\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error AiServiceApi.hidePrintJob:', error);\n      throw error;\n    }\n  },\n\n  async createProjectExtraction(env: any, appId: string, fileId: string, tag: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.post(`/msai/projectExtraction`, { fileId, tag });\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error AiServiceApi.createProjectExtraction:', error);\n      throw error;\n    }\n  },\n\n  async getProjectExtractionById(env: any, appId: string, id: number): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const endpoint = `/msai/projectExtraction.getById/${id}`;\n      const response = await apiClient.fetchData(endpoint);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error AiServiceApi.getProjectExtractionById:', error);\n      throw error;\n    }\n  },\n};\n\nexport default AiServiceApi;\n","export enum CreateMasterProjectFormVariant {\n  WITH_EDIT_MODE = 'WITH_EDIT_MODE',\n  COPY_AFTER_FINISH = 'COPY_AFTER_FINISH'\n}","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport Debug from '../../Debug';\nimport {\n  SelectableCard, Tooltip,\n} from '../../../components';\nimport FieldCheckbox, {\n  IFieldCheckboxComponentProps,\n} from '../../../components/FieldCheckbox';\nimport FieldRadio, {\n  IFieldRadioComponentProps,\n} from '../../../components/FieldRadio';\nimport FieldSwitch, {\n  IFieldSwitchComponentProps,\n} from '../../../components/FieldSwitch';\nimport {\n  Theme,\n  Grid,\n  WithStyles,\n  withStyles,\n  Typography,\n  FormHelperText,\n} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  GetBuildingTypesAction,\n  GetBuildingClassesAction,\n} from '../../../modules/BuildingModule/actions';\nimport {\n  List,\n  Set,\n} from 'immutable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport {\n  reduxForm,\n  Field,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  makeSelectBuildingClasses,\n  makeSelectBuildingTypes,\n} from '../../../modules/BuildingModule/selectors';\nimport {\n  BuildingClassListItem,\n  ListItem,\n  Project,\n} from '../../../models';\nimport {\n  BUILDING_SELECTION_FORM,\n  FORM_SELECTED_BUILDING_CLASSES_KEY,\n  FORM_SELECTED_BUILDING_TYPES_KEY,\n  FORM_SINGLE_KEY,\n  FORM_MULTI_KEY,\n} from '../../../modules/BuildingModule/constants';\nimport { ProjectTrackerCreateProjectFormVariant } from '../../CreateNewProjectModal/constants';\nimport { CreateMasterProjectFormVariant } from '../../CreateNewMasterModal/constants';\nimport {CreateTemplateProjectFormVariant} from '../../CreateNewTemplateModal/constants';\n\ninterface IBuildingSelectionComponentProps {\n  onSubmit: (values: any) => void;\n  variantSet: Set<ProjectTrackerCreateProjectFormVariant | CreateMasterProjectFormVariant | CreateTemplateProjectFormVariant>;\n  data?: IMap<Project>;\n  form?: string;\n  isOptional?: boolean;\n}\n\ninterface IBuildingSelection extends IBuildingSelectionComponentProps {\n  buildings: object[];\n  multiBuildings: object[];\n  open: boolean;\n\n  formValues: Map<string, any>;\n  dispatch: React.Dispatch<IAction>;\n  buildingClasses: Map<number | string, IMap<BuildingClassListItem>>;\n  buildingTypes: Map<number | string, List<IMap<ListItem>>>;\n  isMulti: boolean;\n  selectedBuildingClasses: List<IMap<BuildingClassListItem>>;\n  editMode: boolean;\n}\n\ntype IBuilding = IBuildingSelection & WithTranslation & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  paper: {\n    position: 'absolute',\n    width: theme.spacing(50),\n    backgroundColor: theme.palette.background.paper,\n    boxShadow: theme.shadows[5],\n    padding: theme.spacing(4),\n  },\n  warningModal: {\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  chooseBuildingClass: {\n    margin: theme.spacing(2),\n  },\n  chooseBuildingType: {\n    margin: theme.spacing(2),\n  },\n  error: {\n    display: 'none',\n  }\n});\n\nconst buildingIconsById: any = {\n  1: 'building',\n  2: 'graduation-cap',\n  3: 'hospital',\n  4: 'bed',\n  5: 'industry',\n  6: 'store',\n  7: 'briefcase',\n  8: 'university',\n  9: 'futbol',\n  10: 'home',\n  11: 'lock',\n  12: 'subway'\n};\n\nconst FORM_ERROR_KEY = 'FORM_ERROR_KEY';\n\ninterface IBuildingTypeFormValueMap {\n  single: IMap<ListItem>;\n  multi: List<IMap<ListItem>>;\n}\n\nconst transformBuildingValues = (buildingClassList = List<IMap<BuildingClassListItem>>(), buildingTypeList = Map<number, IMap<IBuildingTypeFormValueMap>>(), isMulti) => {\n\n  const buildingClasses = buildingClassList.filter((buildingClass) => {\n    return isMulti ? buildingClass.get('isMulti') : buildingClass.get('isSingle');\n  }).map((buildingClass) => {\n    const buildingClassIdAsString = String(buildingClass.get('id'));\n    const buildingTypes = isMulti\n    ? buildingTypeList.getIn([buildingClassIdAsString, FORM_MULTI_KEY]) || List<string>()\n    : List([buildingTypeList.getIn([buildingClassIdAsString, FORM_SINGLE_KEY])].filter((type) => type != null));\n    return buildingClass.set('buildingTypes',\n      buildingTypes,\n    );\n  });\n  return buildingClasses;\n};\n\nclass NewProjectBuildingSelectionForm extends React.Component<IBuilding, {}> {\n  public state = {\n    error: '',\n  };\n\n  public getRequiredBuildingTypes() {\n    const {\n      dispatch,\n      selectedBuildingClasses,\n    } = this.props;\n\n    selectedBuildingClasses.forEach((buildingClass) => {\n      dispatch(new GetBuildingTypesAction(buildingClass.get('id')));\n    });\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(new GetBuildingClassesAction());\n\n    this.getRequiredBuildingTypes();\n  }\n\n  public componentDidUpdate(prevProps: IBuilding) {\n    if (!prevProps.selectedBuildingClasses.size && this.props.selectedBuildingClasses.size) {\n      this.getRequiredBuildingTypes();\n    }\n  }\n\n  public onSubmitTransform(onSubmit: (values: any) => void) {\n    const {\n      buildingTypes,\n      untouch,\n      isOptional\n    } = this.props;\n    return (values: Map<string, any>) => {\n\n      const isMulti = Boolean(values.get('isMulti'));\n      const buildingClassList = values.get(FORM_SELECTED_BUILDING_CLASSES_KEY);\n      const buildingTypeList = values.get(FORM_SELECTED_BUILDING_TYPES_KEY);\n      const minSelected = isMulti ? 2 : 1;\n      const buildingClasses = transformBuildingValues(buildingClassList, buildingTypeList, isMulti);\n      const formatedBulidingClasses = buildingClasses.withMutations(mutable => {\n        mutable.map(buildingClass => buildingClass.delete('isMulti').delete('isSingle'));\n      });\n\n      // count all selected building types\n      const buildingTypesCount = buildingClasses.map((buildingClass) => buildingClass.get('buildingTypes').size).reduce((sum, num) => sum + num, 0);\n      // count all selected building classes with 0 building type options (e.g. office building -> no selectable building types means a \"hidden building type\" of that building class is assumed.)\n      const hiddenBuildingTypeCount = buildingClasses.map((buildingClass) => buildingTypes.get(buildingClass.get('id'))).filter((buildingTypesList) => buildingTypesList != null && buildingTypesList.size === 0).size;\n      const totalBuildingTypesCount = buildingTypesCount + hiddenBuildingTypeCount;\n      const minStillRequired = minSelected - hiddenBuildingTypeCount;\n\n      if ((!isOptional && totalBuildingTypesCount < minSelected)) {\n        isMulti\n          ? this.setState({error: `Please select at least 1 building class and at least ${minStillRequired} building type${minStillRequired > 1 ? 's' : ''}`})\n          : this.setState({error: 'Please select a building class and a building type'});\n      } else {\n        return isFunction(onSubmit) && onSubmit(Map({\n          building: {\n            buildingClasses: formatedBulidingClasses,\n          }\n        }));\n      }\n    };\n  }\n\n  public render() {\n    const {\n      error,\n    } = this.state;\n    const {\n      handleSubmit,\n      onSubmit,\n      children,\n      classes,\n      t,\n\n      formValues,\n      buildingClasses,\n      buildingTypes,\n      isMulti,\n      selectedBuildingClasses,\n      dispatch,\n      form,\n      isOptional\n    } = this.props;\n\n    const filteredSelectedBuildingClasses = selectedBuildingClasses.filter((buildingClass: IMap<BuildingClassListItem>) => {\n      return isMulti ? buildingClass.get('isMulti') : buildingClass.get('isSingle');\n    });\n    const trimmedSelectedBuildingClasses = isMulti ? filteredSelectedBuildingClasses : filteredSelectedBuildingClasses.slice(0, 1);\n\n    return (\n      <form\n        onSubmit={handleSubmit(this.onSubmitTransform(onSubmit))}\n        style={{padding: '24px 0'}}\n      >\n        <Grid\n          container={true}\n          spacing={3}\n          direction='column'\n          wrap='nowrap'\n        >\n          <Debug\n            debugLevel={1}\n            delayedRender={() => {\n              return <React.Fragment>\n                { safeStringify(formValues.toJS()) }\n              </React.Fragment>;\n            }}\n          />\n          <Grid\n            container={true}\n            alignItems='center'\n          >\n            <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n              name='isMulti'\n              component={FieldSwitch}\n              props={{\n                label: t('NewProjectBuildingSelection.MultiUse'),\n                inputProps: {\n                  defaultValue: false,\n                  color: 'primary',\n                  onChange: () => {\n                    this.setState({error: ''});\n                    dispatch(change(form, FORM_SELECTED_BUILDING_CLASSES_KEY, List()));\n                    dispatch(change(form, FORM_SELECTED_BUILDING_TYPES_KEY, List()));\n                  }\n                }\n              }}\n            />\n            <Tooltip\n              title={t('NewProjectBuildingSelection.multiUserTooltip', 'Turn on Multi-use switch will allow the selection of multiple Buliding Classes and Building Types')}\n            >\n              <InfoIcon />\n            </Tooltip>\n          </Grid>\n\n        </Grid>\n        <Grid\n          container={true}\n          spacing={3}\n        >\n          <Grid\n            container={true}\n          >\n            <Typography className={classes.chooseBuildingClass}>\n              {t('NewProjectBuildingSelection.ChooseBuildingClass')}{!isOptional && ' *'}\n            </Typography>\n          </Grid>\n          {\n            buildingClasses.filter((buildingClassListItem: IMap<BuildingClassListItem>) => {\n              return isMulti ? buildingClassListItem.get('isMulti') : buildingClassListItem.get('isSingle');\n            }).map((buildingClassListItem: IMap<BuildingClassListItem>, buildingClassId: string | number) => {\n              const buildingClassListItemId = buildingClassListItem.get('id');\n              const isSelected = trimmedSelectedBuildingClasses.findIndex((buildingClass) => buildingClass.get('id') === buildingClassListItemId) !== -1;\n              return (\n                <Grid\n                  key={buildingClassListItem.get('id')}\n                  item={true}\n                  xs={12}\n                  sm={3}\n                  md={2}\n                  lg={2}\n                >\n                  <SelectableCard\n                    onClick={this.selectMultiCard(buildingClassListItem)}\n                    selected={isSelected}\n                    icon={buildingIconsById[buildingClassId]}\n                    label={buildingClassListItem.get('value')}\n                  />\n                </Grid>\n              );\n            }).valueSeq().toArray()\n          }\n        </Grid>\n        <Grid\n          container={true}\n          spacing={3}\n        >\n          {\n            !selectedBuildingClasses.isEmpty() &&\n            <Typography className={classes.chooseBuildingType}>\n              {t('NewProjectBuildingSelection.ChooseBuildingType')}{!isOptional && ' *'}\n            </Typography>\n          }\n          <Grid\n            container={true}\n            direction='row'\n            className={classes.chooseBuildingType}\n          >\n            {\n              trimmedSelectedBuildingClasses.map((buildingClass: IMap<BuildingClassListItem>) => {\n                const buildingClassId = buildingClass.get('id');\n                const blist: List<IMap<ListItem>> = buildingTypes.get(buildingClassId, List());\n                return (\n                  <Grid container={true} direction='column' wrap='nowrap' key={buildingClassId} item={true} sm={4}>\n                    <Typography>\n                      { buildingClass.get('value') }\n                    </Typography>\n                    {\n                      blist.map((buildingType: IMap<ListItem>) => {\n                        const fieldProps = isMulti\n                          ? {\n                              name: `${FORM_SELECTED_BUILDING_TYPES_KEY}.${buildingClassId}.${FORM_MULTI_KEY}`,\n                              component: FieldCheckbox,\n                              inputProps: {\n                                onChange: (val) => {\n                                  val.size > 1 && this.setState({error: ''}); // tslint:disable-line\n                                }\n                              }\n                            }\n                          : {\n                              name: `${FORM_SELECTED_BUILDING_TYPES_KEY}.${buildingClassId}.${FORM_SINGLE_KEY}`,\n                              component: FieldRadio,\n                              inputProps: {\n                                onChange: (val) => {\n                                  val.size && this.setState({error: ''}); // tslint:disable-line\n                                }\n                              }\n                            };\n                        return <Field<BaseFieldProps<IFieldCheckboxComponentProps|IFieldRadioComponentProps>>\n                          key={buildingType.get('id')}\n                          props={{\n                            label: buildingType.get('value'),\n                            checkedValue: buildingType,\n                            color: 'primary',\n                          }}\n                          {...fieldProps}\n                        />;\n                      })\n                    }\n                  </Grid>\n                );\n              })\n            }\n          </Grid>\n        </Grid>\n        <FormHelperText id='helper-text' error={!!error} className={error ? '' : classes.error}>{error}</FormHelperText>\n        {children}\n      </form>\n    );\n  }\n\n  private selectMultiCard = (buildingClass: IMap<BuildingClassListItem>) => (event: any) => {\n    const {\n      array,\n      selectedBuildingClasses,\n      isMulti,\n      dispatch,\n    } = this.props;\n    const buildingClassId = buildingClass.get('id');\n    const buildingClassIndex = selectedBuildingClasses.findIndex((selectedBuildingClass) => selectedBuildingClass.get('id') === buildingClassId);\n    if (isMulti) {\n      if (buildingClassIndex === -1) {\n        array.insert(FORM_SELECTED_BUILDING_CLASSES_KEY, 0, buildingClass);\n      } else {\n        array.remove(FORM_SELECTED_BUILDING_CLASSES_KEY, buildingClassIndex);\n      }\n    } else {\n      if (buildingClassIndex !== 0) {\n        array.remove(FORM_SELECTED_BUILDING_CLASSES_KEY, buildingClassIndex);\n        array.insert(FORM_SELECTED_BUILDING_CLASSES_KEY, 0, buildingClass);\n      } else {\n        array.removeAll(FORM_SELECTED_BUILDING_CLASSES_KEY);\n      }\n    }\n\n    dispatch(new GetBuildingTypesAction(buildingClass.get('id')));\n    this.setState({error: ''});\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IBuildingSelectionComponentProps) => {\n\n  const editMode = ownProps.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_EDIT_MODE);\n  const data: IMap<Partial<Project>> = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const form = ownProps.form != null\n    ? ownProps.form\n    : editMode\n      ? `${BUILDING_SELECTION_FORM}Edit`\n      : BUILDING_SELECTION_FORM;\n\n\n  const buildingClasses = makeSelectBuildingClasses()(state);\n  const buildingTypes = makeSelectBuildingTypes()(state);\n\n  const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n  const isMulti = formValues.get('isMulti', false);\n  const selectedBuildingClasses = formValues.get(FORM_SELECTED_BUILDING_CLASSES_KEY, List<IMap<BuildingClassListItem>>());\n\n  const initialValues = data.getIn(['building', 'buildingClasses'], Map()).count() ? Map<string, any>().withMutations((initialFormStateCtx) => {\n    const projectBuildingClasses = data.getIn(['building', 'buildingClasses']);\n    const buildingTypesCount = projectBuildingClasses.map((buildingClass) => (buildingClass.get('buildingTypes') || List()).size).reduce((sum, num) => sum + num, 0);\n    // count all selected building classes with 0 building type options (e.g. office building -> no selectable building types means a \"hidden building type\" of that building class is assumed.)\n    const hiddenBuildingTypeCount = projectBuildingClasses.map((buildingClass) => buildingTypes.get(buildingClass.get('id'))).filter((buildingTypesList) => buildingTypesList != null && buildingTypesList.size === 0).size;\n\n    const totalTypesSelected = buildingTypesCount + hiddenBuildingTypeCount;\n    const projectIsMulti = totalTypesSelected > 1;\n    initialFormStateCtx.set('isMulti', projectIsMulti);\n    const formSelectedBuildingClasses = projectBuildingClasses.map((buildingClass) => {\n      return buildingClasses.get(buildingClass.get('id')); // @@TODO STRING ID HACK\n    }).filter((buildingClass) => buildingClass != null);\n    initialFormStateCtx.set(FORM_SELECTED_BUILDING_CLASSES_KEY, formSelectedBuildingClasses);\n    projectBuildingClasses.forEach((buildingClass) => {\n\n      const buildingClassIdAsString = String(buildingClass.get('id'));\n      const buildingTypesFromDataForClass = (buildingTypes.getIn([buildingClass.get('id')]) || List()).reduce((map, buildingType) => {\n        return map.set(buildingType.get('id'), buildingType);\n      }, Map<number, IMap<ListItem<string, string>>>()) || Map(); // @@TODO STRING ID HACK\n      const buildingTypesForClass = (buildingClass.get('buildingTypes').map((buildingType) => {\n        return buildingTypesFromDataForClass.get(buildingType.get('id')); // @@TODO STRING ID HACK\n      }).filter((buildingType) => buildingType != null) || List()); // @@TODO STRING ID HACK\n      if (buildingTypesForClass.size !== 0) {\n        const buildingTypeKey = projectIsMulti ? FORM_MULTI_KEY : FORM_SINGLE_KEY;\n        initialFormStateCtx.setIn(\n          [FORM_SELECTED_BUILDING_TYPES_KEY, buildingClassIdAsString, buildingTypeKey],\n          projectIsMulti ? buildingTypesForClass : buildingTypesForClass.first(),\n        );\n      }\n    });\n  }) : Map({isMulti: false});\n  return {\n    initialValues,\n    form,\n    formValues,\n    isMulti,\n    selectedBuildingClasses,\n    editMode,\n    buildingClasses,\n    buildingTypes,\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst validate = () => {\n  return {\n    [FORM_ERROR_KEY]: undefined,\n  };\n};\n\nexport default compose<React.ComponentClass<IBuildingSelectionComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: true,\n    validate,\n  }),\n)(NewProjectBuildingSelectionForm);\n","import { createStyles, Grid, makeStyles, MenuItem, Select, SelectProps, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport mexicoFlag from '../../images/productSelectionPage/mexicoFlag.png';\nimport i18next from 'i18next';\nimport { Variant } from '@material-ui/core/styles/createTypography';\nimport { Currency } from '../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  selectRoot: {\n    padding: '7px 24px 8px 0'\n  },\n  countryFlag: {\n    width: 26,\n  },\n}));\n\ninterface ICurrencySelector {\n  variant?: Variant;\n  selectProps?: SelectProps;\n  displayLabel?: boolean;\n  selectedCurrency: Currency;\n  setSelectedCurrency: (currency: Currency) => void;\n}\n\nconst CurrencySelector: React.FC<ICurrencySelector> = ({\n  variant = 'subtitle2',\n  selectProps = {},\n  displayLabel = true,\n  selectedCurrency,\n  setSelectedCurrency\n}) => {\n  const [priceDropdownSelect, setPriceDropdownSelect] = React.useState(false);\n  const classes = useStyles();\n\n  return (\n    <>\n      {\n        displayLabel && <Typography variant={variant} color='textPrimary'>\n          {i18next.t('translations:configuratorPage.currencyLabel')}\n        </Typography>\n      }\n      <Select\n        open={priceDropdownSelect}\n        onClose={() => setPriceDropdownSelect(false)}\n        onOpen={() => setPriceDropdownSelect(true)}\n        value={selectedCurrency}\n        onChange={(event: any) => setSelectedCurrency(event.target.value)}\n        classes={selectProps.classes ? selectProps.classes : { root: classes.selectRoot }}\n        {...selectProps}\n      >\n        <MenuItem value='CAD'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n          >\n            <img src={canFlag} className={classes.countryFlag} alt={i18next.t('translations:configuratorPage.canadianFlagIconAlt')} />\n            <Typography variant='body2'>{i18next.t('translations:configuratorPage.CAD', 'CAD')}</Typography>\n          </Grid>\n        </MenuItem>\n        <MenuItem value='USD'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n          >\n            <img src={usFlag} className={classes.countryFlag} alt={i18next.t('translations:configuratorPage.usFlagIconAlt')} />\n            <Typography variant='body2'>{i18next.t('translations:configuratorPage.USD', 'USD')}</Typography>\n          </Grid>\n        </MenuItem>\n        <MenuItem value='MXN'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n          >\n            <img src={mexicoFlag} className={classes.countryFlag} alt={i18next.t('translations:configuratorPage.mexicoFlagIconAlt')} />\n            <Typography variant='body2'>{i18next.t('translations:configuratorPage.MXN', 'MXN')}</Typography>\n          </Grid>\n        </MenuItem>\n      </Select>\n    </>\n  );\n};\n\nexport default CurrencySelector;","import { Button, createStyles, Grid, makeStyles, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport EmptyWidgetContent from '../../../containers/Dashboard/WidgetLoader/EmptyWidgetContent';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  container: {\n    padding: theme.spacing(3),\n  },\n  button: {\n    marginTop: theme.spacing(1),\n  }\n}));\n\ninterface INoAttributesFound {\n  image?: string;\n  title: string;\n  subtitle?: string;\n  buttonText?: string;\n  onClick?: any;\n  SvgElement?: JSX.Element;\n}\n\nconst NoAttributesFound: React.FC<INoAttributesFound> = ({\n  image,\n  title,\n  subtitle,\n  buttonText,\n  onClick,\n  SvgElement\n}) => {\n\n  const classes = useStyles();\n\n  return (\n    <Grid className={classes.container}>\n      <EmptyWidgetContent\n        image={image}\n        SvgElement={SvgElement}\n      >\n        <Typography gutterBottom={true} variant='h6'>\n          {title}\n        </Typography>\n        {\n          buttonText && (\n            <>\n              <Typography gutterBottom={true} variant='body2'>\n                {subtitle}\n              </Typography>\n              <Button\n                className={classes.button}\n                variant='contained'\n                color='primary'\n                onClick={onClick}\n              >\n                {buttonText}\n              </Button>\n            </>\n          )\n        }\n      </EmptyWidgetContent>\n    </Grid>\n  );\n};\n\nexport default NoAttributesFound;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M13 6.99h3L12 3 8 6.99h3v10.02H8L12 21l4-3.99h-3z\"\n}), 'Height');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z\"\n}), 'Flag');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z\"\n}), 'CloudDownload');\n\nexports.default = _default;","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n","import * as React from 'react';\nimport { withStyles, WithStyles, StyleRules } from '@material-ui/core/styles';\nimport {\n  Drawer,\n  AppBar,\n  Toolbar,\n  IconButton,\n  Theme,\n  Button,\n  Grid,\n} from '@material-ui/core';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\n\nimport { compose } from 'redux';\n\nimport constants, {\n  HEADER_HEIGHT_UNIT_MULTIPLIER,\n  SM_HEADER_HEIGHT_UNIT_MULTIPLIER,\n  SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER,\n  ANIMATION_SPEED,\n} from './constants';\n\nexport {\n  constants,\n};\n\nimport withWidth, { isWidthUp, isWidthDown, WithWidth } from '@material-ui/core/withWidth';\n\nimport { styled } from '@material-ui/styles';\nimport { DrawerProps as DrawerPropsType } from '@material-ui/core/Drawer';\nimport { Breakpoint } from '@material-ui/core/styles/createBreakpoints';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { makeSelectMobileAppMenuState } from '../../modules/ApplicationModule/selectors';\nimport { IAction, IConfig, IMap } from 'ats-utils/src';\nimport { OpenMobileAppMenuAction, CloseMobileAppMenuAction, SetAppMenuOpenAction } from '../../modules/ApplicationModule/actions';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\nimport { AOSMITH_SPEC_ID } from '../../constants';\nimport QuoteConnectHelp from '../../utils/quoteConnect/quoteConnectHelp';\n\nconst DrawerInterceptor = (props: DrawerPropsType & IResponsiveComponentProps & { DrawerProps: DrawerPropsType }) => {\n  const {\n    DrawerProps,\n    widthBreakpoint,\n    ...rest\n  } = props;\n\n  return <Drawer {...rest} {...DrawerProps} />;\n};\n\nconst ResponsiveDrawer = styled(DrawerInterceptor)(({theme, widthBreakpoint}: IResponsiveComponentProps & ITheme) => ({\n  boxShadow: `${[theme.shadows[12], theme.shadows[12]].join(',')}`,\n  zIndex: theme.zIndex.drawer,\n  borderRight: `${theme.palette.primary[900]}`,\n  overflowX: 'hidden',\n  transition: `width ${ANIMATION_SPEED}s`,\n  width: `${theme.spacing() * SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n  ...isWidthDown('sm', widthBreakpoint)\n    && {\n      width: `${theme.spacing() * MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n    },\n  ...isWidthDown('xs', widthBreakpoint)\n    && {\n      width: `${theme.spacing() * SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n    },\n  display: 'flex',\n  flexFlow: 'column nowrap',\n  position: 'absolute',\n  height: '100%',\n\n  overflow: 'visible !important',\n}));\n\nconst AppBarInterceptor = (props) => {\n  const {\n    widthBreakpoint,\n    ...rest\n  } = props;\n\n  return <AppBar {...rest} />;\n};\nconst AppBarWrapper = styled(AppBarInterceptor)(({theme, widthBreakpoint}: IResponsiveComponentProps & ITheme) => ({\n  maxHeight: `${theme.spacing() * HEADER_HEIGHT_UNIT_MULTIPLIER}px`,\n  transition: `padding-left ${ANIMATION_SPEED}s`,\n  width: '100%',\n  paddingLeft: `${theme.spacing() * SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n\n  ...isWidthDown('sm', widthBreakpoint)\n    && {\n      paddingLeft: `${theme.spacing() * MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n    },\n  ...isWidthDown('xs', widthBreakpoint)\n    && {\n      paddingLeft: `${theme.spacing() * SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n    },\n  ...isWidthUp('xs', widthBreakpoint)\n    && {\n      maxHeight: `${theme.spacing() * SM_HEADER_HEIGHT_UNIT_MULTIPLIER}px`,\n    },\n}));\n\n\nconst ResponsiveDiv = (props) => {\n  const {\n    mobileMenuState,\n    widthBreakpoint,\n    ...rest\n  } = props;\n\n  return <div {...rest} />;\n};\nconst MobileDrawer = (props) => {\n  const {\n    MobileDrawerProps,\n    widthBreakpoint,\n    ...rest\n  } = props;\n\n  return <Drawer {...rest} {...MobileDrawerProps}/>;\n};\n\nconst ResponsiveContentContainer = styled(ResponsiveDiv)(({theme, widthBreakpoint}: IResponsiveComponentProps & ITheme) => {\n    return ({\n    height: '100%',\n    position: 'absolute',\n    left: 0,\n    boxSizing: 'border-box',\n    display: 'flex',\n    flexFlow: 'row nowrap',\n    transition: `padding-left ${ANIMATION_SPEED}s`,\n    width: '100%',\n\n    paddingLeft: `${theme.spacing() * SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n\n    ...isWidthDown('sm', widthBreakpoint)\n      && {\n        paddingLeft: `${theme.spacing() * MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n      },\n\n\n    ...isWidthDown('xs', widthBreakpoint)\n      && {\n        paddingLeft: `${theme.spacing() * SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER}px`,\n      },\n  });\n});\n\nconst MobileMenu2 = styled(MobileDrawer)(({theme, widthBreakpoint, mobileMenuState}: IResponsiveComponentProps & ITheme & {mobileMenuState?: boolean}) => ({\n  transition: `all ${ANIMATION_SPEED}s`,\n  display: 'none',\n  minWidth: 0,\n  paddingTop: `${theme.spacing() * HEADER_HEIGHT_UNIT_MULTIPLIER}px`,\n  ...isWidthDown('xs', widthBreakpoint)\n    && {\n      display: 'flex',\n      width: 0,\n      flex: mobileMenuState ? '1 0 auto' : '0 1 0',\n    },\n  ...isWidthUp('xs', widthBreakpoint)\n    && {\n      paddingTop: `${theme.spacing() * SM_HEADER_HEIGHT_UNIT_MULTIPLIER}px`,\n    },\n}));\n\nconst ContentWrapper = styled(ResponsiveDiv)(({theme, widthBreakpoint, mobileMenuState}: IResponsiveComponentProps & ITheme & {mobileMenuState?: boolean}) => ({\n  display: 'flex',\n  flexDirection: 'column',\n  transition: `all ${ANIMATION_SPEED}s`,\n  overflow: 'auto',\n  flex: 1,\n  ...isWidthDown('xs', widthBreakpoint)\n    && {\n      width: 0,\n      flex: mobileMenuState ? 0 : 1,\n    },\n}));\n\nconst muiStyles = (theme: Theme): StyleRules => ({\n  root: {\n    width: '100%',\n    display: 'flex',\n    margin: 0,\n    flexFlow: 'row wrap',\n  },\n  drawerPaper: {\n    position: 'relative',\n    height: '100%',\n    width: '100%',\n    background: 'none',\n    flex: '1 0 0px',\n    overflow: 'visible',\n    border: 'none'\n  },\n  mobileDrawerBackdrop: {\n    top: theme.spacing(HEADER_HEIGHT_UNIT_MULTIPLIER),\n  },\n  mobileDrawerPaper: (props: IResponsiveMenuComponentProps) => ({\n    ...props.MobileDrawerProps,\n    top: theme.spacing(HEADER_HEIGHT_UNIT_MULTIPLIER),\n    height: `calc(100% - ${theme.spacing(HEADER_HEIGHT_UNIT_MULTIPLIER)}px)`,\n  }),\n  collapseButton: {\n    width: 20,\n    height: 106,\n    color: 'white',\n    backgroundColor: theme.palette.secondary[600],\n    borderRadius: `0 5px 5px 0`,\n    position: 'absolute',\n    right: -20,\n    bottom: 'calc(50% - 50px)',\n    cursor: 'pointer',\n  },\n  collapseQuoteConnectButton: {\n    width: 20,\n    height: 106,\n    color: 'white',\n    backgroundColor: '#FAB454',\n    borderRadius: `0 5px 5px 0`,\n    position: 'absolute',\n    right: -20,\n    bottom: 'calc(50% - 50px)',\n    cursor: 'pointer',\n  },\n});\n\ninterface IResponsiveComponentProps {\n  widthBreakpoint: Breakpoint;\n}\ninterface IResponsiveMenuComponentProps extends IResponsiveComponentProps {\n  HeaderContents: React.ReactNode;\n  DrawerContents: React.ReactNode;\n  MobileDrawerContents: React.ReactNode;\n  HeaderProps: object;\n  DrawerProps: object;\n  MobileDrawerProps: object;\n  getOpenDrawerState: (drawerState: boolean) => void;\n  identity: object;\n}\n\ninterface IResponsiveMenuProps extends IResponsiveMenuComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  mobileMenuState: boolean;\n  config: IMap<IConfig>;\n}\n\ninterface ITheme {\n  theme: Theme;\n}\n\ninterface IResponsiveMenuState {\n  open: boolean;\n}\n\ntype ResponsiveMenuProps = IResponsiveMenuProps & WithWidth & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nclass ResponsiveMenu extends React.Component<ResponsiveMenuProps, IResponsiveMenuState> {\n  public state: IResponsiveMenuState = {\n    open: true,\n  };\n\n  public toggleMenu(toggle?: boolean) {\n    const {\n      dispatch,\n      mobileMenuState\n    } = this.props;\n    return () => {\n      mobileMenuState ? dispatch(new CloseMobileAppMenuAction) : dispatch(new OpenMobileAppMenuAction);\n    };\n  }\n\n  public closeMenu() {\n    const {\n      dispatch,\n    } = this.props;\n    return () => dispatch(new CloseMobileAppMenuAction);\n  }\n\n  public render() {\n    const {\n      classes,\n      children,\n      width,\n      widthBreakpoint: _widthBreakpoint,\n      DrawerContents,\n      HeaderContents,\n      MobileDrawerContents,\n      DrawerProps,\n      HeaderProps,\n      MobileDrawerProps,\n      mobileMenuState,\n      dispatch,\n      config,\n      identity\n    } = this.props;\n    const {\n      open,\n    } = this.state;\n    const isQuoteConnectRep = QuoteConnectHelp.isQuoteConnectRepLogin(identity);\n    const menuColor = config?.getIn(['uiOverrides', 'customMainMenuCollapseButtonBackgroundColor']);\n\n    const widthBreakpoint = _widthBreakpoint != null ? _widthBreakpoint : width;\n\n    return (\n      <div className={classes.root}>\n        <AppBarWrapper\n          widthBreakpoint={open ? widthBreakpoint : 'xs'}\n          {...HeaderProps}\n        >\n          <Toolbar>\n            {HeaderContents}\n            {\n              isWidthDown('xs', widthBreakpoint) &&\n              <IconButton onClick={this.toggleMenu()} aria-label='Toggle Application Menu'>\n                <FontAwesomeIcon icon='bars' />\n              </IconButton>\n            }\n          </Toolbar>\n        </AppBarWrapper>\n        <ResponsiveDrawer\n          widthBreakpoint={open ? widthBreakpoint : 'xs'}\n          variant='permanent'\n          DrawerProps={{\n            classes: {\n              paper: classes.drawerPaper,\n            }\n          }}\n          anchor='left'\n          {...DrawerProps}\n        >\n          {DrawerContents}\n          {\n            (widthBreakpoint !== 'xs'\n              && widthBreakpoint !== 'sm')\n              &&  <Grid\n                    container={true}\n                    justify='center'\n                    alignItems='center'\n                    className={`${isQuoteConnectRep ? classes.collapseQuoteConnectButton : classes.collapseButton}`}\n                    style={{\n                      ...menuColor\n                        ? {\n                            backgroundColor: menuColor,\n                            boxShadow: 'inset rgba(0, 0, 0, 0.12) 5px 0px 7px 0px',\n                          }\n                        : {},\n                    }}\n                    onClick={this.handleClick}\n                  >\n                    {open ? <ArrowLeftIcon/> : <ArrowRightIcon/>}\n                  </Grid>\n          }\n        </ResponsiveDrawer>\n        <ResponsiveContentContainer\n          widthBreakpoint={open ? widthBreakpoint : 'xs'}\n        >\n          <MobileMenu2\n            open={mobileMenuState}\n            onClose={this.toggleMenu()}\n            widthBreakpoint={widthBreakpoint}\n            BackdropProps={{\n              classes: {\n                root: classes.mobileDrawerBackdrop,\n              }\n            }}\n            MobileDrawerProps={{\n              classes: {\n                paper: classes.mobileDrawerPaper,\n              }\n            }}\n          >\n            {MobileDrawerContents}\n          </MobileMenu2>\n          <ContentWrapper\n            widthBreakpoint={widthBreakpoint}\n          >\n            {children}\n          </ContentWrapper>\n        </ResponsiveContentContainer>\n      </div>\n    );\n  }\n\n  private handleClick = () => {\n    const {\n      getOpenDrawerState,\n      dispatch\n    } = this.props;\n\n    this.setState(prevState => ({\n      open: !prevState.open\n    }), () => {\n      getOpenDrawerState(this.state.open);\n      setTimeout(() => dispatch(new SetAppMenuOpenAction({ open: this.state.open })), 100 + (ANIMATION_SPEED * 1000));\n    });\n  }\n}\n\n\nconst mapStateToProps = createStructuredSelector({\n  mobileMenuState: makeSelectMobileAppMenuState(),\n  config: makeSelectConfig(),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IResponsiveMenuComponentProps>>(\n  withStyles(muiStyles),\n  withWidth(),\n  connect(mapStateToProps, null),\n)(ResponsiveMenu);\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'notification';\n","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'errors';","export const theme = {\n  palette: {\n    status: {\n      inProgress: 'rgb(175,210,162, 0.29)',\n      created: 'rgb(235,147,22, 0.29)',\n      rejected: 'rgb(201,48,44, 0.29)',\n      completed: 'rgb(50,121,31, 0.29)',\n      cancelled: 'rgb(245,88,102, 0.29)',\n      awarded: '#ABECB1',\n      pendingApproval: '#FFFA9A',\n      passed: 'rgb(255,143,67, 0.29)',\n      missed: 'rgb(255,201,30, 0.29)',\n      quoted: 'rgb(89,213,179, 0.29)',\n      lost: 'rgb(198,198,198, 0.29)',\n      won: 'rgb(38,147,0, 0.29)',\n    },\n  },\n  typography: {\n    useNextVariants: true,\n    fontFamily: 'Montserrat Regular',\n    fontSize: 13.57, // seems to only affect icon size\n    fontWeightRegular: 400,\n    h1: {\n      fontSize: '5.817em',\n      letterSpacing: '-0.094em',\n      color: 'rgba(0,0,0,0.87)'\n    },\n    h2: {\n      fontSize: '3.636em',\n      letterSpacing: '-0.031em',\n      color: 'rgba(0,0,0,0.87)'\n    },\n    h3: {\n      fontSize: '2.909em',\n      letterSpacing: 0,\n      color: 'rgba(0,0,0,0.87)'\n    },\n    h4: {\n      fontSize: '2.060em',\n      letterSpacing: '0.016em',\n      color: 'rgba(0,0,0,0.87)'\n    },\n    h5: {\n      fontSize: '1.454em',\n      letterSpacing: '0em',\n      color: 'rgba(0, 0, 0, 0.87)',\n    },\n    h6: {\n      fontSize: '1.212em',\n      letterSpacing: '0.016em',\n      color: 'rgba(0, 0, 0, 0.87)'\n    },\n    subtitle1: {\n      fontSize: '0.969em',\n      color: 'rgba(0, 0, 0, 0.6)',\n      letterSpacing: '0.009em'\n    },\n    body1: {\n      fontSize: '0.848em',\n      color: 'rgba(0, 0, 0, 0.6)',\n      letterSpacing: '0.016em'\n    },\n    body2: {\n      fontSize: '0.969em',\n      color: 'rgba(0, 0, 0, 0.6)',\n      letterSpacing: '0.031em'\n    },\n    caption: {\n      fontSize: '0.727em',\n      color: 'rgba(0, 0, 0, 0.6)',\n      letterSpacing: '0.025em'\n    },\n    button: {\n      fontSize: '0.848em',\n      color: 'rgba(0, 0, 0, 0.87)',\n      letterSpacing: '0.078em'\n    }\n  },\n  overrides: {\n    MuiStepIcon: {\n      text: {\n        fontSize: '0.75rem'\n      }\n    }\n  }\n};\nexport default theme;\n","export enum CreateTemplateProjectFormVariant {\n  WITH_EDIT_MODE = 'WITH_EDIT_MODE',\n}","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'print';","import {makeStyles, Theme } from '@material-ui/core/';\nimport React from 'react';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    appBar: {\n        position: 'sticky',\n        top: '0',\n        zIndex: theme.zIndex.appBar - 1,\n        background: theme.palette.grey[200],\n        width: '100%'\n    }\n}));\n\nconst TopBar = ({ children }) => {\n    const classes = useStyles();\n    return (\n        <div className={classes.appBar}>\n            {children}\n        </div>\n    );\n};\n\nexport default TopBar;","import React from 'react';\nimport {Breadcrumbs as MuiBreadcrumbs, Link, LinkProps, Tooltip} from '@material-ui/core';\n\ninterface IProps {\n    breadcrumbs: Array<{\n        label: string,\n        onClick?: (event: Parameters<LinkProps['onClick']>[0]) => void,\n        linkProps?: Partial<LinkProps>\n    }>;\n}\nconst Breadcrumbs: React.FC<IProps> = ({\n    breadcrumbs\n}) => {\n    return (\n     <MuiBreadcrumbs>\n         {\n             breadcrumbs.map((breadcrumb, index) => {\n                 const isLastBreadcrumb = (index + 1) === breadcrumbs.length;\n                 return (\n                     <Tooltip key={index} title={breadcrumb.label}>\n                         <Link\n                             href='#'\n                             onClick={(e) => {\n                                 e.preventDefault();\n                                 breadcrumb.onClick?.(e);\n                             }}\n                             color={isLastBreadcrumb ? 'textPrimary' : 'inherit'}\n                             {...breadcrumb.linkProps}\n                         >\n                             {breadcrumb.label.length > 20 ? `${breadcrumb.label.slice(0, 20)}...` : breadcrumb.label}\n                         </Link>\n                     </Tooltip>\n                 );\n             })\n         }\n     </MuiBreadcrumbs>\n    );\n};\n\nexport default Breadcrumbs;","import React from 'react';\nimport DroppableDrawingList from '../../../pages/SpecDetail/DroppableDrawingList/DroppableDrawingList';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Spec} from '../../../models';\nimport EmptyView, {IGetEmptyViewProps} from '../../EmptyView';\nimport {useTranslation} from 'react-i18next';\nimport {AtsSvgDrawing} from '../../AtsSvg';\nimport {useTheme} from '@material-ui/core';\nimport {useSelector} from 'react-redux';\nimport {makeSelectConfigAtsSvgProps} from '../../../modules/AtsModule/selectors';\n\ninterface IEmptySpecProps extends Partial<IGetEmptyViewProps> {\n    spec: IMap<Spec>;\n}\nconst EmptySpec: React.FC<IEmptySpecProps> = ({\n    spec,\n    disabledAdd,\n    disabledAddTooltip,\n    ...props\n}) => {\n    const { t } = useTranslation('translations');\n    const isAi = spec.get('isAi');\n    const theme = useTheme();\n    const configAtsSvgProps = useSelector(makeSelectConfigAtsSvgProps());\n    return (\n        <DroppableDrawingList spec={spec}>\n            <EmptyView\n                emptyviewAddButton={t('SpecDetail.emptyviewButton')}\n                disabledAdd={disabledAdd ?? isAi}\n                disabledAddTooltip={disabledAddTooltip ?? t('generalTooltip.disabledForAiSpec')}\n                emptyviewAlt={t('SpecDetail.emptyviewAlt')}\n                emptyviewNotFound={t('SpecDetail.emptyviewProjectTitle')}\n                overRideStyles={{ noGrow: true }}\n                svg={\n                    <AtsSvgDrawing\n                        width='125'\n                        height='125'\n                        color={{\n                            backgroundColor: theme.palette.primary[200],\n                            shadowColor: theme.palette.primary[900]\n                        }}\n                        {...configAtsSvgProps}\n                    />\n                }\n                {...props}\n            />\n        </DroppableDrawingList>\n    );\n};\n\nexport default EmptySpec;","import {useTranslation} from 'react-i18next';\nimport {NotFound} from '../../index';\nimport {ReactComponent as LoadingImage} from '../../../images/loadingCart.svg';\nimport {LinearProgress, Typography} from '@material-ui/core';\nimport * as React from 'react';\n\nconst Loading = () => {\n    const { t } = useTranslation('translations');\n    return <NotFound\n        svgIcon={<LoadingImage />}\n        firstRow={<LinearProgress color='secondary' />}\n        secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n        paperContainer={false}\n    />;\n};\n\nexport default Loading;","import React, { createContext } from 'react';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Spec} from '../../../models';\n\ninterface ISpecContextType {\n    spec: IMap<Spec>;\n}\n\nconst Context = createContext<IMap<ISpecContextType>>(undefined);\n\nfunction SpecContext(props) {\n   return (\n       <Context.Provider {...props}>\n         {props.children}\n       </Context.Provider>\n   );\n}\n\nexport const useSpecContext = () => {\n    if (React.useContext(Context) === undefined) {\n        throw new Error('useSpecContext must be used within a SpecContext');\n    }\n    return React.useContext(Context);\n};\nexport default SpecContext;","import * as React from 'react';\n\n// True while the host page copies drawings into its spec or reloads the spec. The drawer's drag handles\n// and Import button are disabled then: the spec list is swapped for a spinner (or its empty view for the\n// list) and mounted again afterwards, and react-beautiful-dnd throws on drop when a Droppable mounted\n// during the drag (Sentry issue 7794853818).\nconst DrawerBusyContext = React.createContext<boolean>(false);\n\nexport const useDrawerBusy = () => React.useContext(DrawerBusyContext);\n\nexport default DrawerBusyContext;\n","import _ from 'lodash';\nimport { List } from 'immutable';\nimport {\n  AI_IDENTIFIED_PRODUCT_ID\n} from '../../constants';\nimport {STEP_CUSTOMER, STEP_ATTACHMENT} from './ShareQuoteConstant';\n\nconst checkIsDisabledForNextStep = (context) => {\n  switch (context.activeStep) {\n    case STEP_CUSTOMER: {\n      const { bidInvitationResponse } = context;\n      return bidInvitationResponse?.id ? false : true;\n    }\n    case STEP_ATTACHMENT: {\n      let disable = false;\n      const { generatePdfBid } = context;\n      if (generatePdfBid) {\n        disable = generatePdfBid.status === 'pending' || (generatePdfBid.status === 'complete' && !generatePdfBid.attachmentId);\n      } else {\n        disable = true;\n      }\n      return disable;\n    }\n    default: {\n      return false;\n    }\n  }\n};\n\nconst getQuoteProductByQuoteProductId = (sections, quoteProductId) => {\n  let targetedProductIndex = -1;\n  const targetedSectionIndex = sections.findIndex((section) => {\n    const products = section.get('products') || List([]);\n    targetedProductIndex = products.findIndex((product) => product.get('quoteProductId') === quoteProductId);\n    return targetedProductIndex !== -1;\n  });\n  if (targetedSectionIndex !== -1 && targetedProductIndex !== -1) {\n    const targetedProduct = sections.getIn([targetedSectionIndex, 'products', targetedProductIndex]);\n    return targetedProduct.set('sectionTitle', sections.getIn([targetedSectionIndex, 'sectionTitle']));\n  } else {\n    return null;\n  }\n};\n\nconst prepareBidResponseFormValue = (quote, quotePrintOG, customerId = null, draft) => {\n  if (!quote || !quotePrintOG) {\n    return null;\n  }\n  const applyDiscountQuoteProducts = [];\n  const quoteSections = quote.get('sections');\n  const sectionsWithoutDiscount = quotePrintOG.getIn(['quoteWithoutDiscount', 'sections']);\n  const customerSections = quotePrintOG.getIn(['quoteDiscountVariations', Number(customerId), 'sections']);\n\n  // sections based on contactId (customerId) from the quote\n  const shareQuoteSections = customerSections || sectionsWithoutDiscount || quoteSections || List([]);\n  // selectedProducts default print from quote product\n  shareQuoteSections.forEach((section) => {\n    const shareQuoteProducts = section.get('products');\n    if (shareQuoteProducts?.size > 0) {\n      shareQuoteProducts.forEach((shareQuoteProduct) => {\n        const hasDefaultPrint = shareQuoteProduct.getIn(\n          ['defaultPrint', customerId !== null ? `${customerId}` : 'default']\n        );\n        const quoteProductId = shareQuoteProduct.get('quoteProductId');\n        if (hasDefaultPrint && quoteProductId) {\n          const specProductId = shareQuoteProduct.getIn(['specToQuoteValues', 'specProductId']);\n          let matchProductNumber = null;\n          if (draft?.specToQuoteLinkedList) {\n            const specProduct = draft?.specToQuoteLinkedList[specProductId]?.specProduct;\n            if (specProduct) {\n              if (specProduct?.id === AI_IDENTIFIED_PRODUCT_ID) {\n                matchProductNumber = specProduct.identifiedProductNumber;\n              } else {\n                matchProductNumber = specProduct.productNumber;\n              }\n            }\n          }\n          const shareProduct = {\n            quoteProductId,\n            product: shareQuoteProduct\n          };\n          applyDiscountQuoteProducts.push(shareProduct);\n        }\n      });\n    }\n  });\n  return applyDiscountQuoteProducts;\n};\n\nconst extractNames = (filename) => {\n  // Split the filename by the underscore character\n  const parts = filename.split('_');\n\n  // Check if there are at least two parts (for first and last name)\n  if (parts.length >= 2) {\n    // The first part is assumed to be the first name\n    const firstName = parts[0];\n\n    // The second part is assumed to be the last name\n    const lastName = parts[1];\n\n    // Return an object with the extracted names\n    return { firstName, lastName };\n  } else {\n    // If the format doesn't match (e.g., not enough underscores),\n    // return null for both names\n    return { firstName: null, lastName: null };\n  }\n};\n\nconst getObjectHash = async (obj) => {\n  return obj.bidInvitationResponseId + '-' + obj.customerId;\n};\n\nconst displayUserName = (user) => {\n  if (user?.firstName || user?.lastName) {\n    return `${user?.firstName || ''} ${user?.lastName || ''}`.trim();\n  }\n  if (user?.email) {\n    return user.email;\n  }\n};\n\nconst checkBidProductDisable = (quoteProduct, productToMap, option) => {\n  if (quoteProduct?.get('uniquePackageId') || quoteProduct?.get('packageId')) {\n    return false;\n  } else {\n    const isDisabled = Object.values(productToMap).some((product: any) => product?.bidProductId === option.id);\n    return isDisabled;\n  }\n};\n\nconst isSelectedSuggestQuoteProduct = (suggestQuoteProducts, product) => {\n  const quoteProductId = product?.get('quoteProductId');\n  if (suggestQuoteProducts && quoteProductId) {\n    return suggestQuoteProducts?.some(suggestProduct => {\n      return suggestProduct.quoteProductId === quoteProductId;\n    });\n  }\n  return false;\n};\n\nconst getBidResponseSections = (bidInvitationResponse) => {\n  return bidInvitationResponse?.BidInvitation?.BidProducts?.reduce((acc, product) => {\n    const sectionId = product?.sectionId;\n    return !Boolean(acc.find((section) => section.id === sectionId)) ? acc.concat([{\n      id: sectionId,\n      sectionTitle: product.sectionTitle,\n    }]) : acc;\n  }, []);\n};\n\nconst getSuggestQuoteProduct = (quoteProduct, sectionName) => {\n  return {\n    quoteProductId: quoteProduct.get('quoteProductId'),\n    uniquePackageId: quoteProduct.get('uniquePackageId'),\n    packageId: quoteProduct.get('packageId'),\n    sectionTitle: sectionName,\n    productLabel: quoteProduct.get('label')\n  };\n};\n\nconst getAllSelectedSuggestProducts = (quote, bidResponseResult) => {\n  const suggestProducts = [];\n  const sections = quote?.get('sections')?.toJS();\n  if (bidResponseResult?.BidResponseProducts && sections?.length > 0) {\n    if (bidResponseResult?.attachSection) {\n      const attachSection = JSON.parse(bidResponseResult?.attachSection);\n      if (attachSection?.groupedSectionProducts?.length > 0) {\n        _.forEach(bidResponseResult?.BidResponseProducts, (bidResponseProduct) => {\n          const foundSuggest = attachSection?.groupedSectionProducts\n            .flatMap(section => section.products ?? [])\n            .flatMap(product => product.suggestAttachProducts ?? [])\n            .find(s => s?.matchAttachQuoteProductId === bidResponseProduct.quoteProductId);\n          for (const section of sections) {\n            const foundProduct = section?.products.find(\n              p => p.quoteProductId === bidResponseProduct.quoteProductId\n            );\n            if (foundProduct && foundSuggest) {\n              const suggestProduct = {\n                'quoteProductId': bidResponseProduct?.quoteProductId,\n                'uniquePackageId': foundProduct?.uniquePackageId,\n                'packageId': foundProduct?.packageId,\n                'specProductId': foundProduct?.specProductId,\n                'matchProductNumber': foundSuggest?.matchProductNumber,\n                'sectionTitle': section.sectionTitle,\n                'productLabel': foundProduct.label\n              };\n              suggestProducts.push(suggestProduct);\n              break;\n            }\n          }\n        });\n      }\n    }\n  }\n  return suggestProducts;\n};\n\nconst getTemplateFieldIds = (bidResponseResult) => {\n  if (bidResponseResult?.BidResponseProducts?.length > 0) {\n    const bidResponseProduct = bidResponseResult?.BidResponseProducts[0];\n    if (bidResponseProduct?.fieldsMapping) {\n      const fieldsMapping = JSON.parse(bidResponseProduct?.fieldsMapping);\n      if (fieldsMapping) {\n        return Object.values(fieldsMapping).map(item => item['id']);\n      }\n    }\n  }\n  return [];\n};\n\nconst ShareVendorQuoteUtil = {\n  checkIsDisabledForNextStep,\n  getQuoteProductByQuoteProductId,\n  prepareBidResponseFormValue,\n  extractNames,\n  getObjectHash,\n  displayUserName,\n  checkBidProductDisable,\n  isSelectedSuggestQuoteProduct,\n  getBidResponseSections,\n  getSuggestQuoteProduct,\n  getAllSelectedSuggestProducts,\n  getTemplateFieldIds,\n};\nexport default ShareVendorQuoteUtil;\n","export const STEP_CUSTOMER = 0;\nexport const STEP_ATTACHMENT = 1;\n","import React, { memo, useCallback, useEffect, useState } from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {List} from 'immutable';\nimport BidInvitationServiceApi from '../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport { makeSelectAppId, makeSelectEnv } from '../../modules/AtsModule/selectors';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { push } from 'connected-react-router';\n\nimport { createContext, useContextSelector } from 'use-context-selector';\nimport { makeSelectPrintQuoteFiles, selectFormValues } from '../../modules/QuoteModule/selectors';\n\nimport ShareVendorQuoteUtil from './ShareVendorQuoteUtil';\nimport AccountServiceApi from '../../modules/AccountModule/AccountServiceApi';\nimport { arrayPush, arrayRemove, change } from 'redux-form';\nimport _ from 'lodash';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport {AttachmentPdfQuotation} from '../AutoQuotationBidDetail/BidDetailConstant';\nimport QuoteServiceApi from '../../modules/QuoteModule/QuoteServiceApi';\nimport {STEP_ATTACHMENT, STEP_CUSTOMER} from './ShareQuoteConstant';\nimport {IBidResponseFormValues} from './ShareVendorInterface';\nimport {BID_INVITATION_DETAIL_ROOT_PATH} from '../../constants';\n\nexport const ShareVendorQuoteContext = createContext(null);\nexport const ShareVendorQuoteDispatch = createContext(null);\n\n\nconst ShareVendorQuoteContextProvider = ({ quote, onDownload, children, match }) => {\n  const { t } = useTranslation('translations');\n  const appId = useSelector(makeSelectAppId());\n  const env = useSelector(makeSelectEnv());\n  const quotePrintOG = useSelector(selectFormValues('quotePrintOG'));\n  const printQuoteFiles = useSelector(makeSelectPrintQuoteFiles());\n  const quoteId = quote?.get('id');\n  const dispatch = useDispatch();\n\n  const [activeStep, setActiveStep] = useState(STEP_CUSTOMER);\n  const [bidResponseFormValues, setBidResponseFormValues] = useState<IBidResponseFormValues>(null);\n\n  const [bidInvitationResponseId, setBidInvitationResponseId] = useState(null);\n  const [bidInvitationResponse, setBidInvitationResponse] = useState(null);\n\n  const [bidResponseEmailSetting, setBidResponseEmailSetting] = useState(null);\n\n  const [isLoadingShare, setIsLoadingShare] = useState(false);\n  const [generatePdfBid, setGeneratePdfBid] = useState(null);\n  const [complete, setComplete] = useState(false);\n  const [draft, setDraft] = useState(null);\n\n  const getInit = useCallback(async (attachQuote, invitationId) => {\n    const userType = 'qc';\n    const bidResponseResult = await BidInvitationServiceApi.fetchOneDetailResponse(env, appId, invitationId, userType);\n    if (bidResponseResult?.status === 'pending') {\n      const quoteConnectBidEmailSettingResult = await AccountServiceApi.fetchPreference(env, appId, 'quoteConnectBidEmailSetting');\n      setBidResponseEmailSetting(quoteConnectBidEmailSettingResult);\n      const responseDraft = await QuoteServiceApi.getDraft(env, appId, quoteId);\n      setDraft(responseDraft);\n      setBidInvitationResponse(bidResponseResult);\n      const selectedFields = ShareVendorQuoteUtil.getTemplateFieldIds(bidResponseResult);\n      const suggestQuoteProducts = ShareVendorQuoteUtil.getAllSelectedSuggestProducts(attachQuote, bidResponseResult);\n      setBidResponseFormValues({\n        id: invitationId,\n        appliedDiscount: null,\n        suggestQuoteProducts,\n        selectedFields,\n        applyDiscountQuoteProducts: [],\n        subject: quoteConnectBidEmailSettingResult?.subject,\n        description: quoteConnectBidEmailSettingResult?.description,\n        termAndCondition: '',\n        BidInvitationResponseAttachments: []\n      });\n    }\n  }, [quoteId]);\n\n  useEffect(() => {\n    if (activeStep === STEP_ATTACHMENT) {\n      checkReGeneratePdf(bidResponseFormValues, generatePdfBid);\n    }\n  }, [activeStep]);\n\n  useEffect(() => {\n    let invitationId = null;\n    if (match?.params?.bid) {\n      invitationId = Number(match?.params?.bid);\n    }\n    if (quoteId) {\n      setBidInvitationResponseId(invitationId);\n      getInit(quote, invitationId);\n    }\n  }, [quoteId]);\n\n  const checkReGeneratePdf = useCallback(async (formValues: any, generatePdfBidsFile: any) => {\n      const bid = formValues.id;\n      const downloadObj = {\n        isSharingQuote: true,\n        customerId: formValues.appliedDiscount,\n        bidInvitationResponseId: bid,\n        suggestQuoteProducts: formValues.suggestQuoteProducts,\n        selectedFields: formValues.selectedFields,\n      };\n      const pdfHash = await ShareVendorQuoteUtil.getObjectHash(downloadObj);\n      if (generatePdfBidsFile) {\n        // check same has otherwise need to regenerate\n        if (generatePdfBidsFile.pdfHash !== pdfHash) {\n          setGeneratePdfBid(prev => {\n            if (prev.pdfHash === pdfHash) {\n              return prev;\n            }\n            const newPdf = { ...prev, pdfHash, downloadObj, attachmentId: '', fileName: '', status: 'pending'};\n            return newPdf;\n          });\n        }\n      } else {\n        const pdfData = {\n          bid,\n          pdfHash,\n          downloadObj,\n          attachmentId: '',\n          fileName: '',\n          status: 'pending'\n        };\n        setGeneratePdfBid(pdfData);\n      }\n\n  }, []);\n\n  const handleOnNextStep = useCallback(() => {\n    setActiveStep((prev) => prev + 1);\n  }, []);\n\n  const handleOnBackStep = useCallback(() => {\n    setActiveStep((prev) => prev - 1);\n  }, []);\n\n  const handleOnCancel = useCallback(() => {\n    setActiveStep(STEP_CUSTOMER);\n    dispatch(push(BID_INVITATION_DETAIL_ROOT_PATH + `/${bidInvitationResponseId}`));\n  }, [bidInvitationResponseId]);\n\n  const handleOnDownloadQuotePrint = useCallback(() => {\n    const downloadData = {\n      isSharingQuote: true,\n      customerId: bidResponseFormValues?.appliedDiscount || null,\n      bidInvitationResponseId: bidResponseFormValues.id,\n      suggestQuoteProducts: bidResponseFormValues?.suggestQuoteProducts || [],\n      selectedFields: bidResponseFormValues?.selectedFields || [],\n    };\n    onDownload(downloadData);\n  }, [bidResponseFormValues, onDownload]);\n\n  const handleClearDiscount = useCallback(() => {\n    setBidResponseFormValues((prev) => {\n      const newFormValues = {\n        ...prev,\n        appliedDiscount: null,\n        applyDiscountQuoteProducts: []\n      };\n      return newFormValues;\n    });\n    resetPdfBids();\n  }, [quote, quotePrintOG, draft]);\n\n  const handleOnApplyDiscount = useCallback((customerId) => {\n    customerId = Number(customerId);\n    let applyDiscountQuoteProducts = [];\n    if (customerId) {\n      applyDiscountQuoteProducts = ShareVendorQuoteUtil.prepareBidResponseFormValue(quote, quotePrintOG, customerId, draft);\n    }\n    setBidResponseFormValues((prev) => {\n      const updatedFormValues = _.cloneDeep(prev);\n      if (!updatedFormValues?.appliedDiscount || updatedFormValues.appliedDiscount !== customerId) {\n        if (!quotePrintOG.getIn(['customers', Number(customerId)])) {\n          dispatch(arrayPush('quotePrintOG', 'customers', Number(customerId)));\n        } else {\n          const customerIndex = quotePrintOG.get('customers').findIndex((_customerId => _customerId === Number(customerId)));\n          if (customerIndex !== -1) {\n            dispatch(arrayRemove('quotePrintOG', 'customers', customerIndex));\n          }\n        }\n        const newFormValues = {\n          ...prev,\n          appliedDiscount: customerId,\n          applyDiscountQuoteProducts\n        };\n        return newFormValues;\n      } else {\n        const customerIndex = quotePrintOG.get('customers').findIndex((_customerId => _customerId === updatedFormValues.appliedDiscount));\n        if (customerIndex !== -1) {\n          dispatch(arrayRemove('quotePrintOG', 'customers', customerIndex));\n        }\n      }\n      return prev;\n    });\n    resetPdfBids();\n  }, [quote, quotePrintOG, draft]);\n\n  const handleOnFormValuesChange = useCallback((field, value) => {\n    setBidResponseFormValues((prev) => {\n      const newFormValues = {\n        ...prev,\n        [field]: value,\n      };\n      return newFormValues;\n    });\n  }, []);\n\n  const resetPdfBids = () => {\n    setGeneratePdfBid(null);\n    handleOnFormAttachmentsChange('remove_pdf_quotation', {});\n  };\n\n  const handleUpdateReGeneratePdf = (generatePdfData) => {\n    setGeneratePdfBid(prev => {\n      const updatedPdfData = { ...prev, ...generatePdfData};\n      return updatedPdfData;\n    });\n  };\n\n  const handleOnFormAttachmentsChange = useCallback((action: string, attachmentsData: any) => {\n    setBidResponseFormValues((prev) => {\n      let bidInvitationResponseAttachments = prev?.BidInvitationResponseAttachments ?? [];\n      if (action === 'add' && attachmentsData?.attachmentId) {\n        bidInvitationResponseAttachments = bidInvitationResponseAttachments.filter((attachment) => attachment.attachmentId !== attachmentsData.attachmentId);\n        bidInvitationResponseAttachments.push(attachmentsData);\n      }\n      if (action === 'remove') {\n        bidInvitationResponseAttachments = bidInvitationResponseAttachments.filter((attachment) => attachment.attachmentId !== attachmentsData);\n      }\n      if (action === 'update_pdf_quotation' && attachmentsData?.attachmentId) {\n        bidInvitationResponseAttachments = bidInvitationResponseAttachments.filter((attachment) => attachment.type !== AttachmentPdfQuotation);\n        bidInvitationResponseAttachments.push(attachmentsData);\n      }\n      if (action === 'remove_pdf_quotation') {\n        bidInvitationResponseAttachments = bidInvitationResponseAttachments.filter((attachment) => attachment.type !== AttachmentPdfQuotation);\n      }\n      const updatedFormValues = {\n        ...prev,\n        BidInvitationResponseAttachments: bidInvitationResponseAttachments,\n      };\n      return updatedFormValues;\n    });\n  }, []);\n\n  const handleOnComplete = useCallback(() => {\n    dispatch(push(`/quote/${quoteId}`));\n  }, [quoteId, dispatch]);\n\n\n  const handleOnSubmit = useCallback(async () => {\n    setIsLoadingShare(true);\n    const subject = bidResponseFormValues.subject || null;\n    const description = bidResponseFormValues.description || null;\n    const repExtraInfo = bidResponseEmailSetting ? JSON.stringify(bidResponseEmailSetting) : '{}';\n    const bidInvitationResponseAttachments = bidResponseFormValues.BidInvitationResponseAttachments || [];\n\n    const result = {\n      termsAndConditions: '',\n      specialTerms: '',\n      comments: '',\n      subject: subject || '',\n      description: description || '',\n      repExtraInfo: repExtraInfo || '{}',\n      BidInvitationResponseAttachments: bidInvitationResponseAttachments,\n      status: 'submitted',\n    };\n    const bidResponseProducts = [];\n    _.forEach(bidInvitationResponse?.BidResponseProducts, (item) => {\n      const quoteProduct = selectQuoteProductByCustomerIdAndQuoteProductId(contextValue, bidResponseFormValues?.appliedDiscount, item.quoteProductId);\n      if (quoteProduct) {\n        const selectedFields = JSON.parse(item?.fieldsMapping);\n        const fieldsMapping = Object.values(selectedFields).reduce((acc: { [key: string]: any }, field: any) => {\n          const templateCells = quoteProduct.get('templateCells');\n          const value = templateCells?.find((cell) => cell.get('id') === field.id)?.get('fieldValue') || null;\n          const name = templateCells?.find((cell) => cell.get('id') === field.id)?.get('name') || null;\n          const key = templateCells?.find((cell) => cell.get('id') === field.id)?.get('fieldName') || null;\n          if (!templateCells || !key) {\n            return acc;\n          }\n          acc[key] = {\n            name,\n            value\n          };\n          return acc;\n        }, {});\n        const bidResponseProduct = {\n          bidInvitationProductId: item.bidInvitationProductId,\n          productId: Number(item.productId),\n          quoteProductId: item.quoteProductId,\n          description: item?.description || '',\n          note: item?.note || '',\n          fieldsMapping: JSON.stringify(fieldsMapping)\n        };\n        bidResponseProducts.push(bidResponseProduct);\n      }\n    });\n    result['BidResponseProducts'] = bidResponseProducts;\n    const saveResult = await BidInvitationServiceApi.update(env, appId, Number(bidInvitationResponseId), result);\n    if (saveResult['payload']?.msquoteconnect?.id) {\n      setComplete(true);\n    } else {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('pricingRequests.saveShareVendorQuoteFailed'),\n        severity: 'error',\n        anchorOrigin: {\n          vertical: 'bottom',\n          horizontal: 'center'\n        }\n      }));\n    }\n    setIsLoadingShare(false);\n  }, [bidResponseFormValues, quote, bidResponseEmailSetting]);\n\n  const contextValue = {\n    complete,\n    activeStep,\n    quote,\n    quotePrintOG,\n    draft,\n    bidInvitationResponseId,\n    bidResponseFormValues,\n    bidInvitationResponse,\n    generatePdfBid,\n    isLoadingShare,\n    bidResponseEmailSetting\n  };\n\n  const dispatchValue = {\n    onNextStep: handleOnNextStep,\n    onBackStep: handleOnBackStep,\n    onCancel: handleOnCancel,\n    onSubmit: handleOnSubmit,\n    onFormValuesChange: handleOnFormValuesChange,\n    onFormAttachmentsChange: handleOnFormAttachmentsChange,\n    onApplyDiscount: handleOnApplyDiscount,\n    onDownloadQuotePrint: handleOnDownloadQuotePrint,\n    onClearDiscount: handleClearDiscount,\n    notifyUpdateReGeneratePdf: handleUpdateReGeneratePdf,\n    onComplete: handleOnComplete,\n  };\n\n  return (\n    <ShareVendorQuoteContext.Provider value={contextValue}>\n      <ShareVendorQuoteDispatch.Provider value={dispatchValue}>\n        {children}\n      </ShareVendorQuoteDispatch.Provider>\n    </ShareVendorQuoteContext.Provider>\n  );\n};\n\nexport default memo(ShareVendorQuoteContextProvider);\n\nexport function selectIsComplete(context) {\n  return context?.complete || false;\n}\n\nexport function selectBidResponseEmailSetting(context) {\n  return context.bidResponseEmailSetting;\n}\n\nexport function selectIsDisabledForNextStep(context) {\n  return ShareVendorQuoteUtil.checkIsDisabledForNextStep(context);\n}\n\n// should move to utils ????\n\nexport function selectIsLoadingShare(context) {\n  return context.isLoadingShare;\n}\n\nexport function selectActiveStep(context) {\n  return context.activeStep;\n}\n\n\nexport function selectBidResponseFormValuesByField(context, field) {\n  return context.bidResponseFormValues?.[field] || null;\n}\n\nexport function selectBidResponseFormValues(context) {\n  return context.bidResponseFormValues || null;\n}\n\nexport function selectSelectedCustomers(context) {\n  return context.selectedCustomers;\n}\n\nexport function selectBidInvitationResponse(context) {\n  return context.bidInvitationResponse || null;\n}\n\nexport function selectGeneratePdfBid(context) {\n  return context.generatePdfBid;\n}\n\nexport function selectQuoteProductByCustomerIdAndQuoteProductId(context, customerId, quoteProductId) {\n  const quoteSections = context.quote.get('sections');\n  const sectionsWithoutDiscount = context.quotePrintOG.getIn(['quoteWithoutDiscount', 'sections']);\n  const customerSections = context.quotePrintOG.getIn(['quoteDiscountVariations', Number(customerId), 'sections']);\n\n  const sections = customerSections || sectionsWithoutDiscount || quoteSections || List([]);\n  return ShareVendorQuoteUtil.getQuoteProductByQuoteProductId(sections, quoteProductId) || null;\n}\n\nexport function useShareVendorQuoteContextSelector(selector) {\n  return useContextSelector(ShareVendorQuoteContext, selector) as any;\n}\n\n\n\n","import React, { memo } from 'react';\nimport {useTranslation} from 'react-i18next';\nimport { AppBar, Box, Button, CircularProgress, makeStyles, Step, StepLabel, Stepper } from '@material-ui/core';\n\nimport {\n  selectActiveStep,\n  selectBidInvitationResponse,\n  selectIsComplete,\n  selectIsDisabledForNextStep,\n  selectIsLoadingShare,\n  ShareVendorQuoteDispatch,\n  useShareVendorQuoteContextSelector\n} from './ShareVendorQuoteContextProvider';\nimport { useContextSelector } from 'use-context-selector';\n\nconst useStyles = makeStyles((theme) => ({\n  appBar: {\n    width: '100%',\n    position: 'sticky',\n    backgroundColor: theme.palette.grey[300],\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n  },\n  stepper: {\n    maxHeight: 50,\n    width: '80%',\n    backgroundColor: theme.palette.grey[300],\n  },\n  button: {\n    marginRight: theme.spacing(2),\n  },\n  step: {\n    display: 'flex',\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n  },\n}));\n\nconst StepperBar = () => {\n  const { t } = useTranslation('translations');\n  const { appBar, stepper, button } = useStyles();\n  const stepLabels = [\n    t('pricingRequests.shareQuoteApplyCustomerDiscount'),\n    t('pricingRequests.attachmentsComments')\n  ];\n  const bidInvitationResponse = useShareVendorQuoteContextSelector(context => selectBidInvitationResponse(context));\n\n  const activeStep = useShareVendorQuoteContextSelector(selectActiveStep);\n  const isLoadingShare = useShareVendorQuoteContextSelector(selectIsLoadingShare);\n  const { onNextStep, onBackStep, onCancel, onSubmit, onComplete } = useContextSelector(ShareVendorQuoteDispatch, context => context);\n  const isLastStep = activeStep === stepLabels.length - 1;\n  const isDisabledNextButton = useShareVendorQuoteContextSelector(selectIsDisabledForNextStep);\n  const isComplete = useShareVendorQuoteContextSelector(selectIsComplete);\n\n  return (\n    <>\n      {(bidInvitationResponse) &&\n        <AppBar\n          classes={{ root: appBar }}\n          elevation={0}\n          id='stepper-bar'\n        >\n          {\n          !isComplete && (\n          <Stepper activeStep={activeStep} classes={{ root: stepper }}>\n            {stepLabels.map((label, index) => {\n              return (\n                <Step key={label} >\n                  <StepLabel>{stepLabels[index]}</StepLabel>\n                </Step>\n              );\n            })}\n          </Stepper>\n          )\n        }\n\n          <Box width={isComplete ? '100%' : null} flexDirection={'row'} display='flex' justifyContent='flex-end' alignItems='center'>\n            {\n              !isComplete && (\n                <Button\n              classes={{ root: button }}\n              variant='text'\n              color='primary'\n              onClick={onCancel}\n            >\n                  {t('formButtons.cancel')}\n            </Button>\n              )\n            }\n            {\n              !isComplete && activeStep !== 0 && (\n                <Button\n                  classes={{ root: button }}\n                  variant='text'\n                  color='primary'\n                  onClick={onBackStep}\n                >\n                  {t('formButtons.back')}\n                </Button>\n              )\n            }\n            <Button\n              classes={{ root: button }}\n              variant='contained'\n              color='primary'\n              onClick={isComplete ? onComplete : isLastStep ? onSubmit : onNextStep}\n              disabled={isComplete ? false : (isLoadingShare || isDisabledNextButton)}\n              startIcon={isLoadingShare && <CircularProgress size={24} />}\n            >\n              {\n                isComplete ? t('pricingRequests.complete') : isLastStep ? t('pricingRequests.share') : t('formButtons.next')\n              }\n            </Button>\n          </Box>\n\n        </AppBar>\n      }\n    </>\n  );\n};\n\nexport default memo(StepperBar);\n","import React, {useEffect, useState} from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {Grid, IconButton, LinearProgress, Link, Paper, Theme, Typography} from '@material-ui/core';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {useTranslation} from 'react-i18next';\nimport {grey} from '@material-ui/core/colors';\nimport Dropzone, {DropEvent} from 'react-dropzone';\nimport {Image} from '../index';\nimport {SetSnackbarOpenAction, ShowPhotoPreviewAction} from '../../modules/ApplicationModule/actions';\nimport useFileUpload from '../../hooks/useFileUpload';\nimport {useDispatch} from 'react-redux';\n\nexport interface IFileUploadProps {\n  suggestions: string[];\n  showPhotoPreview: boolean;\n  initialFileId: string;\n  acceptFileTypes: any;\n  notifyUploadChange: (uploadFileId: string, fileName?: string, fileSize?: number) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  root: {\n    background: grey[100],\n    border: `${theme.spacing(0.25)}px dashed ${grey[300]}`,\n    padding: theme.spacing(2),\n    height: 0,\n    minHeight: 160,\n    flexGrow: 1,\n    cursor: 'pointer'\n  },\n  imagePreview: {\n    maxHeight: '100%',\n    maxWidth: '100%'\n  },\n  container: {\n    flexGrow: 1,\n  },\n  initialImage: {\n    height: '100%'\n  },\n  dropFile: {\n    color: 'rgba(0, 0, 0, 0.87)'\n  },\n  browseFile: {\n    textTransform: 'uppercase'\n  },\n  suggestion: {\n    color: 'rgba(0,0,0,0.6)',\n    textAlign: 'center'\n  },\n  dropzone: {\n    width: '100%',\n    flex: '1',\n    display: 'flex',\n    minHeight: 180,\n    maxHeight: 200,\n    flexDirection: 'column',\n    alignItems: 'center',\n    borderWidth: theme.spacing() * 0.25,\n    borderColor: '#eeeeee',\n    borderStyle: 'dashed',\n    backgroundColor: '#fafafa',\n    color: '#bdbdbd',\n    outline: 'none',\n    transition: 'border .24s ease-in-out',\n  },\n  dropzoneImageContainer: {\n    overflow: 'hidden',\n    width: '100%',\n  },\n\n}));\n\nconst FileDropZone: React.FC<IFileUploadProps> = ({\n                                                    suggestions,\n                                                    showPhotoPreview,\n                                                    initialFileId,\n                                                    acceptFileTypes,\n                                                    notifyUploadChange\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const [loadingState, setLoadingState] = useState(null);\n  const [fileId, setFileId] = useState(null);\n  const [error, setError] = useState(null);\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setUploadErr,\n    setFile\n  } = useFileUpload(acceptFileTypes);\n\n  useEffect(() => {\n    if (showPhotoPreview) {\n      if (initialFileId) {\n        setFileId(initialFileId);\n      }\n    }\n  }, [initialFileId]);\n\n  useEffect(() => {\n    if (uploadedFile) {\n      const uploadFileId = uploadedFile.get('id');\n      const origFileName = uploadedFile.get('origFileName');\n      if (uploadFileId) {\n        setFileId(uploadFileId);\n        notifyUploadChange(uploadFileId, origFileName, Number(uploadedFile.get('size')) || undefined);\n      }\n    }\n  }, [uploadedFile]);\n\n  useEffect(() => {\n    if (uploadErr) {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('pricingRequests.fileUploadTryError'),\n        severity: 'error',\n      }));\n    }\n  }, [uploadErr]);\n\n  const defaultOnDropAccepted = (fileArray: File[], event: DropEvent) => {\n    setFile(fileArray[0]);\n  };\n\n  return (\n    <Grid container={true} direction='column' justify='center' alignItems='center' className={classes.container}>\n      {(isUploading) &&\n        <>\n          <LinearProgress\n            variant='determinate'\n            value={Number(loadingPercentage)}\n            color='secondary'\n            style={{flexGrow: 1}}\n          />\n          <Typography>{loadingPercentage}%</Typography>\n        </>\n      }\n      {(loadingState === 'processing') &&\n        <Typography>{t('uploadPhoto.processing')}</Typography>\n      }\n\n      <Dropzone\n        onDropAccepted={defaultOnDropAccepted}\n        multiple={false}\n      >\n        {({ getRootProps, getInputProps }) => (\n          <Grid className={classes.root} container={true} alignItems='center' justify='center' wrap='nowrap' {...getRootProps()}>\n            <input {...getInputProps()} />\n            {(showPhotoPreview && fileId) &&\n              <Image\n                src={fileId}\n                fromService={true}\n                className={classes.initialImage}\n              />\n            }\n            {(!fileId || !showPhotoPreview) &&\n              <Grid container={true} justify='center' alignContent='center'>\n                <Grid item={true}>\n                  <CloudUploadIcon fontSize='large' color='disabled' />\n                </Grid>\n                <Grid container={true} item={true} direction='column' alignItems='center'>\n                  <Grid item={true}>\n                    <Typography className={classes.dropFile}>{t('uploadPhoto.dropFile')}</Typography>\n                  </Grid>\n                  <Grid item={true}>\n                    <Link underline='none' color='primary' className={classes.browseFile}>\n                      {t('uploadPhoto.browseFile')}\n                    </Link>\n                  </Grid>\n                  {suggestions.map((suggestText, index) => (\n                    <Grid key={`suggest-${index}`} item={true}>\n                      <Typography variant='caption' className={classes.suggestion}>{suggestText}</Typography>\n                    </Grid>\n                  ))}\n                </Grid>\n              </Grid>\n            }\n          </Grid>\n        )}\n      </Dropzone>\n      {error &&\n        <Typography color='error'>{error}</Typography>\n      }\n\n    </Grid >\n\n  );\n};\nexport default  FileDropZone;","import React, { memo, useCallback, useEffect, useState } from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {\n  ShareVendorQuoteDispatch,\n  useShareVendorQuoteContextSelector,\n  selectBidInvitationResponse,\n  selectBidResponseEmailSetting,\n  selectGeneratePdfBid, selectBidResponseFormValues,\n} from './ShareVendorQuoteContextProvider';\nimport { useContextSelector } from 'use-context-selector';\nimport {useDispatch, useSelector} from 'react-redux';\nimport { makeSelectPrintQuoteFiles } from '../../modules/QuoteModule/selectors';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { IS_PRODUCTION } from '../../constants';\nimport {\n  Avatar,\n  Box,\n  Button,\n  CircularProgress,\n  Grid,\n  IconButton,\n  Link,\n  makeStyles,\n  TextField,\n  Toolbar,\n  Typography\n} from '@material-ui/core';\n\nimport ClearIcon from '@material-ui/icons/Clear';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { Image } from '../../components';\n\nimport FileDropZone from '../../components/FileUpload/FileDropZone';\nimport {AttachmentPdfQuotation, AttachmentReplyEmailType} from '../AutoQuotationBidDetail/BidDetailConstant';\nimport { ResetPrintShareVendorQuoteAction } from  '../../modules/PrintModule/actions';\n\nconst useStyles = makeStyles((theme) => ({\n  toolbar: {\n    padding: 0,\n    marginBottom: theme.spacing(2),\n  },\n  prevButton: {\n    marginRight: theme.spacing(1),\n  },\n  nextButton: {\n    marginLeft: theme.spacing(1),\n  },\n  emailImage: {\n    borderRight: '1px solid #BDBDBD',\n  },\n  avatarContainer: {\n    minWidth: '100%',\n    width: `calc(100% - ${theme.spacing(10)}px)`,\n    [theme.breakpoints.down(1042)]: {\n      width: '100%'\n    }\n  },\n  avatarTitleContainer: {\n    paddingTop: theme.spacing(),\n    paddingBottom: theme.spacing(),\n    width: theme.spacing(25)\n  },\n  uploadPhoto: {\n    height: theme.spacing(25),\n    width: theme.spacing(25)\n  },\n  deleteIconContainer: {\n    textAlign: 'right',\n    justify: 'right'\n  },\n  attachmentContainer: {\n    paddingTop: theme.spacing() * 2,\n    maxWidth: 300,\n  },\n  attachmentLabel: {\n    color: theme.palette.primary.main,\n    paddingBottom: theme.spacing(2)\n  },\n}));\n\nconst AttachmentsAndComments = ({ onDownload }) => {\n  const { t } = useTranslation('translations');\n\n  const classes = useStyles();\n  const atsApi = useAtsApi();\n  const atsApiIdentity = useSelector(makeSelectAtsApiState('identity'));\n  const dispatch = useDispatch();\n  const printQuoteFiles = useSelector(makeSelectPrintQuoteFiles());\n\n  const bidResponseEmailSetting = useShareVendorQuoteContextSelector(selectBidResponseEmailSetting);\n  const onFormValuesChange = useContextSelector(ShareVendorQuoteDispatch, context => context.onFormValuesChange);\n  const onFormAttachmentsChange = useContextSelector(ShareVendorQuoteDispatch, context => context.onFormAttachmentsChange);\n  const notifyUpdateReGeneratePdf = useContextSelector(ShareVendorQuoteDispatch, context => context.notifyUpdateReGeneratePdf);\n\n  const bidInvitationResponse = useShareVendorQuoteContextSelector(context => selectBidInvitationResponse(context));\n  const bidResponseFormValues = useShareVendorQuoteContextSelector(context => selectBidResponseFormValues(context));\n\n  const generatePdfBid = useShareVendorQuoteContextSelector(context => selectGeneratePdfBid(context));\n\n  const subject = bidResponseFormValues?.subject || '';\n  const description = bidResponseFormValues?.description || '';\n  const attachments = bidResponseFormValues?.BidInvitationResponseAttachments || [];\n  const [downFilesHash, setDownFilesHash] = useState([]);\n  const userName = bidInvitationResponse?.BidInvitation?.User?.firstName + ' ' + bidInvitationResponse?.BidInvitation?.User?.lastName || '-';\n  const userEmail = bidInvitationResponse?.BidInvitation?.User?.email || '-';\n\n  useEffect(() => {\n    if (generatePdfBid) {\n      if (generatePdfBid?.downloadObj && !generatePdfBid?.attachmentId && generatePdfBid?.status !== 'clear') {\n        if (!downFilesHash.includes(generatePdfBid.pdfHash)) {\n          setDownFilesHash(prev => [...prev, generatePdfBid.pdfHash]);\n          onDownload(generatePdfBid?.downloadObj);\n        }\n      }\n    }\n  }, [generatePdfBid]);\n\n  useEffect(() => {\n    if (printQuoteFiles.size > 0 && generatePdfBid) {\n      const fileId = printQuoteFiles.getIn([generatePdfBid.bid, 'quote', -1, 'fileId']);\n      const fileName = printQuoteFiles.getIn([generatePdfBid.bid, 'quote', -1, 'filename']);\n      const printStatus = printQuoteFiles.getIn([generatePdfBid.bid, 'quote', -1, 'status']);\n      let isRefreshFile = false;\n      if (!(generatePdfBid?.attachmentId === fileId && generatePdfBid?.status === 'clear')) {\n        isRefreshFile = true;\n      }\n      if (isRefreshFile && fileId && fileName && printStatus === 'complete') {\n        const pdfAttachment = {\n          attachmentId: fileId,\n          type: AttachmentPdfQuotation,\n          origFileName: fileName,\n        };\n        onFormAttachmentsChange('update_pdf_quotation', pdfAttachment);\n        let fileLink = '';\n        try {\n          fileLink = atsApi.callApi(fileId, {\n            service: 'file',\n            endpoint: 'getFile',\n            urlOnly: true,\n            suppressErrors: IS_PRODUCTION,\n            withToken: true,\n            withAppId: true\n          }) as string;\n        } catch (e) {\n          console.error('filesrc fail', {//tslint:disable-line\n            atsApi,\n          });\n          console.error(e);//tslint:disable-line\n        }\n        const generatePdfData = {\n          bid: generatePdfBid.bid,\n          attachmentId: fileId,\n          fileName,\n          fileLink,\n          status: 'complete'\n        };\n        notifyUpdateReGeneratePdf(generatePdfData);\n        dispatch(new ResetPrintShareVendorQuoteAction({bidInvitationResponseId: generatePdfBid.bid}));\n      }\n    }\n  }, [printQuoteFiles]);\n\n  const handleRegeneratePdf = () => {\n    const generatePdfData = {\n      bid: bidInvitationResponse.id,\n      attachmentId: null,\n      status: 'pending'\n    };\n    notifyUpdateReGeneratePdf(generatePdfData);\n    if (generatePdfBid?.downloadObj) {\n      onDownload(generatePdfBid?.downloadObj);\n    }\n  };\n\n  const handleSubjectChange = useCallback((event) => {\n    onFormValuesChange('subject', event.target.value);\n  }, []);\n\n  const handleDescriptionChange = useCallback((event) => {\n    onFormValuesChange('description', event.target.value);\n  }, []);\n\n  const handleOnClearFile = useCallback((attachmentId, pdfHash) => {\n    onFormAttachmentsChange('remove_pdf_quotation', attachmentId);\n    const generatePdfData = {\n      bid: bidInvitationResponse.id,\n      attachmentId,\n      fileName: '',\n      fileLink: '',\n      status: 'clear'\n    };\n    notifyUpdateReGeneratePdf(generatePdfData);\n    setDownFilesHash(prev => [...prev, pdfHash]);\n  }, []);\n\n  const handleUploadChange = (fileId, origFileName = '') => {\n    const uploadFile = {\n      attachmentId: fileId,\n      origFileName,\n      type: AttachmentReplyEmailType\n    };\n    onFormAttachmentsChange('add', uploadFile);\n  };\n\n  const handleRemoveAttachment = async (attachmentId) => {\n    onFormAttachmentsChange('remove', attachmentId);\n  };\n\n  return (\n    <>\n      <Toolbar className={classes.toolbar}>\n        <Grid container={true} spacing={2}>\n          <Grid item={true} xs={12}>\n            <Typography>\n              {t('pricingRequests.vendorQuotationShareTo')}\n            </Typography>\n          </Grid>\n\n          <Grid item={true} xs={true}>\n            <Avatar style={{ width: '56px', height: '56px' }}/>\n          </Grid>\n          <Grid item={true} xs={11}>\n            <Grid container={true}>\n              <Grid item={true} xs={12}>\n                <Typography variant='h6'>\n                  {userName}\n                </Typography>\n              </Grid>\n              <Grid item={true} xs={12}>\n                <Typography variant='subtitle1'>\n                  {userEmail}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n      </Toolbar >\n\n      <TextField\n        label={t('vendorQuotationBidEmail.subject')}\n        value={subject || ''}\n        fullWidth={true}\n        onChange={handleSubjectChange}\n      />\n\n      <TextField\n        label={t('vendorQuotationBidEmail.description')}\n        value={description || ''}\n        fullWidth={true}\n        multiline={true}\n        rowsMax={6}\n        onChange={handleDescriptionChange}\n      />\n\n      <Typography style={{ marginTop: 16 }} variant='subtitle1'>\n        {t('pricingRequests.regards')},\n      </Typography>\n\n      <Grid container={true} justify='space-around' alignItems='center'>\n        <Grid item={true} xs={true} className={classes.emailImage}>\n          <Image\n            src={bidResponseEmailSetting?.imageId || 'undefined'}\n            width={'120px;'}\n            margin={'8px'}\n            fromService={true}\n            aspectRatio='100%'\n          />\n        </Grid>\n\n        <Grid item={true} xs={10}>\n          <Grid container={true} justify='space-between' spacing={2}>\n            <Grid item={true} xs={12}>\n              <Typography variant={'h6'}>\n                {bidResponseEmailSetting?.name}\n              </Typography>\n            </Grid>\n            <Grid item={true} xs={12}>\n              <Typography variant={'body2'}>\n                {bidResponseEmailSetting?.role}\n              </Typography>\n            </Grid>\n\n            <Grid item={true} xs={12}>\n              <Typography variant={'body2'} style={{ whiteSpace: 'pre-line' }}>\n                {bidResponseEmailSetting?.info}\n              </Typography>\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n\n      <Grid container={true} justify='flex-start' spacing={2}>\n        <Grid item={true} className={classes.avatarTitleContainer}>\n          <Typography>\n            {t('pricingRequests.attachments')}\n          </Typography>\n        </Grid>\n      </Grid>\n      <Grid container={true} spacing={2} direction='column'>\n        <Grid item={true} className={classes.avatarTitleContainer}>\n          <FileDropZone\n            key={'upload-file'}\n            suggestions={[]}\n            showPhotoPreview={false}\n            initialFileId={null}\n            acceptFileTypes={[]}\n            notifyUploadChange={handleUploadChange}\n          />\n        </Grid>\n      </Grid>\n      <Grid container={true}  alignItems='flex-start' justify='space-between' className={classes.attachmentContainer}>\n        {attachments && attachments.filter((attachment) => attachment.type === AttachmentReplyEmailType)\n          .map((attachment) => (\n            <React.Fragment key={'reply-email-' + attachment.attachmentId}>\n              <Grid item={true} xs={11}>\n                <Typography variant='subtitle1'  color='textPrimary' className={classes.attachmentLabel}>{attachment?.origFileName}</Typography>\n              </Grid>\n              <Grid item={true} xs={1}>\n                <IconButton onClick={() => handleRemoveAttachment(attachment.attachmentId)} size='small'>\n                  <DeleteIcon fontSize='small'/>\n                </IconButton>\n              </Grid>\n            </React.Fragment>\n          ))}\n      </Grid>\n\n      <Typography variant='body2'>\n        {t('pricingRequests.pdfQuotation')}\n      </Typography>\n      {(generatePdfBid) &&\n        <>\n          {(generatePdfBid.status === 'complete' && generatePdfBid.attachmentId) &&\n            <>\n              <Link href={generatePdfBid?.fileLink} target='_blank'>{generatePdfBid?.fileName}</Link>\n              <IconButton onClick={() => handleOnClearFile(generatePdfBid.attachmentId, generatePdfBid.pdfHash)}>\n                <ClearIcon />\n              </IconButton>\n            </>\n          }\n          {(generatePdfBid.status === 'pending') &&\n            <>\n              <Box display='flex' flexDirection='row' alignItems='center' style={{ marginTop: 8 }}>\n                <CircularProgress size={24} />\n                <Typography variant='body1' style={{marginLeft: 8}}> {t('pricingRequests.preparingQuotation')}...</Typography>\n              </Box>\n            </>\n          }\n          {(generatePdfBid.status === 'clear') &&\n            <Button\n              style={{ marginTop: 8 }}\n              variant='contained'\n              color='primary'\n              onClick={() => handleRegeneratePdf()}\n            >\n              {t('pricingRequests.addPDFQuotation')}\n            </Button>\n          }\n        </>\n      }\n    </>\n  );\n};\n\nexport default memo(AttachmentsAndComments);\n","import React, { memo, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Checkbox, FormControlLabel, Grid, makeStyles, Radio, Typography } from '@material-ui/core';\n\nimport { List } from 'immutable';\nimport {\n  useShareVendorQuoteContextSelector,\n  ShareVendorQuoteDispatch,\n  selectBidResponseFormValuesByField, selectBidResponseFormValues\n} from './ShareVendorQuoteContextProvider';\n\nimport { useContext } from 'use-context-selector';\nimport { Contact } from '../../models';\nimport { IMap } from 'ats-utils/src';\n\nconst useStyles = makeStyles((theme) => ({\n}));\n\nconst ApplyCustomerDiscount = ({ }) => {\n\n  const { } = useStyles();\n  const { t } = useTranslation('translations');\n\n  const quote = useShareVendorQuoteContextSelector((context) => context.quote);\n  const customers = quote.get('customers') as List<IMap<Contact>>;\n  const bidResponseFormValues = useShareVendorQuoteContextSelector(context => selectBidResponseFormValues(context));\n  const appliedDiscount = useShareVendorQuoteContextSelector(context => selectBidResponseFormValuesByField(context, 'appliedDiscount'));\n  const { onClearDiscount } = useContext(ShareVendorQuoteDispatch);\n  // const bidResponseProducts = useShareVendorQuoteContextSelector(selectBidResponseProducts);\n  const { onApplyDiscount } = useContext(ShareVendorQuoteDispatch);\n\n  const [enableDiscount, setEnableDiscount] = useState(false);\n\n  useEffect(() => {\n    // Reset enableDiscount when currentBidInvitationResponseId changes\n    setEnableDiscount(appliedDiscount ? true : false);\n  }, []);\n\n  const customerCheckbox = customers && customers.map((customer: IMap<Contact>, index: number) => {\n    const firstName = customer.get('firstName');\n    const lastName = customer.get('lastName');\n    const organization = customer.get('organization');\n    const name = [firstName, lastName].filter(x => x).join(' ').trim();\n    const customerName = name ? [name, organization].filter(x => x).join(' - ') : organization;\n    const customerId = customer.get('id');\n\n    return (\n      <Grid\n        item={true}\n        key={index + 'customers'}\n      >\n        <FormControlLabel\n          disabled={!enableDiscount}\n          control={<Radio color='primary' />}\n          label={customerName}\n          value={customerId}\n          checked={appliedDiscount === customerId}\n          onClick={(event) => {\n            const { value } = event.target as any;\n            if (value) {\n              onApplyDiscount(value);\n            }\n          }}\n        />\n      </Grid>\n    );\n  }).valueSeq().toArray();\n\n  const handleEnableDiscountChange = (event) => {\n    const { checked } = event.target as any;\n    setEnableDiscount(checked);\n\n    if (!checked) {\n      // If discount is disabled, clear the applied discount\n      onClearDiscount();\n    } else {\n      // If discount is enabled, apply the first customer discount by default\n      const firstCustomerId = customers.getIn([0, 'id']);\n      if (firstCustomerId) {\n        onApplyDiscount(firstCustomerId);\n      }\n    }\n  };\n\n  return (\n    <>\n    {(bidResponseFormValues) &&\n      <>\n        {(customers?.size > 0) &&\n          <>\n            <FormControlLabel\n              control={<Checkbox color='primary' />}\n              label={t('pricingRequests.shareQuoteApplyCustomerDiscount')}\n              checked={enableDiscount}\n              onChange={handleEnableDiscountChange} />\n\n            <Grid container={true} spacing={2} style={{ marginTop: 10 }}>\n              {customerCheckbox}\n            </Grid>\n          </>\n        }\n        {(customers?.size === 0) &&\n          <Typography style={{ marginTop: 16 }} variant='subtitle1'>\n            {t('pricingRequests.customerDiscountAddQuoteTitle')}\n          </Typography>\n        }\n      </>\n    }\n    </>\n  );\n};\n\nexport default memo(ApplyCustomerDiscount);\n","import React, { memo, useState } from 'react';\nimport { ExpansionPanel, ExpansionPanelDetails, ExpansionPanelSummary, IconButton, makeStyles, MenuItem, Typography } from '@material-ui/core';\n\nimport {\n  selectActiveStep, selectBidInvitationResponse,\n  selectBidResponseFormValuesByField,\n  useShareVendorQuoteContextSelector\n} from './ShareVendorQuoteContextProvider';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport AttachmentIcon from '@material-ui/icons/Attachment';\nimport ShareVendorQuoteUtil from './ShareVendorQuoteUtil';\nimport {STEP_ATTACHMENT} from './ShareQuoteConstant';\n\nconst useStyles = makeStyles((theme) => ({\n  menuItem: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    padding: '8px 16px',\n  },\n  expansionPanel: {\n    width: '100%',\n    backgroundColor: 'transparent',\n    border: 'none',\n    padding: 0,\n  },\n  expansionPanelDetails: {\n    display: 'flex',\n    flexDirection: 'column',\n    padding: 0,\n    width: '100%',\n    border: 'none',\n  },\n  expansionPanelSummary: {\n    padding: 0,\n    width: '100%',\n    border: 'none',\n  },\n  expansionPanelSummaryContent: {\n    alignItems: 'center',\n  },\n  expansionPanelSummaryDetails: {\n    display: 'flex',\n    flexDirection: 'column',\n    padding: 0,\n    width: '100%',\n    border: 'none',\n  },\n  attachmentIcon: {\n    color: '#757575',\n  },\n}));\n\nconst BidInvitationListItem = () => {\n  const { menuItem, expansionPanel, expansionPanelDetails, expansionPanelSummary, expansionPanelSummaryDetails, expansionPanelSummaryContent, attachmentIcon } = useStyles();\n\n  const activeStep = useShareVendorQuoteContextSelector(selectActiveStep);\n  const bidInvitationResponse = useShareVendorQuoteContextSelector(context => selectBidInvitationResponse(context));\n  const attachments = useShareVendorQuoteContextSelector(context => selectBidResponseFormValuesByField(context, 'BidInvitationResponseAttachments'));\n\n  const subject = useShareVendorQuoteContextSelector(context => selectBidResponseFormValuesByField(context, 'subject'));\n  const description = useShareVendorQuoteContextSelector(context => selectBidResponseFormValuesByField(context, 'description'));\n  const [expanded, setExpanded] = useState(false);\n\n  const isCurrent = true;\n\n  const getBidInvitationName = () => {\n    if (bidInvitationResponse?.id) {\n      return 'BI-' + bidInvitationResponse?.id;\n    }\n  };\n  const getUserInfo = () => {\n    if (bidInvitationResponse?.BidInvitation?.User) {\n      return ShareVendorQuoteUtil.displayUserName(bidInvitationResponse?.BidInvitation?.User);\n    }\n  };\n  const handleExpandClick = () => {\n    if (activeStep === STEP_ATTACHMENT) {\n      setExpanded(prev => !prev);\n    }\n  };\n\n  return (\n    <>\n    {(bidInvitationResponse) &&\n        <MenuItem\n          className={menuItem}\n          style={{\n            backgroundColor: isCurrent ? '#f0f0f0' : 'inherit',\n            flexDirection: 'column',\n            alignItems: 'flex-start',\n            borderRight: isCurrent ? '2px solid #E76C17' : null,\n            borderBottom: '1px solid #BDBDBD',\n          }}\n        >\n          <ExpansionPanel\n            className={expansionPanel}\n            expanded={expanded}\n            elevation={0}\n            TransitionProps={{mountOnEnter: true}}\n            onClick={handleExpandClick}\n          >\n            <ExpansionPanelSummary\n              classes={{content: expansionPanelSummaryContent}}\n              className={expansionPanelSummary}\n              expandIcon={\n                activeStep === STEP_ATTACHMENT && (\n                  <IconButton>\n                    <ExpandMoreIcon/>\n                  </IconButton>\n                )\n              }\n            >\n              <div className={expansionPanelSummaryDetails}>\n                <Typography variant='h6'>\n                  {getBidInvitationName()}\n                </Typography>\n                <Typography variant='subtitle1'>\n                  {getUserInfo()}\n                </Typography>\n              </div>\n              {activeStep === STEP_ATTACHMENT && attachments.length > 0 && (\n                <AttachmentIcon className={attachmentIcon}/>\n              )\n              }\n            </ExpansionPanelSummary>\n            <ExpansionPanelDetails className={expansionPanelDetails}>\n              <Typography variant='h6' gutterBottom={true} noWrap={true}>\n                {subject}\n              </Typography>\n              <Typography variant='body1' gutterBottom={true} noWrap={true} display='block'>\n                {description}\n              </Typography>\n            </ExpansionPanelDetails>\n          </ExpansionPanel>\n        </MenuItem>\n    }\n    </>\n  );\n};\n\nexport default memo(BidInvitationListItem);\n","import { MenuList } from '@material-ui/core';\nimport React, { memo} from 'react';\nimport {selectBidResponseFormValues, useShareVendorQuoteContextSelector} from './ShareVendorQuoteContextProvider';\nimport BidInvitationListItem from './BidInvitationListItem';\n\nconst BidInvitationList = ({ }) => {\n\n  const bidResponseFormValues = useShareVendorQuoteContextSelector(context => selectBidResponseFormValues(context));\n\n  return (\n    <>\n      {(bidResponseFormValues) &&\n        <MenuList\n          style={{ overflow: 'auto', borderRight: '1px solid #BDBDBD', height: '100%', width: '100%' }}\n          id='product-list'\n        >\n          <BidInvitationListItem />\n        </MenuList>\n      }\n    </>\n  );\n};\n\nexport default memo(BidInvitationList);\n","import React, {  memo } from 'react';\nimport {useTranslation} from 'react-i18next';\nimport { Card, Grid, makeStyles, Typography, useTheme } from '@material-ui/core';\n\nimport StepperBar from './StepperBar';\nimport AttachmentsAndComments from './AttachmentsAndComments';\nimport ShareVendorQuoteContextProvider, { selectActiveStep, selectIsComplete, useShareVendorQuoteContextSelector } from './ShareVendorQuoteContextProvider';\nimport ApplyCustomerDiscount from './ApplyCustomerDiscount';\nimport BidInvitationList from './BidInvitationList';\nimport { AtsSvgQuote } from '../../components/AtsSvg/AtsSvgQuote';\nimport {STEP_ATTACHMENT, STEP_CUSTOMER} from './ShareQuoteConstant';\n\nconst useStyles = makeStyles((theme) => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n  },\n  appBar: {\n    width: '100%',\n    position: 'sticky',\n    backgroundColor: theme.palette.grey[300],\n  },\n  card: {\n    padding: theme.spacing(2),\n    margin: theme.spacing(2),\n    backgroundColor: theme.palette.background.paper,\n    width: '100%',\n    height: '100%',\n  },\n  completeView: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: '100%',\n    height: 'calc(100vh - 350px)',\n    padding: theme.spacing(2),\n    margin: theme.spacing(2),\n    backgroundColor: theme.palette.background.paper,\n  },\n}));\n\nconst ShareVendorQuote = ({ quote, onDownload, match }) => {\n\n  const { card } = useStyles();\n\n  return (\n    <ShareVendorQuoteContextProvider quote={quote} onDownload={onDownload} match={match}>\n      <StepperBar />\n      <Card className={card}>\n        <Header />\n        <Grid container={true} spacing={2} justify='space-between'>\n          <SideMenu />\n          <StepContent onDownload={onDownload} />\n        </Grid>\n      </Card>\n    </ShareVendorQuoteContextProvider>\n  );\n};\n\nconst Header = () => {\n  const { t } = useTranslation('translations');\n\n  const activeStep = useShareVendorQuoteContextSelector(selectActiveStep);\n  const isComplete = useShareVendorQuoteContextSelector(selectIsComplete);\n  const stepTitles = [\n    {\n      title: t('pricingRequests.applyCustomerDiscount'),\n      description: t('pricingRequests.applyCustomerDiscountDescription'),\n    },\n    {\n      title: t('pricingRequests.attachmentsComments'),\n      description: t('pricingRequests.attachmentsCommentsDescription'),\n    }\n  ];\n  return !isComplete && (\n    <>\n      <Typography variant='h6' gutterBottom={true}>\n        {stepTitles[activeStep].title}\n      </Typography>\n      <Typography variant='body1' gutterBottom={true}>\n        {stepTitles[activeStep].description}\n      </Typography>\n    </>\n  );\n};\n\nconst SideMenu = () => {\n  const isComplete = useShareVendorQuoteContextSelector(selectIsComplete);\n\n  return !isComplete && (\n    <Grid item={true} xs={3}>\n      <BidInvitationList />\n    </Grid>\n  );\n};\n\nconst StepContent = ({ onDownload }) => {\n  const { t } = useTranslation('translations');\n  const { completeView } = useStyles();\n  const theme = useTheme();\n  const activeStep = useShareVendorQuoteContextSelector(selectActiveStep);\n  const isComplete = useShareVendorQuoteContextSelector(selectIsComplete);\n\n  if (isComplete) {\n    return (\n      <Grid item={true} xs={12} className={completeView}>\n        <AtsSvgQuote\n          color={theme.palette.secondary[300]}\n          shadowColor={theme.palette.secondary.main}\n          style={{ margin: theme.spacing(3) }}\n        />\n        <Typography variant='h6' gutterBottom={true}>\n          {t('pricingRequests.quoteShared')}!\n        </Typography>\n        <Typography variant='body2' gutterBottom={true}>\n          {t('pricingRequests.sendQuoteCustomerSuccess')}.\n        </Typography>\n      </Grid>\n    );\n  }\n\n  const getStepContent = (step) => {\n    switch (step) {\n      case STEP_CUSTOMER:\n        return <ApplyCustomerDiscount />;\n      case STEP_ATTACHMENT:\n        return <AttachmentsAndComments onDownload={onDownload} />;\n      default:\n        return 'Unknown';\n    }\n  };\n  return (\n    <Grid item={true} xs={9}>\n      {getStepContent(activeStep)}\n    </Grid>\n  );\n};\n\nexport default memo(ShareVendorQuote);\n","import { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\n\nexport const filterForValidSections = (sections: List<IMap<any>>) => {\n  return sections?.filter((section) => section.get('note') || (section.get('products').size && section.get('products').some((product) => product.get('id') > 0)));\n};\n\nexport const getCustomerDisplayName = (customer: IMap<any>) => {\n  if (!customer) {\n    return '';\n  }\n  const firstName = customer.get('firstName');\n  const lastName = customer.get('lastName');\n  const organization = customer.get('organization');\n  const name = [firstName, lastName].filter(x => x).join(' ').trim();\n  const displayName = name ? [name, organization].filter(x => x).join(' - ') : organization;\n\n  return displayName || String(customer.get('id'));\n};","// use of 😈\n// have to add unique identifier because products in section can be duplicated within the section and also across sections. and they need to be individually checked off. without the identifier, the default behaviour will check off all the same products onCheck, because they have the same value\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  WithTheme,\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  Typography,\n  ExpansionPanelDetails,\n  FormControlLabel,\n  Checkbox,\n  Switch,\n  Tooltip,\n  Button,\n  Select,\n  MenuItem,\n  Radio,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  batch,\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectDefaultCustomEmail,\n  makeSelectIsGettingCustomerVisibilitySetting,\n  makeSelectVisibilityList,\n} from '../../modules/AccountModule/selectors';\nimport { makeSelectUserHasFeatEmailImprovements } from '../../modules/AtsModule/selectors';\nimport {\n  Field,\n  FieldArray,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n} from 'redux-form';\nimport { List, fromJS, Map, is as immutableIs } from 'immutable';\nimport { Contact, Product, QuoteSectionTemplateFieldsData, QuoteSectionTemplate, QuoteSection, QuoteSectionProduct, Quote } from '../../models';\nimport FieldRadio, { IFieldRadioComponentProps } from '../FieldRadio';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport { push } from 'connected-react-router/immutable';\nimport { withRouter, RouteComponentProps } from 'react-router';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport { getVisibilityProducts } from '../QuoteDetails/ProductSection';\nimport { GetDefaultCustomEmail, GetVisibilityListAction } from '../../modules/AccountModule/actions';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport { isEqual } from 'lodash';\nimport { UpdateAllSectionTotalAction } from '../../modules/QuoteEditModule/actions';\nimport { GetContactsListSuccess } from '../../modules/ContactModule/actions';\nimport { QUOTE_PRINT_TYPE, SHARE_VENDOR_QUOTE_PATH } from '../../constants';\nimport ShareVendorQuote from '../../containers/ShareVendorQuote';\nimport { filterForValidSections, getCustomerDisplayName } from './utils';\n\nexport const FORM_NAME = 'quotePrintOG';\n\ninterface IQuotePrintComponentProps {\n  // quote type all fked up\n  quote: any;\n  getConfigSelectionErrorFromPreview: (tooManyFieldsSelected: boolean) => void;\n  onDownload: () => void;\n  compact?: boolean;\n  onApplyToAll?: (fieldNames?: string[]) => void;\n  activeCustomerId?: number | null;\n  // PT-5477: hide the \"Choose customer to apply discounts\" section\n  // (used by the Export page when in Generic Quote mode — no customer selected).\n  hideCustomerDiscount?: boolean;\n}\n\ninterface IQuotePrintProps extends IQuotePrintComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  form: string;\n  formValues: any;\n  printType: string;\n  getVisibilityList: (id) => void;\n  visibilityList: any;\n  isGettingCustomerVisibilitySetting: boolean;\n}\n\ninterface IQuotePrintTypeState {\n  readyForInitialize: boolean;\n  readyToIntegrateConfig: boolean;\n  checkedSections: number[];\n  error: any;\n  timeoutID: any;\n  sectionTooManySelectedIndexes: Map<string, Map<string, boolean>>;\n  columnsBySectionExpanded: boolean;\n  productSectionsExpanded: boolean;\n  productSectionsExpandedList: List<boolean>;\n  quotes: any;\n  selectedCustomerForProducts: number | null;\n  selectedCustomerForColumns: number | null;\n  selectedCustomerForSummary: number | null;\n  multipleCustomers: boolean;\n  originalQuote: Map<any, any>;\n}\n\nconst maximumColumnsForPrint = 5;\n\n// Form field names for each panel section, used by the email modal's section-scoped\n// \"APPLY TO ALL\" buttons. Each key maps to the redux-form field names rendered inside\n// that section's <ExpansionPanel>. When a button is clicked, only these fields get\n// copied to other customers — preserving their settings in unrelated sections.\n//\n// Convention: `'sections.<subField>'` means per-section sub-field copy (matched by\n// sectionId). E.g. 'sections.fields' copies each section's `fields` array (column\n// selection) but leaves the section's `products` and other sub-fields untouched.\n// Without this notation, copying entire `sections` would replace each customer's\n// per-customer products/visibility.\n//\n// MAINTAINERS: when adding/removing a <Field name='...'> inside any section's render\n// method (e.g. ProjectInfo, QuoteLogoPosition, ProductInfoToDisplay), update the\n// matching array below. Otherwise the section-scoped \"Apply to All\" will silently\n// drop or carry stale values for the missing field.\nexport const QUOTE_PRINT_SECTION_FIELDS = {\n  projectInfo: [\n    'quoteTitle', 'salesRep', 'createdDate', 'bidDate', 'expiryDate',\n    'architectName', 'contractorName', 'engineerName', 'allowToAddress',\n    'shippingAddress', 'officeContactInfo',\n  ],\n  quoteLogo: ['logoAlignment'],\n  creator: ['creator', 'customCreatorEmail'],\n  customer: ['customers', 'discount'],\n  // Per-section column selection — copies each section's `fields` array only,\n  // preserving the target customer's per-customer products/visibility.\n  sectionColumns: ['sections.fields'],\n  // Per-section product selection — copies each section's `products` and\n  // `overrideSelected`. NOTE: product visibility is per-customer, so applying\n  // products across customers is rarely what you want; this is intentional for\n  // the \"Apply to All\" on the products panel which copies the user's deliberate\n  // selections to other customers.\n  products: ['sections.products', 'sections.overrideSelected'],\n  productInfo: [\n    'productManufacturer', 'productImage', 'productHyperlink', 'itemNumber', 'currency',\n  ],\n  // Mixed: top-level discount/total fields + per-section `total` selection.\n  summary: ['quoteTotal', 'grandTotal', 'discounts', 'sections.total'],\n  others: ['productNotes', 'sectionNotes', 'comments', 'termsAndConditions'],\n} as const;\n\ntype QuotePrintType = WithTranslation & IQuotePrintProps & RouteComponentProps & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & InjectedFormProps;\nclass QuotePrint extends React.PureComponent<QuotePrintType, IQuotePrintTypeState> {\n\n  public state = {\n    readyForInitialize: false,\n    readyToIntegrateConfig: false,\n    checkedSections: [],\n    error: null,\n    timeoutID: null,\n    sectionTooManySelectedIndexes: fromJS({}),\n    columnsBySectionExpanded: false,\n    productSectionsExpanded: false,\n    productSectionsExpandedList: List(),\n    quotes: {},\n    selectedCustomerForProducts: 0,\n    selectedCustomerForColumns: 0,\n    selectedCustomerForSummary: 0,\n    multipleCustomers: false,\n    originalQuote: Map()\n  };\n\n  // Track if print config has been applied (compact mode: only apply once, not on customer switch)\n  public _printConfigApplied = false;\n\n  constructor(props) {\n    super(props);\n  }\n\n  public fetchAndSetupCustomerData = () => {\n    const {\n      dispatch,\n      form,\n      quote,\n      formValues\n    } = this.props;\n    const sections = quote.get('sections');\n\n    const customersList = quote.get('customers');\n    const _selectedCustomerId = quote.get('selectedCustomer');\n\n    if (customersList && customersList.size) {\n      if (Boolean(customersList.size) && formValues && Boolean(formValues.get('customers')?.size)) {\n        this.setState({ multipleCustomers: true });\n      }\n      dispatch(new GetContactsListSuccess({ list: customersList }));\n    }\n\n    let dataFetched = 0;\n    if (sections.size && customersList.size >= 1) {\n      dispatch(new UpdateAllSectionTotalAction({\n        quote,\n        type: 'customer',\n        forPrint: true,\n        callbackForPrint: (resetSections, grandTotals) => {\n          const originalQuote = quote.withMutations((ctx) => {\n            ctx.set('grandTotals', grandTotals);\n            ctx.set('sections', resetSections?.map((section) => {\n              return section.set('overrideSelected', true);\n            }));\n          });\n          const customers = originalQuote.get('customers');\n\n          // Always populate quoteWithoutDiscount (don't gate on selectedCustomer).\n          // Without this, quotes with no selectedCustomer have qwd=null, and the\n          // email modal's handleNext falls back to liveQdv (discount-applied data)\n          // when discount is OFF — producing PDFs with wrong discounted prices and\n          // visibility-filtered products. originalQuote has all products with\n          // undiscounted prices, regardless of selectedCustomer.\n          dispatch(change(\n            form,\n            'quoteWithoutDiscount',\n            Map()\n              .set('sections', originalQuote.get('sections'))\n              .set('grandTotals', originalQuote.get('grandTotals'))\n          ));\n\n          customers.forEach(customer => {\n            const isQuoteSelectedCustomer = _selectedCustomerId === customer.get('id');\n            dispatch(new UpdateAllSectionTotalAction({\n              quote,\n              customerId: customer.get('id'),\n              type: isQuoteSelectedCustomer ? null : 'customer',\n              forPrint: true,\n              withReset: !isQuoteSelectedCustomer,\n              callbackForPrint: (updatedSections, _grandTotals, visibilityList) => {\n                const quoteDiscountVariations = this.props.formValues.get('quoteDiscountVariations');\n                const selectedCustomerId = customer.get('id');\n                const _updatedSections = updatedSections.map(section => {\n                  const visibleProducts: any = isQuoteSelectedCustomer\n                    ? section.get('products')?.filter((product) => !product.get('notVisibleToSelectedCustomer')) || section.get('products')\n                    : getVisibilityProducts({ visibilityList, section, selectedCustomerId });\n                  const sectionNote = section.get('note');\n\n                  return section.withMutations((ctx) => {\n                    ctx.set('products', visibleProducts);\n                    ctx.set('overrideSelected', true);\n                  });\n                });\n\n                if (quoteDiscountVariations) {\n                  dispatch(change(\n                    form,\n                    'quoteDiscountVariations',\n                    quoteDiscountVariations.set(\n                      selectedCustomerId,\n                      Map()\n                        .set('sections', _updatedSections)\n                        .set('selectedCustomer', selectedCustomerId)\n                        .set('grandTotals', _grandTotals)\n                    )\n                  ));\n                }\n\n                dataFetched += 1;\n                if (dataFetched === customers.size) {\n                  this.setState({ readyToIntegrateConfig: true });\n                }\n              }\n            }));\n          });\n        }\n      }));\n    } else {\n      this.setState({ readyToIntegrateConfig: true });\n    }\n\n    // const fullyCheckedSectionIndexesArray = sections.reduce((acc, section: IMap<QuoteSection>, sectionIndex: number) => {\n    //   const products = section.get('products');\n    //   const totalNumberOfProducts = products.size;\n\n    //   const productsAllChecked = products.filter((product) => {\n    //     const defaultPrint = product.get('defaultPrint');\n\n    //     if (defaultPrint) {\n    //       return product;\n    //     }\n    //   });\n\n    //   if (totalNumberOfProducts === productsAllChecked.size) {\n    //     acc.push(sectionIndex);\n    //     return acc;\n    //   }\n    //   return acc;\n    // }, []);\n    this.setState({\n      // checkedSections: fullyCheckedSectionIndexesArray,\n      productSectionsExpandedList: List(Array(sections.count()).fill(false)),\n      selectedCustomerForProducts: quote && quote.get('selectedCustomer') ? quote.get('selectedCustomer') : 0,\n      selectedCustomerForColumns: quote && quote.get('selectedCustomer') ? quote.get('selectedCustomer') : 0,\n      selectedCustomerForSummary: quote && quote.get('selectedCustomer') ? quote.get('selectedCustomer') : 0\n    });\n\n    // dispatch(reset(form));\n  }\n\n  public fetchQuotePrintConfig = () => {\n    const {\n      dispatch,\n      quote,\n      atsApi,\n      form,\n    } = this.props;\n\n    if (quote?.get('id')) {\n      (atsApi.callApi({\n        service: 'account',\n        endpoint: 'getPreference',\n        params: {\n          userType: 'user',\n          preference: 'quotePrint',\n        }\n      }) as any).then(res => {\n        const generalConfig = fromJS(res?.payload?.account?.preference?.quotePrint?.generalConfig);\n        if (Map.isMap(generalConfig)) {\n          dispatch(change(form, 'generalConfig', generalConfig));\n        }\n      }).catch((err) => {\n        // the form keeps its defaults; an expired session (401) already redirects to login elsewhere\n        console.warn('Unable to load the quote print settings.', err); // tslint:disable-line\n      });\n    }\n  }\n\n  public applyPrintConfigToForm = () => {\n    const {\n      dispatch,\n      form,\n      quote,\n      formValues,\n    } = this.props;\n\n    const generalConfig = formValues.get('generalConfig');\n    if (!Map.isMap(generalConfig)) {\n      return;\n    }\n\n    // PT-5477 / PT-5486 (2026-08-26): master ACL gate. With the ACL ON,\n    // use the PT-5486 `applyIfPresent` helper — safer defaults: only\n    // overwrite a form field when the pref actually carries that key\n    // and its value isn't undefined. With the ACL OFF, restore the\n    // pre-PT-5486 s149/root behavior: unconditional\n    // `dispatch(change(form, field, generalConfig.get(field)))` for\n    // every field, plus the smaller `has(...)` guards that s149/root\n    // used for the salesRep / architect / engineer / contractor /\n    // allowToAddress conditional fields.\n    const hasFeatEmailImprovements = (this.props as any).hasFeatEmailImprovements;\n    if (hasFeatEmailImprovements) {\n      const applyIfPresent = (field: string) => {\n        if (generalConfig.has(field) && generalConfig.get(field) !== undefined) {\n          dispatch(change(form, field, generalConfig.get(field)));\n        }\n      };\n      batch(() => {\n        applyIfPresent('quoteTitle');\n        if (quote.get('collaborators')?.size) { applyIfPresent('salesRep'); }\n        applyIfPresent('createdDate');\n        applyIfPresent('bidDate');\n        applyIfPresent('expiryDate');\n        if (quote.get('architectName')?.size) { applyIfPresent('architectName'); }\n        if (quote.get('engineerName')?.size) { applyIfPresent('engineerName'); }\n        if (quote.get('contractorName')?.size) { applyIfPresent('contractorName'); }\n        if (formValues.get('customers')?.size === 1) { applyIfPresent('allowToAddress'); }\n        applyIfPresent('shippingAddress');\n        applyIfPresent('logoAlignment');\n        applyIfPresent('creator');\n        applyIfPresent('customCreatorEmail');\n        applyIfPresent('productNotes');\n        applyIfPresent('sectionNotes');\n        applyIfPresent('comments');\n        applyIfPresent('termsAndConditions');\n      });\n      return;\n    }\n\n    // ACL OFF — s149/root parity path.\n    batch(() => {\n      dispatch(change(form, 'quoteTitle', generalConfig.get('quoteTitle')));\n      if (quote.get('collaborators')?.size && generalConfig.has('salesRep')) {\n        dispatch(change(form, 'salesRep', generalConfig.get('salesRep')));\n      }\n      dispatch(change(form, 'createdDate', generalConfig.get('createdDate')));\n      dispatch(change(form, 'bidDate', generalConfig.get('bidDate')));\n      dispatch(change(form, 'expiryDate', generalConfig.get('expiryDate')));\n      if (quote.get('architectName')?.size && generalConfig.has('architectName')) {\n        dispatch(change(form, 'architectName', generalConfig.get('architectName')));\n      }\n      if (quote.get('engineerName')?.size && generalConfig.has('engineerName')) {\n        dispatch(change(form, 'engineerName', generalConfig.get('engineerName')));\n      }\n      if (quote.get('contractorName')?.size && generalConfig.has('contractorName')) {\n        dispatch(change(form, 'contractorName', generalConfig.get('contractorName')));\n      }\n      if (formValues.get('customers')?.size === 1 && generalConfig.has('allowToAddress')) {\n        dispatch(change(form, 'allowToAddress', generalConfig.get('allowToAddress')));\n      }\n      dispatch(change(form, 'shippingAddress', generalConfig.get('shippingAddress')));\n      dispatch(change(form, 'logoAlignment', generalConfig.get('logoAlignment')));\n      dispatch(change(form, 'creator', generalConfig.get('creator')));\n      dispatch(change(form, 'customCreatorEmail', generalConfig.get('customCreatorEmail')) || null);\n      dispatch(change(form, 'productNotes', generalConfig.get('productNotes')));\n      dispatch(change(form, 'sectionNotes', generalConfig.get('sectionNotes')));\n      dispatch(change(form, 'comments', generalConfig.get('comments')));\n      dispatch(change(form, 'termsAndConditions', generalConfig.get('termsAndConditions')));\n    });\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      formValues,\n      quote,\n      isGettingCustomerVisibilitySetting,\n    } = this.props;\n\n    dispatch(new GetDefaultCustomEmail());\n    // getVisibilityList();\n    // checks if all the products in each section are selected for defaultprint.\n    // sets the state 'checkedSections' with an array of every section's index if its products are all set to defaultprint\n    if (!isGettingCustomerVisibilitySetting && quote) {\n      this.fetchAndSetupCustomerData();\n      this.fetchQuotePrintConfig();\n    }\n    this.checkIfMaximumColumnsReached(formValues);\n  }\n\n  public componentDidUpdate(prevProps: any, prevState: IQuotePrintTypeState) {\n    const {\n      quote,\n      form,\n      formValues,\n      getVisibilityList,\n      visibilityList,\n      dispatch,\n      isGettingCustomerVisibilitySetting,\n    } = this.props;\n    const {\n      readyForInitialize,\n      readyToIntegrateConfig,\n    } = this.state;\n\n    if (quote && !isEqual(prevProps.quote, quote)) {\n      this.setState({ readyForInitialize: true });\n    }\n    // PT-5477 (2026-09-02): the componentDidMount fetch is gated on both\n    // `quote` AND `!isGettingCustomerVisibilitySetting`. If quote is already\n    // available at mount BUT visibility is still loading, the mount gate\n    // skips. And below, `readyForInitialize` only flips when `quote` CHANGES —\n    // it never triggers if `quote` was present all along and only the\n    // visibility flag transitioned. Result: fetchAndSetupCustomerData\n    // never runs → QDV stays empty → discount never applies. Handle the\n    // visibility-just-resolved transition explicitly here.\n    //\n    // Scoped to `compact` (Export page / email modal) — preview page has a\n    // different mount lifecycle and this trigger could add an unnecessary\n    // re-render there. Compact mode is the only place this race was reported.\n    const visibilityJustResolved = (this.props as any).compact\n      && prevProps.isGettingCustomerVisibilitySetting\n      && !isGettingCustomerVisibilitySetting;\n    if (visibilityJustResolved && quote && !readyForInitialize) {\n      this.setState({ readyForInitialize: true });\n    }\n\n    if (readyForInitialize && !isGettingCustomerVisibilitySetting) {\n      this.setState({ readyForInitialize: false });\n      this.fetchAndSetupCustomerData();\n      this.fetchQuotePrintConfig();\n    }\n\n    if ((!prevProps.formValues?.get('generalConfig') || !prevState.readyToIntegrateConfig) && formValues?.get('generalConfig') && readyToIntegrateConfig) {\n      // integrate print config into form — only on first mount in compact mode,\n      // not on customer switch (restoreCustomerFormValues resets generalConfig which re-triggers this)\n      if (!(this.props as any).compact || !this._printConfigApplied) {\n        this._printConfigApplied = true;\n        this.applyPrintConfigToForm();\n      }\n    }\n\n    if (\n      !immutableIs(formValues?.get('sections'), prevProps.formValues?.get('sections'))\n      || !immutableIs(formValues?.get('customers'), prevProps.formValues?.get('customers'))\n    ) {\n      this.checkIfMaximumColumnsReached(formValues);\n    }\n\n    const compact = (this.props as any).compact;\n    const activeCustomerId = (this.props as any).activeCustomerId;\n\n    // Compact mode: rebuild product selection when discount is toggled, QDV first loads,\n    // or the active customer changes. Matches renderProductSections source: QDV when\n    // discount ON (hides invisible products for the customer), quote when OFF.\n    // QA behavior: on any of these triggers, all visible products are re-checked.\n    const discountToggled = !immutableIs(formValues?.get('discount'), prevProps.formValues?.get('discount'));\n    // PT-5477 (2026-09-01): detect when the ACTIVE customer's specific QDV\n    // entry transitions from missing to present. The earlier check on the\n    // outer map's size only fired the first time ANY QDV entry loaded — so\n    // if the user hard-refreshed and clicked a NON-first customer whose\n    // entry loaded later, the rebuild never triggered and sections stayed\n    // on the raw-quote fallback (undiscounted).\n    const currentQdvMap = formValues?.get('quoteDiscountVariations');\n    const prevQdvMap = prevProps.formValues?.get('quoteDiscountVariations');\n    const activeQdvEntry = activeCustomerId\n      && (currentQdvMap?.get?.(activeCustomerId) || currentQdvMap?.get?.(`${activeCustomerId}`));\n    const prevActiveQdvEntry = activeCustomerId\n      && (prevQdvMap?.get?.(activeCustomerId) || prevQdvMap?.get?.(`${activeCustomerId}`));\n    const qdvJustLoaded = compact && formValues?.get('discount')\n      && activeQdvEntry && !prevActiveQdvEntry;\n    const prevActiveCustomerIdForRebuild = (prevProps as any).activeCustomerId;\n    const activeCustomerChangedForRebuild = compact && prevActiveCustomerIdForRebuild !== activeCustomerId;\n    if (compact && activeCustomerId && quote && formValues\n        && (discountToggled || qdvJustLoaded || activeCustomerChangedForRebuild)) {\n      const discountOn = formValues.get('discount');\n      const qdvQuotes = formValues.get('quoteDiscountVariations');\n      const qdvEntry = discountOn ? (qdvQuotes?.get(activeCustomerId) || qdvQuotes?.get(`${activeCustomerId}`)) : null;\n      const sourceSections = qdvEntry?.get('sections') || quote.get('sections');\n      const customerId = discountOn ? activeCustomerId : undefined;\n      const formSections = formValues.get('sections');\n      if (sourceSections && formSections && List.isList(formSections)) {\n        // Rebuild form.sections to match the FILTERED source list (same length, same order).\n        // resolveSectionValue/allProductsInSectionSelected use rendering's sectionIndex to\n        // look up form.sections[sectionIndex]; if form's list differs from rendering's\n        // filterForValidSections result, that lookup reads the wrong section. Replacing the\n        // entire sections field aligns form with rendering — same as mergeProps' initial build.\n        const filteredSource = sourceSections.filter((s: any) =>\n          (s.get('products')?.size && s.get('products').some((p: any) => p.get('id') > 0)) || s.get('note'),\n        );\n        const existingBySectionId: Record<string, any> = {};\n        formSections.forEach((fs: any) => {\n          const id = fs.get('sectionId');\n          if (id) { existingBySectionId[id] = fs; }\n        });\n        const newSections = filteredSource.map((sourceSection: any, sectionIndex: number) => {\n          const sectionId = sourceSection.get('sectionId');\n          const products = (sourceSection.get('products') || List()).filter((p: any) => p.get('id') > 0);\n          const productIds = products.map((product: any, productIndex: number) =>\n            product.get('quoteProductId') + `😈${sectionIndex}-${productIndex}😈`,\n          );\n          const overrideSelected = Boolean(productIds.size || (!products.size && sourceSection.get('note')));\n          const existing = existingBySectionId[sectionId];\n          if (existing) {\n            return existing\n              .set('products', productIds)\n              .set('overrideSelected', overrideSelected);\n          }\n          const fields = sourceSection.getIn(['sectionTemplate', 'fieldsData'], List())\n            .filter((f: any) => f.get('printColumn') && !f.get('invisible'))\n            .map((f: any) => f.get('id'));\n          const total = sourceSection.getIn(['sectionTemplate', 'sectionCalculations'], List())\n            .filter((c: any) => c.get('printColumn') ?? true)\n            .map((c: any) => c.get('name'));\n          return fromJS({\n            products: productIds,\n            fields,\n            total,\n            sectionId,\n            sectionTitle: sourceSection.get('sectionTitle'),\n            note: sourceSection.get('note'),\n            overrideSelected,\n          });\n        });\n        dispatch(change(form, 'sections', newSections));\n      }\n    }\n\n    // Compact mode: always set customers to activeCustomerId (controls PDF \"TO\" address)\n    // and always check \"Customer\" (allowToAddress) since each customer gets their own PDF\n    if (compact && activeCustomerId && formValues) {\n      const currentCustomers = formValues.get('customers');\n      if (!currentCustomers || currentCustomers.size !== 1 || currentCustomers.first() !== activeCustomerId) {\n        dispatch(change(form, 'customers', fromJS([activeCustomerId])));\n      }\n      if (!formValues.getIn(['allowToAddress', 0])) {\n        dispatch(change(form, 'allowToAddress', fromJS([true])));\n      }\n    }\n\n    if (quote && prevProps.formValues && formValues && !isEqual(formValues, prevProps.formValues)) {\n\n      // if (formValues.get('customers')?.size === 1) {\n      //   const customer = formValues.get('customers')?.first();\n      //   getVisibilityList(customer);\n      // }\n\n      if (formValues.get('customers')?.size > 1 && formValues.get('type') !== QUOTE_PRINT_TYPE.quote) {\n        dispatch(change(form, 'type', QUOTE_PRINT_TYPE.quote));\n        dispatch(push(`/preview/${quote.get('id')}`));\n      }\n\n\n      if (!formValues.get('customers')?.includes(this.state.selectedCustomerForProducts)) {\n        this.setState({\n          selectedCustomerForProducts: formValues.get('customers')?.first() || 0\n        });\n      }\n\n      if (!formValues.get('customers')?.includes(this.state.selectedCustomerForColumns)) {\n        this.setState({\n          selectedCustomerForColumns: formValues.get('customers')?.first() || 0\n        });\n      }\n\n      if (!formValues.get('customers')?.includes(this.state.selectedCustomerForSummary)) {\n        this.setState({\n          selectedCustomerForSummary: formValues.get('customers')?.first() || 0\n        });\n      }\n\n      if (formValues.get('customers')?.size > 1 && !formValues.getIn(['allowToAddress', 0])) {\n        dispatch(change(form, 'allowToAddress', fromJS([true])));\n      }\n\n      if (!compact) {\n        if (formValues.get('customers')?.size >= 1 && (List.isList(formValues.get('sections')) && formValues.get('discount'))) {\n          const quotes = formValues.get('quoteDiscountVariations');\n          if (quotes?.size === quote.get('customers')?.size) {\n            // for multi customer selected\n            // generate new secions map\n            const prevCustomer = prevProps.formValues.get('customers')?.first();\n            const prevSections = List.isList(formValues.get('sections')) ? prevProps.formValues.get('sections') : prevProps.formValues.getIn(['sections', `temp_${prevCustomer}`]);\n\n            let updatedSections = Map();\n            quotes?.forEach((customerQuote, key) => {\n              const applyDiscount = formValues.get('discount');\n              const quoteWithoutDiscount = formValues.get('quoteWithoutDiscount');\n              const sections = applyDiscount ? customerQuote.get('sections') : ((quoteWithoutDiscount || quote).get('sections'));\n              const updatedValues = applyDiscount ? mergedSectionInitalValues(sections, key) : mergedSectionInitalValues(sections);\n              updatedSections = updatedSections.set(`temp_${key}`, updatedValues);\n            });\n            dispatch(change(form, 'sections', updatedSections));\n            this.setState({\n              selectedCustomerForProducts: formValues.get('customers')?.first(),\n              selectedCustomerForColumns: formValues.get('customers')?.first(),\n              selectedCustomerForSummary: formValues.get('customers')?.first(),\n              multipleCustomers: Boolean(formValues.get('discount')),\n            });\n          }\n        } else if ((!formValues.get('discount') || formValues.get('customers')?.size === 0) && Map.isMap((formValues.get('sections')))) {\n          // for no / one customer selected\n          // revert back to sections list\n          const sections = quote.get('sections');\n          const mergedSections = mergedSectionInitalValues(sections);\n          dispatch(change(form, 'sections', mergedSections));\n          dispatch(change(form, 'discount', false));\n          this.setState({ multipleCustomers: false });\n        } else if (!Boolean(formValues.get('discount'))) {\n          this.setState({ multipleCustomers: false });\n          if (!isEqual(prevProps.formValues.get('customers')?.size, formValues.get('customers')?.size) && formValues.get('customers')?.size >= 1) {\n            dispatch(change(form, 'allowToAddress', fromJS([true])));\n          } else if (formValues.get('customers')?.size === 0) {\n            dispatch(change(form, 'allowToAddress', fromJS([])));\n          }\n        }\n      }\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n      getConfigSelectionErrorFromPreview,\n    } = this.props;\n\n    getConfigSelectionErrorFromPreview(false);\n  }\n\n  public checkIfMaximumColumnsReached = (formValues: any) => {\n    const {\n      quote,\n      getConfigSelectionErrorFromPreview,\n    } = this.props;\n\n    const fullCustomers = quote?.get('customers') || List();\n    const customerIds = formValues && formValues.get('customers');\n\n    const sectionsInForm = formValues && formValues.get('sections');\n    let newSectionTooManySelectedIndexes = fromJS({});\n\n    sectionsInForm ? List.isList(sectionsInForm) ? sectionsInForm.forEach((section, index) => {\n      const fields = section.get('fields', Map());\n\n      if (fields.size > maximumColumnsForPrint) {\n        const sectionId = section.get('sectionId') ?? String(index);\n        newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.set('tooManyFields', true);\n        if (newSectionTooManySelectedIndexes.has('default')) {\n          newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.update('default', (value) => value.set(sectionId, true));\n        } else {\n          newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.set('default', fromJS({ [sectionId]: true }));\n        }\n      }\n    }) :\n      sectionsInForm?.forEach((customerSection, customerSectionKey) => {\n        // only check for selected customers' sections\n        const customerId = Number(customerSectionKey.replace('temp_', ''));\n        if (!customerIds?.includes(customerId)) {\n          return;\n        }\n\n        let customerHasTooManyFields = false;\n        customerSection.forEach((section, _index) => {\n          const fields = section.get('fields', Map());\n\n          if (fields.size > maximumColumnsForPrint) {\n            newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.set('tooManyFields', true);\n            customerHasTooManyFields = true;\n\n            const sectionId = section.get('sectionId') ?? String(_index);\n            if (newSectionTooManySelectedIndexes.has(customerSectionKey)) {\n              newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.update(customerSectionKey, (value) => value.set(sectionId, true));\n            } else {\n              newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.set(customerSectionKey, fromJS({ [sectionId]: true }));\n            }\n          }\n        });\n\n        if (customerHasTooManyFields) {\n          const customerName = getCustomerDisplayName(fullCustomers.find(c => c.get('id') === customerId));\n          if (newSectionTooManySelectedIndexes.has('customersWithTooManyFields')) {\n            newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.update('customersWithTooManyFields', (value) => value.push(customerName));\n          } else {\n            newSectionTooManySelectedIndexes = newSectionTooManySelectedIndexes.set('customersWithTooManyFields', fromJS([customerName]));\n          }\n        }\n      })\n      : null; // tslint:disable-line\n\n    this.setState({\n      sectionTooManySelectedIndexes: newSectionTooManySelectedIndexes\n    });\n\n    newSectionTooManySelectedIndexes.get('tooManyFields')\n      ? getConfigSelectionErrorFromPreview(true)\n      : getConfigSelectionErrorFromPreview(false);\n  }\n\n  // Helper: get section value from formValues.sections, handling both List and Map-with-\"default\" formats\n  public getSectionValue = (formValues: any, sectionIndex: number, field: string) => {\n    const sections = formValues?.get('sections');\n    if (!sections) { return undefined; }\n    if (List.isList(sections)) {\n      return sections.getIn([sectionIndex, field]);\n    }\n    if (sections.has('default')) {\n      return sections.getIn(['default', sectionIndex, field]);\n    }\n    return sections.getIn([sectionIndex, field]);\n  }\n\n  // Helper: get redux-form path for section, handling Map-with-\"default\" format\n  public getSectionFormPath = (formValues: any, sectionIndex: number) => {\n    const sections = formValues?.get('sections');\n    if (Map.isMap(sections) && sections.has('default')) {\n      return `sections.default[${sectionIndex}]`;\n    }\n    return `sections[${sectionIndex}]`;\n  }\n\n  // Helper: check if customer-specific section path should be used (never in compact mode)\n  public useCustomerSectionPath = (selectedCustomer: any) => {\n    const { formValues } = this.props;\n    const compact = (this.props as any).compact;\n    if (compact) { return false; }\n    return selectedCustomer && formValues?.get('discount') && formValues?.get('customers')?.size >= 1;\n  }\n\n  // Helper: resolve section form path for read/write, handling compact + discount modes\n  public resolveSectionPath = (selectedCustomer: any, sectionIndex: number, field?: string) => {\n    if (this.useCustomerSectionPath(selectedCustomer)) {\n      return `sections.temp_${selectedCustomer}[${sectionIndex}]${field ? '.' + field : ''}`;\n    }\n    return `${this.getSectionFormPath(this.props.formValues, sectionIndex)}${field ? '.' + field : ''}`;\n  }\n\n  // Helper: resolve section value for read, handling compact + discount modes\n  public resolveSectionValue = (selectedCustomer: any, sectionIndex: number, field: string) => {\n    const { formValues } = this.props;\n    if (this.useCustomerSectionPath(selectedCustomer)) {\n      return formValues.getIn(['sections', `temp_${selectedCustomer}`, sectionIndex, field]);\n    }\n    return this.getSectionValue(formValues, sectionIndex, field);\n  }\n\n  public renderSectionTitle = (titleText: string, fieldNames?: string[], hideApplyToAll?: boolean) => {\n    const { compact, onApplyToAll, t, classes } = this.props as any;\n    if (compact && onApplyToAll && !hideApplyToAll) {\n      return (\n        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%' }}>\n          <Typography variant='h6' className={classes.title} style={{ flex: 1 }}>{titleText}</Typography>\n          <Tooltip title={t('quoteDetail.applyToAllTooltip')}>\n            <Button variant='text' className={classes.applyToAllButton} onClick={(e) => { e.stopPropagation(); onApplyToAll(fieldNames); }}>\n              {t('quoteDetail.applyToAll')}\n            </Button>\n          </Tooltip>\n        </div>\n      );\n    }\n    return <Typography variant='h6' className={classes.title}>{titleText}</Typography>;\n  }\n\n  public ProjectInfo = () => {\n    const {\n      classes,\n      quote,\n      t,\n      formValues\n    } = this.props;\n\n    if (!quote) {\n      return null;\n    }\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.projectInfoTitle'), [...QUOTE_PRINT_SECTION_FIELDS.projectInfo])}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n          >\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='quoteTitle'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.quoteTitleLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            {/* remove until further notice */}\n            {/* <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='officeContactInfo'\n                component={FieldCheckbox}\n                props={{\n                  label: `Office Contact Info`,\n                  color: 'primary',\n                }}\n              />\n            </Grid> */}\n            {\n              quote.get('collaborators') && quote.get('collaborators').size\n                ? <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='salesRep'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('quotePrint.salesRepLabel'),\n                      color: 'primary',\n                    }}\n                  />\n                </Grid>\n                : null\n            }\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='createdDate'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.createdDateLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='bidDate'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.bidDateLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='expiryDate'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.expirationDateLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            {\n              quote.get('architectName') && quote.get('architectName').size\n                ? <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='architectName'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('quotePrint.architectLabel'),\n                      color: 'primary',\n                    }}\n                  />\n                </Grid>\n                : null\n            }\n            {\n              quote.get('contractorName') && quote.get('contractorName').size\n                ? <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='contractorName'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('quotePrint.contractorLabel'),\n                      color: 'primary',\n                    }}\n                  />\n                </Grid>\n                : null\n            }\n            {\n              quote.get('engineerName') && quote.get('engineerName').size\n                ? <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='engineerName'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('quotePrint.engineerLabel'),\n                      color: 'primary',\n                    }}\n                  />\n                </Grid>\n                : null\n            }\n            {\n              quote.get('customers') && quote.get('customers')?.size\n                ? <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='allowToAddress'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('quotePrint.customer'),\n                      color: 'primary',\n                      disabled: Boolean(formValues && (formValues.get('customers')?.size !== -1))\n                    }}\n                  />\n                </Grid>\n                : null\n            }\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='shippingAddress'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.projectAddressLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public QuoteLogoPosition = () => {\n    const {\n      classes,\n      t\n    } = this.props;\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.quoteLogoLabel'), [...QUOTE_PRINT_SECTION_FIELDS.quoteLogo])}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n          >\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                name='logoAlignment'\n                component={FieldRadio}\n                props={{\n                  label: t('quotePrint.leftLabel'),\n                  color: 'primary',\n                  checkedValue: 'left',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                name='logoAlignment'\n                component={FieldRadio}\n                props={{\n                  label: t('quotePrint.centerLabel'),\n                  color: 'primary',\n                  checkedValue: 'center',\n                }}\n              />\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public CreatorInfo = () => {\n    const {\n      classes,\n      t,\n      form,\n      formValues,\n      dispatch\n    } = this.props;\n\n    const isCustomEmailChecked: boolean = formValues?.get('creator') === 'custom';\n    // const { isCustomEmailChecked } = this.state;\n    //\n    // const handleOnCustomEmailChange = (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => {\n    //   this.setState({ isCustomEmailChecked: checked });\n    //\n    //   const customEmail: string = formValues?.get('customCreatorEmail');\n    //   if (!checked && customEmail) {\n    //     dispatch(change(form, 'customCreatorEmail', null));\n    //   }\n    // };\n\n    return (\n      <ExpansionPanel className={classes.panel} defaultExpanded={true}>\n        {this.renderSectionTitle(t('quotePrint.creatorTitle'), [...QUOTE_PRINT_SECTION_FIELDS.creator])}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid container={true}>\n            <Grid item={true}>\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='creator'\n                component={FieldRadio}\n                props={{\n                  label: t('quotePrint.none'),\n                  color: 'primary',\n                  checkedValue: 'none',\n                }}\n              />\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='creator'\n                component={FieldRadio}\n                props={{\n                  label: t('quotePrint.creatorLabel'),\n                  color: 'primary',\n                  checkedValue: 'creator',\n                }}\n              />\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='creator'\n                component={FieldRadio}\n                props={{\n                  label: t('quotePrint.customEmailLabel'),\n                  color: 'primary',\n                  checkedValue: 'custom'\n                }}\n              />\n            </Grid>\n            {\n              isCustomEmailChecked &&\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  name={'customCreatorEmail'}\n                  props={{\n                    inputProps: {\n                      type: 'text',\n                    }\n                  }}\n                  component={FieldTextField}\n                />\n              </Grid>\n            }\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public CustomerDiscount = () => {\n    const {\n      classes,\n      quote,\n      form,\n      formValues,\n      t,\n      dispatch\n    } = this.props;\n\n    const customers: List<IMap<Contact>> = quote && quote.get('customers');\n    const allCustomerIds = customers && customers.map(customer => customer.get('id'));\n\n    const customerCheckbox = customers && customers.map((customer: IMap<Contact>, index: number) => {\n      const customerName = getCustomerDisplayName(customer);\n      const customerId = customer.get('id');\n\n      return (\n        <Grid\n          item={true}\n          key={index + 'customers'}\n        >\n          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n            name='customers'\n            component={FieldCheckbox}\n            props={{\n              label: customerName,\n              color: 'primary',\n              checkedValue: customerId,\n            }}\n          />\n        </Grid>\n      );\n    }).unshift(\n      <Grid\n        item={true}\n        key={'selectAll'}\n      >\n        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n          name='customers'\n          component={FieldCheckbox}\n          props={{\n            label: t('quotePrint.selectAll'),\n            color: 'primary',\n            onChange: () => {\n              if (formValues.get('customers')?.size === allCustomerIds.size) {\n                dispatch(change(form, 'customers', fromJS([])));\n              } else {\n                dispatch(change(form, 'customers', allCustomerIds));\n              }\n            },\n            checked: Boolean(quote.get('customers')?.size) && Boolean(formValues) && formValues.get('customers')?.size === allCustomerIds.size,\n            disabled: !Boolean(quote.get('customers')?.size)\n          }}\n        />\n      </Grid>\n    )\n      .valueSeq().toArray();\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.chooseCustomerLabel'), [...QUOTE_PRINT_SECTION_FIELDS.customer])}\n        <Grid container={true} direction='column'>\n          <Typography variant='caption' className={classes.customerNote}>{t('quotePrint.customerDiscountNote1')}</Typography>\n          <Typography variant='caption' className={classes.customerNote}>{t('quotePrint.customerDiscountNote2')}</Typography>\n        </Grid>\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetails\n          }}\n        >\n          <Grid container={true} direction='row'>\n            <FormControlLabel\n              control={\n                <Checkbox\n                  color='primary'\n                  checked={Boolean(formValues && formValues.get('discount'))}\n                  onChange={(e) => dispatch(change(form, 'discount', e.currentTarget.checked))}\n                  disabled={(this.props as any).compact ? false : !Boolean(formValues && formValues.get('customers')?.size)}\n                />\n              }\n              label={t('quotePrint.applyCustomerDiscount')}\n            />\n            {!(this.props as any).compact && (\n              <Grid\n                container={true}\n              >\n                {customerCheckbox}\n              </Grid>\n            )}\n          </Grid>\n\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public handleSectionChange = (sectionIndex, products, checked) => {\n    const {\n      dispatch,\n      form,\n      formValues\n    } = this.props;\n\n    const {\n      selectedCustomerForProducts\n    } = this.state;\n\n    const formPath = `${this.resolveSectionPath(selectedCustomerForProducts, sectionIndex, 'products')}`;\n\n    // need to add the unique idenfifier\n    const productIds = products.map((product: IMap<Product>, index) => {\n      return product.get('quoteProductId') + `😈${sectionIndex + '-' + index}😈`;\n    });\n\n    if (!checked) {\n      dispatch(change(form, formPath, fromJS([])));\n      dispatch(change(form, formPath.replace(/products$/, 'overrideSelected'), false));\n    } else {\n      dispatch(change(form, formPath, productIds));\n      dispatch(change(form, formPath.replace(/products$/, 'overrideSelected'), true));\n    }\n  }\n\n  public allProductsInSectionSelected = (sectionIndex, products, selectedCustomer) => {\n    const {\n      formValues,\n    } = this.props;\n\n    const productIds = products.map((product: IMap<Product>) => {\n      return product.get('id') > 0;\n    });\n\n    if (!productIds.size) {\n      const overrideSelected = formValues\n        ? this.resolveSectionValue(selectedCustomer, sectionIndex, 'overrideSelected')\n        : false;\n      return overrideSelected ?? false;\n    }\n\n    const checkedProductIds = formValues\n      ? this.resolveSectionValue(selectedCustomer, sectionIndex, 'products')\n      : List();\n\n    if (checkedProductIds) {\n      if (checkedProductIds.size === productIds.size) {\n        return true;\n      }\n      return false;\n    }\n    return false;\n  }\n\n  public handleSectionParentchange = (field: IMap<QuoteSectionTemplateFieldsData>, sectionTemplateId: number) => {\n    const {\n      quote,\n      dispatch,\n      form,\n      formValues,\n    } = this.props;\n\n    const {\n      selectedCustomerForColumns\n    } = this.state;\n\n    const compact = (this.props as any).compact;\n    const activeCustomerId = (this.props as any).activeCustomerId;\n    const quotes = formValues && formValues.get('quoteDiscountVariations');\n    // Compact mode: use the SAME source as the form rebuild (QDV when discount ON, quote otherwise).\n    // This keeps section indices aligned between rendering iteration and form.sections lookup.\n    // Using `quote` here while form is built from QDV would produce off-by-one column toggles.\n    const compactQdvEntry = formValues?.get('discount') && quotes?.get(activeCustomerId);\n    const targetedQuote = compact\n      ? (compactQdvEntry || quote)\n      : (formValues && formValues.get('discount') && selectedCustomerForColumns && quotes && quotes.get(selectedCustomerForColumns)) ? quotes.get(selectedCustomerForColumns) : (formValues && formValues.get('quoteWithoutDiscount') || quote);\n\n    const sections = filterForValidSections(targetedQuote?.get('sections'));\n    const fieldId = field.get('id');\n\n    // checks everything if the parent is !checked already\n    if (!this.sectionColumnsParentCheck(field, sectionTemplateId)) {\n      const sectionIndexes = this.sectionIndexesBySectionTemplateId(sections, sectionTemplateId);\n\n      sections?.forEach((section, sectionIndex) => {\n        if (sectionIndexes.includes(sectionIndex)) {\n          const fieldsData = section.getIn(['sectionTemplate', 'fieldsData']);\n\n          const sectionFieldValues = (formValues\n                                      ? this.resolveSectionValue(selectedCustomerForColumns, sectionIndex, 'fields')\n                                      : null) || List();\n\n          const sectionFormPath = this.resolveSectionPath(selectedCustomerForColumns, sectionIndex);\n\n          fieldsData && fieldsData.forEach((_field) => {\n            const _fieldId = _field.get('id');\n            if (_fieldId === fieldId) {\n              if (!sectionFieldValues.includes(fieldId)) {\n                const newValues = sectionFieldValues.push(fieldId);\n                dispatch(change(form, `${sectionFormPath}.fields`, newValues));\n              }\n            }\n          }); // tslint:disable-line\n        }\n      });\n    } else {\n      // else removes all the fieldIds from the sections\n      const sectionIndexes = this.sectionIndexesBySectionTemplateId(sections, sectionTemplateId);\n      sections?.forEach((section, sectionIndex) => {\n        if (sectionIndexes.includes(sectionIndex)) {\n          const fieldsData = section.getIn(['sectionTemplate', 'fieldsData']);\n          const sectionFieldValues = (formValues ? this.resolveSectionValue(selectedCustomerForColumns, sectionIndex, 'fields') : null) || List();\n\n          const sectionFormPath2 = this.resolveSectionPath(selectedCustomerForColumns, sectionIndex);\n\n          fieldsData && fieldsData.forEach((_field) => {\n            const _fieldId = _field.get('id');\n            if (_fieldId === fieldId) {\n              if (sectionFieldValues.includes(fieldId)) {\n                const newValues = sectionFieldValues.filter(value => value !== fieldId);\n                dispatch(change(form, `${sectionFormPath2}.fields`, newValues));\n              }\n            }\n          }); // tslint:disable-line\n        }\n      });\n    }\n  }\n\n  public sectionColumnsParentCheck = (field: IMap<QuoteSectionTemplateFieldsData>, sectionTemplateId: number) => {\n    const {\n      formValues,\n      quote,\n    } = this.props;\n\n    const {\n      selectedCustomerForColumns\n    } = this.state;\n\n    // const customers = quote && quote.get('customers');\n    const compact = (this.props as any).compact;\n    const activeCustomerId = (this.props as any).activeCustomerId;\n    const quotes = formValues && formValues.get('quoteDiscountVariations');\n    // Compact mode: use SAME source as form rebuild (QDV when discount ON, quote otherwise).\n    const compactQdvEntry = formValues?.get('discount') && quotes?.get(activeCustomerId);\n    const targetedQuote = compact\n      ? (compactQdvEntry || quote)\n      : (formValues && formValues.get('discount') && selectedCustomerForColumns && quotes && quotes.get(selectedCustomerForColumns)) ? quotes.get(selectedCustomerForColumns) : (formValues && formValues.get('quoteWithoutDiscount') || quote);\n\n    const fieldId = field.get('id');\n    const sections = filterForValidSections(targetedQuote?.get('sections'));\n    const fieldsDataInQuote = sections?.map((section) => {\n      const templateIdFromQuote = section.getIn(['sectionTemplate', 'id']);\n      if (templateIdFromQuote === sectionTemplateId) {\n        return section.getIn(['sectionTemplate', 'fieldsData']);\n      }\n    }).filter(x => x !== undefined);\n\n    // use fieldId to get the number of possible selections in the quote if everything was selected\n    const fieldsDataInQuoteByFieldId = fieldsDataInQuote && fieldsDataInQuote.map((fields) => {\n      return fields.map(_field => _field.get('id'));\n    })\n      .map(_fieldIds => {\n        const index = _fieldIds.indexOf(fieldId);\n        return index !== -1 ? _fieldIds.get(index) : null;\n      })\n      .filter(x => x !== null);\n\n    // compares it with what's selected in the form. if its the same then everything should be selected and the parent column checkbox should be 'checked'\n    let formValueSections = formValues ? this.useCustomerSectionPath(selectedCustomerForColumns) ? formValues.getIn(['sections', `temp_${selectedCustomerForColumns}`]) : formValues.get('sections') : List();\n    // Unwrap \"default\" key if sections is a Map with \"default\" (compact mode)\n    if (Map.isMap(formValueSections) && formValueSections.has('default')) {\n      formValueSections = formValueSections.get('default');\n    }\n\n    const fieldsDataInFormValuesByFieldId = formValueSections && formValueSections.map((section, sectionIndex) => {\n      if (this.sectionIndexesBySectionTemplateId(sections, sectionTemplateId).includes(sectionIndex)) {\n        const fieldIds = section.get('fields', List());\n        const index = fieldIds.indexOf(fieldId);\n        return index !== -1 ? fieldIds.get(index) : null;\n      } else {\n        return null;\n      }\n    }).filter(x => x !== null);\n    if (fieldsDataInFormValuesByFieldId && fieldsDataInQuoteByFieldId) {\n      const allSectionColumnsIncludingfieldId = fieldsDataInFormValuesByFieldId.size === fieldsDataInQuoteByFieldId.size;\n      return allSectionColumnsIncludingfieldId;\n    }\n    return false;\n  }\n\n  // makes an array with ids by the passed in sectionTemplateId\n  public sectionIndexesBySectionTemplateId = (sections, sectionTemplateId) => {\n    const sectionIndexesThatContainsTheSectionTemplateId = sections?.map((section, index) => {\n      const templateIdFromQuote = section.getIn(['sectionTemplate', 'id']);\n      if (templateIdFromQuote === sectionTemplateId) {\n        return index;\n      }\n    }).filter(x => x !== undefined);\n    return sectionIndexesThatContainsTheSectionTemplateId;\n  }\n\n  public handleSwitch = (e) => {\n    const {\n      form,\n      dispatch,\n      quote,\n      compact,\n    } = this.props as any;\n\n    const quoteId = quote.get('id');\n    const checked = e.target.checked;\n    const value = checked ? 'splitquote' : 'quote';\n\n    dispatch(change(form, 'type', value));\n\n    if (!compact) {\n      checked\n        ? dispatch(push(`/preview/${quoteId}/splitquote`))\n        : dispatch(push(`/preview/${quoteId}`));\n    }\n  }\n\n  public SectionColumns = () => {\n    const {\n      quote,\n      classes,\n      printType,\n      t,\n      formValues,\n      dispatch,\n      form\n    } = this.props;\n\n    const {\n      sectionTooManySelectedIndexes,\n      columnsBySectionExpanded,\n      selectedCustomerForColumns,\n      multipleCustomers\n    } = this.state;\n\n    const customers = quote && quote.get('customers');\n    const compact = (this.props as any).compact;\n    const activeCustomerId = (this.props as any).activeCustomerId;\n    const quotes = formValues && formValues.get('quoteDiscountVariations');\n    // Compact mode: use SAME source as form rebuild (QDV when discount ON, quote otherwise),\n    // so this rendering's sectionIndex iteration matches form.sections[sectionIndex].fields lookup.\n    const compactQdvEntry = formValues?.get('discount') && quotes?.get(activeCustomerId);\n    const targetedQuote = compact\n      ? (compactQdvEntry || quote)\n      : (formValues && formValues.get('discount') && selectedCustomerForColumns && quotes && quotes.get(selectedCustomerForColumns)) ? quotes.get(selectedCustomerForColumns) : (formValues && formValues.get('quoteWithoutDiscount') || quote);\n\n    const sections = filterForValidSections(List.isList(targetedQuote?.get('sections')) ? targetedQuote?.get('sections') : List());\n\n    const customerMenuItems = customers && Boolean(customers.size) && customers.map((customer) => {\n      const id = customer.get('id');\n      const name = getCustomerDisplayName(customer);\n\n      const selectedCustomers = formValues && formValues.get('customers');\n\n      if (selectedCustomers && !selectedCustomers.includes(id)) {\n        return;\n      }\n\n      return <MenuItem key={id} value={id}>{name}</MenuItem>;\n    });\n\n    const sectionsColumnsDetails = sections && sections.map((section, sectionIndex) => {\n      const fieldsData = section.getIn(['sectionTemplate', 'fieldsData'], List());\n      const sectionTitle = section.get('sectionTitle');\n      const templateTitle = section.getIn(['sectionTemplate', 'templateTitle'], '');\n      const products = section.get('products').filter(product => product.get('id') > 0);\n      const sectionNote = section.get('note');\n\n      if (!Boolean(products.size) && !Boolean(sectionNote)) {\n        return;\n      }\n\n      const sectionCheckboxGroup = fieldsData.map((field: IMap<QuoteSectionTemplateFieldsData>, index: number) => {\n        if (field.get('invisible')) {\n          return null;\n        }\n        const fieldName = field.get('name');\n        const fieldId = field.get('id');\n\n        return (\n          <Grid\n            container={true}\n            key={index}\n          >\n            <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n              name={this.resolveSectionPath(selectedCustomerForColumns, sectionIndex, 'fields')}\n              // name={`sections[${sectionIndex}].fields`}\n              component={FieldCheckbox}\n              props={{\n                label: `${fieldName}`,\n                color: 'primary',\n                checkedValue: fieldId,\n              }}\n            />\n          </Grid>\n        );\n      });\n\n      return (\n        <Grid\n          container={true}\n          direction='column'\n          key={sectionIndex}\n          className={classes.sectionColumn}\n          style={{ width: 'auto' }}\n        >\n          <Typography>{sectionTitle}</Typography>\n          <Typography>({templateTitle})</Typography>\n          {\n            (sectionTooManySelectedIndexes.getIn(['default', section.get('sectionId')]) || sectionTooManySelectedIndexes.getIn([`temp_${selectedCustomerForColumns}`, section.get('sectionId')]))\n              ? <Typography\n                color='error'\n                variant='caption'\n              >\n                {t('quotePrint.maxColumnErrorMessage')}\n              </Typography>\n              : null\n          }\n          {sectionCheckboxGroup}\n        </Grid>\n      );\n    });\n\n    const sectionTemplates = sections && sections.map((section) => {\n      return section.get('sectionTemplate');\n    }).filter(x => x);\n\n    const nonDupliateByIdSectionTemplates = sectionTemplates && sectionTemplates\n      .reduce((acc, section) => {\n        const sectionId = section.get('id');\n\n        const hasId = acc.filter((_section) => {\n          if (_section.get('id') === sectionId) {\n            return _section;\n          }\n        });\n\n        if (hasId.size === 0) {\n          return acc.push(section);\n        }\n        return acc;\n      }, List());\n\n    const sectionColumnsParent = nonDupliateByIdSectionTemplates && nonDupliateByIdSectionTemplates.map((sectionTemplate: IMap<QuoteSectionTemplate>, index: number) => {\n      const templateTitle = sectionTemplate.get('templateTitle');\n      const fieldsData = sectionTemplate.get('fieldsData', List());\n      const sectionTemplateId = sectionTemplate.get('id');\n      const sectionField = fieldsData.map((field: IMap<QuoteSectionTemplateFieldsData>, _index) => {\n        if (field.get('invisible')) {\n          return null;\n        }\n        const fieldName = field.get('name');\n        const fieldId = field.get('id');\n\n        return (\n          <Grid\n            container={true}\n            direction='column'\n            key={_index + fieldId}\n            className={classes.sectionColumn}\n            style={{ width: 'auto' }}\n          >\n            <FormControlLabel\n              control={\n                <Checkbox\n                  color='primary'\n                  checked={this.sectionColumnsParentCheck(field, sectionTemplateId)}\n                  onChange={(e) => this.handleSectionParentchange(field, sectionTemplateId)}\n                />\n              }\n              label={fieldName}\n            />\n          </Grid>\n        );\n      });\n\n\n      return <Grid\n        key={index}\n        container={true}\n        direction='column'\n      >\n        <Typography variant='subtitle2' className={classes.subtitle}>{templateTitle}</Typography>\n        <Grid\n          container={true}\n          direction='row'\n        >\n          {sectionField}\n        </Grid>\n      </Grid>;\n    });\n\n    const isSelectAllButtonSelected = nonDupliateByIdSectionTemplates?.every((sectionTemplate: IMap<QuoteSectionTemplate>, index: number) => {\n      const fieldsData = sectionTemplate.get('fieldsData', List());\n      const sectionTemplateId = sectionTemplate.get('id');\n      return fieldsData.every((field: IMap<QuoteSectionTemplateFieldsData>, _index) => {\n        if (field.get('invisible')) {\n          return true;\n        }\n        return this.sectionColumnsParentCheck(field, sectionTemplateId);\n      });\n    }) ?? false;\n    const selectAllButton = <FormControlLabel\n      style={{ marginBottom: '16px' }}\n      control={\n        <Checkbox\n          color='primary'\n          checked={isSelectAllButtonSelected}\n          onChange={(e) => {\n            if (isSelectAllButtonSelected) {\n              sections.forEach((section, index) => {\n                dispatch(change(form, this.resolveSectionPath(selectedCustomerForColumns, index, 'fields'), List()));\n              });\n            } else {\n              sections.forEach((section, index) => {\n                const fieldsData = section.getIn(['sectionTemplate', 'fieldsData'], List());\n                const fieldIds = fieldsData?.filter((field: IMap<QuoteSectionTemplateFieldsData>) => !field.get('invisible')).map((field: IMap<QuoteSectionTemplateFieldsData>) => field.get('id')) ?? List();\n                dispatch(change(form, this.resolveSectionPath(selectedCustomerForColumns, index, 'fields'), fieldIds));\n              });\n            }\n          }}\n        />\n      }\n      label={t('quotePrint.selectAll')}\n    />;\n    const hasColumnError = sectionTooManySelectedIndexes.size > 0;\n    return (\n      <ExpansionPanel\n        className={hasColumnError ? classes.panelError : classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.sectionColumnsLabel'), [...QUOTE_PRINT_SECTION_FIELDS.sectionColumns], Boolean(formValues?.get('discount')))}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n            direction='row'\n            justify='space-between'\n            alignItems='center'\n          >\n            <Grid item={true}>\n              <FormControlLabel\n                className={classes.splitQuote}\n                control={\n                  <Switch\n                    color='primary'\n                    onChange={(e) => this.handleSwitch(e)}\n                    checked={(this.props as any).compact ? formValues?.get('type') === 'splitquote' : printType === 'splitquote'}\n                    disabled={Boolean(formValues && formValues.get('customers')?.size > 1)}\n                  />\n                }\n                label={t('quotePrint.splitQuoteLabel')}\n                labelPlacement='start'\n              />\n            </Grid>\n            {\n              // PT-5477 (2026-09-02): hide the legacy customer dropdown in\n              // compact mode (Export page / QuoteEmailModal) — the customer\n              // chip row above already controls this.\n              !(this.props as any).compact && multipleCustomers &&\n              <Grid item={true}>\n                <Grid container={true} justify='flex-end' alignItems='center' className={classes.title}>\n                  <Typography variant='inherit'>{t('quotePrint.customer')}</Typography>\n                  <Select\n                    style={{ minWidth: 200, marginLeft: 16 }}\n                    value={selectedCustomerForColumns}\n                    onChange={this.handleOnCustomerSelectForCulumns}\n                    MenuProps={{\n                      anchorOrigin: {\n                        vertical: 'bottom',\n                        horizontal: 'left'\n                      },\n                      getContentAnchorEl: null\n                    }}\n                  >\n                    <MenuItem value={0} disabled={true}>{t('quotePrint.noCustomer')}</MenuItem>\n                    {customerMenuItems}\n                  </Select>\n                </Grid>\n              </Grid>\n            }\n\n            {\n              sectionTooManySelectedIndexes?.has('customersWithTooManyFields') && (\n                <Grid container={true}>\n                  <Typography\n                    color='error'\n                    variant='caption'\n                    className={classes.sectionColumnsError}\n                  >\n                    {t('quotePrint.maxColumnErrorMessage')}:\n                  </Typography>\n                  <Grid container={true}>\n                    <ul>\n                      {\n                        sectionTooManySelectedIndexes.get('customersWithTooManyFields').map((displayName, index) => {\n                          return (\n                            <li key={index} style={{ color: '#f44336' }}>\n                              <Typography\n                              color='error'\n                              variant='caption'\n                            >\n                              {displayName}\n                            </Typography>\n                            </li>\n                          );\n                        })\n                      }\n                    </ul>\n                  </Grid>\n                </Grid>\n              )\n            }\n\n            <Grid\n              container={true}\n            >\n              <ExpansionPanel\n                classes={{\n                  root: classes.sectionColumnDetail\n                }}\n                defaultExpanded={true}\n              >\n                <ExpansionPanelSummary\n                  classes={{\n                    root: classes.sectionColumnDetailSummary,\n                    content: classes.sectionColumnDetailSummaryContent,\n                  }}\n                  expandIcon={\n                    <KeyboardArrowDownRoundedIcon />\n                  }\n                  aria-controls='panel1a-content'\n                  id='panel1a-header'\n                >\n                  <Typography variant='h6' className={classes.viewColumnsBySectionTitle}>{t('quotePrint.viewByTemplateLabel')}</Typography>\n                </ExpansionPanelSummary>\n\n                <ExpansionPanelDetails\n                  classes={{\n                    root: classes.expansionPanelDetailsTemplate\n                  }}\n                >\n                  {sectionColumnsParent?.size > 0 ? selectAllButton : null}\n                  {sectionColumnsParent ? sectionColumnsParent : <Typography>{t('generalLoading.loading')}</Typography>}\n                </ExpansionPanelDetails>\n              </ExpansionPanel>\n            </Grid>\n\n            {/* section column details */}\n            <Grid\n              container={true}\n              justify='flex-start'\n\n            >\n              <ExpansionPanel\n                classes={{\n                  root: classes.sectionColumnDetail\n                }}\n                // defaultExpanded={false}\n                expanded={columnsBySectionExpanded}\n                onChange={this.handleColumnsBySectionChange}\n              >\n                <ExpansionPanelSummary\n                  classes={{\n                    root: classes.sectionColumnDetailSummary,\n                    content: classes.sectionColumnDetailSummaryContent,\n                  }}\n                  expandIcon={\n                    <KeyboardArrowDownRoundedIcon />\n                  }\n                  aria-controls='panel1a-content'\n                  id='panel1a-header'\n                >\n                  <Typography variant='h6' className={classes.viewColumnsBySectionTitle}>{t('quotePrint.viewBySectionLabel')}</Typography>\n                </ExpansionPanelSummary>\n\n                <ExpansionPanelDetails style={{ flexDirection: 'column' }}>\n                  <div>\n                    {sections?.size > 0 ? selectAllButton : null}\n                  </div>\n                  <div className={classes.viewColumnsBySection}>\n                    {sections ? sectionsColumnsDetails : <Typography>{t('generalLoading.loading')}</Typography>}\n                  </div>\n                </ExpansionPanelDetails>\n              </ExpansionPanel>\n              {\n                !columnsBySectionExpanded && sectionsColumnsDetails && sectionTooManySelectedIndexes.get('tooManyFields')\n                  ? <Typography\n                    color='error'\n                    variant='caption'\n                    className={classes.sectionColumnsError}\n                  >\n                    {t('quotePrint.maxColumnErrorMessage')}\n                  </Typography>\n                  : null\n              }\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public handleColumnsBySectionChange = (event: React.ChangeEvent<{}>, isExpanded: boolean) => {\n    this.setState(prevState => ({\n      columnsBySectionExpanded: !prevState.columnsBySectionExpanded,\n    }));\n  }\n\n  public handleOnCustomerSelectForProducts = (event: React.ChangeEvent<{ name?: string; value: number | null; }>, child: React.ReactNode) => {\n    this.setState({ selectedCustomerForProducts: event.target.value });\n  }\n\n  public handleOnCustomerSelectForCulumns = (event: React.ChangeEvent<{ name?: string; value: number | null; }>, child: React.ReactNode) => {\n    this.setState({ selectedCustomerForColumns: event.target.value });\n  }\n\n  public handleOnCustomerSelectForSummary = (event: React.ChangeEvent<{ name?: string; value: number | null; }>, child: React.ReactNode) => {\n    this.setState({ selectedCustomerForSummary: event.target.value });\n  }\n\n  public ProductSpecs = () => {\n    const {\n      classes,\n      quote,\n      t,\n      dispatch,\n      form,\n      formValues,\n    } = this.props;\n\n    const {\n      checkedSections,\n      productSectionsExpanded,\n      productSectionsExpandedList,\n      selectedCustomerForProducts,\n      multipleCustomers\n    } = this.state;\n\n    const customers = quote && quote.get('customers');\n    const quotes = formValues && formValues.get('quoteDiscountVariations');\n    // When discount ON, use QDV sections — hides products invisible to the customer.\n    // When discount OFF, use quote sections — shows all products.\n    const targetedQuote = (formValues && formValues.get('discount') && selectedCustomerForProducts && quotes && quotes.get(selectedCustomerForProducts)) ? quotes.get(selectedCustomerForProducts) : (formValues && formValues.get('quoteWithoutDiscount') || quote);\n\n    const sections = filterForValidSections(List.isList(targetedQuote?.get('sections')) ? targetedQuote?.get('sections') : List());\n    const sectionsCount = sections && sections.count();\n    const isAllSelected = sections\n      .every((section, sectionIndex) => {\n        const products = section.get('products').filter(product => product.get('id') > 0);\n        return this.allProductsInSectionSelected(sectionIndex, products, selectedCustomerForProducts);\n      });\n\n    const customerMenuItems = customers && Boolean(customers.size) && customers.map((customer) => {\n      const id = customer.get('id');\n      const name = getCustomerDisplayName(customer);\n\n      const selectedCustomers = formValues && formValues.get('customers');\n\n      if (selectedCustomers && !selectedCustomers.includes(id)) {\n        return;\n      }\n\n      return <MenuItem key={id} value={id}>{name}</MenuItem>;\n    });\n\n    const sectionPanels = sections && sections.map((section, sectionIndex) => {\n      const products = section.get('products').filter(product => product.get('id') > 0);\n      const sectionTitle = section.get('sectionTitle');\n      const sectionNote = section.get('note');\n      const excludeSection = Boolean(products.count() && !products.some(product => !product.get('excluded')));\n\n      if (!Boolean(products.size) && !sectionNote) {\n        return;\n      }\n\n      const productCheckboxes = products.filter(product => product.get('id') > 0).map((product: IMap<Product>, productIndex: number) => {\n        const path = this.resolveSectionPath(selectedCustomerForProducts, sectionIndex);\n        return (\n          <Grid\n            key={productIndex}\n            container={true}\n            direction='column'\n          >\n            <Grid\n              container={true}\n              wrap='nowrap'\n              alignItems='center'\n              key={productIndex + 'product'}\n              className={classes.productRowContainer}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name={`${path}.products`}\n                component={FieldCheckbox}\n                props={{\n                  label: `${product.get('productNumber')}`,\n                  color: 'primary',\n                  checkedValue: product.get('quoteProductId') + `😈${sectionIndex + '-' + productIndex}😈`,\n                  inputProps: {\n                    onChange: (checkedValues) => dispatch(change(form, `${path}.overrideSelected`, Boolean(checkedValues?.size)))\n                    // onChange: (checkedValues) => {\n                    //   // removes sectionindex from checked sections if one of the products is unchecked. so if \"checkedValues\" size is different from the total size\n                    //   if (products.size !== checkedValues.size) {\n                    //     const filteredCheckedSections = checkedSections.filter((checkedSection, index) => {\n                    //       return checkedSection !== sectionIndex;\n                    //     });\n                    //     this.setState({\n                    //       checkedSections: filteredCheckedSections\n                    //     });\n                    //   } else {\n                    //     this.setState({\n                    //       checkedSections: [...checkedSections, sectionIndex]\n                    //     });\n                    //   }\n                    // }\n                  },\n                  helperText: false\n                }}\n              />\n              {\n                (!excludeSection && product.get('excluded')) &&\n                <Tooltip title={t('quotePrint.productExcludeTooltip')}>\n                  <RemoveCircleIcon color='primary' />\n                </Tooltip>\n              }\n            </Grid>\n          </Grid>\n        );\n      });\n\n      return (\n        // don't display checkbox for section if products is empty. OR if products is empty but there's notes\n        // Boolean(products.size) || Boolean(sectionNote)\n        Boolean(products.size) || Boolean(sectionNote)\n          ? <Grid\n            key={sectionIndex}\n            container={true}\n            className={classes.productExpansion}\n          >\n            <ExpansionPanel\n              // defaultExpanded={true}\n              expanded={Boolean(productSectionsExpandedList.get(sectionIndex))}\n              onChange={(event: React.ChangeEvent<{}>, expanded: boolean) => {\n                this.setState({ productSectionsExpandedList: productSectionsExpandedList.set(sectionIndex, expanded) }, () => {\n                  const sectionsExpandedCount = this.state.productSectionsExpandedList.filter(sectionExpanded => sectionExpanded).count();\n                  if (expanded && sectionsExpandedCount === sectionsCount) {\n                    this.setState({ productSectionsExpanded: true });\n                  } else if (!expanded && sectionsExpandedCount === sectionsCount) {\n                    this.setState({ productSectionsExpanded: false });\n                  }\n                });\n              }}\n              key={sectionIndex + 'section'}\n              classes={{\n                root: classes.productSectionExpansionPanelRoot,\n              }}\n            >\n              <ExpansionPanelSummary\n                component={'div'}\n                expandIcon={\n                  <KeyboardArrowDownRoundedIcon />\n                }\n                // ariaLabel='Expand'\n                // ariaControls={sectionIndex}\n                id={String(sectionIndex)}\n                className={classes.expansionPanelSummaryProductsToPrint}\n              >\n                <Grid container={true} alignItems='center' wrap='nowrap'>\n                  <FormControlLabel\n                    aria-label='Acknowledge'\n                    onClick={event => event.stopPropagation()}\n                    onFocus={event => event.stopPropagation()}\n                    control={\n                      <Checkbox\n                        color='primary'\n                        checked={this.allProductsInSectionSelected(sectionIndex, products, selectedCustomerForProducts) ? true : false}\n                        onChange={(e, checked) => this.handleSectionChange(sectionIndex, products, checked)}\n                      />\n                    }\n                    label={sectionTitle}\n                    classes={{\n                      label: classes.subtitle\n                    }}\n                  />\n                  {\n                    excludeSection &&\n                    <Tooltip title={t('quotePrint.sectionExcludeTooltip')}>\n                      <RemoveCircleIcon color='primary' />\n                    </Tooltip>\n                  }\n                </Grid>\n              </ExpansionPanelSummary>\n              <ExpansionPanelDetails>\n                <Grid\n                  container={true}\n                >\n                  {productCheckboxes}\n                </Grid>\n              </ExpansionPanelDetails>\n            </ExpansionPanel>\n          </Grid>\n          : null\n      );\n    });\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center' className={classes.title}>\n          <Typography variant='h6'>{t('quotePrint.productsLabel')}</Typography>\n          <div style={{ display: 'flex', alignItems: 'center' }}>\n            {(this.props as any).compact && (this.props as any).onApplyToAll && !formValues?.get('discount') && (\n              <Tooltip title={t('quoteDetail.applyToAllTooltip')}>\n                <Button variant='text' className={classes.applyToAllButton} onClick={() => (this.props as any).onApplyToAll([...QUOTE_PRINT_SECTION_FIELDS.products])}>\n                  {t('quoteDetail.applyToAll')}\n                </Button>\n              </Tooltip>\n            )}\n            <Button\n              color='primary'\n              endIcon={<KeyboardArrowDownRoundedIcon className={productSectionsExpanded ? classes.expandArrow : ''} />}\n              onClick={() => {\n                this.setState({\n                  productSectionsExpanded: !productSectionsExpanded,\n                  productSectionsExpandedList: List(Array(sectionsCount).fill(!productSectionsExpanded))\n                });\n              }}\n            >\n              {t('quotePrint.viewAllToggle')}\n            </Button>\n          </div>\n        </Grid>\n        {\n          // PT-5477 (2026-09-02): hide the legacy \"Customer\" dropdown in\n          // compact mode (Export page / QuoteEmailModal). The customer chip\n          // row at the top of the page already controls which customer's\n          // products are shown — an inline dropdown here is redundant and\n          // confuses the UX (its value is separate state that can drift).\n          !(this.props as any).compact && multipleCustomers &&\n          <Grid container={true} wrap='nowrap' justify='flex-end' alignItems='center' className={classes.title}>\n            <Typography variant='inherit'>{t('quotePrint.customer')}</Typography>\n            <Select\n              style={{ minWidth: 200, marginLeft: 16 }}\n              value={selectedCustomerForProducts}\n              onChange={this.handleOnCustomerSelectForProducts}\n              MenuProps={{\n                anchorOrigin: {\n                  vertical: 'bottom',\n                  horizontal: 'left'\n                },\n                getContentAnchorEl: null\n              }}\n            >\n              <MenuItem value={0} disabled={true}>{t('quotePrint.noCustomer')}</MenuItem>\n              {customerMenuItems}\n            </Select>\n          </Grid>\n        }\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid container={true} direction='column'>\n            {\n              sectionPanels.size > 0 ? <FormControlLabel\n                style={{ marginBottom: '16px' }}\n                control={\n                  <Checkbox\n                    color='primary'\n                    checked={isAllSelected}\n                    onChange={(e) => {\n                      if (isAllSelected) {\n                        // this.setState({\n                        //   checkedSections: []\n                        // });\n                        sections.forEach((section, sectionIndex) => {\n                          const path = this.resolveSectionPath(selectedCustomerForProducts, sectionIndex);\n\n                          dispatch(change(form, `${path}.products`, List()));\n                          dispatch(change(form, `${path}.overrideSelected`, false));\n                        });\n                      } else {\n                        // this.setState({\n                        //   checkedSections: sections.map((section, sectionIndex) => sectionIndex).toArray(),\n                        // });\n                        sections.forEach((section, sectionIndex) => {\n                          const products = section.get('products').filter(product => product.get('id') > 0);\n                          const ids = products.map((product, productIndex) => product.get('quoteProductId') + `😈${sectionIndex + '-' + productIndex}😈`);\n                          const path = this.resolveSectionPath(selectedCustomerForProducts, sectionIndex);\n\n                          dispatch(change(form, `${path}.products`, ids));\n                          dispatch(change(form, `${path}.overrideSelected`, true));\n                        });\n                      }\n                    }}\n                  />\n                }\n                label={t('quotePrint.selectAll')}\n              /> : null\n            }\n            <Grid\n              container={true}\n              justify='flex-start'\n              className={classes.productExpansionContainer}\n            >\n              {/* expansion panelception */}\n              {sectionPanels}\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public InfoToDisplay = () => {\n    const {\n      classes,\n      quote,\n      t\n    } = this.props;\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.infoToDisplayLabel'), [...QUOTE_PRINT_SECTION_FIELDS.productInfo])}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n            className={classes.productExpansionContainer}\n            justify='flex-start'\n          >\n            <Grid\n              container={true}\n              style={{ width: 'auto' }}\n              direction='column'\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='productManufacturer'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.manufacturerOptionLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              container={true}\n              style={{ width: 'auto' }}\n              direction='column'\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='productImage'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.imageOptionLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              container={true}\n              style={{ width: 'auto' }}\n              direction='column'\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='productHyperlink'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.hyperlinkToSpecSheetLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              container={true}\n              style={{ width: 'auto' }}\n              direction='column'\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='itemNumber'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.internalProductNumberLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              container={true}\n              style={{ width: 'auto' }}\n              direction='column'\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='currency'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.currencyOptionLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public QuoteSummary = () => {\n    const {\n      classes,\n      quote,\n      t,\n      formValues,\n      form,\n      dispatch\n    } = this.props;\n\n    const {\n      selectedCustomerForSummary,\n      multipleCustomers\n    } = this.state;\n\n    const customers = quote && quote.get('customers');\n    const quotes = formValues && formValues.get('quoteDiscountVariations');\n    const targetedQuote = (formValues && formValues && formValues.get('discount') && selectedCustomerForSummary && quotes && quotes.get(selectedCustomerForSummary)) ? quotes.get(selectedCustomerForSummary) : (formValues && formValues.get('quoteWithoutDiscount') || quote);\n\n    const customerMenuItems = customers && Boolean(customers.size) && customers.map((customer) => {\n      const id = customer.get('id');\n      const name = getCustomerDisplayName(customer);\n\n      const selectedCustomers = formValues && formValues.get('customers');\n\n      if (selectedCustomers && !selectedCustomers.includes(id)) {\n        return;\n      }\n\n      return <MenuItem key={id} value={id}>{name}</MenuItem>;\n    });\n\n    const sections = filterForValidSections(List.isList(targetedQuote?.get('sections')) ? targetedQuote?.get('sections') : List());\n    const discountList = targetedQuote?.get('discountList');\n    const grandTotals = targetedQuote?.get('grandTotals');\n    const isAllSectionSelected = sections?.every((section, sectionIndex) => {\n      const sectionTemplate = section.get('sectionTemplate', Map());\n      const sectionCalculations = sectionTemplate.get('sectionCalculations', List());\n      return sectionCalculations.every((calculation, calculationIndex) => {\n        return (this.resolveSectionValue(selectedCustomerForSummary, sectionIndex, 'total'))?.includes(calculation.get('name'));\n      });\n    }) ?? true;\n    // const isAllQuoteTotalSelected = grandTotals?.every((totalObject, index) => {\n    //   return formValues?.get('quoteTotal')?.includes(totalObject.get('name'));\n    // }) ?? true;\n    // const isAllGrandTotalSelected = grandTotals?.every((totalObject, index) => {\n    //   return formValues?.get('grandTotal')?.includes(totalObject.get('name'));\n    // }) ?? true;\n    // const isAllOtherChargeSelected = discountList?.every((discountOrCharge, index) => {\n    //   return formValues?.get('discounts')?.includes(discountOrCharge.get('label'));\n    // }) ?? true;\n    const quoteSummarySectionPanels = sections && sections.map((section, sectionIndex) => {\n      const sectionTemplate = section.get('sectionTemplate', Map());\n      const sectionCalculations = sectionTemplate.get('sectionCalculations', List());\n      const sectionTitle = section.get('sectionTitle');\n      const products = section.get('products').filter(product => product.get('id') > 0);\n      const sectionNote = section.get('note');\n\n      if (!Boolean(products.size) && !Boolean(sectionNote)) {\n        return;\n      }\n\n      const calculationCheckboxes = sectionCalculations.map((calculation, calculationIndex: number) => {\n        return (\n          <Grid\n            key={calculationIndex}\n          >\n            <Grid\n              key={calculationIndex + 'calculation'}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name={this.resolveSectionPath(selectedCustomerForSummary, sectionIndex, 'total')}\n                component={FieldCheckbox}\n                props={{\n                  label: `${calculation.get('name')}`,\n                  color: 'primary',\n                  checkedValue: calculation.get('name'),\n                }}\n              />\n            </Grid>\n          </Grid>\n        );\n      }).valueSeq().toArray();\n\n      return (\n        <Grid\n          key={sectionIndex}\n          container={true}\n          direction='column'\n        >\n          <Typography>{sectionTitle}</Typography>\n          {calculationCheckboxes}\n        </Grid>\n      );\n    });\n\n    const quoteTotal = grandTotals && grandTotals.map((totalObject, index) => {\n      const totalName = totalObject.get('name');\n      return (\n        <Grid\n          key={index}\n        >\n          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n            name={'quoteTotal'}\n            component={FieldCheckbox}\n            props={{\n              label: totalName,\n              color: 'primary',\n              checkedValue: totalName\n            }}\n          />\n        </Grid>\n      );\n    }).valueSeq().toArray();\n\n    const grandTotalContainer = grandTotals && grandTotals.map((totalObject, index) => {\n      const grandTotal = totalObject.get('name');\n      return (\n        <Grid\n          key={index}\n        >\n          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n            name={`grandTotal`}\n            component={FieldCheckbox}\n            props={{\n              label: grandTotal,\n              color: 'primary',\n              checkedValue: grandTotal\n            }}\n          />\n        </Grid>\n      );\n    }).valueSeq().toArray();\n\n    const otherCharges = discountList && discountList.map((discountOrCharge, index) => {\n      const label = discountOrCharge.get('label');\n\n      return <Grid\n        container={true}\n        direction='column'\n        key={index}\n      >\n        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n          name={`discounts`}\n          component={FieldCheckbox}\n          props={{\n            label,\n            color: 'primary',\n            checkedValue: label,\n          }}\n        />\n      </Grid>;\n    });\n\n    const hasAtLeastOneCheckbox = otherCharges?.size > 0 || quoteTotal?.size > 0 || grandTotalContainer?.size > 0 || sections?.some((section) => {\n      return section.getIn(['sectionTemplate', 'sectionCalculations'], List()).size > 0;\n    });\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.summaryLabel'), [...QUOTE_PRINT_SECTION_FIELDS.summary])}\n        {\n          // PT-5477 (2026-09-02): hide the legacy customer dropdown in\n          // compact mode (Export page / QuoteEmailModal) — the customer\n          // chip row above already controls this.\n          !(this.props as any).compact && multipleCustomers &&\n          <Grid container={true} wrap='nowrap' justify='flex-end' alignItems='center' className={classes.title}>\n            <Typography variant='inherit'>{t('quotePrint.customer')}</Typography>\n            <Select\n              style={{ minWidth: 200, marginLeft: 16 }}\n              value={selectedCustomerForSummary}\n              onChange={this.handleOnCustomerSelectForSummary}\n              MenuProps={{\n                anchorOrigin: {\n                  vertical: 'bottom',\n                  horizontal: 'left'\n                },\n                getContentAnchorEl: null\n              }}\n            >\n              <MenuItem value={0} disabled={true}>{t('quotePrint.noCustomer')}</MenuItem>\n              {customerMenuItems}\n            </Select>\n          </Grid>\n        }\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid container={true} direction='column'>\n            {\n              hasAtLeastOneCheckbox ? <FormControlLabel\n                style={{ marginBottom: '16px' }}\n                control={\n                  <Checkbox\n                    color='primary'\n                    checked={isAllSectionSelected}\n                    onChange={(e) => {\n                      if (isAllSectionSelected) {\n                        sections?.forEach((section, sectionIndex) => {\n                          const formPath = this.resolveSectionPath(selectedCustomerForSummary, sectionIndex, 'total');\n                          dispatch(change(form, formPath, List()));\n                        });\n                        // dispatch(change(form, 'grandTotal', List()));\n                        // dispatch(change(form, `quoteTotal`, List()));\n                        // dispatch(change(form, 'discounts', List()));\n                      } else {\n                        sections?.forEach((section, sectionIndex) => {\n                          const sectionTemplate = section.get('sectionTemplate', Map());\n                          const sectionCalculations = sectionTemplate?.get('sectionCalculations', List()) ?? List();\n                          const value = sectionCalculations?.reduce((ctx, calculation, calculationIndex: number) => {\n                            ctx = ctx.push(calculation.get('name'));\n                            return ctx;\n                          }, List()) ?? List();\n                          const formPath = this.resolveSectionPath(selectedCustomerForSummary, sectionIndex, 'total');\n                          dispatch(change(form, formPath, value));\n                        });\n                        // const totalValue = grandTotals?.reduce((ctx, totalObject, index) => {\n                        //   const name = totalObject.get('name');\n                        //   ctx = ctx.push(name);\n                        //   return ctx;\n                        // }, List()) ?? List();\n                        // const discountValue = discountList?.reduce((ctx, discountOrCharge, index) => {\n                        //   const label = discountOrCharge.get('label');\n                        //   ctx = ctx.push(label);\n                        //   return ctx;\n                        // }, List()) ?? List();\n                        // dispatch(change(form, 'grandTotal', totalValue));\n                        // dispatch(change(form, `quoteTotal`, totalValue));\n                        // dispatch(change(form, 'discounts', discountValue));\n                      }\n                    }}\n                  />\n                }\n                label={t('quotePrint.selectAll')}\n              /> : null\n            }\n            <Grid\n              container={true}\n              className={classes.productExpansionContainer}\n              justify='flex-start'\n            >\n              <Grid\n                xs={12}\n                item={true}\n                container={true}\n                style={{ width: 'auto', marginBottom: 60 }}\n                direction='column'\n              >\n                <Typography\n                  className={classes.quoteSummaryTitle}\n                >\n                  {t('quotePrint.sectionTotalLabel')}\n                </Typography>\n                {quoteSummarySectionPanels}\n              </Grid>\n              <Grid\n                container={true}\n                style={{ width: 'auto' }}\n                direction='column'\n              >\n                <Typography\n                  className={classes.quoteSummaryTitle}\n                >\n                  {t('quotePrint.quoteTotalLabel')}\n                </Typography>\n                {quoteTotal}\n              </Grid>\n              <Grid\n                container={true}\n                style={{ width: 'auto' }}\n                direction='column'\n              >\n                <Typography\n                  className={classes.quoteSummaryTitle}\n                >\n                  {t('quotePrint.grandTotalLabel')}\n                </Typography>\n                {grandTotalContainer}\n              </Grid>\n              <Grid\n                container={true}\n                style={{ width: 'auto' }}\n                direction='column'\n              >\n                <Typography\n                  className={classes.quoteSummaryTitle}\n                >\n                  {t('quotePrint.otherChargesLabel')}\n                </Typography>\n                {otherCharges}\n              </Grid>\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public Others = () => {\n    const {\n      classes,\n      t\n    } = this.props;\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        {this.renderSectionTitle(t('quotePrint.othersLabel'), [...QUOTE_PRINT_SECTION_FIELDS.others])}\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n          >\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Typography>{t('quotePrint.notesAndCommentsLabel')}</Typography>\n              <Grid\n                item={true}\n              >\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='productNotes'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('quotePrint.productNotesLabel'),\n                    color: 'primary',\n                  }}\n                />\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='sectionNotes'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('quotePrint.sectionNotesLabel'),\n                    color: 'primary',\n                  }}\n                />\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='comments'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('quotePrint.quoteCommentsLabel'),\n                    color: 'primary',\n                  }}\n                />\n              </Grid>\n            </Grid>\n          </Grid>\n\n          <Grid\n            container={true}\n            direction='column'\n          >\n            <Typography>{t('quotePrint.termsConditionsLabel')}</Typography>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='termsAndConditions'\n                component={FieldCheckbox}\n                props={{\n                  label: t('quotePrint.termsConditionsLabel'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n\n  public render() {\n    const {\n      classes,\n      match,\n      quote,\n      onDownload,\n      compact,\n    } = this.props as any;\n\n    const isSharingVendorQuote = match.path.includes(SHARE_VENDOR_QUOTE_PATH);\n\n    if (isSharingVendorQuote) {\n      // const customers: List<IMap<Contact>> = quote && quote.get('customers');\n      return <ShareVendorQuote quote={quote} onDownload={onDownload} match={match}/>;\n    }\n\n    return (\n      <Grid\n        className={compact ? `${classes.root} ${classes.compact}` : classes.root}\n      >\n        <form>\n          {/* choose project info to display */}\n          {this.ProjectInfo()}\n\n          {/* choose quotelogo position */}\n          {this.QuoteLogoPosition()}\n\n          {/* choose quote creator info to display */}\n          {this.CreatorInfo()}\n\n          {/* PT-5477 (2026-08-28): CustomerDiscount stays at the s149/root\n              position (after CreatorInfo). The Export page hides it via\n              `hideCustomerDiscount` because that flow surfaces the discount\n              UI in the per-type header instead. The legacy QuoteEmailModal\n              (feat_emailImprovements OFF) and the legacy /preview/:id/:type\n              page both render it here — matching production. */}\n          {!(this.props as any).hideCustomerDiscount && this.CustomerDiscount()}\n\n          {/* choose section columns */}\n          {this.SectionColumns()}\n\n          {/* choose products to print */}\n          {this.ProductSpecs()}\n\n          {/* choose products info to display */}\n          {this.InfoToDisplay()}\n          {/* revert back s93/PT-3184 */}\n\n          {/* choose quote summary to display */}\n          {this.QuoteSummary()}\n\n          {/* others */}\n          {this.Others()}\n        </form>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: '100%',\n    padding: theme.spacing(3),\n  },\n  title: {\n    padding: theme.spacing(2.5, 3)\n  },\n  customerTitle: {\n    paddingTop: theme.spacing(2.5),\n    padding: theme.spacing(0, 3)\n  },\n  customerNote: {\n    padding: theme.spacing(0, 3)\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontWeight: 'bold'\n  },\n  sectionsContainerTitle: {\n    padding: theme.spacing(0, 3)\n  },\n  applyToAllButton: {\n    color: '#E67E22',\n    fontWeight: 500,\n    fontSize: 12,\n    whiteSpace: 'nowrap' as const,\n    marginRight: 8,\n    textTransform: 'uppercase' as const,\n    '&:hover': {\n      backgroundColor: '#FEF2E1',\n    },\n  },\n  expansionPanelDetailsProjectInfo: {\n    padding: `${theme.spacing()}px ${theme.spacing(3)}px ${theme.spacing()}px`\n  },\n  productSectionExpansionPanelRoot: {\n    boxShadow: 'none',\n    width: '100%'\n  },\n  panel: {\n    margin: `${theme.spacing(2)}px 0`,\n  },\n  panelError: {\n    margin: `${theme.spacing(2)}px 0`,\n    border: '2px solid #FF0000',\n  },\n  productRowContainer: {\n    paddingLeft: theme.spacing(3),\n    paddingBottom: theme.spacing(2)\n  },\n  productExpansion: {\n    width: 'auto',\n    flex: '0 1 280px',\n  },\n  productExpansionContainer: {\n  },\n  sectionColumn: {\n    margin: theme.spacing(0, 10, 4, 0),\n    fontSize: '0.875rem',\n  },\n  expansionPanelSummaryProductsToPrint: {\n    padding: 0,\n    marginRight: theme.spacing(6),\n  },\n  quoteSummaryTitle: {\n    marginBottom: theme.spacing(2),\n    marginRight: theme.spacing(10),\n    color: theme.palette.text.primary,\n    fontWeight: 'bold'\n  },\n  splitQuote: {\n    margin: `0 0 ${theme.spacing()}px 0`,\n  },\n  viewColumnsBySectionTitle: {\n    textTransform: 'uppercase',\n    fontSize: 14,\n    color: theme.palette.primary[800]\n  },\n  sectionColumnDetail: {\n    boxShadow: 'none',\n  },\n  sectionColumnDetailSummary: {\n    padding: 0,\n    justifyContent: 'flex-start',\n  },\n  sectionColumnDetailSummaryContent: {\n    flexGrow: 0,\n  },\n  expansionPanelDetailsTemplate: {\n    flexDirection: 'column',\n  },\n  viewColumnsBySection: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  sectionColumnsError: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  expandArrow: {\n    transform: 'rotate(180deg)'\n  },\n  compact: {\n    padding: theme.spacing(1),\n    '& $title': {\n      padding: theme.spacing(0.5, 1),\n      fontSize: 14,\n    },\n    '& $customerTitle, & $customerNote, & $sectionsContainerTitle': {\n      padding: theme.spacing(0, 1),\n    },\n    '& $sectionColumn': {\n      margin: theme.spacing(0, 2, 1, 0),\n    },\n    '& $quoteSummaryTitle': {\n      marginRight: theme.spacing(2),\n      marginBottom: theme.spacing(0.5),\n    },\n    '& $productRowContainer': {\n      paddingLeft: theme.spacing(1),\n      paddingBottom: theme.spacing(0.5),\n    },\n    '& $productExpansion': {\n      flex: '0 1 200px',\n    },\n    '& $expansionPanelDetailsProjectInfo': {\n      padding: theme.spacing(0.5, 1),\n    },\n    '& .MuiExpansionPanel-root': {\n      margin: '0 !important',\n    },\n    '& .MuiExpansionPanelSummary-root': {\n      minHeight: 36,\n      padding: '0 8px',\n    },\n    '& .MuiExpansionPanelSummary-content': {\n      margin: '6px 0',\n      flexGrow: 0,\n    },\n    '& .MuiExpansionPanelSummary-expandIcon': {\n      padding: 4,\n    },\n    '& .MuiExpansionPanelDetails-root': {\n      padding: '0 8px 8px',\n    },\n    '& .MuiFormControlLabel-root': {\n      marginRight: 8,\n      marginBottom: -4,\n      marginTop: -4,\n    },\n    '& .MuiFormControlLabel-label': {\n      fontSize: 12,\n    },\n    '& $subtitle': {\n      fontSize: 12,\n    },\n    '& .MuiCheckbox-root, & .MuiRadio-root': {\n      padding: 2,\n    },\n    '& .MuiSwitch-root': {\n      padding: 4,\n    },\n  },\n});\n\n\nconst mapStateToProps = (state, ownProps) => {\n  const {\n    match,\n  } = ownProps;\n\n  const printType = match.params.type;\n\n  const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n  const defaultCustomEmail = makeSelectDefaultCustomEmail()(state);\n  // PT-5477 / PT-5486 (2026-08-26): master ACL gate. When OFF, restore\n  // s149/root behavior for `applyPrintConfigToForm` (unconditional dispatch)\n  // and `defaultInitialValues` (hardcoded fallbacks, no pref-value overlay).\n  const hasFeatEmailImprovements = makeSelectUserHasFeatEmailImprovements()(state);\n  return {\n    form,\n    printType,\n    defaultCustomEmail,\n    hasFeatEmailImprovements,\n    ...createStructuredSelector({\n      formValues: getFormValues(FORM_NAME),\n      visibilityList: makeSelectVisibilityList(),\n      isGettingCustomerVisibilitySetting: makeSelectIsGettingCustomerVisibilitySetting(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getVisibilityList: selectedCustomerId => dispatch(new GetVisibilityListAction(selectedCustomerId)),\n  };\n};\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n  const quote = ownProps.quote || Map({ sections: Map() });\n  const visibilityList = stateProps.visibilityList;\n  const customers = quote.get('customers') || List();\n  const selectedCustomerId = quote.get('selectedCustomer');\n  // selectedCustomer is not reset in quote create/edit page if removed using backspace, hence possibly resulting\n  // in a case where the selected customer is not in the list of customers.\n  const hasMatchingSelectedCustomer = Boolean(selectedCustomerId && customers.some((customer) => customer.get('id') === selectedCustomerId));\n  const sections = quote.get('sections').map(section => {\n    return section.set('products', getVisibilityProducts({ visibilityList, section, selectedCustomerId }));\n  });\n  const quoteWithUpdatedSections = quote.set('sections', sections);\n\n  const quoteSections = customers.size >= 1 ? quote.get('sections') : quoteWithUpdatedSections.get('sections');\n\n  // In compact mode with discount ON, use QDV sections (hides invisible products).\n  // This matches renderProductSections which also uses QDV when discount ON.\n  const compactDiscountOn = ownProps.compact && (selectedCustomerId === ownProps.activeCustomerId);\n  const currentQdvForMerge = stateProps.formValues?.get('quoteDiscountVariations');\n  const qdvEntryForMerge = compactDiscountOn\n    ? (currentQdvForMerge?.get(ownProps.activeCustomerId) || currentQdvForMerge?.get(`${ownProps.activeCustomerId}`))\n    : null;\n  const sectionsForProducts = qdvEntryForMerge?.get('sections') || quoteSections;\n  const mergedSectionValues = ownProps.compact && ownProps.activeCustomerId\n    ? mergedSectionInitalValues(sectionsForProducts, ownProps.activeCustomerId)\n    : mergedSectionInitalValues(quoteSections);\n\n  const sectionTemplatesSectionCalculationNameMap = quoteSections.reduce((acc, section, sectionIndex) => {\n    const sectionCalculations = section.getIn(['sectionTemplate', 'sectionCalculations'], List());\n    return sectionCalculations.filter((calc) => calc.get('printColumn') ?? true).reduce((_acc, calc, index) => {\n      return _acc.set(calc.get('name'));\n    }, acc);\n  }, Map());\n\n  const grandTotals = quote.get('grandTotals');\n\n  const quoteTotalKeys = grandTotals && grandTotals.reduce((ids, total, index) => {\n    const quoteTotal = total.get('name');\n    return ids.push(quoteTotal);\n  }, List())?.filter((total) => sectionTemplatesSectionCalculationNameMap.has(total));\n\n  const discountList = quote.get('discountList');\n\n  const discountListLabels = discountList && discountList.map((discount) => {\n    return discount.get('label');\n  });\n\n  const currentQuoteDiscountVariations = stateProps.formValues?.get('quoteDiscountVariations');\n  const currentQuoteWithoutDiscount = stateProps.formValues?.get('quoteWithoutDiscount');\n  const currentGeneralConfig = stateProps.formValues?.get('generalConfig');\n\n  // When form already has values, use them as initialValues so enableReinitialize\n  // doesn't overwrite user changes (checkbox toggles, radio selections, etc.)\n  // Only fall back to computed defaults on first render (no form values yet).\n  const hasExistingFormValues = stateProps.formValues && stateProps.formValues.size > 0;\n\n  // PT-5486 (2026-08-25): prefer the saved `generalConfig` value\n  // over the hardcoded `[true]` default for each field that gets\n  // persisted to the `quotePrint` user preference. Without this,\n  // `enableReinitialize` would flip a checkbox back to `[true]`\n  // during the transient re-inits between mount and\n  // applyPrintConfigToForm's async dispatch.\n  //\n  // PT-5477 / PT-5486 (2026-08-26): master ACL gate. With the ACL OFF,\n  // ignore the pref-value overlay entirely and use the hardcoded fallback\n  // — matches s149/root behavior exactly (applyPrintConfigToForm still\n  // writes the pref values via dispatch(change) after mount, so the\n  // outcome converges once the pref applies).\n  const prefValue = (field: string, fallback: any) => {\n    if (!stateProps.hasFeatEmailImprovements) { return fallback; }\n    if (Map.isMap(currentGeneralConfig) && currentGeneralConfig.has(field)) {\n      return currentGeneralConfig.get(field);\n    }\n    return fallback;\n  };\n\n  const defaultInitialValues = fromJS({\n    quoteTitle: prefValue('quoteTitle', [true]),\n    officeContactInfo: [true],\n    shippingAddress: prefValue('shippingAddress', [true]),\n    salesRep: prefValue('salesRep', quote.get('collaborators') && quote.get('collaborators').size ? [true] : []),\n    createdDate: prefValue('createdDate', [true]),\n    expiryDate: prefValue('expiryDate', [true]),\n    bidDate: prefValue('bidDate', [true]),\n    architectName: prefValue('architectName', quote.get('architectName') && quote.get('architectName').size ? [true] : []),\n    engineerName: prefValue('engineerName', quote.get('engineerName') && quote.get('engineerName').size ? [true] : []),\n    contractorName: prefValue('contractorName', quote.get('contractorName') && quote.get('contractorName').size ? [true] : []),\n    termsAndConditions: prefValue('termsAndConditions', [true]),\n    comments: prefValue('comments', [true]),\n    sectionNotes: prefValue('sectionNotes', [true]),\n    productNotes: prefValue('productNotes', [true]),\n    sections: mergedSectionValues,\n    discounts: discountListLabels,\n    type: 'quote',\n    logoAlignment: prefValue('logoAlignment', 'left'),\n    productManufacturer: quote.getIn(['sections', 0, 'sectionTemplate', 'settings', 'infoToDisplay', 'productManufacturer']) ? [true] : [],\n    productImage: quote.getIn(['sections', 0, 'sectionTemplate', 'settings', 'infoToDisplay', 'productImage']) ? [true] : [],\n    productHyperlink: quote.getIn(['sections', 0, 'sectionTemplate', 'settings', 'infoToDisplay', 'productHyperlink']) ? [true] : [],\n    itemNumber: quote.getIn(['sections', 0, 'sectionTemplate', 'settings', 'infoToDisplay', 'itemNumber']) ? [true] : [],\n    currency: [true],\n\n    // quote total and grandTotal only need a list of the \"name\" which is used as the Id. they just happen to be the same\n    quoteTotal: quoteTotalKeys,\n    grandTotal: quoteTotalKeys,\n\n    // creator\n    creator: prefValue('creator', stateProps.defaultCustomEmail.getIn(['data', 'useDefaultCustomEmail']) ? 'custom' : 'none'),\n    customCreatorEmail: prefValue('customCreatorEmail', stateProps.defaultCustomEmail.getIn(['data', 'useDefaultCustomEmail']) ? stateProps.defaultCustomEmail.getIn(['data', 'defaultCustomEmail']) : null),\n\n    // customer\n    allowToAddress: prefValue('allowToAddress', hasMatchingSelectedCustomer ? [true] : []),\n    customers: hasMatchingSelectedCustomer ? List([selectedCustomerId]) : List(),\n    quoteDiscountVariations: currentQuoteDiscountVariations?.size ? currentQuoteDiscountVariations : {},\n\n    // discount — in compact mode (email modal), per-customer: only the selectedCustomer gets discount.\n    // In normal mode (preview page), quote-level: discount if any matching customer exists.\n    quoteWithoutDiscount: currentQuoteWithoutDiscount ?? null,\n    discount: ownProps.compact ? (selectedCustomerId === ownProps.activeCustomerId) : hasMatchingSelectedCustomer,\n\n    // general config\n    generalConfig: currentGeneralConfig || null,\n  });\n\n  // When form already has values, merge them over defaults so enableReinitialize\n  // doesn't overwrite user changes (checkboxes, radio buttons, etc.).\n  // Defaults only used on first render.\n  const initialValues = (ownProps.compact && hasExistingFormValues)\n    ? defaultInitialValues.merge(stateProps.formValues)\n    : defaultInitialValues;\n\n\n  const getVisibilityList = (customerId) => customerId && dispatchProps.getVisibilityList(customerId);\n\n  return {\n    ...ownProps,\n    ...stateProps,\n    ...dispatchProps,\n    quote: customers.size > 1 ? quote : quoteWithUpdatedSections,\n    initialValues,\n    getVisibilityList\n  };\n};\n\nexport default compose<React.ComponentClass<IQuotePrintComponentProps>>(\n  withAtsApi(),\n  withStyles(styles, { withTheme: true }),\n  withRouter,\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  reduxForm({\n    // QuoteDownloadPreview swaps this form for the download status screen once a download starts,\n    // and its Retry button resends the form values, so they have to survive the unmount (the\n    // container destroys the form when it unmounts, see Sentry issue 7719478613).\n    destroyOnUnmount: false,\n    enableReinitialize: true,\n  }),\n)(QuotePrint);\n\n// intial values is very bespoke because the qutoe obj is very different from what we need to send to shopdrawing endpoint. so new keys, array of true as values and shit like that\nfunction mergedSectionInitalValues(sections, customerId?) {\n  return sections && sections.filter((section) => (section.get('products').size && section.get('products').some((product) => product.get('id') > 0)) || section.get('note')).reduce((acc, section, sectionIndex) => {\n    // all products in the section\n    const products = (section.get('products') || List()).filter(product => product.get('id') > 0);\n\n    const productsWithProductIds = products.map((product: IMap<QuoteSectionProduct>, productIndex) => {\n      const defaultPrint: any = product.get('defaultPrint');\n\n      if (Map.isMap(defaultPrint)) {\n        const defaultPrintByDefault = defaultPrint.get('default');\n        const defaultPrintByCustomer = defaultPrint.get(`${customerId}`);\n        if ((typeof defaultPrintByCustomer === 'boolean' && defaultPrintByCustomer) || (typeof defaultPrintByCustomer !== 'boolean' && defaultPrintByDefault)) {\n          return product.get('quoteProductId') + `😈${sectionIndex + '-' + productIndex}😈`;\n        }\n      } else if (defaultPrint) {\n        return product.get('quoteProductId') + `😈${sectionIndex + '-' + productIndex}😈`;\n      }\n      return;\n    }).filter(x => x !== undefined);\n\n    // all section columns in the section\n    const fields = section.getIn(['sectionTemplate', 'fieldsData'], List());\n    const fieldsIds = fields.map((field, fieldIndex) => {\n      if (field.get('printColumn') && !field.get('invisible')) {\n        return field.get('id');\n      }\n    }).filter(x => x !== undefined);\n\n    // total in a section\n    const sectionCalculations = section.getIn(['sectionTemplate', 'sectionCalculations'], List());\n    const sectionCalculationIds = sectionCalculations.filter((calc) => calc.get('printColumn') ?? true).map((calc, index) => {\n      return calc.get('name');\n    });\n\n    const sectionId = section.get('sectionId');\n    const sectionTitle = section.get('sectionTitle');\n\n    return acc.push(fromJS({\n      products: productsWithProductIds,\n      fields: fieldsIds,\n      total: sectionCalculationIds,\n      sectionId,\n      sectionTitle,\n      note: section.get('note'),\n      overrideSelected: Boolean(productsWithProductIds?.size || (!products?.size && section.get('note'))),\n      // toPrint: true\n    }));\n  }, List());\n}\n","// use of 😈\n// have to add unique identifier because products in section can be duplicated within the section and also across sections. and they need to be individually checked off. without the identifier, the default behaviour will check off all the same products onCheck, because they have the same value\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  WithTheme,\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  Typography,\n  ExpansionPanelDetails,\n  FormControlLabel,\n  Checkbox,\n  Link,\n  Button,\n  Tooltip,\n  Switch,\n  Dialog,\n  DialogContent,\n  DialogTitle,\n  DialogContentText,\n  DialogActions, TableContainer, Table, TableHead, TableRow, TableCell, TableBody,\n  Divider,\n  IconButton\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectHasFetchedShopDrawingColor,\n  makeSelectLoggedInUserOfficeLocation,\n} from '../../modules/AccountModule/selectors';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport { List, fromJS, Map } from 'immutable';\nimport { Address, Contact, Product } from '../../models';\nimport FieldRadio, { IFieldRadioComponentProps } from '../FieldRadio';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport { GetProductMediaAction } from '../../modules/QuoteModule/actions';\nimport { makeSelectProductMedia } from '../../modules/QuoteModule/selectors';\nimport { AddFirmProductFileAndGetMediaAction, DeleteFirmProductFileAndGetMediaAction, IsActiveProductAction } from '../../modules/PimModule/actions';\nimport { makeSelectIsInactiveProduct } from '../../modules/PimModule/selectors';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport { AMPLITUDE_EVENT, BYTES_PER_MB, GEOLOCATION_ID, MAX_FILE_SIZE_100MB, MAX_FILE_SIZE_200MB } from '../../constants';\nimport ActionCell from './ActionCell';\nimport FileCell from './FileCell';\nimport { makeSelectUserHasOMShopDrawingAcl, makeSelectUserHasFeatCreateShopDrawingAcl } from '../../modules/AtsModule/selectors';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../FieldSwitch';\nimport color from '@material-ui/core/colors/amber';\nimport { GetShopDrawingColorAction } from '../../modules/AccountModule/actions';\nimport PDFEditorModal from '../PDFEditorModal';\nimport { generateFileLink } from '../../utils/helpers';\nimport AddIcon from '@material-ui/icons/Add';\nimport { IPdfProduct } from '../PDFEditorModal/types';\nimport { readUploadResponse } from '../../utils/uploadResponse';\n\nexport const FORM_NAME = 'quotePrintShopDrawing';\n\n// Form field names for each panel section, used by the email modal's section-scoped\n// \"APPLY TO ALL\" buttons. See QuotePrint's QUOTE_PRINT_SECTION_FIELDS for context.\n//\n// MAINTAINERS: when adding/removing a <Field name='...'> inside a section's render\n// method, update the matching array below so section-scoped Apply to All copies the\n// right fields.\nexport const SHOP_DRAWING_SECTION_FIELDS = {\n  projectInfo: ['quoteTitle', 'quoteNumber', 'printDate'],\n  customizePrint: ['pageNumbers', 'titlePage', 'tableOfContents'],\n  customerDelivery: ['customer', 'customerDisplayName'],\n} as const;\n\nexport enum CUSTOMER_DISPLAY_NAME_OPTION {\n  CUSTOMER = 'customer',\n  ORGANIZATION = 'organization',\n}\n\nexport interface IProductMedia {\n  id: number;\n  type: string;\n  fileId: string;\n  size: string;\n  name: string;\n  mediaType: string;\n}\n\ninterface IProductWithMedia extends Product {\n  id: number;\n  type: string;\n  fileId: string;\n  size: string;\n  name: string;\n}\n\ninterface IShopDrawingPrintComponentProps {\n  // quote type all fked up\n  quote: any;\n  getConfigSelectionErrorFromPreview: (reached: boolean) => void;\n  initialValues: any;\n  selectedFileSizeByMediaTypeInMB: {};\n  setSelectFileSizeByMediaTypeInMB: (selectedFileSizeByMediaTypeInMB: {}) => void;\n  onApplyToAll?: (fieldNames?: string[]) => void;\n  compact?: boolean;\n  activeCustomerId?: number;\n  // Email modal: Set of firm product IDs visible to the active customer (derived from\n  // `quoteDiscountVariations` which QuotePrint populates per-customer). When provided,\n  // the product list is filtered by this Set — auto-applies discount/visibility so each\n  // customer's PDF only includes their visible products.\n  visibleFirmProductIds?: Set<number> | null;\n  form?: string;\n}\n\ninterface IShopDrawingPrintProps extends IShopDrawingPrintComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  form: string;\n  productMedia: any;\n  formValues: any;\n  isInactiveProduct: boolean;\n  getProductMedia: (quoteId: number) => void;\n  closeInactiveProductDialog: () => void;\n  hasOMShopDrawingAcl: boolean;\n  linkedProjectLocation: IMap<Address>;\n  loginUserOfficeLocation: IMap<Address>;\n  hasFetchedColor: boolean;\n  hasFeatCreateShopDrawingAcl: boolean;\n}\n\ninterface IShopDrawingPrintTypeState {\n  checkedSections: number[];\n  error: any;\n  showLoading: boolean;\n  loadingPercentage: any;\n  timeoutID: any;\n  uploadedProducts: number[];\n  overSizeFileName: string;\n  loadingProductIndex: string;\n  selectedFileSizeArray: number[];\n  pdfEditorOpen: boolean;\n  pdfProducts: List<IMap<IPdfProduct>>;\n}\n\ntype ShopDrawingPrintType = WithTranslation & IShopDrawingPrintProps & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & InjectedFormProps & WithAmplitudeData;\nclass ShopDrawingPrint extends React.Component<ShopDrawingPrintType, IShopDrawingPrintTypeState> {\n\n  public state = {\n    checkedSections: [],\n    error: null,\n    showLoading: false,\n    loadingPercentage: null,\n    timeoutID: null,\n    uploadedProducts: [],\n    overSizeFileName: '',\n    loadingProductIndex: '',\n    selectedFileSizeArray: [],\n    pdfEditorOpen: false,\n    pdfProducts: List<IMap<IPdfProduct>>(),\n  };\n\n  constructor(props) {\n    super(props);\n  }\n\n  public renderSectionTitle = (titleText: string, fieldNames?: string[] | false) => {\n    const { onApplyToAll, t, classes } = this.props as any;\n    // Pass `false` (or no fields) to render title without the Apply to All button.\n    if (onApplyToAll && fieldNames !== false) {\n      return (\n        <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', width: '100%' }}>\n          <Typography variant='h6' className={classes.heading}>{titleText}</Typography>\n          <Tooltip title={t('quoteDetail.applyToAllTooltip')}>\n            <Button variant='text' className={classes.applyToAllButton} onClick={(e) => { e.stopPropagation(); onApplyToAll(Array.isArray(fieldNames) ? fieldNames : undefined); }}>\n              {t('quoteDetail.applyToAll')}\n            </Button>\n          </Tooltip>\n        </div>\n      );\n    }\n    return <Typography variant='h6' className={classes.heading}>{titleText}</Typography>;\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      getProductMedia,\n      quote,\n      hasFetchedColor,\n    } = this.props;\n\n    if (quote) {\n      const quoteId = quote.get('id');\n      getProductMedia(quoteId);\n      const sections = quote.get('sections');\n      if (sections) {\n        this.setState({ checkedSections: sections.keySeq().toArray() });\n      }\n    }\n\n    if (!hasFetchedColor) {\n      dispatch(new GetShopDrawingColorAction());\n    }\n  }\n\n  public componentDidUpdate(prevProps: any, prevState: IShopDrawingPrintTypeState) {\n    const {\n      quote,\n      getProductMedia,\n      getConfigSelectionErrorFromPreview,\n      dispatch,\n      formValues\n    } = this.props;\n\n    const {\n      selectedFileSizeArray\n    } = this.state;\n\n    if (selectedFileSizeArray !== prevState.selectedFileSizeArray) {\n\n      getConfigSelectionErrorFromPreview(this.checkUploadLimitReached() === 1 ? false : true);\n    }\n\n    if (quote && prevProps.quote !== quote) {\n      const sections = quote.get('sections');\n\n      // on default have everything checked\n      const sectionIndexesArray = sections.keySeq().toArray();\n      this.setState({\n        checkedSections: sectionIndexesArray\n      });\n\n      getProductMedia(this.props.quote.get('id'));\n    }\n\n    if (!this.props.formValues?.get('shopDrawing')?.includes(true) && prevProps.formValues?.get('shopDrawing')?.includes(true)) {\n      dispatch(change(this.props.form, 'useFallback', false));\n    }\n\n    // sets file size stuff in state onchange of fieldcheckboxes\n    if (quote && prevProps.formValues !== this.props.formValues || prevProps.productMedia !== this.props.productMedia) {\n      const sectionsFromForm = this.props.formValues?.get('sections');\n      const sectionsFromQuote = quote && quote.get('sections');\n\n      // get a list of selected product file sizes\n      if (sectionsFromForm && sectionsFromQuote) {\n        const selectedProductIds = sectionsFromForm\n          .map((section) => {\n            const productIds = section.get('products');\n            return productIds;\n          })\n          .flatten()\n          .map((productId) => {\n            return productId;\n          });\n        // merge product obj with file obj\n        const mergedProducts = sectionsFromQuote.map((section) => {\n          const products = section.get('products').filter((product: IMap<Product>) => product.get('id') !== -1);\n          return this.mergeMediaWithProduct(products);\n        });\n        const updatedSelectedFileSizeByMediaTypeInMB = {};\n        const fileSizeArray = mergedProducts\n          .reduce((acc, section, sectionIndex) => {\n            section.map((productFromMerged: IMap<Product>, productIndex) => {\n              const productIdFromMerged = productFromMerged.get('firmProductId') + `😈${sectionIndex + '-' + productIndex}😈`;\n              if (selectedProductIds.includes(productIdFromMerged)) {\n                const showDrawing = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'shop_drawing');\n                const shopDrawingSize = showDrawing?.get('size') || 0;\n                if (shopDrawingSize !== 0 && formValues?.get('shopDrawing')?.includes(true)) {\n                  acc.push(shopDrawingSize);\n                  const shopDrawingSizeInMB = Number((shopDrawingSize / BYTES_PER_MB).toFixed(2));\n                  updatedSelectedFileSizeByMediaTypeInMB['shopDrawing'] = updatedSelectedFileSizeByMediaTypeInMB['shopDrawing'] ? updatedSelectedFileSizeByMediaTypeInMB['shopDrawing'] + shopDrawingSizeInMB : shopDrawingSizeInMB;\n                }\n                if (formValues?.get('useFallback') && !showDrawing?.get('fileId')) {\n                  const cutsheetSize = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'manufacturer_cutsheet', 'size') || 0;\n                  if (cutsheetSize !== 0) {\n                    acc.push(cutsheetSize);\n                    const cutsheetSizeInMB = Number((cutsheetSize / BYTES_PER_MB).toFixed(2));\n                    updatedSelectedFileSizeByMediaTypeInMB['manufacturerSpec'] = updatedSelectedFileSizeByMediaTypeInMB['manufacturerSpec'] ? updatedSelectedFileSizeByMediaTypeInMB['manufacturerSpec'] + cutsheetSizeInMB : cutsheetSizeInMB;\n                  }\n                }\n                const operationGuideSize = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'operation_guide', 'size') || 0;\n                if (operationGuideSize !== 0 && formValues?.get('operationGuide')?.includes(true)) {\n                  acc.push(operationGuideSize);\n                  const operationGuideSizeInMB = Number((operationGuideSize / BYTES_PER_MB).toFixed(2));\n                  updatedSelectedFileSizeByMediaTypeInMB['operationGuide'] = updatedSelectedFileSizeByMediaTypeInMB['operationGuide'] ? updatedSelectedFileSizeByMediaTypeInMB['operationGuide'] + operationGuideSizeInMB : operationGuideSizeInMB;\n                }\n                const installationManualSize = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'installation_manual', 'size') || 0;\n                if (installationManualSize !== 0 && formValues?.get('installationManual')?.includes(true)) {\n                  acc.push(installationManualSize);\n                  const installationManualSizeInMB = Number((installationManualSize / BYTES_PER_MB).toFixed(2));\n                  updatedSelectedFileSizeByMediaTypeInMB['installationManual'] = updatedSelectedFileSizeByMediaTypeInMB['installationManual'] ? updatedSelectedFileSizeByMediaTypeInMB['installationManual'] + installationManualSizeInMB : installationManualSizeInMB;\n                }\n                const warrantySize = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'warranty', 'size') || 0;\n                if (warrantySize !== 0 && formValues?.get('warranty')?.includes(true)) {\n                  acc.push(warrantySize);\n                  const warrantySizeInMB = Number((warrantySize / BYTES_PER_MB).toFixed(2));\n                  updatedSelectedFileSizeByMediaTypeInMB['warranty'] = updatedSelectedFileSizeByMediaTypeInMB['warranty'] ? updatedSelectedFileSizeByMediaTypeInMB['warranty'] + warrantySizeInMB : warrantySizeInMB;\n                }\n                const otherSize = this.getProductMediaByLocaleRegionOrFallback(productFromMerged, 'other', 'size') || 0;\n                if (otherSize !== 0 && formValues?.get('other')?.includes(true)) {\n                  acc.push(otherSize);\n                  const otherSizeInMB = Number((otherSize / BYTES_PER_MB).toFixed(2));\n                  updatedSelectedFileSizeByMediaTypeInMB['other'] = updatedSelectedFileSizeByMediaTypeInMB['other'] ? updatedSelectedFileSizeByMediaTypeInMB['other'] + otherSizeInMB : otherSizeInMB;\n                }\n              }\n            });\n            return acc;\n          }, []);\n        // adds an array of the sizes. used to get the total files checked and how many\n        this.setState({\n          selectedFileSizeArray: fileSizeArray\n        });\n        const fixedFileSizes = fromJS(updatedSelectedFileSizeByMediaTypeInMB).reduce((acc, size, mediaType) => {\n          return acc.set(mediaType, size.toFixed(2));\n        }, Map()).toJS();\n        this.props.setSelectFileSizeByMediaTypeInMB(fixedFileSizes);\n      }\n    }\n  }\n\n  public getProductMediaByLocaleRegionOrFallback = (productMap: IMap<Product>, mediaType: string, mediaDataKey?: string) => {\n    const { linkedProjectLocation, loginUserOfficeLocation } = this.props;\n    // currently only english on AQ\n    // get country from linkedProjectLocation or fall back to login user office location\n    const locationCountryId = linkedProjectLocation?.getIn(['country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n    const isCanada = locationCountryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n    const media = isCanada\n      ? productMap.getIn(['productMedia', 'en-ca', mediaType]) || productMap.getIn(['productMedia', 'en', mediaType])\n      : productMap.getIn(['productMedia', 'en-us', mediaType]) || productMap.getIn(['productMedia', 'en', mediaType]);\n    const mediaData = mediaDataKey && media?.get(mediaDataKey);\n    return mediaDataKey ? mediaData : media;\n  }\n\n  public ProjectInfo = () => {\n    const {\n      classes,\n      t,\n    } = this.props;\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        <ExpansionPanelSummary\n          expandIcon={\n            <KeyboardArrowDownRoundedIcon />\n          }\n          aria-controls='panel1a-content'\n          id='panel1a-header'\n        >\n          {this.renderSectionTitle(t('shopDrawingPrint.projectInfoTitle'), [...SHOP_DRAWING_SECTION_FIELDS.projectInfo])}\n        </ExpansionPanelSummary>\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n          >\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='quoteTitle'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.quoteTitle'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='quoteNumber'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.quoteNumber'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='printDate'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.printDate'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            {/* may be added in later */}\n            {/* <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='officeInfo'\n                component={FieldCheckbox}\n                props={{\n                  label: `Office Contact Info`,\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='address'\n                component={FieldCheckbox}\n                props={{\n                  label: `Address`,\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='salesRep'\n                component={FieldCheckbox}\n                props={{\n                  label: `Sales Rep`,\n                  color: 'primary',\n                }}\n              />\n            </Grid> */}\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public CustomizePrint = () => {\n    const {\n      classes,\n      t,\n    } = this.props;\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        <ExpansionPanelSummary\n          expandIcon={\n            <KeyboardArrowDownRoundedIcon />\n          }\n          aria-controls='panel1a-content'\n          id='panel1a-header'\n        >\n          {this.renderSectionTitle(t('shopDrawingPrint.customizePrintTitle'), [...SHOP_DRAWING_SECTION_FIELDS.customizePrint])}\n        </ExpansionPanelSummary>\n        <ExpansionPanelDetails\n          classes={{\n            root: classes.expansionPanelDetailsProjectInfo\n          }}\n        >\n          <Grid\n            container={true}\n          >\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='pageNumbers'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.displayPageNumbers'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='titlePage'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.displayTitlePage'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='tableOfContents'\n                component={FieldCheckbox}\n                props={{\n                  label: t('shopDrawingPrint.displayTableOfContents'),\n                  color: 'primary',\n                }}\n              />\n            </Grid>\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public CustomerDelivery = () => {\n    const {\n      classes,\n      quote,\n      t,\n    } = this.props;\n\n    const allCustomers: List<IMap<Contact>> = quote && quote.get('customers');\n    const { compact, activeCustomerId } = this.props;\n    // In compact mode, only show the active customer + \"No customer\"\n    const customers = (compact && activeCustomerId && allCustomers)\n      ? allCustomers.filter((c: IMap<Contact>) => c.get('id') === activeCustomerId) as List<IMap<Contact>>\n      : allCustomers;\n\n    const customerRadios = customers && customers.map((customer: IMap<Contact>, index: number) => {\n      const firstName = customer.get('firstName');\n      const lastName = customer.get('lastName');\n      const organization = customer.get('organization');\n      const name = [firstName, lastName].filter(x => x).join(' ').trim();\n      const customerName = name ? [name, organization].filter(x => x).join(' - ') : organization;\n      const customerId = customer.get('id');\n\n      return (\n        <Grid\n          item={true}\n          key={index + 'customer'}\n        >\n          <Field<BaseFieldProps<IFieldRadioComponentProps>>\n            name='customer'\n            component={FieldRadio}\n            props={{\n              label: customerName,\n              color: 'primary',\n              checkedValue: customerId,\n              helperText: false,\n            }}\n          />\n        </Grid>\n      );\n    }).push(\n      <Grid\n        item={true}\n        key={-1}\n      >\n        <Field<BaseFieldProps<IFieldRadioComponentProps>>\n          name='customer'\n          component={FieldRadio}\n          props={{\n            label: t('shopDrawingPrint.noCustomer'),\n            color: 'primary',\n            checkedValue: '',\n            helperText: false,\n          }}\n        />\n      </Grid>\n    ).valueSeq().toArray();\n\n    // PT-5477 (2026-08-31): compact mode (Export page → Shop Drawing / O&M)\n    // uses the simplified \"Choose name to display\" layout — the customer\n    // itself is already implied by the active customer chip in the left\n    // column, so the individual-customer radio list is redundant. Compact\n    // labels also drop the \"Use \" prefix per the Figma refresh.\n    const headerKey = compact ? 'shopDrawingPrint.chooseNameToDisplay' : 'shopDrawingPrint.chooseCustomer';\n    const firstLastNameKey = compact\n      ? 'shopDrawingPrint.customerNameOptionLabel'\n      : 'shopDrawingPrint.useCustomerNameOptionLabel';\n    const orgNameKey = compact\n      ? 'shopDrawingPrint.customerOrgNameOptionLabel'\n      : 'shopDrawingPrint.useCustomerOrgNameOptionLabel';\n\n    return (\n      <ExpansionPanel\n        className={classes.panel}\n        defaultExpanded={true}\n      >\n        <ExpansionPanelSummary\n          expandIcon={\n            <KeyboardArrowDownRoundedIcon />\n          }\n          aria-controls='panel1a-content'\n          id='panel1a-header'\n        >\n          {this.renderSectionTitle(t(headerKey), [...SHOP_DRAWING_SECTION_FIELDS.customerDelivery])}\n        </ExpansionPanelSummary>\n        <ExpansionPanelDetails>\n\n          <Grid container={true}>\n            <Grid container={true}>\n              <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                name='customerDisplayName'\n                component={FieldRadio}\n                props={{\n                  label: t(firstLastNameKey),\n                  color: 'primary',\n                  checkedValue: CUSTOMER_DISPLAY_NAME_OPTION.CUSTOMER,\n                  helperText: false,\n                }}\n              />\n              <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                name='customerDisplayName'\n                component={FieldRadio}\n                props={{\n                  label: t(orgNameKey),\n                  color: 'primary',\n                  checkedValue: CUSTOMER_DISPLAY_NAME_OPTION.ORGANIZATION,\n                  helperText: false,\n                }}\n              />\n            </Grid>\n            {!compact && (\n              <React.Fragment>\n                <Divider style={{ width: '100%', margin: '16px 0px' }} />\n                {customerRadios}\n              </React.Fragment>\n            )}\n          </Grid>\n        </ExpansionPanelDetails>\n      </ExpansionPanel>\n    );\n  }\n\n  public handleSectionChange = (sectionIndex, products, e) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    const {\n      checkedSections\n    } = this.state;\n\n    // need to add the unique idenfifier\n    const productIds = products.map((product: IMap<Product>, index) => {\n      return product.get('firmProductId') + `😈${sectionIndex + '-' + index}😈`;\n    });\n\n    // when section checkbox is unchecked, set products within that section to [] or vice versa\n    if (checkedSections.includes(sectionIndex)) {\n      const filteredCheckedSections = checkedSections.filter((checkedSection: number) => {\n        return checkedSection !== sectionIndex;\n      });\n\n      this.setState({\n        checkedSections: filteredCheckedSections,\n      });\n      dispatch(change(form, `sections[${sectionIndex}].products`, []));\n    } else {\n      checkedSections.push(sectionIndex);\n      this.setState({\n        checkedSections,\n      });\n      dispatch(change(form, `sections[${sectionIndex}].products`, productIds));\n    }\n  }\n\n  public allProductsInSectionSelected = (sectionIndex, products) => {\n    const {\n      formValues,\n    } = this.props;\n\n    const productIds = products.map((product: IMap<Product>) => {\n      return product.get('id');\n    });\n\n    const checkedProductIds = formValues && formValues.getIn(['sections', sectionIndex, 'products']);\n\n    // checks if everything is selected\n    if (checkedProductIds) {\n      if (checkedProductIds.size === productIds.size) {\n        return true;\n      }\n      return false;\n    }\n  }\n\n\n  public handleUpload = (e: any, firmProductId: number, loadingProductIndex: string, mediaType: string) => {\n    const {\n      atsApi,\n      dispatch,\n      quote,\n      linkedProjectLocation,\n      loginUserOfficeLocation,\n      t,\n      amplitudeData\n    } = this.props;\n\n    const {\n      uploadedProducts\n    } = this.state;\n\n    const fileItem = e.target.files[0];\n    if (!fileItem) {\n      return;\n    }\n\n    const blob = fileItem.slice(0, 5);\n\n    const fileReader = new FileReader();\n    fileReader.onloadend = (rawData) => {\n      if (rawData.target.result instanceof ArrayBuffer) {\n        const arr = (new Uint8Array(rawData.target.result)).subarray(0, 5);\n        const header = arr.reduce((acc, value) => acc + value.toString(16), '');\n\n        // check if it is pdf file signature\n        if (header === '255044462d') {\n          const size = fileItem.size;\n          const fileName = fileItem.name;\n          const quoteId = quote.get('id');\n\n          if (size > MAX_FILE_SIZE_200MB) {\n            this.setState({\n              overSizeFileName: fileName,\n              loadingProductIndex\n            });\n            return;\n          } else {\n            this.setState({\n              overSizeFileName: '',\n              loadingProductIndex\n            });\n          }\n\n          const fileUploadUrl = atsApi.callApi({\n            service: 'file',\n            endpoint: 'uploadFile',\n            urlOnly: true,\n            withToken: true,\n            withAppId: true,\n          }) as string;\n          const req = new XMLHttpRequest();\n          const data = new FormData();\n\n          data.append('file', fileItem);\n\n          req.open('POST', fileUploadUrl);\n\n          req.upload.addEventListener('progress', (event) => {\n            const percent = Math.round((event.loaded / event.total) * 100);\n\n            uploadedProducts.push(firmProductId);\n            this.setState({\n              loadingPercentage: percent,\n              uploadedProducts\n            });\n          });\n\n          req.onloadstart = () => {\n            this.setState({ showLoading: true });\n          };\n\n          req.addEventListener('loadend', () => {\n            clearTimeout(this.state.timeoutID);\n            const { payload, error } = readUploadResponse(req);\n            if (error) {\n              console.error('error uploading file', error); //tslint:disable-line\n              this.setState({ error: `Error: ${error.error ? error.error : 'unknown error'}`, loadingPercentage: 0, loadingProductIndex: '' }); /* This is here as a way to at least show something to the user when there is a network or server side error */\n            } else {\n              this.setState({\n                loadingPercentage: 0,\n                loadingProductIndex: '',\n              });\n              const uploadedFile: XMLHttpRequest['response'] = payload.file.files[0];\n              const fileId = uploadedFile.id;\n              const uploadRegionCountryId = linkedProjectLocation?.getIn(['country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n              // if canada then en-ca, if us or other country then en-us\n              const uploadLangaugeCode = uploadRegionCountryId === GEOLOCATION_ID.canada ? 'en-ca' : 'en-us';\n              dispatch(new AddFirmProductFileAndGetMediaAction({\n                firmProductId,\n                fileId,\n                quoteId,\n                fileType: mediaType,\n                languageCode: uploadLangaugeCode\n              }));\n            }\n          });\n\n          req.send(data);\n        } else {\n          dispatch(new SetSnackbarOpenAction({\n            message: t('shopDrawingPrint.notPDF'),\n            severity: 'error',\n          }));\n        }\n      }\n    };\n\n    fileReader.readAsArrayBuffer(blob);\n    e.target.value = null;\n  }\n\n  public mergeMediaWithProduct = (products) => {\n    const {\n      productMedia,\n    } = this.props;\n    return products.map((product: IMap<Product>) => {\n      const firmProductId = product.get('firmProductId');\n      const productMediaFilesOfProduct = productMedia.get(String(firmProductId));\n      return product.set('productMedia', productMediaFilesOfProduct);\n    }).filter(x => x != null);\n  }\n\n  public checkUploadLimitReached = () => {\n    const {\n      selectedFileSizeArray\n    } = this.state;\n\n    const totalAddedFileSizeInMB = selectedFileSizeArray.reduce((acc, size) => {\n      return acc + Number((size / BYTES_PER_MB).toFixed(2)); // get each file size in MB first to match with size displayed on product table\n    }, 0);\n\n    const totalFileSizeRemaining = Number(500 - totalAddedFileSizeInMB).toFixed(2);\n    // // -1 if neg\n    return Math.sign(Number(totalFileSizeRemaining));\n  }\n\n  public ProductSpecs = () => {\n    const {\n      classes,\n      quote,\n      atsApi,\n      t,\n      formValues,\n      hasOMShopDrawingAcl,\n      hasFeatCreateShopDrawingAcl,\n    } = this.props;\n\n    const {\n      loadingPercentage,\n      overSizeFileName,\n      loadingProductIndex,\n      selectedFileSizeArray,\n      checkedSections,\n    } = this.state;\n\n    const withoutSpec = Boolean(formValues?.get('withoutSpec'));\n\n    const selectedFileSizeArrayCount = selectedFileSizeArray.length;\n    const totalAddedFileSizeInMB = selectedFileSizeArray.reduce((acc, size) => {\n      return acc + Number((size / BYTES_PER_MB).toFixed(2)); // get each file size in MB first to match with size displayed on product table\n    }, 0);\n\n    // 500 MB limit\n    const totalFileSizeRemaining = Number(500 - totalAddedFileSizeInMB).toFixed(2);\n    const sections = quote && quote.get('sections');\n\n    const visibleFirmProductIds: Set<number> | null = (this.props as any).visibleFirmProductIds;\n    const sectionPanels = sections && sections.map((section, sectionIndex) => {\n      const products = section.get('products');\n      const mergedProducts = this.mergeMediaWithProduct(products).filter((product) => {\n        if (product.get('id') === -1) { return false; }\n        if (visibleFirmProductIds) {\n          // Email modal: per-customer filter (auto-applies discount/visibility for shop drawing)\n          return visibleFirmProductIds.has(product.get('firmProductId'));\n        }\n        return !Boolean(product.get('notVisibleToSelectedCustomer'));\n      });\n\n      if (!Boolean(mergedProducts.size)) {\n        return;\n      }\n\n      // keep this to sync with quote print\n      // const toPrint = formValues && formValues.getIn(['sections', sectionIndex, 'toPrint']);\n\n      const sectionTitle = section.get('sectionTitle');\n      // filter against if it has spec or not (fileId)\n      const filteredProduct = withoutSpec ? mergedProducts.filter((product: IMap<IProductWithMedia>, index: number) => {\n        const shopDrawing = product && this.getProductMediaByLocaleRegionOrFallback(product, 'shop_drawing');\n        return !shopDrawing;\n      }) : mergedProducts;\n\n      const columns: any = [\n        {\n          key: 'product',\n          width: 250,\n          headerName: t('shopDrawingPrint.product'),\n          renderCell: ({ product, productIndex, sectionIndex: _sectionIndex, columnIndex }) => {\n            return <TableCell scope='row' key={columnIndex}>\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name={`sections[${_sectionIndex}].products`}\n                component={FieldCheckbox}\n                props={{\n                  label: `${product.get('productNumber')}`,\n                  color: 'primary',\n                  checkedValue: product.get('firmProductId') + `😈${_sectionIndex + '-' + productIndex}😈`,\n                  inputProps: {\n                    onChange: (checkedValues) => {\n                      // removes sectionindex from checked sections if one of the products is unchecked. so if \"checkedValues\" size is different from the total size\n                      if (filteredProduct.length !== checkedValues.size) {\n                        const filteredCheckedSections = checkedSections.filter((checkedSection, index) => {\n                          return checkedSection !== _sectionIndex;\n                        });\n\n                        this.setState({\n                          checkedSections: filteredCheckedSections\n                        });\n                      }\n                    }\n                  }\n                }}\n              />\n            </TableCell>;\n          }\n        },\n      ];\n      const renderFileCell = ({ product, productIndex, sectionIndex: _sectionIndex, key, columnIndex }) => {\n        const media = this.getProductMediaByLocaleRegionOrFallback(product, key);\n        const fileName = media?.get('filename');\n        const size = media?.get('size');\n        const fileId = media?.get('fileId');\n        const fileLanguageCode = media?.get('languageCode');\n        const fileLink = fileId && atsApi.callApi(fileId, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: { download: false } }) as string;\n        const productUploadingKey = productIndex + 'section' + _sectionIndex + key;\n        const isLoading = loadingProductIndex === productUploadingKey;\n        const isATSFile = media?.get('isOverride') === false;\n        return <FileCell\n          key={columnIndex}\n          isLoading={isLoading}\n          fileLink={fileLink}\n          fileName={fileName}\n          fileLanguageCode={fileLanguageCode}\n          size={size}\n          overSizeFileName={overSizeFileName}\n          loadingPercentage={loadingPercentage}\n          isATSFile={isATSFile}\n        />;\n      };\n      const renderActionCell = ({ product, productIndex, sectionIndex: _sectionIndex, key, columnIndex }) => {\n        const media = this.getProductMediaByLocaleRegionOrFallback(product, key);\n        const languageCode = media?.get('languageCode');\n        const fileId = media?.get('fileId');\n        const productUploadingKey = productIndex + 'section' + _sectionIndex + key;\n        const fileType = media?.get('type');\n        const isFirmProduct = fileType === 'firmProduct';\n        const firmProductId = product.get('firmProductId');\n        const disableDelete: boolean = !isFirmProduct || !fileId;\n        const inputId = `file${productUploadingKey}`;\n        const cutsheet = this.getProductMediaByLocaleRegionOrFallback(product, 'manufacturer_cutsheet');\n        const cutsheetFileId = cutsheet?.get('fileId');\n        const canCreateShopDrawing = hasFeatCreateShopDrawingAcl && key === 'shop_drawing' && cutsheetFileId;\n        const showCreateShopDrawingReplacementButton = canCreateShopDrawing && fileId;\n        const showPdfEditor = canCreateShopDrawing && !fileId;\n\n        return (\n          <TableCell scope='row' key={columnIndex} style={{ whiteSpace: 'nowrap' }}>\n            <input className={classes.hiddenInput} type='file' accept='.pdf' name='file' id={inputId} tabIndex={-1} onChange={(e) => this.handleUpload(e, firmProductId, productUploadingKey, key)} />\n            {\n              fileId\n                ? <ActionCell.edit\n                    inputId={inputId}\n                    showReplacementMenu={Boolean(showCreateShopDrawingReplacementButton)}\n                    handleCreateReplacementShopDrawing={() => this.openPdfEditorForProduct(product, cutsheet, languageCode)}\n                  />\n                : <ActionCell.upload inputId={inputId} />\n            }\n            {\n              showPdfEditor ? (\n                <Tooltip title={t('shopDrawingPrint.createShopDrawingButtonTooltip')} aria-label={t('shopDrawingPrint.createShopDrawingButtonTooltip')} placement='top'>\n                  <IconButton\n                    size='small'\n                    onClick={() => this.openPdfEditorForProduct(product, cutsheet)}\n                    style={{ marginLeft: 8 }}\n                  >\n                    <AddIcon />\n                  </IconButton>\n                </Tooltip>\n              ) : null\n            }\n            {\n              fileId ? (\n                <ActionCell.delete\n                  disabled={disableDelete}\n                  onDelete={() => this.handleDeleteFile(firmProductId, key, languageCode)}\n                />\n              ) : null\n            }\n          </TableCell>\n        );\n      };\n      if (formValues?.get('shopDrawing')?.includes(true)) {\n        columns.push({\n          key: 'shop_drawing',\n          headerName: t('shopDrawingPrint.shopDrawing'),\n          renderCell: renderFileCell,\n        });\n        columns.push({\n          key: 'shop_drawing',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell,\n        });\n      }\n\n      if (formValues?.get('useFallback')) {\n        columns.push({\n          key: 'manufacturer_cutsheet',\n          headerName: t('shopDrawingPrint.manufacturerSpec'),\n          renderCell: renderFileCell,\n        });\n        columns.push({\n          key: 'manufacturer_cutsheet',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell,\n        });\n      }\n\n      if (formValues?.get('operationGuide')?.includes(true)) {\n        columns.push({\n          key: 'operation_guide',\n          headerName: t('shopDrawingPrint.operationGuide'),\n          renderCell: renderFileCell,\n        });\n        columns.push({\n          key: 'operation_guide',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell\n        });\n      }\n\n      if (formValues?.get('installationManual')?.includes(true)) {\n        columns.push({\n          key: 'installation_manual',\n          headerName: t('shopDrawingPrint.installationManual'),\n          renderCell: renderFileCell\n        });\n        columns.push({\n          key: 'installation_manual',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell\n        });\n      }\n\n      if (formValues?.get('warranty')?.includes(true)) {\n        columns.push({\n          key: 'warranty',\n          headerName: t('shopDrawingPrint.warranty'),\n          renderCell: renderFileCell\n        });\n        columns.push({\n          key: 'warranty',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell\n        });\n      }\n      if (formValues?.get('other')?.includes(true)) {\n        columns.push({\n          key: 'other',\n          headerName: t('shopDrawingPrint.other'),\n          renderCell: renderFileCell\n        });\n        columns.push({\n          key: 'other',\n          headerName: '',\n          width: 50,\n          renderCell: renderActionCell\n        });\n      }\n\n      return (\n        <ExpansionPanel\n          defaultExpanded={true}\n          key={sectionIndex + 'section'}\n          classes={{ root: classes.productSectionExpansionPanelRoot }}\n          style={{ margin: 0 }}\n        >\n          <ExpansionPanelSummary\n            IconButtonProps={{\n              edge: 'start',\n              disabled: filteredProduct.size === 0,\n            }}\n            style={{\n              flexDirection: 'row-reverse',\n            }}\n            expandIcon={\n              <KeyboardArrowDownRoundedIcon />\n            }\n            aria-label='Expand'\n            aria-controls={sectionIndex}\n            id={sectionIndex}\n            // disable expand event when no products in section\n            onClickCapture={event => Boolean(!filteredProduct.size) ? event.stopPropagation() : null}\n          >\n            <FormControlLabel\n              aria-label='Acknowledge'\n              onClick={event => event.stopPropagation()}\n              onFocus={event => event.stopPropagation()}\n              control={\n                <Checkbox\n                  // checked={Boolean(products.size ? this.allProductsInSectionSelected(sectionIndex, mergedProducts) : toPrint)}\n                  checked={this.allProductsInSectionSelected(sectionIndex, mergedProducts) ?? false}\n                  disabled={products.size === 0}\n                  onChange={(e) => this.handleSectionChange(sectionIndex, mergedProducts, e)}\n                  color='primary'\n                />\n              }\n              label={sectionTitle}\n            />\n          </ExpansionPanelSummary>\n          {\n            filteredProduct?.size > 0 && (\n              <ExpansionPanelDetails>\n                <TableContainer>\n                  <Table style={{ tableLayout: 'fixed' }}>\n                    <TableHead>\n                      <TableRow>\n                        {columns.map(({ headerName, key, width }, index) => {\n                          return (\n                            <TableCell key={index}>\n                              {headerName}\n                            </TableCell>\n                          );\n                        })}\n                      </TableRow>\n                    </TableHead>\n                    <TableBody>\n                      {\n                        filteredProduct.map((product, productIndex) => {\n                          return (\n                            <TableRow key={`${productIndex} ${sectionIndex}`}>\n                              {columns.map(({ key, renderCell }, columnIndex) => {\n                                return renderCell({ product, productIndex, sectionIndex, key, columnIndex });\n                              })}\n                            </TableRow>\n                          );\n                        })\n                      }\n                    </TableBody>\n                  </Table>\n                </TableContainer>\n              </ExpansionPanelDetails>\n            )\n          }\n        </ExpansionPanel>\n      );\n    });\n\n    const constructPdfProducts = () => {\n      if (!sections) {\n        return List();\n      }\n      const productsAlreadyAdded = new Set();\n      let newPdfProducts = List();\n\n      sections.forEach((section) => {\n        const products = section.get('products');\n        if (!products) {\n          return;\n        }\n\n        const uniqueVisibleProducts = products.filter((product) => {\n          if (product.get('id') === -1 || productsAlreadyAdded.has(product.get('firmProductId'))) {\n            return false;\n          }\n          if (visibleFirmProductIds) {\n            if (visibleFirmProductIds.has(product.get('firmProductId'))) {\n              productsAlreadyAdded.add(product.get('firmProductId'));\n              return true;\n            }\n            return false;\n          }\n          if (!Boolean(product.get('notVisibleToSelectedCustomer'))) {\n            productsAlreadyAdded.add(product.get('firmProductId'));\n            return true;\n          }\n          return false;\n        });\n\n        if (uniqueVisibleProducts.size === 0) {\n          return;\n        }\n\n        const mergedProducts = this.mergeMediaWithProduct(uniqueVisibleProducts);\n\n        // filter products that don't have shop drawing but has manufacturer cutsheet, because those are the ones we want to generate shop drawings for,\n        // then convert each item to have the IPDFProduct type.\n        const filteredSectionProducts = mergedProducts.reduce((acc, product: IMap<IProductWithMedia>) => {\n          const manufacturerCutsheet = this.getProductMediaByLocaleRegionOrFallback(product, 'manufacturer_cutsheet');\n          const shopDrawing = product && this.getProductMediaByLocaleRegionOrFallback(product, 'shop_drawing');\n          if (manufacturerCutsheet?.get('fileId') && !shopDrawing?.get('fileId')) {\n            acc = acc.push(fromJS(this.buildPdfProduct(product, manufacturerCutsheet)));\n          }\n          return acc;\n        }, List());\n\n        if (filteredSectionProducts.size === 0) {\n          return;\n        }\n\n        newPdfProducts = newPdfProducts.concat(filteredSectionProducts);\n      });\n\n      return newPdfProducts;\n    };\n\n    return (\n      <Grid>\n        <ExpansionPanel\n          className={classes.panel}\n          defaultExpanded={true}\n        >\n          <ExpansionPanelSummary\n            expandIcon={\n              <KeyboardArrowDownRoundedIcon />\n            }\n            aria-controls='panel1a-content'\n            id='panel1a-header'\n          >\n            {this.renderSectionTitle(t('shopDrawingPrint.chooseProducts'), false as const)}\n          </ExpansionPanelSummary>\n          <ExpansionPanelDetails\n            classes={{\n              root: classes.expansionPanelDetailsChooseProducts\n            }}\n          >\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                className={classes.containerPadding}\n              >\n                {hasOMShopDrawingAcl ? <Grid item={true}>\n                  <Typography variant='caption'>{t('shopDrawingPrint.chooseFileType')}</Typography>\n                </Grid> : <Grid item={true} />\n                }\n                <Grid\n                  item={true}\n                >\n                  {\n                    this.checkUploadLimitReached() === 1\n                      ? <Typography\n                        variant='caption'\n                      >\n                        {`${selectedFileSizeArrayCount}  ${selectedFileSizeArrayCount === 1 ? 'file' : 'files'} ${t('shopDrawingPrint.added')} ${totalFileSizeRemaining} ${t('shopDrawingPrint.MBRemaining')}`}\n                      </Typography>\n                      : <Typography\n                        variant='caption'\n                        color='error'\n                      >\n                        {`${selectedFileSizeArrayCount} ${t('shopDrawingPrint.exceeded500MB')}`}\n                      </Typography>\n                  }\n                </Grid>\n              </Grid>\n              {\n                hasOMShopDrawingAcl ? <Grid container={true} className={classes.containerPadding}>\n                  <Grid item={true}>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='shopDrawing'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('shopDrawingPrint.shopDrawing'),\n                        color: 'primary',\n                      }}\n                    />\n                  </Grid>\n                  <Grid item={true}>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='operationGuide'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('shopDrawingPrint.operationGuide'),\n                        color: 'primary',\n                      }}\n                    />\n                  </Grid>\n                  <Grid item={true}>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='installationManual'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('shopDrawingPrint.installationManual'),\n                        color: 'primary',\n                      }}\n                    />\n                  </Grid>\n                  <Grid item={true}>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='warranty'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('shopDrawingPrint.warranty'),\n                        color: 'primary',\n                      }}\n                    />\n                  </Grid>\n                  <Grid item={true}>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='other'\n                      component={FieldCheckbox}\n                      props={{\n                        label: t('shopDrawingPrint.other'),\n                        color: 'primary',\n                      }}\n                    />\n                  </Grid>\n                </Grid> : null\n              }\n              <Grid container={true} className={classes.containerPadding}>\n                <Grid item={true} xs={12}>\n                  <FormControlLabel\n                    className={classes.noMargin}\n                    control={\n                      <Switch\n                        checked={Boolean(this.props.formValues?.get('withoutSpec'))}\n                        onChange={(e) => this.handleSwitch(e)}\n                        color='primary'\n                      />\n                    }\n                    label={t('shopDrawingPrint.withoutShopDrawing')}\n                    labelPlacement='start'\n                  />\n                  {\n                    Boolean(hasFeatCreateShopDrawingAcl && this.props.formValues?.get('withoutSpec') && sectionPanels?.size) && (\n                      <Button\n                        color='primary'\n                        variant='outlined'\n                        style={{ marginLeft: 8 }}\n                        onClick={() => this.setState({\n                          pdfEditorOpen: true,\n                          pdfProducts: constructPdfProducts(),\n                        })}\n                      >\n                        {t('shopDrawingPrint.createShopDrawingsButton')}\n                      </Button>\n                    )\n                  }\n                </Grid>\n                <Grid item={true} xs={12}>\n                  <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                    component={FieldSwitch}\n                    name='useFallback'\n                    props={{\n                      label: t('shopDrawingPrint.useSpecSheetFallbackWhenNoShopDrawing'),\n                      inputProps: {\n                        color: 'primary',\n                        disabled: !formValues?.get('shopDrawing')?.includes(true),\n                      },\n                      formControlLabelProps: {\n                        labelPlacement: 'start',\n                        className: classes.noMargin\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n              {/* expansion panelception */}\n              {sectionPanels}\n            </Grid>\n          </ExpansionPanelDetails>\n        </ExpansionPanel>\n      </Grid>\n    );\n  }\n\n  public handleSwitch = (e) => {\n    const { dispatch, form } = this.props;\n    const checked = e.target.checked;\n    dispatch(change(form, 'withoutSpec', checked));\n  }\n\n  public handleDeleteFile = (productId: number, mediaType: string, languageCode: string) => {\n    const {\n      dispatch,\n      quote,\n    } = this.props;\n\n    const quoteId = quote.get('id');\n\n    dispatch(new DeleteFirmProductFileAndGetMediaAction({\n      firmProductId: productId,\n      quoteId,\n      fileType: mediaType,\n      languageCode: languageCode || 'en'\n    }));\n  }\n\n  // Builds the IPdfProduct shape the PDF editor expects from a product and its\n  // manufacturer cutsheet media. `languageCode` overrides the cutsheet's own language\n  // code (used when regenerating an existing shop drawing so it keeps that drawing's\n  // locale). Single source of truth for the shape — used by openPdfEditorForProduct\n  // and constructPdfProducts.\n  public buildPdfProduct = (product: IMap<any>, cutsheet: IMap<any>, languageCode?: string) => ({\n    productId: product.get('firmProductId'),\n    productNumber: product.get('productNumber'),\n    imageSrc: product.getIn(['file', 'images', 'main', 'fileId']) || '',\n    brand: product.get('brand'),\n    category: product.get('categoryName'),\n    fileSrc: generateFileLink(cutsheet.get('fileId')),\n    fileName: cutsheet.get('filename') || '',\n    languageCode: languageCode || cutsheet.get('languageCode') || '',\n  })\n\n  // Opens the PDF editor for a single product, generating a shop drawing from its\n  // manufacturer cutsheet. Shared by the ActionCell \"create replacement\" menu item\n  // and the standalone create-shop-drawing (AddIcon) button.\n  public openPdfEditorForProduct = (product: IMap<Product>, cutsheet: IMap<any>, languageCode?: string) => {\n    this.setState({\n      pdfEditorOpen: true,\n      pdfProducts: fromJS([this.buildPdfProduct(product, cutsheet, languageCode)]),\n    });\n  }\n\n  public inactiveDialog = () => {\n    const {\n      isInactiveProduct,\n      closeInactiveProductDialog,\n      t,\n    } = this.props;\n\n    return (\n      <Dialog\n        open={isInactiveProduct}\n        onClose={closeInactiveProductDialog}\n      >\n        <DialogTitle>\n          {t('quotePrint.productUnavailableDialog')}\n        </DialogTitle>\n        <DialogContent>\n          <DialogContentText>\n            {t('quotePrint.productUnavailableDialogDescription')}\n          </DialogContentText>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            color='primary'\n            onClick={closeInactiveProductDialog}\n          >\n            {t('formButtons.ok')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    );\n  }\n\n  public render() {\n    const {\n      getProductMedia,\n      classes,\n      quote,\n    } = this.props;\n\n    return (\n      // PT-5477 / PT-5486 (2026-08-26): compact-mode consumers (email\n      // modal, export page) need the padding stripped so the panel fits\n      // within the constrained modal width. Non-compact users (legacy\n      // /preview/:id/shopDrawing page) keep the s149/root spacing(3)\n      // default from `classes.root`.\n      <Grid\n        className={classes.root}\n        style={(this.props as any).compact ? { padding: 0 } : undefined}\n      >\n        {/* temp FE solution for BE issue */}\n        {this.inactiveDialog()}\n        <form>\n\n          {/* choose customized info to display */}\n          {this.CustomizePrint()}\n\n          {/* choose project info to display */}\n          {this.ProjectInfo()}\n\n          {/* choose customer to deliver to — hidden on the Generic tab\n              (compact + activeCustomerId null), since Generic has no\n              customer and the box would always resolve to \"No customer\". */}\n          {!((this.props as any).compact && !(this.props as any).activeCustomerId) && this.CustomerDelivery()}\n\n          {/* choose products and modify product specification */}\n          {this.ProductSpecs()}\n        </form>\n        <PDFEditorModal\n          open={this.state.pdfEditorOpen}\n          onClose={() => this.setState({ pdfEditorOpen: false })}\n          pdfProducts={this.state.pdfProducts}\n          onUploaded={() => {\n            getProductMedia(quote.get('id'));\n          }}\n        />\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  applyToAllButton: {\n    color: '#E67E22',\n    fontWeight: 500,\n    fontSize: 12,\n    whiteSpace: 'nowrap' as const,\n    textTransform: 'uppercase' as const,\n    '&:hover': {\n      backgroundColor: '#FEF2E1',\n    },\n  },\n  root: {\n    width: '100%',\n    // PT-5477 / PT-5486 (2026-08-26): restored the s149/root\n    // `theme.spacing(3)` default. The earlier tightening to spacing(1)\n    // was made for the compact Email & Export page layout, but it\n    // shrunk the padding on the non-compact `/preview/:id/shopDrawing`\n    // preview page too — a visible regression for ACL-off users.\n    // Compact-mode consumers (email modal / export page) still need\n    // `padding: 0` — they'll re-apply that override inline.\n    padding: theme.spacing(3),\n  },\n  head: {\n    paddingLeft: theme.spacing(3),\n    color: theme.palette.common.white,\n    background: `linear-gradient(90deg, ${theme.palette.secondary[900]}, ${theme.palette.secondary[600]})`,\n  },\n  linearProgress: {\n    flexGrow: 1\n  },\n  expansionPanelDetailsProjectInfo: {\n    padding: `${theme.spacing()}px ${theme.spacing(3)}px ${theme.spacing()}px`\n  },\n  productSectionExpansionPanelRoot: {\n    boxShadow: 'none',\n  },\n  expansionPanelDetailsChooseProducts: {\n    padding: 0,\n  },\n  hiddenInput: {\n    width: 0.1,\n    height: 0.1,\n    opacity: 0,\n    overflow: 'hidden',\n    position: 'absolute',\n    zIndex: -1,\n  },\n  fileLinkStyles: {\n    margin: `${theme.spacing()}px`,\n  },\n  panel: {\n    margin: `${theme.spacing(2)}px 0`,\n  },\n  trash: {\n    width: 'auto',\n    cursor: 'pointer',\n  },\n  productColumn: {\n    paddingLeft: theme.spacing(3)\n  },\n  productRowTitles: {\n    margin: theme.spacing(2, 0),\n  },\n  warningMessage: {\n    color: theme.palette.error.dark,\n  },\n  warningIcon: {\n    marginRight: 10\n  },\n  noMargin: {\n    margin: 0\n  },\n  containerPadding: {\n    padding: `0 ${theme.spacing(3)}px`\n  },\n  textFlowEllipsis: {\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  },\n});\n\n\nconst mapStateToProps = (state, ownProps) => {\n\n  const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n  const quote = ownProps.quote;\n  const linkedProjectId = quote && quote.get('projectId');\n  const linkedProject = linkedProjectId ? makeSelectProject({ projectId: linkedProjectId })(state) : null;\n  const linkedProjectLocation = linkedProject && linkedProject.get('location');\n  return {\n    form,\n    linkedProjectLocation,\n    initialValues: ownProps.initialValues,\n    ...createStructuredSelector({\n      productMedia: makeSelectProductMedia(),\n      isInactiveProduct: makeSelectIsInactiveProduct(),\n      hasOMShopDrawingAcl: makeSelectUserHasOMShopDrawingAcl(),\n      loginUserOfficeLocation: makeSelectLoggedInUserOfficeLocation(),\n      hasFetchedColor: makeSelectHasFetchedShopDrawingColor(),\n      hasFeatCreateShopDrawingAcl: makeSelectUserHasFeatCreateShopDrawingAcl(),\n    })(state),\n    formValues: getFormValues(form)(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getProductMedia: (quoteId: number) => {\n      dispatch(new GetProductMediaAction({ quoteId }));\n    },\n    closeInactiveProductDialog: () => {\n      dispatch(new IsActiveProductAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IShopDrawingPrintComponentProps>>(\n  withAtsApi(),\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize: true,\n  }),\n)(ShopDrawingPrint);\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\"\n}), 'CloudUpload');","import React from 'react';\nimport {MenuItem, MenuList, Tooltip, IconButton, Popper, Paper, Grow, ClickAwayListener} from '@material-ui/core';\nimport {CloudUpload} from '@material-ui/icons';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/styles';\nimport RepeatIcon from '@material-ui/icons/Repeat';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    // Popper defaults to a low z-index; ShopDrawingPrint renders inside dialogs\n    // (email modal / PDFEditorModal), so lift it above the modal layer.\n    popper: {\n        zIndex: theme.zIndex.modal + 1,\n    },\n}));\n\nconst EditComponent = ({ inputId, showReplacementMenu, handleCreateReplacementShopDrawing }) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const [open, setOpen] = React.useState(false);\n    const anchorRef = React.useRef<HTMLButtonElement>(null);\n\n    const handleToggle = () => {\n        setOpen((prevOpen) => !prevOpen);\n    };\n    const handleClose = (event: React.MouseEvent<Document>) => {\n        // Ignore the clickaway triggered by clicking the anchor button itself,\n        // otherwise it closes then immediately re-opens (MUI toggle gotcha).\n        if (anchorRef.current && anchorRef.current.contains(event.target as Node)) {\n            return;\n        }\n        setOpen(false);\n    };\n\n    if (!showReplacementMenu) {\n      return (\n        <Tooltip title={t('shopDrawingPrint.replaceTooltip')} aria-label={t('shopDrawingPrint.replaceTooltip')} placement='top'>\n          <label htmlFor={inputId}>\n            <IconButton size='small' component='span'>\n              <RepeatIcon />\n            </IconButton>\n          </label>\n        </Tooltip>\n      );\n    }\n\n    return (\n        <span>\n            <IconButton size='small' ref={anchorRef} onClick={handleToggle}>\n              <RepeatIcon />\n            </IconButton>\n            <Popper\n                className={classes.popper}\n                anchorEl={anchorRef.current}\n                open={open}\n                placement='bottom-end'\n                transition={true}\n                modifiers={{\n                    flip: { enabled: true },\n                    preventOverflow: { enabled: true, boundariesElement: 'viewport' },\n                }}\n            >\n                {({ TransitionProps }) => (\n                    <Grow {...TransitionProps}>\n                        <Paper elevation={3}>\n                            <ClickAwayListener onClickAway={handleClose}>\n                                <MenuList autoFocusItem={open}>\n                                    <MenuItem onClick={() => setOpen(false)}>\n                                        <Tooltip title={t('shopDrawingPrint.replaceTooltip')}>\n                                            <label htmlFor={inputId} style={{ fontFamily: 'Montserrat Regular' }}>{t('shopDrawingPrint.replace')}</label>\n                                        </Tooltip>\n                                    </MenuItem>\n                                    <MenuItem\n                                        onClick={() => {\n                                          handleCreateReplacementShopDrawing();\n                                          setOpen(false);\n                                        }}\n                                    >\n                                          {t('shopDrawingPrint.createShopDrawingMenuItem')}\n                                    </MenuItem>\n                                </MenuList>\n                            </ClickAwayListener>\n                        </Paper>\n                    </Grow>\n                )}\n            </Popper>\n        </span>\n    );\n};\nconst Upload = ({ inputId }) => {\n    const { t } = useTranslation('translations');\n    return (\n        <Tooltip title={t('shopDrawingPrint.uploadAttachment')} aria-label={t('shopDrawingPrint.uploadAttachment')} placement='top'>\n          <label htmlFor={inputId}>\n            <IconButton size='small' component='span'>\n              <CloudUpload />\n            </IconButton>\n          </label>\n        </Tooltip>\n    );\n};\n\nconst Delete = ({ disabled, onDelete }) => {\n    const { t } = useTranslation('translations');\n    // Wrap the disabled-capable IconButton in a span so the Tooltip still receives\n    // hover events when the button is disabled (disabled elements don't fire them).\n    return (\n        <Tooltip title={t('shopDrawingPrint.deleteTooltip')} aria-label={t('shopDrawingPrint.deleteTooltip')} placement='top'>\n          <span>\n            <IconButton size='small' disabled={disabled} style={{ marginLeft: 8 }} onClick={onDelete}>\n              <DeleteIcon />\n            </IconButton>\n          </span>\n        </Tooltip>\n    );\n};\n\nconst ActionCell = {\n    edit: EditComponent,\n    upload: Upload,\n    delete: Delete\n};\nexport default ActionCell;","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');","import React from 'react';\nimport {Grid, LinearProgress, Link, TableCell, Typography} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {Warning} from '@material-ui/icons';\nimport {useTranslation} from 'react-i18next';\nimport CountryFlag from '../../containers/Expansion/CountryFlag';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport { BYTES_PER_MB } from '../../constants';\n\ninterface IProps {\n    isLoading: boolean;\n    fileLink: string;\n    fileName: string;\n    fileLanguageCode: string;\n    size: string;\n    overSizeFileName: string;\n    loadingPercentage: number;\n    isATSFile: boolean;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    textFlowEllipsis: {\n        textOverflow: 'ellipsis',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap'\n    },\n    warningMessage: {\n        color: theme.palette.error.dark,\n    },\n    warningIcon: {\n        marginRight: 10\n    },\n    linearProgress: {\n        flexGrow: 1\n    },\n}));\nconst FileCell: React.FC<IProps> = ({\n    isLoading,\n    fileLink,\n    fileName,\n    fileLanguageCode,\n    size,\n    overSizeFileName,\n    loadingPercentage,\n    isATSFile,\n}) => {\n    const { t } = useTranslation('translations');\n    const classes = useStyles();\n    const getFileRegionFlag = (languageCode: string) => {\n        switch (languageCode) {\n          case 'en-ca':\n            return <Grid container={true} direction='row'>\n            <CountryFlag\n              alt={t('region.canadianFlagAlt')}\n              src={canFlag}\n            />\n            <Typography variant='caption' color='inherit' style={{marginLeft: 4}}>{t('productDrawer.CA')}</Typography>\n          </Grid>;\n          case 'en-us':\n            return <Grid container={true} direction='row'>\n              <CountryFlag\n                alt={t('region.usFlagAlt')}\n                src={usFlag}\n              />\n              <Typography variant='caption' color='inherit' style={{marginLeft: 4}}>{t('productDrawer.US')}</Typography>\n            </Grid>;\n          case 'en':\n            return null;\n          default:\n            return null;\n        }\n    };\n    const fileLoading = isLoading && !overSizeFileName\n        ? <Grid\n            container={true}\n            xs={7}\n            wrap='nowrap'\n            alignItems='center'\n            item={true}\n        >\n            <LinearProgress variant='determinate' value={Number(loadingPercentage)} className={classes.linearProgress}/>\n            {loadingPercentage && <Typography>{loadingPercentage.toFixed(0)}%</Typography>}\n        </Grid>\n        : null;\n    const fileOverSize = overSizeFileName && isLoading\n        ? <Grid\n            className={classes.warningMessage}\n            container={true}\n            justify='center'\n            alignItems='center'\n            item={true}\n        >\n            <Warning className={classes.warningIcon} />\n            <Typography color='inherit'>{`${overSizeFileName} ${t('shopDrawingPrint.exceeds')}`}</Typography>\n        </Grid>\n        : null;\n    const sizeDisplay = (fileLink && size) && <Typography>{(Number(size) / BYTES_PER_MB).toFixed(2)}MB</Typography>;\n    return (\n        <TableCell scope='row'>\n            {isLoading ? fileLoading\n                : <div className={classes.textFlowEllipsis}>\n                    {fileLink ? getFileRegionFlag(fileLanguageCode) : null}\n                    {\n                        fileName ?\n                        <Link\n                            target='_blank'\n                            href={fileLink}\n                            underline='none'\n                            color='primary'\n                            variant='body2'\n                        >\n                            {fileName}\n                        </Link> : 'N/A'\n                    }\n                    {sizeDisplay}\n                    {fileName ? <Typography variant='caption' className={classes.textFlowEllipsis}>{isATSFile ? t('shopDrawingPrint.sharedFromAts') : t('shopDrawingPrint.uploadedByFirmUser')}</Typography> : null}\n                </div>\n            }\n            {fileOverSize}\n        </TableCell>\n   );\n};\n\nexport default FileCell;","import { fromJS, List, Map } from 'immutable';\n\n/**\n * Remove emoji unique identifiers from product IDs in sections.\n * Product IDs have format: \"uuid😈index😈\" — strips everything after first 😈.\n */\nconst removeUniqueIdentifier = (sections: any): any => {\n  if (!sections) { return sections; }\n  return sections.map((section: any) => {\n    if (List.isList(section)) {\n      return section.map((_section: any) => {\n        const products = _section.get('products');\n        const newProducts = products.map((productId: any) => {\n          return productId.split('😈')[0];\n        });\n        return _section.set('products', newProducts);\n      });\n    } else {\n      const products = section.get('products');\n      if (!products) { return section; }\n      const newProducts = products.map((productId: any) => {\n        return typeof productId === 'string' ? productId.split('😈')[0] : productId;\n      });\n      return section.set('products', newProducts);\n    }\n  });\n};\n\n/**\n * Add section titles and IDs from quote to form section values.\n */\nconst transformToAddSectionTitle = (values: any, quote: any): any => {\n  const sectionsFromValues = values.get('sections');\n  const sectionsFromQuote = quote?.get('sections');\n  if (!sectionsFromValues || !sectionsFromQuote) { return values; }\n\n  const transformedSectionValues = sectionsFromValues.map((noTitleSection: any, index: number) => {\n    if (noTitleSection === null) { return; }\n    const sectionTitle = sectionsFromQuote.getIn([index, 'sectionTitle']);\n    const sectionId = sectionsFromQuote.getIn([index, 'sectionId']);\n    return noTitleSection.setIn(['sectionTitle'], sectionTitle).setIn(['sectionId'], sectionId);\n  });\n\n  return values.set('sections', transformedSectionValues);\n};\n\n/**\n * Transform form section values: remove emoji markers, optionally add section titles, filter by criteria.\n */\nconst transformSectionValues = (formValues: any, quote: any, addSectionTitle: boolean, allowEmptySectionWithNote: boolean = false): any => {\n  const cleanSections = removeUniqueIdentifier(formValues.get('sections'));\n  let transformedValues = formValues.set('sections', cleanSections);\n\n  if (addSectionTitle) {\n    transformedValues = transformToAddSectionTitle(transformedValues, quote);\n  }\n\n  const filterCheck = allowEmptySectionWithNote\n    ? (section: any) => section && section.get('overrideSelected')\n    : (section: any) => section && section.get('products') && section.get('products').size;\n\n  if (Map.isMap(transformedValues.get('sections'))) {\n    return transformedValues.get('sections')\n      .mapKeys((key: string) => key.split('temp_')[1])\n      .map((customerQuote: any) =>\n        customerQuote.filter((section: any) => filterCheck(section)),\n      ).filter((section: any, key: string) => formValues.get('customers').includes(Number(key)) && section.size);\n  } else {\n    return transformedValues\n      .get('sections')\n      .filter((section: any) => filterCheck(section));\n  }\n};\n\n/**\n * Compare products between quote and print config, set defaultPrint flag.\n * Returns updated quote object with defaultPrint keys.\n */\nconst transformQuoteForDefaultPrint = (printConfig: any, quote: any, quotePrintFormValues: any): any => {\n  let updatedQuote = quote || Map();\n  const applyDiscount = Boolean(quotePrintFormValues?.get('discount'));\n\n  if (Map.isMap(printConfig)) {\n    const quotes = quotePrintFormValues?.get('quoteDiscountVariations');\n    if (!quotes) { return updatedQuote; }\n\n    quotes.forEach((_quote: any, key: string) => {\n      const _sections = updatedQuote.get('sections') || List();\n\n      const newSection = _sections.reduce((acc: any, section: any, index: number) => {\n        const targetedSection = _sections.get(index);\n        const targetedConfig = printConfig.get('' + key);\n\n        if (section.get('sectionId') !== targetedSection?.get('sectionId') || !Boolean(targetedConfig)) {\n          return acc.push(section);\n        }\n        const sectionId = section.get('sectionId');\n        const products = section.get('products', List());\n\n        const sectionFromConfig = targetedConfig.find((x: any) => x.get('sectionId') === sectionId);\n        const productsFromSectionConfig = sectionFromConfig ? sectionFromConfig.get('products') : List();\n\n        const productsWithDefaultPrint = products.reduce((_acc: any, product: any) => {\n          const quoteProductId = product.get('quoteProductId');\n          const defaultPrint = product.get('defaultPrint');\n\n          if (productsFromSectionConfig.includes(quoteProductId)) {\n            if (Map.isMap(defaultPrint)) {\n              return _acc.push(product.setIn(['defaultPrint', `${applyDiscount ? key : 'default'}`], true));\n            } else {\n              return _acc.push(product.set('defaultPrint', Map({ default: defaultPrint, [applyDiscount ? key : 'default']: true })));\n            }\n          } else {\n            if (Map.isMap(defaultPrint)) {\n              return _acc.push(product.setIn(['defaultPrint', `${applyDiscount ? key : 'default'}`], false));\n            } else {\n              return _acc.push(product.set('defaultPrint', Map({ default: defaultPrint, [applyDiscount ? key : 'default']: false })));\n            }\n          }\n        }, List());\n\n        const sectionWithDefaultProducts = section.set('products', productsWithDefaultPrint);\n        return acc.push(sectionWithDefaultProducts);\n      }, List());\n      updatedQuote = updatedQuote.set('sections', newSection);\n    });\n\n    return updatedQuote;\n  } else {\n    const sections = quote?.get('sections') || List();\n    const newSection = sections.reduce((acc: any, section: any) => {\n      const sectionId = section.get('sectionId');\n      const products = section.get('products', List());\n\n      const sectionFromConfig = printConfig.find((x: any) => x.get('sectionId') === sectionId);\n      const productsFromSectionConfig = sectionFromConfig ? sectionFromConfig.get('products') : List();\n\n      const productsWithDefaultPrint = products.reduce((_acc: any, product: any) => {\n        const quoteProductId = product.get('quoteProductId');\n        const defaultPrint = product.get('defaultPrint');\n        if (productsFromSectionConfig.includes(quoteProductId)) {\n          if (Map.isMap(defaultPrint)) {\n            return _acc.push(product.setIn(['defaultPrint', 'default'], true));\n          } else {\n            return _acc.push(product.set('defaultPrint', Map({ default: true })));\n          }\n        } else {\n          if (Map.isMap(defaultPrint)) {\n            return _acc.push(product.setIn(['defaultPrint', 'default'], false));\n          } else {\n            return _acc.push(product.set('defaultPrint', Map({ default: false })));\n          }\n        }\n      }, List());\n\n      const sectionWithDefaultProducts = section.set('products', productsWithDefaultPrint);\n      return acc.push(sectionWithDefaultProducts);\n    }, List());\n\n    return quote.set('sections', newSection);\n  }\n};\n\n/**\n * Transform creator field from string ('none'/'creator'/'custom') to array format for API.\n */\nconst transformCreatorField = (formValues: any): any => {\n  if (!formValues) { return formValues; }\n  return formValues.withMutations((ctx: any) => {\n    const creatorValue = ctx.get('creator');\n    let creator: any[] = [];\n    let customCreatorEmail: string = null;\n    if (['creator', 'custom'].includes(creatorValue)) {\n      creator = [true];\n    }\n    if (creatorValue === 'custom') {\n      customCreatorEmail = ctx.get('customCreatorEmail');\n      if (customCreatorEmail && typeof customCreatorEmail === 'string') {\n        customCreatorEmail = customCreatorEmail.trim();\n      }\n    }\n    ctx.set('creator', creator);\n    ctx.set('customCreatorEmail', customCreatorEmail);\n  });\n};\n\n/**\n * Trim quoteDiscountVariations — only keep quoteProductId, excluded, templateCells per product,\n * and sectionId, sectionCalculations, sectionTemplate per section.\n */\nconst trimQuoteDiscountVariations = (qdv: any, resetValues: boolean = false): any => {\n  if (!qdv || !Map.isMap(qdv) || qdv.size === 0) { return null; }\n\n  return qdv.map((_quote: any) => {\n    let targetedQuote = _quote;\n\n    // Trim sections\n    targetedQuote = targetedQuote.set('sections',\n      targetedQuote.get('sections').map((section: any) => {\n        let sectionCalcs = section.get('sectionCalculations', List());\n        if (resetValues && Map.isMap(sectionCalcs)) {\n          sectionCalcs = sectionCalcs.map((calc: any) => calc.set('value', 0).set('rowsIncludedInCalculation', 0));\n        }\n        return fromJS({\n          sectionId: section.get('sectionId'),\n          sectionCalculations: sectionCalcs,\n          products: (section.get('products') || List()).map((product: any) => {\n            if (typeof product === 'string' || !product.get) { return product; }\n            return fromJS({\n              quoteProductId: product.get('quoteProductId'),\n              excluded: product.get('excluded'),\n              templateCells: product.get('templateCells', List()),\n            });\n          }),\n        });\n      }),\n    );\n\n    // Reset grandTotals values if needed\n    if (resetValues) {\n      const grandTotals = targetedQuote.get('grandTotals');\n      if (grandTotals && Map.isMap(grandTotals)) {\n        targetedQuote = targetedQuote.set('grandTotals',\n          grandTotals.map((gt: any) => gt.set('value', 0).set('rowsIncludedInCalculation', 0).set('discountedValue', 0)),\n        );\n      }\n    }\n\n    return targetedQuote;\n  });\n};\n\nconst QuoteDownloadPreviewUtil = {\n  removeUniqueIdentifier,\n  transformToAddSectionTitle,\n  transformSectionValues,\n  transformQuoteForDefaultPrint,\n  transformCreatorField,\n  trimQuoteDiscountVariations,\n};\n\nexport default QuoteDownloadPreviewUtil;\n","import { fromJS, Map } from 'immutable';\nimport { ISendEmailParams } from '../../modules/NotificationModule/NotificationServiceApi';\nimport QuoteDownloadPreviewUtil from '../../containers/QuoteDownloadPreview/QuoteDownloadPreviewUtil';\n\n/**\n * Transform QuotePrint Redux Form values into the format expected by the print API.\n * Uses shared util functions from QuoteDownloadPreviewUtil.\n */\nconst transformQuotePrintData = (formValues: any, quoteId: any, quote: any): any => {\n  if (!formValues) { return fromJS({ quoteId }); }\n\n  // Transform creator field\n  const transformed = QuoteDownloadPreviewUtil.transformCreatorField(formValues);\n\n  return transformed.withMutations((ctx: any) => {\n    ctx.set('quoteId', quoteId);\n    ctx.set('documentType', 'docx');\n\n    // Transform allowToAddress from array to boolean\n    if (ctx.get('allowToAddress')?.includes?.(true)) {\n      ctx.set('allowToAddress', true);\n    } else {\n      ctx.set('allowToAddress', false);\n    }\n\n    // Remove emoji markers from product IDs in sections\n    const sections = ctx.get('sections');\n    if (sections) {\n      ctx.set('sections', QuoteDownloadPreviewUtil.removeUniqueIdentifier(sections));\n    }\n\n    // Trim quoteDiscountVariations\n    const qdv = ctx.get('quoteDiscountVariations');\n    const trimmedQdv = QuoteDownloadPreviewUtil.trimQuoteDiscountVariations(qdv, true);\n    if (trimmedQdv) {\n      ctx.set('quoteDiscountVariations', trimmedQdv);\n    } else {\n      ctx.delete('quoteDiscountVariations');\n    }\n\n    // Transform sections: remove emojis, filter, wrap in {default: ...}\n    const currentSections = ctx.get('sections');\n    if (currentSections) {\n      const transformedSections = QuoteDownloadPreviewUtil.transformSectionValues(\n        ctx.set('sections', currentSections),\n        quote,\n        false,\n        true,\n      );\n\n      // Add sectionCalculations from quote to each section\n      // Reset value/rowsIncludedInCalculation to 0 — the print service recalculates\n      const quoteSections = quote?.get('sections');\n      const addCalcToSections = (secs: any) => {\n        if (!secs || !quoteSections) { return secs; }\n        return secs.map((section: any) => {\n          const sectionId = section.get('sectionId');\n          const quoteSection = quoteSections.find((qs: any) => qs.get('sectionId') === sectionId);\n          if (quoteSection) {\n            const computedCalcs = quoteSection.get('sectionCalculations');\n            if (computedCalcs) {\n              // Reset values to 0 to match preview behavior\n              const resetCalcs = Map.isMap(computedCalcs)\n                ? computedCalcs.map((calc: any) => calc.set('value', 0).set('rowsIncludedInCalculation', 0))\n                : computedCalcs;\n              return section.set('sectionCalculations', resetCalcs);\n            }\n            const templateCalcs = quoteSection.getIn(['sectionTemplate', 'sectionCalculations'], fromJS([]));\n            const calcMap = templateCalcs\n              .filter((calc: any) => calc.get('printColumn') ?? true)\n              .reduce((acc: any, calc: any) => acc.set(calc.get('name'), calc.set('value', 0).set('rowsIncludedInCalculation', 0)), Map());\n            return section.set('sectionCalculations', calcMap);\n          }\n          return section;\n        });\n      };\n\n      if (Map.isMap(transformedSections)) {\n        ctx.set('sections', transformedSections.map((secs: any) => addCalcToSections(secs)));\n      } else {\n        // Store as List — caller wraps with customer ID or 'default'\n        ctx.set('sections', addCalcToSections(transformedSections));\n      }\n    }\n\n    // Add grandTotals from quote — reset values to 0\n    const grandTotals = quote?.get('grandTotals');\n    if (grandTotals) {\n      const resetGrandTotals = Map.isMap(grandTotals)\n        ? grandTotals.map((gt: any) => gt.set('value', 0).set('rowsIncludedInCalculation', 0).set('discountedValue', 0))\n        : grandTotals;\n      ctx.set('grandTotals', Map({ default: resetGrandTotals }));\n    }\n\n    // Remove internal fields\n    ctx.delete('generalConfig');\n    ctx.delete('quoteWithoutDiscount');\n    ctx.delete('discount');\n  });\n};\n\n/**\n * Transform ShopDrawingPrint Redux Form values into the format expected by the print API.\n * Uses shared util functions from QuoteDownloadPreviewUtil.\n */\nconst transformShopDrawingPrintData = (formValues: any, quoteId: any, quote?: any): any => {\n  if (!formValues) { return fromJS({ quoteId }); }\n\n  return formValues.withMutations((ctx: any) => {\n    ctx.set('quoteId', quoteId);\n    // Email modal sends per-customer product lists (already filtered by customer visibility);\n    // tell BE to use the selection as-sent instead of re-applying notVisibleToSelectedCustomer.\n    ctx.set('originalSelection', [true]);\n\n    // Remove emoji markers from product IDs in sections\n    const sections = ctx.get('sections');\n    if (sections) {\n      ctx.set('sections', QuoteDownloadPreviewUtil.removeUniqueIdentifier(sections));\n    }\n\n    // Add section titles from quote\n    if (quote) {\n      const transformedSections = QuoteDownloadPreviewUtil.transformSectionValues(ctx, quote, true);\n      ctx.set('sections', transformedSections);\n    }\n\n    // Build mediaTypes array from boolean fields (matching preview behavior)\n    const mediaTypes: string[] = [];\n    if (ctx.get('shopDrawing')?.includes?.(true)) { mediaTypes.push('shop_drawing'); }\n    if (ctx.get('operationGuide')?.includes?.(true)) { mediaTypes.push('operation_guide'); }\n    if (ctx.get('installationManual')?.includes?.(true)) { mediaTypes.push('installation_manual'); }\n    if (ctx.get('warranty')?.includes?.(true)) { mediaTypes.push('warranty'); }\n    if (ctx.get('other')?.includes?.(true)) { mediaTypes.push('other'); }\n    ctx.set('mediaTypes', fromJS(mediaTypes));\n\n    // Delete the individual boolean fields\n    ctx.delete('shopDrawing');\n    ctx.delete('operationGuide');\n    ctx.delete('installationManual');\n    ctx.delete('warranty');\n    ctx.delete('other');\n\n    // Handle useFallback\n    if (ctx.get('useFallback')) {\n      ctx.set('useFallback', [true]);\n    } else {\n      ctx.delete('useFallback');\n    }\n  });\n};\n\nconst getCustomerDisplayInfo = (customer: any) => {\n  const customerId = customer.get('id');\n  const firstName = customer.get('firstName') || '';\n  const lastName = customer.get('lastName') || '';\n  const name = [firstName, lastName].filter(x => x).join(' ').trim();\n  const email = customer.get('email') || '';\n  const organization = customer.get('organization') || '';\n  const address = [\n    customer.get('address1'),\n    customer.get('cityName'),\n    customer.get('provinceName'),\n  ].filter(x => x).join(', ');\n\n  return { customerId, name, email, organization, address };\n};\n\nconst getUserName = (identity: any): string => {\n  if (!identity) { return ''; }\n  const givenName = identity.get('given_name');\n  const familyName = identity.get('family_name');\n  if (!givenName && !familyName) {\n    return identity.get('preferred_username') || '';\n  }\n  return `${givenName || ''} ${familyName || ''}`.trim();\n};\n\nconst getFileIconType = (filename: string): 'pdf' | 'image' | 'word' | 'excel' | 'default' => {\n  if (!filename) { return 'default'; }\n  const ext = filename.toLowerCase().split('.').pop();\n  if (ext === 'pdf') { return 'pdf'; }\n  if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'bmp', 'webp'].includes(ext)) { return 'image'; }\n  if (['doc', 'docx'].includes(ext)) { return 'word'; }\n  if (['xls', 'xlsx', 'csv'].includes(ext)) { return 'excel'; }\n  return 'default';\n};\n\nconst getContentType = (filename: string): string => {\n  if (!filename) { return 'application/octet-stream'; }\n  const ext = filename.toLowerCase().split('.').pop();\n  const typeMap = {\n    pdf: 'application/pdf',\n    jpg: 'image/jpeg',\n    jpeg: 'image/jpeg',\n    png: 'image/png',\n    gif: 'image/gif',\n    doc: 'application/msword',\n    docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n    xls: 'application/vnd.ms-excel',\n    xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n    csv: 'text/csv',\n  };\n  return typeMap[ext] || 'application/octet-stream';\n};\n\nconst buildSendEmailParams = (\n  selectedCustomerIds: number[],\n  emailData: any,\n  userName: string,\n  jobs?: any[],\n  fileBaseUrl?: string,\n  appId?: string,\n): ISendEmailParams[] => {\n  const params: ISendEmailParams[] = [];\n  for (const customerId of selectedCustomerIds) {\n    const data = emailData[customerId];\n    if (!data || data.to.length === 0) { continue; }\n    const toEmails = data.to.join(', ');\n    const message = data.message || '';\n\n    // Build download links from completed jobs for this customer\n    let downloadLinksHtml = '';\n    if (jobs && fileBaseUrl && appId) {\n      const customerJobs = jobs.filter(j => j.customerId === customerId && j.status === 'complete' && j.fileId);\n      if (customerJobs.length > 0) {\n        const links = customerJobs.map(j => {\n          const url = `${fileBaseUrl}/file/${j.fileId}?X-ATS-APP-ID=${appId}`;\n          return `<a href=\"${url}\" style=\"color:#2940FF;text-decoration:underline;\">[${j.attachmentLabel} Link]</a>`;\n        });\n        downloadLinksHtml = links.join('&nbsp; | &nbsp;');\n      }\n    }\n\n    // Convert message newlines to <br>\n    const messageHtml = message.replace(/\\n/g, '<br>');\n    const signatureHtml = `<br><br>Regards,<br>${userName}`;\n    const linksSection = downloadLinksHtml ? `<br><br>${downloadLinksHtml}` : '';\n\n    const htmlBody = `<div style=\"font-family:Arial,sans-serif;font-size:14px;color:#333;\">`\n      + `${messageHtml}`\n      + `${signatureHtml}`\n      + `${linksSection}`\n      + `</div>`;\n\n    const emailParam: ISendEmailParams = {\n      to: toEmails,\n      subject: data.subject,\n      body: htmlBody,\n    };\n    if (data.cc?.length > 0) {\n      emailParam.cc = data.cc.join(', ');\n    }\n    if (data.bcc?.length > 0) {\n      emailParam.bcc = data.bcc.join(', ');\n    }\n    if (data.attachments?.length > 0) {\n      emailParam.attachments = data.attachments.map((att: any) => ({ fileId: att.attachmentId }));\n    }\n    params.push(emailParam);\n  }\n  return params;\n};\n\nconst formatFileSize = (bytes: number): string => {\n  if (bytes < 1024) { return `${bytes}B`; }\n  if (bytes < 1024 * 1024) { return `${(bytes / 1024).toFixed(1)}K`; }\n  return `${(bytes / (1024 * 1024)).toFixed(1)}M`;\n};\n\nconst isValidEmail = (email: string): boolean => {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n};\n\nconst hasInvalidEmails = (selectedCustomerIds: number[], emailData: Record<number, any>): boolean => {\n  return selectedCustomerIds.some(cId => {\n    const data = emailData[cId];\n    if (!data) { return false; }\n    return data.to.some((e: string) => !isValidEmail(e))\n      || data.cc.some((e: string) => !isValidEmail(e))\n      || data.bcc.some((e: string) => !isValidEmail(e));\n  });\n};\n\nconst QuoteEmailUtil = {\n  getCustomerDisplayInfo,\n  getUserName,\n  getFileIconType,\n  buildSendEmailParams,\n  transformQuotePrintData,\n  transformShopDrawingPrintData,\n  formatFileSize,\n  isValidEmail,\n  hasInvalidEmails,\n};\n\nexport default QuoteEmailUtil;\n","import * as React from 'react';\nimport { List } from 'immutable';\nimport { CustomerSettings, defaultCustomerSettings } from './SelectCustomersStep';\nimport { IPrintJobInfo } from './DownloadStep';\n\nexport type ModalStep = 'settings' | 'download' | 'email' | 'sent' | 'error';\n\nexport interface IEmailAttachment {\n  attachmentId: string;\n  origFileName: string;\n  size?: number;\n}\n\nexport interface IEmailData {\n  to: string[];\n  cc: string[];\n  bcc: string[];\n  subject: string;\n  message: string;\n  attachments: IEmailAttachment[];\n}\n\ninterface IQuoteEmailContext {\n  // Step management\n  modalStep: ModalStep;\n  setModalStep: (step: ModalStep) => void;\n\n  // Customer data\n  customers: any;\n  selectedCustomerIds: number[];\n  setSelectedCustomerIds: React.Dispatch<React.SetStateAction<number[]>>;\n  selectAllCustomers: boolean;\n  setSelectAllCustomers: React.Dispatch<React.SetStateAction<boolean>>;\n  activeCustomerId: number | null;\n  setActiveCustomerId: React.Dispatch<React.SetStateAction<number | null>>;\n\n  // Per-customer settings\n  customerSettings: Record<number, CustomerSettings>;\n  setCustomerSettings: React.Dispatch<React.SetStateAction<Record<number, CustomerSettings>>>;\n  activeSettings: CustomerSettings;\n  updateActiveSettings: (updater: (prev: CustomerSettings) => CustomerSettings) => void;\n\n  // Attachment type\n  activeAttachmentType: string;\n  setActiveAttachmentType: React.Dispatch<React.SetStateAction<string>>;\n  hasOMShopDrawingAcl: boolean;\n\n  // Print jobs\n  jobs: IPrintJobInfo[];\n  expectedJobs: IPrintJobInfo[];\n  setExpectedJobs: React.Dispatch<React.SetStateAction<IPrintJobInfo[]>>;\n\n  // Email data per customer\n  emailData: Record<number, IEmailData>;\n  setEmailData: React.Dispatch<React.SetStateAction<Record<number, IEmailData>>>;\n\n  // Per-customer print form values (saved Redux Form snapshots)\n  customerPrintFormValues: Record<number, { quotePrint?: any; shopDrawing?: any; oandm?: any }>;\n  setCustomerPrintFormValues: React.Dispatch<React.SetStateAction<Record<number, { quotePrint?: any; shopDrawing?: any; oandm?: any }>>>;\n\n  // Quote data\n  quoteId: number;\n\n  // Actions\n  onClose: () => void;\n}\n\nexport const QuoteEmailContext = React.createContext<IQuoteEmailContext>(null);\n\nexport const useQuoteEmail = () => {\n  const context = React.useContext(QuoteEmailContext);\n  if (!context) {\n    throw new Error('useQuoteEmail must be used within QuoteEmailProvider');\n  }\n  return context;\n};\n","import * as React from 'react';\nimport {\n  DialogContent,\n  DialogActions,\n  Button,\n  Grid,\n  Typography,\n  Checkbox,\n  CircularProgress,\n  FormControlLabel,\n  IconButton,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\nimport { MemoryRouter, Route } from 'react-router';\nimport { useDispatch, useSelector, useStore } from 'react-redux';\nimport { getFormValues } from 'redux-form/immutable';\nimport { initialize, change } from 'redux-form';\nimport QuoteEmailUtil from './QuoteEmailUtil';\nimport { useQuoteEmail } from './QuoteEmailContext';\nimport QuotePrint, { FORM_NAME as QUOTE_PRINT_FORM_NAME } from '../QuotePrint';\nimport ShopDrawingPrint, { CUSTOMER_DISPLAY_NAME_OPTION, FORM_NAME as SHOP_DRAWING_FORM_NAME } from '../ShopDrawingPrint';\n\nconst OM_FORM_NAME = 'quotePrintOM';\n\n// Attachment types enabled in the email modal. Add 'excelCsv' to re-enable Excel/CSV.\nconst ENABLED_ATTACHMENT_TYPES = ['quote', 'shopDrawing', 'oandm'];\nimport { fromJS, List } from 'immutable';\nimport { makeSelectQuote } from '../../modules/QuoteModule/selectors';\n\nconst styles = (theme: Theme): StyleRules => ({\n  dialogTitle: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    padding: '16px 24px',\n  },\n  titleText: {\n    fontSize: 18,\n    fontWeight: 500,\n  },\n  content: {\n    padding: '0 24px 24px',\n    // Prevent the page from auto-scrolling horizontally when file uploads cause\n    // table content to grow. Without this, browser auto-scroll behavior (e.g.\n    // scrolling a focused link into view) shifts the entire dialog off-screen left.\n    overflowX: 'hidden' as const,\n  },\n  leftPanel: {\n    borderRight: '1px solid #e0e0e0',\n    paddingRight: 16,\n    maxHeight: 500,\n    overflowY: 'auto' as const,\n  },\n  middlePanel: {\n    borderRight: '1px solid #e0e0e0',\n    paddingLeft: 16,\n    paddingRight: 16,\n  },\n  rightPanel: {\n    paddingLeft: 16,\n    maxHeight: 500,\n    overflowY: 'auto' as const,\n    overflowX: 'hidden' as const,\n  },\n  customerItem: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    padding: '8px 0',\n    borderBottom: '1px solid #f0f0f0',\n  },\n  customerName: {\n    color: '#E67E22',\n    fontWeight: 500,\n    fontSize: 14,\n  },\n  customerEmail: {\n    fontSize: 12,\n    color: '#666',\n    textDecoration: 'underline',\n  },\n  customerOrg: {\n    fontSize: 12,\n    color: '#666',\n  },\n  customerAddress: {\n    fontSize: 12,\n    color: '#666',\n  },\n  settingsSection: {\n    border: '1px solid #e0e0e0',\n    borderRadius: 4,\n    padding: 16,\n    marginBottom: 16,\n    position: 'relative' as const,\n  },\n  settingsSectionTitle: {\n    fontWeight: 500,\n    marginBottom: 8,\n  },\n  applyToAll: {\n    color: '#E67E22',\n    fontWeight: 500,\n    fontSize: 12,\n    cursor: 'pointer',\n    position: 'absolute' as const,\n    right: 16,\n    top: 16,\n  },\n  cancelButton: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '8px 24px',\n    textTransform: 'none' as const,\n  },\n  nextButton: {\n    backgroundColor: '#E67E22',\n    color: '#fff',\n    borderRadius: 20,\n    padding: '8px 32px',\n    textTransform: 'none' as const,\n    '&:hover': {\n      backgroundColor: '#d35400',\n    },\n  },\n  dialogActions: {\n    padding: '16px 24px',\n    justifyContent: 'flex-end',\n  },\n  customerRowActive: {\n    backgroundColor: '#dceef8',\n    borderLeft: '3px solid #E67E22',\n  },\n  customerRowInactive: {\n    borderLeft: '3px solid transparent',\n  },\n  customerCheckbox: {\n    paddingTop: 4,\n  },\n  attachmentTypeLabel: {\n    fontSize: 14,\n  },\n  printSettingsHint: {\n    color: '#666',\n    marginBottom: 8,\n  },\n  excelCsvText: {\n    color: '#666',\n  },\n  customerRow: {\n    display: 'flex',\n    alignItems: 'flex-start',\n    cursor: 'pointer',\n    padding: '4px 0',\n    overflow: 'hidden',\n  },\n  attachmentTypeRow: {\n    display: 'flex',\n    alignItems: 'center',\n    cursor: 'pointer',\n  },\n});\n\nexport const defaultCustomerSettings = {\n  attachmentTypes: { quote: true, shopDrawing: true, oandm: true, excelCsv: false },\n  quoteProjectInfo: { quoteTitle: true, shippingAddress: true, expirationDate: true, bidDate: true },\n  logoPosition: 'left',\n  creatorInfo: 'none',\n  applyCustomerDiscount: false,\n  splitQuoteBySection: false,\n  shopDrawingPrintFormat: { pageNumbers: true, titlePage: true, tableOfContents: true },\n  shopDrawingProjectInfo: { quoteTitle: true, quoteNumber: true, printDate: true },\n  shopDrawingCustomerDisplayName: 'customer' as string,\n  shopDrawingCustomerId: '' as string,\n  shopDrawingFileTypes: { shopDrawing: true, operationGuide: false, installationManual: false, warranty: false, other: false },\n};\n\nexport type CustomerSettings = typeof defaultCustomerSettings;\n\ninterface ISelectCustomersStepProps extends WithStyles<typeof styles> {\n  onNext: () => void;\n}\n\nconst SelectCustomersStep: React.FC<ISelectCustomersStepProps> = ({ onNext, classes }) => {\n  const { t } = useTranslation('translations');\n  const {\n    customers,\n    selectedCustomerIds,\n    setSelectedCustomerIds,\n    selectAllCustomers,\n    setSelectAllCustomers,\n    activeCustomerId,\n    setActiveCustomerId,\n    customerSettings,\n    setCustomerSettings,\n    activeSettings,\n    updateActiveSettings,\n    activeAttachmentType,\n    setActiveAttachmentType,\n    hasOMShopDrawingAcl,\n    onClose,\n    quoteId,\n    customerPrintFormValues,\n    setCustomerPrintFormValues,\n  } = useQuoteEmail();\n  const dispatch = useDispatch();\n  const quote = useSelector(makeSelectQuote(String(quoteId)));\n  const [configErrorByCustomer, setConfigErrorByCustomer] = React.useState<Record<number, boolean>>({});\n  // Track which attachment types have been viewed — lazy mount, then keep mounted\n  // Two-phase: first mark as mounting (show spinner), then after a tick mark as mounted (render form)\n  const [mountedAttachmentTypes, setMountedAttachmentTypes] = React.useState<Record<string, boolean>>({ quote: true });\n  const [mountingAttachmentType, setMountingAttachmentType] = React.useState<string | null>(null);\n  React.useEffect(() => {\n    if (activeAttachmentType && !mountedAttachmentTypes[activeAttachmentType] && mountingAttachmentType !== activeAttachmentType) {\n      setMountingAttachmentType(activeAttachmentType);\n      // Delay mount by one frame so the spinner renders first\n      requestAnimationFrame(() => {\n        setMountedAttachmentTypes(prev => ({ ...prev, [activeAttachmentType]: true }));\n        setMountingAttachmentType(null);\n      });\n    }\n  }, [activeAttachmentType]);\n\n  // Read form values on-demand from Redux store — no useSelector subscriptions,\n  // so checkbox changes in QuotePrint/ShopDrawingPrint don't trigger re-renders here.\n  const reduxStore = useStore();\n  const getFormValuesFromStore = React.useCallback((): { quotePrint: any; shopDrawing: any; oandm: any } => {\n    const state = reduxStore.getState();\n    return {\n      quotePrint: getFormValues(QUOTE_PRINT_FORM_NAME)(state),\n      shopDrawing: getFormValues(SHOP_DRAWING_FORM_NAME)(state),\n      oandm: getFormValues(OM_FORM_NAME)(state),\n    };\n  }, [reduxStore]);\n\n  // QuotePrint populates `quoteDiscountVariations[customerId].sections` with each\n  // customer's pre-filtered product list (visibility applied via UpdateAllSectionTotalAction).\n  // We reuse that for shop drawing per-customer filtering — quote.customers doesn't carry\n  // visibility, and re-fetching it per customer is wasteful.\n  const quoteDiscountVariations = useSelector((state: any) => {\n    const vals: any = getFormValues(QUOTE_PRINT_FORM_NAME)(state);\n    return vals?.get?.('quoteDiscountVariations');\n  });\n\n  // Set of firm product IDs visible to the active customer. Built from QDV sections.\n  // When QDV hasn't populated yet (QuotePrint still fetching), returns null → filter falls\n  // back to `!notVisibleToSelectedCustomer`.\n  const activeCustomerVisibleFirmProductIds = React.useMemo(() => {\n    if (!activeCustomerId || !quoteDiscountVariations) { return null; }\n    const customerQdv = quoteDiscountVariations.get(activeCustomerId);\n    const qdvSections = customerQdv?.get('sections');\n    if (!qdvSections) { return null; }\n    const ids = new Set<number>();\n    qdvSections.forEach((section: any) => {\n      section.get('products')?.forEach((p: any) => {\n        const fid = p?.get?.('firmProductId');\n        if (fid != null) { ids.add(fid); }\n      });\n    });\n    return ids;\n  }, [activeCustomerId, quoteDiscountVariations]);\n\n  // Builds Shop Drawing sections per customer's visible firm product IDs (from QDV).\n  // Product IDs must match ShopDrawingPrint's checkbox format: `firmProductId😈sectionIndex-productIndex😈`.\n  // productIndex is relative to the filtered list, so the same product can have different\n  // IDs per customer — form state must be rebuilt when switching customers.\n  const buildShopDrawingSections = React.useCallback((visibleFirmProductIds: Set<number> | null) => {\n    return quote?.get('sections')?.reduce((acc: any, section: any, sectionIndex: number) => {\n      const products = (section.get('products') || fromJS([])).filter((p: any) => {\n        if (p.get('id') === -1) { return false; }\n        if (visibleFirmProductIds) {\n          return visibleFirmProductIds.has(p.get('firmProductId'));\n        }\n        return !Boolean(p.get('notVisibleToSelectedCustomer'));\n      });\n      return acc.push(fromJS({\n        products: products.map((p: any, productIndex: number) =>\n          p.get('firmProductId') + `😈${sectionIndex + '-' + productIndex}😈`),\n        sectionId: section.get('sectionId'),\n        sectionTitle: section.get('sectionTitle') || '',\n      }));\n    }, fromJS([])) || fromJS([]);\n  }, [quote]);\n\n  // Helper: get visible firm product IDs for a specific customer from QDV.\n  const getVisibleFirmProductIdsForCustomer = React.useCallback((customerId: number): Set<number> | null => {\n    if (!quoteDiscountVariations) { return null; }\n    const qdvSections = quoteDiscountVariations.get(customerId)?.get('sections');\n    if (!qdvSections) { return null; }\n    const ids = new Set<number>();\n    qdvSections.forEach((section: any) => {\n      section.get('products')?.forEach((p: any) => {\n        const fid = p?.get?.('firmProductId');\n        if (fid != null) { ids.add(fid); }\n      });\n    });\n    return ids;\n  }, [quoteDiscountVariations]);\n\n  const shopDrawingInitialValues = React.useMemo(() => {\n    return fromJS({\n      quoteTitle: [true],\n      printDate: [true],\n      customer: activeCustomerId || '',\n      sections: buildShopDrawingSections(activeCustomerVisibleFirmProductIds),\n      pageNumbers: [true],\n      quoteNumber: [true],\n      customerDisplayName: CUSTOMER_DISPLAY_NAME_OPTION.CUSTOMER,\n      tableOfContents: [true],\n      titlePage: [true],\n    });\n  }, [buildShopDrawingSections, activeCustomerVisibleFirmProductIds, activeCustomerId]);\n\n  const shopDrawingInitialValuesForSD = React.useMemo(() =>\n    shopDrawingInitialValues.merge(fromJS({ shopDrawing: [true], operationGuide: [false], installationManual: [false], warranty: [false], other: [false] })),\n  [shopDrawingInitialValues]);\n\n  const shopDrawingInitialValuesForOM = React.useMemo(() =>\n    shopDrawingInitialValues.merge(fromJS({ shopDrawing: [false], operationGuide: [true], installationManual: [false], warranty: [false], other: [false] })),\n  [shopDrawingInitialValues]);\n\n  // Save current form values for the active customer — reads from store on-demand\n  const saveCurrentCustomerFormValues = React.useCallback(() => {\n    if (!activeCustomerId) { return; }\n    const { quotePrint, shopDrawing, oandm } = getFormValuesFromStore();\n    setCustomerPrintFormValues(prev => ({\n      ...prev,\n      [activeCustomerId]: { quotePrint, shopDrawing, oandm },\n    }));\n  }, [activeCustomerId, getFormValuesFromStore]);\n\n  // Capture initial form defaults once QuotePrint form is ready.\n  // Only requires quotePrint — shopDrawing/oandm are lazily mounted and may not exist yet.\n  const initialFormValuesRef = React.useRef<{ quotePrint: any; shopDrawing: any; oandm: any }>(null);\n  React.useEffect(() => {\n    if (!initialFormValuesRef.current) {\n      const check = () => {\n        const vals = getFormValuesFromStore();\n        if (vals.quotePrint) {\n          initialFormValuesRef.current = vals;\n        } else {\n          setTimeout(check, 100);\n        }\n      };\n      check();\n    }\n  }, [getFormValuesFromStore]);\n\n  // Auto-save form values via store subscription — no re-render on form changes\n  const activeCustomerIdRef = React.useRef(activeCustomerId);\n  activeCustomerIdRef.current = activeCustomerId;\n\n  const isRestoringRef = React.useRef(false);\n\n  // No auto-save effect — form values are saved explicitly via saveCurrentCustomerFormValues()\n  // called in handleCustomerClick, handleApplyToAll, and handleNext. This avoids re-render\n  // cascades from setCustomerPrintFormValues on every checkbox toggle.\n\n  // Restore form values for a customer\n  const restoreCustomerFormValues = React.useCallback((customerId: number) => {\n    // Preserve global discount data — quoteDiscountVariations and quoteWithoutDiscount contain\n    // data for ALL customers (populated by fetchAndSetupCustomerData). initialize() would\n    // overwrite them with stale/empty defaults since initialFormValuesRef captures values\n    // before the async discount callbacks complete.\n    const { quotePrint: currentQuotePrintValues } = getFormValuesFromStore();\n    const currentQdv = currentQuotePrintValues?.get('quoteDiscountVariations');\n    const currentQwd = currentQuotePrintValues?.get('quoteWithoutDiscount');\n\n    const saved = customerPrintFormValues[customerId];\n    const defaults = initialFormValuesRef.current;\n    let restoreValues = saved?.quotePrint || defaults?.quotePrint;\n\n    const hasSaved = !!saved?.quotePrint;\n    // Apply user preferences (generalConfig) only for first-visit (non-saved) customers —\n    // saved customers have their own preferences already stored.\n    if (!hasSaved && restoreValues) {\n      const currentGeneralConfig = currentQuotePrintValues?.get('generalConfig');\n      if (currentGeneralConfig) {\n        restoreValues = restoreValues.set('generalConfig', currentGeneralConfig);\n        currentGeneralConfig.forEach((value: any, key: string) => {\n          restoreValues = restoreValues.set(key, value);\n        });\n      }\n      // Default discount and allowToAddress for first-visit customers\n      const discountForCustomer = quote?.get('selectedCustomer') === customerId;\n      restoreValues = restoreValues\n        .set('discount', discountForCustomer)\n        .set('allowToAddress', fromJS([true]));\n    }\n\n    // Always rebuild sections from the target customer's data, whether saved or not.\n    // For saved customers whose form was copied from another customer (e.g. via \"Apply to All\"),\n    // the sections field still has the other customer's products/indices. Rebuilding here\n    // ensures products match the target customer's visibility-filtered source (QDV when\n    // discount ON, quote when OFF). QA rule: all visible products re-checked on customer switch.\n    if (restoreValues) {\n      const restoreDiscount = Boolean(restoreValues.get('discount'));\n      const qdvEntry = restoreDiscount\n        ? (currentQuotePrintValues?.get('quoteDiscountVariations')?.get(customerId)\n          || currentQuotePrintValues?.get('quoteDiscountVariations')?.get(`${customerId}`))\n        : null;\n      const productSourceSections = qdvEntry?.get('sections') || quote?.get('sections');\n      const formSections = restoreValues.get('sections');\n      if (productSourceSections && formSections) {\n        // Rebuild form.sections to MATCH the filtered source structure (same length,\n        // same order). resolveSectionValue/allProductsInSectionSelected use the\n        // rendering's sectionIndex to look up form.sections[sectionIndex]; if form's\n        // section list differs from rendering's filtered list, that lookup hits the\n        // wrong section. Using mergedSectionInitalValues-equivalent logic ensures\n        // form and rendering iterate the same list with matching indices.\n        const filteredSource = productSourceSections.filter((s: any) =>\n          (s.get('products')?.size && s.get('products').some((p: any) => p.get('id') !== -1)) || s.get('note'),\n        );\n        // Preserve fields/total/etc from existing form sections by sectionId\n        const existingBySectionId: Record<string, any> = {};\n        formSections.forEach((fs: any) => {\n          const id = fs.get('sectionId');\n          if (id) { existingBySectionId[id] = fs; }\n        });\n        const newSections = filteredSource.map((sourceSection: any, sectionIndex: number) => {\n          const sectionId = sourceSection.get('sectionId');\n          const products = (sourceSection.get('products') || List()).filter((p: any) => p.get('id') !== -1);\n          const productIds = products.map((product: any, productIndex: number) =>\n            product.get('quoteProductId') + `\\u{1F608}${sectionIndex}-${productIndex}\\u{1F608}`,\n          );\n          const overrideSelected = Boolean(productIds.size || (!products.size && sourceSection.get('note')));\n          const existing = existingBySectionId[sectionId];\n          if (existing) {\n            return existing\n              .set('products', productIds)\n              .set('overrideSelected', overrideSelected);\n          }\n          // No existing form section — derive fields/total from sectionTemplate\n          const fields = sourceSection.getIn(['sectionTemplate', 'fieldsData'], List())\n            .filter((f: any) => f.get('printColumn'))\n            .map((f: any) => f.get('id'));\n          const total = sourceSection.getIn(['sectionTemplate', 'sectionCalculations'], List())\n            .filter((c: any) => c.get('printColumn') ?? true)\n            .map((c: any) => c.get('name'));\n          return fromJS({\n            products: productIds,\n            fields,\n            total,\n            sectionId,\n            sectionTitle: sourceSection.get('sectionTitle'),\n            note: sourceSection.get('note'),\n            overrideSelected,\n          });\n        });\n        restoreValues = restoreValues.set('sections', newSections);\n      }\n    }\n\n    dispatch(initialize(QUOTE_PRINT_FORM_NAME, restoreValues));\n\n    // Restore global fields after initialize\n    if (currentQdv?.size) {\n      dispatch(change(QUOTE_PRINT_FORM_NAME, 'quoteDiscountVariations', currentQdv));\n    }\n    if (currentQwd) {\n      dispatch(change(QUOTE_PRINT_FORM_NAME, 'quoteWithoutDiscount', currentQwd));\n    }\n\n    // Shop Drawing / O&M: saved values take priority; otherwise build per-customer defaults\n    // so the product list reflects the target customer's visibility (not the first customer's\n    // or quote-level selectedCustomer's). Skipping initialize would leave a stale form from\n    // the previous active customer, since Redux Form state persists across switches.\n    const perCustomerSections = buildShopDrawingSections(getVisibleFirmProductIdsForCustomer(customerId));\n    const sdFormExists = !!reduxStore.getState().form?.[SHOP_DRAWING_FORM_NAME];\n    if (saved?.shopDrawing) {\n      dispatch(initialize(SHOP_DRAWING_FORM_NAME, saved.shopDrawing));\n      dispatch(change(SHOP_DRAWING_FORM_NAME, 'customer', customerId));\n    } else if (sdFormExists) {\n      const base = defaults?.shopDrawing || shopDrawingInitialValues;\n      const sdDefaults = base.withMutations((ctx: any) => {\n        ctx.set('sections', perCustomerSections);\n        ctx.set('customer', customerId);\n      });\n      dispatch(initialize(SHOP_DRAWING_FORM_NAME, sdDefaults));\n    }\n    const omFormExists = !!reduxStore.getState().form?.[OM_FORM_NAME];\n    if (saved?.oandm) {\n      dispatch(initialize(OM_FORM_NAME, saved.oandm));\n      dispatch(change(OM_FORM_NAME, 'customer', customerId));\n    } else if (omFormExists) {\n      const baseOM = defaults?.oandm || shopDrawingInitialValues;\n      const omDefaults = baseOM.withMutations((ctx: any) => {\n        ctx.set('sections', perCustomerSections);\n        ctx.set('customer', customerId);\n      });\n      dispatch(initialize(OM_FORM_NAME, omDefaults));\n    }\n  }, [customerPrintFormValues, dispatch, getFormValuesFromStore, customers, buildShopDrawingSections, getVisibleFirmProductIdsForCustomer, shopDrawingInitialValues, reduxStore]);\n\n  // Handle customer click — save current, switch, restore new\n  const handleCustomerClick = React.useCallback((customerId: number) => {\n    if (customerId === activeCustomerId) { return; }\n    saveCurrentCustomerFormValues();\n    isRestoringRef.current = true;\n    setActiveCustomerId(customerId);\n    // Restore after a tick to let React re-render\n    setTimeout(() => {\n      restoreCustomerFormValues(customerId);\n      // Allow auto-save again after restore settles\n      setTimeout(() => { isRestoringRef.current = false; }, 50);\n    }, 0);\n  }, [activeCustomerId, saveCurrentCustomerFormValues, restoreCustomerFormValues]);\n\n  // Apply current customer's print form values and settings to all other selected customers.\n  //   formKey 'quotePrint' (default), 'shopDrawing', or 'oandm' — which form to copy from.\n  //   fieldNames — when provided, ONLY those fields get copied (section-scoped Apply To All).\n  //   - quotePrint scoped: copies named quotePrint fields only (e.g. 'logoAlignment').\n  //   - shopDrawing/oandm scoped: copies named fields in that form only.\n  // When fieldNames omitted, copies the entire form + attachment settings (full Apply to All).\n  const handleApplyToAll = React.useCallback((\n    fieldNames?: string[],\n    formKey: 'quotePrint' | 'shopDrawing' | 'oandm' = 'quotePrint',\n  ) => {\n    if (!activeCustomerId) { return; }\n    // Save current form values first\n    saveCurrentCustomerFormValues();\n    const { quotePrint: currentQuotePrint, shopDrawing: currentShopDrawing, oandm: currentOM } = getFormValuesFromStore();\n    const currentSettings = customerSettings[activeCustomerId] || defaultCustomerSettings;\n    const isScoped = Array.isArray(fieldNames) && fieldNames.length > 0;\n\n    const allCustomerIds = customers.map((c: any) => c.get('id')).toJS();\n    const updatedSettings = { ...customerSettings };\n    const updatedFormValues = { ...customerPrintFormValues };\n\n    const overlayFields = (target: any, source: any, fields: string[]) => {\n      if (!source) { return target; }\n      const base = target || source;\n      // Split into top-level field names and per-section sub-field paths ('sections.X')\n      const topLevelFields: string[] = [];\n      const perSectionSubFields: string[] = [];\n      fields.forEach((f) => {\n        if (f.startsWith('sections.')) {\n          perSectionSubFields.push(f.slice('sections.'.length));\n        } else {\n          topLevelFields.push(f);\n        }\n      });\n      return base.withMutations((ctx: any) => {\n        // Top-level: copy field value directly from source\n        topLevelFields.forEach((fieldName) => {\n          const val = source.get(fieldName);\n          if (val !== undefined) {\n            ctx.set(fieldName, val);\n          }\n        });\n        // Per-section sub-fields: match sections by sectionId, copy only the named\n        // sub-fields (preserves the target's other section state like products).\n        if (perSectionSubFields.length > 0) {\n          const sourceSections = source.get('sections');\n          const targetSections = ctx.get('sections');\n          if (sourceSections && targetSections && sourceSections.forEach && targetSections.map) {\n            const sourceBySectionId: Record<string, any> = {};\n            sourceSections.forEach((s: any) => {\n              const id = s.get?.('sectionId');\n              if (id) { sourceBySectionId[id] = s; }\n            });\n            const updatedSections = targetSections.map((targetSection: any) => {\n              const sectionId = targetSection.get?.('sectionId');\n              const sourceSection = sectionId ? sourceBySectionId[sectionId] : null;\n              if (!sourceSection) { return targetSection; }\n              return targetSection.withMutations((sCtx: any) => {\n                perSectionSubFields.forEach((subField) => {\n                  const val = sourceSection.get(subField);\n                  if (val !== undefined) {\n                    sCtx.set(subField, val);\n                  }\n                });\n              });\n            });\n            ctx.set('sections', updatedSections);\n          }\n        }\n      });\n    };\n\n    // \"Choose section columns\" Apply to All should skip target customers whose\n    // \"Apply Customer Discount\" is ON — their column layout is tied to discounted\n    // data and shouldn't be overwritten by the active (non-discounted) customer.\n    const isSectionColumnsApply = isScoped && formKey === 'quotePrint'\n      && Array.isArray(fieldNames) && fieldNames.length === 1 && fieldNames[0] === 'sections.fields';\n    const getTargetCustomerDiscount = (id: number) => {\n      const saved = updatedFormValues[id]?.quotePrint?.get('discount');\n      if (saved !== undefined) { return Boolean(saved); }\n      return quote?.get('selectedCustomer') === id;\n    };\n\n    allCustomerIds.forEach((id: number) => {\n      if (id === activeCustomerId) { return; }\n      // Skip target customers with discount=ON for section-columns scoped apply.\n      if (isSectionColumnsApply && getTargetCustomerDiscount(id)) { return; }\n      // Only copy attachment/settings on full (unscoped) apply.\n      if (!isScoped) {\n        updatedSettings[id] = { ...currentSettings };\n      }\n      const targetSections = buildShopDrawingSections(getVisibleFirmProductIdsForCustomer(id));\n      const existing = updatedFormValues[id] || {};\n\n      // quotePrint\n      let patchedQuotePrint;\n      if (isScoped && formKey === 'quotePrint') {\n        patchedQuotePrint = overlayFields(existing.quotePrint, currentQuotePrint, fieldNames!);\n      } else if (isScoped) {\n        // Scoped to shopDrawing/oandm: don't touch quotePrint\n        patchedQuotePrint = existing.quotePrint;\n      } else {\n        patchedQuotePrint = currentQuotePrint\n          ? currentQuotePrint.set('customers', fromJS([id]))\n          : existing.quotePrint;\n      }\n\n      // shopDrawing\n      let patchedShopDrawing;\n      if (isScoped && formKey === 'shopDrawing') {\n        patchedShopDrawing = overlayFields(existing.shopDrawing, currentShopDrawing, fieldNames!);\n      } else if (isScoped) {\n        patchedShopDrawing = existing.shopDrawing;\n      } else if (currentShopDrawing) {\n        patchedShopDrawing = currentShopDrawing.withMutations((ctx: any) => {\n          ctx.set('customer', id);\n          ctx.set('sections', targetSections);\n        });\n      } else {\n        patchedShopDrawing = existing.shopDrawing;\n      }\n\n      // oandm\n      let patchedOM;\n      if (isScoped && formKey === 'oandm') {\n        patchedOM = overlayFields(existing.oandm, currentOM, fieldNames!);\n      } else if (isScoped) {\n        patchedOM = existing.oandm;\n      } else if (currentOM) {\n        patchedOM = currentOM.withMutations((ctx: any) => {\n          ctx.set('customer', id);\n          ctx.set('sections', targetSections);\n        });\n      } else {\n        patchedOM = existing.oandm;\n      }\n\n      updatedFormValues[id] = {\n        quotePrint: patchedQuotePrint,\n        shopDrawing: patchedShopDrawing,\n        oandm: patchedOM,\n      };\n    });\n    setCustomerSettings(updatedSettings);\n    setCustomerPrintFormValues(updatedFormValues);\n    if (!isScoped) {\n      const activeError = configErrorByCustomer[activeCustomerId] || false;\n      const updatedErrors = { ...configErrorByCustomer };\n      allCustomerIds.forEach((id: number) => {\n        if (id === activeCustomerId) { return; }\n        updatedErrors[id] = activeError;\n      });\n      setConfigErrorByCustomer(updatedErrors);\n    }\n  }, [activeCustomerId, customers, customerSettings, customerPrintFormValues, configErrorByCustomer, saveCurrentCustomerFormValues, getFormValuesFromStore, buildShopDrawingSections, getVisibleFirmProductIdsForCustomer, quote]);\n\n  const selectAllAttachments = ENABLED_ATTACHMENT_TYPES.every(key => activeSettings.attachmentTypes[key]);\n\n  const handleSelectAllCustomers = (checked: boolean) => {\n    setSelectAllCustomers(checked);\n    if (checked) {\n      setSelectedCustomerIds(customers.map((c: any) => c.get('id')).toJS());\n    } else {\n      setSelectedCustomerIds([]);\n    }\n  };\n\n  const handleCustomerToggle = (customerId: number) => {\n    setSelectedCustomerIds(prev => {\n      const updated = prev.includes(customerId)\n        ? prev.filter(id => id !== customerId)\n        : [...prev, customerId];\n      setSelectAllCustomers(updated.length === customers.size);\n      // If checking a new customer, make it active\n      if (updated.includes(customerId) && customerId !== activeCustomerId) {\n        saveCurrentCustomerFormValues();\n        isRestoringRef.current = true;\n        setActiveCustomerId(customerId);\n        setTimeout(() => {\n          restoreCustomerFormValues(customerId);\n          setTimeout(() => { isRestoringRef.current = false; }, 50);\n        }, 0);\n      }\n      return updated;\n    });\n  };\n\n  const handleSelectAllAttachments = (checked: boolean) => {\n    updateActiveSettings(prev => ({\n      ...prev,\n      attachmentTypes: {\n        ...prev.attachmentTypes,\n        ...ENABLED_ATTACHMENT_TYPES.reduce((acc, key) => { acc[key] = checked; return acc; }, {}),\n      },\n    }));\n  };\n\n  const handleAttachmentToggle = (key: string, checked: boolean) => {\n    updateActiveSettings(prev => ({\n      ...prev,\n      attachmentTypes: { ...prev.attachmentTypes, [key]: checked },\n    }));\n  };\n\n\n  return (\n    <>\n      {/* Title */}\n      <div className={classes.dialogTitle}>\n        <Typography className={classes.titleText}>\n          {t('quoteDetail.quoteEmailPageTitle')}\n        </Typography>\n        <IconButton onClick={onClose} size='small'>\n          <CloseIcon />\n        </IconButton>\n      </div>\n\n      {/* Content */}\n      <DialogContent className={classes.content}>\n        <Grid container={true}>\n          {/* Left Panel - Customer Selection */}\n          <Grid item={true} xs={2} className={classes.leftPanel}>\n            <FormControlLabel\n              control={\n                <Checkbox\n                  color='primary'\n                  checked={selectAllCustomers}\n                  onChange={(e) => handleSelectAllCustomers(e.target.checked)}\n                />\n              }\n              label={t('reportPage.allTypeRadioLabel')}\n            />\n            {customers.map((customer: any, index: number) => {\n              const { customerId, name, email, organization, address } = QuoteEmailUtil.getCustomerDisplayInfo(customer);\n\n              return (\n                <div\n                  key={index}\n                  className={`${classes.customerRow} ${activeCustomerId === customerId ? classes.customerRowActive : classes.customerRowInactive}`}\n                  onClick={() => handleCustomerClick(customerId)}\n                >\n                  <Checkbox\n                    color='primary'\n                    checked={selectedCustomerIds.includes(customerId)}\n                    onChange={() => handleCustomerToggle(customerId)}\n                    onClick={(e) => e.stopPropagation()}\n                    className={classes.customerCheckbox}\n                  />\n                  <div className={classes.customerItem}>\n                    {name && <Typography className={classes.customerName}>{name}</Typography>}\n                    {email && <Typography className={classes.customerEmail}>{email}</Typography>}\n                    {organization && <Typography className={classes.customerOrg}>{organization}</Typography>}\n                    {address && <Typography className={classes.customerAddress}>{address}</Typography>}\n                  </div>\n                </div>\n              );\n            }).toArray()}\n          </Grid>\n\n          {/* Middle Panel - Attachment Types */}\n          <Grid item={true} className={classes.middlePanel}>\n            <FormControlLabel\n              control={\n                <Checkbox\n                  color='primary'\n                  checked={selectAllAttachments}\n                  onChange={(e) => handleSelectAllAttachments(e.target.checked)}\n                />\n              }\n              label={t('reportPage.allTypeRadioLabel')}\n            />\n            {[\n              { key: 'quote', label: t('quoteList.actionMenu.downloadMenu.quote') },\n              { key: 'shopDrawing', label: t('quoteList.actionMenu.downloadMenu.shopDrawing') },\n              ...(hasOMShopDrawingAcl ? [{ key: 'oandm', label: t('quoteList.actionMenu.downloadMenu.o&m') }] : []),\n              { key: 'excelCsv', label: t('quoteList.actionMenu.downloadMenu.excelCsv') },\n            ].filter(item => ENABLED_ATTACHMENT_TYPES.includes(item.key)).map(item => (\n              <div\n                key={item.key}\n                className={classes.attachmentTypeRow}\n                style={{\n                  backgroundColor: activeAttachmentType === item.key ? '#FEF2E1' : 'transparent',\n                  borderRight: activeAttachmentType === item.key ? '4px solid #E76C17' : '4px solid transparent',\n                }}\n                onClick={() => setActiveAttachmentType(item.key)}\n              >\n                <Checkbox\n                  color='primary'\n                  checked={activeSettings.attachmentTypes[item.key]}\n                  onChange={(e) => handleAttachmentToggle(item.key, e.target.checked)}\n                  onClick={(e) => e.stopPropagation()}\n                />\n                <Typography className={classes.attachmentTypeLabel}>{item.label}</Typography>\n              </div>\n            ))}\n          </Grid>\n\n          {/* Right Panel - Print Settings */}\n          <Grid\n            item={true}\n            xs={true}\n            className={classes.rightPanel}\n            innerRef={(el: HTMLElement) => {\n              if (el && !(el as any)._scrollLeftLockAttached) {\n                (el as any)._scrollLeftLockAttached = true;\n                // Force scrollLeft to 0 whenever something tries to scroll horizontally.\n                // The OS file picker (triggered by clicking a hidden file input via label)\n                // scrolls the rightPanel programmatically when it closes, even with\n                // overflowX:'hidden'. This listener immediately resets it.\n                el.addEventListener('scroll', () => {\n                  if (el.scrollLeft !== 0) {\n                    el.scrollLeft = 0;\n                  }\n                });\n              }\n            }}\n          >\n            <Typography variant='body2' className={classes.printSettingsHint}>\n              {t('quoteDetail.modifyPrintSettings')}\n            </Typography>\n            {/* === Quote Settings === */}\n            <div style={{ display: activeAttachmentType === 'quote' ? 'block' : 'none' }}>\n              <MemoryRouter initialEntries={[`/preview/${quoteId}/quote`]}>\n                <Route path='/preview/:id/:type'>\n                  <QuotePrint\n                    quote={quote}\n                    compact={true}\n                    activeCustomerId={activeCustomerId}\n                    onApplyToAll={selectedCustomerIds.length > 1 ? handleApplyToAll : undefined}\n                    getConfigSelectionErrorFromPreview={(error) => {\n                      if (activeCustomerId) {\n                        setConfigErrorByCustomer(prev => ({ ...prev, [activeCustomerId]: error }));\n                      }\n                    }}\n                    onDownload={() => { /* handled by modal NEXT button */ }}\n                  />\n                </Route>\n              </MemoryRouter>\n            </div>\n\n            {/* Loading spinner for lazy-mounted forms */}\n            {mountingAttachmentType && (\n              <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: 200 }}>\n                <CircularProgress size={32} style={{ color: '#E67E22' }} />\n              </div>\n            )}\n\n            {/* === Shop Drawing Settings — lazy mount, then keep mounted === */}\n            {mountedAttachmentTypes.shopDrawing && (\n            <div style={{ display: activeAttachmentType === 'shopDrawing' ? 'block' : 'none' }}>\n              <MemoryRouter initialEntries={[`/preview/${quoteId}/shopDrawing`]}>\n                <Route path='/preview/:id/:type'>\n                  <Grid container={true} justify='center'>\n                    <ShopDrawingPrint\n                      compact={true}\n                      activeCustomerId={activeCustomerId}\n                      visibleFirmProductIds={activeCustomerVisibleFirmProductIds}\n                      onApplyToAll={selectedCustomerIds.length > 1 ? (fields?: string[]) => handleApplyToAll(fields, 'shopDrawing') : undefined}\n                      initialValues={shopDrawingInitialValuesForSD}\n                      quote={quote}\n                      getConfigSelectionErrorFromPreview={() => { /* noop */ }}\n                      selectedFileSizeByMediaTypeInMB={{}}\n                      setSelectFileSizeByMediaTypeInMB={() => { /* noop */ }}\n                    />\n                  </Grid>\n                </Route>\n              </MemoryRouter>\n            </div>\n            )}\n\n            {/* === O&M Settings — lazy mount, then keep mounted === */}\n            {mountedAttachmentTypes.oandm && (\n            <div style={{ display: activeAttachmentType === 'oandm' ? 'block' : 'none' }}>\n              <MemoryRouter initialEntries={[`/preview/${quoteId}/oandm`]}>\n                <Route path='/preview/:id/:type'>\n                  <Grid container={true} justify='center'>\n                    <ShopDrawingPrint\n                      compact={true}\n                      activeCustomerId={activeCustomerId}\n                      visibleFirmProductIds={activeCustomerVisibleFirmProductIds}\n                      form={OM_FORM_NAME}\n                      onApplyToAll={selectedCustomerIds.length > 1 ? (fields?: string[]) => handleApplyToAll(fields, 'oandm') : undefined}\n                      initialValues={shopDrawingInitialValuesForOM}\n                      quote={quote}\n                      getConfigSelectionErrorFromPreview={() => { /* noop */ }}\n                      selectedFileSizeByMediaTypeInMB={{}}\n                      setSelectFileSizeByMediaTypeInMB={() => { /* noop */ }}\n                    />\n                  </Grid>\n                </Route>\n              </MemoryRouter>\n            </div>\n            )}\n\n            {/* === Excel / CSV Settings (hidden — add 'excelCsv' to ENABLED_ATTACHMENT_TYPES to re-enable) === */}\n            {ENABLED_ATTACHMENT_TYPES.includes('excelCsv') && (\n              <div style={{ display: activeAttachmentType === 'excelCsv' ? 'block' : 'none' }}>\n                <div className={classes.settingsSection}>\n                  <Typography variant='body2' className={classes.excelCsvText}>\n                    {t('quoteDetail.excelCsvNoSettings')}\n                  </Typography>\n                </div>\n              </div>\n            )}\n          </Grid>\n        </Grid>\n      </DialogContent>\n\n      {/* Actions */}\n      <DialogActions className={classes.dialogActions}>\n        <Button className={classes.cancelButton} onClick={onClose}>\n          {t('formButtons.cancel')}\n        </Button>\n        <Button\n          className={classes.nextButton}\n          onClick={() => onNext()}\n          disabled={\n            selectedCustomerIds.length === 0 ||\n            !selectedCustomerIds.some(id => {\n              const settings = customerSettings[id] || defaultCustomerSettings;\n              return Object.values(settings.attachmentTypes).some(v => v);\n            }) ||\n            selectedCustomerIds.some(id => {\n              const settings = customerSettings[id] || defaultCustomerSettings;\n              return settings.attachmentTypes.quote && configErrorByCustomer[id];\n            })\n          }\n        >\n          {t('formButtons.next')}\n        </Button>\n      </DialogActions>\n    </>\n  );\n};\n\nexport default withStyles(styles)(SelectCustomersStep);\n","export default __webpack_public_path__ + \"static/media/DownloadLoading.e1862c99.gif\";","export default __webpack_public_path__ + \"static/media/DownloadReady.65441a6a.svg\";","import * as React from 'react';\nimport {\n  DialogContent,\n  DialogActions,\n  Button,\n  Typography,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport downloadLoadingImage from '../../images/printPage/DownloadLoading.gif';\nimport downloadReadyImage from '../../images/printPage/DownloadReady.svg';\nimport { useTranslation } from 'react-i18next';\nimport { useQuoteEmail } from './QuoteEmailContext';\nimport QuoteEmailUtil from './QuoteEmailUtil';\n\nexport type JobStatus = 'pending' | 'complete' | 'failed';\n\nexport interface IPrintJobInfo {\n  customerId: number;\n  attachmentType: string;\n  attachmentLabel: string;\n  status: JobStatus;\n  fileId?: string;\n  filename?: string;\n  printType?: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  pendingContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: '60px 24px',\n    minHeight: 400,\n  },\n  pendingImage: {\n    width: 200,\n    marginBottom: 24,\n  },\n  pendingText: {\n    color: '#666',\n    marginBottom: 16,\n  },\n  failureContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    padding: '40px 24px',\n    minHeight: 400,\n  },\n  failureImage: {\n    width: 100,\n    marginBottom: 24,\n  },\n  failureWarningText: {\n    color: '#666',\n    marginBottom: 24,\n    textAlign: 'center',\n  },\n  warningIcon: {\n    color: '#E67E22',\n    marginRight: 4,\n  },\n  failedCustomerCard: {\n    border: '1px solid #e0e0e0',\n    borderRadius: 4,\n    padding: 16,\n    marginBottom: 12,\n    width: '100%',\n    maxWidth: 400,\n  },\n  failedCustomerName: {\n    color: '#E67E22',\n    fontWeight: 500,\n    marginBottom: 8,\n  },\n  failedJobRow: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 4,\n  },\n  failedJobIcon: {\n    color: '#c0392b',\n    marginRight: 8,\n    fontWeight: 'bold',\n  },\n  continuePromptContainer: {\n    backgroundColor: '#f0faf0',\n    borderRadius: 4,\n    padding: 16,\n    marginTop: 12,\n    textAlign: 'center',\n    maxWidth: 400,\n    width: '100%',\n  },\n  continuePromptText: {\n    color: '#27ae60',\n  },\n  completeContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    padding: '40px 24px',\n    minHeight: 400,\n  },\n  completeImage: {\n    width: 100,\n    marginBottom: 24,\n  },\n  completeText: {\n    color: '#666',\n    marginBottom: 24,\n  },\n  completedJobRow: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 8,\n  },\n  completedJobIcon: {\n    color: '#27ae60',\n    marginRight: 8,\n    fontWeight: 'bold',\n  },\n  completedJobLabel: {\n    marginRight: 8,\n  },\n  downloadLink: {\n    color: '#E67E22',\n    fontSize: 12,\n  },\n  dialogActions: {\n    padding: '16px 24px',\n    justifyContent: 'flex-end',\n  },\n  backButton: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '8px 24px',\n    textTransform: 'none' as const,\n    marginRight: 8,\n  },\n  nextButton: {\n    color: '#fff',\n    borderRadius: 20,\n    padding: '8px 32px',\n    textTransform: 'none' as const,\n  },\n});\n\nconst DownloadStep: React.FC<WithStyles<typeof styles>> = ({ classes }) => {\n  const { t } = useTranslation('translations');\n  const { setModalStep, customers, jobs, setExpectedJobs } = useQuoteEmail();\n\n  const failedJobs = jobs?.filter(j => j.status === 'failed') || [];\n  const completedJobs = jobs?.filter(j => j.status === 'complete') || [];\n  const allComplete = jobs?.length > 0 && jobs.every(j => j.status === 'complete' || j.status === 'failed');\n  const hasFailures = failedJobs.length > 0;\n  const isPending = !allComplete;\n\n  React.useEffect(() => {\n    if (allComplete && !hasFailures) {\n      setModalStep('email');\n    }\n  }, [allComplete, hasFailures, setModalStep]);\n\n  // Group failed jobs by customer\n  const failedByCustomer: { [customerId: number]: IPrintJobInfo[] } = {};\n  failedJobs.forEach(job => {\n    if (!failedByCustomer[job.customerId]) { failedByCustomer[job.customerId] = []; }\n    failedByCustomer[job.customerId].push(job);\n  });\n\n  const getCustomerName = (customerId: number) => {\n    const customer = customers?.find((c: any) => c.get('id') === customerId);\n    if (!customer) { return ''; }\n    const { name, organization } = QuoteEmailUtil.getCustomerDisplayInfo(customer);\n    return name || organization || '';\n  };\n\n  return (\n    <>\n      <DialogContent>\n        {isPending ? (\n          <div className={classes.pendingContainer}>\n            <img src={downloadLoadingImage} className={classes.pendingImage} />\n            <Typography variant='h6' className={classes.pendingText}>\n              {t('quotePrint.pendingDownloadInfo')}\n            </Typography>\n            <CircularProgress color='primary' />\n          </div>\n        ) : hasFailures ? (\n          <div className={classes.failureContainer}>\n            <img src={downloadReadyImage} className={classes.failureImage} />\n            <Typography variant='body1' className={classes.failureWarningText}>\n              <span className={classes.warningIcon}>&#9888;</span>\n              {t('quoteDetail.emailFailedWarning')}\n            </Typography>\n\n            {Object.entries(failedByCustomer).map(([customerIdStr, customerJobs]) => (\n              <div\n                key={customerIdStr}\n                className={classes.failedCustomerCard}\n              >\n                <Typography className={classes.failedCustomerName}>\n                  {getCustomerName(Number(customerIdStr))}\n                </Typography>\n                {customerJobs.map((job, idx) => (\n                  <div key={idx} className={classes.failedJobRow}>\n                    <span className={classes.failedJobIcon}>&#10005;</span>\n                    <Typography variant='body2'>{job.attachmentLabel}</Typography>\n                  </div>\n                ))}\n              </div>\n            ))}\n\n            <div className={classes.continuePromptContainer}>\n              <Typography variant='body2' className={classes.continuePromptText}>\n                {t('quoteDetail.emailContinuePrompt')}\n              </Typography>\n            </div>\n          </div>\n        ) : (\n          <div className={classes.completeContainer}>\n            <img src={downloadReadyImage} className={classes.completeImage} />\n            <Typography variant='h6' className={classes.completeText}>\n              {t('quotePrint.readyDownloadInfo')}\n            </Typography>\n            {completedJobs.map((job, idx) => (\n              <div key={idx} className={classes.completedJobRow}>\n                <span className={classes.completedJobIcon}>&#10003;</span>\n                <Typography variant='body2' className={classes.completedJobLabel}>\n                  {getCustomerName(job.customerId)} — {job.attachmentLabel}\n                </Typography>\n                {job.fileId && (\n                  <a\n                    href={`/file/${job.fileId}`}\n                    target='_blank'\n                    rel='noopener noreferrer'\n                    className={classes.downloadLink}\n                  >\n                    {job.filename || 'Download'}\n                  </a>\n                )}\n              </div>\n            ))}\n          </div>\n        )}\n      </DialogContent>\n      <DialogActions className={classes.dialogActions}>\n        <Button\n          className={classes.backButton}\n          onClick={() => { setExpectedJobs([]); setModalStep('settings'); }}\n        >\n          {t('formButtons.back')}\n        </Button>\n        <Button\n          className={classes.nextButton}\n          style={{\n            backgroundColor: isPending ? '#ccc' : '#E67E22',\n          }}\n          disabled={isPending}\n          onClick={() => setModalStep('email')}\n        >\n          {t('formButtons.next')}\n        </Button>\n      </DialogActions>\n    </>\n  );\n};\n\nexport default withStyles(styles)(DownloadStep);\n","import ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\nexport interface ISendEmailAttachment {\n  fileId: string;\n}\n\nexport interface ISendEmailParams {\n  to: string;\n  subject: string;\n  body?: string;\n  from?: string;\n  cc?: string;\n  bcc?: string;\n  attachments?: ISendEmailAttachment[];\n}\n\nconst NotificationServiceApi = {\n  async sendEmail(env: any, appId: string, params: ISendEmailParams): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post('/msnotification/notification.sendEmail', params);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error sending email:', error);\n      throw error;\n    }\n  },\n};\n\nexport default NotificationServiceApi;\n","import * as React from 'react';\nimport {\n  Dialog,\n  DialogContent,\n  DialogActions,\n  Button,\n  Grid,\n  Typography,\n  Checkbox,\n  FormControlLabel,\n  TextField,\n  IconButton,\n  Chip,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport PictureAsPdfIcon from '@material-ui/icons/PictureAsPdf';\nimport InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';\nimport ImageIcon from '@material-ui/icons/Image';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport GridOnIcon from '@material-ui/icons/GridOn';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { makeSelectIdentityObject, makeSelectEnv, makeSelectAppId, makeSelectUserHasFeatEmailImprovements } from '../../modules/AtsModule/selectors';\nimport { makeSelectQuote } from '../../modules/QuoteModule/selectors';\nimport { useQuoteEmail } from './QuoteEmailContext';\nimport QuoteEmailUtil from './QuoteEmailUtil';\nimport FileDropZone from '../FileUpload/FileDropZone';\nimport NotificationServiceApi from '../../modules/NotificationModule/NotificationServiceApi';\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: '0 24px 24px',\n  },\n  dialogTitle: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    padding: '16px 24px',\n  },\n  titleText: {\n    fontSize: 18,\n    fontWeight: 500,\n  },\n  leftPanel: {\n    borderRight: '1px solid #e0e0e0',\n    paddingRight: 16,\n    maxHeight: 500,\n    overflowY: 'auto' as const,\n  },\n  rightPanel: {\n    paddingLeft: 16,\n  },\n  customerItem: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    padding: '8px 0',\n    borderBottom: '1px solid #f0f0f0',\n  },\n  customerName: {\n    color: '#E67E22',\n    fontWeight: 500,\n    fontSize: 14,\n  },\n  customerEmail: {\n    fontSize: 12,\n    color: '#666',\n    textDecoration: 'underline',\n  },\n  customerOrg: {\n    fontSize: 12,\n    color: '#666',\n  },\n  customerAddress: {\n    fontSize: 12,\n    color: '#666',\n  },\n  customerWarning: {\n    fontSize: 11,\n    color: '#E67E22',\n    display: 'flex',\n    alignItems: 'center',\n    marginTop: 4,\n  },\n  fieldRow: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 12,\n  },\n  fieldLabel: {\n    width: 50,\n    fontWeight: 500,\n    fontSize: 14,\n    color: '#666',\n  },\n  fieldInput: {\n    flex: 1,\n  },\n  chip: {\n    margin: '0 4px 4px 0',\n    backgroundColor: '#e0e0e0',\n    color: '#333',\n  },\n  chipDeleteIcon: {\n    color: '#666',\n  },\n  subjectField: {\n    marginBottom: 16,\n  },\n  messageField: {\n    marginBottom: 16,\n  },\n  linksContainer: {\n    marginBottom: 16,\n  },\n  link: {\n    color: '#2980b9',\n    textDecoration: 'underline',\n    cursor: 'pointer',\n    marginRight: 8,\n  },\n  attachmentContainer: {\n    border: '1px solid #e0e0e0',\n    borderRadius: 4,\n    padding: 12,\n    marginBottom: 16,\n  },\n  attachmentItem: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 4,\n  },\n  attachmentIcon: {\n    color: '#c0392b',\n    marginRight: 8,\n    fontSize: 20,\n  },\n  attachmentChip: {\n    margin: '0 4px 4px 0',\n    borderRadius: 20,\n    height: 32,\n  },\n  chipInputContainer: {\n    display: 'flex',\n    flexWrap: 'wrap' as const,\n    alignItems: 'center',\n    border: '1px solid #e0e0e0',\n    borderRadius: 4,\n    padding: '4px 8px',\n    minHeight: 36,\n  },\n  chipInvalidEmail: {\n    backgroundColor: '#ffebee',\n    border: '1px solid #f44336',\n    color: '#f44336',\n  },\n  chipInputField: {\n    border: 'none',\n    outline: 'none',\n    flex: 1,\n    minWidth: 100,\n    fontSize: 14,\n    padding: '4px 0',\n  },\n  customerRowActive: {\n    backgroundColor: '#e8f4fd',\n    borderLeft: '3px solid #E67E22',\n  },\n  customerRowInactive: {\n    borderLeft: '3px solid transparent',\n  },\n  customerCheckbox: {\n    paddingTop: 4,\n  },\n  warningIconSpan: {\n    marginRight: 4,\n  },\n  subjectAdornment: {\n    marginRight: 8,\n    color: '#666',\n    whiteSpace: 'nowrap' as const,\n  },\n  signatureContainer: {\n    marginBottom: 16,\n  },\n  attachmentHeaderRow: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: 8,\n  },\n  attachmentHeaderIcon: {\n    fontSize: 16,\n    marginRight: 4,\n    color: '#666',\n  },\n  attachmentHeaderText: {\n    fontWeight: 500,\n  },\n  attachmentSizeHint: {\n    fontSize: 12,\n    color: '#666',\n    marginLeft: 8,\n  },\n  attachmentSizeError: {\n    fontSize: 12,\n    color: '#f44336',\n    display: 'flex',\n    alignItems: 'center',\n    marginTop: 8,\n  },\n  attachmentSizeErrorIcon: {\n    marginRight: 4,\n  },\n  fileUploadContainer: {\n    maxWidth: 220,\n  },\n  customerRow: {\n    display: 'flex',\n    alignItems: 'flex-start',\n    cursor: 'pointer',\n    padding: '4px 0',\n  },\n  fileIconPdf: {\n    fontSize: 16,\n    color: '#c0392b',\n  },\n  fileIconImage: {\n    fontSize: 16,\n    color: '#27ae60',\n  },\n  fileIconWord: {\n    fontSize: 16,\n    color: '#2980b9',\n  },\n  fileIconExcel: {\n    fontSize: 16,\n    color: '#27ae60',\n  },\n  fileIconDefault: {\n    fontSize: 16,\n    color: '#666',\n  },\n  backButton: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '8px 24px',\n    textTransform: 'none' as const,\n    marginRight: 8,\n  },\n  nextButton: {\n    backgroundColor: '#E67E22',\n    color: '#fff',\n    borderRadius: 20,\n    padding: '8px 32px',\n    textTransform: 'none' as const,\n    '&:hover': {\n      backgroundColor: '#d35400',\n    },\n  },\n  dialogActions: {\n    padding: '16px 24px',\n    justifyContent: 'flex-end',\n  },\n  cancelButton: {\n    color: '#E67E22',\n    textTransform: 'uppercase' as const,\n  },\n  exitConfirmContent: {\n    padding: '40px 40px 16px',\n    textAlign: 'center' as const,\n  },\n  exitConfirmText: {\n    fontSize: 16,\n    color: '#333',\n  },\n  exitConfirmActions: {\n    justifyContent: 'center',\n    padding: '8px 24px 24px',\n  },\n  exitConfirmYes: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '6px 24px',\n    textTransform: 'uppercase' as const,\n  },\n});\n\nconst ATTACHMENT_MAX_TOTAL_SIZE = 20 * 1024 * 1024; // 20 MB\n\nconst getAttachmentsTotalSize = (attachments: any[] = []): number => {\n  return attachments.reduce((sum, att) => sum + (att?.size || 0), 0);\n};\n\nconst getFileIcon = (filename: string, classes: any) => {\n  const type = QuoteEmailUtil.getFileIconType(filename);\n  switch (type) {\n    case 'pdf': return <PictureAsPdfIcon className={classes.fileIconPdf} />;\n    case 'image': return <ImageIcon className={classes.fileIconImage} />;\n    case 'word': return <DescriptionIcon className={classes.fileIconWord} />;\n    case 'excel': return <GridOnIcon className={classes.fileIconExcel} />;\n    default: return <InsertDriveFileIcon className={classes.fileIconDefault} />;\n  }\n};\n\n\nconst ChipInput = ({ label, values, onAdd, onRemove, classes }: {\n  label: string;\n  values: string[];\n  onAdd: (val: string) => void;\n  onRemove: (idx: number) => void;\n  classes: any;\n}) => {\n  const [inputValue, setInputValue] = React.useState('');\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if ((e.key === 'Enter' || e.key === 'Tab' || e.key === ',' || e.key === ' ') && inputValue.trim()) {\n      e.preventDefault();\n      onAdd(inputValue.trim());\n      setInputValue('');\n    }\n    if (e.key === 'Backspace' && !inputValue && values.length > 0) {\n      onRemove(values.length - 1);\n    }\n  };\n\n  const handleBlur = () => {\n    if (inputValue.trim()) {\n      onAdd(inputValue.trim());\n      setInputValue('');\n    }\n  };\n\n  return (\n    <div className={classes.fieldRow}>\n      <Typography className={classes.fieldLabel}>{label}</Typography>\n      <div className={`${classes.fieldInput} ${classes.chipInputContainer}`}>\n        {values.map((email, idx) => {\n          const invalid = !QuoteEmailUtil.isValidEmail(email);\n          return (\n          <Chip\n            key={idx}\n            label={email}\n            onDelete={() => onRemove(idx)}\n            className={invalid ? `${classes.chip} ${classes.chipInvalidEmail}` : classes.chip}\n            classes={{ deleteIcon: classes.chipDeleteIcon }}\n            size='small'\n          />\n          );\n        })}\n        <input\n          value={inputValue}\n          onChange={(e) => setInputValue(e.target.value)}\n          onKeyDown={handleKeyDown}\n          onBlur={handleBlur}\n          className={classes.chipInputField}\n        />\n      </div>\n    </div>\n  );\n};\n\nconst SendEmailForm: React.FC<WithStyles<typeof styles>> = ({ classes }) => {\n  const { t } = useTranslation('translations');\n  const identity = useSelector(makeSelectIdentityObject());\n  const {\n    setModalStep,\n    customers,\n    selectedCustomerIds,\n    jobs,\n    onClose,\n    quoteId,\n    emailData,\n    setEmailData,\n  } = useQuoteEmail();\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const quote = useSelector(makeSelectQuote(String(quoteId)));\n  const quoteName = quote?.get('name') || '';\n  // PT-5477 / PT-5486 (2026-08-26): master ACL gate. Legacy modal shows the\n  // hardcoded \"Regards, {userName}\" block when the ACL is OFF (s149/root\n  // parity). With the ACL ON, the block stays hidden — the configured\n  // Email Settings signature covers it server-side.\n  const hasFeatEmailImprovements = useSelector(makeSelectUserHasFeatEmailImprovements());\n\n  const userName = QuoteEmailUtil.getUserName(identity);\n  const fileBaseUrl = env?.get('ENDPOINT_FILE') || '';\n\n  const getFileUrl = (fileId: string): string => {\n    if (!fileId || !fileBaseUrl) { return ''; }\n    return `${fileBaseUrl}/file/${fileId}?X-ATS-APP-ID=${appId}`;\n  };\n\n  const [showExitConfirm, setShowExitConfirm] = React.useState(false);\n\n  const [activeEmailCustomerId, setActiveEmailCustomerId] = React.useState<number | null>(\n    selectedCustomerIds.length > 0 ? selectedCustomerIds[0] : null,\n  );\n  const [sending, setSending] = React.useState(false);\n  const [emailCheckedCustomers, setEmailCheckedCustomers] = React.useState<Record<number, boolean>>(() => {\n    const initial: Record<number, boolean> = {};\n    selectedCustomerIds.forEach(id => { initial[id] = true; });\n    return initial;\n  });\n\n  // Initialize email data for each selected customer (including newly added ones)\n  React.useEffect(() => {\n    if (selectedCustomerIds.length > 0) {\n      const missingIds = selectedCustomerIds.filter(id => !emailData[id]);\n      if (missingIds.length > 0) {\n        const data: typeof emailData = { ...emailData };\n        missingIds.forEach(customerId => {\n          const customer = customers?.find((c: any) => c.get('id') === customerId);\n          const email = customer?.get('email') || '';\n          data[customerId] = {\n            to: email ? [email] : [],\n            cc: [],\n            bcc: [],\n            subject: quoteName,\n            message: '',\n            attachments: [],\n          };\n        });\n        setEmailData(data);\n      }\n    }\n    if (selectedCustomerIds.length > 0 && !activeEmailCustomerId) {\n      setActiveEmailCustomerId(selectedCustomerIds[0]);\n    }\n  }, [selectedCustomerIds]);\n\n  const activeEmail = activeEmailCustomerId ? emailData[activeEmailCustomerId] : null;\n\n  const failedJobsForCustomer = (customerId: number) => {\n    return jobs?.filter(j => j.customerId === customerId && j.status === 'failed') || [];\n  };\n\n  const completedJobsForCustomer = (customerId: number) => {\n    return jobs?.filter(j => j.customerId === customerId && j.status === 'complete') || [];\n  };\n\n  const updateEmailField = (field: string, value: any) => {\n    if (!activeEmailCustomerId) { return; }\n    setEmailData(prev => ({\n      ...prev,\n      [activeEmailCustomerId]: { ...prev[activeEmailCustomerId], [field]: value },\n    }));\n  };\n\n  const handleRemoveChip = (field: string, index: number) => {\n    if (!activeEmail) { return; }\n    const updated = [...activeEmail[field]];\n    updated.splice(index, 1);\n    updateEmailField(field, updated);\n  };\n\n  const handleFileUpload = (fileId: string, origFileName: string = '', fileSize?: number) => {\n    if (!activeEmailCustomerId) { return; }\n    setEmailData(prev => {\n      const current = prev[activeEmailCustomerId];\n      return {\n        ...prev,\n        [activeEmailCustomerId]: {\n          ...current,\n          attachments: [...current.attachments, { attachmentId: fileId, origFileName, size: fileSize }],\n        },\n      };\n    });\n  };\n\n  const handleRemoveAttachment = (index: number) => {\n    if (!activeEmailCustomerId) { return; }\n    setEmailData(prev => {\n      const current = prev[activeEmailCustomerId];\n      const updated = [...current.attachments];\n      updated.splice(index, 1);\n      return {\n        ...prev,\n        [activeEmailCustomerId]: { ...current, attachments: updated },\n      };\n    });\n  };\n\n  const hasInvalidEmails = QuoteEmailUtil.hasInvalidEmails(selectedCustomerIds, emailData);\n\n  const activeAttachmentsTotalSize = activeEmail ? getAttachmentsTotalSize(activeEmail.attachments) : 0;\n  const activeAttachmentsExceedLimit = activeAttachmentsTotalSize > ATTACHMENT_MAX_TOTAL_SIZE;\n  const anyCheckedCustomerExceedsLimit = selectedCustomerIds.some(id => {\n    if (emailCheckedCustomers[id] === false) { return false; }\n    const data = emailData[id];\n    if (!data) { return false; }\n    return getAttachmentsTotalSize(data.attachments) > ATTACHMENT_MAX_TOTAL_SIZE;\n  });\n\n  const handleSendEmails = async () => {\n    setSending(true);\n    try {\n      const checkedIds = selectedCustomerIds.filter(id => emailCheckedCustomers[id] !== false);\n      const emailParams = QuoteEmailUtil.buildSendEmailParams(checkedIds, emailData, userName, jobs, fileBaseUrl, appId);\n      let hasError = false;\n      for (const params of emailParams) {\n        const response = await NotificationServiceApi.sendEmail(env, appId, params);\n        if (!response?.success) {\n          hasError = true;\n          break;\n        }\n      }\n      if (hasError) {\n        setModalStep('error');\n      } else {\n        setModalStep('sent');\n      }\n    } catch (error) { // tslint:disable-line\n      setModalStep('error');\n    } finally {\n      setSending(false);\n    }\n  };\n\n  const handleAddChip = (field: string, value: string) => {\n    if (!activeEmail || !value.trim()) { return; }\n    updateEmailField(field, [...activeEmail[field], value.trim()]);\n  };\n\n  return (\n    <>\n      {/* Title */}\n      <div className={classes.dialogTitle}>\n        <Typography className={classes.titleText}>\n          {t('quoteDetail.newEmailTitle')}\n        </Typography>\n        <IconButton onClick={() => setShowExitConfirm(true)} size='small'>\n          <CloseIcon />\n        </IconButton>\n      </div>\n\n      <DialogContent className={classes.container}>\n        <Grid container={true}>\n          {/* Left Panel - Customer List */}\n          <Grid item={true} xs={3} className={classes.leftPanel}>\n            <FormControlLabel\n              control={<Checkbox color='primary'\n                checked={selectedCustomerIds.every(id => emailCheckedCustomers[id] !== false)}\n                onChange={() => {\n                  const allChecked = selectedCustomerIds.every(id => emailCheckedCustomers[id] !== false);\n                  const updated: Record<number, boolean> = {};\n                  selectedCustomerIds.forEach(id => { updated[id] = !allChecked; });\n                  setEmailCheckedCustomers(updated);\n                }}\n              />}\n              label={t('reportPage.allTypeRadioLabel')}\n            />\n            {customers.map((customer: any, index: number) => {\n              const { customerId, name, email, organization, address } = QuoteEmailUtil.getCustomerDisplayInfo(customer);\n              const isSelected = selectedCustomerIds.includes(customerId);\n              if (!isSelected) { return null; }\n              const hasFailed = failedJobsForCustomer(customerId).length > 0;\n              const isChecked = hasFailed ? false : emailCheckedCustomers[customerId] !== false;\n\n              return (\n                <div\n                  key={index}\n                  className={`${classes.customerRow} ${activeEmailCustomerId === customerId ? classes.customerRowActive : classes.customerRowInactive}`}\n                  style={{ opacity: isChecked ? 1 : 0.5 }}\n                  onClick={() => setActiveEmailCustomerId(customerId)}\n                >\n                  <Checkbox\n                    color='primary'\n                    checked={isChecked}\n                    disabled={hasFailed}\n                    onChange={(e) => {\n                      e.stopPropagation();\n                      setEmailCheckedCustomers(prev => ({ ...prev, [customerId]: !prev[customerId] }));\n                    }}\n                    className={classes.customerCheckbox}\n                  />\n                  <div className={classes.customerItem}>\n                    {name && <Typography className={classes.customerName}>{name}</Typography>}\n                    {email && <Typography className={classes.customerEmail}>{email}</Typography>}\n                    {organization && <Typography className={classes.customerOrg}>{organization}</Typography>}\n                    {address && <Typography className={classes.customerAddress}>{address}</Typography>}\n                    {hasFailed && (\n                      <Typography className={classes.customerWarning}>\n                        <span className={classes.warningIconSpan}>&#9888;</span>\n                        {t('quoteDetail.noAttachmentsDueToFailure')}\n                      </Typography>\n                    )}\n                  </div>\n                </div>\n              );\n            }).toArray()}\n          </Grid>\n\n          {/* Right Panel - Email Form */}\n          <Grid item={true} xs={9} className={classes.rightPanel}>\n            {activeEmail && (\n              <>\n                {/* From */}\n                <div className={classes.fieldRow}>\n                  <Typography className={classes.fieldLabel}>{t('autoQuotationBidDetail.fromEmail')}</Typography>\n                  <Chip label={userName || t('quoteDetail.emailCurrentUser')} variant='outlined' size='small' />\n                </div>\n\n                {/* To */}\n                <ChipInput\n                  label={t('autoQuotationBidDetail.repEmail')}\n                  values={activeEmail.to}\n                  onAdd={(val) => handleAddChip('to', val)}\n                  onRemove={(idx) => handleRemoveChip('to', idx)}\n                  classes={classes}\n                />\n\n                {/* Cc */}\n                <ChipInput\n                  label={t('quoteDetail.emailCc')}\n                  values={activeEmail.cc}\n                  onAdd={(val) => handleAddChip('cc', val)}\n                  onRemove={(idx) => handleRemoveChip('cc', idx)}\n                  classes={classes}\n                />\n\n                {/* Bcc */}\n                <ChipInput\n                  label={t('quoteDetail.emailBcc')}\n                  values={activeEmail.bcc}\n                  onAdd={(val) => handleAddChip('bcc', val)}\n                  onRemove={(idx) => handleRemoveChip('bcc', idx)}\n                  classes={classes}\n                />\n\n                {/* Subject */}\n                <div className={classes.subjectField}>\n                  <TextField\n                    fullWidth={true}\n                    variant='standard'\n                    placeholder={t('quoteDetail.emailSubjectPlaceholder')}\n                    value={activeEmail.subject}\n                    onChange={(e) => updateEmailField('subject', e.target.value)}\n                    InputProps={{\n                      startAdornment: <Typography className={classes.subjectAdornment}>Subject:</Typography>,\n                    }}\n                  />\n                </div>\n\n                {/* Message */}\n                <TextField\n                  fullWidth={true}\n                  multiline={true}\n                  rows={4}\n                  variant='outlined'\n                  placeholder={t('quoteDetail.emailMessagePlaceholder')}\n                  value={activeEmail.message}\n                  onChange={(e) => updateEmailField('message', e.target.value)}\n                  className={classes.messageField}\n                />\n\n                {/* PT-5477 / PT-5486 (2026-08-26): with the master ACL OFF,\n                    render the s149/root hardcoded \"Regards, {userName}\"\n                    signature block. With the ACL ON, the block stays\n                    hidden — the user-configured Email Settings signature\n                    replaces it. */}\n                {!hasFeatEmailImprovements && (\n                  <div className={classes.signatureContainer}>\n                    <Typography variant='body2'>Regards,</Typography>\n                    <Typography variant='body2'>{userName}</Typography>\n                  </div>\n                )}\n\n                {/* Download Links */}\n                {activeEmailCustomerId && (\n                  <div className={classes.linksContainer}>\n                    {completedJobsForCustomer(activeEmailCustomerId).map((job, idx) => (\n                      <span key={idx}>\n                        {idx > 0 && ' | '}\n                        <a href={job.fileId ? getFileUrl(job.fileId) : '#'} target='_blank' rel='noopener noreferrer' className={classes.link}>[{job.attachmentLabel} Link]</a>\n                      </span>\n                    ))}\n                  </div>\n                )}\n\n\n                {/* Attachments */}\n                <div className={classes.attachmentContainer}>\n                  <div className={classes.attachmentHeaderRow}>\n                    <AttachFileIcon className={classes.attachmentHeaderIcon} />\n                    <Typography variant='body2' className={classes.attachmentHeaderText}>Attachments</Typography>\n                    <Typography variant='body2' className={classes.attachmentSizeHint}>\n                      {t('quoteDetail.attachmentMaxTotalSize')}\n                    </Typography>\n                  </div>\n                  {activeEmail?.attachments?.map((attachment, idx) => {\n                    return (\n                      <Chip\n                        key={`upload-${idx}`}\n                        label={attachment.origFileName + (attachment.size ? ` (${QuoteEmailUtil.formatFileSize(attachment.size)})` : '')}\n                        onDelete={() => handleRemoveAttachment(idx)}\n                        variant='outlined'\n                        icon={getFileIcon(attachment.origFileName, classes)}\n                        className={classes.attachmentChip}\n                      />\n                    );\n                  })}\n                  {activeAttachmentsExceedLimit && (\n                    <Typography className={classes.attachmentSizeError}>\n                      <span className={classes.attachmentSizeErrorIcon}>&#9888;</span>\n                      {t('quoteDetail.attachmentSizeExceeded')}\n                    </Typography>\n                  )}\n                </div>\n\n                {/* File Upload */}\n                <div className={classes.fileUploadContainer}>\n                  <FileDropZone\n                    suggestions={[]}\n                    showPhotoPreview={false}\n                    initialFileId={null}\n                    acceptFileTypes={[]}\n                    notifyUploadChange={handleFileUpload}\n                  />\n                </div>\n              </>\n            )}\n          </Grid>\n        </Grid>\n      </DialogContent>\n\n      {/* Actions */}\n      <DialogActions className={classes.dialogActions}>\n        <Button className={classes.backButton} onClick={() => setModalStep('settings')}>\n          {t('formButtons.back')}\n        </Button>\n        <Button className={classes.nextButton} onClick={handleSendEmails} disabled={sending || hasInvalidEmails || anyCheckedCustomerExceedsLimit}>\n          {t('formButtons.next')}\n        </Button>\n      </DialogActions>\n\n      {/* Exit Confirmation Dialog */}\n      <Dialog open={showExitConfirm} onClose={() => setShowExitConfirm(false)}>\n        <DialogContent className={classes.exitConfirmContent}>\n          <Typography className={classes.exitConfirmText}>\n            {t('quoteDetail.emailExitConfirm')}\n          </Typography>\n        </DialogContent>\n        <DialogActions className={classes.exitConfirmActions}>\n          <Button className={classes.cancelButton} onClick={() => setShowExitConfirm(false)}>\n            {t('formButtons.cancel')}\n          </Button>\n          <Button className={classes.exitConfirmYes} onClick={() => { setShowExitConfirm(false); onClose(); }}>\n            {t('formButtons.yes')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </>\n  );\n};\n\nexport default withStyles(styles)(SendEmailForm);\n","import * as React from 'react';\nimport {\n  DialogContent,\n  DialogActions,\n  Button,\n  Typography,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { useTranslation } from 'react-i18next';\nimport { useQuoteEmail } from './QuoteEmailContext';\nimport downloadReadyImage from '../../images/printPage/DownloadReady.svg';\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: '80px 24px',\n    minHeight: 400,\n  },\n  image: {\n    width: 150,\n    marginBottom: 32,\n  },\n  message: {\n    color: '#333',\n    marginBottom: 32,\n  },\n  doneButton: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '8px 32px',\n    textTransform: 'none' as const,\n  },\n});\n\nconst EmailSent: React.FC<WithStyles<typeof styles>> = ({ classes }) => {\n  const { t } = useTranslation('translations');\n  const { onClose } = useQuoteEmail();\n\n  return (\n    <>\n      <DialogContent>\n        <div className={classes.container}>\n          <img src={downloadReadyImage} className={classes.image} />\n          <Typography variant='h6' className={classes.message}>\n            {t('quoteDetail.emailSentSuccess')}\n          </Typography>\n          <Button\n            className={classes.doneButton}\n            onClick={onClose}\n          >\n            {t('quoteDetail.emailDoneButton')}\n          </Button>\n        </div>\n      </DialogContent>\n    </>\n  );\n};\n\nexport default withStyles(styles)(EmailSent);\n","import * as React from 'react';\nimport {\n  DialogContent,\n  Button,\n  Typography,\n  IconButton,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\nimport { useQuoteEmail } from './QuoteEmailContext';\nimport errorImage from '../../images/printPage/Error.svg';\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: '80px 24px',\n    minHeight: 400,\n  },\n  image: {\n    width: 150,\n    marginBottom: 32,\n  },\n  message: {\n    color: '#333',\n    marginBottom: 32,\n  },\n  tryAgainButton: {\n    border: '1px solid #E67E22',\n    color: '#E67E22',\n    borderRadius: 20,\n    padding: '8px 32px',\n    textTransform: 'none' as const,\n  },\n});\n\nconst EmailError: React.FC<WithStyles<typeof styles>> = ({ classes }) => {\n  const { t } = useTranslation('translations');\n  const { setModalStep, onClose } = useQuoteEmail();\n\n  return (\n    <>\n      <div style={{ display: 'flex', justifyContent: 'flex-end', padding: '8px 8px 0 0' }}>\n        <IconButton onClick={onClose} size='small'>\n          <CloseIcon />\n        </IconButton>\n      </div>\n      <DialogContent>\n        <div className={classes.container}>\n          <img src={errorImage} className={classes.image} />\n          <Typography variant='h6' className={classes.message}>\n            {t('quoteDetail.emailSendFailed')}\n          </Typography>\n          <Button\n            className={classes.tryAgainButton}\n            onClick={() => setModalStep('email')}\n          >\n            {t('takeoffList.tryAgain')}\n          </Button>\n        </div>\n      </DialogContent>\n    </>\n  );\n};\n\nexport default withStyles(styles)(EmailError);\n","import * as React from 'react';\nimport {\n  Dialog,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fromJS, List, Map } from 'immutable';\nimport { getFormValues } from 'redux-form/immutable';\nimport { makeSelectQuote, makeSelectPrintQuoteFiles } from '../../modules/QuoteModule/selectors';\nimport { FORM_NAME as QUOTE_PRINT_FORM_NAME } from '../QuotePrint';\nimport { FORM_NAME as SHOP_DRAWING_FORM_NAME } from '../ShopDrawingPrint';\nimport { makeSelectUserHasOMShopDrawingAcl } from '../../modules/AtsModule/selectors';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\nimport { GenericQuotePrintAction } from '../../modules/PrintModule/actions';\nimport { ResetPrintQuoteDataAction } from '../../modules/QuoteModule/actions';\nimport { UpdateAllSectionTotalAction } from '../../modules/QuoteEditModule/actions';\nimport { QUOTE_PRINT_FORMAT, QUOTE_PRINT_OPERATION_ID } from '../../constants';\nimport { defaultCustomerSettings, CustomerSettings } from './SelectCustomersStep';\nimport { IPrintJobInfo } from './DownloadStep';\nimport { QuoteEmailContext, ModalStep, IEmailData } from './QuoteEmailContext';\nimport QuoteEmailUtil from './QuoteEmailUtil';\nimport QuoteDownloadPreviewUtil from '../../containers/QuoteDownloadPreview/QuoteDownloadPreviewUtil';\nimport { checkBrandMatch } from '../../containers/Quote/utils';\nimport SelectCustomersStep from './SelectCustomersStep';\nimport DownloadStep from './DownloadStep';\nimport SendEmailForm from './SendEmailForm';\nimport EmailSent from './EmailSent';\nimport EmailError from './EmailError';\n\n// Build default ShopDrawing/O&M form values when form hasn't been lazy-mounted yet.\n// Product IDs must match ShopDrawingPrint's checkbox format: `firmProductId😈sectionIndex-productIndex😈`.\n// Products are filtered by the customer's own visibility (brand match) when provided so each\n// customer's PDF only contains their visible products — matches the config page filter.\n// `attachType` ('shopDrawing' | 'oandm') sets the file type checkbox defaults so mediaTypes\n// derived from the form contains the right single type for customers who never visited.\nconst buildDefaultShopDrawingValues = (\n  quote: any,\n  customerId: number,\n  customerVisibility?: any,\n  attachType: 'shopDrawing' | 'oandm' = 'shopDrawing',\n  visibleFirmProductIds?: Set<number> | null,\n) => {\n  const sections = quote?.get('sections')?.reduce((acc: any, section: any, sectionIndex: number) => {\n    const products = (section.get('products') || fromJS([])).filter((p: any) => {\n      if (p.get('id') === -1) { return false; }\n      // QDV-derived set is the accurate per-customer visibility. Falls back to\n      // brand visibility, then to the DB `notVisibleToSelectedCustomer` flag\n      // (which only reflects the quote's selectedCustomer and is wrong for others).\n      if (visibleFirmProductIds) {\n        return visibleFirmProductIds.has(p.get('firmProductId'));\n      }\n      if (customerVisibility) {\n        return !customerVisibility.size || Boolean(checkBrandMatch(p, customerVisibility));\n      }\n      return !Boolean(p.get('notVisibleToSelectedCustomer'));\n    });\n    return acc.push(fromJS({\n      products: products.map((p: any, productIndex: number) =>\n        p.get('firmProductId') + `😈${sectionIndex + '-' + productIndex}😈`),\n      sectionId: section.get('sectionId'),\n      sectionTitle: section.get('sectionTitle') || '',\n    }));\n  }, fromJS([])) || fromJS([]);\n  return fromJS({\n    quoteTitle: [true],\n    printDate: [true],\n    customer: customerId,\n    sections,\n    pageNumbers: [true],\n    quoteNumber: [true],\n    customerDisplayName: 'customer',\n    tableOfContents: [true],\n    titlePage: [true],\n    shopDrawing: [attachType === 'shopDrawing'],\n    operationGuide: [attachType === 'oandm'],\n    installationManual: [false],\n    warranty: [false],\n    other: [false],\n  });\n};\n\nconst attachmentTypeToConfig = {\n  quote: { printType: QUOTE_PRINT_FORMAT.quote, operationId: QUOTE_PRINT_OPERATION_ID.createQuotePrint, label: 'Quote' },\n  shopDrawing: { printType: QUOTE_PRINT_FORMAT.shopDrawing, operationId: QUOTE_PRINT_OPERATION_ID.createShopDrawing, label: 'Shop Drawing' },\n  oandm: { printType: QUOTE_PRINT_FORMAT.oandm, operationId: QUOTE_PRINT_OPERATION_ID.createOandM, label: 'O & M' },\n  excelCsv: { printType: QUOTE_PRINT_FORMAT.quoteexcel, operationId: QUOTE_PRINT_OPERATION_ID.createQuoteExcelPrint, label: 'Excel / CSV' },\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  dialogPaper: {\n    maxWidth: 1400,\n    width: '100%',\n    minHeight: 500,\n    // Prevent dialog content from scrolling horizontally when hidden file inputs\n    // (in ShopDrawingPrint table cells) regain focus after the OS file picker\n    // closes — without this, the dialog's internal scrollPaper auto-scrolls and\n    // the inner Grid ends up at negative x (off-screen left).\n    overflowX: 'hidden' as const,\n  },\n});\n\ninterface IQuoteEmailModalProps extends WithStyles<typeof styles> {\n  open: boolean;\n  onClose: () => void;\n  quoteId: number;\n}\n\nconst QuoteEmailModal: React.FC<IQuoteEmailModalProps> = ({ open, onClose, quoteId, classes }) => {\n  const dispatch = useDispatch();\n  const quote = useSelector(makeSelectQuote(String(quoteId)));\n  const hasOMShopDrawingAcl = useSelector(makeSelectUserHasOMShopDrawingAcl());\n  const project = useSelector(makeSelectProject());\n  const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n  const printQuoteFiles = useSelector(makeSelectPrintQuoteFiles());\n  const quotePrintFormValues: any = useSelector(getFormValues(QUOTE_PRINT_FORM_NAME));\n  const shopDrawingFormValues: any = useSelector(getFormValues(SHOP_DRAWING_FORM_NAME));\n  const omFormValues: any = useSelector(getFormValues('quotePrintOM'));\n\n  const customers = quote?.get('customers') || List();\n\n  // Step management\n  const [modalStep, setModalStep] = React.useState<ModalStep>('settings');\n\n  // Customer selection state\n  const [selectedCustomerIds, setSelectedCustomerIds] = React.useState<number[]>([]);\n  const [selectAllCustomers, setSelectAllCustomers] = React.useState(false);\n  const [activeCustomerId, setActiveCustomerId] = React.useState<number | null>(null);\n\n  // Per-customer settings\n  const [customerSettings, setCustomerSettings] = React.useState<Record<number, CustomerSettings>>({});\n\n  // Attachment type\n  const [activeAttachmentType, setActiveAttachmentType] = React.useState<string>('quote');\n\n  // Print jobs\n  const [expectedJobs, setExpectedJobs] = React.useState<IPrintJobInfo[]>([]);\n\n  // Email data per customer\n  const [emailData, setEmailData] = React.useState<Record<number, IEmailData>>({});\n\n  // Per-customer print form values\n  const [customerPrintFormValues, setCustomerPrintFormValues] = React.useState<Record<number, { quotePrint?: any; shopDrawing?: any; oandm?: any }>>({});\n\n  // Track settings hash to skip regeneration when unchanged\n  const [lastGeneratedSettingsHash, setLastGeneratedSettingsHash] = React.useState<string>('');\n\n  // Sequential dispatch queue: same printType jobs dispatched one at a time\n  // to avoid Redux printQuoteFiles overwrite (only stores one result per printType).\n  const [pendingDispatchQueue, setPendingDispatchQueue] = React.useState<Record<string, any[]>>({});\n\n  // Active settings derived\n  const activeSettings = (activeCustomerId && customerSettings[activeCustomerId])\n    ? customerSettings[activeCustomerId]\n    : { ...defaultCustomerSettings };\n\n  const updateActiveSettings = (updater: (prev: CustomerSettings) => CustomerSettings) => {\n    if (!activeCustomerId) { return; }\n    setCustomerSettings(prev => ({\n      ...prev,\n      [activeCustomerId]: updater(prev[activeCustomerId] || defaultCustomerSettings),\n    }));\n  };\n\n  // Track completed jobs by watching printQuoteFiles changes\n  // Each printType result overwrites the previous, so we capture results as they come in\n  const prevPrintQuoteFilesRef = React.useRef<any>(null);\n\n  // Prevent the page from scrolling horizontally while the modal is open. This guards\n  // against browser auto-scroll when hidden file inputs (in ShopDrawingPrint table cells)\n  // regain focus after the OS file picker closes — the auto-scroll shifts the dialog\n  // off-screen to the left.\n  React.useEffect(() => {\n    if (!open) { return; }\n    const prevBodyOverflowX = document.body.style.overflowX;\n    const prevHtmlOverflowX = document.documentElement.style.overflowX;\n    document.body.style.overflowX = 'hidden';\n    document.documentElement.style.overflowX = 'hidden';\n    return () => {\n      document.body.style.overflowX = prevBodyOverflowX;\n      document.documentElement.style.overflowX = prevHtmlOverflowX;\n    };\n  }, [open]);\n\n  React.useEffect(() => {\n    if (expectedJobs.length === 0 || !printQuoteFiles) { return; }\n\n    // Check each print type for new results\n    const printTypes = [...new Set(expectedJobs.map(j => j.printType || attachmentTypeToConfig[j.attachmentType]?.printType).filter(Boolean))];\n\n    printTypes.forEach(printType => {\n      const printData = printQuoteFiles?.getIn([quoteId, printType, -1]);\n      if (!printData) { return; }\n      const status = printData.get('status');\n      const fileId = printData.get('fileId');\n      const filename = printData.get('filename');\n      const printId = printData.get('id');\n\n      if (!status || status === 'pending') { return; }\n\n      // Check if this result is new (different printId from what we've already captured)\n      const prevData = prevPrintQuoteFilesRef.current?.getIn?.([quoteId, printType, -1]);\n      const prevPrintId = prevData?.get?.('id');\n      if (printId && printId === prevPrintId) { return; }\n\n      // Find the first pending job of this type that hasn't been completed yet\n      setExpectedJobs(prev => {\n        const updated = [...prev];\n        const pendingIdx = updated.findIndex(j =>\n          (j.printType || attachmentTypeToConfig[j.attachmentType]?.printType) === printType &&\n          j.status === 'pending',\n        );\n        if (pendingIdx >= 0) {\n          updated[pendingIdx] = {\n            ...updated[pendingIdx],\n            status: status === 'complete' ? 'complete' : 'failed',\n            fileId: fileId || undefined,\n            filename: filename || undefined,\n          };\n        }\n        return updated;\n      });\n    });\n\n    prevPrintQuoteFilesRef.current = printQuoteFiles;\n  }, [printQuoteFiles, expectedJobs.length]);\n\n  // Dispatch next queued job when a same-printType job completes.\n  // This ensures same-printType jobs run sequentially so Redux printQuoteFiles\n  // (which only stores one result per printType) doesn't lose results.\n  React.useEffect(() => {\n    if (!Object.keys(pendingDispatchQueue).length) { return; }\n\n    let updated = false;\n    const newQueue = { ...pendingDispatchQueue };\n\n    Object.entries(newQueue).forEach(([printType, queue]) => {\n      if (!queue || queue.length <= 1) { return; }\n      // Check if the first (currently dispatched) job has completed\n      const pendingJob = expectedJobs.find(j =>\n        j.printType === printType && j.status === 'pending',\n      );\n      // If no pending job of this type, the current one completed — dispatch next\n      if (!pendingJob || expectedJobs.filter(j => j.printType === printType && j.status === 'pending').length < queue.length) {\n        queue.shift(); // remove the completed one\n        if (queue.length > 0) {\n          dispatch(new GenericQuotePrintAction(queue[0]));\n        }\n        updated = true;\n      }\n    });\n\n    // Clean up empty queues\n    Object.keys(newQueue).forEach(key => {\n      if (!newQueue[key] || newQueue[key].length <= 0) { delete newQueue[key]; }\n    });\n\n    if (updated) {\n      setPendingDispatchQueue(newQueue);\n    }\n  }, [expectedJobs, pendingDispatchQueue, dispatch]);\n\n  // Jobs derived from expectedJobs (already has captured fileId/status)\n  const jobs: IPrintJobInfo[] = React.useMemo(() => {\n    if (expectedJobs.length === 0) { return []; }\n    return expectedJobs.map(job => {\n      if (job.status !== 'pending') { return job; }\n      // Fallback: check current printQuoteFiles for any pending jobs\n      const printType = job.printType || attachmentTypeToConfig[job.attachmentType]?.printType;\n      if (!printType) { return job; }\n      const printData = printQuoteFiles?.getIn([quoteId, printType, -1]);\n      if (!printData) { return job; }\n      const status = printData.get('status');\n      const fileId = printData.get('fileId');\n      const filename = printData.get('filename');\n      if (status === 'complete') {\n        return { ...job, status: 'complete' as const, fileId, filename };\n      }\n      if (status === 'failed') {\n        return { ...job, status: 'failed' as const };\n      }\n      return job;\n    });\n  }, [expectedJobs, printQuoteFiles, quoteId]);\n\n  // Initialize customer selection when modal opens\n  React.useEffect(() => {\n    if (open && customers.size > 0) {\n      const allIds = customers.map((c: any) => c.get('id')).toJS();\n      setSelectedCustomerIds(allIds);\n      setSelectAllCustomers(true);\n      setActiveCustomerId(allIds[0]);\n      const settings: Record<number, CustomerSettings> = {};\n      allIds.forEach((id: number) => { settings[id] = { ...defaultCustomerSettings }; });\n      setCustomerSettings(settings);\n      setModalStep('settings');\n      setExpectedJobs([]);\n      setEmailData({});\n      setActiveAttachmentType('quote');\n      setCustomerPrintFormValues({});\n      setLastGeneratedSettingsHash('');\n      setPendingDispatchQueue({});\n      prevPrintQuoteFilesRef.current = null;\n    }\n  }, [open, customers.size]);\n\n  // Handle NEXT — dispatch print jobs or skip to email if settings unchanged\n  const handleNext = async () => {\n    // Save current active customer's form values before generating\n    const updatedCustomerPrintFormValues = { ...customerPrintFormValues };\n    if (activeCustomerId) {\n      updatedCustomerPrintFormValues[activeCustomerId] = {\n        quotePrint: quotePrintFormValues,\n        shopDrawing: shopDrawingFormValues,\n        oandm: omFormValues,\n      };\n      setCustomerPrintFormValues(updatedCustomerPrintFormValues);\n    }\n\n    const currentHash = JSON.stringify({\n      selectedCustomerIds,\n      customerSettings,\n      customerPrintForms: Object.keys(updatedCustomerPrintFormValues).reduce((acc, key) => {\n        acc[key] = {\n          quotePrint: updatedCustomerPrintFormValues[key]?.quotePrint?.toJS?.(),\n          shopDrawing: updatedCustomerPrintFormValues[key]?.shopDrawing?.toJS?.(),\n          oandm: updatedCustomerPrintFormValues[key]?.oandm?.toJS?.(),\n        };\n        return acc;\n      }, {}),\n    });\n    if (lastGeneratedSettingsHash === currentHash && expectedJobs.length > 0) {\n      setModalStep('email');\n      return;\n    }\n\n    // Clear expectedJobs BEFORE switching step. Needed because the `quote` branch\n    // below awaits UpdateAllSectionTotalAction — in React 16, setState after await\n    // is not batched, so DownloadStep would mount with modalStep='download' while\n    // expectedJobs still holds the previous run's completed jobs. That makes\n    // allComplete=true fire immediately and auto-navigates past the download page.\n    setExpectedJobs([]);\n    setModalStep('download');\n    setLastGeneratedSettingsHash(currentHash);\n\n    dispatch(new ResetPrintQuoteDataAction());\n\n    const countryId = project?.getIn(['location', 'country', 'id']) || loginUserOfficeLocation?.getIn(['country', 'id']);\n    const timeNow = Date.now();\n    const newJobs: IPrintJobInfo[] = [];\n    const dispatchQueue: Record<string, any[]> = {};\n\n    for (const customerId of selectedCustomerIds) {\n      const settings = customerSettings[customerId];\n      if (!settings) { continue; }\n\n      for (const [attachType, isSelected] of Object.entries(settings.attachmentTypes)) {\n        if (!isSelected) { continue; }\n        // Skip O&M when user doesn't have ACL — O&M tab isn't shown but default settings have oandm: true\n        if (attachType === 'oandm' && !hasOMShopDrawingAcl) { continue; }\n        const config = attachmentTypeToConfig[attachType];\n        if (!config) { continue; }\n\n        let printData: any;\n        // Per-customer form values. Only the active customer has Redux form state during\n        // handleNext; other customers' values come from customerPrintFormValues (saved on\n        // customer switch, plus active customer saved at line 275 above). If a customer was\n        // never visited, fall straight to defaults — do NOT fall back to the live Redux form\n        // (shopDrawing/omFormValues), which holds the active customer's data and would assign\n        // the active customer's name and \"deliver to\" selection to every other customer's PDF.\n        const customerForms = updatedCustomerPrintFormValues[customerId];\n        const hasFormData = (v: any) => v && v.get && v.get('sections')?.size > 0;\n        const customerObj = customers.find((c: any) => c.get('id') === customerId);\n        const customerVisibility = customerObj?.get('visibility') || null;\n        const customerQuotePrintValues = customerForms?.quotePrint || quotePrintFormValues;\n        // Derive per-customer visible firmProductIds from QDV (populated by fetchAndSetupCustomerData).\n        // Used as fallback for customers who were never visited in the modal and lack customer.visibility.\n        const shopDrawingCustomerQdv = quotePrintFormValues?.get('quoteDiscountVariations')?.get(customerId);\n        let customerVisibleFirmProductIds: Set<number> | null = null;\n        const shopDrawingQdvSections = shopDrawingCustomerQdv?.get('sections');\n        if (shopDrawingQdvSections) {\n          const ids = new Set<number>();\n          shopDrawingQdvSections.forEach((s: any) => {\n            s.get('products')?.forEach((p: any) => {\n              const fid = p?.get?.('firmProductId');\n              if (fid != null) { ids.add(fid); }\n            });\n          });\n          customerVisibleFirmProductIds = ids;\n        }\n        const customerShopDrawingValues = (hasFormData(customerForms?.shopDrawing) ? customerForms.shopDrawing : null)\n          || buildDefaultShopDrawingValues(quote, customerId, customerVisibility, 'shopDrawing', customerVisibleFirmProductIds);\n        const customerOMValues = (hasFormData(customerForms?.oandm) ? customerForms.oandm : null)\n          || buildDefaultShopDrawingValues(quote, customerId, customerVisibility, 'oandm', customerVisibleFirmProductIds);\n        const sectionKey = String(customerId);\n        if (attachType === 'excelCsv') {\n          printData = fromJS({ quoteId });\n        } else if (attachType === 'quote') {\n          printData = QuoteEmailUtil.transformQuotePrintData(customerQuotePrintValues, quoteId, quote);\n          printData = printData.set('customers', fromJS([customerId]));\n          printData = printData.set('allowToAddress', true);\n          // Wrap sections with customer ID or 'default' key\n          let sections = printData.get('sections');\n          // Unwrap \"default\" key if sections is a Map with \"default\" (compact mode form format)\n          if (Map.isMap(sections) && sections.has('default')) {\n            sections = sections.get('default');\n          }\n\n          // Use live form's quoteDiscountVariations as the source of truth (global, not per-customer).\n          // Per-customer snapshots may have stale data if initialize() ran after discount callbacks.\n          const liveQdv = quotePrintFormValues?.get('quoteDiscountVariations');\n          const customerKey = String(customerId);\n\n          // In compact mode, sections is a shared List (same for all customers) because\n          // QuotePrint.componentDidUpdate skips the per-customer section conversion.\n          // Apply per-customer discount data from quoteDiscountVariations onto sections.\n          const applyDiscount = customerQuotePrintValues?.get('discount');\n          if (applyDiscount && liveQdv?.size && List.isList(sections)) {\n            const customerQdvEntry = liveQdv.get(customerId) || liveQdv.get(customerKey);\n            if (customerQdvEntry) {\n              const qdvSections = customerQdvEntry.get('sections');\n              if (qdvSections) {\n                sections = sections.map((section: any) => {\n                  const qdvSection = qdvSections.find((qs: any) => qs.get('sectionId') === section.get('sectionId'));\n                  if (!qdvSection) { return section; }\n                  const qdvProducts = qdvSection.get('products') || List();\n                  // Build quoteProductId lookup for visibility + discount-applied templateCells\n                  const qdvProductMap: Record<string, any> = {};\n                  qdvProducts.forEach((p: any) => { if (p?.get) { qdvProductMap[p.get('quoteProductId')] = p; } });\n                  // Filter by customer visibility, overlay discount-applied templateCells\n                  const updatedProducts = (section.get('products') || List())\n                    .filter((product: any) => {\n                      if (typeof product === 'string' || !product?.get) { return true; }\n                      return qdvProductMap[product.get('quoteProductId')];\n                    })\n                    .map((product: any) => {\n                      if (typeof product === 'string' || !product?.get) { return product; }\n                      const qdvProduct = qdvProductMap[product.get('quoteProductId')];\n                      return qdvProduct ? product.set('templateCells', qdvProduct.get('templateCells')) : product;\n                    });\n                  return section.set('products', updatedProducts);\n                });\n              }\n              // Use per-customer grandTotals from discount data\n              const qdvGrandTotals = customerQdvEntry.get('grandTotals');\n              if (qdvGrandTotals) {\n                printData = printData.set('grandTotals', Map({ [sectionKey]: qdvGrandTotals }));\n              }\n            }\n          } else if (!applyDiscount) {\n            // Discount unchecked — use quoteWithoutDiscount to reset sectionCalculations\n            // and grandTotals to undiscounted values. Products in sections are string IDs\n            // (not objects), so only the calculations/totals need fixing.\n            const qwd = quotePrintFormValues?.get('quoteWithoutDiscount');\n            if (qwd) {\n              const qwdSections = qwd.get('sections');\n              if (qwdSections && List.isList(sections)) {\n                sections = sections.map((section: any) => {\n                  const qwdSection = qwdSections.find((qs: any) => qs.get('sectionId') === section.get('sectionId'));\n                  if (!qwdSection) { return section; }\n                  // Replace sectionCalculations with undiscounted values\n                  const qwdCalcs = qwdSection.get('sectionCalculations');\n                  return qwdCalcs ? section.set('sectionCalculations', qwdCalcs) : section;\n                });\n              }\n              const qwdGrandTotals = qwd.get('grandTotals');\n              if (qwdGrandTotals) {\n                printData = printData.set('grandTotals', Map({ [sectionKey]: qwdGrandTotals }));\n              }\n            }\n          }\n\n          // Recalculate sectionCalculations + grandTotals based on user-selected products.\n          // Matches preview page (QuoteDownloadPreview.tsx:869-928). Without this, totals\n          // reflect all products in QDV/QWD, not the user's final product selection.\n          const selectedProductIdSet = new Set<string>();\n          if (List.isList(sections)) {\n            sections.forEach((section: any) => {\n              (section.get('products') || List()).forEach((p: any) => {\n                if (typeof p === 'string') { selectedProductIdSet.add(p); }\n                else if (p?.get) { selectedProductIdSet.add(p.get('quoteProductId')); }\n              });\n            });\n          }\n          const calcSource = applyDiscount\n            ? (liveQdv?.get(customerId) || liveQdv?.get(customerKey))\n            : quotePrintFormValues?.get('quoteWithoutDiscount');\n          let recalcSectionMap: any = null;\n          let recalcGrandTotals: any = null;\n          if (calcSource && selectedProductIdSet.size) {\n            const calcSections = calcSource.get('sections');\n            if (calcSections) {\n              const filteredCalcSections = calcSections.map((section: any) => {\n                const products = (section.get('products') || List()).filter((product: any) => {\n                  const id = product?.get ? product.get('quoteProductId') : null;\n                  return id ? selectedProductIdSet.has(id) : false;\n                });\n                return section.set('products', products);\n              });\n              await new Promise<void>((resolve) => {\n                dispatch(new UpdateAllSectionTotalAction({\n                  quote: quote.set('sections', filteredCalcSections),\n                  type: null,\n                  forPrint: true,\n                  callbackForPrint: (newCalculatedSections: any, newGrandTotals: any) => {\n                    recalcGrandTotals = newGrandTotals;\n                    recalcSectionMap = newCalculatedSections.reduce((acc: any, s: any) =>\n                      acc.set(s.get('sectionId'), s.get('sectionCalculations')), Map());\n                    resolve();\n                  },\n                }));\n              });\n            }\n          }\n          if (recalcSectionMap && List.isList(sections)) {\n            sections = sections.map((section: any) => {\n              const calcs = recalcSectionMap.get(section.get('sectionId'));\n              return calcs ? section.set('sectionCalculations', calcs) : section;\n            });\n          }\n          if (recalcGrandTotals) {\n            printData = printData.set('grandTotals', Map({ [sectionKey]: recalcGrandTotals }));\n          }\n\n          printData = printData.set('sections', Map({ [sectionKey]: sections }));\n          // Wrap grandTotals with customer key if not already set above\n          const grandTotals = printData.get('grandTotals');\n          if (grandTotals && !grandTotals.has(sectionKey) && grandTotals.has('default')) {\n            printData = printData.set('grandTotals', Map({ [sectionKey]: grandTotals.get('default') }));\n          }\n\n          // Handle quoteDiscountVariations — trim and key by customer ID.\n          // Backend uses qdv for product templateCells (sections.products are just string IDs).\n          // Mirrors QuoteDownloadPreview.tsx:810 logic exactly:\n          //   const targetedQuote = applyDiscount\n          //     ? _quote\n          //     : Boolean(quote.get('selectedCustomer')) ? ctx.get('quoteWithoutDiscount') : trimmedOGQuote;\n          // - discount=ON  → per-customer QDV (discount + visibility applied)\n          // - discount=OFF + selectedCustomer set → quoteWithoutDiscount\n          // - discount=OFF + no selectedCustomer → trimmedOGQuote (raw quote.sections + grandTotals)\n          const qdvSource = (() => {\n            if (applyDiscount) {\n              return liveQdv?.size ? liveQdv : printData.get('quoteDiscountVariations');\n            }\n            const hasSelectedCustomer = Boolean(quote.get('selectedCustomer'));\n            const qwd = quotePrintFormValues?.get('quoteWithoutDiscount');\n            if (hasSelectedCustomer && qwd) {\n              return Map({ [customerId]: qwd });\n            }\n            // No selectedCustomer (or no qwd): use trimmedOGQuote = raw quote.sections + grandTotals\n            // (no saga processing, no discount applied at all). Matches preview page exactly.\n            const trimmedOGQuote = Map()\n              .set('sections', quote.get('sections'))\n              .set('grandTotals', quote.get('grandTotals'));\n            return Map({ [customerId]: trimmedOGQuote });\n          })();\n          const trimmedQdv = qdvSource?.size ? QuoteDownloadPreviewUtil.trimQuoteDiscountVariations(qdvSource, true) : null;\n          if (trimmedQdv && Map.isMap(trimmedQdv)) {\n            // Keys from fetchAndSetupCustomerData are numeric; look up with both types\n            if (trimmedQdv.has(customerId)) {\n              printData = printData.set('quoteDiscountVariations', Map({ [customerKey]: trimmedQdv.get(customerId) }));\n            } else if (trimmedQdv.has(customerKey)) {\n              printData = printData.set('quoteDiscountVariations', Map({ [customerKey]: trimmedQdv.get(customerKey) }));\n            } else if (trimmedQdv.has('default')) {\n              printData = printData.set('quoteDiscountVariations', Map({ [customerKey]: trimmedQdv.get('default') }));\n            } else {\n              printData = printData.set('quoteDiscountVariations', Map({ [customerKey]: trimmedQdv.first() }));\n            }\n            // Overlay recalculated sectionCalculations + grandTotals onto qdv, matching\n            // preview page (QuoteDownloadPreview.tsx:916-919). Backend uses qdv for\n            // per-customer totals when quoteDiscountVariations is present.\n            if (recalcSectionMap || recalcGrandTotals) {\n              const currentQdv = printData.get('quoteDiscountVariations');\n              if (currentQdv && Map.isMap(currentQdv)) {\n                const overlaid = currentQdv.map((q: any) => {\n                  let newQ = q;\n                  if (recalcSectionMap) {\n                    const updatedSections = q.get('sections')?.map((s: any) => {\n                      const calcs = recalcSectionMap.get(s.get('sectionId'));\n                      return calcs ? s.set('sectionCalculations', calcs) : s;\n                    });\n                    if (updatedSections) { newQ = newQ.set('sections', updatedSections); }\n                  }\n                  if (recalcGrandTotals) { newQ = newQ.set('grandTotals', recalcGrandTotals); }\n                  return newQ;\n                });\n                printData = printData.set('quoteDiscountVariations', overlaid);\n              }\n            }\n          } else {\n            printData = printData.delete('quoteDiscountVariations');\n          }\n        } else if (attachType === 'shopDrawing') {\n          // Pass `quote` so transformSectionValues runs — adds sectionId/sectionTitle and\n          // filters empty sections. Without it, backend receives sections without sectionId\n          // and falls back to printing ALL products instead of the checkbox-filtered list.\n          printData = QuoteEmailUtil.transformShopDrawingPrintData(customerShopDrawingValues, quoteId, quote);\n          // customer field comes from the radio selection in the form.\n          // Defaults to activeCustomerId via initialValues. \"No customer\" sets it to ''.\n          // Preview page does NOT send a customers array for shop drawing.\n          // mediaTypes is derived from the form's file type checkboxes by transformShopDrawingPrintData.\n        } else if (attachType === 'oandm') {\n          printData = QuoteEmailUtil.transformShopDrawingPrintData(customerOMValues, quoteId, quote);\n        }\n\n        // Check if splitquote is enabled for quote attachment\n        let operationId = config.operationId;\n        let printType = config.printType;\n        if (attachType === 'quote' && customerQuotePrintValues?.get('type') === 'splitquote') {\n          operationId = QUOTE_PRINT_OPERATION_ID.createSplitQuotePrint;\n          printType = QUOTE_PRINT_FORMAT.splitquote;\n        }\n\n        newJobs.push({\n          customerId,\n          attachmentType: attachType,\n          attachmentLabel: config.label,\n          status: 'pending',\n          printType,\n        });\n\n        // Queue dispatch data — dispatched sequentially per printType to avoid\n        // Redux printQuoteFiles overwrite (only stores one result per printType).\n        if (!dispatchQueue[printType]) { dispatchQueue[printType] = []; }\n        dispatchQueue[printType].push({\n          operationId,\n          printType,\n          quoteId,\n          countryId,\n          printData,\n          timerStart: timeNow,\n        });\n      }\n    }\n\n    setExpectedJobs(newJobs);\n\n    // Dispatch first job of each printType immediately.\n    // Subsequent same-printType jobs dispatched when previous completes (via useEffect).\n    Object.values(dispatchQueue).forEach((queue: any[]) => {\n      if (queue.length > 0) {\n        dispatch(new GenericQuotePrintAction(queue[0]));\n      }\n    });\n    setPendingDispatchQueue(dispatchQueue);\n  };\n\n  const contextValue = {\n    modalStep,\n    setModalStep,\n    customers,\n    selectedCustomerIds,\n    setSelectedCustomerIds,\n    selectAllCustomers,\n    setSelectAllCustomers,\n    activeCustomerId,\n    setActiveCustomerId,\n    customerSettings,\n    setCustomerSettings,\n    activeSettings,\n    updateActiveSettings,\n    activeAttachmentType,\n    setActiveAttachmentType,\n    hasOMShopDrawingAcl,\n    jobs,\n    expectedJobs,\n    setExpectedJobs,\n    emailData,\n    setEmailData,\n    customerPrintFormValues,\n    setCustomerPrintFormValues,\n    quoteId,\n    onClose,\n  };\n\n  return (\n    <QuoteEmailContext.Provider value={contextValue}>\n      <Dialog\n        open={open}\n        onClose={onClose}\n        disableBackdropClick={true}\n        classes={{ paper: classes.dialogPaper }}\n        maxWidth={false}\n      >\n        <div style={{ display: modalStep === 'settings' ? 'block' : 'none' }}>\n          <SelectCustomersStep onNext={handleNext} />\n        </div>\n        {modalStep === 'download' && (\n          <DownloadStep />\n        )}\n        {modalStep === 'email' && (\n          <SendEmailForm />\n        )}\n        {modalStep === 'sent' && (\n          <EmailSent />\n        )}\n        {modalStep === 'error' && (\n          <EmailError />\n        )}\n      </Dialog>\n    </QuoteEmailContext.Provider>\n  );\n};\n\nexport default withStyles(styles)(QuoteEmailModal);\n","export const EMAIL_DOMAIN_ENABLE = 1;\n\n/**\n * Check if the email button should be visible.\n * Requires only that the firm's email setting is active (status=1).\n * Domain match against the user's email is no longer enforced — once a firm enables\n * email, all users with quote access can use the email feature regardless of their\n * email domain.\n */\nconst isUserEmailEnabled = (firmEmailSetting: any, _userEmail?: string): boolean => {\n  if (!firmEmailSetting) { return false; }\n  const status = firmEmailSetting.get ? firmEmailSetting.get('status') : firmEmailSetting?.status;\n  return status === EMAIL_DOMAIN_ENABLE;\n};\n\nconst EmailSettingUtil = {\n  isUserEmailEnabled,\n  EMAIL_DOMAIN_ENABLE,\n};\n\nexport default EmailSettingUtil;\n","import * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { DuplicateFirmProductCancelAction, DuplicateFirmProductProceedAction } from '../../modules/QuoteEditModule/actions';\nimport DuplicateProductDialog from '.';\n\nexport const DUPLICATE_PRODUCT_DIALOG_ID = 'DUPLICATE_PRODUCT_DIALOG';\n\n/**\n * Overlay-driven instance of DuplicateProductDialog for the add-product-to-quote flow.\n * The addProductOrPackageToQuote saga opens it (SetOverlayComponentPropsAction +\n * ToggleOverlayComponentAction) and blocks on the proceed/cancel actions below.\n */\nconst QuoteAddProductDuplicateDialog: React.FC = () => {\n  const dispatch = useDispatch();\n  const open = useSelector(makeSelectOverlayComponent(DUPLICATE_PRODUCT_DIALOG_ID));\n  const overlayProps: any = useSelector(makeSelectOverlayComponentProp(DUPLICATE_PRODUCT_DIALOG_ID));\n\n  const onProceed = React.useCallback(() => {\n    dispatch(new DuplicateFirmProductProceedAction());\n  }, [dispatch]);\n\n  const onCancel = React.useCallback(() => {\n    dispatch(new DuplicateFirmProductCancelAction());\n  }, [dispatch]);\n\n  return (\n    <DuplicateProductDialog\n      open={open}\n      productNumber={overlayProps.productNumber}\n      itemNumber={overlayProps.itemNumber}\n      brand={overlayProps.brand}\n      onCancel={onCancel}\n      onProceed={onProceed}\n    />\n  );\n};\n\nexport default QuoteAddProductDuplicateDialog;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import { List, Map, fromJS } from 'immutable';\n\nfunction getQuoteFormInitialValuesFromSpecToQuoteDraft({\n  quote,\n  draft,\n  defaultTemplate\n}\n) {\n  // take products out of packages\n  // only have products in sections\n  const sectionWithAllProducts = draft && draft.get('sections').reduce((sectionAcc, section, drawingIndex) => {\n    const quoteSectionProducts = quote.getIn(['sections', drawingIndex, 'products']) || List();\n    let quoteProductIndexFromQuote = 0;\n    const newProducts = section.get('products').reduce((_acc, specToQuoteDataList, productIndex) => {\n      const productOrPackage = specToQuoteDataList.get('quoteProduct');\n      if (!productOrPackage) {\n        // adding id = -1 instead of just an empty map to prevent the following issue:\n        // https://stackoverflow.com/questions/52996518/redux-form-deleting-field-on-change-action\n        // where redux form will delete the last field if it is an empty map when empty string is the payload\n        // and the initial value is undefine.\n        return _acc.push(Map({ id: -1, specToQuoteValues: specToQuoteDataList.delete('quoteProduct') }));\n      }\n      // let updatedProductOfPackage = productOrPackage;\n      // if ((productOrPackage.get('productIndex') === 0 || !productOrPackage.get('uniquePackageId')) && sortValue === ISpecToQuoteSortValue.manufacturer) {\n      //   const labelColumn = draft.getIn(['sections', drawingIndex, 'products', productIndex, 'labelColumn']) || '';\n      //   updatedProductOfPackage = updatedProductOfPackage.set('labelColumn', labelColumn);\n      // }\n\n      // retain the defaultPrint value from the quote since for quote print, the defaultPrint value is only updated in the quote;\n      const quoteDefaultPrint = quoteSectionProducts.getIn([quoteProductIndexFromQuote, 'defaultPrint']);\n      const quoteLabelColumn = quoteSectionProducts.getIn([quoteProductIndexFromQuote, 'labelColumn']);\n      quoteProductIndexFromQuote += 1;\n      return _acc.push(\n        productOrPackage\n          ?.set('defaultPrint', quoteDefaultPrint || true)\n          .set('labelColumn', quoteLabelColumn || '')\n          .set('specToQuoteValues', !productOrPackage.get('uniquePackageId') || productOrPackage.get('productIndex') === 0 ? specToQuoteDataList.delete('quoteProduct') : specToQuoteDataList.delete('quoteProduct').delete('specProduct'))\n      );\n    }, List());\n\n    // over write the products in the section with newProducts that includes products extracted out from packages\n    const quoteSection = quote.getIn(['sections', drawingIndex]);\n\n    // PT-3679 prevent error (should be fixed by fixing mis-matching products when updating quote PT-3674)\n    if (!quoteSection) {\n      console.error('Error: Quotes sections and draft sections mismatching', quote.get('sections'), draft.get('sections')); // tslint:disable-line\n      return sectionAcc;\n    }\n\n    const newSection = quoteSection.set('products', newProducts).set('aiNote', section.get('note') || '');\n    return sectionAcc.push(newSection);\n  }, List());\n\n  const formattedValues = sectionWithAllProducts\n    .reduce((acc, productsArrays: any, index) => {\n      const immutableProductsArray = productsArrays.get('products').map((product) => {\n        if (product.get('id') === -1) {\n          return product;\n        }\n        return fromJS(product);\n      });\n      const sections = quote.get('sections');\n      const targetedSection = sections.find(section => section.get('drawingId') === productsArrays.get('drawingId'));\n      const sectionTemplate = (targetedSection || Map()).get('sectionTemplate');\n\n      return acc.push(productsArrays\n        .set('products', immutableProductsArray)\n        .set('note', quote.getIn(['sections', index, 'note']))\n        .set('sectionTemplate', sectionTemplate || defaultTemplate));\n    }, List());\n\n  return quote.set('sections', formattedValues);\n}\n\nexport default getQuoteFormInitialValuesFromSpecToQuoteDraft;","import * as React from 'react';\nimport {\n  Button,\n  InputAdornment,\n  Grid,\n} from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { debounce, isEqual } from 'lodash';\nimport { camelizeString } from '../../utils/camelizeString';\nimport FieldTextField from '../FieldTextField';\n\nconst inputType = {\n  integer: {\n    type: 'number',\n    pattern: '^\\\\d*$',\n  },\n  decimal: {\n    type: 'number',\n    pattern: '^(?:\\\\d*\\\\.?\\\\d+)$',\n  },\n  percentage: {\n    type: 'number',\n    pattern: '^(?:\\\\d*\\\\.?\\\\d+)$'\n  },\n  text: {\n    type: 'text',\n    pattern: '',\n  },\n  price: {\n    type: 'number',\n    pattern: '^(?:\\\\d*\\\\.?\\\\d+)$',\n  },\n};\nconst valueType = {\n  storedData: {\n    icon: 'database',\n  },\n  userInput: {\n    icon: 'user-edit',\n  },\n  constant: {\n    icon: 'cog',\n  },\n  formula: {\n    icon: 'calculator',\n  },\n  calculation: {\n    icon: 'calculator',\n  },\n};\n\ninterface ITemplateColumn {\n  classes: any;\n  fieldData: any;\n  onRemove: (id: string) => void;\n  onEdit: (id: string) => void;\n  onFieldValueChange: (fieldData: any) => void;\n}\n\nclass TemplateColumn extends React.Component<ITemplateColumn> {\n  public state = {\n    mouseOver: false,\n    fieldData: {\n      ...this.props.fieldData,\n    } as any,\n  };\n\n  private lastSentFieldValue: any = this.props.fieldData\n    ? this.props.fieldData.fieldValue\n    : undefined;\n\n  public componentDidUpdate(prevProps: ITemplateColumn) {\n    if (\n      this.props.fieldData && prevProps.fieldData &&\n      !isEqual(prevProps.fieldData, this.props.fieldData)\n    ) {\n      const incoming = this.props.fieldData;\n      const keepLocalFieldValue = incoming.fieldValue === this.lastSentFieldValue;\n      this.lastSentFieldValue = incoming.fieldValue;\n      this.setState({\n        fieldData: {\n          ...incoming,\n          fieldValue: keepLocalFieldValue\n            ? this.state.fieldData.fieldValue\n            : incoming.fieldValue,\n        },\n      });\n    }\n  }\n\n  public getFieldData = () => this.state.fieldData;\n\n  public render() {\n    const { classes, onRemove, onEdit, fieldData } = this.props;\n    const { mouseOver, fieldData: stateFieldData } = this.state;\n\n    if (!fieldData) {\n      return;\n    }\n\n    return (\n      <Grid className={classes.column} container={true} item={true}>\n        <Grid\n          className={classes.columnHeader}\n          item={true}\n          xs={12}\n          onMouseEnter={this.onMouseEnter}\n          onMouseLeave={this.onMouseLeave}\n        >\n          <div className={classes.droppedComponent}>\n            <FontAwesomeIcon className={classes.noDroppedIcon}\n                             icon={valueType[fieldData.valueType || fieldData.type].icon}/>\n            <span className={classes.noDroppedComponent}>{fieldData.name}</span>\n          </div>\n          <div className={classes.customsButtonsContainer}>\n            {mouseOver && fieldData.custom &&\n            <Button className={classes.customsButton} onClick={() => onEdit(fieldData.id)}>\n              <FontAwesomeIcon\n                className={classes.icon}\n                icon='pencil-alt'\n              />\n            </Button>\n            }\n            {(mouseOver && fieldData.name !== 'Section Amount') &&\n            <Button className={classes.customsButton} onClick={() => onRemove(fieldData.id)}>\n              <FontAwesomeIcon\n                className={classes.icon}\n                icon='trash-alt'\n              />\n            </Button>\n            }\n            {!mouseOver && fieldData.invisible &&\n            <FontAwesomeIcon\n              className={classes.icon}\n              icon='eye-slash'\n            />\n            }\n          </div>\n        </Grid>\n        <Grid item={true} xs={12}>\n          <FieldTextField\n            key={fieldData.id}\n            formControlProps={{\n              className: classes.titleField,\n            }}\n            label='Value'\n            input={{} as any}\n            meta={{} as any}\n            inputProps={{\n              InputProps: {\n                endAdornment: fieldData.fieldType === 'percentage'\n                  ? <InputAdornment position='end'>%</InputAdornment>\n                  : undefined,\n              },\n              name: 'fieldValue',\n              placeholder: 'Value',\n              value: stateFieldData.fieldValue != null ? stateFieldData.fieldValue : '',\n              onChange: (e: any) => this.onFieldsChange(e, inputType[fieldData.fieldType].pattern),\n              type: inputType[fieldData.fieldType].type,\n            }}\n          />\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private onFieldsChange = (e: any, pattern: string) => {\n    e.persist();\n    this.debouncedUpdate(e);\n    const target: any = e.currentTarget;\n    const fieldName: string = camelizeString(target.name);\n    const fieldValue: any = target.hasOwnProperty('checked') ? target.checked : target.value;\n    return this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        [fieldName]: fieldValue,\n      }});\n  }\n\n  private onComponentUpdate = (e: any) => {\n    this.lastSentFieldValue = this.state.fieldData.fieldValue;\n    this.props.onFieldValueChange(this.state.fieldData);\n  }\n\n  private debouncedUpdate = debounce(this.onComponentUpdate, 1000); // tslint:disable-line\n\n  private onMouseEnter = () => {\n    this.setState({ mouseOver: true });\n  }\n\n  private onMouseLeave = () => {\n    this.setState({ mouseOver: false });\n  }\n}\n\nexport default TemplateColumn;\n","import * as React from 'react';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { compose } from 'redux';\nimport {\n  Button,\n  FormControlLabel,\n  FormGroup,\n  Grid,\n  Radio,\n  RadioGroup,\n  Switch,\n  Theme,\n  Tooltip,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport FieldTextField from '../FieldTextField';\nimport { StyleRules } from '@material-ui/core/styles';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n  SortableContainer,\n  SortableElement,\n  arrayMove,\n} from 'react-sortable-hoc';\nimport { isEqual } from 'lodash';\nimport { parseFormulaFields, parseFormula } from '../../utils/parseFormulaFields';\nimport TemplateColumn from './column';\n\ninterface IQuoteSectionTemplate {\n  onRef: (ref: any) => any;\n  templateData: any;\n  editColumn: (id: string) => any;\n  onDrop: (columns: any[]) => void;\n  onChange: (data: any) => void;\n  addCalculation: () => void;\n  removeCalculation: (id: string) => void;\n  t?(key: string): string;\n}\n\nclass QuoteSectionTemplate extends React.Component<IQuoteSectionTemplate & WithStyles<keyof ReturnType<typeof styles>>> {\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) {\n    const { templateData } = nextProps;\n    if (!isEqual(templateData, prevState)) {\n      return {\n        ...templateData\n      };\n    }\n\n    return null;\n  }\n\n  public state = {\n    templateTitle: '',\n    sectionCalculations: [],\n    droppedComponents: [],\n    settings: {\n      infoToDisplay: { productManufacturer: false, productImage: false, productHyperlink: false, itemNumber: false },\n      currency: 'CAD'\n    },\n  };\n\n  private fieldsRef: any[] = [];\n  private sectionCalculationsRef: any[] = [];\n\n  // @ts-ignore\n  private SortableItem = SortableElement((item: any) => {\n    const { value, onRemove, onEdit, classes } = item;\n    return (\n      <TemplateColumn\n        fieldData={value}\n        classes={classes}\n        onEdit={onEdit}\n        onRemove={onRemove}\n        onFieldValueChange={this.droppedValueChanged}\n        ref={el => el && this.fieldsRef.push(el)}\n      />\n    );\n  });\n\n  // @ts-ignore\n  private SortableList = SortableContainer((list: any) => {\n    const { items } = list;\n    const { classes, editColumn } = this.props;\n    this.fieldsRef = [];\n    const SortableItem = this.SortableItem;\n\n    return (\n      <Grid\n        className={classes.columnsDropZone}\n        container={true}\n        item={true}\n        xs={12}\n        spacing={3}\n        onDrop={this.onDrop}\n        onDragOver={this.onDragOver}\n      >\n        {items.map((value: any, index: any) => (\n          <SortableItem\n            key={`item-${value?.id}-${index}`}\n            value={value}\n            index={index}\n            classes={classes}\n            onEdit={editColumn}\n            onRemove={this.removeColumn}\n          />\n        ))}\n      </Grid>\n    );\n  });\n\n  public componentDidMount() {\n    this.props.onRef(this);\n  }\n\n  public getData = () => {\n    const { templateTitle, settings } = this.state;\n    const { infoToDisplay, currency } = settings;\n    const fieldsData = this.fieldsRef.reduce((prev, next) => {\n      prev.push(next.getFieldData());\n      return prev;\n    }, []);\n\n    return { templateTitle, fieldsData, settings: { infoToDisplay, currency } };\n  }\n\n  public render() {\n    const { classes, addCalculation, t } = this.props;\n    const { templateTitle, droppedComponents, settings } = this.state;\n    const { infoToDisplay, currency } = settings;\n\n    return (\n      <Grid container={true} item={true}>\n        <Grid className={classes.titleContainer} item={true} xs={6}>\n          <FieldTextField\n            key='__QuoteSectionTemplateTitle__'\n            formControlProps={{\n              className: classes.titleField,\n            }}\n            label={t('quoteTemplate.templateTitleLabel')}\n            inputProps={{\n              name: 'templateTitle',\n              placeholder: t('quoteTemplate.templateTitlePlaceholder'),\n              value: templateTitle,\n              onChange: this.onFieldChange,\n              type: 'text',\n            }}\n            input={{} as any}\n            meta={{} as any}\n          />\n        </Grid>\n\n        <Grid container={true} className={classes.infoToDisplayContainer} item={true} xs={12} direction='column' justify='space-between'>\n          <Typography variant='body2' color='textPrimary' className={classes.infoToDisplayTitle}>\n            {t('quoteTemplate.infoToDisplayLabel')}\n            <Tooltip title={t('quoteTemplate.infoToDisplayLabelTooltip')}>\n              <InfoIcon fontSize='small' color='action' />\n            </Tooltip>\n          </Typography>\n          <FormGroup>\n            <FormControlLabel\n              control={<Switch color='primary' checked={infoToDisplay.productManufacturer ?? false} onChange={this.onFieldChange} name='productManufacturer' />}\n              label={t('quoteTemplate.manufacturerOptionLabel')}\n            />\n            <FormControlLabel\n              control={<Switch color='primary' checked={infoToDisplay.productImage ?? false} onChange={this.onFieldChange} name='productImage' />}\n              label={t('quoteTemplate.imageOptionLabel')}\n            />\n            <FormControlLabel\n              control={<Switch color='primary' checked={infoToDisplay.productHyperlink ?? false} onChange={this.onFieldChange} name='productHyperlink' />}\n              label={t('quoteTemplate.hyperlinkToSpecSheetLabel')}\n            />\n            <FormControlLabel\n              control={<Switch color='primary' checked={infoToDisplay.itemNumber ?? false} onChange={this.onFieldChange} name='itemNumber' />}\n              label={t('quoteTemplate.internalProductNumberLabel')}\n            />\n          </FormGroup>\n        </Grid>\n\n        <Grid container={true} className={classes.infoToDisplayContainer} item={true} xs={12} direction='column' justify='space-between'>\n          <Typography className={classes.optionsTitle}\n            variant='body2'>{t('quoteTemplate.customChooseCurrency')}</Typography>\n          <RadioGroup\n            aria-label='helper-text'\n            name='currency'\n            className={classes.radioGroupHorizontal}\n            value={currency}\n            onChange={this.onFieldChange}\n          >\n            <FormControlLabel\n              label={t('quoteTemplate.CAD')}\n              value='CAD'\n              control={<Radio className={classes.radio} />}\n            />\n            <FormControlLabel\n              label={t('quoteTemplate.USD')}\n              value='USD'\n              control={<Radio className={classes.radio} />}\n            />\n          </RadioGroup>\n        </Grid>\n\n\n        <Grid className={classes.titleContainer} item={true} xs={12}>\n          <Typography variant='body2' color='textPrimary'>{t('quoteTemplate.columnsTitle')}</Typography>\n        </Grid>\n        <Grid>\n          <Typography variant='caption' color='textPrimary'>{t('quoteTemplate.columnsSubtitle')}</Typography>\n        </Grid>\n        <this.SortableList\n          items={droppedComponents}\n          axis='xy'\n          distance={1}\n          onSortEnd={this.onSortEnd}\n        />\n        <Grid className={classes.totalContainer} item={true} xs={12}>\n          <Typography variant='body2' color='textPrimary' className={classes.sectionAmount}>{t('quoteTemplate.sectionAmountTitle')}</Typography>\n          <Grid container={true} item={true} xs={12}>\n            {this.sectionCalculations()}\n          </Grid>\n          <Button\n            className={classes.buttonTotal}\n            variant='contained'\n            onClick={addCalculation}\n          >\n            {t('quoteTemplate.sectionCalculationLabel')}\n          </Button>\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private sectionCalculations = () => {\n    const { classes, editColumn, removeCalculation } = this.props;\n    const { sectionCalculations } = this.state;\n    return sectionCalculations.map((calc: any, index: number) =>\n      <TemplateColumn\n        key={index}\n        fieldData={calc}\n        classes={classes}\n        onEdit={editColumn}\n        onRemove={removeCalculation}\n        onFieldValueChange={this.droppedValueChanged}\n        ref={el => el && this.sectionCalculationsRef.push(el)}\n      />\n    );\n  }\n\n  private removeColumn = (id: string) => {\n    const columns = this.state.droppedComponents.slice();\n    const columnIndex = columns.findIndex((comp: any) => comp.id === id);\n    columns.splice(columnIndex, 1);\n\n    this.props.onDrop(columns);\n  }\n\n  private onDrop = (e: any) => {\n    const component = e.dataTransfer.getData('component');\n    if (!component) {\n      // something other than a palette component was dropped (selected text, a file, ...)\n      return;\n    }\n    let field;\n    try {\n      field = JSON.parse(component);\n    } catch (err) {\n      // not a palette component either (Sentry issue 7720109668)\n      return;\n    }\n    const fields: any[] = this.state.droppedComponents.slice();\n    if (field.type === 'formula') {\n      field.fieldValue = field.fieldType !== 'percentage'\n        ? parseFormula({fields, formula: field.formula})\n        : `${Number(parseFormula({fields, formula: field.formula})) * 100}`;\n    }\n    fields.push(field);\n    this.props.onDrop(fields);\n  }\n\n  private onDragOver = (e: any) => {\n    e.preventDefault();\n  }\n\n  private onSortEnd = (indexes: object) => {\n    // @ts-ignore\n    const { oldIndex, newIndex } = indexes;\n    const sorted = arrayMove(this.state.droppedComponents, oldIndex, newIndex);\n\n    this.props.onDrop(sorted);\n  }\n\n  private droppedValueChanged = (fieldData: any) => {\n    // console.log(fieldData);\n    // console.log(this.state.droppedComponents.slice());\n    const droppedComponents = parseFormulaFields({ productFields: this.state.droppedComponents.slice(), fieldData });\n\n    this.props.onChange({ droppedComponents });\n  }\n\n  private onFieldChange = (e: any) => {\n    const target = e.currentTarget;\n    const { settings } = this.props.templateData;\n    const { infoToDisplay } = settings;\n\n    if (target.name === 'templateTitle') {\n      const fieldValue = target.value;\n      this.props.onChange({ templateTitle: fieldValue });\n    } else if (target.name === 'currency') {\n      const fieldValue = target.value;\n      this.props.onChange({\n        settings: {\n          ...settings,\n          currency: fieldValue\n        }\n      });\n    } else if (target.name === 'productManufacturer' || target.name === 'productImage' || target.name === 'productHyperlink' || target.name === 'itemNumber') {\n      const fieldValue = target.checked;\n      this.props.onChange({\n        settings: {\n          ...settings,\n          infoToDisplay: {\n            productManufacturer: target.name === 'productManufacturer' ? fieldValue : infoToDisplay.productManufacturer,\n            productImage: target.name === 'productImage' ? fieldValue : infoToDisplay.productImage,\n            productHyperlink: target.name === 'productHyperlink' ? fieldValue : infoToDisplay.productHyperlink,\n            itemNumber: target.name === 'itemNumber' ? fieldValue : infoToDisplay.itemNumber,\n          }\n        }\n      });\n    }\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  titleContainer: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    width: '100%',\n  },\n  totalContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'flex-start',\n  },\n  sectionTotalContainer: {\n    display: 'flex',\n    flexDirection: 'row',\n    alignItems: 'flex-start',\n  },\n  titleField: {\n    width: '100%',\n    marginBottom: '10px',\n  },\n  buttonAdd: {\n    width: '3em',\n    height: '2em',\n    backgroundColor: theme.palette.primary.main,\n    '&:hover': {\n      backgroundColor: theme.palette.primary[300],\n    }\n  },\n  columnsDropZone: {\n    width: '100%',\n    minHeight: 300,\n    margin: 0,\n    overflowY: 'scroll',\n  },\n  list: {\n    display: 'flex',\n    listStyleType: 'none',\n  },\n  column: {\n    alignContent: 'flex-start',\n    width: '150px',\n    height: 'fit-content',\n    margin: '0.5em',\n    padding: 12,\n    paddingBottom: '0 !important',\n    borderTop: 'solid',\n    borderTopColor: theme.palette.primary[300],\n    backgroundColor: theme.palette.grey[300],\n  },\n  columnHeader: {\n    display: 'inline-flex',\n    alignItems: 'flex-start',\n    justifyContent: 'space-between',\n    height: '3em',\n    padding: 0,\n  },\n  droppedComponent: {\n    display: 'flex',\n    '& svg': {\n      color: '#727272'\n    },\n    '@global': {\n      'svg[class*=\\'deleteIcon\\']': {\n        display: 'none',\n      },\n      'span[class*=\\'MuiChiplabel\\']': {\n        fontSize: '0.8em',\n        whiteSpace: 'normal',\n      }\n    },\n  },\n  noDroppedComponent: {\n    display: 'flex',\n    alignItems: 'center',\n    fontSize: '0.8em',\n    whiteSpace: 'normal',\n    paddingLeft: 12,\n    paddingRight: 12,\n  },\n  noDroppedIcon: {\n    color: theme.palette.grey[100],\n    height: 32,\n    marginRight: -4,\n  },\n  customsButtonsContainer: {\n    display: 'flex',\n  },\n  customsButton: {\n    height: 0,\n    minWidth: 0,\n    minHeight: 0,\n    padding: 0,\n    marginRight: 5,\n  },\n  icon: {\n    color: theme.palette.grey[600],\n    cursor: 'pointer',\n  },\n  buttonTotal: {\n    boxShadow: 'none',\n    color: theme.palette.primary.main,\n    borderStyle: 'dashed',\n    borderColor: theme.palette.grey[300],\n    borderWidth: 'medium',\n    backgroundColor: theme.palette.common.white,\n    '&:hover': {\n      backgroundColor: theme.palette.grey[300],\n    }\n  },\n  sectionAmount: {\n    margin: theme.spacing(1, 0)\n  },\n  infoToDisplayContainer: {\n    width: '100%',\n    marginBottom: theme.spacing(4)\n  },\n  infoToDisplayTitle: {\n    display: 'flex',\n    alignItems: 'center'\n  },\n  radio: {\n    width: 35,\n    height: 35,\n    color: `${theme.palette.primary[800]} !important`,\n  },\n});\n\nexport default compose<React.ComponentClass<IQuoteSectionTemplate>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(QuoteSectionTemplate);\n","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Button,\n  Chip,\n  Grid,\n  InputAdornment,\n  Typography,\n} from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport FieldTextField from '../FieldTextField';\nimport { debounce, isEqual } from 'lodash';\n\nconst valueType = {\n  storedData: {\n    icon: 'database',\n  },\n  userInput: {\n    icon: 'user-edit',\n  },\n  constant: {\n    icon: 'cog',\n  },\n  formula: {\n    icon: 'calculator',\n  },\n};\n\ninterface IQuoteTemplateComponents {\n  classes: any;\n  valueComponents: object[];\n  addValue: () => void;\n  addFormula: () => void;\n  editComponent: (id: string) => void;\n  removeComponent: (id: string) => void;\n  t(key: string): string;\n}\n\n\nconst FontAwesomeIconIntercept = (props) => {\n  const {\n    childrenClassName, // pull this out\n    ...rest\n  } = props;\n\n  return <FontAwesomeIcon {...rest} />;\n};\n\nclass QuoteSectionComponents extends React.Component<IQuoteTemplateComponents & WithTranslation> {\n  public state = {\n    valueComponents: this.props.valueComponents,\n    searchedValueComponents: this.props.valueComponents,\n  };\n\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) { // tslint:disable-line\n    const { valueComponents } = nextProps;\n\n    if (!isEqual(nextProps.valueComponents, prevState.valueComponents)) {\n      return { valueComponents, searchedValueComponents: valueComponents };\n    }\n\n    return null;\n  }\n\n  public render() {\n    const { classes, addValue, addFormula, t } = this.props;\n    return (\n      <Grid className={classes.componentsContainer} container={true} item={true}>\n        <Grid item={true} xs={12}>\n          <FieldTextField\n            formControlProps={{\n              className: classes.searchField,\n            }}\n            inputProps={{\n              InputProps: {\n                endAdornment: (\n                  <InputAdornment position='end'>\n                    <FontAwesomeIcon className={classes.searchIcon} icon='search'/>\n                  </InputAdornment>\n                ),\n              },\n              name: 'searchComponent',\n              placeholder: t('quoteTemplate.searchPlaceholder'),\n              defaultValue: name,\n              onChange: this.onChange,\n              type: 'text',\n            }}\n            input={{} as any}\n            meta={{} as any}\n            label={t('quoteTemplate.searchLabel')}\n          />\n        </Grid>\n        <Grid container={true} item={true} xs={12} direction='column'>\n          {this.renderComponents('value')}\n          <Button\n            className={classes.addValueButton}\n            variant='text'\n            onClick={addValue}\n          >\n            {t('quoteTemplate.addValueLabel')}\n          </Button>\n        </Grid>\n        <Grid item={true} xs={12} className={classes.componentGrid}>\n          <Typography color='textPrimary' variant='caption' className={classes.formulaLabel}>{t('quoteTemplate.formulaLabel')}</Typography>\n          {this.renderComponents('formula')}\n          <Button\n            className={classes.addValueButton}\n            variant='text'\n            onClick={addFormula}\n          >\n            {t('quoteTemplate.addFormulaLabel')}\n          </Button>\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private renderComponents = (type: string) => {\n    const { classes, removeComponent, editComponent } = this.props;\n    const { searchedValueComponents } = this.state;\n\n    return searchedValueComponents\n      .filter((comp: any, index: number) => comp.type === type)\n      .map((comp: any, index: number) =>\n        <Grid key={index} item={true}>\n          <Chip\n            className={classes.componentChip}\n            data-name={comp.name}\n            data-fieldname={comp.fieldName}\n            draggable={true}\n            onDragStart={e => this.onDragStart(e, comp)}\n            label={comp.name}\n            deleteIcon={comp.custom ?\n              <FontAwesomeIcon className={classes.deleteIcon} icon='times-circle' size='2x'/> : undefined}\n            onDelete={comp.custom ? () => removeComponent(comp.id) : undefined}\n            avatar={<FontAwesomeIconIntercept className={classes.searchIcon} icon={valueType[comp.valueType].icon}/>}\n            onClick={comp.custom ? () => editComponent(comp.id) : undefined}\n          />\n        </Grid>\n      );\n  }\n\n  private onChange = (e: any) => {\n    e.persist();\n    this.debouncedSearch(e);\n  }\n\n  private onComponentSearch = (e: any) => {\n    const { valueComponents } = this.state;\n    const searchedValueComponents = valueComponents.filter(\n      (comp: any) => comp.name.toLowerCase().includes(e.target.value.toLowerCase())\n    );\n    this.setState({ searchedValueComponents });\n  }\n\n  private debouncedSearch = debounce(this.onComponentSearch, 500); // tslint:disable-line\n\n  private onDragStart = (e: any, comp: object) => {\n    e.dataTransfer.setData('component', JSON.stringify(comp));\n    e.dataTransfer.setData('componentNode', e.currentTarget.innerHTML);\n  }\n}\n\nexport default withTranslation('translations')(QuoteSectionComponents);\n","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Button,\n  Card,\n  CardContent, FormControl,\n  FormControlLabel,\n  Grid,\n  Radio,\n  RadioGroup,\n  Switch, TextField,\n  Typography,\n  Select,\n  MenuItem,\n} from '@material-ui/core';\nimport { isEqual } from 'lodash';\nimport FieldTextField from '../FieldTextField';\nimport { camelizeString, uniqueId } from '../../utils';\nimport { debounce } from 'lodash';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../containers/QuoteTemplate/utils';\n\ninterface ICustomValue {\n  classes: any;\n  addCustom: (params: object) => void;\n  cancelCustom: () => void;\n  componentToEdit?: object;\n  templateComponents: object[];\n\n  t(key: string): string;\n}\n\nclass CustomValue extends React.Component<ICustomValue & WithTranslation> {\n\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) { // tslint:disable-line\n    const {componentToEdit} = nextProps;\n\n    if (!isEqual(nextProps.componentToEdit, prevState.componentToEdit)) {\n      if (componentToEdit) {\n        return {...componentToEdit, componentToEdit: nextProps.componentToEdit};\n      } else {\n        return {...prevState, id: uniqueId(),};\n      }\n    }\n\n    return null;\n  }\n  public state = {\n    id: uniqueId(),\n    editable: false,\n    invisible: false,\n    printColumn: false,\n    fieldValue: '',\n    fieldType: 'integer',\n    pimType: '',\n    pimData: '',\n    roundingOption: ROUNDING_OPTIONS.NO_ROUNDING,\n    decimalPrecision: DECIMAL_PRECISION.TWO,\n    name: '',\n    fieldName: 'columnLabel',\n    valueType: 'storedData',\n    type: 'value',\n    custom: true,\n    componentToEdit: this.props.componentToEdit,\n    nameAlreadyExists: false,\n    ...this.props.componentToEdit,\n  };\n\n  public render() {\n    const {classes, addCustom, cancelCustom, t} = this.props;\n    const {id, fieldType, valueType, pimType, name, editable, invisible, fieldValue, nameAlreadyExists, pimData, printColumn, roundingOption, decimalPrecision = DECIMAL_PRECISION.TWO } = this.state;\n\n    const displayRoundingAndDecimalOptions = valueType === 'storedData' || fieldType !== 'integer';\n\n    return (\n      <Card className={classes.customValueCard}>\n        <CardContent>\n          <Grid container={true}>\n            <Grid item={true} xs={12}>\n              <Typography variant='body2'>{t('quoteTemplate.customAddValueTitle')}</Typography>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n              <Grid item={true} xs={5}>\n                <Typography className={classes.optionsTitle}\n                            variant='body1'>{t('quoteTemplate.customChooseValueTypeTitle')}</Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='valueType'\n                  className={classes.radioGroup}\n                  value={valueType}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelStoredData')}\n                    value='storedData'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelUserInput')}\n                    value='userInput'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelConstant')}\n                    value='constant'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n              <Grid className={classes.dividerContainer} item={true} xs={2}>\n                <div className={classes.verticalDivider}/>\n              </Grid>\n              {valueType !== 'storedData' &&\n                <Grid item={true} xs={5}>\n                    <Typography className={classes.optionsTitle}\n                                variant='body2'>{t('quoteTemplate.customChooseFieldTypeTitle')}</Typography>\n                    <RadioGroup\n                        aria-label='helper-text'\n                        name='fieldType'\n                        className={classes.radioGroup}\n                        value={fieldType}\n                        onChange={this.onFieldsChange}\n                    >\n                        <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelPrice')}\n                            value='price'\n                            control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelInteger')}\n                            value='integer'\n                            control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelDecimalNotRounded')}\n                            value='decimal'\n                            control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelPercentage')}\n                            value='percentage'\n                            control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelText')}\n                            value='text'\n                            control={<Radio className={classes.radio}/>}\n                        />\n                    </RadioGroup>\n                </Grid>\n              }\n              {valueType === 'storedData' &&\n                <Grid item={true} xs={5} container={true}>\n                  <Grid item={true} xs={12}>\n                      <Typography className={classes.optionsTitle}\n                                  variant='body2'>{t('quoteTemplate.selectPimData')}</Typography>\n                      <FormControl className={classes.formSelect}>\n                          <Select\n                              value={pimData}\n                              onChange={this.onFieldsChange}\n                              name={'pimData'}\n                              inputProps={{\n                                name: 'pimData'\n                              }}\n                          >\n                              <MenuItem value={'list'}>{t('pimDataType.listPrice')}</MenuItem>\n                              <MenuItem value={'sell'}>{t('pimDataType.sellPrice')}</MenuItem>\n                              <MenuItem value={'cost'}>{t('pimDataType.costPrice')}</MenuItem>\n                              <MenuItem value={'discount'}>{t('pimDataType.discount')}</MenuItem>\n                              <MenuItem value={'margin'}>{t('pimDataType.margin')}</MenuItem>\n                              <MenuItem value={'multiplier'}>{t('pimDataType.multiplier')}</MenuItem>\n                          </Select>\n                      </FormControl>\n                  </Grid>\n                  {/* {pimData && (pimData === 'list' || pimData === 'sell' || pimData === 'cost') &&\n                    <Grid item={true} xs={12}>\n                        <Typography className={classes.optionsTitle}\n                                    variant='body2'>{t('quoteTemplate.customChooseCurrency')}</Typography>\n                        <RadioGroup\n                            aria-label='helper-text'\n                            name='pimType'\n                            className={classes.radioGroupHorizontal}\n                            value={pimType}\n                            onChange={this.onFieldsChange}\n                        >\n                            <FormControlLabel\n                                className={classes.controlLabel}\n                                label={'USD'}\n                                value='USD'\n                                control={<Radio className={classes.radio}/>}\n                            />\n                            <FormControlLabel\n                                className={classes.controlLabel}\n                                label={'CAD'}\n                                value='CAD'\n                                control={<Radio className={classes.radio}/>}\n                            />\n                        </RadioGroup>\n                    </Grid>\n                  } */}\n                  {pimData && (pimData === 'discount' || pimData === 'margin' || pimData === 'multiplier') &&\n                  <Grid item={true} xs={12}>\n                    <Grid item={true} xs={12}>\n                      <Typography className={classes.optionsTitle}\n                                  variant='body2'>{t('quoteTemplate.customChooseFieldTypeTitle')}</Typography>\n                      <RadioGroup\n                        aria-label='helper-text'\n                        name='fieldType'\n                        className={classes.radioGroup}\n                        value={fieldType}\n                        onChange={this.onFieldsChange}\n                      >\n                        {pimData === 'discount' &&\n                          <FormControlLabel\n                            className={classes.controlLabel}\n                            label={t('quoteTemplate.radioLabelPrice')}\n                            value='price'\n                            control={<Radio className={classes.radio}/>}\n                          />\n                        }\n                        <FormControlLabel\n                          className={classes.controlLabel}\n                          label={t('quoteTemplate.radioLabelInteger')}\n                          value='integer'\n                          control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                          className={classes.controlLabel}\n                          label={t('quoteTemplate.radioLabelDecimalNotRounded')}\n                          value='decimal'\n                          control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                          className={classes.controlLabel}\n                          label={t('quoteTemplate.radioLabelPercentage')}\n                          value='percentage'\n                          control={<Radio className={classes.radio}/>}\n                        />\n                      </RadioGroup>\n                    </Grid>\n                    <Grid item={true} xs={12}>\n                        <Typography className={classes.optionsTitle}variant='body2'>\n                          {\n                            pimData === 'discount'\n                              ? t('quoteTemplate.chooseDiscountTypeLabel')\n                              : pimData === 'margin'\n                                ? t('quoteTemplate.chooseMarginTypeLabel')\n                                : t('quoteTemplate.chooseMultiplierTypeLabel')\n                          }\n                        </Typography>\n                        <RadioGroup\n                            aria-label='helper-text'\n                            name='pimType'\n                            className={classes.radioGroup}\n                            value={pimType}\n                            onChange={this.onFieldsChange}\n                        >\n                          <FormControlLabel\n                              className={classes.controlLabel}\n                              label={t('quoteTemplate.officeSpecificLabel')}\n                              value='office'\n                              control={<Radio className={classes.radio}/>}\n                          />\n                          <FormControlLabel\n                              className={classes.controlLabel}\n                              label={t('quoteTemplate.customerSpecificLabel')}\n                              value='customer'\n                              control={<Radio className={classes.radio}/>}\n                          />\n                        </RadioGroup>\n                    </Grid>\n                  </Grid>\n                  }\n                </Grid>\n              }\n            </Grid>\n            {\n              displayRoundingAndDecimalOptions && (\n                <Grid className={classes.optionsContainer} item={true} xs={12}>\n                  <Grid item={true} xs={5}>\n                    <Typography\n                      className={classes.optionsTitle}\n                      variant='body1'\n                    >\n                      {t('quoteTemplate.chooseRoundingOptionTitle')}\n                    </Typography>\n                    <RadioGroup\n                      aria-label='helper-text'\n                      name='roundingOption'\n                      className={classes.radioGroup}\n                      value={roundingOption}\n                      onChange={this.onFieldsChange}\n                    >\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.noRoundingLabel')}\n                        value={ROUNDING_OPTIONS.NO_ROUNDING}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.nearestCentRoundingLabel')}\n                        value={ROUNDING_OPTIONS.NEAREST_CENT}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.nearestNickleRoundingLabel')}\n                        value={ROUNDING_OPTIONS.NEAREST_NICKLE}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.nearestDimeRoundingLabel')}\n                        value={ROUNDING_OPTIONS.NEAREST_DIME}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.nearestDollarRoundingLabel')}\n                        value={ROUNDING_OPTIONS.NEAREST_DOLLAR}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                    </RadioGroup>\n                  </Grid>\n                  <Grid className={classes.dividerContainer} item={true} xs={2}>\n                    <div className={classes.verticalDivider}/>\n                  </Grid>\n                  <Grid item={true} xs={5}>\n                    <Typography\n                      className={classes.optionsTitle}\n                      variant='body1'\n                    >\n                      {t('quoteTemplate.decimalPrecisionTitle')}\n                    </Typography>\n                    <RadioGroup\n                      aria-label='helper-text'\n                      name='decimalPrecision'\n                      className={classes.radioGroup}\n                      value={decimalPrecision}\n                      onChange={this.onFieldsChange}\n                    >\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.twoDecimals')}\n                        value={DECIMAL_PRECISION.TWO}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.threeDecimals')}\n                        value={DECIMAL_PRECISION.THREE}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                      <FormControlLabel\n                        className={classes.controlLabel}\n                        label={t('quoteTemplate.fourDecimals')}\n                        value={DECIMAL_PRECISION.FOUR}\n                        control={<Radio className={classes.radio}/>}\n                      />\n                    </RadioGroup>\n                  </Grid>\n                </Grid>\n              )\n            }\n            {\n              valueType !== 'constant' ?\n                <Grid className={classes.optionsContainer} item={true} xs={12}>\n                  <FormControl error={(nameAlreadyExists)}\n                               className={classes.customColumnLabel}\n                               aria-describedby='helper-text'>\n                    <TextField\n                      label={t('quoteTemplate.columnTitleLabel')}\n                      name={'name'}\n                      defaultValue={this.state.name}\n                      placeholder={t('quoteTemplate.columnTitlePlaceholder')}\n                      onChange={this.debouncedEvent}\n                      helperText={<React.Fragment>{nameAlreadyExists && t('quoteTemplate.duplicateColumnLabelError')}</React.Fragment>}\n                      FormHelperTextProps={{\n                        error: nameAlreadyExists\n                      }}\n                    />\n                  </FormControl>\n                </Grid>\n                :\n                <Grid className={classes.optionsContainer} item={true} xs={12}>\n                  <Grid item={true} xs={5}>\n                    <FormControl error={(nameAlreadyExists)}\n                                 className={classes.customColumnLabel}\n                                 aria-describedby='helper-text'>\n                      <TextField\n                        label={t('quoteTemplate.columnTitleLabel')}\n                        name={'name'}\n                        defaultValue={this.state.name}\n                        placeholder={t('quoteTemplate.columnTitlePlaceholder')}\n                        onChange={this.debouncedEvent}\n                        helperText={<React.Fragment>{nameAlreadyExists && t('quoteTemplate.duplicateColumnLabelError')}</React.Fragment>}\n                        FormHelperTextProps={{\n                          error: nameAlreadyExists\n                        }}\n                      />\n                    </FormControl>\n                  </Grid>\n                  <Grid item={true} xs={2}/>\n                  <Grid item={true} xs={5}>\n                    <FieldTextField\n                      key={id}\n                      formControlProps={{\n                        className: classes.customConstantValue,\n                      }}\n                      label={t('quoteTemplate.constantValueLabel')}\n                      input={{} as any}\n                      meta={{} as any}\n                      inputProps={{\n                        name: 'fieldValue',\n                        placeholder: t('quoteTemplate.constantValuePlaceholder'),\n                        defaultValue: fieldValue,\n                        onChange: this.onFieldsChange,\n                      }}\n                    />\n                  </Grid>\n                </Grid>\n            }\n            <Grid className={classes.optionsContainer} item={true} xs={12}>\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='editable'\n                    color='primary'\n                    checked={editable}\n                  />\n                }\n                label={t('quoteTemplate.checkEditableLabel')}\n              />\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='invisible'\n                    color='primary'\n                    checked={invisible}\n                  />\n                }\n                label={t('quoteTemplate.checkInvisibleLabel')}\n              />\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='printColumn'\n                    color='primary'\n                    checked={printColumn}\n                  />\n                }\n                label={t('quoteTemplate.checkPrintColumnLabel')}\n              />\n            </Grid>\n            <Grid className={classes.customValueButtonsContainer} item={true} xs={12} spacing={1} container={true} justify='flex-end'>\n              <Grid\n                item={true}\n              >\n                <Button\n                  color='primary'\n                  onClick={cancelCustom}\n                  className={classes.textButton}\n                >\n                  {t('quoteTemplate.componentCancelLabel')}\n                </Button>\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Button\n                  className={classes.buttonAddCustom}\n                  variant='contained'\n                  disabled={this.state.nameAlreadyExists || !this.state.name}\n                  onClick={() => addCustom(this.state)}\n                >\n                  {\n                    this.props.componentToEdit\n                      ? t('quoteTemplate.componentEditLabel')\n                      : t('quoteTemplate.componentAddLabel')\n                  }\n                </Button>\n              </Grid>\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  }\n  private onColumnLabelChange = (e: any) => {\n    const {templateComponents} = this.props;\n    const target: any = e.target;\n    const fieldValue: any = target.value;\n    const nameAlreadyExists = templateComponents\n      .filter((component: any) => component.id !== this.state.id)\n      .find((component: any) => {\n        return component.fieldName === camelizeString(target.value);\n      });\n    if (nameAlreadyExists) {\n      this.setState({\n        nameAlreadyExists: true\n      });\n    } else {\n      const fieldProps = {\n        name: fieldValue,\n        fieldName: camelizeString(fieldValue),\n      };\n      this.setState({\n        nameAlreadyExists: false,\n        ...fieldProps\n      });\n    }\n  }\n  // tslint:disable-next-line\n  private debouncedOnColumnLabelChange = debounce(this.onColumnLabelChange, 500);\n\n  private onFieldsChange = (e: any) => {\n    const target: any = e.currentTarget.name ? e.currentTarget : e.target;\n    const fieldName: string = camelizeString(target.name);\n    let fieldValue: any = target.hasOwnProperty('checked') ? target.checked : target.value;\n\n    if (target.hasOwnProperty('checked') && target.value.length) {\n      fieldValue = target.value;\n    }\n    let fieldProps = {\n      [fieldName]: fieldValue,\n    };\n    if (fieldName === 'name') {\n      fieldProps = {\n        ...fieldProps,\n        fieldName: camelizeString(fieldValue),\n      };\n    }\n    if (fieldName === 'pimData' && ['list', 'sell', 'cost'].includes(fieldValue)) {\n      fieldProps = {\n        ...fieldProps,\n        fieldType: 'price',\n      };\n    }\n    if (fieldName === 'valueType') {\n      this.setState({\n        nameAlreadyExists: false,\n      });\n      if (fieldValue !== 'storedData') {\n        fieldProps['pimType'] = '';\n        fieldProps['pimData'] = '';\n      }\n      if (fieldValue !== 'constant') {\n        fieldProps['fieldValue'] = '';\n        fieldProps['formattedValue'] = '';\n      }\n      if (fieldValue === 'storedData') {\n        fieldProps['fieldType'] = 'price';\n        fieldProps['pimData'] = 'list';\n        fieldProps['pimType'] = '';\n        fieldProps['roundingOption'] = this.state.roundingOption || ROUNDING_OPTIONS.NO_ROUNDING;\n        fieldProps['decimalPrecision'] = this.state.decimalPrecision || DECIMAL_PRECISION.TWO;\n      }\n    }\n\n    if (fieldName === 'roundingOption' && !target.value) {\n      fieldProps[fieldName] = ROUNDING_OPTIONS.NO_ROUNDING;\n    }\n    if (fieldName === 'decimalPrecision') {\n      const val = Number(target.value ?? DECIMAL_PRECISION.TWO);\n      fieldProps[fieldName] = val;\n    }\n\n    this.setState({\n      decimalPrecision: this.state.decimalPrecision || DECIMAL_PRECISION.TWO,\n      ...fieldProps,\n    });\n  }\n\n  private debouncedEvent = (e: any) => {\n    e.persist();\n    this.debouncedOnColumnLabelChange(e);\n  }\n}\n\nexport default withTranslation('translations')(CustomValue);\n","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Button,\n  Card,\n  CardContent,\n  FormControlLabel,\n  Grid,\n  MenuItem,\n  Paper,\n  Radio,\n  RadioGroup,\n  Switch,\n  Tooltip,\n  Typography,\n  TextField,\n  FormControl,\n  FormHelperText,\n} from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { isEqual } from 'lodash';\nimport Autosuggest from 'react-autosuggest';\nimport * as match from 'autosuggest-highlight/match';\nimport * as parse from 'autosuggest-highlight/parse';\nimport FieldTextField from '../FieldTextField';\nimport { camelizeString } from '../../utils/camelizeString';\nimport { uniqueId } from '../../utils/uniqueId';\nimport * as FormulaParser from 'hot-formula-parser';\nimport { debounce } from 'lodash';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../containers/QuoteTemplate/utils';\n\nconst parser = new FormulaParser.Parser();\nexport const formulaRegex = new RegExp('\\\\$(?!{)(\\\\w+)?');\nexport const formulaVarRegex = new RegExp('\\\\${(\\\\w+)}(?!.*\\\\${(\\\\w+)})');\nconst allVarsRegex = new RegExp('\\\\${(\\\\w+)}', 'g');\nexport const formulaBeforeVarRegex = new RegExp('\\\\${?(\\\\w+)?(?!.*\\\\${?(\\\\w+)?)$');\nexport const formulaAfterVarRegex = new RegExp('^{?(\\\\w+)?}');\nexport const formulaBeforeStatementRegex = new RegExp('~(\\\\w+)?(?!.*~(\\\\w+)?)$');\nexport const formulaAfterStatementRegex = new RegExp('^\\\\~?(\\\\w+)?\\\\~');\nexport const formulaOperations = [\n  { label: '(', usage: '(' },\n  { label: ')', usage: ')' },\n  { label: '+', usage: '+' },\n  { label: '-', usage: '-' },\n  { label: '*', usage: '*' },\n  { label: '/', usage: '/' },\n  { label: '=', usage: '=' },\n];\nexport const formulaConditionalOperators = [\n  { label: '>', usage: '>' },\n  { label: '≥', usage: '>=' },\n  { label: '≤', usage: '=<' },\n  { label: '<', usage: '<' },\n  { label: '\\'', usage: '\\'' },\n  { label: ',', usage: ',' },\n  { label: '<>', usage: '<>' },\n  { label: 'NULL', usage: 'NULL' },\n];\nconst formulaErrors = {\n  '#ERROR!': 'quoteTemplate.formulaError1',\n  '#DIV/0!': 'quoteTemplate.formulaError2',\n  '#NAME?': 'quoteTemplate.formulaError3',\n  '#N/A': 'quoteTemplate.formulaError4',\n  '#NUM!': 'quoteTemplate.formulaError5',\n  '#VALUE!': 'quoteTemplate.formulaError6',\n};\ninterface ICustomFormula {\n  classes: any;\n  suggestions: any[];\n  addCustom: (params: object) => void;\n  cancelCustom: () => void;\n  componentToEdit?: object;\n  templateComponents: object[];\n  t(key: string): string;\n}\n\nclass CustomFormula extends React.Component<ICustomFormula & WithTranslation> {\n\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) { // tslint:disable-line\n    const { componentToEdit, suggestions } = nextProps;\n\n    if (!isEqual(nextProps.componentToEdit, prevState.componentToEdit)) {\n      if (componentToEdit) {\n        return { fieldData: { ...componentToEdit } };\n      } else {\n        return { fieldData: { ...prevState.fieldData, id: uniqueId(), } };\n      }\n    }\n\n    if (!isEqual(nextProps.suggestions, prevState.suggestions)) {\n      return { suggestions };\n    }\n\n    return null;\n  }\n  public state = {\n    fieldData: {\n      id: uniqueId(),\n      editable: false,\n      invisible: false,\n      printColumn: false,\n      fieldValue: '',\n      fieldType: 'integer',\n      roundingOption: ROUNDING_OPTIONS.NO_ROUNDING,\n      decimalPrecision: DECIMAL_PRECISION.TWO,\n      name: '',\n      fieldName: 'columnLabel',\n      valueType: 'formula',\n      formula: '',\n      type: 'formula',\n      custom: true,\n      allowMassUpdate: true,\n      ...this.props.componentToEdit,\n    },\n    nameAlreadyExists: false,\n    componentToEdit: this.props.componentToEdit,\n    suggestions: this.props.suggestions,\n    keptSuggestions: this.props.suggestions,\n    conditionalOperators: false,\n    formulaError: null,\n  };\n  private formula: string;\n  private cursorIndex: number = 0;\n  private formulaRef: any;\n\n  public render() {\n    const { classes, addCustom, cancelCustom, t } = this.props;\n    const { fieldData: { id, fieldType, name, editable, invisible, formula, printColumn, allowMassUpdate, roundingOption, decimalPrecision = DECIMAL_PRECISION.TWO }, keptSuggestions, nameAlreadyExists } = this.state;\n    return (\n      <Card className={classes.customValueCard}>\n        <CardContent>\n          <Grid container={true}>\n            <Grid item={true} xs={12}>\n              <Typography variant='body1'>{t('quoteTemplate.addFormulaTitle')}</Typography>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n              <Grid item={true} xs={5}>\n                <Typography className={classes.optionsTitle} variant='body2'>{t('quoteTemplate.customChooseFieldTypeTitle')}</Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='fieldType'\n                  className={classes.radioGroup}\n                  value={fieldType}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelPrice')}\n                    value='price'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelInteger')}\n                    value='integer'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelDecimal')}\n                    value='decimal'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelPercentage')}\n                    value='percentage'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n              <Grid className={classes.dividerContainer} item={true} xs={2}>\n                <div className={classes.verticalDivider}/>\n              </Grid>\n              <Grid item={true} xs={5}>\n                <Typography\n                  className={classes.optionsTitle}\n                  variant='body1'\n                >\n                  {t('quoteTemplate.calculationTitle')}\n                  <Tooltip\n                    title={t('quoteTemplate.calculationTooltip')}\n                    placement='right-end'\n                  >\n                    <span>\n                      <FontAwesomeIcon className={classes.infoIcon} icon='info-circle'/>\n                    </span>\n                  </Tooltip>\n                </Typography>\n                <Grid>\n                  {\n                    formulaOperations.map((op, index) =>\n                      <Button\n                        key={index}\n                        className={classes.operationButton}\n                        variant='text'\n                        onClick={() => this.inputOperators(op.usage)}\n                      >\n                        {op.label}\n                      </Button>\n                    )\n                  }\n                  <Button\n                    className={classes.operationButton}\n                    variant='text'\n                    onClick={this.conditionalClick}\n                  >\n                    IF\n                  </Button>\n                  {this.conditionalOperators()}\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid className={classes.optionsContainer} item={true} xs={12}>\n              <Grid item={true} xs={5}>\n                <Typography\n                  className={classes.optionsTitle}\n                  variant='body1'\n                >\n                  {t('quoteTemplate.chooseRoundingOptionTitle')}\n                </Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='roundingOption'\n                  className={classes.radioGroup}\n                  value={roundingOption}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.noRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NO_ROUNDING}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestCentRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_CENT}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestNickleRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_NICKLE}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestDimeRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_DIME}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestDollarRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_DOLLAR}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n              <Grid className={classes.dividerContainer} item={true} xs={2}>\n                <div className={classes.verticalDivider}/>\n              </Grid>\n              <Grid item={true} xs={5}>\n                <Typography\n                  className={classes.optionsTitle}\n                  variant='body1'\n                >\n                  {t('quoteTemplate.decimalPrecisionTitle')}\n                </Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='decimalPrecision'\n                  className={classes.radioGroup}\n                  value={decimalPrecision}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.twoDecimals')}\n                    value={DECIMAL_PRECISION.TWO}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.threeDecimals')}\n                    value={DECIMAL_PRECISION.THREE}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.fourDecimals')}\n                    value={DECIMAL_PRECISION.FOUR}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n              <Grid item={true} xs={6}>\n                <FormControl error={(nameAlreadyExists)}\n                             className={classes.customColumnLabel}\n                             aria-describedby='helper-text'>\n                  <TextField\n                    label={t('quoteTemplate.columnTitleLabel')}\n                    name={'name'}\n                    defaultValue={this.state.fieldData.name}\n                    placeholder={t('quoteTemplate.columnTitlePlaceholder')}\n                    onChange={this.debouncedEvent}\n                    helperText={<React.Fragment>{nameAlreadyExists && t('quoteTemplate.duplicateColumnLabelError')}</React.Fragment>}\n                    FormHelperTextProps={{\n                      error: nameAlreadyExists\n                    }}\n                  />\n                </FormControl>\n              </Grid>\n              <Grid item={true} xs={6}/>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n              <Autosuggest\n                key={id}\n                theme={templateFormulaStyles}\n                renderInputComponent={this.renderInputComponent}\n                suggestions={keptSuggestions}\n                onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n                onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n                getSuggestionValue={this.getSuggestionValue}\n                renderSuggestion={this.renderSuggestion}\n                highlightFirstSuggestion={true}\n                inputProps={{\n                  value: formula,\n                  onKeyDown: this.onFormulaKeyDown,\n                  onChange: this.onFormulaChange,\n                  onClick: this.onFormulaClick,\n                }}\n                renderSuggestionsContainer={options => (\n                  <Paper {...options.containerProps} square={true}>\n                    {options.children}\n                  </Paper>\n                )}\n                ref={(el: any) => this.formulaRef = el}\n              />\n            </Grid>\n            <Grid className={classes.optionsContainer} item={true} xs={12}>\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='editable'\n                    color='primary'\n                    checked={editable}\n                  />\n                }\n                label={t('quoteTemplate.checkEditableLabel')}\n              />\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='invisible'\n                    color='primary'\n                    checked={invisible}\n                  />\n                }\n                label={t('quoteTemplate.checkInvisibleLabel')}\n              />\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='printColumn'\n                    color='primary'\n                    checked={printColumn}\n                  />\n                }\n                label={t('quoteTemplate.checkPrintColumnLabel')}\n              />\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='allowMassUpdate'\n                    color='primary'\n                    checked={allowMassUpdate}\n                  />\n                }\n                label={t('quoteTemplate.checkAllowMassPriceUpdateLabel')}\n              />\n            </Grid>\n            <Grid className={classes.customValueButtonsContainer} item={true} xs={12} spacing={1} container={true} justify='flex-end'>\n              <Grid\n                item={true}\n              >\n                <Button\n                  color='primary'\n                  onClick={cancelCustom}\n                  className={classes.textButton}\n                >\n                  {t('quoteTemplate.componentCancelLabel')}\n                </Button>\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Button\n                  className={classes.buttonAddCustom}\n                  variant='contained'\n                  disabled={this.state.nameAlreadyExists || !this.state.fieldData.name}\n                  onClick={() => addCustom(this.state.fieldData)}\n                >\n                  {\n                    this.props.componentToEdit\n                      ? t('quoteTemplate.componentEditLabel')\n                      : t('quoteTemplate.componentAddLabel')\n                  }\n                </Button>\n              </Grid>\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  }\n\n  private onFieldsChange = (e: any) => {\n    const target: any = e.currentTarget;\n    const fieldName: string = camelizeString(target.name);\n    let fieldValue: any = target.hasOwnProperty('checked') ? target.checked : target.value;\n\n    if (target.hasOwnProperty('checked') && target.value.length) {\n      fieldValue = target.value;\n    }\n    const fieldProps = {\n      [fieldName]: fieldValue,\n    };\n\n    if (fieldName === 'roundingOption' && !target.value) {\n      fieldProps[fieldName] = ROUNDING_OPTIONS.NO_ROUNDING;\n    }\n    if (fieldName === 'decimalPrecision') {\n      const val = Number(target.value ?? DECIMAL_PRECISION.TWO);\n      fieldProps[fieldName] = val;\n    }\n\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        ...fieldProps,\n      }\n    });\n  }\n  private onColumnLabelChange = (e: any) => {\n    const { templateComponents } = this.props;\n    const target: any = e.target;\n    const fieldValue: any = target.value;\n    const nameAlreadyExists = templateComponents\n      .filter((component: any) => component.id !== this.state.fieldData.id)\n      .find((component: any) => {\n        return component.fieldName === camelizeString(target.value);\n      });\n    if (nameAlreadyExists) {\n      this.setState({\n        nameAlreadyExists: true\n      });\n    } else {\n      const fieldProps = {\n        name: fieldValue,\n        fieldName: camelizeString(fieldValue),\n      };\n      this.setState({\n        nameAlreadyExists: false,\n        fieldData: {\n          ...this.state.fieldData,\n          ...fieldProps,\n        }\n      });\n    }\n  }\n  // tslint:disable-next-line\n  private debouncedOnColumnLabelChange = debounce(this.onColumnLabelChange, 500);\n\n  private debouncedEvent = (e: any) => {\n    e.persist();\n    this.debouncedOnColumnLabelChange(e);\n  }\n\n  private onFormulaChange = (e: any, inputValue: any) => {\n    let syntheticCursorPOS;\n    if (inputValue.method === 'enter' || inputValue.method === 'click' || !e.target.value) {\n      const value = inputValue.newValue;\n\n      if (formulaRegex.test(this.formula) && value.length) {\n        this.formula = this.formula.replace(formulaRegex, `\\$\\{${value}\\}`);\n      } else {\n        this.formula = value;\n      }\n      syntheticCursorPOS = this.cursorIndex + `\\$\\{${value}\\}`.length;\n    } else {\n      this.formula = e.target.value;\n    }\n\n    this.cursorIndex = syntheticCursorPOS || e.target.selectionStart;\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula: this.formula,\n      },\n      formulaError: validateFormula(this.formula, this.state.suggestions),\n    });\n  }\n\n  private conditionalClick = () => {\n    const ifStatement = 'IF( ~CONDITION~ , ~THEN~ , ~ELSE~ )';\n    const formula = !this.state.conditionalOperators\n      ? insertIntoString(this.state.fieldData.formula, ifStatement, this.cursorIndex)\n      : this.state.fieldData.formula;\n    triggerChange(this.formulaRef.input, formula);\n    this.formulaRef.input.focus();\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula,\n      },\n      conditionalOperators: !this.state.conditionalOperators,\n    });\n  }\n\n  private conditionalOperators = () => {\n    const { classes } = this.props;\n    if (this.state.conditionalOperators) {\n      return formulaConditionalOperators.map((op, index) =>\n        <Button\n          key={index}\n          className={classes.conditionalButton}\n          variant='text'\n          onClick={() => this.inputOperators(op.usage)}\n        >\n          {op.label}\n        </Button>\n      );\n    }\n    return;\n  }\n\n  private inputOperators = (operator: string) => {\n    const formula = insertIntoString(this.state.fieldData.formula, operator, this.cursorIndex);\n    triggerChange(this.formulaRef.input, formula);\n    this.formulaRef.input.focus();\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula,\n      }\n    });\n  }\n\n  private onFormulaClick = (e: any) => {\n    if (!e.target.value) {\n      return;\n    }\n    this.cursorIndex = e.target.selectionStart;\n    const value = e.target.value;\n    const selectionStart = e.target.selectionStart;\n    const valueToSelection = value.slice(0, selectionStart);\n    const beforeCursor = valueToSelection.match(formulaBeforeVarRegex) || valueToSelection.match(formulaBeforeStatementRegex);\n    const afterCursor = value.slice(selectionStart, value.length).match(formulaAfterVarRegex) ||\n      value.slice(selectionStart, value.length).match(formulaAfterStatementRegex);\n    if (beforeCursor && afterCursor) {\n      e.preventDefault();\n      e.stopPropagation();\n      const beforeCursorLength = beforeCursor[0].length;\n      const afterCursorLength = afterCursor[0].length;\n      e.target.setSelectionRange(selectionStart - beforeCursorLength, selectionStart + afterCursorLength);\n    }\n  }\n\n  private onFormulaKeyDown = (e: any) => {\n    switch (e.key) {\n      case 'Backspace':\n        const selectionStart = e.target.selectionStart;\n        const value = e.target.value;\n        const valueToSelection = value.slice(0, selectionStart);\n        const matchNextValue = valueToSelection.match(formulaVarRegex);\n        const nextChar = value.slice(selectionStart - 1, selectionStart);\n        if (matchNextValue && /\\}/.test(nextChar)) {\n          e.preventDefault();\n          e.stopPropagation();\n          const selectionRange = matchNextValue[0].length;\n          e.target.setSelectionRange(selectionStart - selectionRange, selectionStart);\n        } else if (!matchNextValue) {\n          const beforeCursor = valueToSelection.match(formulaBeforeVarRegex);\n          const afterCursor = value.slice(selectionStart, value.length).match(formulaAfterVarRegex);\n          if (beforeCursor && afterCursor) {\n            e.preventDefault();\n            e.stopPropagation();\n            const beforeCursorLength = beforeCursor[0].length;\n            const afterCursorLength = afterCursor[0].length;\n            e.target.setSelectionRange(selectionStart - beforeCursorLength, selectionStart + afterCursorLength);\n          }\n        }\n        break;\n      case 'ArrowLeft':\n        this.cursorIndex = e.target.selectionStart - 1;\n        break;\n      case 'ArrowRight':\n        this.cursorIndex = e.target.selectionEnd + 1;\n        break;\n      case 'Enter':\n        e.preventDefault();\n        e.stopPropagation();\n        break;\n    }\n  }\n\n  // private validateFormula = (formula: string) => {\n  //   let temporaryFormula = formula;\n  //   if (allVarsRegex.test(formula)) {\n  //     // @ts-ignore\n  //     formula.match(allVarsRegex).forEach((variable) => {\n  //       // @ts-ignore\n  //       const parserVar = variable.match(formulaVarRegex)[1];\n  //       const suggestion = this.state.suggestions.find((elm: any) => elm.fieldName === parserVar);\n  //       if (suggestion) {\n  //         parser.setVariable(parserVar, 1);\n  //       }\n  //       temporaryFormula = temporaryFormula.replace(variable, parserVar);\n  //     });\n  //   }\n\n  //   return formulaErrors[parser.parse(temporaryFormula).error];\n  // }\n\n  private renderInputComponent = (inputProps: any) => {\n    const { classes, t } = this.props;\n    const { fieldData: { id }, formulaError } = this.state;\n    const { inputRef = () => {}, ref, ...other } = inputProps; //tslint:disable-line\n    return (\n      <FieldTextField\n        key={id}\n        input={{}}\n        formControlProps={{\n          className: classes.customColumnLabel,\n        }}\n        inputProps={{\n          multiline: true,\n          inputRef: (node: any) => {\n            ref(node);\n            inputRef(node);\n          },\n        }}\n        meta={{\n          touched: true,\n          error: t(formulaError)\n        }}\n        label={t('quoteTemplate.formulaTitleLabel')}\n        name='formula'\n        placeholder={t('quoteTemplate.formulaTitlePlaceholder')}\n        fullWidth={true}\n        {...other}\n      />\n    );\n  }\n\n  private renderSuggestion = (suggestion: any, options: any) => {\n    const { query, isHighlighted } = options;\n    const matches = match(suggestion.fieldName, query.replace('$', ''));\n    const parts = parse(suggestion.fieldName, matches);\n    return (\n      <MenuItem selected={isHighlighted}>\n        <div>\n          {parts.map((part: any, index: any) => {\n            return part.highlight ?\n              <span key={String(index)} style={{ fontWeight: 500 }}>{part.text}</span>\n              : <strong key={String(index)} style={{ fontWeight: 300 }}>{part.text}</strong>;\n          })}\n        </div>\n      </MenuItem>\n    );\n  }\n\n  private onSuggestionsFetchRequested = (input: any) => {\n    this.setState({\n      keptSuggestions: this.getSuggestions(input.value)\n    });\n  }\n\n  private onSuggestionsClearRequested = () => {\n    this.setState({\n      keptSuggestions: []\n    });\n  }\n\n  private getSuggestions = (value: string) => {\n\n    return !formulaRegex.test(value)\n      ? []\n      : this.state.suggestions.filter(suggestion => {\n        const valueMatch: any = this.formula.match(formulaRegex);\n        if (suggestion.id === this.state.fieldData.id) {\n          return false;\n        }\n        return suggestion.fieldName.includes(valueMatch[0].replace('$', '')) && suggestion;\n      });\n  }\n\n  private getSuggestionValue = (suggestion: any) => {\n    return suggestion.fieldName;\n  }\n\n  // private insert = (main_string: string, ins_string: string, pos: number) => {\n  //   if (typeof(pos) === 'undefined') {\n  //     pos = 0;\n  //   }\n  //   if (typeof(ins_string) === 'undefined') {\n  //     ins_string = '';\n  //   }\n  //   return `${main_string.slice(0, pos)}${ins_string}${main_string.slice(pos)}`;\n  // }\n\n  // private triggerChange = (input: any, value: string) => {\n  //   const evt = new Event('input', { bubbles: true });\n  //   const element = input.tagName === 'TEXTAREA' ? HTMLTextAreaElement : HTMLInputElement;\n  //   // @ts-ignore\n  //   Object.getOwnPropertyDescriptor(element.prototype, 'value').set.call(input, value);\n  //   input.dispatchEvent(evt);\n  // }\n}\n\nexport const insertIntoString = (main_string: string, ins_string: string, pos: number) => {\n  if (typeof(pos) === 'undefined') {\n    pos = 0;\n  }\n  if (typeof(ins_string) === 'undefined') {\n    ins_string = '';\n  }\n  return `${main_string.slice(0, pos)}${ins_string}${main_string.slice(pos)}`;\n};\n\nexport const triggerChange = (input: any, value: string) => {\n  const evt = new Event('input', { bubbles: true });\n  const element = input.tagName === 'TEXTAREA' ? HTMLTextAreaElement : HTMLInputElement;\n  // @ts-ignore\n  Object.getOwnPropertyDescriptor(element.prototype, 'value').set.call(input, value);\n  input.dispatchEvent(evt);\n};\n\nexport const validateFormula = (formula: string, suggestions: any[]) => {\n  let temporaryFormula = formula;\n  if (allVarsRegex.test(formula)) {\n    // @ts-ignore\n    formula.match(allVarsRegex).forEach((variable) => {\n      // @ts-ignore\n      const parserVar = variable.match(formulaVarRegex)[1];\n      const suggestion = suggestions.find((elm: any) => elm.fieldName === parserVar);\n      if (suggestion) {\n        parser.setVariable(parserVar, 1);\n      }\n      temporaryFormula = temporaryFormula.replace(variable, parserVar);\n    });\n  }\n\n  return formulaErrors[parser.parse(temporaryFormula).error];\n};\n\nexport const templateFormulaStyles = {\n  container: {\n    position: 'relative',\n    width: '100%',\n  },\n  suggestionsContainerOpen: {\n    position: 'absolute',\n    zIndex: 100,\n    overflowY: 'scroll',\n    left: 0,\n    right: 0,\n  },\n  suggestion: {\n    display: 'block',\n  },\n  suggestionsList: {\n    display: 'flex',\n    flexDirection: 'column',\n    maxHeight: 100,\n    width: '100%',\n    margin: 0,\n    padding: 0,\n    overflowY: 'scroll',\n    listStyleType: 'none',\n  },\n} as object;\n\nexport default withTranslation('translations')(CustomFormula);\n","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Button,\n  Card,\n  CardContent,\n  FormControl,\n  FormControlLabel,\n  Grid,\n  InputLabel,\n  MenuItem,\n  Radio,\n  RadioGroup,\n  Select,\n  Switch,\n  TextField,\n  Typography,\n  Paper,\n  Tooltip,\n} from '@material-ui/core';\nimport { isEqual, round } from 'lodash';\nimport FieldTextField from '../FieldTextField';\nimport { camelizeString } from '../../utils/camelizeString';\nimport { uniqueId } from '../../utils/uniqueId';\nimport Autosuggest from 'react-autosuggest';\nimport * as match from 'autosuggest-highlight/match';\nimport * as parse from 'autosuggest-highlight/parse';\nimport * as FormulaParser from 'hot-formula-parser';\nimport { debounce } from 'lodash';\nimport { formulaAfterStatementRegex, formulaAfterVarRegex, formulaBeforeStatementRegex, formulaBeforeVarRegex, formulaConditionalOperators, formulaOperations, formulaRegex, formulaVarRegex, insertIntoString, templateFormulaStyles, triggerChange, validateFormula } from './CustomFormula';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../containers/QuoteTemplate/utils';\n\nconst defaultFieldData = {\n  // id: uniqueId(),\n  name: 'Section Amount',\n  fieldName: 'sectionAmount',\n  fieldType: 'integer',\n  fieldValue: '',\n  calculationComplexity: 'simple',\n  calculationType: 'sum',\n  selectedColumn: '',\n  type: 'calculation',\n  custom: true,\n  printColumn: true,\n  formula: '',\n  roundingOption: ROUNDING_OPTIONS.NEAREST_CENT,\n  decimalPrecision: DECIMAL_PRECISION.TWO,\n};\n\ninterface ISectionCalculation {\n  classes: any;\n  columns: any[];\n  sectionCalculations: any[];\n  addSectionCalculation: (params: object) => void;\n  cancelSectionCalculation: () => void;\n  componentToEdit?: object;\n  t(key: string): string;\n}\n\nclass SectionCalculation extends React.Component<ISectionCalculation & WithTranslation> {\n  public state = {\n    fieldData: {\n      ...defaultFieldData,\n      id: uniqueId(),\n      ...this.props.componentToEdit,\n    },\n    componentToEdit: this.props.componentToEdit,\n    columns: this.props.columns,\n    nameAlreadyExists: false,\n\n    suggestions: this.props.columns,\n    keptSuggestions: this.props.columns,\n    conditionalOperators: false,\n    formulaError: null,\n  };\n\n  private formula: string;\n  private cursorIndex: number = 0;\n  private formulaRef: any;\n\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) { // tslint:disable-line\n    const { columns, componentToEdit } = nextProps;\n    if (!isEqual(nextProps.componentToEdit, prevState.componentToEdit)) {\n      if (componentToEdit) {\n        return {\n          fieldData: {\n            calculationComplexity: defaultFieldData.calculationComplexity,\n            formula: defaultFieldData.formula,\n            roundingOption: defaultFieldData.roundingOption,\n            decimalPrecision: defaultFieldData.decimalPrecision,\n            ...componentToEdit\n          },\n          componentToEdit: nextProps.componentToEdit\n        };\n      } else {\n        return { fieldData: { ...defaultFieldData, id: uniqueId(), }, componentToEdit, nameAlreadyExists: false };\n      }\n    }\n\n    if (!isEqual(nextProps.columns, prevState.columns)) {\n      return { columns };\n    }\n\n    return null;\n  }\n\n  public render() {\n    const { classes, cancelSectionCalculation, t } = this.props;\n    const {\n      fieldData: { id, name, fieldType, calculationComplexity, calculationType, selectedColumn, printColumn, formula, roundingOption, decimalPrecision = DECIMAL_PRECISION.TWO },\n      columns,\n      nameAlreadyExists,\n\n      keptSuggestions,\n    } = this.state;\n\n      return (\n      <Card className={classes.customValueCard}>\n        <CardContent>\n          <Grid container={true}>\n            <Grid item={true} xs={12}>\n              <Typography variant='body2'>{t('quoteTemplate.sectionCalcTitle')}</Typography>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n              <Grid item={true} xs={5}>\n                <Typography className={classes.optionsTitle} variant='body1'>{t('quoteTemplate.chooseCalculationComplexityLabel')}</Typography>\n                <RadioGroup\n                  aria-label='calculation complexity'\n                  name='calculationComplexity'\n                  className={classes.radioGroup}\n                  value={calculationComplexity}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.simpleCalculationLabel')}\n                    value='simple'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.complexCalculationLabel')}\n                    value='complex'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n\n                {\n                  calculationComplexity !== 'complex' &&\n                  <>\n                    <Typography className={classes.optionsTitle} variant='body1'>{t('quoteTemplate.customChooseFieldTypeTitle')}</Typography>\n                      <RadioGroup\n                        aria-label='calculation type'\n                        name='calculationType'\n                        className={classes.radioGroup}\n                        value={calculationType}\n                        onChange={this.onFieldsChange}\n                      >\n                        <FormControlLabel\n                          className={classes.controlLabel}\n                          label={t('quoteTemplate.radioCalcSum')}\n                          value='sum'\n                          control={<Radio className={classes.radio}/>}\n                        />\n                        <FormControlLabel\n                          className={classes.controlLabel}\n                          label={t('quoteTemplate.radioCalcAverage')}\n                          value='average'\n                          control={<Radio className={classes.radio}/>}\n                        />\n                      </RadioGroup>\n                  </>\n                }\n              </Grid>\n              <Grid className={classes.dividerContainer} item={true} xs={2}>\n                <div className={classes.verticalDivider}/>\n              </Grid>\n              <Grid item={true} xs={5}>\n                <Typography className={classes.optionsTitle} variant='body2'>{t('quoteTemplate.customChooseFieldTypeTitle')}</Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='fieldType'\n                  className={classes.radioGroup}\n                  value={fieldType}\n                  onChange={this.onFieldsChange}\n                >\n                  {calculationType === 'sum' &&\n                    <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelPrice')}\n                    value='price'\n                    control={<Radio className={classes.radio}/>}\n                    />\n                  }\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelInteger')}\n                    value='integer'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelDecimal')}\n                    value='decimal'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.radioLabelPercentage')}\n                    value='percentage'\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n\n                {\n                  calculationComplexity === 'complex' && <>\n                    <Grid item={true} xs={12}>\n                      <Typography\n                        className={classes.optionsTitle}\n                        variant='body1'\n                      >\n                        {t('quoteTemplate.calculationTitle')}\n                        <Tooltip\n                          title={t('quoteTemplate.calculationTooltip')}\n                          placement='right-end'\n                        >\n                          <span>\n                            <FontAwesomeIcon className={classes.infoIcon} icon='info-circle'/>\n                          </span>\n                        </Tooltip>\n                      </Typography>\n                      <Grid>\n                        {\n                          formulaOperations.map((op, index) =>\n                            <Button\n                              key={index}\n                              className={classes.operationButton}\n                              variant='text'\n                              onClick={() => this.inputOperators(op.usage)}\n                            >\n                              {op.label}\n                            </Button>\n                          )\n                        }\n                        <Button\n                          className={classes.operationButton}\n                          variant='text'\n                          onClick={this.conditionalClick}\n                        >\n                          IF\n                        </Button>\n                        {this.conditionalOperators()}\n                      </Grid>\n                    </Grid>\n                  </>\n                }\n              </Grid>\n            </Grid>\n            <Grid className={classes.optionsContainer} item={true} xs={12}>\n              <Grid item={true} xs={5}>\n                <Typography\n                  className={classes.optionsTitle}\n                  variant='body1'\n                >\n                  {t('quoteTemplate.chooseRoundingOptionTitle')}\n                </Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='roundingOption'\n                  className={classes.radioGroup}\n                  value={roundingOption ?? ROUNDING_OPTIONS.NEAREST_CENT}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.noRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NO_ROUNDING}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestCentRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_CENT}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestNickleRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_NICKLE}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestDimeRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_DIME}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.nearestDollarRoundingLabel')}\n                    value={ROUNDING_OPTIONS.NEAREST_DOLLAR}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n              <Grid className={classes.dividerContainer} item={true} xs={2}>\n                <div className={classes.verticalDivider}/>\n              </Grid>\n              <Grid item={true} xs={5}>\n                <Typography\n                  className={classes.optionsTitle}\n                  variant='body1'\n                >\n                  {t('quoteTemplate.decimalPrecisionTitle')}\n                </Typography>\n                <RadioGroup\n                  aria-label='helper-text'\n                  name='decimalPrecision'\n                  className={classes.radioGroup}\n                  value={decimalPrecision}\n                  onChange={this.onFieldsChange}\n                >\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.twoDecimals')}\n                    value={DECIMAL_PRECISION.TWO}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.threeDecimals')}\n                    value={DECIMAL_PRECISION.THREE}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                  <FormControlLabel\n                    className={classes.controlLabel}\n                    label={t('quoteTemplate.fourDecimals')}\n                    value={DECIMAL_PRECISION.FOUR}\n                    control={<Radio className={classes.radio}/>}\n                  />\n                </RadioGroup>\n              </Grid>\n            </Grid>\n            <Grid className={classes.optionsContainer} container={true} item={true} xs={12} style={{ marginTop: 24 }}>\n              <Grid item={true} xs={5}>\n                <FormControl\n                  error={(nameAlreadyExists)}\n                  className={classes.customColumnLabel}\n                  aria-describedby='helper-text'\n                >\n                  <TextField\n                    label={t('quoteTemplate.sectionCalcLabel')}\n                    name={'name'}\n                    // defaultValue={name}\n                    value={name}\n                    placeholder={t('quoteTemplate.sectionCalcPlaceholder')}\n                    onChange={this.onFieldsChange}\n                    helperText={\n                      <React.Fragment>\n                        { (nameAlreadyExists && t('quoteTemplate.duplicateColumnLabelError')) || (!name && 'Required') }\n                      </React.Fragment>\n                    }\n                    FormHelperTextProps={{\n                      error: nameAlreadyExists || !name,\n                    }}\n                  />\n                </FormControl>\n              </Grid>\n              <Grid item={true} xs={2}/>\n              {\n                calculationComplexity === 'simple' &&\n                <Grid item={true} xs={5}>\n                  <FormControl className={classes.optionSelector}>\n                    <InputLabel htmlFor='columnSelector'>{t('quoteTemplate.columnSelectorLabel')}</InputLabel>\n                    <Select\n                      key={id}\n                      value={selectedColumn}\n                      onChange={this.onFieldsChange}\n                      inputProps={{\n                        name: 'selectedColumn',\n                        id: 'columnSelector',\n                      }}\n                    >\n                      {columns.map((column: any, index: number) =>\n                        <MenuItem key={index} value={column.id}>{column.name}</MenuItem>\n                      )}\n                    </Select>\n                  </FormControl>\n                </Grid>\n              }\n            </Grid>\n            {\n              calculationComplexity === 'complex' && <>\n                <Grid className={classes.optionsContainer} container={true} item={true} xs={12}>\n                  <Autosuggest\n                    key={id}\n                    theme={templateFormulaStyles}\n                    renderInputComponent={this.renderInputComponent}\n                    suggestions={keptSuggestions}\n                    onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n                    onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n                    getSuggestionValue={this.getSuggestionValue}\n                    renderSuggestion={this.renderSuggestion}\n                    highlightFirstSuggestion={true}\n                    inputProps={{\n                      value: formula,\n                      onKeyDown: this.onFormulaKeyDown,\n                      onChange: this.onFormulaChange,\n                      onClick: this.onFormulaClick,\n                    }}\n                    renderSuggestionsContainer={options => (\n                      <Paper {...options.containerProps} square={true}>\n                        {options.children}\n                      </Paper>\n                    )}\n                    ref={(el: any) => this.formulaRef = el}\n                  />\n                </Grid>\n              </>\n            }\n            <Grid className={classes.optionsContainer}>\n              <FormControlLabel\n                control={\n                  <Switch\n                    onChange={this.onFieldsChange}\n                    name='printColumn'\n                    color='primary'\n                    checked={printColumn ?? defaultFieldData.printColumn}\n                  />\n                }\n                label={t('quoteTemplate.checkPrintColumnLabel')}\n              />\n            </Grid>\n            <Grid className={classes.customValueButtonsContainer} item={true} xs={12} spacing={1} container={true} justify='flex-end'>\n              <Grid\n                item={true}\n              >\n                <Button\n                  color='primary'\n                  onClick={cancelSectionCalculation}\n                  className={classes.textButton}\n                >\n                  {t('quoteTemplate.componentCancelLabel')}\n                </Button>\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Button\n                  className={classes.buttonAddCustom}\n                  variant='contained'\n                  disabled={nameAlreadyExists || !name}\n                  onClick={this.addCalc}\n                >\n                  {\n                    this.props.componentToEdit\n                      ? t('quoteTemplate.componentEditLabel')\n                      : t('quoteTemplate.componentAddLabel')\n                  }\n                </Button>\n              </Grid>\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  }\n\n  private addCalc = () => {\n    if (this.checkIsDuplicateName(camelizeString(this.state.fieldData.name))) {\n      this.setState({\n        nameAlreadyExists: true\n      });\n    } else {\n      this.props.addSectionCalculation(this.state.fieldData);\n    }\n  }\n\n  private renderInputComponent = (inputProps: any) => {\n    const { classes, t } = this.props;\n    const { fieldData: { id }, formulaError } = this.state;\n    const { inputRef = () => {}, ref, ...other } = inputProps; //tslint:disable-line\n    return (\n      <FieldTextField\n        key={id}\n        input={{}}\n        formControlProps={{\n          className: classes.customColumnLabel,\n        }}\n        inputProps={{\n          multiline: true,\n          inputRef: (node: any) => {\n            ref(node);\n            inputRef(node);\n          },\n        }}\n        meta={{\n          touched: true,\n          error: t(formulaError)\n        }}\n        label={t('quoteTemplate.formulaTitleLabel')}\n        name='formula'\n        placeholder={t('quoteTemplate.formulaTitlePlaceholder')}\n        fullWidth={true}\n        {...other}\n      />\n    );\n  }\n\n  private renderSuggestion = (suggestion: any, options: any) => {\n    const { query, isHighlighted } = options;\n    const matches = match(suggestion.fieldName, query.replace('$', ''));\n    const parts = parse(suggestion.fieldName, matches);\n    return (\n      <MenuItem selected={isHighlighted}>\n        <div>\n          {parts.map((part: any, index: any) => {\n            return part.highlight ?\n              <span key={String(index)} style={{ fontWeight: 500 }}>{part.text}</span>\n              : <strong key={String(index)} style={{ fontWeight: 300 }}>{part.text}</strong>;\n          })}\n        </div>\n      </MenuItem>\n    );\n  }\n\n  private onSuggestionsFetchRequested = (input: any) => {\n    this.setState({\n      keptSuggestions: this.getSuggestions(input.value)\n    });\n  }\n\n  private onSuggestionsClearRequested = () => {\n    this.setState({\n      keptSuggestions: []\n    });\n  }\n\n  private getSuggestions = (value: string) => {\n    return !formulaRegex.test(value)\n      ? []\n      : this.state.suggestions.filter(suggestion => {\n        const valueMatch: any = this.formula.match(formulaRegex);\n        if (suggestion.id === this.state.fieldData.id) {\n          return false;\n        }\n        return suggestion.fieldName.includes(valueMatch[0].replace('$', '')) && suggestion;\n      });\n  }\n\n  private getSuggestionValue = (suggestion: any) => {\n    return suggestion.fieldName;\n  }\n\n  private checkIsDuplicateName = (camelizeName: string) => {\n    const {sectionCalculations} = this.props;\n    return Boolean(sectionCalculations\n      .filter((component: any) => component.id !== this.state.fieldData.id)\n      .find((component: any) => {\n        return component.fieldName === camelizeName;\n      }));\n  }\n\n  private onFieldsChange = (e: any) => {\n    const target: any = e.target;\n    const fieldName: string = camelizeString(target.name);\n    let fieldValue: any = target.hasOwnProperty('checked') ? target.checked : target.value;\n    let nameAlreadyExists;\n\n    if (target.hasOwnProperty('checked') && target.value.length) {\n      fieldValue = target.value;\n    }\n    let fieldProps = {\n      [fieldName]: fieldValue,\n    };\n    if (fieldName === 'name') {\n      const camelizeName = camelizeString(fieldValue);\n      fieldProps = {\n        [fieldName]: fieldValue,\n        fieldName: camelizeName,\n      };\n\n      nameAlreadyExists = this.checkIsDuplicateName(camelizeName);\n    }\n\n    if (fieldName === 'calculationComplexity' && fieldValue === 'complex') {\n      fieldProps = {\n        [fieldName]: fieldValue,\n        calculationType: 'sum',\n      };\n    }\n\n    if (fieldName === 'roundingOption' && !target.value) {\n      fieldProps[fieldName] = ROUNDING_OPTIONS.NO_ROUNDING;\n    }\n    if (fieldName === 'decimalPrecision') {\n      const val = Number(target.value ?? DECIMAL_PRECISION.TWO);\n      fieldProps[fieldName] = val;\n    }\n\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        ...fieldProps,\n      },\n      nameAlreadyExists\n    });\n  }\n\n  private onFormulaChange = (e: any, inputValue: any) => {\n    let syntheticCursorPOS;\n    if (inputValue.method === 'enter' || inputValue.method === 'click' || !e.target.value) {\n      const value = inputValue.newValue;\n\n      if (formulaRegex.test(this.formula) && value.length) {\n        this.formula = this.formula.replace(formulaRegex, `\\$\\{${value}\\}`);\n      } else {\n        this.formula = value;\n      }\n      syntheticCursorPOS = this.cursorIndex + `\\$\\{${value}\\}`.length;\n    } else {\n      this.formula = e.target.value;\n    }\n\n    this.cursorIndex = syntheticCursorPOS || e.target.selectionStart;\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula: this.formula,\n      },\n      formulaError: validateFormula(this.formula, this.state.suggestions),\n    });\n  }\n\n  private onFormulaClick = (e: any) => {\n    if (!e.target.value) {\n      return;\n    }\n    this.cursorIndex = e.target.selectionStart;\n    const value = e.target.value;\n    const selectionStart = e.target.selectionStart;\n    const valueToSelection = value.slice(0, selectionStart);\n    const beforeCursor = valueToSelection.match(formulaBeforeVarRegex) || valueToSelection.match(formulaBeforeStatementRegex);\n    const afterCursor = value.slice(selectionStart, value.length).match(formulaAfterVarRegex) ||\n      value.slice(selectionStart, value.length).match(formulaAfterStatementRegex);\n    if (beforeCursor && afterCursor) {\n      e.preventDefault();\n      e.stopPropagation();\n      const beforeCursorLength = beforeCursor[0].length;\n      const afterCursorLength = afterCursor[0].length;\n      e.target.setSelectionRange(selectionStart - beforeCursorLength, selectionStart + afterCursorLength);\n    }\n  }\n\n  private onFormulaKeyDown = (e: any) => {\n    switch (e.key) {\n      case 'Backspace':\n        const selectionStart = e.target.selectionStart;\n        const value = e.target.value;\n        const valueToSelection = value.slice(0, selectionStart);\n        const matchNextValue = valueToSelection.match(formulaVarRegex);\n        const nextChar = value.slice(selectionStart - 1, selectionStart);\n        if (matchNextValue && /\\}/.test(nextChar)) {\n          e.preventDefault();\n          e.stopPropagation();\n          const selectionRange = matchNextValue[0].length;\n          e.target.setSelectionRange(selectionStart - selectionRange, selectionStart);\n        } else if (!matchNextValue) {\n          const beforeCursor = valueToSelection.match(formulaBeforeVarRegex);\n          const afterCursor = value.slice(selectionStart, value.length).match(formulaAfterVarRegex);\n          if (beforeCursor && afterCursor) {\n            e.preventDefault();\n            e.stopPropagation();\n            const beforeCursorLength = beforeCursor[0].length;\n            const afterCursorLength = afterCursor[0].length;\n            e.target.setSelectionRange(selectionStart - beforeCursorLength, selectionStart + afterCursorLength);\n          }\n        }\n        break;\n      case 'ArrowLeft':\n        this.cursorIndex = e.target.selectionStart - 1;\n        break;\n      case 'ArrowRight':\n        this.cursorIndex = e.target.selectionEnd + 1;\n        break;\n      case 'Enter':\n        e.preventDefault();\n        e.stopPropagation();\n        break;\n    }\n  }\n\n  private conditionalClick = () => {\n    const ifStatement = 'IF( ~CONDITION~ , ~THEN~ , ~ELSE~ )';\n    const formula = !this.state.conditionalOperators\n      ? insertIntoString(this.state.fieldData.formula, ifStatement, this.cursorIndex)\n      : this.state.fieldData.formula;\n    triggerChange(this.formulaRef.input, formula);\n    this.formulaRef.input.focus();\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula,\n      },\n      conditionalOperators: !this.state.conditionalOperators,\n    });\n  }\n\n  private conditionalOperators = () => {\n    const { classes } = this.props;\n    if (this.state.conditionalOperators) {\n      return formulaConditionalOperators.map((op, index) =>\n        <Button\n          key={index}\n          className={classes.conditionalButton}\n          variant='text'\n          onClick={() => this.inputOperators(op.usage)}\n        >\n          {op.label}\n        </Button>\n      );\n    }\n    return;\n  }\n\n  private inputOperators = (operator: string) => {\n    const formula = insertIntoString(this.state.fieldData.formula, operator, this.cursorIndex);\n    triggerChange(this.formulaRef.input, formula);\n    this.formulaRef.input.focus();\n    this.setState({\n      fieldData: {\n        ...this.state.fieldData,\n        formula,\n      }\n    });\n  }\n}\n\nexport default withTranslation('translations')(SectionCalculation);\n","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { List, Map } from 'immutable';\nimport {\n  withTranslation,\n} from 'react-i18next';\n\nimport { isEqual } from 'lodash';\nimport {\n  Button,\n  Card,\n  CardContent,\n  Divider,\n  Grid, Paper,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport QuoteSectionTemplate from '../../components/QuoteSectionTemplate';\nimport QuoteSectionComponents from '../../components/QuoteSectionComponents';\nimport CustomValue from '../../components/QuoteCustomSectionComponents/CustomValue';\nimport CustomFormula from '../../components/QuoteCustomSectionComponents/CustomFormula';\nimport SectionCalculation from '../../components/QuoteCustomSectionComponents/SectionCalculation';\nimport { uniqueId } from '../../utils/uniqueId';\nimport {\n  GetQuoteTemplate,\n  SaveQuoteTemplate,\n  SetSaveSuccessFlag,\n} from '../../modules/QuoteTemplateModule/actions';\nimport {\n  makeSelectQuoteTemplate,\n  makeSelectQuoteTemplateSaveSuccess,\n} from '../../modules/QuoteTemplateModule/selectors';\nimport { IAction, IMap } from 'ats-utils/src/Interfaces';\nimport { push } from 'connected-react-router';\nimport {\n  SETTINGS_PATH,\n  SETTINGS_QUOTE_SECTION_TEMPLATE_PATH,\n} from '../../constants';\nimport { makeSelectIsGettingQuoteExcelColumnPreferences, makeSelectIsUpdatingQuoteExcelColumnPreferences, makeSelectQuoteExcelColumnPreferences } from '../../modules/AccountModule/selectors';\nimport { IExcelColumn } from '../QuoteExcelColumnPreference/Component';\nimport { GetQuoteExcelColumnPreferencesAction } from '../../modules/AccountModule/actions';\nimport { makeSelectUserHasFirmOrOfficeAdmin } from '../../modules/AtsModule/selectors';\nimport { withRouter } from 'react-router';\nimport { ROUNDING_OPTIONS, DECIMAL_PRECISION } from './utils';\n\nexport const QUOTE_TEMPLATE_LIST_PATH = `${SETTINGS_PATH}${SETTINGS_QUOTE_SECTION_TEMPLATE_PATH}`;\n\n// const components = [\n//   {\n//     id: uniqueId(),\n//     name: 'List Price',\n//     type: 'value',\n//     fieldName: 'listPrice',\n//     valueType: 'storedData',\n//     fieldType: 'decimal',\n//     editable: true\n//   },\n//   {\n//     id: uniqueId(),\n//     name: 'Cost',\n//     type: 'value',\n//     fieldName: 'cost',\n//     valueType: 'storedData',\n//     fieldType: 'decimal',\n//     editable: true\n//   },\n//   {\n//     id: uniqueId(),\n//     name: 'Quantity',\n//     type: 'value',\n//     fieldName: 'quantity',\n//     valueType: 'storedData',\n//     fieldType: 'integer',\n//     editable: true\n//   },\n//   {\n//     id: uniqueId(),\n//     name: 'Multiplier',\n//     type: 'value',\n//     fieldName: 'multiplier',\n//     valueType: 'storedData',\n//     fieldType: 'integer',\n//     editable: true\n//   },\n//   {\n//     id: uniqueId(),\n//     name: 'Margin',\n//     type: 'value',\n//     fieldName: 'margin',\n//     valueType: 'storedData',\n//     fieldType: 'decimal',\n//     editable: true\n//   },\n// ];\n// Default components\nconst components = [];\n\ninterface IQuoteTemplate {\n  template?: any;\n  templateSaveSuccess?: boolean;\n  isUpdatingQuoteExcelColumnPreferences: boolean;\n  isGettingQuoteExcelColumnPreferences: boolean;\n  hasFirmOrOfficeAdminAcl: boolean;\n  quoteExcelColumnPreferences: List<IMap<IExcelColumn>>;\n  match?: any;\n  getQuoteExcelColumnPreferences: () => void;\n  getQuoteTemplate: (templateId: string | undefined) => void;\n  saveQuoteTemplate: (templateData: object | undefined) => void;\n  setSaveSuccessFlag: () => void;\n  dispatch: React.Dispatch<IAction>;\n  t(key: string): string;\n}\n\nclass QuoteTemplate extends React.Component<IQuoteTemplate & WithStyles<keyof ReturnType<typeof styles>>> {\n  public state = {\n    templateId: null,\n    templateTitle: '',\n    isAddingCustomValue: false,\n    isAddingCustomFormula: false,\n    isAddingSectionCalculation: false,\n    templateComponents: components.slice(),\n    sectionCalculations: [],\n    componentToEdit: undefined,\n    droppedComponents: [],\n    template: Map({}),\n    templateSaveSuccess: false,\n    settings: { infoToDisplay: { productManufacturer: false, productImage: false, productHyperlink: false, itemNumber: false }, currency: 'CAD' },\n  };\n\n  private quoteTemplateRef: any;\n\n  public static getDerivedStateFromProps(nextProps: any, prevState: any) { // tslint:disable-line\n    if (nextProps.templateSaveSuccess && nextProps.templateSaveSuccess !== prevState.templateSaveSuccess) {\n      nextProps.dispatch(push(QUOTE_TEMPLATE_LIST_PATH));\n      return null;\n    }\n    if (nextProps.template && nextProps.template.get('fieldsData') && !isEqual(nextProps.template, prevState.template)) {\n      const template = nextProps.template;\n\n      const targetedField = (template.get('fieldsData') || Map()).find(el => typeof el.get('pimType') === 'string' && (el.get('pimType') === 'CAD' || el.get('pimType') === 'USD')) || Map();\n      const pimType = targetedField.get('pimType');\n      const defaultCurrency = template.getIn(['settings', 'currency']) || pimType || 'CAD';\n\n      return {\n        template,\n        templateId: template.get('id'),\n        templateTitle: template.get('templateTitle'),\n        droppedComponents: template.get('fieldsData').toJS(),\n        templateComponents: extractAndAddCustoms(prevState.templateComponents, template.get('fieldsData').toJS()),\n        sectionCalculations: template.get('sectionCalculations') && template.get('sectionCalculations').toJS() || [],\n        settings: {\n          infoToDisplay: template.getIn(['settings', 'infoToDisplay'])?.toJS() || { productManufacturer: false, productImage: false, productHyperlink: false, itemNumber: false },\n          currency: defaultCurrency\n        }\n      };\n    }\n\n    return null;\n  }\n\n  public componentDidMount() {\n    const {\n      quoteExcelColumnPreferences,\n      isGettingQuoteExcelColumnPreferences,\n      getQuoteExcelColumnPreferences,\n    } = this.props;\n\n    if (this.props.match && this.props.match.params.id) {\n      this.props.getQuoteTemplate(this.props.match.params.id);\n      this.setState({\n        templateId: this.props.match.params && this.props.match.params.id,\n      });\n    }\n\n    if (!isGettingQuoteExcelColumnPreferences && !quoteExcelColumnPreferences.size) {\n      getQuoteExcelColumnPreferences();\n    }\n  }\n\n  public componentWillUnmount() {\n    this.props.setSaveSuccessFlag();\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      isGettingQuoteExcelColumnPreferences,\n      isUpdatingQuoteExcelColumnPreferences,\n      hasFirmOrOfficeAdminAcl,\n    } = this.props;\n    const {\n      templateTitle,\n      templateComponents,\n      componentToEdit,\n      droppedComponents,\n      sectionCalculations,\n      settings,\n      template,\n    } = this.state;\n\n    const disableUpdate = !hasFirmOrOfficeAdminAcl || (template?.get('default') && (isGettingQuoteExcelColumnPreferences || isUpdatingQuoteExcelColumnPreferences));\n\n    return (\n      <Paper className={classes.paperContainer}>\n        <Grid container={true}>\n          <Grid container={true} item={true} xs={12}>\n            <Grid item={true} xs={9}>\n              <Typography className={classes.headlineTitle} variant='h5'>{t('quoteTemplate.title')}</Typography>\n              <Typography className={classes.title} variant='caption'>{t('quoteTemplate.subTitle')}</Typography>\n            </Grid>\n            <Grid item={true} xs={3} container={true} alignItems='center' justify='center' spacing={1}>\n              <Grid item={true}>\n                <Button\n                  color='primary'\n                  onClick={this.cancelTemplate}\n                  className={classes.textButton}\n                >\n                  {t('quoteTemplate.templateCancelLabel')}\n                </Button>\n              </Grid>\n              <Grid item={true}>\n                <Button\n                  className={classes.buttonSave}\n                  variant='contained'\n                  color='primary'\n                  disabled={disableUpdate}\n                  onClick={this.saveTemplate}\n                >\n                  {t('quoteTemplate.templateSaveLabel')}\n                </Button>\n              </Grid>\n            </Grid>\n            <Grid item={true} xs={12}>\n              <Divider/>\n            </Grid>\n          </Grid>\n          <Grid container={true} item={true} xs={12}>\n            <Grid container={true} item={true} xs={9} spacing={3}>\n              <Grid item={true} xs={12}>\n                <QuoteSectionTemplate\n                  onRef={el => this.quoteTemplateRef = el}\n                  templateData={{templateTitle, droppedComponents, sectionCalculations, settings}}\n                  onDrop={this.onColumnsDrop}\n                  onChange={this.onColumnsChange}\n                  editColumn={this.editComponent}\n                  addCalculation={() => this.addNewComponent('calculation')}\n                  removeCalculation={this.removeCalculation}\n                />\n              </Grid>\n              <Grid item={true} xs={12}>\n                <Grid item={true} xs={12}>\n                  <Divider/>\n                </Grid>\n                <Grid item={true} xs={12} style={{ marginTop: 10 }}>\n                  {this.customComponentsCreator(componentToEdit)}\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid item={true} xs={3}>\n              <QuoteSectionComponents\n                classes={classes}\n                valueComponents={templateComponents}\n                addValue={() => this.addNewComponent('value')}\n                addFormula={() => this.addNewComponent('formula')}\n                editComponent={this.editComponent}\n                removeComponent={this.removeComponent}\n              />\n            </Grid>\n          </Grid>\n        </Grid>\n      </Paper>\n    );\n  }\n\n  private saveTemplate = () => {\n    const templateData = {\n      ...this.quoteTemplateRef.getData(),\n      sectionCalculations: this.state.sectionCalculations,\n      quoteTemplateId: this.state.templateId || undefined,\n      defaultOfficeIds: this.state.template.get('defaultOfficeIds')\n    };\n\n    if (templateData.fieldsData) {\n      templateData.fieldsData = templateData.fieldsData.map((field: any) => {\n        if (field.valueType !== 'storedData') {\n          field.pimType = '';\n          field.pimData = '';\n        }\n        return field;\n      });\n    }\n\n    this.setState({\n      isLoading: true,\n    }, () => this.props.saveQuoteTemplate(templateData));\n  }\n\n  private cancelTemplate = () => {\n    this.props.dispatch(push(QUOTE_TEMPLATE_LIST_PATH));\n  }\n\n  private onColumnsDrop = (columns: any[]) => {\n    this.setState({\n      droppedComponents: columns,\n    });\n  }\n\n  private onColumnsChange = (templateData: any) => {\n    const droppedComponents = templateData.droppedComponents;\n    const { templateTitle, settings } = templateData;\n    if (droppedComponents != null) {\n      const templateComponents: any[] = this.state.templateComponents.slice();\n      droppedComponents.forEach((data: any) => {\n        const index = templateComponents.findIndex(comp => comp.id === data.id);\n        templateComponents[index] = data;\n      });\n      this.setState({\n        templateComponents,\n        droppedComponents,\n      });\n    }\n    if (templateTitle != null) {\n      this.setState({\n        templateTitle,\n      });\n    }\n    if (settings) {\n      this.setState({\n        settings: { ...settings },\n      });\n    }\n  }\n\n  private addNewComponent = (type: string) => {\n    this.setState({\n      isAddingCustomValue: type === 'value',\n      isAddingCustomFormula: type === 'formula',\n      isAddingSectionCalculation: type === 'calculation',\n      componentToEdit: undefined,\n    });\n  }\n\n  private addCustom = (params: any) => {\n    if (params.valueType !== 'storedData') {\n      params.pimType = '';\n      params.pimData = '';\n    }\n    if (params.valueType === 'userInput' || params.valueType === 'constant') {\n      if (params.fieldType === 'integer') {\n        params.roundingOption = ROUNDING_OPTIONS.NO_ROUNDING;\n        params.decimalPrecision = null;\n      }\n    }\n\n    delete params.componentToEdit;\n    let templateComponents: any[] = this.state.templateComponents.slice();\n    let droppedComponents: any[] = this.state.droppedComponents.slice();\n    const componentIndex = templateComponents.findIndex((comp: any) => comp.id === params.id);\n    let oldFieldName;\n    if (componentIndex > -1) {\n      oldFieldName = templateComponents[componentIndex].fieldName;\n      templateComponents[componentIndex] = params;\n    } else {\n      templateComponents.push(params);\n    }\n    const droppedComponentIndex: number = droppedComponents.findIndex((comp: any) => comp.id === params.id);\n    if (droppedComponentIndex > -1) {\n      droppedComponents[droppedComponentIndex] = params;\n    }\n    if (componentIndex > -1) {\n      templateComponents = this.updateFormulaComponents(templateComponents, oldFieldName, params.fieldName);\n    }\n    if (droppedComponentIndex > -1) {\n      droppedComponents = this.updateFormulaComponents(droppedComponents, oldFieldName, params.fieldName);\n    }\n\n    this.setState({\n      templateComponents,\n      droppedComponents,\n      isAddingCustomValue: false,\n      isAddingCustomFormula: false,\n      componentToEdit: undefined,\n    });\n  }\n\n  private updateFormulaComponents = (comps: any[], oldFieldName, newFieldName) => {\n    return comps.map((comp: any) => {\n      if (comp.type === 'formula') {\n        return {\n          ...comp,\n          formula: comp.formula.replace(`\\${${oldFieldName}}`, `\\${${newFieldName}}`),\n        };\n      }\n      return comp;\n    });\n  }\n\n  private cancelCustom = () => {\n    this.setState({\n      isAddingCustomValue: false,\n      isAddingCustomFormula: false,\n      isAddingSectionCalculation: false,\n      componentToEdit: undefined,\n    });\n  }\n\n  private editComponent = (id: string) => {\n    const templateComponents = this.state.templateComponents.slice();\n    const sectionCalculations = this.state.sectionCalculations.slice();\n    const componentToEdit: any =\n      templateComponents.find((comp: any) => comp.id === id) ||\n      sectionCalculations.find((comp: any) => comp.id === id);\n    this.setState({\n      isAddingCustomValue: componentToEdit.type === 'value',\n      isAddingCustomFormula: componentToEdit.type === 'formula',\n      isAddingSectionCalculation: componentToEdit.type === 'calculation',\n      componentToEdit,\n    });\n  }\n\n  private removeComponent = (id: string) => {\n    const templateComponents = this.state.templateComponents.slice();\n    const componentIndex = templateComponents.findIndex((comp: any) => comp.id === id);\n    templateComponents.splice(componentIndex, 1);\n    this.setState({\n      templateComponents,\n    });\n  }\n\n  private removeCalculation = (id: string) => {\n    const sectionCalculations = this.state.sectionCalculations.slice();\n    const componentIndex = sectionCalculations.findIndex((comp: any) => comp.id === id);\n    sectionCalculations.splice(componentIndex, 1);\n    this.setState({\n      sectionCalculations,\n    });\n  }\n\n  private customComponentsCreator: any = (component: any) => {\n\n    if (this.state.isAddingCustomValue || this.state.isAddingCustomFormula) {\n      // @ts-ignore\n      const Component = this.state.isAddingCustomValue ? CustomValue : CustomFormula;\n\n      return (\n        <Component\n          key={component?.id ?? '__new__'}\n          classes={this.props.classes}\n          {...{suggestions: this.state.droppedComponents}}\n          addCustom={this.addCustom}\n          cancelCustom={this.cancelCustom}\n          templateComponents={this.state.templateComponents}\n          componentToEdit={component}\n        />\n      );\n    }\n\n    if (this.state.isAddingSectionCalculation) {\n\n      return (\n        <SectionCalculation\n          key={component?.id ?? '__new__'}\n          classes={this.props.classes}\n          columns={this.state.droppedComponents}\n          sectionCalculations={this.state.sectionCalculations}\n          addSectionCalculation={this.addSectionCalculation}\n          cancelSectionCalculation={this.cancelCustom}\n          componentToEdit={component}\n        />\n      );\n    }\n\n    return;\n  }\n\n  private addSectionCalculation = (params: any) => {\n    const sectionCalculations: any = this.state.sectionCalculations.slice();\n    const componentIndex = sectionCalculations.findIndex((comp: any) => comp.id === params.id);\n    if (componentIndex > -1) {\n      sectionCalculations[componentIndex] = params;\n    } else {\n      sectionCalculations.push(params);\n    }\n\n    this.setState({\n      sectionCalculations,\n      isAddingSectionCalculation: false,\n      componentToEdit: undefined,\n    });\n  }\n}\n\nconst extractAndAddCustoms = (templateComponents: any[], templateFields: any[]) => {\n  const customs = templateFields.filter( (field: any) => field.custom);\n  return [...templateComponents, ...customs];\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  paperContainer: {\n    margin: theme.spacing() * 2,\n    padding: theme.spacing() * 2,\n  },\n  container: {\n    display: 'flex',\n    height: '100%',\n    backgroundColor: theme.palette.grey[300],\n  },\n  headlineTitle: {\n    marginTop: '1em',\n  },\n  title: {\n    marginBottom: '1em',\n  },\n  buttonSave: {\n    width: '100px',\n  },\n  componentsContainer: {\n    paddingLeft: 12,\n    paddingRight: 12,\n  },\n  searchField: {\n    width: '100%',\n  },\n  searchIcon: {\n    color: theme.palette.grey[600],\n  },\n  infoIcon: {\n    color: theme.palette.grey[600],\n    marginLeft: 10,\n  },\n  deleteIcon: {\n    height: 20,\n    color: theme.palette.grey[600],\n  },\n  addValueButton: {\n    width: '100%',\n    color: theme.palette.primary.main,\n    borderStyle: 'dashed',\n    borderColor: theme.palette.grey[300],\n    borderWidth: 'medium',\n    backgroundColor: theme.palette.common.white,\n    '&:hover': {\n      backgroundColor: theme.palette.grey[300],\n    }\n  },\n  customValueCard: {\n    boxShadow: 'none',\n    backgroundColor: theme.palette.grey[300],\n  },\n  customValueButtonsContainer: {\n    paddingLeft: 20,\n    paddingRight: 20,\n  },\n  optionsTitle: {\n    marginTop: 10,\n    marginBottom: 5,\n  },\n  controlLabel: {\n    fontSize: theme.typography.body1.fontSize,\n  },\n  radioGroup: {\n    marginLeft: 8\n  },\n  radioGroupHorizontal: {\n    display: 'flex',\n    flexWrap: 'wrap',\n    flexDirection: 'row'\n  },\n  formSelect: {\n    minWidth: '200px'\n  },\n  radio: {\n    width: 35,\n    height: 35,\n    color: `${theme.palette.primary[800]} !important`,\n  },\n  optionsContainer: {\n    display: 'flex',\n    // paddingLeft: 20,\n    // paddingRight: 20,\n  },\n  customColumnLabel: {\n    width: '100%',\n  },\n  customConstantValue: {\n    width: '100%',\n  },\n  dividerContainer: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  verticalDivider: {\n    height: '85%',\n    width: '50%',\n    borderRight: 'solid',\n    borderWidth: 2,\n    borderColor: theme.palette.grey[50],\n  },\n  operationButton: {\n    width: 35,\n    minWidth: 35,\n    minHeight: 35,\n    height: 35,\n    padding: 8,\n    margin: 5,\n    color: theme.palette.primary.main,\n    backgroundColor: 'rgba(41, 106, 20, 0.20)',\n    borderStyle: 'solid',\n    borderWidth: 'thin',\n    borderColor: theme.palette.primary.main,\n    '&:hover': {\n      backgroundColor: 'rgba(41, 106, 20, 0.25)',\n    }\n  },\n  conditionalButton: {\n    width: 'auto',\n    minWidth: 35,\n    minHeight: 35,\n    height: 35,\n    padding: 8,\n    margin: 5,\n    backgroundColor: 'transparent',\n    borderStyle: 'solid',\n    borderWidth: 'thin',\n    borderColor: theme.palette.grey[50],\n  },\n  optionSelector: {\n    display: 'flex',\n  },\n  textButton: {\n  },\n  componentChip: {\n    '& svg': {\n      color: '#727272'\n    },\n    padding: '0 16px',\n    marginBottom: '8px'\n  },\n  formulaLabel: {\n    margin: theme.spacing(1, 0),\n    display: 'block'\n  }\n});\n\nconst mapStateToProps = (state: any, props: any) => {\n  const templateId = props.match.params && props.match.params?.id;\n  return {\n    template: makeSelectQuoteTemplate(templateId)(state),\n    templateSaveSuccess: makeSelectQuoteTemplateSaveSuccess()(state),\n    quoteExcelColumnPreferences: makeSelectQuoteExcelColumnPreferences()(state),\n    isGettingQuoteExcelColumnPreferences: makeSelectIsGettingQuoteExcelColumnPreferences()(state),\n    isUpdatingQuoteExcelColumnPreferences: makeSelectIsUpdatingQuoteExcelColumnPreferences()(state),\n    hasFirmOrOfficeAdminAcl: makeSelectUserHasFirmOrOfficeAdmin()(state),\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getQuoteTemplate: (templateId: string) => {\n      dispatch(new GetQuoteTemplate(templateId));\n    },\n    setSaveSuccessFlag: () => {\n      dispatch(new SetSaveSuccessFlag());\n    },\n    saveQuoteTemplate: (templateData: object) => {\n      dispatch(new SaveQuoteTemplate(templateData));\n    },\n    getQuoteExcelColumnPreferences: () => {\n      dispatch(new GetQuoteExcelColumnPreferencesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose(\n  withStyles(styles),\n  withRouter,\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(QuoteTemplate);\n","import ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\nconst BidQuoteServiceApi = {\n\n  async fetchOneQuote(env: any, appId: string, quoteId: number, bidResponseId?: number): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const endpoint = bidResponseId\n        ? `/msquoteconnect/bid-quote.findQuoteById/${quoteId}?bidResponseId=${bidResponseId}`\n        : `/msquoteconnect/bid-quote.findQuoteById/${quoteId}`;\n      const response = await apiClient.fetchData(endpoint);\n      if (response?.payload?.msquoteconnect) {\n        return response.payload.msquoteconnect;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-quote.findQuoteById:', error);\n      throw error;\n    }\n  },\n\n\n};\n\nexport default BidQuoteServiceApi;\n","import * as React from 'react';\nimport {\n  AnyAction,\n  compose,\n  Dispatch,\n} from 'redux';\nimport { batch, connect } from 'react-redux';\nimport { withTranslation, WithTranslation, } from 'react-i18next';\nimport {\n  Button,\n  CircularProgress,\n  ClickAwayListener,\n  Dialog,\n  DialogActions,\n  DialogTitle,\n  FormControlLabel,\n  Grid,\n  Grow,\n  ListItemIcon,\n  ListItemText,\n  MenuItem,\n  MenuList,\n  Paper,\n  Popper,\n  RootRef,\n  Switch,\n  Theme,\n  Tooltip,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport { StyleRules } from '@material-ui/core/styles';\nimport QuoteForm from '../../components/QuoteForm';\nimport QuoteDetails from '../../components/QuoteDetails';\nimport ButtonTab from '../../components/ButtonTab';\n// PT-5477 / PT-5486 (2026-08-26): legacy email modal restored for the\n// ACL-off path. When `feat_emailImprovements` is on, users get the new\n// /quote/:id/export page instead and this modal stays hidden.\nimport QuoteEmailModal from '../../components/QuoteEmailModal';\nimport {\n  CreateQuoteAction,\n  CreateQuotePreviewAction,\n  CreateQuoteWithSpecToQuoteAction,\n  CreateRequoteAction,\n  CreateRevisionAction,\n  DeleteQuoteAction,\n  DuplicateQuoteAction,\n  GetQuotesAction,\n  GetSpecToQuoteDraftAction,\n  GetSpecToQuoteProductsAction,\n  PrepareInitialValuesForSpecToQuote,\n  PrepareInitialValuesForSpecToSourceQuote,\n  ResetQuotesAction,\n  ResetSpecToQuote,\n  SelectQuoteIdAction,\n  SetBidInvitationDataAction,\n  UpdateQuoteAction,\n  MergeBidQuoteSpecToQuoteLinkedListAction,\n} from '../../modules/QuoteModule/actions';\nimport {\n  makeSelectQuote,\n  makeSelectQuoteFormProps,\n  makeSelectQuotePreview,\n  makeSelectQuotesLoading,\n  makeSelectReduxFormSyncErrors,\n  makeSelectSpecToQuoteDraft,\n  makeSelectSpecToQuoteLinkedListBySpecId,\n  makeSelectSubmittingQuote,\n  selectForm,\n  makeSelectCreateQuoteWithSpecToQuote,\n  makeSelectIsLoadingSpecToQuoteLinkedList,\n  makeSelectIsSpecToQuote,\n  makeSelectHasIsRequestingProduct,\n  makeSelectAllowXmlDownload,\n} from '../../modules/QuoteModule/selectors';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { push } from 'connected-react-router/immutable';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport {\n  GetProjectByIdAndSelectProjectAction,\n  GetProjectsAction,\n  SearchProjectsSucceededAction,\n  SelectProjectAction\n} from '../../modules/ProjectModule/actions';\nimport Project from '../../models/Project';\nimport { GetDiscountsForOfficeId, GetVendorQuotationAutoTakeoffSettingAction, PotentiallyFetchManufacturerDiscountsAndPriorityAction, GetQuoteAutoSavePreferenceAction, GetQuoteDiscountListAction } from '../../modules/AccountModule/actions';\nimport { GetFirmEmailSettingAction } from '../../modules/AccountModule/actions';\nimport { makeSelectFirmEmailSetting, makeSelectLoggedInUserData, makeSelectQuoteAutoSavePreferenceFetched, makeSelectHasFetchedQuoteDiscountList, makeSelectQuoteDiscountList } from '../../modules/AccountModule/selectors';\nimport EmailSettingUtil from '../../pages/FirmDetailPage/EmailSetting/EmailSettingUtil';\nimport ScrollTabContainer from '../ScrollTabContainer/ScrollTabContainer';\nimport {\n  makeSelectScrollNode,\n} from '../../modules/ApplicationModule/selectors';\nimport {\n  AI_IDENTIFIED_PRODUCT_ID,\n  AMPLITUDE_EVENT,\n  BID_INVITATION_DETAIL_ROOT_PATH,\n  CREATE_NEW_QUOTE_FROM_SPEC_PATH,\n  QUOTE_PATH,\n  CREATE_NEW_QUOTE_PATH,\n  NETSUITE_USER_FIRM_IDS,\n  PROJECT_LIST_DETAIL_PATH,\n  PT_SPEC_DETAIL_PATH,\n  QUOTE_DOWNLOAD_ERP_FIRM_IDS,\n  QUOTE_LIST_PATH,\n  QUOTE_PRINT_FORMAT,\n  SALESORDER_FIRM_IDS,\n  VENDOR_QUOTATION_SEND_BID_PATH,\n  NOT_FOUND_PATH\n} from '../../constants';\nimport {\n  makeSelectAppId,\n  makeSelectEnv,\n  makeSelectIsRestrictedOutsideSalesRep,\n  makeSelectToken,\n  makeSelectUserFirmId,\n  makeSelectUserHasCurrencyConversion,\n  makeSelectUserHasERP,\n  makeSelectUserHasFeatStockLevel,\n  makeSelectUserHasOMShopDrawingAcl,\n  makeSelectUserHasQuoteConnectAcl,\n  makeSelectUserOfficeId,\n  makeSelectIdentityObject,\n  makeSelectUserHasFeatEmailImprovements\n} from '../../modules/AtsModule/selectors';\nimport ProductDrawer, {\n  PRODUCT_CONTENT_EDIT_KEY,\n  PRODUCT_DRAWER_ID\n} from '../../components/ProductDrawer';\nimport {\n  ControlledDrawer,\n  DeleteModal,\n  NestedMenu,\n  TeamManagementUserDrawer,\n  UserContactDrawerDetails\n} from '../../components';\nimport {\n  SetOverlayComponentContentAction,\n  SetSnackbarOpenAction,\n  ToggleOverlayComponentAction\n} from '../../modules/ApplicationModule/actions';\nimport { Debug } from '..';\nimport PackageDrawer, {\n  PACKAGE_CONTENT_EDIT_KEY,\n  PACKAGE_DRAWER_ID\n} from '../../components/PackageDrawer';\nimport { withAtsApi } from '../../contexts/AtsApiContext';\nimport Api from 'ats-api/src';\nimport HistoryIcon from '@material-ui/icons/History';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddBoxRoundedIcon from '@material-ui/icons/AddBoxRounded';\nimport {\n  change,\n  initialize,\n  InjectedFormProps,\n  reset,\n  destroy\n} from 'redux-form';\nimport { QUOTE_FORM_NAME, IMPORT_PRICING_FORM_NAME } from '../../constants/quote';\nimport { reduxForm, } from 'redux-form/immutable';\nimport { DRAWER_ID as CONTACT_DRAWER_ID } from '../MyContactsPage/constants';\nimport { DRAWER_ID as USER_DRAWER_ID } from '../Dashboard/WidgetLoader/TeamManagementWidgets/User/constants';\nimport { RouteComponentProps } from 'react-router';\nimport {\n  fromJS,\n  List,\n  Map\n} from 'immutable';\nimport { GetDefaultQuickTextByTypeAction } from '../../modules/QuickTextModule/actions';\nimport { makeSelectDefaultQuickTextByType } from '../../modules/QuickTextModule/selectors';\nimport QuickEntry from '../../models/QuickEntry';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport QuoteProductConfigurator from '../../components/QuoteProductConfigurator';\nimport QuoteAddProductDuplicateDialog from '../../components/DuplicateProductDialog/QuoteAddProductDuplicateDialog';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport moment from 'moment';\nimport { SALES_ORDER_MODAL_KEY } from '../../components/SalesOrderModal/Component';\nimport SalesOrderModal from '../../components/SalesOrderModal';\nimport TooltipTab from '../../components/TooltipTab';\nimport { makeSelectUpdatePricingLoading, makeSelectDefaultQuoteTemplate, makeSelectAutoSavePerformRequestId, makeSelectAutoSaveEnabled, makeSelectSourceQuote, makeSelectBidResponseId } from '../../modules/QuoteEditModule/selectors';\nimport { Quote, Region, User } from '../../models';\nimport { GenericErpCronJobAction } from '../../modules/PrintModule/actions';\nimport { makeSelectSpec } from '../../modules/SpecModule/selectors';\nimport { GetSpecsAction, ResetSpecsAction, SelectSpecAction } from '../../modules/SpecModule/actions';\nimport { makeSelectIsFetchingQuoteTemplates, makeSelectQuoteTemplateList, makeSelectUserOfficeDefaultQuoteTemplate } from '../../modules/QuoteTemplateModule/selectors';\nimport { GetQuoteTemplateListAction } from '../../modules/QuoteTemplateModule/actions';\nimport CreateAiXrefModal from '../../components/SpecToQuote/CreateAiXrefModal';\nimport { GetXrefTypesAction } from '../../modules/ListModule/actions';\nimport getQuoteFormInitialValuesFromSpecToQuoteDraft from '../../components/SpecToQuote/helpers/initQuoteFormFromSpecToQuoteDraft';\nimport { SetSectionToFocusAction, UpdateAllSectionTotalThenGrandTotalAction, SetSourceQuoteAction, SetBidResponseIdAction, SetPendingAttachQuoteIdAction, ResetImportPricingFormAction, IngestDraftSectionsAction, DisableAutoSaveAction, EnableAutoSaveAction, AutoSaveSuccessAction, RestartAutoSaveSettlingAction, SetIsDetailViewAction } from '../../modules/QuoteEditModule/actions';\nimport { removeTZ } from '../../components/FieldDatePickerV2';\nimport { getInitialQuoteFromSpec } from '../../utils/specToQuote';\nimport { makeSelectSelectedManufacturerDiscounts, makeSelectDefaultManufacturerDiscounts, makeSelectDefaultManufacturerDiscountsComments, makeSelectDefaultManufacturerDiscountsTerms, makeSelectDiscountPriority, makeSelectLoggedInUserOfficeId, makeSelectVendorQuotationAutoTakeoff } from '../../modules/AccountModule/selectors';\nimport { QUOTE_TEMPLATE_LIST_PATH } from '../QuoteTemplate';\nimport { getTemplateCurrency } from '../../components/QuoteForm/SectionListEdit/constants';\nimport ImportPricingServiceApi from '../../modules/QuoteConnectService/ImportPricingServiceApi';\nimport QuoteFormUtil from '../../components/QuoteForm/QuoteFormUtil';\nimport BidQuoteServiceApi from '../../modules/QuoteConnectService/BidQuoteServiceApi';\nimport BidInvitationServiceApi from '../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport { makeSelectOfficePricingRegions } from '../../modules/LocationModule/selectors';\nimport { makeSelectSelectedCustomerDiscounts } from '../../modules/ContactModule/selectors';\nimport { getQuoteEditPath } from '../../modules/QuoteModule/constants';\nimport CheckIcon from '@material-ui/icons/Check';\nimport { utcToLocal } from 'ats-utils/src';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport SaveIcon from '@material-ui/icons/Save';\nimport DiscontinuedProductsGuard, { IDiscontinuedProductsGuardHandle } from '../../components/DiscontinuedProductsGuard';\nimport { IQuoteDiscountListItem } from '../../modules/AccountModule/types';\n\nconst BUTTON_MIN_WIDTH = 80;\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    backgroundColor: theme.palette.grey[300],\n  },\n  simplePrimaryButton: {\n    minWidth: BUTTON_MIN_WIDTH,\n    flex: 'none',\n  },\n  disabledSimplePrimaryButton: {\n    minWidth: BUTTON_MIN_WIDTH,\n    height: 48,\n    color: 'grey',\n    flex: 'none',\n  },\n  raisedPrimaryButton: {\n    minWidth: BUTTON_MIN_WIDTH,\n    marginRight: theme.spacing(1),\n    boxShadow: 'none',\n    flex: 'none',\n  },\n  exportButton: {\n    marginLeft: theme.spacing(2),\n    alignSelf: 'center',\n  },\n  compactTextButton: {\n    alignSelf: 'center',\n    // `&&` doubles the class selector specificity to beat MUI's\n    // `.MuiButton-root { min-width: 64px }` default.\n    '&&': {\n      minWidth: 'auto',\n    },\n  },\n  raisedPrimaryButtonLabel: {\n    paddingLeft: 8,\n    paddingRight: 8,\n  },\n  raisedButtonContainer: {\n    // maxWidth: 130,\n    minWidth: BUTTON_MIN_WIDTH,\n    flex: 'none',\n  },\n  popper: {\n    top: '5px !important'\n  },\n  spacer: {\n    flexGrow: 1\n  },\n  saveProgressContainer: {\n    marginRight: theme.spacing(),\n    display: 'flex'\n  },\n  quoteAppBar: {\n    backgroundColor: theme.palette.grey[300],\n    position: 'sticky',\n    top: 0,\n    zIndex: 1,\n  },\n  sendPricingButton: {\n    minWidth: BUTTON_MIN_WIDTH,\n    marginLeft: 40,\n    marginRight: 20,\n    boxShadow: 'none',\n    flex: 'none',\n    width: 'auto',\n    whiteSpace: 'nowrap',\n  },\n});\nexport const DivInterceptor = (props) => {\n  const {\n    indicator,\n    fullWidth,\n    textColor,\n    ...rest\n  } = props;\n\n  return <div {...rest} />;\n};\n\ninterface IQuoteContainerComponentProps {\n  syncErrors?: any;\n}\n\ninterface IQuoteContainerProps extends IQuoteContainerComponentProps {\n  scrollNode?: React.RefObject<any>;\n  onSubmit: (exitAfterSave: boolean) => any;\n  createQuoteFromSpecToQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => void;\n  createQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => void;\n  updateQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => void;\n  createPreview: (quote: any) => void;\n  createRevision: (quoteId: number) => void;\n  createRequote: (quoteId: number) => void;\n  deleteQuote: (quoteId: number) => void;\n  duplicateQuote: (quoteId: number) => void;\n  selectQuoteId: (quoteId: number) => void;\n  selectProjectId: (projectId: number) => void;\n  selectRevision: (quoteId: string) => void;\n  getOfficeDiscounts: () => void;\n  toggleDrawer: (drawerId: string, open?: boolean) => void;\n  openSalesOrderModal: () => void;\n  getDefaultQuickTextByType: (type: string) => void;\n  quote: any;\n  atsApi: Api;\n  env: any;\n  appId: string;\n  token: string;\n  quoteFormId?: any;\n  appliedManufacturerDiscounts: List<IMap<any>>;\n  selectedCustomerDiscounts: List<IMap<any>>;\n  quoteAutoSavePreferenceFetched: boolean;\n  hasFetchedQuoteDiscountList: boolean;\n  quotePreview: any;\n  linkedProject?: IMap<Project>;\n  quoteLoading: boolean;\n  submittingQuote: boolean;\n  getQuote: (id: any) => void;\n  getProject?: (id: number) => void;\n  officeId: any;\n  dispatch: React.Dispatch<IAction>;\n  hasERP: boolean;\n  isUpdatingPrice: boolean;\n  userFirmId: number;\n  firmEmailSetting: any;\n  userEmail: string;\n  sendQuoteToErp: (quoteId: number) => void;\n  getSpecToQuoteProduct: (specId: number) => void;\n  initialSpecToQuoteValues?: any;\n  spec: any;\n  getTemplateList: () => void;\n  defaultQuoteQuickText: IMap<QuickEntry>;\n  defaultManufacturerDiscountsManufacturerIds: List<number>;\n  defaultManufacturerDiscountsTerms: string;\n  defaultManufacturerDiscountsComments: string;\n  loggedInUserData: IMap<User>;\n  regions: List<IMap<Region>>;\n  hasFeatStockLevelAclRole: boolean;\n  nonStockProductNote: any;\n  defaultTemplate: any;\n  isFetchingQuoteTemplates: boolean;\n  specToQuoteLinkedList: any;\n  specToQuoteFormSections: List<any>;\n  specToQuoteDraft: any;\n  specToQuoteForm?: any;\n  quoteForm?: any;\n  isCreatingQuote: boolean;\n  loadingSpecToQuoteLinkedList: IMap<{\n    status: boolean;\n    total: number;\n    finished: number;\n  }>;\n  readyForInitialize: boolean;\n  resetSpecToQuote: () => void;\n  hasOMShopDrawingAcl: boolean;\n  hasFeatEmailImprovements: boolean;\n  allowXmlDownload: boolean;\n  hasCurrencyConversionACLRole: boolean;\n  getSpecToQuoteDraft: (quoteId: number, callback?: () => void) => void;\n  getSpecToSourceQuoteDraft: (quoteId: number, callback?: () => void) => void;\n  potentiallyFetchManufacturerDiscounts: () => void;\n  discountPriority: 'customer' | 'manufacturer';\n  defaultDiscountList: List<IMap<IQuoteDiscountListItem>>;\n  isSpecToQuote: boolean;\n  sectionsSize: number;\n  isRestrictedOutsideSalesRep: boolean;\n  hasQuoteConnectAcl: boolean;\n  hasIsRequestingProduct: boolean;\n  isRequestProductInitialSelectAllPreference: boolean;\n  importPricingForm?: any;\n  sourceQuoteId?: string;\n  bidResponseId?: string;\n  selectLinkedListBySpecId: (sourceSpecId: number) => any;\n  initialValues: IMap<any>;\n  autoSavePerformRequestId: number | null;\n  quoteAutoSaveEnabled: boolean;\n}\n\ntype QuoteComponentProps =\n  IQuoteContainerProps\n  & InjectedFormProps<{}>\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithTranslation\n  & RouteComponentProps<{ id: string, edit: string, specId: string }>\n  & WithAmplitudeData;\n\nclass QuoteContainer extends React.PureComponent<QuoteComponentProps, any> {\n\n  public static getDerivedStateFromProps(nextProps: Readonly<QuoteComponentProps>, prevState: any) {\n    if (nextProps.match && nextProps.match.params.id && nextProps.match.params.id !== prevState.quoteId) {\n      nextProps.getQuote(Number(nextProps.match.params.id));\n      const showDetails = !(nextProps.match.params.edit && nextProps.match.params.edit === 'edit');\n      nextProps.selectQuoteId(Number(nextProps.match.params.id));\n      return {\n        showDetails,\n        quoteId: nextProps.match.params && nextProps.match.params.id,\n        isEditing: !!(nextProps.match.params && nextProps.match.params.id)\n      };\n    }\n\n    if (nextProps.match && !nextProps.match.params.edit && !prevState.showDetails && nextProps.match.params.id) {\n      return {\n        showDetails: true,\n        // isShareVendorQuote: false,\n      };\n    }\n\n    return null;\n  }\n\n  public state = {\n    isOpen: false,\n    isSaveMenuOpen: false,\n    showDetails: false,\n    quoteId: null,\n    showProjectPanelMenuItem: false,\n    revision: null,\n    showDeleteModal: false,\n    downloadButtonAnchorEl: null,\n    // PT-5477 / PT-5486 (2026-08-26): legacy QuoteEmailModal control —\n    // used only when `feat_emailImprovements` is OFF (production email flow).\n    quoteEmailModalOpen: false,\n    // isShareVendorQuote: false,\n    shareVendorQuoteStep: 0,\n  //  showShareVendorQuote: false,\n    refreshedQuoteForm: false,\n    sourceQuote: null,\n    sourceSpecId: null,\n    draftSectionsIngestionTriggered: false,\n  };\n\n  // all refs\n  private refQuoteInfo = React.createRef<HTMLElement>();\n  private refProjectInfo = React.createRef<HTMLElement>();\n  private refContacts = React.createRef<HTMLElement>();\n  private refDiscounts = React.createRef<HTMLElement>();\n  private refInternalNotes = React.createRef<HTMLElement>();\n  private refProductList = React.createRef<HTMLElement>();\n  private refTerms = React.createRef<HTMLElement>();\n  private refAttachment = React.createRef<HTMLElement>();\n  private refTask = React.createRef<HTMLElement>();\n  private refEvents = React.createRef<HTMLElement>();\n  private refQuoteForm = React.createRef<HTMLFormElement>();\n  private formRef = React.createRef<HTMLFormElement>();\n  private discontinuedGuardRef = React.createRef<IDiscontinuedProductsGuardHandle>();\n\n\n  private anchorEl: HTMLElement;\n  private saveAnchorEl: HTMLElement;\n\n  constructor(props) {\n    super(props);\n    this.initWithDraft = this.initWithDraft.bind(this);\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      quote,\n      quoteForm,\n      getProject,\n      getOfficeDiscounts,\n      match,\n      getQuote,\n      selectQuoteId,\n      getDefaultQuickTextByType,\n      getSpecToQuoteProduct,\n      getTemplateList,\n      getSpecToQuoteDraft,\n      getSpecToSourceQuoteDraft,\n      potentiallyFetchManufacturerDiscounts,\n      hasQuoteConnectAcl,\n      isRequestProductInitialSelectAllPreference,\n      sourceQuoteId,\n      bidResponseId,\n      initialValues,\n      quoteAutoSavePreferenceFetched,\n      hasFetchedQuoteDiscountList,\n      location,\n    } = this.props;\n\n    // Hacky way to load the page with undefined key in order for the save and continue to retain page state.\n    // The refreshKey is generated with timestamp to ensure it's always unique and forces remount of the component when changed,\n    // which is primary use to make sure page state and prop is loaded with the correct info when directing to\n    // quote create/edit page with different init data (for example from takeoff or notification).\n    if ((location as any)?.state?.refreshKey) {\n      dispatch(push(location.pathname));\n    }\n\n    // Sync the saga-side view-mode flag before initialize, so any auto-save logic\n    // wired to the initialize cascade sees the correct mode from the start.\n    dispatch(new SetIsDetailViewAction({ isDetailView: this.state.showDetails }));\n\n    if (initialValues?.get('id') === Number(match?.params?.id)) {\n      dispatch(initialize(QUOTE_FORM_NAME, initialValues));\n    }\n\n    if (hasQuoteConnectAcl && isRequestProductInitialSelectAllPreference === undefined) {\n      dispatch(new GetVendorQuotationAutoTakeoffSettingAction());\n    }\n\n    const quoteId = match && match.params.id;\n    if (!quoteId) {\n      getDefaultQuickTextByType('quoteTerms');\n\n      // the office's default charge/discount/tax list is applied to new quotes, so it must be in the store before one is built\n      if (!hasFetchedQuoteDiscountList) {\n        dispatch(new GetQuoteDiscountListAction());\n      }\n    }\n\n    getDefaultQuickTextByType('nonStockProductNote');\n    getOfficeDiscounts();\n    getTemplateList();\n\n    potentiallyFetchManufacturerDiscounts();\n\n    if (!quoteAutoSavePreferenceFetched) {\n      dispatch(new GetQuoteAutoSavePreferenceAction());\n    }\n\n    if (match && match.params.id) {\n      getQuote(Number(match.params.id));\n      const showDetails = !(match.params.edit && match.params.edit === 'edit');\n      selectQuoteId(Number(match.params.id));\n      this.setState({\n        showDetails,\n        // isShareVendorQuote,\n        quoteId: match.params && match.params.id,\n        isEditing: !!(match.params && match.params.id)\n      });\n    }\n    if (sourceQuoteId) {\n      this.getBidSourceQuote(Number(sourceQuoteId), getSpecToSourceQuoteDraft, getSpecToQuoteProduct, bidResponseId ? Number(bidResponseId) : null);\n    }\n    // Persist bidResponseId in Redux so the \"Attach Quote\" button survives\n    // post-save redirects that drop the URL query string. Cleared on unmount.\n    if (bidResponseId) {\n      dispatch(new SetBidResponseIdAction({ bidResponseId }));\n    }\n    // spec to quote\n    const specId: number = Number(match.params.specId);\n    if (specId && !(match.params.edit === 'edit' || match.url.match(/\\/createQuote\\b/) || match.url.match(/\\/createQuote\\/([0-9]+)/))) {\n      dispatch(new SelectSpecAction(specId));\n      dispatch(new GetSpecsAction({ specId }));\n      // setSort(ISpecToQuoteSortValue.unsorted);\n      getSpecToQuoteProduct(specId);\n    }\n\n    const linkedProjectId = quote && quote.get('projectId') || quoteForm.getIn(['values', 'projectId']);\n    if (linkedProjectId) {\n      getProject(linkedProjectId);\n    }\n\n    if (quote && quote.get('id')) {\n      getSpecToQuoteDraft(Number(quote.get('id')), this.initWithDraft); // set form value after each time of fetching draft successfully\n    }\n\n    dispatch(new GetXrefTypesAction());\n\n    // Fetch firm email setting into Redux (shared across quotes for same firm)\n    const { userFirmId } = this.props;\n    if (userFirmId) {\n      dispatch(new GetFirmEmailSettingAction({ firmId: userFirmId }));\n    }\n  }\n\n  public componentDidUpdate(prevProps: Readonly<QuoteComponentProps>, prevState: Readonly<any>, snapshot?: any): void {\n    const {\n      spec,\n      quote,\n      getProject,\n      match,\n      dispatch,\n      hasFeatStockLevelAclRole,\n      nonStockProductNote,\n      isFetchingQuoteTemplates,\n      defaultTemplate,\n      defaultQuoteQuickText,\n      discountPriority,\n      defaultManufacturerDiscountsManufacturerIds,\n      defaultDiscountList,\n      defaultManufacturerDiscountsTerms,\n      defaultManufacturerDiscountsComments,\n      specToQuoteLinkedList,\n      quoteForm,\n      readyForInitialize,\n      resetSpecToQuote,\n      getSpecToQuoteDraft,\n      getSpecToSourceQuoteDraft,\n      isSpecToQuote,\n      specToQuoteDraft,\n      loggedInUserData,\n      regions,\n      userFirmId,\n      t,\n      hasQuoteConnectAcl,\n      isRequestProductInitialSelectAllPreference,\n      loadingSpecToQuoteLinkedList,\n      appliedManufacturerDiscounts,\n      selectedCustomerDiscounts,\n      isRestrictedOutsideSalesRep,\n      location,\n    } = this.props;\n\n    // Hacky way to load the page with undefined key in order for the save and continue to retain page state.\n    // The refreshKey is generated with timestamp to ensure it's always unique and forces remount of the component when changed,\n    // which is primary use to make sure page state and prop is loaded with the correct info when directing to\n    // quote create/edit page with different init data (for example from takeoff or notification).\n    if ((location as any)?.state?.refreshKey) {\n      dispatch(push(location.pathname));\n    }\n\n    const projectId = quote && quote.get('projectId') || quoteForm.getIn(['values', 'projectId']) || '';\n    const prevProjectId = prevProps.quote && prevProps.quote.get('projectId') || prevProps.quoteForm.getIn(['values', 'projectId']) || '';\n\n    const discountPriorityIsManufacturer = discountPriority === 'manufacturer';\n\n    const quotePhase = quote?.get('quotePhase');\n    if (isRestrictedOutsideSalesRep && quotePhase && (quotePhase === 'In Progress' || quotePhase === 'Pending Approval')) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n\n    if (!defaultTemplate && !isFetchingQuoteTemplates && prevProps.isFetchingQuoteTemplates) {\n      dispatch(push(QUOTE_TEMPLATE_LIST_PATH));\n      dispatch(new SetSnackbarOpenAction({\n        message: t('quoteTemplate.noDefaultSnackbarMessage'),\n        severity: 'error',\n        actionProps: {\n          autoHideDuration: null,\n        }\n      }));\n    }\n\n    if (!prevState.showDetails && this.state.showDetails && match.params.edit === 'edit') {\n      const path = this.props.match.url.split('/');\n      path.pop();\n      const url: string = path.join('/');\n      dispatch(push(url));\n    }\n\n    // Detail ↔ edit view transitions re-mount sub-trees (SectionListEdit, totals,\n    // etc.) which can dispatch incidental CHANGEs / wrapped sagas. Those aren't\n    // user edits, so:\n    //  1. Update the saga-side view-mode flag — blocks the auto-save check while\n    //     on the detail view.\n    //  2. Re-enter the settling phase to absorb any incidental dispatches that\n    //     fire during the transition. No-op if auto-save is currently disabled.\n    if (prevState.showDetails !== this.state.showDetails) {\n      dispatch(new SetIsDetailViewAction({ isDetailView: this.state.showDetails }));\n      dispatch(new RestartAutoSaveSettlingAction());\n    }\n\n    if (quote && prevProps?.quote?.get('id') !== quote.get('id') && quote.get('id') && quote.get('id') === Number(match.params.id)) {\n      if (quote.get('locked') && match.params.edit === 'edit') {\n        this.showDetails();\n      } else {\n        resetSpecToQuote(); // clear previous spec to quote data\n        getSpecToQuoteDraft(Number(quote.get('id')), this.initWithDraft);\n      }\n    }\n\n    if (this.state.sourceQuote?.id && this.state.sourceQuote?.createdFromSpecId) {\n      const sourceSpecToQuoteLinkedList = this.props.selectLinkedListBySpecId(this.state.sourceQuote?.createdFromSpecId);\n\n      if (this.state.sourceQuote?.sections\n        && !this.state?.refreshedQuoteForm\n        && defaultTemplate?.size > 0\n        && sourceSpecToQuoteLinkedList?.size > 0\n        && !loadingSpecToQuoteLinkedList?.get('status')\n      ) {\n        const sourceQuote = this.state.sourceQuote;\n        // Enrich specToQuoteLinkedList with aiAnnotation from specProductInfo on each product\n        if (sourceQuote.specToQuoteLinkedList && sourceQuote.sections) {\n          sourceQuote.sections.forEach((section) => {\n            section.products?.forEach((product) => {\n              const specProductId = String(product?.specToQuoteValues?.specProductId);\n              const aiAnnotation = product?.specProductInfo?.aiAnnotation;\n              if (specProductId && aiAnnotation && sourceQuote.specToQuoteLinkedList[specProductId]?.specProduct) {\n                if (!sourceQuote.specToQuoteLinkedList[specProductId].specProduct.aiAnnotation) {\n                  sourceQuote.specToQuoteLinkedList[specProductId].specProduct.aiAnnotation = aiAnnotation;\n                }\n              }\n            });\n          });\n        }\n        // Merge API's specToQuoteLinkedList into the linked list (API data as base, AI data overwrites)\n        let mergedLinkedList = sourceSpecToQuoteLinkedList;\n        if (sourceQuote.specToQuoteLinkedList) {\n          const apiData = fromJS(sourceQuote.specToQuoteLinkedList);\n          mergedLinkedList = apiData.merge(sourceSpecToQuoteLinkedList);\n          dispatch(new MergeBidQuoteSpecToQuoteLinkedListAction({\n            specId: sourceQuote.createdFromSpecId,\n            specToQuoteLinkedList: sourceQuote.specToQuoteLinkedList,\n          }));\n        }\n        const initialQuoteFormValues = QuoteFormUtil.copySourceQuote({\n          spec,\n          sourceSpecToQuoteLinkedList: mergedLinkedList,\n          quoteFormValues: quoteForm.get('values') || Map(),\n          loggedInUserData,\n          regions,\n          defaultQuoteQuickText,\n          defaultManufacturerDiscountsManufacturerIds: defaultManufacturerDiscountsManufacturerIds || List(),\n          defaultTerms: '',\n          defaultComments: '',\n          defaultDiscountList,\n          nonStockProductNote,\n          hasFeatStockLevelAclRole,\n          sourceQuote,\n          defaultTemplate,\n        });\n        if (initialQuoteFormValues.get('sections')) {\n          dispatch(initialize(QUOTE_FORM_NAME, initialQuoteFormValues));\n          // dispatch(new UpdateAllSectionTotalThenGrandTotalAction({ type: discountPriorityIsManufacturer ? 'initManufacturerDiscounts' : null }));\n          dispatch(new UpdateAllSectionTotalThenGrandTotalAction({ type: 'quoteInit' }));\n        }\n        this.setState({ refreshedQuoteForm: true });\n      }\n    }\n\n    if (prevProps.match.url.endsWith('edit') && !match.url.endsWith('edit') || prevProps.match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH) && !match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH)) {\n      dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n      resetSpecToQuote();\n\n      // reset form when it is only from the edit page\n      // for save & continue on create s2q page\n      if (!prevProps.match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH)) {\n        dispatch(reset(QUOTE_FORM_NAME));\n      }\n      if (quote && quote.get('id') && quote.get('id') === Number(match.params.id)) {\n        getSpecToQuoteDraft(Number(quote.get('id')), this.initWithDraft);\n      }\n    }\n\n    if ((projectId !== prevProjectId) && projectId) {\n      getProject(projectId);\n    }\n\n    // shouldn't initialize the form again when going to the edit page\n    // even the route is changed\n    // make sure it is s2q page\n    if (match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH) && isSpecToQuote && !quote && ((prevProps.readyForInitialize !== readyForInitialize && readyForInitialize) || prevProps.specToQuoteLinkedList?.size !== specToQuoteLinkedList?.size)) {\n      const initialQuoteFormValues = getInitialQuoteFromSpec({\n        spec,\n        specToQuoteLinkedList,\n        quoteFormValues: quoteForm.get('values') || Map(),\n        loggedInUserData,\n        regions,\n        defaultQuoteQuickText,\n        defaultManufacturerDiscountsManufacturerIds: defaultManufacturerDiscountsManufacturerIds || List(),\n        defaultTerms: '',\n        defaultComments: '',\n        defaultDiscountList,\n        nonStockProductNote,\n        defaultTemplate,\n        hasFeatStockLevelAclRole,\n        isRequestProductInitialSelectAllPreference: hasQuoteConnectAcl && isRequestProductInitialSelectAllPreference,\n      });\n      dispatch(initialize(QUOTE_FORM_NAME, initialQuoteFormValues.set('temp', quoteForm.get('values')?.get('temp') || Map())));\n      // dispatch(new UpdateAllSectionTotalThenGrandTotalAction({ type: discountPriorityIsManufacturer ? 'initManufacturerDiscounts' : null}));\n      dispatch(new UpdateAllSectionTotalThenGrandTotalAction({ type: 'quoteInit' }));\n    }\n\n    if (\n      quoteForm?.getIn(['values', 'draftSections'])?.size\n      && !this.state.draftSectionsIngestionTriggered\n      && regions?.size\n      && defaultTemplate\n      && nonStockProductNote\n      && (\n          !quoteForm?.getIn(['values', 'selectedCustomer'])\n          || (quoteForm?.getIn(['values', 'selectedCustomer']) && quoteForm?.getIn(['values', 'temp', 'initialSelectedCustomerDataInitialized']))\n        )\n      && (\n          !quoteForm?.getIn(['values', 'discounts', 'manufacturerDiscounts'])?.size\n          || (quoteForm?.getIn(['values', 'discounts', 'manufacturerDiscounts'])?.size && quoteForm?.getIn(['values', 'temp', 'initialSelectedManufacturerDiscountsInitialized']))\n        )\n    ) {\n      this.setState({ draftSectionsIngestionTriggered: true });\n      dispatch(new IngestDraftSectionsAction());\n    }\n\n    // Auto-save trigger: the saga bumps autoSavePerformRequestId when it\n    // decides to save. Route through createOrUpdateQuote so the same logic\n    // used by manual save runs (update/create/spec-to-quote + import pricing\n    // chain). onSuccess dispatches AutoSaveSuccessAction to resolve the\n    // saga's race; if no success fires, the saga falls back to timeout.\n    if (\n      this.props.autoSavePerformRequestId != null\n      && this.props.autoSavePerformRequestId !== prevProps.autoSavePerformRequestId\n    ) {\n      this.onSubmit({ exitAfterSave: false, isAutoSave: true });\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      createPreview,\n      selectProjectId,\n      resetSpecToQuote,\n      dispatch\n    } = this.props;\n    dispatch(new DisableAutoSaveAction());\n    createPreview(null);\n    selectProjectId(-1);\n    dispatch(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    dispatch(new SelectSpecAction(-1));\n    dispatch(destroy(QUOTE_FORM_NAME));\n    resetSpecToQuote();\n    dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n    dispatch(new SearchProjectsSucceededAction({ projects: List(), count: 0 }));\n    // Clear the bid-response context so it doesn't leak into unrelated quotes.\n    dispatch(new SetBidResponseIdAction({ bidResponseId: null }));\n  }\n\n  public getUnscrollableTabItems = () => {\n    const {\n      classes,\n      t,\n      quote,\n      quoteLoading,\n      submittingQuote,\n      hasERP,\n      amplitudeData,\n      openSalesOrderModal,\n      handleSubmit,\n      isUpdatingPrice,\n      sendQuoteToErp,\n      isCreatingQuote,\n      loadingSpecToQuoteLinkedList,\n      userFirmId,\n      hasOMShopDrawingAcl,\n      isRestrictedOutsideSalesRep,\n      isSpecToQuote,\n      hasQuoteConnectAcl,\n      hasIsRequestingProduct,\n      firmEmailSetting,\n      userEmail,\n      hasFeatEmailImprovements,\n      allowXmlDownload,\n    } = this.props;\n    const { downloadButtonAnchorEl } = this.state;\n\n    const quoteId = quote && quote.get('id');\n    const quoteLocked = quote && quote.get('locked');\n    const isNetSuiteUserWithNoCustomers = quote && quote.get('customers').size === 0 && NETSUITE_USER_FIRM_IDS.includes(userFirmId);\n\n    const saveDateToDisplay = quote && (quote.get('modifiedDate') || quote.get('createdDate')) ? utcToLocal(quote.get('modifiedDate') || quote.get('createdDate'), true) : '';\n    const iscreatingOrUpdatingQuote = submittingQuote || isCreatingQuote;\n    const displayBidInvitationButton = hasQuoteConnectAcl;\n\n    return [\n      <DivInterceptor key='divInterceptor' className={classes.spacer} />\n    ].concat(this.state.showDetails ? [\n      !isRestrictedOutsideSalesRep &&\n      <ButtonTab\n        key='__tab_more__'\n        variant='text'\n        textColor='primary'\n        buttonRef={(node: any) => {\n          this.anchorEl = node;\n        }}\n        aria-owns={this.state.isOpen ? 'menu-list-grow' : undefined}\n        aria-haspopup='true'\n        onClick={this.handleToggle}\n        className={classnames(classes.simplePrimaryButton, classes.compactTextButton)}\n      >\n        {t('quoteMenu.more')}\n      </ButtonTab>,\n      !isRestrictedOutsideSalesRep &&\n      (quoteLocked\n        ? <TooltipTab\n          key='_quoteNotEditable_'\n          title={t('quoteList.quoteNotEditable')}\n          placement='bottom'\n        >\n          <div>\n            <ButtonTab\n              key='__tab_edit__'\n              variant='text'\n              textColor='primary'\n              className={classes.disabledSimplePrimaryButton}\n            >\n              {t('quoteMenu.edit')}\n            </ButtonTab>\n          </div>\n        </TooltipTab>\n        : <ButtonTab\n          key='__tab_edit__'\n          variant='text'\n          textColor='primary'\n          onClick={(e) => this.editQuote(e, quoteId)}\n          className={classnames(classes.simplePrimaryButton, classes.compactTextButton)}\n          disabled={quoteLoading}\n        >\n          {t('quoteMenu.edit')}\n        </ButtonTab>)\n      ,\n      // PT-5477 / PT-5486 (2026-08-26): standalone EMAIL button — legacy\n      // production behavior. Shown only when the master email-improvements\n      // ACL is OFF (with the ACL ON the /quote/:id/export page owns the\n      // email flow). Same gates as s149/root: not restricted, firm email\n      // enabled, quote has customers. Opens QuoteEmailModal.\n      ...(!isRestrictedOutsideSalesRep\n        && !hasFeatEmailImprovements\n        && EmailSettingUtil.isUserEmailEnabled(firmEmailSetting, userEmail)\n        && quote && quote.get('customers')?.size > 0\n        ? [<ButtonTab\n            key='__tab_email_'\n            variant='outlined'\n            textColor='primary'\n            className={classnames(classes.simplePrimaryButton, classes.exportButton)}\n            onClick={() => this.guardDiscontinued(\n              () => this.setState({ quoteEmailModalOpen: true }),\n              this.reviewQuote\n            )}\n          >\n            {t('vendorQuotationSendBid.email')}\n          </ButtonTab>]\n        : []),\n      <ButtonTab\n        key='__tab_download_'\n        textColor='primary'\n        variant='contained'\n        className={classnames(classes.raisedPrimaryButton, classes.raisedButtonContainer, classes.exportButton)}\n        classes={{ label: classnames(classes.raisedPrimaryButtonLabel) }}\n        onClick={this.handleMenuOpen}\n      >\n        {/* PT-5477 / PT-5486: \"EXPORT\" button (linking to /quote/:id/export)\n            requires BOTH firm email active (status===1) AND the per-user\n            feat_emailImprovements ACL. Firm status is authoritative — when\n            the firm hasn't opted into email, keep the legacy \"DOWNLOAD\"\n            button and per-attachment menu, since the export page's main\n            value is the email compose step. */}\n        {(EmailSettingUtil.isUserEmailEnabled(firmEmailSetting, userEmail) && hasFeatEmailImprovements)\n          ? t('quoteMenu.export')\n          : t('quoteMenu.download')}\n      </ButtonTab>,\n      <NestedMenu\n        key='__nestMenu_'\n        open={Boolean(downloadButtonAnchorEl)}\n        anchorEl={downloadButtonAnchorEl}\n        onClose={this.handleMenuClose}\n        anchorOrigin={{\n          horizontal: 'center',\n          vertical: 'bottom'\n        }}\n        transformOrigin={{\n          vertical: 'top',\n          horizontal: 'center'\n        }}\n        menuItems={(() => {\n          // PT-5477 / PT-5486 (2026-08-26): master gate for the export\n          // flow. With `feat_emailImprovements` OFF the menu falls back to\n          // the pre-PT-5477 shape — per-attachment-type items routing to\n          // `/preview/:id/:type`. With it ON, the menu collapses to the\n          // \"Email & Download / Download\" single entry that lands on\n          // `/quote/:id/export`.\n          const erpItems = hasERP\n            ? [(SALESORDER_FIRM_IDS.includes(userFirmId) || QUOTE_DOWNLOAD_ERP_FIRM_IDS.includes(userFirmId))\n              ? {\n                  key: '__salesOrder',\n                  caption: t('quoteMenu.salesOrder'),\n                  disabled: Boolean(quoteLocked || isNetSuiteUserWithNoCustomers),\n                  disabledTooltip: quoteLocked ? t('salesOrderModal.lockedTooltip') : isNetSuiteUserWithNoCustomers ? t('salesOrderModal.noCustomerForNetSuiteTooltip') : '',\n                  onClick: () => this.guardDiscontinued(() => {\n                    openSalesOrderModal();\n                    amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                      printType: 'sales order',\n                    }));\n                  }, this.reviewQuote)\n                }\n              : {\n                  key: '__sendQuote',\n                  caption: t('quoteMenu.sendQuote'),\n                  disabled: Boolean(quoteLocked),\n                  disabledTooltip: t('sendQuoteToErp.lockedTooltip'),\n                  onClick: () => this.guardDiscontinued(() => {\n                    sendQuoteToErp(quoteId);\n                    amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                      printType: 'send quote to CRM',\n                    }));\n                  }, this.reviewQuote)\n                }\n              ]\n            : [];\n          const emailAndDownloadItem = {\n            key: '__emailAndDownload',\n            caption: EmailSettingUtil.isUserEmailEnabled(firmEmailSetting, userEmail)\n              ? t('quoteMenu.emailAndDownload')\n              : t('quoteMenu.download'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.handleMenuClose();\n              amplitude.logEvent(AMPLITUDE_EVENT.exportQuote, amplitudeData({}));\n              this.props.dispatch(push(`${QUOTE_PATH}/${this.props.match?.params?.id}/export`));\n            }, this.reviewQuote)\n          };\n          const historyItem = {\n            key: '__downloadHistory',\n            caption: t('quoteMenu.history'),\n            onClick: () => { this.downloadHistory(); }\n          };\n          const legacyCsvItem = {\n            key: '__csv',\n            caption: t('quoteList.actionMenu.downloadMenu.excelCsv'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.downloadCsv();\n              amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                printType: QUOTE_PRINT_FORMAT.quoteexcel,\n              }));\n            }, this.reviewQuote)\n          };\n          const legacyQuoteItem = {\n            key: '__quote',\n            caption: t('quoteList.actionMenu.downloadMenu.quote'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.downloadQuote();\n              amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                printType: 'quote',\n              }));\n            }, this.reviewQuote)\n          };\n          const legacyShopDrawingItem = {\n            key: '__shopDrawing',\n            caption: t('quoteList.actionMenu.downloadMenu.shopDrawing'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.downloadShopDrawing();\n              amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                printType: 'shop drawing',\n              }));\n            }, this.reviewQuote)\n          };\n          const legacyOmItem = hasOMShopDrawingAcl ? [{\n            key: '__om',\n            caption: t('quoteList.actionMenu.downloadMenu.o&m'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.downloadOM();\n              amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                printType: 'O&M',\n              }));\n            }, this.reviewQuote)\n          }] : [];\n          // PT-5542 (2026-09-03): legacy XML entry — parity with the\n          // QuoteList row Action menu and the ProjectListDetail row.\n          // Gated on `allowXmlDownload` (firm-scoped). Routes to\n          // /preview/:id/quotexml — same target as the other pages.\n          const legacyXmlItem = allowXmlDownload ? [{\n            key: '__xml',\n            caption: t('quoteList.actionMenu.downloadMenu.xml'),\n            onClick: () => this.guardDiscontinued(() => {\n              this.props.dispatch(push(`/preview/${quoteId}/${QUOTE_PRINT_FORMAT.quotexml}`));\n              amplitude.logEvent(AMPLITUDE_EVENT.downloadQuote, amplitudeData({\n                printType: QUOTE_PRINT_FORMAT.quotexml,\n              }));\n            }, this.reviewQuote)\n          }] : [];\n\n          const showExportFlow = EmailSettingUtil.isUserEmailEnabled(firmEmailSetting, userEmail) && hasFeatEmailImprovements;\n          if (isRestrictedOutsideSalesRep) {\n            return showExportFlow\n              ? [emailAndDownloadItem, historyItem]\n              : [legacyCsvItem, historyItem];\n          }\n          // PT-5542 (2026-09-03): include XML in BOTH branches for firms\n          // with `allowXmlDownload`. The Export page itself does NOT expose\n          // XML (see [QuoteExportConfig.tsx](../../components/QuoteExport/QuoteExportConfig.tsx)'s\n          // `enabledAttachmentTypesList`), so a Wolseley user with the\n          // Export flow enabled must still reach XML from this dropdown.\n          return showExportFlow\n            ? [emailAndDownloadItem, ...legacyXmlItem, ...erpItems]\n            : [legacyQuoteItem, legacyShopDrawingItem, ...legacyOmItem, legacyCsvItem, ...legacyXmlItem, ...erpItems, historyItem];\n        })()}\n      />\n    ] : []).concat(!this.state.showDetails ? [\n      <TooltipTab key='__tab_last_save_tooltip__' title={saveDateToDisplay ? t('quoteMenu.lastSavedTooltip', { datetime: saveDateToDisplay }) : ''} placement='bottom'>\n        {\n          saveDateToDisplay ? (\n            <Grid container={true} wrap='nowrap' alignItems='center' style={{ width: 'fit-content', color: '#757575', marginRight: 16 }}>\n              {\n                iscreatingOrUpdatingQuote\n                  ? <>\n                      <CircularProgress size='1.4em' color='inherit' style={{ marginRight: 4 }} />\n                      <span>{t('quoteMenu.saving')}</span>\n                    </>\n                  : <>\n                      <CheckIcon color='inherit' style={{ marginRight: 4 }} />\n                      <span>{t('quoteMenu.saved')}</span>\n                    </>\n              }\n            </Grid>\n          ) : <></>\n        }\n      </TooltipTab>,\n      // Per-quote auto-save override toggle. Initial value comes from the user's\n      // global preference (makeSelectQuoteAutoSavePreferenceIsOn → drives\n      // quoteAutoSaveEnabled on load via handleQuoteFormInitialize). Flipping it\n      // dispatches Enable/Disable directly, overriding the preference for this\n      // quote's current edit session only.\n      <TooltipTab key='__tab_autosave_toggle__' title={''}>\n        <FormControlLabel\n          labelPlacement='end'\n          control={\n            <Switch\n              color='primary'\n              checked={Boolean(this.props.quoteAutoSaveEnabled)}\n              // Block interaction until the preference fetch lands; otherwise\n              // the user could flip the toggle before handleQuoteFormInitialize\n              // derives its initial value, and their click would be overwritten.\n              disabled={!this.props.quoteAutoSavePreferenceFetched}\n              onChange={(_e, checked) => this.props.dispatch(\n                checked ? new EnableAutoSaveAction() : new DisableAutoSaveAction()\n              )}\n            />\n          }\n          label={t('quoteMenu.autosaveToggleLabel')}\n        />\n      </TooltipTab>,\n      <ButtonTab\n        key='__tab_cancel__'\n        variant='text'\n        textColor='primary'\n        className={classnames(classes.simplePrimaryButton, classes.compactTextButton)}\n        classes={{\n          label: classes.raisedPrimaryButtonLabel\n        }}\n        onClick={() => this.setState({ isSaveMenuOpen: false }, () => this.showDetails())}\n        startIcon={<ExitToAppIcon color='primary' />}\n      >\n        {t('quoteMenu.exit')}\n      </ButtonTab>,\n      <ButtonTab\n        key='__tab_save__'\n        variant='text'\n        textColor='primary'\n        buttonRef={(node: any) => {\n          this.saveAnchorEl = node;\n        }}\n        aria-owns={this.state.isSaveMenuOpen ? 'save-menu-list-grow' : undefined}\n        aria-haspopup='true'\n        className={classnames(classes.simplePrimaryButton, classes.compactTextButton)}\n        classes={{\n          label: classes.raisedPrimaryButtonLabel\n        }}\n        style={{ marginRight: 8 }}\n        disabled={iscreatingOrUpdatingQuote || isUpdatingPrice || loadingSpecToQuoteLinkedList.get('status')}\n        startIcon={<SaveIcon color='primary' />}\n        onClick={this.handleSaveToggle}\n      >\n        {\n          (isCreatingQuote || submittingQuote) && <span className={classes.saveProgressContainer}><CircularProgress size='1.4em' /></span>\n        }\n        {t('quoteMenu.save')}\n      </ButtonTab>,\n    ] : []).concat(!this.state.showDetails && displayBidInvitationButton ? [\n      <TooltipTab key='__tab_send_pricing_request_and_save__' title={t('quoteMenu.sendPricingRequestAndSaveTooltip')}>\n        <div className={classes.exportButton}>\n          <ButtonTab\n            textColor='primary'\n            variant={'contained'}\n            className={classes.raisedPrimaryButton}\n            classes={{ label: classes.raisedPrimaryButtonLabel }}\n            style={{ width: 'fit-content', marginLeft: 0 }}\n            type='button'\n            disabled={iscreatingOrUpdatingQuote || isUpdatingPrice || loadingSpecToQuoteLinkedList.get('status') || !hasIsRequestingProduct}\n            // Discontinued check runs before the submit so the user can back out\n            // without the quote being saved. Review Quote just dismisses — the\n            // form is already open behind the modal.\n            onClick={() => this.guardDiscontinued(\n              () => handleSubmit(() => this.onSubmit({ exitAfterSave: true, sendBid: true }))()\n            )}\n          >\n            {\n              iscreatingOrUpdatingQuote && <span className={classes.saveProgressContainer}><CircularProgress size='1.4em' /></span>\n            }\n            {t('quoteMenu.sendPricingRequestAndSave')}\n          </ButtonTab>\n        </div>\n      </TooltipTab>\n    ] : []).concat(!this.state.showDetails && this.props.match?.params?.id && this.props.sourceQuoteId && this.props.bidResponseId ? [\n      <div key='__tab_attach_quote__'>\n        <ButtonTab\n          textColor='primary'\n          variant={'contained'}\n          className={classes.raisedPrimaryButton}\n          classes={{ label: classes.raisedPrimaryButtonLabel }}\n          style={{ width: 'fit-content', marginLeft: 0, height: '100%' }}\n          type='button'\n          disabled={iscreatingOrUpdatingQuote || isUpdatingPrice}\n          onClick={() => {\n            // Pass the new quote ID via Redux instead of URL — bid detail page\n            // will read & clear it. Avoids re-triggering auto-attach on refresh.\n            this.props.dispatch(new SetPendingAttachQuoteIdAction({ pendingAttachQuoteId: this.props.match?.params?.id }));\n            this.props.dispatch(push(`${BID_INVITATION_DETAIL_ROOT_PATH}/${this.props.bidResponseId}`));\n          }}\n        >\n          {t('quoteMenu.attachQuote')}\n        </ButtonTab>\n      </div>\n    ] : []);\n  }\n\n  public onSubmit = ({ exitAfterSave, sendBid, isAutoSave }: { exitAfterSave: boolean, sendBid?: boolean, isAutoSave?: boolean }) => {\n    const {\n      dispatch,\n      amplitudeData,\n      specToQuoteLinkedList,\n    } = this.props;\n\n    let onSuccess;\n    if (sendBid) {\n      onSuccess = (newQuote: IMap<Quote>) => {\n        const quoteId = newQuote.get('id');\n        const regionId = newQuote.getIn(['region', 'id']);\n        const createdFromSpecId = newQuote.get('createdFromSpecId');\n        const sections = newQuote.get('sections');\n        let requestData = fromJS({ quoteId, createdFromSpecId, regionId, sections: List() as List<IMap<any>> });\n        sections.forEach((section: IMap<any>, sectionIndex) => {\n          const sectionId = section.get('sectionId');\n          const sectionCurrency = getTemplateCurrency(section.get('sectionTemplate'));\n          const products = section.get('products') || List();\n          const sectionTitle = section.get('sectionTitle');\n\n          const requestSectionProducts = products.reduce((acc, product, productIndex) => {\n            if (product.get('isRequestingProduct') && !product.get('productIndex')) {\n              const quoteProductId = product.get('quoteProductId');\n              const specProductId = product.getIn(['specToQuoteValues', 'specProductId']);\n              const specProduct = specToQuoteLinkedList.getIn([String(specProductId), 'specProduct']);\n              const idOfSpecProduct = specProduct?.get('id');\n              const isSpecProduct = Boolean(idOfSpecProduct);\n\n              let productNumber = specProduct?.get('productNumber');\n              let brand = specProduct?.get('brand');\n              let brandId = specProduct?.get('brandId');\n              let category = specProduct?.get('category');\n              let categoryName = specProduct?.get('categoryName');\n              let productId = idOfSpecProduct;\n\n              if (idOfSpecProduct === AI_IDENTIFIED_PRODUCT_ID) {\n                productId = null;\n                productNumber = specProduct?.get('identifiedProductNumber');\n                brand = specProduct?.get('identifiedBrand');\n                brandId = null;\n                category = null;\n                categoryName = specProduct?.get('identifiedCategory');\n              } else if (!idOfSpecProduct) {\n                productId = product.get('firmProductId');\n                productNumber = product.get('productNumber');\n                brandId = product.get('brandId');\n                brand = product.get('brand');\n                category = product.get('category');\n                categoryName = product.get('categoryName');\n              }\n\n              return acc.push(fromJS({\n                sectionTitle, // tag/label of the section\n                sectionId, // sectionId is a uuid saved on each section\n                sectionIndex, // index of the section\n                productIndex, // index of the product in the section\n                specProductId,\n                quoteProductId,\n                isSpecProduct, // true if this is a spec product, false if this is a firm product\n                productId,\n                productNumber,\n                brandId,\n                brand,\n                category,\n                categoryName,\n              }));\n            } else {\n              return acc;\n            }\n          }, List());\n\n          if (requestSectionProducts?.size) {\n            requestData = requestData.update('sections', (_sections) => _sections.push(fromJS({\n              sectionId,\n              sectionCurrency,\n              products: requestSectionProducts\n            })));\n          }\n        });\n\n        // store in redux store\n        dispatch(new SetBidInvitationDataAction({ bidInvitationData: requestData }));\n        // then push to bid invite page\n        dispatch(push(VENDOR_QUOTATION_SEND_BID_PATH));\n        // use makeSelectBidInvitationData to get the data\n      };\n    }\n\n    if (isAutoSave) {\n      onSuccess = (newQuote: IMap<Quote>) => {\n        dispatch(push(getQuoteEditPath(newQuote?.get('id'))));\n        dispatch(new AutoSaveSuccessAction());\n      };\n    }\n\n    amplitude.logEvent(AMPLITUDE_EVENT.saveQuote, amplitudeData());\n    this.createOrUpdateQuote(exitAfterSave, onSuccess, Boolean(isAutoSave));\n  }\n\n  /**\n   * Runs `onContinue` unless the quote holds discontinued products, in which\n   * case the warning modal goes up first — Continue then runs `onContinue`,\n   * Review Quote runs `onReviewQuote` (omit it to just dismiss, which is how\n   * the pricing-request flow stops short).\n   *\n   * The quote is already in hand here, so the guard is handed the sections\n   * rather than left to fetch: the detail view checks the saved quote, the edit\n   * view the live form values so in-progress edits are what gets checked.\n   */\n  public guardDiscontinued = (onContinue: () => void, onReviewQuote?: () => void) => {\n    const { quote, quoteForm } = this.props;\n    this.discontinuedGuardRef.current?.run(quote?.get('id'), onContinue, {\n      sections: this.state.showDetails\n        ? quote?.get('sections')\n        : quoteForm?.getIn(['values', 'sections']),\n      // The user is already on this quote, so Review Quote defaults to simply\n      // dismissing; the download flows override it to open the editor.\n      onReviewQuote: onReviewQuote || (() => undefined),\n    });\n  }\n\n  public render() {\n    const {\n      showDetails,\n      quoteId,\n      showProjectPanelMenuItem,\n      revision,\n      // isShareVendorQuote\n    } = this.state;\n    const {\n      t,\n      classes,\n      quote,\n      officeId,\n      linkedProject,\n      scrollNode,\n      toggleDrawer,\n      deleteQuote,\n      handleSubmit,\n      hasFeatEmailImprovements,\n    } = this.props;\n    const allRefs = {\n      quoteInfo: this.refQuoteInfo,\n      projectInfo: this.refProjectInfo,\n      contacts: this.refContacts,\n      discounts: this.refDiscounts,\n      internalNotes: this.refInternalNotes,\n      productList: this.refProductList,\n      terms: this.refTerms,\n      attachment: this.refAttachment,\n      task: this.refTask,\n      events: this.refEvents,\n      quoteForm: this.refQuoteForm\n    };\n    const menuLabels = [{\n      label: t('quoteMenu.quoteInfo'),\n      ref: allRefs.quoteInfo\n    }].concat(!showDetails ? [{\n      label: t('quoteMenu.projectInfo'),\n      ref: allRefs.projectInfo\n    }] : []).concat(showDetails ? [] : [{\n      label: t('quoteMenu.contacts'),\n      ref: allRefs.contacts\n    }]).concat([{\n      label: t('quoteMenu.discounts'),\n      ref: allRefs.discounts\n    }, {\n      // PT-5484 (2026-09-16): internal notes scroll-tab entry, positioned\n      // directly above Product List to match the ticket layout.\n      label: t('internalNotes.title'),\n      ref: allRefs.internalNotes\n    }, {\n      label: t('quoteMenu.productList'),\n      ref: allRefs.productList\n    }, {\n      label: t('quoteMenu.terms'),\n      ref: allRefs.terms\n    }]);\n\n    // return isShareVendorQuote ? (\n    //   <ShareVendorQuote />\n    // ) : (\n    return (\n      <>\n        <QuoteProductConfigurator />\n        <QuoteAddProductDuplicateDialog />\n\n        <ControlledDrawer\n          localKey={PACKAGE_DRAWER_ID}\n          menuComponent={\n            <PackageDrawer updateQuoteProductRow={true} />\n          }\n          zIndex={1400}\n        />\n        <ControlledDrawer\n          localKey={PRODUCT_DRAWER_ID}\n          menuComponent={\n            <ProductDrawer updateQuoteProductRow={true} />\n          }\n          zIndex={1400}\n        />\n\n        <ControlledDrawer\n          localKey={CONTACT_DRAWER_ID}\n          menuComponent={<UserContactDrawerDetails drawerId={CONTACT_DRAWER_ID} />}\n        />\n        <ControlledDrawer\n          localKey={USER_DRAWER_ID}\n          menuComponent={<TeamManagementUserDrawer drawerId={USER_DRAWER_ID}\n            handleCancel={() => toggleDrawer(USER_DRAWER_ID, false)} />}\n        />\n        <SalesOrderModal />\n        <form\n          className={classes.container}\n          ref={this.refQuoteForm}\n        // onSubmit={handleSubmit(this.onSubmit)}\n        >\n          <Grid container={true} className={classes.container}>\n            <Grid item={true} xs={12}>\n              <ScrollTabContainer\n                scrollNode={scrollNode}\n                labels={menuLabels}\n                unscrollableTabItems={this.getUnscrollableTabItems()}\n              >\n                <Popper\n                  open={this.state.isOpen}\n                  anchorEl={this.anchorEl}\n                  transition={true}\n                  placement='bottom-start'\n                  className={classes.popper}>\n                  {({ TransitionProps }) => (\n                    <Grow\n                      {...TransitionProps}\n                      {...{ id: 'menu-list-grow' }}\n                    >\n                      <Paper>\n                        <ClickAwayListener onClickAway={this.handleClose}>\n                          <MenuList>\n                            <MenuItem onClick={this.createRevision}>\n                              <ListItemIcon>\n                                <HistoryIcon />\n                              </ListItemIcon>\n                              <ListItemText primary={t('quoteMenu.createRevision')} />\n                            </MenuItem>\n                            {quote && Number(quote.get('requote')) === 1\n                              ? <Tooltip\n                                title={t('quoteList.requoteAlreadyCreated')}\n                                placement='bottom'\n                              >\n                                <div>\n                                  <MenuItem disabled={true}>\n                                    <ListItemIcon>\n                                      <AddBoxRoundedIcon />\n                                    </ListItemIcon>\n                                    <ListItemText primary={t('quoteMenu.createRequote')} />\n                                  </MenuItem>\n                                </div>\n                              </Tooltip>\n                              : <MenuItem onClick={this.createRequote}>\n                                <ListItemIcon>\n                                  <AddBoxRoundedIcon />\n                                </ListItemIcon>\n                                <ListItemText primary={t('quoteMenu.createRequote')} />\n                              </MenuItem>\n                            }\n                            <MenuItem onClick={this.duplicateQuote}>\n                              <ListItemIcon>\n                                <FileCopyIcon />\n                              </ListItemIcon>\n                              <ListItemText primary={t('quoteMenu.duplicate')} />\n                            </MenuItem>\n                            {quote && quote.get('locked')\n                              ? <Tooltip\n                                title={t('quoteList.quoteNotEditable')}\n                                placement='bottom'\n                              >\n                                <div>\n                                  <MenuItem disabled={true}>\n                                    <ListItemIcon>\n                                      <DeleteIcon />\n                                    </ListItemIcon>\n                                    <ListItemText primary={t('quoteMenu.delete')} />\n                                  </MenuItem>\n                                </div>\n                              </Tooltip>\n                              : <MenuItem onClick={this.toggleDeleteModal}>\n                                <ListItemIcon>\n                                  <DeleteIcon />\n                                </ListItemIcon>\n                                <ListItemText primary={t('quoteMenu.delete')} />\n                              </MenuItem>\n                            }\n                            <DeleteModal\n                              idToDelete={this.state.quoteId}\n                              itemName={quote ? quote.get('name') : ''}\n                              handleDelete={(id) => {\n                                deleteQuote(id);\n                                this.toggleDeleteModal();\n                              }}\n                              open={this.state.showDeleteModal}\n                              toggleDeleteModal={this.toggleDeleteModal}\n                            />\n                          </MenuList>\n                        </ClickAwayListener>\n                      </Paper>\n                    </Grow>\n                  )}\n                </Popper>\n                {/*\n                  No exit transition (transition prop omitted): the menu items\n                  trigger view changes that unmount this Popper's anchor button.\n                  With a transition, the Popper would stay mounted during the\n                  ~150ms Grow exit animation; if the anchor unmounts during that\n                  window (URL push or showDetails state swap), the Popper falls\n                  back to (0,0) and flashes at the top-left of the viewport.\n                */}\n                <Popper\n                  open={this.state.isSaveMenuOpen}\n                  anchorEl={this.saveAnchorEl}\n                  placement='bottom-end'\n                >\n                  <Paper id='save-menu-list-grow'>\n                    <ClickAwayListener onClickAway={this.handleSaveClose}>\n                      <MenuList role='menu' aria-label='toggle save menu'>\n                        <MenuItem\n                          onClick={(event) => {\n                            this.setState({ isSaveMenuOpen: false });\n                            handleSubmit(() => this.onSubmit({ exitAfterSave: true }))(event);\n                          }}\n                        >\n                          <ListItemText primary={t('quoteMenu.saveAndExit')} />\n                        </MenuItem>\n                        <MenuItem\n                          onClick={(event) => {\n                            this.setState({ isSaveMenuOpen: false });\n                            handleSubmit(() => this.onSubmit({ exitAfterSave: false }))(event);\n                          }}\n                        >\n                          <ListItemText primary={t('quoteMenu.save')} />\n                        </MenuItem>\n                      </MenuList>\n                    </ClickAwayListener>\n                  </Paper>\n                </Popper>\n                {showDetails && (quote && quote.get('id')) && (\n                  <RootRef rootRef={this.formRef}>\n                    <QuoteDetails\n                      quote={revision || quote}\n                      quoteId={quoteId}\n                      linkedProject={linkedProject}\n                      match={this.props.match}\n                      handleEditRevision={this.editQuote}\n                      handleSelectRevision={this.selectRevision}\n                      allRefs={allRefs}\n                      officeId={officeId}\n                    />\n                  </RootRef>\n                )\n                }\n                {!showDetails && (\n                  <RootRef rootRef={this.formRef}>\n                    <QuoteForm\n                      quoteId={quoteId}\n                      toggleProjectView={this.toggleProjectView}\n                      allRefs={allRefs}\n                    />\n                  </RootRef>\n                )}\n              </ScrollTabContainer>\n            </Grid>\n          </Grid>\n        </form>\n        <CreateAiXrefModal />\n        {/* PT-5477 / PT-5486 (2026-08-26): legacy QuoteEmailModal render. Kept\n            mounted only when `feat_emailImprovements` is OFF and the EMAIL\n            button above is showing, so it doesn't add any cost for ACL-on\n            users. */}\n        {!hasFeatEmailImprovements && (\n          <QuoteEmailModal\n            open={this.state.quoteEmailModalOpen}\n            onClose={() => this.setState({ quoteEmailModalOpen: false })}\n            quoteId={quoteId}\n          />\n        )}\n        <DiscontinuedProductsGuard ref={this.discontinuedGuardRef} />\n      </>\n    );\n  }\n\n  public toggleDeleteModal = () => this.setState({\n    showDeleteModal: !this.state.showDeleteModal\n  })\n\n  private toggleProjectView = () => this.setState({\n    showProjectPanelMenuItem: !this.state.showProjectPanelMenuItem\n  })\n\n  // Review Quote from a download action: leave the detail view and open the\n  // quote for editing so the discontinued rows can be dealt with.\n  private reviewQuote = () => {\n    const { dispatch, match } = this.props;\n    this.setState({ showDetails: false });\n    dispatch(push(getQuoteEditPath(Number(match.params.id))));\n  }\n\n  private createOrUpdateQuote = async (exitAfterSave, onSuccess?, isAutoSave: boolean = false) => {\n    const { match, hasQuoteConnectAcl, sourceQuoteId, bidResponseId, quoteForm } = this.props;\n    if (!this.props.syncErrors) {\n      if (this.props.quoteFormId) {\n        this.props.updateQuote(exitAfterSave, onSuccess, isAutoSave);\n        if (hasQuoteConnectAcl) {\n          const importPricingFormSaved = this.props.importPricingForm.getIn(['values', 'saved']);\n          const importPricingFormSectionProducts = this.props.importPricingForm.getIn(['values', 'importPricingSectionProducts']);\n          if (!importPricingFormSaved && importPricingFormSectionProducts) {\n            const matchImportBidResponsePricingProducts = QuoteFormUtil.getSavedImportPricing(this.props.quoteForm, importPricingFormSectionProducts);\n            if (matchImportBidResponsePricingProducts?.bidResponseId && matchImportBidResponsePricingProducts?.matchImportPricingProducts?.length > 0) {\n              await ImportPricingServiceApi.create(this.props.env, this.props.appId, matchImportBidResponsePricingProducts.bidResponseId, matchImportBidResponsePricingProducts.matchImportPricingProducts);\n            }\n            const attachSection = this.props.importPricingForm.getIn(['values', 'attachSection']);\n            if (attachSection) {\n              await BidInvitationServiceApi.updateByField(this.props.env, this.props.appId, matchImportBidResponsePricingProducts.bidResponseId, {\n                attachSection: JSON.stringify(attachSection)\n              });\n            }\n          }\n        }\n      } else if (match.params.specId) {\n        this.props.createQuoteFromSpecToQuote(exitAfterSave, onSuccess, isAutoSave);\n      } else if (sourceQuoteId) {\n        if (quoteForm.getIn(['values', 'createdFromSpecId'])) {\n          this.props.createQuoteFromSpecToQuote(exitAfterSave, onSuccess, isAutoSave);\n        } else {\n          this.props.createQuote(exitAfterSave, onSuccess, isAutoSave);\n        }\n      } else {\n        this.props.createQuote(exitAfterSave, onSuccess, isAutoSave);\n      }\n    }\n  }\n\n  private downloadHistory = () => {\n    const { dispatch, match } = this.props;\n    dispatch(push(`/quoteDownloadHistory/${match.params.id}/quote`));\n  }\n\n  // PT-5477 (2026-08-26): legacy /preview/:id/:type dispatchers used only\n  // when the current user does NOT have the `feat_emailImprovements` ACL.\n  // With the ACL, the nav-bar menu routes to `/quote/:id/export` instead\n  // and these handlers are unreachable.\n  private downloadQuote = () => {\n    const { dispatch, match } = this.props;\n    dispatch(push(`/preview/${match.params.id}`));\n  }\n  private downloadShopDrawing = () => {\n    const { dispatch, match } = this.props;\n    dispatch(push(`/preview/${match.params.id}/shopDrawing`));\n  }\n  private downloadCsv = () => {\n    const { dispatch, match } = this.props;\n    dispatch(push(`/preview/${match.params.id}/${QUOTE_PRINT_FORMAT.quoteexcel}`));\n  }\n  private downloadOM = () => {\n    const { dispatch, match } = this.props;\n    dispatch(push(`/preview/${match.params.id}/oandm`));\n  }\n\n  private createRevision = (event) => {\n    const { createRevision, match } = this.props;\n    createRevision(Number(match.params.id));\n    this.handleClose(event);\n  }\n\n  private createRequote = (event) => {\n    const { createRequote, match } = this.props;\n    createRequote(Number(match.params.id));\n    this.handleClose(event);\n  }\n\n  private duplicateQuote = (event) => {\n    const { duplicateQuote, match } = this.props;\n    duplicateQuote(Number(match.params.id));\n    this.handleClose(event);\n  }\n\n  private editQuote = (event: any, id: number) => {\n    const { dispatch } = this.props;\n    this.setState({\n      showDetails: false\n    });\n    dispatch(push(`${id}/edit`));\n    this.handleClose(event);\n  }\n\n  private selectRevision = (quoteId: string) => {\n    const { selectRevision } = this.props;\n    selectRevision(quoteId);\n  }\n\n  private handleToggle = () => {\n    this.setState(state => ({ isOpen: !state.isOpen }));\n  }\n\n  private handleClose = (event: any) => {\n    if (this.anchorEl.contains(event.target)) {\n      return;\n    }\n    this.setState({ isOpen: false });\n  }\n\n  private handleSaveToggle = () => {\n    this.setState(state => ({ isSaveMenuOpen: !state.isSaveMenuOpen }));\n  }\n\n  private handleSaveClose = (event: any) => {\n    if (this.saveAnchorEl && this.saveAnchorEl.contains(event.target)) {\n      return;\n    }\n    this.setState({ isSaveMenuOpen: false });\n  }\n\n  private handleMenuOpen = (event: any) => {\n    this.setState({\n      downloadButtonAnchorEl: event.currentTarget\n    });\n  }\n\n  private handleMenuClose = () => {\n    this.setState({\n      downloadButtonAnchorEl: null\n    });\n  }\n\n  private showDetails = (event?: any) => {\n    const { match } = this.props;\n    const {\n      dispatch,\n      hasQuoteConnectAcl,\n      isSpecToQuote,\n    } = this.props;\n\n    if (event && this.anchorEl && this.anchorEl.contains(event.target)) {\n      return;\n    }\n    if (match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH)) {\n      dispatch(push(`/spec/${match.params.specId}`));\n      return;\n    }\n    if (match.url === CREATE_NEW_QUOTE_PATH) {\n      dispatch(push(QUOTE_LIST_PATH));\n      return;\n    }\n    const pathFromProject = match.url.match(/\\/createQuote\\/([0-9]+)/);\n    if (pathFromProject) {\n      dispatch(push(`${PROJECT_LIST_DETAIL_PATH}/${pathFromProject[1]}`));\n      return;\n    }\n    // this.props.createPreview(this.props.quoteFormId);\n    const displayBidInvitationButton = hasQuoteConnectAcl && isSpecToQuote;\n    if (match.url.endsWith('edit')) {\n      if (displayBidInvitationButton) {\n        // Clear import pricing form state so unsaved import changes don't persist\n        dispatch(new ResetImportPricingFormAction());\n      }\n      const path = this.props.match.url.split('/');\n      path.pop();\n      const url: string = path.join('/');\n      dispatch(push(url));\n    }\n  }\n\n  private initWithDraft() {\n    const {\n      quote,\n      defaultTemplate,\n      specToQuoteDraft,\n      dispatch\n    } = this.props;\n\n    const formSections = specToQuoteDraft.getIn(['draft', 'formSections'])?.map((section) => {\n      // clear quoteProduct if somehow it's invalid\n      const products = section\n        ?.get('products')\n        ?.map((product) => {\n          return product?.getIn(['quoteProduct', 'id'])\n            ? product.withMutations((ctx) => {\n              // ugly, but his is a bandaid to fix bad duplicate section where the duplicated section should have the following keys removed for the quoteProduct but did not\n              // so we are initializing the spec to quote form (which indirectly initializes the quote form) with the correct values by removing the following keys\n              if (!product.get('specProduct')) {\n                ctx\n                  .deleteIn(['quoteProduct', 'specProductId'])\n                  .deleteIn(['quoteProduct', 'isRecommended'])\n                  // .deleteIn(['quoteProduct', 'packageId'])\n                  .deleteIn(['quoteProduct', 'productIndex'])\n                  .deleteIn(['quoteProduct', 'uniquePackageId']);\n              }\n            })\n            : product.set('quoteProduct', null);\n        });\n      return section.set('products', products);\n    });\n    if (formSections) {\n      const specToQuoteFormValues = Map().set('sections', formSections);\n      const quoteFormValues = getQuoteFormInitialValuesFromSpecToQuoteDraft({\n        draft: specToQuoteFormValues,\n        quote,\n        defaultTemplate,\n      });\n      dispatch(change(QUOTE_FORM_NAME, 'sections', quoteFormValues.get('sections')));\n    }\n  }\n\n  private getBidSourceQuote = async (sourceQuoteId, getSpecToSourceQuoteDraft, getSpecToQuoteProduct, bidResponseId?) => {\n    const { dispatch, env, appId } = this.props;\n    const sourceQuote = await BidQuoteServiceApi.fetchOneQuote(env, appId, Number(sourceQuoteId), bidResponseId);\n    if (sourceQuote?.createdFromSpecId) {\n      getSpecToSourceQuoteDraft(Number(sourceQuoteId), this.initWithDraft);\n      getSpecToQuoteProduct(sourceQuote.createdFromSpecId);\n    }\n    if (sourceQuote) {\n      dispatch(new SetSourceQuoteAction({sourceQuoteId: sourceQuote?.id}));\n    }\n    this.setState({\n      sourceQuote,\n      showDetails: false,\n      quoteId: null,\n      isEditing: true\n    });\n  }\n\n  // private handleCancelShareVendorQuote = () => {\n  //   const { dispatch, quote } = this.props;\n  //   dispatch(goBack());\n  //   this.setState({\n  //     isShareVendorQuote: false\n  //   });\n  // }\n}\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n    createQuoteFromSpecToQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => {\n      dispatch(new CreateQuoteWithSpecToQuoteAction({ exitAfterSave, onSuccess, isAutoSave }));\n    },\n    createQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => {\n      dispatch(new CreateQuoteAction({ exitAfterSave, onSuccess, isAutoSave }));\n    },\n    updateQuote: (exitAfterSave: boolean, onSuccess?: (newQuote: IMap<Quote>) => void, isAutoSave?: boolean) => {\n      dispatch(new UpdateQuoteAction({ exitAfterSave, onSuccess, isAutoSave }));\n    },\n    getQuote: (quoteId: number) => {\n      dispatch(new GetQuotesAction({ quoteId, withLocation: true, fallbackTo404: true }));\n    },\n    deleteQuote: (quoteId: number) => {\n      dispatch(new DeleteQuoteAction({ quoteId, redirectTo: QUOTE_LIST_PATH }));\n    },\n    duplicateQuote: (quoteId: string) => {\n      dispatch(new DuplicateQuoteAction(quoteId));\n    },\n    createRevision: (quoteId: number) => {\n      dispatch(new CreateRevisionAction(quoteId));\n    },\n    createRequote: (quoteId: number) => {\n      dispatch(new CreateRequoteAction(quoteId));\n    },\n    createPreview: (quote: number) => {\n      dispatch(new CreateQuotePreviewAction(quote));\n    },\n    selectQuoteId: (quoteId: number) => {\n      dispatch(new SelectQuoteIdAction({ quoteId }));\n    },\n    selectProjectId: (projectId: number) => {\n      dispatch(new SelectProjectAction({ projectId }));\n    },\n    selectRevision: (quoteId: string) => {\n      dispatch(push(`/quote/${quoteId}`));\n      dispatch(new SelectQuoteIdAction({ quoteId: +quoteId }));\n    },\n    getProject: (id: number) => {\n      dispatch(new GetProjectByIdAndSelectProjectAction({ projectId: id }));\n    },\n    getOfficeDiscounts: () => {\n      dispatch(new GetDiscountsForOfficeId());\n    },\n    toggleDrawer: (drawerId: string, open?: boolean) => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: drawerId,\n        open,\n      }));\n    },\n    openSalesOrderModal: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: SALES_ORDER_MODAL_KEY,\n        open: true\n      }));\n    },\n    getDefaultQuickTextByType: (type: string) => {\n      dispatch(new GetDefaultQuickTextByTypeAction({ type }));\n    },\n    sendQuoteToErp: (quoteId: number) => {\n      dispatch(new GenericErpCronJobAction({ dispatch, quoteId }));\n    },\n    getSpecToQuoteProduct: (specId: number) => {\n      dispatch(new GetSpecToQuoteProductsAction({ specId }));\n    },\n    getTemplateList: () => {\n      dispatch(new GetQuoteTemplateListAction());\n    },\n    resetSpecToQuote: () => {\n      dispatch(new ResetSpecsAction());\n      dispatch(new SelectSpecAction(-1));\n      dispatch(new ResetSpecToQuote());\n    },\n    getSpecToQuoteDraft: (quoteId: number, callback?: () => void) => {\n      dispatch(new GetSpecToQuoteDraftAction({\n        quoteId,\n        onSuccess: (_specToQuoteDraft) => {\n          dispatch(new PrepareInitialValuesForSpecToQuote({\n            quoteId,\n            draft: fromJS(JSON.parse(_specToQuoteDraft.get('draft'))),\n          }));\n          if (callback) {\n            callback();\n          }\n          // callback();\n        }\n      }));\n    },\n    getSpecToSourceQuoteDraft: (quoteId: number, callback?: () => void) => {\n      dispatch(new GetSpecToQuoteDraftAction({\n        quoteId,\n        onSuccess: (_specToQuoteDraft) => {\n          dispatch(new PrepareInitialValuesForSpecToSourceQuote({\n            quoteId,\n            draft: fromJS(JSON.parse(_specToQuoteDraft.get('draft'))),\n          }));\n          if (callback) {\n            callback();\n          }\n        }\n      }));\n    },\n    potentiallyFetchManufacturerDiscounts: () => {\n      dispatch(new PotentiallyFetchManufacturerDiscountsAndPriorityAction());\n    }\n  };\n};\n\nconst currentTime = new Date();\n\nexport function getDefaultInitialValues({\n  loggedInUserData,\n  defaultQuoteQuickText,\n  regions,\n  hasCurrencyConversionACLRole,\n  defaultManufacturerDiscountsManufacturerIds,\n  defaultTerms,\n  defaultComments,\n  defaultDiscountList,\n}: {\n  loggedInUserData: IMap<User>,\n  defaultQuoteQuickText: IMap<QuickEntry>,\n  regions: List<IMap<Region>>,\n  hasCurrencyConversionACLRole: boolean,\n  defaultManufacturerDiscountsManufacturerIds: List<number>,\n  defaultTerms: string,\n  defaultComments: string,\n  defaultDiscountList: List<IMap<any>>\n}): IMap<any> {\n  const defaultSpecialTerms = defaultQuoteQuickText && defaultQuoteQuickText.get('blob');\n  const defaultTemplate = defaultQuoteQuickText && defaultQuoteQuickText.size && fromJS({\n    label: defaultQuoteQuickText.get('key'),\n    value: defaultQuoteQuickText.get('blob'),\n    id: defaultQuoteQuickText.get('id')\n  });\n\n  return Map<string, any>().withMutations((ctx) => {\n    if (loggedInUserData) {\n      ctx.set('assignedTo', loggedInUserData);\n    }\n\n    ctx.set('period', 30);\n    if (regions.size) {\n      ctx.set('region', regions.get(0)); // display the first obj as default region PT-2877\n    } else {\n      ctx.set('region', fromJS({\n        id: 'default',\n        value: 'Default',\n        label: 'Default',\n      }));\n    }\n\n    if (defaultDiscountList && defaultDiscountList.size) {\n      ctx.set('discountList', defaultDiscountList);\n    }\n\n    ctx.setIn(['discounts', 'manufacturerDiscounts'], defaultManufacturerDiscountsManufacturerIds);\n\n    ctx.setIn(['termsAndCondition', 'specialTerms'], defaultSpecialTerms);\n    ctx.setIn(['termsAndCondition', 'template'], defaultTemplate);\n    // ctx.setIn(['termsAndCondition', 'specialTerms'], defaultSpecialTerms + (defaultTerms ? `\\n${defaultTerms}` : ''));\n    // ctx.setIn(['termsAndCondition', 'comments'], defaultComments || '');\n    if (hasCurrencyConversionACLRole) {\n      ctx.set('conversionDate', removeTZ(moment.utc(currentTime).toISOString()));\n    }\n  });\n}\n\nconst makeMapStateToProps = () => {\n  const mapStateToProps = (state: any, ownProps: QuoteComponentProps) => {\n    const quoteId = ownProps.match.params && ownProps.match.params.id;\n    const originalInitialValues = makeSelectQuote(quoteId)(state);\n    const hasCurrencyConversionACLRole = makeSelectUserHasCurrencyConversion()(state);\n    const updatedOriginalInitialValues = originalInitialValues?.withMutations(mutable => {\n      const assignedTo = mutable.get('assignedTo');\n      if (List.isList(assignedTo) && assignedTo.size) {\n        mutable.set('assignedTo', assignedTo.get(0));\n      } else {\n        mutable.set('assignedTo', null);\n      }\n\n      const architect = mutable.get('architectName');\n      const contractor = mutable.get('contractorName');\n      const engineer = mutable.get('engineerName');\n      if (architect && architect.size) {\n        mutable.set('architectName', architect.get(0));\n      } else {\n        mutable.set('architectName', null);\n      }\n      if (contractor && contractor.size) {\n        mutable.set('contractorName', contractor.get(0));\n      } else {\n        mutable.set('contractorName', null);\n      }\n      if (engineer && engineer.size) {\n        mutable.set('engineerName', engineer.get(0));\n      } else {\n        mutable.set('engineerName', null);\n      }\n\n      const selectedCustomer = originalInitialValues.get('selectedCustomer');\n      const hasMatchingSelectedCustomer = originalInitialValues.get('customers').some((customer) => customer.get('id') === selectedCustomer);\n      mutable.set('customers', [...originalInitialValues.get('customers')]);\n      if (selectedCustomer && !hasMatchingSelectedCustomer) {\n        mutable.set('selectedCustomer', null);\n      }\n\n      mutable.set('period', 30);\n      mutable.set('bidDate', moment.utc(mutable.get('bidDate')).toISOString());\n      mutable.set('expiryDate', moment.utc(mutable.get('expiryDate')).toISOString());\n      if (hasCurrencyConversionACLRole) {\n        mutable.set('conversionDate', removeTZ(moment.utc(mutable.get('conversionDate') || mutable.get('createdDate')).toISOString()));\n      }\n\n      const termsAndConditions = mutable.get('termsAndCondition');\n      if (!Map.isMap(termsAndConditions)) {\n        mutable.set('termsAndCondition', Map());\n      }\n    });\n\n    const loggedInUserData = makeSelectLoggedInUserData()(state);\n    const hasFeatStockLevelAclRole = makeSelectUserHasFeatStockLevel()(state);\n    const nonStockProductNote = makeSelectDefaultQuickTextByType('nonStockProductNote')(state);\n    const defaultQuoteQuickText: IMap<QuickEntry> = makeSelectDefaultQuickTextByType('quoteTerms')(state);\n    const regions = makeSelectOfficePricingRegions()(state);\n\n    const specId = ownProps.match.params && Number(ownProps.match.params.specId) || updatedOriginalInitialValues?.get('createdFromSpecId');\n    const spec = makeSelectSpec({ specId })(state);\n    const specToQuoteLinkedList = makeSelectSpecToQuoteLinkedListBySpecId(specId)(state);\n\n    const hasFetchedDefaultDiscountList = makeSelectHasFetchedQuoteDiscountList()(state);\n    const defaultDiscountList = makeSelectQuoteDiscountList()(state);\n\n    const discountPriority = makeSelectDiscountPriority()(state);\n    const defaultManufacturerDiscounts = makeSelectDefaultManufacturerDiscounts()(state);\n    const defaultManufacturerDiscountsManufacturerIds = defaultManufacturerDiscounts?.map((group) => group.getIn(['manufacturer', 'id'])) || List();\n    const defaultManufacturerDiscountsTerms = '';\n    const defaultManufacturerDiscountsComments = '';\n    // const defaultManufacturerDiscountsTerms = makeSelectDefaultManufacturerDiscountsTerms()(state);\n    // const defaultManufacturerDiscountsComments = makeSelectDefaultManufacturerDiscountsComments()(state);\n\n    const defaultTemplate = makeSelectDefaultQuoteTemplate()(state);\n    const defaultInitialValues = getDefaultInitialValues({\n      loggedInUserData,\n      defaultQuoteQuickText,\n      regions,\n      hasCurrencyConversionACLRole,\n      defaultManufacturerDiscountsManufacturerIds,\n      defaultTerms: defaultManufacturerDiscountsTerms,\n      defaultComments: defaultManufacturerDiscountsComments,\n      defaultDiscountList,\n    });\n\n    const initialQuoteValues = Boolean(originalInitialValues) ? updatedOriginalInitialValues : defaultInitialValues;\n\n    const quoteForm = selectForm(QUOTE_FORM_NAME)(state);\n    const sectionsSize = quoteForm?.getIn(['values', 'sections'])?.size || 0;\n\n    const hasQuoteConnectAcl = makeSelectUserHasQuoteConnectAcl()(state);\n    const isRequestProductInitialSelectAllPreference = makeSelectVendorQuotationAutoTakeoff()(state);\n\n    let sourceQuoteId = null;\n    let bidResponseId = null;\n    const urlSearchParams = new URLSearchParams(ownProps.location.search);\n    if (urlSearchParams.get('sourceQuoteId')) {\n      sourceQuoteId = urlSearchParams.get('sourceQuoteId');\n    }\n    if (urlSearchParams.get('bidResponseId')) {\n      bidResponseId = urlSearchParams.get('bidResponseId');\n    }\n    // Fall back to persisted Redux state so the bid-response context survives\n    // post-save redirects that drop the URL query string.\n    const persistedSourceQuoteId = makeSelectSourceQuote()(state);\n    const persistedBidResponseId = makeSelectBidResponseId()(state);\n    if (!sourceQuoteId && persistedSourceQuoteId) {\n      sourceQuoteId = persistedSourceQuoteId;\n    }\n    if (!bidResponseId && persistedBidResponseId) {\n      bidResponseId = persistedBidResponseId;\n    }\n\n    const readyForInitialize =\n      Boolean(spec) &&\n      Boolean(defaultQuoteQuickText) &&\n      !regions.isEmpty() &&\n      Boolean(nonStockProductNote) &&\n      Boolean(defaultTemplate) &&\n      hasFetchedDefaultDiscountList &&\n      (!hasQuoteConnectAcl || (hasQuoteConnectAcl && isRequestProductInitialSelectAllPreference !== undefined)) &&\n      (!ownProps.match.url.match(/\\/createQuote\\b/) || !ownProps.match.url.match(/\\/createQuote\\/([0-9]+)/));\n\n    let importPricingForm = null;\n    if (hasQuoteConnectAcl) {\n      importPricingForm = selectForm(IMPORT_PRICING_FORM_NAME)(state);\n    }\n    return {\n      initialValues: initialQuoteValues,\n      readyForInitialize,\n      spec,\n      defaultQuoteQuickText,\n      discountPriority,\n      defaultManufacturerDiscountsManufacturerIds,\n      defaultManufacturerDiscountsTerms,\n      defaultManufacturerDiscountsComments,\n      loggedInUserData,\n      regions,\n      hasFeatStockLevelAclRole,\n      nonStockProductNote,\n      defaultTemplate,\n      specToQuoteLinkedList,\n      quoteForm,\n      sectionsSize,\n      hasQuoteConnectAcl,\n      isRequestProductInitialSelectAllPreference,\n      isFetchingQuoteTemplates: makeSelectIsFetchingQuoteTemplates()(state),\n      quoteFormId: makeSelectQuoteFormProps(['id'])(state),\n      quote: makeSelectQuote(quoteId)(state),\n      scrollNode: makeSelectScrollNode()(state),\n      linkedProject: makeSelectProject(ownProps.quote && ownProps.quote.get('projectId'))(state),\n      quotePreview: makeSelectQuotePreview()(state),\n      quoteLoading: makeSelectQuotesLoading()(state),\n      officeId: makeSelectUserOfficeId()(state),\n      token: makeSelectToken()(state),\n      env: makeSelectEnv()(state),\n      syncErrors: makeSelectReduxFormSyncErrors()(state),\n      submittingQuote: makeSelectSubmittingQuote()(state),\n      hasERP: makeSelectUserHasERP()(state),\n      isUpdatingPrice: makeSelectUpdatePricingLoading()(state),\n      userFirmId: makeSelectUserFirmId()(state),\n      firmEmailSetting: makeSelectFirmEmailSetting()(state),\n      userEmail: makeSelectIdentityObject()(state)?.get('email') || '',\n      // quoteForm: selectForm(QUOTE_FORM_NAME)(state),\n      specToQuoteDraft: makeSelectSpecToQuoteDraft()(state),\n      isCreatingQuote: makeSelectCreateQuoteWithSpecToQuote()(state),\n      loadingSpecToQuoteLinkedList: makeSelectIsLoadingSpecToQuoteLinkedList()(state),\n      hasOMShopDrawingAcl: makeSelectUserHasOMShopDrawingAcl()(state),\n      // PT-5542 (2026-09-03): firm-gated XML download (Wolseley et al).\n      // Used to append an XML entry to the nav-bar legacy Download menu.\n      allowXmlDownload: makeSelectAllowXmlDownload()(state),\n      // PT-5477 / PT-5486 (2026-08-26): master gate for the export page +\n      // email flow. When OFF the nav-bar menu keeps the legacy\n      // /preview/:id/:type items.\n      hasFeatEmailImprovements: makeSelectUserHasFeatEmailImprovements()(state),\n      hasCurrencyConversionACLRole,\n      isSpecToQuote: makeSelectIsSpecToQuote()(state),\n      isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep()(state),\n      hasIsRequestingProduct: makeSelectHasIsRequestingProduct()(state),\n      appId: makeSelectAppId()(state),\n      importPricingForm,\n      sourceQuoteId,\n      bidResponseId,\n      appliedManufacturerDiscounts: makeSelectSelectedManufacturerDiscounts(quoteForm.getIn(['values', 'discounts', 'manufacturerDiscounts']) || List())(state),\n      selectedCustomerDiscounts: makeSelectSelectedCustomerDiscounts()(state),\n      selectLinkedListBySpecId: (sourceSpecId: number) => makeSelectSpecToQuoteLinkedListBySpecId(sourceSpecId)(state),\n      quoteAutoSavePreferenceFetched: makeSelectQuoteAutoSavePreferenceFetched()(state),\n      hasFetchedQuoteDiscountList: makeSelectHasFetchedQuoteDiscountList()(state),\n      autoSavePerformRequestId: makeSelectAutoSavePerformRequestId()(state),\n      quoteAutoSaveEnabled: makeSelectAutoSaveEnabled()(state),\n    };\n  };\n\n  return mapStateToProps;\n};\n\nexport default React.memo(compose<React.ComponentClass<QuoteComponentProps>>(\n  withAtsApi(),\n  withStyles(styles),\n  connect(makeMapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  withReduxFormValidationTranslation({ formName: QUOTE_FORM_NAME }),\n  reduxForm({\n    form: QUOTE_FORM_NAME,\n    enableReinitialize: true,\n    keepDirtyOnReinitialize: true,\n    updateUnregisteredFields: true,\n    asyncBlurFields: [] // temp prevent bug for redux form promise, will get back here later\n  }),\n  withAmplitudeData,\n)(QuoteContainer));","export default __webpack_public_path__ + \"e7e915313973ba1d49f9bb2a1998626e.js\";","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n// As defined on the list of supported events: https://reactjs.org/docs/events.html\nexport var clipboardEvents = ['onCopy', 'onCut', 'onPaste'];\nexport var compositionEvents = [\n    'onCompositionEnd',\n    'onCompositionStart',\n    'onCompositionUpdate',\n];\nexport var focusEvents = ['onFocus', 'onBlur'];\nexport var formEvents = ['onInput', 'onInvalid', 'onReset', 'onSubmit'];\nexport var imageEvents = ['onLoad', 'onError'];\nexport var keyboardEvents = ['onKeyDown', 'onKeyPress', 'onKeyUp'];\nexport var mediaEvents = [\n    'onAbort',\n    'onCanPlay',\n    'onCanPlayThrough',\n    'onDurationChange',\n    'onEmptied',\n    'onEncrypted',\n    'onEnded',\n    'onError',\n    'onLoadedData',\n    'onLoadedMetadata',\n    'onLoadStart',\n    'onPause',\n    'onPlay',\n    'onPlaying',\n    'onProgress',\n    'onRateChange',\n    'onSeeked',\n    'onSeeking',\n    'onStalled',\n    'onSuspend',\n    'onTimeUpdate',\n    'onVolumeChange',\n    'onWaiting',\n];\nexport var mouseEvents = [\n    'onClick',\n    'onContextMenu',\n    'onDoubleClick',\n    'onMouseDown',\n    'onMouseEnter',\n    'onMouseLeave',\n    'onMouseMove',\n    'onMouseOut',\n    'onMouseOver',\n    'onMouseUp',\n];\nexport var dragEvents = [\n    'onDrag',\n    'onDragEnd',\n    'onDragEnter',\n    'onDragExit',\n    'onDragLeave',\n    'onDragOver',\n    'onDragStart',\n    'onDrop',\n];\nexport var selectionEvents = ['onSelect'];\nexport var touchEvents = ['onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart'];\nexport var pointerEvents = [\n    'onPointerDown',\n    'onPointerMove',\n    'onPointerUp',\n    'onPointerCancel',\n    'onGotPointerCapture',\n    'onLostPointerCapture',\n    'onPointerEnter',\n    'onPointerLeave',\n    'onPointerOver',\n    'onPointerOut',\n];\nexport var uiEvents = ['onScroll'];\nexport var wheelEvents = ['onWheel'];\nexport var animationEvents = [\n    'onAnimationStart',\n    'onAnimationEnd',\n    'onAnimationIteration',\n];\nexport var transitionEvents = ['onTransitionEnd'];\nexport var otherEvents = ['onToggle'];\nexport var changeEvents = ['onChange'];\nexport var allEvents = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], clipboardEvents, true), compositionEvents, true), focusEvents, true), formEvents, true), imageEvents, true), keyboardEvents, true), mediaEvents, true), mouseEvents, true), dragEvents, true), selectionEvents, true), touchEvents, true), pointerEvents, true), uiEvents, true), wheelEvents, true), animationEvents, true), transitionEvents, true), changeEvents, true), otherEvents, true);\n/**\n * Returns an object with on-event callback props curried with provided args.\n * @param {Object} props Props passed to a component.\n * @param {Function=} getArgs A function that returns argument(s) on-event callbacks\n *   shall be curried with.\n */\nexport default function makeEventProps(props, getArgs) {\n    var eventProps = {};\n    allEvents.forEach(function (eventName) {\n        var eventHandler = props[eventName];\n        if (!eventHandler) {\n            return;\n        }\n        if (getArgs) {\n            eventProps[eventName] = (function (event) {\n                return eventHandler(event, getArgs(eventName));\n            });\n        }\n        else {\n            eventProps[eventName] = eventHandler;\n        }\n    });\n    return eventProps;\n}\n","export default function makeCancellablePromise(promise) {\n    var isCancelled = false;\n    var wrappedPromise = new Promise(function (resolve, reject) {\n        promise\n            .then(function (value) { return !isCancelled && resolve(value); })\n            .catch(function (error) { return !isCancelled && reject(error); });\n    });\n    return {\n        promise: wrappedPromise,\n        cancel: function () {\n            isCancelled = true;\n        },\n    };\n}\n","export default function mergeClassNames() {\n  return Array.prototype.slice.call(arguments).reduce(function (classList, arg) {\n    return classList.concat(arg);\n  }, []).filter(function (arg) {\n    return typeof arg === 'string';\n  }).join(' ');\n}","import { createContext } from 'react';\nexport default /*#__PURE__*/createContext(null);","import React from 'react';\nimport PropTypes from 'prop-types';\nexport default function Message(_ref) {\n  var children = _ref.children,\n      type = _ref.type;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: \"react-pdf__message react-pdf__message--\".concat(type)\n  }, children);\n}\nMessage.propTypes = {\n  children: PropTypes.node,\n  type: PropTypes.oneOf(['error', 'loading', 'no-data']).isRequired\n};","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\n\n/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport invariant from 'tiny-invariant';\nvar DEFAULT_LINK_REL = 'noopener noreferrer nofollow';\n\nvar LinkService = /*#__PURE__*/function () {\n  function LinkService() {\n    _classCallCheck(this, LinkService);\n\n    this.externalLinkTarget = null;\n    this.externalLinkRel = null;\n  }\n\n  _createClass(LinkService, [{\n    key: \"setDocument\",\n    value: function setDocument(pdfDocument) {\n      this.pdfDocument = pdfDocument;\n    }\n  }, {\n    key: \"setViewer\",\n    value: function setViewer(pdfViewer) {\n      this.pdfViewer = pdfViewer;\n    }\n  }, {\n    key: \"setExternalLinkRel\",\n    value: function setExternalLinkRel(externalLinkRel) {\n      this.externalLinkRel = externalLinkRel;\n    }\n  }, {\n    key: \"setExternalLinkTarget\",\n    value: function setExternalLinkTarget(externalLinkTarget) {\n      this.externalLinkTarget = externalLinkTarget;\n    }\n  }, {\n    key: \"setHistory\",\n    value: function setHistory() {}\n  }, {\n    key: \"pagesCount\",\n    get: function get() {\n      return this.pdfDocument ? this.pdfDocument.numPages : 0;\n    }\n  }, {\n    key: \"page\",\n    get: function get() {\n      return this.pdfViewer.currentPageNumber;\n    },\n    set: function set(value) {\n      this.pdfViewer.currentPageNumber = value;\n    }\n  }, {\n    key: \"rotation\",\n    get: function get() {\n      return 0;\n    },\n    set: function set(value) {}\n  }, {\n    key: \"goToDestination\",\n    value: function goToDestination(dest) {\n      var _this = this;\n\n      new Promise(function (resolve) {\n        if (typeof dest === 'string') {\n          _this.pdfDocument.getDestination(dest).then(resolve);\n        } else if (Array.isArray(dest)) {\n          resolve(dest);\n        } else {\n          dest.then(resolve);\n        }\n      }).then(function (explicitDest) {\n        invariant(Array.isArray(explicitDest), \"\\\"\".concat(explicitDest, \"\\\" is not a valid destination array.\"));\n        var destRef = explicitDest[0];\n        new Promise(function (resolve) {\n          if (destRef instanceof Object) {\n            _this.pdfDocument.getPageIndex(destRef).then(function (pageIndex) {\n              resolve(pageIndex);\n            })[\"catch\"](function () {\n              invariant(false, \"\\\"\".concat(destRef, \"\\\" is not a valid page reference.\"));\n            });\n          } else if (typeof destRef === 'number') {\n            resolve(destRef);\n          } else {\n            invariant(false, \"\\\"\".concat(destRef, \"\\\" is not a valid destination reference.\"));\n          }\n        }).then(function (pageIndex) {\n          var pageNumber = pageIndex + 1;\n          invariant(pageNumber >= 1 && pageNumber <= _this.pagesCount, \"\\\"\".concat(pageNumber, \"\\\" is not a valid page number.\"));\n\n          _this.pdfViewer.scrollPageIntoView({\n            dest: dest,\n            pageIndex: pageIndex,\n            pageNumber: pageNumber\n          });\n        });\n      });\n    }\n  }, {\n    key: \"navigateTo\",\n    value: function navigateTo(dest) {\n      this.goToDestination(dest);\n    }\n  }, {\n    key: \"goToPage\",\n    value: function goToPage() {}\n  }, {\n    key: \"addLinkAttributes\",\n    value: function addLinkAttributes(link, url, newWindow) {\n      link.href = url;\n      link.rel = this.externalLinkRel || DEFAULT_LINK_REL;\n      link.target = newWindow ? '_blank' : this.externalLinkTarget || '';\n    }\n  }, {\n    key: \"getDestinationHash\",\n    value: function getDestinationHash() {\n      return '#';\n    }\n  }, {\n    key: \"getAnchorUrl\",\n    value: function getAnchorUrl() {\n      return '#';\n    }\n  }, {\n    key: \"setHash\",\n    value: function setHash() {}\n  }, {\n    key: \"executeNamedAction\",\n    value: function executeNamedAction() {}\n  }, {\n    key: \"cachePageRef\",\n    value: function cachePageRef() {}\n  }, {\n    key: \"isPageVisible\",\n    value: function isPageVisible() {\n      return true;\n    }\n  }, {\n    key: \"isPageCached\",\n    value: function isPageCached() {\n      return true;\n    }\n  }]);\n\n  return LinkService;\n}();\n\nexport { LinkService as default };","// As defined in https://github.com/mozilla/pdf.js/blob/d9fac3459609a807be6506fb3441b5da4b154d14/src/shared/util.js#L371-L374\nvar PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2\n};\nexport default PasswordResponses;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\n/**\n * Checks if we're running in a browser environment.\n */\n\nexport var isBrowser = typeof window !== 'undefined';\n/**\n * Checks whether we're running from a local file system.\n */\n\nexport var isLocalFileSystem = isBrowser && window.location.protocol === 'file:';\n/**\n * Checks whether a variable is defined.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isDefined(variable) {\n  return typeof variable !== 'undefined';\n}\n/**\n * Checks whether a variable is defined and not null.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isProvided(variable) {\n  return isDefined(variable) && variable !== null;\n}\n/**\n * Checkes whether a variable provided is a string.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isString(variable) {\n  return typeof variable === 'string';\n}\n/**\n * Checks whether a variable provided is an ArrayBuffer.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isArrayBuffer(variable) {\n  return variable instanceof ArrayBuffer;\n}\n/**\n * Checkes whether a variable provided is a Blob.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isBlob(variable) {\n  invariant(isBrowser, 'isBlob can only be used in a browser environment');\n  return variable instanceof Blob;\n}\n/**\n * Checkes whether a variable provided is a File.\n *\n * @param {*} variable Variable to check\n */\n\nexport function isFile(variable) {\n  invariant(isBrowser, 'isFile can only be used in a browser environment');\n  return variable instanceof File;\n}\n/**\n * Checks whether a string provided is a data URI.\n *\n * @param {string} str String to check\n */\n\nexport function isDataURI(str) {\n  return isString(str) && /^data:/.test(str);\n}\nexport function dataURItoByteString(dataURI) {\n  invariant(isDataURI(dataURI), 'Invalid data URI.');\n\n  var _dataURI$split = dataURI.split(','),\n      _dataURI$split2 = _slicedToArray(_dataURI$split, 2),\n      headersString = _dataURI$split2[0],\n      dataString = _dataURI$split2[1];\n\n  var headers = headersString.split(';');\n\n  if (headers.indexOf('base64') !== -1) {\n    return atob(dataString);\n  }\n\n  return unescape(dataString);\n}\nexport function getPixelRatio() {\n  return isBrowser && window.devicePixelRatio || 1;\n}\nvar allowFileAccessFromFilesTip = 'On Chromium based browsers, you can use --allow-file-access-from-files flag for debugging purposes.';\nexport function displayCORSWarning() {\n  warning(!isLocalFileSystem, \"Loading PDF as base64 strings/URLs may not work on protocols other than HTTP/HTTPS. \".concat(allowFileAccessFromFilesTip));\n}\nexport function displayWorkerWarning() {\n  warning(!isLocalFileSystem, \"Loading PDF.js worker may not work on protocols other than HTTP/HTTPS. \".concat(allowFileAccessFromFilesTip));\n}\nexport function cancelRunningTask(runningTask) {\n  if (runningTask && runningTask.cancel) runningTask.cancel();\n}\nexport function makePageCallback(page, scale) {\n  Object.defineProperty(page, 'width', {\n    get: function get() {\n      return this.view[2] * scale;\n    },\n    configurable: true\n  });\n  Object.defineProperty(page, 'height', {\n    get: function get() {\n      return this.view[3] * scale;\n    },\n    configurable: true\n  });\n  Object.defineProperty(page, 'originalWidth', {\n    get: function get() {\n      return this.view[2];\n    },\n    configurable: true\n  });\n  Object.defineProperty(page, 'originalHeight', {\n    get: function get() {\n      return this.view[3];\n    },\n    configurable: true\n  });\n  return page;\n}\nexport function isCancelException(error) {\n  return error.name === 'RenderingCancelledException';\n}\nexport function loadFromFile(file) {\n  return new Promise(function (resolve, reject) {\n    var reader = new FileReader();\n\n    reader.onload = function () {\n      return resolve(new Uint8Array(reader.result));\n    };\n\n    reader.onerror = function (event) {\n      switch (event.target.error.code) {\n        case event.target.error.NOT_FOUND_ERR:\n          return reject(new Error('Error while reading a file: File not found.'));\n\n        case event.target.error.NOT_READABLE_ERR:\n          return reject(new Error('Error while reading a file: File not readable.'));\n\n        case event.target.error.SECURITY_ERR:\n          return reject(new Error('Error while reading a file: Security error.'));\n\n        case event.target.error.ABORT_ERR:\n          return reject(new Error('Error while reading a file: Aborted.'));\n\n        default:\n          return reject(new Error('Error while reading a file.'));\n      }\n    };\n\n    reader.readAsArrayBuffer(file);\n    return null;\n  });\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport PropTypes from 'prop-types';\nimport { mouseEvents, touchEvents, keyboardEvents } from 'make-event-props';\nimport { isDefined } from './utils';\nimport LinkService from '../LinkService';\nexport var eventProps = function () {\n  var result = {};\n  [].concat(_toConsumableArray(mouseEvents), _toConsumableArray(touchEvents), _toConsumableArray(keyboardEvents)).forEach(function (eventName) {\n    result[eventName] = PropTypes.func;\n  });\n  return result;\n}();\nvar fileTypes = [PropTypes.string, PropTypes.instanceOf(ArrayBuffer), PropTypes.shape({\n  data: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n  httpHeaders: PropTypes.object,\n  range: PropTypes.object,\n  url: PropTypes.string,\n  withCredentials: PropTypes.bool\n})];\n\nif (typeof File !== 'undefined') {\n  fileTypes.push(PropTypes.instanceOf(File));\n}\n\nif (typeof Blob !== 'undefined') {\n  fileTypes.push(PropTypes.instanceOf(Blob));\n}\n\nexport var isClassName = PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]);\nexport var isFile = PropTypes.oneOfType(fileTypes);\nexport var isLinkService = PropTypes.instanceOf(LinkService);\nexport var isLinkTarget = PropTypes.oneOf(['_self', '_blank', '_parent', '_top']);\nexport var isPage = PropTypes.shape({\n  _transport: PropTypes.shape({\n    fontLoader: PropTypes.object.isRequired\n  }).isRequired,\n  commonObjs: PropTypes.shape({\n    _objs: PropTypes.object.isRequired\n  }).isRequired,\n  getAnnotations: PropTypes.func.isRequired,\n  getTextContent: PropTypes.func.isRequired,\n  getViewport: PropTypes.func.isRequired,\n  render: PropTypes.func.isRequired\n});\nexport var isPageIndex = function isPageIndex(props, propName, componentName) {\n  var pageIndex = props[propName],\n      pageNumber = props.pageNumber,\n      pdf = props.pdf;\n\n  if (!isDefined(pdf)) {\n    return null;\n  }\n\n  if (isDefined(pageIndex)) {\n    if (typeof pageIndex !== 'number') {\n      return new Error(\"`\".concat(propName, \"` of type `\").concat(_typeof(pageIndex), \"` supplied to `\").concat(componentName, \"`, expected `number`.\"));\n    }\n\n    if (pageIndex < 0) {\n      return new Error(\"Expected `\".concat(propName, \"` to be greater or equal to 0.\"));\n    }\n\n    var numPages = pdf.numPages;\n\n    if (pageIndex + 1 > numPages) {\n      return new Error(\"Expected `\".concat(propName, \"` to be less or equal to \").concat(numPages - 1, \".\"));\n    }\n  } else if (!isDefined(pageNumber)) {\n    return new Error(\"`\".concat(propName, \"` not supplied. Either pageIndex or pageNumber must be supplied to `\").concat(componentName, \"`.\"));\n  } // Everything is fine\n\n\n  return null;\n};\nexport var isPageNumber = function isPageNumber(props, propName, componentName) {\n  var pageNumber = props[propName],\n      pageIndex = props.pageIndex,\n      pdf = props.pdf;\n\n  if (!isDefined(pdf)) {\n    return null;\n  }\n\n  if (isDefined(pageNumber)) {\n    if (typeof pageNumber !== 'number') {\n      return new Error(\"`\".concat(propName, \"` of type `\").concat(_typeof(pageNumber), \"` supplied to `\").concat(componentName, \"`, expected `number`.\"));\n    }\n\n    if (pageNumber < 1) {\n      return new Error(\"Expected `\".concat(propName, \"` to be greater or equal to 1.\"));\n    }\n\n    var numPages = pdf.numPages;\n\n    if (pageNumber > numPages) {\n      return new Error(\"Expected `\".concat(propName, \"` to be less or equal to \").concat(numPages, \".\"));\n    }\n  } else if (!isDefined(pageIndex)) {\n    return new Error(\"`\".concat(propName, \"` not supplied. Either pageIndex or pageNumber must be supplied to `\").concat(componentName, \"`.\"));\n  } // Everything is fine\n\n\n  return null;\n};\nexport var isPdf = PropTypes.oneOfType([PropTypes.shape({\n  getDestination: PropTypes.func.isRequired,\n  getOutline: PropTypes.func.isRequired,\n  getPage: PropTypes.func.isRequired,\n  numPages: PropTypes.number.isRequired\n}), PropTypes.bool]);\nexport var isRef = PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n  current: PropTypes.any\n})]);\nexport var isRenderMode = PropTypes.oneOf(['canvas', 'none', 'svg']);\nexport var isRotate = PropTypes.oneOf([0, 90, 180, 270]);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"url\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/**\n * Loads a PDF document. Passes it to all children.\n */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport makeEventProps from 'make-event-props';\nimport makeCancellable from 'make-cancellable-promise';\nimport mergeClassNames from 'merge-class-names';\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\nimport * as pdfjs from 'pdfjs-dist/legacy/build/pdf';\nimport DocumentContext from './DocumentContext';\nimport Message from './Message';\nimport LinkService from './LinkService';\nimport PasswordResponses from './PasswordResponses';\nimport { cancelRunningTask, dataURItoByteString, displayCORSWarning, isArrayBuffer, isBlob, isBrowser, isDataURI, isFile, loadFromFile } from './shared/utils';\nimport { eventProps, isClassName, isFile as isFileProp, isRef } from './shared/propTypes';\nvar PDFDataRangeTransport = pdfjs.PDFDataRangeTransport;\n\nvar Document = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Document, _PureComponent);\n\n  var _super = _createSuper(Document);\n\n  function Document() {\n    var _this;\n\n    _classCallCheck(this, Document);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      pdf: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"viewer\", {\n      scrollPageIntoView: function scrollPageIntoView(_ref) {\n        var dest = _ref.dest,\n            pageIndex = _ref.pageIndex,\n            pageNumber = _ref.pageNumber;\n        // Handling jumping to internal links target\n        var onItemClick = _this.props.onItemClick; // First, check if custom handling of onItemClick was provided\n\n        if (onItemClick) {\n          onItemClick({\n            dest: dest,\n            pageIndex: pageIndex,\n            pageNumber: pageNumber\n          });\n          return;\n        } // If not, try to look for target page within the <Document>.\n\n\n        var page = _this.pages[pageIndex];\n\n        if (page) {\n          // Scroll to the page automatically\n          page.scrollIntoView();\n          return;\n        }\n\n        warning(false, \"An internal link leading to page \".concat(pageNumber, \" was clicked, but neither <Document> was provided with onItemClick nor it was able to find the page within itself. Either provide onItemClick to <Document> and handle navigating by yourself or ensure that all pages are rendered within <Document>.\"));\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"linkService\", new LinkService());\n\n    _defineProperty(_assertThisInitialized(_this), \"loadDocument\", function () {\n      // If another rendering is in progress, let's cancel it\n      cancelRunningTask(_this.runningTask); // If another loading is in progress, let's destroy it\n\n      if (_this.loadingTask) _this.loadingTask.destroy();\n      var cancellable = makeCancellable(_this.findDocumentSource());\n      _this.runningTask = cancellable;\n      cancellable.promise.then(function (source) {\n        _this.onSourceSuccess();\n\n        if (!source) {\n          return;\n        }\n\n        _this.setState(function (prevState) {\n          if (!prevState.pdf) {\n            return null;\n          }\n\n          return {\n            pdf: null\n          };\n        });\n\n        var _this$props = _this.props,\n            options = _this$props.options,\n            onLoadProgress = _this$props.onLoadProgress,\n            onPassword = _this$props.onPassword;\n        _this.loadingTask = pdfjs.getDocument(_objectSpread(_objectSpread({}, source), options));\n        _this.loadingTask.onPassword = onPassword;\n\n        if (onLoadProgress) {\n          _this.loadingTask.onProgress = onLoadProgress;\n        }\n\n        var cancellable = makeCancellable(_this.loadingTask.promise);\n        _this.runningTask = cancellable;\n        cancellable.promise.then(function (pdf) {\n          _this.setState(function (prevState) {\n            if (prevState.pdf && prevState.pdf.fingerprint === pdf.fingerprint) {\n              return null;\n            }\n\n            return {\n              pdf: pdf\n            };\n          }, _this.onLoadSuccess);\n        })[\"catch\"](function (error) {\n          _this.onLoadError(error);\n        });\n      })[\"catch\"](function (error) {\n        _this.onSourceError(error);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setupLinkService\", function () {\n      var _this$props2 = _this.props,\n          externalLinkRel = _this$props2.externalLinkRel,\n          externalLinkTarget = _this$props2.externalLinkTarget;\n\n      _this.linkService.setViewer(_this.viewer);\n\n      _this.linkService.setExternalLinkRel(externalLinkRel);\n\n      _this.linkService.setExternalLinkTarget(externalLinkTarget);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSourceSuccess\", function () {\n      var onSourceSuccess = _this.props.onSourceSuccess;\n      if (onSourceSuccess) onSourceSuccess();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSourceError\", function (error) {\n      warning(error);\n      var onSourceError = _this.props.onSourceError;\n      if (onSourceError) onSourceError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadSuccess\", function () {\n      var onLoadSuccess = _this.props.onLoadSuccess;\n      var pdf = _this.state.pdf;\n      if (onLoadSuccess) onLoadSuccess(pdf);\n      _this.pages = new Array(pdf.numPages);\n\n      _this.linkService.setDocument(pdf);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadError\", function (error) {\n      _this.setState({\n        pdf: false\n      });\n\n      warning(error);\n      var onLoadError = _this.props.onLoadError;\n      if (onLoadError) onLoadError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"findDocumentSource\", function () {\n      return new Promise(function (resolve) {\n        var file = _this.props.file;\n\n        if (!file) {\n          resolve(null);\n        } // File is a string\n\n\n        if (typeof file === 'string') {\n          if (isDataURI(file)) {\n            var fileByteString = dataURItoByteString(file);\n            resolve({\n              data: fileByteString\n            });\n          }\n\n          displayCORSWarning();\n          resolve({\n            url: file\n          });\n        } // File is PDFDataRangeTransport\n\n\n        if (file instanceof PDFDataRangeTransport) {\n          resolve({\n            range: file\n          });\n        } // File is an ArrayBuffer\n\n\n        if (isArrayBuffer(file)) {\n          resolve({\n            data: file\n          });\n        }\n        /**\n         * The cases below are browser-only.\n         * If you're running on a non-browser environment, these cases will be of no use.\n         */\n\n\n        if (isBrowser) {\n          // File is a Blob\n          if (isBlob(file) || isFile(file)) {\n            loadFromFile(file).then(function (data) {\n              resolve({\n                data: data\n              });\n            });\n            return;\n          }\n        } // At this point, file must be an object\n\n\n        invariant(_typeof(file) === 'object', 'Invalid parameter in file, need either Uint8Array, string or a parameter object');\n        invariant(file.url || file.data || file.range, 'Invalid parameter object: need either .data, .range or .url'); // File .url is a string\n\n        if (typeof file.url === 'string') {\n          if (isDataURI(file.url)) {\n            var url = file.url,\n                otherParams = _objectWithoutProperties(file, _excluded);\n\n            var _fileByteString = dataURItoByteString(url);\n\n            resolve(_objectSpread({\n              data: _fileByteString\n            }, otherParams));\n          }\n\n          displayCORSWarning();\n        }\n\n        resolve(file);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"registerPage\", function (pageIndex, ref) {\n      _this.pages[pageIndex] = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unregisterPage\", function (pageIndex) {\n      delete _this.pages[pageIndex];\n    });\n\n    return _this;\n  }\n\n  _createClass(Document, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.loadDocument();\n      this.setupLinkService();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var file = this.props.file;\n\n      if (file !== prevProps.file) {\n        this.loadDocument();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      // If rendering is in progress, let's cancel it\n      cancelRunningTask(this.runningTask); // If loading is in progress, let's destroy it\n\n      if (this.loadingTask) this.loadingTask.destroy();\n    }\n  }, {\n    key: \"childContext\",\n    get: function get() {\n      var linkService = this.linkService,\n          registerPage = this.registerPage,\n          unregisterPage = this.unregisterPage;\n      var _this$props3 = this.props,\n          imageResourcesPath = _this$props3.imageResourcesPath,\n          renderMode = _this$props3.renderMode,\n          rotate = _this$props3.rotate;\n      var pdf = this.state.pdf;\n      return {\n        imageResourcesPath: imageResourcesPath,\n        linkService: linkService,\n        pdf: pdf,\n        registerPage: registerPage,\n        renderMode: renderMode,\n        rotate: rotate,\n        unregisterPage: unregisterPage\n      };\n    }\n  }, {\n    key: \"eventProps\",\n    get: function get() {\n      var _this2 = this;\n\n      return makeEventProps(this.props, function () {\n        return _this2.state.pdf;\n      });\n    }\n    /**\n     * Called when a document source is resolved correctly\n     */\n\n  }, {\n    key: \"renderChildren\",\n    value: function renderChildren() {\n      var children = this.props.children;\n      return /*#__PURE__*/React.createElement(DocumentContext.Provider, {\n        value: this.childContext\n      }, children);\n    }\n  }, {\n    key: \"renderContent\",\n    value: function renderContent() {\n      var file = this.props.file;\n      var pdf = this.state.pdf;\n\n      if (!file) {\n        var noData = this.props.noData;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"no-data\"\n        }, typeof noData === 'function' ? noData() : noData);\n      }\n\n      if (pdf === null) {\n        var loading = this.props.loading;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"loading\"\n        }, typeof loading === 'function' ? loading() : loading);\n      }\n\n      if (pdf === false) {\n        var error = this.props.error;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"error\"\n        }, typeof error === 'function' ? error() : error);\n      }\n\n      return this.renderChildren();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props4 = this.props,\n          className = _this$props4.className,\n          inputRef = _this$props4.inputRef;\n      return /*#__PURE__*/React.createElement(\"div\", _extends({\n        className: mergeClassNames('react-pdf__Document', className),\n        ref: inputRef\n      }, this.eventProps), this.renderContent());\n    }\n  }]);\n\n  return Document;\n}(PureComponent);\n\nexport { Document as default };\nDocument.defaultProps = {\n  error: 'Failed to load PDF file.',\n  loading: 'Loading PDF…',\n  noData: 'No PDF file specified.',\n  onPassword: function onPassword(callback, reason) {\n    switch (reason) {\n      case PasswordResponses.NEED_PASSWORD:\n        {\n          // eslint-disable-next-line no-alert\n          var password = prompt('Enter the password to open this PDF file.');\n          callback(password);\n          break;\n        }\n\n      case PasswordResponses.INCORRECT_PASSWORD:\n        {\n          // eslint-disable-next-line no-alert\n          var _password = prompt('Invalid password. Please try again.');\n\n          callback(_password);\n          break;\n        }\n\n      default:\n    }\n  }\n};\nvar isFunctionOrNode = PropTypes.oneOfType([PropTypes.func, PropTypes.node]);\nDocument.propTypes = _objectSpread(_objectSpread({}, eventProps), {}, {\n  children: PropTypes.node,\n  className: isClassName,\n  error: isFunctionOrNode,\n  externalLinkRel: PropTypes.string,\n  externalLinkTarget: PropTypes.string,\n  file: isFileProp,\n  imageResourcesPath: PropTypes.string,\n  inputRef: isRef,\n  loading: isFunctionOrNode,\n  noData: isFunctionOrNode,\n  onItemClick: PropTypes.func,\n  onLoadError: PropTypes.func,\n  onLoadProgress: PropTypes.func,\n  onLoadSuccess: PropTypes.func,\n  onPassword: PropTypes.func,\n  onSourceError: PropTypes.func,\n  onSourceSuccess: PropTypes.func,\n  rotate: PropTypes.number\n});","import { createContext } from 'react';\nexport default /*#__PURE__*/createContext(null);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\n\nvar Ref = /*#__PURE__*/function () {\n  function Ref(_ref) {\n    var num = _ref.num,\n        gen = _ref.gen;\n\n    _classCallCheck(this, Ref);\n\n    this.num = num;\n    this.gen = gen;\n  }\n\n  _createClass(Ref, [{\n    key: \"toString\",\n    value: function toString() {\n      var str = \"\".concat(this.num, \"R\");\n\n      if (this.gen !== 0) {\n        str += this.gen;\n      }\n\n      return str;\n    }\n  }]);\n\n  return Ref;\n}();\n\nexport { Ref as default };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"item\"];\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport DocumentContext from './DocumentContext';\nimport OutlineContext from './OutlineContext';\nimport Ref from './Ref';\nimport { isDefined } from './shared/utils';\nimport { isPdf } from './shared/propTypes';\nexport var OutlineItemInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(OutlineItemInternal, _PureComponent);\n\n  var _super = _createSuper(OutlineItemInternal);\n\n  function OutlineItemInternal() {\n    var _this;\n\n    _classCallCheck(this, OutlineItemInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"getDestination\", function () {\n      return new Promise(function (resolve, reject) {\n        var _this$props = _this.props,\n            item = _this$props.item,\n            pdf = _this$props.pdf;\n\n        if (!isDefined(_this.destination)) {\n          if (typeof item.dest === 'string') {\n            pdf.getDestination(item.dest).then(resolve)[\"catch\"](reject);\n          } else {\n            resolve(item.dest);\n          }\n        }\n\n        return _this.destination;\n      }).then(function (destination) {\n        _this.destination = destination;\n        return destination;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getPageIndex\", function () {\n      return new Promise(function (resolve, reject) {\n        var pdf = _this.props.pdf;\n\n        if (isDefined(_this.pageIndex)) {\n          resolve(_this.pageIndex);\n        }\n\n        _this.getDestination().then(function (destination) {\n          if (!destination) {\n            return;\n          }\n\n          var _destination = _slicedToArray(destination, 1),\n              ref = _destination[0];\n\n          pdf.getPageIndex(new Ref(ref)).then(resolve)[\"catch\"](reject);\n        });\n      }).then(function (pageIndex) {\n        _this.pageIndex = pageIndex;\n        return _this.pageIndex;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getPageNumber\", function () {\n      return new Promise(function (resolve, reject) {\n        if (isDefined(_this.pageNumber)) {\n          resolve(_this.pageNumber);\n        }\n\n        _this.getPageIndex().then(function (pageIndex) {\n          resolve(pageIndex + 1);\n        })[\"catch\"](reject);\n      }).then(function (pageNumber) {\n        _this.pageNumber = pageNumber;\n        return pageNumber;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n      var onClick = _this.props.onClick;\n      event.preventDefault();\n\n      if (!onClick) {\n        return false;\n      }\n\n      return Promise.all([_this.getDestination(), _this.getPageIndex(), _this.getPageNumber()]).then(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 3),\n            dest = _ref2[0],\n            pageIndex = _ref2[1],\n            pageNumber = _ref2[2];\n\n        onClick({\n          dest: dest,\n          pageIndex: pageIndex,\n          pageNumber: pageNumber\n        });\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(OutlineItemInternal, [{\n    key: \"renderSubitems\",\n    value: function renderSubitems() {\n      var _this$props2 = this.props,\n          item = _this$props2.item,\n          otherProps = _objectWithoutProperties(_this$props2, _excluded);\n\n      if (!item.items || !item.items.length) {\n        return null;\n      }\n\n      var subitems = item.items;\n      return /*#__PURE__*/React.createElement(\"ul\", null, subitems.map(function (subitem, subitemIndex) {\n        return /*#__PURE__*/React.createElement(OutlineItemInternal, _extends({\n          key: typeof subitem.destination === 'string' ? subitem.destination : subitemIndex,\n          item: subitem\n        }, otherProps));\n      }));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var item = this.props.item;\n      return /*#__PURE__*/React.createElement(\"li\", null, /*#__PURE__*/React.createElement(\"a\", {\n        href: \"#\",\n        onClick: this.onClick\n      }, item.title), this.renderSubitems());\n    }\n  }]);\n\n  return OutlineItemInternal;\n}(PureComponent);\nvar isDestination = PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.any)]);\nOutlineItemInternal.propTypes = {\n  item: PropTypes.shape({\n    dest: isDestination,\n    items: PropTypes.arrayOf(PropTypes.shape({\n      dest: isDestination,\n      title: PropTypes.string\n    })),\n    title: PropTypes.string\n  }).isRequired,\n  onClick: PropTypes.func,\n  pdf: isPdf.isRequired\n};\n\nvar OutlineItem = function OutlineItem(props) {\n  return /*#__PURE__*/React.createElement(DocumentContext.Consumer, null, function (documentContext) {\n    return /*#__PURE__*/React.createElement(OutlineContext.Consumer, null, function (outlineContext) {\n      return /*#__PURE__*/React.createElement(OutlineItemInternal, _extends({}, documentContext, outlineContext, props));\n    });\n  });\n};\n\nexport default OutlineItem;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport makeCancellable from 'make-cancellable-promise';\nimport makeEventProps from 'make-event-props';\nimport mergeClassNames from 'merge-class-names';\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\nimport DocumentContext from './DocumentContext';\nimport OutlineContext from './OutlineContext';\nimport OutlineItem from './OutlineItem';\nimport { cancelRunningTask } from './shared/utils';\nimport { eventProps, isClassName, isPdf, isRef } from './shared/propTypes';\nexport var OutlineInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(OutlineInternal, _PureComponent);\n\n  var _super = _createSuper(OutlineInternal);\n\n  function OutlineInternal() {\n    var _this;\n\n    _classCallCheck(this, OutlineInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      outline: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"loadOutline\", function () {\n      var pdf = _this.props.pdf;\n\n      _this.setState(function (prevState) {\n        if (!prevState.outline) {\n          return null;\n        }\n\n        return {\n          outline: null\n        };\n      });\n\n      var cancellable = makeCancellable(pdf.getOutline());\n      _this.runningTask = cancellable;\n      cancellable.promise.then(function (outline) {\n        _this.setState({\n          outline: outline\n        }, _this.onLoadSuccess);\n      })[\"catch\"](function (error) {\n        _this.onLoadError(error);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadSuccess\", function () {\n      var onLoadSuccess = _this.props.onLoadSuccess;\n      var outline = _this.state.outline;\n      if (onLoadSuccess) onLoadSuccess(outline);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadError\", function (error) {\n      _this.setState({\n        outline: false\n      });\n\n      warning(error);\n      var onLoadError = _this.props.onLoadError;\n      if (onLoadError) onLoadError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onItemClick\", function (_ref) {\n      var dest = _ref.dest,\n          pageIndex = _ref.pageIndex,\n          pageNumber = _ref.pageNumber;\n      var onItemClick = _this.props.onItemClick;\n\n      if (onItemClick) {\n        onItemClick({\n          dest: dest,\n          pageIndex: pageIndex,\n          pageNumber: pageNumber\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(OutlineInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var pdf = this.props.pdf;\n      invariant(pdf, 'Attempted to load an outline, but no document was specified.');\n      this.loadOutline();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var pdf = this.props.pdf;\n\n      if (prevProps.pdf && pdf !== prevProps.pdf) {\n        this.loadOutline();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      cancelRunningTask(this.runningTask);\n    }\n  }, {\n    key: \"childContext\",\n    get: function get() {\n      return {\n        onClick: this.onItemClick\n      };\n    }\n  }, {\n    key: \"eventProps\",\n    get: function get() {\n      var _this2 = this;\n\n      return makeEventProps(this.props, function () {\n        return _this2.state.outline;\n      });\n    }\n    /**\n     * Called when an outline is read successfully\n     */\n\n  }, {\n    key: \"renderOutline\",\n    value: function renderOutline() {\n      var outline = this.state.outline;\n      return /*#__PURE__*/React.createElement(\"ul\", null, outline.map(function (item, itemIndex) {\n        return /*#__PURE__*/React.createElement(OutlineItem, {\n          key: typeof item.destination === 'string' ? item.destination : itemIndex,\n          item: item\n        });\n      }));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var pdf = this.props.pdf;\n      var outline = this.state.outline;\n\n      if (!pdf || !outline) {\n        return null;\n      }\n\n      var _this$props = this.props,\n          className = _this$props.className,\n          inputRef = _this$props.inputRef;\n      return /*#__PURE__*/React.createElement(\"div\", _extends({\n        className: mergeClassNames('react-pdf__Outline', className),\n        ref: inputRef\n      }, this.eventProps), /*#__PURE__*/React.createElement(OutlineContext.Provider, {\n        value: this.childContext\n      }, this.renderOutline()));\n    }\n  }]);\n\n  return OutlineInternal;\n}(PureComponent);\nOutlineInternal.propTypes = _objectSpread({\n  className: isClassName,\n  inputRef: isRef,\n  onItemClick: PropTypes.func,\n  onLoadError: PropTypes.func,\n  onLoadSuccess: PropTypes.func,\n  pdf: isPdf\n}, eventProps);\n\nfunction Outline(props, ref) {\n  return /*#__PURE__*/React.createElement(DocumentContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(OutlineInternal, _extends({\n      ref: ref\n    }, context, props));\n  });\n}\n\nexport default /*#__PURE__*/React.forwardRef(Outline);","/**\n * A function that merges React refs into one.\n * Supports both functions and ref objects created using createRef() and useRef().\n *\n * Usage:\n * ```tsx\n * <div ref={mergeRefs(ref1, ref2, ref3)} />\n * ```\n *\n * @param {(React.Ref<T> | undefined)[]} inputRefs Array of refs\n * @returns {React.Ref<T> | React.RefCallback<T>} Merged refs\n */\nexport default function mergeRefs() {\n    var inputRefs = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        inputRefs[_i] = arguments[_i];\n    }\n    var filteredInputRefs = inputRefs.filter(Boolean);\n    if (filteredInputRefs.length <= 1) {\n        var firstRef = filteredInputRefs[0];\n        return firstRef || null;\n    }\n    return function mergedRefs(ref) {\n        filteredInputRefs.forEach(function (inputRef) {\n            if (typeof inputRef === 'function') {\n                inputRef(ref);\n            }\n            else if (inputRef) {\n                inputRef.current = ref;\n            }\n        });\n    };\n}\n","import { createContext } from 'react';\nexport default /*#__PURE__*/createContext(null);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport mergeRefs from 'merge-refs';\nimport warning from 'tiny-warning';\nimport * as pdfjs from 'pdfjs-dist/legacy/build/pdf';\nimport PageContext from '../PageContext';\nimport { getPixelRatio, isCancelException, makePageCallback } from '../shared/utils';\nimport { isPage, isRef, isRotate } from '../shared/propTypes';\nvar ANNOTATION_MODE = pdfjs.AnnotationMode;\nexport var PageCanvasInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(PageCanvasInternal, _PureComponent);\n\n  var _super = _createSuper(PageCanvasInternal);\n\n  function PageCanvasInternal() {\n    var _this;\n\n    _classCallCheck(this, PageCanvasInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"canvasElement\", /*#__PURE__*/createRef());\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderSuccess\", function () {\n      _this.renderer = null;\n      var _this$props = _this.props,\n          onRenderSuccess = _this$props.onRenderSuccess,\n          page = _this$props.page,\n          scale = _this$props.scale;\n      if (onRenderSuccess) onRenderSuccess(makePageCallback(page, scale));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderError\", function (error) {\n      if (isCancelException(error)) {\n        return;\n      }\n\n      warning(error);\n      var onRenderError = _this.props.onRenderError;\n      if (onRenderError) onRenderError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"drawPageOnCanvas\", function () {\n      var canvas = _this.canvasElement.current;\n\n      if (!canvas) {\n        return null;\n      }\n\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          renderViewport = _assertThisInitialize.renderViewport,\n          viewport = _assertThisInitialize.viewport;\n\n      var _this$props2 = _this.props,\n          canvasBackground = _this$props2.canvasBackground,\n          page = _this$props2.page,\n          renderForms = _this$props2.renderForms;\n      canvas.width = renderViewport.width;\n      canvas.height = renderViewport.height;\n      canvas.style.width = \"\".concat(Math.floor(viewport.width), \"px\");\n      canvas.style.height = \"\".concat(Math.floor(viewport.height), \"px\");\n      var renderContext = {\n        annotationMode: renderForms ? ANNOTATION_MODE.ENABLE_FORMS : ANNOTATION_MODE.ENABLE,\n\n        get canvasContext() {\n          return canvas.getContext('2d');\n        },\n\n        viewport: renderViewport\n      };\n\n      if (canvasBackground) {\n        renderContext.background = canvasBackground;\n      } // If another render is in progress, let's cancel it\n\n\n      _this.cancelRenderingTask();\n\n      _this.renderer = page.render(renderContext);\n      return _this.renderer.promise.then(_this.onRenderSuccess)[\"catch\"](_this.onRenderError);\n    });\n\n    return _this;\n  }\n\n  _createClass(PageCanvasInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.drawPageOnCanvas();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props3 = this.props,\n          canvasBackground = _this$props3.canvasBackground,\n          page = _this$props3.page,\n          renderForms = _this$props3.renderForms;\n\n      if (canvasBackground !== prevProps.canvasBackground || renderForms !== prevProps.renderForms) {\n        // Ensures the canvas will be re-rendered from scratch. Otherwise all form data will stay.\n        page.cleanup();\n        this.drawPageOnCanvas();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.cancelRenderingTask();\n      var canvas = this.canvasElement.current;\n      /**\n       * Zeroing the width and height cause most browsers to release graphics\n       * resources immediately, which can greatly reduce memory consumption.\n       */\n\n      if (canvas) {\n        canvas.width = 0;\n        canvas.height = 0;\n      }\n    }\n  }, {\n    key: \"cancelRenderingTask\",\n    value: function cancelRenderingTask() {\n      if (this.renderer) {\n        this.renderer.cancel();\n        this.renderer = null;\n      }\n    }\n    /**\n     * Called when a page is rendered successfully.\n     */\n\n  }, {\n    key: \"renderViewport\",\n    get: function get() {\n      var _this$props4 = this.props,\n          page = _this$props4.page,\n          rotate = _this$props4.rotate,\n          scale = _this$props4.scale;\n      var pixelRatio = getPixelRatio();\n      return page.getViewport({\n        scale: scale * pixelRatio,\n        rotation: rotate\n      });\n    }\n  }, {\n    key: \"viewport\",\n    get: function get() {\n      var _this$props5 = this.props,\n          page = _this$props5.page,\n          rotate = _this$props5.rotate,\n          scale = _this$props5.scale;\n      return page.getViewport({\n        scale: scale,\n        rotation: rotate\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var canvasRef = this.props.canvasRef;\n      return /*#__PURE__*/React.createElement(\"canvas\", {\n        className: \"react-pdf__Page__canvas\",\n        dir: \"ltr\",\n        ref: mergeRefs(canvasRef, this.canvasElement),\n        style: {\n          display: 'block',\n          userSelect: 'none'\n        }\n      });\n    }\n  }]);\n\n  return PageCanvasInternal;\n}(PureComponent);\nPageCanvasInternal.propTypes = {\n  canvasBackground: PropTypes.string,\n  canvasRef: isRef,\n  onRenderError: PropTypes.func,\n  onRenderSuccess: PropTypes.func,\n  page: isPage.isRequired,\n  renderForms: PropTypes.bool,\n  rotate: isRotate,\n  scale: PropTypes.number.isRequired\n};\nexport default function PageCanvas(props) {\n  return /*#__PURE__*/React.createElement(PageContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(PageCanvasInternal, _extends({}, context, props));\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport * as pdfjs from 'pdfjs-dist/legacy/build/pdf';\nimport PageContext from '../PageContext';\nimport { isCancelException, makePageCallback } from '../shared/utils';\nimport { isPage, isRotate } from '../shared/propTypes';\nexport var PageSVGInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(PageSVGInternal, _PureComponent);\n\n  var _super = _createSuper(PageSVGInternal);\n\n  function PageSVGInternal() {\n    var _this;\n\n    _classCallCheck(this, PageSVGInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      svg: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderSuccess\", function () {\n      _this.renderer = null;\n      var _this$props = _this.props,\n          onRenderSuccess = _this$props.onRenderSuccess,\n          page = _this$props.page,\n          scale = _this$props.scale;\n      if (onRenderSuccess) onRenderSuccess(makePageCallback(page, scale));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderError\", function (error) {\n      if (isCancelException(error)) {\n        return;\n      }\n\n      warning(error);\n      var onRenderError = _this.props.onRenderError;\n      if (onRenderError) onRenderError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderSVG\", function () {\n      var page = _this.props.page;\n      _this.renderer = page.getOperatorList();\n      return _this.renderer.then(function (operatorList) {\n        var svgGfx = new pdfjs.SVGGraphics(page.commonObjs, page.objs);\n        _this.renderer = svgGfx.getSVG(operatorList, _this.viewport).then(function (svg) {\n          _this.setState({\n            svg: svg\n          }, _this.onRenderSuccess);\n        })[\"catch\"](_this.onRenderError);\n      })[\"catch\"](_this.onRenderError);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"drawPageOnContainer\", function (element) {\n      var svg = _this.state.svg;\n\n      if (!element || !svg) {\n        return;\n      } // Append SVG element to the main container, if this hasn't been done already\n\n\n      if (!element.firstElementChild) {\n        element.appendChild(svg);\n      }\n\n      var _this$viewport = _this.viewport,\n          width = _this$viewport.width,\n          height = _this$viewport.height;\n      svg.setAttribute('width', width);\n      svg.setAttribute('height', height);\n    });\n\n    return _this;\n  }\n\n  _createClass(PageSVGInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.renderSVG();\n    }\n    /**\n     * Called when a page is rendered successfully.\n     */\n\n  }, {\n    key: \"viewport\",\n    get: function get() {\n      var _this$props2 = this.props,\n          page = _this$props2.page,\n          rotate = _this$props2.rotate,\n          scale = _this$props2.scale;\n      return page.getViewport({\n        scale: scale,\n        rotation: rotate\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$viewport2 = this.viewport,\n          width = _this$viewport2.width,\n          height = _this$viewport2.height;\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: \"react-pdf__Page__svg\" // Note: This cannot be shortened, as we need this function to be called with each render.\n        ,\n        ref: function ref(_ref) {\n          return _this2.drawPageOnContainer(_ref);\n        },\n        style: {\n          display: 'block',\n          backgroundColor: 'white',\n          overflow: 'hidden',\n          width: width,\n          height: height,\n          userSelect: 'none'\n        }\n      });\n    }\n  }]);\n\n  return PageSVGInternal;\n}(PureComponent);\nPageSVGInternal.propTypes = {\n  onRenderError: PropTypes.func,\n  onRenderSuccess: PropTypes.func,\n  page: isPage.isRequired,\n  rotate: isRotate,\n  scale: PropTypes.number.isRequired\n};\nexport default function PageSVG(props) {\n  return /*#__PURE__*/React.createElement(PageContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(PageSVGInternal, _extends({}, context, props));\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport PageContext from '../PageContext';\nimport { isPage, isRotate } from '../shared/propTypes';\nexport var TextLayerItemInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(TextLayerItemInternal, _PureComponent);\n\n  var _super = _createSuper(TextLayerItemInternal);\n\n  function TextLayerItemInternal() {\n    var _this;\n\n    _classCallCheck(this, TextLayerItemInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"itemElement\", /*#__PURE__*/createRef());\n\n    _defineProperty(_assertThisInitialized(_this), \"getElementWidth\", function (element) {\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          sideways = _assertThisInitialize.sideways;\n\n      return element.getBoundingClientRect()[sideways ? 'height' : 'width'];\n    });\n\n    return _this;\n  }\n\n  _createClass(TextLayerItemInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.alignTextItem();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.alignTextItem();\n    }\n  }, {\n    key: \"unrotatedViewport\",\n    get: function get() {\n      var _this$props = this.props,\n          page = _this$props.page,\n          scale = _this$props.scale;\n      return page.getViewport({\n        scale: scale\n      });\n    }\n    /**\n     * It might happen that the page is rotated by default. In such cases, we shouldn't rotate\n     * text content.\n     */\n\n  }, {\n    key: \"rotate\",\n    get: function get() {\n      var _this$props2 = this.props,\n          page = _this$props2.page,\n          rotate = _this$props2.rotate;\n      return rotate - page.rotate;\n    }\n  }, {\n    key: \"sideways\",\n    get: function get() {\n      var rotate = this.rotate;\n      return rotate % 180 !== 0;\n    }\n  }, {\n    key: \"defaultSideways\",\n    get: function get() {\n      var rotation = this.unrotatedViewport.rotation;\n      return rotation % 180 !== 0;\n    }\n  }, {\n    key: \"fontSize\",\n    get: function get() {\n      var transform = this.props.transform;\n      var defaultSideways = this.defaultSideways;\n\n      var _transform = _slicedToArray(transform, 2),\n          fontHeightPx = _transform[0],\n          fontWidthPx = _transform[1];\n\n      return defaultSideways ? fontWidthPx : fontHeightPx;\n    }\n  }, {\n    key: \"top\",\n    get: function get() {\n      var transform = this.props.transform;\n      var viewport = this.unrotatedViewport,\n          defaultSideways = this.defaultSideways;\n\n      var _transform2 = _slicedToArray(transform, 6),\n\n      /* fontHeightPx */\n\n      /* fontWidthPx */\n      offsetX = _transform2[2],\n          offsetY = _transform2[3],\n          x = _transform2[4],\n          y = _transform2[5];\n\n      var _viewport$viewBox = _slicedToArray(viewport.viewBox, 4),\n\n      /* xMin */\n      yMin\n      /* xMax */\n      = _viewport$viewBox[1],\n          yMax = _viewport$viewBox[3];\n\n      return defaultSideways ? x + offsetX + yMin : yMax - (y + offsetY);\n    }\n  }, {\n    key: \"left\",\n    get: function get() {\n      var transform = this.props.transform;\n      var viewport = this.unrotatedViewport,\n          defaultSideways = this.defaultSideways;\n\n      var _transform3 = _slicedToArray(transform, 6),\n\n      /* fontHeightPx */\n\n      /* fontWidthPx */\n\n      /* offsetX */\n\n      /* offsetY */\n      x = _transform3[4],\n          y = _transform3[5];\n\n      var _viewport$viewBox2 = _slicedToArray(viewport.viewBox, 1),\n          xMin = _viewport$viewBox2[0];\n\n      return defaultSideways ? y - xMin : x - xMin;\n    }\n  }, {\n    key: \"getFontData\",\n    value: function getFontData(fontName) {\n      var page = this.props.page;\n      return new Promise(function (resolve) {\n        page.commonObjs.get(fontName, resolve);\n      });\n    }\n  }, {\n    key: \"alignTextItem\",\n    value: function alignTextItem() {\n      var _this2 = this;\n\n      var element = this.itemElement.current;\n\n      if (!element) {\n        return;\n      }\n\n      element.style.transform = '';\n      var _this$props3 = this.props,\n          fontName = _this$props3.fontName,\n          scale = _this$props3.scale,\n          width = _this$props3.width;\n      element.style.fontFamily = \"\".concat(fontName, \", sans-serif\");\n      this.getFontData(fontName).then(function (fontData) {\n        var fallbackFontName = fontData ? fontData.fallbackName : 'sans-serif';\n        element.style.fontFamily = \"\".concat(fontName, \", \").concat(fallbackFontName);\n        var targetWidth = width * scale;\n\n        var actualWidth = _this2.getElementWidth(element);\n\n        var transform = \"scaleX(\".concat(targetWidth / actualWidth, \")\");\n        var ascent = fontData ? fontData.ascent : 0;\n\n        if (ascent) {\n          transform += \" translateY(\".concat((1 - ascent) * 100, \"%)\");\n        }\n\n        element.style.transform = transform;\n        element.style.WebkitTransform = transform;\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var fontSize = this.fontSize,\n          top = this.top,\n          left = this.left;\n      var _this$props4 = this.props,\n          customTextRenderer = _this$props4.customTextRenderer,\n          scale = _this$props4.scale,\n          text = _this$props4.str;\n      return /*#__PURE__*/React.createElement(\"span\", {\n        ref: this.itemElement,\n        style: {\n          height: '1em',\n          fontFamily: 'sans-serif',\n          fontSize: \"\".concat(fontSize * scale, \"px\"),\n          position: 'absolute',\n          top: \"\".concat(top * scale, \"px\"),\n          left: \"\".concat(left * scale, \"px\"),\n          transformOrigin: 'left bottom',\n          whiteSpace: 'pre',\n          pointerEvents: 'all'\n        }\n      }, customTextRenderer ? customTextRenderer(this.props) : text);\n    }\n  }]);\n\n  return TextLayerItemInternal;\n}(PureComponent);\nTextLayerItemInternal.propTypes = {\n  customTextRenderer: PropTypes.func,\n  fontName: PropTypes.string.isRequired,\n  itemIndex: PropTypes.number.isRequired,\n  page: isPage.isRequired,\n  rotate: isRotate,\n  scale: PropTypes.number,\n  str: PropTypes.string.isRequired,\n  transform: PropTypes.arrayOf(PropTypes.number).isRequired,\n  width: PropTypes.number.isRequired\n};\nexport default function TextLayerItem(props) {\n  return /*#__PURE__*/React.createElement(PageContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(TextLayerItemInternal, _extends({}, context, props));\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport makeCancellable from 'make-cancellable-promise';\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\nimport PageContext from '../PageContext';\nimport TextLayerItem from './TextLayerItem';\nimport { cancelRunningTask } from '../shared/utils';\nimport { isPage, isRotate } from '../shared/propTypes';\nexport var TextLayerInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(TextLayerInternal, _PureComponent);\n\n  var _super = _createSuper(TextLayerInternal);\n\n  function TextLayerInternal() {\n    var _this;\n\n    _classCallCheck(this, TextLayerInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      textItems: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"loadTextItems\", function () {\n      var page = _this.props.page;\n      var cancellable = makeCancellable(page.getTextContent());\n      _this.runningTask = cancellable;\n      cancellable.promise.then(function (_ref) {\n        var textItems = _ref.items;\n\n        _this.setState({\n          textItems: textItems\n        }, _this.onLoadSuccess);\n      })[\"catch\"](function (error) {\n        _this.onLoadError(error);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadSuccess\", function () {\n      var onGetTextSuccess = _this.props.onGetTextSuccess;\n      var textItems = _this.state.textItems;\n      if (onGetTextSuccess) onGetTextSuccess(textItems);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadError\", function (error) {\n      _this.setState({\n        textItems: false\n      });\n\n      warning(error);\n      var onGetTextError = _this.props.onGetTextError;\n      if (onGetTextError) onGetTextError(error);\n    });\n\n    return _this;\n  }\n\n  _createClass(TextLayerInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var page = this.props.page;\n      invariant(page, 'Attempted to load page text content, but no page was specified.');\n      this.loadTextItems();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var page = this.props.page;\n\n      if (prevProps.page && page !== prevProps.page) {\n        this.loadTextItems();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      cancelRunningTask(this.runningTask);\n    }\n  }, {\n    key: \"unrotatedViewport\",\n    get: function get() {\n      var _this$props = this.props,\n          page = _this$props.page,\n          scale = _this$props.scale;\n      return page.getViewport({\n        scale: scale\n      });\n    }\n    /**\n     * It might happen that the page is rotated by default. In such cases, we shouldn't rotate\n     * text content.\n     */\n\n  }, {\n    key: \"rotate\",\n    get: function get() {\n      var _this$props2 = this.props,\n          page = _this$props2.page,\n          rotate = _this$props2.rotate;\n      return rotate - page.rotate;\n    }\n  }, {\n    key: \"renderTextItems\",\n    value: function renderTextItems() {\n      var textItems = this.state.textItems;\n\n      if (!textItems) {\n        return null;\n      }\n\n      return textItems.map(function (textItem, itemIndex) {\n        return /*#__PURE__*/React.createElement(TextLayerItem // eslint-disable-next-line react/no-array-index-key\n        , _extends({\n          key: itemIndex,\n          itemIndex: itemIndex\n        }, textItem));\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var viewport = this.unrotatedViewport,\n          rotate = this.rotate;\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: \"react-pdf__Page__textContent\",\n        style: {\n          position: 'absolute',\n          top: '50%',\n          left: '50%',\n          width: \"\".concat(viewport.width, \"px\"),\n          height: \"\".concat(viewport.height, \"px\"),\n          color: 'transparent',\n          transform: \"translate(-50%, -50%) rotate(\".concat(rotate, \"deg)\"),\n          WebkitTransform: \"translate(-50%, -50%) rotate(\".concat(rotate, \"deg)\"),\n          pointerEvents: 'none'\n        }\n      }, this.renderTextItems());\n    }\n  }]);\n\n  return TextLayerInternal;\n}(PureComponent);\nTextLayerInternal.propTypes = {\n  onGetTextError: PropTypes.func,\n  onGetTextSuccess: PropTypes.func,\n  page: isPage.isRequired,\n  rotate: isRotate,\n  scale: PropTypes.number\n};\nexport default function TextLayer(props) {\n  return /*#__PURE__*/React.createElement(PageContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(TextLayerInternal, _extends({}, context, props));\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport makeCancellable from 'make-cancellable-promise';\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\nimport * as pdfjs from 'pdfjs-dist/legacy/build/pdf';\nimport DocumentContext from '../DocumentContext';\nimport PageContext from '../PageContext';\nimport { cancelRunningTask } from '../shared/utils';\nimport { isLinkService, isPage, isRotate } from '../shared/propTypes';\nexport var AnnotationLayerInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(AnnotationLayerInternal, _PureComponent);\n\n  var _super = _createSuper(AnnotationLayerInternal);\n\n  function AnnotationLayerInternal() {\n    var _this;\n\n    _classCallCheck(this, AnnotationLayerInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      annotations: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"layerElement\", /*#__PURE__*/createRef());\n\n    _defineProperty(_assertThisInitialized(_this), \"loadAnnotations\", function () {\n      var page = _this.props.page;\n      var cancellable = makeCancellable(page.getAnnotations());\n      _this.runningTask = cancellable;\n      cancellable.promise.then(function (annotations) {\n        _this.setState({\n          annotations: annotations\n        }, _this.onLoadSuccess);\n      })[\"catch\"](function (error) {\n        _this.onLoadError(error);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadSuccess\", function () {\n      var onGetAnnotationsSuccess = _this.props.onGetAnnotationsSuccess;\n      var annotations = _this.state.annotations;\n      if (onGetAnnotationsSuccess) onGetAnnotationsSuccess(annotations);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadError\", function (error) {\n      _this.setState({\n        annotations: false\n      });\n\n      warning(error);\n      var onGetAnnotationsError = _this.props.onGetAnnotationsError;\n      if (onGetAnnotationsError) onGetAnnotationsError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderSuccess\", function () {\n      var onRenderAnnotationLayerSuccess = _this.props.onRenderAnnotationLayerSuccess;\n      if (onRenderAnnotationLayerSuccess) onRenderAnnotationLayerSuccess();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onRenderError\", function (error) {\n      warning(error);\n      var onRenderAnnotationLayerError = _this.props.onRenderAnnotationLayerError;\n      if (onRenderAnnotationLayerError) onRenderAnnotationLayerError(error);\n    });\n\n    return _this;\n  }\n\n  _createClass(AnnotationLayerInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var page = this.props.page;\n      invariant(page, 'Attempted to load page annotations, but no page was specified.');\n      this.loadAnnotations();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props = this.props,\n          page = _this$props.page,\n          renderForms = _this$props.renderForms;\n\n      if (prevProps.page && page !== prevProps.page || renderForms !== prevProps.renderForms) {\n        this.loadAnnotations();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      cancelRunningTask(this.runningTask);\n    }\n  }, {\n    key: \"viewport\",\n    get: function get() {\n      var _this$props2 = this.props,\n          page = _this$props2.page,\n          rotate = _this$props2.rotate,\n          scale = _this$props2.scale;\n      return page.getViewport({\n        scale: scale,\n        rotation: rotate\n      });\n    }\n  }, {\n    key: \"renderAnnotationLayer\",\n    value: function renderAnnotationLayer() {\n      var annotations = this.state.annotations;\n\n      if (!annotations) {\n        return;\n      }\n\n      var _this$props3 = this.props,\n          imageResourcesPath = _this$props3.imageResourcesPath,\n          linkService = _this$props3.linkService,\n          page = _this$props3.page,\n          renderForms = _this$props3.renderForms;\n      var viewport = this.viewport.clone({\n        dontFlip: true\n      });\n      var parameters = {\n        annotations: annotations,\n        div: this.layerElement.current,\n        imageResourcesPath: imageResourcesPath,\n        linkService: linkService,\n        page: page,\n        renderForms: renderForms,\n        viewport: viewport\n      };\n      this.layerElement.current.innerHTML = '';\n\n      try {\n        pdfjs.AnnotationLayer.render(parameters);\n        this.onRenderSuccess();\n      } catch (error) {\n        this.onRenderError(error);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: \"react-pdf__Page__annotations annotationLayer\",\n        ref: this.layerElement\n      }, this.renderAnnotationLayer());\n    }\n  }]);\n\n  return AnnotationLayerInternal;\n}(PureComponent);\nAnnotationLayerInternal.propTypes = {\n  imageResourcesPath: PropTypes.string,\n  linkService: isLinkService.isRequired,\n  onGetAnnotationsError: PropTypes.func,\n  onGetAnnotationsSuccess: PropTypes.func,\n  onRenderAnnotationLayerError: PropTypes.func,\n  onRenderAnnotationLayerSuccess: PropTypes.func,\n  page: isPage,\n  renderForms: PropTypes.bool,\n  rotate: isRotate,\n  scale: PropTypes.number\n};\n\nvar AnnotationLayer = function AnnotationLayer(props) {\n  return /*#__PURE__*/React.createElement(DocumentContext.Consumer, null, function (documentContext) {\n    return /*#__PURE__*/React.createElement(PageContext.Consumer, null, function (pageContext) {\n      return /*#__PURE__*/React.createElement(AnnotationLayerInternal, _extends({}, documentContext, pageContext, props));\n    });\n  });\n};\n\nexport default AnnotationLayer;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport makeCancellable from 'make-cancellable-promise';\nimport makeEventProps from 'make-event-props';\nimport mergeClassNames from 'merge-class-names';\nimport mergeRefs from 'merge-refs';\nimport invariant from 'tiny-invariant';\nimport warning from 'tiny-warning';\nimport DocumentContext from './DocumentContext';\nimport PageContext from './PageContext';\nimport Message from './Message';\nimport PageCanvas from './Page/PageCanvas';\nimport PageSVG from './Page/PageSVG';\nimport TextLayer from './Page/TextLayer';\nimport AnnotationLayer from './Page/AnnotationLayer';\nimport { cancelRunningTask, isProvided, makePageCallback } from './shared/utils';\nimport { eventProps, isClassName, isPageIndex, isPageNumber, isPdf, isRef, isRenderMode, isRotate } from './shared/propTypes';\nvar defaultScale = 1;\nexport var PageInternal = /*#__PURE__*/function (_PureComponent) {\n  _inherits(PageInternal, _PureComponent);\n\n  var _super = _createSuper(PageInternal);\n\n  function PageInternal() {\n    var _this;\n\n    _classCallCheck(this, PageInternal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      page: null\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"pageElement\", /*#__PURE__*/createRef());\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadSuccess\", function () {\n      var _this$props = _this.props,\n          onLoadSuccess = _this$props.onLoadSuccess,\n          registerPage = _this$props.registerPage;\n      var page = _this.state.page;\n      if (onLoadSuccess) onLoadSuccess(makePageCallback(page, _this.scale));\n      if (registerPage) registerPage(_this.pageIndex, _this.pageElement.current);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onLoadError\", function (error) {\n      _this.setState({\n        page: false\n      });\n\n      warning(error);\n      var onLoadError = _this.props.onLoadError;\n      if (onLoadError) onLoadError(error);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"loadPage\", function () {\n      var pdf = _this.props.pdf;\n\n      var pageNumber = _this.getPageNumber();\n\n      if (!pageNumber) {\n        return;\n      }\n\n      _this.setState(function (prevState) {\n        if (!prevState.page) {\n          return null;\n        }\n\n        return {\n          page: null\n        };\n      });\n\n      var cancellable = makeCancellable(pdf.getPage(pageNumber));\n      _this.runningTask = cancellable;\n      cancellable.promise.then(function (page) {\n        _this.setState({\n          page: page\n        }, _this.onLoadSuccess);\n      })[\"catch\"](function (error) {\n        _this.onLoadError(error);\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(PageInternal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var pdf = this.props.pdf;\n      invariant(pdf, 'Attempted to load a page, but no document was specified.');\n      this.loadPage();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var pdf = this.props.pdf;\n\n      if (prevProps.pdf && pdf !== prevProps.pdf || this.getPageNumber() !== this.getPageNumber(prevProps)) {\n        var unregisterPage = this.props.unregisterPage;\n        if (unregisterPage) unregisterPage(this.getPageIndex(prevProps));\n        this.loadPage();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var unregisterPage = this.props.unregisterPage;\n      if (unregisterPage) unregisterPage(this.pageIndex);\n      cancelRunningTask(this.runningTask);\n    }\n  }, {\n    key: \"childContext\",\n    get: function get() {\n      var page = this.state.page;\n\n      if (!page) {\n        return {};\n      }\n\n      var _this$props2 = this.props,\n          canvasBackground = _this$props2.canvasBackground,\n          customTextRenderer = _this$props2.customTextRenderer,\n          onGetAnnotationsError = _this$props2.onGetAnnotationsError,\n          onGetAnnotationsSuccess = _this$props2.onGetAnnotationsSuccess,\n          onGetTextError = _this$props2.onGetTextError,\n          onGetTextSuccess = _this$props2.onGetTextSuccess,\n          onRenderAnnotationLayerError = _this$props2.onRenderAnnotationLayerError,\n          onRenderAnnotationLayerSuccess = _this$props2.onRenderAnnotationLayerSuccess,\n          onRenderError = _this$props2.onRenderError,\n          onRenderSuccess = _this$props2.onRenderSuccess,\n          renderForms = _this$props2.renderForms,\n          renderInteractiveForms = _this$props2.renderInteractiveForms;\n      return {\n        canvasBackground: canvasBackground,\n        customTextRenderer: customTextRenderer,\n        onGetAnnotationsError: onGetAnnotationsError,\n        onGetAnnotationsSuccess: onGetAnnotationsSuccess,\n        onGetTextError: onGetTextError,\n        onGetTextSuccess: onGetTextSuccess,\n        onRenderAnnotationLayerError: onRenderAnnotationLayerError,\n        onRenderAnnotationLayerSuccess: onRenderAnnotationLayerSuccess,\n        onRenderError: onRenderError,\n        onRenderSuccess: onRenderSuccess,\n        page: page,\n        renderForms: renderForms !== null && renderForms !== void 0 ? renderForms : renderInteractiveForms,\n        // For backward compatibility\n        rotate: this.rotate,\n        scale: this.scale\n      };\n    }\n    /**\n     * Called when a page is loaded successfully\n     */\n\n  }, {\n    key: \"getPageIndex\",\n    value: function getPageIndex() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n\n      if (isProvided(props.pageNumber)) {\n        return props.pageNumber - 1;\n      }\n\n      if (isProvided(props.pageIndex)) {\n        return props.pageIndex;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"getPageNumber\",\n    value: function getPageNumber() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n\n      if (isProvided(props.pageNumber)) {\n        return props.pageNumber;\n      }\n\n      if (isProvided(props.pageIndex)) {\n        return props.pageIndex + 1;\n      }\n\n      return null;\n    }\n  }, {\n    key: \"pageIndex\",\n    get: function get() {\n      return this.getPageIndex();\n    }\n  }, {\n    key: \"pageNumber\",\n    get: function get() {\n      return this.getPageNumber();\n    }\n  }, {\n    key: \"rotate\",\n    get: function get() {\n      var rotate = this.props.rotate;\n\n      if (isProvided(rotate)) {\n        return rotate;\n      }\n\n      var page = this.state.page;\n\n      if (!page) {\n        return null;\n      }\n\n      return page.rotate;\n    }\n  }, {\n    key: \"scale\",\n    get: function get() {\n      var page = this.state.page;\n\n      if (!page) {\n        return null;\n      }\n\n      var _this$props3 = this.props,\n          scale = _this$props3.scale,\n          width = _this$props3.width,\n          height = _this$props3.height;\n      var rotate = this.rotate; // Be default, we'll render page at 100% * scale width.\n\n      var pageScale = 1; // Passing scale explicitly null would cause the page not to render\n\n      var scaleWithDefault = scale === null ? defaultScale : scale; // If width/height is defined, calculate the scale of the page so it could be of desired width.\n\n      if (width || height) {\n        var viewport = page.getViewport({\n          scale: 1,\n          rotation: rotate\n        });\n        pageScale = width ? width / viewport.width : height / viewport.height;\n      }\n\n      return scaleWithDefault * pageScale;\n    }\n  }, {\n    key: \"eventProps\",\n    get: function get() {\n      var _this2 = this;\n\n      return makeEventProps(this.props, function () {\n        var page = _this2.state.page;\n\n        if (!page) {\n          return page;\n        }\n\n        return makePageCallback(page, _this2.scale);\n      });\n    }\n  }, {\n    key: \"pageKey\",\n    get: function get() {\n      var page = this.state.page;\n      return \"\".concat(page.pageIndex, \"@\").concat(this.scale, \"/\").concat(this.rotate);\n    }\n  }, {\n    key: \"pageKeyNoScale\",\n    get: function get() {\n      var page = this.state.page;\n      return \"\".concat(page.pageIndex, \"/\").concat(this.rotate);\n    }\n  }, {\n    key: \"renderMainLayer\",\n    value: function renderMainLayer() {\n      var _this$props4 = this.props,\n          canvasRef = _this$props4.canvasRef,\n          renderMode = _this$props4.renderMode;\n\n      switch (renderMode) {\n        case 'none':\n          return null;\n\n        case 'svg':\n          return /*#__PURE__*/React.createElement(PageSVG, {\n            key: \"\".concat(this.pageKeyNoScale, \"_svg\")\n          });\n\n        case 'canvas':\n        default:\n          return /*#__PURE__*/React.createElement(PageCanvas, {\n            key: \"\".concat(this.pageKey, \"_canvas\"),\n            canvasRef: canvasRef\n          });\n      }\n    }\n  }, {\n    key: \"renderTextLayer\",\n    value: function renderTextLayer() {\n      var renderTextLayer = this.props.renderTextLayer;\n\n      if (!renderTextLayer) {\n        return null;\n      }\n\n      return /*#__PURE__*/React.createElement(TextLayer, {\n        key: \"\".concat(this.pageKey, \"_text\")\n      });\n    }\n  }, {\n    key: \"renderAnnotationLayer\",\n    value: function renderAnnotationLayer() {\n      var renderAnnotationLayer = this.props.renderAnnotationLayer;\n\n      if (!renderAnnotationLayer) {\n        return null;\n      }\n      /**\n       * As of now, PDF.js 2.0.943 returns warnings on unimplemented annotations in SVG mode.\n       * Therefore, as a fallback, we render \"traditional\" AnnotationLayer component.\n       */\n\n\n      return /*#__PURE__*/React.createElement(AnnotationLayer, {\n        key: \"\".concat(this.pageKey, \"_annotations\")\n      });\n    }\n  }, {\n    key: \"renderChildren\",\n    value: function renderChildren() {\n      var children = this.props.children;\n      return /*#__PURE__*/React.createElement(PageContext.Provider, {\n        value: this.childContext\n      }, this.renderMainLayer(), this.renderTextLayer(), this.renderAnnotationLayer(), children);\n    }\n  }, {\n    key: \"renderContent\",\n    value: function renderContent() {\n      var pageNumber = this.pageNumber;\n      var pdf = this.props.pdf;\n      var page = this.state.page;\n\n      if (!pageNumber) {\n        var noData = this.props.noData;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"no-data\"\n        }, typeof noData === 'function' ? noData() : noData);\n      }\n\n      if (pdf === null || page === null) {\n        var loading = this.props.loading;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"loading\"\n        }, typeof loading === 'function' ? loading() : loading);\n      }\n\n      if (pdf === false || page === false) {\n        var error = this.props.error;\n        return /*#__PURE__*/React.createElement(Message, {\n          type: \"error\"\n        }, typeof error === 'function' ? error() : error);\n      }\n\n      return this.renderChildren();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var pageNumber = this.pageNumber;\n      var _this$props5 = this.props,\n          className = _this$props5.className,\n          inputRef = _this$props5.inputRef;\n      return /*#__PURE__*/React.createElement(\"div\", _extends({\n        className: mergeClassNames('react-pdf__Page', className),\n        \"data-page-number\": pageNumber,\n        ref: mergeRefs(inputRef, this.pageElement),\n        style: {\n          position: 'relative'\n        }\n      }, this.eventProps), this.renderContent());\n    }\n  }]);\n\n  return PageInternal;\n}(PureComponent);\nPageInternal.defaultProps = {\n  error: 'Failed to load the page.',\n  loading: 'Loading page…',\n  noData: 'No page specified.',\n  renderAnnotationLayer: true,\n  renderForms: false,\n  renderMode: 'canvas',\n  renderTextLayer: true,\n  scale: defaultScale\n};\nvar isFunctionOrNode = PropTypes.oneOfType([PropTypes.func, PropTypes.node]);\nPageInternal.propTypes = _objectSpread(_objectSpread({}, eventProps), {}, {\n  canvasBackground: PropTypes.string,\n  children: PropTypes.node,\n  className: isClassName,\n  customTextRenderer: PropTypes.func,\n  error: isFunctionOrNode,\n  height: PropTypes.number,\n  imageResourcesPath: PropTypes.string,\n  inputRef: isRef,\n  loading: isFunctionOrNode,\n  noData: isFunctionOrNode,\n  onGetTextError: PropTypes.func,\n  onGetTextSuccess: PropTypes.func,\n  onLoadError: PropTypes.func,\n  onLoadSuccess: PropTypes.func,\n  onRenderError: PropTypes.func,\n  onRenderSuccess: PropTypes.func,\n  pageIndex: isPageIndex,\n  pageNumber: isPageNumber,\n  pdf: isPdf,\n  registerPage: PropTypes.func,\n  renderAnnotationLayer: PropTypes.bool,\n  renderForms: PropTypes.bool,\n  renderInteractiveForms: PropTypes.bool,\n  // For backward compatibility\n  renderMode: isRenderMode,\n  renderTextLayer: PropTypes.bool,\n  rotate: isRotate,\n  scale: PropTypes.number,\n  unregisterPage: PropTypes.func,\n  width: PropTypes.number\n});\n\nfunction Page(props, ref) {\n  return /*#__PURE__*/React.createElement(DocumentContext.Consumer, null, function (context) {\n    return /*#__PURE__*/React.createElement(PageInternal, _extends({\n      ref: ref\n    }, context, props));\n  });\n}\n\nexport default /*#__PURE__*/React.forwardRef(Page);","import * as pdfjs from 'pdfjs-dist/legacy/build/pdf'; // eslint-disable-next-line import/no-unresolved\n\nimport pdfjsWorker from 'file-loader!pdfjs-dist/legacy/build/pdf.worker';\nimport Document from './Document';\nimport Outline from './Outline';\nimport Page from './Page';\nimport { displayWorkerWarning } from './shared/utils';\ndisplayWorkerWarning();\npdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;\nexport { pdfjs, Document, Outline, Page };","import React from 'react';\nimport {SvgIcon} from '@material-ui/core';\n\nconst ZoomInMap = () => {\n  return (\n      <SvgIcon xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'>\n          <g><rect fill='none' height='24' width='24'/></g>\n          <g>\n              <path d='M9,9l0-6L7,3l0,2.59L3.91,2.5L2.5,3.91L5.59,7L3,7l0,2L9,9z M21,9V7l-2.59,0l3.09-3.09L20.09,2.5L17,5.59V3l-2,0l0,6L21,9z M3,15l0,2h2.59L2.5,20.09l1.41,1.41L7,18.41L7,21h2l0-6L3,15z M15,15l0,6h2v-2.59l3.09,3.09l1.41-1.41L18.41,17H21v-2L15,15z'/>\n          </g>\n      </SvgIcon>\n  );\n};\n\nexport default ZoomInMap;","export const MEGABYTE = 1024 * 1024;\n\nexport interface IPdfLoadProgress {\n  // bytes downloaded so far\n  loaded: number;\n  // size of the whole file, or null when the response doesn't give one the download fits in\n  total: number | null;\n}\n\n// Downloads a whole PDF so the viewer can give pdf.js the bytes instead of the URL.\n//\n// pdf.js 2.12 ignores the promise it gets back when it cancels its own download, so closing the viewer after\n// a failed download raised an unhandled \"TypeError: network error\" that app code could not catch (Sentry\n// issue 7792199837). The file service doesn't return range headers, so pdf.js was downloading the whole file\n// before showing a page anyway; downloading it here keeps the failure in our hands and lets the viewer show\n// progress and offer a retry.\n//\n// onProgress is called each time the whole percentage changes (the whole megabyte when the size is unknown)\n// rather than for every chunk. Rejects when the request fails, the response isn't 2xx or the signal aborts.\nexport const loadPdfData = async (\n  url: string,\n  signal: AbortSignal,\n  onProgress?: (progress: IPdfLoadProgress) => void,\n): Promise<Uint8Array> => {\n  const response = await fetch(url, { signal });\n  if (!response.ok) {\n    throw new Error(`PDF request failed with status ${response.status}`);\n  }\n  const contentLength = Number(response.headers.get('content-length'));\n  const expectedLength = contentLength > 0 ? contentLength : null;\n  if (!response.body || !response.body.getReader) {\n    return new Uint8Array(await response.arrayBuffer());\n  }\n\n  const reader = response.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let loaded = 0;\n  let lastStep = '';\n  for (;;) {\n    const { done, value } = await reader.read();\n    if (done) {\n      break;\n    }\n    chunks.push(value);\n    loaded += value.length;\n    // a compressed response's Content-Length counts the compressed bytes, so drop it once the download outgrows it\n    const total = expectedLength !== null && loaded <= expectedLength ? expectedLength : null;\n    const step = total !== null ? `${Math.floor(loaded * 100 / total)}%` : `${Math.floor(loaded / MEGABYTE)}MB`;\n    if (onProgress && step !== lastStep) {\n      lastStep = step;\n      onProgress({ loaded, total });\n    }\n  }\n\n  if (chunks.length === 1) {\n    return chunks[0];\n  }\n  const data = new Uint8Array(loaded);\n  let offset = 0;\n  for (const chunk of chunks) {\n    data.set(chunk, offset);\n    offset += chunk.length;\n  }\n  return data;\n};\n","import React, {useEffect, useMemo, useRef, useState} from 'react';\nimport { Document, Page } from 'react-pdf/dist/esm/entry.webpack';\nimport {Button, IconButton, LinearProgress, makeStyles, Paper, TextField, Tooltip, Typography} from '@material-ui/core';\nimport clsx from 'clsx';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport ZoomOutMapIcon from '@material-ui/icons/ZoomOutMap';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport ZoomInIcon from '@material-ui/icons/ZoomIn';\nimport ZoomOutIcon from '@material-ui/icons/ZoomOut';\nimport ZoomInMap from './ZoomInMap';\nimport KeyboardArrowLeftIcon from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\nimport {useTranslation} from 'react-i18next';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {AMPLITUDE_EVENT} from '../../constants';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport {IPdfLoadProgress, loadPdfData, MEGABYTE} from './loadPdfData';\n\nconst useStyles = makeStyles(() => ({\n    root: {\n      width: '100%',\n      height: '100%',\n      display: 'flex',\n      flexDirection: 'column',\n    },\n    header: {\n      zIndex: 1,\n      position: 'sticky',\n      padding: 4,\n      paddingLeft: 12,\n      overflowX: 'auto',\n    },\n    padding: {\n        padding: '.2rem',\n    },\n    flexCenter: {\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n    },\n    flexFixed: {\n        flexBasis: 0,\n        flexGrow: 0,\n        flexShrink: 0,\n    },\n    flexFluid: {\n        flexBasis: 0,\n        flexGrow: 1,\n        flexShrink: 1,\n    },\n    input: {\n        '& input[type=number]': {\n            '-moz-appearance': 'textfield'\n        },\n        '& input[type=number]::-webkit-outer-spin-button': {\n            '-webkit-appearance': 'none',\n            margin: 0\n        },\n        '& input[type=number]::-webkit-inner-spin-button': {\n            '-webkit-appearance': 'none',\n            margin: 0\n        }\n    },\n    flexJustifyEnd: {\n        display: 'flex',\n        justifyContent: 'flex-end',\n    },\n    status: {\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        justifyContent: 'center',\n        height: '100%',\n        padding: 16,\n        textAlign: 'center',\n    },\n    progress: {\n        width: '60%',\n        maxWidth: 320,\n        marginTop: 12,\n    },\n    retryButton: {\n        marginTop: 12,\n    },\n}));\n\nconst toMegabytes = (bytes: number) => (bytes / MEGABYTE).toFixed(1);\nfunction PDFViewer({\n    onMaximize,\n    onMinimize,\n    maximized,\n    onClose,\n    file,\n    fileName,\n    defaultPageNumber = 1,\n    defaultCoordinates,\n    defaultScale = 1.5,\n}) {\n    const [pageNumber, setPageNumber] = useState(defaultPageNumber);\n    const [pageNumberInputValue, setPageNumberInputValue] = useState(`${defaultPageNumber}`);\n    const [numPages, setNumPages] = useState(null);\n    const [scale, setScale] = useState(defaultScale);\n    const [scaleInputValue, setScaleInputValue] = useState(`${defaultScale * 100}`);\n    const [initialLoadCompleted, setInitialLoadCompleted] = useState(false);\n    const [pdfData, setPdfData] = useState<Uint8Array | null>(null);\n    const [loadProgress, setLoadProgress] = useState<IPdfLoadProgress | null>(null);\n    const [loadFailed, setLoadFailed] = useState(false);\n    const [loadAttempt, setLoadAttempt] = useState(0);\n    const { t } = useTranslation('translations');\n    const amplitudeData = useAmplitudeData();\n    const classes = useStyles();\n    const pageContainerRef = useRef(null);\n    const onPageInputChange = (e) => {\n        setPageNumberInputValue(e.target.value);\n    };\n    const onPageInputUpdate = () => {\n        const parsedNumberInputValue = parseInt(pageNumberInputValue, 10);\n        if (!Number.isNaN(parseInt(pageNumberInputValue, 10)) && parsedNumberInputValue > 0 && parsedNumberInputValue <= numPages) {\n            if (parsedNumberInputValue !== pageNumber) {\n                logPageChange();\n                setPageNumber(parsedNumberInputValue);\n            }\n        } else {\n            setPageNumberInputValue(`${pageNumber}`);\n        }\n    };\n    const onPageInputBlur = (e) => {\n        onPageInputUpdate();\n    };\n    const onPageInputEnter = (e) => {\n        if (e.key === 'Enter') {\n            onPageInputUpdate();\n        }\n    };\n    const logPageChange = () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n            'changedPage': true,\n        }));\n    };\n    const logZoomIn = () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n            'zoomIn': true,\n        }));\n    };\n    const logZoomOut = () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n            'zoomOut': true,\n        }));\n    };\n    const handlePrevPage = () => {\n        logPageChange();\n        setPageNumber(pageNumber - 1);\n        setPageNumberInputValue(`${pageNumber - 1}`);\n    };\n    const handleNextPage = () => {\n        logPageChange();\n        setPageNumber(pageNumber + 1);\n        setPageNumberInputValue(`${pageNumber + 1}`);\n    };\n    const onScaleInputChange = (e) => {\n        setScaleInputValue(e.target.value);\n    };\n    const onScaleInputUpdate = () => {\n        const parsedScaleInputValue = parseInt(scaleInputValue, 10);\n        if (Number.isNaN(parsedScaleInputValue)) {\n            setScaleInputValue(`${scale * 100}`);\n            return;\n        }\n        if (parsedScaleInputValue > scale * 100) {\n            logZoomIn();\n        } else if (parsedScaleInputValue < scale * 100) {\n            logZoomOut();\n        }\n        if (parsedScaleInputValue <= 25) {\n            setScale(0.25);\n            setScaleInputValue('25');\n            return;\n        }\n        if (parsedScaleInputValue >= 500) {\n            setScale(5);\n            setScaleInputValue('500');\n            return;\n        }\n        setScaleInputValue(`${parsedScaleInputValue}`);\n        setScale(parsedScaleInputValue / 100);\n    };\n    const onScaleInputBlur = (e) => {\n        onScaleInputUpdate();\n    };\n    const onScaleInputEnter = (e) => {\n        if (e.key === 'Enter') {\n            onScaleInputUpdate();\n        }\n    };\n    const onZoomInClick = () => {\n        logZoomIn();\n        const newScale = (scale + 0.25) * 100;\n        if (newScale <= 500) {\n            setScaleInputValue(`${newScale}`);\n            setScale(scale + 0.25);\n        } else {\n            setScaleInputValue('500');\n            setScale(5);\n        }\n    };\n    const onZoomOutClick = () => {\n        logZoomOut();\n        const newScale = (scale - 0.25) * 100;\n        if (newScale >= 25) {\n            setScaleInputValue(`${newScale}`);\n            setScale(scale - 0.25);\n        } else {\n            setScaleInputValue('25');\n            setScale(0.25);\n        }\n    };\n    const onDocumentLoadSuccess = (payload) => {\n        setNumPages(payload.numPages);\n    };\n    const onDocumentLoadError = (error) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n            'pdfViewerError': true,\n        }));\n    };\n    const isPrevPageDisabled = pageNumber === 1;\n    const isNextPageDisabled = pageNumber === numPages;\n    const isZoomInDisabled = scale >= 5;\n    const isZoomOutDisabled = scale <= 0.25;\n    useEffect(() => {\n        amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n            'documentOpened': true,\n        }));\n    }, []);\n    const startTime = useRef(new Date().getTime());\n    useEffect(() => {\n        return () => {\n            const endTime = new Date().getTime();\n            amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n                'pdfViewerUsageDuration': ((endTime - startTime.current) / 1000).toFixed(2) ,\n            }));\n        };\n    }, []);\n    // download the file here and give pdf.js the bytes, not the URL (see loadPdfData)\n    useEffect(() => {\n        const controller = new AbortController();\n        setPdfData(null);\n        setLoadProgress(null);\n        setLoadFailed(false);\n        loadPdfData(file, controller.signal, setLoadProgress)\n            .then((data) => {\n                if (!controller.signal.aborted) {\n                    setPdfData(data);\n                }\n            })\n            .catch((error) => {\n                if (!controller.signal.aborted) {\n                    setLoadFailed(true);\n                    onDocumentLoadError(error);\n                }\n            });\n        // closing the viewer stops the download\n        return () => controller.abort();\n    }, [file, loadAttempt]);\n    // react-pdf reloads whenever the file prop changes identity\n    const documentFile = useMemo(() => (pdfData ? { data: pdfData } : null), [pdfData]);\n    const handleRetry = () => {\n        setLoadAttempt((attempt) => attempt + 1);\n    };\n    const renderLoading = (progress: IPdfLoadProgress | null) => {\n        const hasTotal = progress !== null && progress.total !== null;\n        return (\n            <div className={classes.status}>\n                <Typography variant='body2' color='textSecondary'>\n                    {\n                        hasTotal\n                            ? t('PDFViewer.loadingProgress', { loaded: toMegabytes(progress.loaded), total: toMegabytes(progress.total) })\n                            : progress !== null\n                                ? t('PDFViewer.loadingDownloaded', { loaded: toMegabytes(progress.loaded) })\n                                : t('PDFViewer.loading')\n                    }\n                </Typography>\n                <LinearProgress\n                    className={classes.progress}\n                    variant={hasTotal ? 'determinate' : 'indeterminate'}\n                    value={hasTotal ? progress.loaded * 100 / progress.total : undefined}\n                />\n            </div>\n        );\n    };\n    const loadFailedMessage = (\n        <div className={classes.status}>\n            <Typography variant='body2' color='textSecondary'>\n                {t('PDFViewer.loadFailed')}\n            </Typography>\n            <Button className={classes.retryButton} size='small' variant='outlined' color='primary' onClick={handleRetry}>\n                {t('PDFViewer.retry')}\n            </Button>\n        </div>\n    );\n    return (\n        <div className={classes.root}>\n            <Paper elevation={1} className={clsx(classes.header, classes.flexCenter)}>\n                <Typography color='textPrimary' component='div' noWrap={true} className={clsx(classes.flexFluid)}>\n                    {fileName}\n                </Typography>\n                <div className={clsx(classes.flexCenter, classes.flexFluid)}>\n                    <div className={clsx(classes.flexCenter)}>\n                        <IconButton onClick={handlePrevPage} disabled={isPrevPageDisabled}>\n                            <KeyboardArrowLeftIcon />\n                        </IconButton>\n                        <TextField\n                            type='number'\n                            style={{ width: '40px' }}\n                            className={classes.input}\n                            value={pageNumberInputValue}\n                            onChange={onPageInputChange}\n                            onBlur={onPageInputBlur}\n                            onKeyPress={onPageInputEnter}\n                            inputProps={{\n                                style: {\n                                    textAlign: 'center',\n                                }\n                            }}\n                        />\n                        <span style={{ margin: '0 10px'}}>/</span>\n                        <Typography>{numPages}</Typography>\n                        <IconButton onClick={handleNextPage} disabled={isNextPageDisabled}>\n                            <KeyboardArrowRightIcon />\n                        </IconButton>\n                    </div>\n                    <div className={clsx(classes.flexCenter)} style={{ marginLeft: '32px' }}>\n                        <IconButton onClick={onZoomOutClick} disabled={isZoomOutDisabled}>\n                            <ZoomOutIcon />\n                        </IconButton>\n                        <TextField\n                            type='number'\n                            style={{ width: '80px' }}\n                            className={classes.input}\n                            value={scaleInputValue}\n                            onChange={onScaleInputChange}\n                            onBlur={onScaleInputBlur}\n                            onKeyPress={onScaleInputEnter}\n                            InputProps={{\n                                endAdornment: '%'\n                            }}\n                            inputProps={{\n                                style: {\n                                    textAlign: 'center',\n                                }\n                            }}\n                        />\n                        <IconButton onClick={onZoomInClick} disabled={isZoomInDisabled}>\n                            <ZoomInIcon />\n                        </IconButton>\n                    </div>\n                </div>\n                <div className={clsx(classes.flexFluid, classes.flexJustifyEnd)}>\n                    <Tooltip title={t('PDFViewer.openInNewTab')}>\n                        <IconButton onClick={() => {\n                            amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n                                'openInNewBrowser': true,\n                            }));\n                            window.open(`${file}#page=${pageNumber}`, '_blank');\n                        }}>\n                            <LaunchIcon />\n                        </IconButton>\n                    </Tooltip>\n                    <Tooltip title={t('PDFViewer.minimize')}>\n                        <span>\n                            <IconButton disabled={!maximized} onClick={() => {\n                                onMinimize();\n                                amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n                                    'minimizedView': true,\n                                }));\n                            }}>\n                                <ZoomInMap />\n                            </IconButton>\n                        </span>\n                    </Tooltip>\n                    <Tooltip title={t('PDFViewer.maximize')}>\n                    <span>\n                        <IconButton disabled={maximized} onClick={() => {\n                            onMaximize();\n                            amplitude.logEvent(AMPLITUDE_EVENT.pdfViewerEvent, amplitudeData({\n                                'maximizedView': true,\n                            }));\n                        }}>\n                            <ZoomOutMapIcon />\n                        </IconButton>\n                        </span>\n                    </Tooltip>\n                    <IconButton onClick={onClose}>\n                        <ClearIcon />\n                    </IconButton>\n                </div>\n            </Paper>\n            <div style={{ flex: 1, overflow: 'auto' }} ref={pageContainerRef}>\n                {\n                    loadFailed\n                        ? loadFailedMessage\n                        : documentFile === null\n                            ? renderLoading(loadProgress)\n                            : <Document\n                                file={documentFile}\n                                onLoadSuccess={onDocumentLoadSuccess}\n                                onLoadError={onDocumentLoadError}\n                                loading={renderLoading(null)}\n                                error={loadFailedMessage}\n                                options={{\n                                    isEvalSupported: false\n                                }}\n                            >\n                                <Page\n                                    scale={scale}\n                                    pageNumber={pageNumber}\n                                    onLoadSuccess={() => {\n                                        const pageContainer = pageContainerRef.current;\n                                        if (!initialLoadCompleted && pageContainer && defaultCoordinates) {\n                                            pageContainer.scrollTop = (defaultCoordinates?.get(1) || 0) * scale;\n                                            pageContainer.scrollLeft = (defaultCoordinates?.get(0) || 0) * scale;\n                                            setInitialLoadCompleted(true);\n                                        }\n                                    }}\n                                    renderTextLayer={false}\n                                    renderAnnotationLayer={false}\n                                />\n                            </Document>\n                }\n            </div>\n        </div>\n    );\n}\n\nexport default PDFViewer;","import React, { useState } from 'react';\nimport { Modal, makeStyles, Theme } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport PDFViewer from '../PDFViewer';\n\nconst useFileSrc = () => {\n  const atsApiIdentity = useSelector(makeSelectAtsApiState('identity'));\n  const atsApi = useAtsApi();\n  const [retry, setRetry] = React.useState(0);\n  const fileSrc = (fileId: string) => {\n    if (!fileId) {\n      return null;\n    }\n    try {\n      return atsApiIdentity && atsApi.callApi(fileId, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: { download: false } }) as string;\n    } catch (e) {\n      if (retry < 5) {\n        setTimeout(() => {\n          setRetry(retry + 1);\n        }, 1000);\n      }\n      console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', { // tslint:disable-line\n        e,\n        retry,\n        atsApi,\n      });\n      return null;\n    }\n  };\n  return fileSrc;\n};\n\nconst usePDFModalStyles = makeStyles((theme: Theme) => ({\n  paper: {\n    position: 'absolute',\n    width: (props: { maximized: boolean }) => props.maximized ? '80%' : '40%',\n    height: (props: { maximized: boolean }) => props.maximized ? '80%' : '40%',\n    backgroundColor: theme.palette.background.paper,\n    boxShadow: theme.shadows[5],\n    top: (props: { maximized: boolean }) => props.maximized ? '50%' : '30%',\n    left: (props: { maximized: boolean }) => props.maximized ? `50%` : '78%',\n    transform: `translate(-50%, -50%)`,\n  },\n}));\n\ninterface IProps {\n  onClose: (arg?: any) => void;\n  fileId: string;\n  fileName?: string;\n  defaultMaximized?: boolean;\n  defaultPageNumber?: number;\n  defaultCoordinates?: any;\n  defaultScale?: number;\n}\n\nconst PDFModal_: React.FC<IProps> = ({ onClose, fileId, fileName, defaultMaximized = false, defaultPageNumber = 1, defaultCoordinates, defaultScale = 1.5 }) => {\n  const [fileSrc, setFileSrc] = useState<string | null>(null);\n  const [maximized, setMaximized] = React.useState(defaultMaximized);\n  const classes = usePDFModalStyles({ maximized });\n  const getFileSrc = useFileSrc();\n  React.useEffect(() => {\n    if (fileId) {\n      setFileSrc(getFileSrc(fileId));\n    }\n  }, [fileId]);\n  return (\n    <Modal\n      open={true}\n      onClose={() => onClose()}\n      {...maximized ? {} : { BackdropProps: { style: { backgroundColor: 'transparent' } } }}\n    >\n      <div className={classes.paper}>\n        {\n          fileSrc ? <PDFViewer\n            key={fileSrc}\n            maximized={maximized}\n            onMaximize={() => setMaximized(true)}\n            onMinimize={() => setMaximized(false)}\n            onClose={() => onClose()}\n            file={fileSrc}\n            fileName={fileName}\n            defaultScale={defaultScale}\n            defaultPageNumber={defaultPageNumber}\n            defaultCoordinates={defaultCoordinates}\n          /> : null\n        }\n      </div>\n    </Modal>\n  );\n};\n\nconst PDFModal = React.memo(PDFModal_);\n\nexport { useFileSrc };\nexport default PDFModal;\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n  TextField,\n  Button,\n  Typography,\n  Tooltip,\n  Card,\n  CardContent,\n  Checkbox,\n} from '@material-ui/core';\nimport {\n  push,\n} from 'connected-react-router/immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  UpdateDrawingAction,\n  SelectDrawingAction,\n  DeleteDrawingAction,\n  SelectDrawingWithoutRulesAction,\n  ValidateDrawingAction,\n  DuplicateDrawingWithinSpecAction,\n} from '../../modules/SpecModule/actions';\nimport {\n  DragDropContext,\n  Droppable,\n  Draggable\n} from 'react-beautiful-dnd';\nimport {\n  List,\n  fromJS,\n  isList,\n} from 'immutable';\nimport ProjectDetailSpecDrawingProduct from '../../components/ProjectDetailSpecDrawingProduct';\nimport DeleteModal from '../../components/DeleteModalDialog';\nimport {\n  Drawing, Product, Spec,\n} from '../../models';\nimport { debounce } from 'lodash';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport barrierFreeIcon from '../../images/barrierFreeIcon.svg';\nimport { GetSeriesAndAddSeriesSpecificFiltersAction, SelectSeriesAction, SeriesLoadingAction, SetEditingProductIndexAction, SkipRuleEngineAction } from '../../modules/ProductModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {Mode, PRODUCT_SELECTION_PATH} from '../../constants';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { withAtsApi } from '../../contexts';\nimport { IWithAtsApi } from '../../contexts/AtsApiContext';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { makeSelectMode, makeSelectSearchingSpecs } from '../../modules/SpecModule/selectors';\nimport {CircularProgress} from '@material-ui/core';\nimport { makeSelectProjectSpecConfig } from '../../modules/ProjectModule/selectors';\nimport { UpdateProjectSpecDetailConfigAction } from '../../modules/ProjectModule/actions';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport { LOADING_MODAL_ID } from '../LoadingModal/Component';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport {makeSelectIdentityObject} from '../../modules/AtsModule/selectors';\nimport {AtsActionBlock} from '../AtsSvg/AtsActionBlock';\nimport {GUEST_LOGIN_MODAL} from '../GuestLoginModal';\n\ninterface IProjectDetailSpecDrawingComponentProps {\n  drawing: IMap<Drawing>;\n  ProductCategoryPath: string;\n  ProductSelectionPath: string;\n  specId: number;\n  isAi: boolean;\n}\n\ninterface IProjectDetailSpecDrawingProps extends IProjectDetailSpecDrawingComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  atsApiIdentity: boolean;\n  mode: Mode;\n  drawingChecked: boolean;\n  searchingSpecs: boolean;\n  isGuestUser: boolean;\n}\n\ntype ProjectDetailSpecProps = IProjectDetailSpecDrawingProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & IWithAtsApi;\n\nexport const validateDrawing = ({ atsApiIdentity, atsApi, drawing, mode, specId, onSuccess, onFail }) => {\n  const endpoint = {\n    [Mode.master]: 'validateMasterDrawing',\n    [Mode.masterTemplate]: 'validateMasterTemplateDrawing',\n    [Mode.project]: 'validateDrawing',\n    [Mode.testProject]: 'validateDrawing',\n    [Mode.spec]: 'validateDrawing',\n    [Mode.productCatalogue]: 'validateDrawing',\n  };\n  (atsApi.callApi({\n    service: 'spec',\n    endpoint: endpoint[mode],\n    body: {\n      // missingCategoryId is required when editing the first product in the drawing\n      // products need to be [] if its first product in the drawing\n      // missingCategoryId: categoryId,\n      // this case it would always send all the products in the drawing\n      // since we are trying to validate the whole drawing\n      products: drawing.get('products'),\n      useAccessibilityStandard: drawing.get('useAccessibilityStandard', false),\n    },\n    params: {\n      specId,\n    }\n  }) as any)\n  .then(onSuccess)\n  .catch(onFail); // should add a UI display for this instead of just toggling off the loading\n};\n\nexport const handleEditProduct = (_product: IMap<Product>, _productIndex: number, fallbackCB: () => void, {\n    dispatch,\n    drawing,\n    specId,\n}) => {\n  const drawingId = drawing.get('id');\n\n  if (_product != null) {\n\n    let product = _product;\n    let productIndex = _productIndex;\n    if (product.get('status') === 'archived') {\n      // find the first product that is not archived\n      product = drawing.get('products').find((prod: IMap<Product>, index: number) => {\n        if (prod.get('status') !== 'archived') {\n          productIndex = index;\n          return true;\n        }\n      });\n\n      if (product == null && fallbackCB) {\n        fallbackCB();\n        return;\n      }\n    }\n\n    const category = Product.getCategoryFromProduct(product);\n    const seriesId = product.get('series');\n    const currentProductId = product.get('id');\n\n    const filteredProducts = productIndex === 0\n        ? List()\n        : drawing\n            .get('products')\n            .filter((p: IMap<Product>) => {\n              return p.get('id') !== currentProductId;\n            })\n            .filter(x => x !== null);\n\n    const useAccessibilityStandard = drawing.get('useAccessibilityStandard');\n\n    dispatch(new SeriesLoadingAction());\n\n    // use validate endpoint in order to add rules to the getSeries call\n    // this is important when editing ADA products\n    // since ADA products needs to come with ADA filters\n    // without this, the drawing will have ADA toggled on but it will show ALL the series in that category\n    dispatch(new ValidateDrawingAction({\n      specId,\n      category,\n      useAccessibilityStandard,\n      products: filteredProducts,\n      seriesIdToOrderBy: seriesId,\n    }));\n\n    dispatch(new SetEditingProductIndexAction({\n      editProductIndex: productIndex\n    }));\n\n    dispatch(new SelectSeriesAction(seriesId));\n\n    // action to get Series data and apply logic between the Product attributes and Series Attributes\n    // mainly for pre checking the checkboxes\n    dispatch(new GetSeriesAndAddSeriesSpecificFiltersAction({\n      seriesId,\n      productAttributes: product.get('attributes'),\n    }));\n\n    // selects the drawing but doesn't go through validate. going through rule will trigger the next required series/product to appear. which will overwrite whatever you are trying to edit\n    // once the product is editted, the add to drawing will trigger rules to validate anyway.\n    dispatch(new SelectDrawingWithoutRulesAction(drawingId));\n    dispatch(push(`${PRODUCT_SELECTION_PATH}`));\n  }\n};\nexport const handleDuplicateDrawing = ({\n   drawing,\n   dispatch,\n   t\n}) => {\n  const drawingId = drawing.get('id');\n  const drawingName = drawing.get('name') || t('specDrawing.unnamedDrawing');\n  dispatch(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: { action: t('generalLoading.duplicating'), actionOnItem: drawingName }\n  }));\n  dispatch(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n  dispatch(new DuplicateDrawingWithinSpecAction(drawingId));\n};\nclass ProjectDetailSpecDrawing extends React.Component<ProjectDetailSpecProps, {}> {\n  public grid = 8;\n\n  public state = {\n    items: [],\n    name: '',\n    note: '',\n    order: 0,\n    deleteModalOpen: false,\n    drawingContainsCompetitorProduct: false,\n    ruleFails: [],\n    loadingRules: false,\n    isUpdatingDrawing: false\n  };\n\n  public debouncedDispatch = debounce((name: keyof Drawing, value: string) => {\n    const {\n      dispatch,\n      drawing\n    } = this.props;\n    this.setState({isUpdatingDrawing: true});\n    dispatch(new UpdateDrawingAction({\n      drawingId: drawing.get('id'),\n      drawing: drawing.set(name, value),\n      openSnackbar: true,\n      getSeries: false,\n      instantUpdateDrawingInStore: false\n    }));\n  }, 500);\n\n  public componentDidMount() {\n    const { drawing } = this.props;\n    this.setState({\n      name: drawing.get('name'),\n      note: drawing.get('note'),\n      order: drawing.get('order'),\n      drawingContainsCompetitorProduct: drawing.get('products').some(product => product.get('isCompetitor') === true),\n      loadingRules: true\n    });\n    this.validateDrawing();\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { drawing, drawingChecked, specId, dispatch } = this.props;\n    const { isUpdatingDrawing } = this.state;\n    // the modifiedDate of the drawing has changed which mean the updating is done\n    if (isUpdatingDrawing && drawing.get('modifiedDate') !== prevProps.drawing.get('modifiedDate')) {\n      this.setState({isUpdatingDrawing: false});\n    }\n    if (drawing.get('products') !== prevProps.drawing.get('products')) {\n      this.setState({items: drawing.get('products')});\n      // if drawing products updated and no product, and checkbox is checked then uncheck the checkbox\n      if (drawing.get('products').size === 0 && drawingChecked) {\n        dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId: drawing.get('id'), checked: false }));\n      }\n    }\n  }\n\n  public validateDrawing = () => {\n    const { drawing, specId, atsApiIdentity, atsApi, mode } = this.props;\n    validateDrawing({\n          atsApiIdentity,\n          atsApi,\n          drawing,\n          mode,\n          specId,\n          onSuccess: (res) => {\n            const data = res.payload.spec.failed;\n            const ruleFails = Object.keys(data).map(key => data[key]);\n            this.setState({\n              ruleFails,\n              loadingRules: false\n            });\n          },\n          onFail: () => {\n            this.setState({\n              loadingRules: false\n            });\n          }\n        });\n  }\n\n  public handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n    const {\n      target: {\n        name,\n        value\n      }\n    } = e;\n    this.setState({[name]: value});\n    if (!(name === 'order' && value === '')) {\n      this.debouncedDispatch(name as keyof Drawing, value);\n    }\n  }\n\n  public updateProductOrder = (newItems: List<IMap<Product>>) => {\n    const {\n      dispatch,\n      drawing,\n    } = this.props;\n\n    dispatch(new UpdateDrawingAction({\n      drawingId: drawing.get('id'),\n      drawing: drawing.set('products', newItems),\n      getSeries: false,\n      openSnackbar: true\n    }));\n  }\n\n  // a little function to help us with reordering the result\n  public reorder = (list: any, startIndex: any, endIndex: any) => {\n    const result = Array.from(list);\n    const [removed] = result.splice(startIndex, 1);\n    result.splice(endIndex, 0, removed);\n\n    return result;\n  }\n\n  public onDragEnd = (result: any, items: any) => {\n    // dropped outside the list\n    if (!result.destination) {\n      return;\n    }\n\n    const newItems: any = this.reorder(\n      items,\n      result.source.index,\n      result.destination.index\n    );\n\n    this.setState({\n      items: newItems,\n      isUpdatingDrawing: true\n    });\n\n    this.updateProductOrder(newItems);\n  }\n\n  public getListStyle = (isDraggingOver: any) => ({\n    background: isDraggingOver ? 'rgba(255,255,255,0.7)' : '#FFFFFF',\n    display: 'flex',\n    padding: 0,\n    overflow: 'auto',\n  })\n\n  public toggleDeleteModal = () => {\n    this.setState({ deleteModalOpen: !this.state.deleteModalOpen});\n  }\n\n  public editProduct = (product: IMap<Product>, productIndex: number) => {\n    const {\n      dispatch,\n      drawing,\n      specId,\n    } = this.props;\n\n    handleEditProduct(product, productIndex, this.handleAddDrawing,{\n        dispatch,\n        drawing,\n        specId,\n    });\n  }\n\n  public generateProductElements = (items: any) => {\n    const {\n      drawing,\n      ProductCategoryPath,\n      specId,\n      isAi,\n    } = this.props;\n\n    const {\n      drawingContainsCompetitorProduct,\n      isUpdatingDrawing\n    } = this.state;\n\n    return items.count() > 1 ?\n    items.map(\n      (product: IMap<Product>, index: number) => (\n        <Draggable\n          key={`${product.get('id')}-${index}`}\n          draggableId={`${product.get('id')}-${index}`}\n          index={index}\n          isDragDisabled={isAi || isUpdatingDrawing}\n        >\n          {(provided: any, snapshot: any) => (\n            <div\n              ref={provided.innerRef}\n              {...provided.draggableProps}\n              {...provided.dragHandleProps}\n              style={{\n                display: 'flex',\n                ...snapshot.isDragging,\n                ...provided.draggableProps.style\n              }}\n            >\n              <ProjectDetailSpecDrawingProduct\n                editProduct={this.editProduct}\n                specId={specId}\n                drawingId={drawing.get('id')}\n                product={product}\n                dragHandleProps={provided.dragHandleProps}\n                key={product.get('id')}\n                ProductCategoryPath={ProductCategoryPath}\n                showDnDIcon={true}\n                productIndex={index}\n                drawingContainsCompetitorProduct={drawingContainsCompetitorProduct}\n                isUpdatingDrawing={isUpdatingDrawing}\n                setIsUpdatingDrawing={(value: boolean) => this.setState({isUpdatingDrawing: value})}\n              />\n            </div>\n          )}\n        </Draggable>\n      )\n    )\n    : items.map(\n      (product: IMap<Product>, index: number) => (\n        <ProjectDetailSpecDrawingProduct\n          editProduct={this.editProduct}\n          specId={specId}\n          drawingId={drawing.get('id')}\n          product={product}\n          dragHandleProps={false}\n          key={product.get('id')}\n          ProductCategoryPath={ProductCategoryPath}\n          showDnDIcon={false}\n          productIndex={index}\n          drawingContainsCompetitorProduct={drawingContainsCompetitorProduct}\n          isUpdatingDrawing={isUpdatingDrawing}\n          setIsUpdatingDrawing={(value: boolean) => this.setState({isUpdatingDrawing: value})}\n        />\n      ));\n  }\n\n  // public handleEditDrawing = () => {\n  //   const {\n  //     drawing,\n  //     dispatch,\n  //     ProductSelectionPath,\n  //   } = this.props;\n  //\n  //   const drawingId = drawing.get('id');\n  //   dispatch(new SelectDrawingAction(drawingId));\n  //   dispatch(push(ProductSelectionPath));\n  //\n  //   // skip rules by default\n  //   dispatch(new SkipRuleEngineAction(false));\n  // }\n\n  public handleDeleteDrawing = () => {\n    const {\n      drawing,\n      dispatch,\n      specId,\n    } = this.props;\n\n    const drawingId = drawing.get('id');\n    dispatch(new DeleteDrawingAction({\n      drawingId,\n      onDeleteSuccess: () => dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }))\n    }));\n    this.toggleDeleteModal();\n  }\n\n  public handleAddDrawing = () => {\n    const {\n      drawing,\n      dispatch,\n      ProductCategoryPath,\n    } = this.props;\n\n    const drawingId = drawing.get('id');\n    dispatch(new SelectDrawingWithoutRulesAction(drawingId));\n    dispatch(push(ProductCategoryPath));\n\n    // add new drawing should always have rules on by default\n    dispatch(new SkipRuleEngineAction(false));\n  }\n\n  public openGuestLoginModal = () => {\n    const { isGuestUser, dispatch } = this.props;\n    if (isGuestUser) {\n      dispatch(new ToggleOverlayComponentAction({\n        id: GUEST_LOGIN_MODAL,\n        open: true\n      }));\n    }\n  }\n  public render() {\n    const {\n      drawing,\n      classes,\n      t,\n      drawingChecked,\n      specId,\n      dispatch,\n      searchingSpecs,\n      isAi,\n      isGuestUser,\n    } = this.props;\n\n    const {\n      deleteModalOpen,\n      name,\n      note,\n      order,\n      ruleFails,\n      loadingRules,\n      isUpdatingDrawing,\n      drawingContainsCompetitorProduct\n    } = this.state;\n\n    if (drawing == null) {\n      return <div>\n        {t('specDrawing.noDrawing')}\n      </div>;\n    }\n\n    const items = this.state.items.length > 0\n      ? fromJS(this.state.items)\n      : drawing.get('products');\n\n    const drawingIsAccessible = drawing && drawing.get('accessible') && drawing.get('useAccessibilityStandard');\n    const drawingAdaCertifiedIcon = drawingIsAccessible &&\n      <Tooltip title={t('specDrawing.barrierFreeTooltip')} placement='right'>\n        <img src={barrierFreeIcon} alt={t('specDrawing.barrierFreeAlt')} style={{display: 'block'}}/>\n      </Tooltip>;\n\n    const firstProduct = drawing.getIn(['products', 0]);\n    const tooltipInfo = <div>\n      <ul style={{listStyle: 'none', padding: 0}}>\n        {\n          ruleFails.map((fail: any, index) => {\n            return <li key={index}>{fail.rule.description}</li>;\n          })\n        }\n      </ul>\n    </div>;\n    return (\n      <Card elevation={0} variant='outlined'>\n        <CardContent>\n        <DeleteModal\n          open={deleteModalOpen}\n          toggleDeleteModal={this.toggleDeleteModal}\n          itemName={drawing.get('name') ? drawing.get('name') : t('specDrawing.unnamedDrawing')}\n          handleDelete={this.handleDeleteDrawing}\n        />\n        <Grid // label, sequence, action buttons container\n          container={true}\n          justify='space-between'\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            spacing={1}\n          >\n            <Grid item={true} container={true} alignItems='flex-end' style={{ padding: 0, width: 'auto' }}>\n              <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                <span>\n                  <Checkbox\n                    checked={drawingChecked}\n                    color='primary'\n                    style={{ padding: 4 }}\n                    disabled={isAi || drawing.get('products').size === 0}\n                    onChange={(e, _checked) => {\n                      dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId: drawing.get('id'), checked: _checked }));\n                    }}\n                  />\n                </span>\n              </Tooltip>\n            </Grid>\n            <Grid item={true}>\n              <TextField\n                name='name'\n                label={t('specDrawing.drawingLabelLabel')}\n                placeholder='name'\n                onChange={isGuestUser ? this.openGuestLoginModal : this.handleChange}\n                value={name}\n                size='small'\n                style={{width: '100%'}}\n                InputProps={{\n                  endAdornment: isGuestUser ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n                }}\n              />\n            </Grid>\n            <Grid item={true}>\n              <TextField\n                name='order'\n                label={t('specDrawing.drawingSequenceLabel')}\n                type='number'\n                onChange={isGuestUser ? this.openGuestLoginModal : this.handleChange}\n                value={order}\n                size='small'\n                style={{width: '100%'}}\n                InputProps={{\n                  endAdornment: isGuestUser ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n                }}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              container={true}\n              wrap='nowrap'\n              justify='center'\n              alignItems='center'\n              className={classes.tooltipInfoContainer}\n            >\n              {\n                searchingSpecs ? <CircularProgress /> : drawingIsAccessible && (\n                  <Grid\n                    item={true}\n                    className={classes.adaCertifiedIcon}\n                  >\n                    {drawingAdaCertifiedIcon}\n                  </Grid>\n                  )\n              }\n              {\n                loadingRules ? <CircularProgress /> : ruleFails.length > 0 &&  <Grid>\n                  <Tooltip title={tooltipInfo}>\n                    <WarningRoundedIcon />\n                  </Tooltip>\n                </Grid>\n              }\n            </Grid>\n          </Grid>\n          <Grid\n            container={true}\n            justify='flex-end'\n            alignItems='center'\n            wrap='nowrap'\n          >\n            {isUpdatingDrawing\n            ? <>\n                <CircularProgress size='1.5rem'/>\n                <Typography\n                  variant='button'\n                  color='textSecondary'\n                  style={{whiteSpace: 'nowrap', paddingLeft: 16, paddingRight: 8}}\n                  >\n                  {t('specDrawing.savingChanges')}\n                </Typography>\n              </>\n            : <>\n                <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : drawingContainsCompetitorProduct ? t('specDrawing.editDrawingDisabledTooltip') : ''}>\n                  <span>\n                    <Button\n                      onClick={() => this.editProduct(firstProduct, 0)}\n                      disabled={isAi ? true : drawingContainsCompetitorProduct ? true : firstProduct ? false : true}\n                      startIcon={<EditRoundedIcon />}\n                      className={classes.drawingEditButton}\n                    >\n                      {t('specDrawing.editDrawingButton')}\n                    </Button>\n                  </span>\n                </Tooltip>\n                <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                  <span>\n                    <Button\n                      onClick={() => handleDuplicateDrawing({\n                        drawing,\n                        dispatch,\n                        t,\n                      })}\n                      startIcon={<FileCopyIcon />}\n                      className={classes.drawingEditButton}\n                      disabled={isAi}\n                    >\n                      {t('formButtons.duplicate')}\n                    </Button>\n                  </span>\n                </Tooltip>\n                <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                  <span>\n                    <Button\n                      onClick={this.toggleDeleteModal}\n                      startIcon={<DeleteIcon />}\n                      className={classes.drawingEditButton}\n                      disabled={isAi}\n                    >\n                      {t('specDrawing.deleteDrawingButton')}\n                    </Button>\n                  </span>\n                </Tooltip>\n              </>\n            }\n          </Grid>\n        </Grid>\n        <Grid\n          container={true}\n          item={true}\n          direction='column'\n          className={classes.innerContainer}\n        >\n          {/* specs go here */}\n          {\n            items.size !== 0\n            ?  <Grid\n                xs={12}\n                item={true}\n                className={classes.productContainer}\n              >\n                <DragDropContext\n                  onDragEnd={(e) => this.onDragEnd(e, items)}\n                >\n                  <Droppable\n                    droppableId={`droppable-${drawing.get('id')}`}\n                    direction={'horizontal'}\n                  >\n                    {(provided: any, snapshot: any) => (\n                      <div\n                        ref={provided.innerRef}\n                        style={this.getListStyle(snapshot.isDraggingOver)}\n                      >\n                        {this.generateProductElements(items)}\n                        {provided.placeholder}\n                      </div>\n                    )}\n                  </Droppable>\n                </DragDropContext>\n              </Grid>\n            : <Grid\n                item={true}\n                className={classes.productsContainer}\n              >\n                <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                  <span>\n                    <Button\n                      className={classes.addProductButton}\n                      onClick={this.handleAddDrawing}\n                      disabled={isAi}\n                    >\n                      {t('specDrawing.addProductButton')}\n                    </Button>\n                  </span>\n                </Tooltip>\n              </Grid>\n          }\n          <TextField\n            name='note'\n            fullWidth={true}\n            classes={{ root: classes.noteLabel}}\n            label={t('specDrawing.drawingNoteLabel')}\n            onChange={isGuestUser ? this.openGuestLoginModal : this.handleChange}\n            value={note}\n            multiline={true}\n            size='small'\n            InputProps={{\n              endAdornment: isGuestUser ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n            }}\n          />\n        </Grid>\n        </CardContent>\n      </Card>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(2.5),\n  },\n  productContainer: {\n    overflow: 'auto',\n    maxWidth: '100%',\n    margin: theme.spacing(3, 0, 2)\n  },\n  drawingEditButton: {\n    marginRight: theme.spacing(),\n    color: theme.palette.text.secondary\n  },\n  innerContainer: {\n    paddingLeft: 0,\n    position: 'relative',\n  },\n  iconSize: {\n    margin: theme.spacing(2, 1, 0),\n    width: theme.spacing(2),\n  },\n  addProductButton: {\n    borderRadius: theme.shape.borderRadius,\n    border: '0.5px solid rgba(0,0,0,0.12)',\n    color: `${theme.palette.primary[800]}`,\n    width: 290,\n    height: 100,\n    margin: theme.spacing(0, 1),\n  },\n  adaCertifiedIcon: {\n    padding: theme.spacing(),\n  },\n  productsContainer: {\n    margin: theme.spacing(3, 0, 2)\n  },\n  tooltipInfoContainer: {\n    padding: '10px',\n    color: '#F0AD4E',\n    width: 'auto',\n  },\n});\n\nconst mapStateToProps = (state, props) => {\n  const { specId, drawing } = props;\n  const atsApiIdentity = makeSelectAtsApiState('identity')(state);\n  const mode = makeSelectMode()(state);\n  const drawingChecked = (makeSelectProjectSpecConfig({ specId, drawingId: drawing.get('id') })(state)).get?.('checked') ?? false;\n  const searchingSpecs = makeSelectSearchingSpecs()(state);\n  const isGuestUser = !makeSelectIdentityObject()(state);\n  return {\n    atsApiIdentity,\n    mode,\n    drawingChecked,\n    searchingSpecs,\n    isGuestUser,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\nexport default compose<React.ComponentClass<IProjectDetailSpecDrawingComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProjectDetailSpecDrawing);\n","import {Menu} from '@material-ui/core';\nimport React from 'react';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/styles';\n\ninterface IProps {\n    onClose: () => void;\n    open: boolean;\n    anchorEl: null | HTMLElement;\n    children: React.ReactNode;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    displayByContainer: {\n        position: 'absolute',\n        top: theme.spacing(3),\n        right: theme.spacing(2),\n    },\n}));\n\nconst ActionMenu = React.forwardRef<React.HTMLProps<HTMLDivElement>, IProps>(({\n  onClose,\n  open,\n  anchorEl,\n  children\n}, ref) => {\n    const classes = useStyles();\n    return (\n        <div className={classes.displayByContainer}>\n            <Menu anchorEl={anchorEl} open={open} onClose={onClose} onClick={(event) => event.stopPropagation()}>\n                {children}\n            </Menu>\n        </div>\n    );\n});\n\nexport default ActionMenu;","import React from 'react';\nimport {Button} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        borderRadius: theme.shape.borderRadius,\n        border: `1px solid ${theme.palette.primary[800]}`,\n        color: `${theme.palette.primary[800]}`,\n        fontSize: 32,\n        userSelect: 'none',\n        width: 40,\n        height: 40,\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        padding: '0px',\n        minWidth: 40,\n        textAlign: 'center',\n    }\n}));\nconst AddAlternateButton = (props) => {\n    const classes = useStyles();\n    return (\n        <Button\n            className={classes.root}\n            {...props}\n        >\n            +\n        </Button>\n    );\n};\n\nexport default AddAlternateButton;","// tslint:disable:no-shadowed-variable\nimport React, {useEffect} from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core';\nimport {Image} from '../../../index';\nimport {useDispatch} from 'react-redux';\nimport AlternativesDropDown, {ALTERNATIVES_DROP_DOWN_ID} from '../../../AlternativeDropDown';\nimport {SelectDrawingWithoutRulesAction} from '../../../../modules/SpecModule/actions';\nimport {SetOverlayComponentPropsAction} from '../../../../modules/ApplicationModule/actions';\nimport {List} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {AlternativeProduct, Drawing, Product, Spec} from '../../../../models';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        borderRadius: theme.shape.borderRadius,\n        // border: `1px solid ${theme.palette.primary[800]}`,\n        color: `${theme.palette.primary[800]}`,\n        fontSize: 32,\n        userSelect: 'none',\n        width: 40,\n        height: 40,\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n    },\n}));\n\ninterface IAlternativeProductCardProps {\n    spec: IMap<Spec>;\n    product: IMap<Product>;\n    productIndex: number;\n    alternativeProducts: List<IMap<AlternativeProduct>>;\n    drawingId: number;\n    disabledEdit?: boolean;\n    disabledEditTooltip?: string;\n}\nconst AlternativeProductCard: React.FC<IAlternativeProductCardProps> = ({\n    spec,\n    product,\n    productIndex,\n    alternativeProducts,\n    drawingId,\n    disabledEdit = false,\n}) => {\n    const anchorEl = React.useRef(null);\n    const classes = useStyles();\n    const alternativeProduct: IMap<AlternativeProduct> = alternativeProducts.first();\n    const alternativeProductManufacturerId = alternativeProduct.get('manufacturerId');\n    const manufacturerSrc = alternativeProduct.get('manufacturerLogo');\n    const imgSrc = manufacturerSrc || 'undefined|resize:40,40';\n    const drawing = spec.get('drawings', List()).find((drawing: IMap<Drawing>) => drawing.get('id') === drawingId);\n    const dispatch = useDispatch();\n    return (\n        <>\n            <div\n                ref={anchorEl}\n                 className={classes.root}\n                 onMouseEnter={(e) => {\n                     dispatch(new SelectDrawingWithoutRulesAction(drawing.get('id')));\n                     dispatch(new SetOverlayComponentPropsAction({\n                         id: ALTERNATIVES_DROP_DOWN_ID,\n                         props: {\n                             specId: spec.get('id'),\n                             drawingId: drawing.get('id'),\n                             productId: product.get('id'),\n                             seriesName: product.get('seriesName'),\n                             specProductId: product.get('specProductId'),\n                             productIndex,\n                             anchorEl: e.currentTarget,\n                             basisProductNumber: product.get('productNumber'),\n                             basisBrand: product.get('brand'),\n                             basisBrandId: product.get('brandId'),\n                             basisCategoryname: product.get('categoryName'),\n                             basisCategoryId: product.get('category'),\n\n                             disableManageAlternativeButton: true,\n                             disableActions: product.get('status') === 'archived',\n                             filterBrandId: alternativeProductManufacturerId,\n                         }\n                     }));\n                 }}\n            >\n                <Image\n                    src={imgSrc}\n                    fromService={true}\n                    aspectRatio={'100%'}\n                    width={'36px'}\n                />\n            </div>\n        </>\n    );\n};\nexport default AlternativeProductCard;","// tslint:disable:no-shadowed-variable\nimport React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n    Breadcrumbs,\n    Button,\n    Card,\n    CardContent,\n    Chip,\n    Divider,\n    Grid, IconButton,\n    Link,\n    Theme,\n    Tooltip,\n    Typography\n} from '@material-ui/core/';\nimport {DeleteModal, Image} from '../../index';\nimport DraftStatusChip from '../../DraftStatusChip';\nimport {MediaFileType} from '../../../models/File';\nimport {makeSelectAtsApiState} from '../../../modules/ApplicationModule/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useAtsApi} from '../../../contexts/AtsApiContext';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectLocale} from '../../../modules/LanguageModule/selectors';\nimport {makeSelectLoggedInUserOfficeLocation} from '../../../modules/AccountModule/selectors';\nimport {\n    deleteProduct,\n    getMediaFileIdByRegionLocaleOrFallback,\n    handleRevit\n} from '../../ProjectDetailSpecDrawingProduct';\nimport {useAmplitudeData} from '../../../hoc/withAmplitudeData';\nimport {fromJS} from 'immutable';\nimport {_makeSelectProject} from '../../../modules/ProjectModule/selectors';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {makeSelectIdentityObject, makeSelectIsAtsSpecTool} from '../../../modules/AtsModule/selectors';\nimport AddAlternateButton from './AddAlternateButton';\nimport {\n    SetOverlayComponentPropsAction,\n    ToggleOverlayComponentAction\n} from '../../../modules/ApplicationModule/actions';\nimport {ALTERNATIVES_MODAL_ID} from '../../../containers/AlternativesModal';\nimport AlternativeProductCard from './AlternativeProductCard';\nimport {AlternativeProduct} from '../../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { GEOLOCATION_ID } from '../../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    cardContainer: {\n        // border: `1px solid ${theme.palette.grey[500]}`,\n    },\n    cardContent: {\n        position: 'relative',\n        padding: '0 !important',\n        display: 'flex',\n        flexDirection: 'column',\n        justifyContent: 'space-between',\n    },\n    statusChip: {\n      position: 'absolute',\n      top: 4,\n      left: 4,\n      display: 'flex',\n    },\n    cardActions: {\n      position: 'absolute',\n      top: 4,\n      right: 4,\n      display: 'flex',\n    },\n    alternativeContainer: {\n        paddingBottom: theme.spacing()\n    },\n    pimStatusChip: {\n        marginBottom: theme.spacing()\n    },\n    info: {\n        padding: theme.spacing(3.75, 2, 2),\n        // minHeight: '180px' // comment out for now because it interferes with the sizing calculation hence causing overlap\n    },\n    alternativeProductCardContainer: {\n       display: 'flex',\n       gap: theme.spacing(2),\n    },\n    alternatives: {\n        padding: theme.spacing(1, 2),\n        backgroundColor: theme.palette.grey[100],\n        backgroundClip: 'padding-box',\n    },\n    notCompliantWarningIcon: {\n      color: theme.palette.warning.main,\n      cursor: 'default',\n    },\n}));\nconst ProductCard = ({ drawing, spec, product, productIndex, isUpdatingDrawing, setIsUpdatingDrawing, editProduct, disabledEdit = false, disabledEditTooltip = '', onClick, isCompliant = true }) => {\n    const [deleteModalOpen, setDeleteModalOpen] = React.useState(false);\n    const toggleDeleteModal = () => setDeleteModalOpen((prev) => !prev);\n    const { t } = useTranslation('translations');\n    const [retry, setRetry] = React.useState(0);\n    const classes = useStyles();\n    const imgSize = 70;\n    const media = product.getIn(['file', 'images', 'main', 'fileId']) + `|fit:${imgSize},${imgSize}`;\n    const draftStatus = product.get('draft');\n    const pimStatus = product.get('pimStatus');\n    const status = product.get('status');\n    const isArchived = status === 'archived';\n    const fileTypes: MediaFileType[] = ['cad', 'revit', 'manufacturer_cutsheet'];\n    const atsApiIdentity = useSelector(makeSelectAtsApiState('identity'));\n    const locale =  useSelector(makeSelectLocale());\n    const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n    const amplitudeData = useAmplitudeData();\n    const project = useSelector(_makeSelectProject()) ?? fromJS({});\n    const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n    const atsApi = useAtsApi();\n    const dispatch = useDispatch();\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n\n    const isAi = spec?.get('isAi');\n    const drawingContainsCompetitorProduct = drawing.get('products').some((product) => product.get('isCompetitor') === true);\n    const fileSrc: {\n        [key in MediaFileType]?: string;\n    } = {};\n\n    try {\n        fileTypes.forEach((fileType) => {\n            const fileId = getMediaFileIdByRegionLocaleOrFallback(fileType, {\n                locale,\n                countryId: spec.getIn(['address', 'country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']),\n                product,\n                isGuestUser,\n            });\n            if (fileId != null) {\n                fileSrc[fileType] = atsApiIdentity && atsApi.callApi(fileId, {\n                    service: 'file',\n                    endpoint: 'getFile',\n                    urlOnly: true,\n                    suppressErrors: true,\n                    withToken: true,\n                    withAppId: true\n                }) as string;\n            }\n        });\n    } catch (e) {\n        if (retry < 5) {\n            setTimeout(() => {\n                setRetry((prev) => prev + 1);\n            }, 1000);\n        }\n        console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', {\n            e,\n            retry,\n            atsApi,\n        });\n    }\n    const enableAlternativeFeature = isAtsSpecTool && !isGuestUser;\n    const handleClickManageAlternatives = () => {\n        dispatch(new SetOverlayComponentPropsAction({\n            id: ALTERNATIVES_MODAL_ID,\n            props: {\n                specId: spec.get('id'),\n                drawingId: drawing.get('id'),\n                productId: product.get('id'),\n                productIndex\n            }\n        }));\n        dispatch(new ToggleOverlayComponentAction({\n            id: ALTERNATIVES_MODAL_ID,\n            open: true\n        }));\n    };\n    const alternativeProductByBrand: IMap<{[manufacturerId: string]: AlternativeProduct[]}> = product?.get('alternativeProducts')?.groupBy((alternative) => alternative.get('manufacturerId')) ?? fromJS({});\n    return (\n        <Card elevation={4} className={classes.cardContainer} onClick={onClick}>\n            <CardContent className={classes.cardContent}>\n                <Grid\n                    container={true}\n                    alignItems='flex-start'\n                    wrap='nowrap'\n                    spacing={1}\n                    className={classes.info}\n                >\n                    <Grid item={true}>\n                        <Image\n                            src={media || ''}\n                            width={`${imgSize}px`}\n                            aspectRatio={'100%'}\n                            fromService={true}\n                        />\n                    </Grid>\n                    <Grid\n                        item={true}\n                        style={{overflow: 'auto'}}\n                    >\n                        {\n                          isArchived && (\n                            <div className={classes.statusChip}>\n                              <Chip\n                                style={{ borderRadius: '3px' }}\n                                label={t(`status.${status}`)}\n                                disabled={true}\n                                size='small'\n                              />\n                            </div>\n                          )\n                        }\n                        {\n                          (disabledEdit && !disabledEditTooltip)\n                            ? isCompliant\n                              ? null\n                              : <div className={classes.cardActions}>\n                                  <Tooltip title={t('SeriesPanel.productIsNotCompliantWarning')}>\n                                    <WarningRoundedIcon className={classes.notCompliantWarningIcon} />\n                                  </Tooltip>\n                                </div>\n                            : (\n                                <div className={classes.cardActions}>\n                                    {!isCompliant && (\n                                      <Tooltip title={t('SeriesPanel.productIsNotCompliantWarning')}>\n                                        <WarningRoundedIcon className={classes.notCompliantWarningIcon} />\n                                      </Tooltip>\n                                    )}\n                                    <Tooltip title={\n                                      disabledEditTooltip ? disabledEditTooltip :\n                                      isAi ? t('generalTooltip.disabledForAiSpec') : drawingContainsCompetitorProduct ? t('drawingProduct.editDisabledTooltip') : t('drawingProduct.editTooltip')\n                                    }>\n                                        <span style={{cursor: 'pointer'}}> {/* need span to display tooltip when disable and style is to keep the pointer*/}\n                                            <IconButton\n                                                onClick={(e) => {\n                                                    e.stopPropagation();\n                                                    editProduct();\n                                                }}\n                                                disabled={disabledEdit || isAi || drawingContainsCompetitorProduct || isUpdatingDrawing || isArchived}\n                                                size='small'\n                                            >\n                                            <EditRoundedIcon fontSize='small'/>\n                                        </IconButton>\n                                        </span>\n                                    </Tooltip>\n                                    <Tooltip title={\n                                      disabledEditTooltip ? disabledEditTooltip :\n                                      isAi ? t('generalTooltip.disabledForAiSpec') : t('drawingProduct.deleteTooltip')\n                                    }>\n                                        <span>\n                                        <IconButton\n                                            onClick={(e) => {\n                                                e.stopPropagation();\n                                                toggleDeleteModal();\n                                            }}\n                                            size='small'\n                                            disabled={disabledEdit || isAi || isUpdatingDrawing}\n                                        >\n                                            <DeleteIcon fontSize='small'/>\n                                        </IconButton>\n                                        </span>\n                                    </Tooltip>\n                                    <DeleteModal\n                                        dialogProps={{\n                                            onClick: (e) => {\n                                                e.stopPropagation();\n                                            }\n                                        }}\n                                        open={deleteModalOpen}\n                                        toggleDeleteModal={toggleDeleteModal}\n                                        itemName={product.get('productNumber') ? `${t('drawingProduct.deleteModalProductName')} ${product.get('productNumber')}` : 'unnamed product'}\n                                        handleDelete={() => deleteProduct({\n                                            product,\n                                            dispatch,\n                                            drawing,\n                                            setIsUpdatingDrawing\n                                        })}\n                                        withLoading={false}\n                                    />\n                                </div>\n                            )\n                        }\n\n                        {\n                            draftStatus &&\n                            <Grid className={classes.pimStatusChip}>\n                                <DraftStatusChip\n                                    pimStatus={pimStatus}\n                                />\n                            </Grid>\n                        }\n\n                        <Tooltip\n                            title={product.get('productNumber')}\n                            placement='top-start'\n                        >\n                            <Typography\n                                variant='body1'\n                                color='inherit'\n                                noWrap={true}\n                            >\n                                {product.get('productNumber')}\n                            </Typography>\n                        </Tooltip>\n\n                        <Tooltip\n                            title={product.get('brand')}\n                            placement='top-start'\n                        >\n                            <Typography\n                                variant='body1'\n                                noWrap={true}\n                            >\n                                {product.get('brand')}\n                            </Typography>\n                        </Tooltip>\n\n                        <Tooltip\n                            title={product.get('categoryName')}\n                            placement='top-start'\n                        >\n                            <Typography\n                                variant='body1'\n                                noWrap={true}\n                            >\n                                {product.get('categoryName')}\n                            </Typography>\n                        </Tooltip>\n                        <Breadcrumbs separator='|' style={{ minHeight: 20 }}>\n                            {fileSrc['revit'] && <Link href={fileSrc['revit']} onClick={(e) => {\n                                e.stopPropagation();\n                                handleRevit({\n                                    amplitudeData,\n                                    product,\n                                    project,\n                                    specId: spec.get('id'),\n                                    spec\n                                });\n                            }}>\n                                {t('drawingProduct.revit')}\n                            </Link>}\n                            {fileSrc['cad'] && <Link href={fileSrc['cad']} onClick={(e) => {\n                                e.stopPropagation();\n                            }}>{t('drawingProduct.cad')}</Link>}\n                            {fileSrc['manufacturer_cutsheet'] && <Link href={fileSrc['manufacturer_cutsheet']} onClick={(e) => {\n                                e.stopPropagation();\n                            }}>{t('drawingProduct.cutsheet')}</Link>}\n                        </Breadcrumbs>\n                    </Grid>\n                </Grid>\n                {\n                    enableAlternativeFeature ? <>\n                        <Divider />\n                        <div className={classes.alternatives}>\n                            <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n                                <Typography style={{ color: '#000' }} component='span' variant='caption'>{t('productCard.alternatives')}</Typography>\n                                <Tooltip title={disabledEditTooltip || (isAi && t('generalTooltip.disabledForAiSpec')) || ''}>\n                                  <span>\n                                    <Button\n                                        style={{ marginLeft: 'auto', textTransform: 'none' }}\n                                        variant='text'\n                                        color='primary'\n                                        disabled={disabledEdit || isArchived || isAi}\n                                        onClick={(e) => {\n                                            e.stopPropagation();\n                                            handleClickManageAlternatives();\n                                        }}\n                                        size='small'\n                                    >\n                                        {t('productCard.manageAlternatives')}\n                                    </Button>\n                                  </span>\n                                </Tooltip>\n                            </div>\n                            {\n                                alternativeProductByBrand.size === 0\n                                  ? isArchived\n                                    ? null\n                                    : <div>\n                                        <Tooltip title={disabledEditTooltip || (isAi && t('generalTooltip.disabledForAiSpec')) || ''}>\n                                          <span>\n                                            <AddAlternateButton disabled={disabledEdit || isAi} onClick={(e) => {\n                                                e.stopPropagation();\n                                                handleClickManageAlternatives();\n                                            }} />\n                                          </span>\n                                        </Tooltip>\n                                      </div>\n                                  : <div className={classes.alternativeProductCardContainer}>\n                                        {alternativeProductByBrand.valueSeq().map((alternativeProducts, index) => {\n                                            return (\n                                                <AlternativeProductCard\n                                                    spec={spec}\n                                                    key={index}\n                                                    product={product}\n                                                    productIndex={productIndex}\n                                                    alternativeProducts={alternativeProducts}\n                                                    drawingId={drawing.get('id')}\n                                                    disabledEdit={disabledEdit || isAi}\n                                                />\n                                            );\n                                        })}\n                                    </div>\n                            }\n                        </div>\n                    </> : null\n                }\n            </CardContent>\n        </Card>\n    );\n};\n\nexport default React.memo(ProductCard);","import * as tslib_1 from \"tslib\";\nexport function swap(array, moveIndex, toIndex) {\n    /* #move - Moves an array item from one position in an array to another.\n       Note: This is a pure function so a new array will be returned, instead\n       of altering the array argument.\n      Arguments:\n      1. array     (String) : Array in which to move an item.         (required)\n      2. moveIndex (Object) : The index of the item to move.          (required)\n      3. toIndex   (Object) : The index to move item at moveIndex to. (required)\n    */\n    var item = array[moveIndex];\n    var length = array.length;\n    var diff = moveIndex - toIndex;\n    if (diff > 0) {\n        // move left\n        return tslib_1.__spread(array.slice(0, toIndex), [\n            item\n        ], array.slice(toIndex, moveIndex), array.slice(moveIndex + 1, length));\n    }\n    else if (diff < 0) {\n        // move right\n        var targetIndex = toIndex + 1;\n        return tslib_1.__spread(array.slice(0, moveIndex), array.slice(moveIndex + 1, targetIndex), [\n            item\n        ], array.slice(targetIndex, length));\n    }\n    return array;\n}\n","import * as tslib_1 from \"tslib\";\n/**\n * Get the active drag position given its initial\n * coordinates and grid meta\n * @param index\n * @param grid\n * @param dx\n * @param dy\n */\nexport function getDragPosition(index, grid, dx, dy, center) {\n    var _a = tslib_1.__read(getPositionForIndex(index, grid).xy, 2), left = _a[0], top = _a[1];\n    return {\n        xy: [\n            left + dx + (center ? grid.columnWidth / 2 : 0),\n            top + dy + (center ? grid.rowHeight / 2 : 0)\n        ]\n    };\n}\n/**\n * Get the relative top, left position for a particular\n * index in a grid\n * @param i\n * @param grid\n * @param traverseIndex (destination for traverse)\n */\nexport function getPositionForIndex(i, _a, traverseIndex) {\n    var boxesPerRow = _a.boxesPerRow, rowHeight = _a.rowHeight, columnWidth = _a.columnWidth;\n    var index = typeof traverseIndex == \"number\" ? (i >= traverseIndex ? i + 1 : i) : i;\n    var x = (index % boxesPerRow) * columnWidth;\n    var y = Math.floor(index / boxesPerRow) * rowHeight;\n    return {\n        xy: [x, y]\n    };\n}\n/**\n * Given relative coordinates, determine which index\n * we are currently in\n * @param x\n * @param y\n * @param param2\n */\nexport function getIndexFromCoordinates(x, y, _a, count) {\n    var rowHeight = _a.rowHeight, boxesPerRow = _a.boxesPerRow, columnWidth = _a.columnWidth;\n    var index = Math.floor(y / rowHeight) * boxesPerRow + Math.floor(x / columnWidth);\n    return index >= count ? count : index;\n}\n/**\n * Get the target index during a drag\n * @param startIndex\n * @param grid\n * @param count\n * @param dx\n * @param dy\n */\nexport function getTargetIndex(startIndex, grid, count, dx, dy) {\n    var _a = tslib_1.__read(getDragPosition(startIndex, grid, dx, dy, true).xy, 2), cx = _a[0], cy = _a[1];\n    return getIndexFromCoordinates(cx, cy, grid, count);\n}\n","import * as tslib_1 from \"tslib\";\nimport * as React from \"react\";\nimport { getPositionForIndex, getIndexFromCoordinates } from \"./helpers\";\nvar noop = function () {\n    throw new Error(\"Make sure that you have wrapped your drop zones with GridContext\");\n};\nexport var GridContext = React.createContext({\n    register: noop,\n    remove: noop,\n    getActiveDropId: noop,\n    startTraverse: noop,\n    measureAll: noop,\n    traverse: null,\n    endTraverse: noop,\n    onChange: noop\n});\nexport function GridContextProvider(_a) {\n    var children = _a.children, onChange = _a.onChange;\n    var _b = tslib_1.__read(React.useState(null), 2), traverse = _b[0], setTraverse = _b[1];\n    var dropRefs = React.useRef(new Map());\n    /**\n     * Register a drop zone with relevant information\n     * @param id\n     * @param options\n     */\n    function register(id, options) {\n        dropRefs.current.set(id, options);\n    }\n    /**\n     * Remove a drop zone (typically on unmount)\n     * @param id\n     */\n    function remove(id) {\n        dropRefs.current.delete(id);\n    }\n    /**\n     * Determine the fixed position (pageX) of an item\n     * @param sourceId\n     * @param rx relative x\n     * @param ry relative y\n     */\n    function getFixedPosition(sourceId, rx, ry) {\n        var item = dropRefs.current.get(sourceId);\n        // When items are removed from the DOM, the left and top values could be undefined.\n        if (!item) {\n            return {\n                x: rx,\n                y: ry\n            };\n        }\n        var left = item.left, top = item.top;\n        return {\n            x: left + rx,\n            y: top + ry\n        };\n    }\n    /**\n     * Get a relative position for a target dropzone given\n     * a fixed position\n     * @param targetId\n     * @param fx fixed x\n     * @param fy fixed y\n     */\n    function getRelativePosition(targetId, fx, fy) {\n        var _a = dropRefs.current.get(targetId), left = _a.left, top = _a.top;\n        return {\n            x: fx - left,\n            y: fy - top\n        };\n    }\n    /**\n     * Determine the difference in coordinates between\n     * two dropzones\n     * @param sourceId\n     * @param targetId\n     */\n    function diffDropzones(sourceId, targetId) {\n        var sBounds = dropRefs.current.get(sourceId);\n        var tBounds = dropRefs.current.get(targetId);\n        return {\n            x: tBounds.left - sBounds.left,\n            y: tBounds.top - sBounds.top\n        };\n    }\n    /**\n     * Determine which dropzone we are actively dragging over\n     * @param sourceId\n     * @param x\n     * @param y\n     */\n    function getActiveDropId(sourceId, x, y) {\n        var e_1, _a;\n        var _b = getFixedPosition(sourceId, x, y), fx = _b.x, fy = _b.y;\n        try {\n            // probably faster just using an array for dropRefs\n            for (var _c = tslib_1.__values(dropRefs.current.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var _e = tslib_1.__read(_d.value, 2), key = _e[0], bounds = _e[1];\n                if (!bounds.disableDrop &&\n                    fx > bounds.left &&\n                    fx < bounds.right &&\n                    fy > bounds.top &&\n                    fy < bounds.bottom) {\n                    return key;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return null;\n    }\n    /**\n     * Trigger a traversal (when one item is being dropped\n     * on a different dropzone)\n     * @param sourceId\n     * @param targetId\n     * @param x\n     * @param y\n     * @param sourceIndex\n     */\n    function startTraverse(sourceId, targetId, x, y, sourceIndex) {\n        var _a = getFixedPosition(sourceId, x, y), fx = _a.x, fy = _a.y;\n        var _b = getRelativePosition(targetId, fx, fy), rx = _b.x, ry = _b.y;\n        var _c = dropRefs.current.get(targetId), targetGrid = _c.grid, count = _c.count;\n        var targetIndex = getIndexFromCoordinates(rx + targetGrid.columnWidth / 2, ry + targetGrid.rowHeight / 2, targetGrid, count);\n        var _d = tslib_1.__read(getPositionForIndex(targetIndex, targetGrid).xy, 2), px = _d[0], py = _d[1];\n        var _e = diffDropzones(sourceId, targetId), dx = _e.x, dy = _e.y;\n        // only update traverse if targetId or targetIndex have changed\n        if (!traverse ||\n            !(traverse &&\n                traverse.targetIndex !== targetIndex &&\n                traverse.targetId !== targetId)) {\n            setTraverse({\n                rx: px + dx,\n                ry: py + dy,\n                tx: rx,\n                ty: ry,\n                sourceId: sourceId,\n                targetId: targetId,\n                sourceIndex: sourceIndex,\n                targetIndex: targetIndex\n            });\n        }\n    }\n    /**\n     * End any active traversals\n     */\n    function endTraverse() {\n        setTraverse(null);\n    }\n    /**\n     * Perform a change to list item arrays.\n     * If it doesn't include targetId, it's a switch\n     * of order within the one array itself.\n     */\n    function onSwitch(sourceId, sourceIndex, targetIndex, targetId) {\n        // this is a bit hacky, but seems to work for now. The idea\n        // is that we want our newly mounted traversed grid item\n        // to start its animation from the last target location.\n        // Execute informs our GridDropZone to remove the placeholder\n        // but to pass the initial location to the newly mounted\n        // grid item at the specified index.\n        // The problem here is that it's async, so potentially something\n        // could mount in its place in between setTraversal and onChange\n        // executing. Or maybe onChange won't do anything, in which case\n        // our state is kinda messed up.\n        // So it's sorta a controlled component, but not really, because\n        // if you don't do what we suggest, then it gets messed up.\n        // One solution is to bring the state in-component and force\n        // the state to be updated by us, since it's basically required\n        // anyway.\n        // We could possibly also use a unique identifier for the grid (besides\n        // the index). This could still result in weirdness, but would\n        // be more unlikely.\n        // Ultimately it's kinda messed because we are trying to do something\n        // imperative in a declarative interface.\n        setTraverse(tslib_1.__assign({}, traverse, { execute: true }));\n        onChange(sourceId, sourceIndex, targetIndex, targetId);\n    }\n    function measureAll() {\n        dropRefs.current.forEach(function (ref) {\n            ref.remeasure();\n        });\n    }\n    return (React.createElement(GridContext.Provider, { value: {\n            register: register,\n            remove: remove,\n            getActiveDropId: getActiveDropId,\n            startTraverse: startTraverse,\n            traverse: traverse,\n            measureAll: measureAll,\n            endTraverse: endTraverse,\n            onChange: onSwitch\n        } }, children));\n}\n","import * as React from \"react\";\nvar noop = function () {\n    throw Error(\"GridItem must be used as a child of GridDropZone\");\n};\nexport var GridItemContext = React.createContext(null);\n","import * as tslib_1 from \"tslib\";\nimport * as React from \"react\";\nimport { useMeasure } from \"./use-measure\";\nimport { GridContext } from \"./GridContext\";\nimport { swap } from \"./swap\";\nimport { getPositionForIndex, getTargetIndex } from \"./helpers\";\nimport { GridItemContext } from \"./GridItemContext\";\nexport function GridDropZone(_a) {\n    var id = _a.id, boxesPerRow = _a.boxesPerRow, children = _a.children, style = _a.style, _b = _a.disableDrag, disableDrag = _b === void 0 ? false : _b, _c = _a.disableDrop, disableDrop = _c === void 0 ? false : _c, rowHeight = _a.rowHeight, other = tslib_1.__rest(_a, [\"id\", \"boxesPerRow\", \"children\", \"style\", \"disableDrag\", \"disableDrop\", \"rowHeight\"]);\n    var _d = React.useContext(GridContext), traverse = _d.traverse, startTraverse = _d.startTraverse, endTraverse = _d.endTraverse, register = _d.register, measureAll = _d.measureAll, onChange = _d.onChange, remove = _d.remove, getActiveDropId = _d.getActiveDropId;\n    var ref = React.useRef(null);\n    var _e = useMeasure(ref), bounds = _e.bounds, remeasure = _e.remeasure;\n    var _f = tslib_1.__read(React.useState(null), 2), draggingIndex = _f[0], setDraggingIndex = _f[1];\n    var _g = tslib_1.__read(React.useState(null), 2), placeholder = _g[0], setPlaceholder = _g[1];\n    var traverseIndex = traverse && !traverse.execute && traverse.targetId === id\n        ? traverse.targetIndex\n        : null;\n    var grid = {\n        columnWidth: bounds.width / boxesPerRow,\n        boxesPerRow: boxesPerRow,\n        rowHeight: rowHeight\n    };\n    var childCount = React.Children.count(children);\n    /**\n     * Register our dropzone with our grid context\n     */\n    React.useEffect(function () {\n        register(id, {\n            top: bounds.top,\n            bottom: bounds.bottom,\n            left: bounds.left,\n            right: bounds.right,\n            width: bounds.width,\n            height: bounds.height,\n            count: childCount,\n            grid: grid,\n            disableDrop: disableDrop,\n            remeasure: remeasure\n        });\n    }, [childCount, disableDrop, bounds, id, grid]);\n    /**\n     * Unregister when unmounting\n     */\n    React.useEffect(function () {\n        return function () { return remove(id); };\n    }, [id]);\n    // keep an initial list of our item indexes. We use this\n    // when animating swap positions on drag events\n    var itemsIndexes = React.Children.map(children, function (_, i) { return i; });\n    return (React.createElement(\"div\", tslib_1.__assign({ ref: ref, style: tslib_1.__assign({ position: \"relative\" }, style) }, other), grid.columnWidth === 0\n        ? null\n        : React.Children.map(children, function (child, i) {\n            var isTraverseTarget = traverse &&\n                traverse.targetId === id &&\n                traverse.targetIndex === i;\n            var order = placeholder\n                ? swap(itemsIndexes, placeholder.startIndex, placeholder.targetIndex)\n                : itemsIndexes;\n            var pos = getPositionForIndex(order.indexOf(i), grid, traverseIndex);\n            /**\n             * Handle a child being dragged\n             * @param state\n             * @param x\n             * @param y\n             */\n            function onMove(state, x, y) {\n                if (!ref.current)\n                    return;\n                if (draggingIndex !== i) {\n                    setDraggingIndex(i);\n                }\n                var targetDropId = getActiveDropId(id, x + grid.columnWidth / 2, y + grid.rowHeight / 2);\n                if (targetDropId && targetDropId !== id) {\n                    startTraverse(id, targetDropId, x, y, i);\n                }\n                else {\n                    endTraverse();\n                }\n                var targetIndex = targetDropId !== id\n                    ? childCount\n                    : getTargetIndex(i, grid, childCount, state.delta[0], state.delta[1]);\n                if (targetIndex !== i) {\n                    if ((placeholder && placeholder.targetIndex !== targetIndex) ||\n                        !placeholder) {\n                        setPlaceholder({\n                            targetIndex: targetIndex,\n                            startIndex: i\n                        });\n                    }\n                }\n                else if (placeholder) {\n                    setPlaceholder(null);\n                }\n            }\n            /**\n             * Handle drag end events\n             */\n            function onEnd(state, x, y) {\n                var targetDropId = getActiveDropId(id, x + grid.columnWidth / 2, y + grid.rowHeight / 2);\n                var targetIndex = targetDropId !== id\n                    ? childCount\n                    : getTargetIndex(i, grid, childCount, state.delta[0], state.delta[1]);\n                // traverse?\n                if (traverse) {\n                    onChange(traverse.sourceId, traverse.sourceIndex, traverse.targetIndex, traverse.targetId);\n                }\n                else {\n                    onChange(id, i, targetIndex);\n                }\n                setPlaceholder(null);\n                setDraggingIndex(null);\n            }\n            function onStart() {\n                measureAll();\n            }\n            return (React.createElement(GridItemContext.Provider, { value: {\n                    top: pos.xy[1],\n                    disableDrag: disableDrag,\n                    endTraverse: endTraverse,\n                    mountWithTraverseTarget: isTraverseTarget\n                        ? [traverse.tx, traverse.ty]\n                        : undefined,\n                    left: pos.xy[0],\n                    i: i,\n                    onMove: onMove,\n                    onEnd: onEnd,\n                    onStart: onStart,\n                    grid: grid,\n                    dragging: i === draggingIndex\n                } }, child));\n        })));\n}\n","import * as tslib_1 from \"tslib\";\nimport * as React from \"react\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nexport function useMeasure(ref) {\n    var _a = tslib_1.__read(React.useState({\n        left: 0,\n        top: 0,\n        width: 0,\n        height: 0,\n        right: 0,\n        bottom: 0\n    }), 2), bounds = _a[0], setBounds = _a[1];\n    var _b = tslib_1.__read(React.useState(function () {\n        return new ResizeObserver(function (_a) {\n            var _b = tslib_1.__read(_a, 1), entry = _b[0];\n            setBounds(entry.target.getBoundingClientRect());\n        });\n    }), 1), observer = _b[0];\n    React.useLayoutEffect(function () {\n        if (ref.current) {\n            observer.observe(ref.current);\n        }\n        return function () { return observer.disconnect(); };\n    }, [ref, observer]);\n    function remeasure() {\n        setBounds(ref.current.getBoundingClientRect());\n    }\n    return { bounds: bounds, remeasure: remeasure };\n}\n","var canUseDOM = !!(typeof window !== \"undefined\" &&\n    window.document &&\n    window.document.createElement);\nvar isEnabled = false;\nvar MOUSE_MOVE_THRESHOLD = 1000;\nvar lastTouchTimestamp = 0;\nfunction enableMouse() {\n    if (isEnabled || Date.now() - lastTouchTimestamp < MOUSE_MOVE_THRESHOLD) {\n        return;\n    }\n    isEnabled = true;\n}\nfunction disableMouse() {\n    lastTouchTimestamp = Date.now();\n    if (isEnabled) {\n        isEnabled = false;\n    }\n}\nif (canUseDOM) {\n    document.addEventListener(\"touchstart\", disableMouse, true);\n    document.addEventListener(\"touchmove\", disableMouse, true);\n    document.addEventListener(\"mousemove\", enableMouse, true);\n}\nexport function isMouseEnabled() {\n    return isEnabled;\n}\n","import * as tslib_1 from \"tslib\";\nimport * as React from \"react\";\nimport { isMouseEnabled } from \"./mouse-enabled\";\nvar initialState = {\n    time: Date.now(),\n    xy: [0, 0],\n    delta: [0, 0],\n    initial: [0, 0],\n    previous: [0, 0],\n    direction: [0, 0],\n    initialDirection: [0, 0],\n    local: [0, 0],\n    lastLocal: [0, 0],\n    velocity: 0,\n    distance: 0\n};\nvar defaultConfig = {\n    enableMouse: true\n};\nvar grantedTouch = null;\nexport function useGestureResponder(options, config) {\n    if (options === void 0) { options = {}; }\n    if (config === void 0) { config = {}; }\n    var state = React.useRef(initialState);\n    var _a = tslib_1.__assign({}, defaultConfig, config), uid = _a.uid, enableMouse = _a.enableMouse;\n    var id = React.useRef(uid || Math.random());\n    var pressed = React.useRef(false);\n    // update our callbacks when they change\n    var callbackRefs = React.useRef(options);\n    React.useEffect(function () {\n        callbackRefs.current = options;\n    }, [options]);\n    /**\n     * Attempt to claim the active touch\n     */\n    function claimTouch(e) {\n        if (grantedTouch && grantedTouch.onTerminationRequest(e)) {\n            grantedTouch.onTerminate(e);\n            grantedTouch = null;\n        }\n        attemptGrant(e);\n    }\n    /**\n     * Attempt to claim the active touch\n     * @param e\n     */\n    function attemptGrant(e) {\n        // if a touch is already active we won't register\n        if (grantedTouch) {\n            return;\n        }\n        grantedTouch = {\n            id: id.current,\n            onTerminate: onTerminate,\n            onTerminationRequest: onTerminationRequest\n        };\n        onGrant(e);\n    }\n    function bindGlobalMouseEvents() {\n        window.addEventListener(\"mousemove\", handleMoveMouse, false);\n        window.addEventListener(\"mousemove\", handleMoveMouseCapture, true);\n        window.addEventListener(\"mouseup\", handleEndMouse);\n    }\n    function unbindGlobalMouseEvents() {\n        window.removeEventListener(\"mousemove\", handleMoveMouse, false);\n        window.removeEventListener(\"mousemove\", handleMoveMouseCapture, true);\n        window.removeEventListener(\"mouseup\", handleEndMouse);\n    }\n    function handleStartCapture(e) {\n        updateStartState(e);\n        pressed.current = true;\n        var granted = onStartShouldSetCapture(e);\n        if (granted) {\n            attemptGrant(e);\n        }\n    }\n    function handleStart(e) {\n        updateStartState(e);\n        pressed.current = true;\n        bindGlobalMouseEvents();\n        var granted = onStartShouldSet(e);\n        if (granted) {\n            attemptGrant(e);\n        }\n    }\n    function isGrantedTouch() {\n        return grantedTouch && grantedTouch.id === id.current;\n    }\n    /**\n     * Handle touchend / mouseup events\n     * @param e\n     */\n    function handleEnd(e) {\n        pressed.current = false;\n        unbindGlobalMouseEvents();\n        if (!isGrantedTouch()) {\n            return;\n        }\n        // remove touch\n        grantedTouch = null;\n        onRelease(e);\n    }\n    /**\n     * Handle touchmove / mousemove capture events\n     * @param e\n     */\n    function handleMoveCapture(e) {\n        updateMoveState(e);\n        if (isGrantedTouch()) {\n            return;\n        }\n        if (onMoveShouldSetCapture(e)) {\n            claimTouch(e);\n        }\n    }\n    /**\n     * Handle touchmove / mousemove events\n     * @param e\n     */\n    function handleMove(e) {\n        if (isGrantedTouch()) {\n            onMove(e);\n            return;\n        }\n        if (onMoveShouldSet(e)) {\n            claimTouch(e);\n        }\n    }\n    /**\n     * When our gesture starts, should we become the responder?\n     */\n    function onStartShouldSet(e) {\n        return callbackRefs.current.onStartShouldSet\n            ? callbackRefs.current.onStartShouldSet(state.current, e)\n            : false;\n    }\n    /**\n     * Same as onStartShouldSet, except using capture.\n     */\n    function onStartShouldSetCapture(e) {\n        return callbackRefs.current.onStartShouldSetCapture\n            ? callbackRefs.current.onStartShouldSetCapture(state.current, e)\n            : false;\n    }\n    /**\n     * When our gesture moves, should we become the responder?\n     */\n    function onMoveShouldSet(e) {\n        return callbackRefs.current.onMoveShouldSet\n            ? callbackRefs.current.onMoveShouldSet(state.current, e)\n            : false;\n    }\n    /**\n     * Same as onMoveShouldSet, but using capture instead\n     * of bubbling.\n     */\n    function onMoveShouldSetCapture(e) {\n        return callbackRefs.current.onMoveShouldSetCapture\n            ? callbackRefs.current.onMoveShouldSetCapture(state.current, e)\n            : false;\n    }\n    /**\n     * The view is responding to gestures. Typically corresponds\n     * with mousedown or touchstart.\n     * @param e\n     */\n    function onGrant(e) {\n        if (callbackRefs.current.onGrant) {\n            callbackRefs.current.onGrant(state.current, e);\n        }\n    }\n    /**\n     * Update our kinematics for start events\n     * @param e\n     */\n    function updateStartState(e) {\n        var _a = e.touches && e.touches[0] ? e.touches[0] : e, pageX = _a.pageX, pageY = _a.pageY;\n        var s = state.current;\n        state.current = tslib_1.__assign({}, initialState, { lastLocal: s.lastLocal || initialState.lastLocal, xy: [pageX, pageY], initial: [pageX, pageY], previous: [pageX, pageY], time: Date.now() });\n    }\n    /**\n     * Update our kinematics when moving\n     * @param e\n     */\n    function updateMoveState(e) {\n        var _a = e.touches && e.touches[0] ? e.touches[0] : e, pageX = _a.pageX, pageY = _a.pageY;\n        var s = state.current;\n        var time = Date.now();\n        var x_dist = pageX - s.xy[0];\n        var y_dist = pageY - s.xy[1];\n        var delta_x = pageX - s.initial[0];\n        var delta_y = pageY - s.initial[1];\n        var distance = Math.sqrt(delta_x * delta_x + delta_y * delta_y);\n        var len = Math.sqrt(x_dist * x_dist + y_dist * y_dist);\n        var scaler = 1 / (len || 1);\n        var velocity = len / (time - s.time);\n        var initialDirection = s.initialDirection[0] !== 0 || s.initialDirection[1] !== 0\n            ? s.initialDirection\n            : [delta_x * scaler, delta_y * scaler];\n        state.current = tslib_1.__assign({}, state.current, { time: time, xy: [pageX, pageY], initialDirection: initialDirection, delta: [delta_x, delta_y], local: [\n                s.lastLocal[0] + pageX - s.initial[0],\n                s.lastLocal[1] + pageY - s.initial[1]\n            ], velocity: time - s.time === 0 ? s.velocity : velocity, distance: distance, direction: [x_dist * scaler, y_dist * scaler], previous: s.xy });\n    }\n    /**\n     * The user is moving their touch / mouse.\n     * @param e\n     */\n    function onMove(e) {\n        if (pressed.current && callbackRefs.current.onMove) {\n            callbackRefs.current.onMove(state.current, e);\n        }\n    }\n    /**\n     * The responder has been released. Typically mouse-up or\n     * touchend events.\n     * @param e\n     */\n    function onRelease(e) {\n        var s = state.current;\n        state.current = tslib_1.__assign({}, state.current, { lastLocal: s.local });\n        if (callbackRefs.current.onRelease) {\n            callbackRefs.current.onRelease(state.current, e);\n        }\n        grantedTouch = null;\n    }\n    /**\n     * Check with the current responder to see if it can\n     * be terminated. This is currently only triggered when returns true\n     * from onMoveShouldSet. I can't really envision much of a\n     * use-case for doing this with a standard onStartShouldSet.\n     *\n     * By default, returns true.\n     */\n    function onTerminationRequest(e) {\n        return callbackRefs.current.onTerminationRequest\n            ? callbackRefs.current.onTerminationRequest(state.current, e)\n            : true;\n    }\n    /**\n     * The responder has been taken by another view\n     */\n    function onTerminate(e) {\n        var s = state.current;\n        state.current = tslib_1.__assign({}, state.current, { lastLocal: s.local });\n        if (callbackRefs.current.onTerminate) {\n            callbackRefs.current.onTerminate(state.current, e);\n        }\n    }\n    /**\n     * Use window mousemove events instead of binding to the\n     * element itself to better emulate how touchmove works.\n     */\n    function handleMoveMouse(e) {\n        if (isMouseEnabled()) {\n            handleMove(e);\n        }\n    }\n    function handleMoveMouseCapture(e) {\n        if (isMouseEnabled()) {\n            handleMoveCapture(e);\n        }\n    }\n    function handleEndMouse(e) {\n        if (isMouseEnabled()) {\n            handleEnd(e);\n        }\n    }\n    React.useEffect(function () { return unbindGlobalMouseEvents; }, []);\n    /**\n     * Imperatively terminate the current responder\n     */\n    function terminateCurrentResponder() {\n        if (grantedTouch) {\n            grantedTouch.onTerminate();\n            grantedTouch = null;\n        }\n    }\n    /**\n     * A getter for returning the current\n     * responder, if it exists\n     */\n    function getCurrentResponder() {\n        return grantedTouch;\n    }\n    /**\n     * Required touch / mouse events\n     */\n    var touchEvents = {\n        onTouchStart: handleStart,\n        onTouchEnd: handleEnd,\n        onTouchMove: handleMove,\n        onTouchStartCapture: handleStartCapture,\n        onTouchMoveCapture: handleMoveCapture\n    };\n    var mouseEvents = enableMouse\n        ? {\n            onMouseDown: function (e) {\n                if (isMouseEnabled()) {\n                    handleStart(e);\n                }\n            },\n            onMouseDownCapture: function (e) {\n                if (isMouseEnabled()) {\n                    handleStartCapture(e);\n                }\n            }\n        }\n        : {};\n    return {\n        bind: tslib_1.__assign({}, touchEvents, mouseEvents),\n        terminateCurrentResponder: terminateCurrentResponder,\n        getCurrentResponder: getCurrentResponder\n    };\n}\n","import * as tslib_1 from \"tslib\";\nimport * as React from \"react\";\nimport { useGestureResponder } from \"react-gesture-responder\";\nimport { animated, interpolate, useSpring } from \"react-spring\";\nimport { GridItemContext } from \"./GridItemContext\";\nexport function GridItem(_a) {\n    var children = _a.children, style = _a.style, className = _a.className, other = tslib_1.__rest(_a, [\"children\", \"style\", \"className\"]);\n    var context = React.useContext(GridItemContext);\n    if (!context) {\n        throw Error(\"Unable to find GridItem context. Please ensure that GridItem is used as a child of GridDropZone\");\n    }\n    var top = context.top, disableDrag = context.disableDrag, endTraverse = context.endTraverse, onStart = context.onStart, mountWithTraverseTarget = context.mountWithTraverseTarget, left = context.left, i = context.i, onMove = context.onMove, onEnd = context.onEnd, grid = context.grid, isDragging = context.dragging;\n    var columnWidth = grid.columnWidth, rowHeight = grid.rowHeight;\n    var dragging = React.useRef(false);\n    var startCoords = React.useRef([left, top]);\n    var _b = tslib_1.__read(useSpring(function () {\n        if (mountWithTraverseTarget) {\n            // this feels really brittle. unsure of a better\n            // solution for now.\n            var mountXY = mountWithTraverseTarget;\n            endTraverse();\n            return {\n                xy: mountXY,\n                immediate: true,\n                zIndex: \"1\",\n                scale: 1.1,\n                opacity: 0.8\n            };\n        }\n        return {\n            xy: [left, top],\n            immediate: true,\n            zIndex: \"0\",\n            scale: 1,\n            opacity: 1\n        };\n    }), 2), styles = _b[0], set = _b[1];\n    // handle move updates imperatively\n    function handleMove(state, e) {\n        var x = startCoords.current[0] + state.delta[0];\n        var y = startCoords.current[1] + state.delta[1];\n        set({\n            xy: [x, y],\n            zIndex: \"1\",\n            immediate: true,\n            opacity: 0.8,\n            scale: 1.1\n        });\n        onMove(state, x, y);\n    }\n    // handle end of drag\n    function handleEnd(state) {\n        var x = startCoords.current[0] + state.delta[0];\n        var y = startCoords.current[1] + state.delta[1];\n        dragging.current = false;\n        onEnd(state, x, y);\n    }\n    var bind = useGestureResponder({\n        onMoveShouldSet: function (state) {\n            if (disableDrag) {\n                return false;\n            }\n            onStart();\n            startCoords.current = [left, top];\n            dragging.current = true;\n            return true;\n        },\n        onMove: handleMove,\n        onTerminationRequest: function () {\n            if (dragging.current) {\n                return false;\n            }\n            return true;\n        },\n        onTerminate: handleEnd,\n        onRelease: handleEnd\n    }, {\n        enableMouse: true\n    }).bind;\n    /**\n     * Update our position when left or top\n     * values change\n     */\n    React.useEffect(function () {\n        if (!dragging.current) {\n            set({\n                xy: [left, top],\n                zIndex: \"0\",\n                opacity: 1,\n                scale: 1,\n                immediate: false\n            });\n        }\n    }, [dragging.current, left, top]);\n    var props = tslib_1.__assign({ className: \"GridItem\" +\n            (isDragging ? \" dragging\" : \"\") +\n            (!!disableDrag ? \" disabled\" : \"\") +\n            className\n            ? \" \" + className\n            : \"\" }, bind, { style: tslib_1.__assign({ cursor: !!disableDrag ? \"grab\" : undefined, zIndex: styles.zIndex, position: \"absolute\", width: columnWidth + \"px\", opacity: styles.opacity, height: rowHeight + \"px\", boxSizing: \"border-box\", transform: interpolate([styles.xy, styles.scale], function (xy, s) {\n                return \"translate3d(\" + xy[0] + \"px, \" + xy[1] + \"px, 0) scale(\" + s + \")\";\n            }) }, style) }, other);\n    return typeof children === \"function\" ? (children(animated.div, props, {\n        dragging: isDragging,\n        disabled: !!disableDrag,\n        i: i,\n        grid: grid\n    })) : (React.createElement(animated.div, tslib_1.__assign({}, props), children));\n}\n","/* tslint:disable:no-shadowed-variable */\nimport React, {useEffect, useLayoutEffect, useMemo, useRef, useState} from 'react';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Drawing as DrawingType, Spec} from '../../../../models';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n    Button, Card,\n    Checkbox,\n    CircularProgress,\n    Divider,\n    Grid,\n    GridSize,\n    IconButton,\n    MenuItem,\n    TextField,\n    Theme,\n    Tooltip, Typography\n} from '@material-ui/core/';\nimport {UpdateProjectSpecDetailConfigAction} from '../../../../modules/ProjectModule/actions';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {handleDuplicateDrawing, handleEditProduct, validateDrawing} from '../../../ProjectDetailSpecDrawing';\nimport {makeSelectAtsApiState} from '../../../../modules/ApplicationModule/selectors';\nimport {useAtsApi} from '../../../../contexts/AtsApiContext';\nimport {makeSelectMode, makeSelectSearchingSpecs} from '../../../../modules/SpecModule/selectors';\nimport {PRODUCT_CATEGORY_PATH} from '../../../../constants';\nimport {debounce} from 'lodash';\nimport {\n    SelectDrawingWithoutRulesAction,\n    UpdateDrawingAction\n} from '../../../../modules/SpecModule/actions';\nimport CallSplitIcon from '@material-ui/icons/CallSplit';\nimport DeleteModal from '../../../DeleteModalDialog';\nimport MoreVertButton from '../../MoreVertButton';\nimport ActionMenu from '../ActionMenu';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport ProductCard from '../../ProductCard';\nimport barrierFreeIcon from '../../../../images/barrierFreeIcon.svg';\nimport {KeyboardArrowUp, KeyboardArrowDown} from '@material-ui/icons';\nimport {Image} from '../../../index';\nimport {push} from 'connected-react-router/immutable';\nimport {SkipRuleEngineAction} from '../../../../modules/ProductModule/actions';\nimport {GridContextProvider, GridDropZone, GridItem, swap} from 'react-grid-dnd';\nimport { List, fromJS, Map as ImmuMap } from 'immutable';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport useIsOnScreen from '../../../../hooks/useIsOnScreen';\nimport {AtsActionBlock} from '../../../AtsSvg/AtsActionBlock';\nimport {makeSelectIdentityObject} from '../../../../modules/AtsModule/selectors';\nimport {ToggleOverlayComponentAction} from '../../../../modules/ApplicationModule/actions';\nimport {GUEST_LOGIN_MODAL} from '../../../GuestLoginModal';\n\ninterface IProps {\n    drawing: IMap<DrawingType>;\n    spec: IMap<Spec>;\n    checked: boolean;\n    onCheck: (checked: boolean) => void;\n    expanded: boolean;\n    onExpandChange: (expanded: boolean) => void;\n    onDeleteDrawing: (specId: number, drawingId: number) => void;\n    disabledEdit?: boolean;\n    disabledEditTooltip?: string;\n    hideEndorsement?: boolean;\n    productComplianceMap: ImmuMap<number, boolean>;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    card: {\n        padding: theme.spacing(0, 1, 1, 1),\n        border: `1px solid ${theme.palette.grey[500]}`,\n    },\n    tooltipInfoContainer: {\n        padding: '10px',\n        color: '#F0AD4E',\n        width: 'auto',\n    },\n    adaCertifiedIcon: {\n        padding: theme.spacing(),\n    },\n    top: {\n        padding: `${theme.spacing(2)}px ${theme.spacing(1)}px`,\n    },\n    menuItemIcon: {\n        marginRight: theme.spacing(2),\n    },\n    productCardsContainer: {\n        padding: `${theme.spacing(2)}px ${theme.spacing(1)}px`,\n    },\n    drawingSummaryContainer: {\n        width: '100% - calc(2 * theme.spacing(1))',\n        borderRadius: '4px',\n        marginTop: theme.spacing(2),\n        marginBottom: theme.spacing(2),\n        paddingLeft: theme.spacing(4),\n        paddingRight: theme.spacing(1),\n    },\n    drawingSummary: {\n        border: '1px solid #C1C1C1',\n        borderRadius: '8px',\n        padding: theme.spacing(1),\n    },\n    addProductButton: {\n        borderRadius: theme.shape.borderRadius,\n        border: `1px solid ${theme.palette.primary[800]}`,\n        color: `${theme.palette.primary[800]}`,\n        width: 288,\n        height: 216,\n    },\n    defaultCursor: {\n        cursor: 'default',\n    },\n    grabCursor: {\n        cursor: 'grab',\n        '&:active': {\n            cursor: 'grabbing',\n        }\n    },\n    disabledTextFieldLabel: {\n        color: `${theme.palette.text.secondary} !important`,\n    },\n    disabledTextFieldInput: {\n        color: theme.palette.text.primary,\n    },\n    divider: {\n        backgroundColor: theme.palette.grey[500],\n        width: `calc(100% + ${theme.spacing(2)}px)`,\n        marginLeft: -theme.spacing(1),\n    },\n}));\n\nfunction Drawing({\n     drawing,\n     spec,\n     checked,\n     onCheck,\n     expanded,\n     onExpandChange,\n     onDeleteDrawing,\n     disabledEdit,\n     disabledEditTooltip,\n     hideEndorsement = false,\n     productComplianceMap,\n}: IProps) {\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n    const specId = spec.get('id');\n    const isAi = spec.get('isAi');\n    const [isUpdatingDrawing, setIsUpdatingDrawing] = useState(false);\n    const [deleteModalOpen, setDeleteModalOpen] = useState(false);\n    const atsApiIdentity = useSelector(makeSelectAtsApiState('identity'));\n    const atsApi = useAtsApi();\n    const classes = useStyles();\n    const mode = useSelector(makeSelectMode());\n    const { t } = useTranslation('translations');\n    const searchingSpecs: boolean = useSelector(makeSelectSearchingSpecs());\n    const validationHasTriggeredRef = useRef(false);\n    const drawingRef = useRef(null);\n    const isOnScreen = useIsOnScreen(drawingRef);\n    const drawingIsAccessible = drawing && drawing.get('accessible') && drawing.get('useAccessibilityStandard');\n    const drawingAdaCertifiedIcon = drawingIsAccessible &&\n        <Tooltip title={t('specDrawing.barrierFreeTooltip')} placement='right'>\n            <img src={barrierFreeIcon} alt={t('specDrawing.barrierFreeAlt')} style={{display: 'block'}}/>\n        </Tooltip>;\n    const drawingId = drawing.get('id');\n    const dispatch = useDispatch();\n    const [state, setState] = useState({\n        items: List([]),\n        name: drawing?.get('name') ?? '',\n        note: drawing?.get('note') ?? '',\n        order: drawing?.get('order') ?? 0,\n        deleteModalOpen: false,\n        ruleFails: [],\n        loadingRules: false,\n        isUpdatingDrawing: false\n    });\n\n    useEffect(() => {\n        setState((prevState) => ({\n            ...prevState,\n            order: drawing?.get('order') ?? 0\n        }));\n    }, [drawing.get('order')]);\n    const tooltipInfo = <div>\n        <ul style={{listStyle: 'none', padding: 0}}>\n            {\n                state.ruleFails.map((fail: any, index) => {\n                    return <li key={index}>{fail.rule.description}</li>;\n                })\n            }\n        </ul>\n    </div>;\n    const debouncedDispatch = useMemo(() => {\n        return debounce((name: keyof DrawingType, value: string) => {\n            setState((prevState) => ({\n                ...prevState,\n                isUpdatingDrawing: true\n            }));\n            dispatch(new UpdateDrawingAction({\n                drawingId: drawing.get('id'),\n                drawing: drawing.set(name, value),\n                openSnackbar: true,\n                getSeries: false,\n                instantUpdateDrawingInStore: false\n            }));\n        }, 500);\n    }, [drawing, dispatch]);\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n        const {\n            target: {\n                name,\n                value\n            }\n        } = e;\n        if (isGuestUser) {\n            dispatch(new ToggleOverlayComponentAction({\n                id: GUEST_LOGIN_MODAL,\n                open: true,\n            }));\n            return;\n        }\n        setState((prevState) => ({\n            ...prevState,\n            [name]: value\n        }));\n        if (!(name === 'order' && value === '')) {\n            debouncedDispatch(name as keyof DrawingType, value);\n        }\n    };\n    const toggleDeleteModal = () => {\n        setDeleteModalOpen((prevState) => !prevState);\n    };\n    const handleDeleteDrawing = () => {\n        onDeleteDrawing(specId, drawingId);\n        toggleDeleteModal();\n    };\n    const handleAddProduct = () => {\n        const drawingId = drawing.get('id');\n        dispatch(new SelectDrawingWithoutRulesAction(drawingId));\n        dispatch(push(PRODUCT_CATEGORY_PATH));\n\n        // add new drawing should always have rules on by default\n        dispatch(new SkipRuleEngineAction(false));\n    };\n    const handleEditDrawing = () => {\n        const firstProduct = drawing.getIn(['products', 0]);\n        handleEditProduct(firstProduct, 0, handleAddProduct, {\n            dispatch,\n            drawing,\n            specId\n        });\n    };\n    useLayoutEffect(() => {\n        setState((prevState) => ({\n            ...prevState,\n            items: drawing.get('products'),\n        }));\n    }, [drawing.get('products')]);\n    useEffect(() => {\n        // if drawing products updated and no product, and checkbox is checked then uncheck the checkbox\n        if (drawing.get('products').size === 0 && checked) {\n            dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId: drawing.get('id'), checked: false }));\n        }\n    }, [checked, drawing.get('products').size]);\n    useLayoutEffect(() => {\n        if (isOnScreen && !validationHasTriggeredRef.current) {\n            validationHasTriggeredRef.current = true;\n            setState((prevState) => ({\n                ...prevState,\n                loadingRules: true,\n            }));\n            validateDrawing({\n                atsApiIdentity,\n                atsApi,\n                drawing,\n                mode,\n                specId,\n                onSuccess: (res) => {\n                    const data = res.payload.spec.failed;\n                    const ruleFails = Object.keys(data).map(key => data[key]);\n                    setState((prevState) => ({\n                        ...prevState,\n                        ruleFails,\n                        loadingRules: false\n                    }));\n                },\n                onFail: () => {\n                    setState((prevState) => ({\n                        ...prevState,\n                        loadingRules: false\n                    }));\n                }\n            });\n        }\n    }, [isOnScreen]);\n    const containOneProductHasAlternative = drawing?.get('products')?.some(product => product?.get('alternativeProducts')?.size > 0) ?? false;\n\n    // dnd stuff\n    // for responsive cards per row\n    const [productCardsPerRow, setProductCardsPerRow] = useState<number>(3); // default value\n    const drawingHead = document.getElementById('drawingTop' + drawingId);\n    const resizeObserver = new ResizeObserver(debounce((entries) => {\n        const width = entries[0].target.clientWidth;\n        if (!width) { return; }\n        if (width < 800) {\n            setProductCardsPerRow(2);\n        } else if (width > 1250) {\n            setProductCardsPerRow(4);\n        } else {\n            setProductCardsPerRow(3);\n        }\n    }));\n    if (drawingHead && expanded) { resizeObserver.observe(drawingHead); }\n    // cleanup\n    useEffect(() => {\n        return () => {\n            resizeObserver.disconnect();\n        };\n    }, []);\n\n    // for responsive row height\n    const [productRowHeight, setProductRowHeight] = useState<number>(0);\n    useLayoutEffect(() => {\n        if (!expanded) { return; }\n        const firstProductId = drawing.getIn(['products', 0, 'id']);\n        const firstProductCard = document.getElementById(drawingId + '-' + firstProductId);\n        if (firstProductCard) {\n            setProductRowHeight(firstProductCard.clientHeight);\n        } else {\n            setProductRowHeight(233); // default height for first time expanded when product card is not rendered yet\n        }\n    }, [expanded]);\n\n    const updateProductsOrder = (newProductsList) => {\n        setState((prevState) => ({\n            ...prevState,\n            items: newProductsList,\n        }));\n        dispatch(new UpdateDrawingAction({\n          drawingId: drawing.get('id'),\n          drawing: drawing.set('products', newProductsList),\n          getSeries: false,\n          openSnackbar: true\n        }));\n    };\n    const handleReorderProducts = (sourceId: any, sourceIndex: any, destinationIndex: any, destinationId: any, ) => {\n        if (sourceIndex === destinationIndex) {\n            return;\n        }\n        const result = swap(state.items.toJS(), sourceIndex, destinationIndex);\n        updateProductsOrder(fromJS(result));\n    };\n\n    const drawingContainsCompetitorProduct: boolean = drawing.get('products').some(product => product.get('isCompetitor') === true);\n    const firstProduct = drawing.getIn(['products', 0]);\n    // @ts-ignore\n    // @ts-ignore\n    // @ts-ignore\n    return (\n        <>\n            <DeleteModal\n                open={deleteModalOpen}\n                toggleDeleteModal={toggleDeleteModal}\n                itemName={drawing.get('name') ? drawing.get('name') : t('specDrawing.unnamedDrawing')}\n                handleDelete={handleDeleteDrawing}\n            />\n            <Card elevation={0} ref={drawingRef} className={classes.card} style={{ borderRadius: '8px' }} onClick={() => {\n                if (!expanded) {\n                    onExpandChange(true);\n                } else {\n                    onExpandChange(false);\n                }\n            }}>\n                <Grid container={true} justify='space-between' wrap='nowrap' className={classes.top} id={'drawingTop' + drawingId}>\n                    <Grid\n                        container={true}\n                        spacing={1}\n                    >\n                        <Grid item={true} container={true} alignItems='center' style={{ padding: 0, width: 'auto' }}>\n                            <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                            <span>\n                              <Checkbox\n                                  checked={checked}\n                                  color='primary'\n                                  style={{ padding: 4 }}\n                                  disabled={isAi || drawing.get('products').size === 0}\n                                  onChange={(e, newValue) => onCheck(newValue)}\n                                  onClick={(e) => {\n                                      e.stopPropagation();\n                                  }}\n                              />\n                            </span>\n                            </Tooltip>\n                        </Grid>\n                        <Grid item={true} style={{ flexGrow: 1, maxWidth: 400 }}>\n                            {\n                                validationHasTriggeredRef.current\n                                    ? <Tooltip title={disabledEditTooltip || ''}>\n                                        <TextField\n                                          onClick={(e) => {\n                                              e.stopPropagation();\n                                          }}\n                                          name='name'\n                                          label={t('specDrawing.drawingLabelLabel')}\n                                          placeholder='name'\n                                          disabled={disabledEdit}\n                                          onChange={handleChange}\n                                          value={state.name}\n                                          size='small'\n                                          style={{width: '100%'}}\n                                          InputLabelProps={{\n                                              classes: {\n                                                  disabled: classes.disabledTextFieldLabel\n                                              }\n                                          }}\n                                          InputProps={{\n                                              classes: {\n                                                  disabled: classes.disabledTextFieldInput\n                                              },\n                                              endAdornment: (isGuestUser && !hideEndorsement) ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n                                          }}\n                                        />\n                                      </Tooltip>\n                                    :   <Typography>{state.name}</Typography>\n                            }\n                        </Grid>\n                        <Grid item={true}>\n                            {\n                                validationHasTriggeredRef.current\n                                    ? <Tooltip title={disabledEditTooltip || ''}>\n                                        <TextField\n                                          onClick={(e) => {\n                                              e.stopPropagation();\n                                          }}\n                                          name='order'\n                                          label={t('specDrawing.drawingSequenceLabel')}\n                                          type='number'\n                                          disabled={disabledEdit}\n                                          onChange={handleChange}\n                                          value={state.order}\n                                          size='small'\n                                          style={{width: 64 }}\n                                          InputLabelProps={{\n                                              classes: {\n                                                  disabled: classes.disabledTextFieldLabel\n                                              }\n                                          }}\n                                          InputProps={{\n                                              classes: {\n                                                  disabled: classes.disabledTextFieldInput\n                                              },\n                                              endAdornment: (isGuestUser && !hideEndorsement) ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n                                          }}\n                                        />\n                                      </Tooltip>\n                                    :   <Typography>{state.order}</Typography>\n                            }\n                        </Grid>\n                        <Grid\n                            item={true}\n                            container={true}\n                            wrap='nowrap'\n                            justify='center'\n                            alignItems='center'\n                            className={classes.tooltipInfoContainer}\n                        >\n                            {\n                                searchingSpecs ? <CircularProgress /> : drawingIsAccessible && (\n                                    <Grid\n                                        item={true}\n                                        className={classes.adaCertifiedIcon}\n                                    >\n                                        {drawingAdaCertifiedIcon}\n                                    </Grid>\n                                )\n                            }\n                            {\n                                state.loadingRules ? <CircularProgress /> : state.ruleFails.length > 0 &&  <Grid>\n                                    <Tooltip title={tooltipInfo}>\n                                        <WarningRoundedIcon />\n                                    </Tooltip>\n                                </Grid>\n                            }\n                            {\n                                containOneProductHasAlternative ?\n                                    <Grid>\n                                        <Tooltip title={t('Drawing.hasAlternative')}>\n                                            <CallSplitIcon />\n                                        </Tooltip>\n                                    </Grid> : null\n                            }\n                        </Grid>\n                    </Grid>\n                    <Grid container={true} justify='flex-end' alignItems='center'>\n                        <Grid item={true}>\n                          <Tooltip title={disabledEditTooltip || ''}>\n                            <span>\n                              <MoreVertButton disabled={disabledEdit || isAi} tooltipText={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                                  {(props) => <ActionMenu {...props}>\n                                      <MenuItem\n                                          onClick={() => handleEditDrawing()}\n                                          value='edit'\n                                          disabled={isAi || drawingContainsCompetitorProduct || !firstProduct}\n                                      >\n                                          <EditRoundedIcon className={classes.menuItemIcon} fontSize='small' />\n                                          {t('Drawing.editDrawing')}\n                                      </MenuItem>\n                                      <MenuItem\n                                          value='duplicate'\n                                          onClick={() => {\n                                              handleDuplicateDrawing({\n                                                  dispatch,\n                                                  drawing,\n                                                  t,\n                                              });\n                                              props.onClose();\n                                          }}\n                                      >\n                                          <FileCopyIcon className={classes.menuItemIcon} fontSize='small' />\n                                          {t('Drawing.duplicateDrawing')}\n                                      </MenuItem>\n                                      <MenuItem\n                                          value='delete'\n                                          onClick={() => {\n                                              toggleDeleteModal();\n                                              props.onClose();\n                                          }}\n                                      >\n                                          <DeleteIcon className={classes.menuItemIcon} fontSize='small' />\n                                          {t('Drawing.deleteDrawing')}\n                                      </MenuItem>\n                                  </ActionMenu>}\n                              </MoreVertButton>\n                            </span>\n                          </Tooltip>\n                        </Grid>\n                        <Grid item={true}>\n                            {\n                                expanded ? <IconButton onClick={() => onExpandChange(false)}>\n                                        <KeyboardArrowUp />\n                                    </IconButton> :\n                                    <IconButton onClick={() => onExpandChange(true)}>\n                                        <KeyboardArrowDown />\n                                    </IconButton>\n                            }\n                        </Grid>\n                    </Grid>\n                </Grid>\n                <Divider className={classes.divider} />\n                {\n                    (validationHasTriggeredRef.current && drawing.get('products').size > 0)\n                      ? expanded\n                        ? <Grid container={true} spacing={1} className={classes.productCardsContainer}>\n                            {state.items.size === 1\n                                ?   state.items.map((product, productIndex) => {\n                                    const gridSize = 12 / productCardsPerRow as GridSize || 4 as GridSize;\n                                    return ( <Grid\n                                        xs={gridSize}\n                                        item={true}\n                                        style={{padding: 4}}\n                                        key={productIndex}\n                                    >\n                                        <ProductCard\n                                            onClick={(e) => e.stopPropagation()}\n                                            drawing={drawing}\n                                            spec={spec}\n                                            product={product}\n                                            productIndex={productIndex}\n                                            disabledEdit={disabledEdit}\n                                            disabledEditTooltip={disabledEditTooltip}\n                                            isCompliant={productComplianceMap.get(product.get('id'))}\n                                            isUpdatingDrawing={isUpdatingDrawing}\n                                            setIsUpdatingDrawing={(value: boolean) => setIsUpdatingDrawing(value)}\n                                            editProduct={() => handleEditProduct(product, productIndex, handleAddProduct, {\n                                                dispatch,\n                                                drawing,\n                                                specId,\n                                            })}\n                                        />\n                                    </Grid>);\n                                    })\n                                :   <GridContextProvider onChange={handleReorderProducts}>\n                                    <Grid\n                                        style={{\n                                            width: '100%',\n                                            height: '100%'}}\n                                    >\n                                        <GridDropZone\n                                            id={drawing.get('id').toString()}\n                                            disableDrag={disabledEdit}\n                                            boxesPerRow={productCardsPerRow}\n                                            rowHeight={productRowHeight}\n                                            style={{ height: `${productRowHeight * Math.ceil(state.items.size / productCardsPerRow)}px`, width: '100%'}}\n                                        >\n                                            {state.items.map((product, productIndex) => {\n                                                const specProductId = product.get('specProductId');\n                                                return (\n                                                    <GridItem key={specProductId}>\n                                                        <div\n                                                            id={specProductId}\n                                                            style={{padding: 4}}\n                                                            className={disabledEdit ? classes.defaultCursor : classes.grabCursor}\n                                                        >\n                                                            <ProductCard\n                                                                onClick={(e) => e.stopPropagation()}\n                                                                drawing={drawing}\n                                                                spec={spec}\n                                                                product={product}\n                                                                productIndex={productIndex}\n                                                                key={productIndex}\n                                                                disabledEdit={disabledEdit}\n                                                                disabledEditTooltip={disabledEditTooltip}\n                                                                isCompliant={productComplianceMap.get(product.get('id'))}\n                                                                isUpdatingDrawing={isUpdatingDrawing}\n                                                                setIsUpdatingDrawing={(value: boolean) => setIsUpdatingDrawing(value)}\n                                                                editProduct={() => handleEditProduct(product, productIndex, handleAddProduct,{\n                                                                    dispatch,\n                                                                    drawing,\n                                                                    specId,\n                                                                })}\n                                                            />\n                                                        </div>\n                                                    </GridItem>\n                                                );\n                                            })}\n                                            <></>\n                                        </GridDropZone>\n                                    </Grid>\n                                </GridContextProvider>\n                            }\n                          </Grid>\n                        : <Grid container={true} alignItems='center' wrap='nowrap' className={classes.drawingSummaryContainer}>\n                            <Grid item={true} style={{ marginRight: '8px'}}>\n                                <Typography noWrap={true}>{t('Drawing.drawingSummary')}</Typography>\n                            </Grid>\n                            <Grid item={true} container={true} className={classes.drawingSummary}>\n                                {\n                                    drawing.get('products').map((product, _index) => {\n                                        const title =\n                                            <span>{t('Drawing.manufacturer')}: {product.get('brand')}<br/>{t('Drawing.productNumber')}: {product.get('productNumberClean')}\n                                                <br/>{t('Drawing.productCategory')}: {product.get('categoryName')}\n                                            </span>;\n                                        return (\n                                            <Grid\n                                                item={true}\n                                                key={_index}\n                                                style={{ padding: '0 10px' }}\n                                            >\n                                                <Tooltip\n                                                    title={title}\n                                                    style={{whiteSpace: 'pre-line'}}\n                                                >\n                                                    <span>\n                                                        <Image\n                                                            src={product.getIn(['file', 'images', 'main', 'fileId']) + `|fit:50,50` || ''}\n                                                            width='50px'\n                                                            aspectRatio={'100%'}\n                                                            fromService={true}\n                                                        />\n                                                    </span>\n                                                </Tooltip>\n                                            </Grid>\n                                        );\n                                    })\n                                }\n                            </Grid>\n                          </Grid>\n                      : <div style={{ margin: '14px'}}>\n                          <Tooltip title={disabledEditTooltip || ''}>\n                            <span>\n                              <Button className={classes.addProductButton} disabled={disabledEdit} onClick={() => handleAddProduct()}>\n                                  {t('Drawing.addProduct')}\n                              </Button>\n                            </span>\n                          </Tooltip>\n                        </div>\n                }\n                {\n                    expanded ?  <div style={{ margin: 8 }}>\n                        {\n                            validationHasTriggeredRef.current\n                                ? <Tooltip title={disabledEditTooltip || ''}>\n                                    <TextField\n                                      onClick={(e) => e.stopPropagation()}\n                                      name='note'\n                                      fullWidth={true}\n                                      label={t('specDrawing.drawingNoteLabel')}\n                                      disabled={disabledEdit}\n                                      onChange={handleChange}\n                                      value={state.note}\n                                      multiline={true}\n                                      size='small'\n                                      InputLabelProps={{\n                                          classes: {\n                                              disabled: classes.disabledTextFieldLabel\n                                          }\n                                      }}\n                                      InputProps={{\n                                          classes: {\n                                              disabled: classes.disabledTextFieldInput\n                                          },\n                                          endAdornment: (isGuestUser && !hideEndorsement) ? <AtsActionBlock style={{ color: 'inherit' }} /> : null\n                                      }}\n                                    />\n                                  </Tooltip>\n                                :   <Typography>{state.note}</Typography>\n                        }\n                    </div> : null\n                }\n            </Card>\n        </>\n    );\n}\n\nexport default React.memo(Drawing);","import { useEffect, useState, useRef, RefObject } from 'react';\n\nexport default function useIsOnScreen(ref: RefObject<HTMLElement>) {\n  const observerRef = useRef<IntersectionObserver | null>(null);\n  const [isOnScreen, setIsOnScreen] = useState(false);\n\n  useEffect(() => {\n    observerRef.current = new IntersectionObserver(([entry]) =>\n      setIsOnScreen(entry.isIntersecting)\n    );\n  }, []);\n\n  useEffect(() => {\n    observerRef.current.observe(ref.current);\n\n    return () => {\n      observerRef.current.disconnect();\n    };\n  }, [ref]);\n\n  return isOnScreen;\n}","import {createDraggableSpecId} from '../../../components/ProjectDetail/helpers';\nimport React from 'react';\nimport {Draggable} from 'react-beautiful-dnd';\nimport {Drawing, Spec} from '../../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\n\ninterface IDraggableDrawingProps {\n    draggableId?: string;\n    spec: IMap<Spec>;\n    drawing: IMap<Drawing>;\n    index: number;\n    style?: React.CSSProperties;\n}\nconst DraggableDrawing: React.FC<IDraggableDrawingProps> = ({\n    draggableId,\n    children,\n    spec,\n    drawing,\n    index,\n    style= {},\n}) => {\n    const specId = spec.get('id');\n    const drawingId = drawing.get('id');\n    const projectTitle = spec.get('projectTitle');\n    return (\n        <Draggable draggableId={draggableId ? draggableId : createDraggableSpecId(specId, drawingId, projectTitle)} index={index} isDragDisabled={true}>\n            {(draggableProvided) => {\n                return (\n                    <div ref={draggableProvided.innerRef} {...draggableProvided.draggableProps} style={{ ...draggableProvided.draggableProps.style, ...style, padding: '8px 0' }}>\n                        {children}\n                    </div>\n                );\n            }}\n        </Draggable>\n    );\n};\n\nexport default DraggableDrawing;","import React from 'react';\nimport {Checkbox, ListItem, ListItemIcon, Tooltip, Typography, useTheme} from '@material-ui/core';\nimport HeightIcon from '@material-ui/icons/Height';\nimport {DraggableProvided} from 'react-beautiful-dnd';\nimport {CSSProperties} from '@material-ui/styles';\nimport {AtsActionBlock} from '../../../components/AtsSvg/AtsActionBlock';\nimport {useTranslation} from 'react-i18next';\n\n\ninterface IDraggableListItemProps {\n    provided: DraggableProvided;\n    isDragging: boolean;\n    isDragDisabled?: boolean;\n    isDragLocked?: boolean;\n    style?: CSSProperties;\n    onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n    disabled: boolean;\n    checked: boolean;\n    label: string;\n    seq: number | string;\n}\nconst DraggableListItem: React.FC<IDraggableListItemProps> = ({\n    provided,\n    isDragging,\n    isDragDisabled = false,\n    isDragLocked = false,\n    style = {},\n    onClick,\n    disabled,\n    checked,\n    label,\n    seq,\n}) => {\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const [isHoveringOver, setIsHoveringOver] = React.useState(false);\n    return (\n        <div\n            ref={provided.innerRef}\n            {...provided.draggableProps}\n            {...provided.dragHandleProps}\n            style={{\n                backgroundColor: isDragging ? 'rgba(0, 0, 0, 0.04)' : 'transparent',\n                ...provided.draggableProps.style,\n                ...style,\n\n            }}\n        >\n            <ListItem\n                button={true}\n                onClick={onClick}\n                disabled={disabled}\n                style={{ padding: '0px 12px' }}\n            >\n                <ListItemIcon style={{ minWidth: 'auto' }}>\n                    <Checkbox\n                        color={'primary'}\n                        edge='start'\n                        checked={checked}\n                        tabIndex={-1}\n                        disableRipple={true}\n                    />\n                </ListItemIcon>\n                <div style={{\n                    flex: '1 1 auto',\n                    minWidth: 0,\n                    marginTop: '4px',\n                    marginBottom: '4px',\n                    marginRight: '12px',\n                }}>\n                    <Typography noWrap={true} variant='body2'>{label}</Typography>\n                    <Typography noWrap={true} variant='caption'>{`Seq.${seq}`}</Typography>\n                </div>\n                <div\n                    style={{\n                        width: 24,\n                        display: 'flex',\n                        justifyContent: 'center',\n                        alignItems: 'center',\n                        alignSelf: 'stretch',\n                    }}\n                    onMouseEnter={() => {\n                    setIsHoveringOver(true);\n                }} onMouseLeave={() => {\n                    setIsHoveringOver(false);\n                }}>\n                    {(isDragLocked && isHoveringOver) ? <Tooltip title={t('SpecDetail.disabledDraggableItemTooltip')}>\n                            <div>\n                                <AtsActionBlock\n                                    style={{\n                                        color: isDragLocked ? theme.palette.grey[300] : 'inherit'\n                                    }}\n                                />\n                            </div>\n                        </Tooltip>\n                        : !isDragDisabled ? <div>\n                            <HeightIcon style={{\n                                color: isDragLocked ? theme.palette.grey[300] : 'inherit',\n                                width: 24,\n                                height: 24\n                            }} />\n                        </div> : null\n                    }\n                </div>\n            </ListItem>\n        </div>\n    );\n};\n\nexport default DraggableListItem;","/* tslint:disable:no-shadowed-variable */\nimport { Spec } from '../../../models';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport React, { useCallback, useRef } from 'react';\nimport {\n  Box,\n  Button,\n  Checkbox,\n  Divider,\n  FormControlLabel,\n  Grid,\n  Input,\n  InputAdornment,\n  Tooltip,\n  Typography,\n  useTheme\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Theme } from '@material-ui/core/';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n  MassUpdateProjectSpecDetailConfigAction,\n  UpdateProjectSpecDetailConfigAction\n} from '../../../modules/ProjectModule/actions';\nimport { makeSelectProjectSpecConfig } from '../../../modules/ProjectModule/selectors';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport Drawing from './Drawing';\nimport {\n  checkIsDrawingChecked, createDraggableListItem, createDroppableShortSpecListId,\n} from '../../ProjectDetail/helpers';\nimport DroppableDrawingList from '../../../pages/SpecDetail/DroppableDrawingList/DroppableDrawingList';\nimport { useViewContext } from '../context/viewContext';\nimport DraggableDrawing from '../../../pages/SpecDetail/DraggableDrawing';\nimport { AutoSizer, List as VirtualizedList } from 'react-virtualized';\nimport { Draggable, Droppable } from 'react-beautiful-dnd';\nimport clsx from 'clsx';\nimport DraggableListItem from '../../../pages/SpecDetail/DraggableListItem';\nimport ReactDOM from 'react-dom';\nimport { makeSelectIdentityObject } from '../../../modules/AtsModule/selectors';\nimport { fromJS, List, Map as ImmuMap } from 'immutable';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../../modules/AccountModule/selectors';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { GEOLOCATION_ID } from '../../../constants';\nimport { getUncheckedUniqueProducts, mergeProductCompliance } from '../../../utils/productCompliance';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  drawingsBar: {\n    padding: theme.spacing(1.5, 2, 0.5, 3),\n  },\n  searchIcon: {\n    color: '#757575',\n  },\n  checkbox: {\n    width: 'fit-content'\n  },\n  leftRightLayout: {\n    display: 'flex',\n    flexGrow: 1,\n    flexBasis: 0,\n    overflow: 'hidden',\n    padding: theme.spacing(0.5, 0, 0, 3),\n    // gap: theme.spacing(2),\n  },\n  leftPanel: {\n    minWidth: 225,\n    width: '15%',\n    borderRight: `1px solid ${theme.palette.grey[400]}`,\n    overflowY: 'hidden',\n    overflowX: 'hidden',\n  },\n  flex: {\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  stretch: {\n    flex: 1,\n    overflow: 'hidden'\n  },\n  rightPanel: {\n    flex: 1,\n    overflow: 'auto',\n    padding: theme.spacing(0, 2),\n  },\n  list: {\n    width: '100%',\n    maxWidth: 360,\n    backgroundColor: theme.palette.background.paper,\n    padding: 0\n  },\n  drawingList: {\n    display: 'flex',\n    flexDirection: 'column',\n    gap: theme.spacing(2),\n    paddingTop: 0,\n    paddingBottom: 0,\n    paddingLeft: theme.spacing(2),\n    paddingRight: 0,\n    width: '100%',\n    backgroundColor: theme.palette.background.paper,\n  },\n  drawing: {\n    display: 'block',\n    boxSizing: 'border-box',\n    border: `1px solid ${theme.palette.grey[500]}`,\n    borderRadius: theme.shape.borderRadius,\n    padding: 0\n  },\n  input: {\n    width: 'fit-content',\n  },\n  actions: {\n    position: 'absolute',\n    right: 16,\n    whiteSpace: 'nowrap',\n  }\n}));\n\nfunction ProductGroupContent({\n  spec,\n  disabledEdit,\n  disabledEditTooltip,\n  onDeleteDrawing,\n  renderEmptySpecView,\n  renderAddDrawingButton,\n  isDragDisabled = false,\n  disableDraggableListItem = false,\n  lockDraggableListItem,\n  hideDrawingEndorsement = false\n}: {\n  spec: IMap<Spec>;\n  disabledEdit?: boolean;\n  disabledEditTooltip?: string;\n  renderEmptySpecView?: () => React.ReactNode;\n  onDeleteDrawing: (specId: number, drawingId: number) => void;\n  renderAddDrawingButton?: ({ fullMode, isReal }: { fullMode?: boolean, isReal?: boolean }) => React.ReactNode;\n  isDragDisabled?: boolean;\n  disableDraggableListItem?: boolean;\n  lockDraggableListItem?: boolean;\n  hideDrawingEndorsement?: boolean;\n}) {\n  const isGuestUser = !useSelector(makeSelectIdentityObject());\n  const { productSearchTerm, setProductSearchTerm } = useViewContext();\n  const { t } = useTranslation('translations');\n  const theme = useTheme();\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const atsApi = useAtsApi();\n  const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n  const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n  const drawingRefs = useRef(null);\n  const [hideActionBarButtonText, setHideActionBarButtonText] = React.useState(false);\n  const [productComplianceMap, setProductComplianceMap] = React.useState<ImmuMap<number, boolean>>(fromJS({}));\n\n  let actionBarContainerResizeObserver = null;\n  const actionBarContainerRef = useRef<HTMLDivElement>(null);\n  const searchInputRef = useRef<HTMLInputElement>(null);\n  const fakeActionButtonsContainerRef = useRef<HTMLDivElement>(null);\n\n  const isAi = spec?.get('isAi');\n  const specId = spec.get('id');\n  const drawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n  const specDetailConfig = projectSpecDetailConfig.get(specId);\n  const selectedDrawingsSize = specDetailConfig?.filter(checkIsDrawingChecked).count() || 0;\n  // const nonEmptyDrawingsCount = spec?.get('drawings')?.filter(drawing => drawing.get('products').size > 0).size || 0;\n  const drawingsHasProduct = drawings && drawings.filter((drawing) => drawing.get('products').size > 0);\n\n  const allSelected = selectedDrawingsSize !== 0 && drawingsHasProduct.every(drawing => {\n    return checkIsDrawingChecked(specDetailConfig.get(drawing.get('id')));\n  });\n\n  const hasSelectedDrawing = selectedDrawingsSize !== 0 && drawingsHasProduct.some(drawing => {\n    return checkIsDrawingChecked(specDetailConfig.get(drawing.get('id')));\n  });\n\n  const countryIdForProductComplianceCheck = isGuestUser ? -1 : (spec?.getIn(['address', 'country', 'id']) || loginUserOfficeLocation?.getIn(['country', 'id']) || -1);\n  React.useEffect(() => {\n    if (countryIdForProductComplianceCheck === GEOLOCATION_ID.canada) {\n      // only check products whose compliance hasn't already been resolved\n      const uniqueProductsList = getUncheckedUniqueProducts(spec, productComplianceMap);\n\n      if (uniqueProductsList.size > 0) {\n        // cancel this request if the spec changes (or the component unmounts) before it returns,\n        // so a stale response can't overwrite productComplianceMap for the current products\n        const controller = new AbortController();\n        (atsApi.callApi({\n          service: 'product',\n          endpoint: 'checkProductCompliance',\n          params: { type: 'nrcan' },\n          body: { products: uniqueProductsList.map((product) => product.toJS()).toArray() },\n          signal: controller.signal,\n        }) as any).then((res) => {\n          // compliance is an array whose index lines up with the products we sent; merge into\n          // the existing map (functional update) so previously-resolved products are preserved\n          const compliance = res?.payload?.product?.compliance;\n          if (!Array.isArray(compliance)) {\n            return;\n          }\n          setProductComplianceMap((prev) => mergeProductCompliance(prev, uniqueProductsList, compliance));\n        }).catch((err) => {\n          // a superseded request resolves to AbortError — leave the existing map untouched\n          if (err?.name === 'AbortError') {\n            return;\n          }\n        });\n\n        return () => {\n          controller.abort();\n        };\n      }\n    }\n  }, [spec?.get('modifiedDate')]);\n\n  function scrollToDrawing(drawingId: string) {\n    const drawing = getMap().get(drawingId);\n    if (drawing) {\n      drawing.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    }\n  }\n  function getMap() {\n    if (!drawingRefs.current) {\n      drawingRefs.current = new Map();\n    }\n    return drawingRefs.current;\n  }\n\n  const setupResizeObserver = () => {\n    if (!actionBarContainerRef.current) { return; }\n    actionBarContainerResizeObserver = new ResizeObserver(checkCollision);\n    actionBarContainerResizeObserver.observe(actionBarContainerRef.current);\n  };\n\n  const checkCollision = () => {\n    const aRect = searchInputRef.current?.getBoundingClientRect();\n    const fakeBRect = fakeActionButtonsContainerRef.current?.getBoundingClientRect();\n    const COLLIDE_PADDING = 12;\n\n    const aOverlapb = aRect?.right + COLLIDE_PADDING > fakeBRect?.left;\n\n    if (aOverlapb) {\n      setHideActionBarButtonText(true);\n    } else {\n      setHideActionBarButtonText(false);\n    }\n  };\n\n  React.useEffect(() => {\n    setupResizeObserver();\n    checkCollision();\n    return () => {\n      if (actionBarContainerResizeObserver) {\n        actionBarContainerResizeObserver.disconnect();\n      }\n      actionBarContainerResizeObserver = null;\n    };\n  }, []);\n\n  const rowRenderer = useCallback(\n    ({ index, key, style }) => {\n      const drawing = drawings.get(index);\n      if (!drawing) {\n        return null;\n      }\n      const drawingId = drawing.get('id');\n      const label = drawing.get('name');\n      const seq = drawing.get('order');\n      const checked = checkIsDrawingChecked(specDetailConfig?.get(drawingId));\n      const disabled = drawing.get('products').size === 0 || isAi;\n      const onClick = () => {\n        dispatch(new UpdateProjectSpecDetailConfigAction({\n          specId: spec.get('id'),\n          drawingId,\n          checked: !checked,\n        }));\n        scrollToDrawing(drawingId);\n      };\n      const draggableId = createDraggableListItem(specId, drawingId);\n      return (\n        <Draggable key={draggableId} draggableId={draggableId} index={index} isDragDisabled={isDragDisabled || productSearchTerm !== '' || isGuestUser}>\n          {(draggableProvided, snapshot) => {\n            return (\n              <DraggableListItem\n                provided={draggableProvided}\n                isDragging={snapshot.isDragging}\n                isDragLocked={lockDraggableListItem ?? isGuestUser}\n                isDragDisabled={disableDraggableListItem || productSearchTerm !== ''}\n                onClick={onClick}\n                checked={checked}\n                disabled={disabled}\n                label={label}\n                seq={seq}\n                style={style}\n              />\n            );\n          }}\n        </Draggable>\n      );\n    }, [drawings]);\n\n  return (\n    <>\n      <Box bgcolor={'#fff'} className={classes.drawingsBar} style={{ display: 'flex' }}>\n        <div style={{ display: 'flex', width: '15%', minWidth: 225 }}>\n          <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n            <span style={{ width: 'fit-content', marginLeft: 8 }}>\n              <FormControlLabel\n                control={\n                  <Checkbox\n                    color='primary'\n                    disabled={isAi || drawings.size === 0}\n                    checked={allSelected && hasSelectedDrawing}\n                    indeterminate={!allSelected && hasSelectedDrawing}\n                  />\n                }\n                label={<Typography variant='h6' component='span' style={{ marginRight: theme.spacing(1) }}>{t('ProductGroupContent.drawings')}</Typography>}\n                className={classes.checkbox}\n                onChange={(e, checked) => {\n                  const specsDrawingIds = spec && drawings.reduce((acc, drawing) => {\n                    if (drawing.get('products').size > 0) {\n                      return acc.update(specId, List(), list => list.push(drawing.get('id')));\n                    }\n                    return acc;\n                  }, fromJS({}) as ImmuMap<number, List<number>>);\n                  if (specsDrawingIds.get(specId)?.size > 0) {\n                    dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked }));\n                  }\n                }}\n              />\n            </span>\n          </Tooltip>\n        </div>\n        <Grid ref={actionBarContainerRef} container={true} justify='space-between' alignContent='center' wrap='nowrap' style={{ flex: 1 }}>\n          <Tooltip title={t('ProjectDetail.searchBarTooltip')}>\n            <Input\n              ref={searchInputRef}\n              onChange={(e) => {\n                const newValue = e.target.value;\n                setProductSearchTerm(newValue);\n              }}\n              placeholder={t('listPageToolbar.searchPlaceholder')}\n              value={productSearchTerm || ''}\n              endAdornment={\n                <InputAdornment position='end'>\n                  <SearchIcon fontSize='small' className={classes.searchIcon} />\n                </InputAdornment>\n              }\n              classes={{ input: classes.input }}\n              style={{\n                marginLeft: 16,\n              }}\n            />\n          </Tooltip>\n          <span className={classes.actions}>{renderAddDrawingButton?.({ fullMode: !hideActionBarButtonText, isReal: true })}</span>\n          {/* Fake action buttons container for collision calculation */}\n          <span className={classes.actions} ref={fakeActionButtonsContainerRef} style={{ visibility: 'hidden', pointerEvents: 'none' }}>{renderAddDrawingButton?.({ fullMode: true, isReal: false })}</span>\n        </Grid>\n      </Box>\n      <Box p={3} bgcolor={'#fff'} className={classes.leftRightLayout}>\n        <div\n          className={clsx({\n            [classes.leftPanel]: true,\n            [classes.flex]: true\n          })}\n        >\n          <Droppable\n            droppableId={createDroppableShortSpecListId(specId)}\n            mode='virtual'\n            renderClone={(provided, snapshot, rubric) => {\n              const drawing = drawings.get(rubric.source.index);\n              const drawingId = drawing.get('id');\n              const label = drawing.get('name');\n              const seq = drawing.get('order');\n              const checked = checkIsDrawingChecked(specDetailConfig?.get(drawingId));\n              const disabled = drawing.get('products').size === 0 || isAi;\n              const onClick = () => {\n                dispatch(new UpdateProjectSpecDetailConfigAction({\n                  specId: spec.get('id'),\n                  drawingId,\n                  checked: !checked,\n                }));\n                scrollToDrawing(drawingId);\n              };\n              return (\n                <DraggableListItem\n                  provided={provided}\n                  isDragging={snapshot.isDragging}\n                  isDragLocked={lockDraggableListItem ?? isGuestUser}\n                  isDragDisabled={disableDraggableListItem || productSearchTerm !== ''}\n                  onClick={onClick}\n                  disabled={disabled}\n                  checked={checked}\n                  label={label}\n                  seq={seq}\n                />\n              );\n            }}\n          >\n            {\n              (droppableProvided, snapshot) => {\n                return (\n                  <div style={{ flex: 1 }}>\n                    <AutoSizer disabledWidth={true}>\n                      {\n                        ({ width, height }) => {\n                          const itemCount = snapshot.isUsingPlaceholder\n                            ? drawings.size + 1\n                            : drawings.size;\n                          return (\n                            <VirtualizedList\n                              height={height}\n                              rowCount={itemCount}\n                              rowHeight={60}\n                              width={width}\n                              ref={(ref) => {\n                                // react-virtualized has no way to get the list's ref that I can so\n                                // So we use the `ReactDOM.findDOMNode(ref)` escape hatch to get the ref\n                                if (ref) {\n                                  // eslint-disable-next-line react/no-find-dom-node\n                                  const whatHasMyLifeComeTo = ReactDOM.findDOMNode(ref);\n                                  if (whatHasMyLifeComeTo instanceof HTMLElement) {\n                                    droppableProvided.innerRef(whatHasMyLifeComeTo);\n                                  }\n                                }\n                              }}\n                              style={{\n                                backgroundColor: snapshot.isDraggingOver ? '#F8F1E8' : 'transparent',\n                                border: snapshot.isDraggingOver ? `2px dashed ${theme.palette.primary[400]}` : 'none',\n                              }}\n                              overscanRowCount={10}\n                              rowRenderer={rowRenderer}\n                            />\n                          );\n                        }\n                      }\n                    </AutoSizer>\n                  </div>\n                );\n              }\n            }\n          </Droppable>\n        </div>\n        <div className={classes.rightPanel}>\n          {\n            drawings.size === 0\n              ? renderEmptySpecView?.()\n              : <DroppableDrawingList spec={spec}>\n                {drawings.map((drawing, index) => {\n                  const drawingId = drawing.get('id');\n                  const drawingConfig = specDetailConfig?.get(drawingId);\n                  const expanded = drawingConfig?.get('expanded') ?? false;\n                  return (\n                    <DraggableDrawing key={drawingId} spec={spec} drawing={drawing} index={index}>\n                      <div ref={(node) => {\n                        const map = getMap();\n                        if (node) {\n                          map.set(drawingId, node);\n                        } else {\n                          map.delete(drawingId);\n                        }\n                      }}\n                      >\n                        <Drawing\n                          hideEndorsement={hideDrawingEndorsement}\n                          spec={spec}\n                          drawing={drawing}\n                          disabledEdit={disabledEdit}\n                          disabledEditTooltip={disabledEditTooltip}\n                          expanded={expanded}\n                          productComplianceMap={productComplianceMap}\n                          onExpandChange={(expanded: boolean) => {\n                            dispatch(new UpdateProjectSpecDetailConfigAction({\n                              specId: spec.get('id'),\n                              drawingId,\n                              expanded\n                            }));\n                          }}\n                          checked={checkIsDrawingChecked(drawingConfig)}\n                          onCheck={(newValue) => {\n                            dispatch(new UpdateProjectSpecDetailConfigAction({\n                              specId,\n                              drawingId: drawing.get('id'),\n                              checked: newValue\n                            }));\n                          }}\n                          onDeleteDrawing={onDeleteDrawing}\n                        />\n                      </div>\n                    </DraggableDrawing>\n                  );\n                })}\n              </DroppableDrawingList>\n          }\n        </div>\n      </Box>\n    </>\n  );\n}\n\nexport default ProductGroupContent;","import { List, Map as ImmuMap } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\n\nexport type ProductComplianceMap = ImmuMap<number, boolean>;\n\n/**\n * Collect the unique products across all of a spec's drawings whose compliance\n * has not already been resolved (i.e. not already present in `alreadyChecked`).\n *\n * The returned list order is stable so that a positional compliance response can\n * be matched back to each product by index (see `mergeProductCompliance`).\n */\nexport const getUncheckedUniqueProducts = (\n  spec: IMap<any>,\n  alreadyChecked: ProductComplianceMap,\n): List<IMap<any>> => {\n  const uniqueProductsMap = spec?.get('drawings')?.reduce(\n    (acc, drawing) =>\n      drawing.get('products').reduce((productAcc, product) => {\n        const id = product.get('id');\n        if (alreadyChecked.has(id) || productAcc.has(id)) {\n          return productAcc;\n        }\n        return productAcc.set(id, product);\n      }, acc),\n    ImmuMap<number, IMap<any>>(),\n  );\n\n  return uniqueProductsMap?.toList() || List();\n};\n\n/**\n * Merge a positional compliance response (an array whose index lines up with\n * `products`) into the existing compliance map. The existing map is used as the\n * seed so previously-resolved products are preserved rather than dropped.\n */\nexport const mergeProductCompliance = (\n  existing: ProductComplianceMap,\n  products: List<IMap<any>>,\n  compliance: boolean[],\n): ProductComplianceMap =>\n  products.reduce(\n    (acc, product, index) => acc.set(product.get('id'), compliance[index]),\n    existing,\n  );\n","import { isFloatBetween } from '../../../validators';\nimport {\n  convertMeasurementToUnits,\n  getMeasurementPlaceholder,\n  MEASUREMENT_DECIMAL_LIMITS,\n} from '../../../constants/units';\nimport { AIRFLOW_VALIDATOR } from '../ventilatorToolConstants';\nimport { UNIT_LABEL_KEYS } from '../../../constants/units';\n\nexport enum PsychrometricsMode {\n  leavingTemps = 'leavingTemps',\n  efficiency = 'efficiency',\n}\n\nexport enum PsychrometricsSeason {\n  summer = 'summer',\n  winter = 'winter',\n}\n\nexport type PsychrometricsUnits = 'imperial' | 'metric';\n\nexport type PsychrometricsFieldKey = 'outdoorDb' | 'outdoorWb' | 'returnDb' | 'returnRh' | 'leavingTemp';\n\nexport type PsychrometricsFieldUnit = 'temperature' | 'percent';\n\nexport interface IPsychrometricsField {\n  key: PsychrometricsFieldKey;\n  requestKey: string;\n  labelKey: string;\n  unit: PsychrometricsFieldUnit;\n  required: boolean;\n}\n\nexport interface IPsychrometricsSeasonValues {\n  outdoorDb: string;\n  outdoorWb: string;\n  returnDb: string;\n  returnRh: string;\n  leavingTemp: string;\n  effectiveness: string;\n}\n\nexport interface IPsychrometricsResult {\n  leavingAirTemperature?: number;\n  minimumRequiredEffectivenessPct?: number;\n}\n\nexport interface IPsychrometricsRequestArgs {\n  mode: PsychrometricsMode;\n  units: PsychrometricsUnits;\n  airflow: string;\n  seasonValues: Record<PsychrometricsSeason, IPsychrometricsSeasonValues>;\n}\n\nexport const PSYCHROMETRICS_DEBOUNCE_MS = 500;\n// the endpoint answers with a 400 when the inputs cannot produce a result\nexport const BAD_REQUEST_CODE = 400;\nexport const DEFAULT_EFFECTIVENESS = '70.0';\nexport const MIN_EFFECTIVENESS = 0;\nexport const MAX_EFFECTIVENESS = 100;\nexport const EFFECTIVENESS_STEP = 1;\nexport const EFFECTIVENESS_DECIMALS = 1;\nexport const TEMPERATURE_MIN = -200;\nexport const TEMPERATURE_MAX = 500;\nexport const EFFECTIVENESS_REQUEST_KEY = 'targetEffectivenessPct';\n\n// the endpoint tells the two calculations apart through its type param\nexport const PSYCHROMETRICS_MODE_TYPES: Record<PsychrometricsMode, string> = {\n  [PsychrometricsMode.leavingTemps]: 'leaving-air',\n  [PsychrometricsMode.efficiency]: 'effectiveness',\n};\n\nexport const RESULT_KEYS: Record<PsychrometricsMode, keyof IPsychrometricsResult> = {\n  [PsychrometricsMode.leavingTemps]: 'leavingAirTemperature',\n  [PsychrometricsMode.efficiency]: 'minimumRequiredEffectivenessPct',\n};\n\nexport type PsychrometricsPaletteColor = 'primary' | 'secondary';\n\n// each season is themed so that whitelabels get their own colours\nexport const SEASON_PALETTE_COLORS: Record<PsychrometricsSeason, PsychrometricsPaletteColor> = {\n  [PsychrometricsSeason.summer]: 'primary',\n  [PsychrometricsSeason.winter]: 'secondary',\n};\n\nexport const PSYCHROMETRICS_SEASONS: PsychrometricsSeason[] = [\n  PsychrometricsSeason.summer,\n  PsychrometricsSeason.winter,\n];\n\nexport const PSYCHROMETRICS_UNIT_OPTIONS = [\n  { value: 'imperial' as PsychrometricsUnits, labelKey: UNIT_LABEL_KEYS.imperial },\n  { value: 'metric' as PsychrometricsUnits, labelKey: UNIT_LABEL_KEYS.metric },\n];\n\nexport const PSYCHROMETRICS_MODE_OPTIONS = [\n  {\n    value: PsychrometricsMode.leavingTemps,\n    labelKey: 'psychrometricsAnalysisModal.modeA.tabLabel',\n    descriptionKey: 'psychrometricsAnalysisModal.modeA.description',\n  },\n  {\n    value: PsychrometricsMode.efficiency,\n    labelKey: 'psychrometricsAnalysisModal.modeB.tabLabel',\n    descriptionKey: 'psychrometricsAnalysisModal.modeB.description',\n  },\n];\n\nexport const DEFAULT_PSYCHROMETRICS_SEASON_VALUES: IPsychrometricsSeasonValues = {\n  outdoorDb: '',\n  outdoorWb: '',\n  returnDb: '',\n  returnRh: '',\n  leavingTemp: '',\n  effectiveness: DEFAULT_EFFECTIVENESS,\n};\n\nexport const MODE_FIELDS: Record<PsychrometricsMode, IPsychrometricsField[]> = {\n  [PsychrometricsMode.leavingTemps]: [\n    { key: 'outdoorDb', requestKey: 'outdoorDryBulb', labelKey: 'psychrometricsAnalysisModal.fields.outdoorDb', unit: 'temperature', required: true },\n    { key: 'outdoorWb', requestKey: 'outdoorWetBulb', labelKey: 'psychrometricsAnalysisModal.fields.outdoorWb', unit: 'temperature', required: false },\n    { key: 'returnDb', requestKey: 'returnDryBulb', labelKey: 'psychrometricsAnalysisModal.fields.returnDb', unit: 'temperature', required: true },\n    { key: 'returnRh', requestKey: 'returnRelativeHumidityPct', labelKey: 'psychrometricsAnalysisModal.fields.returnRh', unit: 'percent', required: false },\n  ],\n  [PsychrometricsMode.efficiency]: [\n    { key: 'outdoorDb', requestKey: 'outdoorDryBulb', labelKey: 'psychrometricsAnalysisModal.fields.outdoorDb', unit: 'temperature', required: true },\n    { key: 'outdoorWb', requestKey: 'outdoorWetBulb', labelKey: 'psychrometricsAnalysisModal.fields.outdoorWb', unit: 'temperature', required: false },\n    { key: 'leavingTemp', requestKey: 'leavingDryBulb', labelKey: 'psychrometricsAnalysisModal.fields.leavingTemp', unit: 'temperature', required: true },\n    { key: 'returnDb', requestKey: 'returnDryBulb', labelKey: 'psychrometricsAnalysisModal.fields.returnDb', unit: 'temperature', required: true },\n    { key: 'returnRh', requestKey: 'returnRelativeHumidityPct', labelKey: 'psychrometricsAnalysisModal.fields.returnRh', unit: 'percent', required: false },\n  ],\n};\n\nexport const OUTDOOR_TEMPERATURE_FIELD_KEYS: PsychrometricsFieldKey[] = ['outdoorDb', 'outdoorWb'];\n\nexport const TEMPERATURE_FIELD_KEYS: PsychrometricsFieldKey[] = PSYCHROMETRICS_MODE_OPTIONS.reduce(\n  (keys: PsychrometricsFieldKey[], option) => keys.concat(\n    MODE_FIELDS[option.value]\n      .filter((field) => field.unit === 'temperature' && keys.indexOf(field.key) === -1)\n      .map((field) => field.key),\n  ),\n  [],\n);\n\nexport const convertSeasonValuesToUnits = (\n  values: IPsychrometricsSeasonValues,\n  units: PsychrometricsUnits,\n): IPsychrometricsSeasonValues => TEMPERATURE_FIELD_KEYS.reduce((converted, key) => ({\n  ...converted,\n  [key]: convertMeasurementToUnits(values[key], 'temperature', units),\n}), values);\n\nexport const TEMPERATURE_VALIDATOR = isFloatBetween(TEMPERATURE_MIN, TEMPERATURE_MAX, MEASUREMENT_DECIMAL_LIMITS.temperature);\nexport const PERCENT_VALIDATOR = isFloatBetween(MIN_EFFECTIVENESS, MAX_EFFECTIVENESS, MEASUREMENT_DECIMAL_LIMITS.percent);\n\nexport const AIRFLOW_PLACEHOLDER = getMeasurementPlaceholder('airflow');\nexport const PSYCHROMETRICS_PLACEHOLDERS: Record<PsychrometricsFieldUnit, string> = {\n  temperature: getMeasurementPlaceholder('temperature'),\n  percent: getMeasurementPlaceholder('percent'),\n};\n\nexport const getFieldValidator = (unit: PsychrometricsFieldUnit) => (\n  unit === 'percent' ? PERCENT_VALIDATOR : TEMPERATURE_VALIDATOR\n);\n\nexport const isBlank = (value: string) => String(value == null ? '' : value).trim() === '';\n\nexport const getAirflowError = (airflow: string) => AIRFLOW_VALIDATOR(airflow);\n\nexport const getSeasonFieldErrors = (\n  mode: PsychrometricsMode,\n  values: IPsychrometricsSeasonValues,\n): Partial<Record<PsychrometricsFieldKey, string>> => {\n  return MODE_FIELDS[mode].reduce((errors, field) => {\n    const error = getFieldValidator(field.unit)(values[field.key]);\n    return error ? { ...errors, [field.key]: error } : errors;\n  }, {});\n};\n\nexport const getEffectivenessError = (mode: PsychrometricsMode, values: IPsychrometricsSeasonValues) => {\n  if (mode !== PsychrometricsMode.leavingTemps) {\n    return undefined;\n  }\n  return isBlank(values.effectiveness) ? undefined : PERCENT_VALIDATOR(values.effectiveness);\n};\n\nexport const isWetBulbAboveDryBulb = (values: IPsychrometricsSeasonValues): boolean => {\n  if (isBlank(values.outdoorDb) || isBlank(values.outdoorWb)) {\n    return false;\n  }\n  // while either value is invalid on its own, that error is the one worth showing\n  if (TEMPERATURE_VALIDATOR(values.outdoorDb) != null || TEMPERATURE_VALIDATOR(values.outdoorWb) != null) {\n    return false;\n  }\n  return Number(values.outdoorWb) > Number(values.outdoorDb);\n};\n\n// a season can only be calculated when the airflow, its required fields and its effectiveness are all filled in and valid\nexport const canCalculateSeason = ({ mode, airflow, values }: {\n  mode: PsychrometricsMode,\n  airflow: string,\n  values: IPsychrometricsSeasonValues,\n}): boolean => {\n  if (isBlank(airflow) || getAirflowError(airflow) != null) {\n    return false;\n  }\n  if (mode === PsychrometricsMode.leavingTemps && (isBlank(values.effectiveness) || getEffectivenessError(mode, values) != null)) {\n    return false;\n  }\n\n  const fieldErrors = getSeasonFieldErrors(mode, values);\n  if (Object.keys(fieldErrors).length !== 0 || isWetBulbAboveDryBulb(values)) {\n    return false;\n  }\n\n  return MODE_FIELDS[mode].every((field) => !field.required || !isBlank(values[field.key]));\n};\n\n// string based so that the extra decimals are dropped without any floating point surprises\nconst truncateToOneDecimal = (value: number): string => {\n  const [whole, decimals] = value.toFixed(EFFECTIVENESS_DECIMALS + 6).split('.');\n  return `${whole}.${decimals.charAt(0)}`;\n};\n\nexport const clampEffectiveness = (value: string): string => {\n  const parsed = Number(value);\n\n  if (isBlank(value) || isNaN(parsed)) {\n    return DEFAULT_EFFECTIVENESS;\n  }\n  if (parsed > MAX_EFFECTIVENESS) {\n    return MAX_EFFECTIVENESS.toFixed(EFFECTIVENESS_DECIMALS);\n  }\n  if (parsed < MIN_EFFECTIVENESS) {\n    return MIN_EFFECTIVENESS.toFixed(EFFECTIVENESS_DECIMALS);\n  }\n  return truncateToOneDecimal(parsed);\n};\n\nexport const toEffectivenessNumber = (value: string): number => {\n  const parsed = Number(value);\n  if (isBlank(value) || isNaN(parsed)) {\n    return Number(DEFAULT_EFFECTIVENESS);\n  }\n  return Math.min(Math.max(parsed, MIN_EFFECTIVENESS), MAX_EFFECTIVENESS);\n};\n\nexport const getCalculableSeasons = ({ mode, airflow, seasonValues }: IPsychrometricsRequestArgs): PsychrometricsSeason[] => (\n  PSYCHROMETRICS_SEASONS.filter((season) => canCalculateSeason({ mode, airflow, values: seasonValues[season] }))\n);\n\n// a single request carries both seasons - only the seasons that are ready to be calculated are sent\nexport const buildCalculationBody = ({ mode, units, airflow, seasonValues, seasons }: IPsychrometricsRequestArgs & {\n  seasons: PsychrometricsSeason[],\n}) => {\n  const body: any = {\n    units,\n    airflow: Number(airflow),\n  };\n\n  seasons.forEach((season) => {\n    const values = seasonValues[season];\n    const seasonBody: any = {};\n\n    MODE_FIELDS[mode].forEach((field) => {\n      if (!isBlank(values[field.key])) {\n        seasonBody[field.requestKey] = Number(values[field.key]);\n      }\n    });\n\n    if (mode === PsychrometricsMode.leavingTemps) {\n      seasonBody[EFFECTIVENESS_REQUEST_KEY] = toEffectivenessNumber(values.effectiveness);\n    }\n\n    body[season] = seasonBody;\n  });\n\n  return body;\n};\n\n// results are shown with at most one decimal, so 23.0 reads as 23\nexport const formatResultValue = (value: number): string => String(Number(value.toFixed(EFFECTIVENESS_DECIMALS)));\n\nexport const parsePsychrometricsResults = (response: any, mode: PsychrometricsMode): Record<PsychrometricsSeason, IPsychrometricsResult> => {\n  const results = response?.payload?.product?.results;\n  const resultKey = RESULT_KEYS[mode];\n\n  return PSYCHROMETRICS_SEASONS.reduce((parsed, season) => {\n    const value = results?.[season]?.[resultKey];\n\n    return {\n      ...parsed,\n      [season]: (value == null || isNaN(Number(value))) ? null : { [resultKey]: Number(value) },\n    };\n  }, {}) as Record<PsychrometricsSeason, IPsychrometricsResult>;\n};\n","export default __webpack_public_path__ + \"static/media/bariatricIcon.591edbe9.svg\";","export default __webpack_public_path__ + \"static/media/childHeightIcon.ef8e1e33.svg\";","import React from 'react';\nimport {\n  Grid,\n  Switch,\n  Tooltip,\n} from '@material-ui/core';\nimport barrierFreeIcon from '../../images/barrierFreeIcon.svg';\n\ninterface IBarrierFreeButtonProps {\n  toolTipTitle: string;\n  buttonText: string;\n  checked: boolean;\n  onChange: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n  value: boolean;\n  disabled: boolean;\n  className?: string;\n}\nconst BarrierFreeButton: React.FC<IBarrierFreeButtonProps> =  ({\n  toolTipTitle,\n  checked,\n  onChange,\n  value,\n  disabled,\n  className\n}) => {\n  return (\n    <Tooltip\n      title={toolTipTitle}\n    >\n      <Grid\n        container={true}\n        style={{width: 'auto', marginRight: 24}}\n        alignItems='center'\n        className={className ? className : null}\n      >\n        <img src={barrierFreeIcon} alt='ADA certified logo'/>\n        <Switch\n          checked={checked}\n          onChange={onChange}\n          value={value}\n          disabled={disabled}\n          inputProps={{ 'aria-label': 'ADA toggle' }}\n        />\n      </Grid>\n    </Tooltip>\n  );\n};\n\nexport default BarrierFreeButton;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import { fromJS } from 'immutable';\nimport { SIZER_ID, SPEC_TOOL_ID } from '../../constants';\n\nexport const APP_CATEGORIES_MAP = fromJS({\n  [SPEC_TOOL_ID]: {\n    byId: {\n      '120': {\n        name: 'Water Heater',\n      }\n    },\n  },\n  [SIZER_ID]: {\n    byId: {\n      '120': {\n        name: 'Water Heater',\n      }\n    },\n    default: {\n      '120': {\n        name: 'Water Heater',\n      }\n    }\n  },\n});","export type MeasurementUnits = 'imperial' | 'metric';\n\nexport type Measurement = 'airflow' | 'temperature' | 'pressure' | 'percent';\n\n// the unit labels and symbols live in the shared units block of the app translations,\n// so every tool that offers an imperial/metric switch reads the same strings\nexport const UNIT_LABEL_KEYS: Record<MeasurementUnits, string> = {\n  imperial: 'units.imperial',\n  metric: 'units.metric',\n};\n\nexport const UNIT_SYMBOL_KEYS: Record<MeasurementUnits, { airflow: string, temperature: string }> = {\n  imperial: { airflow: 'units.cfm', temperature: 'units.fahrenheit' },\n  metric: { airflow: 'units.litersPerSecond', temperature: 'units.celsius' },\n};\n\nexport const PERCENT_UNIT_KEY = 'units.percentage';\n\n// the precision each measurement is entered with\nexport const MEASUREMENT_DECIMAL_LIMITS: Record<Measurement, number> = {\n  airflow: 3,\n  temperature: 3,\n  pressure: 3,\n  percent: 1,\n};\n\nexport const CFM_IN_LITERS_PER_SECOND = 0.4719474432;\nexport const PA_IN_INCH_WATER_GAUGE = 249.0889083;\n\n// each converter returns the value expressed in the unit system named by the key\nconst UNIT_CONVERTERS: Record<Measurement, Record<MeasurementUnits, (value: number) => number>> = {\n  airflow: {\n    imperial: (value) => value / CFM_IN_LITERS_PER_SECOND,\n    metric: (value) => value * CFM_IN_LITERS_PER_SECOND,\n  },\n  temperature: {\n    imperial: (value) => (value * 9 / 5) + 32,\n    metric: (value) => (value - 32) * 5 / 9,\n  },\n  pressure: {\n    imperial: (value) => value / PA_IN_INCH_WATER_GAUGE,\n    metric: (value) => value * PA_IN_INCH_WATER_GAUGE,\n  },\n  // a percentage reads the same in both systems\n  percent: {\n    imperial: (value) => value,\n    metric: (value) => value,\n  },\n};\n\n// re-expresses a typed value in the given unit system, rounded to the precision that measurement accepts.\n// anything that is not a number is left exactly as the user typed it.\nexport const convertMeasurementToUnits = (\n  value: string,\n  measurement: Measurement,\n  units: MeasurementUnits,\n): string => {\n  if (value == null || String(value).trim() === '' || isNaN(Number(value))) {\n    return value;\n  }\n\n  const converted = UNIT_CONVERTERS[measurement][units](Number(value));\n  return String(Number(converted.toFixed(MEASUREMENT_DECIMAL_LIMITS[measurement])));\n};\n\n// hints at the precision the input accepts, e.g. 0.000\nexport const getMeasurementPlaceholder = (measurement: Measurement): string => (\n  (0).toFixed(MEASUREMENT_DECIMAL_LIMITS[measurement])\n);\n","import {\n  convertMeasurementToUnits,\n  getMeasurementPlaceholder,\n  Measurement,\n  MeasurementUnits,\n  UNIT_LABEL_KEYS,\n} from '../../../constants/units';\n\nexport const DEFROST_OPTIONS = [\n  { value: 'none', labelKey: 'ventilatorFilterModal.defrostOptions.none' },\n  { value: 'recirculation', labelKey: 'ventilatorFilterModal.defrostOptions.recirculation' },\n  { value: 'fan', labelKey: 'ventilatorFilterModal.defrostOptions.fan' },\n  { value: 'face and bypass', labelKey: 'ventilatorFilterModal.defrostOptions.faceAndBypass' },\n  { value: 'timed fan', labelKey: 'ventilatorFilterModal.defrostOptions.timedFan' },\n  { value: 'face and bypass with economizer', labelKey: 'ventilatorFilterModal.defrostOptions.faceAndBypassWithEconomizer' },\n];\n\nexport const UNIT_OPTIONS = [\n  { value: 'imperial', labelKey: UNIT_LABEL_KEYS.imperial },\n  { value: 'metric', labelKey: UNIT_LABEL_KEYS.metric },\n];\n\nexport type VentilatorFilterFieldKey = 'supplyAirflow' | 'supplyStaticPressure' | 'exhaustAirflow' | 'exhaustStaticPressure';\n\n// what each input measures, which decides how it is validated, hinted and converted\nexport const VENTILATOR_FIELD_MEASUREMENTS: Record<VentilatorFilterFieldKey, Measurement> = {\n  supplyAirflow: 'airflow',\n  supplyStaticPressure: 'pressure',\n  exhaustAirflow: 'airflow',\n  exhaustStaticPressure: 'pressure',\n};\n\nexport const VENTILATOR_FIELD_KEYS = Object.keys(VENTILATOR_FIELD_MEASUREMENTS) as VentilatorFilterFieldKey[];\n\nexport interface IVentilatorFilterFormValues {\n  defrostType: string;\n  units: MeasurementUnits;\n  supplyAirflow: string;\n  supplyStaticPressure: string;\n  exhaustAirflow: string;\n  exhaustStaticPressure: string;\n}\n\nexport const DEFAULT_VENTILATOR_FILTER_VALUES: IVentilatorFilterFormValues = {\n  defrostType: 'none',\n  units: 'imperial' as MeasurementUnits,\n  supplyAirflow: '',\n  supplyStaticPressure: '',\n  exhaustAirflow: '',\n  exhaustStaticPressure: '',\n};\n\nexport const VENTILATOR_FILTER_PLACEHOLDERS: Record<VentilatorFilterFieldKey, string> = VENTILATOR_FIELD_KEYS.reduce(\n  (placeholders, key) => ({\n    ...placeholders,\n    [key]: getMeasurementPlaceholder(VENTILATOR_FIELD_MEASUREMENTS[key]),\n  }),\n  {},\n) as Record<VentilatorFilterFieldKey, string>;\n\n// switching the toggle keeps the conditions the user entered, expressed in the unit system they picked\nexport const convertVentilatorFilterValuesToUnits = (\n  values: IVentilatorFilterFormValues,\n  units: MeasurementUnits,\n): IVentilatorFilterFormValues => VENTILATOR_FIELD_KEYS.reduce((converted, key) => ({\n  ...converted,\n  [key]: convertMeasurementToUnits(values[key], VENTILATOR_FIELD_MEASUREMENTS[key], units),\n}), values);\n","import { isNonNegativeFloatSmallerThan } from '../../validators';\nimport { MEASUREMENT_DECIMAL_LIMITS, MeasurementUnits, PA_IN_INCH_WATER_GAUGE } from '../../constants/units';\n\n// input ranges shared by the ventilator category tools, which ask for the same airflow and pressure figures\nexport const AIRFLOW_MAX = 100000;\nexport const AIRFLOW_VALIDATOR = isNonNegativeFloatSmallerThan(AIRFLOW_MAX, MEASUREMENT_DECIMAL_LIMITS.airflow);\n\nexport const PRESSURE_MAX_IN_WG = 100;\n\n// the same physical ceiling, expressed in the unit system the value is entered in\nexport const PRESSURE_VALIDATORS: Record<MeasurementUnits, (value: any) => string | undefined> = {\n  imperial: isNonNegativeFloatSmallerThan(PRESSURE_MAX_IN_WG, MEASUREMENT_DECIMAL_LIMITS.pressure),\n  metric: isNonNegativeFloatSmallerThan(PRESSURE_MAX_IN_WG * PA_IN_INCH_WATER_GAUGE, MEASUREMENT_DECIMAL_LIMITS.pressure),\n};\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  IconButton,\n  useTheme,\n  Typography,\n  DialogActions,\n  Button,\n  Stepper,\n  Step,\n  StepLabel,\n  StepContent,\n  Radio,\n  RadioGroup,\n  FormControlLabel,\n  TextField,\n  InputAdornment,\n} from '@material-ui/core';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { makeStyles } from '@material-ui/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ControlledModal } from '../../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction, SetSnackbarOpenAction } from '../../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponent } from '../../../modules/ApplicationModule/selectors';\nimport { AtsSvgBuildSizer } from '../../../components/AtsSvg';\nimport { makeSelectIsAtsSpecTool } from '../../../modules/AtsModule/selectors';\nimport {\n  convertVentilatorFilterValuesToUnits,\n  DEFROST_OPTIONS,\n  UNIT_OPTIONS,\n  DEFAULT_VENTILATOR_FILTER_VALUES,\n  VENTILATOR_FIELD_MEASUREMENTS,\n  VENTILATOR_FILTER_PLACEHOLDERS,\n  IVentilatorFilterFormValues,\n  VentilatorFilterFieldKey,\n} from './constants';\nimport { MeasurementUnits, UNIT_SYMBOL_KEYS } from '../../../constants/units';\nimport { AIRFLOW_VALIDATOR, PRESSURE_VALIDATORS } from '../ventilatorToolConstants';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { VENTILATOR_CATEGORY_ID } from '../../ProductSelectionControl';\nimport { fromJS } from 'immutable';\nimport { SetCategorySpecificSeriesFiltersAction, UseActionAndSearchWithFilterAction, SetSeriesSpecificInitSelectionsAction } from '../../../modules/ProductModule/actions';\nimport { makeSelectSkipRuleEngine } from '../../../modules/ProductModule/selectors';\nimport { CategorySpecificSeriesFilterKey } from '../../../modules/ProductModule/constants';\n\n// the pressure ceiling is the same physical limit either way, so the validator depends on the unit in use\nconst getFieldValidator = (field: VentilatorFilterFieldKey, units: MeasurementUnits) => (\n  VENTILATOR_FIELD_MEASUREMENTS[field] === 'pressure' ? PRESSURE_VALIDATORS[units] : AIRFLOW_VALIDATOR\n);\n\ninterface IVentilatorFilterModalComponentProps {\n}\n\ninterface IVentilatorFilterModalProps extends IVentilatorFilterModalComponentProps {\n}\n\ntype VentilatorFilterModalProps = IVentilatorFilterModalProps;\n\ninterface IStyleProps {\n  coreColor: 'primary' | 'secondary';\n}\n\nconst useStyles = makeStyles<Theme, IStyleProps>((theme: Theme) => ({\n  paper: {\n    width: 1060,\n    maxWidth: '80%',\n    padding: 16,\n    maxHeight: '85%',\n    overflow: 'hidden',\n  },\n  closeIcon: {\n    position: 'absolute',\n    right: theme.spacing(-0.5),\n    top: theme.spacing(-0.5)\n  },\n  headerIconContainer: {\n    width: 36,\n    height: 36,\n  },\n  headerContainer: {\n    margin: theme.spacing(1, 0, 2),\n    padding: theme.spacing(0, 6),\n  },\n  headerTitle: {\n    marginLeft: theme.spacing(1.5),\n  },\n  stepper: {\n    padding: theme.spacing(2, 0),\n    backgroundColor: 'transparent',\n  },\n  stepLabel: {\n    '& .MuiStepLabel-label': {\n      fontSize: '1rem',\n    },\n  },\n  stepIconActive: {\n    color: ({ coreColor }) => `${theme.palette[coreColor].main} !important`,\n  },\n  stepIconCompleted: {\n    color: ({ coreColor }) => `${theme.palette[coreColor].main} !important`,\n  },\n  stepContent: {\n    paddingTop: theme.spacing(1),\n  },\n  defrostPrompt: {\n    marginBottom: theme.spacing(1.5),\n  },\n  radioOption: {\n    marginRight: 0,\n  },\n  unitToggleContainer: {\n    display: 'inline-flex',\n    border: `1px solid ${theme.palette.divider}`,\n    borderRadius: 4,\n    overflow: 'hidden',\n  },\n  unitToggleButton: {\n    padding: theme.spacing(0.75, 3),\n    minWidth: 96,\n    borderRadius: 0,\n    textTransform: 'none',\n    fontWeight: 500,\n    color: theme.palette.text.secondary,\n  },\n  unitToggleButtonActive: {\n    backgroundColor: ({ coreColor }) => theme.palette[coreColor].main,\n    color: ({ coreColor }) => theme.palette[coreColor].contrastText,\n    '&:hover': {\n      backgroundColor: ({ coreColor }) => theme.palette[coreColor].main,\n    },\n  },\n  airSection: {\n    border: `1px solid ${theme.palette.divider}`,\n    borderRadius: 4,\n    padding: theme.spacing(2),\n    marginTop: theme.spacing(2),\n  },\n  airSectionActive: {\n    borderColor: ({ coreColor }) => theme.palette[coreColor].main,\n  },\n  airSectionTitle: {\n    textTransform: 'uppercase',\n    fontWeight: 600,\n    letterSpacing: 0.5,\n    marginBottom: theme.spacing(1),\n  },\n  inputAdornment: {\n    color: theme.palette.text.secondary,\n  },\n  ctaContainer: {\n    padding: 0,\n    marginTop: theme.spacing(2),\n  },\n  cta: {\n    padding: theme.spacing(0.75, 3),\n    borderRadius: 24,\n  },\n  stepNextButton: {\n    marginTop: theme.spacing(1),\n  },\n}));\n\nexport const VENTILATOR_FILTER_MODAL = 'VENTILATOR_FILTER_MODAL';\n\nconst VentilatorFilterModal: React.FC<VentilatorFilterModalProps> = () => {\n  const dispatch = useDispatch();\n  const theme = useTheme();\n  const atsApi = useAtsApi();\n  const { t } = useTranslation('translations');\n  const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n  const skipRules = useSelector(makeSelectSkipRuleEngine());\n  const open = useSelector(makeSelectOverlayComponent(VENTILATOR_FILTER_MODAL));\n  const [activeStep, setActiveStep] = React.useState(0);\n  const [values, setValues] = React.useState<IVentilatorFilterFormValues>(DEFAULT_VENTILATOR_FILTER_VALUES);\n\n  const coreColor: 'primary' | 'secondary' = isAtsSpecTool ? 'secondary' : 'primary';\n  const classes = useStyles({ coreColor });\n\n  const clearProps = () => {\n    dispatch(new SetOverlayComponentPropsAction({\n      id: VENTILATOR_FILTER_MODAL,\n      props: {}\n    }));\n  };\n\n  const closeModal = () => {\n    dispatch(new ToggleOverlayComponentAction({ open: false, id: VENTILATOR_FILTER_MODAL }));\n  };\n\n  const onOpen = () => {\n    setActiveStep(0);\n    setValues(DEFAULT_VENTILATOR_FILTER_VALUES);\n  };\n\n  React.useEffect(() => {\n    if (open) {\n      onOpen();\n    }\n    if (!open) {\n      setTimeout(clearProps, 200);\n    }\n  }, [open]);\n\n  const handleDefrostChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const nextValue = e.target.value;\n    setValues((prev) => ({ ...prev, defrostType: nextValue }));\n  };\n\n  const handleUnitChange = (units: MeasurementUnits) => () => {\n    setValues((prev) => (prev.units === units\n      ? prev\n      : { ...convertVentilatorFilterValuesToUnits(prev, units), units }\n    ));\n  };\n\n  const handleFieldChange = (field: keyof IVentilatorFilterFormValues) => (e: React.ChangeEvent<HTMLInputElement>) => {\n    const nextValue = e.target.value;\n    setValues((prev) => ({ ...prev, [field]: nextValue }));\n  };\n\n  const goToStep2 = () => setActiveStep(1);\n  const goToStep1 = () => setActiveStep(0);\n\n  const applyFilter = () => {\n    const payload = {\n      defrostType: values.defrostType,\n      units: values.units,\n      supplyAirflow: Number(values.supplyAirflow) > 0 ? Number(values.supplyAirflow) : 0,\n      supplyStaticPressure: Number(values.supplyStaticPressure) > 0 ? Number(values.supplyStaticPressure) : 0,\n      exhaustAirflow: Number(values.exhaustAirflow) > 0 ? Number(values.exhaustAirflow) : undefined,\n      exhaustStaticPressure: Number(values.exhaustStaticPressure) > 0 ? Number(values.exhaustStaticPressure) : undefined,\n    };\n    (atsApi.callApi({\n      service: 'product',\n      endpoint: 'buildCategoryCustomFilter',\n      params: {\n        type: 'motor-size',\n        categoryId: VENTILATOR_CATEGORY_ID,\n      },\n      body: payload,\n    }) as any).then(res => {\n      const data = fromJS(res?.payload?.product);\n      const filters = data?.get('filters');\n      const selectionMap = data?.get('selectionMap');\n\n      dispatch(new SetSeriesSpecificInitSelectionsAction({\n        seriesSpecificInitSelections: selectionMap || fromJS({}),\n      }));\n\n      dispatch(new SetCategorySpecificSeriesFiltersAction({\n        filterKey: CategorySpecificSeriesFilterKey.motorSize,\n        categorySpecificSeriesFilters: filters || fromJS({ 'and': [{ 'id': { 'eq': -1 } }] }), // if no selectionMap returned, set to a filter that will yield 0 results\n      }));\n      dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: null,\n          productAction: null\n        },\n        skipRules,\n      }));\n    }).catch(() => {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('ventilatorFilterModal.apiError'),\n        severity: 'error',\n      }));\n    });\n\n    closeModal();\n  };\n\n  const unitLabels = {\n    airflow: t(UNIT_SYMBOL_KEYS[values.units].airflow),\n    // pressure stays with this tool, it is the only one that asks for it\n    pressure: t(`ventilatorFilterModal.${values.units}.pressure`),\n  };\n\n  const fieldErrors = React.useMemo(() => ({\n    supplyAirflow: getFieldValidator('supplyAirflow', values.units)(values.supplyAirflow),\n    supplyStaticPressure: getFieldValidator('supplyStaticPressure', values.units)(values.supplyStaticPressure),\n    exhaustAirflow: getFieldValidator('exhaustAirflow', values.units)(values.exhaustAirflow),\n    exhaustStaticPressure: getFieldValidator('exhaustStaticPressure', values.units)(values.exhaustStaticPressure),\n  }), [values.units, values.supplyAirflow, values.supplyStaticPressure, values.exhaustAirflow, values.exhaustStaticPressure]);\n\n  const hasFieldErrors = Object.values(fieldErrors).some((err) => err != null);\n\n  const hasRequiredSupplyValues = values.supplyAirflow.trim() !== '' && values.supplyStaticPressure.trim() !== '';\n\n  const renderStep1Content = () => (\n    <div className={classes.stepContent}>\n      <Typography variant='body1' color='textPrimary' className={classes.defrostPrompt}>\n        {t('ventilatorFilterModal.defrostPrompt')}\n      </Typography>\n      <RadioGroup value={values.defrostType} onChange={handleDefrostChange}>\n        <Grid container={true} spacing={1}>\n          {DEFROST_OPTIONS.map((option) => (\n            <Grid item={true} xs={6} key={option.value}>\n              <FormControlLabel\n                className={classes.radioOption}\n                value={option.value}\n                control={<Radio color='primary' />}\n                label={t(option.labelKey)}\n              />\n            </Grid>\n          ))}\n        </Grid>\n      </RadioGroup>\n      <Grid container={true} justify='flex-end'>\n        <Button\n          onClick={goToStep2}\n          variant='outlined'\n          color='primary'\n          className={`${classes.cta} ${classes.stepNextButton}`}\n        >\n          {t('ventilatorFilterModal.next')}\n        </Button>\n      </Grid>\n    </div>\n  );\n\n  const renderUnitToggle = () => (\n    <div className={classes.unitToggleContainer}>\n      {UNIT_OPTIONS.map((option) => {\n        const isActive = values.units === option.value;\n        return (\n          <Button\n            key={option.value}\n            onClick={handleUnitChange(option.value as MeasurementUnits)}\n            className={`${classes.unitToggleButton} ${isActive ? classes.unitToggleButtonActive : ''}`}\n            disableElevation={true}\n          >\n            {t(option.labelKey)}\n          </Button>\n        );\n      })}\n    </div>\n  );\n\n  const renderAirflowField = (\n    field: keyof typeof VENTILATOR_FILTER_PLACEHOLDERS,\n    labelKey: string,\n    unitLabel: string,\n  ) => {\n    const error = fieldErrors[field];\n    return (\n      <TextField\n        fullWidth={true}\n        label={t(labelKey, { unit: unitLabel })}\n        value={values[field]}\n        onChange={handleFieldChange(field)}\n        placeholder={VENTILATOR_FILTER_PLACEHOLDERS[field]}\n        error={!!error}\n        helperText={error}\n        InputLabelProps={{ shrink: true }}\n        InputProps={{\n          endAdornment: (\n            <InputAdornment position='end' className={classes.inputAdornment}>\n              {unitLabel}\n            </InputAdornment>\n          ),\n        }}\n      />\n    );\n  };\n\n  const renderStep2Content = () => (\n    <div className={classes.stepContent}>\n      <Grid container={true} justify='flex-end'>\n        {renderUnitToggle()}\n      </Grid>\n\n      <div className={`${classes.airSection} ${classes.airSectionActive}`}>\n        <Typography variant='subtitle2' color='textPrimary' className={classes.airSectionTitle}>\n          {t('ventilatorFilterModal.supplyAir')}\n        </Typography>\n        <Grid container={true} spacing={3}>\n          <Grid item={true} xs={6}>\n            {renderAirflowField('supplyAirflow', 'ventilatorFilterModal.supplyAirflow', unitLabels.airflow)}\n          </Grid>\n          <Grid item={true} xs={6}>\n            {renderAirflowField('supplyStaticPressure', 'ventilatorFilterModal.supplyStaticPressure', unitLabels.pressure)}\n          </Grid>\n        </Grid>\n      </div>\n\n      <div className={classes.airSection}>\n        <Typography variant='subtitle2' color='textPrimary' className={classes.airSectionTitle}>\n          {t('ventilatorFilterModal.exhaustAir')}\n        </Typography>\n        <Grid container={true} spacing={3}>\n          <Grid item={true} xs={6}>\n            {renderAirflowField('exhaustAirflow', 'ventilatorFilterModal.exhaustAirflow', unitLabels.airflow)}\n          </Grid>\n          <Grid item={true} xs={6}>\n            {renderAirflowField('exhaustStaticPressure', 'ventilatorFilterModal.exhaustStaticPressure', unitLabels.pressure)}\n          </Grid>\n        </Grid>\n      </div>\n    </div>\n  );\n\n  return (\n    <>\n      <ControlledModal\n        localKey={VENTILATOR_FILTER_MODAL}\n        scroll='body'\n        PaperProps={{\n          className: classes.paper,\n        }}\n      >\n        <div style={{ display: 'flex', flexDirection: 'column', height: '100%', position: 'relative' }}>\n          <Grid\n            container={true}\n            item={true}\n            alignItems='center'\n            wrap='nowrap'\n            justify={'center'}\n            className={classes.headerContainer}\n          >\n            <div className={classes.headerIconContainer}>\n              <AtsSvgBuildSizer\n                width={'36'}\n                height={'36'}\n                color={{ backgroundColor: theme.palette[coreColor][800], shadowColor: theme.palette[coreColor][900] }}\n              />\n            </div>\n            <Typography\n              variant='h5'\n              className={classes.headerTitle}\n            >\n              {t('ventilatorFilterModal.headerTitle')}\n            </Typography>\n          </Grid>\n          <IconButton\n            onClick={closeModal}\n            className={classes.closeIcon}\n          >\n            <CloseIcon />\n          </IconButton>\n\n          <Stepper\n            activeStep={activeStep}\n            orientation='vertical'\n            className={classes.stepper}\n          >\n            <Step>\n              <StepLabel\n                className={classes.stepLabel}\n                StepIconProps={{\n                  classes: {\n                    active: classes.stepIconActive,\n                    completed: classes.stepIconCompleted,\n                  },\n                }}\n              >\n                {t('ventilatorFilterModal.step1Title')}\n              </StepLabel>\n              <StepContent>\n                {renderStep1Content()}\n              </StepContent>\n            </Step>\n            <Step>\n              <StepLabel\n                className={classes.stepLabel}\n                StepIconProps={{\n                  classes: {\n                    active: classes.stepIconActive,\n                    completed: classes.stepIconCompleted,\n                  },\n                }}\n              >\n                {t('ventilatorFilterModal.step2Title')}\n              </StepLabel>\n              <StepContent>\n                {renderStep2Content()}\n              </StepContent>\n            </Step>\n          </Stepper>\n\n          <DialogActions className={classes.ctaContainer}>\n            {activeStep === 1 && (\n              <Button\n                onClick={goToStep1}\n                variant='outlined'\n                color={'primary'}\n                className={classes.cta}\n              >\n                {t('ventilatorFilterModal.back')}\n              </Button>\n            )}\n            <Button\n              onClick={applyFilter}\n              variant='contained'\n              color={'primary'}\n              disabled={activeStep !== 1 || hasFieldErrors || !hasRequiredSupplyValues}\n              className={classes.cta}\n            >\n              {t('ventilatorFilterModal.calculateAndFilter')}\n            </Button>\n          </DialogActions>\n        </div>\n      </ControlledModal>\n    </>\n  );\n};\n\nexport default VentilatorFilterModal;","import * as React from 'react';\nimport {\n  CircularProgress,\n  Theme,\n  Typography,\n} from '@material-ui/core';\nimport { fade } from '@material-ui/core/styles';\nimport { makeStyles } from '@material-ui/styles';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { PsychrometricsPaletteColor } from './constants';\n\nexport interface ICalculatedResultItem {\n  label: string;\n  value: string;\n}\n\ninterface ICalculatedResultProps {\n  color: PsychrometricsPaletteColor;\n  loading: boolean;\n  error: boolean;\n  items: ICalculatedResultItem[];\n}\n\ninterface IStyleProps {\n  color: PsychrometricsPaletteColor;\n}\n\nconst useStyles = makeStyles<Theme, IStyleProps>((theme: Theme) => ({\n  panel: {\n    display: 'flex',\n    alignItems: 'center',\n    backgroundColor: ({ color }) => theme.palette[color].main,\n    borderRadius: 2,\n    minHeight: 96,\n    padding: theme.spacing(1.5, 0),\n  },\n  item: {\n    flex: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: theme.spacing(0, 2),\n    '&:not(:first-child)': {\n      borderLeft: ({ color }) => `1px solid ${fade(theme.palette[color].contrastText, 0.5)}`,\n    },\n  },\n  value: {\n    color: ({ color }) => theme.palette[color].contrastText,\n    fontSize: '1.75rem',\n    lineHeight: 1.2,\n  },\n  label: {\n    color: ({ color }) => theme.palette[color].contrastText,\n    marginTop: theme.spacing(0.5),\n  },\n  spinner: {\n    color: ({ color }) => theme.palette[color].contrastText,\n  },\n  errorContainer: {\n    flex: 1,\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: theme.spacing(0, 2),\n  },\n  errorIcon: {\n    color: ({ color }) => theme.palette[color].contrastText,\n    fontSize: '1.25rem',\n    marginRight: theme.spacing(1),\n  },\n  errorText: {\n    color: ({ color }) => theme.palette[color].contrastText,\n  },\n}));\n\nconst CalculatedResult: React.FC<ICalculatedResultProps> = ({ color, loading, error, items }) => {\n  const classes = useStyles({ color });\n  const { t } = useTranslation('translations');\n\n  if (error) {\n    return (\n      <div className={classes.panel}>\n        <div className={classes.errorContainer}>\n          <WarningRoundedIcon className={classes.errorIcon} />\n          <Typography variant='body1' className={classes.errorText}>\n            {t('psychrometricsAnalysisModal.results.error')}\n          </Typography>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={classes.panel}>\n      {items.map((item, index) => (\n        <div className={classes.item} key={`${item.label}${index}`}>\n          {loading\n            ? <>\n                <CircularProgress size={28} thickness={4} className={classes.spinner} />\n                <Typography variant='body2' className={classes.label}>\n                  {t('psychrometricsAnalysisModal.results.calculating')}\n                </Typography>\n              </>\n            : <>\n                <Typography variant='h5' className={classes.value}>\n                  {item.value}\n                </Typography>\n                <Typography variant='body2' className={classes.label}>\n                  {item.label}\n                </Typography>\n              </>\n          }\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport default CalculatedResult;\n","import * as React from 'react';\nimport {\n  Grid,\n  InputAdornment,\n  Slider,\n  TextField,\n  Theme,\n  Typography,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/styles';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport WbSunnyIcon from '@material-ui/icons/WbSunny';\nimport AcUnitIcon from '@material-ui/icons/AcUnit';\nimport { PERCENT_UNIT_KEY } from '../../../constants/units';\nimport CalculatedResult, { ICalculatedResultItem } from './CalculatedResult';\nimport {\n  formatResultValue,\n  getEffectivenessError,\n  getFieldValidator,\n  IPsychrometricsField,\n  isWetBulbAboveDryBulb,\n  IPsychrometricsResult,\n  IPsychrometricsSeasonValues,\n  MAX_EFFECTIVENESS,\n  MIN_EFFECTIVENESS,\n  MODE_FIELDS,\n  EFFECTIVENESS_STEP,\n  OUTDOOR_TEMPERATURE_FIELD_KEYS,\n  PsychrometricsFieldKey,\n  PsychrometricsMode,\n  PsychrometricsSeason,\n  PSYCHROMETRICS_PLACEHOLDERS,\n  PsychrometricsPaletteColor,\n  SEASON_PALETTE_COLORS,\n  toEffectivenessNumber,\n} from './constants';\n\ninterface ISeasonSectionProps {\n  season: PsychrometricsSeason;\n  mode: PsychrometricsMode;\n  values: IPsychrometricsSeasonValues;\n  temperatureUnit: string;\n  loading: boolean;\n  error: boolean;\n  result: IPsychrometricsResult;\n  onFieldChange: (field: PsychrometricsFieldKey) => (e: React.ChangeEvent<HTMLInputElement>) => void;\n  onEffectivenessChange: (value: string) => void;\n  onEffectivenessBlur: () => void;\n}\n\ninterface IStyleProps {\n  color: PsychrometricsPaletteColor;\n}\n\nconst useStyles = makeStyles<Theme, IStyleProps>((theme: Theme) => ({\n  section: {\n    border: ({ color }) => `1px solid ${theme.palette[color].main}`,\n    borderRadius: 2,\n    marginTop: theme.spacing(2),\n  },\n  header: {\n    display: 'flex',\n    alignItems: 'center',\n    borderBottom: ({ color }) => `1px solid ${theme.palette[color].main}`,\n    padding: theme.spacing(1, 2),\n  },\n  headerIcon: {\n    color: ({ color }) => theme.palette[color].main,\n    fontSize: '1.125rem',\n    marginRight: theme.spacing(1),\n  },\n  headerTitle: {\n    textTransform: 'uppercase',\n    letterSpacing: 0.5,\n  },\n  body: {\n    padding: theme.spacing(2),\n  },\n  effectivenessContainer: {\n    marginTop: theme.spacing(2),\n  },\n  effectivenessInput: {\n    width: 72,\n    '& input': {\n      textAlign: 'right',\n    },\n  },\n  slider: {\n    color: ({ color }) => theme.palette[color].main,\n    padding: theme.spacing(1.5, 0),\n  },\n  sliderBounds: {\n    color: theme.palette.text.secondary,\n  },\n  resultTitle: {\n    textTransform: 'uppercase',\n    letterSpacing: 0.5,\n    margin: theme.spacing(2, 0, 1),\n  },\n  inputAdornment: {\n    color: theme.palette.text.secondary,\n  },\n  inputLabel: {\n    color: theme.palette.text.primary,\n  },\n}));\n\nconst SeasonSection: React.FC<ISeasonSectionProps> = ({\n  season,\n  mode,\n  values,\n  temperatureUnit,\n  loading,\n  error,\n  result,\n  onFieldChange,\n  onEffectivenessChange,\n  onEffectivenessBlur,\n}) => {\n  const { t } = useTranslation('translations');\n  const color = SEASON_PALETTE_COLORS[season];\n  const classes = useStyles({ color });\n\n  const percentUnit = t(PERCENT_UNIT_KEY);\n  const fields = MODE_FIELDS[mode];\n  const fieldColumns: 4 | 6 = mode === PsychrometricsMode.efficiency ? 4 : 6;\n  const effectivenessError = getEffectivenessError(mode, values);\n  const wetBulbError = isWetBulbAboveDryBulb(values)\n    ? t('psychrometricsAnalysisModal.errors.wetBulbAboveDryBulb')\n    : undefined;\n\n  const emptyValue = t('psychrometricsAnalysisModal.results.empty');\n  const displayValue = (value: number, unit: string) => (\n    `${value == null ? emptyValue : formatResultValue(value)} ${unit}`\n  );\n\n  const resultItems = (): ICalculatedResultItem[] => {\n    if (mode === PsychrometricsMode.efficiency) {\n      return [{\n        label: t('psychrometricsAnalysisModal.results.effectiveness'),\n        value: displayValue(result?.minimumRequiredEffectivenessPct, percentUnit),\n      }];\n    }\n\n    if (season === PsychrometricsSeason.winter) {\n      return [{\n        label: t('psychrometricsAnalysisModal.results.leavingAirTemp'),\n        value: displayValue(result?.leavingAirTemperature, temperatureUnit),\n      }];\n    }\n\n    return [{\n      label: t('psychrometricsAnalysisModal.results.leavingAirTempDb'),\n      value: displayValue(result?.leavingAirTemperature, temperatureUnit),\n    }];\n  };\n\n  const renderField = (field: IPsychrometricsField) => {\n    const unitLabel = field.unit === 'percent' ? percentUnit : temperatureUnit;\n    const fieldError = getFieldValidator(field.unit)(values[field.key])\n      || (OUTDOOR_TEMPERATURE_FIELD_KEYS.indexOf(field.key) !== -1 ? wetBulbError : undefined);\n\n    return (\n      <Grid item={true} xs={fieldColumns} key={field.key}>\n        <TextField\n          fullWidth={true}\n          label={`${t(field.labelKey)}${field.required ? ' *' : ''}`}\n          value={values[field.key]}\n          onChange={onFieldChange(field.key)}\n          placeholder={PSYCHROMETRICS_PLACEHOLDERS[field.unit]}\n          error={!!fieldError}\n          helperText={fieldError}\n          InputLabelProps={{ shrink: true, className: classes.inputLabel }}\n          InputProps={{\n            endAdornment: (\n              <InputAdornment position='end' className={classes.inputAdornment}>\n                {unitLabel}\n              </InputAdornment>\n            ),\n          }}\n        />\n      </Grid>\n    );\n  };\n\n  const renderEffectiveness = () => (\n    <div className={classes.effectivenessContainer}>\n      <Grid container={true} justify='space-between' alignItems='flex-end' wrap='nowrap'>\n        <Typography variant='body2' color='textPrimary'>\n          {t('psychrometricsAnalysisModal.fields.effectiveness')}\n        </Typography>\n        <TextField\n          className={classes.effectivenessInput}\n          value={values.effectiveness}\n          onChange={(e) => onEffectivenessChange(e.target.value)}\n          onBlur={onEffectivenessBlur}\n          error={!!effectivenessError}\n          InputProps={{\n            endAdornment: (\n              <InputAdornment position='end' className={classes.inputAdornment}>\n                {percentUnit}\n              </InputAdornment>\n            ),\n          }}\n        />\n      </Grid>\n      <Slider\n        className={classes.slider}\n        value={toEffectivenessNumber(values.effectiveness)}\n        min={MIN_EFFECTIVENESS}\n        max={MAX_EFFECTIVENESS}\n        step={EFFECTIVENESS_STEP}\n        onChange={(e, value) => onEffectivenessChange(String(value))}\n      />\n      <Grid container={true} justify='space-between' wrap='nowrap'>\n        <Typography variant='caption' className={classes.sliderBounds}>\n          {`${MIN_EFFECTIVENESS}${percentUnit}`}\n        </Typography>\n        <Typography variant='caption' className={classes.sliderBounds}>\n          {`${MAX_EFFECTIVENESS}${percentUnit}`}\n        </Typography>\n      </Grid>\n    </div>\n  );\n\n  return (\n    <div className={classes.section}>\n      <div className={classes.header}>\n        {season === PsychrometricsSeason.summer\n          ? <WbSunnyIcon className={classes.headerIcon} />\n          : <AcUnitIcon className={classes.headerIcon} />\n        }\n        <Typography variant='subtitle2' color='textPrimary' className={classes.headerTitle}>\n          {t(`psychrometricsAnalysisModal.seasons.${season}`)}\n        </Typography>\n      </div>\n      <div className={classes.body}>\n        <Grid container={true} spacing={3}>\n          {fields.map(renderField)}\n        </Grid>\n        {mode === PsychrometricsMode.leavingTemps && renderEffectiveness()}\n        <Typography variant='subtitle2' color='textPrimary' className={classes.resultTitle}>\n          {t('psychrometricsAnalysisModal.results.title')}\n        </Typography>\n        <CalculatedResult\n          color={color}\n          loading={loading}\n          error={error}\n          items={resultItems()}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default SeasonSection;\n","import * as React from 'react';\nimport {\n  Button,\n  Grid,\n  InputAdornment,\n  IconButton,\n  Tab,\n  Tabs,\n  TextField,\n  Theme,\n  Tooltip,\n  Typography,\n  useTheme,\n} from '@material-ui/core';\nimport {\n  useDispatch,\n  useSelector,\n} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { makeStyles } from '@material-ui/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { fromJS, Map } from 'immutable';\nimport { ControlledModal } from '../../../components';\nimport { SetSnackbarOpenAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponent } from '../../../modules/ApplicationModule/selectors';\nimport { AtsSvgBuildSizer } from '../../../components/AtsSvg';\nimport { makeSelectIsAtsSpecTool } from '../../../modules/AtsModule/selectors';\nimport {\n  SetCategorySpecificSeriesFiltersAction,\n  SetSeriesSpecificInitSelectionsAction,\n  UseActionAndSearchWithFilterAction,\n} from '../../../modules/ProductModule/actions';\nimport { makeSelectSkipRuleEngine } from '../../../modules/ProductModule/selectors';\nimport { CategorySpecificSeriesFilterKey } from '../../../modules/ProductModule/constants';\nimport { convertMeasurementToUnits, PERCENT_UNIT_KEY, UNIT_SYMBOL_KEYS } from '../../../constants/units';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { VENTILATOR_CATEGORY_ID } from '../../ProductSelectionControl';\nimport SeasonSection from './SeasonSection';\nimport {\n  BAD_REQUEST_CODE,\n  buildCalculationBody,\n  clampEffectiveness,\n  convertSeasonValuesToUnits,\n  DEFAULT_PSYCHROMETRICS_SEASON_VALUES,\n  formatResultValue,\n  getAirflowError,\n  getCalculableSeasons,\n  getEffectivenessError,\n  IPsychrometricsRequestArgs,\n  IPsychrometricsResult,\n  IPsychrometricsSeasonValues,\n  parsePsychrometricsResults,\n  PsychrometricsFieldKey,\n  PsychrometricsMode,\n  PsychrometricsSeason,\n  PsychrometricsUnits,\n  PSYCHROMETRICS_DEBOUNCE_MS,\n  PSYCHROMETRICS_MODE_OPTIONS,\n  PSYCHROMETRICS_MODE_TYPES,\n  AIRFLOW_PLACEHOLDER,\n  PSYCHROMETRICS_SEASONS,\n  PSYCHROMETRICS_UNIT_OPTIONS,\n  SEASON_PALETTE_COLORS,\n} from './constants';\n\ninterface IPsychrometricsAnalysisModalComponentProps {\n}\n\ninterface IPsychrometricsAnalysisModalProps extends IPsychrometricsAnalysisModalComponentProps {\n}\n\ntype PsychrometricsAnalysisModalProps = IPsychrometricsAnalysisModalProps;\n\ntype SeasonValuesMap = Record<PsychrometricsSeason, IPsychrometricsSeasonValues>;\ntype SeasonResultsMap = Record<PsychrometricsSeason, IPsychrometricsResult>;\ntype SeasonFlagsMap = Record<PsychrometricsSeason, boolean>;\n\ninterface IStyleProps {\n  coreColor: 'primary' | 'secondary';\n}\n\nconst useStyles = makeStyles<Theme, IStyleProps>((theme: Theme) => ({\n  paper: {\n    width: 1060,\n    maxWidth: '90%',\n    maxHeight: '92%',\n    padding: theme.spacing(2, 3),\n    display: 'flex',\n    flexDirection: 'column',\n    overflow: 'hidden',\n    position: 'relative',\n  },\n  closeIcon: {\n    position: 'absolute',\n    right: theme.spacing(-0.5),\n    top: theme.spacing(-0.5),\n  },\n  headerIconContainer: {\n    width: 36,\n    height: 36,\n  },\n  headerContainer: {\n    margin: theme.spacing(1, 0, 2),\n    padding: theme.spacing(0, 6),\n  },\n  headerTitle: {\n    marginLeft: theme.spacing(1.5),\n  },\n  unitToggleContainer: {\n    display: 'inline-flex',\n    border: `1px solid ${theme.palette.divider}`,\n    borderRadius: 4,\n    overflow: 'hidden',\n  },\n  unitToggleButton: {\n    padding: theme.spacing(0.75, 3),\n    minWidth: 96,\n    borderRadius: 0,\n    textTransform: 'none',\n    fontWeight: 500,\n    color: theme.palette.text.secondary,\n  },\n  unitToggleButtonActive: {\n    backgroundColor: ({ coreColor }) => theme.palette[coreColor].main,\n    color: ({ coreColor }) => theme.palette[coreColor].contrastText,\n    '&:hover': {\n      backgroundColor: ({ coreColor }) => theme.palette[coreColor].main,\n    },\n  },\n  tabs: {\n    marginTop: theme.spacing(2),\n    minHeight: 40,\n  },\n  tab: {\n    minHeight: 40,\n    minWidth: 'auto',\n    padding: theme.spacing(1, 2),\n    border: `1px solid ${theme.palette.divider}`,\n    backgroundColor: theme.palette.grey[100],\n    fontSize: '0.8125rem',\n    color: theme.palette.text.secondary,\n    '&:not(:first-child)': {\n      borderLeft: 'none',\n    },\n  },\n  tabSelected: {\n    backgroundColor: theme.palette.common.white,\n    color: theme.palette.primary.main,\n  },\n  content: {\n    flex: 1,\n    overflowY: 'auto',\n    border: `1px solid ${theme.palette.divider}`,\n    padding: theme.spacing(2),\n  },\n  description: {\n    marginBottom: theme.spacing(2),\n  },\n  inputAdornment: {\n    color: theme.palette.text.secondary,\n  },\n  inputLabel: {\n    color: theme.palette.text.primary,\n  },\n  footer: {\n    marginTop: theme.spacing(2),\n  },\n  summaryLabel: {\n    textTransform: 'uppercase',\n    letterSpacing: 0.5,\n    marginRight: theme.spacing(2),\n  },\n  summaryChip: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    border: '1px solid',\n    borderRadius: 2,\n    marginRight: theme.spacing(1),\n    padding: theme.spacing(0.25, 1),\n  },\n  summarySeason: {\n    textTransform: 'uppercase',\n    letterSpacing: 0.5,\n    marginRight: theme.spacing(1),\n  },\n  ctaContainer: {\n    marginLeft: 'auto',\n  },\n  cta: {\n    padding: theme.spacing(0.75, 3),\n    borderRadius: 24,\n    whiteSpace: 'nowrap',\n  },\n}));\n\nexport const PSYCHROMETRICS_ANALYSIS_MODAL = 'PSYCHROMETRICS_ANALYSIS_MODAL';\n\nconst buildSeasonMap = <T extends any>(value: T): Record<PsychrometricsSeason, T> => ({\n  [PsychrometricsSeason.summer]: value,\n  [PsychrometricsSeason.winter]: value,\n}) as Record<PsychrometricsSeason, T>;\n\nconst PsychrometricsAnalysisModal: React.FC<PsychrometricsAnalysisModalProps> = () => {\n  const dispatch = useDispatch();\n  const theme = useTheme();\n  const atsApi = useAtsApi();\n  const { t } = useTranslation('translations');\n  const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n  const skipRules = useSelector(makeSelectSkipRuleEngine());\n  const open = useSelector(makeSelectOverlayComponent(PSYCHROMETRICS_ANALYSIS_MODAL));\n\n  const [mode, setMode] = React.useState<PsychrometricsMode>(PsychrometricsMode.leavingTemps);\n  const [units, setUnits] = React.useState<PsychrometricsUnits>('imperial');\n  const [airflow, setAirflow] = React.useState('');\n  const [seasonValues, setSeasonValues] = React.useState<SeasonValuesMap>(buildSeasonMap(DEFAULT_PSYCHROMETRICS_SEASON_VALUES));\n  const [results, setResults] = React.useState<SeasonResultsMap>(buildSeasonMap(null));\n  const [calculating, setCalculating] = React.useState<SeasonFlagsMap>(buildSeasonMap(false));\n  const [filterData, setFilterData] = React.useState<any>(null);\n  const [calculationErrors, setCalculationErrors] = React.useState<SeasonFlagsMap>(buildSeasonMap(false));\n\n  const debounceTimer = React.useRef<any>(null);\n  // every scheduled calculation bumps this so that only the response of the latest one is used\n  const latestRequestId = React.useRef(0);\n\n  const coreColor: 'primary' | 'secondary' = isAtsSpecTool ? 'secondary' : 'primary';\n  const classes = useStyles({ coreColor });\n\n  const unitLabels = {\n    airflow: t(UNIT_SYMBOL_KEYS[units].airflow),\n    temperature: t(UNIT_SYMBOL_KEYS[units].temperature),\n  };\n  const percentUnit = t(PERCENT_UNIT_KEY);\n  const notAvailable = t('psychrometricsAnalysisModal.summary.notAvailable');\n  const airflowError = getAirflowError(airflow);\n  const activeMode = PSYCHROMETRICS_MODE_OPTIONS.find((option) => option.value === mode);\n  const hasWinterResult = results[PsychrometricsSeason.winter] != null;\n\n  const cancelScheduledCalculation = () => {\n    if (debounceTimer.current != null) {\n      clearTimeout(debounceTimer.current);\n      debounceTimer.current = null;\n    }\n  };\n\n  const scheduleCalculation = (snapshot: IPsychrometricsRequestArgs) => {\n    cancelScheduledCalculation();\n    const requestId = latestRequestId.current + 1;\n    latestRequestId.current = requestId;\n    const isLatestRequest = () => latestRequestId.current === requestId;\n\n    const seasons = getCalculableSeasons(snapshot);\n\n    // the results on screen no longer match the inputs, and only the seasons being calculated show a loader\n    setResults(buildSeasonMap(null));\n    setFilterData(null);\n    setCalculationErrors(buildSeasonMap(false));\n    setCalculating(PSYCHROMETRICS_SEASONS.reduce((flags, season) => ({\n      ...flags,\n      [season]: seasons.indexOf(season) !== -1,\n    }), buildSeasonMap(false)));\n\n    if (seasons.length === 0) {\n      return;\n    }\n\n    debounceTimer.current = setTimeout(() => {\n      (atsApi.callApi({\n        service: 'product',\n        endpoint: 'buildCategoryCustomFilter',\n        params: {\n          categoryId: VENTILATOR_CATEGORY_ID,\n          type: PSYCHROMETRICS_MODE_TYPES[snapshot.mode],\n        },\n        body: buildCalculationBody({ ...snapshot, seasons }),\n      }) as any).then((res) => {\n        if (!isLatestRequest()) {\n          return;\n        }\n        setResults(parsePsychrometricsResults(res, snapshot.mode));\n        setFilterData(res?.payload?.product);\n        setCalculating(buildSeasonMap(false));\n      }).catch((err) => {\n        if (!isLatestRequest()) {\n          return;\n        }\n        setResults(buildSeasonMap(null));\n        setFilterData(null);\n        setCalculating(buildSeasonMap(false));\n\n        if (err?.payload?.error?.code === BAD_REQUEST_CODE) {\n          setCalculationErrors(PSYCHROMETRICS_SEASONS.reduce((flags, season) => ({\n            ...flags,\n            [season]: seasons.indexOf(season) !== -1,\n          }), buildSeasonMap(false)));\n          return;\n        }\n\n        dispatch(new SetSnackbarOpenAction({\n          message: t('psychrometricsAnalysisModal.apiError'),\n          severity: 'error',\n        }));\n      });\n    }, PSYCHROMETRICS_DEBOUNCE_MS);\n  };\n\n  const onOpen = () => {\n    cancelScheduledCalculation();\n    latestRequestId.current += 1;\n    setMode(PsychrometricsMode.leavingTemps);\n    setUnits('imperial');\n    setAirflow('');\n    setSeasonValues(buildSeasonMap(DEFAULT_PSYCHROMETRICS_SEASON_VALUES));\n    setResults(buildSeasonMap(null));\n    setFilterData(null);\n    setCalculationErrors(buildSeasonMap(false));\n    setCalculating(buildSeasonMap(false));\n  };\n\n  React.useEffect(() => {\n    if (open) {\n      onOpen();\n    }\n  }, [open]);\n\n  React.useEffect(() => {\n    return () => cancelScheduledCalculation();\n  }, []);\n\n  const closeModal = () => {\n    dispatch(new ToggleOverlayComponentAction({ open: false, id: PSYCHROMETRICS_ANALYSIS_MODAL }));\n  };\n\n  const handleModeChange = (e: React.ChangeEvent<{}>, nextMode: PsychrometricsMode) => {\n    setMode(nextMode);\n    scheduleCalculation({ mode: nextMode, units, airflow, seasonValues });\n  };\n\n  const handleUnitChange = (nextUnits: PsychrometricsUnits) => () => {\n    if (nextUnits === units) {\n      return;\n    }\n\n    const nextAirflow = convertMeasurementToUnits(airflow, 'airflow', nextUnits);\n    const nextSeasonValues = PSYCHROMETRICS_SEASONS.reduce((converted, season) => ({\n      ...converted,\n      [season]: convertSeasonValuesToUnits(seasonValues[season], nextUnits),\n    }), {}) as SeasonValuesMap;\n\n    setUnits(nextUnits);\n    setAirflow(nextAirflow);\n    setSeasonValues(nextSeasonValues);\n    scheduleCalculation({ mode, units: nextUnits, airflow: nextAirflow, seasonValues: nextSeasonValues });\n  };\n\n  const handleAirflowChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const nextAirflow = e.target.value;\n    setAirflow(nextAirflow);\n    scheduleCalculation({ mode, units, airflow: nextAirflow, seasonValues });\n  };\n\n  const updateSeasonValues = (season: PsychrometricsSeason, changes: Partial<IPsychrometricsSeasonValues>) => {\n    const nextSeasonValues = { ...seasonValues, [season]: { ...seasonValues[season], ...changes } };\n    setSeasonValues(nextSeasonValues);\n    scheduleCalculation({ mode, units, airflow, seasonValues: nextSeasonValues });\n  };\n\n  const handleSeasonFieldChange = (season: PsychrometricsSeason) => (field: PsychrometricsFieldKey) => (e: React.ChangeEvent<HTMLInputElement>) => {\n    updateSeasonValues(season, { [field]: e.target.value });\n  };\n\n  const handleEffectivenessChange = (season: PsychrometricsSeason) => (value: string) => {\n    updateSeasonValues(season, { effectiveness: value });\n  };\n\n  const handleEffectivenessBlur = (season: PsychrometricsSeason) => () => {\n    const current = seasonValues[season].effectiveness;\n    const clamped = clampEffectiveness(current);\n\n    if (clamped === current) {\n      return;\n    }\n\n    // a purely cosmetic change - 70 becoming 70.0 - does not need another calculation\n    if (getEffectivenessError(mode, seasonValues[season]) == null && Number(clamped) === Number(current)) {\n      setSeasonValues((prev) => ({ ...prev, [season]: { ...prev[season], effectiveness: clamped } }));\n      return;\n    }\n\n    updateSeasonValues(season, { effectiveness: clamped });\n  };\n\n  const applyFilter = () => {\n    const data = fromJS(filterData);\n    const filters = data?.get('filters');\n    const selectionMap = data?.get('selectionMap');\n\n    // only touched when this calculation actually came with selections, so the other applied filters keep theirs\n    if (Map.isMap(selectionMap) && !selectionMap.isEmpty()) {\n      dispatch(new SetSeriesSpecificInitSelectionsAction({\n        seriesSpecificInitSelections: selectionMap,\n      }));\n    }\n\n    dispatch(new SetCategorySpecificSeriesFiltersAction({\n      filterKey: CategorySpecificSeriesFilterKey.psychrometrics,\n      categorySpecificSeriesFilters: filters || fromJS({ 'and': [{ 'id': { 'eq': -1 } }] }), // if no filters returned, set to a filter that will yield 0 results\n    }));\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: null,\n        productAction: null\n      },\n      skipRules,\n    }));\n\n    closeModal();\n  };\n\n  const seasonSummary = (season: PsychrometricsSeason) => {\n    const result = results[season];\n\n    if (result == null) {\n      return notAvailable;\n    }\n\n    if (mode === PsychrometricsMode.efficiency) {\n      return result.minimumRequiredEffectivenessPct != null\n        ? `${formatResultValue(result.minimumRequiredEffectivenessPct)}${percentUnit}`\n        : notAvailable;\n    }\n\n    return result.leavingAirTemperature != null\n      ? `${formatResultValue(result.leavingAirTemperature)}${unitLabels.temperature} (${t('psychrometricsAnalysisModal.summary.db')})`\n      : notAvailable;\n  };\n\n  const renderUnitToggle = () => (\n    <div className={classes.unitToggleContainer}>\n      {PSYCHROMETRICS_UNIT_OPTIONS.map((option) => {\n        const isActive = units === option.value;\n        return (\n          <Button\n            key={option.value}\n            onClick={handleUnitChange(option.value)}\n            className={`${classes.unitToggleButton} ${isActive ? classes.unitToggleButtonActive : ''}`}\n            disableElevation={true}\n          >\n            {t(option.labelKey)}\n          </Button>\n        );\n      })}\n    </div>\n  );\n\n  const renderSummary = () => (\n    <Grid container={true} alignItems='center' wrap='nowrap'>\n      <Typography variant='caption' color='textPrimary' className={classes.summaryLabel}>\n        {t('psychrometricsAnalysisModal.summary.label')}\n      </Typography>\n      {PSYCHROMETRICS_SEASONS.map((season) => {\n        const seasonColor = theme.palette[SEASON_PALETTE_COLORS[season]].main;\n        return (\n          <div\n            key={season}\n            className={classes.summaryChip}\n            style={{ borderColor: seasonColor }}\n          >\n            <Typography variant='caption' className={classes.summarySeason} style={{ color: seasonColor }}>\n              {t(`psychrometricsAnalysisModal.seasons.${season}`)}\n            </Typography>\n            <Typography variant='caption' color='textSecondary'>\n              {seasonSummary(season)}\n            </Typography>\n          </div>\n        );\n      })}\n    </Grid>\n  );\n\n  return (\n    <ControlledModal\n      localKey={PSYCHROMETRICS_ANALYSIS_MODAL}\n      scroll='paper'\n      PaperProps={{\n        className: classes.paper,\n      }}\n    >\n      <Grid\n        container={true}\n        item={true}\n        alignItems='center'\n        wrap='nowrap'\n        justify={'center'}\n        className={classes.headerContainer}\n      >\n        <div className={classes.headerIconContainer}>\n          <AtsSvgBuildSizer\n            width={'36'}\n            height={'36'}\n            color={{ backgroundColor: theme.palette[coreColor][800], shadowColor: theme.palette[coreColor][900] }}\n          />\n        </div>\n        <Typography\n          variant='h5'\n          className={classes.headerTitle}\n        >\n          {t('psychrometricsAnalysisModal.headerTitle')}\n        </Typography>\n      </Grid>\n      <IconButton\n        onClick={closeModal}\n        className={classes.closeIcon}\n      >\n        <CloseIcon />\n      </IconButton>\n\n      <Grid container={true} justify='flex-end'>\n        {renderUnitToggle()}\n      </Grid>\n\n      <Tabs\n        value={mode}\n        onChange={handleModeChange}\n        className={classes.tabs}\n        TabIndicatorProps={{ style: { display: 'none' } }}\n      >\n        {PSYCHROMETRICS_MODE_OPTIONS.map((option) => (\n          <Tab\n            key={option.value}\n            value={option.value}\n            label={t(option.labelKey)}\n            classes={{\n              root: classes.tab,\n              selected: classes.tabSelected,\n            }}\n          />\n        ))}\n      </Tabs>\n\n      <div className={classes.content}>\n        <Typography variant='body2' color='textPrimary' className={classes.description}>\n          {t(activeMode.descriptionKey)}\n        </Typography>\n\n        <Grid container={true} spacing={3}>\n          <Grid item={true} xs={6}>\n            <TextField\n              fullWidth={true}\n              label={`${t('psychrometricsAnalysisModal.fields.airflow', { unit: unitLabels.airflow })} *`}\n              value={airflow}\n              onChange={handleAirflowChange}\n              placeholder={AIRFLOW_PLACEHOLDER}\n              error={!!airflowError}\n              helperText={airflowError}\n              InputLabelProps={{ shrink: true, className: classes.inputLabel }}\n              InputProps={{\n                endAdornment: (\n                  <InputAdornment position='end' className={classes.inputAdornment}>\n                    {unitLabels.airflow}\n                  </InputAdornment>\n                ),\n              }}\n            />\n          </Grid>\n        </Grid>\n\n        {PSYCHROMETRICS_SEASONS.map((season) => (\n          <SeasonSection\n            key={season}\n            season={season}\n            mode={mode}\n            values={seasonValues[season]}\n            temperatureUnit={unitLabels.temperature}\n            loading={calculating[season]}\n            error={calculationErrors[season]}\n            result={results[season]}\n            onFieldChange={handleSeasonFieldChange(season)}\n            onEffectivenessChange={handleEffectivenessChange(season)}\n            onEffectivenessBlur={handleEffectivenessBlur(season)}\n          />\n        ))}\n      </div>\n\n      <Grid container={true} alignItems='center' wrap='nowrap' className={classes.footer}>\n        {renderSummary()}\n        <Tooltip title={hasWinterResult ? '' : t('psychrometricsAnalysisModal.winterRequiredTooltip')}>\n          <span className={classes.ctaContainer}>\n            <Button\n              onClick={applyFilter}\n              variant='contained'\n              color={'primary'}\n              disabled={!hasWinterResult}\n              className={classes.cta}\n            >\n              {t('psychrometricsAnalysisModal.filterProduct')}\n            </Button>\n          </span>\n        </Tooltip>\n      </Grid>\n    </ControlledModal>\n  );\n};\n\nexport default PsychrometricsAnalysisModal;\n","/* tslint:disable */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport {\n  WithStyles,\n  withStyles,\n  Grid,\n  Typography,\n  Theme,\n  Tooltip,\n  AppBar,\n  Toolbar,\n  Switch,\n  Button,\n  Menu,\n  MenuItem,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n} from 'redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ProductStep,\n } from '../../components';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  Map,\n  List,\n  Set,\n  fromJS,\n} from 'immutable';\nimport {\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  Pagination,\n} from '../../containers';\nimport {\n  push\n} from 'connected-react-router/immutable';\nimport {\n  Link,\n} from 'react-router-dom';\nimport {\n  makeSelectDrawing,\n  makeSelectSpec,\n  makeSelectMissingCategory,\n  makeSelectRuleFails,\n  makeSelectMasterDrawing,\n  makeSelectMasterProjectspec,\n  makeSelectMode, makeSelectTemplateDrawing, makeSelectTemplateProjectSpec, makeSelectNewDrawingId, makeSelectIsUpdatingDrawing,\n} from '../../modules/SpecModule/selectors';\nimport {\n  selectSeriesFilters,\n  makeSelectProductCategory,\n  makeSelectProductTypeIdToProductCategoryReverseMap,\n  makeSelectSkipRuleEngine,\n} from '../../modules/ProductModule/selectors';\nimport {\n  ProductFilterAddAction,\n  ProductFilterRemoveAction,\n  ResetEditingProductIndexAction,\n  SelectNewCategoryAction,\n  SelectSeriesAction,\n  SeriesFilterAddAction,\n  SeriesFilterRemoveAction,\n  SeriesLoadingAction,\n  SkipRuleEngineAction,\n  UseActionAndSearchWithFilterAction,\n} from '../../modules/ProductModule/actions';\nimport {\n  SelectDrawingAction,\n  DeleteDrawingAction,\n  UpdateSpecAction,\n  UpdateDrawingAction,\n  SetNewDrawingIdAction,\n  SetIsUpdatingDrawingAction,\n  UpdateDrawingSucceededAction,\n  AutoSetDrawingNameAction,\n} from '../../modules/SpecModule/actions';\nimport {\n  SeriesFilterClearAction,\n} from '../../modules/ProductModule/actions';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  Spec,\n  ProductCategory,\n  Drawing,\n  Product,\n  MissingRule,\n  ProductCategoryGroup,\n  Project,\n} from '../../models';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  CategoryDisplayType,\n  PRODUCT_SELECTION_GROUP_FORM,\n} from '../../modules/ProductModule/constants';\nimport {\n  Image,\n} from '../../components';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { Info } from '@material-ui/icons';\nimport {\n  makeSelectConfig,\n  makeSelectIdentityObject,\n  makeSelectTemplateTranslationObject,\n  makeSelectUserHasBuildSizerWaterHeaterAcl\n} from '../../modules/AtsModule/selectors';\nimport {\n  SPEC_TOOL_ID,\n  PROJECT_TRACKER_ID,\n  PROJECT_DETAIL_PATH,\n  SPEC_DETAIL_PATH,\n  PROJECT_LIST_PATH,\n  PRODUCT_CATEGORY_PATH,\n  PRODUCT_SELECTION_PATH,\n  MASTER_LIST_PATH,\n  MASTER_DETAIL_PATH,\n  SPECIFICATION_LIST_PATH,\n  Mode, TEMPLATE_DETAIL_PATH, TEMPLATE_LIST_PATH, TEST_PROJECT_LIST_PATH,\n  AMPLITUDE_EVENT,\n  NOT_FOUND_PATH,\n  GEOLOCATION_ID,\n  AOSMITH_SPEC_ID,\n  getLocalePrefix\n} from '../../constants';\nimport { BreadcrumbProjectSpecBar } from '../../components/BreadcrumbProjectSpecBar';\nimport {makeSelectProjects} from '../../modules/ProjectModule/selectors';\nimport barrierFreeIcon from '../../images/barrierFreeIcon.svg';\nimport bariatricIcon from '../../images/bariatricIcon.svg';\nimport childHeightIcon from '../../images/childHeightIcon.svg';\nimport BarrierFreeButton from './BarrierFreeButton';\nimport AlternativeDropDown, { ALTERNATIVES_DROP_DOWN_ID } from '../../components/AlternativeDropDown';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { getDrawingLabelBaseOnProducts } from '../ProductCategorySelection';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport CurvePreviewModal from '../ProductSelection/CurvePreviewModal';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { PIPE_FILTER_MODAL } from '../ProductSelection/PipeFilterModal/Component';\nimport PipeFilterModal from '../ProductSelection/PipeFilterModal';\nimport { APP_CATEGORIES_MAP } from '../Sizer/categoriesConstants';\nimport StraightenIcon from '@material-ui/icons/Straighten';\nimport { BUILD_SIZER_MODAL_ID } from '../BuildSizerModal';\nimport VentilatorFilterModal, { VENTILATOR_FILTER_MODAL } from '../ProductSelection/VentilatorFilterModal/Component';\nimport PsychrometricsAnalysisModal, { PSYCHROMETRICS_ANALYSIS_MODAL } from '../ProductSelection/PsychrometricsAnalysisModal/Component';\n\nexport const ADA_BLACKLIST_CATEGORY_IDS = [2273];\nexport const BARIATRIC_COMPATIBLE_CATEGORY_IDS = [14, 108];\nexport const CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS = [14, 108];\nexport const PUMP_CATEGORY_ID = 160;\nexport const PIPE_CATEGORY_ID = 329;\nexport const VENTILATOR_CATEGORY_ID = 2273;\nexport const WATER_HEATER_CATEGORY_ID = 120;\nexport const ZOELLER_PUMP_SIZING_TOOL_URL = 'https://pumpsizing.zoellerpumps.com/en/Account/Login';\n\ninterface IProductSelectionControlComponentProps {\n  ProductCategoryPath: string;\n  DrawingCompletionPath: string;\n  specType: string;\n}\n\ninterface IProductSelectionControl extends IProductSelectionControlComponentProps {\n  classes: any;\n  allowMulti: boolean;\n  dispatch: (action: any) => void;\n  productCategory: IMap<ProductCategory>;\n  productTypeToProductCategoryReverseMap: Map<number, List<IMap<ProductCategoryGroup>>>;\n  selectedDrawing: IMap<Drawing>;\n  makeSelectSpecDrawing: IMap<Drawing>;\n  selectedSpec: IMap<Spec>;\n  selectedMissingCategories: List<IMap<MissingRule>>;\n  seriesFilters: Map<string, Set<any>>;\n  selectedRuleFails: any;\n  productCategoryListFormValues: Map<string, any>;\n  config: Map<string, any>;\n  projects: IMap<Project>;\n  mode: Mode;\n  skipRules: boolean;\n  templateTranslationObject: object;\n  isUpdatingDrawing: boolean;\n  newDrawingId: number;\n  isGuestUser: boolean;\n  userHasBuildSizerWaterHeaterAcl: boolean;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  dividerMargin: {\n    margin: `${theme.spacing() * 1.}px 0`,\n  },\n  tooltipInfoStyles: {\n  },\n  tooltipInfoContainer: {\n    padding: '10px',\n    color: '#F0AD4E',\n    width: 'auto',\n  },\n  itemIcon: {\n    fontSize: '1rem',\n  },\n  menuItemStyles: {\n    justifyContent: 'space-between',\n  },\n  divider: {\n    width: `calc(100% - ${theme.spacing() * 4}px)`,\n    margin: `0 auto`,\n    color: theme.palette.primary.dark\n  },\n  buttonsContainer: {\n    flex: 2,\n    display: 'flex',\n    justifyContent: 'space-evenly'\n  },\n  completeButton: {\n    background: theme.palette.primary.main,\n    color: theme.palette.common.white,\n  },\n  appBar: {\n    zIndex: theme.zIndex.appBar - 1,\n  },\n  ruleWarningsIcon: {\n    color: theme.palette.grey[600]\n  },\n  toolbar: {\n    paddingTop: theme.spacing(),\n    paddingBottom: theme.spacing(),\n  },\n  suggestionsContainer: {\n    flexGrow: 1\n  },\n  drawingRulesIcons: {\n    margin: theme.spacing()\n  },\n  iconFont: {\n    fontSize: 65,\n    color: `${theme.palette.primary[500]}`,\n  },\n  accessibilitySwitches: {\n    padding: theme.spacing(1, 4),\n  },\n});\n\ntype ProductSelectionProps = IProductSelectionControl & WithAtsApi & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithAmplitudeData;\nclass ProductSelectionControl extends React.Component<ProductSelectionProps, {}> {\n  public state = {\n    drawingNameFilter: '',\n    productSelectionControlGroup: true,\n    clickedSpecProductId: null,\n    deleteModalOpen: false,\n    selectedDrawingId: null,\n    selectedDrawingName: '',\n    ventilatorToolMenuAnchorEl: null,\n  };\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new ResetEditingProductIndexAction());\n    dispatch(new SetOverlayComponentPropsAction({\n      id: ALTERNATIVES_DROP_DOWN_ID,\n      props: {\n        anchorEl: null\n      }\n    }));\n    this.clearFilters();\n  }\n\n  public componentDidMount() {\n    const {\n      mode,\n      selectedSpec,\n      dispatch,\n      productCategory,\n      selectedDrawing,\n    } = this.props;\n\n    this.toggleOnChildHeightIfDayCare();\n\n    if (mode === Mode.project && !selectedSpec?.get('id')) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n\n    if (selectedDrawing?.get('useAccessibilityStandard') && ADA_BLACKLIST_CATEGORY_IDS.includes(productCategory?.get('id'))) {\n      this.handleAdaChange(false);\n    }\n  }\n\n  public componentDidUpdate(prevProps: Readonly<ProductSelectionProps>, prevState: Readonly<{}>, snapshot?: any): void {\n    const {\n      t,\n      dispatch,\n      productCategory,\n      selectedDrawing,\n    } = this.props;\n\n    if (productCategory && productCategory.get('id') !== prevProps.productCategory?.get('id')) {\n      if (!BARIATRIC_COMPATIBLE_CATEGORY_IDS.includes(productCategory.get('id'))) {\n        const attributeOptions = [{key: 'use', value: 'bariatric', multi: true, label: t('Accessibility.bariatric')}];\n        dispatch(new SeriesFilterRemoveAction(attributeOptions));\n        dispatch(new ProductFilterRemoveAction(attributeOptions));\n      }\n      if (!CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS.includes(productCategory.get('id'))) {\n        const attributeOptions = [{key: 'use', value: 'child', multi: true, label: t('Accessibility.childHeight')}]\n        dispatch(new SeriesFilterRemoveAction(attributeOptions));\n        dispatch(new ProductFilterRemoveAction(attributeOptions));\n      } else {\n        this.toggleOnChildHeightIfDayCare();\n      }\n      if (selectedDrawing?.get('useAccessibilityStandard') && ADA_BLACKLIST_CATEGORY_IDS.includes(productCategory.get('id'))) {\n        this.handleAdaChange(false);\n      }\n    }\n  }\n\n  public paginationRefPrevious: any = React.createRef();\n  public paginationRefNext: any = React.createRef();\n\n  public toggleOnChildHeightIfDayCare = () => {\n    const {\n      t,\n      dispatch,\n      selectedSpec,\n      skipRules,\n      productCategory,\n    } = this.props;\n    const projectId = selectedSpec?.get('projectId')\n    const isDaycareBuildingType = selectedSpec?.getIn(['building', 'buildingClasses'])?.find((buildingClass) => {\n      return buildingClass.get('buildingTypes').find((buildingType) => {\n        return buildingType.get('id') === 17;\n      });\n    });\n\n    if (projectId && isDaycareBuildingType?.size && CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS.includes(productCategory?.get('id'))) {\n      dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: SeriesFilterAddAction,\n          productAction: ProductFilterAddAction\n        },\n        attributeOptions: [{key: 'use', value: 'child', multi: true, label: t('Accessibility.childHeight')}],\n        skipRules,\n      }));\n    }\n  }\n\n  public onDragEnd = (result: any) => {\n    console.error('onDragEnd', { // tslint:disable-line\n      result,\n    });\n\n    // // dropped outside the list\n    if (!result.destination) {\n      return;\n    }\n    const {\n      selectedSpec,\n      dispatch,\n    } = this.props;\n\n    const fromIndex = result.source.index;\n    const toIndex = result.destination.index;\n\n    const drawings = selectedSpec.get('drawings');\n    const drawing = drawings.get(fromIndex);\n    if(drawing != null){\n      const specId = selectedSpec.get('id');\n      dispatch(new UpdateSpecAction({\n        specId,\n        spec: new Spec({id: specId, drawings: drawings.delete(fromIndex).insert(toIndex, drawing)}).toImmutable(),\n      }));\n    }\n  }\n\n  public clearFilters = () => {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(new SeriesFilterClearAction({}));\n    this.props.reset();\n  }\n\n  public deleteProduct = (productIndex: number) => () => {\n    const {\n      dispatch,\n      selectedSpec,\n      selectedDrawing,\n    } = this.props;\n    if(productIndex !== -1){\n      dispatch(new ResetEditingProductIndexAction());\n      dispatch(\n        new UpdateDrawingAction({\n          drawingId: selectedDrawing.get('id'),\n          drawing: selectedDrawing.update('products', List(),\n          (productList: List<IMap<Product>>) =>\n            productList.remove(productIndex)\n          ),\n          updateAccessible: true,\n        })\n      );\n      dispatch(new SelectSeriesAction(-1));\n    }\n  }\n\n  public addProduct = () => (missingRule: IMap<MissingRule>) => {\n    const {\n      dispatch,\n      specType,\n    } = this.props;\n    dispatch(new SelectNewCategoryAction({missingRule}));\n  }\n\n  public toggleOpenHandler = (productId: any) => {\n    productId === this.state.clickedSpecProductId\n      ? this.setState({\n        clickedSpecProductId: null,\n      })\n      : this.setState({\n        clickedSpecProductId: productId,\n      })\n  }\n\n  public handleAdaChange = (value: boolean) => {\n    const {\n      dispatch,\n      selectedDrawing,\n    } = this.props;\n\n    const drawingId = selectedDrawing.get('id');\n\n    dispatch(new UpdateDrawingAction({\n      drawingId,\n      drawing: fromJS({\n        useAccessibilityStandard: value\n      }),\n      updateAccessible: true\n    }));\n  }\n\n  public selectCategoryWithoutValidate = () => {\n    const {\n      dispatch,\n    } = this.props;\n\n    // sets state to skip rule engine on ProductCategorySelection\n    // in order to let uses to choose any product that's not restricted by rules\n    // in case a drawing is already complete, a user might want to skip rules to add another product\n    dispatch(new SkipRuleEngineAction(true));\n  }\n\n  public checked = (key: string, value: string, label: string) => (e: React.ChangeEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      skipRules,\n    } = this.props;\n\n    const isSelected = (e.target as HTMLInputElement).checked;\n    const attributeOptions = [{key, value, multi: true, label}];\n\n    dispatch(new SeriesLoadingAction());\n\n    // if its not 'selected', it will add or remove\n    isSelected\n    ? dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: SeriesFilterAddAction,\n          productAction: ProductFilterAddAction\n        },\n        attributeOptions,\n        skipRules,\n      }))\n    : dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: SeriesFilterRemoveAction,\n          productAction: ProductFilterRemoveAction\n        },\n        attributeOptions,\n        skipRules\n      }));\n  }\n\n  public openVentilatorToolMenu = (e: React.MouseEvent<HTMLElement>) => {\n    this.setState({ventilatorToolMenuAnchorEl: e.currentTarget});\n  }\n\n  public closeVentilatorToolMenu = () => {\n    this.setState({ventilatorToolMenuAnchorEl: null});\n  }\n\n  public openVentilatorTool = (modalId: string) => () => {\n    const {\n      dispatch,\n    } = this.props;\n\n    this.closeVentilatorToolMenu();\n    dispatch(new ToggleOverlayComponentAction({open: true, id: modalId }));\n  }\n\n  public FeatureButton = () => {\n    const {\n      productCategory,\n      selectedSpec,\n      userHasBuildSizerWaterHeaterAcl,\n      config,\n      amplitudeData,\n      dispatch,\n      t,\n    } = this.props;\n\n    const categoryId = productCategory?.get('id');\n    const hasProject = Boolean(selectedSpec.get('projectId'));\n    const countryId = selectedSpec.getIn(['address', 'country', 'id']);\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], null);\n    const sizerType = APP_CATEGORIES_MAP.getIn([apiKey, 'byId', String(categoryId)]);\n\n    if (userHasBuildSizerWaterHeaterAcl && Boolean(sizerType)) {\n      return (\n        <Tooltip title={t('ProductCategorySelection.waterHeaterSizingTool')}>\n          <Button\n            variant='outlined'\n            color='primary'\n            style={{marginLeft: 'auto'}}\n            startIcon={<StraightenIcon />}\n            onClick={() => {\n              dispatch(new SetOverlayComponentPropsAction({\n                id: BUILD_SIZER_MODAL_ID,\n                props: {\n                  categoryId\n                },\n              }));\n              dispatch(new ToggleOverlayComponentAction({open: true, id: BUILD_SIZER_MODAL_ID }))\n            }}\n          >\n            {'BuildSizer'}\n          </Button>\n        </Tooltip>\n      );\n    }\n\n    if (categoryId === PUMP_CATEGORY_ID) {\n      return (\n        <Button\n          color='primary'\n          href={ZOELLER_PUMP_SIZING_TOOL_URL}\n          target='_blank'\n          rel='noopener'\n          style={{marginLeft: 'auto'}}\n          endIcon={<LaunchIcon />}\n          onClick={() => {\n            amplitude.logEvent(AMPLITUDE_EVENT.openCategorySpecificTool, amplitudeData({\n              categoryId: categoryId,\n              categryName: productCategory.get('name'),\n              url: ZOELLER_PUMP_SIZING_TOOL_URL\n            }));\n          }}\n        >\n          {t('ProductCategorySelection.pumpSizingTool')}\n        </Button>\n      );\n    } else if (categoryId === PIPE_CATEGORY_ID) {\n      return (\n        <Button\n          color='primary'\n          style={{marginLeft: 'auto'}}\n          startIcon={<FilterListIcon />}\n          onClick={() => {\n            dispatch(new ToggleOverlayComponentAction({open: true, id: PIPE_FILTER_MODAL }))\n          }}\n        >\n          {t('pipeStandardsModal.filterButton')}\n        </Button>\n      );\n    } else if (categoryId === VENTILATOR_CATEGORY_ID) {\n      const {\n        ventilatorToolMenuAnchorEl,\n      } = this.state;\n\n      return (\n        <>\n          <Tooltip title={t('ProductCategorySelection.ventilatorSelectionTooltip')}>\n            <Button\n              startIcon={<StraightenIcon />}\n              variant='contained'\n              color='primary'\n              style={{marginLeft: 'auto'}}\n              onClick={this.openVentilatorToolMenu}\n            >\n              {t('ProductCategorySelection.ventilatorSelectionToolButton')}\n            </Button>\n          </Tooltip>\n          <Menu\n            anchorEl={ventilatorToolMenuAnchorEl}\n            open={Boolean(ventilatorToolMenuAnchorEl)}\n            onClose={this.closeVentilatorToolMenu}\n            getContentAnchorEl={null}\n            anchorOrigin={{vertical: 'bottom', horizontal: 'left'}}\n            transformOrigin={{vertical: 'top', horizontal: 'left'}}\n            PaperProps={{\n              style: {\n                borderRadius: 0,\n                minWidth: ventilatorToolMenuAnchorEl ? (ventilatorToolMenuAnchorEl as HTMLElement).offsetWidth : undefined,\n              },\n            }}\n          >\n            <MenuItem onClick={this.openVentilatorTool(VENTILATOR_FILTER_MODAL)}>\n              {t('ProductCategorySelection.ventilatorMotorSelection')}\n            </MenuItem>\n            <MenuItem onClick={this.openVentilatorTool(PSYCHROMETRICS_ANALYSIS_MODAL)}>\n              {t('ProductCategorySelection.ventilatorPsychrometricsAnalysis')}\n            </MenuItem>\n          </Menu>\n        </>\n      );\n    } else if (categoryId === WATER_HEATER_CATEGORY_ID && hasProject) {\n      let link;\n      if (apiKey === AOSMITH_SPEC_ID) {\n        link = countryId === GEOLOCATION_ID.canada ? 'https://sizing.hotwater.com/en_CA/' : 'https://sizing.hotwater.com/en_US/';\n      } else {\n        link = countryId === GEOLOCATION_ID.usa ? 'https://www.bradfordwhiterightspec.com/Sizing/' : 'https://sizing.hotwater.com/';\n      }\n      return (\n        <Button\n          color='primary'\n          href={link}\n          target='_blank'\n          rel='noopener'\n          style={{marginLeft: 'auto'}}\n          endIcon={<LaunchIcon />}\n          onClick={() => {\n            amplitude.logEvent(AMPLITUDE_EVENT.openCategorySpecificTool, amplitudeData({\n              categoryId: categoryId,\n              categryName: productCategory.get('name'),\n              url: link\n            }));\n          }}\n        >\n          {t('ProductCategorySelection.waterHeaterSizingTool')}\n        </Button>\n      );\n    }\n\n    return null;\n  }\n\n  public render() {\n    const {\n      classes,\n      productCategory,\n      productTypeToProductCategoryReverseMap,\n      productCategoryListFormValues,\n      selectedDrawing,\n      selectedMissingCategories,\n      selectedRuleFails,\n      t,\n      ProductCategoryPath,\n      config,\n      dispatch,\n      projects,\n      specType,\n      mode,\n      selectedSpec,\n      seriesFilters,\n      templateTranslationObject,\n      isUpdatingDrawing,\n      newDrawingId,\n      atsApi,\n      amplitudeData,\n      isGuestUser\n    } = this.props;\n\n    const useADA = selectedDrawing ? selectedDrawing.get('useAccessibilityStandard') : false;\n    const drawingIsAccessible = selectedDrawing && selectedDrawing.get('accessible');\n    const projectIdFromSelectedSpec = selectedSpec && selectedSpec.get('projectId');\n\n    // complete on no more rulefails.\n    const selectedProducts = selectedDrawing ? selectedDrawing.get('products') : List();\n\n    // compelte always working as long as you add one item\n    const completeButtonProps = (selectedProducts.count() !== 0) ? {\n      color: 'primary' as 'primary',\n      disabled: false,\n    } : {\n      disabled: true,\n    };\n\n    const {\n      drawingNameFilter,\n      selectedDrawingName,\n      deleteModalOpen,\n    } = this.state;\n\n    const selectedDrawings: List<IMap<Drawing>> = (selectedSpec != null && selectedSpec.count())  ? selectedSpec.get('drawings') : List<IMap<Drawing>>();\n    const filteredSelectedDrawings = selectedDrawings.filter((drawing: IMap<Drawing>) => {\n      return (drawing.get('name') || '').indexOf(drawingNameFilter) !== -1;\n    })\n\n    const selectedDrawingId: number = selectedDrawing ? selectedDrawing.get('id') : -1;\n\n    const imgSize = 65;\n    const mainImage = productCategory && productCategory.getIn(['media', 'images', 'main']);\n    const media = `${mainImage}|resize:${imgSize},${imgSize}`;\n    const fontClass = productCategory && productCategory.get('fontClass');\n\n    const displayType = productCategoryListFormValues != null ? productCategoryListFormValues.get('category') : CategoryDisplayType.DISPLAY_BY_CATEGORY;\n    const displayByCategory = displayType === CategoryDisplayType.DISPLAY_BY_CATEGORY;\n    const subtitle = productCategory && productCategory.get('name');\n\n    const ruleFails = selectedRuleFails;\n    const tooltipInfo = <div className={classes.tooltipInfoStyles}>\n      <ul style={{listStyle: 'none', padding: 0}}>\n        {\n          ruleFails.map((fail: any, key: string) => {\n            return <li key={key}>{fail.getIn(['rule', 'description'])}</li>\n          }).valueSeq().toArray()\n        }\n      </ul>\n    </div>;\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], null);\n\n    const ruleWarnings = (selectedProducts.count() !== 0 && ruleFails.count() > 0)\n      ? <Tooltip\n          title={tooltipInfo}\n        >\n          {\n            (apiKey === SPEC_TOOL_ID || apiKey === PROJECT_TRACKER_ID)\n            ? <WarningRoundedIcon />\n            : <Info className={classes.ruleWarningsIcon}/>\n          }\n        </Tooltip>\n      : null;\n\n    // const drawingAdaCertifiedIcon = drawingIsAccessible &&\n    //   <Tooltip title='This drawing is Barrier Free' placement='right'>\n    //     <img src={barrierFreeIcon} alt='ADA certified logo'/>\n    //   </Tooltip>\n\n    const ProductCategorySelectionLink = (props: any) => <Link onClick={this.selectCategoryWithoutValidate} to={ProductCategoryPath} {...props} />;\n\n    const goto = (path) => {\n      dispatch(push(path));\n    };\n\n    const selectedProjectId = selectedSpec.get('projectId') || '';\n    let projectpath;\n    let specpath;\n    switch(mode) {\n      case Mode.master: {\n        projectpath = `${MASTER_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${MASTER_DETAIL_PATH}/${selectedProjectId}`;\n        break;\n      }\n      case Mode.masterTemplate: {\n        projectpath = `${TEMPLATE_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${TEMPLATE_DETAIL_PATH}/${selectedProjectId}`;\n        break;\n      }\n      default: {\n        projectpath = `${PROJECT_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${SPEC_DETAIL_PATH}/${selectedSpec.get('id') || ''}`;\n      }\n    }\n    const projectName = (selectedSpec.get('projectTitle') || projects.getIn([selectedSpec.get('projectId'), 'name']));\n    const specName = (selectedSpec.get('name') || t('ProductSelection.unnamed'));\n    const projectAndSpecString = [projectName, specName].filter(x => x).join(' - ');\n    const drawingName = (selectedDrawing ? selectedDrawing.get('name') || t('ProductSelection.unnamed') : t('ProductSelectionGroupDrawingSettings.noDrawingSelected'));\n    const disableCompleteButton = !Boolean(selectedDrawing && selectedDrawing.get('products').count()) || (`/${window.location.pathname.replace(getLocalePrefix(), '').split('/')[1]}` !== PRODUCT_SELECTION_PATH);\n    const categoryId = productCategory?.get('id');\n\n    let breadcrumbs;\n    switch(mode) {\n      case Mode.master: {\n        breadcrumbs = [\n          {\n            label: t('ProductCategorySelection.myMasters'),\n            onClick: () => goto(MASTER_LIST_PATH)\n          },\n          projectAndSpecString && {\n            label: projectAndSpecString,\n            onClick: () => goto(projectpath)\n          },\n          drawingName && {label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH)}\n        ];\n        break;\n      }\n      case Mode.masterTemplate: {\n        breadcrumbs = [\n          {\n            label: t('ProductCategorySelection.myTemplates', templateTranslationObject),\n            onClick: () => goto(TEMPLATE_LIST_PATH)\n          },\n          projectAndSpecString && {\n            label: projectAndSpecString,\n            onClick: () => goto(projectpath)\n          },\n          drawingName && {label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH)}\n        ];\n        break;\n      }\n      default: {\n        breadcrumbs = [\n          ...(\n            mode === Mode.testProject\n              ? [{label: t('ProductCategorySelection.testProjectListBreadCrumb'), onClick: () => goto(TEST_PROJECT_LIST_PATH)}]\n              : mode === Mode.spec\n                    ? [{label: t('ProductCategorySelection.mySpecifications'), onClick: () => goto(SPECIFICATION_LIST_PATH)}]\n                    : [{label: t('ProductCategorySelection.myProjects'), onClick: () => goto(PROJECT_LIST_PATH)}]\n          ),\n          projectAndSpecString && { label: projectAndSpecString, onClick: () => goto(mode === Mode.spec ? specpath : projectpath)},\n          drawingName && { label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH) }\n        ];\n      }\n    }\n\n    const backTo = () => {\n      switch (mode) {\n        case Mode.master : return t('ProductCategorySelection.backToMaster');\n        case Mode.masterTemplate : return t('ProductCategorySelection.backToTemplate', templateTranslationObject);\n        case Mode.testProject : return t('ProductCategorySelection.backToTestProject');\n        case Mode.project: return t('ProductCategorySelection.backToProject');\n        default : return t('ProductCategorySelection.backToSpec');\n      }\n    }\n\n    const handleCompleteOrGoBack = () => {\n      dispatch(new AutoSetDrawingNameAction({}));\n    };\n\n    return (\n      <>\n        <AppBar position='sticky' color='inherit' elevation={1} className={classes.appBar}>\n          {mode === Mode.productCatalogue\n            ? <BreadcrumbProjectSpecBar\n                buttons={[\n                  {\n                    label: t('formButtons.back'),\n                    onClick: () => goto(PRODUCT_CATEGORY_PATH),\n                    buttonProps: {\n                      variant: isGuestUser ? 'outlined' : 'contained'\n                    }\n                  }\n                ]}\n              />\n            : <BreadcrumbProjectSpecBar\n                breadcrumbs={breadcrumbs}\n                buttons={[\n                  {\n                    label: backTo(),\n                    onClick: handleCompleteOrGoBack,\n                    isLoading: isUpdatingDrawing,\n                    buttonProps: {\n                      disabled: isUpdatingDrawing,\n                    }\n                  },\n                  {\n                    label: t('ProductSelection.complete'),\n                    onClick: handleCompleteOrGoBack,\n                    isLoading: isUpdatingDrawing,\n                    buttonProps: {\n                      disabled: disableCompleteButton || isUpdatingDrawing,\n                      className: 'productSelectionTour-2',\n                        variant: isGuestUser ? 'outlined' : 'contained',\n                    },\n                  }\n                ]}\n              />\n          }\n          <Toolbar className={classes.toolbar}>\n            <Grid\n              item={true}\n              md={3}\n              container={true}\n              spacing={1}\n              wrap='nowrap'\n            >\n              <Grid\n                item={true}\n              >\n\n                {\n                  mainImage && (fontClass === 'icon-placeholder')\n                  ? <Image\n                      src={media || ''}\n                      width={`${imgSize}px`}\n                      aspectRatio={'100%'}\n                      fromService={true}\n                    />\n                  : <span className={fontClass + ' ' + classes.iconFont}></span>\n                }\n              </Grid>\n              <Grid\n                item={true}\n              >\n                <Grid\n                  container={true}\n                  direction='row'\n                  wrap='nowrap'\n                  spacing={1}\n                >\n                  <Grid\n                    item={true}\n                  >\n                    <ProductCategorySelectionLink>\n                      <Typography variant='body1'>{t('ProductCategorySelection.category')}</Typography>\n                    </ProductCategorySelectionLink>\n                  </Grid>\n                  <Grid item={true}>\n                    <Typography variant='body1'>/</Typography>\n                  </Grid>\n                  <Grid item={true}>\n                    <Typography variant='body1'>{subtitle}</Typography>\n                  </Grid>\n                </Grid>\n                <Grid container={true}>\n                  <Grid\n                    item={true}\n                    container={true}\n                    wrap='nowrap'\n                    justify='center'\n                    alignItems='center'\n                    className={classes.tooltipInfoContainer}\n                  >\n                    <Grid\n                      className={classes.drawingRulesIcons}\n                    >\n                      {ruleWarnings}\n                    </Grid>\n                  </Grid>\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid\n              item={true}\n              className={classes.suggestionsContainer}\n            >\n              <Grid\n                container={true}\n                direction='row'\n                wrap='nowrap'\n                justify='space-around'\n              >\n                {\n                  selectedDrawing != null && <Grid container={true} wrap='nowrap' alignItems='center'>\n                    {selectedDrawing.get('products').count() !== 0 && <div ref={this.paginationRefPrevious} />}\n                      <Pagination\n                        localKey={`ProductSelectionPagination-drawings${selectedDrawingId}`}\n                        pageStart={0}\n                        perPage={5}\n                        previousEl={[\n                          this.paginationRefPrevious.current,\n                        ]}\n                        nextEl={[\n                          this.paginationRefNext.current,\n                        ]}\n                        paginationEl={[]}\n                        template={ProductStep}\n                        records={\n                          selectedDrawing && selectedDrawing.get('products').map((product: IMap<Product>, index: number) => {\n                            return {\n                              key: `product${product.get('id')}${index}`,\n                              deleteProduct: this.deleteProduct(index),\n                              addProduct: this.addProduct(),\n                              clickedSpecProductId: this.state.clickedSpecProductId,\n                              toggleOpenHandler: this.toggleOpenHandler,\n                              product,\n                              index,\n                            };\n                          })\n                          .toList().concat(\n                            selectedMissingCategories.map((item: IMap<MissingRule>, index: number) => {\n                              return {\n                                key: `step${index}}`,\n                                addProduct: this.addProduct(),\n                                step: item,\n                              };\n                            })\n                          ).valueSeq().toArray() || []\n                        }\n                        propsToTemplate={{\n                          specType\n                        }}\n                      />\n                    {selectedDrawing.get('products').count() !== 0 && <div ref={this.paginationRefNext} />}\n                  </Grid> || null\n                }\n              </Grid>\n            </Grid>\n          </Toolbar>\n          <Grid container={true} className={classes.accessibilitySwitches} alignItems='center'>\n            <Grid\n              item={true}\n              md={3}\n              container={true}\n              spacing={1}\n              wrap='nowrap'\n            >\n              <Tooltip title={projectIdFromSelectedSpec && selectedDrawing ? t('Accessibility.tooltip1') : t('Accessibility.tooltip2')}>\n                <Typography>{t('Accessibility.label')}</Typography>\n              </Tooltip>\n            </Grid>\n            {\n              !ADA_BLACKLIST_CATEGORY_IDS.includes(categoryId) && (\n                <BarrierFreeButton\n                  toolTipTitle={t('Accessibility.ADABarrierFree')}\n                  buttonText={t('Accessibility.title')}\n                  checked={useADA}\n                  onChange={() => this.handleAdaChange(!useADA)}\n                  value={useADA}\n                  disabled={projectIdFromSelectedSpec && selectedDrawing ? false : true}\n                  className='productSelectionTour-3'\n                />\n              )\n            }\n            {\n              BARIATRIC_COMPATIBLE_CATEGORY_IDS.includes(categoryId) && (\n                <Tooltip title={t('Accessibility.bariatric')}>\n                  <Grid\n                    container={true}\n                    style={{width: 'auto', marginRight: 24}}\n                    alignItems='center'\n                  >\n                    <img src={bariatricIcon} alt='bariatric icon'/>\n                    <Switch\n                      checked={Boolean(seriesFilters.get('use')?.find(x => x.get('value') === 'bariatric'))}\n                      onChange={(e)=> {this.checked('use', 'bariatric', t('Accessibility.bariatric'))(e)}}\n                      value={true}\n                      disabled={projectIdFromSelectedSpec && selectedDrawing ? false : true}\n                      inputProps={{ 'aria-label': 'Bariatric toggle' }}\n                    />\n                  </Grid>\n                </Tooltip>\n              )\n            }\n            {\n              CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS.includes(categoryId) && (\n                <Tooltip title={t('Accessibility.childHeight')}>\n                <Grid\n                  container={true}\n                  style={{width: 'auto', marginRight: 24}}\n                  alignItems='center'\n                >\n                  <img src={childHeightIcon} alt='children icon'/>\n                  <Switch\n                    checked={Boolean(seriesFilters.get('use')?.find(x => x.get('value') === 'child'))}\n                    onChange={(e)=> {this.checked('use', 'child', t('Accessibility.childHeight'))(e)}}\n                    value={true}\n                    disabled={projectIdFromSelectedSpec && selectedDrawing ? false : true}\n                    inputProps={{ 'aria-label': 'Child Height toggle' }}\n                  />\n                </Grid>\n              </Tooltip>\n              )\n            }\n            {this.FeatureButton()}\n          </Grid>\n          <AlternativeDropDown />\n          <CurvePreviewModal />\n          {\n            categoryId === PIPE_CATEGORY_ID && <PipeFilterModal />\n          }\n          {\n            categoryId === VENTILATOR_CATEGORY_ID && <>\n              <VentilatorFilterModal />\n              <PsychrometricsAnalysisModal />\n            </>\n          }\n        </AppBar>\n      </>\n    );\n  }\n}\n\n\nconst mapStateToProps = (state, ownProps) => {\n  const mode = makeSelectMode()(state);\n  const normalSpec = makeSelectSpec()(state);\n  const masterSpec = makeSelectMasterProjectspec()(state);\n  const templateSpec = makeSelectTemplateProjectSpec()(state);\n  const identityObject = makeSelectIdentityObject()(state);\n  const isGuestUser = !identityObject;\n  let selectedSpec = normalSpec || Map();\n  let selectedDrawing = makeSelectDrawing()(state);\n  switch (mode) {\n    case Mode.master: {\n      selectedSpec = masterSpec || Map();\n      selectedDrawing = makeSelectMasterDrawing()(state);\n      break;\n    }\n    case Mode.masterTemplate: {\n      selectedSpec = templateSpec || Map();\n      selectedDrawing = makeSelectTemplateDrawing()(state);\n      break;\n    }\n  }\n\n  return {\n    mode,\n    selectedSpec,\n    selectedDrawing,\n    isGuestUser,\n    ...createStructuredSelector({\n      productCategory: makeSelectProductCategory(),\n      selectedMissingCategories: makeSelectMissingCategory(),\n      seriesFilters: selectSeriesFilters(),\n      selectedRuleFails: makeSelectRuleFails(),\n      productTypeToProductCategoryReverseMap: makeSelectProductTypeIdToProductCategoryReverseMap(),\n      productCategoryListFormValues: getFormValues(PRODUCT_SELECTION_GROUP_FORM),\n      config: makeSelectConfig(),\n      projects: makeSelectProjects(),\n      skipRules: makeSelectSkipRuleEngine(),\n      templateTranslationObject: makeSelectTemplateTranslationObject(),\n      isUpdatingDrawing: makeSelectIsUpdatingDrawing(),\n      newDrawingId: makeSelectNewDrawingId(),\n      userHasBuildSizerWaterHeaterAcl: makeSelectUserHasBuildSizerWaterHeaterAcl(),\n    })(state)\n  };\n};\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductSelectionControlComponentProps>> (\n  withTranslation('translations'),\n  withAtsApi(),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: PRODUCT_SELECTION_GROUP_FORM,\n    destroyOnUnmount: false,\n  }),\n  withStyles(styles),\n)(ProductSelectionControl);\n","import * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n  WithTheme,\n  Typography,\n  Button,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  isNotEmptyStringRequired,\n} from '../../../validators';\nimport {\n  Map,\n  List,\n  Set,\n  is,\n} from 'immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {ListItem, Project, Spec} from '../../../models';\nimport { SpecModalFormVariant } from '../../CreateNewSpecModal/constants';\nimport {\n  CreateSpecAction,\n  EditSpecTitleAction,\n  CreateMasterSpecAndRedirectAction,\n  SetModeAction,\n  UpdateMasterSpecAndRedirectAction,\n  UpdateTemplateSpecAndRedirectAction, CreateTemplateSpecAndRedirectAction,\n} from '../../../modules/SpecModule/actions';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../../../components/FieldTextField';\nimport { AtsSvgDrawing } from '../../../components/AtsSvg';\nimport {\n  makeSelectProject,\n  makeSelectProjectIdForCreatingSpec,\n  makeSelectSelectedMasterProjectId,\n  makeSelectSelectedTemplateProjectId\n} from '../../../modules/ProjectModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {AMPLITUDE_EVENT, Mode} from '../../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { makeSelectConfigAtsSvgProps } from '../../../modules/AtsModule/selectors';\nimport ErrorIcon from '@material-ui/icons/Error';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  titleContainer: {\n    marginTop: theme.spacing() * 4,\n  },\n  icon: {\n    margin: theme.spacing() * 2,\n    fontSize: theme.spacing() * 6,\n    width: 72,\n    height: 72\n  },\n  inputContainer: {\n    maxWidth: 393,\n  },\n  finishButton: {\n    padding: `${theme.spacing() * 0.5}px ${theme.spacing() * 6}px`\n  },\n  warning: {\n    color: theme.palette.warning.main\n  },\n});\n\ninterface ISpecFormComponentProps {\n  variantSet: Set<SpecModalFormVariant>;\n  isProductGroup?: boolean;\n  data?: IMap<Spec>;\n  form?: string;\n  isAtsSpecTool?: boolean;\n  onSubmit?: (values, projectIdForCreatingSpec, isTestProject) => void;\n}\n\ninterface ISpecForm extends ISpecFormComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  today: Date;\n  adminDivisions: Map<number, string>;\n  initialValues: IMap<Project>;\n  editMode: boolean;\n  forProjectTracker: boolean;\n  projectIdForCreatingSpec: number;\n  masterProjectId: number;\n  templateProjectId: number;\n  mode: Mode;\n  project: IMap<Project>;\n  configAtsSvgProps: object;\n}\nexport const FORM_NAME = 'NewSpecModalForm';\ntype NewSpecModalProps = WithTranslation & ISpecForm & WithTheme & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nclass NewSpecModalForm extends React.PureComponent<NewSpecModalProps, { isLoading: boolean }> {\n\n  public state = {\n    isLoading: false,\n  };\n  public componentDidUpdate(prevProps: NewSpecModalProps) {\n    const {\n      initialValues,\n      mode,\n      dispatch\n    } = this.props;\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n\n    if (mode === Mode.master) {\n      dispatch(new SetModeAction(Mode.master));\n    }\n    if (mode === Mode.masterTemplate) {\n      dispatch(new SetModeAction(Mode.masterTemplate));\n    }\n  }\n\n  public componentWillUnmount() {\n    this.props.reset();\n  }\n\n  public onSubmit = (values: any) => {\n    const {\n      dispatch,\n      projectIdForCreatingSpec,\n      editMode,\n      masterProjectId,\n      templateProjectId,\n      mode,\n      project,\n      amplitudeData,\n      onSubmit,\n    } = this.props;\n\n    const projectName = projectIdForCreatingSpec !== -1 ? project.get('name') : null;\n    const isTestProject = projectIdForCreatingSpec !== -1 ? project.get('status') === 'test' : false;\n\n    let projectType;\n    switch (mode) {\n      case Mode.master: {\n        projectType = 'Master';\n        break;\n      }\n      case Mode.masterTemplate: {\n        projectType = 'Template';\n        break;\n      }\n      default: {\n        projectType = 'Project';\n      }\n    }\n    const analyticTracking = () => {\n      amplitude.logEvent(AMPLITUDE_EVENT.specCreated,\n        amplitudeData({\n          projectName: projectName ? `${projectName}(${projectType})` : '-'\n        }));\n    };\n\n    this.setState({\n      isLoading: true\n    });\n    if (editMode) {\n      this.onEdit(values);\n    } else {\n      if (onSubmit) {\n        onSubmit(values, projectIdForCreatingSpec, isTestProject);\n      } else {\n        switch (mode) {\n          case Mode.master: {\n            dispatch(new CreateMasterSpecAndRedirectAction({projectId: masterProjectId, spec: values}));\n            break;\n          }\n          case Mode.masterTemplate: {\n            dispatch(new CreateTemplateSpecAndRedirectAction({projectId: templateProjectId, spec: values}));\n            break;\n          }\n          default: {\n            dispatch(new CreateSpecAction({ projectId: projectIdForCreatingSpec, spec: values, isTestSpec: isTestProject }));\n          }\n        }\n      }\n      analyticTracking();\n    }\n  }\n\n  public onEdit = (values: any) => {\n    const {\n      dispatch,\n      data,\n      mode\n    } = this.props;\n\n    const specId = data.get('id');\n    if (mode === Mode.master) {\n      dispatch(new UpdateMasterSpecAndRedirectAction({specId, body: values.toJS()}));\n    } else if (mode === Mode.masterTemplate) {\n      dispatch(new UpdateTemplateSpecAndRedirectAction({specId, body: values.toJS()}));\n    } else {\n      dispatch(new EditSpecTitleAction({\n        specId,\n        values\n      }));\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      t,\n      editMode,\n      classes,\n      data,\n      theme,\n      isAtsSpecTool,\n      configAtsSvgProps,\n      isProductGroup = true,\n    } = this.props;\n\n    return (\n      (editMode && data == null)\n      ? <Grid\n          container={true}\n          justify='center'\n          alignItems='center'\n          style={{height: '100%'}}\n        >\n          <Typography>{t('generalLoading.loading')}</Typography>\n        </Grid>\n      : <form\n        onSubmit={handleSubmit(this.onSubmit)}\n      >\n        <Grid\n          container={true}\n          justify='center'\n          alignItems='center'\n          className={classes.titleContainer}\n        >\n          <Grid\n            item={true}\n          >\n            <AtsSvgDrawing\n              width='72'\n              height='72'\n              color={{\n                backgroundColor: isAtsSpecTool ? theme.palette.secondary[200] : theme.palette.primary[200],\n                shadowColor: isAtsSpecTool ? theme.palette.secondary.main : theme.palette.primary.main\n              }}\n              margin={String(theme.spacing(2))}\n              {...configAtsSvgProps}\n            />\n          </Grid>\n          <Grid\n            item={true}\n          >\n            <Typography\n              variant='h4'\n              className={classes.title}\n            >\n              {\n                editMode\n                  ? isProductGroup\n                    ? t('createNewSpec.editProductGroupTitle')\n                    : t('createNewSpec.editTitle')\n                  : isProductGroup\n                    ? t('createNewSpec.newProductGroupTitle')\n                    : t('createNewSpec.NewTitle')\n              }\n            </Typography>\n          </Grid>\n        </Grid>\n        <Grid\n          container={true}\n          direction='column'\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            direction='row'\n            justify='center'\n          >\n            <Grid\n              item={true}\n              xs={4}\n              className={classes.inputContainer}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                component={FieldTextField}\n                name='name'\n                validate={isNotEmptyStringRequired}\n                props={{\n                  label: isProductGroup ? t('createNewSpec.productGroupTitle') : t('createNewSpec.Title'),\n                  require: true,\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n              />\n              <Grid container={true} alignItems='center' style={{ padding: '10px 0 50px 0', gap: '5px'}} wrap='nowrap'>\n                <ErrorIcon className={classes.warning} fontSize='small' />\n                <Typography variant='caption'>{t('createNewSpec.warning')}</Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n          <Grid\n            container={true}\n            direction='row'\n            justify='center'\n            alignItems='center'\n          >\n            <Button\n              variant='contained'\n              color='primary'\n              className={classes.finishButton}\n              type='submit'\n              disabled={this.state.isLoading}\n            >\n              {t('formButtons.finish')}\n            </Button>\n            {\n              this.state.isLoading\n              ? <CircularProgress color='primary' style={{ marginLeft: 12 }} size={24} />\n              : null\n            }\n          </Grid>\n        </Grid>\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: ISpecFormComponentProps) => {\n  const editMode = ownProps.variantSet.has(SpecModalFormVariant.WITH_EDIT_MODE);\n  let mode: Mode = Mode.project;\n  const masterMode = ownProps.variantSet.has(SpecModalFormVariant.MASTER_MODE);\n  const templateMode = ownProps.variantSet.has(SpecModalFormVariant.TEMPLATE_MODE);\n  if (masterMode) {\n    mode = Mode.master;\n  }\n  if (templateMode) {\n    mode = Mode.masterTemplate;\n  }\n  const data = ownProps.data != null ? ownProps.data : (new Spec({id: -1}).toImmutable());\n  const formKeys = Set<string>(['name']);\n  const initialValues = (editMode ? data.filter((value, key) => {\n    return formKeys.has(key);\n  }) : undefined) || Map<string, any>();\n\n  const form = ownProps.form != null\n    ? ownProps.form\n    : editMode\n      ? `${FORM_NAME}Edit`\n      : FORM_NAME;\n\n  const masterProjectId = makeSelectSelectedMasterProjectId()(state);\n  const templateProjectId = makeSelectSelectedTemplateProjectId()(state);\n  const projectIdForCreatingSpec = makeSelectProjectIdForCreatingSpec()(state);\n  const project = makeSelectProject({projectId: projectIdForCreatingSpec})(state);\n  const configAtsSvgProps = makeSelectConfigAtsSvgProps()(state);\n\n  return {\n    form,\n    initialValues,\n    editMode,\n    projectIdForCreatingSpec,\n    masterProjectId,\n    templateProjectId,\n    mode,\n    project,\n    configAtsSvgProps\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst validate = (formValues: any) => {\n  const errors: any = {};\n  return errors;\n};\n\nexport default compose<React.ComponentClass<ISpecFormComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: false,\n    destroyOnUnmount: false,\n    validate,\n  }),\n)(NewSpecModalForm);\n","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  PropTypes,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  Dialog,\n  Toolbar,\n  AppBar,\n  IconButton,\n  Typography,\n  Slide,\n  Theme,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\n\nimport {\n  TransitionProps\n} from '@material-ui/core/transitions/transition';\nimport {\n  compose,\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {connect} from 'react-redux';\n\nimport {SetRedirectPathAction} from '../../modules/SpecModule/actions';\nimport {push} from 'connected-react-router';\nimport { SpecModalFormVariant } from './constants';\nimport { Set } from 'immutable';\nimport withSpecId, { WithSpecId } from '../../hoc/withSpecId';\nimport { createStructuredSelector } from 'reselect';\nimport NewSpecModalForm from '../Forms/NewSpecModalForm';\nimport { MASTER_DETAIL_PATH, NOT_FOUND_PATH, TEMPLATE_DETAIL_PATH, PROJECT_DETAIL_PATH } from '../../constants';\nimport { makeSelectSelectedSpecId } from '../../modules/SpecModule/selectors';\nimport { makeSelectConfigUiOverridesAppBarColor, makeSelectIsAtsSpecTool } from '../../modules/AtsModule/selectors';\nimport { RouteProps } from 'react-router';\n\nexport const FORM_NAME = 'SpecModalForm';\n\nexport const isProductGroupCheck = (pathname: string) => [PROJECT_DETAIL_PATH, MASTER_DETAIL_PATH, TEMPLATE_DETAIL_PATH].some((substring) => pathname.includes(substring));\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n  return <Slide direction='up' ref={ref} {...props} />;\n});\n\nconst styles = (theme: Theme): StyleRules => ({\n  appBar: {\n    position: 'relative',\n  },\n  subtitle: {\n    flex: 1,\n    color: theme.palette.common.white\n  },\n  title: {\n    flex: 1\n  },\n  icon: {\n    margin: theme.spacing() * 2,\n    fontSize: theme.spacing() * 6,\n    width: 72,\n    height: 72\n  },\n  create: {\n    backgroundColor: theme.palette.primary.main,\n    color: theme.palette.common.white,\n    height: `${theme.spacing() * 4}px`,\n    fontWeight: 'normal',\n    textTransform: 'uppercase',\n\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700],\n      color: theme.palette.common.white,\n    }\n  }\n});\n\n\ntype IToggleFunction = () => void;\n\n\ninterface ISpecModalComponentCommonProps {\n  variantSet?: Set<SpecModalFormVariant>;\n  editMode?: boolean;\n  onSubmit?: (values, projectIdForCreatingSpec, isTestProject) => void;\n}\ninterface IModal {\n  toggleOpenState: (arg: boolean) => void;\n}\n\ninterface IOtherProps {\n  dispatch: React.Dispatch<IAction>;\n  history: any;\n  specId: number;\n  selectedSpecId?: number;\n  isAtsSpecTool: boolean;\n  appBarColor: PropTypes.Color;\n}\n\ninterface IUncontrolledModal {\n  open?: never;\n  toggle?: never;\n}\n\ninterface IControlledModal {\n  open: boolean;\n  toggle: (o: boolean) => IToggleFunction;\n}\n\ntype SpecModalComponentProps =  ISpecModalComponentCommonProps & (IUncontrolledModal | IControlledModal);\n\ninterface ISpecModelProps extends ISpecModalComponentCommonProps {\n  variantSet?: Set<SpecModalFormVariant>;\n}\n\ntype SpecModalProps = ISpecModelProps\n  & SpecModalComponentProps\n  & InjectedFormProps\n  & IModal\n  & IOtherProps\n  & WithTranslation\n  & WithSpecId\n  & RouteProps\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface ISpecModalState {\n  open: boolean;\n}\n\nclass CreateNewSpecModal extends React.Component<\n  SpecModalProps,\n  ISpecModalState\n> {\n  public state = {\n    open: false,\n  };\n\n  public componentDidUpdate = (prevProps) => {\n    const {\n      dispatch,\n      specId,\n      selectedSpecId,\n    } = this.props;\n\n    if (specId !== -1 && selectedSpecId !== -1 && specId !== selectedSpecId && prevProps.selectedSpecId !== selectedSpecId) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      open: controlledOpen,\n      toggle = this.toggleDialog,\n      handleSubmit,\n      variantSet = Set(),\n      spec,\n      dispatch,\n      isAtsSpecTool,\n      onSubmit,\n      location,\n      appBarColor,\n    } = this.props;\n\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n\n    const isProductGroup = isProductGroupCheck(location?.pathname || '');\n    const controlled = controlledOpen != null;\n    const open = controlled ? controlledOpen : uncontrolledOpen;\n\n    const editMode = variantSet.has(SpecModalFormVariant.WITH_EDIT_MODE);\n    const form = editMode ? `${FORM_NAME}Edit` : FORM_NAME;\n\n    return (\n      <Dialog\n        fullScreen={true}\n        open={open || false}\n        onClose={toggle(false)}\n        TransitionComponent={Transition}\n        disableEnforceFocus={true}\n      >\n        <AppBar\n          className={classes.appBar}\n          color={appBarColor ? appBarColor : 'primary'}\n        >\n          <Toolbar>\n            <IconButton\n              color='inherit'\n              onClick={() => {\n                dispatch(new SetRedirectPathAction());\n                toggle(false)();\n              }}\n              aria-label='Close'\n            >\n              <CloseIcon/>\n            </IconButton>\n            <Typography\n              variant='h6'\n              className={classes.subtitle}\n            >\n              {\n                editMode\n                  ? isProductGroup\n                    ? t('createNewSpec.editProductGroupTitle')\n                    : t('createNewSpec.editTitle')\n                  : isProductGroup\n                    ? t('createNewSpec.newProductGroupTitle')\n                    : t('createNewSpec.NewTitle')\n              }\n            </Typography>\n          </Toolbar>\n        </AppBar>\n        <NewSpecModalForm\n            onSubmit={onSubmit}\n            variantSet={variantSet}\n            isProductGroup={isProductGroup}\n            form={form}\n            data={spec}\n            isAtsSpecTool={isAtsSpecTool}\n        />\n      </Dialog>\n    );\n  }\n\n  private toggleDialog = (open: boolean) => () => {\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    this.setState({\n      open: open != null ? open : !uncontrolledOpen\n    });\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: SpecModalComponentProps & WithSpecId) => {\n  return {\n    ...createStructuredSelector({\n      selectedSpecId: makeSelectSelectedSpecId(),\n      isAtsSpecTool: makeSelectIsAtsSpecTool(),\n      appBarColor: makeSelectConfigUiOverridesAppBarColor(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<SpecModalComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withSpecId({\n    withSpec: true,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CreateNewSpecModal);\n","import {DATE_INTERVAL} from '../../constants';\nimport moment from 'moment/moment';\nimport i18next from 'i18next';\nimport {\n  parseDate,\n} from 'ats-utils/src';\n\nconst getIntervalDate = (sourcePeriodDate) => {\n  const periodDate = {\n    startDate: null,\n    endDate: null\n  };\n  switch (sourcePeriodDate.period) {\n    case DATE_INTERVAL.TODAY:\n      periodDate.startDate = moment().startOf('day').toISOString();\n      periodDate.endDate = moment().endOf('day').toISOString();\n      break;\n    case DATE_INTERVAL.YESTERDAY:\n      periodDate.startDate = moment().subtract(1, 'days').startOf('day').toISOString();\n      periodDate.endDate = moment().subtract(1, 'days').endOf('day').toISOString();\n      break;\n    case DATE_INTERVAL.THIS_WEEK:\n      periodDate.startDate = moment().startOf('week').toISOString();\n      periodDate.endDate = moment().endOf('week').toISOString();\n      break;\n    case DATE_INTERVAL.LAST_WEEK:\n      periodDate.startDate = moment().subtract(7, 'days').startOf('week').toISOString();\n      periodDate.endDate = moment().subtract(7, 'days').endOf('week').toISOString();\n      break;\n    case DATE_INTERVAL.THIS_MONTH:\n      periodDate.startDate = moment().startOf('month').toISOString();\n      periodDate.endDate = moment().endOf('month').toISOString();\n      break;\n    case DATE_INTERVAL.LAST_MONTH:\n      periodDate.startDate = moment().subtract(1, 'months').startOf('month').toISOString();\n      periodDate.endDate = moment().subtract(1, 'months').endOf('month').toISOString();\n      break;\n    case DATE_INTERVAL.THIS_QUARTER:\n      periodDate.startDate = moment().startOf('quarter').toISOString();\n      periodDate.endDate = moment().endOf('quarter').toISOString();\n      break;\n    case DATE_INTERVAL.LAST_QUARTER:\n      periodDate.startDate = moment().subtract(1, 'quarters').startOf('quarter').toISOString();\n      periodDate.endDate = moment().subtract(1, 'quarters').endOf('quarter').toISOString();\n      break;\n    case DATE_INTERVAL.THIS_YEAR:\n      periodDate.startDate = moment().startOf('year').toISOString();\n      periodDate.endDate = moment().endOf('year').toISOString();\n      break;\n    case DATE_INTERVAL.LAST_YEAR:\n      periodDate.startDate = moment().subtract(1, 'years').startOf('year').toISOString();\n      periodDate.endDate = moment().subtract(1, 'years').endOf('year').toISOString();\n      break;\n    case DATE_INTERVAL.CUSTOM:\n      periodDate.startDate = sourcePeriodDate.startDate || null;\n      periodDate.endDate = sourcePeriodDate.endDate || null;\n      break;\n    default:\n      break;\n  }\n  return periodDate;\n};\n\nconst verifyStartEndDate = (fieldName, dateOption) => {\n  let errorMsg = null;\n  if (fieldName === 'startDate' && dateOption.endDate) {\n    const parsedStartDate = parseDate(dateOption.startDate, false);\n    const parsedEndDate = parseDate(dateOption.endDate, false);\n    if (parsedStartDate != null && parsedEndDate < parsedStartDate) {\n      errorMsg = i18next.t('translations:date.startLateEnd');\n    }\n  }\n  if (fieldName === 'endDate' && dateOption.startDate) {\n    const parsedStartDate = parseDate(dateOption.startDate, false);\n    const parsedEndDate = parseDate(dateOption.endDate, false);\n    if (parsedEndDate != null && parsedStartDate > parsedEndDate) {\n      errorMsg = i18next.t('translations:date.endEarlierStart');\n    }\n  }\n  return errorMsg;\n};\n\nconst FieldFilterUtil = {\n  getIntervalDate,\n  verifyStartEndDate,\n};\nexport default FieldFilterUtil;","import moment from 'moment';\nimport _ from 'lodash';\n\nimport FieldFilterUtil from '../../components/QuoteConnect/FieldFilterUtil';\nconst initPeriodFilter = (quoteConnectFilter) => {\n  if (quoteConnectFilter?.bidDate && quoteConnectFilter?.bidDate?.period) {\n    const intervalData = FieldFilterUtil.getIntervalDate(quoteConnectFilter?.bidDate);\n    quoteConnectFilter.bidDate['startDate'] = intervalData.startDate;\n    quoteConnectFilter.bidDate['endDate'] = intervalData.endDate;\n  }\n  if (quoteConnectFilter?.createdAt && quoteConnectFilter?.bidDate?.createdAt) {\n    const intervalData = FieldFilterUtil.getIntervalDate(quoteConnectFilter.createdAt);\n    quoteConnectFilter.createdAt['startDate'] = intervalData.startDate;\n    quoteConnectFilter.createdAt['endDate'] = intervalData.endDate;\n  }\n  if (quoteConnectFilter?.updatedAt && quoteConnectFilter?.bidDate?.updatedAt) {\n    const intervalData = FieldFilterUtil.getIntervalDate(quoteConnectFilter.updatedAt);\n    quoteConnectFilter.updatedAt['startDate'] = intervalData.startDate;\n    quoteConnectFilter.updatedAt['endDate'] = intervalData.endDate;\n  }\n  return quoteConnectFilter;\n};\n\nconst cleanFilter = (obj) => {\n  if (typeof obj !== 'object' || obj === null) {\n    return obj;\n  }\n\n  Object.keys(obj).forEach(key => {\n    if (key === 'period' || obj[key] === null) {\n      delete obj[key];\n    } else if (typeof obj[key] === 'object') {\n      obj[key] = cleanFilter(obj[key]);\n      if (Object.keys(obj[key]).length === 0) {\n        delete obj[key];\n      }\n    }\n  });\n\n  return obj;\n};\n\nconst checkDefaultFilterOption = (searchFilterOptions) => {\n  const dateFieldsToCheck = ['bidDate', 'createdAt', 'updatedAt'];\n  _.forEach(searchFilterOptions, (field, fieldName) => {\n    if (!field?.period && (field?.startDate || field?.endDate)) {\n      _.set(field, 'period', 'custom');\n    }\n    if (dateFieldsToCheck.includes(fieldName)) {\n      if (!field?.startDate && !field?.endDate) {\n        _.set(field, 'period', '');\n      }\n    }\n    _.unset(field, 'startDateError');\n    _.unset(field, 'endDateError');\n  });\n  return searchFilterOptions;\n};\n\nconst removeTZ = (date) => {\n  return date.replace('T', ' ').slice(0, 19);\n};\n\nconst getEndDate = (date) => {\n  date = moment(date).local().endOf('day').toISOString();\n  return removeTZ(date);\n};\n\nconst filterDateFormat = (filter) => {\n  if (filter?.bidDate?.startDate) {\n    filter.bidDate.startDate = removeTZ(filter.bidDate.startDate);\n  }\n  if (filter?.bidDate?.endDate && filter?.bidDate?.endDate.includes('T')) {\n    filter.bidDate.endDate = getEndDate(filter.bidDate.endDate);\n  }\n  if (filter?.createdAt?.startDate) {\n    filter.createdAt.startDate = removeTZ(filter.createdAt.startDate);\n  }\n  if (filter?.createdAt?.endDate && filter?.createdAt?.endDate.includes('T')) {\n    filter.createdAt.endDate = getEndDate(filter.createdAt.endDate);\n  }\n  if (filter?.updatedAt?.startDate) {\n    filter.updatedAt.startDate = removeTZ(filter.updatedAt.startDate);\n  }\n  if (filter?.updatedAt?.endDate && filter?.updatedAt?.endDate.includes('T')) {\n    filter.updatedAt.endDate = getEndDate(filter.updatedAt.endDate);\n  }\n  return filter;\n};\n\nconst verifyFilterFormDate = (searchFilterOptions) => {\n  let errorMsg = null;\n\n  errorMsg = FieldFilterUtil.verifyStartEndDate('startDate', searchFilterOptions?.bidDate);\n  if (errorMsg) {\n    return false;\n  }\n  errorMsg = FieldFilterUtil.verifyStartEndDate('endDate', searchFilterOptions?.bidDate);\n  if (errorMsg) {\n    return false;\n  }\n  errorMsg = FieldFilterUtil.verifyStartEndDate('startDate', searchFilterOptions?.createdAt);\n  if (errorMsg) {\n    return false;\n  }\n  errorMsg = FieldFilterUtil.verifyStartEndDate('endDate', searchFilterOptions?.createdAt);\n  if (errorMsg) {\n    return false;\n  }\n  errorMsg = FieldFilterUtil.verifyStartEndDate('startDate', searchFilterOptions?.updatedAt);\n  if (errorMsg) {\n    return false;\n  }\n  errorMsg = FieldFilterUtil.verifyStartEndDate('endDate', searchFilterOptions?.updatedAt);\n  if (errorMsg) {\n    return false;\n  }\n  return true;\n};\nconst BidInvitationUtil = {\n  initPeriodFilter,\n  cleanFilter,\n  filterDateFormat,\n  checkDefaultFilterOption,\n  verifyFilterFormDate\n};\n\nexport default BidInvitationUtil;","import React from 'react';\nimport {Button, CircularProgress, Dialog, DialogContent, Grid, Tooltip, Typography, useTheme} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport {makeStyles, Theme} from '@material-ui/core/styles';\nimport { ReactComponent as Robot } from '../../../../images/quoteTakeoffRobot.svg';\nimport { checkIsDrawingChecked } from '../../../ProjectDetail/helpers';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { GetSpecsAction, TriggerSpecAssistAction } from '../../../../modules/SpecModule/actions';\nimport { useDispatch } from 'react-redux';\nimport { SetSnackbarOpenAction } from '../../../../modules/ApplicationModule/actions';\nimport { getText } from '../../../../utils/helpers';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  root: {\n    width: 458,\n    // height: 228,\n  },\n  actionBarButton: {\n    padding: '3px 4px',\n    margin: '0px 4px',\n    textTransform: 'none',\n    minWidth: 0,\n  },\n  button: {\n    width: 104,\n    margin: theme.spacing(0, 1, 1.5, 1),\n  },\n  startIcon: {\n    marginLeft: 0,\n    marginRight: 4,\n  }\n}));\n\nconst SpecAssistButton = ({\n  hideText = false,\n  useSpecAssist = false,\n  spec,\n  specDetailConfig,\n}) => {\n  const dispatch = useDispatch();\n  const theme = useTheme();\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const [dialogOpen, setDialogOpen] = React.useState(false);\n  const [isRunningSpecAssist, setIsRunningSpecAssist] = React.useState(false);\n\n  const isAi = spec?.get('isAi');\n  const enable = !isAi && Boolean(specDetailConfig?.filter(checkIsDrawingChecked).count());\n\n  // check if there's at least one product with alternative products in the selected drawings in the spec\n  const hasAlt = enable && spec?.get('drawings')?.some(drawing => {\n    if (!checkIsDrawingChecked(specDetailConfig.get(drawing.get('id')))) {\n      return false; // skip drawings that are not selected\n    }\n    return drawing.get('products')?.some(product => product.get('alternativeProducts')?.size > 0);\n  });\n\n  if (!useSpecAssist) {\n    return null;\n  }\n\n  const updateDrawingWithSpecAssist = () => {\n    setIsRunningSpecAssist(true);\n\n    const specId = spec.get('id');\n    const drawingIds = specDetailConfig.filter(checkIsDrawingChecked)?.reduce((acc, _checked, drawingId) => {\n      if (_checked.get('checked')) {\n        acc.push(drawingId);\n      }\n      return acc;\n    }, []);\n\n    const onSuccessCb = () => {\n      dispatch(new GetSpecsAction({ specId }));\n    };\n    const onFailCb = () => {\n      dispatch(new SetSnackbarOpenAction({\n        message: t('applySpecAssist.failSpecAssistMessage'),\n        severity: 'error',\n      }));\n    };\n    const onFinallyCb = () => {\n      setDialogOpen(false);\n      setIsRunningSpecAssist(false);\n    };\n\n    dispatch(new TriggerSpecAssistAction({\n      specId,\n      drawingIds,\n      onSuccessCb,\n      onFailCb,\n      onFinallyCb,\n    }));\n  };\n\n  const triggerSpecAssist = () => {\n    if (hasAlt) {\n      setDialogOpen(true);\n    } else {\n      setDialogOpen(true);\n      updateDrawingWithSpecAssist();\n    }\n  };\n\n  const handleConfirm = () => {\n    updateDrawingWithSpecAssist();\n  };\n\n  const handleClose = () => {\n    if (!isRunningSpecAssist) {\n      setDialogOpen(false);\n      setIsRunningSpecAssist(false);\n    }\n  };\n\n  return (\n    <>\n      <Tooltip title={getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('specAssistButton.enableTooltip'), enable], [t('specAssistButton.disableTooltip'), !enable]])}>\n        <div style={{ alignSelf: 'center' }}>\n          <Button\n            size='small'\n            // variant='outlined'\n            color='primary'\n            startIcon={<Robot style={{width: '1.3em', height: '1.3em', color: enable ? theme.palette.primary.main : theme.palette.grey[400]}}/>}\n            onClick={triggerSpecAssist}\n            disabled={!enable}\n            className={classes.actionBarButton}\n            classes={{ startIcon: classes.startIcon }}\n            style={{ textTransform: 'none' }}\n          >\n            {hideText ? '' : t('specAssistButton.button')}\n          </Button>\n        </div>\n      </Tooltip>\n\n      <Dialog\n        onClose={handleClose}\n        aria-describedby='spec assist dialog'\n        open={dialogOpen}\n        classes={{\n          paper: classes.root\n        }}\n      >\n        <DialogContent>\n          {\n            isRunningSpecAssist\n              ? (\n                  <Grid container={true} direction='column' justify='center' alignItems='center'>\n                    <CircularProgress />\n                    <Typography color='textPrimary' style={{ marginTop: 16, marginBottom: 16 }} variant='subtitle1'>\n                      { t('applySpecAssist.loadingMessage') }\n                    </Typography>\n                  </Grid>\n                )\n              : (\n                  <Grid container={true} direction='column' justify='center' alignItems='center'>\n                    <WarningIcon fontSize='large' style={{ color: theme.palette.warning.main }} />\n                    <Typography color='textPrimary' style={{ marginTop: 16, marginBottom: 16, textAlign: 'center' }} variant='subtitle1'>\n                      { t('applySpecAssist.alternativesExistWarning') }\n                    </Typography>\n                    <Grid>\n                      <Button\n                        onClick={() => setDialogOpen(false)}\n                        color='primary'\n                        variant='outlined'\n                        className={classes.button}\n                      >\n                        { t('formButtons.cancel') }\n                      </Button>\n                      <Button\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          handleConfirm();\n                        }}\n                        color='primary'\n                        variant='contained'\n                        autoFocus={true}\n                        className={classes.button}\n                      >\n                        { t('formButtons.yes') }\n                      </Button>\n                    </Grid>\n                  </Grid>\n                )\n          }\n        </DialogContent>\n      </Dialog>\n    </>\n  );\n};\n\nexport default SpecAssistButton;","import { Button, Dialog, DialogActions, DialogContent, Grid, makeStyles, Theme, Tooltip, Typography, useTheme } from '@material-ui/core/';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectIdentityObject, makeSelectUserHasMasterTemplate, makeSelectUserIsAtsUser, makeSelectUseSpecAssist, makeSelectUserCanManageMasters } from '../../../modules/AtsModule/selectors';\nimport { makeSelectProjectSpecConfig } from '../../../modules/ProjectModule/selectors';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport SpecAssistButton from '../ProductGroupContent/SpecAssistButton';\nimport { Spec } from '../../../models';\nimport { IMap } from 'ats-utils/src';\nimport { checkIsDrawingChecked, handleProjectClickCopyTo } from '../../ProjectDetail/helpers';\nimport { getText } from '../../../utils/helpers';\nimport { constructSpecDrawingsArrayForDelete, getSelectedDrawings, hasNonArchivedProduct } from '../helpers';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { GUEST_LOGIN_MODAL } from '../../GuestLoginModal';\nimport { handleClickCopyTo } from '../../../pages/SpecDetail/helpers';\nimport { AtsActionBlock } from '../../AtsSvg/AtsActionBlock';\nimport { makeSelectSpecs } from '../../../modules/SpecModule/selectors';\nimport { fromJS, List, Map } from 'immutable';\nimport { useViewContext } from '../context/viewContext';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport { MassUpdateProjectSpecDetailConfigAction } from '../../../modules/ProjectModule/actions';\nimport { getSpecsInProject } from '../../ProjectDetail/common/helpers';\nimport { checkHasSelectedDrawingsWithDraftProduct } from '../../../pages/ProjectSpecDetail/DefaultView';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { LOADING_MODAL_ID } from '../../LoadingModal/Component';\nimport { BulkDeleteDrawingsAction } from '../../../modules/SpecModule/actions';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  actionBarContainer: {\n    position: 'sticky',\n    bottom: 0,\n    zIndex: 1,\n    backgroundColor: theme.palette.common.white,\n    padding: '6px 0px',\n    display: 'flex',\n    justifyContent: 'center',\n    height: 52\n  },\n  actionBar: {\n    height: 'fit-content',\n    minHeight: 40,\n    borderRadius: '100vw',\n    margin: '0px 6px',\n    padding: '4px 8px',\n    boxShadow: theme.shadows[8],\n    position: 'relative',\n    // marginRight: 90,\n    boxSizing: 'border-box',\n    width: '100%',\n    // maxWidth: `min(888px, calc(100% - 180px))`,\n  },\n  actionButtonsContainer: {\n    position: 'absolute',\n    left: '50%',\n    transform: 'translateX(-50%)',\n    whiteSpace: 'nowrap',\n  },\n  actionBarButton: {\n    padding: '3px 4px',\n    margin: '0px 4px',\n    textTransform: 'none',\n    minWidth: 0,\n  },\n  actionBarButtonIcon: {\n    marginLeft: 0,\n    marginRight: 0\n  },\n  actionBarButtonIconMin: {\n    marginLeft: 0,\n    marginRight: 4\n  },\n  actionBarDivider: {\n    height: '1em',\n    backgroundColor: theme.palette.primary.main,\n    margin: '0px 4px',\n  },\n  downloadButtonContainer: {\n    position: 'absolute',\n    right: 8,\n    whiteSpace: 'nowrap',\n  },\n}));\n\nconst ActionBar = ({\n  type,\n  project,\n  specs,\n  selectedSpec,\n  onViewChange,\n}: {\n  type: 'spec' | 'project' | 'master' | 'template';\n  project?: IMap<any>;\n  specs?: Map<number, IMap<Spec>>;\n  selectedSpec?: IMap<Spec>;\n  onViewChange?: (view: 'default' | 'download') => void;\n}) => {\n  const { t } = useTranslation('translations');\n  const theme = useTheme();\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const useSpecAssist = useSelector(makeSelectUseSpecAssist());\n  const isGuestUser = !useSelector(makeSelectIdentityObject());\n  const hasMasterTemplateRole: boolean = useSelector(makeSelectUserHasMasterTemplate());\n  const userIsAtsUser: boolean = useSelector(makeSelectUserIsAtsUser());\n  const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n  const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n\n  const { productSearchTerm, setIsDownloadWarningModalOpen } = useViewContext();\n\n  let actionBarContainerResizeObserver = null;\n  const actionBarContainerRef = React.useRef<HTMLDivElement>(null);\n  const selectedInfoContainerRef = React.useRef<HTMLDivElement>(null);\n  const fakeActionButtonsContainerRef = React.useRef<HTMLDivElement>(null);\n  const fakeDownloadButtonContainerRef = React.useRef<HTMLDivElement>(null);\n  const actionButtonsContainerRef = React.useRef<HTMLDivElement>(null);\n  const downloadButtonContainerRef = React.useRef<HTMLDivElement>(null);\n\n  const [hideActionBarButtonText, setHideActionBarButtonText] = React.useState(false);\n  const [fullWidthActionBar, setFullWidthActionBar] = React.useState(false);\n  const [openDeleteSelectedDrawingsDialog, setOpenDeleteSelectedDrawingsDialog] = React.useState(false);\n\n  const allowDeleteTemplateDrawings = hasMasterTemplateRole || userIsAtsUser;\n  const specId = selectedSpec?.get('id');\n  const isAi = selectedSpec?.get('isAi');\n  const specDetailConfig = projectSpecDetailConfig.get(specId);\n  const selectedDrawings = React.useMemo(() => getSelectedDrawings(projectSpecDetailConfig), [projectSpecDetailConfig]);\n  const selectedDrawingsSize = selectedDrawings?.length;\n\n  const hasSelectedDrawing: boolean = selectedDrawingsSize > 0;\n  const enabledDownload = React.useMemo(() => hasNonArchivedProduct({ selectedDrawings, specs, selectedSpec }), [selectedDrawings, specs, selectedSpec]);\n\n  const setupResizeObserver = () => {\n    actionBarContainerResizeObserver = new ResizeObserver(checkCollision);\n    actionBarContainerResizeObserver.observe(actionBarContainerRef.current);\n  };\n\n  const checkCollision = () => {\n    const aRect = selectedInfoContainerRef.current?.getBoundingClientRect();\n    const fakeBRect = fakeActionButtonsContainerRef.current?.getBoundingClientRect();\n    const fakeCRect = fakeDownloadButtonContainerRef.current?.getBoundingClientRect();\n    const COLLIDE_PADDING = 12;\n\n    const hasOverlap = aRect?.right + COLLIDE_PADDING > fakeBRect?.left || fakeBRect?.right + COLLIDE_PADDING > fakeCRect?.left;\n\n    if (hasOverlap) {\n      setHideActionBarButtonText(true);\n    } else {\n      setHideActionBarButtonText(false);\n    }\n\n    const bRect = actionButtonsContainerRef.current?.getBoundingClientRect();\n    const cRect = downloadButtonContainerRef.current?.getBoundingClientRect();\n\n    const hasSecondOverlap = aRect?.right + COLLIDE_PADDING > bRect?.left || bRect?.right + COLLIDE_PADDING > cRect?.left;\n    setTimeout(() => setFullWidthActionBar(hasOverlap && hasSecondOverlap), 250);\n  };\n\n  React.useEffect(() => {\n    if (actionBarContainerRef.current) {\n      setupResizeObserver();\n      checkCollision();\n    }\n    return () => {\n      if (actionBarContainerResizeObserver) {\n        actionBarContainerResizeObserver.disconnect();\n      }\n      actionBarContainerResizeObserver = null;\n    };\n  }, [hasSelectedDrawing]);\n\n  const projectUnselectAll = () => {\n    const specsDrawingIds = getSpecsInProject(project, specs)?.reduce((acc, _spec, _specId) => {\n      const drawingsDisplayed = filterSpecDrawingsByProductName(_spec, productSearchTerm);\n      return drawingsDisplayed.reduce((_acc, drawing) => {\n        if (drawing.get('products').size > 0) {\n          return _acc.update(_specId, List(), list => list.push(drawing.get('id')));\n        }\n        return _acc;\n      }, acc);\n    }, fromJS({}) as Map<number, List<number>>);\n    if (specsDrawingIds?.size > 0) {\n      dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked: false }));\n    }\n  };\n\n  const projectCopy = {\n    hidden: project?.get('status') === 'test',\n    // tooltip: !hasSelectedDrawing ? t('masterDetail.tooltipSelectDrawing') : '',\n    tooltip: t('projectDetailPage.actionBar.copyTooltip'),\n    disabled: !hasSelectedDrawing,\n    onClick: () => {\n      handleProjectClickCopyTo({\n        projectSpecDetailConfig,\n        dispatch,\n        project,\n        specs,\n        sourceType: type\n      });\n    }\n  };\n\n  const uiData = {\n    spec: {\n      unselectAll: () => {\n        const drawingsDisplayed = filterSpecDrawingsByProductName(selectedSpec, productSearchTerm);\n        const specsDrawingIds = selectedSpec && drawingsDisplayed.reduce((acc, drawing) => {\n          if (drawing.get('products').size > 0) {\n            return acc.update(specId, List(), list => list.push(drawing.get('id')));\n          }\n          return acc;\n        }, fromJS({}) as Map<number, List<number>>);\n        if (specsDrawingIds.get(specId)?.size > 0) {\n          dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked: false }));\n        }\n      },\n      copy: {\n        locked: isGuestUser,\n        hidden: selectedSpec?.get('status') === 'test',\n        disabled: isAi || !hasSelectedDrawing,\n        // tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('masterDetail.tooltipSelectDrawing'), !hasSelectedDrawing]]),\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('projectDetailPage.actionBar.copyTooltip'), true]]),\n        onClick: () => {\n          if (isGuestUser) {\n            dispatch(new ToggleOverlayComponentAction({\n              id: GUEST_LOGIN_MODAL,\n              open: true,\n            }));\n          } else {\n            handleClickCopyTo({ spec: selectedSpec, projectSpecDetailConfig, dispatch });\n          }\n        }\n      },\n      delete: {\n        disabled: isAi || !hasSelectedDrawing,\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('projectDetailPage.actionBar.deleteTooltip'), true]]),\n        onClick: () => {\n          dispatch(new BulkDeleteDrawingsAction({ type: 'project', specDrawings: constructSpecDrawingsArrayForDelete(selectedDrawings) }));\n        },\n      },\n      download: {\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('masterDetail.tooltipSelectDrawing'), !enabledDownload]]),\n        disabled: isAi || !enabledDownload,\n        onClick: () => {\n          onViewChange('download');\n        },\n        variant: isGuestUser ? 'outlined' : 'contained'\n      }\n    },\n    project: {\n      unselectAll: projectUnselectAll,\n      copy: projectCopy,\n      delete: {\n        disabled: !hasSelectedDrawing,\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('projectDetailPage.actionBar.deleteTooltip'), true]]),\n        onClick: () => {\n          dispatch(new BulkDeleteDrawingsAction({ type: 'project', specDrawings: constructSpecDrawingsArrayForDelete(selectedDrawings) }));\n        },\n      },\n      download: {\n        tooltip: !enabledDownload ? t('masterDetail.tooltipSelectDrawing') : '',\n        disabled: !enabledDownload,\n        onClick: () => {\n          if (checkHasSelectedDrawingsWithDraftProduct(project, projectSpecDetailConfig, specs)) {\n            setIsDownloadWarningModalOpen(true);\n          } else {\n            onViewChange('download');\n          }\n        },\n        variant: isGuestUser ? 'outlined' : 'contained',\n      }\n    },\n    master: {\n      unselectAll: projectUnselectAll,\n      copy: projectCopy,\n      delete: {\n        hidden: !userCanManageMasters,\n        disabled: !hasSelectedDrawing || !userCanManageMasters,\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('projectDetailPage.actionBar.deleteTooltip'), true]]),\n        onClick: () => {\n          dispatch(new BulkDeleteDrawingsAction({ type: 'master', specDrawings: constructSpecDrawingsArrayForDelete(selectedDrawings) }));\n        },\n      },\n    },\n    template: {\n      unselectAll: projectUnselectAll,\n      copy: {\n        locked: isGuestUser,\n        // tooltip: !hasSelectedDrawing ? t('masterDetail.tooltipSelectDrawing') : '',\n        tooltip: t('projectDetailPage.actionBar.copyTooltip'),\n        disabled: !hasSelectedDrawing,\n        onClick: () => {\n          if (isGuestUser) {\n            dispatch(new ToggleOverlayComponentAction({\n              id: GUEST_LOGIN_MODAL,\n              open: true,\n            }));\n          } else {\n            handleProjectClickCopyTo({\n              projectSpecDetailConfig,\n              dispatch,\n              project,\n              specs,\n              sourceType: 'master_template'\n            });\n          }\n        }\n      },\n      delete: {\n        hidden: !allowDeleteTemplateDrawings,\n        disabled: !hasSelectedDrawing,\n        tooltip: getText([[t('generalTooltip.disabledForAiSpec'), isAi], [t('projectDetailPage.actionBar.deleteTooltip'), true]]),\n        onClick: () => {\n          dispatch(new BulkDeleteDrawingsAction({ type: 'template', specDrawings: constructSpecDrawingsArrayForDelete(selectedDrawings) }));\n        },\n      },\n    }\n  } as any;\n\n  if (!selectedDrawingsSize) {\n    return null;\n  }\n\n  return (\n    <>\n      <div ref={actionBarContainerRef} className={classes.actionBarContainer}>\n        <Grid\n          container={true} justify='space-between' alignItems='center' wrap='nowrap' className={classes.actionBar}\n          style={{\n            maxWidth: fullWidthActionBar ? '100%' : 'min(888px, calc(100% - 180px))',\n            marginRight: fullWidthActionBar ? 90 : 0,\n          }}\n        >\n          <Grid ref={selectedInfoContainerRef} item={true} style={{ width: 'fit-content', display: 'flex', alignItems: 'center', paddingLeft: 8 }}>\n            <Typography variant='body2' color='textPrimary' style={{ fontWeight: 'bold' }}>\n              {t('projectDetailPage.actionBar.numberOfDrawingsSelected', { count: selectedDrawingsSize })}\n            </Typography>\n            <Button\n              variant='text'\n              className={classes.actionBarButton}\n              // disabled={!isFinishLoading}\n              onClick={uiData[type]?.unselectAll}\n              color='primary'\n              classes={{ startIcon: classes.actionBarButtonIcon }}\n            >\n              {t('projectDetailPage.actionBar.unselectAllButton')}\n            </Button>\n          </Grid>\n\n          <Grid ref={actionButtonsContainerRef} item={true} className={classes.actionButtonsContainer}>\n            <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n              {uiData[type]?.copy?.hidden ? null : (\n                <Tooltip title={uiData?.[type]?.copy?.tooltip || ''}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={uiData?.[type]?.copy.disabled}\n                      onClick={uiData?.[type]?.copy.onClick}\n                      color='primary'\n                      startIcon={\n                        uiData[type]?.copy?.locked\n                          ? <AtsActionBlock style={{ color: 'inherit' }} />\n                          : <FileCopyIcon fontSize='inherit' />\n                      }\n                      classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    >\n                      {!hideActionBarButtonText ? t('projectDetailPage.actionBar.copyButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n              )}\n\n              {uiData[type]?.delete?.hidden ? null : (\n                <Tooltip title={uiData[type]?.delete?.tooltip || ''}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={uiData?.[type]?.delete?.disabled}\n                      // onClick={this.handleToggleBulkCopyDialog}\n                      onClick={() => setOpenDeleteSelectedDrawingsDialog(true)}\n                      color='primary'\n                      startIcon={<DeleteIcon fontSize='inherit' />}\n                      classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    >\n                      {!hideActionBarButtonText ? t('projectDetailPage.actionBar.deleteButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n              )}\n\n              <SpecAssistButton\n                hideText={hideActionBarButtonText}\n                useSpecAssist={useSpecAssist}\n                spec={selectedSpec}\n                specDetailConfig={specDetailConfig}\n              />\n            </Grid>\n          </Grid>\n\n          {/* Fake action buttons container for collision calculation */}\n          <Grid item={true} ref={fakeActionButtonsContainerRef} className={classes.actionButtonsContainer} style={{ visibility: 'hidden', pointerEvents: 'none' }}>\n            <Grid container={true} direction='row' justify='space-between' alignItems='center' wrap='nowrap'>\n              {uiData[type]?.copy?.hidden ? null : (\n                <Button\n                  className={classes.actionBarButton}\n                  startIcon={\n                    uiData[type]?.copy?.locked\n                      ? <AtsActionBlock style={{ color: 'inherit' }} />\n                      : <FileCopyIcon fontSize='inherit' />\n                  }\n                  classes={{ startIcon: classes.actionBarButtonIconMin }}\n                >\n                  {t('projectDetailPage.actionBar.copyButton')}\n                </Button>\n              )}\n\n              {uiData[type]?.delete?.hidden ? null : (\n                <Button\n                  className={classes.actionBarButton}\n                  startIcon={<DeleteIcon fontSize='inherit' />}\n                  classes={{ startIcon: classes.actionBarButtonIconMin }}\n                >\n                  {t('projectDetailPage.actionBar.deleteButton')}\n                </Button>\n              )}\n\n              <SpecAssistButton\n                useSpecAssist={useSpecAssist}\n                spec={selectedSpec}\n                specDetailConfig={specDetailConfig}\n              />\n            </Grid>\n          </Grid>\n\n          {uiData[type]?.download ? (\n            <Grid ref={downloadButtonContainerRef} item={true} className={classes.downloadButtonContainer}>\n              <Tooltip title={uiData?.[type]?.download?.tooltip || ''}>\n                <span>\n                  <Button\n                    variant={uiData[type]?.download?.variant}\n                    className={classes.actionBarButton}\n                    style={{ paddingLeft: 8, paddingRight: 8, whiteSpace: 'nowrap' }}\n                    color='primary'\n                    disabled={uiData[type]?.download?.disabled}\n                    startIcon={<DescriptionIcon fontSize='inherit' />}\n                    classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    onClick={uiData[type]?.download?.onClick}\n                  >\n                    {/* {!hideActionBarButtonText ? t('projectDetailPage.actionBar.downloadSpecButton') : ''} */}\n                    {t('projectDetailPage.actionBar.downloadSpecButton')}\n                  </Button>\n                </span>\n              </Tooltip>\n            </Grid>\n          ) : null}\n\n          {/* Fake download button container for collision calculation */}\n          <Grid item={true} ref={fakeDownloadButtonContainerRef} className={classes.downloadButtonContainer} style={{ visibility: 'hidden', pointerEvents: 'none' }}>\n            <Button\n              variant={uiData[type]?.download?.variant}\n              className={classes.actionBarButton}\n              style={{ paddingLeft: 8, paddingRight: 8, whiteSpace: 'nowrap' }}\n              startIcon={<DescriptionIcon fontSize='inherit' />}\n              classes={{ startIcon: classes.actionBarButtonIconMin }}\n            >\n              {t('projectDetailPage.actionBar.downloadSpecButton')}\n            </Button>\n          </Grid>\n        </Grid>\n      </div>\n\n      <Dialog open={openDeleteSelectedDrawingsDialog}>\n        <DialogContent style={{ whiteSpace: 'pre-line', width: 358 }}>\n          <Grid container={true} justify='center'>\n            <WarningIcon style={{ color: theme.palette.warning.main, fontSize: 32, marginBottom: 16 }} />\n            <Typography variant='body2' color='textPrimary'>\n              {t('projectDetailPage.bulkDeleteConfirmation')}\n            </Typography>\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            color='primary'\n            // disabled={isDeletingSelecetedProducts}\n            onClick={() => setOpenDeleteSelectedDrawingsDialog(false)}>\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            onClick={() => {\n              setOpenDeleteSelectedDrawingsDialog(false);\n              dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { customMessage: t('projectDetailPage.bulkDeleteProgressMessage') } }));\n              dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: true,\n              }));\n              uiData[type]?.delete?.onClick();\n            }}\n          >\n            {t('formButtons.yes')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </>\n  );\n};\n\nexport default ActionBar;","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, getGlobalSingleton, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nexport function getGlobalEventProcessors(): EventProcessor[] {\n  return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  // eslint-disable-next-line deprecation/deprecation\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n  processors: EventProcessor[],\n  event: Event | null,\n  hint: EventHint,\n  index: number = 0,\n): PromiseLike<Event | null> {\n  return new SyncPromise<Event | null>((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) as Event | null;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","import * as React from 'react';\nimport { Grid, Typography, Tooltip, Chip, GridItemsAlignment, TypographyProps } from '@material-ui/core';\n\ninterface IUserOfficeDisplayProps {\n  // Primary line: a name string (rendered as a Typography) or a custom node such as a Link.\n  name: React.ReactNode;\n  // Secondary line; omitted when empty.\n  officeName?: string;\n  // Colour for the name (when a string) and office lines. Defaults to 'textPrimary' for the name.\n  color?: TypographyProps['color'];\n  alignItems?: GridItemsAlignment;\n}\n\n// Stacked \"full name over office name\" used by the assignable-user Autocompletes (dropdown options)\n// and the quote/project detail views.\nconst UserOfficeDisplay: React.FC<IUserOfficeDisplayProps> = ({ name, officeName, color, alignItems }) => (\n  <Grid container={true} direction='column' alignItems={alignItems}>\n    {typeof name === 'string'\n      ? <Typography variant='body2' color={color || 'textPrimary'}>{name}</Typography>\n      : name}\n    {officeName ? <Typography variant='body2' color={color}>{officeName}</Typography> : null}\n  </Grid>\n);\n\nexport default UserOfficeDisplay;\n\n// renderTags factory for the multi-select user Autocompletes: each selected user becomes a Chip\n// whose tooltip shows the office name. Pass the classes from useTightTooltip().\nexport const renderUserOfficeTags = (tooltipClasses: object) => (value: any[], getTagProps: any) =>\n  value.map((option, index) => (\n    <Tooltip key={option.id} title={option.officeName || ''} classes={tooltipClasses}>\n      <Chip label={option.fullName || ''} {...getTagProps({ index })} />\n    </Tooltip>\n  ));\n","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\n\nexport default {};\n\nexport enum QuoteTemplateTypes {\n  SAVE_QUOTE_TEMPLATE = 'SAVE_QUOTE_TEMPLATE',\n  SET_SAVE_SUCCESS_FLAG = 'SET_SAVE_SUCCESS_FLAG',\n  SAVE_QUOTE_TEMPLATE_SUCCESS = 'SAVE_QUOTE_TEMPLATE_SUCCESS',\n  SAVE_QUOTE_TEMPLATE_FAIL = 'SAVE_QUOTE_TEMPLATE_FAIL',\n  GET_QUOTE_TEMPLATE = 'GET_QUOTE_TEMPLATE',\n  GET_QUOTE_TEMPLATE_SUCCESS = 'GET_QUOTE_TEMPLATE_SUCCESS',\n  GET_QUOTE_TEMPLATE_FAIL = 'GET_QUOTE_TEMPLATE_FAIL',\n  SET_IS_FETCHING_QUOTE_TEMPLATE_LIST = 'SET_IS_FETCHING_QUOTE_TEMPLATE_LIST',\n  GET_QUOTE_TEMPLATE_LIST = 'GET_QUOTE_TEMPLATE_LIST',\n  GET_QUOTE_TEMPLATE_LIST_SUCCESS = 'GET_QUOTE_TEMPLATE_LIST_SUCCESS',\n  GET_QUOTE_TEMPLATE_LIST_FAIL = 'GET_QUOTE_TEMPLATE_LIST_FAIL',\n  DELETE_QUOTE_TEMPLATE = 'DELETE_QUOTE_TEMPLATE',\n  DELETE_TEMPLATE_SUCCESS = 'DELETE_TEMPLATE_SUCCESS',\n  SET_DEFAULT_TEMPLATE = 'SET_DEFAULT_TEMPLATE',\n  SET_DEFAULT_TEMPLATE_SUCCESS = 'SET_DEFAULT_TEMPLATE_SUCCESS',\n  SET_DEFAULT_TEMPLATE_FAIL = 'SET_DEFAULT_TEMPLATE_FAIL',\n}\n\n// TODO: add models to replace interfaces declared here\ninterface IQuoteTemplateResponse {\n  template: IMap<any>;\n}\n\ninterface IQuoteTemplatesListResponse {\n  list: List<IMap<any>>;\n}\n\n/*interface IQuoteTemplate {\n  id: string;\n  name: string;\n}*/\n\nexport class SaveQuoteTemplate implements IAction {\n  public readonly type = QuoteTemplateTypes.SAVE_QUOTE_TEMPLATE;\n\n  constructor(\n    public payload: {\n      quoteTemplateId?: number,\n    }\n  ) {\n  }\n}\n\nexport class SetSaveSuccessFlag implements IAction {\n  public readonly type = QuoteTemplateTypes.SET_SAVE_SUCCESS_FLAG;\n}\n\nexport class SaveQuoteTemplateSuccess implements IAction {\n  public readonly type = QuoteTemplateTypes.SAVE_QUOTE_TEMPLATE_SUCCESS;\n\n  constructor(\n    public payload: object\n  ) {\n  }\n}\n\nexport class DeleteTemplateSuccessAction implements IAction {\n  public readonly type = QuoteTemplateTypes.DELETE_TEMPLATE_SUCCESS;\n\n  constructor(\n    public payload: number\n  ) {\n  }\n}\n\nexport class SaveQuoteTemplateFail implements IAction {\n  public readonly type = QuoteTemplateTypes.SAVE_QUOTE_TEMPLATE_FAIL;\n\n  constructor(\n    public payload: {\n      error: any\n    }\n  ) {\n  }\n}\n\nexport class GetQuoteTemplate implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE;\n\n  constructor(\n    public payload?: string\n  ) {\n  }\n}\n\nexport class SetIsFetchingQuoteTemplateListAction implements IAction {\n  public readonly type = QuoteTemplateTypes.SET_IS_FETCHING_QUOTE_TEMPLATE_LIST;\n\n  constructor(\n    public payload: {\n      isFetchingQuoteTemplates: boolean,\n    }\n  ) {\n  }\n}\n\nexport class GetQuoteTemplateListAction implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE_LIST;\n}\n\nexport class GetQuoteTemplateSuccessAction implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE_SUCCESS;\n\n  constructor(\n    public payload?: IQuoteTemplateResponse\n  ) {\n  }\n}\n\nexport class GetQuoteTemplateFailAction implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE_FAIL;\n\n  constructor(\n    public payload?: {\n      error: any\n    }\n  ) {\n  }\n}\n\nexport class GetQuoteTemplateListSuccessAction implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE_LIST_SUCCESS;\n\n  constructor(\n    public payload?: IQuoteTemplatesListResponse\n  ) {\n  }\n}\n\nexport class GetQuoteTemplateListFailAction implements IAction {\n  public readonly type = QuoteTemplateTypes.GET_QUOTE_TEMPLATE_LIST_FAIL;\n\n  constructor(\n    public payload?: {\n      error: any\n    }\n  ) {\n  }\n}\n\nexport class DeleteQuoteTemplate implements IAction {\n  public readonly type = QuoteTemplateTypes.DELETE_QUOTE_TEMPLATE;\n\n  constructor(\n    public payload?: number\n  ) {\n  }\n}\n\nexport class SetDefaultQuoteTemplateAction implements IAction {\n  public readonly type = QuoteTemplateTypes.SET_DEFAULT_TEMPLATE;\n  constructor (\n    public payload: {\n      quoteTemplateId: number,\n      officeId: number,\n    }\n  ) {}\n}\n\nexport class SetDefaultQuoteSuccessAction implements IAction {\n  public readonly type = QuoteTemplateTypes.SET_DEFAULT_TEMPLATE_SUCCESS;\n  constructor (\n    public payload: {\n      updatedTemplate: IMap<any>,\n      officeIdToRemoveFromDefault: number,\n    }\n  ) {}\n}\n\nexport class SetDefaultQuoteFailAction implements IAction {\n  public readonly type = QuoteTemplateTypes.SET_DEFAULT_TEMPLATE_FAIL;\n\n  constructor(\n    public payload?: string\n  ) {\n  }\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12 14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z\"\n}), 'UnfoldLess');\n\nexports.default = _default;","import {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  List\n} from 'immutable';\nimport { Note } from '../../models';\n\nexport default {};\n\nexport enum NoteActionTypes {\n  GET_NOTES = 'GET_NOTES',\n  GET_NOTES_SUCCEEDED = 'GET_NOTES_SUCCEEDED',\n  SELECT_NOTE_ID = 'SELECT_NOTE_ID',\n  DELETE_NOTE = 'DELETE_NOTE',\n  DELETE_NOTE_SUCCEEDED = 'DELETE_NOTE_SUCCEEDED',\n  UPDATE_PERMISSION_LEVEL = 'UPDATE_PERMISSION_LEVEL',\n  UPDATE_PERMISSION_LEVEL_SUCCEEDED = 'UPDATE_PERMISSION_LEVEL_SUCCEEDED',\n  UPDATE_NOTE_CONTENT = 'UPDATE_NOTE_CONTENT',\n  UPDATE_NOTE_CONTENT_SUCCEEDED = 'UPDATE_NOTE_CONTENT_SUCCEEDED',\n  UPDATE_NOTE_ASSIGNED_USERS = 'UPDATE_NOTE_ASSIGNED_USERS',\n  UPDATE_NOTE_ASSIGNED_USERS_SUCCEEDED = 'UPDATE_NOTE_ASSIGNED_USERS_SUCCEEDED',\n  UPDATE_TAG = 'UPDATE_TAG',\n  CREATE_NOTE = 'CREATE_NOTE',\n  CREATE_NOTE_SUCCEEDED = 'CREATE_NOTE_SUCCEEDED',\n  EDIT_NOTE = 'EDIT_NOTE'\n}\n\nexport class GetNotesAction implements IAction {\n  public readonly type = NoteActionTypes.GET_NOTES;\n\n  constructor(\n    public payload: {\n      type: string,\n      typeId: number\n    }\n  ) {\n  }\n}\n\nexport class GetNotesSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.GET_NOTES_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      notes: List<IMap<any>>\n    }\n  ) {}\n}\n\nexport class SelectNoteIdAction implements IAction {\n  public readonly type = NoteActionTypes.SELECT_NOTE_ID;\n\n  constructor(\n    public payload: {\n      id: number,\n    }\n  ) {}\n}\n\nexport class DeleteNoteAction implements IAction {\n  public readonly type = NoteActionTypes.DELETE_NOTE;\n\n  constructor(\n    public payload: {\n      selectedNoteId: number,\n    }\n  ) {}\n}\n\nexport class DeleteNoteSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.DELETE_NOTE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      id: number,\n    }\n  ) {}\n}\n\nexport class UpdateNotePermissionLevelAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_PERMISSION_LEVEL;\n\n  constructor(\n    public payload: {\n      id: number,\n      permissionLevel: string,\n    }\n  ) {}\n}\n\nexport class UpdateNotePermissionLevelSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_PERMISSION_LEVEL_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      id: number,\n      permissionLevel: string,\n    }\n  ) {}\n}\n\nexport class UpdateNoteContentAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_NOTE_CONTENT;\n\n  constructor(\n    public payload: {\n      id: number,\n      note: string,\n    }\n  ) {}\n}\n\nexport class UpdateNoteContentSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_NOTE_CONTENT_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      id: number,\n      note: string,\n    }\n  ) {}\n}\n\nexport class UpdateAssignedUsersAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_NOTE_ASSIGNED_USERS;\n\n  constructor(\n    public payload: {\n      id: number,\n      type: string,\n      typeId: number,\n      addedUsersIds: number[],\n      removedUsersIds: number[]\n    }\n  ) {}\n}\n\nexport class UpdateAssignedUsersSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_NOTE_ASSIGNED_USERS_SUCCEEDED;\n\n  constructor(\n    public payload: IMap<Note>\n  ) {}\n}\n\nexport class CreateNoteAction implements IAction {\n  public readonly type = NoteActionTypes.CREATE_NOTE;\n\n  constructor(\n    public payload: {\n      note: string,\n      type: string,\n      typeId: number,\n      permissionLevel: string,\n      addedUsersIds: number[],\n      removedUsersIds: number[]\n    }\n  ) {}\n}\n\nexport class UpdateTagAction implements IAction {\n  public readonly type = NoteActionTypes.UPDATE_TAG;\n\n  constructor(\n    public payload: {\n      noteId: number,\n      type: string,\n      typeId: number\n    }\n  ) {}\n}\n\nexport class CreateNoteSucceededAction implements IAction {\n  public readonly type = NoteActionTypes.CREATE_NOTE_SUCCEEDED;\n\n  constructor(\n    public payload: {\n      modifiedBy: string,\n      note: string,\n      typeId: string,\n      permissionLevel: string,\n      createdDate: string,\n      modifiedDate: string,\n      tags: any,\n      type: string,\n      id: number,\n      createdBy: number\n    }\n  ) {}\n}\n\nexport class EditNoteAction implements IAction {\n  public readonly type = NoteActionTypes.EDIT_NOTE;\n\n  constructor(\n    public payload: {\n      selectedNoteId: number,\n      type: string,\n      typeId: number,\n      note: string,\n      permissionLevel: string,\n      addedUsersIds: number[],\n      removedUsersIds: number[]\n    }\n  ) {}\n}\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n  var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n  var oldProcessStyleValue = processStyleValue;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g;\n  var hyphenatedCache = {};\n\n  processStyleValue = function processStyleValue(key, value) {\n    if (key === 'content') {\n      if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n        console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n      }\n    }\n\n    var processed = oldProcessStyleValue(key, value);\n\n    if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n      hyphenatedCache[key] = true;\n      console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n        return _char.toUpperCase();\n      }) + \"?\");\n    }\n\n    return processed;\n  };\n}\n\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\n\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  if (interpolation.__emotion_styles !== undefined) {\n    if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n      throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n    }\n\n    return interpolation;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        if (interpolation.anim === 1) {\n          cursor = {\n            name: interpolation.name,\n            styles: interpolation.styles,\n            next: cursor\n          };\n          return interpolation.name;\n        }\n\n        if (interpolation.styles !== undefined) {\n          var next = interpolation.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = interpolation.styles + \";\";\n\n          if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n            styles += interpolation.map;\n          }\n\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n        } else if (process.env.NODE_ENV !== 'production') {\n          console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n        }\n\n        break;\n      }\n\n    case 'string':\n      if (process.env.NODE_ENV !== 'production') {\n        var matched = [];\n        var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n          var fakeVarName = \"animation\" + matched.length;\n          matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n          return \"${\" + fakeVarName + \"}\";\n        });\n\n        if (matched.length) {\n          console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n        }\n      }\n\n      break;\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  if (registered == null) {\n    return interpolation;\n  }\n\n  var cached = registered[interpolation];\n\n  if (process.env.NODE_ENV !== 'production' && couldBeSelectorInterpolation && shouldWarnAboutInterpolatingClassNameFromCss && cached !== undefined) {\n    console.error('Interpolating a className from css`` is not recommended and will cause problems with composition.\\n' + 'Interpolating a className from css`` will be completely unsupported in a future major version of Emotion');\n    shouldWarnAboutInterpolatingClassNameFromCss = false;\n  }\n\n  return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i], false);\n    }\n  } else {\n    for (var _key in obj) {\n      var value = obj[_key];\n\n      if (typeof value !== 'object') {\n        if (registered != null && registered[value] !== undefined) {\n          string += _key + \"{\" + registered[value] + \"}\";\n        } else if (isProcessableValue(value)) {\n          string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n        }\n      } else {\n        if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n          throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value, false);\n\n          switch (_key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(_key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n                if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n                  console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n                }\n\n                string += _key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n  sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings, false);\n  } else {\n    if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n      console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n    }\n\n    styles += strings[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n\n    if (stringMode) {\n      if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n      }\n\n      styles += strings[i];\n    }\n  }\n\n  var sourceMap;\n\n  if (process.env.NODE_ENV !== 'production') {\n    styles = styles.replace(sourceMapPattern, function (match) {\n      sourceMap = match;\n      return '';\n    });\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + // $FlowFixMe we know it's not null\n    match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n    return {\n      name: name,\n      styles: styles,\n      map: sourceMap,\n      next: cursor,\n      toString: function toString() {\n        return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n      }\n    };\n  }\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n};\n\nexport { serializeStyles };\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      userSelect: 'none',\n      width: '1em',\n      height: '1em',\n      display: 'inline-block',\n      fill: 'currentColor',\n      flexShrink: 0,\n      fontSize: theme.typography.pxToRem(24),\n      transition: theme.transitions.create('fill', {\n        duration: theme.transitions.duration.shorter\n      })\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"action\"`. */\n    colorAction: {\n      color: theme.palette.action.active\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `color=\"disabled\"`. */\n    colorDisabled: {\n      color: theme.palette.action.disabled\n    },\n\n    /* Styles applied to the root element if `fontSize=\"inherit\"`. */\n    fontSizeInherit: {\n      fontSize: 'inherit'\n    },\n\n    /* Styles applied to the root element if `fontSize=\"small\"`. */\n    fontSizeSmall: {\n      fontSize: theme.typography.pxToRem(20)\n    },\n\n    /* Styles applied to the root element if `fontSize=\"large\"`. */\n    fontSizeLarge: {\n      fontSize: theme.typography.pxToRem(35)\n    }\n  };\n};\nvar SvgIcon = React.forwardRef(function SvgIcon(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'inherit' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'svg' : _props$component,\n      _props$fontSize = props.fontSize,\n      fontSize = _props$fontSize === void 0 ? 'default' : _props$fontSize,\n      htmlColor = props.htmlColor,\n      titleAccess = props.titleAccess,\n      _props$viewBox = props.viewBox,\n      viewBox = _props$viewBox === void 0 ? '0 0 24 24' : _props$viewBox,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"titleAccess\", \"viewBox\"]);\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, color !== 'inherit' && classes[\"color\".concat(capitalize(color))], fontSize !== 'default' && classes[\"fontSize\".concat(capitalize(fontSize))]),\n    focusable: \"false\",\n    viewBox: viewBox,\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? null : 'true',\n    role: titleAccess ? 'img' : 'presentation',\n    ref: ref\n  }, other), children, titleAccess ? React.createElement(\"title\", null, titleAccess) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Node passed into the SVG element.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   */\n  color: PropTypes.oneOf(['action', 'disabled', 'error', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   */\n  fontSize: PropTypes.oneOf(['default', 'inherit', 'large', 'small']),\n\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: PropTypes.string,\n\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this property.\n   */\n  shapeRendering: PropTypes.string,\n\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: PropTypes.string,\n\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   */\n  viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default withStyles(styles, {\n  name: 'MuiSvgIcon'\n})(SvgIcon);","function _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nvar noop = function noop() {};\n\nvar _WINDOW = {};\nvar _DOCUMENT = {};\nvar _MUTATION_OBSERVER = null;\nvar _PERFORMANCE = {\n  mark: noop,\n  measure: noop\n};\n\ntry {\n  if (typeof window !== 'undefined') _WINDOW = window;\n  if (typeof document !== 'undefined') _DOCUMENT = document;\n  if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n  if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\n\nvar _ref = _WINDOW.navigator || {},\n    _ref$userAgent = _ref.userAgent,\n    userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\n\nvar WINDOW = _WINDOW;\nvar DOCUMENT = _DOCUMENT;\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\nvar PERFORMANCE = _PERFORMANCE;\nvar IS_BROWSER = !!WINDOW.document;\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nvar UNITS_IN_GRID = 16;\nvar DEFAULT_FAMILY_PREFIX = 'fa';\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nvar DATA_PREFIX = 'data-prefix';\nvar DATA_ICON = 'data-icon';\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nvar MUTATION_APPROACH_ASYNC = 'async';\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nvar PRODUCTION = function () {\n  try {\n    return process.env.NODE_ENV === 'production';\n  } catch (e) {\n    return false;\n  }\n}();\nvar PREFIX_TO_STYLE = {\n  'fas': 'solid',\n  'far': 'regular',\n  'fal': 'light',\n  'fab': 'brands',\n  'fa': 'solid'\n};\nvar STYLE_TO_PREFIX = {\n  'solid': 'fas',\n  'regular': 'far',\n  'light': 'fal',\n  'brands': 'fab'\n};\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nvar FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/;\nvar FONT_WEIGHT_TO_PREFIX = {\n  '900': 'fas',\n  '400': 'far',\n  'normal': 'far',\n  '300': 'fal'\n};\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nvar RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'flip-both', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {\n  return \"\".concat(n, \"x\");\n})).concat(oneToTwenty.map(function (n) {\n  return \"w-\".concat(n);\n}));\n\nvar initial = WINDOW.FontAwesomeConfig || {};\n\nfunction getAttrConfig(attr) {\n  var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n  if (element) {\n    return element.getAttribute(attr);\n  }\n}\n\nfunction coerce(val) {\n  // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n  // We'll assume that this is an indication that it should be toggled to true\n  // For example <script data-search-pseudo-elements src=\"...\"></script>\n  if (val === '') return true;\n  if (val === 'false') return false;\n  if (val === 'true') return true;\n  return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n  var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n  attrs.forEach(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        attr = _ref2[0],\n        key = _ref2[1];\n\n    var val = coerce(getAttrConfig(attr));\n\n    if (val !== undefined && val !== null) {\n      initial[key] = val;\n    }\n  });\n}\n\nvar _default = {\n  familyPrefix: DEFAULT_FAMILY_PREFIX,\n  replacementClass: DEFAULT_REPLACEMENT_CLASS,\n  autoReplaceSvg: true,\n  autoAddCss: true,\n  autoA11y: true,\n  searchPseudoElements: false,\n  observeMutations: true,\n  mutateApproach: 'async',\n  keepOriginalSource: true,\n  measurePerformance: false,\n  showMissingIcons: true\n};\n\nvar _config = _objectSpread({}, _default, initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\n\nvar config = _objectSpread({}, _config);\n\nWINDOW.FontAwesomeConfig = config;\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n  DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n  loaded = 1;\n  functions.map(function (fn) {\n    return fn();\n  });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n  loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n  if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n  if (!IS_DOM) return;\n  loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nvar PENDING = 'pending';\nvar SETTLED = 'settled';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\n\nvar NOOP = function NOOP() {};\n\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush() {\n  // run promise callbacks\n  for (var i = 0; i < asyncQueue.length; i++) {\n    asyncQueue[i][0](asyncQueue[i][1]);\n  } // reset async asyncQueue\n\n\n  asyncQueue = [];\n  asyncTimer = false;\n}\n\nfunction asyncCall(callback, arg) {\n  asyncQueue.push([callback, arg]);\n\n  if (!asyncTimer) {\n    asyncTimer = true;\n    asyncSetTimer(asyncFlush, 0);\n  }\n}\n\nfunction invokeResolver(resolver, promise) {\n  function resolvePromise(value) {\n    resolve(promise, value);\n  }\n\n  function rejectPromise(reason) {\n    reject(promise, reason);\n  }\n\n  try {\n    resolver(resolvePromise, rejectPromise);\n  } catch (e) {\n    rejectPromise(e);\n  }\n}\n\nfunction invokeCallback(subscriber) {\n  var owner = subscriber.owner;\n  var settled = owner._state;\n  var value = owner._data;\n  var callback = subscriber[settled];\n  var promise = subscriber.then;\n\n  if (typeof callback === 'function') {\n    settled = FULFILLED;\n\n    try {\n      value = callback(value);\n    } catch (e) {\n      reject(promise, e);\n    }\n  }\n\n  if (!handleThenable(promise, value)) {\n    if (settled === FULFILLED) {\n      resolve(promise, value);\n    }\n\n    if (settled === REJECTED) {\n      reject(promise, value);\n    }\n  }\n}\n\nfunction handleThenable(promise, value) {\n  var resolved;\n\n  try {\n    if (promise === value) {\n      throw new TypeError('A promises callback cannot return that same promise.');\n    }\n\n    if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n      // then should be retrieved only once\n      var then = value.then;\n\n      if (typeof then === 'function') {\n        then.call(value, function (val) {\n          if (!resolved) {\n            resolved = true;\n\n            if (value === val) {\n              fulfill(promise, val);\n            } else {\n              resolve(promise, val);\n            }\n          }\n        }, function (reason) {\n          if (!resolved) {\n            resolved = true;\n            reject(promise, reason);\n          }\n        });\n        return true;\n      }\n    }\n  } catch (e) {\n    if (!resolved) {\n      reject(promise, e);\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nfunction resolve(promise, value) {\n  if (promise === value || !handleThenable(promise, value)) {\n    fulfill(promise, value);\n  }\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state === PENDING) {\n    promise._state = SETTLED;\n    promise._data = value;\n    asyncCall(publishFulfillment, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state === PENDING) {\n    promise._state = SETTLED;\n    promise._data = reason;\n    asyncCall(publishRejection, promise);\n  }\n}\n\nfunction publish(promise) {\n  promise._then = promise._then.forEach(invokeCallback);\n}\n\nfunction publishFulfillment(promise) {\n  promise._state = FULFILLED;\n  publish(promise);\n}\n\nfunction publishRejection(promise) {\n  promise._state = REJECTED;\n  publish(promise);\n\n  if (!promise._handled && isNode) {\n    global.process.emit('unhandledRejection', promise._data, promise);\n  }\n}\n\nfunction notifyRejectionHandled(promise) {\n  global.process.emit('rejectionHandled', promise);\n}\n/**\n * @class\n */\n\n\nfunction P(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n  }\n\n  if (this instanceof P === false) {\n    throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n  }\n\n  this._then = [];\n  invokeResolver(resolver, this);\n}\n\nP.prototype = {\n  constructor: P,\n  _state: PENDING,\n  _then: null,\n  _data: undefined,\n  _handled: false,\n  then: function then(onFulfillment, onRejection) {\n    var subscriber = {\n      owner: this,\n      then: new this.constructor(NOOP),\n      fulfilled: onFulfillment,\n      rejected: onRejection\n    };\n\n    if ((onRejection || onFulfillment) && !this._handled) {\n      this._handled = true;\n\n      if (this._state === REJECTED && isNode) {\n        asyncCall(notifyRejectionHandled, this);\n      }\n    }\n\n    if (this._state === FULFILLED || this._state === REJECTED) {\n      // already resolved, call callback async\n      asyncCall(invokeCallback, subscriber);\n    } else {\n      // subscribe\n      this._then.push(subscriber);\n    }\n\n    return subscriber.then;\n  },\n  catch: function _catch(onRejection) {\n    return this.then(null, onRejection);\n  }\n};\n\nP.all = function (promises) {\n  if (!Array.isArray(promises)) {\n    throw new TypeError('You must pass an array to Promise.all().');\n  }\n\n  return new P(function (resolve, reject) {\n    var results = [];\n    var remaining = 0;\n\n    function resolver(index) {\n      remaining++;\n      return function (value) {\n        results[index] = value;\n\n        if (! --remaining) {\n          resolve(results);\n        }\n      };\n    }\n\n    for (var i = 0, promise; i < promises.length; i++) {\n      promise = promises[i];\n\n      if (promise && typeof promise.then === 'function') {\n        promise.then(resolver(i), reject);\n      } else {\n        results[i] = promise;\n      }\n    }\n\n    if (!remaining) {\n      resolve(results);\n    }\n  });\n};\n\nP.race = function (promises) {\n  if (!Array.isArray(promises)) {\n    throw new TypeError('You must pass an array to Promise.race().');\n  }\n\n  return new P(function (resolve, reject) {\n    for (var i = 0, promise; i < promises.length; i++) {\n      promise = promises[i];\n\n      if (promise && typeof promise.then === 'function') {\n        promise.then(resolve, reject);\n      } else {\n        resolve(promise);\n      }\n    }\n  });\n};\n\nP.resolve = function (value) {\n  if (value && _typeof(value) === 'object' && value.constructor === P) {\n    return value;\n  }\n\n  return new P(function (resolve) {\n    resolve(value);\n  });\n};\n\nP.reject = function (reason) {\n  return new P(function (resolve, reject) {\n    reject(reason);\n  });\n};\n\nvar picked = typeof Promise === 'function' ? Promise : P;\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n  size: 16,\n  x: 0,\n  y: 0,\n  rotate: 0,\n  flipX: false,\n  flipY: false\n};\n\nfunction isReserved(name) {\n  return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction insertCss(css) {\n  if (!css || !IS_DOM) {\n    return;\n  }\n\n  var style = DOCUMENT.createElement('style');\n  style.setAttribute('type', 'text/css');\n  style.innerHTML = css;\n  var headChildren = DOCUMENT.head.childNodes;\n  var beforeChild = null;\n\n  for (var i = headChildren.length - 1; i > -1; i--) {\n    var child = headChildren[i];\n    var tagName = (child.tagName || '').toUpperCase();\n\n    if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n      beforeChild = child;\n    }\n  }\n\n  DOCUMENT.head.insertBefore(style, beforeChild);\n  return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n  var size = 12;\n  var id = '';\n\n  while (size-- > 0) {\n    id += idPool[Math.random() * 62 | 0];\n  }\n\n  return id;\n}\nfunction toArray(obj) {\n  var array = [];\n\n  for (var i = (obj || []).length >>> 0; i--;) {\n    array[i] = obj[i];\n  }\n\n  return array;\n}\nfunction classArray(node) {\n  if (node.classList) {\n    return toArray(node.classList);\n  } else {\n    return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n      return i;\n    });\n  }\n}\nfunction getIconName(familyPrefix, cls) {\n  var parts = cls.split('-');\n  var prefix = parts[0];\n  var iconName = parts.slice(1).join('-');\n\n  if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n    return iconName;\n  } else {\n    return null;\n  }\n}\nfunction htmlEscape(str) {\n  return \"\".concat(str).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction joinAttributes(attributes) {\n  return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n    return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n  }, '').trim();\n}\nfunction joinStyles(styles) {\n  return Object.keys(styles || {}).reduce(function (acc, styleName) {\n    return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n  }, '');\n}\nfunction transformIsMeaningful(transform) {\n  return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n  var transform = _ref.transform,\n      containerWidth = _ref.containerWidth,\n      iconWidth = _ref.iconWidth;\n  var outer = {\n    transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n  };\n  var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n  var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n  var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n  var inner = {\n    transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n  };\n  var path = {\n    transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n  };\n  return {\n    outer: outer,\n    inner: inner,\n    path: path\n  };\n}\nfunction transformForCss(_ref2) {\n  var transform = _ref2.transform,\n      _ref2$width = _ref2.width,\n      width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n      _ref2$height = _ref2.height,\n      height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n      _ref2$startCentered = _ref2.startCentered,\n      startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n  var val = '';\n\n  if (startCentered && IS_IE) {\n    val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n  } else if (startCentered) {\n    val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n  } else {\n    val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n  }\n\n  val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n  val += \"rotate(\".concat(transform.rotate, \"deg) \");\n  return val;\n}\n\nvar ALL_SPACE = {\n  x: 0,\n  y: 0,\n  width: '100%',\n  height: '100%'\n};\nfunction makeIconMasking (_ref) {\n  var children = _ref.children,\n      attributes = _ref.attributes,\n      main = _ref.main,\n      mask = _ref.mask,\n      transform = _ref.transform;\n  var mainWidth = main.width,\n      mainPath = main.icon;\n  var maskWidth = mask.width,\n      maskPath = mask.icon;\n  var trans = transformForSvg({\n    transform: transform,\n    containerWidth: maskWidth,\n    iconWidth: mainWidth\n  });\n  var maskRect = {\n    tag: 'rect',\n    attributes: _objectSpread({}, ALL_SPACE, {\n      fill: 'white'\n    })\n  };\n  var maskInnerGroup = {\n    tag: 'g',\n    attributes: _objectSpread({}, trans.inner),\n    children: [{\n      tag: 'path',\n      attributes: _objectSpread({}, mainPath.attributes, trans.path, {\n        fill: 'black'\n      })\n    }]\n  };\n  var maskOuterGroup = {\n    tag: 'g',\n    attributes: _objectSpread({}, trans.outer),\n    children: [maskInnerGroup]\n  };\n  var maskId = \"mask-\".concat(nextUniqueId());\n  var clipId = \"clip-\".concat(nextUniqueId());\n  var maskTag = {\n    tag: 'mask',\n    attributes: _objectSpread({}, ALL_SPACE, {\n      id: maskId,\n      maskUnits: 'userSpaceOnUse',\n      maskContentUnits: 'userSpaceOnUse'\n    }),\n    children: [maskRect, maskOuterGroup]\n  };\n  var defs = {\n    tag: 'defs',\n    children: [{\n      tag: 'clipPath',\n      attributes: {\n        id: clipId\n      },\n      children: [maskPath]\n    }, maskTag]\n  };\n  children.push(defs, {\n    tag: 'rect',\n    attributes: _objectSpread({\n      fill: 'currentColor',\n      'clip-path': \"url(#\".concat(clipId, \")\"),\n      mask: \"url(#\".concat(maskId, \")\")\n    }, ALL_SPACE)\n  });\n  return {\n    children: children,\n    attributes: attributes\n  };\n}\n\nfunction makeIconStandard (_ref) {\n  var children = _ref.children,\n      attributes = _ref.attributes,\n      main = _ref.main,\n      transform = _ref.transform,\n      styles = _ref.styles;\n  var styleString = joinStyles(styles);\n\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n\n  if (transformIsMeaningful(transform)) {\n    var trans = transformForSvg({\n      transform: transform,\n      containerWidth: main.width,\n      iconWidth: main.width\n    });\n    children.push({\n      tag: 'g',\n      attributes: _objectSpread({}, trans.outer),\n      children: [{\n        tag: 'g',\n        attributes: _objectSpread({}, trans.inner),\n        children: [{\n          tag: main.icon.tag,\n          children: main.icon.children,\n          attributes: _objectSpread({}, main.icon.attributes, trans.path)\n        }]\n      }]\n    });\n  } else {\n    children.push(main.icon);\n  }\n\n  return {\n    children: children,\n    attributes: attributes\n  };\n}\n\nfunction asIcon (_ref) {\n  var children = _ref.children,\n      main = _ref.main,\n      mask = _ref.mask,\n      attributes = _ref.attributes,\n      styles = _ref.styles,\n      transform = _ref.transform;\n\n  if (transformIsMeaningful(transform) && main.found && !mask.found) {\n    var width = main.width,\n        height = main.height;\n    var offset = {\n      x: width / height / 2,\n      y: 0.5\n    };\n    attributes['style'] = joinStyles(_objectSpread({}, styles, {\n      'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n    }));\n  }\n\n  return [{\n    tag: 'svg',\n    attributes: attributes,\n    children: children\n  }];\n}\n\nfunction asSymbol (_ref) {\n  var prefix = _ref.prefix,\n      iconName = _ref.iconName,\n      children = _ref.children,\n      attributes = _ref.attributes,\n      symbol = _ref.symbol;\n  var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n  return [{\n    tag: 'svg',\n    attributes: {\n      style: 'display: none;'\n    },\n    children: [{\n      tag: 'symbol',\n      attributes: _objectSpread({}, attributes, {\n        id: id\n      }),\n      children: children\n    }]\n  }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n  var _params$icons = params.icons,\n      main = _params$icons.main,\n      mask = _params$icons.mask,\n      prefix = params.prefix,\n      iconName = params.iconName,\n      transform = params.transform,\n      symbol = params.symbol,\n      title = params.title,\n      extra = params.extra,\n      _params$watchable = params.watchable,\n      watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n  var _ref = mask.found ? mask : main,\n      width = _ref.width,\n      height = _ref.height;\n\n  var widthClass = \"fa-w-\".concat(Math.ceil(width / height * 16));\n  var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n    return extra.classes.indexOf(c) === -1;\n  }).concat(extra.classes).join(' ');\n  var content = {\n    children: [],\n    attributes: _objectSpread({}, extra.attributes, {\n      'data-prefix': prefix,\n      'data-icon': iconName,\n      'class': attrClass,\n      'role': extra.attributes.role || 'img',\n      'xmlns': 'http://www.w3.org/2000/svg',\n      'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n    })\n  };\n\n  if (watchable) {\n    content.attributes[DATA_FA_I2SVG] = '';\n  }\n\n  if (title) content.children.push({\n    tag: 'title',\n    attributes: {\n      id: content.attributes['aria-labelledby'] || \"title-\".concat(nextUniqueId())\n    },\n    children: [title]\n  });\n\n  var args = _objectSpread({}, content, {\n    prefix: prefix,\n    iconName: iconName,\n    main: main,\n    mask: mask,\n    transform: transform,\n    symbol: symbol,\n    styles: extra.styles\n  });\n\n  var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n      children = _ref2.children,\n      attributes = _ref2.attributes;\n\n  args.children = children;\n  args.attributes = attributes;\n\n  if (symbol) {\n    return asSymbol(args);\n  } else {\n    return asIcon(args);\n  }\n}\nfunction makeLayersTextAbstract(params) {\n  var content = params.content,\n      width = params.width,\n      height = params.height,\n      transform = params.transform,\n      title = params.title,\n      extra = params.extra,\n      _params$watchable2 = params.watchable,\n      watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n  var attributes = _objectSpread({}, extra.attributes, title ? {\n    'title': title\n  } : {}, {\n    'class': extra.classes.join(' ')\n  });\n\n  if (watchable) {\n    attributes[DATA_FA_I2SVG] = '';\n  }\n\n  var styles = _objectSpread({}, extra.styles);\n\n  if (transformIsMeaningful(transform)) {\n    styles['transform'] = transformForCss({\n      transform: transform,\n      startCentered: true,\n      width: width,\n      height: height\n    });\n    styles['-webkit-transform'] = styles['transform'];\n  }\n\n  var styleString = joinStyles(styles);\n\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n\n  return val;\n}\nfunction makeLayersCounterAbstract(params) {\n  var content = params.content,\n      title = params.title,\n      extra = params.extra;\n\n  var attributes = _objectSpread({}, extra.attributes, title ? {\n    'title': title\n  } : {}, {\n    'class': extra.classes.join(' ')\n  });\n\n  var styleString = joinStyles(extra.styles);\n\n  if (styleString.length > 0) {\n    attributes['style'] = styleString;\n  }\n\n  var val = [];\n  val.push({\n    tag: 'span',\n    attributes: attributes,\n    children: [content]\n  });\n\n  if (title) {\n    val.push({\n      tag: 'span',\n      attributes: {\n        class: 'sr-only'\n      },\n      children: [title]\n    });\n  }\n\n  return val;\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n  mark: noop$1,\n  measure: noop$1\n};\nvar preamble = \"FA \\\"5.8.2\\\"\";\n\nvar begin = function begin(name) {\n  p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n  return function () {\n    return end(name);\n  };\n};\n\nvar end = function end(name) {\n  p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n  p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n  begin: begin,\n  end: end\n};\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n  return function (a, b, c, d) {\n    return func.call(thisContext, a, b, c, d);\n  };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param  {Object}   subject      The object to reduce over.\n * @param  {Function} fn           The reducer function.\n * @param  {mixed}    initialValue The initial value for the reducer, defaults to subject[0].\n * @param  {Object}   thisContext  The context for the reducer.\n * @return {mixed}                 The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n  var keys = Object.keys(subject),\n      length = keys.length,\n      iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n      i,\n      key,\n      result;\n\n  if (initialValue === undefined) {\n    i = 1;\n    result = subject[keys[0]];\n  } else {\n    i = 0;\n    result = initialValue;\n  }\n\n  for (; i < length; i++) {\n    key = keys[i];\n    result = iterator(result, subject[key], key, subject);\n  }\n\n  return result;\n};\n\nfunction toHex(unicode) {\n  var result = '';\n\n  for (var i = 0; i < unicode.length; i++) {\n    var hex = unicode.charCodeAt(i).toString(16);\n    result += ('000' + hex).slice(-4);\n  }\n\n  return result;\n}\n\nfunction defineIcons(prefix, icons) {\n  var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var _params$skipHooks = params.skipHooks,\n      skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n  var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n    var icon = icons[iconName];\n    var expanded = !!icon.icon;\n\n    if (expanded) {\n      acc[icon.iconName] = icon.icon;\n    } else {\n      acc[iconName] = icon;\n    }\n\n    return acc;\n  }, {});\n\n  if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n    namespace.hooks.addPack(prefix, normalized);\n  } else {\n    namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n  }\n  /**\n   * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n   * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n   * for `fas` so we'll easy the upgrade process for our users by automatically defining\n   * this as well.\n   */\n\n\n  if (prefix === 'fas') {\n    defineIcons('fa', icons);\n  }\n}\n\nvar styles = namespace.styles,\n    shims = namespace.shims;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar build = function build() {\n  var lookup = function lookup(reducer) {\n    return reduce(styles, function (o, style, prefix) {\n      o[prefix] = reduce(style, reducer, {});\n      return o;\n    }, {});\n  };\n\n  _byUnicode = lookup(function (acc, icon, iconName) {\n    if (icon[3]) {\n      acc[icon[3]] = iconName;\n    }\n\n    return acc;\n  });\n  _byLigature = lookup(function (acc, icon, iconName) {\n    var ligatures = icon[2];\n    acc[iconName] = iconName;\n    ligatures.forEach(function (ligature) {\n      acc[ligature] = iconName;\n    });\n    return acc;\n  });\n  var hasRegular = 'far' in styles;\n  _byOldName = reduce(shims, function (acc, shim) {\n    var oldName = shim[0];\n    var prefix = shim[1];\n    var iconName = shim[2];\n\n    if (prefix === 'far' && !hasRegular) {\n      prefix = 'fas';\n    }\n\n    acc[oldName] = {\n      prefix: prefix,\n      iconName: iconName\n    };\n    return acc;\n  }, {});\n};\nbuild();\nfunction byUnicode(prefix, unicode) {\n  return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n  return (_byLigature[prefix] || {})[ligature];\n}\nfunction byOldName(name) {\n  return _byOldName[name] || {\n    prefix: null,\n    iconName: null\n  };\n}\n\nvar styles$1 = namespace.styles;\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n  return {\n    prefix: null,\n    iconName: null,\n    rest: []\n  };\n};\nfunction getCanonicalIcon(values) {\n  return values.reduce(function (acc, cls) {\n    var iconName = getIconName(config.familyPrefix, cls);\n\n    if (styles$1[cls]) {\n      acc.prefix = cls;\n    } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fab', 'fa'].indexOf(cls) > -1) {\n      acc.prefix = cls;\n    } else if (iconName) {\n      var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n      acc.iconName = shim.iconName || iconName;\n      acc.prefix = shim.prefix || acc.prefix;\n    } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n      acc.rest.push(cls);\n    }\n\n    return acc;\n  }, emptyCanonicalIcon());\n}\nfunction iconFromMapping(mapping, prefix, iconName) {\n  if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n    return {\n      prefix: prefix,\n      iconName: iconName,\n      icon: mapping[prefix][iconName]\n    };\n  }\n}\n\nfunction toHtml(abstractNodes) {\n  var tag = abstractNodes.tag,\n      _abstractNodes$attrib = abstractNodes.attributes,\n      attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n      _abstractNodes$childr = abstractNodes.children,\n      children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n  if (typeof abstractNodes === 'string') {\n    return htmlEscape(abstractNodes);\n  } else {\n    return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"</\").concat(tag, \">\");\n  }\n}\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n  var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n  return typeof i2svg === 'string';\n}\n\nfunction getMutator() {\n  if (config.autoReplaceSvg === true) {\n    return mutators.replace;\n  }\n\n  var mutator = mutators[config.autoReplaceSvg];\n  return mutator || mutators.replace;\n}\n\nvar mutators = {\n  replace: function replace(mutation) {\n    var node = mutation[0];\n    var abstract = mutation[1];\n    var newOuterHTML = abstract.map(function (a) {\n      return toHtml(a);\n    }).join('\\n');\n\n    if (node.parentNode && node.outerHTML) {\n      node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"<!-- \".concat(node.outerHTML, \" -->\") : '');\n    } else if (node.parentNode) {\n      var newNode = document.createElement('span');\n      node.parentNode.replaceChild(newNode, node);\n      newNode.outerHTML = newOuterHTML;\n    }\n  },\n  nest: function nest(mutation) {\n    var node = mutation[0];\n    var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n    // Short-circuit to the standard replacement\n\n    if (~classArray(node).indexOf(config.replacementClass)) {\n      return mutators.replace(mutation);\n    }\n\n    var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n    delete abstract[0].attributes.style;\n    var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n      if (cls === config.replacementClass || cls.match(forSvg)) {\n        acc.toSvg.push(cls);\n      } else {\n        acc.toNode.push(cls);\n      }\n\n      return acc;\n    }, {\n      toNode: [],\n      toSvg: []\n    });\n    abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n    var newInnerHTML = abstract.map(function (a) {\n      return toHtml(a);\n    }).join('\\n');\n    node.setAttribute('class', splitClasses.toNode.join(' '));\n    node.setAttribute(DATA_FA_I2SVG, '');\n    node.innerHTML = newInnerHTML;\n  }\n};\n\nfunction performOperationSync(op) {\n  op();\n}\n\nfunction perform(mutations, callback) {\n  var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n  if (mutations.length === 0) {\n    callbackFunction();\n  } else {\n    var frame = performOperationSync;\n\n    if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n      frame = WINDOW.requestAnimationFrame || performOperationSync;\n    }\n\n    frame(function () {\n      var mutator = getMutator();\n      var mark = perf.begin('mutate');\n      mutations.map(mutator);\n      mark();\n      callbackFunction();\n    });\n  }\n}\nvar disabled = false;\nfunction disableObservation() {\n  disabled = true;\n}\nfunction enableObservation() {\n  disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n  if (!MUTATION_OBSERVER) {\n    return;\n  }\n\n  if (!config.observeMutations) {\n    return;\n  }\n\n  var treeCallback = options.treeCallback,\n      nodeCallback = options.nodeCallback,\n      pseudoElementsCallback = options.pseudoElementsCallback,\n      _options$observeMutat = options.observeMutationsRoot,\n      observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n  mo = new MUTATION_OBSERVER(function (objects) {\n    if (disabled) return;\n    toArray(objects).forEach(function (mutationRecord) {\n      if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n        if (config.searchPseudoElements) {\n          pseudoElementsCallback(mutationRecord.target);\n        }\n\n        treeCallback(mutationRecord.target);\n      }\n\n      if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n        pseudoElementsCallback(mutationRecord.target.parentNode);\n      }\n\n      if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n        if (mutationRecord.attributeName === 'class') {\n          var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n              prefix = _getCanonicalIcon.prefix,\n              iconName = _getCanonicalIcon.iconName;\n\n          if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n          if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n        } else {\n          nodeCallback(mutationRecord.target);\n        }\n      }\n    });\n  });\n  if (!IS_DOM) return;\n  mo.observe(observeMutationsRoot, {\n    childList: true,\n    attributes: true,\n    characterData: true,\n    subtree: true\n  });\n}\nfunction disconnect() {\n  if (!mo) return;\n  mo.disconnect();\n}\n\nfunction styleParser (node) {\n  var style = node.getAttribute('style');\n  var val = [];\n\n  if (style) {\n    val = style.split(';').reduce(function (acc, style) {\n      var styles = style.split(':');\n      var prop = styles[0];\n      var value = styles.slice(1);\n\n      if (prop && value.length > 0) {\n        acc[prop] = value.join(':').trim();\n      }\n\n      return acc;\n    }, {});\n  }\n\n  return val;\n}\n\nfunction classParser (node) {\n  var existingPrefix = node.getAttribute('data-prefix');\n  var existingIconName = node.getAttribute('data-icon');\n  var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n  var val = getCanonicalIcon(classArray(node));\n\n  if (existingPrefix && existingIconName) {\n    val.prefix = existingPrefix;\n    val.iconName = existingIconName;\n  }\n\n  if (val.prefix && innerText.length > 1) {\n    val.iconName = byLigature(val.prefix, node.innerText);\n  } else if (val.prefix && innerText.length === 1) {\n    val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n  }\n\n  return val;\n}\n\nvar parseTransformString = function parseTransformString(transformString) {\n  var transform = {\n    size: 16,\n    x: 0,\n    y: 0,\n    flipX: false,\n    flipY: false,\n    rotate: 0\n  };\n\n  if (!transformString) {\n    return transform;\n  } else {\n    return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n      var parts = n.toLowerCase().split('-');\n      var first = parts[0];\n      var rest = parts.slice(1).join('-');\n\n      if (first && rest === 'h') {\n        acc.flipX = true;\n        return acc;\n      }\n\n      if (first && rest === 'v') {\n        acc.flipY = true;\n        return acc;\n      }\n\n      rest = parseFloat(rest);\n\n      if (isNaN(rest)) {\n        return acc;\n      }\n\n      switch (first) {\n        case 'grow':\n          acc.size = acc.size + rest;\n          break;\n\n        case 'shrink':\n          acc.size = acc.size - rest;\n          break;\n\n        case 'left':\n          acc.x = acc.x - rest;\n          break;\n\n        case 'right':\n          acc.x = acc.x + rest;\n          break;\n\n        case 'up':\n          acc.y = acc.y - rest;\n          break;\n\n        case 'down':\n          acc.y = acc.y + rest;\n          break;\n\n        case 'rotate':\n          acc.rotate = acc.rotate + rest;\n          break;\n      }\n\n      return acc;\n    }, transform);\n  }\n};\nfunction transformParser (node) {\n  return parseTransformString(node.getAttribute('data-fa-transform'));\n}\n\nfunction symbolParser (node) {\n  var symbol = node.getAttribute('data-fa-symbol');\n  return symbol === null ? false : symbol === '' ? true : symbol;\n}\n\nfunction attributesParser (node) {\n  var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n    if (acc.name !== 'class' && acc.name !== 'style') {\n      acc[attr.name] = attr.value;\n    }\n\n    return acc;\n  }, {});\n  var title = node.getAttribute('title');\n\n  if (config.autoA11y) {\n    if (title) {\n      extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n    } else {\n      extraAttributes['aria-hidden'] = 'true';\n      extraAttributes['focusable'] = 'false';\n    }\n  }\n\n  return extraAttributes;\n}\n\nfunction maskParser (node) {\n  var mask = node.getAttribute('data-fa-mask');\n\n  if (!mask) {\n    return emptyCanonicalIcon();\n  } else {\n    return getCanonicalIcon(mask.split(' ').map(function (i) {\n      return i.trim();\n    }));\n  }\n}\n\nfunction blankMeta() {\n  return {\n    iconName: null,\n    title: null,\n    prefix: null,\n    transform: meaninglessTransform,\n    symbol: false,\n    mask: null,\n    extra: {\n      classes: [],\n      styles: {},\n      attributes: {}\n    }\n  };\n}\nfunction parseMeta(node) {\n  var _classParser = classParser(node),\n      iconName = _classParser.iconName,\n      prefix = _classParser.prefix,\n      extraClasses = _classParser.rest;\n\n  var extraStyles = styleParser(node);\n  var transform = transformParser(node);\n  var symbol = symbolParser(node);\n  var extraAttributes = attributesParser(node);\n  var mask = maskParser(node);\n  return {\n    iconName: iconName,\n    title: node.getAttribute('title'),\n    prefix: prefix,\n    transform: transform,\n    symbol: symbol,\n    mask: mask,\n    extra: {\n      classes: extraClasses,\n      styles: extraStyles,\n      attributes: extraAttributes\n    }\n  };\n}\n\nfunction MissingIcon(error) {\n  this.name = 'MissingIcon';\n  this.message = error || 'Icon unavailable';\n  this.stack = new Error().stack;\n}\nMissingIcon.prototype = Object.create(Error.prototype);\nMissingIcon.prototype.constructor = MissingIcon;\n\nvar FILL = {\n  fill: 'currentColor'\n};\nvar ANIMATION_BASE = {\n  attributeType: 'XML',\n  repeatCount: 'indefinite',\n  dur: '2s'\n};\nvar RING = {\n  tag: 'path',\n  attributes: _objectSpread({}, FILL, {\n    d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n  })\n};\n\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n  attributeName: 'opacity'\n});\n\nvar DOT = {\n  tag: 'circle',\n  attributes: _objectSpread({}, FILL, {\n    cx: '256',\n    cy: '364',\n    r: '28'\n  }),\n  children: [{\n    tag: 'animate',\n    attributes: _objectSpread({}, ANIMATION_BASE, {\n      attributeName: 'r',\n      values: '28;14;28;28;14;28;'\n    })\n  }, {\n    tag: 'animate',\n    attributes: _objectSpread({}, OPACITY_ANIMATE, {\n      values: '1;0;1;1;0;1;'\n    })\n  }]\n};\nvar QUESTION = {\n  tag: 'path',\n  attributes: _objectSpread({}, FILL, {\n    opacity: '1',\n    d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n  }),\n  children: [{\n    tag: 'animate',\n    attributes: _objectSpread({}, OPACITY_ANIMATE, {\n      values: '1;0;0;0;0;1;'\n    })\n  }]\n};\nvar EXCLAMATION = {\n  tag: 'path',\n  attributes: _objectSpread({}, FILL, {\n    opacity: '0',\n    d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n  }),\n  children: [{\n    tag: 'animate',\n    attributes: _objectSpread({}, OPACITY_ANIMATE, {\n      values: '0;0;1;1;0;0;'\n    })\n  }]\n};\nvar missing = {\n  tag: 'g',\n  children: [RING, DOT, QUESTION, EXCLAMATION]\n};\n\nvar styles$2 = namespace.styles;\nfunction findIcon(iconName, prefix) {\n  return new picked(function (resolve, reject) {\n    var val = {\n      found: false,\n      width: 512,\n      height: 512,\n      icon: missing\n    };\n\n    if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n      var icon = styles$2[prefix][iconName];\n      var width = icon[0];\n      var height = icon[1];\n      var vectorData = icon.slice(4);\n      val = {\n        found: true,\n        width: width,\n        height: height,\n        icon: {\n          tag: 'path',\n          attributes: {\n            fill: 'currentColor',\n            d: vectorData[0]\n          }\n        }\n      };\n      return resolve(val);\n    }\n\n    if (iconName && prefix && !config.showMissingIcons) {\n      reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n    } else {\n      resolve(val);\n    }\n  });\n}\n\nvar styles$3 = namespace.styles;\n\nfunction generateSvgReplacementMutation(node, nodeMeta) {\n  var iconName = nodeMeta.iconName,\n      title = nodeMeta.title,\n      prefix = nodeMeta.prefix,\n      transform = nodeMeta.transform,\n      symbol = nodeMeta.symbol,\n      mask = nodeMeta.mask,\n      extra = nodeMeta.extra;\n  return new picked(function (resolve, reject) {\n    picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          main = _ref2[0],\n          mask = _ref2[1];\n\n      resolve([node, makeInlineSvgAbstract({\n        icons: {\n          main: main,\n          mask: mask\n        },\n        prefix: prefix,\n        iconName: iconName,\n        transform: transform,\n        symbol: symbol,\n        mask: mask,\n        title: title,\n        extra: extra,\n        watchable: true\n      })]);\n    });\n  });\n}\n\nfunction generateLayersText(node, nodeMeta) {\n  var title = nodeMeta.title,\n      transform = nodeMeta.transform,\n      extra = nodeMeta.extra;\n  var width = null;\n  var height = null;\n\n  if (IS_IE) {\n    var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n    var boundingClientRect = node.getBoundingClientRect();\n    width = boundingClientRect.width / computedFontSize;\n    height = boundingClientRect.height / computedFontSize;\n  }\n\n  if (config.autoA11y && !title) {\n    extra.attributes['aria-hidden'] = 'true';\n  }\n\n  return picked.resolve([node, makeLayersTextAbstract({\n    content: node.innerHTML,\n    width: width,\n    height: height,\n    transform: transform,\n    title: title,\n    extra: extra,\n    watchable: true\n  })]);\n}\n\nfunction generateMutation(node) {\n  var nodeMeta = parseMeta(node);\n\n  if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n    return generateLayersText(node, nodeMeta);\n  } else {\n    return generateSvgReplacementMutation(node, nodeMeta);\n  }\n}\n\nfunction onTree(root) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  if (!IS_DOM) return;\n  var htmlClassList = DOCUMENT.documentElement.classList;\n\n  var hclAdd = function hclAdd(suffix) {\n    return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n\n  var hclRemove = function hclRemove(suffix) {\n    return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n  };\n\n  var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n  var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n    return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n  })).join(', ');\n\n  if (prefixesDomQuery.length === 0) {\n    return;\n  }\n\n  var candidates = [];\n\n  try {\n    candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n  } catch (e) {// noop\n  }\n\n  if (candidates.length > 0) {\n    hclAdd('pending');\n    hclRemove('complete');\n  } else {\n    return;\n  }\n\n  var mark = perf.begin('onTree');\n  var mutations = candidates.reduce(function (acc, node) {\n    try {\n      var mutation = generateMutation(node);\n\n      if (mutation) {\n        acc.push(mutation);\n      }\n    } catch (e) {\n      if (!PRODUCTION) {\n        if (e instanceof MissingIcon) {\n          console.error(e);\n        }\n      }\n    }\n\n    return acc;\n  }, []);\n  return new picked(function (resolve, reject) {\n    picked.all(mutations).then(function (resolvedMutations) {\n      perform(resolvedMutations, function () {\n        hclAdd('active');\n        hclAdd('complete');\n        hclRemove('pending');\n        if (typeof callback === 'function') callback();\n        mark();\n        resolve();\n      });\n    }).catch(function () {\n      mark();\n      reject();\n    });\n  });\n}\nfunction onNode(node) {\n  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  generateMutation(node).then(function (mutation) {\n    if (mutation) {\n      perform([mutation], callback);\n    }\n  });\n}\n\nfunction replaceForPosition(node, position) {\n  var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n  return new picked(function (resolve, reject) {\n    if (node.getAttribute(pendingAttribute) !== null) {\n      // This node is already being processed\n      return resolve();\n    }\n\n    var children = toArray(node.children);\n    var alreadyProcessedPseudoElement = children.filter(function (c) {\n      return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n    })[0];\n    var styles = WINDOW.getComputedStyle(node, position);\n    var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n    var fontWeight = styles.getPropertyValue('font-weight');\n\n    if (alreadyProcessedPseudoElement && !fontFamily) {\n      // If we've already processed it but the current computed style does not result in a font-family,\n      // that probably means that a class name that was previously present to make the icon has been\n      // removed. So we now should delete the icon.\n      node.removeChild(alreadyProcessedPseudoElement);\n      return resolve();\n    } else if (fontFamily) {\n      var content = styles.getPropertyValue('content');\n      var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n      var hexValue = toHex(content.length === 3 ? content.substr(1, 1) : content);\n      var iconName = byUnicode(prefix, hexValue);\n      var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n      // already done so with the same prefix and iconName\n\n      if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n        node.setAttribute(pendingAttribute, iconIdentifier);\n\n        if (alreadyProcessedPseudoElement) {\n          // Delete the old one, since we're replacing it with a new one\n          node.removeChild(alreadyProcessedPseudoElement);\n        }\n\n        var meta = blankMeta();\n        var extra = meta.extra;\n        extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n        findIcon(iconName, prefix).then(function (main) {\n          var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n            icons: {\n              main: main,\n              mask: emptyCanonicalIcon()\n            },\n            prefix: prefix,\n            iconName: iconIdentifier,\n            extra: extra,\n            watchable: true\n          }));\n          var element = DOCUMENT.createElement('svg');\n\n          if (position === ':before') {\n            node.insertBefore(element, node.firstChild);\n          } else {\n            node.appendChild(element);\n          }\n\n          element.outerHTML = abstract.map(function (a) {\n            return toHtml(a);\n          }).join('\\n');\n          node.removeAttribute(pendingAttribute);\n          resolve();\n        }).catch(reject);\n      } else {\n        resolve();\n      }\n    } else {\n      resolve();\n    }\n  });\n}\n\nfunction replace(node) {\n  return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n}\n\nfunction processable(node) {\n  return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements (root) {\n  if (!IS_DOM) return;\n  return new picked(function (resolve, reject) {\n    var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n    var end = perf.begin('searchPseudoElements');\n    disableObservation();\n    picked.all(operations).then(function () {\n      end();\n      enableObservation();\n      resolve();\n    }).catch(function () {\n      end();\n      enableObservation();\n      reject();\n    });\n  });\n}\n\nvar baseStyles = \"svg:not(:root).svg-inline--fa {\\n  overflow: visible;\\n}\\n\\n.svg-inline--fa {\\n  display: inline-block;\\n  font-size: inherit;\\n  height: 1em;\\n  overflow: visible;\\n  vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-lg {\\n  vertical-align: -0.225em;\\n}\\n.svg-inline--fa.fa-w-1 {\\n  width: 0.0625em;\\n}\\n.svg-inline--fa.fa-w-2 {\\n  width: 0.125em;\\n}\\n.svg-inline--fa.fa-w-3 {\\n  width: 0.1875em;\\n}\\n.svg-inline--fa.fa-w-4 {\\n  width: 0.25em;\\n}\\n.svg-inline--fa.fa-w-5 {\\n  width: 0.3125em;\\n}\\n.svg-inline--fa.fa-w-6 {\\n  width: 0.375em;\\n}\\n.svg-inline--fa.fa-w-7 {\\n  width: 0.4375em;\\n}\\n.svg-inline--fa.fa-w-8 {\\n  width: 0.5em;\\n}\\n.svg-inline--fa.fa-w-9 {\\n  width: 0.5625em;\\n}\\n.svg-inline--fa.fa-w-10 {\\n  width: 0.625em;\\n}\\n.svg-inline--fa.fa-w-11 {\\n  width: 0.6875em;\\n}\\n.svg-inline--fa.fa-w-12 {\\n  width: 0.75em;\\n}\\n.svg-inline--fa.fa-w-13 {\\n  width: 0.8125em;\\n}\\n.svg-inline--fa.fa-w-14 {\\n  width: 0.875em;\\n}\\n.svg-inline--fa.fa-w-15 {\\n  width: 0.9375em;\\n}\\n.svg-inline--fa.fa-w-16 {\\n  width: 1em;\\n}\\n.svg-inline--fa.fa-w-17 {\\n  width: 1.0625em;\\n}\\n.svg-inline--fa.fa-w-18 {\\n  width: 1.125em;\\n}\\n.svg-inline--fa.fa-w-19 {\\n  width: 1.1875em;\\n}\\n.svg-inline--fa.fa-w-20 {\\n  width: 1.25em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n  margin-right: 0.3em;\\n  width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n  margin-left: 0.3em;\\n  width: auto;\\n}\\n.svg-inline--fa.fa-border {\\n  height: 1.5em;\\n}\\n.svg-inline--fa.fa-li {\\n  width: 2em;\\n}\\n.svg-inline--fa.fa-fw {\\n  width: 1.25em;\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n}\\n\\n.fa-layers {\\n  display: inline-block;\\n  height: 1em;\\n  position: relative;\\n  text-align: center;\\n  vertical-align: -0.125em;\\n  width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n  -webkit-transform-origin: center center;\\n          transform-origin: center center;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n  display: inline-block;\\n  position: absolute;\\n  text-align: center;\\n}\\n\\n.fa-layers-text {\\n  left: 50%;\\n  top: 50%;\\n  -webkit-transform: translate(-50%, -50%);\\n          transform: translate(-50%, -50%);\\n  -webkit-transform-origin: center center;\\n          transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n  background-color: #ff253a;\\n  border-radius: 1em;\\n  -webkit-box-sizing: border-box;\\n          box-sizing: border-box;\\n  color: #fff;\\n  height: 1.5em;\\n  line-height: 1;\\n  max-width: 5em;\\n  min-width: 1.5em;\\n  overflow: hidden;\\n  padding: 0.25em;\\n  right: 0;\\n  text-overflow: ellipsis;\\n  top: 0;\\n  -webkit-transform: scale(0.25);\\n          transform: scale(0.25);\\n  -webkit-transform-origin: top right;\\n          transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n  bottom: 0;\\n  right: 0;\\n  top: auto;\\n  -webkit-transform: scale(0.25);\\n          transform: scale(0.25);\\n  -webkit-transform-origin: bottom right;\\n          transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n  bottom: 0;\\n  left: 0;\\n  right: auto;\\n  top: auto;\\n  -webkit-transform: scale(0.25);\\n          transform: scale(0.25);\\n  -webkit-transform-origin: bottom left;\\n          transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n  right: 0;\\n  top: 0;\\n  -webkit-transform: scale(0.25);\\n          transform: scale(0.25);\\n  -webkit-transform-origin: top right;\\n          transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n  left: 0;\\n  right: auto;\\n  top: 0;\\n  -webkit-transform: scale(0.25);\\n          transform: scale(0.25);\\n  -webkit-transform-origin: top left;\\n          transform-origin: top left;\\n}\\n\\n.fa-lg {\\n  font-size: 1.3333333333em;\\n  line-height: 0.75em;\\n  vertical-align: -0.0667em;\\n}\\n\\n.fa-xs {\\n  font-size: 0.75em;\\n}\\n\\n.fa-sm {\\n  font-size: 0.875em;\\n}\\n\\n.fa-1x {\\n  font-size: 1em;\\n}\\n\\n.fa-2x {\\n  font-size: 2em;\\n}\\n\\n.fa-3x {\\n  font-size: 3em;\\n}\\n\\n.fa-4x {\\n  font-size: 4em;\\n}\\n\\n.fa-5x {\\n  font-size: 5em;\\n}\\n\\n.fa-6x {\\n  font-size: 6em;\\n}\\n\\n.fa-7x {\\n  font-size: 7em;\\n}\\n\\n.fa-8x {\\n  font-size: 8em;\\n}\\n\\n.fa-9x {\\n  font-size: 9em;\\n}\\n\\n.fa-10x {\\n  font-size: 10em;\\n}\\n\\n.fa-fw {\\n  text-align: center;\\n  width: 1.25em;\\n}\\n\\n.fa-ul {\\n  list-style-type: none;\\n  margin-left: 2.5em;\\n  padding-left: 0;\\n}\\n.fa-ul > li {\\n  position: relative;\\n}\\n\\n.fa-li {\\n  left: -2em;\\n  position: absolute;\\n  text-align: center;\\n  width: 2em;\\n  line-height: inherit;\\n}\\n\\n.fa-border {\\n  border: solid 0.08em #eee;\\n  border-radius: 0.1em;\\n  padding: 0.2em 0.25em 0.15em;\\n}\\n\\n.fa-pull-left {\\n  float: left;\\n}\\n\\n.fa-pull-right {\\n  float: right;\\n}\\n\\n.fa.fa-pull-left,\\n.fas.fa-pull-left,\\n.far.fa-pull-left,\\n.fal.fa-pull-left,\\n.fab.fa-pull-left {\\n  margin-right: 0.3em;\\n}\\n.fa.fa-pull-right,\\n.fas.fa-pull-right,\\n.far.fa-pull-right,\\n.fal.fa-pull-right,\\n.fab.fa-pull-right {\\n  margin-left: 0.3em;\\n}\\n\\n.fa-spin {\\n  -webkit-animation: fa-spin 2s infinite linear;\\n          animation: fa-spin 2s infinite linear;\\n}\\n\\n.fa-pulse {\\n  -webkit-animation: fa-spin 1s infinite steps(8);\\n          animation: fa-spin 1s infinite steps(8);\\n}\\n\\n@-webkit-keyframes fa-spin {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes fa-spin {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg);\\n  }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg);\\n  }\\n}\\n.fa-rotate-90 {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\";\\n  -webkit-transform: rotate(90deg);\\n          transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\";\\n  -webkit-transform: rotate(180deg);\\n          transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\";\\n  -webkit-transform: rotate(270deg);\\n          transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\";\\n  -webkit-transform: scale(-1, 1);\\n          transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n  -webkit-transform: scale(1, -1);\\n          transform: scale(1, -1);\\n}\\n\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\n  -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n  -webkit-transform: scale(-1, -1);\\n          transform: scale(-1, -1);\\n}\\n\\n:root .fa-rotate-90,\\n:root .fa-rotate-180,\\n:root .fa-rotate-270,\\n:root .fa-flip-horizontal,\\n:root .fa-flip-vertical,\\n:root .fa-flip-both {\\n  -webkit-filter: none;\\n          filter: none;\\n}\\n\\n.fa-stack {\\n  display: inline-block;\\n  height: 2em;\\n  position: relative;\\n  width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n  bottom: 0;\\n  left: 0;\\n  margin: auto;\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n  height: 1em;\\n  width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n  height: 2em;\\n  width: 2.5em;\\n}\\n\\n.fa-inverse {\\n  color: #fff;\\n}\\n\\n.sr-only {\\n  border: 0;\\n  clip: rect(0, 0, 0, 0);\\n  height: 1px;\\n  margin: -1px;\\n  overflow: hidden;\\n  padding: 0;\\n  position: absolute;\\n  width: 1px;\\n}\\n\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\n  clip: auto;\\n  height: auto;\\n  margin: 0;\\n  overflow: visible;\\n  position: static;\\n  width: auto;\\n}\";\n\nfunction css () {\n  var dfp = DEFAULT_FAMILY_PREFIX;\n  var drc = DEFAULT_REPLACEMENT_CLASS;\n  var fp = config.familyPrefix;\n  var rc = config.replacementClass;\n  var s = baseStyles;\n\n  if (fp !== dfp || rc !== drc) {\n    var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n    var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n    s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n  }\n\n  return s;\n}\n\nvar Library =\n/*#__PURE__*/\nfunction () {\n  function Library() {\n    _classCallCheck(this, Library);\n\n    this.definitions = {};\n  }\n\n  _createClass(Library, [{\n    key: \"add\",\n    value: function add() {\n      var _this = this;\n\n      for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n        definitions[_key] = arguments[_key];\n      }\n\n      var additions = definitions.reduce(this._pullDefinitions, {});\n      Object.keys(additions).forEach(function (key) {\n        _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n        defineIcons(key, additions[key]);\n        build();\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.definitions = {};\n    }\n  }, {\n    key: \"_pullDefinitions\",\n    value: function _pullDefinitions(additions, definition) {\n      var normalized = definition.prefix && definition.iconName && definition.icon ? {\n        0: definition\n      } : definition;\n      Object.keys(normalized).map(function (key) {\n        var _normalized$key = normalized[key],\n            prefix = _normalized$key.prefix,\n            iconName = _normalized$key.iconName,\n            icon = _normalized$key.icon;\n        if (!additions[prefix]) additions[prefix] = {};\n        additions[prefix][iconName] = icon;\n      });\n      return additions;\n    }\n  }]);\n\n  return Library;\n}();\n\nfunction prepIcon(icon) {\n  var width = icon[0];\n  var height = icon[1];\n  var vectorData = icon.slice(4);\n  return {\n    found: true,\n    width: width,\n    height: height,\n    icon: {\n      tag: 'path',\n      attributes: {\n        fill: 'currentColor',\n        d: vectorData[0]\n      }\n    }\n  };\n}\n\nfunction ensureCss() {\n  if (config.autoAddCss && !_cssInserted) {\n    insertCss(css());\n\n    _cssInserted = true;\n  }\n}\n\nfunction apiObject(val, abstractCreator) {\n  Object.defineProperty(val, 'abstract', {\n    get: abstractCreator\n  });\n  Object.defineProperty(val, 'html', {\n    get: function get() {\n      return val.abstract.map(function (a) {\n        return toHtml(a);\n      });\n    }\n  });\n  Object.defineProperty(val, 'node', {\n    get: function get() {\n      if (!IS_DOM) return;\n      var container = DOCUMENT.createElement('div');\n      container.innerHTML = val.html;\n      return container.children;\n    }\n  });\n  return val;\n}\n\nfunction findIconDefinition(iconLookup) {\n  var _iconLookup$prefix = iconLookup.prefix,\n      prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n      iconName = iconLookup.iconName;\n  if (!iconName) return;\n  return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\n\nfunction resolveIcons(next) {\n  return function (maybeIconDefinition) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n    var mask = params.mask;\n\n    if (mask) {\n      mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n    }\n\n    return next(iconDefinition, _objectSpread({}, params, {\n      mask: mask\n    }));\n  };\n}\n\nvar library = new Library();\nvar noAuto = function noAuto() {\n  config.autoReplaceSvg = false;\n  config.observeMutations = false;\n  disconnect();\n};\nvar _cssInserted = false;\nvar dom = {\n  i2svg: function i2svg() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    if (IS_DOM) {\n      ensureCss();\n      var _params$node = params.node,\n          node = _params$node === void 0 ? DOCUMENT : _params$node,\n          _params$callback = params.callback,\n          callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n      if (config.searchPseudoElements) {\n        searchPseudoElements(node);\n      }\n\n      return onTree(node, callback);\n    } else {\n      return picked.reject('Operation requires a DOM of some kind.');\n    }\n  },\n  css: css,\n  insertCss: function insertCss$$1() {\n    if (!_cssInserted) {\n      insertCss(css());\n\n      _cssInserted = true;\n    }\n  },\n  watch: function watch() {\n    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n        observeMutationsRoot = params.observeMutationsRoot;\n\n    if (config.autoReplaceSvg === false) {\n      config.autoReplaceSvg = true;\n    }\n\n    config.observeMutations = true;\n    domready(function () {\n      autoReplace({\n        autoReplaceSvgRoot: autoReplaceSvgRoot\n      });\n      observe({\n        treeCallback: onTree,\n        nodeCallback: onNode,\n        pseudoElementsCallback: searchPseudoElements,\n        observeMutationsRoot: observeMutationsRoot\n      });\n    });\n  }\n};\nvar parse = {\n  transform: function transform(transformString) {\n    return parseTransformString(transformString);\n  }\n};\nvar icon = resolveIcons(function (iconDefinition) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$transform = params.transform,\n      transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n      _params$symbol = params.symbol,\n      symbol = _params$symbol === void 0 ? false : _params$symbol,\n      _params$mask = params.mask,\n      mask = _params$mask === void 0 ? null : _params$mask,\n      _params$title = params.title,\n      title = _params$title === void 0 ? null : _params$title,\n      _params$classes = params.classes,\n      classes = _params$classes === void 0 ? [] : _params$classes,\n      _params$attributes = params.attributes,\n      attributes = _params$attributes === void 0 ? {} : _params$attributes,\n      _params$styles = params.styles,\n      styles = _params$styles === void 0 ? {} : _params$styles;\n  if (!iconDefinition) return;\n  var prefix = iconDefinition.prefix,\n      iconName = iconDefinition.iconName,\n      icon = iconDefinition.icon;\n  return apiObject(_objectSpread({\n    type: 'icon'\n  }, iconDefinition), function () {\n    ensureCss();\n\n    if (config.autoA11y) {\n      if (title) {\n        attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n      } else {\n        attributes['aria-hidden'] = 'true';\n        attributes['focusable'] = 'false';\n      }\n    }\n\n    return makeInlineSvgAbstract({\n      icons: {\n        main: prepIcon(icon),\n        mask: mask ? prepIcon(mask.icon) : {\n          found: false,\n          width: null,\n          height: null,\n          icon: {}\n        }\n      },\n      prefix: prefix,\n      iconName: iconName,\n      transform: _objectSpread({}, meaninglessTransform, transform),\n      symbol: symbol,\n      title: title,\n      extra: {\n        attributes: attributes,\n        styles: styles,\n        classes: classes\n      }\n    });\n  });\n});\nvar text = function text(content) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$transform2 = params.transform,\n      transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n      _params$title2 = params.title,\n      title = _params$title2 === void 0 ? null : _params$title2,\n      _params$classes2 = params.classes,\n      classes = _params$classes2 === void 0 ? [] : _params$classes2,\n      _params$attributes2 = params.attributes,\n      attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n      _params$styles2 = params.styles,\n      styles = _params$styles2 === void 0 ? {} : _params$styles2;\n  return apiObject({\n    type: 'text',\n    content: content\n  }, function () {\n    ensureCss();\n    return makeLayersTextAbstract({\n      content: content,\n      transform: _objectSpread({}, meaninglessTransform, transform),\n      title: title,\n      extra: {\n        attributes: attributes,\n        styles: styles,\n        classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n      }\n    });\n  });\n};\nvar counter = function counter(content) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _params$title3 = params.title,\n      title = _params$title3 === void 0 ? null : _params$title3,\n      _params$classes3 = params.classes,\n      classes = _params$classes3 === void 0 ? [] : _params$classes3,\n      _params$attributes3 = params.attributes,\n      attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n      _params$styles3 = params.styles,\n      styles = _params$styles3 === void 0 ? {} : _params$styles3;\n  return apiObject({\n    type: 'counter',\n    content: content\n  }, function () {\n    ensureCss();\n    return makeLayersCounterAbstract({\n      content: content.toString(),\n      title: title,\n      extra: {\n        attributes: attributes,\n        styles: styles,\n        classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n      }\n    });\n  });\n};\nvar layer = function layer(assembler) {\n  return apiObject({\n    type: 'layer'\n  }, function () {\n    ensureCss();\n    var children = [];\n    assembler(function (args) {\n      Array.isArray(args) ? args.map(function (a) {\n        children = children.concat(a.abstract);\n      }) : children = children.concat(args.abstract);\n    });\n    return [{\n      tag: 'span',\n      attributes: {\n        class: \"\".concat(config.familyPrefix, \"-layers\")\n      },\n      children: children\n    }];\n  });\n};\nvar api = {\n  noAuto: noAuto,\n  config: config,\n  dom: dom,\n  library: library,\n  parse: parse,\n  findIconDefinition: findIconDefinition,\n  icon: icon,\n  text: text,\n  counter: counter,\n  layer: layer,\n  toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n      autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n  if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n    node: autoReplaceSvgRoot\n  });\n};\n\nexport { icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition };\n","import { Map } from 'immutable';\n\n// The mutable filter object built in ProductAndPackageList.constructFilters: an object whose `and`\n// array holds one `{ <field>: { eq | neq: ... } }` entry per active filter. `and` is typed loosely\n// (`any`) because the `Filter` model allows both a plain array and an Immutable List there.\ninterface IConstructedFilters {\n  and?: any;\n}\n\n// Pulls a boolean eq/neq filter (e.g. sharedProduct, productSharedWithMe) out of the `and` array,\n// returning it as a plain boolean (true when the `eq` side is set, false for `neq`) or undefined\n// when the field isn't present. Mutates `constructedFilters.and` to drop the extracted entry. Kept\n// pure (no React/redux) so the mapping can be unit tested directly.\nexport const extractBooleanFilter = (\n  constructedFilters: IConstructedFilters,\n  fieldName: string,\n): boolean | undefined => {\n  let extracted;\n  const newAnd = constructedFilters?.and?.filter((_filter: any) => {\n    if (_filter?.[fieldName]) {\n      extracted = _filter[fieldName];\n    }\n    return !_filter?.[fieldName];\n  });\n  if (extracted) {\n    constructedFilters.and = newAnd;\n    return !!extracted.eq;\n  }\n  return undefined;\n};\n\n// Appends the \"exclude archived\" status clause to the filter set, creating the `and` array when it\n// doesn't yet exist.\nexport const pushActiveStatusFilter = (constructedFilters: IConstructedFilters) => {\n  const statusFilter = { 'status': { 'neq': 'archived' } };\n  if (constructedFilters.and) {\n    constructedFilters.and.push(statusFilter);\n  } else {\n    constructedFilters.and = [statusFilter];\n  }\n};\n\n// Collapses a mutually-exclusive eq/neq checkbox pair on the (mutable) form-values Map: drops the\n// field when both (or neither) boxes are checked, otherwise keeps only the checked side.\nexport const normalizeExclusiveCheckbox = (ctx: Map<string, any>, key: string) => {\n  if (ctx.getIn([key, 'eq', 0]) === ctx.getIn([key, 'neq', 0])) {\n    ctx.delete(key);\n  } else if (!ctx.getIn([key, 'eq', 0])) {\n    ctx.deleteIn([key, 'eq']);\n  } else if (!ctx.getIn([key, 'neq', 0])) {\n    ctx.deleteIn([key, 'neq']);\n  }\n};\n","import { List, Map, OrderedMap, fromJS } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces/index';\nimport { Drawing, Product, QuoteSectionProduct } from '../../models';\nimport * as uuid from 'uuid/v1';\nimport { parseFormulaFields } from '../parseFormulaFields';\nimport i18next from 'i18next';\nimport moment from 'moment';\nimport { ISpecToQuoteLinkDataInForm } from '../../components/SpecToQuote/interfaces';\nimport { SECTION_TITLE_VALUES_TO_CLEAR_ON_MANUFACTURER_SORT, SPEC_TO_QUOTE_PRODUCT_SOURCE, VENDOR_PLACEHOLDER_FIRM_PRODUCT } from '../../constants';\nimport { getDefaultInitialValues } from '../../containers/Quote/Quote';\n\nfunction getBrand(product) {\n  let brand;\n  if (isPackage(product)) {\n    brand = product.get('packageManufacturerName');\n  } else {\n    brand = product.get('brand');\n  }\n  return brand;\n}\n\nfunction isPackage(product) {\n  return Boolean(product.get('packageId')) && Boolean(product.get('uniquePackageId'));\n}\n\nfunction groupProductsByBrand(products) {\n  const defaultBrand = i18next.t('translations:sectionList.unbrandedSectionTitle');\n  return products?.reduce((acc, product) => {\n    const brand = getBrand(product) || defaultBrand;\n    if (acc.get(brand)) {\n      const updatedList = acc.get(brand).push(product);\n      return acc.set(brand, updatedList);\n    } else {\n      return acc.set(brand, List().push(product));\n    }\n  }, OrderedMap<string, List<any>>());\n}\n\nfunction sortProductsByBrand(products) {\n  return products?.sort((a, b) => {\n    const brandFallBack = 'zzzzzz'; // This is hacky\n    // TODO: This code potentially cause bugs\n    // What we want is place products which has no brand to the end of the List\n\n    const brandA = getBrand(a) || brandFallBack;\n    const brandB = getBrand(b) || brandFallBack;\n\n    if (brandA < brandB) {\n      return -1;\n    }\n    if (brandA > brandB) {\n      return 1;\n    }\n  });\n}\n\nfunction getSectionsInManufacturerOrder(products, capitalizedSectionTitle) {\n  // reorders the sections by manufacturer (brand)\n  // changes the 'sectionTitle' of the partial drawing to the manufacturer name\n  // take the mapped value and reorder to the new manufacturer logic\n  // reorder according to formValue products\n  // group all the other ones in a separate section if there is no formValue product (quoteProduct)\n  const sortedProducts = sortProductsByBrand(products);\n  const groupedProducts = groupProductsByBrand(sortedProducts);\n\n  if (capitalizedSectionTitle) {\n    return groupedProducts?.reduce((acc, productGroup, key) => {\n      // partial drawing is used there because when its sorted by \"manufacturer\",\n      // we'll structure it by manufacturer but needs to mimic a drawing\n      const section = Map<string, any>()\n        .set('sectionTitle', key?.toUpperCase())\n        .set('products', productGroup);\n      return acc.push(section);\n    }, List());\n  } else {\n    return groupedProducts?.reduce((acc, productGroup, key) => {\n      // partial drawing is used there because when its sorted by \"manufacturer\",\n      // we'll structure it by manufacturer but needs to mimic a drawing\n      const section = Map<string, any>()\n        .set('sectionTitle', key)\n        .set('products', productGroup);\n      return acc.push(section);\n    }, List());\n  }\n}\n\nconst extractProductsFromSections = (sections) => {\n  // sections is a List\n  // sections: { sectionTitle, products }[]\n  // --> sections: products[]\n  return sections.reduce((acc, section) => {\n    const sectionTitle = section.get('sectionTitle') ?? '';\n    const normalizedSectionTitle = sectionTitle.trim().toLowerCase();\n    const sectionTitleShouldBeCleared = SECTION_TITLE_VALUES_TO_CLEAR_ON_MANUFACTURER_SORT.includes(normalizedSectionTitle);\n\n    const products = section.get('products')?.map((product) => {\n      const productLabel = product.get('labelColumn')?.trim();\n      if (product.get('id') > 0 && !productLabel) {\n        return product.set('labelColumn', sectionTitleShouldBeCleared ? '' : sectionTitle);\n      }\n      return product;\n    });\n\n    if (!products) {\n      return acc;\n    }\n    return acc.push(...products);\n  }, List());\n};\n\nconst mergeSortedSection = ({\n  sections,\n  sortedSections,\n  defaultTemplate = Map()\n}) => {\n\n  const sectionWithAllProducts = sortedSections && sortedSections.reduce((sectionAcc, section, drawingIndex) => {\n    const newSection = section.set('products', section.get('products'));\n    return sectionAcc.push(newSection);\n  }, List());\n\n  const formattedValues = sectionWithAllProducts\n    // needs to assemble the 'sections' for quote\n    // extra key values are added\n    // things like 'templateCells', print related stuff like 'default print'\n    // quote calculations that's related to templates\n    // and also quote specific stuff that need to exist on product/section like UUIds\n    .reduce((acc, productsArrays: any, index) => {\n      const immutableProductsArray = productsArrays.get('products').map((product) => {\n        if (product.get('id') === -1) {\n          return product;\n        }\n        const immutableProduct = fromJS(product);\n        const label = immutableProduct && immutableProduct.get('productNumber');\n        const productWithRequiredQuoteKeysValues = immutableProduct && immutableProduct\n          .set('label', label)\n          .set('defaultPrint', true);\n        return productWithRequiredQuoteKeysValues;\n      });\n\n      const targetedSection = (sections || List()).find(section => section.getIn(['sectionTemplate', 'id']) === defaultTemplate.get('id') && Boolean(section.getIn(['sectionTemplate', 'settings', 'pinnedColumn'])));\n      const pinnedColumn = targetedSection && targetedSection.getIn(['sectionTemplate', 'settings', 'pinnedColumn']);\n\n      return acc.push(productsArrays\n        .set('products', immutableProductsArray)\n        .set('sectionTemplate', pinnedColumn ? defaultTemplate.get('settings') ? defaultTemplate.setIn(['settings', 'pinnedColumn'], pinnedColumn) : defaultTemplate.set('settings', Map({ pinnedColumn })) : defaultTemplate));\n    }, List())\n    // add additional quote related key values for sections\n    .map(section => {\n      const sectionUUID = uuid();\n      const sectionTitle = section.get('sectionTitle');\n      const products = section.get('products').reduce((acc, product) => {\n        const quoteProduct = product.set('quoteProductId', product.get('quoteProductId') || uuid());\n        return acc.push(quoteProduct);\n      }, List([]));\n      return section\n        .set('note', '')\n        .set('sectionTitle', sectionTitle)\n        .set('products', products)\n        // more required keys for quote. 'excludedRowCount' is not required but generated when a quote is created during normal quote creation flow\n        .set('excludedRowCount', 0)\n        // add id on the section level\n        .set('sectionId', sectionUUID);\n    });\n\n  return formattedValues;\n\n  // We need to run calculcations for each product in each section.\n  // We do this to populate the values of template cells which rely on other cells\n  // const updatedSections = formattedValues.map((section, sectionIndex) => {\n  //   const products = section.get('products');\n\n  //   // Calculate section subtotals\n  //   const _updateSubTotal = (calc) => {\n  //     const columnIndex = section.getIn(['sectionTemplate', 'fieldsData']).findIndex((cell: any) => {\n  //       return cell.get('id') === calc.get('selectedColumn');\n  //     });\n\n  //     const subTotalValue = products.reduce((subTotal: any, product: any) => {\n  //       if (product.get('id') === -1) {\n  //         return subTotal;\n  //       }\n  //       if (!product.get('excluded') && !product.get('notVisibleToSelectedCustomer')) {\n  //         subTotal.countOfNotEmptyRows += product.getIn(['templateCells', columnIndex, 'fieldValue']) ? 1 : 0;\n  //         subTotal.value += Number(product.getIn(['templateCells', columnIndex, 'fieldValue']));\n  //       }\n  //       return subTotal;\n  //     }, { value: 0, countOfNotEmptyRows: 0 });\n  //     const calculationValue = calc.get('calculationType') === 'sum'\n  //       ? subTotalValue.value\n  //       : subTotalValue.countOfNotEmptyRows\n  //         ? subTotalValue.value / subTotalValue.countOfNotEmptyRows\n  //         : 0;\n\n  //     const updatedCalc = fromJS({\n  //       value: calculationValue,\n  //       name: calc.get('name'),\n  //       fieldType: calc.get('fieldType'),\n  //       calculationType: calc.get('calculationType'),\n  //       rowsIncludedInCalculation: subTotalValue.countOfNotEmptyRows\n  //     });\n\n  //     return updatedCalc;\n  //   };\n\n  //   const sectionCalculations = section.getIn(['sectionTemplate', 'sectionCalculations'], []).reduce((acc, sectionCalc) => acc.set(sectionCalc.get('name'), _updateSubTotal(sectionCalc)), Map());\n  //   return section.set('sectionCalculations', sectionCalculations);\n  // });\n\n  // return updatedSections;\n};\n\nexport const _sortProductsByManufacturer = ({sections, defaultTemplate, capitalizedSectionTitle = false}) => {\n  const products: List<IMap<QuoteSectionProduct>> = extractProductsFromSections(sections);\n  const sortedSections = getSectionsInManufacturerOrder(products, capitalizedSectionTitle);\n  return mergeSortedSection({ sections, sortedSections, defaultTemplate });\n};\n\nexport const setupTemplateCells = (fieldsData, currency, quoteRegionId, product) => {\n  return fieldsData.reduce((acc, cell) => {\n    const currencyType = (currency ? currency : cell.get('pimType')) || 'CAD';\n    // if fieldName is qty, set the fieldValue to the quantity provided if given\n    if (cell.get('fieldName') === 'qty') {\n      const quantity = product.get('productQuantityInPackage');\n      if (quantity === '' || quantity === null || quantity === undefined) {\n        return acc;\n      }\n      return fromJS(parseFormulaFields({ productFields: acc.toJS(), fieldData: cell.set('fieldValue', (quantity && String(quantity)) || cell.get('fieldValue')).toJS() }));\n      // return fromJS(parseFormulaFields({ productFields: fieldsData.toJS(), fieldData: cell.set('fieldValue', (product.get('productQuantityInPackage') && String(product.get('productQuantityInPackage'))) || cell.get('fieldValue')) }));\n    }\n    if (cell.get('valueType') === 'storedData') {\n      const regionForWhichPriceIsAvailable = product.getIn(['price', quoteRegionId, currencyType]) ? quoteRegionId : 'default';\n      const isPoa = product.getIn(['price', regionForWhichPriceIsAvailable, currencyType, 'isPoa']) || false;\n      let discountValue = product.getIn(['price', regionForWhichPriceIsAvailable, currencyType, cell.get('pimData')]);\n      const isPoaListPrice = isPoa && cell.get('pimData') === 'list';\n      discountValue = isPoaListPrice ? '0' : discountValue === 0 ? '0' : discountValue ? discountValue : '';\n\n      if (discountValue === '' || discountValue === null || discountValue === undefined) {\n        return acc;\n      }\n\n      const newCell = isPoaListPrice ? cell.set('displayPoaTag', true) : cell;\n      return fromJS(parseFormulaFields({ productFields: acc.toJS(), fieldData: newCell.set('fieldValue', String(discountValue)).toJS() }));\n    }\n    if (cell.get('fieldValue') === null || cell.get('fieldValue') === undefined || cell.get('fieldValue') === '') {\n      return acc;\n    }\n    return fromJS(parseFormulaFields({ productFields: acc.toJS(), fieldData: cell.toJS() }));\n  }, fieldsData);\n};\n\nconst updateSubTotal = (calc, sectionTemplate, products, grandTotals) => {\n  const columnIndex = sectionTemplate.get('fieldsData').findIndex((cell: any) => {\n    return cell.get('id') === calc.get('selectedColumn');\n  });\n\n  const subTotalValue = products.reduce((subTotal: any, product: any) => {\n    if (product.get('id') === -1) {\n      return subTotal;\n    }\n    if (!product.get('excluded') && !product.get('notVisibleToSelectedCustomer')) {\n      subTotal.countOfNotEmptyRows += product.getIn(['templateCells', columnIndex, 'fieldValue']) ? 1 : 0;\n      subTotal.value += Number(product.getIn(['templateCells', columnIndex, 'fieldValue']));\n    }\n    return subTotal;\n  }, { value: 0, countOfNotEmptyRows: 0 });\n  const calculationValue = calc.get('calculationType') === 'sum'\n    ? subTotalValue.value\n    : subTotalValue.countOfNotEmptyRows\n      ? subTotalValue.value / subTotalValue.countOfNotEmptyRows\n      : 0;\n\n  const updatedCalc = fromJS({\n    value: calculationValue,\n    name: calc.get('name'),\n    fieldType: calc.get('fieldType'),\n    calculationType: calc.get('calculationType'),\n    rowsIncludedInCalculation: subTotalValue.countOfNotEmptyRows\n  });\n\n  const currentGrandTotalValue = grandTotals.getIn([updatedCalc.get('name'), 'value'], 0);\n  const currentRowsIncludedInCalculation = grandTotals.getIn([updatedCalc.get('name'), 'rowsIncludedInCalculation'], 0);\n\n  const sumOfValue = currentGrandTotalValue + (updatedCalc.get('value') * (updatedCalc.get('calculationType') === 'average' ? updatedCalc.get('rowsIncludedInCalculation') : 1));\n  const sumOfRowsIncludedInCalculation = currentRowsIncludedInCalculation + updatedCalc.get('rowsIncludedInCalculation');\n\n  const updatedGrandTotals = grandTotals.set(\n    updatedCalc.get('name'),\n    fromJS({\n      name: updatedCalc.get('name'),\n      fieldType: updatedCalc.get('fieldType'),\n      calculationType: updatedCalc.get('calculationType'),\n      value: sumOfValue,\n      rowsIncludedInCalculation: sumOfRowsIncludedInCalculation,\n    })\n  );\n\n  return { updatedCalc, updatedGrandTotals };\n};\n\nexport const getInitialQuoteFromSpec = ({\n  spec,\n  specToQuoteLinkedList, // recommendations\n  quoteFormValues, // quote initial values\n  loggedInUserData,\n  regions,\n  defaultQuoteQuickText,\n  defaultManufacturerDiscountsManufacturerIds,\n  defaultDiscountList,\n  defaultTerms,\n  defaultComments,\n  nonStockProductNote, // default note for non-stock products\n  defaultTemplate, // default template for quote\n  hasFeatStockLevelAclRole,\n  isRequestProductInitialSelectAllPreference = false, // initial select all preference for request product\n}) => {\n  const quoteRegionId: string = quoteFormValues?.getIn(['region', 'id']) || 'default';\n  const drawings = spec?.get('drawings');\n  const fieldsData = defaultTemplate?.get('fieldsData') || Map();\n  const currency = defaultTemplate?.getIn(['settings', 'currency']);\n\n  const vendorPlaceholderProductTemplateCells = setupTemplateCells(fieldsData, currency, quoteRegionId, VENDOR_PLACEHOLDER_FIRM_PRODUCT);\n  // let grandTotals = Map(); // grand totals for the quote\n\n  // construct quote sections from spec drawings\n  const quoteSections = drawings?.reduce((sections, drawing: IMap<Drawing>) => {\n    const specProducts = drawing.get('products');\n    const quoteProducts = specProducts?.reduce((products, specProduct: IMap<Product>) => {\n      const id = String(specProduct.get('specProductId'));\n      const isSpecProductExistInSpecToQuoteLinkedList = specToQuoteLinkedList?.has(id);\n\n      const emptyQuoteProductWithSpecProduct = isRequestProductInitialSelectAllPreference\n        ? VENDOR_PLACEHOLDER_FIRM_PRODUCT.withMutations((ctx => {\n            ctx\n              .set('quoteProductId', uuid())\n              .set('note', '')\n              .set('label', ctx.get('productNumber'))\n              .set('defaultPrint', true)\n              .set('specProductId', specProduct.get('specProductId'))\n              .set('specDrawingProductId', specProduct.get('specProductId'))\n              .set('templateCells', vendorPlaceholderProductTemplateCells)\n              .set('specToQuoteValues', fromJS({\n                labelColumn: drawing.get('name') || '',\n                specProductId: specProduct.get('specProductId'),\n                specProduct,\n                specProductNote: specProduct.get('note') || '',\n                linked: false,\n                type: null,\n                source: null,\n                selectedRecommendedIndex: -1,\n                feedback: null\n              }));\n          }))\n        : fromJS({\n            id: -1,\n            specToQuoteValues: {\n              labelColumn: drawing.get('name') || '',\n              specProductId: specProduct.get('specProductId'),\n              specProduct,\n              specProductNote: specProduct.get('note') || '',\n              linked: false,\n              type: null,\n              source: null,\n              selectedRecommendedIndex: -1,\n              feedback: null\n            }\n          });\n\n      // construct quoteProduct\n      // search for the specProduct if exist in the specToQuoteLinkedList\n      if (isSpecProductExistInSpecToQuoteLinkedList) {\n        const linkedSpecToQuoteValues = specToQuoteLinkedList.get(id);\n        const recommendations = linkedSpecToQuoteValues.get('recommendations');\n        // take the first recommendation as default\n        const defaultRecommended = recommendations?.get(0);\n\n        // if no default recommendation, add a product map with id -1 with specToQuoteValues\n        if (!defaultRecommended) {\n          return products.push(emptyQuoteProductWithSpecProduct);\n        }\n\n        const recommendedProduct = defaultRecommended?.get('quoteProduct');\n        // if it doesn't exist than we can assume there is no link\n        const isLinked = linkedSpecToQuoteValues.getIn(['recommendations', 0, 'source']) === SPEC_TO_QUOTE_PRODUCT_SOURCE.specToQuote;\n        const nonStockTerm: string = nonStockProductNote?.get('blob');\n\n        if (recommendedProduct?.get('flag') === 'package') {\n          const packageProducts = recommendedProduct.get('products');\n          const uniquePackageId = uuid();\n          const productQuantities = recommendedProduct.get('productQuantities') ?? List();\n\n          if (!packageProducts?.count()) {\n            return products.push(emptyQuoteProductWithSpecProduct);\n          }\n\n          // extract each product from the package\n          packageProducts?.forEach((product, productIndex) => {\n            const firmProduct = product?.get('firmProduct') || null;\n            const productNote = firmProduct.get('note') || null;\n            const noteWithNonStockTerm = hasFeatStockLevelAclRole\n              ? productNote && nonStockTerm\n                ? productNote + '\\n' + nonStockTerm\n                : !nonStockTerm\n                  ? productNote\n                  : nonStockTerm\n              : productNote;\n            const stockable = firmProduct.getIn(['stockLevels', quoteRegionId, 'stockable']) ?? firmProduct.getIn(['stockLevels', 'default', 'stockable']);\n            const stockRegionExist = typeof stockable === 'boolean';\n            const packageId = product.get('id');\n            const productsCount = product.get('products')?.count() || 0;\n\n            const specToQuoteValues: IMap<ISpecToQuoteLinkDataInForm> = linkedSpecToQuoteValues.withMutations((ctx) => (\n              // add 'linked' to keep track of the link status for link buttons\n              ctx\n                .set('linked', isLinked)\n                .set('labelColumn', drawing.get('name') || '')\n                .set('type', defaultRecommended.get('type') || null)\n                .set('source', defaultRecommended.get('source') || null)\n                .set('selectedRecommendedIndex', linkedSpecToQuoteValues.get('recommendations') ? 0 : -1)\n                .set('feedback', null)\n                .set('specProduct', ctx.get('specProduct'))\n                .set('specProductNote', ctx.get('note') || '')\n                .delete('recommendations')\n            ));\n\n            const note = (productIndex === productsCount - 1\n                            ? stockRegionExist && !stockable\n                              ? noteWithNonStockTerm\n                              : productNote\n                            : stockRegionExist && !stockable\n                              ? nonStockTerm\n                              : null) ?? null;\n\n            const quoteProduct = firmProduct && firmProduct.withMutations((ctx) => {\n              // add packageId & uniquePackageId & productIndex for identify each package from recommandation\n              ctx\n                .set('quoteProductId', uuid())\n                .set('note', note)\n                .set('specProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                .set('specDrawingProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n                .set('packageId', recommendedProduct.get('id'))\n                .set('uniquePackageId', uniquePackageId)\n                .set('productIndex', productIndex)\n                .set('packageNumber', recommendedProduct.get('number'))\n                .set('packageManufacturerName', recommendedProduct.get('manufacturerName'))\n                .set('label', ctx.get('productNumber'))\n                .set('isRecommended', true)\n                .set('productQuantityInPackage', productQuantities.get(productIndex) || 1)\n                // set specToQuoteValues for specProduct related info\n                .set('specToQuoteValues', specToQuoteValues)\n                .set('templateCells', setupTemplateCells(fieldsData, currency, quoteRegionId, firmProduct.set('productQuantityInPackage', productQuantities.get(productIndex) || 1)));\n\n              if (isRequestProductInitialSelectAllPreference && productIndex === 0) {\n                ctx.set('isRequestingProduct', true);\n              }\n          });\n            products = products.push(quoteProduct);\n          });\n          return products;\n        } else if (Boolean(recommendedProduct)) {\n          const productNote = recommendedProduct?.get('note') || null;\n          const noteWithNonStockTerm = hasFeatStockLevelAclRole\n            ? productNote && nonStockTerm\n              ? productNote + '\\n' + nonStockTerm\n              : !nonStockTerm\n                ? productNote\n                : nonStockTerm\n            : productNote;\n          const stockable = recommendedProduct.getIn(['stockLevels', quoteRegionId, 'stockable']) ?? recommendedProduct.getIn(['stockLevels', 'default', 'stockable']);\n          const stockRegionExist = typeof stockable === 'boolean';\n\n          const specToQuoteValues: IMap<ISpecToQuoteLinkDataInForm> = linkedSpecToQuoteValues && linkedSpecToQuoteValues\n            // add 'linked' to keep track of the link status for link buttons\n            .set('linked', isLinked)\n            .set('labelColumn', drawing.get('name') || '')\n            .set('type', defaultRecommended.get('type') || null)\n            .set('source', defaultRecommended.get('source') || null)\n            .set('selectedRecommendedIndex', linkedSpecToQuoteValues.get('recommendations') ? 0 : -1)\n            .set('feedback', null)\n            .set('specProduct', linkedSpecToQuoteValues.get('specProduct'))\n            .set('specProductNote', linkedSpecToQuoteValues.getIn(['specProduct', 'note']) || '')\n            .delete('recommendations');\n\n          const quoteProduct = recommendedProduct.withMutations(ctx => {\n            ctx\n              .set('quoteProductId', uuid())\n              .set('note', stockRegionExist && !stockable ? noteWithNonStockTerm : productNote)\n              .set('label', ctx.get('productNumber'))\n              .set('defaultPrint', true)\n              .set('isRecommended', true)\n              .set('specProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n              .set('specDrawingProductId', linkedSpecToQuoteValues.getIn(['specProduct', 'specProductId']))\n              .set('specToQuoteValues', specToQuoteValues)\n              .set('templateCells', setupTemplateCells(fieldsData, currency, quoteRegionId, recommendedProduct));\n\n            if (isRequestProductInitialSelectAllPreference) {\n              ctx.set('isRequestingProduct', true);\n            }\n          });\n          return products.push(quoteProduct);\n        } else {\n          // empty firmProduct with specProduct\n          return products.push(emptyQuoteProductWithSpecProduct);\n        }\n      } else if (!Boolean(specToQuoteLinkedList) || specToQuoteLinkedList.isEmpty()) {\n        return products.push(emptyQuoteProductWithSpecProduct);\n      }\n      return products;\n    }, List());\n\n    // don't return section if no products\n    if (!Boolean(quoteProducts.size)) {\n      return sections;\n    }\n\n    const sectionTemplate = defaultTemplate.get('settings') ? defaultTemplate : defaultTemplate.set('settings', Map({ pinnedColumn: null }));\n    // calculate section subtotals and grand totals\n    // const sectionCalculations = sectionTemplate.get('sectionCalculations', []).reduce((acc, sectionCalc) => {\n    //   const { updatedCalc, updatedGrandTotals } = updateSubTotal(sectionCalc, sectionTemplate, quoteProducts, grandTotals);\n    //   grandTotals = updatedGrandTotals;\n    //   return acc.set(updatedCalc.get('name'), updatedCalc);\n    // }, Map());\n\n    // construct the section\n    const defaultSectionTitle = i18next.t('translations:specDetail.unnamedDrawing');\n    return sections.push(fromJS({\n      sectionId: uuid(),\n      sectionTitle: drawing.get('name') || defaultSectionTitle,\n      drawingId: drawing.get('id'),\n      aiNote: drawing.get('note') || '', // note from drawing\n      sectionTemplate,\n      products: quoteProducts,\n      excludedRowCount: 0,\n      // sectionCalculations,\n      sectionCalculations: {},\n    }));\n  }, List());\n\n  const specId = spec?.get('id');\n  const projectOrSpecName = spec && spec.get('projectTitle')\n    ? spec?.get('projectTitle')\n    : spec?.get('name');\n  const linkedProjectId = spec?.get('projectId');\n  const linkedProjectTitle = spec?.get('projectTitle');\n  const specBidDate = spec?.get('bidDate');\n  const specExpiryDate = moment(specBidDate).add(30, 'days').format('YYYY-MM-DD HH:mm:ss');\n  const isAi = spec?.get('isAi') || false;\n  const isAiValidated = spec?.get('isAiValidated') || false;\n\n  // calculate avg if needed befroe setting the grandTotals\n  // const grandTotalsWithAvg = grandTotals.map((gt: any) => {\n  //   if (gt.get('calculationType') === 'average') {\n  //     // 0 divided by 0 is NaN\n  //     const newAvgValue = isNaN(gt.get('value') / gt.get('rowsIncludedInCalculation')) ? 0 : gt.get('value') / gt.get('rowsIncludedInCalculation');\n  //     return gt\n  //       .set('discountedValue', newAvgValue)\n  //       .set('value', newAvgValue);\n  //   } else {\n  //     return gt.set('discountedValue', gt.get('value') || 0);\n  //   }\n  // });\n\n  const initialValues = fromJS({\n    ...quoteFormValues.toJS(), // keep other fields that already initialize\n    // and make sure the init value is populated\n    ...getDefaultInitialValues({\n      loggedInUserData,\n      defaultQuoteQuickText,\n      regions,\n      hasCurrencyConversionACLRole: hasFeatStockLevelAclRole,\n      defaultManufacturerDiscountsManufacturerIds,\n      defaultTerms,\n      defaultComments,\n      defaultDiscountList,\n    }).toJS(),\n    specId,\n    name: projectOrSpecName ? projectOrSpecName : 'Untitled',\n    sections: quoteSections,\n    projectId: linkedProjectId,\n    projectTitle: linkedProjectTitle,\n    bidDate: specBidDate,\n    expiryDate: specExpiryDate,\n    // grandTotals: grandTotalsWithAvg,\n    grandTotals: {},\n    createdFromSpecId: specId,\n    isAi,\n    isAiValidated\n  });\n\n  // fromJS() converts the customers array to an Immutable List, but react-select requires a plain JS\n  // array to correctly detect multi-select values (it uses Array.isArray() internally). Without this,\n  // react-select wraps the entire Immutable List as a single element when building the new selection,\n  // resulting in [[existingCustomers], newCustomer] instead of [customer1, customer2, newCustomer].\n  // This mirrors how Quote.tsx initializes customers in the normal edit flow (line 1788).\n  const customers = initialValues.get('customers');\n  return customers != null ? initialValues.set('customers', [...customers]) : initialValues;\n\n  // If the spec has a linked project, mark projectInfo.isLinked = true so that\n  // QuoteCustomersWithBid.handleOnSelectCustomer (which guards on projectId || isProjectLinked)\n  // and QuoteCustomersTable's useEffect both behave the same as the edit-quote flow.\n  // Without this, adding customers in createQuoteFromSpec never populates bidForm.keyContacts.\n  // return linkedProjectId\n  //   ? withCustomers.setIn(['projectInfo', 'isLinked'], true)\n  //   : withCustomers;\n};","import { call, put } from 'redux-saga/effects';\nimport { SetSnackbarOpenAction } from '../ApplicationModule/actions';\n\n/**\n * The gateway error body — `{ meta, payload: { error: { errorType, error, code } } }`\n * — which ApiClient.post leaves unread on the Response. A network failure or a\n * non-JSON body gets the same shape, so callers read one path.\n */\nasync function readNewSearchError(res: any): Promise<any> {\n  if (typeof res?.data?.json === 'function') {\n    try {\n      return await res.data.json();\n    } catch {\n      // non-JSON body (e.g. a proxy error page) — fall back to the status\n    }\n  }\n  return { payload: { error: { code: res?.status || null, error: res?.error || `HTTP ${res?.status}` } } };\n}\n\n/**\n * Runs a New Search (/mssearch) request and returns the apiCallWaitingAction\n * `{ data, err }` shape, `err` being the gateway error body so\n * `payload.error.code` / `.error` read the same as on the legacy path.\n *\n * A failure — including a 2xx without `payload.mssearch[resultKey]` — is LOUD:\n * an error snackbar carrying the BE's own message (e.g. the filter key the\n * translator refused). A New Search failure is a parity gap to fix, never\n * something to fall back from silently.\n */\nexport function* callNewSearch(surface: string, resultKey: 'items' | 'product', request: () => Promise<any>): any {\n  const res = yield call(request);\n  if (res?.success && Array.isArray(res.data?.payload?.mssearch?.[resultKey])) {\n    return { data: res.data, err: undefined };\n  }\n  const err = res?.success\n    ? { ...res.data, payload: { error: { code: res.status, error: `invalid response: no payload.mssearch.${resultKey}` } } }\n    : yield call(readNewSearchError, res);\n  const message = err?.payload?.error?.error || 'unknown error';\n  console.error(`New Search ${surface} failed`, err); // tslint:disable-line\n  yield put(new SetSnackbarOpenAction({ message: `New Search (${surface}): ${message}`, severity: 'error' }));\n  return { data: undefined, err };\n}\n","export default __webpack_public_path__ + \"static/media/trophy.1f56dc3c.svg\";","import { List, Map, fromJS, set } from 'immutable';\nimport React from 'react';\nimport { Contact, QuoteCustomer, TableColumn } from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport { Box, Grid, IconButton, Menu, MenuItem, Radio, Select, StyleRules, Table, TableBody, TableCell, TableHead, TableRow, TextField, Theme, Tooltip, Typography, makeStyles } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { AMPLITUDE_EVENT, BIDSTATUS_ARRAY, BIDSTATUS_LABEL_PATH_MAP, IS_PRODUCTION } from '../../constants';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport MessageIcon from '@material-ui/icons/Message';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { bidFormSelector, makeSelectProjectKeyContacts, quoteFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport { FormAction, arrayRemove, arraySplice, change, initialize } from 'redux-form';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { makeSelectSelectedContactId } from '../../modules/ContactModule/selectors';\nimport ContactListItem from '../../models/ContactListItem';\nimport CheckIcon from '@material-ui/icons/Check';\nimport Image from '../Image';\nimport trophy from '../../images/projectDetail/trophy.svg';\nimport { LinkCell } from '../_CellRenderers';\nimport { DRAWER_ID } from '../../containers/MyContactsPage/constants';\nimport { GetContactsSucceededAction, SelectContactAction } from '../../modules/AccountModule/actions';\nimport { ToggleOverlayComponentAction, SetOverlayComponentContentAction, SetOverlayComponentPropsAction } from '../../modules/ApplicationModule/actions';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { BID_FORM_NAME } from '../QuoteCustomersWithBid';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport { SelectQuoteCustomerAction } from '../../modules/QuoteEditModule/actions';\nimport { round } from '../../utils/parseFormulaFields';\ninterface IQuoteCustomersTableProps {\n  preview?: boolean;\n  columns?: TableColumn[];\n  customers: List<IMap<Contact>>;\n  toogleBidNoteModal: (bidIndex: number) => void;\n  onApplyDiscount?: (customer: any) => void;\n}\n\nexport const defaultColumns = [\n  { id: 'Customer Name', label: 'quoteCustomerTable.customerNameLabel', path: [['firstName', 'lastName']], display: true, sortable: true, align: 'left' },\n  { id: 'Organization', label: 'quoteCustomerTable.organizationLabel', path: ['organization'], display: true, sortable: true, align: 'left' },\n  { id: 'Contact Type', label: 'quoteCustomerTable.contactTypeLabel', path: ['role'], display: false, sortable: true, align: 'left' },\n  { id: 'Email', label: 'quoteCustomerTable.emailLabel', path: ['email'], display: true, sortable: true, align: 'left' },\n  { id: 'Internal Note', label: 'quoteCustomerTable.internalNoteLabel', path: ['internalNote'], display: false, sortable: true, align: 'left' },\n  { id: 'Address', label: 'quoteCustomerTable.addressLabel', path: ['address'], display: true, sortable: true, align: 'left' },\n  { id: 'Phone Number', label: 'quoteCustomerTable.phoneNumberLabel', path: ['officeNumber'], display: false, sortable: true, align: 'left' },\n  { id: 'Mobile Number', label: 'quoteCustomerTable.mobileNumberLabel', path: ['mobileNumber'], display: false, sortable: true, align: 'left' },\n  { id: 'Bid Status & Value', label: 'quoteCustomerTable.bidStatus&ValueLabel', display: true, sortable: true, align: 'center' },\n  { id: 'Apply Discount', label: 'quoteCustomerTable.applyDiscountLabel', display: true, sortable: true, align: 'center' },\n  { id: 'Action', label: 'quoteCustomerTable.actionLabel', display: true, sortable: true, align: 'center' },\n] as TableColumn[];\n\nconst useStyles = makeStyles((theme: Theme): StyleRules => ({\n  disableRipple: {\n    '&:hover': {\n      backgroundColor: 'transparent',\n    },\n  },\n  bidStatusAndValueCell: {\n    width: '240px',\n    alignItems: 'center',\n  },\n}));\n\nconst QuoteCustomersTable = ({\n  preview = false,\n  columns,\n  customers,\n  toogleBidNoteModal,\n  onApplyDiscount,\n}: IQuoteCustomersTableProps) => {\n\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const atsApi = useAtsApi();\n  const amplitudeData = useAmplitudeData();\n\n  const selectedCustomerId = useSelector(quoteFormSelector(['selectedCustomer']));\n  const quoteId = useSelector(quoteFormSelector(['id']));\n  const collaborators = useSelector(quoteFormSelector(['collaborators']));\n  const grandTotals = useSelector(quoteFormSelector(['grandTotals']));\n  const formKeyContacts: List<IMap<ContactListItem>> = useSelector(bidFormSelector(['keyContacts']));\n  const projectInfoKeyContacts = useSelector(quoteFormSelector(['projectInfo', 'data', 'keyContacts']));\n  const isProjectLinked = useSelector(quoteFormSelector(['projectInfo', 'data', 'isLinked']));\n  const customersInitialized = useSelector(quoteFormSelector(['temp', 'customersInitialized']));\n\n  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n  const [editingBidIndex, setEditingBidIndex] = React.useState(-1);\n  const [selectedGrandTotalValue, setSelectedGrandTotalValue] = React.useState(null);\n\n  React.useEffect(() => {\n    let bids = List();\n    projectInfoKeyContacts?.map((keyContact: IMap<ContactListItem>) => {\n      const constructedBid = fromJS({\n        contact: {\n          id: keyContact.get('id'),\n        },\n        bidStatus: keyContact.get('bidStatus'),\n        bidNote: keyContact.get('bidNote'),\n        bidValue: keyContact.get('bidValue'),\n        projectContactId: keyContact.get('projectContactId'),\n        quoteId: keyContact.get('quoteId')\n      });\n      bids = bids.push(constructedBid);\n    });\n\n    // add bids from quote customers if they don't exist\n    (customers || List())?.forEach((customer: IMap<QuoteCustomer>) => {\n      if (\n        // !bids.find(bid => bid.getIn(['contact', 'id']) === customer.get('id')) ||\n        !bids.find(bid => bid.getIn(['contact', 'id']) === customer.get('id') && bid.get('quoteId') === quoteId)\n      ) {\n        bids = bids.push(fromJS({\n          contact: {\n            id: customer.get('id'),\n          },\n          bidStatus: null,\n          bidNote: null,\n          bidValue: null\n        }));\n      }\n    });\n\n    if (bids.size) {\n      dispatch(initialize(BID_FORM_NAME, { keyContacts: bids }));\n    } else {\n      dispatch(initialize(BID_FORM_NAME, { keyContacts: List() }));\n    }\n  }, [isProjectLinked, projectInfoKeyContacts, customersInitialized]);\n\n  React.useEffect(() => {\n    if (editingBidIndex !== -1) {\n      if (typeof selectedGrandTotalValue === 'number') {\n        const fixedGrandTotal = round(selectedGrandTotalValue, 2).toFixed(2);\n        dispatch(change(BID_FORM_NAME, `keyContacts[${editingBidIndex}].bidValue`, fixedGrandTotal));\n      } else if (typeof selectedGrandTotalValue === 'string') {\n        dispatch(change(BID_FORM_NAME, `keyContacts[${editingBidIndex}].bidValue`, selectedGrandTotalValue));\n      }\n      setEditingBidIndex(-1);\n      setSelectedGrandTotalValue(null);\n    }\n  }, [selectedGrandTotalValue]);\n\n  const handleOnSelectBidStatus = (bidIndex) => (e) => {\n    dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidStatus`, e.target.value));\n    if (e.target.value === null) {\n      dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, ''));\n    } else if (e.target.value === 'Awarded' && grandTotals?.size) {\n      if (grandTotals.size > 1) {\n        setEditingBidIndex(bidIndex);\n        setAnchorEl(e.currentTarget);\n      } else {\n        const formattedGrandTotal = grandTotals.first().get('formattedValue');\n        const grandTotal = grandTotals.first().get('value') || 0;\n        const fixedGrandTotal = round(parseFloat(grandTotal), 2).toFixed(2);\n        dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, formattedGrandTotal ?? fixedGrandTotal));\n      }\n    }\n  };\n\n  const handleOnBidValueChange = (bidIndex) => (e) => {\n    const regex = /^\\d*\\.?(\\d{1,2})?$/;\n    const value = e.target.value;\n    if (value === '') {\n      dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, null));\n    } else if (regex.test(value)) {\n      dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, e.target.value));\n    }\n  };\n\n  const handleOnBidValueBlur = (bidIndex) => (e) => {\n    const value = e.target.value;\n    if (value) {\n      if (isNaN(value)) { // resolves '.' to ''\n        dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, null));\n      } else { // for cases such as '6.' or '.8', it would be updated to '6' and '0.8' respectively\n        dispatch(change(BID_FORM_NAME, `keyContacts[${bidIndex}].bidValue`, String(Number(value))));\n      }\n    }\n  };\n\n  const handleOnDeleteCustomer = (bidIndex, customerIndex) => () => {\n    const deletedCustomerId = customers?.getIn([customerIndex, 'id']);\n    if (selectedCustomerId === deletedCustomerId) {\n      dispatch(change(QUOTE_FORM_NAME, 'selectedCustomer', null));\n      dispatch(new SelectQuoteCustomerAction({ customerId: undefined }));\n    }\n\n    const updatedCustomers = [...customers.splice(customerIndex, 1)];\n    dispatch(change(QUOTE_FORM_NAME, 'customers', updatedCustomers));\n    const removedCustomer: IMap<Contact> = customers.get(customerIndex);\n    const removedSalesReps = removedCustomer.get('salesReps');\n\n    const updatedCollaborators = collaborators?.filter(collaborator => {\n      const collaboratorId = collaborator.get('id');\n      const currentSalesReps = customers?.splice(customerIndex, 1)?.map(customer => customer.get('salesReps')).reduce((acc: any, curr) => [...acc, ...curr]); // sales reps from customers on the list\n      const targetedSalesRep = removedSalesReps.find(salesRep => collaboratorId === salesRep.get('id'));\n\n      return targetedSalesRep === undefined ||\n        currentSalesReps && currentSalesReps.find(currSR => targetedSalesRep && currSR.get('id') === targetedSalesRep.get('id')) !== undefined;\n    });\n\n    dispatch(change(QUOTE_FORM_NAME, 'collaborators', updatedCollaborators));\n\n    dispatch(arrayRemove(BID_FORM_NAME, `keyContacts`, bidIndex));\n  };\n\n  const toggleContactDrawer = (customer) => () => {\n    dispatch(new GetContactsSucceededAction({ contacts: List([customer]) }));\n    dispatch(new SelectContactAction(customer.get('id')));\n    dispatch(new SetOverlayComponentPropsAction({ id: DRAWER_ID, props: { editable: false } }));\n    dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID, open: true }));\n    dispatch(new SetOverlayComponentContentAction({\n      content: 'DEFAULT',\n      id: DRAWER_ID,\n    }));\n  };\n\n  return (\n    <Table>\n      <TableHead>\n        <TableRow>\n          {\n            columns?.map((column: TableColumn, index: number) => (\n              <TableCell\n                key={`${column.label}-${index}`}\n                align={column.align}\n              // style={{ maxWidth: column.id === 'Bid Status & Value' ? '120px' : null }}\n              >\n                {t(column.label)}\n              </TableCell>\n            ))\n          }\n        </TableRow>\n      </TableHead>\n      <TableBody>\n\n        {customers && customers.map((customer, customerIndex) => {\n          const customerId = customer.get('id');\n          const firstName = customer.get('firstName');\n          const lastName = customer.get('lastName');\n          const address1 = customer.get('address1');\n          const address2 = customer.get('address2');\n          const name = (firstName || lastName) && [firstName, lastName].join(' ');\n\n          // wihtout projectContactId & quoteId would be a new entry\n          const bidIndex = formKeyContacts?.findIndex((formKeyContact: IMap<ContactListItem>) =>\n            formKeyContact.getIn(['contact', 'id']) === customerId && !formKeyContact.has('quoteId') ||\n            formKeyContact.getIn(['contact', 'id']) === customerId && formKeyContact.get('quoteId') === quoteId\n          );\n          const bid = bidIndex !== -1 ? formKeyContacts?.get(bidIndex) || Map() : Map();\n          const bidStatus = bid.get('bidStatus');\n          const bidValue = bid.get('bidValue');\n\n          return (\n            <TableRow key={customer.get('id')}>\n              {\n                columns?.map((column: TableColumn) => {\n                  switch (column.id) {\n                    case 'Customer Name': return <LinkCell name={name || '-'} key={column.id} handleOnClick={toggleContactDrawer(customer)} />;\n                    case 'Organization': return !name ?\n                      <LinkCell name={customer.get('organization') || '-'} key={column.id} handleOnClick={toggleContactDrawer(customer)} />\n                      :\n                      <TableCell align={column.align} key={column.id}>{customer.get('organization') || '-'}</TableCell>;\n                    case 'Contact Type': return <TableCell align={column.align} key={column.id}>{customer.get('contactType') || '-'}</TableCell>;\n                    case 'Email': return <TableCell align={column.align} key={column.id}>{customer.get('email') || '-'}</TableCell>;\n                    case 'Address': return <TableCell align={column.align} key={column.id}>{address1 || address2 || '-'}</TableCell>;\n                    case 'Phone Number': return <TableCell align={column.align} key={column.id}>{customer.get('officeNumber') || '-'}</TableCell>;\n                    case 'Mobile Number': return <TableCell align={column.align} key={column.id}>{customer.get('mobileNumber') || '-'}</TableCell>;\n                    case 'Internal Note': return <TableCell align={column.align} key={column.id} style={{ minWidth: 200 }}>{customer.get('internalNote') || '-'}</TableCell>;\n                    case 'Bid Status & Value': return <TableCell key={column.id} className={classes.bidStatusAndValueCell}>\n                      <Box display='flex' justifyItems='center' alignItems='center' width={240} height='100%'>\n                        {\n                          preview ?\n                            <Box width='100%' display='flex' flexDirection='column' textAlign='center'>\n                              <Typography variant='inherit'>\n                                {t(BIDSTATUS_LABEL_PATH_MAP[bidStatus]) || '-'}\n                              </Typography>\n                              <Typography variant='inherit'>\n                                {typeof bidValue === 'number' ? bidValue : bidValue || '-'}\n                              </Typography>\n                            </Box>\n                            :\n                            <Box width='100%'>\n                              <Select\n                                fullWidth={true}\n                                value={bidStatus || ''}\n                                displayEmpty={true}\n                                onChange={handleOnSelectBidStatus(bidIndex)}\n                              >\n                                <MenuItem value={null}>-</MenuItem>\n                                {BIDSTATUS_ARRAY.map(({ value, id, labelPath }) => (\n                                  <MenuItem key={id} value={value}>\n                                    <Typography\n                                      variant='caption'\n                                      color='inherit'\n                                    >\n                                      {t(labelPath)}\n                                    </Typography>\n                                  </MenuItem>\n                                ))}\n                              </Select>\n                              <TextField\n                                value={bidValue ?? ''}\n                                disabled={!bidStatus}\n                                fullWidth={true}\n                                onChange={handleOnBidValueChange(bidIndex)}\n                                onBlur={handleOnBidValueBlur(bidIndex)}\n                              />\n                            </Box>\n\n                        }\n                        {\n                          preview && bidStatus === 'Awarded' && <Image style={{ height: 30, width: 30, marginLeft: -32 }} src={trophy} aspectRatio='100%' />\n                        }\n                        {\n                          preview ?\n                            <IconButton className={classes.disableRipple} onClick={() => toogleBidNoteModal(bidIndex)} disabled={!bidStatus}>\n                              <MessageIcon />\n                            </IconButton>\n                            :\n                            <Tooltip title={!bidStatus ? t('quoteCustomerTable.disabledBidNoteButtonTooltip') : t('quoteCustomerTable.bidNoteButtonTooltip')}>\n                              <span>\n                                <IconButton className={classes.disableRipple} onClick={() => toogleBidNoteModal(bidIndex)} disabled={!bidStatus}>\n                                  <MessageIcon />\n                                </IconButton>\n                              </span>\n                            </Tooltip>\n                        }\n                      </Box>\n                    </TableCell>;\n                    case 'Apply Discount': return <TableCell align={column.align} key={column.id}>\n                      {\n                        preview\n                          ? selectedCustomerId === customer.get('id')\n                            ? <CheckIcon />\n                            : null\n                          : <Tooltip title={t('quoteCustomerTable.applyDiscountTooltip')}>\n                            <Radio\n                              color='primary'\n                              checked={selectedCustomerId === customer.get('id')}\n                              onClick={() => selectedCustomerId !== customer.get('id') ? onApplyDiscount(customer) : null}\n                            />\n                          </Tooltip>\n                      }\n                    </TableCell>;\n                    case 'Action': return <TableCell align={column.align} key={column.id}>\n                      <IconButton onClick={handleOnDeleteCustomer(bidIndex, customerIndex)}>\n                        <DeleteIcon />\n                      </IconButton>\n                    </TableCell>;\n                  }\n                })\n              }\n            </TableRow>\n          );\n        })}\n      </TableBody>\n\n      <Menu\n        anchorEl={anchorEl}\n        // anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n        transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n        keepMounted={true}\n        open={Boolean(anchorEl)}\n      >\n        <Box p={1}>\n          <MenuItem disabled={true}>\n            <Typography variant='h6'>\n              {t('quoteCustomerTable.selectGrandTotalsTitle')}\n            </Typography>\n          </MenuItem>\n          {grandTotals?.entrySeq().map((grandTotal, key) => (\n            <MenuItem key={grandTotal[0] + key} onClick={() => {\n              setSelectedGrandTotalValue(grandTotal[1].get('formattedValue') || grandTotal[1].get('value'));\n              setAnchorEl(null);\n            }}>\n              <Grid container={true} justify='space-between' alignItems='center'>\n                <Typography variant='h6'>{grandTotal[0]}</Typography>\n                <Typography variant='h6'>{grandTotal[1].get('formattedValue') || grandTotal[1].get('value')}</Typography>\n              </Grid>\n\n            </MenuItem>\n          ))}\n        </Box>\n      </Menu>\n\n    </Table>\n  );\n\n};\n\nexport default QuoteCustomersTable;","import React from 'react';\nimport {useTranslation} from 'react-i18next';\n\nimport {\n  Grid,\n  Theme,\n  Typography\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  statusCell: {\n    whiteSpace: 'nowrap'\n  },\n  statusContainer: {\n    marginTop: theme.spacing(),\n    marginBottom: theme.spacing(),\n    borderRadius: theme.shape.borderRadius,\n    overflow: 'hidden',\n    whiteSpace: 'pre-wrap',\n    display: 'inline-flex'\n  },\n  pendingStatus: {\n    background: '#FFF3CB',\n  },\n  declinedStatus: {\n    background: '#F7D0D0',\n  },\n  submittedStatus: {\n    background: '#E8F5EC',\n  },\n  statusBox: {\n    padding: '6px 10px',\n    textTransform: 'uppercase',\n    width: '190px',\n    textAlign: 'center'\n  },\n  pendingStatusBox: {\n    padding: '6px 10px',\n    textTransform: 'uppercase',\n    width: '190px',\n    textAlign: 'center'\n  }\n}));\n\nconst BidStatusBar = ({status}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  return (\n    <Grid container={true} justify='flex-start' className={classes.statusContainer}>\n      {(status === 'submitted') &&\n        <Grid className={classes.submittedStatus}>\n          <Typography variant='body2' className={classes.statusBox} noWrap={true}>\n            {t('autoQuotationBidDetail.submittedStatus')}\n          </Typography>\n        </Grid>\n      }\n      {(status === 'pending') &&\n        <Grid className={classes.pendingStatus}>\n          <Typography variant='body2' className={classes.pendingStatusBox} noWrap={true}>\n            {t('autoQuotationBidDetail.pendingStatus')}\n          </Typography>\n        </Grid>\n      }\n      {(status === 'declined') &&\n        <Grid className={classes.declinedStatus}>\n          <Typography variant='body2' className={classes.statusBox} noWrap={true}>\n            {t('autoQuotationBidDetail.declinedStatus')}\n          </Typography>\n        </Grid>\n      }\n    </Grid>\n  );\n\n};\n\nexport default BidStatusBar;","import React from 'react';\nimport {TableCell, Typography} from '@material-ui/core';\nimport TableDynamicCell from './DynamicColumn/TableDynamicCell';\nimport BidStatusBar from '../../../../../components/PricingRequest/BidStatusBar';\nimport {Link} from 'react-router-dom';\nimport SendPricingRequestsWidgetUtil from '../SendPricingRequestsWidgetUtil';\n\nexport const getUpdatedAtCell = (bidResponse, indexId) => {\n  return (\n    <React.Fragment key={`${indexId}`}>\n      {(bidResponse.status === 'pending') &&\n        <TableCell key={indexId + 'pending'}>\n          <>-</>\n        </TableCell>\n      }\n      {(bidResponse.status !== 'pending') &&\n        <React.Fragment key={`${indexId}-${bidResponse.status}`}>\n          {TableDynamicCell.getTimeCell(bidResponse.updatedAt, indexId)}\n        </React.Fragment>\n      }\n    </React.Fragment>\n  );\n};\n\nexport const getResponseStatusCell = (bidResponse, indexId) => {\n  return (\n    <TableCell key={indexId}>\n      <BidStatusBar status={bidResponse.status} />\n    </TableCell>\n  );\n};\n\nexport const getResponseIdCell = (bidResponse, indexId) => {\n  return (\n    <TableCell key={indexId}>\n      <Link color='primary' to={SendPricingRequestsWidgetUtil.getBidDetailUrl(bidResponse)}>\n        <Typography variant='body2' color='primary' noWrap={true}>\n          {'BI-' + bidResponse.id}\n        </Typography>\n      </Link>\n    </TableCell>\n  );\n};","import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/**\n * @deprecated This export will be removed in v8.\n */\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport { fade } from '../styles/colorManipulator';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      height: 1,\n      margin: 0,\n      // Reset browser default style.\n      border: 'none',\n      flexShrink: 0,\n      backgroundColor: theme.palette.divider\n    },\n\n    /* Styles applied to the root element if `absolute={true}`. */\n    absolute: {\n      position: 'absolute',\n      bottom: 0,\n      left: 0,\n      width: '100%'\n    },\n\n    /* Styles applied to the root element if `variant=\"inset\"`. */\n    inset: {\n      marginLeft: 72\n    },\n\n    /* Styles applied to the root element if `light={true}`. */\n    light: {\n      backgroundColor: fade(theme.palette.divider, 0.08)\n    },\n\n    /* Styles applied to the root element if `variant=\"middle\"`. */\n    middle: {\n      marginLeft: theme.spacing(2),\n      marginRight: theme.spacing(2)\n    },\n\n    /* Styles applied to the root element if `orientation=\"vertical\"`. */\n    vertical: {\n      height: '100%',\n      width: 1\n    }\n  };\n};\nvar Divider = React.forwardRef(function Divider(props, ref) {\n  var _props$absolute = props.absolute,\n      absolute = _props$absolute === void 0 ? false : _props$absolute,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'hr' : _props$component,\n      _props$light = props.light,\n      light = _props$light === void 0 ? false : _props$light,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      _props$role = props.role,\n      role = _props$role === void 0 ? Component !== 'hr' ? 'separator' : undefined : _props$role,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'fullWidth' : _props$variant,\n      other = _objectWithoutProperties(props, [\"absolute\", \"classes\", \"className\", \"component\", \"light\", \"orientation\", \"role\", \"variant\"]);\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, variant !== 'fullWidth' && classes[variant], absolute && classes.absolute, light && classes.light, {\n      vertical: classes.vertical\n    }[orientation]),\n    role: role,\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Divider.propTypes = {\n  /**\n   * Absolutely position the element.\n   */\n  absolute: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the divider will have a lighter color.\n   */\n  light: PropTypes.bool,\n\n  /**\n   * The divider orientation.\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['fullWidth', 'inset', 'middle'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDivider'\n})(Divider);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport { useFormControl } from '../FormControl';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      cursor: 'pointer',\n      // For correct alignment with the text.\n      verticalAlign: 'middle',\n      WebkitTapHighlightColor: 'transparent',\n      marginLeft: -11,\n      marginRight: 16,\n      // used for row presentation of radio/checkbox\n      '&$disabled': {\n        cursor: 'default'\n      }\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"start\"`. */\n    labelPlacementStart: {\n      flexDirection: 'row-reverse',\n      marginLeft: 16,\n      // used for row presentation of radio/checkbox\n      marginRight: -11\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"top\"`. */\n    labelPlacementTop: {\n      flexDirection: 'column-reverse',\n      marginLeft: 16\n    },\n\n    /* Styles applied to the root element if `labelPlacement=\"bottom\"`. */\n    labelPlacementBottom: {\n      flexDirection: 'column',\n      marginLeft: 16\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the label's Typography component. */\n    label: {\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      }\n    }\n  };\n};\n/**\n * Drop in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\n\nvar FormControlLabel = React.forwardRef(function FormControlLabel(props, ref) {\n  var checked = props.checked,\n      classes = props.classes,\n      className = props.className,\n      control = props.control,\n      disabledProp = props.disabled,\n      inputRef = props.inputRef,\n      label = props.label,\n      _props$labelPlacement = props.labelPlacement,\n      labelPlacement = _props$labelPlacement === void 0 ? 'end' : _props$labelPlacement,\n      name = props.name,\n      onChange = props.onChange,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"checked\", \"classes\", \"className\", \"control\", \"disabled\", \"inputRef\", \"label\", \"labelPlacement\", \"name\", \"onChange\", \"value\"]);\n\n  var muiFormControl = useFormControl();\n  var disabled = disabledProp;\n\n  if (typeof disabled === 'undefined' && typeof control.props.disabled !== 'undefined') {\n    disabled = control.props.disabled;\n  }\n\n  if (typeof disabled === 'undefined' && muiFormControl) {\n    disabled = muiFormControl.disabled;\n  }\n\n  var controlProps = {\n    disabled: disabled\n  };\n  ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(function (key) {\n    if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n      controlProps[key] = props[key];\n    }\n  });\n  return React.createElement(\"label\", _extends({\n    className: clsx(classes.root, className, labelPlacement !== 'end' && classes[\"labelPlacement\".concat(capitalize(labelPlacement))], disabled && classes.disabled),\n    ref: ref\n  }, other), React.cloneElement(control, controlProps), React.createElement(Typography, {\n    component: \"span\",\n    className: clsx(classes.label, disabled && classes.disabled)\n  }, label));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControlLabel.propTypes = {\n  /**\n   * If `true`, the component appears selected.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * A control element. For instance, it can be be a `Radio`, a `Switch` or a `Checkbox`.\n   */\n  control: PropTypes.element,\n\n  /**\n   * If `true`, the control will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * The text to be used in an enclosing label element.\n   */\n  label: PropTypes.node,\n\n  /**\n   * The position of the label.\n   */\n  labelPlacement: PropTypes.oneOf(['end', 'start', 'top', 'bottom']),\n\n  /*\n   * @ignore\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFormControlLabel'\n})(FormControlLabel);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport withStyles from '../styles/withStyles';\nimport FormLabel from '../FormLabel';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'block',\n      transformOrigin: 'top left'\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Pseudo-class applied to the asterisk element. */\n    asterisk: {},\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      // slight alteration to spec spacing to match visual spec result\n      transform: 'translate(0, 24px) scale(1)'\n    },\n\n    /* Styles applied to the root element if `margin=\"dense\"`. */\n    marginDense: {\n      // Compensation for the `Input.inputDense` style.\n      transform: 'translate(0, 21px) scale(1)'\n    },\n\n    /* Styles applied to the `input` element if `shrink={true}`. */\n    shrink: {\n      transform: 'translate(0, 1.5px) scale(0.75)',\n      transformOrigin: 'top left'\n    },\n\n    /* Styles applied to the `input` element if `disableAnimation={false}`. */\n    animated: {\n      transition: theme.transitions.create(['color', 'transform'], {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"`. */\n    filled: {\n      // Chrome's autofill feature gives the input field a yellow background.\n      // Since the input field is behind the label in the HTML tree,\n      // the input field is drawn last and hides the label with an opaque background color.\n      // zIndex: 1 will raise the label above opaque background-colors of input.\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(12px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(12px, 17px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(12px, 10px) scale(0.75)',\n        '&$marginDense': {\n          transform: 'translate(12px, 7px) scale(0.75)'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      // see comment above on filled.zIndex\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(14px, 20px) scale(1)',\n      '&$marginDense': {\n        transform: 'translate(14px, 12px) scale(1)'\n      },\n      '&$shrink': {\n        transform: 'translate(14px, -6px) scale(0.75)'\n      }\n    }\n  };\n};\nvar InputLabel = React.forwardRef(function InputLabel(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$disableAnimati = props.disableAnimation,\n      disableAnimation = _props$disableAnimati === void 0 ? false : _props$disableAnimati,\n      margin = props.margin,\n      shrinkProp = props.shrink,\n      variant = props.variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"disableAnimation\", \"margin\", \"shrink\", \"variant\"]);\n\n  var muiFormControl = useFormControl();\n  var shrink = shrinkProp;\n\n  if (typeof shrink === 'undefined' && muiFormControl) {\n    shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n  }\n\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['margin', 'variant']\n  });\n  return React.createElement(FormLabel, _extends({\n    \"data-shrink\": shrink,\n    className: clsx(classes.root, className, muiFormControl && classes.formControl, !disableAnimation && classes.animated, shrink && classes.shrink, {\n      dense: classes.marginDense\n    }[fcs.margin], {\n      filled: classes.filled,\n      outlined: classes.outlined\n    }[fcs.variant]),\n    classes: {\n      focused: classes.focused,\n      disabled: classes.disabled,\n      error: classes.error,\n      required: classes.required,\n      asterisk: classes.asterisk\n    },\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? InputLabel.propTypes = {\n  /**\n   * The contents of the `InputLabel`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * If `true`, the transition animation is disabled.\n   */\n  disableAnimation: PropTypes.bool,\n\n  /**\n   * If `true`, apply disabled class.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the label will be displayed in an error state.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input of this label is focused.\n   */\n  focused: PropTypes.bool,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n\n  /**\n   * if `true`, the label will indicate that the input is required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * If `true`, the label is shrunk.\n   */\n  shrink: PropTypes.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiInputLabel'\n})(InputLabel);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nimport ListContext from '../List/ListContext';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    flex: '1 1 auto',\n    minWidth: 0,\n    marginTop: 4,\n    marginBottom: 4\n  },\n\n  /* Styles applied to the `Typography` components if primary and secondary are set. */\n  multiline: {\n    marginTop: 6,\n    marginBottom: 6\n  },\n\n  /* Styles applied to the `Typography` components if dense. */\n  dense: {},\n\n  /* Styles applied to the root element if `inset={true}`. */\n  inset: {\n    paddingLeft: 56\n  },\n\n  /* Styles applied to the primary `Typography` component. */\n  primary: {},\n\n  /* Styles applied to the secondary `Typography` component. */\n  secondary: {}\n};\nvar ListItemText = React.forwardRef(function ListItemText(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      _props$inset = props.inset,\n      inset = _props$inset === void 0 ? false : _props$inset,\n      primaryProp = props.primary,\n      primaryTypographyProps = props.primaryTypographyProps,\n      secondaryProp = props.secondary,\n      secondaryTypographyProps = props.secondaryTypographyProps,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"disableTypography\", \"inset\", \"primary\", \"primaryTypographyProps\", \"secondary\", \"secondaryTypographyProps\"]);\n\n  var _React$useContext = React.useContext(ListContext),\n      dense = _React$useContext.dense;\n\n  var primary = primaryProp != null ? primaryProp : children;\n\n  if (primary != null && primary.type !== Typography && !disableTypography) {\n    primary = React.createElement(Typography, _extends({\n      variant: dense ? 'body2' : 'body1',\n      className: classes.primary,\n      component: \"span\"\n    }, primaryTypographyProps), primary);\n  }\n\n  var secondary = secondaryProp;\n\n  if (secondary != null && secondary.type !== Typography && !disableTypography) {\n    secondary = React.createElement(Typography, _extends({\n      variant: \"body2\",\n      className: classes.secondary,\n      color: \"textSecondary\"\n    }, secondaryTypographyProps), secondary);\n  }\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, dense && classes.dense, inset && classes.inset, primary && secondary && classes.multiline),\n    ref: ref\n  }, other), primary, secondary);\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemText.propTypes = {\n  /**\n   * Alias for the `primary` property.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the children won't be wrapped by a Typography component.\n   * This can be useful to render an alternative Typography variant by wrapping\n   * the `children` (or `primary`) text, and optional `secondary` text\n   * with the Typography component.\n   */\n  disableTypography: PropTypes.bool,\n\n  /**\n   * If `true`, the children will be indented.\n   * This should be used if there is no left avatar or left icon.\n   */\n  inset: PropTypes.bool,\n\n  /**\n   * The main content element.\n   */\n  primary: PropTypes.node,\n\n  /**\n   * These props will be forwarded to the primary typography component\n   * (as long as disableTypography is not `true`).\n   */\n  primaryTypographyProps: PropTypes.object,\n\n  /**\n   * The secondary content element.\n   */\n  secondary: PropTypes.node,\n\n  /**\n   * These props will be forwarded to the secondary typography component\n   * (as long as disableTypography is not `true`).\n   */\n  secondaryTypographyProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiListItemText'\n})(ListItemText);","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _reactIs = require(\"react-is\");\n\nvar validateComponentProp = function validateComponentProp(props, propName, componentName) {\n  if (!(0, _reactIs.isValidElementType)(props[propName])) {\n    return new Error('Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`.');\n  }\n\n  return null;\n};\n\nvar _default = validateComponentProp;\nexports[\"default\"] = _default;","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","export const TOUR_TRIGGER_KEY = 'tourTriggerKey';\n\nexport enum TourTriggerValue {\n  NEW_AUTOQUOTE_PROJECT_CREATED = 'newAutoQuoteProjectCreated',\n  NEW_QUOTE_CREATED = 'newQuoteCreated',\n}\n\nexport const setUsetifulTags = (key: string, value: string) => {\n  if (key) {\n    const currentTags = window.usetifulTags;\n    if (currentTags) {\n      window.usetifulTags = {\n        ...currentTags,\n        [key]: value,\n      };\n    }\n  }\n};\n\nexport const timeoutResetUsetifulTags = (key: string, timeout: number = 5000) => {\n  const hasValue = window?.usetifulTags?.[key];\n  if (hasValue) {\n    setTimeout(() => {\n      setUsetifulTags(key, null);\n    }, timeout);\n  }\n};","import {\n  Map,\n} from 'immutable';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createSelector,\n} from 'reselect';\nimport {\n  IThemeReducerState\n} from './reducer';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ThemeModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectTheme = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IThemeReducerState>) => state.get('theme')\n);\n\nexport default {\n  selectReducerState,\n};\n","/* tslint:disable:no-console */\n\nimport 'whatwg-fetch';\nimport Store from '../../store';\nimport { makeSelectToken } from '../../modules/AtsModule/selectors';\nimport {\n  safeStringify,\n  stringifyQueryParams,\n} from 'ats-utils/src';\nimport {\n  IAtsRequestInit,\n} from 'ats-utils/src/Interfaces';\nimport { getEnv } from '../../constants';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param  {object} response A response from a network request\n *\n * @return {object}          The parsed JSON from the request\n */\nfunction parseJSON(response: Response) {\n  try {\n    return response.json();\n  } catch (e) {\n    console.error('could not parse response', e); // eslint-disable-line no-console\n  }\n  return response;\n}\n\n/**\n * Checks if a network request came back fine, and throws an error if not\n *\n * @param  {object} response   A response from a network request\n *\n * @return {object|undefined} Returns either the response, or throws an error\n */\ninterface IErrorWithResponse extends Error {\n  response: any;\n}\n\nfunction checkStatus(response: Response) {\n  if (response.status >= 200 && response.status < 300) {\n    return response;\n  }\n\n  const error = new Error(response.statusText) as IErrorWithResponse;\n\n  error.response = response;\n  throw error;\n}\n\nfunction addAuthHeaders(options: RequestInit = {}, token?: string) {\n  // console.error('addAuthHeaders', {\n  //   getEnv,\n  //   env: getEnv(),\n  // });\n  const tokenKey = getEnv().TOKEN_KEY || 'X-ATS-Token';\n\n  return {\n    ...options,\n    headers: {\n      ...(options.headers || {}),\n      [tokenKey]: token,\n    },\n  };\n}\n\nexport function request(_url: string, _options: IAtsRequestInit = {}) {\n  const defaultHeaders = {\n    Accept: 'application/json',\n    'Content-Type': 'application/json',\n  };\n\n  const options = {\n    ..._options,\n  };\n\n  let url = _url;\n\n  options.headers = {\n    ...defaultHeaders,\n    ...options.headers,\n  };\n\n  if (options.bodyObj && ['get', 'delete'].indexOf((options.method || 'get').toLowerCase()) !== -1) {\n\n    if (options.body != null) {\n      console.error('body already exists, please check code1');\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + stringifyQueryParams(options.bodyObj);\n    delete options.bodyObj;\n  }\n\n  if (options.bodyObj) {\n    if (options.body != null) {\n      console.error('body already exists, please check code2');\n    }\n    options.body = safeStringify(options.bodyObj);\n  }\n\n  return fetch(url, options)\n    .then(checkStatus)\n    .then(parseJSON)\n    .then((data) => ({ data }))\n    .catch((err) => ({ err }));\n}\n\n/**\n * Requests a URL, returning a promise\n * will automatically set X-ATS-Token header with token from auth store if token is not null\n *\n * @param  {string} url       The URL we want to request\n * @param  {object} [options] The options we want to pass to 'fetch'\n *\n * @return {object}           An object containing either 'data' or 'err'\n */\nexport default function requestWithAuth(url: string, _options: RequestInit = {}) {\n  const reduxStore = Store.get('store');\n  let options = {\n    ..._options,\n  };\n  if (reduxStore != null) {\n    const token = makeSelectToken()(reduxStore.getState());\n\n    console.error('token', {\n      token,\n      reduxStore,\n      makeSelectToken,\n    });\n\n    if (token != null) {\n      options = addAuthHeaders(options, token);\n    }\n  }\n  return request(url, options);\n}\n","import { combineReducers } from 'redux-immutable';\nimport { compose } from 'redux';\nimport { connectRouter } from 'connected-react-router/immutable';\n// library reducers\nimport { reducer as local } from 'redux-react-local';\nimport { reducer as form } from 'redux-form/immutable';\nimport { GenericReducer, InjectedReducers } from 'ats-utils/src/Interfaces';\nimport {\n  parseQueryString,\n} from 'ats-utils/src';\nimport { History, createBrowserHistory } from 'history';\n\n/*\n * routeReducer\n *\n * The reducer merges route location changes into our immutable state.\n * The change is necessitated by moving to react-router-redux@4\n *\n */\n\n// Initial routing state\n// const routeInitialState = fromJS({\n//   location: null,\n// });\n\n/**\n * Merge route into the global application state\n */\n// function routeReducer(state: ReducerState = routeInitialState, action: IAction) {\n//   switch (action.type) {\n//     /* istanbul ignore next */\n//     case LOCATION_CHANGE:\n//       return state.merge({\n//         location: action.payload,\n//       });\n//     default:\n//       return state;\n//   }\n// }\n\n/**\n * Creates the main reducer with the dynamically injected ones\n */\nconst queryString = parseQueryString();\n\nexport const fallbackHistory = createBrowserHistory();\n\nconst reducerConfig: {\n  history?: History,\n  reset?: boolean,\n} = {\n  history: fallbackHistory,\n  reset: queryString.hasOwnProperty('reset'),\n};\n\nexport function configureReducer({\n  history,\n  reset,\n}: {\n  history?: History;\n  reset?: boolean;\n}) {\n  if (history != null) {\n    reducerConfig.history = history;\n  }\n  if (reset != null) {\n    reducerConfig.reset = reset;\n  }\n}\n\n\n\n\nexport default function createReducer(injectedReducers: InjectedReducers) {\n  const composedReducers = [\n    (reducers: any) => reducers,\n  ];\n\n  return compose<GenericReducer>(\n    ...composedReducers\n  )(\n    combineReducers({\n      router: connectRouter(reducerConfig.history),\n      local,\n      form,\n      // [Store.get('reducerNamespace')]: atsReducer,\n      ...injectedReducers,\n    })\n  );\n}\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'debug💾';\nexport const DEBUG = 'DEBUG/4949';\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\n}), 'ArrowBack');\n\nexports.default = _default;","import * as React from 'react';\nimport loadingImage from '../../images/loader.gif';\nimport styled from 'styled-components';\n\nconst Centered = styled.div`\n  display: flex;\n  justify-content: center;\n`;\nconst Loading = () => (\n  <Centered>\n    <img\n      src={loadingImage}\n      alt='Loading...'\n    />\n  </Centered>\n  );\n\nexport default Loading;\n","export default \"data:image/gif;base64,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\"","import type { Span } from '@sentry/types';\n\n/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nexport function getRootSpan(span: Span): Span | undefined {\n  // TODO (v8): Remove this check and just return span\n  // eslint-disable-next-line deprecation/deprecation\n  return span.transaction;\n}\n","// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nexport function hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n} // Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\n\nexport function isFilled(obj) {\n  var SSR = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n} // Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\n\nexport function isAdornedStart(obj) {\n  return obj.startAdornment;\n}","import * as React from 'react';\nimport { compose } from 'redux';\nimport { withStyles, WithStyles, Theme, WithTheme } from '@material-ui/core/styles';\n\nimport {\n  ListItem,\n  ListItemIcon,\n  ListItemText,\n  Tooltip,\n  useMediaQuery,\n} from '@material-ui/core';\nimport {\n  FontAwesomeIcon,\n  Props as FontAwesomeIconProps,\n} from '@fortawesome/react-fontawesome';\n// import styled from 'styled-components';\nimport classnames from 'classnames';\nimport { isWidthDown } from '@material-ui/core/withWidth';\n\nimport { styled } from '@material-ui/styles';\n\nimport {\n  ANIMATION_SPEED,\n} from '../ResponsiveMenu/constants';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  makeSelectConfig,\n  makeSelectConfigUiOverrides,\n  makeSelectEnv,\n  makeSelectToken,\n  makeSelectIdentityObject,\n} from '../../modules/AtsModule/selectors';\nimport {\n  createStructuredSelector,\n} from 'reselect';\nimport {\n  connect,\n  useSelector,\n} from 'react-redux';\nimport isObject from 'lodash/isObject';\n\nimport {\n  withAtsApi,\n} from '../../contexts/AtsApiContext';\n\nimport { Api } from 'ats-api/src';\n\nimport {\n  Map,\n} from 'immutable';\nimport { ListItemTextProps as ListItemTextPropsType } from '@material-ui/core/ListItemText';\nimport { Breakpoint } from '@material-ui/core/styles/createBreakpoints';\nimport generateLinkParams, { IHref } from '../../utils/generateLinkParams';\nimport {\n  IAction,\n  IConfig,\n  IMap\n} from 'ats-utils/src';\nimport { CloseMobileAppMenuAction } from '../../modules/ApplicationModule/actions';\nimport {\n  RouteComponentProps,\n  withRouter,\n} from 'react-router';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport QuoteConnectHelp from '../../utils/quoteConnect/quoteConnectHelp';\n\nconst ListItemTextInterceptor = (props: ListItemTextPropsType & IMainMenuItemResponsiveComponentProps & {ListItemTextProps: ListItemTextPropsType}) => {\n  const {\n    // pull inputRef out of props that <Input> passes in\n    responsive, // eslint-disable-line no-unused-vars, react/prop-types\n    widthBreakpoint,\n\n    ListItemTextProps,\n    ...rest\n  } = props;\n\n  return <ListItemText {...rest} {...ListItemTextProps} />;\n};\n\nconst ResponsiveListItemText = styled(ListItemTextInterceptor)(({theme, widthBreakpoint, responsive}: IMainMenuItemResponsiveComponentProps & ITheme) => {\n  return {\n    transition: `all ${ANIMATION_SPEED}s`,\n    paddingLeft: theme.spacing(),\n    opacity: 1,\n    height: 'auto',\n    flex: 'auto',\n    width: '100%',\n    ...responsive\n    ? {\n      ...isWidthDown('sm', widthBreakpoint)\n        ? {\n          opacity: 0,\n          width: 0,\n          height: 0,\n          margin: 0,\n          flex: '0 1 0',\n        }\n        : {\n          padding: theme.spacing(0, 1.5),\n        }\n    }\n    : {\n      opacity: 1,\n    }\n  };\n});\n\ninterface IMainMenuItemResponsiveComponentProps {\n  responsive?: boolean;\n  widthBreakpoint?: Breakpoint;\n  drawerGradient?: string;\n}\n\n// @@TODO fix typing for material ui icons\ninterface IMainMenuItemComponentProps extends IMainMenuItemResponsiveComponentProps {\n  iconProps?: any;\n  endIconProps?: any;\n  label?: string;\n  href?: string | IHref;\n  target?: string;\n  to?: string;\n  toArray?: string[];\n  tooltip?: string;\n  isSubMenu?: boolean;\n  dispatch?: React.Dispatch<IAction>;\n  close?: boolean;\n  disabled?: boolean;\n  onClick?(evt: React.MouseEvent): void;\n}\n\ninterface IMainMenuItemProps extends IMainMenuItemComponentProps {\n  atsApi: Api;\n  env: Map<string, string>;\n  token?: string;\n  config: IMap<IConfig>;\n}\n\ninterface ITheme {\n  theme: Theme;\n}\n\ntype MainMenuItemType = RouteComponentProps & WithTheme & IMainMenuItemProps & WithStyles<keyof ReturnType<typeof muiStyles>> & WithAmplitudeData;\n\nconst MainMenuItem: React.FC<MainMenuItemType> = (props) => {\n  const {\n    classes,\n    iconProps,\n    endIconProps,\n    label,\n    href,\n    target,\n    to,\n    toArray,\n    onClick,\n    responsive,\n    widthBreakpoint,\n    isSubMenu,\n    disabled,\n\n    env,\n    atsApi,\n    token,\n    config,\n\n    tooltip,\n    theme,\n\n    dispatch,\n    close = true,\n    location,\n    amplitudeData,\n  } = props;\n  const uiOverrides = useSelector(makeSelectConfigUiOverrides());\n  const identity = useSelector(makeSelectIdentityObject());\n  const isQuoteConnectRep = QuoteConnectHelp.isQuoteConnectRepLogin(identity);\n  const customSelectedMenuItemBackgroundColor = uiOverrides?.get('customSelectedMenuItemBackgroundColor');\n\n  const linkProps = generateLinkParams({\n    href,\n    token,\n    atsApi,\n    env,\n    to,\n    onClick,\n    target\n  });\n\n  const isFullMenuWidth = useMediaQuery('(min-width:960px)');\n  const padding = {\n    left: theme.spacing(2),\n    right: theme.spacing(2),\n  };\n  if (isSubMenu) {\n    if (isFullMenuWidth) {\n      padding.left = theme.spacing(5.5);\n      padding.right = theme.spacing();\n    } else {\n      padding.left = theme.spacing(3.5);\n    }\n  }\n\n  const { left: paddingLeft, right: paddingRight } = padding;\n  const currentPath = location.pathname;\n\n  let activeMenuItemBackgroundColor = customSelectedMenuItemBackgroundColor ?? `${theme.palette.secondary[600]}99`;\n  if (isQuoteConnectRep) {\n    activeMenuItemBackgroundColor = QuoteConnectHelp.getQuoteConnectLightColor() + '99';\n  }\n\n  const menuItem = (\n    <ListItem\n      button={true}\n      disableGutters={true}\n      disabled={disabled}\n      {...linkProps}\n      classes={{ root: classes.menuItem }}\n      onClick={(e) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.navigateMenu, amplitudeData({\n          to: label\n        }));\n        close && dispatch(new CloseMobileAppMenuAction()); // tslint:disable-line\n        onClick && onClick(e); // tslint:disable-line\n      }}\n      style={(toArray?.length ? toArray.find((_to) => _to === currentPath) : to === currentPath) ? {\n        backgroundColor: activeMenuItemBackgroundColor,\n        paddingLeft,\n        paddingRight\n      } : {\n        paddingLeft,\n        paddingRight\n      }}\n    >\n      <div className={classes.listItemIconWidth}>\n        <ListItemIcon className={classnames(classes.listItemTextColor, classes.listItemIcon)}>\n          <div style={{display: 'flex'}}>\n            {iconProps}\n          </div>\n        </ListItemIcon>\n      </div>\n      <ResponsiveListItemText\n        widthBreakpoint={widthBreakpoint}\n        ListItemTextProps={{\n          classes: { primary: classes.listItemTextColor }\n        }}\n        primary={label}\n        primaryTypographyProps={{\n          variant: 'body1',\n        }}\n        responsive={responsive}\n      />\n      <div className={classes.listItemIconWidth}>\n        <ListItemIcon className={classnames(classes.listItemTextColor, classes.listItemIcon)}>\n          <div style={{display: 'flex'}}>\n            {endIconProps}\n          </div>\n        </ListItemIcon>\n      </div>\n    </ListItem>\n  );\n\n  return tooltip != null\n  ? <Tooltip\n      title={tooltip}\n      placement='right'\n      classes={{\n        tooltip: classes.tooltip\n      }}\n    >\n      <span>\n        {menuItem}\n      </span>\n    </Tooltip>\n  : menuItem;\n};\n\nconst muiStyles = (theme): StyleRules => ({\n  menuItem: {\n    justifyContent: 'space-between',\n    height: theme.spacing() * 6,\n    '&:hover': {\n      backgroundColor: 'rgba(0, 0, 0, 0.1)'\n    },\n  },\n  listItemTextColor: {\n    color: theme.palette.mainMenuText ? theme.palette.mainMenuText : theme.palette.primary.contrastText,\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  listItemIcon: {\n    width: 'auto',\n    height: 'auto',\n    opacity: 0.8,\n    margin: 0,\n    minWidth: 'auto',\n    color: theme.palette.common.base\n  },\n  listItemIconWidth: {\n    width: theme.spacing() * 2.5,\n    display: 'flex',\n    justifyContent: 'center',\n  },\n  tooltip: {\n    maxWidth: '100%'\n  }\n});\n\nconst mapStateToProps = createStructuredSelector({\n  env: makeSelectEnv(),\n  token: makeSelectToken(), // so that we can force update when token changes\n  config: makeSelectConfig()\n});\n\nexport default compose<React.ComponentClass<IMainMenuItemComponentProps>>(\n  withAtsApi(),\n  withStyles(muiStyles, { withTheme: true }),\n  withRouter,\n  connect(mapStateToProps),\n  withAmplitudeData,\n)(MainMenuItem);\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n  Theme,\n} from '@material-ui/core/styles';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\n\nimport {\n  Menu,\n  Button,\n  IconButton,\n  Typography,\n} from '@material-ui/core';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\n\n// @@TODO strip off styles once get rid of all FA Icons\nconst styles = (theme: Theme): StyleRules => ({\n  icon: {\n    color: theme.palette.grey[600],\n  }\n});\n\ninterface IDropdownContainerComponentProps {\n  iconName?: IconProp;\n  button?: React.ReactNode;\n  MenuProps?: object;\n  ButtonProps?: object;\n  IconProps?: object;\n  hide?: boolean;\n  closeOnItemClick?: boolean;\n  materialIcon?: JSX.Element;\n  width?: string;\n  open?: boolean;\n  onClose?: () => void;\n  onClick?(evt: React.MouseEvent): void;\n}\n\ninterface IDropdownContainerProps extends IDropdownContainerComponentProps {\n}\n\ntype DropdownContainerProps = IDropdownContainerProps & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IDropdownContainerState {\n  anchorEl: React.ReactNode;\n}\n\n// type buttonRef = React.RefObject<HTMLInputElement>;\n\nclass DropdownContainer extends React.Component<DropdownContainerProps, IDropdownContainerState> {\n  public buttonRef: React.RefObject<HTMLInputElement>;\n  public state = { // eslint-disable-line no-undef\n    anchorEl: null,\n  };\n\n  constructor(props) {\n    super(props);\n    this.buttonRef = React.createRef();\n  }\n\n  public componentDidUpdate() {\n    if ((this.props.hide === true || this.props.open === false) && this.state.anchorEl) {\n      this.setState({\n        anchorEl: null\n      });\n    }\n\n    if (typeof this.props.open === 'boolean' && this.props.open && !this.state.anchorEl) {\n      this.setState({\n        anchorEl: this.buttonRef.current\n      });\n    }\n  }\n\n  public openDropdown = (e) => { // eslint-disable-line no-undef\n    this.setState({ anchorEl: e.target });\n    const onClick = this.props.onClick;\n    if (onClick) {\n      onClick(e);\n    }\n  }\n  public closeDropdown = () => { // eslint-disable-line no-undef\n    this.setState({ anchorEl: null });\n    const onClose = this.props.onClose;\n    if (onClose) {\n      this.props.onClose();\n    }\n  }\n\n  public render() {\n    const {\n      children,\n      button,\n      MenuProps = {\n        getContentAnchorEl: null,\n        anchorOrigin: {\n          vertical: 'bottom',\n          horizontal: 'right',\n        },\n        transformOrigin: {\n          horizontal: 'right',\n          vertical: 'top',\n        },\n      },\n      ButtonProps,\n      IconProps,\n      iconName,\n      classes,\n      materialIcon,\n      width,\n    } = this.props;\n\n    const {\n      anchorEl,\n    } = this.state;\n\n    // @@TODO fix this definition using buttonProps or wahtever material-ui types have in common.\n    const InputButton: any = button ? Button : IconButton;\n    const renderButton = () => {\n      return (\n        <InputButton\n          ref={this.buttonRef}\n          color='primary'\n          variant='contained'\n          onClick={children ? this.openDropdown : null}\n          {...ButtonProps}\n        >\n          {\n            button\n              ? <Typography\n                variant='subtitle2'\n              >\n                {button}\n              </Typography>\n              : (\n                iconName != null\n                  ? <FontAwesomeIcon\n                    icon={iconName}\n                    className={classes.icon}\n                    {...IconProps}\n                  />\n                  : (\n                    materialIcon\n                      ? materialIcon\n                      : 'no icon'\n                  )\n              )\n          }\n        </InputButton>\n      );\n    };\n    return (\n      <div>\n        {renderButton()}\n        <Menu\n          open={Boolean(anchorEl && children)}\n          onClose={this.closeDropdown}\n          anchorEl={anchorEl}\n          PaperProps={{\n            style: {\n              width: width || 'auto',\n            },\n          }}\n          {...MenuProps}\n        // style={hide ? {display: 'none'} : null}\n        >\n          {\n            // @@TODO: use a better alternative. This one overrides onMouseUp.\n            this.props.closeOnItemClick\n              ? React.Children.map(children, child => {\n                if (!child) {\n                  return;\n                }\n                return React.cloneElement(child as any, { onMouseUp: this.closeDropdown });\n              })\n              : children\n          }\n        </Menu>\n      </div>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<IDropdownContainerComponentProps>>(\n  withStyles(styles),\n)(DropdownContainer);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  d: \"M16.67 13.13C18.04 14.06 19 15.32 19 17v3h3c.55 0 1-.45 1-1v-2c0-2.18-3.57-3.47-6.33-3.87z\",\n  clipRule: \"evenodd\"\n}), _react.default.createElement(\"circle\", {\n  cx: \"9\",\n  cy: \"8\",\n  r: \"4\",\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\"\n}), _react.default.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  d: \"M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4c-.47 0-.91.1-1.33.24C14.5 5.27 15 6.58 15 8s-.5 2.73-1.33 3.76c.42.14.86.24 1.33.24zM9 13c-2.67 0-8 1.34-8 4v2c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-2c0-2.66-5.33-4-8-4z\",\n  clipRule: \"evenodd\"\n})), 'PeopleAltRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\"\n}), 'Launch');\n\nexports.default = _default;","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\nimport { IDetailedDefaultTypes } from '../../containers/QuickEntry/QuickEntry';\nimport QuickEntry from '../../models/QuickEntry';\nimport { IQuickTextState } from './reducer';\n\nexport default {};\n\nexport enum QuickTextTypes {\n  GET_ALL_QUICK_TEXT = 'GET_ALL_QUICK_TEXT',\n  GET_ALL_QUICK_TEXT_SUCCESS = 'GET_ALL_QUICK_TEXT_SUCCESS',\n  GET_ALL_QUICK_TEXT_FAIL = 'GET_ALL_QUICK_TEXT_FAIL',\n  ADD_QUICK_TEXT = 'ADD_QUICK_TEXT',\n  ADD_QUICK_TEXT_SUCCESS = 'ADD_QUICK_TEXT_SUCCESS',\n  EDIT_QUICK_TEXT = 'EDIT_QUICK_TEXT',\n  DELETE_QUICK_TEXT = 'DELETE_QUICK_TEXT',\n  DELETE_QUICK_TEXT_SUCCESS = 'DELETE_QUICK_TEXT_SUCCESS',\n  SET_DEFAULT_QUICK_TEXT_FOR_TYPE = 'SET_DEFAULT_QUICK_TEXT_FOR_TYPE',\n  GET_DEFAULT_QUICK_TEXT_BY_TYPE = 'GET_DEFAULT_QUICK_TEXT_BY_TYPE',\n  GET_DEFAULT_QUICK_TEXT_BY_TYPE_SUCCESS = 'GET_DEFAULT_QUICK_TEXT_BY_TYPE_SUCCESS',\n  RESET_QUICK_TEXT_STATE = 'RESET_QUICK_TEXT_STATE',\n  RESET_ALL_SELECTED_DEFAULT_TERM = 'RESET_ALL_SELECTED_DEFAULT_TERM',\n  RESET_ALL_SELECTED_DEFAULT_TERM_SUCCESS = 'RESET_ALL_SELECTED_DEFAULT_TERM_SUCCESS',\n  RESET_ALL_SELECTED_DEFAULT_TERM_FAIL = 'RESET_ALL_SELECTED_DEFAULT_TERM_FAIL',\n}\n\n// TODO: add models to replace interfaces declared here\n\nexport class GetAllQuickText implements IAction {\n  public readonly type = QuickTextTypes.GET_ALL_QUICK_TEXT;\n}\n\nexport class GetAllQuickTextSuccess implements IAction {\n  public readonly type = QuickTextTypes.GET_ALL_QUICK_TEXT_SUCCESS;\n\n  constructor(\n    public payload?: List<IMap<any>>\n  ) {\n  }\n}\n\nexport class GetAllQuickTextFail implements IAction {\n  public readonly type = QuickTextTypes.GET_ALL_QUICK_TEXT_FAIL;\n\n  constructor(\n    public payload?: {\n      error: any\n    }\n  ) {\n  }\n}\n\nexport class AddQuickText implements IAction {\n  public readonly type = QuickTextTypes.ADD_QUICK_TEXT;\n\n  constructor(\n    public payload: {\n      quickText: any;\n      defaultTypes: string[];\n    }\n  ) {}\n}\n\nexport class AddQuickTextSuccess implements IAction {\n  public readonly type = QuickTextTypes.ADD_QUICK_TEXT_SUCCESS;\n\n  constructor(\n    public payload: boolean\n  ) {}\n}\n\nexport class EditQuickText implements IAction {\n  public readonly type = QuickTextTypes.EDIT_QUICK_TEXT;\n\n  constructor(\n    public payload: {\n      quickText: any;\n      defaultTypes: List<IMap<IDetailedDefaultTypes>>;\n    }\n  ) {}\n}\n\nexport class DeleteQuickText implements IAction {\n  public readonly type = QuickTextTypes.DELETE_QUICK_TEXT;\n\n  constructor(\n    public payload: any\n  ) {}\n}\n\nexport class DeleteQuickTextSuccess implements IAction {\n  public readonly type = QuickTextTypes.DELETE_QUICK_TEXT_SUCCESS;\n\n  constructor(\n    public payload: any\n  ) {}\n}\n\n  export class SetDefaultQuickTextForTypeAction implements IAction {\n    public readonly type = QuickTextTypes.SET_DEFAULT_QUICK_TEXT_FOR_TYPE;\n\n    constructor(\n      public payload: {\n        type: string;\n        quickTextId: number;\n      }\n    ) {}\n  }\n\n  export class GetDefaultQuickTextByTypeAction implements IAction {\n    public readonly type = QuickTextTypes.GET_DEFAULT_QUICK_TEXT_BY_TYPE;\n\n    constructor(\n      public payload: {\n        type: string;\n      }\n    ) {}\n  }\n  export class GetDefaultQuickTextByTypeSuccessAction implements IAction {\n    public readonly type = QuickTextTypes.GET_DEFAULT_QUICK_TEXT_BY_TYPE_SUCCESS;\n\n    constructor(\n      public payload: {\n        type: string;\n        quickText: IMap<QuickEntry>;\n      }\n    ) {}\n  }\n\n  export class ResetQuickTextStateAction implements IAction {\n    public readonly type = QuickTextTypes.RESET_QUICK_TEXT_STATE;\n    constructor(\n      public payload: keyof IQuickTextState\n    ) {}\n  }\n\n  export class ResetAllSelectedDefaultTermAction implements IAction {\n    public readonly type = QuickTextTypes.RESET_ALL_SELECTED_DEFAULT_TERM;\n  }","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","import * as React from 'react';\nimport {\n  Grid,\n  InputAdornment,\n  List as MuiList,\n  ListItem,\n  ListItemSecondaryAction,\n  ListItemText,\n  MenuItem,\n  Paper,\n  Select,\n  TextField,\n  Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { StyleRules, } from '@material-ui/core/styles';\nimport { compose, } from 'redux';\nimport { reduxForm, } from 'redux-form/immutable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { InjectedFormProps, } from 'redux-form';\nimport {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { SetFormValuesAction } from '../../CreateNewMasterFormStepper/actions';\nimport { isEmail } from 'ats-utils/src';\n\ntype Permission = 'owner';\n\ninterface ICollaborator {\n  email: string;\n  id: number;\n  quotePermission: Permission;\n  specPermission: Permission;\n  projectId: number;\n}\n\ninterface IContributorsComponentProps {\n  onSubmit: (values: any) => void;\n  formValues: Map<string, any>;\n  onChange?: (values: any) => void;\n}\n\ninterface IContributors extends IContributorsComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\n\nexport const FORM_NAME = 'NewMasterCollaboratorsForm';\n\ntype ContributorsType =\n  IContributors\n  & InjectedFormProps\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  tableContainer: {\n    paddingBottom: theme.spacing(4),\n  },\n  formContainer: {\n    margin: `${theme.spacing(2)}px 0`,\n    width: '100%'\n  },\n  autoComplete: {\n    width: '100%'\n  }\n});\n\n\nclass NewMasterCollaboratorsForm extends React.Component<ContributorsType> {\n\n  public getCollaboratorsEmail = () => {\n    const {formValues} = this.props;\n    const collaborators = formValues.getIn(['collaborators'], List());\n    if (collaborators.size !== 0) {\n      return collaborators.map(collaborator => collaborator.get('email')).toArray();\n    } else {\n      return [];\n    }\n  }\n\n  public handleSelectChange = (email: string) => (event: React.ChangeEvent<{ value: string }>) => {\n    const {dispatch, onChange, formValues} = this.props;\n    if (event.target.value === 'remove') {\n      const collaborators = formValues.get('collaborators', List());\n      const filteredCollaborators = collaborators.filter((data) => data.get('email') !== email);\n      onChange?.(Map().set('collaborators', filteredCollaborators));\n      dispatch(new SetFormValuesAction(formValues.set('collaborators', filteredCollaborators)));\n    }\n  }\n  public isValidate = () => this.getCollaboratorsEmail().every(email => isEmail(email));\n  public onSubmit = (values) => {\n    const {onSubmit} = this.props;\n    if (this.isValidate()) {\n      onSubmit(values);\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      children,\n      classes,\n      formValues,\n      dispatch,\n      onChange,\n    } = this.props;\n\n    const collaborators: List<IMap<ICollaborator>> = formValues.getIn(['collaborators'], List());\n    return (\n      <form\n        onSubmit={handleSubmit(this.onSubmit)}\n        className={classes.formContainer}\n      >\n        <Grid\n          container={true}\n          spacing={2}\n        >\n          <Autocomplete\n            multiple={true}\n            freeSolo={true}\n            className={classes.autoComplete}\n            value={this.getCollaboratorsEmail()}\n            onChange={(event, value) => {\n              const immutableCollaborators = fromJS(value.map(option => {\n                return ({\n                  email: option,\n                  specPermission: 'owner'\n                });\n              }));\n              onChange?.(Map().set('collaborators', immutableCollaborators));\n              dispatch(new SetFormValuesAction(formValues.set('collaborators', immutableCollaborators)));\n            }}\n            renderInput={(params) => {\n              return (\n                <TextField\n                  {...params}\n                  variant='standard'\n                  label='Add Collaborators'\n                  placeholder='Press enter to add'\n                  helperText='Enter Email'\n                  error={!this.isValidate()}\n                  fullWidth={true}\n                  InputProps={{\n                    ...params.InputProps,\n                    startAdornment: (\n                      <>\n                        <InputAdornment position='start'>\n                          <i className='fas fa-address-card' style={{color: '#757575'}}/>\n                        </InputAdornment>\n                        {params.InputProps.startAdornment}\n                      </>\n                    )\n                  }}\n                />\n              );\n            }}\n          />\n\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.tableContainer}\n          >\n            {collaborators.size !== 0 ?\n              <Paper elevation={3}>\n                <MuiList>\n                  {collaborators.map((data: IMap<ICollaborator>) => {\n                    const email: string = data.get('email');\n                    const specPermission: Permission = data.get('specPermission');\n                    return (\n                      <ListItem key={email}>\n                        <ListItemText>{email}</ListItemText>\n                        <ListItemSecondaryAction>\n                          <Select\n                            value={specPermission}\n                            onChange={this.handleSelectChange(email)}\n                          >\n                            <MenuItem value='owner'>\n                              owner\n                            </MenuItem>\n                            <MenuItem value='remove'>Remove</MenuItem>\n                          </Select>\n                        </ListItemSecondaryAction>\n                      </ListItem>\n                    );\n                  })}\n                </MuiList>\n              </Paper>\n              : null\n            }\n          </Grid>\n        </Grid>\n        {/* back/finish buttons */}\n        {children}\n      </form>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<IContributorsComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  reduxForm({\n    form: FORM_NAME,\n    touchOnChange: true,\n    enableReinitialize: true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: true,\n  }),\n)(NewMasterCollaboratorsForm);\n","import * as React from 'react';\nimport { Dispatch, compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle, Grid, ListItem, Theme, Typography, WithStyles, withStyles, MenuItem } from '@material-ui/core';\nimport { StyleRules, WithTheme } from '@material-ui/styles';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport FieldReactSelect, { IFieldReactSelectComponentProps, fieldReactSelectStyles } from '../../../components/FieldReactSelect';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport { BaseFieldProps, InjectedFormProps, change } from 'redux-form';\nimport { List, fromJS } from 'immutable';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { push } from 'connected-react-router';\nimport { PIM_INTEGRATION_MAPPING_PATH } from '../../../constants';\nimport classnames from 'classnames';\nimport IntegrationUpdateCompare from './IntegrationUpdateCompare';\nimport PimIntegrationMappingTable from '../../../pages/PimIntegrationMapperPage/PimIntegrationMappingTable';\nimport { SearchPimIntegrationSeriesAction, SearchPimIntegrationSeriesSucceededAction } from '../../../modules/PimModule/actions';\nimport { makeSelectIsSearchingPimIntegrationSeries, makeSelectPimIntegrationSeries } from '../../../modules/PimModule/selectors';\nimport { debounce } from 'lodash';\n\nexport const PIM_INTEGRATION_DIALOG_FORM = 'IntegrationDialogForm';\n\nexport enum PimIntegrationType {\n  WATTS_ODS = 'watts-ods',\n  WATTS_SALSIFY = 'watts-salsify',\n}\n\nexport const PimIntegrationOptions = [\n  {value: PimIntegrationType.WATTS_ODS, label: 'Watts ODS'},  // currently only 1 integration available\n  {value: PimIntegrationType.WATTS_SALSIFY, label: 'Watts Salsify'},\n];\n\nconst integrationTypeSearchVerbiageMap = {\n  [PimIntegrationType.WATTS_ODS]: {\n    label: 'pimIntegrationDialog.seriesIdLabel',\n    placeholder: 'pimIntegrationDialog.searchSeries',\n    displayKey: 'id',\n  },\n  [PimIntegrationType.WATTS_SALSIFY]: {\n    label: 'pimIntegrationDialog.seriesNameLabel',\n    placeholder: 'pimIntegrationDialog.searchSeriesNamePlaceholder',\n    displayKey: 'name',\n  },\n};\n\ninterface IPimIntegrationDialogComponentProps {\n  open: boolean;\n  isUpdate: boolean;\n  togglePimIntegrationDialog: () => void;\n}\n\ninterface IPimIntegrationDialogProps extends IPimIntegrationDialogComponentProps {\n  formValues: any;\n  pimIntegrationSeries: List<Map<string, any>>;\n  isSearchingSeries: boolean;\n  dispatch: Dispatch;\n  searchPimIntegrationSeries: (integrationType: PimIntegrationType, searchTerm: string) => void;\n}\n\ntype FeaturesDialogProps = IPimIntegrationDialogProps & InjectedFormProps & WithStyles & WithTheme<Theme> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  dialog: {\n    padding: `${theme.spacing()}px ${theme.spacing(0.5)}px`,\n  },\n  wideDialog: {\n    minWidth: 1100,\n  },\n  dialogActions: {\n    paddingRight: theme.spacing(2),\n  }\n});\n\nconst PimIntegrationDialog: React.FC<FeaturesDialogProps> = (props): JSX.Element => {\n  const {\n    open,\n    isUpdate,\n    togglePimIntegrationDialog,\n    formValues,\n    pimIntegrationSeries,\n    isSearchingSeries,\n    reset,\n    handleSubmit,\n    dispatch,\n    searchPimIntegrationSeries,\n    classes,\n    theme,\n    t,\n  } = props;\n\n  const [ integrationInputValue, setIntegrationInputValue ] = React.useState<string>('');\n  const [ activeStep, setActiveStep ] = React.useState<number>(0);\n\n  const selectedIntegration = formValues && formValues.get('integration');\n  const selectedIntegratingSeries = formValues && formValues.get('series');\n\n  React.useEffect(() => {\n    if (open) {\n      setActiveStep(0);\n    }\n  }, [open]);\n\n  const handleClose = () => {\n    togglePimIntegrationDialog();\n    handleReset();\n  };\n\n  const handleReset = () => {\n    reset();\n  };\n\n  const mapPimIntegration = () => {\n    const integrationType = formValues.getIn(['integration', 'value']);\n    const integrationSeriesId = formValues.getIn(['series', 'id']);\n    dispatch(push(`${PIM_INTEGRATION_MAPPING_PATH}/${integrationType}/${integrationSeriesId}`));\n    handleClose();\n  };\n\n  // future implementation\n  const updateSeriesWithPimIntegration = (value) => {\n    // console.log('update integrating series to original series', value);\n  };\n\n  const searchSeries = debounce((searchTerm: string) => {\n    const integrationType = formValues.getIn(['integration', 'value']);\n    searchPimIntegrationSeries(integrationType, searchTerm);\n  }, 500);\n\n  const onIntegrationChange = (option: any) => {\n    // when change integration, reset series\n    dispatch(new SearchPimIntegrationSeriesSucceededAction({integrationSeries: List()}));\n    dispatch(change(PIM_INTEGRATION_DIALOG_FORM, 'series', null));\n  };\n\n  return (\n    <Dialog\n      open={open}\n      onClose={handleClose}\n      aria-labelledby='map-pim-integration-dialog'\n      fullWidth={true}\n      scroll='body'\n      classes={{\n        paper: classnames(\n          classes.dialog,\n          {[classes.wideDialog]: isUpdate}\n        )\n      }}\n    >\n      <form onSubmit={handleSubmit(isUpdate ? updateSeriesWithPimIntegration : mapPimIntegration)}>\n        <DialogTitle id='map-pim-integration-dialog-title' disableTypography={true}>\n          <Typography variant='h6'>{isUpdate ? t('pimIntegrationDialog.titleUpdate') : t('pimIntegrationDialog.titleCreate')}</Typography>\n          {activeStep === 0\n            ? <Typography variant='caption'>{t('pimIntegrationDialog.subtitle')}</Typography>\n            : <Grid container={true} direction='column' style={{marginTop: 12}}>\n                <Typography variant='subtitle2'>{t('pimIntegrationDialog.pimIntegration')}</Typography>\n                <Typography variant='subtitle2' color='textSecondary' style={{marginTop: 4}}>{selectedIntegration?.label}</Typography>\n              </Grid>\n          }\n        </DialogTitle>\n        <DialogContent>\n          {activeStep === 0\n          ? <Grid container={true} alignItems='center'>\n              <Grid xs={12} item={true}>\n                <Typography variant='caption' color='textPrimary'>\n                  {t('pimIntegrationDialog.integrationLabel')}\n                </Typography>\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='integration'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: PimIntegrationOptions,\n                      getOptionLabel: (option) => option ? option.label : '',\n                      renderOption: (option) => (\n                        <ListItem disableGutters={false}>\n                          {option.label}\n                        </ListItem>\n                      ),\n                      placeholder: t('pimIntegrationDialog.selectIntegration'),\n                      inputValue: integrationInputValue,\n                      onChange: onIntegrationChange,\n                      onInputChange: (event: object, val: string) => setIntegrationInputValue(val),\n                    },\n                    formControlProps: {\n                      fullWidth: true,\n                    },\n                  }}\n                />\n              </Grid>\n              {\n                selectedIntegration && (\n                  <Grid xs={12} item={true}>\n                    <Typography variant='caption' color='textPrimary'>\n                      {t(integrationTypeSearchVerbiageMap[selectedIntegration.value].label)}\n                    </Typography>\n                    <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                      name='series'\n                      component={FieldReactSelect}\n                      inputProps={{\n                        open: true,\n                        placeholder: t(integrationTypeSearchVerbiageMap[selectedIntegration.value].placeholder),\n                        className: classes.searchPlaceHolder,\n                        isDisabled: !Boolean(selectedIntegration),\n                        options: pimIntegrationSeries,\n                        getOptionValue: (option) => option.get('id'),\n                        getOptionLabel: (option) => option.get(integrationTypeSearchVerbiageMap[selectedIntegration.value].displayKey),\n                        components: {\n                          Option: optionProps => {\n                            const { data } = optionProps;\n                            const displayValue = data.get(integrationTypeSearchVerbiageMap[selectedIntegration.value].displayKey);\n                            // const optionName = data.get('name');\n                            // const optionImage = data.get('imageUrl');\n                            // const optionManufacturer = data.get('manufacturer');\n                            return (\n                              <MenuItem selected={optionProps.isFocused} {...optionProps.innerProps}>\n                                <Grid container={true} alignItems='center'>\n                                  {/* we can petentially display more info but as of now only accuracy field is series id */}\n                                  {/* <Grid item={true} xs={2}>\n                                    <img src={optionImage} alt={`${optionName} image`} style={{width: 50, height: 50}}/>\n                                  </Grid> */}\n                                  <Grid container={true} item={true} xs={10} direction='column' alignItems='flex-start'>\n                                    <Typography variant='body1' color='textPrimary'>{displayValue}</Typography>\n                                    {/* <Typography variant='caption' color='textSecondary'>{optionName}</Typography>\n                                    <Typography variant='caption' color='textSecondary'>{optionManufacturer}</Typography> */}\n                                  </Grid>\n                                </Grid>\n                              </MenuItem>\n                            );\n                          },\n                          DropdownIndicator: option => <SearchIcon style={{marginRight: 4, color: !Boolean(selectedIntegration) ? theme.palette.grey[400] : theme.palette.grey[700]}}/>\n                        },\n                        styles: fieldReactSelectStyles(theme),\n                        menuPosition: 'fixed',\n                        menuShouldScrollIntoView: false,\n                        onInputChange: ( val: string ) => {\n                          if (val) {\n                            searchSeries(val);\n                          }\n                        },\n                        noOptionsMessage: () => (\n                          isSearchingSeries\n                            ? <Grid>\n                                <Grid>\n                                  <CircularProgress size='1rem'/>\n                                </Grid>\n                                <Grid>\n                                  <Typography>{t('generalLoading.loading')}</Typography>\n                                </Grid>\n                              </Grid>\n                            : <Grid>\n                                <Typography>\n                                  {t('pimIntegrationDialog.noResults')}\n                                </Typography>\n                              </Grid>\n                        ),\n                      }}\n                      formControlProps={{\n                        fullWidth: true\n                      }}\n                    />\n                  </Grid>\n                )\n              }\n            </Grid>\n          : null // future implementation\n            // activeStep === 1\n            // ? <IntegrationUpdateCompare\n            //     integratingSeries={selectedIntegratingSeries}\n            //   />\n            // : <PimIntegrationMappingTable filterSearchInput='' />\n          }\n        </DialogContent>\n        <DialogActions className={classes.dialogActions}>\n          <Button\n            color='primary'\n            onClick={handleClose}\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          {activeStep === 0\n          ? <Button\n              color='primary'\n              onClick={handleReset}\n            >\n              {t('formButtons.reset')}\n            </Button>\n          : <Button\n              color='primary'\n              onClick={() => setActiveStep(activeStep - 1)}\n            >\n              {t('formButtons.back')}\n            </Button>\n          }\n          {/* {isUpdate // future implementation\n            ? <>\n              {activeStep !== 2 && <Button\n                color='primary'\n                disabled={!selectedIntegration || !selectedIntegratingSeries}\n                onClick={(e) => {\n                  if (activeStep === 0) {\n                    console.log('get integration series from BE and map/compare to original series');\n                  }\n                  setActiveStep(activeStep + 1);\n                }}\n              >\n                {t('formButtons.next')}\n              </Button>}\n              {activeStep === 2 && <Button\n                color='primary'\n                type='submit'\n              >\n                {t('formButtons.complete')}\n              </Button>}\n              </> */}\n              <Button\n                color='primary'\n                type='submit'\n                disabled={!selectedIntegration || !selectedIntegratingSeries}\n                >\n                {t('pimIntegrationDialog.mapEntries')}\n              </Button>\n          {/* } */}\n        </DialogActions>\n      </form>\n    </Dialog>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectPimIntegrationSeries = makeSelectPimIntegrationSeries();\n  const selectIsSearcingSeries = makeSelectIsSearchingPimIntegrationSeries();\n\n  const mapStateToProps = (state: any) => {\n    return ({\n      formValues: getFormValues(PIM_INTEGRATION_DIALOG_FORM)(state),\n      pimIntegrationSeries: selectPimIntegrationSeries(state),\n      isSearchingSeries: selectIsSearcingSeries(state),\n    });\n  };\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => {\n  return {\n    dispatch,\n    searchPimIntegrationSeries: (integrationType: PimIntegrationType, searchTerm: string) => {\n      dispatch(new SearchPimIntegrationSeriesAction({ integrationType, searchTerm }));\n    }\n  };\n};\n\nexport default compose<React.FC<IPimIntegrationDialogComponentProps>>(\n  connect(makeMapStateToProps, mapDispatchToProps),\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  reduxForm({\n    form: PIM_INTEGRATION_DIALOG_FORM,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(PimIntegrationDialog);\n\n","import { toHexString } from \"./strings\";\n/**\n * Encodes a string to UTF-8.\n *\n * @param input The string to be encoded.\n * @param byteOrderMark Whether or not a byte order marker (BOM) should be added\n *                      to the start of the encoding. (default `true`)\n * @returns A Uint8Array containing the UTF-8 encoding of the input string.\n *\n * -----------------------------------------------------------------------------\n *\n * JavaScript strings are composed of Unicode code points. Code points are\n * integers in the range 0 to 1,114,111 (0x10FFFF). When serializing a string,\n * it must be encoded as a sequence of words. A word is typically 8, 16, or 32\n * bytes in size. As such, Unicode defines three encoding forms: UTF-8, UTF-16,\n * and UTF-32. These encoding forms are described in the Unicode standard [1].\n * This function implements the UTF-8 encoding form.\n *\n * -----------------------------------------------------------------------------\n *\n * In UTF-8, each code point is mapped to a sequence of 1, 2, 3, or 4 bytes.\n * Note that the logic which defines this mapping is slightly convoluted, and\n * not as straightforward as the mapping logic for UTF-16 or UTF-32. The UTF-8\n * mapping logic is as follows [2]:\n *\n * • If a code point is in the range U+0000..U+007F, then view it as a 7-bit\n *   integer: 0bxxxxxxx. Map the code point to 1 byte with the first high order\n *   bit set to 0:\n *\n *       b1=0b0xxxxxxx\n *\n * • If a code point is in the range U+0080..U+07FF, then view it as an 11-bit\n *   integer: 0byyyyyxxxxxx. Map the code point to 2 bytes with the first 5 bits\n *   of the code point stored in the first byte, and the last 6 bits stored in\n *   the second byte:\n *\n *       b1=0b110yyyyy    b2=0b10xxxxxx\n *\n * • If a code point is in the range U+0800..U+FFFF, then view it as a 16-bit\n *   integer, 0bzzzzyyyyyyxxxxxx. Map the code point to 3 bytes with the first\n *   4 bits stored in the first byte, the next 6 bits stored in the second byte,\n *   and the last 6 bits in the third byte:\n *\n *       b1=0b1110zzzz    b2=0b10yyyyyy    b3=0b10xxxxxx\n *\n * • If a code point is in the range U+10000...U+10FFFF, then view it as a\n *   21-bit integer, 0bvvvzzzzzzyyyyyyxxxxxx. Map the code point to 4 bytes with\n *   the first 3 bits stored in the first byte, the next 6 bits stored in the\n *   second byte, the next 6 bits stored in the third byte, and the last 6 bits\n *   stored in the fourth byte:\n *\n *       b1=0b11110xxx    b2=0b10zzzzzz    b3=0b10yyyyyy    b4=0b10xxxxxx\n *\n * -----------------------------------------------------------------------------\n *\n * It is important to note, when iterating through the code points of a string\n * in JavaScript, that if a character is encoded as a surrogate pair it will\n * increase the string's length by 2 instead of 1 [4]. For example:\n *\n * ```\n * > 'a'.length\n * 1\n * > '💩'.length\n * 2\n * > '語'.length\n * 1\n * > 'a💩語'.length\n * 4\n * ```\n *\n * The results of the above example are explained by the fact that the\n * characters 'a' and '語' are not represented by surrogate pairs, but '💩' is.\n *\n * Because of this idiosyncrasy in JavaScript's string implementation and APIs,\n * we must \"jump\" an extra index after encoding a character as a surrogate\n * pair. In practice, this means we must increment the index of our for loop by\n * 2 if we encode a surrogate pair, and 1 in all other cases.\n *\n * -----------------------------------------------------------------------------\n *\n * References:\n *   - [1] https://www.unicode.org/versions/Unicode12.0.0/UnicodeStandard-12.0.pdf\n *         3.9  Unicode Encoding Forms - UTF-8\n *   - [2] http://www.herongyang.com/Unicode/UTF-8-UTF-8-Encoding.html\n *   - [3] http://www.herongyang.com/Unicode/UTF-8-UTF-8-Encoding-Algorithm.html\n *   - [4] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length#Description\n *\n */\nexport var utf8Encode = function (input, byteOrderMark) {\n    if (byteOrderMark === void 0) { byteOrderMark = true; }\n    var encoded = [];\n    if (byteOrderMark)\n        encoded.push(0xef, 0xbb, 0xbf);\n    for (var idx = 0, len = input.length; idx < len;) {\n        var codePoint = input.codePointAt(idx);\n        // One byte encoding\n        if (codePoint < 0x80) {\n            var byte1 = codePoint & 0x7f;\n            encoded.push(byte1);\n            idx += 1;\n        }\n        // Two byte encoding\n        else if (codePoint < 0x0800) {\n            var byte1 = ((codePoint >> 6) & 0x1f) | 0xc0;\n            var byte2 = (codePoint & 0x3f) | 0x80;\n            encoded.push(byte1, byte2);\n            idx += 1;\n        }\n        // Three byte encoding\n        else if (codePoint < 0x010000) {\n            var byte1 = ((codePoint >> 12) & 0x0f) | 0xe0;\n            var byte2 = ((codePoint >> 6) & 0x3f) | 0x80;\n            var byte3 = (codePoint & 0x3f) | 0x80;\n            encoded.push(byte1, byte2, byte3);\n            idx += 1;\n        }\n        // Four byte encoding (surrogate pair)\n        else if (codePoint < 0x110000) {\n            var byte1 = ((codePoint >> 18) & 0x07) | 0xf0;\n            var byte2 = ((codePoint >> 12) & 0x3f) | 0x80;\n            var byte3 = ((codePoint >> 6) & 0x3f) | 0x80;\n            var byte4 = ((codePoint >> 0) & 0x3f) | 0x80;\n            encoded.push(byte1, byte2, byte3, byte4);\n            idx += 2;\n        }\n        // Should never reach this case\n        else\n            throw new Error(\"Invalid code point: 0x\" + toHexString(codePoint));\n    }\n    return new Uint8Array(encoded);\n};\n/**\n * Encodes a string to UTF-16.\n *\n * @param input The string to be encoded.\n * @param byteOrderMark Whether or not a byte order marker (BOM) should be added\n *                      to the start of the encoding. (default `true`)\n * @returns A Uint16Array containing the UTF-16 encoding of the input string.\n *\n * -----------------------------------------------------------------------------\n *\n * JavaScript strings are composed of Unicode code points. Code points are\n * integers in the range 0 to 1,114,111 (0x10FFFF). When serializing a string,\n * it must be encoded as a sequence of words. A word is typically 8, 16, or 32\n * bytes in size. As such, Unicode defines three encoding forms: UTF-8, UTF-16,\n * and UTF-32. These encoding forms are described in the Unicode standard [1].\n * This function implements the UTF-16 encoding form.\n *\n * -----------------------------------------------------------------------------\n *\n * In UTF-16, each code point is mapped to one or two 16-bit integers. The\n * UTF-16 mapping logic is as follows [2]:\n *\n * • If a code point is in the range U+0000..U+FFFF, then map the code point to\n *   a 16-bit integer with the most significant byte first.\n *\n * • If a code point is in the range U+10000..U+10000, then map the code point\n *   to two 16-bit integers. The first integer should contain the high surrogate\n *   and the second integer should contain the low surrogate. Both surrogates\n *   should be written with the most significant byte first.\n *\n * -----------------------------------------------------------------------------\n *\n * It is important to note, when iterating through the code points of a string\n * in JavaScript, that if a character is encoded as a surrogate pair it will\n * increase the string's length by 2 instead of 1 [4]. For example:\n *\n * ```\n * > 'a'.length\n * 1\n * > '💩'.length\n * 2\n * > '語'.length\n * 1\n * > 'a💩語'.length\n * 4\n * ```\n *\n * The results of the above example are explained by the fact that the\n * characters 'a' and '語' are not represented by surrogate pairs, but '💩' is.\n *\n * Because of this idiosyncrasy in JavaScript's string implementation and APIs,\n * we must \"jump\" an extra index after encoding a character as a surrogate\n * pair. In practice, this means we must increment the index of our for loop by\n * 2 if we encode a surrogate pair, and 1 in all other cases.\n *\n * -----------------------------------------------------------------------------\n *\n * References:\n *   - [1] https://www.unicode.org/versions/Unicode12.0.0/UnicodeStandard-12.0.pdf\n *         3.9  Unicode Encoding Forms - UTF-8\n *   - [2] http://www.herongyang.com/Unicode/UTF-16-UTF-16-Encoding.html\n *   - [3] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length#Description\n *\n */\nexport var utf16Encode = function (input, byteOrderMark) {\n    if (byteOrderMark === void 0) { byteOrderMark = true; }\n    var encoded = [];\n    if (byteOrderMark)\n        encoded.push(0xfeff);\n    for (var idx = 0, len = input.length; idx < len;) {\n        var codePoint = input.codePointAt(idx);\n        // Two byte encoding\n        if (codePoint < 0x010000) {\n            encoded.push(codePoint);\n            idx += 1;\n        }\n        // Four byte encoding (surrogate pair)\n        else if (codePoint < 0x110000) {\n            encoded.push(highSurrogate(codePoint), lowSurrogate(codePoint));\n            idx += 2;\n        }\n        // Should never reach this case\n        else\n            throw new Error(\"Invalid code point: 0x\" + toHexString(codePoint));\n    }\n    return new Uint16Array(encoded);\n};\n/**\n * Returns `true` if the `codePoint` is within the\n * Basic Multilingual Plane (BMP). Code points inside the BMP are not encoded\n * with surrogate pairs.\n * @param codePoint The code point to be evaluated.\n *\n * Reference: https://en.wikipedia.org/wiki/UTF-16#Description\n */\nexport var isWithinBMP = function (codePoint) {\n    return codePoint >= 0 && codePoint <= 0xffff;\n};\n/**\n * Returns `true` if the given `codePoint` is valid and must be represented\n * with a surrogate pair when encoded.\n * @param codePoint The code point to be evaluated.\n *\n * Reference: https://en.wikipedia.org/wiki/UTF-16#Description\n */\nexport var hasSurrogates = function (codePoint) {\n    return codePoint >= 0x010000 && codePoint <= 0x10ffff;\n};\n// From Unicode 3.0 spec, section 3.7:\n//   http://unicode.org/versions/Unicode3.0.0/ch03.pdf\nexport var highSurrogate = function (codePoint) {\n    return Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;\n};\n// From Unicode 3.0 spec, section 3.7:\n//   http://unicode.org/versions/Unicode3.0.0/ch03.pdf\nexport var lowSurrogate = function (codePoint) {\n    return ((codePoint - 0x10000) % 0x400) + 0xdc00;\n};\nvar ByteOrder;\n(function (ByteOrder) {\n    ByteOrder[\"BigEndian\"] = \"BigEndian\";\n    ByteOrder[\"LittleEndian\"] = \"LittleEndian\";\n})(ByteOrder || (ByteOrder = {}));\nvar REPLACEMENT = '�'.codePointAt(0);\n/**\n * Decodes a Uint8Array of data to a string using UTF-16.\n *\n * Note that this function attempts to recover from erronous input by\n * inserting the replacement character (�) to mark invalid code points\n * and surrogate pairs.\n *\n * @param input A Uint8Array containing UTF-16 encoded data\n * @param byteOrderMark Whether or not a byte order marker (BOM) should be read\n *                      at the start of the encoding. (default `true`)\n * @returns The decoded string.\n */\nexport var utf16Decode = function (input, byteOrderMark) {\n    if (byteOrderMark === void 0) { byteOrderMark = true; }\n    // Need at least 2 bytes of data in UTF-16 encodings\n    if (input.length <= 1)\n        return String.fromCodePoint(REPLACEMENT);\n    var byteOrder = byteOrderMark ? readBOM(input) : ByteOrder.BigEndian;\n    // Skip byte order mark if needed\n    var idx = byteOrderMark ? 2 : 0;\n    var codePoints = [];\n    while (input.length - idx >= 2) {\n        var first = decodeValues(input[idx++], input[idx++], byteOrder);\n        if (isHighSurrogate(first)) {\n            if (input.length - idx < 2) {\n                // Need at least 2 bytes left for the low surrogate that is required\n                codePoints.push(REPLACEMENT);\n            }\n            else {\n                var second = decodeValues(input[idx++], input[idx++], byteOrder);\n                if (isLowSurrogate(second)) {\n                    codePoints.push(first, second);\n                }\n                else {\n                    // Low surrogates should always follow high surrogates\n                    codePoints.push(REPLACEMENT);\n                }\n            }\n        }\n        else if (isLowSurrogate(first)) {\n            // High surrogates should always come first since `decodeValues()`\n            // accounts for the byte ordering\n            idx += 2;\n            codePoints.push(REPLACEMENT);\n        }\n        else {\n            codePoints.push(first);\n        }\n    }\n    // There shouldn't be extra byte(s) left over\n    if (idx < input.length)\n        codePoints.push(REPLACEMENT);\n    return String.fromCodePoint.apply(String, codePoints);\n};\n/**\n * Returns `true` if the given `codePoint` is a high surrogate.\n * @param codePoint The code point to be evaluated.\n *\n * Reference: https://en.wikipedia.org/wiki/UTF-16#Description\n */\nvar isHighSurrogate = function (codePoint) {\n    return codePoint >= 0xd800 && codePoint <= 0xdbff;\n};\n/**\n * Returns `true` if the given `codePoint` is a low surrogate.\n * @param codePoint The code point to be evaluated.\n *\n * Reference: https://en.wikipedia.org/wiki/UTF-16#Description\n */\nvar isLowSurrogate = function (codePoint) {\n    return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n};\n/**\n * Decodes the given utf-16 values first and second using the specified\n * byte order.\n * @param first The first byte of the encoding.\n * @param second The second byte of the encoding.\n * @param byteOrder The byte order of the encoding.\n * Reference: https://en.wikipedia.org/wiki/UTF-16#Examples\n */\nvar decodeValues = function (first, second, byteOrder) {\n    // Append the binary representation of the preceding byte by shifting the\n    // first one 8 to the left and than applying a bitwise or-operator to append\n    // the second one.\n    if (byteOrder === ByteOrder.LittleEndian)\n        return (second << 8) | first;\n    if (byteOrder === ByteOrder.BigEndian)\n        return (first << 8) | second;\n    throw new Error(\"Invalid byteOrder: \" + byteOrder);\n};\n/**\n * Returns whether the given array contains a byte order mark for the\n * UTF-16BE or UTF-16LE encoding. If it has neither, BigEndian is assumed.\n *\n * Reference: https://en.wikipedia.org/wiki/Byte_order_mark#UTF-16\n *\n * @param bytes The byte array to be evaluated.\n */\n// prettier-ignore\nvar readBOM = function (bytes) { return (hasUtf16BigEndianBOM(bytes) ? ByteOrder.BigEndian\n    : hasUtf16LittleEndianBOM(bytes) ? ByteOrder.LittleEndian\n        : ByteOrder.BigEndian); };\nvar hasUtf16BigEndianBOM = function (bytes) {\n    return bytes[0] === 0xfe && bytes[1] === 0xff;\n};\nvar hasUtf16LittleEndianBOM = function (bytes) {\n    return bytes[0] === 0xff && bytes[1] === 0xfe;\n};\nexport var hasUtf16BOM = function (bytes) {\n    return hasUtf16BigEndianBOM(bytes) || hasUtf16LittleEndianBOM(bytes);\n};\n//# sourceMappingURL=unicode.js.map","/* eslint-disable max-lines */\nimport type {\n  Attachment,\n  Breadcrumb,\n  CaptureContext,\n  Client,\n  Context,\n  Contexts,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  PropagationContext,\n  RequestSession,\n  Scope as ScopeInterface,\n  ScopeContext,\n  ScopeData,\n  Session,\n  Severity,\n  SeverityLevel,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n  /** Flag if notifying is happening. */\n  protected _notifyingListeners: boolean;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void>;\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n  protected _eventProcessors: EventProcessor[];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[];\n\n  /** User */\n  protected _user: User;\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive };\n\n  /** Extra */\n  protected _extra: Extras;\n\n  /** Contexts */\n  protected _contexts: Contexts;\n\n  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n  protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n  protected _level?: Severity | SeverityLevel;\n\n  /**\n   * Transaction Name\n   */\n  protected _transactionName?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** Request Mode Session Status */\n  protected _requestSession?: RequestSession;\n\n  /** The client on this scope */\n  protected _client?: Client;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @deprecated Use `scope.clone()` and `new Scope()` instead.\n   */\n  public static clone(scope?: Scope): Scope {\n    return scope ? scope.clone() : new Scope();\n  }\n\n  /**\n   * Clone this scope instance.\n   */\n  public clone(): Scope {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._span = this._span;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n\n    return newScope;\n  }\n\n  /** Update the client on the scope. */\n  public setClient(client: Client | undefined): void {\n    this._client = client;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   *\n   * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n   */\n  public getClient(): Client | undefined {\n    return this._client;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): this {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      segment: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getRequestSession(): RequestSession | undefined {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setRequestSession(requestSession?: RequestSession): this {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel,\n  ): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope for future events.\n   */\n  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the Span on the scope.\n   * @param span Span\n   * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Returns the `Span` if there is one.\n   * @deprecated Use `getActiveSpan()` instead.\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * Returns the `Transaction` attached to the scope (if there is one).\n   * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n   */\n  public getTransaction(): Transaction | undefined {\n    // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this._span;\n    // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n    // Also, this method will be removed anyway.\n    // eslint-disable-next-line deprecation/deprecation\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    if (scopeToMerge instanceof Scope) {\n      const scopeData = scopeToMerge.getScopeData();\n\n      this._tags = { ...this._tags, ...scopeData.tags };\n      this._extra = { ...this._extra, ...scopeData.extra };\n      this._contexts = { ...this._contexts, ...scopeData.contexts };\n      if (scopeData.user && Object.keys(scopeData.user).length) {\n        this._user = scopeData.user;\n      }\n      if (scopeData.level) {\n        this._level = scopeData.level;\n      }\n      if (scopeData.fingerprint.length) {\n        this._fingerprint = scopeData.fingerprint;\n      }\n      if (scopeToMerge.getRequestSession()) {\n        this._requestSession = scopeToMerge.getRequestSession();\n      }\n      if (scopeData.propagationContext) {\n        this._propagationContext = scopeData.propagationContext;\n      }\n    } else if (isPlainObject(scopeToMerge)) {\n      const scopeContext = captureContext as ScopeContext;\n      this._tags = { ...this._tags, ...scopeContext.tags };\n      this._extra = { ...this._extra, ...scopeContext.extra };\n      this._contexts = { ...this._contexts, ...scopeContext.contexts };\n      if (scopeContext.user) {\n        this._user = scopeContext.user;\n      }\n      if (scopeContext.level) {\n        this._level = scopeContext.level;\n      }\n      if (scopeContext.fingerprint) {\n        this._fingerprint = scopeContext.fingerprint;\n      }\n      if (scopeContext.requestSession) {\n        this._requestSession = scopeContext.requestSession;\n      }\n      if (scopeContext.propagationContext) {\n        this._propagationContext = scopeContext.propagationContext;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clear(): this {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `getScopeData()` instead.\n   */\n  public getAttachments(): Attachment[] {\n    const data = this.getScopeData();\n\n    return data.attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n  public getScopeData(): ScopeData {\n    const {\n      _breadcrumbs,\n      _attachments,\n      _contexts,\n      _tags,\n      _extra,\n      _user,\n      _level,\n      _fingerprint,\n      _eventProcessors,\n      _propagationContext,\n      _sdkProcessingMetadata,\n      _transactionName,\n      _span,\n    } = this;\n\n    return {\n      breadcrumbs: _breadcrumbs,\n      attachments: _attachments,\n      contexts: _contexts,\n      tags: _tags,\n      extra: _extra,\n      user: _user,\n      level: _level,\n      fingerprint: _fingerprint || [],\n      eventProcessors: _eventProcessors,\n      propagationContext: _propagationContext,\n      sdkProcessingMetadata: _sdkProcessingMetadata,\n      transactionName: _transactionName,\n      span: _span,\n    };\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   * @deprecated Use `applyScopeDataToEvent()` directly\n   */\n  public applyToEvent(\n    event: Event,\n    hint: EventHint = {},\n    additionalEventProcessors: EventProcessor[] = [],\n  ): PromiseLike<Event | null> {\n    applyScopeDataToEvent(event, this.getScopeData());\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    const eventProcessors: EventProcessor[] = [\n      ...additionalEventProcessors,\n      // eslint-disable-next-line deprecation/deprecation\n      ...getGlobalEventProcessors(),\n      ...this._eventProcessors,\n    ];\n\n    return notifyEventProcessors(eventProcessors, event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n  public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @param exception The exception to capture.\n   * @param hint Optinal additional data to attach to the Sentry event.\n   * @returns the id of the captured Sentry event.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @param message The message to capture.\n   * @param level An optional severity level to report the message with.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured message.\n   */\n  public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Captures a manually created event for this scope and sends it to Sentry.\n   *\n   * @param exception The event to capture.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured event.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n  if (!globalScope) {\n    globalScope = new Scope();\n  }\n\n  return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n  globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexport var isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\nexport default isBrowser;\n","export const XREF_REF_STEPPER = '__XREF_REF_STEPPER__';","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z\"\n}), 'BugReport');\n\nexports.default = _default;","// material-ui Button that can be used as a child in material-ui Tabs\n\nimport * as React from 'react';\nimport {\n  Tooltip,\n} from '@material-ui/core';\n\nconst TooltipTab = ({ children, indicator, textColor, fullWidth, ...props }: any) => (\n  <Tooltip {...props}>\n    {children}\n  </Tooltip>\n);\n\nexport default TooltipTab;","import ApiClient from '../../utils/apiClient';\n\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\nexport interface IFirmSearchParams {\n  query: string;\n  /** Tri-state via presence: omit = own + shared-with-me; true = shared only; false = own only. */\n  sharedProduct?: boolean;\n  size?: number;\n  from?: number;\n  /**\n   * Quote line-item ranking: order by the `product_ranking` group rank for this\n   * app/building-type/geoname. Omit for the plain /products ordering.\n   */\n  rankContext?: {\n    appId?: string | null;\n    buildingTypeIds?: Array<string | number> | null;\n    geonameId?: string | number | null;\n  };\n  /**\n   * The legacy filter tree minus its term — advanced brand / category / date /\n   * status filters that were previously flattened away. Build it with\n   * firmRestrictionFilters(). Translated server-side; anything untranslatable\n   * is refused with a 400 rather than dropped.\n   */\n  filters?: any;\n}\n\n/** Full-text term keys, as emitted by parseFiltersAndOptions. */\nconst FULLTEXT_TERM_KEYS = new Set(['productSearch', 'productSimpleSearch']);\n\n/**\n * Text fields the QuoteConnect term is LIKE-matched against. The firm surface\n * matches the term across these through `query`, so a `like` on them is the\n * term, not a restriction.\n */\nconst LIKE_TERM_FIELDS = new Set(['productNumber', 'itemNumber', 'brand', 'description']);\n\n/**\n * True when a clause is made ENTIRELY of term matching: a full-text key, a\n * `like` on a term field, or an `or` of only those. Anything containing a real\n * restriction (`brand: {eq}`, `status: {neq}`) is not term and must be kept.\n */\nfunction isTermClause(node: any): boolean {\n  if (!node || typeof node !== 'object' || Array.isArray(node)) {\n    return false;\n  }\n  const keys = Object.keys(node);\n  if (keys.length !== 1) {\n    return false;\n  }\n  const [key] = keys;\n  const value = node[key];\n  if (FULLTEXT_TERM_KEYS.has(key)) {\n    return true;\n  }\n  if (LIKE_TERM_FIELDS.has(key)) {\n    return !!value && typeof value === 'object' && 'like' in value;\n  }\n  if (key === 'or' && Array.isArray(value)) {\n    return value.length > 0 && value.every(isTermClause);\n  }\n  return false;\n}\n\n/**\n * The legacy filter tree with its term removed, for the firm surface — which\n * receives the term as `query` for relevance. Sending the term in both places\n * would AND a translated match with the relevance match and return their\n * intersection, so it is stripped here.\n *\n * Handles every shape parseFiltersAndOptions produces:\n *   { and: [ { productSearch: … }, { status: … } ] }  → { and: [ { status: … } ] }\n *   { or:  [ productNumber/brand/description like ] }  → null (QuoteConnect: all term)\n * Non-`and` top-level keys are preserved, never dropped.\n *\n * Returns null when nothing but the term remains.\n */\nexport function firmRestrictionFilters(filters: any): any | null {\n  if (!filters || typeof filters !== 'object') {\n    return null;\n  }\n  if (isTermClause(filters)) {\n    return null;\n  }\n  const { and, ...others } = filters;\n  if (!Array.isArray(and)) {\n    return Object.keys(filters).length ? filters : null;\n  }\n  const rest = and.filter((clause: any) => !isTermClause(clause));\n  const out = { ...others, ...(rest.length ? { and: rest } : {}) };\n  return Object.keys(out).length ? out : null;\n}\n\n/**\n * OpenSearch-backed firm-product search (ms-search-repo), reached through the\n * api-gateway (ENDPOINT_APIGATEWAY) at /mssearch/{command} — the\n * mono-microservice lane, distinct from the legacy /search/firm-products\n * (ENDPOINT_PIM) path. Gated by the 'New Search' feature-flag role; everyone\n * else keeps the legacy PIM search.\n *\n * Firm scoping (firmId / superFirmId / isSuperFirm) is derived server-side from\n * the gateway-injected context, so the FE sends only the query, the shared\n * selector, and paging. Price is hydrated into each item server-side.\n */\nconst ProductSearchServiceApi = {\n  async searchFirmProducts(\n    env: any,\n    appId: string,\n    params: IFirmSearchParams,\n  ): Promise<any> {\n    const baseURL = env.get(apiEndPoint);\n    const apiClient = new ApiClient(baseURL, appId);\n    return apiClient.post('/mssearch/products.search.firm', params);\n  },\n};\n\nexport default ProductSearchServiceApi;\n","import ApiClient from '../../utils/apiClient';\n\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\n/**\n * SpecTool quick-search request. The term travels in `query` (it drives\n * relevance); everything that RESTRICTS the result set travels in `filters` as\n * the legacy filter tree, translated server-side.\n *\n * Never put the term in `filters`: the BE matches the term by prefix relevance,\n * and ANDing that with a translated `*term*` wildcard would narrow results to\n * the prefix-only intersection — narrower than the legacy infix LIKE.\n */\nexport interface IQuickSearchParams {\n  query: string;\n  /** Legacy filter tree, restrictions only (statusId / seriesStatusId / guest region). */\n  filters?: any;\n  /** Legacy `?draft=` tri-state: false = non-draft, true = drafts, null = both. */\n  draft?: boolean | null;\n  /** Legacy `location` — `{ country, province, city }` geonames. */\n  location?: any;\n  /** Legacy `building` — selects the product_ranking dimension. */\n  building?: any;\n  useUnavailability?: boolean;\n  usePurchasability?: boolean;\n  /**\n   * Legacy `isCompetitor` tri-state. OMITTED means `false` (exclude competitor\n   * products), which is PimFilterFlags' default and what the SpecTool\n   * dropdown wants. `null` means NO clause — pass it wherever the legacy call\n   * passed `queries: { isCompetitor: null }`, such as the add-product drawer.\n   */\n  isCompetitor?: boolean | null;\n  /**\n   * Whether a product must belong to a series. Defaults to TRUE on the BE\n   * because the SpecTool navigates by series on select and a series-less\n   * product throws there. Surfaces that render a flat product row — the\n   * add-product drawer — pass `false`.\n   */\n  requireSeries?: boolean;\n  /** Page size. Omitted uses this module's 25; the BE's own default is 20. */\n  size?: number;\n}\n\n/**\n * Direct-to-gateway calls for the OpenSearch-backed product search\n * (ms-search-repo), reached through the api-gateway root (ENDPOINT_APIGATEWAY)\n * at /mssearch/{command} — the mono-microservice lane, distinct from the\n * legacy /psproduct HTTP proxy.\n *\n * Gated behind the 'New Search' ACL role in the product saga.\n */\nconst ProductSearchGatewayApi = {\n  /**\n   * AutoQuote product search. Forwards the legacy `/search/products` body\n   * ({ filters, options, location, useUnavailability, usePurchasability }) —\n   * the BE compat adapter accepts it and returns the legacy shape under\n   * payload.mssearch ({ product, hasNextPage }).\n   */\n  async autoquoteSearch(env: any, appId: string, body: any): Promise<any> {\n    const baseURL = env.get(apiEndPoint);\n    const apiClient = new ApiClient(baseURL, appId);\n    return apiClient.post('/mssearch/products.search.autoquote', body);\n  },\n\n  /**\n   * SpecTool quick search (typeahead). Multi-field, fuzzy, exact-first\n   * (`fd-100` → FD-100 ranked first). Returns the clean `{ items }` shape\n   * under payload.mssearch — callers reshape via toLegacyProductList().\n   *\n   * Sends the same restrictions the legacy `/search/products` call applies. A\n   * filter the BE cannot reproduce comes back as a 400 and surfaces as an\n   * error — deliberately loud, never a silent fall-through to the legacy path.\n   */\n  async quickSearch(env: any, appId: string, params: IQuickSearchParams, signal?: AbortSignal): Promise<any> {\n    const baseURL = env.get(apiEndPoint);\n    const apiClient = new ApiClient(baseURL, appId);\n    return apiClient.post('/mssearch/products.search.quick', { size: 25, ...params }, signal);\n  },\n};\n\n/**\n * OpenSearch `items` (payload.mssearch.items) -> the legacy product shape the\n * quick-search UI reads (numeric ids, category/series names).\n */\nexport function toLegacyProductList(items: any[]): any[] {\n  const num = (v: any) => {\n    if (v == null || v === '') {\n      return null;\n    }\n    const n = Number(v);\n    return Number.isFinite(n) ? n : v;\n  };\n  return (items || []).map((it: any) => ({\n    id: num(it.id),\n    productNumber: it.productNumber ?? null,\n    // The typeahead option label is `${brand} - ${name}`; legacy carried no\n    // root `name`, so fall back to productNumber for a meaningful label.\n    name: it.productNumber ?? null,\n    itemNumber: it.itemNumber ?? null,\n    upc: it.upc ?? null,\n    uom: it.uom ?? null,\n    sku: it.sku ?? null,\n    brand: it.brand ?? null,\n    brandId: num(it.brandId),\n    category: num(it.categoryId),\n    categoryName: it.categoryName ?? null,\n    series: num(it.seriesId),\n    seriesName: it.seriesName ?? null,\n    description: it.description ?? null,\n    rank: num(it.rank),\n    // Grey-out/disable signals for discontinued rows (ProductSelectOption).\n    status: it.status ?? null,\n    seriesStatus: it.seriesStatus ?? null,\n    // Thumbnail — ProductSelectOption reads file.images.main.fileId. Only the\n    // main image fileId is denormalized into the search doc (not the full\n    // media tree), so shape just that path; omit when there is no image.\n    file: it.mainImageFileId\n      ? { images: { main: { fileId: it.mainImageFileId } } }\n      : undefined,\n  }));\n}\n\nexport default ProductSearchGatewayApi;\n","export const parseFiltersAndOptions = ({ filters = {}, options, searchSetting = 'complex', isPackage = false, isQCSearch = false }) => {\n  const _filters: any = { ...filters };\n  const searchTermIndex = (_filters.and?.findIndex((x) => {\n    return x.or ? x.or.findIndex(_x => _x.productSearch) > -1 : x.productSearch;\n  }) as any);\n  const searchTermSubIndex = _filters.and?.[searchTermIndex]?.or?.findIndex(x => x.productSearch);\n  const searchTerm = searchTermSubIndex > -1\n    ? _filters.and?.[searchTermIndex]?.or?.[searchTermSubIndex]?.productSearch?.match\n    : _filters.and?.[searchTermIndex]?.productSearch?.match;\n\n  if (!isQCSearch) {\n    if (!Boolean(searchTerm)) {\n      if (Array.isArray(_filters.and) && _filters.and.length > 1) {\n        _filters.and?.splice(searchTermIndex, 1);\n      } else {\n        delete _filters.and;\n      }\n    } else {\n      if (searchSetting === 'simple') {\n        if (isPackage) {\n          _filters.and[searchTermIndex] = { productNumber: { like: searchTerm } };\n        } else {\n          _filters.and[searchTermIndex] = { productSimpleSearch: { match: searchTerm } };\n        }\n      } else {\n        _filters.and[searchTermIndex] = { productSearch: { match: searchTerm } };\n      }\n    }\n  }\n  else {\n    const _searchTermIndex = (_filters.and?.findIndex((x) => {\n      return x.or ? x.or.findIndex(_x => _x.productNumber) > -1 : x.productNumber;\n    }) as any);\n    const _searchTermSubIndex = _filters.and?.[_searchTermIndex]?.or?.findIndex(x => x.productNumber);\n    const _searchTerm = _searchTermSubIndex > -1\n      ? _filters.and?.[_searchTermIndex]?.or?.[_searchTermSubIndex]?.productNumber?.like\n      : _filters.and?.[_searchTermIndex]?.productNumber?.like;\n\n    if (!Boolean(_searchTerm)) {\n      if (Array.isArray(_filters.and) && _filters.and.length > 1) {\n        _filters.and?.splice(_searchTermIndex, 1);\n      } else {\n        delete _filters.and;\n      }\n    }\n  }\n  options = {\n    ...options,\n    orderBy: {\n      ...(searchTerm && searchSetting === 'complex' && !isQCSearch) ? {\n        productSearchRelevance: {\n          [searchTerm]: -1\n        }\n      } : {},\n      ...options.orderBy\n    }\n  };\n  return { options, filters: _filters };\n};","import { IMap } from 'ats-utils/src';\n\nexport enum LANGUAGE_TYPE {\n  en = 'en',\n  fr = 'fr'\n}\n\nexport enum NOTIFICATION_TYPE {\n  assignedTask = 'assignedTask',\n  takeoffFinished = 'takeoffFinished',\n  // A note reaches its assignee through the page it was written on, so sharing\n  // one raises a different type per subject.\n  assignedNote = 'assignedNote',\n  assignedOfficeNote = 'assignedOfficeNote',\n  assignedUserNote = 'assignedUserNote'\n}\n\nexport default class Notification {\n  public id: number;\n  public appId: string;\n  public createdDate: string;\n  public expiryDate: string;\n  public href: string;\n  public isGlobal: boolean;\n  public isNotified: boolean;\n  public isRead: boolean;\n  public language: LANGUAGE_TYPE;\n  public linkParams: IMap<any>;\n  public readDate: string;\n  public targetAppId: string;\n  public template: string;\n  public templateParams: IMap<any>;\n  public type: NOTIFICATION_TYPE;\n  public userId: number;\n  public version: number;\n\n  public constructor(init?: Partial<Notification>) {\n    Object.assign(this, init);\n  }\n}\n","import React, {useState} from 'react';\nimport {ControlledModal} from '../index';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {Button, IconButton, Link, TextField, Theme, Typography} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {makeStyles} from '@material-ui/styles';\nimport {GUEST_LOGIN_MODAL} from '../GuestLoginModal';\nimport isEmail from 'ats-utils/src/isEmail';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectOverlayComponentProp} from '../../modules/ApplicationModule/selectors';\nimport { Trans } from 'react-i18next';\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\n\nexport const GUEST_EMAIL_SUBMISSION_MODAL = 'GUEST_EMAIL_SUBMISSION_MODAL';\nconst useStyles = makeStyles((theme: Theme) => ({\n    fullWidth: {\n        width: '100%',\n    },\n    icon: {\n        fontSize: '24px',\n        marginRight: '8px',\n    },\n    header: {\n        fontSize: '24.72px',\n        fontWeight: 700,\n        lineHeight: '29.66px',\n        textAlign: 'center',\n        color: 'rgba(0, 0, 0, 0.87)',\n        marginBottom: '16px'\n    },\n    text: {\n        fontSize: '16.69px',\n        fontWeight: 400,\n        lineHeight: '26px',\n        letterSpacing: '0.5px',\n        textAlign: 'left'\n    }\n}));\nconst GuestEmailSubmissionModal: React.FC<{ }> = () => {\n    const [hasTouched, setHasTouched] = useState(false);\n    const [email, setEmail] = useState('');\n    const dispatch = useDispatch();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const modalProps = useSelector(makeSelectOverlayComponentProp(GUEST_EMAIL_SUBMISSION_MODAL));\n    const config = useSelector(makeSelectConfig());\n    const handleClose = () => {\n        dispatch(new ToggleOverlayComponentAction({\n            id: GUEST_EMAIL_SUBMISSION_MODAL,\n            open: false,\n        }));\n    };\n    const privacyLink = config?.get('footerPrivacyLink') || 'https://www.atssoftware.com/privacy-policy/';\n\n    return (\n        <ControlledModal\n            localKey={GUEST_EMAIL_SUBMISSION_MODAL}\n            PaperProps={{\n                style: {\n                    padding: '24px 24px',\n                    minWidth: '768px',\n                }\n            }}\n        >\n            <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n                <IconButton onClick={handleClose} style={{ padding: 0 }}>\n                    <CloseIcon style={{ fontSize: '24px' }} />\n                </IconButton>\n            </div>\n            <div style={{ padding: '0 20px' }}>\n                <Typography className={classes.header}>{t('emailSubmissionModal.header')}</Typography>\n                <div style={{ marginBottom: 24 }}>\n                    <Typography component='span' className={classes.text}>\n                        <Trans\n                            t={t}\n                            i18nKey={'emailSubmissionModal.description'}\n                            components={[\n                                <Link key={'signUp'} variant='body1' component='button' className={classes.text} style={{ textDecoration: 'underline' }} onClick={() => modalProps?.onSignup({ email })} />\n                            ]}\n                        />\n                    </Typography>\n                </div>\n                <TextField\n                    onBlur={() => setHasTouched(true)}\n                    fullWidth={true}\n                    onChange={(e) => setEmail(e.target.value)}\n                    error={hasTouched && !isEmail(email)}\n                    required={true}\n                    label='Email'\n                    value={email}\n                    helperText={(hasTouched && !isEmail(email)) ? 'Invalid email' : ''}\n                />\n                <div style={{ display: 'flex', justifyContent: 'center', marginTop: '24px' }}>\n                    <Button\n                        onClick={() => {\n                            if (isEmail(email)) {\n                                modalProps?.onSubmit({ email });\n                            }\n                        }}\n                        variant='contained'\n                        color='primary'>\n                        {t('emailSubmissionModal.submit')}\n                    </Button>\n                </div>\n                <div style={{ display: 'flex', justifyContent: 'center', marginTop: '16px' }}>\n                    <Typography component='span' color='textPrimary' className={classes.text}>\n                        <Trans\n                            t={t}\n                            i18nKey={'emailSubmissionModal.termsOfService'}\n                            components={[\n                                <Link key={'tos'} variant='body1' className={classes.text} href={privacyLink} target='_blank' rel='noopener'  />\n                            ]}\n                        />\n                    </Typography>\n                </div>\n            </div>\n        </ControlledModal>\n    );\n};\n\nexport default GuestEmailSubmissionModal;\n","import {\n  Map,\n  Set,\n  OrderedSet,\n  List,\n} from 'immutable';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  createSelector,\n} from 'reselect';\nimport { IPackageReducerState } from './reducer';\nimport {\n  Contact,\n  Collaborator,\n  User,\n  Office,\n  Firm,\n  OpportunityGroup,\n  OpportunityStatusListItem,\n} from '../../models';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Preferences, { PreferenceType } from '../../models/Preferences';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added PackageModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectAtsPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('atsPackages')\n);\n\nexport const makeSelectFirmPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('firmPackages')\n);\n\nexport const makeSelectFirmPackagesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('firmPackagesCount')\n);\n\nexport const makeSelectFirmPackagesHasNextPage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('firmPackagesHasNextPage')\n);\n\nexport const makeSelectQuickSearchedFirmPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('quickSearchedFirmPackages')\n);\n\nexport const makeSelectQuickSearchedFirmPackagesCount = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('quickSearchedFirmPackagesCount')\n);\n\nexport const makeSelectCheckingProductInPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('checkingProductInPackages')\n);\n\nexport const makeSelectIsFetchingFirmPackages = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('isFetchingFirmPackages'),\n);\n\nexport const makeSelectIsLoadingQuickSearchFirmPackage = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('isLoadingQuickSearchFirmPackages'),\n);\n\nexport const makeSelectSearchPackagesLoading = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IPackageReducerState>) => state.get('searchPackagesLoading'),\n);\n\nexport default {\n  selectReducerState,\n};\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'packages';","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  DialogContent,\n  DialogContentText,\n  IconButton,\n  useTheme\n} from '@material-ui/core';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { makeStyles } from '@material-ui/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ControlledModal, Image } from '../../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../../modules/ApplicationModule/selectors';\n\ninterface ICurvePreviewModalComponentProps {\n}\n\ninterface ICurvePreviewModalProps extends ICurvePreviewModalComponentProps {\n}\n\ntype CurvePreviewModalProps= ICurvePreviewModalProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  closeIcon: {\n    position: 'absolute',\n    right: theme.spacing(0.5),\n    top: theme.spacing(0.5)\n  },\n  paddingContainer: {\n    padding: theme.spacing(2),\n  }\n}));\n\nexport const CURVE_PREVIEW_MODAL_ID = 'CURVE_PREVIEW_MODAL';\n\nconst CurvePreviewModal: React.FC<CurvePreviewModalProps> = () =>  {\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const { label, modelNumber, imageId } = useSelector(makeSelectOverlayComponentProp(CURVE_PREVIEW_MODAL_ID));\n  const open = useSelector(makeSelectOverlayComponent(CURVE_PREVIEW_MODAL_ID));\n\n  const clearProps = () => {\n    dispatch(new SetOverlayComponentPropsAction({\n      id: CURVE_PREVIEW_MODAL_ID,\n      props: {}\n    }));\n  };\n\n  React.useEffect(() => {\n    if (!open) {\n      setTimeout(clearProps, 200);\n    }\n  }, [open]);\n\n  return (\n    <>\n      <ControlledModal\n        localKey={CURVE_PREVIEW_MODAL_ID}\n        fullWidth={false}\n        scroll='body'\n        maxWidth='sm'\n      >\n        <DialogContent>\n          <Grid className={classes.paddingContainer}>\n            <IconButton\n              onClick={() => dispatch(new ToggleOverlayComponentAction({open: false, id: CURVE_PREVIEW_MODAL_ID}))}\n              className={classes.closeIcon}\n            >\n              <CloseIcon />\n            </IconButton>\n            {imageId &&\n              <Grid style={{marginBottom: theme.spacing(3)}}>\n                <Image\n                  src={imageId || ''}\n                  width={'400px'}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                />\n              </Grid>\n            }\n            <DialogContentText id='pump-curve-preview-dialog-title' variant='h6' color='textPrimary'>\n              {label}\n            </DialogContentText>\n            <DialogContentText id='pump-curve-preview-dialog-productNumber' variant='body2'>\n              {t('SeriesPanel.modelSeries')} {modelNumber}\n            </DialogContentText>\n          </Grid>\n        </DialogContent>\n      </ControlledModal>\n    </>\n  );\n};\n\nexport default CurvePreviewModal;","export default {\n  disabled: false\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    padding: 16,\n    '&:last-child': {\n      paddingBottom: 24\n    }\n  }\n};\nvar CardContent = React.forwardRef(function CardContent(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardContent.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCardContent'\n})(CardContent);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nimport { fade } from '../styles/colorManipulator';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: 'inherit',\n      display: 'table-row',\n      verticalAlign: 'middle',\n      // We disable the focus ring for mouse, touch and keyboard users.\n      outline: 0,\n      '&$hover:hover': {\n        backgroundColor: theme.palette.action.hover\n      },\n      '&$selected,&$selected:hover': {\n        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.selectedOpacity)\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Pseudo-class applied to the root element if `hover={true}`. */\n    hover: {},\n\n    /* Styles applied to the root element if table variant=\"head\". */\n    head: {},\n\n    /* Styles applied to the root element if table variant=\"footer\". */\n    footer: {}\n  };\n};\n/**\n * Will automatically set dynamic row height\n * based on the material table element parent (head, body, etc).\n */\n\nvar TableRow = React.forwardRef(function TableRow(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'tr' : _props$component,\n      _props$hover = props.hover,\n      hover = _props$hover === void 0 ? false : _props$hover,\n      _props$selected = props.selected,\n      selected = _props$selected === void 0 ? false : _props$selected,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"hover\", \"selected\"]);\n\n  var tablelvl2 = React.useContext(Tablelvl2Context);\n  return React.createElement(Component, _extends({\n    ref: ref,\n    className: clsx(classes.root, className, tablelvl2 && {\n      head: classes.head,\n      footer: classes.footer\n    }[tablelvl2.variant], hover && classes.hover, selected && classes.selected)\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableRow.propTypes = {\n  /**\n   * Should be valid <tr> children such as `TableCell`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the table row will shade on hover.\n   */\n  hover: PropTypes.bool,\n\n  /**\n   * If `true`, the table row will have the selected shading.\n   */\n  selected: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableRow'\n})(TableRow);","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport SwitchBase from '../internal/SwitchBase';\nimport CheckBoxOutlineBlankIcon from '../internal/svg-icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '../internal/svg-icons/CheckBox';\nimport { fade } from '../styles/colorManipulator';\nimport IndeterminateCheckBoxIcon from '../internal/svg-icons/IndeterminateCheckBox';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Pseudo-class applied to the root element if `checked={true}`. */\n    checked: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `indeterminate={true}`. */\n    indeterminate: {},\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }\n  };\n};\nvar defaultCheckedIcon = React.createElement(CheckBoxIcon, null);\nvar defaultIcon = React.createElement(CheckBoxOutlineBlankIcon, null);\nvar defaultIndeterminateIcon = React.createElement(IndeterminateCheckBoxIcon, null);\nvar Checkbox = React.forwardRef(function Checkbox(props, ref) {\n  var _props$checkedIcon = props.checkedIcon,\n      checkedIcon = _props$checkedIcon === void 0 ? defaultCheckedIcon : _props$checkedIcon,\n      classes = props.classes,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$icon = props.icon,\n      icon = _props$icon === void 0 ? defaultIcon : _props$icon,\n      _props$indeterminate = props.indeterminate,\n      indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n      _props$indeterminateI = props.indeterminateIcon,\n      indeterminateIcon = _props$indeterminateI === void 0 ? defaultIndeterminateIcon : _props$indeterminateI,\n      inputProps = props.inputProps,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = _objectWithoutProperties(props, [\"checkedIcon\", \"classes\", \"color\", \"disabled\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"]);\n\n  return React.createElement(SwitchBase, _extends({\n    type: \"checkbox\",\n    classes: {\n      root: clsx(classes.root, classes[\"color\".concat(capitalize(color))], indeterminate && classes.indeterminate),\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    color: color,\n    inputProps: _extends({\n      'data-indeterminate': indeterminate\n    }, inputProps),\n    icon: React.cloneElement(indeterminate ? indeterminateIcon : icon, {\n      fontSize: size === 'small' ? 'small' : 'default'\n    }),\n    checkedIcon: React.cloneElement(indeterminate ? indeterminateIcon : checkedIcon, {\n      fontSize: size === 'small' ? 'small' : 'default'\n    }),\n    ref: ref,\n    disabled: disabled\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes = {\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary', 'default']),\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the input.\n   */\n  indeterminate: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is indeterminate.\n   */\n  indeterminateIcon: PropTypes.node,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The size of the checkbox.\n   * `small` is equivalent to the dense checkbox styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCheckbox'\n})(Checkbox);","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","module.exports = {};\n","\n/* tslint:disable:no-console */\n\n/**\n *\n * App.react.js\n *\n * This component is the skeleton around the actual pages, and should only\n * contain code that should be seen on all pages. (e.g. navigation bar)\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  List,\n} from 'immutable';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n  Theme,\n} from '@material-ui/core/styles';\nimport Error from '../../models/Error';\nimport CollapsibleCard from '../../components/CollapsibleCard';\nimport {\n  Badge,\n  Popover,\n  Button,\n  IconButton,\n  Grid,\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  Typography,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport {\n  AddErrorAction,\n  ResetErrorAction,\n  ToggleErrorMenuAction,\n} from '../../modules/ErrorModule/actions';\nimport Debug from '../../containers/Debug';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\nimport selectors from '../../modules/ErrorModule/selectors';\n\nconst {\n  selectErrors,\n  selectErrorMenuOpen\n} = selectors;\nexport {\n  selectors,\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    marginTop: `-${1.5 * theme.spacing()}px`,\n    marginBottom: `-${2 * theme.spacing()}px`,\n  },\n  container: {\n    display: 'block',\n  },\n  textInput: {\n    borderBottom: '1px solid black',\n  },\n  hidden: {\n    display: 'none',\n  }\n});\n\ninterface IErrorMessageComponentProps {\n  errorMessage: IMap<Error>;\n  onClick(evt: React.MouseEvent): void;\n}\n\ntype ErrorMessageComponentProps = IErrorMessageComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst ErrorMessageComponent: React.SFC<ErrorMessageComponentProps> = ({ errorMessage, classes, onClick }) => (\n  <ExpansionPanel>\n    <ExpansionPanelSummary expandIcon={<ExpandMoreIcon />}>\n      <IconButton className={classes.button} aria-label='Delete' onClick={onClick}>\n        <DeleteIcon />\n      </IconButton>\n      <Typography>\n        {errorMessage.get('message')}\n      </Typography>\n      <div />\n    </ExpansionPanelSummary>\n    <ExpansionPanelDetails>\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        <Grid\n          item={true}\n        >\n          <Typography>\n            {errorMessage.getIn(['meta', 'id']) || '(no id)'}\n          </Typography>\n        </Grid>\n        <Grid\n          item={true}\n        >\n          <Typography>\n            {safeStringify(errorMessage.getIn(['meta', 'error'])) || 'ERROR'}\n          </Typography>\n        </Grid>\n        <Grid\n          item={true}\n        >\n          <Button\n            onClick={() => {\n              console.error('ERROR Message', errorMessage.toJS());\n            }}\n          >\n            Show error in console\n          </Button>\n        </Grid>\n      </Grid>\n    </ExpansionPanelDetails>\n  </ExpansionPanel>\n);\n\ninterface IErrorHandlerComponentProps {\n}\n\ninterface IErrorHandlerProps extends IErrorHandlerComponentProps {\n  errors: List<IMap<Error>>;\n  errorMenuOpen?: boolean;\n  dispatch: Dispatch<IAction>;\n  // input: any;\n  resetError(...args: any[]): any;\n  toggleErrorMenu(...args: any[]): any;\n}\n\ntype ErrorHandlerProps = IErrorHandlerProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ErrorHandler extends React.Component<ErrorHandlerProps, {}> { // eslint-disable-line react/prefer-stateless-function\n  private input: HTMLInputElement;\n  private anchorEl = React.createRef<HTMLButtonElement>();\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      errorMessageInput: '',\n    };\n\n    // to allow tests to works\n    // otherwise it doesn't hook up the node with ref= correctly\n  }\n\n  public render() {\n    const {\n      errors,\n      classes,\n      errorMenuOpen = false,\n      toggleErrorMenu,\n      resetError,\n      dispatch,\n    } = this.props;\n    const hasErrors = errors && errors.size > 0;\n    const resetClassName = hasErrors ? '' : classes.hidden;\n\n    // console.debug('errors', errors)\n    return (\n      <div>\n        <div className={classes.container}>\n          <div className={resetClassName}>\n            <Badge\n              badgeContent={errors.size}\n              color='primary'\n            >\n              <Button\n                ref={this.anchorEl}\n                variant='contained'\n                onClick={toggleErrorMenu()}\n                color='primary'\n              >\n                View Errors <ErrorIcon />\n              </Button>\n              <Popover\n                anchorEl={this.anchorEl.current}\n                open={errorMenuOpen && hasErrors}\n                onClose={toggleErrorMenu(false)}\n                anchorOrigin={{ horizontal: 'left', vertical: 'top' }}\n                transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n              >\n                <Grid container={true} direction='column' wrap='nowrap' style={{padding: 2}}>\n                  <Button\n                    className={resetClassName}\n                    onClick={resetError({ index: undefined })}\n                  >\n                    Clear Errors\n                  </Button>\n                  {errors.map(\n                    (errorMessage, index) => {\n                      return (\n                        <ErrorMessageComponent\n                          key={`${errorMessage}${index}`}\n                          {...{\n                            errorMessage,\n                            classes,\n                            onClick: resetError({ index })\n                          }}\n                        />\n                      );\n                    }\n                  )}\n                </Grid>\n              </Popover>\n            </Badge>\n          </div>\n          <Debug\n            delayedRender={() => {\n              return <React.Fragment>\n                <CollapsibleCard title='Error Debug'>\n                  <h3>\n                    ErrorDebug:\n                  </h3>\n                  <input className={classes.textInput} type='text' ref={(node) => { this.input = node as HTMLInputElement; }} />\n                  <button\n                    onClick={() => {\n                      dispatch(new AddErrorAction({\n                        message: this.input.value,\n                        id: 'debug',\n                        suppressGlobalErrorNotification: false,\n                      }));\n                      this.input.value = '';\n                    }}\n                  >\n                    Add Error\n                  </button>\n                  <button\n                    onClick={resetError({ index: undefined })}\n                  >\n                    Reset Errors\n                  </button>\n                  <br />\n                  {safeStringify(errors)}\n                  <br />\n                </CollapsibleCard>\n              </React.Fragment>;\n            }}\n          />\n        </div>\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  errors: selectErrors(),\n  errorMenuOpen: selectErrorMenuOpen(),\n});\n\nexport function mapDispatchToProps(dispatch) {\n  return {\n    resetError: ({index}) => (event) => {\n      event.stopPropagation();\n      event.preventDefault();\n\n      dispatch(new ResetErrorAction({ index }));\n    },\n    toggleErrorMenu: (open) => () => dispatch(new ToggleErrorMenuAction(open)),\n    dispatch,\n  };\n}\n\nexport default compose<React.ComponentClass<IErrorHandlerComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(ErrorHandler);\n","import {\n  Map,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createSelector,\n} from 'reselect';\nimport {INoteReducerState} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added AccountModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectNotes = (type?: string, typeId?: number) => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INoteReducerState>) => {\n    return type\n      ? state.get('notes').filter( note => {\n        let passFilter = true;\n        if (type != null) {\n          passFilter = passFilter && (note.get('type') === type);\n        }\n\n        if (typeId != null) {\n          passFilter = passFilter && (note.get('typeId') === typeId);\n        }\n        return passFilter;\n      })\n      : state.get('notes');\n  }\n);\n\nexport const makeSelectCurrentNoteId = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INoteReducerState>) => state.get('selectedNoteId')\n);\n\nexport const makeSelectCurrentNote = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<INoteReducerState>) => state.getIn(['notes', state.get('selectedNoteId')], Map())\n);\n\nexport default {\n  selectReducerState,\n};\n","export default __webpack_public_path__ + \"static/media/alpha.da5d431a.svg\";","export default __webpack_public_path__ + \"static/media/beta.85fc13db.svg\";","export default __webpack_public_path__ + \"static/media/ATSIcon-Colour.0ce72063.svg\";","export default __webpack_public_path__ + \"static/media/QuoteConnect_Mobile.ca5327a0.svg\";","export default __webpack_public_path__ + \"static/media/ats-project-tracker-white.f9a5338c.svg\";","\n\nexport default {};\nexport const DEFAULT_MOUNT_POINT = 'note';\n","export default __webpack_public_path__ + \"static/media/notes.589886fd.svg\";","import * as React from 'react';\n\n// redux imports\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { IAction, IMap } from 'ats-utils/src/Interfaces';\nimport { Map, List } from 'immutable';\nimport { connect } from 'react-redux';\nimport {\n  DeleteNoteAction,\n  UpdateNotePermissionLevelAction\n} from '../../../modules/NoteModule/actions';\nimport { GetUserByIdAction } from '../../../modules/AccountModule/actions';\n\n// selector imports\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectNoteCreators } from '../../../modules/AccountModule/selectors';\n\n// misc imports\nimport { DropdownContainer } from '../..';\nimport { User } from '../../../models';\nimport Note, { NOTE_PERMISSOIN } from '../../../models/Note';\nimport Tag from '../../../models/Note/Tag';\n\n// styling imports\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  MenuItem,\n  Typography,\n  Avatar,\n  Tooltip,\n  Button\n} from '@material-ui/core';\nimport notesIcon from '../../../images/notes.svg';\nimport { grey } from '@material-ui/core/colors';\nimport PeopleAltRoundedIcon from '@material-ui/icons/PeopleAltRounded';\nimport ApartmentRoundedIcon from '@material-ui/icons/ApartmentRounded';\nimport AccountCircleRoundedIcon from '@material-ui/icons/AccountCircleRounded';\nimport NoteRoundedIcon from '@material-ui/icons/NoteRounded';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport DrawerRow from '../../DrawerRow';\nimport DrawerViewHeader from '../../DrawerViewHeader';\nimport { makeSelectIsRestrictedOutsideSalesRep, makeSelectUserId } from '../../../modules/AtsModule/selectors';\n\ninterface INotesDrawerViewComponentProps {\n  data: IMap<Note>;\n  toggleHandle(): void;\n  onClose(): void;\n}\n\ninterface INotesDrawerViewProps extends INotesDrawerViewComponentProps {\n  noteCreators: List<IMap<User>>;\n  isRestrictedOutsideSalesRep: boolean;\n  loginUserId: number;\n  getUserById(id: number): void;\n  deleteNote(selectedNoteId: number): void;\n  updatePermissionLevel(id: number, permissionLevel: string): void;\n}\n\ntype NotesDrawerType = WithTranslation & INotesDrawerViewProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass NotesDrawerView extends React.Component<NotesDrawerType, {}> {\n  public state = {\n    anchorEl: null,\n    user: null\n  };\n\n  public componentDidUpdate(prevProps) {\n    const { data } = this.props;\n\n    if (!data.get('createdBy')) {\n      return;\n    }\n  }\n\n  public changePermissionLevel = (permission: NOTE_PERMISSOIN) => () => {\n    const { updatePermissionLevel, data } = this.props;\n\n    updatePermissionLevel(data.get('id'), permission);\n  }\n\n  public deleteNote = () => {\n    const { deleteNote, data, onClose } = this.props;\n\n    deleteNote(data.get('id'));\n    onClose();\n  }\n\n  public render() {\n    const {\n      toggleHandle,\n      onClose,\n      classes,\n      data,\n      noteCreators,\n      isRestrictedOutsideSalesRep,\n      loginUserId,\n      t\n    } = this.props;\n\n    const disabledUpdate = isRestrictedOutsideSalesRep && loginUserId !== data.get('createdBy');\n\n    const creator = noteCreators.find(noteCreator => noteCreator.get('id') === data.get('createdBy'));\n    const creatorFirstName = creator && creator.get('firstName', '') || '';\n    const creatorLastName = creator && creator.get('lastName', '') || '';\n    const isPublic = data.get('permissionLevel') === 'pub';\n    const noteStatusButton =  <Button\n                                className={classes.notesType}\n                                component='a'\n                                startIcon={isPublic ?\n                                            <PeopleAltRoundedIcon className={classes.notesTypeIcon}/>\n                                            :\n                                            <ApartmentRoundedIcon className={classes.notesTypeIcon}/>\n                                          }\n                              >\n                                {isPublic ? t('notesDrawer.public') : t('notesDrawer.protected')}\n                              </Button>;\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        {/* Header */}\n        <DrawerViewHeader\n          imageProps={{\n            imgProps: {\n              src: notesIcon,\n              alt: 'notes icon'\n            }\n          }}\n          menuItems={disabledUpdate ? [] : [\n            { action: t('formButtons.edit'), onClick: toggleHandle },\n            { action: t('formButtons.delete'), onClick: this.deleteNote }\n          ]}\n          title={t('notesDrawer.note')}\n          otherElements={\n            <Grid\n              container={true}\n              justify='center'\n              className={classes.notesTypeContainer}\n            >\n              <DropdownContainer\n                closeOnItemClick={true}\n                button={noteStatusButton}\n                ButtonProps={{\n                  classes: {\n                    root: classes.notesType\n                  },\n                  color: 'default',\n                }}\n                IconProps={{className: classes.dropDownContainer, style: {width: '5px'}}}\n              >\n                {\n                  disabledUpdate\n                    ? null\n                    : [\n                        <MenuItem key='pub' onClick={this.changePermissionLevel('pub')}>\n                          {t('notesDrawer.public')}\n                        </MenuItem>,\n                        <MenuItem key='pro' onClick={this.changePermissionLevel('pro')}>\n                          {t('notesDrawer.protected')}\n                        </MenuItem>\n                      ]\n                }\n              </DropdownContainer>\n            </Grid>\n          }\n          handleClose={onClose}\n        />\n\n        {/* Main */}\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          { /* Content of note */ }\n          <DrawerRow\n            muiIcon={<NoteRoundedIcon />}\n            alignItems='flex-start'\n          >\n            <Typography variant='body2' style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n              {data.get('note')}\n            </Typography>\n          </DrawerRow>\n\n          { /* Created by section */ }\n          <DrawerRow\n            muiIcon={<AccountCircleRoundedIcon />}\n            alignItems='flex-start'\n          >\n            <Typography variant='body2' color='inherit'>\n              {t('notesDrawer.createdBy')} <span className={classes.createdBy}>{creatorFirstName + ' ' + creatorLastName}</span>\n            </Typography>\n            <Typography variant='body2' color='inherit'>\n              {utcToLocal(data.get('createdDate'), true)}\n            </Typography>\n          </DrawerRow>\n\n          { /* Assigned users section */ }\n          {!isPublic && (\n            <DrawerRow\n              muiIcon={<PeopleAltRoundedIcon />}\n            >\n              {\n                data.get('tags', []).map((user: IMap<Tag>) => (\n                  <React.Fragment key={user.get('userId')}>\n                    <Grid\n                      item={true}\n                      aria-owns={this.state.user === user.get('userId').toString() ? user.get('userId').toString() : undefined}\n                      aria-haspopup='true'\n                    >\n                      <Tooltip title={user.get('name')} placement='bottom'>\n                        <Avatar className={classes.avatar}>\n                          {user.get('firstName') && user.get('firstName')[0]}\n                          {user.get('lastName') && user.get('lastName')[0]}\n                        </Avatar>\n                      </Tooltip>\n                    </Grid>\n                  </React.Fragment>))\n                }\n            </DrawerRow>\n          )}\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary\n  },\n  title: {\n    color: theme.palette.common.white,\n    justifySelf: 'center',\n    marginTop: `${theme.spacing()}px`\n  },\n  notesTypeContainer: {\n    margin: theme.spacing(1, 0),\n  },\n  notesType: {\n    borderRadius: theme.shape.borderRadius,\n    padding: theme.spacing(0.25, 1),\n  },\n  notesTypeIcon: {\n    color: grey[600]\n  },\n  section: {\n    marginTop: `${theme.spacing() * 3}px`\n  },\n  createdBy: {\n    color: theme.palette.primary.main\n  },\n  avatar: {\n    color: grey[400],\n    backgroundColor: grey[100],\n    textTransform: 'uppercase',\n    width: theme.spacing(3),\n    height: theme.spacing(3),\n    fontSize: theme.typography.fontSize,\n    marginRight: theme.spacing(0.75)\n  },\n  capitalize: {\n    textTransform: 'capitalize'\n  },\n  popover: {\n    pointerEvents: 'none',\n  },\n  paper: {\n    padding: `${theme.spacing()}px`,\n    backgroundColor: 'rgba(0,0,0,0.54)',\n    color: theme.palette.common.white\n  },\n  dropDownContainer: {\n    color: theme.palette.common.white\n  }\n});\n\nconst mapStateToProps = (state, ownProps) => ({\n  ...createStructuredSelector({\n    noteCreators: makeSelectNoteCreators(),\n    loginUserId: makeSelectUserId(),\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n  })(state)\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => ({\n  getUserById: (id: number) => {\n    dispatch(new GetUserByIdAction({id}));\n  },\n  deleteNote: (selectedNoteId: number) => {\n    dispatch(new DeleteNoteAction({selectedNoteId}));\n  },\n  updatePermissionLevel: (id: number, permissionLevel: string) => {\n    dispatch(new UpdateNotePermissionLevelAction({id, permissionLevel}));\n  },\n  dispatch\n});\n\nexport default compose<React.ComponentClass<INotesDrawerViewComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(NotesDrawerView);\n\n","import * as React from 'react';\n\n// redux imports\nimport { IAction, IMap } from 'ats-utils/src/Interfaces';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { SearchUsersQuickAction } from '../../../modules/AccountModule/actions';\nimport { CreateNoteAction, EditNoteAction } from '../../../modules/NoteModule/actions';\nimport FieldListItemReactSelect from '../../FieldListItemReactSelect';\n\n// selectors imports\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectSearchedUsersWithUsers } from '../../../modules/AccountModule/selectors';\n\n// misc imports\nimport { Map, fromJS, is } from 'immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { isEmpty } from 'lodash';\nimport classNames from 'classnames';\nimport {Note, Project} from '../../../models';\n\n// styling imports\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  IconButton,\n  Button,\n  Grid,\n  Typography,\n  TextField,\n  Radio,\n  RadioGroup,\n  FormControl,\n  FormControlLabel\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport PersonIcon from '@material-ui/icons/Person';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport NoteRoundedIcon from '@material-ui/icons/NoteRounded';\nimport DrawerRow from '../../DrawerRow';\nimport DrawerEditHeader from '../../DrawerEditHeader';\nimport DrawerEditCTA from '../../DrawerEditCTA';\nimport { makeSelectProject } from '../../../modules/ProjectModule/selectors';\nimport { makeSelectUserIsAtsUser } from '../../../modules/AtsModule/selectors';\n\ninterface INotesDrawerEditComponentProps {\n  data: IMap<Note>;\n  selectedNoteId: number;\n  typeId: number;\n  type: string;\n  toggleHandle(): void;\n  onClose(): void;\n}\n\ninterface INotesDrawerEditProps extends INotesDrawerEditComponentProps {\n  selectedProject?: IMap<Project>;\n  userIsAtsUser: boolean;\n  searchedUsers: Map<string, any>;\n  saveNote(\n    selectedNoteId: number,\n    type: string,\n    typeId: number,\n    note: string,\n    permissionLevel: string,\n    addedUsersIds: number[],\n    removedUsersIds: number[]\n  ): void;\n  searchUser({ searchTerm, firmId, officeId, includeAtsUsers }: { searchTerm: string, firmId?: number, officeId?: number, includeAtsUsers?: boolean }): void;\n}\n\ntype NotesDrawerType = WithTranslation &\n    INotesDrawerEditProps &\n    WithStyles<keyof ReturnType<typeof styles>>;\n\nconst customStyles = ({\n  control: (provided, state) => ({\n    ...provided,\n    boderColor: !state.isFocused ? 'neutral90' : 'primary',\n    borderWidth: '0 0 1px 0',\n    boxShadow: '0px',\n    borderRadius: '0px',\n  }),\n  valueContainer: (provided) => ({\n    ...provided,\n    paddingLeft: 0\n  }),\n  dropdownIndicator: () => ({\n    display: 'none'\n  }),\n  indicatorSeparator: () => ({\n    display: 'none'\n  }),\n  multiValueLabel: (provided) => ({\n    ...provided,\n    whiteSpace: 'normal',\n  }),\n});\n\nconst getUsersDifference = (initialUsers, newUsers) => {\n  const initialUsersIds = initialUsers.map(user => user.get('userId'));\n  const newUsersIds = newUsers ? newUsers.map(user => user.get('id')) : [];\n\n  return {\n    addedUsersIds: newUsersIds.filter(userId => !initialUsersIds.includes(userId)),\n    removedUsersIds: initialUsersIds.filter(userId => !newUsersIds.includes(userId))\n  };\n};\n\nconst getAssignedUsers = data => {\n  if (isEmpty(data.get('tags'))) {\n    return [];\n  }\n\n  return data.get('tags').map(user => fromJS({\n      id: user.get('userId'),\n      value: `${user.get('firstName')} ${user.get('lastName')}`\n    })\n  ).toArray();\n};\n\nconst getFormValues = data => ({\n  note: data.get('note') || '',\n  permissionLevel: data.get('permissionLevel') || 'pro',\n  assignedUsers: getAssignedUsers(data) || [],\n});\n\nconst isUntouched = (values, data) => {\n  const seeded = getFormValues(data);\n\n  return values.note === seeded.note\n    && values.permissionLevel === seeded.permissionLevel\n    && is(fromJS(values.assignedUsers), fromJS(seeded.assignedUsers));\n};\n\nclass NotesDrawerEdit extends React.Component<NotesDrawerType, {}> {\n  public state = getFormValues(this.props.data);\n\n  public componentDidUpdate(prevProps: Readonly<NotesDrawerType>, prevState: Readonly<{}>, snapshot?: any): void {\n    if (is(prevProps.data, this.props.data)) {\n      return;\n    }\n\n    // The list this note comes from is refetched in the background, so someone\n    // else's edit can land on the note being edited. Re-seeding the form then\n    // would discard what the user typed: only a form still showing what it was\n    // given adopts the new data. Switching to another note always re-seeds.\n    if (prevProps.selectedNoteId === this.props.selectedNoteId\n      && !isUntouched(this.state, prevProps.data)) {\n      return;\n    }\n\n    this.setState(getFormValues(this.props.data));\n  }\n\n  public handleFieldChange = key => e => {\n    this.setState({[key]: e.target.value});\n  }\n\n  public handleUserChange = assignedUsers => {\n    this.setState({assignedUsers});\n  }\n\n  public handleUserInputChange = searchTerm => {\n    const { searchUser, selectedProject, userIsAtsUser } = this.props;\n\n    if (searchTerm.length > 2) {\n      const projectVisibility = selectedProject ? selectedProject.get('visibility') : null;\n      const firmId = projectVisibility === 'firm' ? selectedProject.getIn(['createdBy', 'firm', 'id']) : null;\n      const officeId = projectVisibility === 'office' ? selectedProject.getIn(['createdBy', 'office', 'id']) : null;\n      searchUser({\n        searchTerm,\n        includeAtsUsers: projectVisibility !== 'public' ? userIsAtsUser ?? false : false,\n        firmId,\n        officeId\n      });\n    }\n  }\n\n  public onSave = () => {\n    const {\n      toggleHandle,\n      saveNote,\n      selectedNoteId,\n      type,\n      typeId,\n      data\n    } = this.props;\n    const {\n      note,\n      permissionLevel,\n      assignedUsers\n    } = this.state;\n    const { addedUsersIds, removedUsersIds } = getUsersDifference(data.get('tags', []), assignedUsers);\n\n\n    // TODO: Other types? Selected from app?\n    saveNote(\n      selectedNoteId,\n      type,\n      typeId,\n      note,\n      permissionLevel,\n      addedUsersIds,\n      removedUsersIds\n    );\n    toggleHandle();\n  }\n\n  public handleCancel = () => {\n    const {\n      selectedNoteId,\n      toggleHandle,\n      onClose\n    } = this.props;\n\n    (selectedNoteId === -1) ? onClose() : toggleHandle();\n  }\n\n  public render() {\n    const {\n      onClose,\n      classes,\n      data,\n      searchedUsers,\n      type,\n      typeId,\n      t\n    } = this.props;\n\n    const users = searchedUsers.get('result');\n    const isSearching = searchedUsers.get('isSearching');\n\n    const usersData = users.map(user => fromJS({\n      id: user.get('id'),\n      value: `${user.get('firstName')} ${user.get('lastName')}`\n    })).toList();\n\n    return (\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        { /* Header */}\n        <DrawerEditHeader title={t('notesDrawer.createEditNote')} handleClose={onClose} />\n\n        {/* Main */}\n        <Grid\n          className={classes.body}\n        >\n          <Grid\n            container={true}\n            direction='column'\n          >\n\n            {/* Note Detail(Content) */}\n            <Typography\n              variant='body2'\n              color='inherit'\n            >\n              {t('notesDrawer.noteDetail')}\n            </Typography>\n            <DrawerRow\n              muiIcon={<NoteRoundedIcon className={classes.notesIcon} />}\n              drawerView={false}\n              alignItems='flex-start'\n            >\n              <TextField\n                placeholder={t('notesDrawer.notePlaceholder')}\n                multiline={true}\n                rows='6'\n                value={this.state.note}\n                onChange={this.handleFieldChange('note')}\n                margin='normal'\n                InputProps={{style: { whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}}\n                fullWidth={true}\n              />\n            </DrawerRow>\n\n            {/* Note Visibility */}\n            <DrawerRow\n              muiIcon={<LanguageIcon />}\n              text={t('notesDrawer.setVisibility')}\n              drawerView={false}\n            />\n          </Grid>\n          <DrawerRow drawerView={false}>\n            <FormControl>\n              <RadioGroup\n                className={classes.group}\n                value={this.state.permissionLevel}\n                onChange={this.handleFieldChange('permissionLevel')}\n              >\n                <FormControlLabel\n                  value='pub'\n                  control={<Radio color='primary' />}\n                  label={<Typography variant='body2' className={classes.primaryTextColor}>\n                    {t('notesDrawer.setPublic')}\n                  </Typography>}\n                />\n                <FormControlLabel\n                  value='pro'\n                  control={<Radio color='primary' />}\n                  label={<Typography variant='body2' className={classes.primaryTextColor}>\n                    {t('notesDrawer.setProtected')}\n                  </Typography>}\n                />\n              </RadioGroup>\n            </FormControl>\n          </DrawerRow>\n\n          {/* Share with user section */}\n          {\n            ( this.state.permissionLevel !== 'pub') && (\n              <DrawerRow\n                muiIcon={<PersonIcon className={classes.userIcon}/>}\n                drawerView={false}\n              >\n                <FieldListItemReactSelect\n                  input={{\n                    value: this.state.assignedUsers\n                  } as any} // this is to fix typing since this component is supposed to be used with redux-form's Field\n                  meta={{} as any} // this is to fix typing since this component is supposed to be used with redux-form's Field\n                  inputProps={{\n                    isMulti: true,\n                    options: usersData,\n                    isLoading: isSearching,\n                    placeholder: t('notesDrawer.sharePlaceholder'),\n                    onChange: this.handleUserChange,\n                    onInputChange: this.handleUserInputChange,\n                  }}\n                  formControlProps={{\n                    fullWidth: true,\n                  }}\n                  styles={customStyles}\n                />\n              </DrawerRow>\n            )\n          }\n\n          {/* Cancel and Save Buttons Section */}\n          <DrawerEditCTA handleClose={this.handleCancel} handleSave={this.onSave} />\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  body: {\n    padding: theme.spacing(3, 3, 0, 3)\n  },\n  textColor: {\n    color: theme.palette.common.white\n  },\n  primaryTextColor: {\n    color: theme.palette.text.primary\n  },\n  title: {\n    marginLeft: theme.spacing(3)\n  },\n  notesIcon: {\n    marginTop: theme.spacing(3)\n  },\n  userIcon: {\n    marginBottom: theme.spacing()\n  }\n});\n\nconst mapStateToProps = (state, ownProps) => {\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const selectedProject = ownProps.type === 'project' ? makeSelectProject()(state) : null;\n\n  return {\n    selectedProject,\n    ...createStructuredSelector({\n      searchedUsers: makeSelectSearchedUsersWithUsers(),\n      userIsAtsUser: makeSelectUserIsAtsUser(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>, ownProps) => ({\n  searchUser: ({ searchTerm, firmId, officeId, includeAtsUsers }: { searchTerm: string, firmId?: number, officeId?: number, includeAtsUsers?: boolean }) => {\n    dispatch(new SearchUsersQuickAction({ searchTerm, firmId, officeId, includeAtsUsers }));\n  },\n  saveNote: (\n    selectedNoteId: number,\n    type: string,\n    typeId: number,\n    note: string,\n    permissionLevel: string,\n    addedUsersIds: number[],\n    removedUsersIds: number[]\n  ) => {\n    ownProps.selectedNoteId !== -1\n    ? dispatch(new EditNoteAction({\n      selectedNoteId,\n      type,\n      typeId,\n      note,\n      permissionLevel,\n      addedUsersIds,\n      removedUsersIds\n    }))\n    : dispatch(new CreateNoteAction({\n      note,\n      type,\n      typeId,\n      permissionLevel,\n      addedUsersIds,\n      removedUsersIds\n    }));\n  },\n});\n\nexport default compose<React.ComponentClass<INotesDrawerEditComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(NotesDrawerEdit);\n","import * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { Map } from 'immutable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { IAction, IMap } from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectCurrentNote, makeSelectCurrentNoteId } from '../../modules/NoteModule/selectors';\nimport NotesDrawerView from './View';\nimport NotesDrawerEdit from './Edit';\nimport {Note} from '../../models';\n\nexport const DEFAULT_DRAWER_ID = '__NotesViewDrawerDetails__';\n\ninterface INotesViewDrawerDetailsContentProps {\n  drawerId: string;\n  data?: any;\n}\n\ninterface INotesViewDrawerDetailsProps extends INotesViewDrawerDetailsContentProps {\n  content: string;\n  dispatch: Dispatch<IAction>;\n  selectedNote: IMap<Note>;\n  selectedNoteId: number;\n  componentProps: {\n    type?: string;\n    typeId?: number;\n  };\n}\n\nexport const CONTENT_EDIT_KEY = '__NotesViewDrawing__';\n\ntype NotesViewDrawerDetailsType = WithTranslation & INotesViewDrawerDetailsProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass NotesViewDrawerDetails extends React.Component<NotesViewDrawerDetailsType, {}> {\n  public handleClick = (contentId?: string) => () => {\n    const {drawerId, dispatch} = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: drawerId,\n      content: contentId,\n    }));\n  }\n\n  public handleClose = () => {\n    const {drawerId, dispatch} = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: drawerId,\n      open: false,\n    }));\n  }\n\n  public render() {\n    const {\n      content: _contentString,\n      selectedNote,\n      selectedNoteId,\n      componentProps = {},\n    } = this.props;\n\n    const {\n      type,\n      typeId,\n    } = componentProps;\n\n    const content = (() => {\n      switch (_contentString) {\n        case CONTENT_EDIT_KEY: {\n          return <NotesDrawerEdit\n            data={selectedNote}\n            toggleHandle={this.handleClick()}\n            onClose={this.handleClose}\n            selectedNoteId={selectedNoteId}\n            type={type}\n            typeId={typeId}\n          />;\n        }\n        default: {\n          return <NotesDrawerView\n            data={selectedNote}\n            toggleHandle={this.handleClick(CONTENT_EDIT_KEY)}\n            onClose={this.handleClose}\n          />;\n        }\n      }\n    })();\n\n    return <Grid>\n      {content}\n    </Grid>;\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  }\n});\n\nconst mapStateToProps = (state, props: INotesViewDrawerDetailsContentProps) => {\n  const { drawerId } = props;\n  return createStructuredSelector({\n    content: makeSelectOverlayComponentContent(drawerId),\n    selectedNote: makeSelectCurrentNote(),\n    selectedNoteId: makeSelectCurrentNoteId(),\n    componentProps: makeSelectOverlayComponentProp(drawerId),\n  })(state);\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<INotesViewDrawerDetailsContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(NotesViewDrawerDetails);\n","import React, {\n  useEffect,\n  useMemo,\n  useState\n} from 'react';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  Grid,\n  IconButton,\n  IconButtonProps,\n  MenuItem,\n  Select,\n  TextField,\n  Typography,\n  Link,\n  Menu,\n  Box\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport {\n  makeStyles,\n} from '@material-ui/core/styles';\nimport { useTranslation } from 'react-i18next';\nimport { makeSelectOverlayComponentProp, } from '../../modules/ApplicationModule/selectors';\nimport { useFormik } from 'formik';\nimport {\n  AMPLITUDE_EVENT,\n  BIDSTATUS_ARRAY,\n  PROJECT_LIST_DETAIL_PATH,\n  QUOTE_PATH,\n  getLocalePrefix\n} from '../../constants';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport {\n  UpdateProjectKeyContactsAndThenRedirectAction\n} from '../../modules/ProjectModule/actions';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { compose } from 'redux';\nimport { makeSelectQuotes } from '../../modules/QuoteModule/selectors';\nimport LockRoundedIcon from '@material-ui/icons/LockRounded';\nimport { round } from '../../utils/parseFormulaFields';\n\ninterface IProps {\n  drawerId: string;\n}\n\nconst useStyles = makeStyles(\n  (theme) => {\n    return {\n      expansionPanelSummary: {\n        cursor: 'auto',\n        margin: '0!important',\n        minHeight: '77px!important',\n        background: 'transparent!important'\n      },\n      root: { display: 'flex' },\n      body: { padding: theme.spacing(3, 3, 0, 3), },\n      title: { marginBottom: theme.spacing(1) },\n      bidStatusSelect: { width: '100%', color: theme.palette.primary.main },\n      bidValueField: { width: '100%', },\n      bidNoteLabel: { color: theme.palette.grey['600'], },\n      bidNoteField: { width: '100%', },\n      statusDropDownicon: { color: theme.palette.primary.main },\n      emphasized: { color: theme.palette.primary.main },\n      bidRowCell: { padding: theme.spacing(0.4), },\n      headerRowCell: { flexGrow: 1, flexBasis: 0 },\n      noExpandOnClickZone: { width: 0, flexGrow: 1 },\n      bidNoteLeftWhiteSpace: { backgroundColor: theme.palette.grey['100'], },\n      bidNoteContainer: {\n        flexGrow: 1,\n        paddingLeft: theme.spacing(0.4),\n        paddingBottom: 16,\n        paddingRight: 16,\n        paddingTop: 12,\n        backgroundColor: theme.palette.grey['100'],\n      },\n      bidRowRootContainer: { marginBottom: 12 },\n      bidRowAccordion: { flexGrow: 1 },\n      rowIcon: { transform: 'rotate(0deg)' },\n      rowIconExpanded: { transform: 'rotate(180deg)' },\n      expandIconContainer: {\n        width: 40,\n        cursor: 'pointer',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center'\n      }\n    };\n  }\n);\n\nconst BidStatusDrawerDetail: React.FC<IProps & WithAmplitudeData> = ({ amplitudeData, drawerId }) => {\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const overlayComponentPropsSelector = useMemo(() => makeSelectOverlayComponentProp(DEFAULT_DRAWER_ID), [DEFAULT_DRAWER_ID]);\n  const overlayComponentProps = useSelector(overlayComponentPropsSelector);\n  const [bidRowStates, setBidRowStates] = useState({});\n\n  const [editingBidIndex, setEditingBidIndex] = useState(-1);\n  const [selectedQuoteGrandTotals, setSelectedQuoteGrandTotals] = useState(null);\n  const [selectedGrandTotal, setSelectedGrandTotal] = useState(null);\n\n  const [isUpdatingBidInfo, setIsUpdatingBidInfo] = useState(false);\n\n  const [anchorEl, setAnchorEl] = useState(null);\n\n  const quotes = useSelector(makeSelectQuotes());\n\n  useEffect(() => {\n    if (typeof selectedGrandTotal === 'number') {\n      const fixedGrandTotal = round(selectedGrandTotal, 2).toFixed(2);\n      formik.setFieldValue(`project.keyContacts[${editingBidIndex}].bidValue`, fixedGrandTotal);\n      setEditingBidIndex(-1);\n      setSelectedGrandTotal(null);\n    }\n    if (typeof selectedGrandTotal === 'string') {\n      formik.setFieldValue(`project.keyContacts[${editingBidIndex}].bidValue`, selectedGrandTotal);\n      setEditingBidIndex(-1);\n      setSelectedGrandTotal(null);\n    }\n  }, [selectedGrandTotal]);\n\n  const formik = useFormik({\n    initialValues: {\n      project: overlayComponentProps.project.toJS()\n    },\n    onSubmit: values => {\n      // Update Project\n      const newProject = values.project;\n      if (Array.isArray(values.project.keyContacts)) {\n        newProject.keyContacts.forEach((keyContact) => {\n          if (keyContact.bidValue === '') {\n            keyContact.bidValue = null;\n          }\n        });\n      }\n\n      setIsUpdatingBidInfo(true);\n      dispatch(new UpdateProjectKeyContactsAndThenRedirectAction({\n        projectId: values.project.id,\n        projectKeyContacts: overlayComponentProps.project.get('keyContacts'),\n        keyContacts: values.project.keyContacts,\n        redirect: `${PROJECT_LIST_DETAIL_PATH}/${values.project.id}`,\n        onSuccess: () => handleClose(),\n        onFailed: () => {\n          setIsUpdatingBidInfo(false);\n        }\n      }));\n    },\n  });\n\n  const handleClose = () => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: drawerId,\n      open: false,\n    }));\n  };\n  const handleSave = () => {\n    amplitude.logEvent(AMPLITUDE_EVENT.saveBidStatusDrawer, amplitudeData());\n  };\n  const handleDropDownValueChange = (index) => (e) => {\n    if (e.target.value === '') {\n      formik.setFieldValue(`project.keyContacts[${index}].bidValue`, null);\n    } else if (e.target.value === 'Awarded') {\n      const bidQuoteId = formik.values.project.keyContacts[index].quoteId;\n      const grandTotals = quotes.getIn([bidQuoteId, 'grandTotals']);\n      if (grandTotals && grandTotals.size > 1) {\n        const target = document.getElementById(`project.keyContacts[${index}].bidValue`);\n        if (target) {\n          setEditingBidIndex(index);\n          setSelectedQuoteGrandTotals(grandTotals);\n          setAnchorEl(target);\n        }\n      } else if (grandTotals?.size === 1) {\n        const formattedGrandTotal = grandTotals.first().get('formattedValue');\n        const grandTotal = grandTotals.first().get('value') || 0;\n        const fixedGrandTotal = round(parseFloat(grandTotal), 2).toFixed(2);\n        formik.setFieldValue(`project.keyContacts[${index}].bidValue`, formattedGrandTotal || fixedGrandTotal);\n      }\n    }\n    formik.handleChange(e);\n  };\n\n  const handleBidValueChange = (index) => (e) => {\n    const regex = /^\\d*\\.?(\\d{1,2})?$/;\n    const value = e.target.value;\n    if (value === '') {\n      formik.setFieldValue(`project.keyContacts[${index}].bidValue`, null);\n      formik.handleChange(e);\n    } else if (regex.test(value)) {\n      formik.setFieldValue(`project.keyContacts[${index}].bidValue`, e.target.value);\n      formik.handleChange(e);\n    }\n  };\n\n  const handleOnBidValueBlur = (index) => (e) => {\n    const value = e.target.value;\n    if (value) {\n      if (isNaN(value)) { // resolves '.' to ''\n        formik.setFieldValue(`project.keyContacts[${index}].bidValue`, null);\n      } else { // for cases such as '6.' or '.8', it would be updated to '6' and '0.8' respectively\n        formik.setFieldValue(`project.keyContacts[${index}].bidValue`, String(Number(value)));\n      }\n      formik.handleChange(e);\n    }\n  };\n\n  const disableEventPropagation = (event) => {\n    event.stopPropagation();\n  };\n\n  return (\n    <Grid className={classes.root} container={true} direction='column' wrap='nowrap'>\n      <DrawerEditHeader title={t('bidStatusDrawer.bidStatus')} handleClose={handleClose} />\n      <Grid container={true} direction='column' className={classes.body}>\n        <Typography variant='caption' color='inherit' className={classes.title}>\n          {t('bidStatusDrawer.assignBidAwards')}\n        </Typography>\n        <form onSubmit={formik.handleSubmit}>\n          <Grid container={true} direction='column'>\n            {/* Header row */}\n            <Grid container={true} direction='row' item={true}>\n              <Grid style={{ width: 40 }} item={true}>{''}</Grid>\n              <Grid className={`${classes.bidRowCell} ${classes.headerRowCell}`} item={true}>\n                <Typography variant='caption' color='inherit'> {t('bidStatusDrawer.contact')} </Typography>\n              </Grid>\n              <Grid className={`${classes.bidRowCell} ${classes.headerRowCell}`} item={true}>\n                <Typography variant='caption' color='inherit'> {t('bidStatusDrawer.bidStatus')} </Typography>\n              </Grid>\n              <Grid className={`${classes.bidRowCell} ${classes.headerRowCell}`} item={true}>\n                <Typography variant='caption' color='inherit'> {t('bidStatusDrawer.bidValue')} </Typography>\n              </Grid>\n            </Grid>\n            {/* filter out if having quoteId but not found from quotes  */}\n            {formik.values.project && formik.values.project.keyContacts.map((keyContact, index) => {\n              if (keyContact.quoteId && !quotes.get(keyContact.quoteId)) {\n                return null;\n              }\n              const handleExpandIconClick = (event) => {\n                const newState = { ...bidRowStates };\n                newState[index] = typeof newState[index] === 'undefined' ? true : !newState[index];\n                setBidRowStates(newState);\n              };\n              const isRowExpanded = !!(bidRowStates[index] ?? false);\n\n              const contactDisplay = keyContact.contact.firstName ?\n                <> <Typography color='inherit' variant='caption'>{keyContact.contact.firstName}</Typography> </>\n                : <> <Typography color='inherit' variant='caption'>{keyContact.contact.organization}</Typography> </>;\n\n              const quoteId = keyContact.quoteId ?? null;\n              const quoteNumber = quotes.getIn([quoteId, 'quoteNumber']);\n              const quoteNumberLinkDisplay =\n                (quoteNumber ?? null) !== null && quoteId !== null ?\n                  (\n                    <Box display='flex' alignItems='center'>\n                      <Link href={`${window.location.origin}${getLocalePrefix()}${QUOTE_PATH}/${quoteId}`} target={'_blank'} style={{ textAlign: 'center' }}>\n                        <Typography className={classes.emphasized} variant='caption' color='inherit'>\n                          {quoteNumber}\n                        </Typography>\n                      </Link>\n                      {\n                        quotes.getIn([quoteId, 'locked']) && <LockRoundedIcon fontSize='small' color='disabled' />\n                      }\n                    </Box>\n                  ) :\n                  (<></>);\n\n              return (\n                <Grid container={true} direction='row' className={`${classes.bidRowRootContainer}`}\n                  key={index}\n                  style={{ marginBottom: 12 }}\n                  item={true}>\n                  <ExpansionPanel className={`${classes.bidRowAccordion}`} style={{ flexGrow: 1 }} square={true} disabled={quotes.getIn([keyContact.quoteId, 'locked'])}\n                    elevation={0}>\n                    <ExpansionPanelSummary style={{ padding: 0, margin: '0!important' }}\n                      classes={{\n                        content: classes.expansionPanelSummary,\n                        expanded: classes.expansionPanelSummary\n                      }}>\n                      <Grid container={true} direction='row'>\n                        <Grid className={`${classes.bidRowCell} ${classes.expandIconContainer}`}\n                          onClick={handleExpandIconClick} item={true} container={true}>\n                          <ExpandMoreIcon\n                            className={isRowExpanded ? `${classes.rowIconExpanded}` : `${classes.rowIcon}`} />\n                        </Grid>\n\n                        <Grid className={`${classes.noExpandOnClickZone}`} item={true} direction='row' container={true}\n                          onClick={disableEventPropagation}>\n\n                          <Grid xs={4} item={true} direction='row' container={true} className={classes.bidRowCell}\n                            alignItems='center'>\n                            <Grid item={true}> {contactDisplay} </Grid>\n                          </Grid>\n\n                          <Grid className={classes.bidRowCell}\n                            style={{ display: 'flex', verticalAlign: 'middle', justifyContent: 'center' }}\n                            xs={4} item={true} container={true} direction='column'>\n                            <Select\n                              disableUnderline={true}\n                              className={classes.bidStatusSelect}\n                              classes={{ icon: classes.statusDropDownicon }}\n                              value={formik.values.project.keyContacts[index].bidStatus || ''}\n                              onChange={handleDropDownValueChange(index)}\n                              displayEmpty={true}\n                              name={`project.keyContacts[${index}].bidStatus`}\n                              id={`project.keyContacts[${index}].bidStatus`}\n                            >\n                              <MenuItem value=''>-</MenuItem>\n                              {BIDSTATUS_ARRAY.map(({ value, labelPath, id }) => (\n                                <MenuItem key={id} value={value}>\n                                  <Typography variant='caption' color='inherit'>\n                                    {t(labelPath)}\n                                  </Typography>\n                                </MenuItem>\n                              ))}\n                            </Select>\n\n                            {quoteNumberLinkDisplay}\n                          </Grid>\n\n                          <Grid className={classes.bidRowCell} item={true} container={true} xs={4} alignItems='center'>\n                            <TextField\n                              onFocus={disableEventPropagation}\n                              disabled={!formik.values.project.keyContacts[index].bidStatus}\n                              fullWidth={true}\n                              id={`project.keyContacts[${index}].bidValue`}\n                              name={`project.keyContacts[${index}].bidValue`}\n                              value={formik.values.project.keyContacts[index].bidValue ?? ''}\n                              onChange={handleBidValueChange(index)}\n                              onBlur={handleOnBidValueBlur(index)}\n                            />\n                          </Grid>\n                        </Grid>\n                      </Grid>\n                    </ExpansionPanelSummary>\n                    <ExpansionPanelDetails style={{ padding: 0, margin: 0 }}>\n                      <Grid container={true} direction='row' item={true}>\n                        <Grid style={{ width: 8 }} item={true}>{''}</Grid>\n                        <Grid className={`${classes.bidNoteLeftWhiteSpace}`}\n                          style={{ width: 32 }} item={true}>{''}</Grid>\n                        <Grid className={`${classes.bidNoteContainer}`} item={true}>\n                          <Typography variant='caption' className={`${classes.title} ${classes.bidNoteLabel}`}>\n                            {t('bidStatusDrawer.bidNote')}\n                          </Typography>\n                          <TextField\n                            className={classes.bidNoteField}\n                            multiline={true}\n                            id={`project.keyContacts[${index}].bidNote`}\n                            name={`project.keyContacts[${index}].bidNote`}\n                            value={formik.values.project.keyContacts[index].bidNote || ''}\n                            onChange={formik.handleChange}\n                          />\n                        </Grid>\n                      </Grid>\n                    </ExpansionPanelDetails>\n                  </ExpansionPanel>\n                </Grid>\n              );\n            })}\n          </Grid>\n          <DrawerEditCTA\n            isProcessing={isUpdatingBidInfo}\n            isProcessingText={t('generalLoading.updating')}\n            handleClose={handleClose}\n            handleSave={handleSave}\n          />\n        </form>\n      </Grid>\n\n      <Menu\n        anchorEl={anchorEl}\n        anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n        // transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n        keepMounted={true}\n        open={Boolean(anchorEl)}\n      >\n        <Box p={1}>\n          <MenuItem disabled={true}>\n            <Typography variant='h6'>\n              {t('quoteCustomerTable.selectGrandTotalsTitle')}\n            </Typography>\n          </MenuItem>\n          {selectedQuoteGrandTotals?.entrySeq().map((grandTotal, key) => (\n            <MenuItem key={key} onClick={() => {\n              setSelectedGrandTotal(grandTotal[1].get('formattedValue') || grandTotal[1].get('value'));\n              setAnchorEl(null);\n            }}>\n              <Grid container={true} justify='space-between' alignItems='center'>\n                <Typography variant='h6'>{grandTotal[0]}</Typography>\n                <Typography variant='h6'>{grandTotal[1].get('formattedValue') || grandTotal[1].get('value')}</Typography>\n              </Grid>\n\n            </MenuItem>\n          ))}\n        </Box>\n      </Menu>\n\n    </Grid>\n  );\n};\n\nexport const DEFAULT_DRAWER_ID = '__BidStatusViewDrawerDetail__';\nexport default compose<React.FC<IProps>>(\n  withAmplitudeData,\n)(BidStatusDrawerDetail);\n","import React from 'react';\nimport { makeStyles } from '@material-ui/styles';\n\nimport ControlledDrawer from '../../components/ControlledDrawer';\nimport TaskViewDrawerDetails, { DEFAULT_DRAWER_ID as TASK_DRAWER_ID} from '../../components/TaskViewDrawerDetails';\nimport NotesViewDrawerDetails, { DEFAULT_DRAWER_ID as NOTE_DRAWER_ID} from '../../components/NotesViewDrawerDetails';\nimport BidStatusViewDrawerDetails, { DEFAULT_DRAWER_ID as BID_DRAWER_ID} from '../../components/BidStatusViewDrawerDetails';\nconst useStyles = makeStyles({\n  root: {\n    flexGrow: 0,\n  },\n});\nconst AppGlobalComponents: React.FC = (props) => {\n  const classes = useStyles(props);\n  return (<>\n    <ControlledDrawer\n      classes={{root: classes.root}}\n      localKey={TASK_DRAWER_ID}\n      menuComponent={<TaskViewDrawerDetails drawerId={TASK_DRAWER_ID} />}\n    />\n    <ControlledDrawer\n      classes={{root: classes.root}}\n      localKey={NOTE_DRAWER_ID}\n      menuComponent={<NotesViewDrawerDetails drawerId={NOTE_DRAWER_ID}/>}\n    />\n    <ControlledDrawer\n      classes={{root: classes.root}}\n      localKey={BID_DRAWER_ID}\n      menuComponent={<BidStatusViewDrawerDetails drawerId={BID_DRAWER_ID}/>}\n      drawerWidth={367}\n    />\n  </>);\n};\n\nexport default AppGlobalComponents;\n","import * as React from 'react';\nimport {\n  Typography,\n  Paper,\n  Grid,\n  TextField,\n  InputAdornment,\n  Button,\n  withStyles,\n  Theme,\n  WithStyles,\n  CircularProgress\n} from '@material-ui/core';\n\nimport {\n  compose,\n} from 'redux';\n\nimport {\n  connect\n} from 'react-redux';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\n\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport {\n  ControlledModal,\n} from '../../components';\n\nimport {\n  GetLogInAsUsersAction,\n  SetLogInAsUsersIsSearchingAction,\n  SetLogInAsUsersAction\n} from '../../modules/AccountModule/actions';\n\nimport { makeSelectLogInAsUsers, makeSelectLogInAsUsersIsSearching } from '../../modules/AccountModule/selectors';\n\nimport VirtualizedTable from '../VirtualizedTable';\nimport {\n  LogInAsAndRedirectAction,\n} from '../../modules/AtsModule/actions';\nimport { User } from '../../models';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces';\nimport { Map } from 'immutable';\nimport classnames from 'classnames';\nimport { CREATE_NEW_QUOTE_PATH, QUOTE_PATH } from '../../constants';\nimport {makeSelectUserEmail} from '../../modules/AtsModule/selectors';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\n\ninterface ILogInAsModalComponentProps {\n}\n\ninterface ILogInAsModalProps extends ILogInAsModalComponentProps {\n  theme: Theme;\n  dispatch: React.Dispatch<IAction>;\n  users: Map<number, IMap<User>>;\n  logInAsUsersIsSearching: boolean;\n}\n\ntype ILogInAsModal = ILogInAsModalProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => ({\n  logInAsModal: {\n    height: theme.spacing() * 35,\n    justifyContent: 'center',\n    alignItems: 'center'\n   },\n   logInAsModalButtonStyle: {\n    margin: `${theme.spacing() * 5}px 0 ${theme.spacing()}px`,\n   },\n   logInAsModalTable: {\n    justifyContent: 'flex-start',\n    alignItems: 'flex-start'\n   }\n});\n\nexport const MODAL_ID = '__modal__log_in_as__';\nclass LogInAsModal extends React.Component<ILogInAsModal> {\n  public state = {\n    inputValue: '',\n  };\n\n  public componentDidUpdate(prevProps: any) {\n    const {\n      users,\n      dispatch\n    } = this.props;\n    const {\n      inputValue\n    } = this.state;\n    const userCount = users.count();\n\n    if (inputValue === '' && userCount > 0) {\n      dispatch(new SetLogInAsUsersAction(Map()));\n    }\n  }\n\n  public handleInputChange = (e: any) => {\n    this.setState({\n      inputValue: e.target.value,\n    });\n    if (e.target.value !== '') {\n      this.props.dispatch(new SetLogInAsUsersIsSearchingAction(true));\n      this.props.dispatch(new GetLogInAsUsersAction(e.target.value));\n    }\n  }\n\n  public render() {\n    const {\n      theme,\n      classes,\n      t,\n      dispatch,\n      users,\n      logInAsUsersIsSearching,\n    } = this.props;\n\n    const {\n      inputValue = ''\n    } = this.state;\n    return <ControlledModal\n      localKey={MODAL_ID}\n      maxWidth='sm'\n    >\n      <Paper style={{ padding: `${theme.spacing() * 3}px`, width: `${theme.spacing() * 40}px`}}>\n        <Typography\n          variant='h5'\n          style={{marginBottom: `${theme.spacing() * 3}px`}}\n        >\n          {t('LogInAsModal.logInAs')}\n        </Typography>\n        <Grid item={true}>\n          <TextField\n            autoFocus={true}\n            value={inputValue}\n            onChange={this.handleInputChange}\n            fullWidth={true}\n            InputProps={{\n            startAdornment: <InputAdornment position='start'>\n                              <FontAwesomeIcon icon='search' style={{color: '#A5A5A5'}}/> {/* Temporary hardcoded colour until theme config TODO */}\n                            </InputAdornment>,\n            }}\n          />\n        </Grid>\n        <Grid\n            container={true}\n            direction='column'\n            className={classnames({[classes.logInAsModal]: true, [classes.logInAsModalTable]: users.count() > 0 && logInAsUsersIsSearching === false})}\n        >\n          {logInAsUsersIsSearching === true\n            // ? <Typography variant='body1'>Searching...</Typography>\n            ? <CircularProgress color='primary' />\n            : users.count() > 0\n              ? <VirtualizedTable\n                  tableData={users}\n                  columnProps={{\n                    columns: [\n                      {\n                        label: 'Icon',\n                        celltype: 'NoImagePlaceholder',\n                        maxWidth: theme.spacing() * 7\n                      },\n                      {\n                        label: 'Name',\n                        celltype: 'LogInAsModalCell',\n                        style: {\n                          display: 'flex',\n                          flexDirection: 'column',\n                          justifyContent: 'center'\n                        }\n                      },\n                    ],\n                  }}\n                  tableProps={{\n                    onRowClick: (rowData: IMap<User>) => () => {\n                      const username = rowData.get('username');\n                      console.debug('logging in as', {\n                        rowData,\n                        username,\n                      });\n                      if (username != null) {\n                        const path = window.location.pathname;\n                        if (path.includes(CREATE_NEW_QUOTE_PATH) || (path.includes(QUOTE_PATH) && path.includes('/edit')) ) {\n                          const ok = confirm(t('general.leavingAlertContent'));\n                          if (ok) {\n                            dispatch(new ToggleOverlayComponentAction({\n                              id: MODAL_ID,\n                              open: false,\n                            }));\n                            dispatch(new LogInAsAndRedirectAction({ username }));\n                          } else {\n                            return ;\n                          }\n                        } else {\n                          dispatch(new ToggleOverlayComponentAction({\n                            id: MODAL_ID,\n                            open: false,\n                          }));\n                          dispatch(new LogInAsAndRedirectAction({ username }));\n                        }\n                      }\n                    }, /* check out the console, rowData will have all the data for the row that you clicked */\n                    rowHeight: theme.spacing() * 7,\n                    headerHeight: theme.spacing() * 7,\n                    rowStyle: {\n                      padding: '0 14px 0 0', /* 14px to account for the scroll bar, unfortunately this is how react virtualized handles it */\n                      display: 'flex',\n                      justifyContent: 'space-between',\n                      outline: 'none',\n                      cursor: 'pointer',\n                    }\n                  }}\n                />\n              :\n                <React.Fragment>\n                  <Typography variant='h6'>\n                    {t('LogInAsModal.noResults')}\n                  </Typography>\n                  <Typography variant='body1'>\n                    {t('LogInAsModal.cantFind')}\n                  </Typography>\n                </React.Fragment>\n          }\n        </Grid>\n      </Paper>\n    </ControlledModal>;\n  }\n}\n\nfunction mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  users: makeSelectLogInAsUsers(),\n  logInAsUsersIsSearching: makeSelectLogInAsUsersIsSearching(),\n});\n\nexport default compose<React.ComponentClass<ILogInAsModalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(LogInAsModal);\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n  Theme,\n  WithTheme,\n} from '@material-ui/core/styles';\n\nimport {\n  Menu,\n  Typography,\n  Grid,\n  Avatar,\n  Tooltip,\n} from '@material-ui/core';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    width: 205,\n    padding: theme.spacing(0.5, 1),\n    backgroundColor: theme.palette.primary[100],\n    border: `2px solid ${theme.palette.primary[100]}`,\n    borderRadius: '10px',\n    cursor: 'pointer',\n  },\n  nameDisplay: {\n    fontWeight: 700,\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap'\n  },\n  avatar: {\n    backgroundColor: theme.palette.primary.main,\n    textTransform: 'uppercase',\n    width: theme.spacing(4.5),\n    height: theme.spacing(4.5)\n  },\n});\n\ninterface ILoginAsButtonDropDownComponentProps {\n  nameDisplay: string;\n  initial: string;\n}\n\ninterface ILoginAsButtonDropDownProps extends ILoginAsButtonDropDownComponentProps {\n}\n\ntype LoginAsButtonDropDownProps = ILoginAsButtonDropDownProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithTranslation;\n\ninterface ILoginAsButtonDropDownState {\n  anchorEl: React.ReactNode;\n}\n\n\nclass LoginAsButtonDropDown extends React.Component<LoginAsButtonDropDownProps, ILoginAsButtonDropDownState> {\n\n  public state = {\n    anchorEl: null,\n  };\n\n  public openDropdown = (e) => {\n    this.setState({ anchorEl: e.currentTarget });\n  }\n  public closeDropdown = () => {\n    this.setState({ anchorEl: null });\n  }\n\n  public render() {\n    const {\n      nameDisplay,\n      initial,\n      children,\n      classes,\n      theme,\n      t\n    } = this.props;\n\n    const {\n      anchorEl,\n    } = this.state;\n\n    const renderButton = () => {\n      return (\n        <Grid container={true} justify='space-between' className={classes.button} onClick={this.openDropdown}\n        style={Boolean(anchorEl) ? {border: `2px solid ${theme.palette.primary.main}`, outline: '2px solid white', outlineOffset: '-4px',} : {}}>\n          <Grid container={true} item={true} xs={9} alignItems='flex-start'>\n            <Grid container={true}>\n              <Typography variant='caption'>\n                {t('UserMenu.loggedInAs')}\n              </Typography>\n            </Grid>\n            <Grid container={true}>\n              <Tooltip title={nameDisplay}>\n                <Typography\n                  variant='body1'\n                  className={classes.nameDisplay}\n                  >\n                  {nameDisplay}\n                </Typography>\n              </Tooltip>\n            </Grid>\n          </Grid>\n          <Grid container={true} item={true} xs={3} justify='flex-end' alignItems='center'>\n            <Avatar className={classes.avatar}><Typography style={{color: 'white'}}>{initial}</Typography></Avatar>\n          </Grid>\n        </Grid>\n      );\n    };\n    return (\n      <div>\n        {renderButton()}\n        <Menu\n          open={Boolean(anchorEl)}\n          onClose={this.closeDropdown}\n          anchorEl={anchorEl}\n          getContentAnchorEl={null}\n          anchorOrigin={{\n            vertical: 'bottom',\n            horizontal: 'center',\n          }}\n          transformOrigin={{\n            vertical: 'top',\n            horizontal: 'center',\n          }}\n          PaperProps={{\n            style: {\n              width: 205,\n            },\n          }}\n        >\n          {children}\n        </Menu>\n      </div>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<ILoginAsButtonDropDownComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations')\n)(LoginAsButtonDropDown);\n","import { makeStyles } from '@material-ui/styles';\nimport {\n  Grid,\n  Theme,\n  Typography,\n  Avatar,\n  Radio,\n  Tooltip\n} from '@material-ui/core/';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport _ from 'lodash';\n// @ts-ignore\nimport { Link } from 'react-router-dom';\nimport WidgetMenuItem from '../../WidgetMenuItem';\nimport { makeSelectNotificationByIndex } from '../../../modules/NotificationModule/selectors';\nimport { IMap } from 'ats-utils/src';\nimport moment from 'moment';\nimport { CloseNotificationDropDown, MarkNotificationReadOrUnread } from '../../../modules/NotificationModule/actions';\n\ninterface INotifacationListItemProps {\n  index?: number;\n  style?: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  avatar: {\n    width: 56,\n    height: 56\n  },\n  contentText: {\n    marginBottom: 4,\n    whiteSpace: 'pre-wrap'\n  }\n}));\n\nconst getAvatarInitial = (username: string) => {\n  if (username) {\n    const names = username.split(' ');\n    let initials = names[0].substring(0, 1).toUpperCase();\n    if (names.length > 1) {\n      initials += names[names.length - 1].substring(0, 1).toUpperCase();\n    }\n    return initials;\n  } else {\n    return '';\n  }\n};\n\nconst getNotificationContent = (template: string, templateParams: IMap<any>) => {\n  const templateParamsKeys = templateParams.keySeq().toArray();\n\n  if (!templateParamsKeys.length || !template) {\n    return 'Error: Missing template or templateParams';\n  }\n\n  let content = template;\n  templateParamsKeys.forEach(key => content = content.replaceAll(key, templateParams.get(key)));\n\n  return content;\n};\n\nconst getActionContent = (href: string, linkParams: IMap<any>) => {\n  const linkParamsKeys = linkParams.keySeq().toArray();\n\n  if (!linkParamsKeys.length || !href) {\n    return null;\n  }\n\n  let content = href;\n  linkParamsKeys.forEach(key => content = content.replaceAll(key, linkParams.get(key)));\n\n  return content;\n};\n\nconst NotifacationListItem: FC<INotifacationListItemProps> = ({\n  index,\n  style\n}) => {\n\n  const {\n    avatar,\n    contentText\n  } = useStyles();\n\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const notification = useSelector(makeSelectNotificationByIndex(index));\n\n  if (!notification) {\n    return null;\n  }\n\n  const notificationId = notification.get('id');\n  const template = notification.get('template');\n  const templateParams = notification.get('templateParams');\n  const href = notification.get('href');\n  const linkParams = notification.get('linkParams');\n  const dateTime = notification.get('createdDate');\n  const isRead = notification.get('isRead');\n\n  const initial = getAvatarInitial(templateParams.get(':userName'));\n  const content = getNotificationContent(template, templateParams);\n  const actionHref = getActionContent(href, linkParams);\n\n  const onActionButtonClick = () => {\n    dispatch(new MarkNotificationReadOrUnread({ notificationId, isRead: false }));\n    dispatch(new CloseNotificationDropDown());\n  };\n\n  return (\n    <WidgetMenuItem\n      MenuItemProps={{\n        button: true,\n        // disableFocusRipple: true,\n        disableRipple: true,\n        disableTouchRipple: true,\n        style: {\n          ...style,\n          fontWeight: 'bold',\n          cursor: 'default',\n          backgroundColor: isRead ? '#FFFFFF' : '#F7F7F7',\n          borderBottom: '0.1px solid #D8D8D8'\n        }\n      }}\n    >\n      <Grid container={true}>\n        {/* testing */}\n        {/* <Grid item={true} xs={1} container={true} justify='center' alignContent='center'>\n          {notificationId}\n        </Grid> */}\n\n        <Grid item={true} xs={2} container={true} justify='center' alignContent='center'>\n          <Avatar className={avatar}>{initial}</Avatar>\n        </Grid>\n\n        <Grid item={true} xs={true}>\n          <Typography className={contentText}>{content}</Typography>\n          <Typography className={contentText}>{moment.utc(dateTime).local().format('hh:mm YYYY-MM-DD')}</Typography>\n          {\n            actionHref ?\n              <Link style={{ display: 'block', maxWidth: 80 }} to={{ pathname: actionHref, state: { refreshKey: new Date().getTime() } }} onClick={onActionButtonClick}>\n                <Typography style={{ maxWidth: 80 }} color='primary'>{t('notification.viewDetails')}</Typography>\n              </Link>\n              :\n              null\n          }\n        </Grid>\n\n        <Grid item={true} xs={1} container={true} justify='center' alignContent='center'>\n          <Tooltip title={isRead ? t('notification.markAsUnread') : t('notification.markAsRead')}>\n            <Radio color='primary' size='small' checked={!isRead} onClick={() => dispatch(new MarkNotificationReadOrUnread({ notificationId, isRead }))} />\n          </Tooltip>\n        </Grid>\n\n      </Grid>\n    </WidgetMenuItem>\n  );\n};\n\n\nexport default NotifacationListItem;","import { makeStyles } from '@material-ui/styles';\nimport {\n  Theme,\n} from '@material-ui/core/';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport _ from 'lodash';\nimport {\n  InfiniteLoader,\n  List as VirtualizedList,\n  CellMeasurer,\n  CellMeasurerCache,\n} from 'react-virtualized';\nimport NotificationListItem from './NotificationListItem';\nimport { makeSelectListItemStatus, makeSelectNotificationsCount, makeSelectNotificationsSize, makeSelectShouldScrollToTop } from '../../modules/NotificationModule/selectors';\nimport { GetNotification, SetListItemStatusLoaded, SetListItemStatusLoading, SetShouldScrollToTop } from '../../modules/NotificationModule/actions';\nimport { List } from 'immutable';\n\ninterface INotifacationListComponentProps {\n}\ninterface INotifacationListProps extends INotifacationListComponentProps {\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n}));\n\nconst NotifacationList: FC<INotifacationListProps> = ({\n}) => {\n  const dispatch = useDispatch();\n  const rowCount = useSelector(makeSelectNotificationsCount());\n  const statusList = useSelector(makeSelectListItemStatus());\n  const scrollToTop = useSelector(makeSelectShouldScrollToTop());\n\n  const [cache] = useState(new CellMeasurerCache({ fixedWidth: true, defaultHeight: 96 }));\n\n  useEffect(() => {\n    if (scrollToTop) {\n      dispatch(new SetShouldScrollToTop(!scrollToTop));\n    }\n  }, [statusList]);\n\n  const getRowHeight = (ref) => {\n    const rowHeight = cache.rowHeight(ref);\n    return rowHeight >= 96 ? rowHeight : 96;\n  };\n\n  const isRowLoaded = ({ index }) => {\n    return !!statusList.get(index);\n  };\n\n  const loadMoreRows = ({ startIndex, stopIndex }) => {\n    let promiseResolver;\n    const promis = new Promise(resolve => {\n      promiseResolver = resolve;\n    }).then((ids: List<number>) => {\n      let ids_index = 0;\n      for (let index = startIndex; index <= stopIndex; index++) {\n        if (!statusList.get(index)) {\n          dispatch(new SetListItemStatusLoaded({ index, id: ids.get(ids_index) }));\n        }\n        ids_index++;\n      }\n    });\n    dispatch(new GetNotification({\n      limit: stopIndex - startIndex + 1,\n      offset: startIndex,\n      promise: promiseResolver\n    }));\n\n    return promis;\n  };\n\n  const rowRenderer = ({ index, key, parent, style }) => (\n    <CellMeasurer\n      cache={cache}\n      key={key}\n      columnIndex={0}\n      rowIndex={index}\n      parent={parent}\n    >\n      <NotificationListItem\n        index={index}\n        style={style}\n      />\n    </CellMeasurer>\n  );\n\n  return (\n    <InfiniteLoader\n      isRowLoaded={isRowLoaded}\n      loadMoreRows={loadMoreRows}\n      rowCount={rowCount}\n    >\n      {({ onRowsRendered, registerChild, }) => (\n        <VirtualizedList\n          overscanRowCount={6}\n          height={400}\n          onRowsRendered={onRowsRendered}\n          scrollTop={scrollToTop ? 0 : null}\n          ref={registerChild}\n          rowCount={rowCount}\n          rowHeight={getRowHeight}\n          rowRenderer={rowRenderer}\n          width={480}\n        />\n      )}\n    </InfiniteLoader>\n  );\n\n};\n\nexport default NotifacationList;","import React from 'react';\nimport {Button} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport VpnKeyIcon from '@material-ui/icons/VpnKey';\nimport {ButtonProps} from '@material-ui/core/Button';\n\nconst GuestLoginButton = (props: ButtonProps) => {\n  const { t } = useTranslation('translations');\n  return (\n      <Button variant='outlined' startIcon={<VpnKeyIcon />} color='primary' {...props}>\n        {t('guestLoginButton.login')}\n      </Button>\n  );\n};\n\nexport default GuestLoginButton;","import React from 'react';\nimport PersonIcon from '@material-ui/icons/Person';\nimport {Button} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport {ButtonProps} from '@material-ui/core/Button';\n\nconst GuestSignUpButton = (props: ButtonProps) => {\n    const { t } = useTranslation('translations');\n    return (\n        <Button variant='contained' startIcon={<PersonIcon />} color='primary' {...props}>\n            {t('guestSignUpButton.signUp')}\n        </Button>\n    );\n};\n\nexport default GuestSignUpButton;\n\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import * as React from 'react';\nimport classNames from 'classnames';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport {\n  Divider,\n  MenuList,\n  MenuItem,\n  Grid,\n  Theme,\n  Fab,\n  Typography,\n  Avatar,\n  Tooltip,\n  Button,\n  Radio,\n  Badge,\n  InputLabel,\n  Select\n} from '@material-ui/core';\n\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\n\nimport {\n  Map,\n  List,\n} from 'immutable';\n\nimport {\n  isFunction,\n} from 'lodash';\n\nimport {\n  FontAwesomeIcon,\n} from '@fortawesome/react-fontawesome';\n\nimport alphaImg from '../../images/dashboard/alpha.svg';\nimport betaImg from '../../images/dashboard/beta.svg';\nimport mobileLogoImg from '../../images/ATSIcon-Colour.svg';\nimport quoteConnectMobile from '../../images/logo/QuoteConnect_Mobile.svg';\nimport { ReactComponent as Robot } from '../../images/quoteTakeoffRobot.svg';\n\nimport logoImg from '../../images/ats-project-tracker-white.svg';\nimport {\n  makeSelectIdentityObject,\n  makeSelectEnv,\n  makeSelectUserRole,\n  makeSelectConfig,\n  makeSelectSite,\n  makeSelectDomain,\n  makeSelectAppId,\n  makeSelectUserIsAnyAiUser\n} from '../../modules/AtsModule/selectors';\nimport {\n  makeSelectLocale,\n} from '../../modules/LanguageModule/selectors';\nimport {\n  ChangeLocaleAction,\n} from '../../modules/LanguageModule/actions';\nimport {\n  ToggleOverlayComponentAction, SetScrollNodeAction, CloseMobileAppMenuAction, ToggleLiveChatAction,\n  ToggleTakeoffListAction,\n} from '../../modules/ApplicationModule/actions';\nimport {\n  makeSelectliveChatOpen,\n  makeSelectOverlayComponent,\n  makeSelectTakeoffListOpen,\n} from '../../modules/ApplicationModule/selectors';\nimport Image from '../../components/Image';\nimport MainMenuItems from '../../components/MainMenuItems';\nimport WidgetMenuItem from '../../components/WidgetMenuItem';\nimport DropdownContainer from '../../components/DropdownContainer';\nimport AppGlobalComponents from '../AppGlobalComponents';\n\nimport {\n  Identity,\n  AclRoles,\n} from '../../models';\n\nimport {\n  DASHBOARD_PATH,\n  SPEC_TOOL_ID,\n  PROJECT_TRACKER_ID,\n  QUOTE_TOOL_ID,\n  SiteName,\n  PIM_ID,\n  DEBUG_PATH,\n  AMPLITUDE_EVENT,\n  CREATE_NEW_QUOTE_PATH,\n  QUOTE_PATH,\n  AMP_ID,\n  FRANKE_SPEC_ID,\n  DAL_ID, LOGIN_PATH, SIGNUP_PATH, getLocalePrefix\n} from '../../constants';\n\nimport {\n  IAction,\n  IMap,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\n\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\n\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport withWidth, { WithWidth } from '@material-ui/core/withWidth';\n\nimport { styled } from '@material-ui/styles';\n\nimport ResponsiveMenu, { constants } from '../../components/ResponsiveMenu';\nimport { UserLogOutAction } from '../../modules/AtsModule/actions';\nimport {\n  push,\n} from 'connected-react-router/immutable';\nimport { DASHBOARD_EDIT_MENU_ID } from '../../modules/DashboardModule/constants';\n\nimport LogInAsModal, {\n  MODAL_ID as LOGINAS_MODAL_ID,\n} from '../LogInAsModal';\nimport {\n  makeSelectLocation, IRouterReducerLocation, makeSelectLocationPathname\n} from '../../modules/RouterModule/selectors';\nimport Api from 'ats-api/src';\nimport { withAtsApi } from '../../contexts';\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\nexport {\n  constants,\n};\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer';\nimport CloseIcon from '@material-ui/icons/Close';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { RouteComponentProps } from 'react-router';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport LoginAsButtonDropdown from '../../components/LoginAsButtonDropdown';\nimport NotificationsIcon from '@material-ui/icons/Notifications';\nimport { CloseNotificationDropDown, CreateNotification, MarkAllNotificationsRead, OpenNotificationDropDown } from '../../modules/NotificationModule/actions';\nimport { makeSelectIsNotificationDropDownOpen, makeSelectNotifications, makeSelectNotificationsCount, makeSelectNotificationsUnreadCount } from '../../modules/NotificationModule/selectors';\nimport Notification from '../../models/Notification';\nimport NotificationList from '../../components/NotificationList';\nimport GuestLoginButton from '../../components/GuestLoginButton';\nimport GuestSignUpButton from '../../components/GuestSignUpButton';\nimport QuoteConnectHelp from '../../utils/quoteConnect/quoteConnectHelp';\nimport quoteConnectHelp from '../../utils/quoteConnect/quoteConnectHelp';\nimport TakeoffList from '../../components/TakeoffList';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport { safeLocalStorage } from '../../utils/safeStorage';\n\nexport const LocaleMap = {\n  'en': {\n    id: 'en',\n    name: 'English',\n  },\n  'fr': {\n    id: 'fr',\n    name: 'French',\n  },\n};\n\nconst footerDefaultValues = {\n  [SPEC_TOOL_ID]: {\n    footerHomeLink: 'https://www.atssoftware.com/',\n    footerTermsLink: 'https://www.atssoftware.com/terms-conditions/',\n    footerPrivacyLink: 'https://www.atssoftware.com/privacy-policy/',\n    footerCopyright: 'ATS Software.'\n  },\n  [PROJECT_TRACKER_ID]: {\n    footerHomeLink: 'https://www.atssoftware.com/',\n    footerTermsLink: 'https://www.atssoftware.com/terms-conditions/',\n    footerPrivacyLink: 'https://www.atssoftware.com/privacy-policy/',\n    footerCopyright: 'ATS Software.'\n  },\n  [PIM_ID]: {\n    footerCopyright: 'ATS Software.'\n  },\n  [AMP_ID]: {\n    footerCopyright: 'ATS Software.'\n  }\n};\n\nconst {\n  HEADER_HEIGHT_UNIT_MULTIPLIER,\n  SM_HEADER_HEIGHT_UNIT_MULTIPLIER,\n  ANIMATION_SPEED,\n} = constants;\n\nconst GradiantDrawerHeader = styled('div')(({ theme, values }: ITheme & { values?: any }) => ({ // values is taking an `any` type here just because it appears to not be used but causes issues for mUI upgrade\n  background: `linear-gradient(90deg, ${theme.palette.primary[500]} 0%, ${theme.palette.primary[900]} 50% )`,\n}));\n\nconst LogoImage = styled(Image)(({ theme }) => ({\n  transition: `all ${ANIMATION_SPEED}s`,\n}));\n\nconst MobileLogoImage = styled(Image)(({ theme }) => {\n  return {\n    transition: `all ${ANIMATION_SPEED}s`,\n  };\n});\n\nconst styles = (theme: Theme): StyleRules =>\n({\n  flex: {\n    flex: 1,\n  },\n  hideMobile: {\n    transition: `all ${ANIMATION_SPEED}s`,\n    opacity: 1,\n    [theme.breakpoints.up('md')]: {\n      opacity: 0,\n    },\n  },\n  showMobile: {\n    transition: `all ${ANIMATION_SPEED}s`,\n    opacity: 0,\n    [theme.breakpoints.up('md')]: {\n      opacity: 1,\n    },\n  },\n  drawerHeader: {\n    ...theme.mixins.toolbar,\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    overflow: 'hidden',\n  },\n  content: {\n    backgroundColor: theme.palette.background.default,\n    width: '100%',\n    flex: '1 0 auto',\n    position: 'relative',\n    display: 'flex',\n    justifyContent: 'flex-start',\n    flexDirection: 'column'\n  },\n  footerWrapper: {\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    overflow: 'auto',\n    overflowX: 'hidden',\n    height: '100%',\n    marginTop: theme.spacing() * HEADER_HEIGHT_UNIT_MULTIPLIER,\n    [theme.breakpoints.up('sm')]: {\n      marginTop: theme.spacing() * SM_HEADER_HEIGHT_UNIT_MULTIPLIER,\n    },\n    backgroundColor: theme.palette.grey[300],\n  },\n  footer: {\n    padding: `${theme.spacing()}px ${theme.spacing(2)}px`\n  },\n  footerContainers: {\n    width: 0,\n    flexGrow: 1,\n    overflow: 'hidden'\n  },\n  link: {\n    textDecoration: 'none',\n    textTransform: 'uppercase',\n    color: '#444',\n    fontFamily: 'Open Sans, sans-serif',\n    fontWeight: 700,\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden'\n  },\n  menuIcon: {\n    color: theme.palette.grey[600],\n  },\n  menuText: {\n    minWidth: 0,\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whitespace: 'nowrap',\n  },\n  slideOpen: {\n    left: 0\n  },\n  liveChatButton: {\n    position: 'fixed',\n    bottom: '16px',\n    right: '16px',\n    width: '60px',\n    height: '60px',\n    zIndex: theme.zIndex.appBar\n  },\n  closeLiveChat: {\n    display: 'none'\n  },\n  spaceChildren: {\n    '&>*': {\n      margin: 0,\n      marginRight: theme.spacing(2),\n      '&:last-child': {\n        marginRight: 0\n      }\n    },\n  },\n  brandsContainer: {\n    width: 'auto'\n  },\n  languageSelector: {\n    marginRight: theme.spacing(2),\n  },\n  guestLoginButton: {\n    marginRight: theme.spacing(3),\n  },\n  takeoffListContainer: {\n    top: `64px !important`,\n    right: `0px !important`,\n    left: `auto !important`,\n  }\n});\n\ntype Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\ndeclare global {\n  interface Window { // tslint:disable-line\n    HubSpotConversations: any;\n    usetifulTags: any;\n  }\n}\n\ninterface IAppMenuComponentProps {\n  alpha?: boolean;\n  beta?: boolean;\n  isProduction?: boolean;\n  logoProps?: object;\n  mobileLogoProps?: object;\n  drawerGradients?: {\n    header: string[];\n    drawer: string[];\n    mobileDrawer: string[];\n  };\n  title?: React.ReactNode;\n  menuItems?: React.ReactElement<any>;\n  cogMenuDashboardItem?: boolean;\n  widthBreakpoint?: Breakpoint;\n}\n\ninterface IMenuItem {\n  name: string;\n  props?: {\n    icon: string;\n    [key: string]: any;\n  };\n}\n\ninterface IAppMenuProps extends IAppMenuComponentProps {\n  identity: IMap<Identity>;\n  env: Map<string, string>;\n  locale: string;\n  logout: () => void;\n  setLocaleAction: (newLocale: string) => void;\n  theme: Theme;\n  userRoles: List<string>;\n  openDashboard: any;\n  editMenuOpen: boolean;\n  dispatch: React.Dispatch<IAction>;\n  loginAsModalOpen: boolean;\n  location: IMap<IRouterReducerLocation>;\n  config: IMap<IConfig>;\n  displayLanguageSelector?: boolean;\n  displayCogMenu?: boolean;\n  cogMenuItems?: ((props: IAppMenuProps) => IMenuItem[]) | IMenuItem[];\n  userMenuItems: ((props: IAppMenuProps) => IMenuItem[]) | IMenuItem[];\n  atsApi: Api;\n  site: SiteName;\n  pathname: string;\n  liveChatOpen: boolean;\n  domain: string;\n  toggleLiveChat: (open: boolean) => void;\n  testCreateNotification: () => void;\n  notifications: List<Notification>;\n  notificationsCount: number;\n  notificationsUnreadCount: number;\n  markAllNotificationsRead: () => void;\n  isNotificationDropDownOpen: boolean;\n  appId: string;\n  takeoffListOpen: boolean;\n  enableTakeoff: boolean;\n}\n\ntype AppMenuProps = IAppMenuProps & WithWidth & RouteComponentProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\ninterface IAppMenuState {\n  liveChatLoaded: boolean;\n  openDrawer: boolean;\n}\n\ninterface ITheme {\n  theme: Theme;\n}\n\nclass AppMenu extends React.Component<AppMenuProps, IAppMenuState> {\n  public state = {\n    liveChatLoaded: false,\n    openDrawer: true\n  };\n\n  private scrollNode = React.createRef<any>();\n\n  // User Menu Options - 'icon' prop allows you conditionally render a <FontAwesomeIcon/> on the right of the Menu Item\n  // all other props are passed to the menu item to allow custom styling and functionality(onClick etc) of specific menu items\n  public userMenu = () => {\n    const {\n      dispatch,\n      userRoles,\n    } = this.props;\n\n    return [\n      ...(userRoles.includes(AclRoles.SUPER_USER) || userRoles.includes(AclRoles.ATS_USER))\n        ? [{\n            name: 'AccountSettingsMenu.logInAsCogMenuLabel',\n            props: {\n              onClick: () => dispatch(new ToggleOverlayComponentAction({ id: LOGINAS_MODAL_ID }))\n            }\n          }]\n        : [],\n      {\n        name: 'UserMenu.logout',\n        props: {\n          onClick: this.logoutAction()\n        }\n      },\n    ];\n  }\n\n  public cogMenu = () => {\n    const {\n      dispatch,\n      openDashboard,\n      cogMenuDashboardItem,\n      identity\n    } = this.props;\n    const isQuoteConnectRep = QuoteConnectHelp.isQuoteConnectRepLogin(identity);\n    // Base menu options\n    let options: Array<{\n      name: string;\n      props: { [key: string]: any };\n    }> = cogMenuDashboardItem !== false\n        ? [\n          {\n            name: 'AccountSettingsMenu.dashboardCustomizationCogMenuLabel',\n            props: {\n              onClick: () => {\n                openDashboard(); dispatch(push(DASHBOARD_PATH));\n              }\n            }\n          },\n        ]\n        : [];\n    if (isQuoteConnectRep) {\n      options = [];\n    }\n    return options;\n  }\n\n  // Start of Methods\n\n  // Single Menu Item 'Component'\n  public menuItem = (element: any, index: number) => {\n    const {\n      classes,\n      t,\n      theme,\n    } = this.props;\n\n    const hasIcon = element && element.props && element.props.icon;\n    return hasIcon\n      ? <WidgetMenuItem {...element.props || null} key={index}>\n        <Grid\n          className={classes.menuText}\n          justify='space-between'\n          container={true}\n          wrap='nowrap'\n          alignItems='center'\n        >\n          <div style={{\n            overflow: 'hidden',\n            textOverflow: 'ellipsis',\n            whiteSpace: 'nowrap'\n          }}\n          >\n            {t(element.name)}\n          </div>\n          <FontAwesomeIcon\n            icon={hasIcon}\n            style={{\n              marginLeft: theme.spacing(),\n              flexShrink: 0\n            }}\n          />\n        </Grid>\n      </WidgetMenuItem>\n      : <WidgetMenuItem\n        {...element.props || null}\n        key={index}\n        className={classes.menuItem}\n      >\n        <div className={classes.menuText}>\n          {t(element.name)}\n        </div>\n      </WidgetMenuItem>;\n  }\n\n  public logoutAction() {\n    const {\n      logout,\n      t\n    } = this.props;\n\n    return () => {\n      const path = window.location.pathname;\n      if (path.includes(CREATE_NEW_QUOTE_PATH) || (path.includes(QUOTE_PATH) && path.includes('/edit'))) {\n        const ok = confirm(t('general.leavingAlertContent'));\n        if (ok) {\n          logout();\n        } else {\n          return;\n        }\n      } else {\n        logout();\n      }\n    };\n  }\n\n  public closeMenu = () => {\n    const {\n      dispatch,\n    } = this.props;\n    return () => dispatch(new CloseMobileAppMenuAction);\n  }\n\n  public openNotificationDropDown = () => {\n    this.props.dispatch(new OpenNotificationDropDown());\n  }\n\n  public handleClickGuestLoginButton = () => {\n    const { dispatch } = this.props;\n    dispatch(push(LOGIN_PATH));\n  }\n  public handleClickGuestSignUpButton = () => {\n    const { dispatch } = this.props;\n    dispatch(push(SIGNUP_PATH));\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      liveChatOpen\n    } = this.props;\n    const {\n      liveChatLoaded,\n    } = this.state;\n\n    const status = window.HubSpotConversations && window.HubSpotConversations.widget.status();\n    dispatch(new SetScrollNodeAction({ scrollNode: this.scrollNode }));\n    if (status !== undefined && (!liveChatLoaded && !liveChatOpen || !status.loaded)) {\n      window.HubSpotConversations.widget.load({ widgetOpen: false });\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(new SetScrollNodeAction({ scrollNode: undefined }));\n    if (window.HubSpotConversations) {\n      window.HubSpotConversations.widget.remove();\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      children,\n      title,\n      menuItems,\n      theme,\n      env,\n      identity,\n      logoProps = {},\n      mobileLogoProps = {},\n      drawerGradients,\n      alpha: alphaProp,\n      beta: betaProp,\n      isProduction,\n      width,\n      widthBreakpoint: _widthBreakpoint,\n      loginAsModalOpen,\n      editMenuOpen,\n      location,\n      config,\n      displayLanguageSelector = false,\n      displayCogMenu = true,\n      cogMenuItems,\n      userMenuItems,\n      t,\n      atsApi: {\n        apiKey\n      },\n      locale,\n      liveChatOpen,\n      domain,\n      toggleLiveChat,\n      testCreateNotification,\n      notifications,\n      notificationsCount,\n      notificationsUnreadCount,\n      markAllNotificationsRead,\n      isNotificationDropDownOpen,\n      dispatch,\n      amplitudeData,\n      appId,\n      site,\n      takeoffListOpen,\n      enableTakeoff,\n    } = this.props;\n\n    const {\n      liveChatLoaded\n    } = this.state;\n\n    const widthBreakpoint = _widthBreakpoint != null ? _widthBreakpoint : width;\n    const isQuoteConnectRep = QuoteConnectHelp.isQuoteConnectRepLogin(identity);\n    const date = new Date();\n\n    const headerGradientConfig = config.getIn(['gradients', 'header']);\n    const drawerGradientConfig = config.getIn(['gradients', 'drawer']);\n    const mobileDrawerGradientConfig = config.getIn(['gradients', 'mobileDrawer']);\n\n    const headerGradientProps = drawerGradients && drawerGradients.header;\n    const drawerGradientProps = drawerGradients && drawerGradients.drawer;\n    const mobileDrawerGradientProps = drawerGradients && drawerGradients.mobileDrawer;\n\n    const headerGradient = headerGradientConfig != null ? headerGradientConfig.toJS() : headerGradientProps;\n    let drawerGradient = drawerGradientConfig != null ? drawerGradientConfig.toJS() : drawerGradientProps;\n    let mobileDrawerGradient = mobileDrawerGradientConfig != null ? mobileDrawerGradientConfig.toJS() : mobileDrawerGradientProps;\n    if (isQuoteConnectRep) {\n      drawerGradient = quoteConnectHelp.getGradientColors();\n      mobileDrawerGradient = quoteConnectHelp.getGradientColors();\n    }\n    const languageData = Object.keys(LocaleMap).sort();\n\n    const logoPropsConfig = (config.get('logoProps') || Map<string, any>()).toJS();\n    const mobileLogoPropsConfig = (config.get('mobileLogoProps') || Map<string, any>()).toJS();\n    const alphaConfig = config.get('alpha');\n    const alpha = alphaConfig != null ? alphaConfig : alphaProp;\n    const betaConfig = config.get('beta');\n    const beta = betaConfig != null ? betaConfig : betaProp;\n\n    const tool = footerDefaultValues[apiKey];\n    const isFrankeSpecCanadaDomain = domain.includes('franke-ca');\n    const footerHomeLink = (isFrankeSpecCanadaDomain ? config.getIn(['linkProps', 'homeCA']) : config.get('footerHomeLink')) || (tool && tool.footerHomeLink);\n    const footerTermsLink = config.get('footerTermsLink') || (tool && tool.footerTermsLink);\n    const footerPrivacyLink = config.get('footerPrivacyLink') || (tool && tool.footerPrivacyLink);\n    const footerCopyright = `${config.get('footerCopyright') || (tool && tool.footerCopyright)} ${t('footer.allRightsReserved')}`;\n\n    const nameDisplay = identity != null\n      ? !identity.get('given_name') && !identity.get('family_name')\n        ? identity.get('preferred_username')\n          ? identity.get('preferred_username')\n          : ''\n        : `${identity.get('given_name') ? identity.get('given_name', '') : ''} ${identity.get('family_name') ? identity.get('family_name', '') : ''}`\n      : '';\n\n    const initial = identity != null\n      ? !identity.get('given_name') && !identity.get('family_name')\n        ? identity.get('preferred_username')\n          ? identity.get('preferred_username')[0]\n          : ''\n        : `${identity.get('given_name') ? identity.get('given_name', '')[0] : ''}${identity.get('family_name') ? identity.get('family_name', '')[0] : ''}`\n      : '';\n\n    const isUsingLoginAs = identity !== null && Boolean(identity?.get('originalUser'));\n    const isGuestUser = identity == null;\n    return (\n      <ResponsiveMenu\n        identity={identity}\n        getOpenDrawerState={(drawerState: boolean) => this.setState({ openDrawer: drawerState })}\n        widthBreakpoint={widthBreakpoint}\n        HeaderProps={{\n          style: {\n            backgroundColor: 'white',\n          }\n        }}\n        DrawerProps={{\n          style: {\n            background: `linear-gradient(235deg, ${theme.palette.primary[300]} 0%, ${theme.palette.primary[700]} 75% )`,\n          },\n          ...drawerGradient && {\n            style: {\n              background: `linear-gradient(235deg, ${drawerGradient[0]} 0%, ${drawerGradient[1]} 75% )`,\n              overflow: 'visible',\n            }\n          }\n        }}\n        MobileDrawerProps={{\n          ...mobileDrawerGradient\n            ? {\n              background: `linear-gradient(180deg, ${mobileDrawerGradient[0]} 0%, ${mobileDrawerGradient[1]} 25% )`,\n            }\n            : {\n              background: `linear-gradient(180deg, ${theme.palette.primary[500]} 0%, ${theme.palette.primary[700]} 25% )`,\n            }\n        }}\n\n        HeaderContents={\n          <Grid container={true} justify='flex-end' alignItems='center' wrap='nowrap' onClick={this.closeMenu()}>\n            <span className={classes.flex}>\n              {title}\n            </span>\n\n            {\n              displayLanguageSelector && <>\n                <LanguageIcon style={{ marginRight: 8, color: theme.palette.grey[600] }} />\n                <Select\n                  value={locale}\n                  className={classes.languageSelector}\n                  onChange={(event) => {\n                    const singleLocale = event.target.value as string;\n                    safeLocalStorage.setItem('languages💾', singleLocale);\n                    const languageSelected = singleLocale === 'en' ? 'English' : 'French';\n                    amplitude.logEvent(AMPLITUDE_EVENT.languageToggle, amplitudeData({ languageSelected }));\n\n                    const localePrefix = getLocalePrefix();\n                    if (localePrefix) {\n                      const basePath = isQuoteConnectRep ? '/quote-connect' : '/';\n                      window.location.href = `/${singleLocale}${basePath}`;\n                    } else if (isQuoteConnectRep) {\n                      window.location.href = '/quote-connect';\n                    } else {\n                      window.location.href = '/';\n                    }\n                  }}\n                >\n                  {languageData.map((singleLocale) => (\n                    <MenuItem\n                      key={singleLocale}\n                      value={singleLocale}\n                    >\n                      {t(`LanguageSelector.${singleLocale}`)}\n                    </MenuItem>\n                  ))}\n                </Select>\n              </>\n            }\n\n            {isGuestUser ? <>\n              <GuestLoginButton className={classes.guestLoginButton} onClick={this.handleClickGuestLoginButton} />\n              <GuestSignUpButton onClick={this.handleClickGuestSignUpButton} />\n              </>\n            : null}\n\n            {identity != null &&\n              <React.Fragment>\n                <LogInAsModal />\n\n                {\n                  (site === SiteName.pt && enableTakeoff) && (\n                    <DropdownContainer\n                      onClick={() => dispatch(new ToggleTakeoffListAction({ forceState: true }))}\n                      open={takeoffListOpen}\n                      onClose={() => dispatch(new ToggleTakeoffListAction({ forceState: false }))}\n                      MenuProps={{\n                        MenuListProps: {\n                          style: { padding: 0 }\n                        },\n                        PopoverClasses: {\n                          paper: classes.takeoffListContainer\n                        }\n                      }}\n                      materialIcon={\n                        <Robot style={{ width: '2.1rem', height: '2.1rem', color: theme.palette.grey[600]} } />\n                      }\n                      width='auto'\n                    >\n                      <div style={{ width: 480 }}>\n                        <TakeoffList />\n                      </div>\n                    </DropdownContainer>\n                  )\n                }\n\n                {\n                  appId === PROJECT_TRACKER_ID ?\n                    <DropdownContainer\n                      onClick={this.openNotificationDropDown}\n                      open={isNotificationDropDownOpen}\n                      onClose={() => dispatch(new CloseNotificationDropDown())}\n                      MenuProps={{\n                        MenuListProps: {\n                          style: { padding: 0 }\n                        }\n                      }}\n                      materialIcon={\n                        // little hack for customizing badge postion on large fontSize icon\n                        <>\n                          <NotificationsIcon fontSize='large' className={classes.menuIcon} />\n                          <Badge badgeContent={notificationsUnreadCount} max={99} color='primary' style={{ transform: 'translate(-5px, -10px)' }}>\n                            <div style={{ display: 'none' }} />\n                          </Badge>\n                        </>\n                      }\n                      width='auto'\n                    >\n                      <Grid container={true} justify='space-between' alignItems='center' style={{ padding: 16 }}>\n                        <Typography variant='h6'>{t('notification.label')}</Typography>\n                        <Button color='primary' disabled={notificationsUnreadCount === 0} onClick={markAllNotificationsRead} style={{ textTransform: 'none' }}>{t('notification.markAllAsRead')}</Button>\n                      </Grid>\n                      <Divider />\n                      <NotificationList />\n                    </DropdownContainer>\n                    :\n                    null\n                }\n\n                {isUsingLoginAs\n                  ? <LoginAsButtonDropdown nameDisplay={nameDisplay} initial={initial}>\n                    {this.userMenu().map((element, index) => this.menuItem(element, index))}\n                    {\n                      (userMenuItems != null) && (\n                        isFunction(userMenuItems)\n                          ? userMenuItems(this.props).map((element, index) => this.menuItem(element, index))\n                          : userMenuItems.map((element, index) => this.menuItem(element, index))\n                      )\n                    }\n                  </LoginAsButtonDropdown>\n                  : <DropdownContainer\n                    materialIcon={<PersonIcon fontSize='large' className={classes.menuIcon} />}\n                    width='initial'\n                  >\n                    <WidgetMenuItem\n                      MenuItemProps={{\n                        style: {\n                          fontWeight: 'bold',\n                        }\n                      }}\n                    >\n                      <div className={classes.menuText}>{nameDisplay}</div>\n                    </WidgetMenuItem>\n                    <Divider />\n                    {this.userMenu().map((element, index) => this.menuItem(element, index))}\n                    {\n                      (userMenuItems != null) && (\n                        isFunction(userMenuItems)\n                          ? userMenuItems(this.props).map((element, index) => this.menuItem(element, index))\n                          : userMenuItems.map((element, index) => this.menuItem(element, index))\n                      )\n                    }\n                  </DropdownContainer>\n                }\n                {\n                  displayCogMenu && (\n                    <DropdownContainer\n                      materialIcon={<SettingsIcon fontSize='large' className={classes.menuIcon} />}\n                      hide={editMenuOpen && location.get('pathname').includes(DASHBOARD_PATH) || loginAsModalOpen || false}\n                      closeOnItemClick={true}\n                      width='initial'\n                    >\n                      {this.cogMenu().map((element, index) => this.menuItem(element, index))}\n                      {\n                        (cogMenuItems != null) && (\n                          isFunction(cogMenuItems)\n                            ? cogMenuItems(this.props).map((element, index) => this.menuItem(element, index))\n                            : cogMenuItems.map((element, index) => this.menuItem(element, index))\n                        )\n                      }\n                    </DropdownContainer>\n                  )\n                }\n              </React.Fragment>\n            }\n          </Grid>\n        }\n\n        DrawerContents={\n          <React.Fragment>\n            {\n              (widthBreakpoint !== 'xs' && this.state.openDrawer === true) && <GradiantDrawerHeader\n                className={classes.drawerHeader}\n                {...headerGradient && {\n                  style: {\n                    background: `linear-gradient(90deg, ${headerGradient[0]} 0%, ${headerGradient[1]} 50% )`,\n                  }\n                }}\n              >\n                <div\n                  style={{\n                    display: 'flex',\n                    justifyContent: 'center',\n                    height: '100%',\n                    alignItems: 'center'\n                  }}\n                >\n                  <div\n                    className={classes.showMobile}\n                    style={{\n                      position: 'absolute',\n                    }}\n                  >\n                    <LogoImage\n                      src={logoImg}\n                      width='230px'\n                      aspectRatio='31.76%'\n                      cover={false}\n                      {...logoProps}\n                      {...logoPropsConfig}\n                    />\n                  </div>\n                  <div\n                    className={classes.hideMobile}\n                    style={{\n                      position: 'absolute',\n                    }}\n                  >\n                    {(!isQuoteConnectRep) &&\n                      <MobileLogoImage\n                        src={mobileLogoImg}\n                        width='56px'\n                        aspectRatio='100%'\n                        cover={true}\n                        {...mobileLogoProps}\n                        {...mobileLogoPropsConfig}\n                      />\n                    }\n                    {(isQuoteConnectRep) &&\n                      <MobileLogoImage\n                        src={quoteConnectMobile}\n                        width='56px'\n                        aspectRatio='100%'\n                        cover={true}\n                        {...mobileLogoProps}\n                        {...mobileLogoPropsConfig}\n                      />\n                    }\n                  </div>\n                </div>\n                {\n                  alpha &&\n                  <Image\n                    src={alphaImg}\n                    width='48px'\n                    aspectRatio='100%'\n                    align='left'\n                    style={{ position: 'absolute' }}\n                  />\n                }\n                {\n                  beta &&\n                  <Image\n                    src={betaImg}\n                    width='48px'\n                    aspectRatio='100%'\n                    align='left'\n                    style={{ position: 'absolute' }}\n                  />\n                }\n              </GradiantDrawerHeader>\n            }\n            <MainMenuItems\n              menuItems={menuItems}\n              responsive={true}\n              isProduction={isProduction}\n              widthBreakpoint={widthBreakpoint}\n              drawerGradient={drawerGradient ? drawerGradient[0] : theme.palette.primary[300]}\n            />\n          </React.Fragment>\n        }\n\n        MobileDrawerContents={\n          <React.Fragment>\n            <MainMenuItems\n              menuItems={menuItems}\n              isProduction={isProduction}\n              widthBreakpoint={widthBreakpoint}\n            />\n          </React.Fragment>\n        }\n      >\n        <div\n          className={classNames('footerWrapper', classes.footerWrapper)}\n          ref={this.scrollNode}\n          id='scroll-to-top'\n        >\n          <AppGlobalComponents />\n          <div className={classes.content}>\n            {children}\n          </div>\n          <footer className={classes.footer}>\n            <Grid\n              container={true}\n              justify='space-between'\n              alignItems='center'\n              wrap='nowrap'\n            >\n              <Grid\n                container={true}\n                className={`${classes.footerContainers} ${classes.spaceChildren}`}\n                wrap='nowrap'\n                alignItems='center'\n              >\n                {\n                  footerHomeLink &&\n                  <a\n                    className={classes.link}\n                    href={footerHomeLink}\n                    target='_blank'\n                  >\n                    {t('footer.home')}\n                  </a>\n                }\n                {\n                  footerTermsLink &&\n                  <a\n                    className={classes.link}\n                    href={footerTermsLink}\n                    target='_top'\n                  >\n                    {t('footer.terms')}\n                  </a>\n                }\n                {\n                  footerPrivacyLink &&\n                  <a\n                    className={classes.link}\n                    href={footerPrivacyLink}\n                    target='_top'\n                  >\n                    {t('footer.privacyPolicy')}\n                  </a>\n                }\n              </Grid>\n              <Grid container={true} justify='center' wrap='nowrap' className={`${classes.spaceChildren} ${classes.brandsContainer}`}>\n                {\n                  config.get('footerImages') && config.get('footerImages').map((footerImage, i) => {\n                    const localeSrc = footerImage.getIn([locale, 'src']);\n                    const defaultSrc = footerImage.getIn(['default', 'src']);\n                    const localeOrDefaultSrc = localeSrc || defaultSrc;\n                    const localeWidth = footerImage.getIn([locale, 'width']);\n                    const defaultWidth = footerImage.getIn(['default', 'width']);\n                    const localeOrDefaultWidth = localeWidth || defaultWidth;\n\n                    const aspectRatio = localeOrDefaultWidth ? `${theme.spacing(600) / localeOrDefaultWidth}%` : '100%';\n\n                    return (\n                      <Image\n                        src={localeOrDefaultSrc}\n                        width={(localeOrDefaultWidth || theme.spacing(6)) + 'px'}\n                        aspectRatio={aspectRatio}\n                        fromService={true}\n                        key={i}\n                      />\n                    );\n                  })\n                }\n              </Grid>\n              <Grid\n                container={true}\n                justify='flex-end'\n                className={classes.footerContainers}\n              >\n                <Typography variant='body1' noWrap={true} >\n                  &copy; {date.getUTCFullYear()} {footerCopyright}\n                </Typography>\n              </Grid>\n            </Grid>\n          </footer>\n        </div>\n        {\n          window.HubSpotConversations\n            ? <Fab\n              className={classes.liveChatButton}\n              color='primary'\n              onClick={() => {\n                if (liveChatOpen) {\n                  toggleLiveChat(false);\n                } else {\n                  if (liveChatLoaded) {\n                    toggleLiveChat(true);\n                  } else {\n                    this.setState({\n                      liveChatLoaded: true,\n                    }, () => toggleLiveChat(true));\n                  }\n                }\n              }}\n            >\n              {\n                liveChatOpen\n                  ? <CloseIcon fontSize='large' />\n                  : <QuestionAnswerIcon fontSize='large' />\n              }\n              <div id='hubspot-container' className={liveChatOpen ? undefined : classes.closeLiveChat} />\n            </Fab>\n            : null\n        }\n\n      </ResponsiveMenu>\n    );\n  }\n}\n\nfunction mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n    logout: () => dispatch(new UserLogOutAction({})),\n    setLocaleAction: (newLocale: string) => dispatch(new ChangeLocaleAction(newLocale)),\n    openDashboard: () => dispatch(new ToggleOverlayComponentAction({ open: true, id: DASHBOARD_EDIT_MENU_ID })),\n    toggleLiveChat: (open: boolean) => dispatch(new ToggleLiveChatAction({ open })),\n    testCreateNotification: () => dispatch(new CreateNotification()),\n    markAllNotificationsRead: () => dispatch(new MarkAllNotificationsRead())\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  env: makeSelectEnv(),\n  identity: makeSelectIdentityObject(),\n  locale: makeSelectLocale(),\n  userRoles: makeSelectUserRole(),\n  editMenuOpen: makeSelectOverlayComponent(DASHBOARD_EDIT_MENU_ID),\n  loginAsModalOpen: makeSelectOverlayComponent(LOGINAS_MODAL_ID),\n  location: makeSelectLocation(),\n  config: makeSelectConfig(),\n  site: makeSelectSite(),\n  pathname: makeSelectLocationPathname(),\n  liveChatOpen: makeSelectliveChatOpen(),\n  domain: makeSelectDomain(),\n  notifications: makeSelectNotifications(),\n  notificationsCount: makeSelectNotificationsCount(),\n  notificationsUnreadCount: makeSelectNotificationsUnreadCount(),\n  isNotificationDropDownOpen: makeSelectIsNotificationDropDownOpen(),\n  appId: makeSelectAppId(),\n  takeoffListOpen: makeSelectTakeoffListOpen(),\n  enableTakeoff: makeSelectUserIsAnyAiUser(),\n});\n\nexport default compose<React.ComponentClass<IAppMenuComponentProps>>(\n  withAtsApi(),\n  withWidth(), // @@TODO will need to revisit this later - withWidth seems to break withStyles theme prop passthrough\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n)(AppMenu);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport { Grid, Theme, Typography, WithStyles, withStyles, Avatar, Link, Divider, Tooltip, Chip } from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction/index';\nimport { connect } from 'react-redux';\nimport { IMap } from 'ats-utils/src';\nimport { User, Office, Firm } from '../../models';\nimport { SelectTeamOrganizationDrawerOfficeAction, SelectTeamOrganizationOfficeAction, DeleteUserByIdAction, DeleteContactAction, GetFirmsAction, SetSelectedFirmId } from '../../modules/AccountModule/actions';\nimport { ToggleOverlayComponentAction, SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport { DRAWER_ID as USER_DRAWER_ID } from '../../containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/constants';\nimport {\n  TEAM_MANAGEMENT_USER_EDIT,\n} from '../../components/TeamManagementUserDrawer';\nimport { Image } from '../../components';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectOfficeBySelectedTeamOrganizationOfficeId, makeSelectFirm } from '../../modules/AccountModule/selectors';\nimport { push } from 'connected-react-router';\nimport { OFFICE_LIST_DETAIL_PATH, USER_DETAILS_PATH, SiteName } from '../../constants';\nimport DeleteModal from '../DeleteModalDialog';\nimport {\n  default as withUserPermissions,\n  IWithUserPermissions,\n} from '../../hoc/withUserPermissions';\nimport classnames from 'classnames';\n\nimport ApartmentRoundedIcon from '@material-ui/icons/ApartmentRounded';\nimport RoomIcon from '@material-ui/icons/Room';\nimport PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid';\nimport EmailIcon from '@material-ui/icons/Email';\nimport PhoneEnabledIcon from '@material-ui/icons/PhoneEnabled';\nimport DrawerRow from '../DrawerRow';\nimport DrawerViewHeader from '../DrawerViewHeader';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\n\nconst smallImgSize = 30;\n\nconst styles = (theme: Theme): StyleRules => ({\n  avatar: {\n    fontSize: '3rem',\n    width: 108,\n    height: 108,\n    margin: 0,\n    color: '#b5b5b5',\n    backgroundColor: '#e6e6e6',\n    textTransform: 'uppercase',\n  },\n  smallAvatar: {\n    width: smallImgSize,\n    height: smallImgSize,\n    fontSize: '14px',\n  },\n  title: {\n    color: 'rgba(255, 255, 255, .6)',\n  },\n  ownerType: {\n    fontSize: '.7rem',\n    display: 'inline-block',\n    marginTop: theme.spacing() * 2,\n    marginBottom: theme.spacing() * 3,\n    padding: `${theme.spacing() * .25}px ${theme.spacing() * 1.5}px`,\n    borderRadius: theme.shape.borderRadius,\n    color: 'inherit',\n    backgroundColor: theme.palette.secondary[400],\n  },\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary,\n    '& a': {\n      color: theme.palette.primary.main,\n      textDecoration: 'none',\n    },\n  },\n  contentTitle: {\n    marginBottom: theme.spacing(1.25)\n  },\n  profileRow: {\n    marginBottom: theme.spacing(1.5)\n  },\n  profilePageTypo: {\n    textAlign: 'left'\n  },\n  icons: {\n    marginRight: theme.spacing()\n  },\n  roleChip: {\n    borderRadius: '4px',\n    cursor: 'pointer'\n  }\n});\n\ninterface ITeamManagementUserViewComponentProps {\n  data?: IMap<User>;\n}\n\ninterface ITeamManagementUserView extends ITeamManagementUserViewComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  selectedOffice: IMap<Office>;\n  firm: IMap<Firm>;\n  site: SiteName;\n  getFirm: (firmId: number) => void;\n}\n\ntype TeamManagementUserViewType = WithTranslation & ITeamManagementUserView & WithStyles<keyof ReturnType<typeof styles>> & IWithUserPermissions;\n\nclass TeamManagementUserView extends React.Component<TeamManagementUserViewType, {}> {\n\n  public state = {\n    showDeleteModal: false,\n  };\n\n  public componentDidMount = () => {\n    const {\n      getFirm,\n      selectedOffice = null\n    } = this.props;\n    getFirm(selectedOffice && selectedOffice.get('firmId'));\n  }\n\n  public handleEdit = () => {\n    const {\n      dispatch,\n    } = this.props;\n\n    // dispatch(new ToggleOverlayComponentAction({\n    //   id: USER_DRAWER_ID,\n    //   open: false\n    // }));\n\n    // dispatch(new ToggleOverlayComponentAction({\n    //   id: USER_DRAWER_ID,\n    //   open: true\n    // }));\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: USER_DRAWER_ID,\n      content: TEAM_MANAGEMENT_USER_EDIT,\n    }));\n  }\n\n  public handleClose = () => {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: USER_DRAWER_ID,\n      open: false\n    }));\n  }\n\n  public deleteContact = (userId: number) => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new DeleteUserByIdAction({ userId }));\n    dispatch(new DeleteContactAction(userId));\n    dispatch(new ToggleOverlayComponentAction({\n      id: USER_DRAWER_ID,\n      open: false\n    }));\n  }\n\n  public toggleDeleteModal = () => {\n    this.setState({\n      showDeleteModal: !this.state.showDeleteModal\n    });\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      data,\n      selectedOffice,\n      hasEditSelfPermissions,\n      hasOfficeAdminPermissions,\n      hasFirmAdminPermissions,\n      firm,\n      site,\n      t\n    } = this.props;\n\n    if (!data) {\n      dispatch(new ToggleOverlayComponentAction({\n        id: USER_DRAWER_ID,\n        open: false\n      }));\n      return null;\n    }\n\n    const firstName = data.get('firstName') || '';\n    const lastName = data.get('lastName') || '';\n    const imageId = data.get('imageId') || '';\n    const imageSize = 108;\n\n    const userId = data.get('id');\n    const firmId = data.get('firmId');\n    const officeId = data.get('officeId');\n\n    const name = `${firstName} ${lastName}`;\n    const officeName = selectedOffice.get('officeName', '');\n    const userInitial = (firstName || lastName) ? `${firstName[0] || ''}${lastName[0] || ''}` : `${officeName[0]}`;\n    const jobTitle = data.get('jobTitle', '');\n\n    const fullAddress = [\n      selectedOffice.get('address1'),\n      selectedOffice.getIn(['location', 'city', 'value']),\n      selectedOffice.getIn(['location', 'province', 'value']),\n      selectedOffice.get('postalZip'),\n      selectedOffice.getIn(['location', 'country', 'value'])\n    ].filter(location => location).join(', ');\n\n    const email = data.get('email', '');\n    const mobilePhone = data.get('mobilePhone', '');\n    const officePhone = data.get('officePhone', '');\n    const extension = data.get('extension', '');\n\n    const lastAccessed = data.get('lastAccessed', '');\n\n    const officeAdminEdit = hasOfficeAdminPermissions(officeId);\n    const firmAdminEdit = hasFirmAdminPermissions(firmId);\n    const isUser = hasEditSelfPermissions(userId);\n\n    const firmName = firm && firm.get('companyName') || '';\n\n    const defaultRoles = data.getIn(['aclRoles', 'default']);\n    const aclRoles = (typeof defaultRoles?.first() === 'string') ? defaultRoles : defaultRoles?.map(role => role.get('value'));\n\n    const displayPictureContainer = (imgId: any, imgSize: number, classNames: string, initial: string) => {\n      return (\n        imgId\n          ? <Image\n            src={imgId}\n            width={`${imgSize}px`}\n            margin='0'\n            aspectRatio={'100%'}\n            fromService={true}\n            backgroundStyle={{ borderRadius: '50%', backgroundSize: 'cover' }}\n          />\n          : <Avatar\n            className={classNames}\n          >\n            {initial}\n          </Avatar>\n      );\n    };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        <DrawerViewHeader\n          imageProps={{\n            ...(imageId\n              ? {\n                  imgComponentProps: {\n                    imgId: imageId,\n                    imgSize: imageSize,\n                    circleImg: true\n                  }\n                }\n              : {\n                  avatarProps: {\n                    classNames: classes.avatar,\n                    initial: userInitial\n                  }\n                }\n              )\n          }}\n          menuItems={\n            (officeAdminEdit || firmAdminEdit || isUser)\n              ? [\n                  { action: t('formButtons.edit'), onClick: this.handleEdit },\n                  { action: t('formButtons.delete'), onClick: this.toggleDeleteModal }\n                ]\n              : null\n          }\n          title={name}\n          otherElements={\n            <Typography\n              variant='body2'\n              className={classes.title}\n            >\n              {jobTitle}\n            </Typography>\n          }\n          handleClose={this.handleClose}\n        />\n\n        {/* content */}\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Typography variant='body2' color='inherit' className={classes.contentTitle}>\n            {t('teamManagementUserDrawer.contactDetailsTitle')}\n          </Typography>\n          {/* firm row */}\n          <DrawerRow\n            muiIcon={<ApartmentRoundedIcon />}\n            text={officeName}\n          />\n\n          {/* address row */}\n          <DrawerRow\n            muiIcon={<RoomIcon />}\n            text={fullAddress}\n          />\n\n          {/* email row */}\n          <DrawerRow muiIcon={<EmailIcon />}>\n            <Tooltip title={`${t('teamManagementUserDrawer.emailTooltip')}: ${email}`} placement='bottom'>\n              <Typography variant='body2' color='inherit'>\n                <a href={'mailto:' + email}>\n                  {email}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n\n          {/* mobile row */}\n          <DrawerRow muiIcon={<PhoneAndroidIcon />}>\n            <Tooltip title={`${t('teamManagementUserDrawer.mobileNumberTooltip')}: ${mobilePhone}`} placement='bottom'>\n              <Typography variant='body2' color='inherit'>\n                <a href={'tel:' + mobilePhone}>\n                  {mobilePhone}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n\n          {/* phone row */}\n          <DrawerRow muiIcon={<PhoneEnabledIcon />}>\n            <Tooltip title={`${t('teamManagementUserDrawer.officeNumberTooltip')}: ${officePhone + (extension ? ` - ${t('teamManagementUserDrawer.extensionTooltip')}:` + extension : '')}`} placement='bottom'>\n              <Typography variant='body2' color='inherit'>\n                <a href={'tel:' + officePhone + (extension ? ',' + extension : '')}>\n                  {officePhone + (extension ? ' - Ext:' + extension : '')}\n                </a>\n              </Typography>\n            </Tooltip>\n          </DrawerRow>\n        </Grid>\n\n        <Divider />\n\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Grid item={true}>\n          <Typography variant='body2' color='inherit' className={classes.contentTitle}>\n            {t('teamManagementUserDrawer.roleTypeLabel')}\n          </Typography>\n          </Grid>\n\n          <Grid item={true}>\n            <Grid container={true} spacing={1}>\n          {\n            aclRoles?.size ? aclRoles.map((role, index) =>\n            <Tooltip key={role + index} title={role}>\n              <Grid item={true}>\n                <Chip className={classes.roleChip} label={role} />\n              </Grid>\n            </Tooltip>\n            )\n            :\n            <Grid item={true}>{'-'}</Grid>\n          }\n          </Grid>\n          </Grid>\n        </Grid>\n\n        <Divider />\n\n        {/* profile page */}\n        <Grid\n          container={true}\n          direction='column'\n          className={classes.body}\n        >\n          <Typography variant='body2' color='inherit' className={classes.contentTitle}>\n            {t('teamManagementUserDrawer.profilePageTitle')}\n          </Typography>\n\n          {/* firm & office row */}\n          <Grid\n            container={true}\n            alignItems='center'\n            wrap='nowrap'\n            className={classes.profileRow}\n          >\n            <Grid\n              container={true}\n              item={true}\n              xs={2}\n              className={classes.icons}\n            >\n              {displayPictureContainer(selectedOffice.get('imageId'), smallImgSize, classnames(classes.avatar, classes.smallAvatar), '')}\n            </Grid>\n            <Grid\n              container={true}\n              direction='column'\n            >\n              <Typography variant='body2' color='inherit'>\n                {firmName}\n              </Typography>\n              {\n                site === SiteName.pt\n                  ? <Link\n                      className={classes.profilePageTypo}\n                      component='button'\n                      underline='none'\n                      onClick={() => {\n                        dispatch(push(`${OFFICE_LIST_DETAIL_PATH}/${selectedOffice.get('id')}`));\n                      }}\n                    >\n                      {officeName}\n                    </Link>\n                  : <Typography variant='body2' color='inherit'>\n                      {officeName}\n                    </Typography>\n              }\n            </Grid>\n          </Grid>\n\n          {/* user row */}\n          <Grid\n            container={true}\n            alignItems='center'\n            wrap='nowrap'\n          >\n            <Grid\n              container={true}\n              item={true}\n              xs={2}\n              className={classes.icons}\n            >\n              {displayPictureContainer(imageId, smallImgSize, classnames(classes.avatar, classes.smallAvatar), userInitial)}\n            </Grid>\n            <Grid\n              container={true}\n              direction='column'\n              wrap='nowrap'\n            >\n              {\n                site === SiteName.pt\n                 ? <Link\n                    className={classes.profilePageTypo}\n                    component='button'\n                    underline='none'\n                    onClick={() => {\n                      dispatch(push(`${USER_DETAILS_PATH}/${userId}`));\n                    }}\n                  >\n                    {name}\n                  </Link>\n                 : <Typography variant='body2' color='inherit'>\n                    {name}\n                  </Typography>\n              }\n              <Typography variant='body2' color='inherit'>\n                {t('teamManagementUserDrawer.lastLoginTitle')} {lastAccessed || t('teamManagementUserDrawer.na')}\n              </Typography>\n            </Grid>\n          </Grid>\n        </Grid>\n\n        <DeleteModal\n          idToDelete={userId}\n          open={this.state.showDeleteModal}\n          itemName={name}\n          toggleDeleteModal={this.toggleDeleteModal}\n          handleDelete={() => this.deleteContact(userId)}\n          withLoading={false}\n        />\n      </Grid>\n    );\n  }\n}\n\n\nconst mapStateToProps = (state, props) => {\n  const { selectedOffice } = props;\n  return {\n    ...createStructuredSelector({\n      selectedOffice: makeSelectOfficeBySelectedTeamOrganizationOfficeId(),\n      firm: makeSelectFirm(),\n      site: makeSelectSite()\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    // selectDrawerOffice: (officeId: number) => {\n    //   dispatch(new SelectTeamOrganizationDrawerOfficeAction({ officeId }));\n    // },\n    // selectOffice: (officeId: number) => {\n    //   dispatch(new SelectTeamOrganizationOfficeAction({ officeId }));\n    // },\n    getFirm: (firmId: number) => {\n      dispatch(new GetFirmsAction(firmId));\n      dispatch(new SetSelectedFirmId({ firmId }));\n    },\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<ITeamManagementUserViewComponentProps>>(\n  withUserPermissions,\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(TeamManagementUserView);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport UserEditDrawer from '../TeamManagementUserEditDrawer';\nimport {\n  makeSelectTeamOrganizationSelectedUser\n} from '../../modules/AccountModule/selectors';\nimport {IMap} from 'ats-utils/src/Interfaces/IMap/index';\nimport {User} from '../../models';\nimport {compose} from 'redux';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport TeamManagementUserViewDrawer from './View';\nimport { withAtsApi } from '../../contexts';\nimport Api from 'ats-api/src';\nimport { Map } from 'immutable';\n\ninterface ITeamManagementUserDrawerComponentProps {\n  drawerId: string;\n  handleCancel: () => void;\n  useCustomData?: boolean;\n}\n\ninterface ITeamManagementUserDrawerProps extends ITeamManagementUserDrawerComponentProps {\n  user?: IMap<User>;\n  content: string;\n  atsApi: Api;\n  getUserAfterUpdate?: boolean;\n  customOnSubmit?: any;\n}\n\nexport const DEFAULT_FORM_NAME = 'TeamManagementUserDrawerForm';\nexport const TEAM_MANAGEMENT_USER_EDIT = 'TeamManagementUserDrawerEdit';\n\n\ntype ITeamManagementUserDrawerType = ITeamManagementUserDrawerProps;\n\nclass TeamManagementUserDrawer extends React.Component<ITeamManagementUserDrawerType, {}> {\n  public render() {\n    const {\n      user,\n      content: _contentString,\n      handleCancel,\n      getUserAfterUpdate,\n      customOnSubmit,\n    } = this.props;\n    const data = user;\n\n    const content = (() => {\n      switch (_contentString) {\n        case TEAM_MANAGEMENT_USER_EDIT: {\n          return  <UserEditDrawer\n                    data={data}\n                    onCloseOverride={handleCancel}\n                    getUserAfterUpdate={getUserAfterUpdate}\n                    customOnSubmit={customOnSubmit}\n                  />;\n        }\n        default: {\n          return  <TeamManagementUserViewDrawer\n                    data={data}\n                  />;\n        }\n      }\n    })();\n\n    return content;\n  }\n}\n\nconst mapStateToProps = (state, props: ITeamManagementUserDrawerComponentProps) => {\n  const {\n    drawerId,\n    useCustomData = false\n  } = props;\n\n  const overlayComponentProps = makeSelectOverlayComponentProp(drawerId)(state) as IMap<{user: IMap<User>, getUserAfterUpdate?: boolean}>;\n  const user = Map.isMap(overlayComponentProps) && overlayComponentProps && overlayComponentProps.get('user');\n  const getUserAfterUpdate = Map.isMap(overlayComponentProps) && overlayComponentProps.get('getUserAfterUpdate');\n  const customOnSubmit = Map.isMap(overlayComponentProps) && overlayComponentProps.get('customOnSubmit');\n\n  return {\n    user: useCustomData ? user : makeSelectTeamOrganizationSelectedUser()(state),\n    content: makeSelectOverlayComponentContent(drawerId)(state),\n    ...(getUserAfterUpdate && {getUserAfterUpdate}),\n    ...(customOnSubmit && {customOnSubmit})\n  };\n};\n\nexport default compose<React.ComponentClass<ITeamManagementUserDrawerComponentProps>> (\n  withAtsApi(),\n  connect(mapStateToProps),\n)(TeamManagementUserDrawer);","import { css } from 'styled-components';\n\n// Use Styled-Components to programatically override stylesheet styles\nexport const gradientMixinCreator = (angle, ...colors) => {\n  const colorStrings = colors.map((colorSettings) => {\n    const {\n      color,\n      pos,\n    } = colorSettings;\n\n    return (pos != null) ? `${color} ${pos}` : color;\n  });\n\n  return css`\n    background: linear-gradient(${angle}, ${colorStrings.join(', ')});\n  `;\n};\n","import * as mixins from './mixins';\nimport styles from './styles.scss';\n\nimport { css } from 'styled-components';\n\nexport { mixins };\n\nexport const breakpoints = {\n  'xs-min': parseInt(styles['screen-xs-min'], 10),\n  'xs-max': parseInt(styles['screen-sm-min'], 10),\n  'sm-min': parseInt(styles['screen-sm-min'], 10),\n  'sm-max': parseInt(styles['screen-md-min'], 10),\n  'md-min': parseInt(styles['screen-md-min'], 10),\n  'md-max': parseInt(styles['screen-lg-min'], 10),\n  'lg-min': parseInt(styles['screen-lg-min'], 10),\n  'lg-max': parseInt(styles['screen-xl-min'], 10),\n  'xl-min': parseInt(styles['screen-xl-min'], 10),\n  'xl-max': -1,\n};\n\nexport const media = {\n  'xs-max': (...args) => css`\n    @media (max-width: ${styles['screen-xs-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'sm-max': (...args) => css`\n    @media (max-width: ${styles['screen-sm-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'md-max': (...args) => css`\n    @media (max-width: ${styles['screen-md-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'lg-max': (...args) => css`\n    @media (max-width: ${styles['screen-lg-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'xl-max': (...args) => css`\n    @media (max-width: ${styles['screen-xl-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'xs-min': (...args) => css`\n    @media (min-width: ${styles['screen-xs-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'sm-min': (...args) => css`\n    @media (min-width: ${styles['screen-sm-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'md-min': (...args) => css`\n    @media (min-width: ${styles['screen-md-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'lg-min': (...args) => css`\n    @media (min-width: ${styles['screen-lg-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n  'xl-min': (...args) => css`\n    @media (min-width: ${styles['screen-xl-min']}px) {\n      ${css(args[0], ...args.slice(1))}\n    }\n  `,\n};\n\nexport default {\n  mixins,\n  breakpoints,\n  media\n};\n","// TODO: check out https://github.com/i18next/i18next-localstorage-backend for caching languages\n// do this after initial development for i18n is mostly done\n\nimport i18n from 'i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport Backend from 'i18next-xhr-backend';\nimport { initReactI18next } from 'react-i18next';\nimport {\n  DEFAULT_LOCALE,\n} from '../../modules/LanguageModule/constants';\nimport {\n  cacheBuster,\n} from '../../constants';\n\ni18n\n  .use(Backend)\n  .use(LanguageDetector)\n  .use(initReactI18next)\n  .init({\n    fallbackLng: DEFAULT_LOCALE,\n    ns: ['default', 'form'],\n    defaultNS: 'default',\n    debug: false,\n    interpolation: {\n      escapeValue: false,\n    },\n    react: {\n      wait: true,\n    },\n    backend: {\n      // for all available options read the backend's repository readme file\n      loadPath: `/locales/{{lng}}/{{ns}}.json?cb=${cacheBuster}`\n    }\n  });\n\nexport default i18n;\n","/*\n *\n * LanguageProvider\n *\n * this component connects the redux state language locale to the\n * I18nextProvider and i18n\n * Accepts i18n as prop, if false is given it will use our own fallback i18n\n */\n\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  I18nextProvider\n} from 'react-i18next';\nimport i18nDefault from './i18n';\nimport * as moment from 'moment';\nimport selectors, { makeSelectLocale } from '../../modules/LanguageModule/selectors';\nimport actions, { ChangeLocaleAction } from '../../modules/LanguageModule/actions';\nimport constants from '../../modules/LanguageModule/constants';\nimport {compose, Dispatch} from 'redux';\nimport i18next from 'i18next';\n\nexport {\n  moment,\n  selectors,\n  actions,\n  constants,\n};\n\nconst importedMomentLocale = ['en'];\n\ninterface ILanguageProviderComponentProps {\n  i18nProp: i18next.i18n;\n  children: JSX.Element;\n}\n\ninterface ILanguageProviderProps extends ILanguageProviderComponentProps {\n  dispatch: Dispatch<IAction>;\n  locale?: string;\n}\ntype LangaugeProviderProps = ILanguageProviderProps;\n\nclass LanguageProvider extends React.PureComponent<LangaugeProviderProps> { // eslint-disable-line react/prefer-stateless-function\n\n  public UNSAFE_componentWillMount() { // eslint-disable-line camelcase\n    const {\n      dispatch,\n      i18nProp,\n    } = this.props;\n\n    // after i18n language is loaded, let's make sure the LOCALE in the redux store is synced with the autodetected language from i18n\n    // this appears to be triggered several times (from development logging) but it seems to work properly so we can leave it for now\n    // triggering multiple times shouldn't have an effect on i18n performance since we only call i18n.changeLanguage if the set language isn't the same as the one in the store\n    i18nProp.on('loaded', () => {\n      if (i18nProp.languages) {\n        dispatch(new ChangeLocaleAction(i18nProp.languages[0]));\n      }\n    });\n  }\n\n  public UNSAFE_componentWillReceiveProps(newProps) { // eslint-disable-line camelcase\n    // this.setState({childData:newProps.data})//this method will not get called first time\n    const {\n      locale = '',\n      i18nProp,\n    } = newProps;\n\n    if (locale !== i18nProp.languages[0]) {\n      i18nProp.changeLanguage(locale);\n      const localeLow = locale.toLowerCase();\n      if (importedMomentLocale.indexOf(localeLow) === -1) {\n        /** Double check this */\n        import(`moment/locale/${localeLow}`).then((newImportedMomentLocale) => {\n          importedMomentLocale.push(newImportedMomentLocale);\n          moment.locale(localeLow);\n        }).catch(() => {\n          moment.locale(localeLow);\n        });\n      } else {\n        moment.locale(localeLow);\n      }\n    }\n  }\n  public render() {\n    const {\n      i18nProp,\n    } = this.props;\n\n    return (\n      <I18nextProvider\n        i18n={i18nProp}\n      >\n        {React.Children.only(this.props.children)}\n      </I18nextProvider>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  locale: makeSelectLocale(),\n});\n\nfunction mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\n\nexport function mergeProps(stateProps, dispatchProps, ownProps) {\n  // here we reassign _i18n to the i18n prop passed in (which might be an object or false)\n  const _i18n = ownProps.i18n;\n  // if the original i18n prop is false, substitute with our fallback i18n imported from ./i18n.ts\n  const i18nProp = _i18n || i18nDefault;\n\n  return Object.assign({}, ownProps, stateProps, dispatchProps, {\n    _i18n,\n    i18nProp: i18nProp.default || i18nProp,\n  });\n}\n\nexport default compose<React.ComponentClass<LangaugeProviderProps>>(\n    connect(mapStateToProps, mapDispatchToProps, mergeProps),\n)(LanguageProvider);\n","\n// isDate returns 3 possible values:\n// null if not a Date object\n// false if is a Date, but not valid date\n// true if is a Date and valid\n\nexport function isValidDate(d) {\n  if (d != null) {\n    if (Object.prototype.toString.call(d) === '[object Date]') {\n      if (isNaN(d.getTime())) {\n        return false;\n      }\n\n      return true;\n    }\n    if (typeof d === 'object' && d._isAMomentObject) {\n      return d._isValid;\n    }\n  }\n  return null;\n}\n\nexport default isValidDate;\n","var baseAssignValue = require('./_baseAssignValue'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nmodule.exports = mapValues;\n","import defaultMoment from 'moment';\n\nvar MomentUtils = /** @class */ (function () {\n    function MomentUtils(_a) {\n        var _b = _a === void 0 ? {} : _a, locale = _b.locale, instance = _b.instance, moment = _b.moment;\n        this.yearFormat = \"YYYY\";\n        this.yearMonthFormat = \"MMMM YYYY\";\n        this.dateTime12hFormat = \"MMMM Do hh:mm a\";\n        this.dateTime24hFormat = \"MMMM Do HH:mm\";\n        this.time12hFormat = \"hh:mm A\";\n        this.time24hFormat = \"HH:mm\";\n        this.dateFormat = \"MMMM Do\";\n        this.moment = instance || moment || defaultMoment;\n        this.locale = locale;\n    }\n    MomentUtils.prototype.parse = function (value, format) {\n        if (value === \"\") {\n            return null;\n        }\n        return this.moment(value, format, true);\n    };\n    MomentUtils.prototype.date = function (value) {\n        if (value === null) {\n            return null;\n        }\n        return this.moment(value);\n    };\n    MomentUtils.prototype.isValid = function (value) {\n        return this.moment(value).isValid();\n    };\n    MomentUtils.prototype.isNull = function (date) {\n        return date === null;\n    };\n    MomentUtils.prototype.getDiff = function (date, comparing) {\n        return date.diff(comparing);\n    };\n    MomentUtils.prototype.isAfter = function (date, value) {\n        return date.isAfter(value);\n    };\n    MomentUtils.prototype.isBefore = function (date, value) {\n        return date.isBefore(value);\n    };\n    MomentUtils.prototype.isAfterDay = function (date, value) {\n        return date.isAfter(value, \"day\");\n    };\n    MomentUtils.prototype.isBeforeDay = function (date, value) {\n        return date.isBefore(value, \"day\");\n    };\n    MomentUtils.prototype.isBeforeYear = function (date, value) {\n        return date.isBefore(value, \"year\");\n    };\n    MomentUtils.prototype.isAfterYear = function (date, value) {\n        return date.isAfter(value, \"year\");\n    };\n    MomentUtils.prototype.startOfDay = function (date) {\n        return date.clone().startOf(\"day\");\n    };\n    MomentUtils.prototype.endOfDay = function (date) {\n        return date.clone().endOf(\"day\");\n    };\n    MomentUtils.prototype.format = function (date, formatString) {\n        return date.format(formatString);\n    };\n    MomentUtils.prototype.formatNumber = function (numberToFormat) {\n        return numberToFormat;\n    };\n    MomentUtils.prototype.getHours = function (date) {\n        return date.get(\"hours\");\n    };\n    MomentUtils.prototype.addDays = function (date, count) {\n        return count < 0\n            ? date.clone().subtract(Math.abs(count), \"days\")\n            : date.clone().add(count, \"days\");\n    };\n    MomentUtils.prototype.setHours = function (date, count) {\n        return date.clone().hours(count);\n    };\n    MomentUtils.prototype.getMinutes = function (date) {\n        return date.get(\"minutes\");\n    };\n    MomentUtils.prototype.setMinutes = function (date, count) {\n        return date.clone().minutes(count);\n    };\n    MomentUtils.prototype.getSeconds = function (date) {\n        return date.get(\"seconds\");\n    };\n    MomentUtils.prototype.setSeconds = function (date, count) {\n        return date.clone().seconds(count);\n    };\n    MomentUtils.prototype.getMonth = function (date) {\n        return date.get(\"month\");\n    };\n    MomentUtils.prototype.isSameDay = function (date, comparing) {\n        return date.isSame(comparing, \"day\");\n    };\n    MomentUtils.prototype.setMonth = function (date, count) {\n        return date.clone().month(count);\n    };\n    MomentUtils.prototype.getMeridiemText = function (ampm) {\n        return ampm === \"am\" ? \"AM\" : \"PM\";\n    };\n    MomentUtils.prototype.startOfMonth = function (date) {\n        return date.clone().startOf(\"month\");\n    };\n    MomentUtils.prototype.endOfMonth = function (date) {\n        return date.clone().endOf(\"month\");\n    };\n    MomentUtils.prototype.getNextMonth = function (date) {\n        return date.clone().add(1, \"month\");\n    };\n    MomentUtils.prototype.getPreviousMonth = function (date) {\n        return date.clone().subtract(1, \"month\");\n    };\n    MomentUtils.prototype.getMonthArray = function (date) {\n        var firstMonth = date.clone().startOf(\"year\");\n        var monthArray = [firstMonth];\n        while (monthArray.length < 12) {\n            var prevMonth = monthArray[monthArray.length - 1];\n            monthArray.push(this.getNextMonth(prevMonth));\n        }\n        return monthArray;\n    };\n    MomentUtils.prototype.getYear = function (date) {\n        return date.get(\"year\");\n    };\n    MomentUtils.prototype.setYear = function (date, year) {\n        return date.clone().set(\"year\", year);\n    };\n    MomentUtils.prototype.mergeDateAndTime = function (date, time) {\n        return this.setMinutes(this.setHours(date, this.getHours(time)), this.getMinutes(time));\n    };\n    MomentUtils.prototype.getWeekdays = function () {\n        var _this = this;\n        return [0, 1, 2, 3, 4, 5, 6].map(function (dayOfWeek) {\n            return _this.moment()\n                .weekday(dayOfWeek)\n                .format(\"dd\");\n        });\n    };\n    MomentUtils.prototype.isEqual = function (value, comparing) {\n        if (value === null && comparing === null) {\n            return true;\n        }\n        return this.moment(value).isSame(comparing);\n    };\n    MomentUtils.prototype.getWeekArray = function (date) {\n        var start = date\n            .clone()\n            .startOf(\"month\")\n            .startOf(\"week\");\n        var end = date\n            .clone()\n            .endOf(\"month\")\n            .endOf(\"week\");\n        var count = 0;\n        var current = start;\n        var nestedWeeks = [];\n        while (current.isBefore(end)) {\n            var weekNumber = Math.floor(count / 7);\n            nestedWeeks[weekNumber] = nestedWeeks[weekNumber] || [];\n            nestedWeeks[weekNumber].push(current);\n            current = current.clone().add(1, \"day\");\n            count += 1;\n        }\n        return nestedWeeks;\n    };\n    MomentUtils.prototype.getYearRange = function (start, end) {\n        var startDate = this.moment(start).startOf(\"year\");\n        var endDate = this.moment(end).endOf(\"year\");\n        var years = [];\n        var current = startDate;\n        while (current.isBefore(endDate)) {\n            years.push(current);\n            current = current.clone().add(1, \"year\");\n        }\n        return years;\n    };\n    // displaying methods\n    MomentUtils.prototype.getCalendarHeaderText = function (date) {\n        return date.format(this.yearMonthFormat);\n    };\n    MomentUtils.prototype.getYearText = function (date) {\n        return date.format(\"YYYY\");\n    };\n    MomentUtils.prototype.getDatePickerHeaderText = function (date) {\n        return date.format(\"ddd, MMM D\");\n    };\n    MomentUtils.prototype.getDateTimePickerHeaderText = function (date) {\n        return date.format(\"MMM D\");\n    };\n    MomentUtils.prototype.getMonthText = function (date) {\n        return date.format(\"MMMM\");\n    };\n    MomentUtils.prototype.getDayText = function (date) {\n        return date.format(\"D\");\n    };\n    MomentUtils.prototype.getHourText = function (date, ampm) {\n        return date.format(ampm ? \"hh\" : \"HH\");\n    };\n    MomentUtils.prototype.getMinuteText = function (date) {\n        return date.format(\"mm\");\n    };\n    MomentUtils.prototype.getSecondText = function (date) {\n        return date.format(\"ss\");\n    };\n    return MomentUtils;\n}());\n\nexport default MomentUtils;\n","\nimport styled from 'styled-components';\n\nconst AppStyle = styled.div`\n  height: 100%;\n  max-height: 100%;\n  display: flex;\n  flex-flow: column nowrap;\n  overflow-x: hidden;\n  word-wrap: break-word;\n`;\n\nexport default AppStyle;","import { Button, createStyles, Dialog, DialogActions, DialogContent, Grid, IconButton, makeStyles, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport CloseIcon from '@material-ui/icons/Close';\nimport WarningIcon from '@material-ui/icons/Warning';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  dialogRoot: {\n    maxWidth: 516,\n    padding: theme.spacing(1, 0, 2, 0),\n  },\n  dialogTitleContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  dialogTitle: {\n    fontWeight: theme.typography.fontWeightBold,\n  },\n  warningIcon: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing(1)\n  },\n  closeButton: {\n    position: 'absolute',\n    top: theme.spacing(1),\n    right: theme.spacing(1)\n  },\n  infoBox: {\n    backgroundColor: theme.palette.grey[100],\n    borderRadius: theme.shape.borderRadius,\n    padding: theme.spacing(2),\n    marginTop: theme.spacing(2),\n    border: `1px solid ${theme.palette.grey[400]}`,\n  },\n  cancelButton: {\n    marginRight: theme.spacing(3)\n  }\n}));\n\nexport interface IDuplicateProductDialogProps {\n  open: boolean;\n  productNumber?: string;\n  itemNumber?: string;\n  brand?: string;\n  onCancel: () => void;\n  onProceed: () => void;\n}\n\nconst DuplicateProductDialog: React.FC<IDuplicateProductDialogProps> = ({\n  open,\n  productNumber,\n  itemNumber,\n  brand,\n  onCancel,\n  onProceed,\n}) => {\n\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  const rows: Array<[string, string]> = [\n    [t('duplicateProductDialog.productNumber'), productNumber || '-'],\n    [t('duplicateProductDialog.internalNumber'), itemNumber || '-'],\n    [t('duplicateProductDialog.manufacturer'), brand || '-'],\n  ];\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onCancel}\n      classes={{\n        paper: classes.dialogRoot\n      }}\n    >\n      <IconButton size='small' className={classes.closeButton} onClick={onCancel}>\n        <CloseIcon fontSize='small' />\n      </IconButton>\n      <DialogContent>\n        <Grid container={true} direction='column'>\n          <Grid container={true} alignItems='center' className={classes.dialogTitleContainer}>\n            <WarningIcon className={classes.warningIcon} />\n            <Typography variant='subtitle1' color='textPrimary' className={classes.dialogTitle}>\n              { t('duplicateProductDialog.title') }\n            </Typography>\n          </Grid>\n          <Grid item={true} xs={12}>\n            <Typography variant='body2' color='textPrimary'>\n              { t('duplicateProductDialog.description') }\n            </Typography>\n            <Grid container={true} spacing={1} className={classes.infoBox}>\n              {rows.map(([label, value]) => (\n                <React.Fragment key={label}>\n                  <Grid item={true} xs={4}>\n                    <Typography variant='body2' color='textSecondary'>\n                      {label}\n                    </Typography>\n                  </Grid>\n                  <Grid item={true} xs={8}>\n                    <Typography variant='body2' color='textPrimary'>\n                      {value}\n                    </Typography>\n                  </Grid>\n                </React.Fragment>\n              ))}\n            </Grid>\n          </Grid>\n        </Grid>\n      </DialogContent>\n      <DialogActions>\n        <Grid container={true} justify='center' spacing={1}>\n          <Button\n            onClick={onCancel}\n            color='primary'\n            className={classes.cancelButton}\n          >\n            { t('formButtons.cancel') }\n          </Button>\n          <Button\n            onClick={onProceed}\n            color='primary'\n            variant='outlined'\n          >\n            { t('duplicateProductDialog.proceedAnyway') }\n          </Button>\n        </Grid>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nexport default DuplicateProductDialog;\n","import * as React from 'react';\nimport {\n  Typography,\n  CircularProgress,\n} from '@material-ui/core';\nimport Grid, { GridProps as GridPropsType } from '@material-ui/core/Grid';\nimport styled, { StyledFunction } from 'styled-components';\n\ninterface ICentered {\n  padding: number;\n}\n\nconst styledDiv: StyledFunction<ICentered & React.HTMLProps<HTMLDivElement>> = styled.div;\n\nconst Centered = styledDiv`\n  padding: ${(props) => props.padding}px;\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n`;\n\ninterface IPaddedMessageProps {\n  children?: React.ReactNode;\n  align?: any;\n  loading?: boolean;\n  padding?: number;\n  GridProps?: GridPropsType;\n  useSecondaryColorForSpinner?: boolean;\n}\n\nconst PaddedMessage: React.FC<IPaddedMessageProps> = (props) => {\n  const {\n    children,\n    padding = 16,\n    align,\n    loading,\n    GridProps,\n    useSecondaryColorForSpinner = false,\n  } = props;\n\n  return (\n    <Centered padding={padding}>\n      <Grid\n        container={true}\n        alignItems='center'\n        spacing={1}\n        {...GridProps}\n      >\n        {\n          loading &&\n          <Grid\n            item={true}\n          >\n            <CircularProgress color={useSecondaryColorForSpinner ? 'secondary' : 'primary'} />\n          </Grid>\n        }\n        <Grid\n          item={true}\n        >\n          <Typography\n            variant='caption'\n            align={align}\n          >\n            {children}\n          </Typography>\n        </Grid>\n      </Grid>\n    </Centered>\n  );\n};\n\nexport default PaddedMessage;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');\n\nexports.default = _default;","import { __awaiter, __generator } from \"tslib\";\nimport PDFString from \"../objects/PDFString\";\nimport PDFHexString from \"../objects/PDFHexString\";\n/**\n * From the PDF-A3 specification, section **3.1. Requirements - General**.\n * See:\n * * https://www.pdfa.org/wp-content/uploads/2018/10/PDF20_AN002-AF.pdf\n */\nexport var AFRelationship;\n(function (AFRelationship) {\n    AFRelationship[\"Source\"] = \"Source\";\n    AFRelationship[\"Data\"] = \"Data\";\n    AFRelationship[\"Alternative\"] = \"Alternative\";\n    AFRelationship[\"Supplement\"] = \"Supplement\";\n    AFRelationship[\"EncryptedPayload\"] = \"EncryptedPayload\";\n    AFRelationship[\"FormData\"] = \"EncryptedPayload\";\n    AFRelationship[\"Schema\"] = \"Schema\";\n    AFRelationship[\"Unspecified\"] = \"Unspecified\";\n})(AFRelationship || (AFRelationship = {}));\nvar FileEmbedder = /** @class */ (function () {\n    function FileEmbedder(fileData, fileName, options) {\n        if (options === void 0) { options = {}; }\n        this.fileData = fileData;\n        this.fileName = fileName;\n        this.options = options;\n    }\n    FileEmbedder.for = function (bytes, fileName, options) {\n        if (options === void 0) { options = {}; }\n        return new FileEmbedder(bytes, fileName, options);\n    };\n    FileEmbedder.prototype.embedIntoContext = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, mimeType, description, creationDate, modificationDate, afRelationship, embeddedFileStream, embeddedFileStreamRef, fileSpecDict;\n            return __generator(this, function (_b) {\n                _a = this.options, mimeType = _a.mimeType, description = _a.description, creationDate = _a.creationDate, modificationDate = _a.modificationDate, afRelationship = _a.afRelationship;\n                embeddedFileStream = context.flateStream(this.fileData, {\n                    Type: 'EmbeddedFile',\n                    Subtype: mimeType !== null && mimeType !== void 0 ? mimeType : undefined,\n                    Params: {\n                        Size: this.fileData.length,\n                        CreationDate: creationDate\n                            ? PDFString.fromDate(creationDate)\n                            : undefined,\n                        ModDate: modificationDate\n                            ? PDFString.fromDate(modificationDate)\n                            : undefined,\n                    },\n                });\n                embeddedFileStreamRef = context.register(embeddedFileStream);\n                fileSpecDict = context.obj({\n                    Type: 'Filespec',\n                    F: PDFString.of(this.fileName),\n                    UF: PDFHexString.fromText(this.fileName),\n                    EF: { F: embeddedFileStreamRef },\n                    Desc: description ? PDFHexString.fromText(description) : undefined,\n                    AFRelationship: afRelationship !== null && afRelationship !== void 0 ? afRelationship : undefined,\n                });\n                if (ref) {\n                    context.assign(ref, fileSpecDict);\n                    return [2 /*return*/, ref];\n                }\n                else {\n                    return [2 /*return*/, context.register(fileSpecDict)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    return FileEmbedder;\n}());\nexport default FileEmbedder;\n//# sourceMappingURL=FileEmbedder.js.map","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {Typography} from '@material-ui/core';\n\nconst InfoBar = ({ children }) => {\n  const { t } = useTranslation('translations');\n  return (\n      <Typography\n        style={{\n            backgroundColor: '#FF5252',\n            color: 'white',\n            minHeight: 44,\n            display: 'flex',\n            alignItems: 'center',\n            padding: '11px 22px',\n            fontWeight: 'bold',\n        }}\n      >\n          {children}\n      </Typography>\n  );\n};\n\nexport default InfoBar;","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z\"\n}), 'Star');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport { useTheme, withStyles } from '@material-ui/core/styles';\nimport { capitalize, useForkRef, useIsFocusVisible } from '@material-ui/core/utils';\nimport Star from '../internal/svg-icons/Star';\n\nfunction clamp(value, min, max) {\n  if (value < min) {\n    return min;\n  }\n\n  if (value > max) {\n    return max;\n  }\n\n  return value;\n}\n\nfunction getDecimalPrecision(num) {\n  var decimalPart = num.toString().split('.')[1];\n  return decimalPart ? decimalPart.length : 0;\n}\n\nfunction roundValueToPrecision(value, precision) {\n  if (value == null) {\n    return value;\n  }\n\n  var nearest = Math.round(value / precision) * precision;\n  return Number(nearest.toFixed(getDecimalPrecision(precision)));\n}\n\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      position: 'relative',\n      fontSize: theme.typography.pxToRem(24),\n      color: '#ffb400',\n      cursor: 'pointer',\n      WebkitTapHighlightColor: 'transparent',\n      '&$disabled': {\n        opacity: 0.5,\n        pointerEvents: 'none'\n      },\n      '&$focusVisible $iconActive': {\n        outline: '1px solid #999'\n      }\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      fontSize: theme.typography.pxToRem(18)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {\n      fontSize: theme.typography.pxToRem(30)\n    },\n\n    /* Styles applied to the root element if `readOnly={true}`. */\n    readOnly: {\n      pointerEvents: 'none'\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if keyboard focused. */\n    focusVisible: {},\n\n    /* Visually hide an element. */\n    visuallyhidden: {\n      border: 0,\n      clip: 'rect(0 0 0 0)',\n      height: 1,\n      margin: -1,\n      color: '#000',\n      overflow: 'hidden',\n      padding: 0,\n      position: 'absolute',\n      top: 20,\n      width: 1\n    },\n\n    /* Styles applied to the pristine label. */\n    pristine: {\n      'input:focus + &': {\n        top: 0,\n        bottom: 0,\n        position: 'absolute',\n        outline: '1px solid #999',\n        width: '100%'\n      }\n    },\n\n    /* Styles applied to the label elements. */\n    label: {\n      cursor: 'inherit'\n    },\n\n    /* Styles applied to the icon wrapping elements. */\n    icon: {\n      display: 'flex',\n      transition: theme.transitions.create('transform', {\n        duration: theme.transitions.duration.shortest\n      }),\n      // Fix mouseLeave issue.\n      // https://github.com/facebook/react/issues/4492\n      pointerEvents: 'none'\n    },\n\n    /* Styles applied to the icon wrapping elements when empty. */\n    iconEmpty: {\n      color: theme.palette.action.disabled\n    },\n\n    /* Styles applied to the icon wrapping elements when filled. */\n    iconFilled: {},\n\n    /* Styles applied to the icon wrapping elements when hover. */\n    iconHover: {},\n\n    /* Styles applied to the icon wrapping elements when focus. */\n    iconFocus: {},\n\n    /* Styles applied to the icon wrapping elements when active. */\n    iconActive: {\n      transform: 'scale(1.2)'\n    },\n\n    /* Styles applied to the icon wrapping elements when decimals are necessary. */\n    decimal: {\n      position: 'relative'\n    }\n  };\n};\n\nfunction IconContainer(props) {\n  var value = props.value,\n      other = _objectWithoutProperties(props, [\"value\"]);\n\n  return React.createElement(\"span\", other);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? IconContainer.propTypes = {\n  value: PropTypes.number.isRequired\n} : void 0;\nvar defaultIcon = React.createElement(Star, {\n  fontSize: \"inherit\"\n});\n\nfunction defaultLabelText(value) {\n  return \"\".concat(value, \" Star\").concat(value !== 1 ? 's' : '');\n}\n\nvar Rating = React.forwardRef(function Rating(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$defaultValue = props.defaultValue,\n      defaultValue = _props$defaultValue === void 0 ? null : _props$defaultValue,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      emptyIcon = props.emptyIcon,\n      _props$emptyLabelText = props.emptyLabelText,\n      emptyLabelText = _props$emptyLabelText === void 0 ? 'Empty' : _props$emptyLabelText,\n      _props$getLabelText = props.getLabelText,\n      getLabelText = _props$getLabelText === void 0 ? defaultLabelText : _props$getLabelText,\n      _props$icon = props.icon,\n      icon = _props$icon === void 0 ? defaultIcon : _props$icon,\n      _props$IconContainerC = props.IconContainerComponent,\n      IconContainerComponent = _props$IconContainerC === void 0 ? IconContainer : _props$IconContainerC,\n      _props$max = props.max,\n      max = _props$max === void 0 ? 5 : _props$max,\n      nameProp = props.name,\n      onChange = props.onChange,\n      onChangeActive = props.onChangeActive,\n      onMouseLeave = props.onMouseLeave,\n      onMouseMove = props.onMouseMove,\n      _props$precision = props.precision,\n      precision = _props$precision === void 0 ? 1 : _props$precision,\n      _props$readOnly = props.readOnly,\n      readOnly = _props$readOnly === void 0 ? false : _props$readOnly,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      valueProp = props.value,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"defaultValue\", \"disabled\", \"emptyIcon\", \"emptyLabelText\", \"getLabelText\", \"icon\", \"IconContainerComponent\", \"max\", \"name\", \"onChange\", \"onChangeActive\", \"onMouseLeave\", \"onMouseMove\", \"precision\", \"readOnly\", \"size\", \"value\"]);\n\n  var _React$useState = React.useState(),\n      defaultName = _React$useState[0],\n      setDefaultName = _React$useState[1];\n\n  var name = nameProp || defaultName;\n  React.useEffect(function () {\n    // Fallback to this default id when possible.\n    // Use the random value for client-side rendering only.\n    // We can't use it server-side.\n    setDefaultName(\"mui-rating-\".concat(Math.round(Math.random() * 1e5)));\n  }, []);\n\n  var _React$useRef = React.useRef(valueProp !== undefined),\n      isControlled = _React$useRef.current;\n\n  var _React$useState2 = React.useState(defaultValue),\n      valueState = _React$useState2[0],\n      setValueState = _React$useState2[1];\n\n  var valueDerived = isControlled ? valueProp : valueState;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(function () {\n      if (isControlled !== (valueProp !== undefined)) {\n        console.error([\"Material-UI: A component is changing \".concat(isControlled ? 'a ' : 'an un', \"controlled Rating to be \").concat(isControlled ? 'un' : '', \"controlled.\"), 'Elements should not switch from uncontrolled to controlled (or vice versa).', 'Decide between using a controlled or uncontrolled Rating ' + 'element for the lifetime of the component.', 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [valueProp, isControlled]);\n  }\n\n  var valueRounded = roundValueToPrecision(valueDerived, precision);\n  var theme = useTheme();\n\n  var _React$useState3 = React.useState({\n    hover: -1,\n    focus: -1\n  }),\n      _React$useState3$ = _React$useState3[0],\n      hover = _React$useState3$.hover,\n      focus = _React$useState3$.focus,\n      setState = _React$useState3[1];\n\n  var value = valueRounded;\n\n  if (hover !== -1) {\n    value = hover;\n  }\n\n  if (focus !== -1) {\n    value = focus;\n  }\n\n  var _useIsFocusVisible = useIsFocusVisible(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState4 = React.useState(false),\n      focusVisible = _React$useState4[0],\n      setFocusVisible = _React$useState4[1];\n\n  var rootRef = React.useRef();\n  var handleFocusRef = useForkRef(focusVisibleRef, rootRef);\n  var handleRef = useForkRef(handleFocusRef, ref);\n\n  var handleMouseMove = function handleMouseMove(event) {\n    if (onMouseMove) {\n      onMouseMove(event);\n    }\n\n    var rootNode = rootRef.current;\n\n    var _rootNode$getBounding = rootNode.getBoundingClientRect(),\n        right = _rootNode$getBounding.right,\n        left = _rootNode$getBounding.left;\n\n    var _rootNode$firstChild$ = rootNode.firstChild.getBoundingClientRect(),\n        width = _rootNode$firstChild$.width;\n\n    var percent;\n\n    if (theme.direction === 'rtl') {\n      percent = (right - event.clientX) / (width * max);\n    } else {\n      percent = (event.clientX - left) / (width * max);\n    }\n\n    var newHover = roundValueToPrecision(max * percent + precision / 2, precision);\n    newHover = clamp(newHover, precision, max);\n    setState(function (prev) {\n      return prev.hover === newHover && prev.focus === newHover ? prev : {\n        hover: newHover,\n        focus: newHover\n      };\n    });\n    setFocusVisible(false);\n\n    if (onChangeActive && hover !== newHover) {\n      onChangeActive(event, newHover);\n    }\n  };\n\n  var handleMouseLeave = function handleMouseLeave(event) {\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n\n    var newHover = -1;\n    setState({\n      hover: newHover,\n      focus: newHover\n    });\n\n    if (onChangeActive && hover !== newHover) {\n      onChangeActive(event, newHover);\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    var newValue = parseFloat(event.target.value);\n\n    if (!isControlled) {\n      setValueState(newValue);\n    }\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n  };\n\n  var handleClear = function handleClear(event) {\n    // Ignore keyboard events\n    // https://github.com/facebook/react/issues/7407\n    if (event.clientX === 0 && event.clientY === 0) {\n      return;\n    }\n\n    setState({\n      hover: -1,\n      focus: -1\n    });\n\n    if (!isControlled) {\n      setValueState(null);\n    }\n\n    if (onChange && parseFloat(event.target.value) === valueRounded) {\n      onChange(event, null);\n    }\n  };\n\n  var handleFocus = function handleFocus(event) {\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n    }\n\n    var newFocus = parseFloat(event.target.value);\n    setState(function (prev) {\n      return {\n        hover: prev.hover,\n        focus: newFocus\n      };\n    });\n\n    if (onChangeActive && focus !== newFocus) {\n      onChangeActive(event, newFocus);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (hover !== -1) {\n      return;\n    }\n\n    if (focusVisible !== false) {\n      setFocusVisible(false);\n      onBlurVisible();\n    }\n\n    var newFocus = -1;\n    setState(function (prev) {\n      return {\n        hover: prev.hover,\n        focus: newFocus\n      };\n    });\n\n    if (onChangeActive && focus !== newFocus) {\n      onChangeActive(event, newFocus);\n    }\n  };\n\n  var item = function item(state, labelProps) {\n    var id = \"\".concat(name, \"-\").concat(String(state.value).replace('.', '-'));\n    var container = React.createElement(IconContainerComponent, {\n      value: state.value,\n      className: clsx(classes.icon, state.filled ? classes.iconFilled : classes.iconEmpty, state.hover && classes.iconHover, state.focus && classes.iconFocus, state.active && classes.iconActive)\n    }, emptyIcon && !state.filled ? emptyIcon : icon);\n\n    if (readOnly) {\n      return React.createElement(React.Fragment, {\n        key: state.value\n      }, container);\n    }\n\n    return React.createElement(React.Fragment, {\n      key: state.value\n    }, React.createElement(\"label\", _extends({\n      className: classes.label,\n      htmlFor: id\n    }, labelProps), container, React.createElement(\"span\", {\n      className: classes.visuallyhidden\n    }, getLabelText(state.value))), React.createElement(\"input\", {\n      onFocus: handleFocus,\n      onBlur: handleBlur,\n      onChange: handleChange,\n      onClick: handleClear,\n      disabled: disabled,\n      value: state.value,\n      id: id,\n      type: \"radio\",\n      name: name,\n      checked: state.checked,\n      className: classes.visuallyhidden\n    }));\n  };\n\n  return React.createElement(\"span\", _extends({\n    ref: handleRef,\n    onMouseMove: handleMouseMove,\n    onMouseLeave: handleMouseLeave,\n    className: clsx(classes.root, className, size !== 'medium' && classes[\"size\".concat(capitalize(size))], disabled && classes.disabled, focusVisible && classes.focusVisible, readOnly && classes.readOnly),\n    role: readOnly ? 'img' : null,\n    \"aria-label\": readOnly ? getLabelText(value) : null\n  }, other), Array.from(new Array(max)).map(function (_, index) {\n    var itemValue = index + 1;\n\n    if (precision < 1) {\n      var items = Array.from(new Array(1 / precision));\n      return React.createElement(\"span\", {\n        key: itemValue,\n        className: clsx(classes.decimal, itemValue === Math.ceil(value) && (hover !== -1 || focus !== -1) && classes.iconActive)\n      }, items.map(function ($, indexDecimal) {\n        var itemDecimalValue = roundValueToPrecision(itemValue - 1 + (indexDecimal + 1) * precision, precision);\n        return item({\n          value: itemDecimalValue,\n          filled: itemDecimalValue <= value,\n          hover: itemDecimalValue <= hover,\n          focus: itemDecimalValue <= focus,\n          checked: itemDecimalValue === valueRounded\n        }, {\n          style: items.length - 1 === indexDecimal ? {} : {\n            width: itemDecimalValue === value ? \"\".concat((indexDecimal + 1) * precision * 100, \"%\") : '0%',\n            overflow: 'hidden',\n            zIndex: 1,\n            position: 'absolute'\n          }\n        });\n      }));\n    }\n\n    return item({\n      value: itemValue,\n      active: itemValue === value && (hover !== -1 || focus !== -1),\n      filled: itemValue <= value,\n      hover: itemValue <= hover,\n      focus: itemValue <= focus,\n      checked: itemValue === valueRounded\n    });\n  }), !readOnly && !disabled && valueRounded == null && React.createElement(React.Fragment, null, React.createElement(\"input\", {\n    value: \"\",\n    id: \"\".concat(name, \"-empty\"),\n    type: \"radio\",\n    name: name,\n    defaultChecked: true,\n    className: classes.visuallyhidden\n  }), React.createElement(\"label\", {\n    className: classes.pristine,\n    htmlFor: \"\".concat(name, \"-empty\")\n  }, React.createElement(\"span\", {\n    className: classes.visuallyhidden\n  }, emptyLabelText))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Rating.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.number,\n\n  /**\n   * If `true`, the rating will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * The icon to display when empty.\n   */\n  emptyIcon: PropTypes.node,\n\n  /**\n   * The label read when the rating input is empty.\n   */\n  emptyLabelText: PropTypes.node,\n\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the current value of the rating.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   *\n   * @param {number} value The rating label's value to format.\n   * @returns {string}\n   */\n  getLabelText: PropTypes.func,\n\n  /**\n   * The icon to display.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The component containing the icon.\n   */\n  IconContainerComponent: PropTypes.elementType,\n\n  /**\n   * Maximum rating.\n   */\n  max: PropTypes.number,\n\n  /**\n   * The name attribute of the radio `input` elements.\n   * If `readOnly` is false, the prop is required,\n   * this input name`should be unique within the parent form.\n   */\n  name: chainPropTypes(PropTypes.string, function (props) {\n    if (!props.readOnly && !props.name) {\n      return new Error(['Material-UI: the prop `name` is required (when `readOnly` is false).', 'Additionally, the input name should be unique within the parent form.'].join('\\n'));\n    }\n\n    return null;\n  }),\n\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {number} value The new value.\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback function that is fired when the hover state changes.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {number} value The new value.\n   */\n  onChangeActive: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseMove: PropTypes.func,\n\n  /**\n   * The minimum increment value change allowed.\n   */\n  precision: PropTypes.number,\n\n  /**\n   * Removes all hover effects and pointer events.\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * The size of the rating.\n   */\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n  /**\n   * The rating value.\n   */\n  value: PropTypes.number\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiRating'\n})(Rating);","import * as React from 'react';\nimport {compose} from 'redux';\nimport {\n  WithStyles,\n  withStyles,\n  Theme,\n  DialogTitle,\n  DialogContent,\n  Grid,\n  Button,\n  Paper,\n  Typography,\n  FormHelperText,\n} from '@material-ui/core';\nimport Rating from '@material-ui/lab/Rating';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  reduxForm,\n  Field\n} from 'redux-form/immutable';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../FieldTextField/';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport ControlledModal from '../ControlledModal';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport {\n  SendXrefFeedbackAction\n} from '../../modules/CrossRefModule/actions';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectSelectedCompetitorProductId, makeSelectXrefData\n} from '../../modules/CrossRefModule/selectors';\nimport {\n  Map,\n  List,\n  fromJS,\n} from 'immutable';\nimport {\n  XrefData\n} from '../../models';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {AMPLITUDE_EVENT, ATS_EVENT, BEMIS_XREF_ID} from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { required, isValidEmailAddress } from '../../validators';\nimport {makeSelectAppId, makeSelectUserEmail} from '../../modules/AtsModule/selectors';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\n\n// This is the styles object where you will write the CSS.\n// You can make a key on this object and then set the CSS properties in that object.\n// Below is an an example of a class name \"root\" with CSS background styling (of the Romanian flag lol)\n\nexport const XREF_FEEDBACK_MODAL = 'XREF_FEEDBACK_MODAL';\n\nconst styles = (theme: Theme) => ({\n  root: {\n    background: 'white',\n    padding: theme.spacing() * 3\n  },\n  messageDialog: {\n    minHeight: theme.spacing() * 15 + 'px',\n    maxHeight: theme.spacing() * 15 + 'px'\n  },\n  DialogTitle: {\n    padding: `0 0 ${theme.spacing() * 2}px 0`,\n  },\n  DialogContent: {\n    padding: 0,\n    paddingBottom: theme.spacing() * 2 + 'px'\n  },\n  typographyDialogTitle: {\n    color: 'black'\n  },\n  button: {\n    minWidth: '0px',\n    padding: theme.spacing() * 2 + 'px',\n    fontSize: theme.typography.fontSize * 2 + 'px'\n  },\n});\n\ninterface ICrossReferenceFeedbackComponentProps {\n  xrefIndex: number;\n}\n\ninterface ICrossReferenceFeedbackProps extends ICrossReferenceFeedbackComponentProps {\n  dispatch: (s: IAction) => void;\n  sendXrefFeedback: (xrefId: number, rating: number, email: string, message?: string ) => void;\n  theme: Theme;\n  selectedCompetitorProductId: number;\n  xrefData: Map<number, List<IMap<XrefData>>>;\n  appId: string;\n}\n\ntype ICrossReferenceFeedback =\n    ICrossReferenceFeedbackProps\n    & WithTranslation\n    & InjectedFormProps\n    & WithStyles<keyof ReturnType<typeof styles>>\n    & WithAmplitudeData;\n\nclass CrossReferenceFeedback extends React.Component<ICrossReferenceFeedback, {rating: number, showError: boolean}> {\n\n  public state = {\n    rating: 0,\n    showError: false\n  };\n\n  public componentDidUpdate() {\n    const {\n      rating,\n      showError\n    } = this.state;\n\n    if (rating !== 0 && showError) {\n      this.setState({showError: false});\n    }\n  }\n  // Here is the JSX, which is what would be similar to HTML\n  // You can put a class name on the component with className={classes.NAME}\n  // where NAME is the key you set above in the styles object.\n  // You can see the example of classes.root on the Paper component belowgit statu\n  public render() {\n    const {\n      t,\n      dispatch,\n      handleSubmit,\n      reset,\n      sendXrefFeedback,\n      classes,\n      selectedCompetitorProductId,\n      xrefData,\n      xrefIndex,\n      amplitudeData,\n      appId,\n    } = this.props;\n\n    const {\n      rating,\n      showError\n    } = this.state;\n\n    const xrefId = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'id'], null);\n    const competitorProductId = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'competitorProduct', 'id'], null);\n    const competitorProductNumber = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'competitorProduct', 'productNumber'], null);\n    const competitorBrand = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'competitorProduct', 'brand'], null);\n    const competitorCategory = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'competitorProduct', 'categoryName'], null);\n    const competitorType = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'competitorProductType'], null);\n    const sponsorProductId = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'sponsorProduct', 'id'], null);\n    const sponsorProductNumber = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'sponsorProduct', 'productNumber'], null);\n    const sponsorBrand = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'sponsorProduct', 'brand'], null);\n    const sponsorCategory = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'sponsorProduct', 'categoryName'], null);\n    const sponsorType = xrefData.getIn([selectedCompetitorProductId, xrefIndex, 'sponsorProductType'], null);\n\n    const isBemis = appId === BEMIS_XREF_ID;\n\n    const submitFeedback = (values: IMap<any>) => {\n      if (rating) {\n        sendXrefFeedback(xrefId, rating, values.get('email'), values.get('message'));\n        dispatch(new ToggleOverlayComponentAction({open: false, id: `${XREF_FEEDBACK_MODAL}${xrefIndex}`}));\n        // for analytic tracking purpose\n        amplitude.logEvent(AMPLITUDE_EVENT.xrefFeedback,\n          amplitudeData({\n            xRefFeedback: 'Specific xRef Feedback Submitted',\n            comment: values.get('message'),\n            rating,\n            compCategory: competitorCategory,\n            compManufacturer: competitorBrand,\n            compProductNumber: competitorProductNumber,\n            compProductId: selectedCompetitorProductId,\n            sponsorCategory,\n            sponsorpManufacturer: sponsorBrand,\n            sponsorProductNumber,\n            sponsorProductId\n          }));\n\n          const customData = {\n            email: values.get('email'),\n            rating,\n            xrefId,\n            competitorProductId,\n            competitorProductNumber,\n            competitorBrand,\n            competitorCategory,\n            competitorType,\n            sponsorProductId,\n            sponsorProductNumber,\n            sponsorBrand,\n            sponsorCategory,\n            sponsorType,\n          };\n          const trackingData = {\n            eventType: ATS_EVENT.xref_feedbackSubmitted,\n            defaultData: amplitudeData(),\n            customData,\n          };\n          dispatch(new CreateAnalyticsEventsAction({\n            trackingData\n          }));\n      } else {\n        this.setState({showError: true});\n      }\n    };\n\n    return (\n      <div>\n        <ControlledModal\n          localKey={`${XREF_FEEDBACK_MODAL}${xrefIndex}`}\n          fullWidth={true}\n          maxWidth={'sm'}\n          onExited={() => {reset(); this.setState({rating: 0, showError: false});}}\n        >\n          <Paper className={classes.root}>\n            <DialogTitle className={classes.DialogTitle}>\n              <Typography className={classes.typographyDialogTitle}>\n                {isBemis ? t('CrossReferenceFeedbackModal.crossReferenceFeedbackAlt') : t('CrossReferenceFeedbackModal.crossReferenceFeedback')}\n              </Typography>\n            </DialogTitle>\n            <DialogContent className={classes.DialogContent}>\n                <Typography>\n                  {t('CrossReferenceFeedbackModal.text')} {competitorBrand} - {competitorProductNumber} {t('CrossReferenceFeedbackModal.to')} {sponsorBrand} - {sponsorProductNumber}\n                </Typography>\n            </DialogContent>\n            <form\n              onSubmit={handleSubmit(submitFeedback)}\n            >\n              <Grid\n                container={true}\n                direction='column'\n              >\n                <Grid item={true}>\n                  <Typography>{t('CrossReferenceFeedbackModal.yourRating')}</Typography>\n                  <Grid container={true} direction='column'>\n                    <Rating\n                      name='rating'\n                      value={rating}\n                      onChange={(event, _rating) => this.setState({rating: _rating})}\n                    />\n                    <FormHelperText id='helper-text' error={true}>{showError && t('errors.required')}</FormHelperText>\n                  </Grid>\n                </Grid>\n                <Grid item={true} style={{width: '100%'}}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='message'\n                    component={FieldTextField}\n                    props={{\n                      inputProps: {\n                        multiline: true,\n                        InputProps: {\n                          classes: {\n                            input: classes.messageDialog\n                          }\n                        }\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      label: t('CrossReferenceFeedbackModal.comment'),\n                    }}\n                  />\n                </Grid>\n                {/* email field */}\n                <Grid item={true} style={{width: '100%'}}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='email'\n                    component={FieldTextField}\n                    props={{\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      label: t('signUpForm.email'),\n                    }}\n                    validate={[\n                      required,\n                      isValidEmailAddress,\n                    ]}\n                  />\n                </Grid>\n                <Grid container={true} direction='row' justify='flex-end'>\n                  <Grid item={true} xs={3}>\n                    <Button\n                      color='primary'\n                      onClick={() => {\n                        dispatch(new ToggleOverlayComponentAction({\n                          open: false,\n                          id: `${XREF_FEEDBACK_MODAL}${xrefIndex}`\n                        }));\n                      }}\n                    >\n                      {t('formButtons.cancel')}\n                    </Button>\n                  </Grid>\n                  <Grid item={true} xs={3}>\n                    <Button\n                      color='primary'\n                      type='submit'\n                    >\n                      {t('formButtons.submit')}\n                    </Button>\n                  </Grid>\n                </Grid>\n              </Grid>\n            </form>\n          </Paper>\n        </ControlledModal>\n      </div>\n    );\n  }\n}\n\nconst makeMapStateToProps = () => {\n  const selectUserEmail = makeSelectUserEmail();\n  const selectSelectedCompetitorProductId = makeSelectSelectedCompetitorProductId();\n  const selectXrefData = makeSelectXrefData();\n  const selectAppId = makeSelectAppId();\n\n  const mapStateToProps = (state) => ({\n    initialValues: fromJS({\n      email: selectUserEmail(state)\n    }),\n    selectedCompetitorProductId: selectSelectedCompetitorProductId(state),\n    xrefData: selectXrefData(state),\n    appId: selectAppId(state),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    sendXrefFeedback: (xrefId: number, rating: number, email: string, message?: string) => {\n      dispatch(new SendXrefFeedbackAction({\n        xrefId,\n        body: {\n          email,\n          rating,\n          message\n        }\n      }));\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<ICrossReferenceFeedbackComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(makeMapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: XREF_FEEDBACK_MODAL,\n    destroyOnUnmount: true,\n    enableReinitialize : true\n  }),\n)(CrossReferenceFeedback);","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  Typography,\n  Button,\n  Divider,\n  IconButton,\n  Link,\n  Card,\n  Tooltip,\n  Collapse,\n  CardContent,\n  Tabs,\n  Tab,\n  Orientation,\n  Chip\n} from '@material-ui/core';\nimport {\n  useTheme\n} from '@material-ui/core/styles';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  XrefProduct,\n  Product,\n  XrefData,\n  XrefType,\n  AttributeValue,\n  Series,\n} from '../../models';\nimport { GetProductDetailsAction } from '../../modules/CrossRefModule/actions';\nimport { List, OrderedSet, fromJS } from 'immutable';\nimport {\n  Image, PaddedMessage\n} from '../../components';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\n\nimport {\n  MODAL_ID,\n} from '../../containers/CrossReferenceModal';\nimport { makeSelectOverlayComponentProp, makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport CrossReferenceFeedback, { XREF_FEEDBACK_MODAL } from '../../components/CrossReferenceFeedback';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { AtsSvgProduct, AtsSvgSeries, AtsSvgPackage } from '../../components/AtsSvg';\nimport clsx from 'clsx';\nimport { GetSeriesDetailsAction } from '../../modules/PimModule/actions';\n\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { AMPLITUDE_EVENT, ATS_EVENT, CONTRAC_XREF_ID, FIAT_XREF_ID, GEOLOCATION_ID, IPS_XREF_ID, KOHLER_XREF_ID, MISSION_RUBBER_XREF_ID, NEPTUNE_XREF_ID, OSB_XREF_ID, PRESSALIT_XREF_ID, PRIER_XREF_ID, TS_BRASS_XREF_ID, WILLIAMS_BROTHERS_XREF_ID, SiteName } from '../../constants';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectConfig, makeSelectUserFirmId, makeSelectSite } from '../../modules/AtsModule/selectors';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport CheckCircleOutlineRoundedIcon from '@material-ui/icons/CheckCircleOutlineRounded';\nimport StarIcon from '@material-ui/icons/Star';\nimport i18next from 'i18next';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\nimport { getIn } from 'immutable';\nimport { makeSelectSelectedRegion } from '../../modules/LocationModule/selectors';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\nimport { iconSelect } from '.';\nimport { makeStyles } from '@material-ui/styles';\nimport FeedbackOutlinedIcon from '@material-ui/icons/FeedbackOutlined';\nimport { copyToClipboard } from '../../utils/copyToClipboard';\n\nconst imgSize = 88;\n\nconst a11yProps = (index: number) => ({\n  id: `vertical-tab-${index}`,\n  'aria-controls': `vertical-tabpanel-${index}`\n});\n\ninterface IExpansionItemComponentProps {\n  data: IMap<XrefData>;\n  index: number;\n  companyName?: string;\n}\n\ninterface IExpansionItemProps extends IExpansionItemComponentProps {\n}\n\ntype ExpansionItemProps = IExpansionItemProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  root: {\n    width: '100%'\n  },\n  horizontalDivider: {\n    margin: theme.spacing(2.5, 0)\n  },\n  horizontalDividerHead: {\n    margin: theme.spacing(1.5, 0)\n  },\n  cardContent: {\n    padding: 0\n  },\n  attribute: {\n    width: 'calc(100%/3)',\n    padding: theme.spacing()\n  },\n  itemContainer: {\n    padding: theme.spacing(1.5),\n    marginBottom: theme.spacing(2),\n  },\n  itemTitle: {\n    cursor: 'pointer'\n  },\n  textOverFlow: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  generalInfo: {\n    width: 'calc(100% - 120px)'\n  },\n  svg: {\n    width: imgSize,\n    height: imgSize\n  },\n  expand: {\n    transform: 'rotate(0deg)',\n    marginLeft: 'auto',\n    transition: theme.transitions.create('transform', {\n      duration: theme.transitions.duration.shortest,\n    }),\n  },\n  expandOpen: {\n    transform: 'rotate(180deg)',\n  },\n  darkText: {\n    color: 'rgba(0, 0, 0, 0.87)',\n  },\n  tabs: {\n    width: '220px',\n    minWidth: '220px',\n    borderRight: `1px solid ${theme.palette.divider}`,\n    marginRight: theme.spacing(2.5)\n  },\n  expansionIcon: {\n    width: '60px'\n  },\n  lastColumn: {\n    marginTop: theme.spacing(2.25),\n    [theme.breakpoints.down('sm')]: {\n      marginLeft: theme.spacing(2),\n      marginTop: theme.spacing(0),\n    },\n  },\n  iconButton: {\n    marginLeft: theme.spacing(1),\n  }\n}));\n\nconst ExpansionItem: React.FC<ExpansionItemProps> = ({\n  data,\n  index,\n  companyName,\n}) => {\n  const modalProps = useSelector(makeSelectOverlayComponentProp(MODAL_ID));\n  const atsApiIdentity =  useSelector(makeSelectAtsApiState('envLoaded'));\n  const atsApi = useAtsApi();\n  const config = useSelector(makeSelectConfig());\n  const locale = useSelector(makeSelectLocale());\n  const selectedRegion = useSelector(makeSelectSelectedRegion());\n  const selfFirmId = useSelector(makeSelectUserFirmId());\n  const site = useSelector(makeSelectSite());\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const [expanded, setExpanded] = React.useState(false);\n  const [copiedIndex, setCopiedIndex] = React.useState<number>(null);\n  const [copyFailedIndex, setCopyFailedIndex] = React.useState<number>(null);\n  const [packageProductId, setPackageProductId] = React.useState(null);\n  const [fetching, setFetching] = React.useState(false);\n  const [productOrSeries, setProductOrSeries] = React.useState<IMap<any>>(null);\n  const [orderedAttributes, setOrderedAttributes] = React.useState<OrderedSet<IMap<AttributeValue>>>(null);\n\n  const isStandaloneXref = site === SiteName.xref;\n  const hasNoAttributes = Boolean(orderedAttributes?.isEmpty());\n\n  React.useEffect(() => {\n    handleChange();\n  }, []);\n\n  const downloadSpecSheet = (cutsheet: string) => {\n    const manufacturerCutsheet = cutsheet;\n    if (!manufacturerCutsheet) {\n      return null;\n    }\n    try {\n      return atsApiIdentity && atsApi.callApi(manufacturerCutsheet, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: { download: false } }) as string;\n    } catch (e) {\n      console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', {\n        e,\n        atsApi,\n      });\n      return null;\n    }\n  };\n\n  const onViewSpecClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n    amplitude.logEvent(AMPLITUDE_EVENT.downloadProductMedia, amplitudeData({\n      fileType: 'manufacturer_cutsheet',\n      productNumber: data.get('productNumber'),\n      category: data.get('categoryName'),\n      productManufacturer: data.get('brand'),\n      isDirectDownload: true\n    }));\n  };\n\n  const getCutsheetByRegionLocaleOrFallback = (dataMap: IMap<Series | Product | XrefProduct>) => {\n    const isFr = locale === 'fr';\n    const isCanada = selectedRegion.getIn(['country', 'id']) === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n    // If fr, determine location If nothing available in fr at all,then fall back to en\n    const frCutSheet = isCanada\n      ? dataMap.getIn(['file', 'media', 'fr-ca', 'manufacturer_cutsheet']) || dataMap.getIn(['file', 'media', 'fr', 'manufacturer_cutsheet']) || dataMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet'])\n      : dataMap.getIn(['file', 'media', 'fr', 'manufacturer_cutsheet']) || dataMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet']);\n    return isFr\n      ? frCutSheet\n      : isCanada\n        ? dataMap.getIn(['file', 'media', 'en-ca', 'manufacturer_cutsheet']) || dataMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet'])\n        : dataMap.getIn(['file', 'media', 'en-us', 'manufacturer_cutsheet']) || dataMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet']);\n  };\n\n  const getProductList = (products) => (\n    products\n      ? products.reduce((acc, _product) => acc.push(_product.get('productNumber')), List())\n      : List()\n  );\n\n  const getProductData = async (productId: number | string) => {\n    setFetching(true);\n\n    new Promise((resolve, reject) => (\n      dispatch(new GetProductDetailsAction({\n        productId: Number(productId),\n        onSuccess: (_product: IMap<Product>) => {\n          resolve(_product);\n        },\n        onFailed: () => {\n          reject();\n        }\n      }))\n    )).then((response: IMap<any>) => {\n        setProductOrSeries(response);\n        getWhiteList(data.getIn(['sponsorProduct', 'category']), response?.get('attributes'));\n    }).finally(() => {\n      setFetching(false);\n    });\n  };\n\n  const getSeriesData = async () => {\n    setFetching(true);\n\n    new Promise((resolve, reject) => (\n      dispatch(new GetSeriesDetailsAction({\n        xrefProduct: product,\n        onSuccess: (series: IMap<Series>) => {\n          resolve(series);\n        },\n        onFailed: () => {\n          reject();\n        }\n      }))\n    )).then((response: IMap<any>) => {\n      setProductOrSeries(response);\n      getWhiteList(data.getIn(['sponsorProduct', 'category']), response?.get('attributes')?.filter((attribute) => attribute.get('isAttribute') && !attribute.get('isOption')));\n    }).finally(() => {\n      setFetching(false);\n    });\n  };\n\n  const getWhiteList = (categoryId, attributes?) => {\n    if (atsApiIdentity) {\n      (atsApi.callApi({\n        service: 'product',\n        endpoint: 'getAttributeOrder',\n        params: {\n          categoryId,\n          source: 'specProductDetails'\n        },\n      }) as any).then(res => {\n        const whiteList = fromJS(res?.payload?.product?.attributes);\n        const _orderedAttributes: OrderedSet<IMap<AttributeValue>> = (attributes && whiteList && !whiteList.isEmpty())\n          ? whiteList.map((listItem) => attributes && attributes.get(listItem)).filter((_product) => _product != null)\n          : attributes?.valueSeq().toOrderedSet();\n\n        setOrderedAttributes(_orderedAttributes);\n      }).catch((err) => {\n        // no ordering available: show the attributes as they come instead of surfacing an unhandled rejection\n        console.warn('Unable to load the attribute order.', err); // tslint:disable-line\n        setOrderedAttributes(attributes?.valueSeq().toOrderedSet());\n      });\n    }\n  };\n\n  const handleTabChange = (event: React.ChangeEvent<{}>, _packageProductId: number | string) => {\n    setPackageProductId(_packageProductId);\n    getProductData(_packageProductId);\n  };\n\n  const handleChange = () => {\n    if (productOrSeries) {\n      return ;\n    }\n\n    const productId = product.get('id');\n    const products = product.get('products');\n\n    if (sponsorProductType === 'product') {\n      getProductData(productId);\n    } else if (sponsorProductType === 'series') {\n      getSeriesData();\n    } else if (products.size) {\n      getProductData(products.getIn([0, 'id']));\n    }\n\n    setPackageProductId(null);\n  };\n\n  const product = data.get('sponsorProduct');\n  const productStatus = product.get('status');\n  const sponsorProductType = data.get('sponsorProductType');\n  const isPackageType = sponsorProductType === 'package';\n\n  const customProductImage = config?.getIn(['layout', 'customProductImage']);\n  const orientation: Orientation = config.getIn(['layout', 'orientation'], 'vertical');\n\n  const info = {\n    id: product.get('id'),\n    media: product.getIn(['file', 'images', 'main', 'fileId']),\n    cutsheet: getCutsheetByRegionLocaleOrFallback(product),\n  };\n\n  const SVG = sponsorProductType === 'product' ? AtsSvgProduct : isPackageType ? AtsSvgPackage : AtsSvgSeries;\n  const appId = config.getIn(['atsApiOptions', 'apiKey']);\n  const secondaryColorIconApps = [\n    FIAT_XREF_ID,\n    PRIER_XREF_ID,\n    MISSION_RUBBER_XREF_ID,\n    WILLIAMS_BROTHERS_XREF_ID,\n    TS_BRASS_XREF_ID,\n    KOHLER_XREF_ID,\n    OSB_XREF_ID,\n    PRESSALIT_XREF_ID,\n    IPS_XREF_ID,\n    CONTRAC_XREF_ID,\n    NEPTUNE_XREF_ID,\n  ];\n  const secondaryColorIcon = secondaryColorIconApps.includes(appId);\n\n  const uiOverrides = config.get('uiOverrides');\n  const cardSvgBackgroundColor = uiOverrides?.get('cardSvgBackgroundColor');\n  const cardSvgShadowColor = uiOverrides?.get('cardSvgShadowColor');\n\n  const imgDisplay = info.media\n    ? <Image\n        src={info.media + `|resize:${imgSize},${imgSize}`}\n        width={`${imgSize}px`}\n        aspectRatio={'100%'}\n        fromService={true}\n      />\n    : <Grid\n        container={true}\n        justify='center'\n        alignItems='center'\n        className={classes.svg}\n      >\n        <SVG\n          width={String(imgSize * 0.825)}\n          height={String(imgSize * 0.825)}\n          color={{\n            backgroundColor: cardSvgBackgroundColor || (secondaryColorIcon ? theme.palette.secondary[100] : theme.palette.primary[200]),\n            shadowColor: cardSvgShadowColor || (secondaryColorIcon ? theme.palette.secondary[800] : theme.palette.primary[800])\n          }}\n        />\n      </Grid>;\n\n  const attributeAndValues = orderedAttributes?.map((attribute: IMap<AttributeValue>, i) => {\n    return <Grid\n      item={true}\n      key={`${attribute.get('name')}-${i}`}\n      className={classes.attribute}\n      container={true}\n      spacing={1}\n      direction='column'\n    >\n      <Grid item={true}>\n        <Typography\n          variant='body2'\n          color='inherit'\n        >\n          {attribute.get('name')}:\n        </Typography>\n      </Grid>\n      <Grid item={true}>\n        <Typography variant='body1'>\n          {\n            sponsorProductType === 'series'\n              ? attribute.getIn(['values', 0, 'description'])\n              : attribute.get('description')\n          }\n        </Typography>\n      </Grid>\n    </Grid>;\n  });\n\n  const typesIcon = data.get('types').map((type: IMap<XrefType>, key: number) => (\n    <Grid key={key}>\n      { iconSelect(type.get('type')) }\n      {\n        type.get('type') === 'firm' && type.get('referenceId') === selfFirmId && (\n          <Tooltip title={`${companyName} ${i18next.t('translations:crossReferenceTypes.firm')}`}>\n            <StarIcon color='action' />\n          </Tooltip>\n        )\n      }\n    </Grid>\n  ));\n\n  const packageProducts = product.get('products');\n  const productNumbers = getProductList(packageProducts).join(', ');\n  const productsDisplay = isPackageType\n    ? <Tooltip title={productNumbers} className={classes.textOverFlow}>\n        <Typography variant='body1' color='inherit'>\n          { `${t('CrossReference.products')}: ${productNumbers}` }\n        </Typography>\n      </Tooltip>\n    : null;\n\n  const cutsheetObject = info.cutsheet;\n  const cutsheetFileId = cutsheetObject && cutsheetObject.get('fileId');\n  const cutsheetUrl = (cutsheetObject && cutsheetObject.get('url')) || null;\n\n  const productNumberIsCopied = copiedIndex === index;\n  const productNumberCopyFailed = copyFailedIndex === index;\n  const copyTooltip = productNumberIsCopied\n    ? t('CrossReference.copied')\n    : productNumberCopyFailed ? t('CrossReference.copyFailed') : t('CrossReference.copy');\n\n  return (\n    <Card\n      className={classes.itemContainer}\n      classes={{\n        root: classes.cardContent\n      }}\n      key={index}\n    >\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        {/* summary info container */}\n        <Grid\n          container={true}\n          direction='row'\n          justify='space-between'\n          alignItems='center'\n          wrap='nowrap'\n          style={{ position: 'relative'}}\n        >\n          <Grid\n            container={true}\n            spacing={2}\n            alignItems='center'\n            justify='space-between'\n          >\n            <Grid\n              item={true}\n              md={6}\n              xs={12}\n              container={true}\n              direction='row'\n              wrap='nowrap'\n              alignItems='center'\n              spacing={2}\n            >\n              {/* img column */}\n              <Grid item={true}>\n                {\n                  customProductImage\n                  ? <Image\n                      src={customProductImage}\n                      width='70px'\n                      aspectRatio={'100%'}\n                      fromService={true}\n                      backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n                    />\n                  : imgDisplay\n                }\n              </Grid>\n\n              {/* middle column */}\n              <Grid\n                container={true}\n                item={true}\n                direction='column'\n                alignItems='flex-start'\n                justify='center'\n                spacing={1}\n              >\n                <Grid item={true} className={classes.generalInfo} container={true} alignItems='center'>\n                  <Link\n                    className={(isStandaloneXref && hasNoAttributes) ? null : classes.itemTitle}\n                    underline='none'\n                    color='primary'\n                    onClick={(e) => {\n                      e.preventDefault();\n                      if (!hasNoAttributes) {\n                        setExpanded(!expanded);\n                      }\n                      handleChange();\n\n                      amplitude.logEvent(AMPLITUDE_EVENT.xrefSponsorProductSelected, amplitudeData({brand: product.get('brand'), categoryName: product.get('categoryName'), productId: product.get('id'), productNumber: product.get('productNumber')}));\n                      dispatch(new ToggleOverlayComponentAction({\n                        id: MODAL_ID,\n                        open: false,\n                      }));\n\n                      const {\n                        onXrefProductSelected,\n                      } = modalProps;\n                      if (onXrefProductSelected != null) {\n                        onXrefProductSelected(data);\n                      }\n\n                      const customData = {\n                        sponsorProductId: product.get('id'),\n                        productNumber: product.get('productNumber'),\n                        brand: product.get('brand'),\n                        categoryName: product.get('categoryName'),\n                        sponsorProductType,\n                      };\n                      const trackingData = {\n                        eventType: ATS_EVENT.xref_stepTwo_SponsorSelected,\n                        defaultData: amplitudeData(),\n                        customData,\n                      };\n                      dispatch(new CreateAnalyticsEventsAction({\n                        trackingData\n                      }));\n                    }}\n                  >\n                    <Tooltip title={product.get('productNumber')}>\n                      <Typography variant='body1' color='inherit' className={classes.textOverFlow}>\n                        {product.get('productNumber')}\n                      </Typography>\n                    </Tooltip>\n                  </Link>\n                  {\n                    orientation === 'horizontal' && (\n                      <Tooltip placement='top' title={copyTooltip}>\n                        <IconButton size='small' className={classes.iconButton} onClick={() => {\n                          // only show the check once the number is actually on the clipboard; the number stays\n                          // visible on screen, so on a refused clipboard the tooltip asks the user to copy it by hand\n                          copyToClipboard(product.get('productNumber')).then((copied) => {\n                            setCopiedIndex(copied ? index : null);\n                            setCopyFailedIndex(copied ? null : index);\n                          });\n                        }}>\n                          {\n                            productNumberIsCopied\n                            ? <CheckCircleOutlineRoundedIcon color='primary' fontSize='small'/>\n                            : <FileCopyIcon color='primary' fontSize='small'/>\n                          }\n                        </IconButton>\n                      </Tooltip>\n                    )\n                  }\n                </Grid>\n                <Grid\n                  item={true}\n                  className={classes.generalInfo}\n                  xs={12}\n                >\n                  <Tooltip title={product.get('brand')}>\n                    <Typography variant='body1' color='inherit' className={classes.textOverFlow}>\n                      {product.get('brand')}\n                    </Typography>\n                  </Tooltip>\n                  <Tooltip title={product.get('categoryName')} className={classes.textOverFlow}>\n                    <Typography variant='body1' color='inherit'>\n                      {product.get('categoryName')}\n                    </Typography>\n                  </Tooltip>\n                  <Tooltip title={product.get('productNumber')} className={classes.textOverFlow}>\n                    <Typography variant='body1' color='inherit'>\n                      {product.get('productNumber')}\n                    </Typography>\n                  </Tooltip>\n                </Grid>\n              </Grid>\n            </Grid>\n\n            {/* last column */}\n            <Grid\n              item={true}\n              md={6}\n              xs={12}\n              container={true}\n              direction='column'\n              wrap='nowrap'\n              justify='center'\n              spacing={2}\n              className={classes.lastColumn}\n            >\n              {productStatus !== 'active' &&\n                <Grid style={{marginBottom: 12}}>\n                  <Chip\n                    style={{ borderRadius: '3px', backgroundColor: getIn(theme.palette, ['status', 'missed'], 'none')}}\n                    label={t(`status.${productStatus}`)}\n                    size='small'\n                  />\n                </Grid>\n              }\n              { productsDisplay }\n              <Grid item={true} container={true} direction='row' spacing={2} alignItems='center'>\n                <Typography variant='body1' className={classes.darkText} noWrap={true}>\n                  {t('CrossReference.crossTypes')}:\n                </Typography>\n                { typesIcon.map((typeIcon, key) => <Grid key={key} item={true}>{typeIcon}</Grid>) }\n              </Grid>\n            </Grid>\n          </Grid>\n\n          {/* view spec button */}\n          {info.cutsheet &&\n            <Button\n              color='primary'\n              variant='text'\n              href={cutsheetFileId ? downloadSpecSheet(cutsheetFileId) : cutsheetUrl}\n              target={'_blank'}\n              onClick={onViewSpecClick}\n              style={{ whiteSpace: 'nowrap', minWidth: 'auto' }}\n            >\n              {t('CrossReference.viewSpec')}\n            </Button>\n          }\n          <Tooltip title={t('CrossReference.feedback')}>\n            <FeedbackOutlinedIcon\n              onClick={() => {\n                dispatch(new ToggleOverlayComponentAction({ open: true, id: `${XREF_FEEDBACK_MODAL}${index}` }));\n                amplitude.logEvent(AMPLITUDE_EVENT.xrefFeedback, amplitudeData());\n              }}\n              color='action'\n              style={{\n                position: 'absolute',\n                right: 11,\n                bottom: 0,\n                cursor: 'pointer',\n              }}\n            />\n          </Tooltip>\n          <CrossReferenceFeedback xrefIndex={index} />\n\n          {/* expansion button */}\n          <Grid\n            container={true}\n            justify='flex-end'\n            item={true}\n            className={classes.expansionIcon}\n          >\n            {\n              !hasNoAttributes && (\n                <IconButton\n                  className={clsx(classes.expand, {\n                    [classes.expandOpen]: expanded,\n                  })}\n                  onClick={() => {\n                    if (expanded === false) {\n                      handleChange();\n                      const customData = {\n                        sponsorProductId: product.get('id'),\n                        productNumber: product.get('productNumber'),\n                        brand: product.get('brand'),\n                        categoryName: product.get('categoryName'),\n                        sponsorProductType,\n                      };\n                      const trackingData = {\n                        eventType: ATS_EVENT.xref_stepTwo_SponsorExpanded,\n                        defaultData: amplitudeData(),\n                        customData,\n                      };\n                      dispatch(new CreateAnalyticsEventsAction({\n                        trackingData\n                      }));\n                    }\n                    setExpanded(!expanded);\n                  }}\n                  aria-expanded={expanded}\n                  aria-label={t('CrossReference.showMore')}\n                >\n                  <ExpandMoreIcon />\n                </IconButton>\n              )\n            }\n          </Grid>\n        </Grid>\n\n        <Collapse in={expanded} timeout='auto' unmountOnExit={true}>\n          <Divider className={classes.horizontalDividerHead} />\n          <CardContent>\n            <Grid\n              container={true}\n              direction='row'\n              wrap='nowrap'\n            >\n              {\n                isPackageType && packageProducts.size\n                  ? <Tabs\n                      orientation='vertical'\n                      variant='scrollable'\n                      value={packageProductId || packageProducts.getIn([0, 'id'])}\n                      onChange={handleTabChange}\n                      aria-label={t('CrossReference.packageProductMenu')}\n                      textColor='primary'\n                      className={classes.tabs}\n                    >\n                      {\n                        packageProducts.map((packageProduct, pIndex) => (\n                          <Tab\n                            key={pIndex}\n                            label={packageProduct.get('productNumber')}\n                            value={packageProduct.get('id')}\n                            {...a11yProps(pIndex)}\n                          />\n                        ))\n                      }\n                    </Tabs>\n                : null\n              }\n\n              {fetching ? <PaddedMessage loading={true}>{t('CrossReference.loading')}</PaddedMessage> :\n                <Grid\n                  container={true}\n                  direction='column'\n                >\n                  {\n                    isPackageType && !packageProducts.size\n                      ? null\n                      : <>\n                          <Grid\n                            container={true}\n                            direction='column'\n                            wrap='nowrap'\n                          >\n                            <Typography variant='h6' color='inherit'>\n                              {t('CrossReference.features')}\n                            </Typography>\n                            <Grid\n                              container={true}\n                              direction='row'\n                              justify='flex-start'\n                              // className={classes.attributeContainer}\n                            >\n                              {\n                                attributeAndValues\n                              }\n                            </Grid>\n                          </Grid>\n                          {/* <Divider className={classes.horizontalDivider} /> */}\n                        </>\n                  }\n                </Grid>\n              }\n            </Grid>\n          </CardContent>\n        </Collapse>\n      </Grid>\n    </Card>\n  );\n};\n\nexport default ExpansionItem;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n  Tooltip,\n  TablePagination,\n  Orientation,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IConfig,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  XrefData,\n} from '../../models';\nimport { List } from 'immutable';\nimport {\n  TablePaginationActions\n} from '../../components';\n\nimport BuildIcon from '@material-ui/icons/Build';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport AttachMoneyIcon from '@material-ui/icons/AttachMoney';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport BrushIcon from '@material-ui/icons/Brush';\nimport { CROSS_TYPE_NAMES } from '../../constants';\n\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\nimport i18next from 'i18next';\nimport ExpansionItem from './ExpansionItem';\n\nexport const iconSelect = (type: string, size?: number) => {\n  switch (type) {\n    case CROSS_TYPE_NAMES.recommended:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.recommended')}><ThumbUpIcon style={size ? { width: size, height: size } : {}} color='action' /></Tooltip>\n    case CROSS_TYPE_NAMES.function:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.function')}><BuildIcon style={size ? { width: size, height: size } : {}} color='action' fontSize='small' /></Tooltip>\n    case CROSS_TYPE_NAMES.value:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.value')}><AttachMoneyIcon style={size ? { width: size, height: size } : {}} color='action' /></Tooltip>\n    case CROSS_TYPE_NAMES.finish:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.finish')}><BrushIcon style={size ? { width: size, height: size } : {}} color='action' /></Tooltip>\n    case CROSS_TYPE_NAMES.closestMatch:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.closestMatch')}><ShuffleIcon style={size ? { width: size, height: size } : {}} color='action' /></Tooltip>\n    case CROSS_TYPE_NAMES.aesthetics:\n      return <Tooltip title={i18next.t('translations:crossReferenceTypes.aesthetics')}><VisibilityIcon style={size ? { width: size, height: size } : {}} color='action' /></Tooltip>\n  }\n};\n\ninterface IXrefExpansionComponentProps {\n  xRefData: List<IMap<XrefData>>;\n  customProductImage?: string;\n  companyName?: string;\n}\n\ninterface IXrefExpansionProps extends InjectedFormProps {\n  config: IMap<IConfig>;\n}\n\ntype XrefExpansionType = WithTranslation & IXrefExpansionProps & IXrefExpansionComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass XrefExpansion extends React.Component<XrefExpansionType, {}> {\n  public state = {\n    page: 0,\n    rowsPerPage: 10,\n  }\n\n  public handlePageChange = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>, page: number) => {\n    this.setState({ page });\n  }\n\n  public handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n    this.setState({\n      page: 0,\n      rowsPerPage: parseInt(event.target.value, 10)\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      xRefData,\n      t,\n      config,\n      companyName,\n    } = this.props;\n    const {\n      page,\n      rowsPerPage,\n    } = this.state;\n\n    const orientation: Orientation = config.getIn(['layout', 'orientation'], 'vertical');\n\n    const paginatedData = orientation === 'horizontal'\n      ? xRefData\n      : xRefData && xRefData.slice(page * rowsPerPage, ((page + 1) * rowsPerPage));\n\n    const expansion = paginatedData && paginatedData.map((data: IMap<XrefData>, index: number) => {\n      return (\n        <ExpansionItem\n          key={index}\n          data={data}\n          index={index}\n          companyName={companyName}\n        />\n      );\n    }).valueSeq().toArray()\n\n    return (\n      <Grid className={classes.root}>\n        {expansion}\n        {\n          orientation !== 'horizontal' && (\n            <TablePagination\n              className={classes.pagination}\n              component='div'\n              labelRowsPerPage={t('Pagination.rowsPerPage')}\n              labelDisplayedRows={({ from, to, count }) => {\n                return t('Pagination.labelFormat', {from, to, count, defaultValue: `${from}-${to} of ${count}`});\n              }}\n              onChangePage={this.handlePageChange}\n              rowsPerPageOptions={[10, 25, 50]}\n              onChangeRowsPerPage={this.handleChangeRowsPerPage}\n              count={(xRefData && xRefData.size) || 0}\n              rowsPerPage={rowsPerPage}\n              page={page}\n              ActionsComponent={TablePaginationActions}\n              classes={{\n                toolbar: classes.paginationToolbar\n              }}\n            />\n          )\n        }\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: '100%'\n  },\n});\n\nconst mapStateToProps = (originalState) => {\n  return {\n    ...createStructuredSelector({\n      config: makeSelectConfig(),\n    })(originalState)\n  };\n}\n\nexport default compose<React.ComponentClass<IXrefExpansionComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, null),\n)(XrefExpansion);\n","export default function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): void => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  if (WINDOW.document && WINDOW.document.visibilityState) {\n    firstHiddenTime = WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n  }\n};\n\nconst trackChanges = (): void => {\n  // Update the time if/when the document becomes hidden.\n  onHidden(({ timeStamp }) => {\n    firstHiddenTime = timeStamp;\n  }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n  readonly firstHiddenTime: number;\n} => {\n  if (firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    initHiddenTime();\n    trackChanges();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n","const isEmail = (email: string = '') => {\n  const regex = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  return regex.test(email);\n};\n\nexport default isEmail;\n","export const isQuotePhasesDisabledForOSR = ({\n  isRestrictedOutsideSalesRep,\n  quoteIsLocked,\n  quotePhase,\n}) => {\n  return quoteIsLocked || (isRestrictedOutsideSalesRep && (quotePhase === 'In Progress' || quotePhase === 'Pending Approval'));\n};\n\nexport const getAppliableQuotePhases = ({\n  isRestrictedOutsideSalesRep,\n  quotePhases,\n}) => {\n  if (!isRestrictedOutsideSalesRep || !quotePhases) {\n    return quotePhases;\n  }\n\n  const notAllowedQuotePhasesForOSR = new Set(['In Progress', 'Pending Approval']);\n  return quotePhases.filter(phase => !notAllowedQuotePhasesForOSR.has(phase.get('value')));\n};\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport useControlled from '../utils/useControlled';\nimport useFormControl from '../FormControl/useFormControl';\nimport withStyles from '../styles/withStyles';\nimport IconButton from '../IconButton';\nexport var styles = {\n  root: {\n    padding: 9\n  },\n  checked: {},\n  disabled: {},\n  input: {\n    cursor: 'inherit',\n    position: 'absolute',\n    opacity: 0,\n    width: '100%',\n    height: '100%',\n    top: 0,\n    left: 0,\n    margin: 0,\n    padding: 0,\n    zIndex: 1\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SwitchBase = React.forwardRef(function SwitchBase(props, ref) {\n  var autoFocus = props.autoFocus,\n      checkedProp = props.checked,\n      checkedIcon = props.checkedIcon,\n      classes = props.classes,\n      className = props.className,\n      defaultChecked = props.defaultChecked,\n      disabledProp = props.disabled,\n      icon = props.icon,\n      id = props.id,\n      inputProps = props.inputProps,\n      inputRef = props.inputRef,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onFocus = props.onFocus,\n      readOnly = props.readOnly,\n      required = props.required,\n      tabIndex = props.tabIndex,\n      type = props.type,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"autoFocus\", \"checked\", \"checkedIcon\", \"classes\", \"className\", \"defaultChecked\", \"disabled\", \"icon\", \"id\", \"inputProps\", \"inputRef\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"readOnly\", \"required\", \"tabIndex\", \"type\", \"value\"]);\n\n  var _useControlled = useControlled({\n    controlled: checkedProp,\n    default: Boolean(defaultChecked),\n    name: 'SwitchBase'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      checked = _useControlled2[0],\n      setCheckedState = _useControlled2[1];\n\n  var muiFormControl = useFormControl();\n\n  var handleFocus = function handleFocus(event) {\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    }\n  };\n\n  var handleInputChange = function handleInputChange(event) {\n    var newChecked = event.target.checked;\n    setCheckedState(newChecked);\n\n    if (onChange) {\n      onChange(event, newChecked);\n    }\n  };\n\n  var disabled = disabledProp;\n\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n\n  var hasLabelFor = type === 'checkbox' || type === 'radio';\n  return React.createElement(IconButton, _extends({\n    component: \"span\",\n    className: clsx(classes.root, className, checked && classes.checked, disabled && classes.disabled),\n    disabled: disabled,\n    tabIndex: null,\n    role: undefined,\n    onFocus: handleFocus,\n    onBlur: handleBlur,\n    ref: ref\n  }, other), React.createElement(\"input\", _extends({\n    autoFocus: autoFocus,\n    checked: checkedProp,\n    defaultChecked: defaultChecked,\n    className: classes.input,\n    disabled: disabled,\n    id: hasLabelFor && id,\n    name: name,\n    onChange: handleInputChange,\n    readOnly: readOnly,\n    ref: inputRef,\n    required: required,\n    tabIndex: tabIndex,\n    type: type,\n    value: value\n  }, inputProps)), checked ? checkedIcon : icon);\n}); // NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\n\nprocess.env.NODE_ENV !== \"production\" ? SwitchBase.propTypes = {\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  defaultChecked: PropTypes.bool,\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node.isRequired,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /*\n   * @ignore\n   */\n  name: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string.isRequired,\n\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateSwitchBase'\n})(SwitchBase);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"g\", {\n  fill: \"none\"\n}, _react.default.createElement(\"path\", {\n  d: \"M0 0h24v24H0V0z\"\n}), _react.default.createElement(\"path\", {\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n})), _react.default.createElement(\"path\", {\n  d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM9 8V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9z\"\n})), 'LockRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14.71 6.71a.9959.9959 0 00-1.41 0L8.71 11.3c-.39.39-.39 1.02 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z\"\n}), 'ChevronLeftRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M9.29 6.71c-.39.39-.39 1.02 0 1.41L13.17 12l-3.88 3.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0l4.59-4.59c.39-.39.39-1.02 0-1.41L10.7 6.7c-.38-.38-1.02-.38-1.41.01z\"\n}), 'ChevronRightRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1H7V2c0-.55-.45-1-1-1s-1 .45-1 1v1H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 18H5c-.55 0-1-.45-1-1V8h16v12c0 .55-.45 1-1 1z\"\n}), 'CalendarTodayRounded');\n\nexports.default = _default;","'use strict';\n\nmodule.exports = require('./Autosuggest').default;","var removeDiacritics = require('diacritic').clean;\n\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Using_special_characters\nvar specialCharsRegex = /[.*+?^${}()|[\\]\\\\]/g;\n\n// http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6\nvar wordCharacterRegex = /[a-z0-9_]/i;\n\nvar whitespacesRegex = /\\s+/;\n\nfunction escapeRegexCharacters(str) {\n  return str.replace(specialCharsRegex, '\\\\$&');\n}\n\nmodule.exports = function match(text, query) {\n  text = removeDiacritics(text);\n  query = removeDiacritics(query);\n\n  return (\n    query\n      .trim()\n      .split(whitespacesRegex)\n      // If query is blank, we'll get empty string here, so let's filter it out.\n      .filter(function(word) {\n        return word.length > 0;\n      })\n      .reduce(function(result, word) {\n        var wordLen = word.length;\n        var prefix = wordCharacterRegex.test(word[0]) ? '\\\\b' : '';\n        var regex = new RegExp(prefix + escapeRegexCharacters(word), 'i');\n        var index = text.search(regex);\n\n        if (index > -1) {\n          result.push([index, index + wordLen]);\n\n          // Replace what we just found with spaces so we don't find it again.\n          text =\n            text.slice(0, index) +\n            new Array(wordLen + 1).join(' ') +\n            text.slice(index + wordLen);\n        }\n\n        return result;\n      }, [])\n      .sort(function(match1, match2) {\n        return match1[0] - match2[0];\n      })\n  );\n};\n","module.exports = function parse(text, matches) {\n  var result = [];\n\n  if (matches.length === 0) {\n    result.push({\n      text: text,\n      highlight: false\n    });\n  } else {\n    if (matches[0][0] > 0) {\n      result.push({\n        text: text.slice(0, matches[0][0]),\n        highlight: false\n      });\n    }\n  }\n\n  matches.forEach(function(match, i) {\n    var startIndex = match[0];\n    var endIndex = match[1];\n\n    result.push({\n      text: text.slice(startIndex, endIndex),\n      highlight: true\n    });\n\n    if (i === matches.length - 1) {\n      if (endIndex < text.length) {\n        result.push({\n          text: text.slice(endIndex, text.length),\n          highlight: false\n        });\n      }\n    } else if (endIndex < matches[i + 1][0]) {\n      result.push({\n        text: text.slice(endIndex, matches[i + 1][0]),\n        highlight: false\n      });\n    }\n  });\n\n  return result;\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0z\",\n  clipRule: \"evenodd\"\n}), _react.default.createElement(\"path\", {\n  d: \"M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z\"\n})), 'Build');\n\nexports.default = _default;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKUElEQVR42u3dW1fbOhMG4HckOwEKKRRoV7///9v2WpwhBBIfpNkXjvtRNiDLR9meueGiJSHxs8ayZiQRMzMkJFoOJV+BhMCSEFgSAktCQmBJCCwJgSUhIbAkBJbEXCPq4kVTC2yNRWoBwwzDxU+J4UMTQVPxc6GAQ62w6CC9UFslHQbwnDM2uUVuBdGososiHEcKJxGBQoK1yRlPmZWsNIFs9j1WOI5oWFgM4C61eM2tXJUJxVGkcL5QjbJXbViGgZvEIJXb3iRjoQiXSw1dU1etYRtDUE09Usu4SQzqXuFasO5SK6hmgusutf3A2uQsY6oZxWtuscn9k4jXPBYDeMqqoSIiHGnCoSZE+7kTieHDMJAzY2sYr4ZRZYj9lFl8i7TXYN5r8L7OGY+pqfRUcRYrwTQCZA9Ztaf604XGymMawutWuKnwB6xihYuFoBpDaAIuFgqrWLVy7WvBSi2cM+pHkcJpLOXHscVprHAUfX3dcsvwGcdXVrA11jmmOhNUo42zWIGIGhmonbG+zFZaBuhjvy0eOS5gJxnLVQc8FFWjD9c19KkFe8ByzFuQwBp7uK6h8ZjOiqrDYmcqbTMyBnaG//RzWQYU4U8v0YEmxGK59dthWxkrCumDGQbWucXWcKWerkgVE7CrSKY3gst+IfwRFsA6s3jOq80Ev30EfraMTc44iQirWEmvtcAqIrHAbWIaNQkyM9YZ4yVnXCw1lqJr8Bj0ErwYxnVDVO/HANeJwYuRzovZwnoxjLvEoO1dlJiL1xVcM4SVWOA+7bb15j61SKS7Zz6wLIoxVdf7vTEzbhMDsTWTwfvaYzWPomI6IVYEtUeZ2aKXyFZ4DcOMdWalMD51WIaLtYdVQK3iz9a50Z81jOvMOoE954yTCDLPNeVb4Tq3zltgpAi/Doqmss8sEIBVVPy/SJF7KkJaqacNa+t4UlNULDmqWqqJCbhcaihnu4c8IU4WVsbuRsFVrLzrfzHB2QGZW0YmtqYJa1chW53UXNp9EpEza+0ka00TVpV+rrrja0K7vUQSo4LluKWpZo9trt+XhDVRWK4uGNXxB5GF2xOF5UpITScEbMP3lxgpLNcEZdYwpbh+XyZIJwvLPddUlxbDPVelpSd/mrAOHCnDMlcq93wUz7m7dnggKWuasGKCs/yyzqz3RGbGxe99FZGShReThQW455osF5t9VcWV7XcVtLLmcd6wVpF7GXduGVc7g3X++ZiLUex8c7UzzjIRUbGKR6Lf6LVtRlNRflk7UpLlYrukddasHwso3k8S1sRhAUXB+CXnSiUWy8XKmyZPoitp8pv+rbB8w4uldt4SmwYR4WKpZZ3hXGABwFIBPxbdvvWPhZL1hXODBQDfNOG8g8xFVLzutwkOrKzAqo7r51K3NiuuqXi9KaLaGsY/WzOabtjBbxZLBfw+1FhV2FHuyymFWOH34TSX128N4zYtFo7cpha7EbRqRKHoPo0VTiLZbeZ97GyBqVyEwsy4SSwulwoHAbdsBLWNkaZiL8yzWPbHKlHdJP9d2TQGXFGoX2pMQBwRgHnObn6G6i2u2z2uZYC45IE8wEhsgca1BtPuM1eIe1QIrOBQATeJrVyyKgv3qRVYEp9Eaqt1a3yE6zowXAIrIFTXNVC9xxXKwlyBNQFUf+HahYFLYA0cGbeDqgwTCC6BNTSqXXVUVSsTJa6cBdZsUVVd+r9QhN8HGgtVHdfVgLgE1gCR10D180AjIuCnJ67rZBhcAmsAVFc1UKk3F8wHV27LLc8FlqD6BBUa4LrqGZfA6vP2lzRH1QRXn5lLYPUQZo8qt+2gqosr2+OyAmsaqK46QNUE19Wue1wCa8SoGmWujnEJrJHd/trClXaMS2B1EBYFqqwnVE1w3SQGLLDGgepq1z+quriS/dF+LLACz1QDomqKywqs/17Q29QOWnQtUaUDo2qC6zYxAuuvJ6+dwWtuB6uLhYaqydOiwMK+RPJmkFzOLveJiwNFVRfX7GGlFh9uvNZn6YL3T3+hohoS1yhh7ezXh5T3UXQtUSUmbFRD4RodrFfDlZZHdYlrbKiGwDUqWJuccZfayudJd4GLUSzRGhuqvnGNBtY6Z9yn/oeUtznmKlDZykfUhYaqT1yjgPWQWTym9edY2moXKVDZUaPqC1fwsO5Si+es+Zxw03aRKaHqA1ewn7287by0eFB4XVw3icV2Yqi6xhXk5y+7A6peTO/bogeu23S6qLrEFdx3UJZoEo/R9lLvLyi124t0m1q85tNG9RbCxVJPE9b7Ek2VONQKP5caB4rwq0Vcc0JVBrUMNYj4rETzVRxHCpdL9ecLiQmt4LqbIapJDt4TR4nmo/geqw8PIaiLi9+gehFU44e1NYxrjx3siAg/Fhrfvzgjp8SlfXAlRlBNBdYm/3ur6SqoLhYKx5EbTLzf56Bq5koMC6opwPIt0aj9qRM+h1r63hYF1chhPXqWaKL9E1+dUyfaxCWoAoZ1l1rnGc7vL+avpW50WIDvmEtQjQhWnRLNgaY9iObvX4656uASVIHCqlOiOYqKic82J+3q4CIiXMqBmuHBMvvd63xKNCexwkVHB2X64mJm3KdWpIQEqyzRpB6z6acLjbOOz3H2xbU1FjeJ4AoClm+JpjwZdRX10+wvuEYIy7dEo4hwuVS9n4xaB9et3BaHgeVboimP2x3q3D1fXK+54Ood1ovxK9HE+4nPxcCPXIIrYFjr3OIuqV6iWexRRYGc4Si4AoXls+DhUKuizBLYl1EH153g6n+64aP49q45DyPH9SK4hoe1ihXOF+HPYQuukcAqm/NO4/EURurgkhn6HmEREc4rNueNHddGcPUDq2jOUzjSNNovSHAFBuv/zXk0+i+pDq6HzAqs1i9EC815Y8f1nM0bV+uwli02500B1+NMcbUKq2zOm3JTnC+u9UxxtWagbM6jGXxpgqtHWKtoXs27dXA9zQiXtHL3iOtpRrgEluASWFPCtR7y4J+QYLm+NMOCywfXY2qCw+W6hj7L5jxgff3vOc9cVk1czwHhcl1Dn7nJ1jLW1gisOrgeAsLluoadZCxXG9WrYYit8eIyXFzDJgZqwTrUX/9XZp594bUprs2AuB4y9yIYl4HaGStydCq85vOtjbWB634gXI+Ze8/VSFE3GQsoNpN1xTorVq/IbbFm5spsb7gMF7tDV9lW6tizskLsceoRA/hnW22FMxHhSBMONSEimmS3g0+ktvqaSyLCWay8di/0wZQzY2sYr4Yr/T2aCP879Nv5xwsWUOwbep8aSUUzih8L7d1a7j3zfhwRjiKZsJ9LHEX11ivUEnK+UL0fXi3RfywU1V6uV+u3CMDlUguuiaO6bLCjovcY6/1g3ud4EInx3P7OGzZtNoL1dkD/lFmvI0skwgtNhO9xO2tAW4FVZq/nnLHJrddBSxLDR6QIx5HCSUSttZa3ButtpLbY/S61gOGihijZLJyspKn4uVBFmaaL7TQ6gSUhIRNSEgJLQmBJCCwJCYElIbAkBJaEhMCSEFgSs41/Ab6Isk/dAqEOAAAAAElFTkSuQmCCPGJyIC8+CjxiPkZhdGFsIGVycm9yPC9iPjogIFVuY2F1Z2h0IFJ1bnRpbWVFeGNlcHRpb246IFVuYWJsZSB0byBlbWl0IHJlc3BvbnNlOyBoZWFkZXJzIGFscmVhZHkgc2VudCBpbiAvdmFyL3d3dy9odG1sL3ZlbmRvci96ZW5kZnJhbWV3b3JrL3plbmQtZGlhY3Rvcm9zL3NyYy9SZXNwb25zZS9TYXBpRW1pdHRlclRyYWl0LnBocDozNwpTdGFjayB0cmFjZToKIzAgL3Zhci93d3cvaHRtbC92ZW5kb3IvemVuZGZyYW1ld29yay96ZW5kLWRpYWN0b3Jvcy9zcmMvUmVzcG9uc2UvU2FwaUVtaXR0ZXIucGhwKDMwKTogWmVuZFxEaWFjdG9yb3NcUmVzcG9uc2VcU2FwaUVtaXR0ZXItJmd0O2Fzc2VydE5vUHJldmlvdXNPdXRwdXQoKQojMSAvdmFyL3d3dy9odG1sL3ZlbmRvci96ZW5kZnJhbWV3b3JrL3plbmQtZXhwcmVzc2l2ZS9zcmMvRW1pdHRlci9FbWl0dGVyU3RhY2sucGhwKDQyKTogWmVuZFxEaWFjdG9yb3NcUmVzcG9uc2VcU2FwaUVtaXR0ZXItJmd0O2VtaXQoT2JqZWN0KFplbmRcRGlhY3Rvcm9zXFJlc3BvbnNlXEVtcHR5UmVzcG9uc2UpKQojMiAvdmFyL3d3dy9odG1sL3ZlbmRvci96ZW5kZnJhbWV3b3JrL3plbmQtZXhwcmVzc2l2ZS9zcmMvQXBwbGljYXRpb24ucGhwKDM3MSk6IFplbmRcRXhwcmVzc2l2ZVxFbWl0dGVyXEVtaXR0ZXJTdGFjay0mZ3Q7ZW1pdChPYmplY3QoWmVuZFxEaWFjdG9yb3NcUmVzcG9uc2VcRW1wdHlSZXNwb25zZSkpCiMzIC92YXIvd3d3L2h0bWwvdmVuZG9yL2F0c2luYy9hdHMtZnJhbWV3b3JrL3NyYy9BdHMvQm9vdHN0cmFwcGVyLnBocCgxMjgpOiBaZW5kXEV4cHJlc3NpdmVcQXBwbGljYXRpb24tJmd0O3J1bigpCiM0IC92YXIvd3d3L2h0bWwvcHVibGljL2luZGV4LnBocCgzMSk6IEF0c1xCb290c3RyYXBwZXI6OnN0YXJ0KEFycmF5LCBPYmplY3QoQ2xvc3VyZSkpCiM1IHttYWlufQogIHRocm93biBpbiA8Yj4vdmFyL3d3dy9odG1sL3ZlbmRvci96ZW5kZnJhbWV3b3JrL3plbmQtZGlhY3Rvcm9zL3NyYy9SZXNwb25zZS9TYXBpRW1pdHRlclRyYWl0LnBocDwvYj4gb24gbGluZSA8Yj4zNzwvYj48YnIgLz4K\"","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M8.12 14.71L12 10.83l3.88 3.88c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 8.71a.9959.9959 0 00-1.41 0L6.7 13.3c-.39.39-.39 1.02 0 1.41.39.38 1.03.39 1.42 0z\"\n}), 'KeyboardArrowUpRounded');\n\nexports.default = _default;","import * as React from 'react';\nimport classNames from 'classnames';\nimport {compose, Dispatch} from 'redux';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  isImmutable,\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  Grid,\n  Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport FieldReactSelect, {\n  IFieldReactSelectComponentProps\n} from '../../components/FieldReactSelect';\nimport {\n  Checkbox,\n  FormControl,\n  FormControlLabel,\n  FormHelperText,\n} from '@material-ui/core';\nimport {\n  withTranslation, WithTranslation\n} from 'react-i18next';\nimport {components} from 'react-select';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction/index';\nimport {connect} from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  SearchUsersAction,\n} from '../../modules/AccountModule/actions';\nimport { makeSelectOfficeBySelectedTeamOrganizationOfficeId } from '../../modules/AccountModule/selectors';\nimport { includesIgnoreCase } from '../../utils/includesIgnoreCase';\nimport CancelRoundedIcon from '@material-ui/icons/CancelRounded';\nimport {\n  Office,\n} from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport {\n  IChangeValueHandlerMetaData\n} from '../QuoteForm/types';\nimport { makeSelectUserFirmId } from '../../modules/AtsModule/selectors';\nimport { getContactDisplayText } from '../../utils/getContactDisplayText';\n\ninterface IQuoteContactsFormComponentProps {\n  options?: any;\n  contacts?: any;\n  onChange?: (meta: IChangeValueHandlerMetaData<any>) => void;\n}\n\ninterface IQuoteContactsFormProps extends IQuoteContactsFormComponentProps {\n  dispatch: Dispatch<IAction>;\n  theme: Theme;\n  selectedOffice: IMap<Office>;\n  firmId: number;\n}\n\ntype QuoteContactsFormProps = IQuoteContactsFormProps\n& WithTranslation\n& WithStyles<keyof ReturnType<typeof styles>>;\n\n// Helper function to remove duplicate objects in an array using key\nconst unique = (array, key) => {\n  const res = [];\n  for (const i of array) {\n    if (res.length === 0) {\n      res.push(i);\n    } else {\n      let isUnique = true;\n      for (const j of res) {\n        if (i[key] === j[key]) {\n          isUnique = false;\n          break;\n        }\n      }\n      if (isUnique) {\n        res.push(i);\n      }\n    }\n  }\n  return res;\n};\n\nclass QuoteContactsForm extends React.Component<QuoteContactsFormProps, {}> {\n  public render() {\n    const {\n      classes,\n      theme,\n      options,\n      contacts,\n      dispatch,\n      onChange,\n      t,\n      firmId\n    } = this.props;\n\n    const immutableContacts = isImmutable(contacts) ? contacts : fromJS(contacts);\n    const optionsList = !options ? List() : options.map((option: any) => {\n      const firstName = option.get('firstName') || '';\n      const lastName = option.get('lastName');\n      const organization = option.get('organization');\n      const address1 = option.get('address1');\n      const officeName = option.getIn(['office','officeName']);\n      const email = option.get('email');\n      const internalNo = option.get('internalNo');\n      const optionLabel = getContactDisplayText(option);\n\n      return {\n        label: optionLabel,\n        value: `${firstName}|${lastName}|${organization}|${address1}`,\n        name: optionLabel,\n        company: organization,\n        type: option.get('type'),\n        address: `${option.get('address1') || ''} ${option.get('address2') || ''}`,\n        id: option.get('id'),\n        permissions: option.get('permissions'),\n        phone: option.get('mobileNumber') || option.get('officeNumber'),\n        officeName,\n        email,\n        internalNo: internalNo ?? null\n      };\n    });\n\n    const optionsMap = Map().withMutations((mutableMap) => {\n      optionsList.forEach((option) => {\n        mutableMap.set(option.id, option);\n      });\n      contacts.forEach((option) => mutableMap.set(option.get('id'), option));\n    });\n\n    const contactsValue = immutableContacts\n      .map((contact) => optionsMap.get(contact.get('id')))\n      .filter((contact) => contact != null);\n\n    return (\n      <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n        name={'collaborators'}\n        component={FieldReactSelect}\n        props={{\n          label: t('quoteInfo.quoteRepsViewLabel'),\n          labelStyle: {\n            marginTop: -16,\n          },\n          inputProps: {\n            className: classNames(classes.contactsSelect),\n            placeholder: t('quoteInfo.quoteRepsPlaceholder'),\n            isMulti: true,\n            value: contactsValue.toJS(),\n            options: optionsList.toArray(),\n            byPassBlurAction: true,\n            onInputChange: (searchTerm) => {\n              if (Boolean(searchTerm) === true) {\n                dispatch(new SearchUsersAction({ filters: fromJS({\n                    'and': [\n                      {\n                        'firm_id': {\n                          'eq': firmId\n                        }\n                      },\n                      {\n                        'status': {\n                          'eq': 'active'\n                        }\n                      },\n                      {\n                        'or': [\n                          {\n                            'email': {\n                              'like': searchTerm\n                            }\n                          },\n                          {\n                            'fullName': {\n                              'like': searchTerm\n                            }\n                          }\n                        ]\n                      }\n                  ]})}));\n              }\n              return searchTerm;\n            },\n            onChange: (valueArray) => {\n              if (valueArray !== null) {\n                valueArray = unique(valueArray, 'id');\n              } else {\n                valueArray = [];\n              }\n              const immutableValueArray = fromJS( valueArray).map((contact) => contact.set('value', contact.get('name')));\n              onChange({ form: 'quote', field: 'collaborators', value: immutableValueArray });\n            },\n            styles: {\n              control: providedStyles => ({\n                ...providedStyles,\n                borderWidth: `0 0 1px 0`,\n                borderRadius: '0',\n              }),\n              menu: providedStyles => ({\n                ...providedStyles,\n              }),\n              option: (providedStyles, { isSelected }) => ({\n                ...providedStyles,\n                backgroundColor: isSelected\n                  ? theme.palette.secondary[100]\n                  : 'white',\n                ':hover': {\n                  backgroundColor: theme.palette.secondary[50],\n                },\n              }),\n              indicatorSeparator: providedStyles => ({\n                ...providedStyles,\n                backgroundColor: 'transparent',\n              }),\n              multiValue: providedStyles => ({\n                ...providedStyles,\n                height: '30px',\n                display: 'flex',\n                alignItems: 'center',\n                borderRadius: theme.shape.borderRadius,\n              }),\n              multiValueLabel: providedStyles => ({\n                ...providedStyles,\n                display: 'flex',\n                alignItems: 'center',\n              }),\n              multiValueRemove: providedStyles => ({\n                ...providedStyles,\n                cursor: 'pointer',\n                '&:hover': {\n                  backgroundColor: 'transparent',\n                }\n              }),\n            },\n            components: {\n              MultiValueLabel: this.multiValueLabel,\n              MultiValueRemove: this.multiValueRemove,\n              MenuList: (props) => {\n                return <components.MenuList {...props}>\n                  {props.children}\n                </components.MenuList>;\n              },\n            },\n            filterOption: (option, inputValue) => {\n              return includesIgnoreCase(option.data.label, inputValue) || includesIgnoreCase(option.data.email, inputValue);\n            },\n            formatOptionLabel: (option) => {\n              return (\n                <div>\n                  <div>\n                    {`${option.name}`}\n                    {option.officeName && <span className={classes.officeNameStyles}>{`, ${option.officeName}`}</span>}\n                  </div>\n                </div>\n              );\n            },\n          },\n          formControlProps: {\n            fullWidth: true,\n          }\n        }}\n      />\n    );\n  }\n\n  private setPermissions = (value: boolean, contact: any) => {\n    const { contacts: contactsProp, onChange } = this.props;\n    let contacts = contactsProp.slice();\n    contacts = isImmutable(contacts) ? contacts : fromJS(contacts);\n    const contactsIndex = contacts.findIndex((obj: any) => obj.get('id') === contact.get('id'));\n    contacts = contacts.setIn([contactsIndex, 'permissions'], value);\n    if (onChange) {\n      onChange({ form: 'quote', field: 'collaborators', value: contacts });\n    }\n  }\n\n  private multiValueLabel = (props) => {\n    const {classes} = this.props;\n    return (\n      <components.MultiValueLabel {...props} key={props.data.id}>\n        <FormControl\n            classes={{\n              root: classes.checkboxFormControl\n            }}\n        >\n            <FormControlLabel\n                label=''\n                control={\n                  <Checkbox\n                    classes={{root: classes.checkbox, checked: classes.checked}}\n                    checked={props.data.permissions}\n                    onChange={(e: any, value: boolean) => this.setPermissions(value, fromJS(props.data))}\n                  />\n                }\n            />\n            <FormHelperText id='helper-text'/>\n        </FormControl>\n        {props.children}\n      </components.MultiValueLabel>\n    );\n  }\n\n  private multiValueRemove = (props) => {\n    const { classes } = this.props;\n    return (\n      <components.MultiValueRemove {...props} className={classes.multiValueRemove}>\n        <CancelRoundedIcon className={classes.icon} />\n      </components.MultiValueRemove>);\n  }\n}\n\nexport const chipStyle = (theme: Theme): StyleRules => ({\n  checkboxFormControl: {\n    flexDirection: 'row',\n    width: 'auto!important',\n    '& label': {\n      margin: '0px!important',\n    }\n  },\n  checkbox: {\n    padding: '0px',\n    color: theme.palette.grey['100'],\n  },\n  checked: {\n    color: `${theme.palette.grey['100']}!important`,\n  },\n  icon: {\n    margin: 0,\n    padding: 0,\n    color: theme.palette.grey['100'],\n    '&:hover': {\n      color: theme.palette.grey['300'],\n    }\n  },\n  officeNameStyles: {\n    color: 'grey'\n  }\n});\n\n\nconst styles = (theme: Theme): StyleRules => ({\n    gridContainer: {\n      display: 'flex',\n      alignItems: 'flex-start',\n      flexWrap: 'nowrap',\n    },\n    ...chipStyle(theme)\n});\n\n\nconst mapStateToProps = (originalState: any) => createStructuredSelector({\n  selectedOffice: makeSelectOfficeBySelectedTeamOrganizationOfficeId(),\n  firmId: makeSelectUserFirmId(),\n})(originalState);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IQuoteContactsFormComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(QuoteContactsForm);\n","import ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\nconst MAX_LIMIT = 100;\n\nconst ImportPricingServiceApi = {\n  async create(env: any, appId: string, bidResponseId: number,  matchImportPricingProducts: any): Promise<any> {\n    const data = {\n      bidInvResponseId: bidResponseId,\n      info: JSON.stringify(matchImportPricingProducts)\n    };\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post(`/msquoteconnect/bid-import-pricing.create`, data);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error create bid-import-pricing.create:', error);\n      throw error;\n    }\n  },\n\n  async findAllByQuote(env: any, appId: string, quoteId: number): Promise<any> {\n    let responseData = [];\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msquoteconnect/bid-import-pricing.findAll`;\n      const filter = {\n        quoteId,\n        offset: 0,\n        limit: MAX_LIMIT\n      };\n      endpoint += `?filter=${encodeURIComponent(JSON.stringify(filter))}`;\n      const result = await apiClient.fetchAllDataWithCount(endpoint);\n      if (result.success && result?.payload['msquoteconnect']) {\n        responseData = result?.payload['msquoteconnect'];\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error bid-import-pricing.findAll:', error);\n      throw error;\n    }\n    return responseData;\n  }\n};\n\nexport default ImportPricingServiceApi;\n","export default __webpack_public_path__ + \"static/media/project.ed56b7ab.svg\";","import * as React from 'react';\nimport {\n  Grid, Tooltip, Typography,\n} from '@material-ui/core';\nimport { List } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { Series } from '../../../models';\nimport { makeFlagsWithCountryIds } from '../../../containers/Expansion/SeriesPanel';\nimport { COUNTRIES_OBJECT } from '../../../constants/countries';\nimport { FlagCountriesSet } from '../../../constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface IRegionFlagsProps {\n  series: IMap<Series>;\n  inlineMore?: boolean;\n  justify?: 'flex-start' | 'center' | 'flex-end';\n  flagWidth?: number;\n}\n\ntype RegionFlagsProps = IRegionFlagsProps;\n\nconst RegionFlags: React.FC<RegionFlagsProps> = (props) => {\n  const {\n    series,\n    inlineMore = true,\n    justify = 'center',\n    flagWidth = 36,\n  } = props;\n\n  const { t } = useTranslation('translations');\n\n  const { countries, flagCountries } = React.useMemo(() => {\n    let _flagCountries = List();\n    const _countries = series.getIn(['purchasability', 'country'])?.reduce((acc, country) => {\n      if (FlagCountriesSet.has(country.get('id'))) {\n        _flagCountries = _flagCountries.push(country.get('id'));\n        return acc;\n      }\n      return acc.push(country.set('value', COUNTRIES_OBJECT[country.get('id')]?.value || ''));\n    }, List()).sort((a, b) => a.get('value').localeCompare(b.get('value'))) || List();\n    return { countries: _countries, flagCountries: _flagCountries };\n  }, [series]);\n\n  const flags = makeFlagsWithCountryIds({ whiteList: flagCountries, withName: false, width: flagWidth });\n  const displayFirstNonFlagCountry = !flags?.length && countries?.size > 0;\n\n  return (\n    <Grid\n      container={true}\n      direction={inlineMore ? 'row' : 'column'}\n      justify={justify}\n      alignItems='center'\n      wrap='nowrap'\n    >\n      {\n        flags?.length > 0 && (\n          <Grid\n            container={true}\n            direction='row'\n            justify={justify}\n            alignItems='center'\n            wrap='nowrap'\n            style={{ width: 'fit-content' }}\n          >\n            {flags}\n          </Grid>\n        )\n      }\n      {\n        displayFirstNonFlagCountry && (\n          <Typography\n            variant='caption'\n            color='textPrimary'\n            style={{\n              padding: '2px 8px',\n              borderRadius: 4,\n              backgroundColor: '#E0E0E0',\n            }}\n          >\n            {countries.getIn([0, 'value'])}\n          </Typography>\n        )\n      }\n      {\n        countries?.size > 1 && (\n          <Tooltip title={countries.slice(displayFirstNonFlagCountry ? 1 : 0).map(country => country.get('value')).join(', ')}>\n            <Typography\n              style={{\n                textDecoration: 'underline',\n                cursor: 'default',\n                marginLeft: 4,\n              }}\n            >\n              {t('region.more')}\n              </Typography>\n          </Tooltip>\n        )\n      }\n    </Grid>\n  );\n};\n\nexport default RegionFlags;","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n  typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n  ? () => performance.now()\n  : () => Date.now();\n\nexport type TimeoutID = {|\n  id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n  cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n  const start = now();\n\n  function tick() {\n    if (now() - start >= delay) {\n      callback.call(null);\n    } else {\n      timeoutID.id = requestAnimationFrame(tick);\n    }\n  }\n\n  const timeoutID: TimeoutID = {\n    id: requestAnimationFrame(tick),\n  };\n\n  return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n  if (size === -1 || recalculate) {\n    const div = document.createElement('div');\n    const style = div.style;\n    style.width = '50px';\n    style.height = '50px';\n    style.overflow = 'scroll';\n\n    ((document.body: any): HTMLBodyElement).appendChild(div);\n\n    size = div.offsetWidth - div.clientWidth;\n\n    ((document.body: any): HTMLBodyElement).removeChild(div);\n  }\n\n  return size;\n}\n\nexport type RTLOffsetType =\n  | 'negative'\n  | 'positive-descending'\n  | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n  if (cachedRTLResult === null || recalculate) {\n    const outerDiv = document.createElement('div');\n    const outerStyle = outerDiv.style;\n    outerStyle.width = '50px';\n    outerStyle.height = '50px';\n    outerStyle.overflow = 'scroll';\n    outerStyle.direction = 'rtl';\n\n    const innerDiv = document.createElement('div');\n    const innerStyle = innerDiv.style;\n    innerStyle.width = '100px';\n    innerStyle.height = '100px';\n\n    outerDiv.appendChild(innerDiv);\n\n    ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n    if (outerDiv.scrollLeft > 0) {\n      cachedRTLResult = 'positive-descending';\n    } else {\n      outerDiv.scrollLeft = 1;\n      if (outerDiv.scrollLeft === 0) {\n        cachedRTLResult = 'negative';\n      } else {\n        cachedRTLResult = 'positive-ascending';\n      }\n    }\n\n    ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n    return cachedRTLResult;\n  }\n\n  return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps<T> = {|\n  columnIndex: number,\n  data: T,\n  isScrolling?: boolean,\n  rowIndex: number,\n  style: Object,\n|};\nexport type RenderComponent<T> = React$ComponentType<\n  $Shape<RenderComponentProps<T>>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n  overscanColumnStartIndex: number,\n  overscanColumnStopIndex: number,\n  overscanRowStartIndex: number,\n  overscanRowStopIndex: number,\n  visibleColumnStartIndex: number,\n  visibleColumnStopIndex: number,\n  visibleRowStartIndex: number,\n  visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n  horizontalScrollDirection: ScrollDirection,\n  scrollLeft: number,\n  scrollTop: number,\n  scrollUpdateWasRequested: boolean,\n  verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent<HTMLDivElement>;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n  children: React$Node,\n  className: string | void,\n  onScroll: ScrollEvent => void,\n  style: {\n    [string]: mixed,\n  },\n|};\n\ntype InnerProps = {|\n  children: React$Node,\n  style: {\n    [string]: mixed,\n  },\n|};\n\nexport type Props<T> = {|\n  children: RenderComponent<T>,\n  className?: string,\n  columnCount: number,\n  columnWidth: itemSize,\n  direction: Direction,\n  height: number,\n  initialScrollLeft?: number,\n  initialScrollTop?: number,\n  innerRef?: any,\n  innerElementType?: string | React$AbstractComponent<InnerProps, any>,\n  innerTagName?: string, // deprecated\n  itemData: T,\n  itemKey?: (params: {|\n    columnIndex: number,\n    data: T,\n    rowIndex: number,\n  |}) => any,\n  onItemsRendered?: OnItemsRenderedCallback,\n  onScroll?: OnScrollCallback,\n  outerRef?: any,\n  outerElementType?: string | React$AbstractComponent<OuterProps, any>,\n  outerTagName?: string, // deprecated\n  overscanColumnCount?: number,\n  overscanColumnsCount?: number, // deprecated\n  overscanCount?: number, // deprecated\n  overscanRowCount?: number,\n  overscanRowsCount?: number, // deprecated\n  rowCount: number,\n  rowHeight: itemSize,\n  style?: Object,\n  useIsScrolling: boolean,\n  width: number,\n|};\n\ntype State = {|\n  instance: any,\n  isScrolling: boolean,\n  horizontalScrollDirection: ScrollDirection,\n  scrollLeft: number,\n  scrollTop: number,\n  scrollUpdateWasRequested: boolean,\n  verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n  props: Props<any>,\n  index: number,\n  instanceProps: any\n) => number;\ntype getItemSize = (\n  props: Props<any>,\n  index: number,\n  instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props<any>, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n  props: Props<any>,\n  index: number,\n  align: ScrollToAlign,\n  scrollOffset: number,\n  instanceProps: any,\n  scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n  props: Props<any>,\n  offset: number,\n  instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n  props: Props<any>,\n  startIndex: number,\n  scrollOffset: number,\n  instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props<any>, instance: any) => any;\ntype ValidateProps = (props: Props<any>) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n  `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n  if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n    devWarningsOverscanCount = new WeakSet();\n    devWarningsOverscanRowsColumnsCount = new WeakSet();\n    devWarningsTagName = new WeakSet();\n  }\n}\n\nexport default function createGridComponent({\n  getColumnOffset,\n  getColumnStartIndexForOffset,\n  getColumnStopIndexForStartIndex,\n  getColumnWidth,\n  getEstimatedTotalHeight,\n  getEstimatedTotalWidth,\n  getOffsetForColumnAndAlignment,\n  getOffsetForRowAndAlignment,\n  getRowHeight,\n  getRowOffset,\n  getRowStartIndexForOffset,\n  getRowStopIndexForStartIndex,\n  initInstanceProps,\n  shouldResetStyleCacheOnItemSizeChange,\n  validateProps,\n}: {|\n  getColumnOffset: getItemOffset,\n  getColumnStartIndexForOffset: GetStartIndexForOffset,\n  getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n  getColumnWidth: getItemSize,\n  getEstimatedTotalHeight: getEstimatedTotalSize,\n  getEstimatedTotalWidth: getEstimatedTotalSize,\n  getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n  getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n  getRowOffset: getItemOffset,\n  getRowHeight: getItemSize,\n  getRowStartIndexForOffset: GetStartIndexForOffset,\n  getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n  initInstanceProps: InitInstanceProps,\n  shouldResetStyleCacheOnItemSizeChange: boolean,\n  validateProps: ValidateProps,\n|}) {\n  return class Grid<T> extends PureComponent<Props<T>, State> {\n    _instanceProps: any = initInstanceProps(this.props, this);\n    _resetIsScrollingTimeoutId: TimeoutID | null = null;\n    _outerRef: ?HTMLDivElement;\n\n    static defaultProps = {\n      direction: 'ltr',\n      itemData: undefined,\n      useIsScrolling: false,\n    };\n\n    state: State = {\n      instance: this,\n      isScrolling: false,\n      horizontalScrollDirection: 'forward',\n      scrollLeft:\n        typeof this.props.initialScrollLeft === 'number'\n          ? this.props.initialScrollLeft\n          : 0,\n      scrollTop:\n        typeof this.props.initialScrollTop === 'number'\n          ? this.props.initialScrollTop\n          : 0,\n      scrollUpdateWasRequested: false,\n      verticalScrollDirection: 'forward',\n    };\n\n    // Always use explicit constructor for React components.\n    // It produces less code after transpilation. (#26)\n    // eslint-disable-next-line no-useless-constructor\n    constructor(props: Props<T>) {\n      super(props);\n    }\n\n    static getDerivedStateFromProps(\n      nextProps: Props<T>,\n      prevState: State\n    ): $Shape<State> | null {\n      validateSharedProps(nextProps, prevState);\n      validateProps(nextProps);\n      return null;\n    }\n\n    scrollTo({\n      scrollLeft,\n      scrollTop,\n    }: {\n      scrollLeft: number,\n      scrollTop: number,\n    }): void {\n      if (scrollLeft !== undefined) {\n        scrollLeft = Math.max(0, scrollLeft);\n      }\n      if (scrollTop !== undefined) {\n        scrollTop = Math.max(0, scrollTop);\n      }\n\n      this.setState(prevState => {\n        if (scrollLeft === undefined) {\n          scrollLeft = prevState.scrollLeft;\n        }\n        if (scrollTop === undefined) {\n          scrollTop = prevState.scrollTop;\n        }\n\n        if (\n          prevState.scrollLeft === scrollLeft &&\n          prevState.scrollTop === scrollTop\n        ) {\n          return null;\n        }\n\n        return {\n          horizontalScrollDirection:\n            prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          scrollUpdateWasRequested: true,\n          verticalScrollDirection:\n            prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n        };\n      }, this._resetIsScrollingDebounced);\n    }\n\n    scrollToItem({\n      align = 'auto',\n      columnIndex,\n      rowIndex,\n    }: {\n      align: ScrollToAlign,\n      columnIndex?: number,\n      rowIndex?: number,\n    }): void {\n      const { columnCount, height, rowCount, width } = this.props;\n      const { scrollLeft, scrollTop } = this.state;\n      const scrollbarSize = getScrollbarSize();\n\n      if (columnIndex !== undefined) {\n        columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n      }\n      if (rowIndex !== undefined) {\n        rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n      }\n\n      const estimatedTotalHeight = getEstimatedTotalHeight(\n        this.props,\n        this._instanceProps\n      );\n      const estimatedTotalWidth = getEstimatedTotalWidth(\n        this.props,\n        this._instanceProps\n      );\n\n      // The scrollbar size should be considered when scrolling an item into view,\n      // to ensure it's fully visible.\n      // But we only need to account for its size when it's actually visible.\n      const horizontalScrollbarSize =\n        estimatedTotalWidth > width ? scrollbarSize : 0;\n      const verticalScrollbarSize =\n        estimatedTotalHeight > height ? scrollbarSize : 0;\n\n      this.scrollTo({\n        scrollLeft:\n          columnIndex !== undefined\n            ? getOffsetForColumnAndAlignment(\n                this.props,\n                columnIndex,\n                align,\n                scrollLeft,\n                this._instanceProps,\n                verticalScrollbarSize\n              )\n            : scrollLeft,\n        scrollTop:\n          rowIndex !== undefined\n            ? getOffsetForRowAndAlignment(\n                this.props,\n                rowIndex,\n                align,\n                scrollTop,\n                this._instanceProps,\n                horizontalScrollbarSize\n              )\n            : scrollTop,\n      });\n    }\n\n    componentDidMount() {\n      const { initialScrollLeft, initialScrollTop } = this.props;\n\n      if (this._outerRef != null) {\n        const outerRef = ((this._outerRef: any): HTMLElement);\n        if (typeof initialScrollLeft === 'number') {\n          outerRef.scrollLeft = initialScrollLeft;\n        }\n        if (typeof initialScrollTop === 'number') {\n          outerRef.scrollTop = initialScrollTop;\n        }\n      }\n\n      this._callPropsCallbacks();\n    }\n\n    componentDidUpdate() {\n      const { direction } = this.props;\n      const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n      if (scrollUpdateWasRequested && this._outerRef != null) {\n        // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n        // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n        // So we need to determine which browser behavior we're dealing with, and mimic it.\n        const outerRef = ((this._outerRef: any): HTMLElement);\n        if (direction === 'rtl') {\n          switch (getRTLOffsetType()) {\n            case 'negative':\n              outerRef.scrollLeft = -scrollLeft;\n              break;\n            case 'positive-ascending':\n              outerRef.scrollLeft = scrollLeft;\n              break;\n            default:\n              const { clientWidth, scrollWidth } = outerRef;\n              outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n              break;\n          }\n        } else {\n          outerRef.scrollLeft = Math.max(0, scrollLeft);\n        }\n\n        outerRef.scrollTop = Math.max(0, scrollTop);\n      }\n\n      this._callPropsCallbacks();\n    }\n\n    componentWillUnmount() {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n    }\n\n    render() {\n      const {\n        children,\n        className,\n        columnCount,\n        direction,\n        height,\n        innerRef,\n        innerElementType,\n        innerTagName,\n        itemData,\n        itemKey = defaultItemKey,\n        outerElementType,\n        outerTagName,\n        rowCount,\n        style,\n        useIsScrolling,\n        width,\n      } = this.props;\n      const { isScrolling } = this.state;\n\n      const [\n        columnStartIndex,\n        columnStopIndex,\n      ] = this._getHorizontalRangeToRender();\n      const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n      const items = [];\n      if (columnCount > 0 && rowCount) {\n        for (\n          let rowIndex = rowStartIndex;\n          rowIndex <= rowStopIndex;\n          rowIndex++\n        ) {\n          for (\n            let columnIndex = columnStartIndex;\n            columnIndex <= columnStopIndex;\n            columnIndex++\n          ) {\n            items.push(\n              createElement(children, {\n                columnIndex,\n                data: itemData,\n                isScrolling: useIsScrolling ? isScrolling : undefined,\n                key: itemKey({ columnIndex, data: itemData, rowIndex }),\n                rowIndex,\n                style: this._getItemStyle(rowIndex, columnIndex),\n              })\n            );\n          }\n        }\n      }\n\n      // Read this value AFTER items have been created,\n      // So their actual sizes (if variable) are taken into consideration.\n      const estimatedTotalHeight = getEstimatedTotalHeight(\n        this.props,\n        this._instanceProps\n      );\n      const estimatedTotalWidth = getEstimatedTotalWidth(\n        this.props,\n        this._instanceProps\n      );\n\n      return createElement(\n        outerElementType || outerTagName || 'div',\n        {\n          className,\n          onScroll: this._onScroll,\n          ref: this._outerRefSetter,\n          style: {\n            position: 'relative',\n            height,\n            width,\n            overflow: 'auto',\n            WebkitOverflowScrolling: 'touch',\n            willChange: 'transform',\n            direction,\n            ...style,\n          },\n        },\n        createElement(innerElementType || innerTagName || 'div', {\n          children: items,\n          ref: innerRef,\n          style: {\n            height: estimatedTotalHeight,\n            pointerEvents: isScrolling ? 'none' : undefined,\n            width: estimatedTotalWidth,\n          },\n        })\n      );\n    }\n\n    _callOnItemsRendered: (\n      overscanColumnStartIndex: number,\n      overscanColumnStopIndex: number,\n      overscanRowStartIndex: number,\n      overscanRowStopIndex: number,\n      visibleColumnStartIndex: number,\n      visibleColumnStopIndex: number,\n      visibleRowStartIndex: number,\n      visibleRowStopIndex: number\n    ) => void;\n    _callOnItemsRendered = memoizeOne(\n      (\n        overscanColumnStartIndex: number,\n        overscanColumnStopIndex: number,\n        overscanRowStartIndex: number,\n        overscanRowStopIndex: number,\n        visibleColumnStartIndex: number,\n        visibleColumnStopIndex: number,\n        visibleRowStartIndex: number,\n        visibleRowStopIndex: number\n      ) =>\n        ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n          overscanColumnStartIndex,\n          overscanColumnStopIndex,\n          overscanRowStartIndex,\n          overscanRowStopIndex,\n          visibleColumnStartIndex,\n          visibleColumnStopIndex,\n          visibleRowStartIndex,\n          visibleRowStopIndex,\n        })\n    );\n\n    _callOnScroll: (\n      scrollLeft: number,\n      scrollTop: number,\n      horizontalScrollDirection: ScrollDirection,\n      verticalScrollDirection: ScrollDirection,\n      scrollUpdateWasRequested: boolean\n    ) => void;\n    _callOnScroll = memoizeOne(\n      (\n        scrollLeft: number,\n        scrollTop: number,\n        horizontalScrollDirection: ScrollDirection,\n        verticalScrollDirection: ScrollDirection,\n        scrollUpdateWasRequested: boolean\n      ) =>\n        ((this.props.onScroll: any): OnScrollCallback)({\n          horizontalScrollDirection,\n          scrollLeft,\n          scrollTop,\n          verticalScrollDirection,\n          scrollUpdateWasRequested,\n        })\n    );\n\n    _callPropsCallbacks() {\n      const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n      if (typeof onItemsRendered === 'function') {\n        if (columnCount > 0 && rowCount > 0) {\n          const [\n            overscanColumnStartIndex,\n            overscanColumnStopIndex,\n            visibleColumnStartIndex,\n            visibleColumnStopIndex,\n          ] = this._getHorizontalRangeToRender();\n          const [\n            overscanRowStartIndex,\n            overscanRowStopIndex,\n            visibleRowStartIndex,\n            visibleRowStopIndex,\n          ] = this._getVerticalRangeToRender();\n          this._callOnItemsRendered(\n            overscanColumnStartIndex,\n            overscanColumnStopIndex,\n            overscanRowStartIndex,\n            overscanRowStopIndex,\n            visibleColumnStartIndex,\n            visibleColumnStopIndex,\n            visibleRowStartIndex,\n            visibleRowStopIndex\n          );\n        }\n      }\n\n      if (typeof onScroll === 'function') {\n        const {\n          horizontalScrollDirection,\n          scrollLeft,\n          scrollTop,\n          scrollUpdateWasRequested,\n          verticalScrollDirection,\n        } = this.state;\n        this._callOnScroll(\n          scrollLeft,\n          scrollTop,\n          horizontalScrollDirection,\n          verticalScrollDirection,\n          scrollUpdateWasRequested\n        );\n      }\n    }\n\n    // Lazily create and cache item styles while scrolling,\n    // So that pure component sCU will prevent re-renders.\n    // We maintain this cache, and pass a style prop rather than index,\n    // So that List can clear cached styles and force item re-render if necessary.\n    _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n    _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n      const { columnWidth, direction, rowHeight } = this.props;\n\n      const itemStyleCache = this._getItemStyleCache(\n        shouldResetStyleCacheOnItemSizeChange && columnWidth,\n        shouldResetStyleCacheOnItemSizeChange && direction,\n        shouldResetStyleCacheOnItemSizeChange && rowHeight\n      );\n\n      const key = `${rowIndex}:${columnIndex}`;\n\n      let style;\n      if (itemStyleCache.hasOwnProperty(key)) {\n        style = itemStyleCache[key];\n      } else {\n        itemStyleCache[key] = style = {\n          position: 'absolute',\n          [direction === 'rtl' ? 'right' : 'left']: getColumnOffset(\n            this.props,\n            columnIndex,\n            this._instanceProps\n          ),\n          top: getRowOffset(this.props, rowIndex, this._instanceProps),\n          height: getRowHeight(this.props, rowIndex, this._instanceProps),\n          width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n        };\n      }\n\n      return style;\n    };\n\n    _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n    _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n    _getHorizontalRangeToRender(): [number, number, number, number] {\n      const {\n        columnCount,\n        overscanColumnCount,\n        overscanColumnsCount,\n        overscanCount,\n        rowCount,\n      } = this.props;\n      const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n      const overscanCountResolved: number =\n        overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n      if (columnCount === 0 || rowCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      const startIndex = getColumnStartIndexForOffset(\n        this.props,\n        scrollLeft,\n        this._instanceProps\n      );\n      const stopIndex = getColumnStopIndexForStartIndex(\n        this.props,\n        startIndex,\n        scrollLeft,\n        this._instanceProps\n      );\n\n      // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n      const overscanBackward =\n        !isScrolling || horizontalScrollDirection === 'backward'\n          ? Math.max(1, overscanCountResolved)\n          : 1;\n      const overscanForward =\n        !isScrolling || horizontalScrollDirection === 'forward'\n          ? Math.max(1, overscanCountResolved)\n          : 1;\n\n      return [\n        Math.max(0, startIndex - overscanBackward),\n        Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n        startIndex,\n        stopIndex,\n      ];\n    }\n\n    _getVerticalRangeToRender(): [number, number, number, number] {\n      const {\n        columnCount,\n        overscanCount,\n        overscanRowCount,\n        overscanRowsCount,\n        rowCount,\n      } = this.props;\n      const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n      const overscanCountResolved: number =\n        overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n      if (columnCount === 0 || rowCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      const startIndex = getRowStartIndexForOffset(\n        this.props,\n        scrollTop,\n        this._instanceProps\n      );\n      const stopIndex = getRowStopIndexForStartIndex(\n        this.props,\n        startIndex,\n        scrollTop,\n        this._instanceProps\n      );\n\n      // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n      const overscanBackward =\n        !isScrolling || verticalScrollDirection === 'backward'\n          ? Math.max(1, overscanCountResolved)\n          : 1;\n      const overscanForward =\n        !isScrolling || verticalScrollDirection === 'forward'\n          ? Math.max(1, overscanCountResolved)\n          : 1;\n\n      return [\n        Math.max(0, startIndex - overscanBackward),\n        Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n        startIndex,\n        stopIndex,\n      ];\n    }\n\n    _onScroll = (event: ScrollEvent): void => {\n      const {\n        clientHeight,\n        clientWidth,\n        scrollLeft,\n        scrollTop,\n        scrollHeight,\n        scrollWidth,\n      } = event.currentTarget;\n      this.setState(prevState => {\n        if (\n          prevState.scrollLeft === scrollLeft &&\n          prevState.scrollTop === scrollTop\n        ) {\n          // Scroll position may have been updated by cDM/cDU,\n          // In which case we don't need to trigger another render,\n          // And we don't want to update state.isScrolling.\n          return null;\n        }\n\n        const { direction } = this.props;\n\n        // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n        // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n        // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n        // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n        let calculatedScrollLeft = scrollLeft;\n        if (direction === 'rtl') {\n          switch (getRTLOffsetType()) {\n            case 'negative':\n              calculatedScrollLeft = -scrollLeft;\n              break;\n            case 'positive-descending':\n              calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n              break;\n          }\n        }\n\n        // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n        calculatedScrollLeft = Math.max(\n          0,\n          Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n        );\n        const calculatedScrollTop = Math.max(\n          0,\n          Math.min(scrollTop, scrollHeight - clientHeight)\n        );\n\n        return {\n          isScrolling: true,\n          horizontalScrollDirection:\n            prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n          scrollLeft: calculatedScrollLeft,\n          scrollTop: calculatedScrollTop,\n          verticalScrollDirection:\n            prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n          scrollUpdateWasRequested: false,\n        };\n      }, this._resetIsScrollingDebounced);\n    };\n\n    _outerRefSetter = (ref: any): void => {\n      const { outerRef } = this.props;\n\n      this._outerRef = ((ref: any): HTMLDivElement);\n\n      if (typeof outerRef === 'function') {\n        outerRef(ref);\n      } else if (\n        outerRef != null &&\n        typeof outerRef === 'object' &&\n        outerRef.hasOwnProperty('current')\n      ) {\n        outerRef.current = ref;\n      }\n    };\n\n    _resetIsScrollingDebounced = () => {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n\n      this._resetIsScrollingTimeoutId = requestTimeout(\n        this._resetIsScrolling,\n        IS_SCROLLING_DEBOUNCE_INTERVAL\n      );\n    };\n\n    _resetIsScrolling = () => {\n      this._resetIsScrollingTimeoutId = null;\n\n      this.setState({ isScrolling: false }, () => {\n        // Clear style cache after state update has been committed.\n        // This way we don't break pure sCU for items that don't use isScrolling param.\n        this._getItemStyleCache(-1);\n      });\n    };\n  };\n}\n\nconst validateSharedProps = (\n  {\n    children,\n    direction,\n    height,\n    innerTagName,\n    outerTagName,\n    overscanColumnsCount,\n    overscanCount,\n    overscanRowsCount,\n    width,\n  }: Props<any>,\n  { instance }: State\n): void => {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof overscanCount === 'number') {\n      if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n        devWarningsOverscanCount.add(instance);\n        console.warn(\n          'The overscanCount prop has been deprecated. ' +\n            'Please use the overscanColumnCount and overscanRowCount props instead.'\n        );\n      }\n    }\n\n    if (\n      typeof overscanColumnsCount === 'number' ||\n      typeof overscanRowsCount === 'number'\n    ) {\n      if (\n        devWarningsOverscanRowsColumnsCount &&\n        !devWarningsOverscanRowsColumnsCount.has(instance)\n      ) {\n        devWarningsOverscanRowsColumnsCount.add(instance);\n        console.warn(\n          'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n            'Please use the overscanColumnCount and overscanRowCount props instead.'\n        );\n      }\n    }\n\n    if (innerTagName != null || outerTagName != null) {\n      if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n        devWarningsTagName.add(instance);\n        console.warn(\n          'The innerTagName and outerTagName props have been deprecated. ' +\n            'Please use the innerElementType and outerElementType props instead.'\n        );\n      }\n    }\n\n    if (children == null) {\n      throw Error(\n        'An invalid \"children\" prop has been specified. ' +\n          'Value should be a React component. ' +\n          `\"${children === null ? 'null' : typeof children}\" was specified.`\n      );\n    }\n\n    switch (direction) {\n      case 'ltr':\n      case 'rtl':\n        // Valid values\n        break;\n      default:\n        throw Error(\n          'An invalid \"direction\" prop has been specified. ' +\n            'Value should be either \"ltr\" or \"rtl\". ' +\n            `\"${direction}\" was specified.`\n        );\n    }\n\n    if (typeof width !== 'number') {\n      throw Error(\n        'An invalid \"width\" prop has been specified. ' +\n          'Grids must specify a number for width. ' +\n          `\"${width === null ? 'null' : typeof width}\" was specified.`\n      );\n    }\n\n    if (typeof height !== 'number') {\n      throw Error(\n        'An invalid \"height\" prop has been specified. ' +\n          'Grids must specify a number for height. ' +\n          `\"${height === null ? 'null' : typeof height}\" was specified.`\n      );\n    }\n  }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps<T> = {|\n  data: T,\n  index: number,\n  isScrolling?: boolean,\n  style: Object,\n|};\ntype RenderComponent<T> = React$ComponentType<$Shape<RenderComponentProps<T>>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n  overscanStartIndex: number,\n  overscanStopIndex: number,\n  visibleStartIndex: number,\n  visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n  scrollDirection: ScrollDirection,\n  scrollOffset: number,\n  scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent<HTMLDivElement>;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n  children: React$Node,\n  className: string | void,\n  onScroll: ScrollEvent => void,\n  style: {\n    [string]: mixed,\n  },\n|};\n\ntype InnerProps = {|\n  children: React$Node,\n  style: {\n    [string]: mixed,\n  },\n|};\n\nexport type Props<T> = {|\n  children: RenderComponent<T>,\n  className?: string,\n  direction: Direction,\n  height: number | string,\n  initialScrollOffset?: number,\n  innerRef?: any,\n  innerElementType?: string | React$AbstractComponent<InnerProps, any>,\n  innerTagName?: string, // deprecated\n  itemCount: number,\n  itemData: T,\n  itemKey?: (index: number, data: T) => any,\n  itemSize: itemSize,\n  layout: Layout,\n  onItemsRendered?: onItemsRenderedCallback,\n  onScroll?: onScrollCallback,\n  outerRef?: any,\n  outerElementType?: string | React$AbstractComponent<OuterProps, any>,\n  outerTagName?: string, // deprecated\n  overscanCount: number,\n  style?: Object,\n  useIsScrolling: boolean,\n  width: number | string,\n|};\n\ntype State = {|\n  instance: any,\n  isScrolling: boolean,\n  scrollDirection: ScrollDirection,\n  scrollOffset: number,\n  scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n  props: Props<any>,\n  index: number,\n  instanceProps: any\n) => number;\ntype GetItemSize = (\n  props: Props<any>,\n  index: number,\n  instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props<any>, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n  props: Props<any>,\n  index: number,\n  align: ScrollToAlign,\n  scrollOffset: number,\n  instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n  props: Props<any>,\n  offset: number,\n  instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n  props: Props<any>,\n  startIndex: number,\n  scrollOffset: number,\n  instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props<any>, instance: any) => any;\ntype ValidateProps = (props: Props<any>) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n  if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n    devWarningsDirection = new WeakSet();\n    devWarningsTagName = new WeakSet();\n  }\n}\n\nexport default function createListComponent({\n  getItemOffset,\n  getEstimatedTotalSize,\n  getItemSize,\n  getOffsetForIndexAndAlignment,\n  getStartIndexForOffset,\n  getStopIndexForStartIndex,\n  initInstanceProps,\n  shouldResetStyleCacheOnItemSizeChange,\n  validateProps,\n}: {|\n  getItemOffset: GetItemOffset,\n  getEstimatedTotalSize: GetEstimatedTotalSize,\n  getItemSize: GetItemSize,\n  getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n  getStartIndexForOffset: GetStartIndexForOffset,\n  getStopIndexForStartIndex: GetStopIndexForStartIndex,\n  initInstanceProps: InitInstanceProps,\n  shouldResetStyleCacheOnItemSizeChange: boolean,\n  validateProps: ValidateProps,\n|}) {\n  return class List<T> extends PureComponent<Props<T>, State> {\n    _instanceProps: any = initInstanceProps(this.props, this);\n    _outerRef: ?HTMLDivElement;\n    _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n    static defaultProps = {\n      direction: 'ltr',\n      itemData: undefined,\n      layout: 'vertical',\n      overscanCount: 2,\n      useIsScrolling: false,\n    };\n\n    state: State = {\n      instance: this,\n      isScrolling: false,\n      scrollDirection: 'forward',\n      scrollOffset:\n        typeof this.props.initialScrollOffset === 'number'\n          ? this.props.initialScrollOffset\n          : 0,\n      scrollUpdateWasRequested: false,\n    };\n\n    // Always use explicit constructor for React components.\n    // It produces less code after transpilation. (#26)\n    // eslint-disable-next-line no-useless-constructor\n    constructor(props: Props<T>) {\n      super(props);\n    }\n\n    static getDerivedStateFromProps(\n      nextProps: Props<T>,\n      prevState: State\n    ): $Shape<State> | null {\n      validateSharedProps(nextProps, prevState);\n      validateProps(nextProps);\n      return null;\n    }\n\n    scrollTo(scrollOffset: number): void {\n      scrollOffset = Math.max(0, scrollOffset);\n\n      this.setState(prevState => {\n        if (prevState.scrollOffset === scrollOffset) {\n          return null;\n        }\n        return {\n          scrollDirection:\n            prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n          scrollOffset: scrollOffset,\n          scrollUpdateWasRequested: true,\n        };\n      }, this._resetIsScrollingDebounced);\n    }\n\n    scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n      const { itemCount } = this.props;\n      const { scrollOffset } = this.state;\n\n      index = Math.max(0, Math.min(index, itemCount - 1));\n\n      this.scrollTo(\n        getOffsetForIndexAndAlignment(\n          this.props,\n          index,\n          align,\n          scrollOffset,\n          this._instanceProps\n        )\n      );\n    }\n\n    componentDidMount() {\n      const { direction, initialScrollOffset, layout } = this.props;\n\n      if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n        const outerRef = ((this._outerRef: any): HTMLElement);\n        // TODO Deprecate direction \"horizontal\"\n        if (direction === 'horizontal' || layout === 'horizontal') {\n          outerRef.scrollLeft = initialScrollOffset;\n        } else {\n          outerRef.scrollTop = initialScrollOffset;\n        }\n      }\n\n      this._callPropsCallbacks();\n    }\n\n    componentDidUpdate() {\n      const { direction, layout } = this.props;\n      const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n      if (scrollUpdateWasRequested && this._outerRef != null) {\n        const outerRef = ((this._outerRef: any): HTMLElement);\n\n        // TODO Deprecate direction \"horizontal\"\n        if (direction === 'horizontal' || layout === 'horizontal') {\n          if (direction === 'rtl') {\n            // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n            // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n            // So we need to determine which browser behavior we're dealing with, and mimic it.\n            switch (getRTLOffsetType()) {\n              case 'negative':\n                outerRef.scrollLeft = -scrollOffset;\n                break;\n              case 'positive-ascending':\n                outerRef.scrollLeft = scrollOffset;\n                break;\n              default:\n                const { clientWidth, scrollWidth } = outerRef;\n                outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n                break;\n            }\n          } else {\n            outerRef.scrollLeft = scrollOffset;\n          }\n        } else {\n          outerRef.scrollTop = scrollOffset;\n        }\n      }\n\n      this._callPropsCallbacks();\n    }\n\n    componentWillUnmount() {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n    }\n\n    render() {\n      const {\n        children,\n        className,\n        direction,\n        height,\n        innerRef,\n        innerElementType,\n        innerTagName,\n        itemCount,\n        itemData,\n        itemKey = defaultItemKey,\n        layout,\n        outerElementType,\n        outerTagName,\n        style,\n        useIsScrolling,\n        width,\n      } = this.props;\n      const { isScrolling } = this.state;\n\n      // TODO Deprecate direction \"horizontal\"\n      const isHorizontal =\n        direction === 'horizontal' || layout === 'horizontal';\n\n      const onScroll = isHorizontal\n        ? this._onScrollHorizontal\n        : this._onScrollVertical;\n\n      const [startIndex, stopIndex] = this._getRangeToRender();\n\n      const items = [];\n      if (itemCount > 0) {\n        for (let index = startIndex; index <= stopIndex; index++) {\n          items.push(\n            createElement(children, {\n              data: itemData,\n              key: itemKey(index, itemData),\n              index,\n              isScrolling: useIsScrolling ? isScrolling : undefined,\n              style: this._getItemStyle(index),\n            })\n          );\n        }\n      }\n\n      // Read this value AFTER items have been created,\n      // So their actual sizes (if variable) are taken into consideration.\n      const estimatedTotalSize = getEstimatedTotalSize(\n        this.props,\n        this._instanceProps\n      );\n\n      return createElement(\n        outerElementType || outerTagName || 'div',\n        {\n          className,\n          onScroll,\n          ref: this._outerRefSetter,\n          style: {\n            position: 'relative',\n            height,\n            width,\n            overflow: 'auto',\n            WebkitOverflowScrolling: 'touch',\n            willChange: 'transform',\n            direction,\n            ...style,\n          },\n        },\n        createElement(innerElementType || innerTagName || 'div', {\n          children: items,\n          ref: innerRef,\n          style: {\n            height: isHorizontal ? '100%' : estimatedTotalSize,\n            pointerEvents: isScrolling ? 'none' : undefined,\n            width: isHorizontal ? estimatedTotalSize : '100%',\n          },\n        })\n      );\n    }\n\n    _callOnItemsRendered: (\n      overscanStartIndex: number,\n      overscanStopIndex: number,\n      visibleStartIndex: number,\n      visibleStopIndex: number\n    ) => void;\n    _callOnItemsRendered = memoizeOne(\n      (\n        overscanStartIndex: number,\n        overscanStopIndex: number,\n        visibleStartIndex: number,\n        visibleStopIndex: number\n      ) =>\n        ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n          overscanStartIndex,\n          overscanStopIndex,\n          visibleStartIndex,\n          visibleStopIndex,\n        })\n    );\n\n    _callOnScroll: (\n      scrollDirection: ScrollDirection,\n      scrollOffset: number,\n      scrollUpdateWasRequested: boolean\n    ) => void;\n    _callOnScroll = memoizeOne(\n      (\n        scrollDirection: ScrollDirection,\n        scrollOffset: number,\n        scrollUpdateWasRequested: boolean\n      ) =>\n        ((this.props.onScroll: any): onScrollCallback)({\n          scrollDirection,\n          scrollOffset,\n          scrollUpdateWasRequested,\n        })\n    );\n\n    _callPropsCallbacks() {\n      if (typeof this.props.onItemsRendered === 'function') {\n        const { itemCount } = this.props;\n        if (itemCount > 0) {\n          const [\n            overscanStartIndex,\n            overscanStopIndex,\n            visibleStartIndex,\n            visibleStopIndex,\n          ] = this._getRangeToRender();\n          this._callOnItemsRendered(\n            overscanStartIndex,\n            overscanStopIndex,\n            visibleStartIndex,\n            visibleStopIndex\n          );\n        }\n      }\n\n      if (typeof this.props.onScroll === 'function') {\n        const {\n          scrollDirection,\n          scrollOffset,\n          scrollUpdateWasRequested,\n        } = this.state;\n        this._callOnScroll(\n          scrollDirection,\n          scrollOffset,\n          scrollUpdateWasRequested\n        );\n      }\n    }\n\n    // Lazily create and cache item styles while scrolling,\n    // So that pure component sCU will prevent re-renders.\n    // We maintain this cache, and pass a style prop rather than index,\n    // So that List can clear cached styles and force item re-render if necessary.\n    _getItemStyle: (index: number) => Object;\n    _getItemStyle = (index: number): Object => {\n      const { direction, itemSize, layout } = this.props;\n\n      const itemStyleCache = this._getItemStyleCache(\n        shouldResetStyleCacheOnItemSizeChange && itemSize,\n        shouldResetStyleCacheOnItemSizeChange && layout,\n        shouldResetStyleCacheOnItemSizeChange && direction\n      );\n\n      let style;\n      if (itemStyleCache.hasOwnProperty(index)) {\n        style = itemStyleCache[index];\n      } else {\n        const offset = getItemOffset(this.props, index, this._instanceProps);\n        const size = getItemSize(this.props, index, this._instanceProps);\n\n        // TODO Deprecate direction \"horizontal\"\n        const isHorizontal =\n          direction === 'horizontal' || layout === 'horizontal';\n\n        itemStyleCache[index] = style = {\n          position: 'absolute',\n          [direction === 'rtl' ? 'right' : 'left']: isHorizontal ? offset : 0,\n          top: !isHorizontal ? offset : 0,\n          height: !isHorizontal ? size : '100%',\n          width: isHorizontal ? size : '100%',\n        };\n      }\n\n      return style;\n    };\n\n    _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n    _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n    _getRangeToRender(): [number, number, number, number] {\n      const { itemCount, overscanCount } = this.props;\n      const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n      if (itemCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      const startIndex = getStartIndexForOffset(\n        this.props,\n        scrollOffset,\n        this._instanceProps\n      );\n      const stopIndex = getStopIndexForStartIndex(\n        this.props,\n        startIndex,\n        scrollOffset,\n        this._instanceProps\n      );\n\n      // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n      const overscanBackward =\n        !isScrolling || scrollDirection === 'backward'\n          ? Math.max(1, overscanCount)\n          : 1;\n      const overscanForward =\n        !isScrolling || scrollDirection === 'forward'\n          ? Math.max(1, overscanCount)\n          : 1;\n\n      return [\n        Math.max(0, startIndex - overscanBackward),\n        Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n        startIndex,\n        stopIndex,\n      ];\n    }\n\n    _onScrollHorizontal = (event: ScrollEvent): void => {\n      const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n      this.setState(prevState => {\n        if (prevState.scrollOffset === scrollLeft) {\n          // Scroll position may have been updated by cDM/cDU,\n          // In which case we don't need to trigger another render,\n          // And we don't want to update state.isScrolling.\n          return null;\n        }\n\n        const { direction } = this.props;\n\n        let scrollOffset = scrollLeft;\n        if (direction === 'rtl') {\n          // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n          // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n          // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n          // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n          switch (getRTLOffsetType()) {\n            case 'negative':\n              scrollOffset = -scrollLeft;\n              break;\n            case 'positive-descending':\n              scrollOffset = scrollWidth - clientWidth - scrollLeft;\n              break;\n          }\n        }\n\n        // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n        scrollOffset = Math.max(\n          0,\n          Math.min(scrollOffset, scrollWidth - clientWidth)\n        );\n\n        return {\n          isScrolling: true,\n          scrollDirection:\n            prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n          scrollOffset,\n          scrollUpdateWasRequested: false,\n        };\n      }, this._resetIsScrollingDebounced);\n    };\n\n    _onScrollVertical = (event: ScrollEvent): void => {\n      const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n      this.setState(prevState => {\n        if (prevState.scrollOffset === scrollTop) {\n          // Scroll position may have been updated by cDM/cDU,\n          // In which case we don't need to trigger another render,\n          // And we don't want to update state.isScrolling.\n          return null;\n        }\n\n        // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n        const scrollOffset = Math.max(\n          0,\n          Math.min(scrollTop, scrollHeight - clientHeight)\n        );\n\n        return {\n          isScrolling: true,\n          scrollDirection:\n            prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n          scrollOffset,\n          scrollUpdateWasRequested: false,\n        };\n      }, this._resetIsScrollingDebounced);\n    };\n\n    _outerRefSetter = (ref: any): void => {\n      const { outerRef } = this.props;\n\n      this._outerRef = ((ref: any): HTMLDivElement);\n\n      if (typeof outerRef === 'function') {\n        outerRef(ref);\n      } else if (\n        outerRef != null &&\n        typeof outerRef === 'object' &&\n        outerRef.hasOwnProperty('current')\n      ) {\n        outerRef.current = ref;\n      }\n    };\n\n    _resetIsScrollingDebounced = () => {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n\n      this._resetIsScrollingTimeoutId = requestTimeout(\n        this._resetIsScrolling,\n        IS_SCROLLING_DEBOUNCE_INTERVAL\n      );\n    };\n\n    _resetIsScrolling = () => {\n      this._resetIsScrollingTimeoutId = null;\n\n      this.setState({ isScrolling: false }, () => {\n        // Clear style cache after state update has been committed.\n        // This way we don't break pure sCU for items that don't use isScrolling param.\n        this._getItemStyleCache(-1, null);\n      });\n    };\n  };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n  {\n    children,\n    direction,\n    height,\n    layout,\n    innerTagName,\n    outerTagName,\n    width,\n  }: Props<any>,\n  { instance }: State\n): void => {\n  if (process.env.NODE_ENV !== 'production') {\n    if (innerTagName != null || outerTagName != null) {\n      if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n        devWarningsTagName.add(instance);\n        console.warn(\n          'The innerTagName and outerTagName props have been deprecated. ' +\n            'Please use the innerElementType and outerElementType props instead.'\n        );\n      }\n    }\n\n    // TODO Deprecate direction \"horizontal\"\n    const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n    switch (direction) {\n      case 'horizontal':\n      case 'vertical':\n        if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n          devWarningsDirection.add(instance);\n          console.warn(\n            'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n              'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n          );\n        }\n        break;\n      case 'ltr':\n      case 'rtl':\n        // Valid values\n        break;\n      default:\n        throw Error(\n          'An invalid \"direction\" prop has been specified. ' +\n            'Value should be either \"ltr\" or \"rtl\". ' +\n            `\"${direction}\" was specified.`\n        );\n    }\n\n    switch (layout) {\n      case 'horizontal':\n      case 'vertical':\n        // Valid values\n        break;\n      default:\n        throw Error(\n          'An invalid \"layout\" prop has been specified. ' +\n            'Value should be either \"horizontal\" or \"vertical\". ' +\n            `\"${layout}\" was specified.`\n        );\n    }\n\n    if (children == null) {\n      throw Error(\n        'An invalid \"children\" prop has been specified. ' +\n          'Value should be a React component. ' +\n          `\"${children === null ? 'null' : typeof children}\" was specified.`\n      );\n    }\n\n    if (isHorizontal && typeof width !== 'number') {\n      throw Error(\n        'An invalid \"width\" prop has been specified. ' +\n          'Horizontal lists must specify a number for width. ' +\n          `\"${width === null ? 'null' : typeof width}\" was specified.`\n      );\n    } else if (!isHorizontal && typeof height !== 'number') {\n      throw Error(\n        'An invalid \"height\" prop has been specified. ' +\n          'Vertical lists must specify a number for height. ' +\n          `\"${height === null ? 'null' : typeof height}\" was specified.`\n      );\n    }\n  }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\ntype VariableSizeProps = {|\n  estimatedItemSize: number,\n  ...Props<any>,\n|};\n\ntype itemSizeGetter = (index: number) => number;\n\ntype ItemMetadata = {|\n  offset: number,\n  size: number,\n|};\ntype InstanceProps = {|\n  itemMetadataMap: { [index: number]: ItemMetadata },\n  estimatedItemSize: number,\n  lastMeasuredIndex: number,\n|};\n\nconst getItemMetadata = (\n  props: Props<any>,\n  index: number,\n  instanceProps: InstanceProps\n): ItemMetadata => {\n  const { itemSize } = ((props: any): VariableSizeProps);\n  const { itemMetadataMap, lastMeasuredIndex } = instanceProps;\n\n  if (index > lastMeasuredIndex) {\n    let offset = 0;\n    if (lastMeasuredIndex >= 0) {\n      const itemMetadata = itemMetadataMap[lastMeasuredIndex];\n      offset = itemMetadata.offset + itemMetadata.size;\n    }\n\n    for (let i = lastMeasuredIndex + 1; i <= index; i++) {\n      let size = ((itemSize: any): itemSizeGetter)(i);\n\n      itemMetadataMap[i] = {\n        offset,\n        size,\n      };\n\n      offset += size;\n    }\n\n    instanceProps.lastMeasuredIndex = index;\n  }\n\n  return itemMetadataMap[index];\n};\n\nconst findNearestItem = (\n  props: Props<any>,\n  instanceProps: InstanceProps,\n  offset: number\n) => {\n  const { itemMetadataMap, lastMeasuredIndex } = instanceProps;\n\n  const lastMeasuredItemOffset =\n    lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n  if (lastMeasuredItemOffset >= offset) {\n    // If we've already measured items within this range just use a binary search as it's faster.\n    return findNearestItemBinarySearch(\n      props,\n      instanceProps,\n      lastMeasuredIndex,\n      0,\n      offset\n    );\n  } else {\n    // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n    // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n    // The overall complexity for this approach is O(log n).\n    return findNearestItemExponentialSearch(\n      props,\n      instanceProps,\n      Math.max(0, lastMeasuredIndex),\n      offset\n    );\n  }\n};\n\nconst findNearestItemBinarySearch = (\n  props: Props<any>,\n  instanceProps: InstanceProps,\n  high: number,\n  low: number,\n  offset: number\n): number => {\n  while (low <= high) {\n    const middle = low + Math.floor((high - low) / 2);\n    const currentOffset = getItemMetadata(props, middle, instanceProps).offset;\n\n    if (currentOffset === offset) {\n      return middle;\n    } else if (currentOffset < offset) {\n      low = middle + 1;\n    } else if (currentOffset > offset) {\n      high = middle - 1;\n    }\n  }\n\n  if (low > 0) {\n    return low - 1;\n  } else {\n    return 0;\n  }\n};\n\nconst findNearestItemExponentialSearch = (\n  props: Props<any>,\n  instanceProps: InstanceProps,\n  index: number,\n  offset: number\n): number => {\n  const { itemCount } = props;\n  let interval = 1;\n\n  while (\n    index < itemCount &&\n    getItemMetadata(props, index, instanceProps).offset < offset\n  ) {\n    index += interval;\n    interval *= 2;\n  }\n\n  return findNearestItemBinarySearch(\n    props,\n    instanceProps,\n    Math.min(index, itemCount - 1),\n    Math.floor(index / 2),\n    offset\n  );\n};\n\nconst getEstimatedTotalSize = (\n  { itemCount }: Props<any>,\n  { itemMetadataMap, estimatedItemSize, lastMeasuredIndex }: InstanceProps\n) => {\n  let totalSizeOfMeasuredItems = 0;\n\n  // Edge case check for when the number of items decreases while a scroll is in progress.\n  // https://github.com/bvaughn/react-window/pull/138\n  if (lastMeasuredIndex >= itemCount) {\n    lastMeasuredIndex = itemCount - 1;\n  }\n\n  if (lastMeasuredIndex >= 0) {\n    const itemMetadata = itemMetadataMap[lastMeasuredIndex];\n    totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n  }\n\n  const numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n  const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n\n  return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nconst VariableSizeList = createListComponent({\n  getItemOffset: (\n    props: Props<any>,\n    index: number,\n    instanceProps: InstanceProps\n  ): number => getItemMetadata(props, index, instanceProps).offset,\n\n  getItemSize: (\n    props: Props<any>,\n    index: number,\n    instanceProps: InstanceProps\n  ): number => instanceProps.itemMetadataMap[index].size,\n\n  getEstimatedTotalSize,\n\n  getOffsetForIndexAndAlignment: (\n    props: Props<any>,\n    index: number,\n    align: ScrollToAlign,\n    scrollOffset: number,\n    instanceProps: InstanceProps\n  ): number => {\n    const { direction, height, layout, width } = props;\n\n    // TODO Deprecate direction \"horizontal\"\n    const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    const size = (((isHorizontal ? width : height): any): number);\n    const itemMetadata = getItemMetadata(props, index, instanceProps);\n\n    // Get estimated total size after ItemMetadata is computed,\n    // To ensure it reflects actual measurements instead of just estimates.\n    const estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n\n    const maxOffset = Math.max(\n      0,\n      Math.min(estimatedTotalSize - size, itemMetadata.offset)\n    );\n    const minOffset = Math.max(\n      0,\n      itemMetadata.offset - size + itemMetadata.size\n    );\n\n    if (align === 'smart') {\n      if (\n        scrollOffset >= minOffset - size &&\n        scrollOffset <= maxOffset + size\n      ) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n      case 'end':\n        return minOffset;\n      case 'center':\n        return Math.round(minOffset + (maxOffset - minOffset) / 2);\n      case 'auto':\n      default:\n        if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n          return scrollOffset;\n        } else if (scrollOffset < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n    }\n  },\n\n  getStartIndexForOffset: (\n    props: Props<any>,\n    offset: number,\n    instanceProps: InstanceProps\n  ): number => findNearestItem(props, instanceProps, offset),\n\n  getStopIndexForStartIndex: (\n    props: Props<any>,\n    startIndex: number,\n    scrollOffset: number,\n    instanceProps: InstanceProps\n  ): number => {\n    const { direction, height, itemCount, layout, width } = props;\n\n    // TODO Deprecate direction \"horizontal\"\n    const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    const size = (((isHorizontal ? width : height): any): number);\n    const itemMetadata = getItemMetadata(props, startIndex, instanceProps);\n    const maxOffset = scrollOffset + size;\n\n    let offset = itemMetadata.offset + itemMetadata.size;\n    let stopIndex = startIndex;\n\n    while (stopIndex < itemCount - 1 && offset < maxOffset) {\n      stopIndex++;\n      offset += getItemMetadata(props, stopIndex, instanceProps).size;\n    }\n\n    return stopIndex;\n  },\n\n  initInstanceProps(props: Props<any>, instance: any): InstanceProps {\n    const { estimatedItemSize } = ((props: any): VariableSizeProps);\n\n    const instanceProps = {\n      itemMetadataMap: {},\n      estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE,\n      lastMeasuredIndex: -1,\n    };\n\n    instance.resetAfterIndex = (\n      index: number,\n      shouldForceUpdate?: boolean = true\n    ) => {\n      instanceProps.lastMeasuredIndex = Math.min(\n        instanceProps.lastMeasuredIndex,\n        index - 1\n      );\n\n      // We could potentially optimize further by only evicting styles after this index,\n      // But since styles are only cached while scrolling is in progress-\n      // It seems an unnecessary optimization.\n      // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n      instance._getItemStyleCache(-1);\n\n      if (shouldForceUpdate) {\n        instance.forceUpdate();\n      }\n    };\n\n    return instanceProps;\n  },\n\n  shouldResetStyleCacheOnItemSizeChange: false,\n\n  validateProps: ({ itemSize }: Props<any>): void => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof itemSize !== 'function') {\n        throw Error(\n          'An invalid \"itemSize\" prop has been specified. ' +\n            'Value should be a function. ' +\n            `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n        );\n      }\n    }\n  },\n});\n\nexport default VariableSizeList;\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst FixedSizeList = createListComponent({\n  getItemOffset: ({ itemSize }: Props<any>, index: number): number =>\n    index * ((itemSize: any): number),\n\n  getItemSize: ({ itemSize }: Props<any>, index: number): number =>\n    ((itemSize: any): number),\n\n  getEstimatedTotalSize: ({ itemCount, itemSize }: Props<any>) =>\n    ((itemSize: any): number) * itemCount,\n\n  getOffsetForIndexAndAlignment: (\n    { direction, height, itemCount, itemSize, layout, width }: Props<any>,\n    index: number,\n    align: ScrollToAlign,\n    scrollOffset: number\n  ): number => {\n    // TODO Deprecate direction \"horizontal\"\n    const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    const size = (((isHorizontal ? width : height): any): number);\n    const lastItemOffset = Math.max(\n      0,\n      itemCount * ((itemSize: any): number) - size\n    );\n    const maxOffset = Math.min(\n      lastItemOffset,\n      index * ((itemSize: any): number)\n    );\n    const minOffset = Math.max(\n      0,\n      index * ((itemSize: any): number) - size + ((itemSize: any): number)\n    );\n\n    if (align === 'smart') {\n      if (\n        scrollOffset >= minOffset - size &&\n        scrollOffset <= maxOffset + size\n      ) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n      case 'end':\n        return minOffset;\n      case 'center': {\n        // \"Centered\" offset is usually the average of the min and max.\n        // But near the edges of the list, this doesn't hold true.\n        const middleOffset = Math.round(\n          minOffset + (maxOffset - minOffset) / 2\n        );\n        if (middleOffset < Math.ceil(size / 2)) {\n          return 0; // near the beginning\n        } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n          return lastItemOffset; // near the end\n        } else {\n          return middleOffset;\n        }\n      }\n      case 'auto':\n      default:\n        if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n          return scrollOffset;\n        } else if (scrollOffset < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n    }\n  },\n\n  getStartIndexForOffset: (\n    { itemCount, itemSize }: Props<any>,\n    offset: number\n  ): number =>\n    Math.max(\n      0,\n      Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n    ),\n\n  getStopIndexForStartIndex: (\n    { direction, height, itemCount, itemSize, layout, width }: Props<any>,\n    startIndex: number,\n    scrollOffset: number\n  ): number => {\n    // TODO Deprecate direction \"horizontal\"\n    const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    const offset = startIndex * ((itemSize: any): number);\n    const size = (((isHorizontal ? width : height): any): number);\n    const numVisibleItems = Math.ceil(\n      (size + scrollOffset - offset) / ((itemSize: any): number)\n    );\n    return Math.max(\n      0,\n      Math.min(\n        itemCount - 1,\n        startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n      )\n    );\n  },\n\n  initInstanceProps(props: Props<any>): any {\n    // Noop\n  },\n\n  shouldResetStyleCacheOnItemSizeChange: true,\n\n  validateProps: ({ itemSize }: Props<any>): void => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof itemSize !== 'number') {\n        throw Error(\n          'An invalid \"itemSize\" prop has been specified. ' +\n            'Value should be a number. ' +\n            `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n        );\n      }\n    }\n  },\n});\n\nexport default FixedSizeList;\n","import {useCallback, useMemo, useState} from 'react';\n\nfunction useToggle(defaultOn: boolean) {\n    const [on, setIsOn] = useState(defaultOn);\n    const turnOn = useCallback(() => {\n        setIsOn(true);\n    }, []);\n    const turnOff = useCallback(() => {\n        setIsOn(false);\n    }, []);\n    const toggle = useCallback(() => {\n        setIsOn((prevOn) => !prevOn);\n    }, []);\n    return useMemo(() => ({\n        on,\n        turnOn,\n        turnOff,\n        toggle\n    }), [on, turnOn, turnOff, toggle]);\n}\n\nexport default useToggle;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\"\n}), 'Restore');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"\n}), 'Link');\n\nexports.default = _default;","import { Avatar, CircularProgress, Dialog, DialogTitle, Grid, IconButton, InputAdornment, Step, StepContent, StepLabel, Stepper, TextField, Theme, Tooltip, withStyles } from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { IAction, IMap } from 'ats-utils/src';\nimport * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { compose, Dispatch } from 'redux';\nimport { SetOverlayComponentPropsAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport ThumbUpAltRoundedIcon from '@material-ui/icons/ThumbUpAltRounded';\nimport { SearchFirmSeriesSucceededAction, SearchFirmSeriesAction } from '../../modules/PimModule/actions';\nimport { debounce } from 'lodash';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectFirmSeries, makeSelectSearchingFirmSeries } from '../../modules/PimModule/selectors';\nimport { List, Map } from 'immutable';\nimport { Series } from '../../models';\nimport { Office } from '../../models';\nimport { makeSelectQuoteFormProps } from '../../modules/QuoteModule/selectors';\nimport { WithStyles } from '@material-ui/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport SeriesPanel from '../../containers/Expansion/SeriesPanel';\nimport { GetAttributeOrderAction, SelectSeriesAction, SeriesSpecificFilterClearAllAction, SetCategoryIdAction } from '../../modules/ProductModule/actions';\nimport { makeSelectOffice } from '../../modules/AccountModule/selectors';\nimport { makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport { GetOfficeByIdAction, SelectOfficeAction } from '../../modules/AccountModule/actions';\nimport { Currency, GEOLOCATION_ID } from '../../constants';\nimport { useTranslation } from 'react-i18next';\n\nexport const QUOTE_CONFIGURATOR_OVERLAY_COMPONENT = 'QUOTE_CONFIGURATOR_OVERLAY_COMPONENT';\n\ninterface IQuoteProductConfiguratorComponentProps {\n  providedRegionId?: string;\n  providedLocation?: IMap<any>;\n}\n\ninterface IQuoteProductConfiguratorProps extends IQuoteProductConfiguratorComponentProps {\n  open: boolean;\n  closeModal: () => void;\n  searchSeries: (searchTerm: string) => void;\n  series: List<IMap<Series>>;\n  regionId: string;\n  searchingFirmSeries: boolean;\n  addProductToQuote: any;\n  currencyType: Currency;\n  office: IMap<Office>;\n  officeId: number;\n  getOffice: (officeId: IQuoteProductConfiguratorProps['officeId']) => void;\n  onExited?: () => void;\n}\n\nconst QuoteProductConfigurator = (props: IQuoteProductConfiguratorProps & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp) => {\n  const {\n    open = false,\n    closeModal,\n    searchSeries,\n    series,\n    regionId,\n    classes,\n    searchingFirmSeries,\n    currencyType,\n    office,\n    officeId,\n    getOffice,\n    dispatch,\n    onExited\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const [activeStep, setActiveStep] = React.useState(0);\n  const [selectedSeries, setSelectedSeries] = React.useState(Map());\n  const [autocompleteOpen, setAutocompleteOpen] = React.useState(false);\n  const [firstOpen, setFirstOpen] = React.useState(true);\n  const loadingText =\n    <Grid container={true} alignItems='center' spacing={1} wrap='nowrap'>\n      <Grid item={true} container={true} className={classes.widthAuto}>\n        <CircularProgress size='1rem' />\n      </Grid>\n      <Grid item={true}>\n        {t('generalLoading.loading')}\n      </Grid>\n    </Grid>;\n\n  const renderOption = (option: IMap<Series>) => {\n    const createdBy = option.getIn(['createdBy', 'firm', 'name']);\n\n    const priceOrDash = priceKey => {\n      const priceValue = option.getIn(['price', regionId, currencyType, priceKey]);\n      return priceValue ? `${priceKey}: ${priceValue}` : '-';\n    };\n\n    return <Grid container={true} wrap='nowrap' alignItems='center' justify='space-between'>\n      <Grid container={true} wrap='nowrap' alignItems='center' spacing={1} className={classes.textOverflow}>\n        <Grid item={true}>\n          <Grid container={true} direction='column' justify='center'>\n            {\n              !option.get('firmId')\n                ? <Tooltip title={'Manufacturer recommended configurator'}>\n                  <ThumbUpAltRoundedIcon className={classes.size} color='primary' />\n                </Tooltip>\n                : <Tooltip title={`${createdBy} configurator`}>\n                  <Avatar color='primary' className={`${classes.avatar} ${classes.size}`}>{createdBy[0]}</Avatar>\n                </Tooltip>\n            }\n          </Grid>\n        </Grid>\n        <Tooltip title={option.get('name')}>\n          <Grid item={true} className={`${classes.boldText} ${classes.textOverflow}`}>\n            {option.get('name')}\n          </Grid>\n        </Tooltip>\n      </Grid>\n      <Tooltip title={`List: ${option.getIn(['price', regionId, currencyType, 'list']) || '-'} Sell: ${option.getIn(['price', regionId, currencyType, 'sell']) || '-'} Cost: ${option.getIn(['price', regionId, currencyType, 'cost']) || '-'}`}>\n        <Grid container={true} wrap='nowrap' alignItems='center' spacing={1} justify='space-evenly' className={classes.priceContainer}>\n          <Grid container={true} justify='center' item={true} className={classes.textOverflow}><span className={classes.textOverflow}>{priceOrDash('list')}</span></Grid>\n          <Grid container={true} justify='center' item={true} className={classes.textOverflow}><span className={classes.textOverflow}>{priceOrDash('sell')}</span></Grid>\n          <Grid container={true} justify='center' item={true} className={classes.textOverflow}><span className={classes.textOverflow}>{priceOrDash('cost')}</span></Grid>\n        </Grid>\n      </Tooltip>\n    </Grid>;\n  };\n\n  React.useEffect(() => {\n    if (officeId) {\n      getOffice(officeId);\n    }\n  }, [officeId]);\n\n  return (\n    <Dialog\n      open={open}\n      onClose={closeModal}\n      onExited={() => {\n        if (typeof onExited === 'function') {\n          onExited();\n        }\n        dispatch(new SetOverlayComponentPropsAction({ props: { open: false }, id: QUOTE_CONFIGURATOR_OVERLAY_COMPONENT }));\n        setActiveStep(0);\n        setFirstOpen(true);\n      }}\n      fullWidth={true}\n      maxWidth={activeStep === 0 ? 'sm' : 'lg'}\n      disableEnforceFocus={true}\n    >\n      <DialogTitle className={classes.dialogTitle}>\n        <WidgetsIcon color={'primary'} /> {t('quoteProductConfigurator.title')}\n      </DialogTitle>\n      <IconButton onClick={closeModal} size='small' className={classes.closeButton}>\n        <CloseIcon />\n      </IconButton>\n      <Stepper activeStep={activeStep} orientation='vertical' classes={{root: classes.stepperRoot}}>\n        <Step>\n          <StepLabel>\n            <Autocomplete\n              onOpen={e => firstOpen ? setFirstOpen(false) : setAutocompleteOpen(true)}\n              onClose={e => setAutocompleteOpen(false)}\n              open={autocompleteOpen}\n              blurOnSelect={true}\n              loading={searchingFirmSeries}\n              loadingText={loadingText}\n              noOptionsText={t('generalDropdown.noOptions')}\n              filterOptions={options => options}\n              options={searchingFirmSeries ? [] : series.toArray() || []}\n              getOptionLabel={(option: IMap<Series>) => option.get('name')}\n              renderOption={renderOption}\n              onInputChange={(e, searchTerm, reason) => { if (searchTerm && reason === 'input') { searchSeries(searchTerm); } }}\n              onChange={(e, value) => {if (value) {\n                dispatch(new SelectSeriesAction(value.get('id'), value));\n                dispatch(new GetAttributeOrderAction({ categoryId: value.get('category') }));\n                dispatch(new SetCategoryIdAction({ productCategoryId: value.get('category') }));\n                setSelectedSeries(value);\n                setActiveStep(1);\n              }}}\n              renderInput={(params) =>\n                <TextField\n                  {...params}\n                  placeholder={t('quoteProductConfigurator.searchPlaceholder')}\n                  fullWidth={true}\n                  className={activeStep === 0 ? '' : classes.autocompleteInput}\n                  margin='normal'\n                  autoFocus={true}\n                />\n              }\n              // debug={true}\n            />\n          </StepLabel>\n        </Step>\n        {activeStep !== 0 && <Step>\n          <StepLabel>{t('quoteProductConfigurator.step2Title')}</StepLabel>\n          <StepContent>\n            <SeriesPanel\n              specType='quoteProductConfigurator'\n              series={selectedSeries}\n              expanded={true}\n              buttonAction={prod => {props.addProductToQuote(prod); closeModal();}}\n              currencyType={currencyType}\n            />\n          </StepContent>\n        </Step>}\n      </Stepper>\n    </Dialog>\n  );\n};\n\nconst styles = (theme: Theme) => ({\n  avatar: {\n    background: theme.palette.primary.main,\n  },\n  size: {\n    width: '1.5rem',\n    height: '1.5rem',\n    fontSize: '1rem'\n  },\n  widthAuto: {\n    width: 'auto'\n  },\n  closeButton: {\n    position: 'absolute' as 'absolute',\n    top: theme.spacing(),\n    right: theme.spacing(2)\n  },\n  boldText: {\n    fontWeight: 700\n  },\n  autocompleteInput: {\n    maxWidth: '60%'\n  },\n  stepperRoot: {\n    paddingTop: 0\n  },\n  dialogTitle: {\n    paddingBottom: theme.spacing()\n  },\n  textOverflow: {\n    whiteSpace: 'nowrap' as 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis'\n  },\n  priceContainer: {\n    width: '200%'\n  }\n});\n\nconst mapStateToProps = (state, props) => {\n  const projectInfo = makeSelectQuoteFormProps(['projectInfo'])(state) || Map();\n  const isLinked = projectInfo.get('isLinked');\n  const project = projectInfo.get('data', Map());\n  const office = makeSelectOffice()(state) || Map();\n  const location = props.providedLocation ?? (isLinked ? project.get('location') : office.get('location'));\n  const regionId = props.providedRegionId ?? makeSelectQuoteFormProps(['region', 'id']);\n\n  return {\n    office,\n    location,\n    regionId,\n    overlayProps: makeSelectOverlayComponentProp(QUOTE_CONFIGURATOR_OVERLAY_COMPONENT)(state),\n    ...createStructuredSelector({\n      series: makeSelectFirmSeries(),\n      searchingFirmSeries: makeSelectSearchingFirmSeries(),\n      officeId: makeSelectUserOfficeId(),\n    })(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n\n  return {\n    dispatch,\n    getOffice: officeId => {\n      dispatch(new GetOfficeByIdAction({officeId}));\n      dispatch(new SelectOfficeAction({ officeId }));\n    }\n  };\n};\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n  const {\n    getOffice, dispatch\n  } = dispatchProps;\n  const {\n    officeId,\n    office = Map(),\n    location = Map(),\n    overlayProps\n  } = stateProps;\n\n  const currencyType = location.getIn(['country', 'id']) === GEOLOCATION_ID.canada\n                        ? 'CAD'\n                        : location.getIn(['country', 'id']) === GEOLOCATION_ID.usa\n                          ? 'USD'\n                          : null;\n  const searchSeries = debounce(searchTerm => dispatch(new SearchFirmSeriesAction({\n    isConfigurator: null,\n    filters: {\n      'and': [\n        {\n          'productNumber': {\n            'like': searchTerm\n          }\n        }\n      ]\n    },\n    location\n  })), 500);\n\n  const closeModal = () => {\n    dispatch(new SetOverlayComponentPropsAction({ props: { ...overlayProps, open: false }, id: QUOTE_CONFIGURATOR_OVERLAY_COMPONENT }));\n    dispatch(new SeriesSpecificFilterClearAllAction());\n    dispatch(new SearchFirmSeriesSucceededAction({firmSeries: List(), hasNextPage: false, firmSeriesCount: 0}));\n  };\n\n  return { ...ownProps, ...stateProps, ...overlayProps,  ...dispatchProps, currencyType, searchSeries, closeModal };\n};\n\nexport default compose<React.FC<IQuoteProductConfiguratorComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  withStyles(styles)\n)(QuoteProductConfigurator);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 9h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7zM20 3H4c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 16H5V5h14v14z\"\n}), 'ListAltRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12.65 10C11.7 7.31 8.9 5.5 5.77 6.12c-2.29.46-4.15 2.29-4.63 4.58C.32 14.57 3.26 18 7 18c2.61 0 4.83-1.67 5.65-4H17v2c0 1.1.9 2 2 2s2-.9 2-2v-2c1.1 0 2-.9 2-2s-.9-2-2-2h-8.35zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"\n}), 'VpnKeyRounded');\n\nexports.default = _default;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  change,\n  BaseFieldProps,\n} from 'redux-form';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../../../components/FieldTextField';\nimport FieldAutoSuggest, {IFieldAutoSuggestComponentProps} from '../../../components/FieldAutoSuggest';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {\n  required,\n  isNotEmpty,\n  isNotEmptyStringRequired,\n} from '../../../validators';\nimport {\n  GetProvinceAction,\n  GetCountriesAction,\n  GetCityAction,\n  GetCountryAdminDivisionAction,\n} from '../../../modules/ProjectLocationModule/actions';\nimport {\n  makeSelectCountries,\n  makeSelectProvinces,\n  makeSelectCities,\n} from '../../../modules/ProjectLocationModule/selectors';\nimport {\n  Map,\n  List,\n  Set,\n  is,\n} from 'immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {ListItem, Project} from '../../../models';\nimport { createStructuredSelector } from 'reselect';\nimport { CreateMasterProjectFormVariant } from '../../CreateNewMasterModal/constants';\nimport {CreateTemplateProjectFormVariant} from '../../CreateNewTemplateModal/constants';\nimport { makeSelectTemplateTranslationObject } from '../../../modules/AtsModule/selectors';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport  * as amplitude from '@amplitude/analytics-browser';\n\nconst ITEM_HEIGHT = 30;\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1,\n    height: 250,\n  },\n  chip: {\n    margin: theme.spacing() / 4,\n  },\n  // We had to use a lot of global selectors in order to style react-select.\n  // We are waiting on https://github.com/JedWatson/react-select/issues/1679\n  // to provide a much better implementation.\n  // Also, we had to reset the default style injected by the library.\n  '@global': {\n    '.Select-control': {\n      display: 'flex',\n      alignItems: 'center',\n      border: 0,\n      height: 'auto',\n      background: 'transparent',\n      '&:hover': {\n        boxShadow: 'none',\n      },\n    },\n    '.Select-multi-value-wrapper': {\n      flexGrow: 1,\n      display: 'flex',\n      flexWrap: 'wrap',\n    },\n    '.Select--multi .Select-input': {\n      margin: 0,\n    },\n    '.Select.has-value.is-clearable.Select--single > .Select-control .Select-value': {\n      padding: 0,\n    },\n    '.Select-noresults': {\n      padding: theme.spacing() * 2,\n    },\n    '.Select-input': {\n      display: 'inline-flex !important',\n      padding: 0,\n      height: 'auto',\n      width: 178,\n      outline: 'none',\n      border: 'none'\n    },\n    '.Select-input input': {\n      background: 'transparent',\n      border: 0,\n      padding: 0,\n      cursor: 'default',\n      display: 'inline-block',\n      fontFamily: 'inherit',\n      fontSize: 'inherit',\n      margin: 0,\n      outline: 0,\n    },\n    '.Select-placeholder, .Select--single .Select-value': {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      display: 'flex',\n      alignItems: 'center',\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(16),\n      padding: 0,\n    },\n    '.Select-placeholder': {\n      opacity: 0.42,\n      color: theme.palette.common.black,\n      width: '100%',\n    },\n    '.Select-menu-outer': {\n      backgroundColor: theme.palette.background.paper,\n      boxShadow: theme.shadows[2],\n      position: 'absolute',\n      left: 0,\n      top: `calc(100% + ${theme.spacing()}px)`,\n      width: '100%',\n      zIndex: 2,\n      maxHeight: ITEM_HEIGHT * 3,\n    },\n    '.Select.is-focused:not(.is-open) > .Select-control': {\n      boxShadow: 'none',\n    },\n    '.Select-menu': {\n      maxHeight: ITEM_HEIGHT * 3,\n      overflowY: 'auto',\n    },\n    '.Select-menu div': {\n      boxSizing: 'content-box',\n    },\n    '.Select-arrow-zone, .Select-clear-zone': {\n      color: theme.palette.action.active,\n      cursor: 'pointer',\n      height: 21,\n      width: 21,\n      zIndex: 1,\n    },\n    // Only for screen readers. We can't use display none.\n    '.Select-aria-only': {\n      position: 'absolute',\n      overflow: 'hidden',\n      clip: 'rect(0 0 0 0)',\n      height: 1,\n      width: 1,\n      margin: -1,\n    },\n  },\n});\ninterface IProjectFormComponentProps {\n  onSubmit: (values: any) => void;\n  variantSet: Set<CreateTemplateProjectFormVariant>;\n  data?: IMap<Project>;\n  form?: string;\n}\n\ninterface IProjectForm extends IProjectFormComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  initialValues: IMap<Project>;\n  editMode: boolean;\n  templateTranslationObject: object;\n}\n\nexport const FORM_NAME = 'NewTemplateModalForm';\ntype NewProjectModalProps = WithTranslation & WithAmplitudeData & IProjectForm & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass NewProjectModalForm extends React.PureComponent<NewProjectModalProps, {}> {\n\n  public componentDidMount() {\n    const {\n      getCountries,\n    } = this.props;\n    getCountries();\n  }\n\n  public componentDidUpdate(prevProps: NewProjectModalProps) {\n    const {\n      formValues: prevFormValues,\n    } = prevProps;\n    const {\n      formValues,\n      initialValues,\n    } = this.props;\n\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (prevFormValues == null || countryId !== prevFormValues.getIn(['location', 'country', 'id'])) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (prevFormValues == null || provinceId !== prevFormValues.getIn(['location', 'province', 'id'])) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      untouch,\n      amplitudeData,\n    } = this.props;\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      if (isNaN(countryId)) {\n        amplitude.logEvent('NaN Province Search', amplitudeData({\n          countryId: _countryId,\n          type: typeof _countryId,\n          source: 'Template Modal',\n          data: countries?.toJS(),\n        }));\n      }\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(form, 'location.country', countries.find((country) => {\n        return country.get('id') === _countryId;\n      })));\n    } else {\n      dispatch(change(form, 'location.country', null));\n    }\n    untouch('location.province.id');\n    untouch('location.city.id');\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n      untouch,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(form, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n    } else {\n      dispatch(change(form, 'location.province', null));\n    }\n    untouch('location.city.id');\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n    } else {\n      dispatch(change(form, 'location.city', null));\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      onSubmit,\n      t,\n      countries,\n      provinces,\n      cities,\n      children,\n      formValues = Map(),\n      variantSet,\n      templateTranslationObject,\n    } = this.props;\n\n    const country = formValues.getIn(['location', 'country']) || Map();\n    const province = formValues.getIn(['location', 'province']) || Map();\n\n    return (\n      <form\n        onSubmit={handleSubmit(onSubmit)}\n        style={{\n          padding: '24px 0',\n        }}\n      >\n        <Grid\n          container={true}\n          justify='flex-start'\n          alignItems='center'\n          spacing={3}\n        >\n          <Grid\n            item={true}\n            sm={12}\n            md={12}\n            lg={12}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewTemplateProject.Name', templateTranslationObject),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  autoComplete: 'no',\n                }\n              }}\n              name='name'\n              validate={[isNotEmptyStringRequired]}\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={countryName || t('placeholders.CountrySelection')}\n              props={{\n                label: t('createNewProject.Country'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.country.id')\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: countries.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCountry,\n                  type: 'text',\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.country.id'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldAutoSuggest}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={provinceName || t('placeholders.ProvinceSelection')}\n              props={{\n                label: t('createNewProject.StateProvince'),\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.province.id')\n                },\n                autosuggestProps:{\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: provinces.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps:{\n                  onChange: this.selectProvince,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty()\n                },\n              }}\n              name='location.province.id'\n              component={FieldAutoSuggest}\n              // validate={[\n              //   required,\n              //   isNotEmpty\n              // ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={cityName || t('placeholders.CitySelection')}\n              props={{\n                label: t('createNewProject.City'),\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.city.id')\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: cities.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return value.length !== 0;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCity,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty() || province.isEmpty()\n                },\n              }}\n              name='location.city.id'\n              component={FieldAutoSuggest}\n              // validate={[\n              //   required,\n              //   isNotEmpty\n              // ]}\n            />\n          </Grid>\n        </Grid>\n        {children}\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IProjectFormComponentProps) => {\n\n  const editMode = ownProps.variantSet.has(CreateTemplateProjectFormVariant.WITH_EDIT_MODE);\n\n  // set up initial values\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const initialValues = data;\n\n  const form = ownProps.form != null\n    ? ownProps.form\n    : editMode\n      ? `${FORM_NAME}Edit`\n      : FORM_NAME;\n\n  return {\n    form,\n    initialValues,\n    editMode,\n    ...createStructuredSelector({\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      formValues: getFormValues(form),\n      templateTranslationObject: makeSelectTemplateTranslationObject(),\n    })(state)\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectFormComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: false,\n  }),\n)(NewProjectModalForm);\n","export default __webpack_public_path__ + \"static/media/barrierFreeIcon.c14dc921.svg\";","import * as React from 'react';\nimport {\n  Link,\n  Typography,\n} from '@material-ui/core';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Button,\n  Tooltip,\n  Theme\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  Trans,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  required, isValidPassword, passwordsMustMatch, isValidEmailAddress, isNotEmpty\n} from '../../validators';\nimport {\n  IAction,\n  IConfig,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Map, List,\n} from 'immutable';\n\nimport {\n  SPEC_TOOL_ID,\n  SIGN_UP_SECOND_STEP_PATH,\n  WATTS_SPEC_ID,\n  BOBRICK_SPEC_ID,\n  LIXIL_SPEC_ID,\n  ACUDOR_SPEC_ID,\n  AOSMITH_SPEC_ID,\n  ZOELLER_SPEC_ID,\n  LOCHINVAR_SPEC_ID,\n  DOBBINS_SPEC_ID,\n  MORRIS_LEE_SPEC_ID,\n  AMPLITUDE_EVENT,\n  SPECTRUM_SPEC_ID,\n  STERN_WILLIAMS_SPEC_ID,\n  IS_PRODUCTION,\n  PROJECT_TRACKER_ID,\n  FIAT_SPEC_ID,\n  PRIER_SPEC_ID,\n  FRANKE_SPEC_ID,\n  MISSION_RUBBER_SPEC_ID,\n  WILLIAMS_BROTHERS_SPEC_ID,\n  DELTA_COMMERCIAL_SPEC_ID,\n  PPP_SPEC_ID,\n  NU_AIR_SPEC_ID\n} from '../../constants';\nimport {CustomizedSnackbar, LinkButton} from '../../components';\nimport ConsentModal from '../../components/ConsentModal';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectConfig, makeSelectEnv, makeSelectIsAtsSpecTool, makeSelectIsSpecTool } from '../../modules/AtsModule/selectors';\nimport {CheckEmailAlreadyExistsAction, ResendVerificationEmailAction} from '../../modules/AtsModule/actions';\nimport { push } from 'connected-react-router';\nimport PersonIcon from '@material-ui/icons/Person';\nimport VpnKeyRoundedIcon from '@material-ui/icons/VpnKeyRounded';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffRoundedIcon from '@material-ui/icons/VisibilityOffRounded';\nimport DoneAllRoundedIcon from '@material-ui/icons/DoneAllRounded';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { TrackFormSubmitFailedAction, TrackFormSubmitSucceededAction } from '../../modules/AccountModule/actions';\nimport {\n  SetSnackbarClosedAction,\n  SetSnackbarOpenAction,\n  ToggleLiveChatAction\n} from '../../modules/ApplicationModule/actions';\nimport i18next from 'i18next';\nimport { emailCheckFailedFieldError, preventUnhandledSubmitRejection } from '../../utils/reduxForm';\n\ninterface ISignUpFirstStepPropsComponentProps {\n}\n\ninterface ISignUpFirstStepProps extends ISignUpFirstStepPropsComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  togglePasswordVisibility: (arg: boolean) => boolean;\n  config: IMap<IConfig>;\n  isSpecTool: boolean;\n  isAtsSpecTool: boolean;\n  formValues: Map<string, any>;\n  initialValue: Map<string, any>;\n  env: IMap<any>;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  fullWidth: {\n    width: '100%',\n  },\n  container: {\n    padding: theme.spacing(8),\n  },\n  logoItem: {\n    marginBottom: theme.spacing(4),\n  },\n  contentItem: {\n    padding: theme.spacing(4),\n  },\n  fullHeight: {\n    height: '100%',\n  },\n  icon: {\n    padding: theme.spacing(1),\n  },\n  error: {\n    fontSize: 12,\n    display: 'flex',\n    justifyContent: 'center',\n    color: '#f00',\n    wordWrap: 'break-word' as 'break-word'\n  },\n  title: {\n    fontSize: '.75rem',\n    marginBottom: theme.spacing(),\n    color: theme.palette.text.primary,\n  },\n  emailAccessLink: {\n    color: theme.palette.primary.main\n  }\n});\n\nexport const FORM_NAME = '__SignUp_form__1';\n\nexport const asyncValidate = (values, dispatch) => {\n  const email = values.get('email');\n\n  return new Promise((resolve, reject) => {\n    return dispatch(new CheckEmailAlreadyExistsAction({\n      email,\n      resolve,\n      reject,\n    }));\n  }).then(({emailIsUnique, status, verified}) => {\n    if (!emailIsUnique) {\n      if (status === 'active' && !verified) {\n        dispatch(new SetSnackbarOpenAction({\n          message: i18next.t('translations:inactiveEmail.message'),\n          severity: 'error',\n          actionProps: {\n            label: i18next.t('translations:inactiveEmail.resendEmail'),\n            autoHideDuration: null,\n            onclick: () => {\n              dispatch(new SetSnackbarClosedAction());\n              dispatch(new ResendVerificationEmailAction({\n                email\n              }));\n            },\n            buttonStyle: {\n              color: 'white',\n              textDecoration: 'underline'\n            }\n          }\n        }));\n      }\n      throw({ email: 'Email address already exists' });\n    }\n  }, () => {\n    // The email check itself failed (e.g. network or server error). Surface it as a field\n    // error so redux-form shows it instead of leaking an unhandled promise rejection.\n    throw emailCheckFailedFieldError();\n  });\n};\n\ntype SignUpFirstStepType = ISignUpFirstStepProps & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\nclass SignUpFirstStep extends React.Component<SignUpFirstStepType, {}> {\n  public state = {\n    passwordTypeEnabled: true,\n    consentModalOpen: false,\n  };\n\n  public ButtonComponent = this.props.config.getIn(['atsApiOptions', 'apiKey'], null) === SPEC_TOOL_ID ? LinkButton : Button;\n\n  public onSubmit = () => {\n    const {\n      dispatch,\n      isAtsSpecTool,\n    } = this.props;\n\n    // spec tool users have to make a data & privacy selection before moving on to the next step\n    if (isAtsSpecTool) {\n      this.setState({ consentModalOpen: true });\n      return;\n    }\n\n    dispatch(push(SIGN_UP_SECOND_STEP_PATH));\n  }\n\n  public closeConsentModal = () => {\n    this.setState({ consentModalOpen: false });\n  }\n\n  public onConsentConfirm = (consent: boolean) => {\n    const {\n      change,\n      dispatch,\n    } = this.props;\n\n    // gets merged into the RegisterUserAction body on the final step\n    change('consent', consent);\n    this.setState({ consentModalOpen: false });\n    dispatch(push(SIGN_UP_SECOND_STEP_PATH));\n  }\n\n  public onBlurTrack = (eventName: AMPLITUDE_EVENT) => (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n    const { amplitudeData } = this.props;\n    // only send if field is filled on blur\n    if (e.target.value) {\n      amplitude.logEvent(eventName, amplitudeData());\n    }\n  }\n\n  public componentDidUpdate(prevProps) {\n    // Makreting Nonsense https://atsinc.atlassian.net/browse/IT-2985\n    if (\n      this.props.env.size\n      && this.props.env !== prevProps.env\n      &&  IS_PRODUCTION\n      &&  this.props.env.get('ENDPOINT_SELF') === 'https://spec.atssoftware.com'\n      ) {\n        const _mtm = (window as any)._mtm = (window as any)._mtm || [];\n        _mtm.push({ 'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start' });\n        const d = document;\n        const g = d.createElement('script');\n        const s = d.getElementsByTagName('script')[0];\n        g.async = true; g.src = 'https://cdn.matomo.cloud/reverseads.matomo.cloud/container_RWxmS40b.js'; s.parentNode.insertBefore(g, s);\n    }\n  }\n\n  public componentWillUnmount() {\n    const { dispatch } = this.props;\n    dispatch(new SetSnackbarClosedAction());\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      t,\n      classes,\n      config,\n      isSpecTool,\n      dispatch,\n    } = this.props;\n    const { passwordTypeEnabled, consentModalOpen } = this.state;\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    return (\n      <>\n        <CustomizedSnackbar />\n        <ConsentModal\n          open={consentModalOpen}\n          onClose={this.closeConsentModal}\n          onConfirm={this.onConsentConfirm}\n        />\n        {\n          isSpecTool\n            ? <form\n              className={classes.fullWidth}\n              onSubmit={preventUnhandledSubmitRejection(handleSubmit(this.onSubmit))}\n            >\n              <Grid\n                container={true}\n                direction='column'\n              >\n                <Grid\n                  container={true}\n                  item={true}\n                >\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='email'\n                      props={{\n                        label: t('signUpForm.email'),\n                        require: true,\n                        formControlProps: {\n                          fullWidth: true,\n                        },\n                        inputProps: {\n                          type: 'text',\n                          onChange: () => {\n                            dispatch(new SetSnackbarClosedAction());\n                          },\n                          onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1Email),\n                          InputProps: {\n                            startAdornment: <PersonIcon className={classes.icon}/>,\n                            disabled: Boolean((this.props.initialValues as any).get('email'))\n                          },\n                        }\n                      }}\n                      validate={[\n                        required,\n                        isValidEmailAddress,\n                      ]}\n                      component={FieldTextField}\n                    />\n                  </Grid>\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='firstName'\n                      props={{\n                        label: t('signUpForm.firstName'),\n                        require: true,\n                        formControlProps: {\n                          fullWidth: true,\n                        },\n                        inputProps: {\n                          type: 'text',\n                          name: Date.now().toString(),\n                          onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1FirstName),\n                        }\n                      }}\n                      validate={[\n                        required,\n                        isNotEmpty\n                      ]}\n                      component={FieldTextField}\n                    />\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='lastName'\n                      props={{\n                        label: t('signUpForm.lastName'),\n                        require: true,\n                        formControlProps: {\n                          fullWidth: true,\n                        },\n                        inputProps: {\n                          type: 'text',\n                          name: Date.now().toString(),\n                          onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1LastName),\n                        }\n                      }}\n                      validate={[\n                        required,\n                        isNotEmpty\n                      ]}\n                      component={FieldTextField}\n                    />\n                  </Grid>\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    {/* This input box is a hacky workaround from chrome autofill. Was unable to disable the password autocomplete but this hidden element will intercept the autocomplete email portion*/}\n                    <input type='text' name='email' style={{width: 0, height: 0, opacity: 0}} />\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='password'\n                      props={{\n                        label: t('signUpForm.password'),\n                        require: true,\n                        formControlProps: {\n                          fullWidth: true,\n                        },\n                        inputProps: {\n                          type: passwordTypeEnabled ? 'password' : 'text',\n                          name: 'password',\n                          autoComplete: 'new-password',\n                          onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1Password),\n                          InputProps: {\n                            startAdornment: <VpnKeyRoundedIcon className={classes.icon}/>,\n                            endAdornment: (\n                              <Tooltip\n                                title={t('toggle.password')}\n                                placement='top'\n                              >\n                                <Button\n                                  className={classes.icon}\n                                  onClick={this.togglePasswordVisible}\n                                >\n                                  {\n                                    passwordTypeEnabled === true ?\n                                    <VisibilityIcon /> : <VisibilityOffRoundedIcon />\n                                  }\n                                </Button>\n                              </Tooltip>\n                            )\n                          }\n                        },\n                      }}\n                      validate={[\n                        required,\n                        isValidPassword,\n                      ]}\n                      component={FieldTextField}\n                    />\n                  </Grid>\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='confirmPassword'\n                      props={{\n                        label: t('signUpForm.confirmPassword'),\n                        require: true,\n                        formControlProps: {\n                          fullWidth: true,\n                        },\n                        inputProps: {\n                          type: passwordTypeEnabled ? 'password' : 'text',\n                          name: 'password',\n                          onBlur: this.onBlurTrack(AMPLITUDE_EVENT.step1ConfirmPassword),\n                          InputProps: {\n                            startAdornment: <DoneAllRoundedIcon className={classes.icon}/>,\n                            endAdornment: (\n                              <Tooltip\n                                title={t('toggle.password')}\n                                placement='top'\n                              >\n                                <Button\n                                  className={classes.icon}\n                                  onClick={this.togglePasswordVisible}\n                                >\n                                  {\n                                    passwordTypeEnabled === true ?\n                                    <VisibilityIcon /> : <VisibilityOffRoundedIcon />\n                                  }\n                                </Button>\n                              </Tooltip>\n                            )\n                          }\n                        },\n                      }}\n                      validate={[\n                        required,\n                        passwordsMustMatch,\n                      ]}\n                      component={FieldTextField}\n                    />\n                  </Grid>\n                  <Grid\n                    item={true}\n                  >\n                    <this.ButtonComponent\n                      type='submit'\n                      variant='contained'\n                      color='primary'\n                    >\n                      {t('signUpForm.continue')}\n                    </this.ButtonComponent>\n                  </Grid>\n                </Grid>\n              </Grid>\n            </form>\n          : <Grid\n              container={true}\n              direction='column'\n              alignItems='center'\n            >\n              <Typography\n                variant='h6'\n                style={{marginTop: 50, marginBottom: 30}}\n              >\n                {t('signUpForm.needAccessTitle')}\n              </Typography>\n              { apiKey === PROJECT_TRACKER_ID\n                ? <>\n                    <Typography\n                      variant='body2'\n                    >\n                      <Trans\n                        t={t}\n                        i18nKey={'signUpForm.autoquoteAccessInfo1'}\n                        components={[\n                          <a key={'email'} className={classes.emailAccessLink} href='mailto:info@atssoftware.com' target='_top' />,\n                        ]}\n                      />\n                    </Typography>\n                    <Typography\n                      variant='body2'\n                    >\n                      <Trans\n                        t={t}\n                        i18nKey={'signUpForm.autoquoteAccessInfo2'}\n                        values={{\n                          link: 'https://www.atssoftware.com/autoquote'\n                        }}\n                        components={[\n                          <Link key={'link'} href='https://www.atssoftware.com/autoquote' target='_blank' rel='noopener' />,\n                        ]}\n                      />\n                    </Typography>\n                  </>\n                : <Typography\n                    variant='body2'\n                  >\n                    Want to learn more about Project Tracker? Email for access: <a className={classes.emailAccessLink} href='mailto:info@atssoftware.com' target='_top'>info@atssoftware.com</a>\n                  </Typography>\n              }\n            </Grid>\n        }\n      </>\n    );\n  }\n  public togglePasswordVisible = () => {\n    const { passwordTypeEnabled } = this.state;\n    this.setState({passwordTypeEnabled: !passwordTypeEnabled});\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  const urlSearchParams = new URLSearchParams(ownProps.location.search);\n  const email = urlSearchParams.get('email');\n  const initialValues = {email};\n\n  return {\n    initialValues,\n    env: makeSelectEnv()(state),\n    formValues: getFormValues(FORM_NAME)(state) || Map(),\n    ...createStructuredSelector({\n      config: makeSelectConfig(),\n      isSpecTool: makeSelectIsSpecTool(),\n      isAtsSpecTool: makeSelectIsAtsSpecTool(),\n    })(state)\n  };\n};\n\nexport default compose<React.ComponentClass<ISignUpFirstStepPropsComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: FORM_NAME,\n    destroyOnUnmount: false,\n    asyncValidate,\n    asyncBlurFields: ['email'],\n    onSubmitFail: (errors, dispatch) => dispatch(new TrackFormSubmitFailedAction({\n      errors,\n      eventName: AMPLITUDE_EVENT.step1Final,\n    })),\n    onSubmitSuccess: (result, dispatch) => dispatch(new TrackFormSubmitSucceededAction({\n      eventName: AMPLITUDE_EVENT.step1Final,\n    })),\n  }),\n  withAmplitudeData,\n)(SignUpFirstStep);\n","export default __webpack_public_path__ + \"static/media/ats_portal_graphic.97d97e78.svg\";","import React from 'react';\nimport {IconButton, Tooltip} from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\n\nconst MoreVertButton = ({\n    disabled = false,\n    tooltipText = '',\n    children\n}) => {\n    const [anchorEl, setAnchorEl] = React.useState(null);\n    const open = Boolean(anchorEl);\n    const handleClick = (event) => {\n        event.stopPropagation();\n        setAnchorEl(event.currentTarget);\n    };\n    const handleClose = () => {\n        setAnchorEl(null);\n    };\n    const button = <IconButton onClick={handleClick} disabled={disabled}>\n        <MoreVertIcon />\n    </IconButton>;\n    return (\n        <>\n            {\n                tooltipText ? <Tooltip title={tooltipText}>\n                    <span>\n                        {button}\n                    </span>\n                </Tooltip> : button\n            }\n            {children({open, anchorEl, onClose: handleClose})}\n        </>\n    );\n};\n\nexport default MoreVertButton;","import React from 'react';\nimport {Button, Collapse, Grid, Tooltip, Typography} from '@material-ui/core';\nimport PeopleRoundedIcon from '@material-ui/icons/PeopleRounded';\nimport {useTranslation} from 'react-i18next';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\nimport useToggle from '../../../hooks/useToggle';\nimport {KeyboardArrowDown, KeyboardArrowUp} from '@material-ui/icons';\nimport clsx from 'clsx';\nimport {List} from 'immutable';\nimport {utcToLocal} from 'ats-utils/src/index';\nimport MoreVertButton from '../MoreVertButton';\n// import ActionMenu from './ActionMenu';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Project} from '../../../models';\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\n\ninterface IProps {\n    project: IMap<Project>;\n    ActionMenu: React.FC<any>;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    header: {\n        display: 'flex',\n        alignItems: 'center',\n        padding: `0px ${theme.spacing(3)}px`,\n        backgroundColor: '#f5f5f5',\n        gap: theme.spacing(1),\n    },\n    basicInfoButton: {\n        textTransform: 'none',\n        fontSize: '0.58rem',\n        padding: 0,\n        marginLeft: theme.spacing(3),\n        '&:hover': {\n            backgroundColor: 'transparent',\n        }\n    },\n    projectInfoPanel: {\n        display: 'grid',\n        gridTemplateColumns: '1fr 1fr 1fr 1fr',\n        padding: `${theme.spacing(1.75)}px ${theme.spacing(3)}px`,\n        backgroundColor: '#E0E0E0',\n        gap: theme.spacing(2),\n    },\n    captionColor: {\n        color: 'rgba(0, 0, 0, 0.87)',\n    }\n}));\nfunction getBuildingTypes(buildingClasses: List<any>) {\n    return buildingClasses.map((data, index) => {\n        if (!data.get('buildingTypes').size) {\n            return data.get('value');\n        }\n        return data.get('buildingTypes').map((data2, i) => {\n            return [data.get('value'), data2.get('value')].join(' - ');\n        });\n    }).flatten().toArray();\n}\nconst Header: React.FC<IProps> = ({\n    project,\n    ActionMenu,\n    children\n}) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const { on: isProjectInfoPanelExpanded, toggle } = useToggle(false);\n    const buildingClasses = project.getIn(['building', 'buildingClasses']);\n    const internalNum = project.get('internalNo');\n    const createDate = utcToLocal(project.get('createdDate'), true);\n    const tenderDate = utcToLocal(project.get('bidDate'));\n    const area = project.get('area');\n    const city = project.getIn(['location', 'city', 'value']);\n    const province = project.getIn(['location', 'province', 'value']);\n    const country = project.getIn(['location', 'country', 'value']);\n    const address = `${project.get('address') ? project.get('address') + ', ' : ''}${city}, ${province}, ${country}`;\n    const creator = project.getIn(['createdBy', 'user', 'name']);\n    const projectName = project.get('name');\n    const lastUpdate = utcToLocal(project.get('modifiedDate'));\n    const buildingTypes = buildingClasses ? getBuildingTypes(buildingClasses) : 'N/A';\n    return (\n        <>\n            <header className={classes.header}>\n                {\n                    project.get('isCollaborated') ? <Tooltip title={t('ProjectDetail.collaboratedIconTooltip')}>\n                        <PeopleRoundedIcon color='primary' />\n                    </Tooltip> : <Tooltip title={t('ProjectDetail.nonCollaboratedIconTooltip')}>\n                        <PersonRoundedIcon color='primary' />\n                    </Tooltip>\n                }\n                <Tooltip title={projectName}>\n                    <Typography variant='h6' component='span' style={{ textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', maxWidth: '30%'}}>\n                        {projectName}\n                    </Typography>\n                </Tooltip>\n                <Button\n                    className={clsx(classes.basicInfoButton, classes.captionColor)}\n                    disableRipple={true}\n                    disableFocusRipple={true}\n                    variant='text'\n                    endIcon={isProjectInfoPanelExpanded ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\n                    onClick={toggle}\n                >\n                    {t('projectDetailPage.basicInfo')}\n                </Button>\n                {\n                    ActionMenu && (\n                        <MoreVertButton>\n                            {(props) => <ActionMenu project={project} {...props} />}\n                        </MoreVertButton>\n                    )\n                }\n                <div style={{ marginLeft: 'auto', whiteSpace: 'nowrap' }}>\n                    {children}\n                </div>\n            </header>\n            <Collapse in={isProjectInfoPanelExpanded}>\n                <section className={classes.projectInfoPanel}>\n                    {\n                        [\n                            { label: t('ProjectDetail.internalNoTooltip'), value: internalNum ?? '' },\n                            { label: t('ProjectDetail.createdTooltip'), value: createDate ?? '' },\n                            { label: t('ProjectDetail.tenderDateTooltip'), value: tenderDate ?? '' },\n                            { label: t('ProjectDetail.areaTooltip'), value: area ?? '' },\n                            { label: t('ProjectDetail.addressTooltip'), value: address ?? '' },\n                            { label: t('ProjectDetail.creatorTooltip'), value: creator ?? '' },\n                            { label: t('ProjectDetail.buildingTypeTooltip'), value: buildingTypes ?? 'N/A' },\n                            { label: t('ProjectDetail.lastUpdateTooltip'), value: lastUpdate ?? 'N/A' },\n                        ].map((item, index) => <Typography key={index} variant='caption' color='textPrimary'>\n                            <span style={{ fontWeight: 'bold' }}>{item.label}</span> : <span>{item.value}</span>\n                        </Typography>)\n                    }\n                </section>\n            </Collapse>\n        </>\n    );\n};\n\nexport default Header;","import {useSelector} from 'react-redux';\nimport {makeSelectConfigAtsSvgProps} from '../../../../modules/AtsModule/selectors';\nimport {AtsSvgSpec} from '../../../../components/AtsSvg';\nimport * as React from 'react';\nimport {useTheme} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport EmptyViewComponent from '../../../../components/EmptyView';\n\nconst EmptyView = ({\n    onButtonClicked,\n    disabledAdd = false,\n    disabledAddTooltip = '',\n}) => {\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const configAtsSvgProps = useSelector(makeSelectConfigAtsSvgProps());\n    return (\n        <EmptyViewComponent\n            svg={\n                <AtsSvgSpec\n                    width='125'\n                    height='125'\n                    color={{\n                        backgroundColor: theme.palette.primary[200],\n                        shadowColor: theme.palette.primary[900]\n                    }}\n                    margin={String(theme.spacing())}\n                    {...configAtsSvgProps}\n                />\n            }\n            emptyviewAddButton={t('ProjectDetail.emptyviewAddButton')}\n            emptyviewAlt={t('ProjectDetail.emptyviewAlt')}\n            emptyviewNotFound={t('ProjectDetail.emptyviewNotFound')}\n            onButtonClicked={onButtonClicked}\n            disabledAdd={disabledAdd}\n            disabledAddTooltip={disabledAddTooltip}\n        />\n    );\n};\n\nexport default EmptyView;","// IMPORTANT: to make this modal works, you need to add a dom element with id 'draggable' to your html\n/* tslint:disable:no-shadowed-variable */\nimport React from 'react';\nimport {\n    IconButton,\n    List,\n    ListItem,\n    ListItemIcon,\n    ListItemText,\n    Modal,\n    ModalProps,\n    Paper,\n    Typography\n} from '@material-ui/core';\nimport {DragDropContext, Draggable, Droppable} from 'react-beautiful-dnd';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\nimport {createDraggableTabId, isDraggableTabId} from '../../ProjectDetail/common/helpers';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {createPortal} from 'react-dom';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Project, Spec} from '../../../models';\nimport {fromJS} from 'immutable';\nimport {GetProjectsSucceededAction} from '../../../modules/ProjectModule/actions';\nimport {ReorderSpecsAndGetProjectAction} from '../../../modules/SpecModule/actions';\nimport {useDispatch} from 'react-redux';\nimport CloseIcon from '@material-ui/icons/Close';\n\ninterface ISortProductGroupsModalProps extends Omit<ModalProps, 'children'> {\n    project: IMap<Project>;\n    isLoading: boolean;\n    onClose: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    paper: {\n        position: 'absolute',\n        width: '50%',\n        height: '60%',\n        overflow: 'auto',\n        backgroundColor: theme.palette.background.paper,\n        boxShadow: theme.shadows[5],\n        padding: theme.spacing(2, 4, 3),\n        top: `50%`,\n        left: `50%`,\n        transform: `translate(-50%, -50%)`,\n        display: 'flex',\n        flexDirection: 'column',\n        gap: theme.spacing(2)\n    },\n    header: {\n        display: 'flex',\n        justifyContent: 'space-between',\n        alignItems: 'center'\n    }\n}));\nconst SortProductGroupsModal: React.FC<ISortProductGroupsModalProps> = ({ project, isLoading, ...props }) => {\n    const productGroups: Array<{\n        id: number;\n        name: string;\n    }> = project.get('specs').map((spec) => ({ id: spec.get('id'), name: spec.get('name') })).toArray();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const _dragEl = document.getElementById('draggable');\n    const dispatch = useDispatch();\n    const onDragEnd = (result) => {\n        if (!result.destination || result.destination.index === result.source.index) {\n            return;\n        }\n        if (result.destination.droppableId === 'droppable-productGroups' && isDraggableTabId(result.draggableId)) {\n            // handle reordering of product groups tabs\n            const specs = project.get('specs');\n            const _result: any = Array.from(specs);\n            const [removed] = _result.splice(result.source.index, 1);\n            _result.splice(result.destination.index, 0, removed);\n            // update on FE side first for UI display\n            const projectWithNewSpec: IMap<Project> = project.set('specs', fromJS(_result));\n            const projects = fromJS([projectWithNewSpec]);\n            dispatch(new GetProjectsSucceededAction(projects));\n            // update on BE side then get updated project\n            const reorderedSpecIdsArray = _result.map((spec: IMap<Spec>) => spec.get('id'));\n            dispatch(new ReorderSpecsAndGetProjectAction({\n                projectId: project.get('id'),\n                specsOrder: reorderedSpecIdsArray\n            }));\n            return;\n        }\n    };\n    return (\n        <>\n            <Modal {...props} disablePortal={true}>\n                <Paper className={classes.paper}>\n                    <div className={classes.header}>\n                        <Typography variant='h6'>{t('sortProductGroupsModal.title')}</Typography>\n                        <IconButton style={{ marginLeft: 'auto' }} onClick={() => props.onClose()}>\n                            <CloseIcon />\n                        </IconButton>\n                    </div>\n                    <Typography variant='body2'>{t('sortProductGroupsModal.subtitle')}</Typography>\n                    {isLoading ? <Typography variant='body2' style={{\n                            flex: 1,\n                            display: 'flex',\n                            justifyContent: 'center',\n                            alignItems: 'center',\n                            height: 'auto'\n                        }}>Loading...</Typography> :\n                        <DragDropContext onDragEnd={onDragEnd} >\n                            <Droppable\n                                droppableId={`droppable-productGroups`}\n                                direction={'vertical'}\n                            >\n                                {\n                                    (provided, snapshot) => {\n                                        return (\n                                            <List\n                                                ref={provided.innerRef}\n                                                {...provided.droppableProps}\n                                            >\n                                                {productGroups.map(({ id, name }, index) => {\n                                                    return (\n                                                        <Draggable\n                                                            key={`${id}`}\n                                                            draggableId={createDraggableTabId(id)}\n                                                            index={index}\n                                                            disableInteractiveElementBlocking={true}\n                                                        >\n                                                            {(provided, snapshot) => {\n                                                                const element = (\n                                                                    <ListItem ref={provided.innerRef} divider={true} {...provided.draggableProps}>\n                                                                        <ListItemIcon {...provided.dragHandleProps}>\n                                                                            <DragIndicatorIcon />\n                                                                        </ListItemIcon>\n                                                                        <ListItemText>\n                                                                            {name}\n                                                                        </ListItemText>\n                                                                    </ListItem>\n                                                                );\n                                                                const style = provided.draggableProps.style;\n                                                                if ('position' in style) {\n                                                                    if (style.position === 'fixed') {\n                                                                        return createPortal(element, _dragEl);\n                                                                    }\n                                                                }\n                                                                return element;\n                                                            }}\n                                                        </Draggable>\n                                                    );\n                                                })}\n                                                {provided.placeholder}\n                                            </List>\n                                        );\n                                    }\n                                }\n                            </Droppable>\n                        </DragDropContext>\n                    }\n                </Paper>\n            </Modal>\n        </>\n    );\n};\n\nexport default SortProductGroupsModal;","import * as React from 'react';\nimport {\n    Theme,\n    WithStyles,\n    Grid,\n    Paper,\n    Typography,\n    Link,\n    createStyles\n} from '@material-ui/core';\nimport {\n    withStyles,\n} from '@material-ui/core/styles';\nimport {\n    compose,\n} from 'redux';\nimport {\n    BaseFieldProps,\n    InjectedFormProps,\n} from 'redux-form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport i18next from 'i18next';\nimport { SPEC_PRINT_TYPE, AMPLITUDE_EVENT } from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport withSpecId, { WithSpecId } from '../../hoc/withSpecId';\nimport { Spec } from '../../models';\nimport {\n    IMap,\n} from 'ats-utils/src/Interfaces';\nimport { connect } from 'react-redux';\nimport {\n    createStructuredSelector\n} from 'reselect';\nimport {\n    makeSelectSpec\n} from '../../modules/SpecModule/selectors';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport {SUBMITTAL_FORM_NAME} from '../SubmittalBeta';\nimport FieldCheckbox, {IFieldCheckboxComponentProps} from '../FieldCheckbox';\nimport {withTranslation, WithTranslation} from 'react-i18next';\n\ninterface IBobrickCSIComponentProps {\n    // specId: number;\n    // spec: IMap<Spec>;\n}\n\ntype BobrickCSIProps = IBobrickCSIComponentProps & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithAmplitudeData & WithTranslation;\n\nexport const BOBRICK_CSI_MASTER_SPEC_FORM = 'bobrick_csi_master_spec_form';\n\nclass BobrickCSIMasterSpecBeta extends React.Component<BobrickCSIProps> {\n    //\n    // public handleLinkOnClick = (printType: string) => () => {\n    //     const {\n    //         amplitudeData,\n    //         specId,\n    //         spec\n    //     } = this.props;\n    //     const isMaster = spec && spec.get('isMaster');\n    //\n    //     amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, amplitudeData({\n    //         printType,\n    //         specId,\n    //         isMaster,\n    //     }));\n    // }\n\n    public render() {\n        const {\n            classes,\n            t\n        } = this.props;\n\n        return (\n            <Paper\n                className={classes.root}\n            >\n                <Grid\n                    className={classes.tabContent}\n                    container={true}\n                    direction='column'\n                    wrap='nowrap'\n                >\n                    <Grid\n                        container={true}\n                        direction='row'\n                        wrap='nowrap'\n                    >\n                        <FontAwesomeIcon\n                            className={classes.tabTitleIcon}\n                            icon={['far', 'file-word']}\n                        />\n                        <Typography className={classes.descriptionTitle} variant='subtitle1' color='inherit'>{i18next.t('translations:BobrickCSIPrint.header')}</Typography>\n                    </Grid>\n                    <Grid\n                        container={true}\n                        className={classes.templateDescription}\n                        direction={'column'}\n                    >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='traditionalSeriesPartition'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('BobrickCSIPrint.clickToDownload_traditionalSeries'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                    defaultValue: true,\n                                    color: 'primary',\n                                },\n                            }}\n                        />\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='evolvePartition'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('BobrickCSIPrint.clickToDownload_evolve'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                    defaultValue: true,\n                                    color: 'primary',\n                                },\n                            }}\n                        />\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='privadaPartition'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('BobrickCSIPrint.clickToDownload_privada'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                    defaultValue: true,\n                                    color: 'primary',\n                                },\n                            }}\n                        />\n                    </Grid>\n                </Grid>\n            </Paper>\n        );\n    }\n}\n\nconst styles = (theme: Theme) => ({\n    root: {\n        flexGrow: 1,\n        width: '100%',\n        backgroundColor: theme.palette.background.paper,\n    },\n    tabContent: {\n        padding: '40px',\n    },\n    tabTitleIcon: {\n        fontSize: 24,\n        paddingTop: 3,\n    },\n    descriptionTitle: {\n        paddingLeft: 10\n    },\n    templateDescription: {\n        paddingTop: 20,\n    },\n    link: {\n        paddingBottom: theme.spacing(2)\n    }\n});\n\n\nconst mapStateToProps = (originalState: any, originalOwnProps: any) => {\n    const specId = originalOwnProps.specId;\n\n    return createStructuredSelector({\n        spec: makeSelectSpec({specId}),\n    })(originalState);\n};\n\nexport default compose<React.ComponentClass<IBobrickCSIComponentProps>>(\n    withSpecId({withSpec: true}),\n    withStyles(styles),\n    withAmplitudeData,\n    withTranslation('translations'),\n    reduxForm({\n        form: BOBRICK_CSI_MASTER_SPEC_FORM,\n        destroyOnUnmount: true,\n        enableReinitialize: true,\n    }),\n    connect(mapStateToProps),\n)(BobrickCSIMasterSpecBeta);\n","import * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Grid,\n  Paper,\n  Typography,\n  Link\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  BaseFieldProps,\n  InjectedFormProps,\n} from 'redux-form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport i18next from 'i18next';\nimport { SPEC_PRINT_TYPE, AMPLITUDE_EVENT } from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport withSpecId, { WithSpecId } from '../../hoc/withSpecId';\nimport { Spec } from '../../models';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { connect } from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectSpec\n} from '../../modules/SpecModule/selectors';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport {BOBRICK_CSI_MASTER_SPEC_FORM} from '../BobrickCSIMasterSpecBeta';\nimport FieldCheckbox, {IFieldCheckboxComponentProps} from '../FieldCheckbox';\nimport {WithTranslation, withTranslation} from 'react-i18next';\ninterface IBobrickPlanningGuideComponentProps {\n  // specId: number;\n  // spec: IMap<Spec>;\n}\n\ntype BobrickPlanningGuideProps = IBobrickPlanningGuideComponentProps & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithAmplitudeData & WithTranslation;\n\nexport const BOBRICK_PLANNING_GUIDE_FORM = 'bobrick_planning_guide_form';\nclass BobrickPlanningGuideBeta extends React.Component<BobrickPlanningGuideProps> {\n  //\n  // public handleLinkOnClick = (printType: string) => () => {\n  //   const {\n  //     amplitudeData,\n  //     specId,\n  //     spec\n  //   } = this.props;\n  //   const isMaster = spec && spec.get('isMaster');\n  //\n  //   amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, amplitudeData({\n  //     printType,\n  //     specId,\n  //     isMaster,\n  //   }));\n  // }\n\n  public render() {\n    const {\n      classes,\n        t\n    } = this.props;\n\n    return (\n      <Paper\n        className={classes.root}\n      >\n        <Grid\n          className={classes.tabContent}\n          container={true}\n          direction='column'\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n          >\n            <img\n              src={pdfIcon}\n              width='25px'\n            />\n            <Typography className={classes.descriptionTitle} variant='subtitle1' color='inherit'>{t('BobrickPlanningGuide.planningGuide')}</Typography>\n          </Grid>\n          <Grid\n            className={classes.templateDescription}\n          >\n            <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='planningGuide'\n                component={FieldCheckbox}\n                props={{\n                  label: t('BobrickPlanningGuide.planningGuideForAccRestrooms'),\n                  variant: 'single',\n                  helperText: false,\n                  inputProps: {\n                    defaultValue: true,\n                    color: 'primary',\n                  },\n                }}\n            />\n          </Grid>\n        </Grid>\n      </Paper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    flexGrow: 1,\n    width: '100%',\n    backgroundColor: theme.palette.background.paper,\n  },\n  tabContent: {\n    padding: '40px',\n  },\n  tabTitleIcon: {\n    fontSize: 24,\n    paddingTop: 3,\n  },\n  descriptionTitle: {\n    paddingLeft: 10\n  },\n  templateDescription: {\n    paddingTop: 20,\n  },\n  link: {\n    paddingBottom: theme.spacing(2)\n  }\n});\n\n\nconst mapStateToProps = (originalState: any, originalOwnProps: any) => {\n  const specId = originalOwnProps.specId;\n\n  return createStructuredSelector({\n    spec: makeSelectSpec({specId}),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IBobrickPlanningGuideComponentProps>>(\n  withSpecId({withSpec: true}),\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n    reduxForm({\n      form: BOBRICK_PLANNING_GUIDE_FORM,\n      destroyOnUnmount: true,\n      enableReinitialize: true,\n    }),\n  connect(mapStateToProps),\n)(BobrickPlanningGuideBeta);\n","var isEvent = function isEvent(candidate) {\n  return !!(candidate && candidate.stopPropagation && candidate.preventDefault);\n};\n\nexport default isEvent;","var defaultShouldValidate = function defaultShouldValidate(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nexport default defaultShouldValidate;","export default __webpack_public_path__ + \"static/media/projectGreen.1edbfc54.svg\";","import React from 'react';\nimport {makeStyles} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {useTranslation} from 'react-i18next';\nimport Typography from '@material-ui/core/Typography';\nimport { CreationMethod } from '../constants';\nimport { AtsSvgEdit, AtsSvgUpload } from '../../../components/AtsSvg';\nimport { GetDefaultProjectVisibilityAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectDefaultProjectVisibility } from '../../../modules/AccountModule/selectors';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  container: {\n    display: 'flex',\n    justifyContent: 'center',\n    padding: theme.spacing(4),\n    marginTop: theme.spacing(4),\n  },\n  card: {\n    display: 'flex',\n    margin: theme.spacing(0, 2),\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: 280,\n    padding: theme.spacing(4, 3),\n    border: `1px solid ${theme.palette.divider}`,\n    borderRadius: theme.spacing(1),\n    cursor: 'pointer',\n    transition: 'box-shadow 0.2s ease, border-color 0.2s ease',\n    '&:hover': {\n      borderColor: theme.palette.primary.main,\n      '& svg path': {\n        fill: theme.palette.primary.main,\n      },\n      '& svg rect': {\n        fill: theme.palette.primary[50],\n      },\n    },\n  },\n  iconWrapper: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    borderRadius: '50%',\n    backgroundColor: theme.palette.grey[200],\n    marginBottom: theme.spacing(2),\n  },\n  title: {\n    fontWeight: 600,\n    marginBottom: theme.spacing(1),\n    textAlign: 'center',\n  },\n  description: {\n    color: theme.palette.text.secondary,\n    textAlign: 'center',\n  },\n}));\n\ninterface IProps {\n  setCreationMethod: (method: CreationMethod) => void;\n}\nconst CreationMethodSelector: React.FC<IProps> = ({\n  setCreationMethod,\n}) => {\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const hasFetchedDefaultProjectVisibility = useSelector(makeSelectDefaultProjectVisibility());\n\n  React.useEffect(() => {\n    if (!hasFetchedDefaultProjectVisibility) {\n      dispatch(new GetDefaultProjectVisibilityAction());\n    }\n  }, [hasFetchedDefaultProjectVisibility, dispatch]);\n\n  return (\n    <div className={classes.container}>\n      <div\n        className={classes.card}\n        onClick={() => setCreationMethod(CreationMethod.MANUAL)}\n      >\n        <div className={classes.iconWrapper}>\n          <AtsSvgEdit />\n        </div>\n        <Typography variant='subtitle1' className={classes.title}>\n          {t('createNewProject.createProjectManually')}\n        </Typography>\n        <Typography variant='body2' className={classes.description}>\n          {t('createNewProject.createProjectManuallyDescription')}\n        </Typography>\n      </div>\n      <div\n        className={classes.card}\n        onClick={() => setCreationMethod(CreationMethod.AI)}\n      >\n        <div className={classes.iconWrapper}>\n          <AtsSvgUpload />\n        </div>\n        <Typography variant='subtitle1' className={classes.title}>\n          {t('createNewProject.uploadDocuments')}\n        </Typography>\n        <Typography variant='body2' className={classes.description}>\n          {t('createNewProject.uploadDocumentsDescription')}\n        </Typography>\n      </div>\n    </div>\n  );\n};\n\nexport default CreationMethodSelector;","import React from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  Typography,\n  makeStyles,\n  createStyles,\n  Theme,\n} from '@material-ui/core';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport { red } from '@material-ui/core/colors';\nimport moment from 'moment';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { makeSelectAutoTrackProjects, makeSelectDefaultProjectVisibility, makeSelectLoggedInUserData } from '../../../modules/AccountModule/selectors';\nimport { makeSelectUserId } from '../../../modules/AtsModule/selectors';\nimport { IProject } from './types';\nimport { ProjectVisibility } from '../../../modules/AccountModule/constants';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { CreateAnalyticsEventsAction } from '../../../modules/PrintModule/actions';\nimport { ATS_EVENT } from '../../../constants';\nimport { User } from '../../../models';\nimport { Map } from 'immutable';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  content: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    // padding: theme.spacing(4),\n    minWidth: 360,\n  },\n  statusIcon: {\n    fontSize: 48,\n    marginBottom: theme.spacing(2),\n  },\n  errorIcon: {\n    color: red[500],\n  },\n  failedSection: {\n    alignSelf: 'flex-start',\n    width: '100%',\n  },\n  failedList: {\n    marginTop: theme.spacing(0.75),\n  },\n  actions: {\n    justifyContent: 'center',\n    paddingBottom: theme.spacing(3),\n  },\n}));\n\ninterface IProps {\n  open: boolean;\n  projectsToCreate: IProject[];\n  onComplete: (successIds: string[]) => void;\n  onClose: () => void;\n  onDone: () => void;\n}\n\nconst buildCreateProjectBody = (project: IProject, defaultProjectVisibility: ProjectVisibility, defaultAssignedTo: User[]): any => {\n  const d = project.extractionData;\n  if (!d) { return {}; }\n\n  const keyContacts: any[] = [];\n  [d.architect, d.engineer].forEach((contact) => {\n    if (!contact) { return; }\n    const contactObj = typeof contact.toJS === 'function' ? contact.toJS() : contact;\n    const contactId = contactObj.id || contact.get?.('id');\n    const firstName = contactObj.firstName || contact.get?.('firstName') || '';\n    const lastName = contactObj.lastName || contact.get?.('lastName') || '';\n    const email = contactObj.email || contact.get?.('email') || '';\n    const organization = contactObj.organization || contact.get?.('organization') || '';\n    keyContacts.push({\n      contact: contactObj,\n      value: [firstName, lastName, email, organization].filter(Boolean).join(' '),\n      id: contactId,\n    });\n  });\n\n  return {\n    name: project.name,\n    address: (d.address)?.trim() || '',\n    bidDate: d.bidDate ? moment(d.bidDate).utc().format('YYYY-MM-DD HH:mm:ss') : '',\n    location: {\n      country: d.country?.id ? { id: String(d.country.id), value: d.country.value } : undefined,\n      province: d.stateProvince?.id ? { id: String(d.stateProvince.id), value: d.stateProvince.value } : undefined,\n      city: d.city?.id ? { id: String(d.city.id), value: d.city.value } : undefined,\n    },\n    building: {\n      buildingClasses: d.buildingClass ? [{\n        id: d.buildingClass.id,\n        label: d.buildingClass.value,\n        value: d.buildingClass.value,\n        buildingTypes: d.buildingType ? [{\n          id: d.buildingType.id,\n          label: d.buildingType.value,\n          value: d.buildingType.value,\n        }] : [],\n      }] : [],\n    },\n    keyContacts,\n    visibility: defaultProjectVisibility,\n    assignedTo: defaultAssignedTo,\n    source: 'documents',\n    // Back-link the extraction to the project being created: project-service\n    // reads `extractionId` and calls ms-ai `setProjectId`, populating\n    // `project_extractions.project_id` for source='documents' (previously left\n    // NULL). Undefined when there's no extraction → server-side no-op.\n    extractionId: project.extractionId,\n  };\n};\n\nconst buildFileList = (project: IProject): any[] => {\n  return project.files\n    .filter(f => f.uploadedFile?.id)\n    .map(f => ({\n      fileId: f.uploadedFile!.id,\n      permission: 'protected',\n      tag: f.documentType || 'misc',\n    }));\n};\n\nconst CreationProgressModal: React.FC<IProps> = ({\n  open,\n  projectsToCreate,\n  onComplete,\n  onClose,\n  onDone,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const atsApi = useAtsApi();\n  const dispatch = useDispatch();\n  const amplitudeData = useAmplitudeData();\n  const autoTrackProject = useSelector(makeSelectAutoTrackProjects());\n  const typeId = useSelector(makeSelectUserId());\n  const defaultProjectVisibility = useSelector(makeSelectDefaultProjectVisibility());\n  const loggedInUserData = useSelector(makeSelectLoggedInUserData());\n  const hasFetchedDefaultProjectVisibility = defaultProjectVisibility != null;\n\n  const [status, setStatus] = React.useState<'creating' | 'done'>('creating');\n  const [createdCount, setCreatedCount] = React.useState(0);\n  const [failedProjects, setFailedProjects] = React.useState<Array<{ name: string; index: number }>>([]);\n  const hasStarted = React.useRef(false);\n\n  const trackAnalytics = ({\n    extractionId,\n    projectData,\n    architect = null,\n    engineer = null,\n    sourceFileId,\n    tag,\n    projectId,\n  }: {\n    extractionId: number;\n    projectData: any;\n    architect?: any;\n    engineer?: any;\n    sourceFileId?: string;\n    tag?: string;\n    projectId?: string;\n  }) => {\n    const trackingData = {\n      eventType: ATS_EVENT.projectCreatedFromDocuments,\n      defaultData: amplitudeData(),\n      customData: {\n        extractionId,\n        ...projectData,\n        architect: architect ? { ...architect } : null,\n        engineer: engineer ? { ...engineer } : null,\n        sourceFileId,\n        tag,\n        projectId,\n      },\n    };\n\n    dispatch(new CreateAnalyticsEventsAction({\n      trackingData\n    }));\n  };\n\n  React.useEffect(() => {\n    if (!open || projectsToCreate.length === 0 || hasStarted.current) { return; }\n    hasStarted.current = true;\n    const defaultAssignedTo = loggedInUserData ? [loggedInUserData.toJS()] : [];\n\n    const createAll = async () => {\n      const successIds: string[] = [];\n      const failed: Array<{ name: string; index: number }> = [];\n      let created = 0;\n\n      const createSingleProject = async (project: IProject) => {\n        const body = buildCreateProjectBody(project, defaultProjectVisibility, defaultAssignedTo);\n        const res = await (atsApi.callApi({\n          service: 'project',\n          endpoint: 'createProject',\n          body,\n        }) as Promise<any>);\n\n        const newProjectId = res?.payload?.project?.project?.[0]?.id;\n        if (!newProjectId) { throw new Error('No project ID in response'); }\n\n        if (project.extractionId) {\n          const sourceFile = project.files.find(f => f.id === project.sourceFileId);\n          const architect = project.extractionData?.architect;\n          const engineer = project.extractionData?.engineer;\n\n          trackAnalytics({\n            extractionId: project.extractionId,\n            projectData: body,\n            architect: Map.isMap(architect) ? architect.toJS() : architect,\n            engineer: Map.isMap(engineer) ? engineer.toJS() : engineer,\n            sourceFileId: sourceFile?.uploadedFile?.id,\n            tag: sourceFile?.documentType,\n            projectId: newProjectId,\n          });\n        }\n\n        const promises: Array<Promise<any>> = [];\n\n        if (autoTrackProject) {\n          promises.push(\n            (atsApi.callApi({\n              service: 'project',\n              endpoint: 'trackProject',\n              body: { projectId: newProjectId, typeId, type: 'user' },\n            }) as Promise<any>)\n          );\n        }\n\n        const fileList = buildFileList(project);\n        if (fileList.length > 0) {\n          promises.push(\n            (atsApi.callApi(newProjectId, {\n              service: 'project',\n              endpoint: 'addProjectFile',\n              body: { files: { main: fileList } },\n            }) as Promise<any>)\n          );\n        }\n\n        await Promise.allSettled(promises);\n      };\n\n      const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n      const results = await Promise.allSettled(\n        projectsToCreate.map((project, index) => delay(index * 100).then(() => createSingleProject(project)))\n      );\n\n      results.forEach((result, index) => {\n        const project = projectsToCreate[index];\n        if (result.status === 'fulfilled') {\n          successIds.push(project.id);\n          created++;\n        } else {\n          console.error('Failed to create project:', project.name, result.reason); // tslint:disable-line\n          failed.push({ name: project.name, index: index + 1 });\n        }\n      });\n\n      setCreatedCount(created);\n      setFailedProjects(failed);\n      setStatus('done');\n      onComplete(successIds);\n    };\n\n    createAll();\n  }, [open, projectsToCreate]);\n\n  // Reset state when modal closes\n  React.useEffect(() => {\n    if (!open) {\n      setStatus('creating');\n      setCreatedCount(0);\n      setFailedProjects([]);\n      hasStarted.current = false;\n    }\n  }, [open]);\n\n  const hasFailures = failedProjects.length > 0;\n\n  if (!hasFetchedDefaultProjectVisibility) {\n    return (\n      <Dialog open={open} maxWidth='sm'>\n        <DialogContent className={classes.content}>\n          <ErrorIcon className={`${classes.statusIcon} ${classes.errorIcon}`} />\n          <Typography variant='body2' color='textPrimary' style={{ marginTop: 8 }}>\n            {t('createNewProject.aiPath.visibilitySettingsError')}\n          </Typography>\n        </DialogContent>\n        <DialogActions className={classes.actions}>\n          <Button variant='outlined' color='primary' onClick={onClose} style={{ borderRadius: 20 }}>\n            {t('formButtons.close')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    );\n  }\n\n  return (\n    <Dialog open={open} maxWidth='sm' disableBackdropClick={true} disableEscapeKeyDown={true}>\n      <DialogContent className={classes.content}>\n        {status === 'creating' && (\n          <>\n            <CircularProgress size={48} />\n            <Typography variant='h6' color='textPrimary' style={{ marginTop: 16, marginBottom: 16 }}>\n              {t('createNewProject.aiPath.creatingProjects')}\n            </Typography>\n          </>\n        )}\n        {status === 'done' && !hasFailures && (\n          <Typography variant='body2' color='textPrimary' style={{ marginTop: 8 }}>\n            {t('createNewProject.aiPath.projectsCreated', { count: createdCount })}\n          </Typography>\n        )}\n        {status === 'done' && hasFailures && (\n          <>\n            <ErrorIcon className={`${classes.statusIcon} ${classes.errorIcon}`} />\n            {createdCount > 0 && (\n              <Typography variant='body2' color='textPrimary' style={{ marginBottom: 32 }}>\n                {t('createNewProject.aiPath.projectsCreated', { count: createdCount })}\n              </Typography>\n            )}\n            <div className={classes.failedSection}>\n              <Typography variant='body2' color='textPrimary'>\n                {t('createNewProject.aiPath.projectsFailed')}\n              </Typography>\n              <div className={classes.failedList}>\n                {failedProjects.map(({ name, index }) => (\n                  <div key={index} style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n                    <CloseIcon color='error' style={{ fontSize: 16 }} />\n                    <Typography variant='body2' color='textPrimary' component='span' style={{ whiteSpace: 'nowrap' }}>\n                      {t('createNewProject.aiPath.validationProjectLabel', { index })}{': '}\n                    </Typography>\n                    <Typography variant='body2' color='primary' component='span'>\n                      {name}\n                    </Typography>\n                  </div>\n                ))}\n              </div>\n            </div>\n          </>\n        )}\n      </DialogContent>\n      {status === 'done' && (\n        <DialogActions className={classes.actions}>\n          {hasFailures && (\n            <Button variant='outlined' color='primary' onClick={onClose}>\n              {t('createNewProject.aiPath.validationReturn')}\n            </Button>\n          )}\n          <Button variant='outlined' color='primary' onClick={onDone} style={{ borderRadius: 20 }}>\n            {t('createNewProject.aiPath.done')}\n          </Button>\n        </DialogActions>\n      )}\n    </Dialog>\n  );\n};\n\nexport default CreationProgressModal;\n","import moment from 'moment';\nimport { IProject, IProjectFile, IExtractionData } from './types';\nimport { IFileMetaObj } from '../../../modules/FileModule/saga';\n\nlet fileIdCounter = 0;\nexport const generateFileId = () => `file-${++fileIdCounter}-${Date.now()}`;\n\nlet projectIdCounter = 0;\nexport const generateProjectId = () => `project-${++projectIdCounter}-${Date.now()}`;\n\nexport const createProject = (name: string): IProject => ({\n  id: generateProjectId(),\n  name,\n  files: [],\n  sourceFileId: null,\n  highlightedFileLocalId: null,\n  extractionId: null,\n  extractionStatus: 'idle',\n  extractionProgress: 0,\n  extractionError: null,\n  selected: false,\n  extractionData: null,\n  lastExtractedSourceUploadedFileId: null,\n  highlightedFileServerId: null,\n  highlightedFileName: null,\n  extractionCoordinates: null,\n});\n\nexport const buildHighlightedFile = (highlightedFileId: string, fileName: string): IProjectFile => ({\n  id: generateFileId(),\n  file: new File([], fileName),\n  uploadedFile: { id: highlightedFileId, mediaType: 'application/pdf', origFileName: fileName, path: '', size: '', uploaded: '', userId: '' } as IFileMetaObj,\n  progress: 100,\n  error: null,\n  documentType: 'misc',\n  isUploading: false,\n});\n\nexport const mapExtractionResponse = (raw: any): IExtractionData | null => {\n  if (!raw) { return null; }\n  const buildingClass = raw?.building?.buildingClasses?.[0];\n  const buildingType = raw?.building?.buildingClasses?.[0]?.buildingTypes?.[0];\n  const country = raw?.location?.country;\n  const province = raw?.location?.province;\n  const city = raw?.location?.city;\n  const engineer = raw?.engineer;\n  const architect = raw?.architect;\n\n  return {\n    projectName: raw.projectName || '',\n    address: raw.address || '',\n    city: city?.id ? { ...city, id: String(city.id) } : null,\n    stateProvince: province?.id ? { ...province, id: String(province.id) } : null,\n    country: country?.id ? { ...country, id: String(country.id) } : null,\n    buildingClass: buildingClass?.id ? buildingClass : null,\n    buildingType: buildingType?.id ? buildingType : null,\n    architect: architect?.id ? architect : null,\n    engineer: engineer?.id ? engineer : null,\n    rawArchitect: raw?.rawArchitect || null,\n    rawEngineer: raw?.rawEngineer || null,\n    bidDate: raw.bidDate || '',\n  };\n};\n\nexport const isProjectValid = (project: IProject): boolean => {\n  const d = project.extractionData;\n  if (!d) { return false; }\n  const buildingTypeRequired = String(d.buildingClass?.id) !== '7';\n  return !!(\n    project.name?.trim() &&\n    d.city?.value &&\n    d.stateProvince?.value &&\n    d.country?.value &&\n    d.buildingClass &&\n    (!buildingTypeRequired || d.buildingType) &&\n    d.bidDate &&\n    moment(d.bidDate, 'YYYY-MM-DD', true).isValid()\n  );\n};\n","import React from 'react';\nimport moment from 'moment';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectAppId, makeSelectEnv } from '../../../modules/AtsModule/selectors';\nimport AiServiceApi from '../../../modules/MsAiService/AiService';\nimport { IProject } from './types';\nimport { buildHighlightedFile, mapExtractionResponse } from './utils';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { ATS_EVENT } from '../../../constants';\nimport { CreateAnalyticsEventsAction } from '../../../modules/PrintModule/actions';\n\ntype SetProjects = React.Dispatch<React.SetStateAction<IProject[]>>;\n\nconst useExtraction = (setProjects: SetProjects) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const amplitudeData = useAmplitudeData();\n  const pollTimers = React.useRef<Record<string, NodeJS.Timeout>>({});\n\n  const clearAllPolling = React.useCallback(() => {\n    Object.values(pollTimers.current).forEach(timer => clearInterval(timer));\n    pollTimers.current = {};\n  }, []);\n\n  // Cleanup on unmount\n  React.useEffect(() => {\n    return () => clearAllPolling();\n  }, []);\n\n  const trackAnalytics = ({\n    extractionId,\n    sourceFileId,\n    tag,\n    duration,\n  }: {\n    extractionId: number;\n    sourceFileId: string;\n    tag: string;\n    duration: number;\n  }) => {\n    const trackingData = {\n      eventType: ATS_EVENT.projectExtractedFromDocuments,\n      defaultData: amplitudeData(),\n      customData: {\n        extractionId,\n        sourceFileId,\n        tag,\n        duration,\n      },\n    };\n    dispatch(new CreateAnalyticsEventsAction({\n      trackingData\n    }));\n  };\n\n  const clearProjectPoll = (projectId: string) => {\n    if (pollTimers.current[projectId]) {\n      clearInterval(pollTimers.current[projectId]);\n      delete pollTimers.current[projectId];\n    }\n  };\n\n  const setProjectFailed = (projectId: string, error?: string) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      return {\n        ...p,\n        extractionStatus: 'failed' as const,\n        extractionError: error || t('createNewProject.aiPath.extractionFailed'),\n      };\n    }));\n  };\n\n  const handleExtractionCompleted = (projectId: string, data: any) => {\n    const projectData = data?.data;\n    const extractionData = mapExtractionResponse(projectData);\n    if (extractionData && data?.completedAt) {\n      extractionData.bidDate = moment.utc(data.completedAt).local().add(7, 'days').format('YYYY-MM-DD');\n    }\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      const sourceFile = p.files.find(f => f.id === p.sourceFileId);\n      const hFileId = data.highlightedFileId;\n      const hFileName = data.fileName || sourceFile?.file?.name || t('createNewProject.aiPath.defaultSourceFileName');\n      const hFile = hFileId ? buildHighlightedFile(hFileId, hFileName) : null;\n      return {\n        ...p,\n        files: hFile ? [hFile, ...p.files] : p.files,\n        highlightedFileLocalId: hFile?.id || null,\n        extractionStatus: 'completed' as const,\n        extractionProgress: 100,\n        extractionData,\n        name: projectData?.projectName || p.name,\n        selected: true,\n        lastExtractedSourceUploadedFileId: sourceFile?.uploadedFile?.id || null,\n        highlightedFileServerId: hFileId || null,\n        highlightedFileName: hFileName,\n        extractionCoordinates: data.coordinates || null,\n      };\n    }));\n  };\n\n  const pollExtraction = (projectId: string, extractionId: number, sourceFileId: string, tag: string) => {\n    const poll = async () => {\n      try {\n        const response = await AiServiceApi.getProjectExtractionById(env, appId, extractionId);\n        const data = response?.payload?.msai;\n        if (!data) {\n          clearProjectPoll(projectId);\n          setProjectFailed(projectId);\n          return;\n        }\n\n        const status = data.status;\n        if (status === 'pending' || status === 'processing') {\n          setProjects(prev => prev.map(p => {\n            if (p.id !== projectId) { return p; }\n            return { ...p, extractionProgress: data.progress || p.extractionProgress };\n          }));\n        } else if (status === 'completed') {\n          clearProjectPoll(projectId);\n          handleExtractionCompleted(projectId, data);\n          trackAnalytics({ extractionId, sourceFileId, tag, duration: moment(data.completedAt).diff(moment(data.createdAt)) });\n        } else {\n          clearProjectPoll(projectId);\n          setProjectFailed(projectId, data.error);\n          trackAnalytics({ extractionId, sourceFileId, tag, duration: moment(data.completedAt).diff(moment(data.createdAt)) });\n        }\n      } catch {\n        clearProjectPoll(projectId);\n        setProjectFailed(projectId);\n      }\n    };\n\n    pollTimers.current[projectId] = setInterval(poll, 3000);\n  };\n\n  const startExtraction = async (project: IProject) => {\n    const sourceFile = project.files.find(f => f.id === project.sourceFileId);\n    if (!sourceFile?.uploadedFile) { return; }\n\n    const fileId = sourceFile.uploadedFile.id;\n\n    setProjects(prev => prev.map(p => {\n      if (p.id !== project.id) { return p; }\n      return { ...p, extractionStatus: 'pending' as const, extractionProgress: 0, extractionError: null };\n    }));\n\n    try {\n      const response = await AiServiceApi.createProjectExtraction(env, appId, fileId, sourceFile.documentType);\n\n      if (!response?.success) {\n        setProjectFailed(project.id);\n        return;\n      }\n\n      const data = response?.data?.payload?.msai;\n\n      setProjects(prev => prev.map(p => {\n        if (p.id !== project.id) { return p; }\n        return { ...p, extractionId: data.id };\n      }));\n\n      if (data.status === 'pending') {\n        pollExtraction(project.id, data.id, fileId, sourceFile.documentType);\n      } else if (data.status === 'completed') {\n        handleExtractionCompleted(project.id, data);\n        trackAnalytics({ extractionId: data.id, sourceFileId: fileId, tag: sourceFile.documentType, duration: moment(data.completedAt).diff(moment(data.createdAt)) });\n      } else {\n        setProjectFailed(project.id, data.error);\n        trackAnalytics({ extractionId: data.id, sourceFileId: fileId, tag: sourceFile.documentType, duration: moment(data.completedAt).diff(moment(data.createdAt)) });\n      }\n    } catch {\n      setProjectFailed(project.id);\n    }\n  };\n\n  return { startExtraction, clearAllPolling };\n};\n\nexport default useExtraction;\n","import React from 'react';\nimport { useDropzone, FileRejection } from 'react-dropzone';\nimport { Grid, Link, Typography, makeStyles, createStyles, Theme } from '@material-ui/core';\nimport { grey } from '@material-ui/core/colors';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { useTranslation } from 'react-i18next';\nimport { MAX_FILE_SIZE_200MB, BYTES_PER_MB } from '../../../constants';\n\nconst MAX_PROJECT_FILES = 50;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  root: {\n    background: grey[100],\n    border: `${theme.spacing(0.25)}px dashed ${grey[300]}`,\n    padding: theme.spacing(3),\n    cursor: 'pointer',\n    minHeight: 170,\n    transition: 'border-color 0.2s ease',\n    '&:hover': {\n      borderColor: theme.palette.primary.main,\n    },\n  },\n  browseFile: {\n    textTransform: 'uppercase',\n    cursor: 'pointer',\n  },\n  dropText: {\n    color: 'rgba(0, 0, 0, 0.87)',\n  },\n  errorText: {\n    marginTop: theme.spacing(1),\n    maxWidth: '100%',\n    wordBreak: 'break-word',\n  },\n}));\n\ninterface IProps {\n  currentFileCount: number;\n  existingFileNames: string[];\n  onFilesAccepted: (files: File[]) => void;\n}\n\nconst ProjectCardDropzone: React.FC<IProps> = ({\n  currentFileCount,\n  existingFileNames,\n  onFilesAccepted,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const [error, setError] = React.useState<string | null>(null);\n\n  const onDrop = React.useCallback((acceptedFiles: File[], fileRejections: FileRejection[]) => {\n    setError(null);\n\n    const oversized = fileRejections.filter(r => r.errors.some(e => e.code === 'file-too-large'));\n    if (oversized.length > 0) {\n      setError(t('attachmentDrawer.sizeLimitError', { size: MAX_FILE_SIZE_200MB / BYTES_PER_MB }));\n      return;\n    }\n\n    if (acceptedFiles.length + currentFileCount > MAX_PROJECT_FILES) {\n      setError(t('attachmentDrawer.maxFile') + ' ' + MAX_PROJECT_FILES);\n      return;\n    }\n  }, [currentFileCount, t]);\n\n  const onDropAccepted = React.useCallback((acceptedFiles: File[]) => {\n    if (acceptedFiles.length + currentFileCount > MAX_PROJECT_FILES) {\n      return;\n    }\n\n    const duplicates = acceptedFiles.filter(f => existingFileNames.includes(f.name));\n    if (duplicates.length > 0) {\n      setError(t('createNewProject.aiPath.duplicateFileError'));\n      return;\n    }\n\n    const oversizedFiles = acceptedFiles.filter(f => f.size > MAX_FILE_SIZE_200MB);\n    if (oversizedFiles.length > 0) {\n      setError(t('attachmentDrawer.sizeLimitError', { size: MAX_FILE_SIZE_200MB / BYTES_PER_MB }));\n      return;\n    }\n\n    onFilesAccepted(acceptedFiles);\n  }, [currentFileCount, existingFileNames, onFilesAccepted, t]);\n\n  const { getRootProps, getInputProps, isDragActive } = useDropzone({\n    onDrop,\n    onDropAccepted,\n    maxSize: MAX_FILE_SIZE_200MB,\n  });\n\n  return (\n    <div>\n      <Grid\n        className={classes.root}\n        container={true}\n        alignItems='center'\n        justify='center'\n        direction='column'\n        style={{\n          borderColor: isDragActive ? '#ef6c00' : undefined,\n        }}\n        {...getRootProps()}\n      >\n        <input {...getInputProps()} />\n        <Grid item={true}>\n          <CloudUploadIcon fontSize='large' color='disabled' />\n        </Grid>\n        <Grid item={true}>\n          <Typography className={classes.dropText}>\n            {t('uploadPhoto.dropFile')}\n          </Typography>\n        </Grid>\n        <Grid item={true}>\n          <Link\n            underline='none'\n            color='primary'\n            className={classes.browseFile}\n            component='span'\n          >\n            {t('uploadPhoto.browseFile')}\n          </Link>\n        </Grid>\n      </Grid>\n      {error && (\n        <Typography color='error' variant='caption' className={classes.errorText}>\n          {error}\n        </Typography>\n      )}\n    </div>\n  );\n};\n\nexport default ProjectCardDropzone;\n","import React from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\ninterface IProps {\n  id: string;\n  children: React.ReactNode;\n}\n\nconst SortableFileItem: React.FC<IProps> = ({ id, children }) => {\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    transform,\n    transition,\n    isDragging,\n  } = useSortable({ id });\n\n  const style: React.CSSProperties = {\n    transform: CSS.Transform.toString(transform),\n    transition,\n    opacity: isDragging ? 0.4 : 1,\n    cursor: 'grab',\n  };\n\n  return (\n    <div ref={setNodeRef} style={style} {...attributes} {...listeners}>\n      {children}\n    </div>\n  );\n};\n\nexport default SortableFileItem;\n","import React from 'react';\nimport { FormControl, FormHelperText, MenuItem, Select, makeStyles, createStyles, Theme } from '@material-ui/core';\nimport { grey } from '@material-ui/core/colors';\nimport { useTranslation } from 'react-i18next';\nimport { DocumentType } from './types';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  tagSelect: {\n    fontSize: 12,\n    minWidth: 120,\n    backgroundColor: theme.palette.secondary[50],\n  },\n  tagSelectInner: {\n    paddingLeft: 8,\n    paddingBottom: 3,\n  },\n}));\n\ninterface IProps {\n  value: DocumentType;\n  onChange: (type: DocumentType) => void;\n  error?: boolean;\n  errorText?: string;\n}\n\nconst DocumentTypeSelect: React.FC<IProps> = ({ value, onChange, error, errorText }) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  return (\n    <FormControl size='small' error={error}>\n      <Select\n        className={classes.tagSelect}\n        classes={{ select: classes.tagSelectInner }}\n        value={value}\n        onChange={(e) => onChange(e.target.value as DocumentType)}\n        onClick={(e) => e.stopPropagation()}\n        displayEmpty={true}\n        renderValue={(selected) => {\n          if (!selected) {\n            return <span style={{ color: grey[500] }}>{t('attachmentDrawer.documentTypePlaceholder')}</span>;\n          }\n          const labels = {\n            drawing: t('attachmentDrawer.drawingSchedule'),\n            spec: t('attachmentDrawer.spec'),\n            misc: t('attachmentDrawer.miscellaneous'),\n          };\n          return labels[selected as string] || selected;\n        }}\n      >\n        <MenuItem value='drawing'>{t('attachmentDrawer.drawingSchedule')}</MenuItem>\n        <MenuItem value='spec'>{t('attachmentDrawer.spec')}</MenuItem>\n        <MenuItem value='misc'>{t('attachmentDrawer.miscellaneous')}</MenuItem>\n      </Select>\n      {errorText && <FormHelperText>{errorText}</FormHelperText>}\n    </FormControl>\n  );\n};\n\nexport default DocumentTypeSelect;\n","import { makeStyles, createStyles, Theme } from '@material-ui/core';\nimport { grey, green, red } from '@material-ui/core/colors';\n\nconst useProjectCardStyles = makeStyles((theme: Theme) => createStyles({\n  card: {\n    border: `1px solid ${grey[300]}`,\n    borderRadius: theme.spacing(1),\n    padding: theme.spacing(1.5),\n    position: 'relative',\n  },\n  cardError: {\n    border: `1px solid ${red[200]}`,\n    borderRadius: theme.spacing(1),\n    padding: theme.spacing(1.5),\n    position: 'relative',\n  },\n  projectTitle: {\n    fontWeight: 600,\n  },\n  fileRow: {\n    display: 'flex',\n    alignItems: 'center',\n    '& > *:not(:last-child)': {\n      marginRight: theme.spacing(1),\n    },\n  },\n  fileName: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  fileSize: {\n    whiteSpace: 'nowrap',\n    color: grey[600],\n  },\n  sourceLabel: {\n    whiteSpace: 'nowrap',\n    fontSize: 12,\n  },\n  fileInfo: {\n    display: 'flex',\n    alignItems: 'center',\n    flex: 1,\n    minWidth: 0,\n    '& > *:not(:last-child)': {\n      marginRight: theme.spacing(1),\n    },\n  },\n  fileActions: {\n    display: 'flex',\n    alignItems: 'center',\n    flexShrink: 0,\n    '& > *:not(:last-child)': {\n      marginRight: theme.spacing(0.5),\n    },\n  },\n  fileItem: {\n    backgroundColor: grey[50],\n    border: `1px solid ${grey[300]}`,\n    borderRadius: theme.spacing(0.5),\n    padding: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n  },\n  fileItemError: {\n    backgroundColor: red[50],\n    border: `1px solid ${red[200]}`,\n    borderRadius: theme.spacing(0.5),\n    padding: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n  },\n  progressBar: {\n    flex: 1,\n    marginLeft: theme.spacing(1),\n    marginRight: theme.spacing(1),\n  },\n  progressBarRoot: {\n    height: 10,\n    borderRadius: 5,\n  },\n  progressBarBar: {\n    borderRadius: 5,\n    backgroundColor: theme.palette.secondary[400],\n  },\n  progressBarBarError: {\n    borderRadius: 5,\n    backgroundColor: theme.palette.error.main,\n  },\n  fileIcon: {\n    color: grey[600],\n    fontSize: 20,\n  },\n  checkIcon: {\n    color: green[500],\n    fontSize: 20,\n    marginRight: 2,\n  },\n  errorIcon: {\n    color: theme.palette.error.main,\n    fontSize: 20,\n    marginRight: 2,\n  },\n  deleteFileButton: {\n    padding: theme.spacing(0.5),\n    color: grey[500],\n  },\n  errorText: {\n    paddingLeft: theme.spacing(0.5),\n  },\n  progressRow: {\n    display: 'flex',\n    alignItems: 'center',\n    width: '100%',\n    padding: theme.spacing(0, 0, 0, 0.5),\n  },\n}));\n\nexport default useProjectCardStyles;\n","import React from 'react';\nimport { Box, LinearProgress } from '@material-ui/core';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport useProjectCardStyles from './ProjectCard.styles';\n\ninterface IProps {\n  isUploading: boolean;\n  isUploaded: boolean;\n  progress: number;\n  hasError: boolean;\n}\n\nconst FileProgressBar: React.FC<IProps> = ({ isUploading, isUploaded, progress, hasError }) => {\n  const classes = useProjectCardStyles();\n\n  return (\n    <div className={classes.progressRow}>\n      <DescriptionIcon className={classes.fileIcon} />\n      {isUploading ? (\n        <Box className={classes.progressBar}>\n          <LinearProgress\n            variant='determinate'\n            color='secondary'\n            value={progress}\n            classes={{ root: classes.progressBarRoot, bar: classes.progressBarBar }}\n          />\n        </Box>\n      ) : isUploaded ? (\n        <>\n          <Box className={classes.progressBar}>\n            <LinearProgress\n              variant='determinate'\n              value={100}\n              classes={{ root: classes.progressBarRoot, bar: classes.progressBarBar }}\n            />\n          </Box>\n          <CheckCircleIcon className={classes.checkIcon} />\n        </>\n      ) : hasError ? (\n        <>\n          <Box className={classes.progressBar}>\n            <LinearProgress\n              variant='determinate'\n              value={progress}\n              classes={{ root: classes.progressBarRoot, bar: classes.progressBarBarError }}\n            />\n          </Box>\n          <WarningRoundedIcon className={classes.errorIcon} />\n        </>\n      ) : null}\n    </div>\n  );\n};\n\nexport default FileProgressBar;\n","import React from 'react';\nimport {\n  IconButton,\n  makeStyles,\n  createStyles,\n  Radio,\n  Theme,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport { grey } from '@material-ui/core/colors';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { useTranslation } from 'react-i18next';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { BYTES_PER_MB } from '../../../constants';\nimport { IProject, DocumentType } from './types';\nimport ProjectCardDropzone from './ProjectCardDropzone';\nimport SortableFileItem from './SortableFileItem';\nimport DocumentTypeSelect from './DocumentTypeSelect';\nimport FileProgressBar from './FileProgressBar';\nimport useProjectCardStyles from './ProjectCard.styles';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  header: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    marginBottom: theme.spacing(1),\n  },\n  deleteProjectButton: {\n    color: grey[500],\n  },\n  contentContainer: {\n    display: 'flex',\n    flexWrap: 'wrap',\n  },\n  dropzoneColumn: {\n    minWidth: 200,\n    maxWidth: 280,\n    flexShrink: 0,\n    overflow: 'hidden',\n    marginRight: theme.spacing(2),\n    marginBottom: theme.spacing(2),\n    '@media (max-width: 860px)': {\n      maxWidth: '100%',\n      width: '100%',\n      marginRight: 0,\n    },\n  },\n  filesColumn: {\n    flex: 1,\n    minWidth: 200,\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  filesList: {\n    maxHeight: 170,\n    overflowY: 'auto',\n  },\n  uploadedHeader: {\n    marginBottom: theme.spacing(1),\n  },\n}));\n\ninterface IProps {\n  project: IProject;\n  onFilesAccepted: (projectId: string, files: File[]) => void;\n  onRemoveFile: (projectId: string, fileId: string) => void;\n  onRemoveProject: (projectId: string) => void;\n  onSetSourceFile: (projectId: string, fileId: string) => void;\n  onSetDocumentType: (projectId: string, fileId: string, type: DocumentType) => void;\n  showSourceFileError: boolean;\n}\n\nconst ProjectCardUpload: React.FC<IProps> = ({\n  project,\n  onFilesAccepted,\n  onRemoveFile,\n  onRemoveProject,\n  onSetSourceFile,\n  onSetDocumentType,\n  showSourceFileError,\n}) => {\n  const classes = useStyles();\n  const sharedClasses = useProjectCardStyles();\n  const { t } = useTranslation('translations');\n\n  const fileIds = project.files.map(f => f.id);\n  const hasFiles = project.files.length > 0;\n  const successfulUploads = project.files.filter(f => f.uploadedFile).length ?? 0;\n  const hasErrors = hasFiles && successfulUploads !== project.files.length;\n  const hasCardError = hasErrors || showSourceFileError;\n\n  return (\n    <div className={hasCardError ? sharedClasses.cardError : sharedClasses.card}>\n      <div className={classes.header}>\n        <Typography variant='subtitle1' className={sharedClasses.projectTitle} color={hasErrors ? 'error' : 'initial'}>\n          {project.name}\n        </Typography>\n        <IconButton\n          size='small'\n          className={classes.deleteProjectButton}\n          onClick={() => onRemoveProject(project.id)}\n        >\n          <DeleteIcon fontSize='small' />\n        </IconButton>\n      </div>\n      {showSourceFileError && (\n        <Typography variant='body1' color='error' style={{ marginBottom: 8 }}>\n          {t('createNewProject.aiPath.sourceFileRequired')}\n        </Typography>\n      )}\n      <div className={hasFiles ? classes.contentContainer : undefined}>\n        <div className={hasFiles ? classes.dropzoneColumn : undefined}>\n          <ProjectCardDropzone\n            currentFileCount={project.files.length}\n            existingFileNames={project.files.map(f => f.file.name)}\n            onFilesAccepted={(files) => onFilesAccepted(project.id, files)}\n          />\n        </div>\n        {hasFiles && (\n          <div className={classes.filesColumn}>\n            <Typography\n              variant='body2'\n              className={classes.uploadedHeader}\n              color={successfulUploads !== project.files.length ? 'error' : 'initial'}\n            >\n              {t('createNewProject.aiPath.uploadedDocuments', { success: successfulUploads, total: project.files.length })}\n            </Typography>\n            <div className={classes.filesList}>\n              <SortableContext items={fileIds} strategy={verticalListSortingStrategy}>\n                {project.files.map((file) => (\n                  <SortableFileItem key={file.id} id={file.id}>\n                    <div className={file.error ? sharedClasses.fileItemError : sharedClasses.fileItem}>\n                      <div className={sharedClasses.fileRow}>\n                        <div className={sharedClasses.fileInfo}>\n                          <Radio\n                            size='small'\n                            checked={project.sourceFileId === file.id}\n                            onChange={() => onSetSourceFile(project.id, file.id)}\n                            color='primary'\n                            disabled={!!file.error || file.uploadedFile?.mediaType !== 'application/pdf'}\n                            style={{ padding: 4 }}\n                          />\n                          <Tooltip title={file.file.name}>\n                            <Typography variant='body2' className={sharedClasses.fileName}>\n                              {file.file.name}\n                            </Typography>\n                          </Tooltip>\n                          <Typography variant='caption' className={sharedClasses.fileSize}>\n                            {file.error ? t('createNewProject.aiPath.errorFileSize') : `${(file.file.size / BYTES_PER_MB).toFixed(1)} MB`}\n                          </Typography>\n                          {project.sourceFileId === file.id && (\n                            <Typography variant='caption' className={sharedClasses.sourceLabel}>\n                              {t('createNewProject.aiPath.sourceFile')}\n                            </Typography>\n                          )}\n                        </div>\n                        <div className={sharedClasses.fileActions}>\n                          {!file.error && (\n                            <DocumentTypeSelect\n                              value={file.documentType}\n                              onChange={(type) => onSetDocumentType(project.id, file.id, type)}\n                              error={false}\n                            />\n                          )}\n                          <IconButton\n                            size='small'\n                            className={sharedClasses.deleteFileButton}\n                            onClick={() => onRemoveFile(project.id, file.id)}\n                          >\n                            <DeleteIcon fontSize='small' />\n                          </IconButton>\n                        </div>\n                      </div>\n                      <FileProgressBar\n                        isUploading={file.isUploading}\n                        isUploaded={!!file.uploadedFile}\n                        progress={file.progress}\n                        hasError={!!file.error}\n                      />\n                      {file.error && (\n                        <Typography variant='caption' color='error' className={sharedClasses.errorText}>\n                          {file.error}\n                        </Typography>\n                      )}\n                    </div>\n                  </SortableFileItem>\n                ))}\n              </SortableContext>\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default React.memo(ProjectCardUpload, (prev, next) =>\n  prev.project === next.project\n  && prev.showSourceFileError === next.showSourceFileError\n);\n","var amber = {\n  50: '#fff8e1',\n  100: '#ffecb3',\n  200: '#ffe082',\n  300: '#ffd54f',\n  400: '#ffca28',\n  500: '#ffc107',\n  600: '#ffb300',\n  700: '#ffa000',\n  800: '#ff8f00',\n  900: '#ff6f00',\n  A100: '#ffe57f',\n  A200: '#ffd740',\n  A400: '#ffc400',\n  A700: '#ffab00'\n};\nexport default amber;","import React from 'react';\nimport {\n  IconButton,\n  makeStyles,\n  createStyles,\n  Theme,\n  Typography,\n  Button,\n  TextField,\n  Grid,\n  Divider,\n  Tooltip,\n  Paper,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport { amber, grey } from '@material-ui/core/colors';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { fromJS, List } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { Contact } from '../../../models';\nimport { SearchContactsAction, SearchContactsSucceededAction, GetContactsSucceededAction, SelectContactAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectSearchedContacts, makeSelectContactsLoading } from '../../../modules/AccountModule/selectors';\nimport { ToggleOverlayComponentAction, SetOverlayComponentContentAction, SetOverlayComponentPropsAction } from '../../../modules/ApplicationModule/actions';\nimport { DRAWER_ID } from '../../MyContactsPage/constants';\nimport { CONTENT_EDIT_KEY } from '../../../components/UserContactDrawerDetails';\nimport AvatarOrLogo from '../../MyContactsPage/AvatarOrLogo';\nimport AddIcon from '@material-ui/icons/Add';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport FindInPageIcon from '@material-ui/icons/FindInPage';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  container: {\n    position: 'relative',\n  },\n  noOptions: {\n    padding: theme.spacing(1, 2),\n    textAlign: 'center',\n  },\n  addContactButton: {\n    width: '100%',\n    justifyContent: 'center',\n    color: theme.palette.primary.main,\n    textTransform: 'uppercase',\n    fontWeight: 600,\n  },\n  eyeIcon: {\n    color: grey[600],\n    padding: 4,\n  },\n  optionDivider: {\n    marginTop: theme.spacing(1),\n  },\n  contactTitle: {\n    color: theme.palette.text.primary,\n  },\n  extractionHint: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: theme.spacing(0.5),\n    marginTop: theme.spacing(0.5),\n    cursor: 'default',\n  },\n  extractionHintText: {\n    fontSize: '0.75rem',\n    color: theme.palette.text.secondary,\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  noContactFound: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: theme.spacing(0.5),\n    marginTop: theme.spacing(0.5),\n  },\n  tooltipFitContent: {\n    maxWidth: 'none',\n  },\n}));\n\ninterface IContactOption {\n  label: string;\n  value: IMap<Contact>;\n  id: any;\n}\n\ninterface IProps {\n  label: string;\n  value: any | null;\n  onChange: (contact: any | null) => void;\n  onContactEdited?: (contactId: number | string, newContactData: any) => void;\n  rawExtractedContact?: any | null;\n  notFoundMessage?: string;\n}\n\nconst formatContactLabel = (contact: any): string => {\n  if (!contact) { return ''; }\n  const firstName = contact.firstName || contact.get?.('firstName') || '';\n  const lastName = contact.lastName || contact.get?.('lastName') || '';\n  const organization = contact.organization || contact.get?.('organization') || '';\n  const name = [firstName, lastName].filter(Boolean).join(' ');\n  return name || organization || '';\n};\n\nconst formatOptions = (contacts: List<IMap<Contact>>): IContactOption[] => {\n  return contacts.map(contact => ({\n    label: formatContactLabel(contact),\n    value: contact,\n    id: contact.get('id'),\n  })).toArray();\n};\n\nconst ContactSearchField: React.FC<IProps> = ({\n  label,\n  value,\n  onChange,\n  onContactEdited,\n  rawExtractedContact,\n  notFoundMessage,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const contacts = useSelector(makeSelectSearchedContacts());\n  const contactsLoading = useSelector(makeSelectContactsLoading());\n\n  const options = React.useMemo(() => {\n    if (!contacts || contacts.isEmpty()) { return []; }\n    return formatOptions(contacts);\n  }, [contacts]);\n\n  const selectedOption = React.useMemo<IContactOption | null>(() => {\n    if (!value) { return null; }\n    return {\n      label: formatContactLabel(value),\n      value,\n      id: value.id || value.get?.('id'),\n    };\n  }, [value]);\n\n  const handleAddContact = React.useCallback(() => {\n    dispatch(new SelectContactAction(null));\n    dispatch(new SetOverlayComponentContentAction({ id: DRAWER_ID, content: CONTENT_EDIT_KEY }));\n\n    const props: any = {\n      addedCb: (newContactData: any) => {\n        const updatedContact = newContactData?.toJS();\n        onChange(updatedContact);\n      }\n    };\n\n    if (rawExtractedContact) {\n      const contactMap = fromJS({ ...rawExtractedContact, id: null });\n      const salesReps = contactMap.get('salesReps') || List();\n      props.contactData = contactMap.set('salesReps', salesReps.toArray());\n    }\n\n    dispatch(new SetOverlayComponentPropsAction({ id: DRAWER_ID, props }));\n    dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID, open: true }));\n  }, [dispatch, value, rawExtractedContact, onChange]);\n\n  const handleViewContact = React.useCallback(() => {\n    if (!value) { return; }\n    const contactId = value.id || value.get?.('id');\n    if (!contactId) { return; }\n    dispatch(new GetContactsSucceededAction({ contacts: fromJS([value]) }));\n    dispatch(new SelectContactAction(contactId));\n    dispatch(new SetOverlayComponentContentAction({ id: DRAWER_ID, content: 'DEFAULT' }));\n    dispatch(new SetOverlayComponentPropsAction({\n      id: DRAWER_ID,\n      props: {\n        deletable: false,\n        submitCb: (newContactData) => {\n          const updatedContact = newContactData?.toJS();\n          onChange(updatedContact);\n          if (onContactEdited && contactId) {\n            onContactEdited(contactId, updatedContact);\n          }\n        }\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID, open: true }));\n  }, [value, dispatch, onContactEdited]);\n\n  const handleInputChange = React.useCallback((_event: any, inputValue: string, reason: string) => {\n    if (reason === 'input' && inputValue.length) {\n      dispatch(new SearchContactsSucceededAction({ contacts: List() }));\n      dispatch(new SearchContactsAction({\n        searchTerm: inputValue,\n        options: { limit: 100 },\n      }));\n    }\n  }, [dispatch]);\n\n  const rawName = rawExtractedContact\n    ? [rawExtractedContact.firstName, rawExtractedContact.lastName].filter(Boolean).join(' ')\n    : '';\n  const rawOrg = rawExtractedContact?.organization || '';\n  const rawDisplayName = rawName && rawOrg\n    ? `${rawName} - ${rawOrg}`\n    : (rawName || rawOrg || '');\n  const rawAddress = rawExtractedContact\n    ? [\n        rawExtractedContact.address1,\n        rawExtractedContact.cityName,\n        rawExtractedContact.provinceName,\n        rawExtractedContact.postalZip,\n        rawExtractedContact.countryName,\n      ].filter(Boolean).join(', ')\n    : '';\n\n  return (\n    <div className={classes.container}>\n      <div style={{ display: 'flex', alignItems: 'flex-end' }}>\n        <Autocomplete\n          value={selectedOption}\n          onChange={(_event, option) => onChange(option?.value || null)}\n          onBlur={() => {\n            dispatch(new SearchContactsSucceededAction({ contacts: List() }));\n          }}\n          onInputChange={handleInputChange}\n          options={options}\n          loading={contactsLoading}\n          getOptionLabel={(opt: IContactOption) => opt.label}\n          getOptionSelected={(option, val) => option.id === val.id}\n          filterOptions={(opts) => opts}\n          style={{ flex: 1 }}\n          noOptionsText={\n            <div className={classes.noOptions}>\n              <Typography variant='body2' color='textSecondary'>\n                {t('createNewProject.aiPath.noContactsFound')}\n              </Typography>\n            </div>\n          }\n          PaperComponent={({ children, ...props }) => {\n            return <Paper {...props} onMouseDown={e => e.preventDefault()} style={{  }}>\n              {children}\n              <div>\n                <Button\n                  style={{ border: 'none', borderRadius: 0, fontSize: '1.1em' }}\n                  variant='outlined'\n                  color='primary'\n                  fullWidth={true}\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    e.preventDefault();\n                    handleAddContact();\n                  }}\n                >\n                  {t('createNewProject.aiPath.addContact')}\n                </Button>\n              </div>\n            </Paper>;\n          }}\n          renderOption={(option: IContactOption) => {\n            const contact = option.value;\n            const name = [contact.get('firstName'), contact.get('lastName')].join(' ').trim();\n            const organization = contact.get('organization');\n            const email = contact.get('email');\n            const contactType = contact.get('contactType');\n            const address1 = contact.get('address1') || '';\n            const address2 = contact.get('address2') || '';\n            const cityName = contact.get('cityName') || '';\n            const provinceCode = contact.get('provinceCode') || '';\n            const countryName = contact.get('countryName') || '';\n\n            return (\n              <Grid container={true} alignItems='center' wrap='nowrap' style={{ overflow: 'hidden' }} spacing={2}>\n                <Grid item={true}>\n                  <AvatarOrLogo contact={contact} />\n                </Grid>\n                <Grid item={true} container={true} direction='column'>\n                  <Typography variant='subtitle1' className={classes.contactTitle}>{name || organization}</Typography>\n                  <Typography variant='body2'>{email}</Typography>\n                  <Typography variant='caption'>{contactType}</Typography>\n                  <Typography variant='caption'>{address1 || address2}</Typography>\n                  <Typography variant='caption'>{cityName} {provinceCode} {countryName}</Typography>\n                  <Divider className={classes.optionDivider} light={true} />\n                </Grid>\n              </Grid>\n            );\n          }}\n          renderInput={(params) => (\n            <TextField\n              {...params}\n              label={label}\n              fullWidth={true}\n              placeholder={t('createNewProject.aiPath.searchContact')}\n              InputLabelProps={{ ...params.InputLabelProps, shrink: true }}\n            />\n          )}\n        />\n        {value && (\n          <IconButton className={classes.eyeIcon} size='small' onClick={handleViewContact}>\n            <VisibilityIcon fontSize='small' />\n          </IconButton>\n        )}\n      </div>\n      {!value && rawExtractedContact === null && notFoundMessage && (\n        <div className={classes.noContactFound}>\n          <WarningIcon style={{ fontSize: '0.975rem', color: amber[700], marginRight: 8 }} />\n          <Typography>{notFoundMessage}</Typography>\n        </div>\n      )}\n      {rawExtractedContact && (\n        <Tooltip\n          title={\n            <div style={{ whiteSpace: 'nowrap' }}>\n              <div>{rawDisplayName}</div>\n              {rawAddress && <div>{rawAddress}</div>}\n            </div>\n          }\n          placement='bottom-start'\n          classes={{ tooltip: classes.tooltipFitContent }}\n        >\n          <div className={classes.extractionHint}>\n            <FindInPageIcon style={{ fontSize: '0.975rem', color: grey[600], marginRight: 8 }} />\n            <Typography className={classes.extractionHintText}>{rawDisplayName}</Typography>\n          </div>\n        </Tooltip>\n      )}\n    </div>\n  );\n};\n\nexport default ContactSearchField;\n","import React from 'react';\nimport {\n  Grid,\n  TextField,\n  MenuItem,\n  FormControl,\n  FormHelperText,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport {\n  KeyboardDatePicker,\n  MuiPickersUtilsProvider,\n} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\nimport CalendarTodayRoundedIcon from '@material-ui/icons/CalendarTodayRounded';\nimport ChevronLeftRoundedIcon from '@material-ui/icons/ChevronLeftRounded';\nimport ChevronRightRoundedIcon from '@material-ui/icons/ChevronRightRounded';\nimport moment from 'moment';\nimport { useTranslation } from 'react-i18next';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { IExtractionData, ILocationOption, IBuildingOption } from './types';\nimport ContactSearchField from './ContactSearchField';\n\ninterface IProps {\n  data: IExtractionData;\n  onFieldChange: (field: keyof IExtractionData, value: any) => void;\n  onContactEdited?: (contactId: number | string, newContactData: any) => void;\n  buildingClassOptions: IBuildingOption[];\n  buildingTypeOptions: IBuildingOption[];\n  onBuildingClassChange: (classId: string | number) => void;\n  showRequiredErrors?: boolean;\n  countryOptions: ILocationOption[];\n}\n\nconst ExtractionReviewForm: React.FC<IProps> = ({\n  data,\n  onFieldChange,\n  onContactEdited,\n  buildingClassOptions,\n  buildingTypeOptions,\n  onBuildingClassChange,\n  showRequiredErrors,\n  countryOptions,\n}) => {\n  const { t } = useTranslation('translations');\n  const atsApi = useAtsApi();\n\n  const [provinceOptions, setProvinceOptions] = React.useState<ILocationOption[]>([]);\n  const [cityOptions, setCityOptions] = React.useState<ILocationOption[]>([]);\n\n  const requiredError = (value: any) =>\n    showRequiredErrors && !value ? t('createNewProject.aiPath.fieldRequired') : '';\n\n  const isBuildingTypeRequired = String(data.buildingClass?.id) !== '7';\n\n  const bidDateInvalid = data.bidDate && !moment(data.bidDate, 'YYYY-MM-DD', true).isValid();\n\n  const bidDateWarning = React.useMemo(() => {\n    if (!data.bidDate || bidDateInvalid) { return ''; }\n    const date = moment(data.bidDate).startOf('day');\n    const today = moment().startOf('day');\n    return date.isBefore(today) ? t('createNewProject.aiPath.bidDatePassed') : '';\n  }, [data.bidDate, bidDateInvalid, t]);\n\n  const findOption = (options: ILocationOption[], id: string): ILocationOption | null => {\n    if (id == null) { return null; }\n    return options.find(opt => opt.id === id) || null;\n  };\n\n  // Fetch provinces when country ID changes\n  React.useEffect(() => {\n    const countryId = data.country?.id;\n    if (countryId) {\n      (atsApi.callApi(countryId, { service: 'list', endpoint: 'getStates' }) as Promise<any>)\n        .then((res: any) => {\n          const items: ILocationOption[] = (res?.payload?.list?.listItems || [])\n            .map((item: any) => ({ id: item.id, value: item.value }));\n          setProvinceOptions(items);\n          // Auto-match AI-extracted province text\n          if (data.stateProvince?.value && !data.stateProvince?.id) {\n            const match = items.find(\n              opt => opt.value.toLowerCase() === data.stateProvince.value.toLowerCase()\n            );\n            if (match) {\n              onFieldChange('stateProvince', { id: match.id, value: match.value });\n            }\n          }\n        })\n        .catch(() => setProvinceOptions([]));\n    } else {\n      setProvinceOptions([]);\n    }\n  }, [data.country?.id]);\n\n  // Fetch cities when province ID changes\n  React.useEffect(() => {\n    const provinceId = data.stateProvince?.id;\n    if (provinceId) {\n      (atsApi.callApi(provinceId, { service: 'list', endpoint: 'getCities' }) as Promise<any>)\n        .then((res: any) => {\n          const items: ILocationOption[] = (res?.payload?.list?.listItems || [])\n            .map((item: any) => ({ id: item.id, value: item.value }));\n          setCityOptions(items);\n          // Auto-match AI-extracted city text\n          if (data.city?.value && !data.city?.id) {\n            const match = items.find(\n              opt => opt.value.toLowerCase() === data.city.value.toLowerCase()\n            );\n            if (match) {\n              onFieldChange('city', { id: match.id, value: match.value });\n            }\n          }\n        })\n        .catch(() => setCityOptions([]));\n    } else {\n      setCityOptions([]);\n    }\n  }, [data.stateProvince?.id]);\n\n  // Auto-match AI-extracted country text when country options load\n  React.useEffect(() => {\n    if (data.country?.value && !data.country?.id && countryOptions.length > 0) {\n      const match = countryOptions.find(\n        opt => opt.value.toLowerCase() === data.country.value.toLowerCase()\n      );\n      if (match) {\n        onFieldChange('country', { id: match.id, value: match.value });\n      }\n    }\n  }, [countryOptions]);\n\n  const handleCountryChange = (_event: any, option: ILocationOption | null) => {\n    onFieldChange('country', option\n      ? { id: option.id, value: option.value }\n      : null);\n    onFieldChange('stateProvince', null);\n    onFieldChange('city', null);\n    setCityOptions([]);\n  };\n\n  const handleProvinceChange = (_event: any, option: ILocationOption | null) => {\n    onFieldChange('stateProvince', option\n      ? { id: option.id, value: option.value }\n      : null);\n    onFieldChange('city', null);\n  };\n\n  const handleCityChange = (_event: any, option: ILocationOption | null) => {\n    onFieldChange('city', option\n      ? { id: option.id, value: option.value }\n      : null);\n  };\n\n  const handleBuildingClassSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const classId = e.target.value;\n    const selectedClass = buildingClassOptions.find(opt => String(opt.id) === String(classId));\n    onFieldChange('buildingClass', selectedClass ? { id: selectedClass.id, value: selectedClass.value, buildingTypes: [] } : null);\n    onFieldChange('buildingType', null);\n    onBuildingClassChange(classId);\n  };\n\n  const handleBuildingTypeSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const typeId = e.target.value;\n    const selectedType = buildingTypeOptions.find(opt => String(opt.id) === String(typeId));\n    onFieldChange('buildingType', selectedType ? { id: selectedType.id, value: selectedType.value } : null);\n  };\n\n  return (\n    <div>\n      <Grid container={true} spacing={2}>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <Autocomplete\n            value={findOption(countryOptions, data.country?.id)}\n            onChange={handleCountryChange}\n            options={countryOptions}\n            getOptionLabel={(opt: ILocationOption) => opt.value}\n            getOptionSelected={(option, val) => option.id === val.id}\n            renderInput={(params) => (\n              <TextField\n                {...params}\n                label={`${t('createNewProject.Country')} *`}\n                placeholder={`${t('createNewProject.Country')} *`}\n                fullWidth={true}\n                InputLabelProps={{ ...params.InputLabelProps, shrink: true }}\n                error={!!requiredError(data.country?.value)}\n                helperText={requiredError(data.country?.value)}\n              />\n            )}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <Autocomplete\n            value={findOption(provinceOptions, data.stateProvince?.id)}\n            onChange={handleProvinceChange}\n            options={provinceOptions}\n            getOptionLabel={(opt: ILocationOption) => opt.value}\n            getOptionSelected={(option, val) => option.id === val.id}\n            disabled={!data.country?.id}\n            renderInput={(params) => (\n              <TextField\n                {...params}\n                label={`${t('createNewProject.StateProvince')} *`}\n                placeholder={`${t('createNewProject.StateProvince')} *`}\n                fullWidth={true}\n                InputLabelProps={{ ...params.InputLabelProps, shrink: true }}\n                error={!!requiredError(data.stateProvince?.value)}\n                helperText={requiredError(data.stateProvince?.value)}\n              />\n            )}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <Autocomplete\n            value={findOption(cityOptions, data.city?.id)}\n            onChange={handleCityChange}\n            options={cityOptions}\n            getOptionLabel={(opt: ILocationOption) => opt.value}\n            getOptionSelected={(option, val) => option.id === val.id}\n            disabled={!data.stateProvince?.id}\n            renderInput={(params) => (\n              <TextField\n                {...params}\n                label={`${t('createNewProject.City')} *`}\n                placeholder={`${t('createNewProject.City')} *`}\n                fullWidth={true}\n                InputLabelProps={{ ...params.InputLabelProps, shrink: true }}\n                error={!!requiredError(data.city?.value)}\n                helperText={requiredError(data.city?.value)}\n              />\n            )}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <TextField\n            label={t('createNewProject.Address')}\n            placeholder={t('createNewProject.Address')}\n            value={data.address}\n            onChange={(e) => onFieldChange('address', e.target.value)}\n            fullWidth={true}\n            InputLabelProps={{ shrink: true }}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <TextField\n            select={true}\n            label={`${t('createNewProject.aiPath.buildingClass')} *`}\n            placeholder={`${t('createNewProject.aiPath.buildingClass')} *`}\n            value={data.buildingClass?.id ?? ''}\n            onChange={handleBuildingClassSelect}\n            fullWidth={true}\n            InputLabelProps={{ shrink: true }}\n            error={!!requiredError(data.buildingClass)}\n            helperText={requiredError(data.buildingClass)}\n          >\n            {buildingClassOptions.map((opt) => (\n              <MenuItem key={opt.id} value={opt.id}>\n                {opt.value}\n              </MenuItem>\n            ))}\n          </TextField>\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <TextField\n            select={true}\n            label={`${t('createNewProject.aiPath.buildingType')}${isBuildingTypeRequired ? ' *' : ''}`}\n            placeholder={`${t('createNewProject.aiPath.buildingType')}${isBuildingTypeRequired ? ' *' : ''}`}\n            value={data.buildingType?.id ?? ''}\n            onChange={handleBuildingTypeSelect}\n            fullWidth={true}\n            InputLabelProps={{ shrink: true }}\n            disabled={!data.buildingClass || !isBuildingTypeRequired}\n            error={isBuildingTypeRequired && !!requiredError(data.buildingType)}\n            helperText={isBuildingTypeRequired ? requiredError(data.buildingType) : ''}\n          >\n            {buildingTypeOptions.map((opt) => (\n              <MenuItem key={opt.id} value={opt.id}>\n                {opt.value}\n              </MenuItem>\n            ))}\n          </TextField>\n        </Grid>\n\n        <Grid item={true} xs={12} sm={4}>\n          <ContactSearchField\n            label={t('createNewProject.aiPath.architect')}\n            value={data.architect}\n            onChange={(contact) => onFieldChange('architect', contact)}\n            onContactEdited={onContactEdited}\n            rawExtractedContact={data.rawArchitect}\n            notFoundMessage={t('createNewProject.aiPath.noArchitectFound')}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4}>\n          <ContactSearchField\n            label={t('createNewProject.aiPath.engineer')}\n            value={data.engineer}\n            onChange={(contact) => onFieldChange('engineer', contact)}\n            onContactEdited={onContactEdited}\n            rawExtractedContact={data.rawEngineer}\n            notFoundMessage={t('createNewProject.aiPath.noEngineerFound')}\n          />\n        </Grid>\n        <Grid item={true} xs={12} sm={4} md={2}>\n          <MuiPickersUtilsProvider utils={MomentUtils}>\n            <FormControl fullWidth={true} error={!!bidDateInvalid || !!requiredError(data.bidDate)}>\n              <KeyboardDatePicker\n                format='YYYY-MM-DD'\n                mask='____-__-__'\n                maskChar='_'\n                label={`${t('createNewProject.BidDate')} *`}\n                placeholder={`${t('createNewProject.BidDate')} *`}\n                value={data.bidDate ? moment(data.bidDate) : null}\n                onChange={(date) => onFieldChange('bidDate', date ? date.format('YYYY-MM-DD') : '')}\n                fullWidth={true}\n                clearable={true}\n                InputLabelProps={{\n                  shrink: true,\n                  style: !bidDateInvalid && !requiredError(data.bidDate) && bidDateWarning ? { color: 'rgb(178, 135, 4)' } : undefined,\n                }}\n                leftArrowIcon={<ChevronLeftRoundedIcon fontSize='large' />}\n                rightArrowIcon={<ChevronRightRoundedIcon fontSize='large' />}\n                keyboardIcon={<CalendarTodayRoundedIcon />}\n                error={!!bidDateInvalid || !!requiredError(data.bidDate)}\n                helperText={null}\n              />\n              <FormHelperText\n                error={!!bidDateInvalid || !!requiredError(data.bidDate)}\n                style={!bidDateInvalid && !requiredError(data.bidDate) && bidDateWarning ? { color: 'rgb(178, 135, 4)' } : undefined}\n              >\n                {bidDateInvalid ? t('errors.isValidDate') : (requiredError(data.bidDate) || bidDateWarning)}\n              </FormHelperText>\n            </FormControl>\n          </MuiPickersUtilsProvider>\n        </Grid>\n      </Grid>\n    </div>\n  );\n};\n\nexport default ExtractionReviewForm;\n","import React from 'react';\nimport {\n  Box,\n  Button,\n  Checkbox,\n  IconButton,\n  LinearProgress,\n  makeStyles,\n  createStyles,\n  Theme,\n  Tooltip,\n  Typography,\n  TextField,\n} from '@material-ui/core';\nimport { grey } from '@material-ui/core/colors';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useTranslation } from 'react-i18next';\nimport { List } from 'immutable';\nimport { BYTES_PER_MB, MAX_FILE_SIZE_200MB } from '../../../constants';\nimport { IProject, IExtractionData, ILocationOption, IBuildingOption, DocumentType } from './types';\nimport { useFileSrc } from '../../../components/PDFModal';\nimport ExtractionReviewForm from './ExtractionReviewForm';\nimport DocumentTypeSelect from './DocumentTypeSelect';\nimport FileProgressBar from './FileProgressBar';\nimport useProjectCardStyles from './ProjectCard.styles';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  reviewHeader: {\n    display: 'flex',\n    alignItems: 'center',\n    marginBottom: theme.spacing(1),\n    marginTop: theme.spacing(-1.5),\n    marginLeft: theme.spacing(-1.5),\n  },\n  reviewFileWrapper: {\n    display: 'flex',\n    alignItems: 'flex-start',\n    marginLeft: theme.spacing(3),\n  },\n  reviewFileList: {\n    display: 'grid',\n    gridTemplateColumns: '1fr 1fr',\n    gap: theme.spacing(0.5, 2),\n    flex: 1,\n    minWidth: 0,\n  },\n  reviewFileItem: {\n    display: 'flex',\n    alignItems: 'center',\n    '& > *:not(:last-child)': {\n      marginRight: theme.spacing(0.5),\n    },\n  },\n  moreFilesButton: {\n    textTransform: 'none' as const,\n    padding: 0,\n    minWidth: 'auto',\n    whiteSpace: 'nowrap' as const,\n    marginLeft: theme.spacing(2),\n    flexShrink: 0,\n  },\n  reviewProgressBar: {\n    width: '60%',\n    marginBottom: theme.spacing(1),\n  },\n  reviewMessage: {\n    marginBottom: theme.spacing(1),\n  },\n  reviewContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    padding: theme.spacing(3),\n    backgroundColor: grey[50],\n    borderRadius: theme.spacing(0.5),\n  },\n  reviewContainerWithForm: {\n    padding: theme.spacing(1),\n    backgroundColor: 'white',\n    borderRadius: theme.spacing(0.5),\n    marginLeft: theme.spacing(3),\n    marginTop: theme.spacing(1),\n  },\n}));\n\ninterface IProps {\n  index: number;\n  project: IProject;\n  onToggleSelected: (projectId: string) => void;\n  onRetryWithNewFile: (projectId: string, file: File) => void;\n  onConfirmRetry: (projectId: string) => void;\n  onSetDocumentType: (projectId: string, fileId: string, type: DocumentType) => void;\n  onRenameProject: (projectId: string, name: string) => void;\n  onUpdateExtractionData: (projectId: string, field: keyof IExtractionData, value: any) => void;\n  onContactEdited: (contactId: number | string, newContactData: any) => void;\n  onOpenPdfModal: (params: { fileId: string; fileName: string; defaultPageNumber?: number; defaultCoordinates?: any }) => void;\n  buildingClassOptions: IBuildingOption[];\n  buildingTypeOptions: IBuildingOption[];\n  onBuildingClassChange: (projectId: string, classId: string | number) => void;\n  showRequiredErrors: boolean;\n  countryOptions: ILocationOption[];\n}\n\nconst ProjectCardReview: React.FC<IProps> = ({\n  index,\n  project,\n  onToggleSelected,\n  onRetryWithNewFile,\n  onConfirmRetry,\n  onSetDocumentType,\n  onRenameProject,\n  onUpdateExtractionData,\n  onContactEdited,\n  onOpenPdfModal,\n  buildingClassOptions,\n  buildingTypeOptions,\n  onBuildingClassChange,\n  showRequiredErrors,\n  countryOptions,\n}) => {\n  const classes = useStyles();\n  const sharedClasses = useProjectCardStyles();\n  const { t } = useTranslation('translations');\n  const getFileSrc = useFileSrc();\n\n  const [filesExpanded, setFilesExpanded] = React.useState(false);\n  const retryFileInputRef = React.useRef<HTMLInputElement>(null);\n\n  const isFailed = project.extractionStatus === 'failed';\n  const isRetryUpload = project.extractionStatus === 'idle';\n  const retryFile = isRetryUpload\n    ? project.files.find(f => f.id === project.sourceFileId)\n    : null;\n  const retryFileUploaded = retryFile?.uploadedFile != null;\n  const retryFileUploading = retryFile?.isUploading;\n\n  const d = project.extractionData;\n  const hasMissingRequired = showRequiredErrors && d && !(\n    project.name?.trim() &&\n    d.city?.value && d.stateProvince?.value && d.country?.value &&\n    d.buildingClass && d.buildingType && d.bidDate\n  );\n\n  const handleRetryFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const file = e.target.files?.[0];\n    if (retryFileInputRef.current) {\n      retryFileInputRef.current.value = '';\n    }\n    if (!file) { return; }\n    if (file.type !== 'application/pdf') { return; }\n    if (file.size > MAX_FILE_SIZE_200MB) { return; }\n    onRetryWithNewFile(project.id, file);\n  };\n\n  // Sort files: highlighted + source first, then others\n  const priorityFiles = project.files.filter(\n    f => f.id === project.highlightedFileLocalId || f.id === project.sourceFileId\n  );\n  const otherFiles = project.files.filter(\n    f => f.id !== project.highlightedFileLocalId && f.id !== project.sourceFileId\n  );\n  const sortedFiles = [...priorityFiles, ...otherFiles];\n  const firstRowFiles = sortedFiles.slice(0, 2);\n  const remainingFiles = sortedFiles.slice(2);\n  const hasMore = remainingFiles.length > 0;\n  const visibleFiles = filesExpanded ? sortedFiles : firstRowFiles;\n\n  const renderFileItem = (file: any) => {\n    const hasUploadedFile = !!file.uploadedFile?.id;\n    const isPdf = hasUploadedFile && file.uploadedFile.mediaType === 'application/pdf';\n    const isHighlightedFile = file.id === project.highlightedFileLocalId;\n    const coordsItem = isHighlightedFile ? project.extractionCoordinates?.items?.[0] : null;\n\n    const handleFileClick = () => {\n      if (!hasUploadedFile) { return; }\n      if (isPdf) {\n        onOpenPdfModal({\n          fileId: file.uploadedFile.id,\n          fileName: file.file.name,\n          defaultPageNumber: coordsItem?.page,\n          defaultCoordinates: List([coordsItem?.pixelCoordinates?.x, coordsItem?.pixelCoordinates?.y]),\n        });\n      } else {\n        const url = getFileSrc(file.uploadedFile.id);\n        if (url) { window.open(url, '_blank'); }\n      }\n    };\n\n    return (\n      <div\n        key={file.id}\n        className={classes.reviewFileItem}\n        style={hasUploadedFile ? { cursor: 'pointer' } : undefined}\n        onClick={hasUploadedFile ? handleFileClick : undefined}\n      >\n        <DescriptionIcon color='primary' style={{ fontSize: 20 }} />\n        <Typography variant='body2' color='primary'>\n          {file.file.name}\n        </Typography>\n        {isHighlightedFile && (\n          <Typography variant='caption' color='textPrimary' className={sharedClasses.sourceLabel}>\n            {t('createNewProject.aiPath.processedSourceFile')}\n          </Typography>\n        )}\n        {!isHighlightedFile && file.id === project.sourceFileId && (\n          <Typography variant='caption' color='textPrimary' className={sharedClasses.sourceLabel}>\n            {t('createNewProject.aiPath.sourceFile')}\n          </Typography>\n        )}\n      </div>\n    );\n  };\n\n  return (\n    <div className={isFailed || hasMissingRequired ? sharedClasses.cardError : sharedClasses.card}>\n      <input\n        type='file'\n        accept='application/pdf'\n        ref={retryFileInputRef}\n        style={{ display: 'none' }}\n        onChange={handleRetryFileSelect}\n      />\n\n      {/* Header: checkbox + index + project name */}\n      <div className={classes.reviewHeader}>\n        <Checkbox\n          checked={project.selected}\n          onChange={() => onToggleSelected(project.id)}\n          color='primary'\n          disabled={project.extractionStatus !== 'completed'}\n        />\n        <Typography variant='body2' style={{ marginRight: 8, whiteSpace: 'nowrap', fontSize: '1.2em' }}>\n          {index}.\n        </Typography>\n        {project.extractionStatus === 'completed' && project.extractionData ? (\n          <TextField\n            value={project.name}\n            onChange={(e) => onRenameProject(project.id, e.target.value)}\n            variant='standard'\n            size='small'\n            error={showRequiredErrors && !project.name?.trim()}\n            helperText={showRequiredErrors && !project.name?.trim() ? t('createNewProject.aiPath.fieldRequired') : ''}\n          />\n        ) : (\n          <Typography\n            variant='subtitle1'\n            className={sharedClasses.projectTitle}\n            color={isFailed ? 'error' : 'initial'}\n          >\n            {project.name}\n          </Typography>\n        )}\n      </div>\n\n      {/* File list */}\n      <div className={classes.reviewFileWrapper}>\n        <div\n          className={classes.reviewFileList}\n          style={filesExpanded && hasMore ? { maxHeight: 300, overflowY: 'auto' } : undefined}\n        >\n          {visibleFiles.map(renderFileItem)}\n        </div>\n        {hasMore && (\n          <Button\n            className={classes.moreFilesButton}\n            size='small'\n            color='primary'\n            onClick={() => setFilesExpanded(prev => !prev)}\n          >\n            {filesExpanded\n              ? t('createNewProject.aiPath.lessFiles')\n              : t('createNewProject.aiPath.moreFiles')}\n          </Button>\n        )}\n      </div>\n\n      {/* Extraction status / form area */}\n      <div className={\n        project.extractionStatus === 'completed' && project.extractionData\n          ? classes.reviewContainerWithForm\n          : classes.reviewContainer\n      }>\n        {/* Pending extraction */}\n        {project.extractionStatus === 'pending' && (\n          <>\n            <Box className={classes.reviewProgressBar}>\n              <LinearProgress\n                variant='determinate'\n                value={project.extractionProgress || 0}\n                color='secondary'\n                classes={{ root: sharedClasses.progressBarRoot, bar: sharedClasses.progressBarBar }}\n              />\n            </Box>\n            <Typography variant='body2' className={classes.reviewMessage}>\n              {project.extractionProgress > 0\n                ? t('createNewProject.aiPath.processingFileProgress', { progress: project.extractionProgress })\n                : t('createNewProject.aiPath.processingFile')\n              }\n            </Typography>\n          </>\n        )}\n\n        {/* Failed extraction */}\n        {isFailed && (\n          <>\n            <WarningRoundedIcon color='error' fontSize='default' />\n            <Typography variant='body2' className={classes.reviewMessage} style={{ marginTop: 12, marginBottom: 8 }}>\n              {project.extractionError || t('createNewProject.aiPath.extractionFailed')}\n            </Typography>\n            <Button\n              variant='outlined'\n              color='primary'\n              onClick={() => retryFileInputRef.current?.click()}\n            >\n              {t('createNewProject.aiPath.uploadNewSourceFile')}\n            </Button>\n          </>\n        )}\n\n        {/* Retry upload (new source file selected) */}\n        {isRetryUpload && retryFile && (\n          <>\n            <div className={sharedClasses.fileItem} style={{ width: '100%' }}>\n              <div className={sharedClasses.fileRow}>\n                <div className={sharedClasses.fileInfo}>\n                  <Tooltip title={retryFile.file.name}>\n                    <Typography variant='body2' className={sharedClasses.fileName}>\n                      {retryFile.file.name}\n                    </Typography>\n                  </Tooltip>\n                  <Typography variant='caption' className={sharedClasses.fileSize}>\n                    {`${(retryFile.file.size / BYTES_PER_MB).toFixed(1)} MB`}\n                  </Typography>\n                  <Typography variant='caption' className={sharedClasses.sourceLabel}>\n                    {t('createNewProject.aiPath.sourceFile')}\n                  </Typography>\n                </div>\n                <div className={sharedClasses.fileActions}>\n                  <DocumentTypeSelect\n                    value={retryFile.documentType}\n                    onChange={(type) => onSetDocumentType(project.id, retryFile.id, type)}\n                  />\n                  <IconButton\n                    size='small'\n                    className={sharedClasses.deleteFileButton}\n                    disabled={true}\n                  >\n                    <DeleteIcon fontSize='small' />\n                  </IconButton>\n                </div>\n              </div>\n              <FileProgressBar\n                isUploading={!!retryFileUploading}\n                isUploaded={retryFileUploaded}\n                progress={retryFile.progress}\n                hasError={!!retryFile.error}\n              />\n              {retryFile.error && (\n                <Typography variant='caption' color='error' className={sharedClasses.errorText}>\n                  {retryFile.error}\n                </Typography>\n              )}\n            </div>\n            {retryFileUploaded && (\n              <Button\n                variant='contained'\n                color='primary'\n                onClick={() => onConfirmRetry(project.id)}\n                style={{ marginTop: 8 }}\n              >\n                {t('createNewProject.aiPath.confirm')}\n              </Button>\n            )}\n          </>\n        )}\n\n        {/* Completed extraction with data */}\n        {project.extractionStatus === 'completed' && project.extractionData && (\n          <ExtractionReviewForm\n            data={project.extractionData}\n            onFieldChange={(field, value) => onUpdateExtractionData(project.id, field, value)}\n            onContactEdited={onContactEdited}\n            buildingClassOptions={buildingClassOptions}\n            buildingTypeOptions={buildingTypeOptions}\n            onBuildingClassChange={(classId) => onBuildingClassChange(project.id, classId)}\n            showRequiredErrors={showRequiredErrors}\n            countryOptions={countryOptions}\n          />\n        )}\n\n        {/* Completed extraction without data */}\n        {project.extractionStatus === 'completed' && !project.extractionData && (\n          <>\n            <CheckCircleIcon className={sharedClasses.checkIcon} />\n            <Typography variant='body2'>\n              {t('createNewProject.aiPath.extractionComplete')}\n            </Typography>\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default React.memo(ProjectCardReview, (prev, next) =>\n  prev.index === next.index\n  && prev.project === next.project\n  && prev.showRequiredErrors === next.showRequiredErrors\n  && prev.buildingClassOptions === next.buildingClassOptions\n  && prev.buildingTypeOptions === next.buildingTypeOptions\n  && prev.countryOptions === next.countryOptions\n);\n","import React from 'react';\nimport { makeStyles, createStyles } from '@material-ui/core';\nimport { Theme } from '@material-ui/core/';\nimport { grey } from '@material-ui/core/colors';\nimport { Box, Button, Dialog, DialogContent, DialogActions, Typography } from '@material-ui/core';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\nimport {\n  closestCenter,\n  DndContext,\n  DragOverEvent,\n  DragEndEvent,\n  DragStartEvent,\n  DragOverlay,\n  PointerSensor,\n  KeyboardSensor,\n  useSensor,\n  useSensors,\n} from '@dnd-kit/core';\nimport { sortableKeyboardCoordinates } from '@dnd-kit/sortable';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { IProject, IProjectFile, IExtractionData, ILocationOption, IBuildingOption, DocumentType } from './types';\nimport { makeSelectLocale } from '../../../modules/LanguageModule/selectors';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { makeSelectBuildingClasses, makeSelectBuildingTypes } from '../../../modules/BuildingModule/selectors';\nimport { GetBuildingClassesAction, GetBuildingTypesAction } from '../../../modules/BuildingModule/actions';\nimport { ControlledDrawer, UserContactDrawerDetails } from '../../../components';\nimport { DRAWER_ID } from '../../MyContactsPage/constants';\nimport CreationProgressModal from './CreationProgressModal';\nimport PDFModal from '../../../components/PDFModal';\nimport { PROJECT_LIST_PATH } from '../../../constants';\nimport { push } from 'connected-react-router';\nimport { createProject, generateFileId, buildHighlightedFile, isProjectValid } from './utils';\nimport useExtraction from './useExtraction';\nimport ProjectCardUpload from './ProjectCardUpload';\nimport ProjectCardReview from './ProjectCardReview';\nimport { readUploadResponse } from '../../../utils/uploadResponse';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  container: {\n    width: '100%',\n    margin: '0 auto',\n    padding: theme.spacing(2, 3),\n  },\n  containerUpload: {\n    maxWidth: 1016,\n  },\n  containerReview: {\n    maxWidth: 1296,\n  },\n  title: {\n    marginBottom: theme.spacing(1),\n  },\n  subtitle: {\n    marginBottom: theme.spacing(3),\n  },\n  projectCardsContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    backgroundColor: grey[50],\n    '& > *:not(:last-child)': {\n      marginBottom: theme.spacing(2),\n    },\n  },\n  addProjectButton: {\n    border: `1px dashed ${grey[300]}`,\n    borderRadius: theme.spacing(1),\n    padding: theme.spacing(2),\n    cursor: 'pointer',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    '&:hover': {\n      borderColor: theme.palette.primary.main,\n      backgroundColor: grey[50],\n    },\n  },\n  addIcon: {\n    color: theme.palette.action.active,\n    marginRight: theme.spacing(),\n  },\n  addText: {\n    color: grey[700],\n  },\n  footer: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n    marginTop: theme.spacing(3),\n    paddingBottom: theme.spacing(2),\n    '& > *:not(:last-child)': {\n      marginRight: theme.spacing(2),\n    },\n  },\n  backButton: {\n    color: theme.palette.primary.main,\n  },\n  validationWarningIcon: {\n    color: theme.palette.warning.main,\n  },\n  validationMessage: {\n    marginTop: theme.spacing(2),\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.body2.fontSize,\n  },\n}));\n\nconst EMPTY_BUILDING_TYPES: IBuildingOption[] = [];\n\ninterface IProps {\n  returnToSelection: () => void;\n}\n\nconst AiPath: React.FC<IProps> = ({\n  returnToSelection,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const atsApi = useAtsApi();\n  const dispatch = useDispatch();\n  const locale = useSelector(makeSelectLocale());\n  const buildingClassesMap = useSelector(makeSelectBuildingClasses());\n  const buildingTypesMap = useSelector(makeSelectBuildingTypes());\n\n  const [projects, setProjects] = React.useState<IProject[]>([\n    createProject(t('createNewProject.aiPath.defaultProjectName', { number: 1 })),\n  ]);\n  const [activeId, setActiveId] = React.useState<string | null>(null);\n  const [step, setStep] = React.useState<'upload' | 'review'>('upload');\n  const [requiredModalOpen, setRequiredModalOpen] = React.useState(false);\n  const [duplicateModalOpen, setDuplicateModalOpen] = React.useState(false);\n  const [requiredInvalidProjects, setRequiredInvalidProjects] = React.useState<Array<{ project: IProject; index: number }>>([]);\n  const [duplicateProjects, setDuplicateProjects] = React.useState<Array<{ project: IProject; index: number }>>([]);\n  const [validationLoading, setValidationLoading] = React.useState(false);\n  const [showRequiredErrors, setShowRequiredErrors] = React.useState(false);\n  const [countryOptions, setCountryOptions] = React.useState<ILocationOption[]>([]);\n  const [creationModalOpen, setCreationModalOpen] = React.useState(false);\n  const [projectsToCreate, setProjectsToCreate] = React.useState<IProject[]>([]);\n  const [pdfModalFile, setPdfModalFile] = React.useState<{ fileId: string; fileName: string; defaultPageNumber?: number; defaultCoordinates?: any } | null>(null);\n\n  const { startExtraction, clearAllPolling } = useExtraction(setProjects);\n\n  const isPdf = (f: IProjectFile) => f.uploadedFile?.mediaType === 'application/pdf';\n  const firstPdfId = (files: IProjectFile[]) => files.find(f => isPdf(f))?.id ?? null;\n\n  const sensors = useSensors(\n    useSensor(PointerSensor, {\n      activationConstraint: {\n        distance: 8,\n      },\n    }),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    })\n  );\n\n  // ── File upload ──────────────────────────────────────────────────────\n\n  const uploadFile = (projectId: string, fileId: string, file: File) => {\n    const fileUploadUrl = atsApi.callApi({\n      service: 'file',\n      endpoint: 'uploadFile',\n      urlOnly: true,\n      withToken: true,\n      withAppId: true,\n    }) as string;\n\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n    data.append('file', file);\n    data.append('type', 'file');\n\n    req.open('POST', fileUploadUrl);\n    req.setRequestHeader('X-Ats-Language', locale);\n\n    req.upload.addEventListener('progress', (e) => {\n      const percent = Math.round((e.loaded / e.total) * 100);\n      setProjects(prev => prev.map(p => {\n        if (p.id !== projectId) { return p; }\n        return {\n          ...p,\n          files: p.files.map(f =>\n            f.id === fileId ? { ...f, progress: percent } : f\n          ),\n        };\n      }));\n    });\n\n    req.onloadstart = () => {\n      setProjects(prev => prev.map(p => {\n        if (p.id !== projectId) { return p; }\n        return {\n          ...p,\n          files: p.files.map(f =>\n            f.id === fileId ? { ...f, isUploading: true } : f\n          ),\n        };\n      }));\n    };\n\n    req.addEventListener('loadend', () => {\n      const setFileError = (error: string) => {\n        setProjects(prev => prev.map(p => {\n          if (p.id !== projectId) { return p; }\n          return {\n            ...p,\n            files: p.files.map(f =>\n              f.id === fileId ? { ...f, isUploading: false, error } : f\n            ),\n          };\n        }));\n      };\n\n      const { payload, error: uploadError } = readUploadResponse(req);\n\n      if (uploadError) {\n        setFileError(uploadError.error\n          ? t('createNewProject.aiPath.uploadFailedWithError', { error: uploadError.error })\n          : t('createNewProject.aiPath.uploadFailed'));\n        return;\n      }\n\n      try {\n        const uploadedFile = payload.file.files[0];\n        setProjects(prev => prev.map(p => {\n          if (p.id !== projectId) { return p; }\n          const updatedFiles = p.files.map(f =>\n            f.id === fileId ? { ...f, isUploading: false, uploadedFile, progress: 100 } : f\n          );\n          const autoAssignSource = !p.sourceFileId && uploadedFile.mediaType === 'application/pdf';\n          return {\n            ...p,\n            files: updatedFiles,\n            sourceFileId: autoAssignSource ? fileId : p.sourceFileId,\n          };\n        }));\n      } catch (err) {\n        setFileError(t('createNewProject.aiPath.uploadFailed'));\n      }\n    });\n\n    req.send(data);\n  };\n\n  // ── Upload step handlers ─────────────────────────────────────────────\n\n  const handleFilesAccepted = (projectId: string, acceptedFiles: File[]) => {\n    const newFiles: IProjectFile[] = acceptedFiles.map(file => ({\n      id: generateFileId(),\n      file,\n      uploadedFile: null,\n      progress: 0,\n      error: null,\n      documentType: 'drawing' as DocumentType,\n      isUploading: false,\n    }));\n\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      const updatedFiles = [...p.files, ...newFiles];\n      return {\n        ...p,\n        files: updatedFiles,\n        sourceFileId: p.sourceFileId,\n      };\n    }));\n\n    newFiles.forEach(pf => {\n      uploadFile(projectId, pf.id, pf.file);\n    });\n  };\n\n  const handleRemoveFile = (projectId: string, fileId: string) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      const updatedFiles = p.files.filter(f => f.id !== fileId);\n      return {\n        ...p,\n        files: updatedFiles,\n        sourceFileId: p.sourceFileId === fileId\n          ? firstPdfId(updatedFiles)\n          : p.sourceFileId,\n      };\n    }));\n  };\n\n  const handleRemoveProject = (projectId: string) => {\n    setProjects(prev => {\n      const filtered = prev.filter(p => p.id !== projectId);\n      if (filtered.length === 0) {\n        return [createProject(t('createNewProject.aiPath.defaultProjectName', { number: 1 }))];\n      }\n      return filtered;\n    });\n  };\n\n  const handleSetSourceFile = (projectId: string, fileId: string) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      const file = p.files.find(f => f.id === fileId);\n      if (!file || !isPdf(file)) { return p; }\n      return { ...p, sourceFileId: fileId };\n    }));\n  };\n\n  const handleSetDocumentType = (projectId: string, fileId: string, type: DocumentType) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      return {\n        ...p,\n        files: p.files.map(f =>\n          f.id === fileId ? { ...f, documentType: type } : f\n        ),\n      };\n    }));\n  };\n\n  const handleAddProject = () => {\n    const nextNumber = projects.length + 1;\n    setProjects(prev => [...prev, createProject(t('createNewProject.aiPath.defaultProjectName', { number: nextNumber }))]);\n  };\n\n  // ── Drag and drop ────────────────────────────────────────────────────\n\n  const findProjectByFileId = (fileId: string): IProject | undefined => {\n    return projects.find(p => p.files.some(f => f.id === fileId));\n  };\n\n  const handleDragStart = (event: DragStartEvent) => {\n    setActiveId(event.active.id as string);\n    document.body.style.userSelect = 'none';\n  };\n\n  const handleDragOver = (event: DragOverEvent) => {\n    const { active, over } = event;\n    if (!over) { return; }\n\n    const activeFileId = active.id as string;\n    const overFileId = over.id as string;\n\n    const activeProject = findProjectByFileId(activeFileId);\n    const overProject = findProjectByFileId(overFileId);\n\n    if (!activeProject || !overProject || activeProject.id === overProject.id) {\n      return;\n    }\n\n    setProjects(prev => {\n      const file = activeProject.files.find(f => f.id === activeFileId);\n      if (!file) { return prev; }\n\n      return prev.map(p => {\n        if (p.id === activeProject.id) {\n          const updatedFiles = p.files.filter(f => f.id !== activeFileId);\n          return {\n            ...p,\n            files: updatedFiles,\n            sourceFileId: p.sourceFileId === activeFileId\n              ? firstPdfId(updatedFiles)\n              : p.sourceFileId,\n          };\n        }\n        if (p.id === overProject.id) {\n          const overIndex = p.files.findIndex(f => f.id === overFileId);\n          const newFiles = [...p.files];\n          newFiles.splice(overIndex, 0, file);\n          return {\n            ...p,\n            files: newFiles,\n            sourceFileId: p.sourceFileId || (isPdf(file) ? file.id : null),\n          };\n        }\n        return p;\n      });\n    });\n  };\n\n  const handleDragEnd = (event: DragEndEvent) => {\n    const { active, over } = event;\n    setActiveId(null);\n    document.body.style.userSelect = '';\n\n    if (!over || active.id === over.id) { return; }\n\n    const activeFileId = active.id as string;\n    const overFileId = over.id as string;\n\n    const project = findProjectByFileId(activeFileId);\n    if (!project) { return; }\n\n    const overProjectCheck = findProjectByFileId(overFileId);\n    if (!overProjectCheck || project.id !== overProjectCheck.id) { return; }\n\n    setProjects(prev => prev.map(p => {\n      if (p.id !== project.id) { return p; }\n      const oldIndex = p.files.findIndex(f => f.id === activeFileId);\n      const newIndex = p.files.findIndex(f => f.id === overFileId);\n      if (oldIndex === -1 || newIndex === -1) { return p; }\n\n      const newFiles = [...p.files];\n      const [moved] = newFiles.splice(oldIndex, 1);\n      newFiles.splice(newIndex, 0, moved);\n      return { ...p, files: newFiles };\n    }));\n  };\n\n  // ── Review step handlers ─────────────────────────────────────────────\n\n  const handleToggleProjectSelected = (projectId: string) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      return { ...p, selected: !p.selected };\n    }));\n  };\n\n  const handleUpdateExtractionData = (\n    projectId: string,\n    field: keyof IExtractionData,\n    value: any,\n  ) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId || !p.extractionData) { return p; }\n      return {\n        ...p,\n        extractionData: { ...p.extractionData, [field]: value },\n      };\n    }));\n  };\n\n  const handleContactEdited = (contactId: number | string, newContactData: any) => {\n    setProjects(prev => prev.map(p => {\n      if (!p.extractionData) { return p; }\n      const architectId = p.extractionData.architect?.id || p.extractionData.architect?.get?.('id');\n      const engineerId = p.extractionData.engineer?.id || p.extractionData.engineer?.get?.('id');\n      const matchesArchitect = architectId != null && String(architectId) === String(contactId);\n      const matchesEngineer = engineerId != null && String(engineerId) === String(contactId);\n      if (!matchesArchitect && !matchesEngineer) { return p; }\n      return {\n        ...p,\n        extractionData: {\n          ...p.extractionData,\n          architect: matchesArchitect ? newContactData : p.extractionData.architect,\n          engineer: matchesEngineer ? newContactData : p.extractionData.engineer,\n        },\n      };\n    }));\n  };\n\n  const handleRenameProject = (projectId: string, name: string) => {\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      return { ...p, name };\n    }));\n  };\n\n  const handleBuildingClassChange = (projectId: string, classId: string | number) => {\n    dispatch(new GetBuildingTypesAction(classId));\n  };\n\n  const handleRetryWithNewFile = (projectId: string, file: File) => {\n    const newFile: IProjectFile = {\n      id: generateFileId(),\n      file,\n      uploadedFile: null,\n      progress: 0,\n      error: null,\n      documentType: 'drawing' as DocumentType,\n      isUploading: false,\n    };\n\n    setProjects(prev => prev.map(p => {\n      if (p.id !== projectId) { return p; }\n      const oldSourceFileId = p.sourceFileId;\n      const updatedFiles = p.files.map(f =>\n        f.id === oldSourceFileId ? newFile : f\n      );\n      return {\n        ...p,\n        files: updatedFiles,\n        sourceFileId: newFile.id,\n        extractionStatus: 'idle' as const,\n        extractionError: null,\n        extractionData: null,\n      };\n    }));\n\n    uploadFile(projectId, newFile.id, file);\n  };\n\n  const handleConfirmRetry = (projectId: string) => {\n    const project = projects.find(p => p.id === projectId);\n    if (project) {\n      startExtraction(project);\n    }\n  };\n\n  // ── Step navigation ──────────────────────────────────────────────────\n\n  const allFiles = projects.flatMap(p => p.files);\n  const hasUploadedFiles = allFiles.some(f => f.uploadedFile != null);\n  const allUploaded = allFiles.length > 0 && allFiles.every(f => f.uploadedFile != null);\n  const allHaveSourceFile = projects.every(p => p.files.length === 0 || p.sourceFileId != null);\n  const isUploading = allFiles.some(f => f.isUploading);\n  const canContinue = hasUploadedFiles && allUploaded && allHaveSourceFile && !isUploading;\n\n  const handleContinue = () => {\n    if (step === 'upload') {\n\n      const projectsWithFiles = projects.filter(p => p.files.length > 0);\n\n      const projectIdsNeedingExtraction: string[] = [];\n      const updatedProjects = projectsWithFiles.map(project => {\n        const sourceFile = project.files.find(f => f.id === project.sourceFileId);\n        if (!sourceFile?.uploadedFile) { return project; }\n\n        const alreadyExtracted = project.extractionStatus === 'completed'\n          && project.lastExtractedSourceUploadedFileId === sourceFile.uploadedFile.id;\n\n        if (alreadyExtracted) {\n          if (project.highlightedFileServerId) {\n            const hFile = buildHighlightedFile(\n              project.highlightedFileServerId,\n              project.highlightedFileName || sourceFile.file.name,\n            );\n            return { ...project, files: [hFile, ...project.files], highlightedFileLocalId: hFile.id };\n          }\n          return project;\n        }\n\n        projectIdsNeedingExtraction.push(project.id);\n        return {\n          ...project,\n          extractionId: null,\n          extractionStatus: 'idle' as const,\n          extractionProgress: 0,\n          extractionError: null,\n          selected: false,\n          extractionData: null,\n          lastExtractedSourceUploadedFileId: null,\n          highlightedFileServerId: null,\n          highlightedFileName: null,\n          extractionCoordinates: null,\n        };\n      });\n\n      setProjects(updatedProjects);\n      setStep('review');\n\n      updatedProjects.forEach(project => {\n        if (!projectIdsNeedingExtraction.includes(project.id)) { return; }\n        const sourceFile = project.files.find(f => f.id === project.sourceFileId);\n        if (sourceFile?.uploadedFile) {\n          startExtraction(project);\n        }\n      });\n    }\n  };\n\n  const handleBackToUpload = () => {\n    clearAllPolling();\n\n    setProjects(prev => prev.map(p => {\n      const files = p.highlightedFileLocalId\n        ? p.files.filter(f => f.id !== p.highlightedFileLocalId)\n        : p.files;\n\n      if (p.extractionStatus === 'completed') {\n        return { ...p, files, highlightedFileLocalId: null };\n      }\n\n      return {\n        ...p,\n        files,\n        highlightedFileLocalId: null,\n        extractionId: null,\n        extractionStatus: 'idle' as const,\n        extractionProgress: 0,\n        extractionError: null,\n        selected: false,\n        extractionData: null,\n        lastExtractedSourceUploadedFileId: null,\n        highlightedFileServerId: null,\n        highlightedFileName: null,\n        extractionCoordinates: null,\n      };\n    }));\n    setStep('upload');\n  };\n\n  const handleReturnToSelection = () => {\n    clearAllPolling();\n    returnToSelection();\n  };\n\n  // ── Creation ─────────────────────────────────────────────────────────\n\n  const startCreation = (validProjects: IProject[]) => {\n    setProjectsToCreate(validProjects);\n    setCreationModalOpen(true);\n  };\n\n  const handleCreationComplete = (successIds: string[]) => {\n    setProjects(prev => prev.map(p =>\n      successIds.includes(p.id) ? { ...p, selected: false } : p\n    ));\n  };\n\n  const handleDone = () => {\n    dispatch(push(PROJECT_LIST_PATH, { refetchProjects: (new Date()).getTime() }));\n  };\n\n  const handleCreate = async () => {\n    const selected = projects.filter(p => p.selected);\n\n    // Local duplicate address check: first occurrence is unique, subsequent are duplicates\n    const seenAddresses = new Set<string>();\n    const localDuplicateIds = new Set<string>();\n    for (const p of selected) {\n      const address = p.extractionData?.address?.trim().toLowerCase();\n      if (address) {\n        if (seenAddresses.has(address)) {\n          localDuplicateIds.add(p.id);\n        } else {\n          seenAddresses.add(address);\n        }\n      }\n    }\n\n    // Remote duplicate address check\n    setValidationLoading(true);\n    const remoteDuplicateIds = new Set<string>();\n    const toCheckRemotely = selected.filter(p => !localDuplicateIds.has(p.id) && p.extractionData?.address?.trim());\n    await Promise.all(toCheckRemotely.map(async (p) => {\n      try {\n        const res = await (atsApi.callApi({\n          service: 'project',\n          endpoint: 'searchProjects',\n          body: {\n            filters: { address: { eq: p.extractionData!.address } },\n            options: { limit: 1 },\n          },\n        }) as Promise<any>);\n        const found = res?.payload?.project?.projects;\n        if (found && found.length > 0) {\n          remoteDuplicateIds.add(p.id);\n        }\n      } catch (_) {\n        // ignore remote check failures\n      }\n    }));\n    setValidationLoading(false);\n\n    const allDuplicateIds = new Set([...localDuplicateIds, ...remoteDuplicateIds]);\n    const duplicates = selected\n      .filter(p => allDuplicateIds.has(p.id))\n      .map(p => ({ project: p, index: projects.indexOf(p) + 1 }));\n    const requiredInvalid = selected\n      .filter(p => !isProjectValid(p))\n      .map(p => ({ project: p, index: projects.indexOf(p) + 1 }));\n\n    if (requiredInvalid.length === 0 && duplicates.length === 0) {\n      startCreation(selected);\n      return;\n    }\n    setDuplicateProjects(duplicates);\n    setRequiredInvalidProjects(requiredInvalid);\n    if (requiredInvalid.length > 0) {\n      setShowRequiredErrors(true);\n      setRequiredModalOpen(true);\n    } else {\n      setDuplicateModalOpen(true);\n    }\n  };\n\n  const handleSkipRequiredAndProceed = () => {\n    setRequiredModalOpen(false);\n    const requiredInvalidIds = new Set(requiredInvalidProjects.map(({ project }) => project.id));\n    const filteredDuplicates = duplicateProjects.filter(({ project }) => !requiredInvalidIds.has(project.id));\n    if (filteredDuplicates.length > 0) {\n      setDuplicateProjects(filteredDuplicates);\n      setDuplicateModalOpen(true);\n    } else {\n      const validSelected = projects.filter(p => p.selected && isProjectValid(p));\n      setShowRequiredErrors(false);\n      startCreation(validSelected);\n    }\n  };\n\n  const handleSkipDuplicates = () => {\n    const duplicateIds = new Set(duplicateProjects.map(({ project }) => project.id));\n    const validSelected = projects.filter(p => p.selected && isProjectValid(p) && !duplicateIds.has(p.id));\n    setDuplicateModalOpen(false);\n    setShowRequiredErrors(false);\n    startCreation(validSelected);\n  };\n\n  const handleCreateAll = () => {\n    const validSelected = projects.filter(p => p.selected && isProjectValid(p));\n    setDuplicateModalOpen(false);\n    setShowRequiredErrors(false);\n    startCreation(validSelected);\n  };\n\n  // ── Side effects ─────────────────────────────────────────────────────\n\n  React.useEffect(() => {\n    if (step === 'review') {\n      dispatch(new GetBuildingClassesAction());\n      (atsApi.callApi({ service: 'list', endpoint: 'getCountries' }) as Promise<any>)\n        .then((res: any) => {\n          const items = res?.payload?.list?.listItems || [];\n          setCountryOptions(items.map((item: any) => ({ id: item.id, value: item.value })));\n        })\n        .catch(() => setCountryOptions([]));\n    }\n  }, [step]);\n\n  React.useEffect(() => {\n    if (step !== 'review' || !buildingClassesMap) { return; }\n    projects.forEach(p => {\n      const classId = p.extractionData?.buildingClass?.id;\n      if (classId != null) {\n        dispatch(new GetBuildingTypesAction(classId));\n      }\n    });\n  }, [step, projects.map(p => p.extractionData?.buildingClass?.id).join(',')]);\n\n  // ── Derived state ────────────────────────────────────────────────────\n\n  const buildingClassOptions = React.useMemo(() => {\n    if (!buildingClassesMap || buildingClassesMap.isEmpty()) { return []; }\n    return buildingClassesMap\n      .valueSeq()\n      .map((bc: any) => ({ id: bc.get('id'), value: bc.get('value') }))\n      .toArray();\n  }, [buildingClassesMap]);\n\n  const buildingTypeOptionsMap = React.useMemo(() => {\n    if (!buildingTypesMap) { return {} as Record<string, IBuildingOption[]>; }\n    const map: Record<string, IBuildingOption[]> = {};\n    buildingTypesMap.forEach((types: any, classId: number) => {\n      map[String(classId)] = types.toJS() as IBuildingOption[];\n    });\n    return map;\n  }, [buildingTypesMap]);\n\n  const activeFile = activeId\n    ? projects.flatMap(p => p.files).find(f => f.id === activeId)\n    : null;\n\n  const isExtracting = projects.some(p => p.extractionStatus === 'pending');\n  const hasSelectedProjects = projects.some(p => p.selected);\n  const canCreate = step === 'review' && hasSelectedProjects && !isExtracting;\n\n  // ── Render ───────────────────────────────────────────────────────────\n\n  return (\n    <div className={`${classes.container} ${step === 'upload' ? classes.containerUpload : classes.containerReview}`}>\n      <Typography variant='h5' className={classes.title}>\n        {step === 'upload' ? t('createNewProject.aiPath.title') : t('createNewProject.aiPath.reviewTitle')}\n      </Typography>\n      <Typography variant='body2' className={classes.subtitle}>\n        {step === 'upload' ? t('createNewProject.aiPath.subtitle') : t('createNewProject.aiPath.reviewSubtitle')}\n      </Typography>\n\n      {step === 'upload' ? (\n        <DndContext\n          sensors={sensors}\n          collisionDetection={closestCenter}\n          onDragStart={handleDragStart}\n          onDragOver={handleDragOver}\n          onDragEnd={handleDragEnd}\n        >\n          <div className={classes.projectCardsContainer}>\n            {projects.map((project) => (\n              <ProjectCardUpload\n                key={project.id}\n                project={project}\n                onFilesAccepted={handleFilesAccepted}\n                onRemoveFile={handleRemoveFile}\n                onRemoveProject={handleRemoveProject}\n                onSetSourceFile={handleSetSourceFile}\n                onSetDocumentType={handleSetDocumentType}\n                showSourceFileError={project.files.some(f => f.uploadedFile != null) && !project.sourceFileId}\n              />\n            ))}\n            <div\n              className={classes.addProjectButton}\n              onClick={handleAddProject}\n            >\n              <CreateNewFolderIcon className={classes.addIcon} />\n              <Typography variant='body2' className={classes.addText}>\n                {t('createNewProject.aiPath.addNewProject')}\n              </Typography>\n            </div>\n          </div>\n          <DragOverlay>\n            {activeFile ? (\n              <Box\n                style={{\n                  padding: 8,\n                  backgroundColor: '#fff',\n                  border: '1px solid #ccc',\n                  borderRadius: 4,\n                  boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n                }}\n              >\n                <Typography variant='body2'>{activeFile.file.name}</Typography>\n              </Box>\n            ) : null}\n          </DragOverlay>\n        </DndContext>\n      ) : (\n        <div className={classes.projectCardsContainer}>\n          {projects.map((project, i) => (\n            <ProjectCardReview\n              key={project.id}\n              index={i + 1}\n              project={project}\n              onToggleSelected={handleToggleProjectSelected}\n              onRetryWithNewFile={handleRetryWithNewFile}\n              onConfirmRetry={handleConfirmRetry}\n              onSetDocumentType={handleSetDocumentType}\n              onRenameProject={handleRenameProject}\n              onUpdateExtractionData={handleUpdateExtractionData}\n              onContactEdited={handleContactEdited}\n              onOpenPdfModal={({ fileId, fileName, defaultPageNumber, defaultCoordinates }) => setPdfModalFile({ fileId, fileName, defaultPageNumber, defaultCoordinates })}\n              buildingClassOptions={buildingClassOptions}\n              buildingTypeOptions={buildingTypeOptionsMap[String(project.extractionData?.buildingClass?.id)] || EMPTY_BUILDING_TYPES}\n              onBuildingClassChange={handleBuildingClassChange}\n              showRequiredErrors={showRequiredErrors && project.selected}\n              countryOptions={countryOptions}\n            />\n          ))}\n        </div>\n      )}\n\n      <div className={classes.footer}>\n        <Button\n          className={classes.backButton}\n          onClick={step === 'upload' ? handleReturnToSelection : handleBackToUpload}\n        >\n          {t('formButtons.back')}\n        </Button>\n        {step === 'upload' ? (\n          <Button\n            variant='contained'\n            color='primary'\n            disabled={!canContinue}\n            onClick={handleContinue}\n          >\n            {t('formButtons.continue')}\n          </Button>\n        ) : (\n          <Button\n            variant='contained'\n            color='primary'\n            disabled={!canCreate || validationLoading}\n            onClick={handleCreate}\n          >\n            {t('createNewProject.aiPath.create')}\n          </Button>\n        )}\n      </div>\n\n      {/* Required fields modal */}\n      <Dialog\n        open={requiredModalOpen}\n        onClose={() => setRequiredModalOpen(false)}\n        PaperProps={{ style: { maxWidth: 672 } }}\n      >\n        <DialogContent style={{ paddingTop: 24 }}>\n          <Box style={{ textAlign: 'center', marginBottom: 16 }}>\n            <WarningRoundedIcon fontSize='large' className={classes.validationWarningIcon} />\n          </Box>\n          <div style={{ overflowY: 'auto', maxHeight: 220 }}>\n            <Box className={classes.validationMessage}>\n              <Typography variant='body2'>\n                {t('createNewProject.aiPath.validationDuplicatePrefix')} <strong>{t('createNewProject.aiPath.validationRequiredBold')}</strong>:\n              </Typography>\n              <div style={{ marginTop: 6 }}>\n                {requiredInvalidProjects.map(({ project, index }) => (\n                  <div key={project.id} style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n                    <CloseIcon color='error' style={{ fontSize: 16 }} />\n                    <Typography variant='body2' component='span' style={{ whiteSpace: 'nowrap' }}>\n                      {t('createNewProject.aiPath.validationProjectLabel', { index })}{': '}\n                    </Typography>\n                    <Typography variant='body2' component='span' color='primary'>\n                      {project.name}\n                    </Typography>\n                  </div>\n                ))}\n              </div>\n            </Box>\n          </div>\n        </DialogContent>\n        <DialogActions style={{ justifyContent: 'center', paddingBottom: 24 }}>\n          <Button\n            variant='contained'\n            color='primary'\n            onClick={() => setRequiredModalOpen(false)}\n          >\n            {t('createNewProject.aiPath.validationReturn')}\n          </Button>\n          {projects.some(p => p.selected && isProjectValid(p)) && (\n            <Button\n              variant='outlined'\n              color='primary'\n              onClick={handleSkipRequiredAndProceed}\n            >\n              {t('createNewProject.aiPath.validationSkipAndProceed')}\n            </Button>\n          )}\n        </DialogActions>\n      </Dialog>\n\n      {/* Duplicate projects modal */}\n      <Dialog\n        open={duplicateModalOpen}\n        onClose={() => setDuplicateModalOpen(false)}\n        PaperProps={{ style: { maxWidth: 632 } }}\n      >\n        <DialogContent style={{ paddingTop: 24 }}>\n          <Box style={{ textAlign: 'center', marginBottom: 16 }}>\n            <WarningRoundedIcon fontSize='large' className={classes.validationWarningIcon} />\n          </Box>\n          <div style={{ overflowY: 'auto', maxHeight: 220 }}>\n            <Box className={classes.validationMessage}>\n              <Typography variant='body2'>\n                {t('createNewProject.aiPath.validationDuplicatePrefix')}{' '}\n                <strong>{t('createNewProject.aiPath.validationDuplicateAddressBold')}</strong>:\n              </Typography>\n              <div style={{ marginTop: 6 }}>\n                {duplicateProjects.map(({ project, index }) => (\n                  <div key={project.id} style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n                    <CloseIcon color='error' style={{ fontSize: 16 }} />\n                    <Typography variant='body2' component='span' style={{ whiteSpace: 'nowrap' }}>\n                      {t('createNewProject.aiPath.validationProjectLabel', { index })}{': '}\n                    </Typography>\n                    <Typography variant='body2' component='span' color='primary'>\n                      {project.name}\n                    </Typography>\n                  </div>\n                ))}\n              </div>\n            </Box>\n          </div>\n        </DialogContent>\n        <DialogActions style={{ justifyContent: 'center', paddingBottom: 24 }}>\n          <Button\n            variant='contained'\n            color='primary'\n            onClick={() => setDuplicateModalOpen(false)}\n          >\n            {t('createNewProject.aiPath.validationReturn')}\n          </Button>\n          {projects.some(p => p.selected && isProjectValid(p) && !duplicateProjects.some(d => d.project.id === p.id)) && (\n            <Button\n              variant='outlined'\n              color='primary'\n              onClick={handleSkipDuplicates}\n            >\n              {t('createNewProject.aiPath.validationSkipDuplicates')}\n            </Button>\n          )}\n          <Button\n            variant='outlined'\n            color='primary'\n            onClick={handleCreateAll}\n          >\n            {t('createNewProject.aiPath.validationCreateAll')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n\n      <ControlledDrawer\n        localKey={DRAWER_ID}\n        menuComponent={<UserContactDrawerDetails drawerId={DRAWER_ID} />}\n      />\n\n      <CreationProgressModal\n        open={creationModalOpen}\n        projectsToCreate={projectsToCreate}\n        onComplete={handleCreationComplete}\n        onClose={() => setCreationModalOpen(false)}\n        onDone={handleDone}\n      />\n\n      {pdfModalFile && (\n        <PDFModal\n          fileId={pdfModalFile.fileId}\n          fileName={pdfModalFile.fileName}\n          defaultScale={1}\n          defaultMaximized={true}\n          defaultPageNumber={pdfModalFile.defaultPageNumber}\n          defaultCoordinates={pdfModalFile.defaultCoordinates}\n          onClose={() => setPdfModalFile(null)}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default AiPath;\n","import * as React from 'react';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  PropTypes,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  Button,\n  Dialog,\n  Grid,\n  Toolbar,\n  AppBar,\n  IconButton,\n  Typography,\n  Slide,\n  Theme,\n  WithTheme\n} from '@material-ui/core';\n\nimport CloseIcon from '@material-ui/icons/Close';\n\nimport {\n  TransitionProps\n} from '@material-ui/core/transitions/transition';\n\nimport {\n  Image,\n} from '../../components';\nimport {\n  CreateNewProjectFormStepper,\n} from '../../containers';\nimport { AtsSvgFolder } from '../../components/AtsSvg';\nimport projectImageGreen from '../../images/projectGreen.svg';\nimport {\n  CreationMethod,\n  ProjectTrackerCreateProjectFormVariant\n} from './constants';\nimport { Set } from 'immutable';\nimport withProjectId, {\n  WithProjectId,\n  ComponentProps as WithProjectIdComponentProps,\n} from '../../hoc/withProjectId';\nimport { singleOrArray, IAction } from 'ats-utils/src';\nimport {\n  makeSelectConfigAtsSvgProps,\n  makeSelectConfigUiOverridesAppBarColor,\n  makeSelectIsAtsSpecTool,\n  makeSelectSite\n} from '../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectProjectMasterSavingAllow, makeSelectSelectedProjectId } from '../../modules/ProjectModule/selectors';\nimport { push } from 'connected-react-router';\nimport { NOT_FOUND_PATH } from '../../constants';\nimport DeleteModalDialog from '../../components/DeleteModalDialog';\nimport { SiteName } from '../../constants';\nimport CreationMethodSelector from './CreationMethodSelector';\nimport AiPath from './AiPath';\nimport { RouteComponentProps } from 'react-router';\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n  return <Slide direction='up' ref={ref} {...props} />;\n});\n\n\nconst styles = (theme: Theme): StyleRules => {\n  return {\n    appBar: {\n      position: 'relative',\n    },\n    subtitle: {\n      flex: 1,\n      color: theme.palette.common.white\n    },\n    title: {\n      flex: 1\n    },\n    icon: {\n      width: 72,\n      height: 72\n    },\n    titleContainer: {\n      margin: `${theme.spacing() * 2.5}px 0`\n    },\n    iconContainer: {\n      margin: `0 ${theme.spacing() * 2.5}px 0 0`\n    }\n  };\n};\n\ntype IToggleFunction = () => void;\n\ninterface IProjectModalComponentCommonProps {\n  variantSet?: Set<ProjectTrackerCreateProjectFormVariant>;\n  isTestProject: boolean;\n  onSubmit: ({\n    values,\n    projectId,\n    projectValues,\n    wholeTemplateSelected,\n    trackProject,\n   }) => void;\n  onClose?: () => void;\n  filterOutCountryIds?: number[];\n  enabledCountryIds?: number[];\n}\n\ninterface IProjectModalProps  {\n  dispatch: React.Dispatch<IAction>;\n  selectedProjectId?: number;\n  savingAllow: boolean;\n  site: SiteName;\n  isAtsSpecTool: boolean;\n  configAtsSvgProps: object;\n  appBarColor: PropTypes.Color;\n}\n\ninterface IModal {\n  isOpen: boolean;\n  toggleOpenCreateProjectModal: (arg: boolean) => void;\n}\n\ninterface IUncontrolledModal {\n  open?: never;\n  toggle?: never;\n}\n\ninterface IControlledModal {\n  open: boolean;\n  toggle: (o: boolean) => IToggleFunction;\n}\n\ntype ProjectModalComponentProps =  IProjectModalComponentCommonProps & (IUncontrolledModal | IControlledModal);\n\ntype ProjectModalProps = IProjectModalProps & WithProjectId & ProjectModalComponentProps & IModal & WithTranslation & WithTheme & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IProjectModalState {\n  open: boolean;\n  discardModalOpen: boolean;\n  creationMethod: null | CreationMethod;\n}\n\nclass CreateNewProjectModal extends React.Component<\n  ProjectModalProps,\n  IProjectModalState\n> {\n  public state = {\n    open: false,\n    discardModalOpen: false,\n    creationMethod: CreationMethod.MANUAL,\n  };\n\n  public componentDidMount(): void {\n    const {\n      variantSet,\n    } = this.props;\n\n    const open = this.props.open ?? this.state.open;\n\n    // set creationMethod to null if it's in variantSet and dialog is opened on mount.\n    if (variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_CREATION_METHOD_SELECTION) && open) {\n      this.setState({ creationMethod: null });\n    } else {\n      this.setState({ creationMethod: CreationMethod.MANUAL });\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      dispatch,\n      projectId,\n      selectedProjectId,\n      variantSet,\n    } = this.props;\n\n    const open = this.props.open ?? this.state.open;\n    const prevOpen = prevProps.open ?? prevState.open;\n\n    // added a check to make sure that 'prevProps.selectedProjectId !== selectedProjectId' to prevent a race condition with reduxw where a comparison would be made before the Redux store was updated\n    if (projectId !== -1 && selectedProjectId !== -1 && projectId !== selectedProjectId && prevProps.selectedProjectId !== selectedProjectId) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n\n    // reset creationMethod to null if it's in variantSet and when creating new project and dialog is being opened.\n    if (open && !prevOpen) {\n      this.setState({ creationMethod: variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_CREATION_METHOD_SELECTION) ? null : CreationMethod.MANUAL });\n    }\n  }\n\n  public openDiscardModal = () => this.setState({discardModalOpen: true});\n\n  public modalTitle = () => {\n    const {\n      variantSet,\n      isTestProject,\n      t,\n    } = this.props;\n\n    const editMode = variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_EDIT_MODE);\n\n    if (editMode) {\n      return isTestProject\n        ? t('createNewProject.TestEdit')\n        : t('createNewProject.Edit');\n    } else {\n      return isTestProject\n        ? t('createNewProject.TestTitle')\n        : t('createNewProject.Title');\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      open: controlledOpen,\n      toggle = this.toggleDialog,\n      variantSet = Set(),\n      project,\n      projectId,\n      site,\n      theme,\n      savingAllow,\n      isTestProject,\n      isAtsSpecTool,\n      onSubmit,\n      configAtsSvgProps,\n      filterOutCountryIds,\n      enabledCountryIds,\n      appBarColor,\n      location,\n    } = this.props;\n\n    const {\n      open: uncontrolledOpen,\n      creationMethod,\n    } = this.state;\n\n    const controlled = controlledOpen != null;\n    const open = controlled ? controlledOpen : uncontrolledOpen;\n    const editMode = variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_EDIT_MODE);\n    const withCreationMethodSelection = variantSet?.has(ProjectTrackerCreateProjectFormVariant.WITH_CREATION_METHOD_SELECTION);\n    const useCreationMethodSelection = withCreationMethodSelection && !editMode;\n    const isInCreationSelectionStep = useCreationMethodSelection && creationMethod == null;\n\n    return (\n      <div>\n        { !controlled &&\n          <Button\n            onClick={this.toggleDialog(true)}\n          >\n            {\n              this.modalTitle()\n            }\n          </Button>\n        }\n\n        <Dialog\n          fullScreen={true}\n          open={open || false}\n          onClose={this.openDiscardModal}\n          TransitionComponent={Transition}\n          className={!editMode && !isTestProject && 'createProjectTour-1' || ''}\n        >\n          <AppBar\n            className={classes.appBar}\n            color={appBarColor ? appBarColor : 'primary'}\n          >\n            <Toolbar>\n              <IconButton\n                color='inherit'\n                onClick={this.openDiscardModal}\n                aria-label='Close'\n                disabled={!savingAllow}\n              >\n                <CloseIcon />\n              </IconButton>\n              <Typography\n                variant='h6'\n                className={classes.subtitle}\n              >\n                {\n                  this.modalTitle()\n                }\n              </Typography>\n            </Toolbar>\n          </AppBar>\n          <Grid\n            container={true}\n            justify='center'\n            alignItems='center'\n            className={classes.titleContainer}\n          >\n            <Grid\n              item={true}\n              className={classes.iconContainer}\n            >\n              {\n                site === SiteName.spec\n                  ? <AtsSvgFolder\n                      width='72'\n                      height='72'\n                      color={{\n                        backgroundColor: isAtsSpecTool ? theme.palette.secondary[200] : theme.palette.primary[200],\n                        shadowColor: isAtsSpecTool ? theme.palette.secondary.main : theme.palette.primary.main\n                      }}\n                      {...configAtsSvgProps}\n                    />\n                  : <Image\n                      width={72}\n                      className={classes.icon}\n                      src={projectImageGreen}\n                    />\n              }\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Typography\n                variant='h4'\n                className={classes.title}\n              >\n                {\n                  this.modalTitle()\n                }\n              </Typography>\n            </Grid>\n          </Grid>\n          {\n            isInCreationSelectionStep && (\n              <Typography\n                variant='h6'\n                align='center'\n              >\n                {t('createNewProject.creationMethodSelectionDescription')}\n              </Typography>\n            )\n          }\n          {\n            creationMethod === null\n              ? (\n                  <CreationMethodSelector\n                    setCreationMethod={(method) => this.setState({ creationMethod: method })}\n                  />\n                )\n              : creationMethod === CreationMethod.MANUAL\n                ? (\n                    <CreateNewProjectFormStepper\n                      isTestProject={isTestProject}\n                      variantSet={variantSet}\n                      project={editMode ? project : undefined}\n                      projectId={editMode ? projectId : -1}\n                      onSubmit={onSubmit}\n                      filterOutCountryIds={filterOutCountryIds}\n                      enabledCountryIds={enabledCountryIds}\n                      backToSelection={useCreationMethodSelection ? () => this.setState({ creationMethod: null }) : undefined}\n                    />\n                  )\n                : (\n                    <AiPath returnToSelection={() => this.setState({ creationMethod: null })} />\n                  )\n          }\n        </Dialog>\n        <DeleteModalDialog\n          open={this.state.discardModalOpen}\n          contentText={t('createNewProject.discardChanges')}\n          dialogProps={{\n            maxWidth: 'xs',\n            fullWidth: true\n          }}\n          buttonOk={t('createNewProject.discard')}\n          toggleDeleteModal={() => this.setState({discardModalOpen: false})}\n          handleDelete={() => {\n            this.setState({\n              discardModalOpen: false\n            });\n            toggle(false)();\n            }\n          }\n          withLoading={false}\n        />\n      </div>\n    );\n  }\n\n  private toggleDialog = (open: boolean) => () => {\n    const { onClose } = this.props;\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    this.setState({\n      open: open != null ? open : !uncontrolledOpen\n    });\n    if (open === false) {\n      onClose?.();\n    }\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  site: makeSelectSite(),\n  selectedProjectId: makeSelectSelectedProjectId(),\n  savingAllow: makeSelectProjectMasterSavingAllow(),\n  isAtsSpecTool: makeSelectIsAtsSpecTool(),\n  configAtsSvgProps: makeSelectConfigAtsSvgProps(),\n  appBarColor: makeSelectConfigUiOverridesAppBarColor(),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ProjectModalComponentProps & WithProjectIdComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withProjectId({withProject: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CreateNewProjectModal);\n","import React, { useState, useEffect } from 'react';\nimport {\n  Dialog,\n  DialogContent,\n  DialogTitle,\n  Grid,\n  IconButton,\n  TextField,\n  Typography,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport Project from '../../../models/Project';\nimport { UpdateProjectAssignedToAction } from '../../../modules/ProjectModule/actions';\nimport { ProjectVisibility } from '../../../modules/AccountModule/constants';\nimport UserOfficeDisplay, { renderUserOfficeTags } from '../../../components/UserOfficeDisplay';\nimport useAssignableUserSearch from '../../../hooks/useAssignableUserSearch';\nimport useTogglePaper from '../../../hooks/useTogglePaper';\nimport useTightTooltip from '../../../hooks/useTightTooltip';\n\ninterface IAssignProjectToModalProps {\n  open: boolean;\n  onClose: () => void;\n  project: IMap<Project> | any;\n}\n\nconst AssignProjectToModal: React.FC<IAssignProjectToModalProps> = ({ open, onClose, project }) => {\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const canSearchFirm = project.get('visibility') !== ProjectVisibility.OFFICE_ONLY;\n\n  const {\n    userOptions,\n    setSearchTerm,\n    searchUsersFromFirm,\n    setSearchUsersFromFirm,\n  } = useAssignableUserSearch({ canSearchFirm, active: open });\n  const tightTooltipClasses = useTightTooltip();\n  const [selectedUsers, setSelectedUsers] = useState<any[]>([]);\n\n  // Prepopulate the selection on open; clear it on close. Kept separate from the search hook so\n  // toggling the scope re-searches without clobbering the current selection.\n  useEffect(() => {\n    if (open) {\n      const assignedTo = project.get('assignedTo');\n      setSelectedUsers(assignedTo && assignedTo.size > 0 ? assignedTo.toJS() : []);\n    } else {\n      setSelectedUsers([]);\n    }\n  }, [open]);\n\n  const AssignPaper = useTogglePaper({\n    enabled: canSearchFirm,\n    checked: !searchUsersFromFirm,\n    label: t('quoteInfo.showMyOfficeOnly'),\n    onChange: (checked) => setSearchUsersFromFirm(!checked),\n  });\n\n  return (\n    <Dialog open={open} onClose={onClose} fullWidth={true} maxWidth='xs'>\n      <DialogTitle disableTypography={true}>\n        <Grid container={true} justify='space-between' alignItems='center'>\n          <Typography variant='h6'>{t('projectList.assignProjectToTitle')}</Typography>\n          <IconButton size='small' onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n      </DialogTitle>\n      <DialogContent style={{ marginBottom: 24 }}>\n        <Autocomplete\n          multiple={true}\n          value={selectedUsers}\n          options={userOptions}\n          PaperComponent={AssignPaper}\n          getOptionLabel={(option) => option ? option.fullName || '' : ''}\n          getOptionSelected={(option, value) => option.id === value.id}\n          onChange={(_event, value) => {\n            setSelectedUsers(value);\n            dispatch(new UpdateProjectAssignedToAction({\n              projectId: project.get('id'),\n              assignedTo: value,\n            }));\n          }}\n          onInputChange={(_event, value) => setSearchTerm(value)}\n          renderInput={(params) => (\n            <TextField\n              {...params}\n              placeholder={t('quoteInfo.assignedToPlaceholder')}\n              fullWidth={true}\n            />\n          )}\n          renderOption={(option) => <UserOfficeDisplay name={option.fullName} officeName={option.officeName} />}\n          renderTags={renderUserOfficeTags(tightTooltipClasses)}\n        />\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default AssignProjectToModal;\n","import * as React from 'react';\nimport {\n  connect, useDispatch,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n} from '@material-ui/core';\nimport {\n  DeleteProjectAndSearchProjectsAction,\n  LoadingSearchedProjectAction\n} from '../../../modules/ProjectModule/actions';\nimport Project from '../../../models/Project';\nimport { togglePath } from '../../../components/TogglePath/utils';\nimport { AMPLITUDE_EVENT, CREATE_NEW_QUOTE_FROM_SPEC_PATH, EDIT_PROJECT_PATH, SPEC_TO_QUOTE_PATH } from '../../../constants';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../../modules/RouterModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { AclRoles, Filter, Option, Spec } from '../../../models';\nimport ActionButton from '../../../components/_CellRenderers/ActionButton';\nimport { makeSelectUserRole, makeSelectUserHasFeatAssignTo } from '../../../modules/AtsModule/selectors';\nimport { List } from 'immutable';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { push } from 'connected-react-router';\nimport { SetTimerStartAction } from '../../../modules/ApplicationModule/actions';\nimport AssignProjectToModal from './AssignProjectToModal';\n\ninterface ICustomActionButtonComponentProps {\n  project: IMap<Project>;\n  options: Option<Project>;\n  filters: Filter;\n  searchTerm: string;\n  userRoles?: List<AclRoles>;\n  hasFeatAssignToAcl?: boolean;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  location: IMap<IRouterReducerLocation>;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    project,\n    location,\n    options,\n    searchTerm,\n    filters,\n    t,\n    userRoles,\n    hasFeatAssignToAcl,\n  } = props;\n\n  const [assignModalOpen, setAssignModalOpen] = React.useState(false);\n  const dispatch = useDispatch();\n  const amplitudeData = useAmplitudeData();\n\n  const projectId = project.get('id');\n\n  const specIdToConvert = React.useMemo(() => {\n    const validSpecsForConvert = project.get('specs')?.filter((spec) => spec.get('isAi') && spec.get('isAiValidated'));\n    if (validSpecsForConvert?.count()) {\n      let selectedSpecId = null;\n      let selectedSpecDate = null;\n      validSpecsForConvert.forEach((spec) => {\n        const date = new Date(spec.get('createdDate'));\n        if (selectedSpecDate === null || date > selectedSpecDate) {\n          selectedSpecDate = date;\n          selectedSpecId = spec.get('id');\n        }\n      });\n      return selectedSpecId;\n    } else {\n      return null;\n    }\n  }, [projectId]);\n\n  const handleDelete = () => {\n    const mutableFilters: any = {\n      'and': []\n    };\n    if (searchTerm) {\n      mutableFilters.push({\n        'name': {\n          'like': searchTerm\n        }\n      });\n    }\n    filters && mutableFilters.and.push(...(filters as any).and); // tslint:disable-line\n    if (mutableFilters.and.length === 0) {\n        delete mutableFilters.and;\n    }\n    dispatch(new LoadingSearchedProjectAction());\n    dispatch(new DeleteProjectAndSearchProjectsAction({\n        id: projectId,\n        projectName: project?.get('name') ?? '',\n        specIds: project?.get('specs')?.map(spec => spec.get('id')).join(',') ?? '',\n        options,\n        filters: mutableFilters\n      })\n    );\n  };\n\n  const handleEditProject = () => {\n    togglePath({\n      pathName: `${EDIT_PROJECT_PATH}/${projectId}`,\n      dispatch,\n      location,\n    })()();\n  };\n\n  const handleConvertToQuote = () => {\n    amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteOpened, amplitudeData({specIdToConvert}));\n    dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.s2qLoadingTime}));\n    dispatch(push(`${CREATE_NEW_QUOTE_FROM_SPEC_PATH}/${specIdToConvert}`));\n  };\n\n  const menuItems = [\n    ...specIdToConvert ? [{\n        key: '__convertToQuote',\n        caption: t('projectList.actionMenu.convertToQuote'),\n        onClick: () => handleConvertToQuote()\n      }]\n    : [],\n    {\n      key: '__editProject',\n      caption: t('projectList.actionMenu.edit'),\n      onClick: () => handleEditProject()\n    },\n    ...hasFeatAssignToAcl ? [{\n      key: '__assignTo',\n      caption: t('projectList.actionMenu.assignTo'),\n      onClick: () => setAssignModalOpen(true),\n    }] : []\n  ];\n\n  const deleteMenuItem = {\n    key: '__deleteProject',\n    caption: t('projectList.actionMenu.delete'),\n    disabled: userRoles && userRoles.includes(AclRoles.ATS_USER) ? false : true\n  };\n\n  return (\n    <>\n      <ActionButton\n        id={projectId}\n        name={project.get('name')}\n        menuItems={menuItems}\n        deleteMenuItem={deleteMenuItem}\n        deleteItem={handleDelete}\n        withLoading={false}\n      />\n      <AssignProjectToModal\n        open={assignModalOpen}\n        onClose={() => setAssignModalOpen(false)}\n        project={project}\n      />\n    </>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const locationSelect = makeSelectLocation();\n  const userRolesSelect = makeSelectUserRole();\n  const hasFeatAssignToAclSelect = makeSelectUserHasFeatAssignTo();\n  return (state) => ({\n      location: locationSelect(state),\n      userRoles: userRolesSelect(state),\n      hasFeatAssignToAcl: hasFeatAssignToAclSelect(state),\n  });\n};\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(makeMapStateToProps, null)\n)(CustomActionButton);\n","import React from 'react';\n\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\n\nimport {\n  Theme,\n  Tabs,\n  Tab,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  tabs: {\n    overflow: 'initial',\n    minHeight: 'initial',\n    marginTop: theme.spacing(0.75)\n  },\n  tabWrapper: {\n    flexDirection: 'row',\n    whiteSpace: 'nowrap',\n  },\n  tabLabelIcon: {\n    minHeight: 'initial',\n    paddingTop: 0\n  },\n  tabIcon: {\n    marginRight: theme.spacing(2)\n  },\n}));\n\nconst ProjectHeaderTabs = (props) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  const handleTabChange = (event: React.ChangeEvent<{}>, newValue: string) => {\n    props.notifyTabChange(newValue);\n  };\n\n  return (\n    <>\n      <Tabs\n        className={classes.tabs}\n        value={props?.tabValue}\n        onChange={handleTabChange}\n        variant='fullWidth'\n        aria-label={t('productAndPackageListTopBar.tabsAriaLabel')}\n      >\n        <Tab\n          label={t('pageTitle.projectListPage')}\n          value={'projectList'}\n          classes={{\n            wrapper: classes.tabWrapper,\n            labelIcon: classes.tabLabelIcon\n          }}\n        />\n        <Tab\n          label={t('autoQuotationDashboard.bidWidgetTitle')}\n          value={'pricingRequests'}\n          classes={{\n            wrapper: classes.tabWrapper,\n            labelIcon: classes.tabLabelIcon\n          }}\n        />\n      </Tabs>\n    </>\n  );\n};\n\nexport default ProjectHeaderTabs;","import {TableColumn} from '../../models';\nimport i18next from 'i18next';\nconst getBidStatusList = () => {\n  const bidStatusOptions = [\n    {\n      id: 'pending',\n      value: i18next.t('translations:autoQuotationBidDetail.waitingPricingStatus')\n    },\n    {\n      id: 'submitted',\n      value: i18next.t('translations:autoQuotationBidDetail.pricingReceivedStatus')\n    },\n    {\n      id: 'declined',\n      value: i18next.t('translations:autoQuotationBidDetail.declinedStatus')\n    }\n  ];\n  return bidStatusOptions;\n};\n\nconst projectListTrackingData = (formValues, searchTerm) => {\n  const country = formValues && formValues.getIn(['country', 'eq', 'value'], null);\n  const province = formValues && formValues.getIn(['province', 'eq', 'value'], null);\n  const city = formValues && formValues.getIn(['city', 'eq', 'value'], null);\n  const contactArray = formValues && formValues.getIn(['contacts', 'in']) && formValues.getIn(['contacts', 'in']).map((_contact) => {\n    const firstName = _contact && _contact.firstName;\n    const lastName = _contact && _contact.lastName;\n    const organization = _contact && _contact.organization;\n    return `Person: ${firstName} ${lastName}/Organization: ${organization}`;\n  });\n  const trackedData = {\n    search: searchTerm.length ? searchTerm : null,\n    advancedSearch: formValues && formValues.getIn(['name', 'like', 0]) ? formValues.getIn(['name', 'like'], null) : null,\n    location: (country || province || city) && [\n      `${country || '-'}`,\n      `${province || '-'}`,\n      `${city || '-'}`\n    ].join(', '),\n    region: formValues && formValues.getIn(['regionId', 'in', 'value'], null) || null,\n    opportunityLabel: formValues && formValues.getIn(['oppLabelId', 'eq', 'value'], null) || null,\n    opportunityStatus: formValues && formValues.getIn(['oppStatusId', 'eq', 'value'], null) || null,\n    opportunityValueMin: formValues && formValues.getIn(['oppValue', 'gte'], null) || null,\n    opportunityValueMax: formValues && formValues.getIn(['oppValue', 'lte'], null) || null,\n    bidDateStart: formValues && formValues.getIn(['bidDate', 'gte'], null) || null,\n    bidDateEnd: formValues && formValues.getIn(['bidDate', 'lte'], null) || null,\n    buildingClass: formValues && formValues.getIn(['buildingClassId', 'eq', 'value'], null) || null,\n    buildingType: formValues && formValues.getIn(['buildingTypeId', 'eq', 'value'], null) || null,\n    createdDateStart: formValues && formValues.getIn(['createdDate', 'gte'], null) || null,\n    createdDateEnd: formValues && formValues.getIn(['createdDate', 'lte'], null) || null,\n    projectPhase: formValues && formValues.getIn(['phaseName', 'eq', 'title'], null) || null,\n    trackedByMe: formValues && (formValues.getIn(['isUserTracked', 'eq', 0]) || formValues.getIn(['isUserTracked', 'neq', 0]))\n      ? [\n        formValues && formValues.getIn(['isUserTracked', 'eq', 0]) ? 'Tracked' : null,\n        formValues && formValues.getIn(['isUserTracked', 'neq', 0]) ? 'Untracked' : null\n      ]\n      : null,\n    specAndQuoteAvailability : formValues && (formValues.getIn(['isAi', 'eq', 0]) || formValues.getIn(['isAi', 'neq', 0]) || formValues.getIn(['quoteCount', 'gte', 0]))\n      ? [\n        formValues && formValues.getIn(['isAi', 'neq', 0]) ? 'Design spec' : null,\n        formValues && formValues.getIn(['isAi', 'eq', 0]) ? 'AI spec' : null,\n        formValues && formValues.getIn(['quoteCount', 'gte', 0]) ? 'Quote' : null,\n      ]\n      : null,\n    projectValuationMin: formValues && formValues.getIn(['valuation', 'gte'], null) || null,\n    projectValuationMax: formValues && formValues.getIn(['valuation', 'lte'], null) || null,\n    trackedByOffice: formValues && formValues.getIn(['trackingOfficeId', 'eq', 'officeName'], null) || null,\n    contact: contactArray,\n    leadSource: formValues && formValues.getIn(['sourceId', 'eq', 'value'], null) || null,\n    leadReferenceNumber: formValues && formValues.getIn(['sourceName', 'eq'], null) || null\n  };\n  return trackedData;\n};\n\nconst projectListColumns = () => {\n  const columns: TableColumn[] = [\n    { id: '', label: '', display: true, sortable: false },\n    { id: 'Project Name', label: 'projectList.projectNameColumnLabel', path: ['name'], display: true, sortable: true },\n    { id: 'Internal No.', label: 'projectList.internalNoColumnLabel', path: ['internalNo'], display: false, sortable: true },\n    { id: 'Project Address', label: 'projectList.addressColumnLabel', path: ['address'], display: true, sortable: true },\n    { id: 'City', label: 'projectList.cityColumnLabel', path: ['location', 'city', 'value'], display: true, sortable: true },\n    { id: 'State/Province', label: 'projectList.stateProvinceColumnLabel', path: ['location', 'province', 'value'], display: true, sortable: true },\n    { id: 'Country', label: 'projectList.countryColumnLabel', path: ['location', 'country', 'value'], display: true, sortable: true },\n    { id: 'Assigned To', label: 'projectList.assignedToColumnLabel', path: ['assignedTo'], display: true, sortable: true },\n    { id: 'Bid Date', label: 'projectList.bidDateColumnLabel', path: ['bidDate'], display: true, sortable: true, sortBy: 'bidDate' },\n    { id: 'Building Type', label: 'projectList.buildingTypeColumnLabel', path: ['building'], display: true, sortable: true },\n    { id: 'Valuation', label: 'projectList.valuationColumnLabel', path: ['valuation'], display: true, sortable: true, sortBy: 'valuation' },\n    { id: 'Quotes', label: 'projectList.quotesColumnLabel', display: true, sortable: true },\n    { id: 'Project Phase', label: 'projectList.projectPhaseColumnLabel', path: ['phase', 'title'], display: true, sortable: true },\n    { id: 'Source', label: 'projectList.sourceColumnLabel', path: ['source'], display: false, sortable: true, style: { textAlign: 'center' } },\n    { id: 'Actions', label: 'projectList.actionColumnLabel', display: true, sortable: true },\n  ];\n  return columns;\n};\n\nconst priceRequestProjectViewColumns = () => {\n  const columns: TableColumn[] = [\n    { id: 'projectName', label: 'autoQuotationBidDetail.projectName', display: true, sortable: true },\n    { id: 'quoteNumber', label: 'pricingRequests.quoteRequestNumber', display: true, sortable: true },\n    { id: 'receipt', label: 'pricingRequests.receipt', display: true, sortable: true },\n    { id: 'status', label: 'autoQuotationBidDetail.status', display: true, sortable: true},\n    { id: 'createdAt', label: 'autoQuotationBidDetail.dateSent', display: true, sortable: true, beSortable: true },\n    { id: 'updatedAt', label: 'autoQuotationBidDetail.receivedDate', display: true, sortable: true, beSortable: true },\n    { id: 'actions', label: 'projectList.actionColumnLabel', display: true, sortable: true },\n  ];\n  return columns;\n};\n\nconst priceRequestResponseViewColumns = () => {\n  const columns: TableColumn[] = [\n    { id: 'projectName', label: 'autoQuotationBidDetail.projectName', display: true, sortable: true },\n    { id: 'bidResponseId', label: 'pricingRequests.pricingRequestNumber', display: true, sortable: true },\n    { id: 'from', label: 'autoQuotationBidDetail.fromEmail', display: true, sortable: true },\n    { id: 'receipt', label: 'pricingRequests.receipt', display: true, sortable: true },\n    { id: 'status', label: 'autoQuotationBidDetail.status', display: true, sortable: true, align: 'center' },\n    { id: 'bidSubject', label: 'autoQuotationBidDetail.subjectLine', display: true, sortable: true },\n    { id: 'createdAt', label: 'autoQuotationBidDetail.dateSentReceived', display: true, sortable: true, beSortable: true },\n    { id: 'updatedAt', label: 'autoQuotationBidDetail.repliedDate', display: true, sortable: true, beSortable: true },\n    { id: 'actions', label: 'projectList.actionColumnLabel', display: true, sortable: true },\n  ];\n  return columns;\n};\n\nconst pricingRequestTrackingData = (formValues, searchTerm) => {\n  const trackedData = {};\n  return trackedData;\n};\n\nconst pricingRequestDateValidateFunc = (field, allValues) => {\n  const startDate = allValues.getIn([field, 'startDate']);\n  const endDate = allValues.getIn([field, 'endDate']);\n  const convertDate = (date) => typeof date === 'string' ? date : date.toISOString();\n  if (startDate && endDate) {\n    if (convertDate(startDate) > convertDate(endDate)) {\n      return i18next.t(['translations:errors.isValidDateRange', 'End Date needs to be after Start Date']);\n    }\n  }\n  return undefined;\n};\n\nconst ProjectUtil = {\n  projectListTrackingData,\n  projectListColumns,\n  priceRequestProjectViewColumns,\n  priceRequestResponseViewColumns,\n  getBidStatusList,\n  pricingRequestDateValidateFunc\n};\nexport default ProjectUtil;","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  Drawer,\n  IconButton,\n  Grid,\n  Typography,\n  Theme,\n  Avatar,\n  WithTheme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities, makeSelectAdminDivisions } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction } from '../../../modules/ProjectLocationModule/actions';\nimport { IMap } from 'ats-utils/src';\nimport {\n  ListItem,\n  Region,\n  Contact,\n} from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n  initialize,\n} from 'redux-form';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../../components/FieldAutoSuggest';\nimport {\n  startCase,\n} from 'lodash';\nimport {\n  GetRTypeRegionsAction,\n  GetFiltersByType,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectRegionList,\n} from '../../../modules/AccountModule/selectors';\n\nimport {\n  makeSelectUserId,\n  makeSelectAppId,\n  makeSelectEnv,\n} from '../../../modules/AtsModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\n\nimport {\n  isValidMomentDate,\n} from '../../../validators';\nimport {\n  FieldAutocomplete,\n  Image\n} from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\n\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport {\n  WithTranslation,\n  withTranslation\n} from 'react-i18next';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2, { removeTZ } from '../../../components/FieldDatePickerV2';\nimport FilterList from '../../../components/FilterList';\nimport moment from 'moment';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport ProjectUtil from '../ProjectUtil';\nimport BidInvitationServiceApi from '../../../modules/QuoteConnectService/BidInvitationServiceApi';\n\nexport const PT_PRICING_REQUESTS_FILTER_FORM = 'PPricingReqForm';\nexport const PT_PRICING_REQUESTS_FILTER_LIST = 'PPricingReqFilter'; // beware, there's a max length 20 for the string\n\nexport const formatDateRangeFilter = (dateRangeMap: Map<string, any>) => {\n  if (dateRangeMap) {\n    let formatedDateRangeFilter = Map();\n    const startDate = dateRangeMap.get('startDate');\n    const endDate = dateRangeMap.get('endDate');\n\n    if (startDate && moment(startDate).isValid()) {\n      formatedDateRangeFilter = formatedDateRangeFilter.set('startDate', removeTZ(startDate));\n    }\n    if (endDate && moment(endDate).isValid()) {\n      formatedDateRangeFilter = formatedDateRangeFilter.set('endDate', removeTZ(endDate));\n    }\n    if ( formatedDateRangeFilter.count()) {\n      return formatedDateRangeFilter.toJS();\n    }\n  }\n  return null;\n};\n\n\nconst createdDateValidateFunc = (value, allValues) => {\n  return ProjectUtil.pricingRequestDateValidateFunc('createdAt', allValues);\n};\nconst updatedDateValidateFunc = (value, allValues) => {\n  return ProjectUtil.pricingRequestDateValidateFunc('updatedAt', allValues);\n};\nconst bidDateValidateFunc = (value, allValues) => {\n  return ProjectUtil.pricingRequestDateValidateFunc('bidDateAt', allValues);\n};\n\ninterface IPricingRequestsFilterComponentProps {\n  open: boolean;\n  toggleDrawer: () => void;\n  form?: string;\n  notifySearchPricingRequests: (arg: any) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IPricingRequestsFilter extends IPricingRequestsFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  formValues: Map<string, any>;\n  adminDivisions: Map<number, string>;\n  getRegions: () => void;\n  regions: List<IMap<Region>>;\n  userId: number;\n  getFiltersByType: (filterType: string) => void;\n  env: any;\n  appId: any;\n}\n\ntype IPricingRequestsFilterType = IPricingRequestsFilter & InjectedFormProps & WithAmplitudeData & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithTranslation;\n\nconst defaultMultiSelectValue = [];\nclass PricingRequestFilter extends React.Component<IPricingRequestsFilterType> {\n\n  public state = {\n    contactInput: '',\n    contacts: [],\n  };\n\n  public AvatarOrLogo = ({ imageId, firstName, lastName, organization }: Contact) => {\n    const { classes, theme } = this.props;\n    if (imageId) {\n      return (\n        <Grid container={true}>\n          <Image\n            src={imageId}\n            fromService={true}\n            width={`${theme.spacing(5)}px`}\n            aspectRatio={'100%'}\n            backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n            style={{margin: 0}}\n          />\n        </Grid>\n      );\n    }\n    const avatarText = ([(firstName || '')[0], (lastName || '')[0]].join('')) || (organization || '')[0];\n    return (\n      <Avatar className={classes.avatar}>\n        <Typography className={classes.avatarText}>{avatarText}</Typography>\n      </Avatar>\n    );\n  }\n\n  // put it here to fetch the list for setting the default filter\n  public componentDidMount() {\n    this.props.getFiltersByType(PT_PRICING_REQUESTS_FILTER_LIST);\n    this.getContacts();\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      dispatch,\n      getCountries,\n      formValues,\n      getRegions,\n      countries,\n      provinces,\n      cities,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      getCountries();\n      getRegions();\n\n      // retrieve the relevant location lists, particular in the case of multiple use of the location on a page,\n      // ie, the filter and project modal conflicting with each other\n      const countryId = formValues?.getIn(['country', 'eq', 'id']);\n      const provinceId = formValues?.getIn(['province', 'eq', 'id']);\n      const cityId = formValues?.getIn(['city', 'eq', 'id']);\n\n      if (countryId && provinceId && !provinces.find((province) => province.get('id') === provinceId)) {\n        dispatch(new GetProvinceAction(Number(countryId)));\n        dispatch(new GetCountryAdminDivisionAction({ countryId: Number(countryId) }));\n      }\n      if (provinceId && cityId && !cities.find((city) => city.get('id') === cityId)) {\n        dispatch(new GetCityAction(provinceId));\n      }\n    }\n\n    // whenever form values changed, immediately fetch new data\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public selectCountry = (_country: ListItem, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    // need further investigation on NaN (SPEC-3729)\n    const countryId = Number(_country?.id);\n    if (countryId != null && !isNaN(countryId)) { // temp fix\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n    } else {\n      dispatch(change(form, 'country', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (province?: ListItem, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    if (province?.id != null) {\n      dispatch(new GetCityAction(province.id));\n    } else {\n      dispatch(change(form, 'province', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (city?: ListItem) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n    if (city?.id == null) {\n      dispatch(change(form, 'city', null));\n    }\n  }\n\n  public setFormValues = (values: any) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    if (values.createdAt) {\n      if (values.createdAt.startDate) {\n        values.createdAt.startDate = moment.utc(values.createdAt.startDate).toISOString();\n      }\n      if (values.createdAt.endDate) {\n        values.createdAt.endDate = moment.utc(values.createdAt.endDate).toISOString();\n      }\n    }\n    if (values.updatedAt) {\n      if (values.updatedAt.startDate) {\n        values.updatedAt.startDate = moment.utc(values.updatedAt.startDate).toISOString();\n      }\n      if (values.updatedAt.endDate) {\n        values.updatedAt.endDate = moment.utc(values.updatedAt.endDate).toISOString();\n      }\n    }\n    if (values.bidDateAt) {\n      if (values.bidDateAt.startDate) {\n        values.bidDateAt.startDate = moment.utc(values.bidDateAt.startDate).toISOString();\n      }\n      if (values.bidDateAt.endDate) {\n        values.bidDateAt.endDate = moment.utc(values.bidDateAt.endDate).toISOString();\n      }\n    }\n    if (values.country && values.country.eq != null) {\n      dispatch(new GetProvinceAction(values.country.eq.id));\n      dispatch(new GetCountryAdminDivisionAction({ countryId: values.country.eq.id }));\n    }\n    if (values.province && values.province.eq != null) {\n      dispatch(new GetCityAction(values.province.eq.id));\n    }\n    dispatch(initialize(\n      PT_PRICING_REQUESTS_FILTER_FORM,\n      Array.isArray(values) ? {} : values\n    ));\n\n    // change is used for fields that does not populate with initialize (name, contact.id)\n    if (values.name) {\n      dispatch(change(\n        PT_PRICING_REQUESTS_FILTER_FORM,\n        'name',\n        Map(values.name)\n      ));\n    }\n    if (values.contacts) {\n      dispatch(change(\n        PT_PRICING_REQUESTS_FILTER_FORM,\n        'contacts',\n        Map(values.contacts)\n      ));\n    }\n    if (values.status) {\n      dispatch(change(\n        PT_PRICING_REQUESTS_FILTER_FORM,\n        'status',\n        Map(values.status)\n      ));\n    }\n\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      notifySearchPricingRequests,\n    } = this.props;\n    const filterOptions = {\n      name: null,\n      countryId: null,\n      provinceId: null,\n      cityId: null,\n      status: null,\n      contactIds: null,\n      createdAt: null,\n      updatedAt: null,\n      bidDateAt: null,\n    };\n    if (values.size) {\n      const name = values.getIn(['name', 'like']);\n      if (name && name.length > 0) {\n        filterOptions.name = name;\n      }\n      const countryId = values.getIn(['country', 'eq', 'id']);\n      if (countryId) {\n        filterOptions.countryId = countryId;\n      }\n      const provinceId = values.getIn(['province', 'eq', 'id']);\n      if (provinceId) {\n        filterOptions.provinceId = provinceId;\n      }\n      const cityId = values.getIn(['city', 'eq', 'id']);\n      if (cityId) {\n        filterOptions.cityId = cityId;\n      }\n      const bidStatus = values.getIn(['status', 'in'], []);\n      const statusList = bidStatus?.map(item => item.id);\n      if (statusList?.length) {\n        filterOptions.status = statusList;\n      }\n\n      const contacts = values.getIn(['contacts', 'in'], []);\n      const contactIds = contacts?.map(contact => contact.email);\n      if (contactIds?.length) {\n        filterOptions.contactIds = contactIds;\n      }\n      const createdAt = values.get('createdAt');\n      const formatedCreatedDate = createdAt && formatDateRangeFilter(createdAt);\n      if (formatedCreatedDate) {\n        filterOptions.createdAt = formatedCreatedDate;\n      }\n      const updatedAt = values.get('updatedAt');\n      const formatedUpdatedDate = updatedAt && formatDateRangeFilter(updatedAt);\n      if (formatedUpdatedDate) {\n        filterOptions.updatedAt = formatedUpdatedDate;\n      }\n      const bidDateAt = values.get('bidDateAt');\n      const formatedBidDate = bidDateAt && formatDateRangeFilter(bidDateAt);\n      if (formatedBidDate) {\n        filterOptions.bidDateAt = formatedBidDate;\n      }\n      notifySearchPricingRequests(filterOptions);\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      form,\n      notifySearchPricingRequests,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        PT_PRICING_REQUESTS_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(form || PT_PRICING_REQUESTS_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    notifySearchPricingRequests(null);\n  }\n  public render() {\n    const {\n      contactInput,\n      contacts,\n    } = this.state;\n\n    const {\n      t,\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      countries,\n      adminDivisions,\n      provinces,\n      cities,\n      formValues,\n      handleSubmit,\n      regions,\n      uniqueKey,\n      amplitudeData,\n    } = this.props;\n\n    const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'eq', 'id']) : -1;\n    const countryId: number = _countryId != null ? Number(_countryId) : -1;\n    const adminDivision = startCase(adminDivisions.get(countryId)) || t('projectListFilter.province');\n    const bidStatusList = ProjectUtil.getBidStatusList();\n\n    return (\n      <>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('projectListFilter.filters')}\n            </Typography>\n            <IconButton\n              onClick={toggleDrawer}\n            >\n              <CloseIcon />\n            </IconButton>\n\n            <FilterList\n              filterType={PT_PRICING_REQUESTS_FILTER_LIST}\n              filterFormOpen={open}\n              formValues={formValues}\n              defaultCheckBoxLabel={t('pricingRequests.projectFilterCheckboxLabel')}\n              handleSave={() => amplitude.logEvent(AMPLITUDE_EVENT.pricingRequestFilterSave, amplitudeData({pricingRequestFilterClicked: 'Project Pricing Request filter save button clicked'}))}\n              handleCreateFilter={(filterName: string) => amplitude.logEvent(AMPLITUDE_EVENT.pricingRequestFilterCreate, amplitudeData({filterName: filterName.trim()}))}\n              handleSelectFilter={(filterName: string) => amplitude.logEvent(AMPLITUDE_EVENT.pricingRequestFilterSelectSavedFilter, amplitudeData({selectedFilter: filterName.trim()}))}\n              handleReset={this.handleResetForm}\n              setFormValues={this.setFormValues}\n            />\n          </Grid>\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Content */}\n            <Grid item={true} className={classes.content}>\n              {/* Advanced filter */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('projectListFilter.advancedSearch')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={12}>\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='name.like'\n                    props={{\n                      inputProps: {\n                        label: t('pricingRequests.projectQuoteFilter'),\n                        multiple: true,\n                        defaultValue: defaultMultiSelectValue,\n                        freeSolo: true,\n                        placeholder: t('pricingRequests.projectQuoteFilter')\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldAutocomplete}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* location */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('projectListFilter.location')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={4}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.country'),\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: countries.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCountry,\n                      },\n                    }}\n                    name='country.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid item={true} xs={4}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: adminDivision,\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: provinces.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectProvince,\n                      },\n                    }}\n                    name='province.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid item={true} xs={4}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.city'),\n                      wholeValue: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: cities.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value?.value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return value.length !== 0;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCity,\n                      },\n                    }}\n                    name='city.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Status filter */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('autoQuotationBidDetail.status')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={12}>\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='status.in'\n                    props={{\n                      inputProps: {\n                        getOptionSelected: (option: any, value: any) => {\n                          if (value?.id) {\n                            return option.id === value?.id;\n                          } else if (!value.isEmpty()) {\n                            const bidStatusConfig = value.getIn(['id'], null);\n                            return option.id === bidStatusConfig;\n                          }\n                        },\n                        options: bidStatusList,\n                        getOptionLabel: (option) => {\n                          const { id, value } = option;\n                          return value;\n                        },\n                        filterSelectedOptions: true,\n                        renderOption: option => option && <Typography>{option.value}</Typography>,\n                        multiple: true,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldAutocomplete}\n                  />\n                </Grid>\n              </Grid>\n\n              <Typography variant='caption' className={classes.subtitle}\n              >\n                {t('autoQuotationBidDetail.dateSent')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdAt.startDate`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[createdDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid item={true}>\n                  <Typography variant='caption' className={classes.subtitle}>\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdAt.endDate`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Date Received */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('autoQuotationBidDetail.receivedDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`updatedAt.startDate`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[updatedDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid item={true}>\n                  <Typography variant='caption' className={classes.subtitle}>\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`updatedAt.endDate`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[updatedDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Recipient */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('Recipient')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={12}>\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='contacts.in'\n                    props={{\n                      inputProps: {\n                        getOptionSelected: (option: Contact, value: Contact) => {\n                          return option.email === value.email;\n                        },\n                        options: contacts,\n                        label: t('pricingRequests.projectFilterRecipientLabel'),\n                        getOptionLabel: (option) => {\n                          const { firstName, lastName, organization } = option;\n                          if (firstName && lastName) {\n                            return firstName + ' ' + lastName;\n                          }\n                          if (firstName) {\n                            return firstName;\n                          }\n                          return organization;\n                        },\n                        inputValue: contactInput,\n                        filterSelectedOptions: true,\n                        renderOption: (option: Contact, state) => {\n                          const { firstName, lastName, email, organization, contactType, address1, address2, cityName, provinceCode, countryName } = option;\n                          const fullName = [firstName, lastName].filter(name => name).join(' ').trim();\n                          return (\n                            <Grid container={true} alignItems='center' wrap='nowrap' spacing={2}>\n                              <Grid item={true}>\n                                {this.AvatarOrLogo(option)}\n                              </Grid>\n                              <Grid zeroMinWidth={true} item={true} container={true} direction='column'>\n                                <Typography variant='subtitle1' color='textPrimary' style={{ wordWrap: 'break-word'}}>{fullName || organization}</Typography>\n                                <Typography variant='body2' style={{ wordWrap: 'break-word'}}>{email}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{contactType}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{address1 || address2}</Typography>\n                                <Typography variant='caption' style={{ wordWrap: 'break-word'}}>{cityName} {provinceCode} {countryName}</Typography>\n                              </Grid>\n                            </Grid>\n                          );\n                        },\n                        onInputChange: (event: object, val: string, reason: string) => {\n                          if (reason !== 'reset' || (reason === 'reset' && event)) {\n                            this.setState({ contactInput: val });\n                          }\n                        },\n                        multiple: true,\n                        defaultValue: defaultMultiSelectValue,\n                        filterOptions: (contactOptions, state) => {\n                          if (contactOptions === null || contactOptions === undefined) {\n                            return [];\n                          }\n                          const inputValue = state?.inputValue.toLowerCase();\n                          if (inputValue) {\n                            return contactOptions.filter(option => {\n                              const searchableString = [\n                                option.firstName,\n                                option.lastName,\n                                option.organization,\n                                option.email,\n                              ].filter(Boolean).join(' ').toLowerCase();\n                              return searchableString.includes(inputValue);\n                            });\n                          }\n                          return contactOptions;\n                        },\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                    }}\n                    component={FieldAutocomplete}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Bid Date */}\n              <Typography variant='caption' className={classes.subtitle}>\n                {t('projectListFilter.bidDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDateAt.startDate`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid item={true}>\n                  <Typography variant='caption' className={classes.subtitle}>\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid item={true} xs={6}>\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDateAt.endDate`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc, isValidMomentDate]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n            </Grid>\n          </form>\n        </Drawer>\n      </>\n    );\n  }\n\n  private getContacts = async () => {\n    const filter = {\n      direction: 'to'\n    };\n    const contactItems = [];\n    const userResults = await BidInvitationServiceApi.findUser(this.props.env, this.props.appId, filter);\n    userResults?.forEach((userResult) => {\n      if (userResult?.email) {\n        contactItems.push(userResult);\n      }\n    });\n    this.setState({ contacts: contactItems });\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(1, 2, 0, 2),\n    maxWidth: '370px'\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 125px)`,\n    // overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  buttonContainer: {\n    marginTop: 0,\n  },\n  avatar: {\n    background: theme.palette.primary.main\n  },\n  avatarText: {\n    color: theme.palette.primary.contrastText\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state, ownProps: IPricingRequestsFilterComponentProps) => {\n  const form = ownProps.form != null ? ownProps.form : PT_PRICING_REQUESTS_FILTER_FORM;\n  const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n  return {\n    form,\n    ...createStructuredSelector({\n      adminDivisions: makeSelectAdminDivisions(),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      formValues: getFormValues(form),\n      regions: makeSelectRegionList(),\n      userId: makeSelectUserId(),\n      env: makeSelectEnv(),\n      appId: makeSelectAppId(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getRegions: () => {\n      dispatch(new GetRTypeRegionsAction());\n    },\n    getFiltersByType: (filterType: string) => {\n      dispatch(new GetFiltersByType({ filterType }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IPricingRequestsFilterComponentProps>> (\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: PT_PRICING_REQUESTS_FILTER_FORM }),\n  withAmplitudeData,\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n)(PricingRequestFilter);\n","import React from 'react';\nimport _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n  TableCell,\n  TableSortLabel,\n} from '@material-ui/core';\n\nconst TableDynamicHeader = ({\n                              notifySortingChange,\n                              sortingOptions,\n                              tableColumns\n}) => {\n  const { t } = useTranslation('translations');\n\n  const getSortingDirection = (columnId: string): 'asc' | 'desc' => {\n    const sortColumns = _.find(sortingOptions, { columnId});\n    return sortColumns['direction'];\n  };\n\n  return (\n    <>\n      {tableColumns.map((column) => (\n        column.display && (\n          <TableCell key={column.id}>\n            {(column?.show) &&\n              <>\n                {(column.beSortable) &&\n                  <TableSortLabel\n                    active={true}\n                    direction={getSortingDirection(column.id) || 'desc'}\n                    onClick={() => notifySortingChange(column.id)}\n                  >\n                    {t(column.label)}\n                  </TableSortLabel>\n                }\n                {(!column.beSortable) &&\n                  <>{t(column.label)}</>\n                }\n              </>\n            }\n          </TableCell>\n        )\n      ))}\n    </>\n  );\n};\nexport default TableDynamicHeader;","import React, {useEffect, useState} from 'react';\nimport { Link } from 'react-router-dom';\nimport _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n  Grid,\n  TableContainer,\n  Table, TableBody,\n  TableCell,\n  TableHead,\n  TablePagination,\n  TableFooter,\n  TableRow,\n  Theme,\n  Tooltip,\n  Typography,\n  IconButton,\n\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport KeyboardArrowUpRoundedIcon from '@material-ui/icons/KeyboardArrowUpRounded';\n\nimport {CallToActionWidgetContent, TablePaginationActions} from '../../../../../components';\nimport LoadingSpinner from '../../../DashboardCanvas/DashboardCanvasWidget/LoadingSpinner';\nimport BidResponseTable from './BidResponseTable';\nimport BidResponseMenu from './BidResponseMenu';\nimport BidStatusSummaryBar from './BidStatusSummaryBar';\nimport TableDynamicHeader from './DynamicColumn/TableDynamicHeader';\nimport TableDynamicCell from './DynamicColumn/TableDynamicCell';\nimport SendPricingRequestsWidgetUtil from '../SendPricingRequestsWidgetUtil';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  invitationTable: {\n    // tableLayout: 'fixed',\n    width: '100%',\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial',\n    justifyContent: 'flex-start'\n  },\n  paginationToolbar: {\n    overflow: 'auto',\n    paddingLeft: 0,\n    marginTop: theme.spacing(2),\n  },\n  tableCellRoot: {\n   // width: '10%',\n  },\n  projectCell: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  projectLinkContent: {\n    display: 'flex',\n    alignItems: 'center',\n    color: theme.palette.primary.main,\n    width: '100%',\n  },\n  projectIconButton: {\n    marginRight: theme.spacing(2),\n    '& .MuiSvgIcon-root': {\n      verticalAlign: 'middle',\n    },\n  },\n}));\nconst SendPricingRequestsProjectTable = ({\n                                            widgetName,\n                                            loaded,\n                                            invitations,\n                                            page,\n                                            totalCount,\n                                            rowsPerPage,\n                                            notFoundImage,\n                                            callToActionTitle,\n                                            callToActionDescription,\n                                            notifyPageChange,\n                                            notifySortingChange,\n                                            notifyChangeRowsPerPage,\n                                            sortingOptions,\n                                            columnsToDisplay\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  const [currentInvitation, setCurrentInvitation] = useState(null);\n  const [currentBidResponse, setCurrentBidResponse] = useState(null);\n  const [currentAnchorEl, setCurrentAnchorEl] = useState(null);\n  const [showBidProjectToggles, setShowBidProjectToggles] = useState([]);\n  const [tableColumns, setTableColumns] = useState([]);\n\n  useEffect(() => {\n    if (columnsToDisplay) {\n      let resetToggle = false;\n      const initHiddenColumn = SendPricingRequestsWidgetUtil.getPricingRequestDisplayColumnByToggle();\n      const tempColumns = columnsToDisplay.map((column) => {\n        let show = true;\n        if (column?.show) {\n          resetToggle = true;\n        }\n        if (showBidProjectToggles.length === 0 && _.includes(initHiddenColumn, column.id)) {\n          show = false;\n        }\n        return {\n          ...column,\n          show\n        };\n      });\n      setTableColumns(tempColumns);\n      if (resetToggle) {\n        setShowBidProjectToggles([]);\n      }\n    }\n  }, [columnsToDisplay]);\n\n  const handleChangePage = (event: unknown, newPage: number) => {\n    notifyPageChange(newPage);\n    setShowBidProjectToggles([]);\n  };\n\n  const handleMenuShow = (menuAnchorEl, menuInvitation, menuBidResponse) => {\n    setCurrentInvitation(menuInvitation);\n    setCurrentBidResponse(menuBidResponse);\n    setCurrentAnchorEl(menuAnchorEl);\n  };\n\n  const handleAnchorElChange = () => {\n    setCurrentBidResponse(null);\n    setCurrentAnchorEl(null);\n  };\n\n  const handleChangeRowsPerPage = (e) => {\n    const limit = Number(e.target.value);\n    notifyChangeRowsPerPage(limit);\n  };\n\n  const handleProjectToggleClick = (bid) => {\n    let newToggles = [];\n    setShowBidProjectToggles((prev) => {\n      if (prev.includes(bid)) {\n        newToggles = prev.filter((num) => num !== bid);\n      } else {\n        newToggles = [...prev, bid];\n      }\n      return newToggles;\n    });\n\n    const initHiddenColumn = SendPricingRequestsWidgetUtil.getPricingRequestDisplayColumnByToggle();\n    const tempColumns = columnsToDisplay.map((column) => {\n      let show = true;\n      if (newToggles.length === 0 && _.includes(initHiddenColumn, column.id)) {\n        show = false;\n      }\n      return {\n        ...column,\n        show\n      };\n    });\n    setTableColumns(tempColumns);\n  };\n\n  const isRowVisible = (invitationId) => {\n    return showBidProjectToggles.includes(invitationId);\n  };\n\n  const handleSortingChange = (columnId) => {\n    notifySortingChange(columnId);\n  };\n\n  const getProjectCell = (invitation, indexId) => {\n    return (\n      <TableCell key={indexId}>\n        {(invitation?.Quote?.projectId) &&\n          <Tooltip title={invitation?.Quote?.ProjectQuote?.Project?.name}>\n            <span className={classes.projectCell}>\n              <IconButton onClick={() => { handleProjectToggleClick(invitation.id); }} color='primary' size='small' className={classes.projectIconButton}>\n                {(showBidProjectToggles.includes(invitation.id)) &&\n                  <KeyboardArrowUpRoundedIcon fontSize='small'/>\n                }\n                {(!showBidProjectToggles.includes(invitation.id)) &&\n                  <KeyboardArrowDownRoundedIcon fontSize='small'/>\n                }\n              </IconButton>\n              <Link to={SendPricingRequestsWidgetUtil.getProjectUrl(invitation)} className={classes.projectLinkContent}>\n                <Typography variant='body2' color='primary' noWrap={true}>\n                  {invitation?.Quote?.ProjectQuote?.Project?.name || '-'}\n                </Typography>\n              </Link>\n            </span>\n          </Tooltip>\n        }\n        {(!invitation?.Quote?.projectId) &&\n          <Tooltip title={invitation?.Quote?.name}>\n            <span className={classes.projectCell}>\n              <IconButton onClick={() => { handleProjectToggleClick(invitation.id); }} color='primary' size='small' className={classes.projectIconButton}>\n                {(showBidProjectToggles.includes(invitation.id)) &&\n                  <KeyboardArrowUpRoundedIcon fontSize='small'/>\n                }\n                {(!showBidProjectToggles.includes(invitation.id)) &&\n                  <KeyboardArrowDownRoundedIcon fontSize='small'/>\n                }\n              </IconButton>\n              <Link to={SendPricingRequestsWidgetUtil.getQuoteUrl(invitation)} className={classes.projectLinkContent}>\n                <Typography variant='body2' color='primary' noWrap={true}>\n                  {invitation?.Quote?.name || '-'}\n                </Typography>\n              </Link>\n            </span>\n          </Tooltip>\n        }\n      </TableCell>\n    );\n  };\n\n  const getQuoteCell = (invitation, indexId) => {\n    return (\n      <TableCell key={indexId}>\n        <Tooltip title={invitation?.Quote?.quoteNumber || '-'}>\n          <span>\n            <Link to={SendPricingRequestsWidgetUtil.getQuoteUrl(invitation)}>\n              <Typography variant='body2' color='primary' noWrap={true}>\n                {invitation?.Quote?.quoteNumber || '-'}\n              </Typography>\n            </Link>\n          </span>\n        </Tooltip>\n      </TableCell>\n    );\n  };\n\n  const getStatusCell = (invitation, indexId) => {\n    return (\n      <TableCell key={indexId}>\n        <BidStatusSummaryBar\n          key={`status-summary-${invitation.id}`}\n          invitation={invitation}\n        />\n      </TableCell>\n    );\n  };\n\n  const getTableCellsById = (invitation) => {\n    return _.map(tableColumns, (column) => {\n      if (column.display) {\n        const indexId = `invitation-${column.id}-${invitation.id}`;\n        switch (column.id) {\n          case 'projectName':\n            return getProjectCell(invitation, indexId);\n          case 'quoteNumber':\n            return getQuoteCell(invitation, indexId);\n          case 'receipt':\n            return TableDynamicCell.getEmptyCell(indexId);\n          case 'status':\n            return getStatusCell(invitation, indexId);\n          case 'createdAt':\n            return TableDynamicCell.getEmptyCell(indexId);\n          case 'updatedAt':\n            return TableDynamicCell.getEmptyCell(indexId);\n          case 'actions':\n            return TableDynamicCell.getEmptyCell(indexId);\n        }\n      }\n    });\n  };\n\n  return (\n    <>\n      {!loaded &&\n        <LoadingSpinner/>\n      }\n      {(loaded) &&\n        <>\n          {(invitations.length > 0 && tableColumns.length > 0) &&\n            <>\n              <TableContainer>\n                <Table className={classes.invitationTable} >\n                  <TableHead>\n                    <TableRow>\n                      <TableDynamicHeader\n                        notifySortingChange={handleSortingChange}\n                        sortingOptions={sortingOptions}\n                        tableColumns={tableColumns}\n                      />\n                    </TableRow>\n                  </TableHead>\n                  <TableBody>\n                    {invitations && invitations.map((invitation, index: number) => (\n                      <React.Fragment key={`invitation-${invitation.id}`}>\n                        <TableRow hover={true}>\n                          <>{getTableCellsById(invitation)}</>\n                        </TableRow>\n                        {(isRowVisible(invitation.id)) &&\n                          <BidResponseTable\n                            widgetName={widgetName}\n                            invitation={invitation}\n                            tableColumns={tableColumns}\n                            notifyMenu={handleMenuShow}\n                          />\n                        }\n                      </React.Fragment>\n                    ))}\n                  </TableBody>\n                  <TableFooter>\n                    <TableRow>\n                      <TableCell colSpan={100} style={{ paddingRight: 0 }}>\n                        <TablePagination\n                          className={classes.pagination}\n                          component='div'\n                          labelRowsPerPage={t('Pagination.rowsPerPage')}\n                          rowsPerPageOptions={[5, 10, 25, 50]}\n                          count={totalCount}\n                          rowsPerPage={rowsPerPage}\n                          labelDisplayedRows={({from, to}) => `${from}-${to}`}\n                          page={page}\n                          onChangePage={handleChangePage}\n                          onChangeRowsPerPage={handleChangeRowsPerPage}\n                          ActionsComponent={(paginationProps) => <TablePaginationActions\n                            onlyPrevAndNext={true} {...paginationProps} />}\n                        />\n                      </TableCell>\n                    </TableRow>\n                  </TableFooter>\n                </Table>`\n              </TableContainer>\n              {(currentBidResponse) &&\n                <BidResponseMenu\n                  currentInvitation={currentInvitation}\n                  currentBidResponse={currentBidResponse}\n                  currentAnchorEl={currentAnchorEl}\n                  notifyAnchorElChange={handleAnchorElChange}\n                />\n              }\n            </>\n          }\n          {(invitations.length === 0) &&\n            <Grid container={true} direction='column' alignItems='center' justify='center'>\n              <CallToActionWidgetContent\n                ImageProps={notFoundImage}\n                ButtonProps={null}\n                buttonToolTip={null}\n                label={null}\n                title={callToActionTitle || ''}\n                description={null}\n              >\n                <Typography variant='body1'>\n                  {callToActionDescription || ''}\n                </Typography>\n              </CallToActionWidgetContent>\n            </Grid>\n          }\n        </>\n      }\n    </>\n  );\n};\nexport default SendPricingRequestsProjectTable;","import React, {useState, useRef, useEffect} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n  Grid,\n  TableContainer,\n  Table, TableBody,\n  TableCell,\n  TableHead,\n  TablePagination,\n  TableFooter,\n  TableRow,\n  Theme,\n  Tooltip,\n  Typography,\n  IconButton,\n  Button,\n  Menu,\n  MenuItem,\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport BlockIcon from '@material-ui/icons/Block';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\nimport MonetizationOnIcon from '@material-ui/icons/MonetizationOn';\n\nimport {\n  QUOTE_PATH,\n} from '../../../../../constants';\n\nimport {CallToActionWidgetContent, TablePaginationActions} from '../../../../../components';\nimport {makeSelectIdentityObject} from '../../../../../modules/AtsModule/selectors';\nimport DeclineDialog from '../../../../AutoQuotationBidDetail/DeclineDialog';\nimport {SetSnackbarOpenAction} from '../../../../../modules/ApplicationModule/actions';\nimport LoadingSpinner from '../../../DashboardCanvas/DashboardCanvasWidget/LoadingSpinner';\nimport BidInvitationWidgetUtil from '../../BidInvitationsWidget/BidInvitationWidgetUtil';\nimport TableDynamicHeader from './DynamicColumn/TableDynamicHeader';\nimport _ from 'lodash';\nimport TableDynamicCell from './DynamicColumn/TableDynamicCell';\nimport SendPricingRequestsWidgetUtil from '../SendPricingRequestsWidgetUtil';\nimport {getResponseStatusCell, getUpdatedAtCell, getResponseIdCell} from './BidComponentUtil';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  rightPagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    justifyContent: 'flex-end'\n  },\n  leftPagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial',\n    justifyContent: 'flex-start'\n  },\n  paginationToolbar: {\n    overflow: 'auto',\n    paddingLeft: 0,\n    marginTop: theme.spacing(2),\n  },\n  disableIcon: {\n    '&.Mui-disabled': {\n      color: 'lightgrey',\n    },\n  },\n}));\nconst BidResponseProjectListTable = ({\n                                          widgetName,\n                                          loaded,\n                                          bids,\n                                          page,\n                                          totalCount,\n                                          rowsPerPage,\n                                          notFoundImage,\n                                          callToActionTitle,\n                                          callToActionDescription,\n                                          notifyPageChange,\n                                          notifySortingChange,\n                                          notifyReload,\n                                          notifyChangeRowsPerPage,\n                                          sortingOptions,\n                                          columnsToDisplay\n}) => {\n  const [tableColumns, setTableColumns] = useState([]);\n\n  useEffect(() => {\n    if (columnsToDisplay) {\n      const tempColumns = columnsToDisplay.map((column) => {\n        const show = true;\n        return {\n          ...column,\n          show\n        };\n      });\n      setTableColumns(tempColumns);\n    }\n  }, [columnsToDisplay]);\n\n  const classes = useStyles();\n  const identity = useSelector(makeSelectIdentityObject());\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const [declineOpen, setDeclineOpen] = useState(false);\n  const [bidResponseId, setBidResponseId] = useState(null);\n  const [currentBidResponse, setCurrentBidResponse] = useState(null);\n  const declineButtonRef = useRef(null);\n  const [anchorEl, setAnchorEl] = useState(null);\n\n  const handleChangePage = (event: unknown, newPage: number) => {\n    notifyPageChange(newPage);\n  };\n\n  const handleChangeRowsPerPage = (e) => {\n    const limit = Number(e.target.value);\n    notifyChangeRowsPerPage(limit);\n  };\n\n  const handleDeclineChange = (id) => {\n    setBidResponseId(id);\n    setDeclineOpen(true);\n  };\n\n  const handleDeclineClose = (refresh: boolean) => {\n    setBidResponseId(null);\n    setDeclineOpen(false);\n    if (declineButtonRef.current) {\n      declineButtonRef.current.focus(); // Restore focus to the button outside the Dialog\n    }\n    if (refresh) {\n      notifyReload(page);\n      if (refresh) {\n        dispatch(new SetSnackbarOpenAction({\n          message: t('autoQuotationBidDetail.declineSuccessMessage'),\n          severity: 'success',\n        }));\n      }\n    }\n  };\n\n  const handleCloseMenu = () => {\n    setAnchorEl(null);\n    setBidResponseId(null);\n  };\n\n  const onClickShowMenu = (bidResponse) => (event) => {\n    setAnchorEl(event.currentTarget);\n    setCurrentBidResponse(bidResponse);\n  };\n\n  const handleImportPrice = async () => {\n    const url = `${QUOTE_PATH}/${currentBidResponse.BidInvitation.quoteId}/edit?linkBidResponseId=${currentBidResponse?.id}`;\n    window.open(url, '_blank');\n  };\n\n  const handleSortingChange = (columnId) => {\n    notifySortingChange(columnId);\n  };\n\n  const getProjectCell = (bidResponse) => {\n    return (\n      <TableCell>\n        {(bidResponse?.BidInvitation?.Quote?.projectId) &&\n          <Tooltip title={bidResponse?.BidInvitation?.Quote?.ProjectQuote?.Project?.name}>\n            <span>\n              <Link to={SendPricingRequestsWidgetUtil.getProjectUrl(bidResponse?.BidInvitation)}>\n                <Typography variant='body2' color='primary' noWrap={true}>\n                  {bidResponse?.BidInvitation?.Quote?.ProjectQuote?.Project?.name || '-'}\n                </Typography>\n              </Link>\n            </span>\n          </Tooltip>\n        }\n        {(!bidResponse?.BidInvitation?.Quote?.projectId) &&\n          <>-</>\n        }\n      </TableCell>\n    );\n  };\n\n  const getActionsCell = (bidResponse) => {\n    return (\n      <TableCell>\n        <Button onClick={onClickShowMenu(bidResponse)} color='primary'>\n          ACTION\n        </Button>\n      </TableCell>\n    );\n  };\n\n  const getTableCellsById = (bidResponse) => {\n    return _.map(tableColumns, (column) => {\n      if (column.display) {\n        const indexId = `bidResponse-project-${column.id}-${bidResponse.id}`;\n        switch (column.id) {\n          case 'projectName':\n            return getProjectCell(bidResponse);\n          case 'bidResponseId':\n            return getResponseIdCell(bidResponse, indexId);\n          case 'from':\n            return TableDynamicCell.getTextCell(bidResponse.BidInvitation.User?.email, indexId);\n          case 'receipt':\n            return TableDynamicCell.getTextCell(bidResponse?.Contact?.email, indexId);\n          case 'status':\n            return getResponseStatusCell(bidResponse, indexId);\n          case 'bidSubject':\n            return TableDynamicCell.getTextCell(bidResponse.bidSubject, indexId);\n          case 'createdAt':\n            return TableDynamicCell.getTimeCell(bidResponse.BidInvitation.createdAt, indexId);\n          case 'updatedAt':\n            return getUpdatedAtCell(bidResponse, indexId);\n          case 'actions':\n            return getActionsCell(bidResponse);\n        }\n      }\n    });\n  };\n\n  return (\n    <>\n      {!loaded &&\n        <LoadingSpinner/>\n      }\n      {(loaded) &&\n        <>\n          {(bids.length) > 0 &&\n            <>\n              <TableContainer>\n                <Table>\n                  <TableHead classes={{root: classes.tableHead}}>\n                    <TableRow>\n                      <TableDynamicHeader\n                        notifySortingChange={handleSortingChange}\n                        sortingOptions={sortingOptions}\n                        tableColumns={tableColumns}\n                      />\n                    </TableRow>\n                  </TableHead>\n                  <TableBody>\n                    {bids && bids.map((bidResponse, index: number) => (\n                      <TableRow id={`${index}`} key={index} hover={true}>\n                        <>{getTableCellsById(bidResponse)}</>\n                      </TableRow>\n                    ))}\n                  </TableBody>\n                  <TableFooter>\n                    <TableRow>\n                        <TableCell colSpan={100} style={{ paddingRight: 0 }}>\n                        <TablePagination\n                          className={classes.leftPagination}\n                          component='div'\n                          labelRowsPerPage={t('Pagination.rowsPerPage')}\n                          rowsPerPageOptions={[5, 10, 25, 50]}\n                          count={totalCount}\n                          rowsPerPage={rowsPerPage}\n                          labelDisplayedRows={({from, to}) => `${from}-${to}`}\n                          page={page}\n                          onChangePage={handleChangePage}\n                          onChangeRowsPerPage={handleChangeRowsPerPage}\n                          ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                        />\n                      </TableCell>\n                    </TableRow>\n                  </TableFooter>\n                </Table>`\n              </TableContainer>\n              {(currentBidResponse) &&\n                <Menu\n                  anchorEl={anchorEl}\n                  open={Boolean(anchorEl)}\n                  onClose={handleCloseMenu}\n                >\n                  <MenuItem>\n                    <Tooltip title={t('autoQuotationBidDetail.viewDetail')}>\n                      <span>\n                        <Link to={BidInvitationWidgetUtil.getBidDetailUrl(currentBidResponse)}>\n                          <IconButton size='small'>\n                              <OpenInNewIcon fontSize='small'/>\n                              <Typography variant='body1' style={{ marginLeft: 8 }}>\n                                {t('autoQuotationBidDetail.prDetail')}\n                              </Typography>\n                          </IconButton>\n                        </Link>\n                      </span>\n                    </Tooltip>\n                  </MenuItem>\n                  {(currentBidResponse.status === 'pending' && currentBidResponse?.BidInvitation?.userId !== identity.get('uid')) &&\n                    <MenuItem>\n                      <Tooltip title={t('autoQuotationBidDetail.declineRequest')}>\n                        <span>\n                            <IconButton className={classes.disableIcon} ref={declineButtonRef} onClick={() => {\n                              handleDeclineChange(currentBidResponse.id);\n                            }} size='small'>\n                              <BlockIcon fontSize='small'/>\n                              <Typography variant='body1' style={{ marginLeft: 8 }}>\n                                {t('autoQuotationBidDetail.declineRequest')}\n                              </Typography>\n                            </IconButton>\n                        </span>\n                      </Tooltip>\n                    </MenuItem>\n                  }\n                  {(currentBidResponse.status !== 'pending') &&\n                    <MenuItem disabled={true} style={{ cursor: 'default' }}>\n                      <Tooltip title={t('autoQuotationBidDetail.declineRequest')}>\n                        <span>\n                            <IconButton className={classes.disableIcon} disabled={true} size='small'>\n                              <BlockIcon fontSize='small'/>\n                              <Typography variant='body1' style={{ marginLeft: 8 }}>\n                                {t('autoQuotationBidDetail.declineRequest')}\n                              </Typography>\n                            </IconButton>\n                        </span>\n                      </Tooltip>\n                    </MenuItem>\n                  }\n                  {(currentBidResponse.status === 'submitted' && currentBidResponse?.BidInvitation?.userId === identity.get('uid')) &&\n                    <MenuItem>\n                      <Tooltip title={t('pricingRequests.importPricingAction')}>\n                        <span>\n                            <IconButton className={classes.disableIcon} onClick={() => {handleImportPrice();}} size='small'>\n                              <MonetizationOnIcon fontSize='small'/>\n                              <Typography variant='body1' style={{ marginLeft: 8 }}>\n                                {t('pricingRequests.importPricingAction')}\n                              </Typography>\n                            </IconButton>\n                        </span>\n                      </Tooltip>\n                    </MenuItem>\n                  }\n                </Menu>\n              }\n            </>\n          }\n          {(bids.length === 0) &&\n            <Grid container={true} direction='column' alignItems='center' justify='center'>\n              <CallToActionWidgetContent\n                ImageProps={notFoundImage}\n                ButtonProps={null}\n                buttonToolTip={null}\n                label={null}\n                title={callToActionTitle || ''}\n                description={null}\n              >\n                <Typography variant='body1'>\n                  {callToActionDescription || ''}\n                </Typography>\n              </CallToActionWidgetContent>\n            </Grid>\n          }\n        </>\n      }\n      {(declineOpen) &&\n        <DeclineDialog\n          declineOpen={declineOpen}\n          handleDeclineClose={handleDeclineClose}\n          id={bidResponseId}\n        />\n      }\n    </>\n  );\n};\nexport default BidResponseProjectListTable;","import React, {useCallback, useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport _ from 'lodash';\nimport {useTranslation} from 'react-i18next';\n\nimport {\n  Grid,\n  Paper,\n  Theme,\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\n\nimport {makeSelectEnv, makeSelectAppId} from '../../../../modules/AtsModule/selectors';\nimport BidInvitationServiceApi from '../../../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport noDataImage from '../../../../images/dashboard/empty-project.svg';\nimport SendPricingRequestsWidgetUtil from './SendPricingRequestsWidgetUtil';\nimport SendPricingRequestsProjectTable from './widget/SendPricingRequestsProjectTable';\nimport BidResponseProjectListTable from './widget/BidResponseProjectListTable';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    height: '100%'\n  },\n}));\n\nconst SendPricingRequestsProjectWidget = ({\n                                            searchPricingRequestsFilter,\n                                            pricingRequestsViewType,\n                                            searchTerm,\n                                            columnsToDisplay,\n}) => {\n  const { t } = useTranslation('translations');\n  const notFoundImage = {\n    src: 'gJBSzw3E7NFPhWpQqRsb0ERddnsDgoqx' || noDataImage,\n    fromService: 'gJBSzw3E7NFPhWpQqRsb0ERddnsDgoqx' || noDataImage,\n  };\n  const classes = useStyles();\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const initInvitationOptions = {\n    offset: 0,\n    limit: 10\n  };\n  const [invitationOptions, setInvitationOptions] = useState(initInvitationOptions);\n  const initResponseOptions = {\n    offset: 0,\n    limit: 10\n  };\n  const [responseOptions, setResponseOptions] = useState(initResponseOptions);\n  const [invitations, setInvitations] = useState([]);\n  const [invitationPage, setInvitationPage] = useState(0);\n  const [totalInvitationCount, setTotalInvitationCount] = useState(0);\n\n  const [bids, setBids] = useState([]);\n  const [responsePage, setResponsePage] = useState(0);\n  const [totalResponseCount, setTotalResponseCount] = useState(0);\n\n  const [invitationSortingOptions, setInvitationSortingOptions]  = useState(      [\n    {\n      columnId: 'createdAt',\n      direction: 'desc'\n    },\n    {\n      columnId: 'updatedAt',\n      direction: 'desc'\n    },\n  ]);\n\n  const [responseSortingOptions, setResponseSortingOptions]  = useState(      [\n    {\n      columnId: 'createdAt',\n      direction: 'desc'\n    },\n    {\n      columnId: 'updatedAt',\n      direction: 'desc'\n    },\n  ]);\n\n  const [loaded, setLoaded] = useState(false);\n\n  const getInvitationInit = useCallback(async (pagingOptions, searchFilter, projectSearchTerm, sorting) => {\n    const filter = {...pagingOptions, ...searchFilter};\n    filter.projectSearchTerm = projectSearchTerm;\n    filter.sorting = sorting;\n    SendPricingRequestsWidgetUtil.mappingInvitationSearchFilter(filter);\n    const invitationsResults = await BidInvitationServiceApi.findGroupedByQuote(env, appId, filter);\n    if (invitationsResults?.success) {\n      const sortedInvitations = SendPricingRequestsWidgetUtil.sortInvitationsResponses(invitationsResults?.data, sorting);\n      setInvitations(sortedInvitations);\n      setTotalInvitationCount(invitationsResults.count);\n    }\n    setLoaded(true);\n  }, []);\n\n  const getResponseInit = useCallback(async (pagingOptions, searchFilter, projectSearchTerm, sorting) => {\n    const filter = {...pagingOptions, ...searchFilter};\n    filter.projectSearchTerm = projectSearchTerm;\n    filter.sorting = sorting;\n    SendPricingRequestsWidgetUtil.mappingResponseSearchFilter(filter);\n    const invitationResponseResult = await BidInvitationServiceApi.fetchAllInvitationResponseByUserType(env, appId, filter);\n    if (invitationResponseResult?.success) {\n      setBids(invitationResponseResult.data);\n      setTotalResponseCount(invitationResponseResult.count);\n    }\n    setLoaded(true);\n  }, []);\n\n  useEffect(() => {\n    if (pricingRequestsViewType) {\n      setLoaded(false);\n      setInvitationPage(0);\n      const currentInvitationOptions = {\n        offset: 0,\n        limit: invitationOptions.limit\n      };\n      setInvitationOptions(currentInvitationOptions);\n      getInvitationInit(currentInvitationOptions, searchPricingRequestsFilter, searchTerm, invitationSortingOptions);\n    }\n  }, [searchPricingRequestsFilter, pricingRequestsViewType, searchTerm, columnsToDisplay]);\n\n  useEffect(() => {\n    if (!pricingRequestsViewType) {\n      setLoaded(false);\n      setResponsePage(0);\n      const currentResponseOptions = {\n        offset: 0,\n        limit: responseOptions.limit\n      };\n      setResponseOptions(currentResponseOptions);\n      getResponseInit(currentResponseOptions, searchPricingRequestsFilter, searchTerm, responseSortingOptions);\n    }\n  }, [searchPricingRequestsFilter, pricingRequestsViewType, searchTerm, columnsToDisplay]);\n\n  const handleInvitationChangePage = (newPage: number) => {\n    if (newPage <= 0) {\n      newPage = 0;\n    }\n    setLoaded(false);\n    setInvitationPage(newPage);\n    const offset = newPage * invitationOptions.limit;\n    const currentInvitationOptions = {\n      offset,\n      limit: invitationOptions.limit\n    };\n    setInvitationOptions(currentInvitationOptions);\n    getInvitationInit(currentInvitationOptions, searchPricingRequestsFilter, searchTerm, invitationSortingOptions);\n  };\n\n  const handleResponseChangePage = (newPage: number) => {\n    if (newPage <= 0) {\n      newPage = 0;\n    }\n    setLoaded(false);\n    setResponsePage(newPage);\n    const offset = newPage * responseOptions.limit;\n    const currentResponseOptions = {\n      offset,\n      limit: responseOptions.limit\n    };\n    setResponseOptions(currentResponseOptions);\n    getResponseInit(currentResponseOptions, searchPricingRequestsFilter, searchTerm, responseSortingOptions);\n  };\n\n  const handleInvitationSortingChange = (columnId) => {\n    const newSortingOptions = invitationSortingOptions.map(option => {\n      const currentDirection = option.direction;\n      let newDirection = currentDirection;\n      if (option.columnId === columnId) {\n        newDirection = currentDirection === 'asc' ? 'desc' : 'asc';\n      }\n      return {\n        ...option,\n        direction: newDirection,\n      };\n    });\n\n    const selectedOption = newSortingOptions.find(option => option.columnId === columnId);\n    const otherOptions = newSortingOptions.filter(option => option.columnId !== columnId);\n    const finalSortingOptions = [selectedOption, ...otherOptions];\n    setInvitationSortingOptions(finalSortingOptions);\n    const sortedInvitations = SendPricingRequestsWidgetUtil.sortInvitationsResponses(invitations, finalSortingOptions);\n    setInvitations(sortedInvitations);\n  };\n\n  const handleInvitationChangeRowsPerPage = (limit) => {\n    setLoaded(false);\n    setInvitationPage(0);\n    const currentInvitationOptions = {\n      offset: 0,\n      limit\n    };\n    setInvitationOptions(currentInvitationOptions);\n    getInvitationInit(currentInvitationOptions, searchPricingRequestsFilter, searchTerm, invitationSortingOptions);\n  };\n\n  const handleResponseChangeRowsPerPage = (limit) => {\n    setLoaded(false);\n    setResponsePage(0);\n    const currentResponseOptions = {\n      offset: 0,\n      limit\n    };\n    setResponseOptions(currentResponseOptions);\n    getResponseInit(currentResponseOptions, searchPricingRequestsFilter, searchTerm, responseSortingOptions);\n  };\n\n  const handleResponseSortingChange = async (columnId) => {\n    const currentFieldSort = _.find(responseSortingOptions, {columnId});\n    const newSortDirection = currentFieldSort?.direction === 'asc' ? 'desc' : 'asc';\n    const updatedOptions = responseSortingOptions.map(option =>\n      option.columnId === columnId\n        ? { ...option, direction: newSortDirection }\n        : option\n    );\n    const otherOptions = updatedOptions.filter(option => option.columnId !== columnId);\n    const newPrimarySort = {\n      columnId,\n      direction: newSortDirection,\n    };\n    const newSortingOptions = [newPrimarySort, ...otherOptions];\n    await getResponseInit(responseOptions, searchPricingRequestsFilter, searchTerm, newSortingOptions);\n    setResponseSortingOptions(newSortingOptions);\n    setResponseOptions((prev) => ({\n      ...prev,\n      offset: 0\n    }));\n    setResponsePage(0);\n  };\n\n  return (\n    <Grid\n      item={true}\n      xs={12}\n      className={classes.contentItemContainer}\n    >\n      <Paper\n        className={classes.tableContainer}\n      >\n        {(pricingRequestsViewType) &&\n          <SendPricingRequestsProjectTable\n            widgetName={'SendPricingRequestsProjectWidget'}\n            loaded={loaded}\n            invitations={invitations}\n            page={invitationPage}\n            totalCount={totalInvitationCount}\n            rowsPerPage={invitationOptions.limit}\n            notFoundImage={notFoundImage}\n            callToActionTitle={t('pricingRequests.emptyViewPR')}\n            callToActionDescription={null}\n            notifyPageChange={handleInvitationChangePage}\n            notifySortingChange={handleInvitationSortingChange}\n            notifyChangeRowsPerPage={handleInvitationChangeRowsPerPage}\n            sortingOptions={invitationSortingOptions}\n            columnsToDisplay={columnsToDisplay}\n          />\n        }\n        {(!pricingRequestsViewType) &&\n          <BidResponseProjectListTable\n            widgetName={'projects_import_pricing_widget'}\n            loaded={loaded}\n            bids={bids}\n            page={responsePage}\n            totalCount={totalResponseCount}\n            rowsPerPage={responseOptions.limit}\n            notFoundImage={notFoundImage}\n            callToActionTitle={t('pricingRequests.emptyViewPR')}\n            callToActionDescription={null}\n            notifyPageChange={handleResponseChangePage}\n            notifySortingChange={handleResponseSortingChange}\n            notifyReload={null}\n            notifyChangeRowsPerPage={handleResponseChangeRowsPerPage}\n            sortingOptions={responseSortingOptions}\n            columnsToDisplay={columnsToDisplay}\n          />\n        }\n      </Paper>\n    </Grid>\n  );\n\n};\n\nexport default SendPricingRequestsProjectWidget;","import * as React from 'react';\nimport {\n  Button,\n  Chip, FormControlLabel,\n  Grid, Switch,\n  Typography\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap/index';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { List, Map } from 'immutable';\nimport { getFormValues } from 'redux-form/immutable';\nimport {\n  change,\n  reset,\n  initialize,\n} from 'redux-form';\nimport { makeSelectCities, makeSelectCountries, makeSelectProvinces } from '../../../modules/ProjectLocationModule/selectors';\nimport { ListItem } from '../../../models';\nimport { utcToLocal } from 'ats-utils/src';\n\nconst useStyles = makeStyles(theme => ({\n  container: {\n    padding: theme.spacing(0.5, 3),\n    marginBottom: theme.spacing(-2.5),\n  },\n  chip: {\n    borderRadius: theme.shape.borderRadius,\n    margin: theme.spacing(.25),\n    height: 'auto',\n    padding: `${theme.spacing(.5)}px 0`,\n    whiteSpace: 'normal',\n  },\n  chipWrap: {\n    whiteSpace: 'normal',\n  },\n}));\n\ninterface IFilterChipsBarComponentProps {\n  filtersFormId: any;\n  searchPricingRequestsFilter?: any;\n  notifySearchPricingRequests: (args: any) => void;\n  setUniqueKey?: (key: any) => void;\n  containerStyle?: React.CSSProperties;\n  notifyViewTypeChange: (viewTpe: boolean) => void;\n  pricingRequestsViewType: boolean;\n}\n\ninterface IFilterChipsBarProps extends IFilterChipsBarComponentProps {\n  filtersFormValues: IMap<any>;\n  fieldsList: IMap<any>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  dispatch(action: IAction): void;\n}\n\ntype FilterChipsBarPropsType = IFilterChipsBarProps & WithTranslation;\n\nconst PricingRequestFilterChipsBar: React.FC<FilterChipsBarPropsType> = (props) => {\n\n  const {\n    dispatch,\n    t,\n    filtersFormId,\n    notifySearchPricingRequests,\n    setUniqueKey = null,\n    filtersFormValues,\n    fieldsList,\n    containerStyle = {},\n    notifyViewTypeChange,\n    pricingRequestsViewType,\n    searchPricingRequestsFilter,\n  } = props;\n  const {\n    container,\n    chip,\n    chipWrap\n  } = useStyles();\n\n  const clearFilters = () => {\n    dispatch(\n      initialize(\n        filtersFormId,\n        {}\n      )\n    );\n    dispatch(reset(filtersFormId));\n\n    if (setUniqueKey) {\n      setUniqueKey(Date.now());\n    }\n    notifySearchPricingRequests(null);\n  };\n\n  const getLabelKey = (fieldName: string) => {\n    switch (fieldName) {\n      case 'country.eq':\n        return `${t('filterChips.location')} ${t('filterChips.country')}`;\n      case 'province.eq':\n        return `${t('filterChips.location')} ${t('filterChips.stateProvince')}`;\n      case 'city.eq':\n        return `${t('filterChips.location')} ${t('filterChips.city')}`;\n      case 'name.like': return t('pricingRequests.projectQuoteFilter');\n      case 'regionId.in': return t('filterChips.region');\n      case 'status.in': return t('autoQuotationBidDetail.status');\n      case 'contacts.in': return t('pricingRequests.recipient');\n      case 'createdAt.startDate': return `${t('autoQuotationBidDetail.dateSent')} ${t('filterChips.startBy')}`;\n      case 'createdAt.endDate': return `${t('autoQuotationBidDetail.dateSent')} ${t('filterChips.endBy')}`;\n      case 'updatedAt.startDate': return `${t('autoQuotationBidDetail.receivedDate')} ${t('filterChips.startBy')}`;\n      case 'updatedAt.endDate': return `${t('autoQuotationBidDetail.receivedDate')} ${t('filterChips.endBy')}`;\n      case 'bidDateAt.startDate': return `${t('autoQuotationBidDetail.bidDate')} ${t('filterChips.startBy')}`;\n      case 'bidDateAt.endDate': return `${t('autoQuotationBidDetail.bidDate')} ${t('filterChips.endBy')}`;\n      default: return '';\n    }\n  };\n\n  const getLabelValue = (fieldName: string, valuePath: any[]) => {\n    switch (fieldName) {\n      case 'country.eq':\n      case 'province.eq':\n      case 'city.eq':\n      case 'regionId.in':\n        return filtersFormValues.getIn(valuePath.concat(['value']));\n      case 'name.like':\n        return filtersFormValues.getIn(valuePath);\n      case 'contacts.in':\n        return filtersFormValues.getIn(valuePath).map(x => {\n          const { firstName, lastName, organization } = x;\n          if (firstName && lastName) {\n            return firstName + ' ' + lastName;\n          }\n          if (firstName) {\n            return firstName;\n          }\n          return organization;\n        });\n      case 'createdAt.startDate':\n      case 'createdAt.endDate':\n      case 'updatedAt.startDate':\n      case 'updatedAt.endDate':\n      case 'bidDateAt.startDate':\n      case 'bidDateAt.endDate':\n        return utcToLocal(filtersFormValues.getIn(valuePath));\n      case 'status.in':\n        const temp = filtersFormValues.getIn(valuePath).map(x => Map.isMap(x) ? x.get('value') : x.value);\n        if (Array.isArray(temp)) {\n          return temp;\n        }\n        return temp.toJS();\n      default: return '';\n    }\n  };\n\n  const fieldsWithMultiValues = ['name.like', 'contacts.in', 'status.in' ];\n  const filterChipsList = fieldsList && filtersFormValues && fieldsList.entrySeq().reduce((acc, filter) => {\n    const fieldName = filter[1].get('name');\n    const formsValuePath = filter[1].get('valuePath');\n    const labelValue = filtersFormValues.getIn(formsValuePath) && getLabelValue(fieldName, formsValuePath);\n    if (!labelValue) {\n      return acc;\n    }\n    const labelKey = getLabelKey(fieldName);\n    const label = typeof labelValue === 'boolean' ? labelKey : `${labelKey} - ${labelValue}`;\n    // some fields contain multi values and we want to display individual chips for each value\n    if (fieldsWithMultiValues.includes(fieldName)) {\n      const labelList = labelValue.map((value, index) => ( {fieldName: `${fieldName}.${index}`, label: `${labelKey} - ${value}`, originalFieldName: fieldName} ));\n      return acc.concat(labelList);\n    } else {\n      return acc.push({fieldName, label});\n    }\n  }, List())?.sort((a, b) => {\n    const {label: aLabel} = a;\n    const {label: bLabel} = b;\n    if (aLabel.toLowerCase() < bLabel.toLowerCase()) {\n      return -1;\n    }\n    if (aLabel.toLowerCase() > bLabel.toLowerCase()) {\n      return 1;\n    }\n    return 0;\n  }) || List();\n\n  const handleSwitchView = (e) => {\n    notifyViewTypeChange(e.target.checked);\n  };\n\n  return (\n    <Grid\n      container={true}\n      alignItems='baseline'\n      wrap='nowrap'\n      className={container}\n      style={containerStyle}\n    >\n      <Grid container={true} style={{width: 'auto'}} alignItems='center'>\n        <Typography>{t('filterChips.appliedFilters')}</Typography>\n      </Grid>\n      <Grid container={true} style={{flex: '1 0 0px'}}>\n        {\n          filterChipsList.map((filter) => {\n            const {fieldName, label, originalFieldName} = filter;\n            return (\n              <Grid item={true} key={fieldName}>\n                <Chip\n                  className={chip}\n                  label={label}\n                  onDelete={() => {\n                    // for fields with multi values, we remove the value from the array\n                    if (originalFieldName && fieldsWithMultiValues.includes(originalFieldName)) {\n                      const deleletedIndex = fieldName.split('.')[2];\n                      const valuePath = originalFieldName.split('.');\n                      // the config field from PIM series list filter is immutable,\n                      // the other fields are from AQ project list filter and are regular array\n                      const updatedList = filtersFormValues.getIn(valuePath).filter((value, index) => index !== Number(deleletedIndex));\n                      dispatch(change(filtersFormId, originalFieldName, updatedList));\n                    } else {\n                      dispatch(change(filtersFormId, fieldName, null));\n                    }\n                  }}\n                  classes={{\n                    label: chipWrap\n                  }}\n                />\n              </Grid>\n            );\n          })\n        }\n      </Grid>\n      <Grid container={true} style={{width: 'auto', marginRight: 80}}>\n        <FormControlLabel control={\n          <Switch color='primary' checked={pricingRequestsViewType} onChange={handleSwitchView} />\n          } label={t('pricingRequests.viewByProjects')}\n        />\n\n        <Button\n          onClick={clearFilters}\n          color='primary'\n          style={{visibility: filterChipsList.size > 0 ? 'visible' : 'hidden'}}\n        >\n          {t('formButtons.reset')}\n        </Button>\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state: any, ownProps) => {\n  const { filtersFormId } = ownProps;\n  const registeredFields = state.getIn(['form', filtersFormId, 'registeredFields']);\n  const fieldsList = registeredFields && registeredFields.reduce((acc, field: any) => {\n    const fieldName = field.get('name');\n    const valuePath = fieldName.split('.');\n    return acc.set(fieldName, Map({name: fieldName, valuePath}));\n  }, Map());\n\n  return {\n    fieldsList,\n    filtersFormValues: getFormValues(filtersFormId)(state),\n    countries: makeSelectCountries()(state),\n    provinces: makeSelectProvinces()(state),\n    cities: makeSelectCities()(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => ({\n  dispatch,\n});\n\nexport default compose<React.ComponentClass<IFilterChipsBarComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(PricingRequestFilterChipsBar);\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {\n  Tooltip,\n} from '@material-ui/core';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport EmailIcon from '@material-ui/icons/Email';\nimport AttachmentIcon from '@material-ui/icons/Attachment';\n\ninterface IProjectSourceIconProps {\n  source: string;\n}\n\nconst ProjectSourceIcon = ({ source }: IProjectSourceIconProps) => {\n  const { t } = useTranslation('translations');\n\n  const projectSourceIconMap = {\n    'documents': (\n      <Tooltip title={t('ProjectInfoWidget.documentsSourceTooltip')}>\n        <DescriptionIcon color='primary' />\n      </Tooltip>\n    ),\n    'emailAttachment': (\n      <Tooltip title={t('ProjectInfoWidget.emailAttachmentSourceTooltip')}>\n        <EmailIcon color='primary' />\n      </Tooltip>\n    ),\n    'emailBidtracer': (\n      <Tooltip title={t('ProjectInfoWidget.emailBidtracerSourceTooltip')}>\n        <AttachmentIcon color='primary' />\n      </Tooltip>\n    ),\n  };\n\n  return projectSourceIconMap[source] || null;\n};\n\nexport default ProjectSourceIcon;","import React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n  TableCell,\n  Theme,\n} from '@material-ui/core';\nimport ProjectSourceIcon from './ProjectSourceIcon';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  textCellCell: {\n    textAlign: 'center',\n  },\n}));\n\nconst ProjectSourceCell = ({ source }) => {\n  const classes = useStyles();\n\n  return (\n    <TableCell\n      className={classes.textCellCell}\n    >\n      <ProjectSourceIcon source={source} />\n    </TableCell>\n  );\n};\n\nexport default ProjectSourceCell;","import React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n  Link,\n  TableCell,\n  Theme,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getLocalePrefix, USER_DETAILS_PATH } from '../../../constants';\nimport { makeSelectIsRestrictedOutsideSalesRep } from '../../../modules/AtsModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  assignedTos: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    maxWidth: '150px',\n  },\n  assignedTo: {\n    cursor: 'pointer'\n  },\n  assignedTosTooltip: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[1],\n    fontSize: '1em'\n  },\n}));\n\nconst AssignedToCell = ({ assignedTo }) => {\n  const classes = useStyles();\n  // const dispatch = useDispatch();\n  const isRestrictedOutsideSalesRep = useSelector(makeSelectIsRestrictedOutsideSalesRep());\n\n  const assignedToDisplay = assignedTo && assignedTo.map((user, customerIndex) => {\n    const userName = user.get('fullName');\n\n    if (isRestrictedOutsideSalesRep) {\n      return <Link\n        color='textSecondary'\n        underline={'none'}\n        variant='body1'\n        key={customerIndex}\n      >\n        {customerIndex ? ', ' + userName : userName}\n      </Link>;\n    }\n\n    return <Link\n      className={classes.assignedTo}\n      color='primary'\n      key={customerIndex}\n      target={'_blank'}\n      href={`${window.location.origin}${getLocalePrefix()}${USER_DETAILS_PATH}/${user.get('id')}`}\n      // onClick={() => {\n      //   dispatch(new GetContactsSucceededAction({contacts: fromJS([contact])})); /* Hacky workaround for the way the contacts drawer works. This populates the correct field in redux with the necessary contact data */\n      //   dispatch(new SetOverlayComponentContentAction({id: DRAWER_ID, content: 'DEFAULT'}));\n      //   dispatch(new SelectContactAction(contact.get('id')));\n      //   dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID, open: true}));\n      // }}\n    >\n      {customerIndex ? ', ' + userName : userName}\n    </Link>;\n  });\n\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n      }}\n    >\n      <Tooltip\n        interactive={true}\n        placement='bottom-start'\n        title={assignedToDisplay}\n        classes={{\n          tooltip: classes.assignedTosTooltip\n        }}\n      >\n        <div className={classes.assignedTos}>\n          { assignedToDisplay }\n        </div>\n      </Tooltip>\n    </TableCell>\n  );\n};\n\nexport default AssignedToCell;","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress, TableSortLabel,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  Map,\n  List as ImmutableList,\n  List\n} from 'immutable';\nimport { makeSelectSearchedProjects, makeSelectSearchingProjects, makeSelectSearchedProjectsHasNextPage } from '../../../src/modules/ProjectModule/selectors';\nimport { SearchProjectsAction, GetTrackedProjectsAction, LoadingSearchedProjectAction } from '../../../src/modules/ProjectModule/actions';\nimport {\n  debounce\n} from 'lodash';\n\nimport { destroy } from 'redux-form';\nimport {\n  makeSelectIsRestrictedOutsideSalesRep,\n  makeSelectUserId,\n  makeSelectUserHasQuoteConnectAcl\n} from '../../../src/modules/AtsModule/selectors';\nimport {AMPLITUDE_EVENT, COLUMN_TYPES, CREATE_NEW_PROJECT_PATH, PROJECT_LIST_DETAIL_PATH} from '../../../src/constants';\nimport { togglePath } from '../../../src/components/TogglePath/utils';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../../src/modules/RouterModule/selectors';\nimport NotFound from '../../../src/components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport ProjectListFilter from './ProjectListFilter';\nimport { Project, Option, TableColumn, SearchArgs, Filter, ListItem, SavedFilter} from '../../models';\nimport { TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport ToolBar from '../../components/ToolBar';\nimport ColumnSelector from '../../components/ColumnsSelector';\nimport { LinkCell, TextCell, QuotesCell, TrackProjectButton } from '../../components/_CellRenderers';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport {getFormNames, getFormValues } from 'redux-form/immutable';\nimport { PT_PROJECT_LIST_FILTER_FORM } from './ProjectListFilter/index';\nimport { makeSelectCities, makeSelectCountries, makeSelectProvinces } from '../../modules/ProjectLocationModule/selectors';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { AtsSvgFolder } from '../../components/AtsSvg';\nimport { makeSelectFilterList } from '../../modules/AccountModule/selectors';\nimport { GetFiltersByType } from '../../modules/AccountModule/actions';\nimport FilterChipsBar from '../../components/FilterChipsBar';\n\nimport ProjectHeaderTabs from './ProjectHeaderTabs';\nimport PricingRequestFilter from './PricingRequest/PricingRequestFilter';\nimport {PT_PRICING_REQUESTS_FILTER_FORM} from './PricingRequest/PricingRequestFilter';\nimport SendPricingRequestsProjectWidget\n  from '../Dashboard/WidgetLoader/SendPricingRequestsWidget/SendPricingRequestsProjectWidget';\nimport ProjectUtil from './ProjectUtil';\nimport PricingRequestFilterChipsBar from './PricingRequest/PricingRequestFilterChipsBar';\nimport SendPricingRequestsWidgetUtil\n  from '../Dashboard/WidgetLoader/SendPricingRequestsWidget/SendPricingRequestsWidgetUtil';\nimport i18next from 'i18next';\nimport ProjectSourceCell from './_CustomCellRenderers/ProjectSourceCell';\nimport AssignedToCell from './_CustomCellRenderers/AssignedToCell';\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<Project> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\n// INTERFACES\n\ninterface IProjectListComponentProps {\n}\n\ninterface IProjectListProps extends IProjectListComponentProps {\n  dispatch: (s: IAction) => void;\n  searchProjects: (options: Option<Project>, filters?: Filter) => void;\n  searchedProjects: Map<number, IMap<Project>>;\n  searchedProjectsHasNextPage: boolean;\n  searchingProjects: boolean;\n  theme: Theme;\n  userId: number;\n  location: IMap<IRouterReducerLocation>;\n  t: (key: string) => string;\n  formValues: Map<string, any>;\n  pricingRequestFormValues: Map<string, any>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  projectColumnsList: List<IMap<SavedFilter>>;\n  isRestrictedOutsideSalesRep: boolean;\n  hasQuoteConnectAcl: boolean;\n  pricingRequestsProjectViewColumnsList: List<IMap<SavedFilter>>;\n  pricingRequestsResponseViewColumnsList: List<IMap<SavedFilter>>;\n  forms: List<any>;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[200],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n    // position: 'sticky',\n    // top: 0,\n    // zIndex: 9001 /* It's over 9000!!!!! */\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  }\n});\n\ntype IProjectList = IProjectListProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  projectListColumns: TableColumn[];\n  pricingRequestsProjectViewColumns: TableColumn[];\n  pricingRequestsResponseViewColumns: TableColumn[];\n  anchorEl: HTMLElement;\n  page: number;\n  searchTerm: string;\n  projectListSearchTerm: string;\n  pricingRequestsSearchTerm: string;\n  openFilterDrawer: boolean;\n  openColumnsDrawer: boolean;\n  options: Option<Project>;\n  filters: Filter;\n  projectListFilterUniqueKey: any;\n  tabValue: string;\n  pricingRequestsFilterUniqueKey: any;\n  searchPricingRequestsFilter: any;\n  pricingRequestsViewType: boolean;\n}\n\nexport const buildingType = (_buildingClasses: any, fallback?: string) => { /* some extra type checking in this function to prevent crashing from old shape of data */\n  const buildingClasses = _buildingClasses?.get('buildingClasses') ?? _buildingClasses;\n\n  if (!buildingClasses) {\n    return fallback;\n  }\n\n  const buildingClassesCount: number = buildingClasses.count() || 0;\n  const firstBuildingClass = buildingClasses.get(0) || ImmutableList();\n  const buildingTypes: ImmutableList<any> = firstBuildingClass.get('buildingTypes') || ImmutableList();\n  const buildingTypesCount: number = buildingTypes.count() || 0;\n  if (buildingClassesCount > 1 || buildingTypesCount > 1) {\n    return i18next.t('translations:NewProjectBuildingSelection.MultiUse', 'Multi-use');\n  }\n\n  return [firstBuildingClass.get('value'), firstBuildingClass.getIn(['buildingTypes', 0, 'value'])].filter(y => y).join(' - ');\n};\n\nclass ProjectList extends React.Component<IProjectList, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const { tabValue, pricingRequestsViewType } = this.state;\n    if (tabValue === 'projectList') {\n      const {\n        options\n      } = this.state;\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        searchTerm,\n        page: 0\n      });\n    }\n    if (tabValue === 'pricingRequests') {\n      const newData = {\n        searchTerm,\n        pricingRequestsSearchTerm: searchTerm\n      };\n      if (pricingRequestsViewType) {\n        if (this.state?.pricingRequestsProjectViewColumns) {\n          newData['columnsToDisplay'] = SendPricingRequestsWidgetUtil.resetDisplayColumns(this.state?.pricingRequestsProjectViewColumns);\n        }\n      }\n      this.setState(newData);\n    }\n  }, 500);\n\n  constructor(props: IProjectList) {\n    super(props);\n    const urlParams = new URLSearchParams(location.search);\n    let linkTab = 'projectList';\n    if (urlParams.get('linkTab') === 'pricingRequests') {\n      linkTab = 'pricingRequests';\n    }\n    this.state = {\n      anchorEl: null,\n      // someone mixed concept 'columnsToDisplay' with 'columnsToSort', make sure unsortable columns appear before sortable columns or you have to do refactor to seperate concerns, 2020-03-11 https://atsinc.atlassian.net/browse/PT-1261\n      columnsToDisplay: ProjectUtil.projectListColumns(),\n      projectListColumns: ProjectUtil.projectListColumns(),\n      pricingRequestsProjectViewColumns: ProjectUtil.priceRequestProjectViewColumns(),\n      pricingRequestsResponseViewColumns: ProjectUtil.priceRequestResponseViewColumns(),\n      openFilterDrawer: false,\n      openColumnsDrawer: false,\n      page: 0,\n      searchTerm: '',\n      projectListSearchTerm: '',\n      pricingRequestsSearchTerm: '',\n      filters: null,\n      options: defaultOptions,\n      projectListFilterUniqueKey: '',\n      tabValue: linkTab,\n      pricingRequestsFilterUniqueKey: '',\n      searchPricingRequestsFilter: null,\n      pricingRequestsViewType: true,\n    };\n  }\n\n  public getDirection = (_sortBy: string) => {\n    const { options } = this.state;\n\n    const sortBy = Object.keys(options.orderBy)[0];\n    const order = options.orderBy[sortBy] === 1 ? 'asc' : 'desc';\n\n    if (_sortBy === sortBy) {\n      return order;\n    } else {\n      if (order === 'asc') {\n        return 'desc';\n      } else {\n        return 'asc';\n      }\n    }\n  }\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n      openColumnsDrawer: false\n    }));\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState(prevState => ({\n      openColumnsDrawer: !prevState.openColumnsDrawer,\n      openFilterDrawer: false\n    }));\n  }\n  public getSortedProducts = (_sortBy: string) => {\n    const { options } = this.state;\n\n    const sortBy = Object.keys(options.orderBy)[0];\n    const order = options.orderBy[sortBy] === 1 ? 'asc' : 'desc';\n\n    const newOptions = {\n      ...options,\n      offset: 0,\n      orderBy: {\n        [_sortBy]: order === 'asc' ? -1 : 1\n      }\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: 0});\n  }\n  public setSearchArgsAndSearch = (args: SearchArgs<Project>) => {\n    const { tabValue } = this.state;\n    if (tabValue === 'projectList') {\n      const {\n        dispatch,\n        searchProjects\n      } = this.props;\n      const {\n        options: currentOptions,\n        searchTerm: currentSearchTerm,\n        filters: currentFilters,\n        page: currentPage\n      } = this.state;\n      const {\n        options: newOptions,\n        searchTerm: newSearchTerm,\n        filters: newFilters,\n        page: newPage\n      } = args;\n\n      const newState = {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      };\n\n      this.setState(\n        newState,\n        () => {\n          let filters = {\n            'and': []\n          };\n          if (newState.searchTerm) {\n            filters = {\n              'and': [\n                {\n                  'or': [\n                    {\n                      'name': {\n                        'like': newState.searchTerm\n                      }\n                    },\n                    {\n                      'internalNo': {\n                        'like': newState.searchTerm\n                      }\n                    },\n                    {\n                      'address': {\n                        'like': newState.searchTerm\n                      }\n                    },\n                    {\n                      'sourceName': {\n                        'like': newState.searchTerm\n                      }\n                    }\n                  ]\n                }\n              ]\n            };\n          }\n          // TODO: should we ignore this.state.searchTerm when we use advanceSearch??\n          newState.filters && filters.and.push(...newState.filters.and); // tslint:disable-line\n          if (filters.and.length === 0) {\n            delete filters.and;\n          }\n          dispatch(new LoadingSearchedProjectAction());\n          searchProjects(\n            newState.options,\n            filters,\n          );\n        }\n      );\n\n    }\n  }\n\n  public handleSearchPricingRequests = (filterOptions) => {\n    const { pricingRequestsViewType } = this.state;\n    const newData = {\n      searchPricingRequestsFilter: filterOptions\n    };\n    if (pricingRequestsViewType) {\n      if (this.state?.pricingRequestsProjectViewColumns) {\n        newData['columnsToDisplay'] = SendPricingRequestsWidgetUtil.resetDisplayColumns(this.state?.pricingRequestsProjectViewColumns);\n      }\n    }\n    this.setState(newData);\n\n  }\n\n  public handlePricingImportViewTypeChange = (pricingRequestsViewType) => {\n    this.setState({ pricingRequestsViewType });\n    const newData = {\n      columnsToDisplay: null\n    };\n    if (pricingRequestsViewType) {\n      newData.columnsToDisplay = this.state.pricingRequestsProjectViewColumns;\n    } else {\n      newData.columnsToDisplay = this.state.pricingRequestsResponseViewColumns;\n    }\n    this.setState({\n      openColumnsDrawer: false,\n      ...newData\n    });\n  }\n\n  public componentDidMount() {\n    const {\n      searchProjects,\n      dispatch,\n      projectColumnsList,\n      hasQuoteConnectAcl ,\n      pricingRequestsProjectViewColumnsList,\n      pricingRequestsResponseViewColumnsList,\n      formValues,\n    } = this.props;\n    const {\n      tabValue,\n      options,\n      projectListColumns,\n      filters,\n      pricingRequestsResponseViewColumns,\n      searchPricingRequestsFilter,\n    } = this.state;\n    if (tabValue === 'projectList' && !formValues?.size) {\n      this.setState({\n        columnsToDisplay: projectListColumns,\n        filters\n      }, () => this.setSearchArgsAndSearch({}));\n      // Populate Searched Projects\n      // searchProjects(options);\n      // Populate Tracked Projects\n      dispatch(new GetTrackedProjectsAction({type: 'user', typeId: this.props.userId, projectId: 0}));\n      dispatch(new LoadingSearchedProjectAction());\n\n      if (!projectColumnsList) {\n        dispatch(new GetFiltersByType({filterType: COLUMN_TYPES.PT_PROJECT_LIST_COLUMNS}));\n      }\n    }\n    if (hasQuoteConnectAcl) {\n      if (tabValue === 'pricingRequests') {\n        this.setState({\n          columnsToDisplay: pricingRequestsResponseViewColumns,\n          filters: searchPricingRequestsFilter\n        });\n      }\n      if (!pricingRequestsProjectViewColumnsList || pricingRequestsProjectViewColumnsList.size === 0) {\n        dispatch(new GetFiltersByType({filterType: COLUMN_TYPES.PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS}));\n      }\n      if (!pricingRequestsResponseViewColumnsList || pricingRequestsResponseViewColumnsList.size === 0) {\n        dispatch(new GetFiltersByType({filterType: COLUMN_TYPES.PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS}));\n      }\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      searchedProjects,\n      formValues,\n      amplitudeData,\n      location,\n    } = this.props;\n    const { options, page, searchTerm, filters, tabValue } = this.state;\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no projects returned\n    if (tabValue === 'projectList') {\n      if (prevProps.searchedProjects.size && searchedProjects.size === 0 && options.offset) {\n        const newPage = page - 1;\n        const newOffset = options.offset - options.limit;\n        this.setSearchArgsAndSearch({\n          options: {\n            ...options,\n            offset: newOffset\n          },\n          page: newPage\n        });\n      }\n\n      // when searchTerm or filters changes then send amplitude tracking\n      if (prevState.searchTerm !== searchTerm || prevState.filters !== filters) {\n        // only track when searchTerm is not an empty string or filters is not empty\n        if (searchTerm?.length || (!!filters && filters['and'][0])) {\n          const trackedData = ProjectUtil.projectListTrackingData(formValues, searchTerm);\n          amplitude.logEvent(AMPLITUDE_EVENT.filterUsage, amplitudeData(trackedData));\n        }\n      }\n    }\n\n    if (location?.getIn(['state', 'refetchProjects']) && location?.getIn(['state', 'refetchProjects']) !== prevProps.location?.getIn(['state', 'refetchProjects'])) {\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        page: 0\n      });\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const { dispatch, forms } = this.props;\n    if (forms) {\n\n      if (forms.includes(PT_PROJECT_LIST_FILTER_FORM)) {\n        dispatch(destroy(PT_PROJECT_LIST_FILTER_FORM));\n      }\n      if (forms.includes(PT_PRICING_REQUESTS_FILTER_FORM)) {\n        dispatch(destroy(PT_PRICING_REQUESTS_FILTER_FORM));\n      }\n    }\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => {\n    return this.setState({ columnsToDisplay: newColumnsToDisplay });\n  }\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddProject = () => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: CREATE_NEW_PROJECT_PATH,\n      dispatch,\n      location,\n    })()();\n\n    this.setState({ openFilterDrawer: false });\n  }\n\n  public handleTabChange = (newValue) => {\n    const {\n      tabValue,\n      searchTerm,\n      columnsToDisplay,\n      pricingRequestsViewType,\n      projectListColumns,\n      pricingRequestsProjectViewColumns,\n      pricingRequestsResponseViewColumns,\n    } = this.state;\n    const {\n      pricingRequestsProjectViewColumnsList,\n      pricingRequestsResponseViewColumnsList,\n    } = this.props;\n\n    if (tabValue !== newValue) {\n      const newData = {\n        searchTerm: this.state[`${newValue}SearchTerm`],\n        [`${tabValue}SearchTerm`]: searchTerm,\n      };\n      if (newValue === 'projectList') {\n        newData.columnsToDisplay = projectListColumns;\n        newData.projectColumnsList = columnsToDisplay;\n        if (pricingRequestsViewType) {\n          newData.pricingRequestsProjectViewColumns = columnsToDisplay;\n        } else {\n          newData.pricingRequestsResponseViewColumns = columnsToDisplay;\n        }\n      }\n      if (newValue === 'pricingRequests') {\n        newData.projectListColumns = columnsToDisplay;\n        if (pricingRequestsViewType) {\n          if (!pricingRequestsProjectViewColumnsList) {\n            newData.columnsToDisplay = pricingRequestsProjectViewColumns;\n          } else {\n            newData.columnsToDisplay = pricingRequestsProjectViewColumnsList.toJS();\n          }\n          if (!newData?.columnsToDisplay || newData.columnsToDisplay.length === 0) {\n            newData.columnsToDisplay = ProjectUtil.priceRequestProjectViewColumns();\n          }\n        } else {\n          if (!pricingRequestsResponseViewColumnsList) {\n            newData.columnsToDisplay = pricingRequestsResponseViewColumns;\n          } else {\n            newData.columnsToDisplay = pricingRequestsResponseViewColumnsList.toJS();\n          }\n          if (!newData?.columnsToDisplay || newData.columnsToDisplay.length === 0) {\n            newData.columnsToDisplay = ProjectUtil.priceRequestResponseViewColumns();\n          }\n        }\n      }\n      this.setState({\n        tabValue: newValue,\n        openFilterDrawer: false,\n        openColumnsDrawer: false,\n        ...newData\n      }, () => this.setSearchArgsAndSearch({\n        page: 0,\n        options: defaultOptions\n      }));\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      searchedProjects,\n      searchingProjects,\n      searchedProjectsHasNextPage,\n      t,\n      theme,\n      isRestrictedOutsideSalesRep,\n      hasQuoteConnectAcl,\n      forms,\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      filters,\n      page,\n      openFilterDrawer,\n      openColumnsDrawer,\n      columnsToDisplay,\n      tabValue,\n      searchPricingRequestsFilter,\n      pricingRequestsViewType,\n    } = this.state;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display && !(column.id === 'Actions' && isRestrictedOutsideSalesRep));\n    const sortBy = Object.keys(options.orderBy)[0];\n    const order = options.orderBy[sortBy] === 1 ? 'asc' : 'desc';\n    const labels = {\n      emptyviewSubtitle: t('projectList.emptyviewSubtitle'),\n      emptyviewAddButton: t('projectList.emptyviewAddButton'),\n      emptyviewAlt: t('projectList.emptyviewAlt'),\n      emptyviewNotFound: t('projectList.emptyviewNotFound'),\n    };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <ToolBar\n          onClickColumnButton={this.toggleColumnsDrawer}\n          onClickFilterButton={this.toggleFilterDrawer}\n          onClickFab={this.handleAddProject}\n          searchTooltip={t('projectList.projectSearchTooltip')}\n          searchTerm={searchTerm}\n          handleSubmit={this.handleSubmit}\n          showFab={!isRestrictedOutsideSalesRep && tabValue === 'projectList'}\n          leftComponent={\n            hasQuoteConnectAcl ?\n              <ProjectHeaderTabs\n                tabValue={tabValue}\n                notifyTabChange={this.handleTabChange}\n              />\n              : <></>\n          }\n        />\n        {(tabValue === 'projectList') &&\n          <FilterChipsBar\n            filtersFormId={PT_PROJECT_LIST_FILTER_FORM}\n            setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n            options={options}\n            setUniqueKey={(key) => this.setState({ projectListFilterUniqueKey: key})}\n          />\n        }\n        {(tabValue === 'pricingRequests') &&\n          <PricingRequestFilterChipsBar\n            filtersFormId={PT_PRICING_REQUESTS_FILTER_FORM}\n            notifySearchPricingRequests={this.handleSearchPricingRequests}\n            searchPricingRequestsFilter={searchPricingRequestsFilter}\n            setUniqueKey={(key) => this.setState({ pricingRequestsFilterUniqueKey: key})}\n            notifyViewTypeChange={this.handlePricingImportViewTypeChange}\n            pricingRequestsViewType={pricingRequestsViewType}\n          />\n        }\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          {(tabValue === 'projectList') &&\n            <Grid\n              item={true}\n              xs={12}\n              className={classes.contentItemContainer}\n            >\n              {searchingProjects\n                ? <NotFound\n                    svgIcon={<LoadingImage />}\n                    firstRow={<LinearProgress color='secondary'/>}\n                    secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n                    paperContainer={true}\n                  />\n                : <Paper\n                    className={classes.tableContainer}\n                  >\n                    {searchedProjects.size !== 0\n                      ? <>\n                          <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                            <Table>\n                              <TableHead classes={{ root: classes.tableHead }}>\n                                <TableRow>\n                                  {filteredColumnsToDisplay.map((column, index) => {\n                                    const columnSortBy = column.sortBy;\n                                    return (\n                                        columnSortBy ? <TableCell\n                                                key={`${column.label}-${index}`}\n                                                classes={{root: classes.tableCellRoot}}\n                                                style={column.style}\n                                                sortDirection={(columnSortBy && sortBy === columnSortBy) ? order : false}\n                                            >\n                                              <TableSortLabel\n                                                  active={sortBy === columnSortBy}\n                                                  direction={this.getDirection(columnSortBy)}\n                                                  onClick={() => this.getSortedProducts(columnSortBy)}\n                                              >\n                                                {t(column.label)}\n                                              </TableSortLabel>\n                                            </TableCell>\n                                            : <TableCell\n                                                key={`${column.label}-${index}`}\n                                                classes={{root: classes.tableCellRoot}}\n                                                style={column.style}\n                                            >\n                                              {t(column.label)}\n                                            </TableCell>\n                                    );\n                                  })}\n                                </TableRow>\n                              </TableHead>\n                              <TableBody>\n                                {searchedProjects && searchedProjects.map((project: IMap<Project>, index: number) => (\n                                  <TableRow id={`${index}`} key={index} hover={true}>\n                                    {project && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                      switch (column.id) {\n                                        case '': return <TrackProjectButton key={column.label} project={project} />;\n                                        case 'Project Name': return <LinkCell key={column.label} name={project.getIn(column.path)} linkPath={`${PROJECT_LIST_DETAIL_PATH}/${project.get('id')}`} target='_blank' />;\n                                        case 'Internal No.': return <TextCell key={column.label} text={project.getIn(column.path) ? project.getIn(column.path) : '-'} />;\n                                        case 'Project Address': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'City': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'State/Province': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Country': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Assigned To': return <AssignedToCell key={column.label} assignedTo={project.getIn(column.path)} />;\n                                        case 'Bid Date': return <TextCell key={column.label} text={utcToLocal(project.getIn(column.path))} />;\n                                        case 'Building Type': return <TextCell key={column.label} text={buildingType(project.getIn(column.path))} />;\n                                        case 'Valuation': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Quotes': return <QuotesCell key={column.label} project={project} />;\n                                        case 'Project Phase': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Source': return <ProjectSourceCell key={column.label} source={project.getIn(column.path)} />;\n                                        case 'Actions': return <CustomActionButton key={column.label} project={project} options={options} filters={filters} searchTerm={searchTerm}/>;\n                                      }\n                                    })}\n                                  </TableRow>\n                                ))}\n                              </TableBody>\n                            </Table>\n                          </div>\n                          <TablePagination\n                            className={classes.pagination}\n                            component='div'\n                            labelRowsPerPage={t('Pagination.rowsPerPage')}\n                            onChangePage={this.handlePageChange}\n                            rowsPerPageOptions={[5, 10, 25, 50]}\n                            onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                            count={searchedProjectsHasNextPage ? options.offset + options.limit + 1 : options.offset + searchedProjects?.size}\n                            labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                            rowsPerPage={options.limit}\n                            page={page}\n                            ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                            classes={{\n                              toolbar: classes.paginationToolbar\n                            }}\n                          />\n                        </>\n                      : <EmptyView\n                          svg={\n                            <AtsSvgFolder\n                              width='131'\n                              height='131'\n                              color={{\n                                backgroundColor: theme.palette.secondary[300],\n                                shadowColor: theme.palette.secondary.main\n                              }}\n                              margin={String(theme.spacing(3))}\n                            />\n                          }\n                          emptyviewAlt={labels.emptyviewAlt}\n                          emptyviewNotFound={labels.emptyviewNotFound}\n                        />\n                    }\n                  </Paper>\n              }\n            </Grid>\n          }\n          {(tabValue === 'pricingRequests') &&\n            <SendPricingRequestsProjectWidget\n              searchPricingRequestsFilter={searchPricingRequestsFilter}\n              pricingRequestsViewType={pricingRequestsViewType}\n              searchTerm={searchTerm}\n              columnsToDisplay={columnsToDisplay}\n            />\n          }\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            {(tabValue === 'projectList') &&\n              <ProjectListFilter\n                toggleDrawer={this.toggleFilterDrawer}\n                open={this.state.openFilterDrawer}\n                options={options}\n                filters={filters}\n                setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                uniqueKey={this.state.projectListFilterUniqueKey}\n                setUniqueKey={(key) => this.setState({ projectListFilterUniqueKey: key})}\n              />\n            }\n            {(tabValue === 'pricingRequests') &&\n              <PricingRequestFilter\n                toggleDrawer={this.toggleFilterDrawer}\n                open={this.state.openFilterDrawer}\n                notifySearchPricingRequests={this.handleSearchPricingRequests}\n                uniqueKey={this.state.pricingRequestsFilterUniqueKey}\n                setUniqueKey={(key) => this.setState({ pricingRequestsFilterUniqueKey: key})}\n              />\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openColumnsDrawer ? '370px' : 0,\n            }}\n          >\n            {(tabValue === 'projectList') &&\n              <ColumnSelector\n                key={COLUMN_TYPES.PT_PROJECT_LIST_COLUMNS}\n                columnType={COLUMN_TYPES.PT_PROJECT_LIST_COLUMNS}\n                defaultColumns={ProjectUtil.projectListColumns()}\n                columnsToDisplay={columnsToDisplay}\n                disabledColumns={['Project']}\n                isOpen={openColumnsDrawer}\n                onClose={this.toggleColumnsDrawer}\n                handleColumnsChange={this.handleColumnsChange}\n              />\n            }\n            {(tabValue === 'pricingRequests') &&\n              <>\n                {(pricingRequestsViewType) &&\n                  <ColumnSelector\n                    key={COLUMN_TYPES.PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS}\n                    columnType={COLUMN_TYPES.PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS}\n                    defaultColumns={ProjectUtil.priceRequestProjectViewColumns()}\n                    columnsToDisplay={columnsToDisplay}\n                    disabledColumns={['Project']}\n                    isOpen={openColumnsDrawer}\n                    onClose={this.toggleColumnsDrawer}\n                    handleColumnsChange={this.handleColumnsChange}\n                  />\n                }\n                {(!pricingRequestsViewType) &&\n                  <ColumnSelector\n                    key={COLUMN_TYPES.PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS}\n                    columnType={COLUMN_TYPES.PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS}\n                    defaultColumns={ProjectUtil.priceRequestResponseViewColumns()}\n                    columnsToDisplay={columnsToDisplay}\n                    disabledColumns={['Project']}\n                    isOpen={openColumnsDrawer}\n                    onClose={this.toggleColumnsDrawer}\n                    handleColumnsChange={this.handleColumnsChange}\n                  />\n                }\n              </>\n            }\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchProjects: (options: Option<Project>, filters?: Filter) => {\n      dispatch(new SearchProjectsAction({\n        options,\n        filters\n      }));\n    },\n  };\n};\n\nconst mapStateToProps = (originalState: any, originalOwnProps: any) => {\n  return {\n    ...createStructuredSelector({\n        searchedProjects: makeSelectSearchedProjects(),\n        searchedProjectsHasNextPage: makeSelectSearchedProjectsHasNextPage(),\n        searchingProjects: makeSelectSearchingProjects(),\n        userId: makeSelectUserId(),\n        location: makeSelectLocation(),\n        formValues: getFormValues(PT_PROJECT_LIST_FILTER_FORM),\n        pricingRequestFormValues: getFormValues(PT_PRICING_REQUESTS_FILTER_FORM),\n        countries: makeSelectCountries(),\n        provinces: makeSelectProvinces(),\n        cities: makeSelectCities(),\n        projectColumnsList: makeSelectFilterList(COLUMN_TYPES.PT_PROJECT_LIST_COLUMNS),\n        isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n        hasQuoteConnectAcl: makeSelectUserHasQuoteConnectAcl(),\n        pricingRequestsProjectViewColumnsList: makeSelectFilterList(COLUMN_TYPES.PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS),\n        pricingRequestsResponseViewColumnsList: makeSelectFilterList(COLUMN_TYPES.PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS),\n        forms: getFormNames(),\n    })(originalState)\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProjectList);\n","export var COMMON_MIME_TYPES = new Map([\n    ['avi', 'video/avi'],\n    ['gif', 'image/gif'],\n    ['ico', 'image/x-icon'],\n    ['jpeg', 'image/jpeg'],\n    ['jpg', 'image/jpeg'],\n    ['mkv', 'video/x-matroska'],\n    ['mov', 'video/quicktime'],\n    ['mp4', 'video/mp4'],\n    ['pdf', 'application/pdf'],\n    ['png', 'image/png'],\n    ['zip', 'application/zip'],\n    ['doc', 'application/msword'],\n    ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n]);\nexport function toFileWithPath(file, path) {\n    var f = withMimeType(file);\n    if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n        var webkitRelativePath = file.webkitRelativePath;\n        Object.defineProperty(f, 'path', {\n            value: typeof path === 'string'\n                ? path\n                // If <input webkitdirectory> is set,\n                // the File will have a {webkitRelativePath} property\n                // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n                : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n                    ? webkitRelativePath\n                    : file.name,\n            writable: false,\n            configurable: false,\n            enumerable: true\n        });\n    }\n    return f;\n}\nfunction withMimeType(file) {\n    var name = file.name;\n    var hasExtension = name && name.lastIndexOf('.') !== -1;\n    if (hasExtension && !file.type) {\n        var ext = name.split('.')\n            .pop().toLowerCase();\n        var type = COMMON_MIME_TYPES.get(ext);\n        if (type) {\n            Object.defineProperty(file, 'type', {\n                value: type,\n                writable: false,\n                configurable: false,\n                enumerable: true\n            });\n        }\n    }\n    return file;\n}\n//# sourceMappingURL=file.js.map","import { __awaiter, __generator, __read, __spread } from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n    // Thumbnail cache files for macOS and Windows\n    '.DS_Store',\n    'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n * @param evt\n */\nexport function fromEvent(evt) {\n    return __awaiter(this, void 0, void 0, function () {\n        return __generator(this, function (_a) {\n            return [2 /*return*/, isDragEvt(evt) && evt.dataTransfer\n                    ? getDataTransferFiles(evt.dataTransfer, evt.type)\n                    : getInputFiles(evt)];\n        });\n    });\n}\nfunction isDragEvt(value) {\n    return !!value.dataTransfer;\n}\nfunction getInputFiles(evt) {\n    var files = isInput(evt.target)\n        ? evt.target.files\n            ? fromList(evt.target.files)\n            : []\n        : [];\n    return files.map(function (file) { return toFileWithPath(file); });\n}\nfunction isInput(value) {\n    return value !== null;\n}\nfunction getDataTransferFiles(dt, type) {\n    return __awaiter(this, void 0, void 0, function () {\n        var items, files;\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (!dt.items) return [3 /*break*/, 2];\n                    items = fromList(dt.items)\n                        .filter(function (item) { return item.kind === 'file'; });\n                    // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n                    // only 'dragstart' and 'drop' has access to the data (source node)\n                    if (type !== 'drop') {\n                        return [2 /*return*/, items];\n                    }\n                    return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n                case 1:\n                    files = _a.sent();\n                    return [2 /*return*/, noIgnoredFiles(flatten(files))];\n                case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n                        .map(function (file) { return toFileWithPath(file); }))];\n            }\n        });\n    });\n}\nfunction noIgnoredFiles(files) {\n    return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n    var files = [];\n    // tslint:disable: prefer-for-of\n    for (var i = 0; i < items.length; i++) {\n        var file = items[i];\n        files.push(file);\n    }\n    return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n    if (typeof item.webkitGetAsEntry !== 'function') {\n        return fromDataTransferItem(item);\n    }\n    var entry = item.webkitGetAsEntry();\n    // Safari supports dropping an image node from a different window and can be retrieved using\n    // the DataTransferItem.getAsFile() API\n    // NOTE: FileSystemEntry.file() throws if trying to get the file\n    if (entry && entry.isDirectory) {\n        return fromDirEntry(entry);\n    }\n    return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n    return items.reduce(function (acc, files) { return __spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n    var file = item.getAsFile();\n    if (!file) {\n        return Promise.reject(item + \" is not a File\");\n    }\n    var fwp = toFileWithPath(file);\n    return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n    return __awaiter(this, void 0, void 0, function () {\n        return __generator(this, function (_a) {\n            return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n        });\n    });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n    var reader = entry.createReader();\n    return new Promise(function (resolve, reject) {\n        var entries = [];\n        function readEntries() {\n            var _this = this;\n            // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n            // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n            reader.readEntries(function (batch) { return __awaiter(_this, void 0, void 0, function () {\n                var files, err_1, items;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!!batch.length) return [3 /*break*/, 5];\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            return [4 /*yield*/, Promise.all(entries)];\n                        case 2:\n                            files = _a.sent();\n                            resolve(files);\n                            return [3 /*break*/, 4];\n                        case 3:\n                            err_1 = _a.sent();\n                            reject(err_1);\n                            return [3 /*break*/, 4];\n                        case 4: return [3 /*break*/, 6];\n                        case 5:\n                            items = Promise.all(batch.map(fromEntry));\n                            entries.push(items);\n                            // Continue reading\n                            readEntries();\n                            _a.label = 6;\n                        case 6: return [2 /*return*/];\n                    }\n                });\n            }); }, function (err) {\n                reject(err);\n            });\n        }\n        readEntries();\n    });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n    return __awaiter(this, void 0, void 0, function () {\n        return __generator(this, function (_a) {\n            return [2 /*return*/, new Promise(function (resolve, reject) {\n                    entry.file(function (file) {\n                        var fwp = toFileWithPath(file, entry.fullPath);\n                        resolve(fwp);\n                    }, function (err) {\n                        reject(err);\n                    });\n                })];\n        });\n    });\n}\n//# sourceMappingURL=file-selector.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport accepts from 'attr-accept'; // Error codes\n\nexport var FILE_INVALID_TYPE = 'file-invalid-type';\nexport var FILE_TOO_LARGE = 'file-too-large';\nexport var FILE_TOO_SMALL = 'file-too-small';\nexport var TOO_MANY_FILES = 'too-many-files'; // File Errors\n\nexport var getInvalidTypeRejectionErr = function getInvalidTypeRejectionErr(accept) {\n  accept = Array.isArray(accept) && accept.length === 1 ? accept[0] : accept;\n  var messageSuffix = Array.isArray(accept) ? \"one of \".concat(accept.join(', ')) : accept;\n  return {\n    code: FILE_INVALID_TYPE,\n    message: \"File type must be \".concat(messageSuffix)\n  };\n};\nexport var getTooLargeRejectionErr = function getTooLargeRejectionErr(maxSize) {\n  return {\n    code: FILE_TOO_LARGE,\n    message: \"File is larger than \".concat(maxSize, \" bytes\")\n  };\n};\nexport var getTooSmallRejectionErr = function getTooSmallRejectionErr(minSize) {\n  return {\n    code: FILE_TOO_SMALL,\n    message: \"File is smaller than \".concat(minSize, \" bytes\")\n  };\n};\nexport var TOO_MANY_FILES_REJECTION = {\n  code: TOO_MANY_FILES,\n  message: 'Too many files'\n}; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n  var isAcceptable = file.type === 'application/x-moz-file' || accepts(file, accept);\n  return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n  if (isDefined(file.size)) {\n    if (isDefined(minSize) && isDefined(maxSize)) {\n      if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n      if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n    } else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];else if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n  }\n\n  return [true, null];\n}\n\nfunction isDefined(value) {\n  return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n  var files = _ref.files,\n      accept = _ref.accept,\n      minSize = _ref.minSize,\n      maxSize = _ref.maxSize,\n      multiple = _ref.multiple,\n      maxFiles = _ref.maxFiles;\n\n  if (!multiple && files.length > 1 || multiple && maxFiles >= 1 && files.length > maxFiles) {\n    return false;\n  }\n\n  return files.every(function (file) {\n    var _fileAccepted = fileAccepted(file, accept),\n        _fileAccepted2 = _slicedToArray(_fileAccepted, 1),\n        accepted = _fileAccepted2[0];\n\n    var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n        _fileMatchSize2 = _slicedToArray(_fileMatchSize, 1),\n        sizeMatch = _fileMatchSize2[0];\n\n    return accepted && sizeMatch;\n  });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n  if (typeof event.isPropagationStopped === 'function') {\n    return event.isPropagationStopped();\n  } else if (typeof event.cancelBubble !== 'undefined') {\n    return event.cancelBubble;\n  }\n\n  return false;\n}\nexport function isEvtWithFiles(event) {\n  if (!event.dataTransfer) {\n    return !!event.target && !!event.target.files;\n  } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n  return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n    return type === 'Files' || type === 'application/x-moz-file';\n  });\n}\nexport function isKindFile(item) {\n  return _typeof(item) === 'object' && item !== null && item.kind === 'file';\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n  event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n  return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1;\n}\n\nfunction isEdge(userAgent) {\n  return userAgent.indexOf('Edge/') !== -1;\n}\n\nexport function isIeOrEdge() {\n  var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n  return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n  for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return function (event) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    return fns.some(function (fn) {\n      if (!isPropagationStopped(event) && fn) {\n        fn.apply(void 0, [event].concat(args));\n      }\n\n      return isPropagationStopped(event);\n    });\n  };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { fromEvent } from 'file-selector';\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from './utils/index';\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * <Dropzone>\n *   {({getRootProps, getInputProps}) => (\n *     <div {...getRootProps()}>\n *       <input {...getInputProps()} />\n *       <p>Drag 'n' drop some files here, or click to select files</p>\n *     </div>\n *   )}\n * </Dropzone>\n * ```\n */\n\nvar Dropzone = /*#__PURE__*/forwardRef(function (_ref, ref) {\n  var children = _ref.children,\n      params = _objectWithoutProperties(_ref, [\"children\"]);\n\n  var _useDropzone = useDropzone(params),\n      open = _useDropzone.open,\n      props = _objectWithoutProperties(_useDropzone, [\"open\"]);\n\n  useImperativeHandle(ref, function () {\n    return {\n      open: open\n    };\n  }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n  return /*#__PURE__*/React.createElement(Fragment, null, children(_objectSpread(_objectSpread({}, props), {}, {\n    open: open\n  })));\n});\nDropzone.displayName = 'Dropzone'; // Add default props for react-docgen\n\nvar defaultProps = {\n  disabled: false,\n  getFilesFromEvent: fromEvent,\n  maxSize: Infinity,\n  minSize: 0,\n  multiple: true,\n  maxFiles: 0,\n  preventDropOnDocument: true,\n  noClick: false,\n  noKeyboard: false,\n  noDrag: false,\n  noDragEventsBubbling: false\n};\nDropzone.defaultProps = defaultProps;\nDropzone.propTypes = {\n  /**\n   * Render function that exposes the dropzone state and prop getter fns\n   *\n   * @param {object} params\n   * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n   * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n   * @param {Function} params.open Open the native file selection dialog\n   * @param {boolean} params.isFocused Dropzone area is in focus\n   * @param {boolean} params.isFileDialogActive File dialog is opened\n   * @param {boolean} params.isDragActive Active drag is in progress\n   * @param {boolean} params.isDragAccept Dragged files are accepted\n   * @param {boolean} params.isDragReject Some dragged files are rejected\n   * @param {File[]} params.draggedFiles Files in active drag\n   * @param {File[]} params.acceptedFiles Accepted files\n   * @param {FileRejection[]} params.fileRejections Rejected files and why they were rejected\n   */\n  children: PropTypes.func,\n\n  /**\n   * Set accepted file types.\n   * See https://github.com/okonet/attr-accept for more information.\n   * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n   * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n   * Windows. In some cases there might not be a mime type set at all.\n   * See: https://github.com/react-dropzone/react-dropzone/issues/276\n   */\n  accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n  /**\n   * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * If false, allow dropped items to take over the current browser window\n   */\n  preventDropOnDocument: PropTypes.bool,\n\n  /**\n   * If true, disables click to open the native file selection dialog\n   */\n  noClick: PropTypes.bool,\n\n  /**\n   * If true, disables SPACE/ENTER to open the native file selection dialog.\n   * Note that it also stops tracking the focus state.\n   */\n  noKeyboard: PropTypes.bool,\n\n  /**\n   * If true, disables drag 'n' drop\n   */\n  noDrag: PropTypes.bool,\n\n  /**\n   * If true, stops drag event propagation to parents\n   */\n  noDragEventsBubbling: PropTypes.bool,\n\n  /**\n   * Minimum file size (in bytes)\n   */\n  minSize: PropTypes.number,\n\n  /**\n   * Maximum file size (in bytes)\n   */\n  maxSize: PropTypes.number,\n\n  /**\n   * Maximum accepted number of files\n   * The default value is 0 which means there is no limitation to how many files are accepted.\n   */\n  maxFiles: PropTypes.number,\n\n  /**\n   * Enable/disable the dropzone\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Use this to provide a custom file aggregator\n   *\n   * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n   */\n  getFilesFromEvent: PropTypes.func,\n\n  /**\n   * Cb for when closing the file dialog with no selection\n   */\n  onFileDialogCancel: PropTypes.func,\n\n  /**\n   * Cb for when the `dragenter` event occurs.\n   *\n   * @param {DragEvent} event\n   */\n  onDragEnter: PropTypes.func,\n\n  /**\n   * Cb for when the `dragleave` event occurs\n   *\n   * @param {DragEvent} event\n   */\n  onDragLeave: PropTypes.func,\n\n  /**\n   * Cb for when the `dragover` event occurs\n   *\n   * @param {DragEvent} event\n   */\n  onDragOver: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n   *\n   * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n   * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n   * If `multiple` is set to false and additional files are dropped,\n   * all files besides the first will be rejected.\n   * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n   *\n   * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n   * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n   *\n   * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n   * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n   *\n   * ```js\n   * function onDrop(acceptedFiles) {\n   *   const req = request.post('/upload')\n   *   acceptedFiles.forEach(file => {\n   *     req.attach(file.name, file)\n   *   })\n   *   req.end(callback)\n   * }\n   * ```\n   *\n   * @param {File[]} acceptedFiles\n   * @param {FileRejection[]} fileRejections\n   * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n   */\n  onDrop: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that if no files are accepted, this callback is not invoked.\n   *\n   * @param {File[]} files\n   * @param {(DragEvent|Event)} event\n   */\n  onDropAccepted: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that if no files are rejected, this callback is not invoked.\n   *\n   * @param {FileRejection[]} fileRejections\n   * @param {(DragEvent|Event)} event\n   */\n  onDropRejected: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {FileRejection[]} fileRejections List of rejected files and why they were rejected\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise<File[]>)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {FileRejection[]} fileRejections Rejected files and why they were rejected\n */\n\nvar initialState = {\n  isFocused: false,\n  isFileDialogActive: false,\n  isDragActive: false,\n  isDragAccept: false,\n  isDragReject: false,\n  draggedFiles: [],\n  acceptedFiles: [],\n  fileRejections: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n *   const {getRootProps, getInputProps} = useDropzone({\n *     onDrop: acceptedFiles => {\n *       // do something with the File objects, e.g. upload to some server\n *     }\n *   });\n *   return (\n *     <div {...getRootProps()}>\n *       <input {...getInputProps()} />\n *       <p>Drag and drop some files here, or click to select files</p>\n *     </div>\n *   )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n *   const req = request.post('/upload')\n *   acceptedFiles.forEach(file => {\n *     req.attach(file.name, file)\n *   })\n *   req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _defaultProps$options = _objectSpread(_objectSpread({}, defaultProps), options),\n      accept = _defaultProps$options.accept,\n      disabled = _defaultProps$options.disabled,\n      getFilesFromEvent = _defaultProps$options.getFilesFromEvent,\n      maxSize = _defaultProps$options.maxSize,\n      minSize = _defaultProps$options.minSize,\n      multiple = _defaultProps$options.multiple,\n      maxFiles = _defaultProps$options.maxFiles,\n      onDragEnter = _defaultProps$options.onDragEnter,\n      onDragLeave = _defaultProps$options.onDragLeave,\n      onDragOver = _defaultProps$options.onDragOver,\n      onDrop = _defaultProps$options.onDrop,\n      onDropAccepted = _defaultProps$options.onDropAccepted,\n      onDropRejected = _defaultProps$options.onDropRejected,\n      onFileDialogCancel = _defaultProps$options.onFileDialogCancel,\n      preventDropOnDocument = _defaultProps$options.preventDropOnDocument,\n      noClick = _defaultProps$options.noClick,\n      noKeyboard = _defaultProps$options.noKeyboard,\n      noDrag = _defaultProps$options.noDrag,\n      noDragEventsBubbling = _defaultProps$options.noDragEventsBubbling;\n\n  var rootRef = useRef(null);\n  var inputRef = useRef(null);\n\n  var _useReducer = useReducer(reducer, initialState),\n      _useReducer2 = _slicedToArray(_useReducer, 2),\n      state = _useReducer2[0],\n      dispatch = _useReducer2[1];\n\n  var isFocused = state.isFocused,\n      isFileDialogActive = state.isFileDialogActive,\n      draggedFiles = state.draggedFiles; // Fn for opening the file dialog programmatically\n\n  var openFileDialog = useCallback(function () {\n    if (inputRef.current) {\n      dispatch({\n        type: 'openDialog'\n      });\n      inputRef.current.value = null;\n      inputRef.current.click();\n    }\n  }, [dispatch]); // Update file dialog active state when the window is focused on\n\n  var onWindowFocus = function onWindowFocus() {\n    // Execute the timeout only if the file dialog is opened in the browser\n    if (isFileDialogActive) {\n      setTimeout(function () {\n        if (inputRef.current) {\n          var files = inputRef.current.files;\n\n          if (!files.length) {\n            dispatch({\n              type: 'closeDialog'\n            });\n\n            if (typeof onFileDialogCancel === 'function') {\n              onFileDialogCancel();\n            }\n          }\n        }\n      }, 300);\n    }\n  };\n\n  useEffect(function () {\n    window.addEventListener('focus', onWindowFocus, false);\n    return function () {\n      window.removeEventListener('focus', onWindowFocus, false);\n    };\n  }, [inputRef, isFileDialogActive, onFileDialogCancel]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n  var onKeyDownCb = useCallback(function (event) {\n    // Ignore keyboard events bubbling up the DOM tree\n    if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n      return;\n    }\n\n    if (event.keyCode === 32 || event.keyCode === 13) {\n      event.preventDefault();\n      openFileDialog();\n    }\n  }, [rootRef, inputRef]); // Update focus state for the dropzone\n\n  var onFocusCb = useCallback(function () {\n    dispatch({\n      type: 'focus'\n    });\n  }, []);\n  var onBlurCb = useCallback(function () {\n    dispatch({\n      type: 'blur'\n    });\n  }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n  var onClickCb = useCallback(function () {\n    if (noClick) {\n      return;\n    } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n    // to ensure React can handle state changes\n    // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n    if (isIeOrEdge()) {\n      setTimeout(openFileDialog, 0);\n    } else {\n      openFileDialog();\n    }\n  }, [inputRef, noClick]);\n  var dragTargetsRef = useRef([]);\n\n  var onDocumentDrop = function onDocumentDrop(event) {\n    if (rootRef.current && rootRef.current.contains(event.target)) {\n      // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n      return;\n    }\n\n    event.preventDefault();\n    dragTargetsRef.current = [];\n  };\n\n  useEffect(function () {\n    if (preventDropOnDocument) {\n      document.addEventListener('dragover', onDocumentDragOver, false);\n      document.addEventListener('drop', onDocumentDrop, false);\n    }\n\n    return function () {\n      if (preventDropOnDocument) {\n        document.removeEventListener('dragover', onDocumentDragOver);\n        document.removeEventListener('drop', onDocumentDrop);\n      }\n    };\n  }, [rootRef, preventDropOnDocument]);\n  var onDragEnterCb = useCallback(function (event) {\n    event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n    event.persist();\n    stopPropagation(event);\n    dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n\n    if (isEvtWithFiles(event)) {\n      Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n        if (isPropagationStopped(event) && !noDragEventsBubbling) {\n          return;\n        }\n\n        dispatch({\n          draggedFiles: draggedFiles,\n          isDragActive: true,\n          type: 'setDraggedFiles'\n        });\n\n        if (onDragEnter) {\n          onDragEnter(event);\n        }\n      });\n    }\n  }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n  var onDragOverCb = useCallback(function (event) {\n    event.preventDefault();\n    event.persist();\n    stopPropagation(event);\n\n    if (event.dataTransfer) {\n      try {\n        event.dataTransfer.dropEffect = 'copy';\n      } catch (_unused) {}\n      /* eslint-disable-line no-empty */\n\n    }\n\n    if (isEvtWithFiles(event) && onDragOver) {\n      onDragOver(event);\n    }\n\n    return false;\n  }, [onDragOver, noDragEventsBubbling]);\n  var onDragLeaveCb = useCallback(function (event) {\n    event.preventDefault();\n    event.persist();\n    stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n    var targets = dragTargetsRef.current.filter(function (target) {\n      return rootRef.current && rootRef.current.contains(target);\n    }); // Make sure to remove a target present multiple times only once\n    // (Firefox may fire dragenter/dragleave multiple times on the same element)\n\n    var targetIdx = targets.indexOf(event.target);\n\n    if (targetIdx !== -1) {\n      targets.splice(targetIdx, 1);\n    }\n\n    dragTargetsRef.current = targets;\n\n    if (targets.length > 0) {\n      return;\n    }\n\n    dispatch({\n      isDragActive: false,\n      type: 'setDraggedFiles',\n      draggedFiles: []\n    });\n\n    if (isEvtWithFiles(event) && onDragLeave) {\n      onDragLeave(event);\n    }\n  }, [rootRef, onDragLeave, noDragEventsBubbling]);\n  var onDropCb = useCallback(function (event) {\n    event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n    event.persist();\n    stopPropagation(event);\n    dragTargetsRef.current = [];\n\n    if (isEvtWithFiles(event)) {\n      Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n        if (isPropagationStopped(event) && !noDragEventsBubbling) {\n          return;\n        }\n\n        var acceptedFiles = [];\n        var fileRejections = [];\n        files.forEach(function (file) {\n          var _fileAccepted = fileAccepted(file, accept),\n              _fileAccepted2 = _slicedToArray(_fileAccepted, 2),\n              accepted = _fileAccepted2[0],\n              acceptError = _fileAccepted2[1];\n\n          var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n              _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),\n              sizeMatch = _fileMatchSize2[0],\n              sizeError = _fileMatchSize2[1];\n\n          if (accepted && sizeMatch) {\n            acceptedFiles.push(file);\n          } else {\n            var errors = [acceptError, sizeError].filter(function (e) {\n              return e;\n            });\n            fileRejections.push({\n              file: file,\n              errors: errors\n            });\n          }\n        });\n\n        if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {\n          // Reject everything and empty accepted files\n          acceptedFiles.forEach(function (file) {\n            fileRejections.push({\n              file: file,\n              errors: [TOO_MANY_FILES_REJECTION]\n            });\n          });\n          acceptedFiles.splice(0);\n        }\n\n        dispatch({\n          acceptedFiles: acceptedFiles,\n          fileRejections: fileRejections,\n          type: 'setFiles'\n        });\n\n        if (onDrop) {\n          onDrop(acceptedFiles, fileRejections, event);\n        }\n\n        if (fileRejections.length > 0 && onDropRejected) {\n          onDropRejected(fileRejections, event);\n        }\n\n        if (acceptedFiles.length > 0 && onDropAccepted) {\n          onDropAccepted(acceptedFiles, event);\n        }\n      });\n    }\n\n    dispatch({\n      type: 'reset'\n    });\n  }, [multiple, accept, minSize, maxSize, maxFiles, getFilesFromEvent, onDrop, onDropAccepted, onDropRejected, noDragEventsBubbling]);\n\n  var composeHandler = function composeHandler(fn) {\n    return disabled ? null : fn;\n  };\n\n  var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n    return noKeyboard ? null : composeHandler(fn);\n  };\n\n  var composeDragHandler = function composeDragHandler(fn) {\n    return noDrag ? null : composeHandler(fn);\n  };\n\n  var stopPropagation = function stopPropagation(event) {\n    if (noDragEventsBubbling) {\n      event.stopPropagation();\n    }\n  };\n\n  var getRootProps = useMemo(function () {\n    return function () {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref2$refKey = _ref2.refKey,\n          refKey = _ref2$refKey === void 0 ? 'ref' : _ref2$refKey,\n          onKeyDown = _ref2.onKeyDown,\n          onFocus = _ref2.onFocus,\n          onBlur = _ref2.onBlur,\n          onClick = _ref2.onClick,\n          onDragEnter = _ref2.onDragEnter,\n          onDragOver = _ref2.onDragOver,\n          onDragLeave = _ref2.onDragLeave,\n          onDrop = _ref2.onDrop,\n          rest = _objectWithoutProperties(_ref2, [\"refKey\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"]);\n\n      return _objectSpread(_objectSpread(_defineProperty({\n        onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n        onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n        onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n        onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n        onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n        onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n        onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n        onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))\n      }, refKey, rootRef), !disabled && !noKeyboard ? {\n        tabIndex: 0\n      } : {}), rest);\n    };\n  }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n  var onInputElementClick = useCallback(function (event) {\n    event.stopPropagation();\n  }, []);\n  var getInputProps = useMemo(function () {\n    return function () {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref3$refKey = _ref3.refKey,\n          refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n          onChange = _ref3.onChange,\n          onClick = _ref3.onClick,\n          rest = _objectWithoutProperties(_ref3, [\"refKey\", \"onChange\", \"onClick\"]);\n\n      var inputProps = _defineProperty({\n        accept: accept,\n        multiple: multiple,\n        type: 'file',\n        style: {\n          display: 'none'\n        },\n        onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n        onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n        autoComplete: 'off',\n        tabIndex: -1\n      }, refKey, inputRef);\n\n      return _objectSpread(_objectSpread({}, inputProps), rest);\n    };\n  }, [inputRef, accept, multiple, onDropCb, disabled]);\n  var fileCount = draggedFiles.length;\n  var isDragAccept = fileCount > 0 && allFilesAccepted({\n    files: draggedFiles,\n    accept: accept,\n    minSize: minSize,\n    maxSize: maxSize,\n    multiple: multiple,\n    maxFiles: maxFiles\n  });\n  var isDragReject = fileCount > 0 && !isDragAccept;\n  return _objectSpread(_objectSpread({}, state), {}, {\n    isDragAccept: isDragAccept,\n    isDragReject: isDragReject,\n    isFocused: isFocused && !disabled,\n    getRootProps: getRootProps,\n    getInputProps: getInputProps,\n    rootRef: rootRef,\n    inputRef: inputRef,\n    open: composeHandler(openFileDialog)\n  });\n}\n\nfunction reducer(state, action) {\n  /* istanbul ignore next */\n  switch (action.type) {\n    case 'focus':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFocused: true\n      });\n\n    case 'blur':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFocused: false\n      });\n\n    case 'openDialog':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFileDialogActive: true\n      });\n\n    case 'closeDialog':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFileDialogActive: false\n      });\n\n    case 'setDraggedFiles':\n      /* eslint no-case-declarations: 0 */\n      var isDragActive = action.isDragActive,\n          draggedFiles = action.draggedFiles;\n      return _objectSpread(_objectSpread({}, state), {}, {\n        draggedFiles: draggedFiles,\n        isDragActive: isDragActive\n      });\n\n    case 'setFiles':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        acceptedFiles: action.acceptedFiles,\n        fileRejections: action.fileRejections\n      });\n\n    case 'reset':\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFileDialogActive: false,\n        isDragActive: false,\n        draggedFiles: [],\n        acceptedFiles: [],\n        fileRejections: []\n      });\n\n    default:\n      return state;\n  }\n}","// tslint:disable:no-shadowed-variable\nimport React from 'react';\nimport {Menu, MenuItem, Theme, Tooltip} from '@material-ui/core';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport {\n    SetOverlayComponentPropsAction,\n    ToggleOverlayComponentAction\n} from '../../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../../components/LoadingModal/Component';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport ArrowForwardRoundedIcon from '@material-ui/icons/ArrowForwardRounded';\nimport {DuplicateProjectAction} from '../../../../modules/ProjectModule/actions';\nimport {EDIT_PROJECT_PATH, EDIT_TEST_PROJECT_PATH} from '../../../../constants';\nimport {togglePath} from '../../../../components/TogglePath/utils';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {makeSelectLocation} from '../../../../modules/RouterModule/selectors';\nimport {useTranslation} from 'react-i18next';\nimport {makeStyles} from '@material-ui/styles';\nimport {useViewContext} from '../../../../components/detailPageComponents/context/viewContext';\nimport {makeSelectIsAtsSpecTool} from '../../../../modules/AtsModule/selectors';\nimport {makeSelectSpec} from '../../../../modules/SpecModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    specDialActions: {\n        alignItems: 'flex-end',\n    },\n    speedDialCustomRoot: {\n        position: 'fixed',\n        right: theme.spacing(2),\n        top: theme.spacing(15.75),\n        zIndex: theme.zIndex.appBar,\n        alignItems: 'flex-end',\n    },\n    speedDialCustomFab: {\n        '&:hover': {\n            backgroundColor: theme.palette.primary[700]\n        }\n    },\n    specsInProject: {\n        padding: theme.spacing(3),\n    },\n    displayByContainer: {\n        position: 'absolute',\n        top: theme.spacing(3),\n        right: theme.spacing(2),\n    },\n    specSelectorContainer: {\n        marginTop: theme.spacing(3)\n    },\n    specSelectorIndicatorText: {\n        marginRight: theme.spacing(1),\n        whiteSpace: 'nowrap'\n    },\n    menuItemIcon: {\n        marginRight: theme.spacing(2),\n    },\n}));\n\nconst DropdownMenu = ({\n    project,\n    anchorEl,\n    onClose: handleClose\n}) => {\n    const { setIsDeleteModalOpen, setIsDialogOpen } = useViewContext();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const isTestProject = project.get('status') === 'test';\n    const projectId = project.get('id');\n    const location = useSelector(makeSelectLocation());\n    const dispatch = useDispatch();\n    const duplicateProject = (projectId: number) => dispatch(new DuplicateProjectAction({ projectId }));\n    const handleEditProject = () => {\n        const editPath = isTestProject ? EDIT_TEST_PROJECT_PATH : EDIT_PROJECT_PATH;\n        togglePath({\n            pathName: `${editPath}/${projectId}`,\n            dispatch,\n            location,\n        })()();\n    };\n    const isATSSpecTool = useSelector(makeSelectIsAtsSpecTool());\n    const selectedSpec = useSelector(makeSelectSpec());\n    const isAi = selectedSpec?.get('isAi');\n    return (\n        <Menu\n            open={Boolean(anchorEl)}\n            onClose={handleClose}\n            anchorEl={anchorEl}\n        >\n            <MenuItem\n                onClick={handleEditProject}\n                value='edit'\n            >\n                <EditRoundedIcon className={classes.menuItemIcon} fontSize='small' />\n                {t('ProjectDetail.editProjectMenuItem')}\n            </MenuItem>\n            <MenuItem\n                value='duplicate'\n                onClick={() => {\n                    handleClose();\n                    duplicateProject(project.get('id'));\n                    dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: project.get('name') } }));\n                    dispatch(new ToggleOverlayComponentAction({\n                        id: LOADING_MODAL_ID,\n                        open: true\n                    }));\n                }}\n            >\n                <FileCopyIcon className={classes.menuItemIcon} fontSize='small' />\n                {t('ProjectDetail.duplicateProjectMenuItem')}\n            </MenuItem>\n            <MenuItem\n                value='delete'\n                onClick={() => {\n                    setIsDeleteModalOpen(prev => !prev);\n                    handleClose();\n                }}\n            >\n                <DeleteIcon className={classes.menuItemIcon} fontSize='small' />\n                {t('ProjectDetail.deleteProjectMenuItem')}\n            </MenuItem>\n            {\n                isATSSpecTool ? <Tooltip title={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                                <span>\n                                  <MenuItem<React.ElementType<any>>\n                                      value='vsb'\n                                      component='a'\n                                      onClick={() => {\n                                        setIsDialogOpen(prev => !prev);\n                                        handleClose();\n                                      }}\n                                      disabled={isAi}\n                                  >\n                                    <ArrowForwardRoundedIcon className={classes.menuItemIcon} fontSize='small' />\n                                      {t('ProjectDetail.openVSBMenuItem')}\n                                  </MenuItem>\n                                </span>\n                </Tooltip> : null\n            }\n        </Menu>\n    );\n};\n\nexport default DropdownMenu;","// tslint:disable:no-shadowed-variable\nimport React, { useState } from 'react';\nimport TopBar from '../../../components/detailPageComponents/TopBar';\nimport Breadcrumbs from '../../../components/detailPageComponents/Breadcrumbs';\nimport {Button, Grid, ListItemIcon, MenuItem, Toolbar, Tooltip, Typography, useTheme} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {push} from 'connected-react-router';\nimport {\n    CREATE_NEW_SPEC_PATH, EDIT_SPEC_PATH, PRODUCT_CATEGORY_PATH, PROJECT_DETAIL_PATH,\n    PROJECT_LIST_PATH,\n    TEST_PROJECT_LIST_PATH\n} from '../../../constants';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\nimport {makeSelectSpec, makeSelectSpecs} from '../../../modules/SpecModule/selectors';\nimport { SkipRuleEngineAction } from '../../../modules/ProductModule/actions';\nimport {\n    DeleteProjectSpecAction,\n    GetProjectsAction,\n    SetProjectIdForCreatingSpec, UpdateProjectSpecDetailConfigAction\n} from '../../../modules/ProjectModule/actions';\nimport {togglePath} from '../../../components/TogglePath/utils';\nimport {makeSelectLocation} from '../../../modules/RouterModule/selectors';\nimport ProductGroupTabs from '../../../components/detailPageComponents/ProductGroupTabs';\nimport {List} from 'immutable';\nimport ProductGroupContent from '../../../components/detailPageComponents/ProductGroupContent';\nimport AlternativesModal from '../../../containers/AlternativesModal';\nimport {IDefaultViewProps} from '../types';\nimport DownloadSpecBookletButton\n    from '../../../components/detailPageComponents/DownloadSpecBookletButton';\nimport Header from '../../../components/detailPageComponents/Header';\nimport {makeSelectProjectSpecConfig} from '../../../modules/ProjectModule/selectors';\nimport {getSpecsInProject} from '../../../components/ProjectDetail/common/helpers';\nimport LayersIcon from '@material-ui/icons/Layers';\nimport {\n    DeleteDrawingAction,\n    DeleteSpecAction,\n    DeleteSpecAndGetProjectByIdAction,\n    SelectDrawingAndRedirectAction,\n    SelectSpecAction,\n    SetRedirectPathAction\n} from '../../../modules/SpecModule/actions';\nimport {useViewContext} from '../../../components/detailPageComponents/context/viewContext';\nimport EmptySpec from '../../../components/detailPageComponents/EmptySpec';\nimport {\n    makeSelectUserCanDownloadSpecBooklet\n} from '../../../modules/AtsModule/selectors';\nimport EmptyView from './EmptyView';\nimport DropdownMenu from './DropdownMenu';\nimport Loading from '../../../components/detailPageComponents/Loading';\nimport ActionBar from '../../../components/detailPageComponents/ActionBar';\nimport AddIcon from '@material-ui/icons/Add';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    container: {\n        padding: theme.spacing(0, 3, 1),\n        backgroundColor: '#F5F5F5'\n    },\n    specDialActions: {\n        alignItems: 'flex-end',\n    },\n    speedDialCustomFab: {\n        '&:hover': {\n            backgroundColor: theme.palette.primary[700]\n        }\n    },\n    menuIcon: {\n        marginRight: theme.spacing(2)\n    },\n    actionBarButtonIcon: {\n        marginLeft: 0,\n        marginRight: 0\n    },\n}));\ninterface INewDefaultViewProps extends IDefaultViewProps {\n    isLoading?: boolean;\n}\ninterface ITab {\n    id: number;\n    name: string;\n    projectId: number;\n}\nconst NewDefaultView: React.FC<INewDefaultViewProps> = ({\n    onViewChange,\n    project,\n    isLoading,\n}) => {\n    const { setMasterTemplateDrawerState } = useViewContext();\n    const theme = useTheme();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const projectId = project.get('id');\n    const projectSpecs = project.get('specs') ?? List();\n    const location = useSelector(makeSelectLocation());\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const isTestProject = project.get('status') === 'test';\n    const projectName = project.get('name') || '';\n    const selectedSpec = useSelector(makeSelectSpec());\n    const selectedSpecId = selectedSpec?.get('id');\n    const isAi = selectedSpec?.get('isAi');\n    const specs = useSelector(makeSelectSpecs());\n    const canDownloadSpecBooklet = useSelector(makeSelectUserCanDownloadSpecBooklet());\n    const goto = (path) => {\n        dispatch(push(path));\n    };\n    const testProjectBreadcrumbs = [\n        {\n            label: t('ProjectDetail.testProjectListBreadCrumb'),\n            onClick: () => goto(TEST_PROJECT_LIST_PATH)\n        },\n        {\n            label: projectName\n        }\n    ];\n    const projectBreadcrumbs = [\n        {\n            label: t('ProjectDetail.projectListBreadCrumb'),\n            onClick: () => goto(PROJECT_LIST_PATH)\n        },\n        {\n            label: projectName\n        }\n    ];\n    const breadcrumbs = isTestProject ? testProjectBreadcrumbs : projectBreadcrumbs;\n    const createSpec = () => {\n        dispatch(new SetProjectIdForCreatingSpec({ projectId }));\n        togglePath({\n            pathName: CREATE_NEW_SPEC_PATH,\n            dispatch,\n            location\n        })()();\n\n        // skip rules by default\n        dispatch(new SkipRuleEngineAction(false));\n    };\n    const tabs: ITab[] = projectSpecs.map((spec) => ({\n        name: spec.get('name'),\n        id: spec.get('id'),\n        projectId,\n    })).toArray();\n    const handleAddDrawing = () => {\n        dispatch(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH + '/' + selectedSpec.get('id') }));\n        dispatch(push(PRODUCT_CATEGORY_PATH));\n        // skip rules by default\n        dispatch(new SkipRuleEngineAction(false));\n    };\n    const handleSelectTab = (newSelectedTab) => {\n        dispatch(new SelectSpecAction(newSelectedTab.id));\n    };\n    const handleEditProductGroup = (tab: ITab) => {\n        const specId = tab.id;\n        dispatch(new SetRedirectPathAction(`${PROJECT_DETAIL_PATH}/${projectId}`));\n        togglePath({\n            pathName: `${EDIT_SPEC_PATH}/${specId}`,\n            dispatch,\n            location\n        })()();\n    };\n    const handleDeleteProductGroup = (tab, index) => {\n        const selectedSpecId = selectedSpec.get('id');\n        const specId = tab.id;\n        const specName = tab.name;\n        let newSelectedSpecId = selectedSpecId;\n        if (projectSpecs.size === 1) {\n            newSelectedSpecId = -1;\n        } else if (specId === selectedSpecId) {\n            const isLastSpec = index === projectSpecs.count() - 1;\n            if (isLastSpec) {\n                newSelectedSpecId = projectSpecs.getIn([index - 1, 'id']);\n            } else {\n                newSelectedSpecId = projectSpecs.getIn([index + 1, 'id']);\n            }\n        }\n        dispatch(new DeleteSpecAndGetProjectByIdAction({ specId, newSelectedSpecId, specName, projectId }));\n        dispatch(new DeleteProjectSpecAction({projectId, specId}));\n    };\n    const handleDeleteDrawing = (specId: number, drawingId: number) => {\n        dispatch(new DeleteDrawingAction({\n            drawingId,\n            onDeleteSuccess: () => dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }))\n        }));\n    };\n    const selectedSpecIndex = projectSpecs.findIndex((spec) => spec?.get('id') === selectedSpecId);\n    return (\n        <>\n            <TopBar>\n                <Toolbar variant='dense'>\n                    <Breadcrumbs breadcrumbs={breadcrumbs} />\n                </Toolbar>\n                <Header project={project} ActionMenu={DropdownMenu}>\n                    <DownloadSpecBookletButton\n                        hidden={!canDownloadSpecBooklet}\n                        onClick={() => {\n                            onViewChange('lixir_spec_booklet');\n                        }}\n                    />\n                </Header>\n            </TopBar>\n            <ProductGroupTabs\n                specs={getSpecsInProject(project, specs)}\n                selectedSpecId={selectedSpec?.get('id')}\n                projectSpecDetailConfig={projectSpecDetailConfig}\n                activeTabIndex={selectedSpecIndex >= 0 ? selectedSpecIndex : false}\n                tabs={tabs}\n                key={projectId}\n                onCreate={createSpec}\n                onSelectTab={handleSelectTab}\n                onEdit={handleEditProductGroup}\n                onDelete={handleDeleteProductGroup}\n            />\n            {projectSpecs?.size > 0\n                ?   (isLoading || !selectedSpec)\n                        ?   <Grid container={true} justify='center'><Loading /></Grid>\n                        :   <ProductGroupContent\n                                spec={selectedSpec}\n                                key={selectedSpec.get('id')}\n                                renderEmptySpecView={() => {\n                                    return <EmptySpec spec={selectedSpec} onButtonClicked={handleAddDrawing} />;\n                                }}\n                                renderAddDrawingButton={({ fullMode = true, isReal = true}) => {\n                                  return (\n                                      <Grid container={true} wrap='nowrap' alignItems='center' justify='flex-end'>\n                                        <Tooltip\n                                          title={\n                                            (isAi && isReal)\n                                              ? t('generalTooltip.disabledForAiSpec')\n                                              : !fullMode\n                                                ? t('projectDetailPage.useMastersOrTemplatesButton')\n                                                : ''\n                                          }\n                                        >\n                                          <Button\n                                              variant='outlined'\n                                              color='primary'\n                                              startIcon={<LayersIcon fontSize='small' />}\n                                              style={{ marginRight: 8, whiteSpace: 'nowrap' }}\n                                              classes={{ startIcon: classes.actionBarButtonIcon }}\n                                              disabled={isAi}\n                                              onClick={isReal ? () => {\n                                                  setMasterTemplateDrawerState({\n                                                    open: true,\n                                                    tabValue: 1,\n                                                });\n                                              } : null}\n                                          >\n                                            {fullMode ? t('projectDetailPage.useMastersOrTemplatesButton') : ''}\n                                          </Button>\n                                        </Tooltip>\n                                        <Tooltip\n                                          title={\n                                            (isAi && isReal)\n                                              ? t('generalTooltip.disabledForAiSpec')\n                                              : !fullMode\n                                                ? t('projectDetailPage.addProduct')\n                                                : ''\n                                          }\n                                        >\n                                          <Button\n                                              variant='contained'\n                                              color='primary'\n                                              startIcon={<AddIcon fontSize='small' />}\n                                              disabled={isAi}\n                                              style={{ whiteSpace: 'nowrap' }}\n                                              classes={{ startIcon: classes.actionBarButtonIcon }}\n                                              onClick={isReal ? handleAddDrawing : null}\n                                          >\n                                            {fullMode ? t('projectDetailPage.addProduct') : ''}\n                                          </Button>\n                                        </Tooltip>\n                                      </Grid>\n                                  );\n                                }}\n                                onDeleteDrawing={handleDeleteDrawing}\n                            />\n                : <EmptyView onButtonClicked={createSpec} />\n            }\n            <ActionBar\n              type={'project'}\n              selectedSpec={selectedSpec}\n              project={project}\n              specs={specs}\n              onViewChange={onViewChange}\n            />\n            <AlternativesModal />\n        </>\n    );\n};\n\nexport default NewDefaultView;","import React from 'react';\nimport {\n    Button,\n    Modal,\n    Typography,\n    ModalProps,\n    DialogContent,\n    DialogContentText,\n    DialogActions,\n    DialogProps,\n    Dialog,\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/';\n\ninterface IProps extends DialogProps {\n    onConfirm: React.MouseEventHandler<HTMLButtonElement>;\n    onClose: () => void;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    dialog: {\n        paddingTop: theme.spacing(2.5),\n        paddingBottom: theme.spacing(),\n    },\n    confirmationButton: {\n        marginRight: theme.spacing(4),\n        textTransform: 'uppercase',\n    },\n}));\nconst DownloadWarningModal: React.FC<IProps> = ({\n    onClose,\n    onConfirm,\n    open\n}) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    return (\n        <Dialog\n            onClose={onClose}\n            open={open}\n            maxWidth='lg'\n        >\n            <div className={classes.dialog}>\n                <DialogContent>\n                    <DialogContentText id='alert-dialog-description' variant='h6'>\n                        {t('downloadWarningModal.warningMessage')}\n                    </DialogContentText>\n                </DialogContent>\n                <DialogActions>\n                    <Button\n                        onClick={onClose}\n                        color='primary'\n                        className={classes.confirmationButton}\n                    >\n                        {t('formButtons.cancel') }\n                    </Button>\n\n                    <Button\n                        onClick={onConfirm}\n                        color='primary' autoFocus={true}\n                        className={classes.confirmationButton}\n                    >\n                        {t('downloadWarningModal.continueDownloading')}\n                    </Button>\n                </DialogActions>\n            </div>\n        </Dialog>\n    );\n};\n\nexport default DownloadWarningModal;","import React, { createContext } from 'react';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Project} from '../../../models';\n\ninterface IProjectContextType {\n    Project: IMap<Project>;\n}\n\nconst Context = createContext<IMap<IProjectContextType>>(undefined);\n\nfunction ProjectContext(props) {\n    return (\n        <Context.Provider {...props}>\n            {props.children}\n        </Context.Provider>\n    );\n}\n\nexport const useProjectContext = () => {\n    if (!React.useContext(Context)) {\n        return null;\n    }\n    return React.useContext(Context);\n};\nexport default ProjectContext;","// tslint:disable:no-shadowed-variable\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useMemo, useState} from 'react';\nimport NewDefaultView from './NewDefaultView';\nimport * as React from 'react';\nimport {makeSelectSearchingSpecs, makeSelectSpec} from '../../../modules/SpecModule/selectors';\nimport CopyModal from '../../../containers/CopyModal';\nimport {DeleteModal} from '../../../components';\nimport DownloadWarningModal from '../../../components/ProjectDetail/DownloadWarningModal';\nimport {\n    DeleteProjectAction,\n    GetProjectsAction,\n} from '../../../modules/ProjectModule/actions';\nimport {AMPLITUDE_EVENT, PROJECT_LIST_PATH, TEST_PROJECT_LIST_PATH} from '../../../constants';\nimport VsbRedirectDialog from '../../../components/VsbRedirectDialog';\nimport {makeSelectChildOrParentIsAtsUser, makeSelectEnv, makeSelectToken} from '../../../modules/AtsModule/selectors';\nimport {fromJS, List, Map} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Project, Spec} from '../../../models';\nimport {IDefaultViewProps} from '../types';\nimport { ViewContext } from '../../../components/detailPageComponents/context/viewContext';\nimport {DragDropContext} from 'react-beautiful-dnd';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport {\n    isDraggableIdForDragAllSelectedPinnedDrawing, isDraggableIdForDragSelectedDrawing, isDraggableListItem,\n    isDraggableMasterDrawingId, isDraggableTemplateDrawingId, isDroppableShortSpecListId, isDroppableSpecListId,\n    parseDraggableIdForDragAllSelectedPinnedDrawing, parseDraggableIdForDragSelectedDrawing,\n    parseDraggableMasterDrawingId,\n    parseDraggableTemplateDrawingId, parseDroppableSpecListId\n} from '../../../components/ProjectDetail/helpers';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {CopyAction, GetSpecsAction} from '../../../modules/SpecModule/actions';\nimport {buildSpecsDictionaryFromDrawingIds, getSourceSpecs, importSelectedDrawingsViaDrop} from '../../SpecDetail/helpers';\nimport {\n    isDroppableNewSpecTabId,\n    isDroppableProductGroupTabId,\n    parseDroppableProductGroupTabId\n} from '../../../components/ProjectDetail/common/helpers';\nimport {useAmplitudeData} from '../../../hoc/withAmplitudeData';\nimport ProjectContext from '../../../components/ProjectDetail/ProjectContext';\nimport SpecContext from '../../../components/ProjectDetail/SpecContext';\nimport MasterAndTemplateDrawer from '../../../components/ProjectDetail/MasterAndTemplateDrawer/index.jsx';\nimport ImportSelectedDrawingsContext from '../../../components/ProjectDetail/MasterAndTemplateDrawer/ImportSelectedDrawingsContext';\nimport DrawerBusyContext from '../../../components/ProjectDetail/MasterAndTemplateDrawer/DrawerBusyContext';\nimport {IconButton} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport SortProductGroupsModal from '../../../components/detailPageComponents/SortProductGroupsModal';\nimport {makeSelectIsGettingProjects} from '../../../modules/ProjectModule/selectors';\nimport AlternativesDropDown from '../../../components/AlternativeDropDown';\nimport {\n    SetOverlayComponentPropsAction,\n    SetSnackbarOpenAction,\n    ToggleOverlayComponentAction\n} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport {useAtsApi} from '../../../contexts/AtsApiContext';\n\nexport const checkHasSelectedDrawingsWithDraftProduct = (project: IMap<Project>, projectSpecDetailConfig, specs) => {\n    const projectSpecs = project.get('specs', List());\n    const allSpecsInProject: Map<number, IMap<Spec>> = projectSpecs?.reduce((acc, spec) => {\n        const specId = spec.get('id');\n        return acc.set(specId, specs.get(specId));\n    }, Map()) ?? Map();\n    return allSpecsInProject && allSpecsInProject.some((_spec: IMap<Spec>) => {\n        const drawings = _spec?.get('drawings');\n        return drawings?.some((drawing) => {\n            const drawingId = drawing.get('id');\n            return projectSpecDetailConfig.getIn([_spec.get('id'), drawingId, 'checked']) && drawing.get('products').some(product => product.get('draft'));\n        });\n    });\n};\ninterface IMasterTemplateDrawerState {\n    open: boolean;\n    tabValue: number;\n    switchState: boolean;\n}\nconst DefaultView: React.FC<IDefaultViewProps> = (props) => {\n    const [sortProductGroupsModalOpen, setSortProductGroupsModalOpen] = useState<boolean>(false);\n    const [masterTemplateDrawerState, setMasterTemplateDrawerState] = useState<IMasterTemplateDrawerState>({\n        open: false,\n        tabValue: 1,\n        switchState: false\n    });\n    const [productSearchTerm, setProductSearchTerm] = useState('');\n    const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false);\n    const [isDeleteModalOpen, setIsDeleteModalOpen] = useState<boolean>(false);\n    const [isDownloadWarningModalOpen, setIsDownloadWarningModalOpen] = useState<boolean>(false);\n    const [isCopying, setIsCopying] = useState(false);\n    const {t} = useTranslation('translations');\n    const dispatch = useDispatch();\n    const token = useSelector(makeSelectToken());\n    const env = useSelector(makeSelectEnv());\n    const amplitudeData = useAmplitudeData();\n    const atsApi = useAtsApi();\n\n    const isGettingProjects = useSelector(makeSelectIsGettingProjects());\n    const spec = useSelector(makeSelectSpec());\n    const isSearchingSpecs: boolean = useSelector(makeSelectSearchingSpecs());\n    const specId = spec?.get('id');\n    const project = props.project;\n    const projectId = project.get('id');\n    const projectName: string = project.get('name');\n    const viewContextValue = useMemo(() => ({\n        productSearchTerm,\n        setProductSearchTerm,\n        masterTemplateDrawerState,\n        setMasterTemplateDrawerState,\n        isDialogOpen,\n        setIsDialogOpen,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        isDownloadWarningModalOpen,\n        setIsDownloadWarningModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen\n    }), [\n        productSearchTerm,\n        setProductSearchTerm,\n        masterTemplateDrawerState,\n        setMasterTemplateDrawerState,\n        isDialogOpen,\n        setIsDialogOpen,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        isDownloadWarningModalOpen,\n        setIsDownloadWarningModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen\n    ]);\n    const toggleDialog = () => {\n        setIsDialogOpen(prev => !prev);\n    };\n    const toggleDownloadWarningModal = () => {\n        setIsDownloadWarningModalOpen(prev => !prev);\n    };\n    const toggleDeleteModal = () => {\n        setIsDeleteModalOpen(prev => !prev);\n    };\n    const deleteSelectedProject = () => {\n        const isTestProject = project.get('status') === 'test'; // TODO: is that possible for a test project to be in the project detail page?\n        dispatch(new DeleteProjectAction({\n            projectId,\n            projectName: projectName ?? '',\n            specIds: project.get('specs')?.map((spec) => spec.get('id')).join(',') ?? '',\n            redirectPath: isTestProject ? TEST_PROJECT_LIST_PATH : PROJECT_LIST_PATH\n        }));\n        toggleDeleteModal();\n    };\n    const onDragEnd = (result) => {\n        const calculateDrawingInsetPoint = () => {\n            if (result.destination.index === 0) {\n                return 0;\n            }\n            const drawingsDisplayed = filterSpecDrawingsByProductName(spec, productSearchTerm);\n            return drawingsDisplayed.get(result.destination.index - 1).get('order') + 1;\n        };\n        const onFailed = () => setIsCopying(false);\n        const handleDragSingleMasterDrawing = ({\n           drawingInsertPoint,\n           specId,\n           newSpecName,\n        }: {\n            drawingInsertPoint: number,\n            specId?: number\n            newSpecName?: string\n        }) => {\n            const { specId: sourceSpecId, drawingId, masterId, originListType, masterName } = parseDraggableMasterDrawingId(result.draggableId);\n            const payload = {\n                destinationType: 'standard' as const,\n                destinationProjectId: project?.get('id'),\n                sourceType: 'master',\n                sourceSpecs: [\n                    {\n                        id: sourceSpecId,\n                        drawings: [\n                            {\n                                id: drawingId,\n                            }\n                        ]\n                    }\n                ],\n                drawingInsertPoint,\n            };\n            const logEvent = () => {\n                amplitude.logEvent(AMPLITUDE_EVENT.quickAccessCopyTo, amplitudeData({\n                    originListType,\n                    sourceType: 'Master',\n                    sourceId: masterId,\n                    sourceName: masterName,\n                    destinationType: 'Project',\n                    destinationId: project?.get('id'),\n                    destinationName: project?.get('name'),\n                }));\n            };\n            if (newSpecName) {\n                payload['newSpecName'] = newSpecName;\n                payload['forceCreateNewSpec'] = true;\n                payload['onSuccess'] = (specs: List<IMap<Spec>>) => {\n                    const spec: IMap<Spec> = specs.first();\n                    logEvent();\n                    dispatch(new GetProjectsAction({\n                        projectId: project?.get('id'),\n                        initialSelectedSpecId: spec.get('id')\n                    }));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            } else if (specId) {\n                payload['destinationSpecId'] = specId;\n                payload['onSuccess'] = (specs: List<IMap<Spec>>) => {\n                    logEvent();\n                    dispatch(new GetSpecsAction({specId}));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            }\n            setIsCopying(true);\n            dispatch(new CopyAction(payload));\n        };\n        const handleDragSingleTemplateDrawing = ({\n             drawingInsertPoint,\n             specId,\n             newSpecName,\n        }: {\n            drawingInsertPoint: number,\n            specId?: number,\n            newSpecName?: string\n        }) => {\n            const { specId: sourceSpecId, drawingId, templateId, originListType, templateName } = parseDraggableTemplateDrawingId(result.draggableId);\n            const logEvent = () => {\n                amplitude.logEvent(AMPLITUDE_EVENT.quickAccessCopyTo, amplitudeData({\n                    originListType,\n                    sourceType: 'Template',\n                    sourceId: templateId,\n                    sourceName: templateName,\n                    destinationType: 'Project',\n                    destinationId: project?.get('id'),\n                    destinationName: project?.get('name'),\n                }));\n            };\n            const payload = {\n                destinationType: 'standard' as const,\n                destinationProjectId: project?.get('id'),\n                destinationSpecId: specId,\n                sourceType: 'master_template',\n                sourceSpecs: [\n                    {\n                        id: sourceSpecId,\n                        drawings: [\n                            {\n                                id: drawingId,\n                            }\n                        ]\n                    }\n                ],\n                drawingInsertPoint,\n            };\n            if (newSpecName) {\n                payload['newSpecName'] = newSpecName;\n                payload['forceCreateNewSpec'] = true;\n                payload['onSuccess'] = (specs: List<IMap<Spec>>) => {\n                    const spec: IMap<Spec> = specs.first();\n                    logEvent();\n                    dispatch(new GetProjectsAction({\n                        projectId: project?.get('id'),\n                        initialSelectedSpecId: spec.get('id')\n                    }));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            } else {\n                payload['destinationSpecId'] = specId;\n                payload['destinationSpecId'] = specId;\n                payload['onSuccess'] = (specs: List<IMap<Spec>>) => {\n                    logEvent();\n                    dispatch(new GetSpecsAction({specId}));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            }\n            setIsCopying(true);\n            dispatch(new CopyAction(payload));\n        };\n        const handleDragAllSelectedPinnedDrawings = ({\n             drawingInsertPoint,\n             specId,\n             newSpecName,\n        }: {\n            drawingInsertPoint: number,\n            specId?: number,\n            newSpecName?: string\n        }) => {\n            const drawingIds = parseDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId);\n            const specs = buildSpecsDictionaryFromDrawingIds(drawingIds);\n            if (specs.master) {\n                setIsCopying(true);\n                dispatch(new CopyAction({\n                    destinationType: 'standard',\n                    destinationProjectId: project?.get('id'),\n                    sourceType: 'master',\n                    sourceSpecs: getSourceSpecs(specs.master),\n                    forceCreateNewSpec: !!newSpecName,\n                    ...newSpecName ? {\n                        newSpecName,\n                        drawingInsertPoint: 0\n                    } : {\n                        destinationSpecId: specId,\n                        drawingInsertPoint,\n                    },\n                    onSuccess: (_specs: List<IMap<Spec>>) => {\n                        const _spec: IMap<Spec> = _specs?.first();\n                        const masterInsertDrawingCount = getSourceSpecs(specs.master)?.reduce((acc, spec) => acc + (spec.drawings?.length || 0), 0) || 0;\n                        if (specs.template) {\n                            dispatch(new CopyAction({\n                                destinationType: 'standard',\n                                destinationSpecId: _spec?.get('id'),\n                                sourceType: 'master_template',\n                                sourceSpecs: getSourceSpecs(specs.template),\n                                drawingInsertPoint: newSpecName ? masterInsertDrawingCount : masterInsertDrawingCount + drawingInsertPoint,\n                                onSuccess: () => {\n                                    if (!newSpecName) {\n                                        dispatch(new GetSpecsAction({specId}));\n                                        setIsCopying(false);\n                                        return;\n                                    }\n                                    dispatch(new GetProjectsAction({ projectId: project?.get('id'), initialSelectedSpecId: _spec?.get('id') }));\n                                    setIsCopying(false);\n                                },\n                                onFailed,\n                            }));\n                        } else {\n                            if (!newSpecName) {\n                                dispatch(new GetSpecsAction({specId}));\n                                setIsCopying(false);\n                                return;\n                            }\n                            dispatch(new GetProjectsAction({ projectId: project?.get('id'), initialSelectedSpecId: _spec?.get('id') }));\n                            setIsCopying(false);\n                        }\n                    },\n                    onFailed,\n                }));\n            } else if (specs.template) {\n                setIsCopying(true);\n                dispatch(new CopyAction({\n                    destinationType: 'standard',\n                    destinationProjectId: project?.get('id'),\n                    sourceType: 'master_template',\n                    sourceSpecs: getSourceSpecs(specs.template),\n                    forceCreateNewSpec: !!newSpecName,\n                    ...newSpecName ? {\n                        newSpecName,\n                        drawingInsertPoint: 0\n                    } : {\n                        destinationSpecId: specId,\n                        drawingInsertPoint,\n                    },\n                    onSuccess: (_specs: List<IMap<Spec>>) => {\n                        if (!newSpecName) {\n                            dispatch(new GetSpecsAction({specId}));\n                            setIsCopying(false);\n                            return;\n                        }\n                        const _spec: IMap<Spec> = _specs?.first();\n                        dispatch(new GetProjectsAction({ projectId: project?.get('id'), initialSelectedSpecId: _spec?.get('id') }));\n                        setIsCopying(false);\n                    },\n                    onFailed,\n                }));\n            }\n        };\n        const handleDragSelectedDrawings = ({\n            drawingInsertPoint,\n            specId,\n            newSpecName\n        }: {\n            drawingInsertPoint: number,\n            specId?: number,\n            newSpecName?: string\n        }) => {\n            const { drawingIds, originListType, specId: sourceSpecId } = parseDraggableIdForDragSelectedDrawing(result.draggableId);\n            let sourceType;\n            if (originListType === 'Masters List') {\n                sourceType = 'master';\n            }\n            if (originListType === 'Templates List') {\n                sourceType = 'master_template';\n            }\n            if (!sourceType) {\n                return;\n            }\n            const payload = {\n                destinationType: 'standard' as const,\n                sourceType,\n                sourceSpecs: [\n                    {\n                        id: sourceSpecId,\n                        drawings: drawingIds.map(drawingId => ({ id: drawingId })),\n                    }\n                ],\n                drawingInsertPoint,\n            };\n            if (newSpecName) {\n                payload['destinationProjectId'] = project?.get('id');\n                payload['forceCreateNewSpec'] = true;\n                payload['newSpecName'] = newSpecName;\n                payload['onSuccess'] = (_specs: List<IMap<Spec>>) => {\n                    const _spec: IMap<Spec> = _specs?.first();\n                    dispatch(new GetProjectsAction({ projectId: project?.get('id'), initialSelectedSpecId: _spec?.get('id') }));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            } else {\n                payload['destinationSpecId'] = specId;\n                payload['onSuccess'] = () => {\n                    dispatch(new GetSpecsAction({specId}));\n                    setIsCopying(false);\n                };\n                payload['onFailed'] = onFailed;\n            }\n            setIsCopying(true);\n            dispatch(new CopyAction(payload));\n        };\n        if (!result.destination) {\n            return;\n        }\n\n        // if (isDroppableProductGroupTabId(result.destination.droppableId) && isDraggableMasterDrawingId(result.draggableId)) {\n        //     // handle drag one master drawing to product group tab\n        //     const { specId } = parseDroppableProductGroupTabId(result.destination.droppableId);\n        //     handleDragSingleMasterDrawing({ specId, drawingInsertPoint: 0 });\n        //     return;\n        // }\n        // if (isDroppableProductGroupTabId(result.destination.droppableId) && isDraggableTemplateDrawingId(result.draggableId)) {\n        //     // handle drag one template drawing to product group tab\n        //     const { specId } = parseDroppableSpecListId(result.destination.droppableId);\n        //     handleDragSingleTemplateDrawing({\n        //         specId,\n        //         drawingInsertPoint: 0\n        //     });\n        //     return;\n        // }\n        // if (isDroppableProductGroupTabId(result.destination.droppableId) && isDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId)) {\n        //     // handle drag all selected pinned drawings to product group tab\n        //     const { specId } = parseDroppableProductGroupTabId(result.destination.droppableId);\n        //     handleDragAllSelectedPinnedDrawings({ specId, drawingInsertPoint: 0 });\n        //     return;\n        // }\n        // if (isDroppableProductGroupTabId(result.destination.droppableId) && isDraggableIdForDragSelectedDrawing(result.draggableId)) {\n        //     const { specId } = parseDroppableProductGroupTabId(result.destination.droppableId);\n        //     handleDragSelectedDrawings({\n        //         drawingInsertPoint: 0,\n        //         specId,\n        //     });\n        //     return;\n        // }\n        // if (isDroppableNewSpecTabId(result.destination.droppableId) && isDraggableMasterDrawingId(result.draggableId)) {\n        //     // handle drag one master drawing to new spec tab\n        //     handleDragSingleMasterDrawing({ newSpecName: project.get('name'), drawingInsertPoint: 0 });\n        //     return;\n        // }\n        // if (isDroppableNewSpecTabId(result.destination.droppableId) && isDraggableTemplateDrawingId(result.draggableId)) {\n        //     // handle drag one template drawing to new spec tab\n        //     handleDragSingleTemplateDrawing({ newSpecName: project.get('name'), drawingInsertPoint: 0 });\n        //     return;\n        // }\n        // if (isDroppableNewSpecTabId(result.destination.droppableId) && isDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId)) {\n        //     // handle drag all selected pinned drawings to new spec tab\n        //     handleDragAllSelectedPinnedDrawings({ newSpecName: project.get('name'), drawingInsertPoint: 0 });\n        //     return;\n        // }\n        // if (isDroppableNewSpecTabId(result.destination.droppableId) && isDraggableIdForDragSelectedDrawing(result.draggableId)) {\n        //     handleDragSelectedDrawings({\n        //         newSpecName: project?.get('name'),\n        //         drawingInsertPoint: 0,\n        //     });\n        //     return;\n        // }\n        if (isDroppableSpecListId(result.destination.droppableId) || isDroppableShortSpecListId(result.destination.droppableId)) {\n            let handleDragFc;\n            if (isDraggableMasterDrawingId(result.draggableId)) {\n              handleDragFc = handleDragSingleMasterDrawing;\n            } else if (isDraggableTemplateDrawingId(result.draggableId)) {\n              handleDragFc = handleDragSingleTemplateDrawing;\n            } else if (isDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId)) {\n              handleDragFc = handleDragAllSelectedPinnedDrawings;\n            } else if (isDraggableIdForDragSelectedDrawing(result.draggableId)) {\n              handleDragFc = handleDragSelectedDrawings;\n            }\n            if (handleDragFc) {\n              handleDragFc({\n                  specId,\n                  drawingInsertPoint: calculateDrawingInsetPoint()\n              });\n              return;\n            }\n        }\n        if (isDroppableShortSpecListId(result.destination.droppableId) && isDraggableListItem(result.draggableId) && productSearchTerm === '') {\n            const allDrawings = spec?.get('drawings') ?? List();\n            const filteredDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n            const destinationIndex = result.destination.index;\n            const sourceIndex = result.source.index;\n            if (destinationIndex === sourceIndex) {\n                return;\n            }\n            const sourceDrawing = filteredDrawings.get(sourceIndex);\n            const sourceDrawingId = sourceDrawing.get('id');\n            const destinationDrawing = filteredDrawings.get(destinationIndex);\n            const destinationDrawingId = destinationDrawing.get('id');\n            const sourceDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === sourceDrawingId);\n            const destinationDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === destinationDrawingId);\n            const newDrawings = allDrawings.delete(sourceDrawingIndexInOriginalList).insert(destinationDrawingIndexInOriginalList, sourceDrawing);\n            dispatch(new SetOverlayComponentPropsAction({\n                id: LOADING_MODAL_ID,\n                props: {\n                    action: t('specDetail.movingSections')\n                }\n            }));\n            dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: true\n            }));\n            (atsApi.callApi({\n                service: 'spec',\n                endpoint: 'updateSpec',\n                body: {\n                    drawings: newDrawings.toArray(),\n                },\n                params: {\n                    specId\n                }\n            }) as any).then(res => {\n                const updatedSpecFromRes = fromJS(res?.payload?.spec?.spec?.[0]);\n                if (updatedSpecFromRes == null) {\n                    console.error('Invalid response', res); // tslint:disable-line\n                } else {\n                    dispatch(new GetSpecsAction({\n                        specId: updatedSpecFromRes.get('id'),\n                        onSuccess: () => {\n                            dispatch(new ToggleOverlayComponentAction({\n                                id: LOADING_MODAL_ID,\n                                open: false\n                            }));\n                            dispatch(new SetSnackbarOpenAction({\n                                message: t('specDetail.moveSectionsSuccess'),\n                                severity: 'success'\n                            }));\n                        }\n                    }));\n                }\n            }).catch((error) => {\n                console.error('move drawings failed', { error }); // tslint:disable-line\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false\n                }));\n                dispatch(new SetSnackbarOpenAction({\n                    message: t('specDetail.moveSectionsFailed'),\n                    severity: 'error'\n                }));\n            });\n        }\n    };\n    const onImportSelectedDrawings = (draggableId: string) =>\n        importSelectedDrawingsViaDrop({ spec, productSearchTerm, draggableId, onDragEnd });\n    return (\n        <ViewContext.Provider value={viewContextValue}>\n            <DragDropContext onDragEnd={onDragEnd}>\n                {\n                    masterTemplateDrawerState.open ? <ProjectContext value={project}>\n                        <SpecContext value={spec ?? null}>\n                            <ImportSelectedDrawingsContext.Provider value={onImportSelectedDrawings}>\n                                {/* the copy's success callback starts the spec reload before clearing isCopying, so this stays true until the reload lands */}\n                                <DrawerBusyContext.Provider value={isCopying || isSearchingSpecs}>\n                                    <MasterAndTemplateDrawer\n                                        switchState={masterTemplateDrawerState.switchState}\n                                        onSwitch={(newValue) => setMasterTemplateDrawerState(prev => ({\n                                            ...prev,\n                                            switchState: newValue\n                                        }))}\n                                        countryId={project?.getIn(['location', 'country', 'id'])}\n                                        tabValue={masterTemplateDrawerState.tabValue}\n                                        CloseButtonComponent={\n                                            <IconButton\n                                                onClick={() => {\n                                                    setMasterTemplateDrawerState(prev => ({\n                                                        ...prev,\n                                                        open: false,\n                                                        tabValue: 1,\n                                                    }));\n                                                }}\n                                                color='inherit'\n                                            >\n                                                <CloseIcon />\n                                            </IconButton>\n                                        }\n                                    />\n                                </DrawerBusyContext.Provider>\n                            </ImportSelectedDrawingsContext.Provider>\n                        </SpecContext>\n                    </ProjectContext> : null\n                }\n                <VsbRedirectDialog\n                    open={isDialogOpen}\n                    toggleDialog={toggleDialog}\n                    appHref={`visualspecbuilder://load?specId=${specId}&token=${token}`}\n                    webHref={`${env.get('ENDPOINT_UI_VSB')}?specId=${specId}&token=${token}`}\n                />\n                <CopyModal defaultDestinationType='project' />\n                <DeleteModal\n                    open={isDeleteModalOpen}\n                    toggleDeleteModal={toggleDeleteModal}\n                    itemName={projectName || t('ProjectDownload.unnamedProject')}\n                    additionalText={t('deleteModal.deleteProjectWillDeleteSpecs')}\n                    handleDelete={deleteSelectedProject}\n                />\n                <DownloadWarningModal\n                    open={isDownloadWarningModalOpen}\n                    onClose={toggleDownloadWarningModal}\n                    onConfirm={() => {\n                        setIsDownloadWarningModalOpen(false);\n                        props.onViewChange('download');\n                    }}\n                />\n                <SortProductGroupsModal\n                    isLoading={isGettingProjects}\n                    project={project}\n                    open={sortProductGroupsModalOpen}\n                    onClose={() => setSortProductGroupsModalOpen(false)}\n                />\n                <AlternativesDropDown />\n                <NewDefaultView\n                    isLoading={isCopying}\n                    {...props}\n                />\n            </DragDropContext>\n        </ViewContext.Provider>\n    );\n};\n\n\nexport default DefaultView;","import {IconButton as MuiIconButton, IconButtonProps, Tooltip} from '@material-ui/core';\nimport * as React from 'react';\n\nexport interface IIconButtonProps extends IconButtonProps {\n    tooltip?: string;\n}\nconst IconButton: React.FC<IIconButtonProps> = ({\n    tooltip = '',\n    children,\n    ...props\n}) => {\n    return (\n        <Tooltip title={tooltip}>\n            <span>\n              <MuiIconButton {...props}>\n                {children}\n              </MuiIconButton>\n            </span>\n        </Tooltip>\n    );\n};\n\nexport default IconButton;","import CreateIcon from '@material-ui/icons/Create';\nimport * as React from 'react';\nimport IconButton, {IIconButtonProps} from '../../../IconButton';\n\nconst EditButton: React.FC<IIconButtonProps> = (props) => {\n    return (\n        <IconButton {...props}>\n            <CreateIcon fontSize='small' />\n        </IconButton>\n    );\n};\n\nexport default EditButton;","import DeleteIcon from '@material-ui/icons/Delete';\nimport * as React from 'react';\nimport IconButton, {IIconButtonProps} from '../../../IconButton';\n\nconst DeleteButton: React.FC<IIconButtonProps> = (props) => {\n    return (\n        <IconButton edge='start' {...props}>\n            <DeleteIcon fontSize='small' />\n        </IconButton>\n    );\n};\n\nexport default DeleteButton;","import {Grid, Tab, TabProps, Tooltip, useTheme} from '@material-ui/core';\nimport * as React from 'react';\n\ninterface IProps extends TabProps {\n    isSelected: boolean;\n    onClick: () => void;\n    title: string;\n    tooltip?: string;\n}\nconst TabComponent = React.forwardRef<any, { title: string, isActive: boolean, actionButtons: React.ReactNode, tooltip?: string }>(({\n title,\n isActive,\n actionButtons,\n tooltip,\n ...props\n}, ref) => {\n    const [isHovering, setIsHovering] = React.useState(false);\n    const theme = useTheme();\n    return (\n        <Grid\n            container={true}\n            alignItems='center'\n            wrap='nowrap'\n            justify='flex-start'\n            ref={ref}\n            onMouseEnter={() => setIsHovering(true)}\n            {...props}\n            onMouseLeave={() => {\n                setIsHovering(false);\n            }}\n        >\n            <Grid container={true} spacing={1} wrap='nowrap' alignItems='center' style={{ width: 0, flexGrow: 1 }}>\n                <Tooltip title={tooltip || title || ''}>\n                    <Grid\n                        item={true}\n                        style={{\n                            overflow: 'hidden',\n                            textOverflow: 'ellipsis',\n                            whiteSpace: 'nowrap',\n                            color: theme.palette.primary.main,\n                        }}\n                    >\n                        {title}\n                    </Grid>\n                </Tooltip>\n            </Grid>\n            {isHovering ? <Grid container={true} alignItems='center' wrap='nowrap' style={{ width: 'auto', height: 0 }}>\n                    {actionButtons}\n                </Grid> : null}\n        </Grid>\n    );\n});\n\nconst ProductGroupTab: React.FC<IProps> = ({ title, isSelected, onClick, children, tooltip, ...props}) => {\n    return (\n        <Tab\n            onClick={onClick}\n            component={TabComponent}\n            // TabComponent renders its own children, so the TouchRipple that ButtonBase passes down is\n            // never mounted. Keep the ripple off entirely, otherwise keyboard focus on the tab makes\n            // ButtonBase call pulsate() on a null ripple ref and unmounts the whole app (Sentry 7731697923).\n            disableRipple={true}\n            disableFocusRipple={true}\n            title={title}\n            isActive={isSelected}\n            actionButtons={children}\n            tooltip={tooltip}\n            {...props}\n        />\n    );\n};\n\n\nexport default ProductGroupTab;","/* tslint:disable:no-shadowed-variable */\nimport { Checkbox, FormControlLabel, Grid, IconButton, Tabs, Tooltip } from '@material-ui/core';\nimport React from 'react';\nimport { makeStyles } from '@material-ui/styles';\nimport { Theme } from '@material-ui/core/';\nimport clsx from 'clsx';\nimport EditButton from '../../ProjectDetail/SpecSelector/iconButtons/EditButton';\nimport DeleteButton from '../../ProjectDetail/SpecSelector/iconButtons/DeleteButton';\nimport ProductGroupTab from '../../ProjectDetail/SpecSelector/ProductGroupTab';\nimport { DeleteModal } from '../../index';\nimport { useTranslation } from 'react-i18next';\nimport { getAllFilteredDrawingsInProjectWithProductSelected, getDrawingsWithProduct, getHasSelectedFilteredDrawingWithProducts, getProjectSpecsWithFilteredDrawingsWithProduct } from '../../ProjectDetail/common/helpers';\nimport { useViewContext } from '../context/viewContext';\nimport SwapVertIcon from '@material-ui/icons/SwapVert';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport { fromJS, List, Map } from 'immutable';\nimport { MassUpdateProjectSpecDetailConfigAction } from '../../../modules/ProjectModule/actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IMap } from 'ats-utils/src';\nimport { Spec } from '../../../models';\nimport { getSelectedDrawings } from '../helpers';\n\ninterface IProductGroupTabsProps {\n  specs:  Map<number, IMap<Spec>>;\n  selectedSpecId: number;\n  projectSpecDetailConfig: any;\n  tabs: Array<{ name: string, id: number, projectId: number }>;\n  onSelectTab?: (tab: { name: string, id: number }, tabIndex) => void;\n  onEdit?: (tab: { name: string, id: number }, tabIndex: number) => void;\n  onDelete?: (tab: { name: string, id: number }, tabIndex: number) => void;\n  onCreate?: () => void;\n  displaySort?: boolean;\n  disabledSort?: boolean;\n  disabledSortTooltip?: string;\n  activeTabIndex: number | boolean;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n  root: {\n    width: '100%',\n    backgroundColor: '#fff',\n  },\n  appBar: {\n    color: '#757575',\n    backgroundColor: '#F5F5F5',\n    boxShadow: `0px -1px 0px 0px ${theme.palette.grey[400]} inset`,\n    display: 'flex',\n    whiteSpace: 'nowrap',\n  },\n  tab: {\n    borderCollapse: 'collapse',\n    borderColor: '#bdbdbd',\n    borderStyle: 'solid',\n    borderWidth: '1px 1px 0px 1px',\n    padding: theme.spacing(1.5, 3),\n    lineHeight: 1,\n    minWidth: 200,\n    minHeight: 40,\n    width: 'fit-content'\n  },\n  selectedTab: {\n    color: theme.palette.primary.main,\n    backgroundColor: '#fff',\n    borderStyle: 'solid',\n    borderWidth: '1px 1px 0px 1px',\n    borderColor: theme.palette.grey[400],\n  },\n  droppableIsDraggingOver: {\n    backgroundColor: '#F8F1E8',\n    border: `2px dashed ${theme.palette.primary[400]}`,\n  },\n  allCheckboxTooltip: {\n    maxWidth: 350,\n  }\n}));\n\nconst ProductGroupTabs: React.FC<IProductGroupTabsProps> = ({\n  specs,\n  selectedSpecId,\n  projectSpecDetailConfig,\n  activeTabIndex,\n  tabs = [],\n  displaySort = true,\n  disabledSort = false,\n  disabledSortTooltip = '',\n  onSelectTab,\n  onEdit,\n  onDelete,\n  onCreate\n}) => {\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const classes = useStyles();\n\n  const [deleteModelOpen, setDeleteModalOpen] = React.useState(false);\n  const [specToDelete, setSpecToDelete] = React.useState<{ id: number, name: string, index: number }>({ id: null, name: '', index: 0 });\n  const { productSearchTerm, setSortProductGroupsModalOpen } = useViewContext();\n\n  const selectedSpec = specs?.get(selectedSpecId);\n  const isAi = selectedSpec?.get('isAi');\n  const selectedDrawings = getSelectedDrawings(projectSpecDetailConfig);\n  // const nonEmptyDrawings = getDrawingsWithProduct(specs);\n  const projectSpecsWithFilteredDrawingsWithProduct = getProjectSpecsWithFilteredDrawingsWithProduct(specs, productSearchTerm);\n  const allFilteredDrawingsInProjectWithProductSelected = getAllFilteredDrawingsInProjectWithProductSelected(selectedDrawings.length, projectSpecsWithFilteredDrawingsWithProduct, projectSpecDetailConfig);\n  const hasSelectedFilteredDrawingWithProducts = getHasSelectedFilteredDrawingWithProducts(selectedDrawings.length, projectSpecsWithFilteredDrawingsWithProduct, projectSpecDetailConfig);\n\n  const handleChange = (newValue, tabIndex) => {\n    const newSelectedTab = tabs.find((tab, tabIndex) => tabIndex === newValue);\n    onSelectTab?.(newSelectedTab, tabIndex);\n  };\n\n  return (\n    <div className={classes.root}>\n      <div className={classes.appBar}>\n        <Tabs\n          value={activeTabIndex}\n          variant='scrollable'\n          scrollButtons='auto'\n          textColor='primary'\n          aria-label='scrollable force tabs example'\n          TabIndicatorProps={{\n            style: {\n              display: 'none'\n            }\n          }}\n          style={{\n            minHeight: 40\n          }}\n        >\n          {\n            onCreate && (\n              <ProductGroupTab\n                className={clsx({\n                  [classes.tab]: true,\n                })}\n                style={{ marginLeft: 20 }}\n                isSelected={false}\n                onClick={() => {\n                  onCreate();\n                }}\n                title={t('ProductGroupTabs.createSpec')}\n                disableRipple={true}\n              />\n            )\n          }\n          {\n            tabs.map(({ name, id, projectId }, tabIndex) => {\n              const isSelected = activeTabIndex === tabIndex;\n              const selectableDrawings = specs.get(id)?.get('drawings')?.filter(drawing => {\n                return drawing.get('products')?.size > 0;\n              }) || List();\n              return (\n                <ProductGroupTab\n                  className={clsx({\n                    [classes.tab]: true,\n                    [classes.selectedTab]: isSelected\n                  })}\n                  title={name}\n                  tooltip={t('projectDetailPage.specTabTooltip', { name, count: selectableDrawings.size })}\n                  key={tabIndex}\n                  isSelected={isSelected}\n                  onClick={() => {\n                    handleChange(tabIndex, tabIndex);\n                  }}\n                >\n                  {\n                    onEdit && (\n                      <EditButton\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          onEdit?.({ name, id }, tabIndex);\n                        }}\n                      />\n                    )\n                  }\n                  {\n                    onDelete && (\n                      <DeleteButton\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          setSpecToDelete({ id, name, index: tabIndex });\n                          setDeleteModalOpen(true);\n                        }}\n                      />\n                    )\n                  }\n                </ProductGroupTab>\n              );\n            })\n          }\n        </Tabs>\n        <Grid container={true} wrap='nowrap' alignItems='center' style={{ width: 'fit-content', marginRight: 16 }}>\n          <Tooltip title={t('projectDetailPage.allCheckboxTooltip')} classes={{ tooltip: classes.allCheckboxTooltip}}>\n            <span>\n              <FormControlLabel\n                control={\n                  <Checkbox\n                    color='primary'\n                    disabled={isAi}\n                    checked={hasSelectedFilteredDrawingWithProducts && allFilteredDrawingsInProjectWithProductSelected}\n                    indeterminate={hasSelectedFilteredDrawingWithProducts && !allFilteredDrawingsInProjectWithProductSelected}\n                    style={{ height: 40, width: 40 }}\n                  />\n                }\n                label={t('projectDetailPage.allCheckboxLabel')}\n                labelPlacement={'start'}\n                onChange={(e, checked) => {\n                  const specsDrawingIds = specs?.reduce((acc, _spec, _specId) => {\n                    const drawingsDisplayed = filterSpecDrawingsByProductName(_spec, productSearchTerm);\n                    return drawingsDisplayed.reduce((_acc, drawing) => {\n                      if (drawing.get('products').size > 0) {\n                        return _acc.update(_specId, List(), list => list.push(drawing.get('id')));\n                      }\n                      return _acc;\n                    }, acc);\n                  }, fromJS({}) as Map<number, List<number>>);\n\n                  if (specsDrawingIds?.size > 0) {\n                    dispatch(new MassUpdateProjectSpecDetailConfigAction({ specsDrawingIds, checked }));\n                  }\n                }}\n              />\n            </span>\n          </Tooltip>\n          {\n            displaySort && (\n              <Tooltip title={disabledSort ? disabledSortTooltip || '' : ''}>\n                <span>\n                  <IconButton\n                    disabled={disabledSort || tabs.length <= 1}\n                    style={{ marginLeft: 8, height: 40, width: 40 }}\n                    onClick={() => setSortProductGroupsModalOpen(true)}\n                  >\n                    <SwapVertIcon fontSize='large' />\n                  </IconButton>\n                </span>\n              </Tooltip>\n            )\n          }\n        </Grid>\n      </div>\n      <DeleteModal\n        open={deleteModelOpen}\n        itemName={specToDelete.name || t('ProjectDetail.deleteModalSpecName')}\n        toggleDeleteModal={() => setDeleteModalOpen(false)}\n        handleDelete={() => {\n          setDeleteModalOpen(false);\n          onDelete?.({ id: specToDelete.id, name: specToDelete.name }, specToDelete.index);\n        }}\n        withLoading={false}\n      />\n    </div>\n  );\n};\n\nexport default ProductGroupTabs;","export default __webpack_public_path__ + \"static/media/tasks.acc88fa9.svg\";","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Grid,\n  IconButton,\n  LinearProgress,\n  Theme,\n  Typography,\n  WithStyles,\n  Avatar,\n  Popover,\n  withStyles,\n  Tooltip,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport {compose, Dispatch} from 'redux';\nimport {withTranslation, WithTranslation,} from 'react-i18next';\nimport {connect} from 'react-redux';\nimport * as Immutable from 'immutable';\nimport {List} from 'immutable';\nimport {IAction, IMap,} from 'ats-utils/src/Interfaces';\nimport {createStructuredSelector} from 'reselect';\nimport {ToggleOverlayComponentAction,} from '../../modules/ApplicationModule/actions';\nimport tasksIcon from '../../images/tasks.svg';\nimport {DeleteTaskAction, UpdateCriterionAndGetTaskAction, EditTaskAction, UpdateCriteriaStatusesAndGetTaskAction} from '../../modules/TaskModule/actions';\nimport StatusChip from '../StatusChip';\nimport {makeSelectTaskCriteria} from '../../modules/TaskModule/selectors';\nimport Criteria, {CriteriaStatus,} from '../../models/Criteria';\nimport {Project, Task, ListItem, Office, User} from '../../models';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport classNames from 'classnames';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\n\n// icons\nimport AssignmentTurnedInIcon from '@material-ui/icons/AssignmentTurnedIn';\nimport AccountCircleRoundedIcon from '@material-ui/icons/AccountCircleRounded';\nimport PersonIcon from '@material-ui/icons/Person';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport WatchLaterIcon from '@material-ui/icons/WatchLater';\nimport ListAltRoundedIcon from '@material-ui/icons/ListAltRounded';\nimport CheckCircleRoundedIcon from '@material-ui/icons/CheckCircleRounded';\nimport CancelRoundedIcon from '@material-ui/icons/CancelRounded';\nimport PlayCircleFilledRoundedIcon from '@material-ui/icons/PlayCircleFilledRounded';\nimport RadioButtonUncheckedRoundedIcon from '@material-ui/icons/RadioButtonUncheckedRounded';\nimport DrawerRow from '../DrawerRow';\nimport DrawerViewHeader from '../DrawerViewHeader';\nimport { makeSelectOffice, makeSelectUserById } from '../../modules/AccountModule/selectors';\nimport { GetOfficeByIdAction, GetUserByIdAction } from '../../modules/AccountModule/actions';\nimport { makeSelectIsRestrictedOutsideSalesRep, makeSelectUserId } from '../../modules/AtsModule/selectors';\nimport { camelizeString } from '../../utils';\n\ninterface ITaskViewDrawerDetailsTaskComponentProps {\n  drawerId?: string;\n  toggleHandle: () => void;\n  task?: IMap<Task>;\n  type: string;\n  typeId: number;\n}\n\ninterface ITaskViewDrawerDetailsTaskProps extends ITaskViewDrawerDetailsTaskComponentProps {\n  dispatch: Dispatch<IAction>;\n  selectedTaskCriteria: List<IMap<Criteria>>;\n  selectedProject: IMap<Project>;\n  editCriteriaStatus: (taskId: number, criteriaId: number, status: string) => void;\n  deleteTask: (taskId: number) => void;\n  updateAllCriteriaStatus: (task: IMap<Task>, newStatus: string) => void;\n  office: IMap<Office>;\n  userById: IMap<User>;\n  getUserById: (id: number) => void;\n  getOfficeById: (officeId: number) => void;\n  isRestrictedOutsideSalesRep: boolean;\n  loginUserId: number;\n}\n\n\ntype TaskViewDrawerDetailsTaskType = WithTranslation & ITaskViewDrawerDetailsTaskProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass TaskViewDrawerDetailsTask extends React.Component<TaskViewDrawerDetailsTaskType, {}> {\n\n  public state = {\n    anchorEl: null,\n  };\n\n  public componentDidMount() {\n    const {\n      getUserById,\n      getOfficeById,\n      type,\n      typeId,\n      userById\n    } = this.props;\n\n    if (type === 'user' && typeId !== userById.get('id')) {\n      getUserById(typeId);\n    }\n\n    if (type === 'office' && typeId) {\n      getOfficeById(typeId);\n    }\n  }\n\n  public handleMenuOpen = (event: any) => {\n    const {\n      task,\n      loginUserId,\n      isRestrictedOutsideSalesRep,\n    } = this.props;\n\n    // if the restricted outside sales rep user is not assigned the task then they cannot change the task status\n    if (isRestrictedOutsideSalesRep && !task.getIn(['tag', 'user']).some((user) => user.get('id') === loginUserId)) {\n      return;\n    }\n    this.setState({anchorEl: event.currentTarget});\n  }\n  public handleMenuExit = (color: any) => {\n    this.setState({colorFor: color});\n  }\n  public handleMenuClose = () => {\n    this.setState({anchorEl: null});\n  }\n  public changeStatus = (newStatus: IMap<ListItem>) => {\n    const {\n      selectedTaskCriteria,\n      editCriteriaStatus,\n      task,\n      updateAllCriteriaStatus,\n    } = this.props;\n\n    const statusValue: any = newStatus.get('id');\n    const newTask: IMap<Task> = task.set('status', statusValue);\n\n    updateAllCriteriaStatus(\n      newTask,\n      statusValue,\n    )\n    this.setState({anchorEl: null});\n\n    // selectedTaskCriteria.map((criteria: IMap<Criteria>) => {\n    //   const taskId = criteria.get('taskId');\n    //   const criteriaId = criteria.get('id');\n    //   const criteriaStatus = criteria.get('status');\n\n    //   const updateTheCriteria = () => editCriteriaStatus(\n    //     taskId,\n    //     criteriaId,\n    //     status=newStatus.get('value')\n    //   );\n    //   updateTheCriteria();\n    // })\n\n    // below is logic that's not override for all. may change laterz\n    // changes all the criterias\n    // const changeAll = (value: string) => {\n\n    //   this.setState({anchorEl: null});\n    //   console.log('changeall', value)\n\n    //   selectedTaskCriteria.map((criteria: IMap<Criteria>) => {\n    //     const taskId = criteria.get('taskId');\n    //     const criteriaId = criteria.get('id');\n    //     const criteriaStatus = criteria.get('status');\n\n    //     const updateTheCriteria = () => editCriteriaStatus(\n    //       taskId,\n    //       criteriaId,\n    //       status=value\n    //     );\n\n        // todo && cancel are overrides\n        // if (value === 'Rejected') {\n        //   updateTheCriteria()\n        // }\n        // else if (value === 'Created') {\n        //   updateTheCriteria()\n        // }\n        // else if (value === 'InProgress' && criteriaStatus !== 'Completed' && criteriaStatus !== 'Rejected') {\n        //   console.log('inprogress fired')\n        //   updateTheCriteria()\n        // }\n        // else if (value === 'Completed' && criteriaStatus !== 'Completed' && criteriaStatus !== 'Rejected') {\n        //   console.log('completed fired')\n        //   updateTheCriteria()\n        // }\n        // else {\n        //   return;\n        // }\n\n\n    //   })\n    // }\n\n    // Cancelled, Todo, InProgress, Completed\n    // Rejected, Created, InProgress, Completed\n\n    // const statusValue = newStatus.value;\n\n    // switch (statusValue) {\n    //   case 'Cancelled':\n    //     return changeAll('Rejected')\n    //   case 'ToDo':\n    //     return changeAll('Created')\n    //   case 'InProgress':\n    //     return changeAll('InProgress')\n    //   case 'Completed':\n    //     return changeAll('Completed')\n    // }\n\n  }\n\n  public closeDrawer = () => {\n    const {\n      dispatch,\n      drawerId,\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: drawerId,\n      open: false,\n    }))\n  };\n\n  public handleDelete = () => {\n    const {\n      toggleHandle,\n      deleteTask,\n      task\n    } = this.props;\n\n    toggleHandle();\n    deleteTask(task.get('id'));\n    this.closeDrawer();\n  }\n\n  public render() {\n    const {\n      classes,\n      toggleHandle,\n      task,\n      editCriteriaStatus,\n      type,\n      typeId,\n      selectedProject,\n      office,\n      userById,\n      t,\n      isRestrictedOutsideSalesRep,\n      loginUserId,\n    } = this.props;\n\n    const disabledStatusChange = isRestrictedOutsideSalesRep && !task.getIn(['tag', 'user']).some((user) => user.get('id') === loginUserId);\n\n    const projectName = selectedProject && selectedProject.get('name', t('taskDrawer.na'));\n    const officeName = office && office.get('officeName');\n    const firstName = userById && userById.get('firstName');\n    const lastName = userById && userById.get('lastName');\n    const name = [firstName, lastName].filter(val => val !== '').join(' ');\n\n    if (task == null) {\n      return <Typography>\n        {t('taskDrawer.noTaskSelected')}\n      </Typography>;\n    }\n\n    const {\n      anchorEl\n    } = this.state;\n\n    const taskDescription = task.get('task', '');\n    const assignedByUser = `${task.getIn(['taskFrom', 'first_name'])} ${task.getIn(['taskFrom', 'last_name'])}`;\n    const assignedDate = utcToLocal(task.get('createdDate'), true);\n    const users = task.getIn(['tag', 'user'], []).map((user, index) => {\n      return (\n        <Grid\n          key={index}\n        >\n          <Grid\n            item={true}\n            key={user.get('id')}\n          >\n            <Tooltip title={`${user.get('first_name')} ${user.get('last_name')}`}>\n              <Avatar className={classes.avatar}>\n                {user.get('first_name') && user.get('first_name')[0]}\n                {user.get('last_name') && user.get('last_name')[0]}\n              </Avatar>\n            </Tooltip>\n          </Grid>\n        </Grid>\n      );\n    })\n\n    const dueDate = utcToLocal(task.get('completionDueDate', ''));\n    const taskId = task.get('id');\n\n    let totalCriterias = 0;\n    let completedCriterias = 0;\n\n    const criterias = task && task.get('criteria')\n    ? task.get('criteria').map((criteria: IMap<Criteria>, key: string) => {\n        const taskId = criteria.get('taskId');\n        const criteriaId = criteria.get('id');\n        const currentStatus = criteria.get('status');\n\n        if (currentStatus !== CriteriaStatus.Rejected) {\n          totalCriterias++;\n          if (currentStatus === CriteriaStatus.Completed) {\n            completedCriterias++;\n          }\n        }\n\n        return <Grid\n          key={key}\n          className={classNames(classes.criteriasContainer, classes[currentStatus])}\n        >\n          <Grid className={classes.criteriasContent}>\n            <Typography variant='body2' style={\n              [CriteriaStatus.Completed, CriteriaStatus.Rejected].includes(currentStatus) ? {\n                textDecoration: 'line-through'\n              } : {}\n            }>\n              {\n                criteria.get('criteria', '')\n              }\n            </Typography>\n            <Grid container={true}>\n              <Grid item={true} xs={8}>\n                <Tooltip title={t('taskDrawer.createdTooltip')} placement='top'>\n                  <span>\n                    <IconButton\n                      className={classes.criteriaButton}\n                      disabled={disabledStatusChange}\n                      onClick={\n                        () => {\n                          editCriteriaStatus(\n                            taskId,\n                            criteriaId,\n                            status='Created'\n                          )\n                        }\n                      }\n                    >\n                      <RadioButtonUncheckedRoundedIcon fontSize='small'/>\n                    </IconButton>\n                  </span>\n                </Tooltip>\n                <Tooltip title={t('taskDrawer.inProgressTooltip')} placement='top'>\n                  <span>\n                    <IconButton\n                      className={classes.criteriaButton}\n                      disabled={disabledStatusChange}\n                      onClick={\n                        () => {\n                          editCriteriaStatus(\n                            taskId,\n                            criteriaId,\n                            status='InProgress'\n                          )\n                        }\n                      }\n                    >\n                      <PlayCircleFilledRoundedIcon fontSize='small'/>\n                    </IconButton>\n                  </span>\n                </Tooltip>\n                <Tooltip title={t('taskDrawer.completedTooltip')} placement='top'>\n                  <span>\n                    <IconButton\n                      className={classes.criteriaButton}\n                      disabled={disabledStatusChange}\n                      onClick={\n                        () => {\n                          editCriteriaStatus(\n                            taskId,\n                            criteriaId,\n                            status='Completed'\n                          )\n                        }\n                      }\n                    >\n                      <CheckCircleRoundedIcon fontSize='small'/>\n                    </IconButton>\n                  </span>\n                </Tooltip>\n                <Tooltip title={t('taskDrawer.rejectedTooltip')} placement='top'>\n                  <span>\n                    <IconButton\n                      className={classes.criteriaButton}\n                      disabled={disabledStatusChange}\n                      onClick={\n                        () => {\n                          editCriteriaStatus(\n                            taskId,\n                            criteriaId,\n                            status='Rejected'\n                          )\n                        }\n                      }\n                    >\n                      <CancelRoundedIcon fontSize='small'/>\n                    </IconButton>\n                  </span>\n                </Tooltip>\n              </Grid>\n              <Grid item={true} xs={12} className={classes.criteriaStatus}>\n                <Typography variant='body2'>\n                  {t(`status.${camelizeString(currentStatus)}`, currentStatus)}\n                </Typography>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n      }).valueSeq().toArray()\n    : null;\n\n    return (\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        {/* task header */}\n        <DrawerViewHeader\n          imageProps={{\n            imgProps: {\n              src: tasksIcon,\n              alt: 'tasks icon'\n            }\n          }}\n          menuItems={isRestrictedOutsideSalesRep ? [] : [\n            { action: t('formButtons.edit'), onClick: toggleHandle },\n            { action: t('formButtons.delete'), onClick: this.handleDelete }\n          ]}\n          title={t('task.title')}\n          otherElements={\n            <Grid\n              container={true}\n              justify='center'\n              className={classes.taskStatusContainer}\n            >\n              <Grid className={classes.statusChipContainer}>\n                <StatusChip\n                  status={CriteriaStatus[task.get('status')]}\n                  anchorEl={anchorEl}\n                  handleOpen={this.handleMenuOpen}\n                  handleExit={this.handleMenuExit}\n                  handleClose={this.handleMenuClose}\n                  changeStatus={this.changeStatus}\n                  options={\n                    (\n                      Immutable.fromJS(CriteriaStatus) as Immutable.Map<string, string>).map((value, key) => {\n                        return new ListItem<string, string>({id: key, value}).toImmutable();\n                      }\n                    ).toList()\n                  }\n                  // TypographyProps={{\n                  //   variant: 'caption'\n                  // }}\n                />\n              </Grid>\n            </Grid>\n          }\n          handleClose={this.closeDrawer}\n        />\n\n        {/* task content */}\n        <Grid\n          container={true}\n          direction='column'\n          wrap='nowrap'\n          className={classes.body}\n        >\n          <DrawerRow\n            muiIcon={<AssignmentTurnedInIcon />}\n            text={taskDescription}\n          />\n          <DrawerRow\n            muiIcon={<AccountCircleRoundedIcon />}\n            alignItems='flex-start'\n          >\n            <Typography variant='body2' color='inherit'>\n              {t('taskDrawer.assignedBy')} <span className={classes.mainPrimaryColor}>{assignedByUser}</span>\n            </Typography>\n            <Typography variant='body2' color='inherit'>\n              {t('taskDrawer.createdOn')} {assignedDate}\n            </Typography>\n          </DrawerRow>\n          <DrawerRow muiIcon={<PersonIcon />}>\n            {users}\n          </DrawerRow>\n          <DrawerRow\n            muiIcon={<FolderIcon />}\n            text={\n              `${t(`taskDrawer.${type}`)}: ${type === 'project' \n                ? projectName \n                : type === 'user'\n                  ? name\n                  : type === 'office'\n                    ? officeName\n                    : typeId}`\n            }\n          />\n          <DrawerRow\n            muiIcon={<WatchLaterIcon />}\n            text={`${t('taskDrawer.due')} ${dueDate}`}\n            margin={false}\n          />\n        </Grid>\n\n        {/* criterias section */}\n        <Grid className={classNames(classes.body, classes.criteriaSection)}>\n          {/* Progress bar */}\n          {\n            totalCriterias !== 0 && (\n              <DrawerRow muiIcon={<ListAltRoundedIcon />} >\n                <Grid container={true} justify='space-between'>\n                  <Grid item={true} xs={10} className={classes.progressBarContainer}>\n                    <LinearProgress\n                      variant=\"determinate\"\n                      value={(completedCriterias/totalCriterias) * 100}\n                      className={classes.linearProgressBar}\n                    />\n                  </Grid>\n                  <Typography variant='body2' color='inherit'>{completedCriterias}/{totalCriterias}</Typography>\n                </Grid>\n              </DrawerRow>\n            )\n          }\n          {criterias}\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  },\n  body: {\n    padding: theme.spacing(3),\n    color: theme.palette.text.primary,\n    lineHeight: '1rem',\n    '& a': {\n      color: theme.palette.primary.main,\n      textDecoration: 'none',\n    },\n  },\n  dropDownContainer: {\n    color: theme.palette.common.white\n  },\n  taskStatusContainer: {\n    marginTop: theme.spacing(),\n    marginBottom: theme.spacing()\n  },\n  statusChipContainer: {\n    background: 'white',\n    borderRadius: theme.shape.borderRadius,\n  },\n  mainPrimaryColor: {\n    color: theme.palette.primary.main\n  },\n  criteriaSection: {\n    borderTop: '1px solid rgba(224, 224, 224, 1)',\n    borderBottom: '1px solid rgba(224, 224, 224, 1)',\n  },\n  criteriasContainer: {\n    marginTop: theme.spacing(1.5),\n    borderBottom: '1px solid rgba(224, 224, 224, 1)',\n    borderLeft: 'solid',\n    borderWidth: theme.spacing(0.5),\n  },\n  criteriasContent: {\n    marginTop: theme.spacing(0.5),\n    marginLeft: theme.spacing(1.5)\n  },\n  [CriteriaStatus.InProgress]: {\n    color: Immutable.getIn(theme.palette, ['status', 'inProgress'], 'none'),\n  },\n  [CriteriaStatus.Rejected]: {\n    color: Immutable.getIn(theme.palette, ['status', 'cancelled'], 'none'),\n  },\n  [CriteriaStatus.Created]: {\n    color: Immutable.getIn(theme.palette, ['status', 'created'], 'none'),\n  },\n  [CriteriaStatus.Completed]: {\n    color: Immutable.getIn(theme.palette, ['status', 'completed'], 'none'),\n  },\n  criteriaStatus: {\n    textAlign: 'right',\n    alignSelf: 'center'\n  },\n  progressBarContainer: {\n    alignSelf: 'center'\n  },\n  linearProgressBar: {\n    backgroundColor: theme.palette.common.white,\n    '& div': {\n      backgroundColor: theme.palette.secondary.main\n    }\n  },\n  avatar: {\n    width: theme.spacing(3),\n    height: theme.spacing(3),\n    margin: 0,\n    color: theme.palette.grey[400],\n    backgroundColor: theme.palette.grey[100],\n    textTransform: 'uppercase',\n    fontSize: theme.typography.fontSize,\n    marginRight: theme.spacing(0.75)\n  },\n  popover: {\n    pointerEvents: 'none',\n  },\n  paper: {\n    padding: theme.spacing(),\n    backgroundColor: 'rgba(0,0,0,0.54)',\n    color: theme.palette.common.white\n  },\n  criteriaButton: {\n    padding: theme.spacing(0.5)\n  }\n});\n\nconst mapStateToProps = (state, ownProps) => {\n  const office = ownProps.type === 'office' && ownProps.typeId ? makeSelectOffice({ officeId: ownProps.typeId })(state) : Immutable.Map<string, any>();\n  return {\n    office,\n    ...createStructuredSelector({\n      selectedTaskCriteria: makeSelectTaskCriteria(),\n      selectedProject: makeSelectProject(),\n      userById: makeSelectUserById(),\n      loginUserId: makeSelectUserId(),\n      isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n    })(state)\n  };\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    deleteTask: (taskId: number) => {\n      dispatch(new DeleteTaskAction({selectedTaskId: taskId}));\n    },\n    editCriteriaStatus: (taskId: number, criteriaId: number, status: string) => {\n      dispatch(new UpdateCriterionAndGetTaskAction({taskId, criteriaId, status}));\n    },\n    updateAllCriteriaStatus: (task: IMap<Task>, newStatus: string) => {\n      dispatch(new UpdateCriteriaStatusesAndGetTaskAction({\n        task,\n        newStatus,\n      }))\n    },\n    getUserById: (id: number) => {\n      dispatch(new GetUserByIdAction({ id }));\n    },\n    getOfficeById: (officeId: number) => {\n      dispatch(new GetOfficeByIdAction({ officeId }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ITaskViewDrawerDetailsTaskComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps)\n)(TaskViewDrawerDetailsTask);\n","import * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Button,\n  IconButton,\n  Typography,\n  Input,\n  FormControl,\n  FormHelperText,\n  TextField,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  useTranslation,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  Map,\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  ToggleOverlayComponentAction,\n} from '../../modules/ApplicationModule/actions';\n\nimport FieldListItemReactSelect, {\n  IFieldListItemReactSelectComponentProps,\n} from '../../../src/components/FieldListItemReactSelect';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectUserIsAtsUser,\n  makeSelectUserOfficeId\n} from '../../modules/AtsModule/selectors';\nimport { makeSelectProjects, makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport {\n  Project,\n  Criteria,\n  User,\n  Office\n} from '../../models';\nimport Task, {\n  TagEntity,\n  TagEntityType,\n} from '../../models/Task';\nimport {\n  EditTaskAction,\n  TagEntityAction,\n  AddCriteriaAction,\n  EditCriteriaAction,\n  DeleteCriteriaAction,\n  UnTagEntityAction,\n  CreateOrUpdateTaskAction\n} from '../../modules/TaskModule/actions';\nimport {\n  makeSelectSelectedTaskId,\n  makeSelectTaskCriteria\n} from '../../modules/TaskModule/selectors';\nimport {\n  required,\n  isValidMomentDate,\n  isNotEmptyStringRequired\n} from '../../../src/validators';\nimport { SearchUsersQuickAction, SearchUsersQuickByOfficeIdAction, GetUserByIdAction, GetOfficeByIdAction } from '../../modules/AccountModule/actions';\nimport { makeSelectOffice, makeSelectSearchedUsersWithUsers, makeSelectUserById } from '../../modules/AccountModule/selectors';\nimport classnames from 'classnames';\nimport DrawerRow from '../DrawerRow';\nimport {CriteriaStatus} from '../../models/Criteria';\nimport * as Immutable from 'immutable';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddIcon from '@material-ui/icons/Add';\nimport AssignmentTurnedInIcon from '@material-ui/icons/AssignmentTurnedIn';\nimport PersonIcon from '@material-ui/icons/Person';\nimport WatchLaterIcon from '@material-ui/icons/WatchLater';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport ListAltRoundedIcon from '@material-ui/icons/ListAltRounded';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport FieldDatePickerV2 from '../FieldDatePickerV2';\nimport { IFieldDatePickerV2CustomProps } from '../FieldDatePickerV2/types';\n\ninterface ITaskViewDrawerDetailsEditComponentProps {\n  drawerId: string;\n  toggleHandle: () => void;\n  task?: IMap<Task>;\n  type: string;\n  typeId: number;\n}\n\ninterface ITaskViewDrawerDetailsEditProps extends ITaskViewDrawerDetailsEditComponentProps {\n  projects?: Map<number, IMap<Project>>;\n  officeId?: number;\n  dispatch: Dispatch<IAction>;\n  selectedTaskCriteria: List<IMap<Criteria>>;\n  selectedTaskId: number;\n  closeDrawer: () => void;\n  formValues: Map<string, any>; // should be Task-like but not really\n  initialValues: Map<string, any>;\n  searchedUsers: Map<string, any>;\n  addEntity: (entityData: TagEntity) => void;\n  deleteEntity: (entityData: TagEntity) => void;\n  selectedProject: IMap<Project>;\n  office: IMap<Office>;\n  userById: IMap<User>;\n  userIsAtsUser: boolean;\n  getUserById: (id: number) => void;\n  getOfficeById: (officeId: number) => void;\n  searchUser: ({ searchTerm, queries, firmId, officeId, includeAtsUsers }: { searchTerm: string, queries: Map<string, any>, firmId?: number, officeId?: number, includeAtsUsers?: boolean }) => void;\n}\n\ninterface ITaskViewDrawerDetailsEditState {\n  localCriteriaData: Array<IMap<Criteria>>;\n  newCriteria: string;\n  editedCriteriaIds: IMap<object>;\n  deletedCriteriaIds: number[];\n  insufficientCriterias: boolean;\n}\n\nconst customStyles = ({\n  control: (provided, state) => ({\n    ...provided,\n    boderColor: !state.isFocused ? 'neutral90' : 'primary',\n    borderWidth: '0 0 1px 0',\n    boxShadow: '0px',\n    borderRadius: '0px'\n  }),\n  valueContainer: (provided) => ({\n    ...provided,\n    paddingLeft: 0,\n  }),\n  dropdownIndicator: () => ({\n    display: 'none'\n  }),\n  indicatorSeparator: () => ({\n    display: 'none'\n  }),\n  multiValueLabel: (provided) => ({\n    ...provided,\n    whiteSpace: 'normal',\n  }),\n});\n\ntype TaskViewDrawerDetailsEditType = WithTranslation & ITaskViewDrawerDetailsEditProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass TaskViewDrawerDetailsEdit extends React.Component<TaskViewDrawerDetailsEditType, ITaskViewDrawerDetailsEditState> {\n  public state = {\n    localCriteriaData: this.props.selectedTaskCriteria.toArray(),\n    newCriteria: '',\n    editedCriteriaIds: Map({}),\n    deletedCriteriaIds: Array<number>(),\n    insufficientCriterias: false,\n  };\n\n  public componentDidMount() {\n    const {\n      getUserById,\n      getOfficeById,\n      selectedTaskId,\n      type,\n      typeId,\n      userById\n    } = this.props;\n\n    if (type === 'user' && typeId !== userById.get('id')) {\n      getUserById(typeId);\n    }\n\n    if (type === 'office' && typeId) {\n      getOfficeById(typeId);\n    }\n\n    // reset local stores if there's no selectedTaskId\n    if (selectedTaskId === -1) {\n      this.setState({\n        localCriteriaData: [],\n      });\n    }\n\n    this.searchUser();\n  }\n\n  public searchUser = (searchTerm = '') => {\n    const {\n      searchUser,\n      userIsAtsUser,\n      selectedProject,\n    } = this.props;\n\n    const projectVisibility = selectedProject ? selectedProject.get('visibility') : null;\n    const firmId = projectVisibility === 'firm' ? selectedProject.getIn(['createdBy', 'firm', 'id']) : null;\n    const officeId = projectVisibility === 'office' ? selectedProject.getIn(['createdBy', 'office', 'id']) : null;\n    searchUser({\n      searchTerm,\n      queries: fromJS({includeAtsFirm: userIsAtsUser ?? false}),\n      includeAtsUsers: projectVisibility !== 'public' ? userIsAtsUser ?? false : false,\n      firmId,\n      officeId\n    });\n  }\n\n  public closeDrawer = () => {\n    const {\n      closeDrawer,\n    } = this.props;\n\n    // clear local state so criterias aren't populated when creating new task\n    this.setState({\n      localCriteriaData: [],\n    });\n    closeDrawer();\n  }\n\n  public onSubmit = (values: any) => {\n    const {\n      closeDrawer,\n      formValues,\n      initialValues,\n      dispatch,\n      type,\n      typeId\n    } = this.props;\n\n    const {\n      editedCriteriaIds,\n      deletedCriteriaIds,\n      localCriteriaData,\n    } = this.state;\n\n    let criteria = localCriteriaData;\n\n    if (criteria.length === 0) {\n      if (formValues?.has('id')) {\n        this.setState({insufficientCriterias: true});\n        return;\n      } else {\n        criteria = [ fromJS({ criteria: formValues.get('task') }) ];\n      }\n    } else if (criteria.some(criterion => !criterion.get('criteria'))) {\n      return;\n    }\n\n    // const criteriaValues = localCriteriaData.map(criteriaData => criteriaData.get('criteria'));\n\n    const assignedUsers = fromJS(formValues.getIn(['tag', 'user'])) as List<IMap<User>>;\n    const initialUsers = initialValues.getIn(['tag', 'user']);\n    const filtered = values.delete('subtasks');\n\n    // const projectId = values.getIn(['projectSelection', 'id']);\n\n    const task = fromJS({\n      ...filtered.toJS(),\n      taskToType: type,\n      taskToId: typeId,\n    });\n\n    const deletedUserIds = fromJS(initialUsers.filter((user: IMap<User>) => {\n      return !assignedUsers.includes(user);\n    }).map((user: IMap<User>) => {\n      return user.get('id');\n    })) as List<number>;\n\n    dispatch(new CreateOrUpdateTaskAction({\n      task,\n      criteria: fromJS(criteria) as List<IMap<Partial<Criteria>>>,\n      editedCriteriaIds,\n      deletedCriteriaIds: fromJS(deletedCriteriaIds) as List<number>,\n      assignedUsers,\n      deletedUserIds,\n    }));\n    closeDrawer();\n  }\n\n  public editUser = (users) => {\n    const {\n      selectedTaskId,\n      addEntity,\n    } = this.props;\n\n    if (users) {\n      users.map((assignedUser, index: number) => {\n        const assignedUserId = assignedUser.get('id');\n        return addEntity({\n          taskId: selectedTaskId,\n          type: TagEntityType.USER,\n          typeId: assignedUserId\n        });\n      });\n    }\n  }\n\n  public deleteUser = (users) => {\n    const {\n      selectedTaskId,\n      deleteEntity,\n    } = this.props;\n\n    if (users) {\n      users.map((assignedUser, index: number) => {\n        const assignedUserId = assignedUser.get('id');\n\n        return deleteEntity({\n          taskId: selectedTaskId,\n          type: TagEntityType.USER,\n          typeId: assignedUserId\n        });\n      });\n    }\n  }\n\n  public handleClick = () => {\n    const criteriaAlreadyExists = this.state.localCriteriaData.filter(criteriaData => criteriaData.get('criteria') === this.state.newCriteria);\n    if (this.state.newCriteria === '') {\n      return;\n    }\n    this.setState({\n      localCriteriaData: [...this.state.localCriteriaData, fromJS({criteria: this.state.newCriteria})],\n      newCriteria: '',\n      insufficientCriterias: false,\n    });\n  }\n\n  public handleDelete = (index: number) => {\n\n    const {\n      localCriteriaData,\n      deletedCriteriaIds\n    } = this.state;\n\n    const criteria = localCriteriaData[index];\n\n    const criteriaId = criteria.get('id');\n    if (criteriaId != null) {\n\n      deletedCriteriaIds.push(criteriaId);\n    }\n\n    const newState = [\n      ...localCriteriaData.slice(0, index),\n      ...localCriteriaData.slice(index + 1)\n    ];\n\n    this.setState(Object.assign({\n      localCriteriaData: newState,\n      deletedCriteriaIds\n    }, newState.length === 0 && {\n      insufficientCriterias: true\n    }));\n  }\n\n  public subtaskField = ({input, meta: {touched}}) => {\n    const {\n      formValues,\n      classes,\n      t\n    } = this.props;\n\n    const {\n      localCriteriaData,\n      insufficientCriterias,\n      newCriteria,\n    } = this.state;\n\n    const hasNoCriteria = touched && localCriteriaData.length === 0;\n    const error = formValues?.has('id') && (hasNoCriteria || insufficientCriterias);\n\n    return (\n    <FormControl error={error} fullWidth={true}>\n      <TextField\n        {...input}\n        className={classnames(classes.inputCriteria, classes.criteriasContainer)}\n        inputProps={{\n          className: classnames(classes.textInput)\n        }}\n        placeholder={localCriteriaData.length >= 1 ? t('taskDrawer.addNewSubtask') : `${t('taskDrawer.addNewSubtask')} *`}\n        value={newCriteria}\n        error={error}\n      />\n      {error && <FormHelperText id='component-error-text'>{t('taskDrawer.addError')}</FormHelperText>}\n    </FormControl>\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      toggleHandle,\n      closeDrawer,\n      handleSubmit,\n      projects,\n      searchedUsers,\n      task,\n      type,\n      typeId,\n      selectedProject,\n      userById,\n      office,\n      t\n    } = this.props;\n    const {\n      editedCriteriaIds\n    } = this.state;\n    const projectName = selectedProject && selectedProject.get('name', t('taskDrawer.na'));\n\n    const users = searchedUsers.get('result');\n    const isSearching = searchedUsers.get('isSearching');\n    const firstName = userById && userById.get('firstName');\n    const lastName = userById && userById.get('lastName');\n    const name = [firstName, lastName].filter(val => val !== '').join(' ');\n    const officeName = office && office.get('officeName');\n\n    const {\n      localCriteriaData\n    } = this.state;\n\n    const projectNames = projects.map((project: IMap<Project>) => {\n      return fromJS({\n        id: project.get('id'),\n        value: project.get('name'),\n      });\n    }).toList();\n\n    const usersData = users.map((user) => {\n      const userFirmName = user.getIn(['firm', 'companyName']) || user.getIn(['firm', 'companyAltName']);\n      return fromJS({\n        id: user.get('id'),\n        value: `${user.get('firstName')} ${user.get('lastName')} ${userFirmName ? `- ${userFirmName}` : null}`,\n        key: user.get('id'),\n      });\n    }).toList();\n\n    const criteriasArray = fromJS(localCriteriaData).map((criteria, index) => {\n      return <Grid\n        key={index}\n        container={true}\n        direction='row'\n        wrap='nowrap'\n        className={classnames(classes.criteriasContainer, classes.subtasksRow)}\n      >\n        <Grid item={true} xs={11} className={classes.inputCriteria}>\n          <FormControl error={!criteria.get('criteria')} fullWidth={true}>\n            <Input\n              value={criteria.get('criteria')}\n              inputProps={{\n                className: classnames(classes.textInput)\n              }}\n              onChange={\n                (e) => {\n                  const stateCopy = [...localCriteriaData];\n                  stateCopy[index] = stateCopy[index].set('criteria', e.target.value);\n                  // const containingCriteria = stateCopy.filter(criteriaData => criteriaData.get('criteria') === e.target.value);\n                  if (criteria.get('id')) {\n                    const newEditedCriteriaIds = editedCriteriaIds.set(criteria.get('id'), criteria.get('id'));\n                    this.setState({\n                      localCriteriaData: stateCopy,\n                      editedCriteriaIds: newEditedCriteriaIds\n                    });\n                  } else {\n                    this.setState({\n                      localCriteriaData: stateCopy,\n                    });\n                  }\n                }\n              }\n            />\n            {!criteria.get('criteria') &&\n              <FormHelperText id='component-error-text'>{t('taskDrawer.emptyError')}</FormHelperText>\n            }\n          </FormControl>\n        </Grid>\n        <Grid item={true} xs={1}>\n          <IconButton\n            onClick={() => this.handleDelete(index)}\n            className={classes.criteriaIcons}\n          >\n            <DeleteIcon fontSize='small'/>\n          </IconButton>\n        </Grid>\n      </Grid>;\n    }).toList().push(\n      <Grid\n        key='testmctestface'\n        container={true}\n        className={classes.inputCriteriaContainer}\n      >\n        <Grid item={true} xs={11}>\n          <Field\n            name='subtasks'\n            component={this.subtaskField}\n            onChange={\n              (e) => {\n                // const containingCriteria = localCriteriaData.filter(criteriaData =>\n                //   criteriaData.get('criteria') === e.target.value);\n                this.setState({\n                  newCriteria: e.target.value,\n                });\n            }}\n          />\n        </Grid>\n        <Grid item={true} xs={1}>\n          <IconButton\n            onClick={this.handleClick}\n            className={classes.criteriaIcons}\n          >\n            <AddIcon fontSize='small'/>\n          </IconButton>\n        </Grid>\n      </Grid>\n    );\n\n    return (\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        {/* drawer title */}\n        <DrawerEditHeader title={t('taskDrawer.createEditTask')} handleClose={this.closeDrawer} />\n\n        {/* drawer main */}\n        <Grid container={true} direction='column' className={classes.body}>\n          <Typography\n            variant='body2'\n            color='inherit'\n            className={classes.title}\n          >\n            {t('taskDrawer.taskDetailTitle')}\n          </Typography>\n          <form\n            onSubmit={handleSubmit(this.onSubmit)}\n          >\n\n            {/* Subject */}\n            <DrawerTextFieldRow\n              name='task'\n              muiIcon={<AssignmentTurnedInIcon className={classes.subjectIcon}/>}\n              alignItems='flex-start'\n              multiLine={10}\n              props={{\n                inputProps: {\n                  placeholder: t('taskDrawer.taskSubjectPlaceholder'),\n                },\n                require: true\n              }}\n              validate={[isNotEmptyStringRequired]}\n            />\n\n            {/* Assign to user */}\n            <DrawerRow\n              muiIcon={<PersonIcon className={classes.userIcon}/>}\n              drawerView={false}\n            >\n              <Field<BaseFieldProps<IFieldListItemReactSelectComponentProps>>\n                name='tag.user'\n                component={FieldListItemReactSelect}\n                props={{\n                  styles: customStyles,\n                  inputProps: {\n                    isMulti: true,\n                    defaultValue: '',\n                    isLoading: isSearching,\n                    onInputChange: this.searchUser,\n                    options: usersData,\n                    placeholder: t('taskDrawer.assignPlaceholder'),\n                    className: classnames(classes.greyColor),\n                  },\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n              />\n            </DrawerRow>\n            {/* Set due date */}\n            <DrawerRow\n              alignItems='flex-start'\n              muiIcon={<WatchLaterIcon className={ classes.dueDateIcon}/>}\n              drawerView={false}\n            >\n              <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                name='completionDueDate'\n                props={{\n                  keyboardDatePickerProps: {\n                    placeholder: `${t('taskDrawer.setDueDatePlaceholder')} *`,\n                    required: true,\n                    className: classnames(classes.inputPropsDatePicker),\n                  },\n                  timeOfDay: 'current',\n                  formControlProps: {\n                    fullWidth: true,\n                  }\n                }}\n                validate={[required, isValidMomentDate]}\n                component={FieldDatePickerV2}\n              />\n            </DrawerRow>\n\n            {/* Select Project */}\n            <DrawerRow\n              muiIcon={<FolderIcon />}\n              drawerView={false}\n            >\n                <Typography variant='body2' color='inherit' style={{ width: '200px' }}>\n                  {\n                    `${t(`taskDrawer.${type}`)}: ${type === 'project'\n                    ? projectName\n                    : type === 'user'\n                      ? name\n                      : type === 'office'\n                        ? officeName\n                        : typeId}`\n                  }\n                </Typography>\n            </DrawerRow>\n\n            {/* criteria section */}\n            <DrawerRow\n              classes={{\n                root: classes.addTaskCriteria,\n              }}\n              muiIcon={<ListAltRoundedIcon />}\n              drawerView={false}\n              text={t('taskDrawer.subtasksTitle')}\n            />\n            <Grid>\n              {\n                criteriasArray\n              }\n            </Grid>\n\n            <DrawerEditCTA handleClose={task != null ? toggleHandle : closeDrawer} />\n          </form>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n  },\n  title: {\n    marginBottom: theme.spacing(2)\n  },\n  body: {\n    padding: theme.spacing(3, 3, 0, 3),\n  },\n  description: {\n    marginTop: theme.spacing(2),\n  },\n  subjectIcon: {\n    marginTop: theme.spacing()\n  },\n  dueDateIcon: {\n    marginTop: theme.spacing(0.5)\n  },\n  userIcon: {\n    marginBottom: theme.spacing()\n  },\n  inputCriteria: {\n    width: '100%',\n    paddingLeft: theme.spacing(),\n  },\n  criteriasContainer: {\n    borderLeft: 'solid',\n    borderWidth: theme.spacing(0.5) * 0.5,\n    color: Immutable.getIn(theme.palette, ['status', 'created'], 'none')\n  },\n  textInput: {\n    paddingLeft: `${theme.spacing() * 0.5}px`,\n  },\n  addTaskCriteria: {\n    margin: theme.spacing(3, 0)\n  },\n  criteriaIcons: {\n    padding: theme.spacing(0.5)\n  },\n  greyColor: {\n    '& div': {\n      color: theme.palette.grey['A100']\n    }\n  },\n  inputPropsDatePicker: {\n    '& div': {\n      '& button': {\n        padding: 0,\n        '& span': {\n          '& span': {\n            fontSize: theme.spacing(2)\n          }\n        }\n      }\n    }\n  },\n  subtasksRow: {\n    marginBottom: theme.spacing()\n  }\n});\n\nexport const FORM_NAME = 'TaskForm';\n\nconst mapStateToProps = (state, ownProps) => {\n  const task = ownProps.task != null ? ownProps.task : Map<string, any>();\n\n  const tagUser = task.getIn(['tag', 'user']) || List<Map<string, any>>();\n  const initialValues = task.setIn(\n    ['tag', 'user'],\n    tagUser.map(\n      (user) => {\n        const userName = [user.get('first_name'), user.get('last_name')].join(' ') || '-';\n        return user.set('value', userName);\n      }\n    ).toArray())\n    .set('completionDueDate', utcToLocal(task.get('completionDueDate'), true));\n\n    const office = ownProps.type === 'office' && ownProps.typeId ? makeSelectOffice({ officeId: ownProps.typeId })(state) : Map<string, any>();\n  // const initialValues = data;\n\n  // const userValues = data && data.getIn(['tag', 'user']).map((user, index) => {\n  //   const id = parseInt(user.get('id'));\n  //   const label = user.get('first_name');\n  //   const value = user.get('first_name');\n  //   return {\n  //     id,\n  //     label,\n  //     value,\n  //   }\n  // });\n\n  // const initialValues = data.setIn(['tag', 'user'], userValues);\n  return {\n    initialValues,\n    office,\n    ...createStructuredSelector({\n      officeId: makeSelectUserOfficeId(),\n      projects: makeSelectProjects(),\n      selectedTaskId: makeSelectSelectedTaskId(),\n      searchedUsers: makeSelectSearchedUsersWithUsers(),\n      formValues: getFormValues(FORM_NAME),\n      selectedTaskCriteria: makeSelectTaskCriteria(),\n      selectedProject: makeSelectProject(),\n      userById: makeSelectUserById(),\n      userIsAtsUser: makeSelectUserIsAtsUser(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>, ownProps: ITaskViewDrawerDetailsEditProps) => {\n  return {\n    searchUser: ({ searchTerm, queries, firmId, officeId, includeAtsUsers }: { searchTerm: string, queries: Map<string, any>, firmId?: number, officeId?: number, includeAtsUsers?: boolean }) => {\n      dispatch(new SearchUsersQuickAction({ searchTerm, queries, firmId, officeId, includeAtsUsers }));\n    },\n    editTask: (task: IMap<Task>) => {\n      dispatch(new EditTaskAction({task}));\n    },\n    closeDrawer: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: ownProps.drawerId,\n        open: false,\n      }));\n    },\n    addEntity: (entityData: TagEntity) => {\n      dispatch(new TagEntityAction(entityData));\n    },\n    deleteEntity: (entityData: TagEntity) => {\n      dispatch(new UnTagEntityAction(entityData));\n    },\n    getUserById: (id: number) => {\n      dispatch(new GetUserByIdAction({ id }));\n    },\n    getOfficeById: (officeId: number) => {\n      dispatch(new GetOfficeByIdAction({ officeId }));\n    },\n    // addCriteria: (taskId: number, criteria: string[]) => {\n    //   dispatch(new AddCriteriaAction({taskId, criteria}));\n    // },\n    // editCriteriaDescription: (taskId: number, criteriaId: number, criteria: string) => {\n    //   dispatch(new EditCriteriaAction({taskId, criteriaId, criteria}));\n    // },\n    deleteCriteria: (taskId: number, criteriaId: number) => {\n      dispatch(new DeleteCriteriaAction({taskId, criteriaId}));\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<ITaskViewDrawerDetailsEditComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: FORM_NAME}),\n  reduxForm({\n    form: FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n  })\n)(TaskViewDrawerDetailsEdit);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  // Typography,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentContentAction } from '../../modules/ApplicationModule/actions';\nimport TaskViewDrawerDetailsTask from '../../components/TaskViewDrawerDetailsTask';\nimport TaskViewDrawerDetailsEdit from '../../components/TaskViewDrawerDetailsEdit';\nimport { makeSelectTask } from '../../modules/TaskModule/selectors';\nimport { Task } from '../../models';\nimport { IMap } from 'ats-utils/src/Interfaces';\n\nexport const DEFAULT_DRAWER_ID = '__TaskViewDrawerDetails__';\n\ninterface ITaskViewDrawerDetailsContentProps {\n  drawerId: string;\n}\n\ninterface ITaskViewDrawerDetailsProps extends ITaskViewDrawerDetailsContentProps {\n  content: string;\n  dispatch: Dispatch<IAction>;\n  task: IMap<Task>;\n  componentProps: {\n    type?: string;\n    typeId?: number; \n  }\n}\n\nexport const CONTENT_EDIT_KEY = '__TaskViewDrawing__';\n\ntype TaskViewDrawerDetailsType = WithTranslation & ITaskViewDrawerDetailsProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass TaskViewDrawerDetails extends React.Component<TaskViewDrawerDetailsType, {}> {\n\n  public handleClick = (contentId?: string) => () => {\n    const {\n      drawerId,\n      dispatch,\n    } = this.props;\n    dispatch(new SetOverlayComponentContentAction({\n      id: drawerId,\n      content: contentId,\n    }));\n  }\n\n  public render() {\n    const {\n      content: _contentString,\n      task,\n      componentProps = {},\n      drawerId,\n    } = this.props;\n\n    const {\n      type,\n      typeId,\n    } = componentProps;\n\n    const content = (() => {\n      switch (_contentString) {\n        case CONTENT_EDIT_KEY: {\n          return <TaskViewDrawerDetailsEdit\n            drawerId={drawerId}\n            task={task}\n            toggleHandle={this.handleClick()}\n            type={type}\n            typeId={typeId}\n          />\n        }\n        default: {\n          return <TaskViewDrawerDetailsTask\n            drawerId={drawerId}\n            task={task}\n            toggleHandle={this.handleClick(CONTENT_EDIT_KEY)}\n            type={type}\n            typeId={typeId}\n          />\n        }\n      }\n    })();\n\n    return <Grid>\n      {\n        content\n      }\n    </Grid>\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  }\n});\n\nconst mapStateToProps = (state, props: ITaskViewDrawerDetailsContentProps) => {\n  const {\n    drawerId,\n  } = props;\n  return createStructuredSelector({\n    content: makeSelectOverlayComponentContent(drawerId),\n    task: makeSelectTask(),\n    componentProps: makeSelectOverlayComponentProp(drawerId),\n  })(state);\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<ITaskViewDrawerDetailsContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(TaskViewDrawerDetails);\n","function deferred() {\n  var def = {};\n  def.promise = new Promise(function (resolve, reject) {\n    def.resolve = resolve;\n    def.reject = reject;\n  });\n  return def;\n}\nfunction arrayOfDeferred(length) {\n  var arr = [];\n\n  for (var i = 0; i < length; i++) {\n    arr.push(deferred());\n  }\n\n  return arr;\n}\n\nexport default deferred;\nexport { arrayOfDeferred };\n","import { CHANNEL_END_TYPE, MULTICAST, MATCH, SAGA_ACTION, CANCEL, SELF_CANCELLATION, TERMINATE, TASK, TASK_CANCEL, IO } from '@redux-saga/symbols';\nexport { CANCEL, SAGA_LOCATION } from '@redux-saga/symbols';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport { string as string$1, array as array$1, stringableFunc, func, symbol as symbol$1, buffer, notUndef, promise, iterator, undef, object, channel as channel$1 } from '@redux-saga/is';\nimport { k as kTrue, e as expanding, c as check, o as once, r as remove, n as none, i as internalErr, T as TAKE, P as PUT, A as ALL, R as RACE, C as CALL, a as CPS, F as FORK, J as JOIN, b as CANCEL$1, S as SELECT, d as ACTION_CHANNEL, f as CANCELLED$1, g as FLUSH, G as GET_CONTEXT, h as SET_CONTEXT, j as getMetaInfo, l as createAllStyleChildCallbacks, m as createEmptyArray, p as assignWithSymbols, q as makeIterator, s as shouldComplete, t as noop, u as flatMap, v as getLocation, w as createSetContextWarning, x as asyncIteratorSymbol, y as shouldCancel, z as shouldTerminate, B as logError, D as wrapSagaDispatch, E as identity } from './io-6de156f3.js';\nexport { H as buffers, I as detach } from './io-6de156f3.js';\nimport { compose } from 'redux';\nimport deferred from '@redux-saga/deferred';\nimport '@redux-saga/delay-p';\n\nvar queue = [];\n/**\n  Variable to hold a counting semaphore\n  - Incrementing adds a lock and puts the scheduler in a `suspended` state (if it's not\n    already suspended)\n  - Decrementing releases a lock. Zero locks puts the scheduler in a `released` state. This\n    triggers flushing the queued tasks.\n**/\n\nvar semaphore = 0;\n/**\n  Executes a task 'atomically'. Tasks scheduled during this execution will be queued\n  and flushed after this task has finished (assuming the scheduler endup in a released\n  state).\n**/\n\nfunction exec(task) {\n  try {\n    suspend();\n    task();\n  } finally {\n    release();\n  }\n}\n/**\n  Executes or queues a task depending on the state of the scheduler (`suspended` or `released`)\n**/\n\n\nfunction asap(task) {\n  queue.push(task);\n\n  if (!semaphore) {\n    suspend();\n    flush();\n  }\n}\n/**\n * Puts the scheduler in a `suspended` state and executes a task immediately.\n */\n\nfunction immediately(task) {\n  try {\n    suspend();\n    return task();\n  } finally {\n    flush();\n  }\n}\n/**\n  Puts the scheduler in a `suspended` state. Scheduled tasks will be queued until the\n  scheduler is released.\n**/\n\nfunction suspend() {\n  semaphore++;\n}\n/**\n  Puts the scheduler in a `released` state.\n**/\n\n\nfunction release() {\n  semaphore--;\n}\n/**\n  Releases the current lock. Executes all queued tasks if the scheduler is in the released state.\n**/\n\n\nfunction flush() {\n  release();\n  var task;\n\n  while (!semaphore && (task = queue.shift()) !== undefined) {\n    exec(task);\n  }\n}\n\nvar array = function array(patterns) {\n  return function (input) {\n    return patterns.some(function (p) {\n      return matcher(p)(input);\n    });\n  };\n};\nvar predicate = function predicate(_predicate) {\n  return function (input) {\n    return _predicate(input);\n  };\n};\nvar string = function string(pattern) {\n  return function (input) {\n    return input.type === String(pattern);\n  };\n};\nvar symbol = function symbol(pattern) {\n  return function (input) {\n    return input.type === pattern;\n  };\n};\nvar wildcard = function wildcard() {\n  return kTrue;\n};\nfunction matcher(pattern) {\n  // prettier-ignore\n  var matcherCreator = pattern === '*' ? wildcard : string$1(pattern) ? string : array$1(pattern) ? array : stringableFunc(pattern) ? string : func(pattern) ? predicate : symbol$1(pattern) ? symbol : null;\n\n  if (matcherCreator === null) {\n    throw new Error(\"invalid pattern: \" + pattern);\n  }\n\n  return matcherCreator(pattern);\n}\n\nvar END = {\n  type: CHANNEL_END_TYPE\n};\nvar isEnd = function isEnd(a) {\n  return a && a.type === CHANNEL_END_TYPE;\n};\nvar CLOSED_CHANNEL_WITH_TAKERS = 'Cannot have a closed channel with pending takers';\nvar INVALID_BUFFER = 'invalid buffer passed to channel factory function';\nvar UNDEFINED_INPUT_ERROR = \"Saga or channel was provided with an undefined action\\nHints:\\n  - check that your Action Creator returns a non-undefined value\\n  - if the Saga was started using runSaga, check that your subscribe source provides the action to its listeners\";\nfunction channel(buffer$1) {\n  if (buffer$1 === void 0) {\n    buffer$1 = expanding();\n  }\n\n  var closed = false;\n  var takers = [];\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(buffer$1, buffer, INVALID_BUFFER);\n  }\n\n  function checkForbiddenStates() {\n    if (closed && takers.length) {\n      throw internalErr(CLOSED_CHANNEL_WITH_TAKERS);\n    }\n\n    if (takers.length && !buffer$1.isEmpty()) {\n      throw internalErr('Cannot have pending takers with non empty buffer');\n    }\n  }\n\n  function put(input) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n      check(input, notUndef, UNDEFINED_INPUT_ERROR);\n    }\n\n    if (closed) {\n      return;\n    }\n\n    if (takers.length === 0) {\n      return buffer$1.put(input);\n    }\n\n    var cb = takers.shift();\n    cb(input);\n  }\n\n  function take(cb) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n      check(cb, func, \"channel.take's callback must be a function\");\n    }\n\n    if (closed && buffer$1.isEmpty()) {\n      cb(END);\n    } else if (!buffer$1.isEmpty()) {\n      cb(buffer$1.take());\n    } else {\n      takers.push(cb);\n\n      cb.cancel = function () {\n        remove(takers, cb);\n      };\n    }\n  }\n\n  function flush(cb) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n      check(cb, func, \"channel.flush' callback must be a function\");\n    }\n\n    if (closed && buffer$1.isEmpty()) {\n      cb(END);\n      return;\n    }\n\n    cb(buffer$1.flush());\n  }\n\n  function close() {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n    }\n\n    if (closed) {\n      return;\n    }\n\n    closed = true;\n    var arr = takers;\n    takers = [];\n\n    for (var i = 0, len = arr.length; i < len; i++) {\n      var taker = arr[i];\n      taker(END);\n    }\n  }\n\n  return {\n    take: take,\n    put: put,\n    flush: flush,\n    close: close\n  };\n}\nfunction eventChannel(subscribe, buffer) {\n  if (buffer === void 0) {\n    buffer = none();\n  }\n\n  var closed = false;\n  var unsubscribe;\n  var chan = channel(buffer);\n\n  var close = function close() {\n    if (closed) {\n      return;\n    }\n\n    closed = true;\n\n    if (func(unsubscribe)) {\n      unsubscribe();\n    }\n\n    chan.close();\n  };\n\n  unsubscribe = subscribe(function (input) {\n    if (isEnd(input)) {\n      close();\n      return;\n    }\n\n    chan.put(input);\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(unsubscribe, func, 'in eventChannel: subscribe should return a function to unsubscribe');\n  }\n\n  unsubscribe = once(unsubscribe);\n\n  if (closed) {\n    unsubscribe();\n  }\n\n  return {\n    take: chan.take,\n    flush: chan.flush,\n    close: close\n  };\n}\nfunction multicastChannel() {\n  var _ref;\n\n  var closed = false;\n  var currentTakers = [];\n  var nextTakers = currentTakers;\n\n  function checkForbiddenStates() {\n    if (closed && nextTakers.length) {\n      throw internalErr(CLOSED_CHANNEL_WITH_TAKERS);\n    }\n  }\n\n  var ensureCanMutateNextTakers = function ensureCanMutateNextTakers() {\n    if (nextTakers !== currentTakers) {\n      return;\n    }\n\n    nextTakers = currentTakers.slice();\n  };\n\n  var close = function close() {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n    }\n\n    closed = true;\n    var takers = currentTakers = nextTakers;\n    nextTakers = [];\n    takers.forEach(function (taker) {\n      taker(END);\n    });\n  };\n\n  return _ref = {}, _ref[MULTICAST] = true, _ref.put = function put(input) {\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n      check(input, notUndef, UNDEFINED_INPUT_ERROR);\n    }\n\n    if (closed) {\n      return;\n    }\n\n    if (isEnd(input)) {\n      close();\n      return;\n    }\n\n    var takers = currentTakers = nextTakers;\n\n    for (var i = 0, len = takers.length; i < len; i++) {\n      var taker = takers[i];\n\n      if (taker[MATCH](input)) {\n        taker.cancel();\n        taker(input);\n      }\n    }\n  }, _ref.take = function take(cb, matcher) {\n    if (matcher === void 0) {\n      matcher = wildcard;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      checkForbiddenStates();\n    }\n\n    if (closed) {\n      cb(END);\n      return;\n    }\n\n    cb[MATCH] = matcher;\n    ensureCanMutateNextTakers();\n    nextTakers.push(cb);\n    cb.cancel = once(function () {\n      ensureCanMutateNextTakers();\n      remove(nextTakers, cb);\n    });\n  }, _ref.close = close, _ref;\n}\nfunction stdChannel() {\n  var chan = multicastChannel();\n  var put = chan.put;\n\n  chan.put = function (input) {\n    if (input[SAGA_ACTION]) {\n      put(input);\n      return;\n    }\n\n    asap(function () {\n      put(input);\n    });\n  };\n\n  return chan;\n}\n\nvar RUNNING = 0;\nvar CANCELLED = 1;\nvar ABORTED = 2;\nvar DONE = 3;\n\nfunction resolvePromise(promise, cb) {\n  var cancelPromise = promise[CANCEL];\n\n  if (func(cancelPromise)) {\n    cb.cancel = cancelPromise;\n  }\n\n  promise.then(cb, function (error) {\n    cb(error, true);\n  });\n}\n\nvar current = 0;\nvar nextSagaId = (function () {\n  return ++current;\n});\n\nvar _effectRunnerMap;\n\nfunction getIteratorMetaInfo(iterator, fn) {\n  if (iterator.isSagaIterator) {\n    return {\n      name: iterator.meta.name\n    };\n  }\n\n  return getMetaInfo(fn);\n}\n\nfunction createTaskIterator(_ref) {\n  var context = _ref.context,\n      fn = _ref.fn,\n      args = _ref.args;\n\n  // catch synchronous failures; see #152 and #441\n  try {\n    var result = fn.apply(context, args); // i.e. a generator function returns an iterator\n\n    if (iterator(result)) {\n      return result;\n    }\n\n    var resolved = false;\n\n    var next = function next(arg) {\n      if (!resolved) {\n        resolved = true; // Only promises returned from fork will be interpreted. See #1573\n\n        return {\n          value: result,\n          done: !promise(result)\n        };\n      } else {\n        return {\n          value: arg,\n          done: true\n        };\n      }\n    };\n\n    return makeIterator(next);\n  } catch (err) {\n    // do not bubble up synchronous failures for detached forks\n    // instead create a failed task. See #152 and #441\n    return makeIterator(function () {\n      throw err;\n    });\n  }\n}\n\nfunction runPutEffect(env, _ref2, cb) {\n  var channel = _ref2.channel,\n      action = _ref2.action,\n      resolve = _ref2.resolve;\n\n  /**\n   Schedule the put in case another saga is holding a lock.\n   The put will be executed atomically. ie nested puts will execute after\n   this put has terminated.\n   **/\n  asap(function () {\n    var result;\n\n    try {\n      result = (channel ? channel.put : env.dispatch)(action);\n    } catch (error) {\n      cb(error, true);\n      return;\n    }\n\n    if (resolve && promise(result)) {\n      resolvePromise(result, cb);\n    } else {\n      cb(result);\n    }\n  }); // Put effects are non cancellables\n}\n\nfunction runTakeEffect(env, _ref3, cb) {\n  var _ref3$channel = _ref3.channel,\n      channel = _ref3$channel === void 0 ? env.channel : _ref3$channel,\n      pattern = _ref3.pattern,\n      maybe = _ref3.maybe;\n\n  var takeCb = function takeCb(input) {\n    if (input instanceof Error) {\n      cb(input, true);\n      return;\n    }\n\n    if (isEnd(input) && !maybe) {\n      cb(TERMINATE);\n      return;\n    }\n\n    cb(input);\n  };\n\n  try {\n    channel.take(takeCb, notUndef(pattern) ? matcher(pattern) : null);\n  } catch (err) {\n    cb(err, true);\n    return;\n  }\n\n  cb.cancel = takeCb.cancel;\n}\n\nfunction runCallEffect(env, _ref4, cb, _ref5) {\n  var context = _ref4.context,\n      fn = _ref4.fn,\n      args = _ref4.args;\n  var task = _ref5.task;\n\n  // catch synchronous failures; see #152\n  try {\n    var result = fn.apply(context, args);\n\n    if (promise(result)) {\n      resolvePromise(result, cb);\n      return;\n    }\n\n    if (iterator(result)) {\n      // resolve iterator\n      proc(env, result, task.context, current, getMetaInfo(fn),\n      /* isRoot */\n      false, cb);\n      return;\n    }\n\n    cb(result);\n  } catch (error) {\n    cb(error, true);\n  }\n}\n\nfunction runCPSEffect(env, _ref6, cb) {\n  var context = _ref6.context,\n      fn = _ref6.fn,\n      args = _ref6.args;\n\n  // CPS (ie node style functions) can define their own cancellation logic\n  // by setting cancel field on the cb\n  // catch synchronous failures; see #152\n  try {\n    var cpsCb = function cpsCb(err, res) {\n      if (undef(err)) {\n        cb(res);\n      } else {\n        cb(err, true);\n      }\n    };\n\n    fn.apply(context, args.concat(cpsCb));\n\n    if (cpsCb.cancel) {\n      cb.cancel = cpsCb.cancel;\n    }\n  } catch (error) {\n    cb(error, true);\n  }\n}\n\nfunction runForkEffect(env, _ref7, cb, _ref8) {\n  var context = _ref7.context,\n      fn = _ref7.fn,\n      args = _ref7.args,\n      detached = _ref7.detached;\n  var parent = _ref8.task;\n  var taskIterator = createTaskIterator({\n    context: context,\n    fn: fn,\n    args: args\n  });\n  var meta = getIteratorMetaInfo(taskIterator, fn);\n  immediately(function () {\n    var child = proc(env, taskIterator, parent.context, current, meta, detached, undefined);\n\n    if (detached) {\n      cb(child);\n    } else {\n      if (child.isRunning()) {\n        parent.queue.addTask(child);\n        cb(child);\n      } else if (child.isAborted()) {\n        parent.queue.abort(child.error());\n      } else {\n        cb(child);\n      }\n    }\n  }); // Fork effects are non cancellables\n}\n\nfunction runJoinEffect(env, taskOrTasks, cb, _ref9) {\n  var task = _ref9.task;\n\n  var joinSingleTask = function joinSingleTask(taskToJoin, cb) {\n    if (taskToJoin.isRunning()) {\n      var joiner = {\n        task: task,\n        cb: cb\n      };\n\n      cb.cancel = function () {\n        if (taskToJoin.isRunning()) remove(taskToJoin.joiners, joiner);\n      };\n\n      taskToJoin.joiners.push(joiner);\n    } else {\n      if (taskToJoin.isAborted()) {\n        cb(taskToJoin.error(), true);\n      } else {\n        cb(taskToJoin.result());\n      }\n    }\n  };\n\n  if (array$1(taskOrTasks)) {\n    if (taskOrTasks.length === 0) {\n      cb([]);\n      return;\n    }\n\n    var childCallbacks = createAllStyleChildCallbacks(taskOrTasks, cb);\n    taskOrTasks.forEach(function (t, i) {\n      joinSingleTask(t, childCallbacks[i]);\n    });\n  } else {\n    joinSingleTask(taskOrTasks, cb);\n  }\n}\n\nfunction cancelSingleTask(taskToCancel) {\n  if (taskToCancel.isRunning()) {\n    taskToCancel.cancel();\n  }\n}\n\nfunction runCancelEffect(env, taskOrTasks, cb, _ref10) {\n  var task = _ref10.task;\n\n  if (taskOrTasks === SELF_CANCELLATION) {\n    cancelSingleTask(task);\n  } else if (array$1(taskOrTasks)) {\n    taskOrTasks.forEach(cancelSingleTask);\n  } else {\n    cancelSingleTask(taskOrTasks);\n  }\n\n  cb(); // cancel effects are non cancellables\n}\n\nfunction runAllEffect(env, effects, cb, _ref11) {\n  var digestEffect = _ref11.digestEffect;\n  var effectId = current;\n  var keys = Object.keys(effects);\n\n  if (keys.length === 0) {\n    cb(array$1(effects) ? [] : {});\n    return;\n  }\n\n  var childCallbacks = createAllStyleChildCallbacks(effects, cb);\n  keys.forEach(function (key) {\n    digestEffect(effects[key], effectId, childCallbacks[key], key);\n  });\n}\n\nfunction runRaceEffect(env, effects, cb, _ref12) {\n  var digestEffect = _ref12.digestEffect;\n  var effectId = current;\n  var keys = Object.keys(effects);\n  var response = array$1(effects) ? createEmptyArray(keys.length) : {};\n  var childCbs = {};\n  var completed = false;\n  keys.forEach(function (key) {\n    var chCbAtKey = function chCbAtKey(res, isErr) {\n      if (completed) {\n        return;\n      }\n\n      if (isErr || shouldComplete(res)) {\n        // Race Auto cancellation\n        cb.cancel();\n        cb(res, isErr);\n      } else {\n        cb.cancel();\n        completed = true;\n        response[key] = res;\n        cb(response);\n      }\n    };\n\n    chCbAtKey.cancel = noop;\n    childCbs[key] = chCbAtKey;\n  });\n\n  cb.cancel = function () {\n    // prevents unnecessary cancellation\n    if (!completed) {\n      completed = true;\n      keys.forEach(function (key) {\n        return childCbs[key].cancel();\n      });\n    }\n  };\n\n  keys.forEach(function (key) {\n    if (completed) {\n      return;\n    }\n\n    digestEffect(effects[key], effectId, childCbs[key], key);\n  });\n}\n\nfunction runSelectEffect(env, _ref13, cb) {\n  var selector = _ref13.selector,\n      args = _ref13.args;\n\n  try {\n    var state = selector.apply(void 0, [env.getState()].concat(args));\n    cb(state);\n  } catch (error) {\n    cb(error, true);\n  }\n}\n\nfunction runChannelEffect(env, _ref14, cb) {\n  var pattern = _ref14.pattern,\n      buffer = _ref14.buffer;\n  var chan = channel(buffer);\n  var match = matcher(pattern);\n\n  var taker = function taker(action) {\n    if (!isEnd(action)) {\n      env.channel.take(taker, match);\n    }\n\n    chan.put(action);\n  };\n\n  var close = chan.close;\n\n  chan.close = function () {\n    taker.cancel();\n    close();\n  };\n\n  env.channel.take(taker, match);\n  cb(chan);\n}\n\nfunction runCancelledEffect(env, data, cb, _ref15) {\n  var task = _ref15.task;\n  cb(task.isCancelled());\n}\n\nfunction runFlushEffect(env, channel, cb) {\n  channel.flush(cb);\n}\n\nfunction runGetContextEffect(env, prop, cb, _ref16) {\n  var task = _ref16.task;\n  cb(task.context[prop]);\n}\n\nfunction runSetContextEffect(env, props, cb, _ref17) {\n  var task = _ref17.task;\n  assignWithSymbols(task.context, props);\n  cb();\n}\n\nvar effectRunnerMap = (_effectRunnerMap = {}, _effectRunnerMap[TAKE] = runTakeEffect, _effectRunnerMap[PUT] = runPutEffect, _effectRunnerMap[ALL] = runAllEffect, _effectRunnerMap[RACE] = runRaceEffect, _effectRunnerMap[CALL] = runCallEffect, _effectRunnerMap[CPS] = runCPSEffect, _effectRunnerMap[FORK] = runForkEffect, _effectRunnerMap[JOIN] = runJoinEffect, _effectRunnerMap[CANCEL$1] = runCancelEffect, _effectRunnerMap[SELECT] = runSelectEffect, _effectRunnerMap[ACTION_CHANNEL] = runChannelEffect, _effectRunnerMap[CANCELLED$1] = runCancelledEffect, _effectRunnerMap[FLUSH] = runFlushEffect, _effectRunnerMap[GET_CONTEXT] = runGetContextEffect, _effectRunnerMap[SET_CONTEXT] = runSetContextEffect, _effectRunnerMap);\n\n/**\n Used to track a parent task and its forks\n In the fork model, forked tasks are attached by default to their parent\n We model this using the concept of Parent task && main Task\n main task is the main flow of the current Generator, the parent tasks is the\n aggregation of the main tasks + all its forked tasks.\n Thus the whole model represents an execution tree with multiple branches (vs the\n linear execution tree in sequential (non parallel) programming)\n\n A parent tasks has the following semantics\n - It completes if all its forks either complete or all cancelled\n - If it's cancelled, all forks are cancelled as well\n - It aborts if any uncaught error bubbles up from forks\n - If it completes, the return value is the one returned by the main task\n **/\n\nfunction forkQueue(mainTask, onAbort, cont) {\n  var tasks = [];\n  var result;\n  var completed = false;\n  addTask(mainTask);\n\n  var getTasks = function getTasks() {\n    return tasks;\n  };\n\n  function abort(err) {\n    onAbort();\n    cancelAll();\n    cont(err, true);\n  }\n\n  function addTask(task) {\n    tasks.push(task);\n\n    task.cont = function (res, isErr) {\n      if (completed) {\n        return;\n      }\n\n      remove(tasks, task);\n      task.cont = noop;\n\n      if (isErr) {\n        abort(res);\n      } else {\n        if (task === mainTask) {\n          result = res;\n        }\n\n        if (!tasks.length) {\n          completed = true;\n          cont(result);\n        }\n      }\n    };\n  }\n\n  function cancelAll() {\n    if (completed) {\n      return;\n    }\n\n    completed = true;\n    tasks.forEach(function (t) {\n      t.cont = noop;\n      t.cancel();\n    });\n    tasks = [];\n  }\n\n  return {\n    addTask: addTask,\n    cancelAll: cancelAll,\n    abort: abort,\n    getTasks: getTasks\n  };\n}\n\n// there can be only a single saga error created at any given moment\n\nfunction formatLocation(fileName, lineNumber) {\n  return fileName + \"?\" + lineNumber;\n}\n\nfunction effectLocationAsString(effect) {\n  var location = getLocation(effect);\n\n  if (location) {\n    var code = location.code,\n        fileName = location.fileName,\n        lineNumber = location.lineNumber;\n    var source = code + \"  \" + formatLocation(fileName, lineNumber);\n    return source;\n  }\n\n  return '';\n}\n\nfunction sagaLocationAsString(sagaMeta) {\n  var name = sagaMeta.name,\n      location = sagaMeta.location;\n\n  if (location) {\n    return name + \"  \" + formatLocation(location.fileName, location.lineNumber);\n  }\n\n  return name;\n}\n\nfunction cancelledTasksAsString(sagaStack) {\n  var cancelledTasks = flatMap(function (i) {\n    return i.cancelledTasks;\n  }, sagaStack);\n\n  if (!cancelledTasks.length) {\n    return '';\n  }\n\n  return ['Tasks cancelled due to error:'].concat(cancelledTasks).join('\\n');\n}\n\nvar crashedEffect = null;\nvar sagaStack = [];\nvar addSagaFrame = function addSagaFrame(frame) {\n  frame.crashedEffect = crashedEffect;\n  sagaStack.push(frame);\n};\nvar clear = function clear() {\n  crashedEffect = null;\n  sagaStack.length = 0;\n}; // this sets crashed effect for the soon-to-be-reported saga frame\n// this slightly streatches the singleton nature of this module into wrong direction\n// as it's even less obvious what's the data flow here, but it is what it is for now\n\nvar setCrashedEffect = function setCrashedEffect(effect) {\n  crashedEffect = effect;\n};\n/**\n  @returns {string}\n\n  @example\n  The above error occurred in task errorInPutSaga {pathToFile}\n  when executing effect put({type: 'REDUCER_ACTION_ERROR_IN_PUT'}) {pathToFile}\n      created by fetchSaga {pathToFile}\n      created by rootSaga {pathToFile}\n*/\n\nvar toString = function toString() {\n  var firstSaga = sagaStack[0],\n      otherSagas = sagaStack.slice(1);\n  var crashedEffectLocation = firstSaga.crashedEffect ? effectLocationAsString(firstSaga.crashedEffect) : null;\n  var errorMessage = \"The above error occurred in task \" + sagaLocationAsString(firstSaga.meta) + (crashedEffectLocation ? \" \\n when executing effect \" + crashedEffectLocation : '');\n  return [errorMessage].concat(otherSagas.map(function (s) {\n    return \"    created by \" + sagaLocationAsString(s.meta);\n  }), [cancelledTasksAsString(sagaStack)]).join('\\n');\n};\n\nfunction newTask(env, mainTask, parentContext, parentEffectId, meta, isRoot, cont) {\n  var _task;\n\n  if (cont === void 0) {\n    cont = noop;\n  }\n\n  var status = RUNNING;\n  var taskResult;\n  var taskError;\n  var deferredEnd = null;\n  var cancelledDueToErrorTasks = [];\n  var context = Object.create(parentContext);\n  var queue = forkQueue(mainTask, function onAbort() {\n    cancelledDueToErrorTasks.push.apply(cancelledDueToErrorTasks, queue.getTasks().map(function (t) {\n      return t.meta.name;\n    }));\n  }, end);\n  /**\n   This may be called by a parent generator to trigger/propagate cancellation\n   cancel all pending tasks (including the main task), then end the current task.\n    Cancellation propagates down to the whole execution tree held by this Parent task\n   It's also propagated to all joiners of this task and their execution tree/joiners\n    Cancellation is noop for terminated/Cancelled tasks tasks\n   **/\n\n  function cancel() {\n    if (status === RUNNING) {\n      // Setting status to CANCELLED does not necessarily mean that the task/iterators are stopped\n      // effects in the iterator's finally block will still be executed\n      status = CANCELLED;\n      queue.cancelAll(); // Ending with a TASK_CANCEL will propagate the Cancellation to all joiners\n\n      end(TASK_CANCEL, false);\n    }\n  }\n\n  function end(result, isErr) {\n    if (!isErr) {\n      // The status here may be RUNNING or CANCELLED\n      // If the status is CANCELLED, then we do not need to change it here\n      if (result === TASK_CANCEL) {\n        status = CANCELLED;\n      } else if (status !== CANCELLED) {\n        status = DONE;\n      }\n\n      taskResult = result;\n      deferredEnd && deferredEnd.resolve(result);\n    } else {\n      status = ABORTED;\n      addSagaFrame({\n        meta: meta,\n        cancelledTasks: cancelledDueToErrorTasks\n      });\n\n      if (task.isRoot) {\n        var sagaStack = toString(); // we've dumped the saga stack to string and are passing it to user's code\n        // we know that it won't be needed anymore and we need to clear it\n\n        clear();\n        env.onError(result, {\n          sagaStack: sagaStack\n        });\n      }\n\n      taskError = result;\n      deferredEnd && deferredEnd.reject(result);\n    }\n\n    task.cont(result, isErr);\n    task.joiners.forEach(function (joiner) {\n      joiner.cb(result, isErr);\n    });\n    task.joiners = null;\n  }\n\n  function setContext(props) {\n    if (process.env.NODE_ENV !== 'production') {\n      check(props, object, createSetContextWarning('task', props));\n    }\n\n    assignWithSymbols(context, props);\n  }\n\n  function toPromise() {\n    if (deferredEnd) {\n      return deferredEnd.promise;\n    }\n\n    deferredEnd = deferred();\n\n    if (status === ABORTED) {\n      deferredEnd.reject(taskError);\n    } else if (status !== RUNNING) {\n      deferredEnd.resolve(taskResult);\n    }\n\n    return deferredEnd.promise;\n  }\n\n  var task = (_task = {}, _task[TASK] = true, _task.id = parentEffectId, _task.meta = meta, _task.isRoot = isRoot, _task.context = context, _task.joiners = [], _task.queue = queue, _task.cancel = cancel, _task.cont = cont, _task.end = end, _task.setContext = setContext, _task.toPromise = toPromise, _task.isRunning = function isRunning() {\n    return status === RUNNING;\n  }, _task.isCancelled = function isCancelled() {\n    return status === CANCELLED || status === RUNNING && mainTask.status === CANCELLED;\n  }, _task.isAborted = function isAborted() {\n    return status === ABORTED;\n  }, _task.result = function result() {\n    return taskResult;\n  }, _task.error = function error() {\n    return taskError;\n  }, _task);\n  return task;\n}\n\nfunction proc(env, iterator$1, parentContext, parentEffectId, meta, isRoot, cont) {\n  if (process.env.NODE_ENV !== 'production' && iterator$1[asyncIteratorSymbol]) {\n    throw new Error(\"redux-saga doesn't support async generators, please use only regular ones\");\n  }\n\n  var finalRunEffect = env.finalizeRunEffect(runEffect);\n  /**\n    Tracks the current effect cancellation\n    Each time the generator progresses. calling runEffect will set a new value\n    on it. It allows propagating cancellation to child effects\n  **/\n\n  next.cancel = noop;\n  /** Creates a main task to track the main flow */\n\n  var mainTask = {\n    meta: meta,\n    cancel: cancelMain,\n    status: RUNNING\n  };\n  /**\n   Creates a new task descriptor for this generator.\n   A task is the aggregation of it's mainTask and all it's forked tasks.\n   **/\n\n  var task = newTask(env, mainTask, parentContext, parentEffectId, meta, isRoot, cont);\n  var executingContext = {\n    task: task,\n    digestEffect: digestEffect\n  };\n  /**\n    cancellation of the main task. We'll simply resume the Generator with a TASK_CANCEL\n  **/\n\n  function cancelMain() {\n    if (mainTask.status === RUNNING) {\n      mainTask.status = CANCELLED;\n      next(TASK_CANCEL);\n    }\n  }\n  /**\n    attaches cancellation logic to this task's continuation\n    this will permit cancellation to propagate down the call chain\n  **/\n\n\n  if (cont) {\n    cont.cancel = task.cancel;\n  } // kicks up the generator\n\n\n  next(); // then return the task descriptor to the caller\n\n  return task;\n  /**\n   * This is the generator driver\n   * It's a recursive async/continuation function which calls itself\n   * until the generator terminates or throws\n   * @param {internal commands(TASK_CANCEL | TERMINATE) | any} arg - value, generator will be resumed with.\n   * @param {boolean} isErr - the flag shows if effect finished with an error\n   *\n   * receives either (command | effect result, false) or (any thrown thing, true)\n   */\n\n  function next(arg, isErr) {\n    try {\n      var result;\n\n      if (isErr) {\n        result = iterator$1.throw(arg); // user handled the error, we can clear bookkept values\n\n        clear();\n      } else if (shouldCancel(arg)) {\n        /**\n          getting TASK_CANCEL automatically cancels the main task\n          We can get this value here\n           - By cancelling the parent task manually\n          - By joining a Cancelled task\n        **/\n        mainTask.status = CANCELLED;\n        /**\n          Cancels the current effect; this will propagate the cancellation down to any called tasks\n        **/\n\n        next.cancel();\n        /**\n          If this Generator has a `return` method then invokes it\n          This will jump to the finally block\n        **/\n\n        result = func(iterator$1.return) ? iterator$1.return(TASK_CANCEL) : {\n          done: true,\n          value: TASK_CANCEL\n        };\n      } else if (shouldTerminate(arg)) {\n        // We get TERMINATE flag, i.e. by taking from a channel that ended using `take` (and not `takem` used to trap End of channels)\n        result = func(iterator$1.return) ? iterator$1.return() : {\n          done: true\n        };\n      } else {\n        result = iterator$1.next(arg);\n      }\n\n      if (!result.done) {\n        digestEffect(result.value, parentEffectId, next);\n      } else {\n        /**\n          This Generator has ended, terminate the main task and notify the fork queue\n        **/\n        if (mainTask.status !== CANCELLED) {\n          mainTask.status = DONE;\n        }\n\n        mainTask.cont(result.value);\n      }\n    } catch (error) {\n      if (mainTask.status === CANCELLED) {\n        throw error;\n      }\n\n      mainTask.status = ABORTED;\n      mainTask.cont(error, true);\n    }\n  }\n\n  function runEffect(effect, effectId, currCb) {\n    /**\n      each effect runner must attach its own logic of cancellation to the provided callback\n      it allows this generator to propagate cancellation downward.\n       ATTENTION! effect runners must setup the cancel logic by setting cb.cancel = [cancelMethod]\n      And the setup must occur before calling the callback\n       This is a sort of inversion of control: called async functions are responsible\n      of completing the flow by calling the provided continuation; while caller functions\n      are responsible for aborting the current flow by calling the attached cancel function\n       Library users can attach their own cancellation logic to promises by defining a\n      promise[CANCEL] method in their returned promises\n      ATTENTION! calling cancel must have no effect on an already completed or cancelled effect\n    **/\n    if (promise(effect)) {\n      resolvePromise(effect, currCb);\n    } else if (iterator(effect)) {\n      // resolve iterator\n      proc(env, effect, task.context, effectId, meta,\n      /* isRoot */\n      false, currCb);\n    } else if (effect && effect[IO]) {\n      var effectRunner = effectRunnerMap[effect.type];\n      effectRunner(env, effect.payload, currCb, executingContext);\n    } else {\n      // anything else returned as is\n      currCb(effect);\n    }\n  }\n\n  function digestEffect(effect, parentEffectId, cb, label) {\n    if (label === void 0) {\n      label = '';\n    }\n\n    var effectId = nextSagaId();\n    env.sagaMonitor && env.sagaMonitor.effectTriggered({\n      effectId: effectId,\n      parentEffectId: parentEffectId,\n      label: label,\n      effect: effect\n    });\n    /**\n      completion callback and cancel callback are mutually exclusive\n      We can't cancel an already completed effect\n      And We can't complete an already cancelled effectId\n    **/\n\n    var effectSettled; // Completion callback passed to the appropriate effect runner\n\n    function currCb(res, isErr) {\n      if (effectSettled) {\n        return;\n      }\n\n      effectSettled = true;\n      cb.cancel = noop; // defensive measure\n\n      if (env.sagaMonitor) {\n        if (isErr) {\n          env.sagaMonitor.effectRejected(effectId, res);\n        } else {\n          env.sagaMonitor.effectResolved(effectId, res);\n        }\n      }\n\n      if (isErr) {\n        setCrashedEffect(effect);\n      }\n\n      cb(res, isErr);\n    } // tracks down the current cancel\n\n\n    currCb.cancel = noop; // setup cancellation logic on the parent cb\n\n    cb.cancel = function () {\n      // prevents cancelling an already completed effect\n      if (effectSettled) {\n        return;\n      }\n\n      effectSettled = true;\n      currCb.cancel(); // propagates cancel downward\n\n      currCb.cancel = noop; // defensive measure\n\n      env.sagaMonitor && env.sagaMonitor.effectCancelled(effectId);\n    };\n\n    finalRunEffect(effect, effectId, currCb);\n  }\n}\n\nvar RUN_SAGA_SIGNATURE = 'runSaga(options, saga, ...args)';\nvar NON_GENERATOR_ERR = RUN_SAGA_SIGNATURE + \": saga argument must be a Generator function!\";\nfunction runSaga(_ref, saga) {\n  var _ref$channel = _ref.channel,\n      channel = _ref$channel === void 0 ? stdChannel() : _ref$channel,\n      dispatch = _ref.dispatch,\n      getState = _ref.getState,\n      _ref$context = _ref.context,\n      context = _ref$context === void 0 ? {} : _ref$context,\n      sagaMonitor = _ref.sagaMonitor,\n      effectMiddlewares = _ref.effectMiddlewares,\n      _ref$onError = _ref.onError,\n      onError = _ref$onError === void 0 ? logError : _ref$onError;\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(saga, func, NON_GENERATOR_ERR);\n  }\n\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  var iterator$1 = saga.apply(void 0, args);\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(iterator$1, iterator, NON_GENERATOR_ERR);\n  }\n\n  var effectId = nextSagaId();\n\n  if (sagaMonitor) {\n    // monitors are expected to have a certain interface, let's fill-in any missing ones\n    sagaMonitor.rootSagaStarted = sagaMonitor.rootSagaStarted || noop;\n    sagaMonitor.effectTriggered = sagaMonitor.effectTriggered || noop;\n    sagaMonitor.effectResolved = sagaMonitor.effectResolved || noop;\n    sagaMonitor.effectRejected = sagaMonitor.effectRejected || noop;\n    sagaMonitor.effectCancelled = sagaMonitor.effectCancelled || noop;\n    sagaMonitor.actionDispatched = sagaMonitor.actionDispatched || noop;\n    sagaMonitor.rootSagaStarted({\n      effectId: effectId,\n      saga: saga,\n      args: args\n    });\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (notUndef(dispatch)) {\n      check(dispatch, func, 'dispatch must be a function');\n    }\n\n    if (notUndef(getState)) {\n      check(getState, func, 'getState must be a function');\n    }\n\n    if (notUndef(effectMiddlewares)) {\n      var MIDDLEWARE_TYPE_ERROR = 'effectMiddlewares must be an array of functions';\n      check(effectMiddlewares, array$1, MIDDLEWARE_TYPE_ERROR);\n      effectMiddlewares.forEach(function (effectMiddleware) {\n        return check(effectMiddleware, func, MIDDLEWARE_TYPE_ERROR);\n      });\n    }\n\n    check(onError, func, 'onError passed to the redux-saga is not a function!');\n  }\n\n  var finalizeRunEffect;\n\n  if (effectMiddlewares) {\n    var middleware = compose.apply(void 0, effectMiddlewares);\n\n    finalizeRunEffect = function finalizeRunEffect(runEffect) {\n      return function (effect, effectId, currCb) {\n        var plainRunEffect = function plainRunEffect(eff) {\n          return runEffect(eff, effectId, currCb);\n        };\n\n        return middleware(plainRunEffect)(effect);\n      };\n    };\n  } else {\n    finalizeRunEffect = identity;\n  }\n\n  var env = {\n    channel: channel,\n    dispatch: wrapSagaDispatch(dispatch),\n    getState: getState,\n    sagaMonitor: sagaMonitor,\n    onError: onError,\n    finalizeRunEffect: finalizeRunEffect\n  };\n  return immediately(function () {\n    var task = proc(env, iterator$1, context, effectId, getMetaInfo(saga),\n    /* isRoot */\n    true, undefined);\n\n    if (sagaMonitor) {\n      sagaMonitor.effectResolved(effectId, task);\n    }\n\n    return task;\n  });\n}\n\nfunction sagaMiddlewareFactory(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$context = _ref.context,\n      context = _ref$context === void 0 ? {} : _ref$context,\n      _ref$channel = _ref.channel,\n      channel = _ref$channel === void 0 ? stdChannel() : _ref$channel,\n      sagaMonitor = _ref.sagaMonitor,\n      options = _objectWithoutPropertiesLoose(_ref, [\"context\", \"channel\", \"sagaMonitor\"]);\n\n  var boundRunSaga;\n\n  if (process.env.NODE_ENV !== 'production') {\n    check(channel, channel$1, 'options.channel passed to the Saga middleware is not a channel');\n  }\n\n  function sagaMiddleware(_ref2) {\n    var getState = _ref2.getState,\n        dispatch = _ref2.dispatch;\n    boundRunSaga = runSaga.bind(null, _extends({}, options, {\n      context: context,\n      channel: channel,\n      dispatch: dispatch,\n      getState: getState,\n      sagaMonitor: sagaMonitor\n    }));\n    return function (next) {\n      return function (action) {\n        if (sagaMonitor && sagaMonitor.actionDispatched) {\n          sagaMonitor.actionDispatched(action);\n        }\n\n        var result = next(action); // hit reducers\n\n        channel.put(action);\n        return result;\n      };\n    };\n  }\n\n  sagaMiddleware.run = function () {\n    if (process.env.NODE_ENV !== 'production' && !boundRunSaga) {\n      throw new Error('Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware');\n    }\n\n    return boundRunSaga.apply(void 0, arguments);\n  };\n\n  sagaMiddleware.setContext = function (props) {\n    if (process.env.NODE_ENV !== 'production') {\n      check(props, object, createSetContextWarning('sagaMiddleware', props));\n    }\n\n    assignWithSymbols(context, props);\n  };\n\n  return sagaMiddleware;\n}\n\nexport default sagaMiddlewareFactory;\nexport { END, channel, eventChannel, isEnd, multicastChannel, runSaga, stdChannel };\n","import createSagaMiddleware__default from '@redux-saga/core';\nexport * from '@redux-saga/core';\n\n\n\nexport default createSagaMiddleware__default;\n","import {useReducer} from 'react';\n\nconst actionTypes = {\n    GO: 'GO'\n};\nconst reducer = (state, action) => {\n    switch (action.type) {\n        case actionTypes.GO: {\n            return {\n                ...state,\n                activeStep: action.payload < 0 ? 0 : action.payload,\n            };\n        }\n        default: {\n            throw new Error(`Unhandled action type : ${action.type}`);\n        }\n    }\n};\n\nfunction useStepper(initialState = { activeStep: 0 }) {\n    const [state, dispatch] = useReducer(reducer, initialState);\n    const goNext = () => dispatch({\n        type: actionTypes.GO,\n        payload: state.activeStep + 1\n    });\n    const goBack = () => dispatch({\n        type: actionTypes.GO,\n        payload: state.activeStep - 1\n    });\n    const goTo = (step: number) => {\n        dispatch({\n            type: actionTypes.GO,\n            payload: step,\n        });\n    };\n    return ({\n       step: state.activeStep as number,\n       goNext,\n       goBack,\n       goTo,\n    });\n}\n\nexport default useStepper;","import React, {useRef} from 'react';\nimport {Button, CircularProgress, Grid, makeStyles, Step, StepContent, StepLabel, Theme, Stepper as MuiStepper, Typography } from '@material-ui/core';\nimport NewMasterModalForm from '../../Forms/NewMasterModalForm';\nimport {List, Map, Set} from 'immutable';\nimport NewProjectBuildingSelectionForm from '../../Forms/NewProjectBuildingSelectionForm';\nimport TemplateSelectionForm from '../../Forms/TemplateSelectionForm';\nimport NewMasterCollaboratorsForm from '../../Forms/NewMasterCollaboratorsForm';\nimport {useTranslation} from 'react-i18next';\nimport useStepper from '../useStepper';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {AMPLITUDE_EVENT} from '../../../constants';\nimport {buildingAmplitudeData} from '../../../modules/ProjectModule/saga';\nimport {useAmplitudeData} from '../../../hoc/withAmplitudeData';\nimport {useFormContext} from '../index';\nimport { useSelector } from 'react-redux';\nimport { makeSelectTemplateTranslationObject } from '../../../modules/AtsModule/selectors';\n\ninterface IProps {\n    isSubmitting?: boolean;\n    onSubmit: (values, wholeTemplateSelected: boolean) => void;\n    filterOutCountryIds?: number[];\n    enabledCountryIds?: number[];\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        width: '90%',\n        margin: '0 auto'\n    },\n    button: {\n        margin: theme.spacing(),\n    },\n    buttons : {\n        marginTop: theme.spacing() * 2,\n    },\n    resetContainer: {\n        padding: theme.spacing() * 3,\n    },\n    circularProgress: {\n        marginLeft: theme.spacing(3.5),\n        width: `calc(1em + ${theme.typography.button.fontSize}) !important`,\n        height: `calc(1em + ${theme.typography.button.fontSize}) !important`\n    }\n}));\n\n// tslint:disable-next-line:no-empty\nconst noop = () => {};\nconst Stepper: React.FC<IProps> = ({\n    isSubmitting= false,\n    onSubmit = noop,\n    filterOutCountryIds,\n    enabledCountryIds,\n}) => {\n    const { formValues, setFormValues, clearFormValues } = useFormContext();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const templateTranslationObject = useSelector(makeSelectTemplateTranslationObject());\n    const { goBack, goNext, goTo, step } = useStepper();\n    const amplitudeData = useAmplitudeData();\n    const syncData = (values: Map<string, any>) => {\n        const mergedValues = formValues.merge(values);\n        setFormValues(mergedValues);\n        return mergedValues;\n    };\n    const handleSubmit = (callback) => (values: Map<string, any>) => {\n       const newData = syncData(values);\n       callback?.(newData);\n    };\n    const _onSubmit = async (values?: Map<string, any>) => {\n        try {\n            await onSubmit(values, wholeTemplateSelected.current);\n            clearFormValues();\n            // // for Amplitude tracking\n            const country = values?.getIn(['location', 'country', 'value']);\n            const province = values?.getIn(['location', 'province', 'value']) ?? '-';\n            const city = values?.getIn(['location', 'city', 'value']) ?? '-';\n            const buildingClasses = values?.getIn(['building', 'buildingClasses']);\n            const buildingClassesString = buildingClasses.size === 0 ? '-' : buildingClasses.map( x => x.get('value')).join();\n            const buildingTypes = buildingClasses.reduce((acc, buildingClass) => {\n                const types = buildingClass.get('buildingTypes').map((buildingType) => {\n                    return buildingType.get('value');\n                });\n                return acc.push(types).flatten(Infinity);\n            },List());\n            const buildingTypesString = buildingTypes.size === 0 ? '-' : buildingTypes.join();\n\n            amplitude.logEvent(AMPLITUDE_EVENT.projectCreated,\n                amplitudeData({\n                    projectName: name,\n                    projectType : 'Master',\n                    country,\n                    province,\n                    city,\n                    bidDate: '-',\n                    area: '-',\n                    buildingClassesCount: `${buildingClasses.size}`,\n                    buildingClasses: buildingClassesString,\n                    buildingTypesCount: `${buildingTypes.size}`,\n                    buildingTypes: buildingTypesString,\n                    ...buildingAmplitudeData(buildingClasses).toJS()\n                }));\n            // tslint:disable-next-line:no-empty\n        } catch (error) {\n\n        }\n    };\n    const wholeTemplateSelected = useRef(false);\n    const updateWholeTemplateSelected = (allSelected: boolean) => {\n        wholeTemplateSelected.current = allSelected;\n    };\n    return (\n        <div className={classes.root}>\n            <MuiStepper activeStep={step} orientation='vertical' >\n                <Step key={0}>\n                    <StepLabel>\n                        <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterFromTemplateSteps.step${0}`)}</Typography>\n                    </StepLabel>\n                    <StepContent>\n                        <Grid container={true}>\n                            <Grid item={true} xs={12}>\n                                <NewMasterModalForm\n                                    variantSet={Set()}\n                                    onSubmit={handleSubmit(goNext)}\n                                    filterOutCountryIds={filterOutCountryIds}\n                                    enabledCountryIds={enabledCountryIds}\n                                    // data={formValues as IMap<Project>} // TODO: Common, someone please refactor NewMasterModalForm, it doesn't take initial value correctly\n                                >\n                                    <Button\n                                        variant='contained'\n                                        color='primary'\n                                        type='submit'\n                                        className={classes.button}\n                                    >\n                                        {t('formButtons.next')}\n                                    </Button>\n                                </NewMasterModalForm>\n                            </Grid>\n                        </Grid>\n                    </StepContent>\n                </Step>\n                <Step key={1}>\n                    <StepLabel>\n                        <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterFromTemplateSteps.step${1}`)}</Typography>\n                    </StepLabel>\n                    <StepContent>\n                        <Grid container={true}>\n                            <Grid item={true} xs={12}>\n                                <NewProjectBuildingSelectionForm\n                                    onSubmit={handleSubmit(goNext)}\n                                    variantSet={Set()}\n                                    isOptional={true}\n                                    // data={formValues as IMap<Project>} // TODO: can't pass data as initial value because there is bug when isOptional = true\n                                >\n                                    <Grid\n                                        className={classes.buttons}\n                                    >\n                                        <Button\n                                            color='primary'\n                                            onClick={goBack}\n                                            className={classes.button}\n                                        >\n                                            {t('formButtons.back')}\n                                        </Button>\n                                        <Button\n                                            variant='contained'\n                                            color='primary'\n                                            type='submit'\n                                            className={classes.button}\n                                        >\n                                            {t('formButtons.next')}\n                                        </Button>\n                                    </Grid>\n                                </NewProjectBuildingSelectionForm>\n                            </Grid>\n                        </Grid>\n                    </StepContent>\n                </Step>\n                <Step key={2}>\n                    <StepLabel>\n                        <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterFromTemplateSteps.step${2}`, templateTranslationObject)}</Typography>\n                    </StepLabel>\n                    <StepContent>\n                        <Grid container={true}>\n                            <Grid item={true} xs={12}>\n                                <TemplateSelectionForm\n                                    countryId={formValues.getIn(['location', 'country', 'id'])}\n                                    provinceId={formValues.getIn(['location', 'province', 'id'])}\n                                    buildings={formValues.get('building')}\n                                    onSubmit={handleSubmit(goNext)}\n                                    updateWholeTemplateSelected={updateWholeTemplateSelected}\n                                >\n                                    <Button\n                                        color='primary'\n                                        onClick={goBack}\n                                        className={classes.button}\n                                    >\n                                        {t('formButtons.back')}\n                                    </Button>\n                                    <Button\n                                        variant='contained'\n                                        color='primary'\n                                        type='submit'\n                                        className={classes.button}\n                                    >\n                                        {t('formButtons.next')}\n                                    </Button>\n                                </TemplateSelectionForm>\n\n                            </Grid>\n                        </Grid>\n                    </StepContent>\n                </Step>\n                <Step key={3}>\n                    <StepLabel>\n                        <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterFromTemplateSteps.step${3}`)}</Typography>\n                    </StepLabel>\n                    <StepContent>\n                        <Grid container={true}>\n                            <Grid item={true} xs={12}>\n                                <NewMasterCollaboratorsForm\n                                    onChange={(values) => syncData(values)}\n                                    formValues={formValues}\n                                    onSubmit={handleSubmit(_onSubmit)}\n                                >\n                                    <Grid container={true} alignItems='center'>\n                                        <Button\n                                            color='primary'\n                                            onClick={goBack}\n                                            disabled={isSubmitting}\n                                            className={classes.button}\n                                        >\n                                            {t('formButtons.back')}\n                                        </Button>\n                                        <Button\n                                            variant='contained'\n                                            color='primary'\n                                            type='submit'\n                                            disabled={isSubmitting}\n                                            className={classes.button}\n                                        >\n                                            {t('formButtons.finish')}\n                                        </Button>\n                                        {isSubmitting && <CircularProgress color='primary' className={classes.circularProgress} />}\n                                    </Grid>\n                                </NewMasterCollaboratorsForm>\n                            </Grid>\n                        </Grid>\n                    </StepContent>\n                </Step>\n            </MuiStepper>\n        </div>\n    );\n};\n\nexport default Stepper;","import React, {useContext, useMemo, useReducer} from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n    AppBar,\n    Dialog,\n    Grid,\n    IconButton,\n    Slide,\n    Theme,\n    Toolbar,\n    Typography,\n    useTheme\n} from '@material-ui/core/';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {AtsSvgMaster} from '../../components/AtsSvg';\nimport DeleteModalDialog from '../../components/DeleteModalDialog';\nimport {makeSelectConfigAtsSvgProps, makeSelectConfigUiOverridesAppBarColor, makeSelectIsAtsSpecTool} from '../../modules/AtsModule/selectors';\nimport {useSelector} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport {TransitionProps} from '@material-ui/core/transitions/transition';\nimport Stepper from './Stepper';\nimport {fromJS} from 'immutable';\nimport useToggle from '../../hooks/useToggle';\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n    return <Slide direction='up' ref={ref} {...props} />;\n});\ninterface IProps {\n    open: boolean;\n    onClose: () => void;\n    onSubmit: (values, wholeTemplateSelected: boolean) => Promise<unknown>;\n    filterOutCountryIds?: number[];\n    enabledCountryIds?: number[];\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    appBar: {\n        position: 'relative',\n    },\n    subtitle: {\n        flex: 1,\n            color: theme.palette.common.white\n    },\n    title: {\n        flex: 1\n    },\n    icon: {\n        margin: theme.spacing() * 2,\n            fontSize: theme.spacing() * 6,\n            width: 72,\n            height: 72\n    },\n    titleContainer: {\n        margin: `${theme.spacing() * 2.5}px 0`\n    },\n    iconContainer: {\n        margin: `0 ${theme.spacing() * 2.5}px 0 0`\n    }\n}));\n\nconst isAtsSpecToolSelector = makeSelectIsAtsSpecTool();\nconst configAtsSvgPropsSelector = makeSelectConfigAtsSvgProps();\nconst INITIAL_FORM_VALUES = fromJS({});\nconst initialState = {\n    isSubmitting: false,\n    formValues: INITIAL_FORM_VALUES\n};\nexport const actionTypes = {\n    SUBMIT: 'SUBMIT',\n    SUBMIT_SUCCEED: 'SUBMIT_SUCCEED',\n    SUBMIT_FAILED: 'SUBMIT_FAILED',\n    CLEAR_FORM_VALUES: 'CLEAR_FORM_VALUES',\n    SET_FORM_VALUES: 'SET_FORM_VALUES',\n};\n\nconst CONTEXT_DEFAULT_VALUE = undefined;\nconst FormContext = React.createContext(CONTEXT_DEFAULT_VALUE);\nexport const useFormContext = () => {\n    const context = useContext(FormContext);\n    if (context === CONTEXT_DEFAULT_VALUE) {\n        throw new Error('You used context outside a Context.Provider');\n    }\n    return context;\n};\nconst reducer = (state, action) => {\n    switch (action.type) {\n        case actionTypes.SUBMIT: {\n            return {\n                ...state,\n                isSubmitting: true\n            };\n        }\n        case actionTypes.SUBMIT_SUCCEED:\n        case actionTypes.SUBMIT_FAILED: {\n            return {\n                ...state,\n                isSubmitting: false\n            };\n        }\n        case actionTypes.SET_FORM_VALUES: {\n            return {\n                ...state,\n                formValues: action.payload\n            };\n        }\n        case actionTypes.CLEAR_FORM_VALUES: {\n            return {\n                ...state,\n                formValues: INITIAL_FORM_VALUES\n            };\n        }\n        default: {\n            throw new Error(`Unhandled action type : ${action.type}`);\n        }\n    }\n};\nconst CreateNewMasterFromTemplateModal: React.FC<IProps> = ({\n    open,\n    onClose, // allow parent to close modal\n    onSubmit,\n    filterOutCountryIds,\n    enabledCountryIds,\n}) => {\n    const [state, dispatch] = useReducer(reducer, initialState);\n    const { on, turnOn, turnOff } = useToggle(false);\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const configAtsSvgProps = useSelector(configAtsSvgPropsSelector);\n    const appBarColor = useSelector(makeSelectConfigUiOverridesAppBarColor());\n    const isAtsSpecTool = useSelector(isAtsSpecToolSelector);\n    const atsSvgColor = isAtsSpecTool ? {\n        backgroundColor: theme.palette.secondary[200],\n        shadowColor: theme.palette.secondary.main\n    } : {\n        backgroundColor: theme.palette.primary[200],\n        shadowColor: theme.palette.primary.main\n    };\n    const openDiscardModal = () => {\n        turnOn();\n    };\n    const closeDiscardModal = () => {\n        turnOff();\n    };\n    const handleSubmit = async (values, wholeTemplateSelected) => {\n        dispatch({\n            type: actionTypes.SUBMIT,\n        });\n        try {\n            await onSubmit(values, wholeTemplateSelected);\n            dispatch({\n                type: actionTypes.SUBMIT_SUCCEED,\n            });\n        } catch (error) {\n            dispatch({\n                type: actionTypes.SUBMIT_FAILED\n            });\n        }\n    };\n    const contextValue = useMemo(() => ({\n        formValues: state.formValues,\n        setFormValues: (payload) => {\n            dispatch({\n                type: actionTypes.SET_FORM_VALUES,\n                payload\n            });\n        },\n        clearFormValues: (payload) => {\n            dispatch({\n                type: actionTypes.CLEAR_FORM_VALUES,\n            });\n        }\n    }), [state.formValues]);\n    return (\n        <FormContext.Provider value={contextValue}>\n            <div>\n                <Dialog\n                    fullScreen={true}\n                    open={open}\n                    onClose={closeDiscardModal}\n                    TransitionComponent={Transition}\n                >\n                    <AppBar className={classes.appBar} color={appBarColor ? appBarColor : 'primary'}>\n                        <Toolbar>\n                            <IconButton\n                                color='inherit'\n                                onClick={openDiscardModal}\n                                aria-label='Close'\n                                disabled={state.isSubmitting}\n                            >\n                                <CloseIcon />\n                            </IconButton>\n                            <Typography variant='h6' className={classes.subtitle}>\n                                {t('createNewMasterProject.Title')}\n                            </Typography>\n                        </Toolbar>\n                    </AppBar>\n                    <Grid\n                        container={true}\n                        justify='center'\n                        alignItems='center'\n                        className={classes.titleContainer}\n                    >\n                        <Grid item={true} className={classes.iconContainer}>\n                            <AtsSvgMaster\n                                width='72'\n                                height='72'\n                                color={atsSvgColor}\n                                {...configAtsSvgProps}\n                            />\n                        </Grid>\n                        <Grid item={true}>\n                            <Typography variant='h4' className={classes.title}>\n                                {t('createNewMasterProject.Title')}\n                            </Typography>\n                        </Grid>\n                    </Grid>\n                    <Stepper isSubmitting={state.isSubmitting} onSubmit={handleSubmit} filterOutCountryIds={filterOutCountryIds} enabledCountryIds={enabledCountryIds} />\n                </Dialog>\n                <DeleteModalDialog\n                    open={on}\n                    contentText={'Discard unsaved changes?'}\n                    dialogProps={{\n                        maxWidth: 'xs',\n                        fullWidth: true\n                    }}\n                    buttonOk='Discard'\n                    toggleDeleteModal={closeDiscardModal}\n                    handleDelete={() => {\n                        closeDiscardModal();\n                        onClose();\n                    }}\n                    withLoading={false}\n                />\n            </div>\n        </FormContext.Provider>\n    );\n};\n\nexport default CreateNewMasterFromTemplateModal;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '../styles/makeStyles';\nimport { exactProp } from '@material-ui/utils';\nvar useStyles = makeStyles(function (theme) {\n  return {\n    '@global': {\n      html: {\n        WebkitFontSmoothing: 'antialiased',\n        // Antialiasing.\n        MozOsxFontSmoothing: 'grayscale',\n        // Antialiasing.\n        // Change from `box-sizing: content-box` so that `width`\n        // is not affected by `padding` or `border`.\n        boxSizing: 'border-box'\n      },\n      '*, *::before, *::after': {\n        boxSizing: 'inherit'\n      },\n      'strong, b': {\n        fontWeight: 'bolder'\n      },\n      body: _extends({\n        margin: 0,\n        // Remove the margin in all browsers.\n        color: theme.palette.text.primary\n      }, theme.typography.body2, {\n        backgroundColor: theme.palette.background.default,\n        '@media print': {\n          // Save printer ink.\n          backgroundColor: theme.palette.common.white\n        },\n        // Add support for document.body.requestFullScreen().\n        // Other elements, if background transparent, are not supported.\n        '&::backdrop': {\n          backgroundColor: theme.palette.background.default\n        }\n      })\n    }\n  };\n}, {\n  name: 'MuiCssBaseline'\n});\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n */\n\nfunction CssBaseline(props) {\n  var _props$children = props.children,\n      children = _props$children === void 0 ? null : _props$children;\n  useStyles();\n  return React.createElement(React.Fragment, null, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? CssBaseline.propTypes = {\n  /**\n   * You can wrap a node.\n   */\n  children: PropTypes.node\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  CssBaseline['propTypes' + ''] = exactProp(CssBaseline.propTypes);\n}\n\nexport default CssBaseline;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  CssBaseline,\n  Drawer,\n} from '@material-ui/core';\nimport {\n  StyleRules, StyledComponentProps\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  makeSelectOverlayComponent\n} from '../../modules/ApplicationModule/selectors';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { DRAWER_EXPANDED_EVENT, getDrawerExpanded } from '../../utils/drawerExpanded';\n\ninterface IControlledDrawerComponentProps extends StyledComponentProps<keyof ReturnType<typeof styles>> {\n  localKey: string;\n  menuComponent: React.ReactNode;\n  drawerWidth?: number;\n  hideExpandButton?: boolean;\n  zIndex?: number;\n}\n\ninterface IControlledDrawerProps extends IControlledDrawerComponentProps {\n  open: boolean;\n  dispatch: React.Dispatch<IAction>;\n}\n\n\ninterface IControlledDrawerState {\n  expanded: boolean;\n}\n\ntype ControlledDrawerType = WithTranslation & IControlledDrawerProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass ControlledDrawer extends React.Component<ControlledDrawerType, IControlledDrawerState> {\n\n  public state: IControlledDrawerState = {\n    expanded: !this.props.hideExpandButton && getDrawerExpanded(),\n  };\n\n  public componentDidMount(): void {\n    window.addEventListener(DRAWER_EXPANDED_EVENT, this.syncExpanded);\n    window.addEventListener('storage', this.syncExpanded);\n  }\n\n  public componentWillUnmount(): void {\n    const {\n      dispatch,\n      localKey,\n      open\n    } = this.props;\n    if (localKey && open) {\n      dispatch(new ToggleOverlayComponentAction({\n        id: localKey,\n        open: false\n      }));\n    }\n    window.removeEventListener(DRAWER_EXPANDED_EVENT, this.syncExpanded);\n    window.removeEventListener('storage', this.syncExpanded);\n  }\n\n  private syncExpanded = (): void => {\n    const expanded = !this.props.hideExpandButton && getDrawerExpanded();\n    if (expanded !== this.state.expanded) {\n      this.setState({ expanded });\n    }\n  };\n\n  public render() {\n    const {\n      classes,\n      open,\n      menuComponent,\n      drawerWidth,\n      hideExpandButton,\n    } = this.props;\n\n    const baseWidth = drawerWidth != undefined ? drawerWidth : DRAWER_WIDTH;\n    // if hideExpandButton is true, then the drawer should not be expandable, so we use baseWidth only. Otherwise, if expanded, we double the width.\n    const width = (this.state.expanded && !hideExpandButton) ? baseWidth * 2 : baseWidth;\n\n    return (\n      <div className={classes.root}>\n          <CssBaseline />\n          <Drawer\n            className={classes.drawer}\n            style={{ width: open ? width : 0 }}\n            variant='persistent'\n            anchor='right'\n            open={open}\n            classes={{\n              paper: classes.drawerPaper,\n            }}\n            PaperProps={{\n              style: {\n                zIndex: this.props.zIndex || 1200,\n                width,\n              }\n            }}\n          >\n            {\n              open\n              ? menuComponent\n              : null\n            }\n          </Drawer>\n        </div>\n    );\n  }\n}\n\n\nexport const DRAWER_WIDTH = 300;\n\nconst styles = (theme: Theme): StyleRules => {\n  // Symmetric ease over a gentle duration so expanding/collapsing the width\n  // glides rather than snapping. Shared so the drawer root and its paper move\n  // in lockstep.\n  const widthTransition = theme.transitions.create('width', {\n    easing: theme.transitions.easing.easeInOut,\n    duration: 400,\n  });\n\n  // The persistent Drawer wraps its paper in a <Slide>, which writes an inline\n  // `transition: transform ...` onto the paper node while it's open. Inline\n  // styles beat class rules, so a class-based width transition on the paper is\n  // ignored and the resize snaps. Re-declaring the transition with `!important`\n  // wins back control; `transform` is kept in the list (matching Slide's\n  // easing/duration) so the open/close slide still animates.\n  const paperTransition = `${widthTransition}, ${theme.transitions.create('transform', {\n    easing: theme.transitions.easing.easeOut,\n    duration: theme.transitions.duration.enteringScreen,\n  })} !important`;\n\n  return {\n    root: {\n      display: 'flex',\n      flexGrow: 1,\n    },\n    drawer: {\n      flexShrink: 0,\n      transition: widthTransition,\n    },\n    drawerPaper: {\n      borderLeft: 'none',\n      boxShadow: [theme.shadows[12]].join(','),\n      transition: paperTransition,\n    },\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\n\nconst makeMapStateToProps = () => (state, { localKey }) => ({\n  open: makeSelectOverlayComponent(localKey)(state)\n})\n\n\nexport default compose<React.ComponentClass<IControlledDrawerComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps),\n)(ControlledDrawer);\n","import * as React from 'react';\nimport { Grid, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, TablePagination, makeStyles, Theme, createStyles, useTheme, Tabs, Tab, Menu, MenuItem, IconButton, Tooltip, Typography } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { List, OrderedSet, Map, fromJS } from 'immutable';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { connect } from 'react-redux';\nimport { SetAttributeDialogStateAction, SetOptionDialogStateAction } from '../../../../modules/ApplicationModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport { getFormValues } from 'redux-form/immutable';\nimport { Attribute } from '../../../../models';\nimport { makeSelectMandatoryAttributes, makeSelectRecommendedAttributes } from '../../../../modules/PimModule/selectors';\nimport RecommendedAttribute from '../../../../models/RecommendedAttribute';\nimport NoAttributesFound from '../NoAttributesFound';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { makeSelectCategoryToAttributeWhitelistMap } from '../../../../modules/ProductModule/selectors';\nimport RecommendedRows from './RecommendedRows';\nimport { AtsSvgEmptyFeaturesOptions } from '../../../../components/AtsSvg';\nimport MandatoryRows from './MandatoryRows';\nimport { IAttributeWithOptionValues } from '../../../ProductConfiguratorPage/OptionsWidget/Options';\nimport DoneAllIcon from '@material-ui/icons/DoneAll';\nimport { SkipAllAttributesAction } from '../../../../modules/PimModule/actions';\n\nexport enum SeriesType {\n  BASIC = 'BASIC',\n  ADVANCED = 'ADVANCED',\n}\n\ninterface IUnlistedAttributesComponentProps {\n  formName: string;\n  seriesType: SeriesType;\n}\n\ninterface IUnlistedAttributesProps extends IUnlistedAttributesComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n  recommendedAttributes: List<IMap<RecommendedAttribute>>;\n  mandatoryAttributes: List<IMap<RecommendedAttribute>>;\n  categoryToAttributeWhiteListMap: Map<number, OrderedSet<string>>;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  title: {\n    padding: theme.spacing(2, 0, 1),\n  },\n  pagination: {\n    border: 'none',\n  },\n  toolbar: {\n    paddingLeft: '0px'\n  },\n  noWrap: {\n    whiteSpace: 'nowrap',\n  },\n  grey: {\n    color: theme.palette.grey[600],\n  },\n  skipAllButton: {\n    position: 'absolute',\n    top: '50%',\n    transform: 'translateY(-50%)',\n  }\n}));\n\nexport const ROWS_PER_PAGE = 10;\n\nconst UnlistedAttributes: React.FC<IUnlistedAttributesProps & WithTranslation> = (props): JSX.Element => {\n  const {\n    dispatch,\n    seriesType,\n    formValues,\n    recommendedAttributes,\n    mandatoryAttributes,\n    // categoryToAttributeWhiteListMap,\n    t,\n  } = props;\n\n  const theme = useTheme();\n  const classes = useStyles();\n\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [menuContent, setMenuContent] = React.useState([]);\n  const [page, setPage] = React.useState(0);\n  const handleChangePage = (event: unknown, newPage: number) => setPage(newPage);\n\n  const [tabIndexValue, setTabIndexValue] = React.useState(0);\n  const handleSetTabs = (event, newValue) => {\n    setTabIndexValue(newValue);\n    setPage(0);\n  };\n\n  // const formCategoryId = formValues && formValues.getIn(['categoryName', 'id']);\n\n  const formAttributes: Map<string, IMap<Attribute>> = formValues && formValues.get('attributes') || Map();\n  const filteredFormAttributes = formAttributes\n    .map((attr) => {\n      const values = attr.get('values');\n      const validValues = values.filter((value) => value.get('status') !== 'deleted');\n      return attr.set('values', validValues);\n    })\n    .filter((attr) => attr.get('values').count());\n\n  const formAttributesOptions = formValues && formValues.get('attributeOptions') || Map();\n  const filteredFormAttributesOptions = formAttributesOptions\n    .map((attr) => {\n      const values = attr.get('values');\n      const validValues = values.filter((value) => value.get('status') !== 'deleted');\n      return attr.set('values', validValues);\n    })\n    .filter((attr) => attr.get('values').count());\n\n  // anytime the brand or category changes in SeriesInfo, it calls searchRecommendedAttributes\n  // Features comp displays the recommendedAttributes response\n  // if recommended attribute already in series, don't show\n  const unlistedAttributes = tabIndexValue === 0 ? mandatoryAttributes : recommendedAttributes;\n  const filteredUnlistedAttributes = unlistedAttributes\n  ?.filter((unlistedAttribute) => {\n    const unlistedAttrKey = unlistedAttribute.get('attributeKey');\n    return !filteredFormAttributes.has(unlistedAttrKey) && !filteredFormAttributesOptions.has(unlistedAttrKey);\n  }) || List<IMap<RecommendedAttribute>>();\n\n  const initialSlicedUnlistedAttributes = tabIndexValue === 0 ? filteredUnlistedAttributes : filteredUnlistedAttributes?.slice(0, 20);\n\n  const hasUnskippedAttributes = filteredUnlistedAttributes.some(attribute => !attribute.get('skip'));\n\n  // const formFeatures = filteredFormAttributes.filter(attribute => attribute.get('isAttribute'));\n  // const attributeOrder = categoryToAttributeWhiteListMap && categoryToAttributeWhiteListMap.get(formCategoryId) || OrderedSet();\n\n  // const getSortedFeatures = () => {\n  //   if (attributeOrder.size === 0) {\n  //     return formFeatures;\n  //   }\n\n  //   const sortableMap = attributeOrder.reduce((acc, val) => {\n  //     const found = formFeatures.findEntry(attr => attr.getIn(['values', 0, 'key']) === val);\n  //     if (found) {\n  //       const [key, value] = found;\n  //       return acc.set(key, value);\n  //     }\n  //     return acc;\n  //   }, OrderedMap()) as OrderedMap<string, IMap<Attribute>>;\n\n  //   const unsortableMap = formFeatures && formFeatures.filter((attr, key) => {\n  //       return !attributeOrder.includes(attr.getIn(['values', 0, 'key']));\n  //   }).toOrderedMap();\n\n  //   const sorted = sortableMap && sortableMap.mergeDeep(unsortableMap);\n  //   return sorted;\n  // };\n\n  // const slicedSortedFeatures = getSortedFeatures().entrySeq()\n  // .slice(page * ROWS_PER_PAGE, page * ROWS_PER_PAGE + ROWS_PER_PAGE);\n\n  const paginatedUnlistedAttributes = initialSlicedUnlistedAttributes.slice(page * ROWS_PER_PAGE, page * ROWS_PER_PAGE + ROWS_PER_PAGE);\n  const paginationSize = initialSlicedUnlistedAttributes.size;\n\n  const openAttributeDialog = (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => {\n    dispatch(new SetAttributeDialogStateAction(fromJS({\n      open: true,\n      ...(attribute && { attribute }),\n    })));\n  };\n\n  const openOptionsDialog = (attribute?: IMap<Attribute> | IMap<IAttributeWithOptionValues>) => {\n    if (seriesType === SeriesType.BASIC) {\n      dispatch(new SetOptionDialogStateAction(fromJS({\n        open: true,\n        attribute: {\n          id: attribute.get('attributeId'),\n          key: attribute?.get('attributeKey'),\n          name: attribute?.get('name'),\n          display: attribute.get('display'),\n        },\n      })));\n    } else {\n      dispatch(new SetOptionDialogStateAction(fromJS({\n        open: true,\n        ...(attribute && { attribute }),\n      })));\n    }\n  };\n\n  const handleSkipAllAttributes = () => {\n    dispatch(new SkipAllAttributesAction());\n  };\n\n  return (\n    <Grid item={true} xs={12}>\n      <Grid style={{width: '100%'}}>\n        <Tabs\n          variant='fullWidth'\n          value={tabIndexValue}\n          onChange={handleSetTabs}\n          aria-label='Tabs for option combinations'\n          indicatorColor='primary'\n          textColor='primary'\n          >\n          <Tab label={t('pimUnlistedAttributesWidget.mandatory')} />\n          <Tab label={t('pimUnlistedAttributesWidget.recommended')} />\n        </Tabs>\n      </Grid>\n      {\n        (filteredUnlistedAttributes.size === 0)\n        ? <NoAttributesFound\n            SvgElement={<AtsSvgEmptyFeaturesOptions width='95' height='95' color={theme.palette.secondary[300]} shadowColor={theme.palette.secondary.main}/>}\n            title={t('pimUnlistedAttributesWidget.noAttributes')}\n          />\n        : (\n          <>\n            <TableContainer>\n              <Table\n                aria-label='unlisted attributes table'\n              >\n                <TableHead>\n                  <TableRow>\n                    { tabIndexValue === 1 && <TableCell /> }\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.attribute')}</TableCell>\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.key')}</TableCell>\n                    <TableCell className={classnames(classes.grey, classes.noWrap)} align='center' style={{ position: 'relative' }}>\n                      <Typography variant='body2' style={{ marginLeft: 8, marginRight: 8, display: 'inline-block' }}>\n                        {t('formButtons.actions')}\n                      </Typography>\n                      {\n                        (tabIndexValue === 0 && hasUnskippedAttributes) && (\n                          <Tooltip title={t('pimUnlistedAttributesWidget.skipAllAttributes')}>\n                            <IconButton\n                              size='small'\n                              onClick={handleSkipAllAttributes}\n                              className={classes.skipAllButton}\n                            >\n                              <DoneAllIcon />\n                            </IconButton>\n                          </Tooltip>\n                        )\n                      }\n                    </TableCell>\n                  </TableRow>\n                </TableHead>\n                <TableBody>\n                  {tabIndexValue === 0\n                    ? <MandatoryRows\n                        filteredMandatoryAttributes={paginatedUnlistedAttributes}\n                        openAttributeDialog={openAttributeDialog}\n                        openOptionsDialog={openOptionsDialog}\n                        setAnchorEl={setAnchorEl}\n                        setMenuContent={setMenuContent}\n                      />\n                    : <RecommendedRows\n                        filteredRecommendedAttributes={paginatedUnlistedAttributes}\n                        openAttributeDialog={openAttributeDialog}\n                        openOptionsDialog={openOptionsDialog}\n                        setAnchorEl={setAnchorEl}\n                        setMenuContent={setMenuContent}\n                      />\n                  }\n                </TableBody>\n              </Table>\n            </TableContainer>\n            <table>\n              <tbody>\n                <tr>\n                  <TablePagination\n                    count={paginationSize}\n                    onChangePage={handleChangePage}\n                    page={page}\n                    rowsPerPage={ROWS_PER_PAGE}\n                    rowsPerPageOptions={[]}\n                    className={classes.pagination}\n                    classes={{\n                      toolbar: classes.toolbar\n                    }}\n                  />\n                </tr>\n              </tbody>\n            </table>\n            <ReusableMenu anchorEl={anchorEl} setAnchorEl={setAnchorEl} menuContent={menuContent}/>\n          </>\n        )\n      }\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n  mandatoryAttributes: makeSelectMandatoryAttributes(),\n  recommendedAttributes: makeSelectRecommendedAttributes(),\n  categoryToAttributeWhiteListMap: makeSelectCategoryToAttributeWhitelistMap(),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<IUnlistedAttributesComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(UnlistedAttributes);\n\nconst ReusableMenu = ({\n  anchorEl, setAnchorEl, menuContent = []\n}) => {\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  return (\n    <Menu\n      anchorEl={anchorEl}\n      open={Boolean(anchorEl)}\n      onClose={handleClose}\n    >\n      {menuContent.map((\n        menuItem: {\n          label: string,\n          handleClick: () => void,\n        } = {\n            label: '',\n            handleClick: null\n          }, i) => {\n        const {\n          label,\n          handleClick,\n        } = menuItem;\n        return (\n          <MenuItem\n            key={i}\n            onClick={() => {\n              handleClick();\n              handleClose();\n            }}\n          >\n            {label}\n          </MenuItem>\n        );\n      })}\n    </Menu>\n  );\n};","import { Button, TableCell, TableRow } from '@material-ui/core';\nimport * as React from 'react';\nimport { List } from 'immutable';\nimport { Attribute } from '../../../../models';\nimport { IMap } from 'ats-utils/src';\nimport RecommendedAttribute from '../../../../models/RecommendedAttribute';\nimport { connect, useDispatch } from 'react-redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport { RestoreAttributeAction, SkipAttributeAction } from '../../../../modules/PimModule/actions';\n\ninterface IMandatoryRowsComponentProps {\n  filteredMandatoryAttributes: List<IMap<RecommendedAttribute>>;\n  openAttributeDialog: (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => void;\n  openOptionsDialog: (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => void;\n  setAnchorEl: (anchorEl: HTMLElement | null) => void;\n  setMenuContent: (menuContent: object[] | null) => void;\n}\n\ninterface IMandatoryRowsProps extends IMandatoryRowsComponentProps {\n  hasPimPrintDescriptionAcl: boolean;\n  site: string;\n}\n\nconst MandatoryRows: React.FC<IMandatoryRowsProps & WithTranslation> = ({\n  filteredMandatoryAttributes,\n  openAttributeDialog,\n  openOptionsDialog,\n  setAnchorEl,\n  setMenuContent,\n  t\n}) => {\n  const dispatch = useDispatch();\n  return (\n    <>\n      {\n        filteredMandatoryAttributes\n          .map((attribute, index) => {\n            const name = attribute.get('name');\n            const attributeKey = attribute.get('attributeKey');\n            const isSkipped = attribute.get('skip');\n            return (\n              <TableRow\n                key={index}\n              >\n                <TableCell component='th' scope='row' style={{ opacity: isSkipped ? 0.38 : 1 }}>{`${name} *`}</TableCell>\n                <TableCell align='left' style={{ opacity: isSkipped ? 0.38 : 1 }}>{attributeKey}</TableCell>\n                <TableCell align='center'>\n                  <Button\n                    color='primary'\n                    onClick={(e) => {\n                      setAnchorEl(e.currentTarget);\n                      setMenuContent([\n                        {\n                          label: t('pimUnlistedAttributesWidget.addToFeatures'),\n                          handleClick: () => openAttributeDialog(attribute)\n                        },\n                        {\n                          label: t('pimUnlistedAttributesWidget.addToOptions'),\n                          handleClick: () => {\n                            openOptionsDialog(attribute);\n                          }\n                        },\n                        isSkipped\n                          ? {\n                              label: t('pimUnlistedAttributesWidget.restoreAttribute'),\n                              handleClick: () => dispatch(new RestoreAttributeAction({ attributeId: attribute.get('attributeId')}))\n                            }\n                          : {\n                              label: t('pimUnlistedAttributesWidget.skipAttribute'),\n                              handleClick: () => dispatch(new SkipAttributeAction({ attributeId: attribute.get('attributeId') }))\n                            }\n                      ]);\n                    }}\n                  >\n                    {t('formButtons.action')}\n                  </Button>\n                </TableCell>\n              </TableRow>\n            );\n          })\n      }\n    </>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  return function mapStateToProps(state) {\n    return ({\n    });\n  };\n};\n\nexport default compose<React.FC<IMandatoryRowsComponentProps>>(\n  connect(makeMapStateToProps, null),\n  withTranslation('translations'),\n)(MandatoryRows);","import { Button, createStyles, Grid, LinearProgress, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { SeriesProductFile } from '../../../models';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport { IProductFile } from '../../../models/File';\nimport useFileUpload, { ERROR_TYPE } from '../../../hooks/useFileUpload';\nimport Language from '../../../models/Language';\nimport { OPTIONS_DIALOG_FORM } from '.';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  hiddenInput: {\n    display: 'none',\n  },\n  warning: {\n    marginRight: theme.spacing(1),\n  },\n  icon: {\n    color: theme.palette.grey[600],\n  }\n}));\n\ninterface ICutsheetUploadComponentProps {\n  selectedLanguage: Language;\n  formName: string;\n  index: number;\n  formFilePathArray: any[];\n  formFilePathString: string;\n}\n\ninterface ICutsheetUploadProps extends ICutsheetUploadComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\n\nconst CutsheetUpload: React.FC<ICutsheetUploadProps & WithTranslation> = ({\n  selectedLanguage,\n  formValues,\n  formName,\n  index,\n  formFilePathArray,\n  formFilePathString,\n  dispatch,\n  t,\n}) => {\n\n  const classes = useStyles();\n  const acceptString = ['.PDF'].join(', ');\n  const formCutsheet = formValues && formValues.getIn(formFilePathArray) || Map();\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setFile\n   } = useFileUpload(['.PDF']);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = formCutsheet.withMutations((ctx) => {\n      ctx.update(selectedLanguage, (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n          languageCode: selectedLanguage,\n        }));\n      });\n    });\n    dispatch(change(formName, formFilePathString, transformedFile));\n  }, [uploadedFile]);\n\n  const disableUpload = isUploading || (formName === OPTIONS_DIALOG_FORM && !formValues.getIn(['values', index, 'optionId']));\n\n  return (\n    <>\n      <Grid item={true} xs={5}>\n        <Typography variant='body1'>{t('fileTypes.manufacturerCutsheet')}</Typography>\n      </Grid>\n      <Grid\n        item={true}\n        xs={4}\n        wrap='nowrap'\n        alignItems='center'\n        container={true}\n      >\n        {\n          isUploading\n          && (\n            <Grid container={true} wrap='nowrap' alignItems='center'>\n              <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='primary' style={{ flexGrow: 1}} />\n              <Typography>{loadingPercentage}%</Typography>\n            </Grid>\n          )\n        }\n        {\n          uploadErr && (\n            <>\n              <WarningRoundedIcon color='error' fontSize='small' className={classes.warning}/>\n              <Typography color='error' variant='caption'>\n                {\n                  uploadErr === ERROR_TYPE.size\n                    ? t('pimProductDrawer.overLimitMessage')\n                    : uploadErr === ERROR_TYPE.type\n                      ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                      : t('attachmentDrawer.notUploaded')\n                }\n              </Typography>\n            </>\n          )\n        }\n      </Grid>\n      <Grid item={true} xs={3} container={true} justify='flex-end'>\n        <input\n          className={classes.hiddenInput}\n          type='file'\n          name='file'\n          onChange={(e) => setFile(e.target.files[0])}\n          accept={acceptString}\n          id={`manufacturer_cutsheet-${index}`}\n          disabled={disableUpload}\n        />\n        <label htmlFor={`manufacturer_cutsheet-${index}`}>\n          <Tooltip title={t('pimProductDrawer.pdfUploadTooltip')}>\n            <span>\n              <Button\n                disabled={disableUpload}\n                color='primary'\n                component='span'\n                endIcon={<PublishIcon className={classes.icon} />}\n              >\n                {t('formButtons.upload')}\n              </Button>\n            </span>\n          </Tooltip>\n        </label>\n      </Grid>\n    </>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<ICutsheetUploadComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CutsheetUpload);","import * as React from 'react';\nimport { IAction } from 'ats-utils/src';\nimport { Button, createStyles, Grid, Link, List as MuiList, ListItem, ListSubheader, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport { getFormValues } from 'redux-form/immutable';\nimport { change } from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from 'react-redux';\nimport { withAtsApi } from '../../../contexts';\nimport { WithAtsApi } from '../../../contexts/AtsApiContext';\nimport Language from '../../../models/Language';\nimport CutsheetUpload from './CutsheetUpload';\n\ninterface ICutsheetDisplayComponentProps {\n  formName: string;\n  formFilePathArray: any[];\n  formFilePathString: string;\n  selectedLanguage: Language;\n  index: number;\n}\n\ninterface ICutsheetDisplayProps extends ICutsheetDisplayComponentProps {\n  formValues: any;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype CutsheetDisplayProps = ICutsheetDisplayProps & WithTranslation & WithAtsApi;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    maxWidth: 190,\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  delete: {\n    color: theme.palette.grey[600]\n  },\n  button: {\n    padding: '3px 16px', // need to make the list items line up 0-0\n  }\n}));\n\nconst CutsheetDisplay: React.FC<CutsheetDisplayProps> = (props): JSX.Element => {\n  const {\n    t,\n    formValues,\n    formFilePathArray,\n    formFilePathString,\n    dispatch,\n    formName,\n    atsApi,\n    selectedLanguage,\n    index,\n  } = props;\n\n  const classes = useStyles();\n  const fileMap = formValues && formValues.getIn(formFilePathArray);\n  const cutsheetFile = formValues && formValues.getIn([...formFilePathArray, selectedLanguage]);\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const fileId = cutsheetFile && cutsheetFile.get('fileId');\n  const fileLink = fileId && generateFileLink(fileId);\n\n  if (cutsheetFile && fileLink) {\n    const filename = cutsheetFile.get('filename');\n    return (<>\n      <Grid item={true} xs={5}>\n        <Typography variant='body1'>{t('fileTypes.manufacturerCutsheet')}</Typography>\n      </Grid>\n      <Grid item={true} xs={4} container={true}>\n        <Tooltip title={filename}>\n          <Link href={fileLink} className={classes.ellipsis}>{filename}</Link>\n        </Tooltip>\n      </Grid>\n      <Grid item={true} xs={3} container={true} justify='flex-end'>\n        <Button\n          color='primary'\n          endIcon={<DeleteIcon className={classes.delete} />}\n          onClick={() => {\n            const updated = fileMap && fileMap.withMutations((ctx) => {\n              ctx.delete(selectedLanguage);\n            });\n            dispatch(change(formName, formFilePathString, updated));\n          }}\n          >\n          {t('formButtons.remove')}\n        </Button>\n      </Grid>\n    </>\n    );\n  }\n\n  return (\n    <CutsheetUpload\n      selectedLanguage={selectedLanguage}\n      formName={formName}\n      index={index}\n      formFilePathArray={formFilePathArray}\n      formFilePathString={formFilePathString}\n    />\n  );\n\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<ICutsheetDisplayComponentProps>>(\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CutsheetDisplay);","import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan } from './getRootSpan';\nimport { spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    // eslint-disable-next-line deprecation/deprecation\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n  Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n  Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n  event: Event,\n  prop: Prop,\n  mergeVal: ScopeData[Prop],\n): void {\n  const prevVal = event[prop];\n  // If we are not merging any new values,\n  // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n  if (!mergeVal.length && (!prevVal || prevVal.length)) {\n    return;\n  }\n\n  const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n  event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n  } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  if (transactionName) {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n  event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n  const rootSpan = getRootSpan(span);\n  if (rootSpan) {\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n      ...event.sdkProcessingMetadata,\n    };\n    const transactionName = spanToJSON(rootSpan).description;\n    if (transactionName) {\n      event.tags = { transaction: transactionName, ...event.tags };\n    }\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (event.fingerprint && !event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n","\nimport ListItem from '../ListItem';\nimport {\n  CategoryDisplayType,\n} from '../../modules/ProductModule/constants';\n\n// custom list item.. maybe refactor constant here?\nexport default class CategoryDisplayTypeListItem extends ListItem<CategoryDisplayType, string> {\n\n  public constructor(init?: ListItem<CategoryDisplayType, string>) {\n    super(init);\n    Object.assign(this, init);\n  }\n}\n","import React from 'react';\nexport default React.createContext(null);","import React, { useState } from 'react';\nimport {\n  Button,\n  Divider,\n  FormControlLabel,\n  Link,\n  Radio,\n  RadioGroup,\n  Theme,\n  Typography,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/styles';\nimport { Trans, useTranslation } from 'react-i18next';\nimport classnames from 'classnames';\nimport { CONSENT_CONTACT_EMAIL, TERMS_AND_CONDITIONS_LINK } from '../../constants';\n\nexport interface IConsentModalContentProps {\n  // deprecated: the copy no longer differs for new users; kept so existing consumers keep compiling\n  isNewUser?: boolean;\n  submitting?: boolean;\n  onConfirm: (consent: boolean) => void;\n}\n\nconst YES = 'yes';\nconst NO = 'no';\n\n// shared by both modal shells so the two entry points cannot drift apart\nexport const CONSENT_MODAL_PAPER_PROPS = {\n  style: {\n    padding: '24px 32px',\n    maxWidth: '80%',\n    width: 852\n  }\n};\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  overline: {\n    textTransform: 'uppercase',\n  },\n  title: {\n    marginTop: theme.spacing(0.5),\n    fontWeight: 700,\n  },\n  divider: {\n    margin: `${theme.spacing(0.5)}px 0 ${theme.spacing(3)}px 0`,\n  },\n  text: {\n    fontSize: '13.5px',\n    fontWeight: 400,\n    lineHeight: '24px',\n    letterSpacing: '0.5px',\n    marginBottom: theme.spacing(3),\n  },\n  sectionTitle: {\n    fontWeight: 700,\n    marginBottom: 0,\n  },\n  list: {\n    listStyle: 'disc',\n    margin: `0 0 ${theme.spacing(3)}px 0`,\n    paddingLeft: theme.spacing(3),\n  },\n  chooseOne: {\n    marginBottom: theme.spacing(),\n  },\n  link: {\n    fontSize: 'inherit',\n    fontWeight: 700,\n    textDecoration: 'underline',\n  },\n  option: {\n    border: `1px solid ${theme.palette.divider}`,\n    borderRadius: '4px',\n    margin: `0 0 ${theme.spacing()}px 0`,\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(1.5)}px`,\n    width: '100%',\n  },\n  optionLabel: {\n    color: theme.palette.text.primary,\n    fontWeight: 700,\n    fontSize: '14.5px',\n  },\n  actions: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n    marginTop: theme.spacing(2),\n  },\n}));\n\nconst ConsentModalContent: React.FC<IConsentModalContentProps> = ({\n  submitting,\n  onConfirm,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const [selection, setSelection] = useState(YES);\n\n  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setSelection(event.target.value);\n  };\n\n  const handleConfirm = () => {\n    onConfirm(selection === YES);\n  };\n\n  return (\n    <>\n      <Typography variant='body2' color='textSecondary' className={classes.overline}>{t('consentModal.dataAndPrivacy')}</Typography>\n      <Typography variant='subtitle1' color='textPrimary' className={classes.title}>{t('consentModal.title')}</Typography>\n      <Divider className={classes.divider} />\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        {t('consentModal.intro')}\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classnames(classes.text, classes.sectionTitle)}>\n        {t('consentModal.infoSharedTitle')}\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        <Trans\n          t={t}\n          i18nKey={'consentModal.infoShared'}\n          components={[\n            <strong key={'phone'} />\n          ]}\n        />\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classnames(classes.text, classes.sectionTitle)}>\n        {t('consentModal.howSharedTitle')}\n      </Typography>\n      <Typography component='ul' variant='body1' color='textPrimary' className={classnames(classes.text, classes.list)}>\n        <li>\n          <Trans\n            t={t}\n            i18nKey={'consentModal.howSharedConference'}\n            components={[\n              <strong key={'conference'} />\n            ]}\n          />\n        </li>\n        <li>\n          <Trans\n            t={t}\n            i18nKey={'consentModal.howSharedWebinars'}\n            components={[\n              <strong key={'webinars'} />\n            ]}\n          />\n        </li>\n        <li>\n          <Trans\n            t={t}\n            i18nKey={'consentModal.howSharedSpecTool'}\n            components={[\n              <strong key={'specTool'} />\n            ]}\n          />\n        </li>\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        <Trans\n          t={t}\n          i18nKey={'consentModal.limitCollection'}\n          components={[\n            <Link\n              key={'terms'}\n              className={classes.link}\n              href={TERMS_AND_CONDITIONS_LINK}\n              target='_blank'\n              rel='noopener'\n            />\n          ]}\n        />\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        {t('consentModal.casl')}\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        {t('consentModal.privacyLaws')}\n      </Typography>\n      <Typography component='p' variant='body1' color='textPrimary' className={classes.text}>\n        <Trans\n          t={t}\n          i18nKey={'consentModal.withdrawal'}\n          components={[\n            <Link\n              key={'email'}\n              className={classes.link}\n              href={`mailto:${CONSENT_CONTACT_EMAIL}`}\n            />\n          ]}\n        />\n      </Typography>\n      <Typography variant='body1' color='textPrimary' className={classnames(classes.text, classes.chooseOne)}>\n        {t('consentModal.chooseOne')}\n      </Typography>\n      <RadioGroup\n        value={selection}\n        onChange={handleChange}\n      >\n        <FormControlLabel\n          className={classes.option}\n          classes={{ label: classes.optionLabel }}\n          value={YES}\n          control={<Radio color='primary' />}\n          label={t('consentModal.yes')}\n        />\n        <FormControlLabel\n          className={classes.option}\n          classes={{ label: classes.optionLabel }}\n          value={NO}\n          control={<Radio color='primary' />}\n          label={t('consentModal.no')}\n        />\n      </RadioGroup>\n      <div className={classes.actions}>\n        <Button\n          variant='contained'\n          color='primary'\n          disabled={submitting}\n          onClick={handleConfirm}\n        >\n          {t('consentModal.confirm')}\n        </Button>\n      </div>\n    </>\n  );\n};\n\nexport default ConsentModalContent;\n","import React from 'react';\nexport default function isMuiElement(element, muiNames) {\n  return React.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;\n}","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\n\nexport const getGlobalScope = (): typeof globalThis | undefined => {\n  if (typeof globalThis !== 'undefined') {\n    return globalThis;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  return undefined;\n};\n","import { WrappedFieldProps } from 'redux-form';\nimport {\n  FormHelperTextProps,\n  FormControlProps,\n  TextFieldProps\n} from '@material-ui/core';\nimport { KeyboardDatePickerProps } from '@material-ui/pickers';\n\nexport type TimeOfDay =  'current' | 'start' | 'end';\n// Props can be injected by developer\n\nexport enum DATE_TYPE {\n  yearMonthDay = 'yearMonthDay',\n  yearMonth = 'yearMonth',\n}\n\nexport const INPUT_TYPE = {\n  [DATE_TYPE.yearMonthDay]: {\n    format: 'YYYY-MM-DD',\n    mask: '____-__-__',\n  },\n  [DATE_TYPE.yearMonth]: {\n    format: 'YYYY-MM',\n    mask: '____-__',\n  }\n};\n\nexport interface IFieldDatePickerV2CustomProps {\n  formControlProps?: Partial<FormControlProps>;\n  formHelperProps?: Partial<FormHelperTextProps>;\n  keyboardDatePickerProps?: Partial<KeyboardDatePickerProps> & Partial<TextFieldProps>;\n  timeOfDay?: 'current' | 'start' | 'end';\n  dateType?: DATE_TYPE;\n  timezone?: string;\n  onChangeCB?: () => void;\n}\n\nexport type FieldDatePickerV2Props = WrappedFieldProps & IFieldDatePickerV2CustomProps;\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'list';\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  Button,\n  IconButton,\n  Typography,\n  Select,\n  MenuItem,\n  InputLabel,\n  FormControl,\n  Input,\n  FormHelperText,\n  ListItem as MuiListItem,\n  Tooltip,\n  Menu,\n  Divider,\n  Popover,\n  Popper,\n  TextField,\n  InputAdornment,\n  Checkbox,\n  FormControlLabel,\n  Switch\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport FieldTextField from '../FieldTextField';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Field,\n  reduxForm,\n  getFormValues\n} from 'redux-form/immutable';\nimport {\n  List,\n  Map,\n  getIn,\n  fromJS,\n} from 'immutable';\nimport {\n  ToggleOverlayComponentAction, FieldDropzoneStateResetAction, SetSnackbarOpenAction\n} from '../../modules/ApplicationModule/actions';\nimport {\n  DRAWER_ID\n} from '../../containers/MyContactsPage/constants';\nimport { includesIgnoreCase } from '../../utils/includesIgnoreCase';\nimport {\n  change,\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  AddContactAction,\n  EditContactAction,\n  GetCategoriesAction,\n  GetManufacturersAction,\n  AddCustomerDiscountAction,\n  EditCustomerDiscountAction,\n  DeleteCustomerDiscountAction,\n  GetDiscountsForCustomerId,\n  SearchContactsBySearchTermAction,\n  ResetSearchContactsBySearchTermAction,\n  SearchUsersAction, SetDefaultCustomEmail\n} from '../../modules/AccountModule/actions';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport { Category, Contact, Manufacturer, Filter, Option, ListItem, User } from '../../models';\nimport Discount from '../../models/Discount';\nimport {\n  makeSelectCategory,\n  makeSelectCustomerDiscounts,\n  makeSelectManufacturer,\n  makeSelectSearchedContactsBySearchTerm,\n  makeSelectUsersForSalesRep,\n  makeSelectUsers,\n  makeSelectUserDefinedLabel,\n} from '../../modules/AccountModule/selectors';\nimport { makeSelectIsRestrictedOutsideSalesRep, makeSelectUserFirmId } from '../../modules/AtsModule/selectors'\nimport { makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\nimport { NoPhotoPreviewAction } from '../../modules/ApplicationModule/actions';\nimport classnames from 'classnames';\nimport {\n  IModalProps,\n} from '../UserContactDrawerDetails';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../FieldDropzone';\nimport { WithAtsApi, withAtsApi } from '../../contexts/AtsApiContext';\nimport Xhr from '../../utils/Xhr';\nimport { uploadFileValidation } from '../TeamManagementUserEditDrawer/Component';\nimport {isEmptyOrContent, isNotEmptyStringRequired, isValidEmailAddress, isValidEmailAddressOrEmpty, isValidExtension} from '../../validators';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\nimport { SiteName } from '../../constants';\nimport {\n  isEqual as _isEqual,\n  head,\n} from 'lodash';\nimport VirtualizedList from './VirtualizedList';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../FieldReactSelect';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction, ClearLocationInfo } from '../../modules/ProjectLocationModule/actions';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities } from '../../modules/ProjectLocationModule/selectors';\nimport DrawerRow from '../DrawerRow';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport DrawerEditHeader from '../DrawerEditHeader';\n\n// icons\nimport PhoneEnabledIcon from '@material-ui/icons/PhoneEnabled';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PersonIcon from '@material-ui/icons/Person';\nimport ApartmentRoundedIcon from '@material-ui/icons/ApartmentRounded';\nimport BusinessCenterIcon from '@material-ui/icons/BusinessCenter';\nimport RoomIcon from '@material-ui/icons/Room';\nimport EmailIcon from '@material-ui/icons/Email';\nimport PhoneAndroidIcon from '@material-ui/icons/PhoneAndroid';\nimport MoneyOffRoundedIcon from '@material-ui/icons/MoneyOffRounded';\nimport FolderSharedRoundedIcon from '@material-ui/icons/FolderSharedRounded';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport NotificationImportantIcon from '@material-ui/icons/NotificationImportant';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport SearchIcon from '@material-ui/icons/Search';\nimport CancelRoundedIcon from '@material-ui/icons/CancelRounded';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { acceptedMainImageExtensions } from '../../pages/SeriesEditPage/SeriesInfo';\nimport { components, } from 'react-select';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport { isEmail } from 'ats-utils/src';\nimport NoteIcon from '@material-ui/icons/Note';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport MonetizationOnIcon from '@material-ui/icons/MonetizationOn';\nimport LocalShippingIcon from '@material-ui/icons/LocalShipping';\nimport LibraryAddIcon from '@material-ui/icons/LibraryAdd';\nimport { makeSelectShareContactsPricingRegions } from '../../modules/LocationModule/selectors';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../FieldAutocomplete';\nimport LocalOfferIcon from '@material-ui/icons/LocalOffer';\n\nexport const MAX_FILE_SIZE = 10485760;\nexport const ACCEPTED_FILE_TYPES = [\n  'image/png',\n  'image/jpeg',\n  'image/gif',\n  // 'image/svg+xml',\n];\n\nconst defaultSimplifiedDiscount = {\n  manufacturer: null,\n  category: null,\n  type: null\n}\n\ninterface IUserContactDrawerDetailsContactEditComponentProps extends IModalProps {\n  contactData?: IMap<Contact>;\n  form?: string;\n  toggleHandle: (contentId?: string) => void;\n  customerDiscounts?: List<IMap<Discount>>;\n  options?: Option<Contact>;\n  filters: Filter;\n  submitCb?: any;\n  addedCb?: (newContactData: IMap<Contact>) => void;\n  defaultCustomEmail: string;\n}\n\ninterface IUserContactDrawerDetailsContactEditProps extends IUserContactDrawerDetailsContactEditComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  getManufacturers(): void;\n  getCategories(): void;\n  getCountries: () => void;\n  getProvinces: (id: string | number) => void;\n  getCities: (id: string | number) => void;\n  clearLocationInfo: () => void;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  isModalOpen?: boolean;\n  theme: Theme;\n  formValues: IMap<Contact>;\n  site: SiteName;\n  initialValues: IMap<Contact>;\n  contacts: List<IMap<Contact>>;\n  searchContacts: (searchTerm: string) => void;\n  resetSearchContacts: () => void;\n  getCustomerDiscounts: (customerId: number) => void;\n  salesRepUsers?: any;\n  firmId: number;\n  userDefinedLabel: string;\n  isRestrictedOutsideSalesRep: boolean;\n  pricingRegions: List<IMap<any>>;\n}\n\nexport interface CustomerDiscount extends Discount {\n  customerId: number;\n  contactType: string;\n}\n\ninterface ISimplifiedDiscount {\n  manufacturer: string;\n  category: string;\n  type: string;\n}\n\ninterface IUserContactDrawerDetailsContactEditState {\n  discounts: CustomerDiscount[];\n  simplifiedDiscounts: ISimplifiedDiscount[]; // same as discounts but with only the manufacturer, category, and type for comparing for unique discounts\n  duplicatedDiscounts: boolean[]; // keeps track of whether the discount is duplicated\n  deleteDiscountIds: number[]; // ids of discounts to be deleted\n  discountsTouched: boolean; // use for triggering the error messages\n  editedDiscounts: { [k: string]: CustomerDiscount }; // discounts that have been edited\n  imageId: string;\n  countryInput: string;\n  cityInput: string;\n  provinceInput: string;\n  discountMenuAnchorEl: HTMLElement;\n  openDiscountConfirmation: boolean;\n  displayContactSearch: boolean;\n  contactsSearchValue: any;\n  contactsSearchInputValue: string;\n  scroll: boolean;\n  contactDiscountId: number;\n  salesRepsFilter: string;\n}\n\n\ntype UserContactDrawerDetailsContactEditType = WithTranslation & IUserContactDrawerDetailsContactEditProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithAtsApi;\n\nclass UserContactDrawerDetailsContactEdit extends React.Component<UserContactDrawerDetailsContactEditType, IUserContactDrawerDetailsContactEditState> {\n  constructor(props) {\n    super(props);\n    const {\n      customerDiscounts,\n      contactData\n    } = props;\n    const discounts = (contactData && customerDiscounts && customerDiscounts.toJS()) || [];\n    this.state = {\n      discounts,\n      simplifiedDiscounts: discounts.map(discount => ({\n        manufacturer: discount.manufacturer,\n        category: discount.category,\n        type: discount.type\n      })),\n      duplicatedDiscounts: Array(discounts.length).fill(false),\n      deleteDiscountIds: [],\n      discountsTouched: false,\n      editedDiscounts: {},\n      imageId: '',\n      countryInput: '',\n      provinceInput: '',\n      cityInput: '',\n      discountMenuAnchorEl: null,\n      openDiscountConfirmation: false,\n      displayContactSearch: false,\n      contactsSearchValue: null,\n      contactsSearchInputValue: '',\n      scroll: false,\n      contactDiscountId: null,\n      salesRepsFilter: ''\n    };\n  }\n\n  public searchContactInputRef = React.createRef<HTMLInputElement>();\n  public discountContainerRef = React.createRef<HTMLDivElement>();\n  public discountsLoadedRef = React.createRef<HTMLDivElement>();\n  public searchContactsRef = React.createRef<HTMLDivElement>();\n  // Handles of the delayed scroll / focus below, cleared on unmount: the drawer can close (Save)\n  // before they fire, and the refs they target are null by then (Sentry issue 7712589083).\n  private scrollTimeout: ReturnType<typeof setTimeout> = null;\n  private focusTimeout: ReturnType<typeof setTimeout> = null;\n\n  public componentDidMount() {\n    const {\n      getCategories,\n      getManufacturers,\n      getCountries,\n      initialValues,\n      getProvinces,\n      getCities,\n      clearLocationInfo,\n    } = this.props;\n\n    clearLocationInfo(); // clear projectLocationInfo in redux\n    getManufacturers();\n    getCategories();\n    getCountries();\n\n    if (initialValues.get('imageId')) {\n      this.setState({\n        imageId: initialValues.get('imageId'),\n      })\n    }\n\n    if (initialValues.get('provinceId')) {\n      getProvinces(initialValues.get('provinceId'))\n    }\n\n    if (initialValues.get('cityId')) {\n      getCities(initialValues.get('cityId'));\n    }\n\n    // get users for sales rep\n    const { firmId, dispatch } = this.props;\n    if (firmId > 0) {\n      dispatch(new SearchUsersAction({\n        filters: fromJS({\n          'and': [\n            {\n              'firm_id': {\n                'eq': firmId\n              }\n            },\n            {\n              'status': {\n                'eq': 'active'\n              }\n            },\n          ]\n        })\n      }));\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      customerDiscounts,\n      isModalOpen,\n      getManufacturers,\n      getCategories,\n      contactData\n    } = this.props;\n\n    if (!customerDiscounts.equals(prevProps.customerDiscounts)) {\n      const discounts = this.state.displayContactSearch\n        ? customerDiscounts.toJS().map(discount => {\n          delete discount.brandRepId;\n          delete discount.customer_id;\n          discount.customerId = contactData ? contactData.get('id') : -1\n          discount.contactType = 'contact';\n          return discount;\n        })\n        : customerDiscounts.toJS();\n      this.setState({\n        discounts,\n        simplifiedDiscounts: discounts.map(discount => ({\n          manufacturer: discount.manufacturer,\n          category: discount.category,\n          type: discount.type\n        })),\n        duplicatedDiscounts: Array(discounts.length).fill(false),\n      })\n    }\n\n    if (isModalOpen && !prevProps.isModalOpen) {\n      const discounts = customerDiscounts.toJS();\n      getManufacturers();\n      getCategories();\n      this.setState({\n        discounts,\n        simplifiedDiscounts: discounts.map(discount => ({\n          manufacturer: discount.manufacturer,\n          category: discount.category,\n          type: discount.type\n        })),\n        duplicatedDiscounts: Array(discounts.length).fill(false),\n      })\n    }\n\n    if (this.state.scroll && this.discountsLoadedRef.current) {\n      this.setState({ scroll: false });\n      clearTimeout(this.scrollTimeout);\n      this.scrollTimeout = setTimeout(() => {\n        this.discountContainerRef.current?.scrollIntoView({ behavior: 'smooth' });\n      }, 500);\n    }\n  }\n\n  public componentWillUnmount() {\n    clearTimeout(this.scrollTimeout);\n    clearTimeout(this.focusTimeout);\n  }\n\n  public addOrEditContact = (contactId: number, jsValues: any, newDiscounts: CustomerDiscount[], onSuccess: (newContact: IMap<Contact>) => void) => {\n    const {\n      dispatch,\n      ownerType,\n      ownerId,\n    } = this.props;\n\n    contactId\n      ?\n      dispatch(new EditContactAction({\n        contactId,\n        contact: {\n          ...jsValues.toJS(),\n        },\n        options: this.props.options,\n        filters: this.props.filters,\n        onSuccess,\n      }))\n      :\n      dispatch(new AddContactAction({\n        contact: {\n          ownerId,\n          ownerType,\n          ...jsValues.toJS(),\n        },\n        options: this.props.options,\n        filters: this.props.filters,\n        discounts: newDiscounts,\n        onSuccess,\n      }))\n  }\n\n  public onSubmit = async (values: IMap<Partial<Contact>>) => {\n    const { dispatch, contactData, submitCb, addedCb, defaultCustomEmail, site, t } = this.props;\n    const {\n      discounts,\n      duplicatedDiscounts,\n      deleteDiscountIds,\n      discountsTouched,\n      editedDiscounts\n    } = this.state;\n\n    !discountsTouched && this.setState({ discountsTouched: true });\n    if (discounts.some(this.discountHasError) || duplicatedDiscounts.some(discountExist => discountExist)) {\n      return;\n    }\n\n    const filteredValues = values.filter((value: Partial<Contact>) => {\n      return value !== null && value !== undefined;\n    });\n\n    const {\n      atsApi\n    } = this.props;\n\n    const uploadedFiles = await Xhr({ atsApi, files: filteredValues.get('dropzone') });\n    const imageId = getIn(uploadedFiles, ['0', 'id'], '');\n    const contactId = filteredValues.get('id');\n    const officeNumber = filteredValues.get('officeNumber') || '';\n    const extension = (filteredValues.get('extension') || '').trim();\n    const branchId = filteredValues.get('branchId');\n    const billTo = filteredValues.get('billToCustomer');\n    const shipTo = filteredValues.get('shipToCustomer');\n    const userDefined = filteredValues.get('userDefined');\n\n    const finalValues = filteredValues.withMutations((ctx) => {\n      imageId\n        ? ctx.set('imageId', imageId)\n        : ctx.set('imageId', values.get('imageId'));\n\n      extension\n        ? ctx.set('officeNumber', `${officeNumber},${extension}`)\n        : ctx.set('officeNumber', officeNumber);\n\n      ctx\n        .set('countryName', values.getIn(['countryName', 'value'], ''))\n        .set('countryId', parseInt(values.getIn(['countryName', 'id'], null)))\n        .set('provinceName', values.getIn(['provinceName', 'value'], ''))\n        .set('provinceId', parseInt(values.getIn(['provinceName', 'id'], null)))\n        .set('cityName', values.getIn(['cityName', 'value'], ''))\n        .set('cityId', parseInt(values.getIn(['cityName', 'id'], null)));\n\n      if (site === SiteName.pt) {\n        ctx.set('branchId', (branchId == null || branchId === '') ? null : String(branchId).trim());\n        ctx.set('billToCustomer', (billTo == null || billTo === '') ? null : String(billTo).trim());\n        ctx.set('shipToCustomer', (shipTo == null || shipTo === '') ? null : String(shipTo).trim());\n        ctx.set('userDefined', userDefined);\n      } else {\n        ctx\n          .delete('branchId')\n          .delete('billToCustomer')\n          .delete('shipToCustomer')\n          .delete('userDefined');\n      }\n\n      // add sales rep by id #PT-2689\n      ctx.set('salesReps', values.get('salesReps')?.map(user => ({ id: user.get('id') })));\n    });\n\n    const newDiscounts = discounts.filter(discount => discount.brandRepId === undefined);\n\n    if (contactId) {\n      const newEditDiscounts = Object.values(editedDiscounts).map(discount => ({ ...discount, contactType: 'contact' }));\n\n      deleteDiscountIds.length && dispatch(new DeleteCustomerDiscountAction({ brandRepId: deleteDiscountIds }));\n      newDiscounts.length && dispatch(new AddCustomerDiscountAction({ discounts: newDiscounts }));\n      newEditDiscounts.length && dispatch(new EditCustomerDiscountAction({ discounts: newEditDiscounts }));\n    }\n\n    const onSuccess = (newContact: IMap<Contact>) => {\n      if (site === SiteName.pt) {\n        const resetDefault = (defaultCustomEmail && defaultCustomEmail === contactData.get('email')) // initially on\n          && (!values.get('setAsDefaultEmail') || !isEmail(newContact.get('email'))) // now off or no valid email\n\n        if (isEmail(newContact.get('email')) && values.get('setAsDefaultEmail')) {\n          dispatch(new SetDefaultCustomEmail({\n            email: newContact.get('email'),\n            onSuccess: () => {\n              dispatch(new SetSnackbarOpenAction({\n                message: t('contactDrawerEdit.updateDefaultCustomEmailSucceed'),\n                severity: 'success'\n              }))\n            }\n          }));\n        } else if (resetDefault) {\n          dispatch(new SetDefaultCustomEmail({\n            email: null,\n            onSuccess: () => {\n              dispatch(new SetSnackbarOpenAction({\n                message: t('contactDrawerEdit.resetDefaultCustomEmailSucceeded'),\n                severity: 'success'\n              }))\n            }\n          }));\n        }\n      }\n\n      if (contactId && submitCb) {\n        submitCb(newContact);\n      }\n\n      if (addedCb) {\n        addedCb(newContact);\n      }\n    };\n\n    this.addOrEditContact(contactId, finalValues, newDiscounts, onSuccess);\n    this.toggleDrawer();\n  }\n\n  public toggleDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID\n    }))\n    dispatch(new FieldDropzoneStateResetAction());\n  };\n\n  public addEmptyDiscount = () => {\n    const { contactData } = this.props;\n    const {\n      discounts,\n      simplifiedDiscounts,\n      duplicatedDiscounts,\n    } = this.state;\n    const newSimplifiedDiscounts = JSON.parse(JSON.stringify(simplifiedDiscounts));\n    const newDuplicatedDiscounts = [...duplicatedDiscounts];\n\n    discounts.push({\n      ...defaultSimplifiedDiscount,\n      amount: null,\n      contactType: 'contact',\n      customerId: contactData ? contactData.get('id') : -1\n    });\n    newSimplifiedDiscounts.push(defaultSimplifiedDiscount);\n    newDuplicatedDiscounts.push(this.checkIfDiscountAlreadyExist(simplifiedDiscounts, defaultSimplifiedDiscount));\n\n    this.setState({\n      discounts,\n      simplifiedDiscounts: newSimplifiedDiscounts,\n      duplicatedDiscounts: newDuplicatedDiscounts\n    });\n\n    this.handleCloseDiscountMenu();\n  }\n\n  public addToDeleteDiscounts = (discount: CustomerDiscount, index: number) => {\n    const {\n      discounts,\n      simplifiedDiscounts,\n      duplicatedDiscounts,\n      deleteDiscountIds\n    } = this.state;\n\n    const newDiscounts = [...discounts];\n    const newSimplifiedDiscounts = JSON.parse(JSON.stringify(simplifiedDiscounts));\n    const newDuplicatedDiscounts = [...duplicatedDiscounts];\n    const newDeleteDiscountIds = [...deleteDiscountIds];\n\n    newDiscounts.splice(index, 1);\n    newSimplifiedDiscounts.splice(index, 1);\n    newDuplicatedDiscounts.splice(index, 1);\n    discount.brandRepId && newDeleteDiscountIds.push(discount.brandRepId);\n\n    newDuplicatedDiscounts.forEach((discountAlreadyExist, i) => {\n      if (discountAlreadyExist && !this.checkIfDiscountAlreadyExist(newSimplifiedDiscounts, newSimplifiedDiscounts[i], i)) {\n        newDuplicatedDiscounts[i] = false;\n      }\n    });\n\n    this.setState({\n      discounts: newDiscounts,\n      simplifiedDiscounts: newSimplifiedDiscounts,\n      duplicatedDiscounts: newDuplicatedDiscounts,\n      deleteDiscountIds: newDeleteDiscountIds\n    });\n  }\n\n  // validates that at least the firstName or organization field is filled\n  public optionalRequiredValidateFunc = (value, allValues) => !(isNotEmptyStringRequired(allValues.get('firstName')) && isNotEmptyStringRequired(allValues.get('organization'))) ? undefined : this.props.t('contactDrawerEdit.contactInfoError')\n\n  public discountHasError = (discount: CustomerDiscount) => {\n    const {\n      manufacturer,\n      category,\n      type,\n      amount\n    } = discount;\n\n    if ((manufacturer || category) && type && amount) {\n      return false;\n    }\n    return true;\n  }\n\n  public handleFieldChange = (fieldName, discounts, index) => e => {\n    const {\n      editedDiscounts,\n      simplifiedDiscounts,\n      duplicatedDiscounts,\n    } = this.state;\n    const value = e.target.value;\n    const brandRepId = discounts[index].brandRepId;\n\n    discounts[index][fieldName] = value;\n\n    if (fieldName === 'manufacturer') {\n      const manufacturer = this.props.manufacturers.find(x => x.get('id') === value, Map()).get('value');\n      discounts[index]['manufacturer'] = manufacturer;\n      discounts[index]['manufacturerId'] = value;\n    }\n\n    if (fieldName === 'category') {\n      const category = this.props.categories.find(x => x.get('id') === value, Map()).get('value');\n      discounts[index]['category'] = category;\n      discounts[index]['categoryId'] = value;\n    }\n\n    if (fieldName === 'amount' && (Number(value) >= 1000000 || Number(value) < 0 || isNaN(Number(value)) || this.checkInDigitLimit(value))) {\n      return;\n    } else if (brandRepId) {\n      const newEditedDiscounts = { ...editedDiscounts };\n      newEditedDiscounts[brandRepId] = discounts[index];\n\n      this.setState({\n        discounts,\n        editedDiscounts: newEditedDiscounts\n      });\n    } else {\n      this.setState({ discounts });\n    }\n\n    if (fieldName !== 'amount') {\n      const newSimplifiedDiscounts = JSON.parse(JSON.stringify(simplifiedDiscounts));\n      const newDuplicatedDiscounts = [...duplicatedDiscounts];\n\n      newSimplifiedDiscounts[index][fieldName] = value;\n      newDuplicatedDiscounts[index] = this.checkIfDiscountAlreadyExist(simplifiedDiscounts, newSimplifiedDiscounts[index]);\n\n      newDuplicatedDiscounts.forEach((discountAlreadyExist, i) => {\n        if (discountAlreadyExist && !this.checkIfDiscountAlreadyExist(newSimplifiedDiscounts, newSimplifiedDiscounts[i], i)) {\n          newDuplicatedDiscounts[i] = false;\n        }\n      });\n\n      this.setState({\n        simplifiedDiscounts: newSimplifiedDiscounts,\n        duplicatedDiscounts: newDuplicatedDiscounts\n      });\n    }\n  }\n\n  public checkIfDiscountAlreadyExist = (discounts: ISimplifiedDiscount[], discountToCheck: ISimplifiedDiscount, indexToIgnore: number = -1) => {\n    return discounts.some((discount, index) => index === indexToIgnore ? false : _isEqual(discount, discountToCheck));\n  }\n\n  public checkInDigitLimit = (value: string) => {\n    const number = Number(value);\n    let length = 0;\n    if (number < 1) {\n      length = (number + '').replace('0.', '').length;\n      return length > 6;\n    } else {\n      length = (number + '').replace('.', '').length;\n    }\n    return length > 6;\n  }\n\n  public removePhoto = () => {\n    const {\n      dispatch,\n      change,\n    } = this.props;\n\n    dispatch(new NoPhotoPreviewAction());\n    change('imageId', '');\n    change('dropzone', '');\n    this.setState({ imageId: '' });\n  }\n\n  public selectCountry = (_countryId: number | string) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      getProvinces,\n    } = this.props;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      getProvinces(_countryId);\n      dispatch(new GetCountryAdminDivisionAction({ countryId }))\n      dispatch(change(form, 'countryName', countries.find((country) => country.get('id') === _countryId)));\n      dispatch(change(form, 'provinceName', ''));\n      dispatch(change(form, 'cityName', ''));\n    }\n  }\n\n  public selectProvince = (provinceId?: number) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n      getCities,\n    } = this.props;\n\n    if (provinceId != null) {\n      getCities(provinceId);\n      dispatch(change(form, 'provinceName', provinces.find((province) => province.get('id') === provinceId)));\n      dispatch(change(form, 'cityName', ''));\n    }\n  }\n\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'cityName', cities.find((city) => city.get('id') === cityId)));\n    }\n  }\n\n  public selectSalesRep = (users?: IMap<{ id: number, value: string }>[]) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n    dispatch(change(form, 'salesReps', users || []));\n  }\n\n  public renderSelectField = (\n    name: string,\n    placeholder: string,\n    options: List<IMap<ListItem<string, number | string>>>,\n    onInputChange: (id?: number | string) => void,\n    inputKey: 'countryInput' | 'cityInput' | 'provinceInput',\n  ) => {\n    const {\n      classes\n    } = this.props;\n    return (\n      <DrawerRow\n        drawerView={false}\n      >\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name={name}\n          component={FieldReactSelect}\n          inputProps={{\n            inputValue: this.state[inputKey],\n            defaultValue: '',\n            options: options.filter(option => includesIgnoreCase(option.get('value'), this.state[inputKey])).toArray(),\n            getOptionValue: (option: IMap<ListItem<string, number>>) => option.get('value'),\n            getOptionLabel: (option: IMap<ListItem<string, number>>) => option.get('value'),\n            placeholder,\n            components: {\n              MenuList: VirtualizedList,\n              Option: option => <MuiListItem\n                disableGutters={false}\n                className={classnames(classes.optionComponentRoot)}\n                {...option.innerProps}\n              >\n                {option.label}\n              </MuiListItem>,\n              SingleValue: option => <Typography variant='body2' color='inherit'>{option.data.get('value')}</Typography>,\n              Placeholder: option => <Typography variant='body2'>{placeholder}</Typography>,\n              NoOptionsMessage: props => <MuiListItem\n                disableGutters={false}\n              >\n                <Typography variant='body2'>\n                  No options\n                </Typography>\n              </MuiListItem>\n            },\n            styles: this.fieldReactSelectStyles(),\n            onChange: option => onInputChange(option.get('id')),\n            onInputChange: (value: string, actionMeta) => {\n              if (actionMeta.action === 'input-change') {\n                this.setState((state) => ({\n                  ...state,\n                  [inputKey]: value,\n                }))\n              } else {\n                this.setState((state) => ({\n                  ...state,\n                  [inputKey]: '',\n                }))\n              }\n            }\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n        />\n      </DrawerRow>\n    )\n  }\n\n  public renderSalesRepSelectField = (\n    _options: List<IMap<User>>,\n  ) => {\n    const {\n      classes,\n      t,\n    } = this.props;\n    const options = _options.sort((a, b) => a.get('name').localeCompare(b.get('name')));\n    return (\n      <DrawerRow\n        drawerView={false}\n      >\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name={'salesReps'}\n          component={FieldReactSelect}\n          inputProps={{\n            isMulti: true,\n            // inputValue: this.state['salesRepsFilter'],\n            // options: options.filter(option => {\n            //   const regex = new RegExp(`${this.state['salesRepsFilter']}`, 'i');\n            //   return regex.test(option.get('name'));\n            // }).toArray(),\n            options: options.toArray(),\n            getOptionLabel: (option: IMap<User>) => option.get('name'),\n            getOptionValue: (option: IMap<User>) => option.get('id'),\n            placeholder: t('contactDrawerEdit.salesRepsTitle'),\n            components: {\n              MenuList: VirtualizedList,\n              Option: option => <MuiListItem\n                disableGutters={false}\n                className={classnames(classes.optionComponentRoot)}\n                {...option.innerProps}\n              >\n                {option.label}\n              </MuiListItem>,\n              // SingleValue: option => <Typography variant='body2' color='inherit'>{option.data.get('value')}</Typography>,\n              // MultiValue: option => <Typography variant='body2' color='inherit'>{option.data.get('value')}</Typography>,\n              Placeholder: option => <Typography variant='body2'>{t('contactDrawerEdit.salesRepsTitle')}</Typography>,\n              NoOptionsMessage: props => <MuiListItem\n                disableGutters={false}\n              >\n                <Typography variant='body2'>\n                  No options\n                </Typography>\n              </MuiListItem>,\n              MultiValueLabel: this.multiValueLabel,\n              MultiValueRemove: this.multiValueRemove,\n            },\n            styles: this.fieldReactSelectStyles(),\n            onChange: values => this.selectSalesRep(values),\n            onInputChange: (value: string, actionMeta) => {\n              // if(actionMeta.action === 'input-change') {\n              //   this.setState((state) =>({\n              //     ...state,\n              //     ['salesRepsFilter']: value,\n              //   }))\n              // } else {\n              //   this.setState((state) =>({\n              //     ...state,\n              //     ['salesRepsFilter']: '',\n              //   }))\n              // }\n            }\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n        />\n      </DrawerRow>\n    )\n  }\n\n  private multiValueRemove = (props) => {\n    const { classes } = this.props;\n    return (\n      <components.MultiValueRemove {...props} className={classes.multiValueRemove}>\n        <CancelRoundedIcon className={classes.icon} />\n      </components.MultiValueRemove>);\n  }\n\n  private multiValueLabel = (props) => {\n    return (\n      <components.MultiValueLabel {...props} key={props.data.get('id')}>\n        <Tooltip title={props.children || ''}>\n          <Typography variant='body2' color='inherit'>{props.children}</Typography>\n        </Tooltip>\n      </components.MultiValueLabel>\n    );\n  }\n\n\n\n  public fieldReactSelectStyles = () => {\n    const {\n      theme\n    } = this.props;\n\n    return {\n      control: (base, state) => ({\n        ...base,\n        borderWidth: `0 0 1px 0`,\n        borderRadius: '0',\n        boxShadow: state.isFocused ? 0 : 0,\n        borderColor: theme.typography.subtitle2.color,\n        '&:hover': {\n          borderColor: theme.palette.primary.main\n        },\n        '& div': {\n          paddingLeft: 2\n        }\n      }),\n      indicatorSeparator: providedStyles => ({\n        ...providedStyles,\n        backgroundColor: 'transparent'\n      }),\n      multiValueRemove: providedStyles => ({\n        ...providedStyles,\n        cursor: 'pointer',\n        '&:hover': {\n          backgroundColor: 'transparent',\n        }\n      }),\n      multiValueLabel: providedStyles => ({\n        ...providedStyles,\n        display: 'flex',\n        alignItems: 'center',\n      }),\n      multiValue: providedStyles => ({\n        ...providedStyles,\n        height: '30px',\n        display: 'flex',\n        alignItems: 'center',\n        borderRadius: '5px',\n      }),\n    };\n  }\n\n  public handleInputValueChange = (event: object, value: string, reason: string) => {\n    if (reason !== 'reset') {\n      this.setState({ contactsSearchInputValue: value });\n      value\n        ? this.props.searchContacts(value)\n        : this.props.resetSearchContacts();\n    } else {\n      this.setState({ contactsSearchInputValue: this.state.contactsSearchInputValue });\n    }\n  }\n\n  public handleOpenDiscountMenu = (event: React.MouseEvent<HTMLButtonElement>) => {\n    this.setState({ discountMenuAnchorEl: event.currentTarget });\n  }\n\n  public handleCloseDiscountMenu = () => {\n    this.setState({ discountMenuAnchorEl: null });\n  }\n\n  public handleDisplayContactSearch = () => {\n    this.setState({ displayContactSearch: true }, () => {\n      clearTimeout(this.focusTimeout);\n      this.focusTimeout = setTimeout(() => this.searchContactInputRef.current?.focus(), 500);\n    });\n    this.handleCloseDiscountMenu();\n  }\n\n  public handleOpenDiscountConfirmDialog = (id: number) => {\n    this.setState({ openDiscountConfirmation: true, contactDiscountId: id });\n  }\n\n  public handleCloseDiscountConfirmDialog = () => {\n    this.setState({ openDiscountConfirmation: false });\n    this.handleCloseDiscountMenu();\n  }\n\n  public handleCopyDiscounts = (id?: number) => {\n    const {\n      customerDiscounts,\n      contactData,\n      getCustomerDiscounts,\n      resetSearchContacts\n    } = this.props;\n\n    this.setState({\n      // add initial discounts that have already been saved to the database to deleteDiscountIds\n      deleteDiscountIds: contactData ? customerDiscounts.toJS().map(discount => discount.brandRepId) : [],\n      simplifiedDiscounts: [],\n      duplicatedDiscounts: [],\n      scroll: true,\n      contactsSearchValue: null,\n      contactsSearchInputValue: ''\n    }, () => {\n      // get customer discounts of id, which are the discounts to be copy from;\n      getCustomerDiscounts(id || this.state.contactDiscountId);\n    });\n\n    this.handleCloseDiscountConfirmDialog();\n    resetSearchContacts();\n  }\n\n  public render() {\n    const {\n      imageId\n    } = this.state;\n    const {\n      handleSubmit,\n      classes,\n      manufacturers,\n      categories,\n      // initialValues\n      site,\n      countries,\n      provinces,\n      cities,\n      formValues,\n      contacts,\n      t,\n      salesRepUsers,\n      firmId,\n      contactData,\n      userDefinedLabel,\n      isRestrictedOutsideSalesRep,\n      pricingRegions,\n    } = this.props;\n\n    const {\n      discounts,\n      discountsTouched,\n      duplicatedDiscounts,\n      discountMenuAnchorEl,\n      openDiscountConfirmation,\n      displayContactSearch,\n      contactsSearchValue,\n      contactsSearchInputValue\n    } = this.state;\n\n    const isAq = site === SiteName.pt;\n\n    const contactsArray = contacts.reduce((acc, contact: IMap<Contact>) => {\n      acc.push({\n        id: contact.get('id'),\n        name: [contact.get('firstName'), contact.get('lastName')].join(' ').trim(),\n        organization: contact.get('organization', ''),\n        email: contact.get('email', ''),\n        contactType: contact.get('contactType', ''),\n        address: contact.get('address1', ''),\n        cityName: contact.get('cityName', ''),\n        provinceCode: contact.get('provinceCode', ''),\n        countryName: contact.get('countryName', ''),\n      });\n      return acc;\n    }, []);\n\n    return (\n      <Grid>\n        <DrawerEditHeader title={t('contactDrawerEdit.title')} handleClose={this.toggleDrawer} />\n        <form\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          <Grid container={true} direction='column' className={classes.uploadFileContainer}>\n            <Grid container={true} justify='space-between'>\n              <Typography\n                variant='body2'\n                className={classes.title}\n              >\n                {t('uploadPhoto.uploadPhoto')}\n              </Typography>\n              {\n                (imageId || (formValues && formValues.get('dropzone'))) &&\n                <IconButton onClick={this.removePhoto} size='small' className={classes.bottonMargin}>\n                  <DeleteIcon fontSize='small' />\n                </IconButton>\n              }\n            </Grid>\n            <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n              component={FieldDropzone}\n              name='dropzone'\n              validate={uploadFileValidation}\n              props={{\n                initialImage: imageId,\n                dropzoneInputProps: {\n                  accept: acceptedMainImageExtensions\n                }\n              }}\n            />\n          </Grid>\n          <Typography\n            variant='body2'\n            className={classes.title}\n          >\n            {t('contactDrawerEdit.contactInfo')}\n          </Typography>\n          <DrawerTextFieldRow\n            name='firstName'\n            props={{\n              label: t('contactDrawerEdit.firstName'),\n            }}\n            muiIcon={<PersonIcon />}\n            validate={[isEmptyOrContent, this.optionalRequiredValidateFunc]}\n          />\n          <DrawerTextFieldRow\n            name='lastName'\n            props={{\n              label: t('contactDrawerEdit.lastName'),\n            }}\n          />\n          <DrawerTextFieldRow\n            name='internalNo'\n            props={{\n              label: t('contactDrawerEdit.internalCustomerNumber'),\n            }}\n            muiIcon={<FolderSharedRoundedIcon />}\n          />\n          <DrawerTextFieldRow\n            name='email'\n            props={{\n              label: t('contactDrawerEdit.email'),\n            }}\n            muiIcon={<EmailIcon />}\n            validate={[isValidEmailAddressOrEmpty]}\n          />\n          <DrawerTextFieldRow\n            name='organization'\n            props={{\n              label: t('contactDrawerEdit.organization'),\n            }}\n            muiIcon={<ApartmentRoundedIcon />}\n            validate={[isEmptyOrContent, this.optionalRequiredValidateFunc]}\n          />\n          <DrawerTextFieldRow\n            name='contactType'\n            props={{\n              label: t('contactDrawerEdit.contactType'),\n            }}\n            muiIcon={<BusinessCenterIcon />}\n          />\n          <DrawerTextFieldRow\n            name='address1'\n            props={{\n              label: t('contactDrawerEdit.address'),\n            }}\n            muiIcon={<RoomIcon />}\n          />\n          {this.renderSelectField('countryName', t('contactDrawerEdit.country'), countries, this.selectCountry, 'countryInput')}\n          {this.renderSelectField('provinceName', t('contactDrawerEdit.stateProvince'), provinces, this.selectProvince, 'provinceInput')}\n          {this.renderSelectField('cityName', t('contactDrawerEdit.city'), cities, this.selectCity, 'cityInput')}\n          <DrawerTextFieldRow\n            name='postalZip'\n            props={{\n              label: t('contactDrawerEdit.postalCode'),\n            }}\n          />\n          <DrawerRow\n            muiIcon={<PhoneEnabledIcon />}\n            drawerView={false}\n            childrenJustify='space-between'\n          >\n            <Grid item={true} xs={7}>\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                component={FieldTextField}\n                name='officeNumber'\n                props={{\n                  label: t('contactDrawerEdit.officeNumber'),\n                  formControlProps: {\n                    fullWidth: true\n                  }\n                }}\n              />\n            </Grid>\n            <Grid item={true} xs={4}>\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                component={FieldTextField}\n                name='extension'\n                props={{\n                  label: t('contactDrawerEdit.extension'),\n                  formControlProps: {\n                    fullWidth: true\n                  }\n                }}\n                validate={[isValidExtension]}\n              />\n            </Grid>\n          </DrawerRow>\n          <DrawerTextFieldRow\n            name='mobileNumber'\n            props={{\n              label: t('contactDrawerEdit.mobileNumber'),\n            }}\n            muiIcon={<PhoneAndroidIcon />}\n          />\n\n          {/* SALES REP */}\n          {this.renderSalesRepSelectField(salesRepUsers)}\n\n          {\n            isAq && (\n              <DrawerTextFieldRow\n                name='branchId'\n                props={{\n                  label: t('contactDrawerEdit.branchId'),\n                }}\n                muiIcon={<AccountTreeIcon />}\n              />\n            )\n          }\n\n          <DrawerRow drawerView={false} muiIcon={<LocalOfferIcon />}>\n            <Grid\n              item={true}\n              xs={12}\n            >\n              <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                name='region'\n                component={FieldAutocomplete}\n                props={{\n                  inputProps: {\n                    placeholder: t('quoteListFilter.regionTitle'),\n                    options: pricingRegions?.toJS(),\n                    disableClearable: true,\n                    getOptionLabel: option => option ? option.value : null,\n                    renderOption: option => option && <Typography>{option.value}</Typography>,\n                  },\n                  formControlProps: {\n                    fullWidth: true\n                  }\n                }}\n              />\n            </Grid>\n          </DrawerRow>\n\n          {/* Internal Note */}\n          <DrawerTextFieldRow\n            name='internalNote'\n            muiIcon={<NoteIcon />}\n            multiLine={50}\n            props={{\n              label: t('contactDrawerEdit.internalNote'),\n              helperText: false,\n              inputProps: {\n                inputProps: {\n                  maxLength: 1000,\n                }\n              }\n            }}\n          />\n          <FormHelperText id='internalNoteCharacterCount' className={classes.characterCount}>{`${formValues?.get('internalNote')?.length || 0}/1000`}</FormHelperText>\n\n          {\n            isAq && (\n              <DrawerTextFieldRow\n                name='billToCustomer'\n                props={{\n                  label: t('contactDrawerEdit.billTo'),\n                }}\n                muiIcon={<MonetizationOnIcon />}\n              />\n            )\n          }\n\n          {\n            isAq && (\n              <DrawerTextFieldRow\n                name='shipToCustomer'\n                props={{\n                  label: t('contactDrawerEdit.shipTo'),\n                }}\n                muiIcon={<LocalShippingIcon />}\n              />\n            )\n          }\n\n          {\n            isAq && (\n              <DrawerTextFieldRow\n                name='userDefined'\n                props={{\n                  label: userDefinedLabel || t('contactDrawerEdit.userDefinedLabelFallback'),\n                  inputProps: {\n                    InputLabelProps: { className: classes.inputLabelFormControl },\n                    InputProps: { className: classes.inputFormControl }\n                  }\n                }}\n                muiIcon={<LibraryAddIcon />}\n              />\n            )\n          }\n\n          {/* DISCOUNTS */}\n          {site !== SiteName.spec &&\n            <Grid container={true} className={classes.discountsContainer} ref={this.discountContainerRef}>\n              <DrawerRow\n                muiIcon={<MoneyOffRoundedIcon />}\n                drawerView={false}\n                text={t('contactDrawerEdit.customerDiscount')}\n              />\n              {discounts.length > 0 && discounts.map((discount, i) => (\n                <Grid key={i} item={true} xs={12} className={classes.discountContainer} ref={i === discounts.length - 1 ? this.discountsLoadedRef : null}>\n                  <DrawerRow\n                    drawerView={false}\n                    alignItems='flex-start'\n                  >\n                    <FormControl error={discountsTouched && !discount.category && !discount.manufacturer} fullWidth={true}>\n                      <InputLabel>\n                        <Typography variant='body2'>\n                          {t('contactDrawerEdit.manufacturer')}\n                        </Typography>\n                      </InputLabel>\n                      <Tooltip title={discount.manufacturer || ''} classes={{ popper: classes.tooltip }}>\n                        <Select\n                          // This is pretty hacky and we should probably remove it but there needs to be backwards compatibility since some existing data is not correct so it stays for now. Cant rely on data being fixed :/\n                          value={discount.manufacturerId || (manufacturers.find(x => x.get('value') === discount.manufacturer) || Map()).get('id') || ''}\n                          onChange={this.handleFieldChange('manufacturer', discounts, i)}\n                        >\n                          {manufacturers.map(manufacturer => (\n                            <MenuItem key={manufacturer.get('id')} value={manufacturer.get('id')}>\n                              {manufacturer.get('value')}\n                            </MenuItem>\n                          ))}\n                        </Select>\n                      </Tooltip>\n                      <FormHelperText>{discountsTouched && !discount.category && !discount.manufacturer && t('contactDrawerEdit.discountReqError')}</FormHelperText>\n                    </FormControl>\n                    <FormControl error={discountsTouched && !discount.category && !discount.manufacturer} fullWidth={true}>\n                      <InputLabel>\n                        <Typography variant='body2'>\n                          {t('contactDrawerEdit.category')}\n                        </Typography>\n                      </InputLabel>\n                      <Tooltip title={discount.category || ''} classes={{ popper: classes.tooltip }}>\n                        <Select\n                          // This is pretty hacky and we should probably remove it but there needs to be backwards compatibility since some existing data is not correct so it stays for now. Cant rely on data being fixed :/\n                          value={discount.categoryId || (categories.find(x => x.get('value') === discount.category) || Map()).get('id') || ''}\n                          onChange={this.handleFieldChange('category', discounts, i)}\n                        >\n                          {categories.map(category => (\n                            <MenuItem key={category.get('id')} value={category.get('id')}>\n                              {category.get('label') || category.get('value')}\n                            </MenuItem>\n                          ))}\n                        </Select>\n                      </Tooltip>\n                      <FormHelperText>{discountsTouched && !discount.category && !discount.manufacturer && t('contactDrawerEdit.discountReqError')}</FormHelperText>\n                    </FormControl>\n                  </DrawerRow>\n                  <DrawerRow\n                    drawerView={false}\n                    childrenJustify='space-between'\n                  >\n                    <Grid item={true} xs={6}>\n                      <FormControl error={discountsTouched && !discount.type} fullWidth={true}>\n                        <InputLabel>\n                          <Typography variant='body2'>\n                            {t('contactDrawerEdit.discountSelect')}\n                          </Typography>\n                        </InputLabel>\n                        <Select\n                          value={discount.type || ''}\n                          onChange={this.handleFieldChange('type', discounts, i)}\n                        >\n                          {[\n                            {\n                              type: 'discount',\n                              display: t('contactDrawerEdit.discount')\n                            },\n                            {\n                              type: 'margin',\n                              display: t('contactDrawerEdit.margin')\n                            },\n                            {\n                              type: 'multiplier',\n                              display: t('contactDrawerEdit.multiplier')\n                            }\n                          ].map(type => (\n                            <MenuItem key={type.display} value={type.type}>\n                              {type.display}\n                            </MenuItem>\n                          ))}\n                        </Select>\n                        <FormHelperText>{discountsTouched && !discount.type && t('contactDrawerEdit.required')}</FormHelperText>\n                      </FormControl>\n                    </Grid>\n                    <Grid item={true} xs={4}>\n                      <FormControl error={discountsTouched && !discount.amount} fullWidth={true}>\n                        <InputLabel>\n                          <Typography variant='body2'>\n                            {t('contactDrawerEdit.value')}\n                          </Typography>\n                        </InputLabel>\n                        <Input\n                          value={discount.amount || ''}\n                          onChange={this.handleFieldChange('amount', discounts, i)}\n                          classes={{\n                            // This below valueInput hack is pure filth, just really gross and bad. Never do this, and try to forget that I ever did this please.\n                            input: classes.valueInputHack\n                          }}\n                        />\n                        <FormHelperText>{discountsTouched && !discount.amount && t('contactDrawerEdit.required')}</FormHelperText>\n                      </FormControl>\n                    </Grid>\n                    <Grid item={true} xs={1} container={true} justify='center' alignItems='center' className={classes.deleteButtonContainer}>\n                      <IconButton onClick={() => this.addToDeleteDiscounts(discount, i)}>\n                        <DeleteIcon fontSize='small' />\n                      </IconButton>\n                    </Grid>\n                  </DrawerRow>\n                  <Grid\n                    container={true}\n                    item={true}\n                    wrap='nowrap'\n                    alignItems='center'\n                    className={classes.discountErrorMessage}\n                    style={{\n                      display: duplicatedDiscounts[i] ? 'flex' : 'none'\n                    }}\n                  >\n                    <Grid item={true} xs={2} />\n                    <Grid item={true} xs={10}>\n                      <FormHelperText error={true}>\n                        {duplicatedDiscounts[i] && t('contactDrawerEdit.discountDupError')}\n                      </FormHelperText>\n                    </Grid>\n                  </Grid>\n                  {i !== discounts.length - 1 && <Divider />}\n                </Grid>\n              ))}\n              {\n                displayContactSearch && (\n                  <div className={classes.contactsSearchContainer} ref={this.searchContactsRef}>\n                    <DrawerRow\n                      drawerView={false}\n                    >\n                      <Autocomplete\n                        PopperComponent={popperProps => (\n                          <Popper\n                            {...popperProps}\n                            modifiers={{\n                              computeStyle: {\n                                gpuAcceleration: false\n                              }\n                            }}\n                          />\n                        )}\n                        renderInput={params => (\n                          <TextField\n                            {...params}\n                            inputRef={this.searchContactInputRef}\n                            fullWidth={true}\n                            placeholder={t('contactDrawerEdit.contactSearchPlaceholder')}\n                            inputProps={{\n                              ...params.inputProps,\n                              value: contactsSearchInputValue\n                            }}\n                            InputProps={{\n                              ...params.InputProps,\n                              classes: { input: classes.contactsSearchPlaceholder, root: classes.contactsSeachRoot },\n                              startAdornment: (\n                                <InputAdornment position=\"start\">\n                                  <SearchIcon className={classes.contactsSearchIcon} />\n                                </InputAdornment>\n                              )\n                            }}\n                          />\n                        )}\n                        inputValue={contactsSearchInputValue}\n                        value={contactsSearchValue}\n                        options={contactsArray}\n                        onInputChange={this.handleInputValueChange}\n                        onChange={(event: object, val: any) => val && (discounts.length ? this.handleOpenDiscountConfirmDialog(val.id) : this.handleCopyDiscounts(val.id))}\n                        getOptionLabel={option => contactsSearchInputValue}\n                        renderOption={option => option && (\n                          <Grid item={true} container={true} direction='column'>\n                            <Typography variant='subtitle1' color='textPrimary'>{option.name}</Typography>\n                            <Typography variant='subtitle1' color='textPrimary'>{option.organization}</Typography>\n                            <Typography variant='body2'>{option.email}</Typography>\n                            <Typography variant='body2'>{option.contactType}</Typography>\n                            <Typography variant='body2'>{option.address1}</Typography>\n                            <Typography variant='body2'>{option.cityName} {option.provinceCode} {option.countryName}</Typography>\n                            <Divider className={classes.divider} light={true} />\n                          </Grid>\n                        )}\n                        closeIcon={null}\n                        blurOnSelect={true}\n                        freeSolo={true}\n                        openText={'Open'}\n                        noOptionsText={t('contactDrawerEdit.noOptions')}\n                        className={classes.contactsSearch}\n                      />\n                    </DrawerRow>\n                  </div>\n                )\n              }\n              <Grid container={true} justify='flex-end'>\n                <Button\n                  color='primary'\n                  onClick={this.handleOpenDiscountMenu}\n                  endIcon={<ArrowDropDownIcon />}\n                  className={classes.addButton}\n                >\n                  {t('contactDrawerEdit.addDiscountButton')}\n                </Button>\n                <Menu\n                  anchorEl={discountMenuAnchorEl}\n                  open={Boolean(discountMenuAnchorEl)}\n                  onClose={this.handleCloseDiscountMenu}\n                >\n                  <MenuItem onClick={this.addEmptyDiscount}>\n                    {t('contactDrawerEdit.addNewDiscount')}\n                  </MenuItem>\n                  <MenuItem onClick={this.handleDisplayContactSearch}>\n                    {t('contactDrawerEdit.copyDiscount')}\n                  </MenuItem>\n                </Menu>\n                <Popover\n                  anchorEl={this.searchContactsRef.current}\n                  open={openDiscountConfirmation}\n                  onClose={this.handleCloseDiscountConfirmDialog}\n                  anchorOrigin={{\n                    vertical: 'top',\n                    horizontal: 'center',\n                  }}\n                  transformOrigin={{\n                    vertical: 'bottom',\n                    horizontal: 'center',\n                  }}\n                >\n                  <Grid container={true} direction='column' alignItems='center' className={classes.discountConfirmationContainer}>\n                    <NotificationImportantIcon color='primary' fontSize='large' />\n                    <Grid container={true} direction='column' alignItems='center' className={classes.confirmationText}>\n                      <Typography color='textPrimary'>\n                        {t('contactDrawerEdit.confirmReplaceMessagePt1')}\n                      </Typography>\n                      <Typography color='textPrimary'>\n                        {t('contactDrawerEdit.confirmReplaceMessagePt2')}\n                      </Typography>\n                    </Grid>\n                    <Grid container={true} justify='space-around'>\n                      <Button\n                        color='primary'\n                        onClick={this.handleCloseDiscountConfirmDialog}\n                      >\n                        {t('formButtons.cancel')}\n                      </Button>\n                      <Button\n                        color='primary'\n                        variant='contained'\n                        onClick={() => this.handleCopyDiscounts()}\n                      >\n                        {t('formButtons.yes')}\n                      </Button>\n                    </Grid>\n                  </Grid>\n                </Popover>\n              </Grid>\n            </Grid>\n          }\n          {\n            (isAq && !isRestrictedOutsideSalesRep) && (\n              <Tooltip title={isEmail(formValues?.get('email')) ? '' : t('contactDrawerEdit.setAsDefaultEmailDisabledTooltip')}>\n                <div>\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='setAsDefaultEmail'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('contactDrawerEdit.setAsDefaultEmail'),\n                      variant: 'single',\n                      inputProps: {\n                        color: 'primary',\n                      },\n                      disabled: !isEmail(formValues?.get('email')),\n                      formControlLabelProps: {\n                        style: {\n                          marginRight: 0\n                        }\n                      },\n                      helperText: false\n                    }}\n                  />\n                </div>\n              </Tooltip>\n            )\n          }\n          <DrawerEditCTA handleClose={this.toggleDrawer} />\n        </form>\n      </Grid>\n    );\n  }\n}\n\nconst chipStyle = (theme: Theme): StyleRules => ({\n  icon: {\n    margin: 0,\n    padding: 0,\n    color: theme.palette.grey['100'],\n    '&:hover': {\n      color: theme.palette.grey['300'],\n    }\n  },\n  createContact: {\n    width: '100%',\n    backgroundColor: 'transparent',\n    boxShadow: 'none',\n    color: theme.palette.primary[800],\n    '&:hover': {\n      backgroundColor: 'transparent',\n    }\n  },\n});\n\nconst styles = (theme: Theme): StyleRules => ({\n  body: {\n    padding: theme.spacing(3, 3, 0, 3),\n    color: theme.palette.text.primary\n  },\n  drop: {\n    height: 100,\n    backgroundColor: theme.palette.grey[300],\n    border: '1px dashed #bbb',\n  },\n  title: {\n    marginBottom: theme.spacing(),\n    color: theme.palette.text.primary,\n  },\n  discountContainer: {\n    padding: theme.spacing(1, 0, 0),\n    position: 'relative',\n    '&:before': {\n      content: '\"\"',\n      position: 'absolute',\n      backgroundColor: '#EB9316',\n      height: '90%',\n      width: '2px',\n      top: '50%',\n      transform: 'translateY(-50%)',\n      left: theme.spacing()\n    }\n  },\n  contactsSearchContainer: {\n    width: '100%',\n    marginTop: theme.spacing()\n  },\n  contactsSearch: {\n    width: '100%',\n    position: 'relative',\n    '&:before': {\n      content: '\"\"',\n      position: 'absolute',\n      backgroundColor: '#EB9316',\n      height: '100%',\n      width: '2px',\n      top: '50%',\n      transform: 'translateY(-50%)',\n      left: theme.spacing(-2.5)\n    }\n  },\n  contactsSearchIcon: {\n    color: theme.palette.grey[600]\n  },\n  discountErrorMessage: {\n    paddingBottom: theme.spacing(3)\n  },\n  uploadFileContainer: {\n    marginBottom: theme.spacing(),\n    height: theme.spacing(18)\n  },\n  bottonMargin: {\n    marginBottom: theme.spacing(),\n  },\n\n  deleteButtonContainer: {\n    height: '100%',\n    alignSelf: 'center'\n  },\n  // This below valueInput hack is pure filth, just really gross and bad. Never do this, and try to forget that I ever did this please.\n  valueInputHack: {\n    paddingTop: theme.spacing(1.375)\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200]\n    },\n  },\n  tooltip: {\n    zIndex: 1300\n  },\n  discountIcon: {\n    marginTop: theme.spacing(3.25)\n  },\n  discountConfirmationContainer: {\n    padding: theme.spacing(1.5, 3)\n  },\n  confirmationText: {\n    margin: theme.spacing(1, 0)\n  },\n  contactsSeachRoot: {\n    paddingBottom: '2px !important'\n  },\n  contactsSearchPlaceholder: {\n    fontSize: theme.typography.body1.fontSize\n  },\n  addButton: {\n    marginTop: theme.spacing()\n  },\n  divider: {\n    marginTop: theme.spacing(2)\n  },\n  characterCount: {\n    textAlign: 'right',\n    marginBottom: 16\n  },\n  inputLabelFormControl: {\n    position: 'relative',\n  },\n  inputFormControl: {\n    marginTop: `0px !important`,\n  },\n  ...chipStyle(theme)\n});\n\nexport const DEFAULT_FORM_NAME = 'ContactForm';\nexport const FIELD_NAME = 'ContactDrawerUpload';\n\nconst transformInitialValues = (contactData, defaultCustomEmail, site) => {\n  const [officeNumber, extension] = (contactData.get('officeNumber') || '').split(',');\n  return contactData.withMutations((ctx) => {\n    const countryId = contactData.get('countryId');\n    const countryName = contactData.get('countryName');\n\n    const cityId = contactData.get('cityId');\n    const cityName = contactData.get('cityName');\n\n    const provinceId = contactData.get('provinceId');\n    const provinceName = contactData.get('provinceName');\n\n    const pricingRegion = contactData.get('region');\n\n    ctx\n      .set('officeNumber', officeNumber)\n      .set('extension', extension)\n\n    if (countryName) {\n      ctx.set('countryName', Map({\n        id: countryId,\n        value: countryName\n      }));\n    }\n    if (provinceName) {\n      ctx.set('provinceName', Map({\n        id: provinceId,\n        value: provinceName\n      }));\n    }\n    if (cityName) {\n      ctx.set('cityName', Map({\n        id: cityId,\n        value: cityName\n      }));\n    }\n    if (!pricingRegion) {\n      ctx.set('region', fromJS({ id: 'default', value: 'Default' }));\n    }\n    if (site === SiteName.pt && defaultCustomEmail && defaultCustomEmail === contactData.get('email')) {\n      ctx.set('setAsDefaultEmail', true);\n    } else {\n      ctx.set('setAsDefaultEmail', false);\n    }\n  })\n}\n\nconst mapStateToProps = (state, ownProps: UserContactDrawerDetailsContactEditType) => {\n  const site = makeSelectSite()(state);\n  const initialValues = !ownProps.contactData ? Map<string, any>() : transformInitialValues(ownProps.contactData, ownProps.defaultCustomEmail, site);\n  const form = ownProps.form != null ? ownProps.form : DEFAULT_FORM_NAME;\n\n  return {\n    form,\n    initialValues,\n    site,\n    ...createStructuredSelector({\n      customerDiscounts: makeSelectCustomerDiscounts(),\n      manufacturers: makeSelectManufacturer(),\n      categories: makeSelectCategory(),\n      isModalOpen: makeSelectOverlayComponent(DRAWER_ID),\n      formValues: getFormValues(form),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      contacts: makeSelectSearchedContactsBySearchTerm(),\n      salesRepUsers: makeSelectUsersForSalesRep(),\n      firmId: makeSelectUserFirmId(),\n      userDefinedLabel: makeSelectUserDefinedLabel(),\n      isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n      pricingRegions: makeSelectShareContactsPricingRegions(),\n    })(state)\n  };\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getProvinces: (id: string | number) => {\n      dispatch(new GetProvinceAction(id));\n    },\n    getCities: (id: string | number) => {\n      dispatch(new GetCityAction(id));\n    },\n    clearLocationInfo: () => {\n      dispatch(new ClearLocationInfo());\n    },\n    searchContacts: (searchTerm: string) => {\n      dispatch(new SearchContactsBySearchTermAction({ searchTerm }));\n    },\n    resetSearchContacts: () => {\n      dispatch(new ResetSearchContactsBySearchTermAction());\n    },\n    getCustomerDiscounts: (customerId: number) => {\n      dispatch(new GetDiscountsForCustomerId({ customerId }))\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IUserContactDrawerDetailsContactEditComponentProps>>(\n  withAtsApi(),\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: DEFAULT_FORM_NAME }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(UserContactDrawerDetailsContactEdit);\n","import { List } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { ListItem } from '../../models';\n\ninterface ICountryVisibility {\n  enabledCountryIds?: number[];\n  filterOutCountryIds?: number[];\n}\n\n/**\n * Chooses which countries to show in the country field:\n * - enabledCountryIds set   -> keep the full list; non-enabled entries are shown but\n *                              disabled (see getCountryDisabledPredicate), not removed.\n * - filterOutCountryIds set -> remove those countries from the list.\n * - neither                 -> the full list.\n */\nexport const selectVisibleCountries = (\n  rawCountriesList: List<IMap<ListItem>>,\n  { enabledCountryIds, filterOutCountryIds }: ICountryVisibility,\n): List<IMap<ListItem>> => {\n  if (enabledCountryIds) {\n    return rawCountriesList;\n  }\n  if (filterOutCountryIds) {\n    return rawCountriesList.filter((country) => !filterOutCountryIds.includes(Number(country.get('id'))));\n  }\n  return rawCountriesList;\n};\n\n/**\n * Builds the FieldAutoSuggest `getSuggestionDisabled` predicate for the country field:\n * disables any country not in enabledCountryIds. Returns undefined when there is no\n * restriction, so the field behaves normally.\n */\nexport const getCountryDisabledPredicate = (\n  enabledCountryIds?: number[],\n): ((country: { id?: number | string }) => boolean) | undefined => {\n  if (!enabledCountryIds) {\n    return undefined;\n  }\n  const enabled = new Set(enabledCountryIds.map(Number));\n  return (country) => !enabled.has(Number(country.id));\n};\n","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, ListItem, Grid, useTheme, Typography, Tooltip, makeStyles, createStyles, Theme } from '@material-ui/core';\nimport { BaseFieldProps, change, InjectedFormProps } from 'redux-form';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport { FieldReactSelect, FieldTextField } from '../../../components';\nimport { fieldReactSelectStyles, IFieldReactSelectComponentProps } from '../../../components/FieldReactSelect';\nimport { compose, Dispatch } from 'redux';\nimport { connect, useSelector } from 'react-redux';\nimport { Map, List, fromJS, OrderedMap } from 'immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectAttributeDialogState } from '../../../modules/ApplicationModule/selectors';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { SearchAttributesAction, SearchAttributeOptionsAction, SetSelectedAttributeIdAction } from '../../../modules/PimModule/actions';\nimport { makeSelectPimAttributes, makeSelectPimAttributeOptionsBySelectedAttributeId } from '../../../modules/PimModule/selectors';\nimport { SetAttributeDialogStateAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { IAttributeOptionDialogState } from '../../../modules/ApplicationModule/reducer';\nimport { Filter, PureAttribute, PureAttributeOption } from '../../../models';\nimport PimAttribute from '../../../models/PimAttribute';\nimport { required } from '../../../validators';\nimport PimAttributeOption from '../../../models/PimAttributeOption';\nimport NoOptionsMessage from '../Attributes/NoOptionsMessage';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { ATTRIBUTE_DIALOG_ID } from '../../../containers/PimAttributesListPage/AttributeDialog';\nimport { DESCRIPTION_DIALOG_ID } from '../../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../components/FieldSwitch';\nimport { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { makeSelectCanManageAttributeManagement, makeSelectIdentityObject, makeSelectSite, makeSelectUserHasPimPrintDescriptionAcl } from '../../../modules/AtsModule/selectors';\nimport { makeSelectCategory } from '../../../modules/AccountModule/selectors';\n\nexport const ATTRIBUTE_DIALOG_FORM = 'FeaturesDialogForm';\n\ninterface IFeaturesDialogComponentProps {\n  formName: string;\n  brandKey: 'brand' | 'manufacturer';\n  isPimTool: boolean;\n}\n\ninterface IFeaturesDialogProps extends IFeaturesDialogComponentProps {\n  dispatch: Dispatch;\n  searchAttributes: (categoryId: number, filters: Filter) => void;\n  searchOptions: (categoryId: number, attributeId: number, filters?: Filter) => void;\n  clearAttributeDialogState: () => void;\n  setAttributeId: (id: number) => void;\n  attributes: List<IMap<PimAttribute>>;\n  options: List<IMap<PimAttributeOption>>;\n  attributeDialogState: IMap<IAttributeOptionDialogState>;\n  formValues: any;\n  seriesEditFormValues: any;\n  hasPimPrintDescriptionAcl: boolean;\n  canManageAttributeManagement: boolean;\n}\n\ntype FeaturesDialogProps = IFeaturesDialogProps & InjectedFormProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  iconPadding: {\n    paddingLeft: theme.spacing(2),\n  },\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200],\n    }\n  },\n  printDescriptionContainer: {\n    marginTop: theme.spacing(),\n  },\n}));\n\n\nconst FeaturesDialog: React.FC<FeaturesDialogProps> = props => {\n  const {\n    searchAttributes,\n    searchOptions,\n    clearAttributeDialogState,\n    reset,\n    handleSubmit,\n    dispatch,\n    t,\n    setAttributeId,\n    attributes,\n    options,\n    attributeDialogState,\n    formValues,\n    formName,\n    brandKey,\n    seriesEditFormValues = Map(),\n    hasPimPrintDescriptionAcl,\n    isPimTool,\n    canManageAttributeManagement\n  } = props;\n  const classes = useStyles();\n  const theme = useTheme();\n  const categoriesList = useSelector(makeSelectCategory());\n\n  const [attributeInputValue, setAttributeInputValue] = React.useState('');\n  const [descriptionInputValue, setDescriptionInputValue] = React.useState('');\n  const [bypassFrozenCategory, setBypassFrozenCategory] = React.useState(false);\n\n  const formAttribute = formValues && formValues.get('attribute');\n  const formAttributeId = formAttribute && formAttribute.get('attributeId');\n\n  const dialogOpen = attributeDialogState && attributeDialogState.get('open') || false;\n  const dialogAttributeValues = attributeDialogState && attributeDialogState.getIn(['attribute', 'values']);\n  const dialogAttributeId = attributeDialogState && attributeDialogState.getIn(['attribute', 'id'])\n                      || attributeDialogState && attributeDialogState.getIn(['attribute', 'attributeId']);\n\n  const seriesCategoryId: number = seriesEditFormValues.getIn(['categoryName', 'id']);\n  const isCategoryLocked: boolean = categoriesList?.find(category => category.get('id') === seriesCategoryId)?.get('isLocked');\n  const seriesFeatures = seriesEditFormValues.get('attributes') || Map();\n  const seriesOptions = seriesEditFormValues.get('attributeOptions') || Map();\n  const seriesAttributeIds = seriesFeatures.merge(seriesOptions)\n    .toIndexedSeq()\n    .filter((attr) => attr.get('values').some((value) => value.get('status') !== 'deleted'))\n    .map(attr => attr && (attr.get('id') || attr.get('attributeId')))\n    .toArray();\n\n  const brandId = seriesEditFormValues.getIn([brandKey, 'id']);\n  const brandFilter = brandId\n    ? [{\n        'manufacturerId': {\n          'eq': brandId\n        }\n      }]\n    : [];\n  const brandOnlyFilter = {\n    'and': [\n      ...brandFilter\n    ]\n  };\n  const activeStatusFilter = [{\n    'status.name': {\n      'eq': 'active'\n    }\n  }];\n\n\n  // dont't return attributes already in series\n  const attributeExclusionFilter = seriesAttributeIds && seriesAttributeIds.length > 0 ? [{\n    'attributeId': {\n      'nin': seriesAttributeIds\n    }\n  }] : [];\n\n  React.useEffect(() => {\n    if (dialogOpen && seriesCategoryId) {\n      const attributeFilter = {\n        'and': [\n          ...attributeExclusionFilter,\n          ...brandFilter\n        ]\n      };\n\n      searchAttributes(seriesCategoryId, attributeFilter);\n      if (dialogAttributeId) {\n        setAttributeId(dialogAttributeId);\n        searchOptions(seriesCategoryId, dialogAttributeId, {\n          'and': [...brandFilter, ...activeStatusFilter]\n        });\n      }\n    }\n  }, [attributeDialogState]);\n\n  React.useEffect(() => {\n    if (isCategoryLocked && formAttributeId && attributes) {\n      const selectedAttribute = attributes.find(attr => attr.get('attributeId') === formAttributeId);\n      if (selectedAttribute?.get('allowOverride')) {\n        setBypassFrozenCategory(true);\n      }\n    } else {\n      setBypassFrozenCategory(false);\n    }\n  }, [formAttributeId, attributes]);\n\n  const onAttributeChange = (val: IMap<PimAttribute>) => {\n    const attributeId = val && val.get('attributeId');\n\n    // clear description if changing to different attribute\n    if (attributeId !== formAttributeId) {\n      dispatch(change(ATTRIBUTE_DIALOG_FORM, 'description', null));\n      setAttributeId(attributeId);\n      searchOptions(seriesCategoryId, attributeId, {\n        'and': [...brandFilter, ...activeStatusFilter]\n      });\n    }\n  };\n\n  const onAttributeInputChange = (val: string, actionMeta) => {\n    setAttributeInputValue(val);\n    if (seriesCategoryId && (actionMeta.action === 'input-change' || actionMeta.action === 'input-blur')) {\n      const filter = {\n        'and': [\n          ...attributeExclusionFilter,\n          ...brandFilter,\n          {\n            'or': [\n              {\n                'attributeKey': {\n                    'like': val\n                }\n              },\n              {\n                'name': {\n                  'like': val\n                }\n              },\n              // {\n              //   'attribute.name': {\n              //     'like': val\n              //   }\n              // }\n            ]\n          }\n        ]\n      };\n\n      searchAttributes(seriesCategoryId, filter);\n    }\n  };\n\n  const handleClose = () => {\n    clearAttributeDialogState();\n    reset();\n  };\n\n  const onSubmit = (values) => {\n    const attributeId = values.getIn(['attribute', 'attributeId']);\n    const attributeKey = values.getIn(['attribute', 'attributeKey']);\n    const name = values.getIn(['attribute', 'name']);\n    const optionId = values.getIn(['description', 'optionId']);\n    const description = values.getIn(['description', 'description']);\n    const value = values.getIn(['description', 'value']);\n    const unit = values.getIn(['description', 'unit']);\n    const printDescription = values.get('printDescription');\n    const seriesAttributeOptionId = values.getIn(['description', 'seriesAttributeOptionId']) ?? null;\n\n    const transformedValue = fromJS({\n      id: attributeId,\n      key: attributeKey,\n      name,\n      isAttribute: true,\n      isOption: false,\n      values: fromJS([\n        {\n          id: optionId,\n          description,\n          unit,\n          value,\n          key: attributeKey,\n          printDescription,\n          seriesAttributeOptionId,\n        }\n      ])\n    });\n\n    const editSeriesFeature = () => {\n      return seriesFeatures && seriesFeatures.reduce((acc, val, key) => {\n        const id = val.get('id') || val.get('attributeId');\n        if (id === dialogAttributeId) {\n          return acc.set(attributeKey, transformedValue);\n        }\n        return acc.set(key, val);\n      }, OrderedMap());\n    };\n\n    const addSeriesFeature = () => {\n      return seriesFeatures && seriesFeatures.merge(fromJS({\n        [attributeKey]: transformedValue\n      }));\n    };\n\n    const updatedSeriesAttribute = dialogAttributeId && dialogAttributeValues ? editSeriesFeature() : addSeriesFeature();\n    dispatch(change(formName, 'attributes', updatedSeriesAttribute));\n    handleClose();\n  };\n\n  const openDialog = (id: string) => {\n    dispatch(new ToggleOverlayComponentAction({\n      id,\n      open: true\n    }));\n  };\n\n  return (\n    <Dialog\n      open={dialogOpen}\n      onClose={handleClose}\n      aria-labelledby='add-series-attribute-title'\n      fullWidth={true}\n      scroll='body'\n    >\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <DialogTitle id='add-series-attribute-title'>\n          {dialogAttributeId && dialogAttributeValues ? t('AttributesDialog.editSeriesFeature') : t('AttributesDialog.addSeriesFeature')}\n        </DialogTitle>\n        <DialogContent>\n          <Grid container={true} alignItems='center'>\n            <Grid xs={11} item={true}>\n              <Typography variant='caption' noWrap={true}>\n                {t('AttributesDialog.attribute')}\n              </Typography>\n              <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                name='attribute'\n                component={FieldReactSelect}\n                validate={required}\n                inputProps={{\n                  options: attributes && attributes.toList(),\n                  getOptionValue: (option) => option.get('value'),\n                  getOptionLabel: (option) => (\n                    <div>\n                      {option && option.get('name')} - <span className={classes.span}>{option && option.get('attributeKey')}</span>\n                    </div>\n                  ),\n                  filterOption: ({ data }, inputValue: string) => {\n                    const name: string = data.get('name').toLowerCase();\n                    const attributeKey: string = data.get('attributeKey').toLowerCase();\n                    return name.includes(inputValue.toLowerCase()) || attributeKey.includes(inputValue.toLowerCase());\n                  },\n                  placeholder: t('AttributesDialog.addAttribute'),\n                  components: {\n                    Option: option => (\n                      <ListItem value={option.value} disableGutters={false} {...option.innerProps} className={classes.optionComponentRoot}>\n                        {option.label}\n                      </ListItem>\n                    ),\n                  },\n                  styles: fieldReactSelectStyles(theme),\n                  menuPosition: 'fixed',\n                  menuShouldScrollIntoView: false,\n                  inputValue: attributeInputValue,\n                  onChange: onAttributeChange,\n                  onInputChange: onAttributeInputChange,\n                  noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newAttribute')} disableButton={isCategoryLocked} onClick={canManageAttributeManagement ? () => {\n                    dispatch(new SetOverlayComponentPropsAction({\n                      id: ATTRIBUTE_DIALOG_ID,\n                      props: {\n                        name: attributeInputValue,\n                        successCB: (newAttribute: IMap<PureAttribute>) => {\n                          const newAttributeId = newAttribute.get('id');\n                          searchAttributes(\n                            seriesCategoryId,\n                            {'and': [\n                              ...attributeExclusionFilter,\n                              ...brandFilter\n                            ]});\n\n                          const convertedAttribute = fromJS({\n                            attributeId: newAttributeId,\n                            attributeKey: newAttribute.get('key'),\n                            name: newAttribute.get('name'),\n                            display: null\n                          });\n                          onAttributeChange(convertedAttribute);\n\n                          // pre-populate feature modal form with new attribute\n                          dispatch(change(ATTRIBUTE_DIALOG_FORM, 'attribute', convertedAttribute));\n                          dispatch(change(ATTRIBUTE_DIALOG_FORM, 'printDescription.csi', null));\n                        }\n                      }\n                    }));\n                    openDialog(ATTRIBUTE_DIALOG_ID);\n                  } : null} />,\n                }}\n                formControlProps={{\n                  fullWidth: true\n                }}\n              />\n            </Grid>\n            <Grid xs={1} item={true}/>\n            <Grid xs={11} item={true}>\n              <Typography variant='caption' noWrap={true}>\n                {t('AttributesDialog.description')}\n              </Typography>\n              <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                name='description'\n                component={FieldReactSelect}\n                validate={required}\n                inputProps={{\n                  options: options && options.toList(),\n                  getOptionValue: (option) => option.get('value'),\n                  getOptionLabel: (option) => (\n                    <Tooltip title={[option.get('description'), option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}>\n                      <div>\n                        {option.get('description')} - <span className={classes.span}>{[option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}</span>\n                      </div>\n                    </Tooltip>\n                  ),\n                  filterOption: (option, inputValue: string) => {\n                    const label = option.label.props.title.toLowerCase();\n                    return label.includes(inputValue.toLowerCase());\n                  },\n                  placeholder: t('AttributesDialog.addDescription'),\n                  components: {\n                    Option: option => (\n                      <ListItem value={option.value} disableGutters={false} {...option.innerProps} className={classes.optionComponentRoot}>\n                        {option.label}\n                      </ListItem>\n                    ),\n                  },\n                  styles: fieldReactSelectStyles(theme),\n                  menuPosition: 'fixed',\n                  menuShouldScrollIntoView: false,\n                  isDisabled: !Boolean(formAttribute),\n                  onInputChange: (val: string) => {\n                    setDescriptionInputValue(val);\n                  },\n                  onChange: (val, reason) => {\n                    const seriesAttributeOptionId = formValues?.getIn(['description', 'seriesAttributeOptionId']);\n                    if (seriesAttributeOptionId) {\n                      dispatch(change(ATTRIBUTE_DIALOG_FORM, `description.seriesAttributeOptionId`, seriesAttributeOptionId));\n                    }\n                  },\n                  noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newDescription')} disableButton={isCategoryLocked && !bypassFrozenCategory} onClick={canManageAttributeManagement ? () => {\n                    dispatch(new SetOverlayComponentPropsAction({\n                      id: DESCRIPTION_DIALOG_ID,\n                      props: {\n                        description: descriptionInputValue,\n                        successCB: (newAttributeOption: IMap<PureAttributeOption>) => {\n                          const newAttributeOptionId = newAttributeOption.get('id');\n                          searchOptions(seriesCategoryId, formAttributeId, brandOnlyFilter);\n\n                          const convertedAttributeOption = fromJS({\n                            optionId: newAttributeOptionId,\n                            optionKey: newAttributeOption.get('key'),\n                            description: newAttributeOption.get('description'),\n                            unit: newAttributeOption.get('unit'),\n                            value: newAttributeOption.get('value'),\n                            seriesAttributeOptionId: formValues?.getIn(['description', 'seriesAttributeOptionId']) ?? null,\n                          });\n\n                          // pre-populate feature modal form with new attribute option description\n                          dispatch(change(ATTRIBUTE_DIALOG_FORM, 'description', convertedAttributeOption));\n                          dispatch(change(ATTRIBUTE_DIALOG_FORM, 'printDescription.csi', null));\n                        }\n                      }\n                    }));\n                    openDialog(DESCRIPTION_DIALOG_ID);\n                  } : null} />,\n                }}\n                formControlProps={{\n                  fullWidth: true\n                }}\n              />\n            </Grid>\n            {hasPimPrintDescriptionAcl && isPimTool &&\n              <Grid\n                xs={11}\n                item={true}\n              >\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name='displayPrintDescription'\n                  component={FieldSwitch}\n                  props={{\n                    label: t('SeriesDetailPage.displayPrintDescription'),\n                    inputProps: {\n                      color: 'primary'\n                    }\n                  }}\n                />\n                { formValues && formValues.get('displayPrintDescription') &&\n                  <Grid container={true} className={classes.printDescriptionContainer}>\n                    <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center'>\n                      <Typography>{t('SeriesDetailPage.printDescription')}</Typography>\n                      <Button\n                        color='primary'\n                        onClick={() => dispatch(change(ATTRIBUTE_DIALOG_FORM, 'printDescription.csi', null))}\n                        disabled={!formValues.getIn(['printDescription', 'csi'])}\n                      >{t('formButtons.clear')}</Button>\n                    </Grid>\n                    <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                      name='printDescription.csi'\n                      props={{\n                        inputProps: {\n                          type: 'text',\n                          multiline: true\n                        },\n                        formControlProps: {\n                          fullWidth: true\n                        }\n                      }}\n                      component={FieldTextField}\n                    />\n                  </Grid>\n                }\n              </Grid>\n            }\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={handleClose}\n            color='primary'\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            type='submit'\n          >\n            {t('AttributesDialog.addToSeries')}\n          </Button>\n        </DialogActions>\n      </form>\n    </Dialog>\n  );\n};\n\nconst getInitialValues = (attributeDialogState: IMap<IAttributeOptionDialogState>,\n   ) => {\n  // FeaturesDialog gets its initial attribute value either from the series or the recommended attributes list\n  // they have different shapes\n\n  const attribute = attributeDialogState && attributeDialogState.get('attribute');\n\n  if (attribute) {\n    const initialAttribute = fromJS({\n      attributeId: attribute.get('id') || attribute.get('attributeId'),\n      attributeKey: attribute.get('key') || attribute.get('attributeKey'),\n      name: attribute.get('name'),\n      display: null,\n    });\n\n    const values = attribute.get('values')?.filter((value) => value.get('status') !== 'deleted');\n    const initialDescription: Map<string, any> = values && values.size > 0\n    ? fromJS({\n        optionId: values.getIn([0, 'id']) || values.getIn([0, 'optionId']),\n        optionKey: values.getIn([0, 'key']) || values.getIn([0, 'optionKey']),\n        description: values.getIn([0, 'description']),\n        unit: values.getIn([0, 'unit']),\n        value: values.getIn([0, 'value']),\n        seriesAttributeOptionId: values.getIn([0, 'seriesAttributeOptionId']) ?? null,\n      })\n    : null;\n    return fromJS({\n      attribute: initialAttribute,\n      ...(initialDescription && { description: initialDescription}),\n      printDescription: values && values.size > 0 ? values.getIn([0, 'printDescription']) : null\n    });\n  }\n\n  return Map();\n\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const attributeDialogState = makeSelectAttributeDialogState()(state);\n  const initialValues = getInitialValues(attributeDialogState);\n\n  return {\n    initialValues,\n    attributeDialogState,\n    ...createStructuredSelector({\n      attributes: makeSelectPimAttributes(),\n      options: makeSelectPimAttributeOptionsBySelectedAttributeId(),\n      formValues: getFormValues(ATTRIBUTE_DIALOG_FORM),\n      seriesEditFormValues: getFormValues(ownProps.formName),\n      hasPimPrintDescriptionAcl: makeSelectUserHasPimPrintDescriptionAcl(),\n      canManageAttributeManagement: makeSelectCanManageAttributeManagement(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setAttributeId: (id: number) => {\n      dispatch(new SetSelectedAttributeIdAction(id));\n    },\n    searchAttributes: (categoryId: number, filters?: Filter) => {\n      dispatch(new SearchAttributesAction({\n        categoryId,\n        filters,\n      }));\n    },\n    searchOptions: (categoryId: number, attributeId: number, filters?: Filter) => {\n      dispatch(new SearchAttributeOptionsAction({\n        categoryId,\n        attributeId,\n        filters,\n      }));\n    },\n    clearAttributeDialogState: () => {\n      dispatch(new SetAttributeDialogStateAction(fromJS({\n        open: false,\n      })));\n    }\n  };\n};\n\nexport default compose<React.FC<IFeaturesDialogComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: ATTRIBUTE_DIALOG_FORM,\n    enableReinitialize: true,\n  }),\n)(FeaturesDialog);","import ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_PIM';\nconst gatewayEndPoint = 'ENDPOINT_APIGATEWAY';\n\nconst PimServiceApi = {\n\n  async searchFirmProducts(env: any, appId: string, searchProductsParams: any): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.post(`/search/firm-products?sharedProduct=null`, searchProductsParams);\n      if (response?.data?.payload?.pim?.firmProduct) {\n        return response?.data?.payload?.pim?.firmProduct;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error search firm product:', error);\n      throw error;\n    }\n  },\n\n\n  async createBatch(env: any, appId: string, newFirmProducts: any): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.post(`/mspim/firm-products.create.batch`, newFirmProducts);\n      if (response?.data?.payload?.mspim?.firmProducts) {\n        return response?.data?.payload?.mspim?.firmProducts;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error firm-products.create.batch:', error);\n      throw error;\n    }\n  },\n\n  async updateBatch(env: any, appId: string, firmProducts: any): Promise<any> {\n    try {\n      const baseURL = env.get(gatewayEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.post(`/mspim/firm-products.update.batch`, firmProducts);\n      if (response?.data?.payload?.mspim?.firmProducts) {\n        return response?.data?.payload?.mspim?.firmProducts;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error firm-products.update.batch:', error);\n      throw error;\n    }\n  },\n};\nexport default PimServiceApi;","import {List} from 'immutable';\nimport {checkIsDrawingChecked} from '../../../components/ProjectDetail/helpers';\n\nexport const checkIsSpecSelected = (projectSpecDetailConfig, spec) => {\n    const specId = spec.get('id');\n    const drawings = spec.get('drawings') ?? List();\n    return drawings.some((drawing) => {\n        const drawingId = drawing.get('id');\n        const drawingConfig = projectSpecDetailConfig.getIn([specId, drawingId]);\n        return checkIsDrawingChecked(drawingConfig);\n    });\n};\nexport const getSelectedSpecs = (projectSpecDetailConfig, specs) => {\n    return specs.valueSeq().filter((spec) => {\n        return checkIsSpecSelected(projectSpecDetailConfig, spec);\n    });\n};\nexport const getSelectedDrawings = (projectSpecDetailConfig, spec) => {\n    const specId = spec.get('id');\n    const drawings = spec.get('drawings') ?? List();\n    return drawings.filter((drawing) => {\n        const drawingId = drawing.get('id');\n        const drawingConfig = projectSpecDetailConfig.getIn([specId, drawingId]);\n        return checkIsDrawingChecked(drawingConfig);\n    });\n};","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n  if (isNativeReflectConstruct()) {\n    _construct = Reflect.construct;\n  } else {\n    _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) setPrototypeOf(instance, Class.prototype);\n      return instance;\n    };\n  }\n\n  return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeFunction from \"@babel/runtime/helpers/esm/isNativeFunction\";\nimport construct from \"@babel/runtime/helpers/esm/construct\";\nexport default function _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return construct(Class, arguments, getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return setPrototypeOf(Wrapper, Class);\n  };\n\n  return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import * as React from 'react';\nimport {\n  Button,\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n  CircularProgress,\n  MenuItem,\n} from '@material-ui/core';\nimport { components } from 'react-select';\nimport { compose, Dispatch } from 'redux';\nimport { Field } from 'redux-form/immutable';\nimport {\n  BaseFieldProps, change,\n} from 'redux-form';\nimport {\n  withTranslation, WithTranslation,\n} from 'react-i18next';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces/index';\nimport { fromJS, List, Map } from 'immutable';\nimport { connect, DispatchProp } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { StyleRules, useTheme } from '@material-ui/core/styles';\nimport { withAtsApi } from '../../contexts';\nimport { Contact } from '../../models';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../FieldReactSelect';\nimport { SearchContactsSucceededAction, SearchContactsAction, SelectContactAction } from '../../modules/AccountModule/actions';\nimport { debounce } from 'lodash';\nimport CancelRoundedIcon from '@material-ui/icons/CancelRounded';\nimport { styles as QuoteCustomersStyles } from '../QuoteCustomers';\nimport { chipStyle } from '../QuoteInfo/QuoteContactsForm';\nimport { DRAWER_ID } from '../../containers/MyContactsPage/constants';\nimport { CONTENT_EDIT_KEY } from '../UserContactDrawerDetails';\nimport { SetOverlayComponentContentAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { makeSelectSelectedContact, makeSelectStoredContactData } from '../../modules/ContactModule/selectors';\nimport { AddCustomerSalesRepsToQuoteAction, SelectQuoteCustomerAction } from '../../modules/QuoteEditModule/actions';\nimport { makeSelectContactsLoading } from '../../modules/AccountModule/selectors';\nimport { SetStoredContactDataAction } from '../../modules/ContactModule/actions';\nimport { useMinWidth } from '../../hooks/useMinWidth';\nimport styled from 'styled-components';\n\nconst OPTION_WIDTH_BREAKPOINT = 470;\n\nconst OptionWrapper = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  width: 100%;\n  white-space: pre-wrap;\n  word-break: break-word;\n`;\n\nconst PrimaryInfoColumn = styled.div`\n  flex: 0 0 100%;\n  min-width: 40%;\n  padding: 4px;\n\n  ${({ $wide }) =>\n    $wide &&\n    `\n    flex: 1 1 40%;\n  `}\n`;\n\nconst NoteColumn = styled.div`\n  flex: 0 0 100%;\n  min-width: 60%;\n  padding: 4px;\n\n  ${({ $wide }) =>\n    $wide &&\n    `\n    flex: 1 1 60%;\n  `}\n`;\n\nconst styles = (theme: Theme): StyleRules => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    overflow: 'inherit'\n  },\n  cardTitle: {\n    marginBottom: '24px'\n  },\n  menuItem: {\n    padding: 0,\n    '&:hover': {\n      backgroundColor: 'transparent',\n    },\n  },\n  ...QuoteCustomersStyles(theme),\n  ...chipStyle(theme)\n});\n\ninterface IQuoteContactsDropdownComponentProps {\n  fieldName: string;\n  title?: string;\n  subTitle: string;\n  options: List<IMap<Contact>>;\n  isMulti?: boolean;\n  children?: React.ReactNode;\n  inputProps?: any;\n  onSelect?: (selected: any) => void;\n  backspaceRemovesValue?: boolean;\n  useDivContainer?: boolean;\n}\n\ninterface IQuoteContactsDropdownProps extends IQuoteContactsDropdownComponentProps {\n  searchContacts: (searchTerm: string) => void;\n  clickHandler: () => void;\n  selectedContact: any;\n  storedContact: any;\n  isSearchingContacts: boolean;\n}\n\ntype QuoteContactsDropdownType = IQuoteContactsDropdownProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp;\n\nconst QuoteContactsDropdown: React.FC<QuoteContactsDropdownType> = (props) => {\n  const {\n    classes,\n    t,\n    fieldName,\n    title,\n    subTitle,\n    options,\n    isMulti = false,\n    children,\n    clickHandler,\n    searchContacts,\n    dispatch,\n    selectedContact,\n    isSearchingContacts,\n    storedContact,\n    inputProps = {},\n    onSelect,\n    backspaceRemovesValue = true,\n    useDivContainer = false,\n  } = props;\n\n  const theme = useTheme();\n  const debounceSearch = debounce(searchContacts, 500);\n  const { ref, isWide } = useMinWidth(OPTION_WIDTH_BREAKPOINT);\n\n  const valueLabel = (componentProps, SingleOrMulti: React.ComponentType<any>) => {\n    const { firstName, lastName, organization, email, name } = componentProps.data.toJS();\n    const displayName = name\n      || ((firstName || lastName) && [firstName, lastName].join(' '))\n      || organization\n      || email;\n\n    return (\n      <SingleOrMulti {...componentProps} key={componentProps.data.id}>\n        {componentProps.data.label || displayName}\n      </SingleOrMulti>\n    );\n  };\n\n  const Wrapper = React.useMemo(() => ({ children: _children }) => (\n    useDivContainer\n      ? <div ref={ref}>{_children}</div>\n      : <Card className={classes.card} ref={ref}>\n        <CardContent>{_children}</CardContent>\n      </Card>\n  ), [useDivContainer]);\n\n  return (\n    <Wrapper>\n      {title && <Typography variant='h6'>{title}</Typography>}\n      {subTitle && <Typography variant='caption' noWrap={true}>{subTitle}</Typography>}\n      <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n        name={fieldName}\n        component={FieldReactSelect}\n        props={{\n          formControlProps: {\n            fullWidth: true,\n          },\n          inputProps: {\n            placeholder: t('customers.selectPlaceholder'),\n            onInputChange: (e) => {\n              debounceSearch(e);\n              return e;\n            },\n            getOptionLabel: (option: IMap<Contact>) => [option.get('firstName'), option.get('lastName')].join(' '),\n            getOptionValue: (option: IMap<Contact>) => option.get('id'),\n            options,\n            filterOption: false,\n            isMulti,\n            isClearable: true,\n            backspaceRemovesValue,\n            onChange: (currentValue, reason) => {\n              if (reason) {\n                switch (reason.action) {\n                  case 'select-option':\n                    // add salesReps\n                    if (reason.option && reason.name === 'customers') {\n                      dispatch(new AddCustomerSalesRepsToQuoteAction({ salesReps: reason.option.get('salesReps') || List() }));\n                    }\n\n                    if (onSelect && typeof onSelect === 'function') {\n                      onSelect(reason.option);\n                    }\n                    break;\n                }\n              }\n            },\n            styles: {\n              control: providedStyles => ({\n                ...providedStyles,\n                borderWidth: `0 0 1px 0`,\n                borderRadius: '0',\n              }),\n              indicatorSeparator: providedStyles => ({\n                ...providedStyles,\n                backgroundColor: 'transparent',\n              }),\n              noOptionsMessage: providedStyles => ({\n                ...providedStyles,\n              }),\n              // menu: providedStyles => ({\n              //   ...providedStyles,\n              // }),\n              option: (providedStyles, { isSelected }) => ({\n                ...providedStyles,\n                marginBottom: '10px',\n                backgroundColor: isSelected\n                  ? theme.palette.secondary[100]\n                  : 'white',\n                ':hover': {\n                  backgroundColor: theme.palette.secondary[50],\n                },\n              }),\n              multiValue: providedStyles => ({\n                ...providedStyles,\n                height: '30px',\n                display: 'flex',\n                alignItems: 'center',\n                borderRadius: '5px'\n              }),\n              multiValueLabel: providedStyles => ({\n                ...providedStyles,\n                display: 'flex',\n                alignItems: 'center',\n              }),\n              multiValueRemove: providedStyles => ({\n                ...providedStyles,\n                cursor: 'pointer',\n                '&:hover': {\n                  backgroundColor: 'transparent',\n                }\n              }),\n            },\n            components: {\n              SingleValue: (componentProps) => valueLabel(componentProps, components.SingleValue),\n              MultiValue: (componentProps) => (\n                <components.MultiValue {...componentProps} className={classes.multiValue} />\n              ),\n              MultiValueRemove: (componentProps) => (\n                <components.MultiValueRemove {...componentProps} className={classes.multiValueRemove}>\n                  <CancelRoundedIcon className={classes.icon} onClick={() => {\n                    const id = componentProps.data.get('id');\n                    const optionsList = componentProps.selectProps.options;\n                    const filtered = optionsList.filter(x => x.get('id') !== id);\n                    if (selectedContact?.get('id') === id || storedContact && storedContact.get('id') === id) {\n                      dispatch(new SelectQuoteCustomerAction({ customerId: undefined }));\n                      // dispatch(new SelectContact({toggleSnackbar: true, selectedContact: undefined}));\n                      dispatch(change(QUOTE_FORM_NAME, 'selectedCustomer', null));\n                      dispatch(new SetStoredContactDataAction({ data: undefined }));\n                    }\n                    dispatch(new SearchContactsSucceededAction({ contacts: filtered }));\n                  }} />\n                </components.MultiValueRemove>\n              ),\n              MultiValueLabel: (componentProps) => valueLabel(componentProps, components.MultiValueLabel),\n              MenuList: (componentProps) => (\n                <components.MenuList {...componentProps}>\n                  {componentProps.children}\n                  <Button\n                    key='__create_contact__'\n                    className={classes.createContact}\n                    variant='contained'\n                    onClick={clickHandler}\n                  >\n                    {t('customers.createContact')}\n                  </Button>\n                </components.MenuList>\n              ),\n              Option: (componentProps) => {\n                const option = componentProps.data;\n                const firstName = option.get('firstName');\n                const lastName = option.get('lastName');\n                const organization = option.get('organization');\n                const email = option.get('email');\n                const name = (firstName || lastName) && [firstName, lastName].join(' ');\n                const firstLine = organization || name || email;\n                const secondLine = organization && name;\n                return (\n                  <components.Option {...componentProps} style={{ ...componentProps.style, marginBottom: 0 }}>\n                    <MenuItem disableRipple={true} className={classes.menuItem}>\n                      <OptionWrapper>\n                        <PrimaryInfoColumn $wide={isWide} style={{ color: theme.palette.text.primary }}>\n                          <div>{firstLine}</div>\n                          {secondLine && <div>{secondLine}</div>}\n                          <div>{option.get('address1') || option.get('address2')}</div>\n                          <div>{option.get('cityName')} {option.get('provinceName')}</div>\n                          <div>{option.get('countryName')}</div>\n                          {option.get('shipToCustomer') && (\n                            <div>\n                              {option.get('shipToCustomer')}\n                            </div>\n                          )}\n                        </PrimaryInfoColumn>\n                        <NoteColumn $wide={isWide}>\n                          {option.get('internalNote') && (\n                            <div>\n                              {option.get('internalNote')}\n                            </div>\n                          )}\n                        </NoteColumn>\n                      </OptionWrapper>\n                    </MenuItem>\n                  </components.Option>\n                );\n              }\n            },\n            noOptionsMessage: () =>\n              isSearchingContacts\n                ? <Grid container={true} direction='column' alignItems='center'>\n                  <Grid>\n                    <CircularProgress size='1rem' />\n                  </Grid>\n                  <Grid>\n                    <Typography>{t('generalLoading.loading')}</Typography>\n                  </Grid>\n                </Grid>\n                : <div className={classes.noResults}>\n                  <Typography variant='h6'>{t('customers.noResult')}</Typography>\n                  <Typography variant='subtitle1'>{t('customers.noResultSub')}</Typography>\n                </div>,\n            ...inputProps,\n          },\n        }}\n      />\n      {children}\n    </Wrapper>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  selectedContact: makeSelectSelectedContact(),\n  isSearchingContacts: makeSelectContactsLoading(),\n  storedContact: makeSelectStoredContactData(),\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchContacts: (searchTerm: string) => {\n      if (searchTerm !== '') {\n        dispatch(new SearchContactsAction({ searchTerm }));\n      }\n    },\n    clickHandler: () => {\n      dispatch(new SelectContactAction(-1));\n      dispatch(new SetOverlayComponentContentAction({\n        id: DRAWER_ID,\n        content: CONTENT_EDIT_KEY\n      }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: DRAWER_ID,\n        open: true,\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IQuoteContactsDropdownComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withAtsApi(),\n)(QuoteContactsDropdown);\n","import { useEffect, useState, useRef } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nexport function useMinWidth(threshold = 500) {\n  const ref = useRef<any>(null);\n  const [isWide, setIsWide] = useState(false);\n\n  useEffect(() => {\n    if (!ref.current) { return; }\n\n    const el = ref.current;\n\n    const observer = new ResizeObserver(([entry]) => {\n      setIsWide(entry.contentRect.width >= threshold);\n    });\n\n    observer.observe(el);\n\n    return () => observer.disconnect();\n  }, [ threshold, ref ]);\n\n  return { ref, isWide };\n}","var grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#d5d5d5',\n  A200: '#aaaaaa',\n  A400: '#303030',\n  A700: '#616161'\n};\nexport default grey;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Popover from '../Popover';\nimport MenuList from '../MenuList';\nimport ReactDOM from 'react-dom';\nimport setRef from '../utils/setRef';\nimport useTheme from '../styles/useTheme';\nvar RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nvar LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nexport var styles = {\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    // specZ: The maximum height of a simple menu should be one or more rows less than the view\n    // height. This ensures a tapable area outside of the simple menu with which to dismiss\n    // the menu.\n    maxHeight: 'calc(100% - 96px)',\n    // Add iOS momentum scrolling.\n    WebkitOverflowScrolling: 'touch'\n  },\n\n  /* Styles applied to the `List` component via `MenuList`. */\n  list: {\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Menu = React.forwardRef(function Menu(props, ref) {\n  var _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      _props$disableAutoFoc = props.disableAutoFocusItem,\n      disableAutoFocusItem = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$MenuListProps = props.MenuListProps,\n      MenuListProps = _props$MenuListProps === void 0 ? {} : _props$MenuListProps,\n      onClose = props.onClose,\n      onEntering = props.onEntering,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      PopoverClasses = props.PopoverClasses,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoFocus\", \"children\", \"classes\", \"disableAutoFocusItem\", \"MenuListProps\", \"onClose\", \"onEntering\", \"open\", \"PaperProps\", \"PopoverClasses\", \"transitionDuration\", \"variant\"]);\n\n  var theme = useTheme();\n  var autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  var menuListActionsRef = React.useRef(null);\n  var contentAnchorRef = React.useRef(null);\n\n  var getContentAnchorEl = function getContentAnchorEl() {\n    return contentAnchorRef.current;\n  };\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, theme);\n    }\n\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n\n  var handleListKeyDown = function handleListKeyDown(event) {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  React.Children.map(children, function (child, index) {\n    if (!React.isValidElement(child)) {\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant !== \"menu\" && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = React.Children.map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      return React.cloneElement(child, {\n        ref: function ref(instance) {\n          // #StrictMode ready\n          contentAnchorRef.current = ReactDOM.findDOMNode(instance);\n          setRef(child.ref, instance);\n        }\n      });\n    }\n\n    return child;\n  });\n  return React.createElement(Popover, _extends({\n    getContentAnchorEl: getContentAnchorEl,\n    classes: PopoverClasses,\n    onClose: onClose,\n    onEntering: handleEntering,\n    anchorOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    transformOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    PaperProps: _extends({}, PaperProps, {\n      classes: _extends({}, PaperProps.classes, {\n        root: classes.paper\n      })\n    }),\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration\n  }, other), React.createElement(MenuList, _extends({\n    onKeyDown: handleListKeyDown,\n    actions: menuListActionsRef,\n    autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n    autoFocusItem: autoFocusItem,\n    variant: variant\n  }, MenuListProps, {\n    className: clsx(classes.list, MenuListProps.className)\n  }), items));\n});\nprocess.env.NODE_ENV !== \"production\" ? Menu.propTypes = {\n  /**\n   * The DOM element used to set the position of the menu.\n   */\n  anchorEl: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   */\n  disableAutoFocusItem: PropTypes.bool,\n\n  /**\n   * Props applied to the [`MenuList`](/api/menu-list/) element.\n   */\n  MenuListProps: PropTypes.object,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired before the Menu enters.\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired when the Menu has entered.\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired when the Menu is entering.\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired before the Menu exits.\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired when the Menu has exited.\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * Callback fired when the Menu is exiting.\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * If `true`, the menu is visible.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  PaperProps: PropTypes.object,\n\n  /**\n   * `classes` prop applied to the [`Popover`](/api/popover/) element.\n   */\n  PopoverClasses: PropTypes.object,\n\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  }), PropTypes.oneOf(['auto'])]),\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiMenu'\n})(Menu);","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.ReactGAImplementation = void 0;\nvar _ga = _interopRequireWildcard(require(\"./ga4\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nvar ReactGAImplementation = _ga.GA4;\nexports.ReactGAImplementation = ReactGAImplementation;\nvar _default = _ga[\"default\"];\nexports[\"default\"] = _default;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes, getDisplayName } from '@material-ui/utils';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport makeStyles from '../makeStyles';\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n} // styled-components's API removes the mapping between components and styles.\n// Using components as a low-level styling construct can be simpler.\n\n\nfunction styled(Component) {\n  var componentCreator = function componentCreator(style) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var name = options.name,\n        stylesOptions = _objectWithoutProperties(options, [\"name\"]);\n\n    if (process.env.NODE_ENV !== 'production' && Component === undefined) {\n      throw new Error(['You are calling styled(Component)(style) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n    }\n\n    var classNamePrefix = name;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = getDisplayName(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var stylesOrCreator = typeof style === 'function' ? function (theme) {\n      return {\n        root: function root(props) {\n          return style(_extends({\n            theme: theme\n          }, props));\n        }\n      };\n    } : {\n      root: style\n    };\n    var useStyles = makeStyles(stylesOrCreator, _extends({\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var filterProps;\n    var propTypes = {};\n\n    if (style.filterProps) {\n      filterProps = style.filterProps;\n      delete style.filterProps;\n    }\n    /* eslint-disable react/forbid-foreign-prop-types */\n\n\n    if (style.propTypes) {\n      propTypes = style.propTypes;\n      delete style.propTypes;\n    }\n    /* eslint-enable react/forbid-foreign-prop-types */\n\n\n    var StyledComponent = React.forwardRef(function StyledComponent(props, ref) {\n      var children = props.children,\n          classNameProp = props.className,\n          clone = props.clone,\n          ComponentProp = props.component,\n          other = _objectWithoutProperties(props, [\"children\", \"className\", \"clone\", \"component\"]);\n\n      var classes = useStyles(props);\n      var className = clsx(classes.root, classNameProp);\n      var spread = other;\n\n      if (filterProps) {\n        spread = omit(spread, filterProps);\n      }\n\n      if (clone) {\n        return React.cloneElement(children, _extends({\n          className: clsx(children.props.className, className)\n        }, spread));\n      }\n\n      if (typeof children === 'function') {\n        return children(_extends({\n          className: className\n        }, spread));\n      }\n\n      var FinalComponent = ComponentProp || Component;\n      return React.createElement(FinalComponent, _extends({\n        ref: ref,\n        className: className\n      }, spread), children);\n    });\n    process.env.NODE_ENV !== \"production\" ? StyledComponent.propTypes = _extends({\n      /**\n       * A render function or node.\n       */\n      children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n      /**\n       * @ignore\n       */\n      className: PropTypes.string,\n\n      /**\n       * If `true`, the component will recycle it's children DOM element.\n       * It's using `React.cloneElement` internally.\n       *\n       * This prop will be deprecated and removed in v5\n       */\n      clone: chainPropTypes(PropTypes.bool, function (props) {\n        if (props.clone && props.component) {\n          return new Error('You can not use the clone and component prop at the same time.');\n        }\n\n        return null;\n      }),\n\n      /**\n       * The component used for the root node.\n       * Either a string to use a DOM element or a component.\n       */\n      component: PropTypes.elementType\n    }, propTypes) : void 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.displayName = \"Styled(\".concat(classNamePrefix, \")\");\n    }\n\n    hoistNonReactStatics(StyledComponent, Component);\n    return StyledComponent;\n  };\n\n  return componentCreator;\n}\n\nexport default styled;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport PopperJS from 'popper.js';\nimport { chainPropTypes, refType } from '@material-ui/utils';\nimport { useTheme } from '@material-ui/styles';\nimport Portal from '../Portal';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport setRef from '../utils/setRef';\nimport useForkRef from '../utils/useForkRef';\nimport ownerWindow from '../utils/ownerWindow';\n\nfunction flipPlacement(placement, theme) {\n  var direction = theme && theme.direction || 'ltr';\n\n  if (direction === 'ltr') {\n    return placement;\n  }\n\n  switch (placement) {\n    case 'bottom-end':\n      return 'bottom-start';\n\n    case 'bottom-start':\n      return 'bottom-end';\n\n    case 'top-end':\n      return 'top-start';\n\n    case 'top-start':\n      return 'top-end';\n\n    default:\n      return placement;\n  }\n}\n\nfunction getAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar defaultPopperOptions = {};\n/**\n * Poppers rely on the 3rd party library [Popper.js](https://github.com/FezVrasta/popper.js) for positioning.\n */\n\nvar Popper = React.forwardRef(function Popper(props, ref) {\n  var anchorEl = props.anchorEl,\n      children = props.children,\n      container = props.container,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      _props$keepMounted = props.keepMounted,\n      keepMounted = _props$keepMounted === void 0 ? false : _props$keepMounted,\n      modifiers = props.modifiers,\n      open = props.open,\n      _props$placement = props.placement,\n      initialPlacement = _props$placement === void 0 ? 'bottom' : _props$placement,\n      _props$popperOptions = props.popperOptions,\n      popperOptions = _props$popperOptions === void 0 ? defaultPopperOptions : _props$popperOptions,\n      popperRefProp = props.popperRef,\n      _props$transition = props.transition,\n      transition = _props$transition === void 0 ? false : _props$transition,\n      other = _objectWithoutProperties(props, [\"anchorEl\", \"children\", \"container\", \"disablePortal\", \"keepMounted\", \"modifiers\", \"open\", \"placement\", \"popperOptions\", \"popperRef\", \"transition\"]);\n\n  var tooltipRef = React.useRef(null);\n  var ownRef = useForkRef(tooltipRef, ref);\n  var popperRef = React.useRef(null);\n  var handlePopperRef = useForkRef(popperRef, popperRefProp);\n  var handlePopperRefRef = React.useRef(handlePopperRef);\n  useEnhancedEffect(function () {\n    handlePopperRefRef.current = handlePopperRef;\n  }, [handlePopperRef]);\n  React.useImperativeHandle(popperRefProp, function () {\n    return popperRef.current;\n  }, []);\n\n  var _React$useState = React.useState(true),\n      exited = _React$useState[0],\n      setExited = _React$useState[1];\n\n  var theme = useTheme();\n  var rtlPlacement = flipPlacement(initialPlacement, theme);\n  /**\n   * placement initialized from prop but can change during lifetime if modifiers.flip.\n   * modifiers.flip is essentially a flip for controlled/uncontrolled behavior\n   */\n\n  var _React$useState2 = React.useState(rtlPlacement),\n      placement = _React$useState2[0],\n      setPlacement = _React$useState2[1];\n\n  React.useEffect(function () {\n    if (popperRef.current) {\n      popperRef.current.update();\n    }\n  });\n  var handleOpen = React.useCallback(function () {\n    if (!tooltipRef.current || !anchorEl || !open) {\n      return;\n    }\n\n    if (popperRef.current) {\n      popperRef.current.destroy();\n      handlePopperRefRef.current(null);\n    }\n\n    var handlePopperUpdate = function handlePopperUpdate(data) {\n      setPlacement(data.placement);\n    };\n\n    var resolvedAnchorEl = getAnchorEl(anchorEl);\n\n    if (process.env.NODE_ENV !== 'production') {\n      var containerWindow = ownerWindow(resolvedAnchorEl);\n\n      if (resolvedAnchorEl instanceof containerWindow.Element) {\n        var box = resolvedAnchorEl.getBoundingClientRect();\n\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          console.warn(['Material-UI: the `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      }\n    }\n\n    var popper = new PopperJS(getAnchorEl(anchorEl), tooltipRef.current, _extends({\n      placement: rtlPlacement\n    }, popperOptions, {\n      modifiers: _extends({}, disablePortal ? {} : {\n        // It's using scrollParent by default, we can use the viewport when using a portal.\n        preventOverflow: {\n          boundariesElement: 'window'\n        }\n      }, {}, modifiers, {}, popperOptions.modifiers),\n      // We could have been using a custom modifier like react-popper is doing.\n      // But it seems this is the best public API for this use case.\n      onCreate: createChainedFunction(handlePopperUpdate, popperOptions.onCreate),\n      onUpdate: createChainedFunction(handlePopperUpdate, popperOptions.onUpdate)\n    }));\n    handlePopperRefRef.current(popper);\n  }, [anchorEl, disablePortal, modifiers, open, rtlPlacement, popperOptions]);\n  var handleRef = React.useCallback(function (node) {\n    setRef(ownRef, node);\n    handleOpen();\n  }, [ownRef, handleOpen]);\n\n  var handleEnter = function handleEnter() {\n    setExited(false);\n  };\n\n  var handleClose = function handleClose() {\n    if (!popperRef.current) {\n      return;\n    }\n\n    popperRef.current.destroy();\n    handlePopperRefRef.current(null);\n  };\n\n  var handleExited = function handleExited() {\n    setExited(true);\n    handleClose();\n  };\n\n  React.useEffect(function () {\n    // Let's update the popper position.\n    handleOpen();\n  }, [handleOpen]);\n  React.useEffect(function () {\n    return function () {\n      handleClose();\n    };\n  }, []);\n  React.useEffect(function () {\n    if (!open && !transition) {\n      // Otherwise handleExited will call this.\n      handleClose();\n    }\n  }, [open, transition]);\n\n  if (!keepMounted && !open && (!transition || exited)) {\n    return null;\n  }\n\n  var childProps = {\n    placement: placement\n  };\n\n  if (transition) {\n    childProps.TransitionProps = {\n      in: open,\n      onEnter: handleEnter,\n      onExited: handleExited\n    };\n  }\n\n  return React.createElement(Portal, {\n    disablePortal: disablePortal,\n    container: container\n  }, React.createElement(\"div\", _extends({\n    ref: handleRef,\n    role: \"tooltip\"\n  }, other, {\n    style: _extends({\n      // Prevents scroll issue, waiting for Popper.js to add this style once initiated.\n      position: 'fixed',\n      // Fix Popper.js display issue\n      top: 0,\n      left: 0\n    }, other.style)\n  }), typeof children === 'function' ? children(childProps) : children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Popper.propTypes = {\n  /**\n   * This is the reference element, or a function that returns the reference element,\n   * that may be used to set the position of the popover.\n   * The return value will passed as the reference object of the Popper\n   * instance.\n   *\n   * The reference element should be an HTML Element instance or a referenceObject:\n   * https://popper.js.org/popper-documentation.html#referenceObject.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([PropTypes.object, PropTypes.func]), function (props) {\n    if (props.open) {\n      var resolvedAnchorEl = getAnchorEl(props.anchorEl);\n      var containerWindow = ownerWindow(resolvedAnchorEl);\n\n      if (resolvedAnchorEl instanceof containerWindow.Element) {\n        var box = resolvedAnchorEl.getBoundingClientRect();\n\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['Material-UI: the `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.clientWidth !== 'number' || typeof resolvedAnchorEl.clientHeight !== 'number' || typeof resolvedAnchorEl.getBoundingClientRect !== 'function') {\n        return new Error(['Material-UI: the `anchorEl` prop provided to the component is invalid.', 'It should be an HTML Element instance or a referenceObject:', 'https://popper.js.org/popper-documentation.html#referenceObject.'].join('\\n'));\n      }\n    }\n\n    return null;\n  }),\n\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired,\n\n  /**\n   * A node, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: PropTypes.bool,\n\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Popper.\n   */\n  keepMounted: PropTypes.bool,\n\n  /**\n   * Popper.js is based on a \"plugin-like\" architecture,\n   * most of its features are fully encapsulated \"modifiers\".\n   *\n   * A modifier is a function that is called each time Popper.js needs to\n   * compute the position of the popper.\n   * For this reason, modifiers should be very performant to avoid bottlenecks.\n   * To learn how to create a modifier, [read the modifiers documentation](https://github.com/FezVrasta/popper.js/blob/master/docs/_includes/popper-documentation.md#modifiers--object).\n   */\n  modifiers: PropTypes.object,\n\n  /**\n   * If `true`, the popper is visible.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * Popper placement.\n   */\n  placement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n\n  /**\n   * Options provided to the [`popper.js`](https://github.com/FezVrasta/popper.js) instance.\n   */\n  popperOptions: PropTypes.object,\n\n  /**\n   * A ref that points to the used popper instance.\n   */\n  popperRef: refType,\n\n  /**\n   * Help supporting a react-transition-group/Transition component.\n   */\n  transition: PropTypes.bool\n} : void 0;\nexport default Popper;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport withStyles from '../styles/withStyles';\nimport { duration } from '../styles/transitions';\nimport { getTransitionProps } from '../transitions/utils';\nimport useTheme from '../styles/useTheme';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the container element. */\n    container: {\n      height: 0,\n      overflow: 'hidden',\n      transition: theme.transitions.create('height')\n    },\n\n    /* Styles applied to the container element when the transition has entered. */\n    entered: {\n      height: 'auto',\n      overflow: 'visible'\n    },\n\n    /* Styles applied to the container element when the transition has exited and `collapsedHeight` != 0px. */\n    hidden: {\n      visibility: 'hidden'\n    },\n\n    /* Styles applied to the outer wrapper element. */\n    wrapper: {\n      // Hack to get children with a negative margin to not falsify the height computation.\n      display: 'flex'\n    },\n\n    /* Styles applied to the inner wrapper element. */\n    wrapperInner: {\n      width: '100%'\n    }\n  };\n};\n/**\n * The Collapse transition is used by the\n * [Vertical Stepper](/components/steppers/#vertical-stepper) StepContent component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Collapse = React.forwardRef(function Collapse(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$collapsedHeigh = props.collapsedHeight,\n      collapsedHeightProp = _props$collapsedHeigh === void 0 ? '0px' : _props$collapsedHeigh,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExiting = props.onExiting,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? duration.standard : _props$timeout,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"collapsedHeight\", \"component\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExiting\", \"style\", \"timeout\"]);\n\n  var theme = useTheme();\n  var timer = React.useRef();\n  var wrapperRef = React.useRef(null);\n  var autoTransitionDuration = React.useRef();\n  var collapsedHeight = typeof collapsedHeightProp === 'number' ? \"\".concat(collapsedHeightProp, \"px\") : collapsedHeightProp;\n  React.useEffect(function () {\n    return function () {\n      clearTimeout(timer.current);\n    };\n  }, []);\n\n  var handleEnter = function handleEnter(node, isAppearing) {\n    node.style.height = collapsedHeight;\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n\n  var handleEntering = function handleEntering(node, isAppearing) {\n    var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n\n    var _getTransitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    }),\n        transitionDuration = _getTransitionProps.duration;\n\n    if (timeout === 'auto') {\n      var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);\n      node.style.transitionDuration = \"\".concat(duration2, \"ms\");\n      autoTransitionDuration.current = duration2;\n    } else {\n      node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : \"\".concat(transitionDuration, \"ms\");\n    }\n\n    node.style.height = \"\".concat(wrapperHeight, \"px\");\n\n    if (onEntering) {\n      onEntering(node, isAppearing);\n    }\n  };\n\n  var handleEntered = function handleEntered(node, isAppearing) {\n    node.style.height = 'auto';\n\n    if (onEntered) {\n      onEntered(node, isAppearing);\n    }\n  };\n\n  var handleExit = function handleExit(node) {\n    var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n    node.style.height = \"\".concat(wrapperHeight, \"px\");\n\n    if (onExit) {\n      onExit(node);\n    }\n  };\n\n  var handleExiting = function handleExiting(node) {\n    var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;\n\n    var _getTransitionProps2 = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    }),\n        transitionDuration = _getTransitionProps2.duration;\n\n    if (timeout === 'auto') {\n      var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);\n      node.style.transitionDuration = \"\".concat(duration2, \"ms\");\n      autoTransitionDuration.current = duration2;\n    } else {\n      node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : \"\".concat(transitionDuration, \"ms\");\n    }\n\n    node.style.height = collapsedHeight;\n\n    if (onExiting) {\n      onExiting(node);\n    }\n  };\n\n  var addEndListener = function addEndListener(_, next) {\n    if (timeout === 'auto') {\n      timer.current = setTimeout(next, autoTransitionDuration.current || 0);\n    }\n  };\n\n  return React.createElement(Transition, _extends({\n    in: inProp,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExiting: handleExiting,\n    addEndListener: addEndListener,\n    timeout: timeout === 'auto' ? null : timeout\n  }, other), function (state, childProps) {\n    return React.createElement(Component, _extends({\n      className: clsx(classes.container, className, {\n        entered: classes.entered,\n        exited: !inProp && collapsedHeight === '0px' && classes.hidden\n      }[state]),\n      style: _extends({\n        minHeight: collapsedHeight\n      }, style),\n      ref: ref\n    }, childProps), React.createElement(\"div\", {\n      className: classes.wrapper,\n      ref: wrapperRef\n    }, React.createElement(\"div\", {\n      className: classes.wrapperInner\n    }, children)));\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Collapse.propTypes = {\n  /**\n   * The content node to be collapsed.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The height of the container when collapsed.\n   */\n  collapsedHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  }), PropTypes.oneOf(['auto'])])\n} : void 0;\nCollapse.muiSupportAuto = true;\nexport default withStyles(styles, {\n  name: 'MuiCollapse'\n})(Collapse);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nvar useEnhancedEffect = typeof window !== 'undefined' && process.env.NODE_ENV !== 'test' ? React.useLayoutEffect : React.useEffect;\n/**\n * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).\n *\n * This component can be useful in a variety of situations:\n * - Escape hatch for broken dependencies not supporting SSR.\n * - Improve the time-to-first paint on the client by only rendering above the fold.\n * - Reduce the rendering time on the server.\n * - Under too heavy server load, you can turn on service degradation.\n */\n\nfunction NoSsr(props) {\n  var children = props.children,\n      _props$defer = props.defer,\n      defer = _props$defer === void 0 ? false : _props$defer,\n      _props$fallback = props.fallback,\n      fallback = _props$fallback === void 0 ? null : _props$fallback;\n\n  var _React$useState = React.useState(false),\n      mountedState = _React$useState[0],\n      setMountedState = _React$useState[1];\n\n  useEnhancedEffect(function () {\n    if (!defer) {\n      setMountedState(true);\n    }\n  }, [defer]);\n  React.useEffect(function () {\n    if (defer) {\n      setMountedState(true);\n    }\n  }, [defer]); // We need the Fragment here to force react-docgen to recognise NoSsr as a component.\n\n  return React.createElement(React.Fragment, null, mountedState ? children : fallback);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? NoSsr.propTypes = {\n  /**\n   * You can wrap a node.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * If `true`, the component will not only prevent server-side rendering.\n   * It will also defer the rendering of the children into a different screen frame.\n   */\n  defer: PropTypes.bool,\n\n  /**\n   * The fallback content to display.\n   */\n  fallback: PropTypes.node\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  NoSsr['propTypes' + ''] = exactProp(NoSsr.propTypes);\n}\n\nexport default NoSsr;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport useEventCallback from '../utils/useEventCallback';\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * @ignore - internal component.\n */\n\nfunction Ripple(props) {\n  var classes = props.classes,\n      _props$pulsate = props.pulsate,\n      pulsate = _props$pulsate === void 0 ? false : _props$pulsate,\n      rippleX = props.rippleX,\n      rippleY = props.rippleY,\n      rippleSize = props.rippleSize,\n      inProp = props.in,\n      _props$onExited = props.onExited,\n      onExited = _props$onExited === void 0 ? function () {} : _props$onExited,\n      timeout = props.timeout;\n\n  var _React$useState = React.useState(false),\n      leaving = _React$useState[0],\n      setLeaving = _React$useState[1];\n\n  var rippleClassName = clsx(classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n  var rippleStyles = {\n    width: rippleSize,\n    height: rippleSize,\n    top: -(rippleSize / 2) + rippleY,\n    left: -(rippleSize / 2) + rippleX\n  };\n  var childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n  var handleExited = useEventCallback(onExited); // Ripple is used for user feedback (e.g. click or press) so we want to apply styles with the highest priority\n\n  useEnhancedEffect(function () {\n    if (!inProp) {\n      // react-transition-group#onExit\n      setLeaving(true); // react-transition-group#onExited\n\n      var timeoutId = setTimeout(handleExited, timeout);\n      return function () {\n        clearTimeout(timeoutId);\n      };\n    }\n\n    return undefined;\n  }, [handleExited, inProp, timeout]);\n  return React.createElement(\"span\", {\n    className: rippleClassName,\n    style: rippleStyles\n  }, React.createElement(\"span\", {\n    className: childClassName\n  }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n   */\n  pulsate: PropTypes.bool,\n\n  /**\n   * Diameter of the ripple.\n   */\n  rippleSize: PropTypes.number,\n\n  /**\n   * Horizontal position of the ripple center.\n   */\n  rippleX: PropTypes.number,\n\n  /**\n   * Vertical position of the ripple center.\n   */\n  rippleY: PropTypes.number,\n\n  /**\n   * exit delay\n   */\n  timeout: PropTypes.number.isRequired\n} : void 0;\nexport default Ripple;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Ripple from './Ripple';\nvar DURATION = 550;\nexport var DELAY_RIPPLE = 80;\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      overflow: 'hidden',\n      pointerEvents: 'none',\n      position: 'absolute',\n      zIndex: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0,\n      borderRadius: 'inherit'\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripple` class. */\n    ripple: {\n      opacity: 0,\n      position: 'absolute'\n    },\n\n    /* Styles applied to the internal `Ripple` components `rippleVisible` class. */\n    rippleVisible: {\n      opacity: 0.3,\n      transform: 'scale(1)',\n      animation: \"$enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `ripplePulsate` class. */\n    ripplePulsate: {\n      animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n    },\n\n    /* Styles applied to the internal `Ripple` components `child` class. */\n    child: {\n      opacity: 1,\n      display: 'block',\n      width: '100%',\n      height: '100%',\n      borderRadius: '50%',\n      backgroundColor: 'currentColor'\n    },\n\n    /* Styles applied to the internal `Ripple` components `childLeaving` class. */\n    childLeaving: {\n      opacity: 0,\n      animation: \"$exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut)\n    },\n\n    /* Styles applied to the internal `Ripple` components `childPulsate` class. */\n    childPulsate: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      animation: \"$pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\")\n    },\n    '@keyframes enter': {\n      '0%': {\n        transform: 'scale(0)',\n        opacity: 0.1\n      },\n      '100%': {\n        transform: 'scale(1)',\n        opacity: 0.3\n      }\n    },\n    '@keyframes exit': {\n      '0%': {\n        opacity: 1\n      },\n      '100%': {\n        opacity: 0\n      }\n    },\n    '@keyframes pulsate': {\n      '0%': {\n        transform: 'scale(1)'\n      },\n      '50%': {\n        transform: 'scale(0.92)'\n      },\n      '100%': {\n        transform: 'scale(1)'\n      }\n    }\n  };\n};\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\n\nvar TouchRipple = React.forwardRef(function TouchRipple(props, ref) {\n  var _props$center = props.center,\n      centerProp = _props$center === void 0 ? false : _props$center,\n      classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"center\", \"classes\", \"className\"]);\n\n  var _React$useState = React.useState([]),\n      ripples = _React$useState[0],\n      setRipples = _React$useState[1];\n\n  var nextKey = React.useRef(0);\n  var rippleCallback = React.useRef(null);\n  React.useEffect(function () {\n    if (rippleCallback.current) {\n      rippleCallback.current();\n      rippleCallback.current = null;\n    }\n  }, [ripples]); // Used to filter out mouse emulated events on mobile.\n\n  var ignoringMouseDown = React.useRef(false); // We use a timer in order to only show the ripples for touch \"click\" like events.\n  // We don't want to display the ripple for touch scroll events.\n\n  var startTimer = React.useRef(null); // This is the hook called once the previous timeout is ready.\n\n  var startTimerCommit = React.useRef(null);\n  var container = React.useRef(null);\n  React.useEffect(function () {\n    return function () {\n      clearTimeout(startTimer.current);\n    };\n  }, []);\n  var startCommit = React.useCallback(function (params) {\n    var pulsate = params.pulsate,\n        rippleX = params.rippleX,\n        rippleY = params.rippleY,\n        rippleSize = params.rippleSize,\n        cb = params.cb;\n    setRipples(function (oldRipples) {\n      return [].concat(_toConsumableArray(oldRipples), [React.createElement(Ripple, {\n        key: nextKey.current,\n        classes: classes,\n        timeout: DURATION,\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize\n      })]);\n    });\n    nextKey.current += 1;\n    rippleCallback.current = cb;\n  }, [classes]);\n  var start = React.useCallback(function () {\n    var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var cb = arguments.length > 2 ? arguments[2] : undefined;\n    var _options$pulsate = options.pulsate,\n        pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n        _options$center = options.center,\n        center = _options$center === void 0 ? centerProp || options.pulsate : _options$center,\n        _options$fakeElement = options.fakeElement,\n        fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n    if (event.type === 'mousedown' && ignoringMouseDown.current) {\n      ignoringMouseDown.current = false;\n      return;\n    }\n\n    if (event.type === 'touchstart') {\n      ignoringMouseDown.current = true;\n    }\n\n    var element = fakeElement ? null : container.current;\n    var rect = element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      left: 0,\n      top: 0\n    }; // Get the size of the ripple\n\n    var rippleX;\n    var rippleY;\n    var rippleSize;\n\n    if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n      rippleX = Math.round(rect.width / 2);\n      rippleY = Math.round(rect.height / 2);\n    } else {\n      var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n      var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n      rippleX = Math.round(clientX - rect.left);\n      rippleY = Math.round(clientY - rect.top);\n    }\n\n    if (center) {\n      rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n      if (rippleSize % 2 === 0) {\n        rippleSize += 1;\n      }\n    } else {\n      var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n      var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n      rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n    } // Touche devices\n\n\n    if (event.touches) {\n      // check that this isn't another touchstart due to multitouch\n      // otherwise we will only clear a single timer when unmounting while two\n      // are running\n      if (startTimerCommit.current === null) {\n        // Prepare the ripple effect.\n        startTimerCommit.current = function () {\n          startCommit({\n            pulsate: pulsate,\n            rippleX: rippleX,\n            rippleY: rippleY,\n            rippleSize: rippleSize,\n            cb: cb\n          });\n        }; // Delay the execution of the ripple effect.\n\n\n        startTimer.current = setTimeout(function () {\n          if (startTimerCommit.current) {\n            startTimerCommit.current();\n            startTimerCommit.current = null;\n          }\n        }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n      }\n    } else {\n      startCommit({\n        pulsate: pulsate,\n        rippleX: rippleX,\n        rippleY: rippleY,\n        rippleSize: rippleSize,\n        cb: cb\n      });\n    }\n  }, [centerProp, startCommit]);\n  var pulsate = React.useCallback(function () {\n    start({}, {\n      pulsate: true\n    });\n  }, [start]);\n  var stop = React.useCallback(function (event, cb) {\n    clearTimeout(startTimer.current); // The touch interaction occurs too quickly.\n    // We still want to show ripple effect.\n\n    if (event.type === 'touchend' && startTimerCommit.current) {\n      event.persist();\n      startTimerCommit.current();\n      startTimerCommit.current = null;\n      startTimer.current = setTimeout(function () {\n        stop(event, cb);\n      });\n      return;\n    }\n\n    startTimerCommit.current = null;\n    setRipples(function (oldRipples) {\n      if (oldRipples.length > 0) {\n        return oldRipples.slice(1);\n      }\n\n      return oldRipples;\n    });\n    rippleCallback.current = cb;\n  }, []);\n  React.useImperativeHandle(ref, function () {\n    return {\n      pulsate: pulsate,\n      start: start,\n      stop: stop\n    };\n  }, [pulsate, start, stop]);\n  return React.createElement(\"span\", _extends({\n    className: clsx(classes.root, className),\n    ref: container\n  }, other), React.createElement(TransitionGroup, {\n    component: null,\n    exit: true\n  }, ripples));\n}); // TODO cleanup after https://github.com/reactjs/react-docgen/pull/378 is released\n\nfunction withMuiName(Component) {\n  Component.muiName = 'MuiTouchRipple';\n  return Component;\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes = {\n  /**\n   * If `true`, the ripple starts at the center of the component\n   * rather than at the point of interaction.\n   */\n  center: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  flip: false,\n  name: 'MuiTouchRipple'\n})(withMuiName(React.memo(TouchRipple)));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport clsx from 'clsx';\nimport { elementTypeAcceptingRef, refType } from '@material-ui/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport withStyles from '../styles/withStyles';\nimport NoSsr from '../NoSsr';\nimport { useIsFocusVisible } from '../utils/focusVisible';\nimport TouchRipple from './TouchRipple';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    position: 'relative',\n    WebkitTapHighlightColor: 'transparent',\n    backgroundColor: 'transparent',\n    // Reset default value\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    border: 0,\n    margin: 0,\n    // Remove the margin in Safari\n    borderRadius: 0,\n    padding: 0,\n    // Remove the padding in Firefox\n    cursor: 'pointer',\n    userSelect: 'none',\n    verticalAlign: 'middle',\n    '-moz-appearance': 'none',\n    // Reset\n    '-webkit-appearance': 'none',\n    // Reset\n    textDecoration: 'none',\n    // So we take precedent over the style of a native <a /> element.\n    color: 'inherit',\n    '&::-moz-focus-inner': {\n      borderStyle: 'none' // Remove Firefox dotted outline.\n\n    },\n    '&$disabled': {\n      pointerEvents: 'none',\n      // Disable link interactions\n      cursor: 'default'\n    }\n  },\n\n  /* Pseudo-class applied to the root element if `disabled={true}`. */\n  disabled: {},\n\n  /* Pseudo-class applied to the root element if keyboard focused. */\n  focusVisible: {}\n};\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nvar ButtonBase = React.forwardRef(function ButtonBase(props, ref) {\n  var action = props.action,\n      buttonRefProp = props.buttonRef,\n      _props$centerRipple = props.centerRipple,\n      centerRipple = _props$centerRipple === void 0 ? false : _props$centerRipple,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableRipple = props.disableRipple,\n      disableRipple = _props$disableRipple === void 0 ? false : _props$disableRipple,\n      _props$disableTouchRi = props.disableTouchRipple,\n      disableTouchRipple = _props$disableTouchRi === void 0 ? false : _props$disableTouchRi,\n      _props$focusRipple = props.focusRipple,\n      focusRipple = _props$focusRipple === void 0 ? false : _props$focusRipple,\n      focusVisibleClassName = props.focusVisibleClassName,\n      onBlur = props.onBlur,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onFocusVisible = props.onFocusVisible,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      onMouseDown = props.onMouseDown,\n      onMouseLeave = props.onMouseLeave,\n      onMouseUp = props.onMouseUp,\n      onTouchEnd = props.onTouchEnd,\n      onTouchMove = props.onTouchMove,\n      onTouchStart = props.onTouchStart,\n      onDragLeave = props.onDragLeave,\n      _props$tabIndex = props.tabIndex,\n      tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n      TouchRippleProps = props.TouchRippleProps,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      other = _objectWithoutProperties(props, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onClick\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"onDragLeave\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n\n  var buttonRef = React.useRef(null);\n\n  function getButtonNode() {\n    // #StrictMode ready\n    return ReactDOM.findDOMNode(buttonRef.current);\n  }\n\n  var rippleRef = React.useRef(null);\n\n  var _React$useState = React.useState(false),\n      focusVisible = _React$useState[0],\n      setFocusVisible = _React$useState[1];\n\n  if (disabled && focusVisible) {\n    setFocusVisible(false);\n  }\n\n  var _useIsFocusVisible = useIsFocusVisible(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  React.useImperativeHandle(action, function () {\n    return {\n      focusVisible: function focusVisible() {\n        setFocusVisible(true);\n        buttonRef.current.focus();\n      }\n    };\n  }, []);\n  React.useEffect(function () {\n    if (focusVisible && focusRipple && !disableRipple) {\n      rippleRef.current.pulsate();\n    }\n  }, [disableRipple, focusRipple, focusVisible]);\n\n  function useRippleHandler(rippleAction, eventCallback) {\n    var skipRippleAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : disableTouchRipple;\n    return useEventCallback(function (event) {\n      if (eventCallback) {\n        eventCallback(event);\n      }\n\n      var ignore = skipRippleAction;\n\n      if (!ignore && rippleRef.current) {\n        rippleRef.current[rippleAction](event);\n      }\n\n      return true;\n    });\n  }\n\n  var handleMouseDown = useRippleHandler('start', onMouseDown);\n  var handleDragLeave = useRippleHandler('stop', onDragLeave);\n  var handleMouseUp = useRippleHandler('stop', onMouseUp);\n  var handleMouseLeave = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      event.preventDefault();\n    }\n\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n  });\n  var handleTouchStart = useRippleHandler('start', onTouchStart);\n  var handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n  var handleTouchMove = useRippleHandler('stop', onTouchMove);\n  var handleBlur = useRippleHandler('stop', function (event) {\n    if (focusVisible) {\n      onBlurVisible(event);\n      setFocusVisible(false);\n    }\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  }, false);\n  var handleFocus = useEventCallback(function (event) {\n    if (disabled) {\n      return;\n    } // Fix for https://github.com/facebook/react/issues/7769\n\n\n    if (!buttonRef.current) {\n      buttonRef.current = event.currentTarget;\n    }\n\n    if (isFocusVisible(event)) {\n      setFocusVisible(true);\n\n      if (onFocusVisible) {\n        onFocusVisible(event);\n      }\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n  });\n\n  var isNonNativeButton = function isNonNativeButton() {\n    var button = getButtonNode();\n    return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n  };\n  /**\n   * IE 11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n   */\n\n\n  var keydownRef = React.useRef(false);\n  var handleKeyDown = useEventCallback(function (event) {\n    // Check if key is already down to avoid repeats being counted as multiple activations\n    if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n      keydownRef.current = true;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.start(event);\n      });\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter') {\n      event.preventDefault();\n\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  var handleKeyUp = useEventCallback(function (event) {\n    // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n    // https://codesandbox.io/s/button-keyup-preventdefault-dn7f0\n    if (focusRipple && event.key === ' ' && rippleRef.current && focusVisible && !event.defaultPrevented) {\n      keydownRef.current = false;\n      event.persist();\n      rippleRef.current.stop(event, function () {\n        rippleRef.current.pulsate(event);\n      });\n    }\n\n    if (onKeyUp) {\n      onKeyUp(event);\n    } // Keyboard accessibility for non interactive elements\n\n\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented) {\n      event.preventDefault();\n\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  var ComponentProp = component;\n\n  if (ComponentProp === 'button' && other.href) {\n    ComponentProp = 'a';\n  }\n\n  var buttonProps = {};\n\n  if (ComponentProp === 'button') {\n    buttonProps.type = type;\n    buttonProps.disabled = disabled;\n  } else {\n    if (ComponentProp !== 'a' || !other.href) {\n      buttonProps.role = 'button';\n    }\n\n    buttonProps['aria-disabled'] = disabled;\n  }\n\n  var handleUserRef = useForkRef(buttonRefProp, ref);\n  var handleOwnRef = useForkRef(focusVisibleRef, buttonRef);\n  var handleRef = useForkRef(handleUserRef, handleOwnRef);\n  return React.createElement(ComponentProp, _extends({\n    className: clsx(classes.root, className, focusVisible && [classes.focusVisible, focusVisibleClassName], disabled && classes.disabled),\n    onBlur: handleBlur,\n    onClick: onClick,\n    onFocus: handleFocus,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    onMouseDown: handleMouseDown,\n    onMouseLeave: handleMouseLeave,\n    onMouseUp: handleMouseUp,\n    onDragLeave: handleDragLeave,\n    onTouchEnd: handleTouchEnd,\n    onTouchMove: handleTouchMove,\n    onTouchStart: handleTouchStart,\n    ref: handleRef,\n    tabIndex: disabled ? -1 : tabIndex\n  }, buttonProps, other), children, !disableRipple && !disabled ? React.createElement(NoSsr, null, React.createElement(TouchRipple, _extends({\n    ref: rippleRef,\n    center: centerRipple\n  }, TouchRippleProps))) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? ButtonBase.propTypes = {\n  /**\n   * A ref for imperative actions.\n   * It currently only supports `focusVisible()` action.\n   */\n  action: refType,\n\n  /**\n   * @ignore\n   *\n   * Use that prop to pass a ref to the native button component.\n   * @deprecated Use `ref` instead.\n   */\n  buttonRef: refType,\n\n  /**\n   * If `true`, the ripples will be centered.\n   * They won't start at the cursor interaction position.\n   */\n  centerRipple: PropTypes.bool,\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: elementTypeAcceptingRef,\n\n  /**\n   * If `true`, the base button will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the touch ripple effect will be disabled.\n   */\n  disableTouchRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the base button will have a keyboard focus ripple.\n   * `disableRipple` must also be `false`.\n   */\n  focusRipple: PropTypes.bool,\n\n  /**\n   * This prop can help a person know which element has the keyboard focus.\n   * The class name will be applied when the element gain the focus through a keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onDragLeave: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * Callback fired when the component is focused with a keyboard.\n   * We trigger a `onFocus` callback too.\n   */\n  onFocusVisible: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseUp: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onTouchEnd: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onTouchMove: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onTouchStart: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Props applied to the `TouchRipple` element.\n   */\n  TouchRippleProps: PropTypes.object,\n\n  /**\n   * Used to control the button's purpose.\n   * This prop passes the value to the `type` attribute of the native button component.\n   */\n  type: PropTypes.oneOf(['submit', 'reset', 'button'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiButtonBase'\n})(ButtonBase);","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nexport default initCloneByTag;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nexport default baseCreate;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nexport default arrayMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nexport default stringToPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import arrayMap from './_arrayMap.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\nimport stringToPath from './_stringToPath.js';\nimport toKey from './_toKey.js';\nimport toString from './toString.js';\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return arrayMap(value, toKey);\n  }\n  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nexport default toPath;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\nimport * as React from 'react';\n\n// Assertions\n\n/** @private is the given object a Function? */\nexport const isFunction = (obj: any): obj is Function =>\n  typeof obj === 'function';\n\n/** @private is the given object an Object? */\nexport const isObject = (obj: any): obj is Object =>\n  obj !== null && typeof obj === 'object';\n\n/** @private is the given object an integer? */\nexport const isInteger = (obj: any): boolean =>\n  String(Math.floor(Number(obj))) === obj;\n\n/** @private is the given object a string? */\nexport const isString = (obj: any): obj is string =>\n  Object.prototype.toString.call(obj) === '[object String]';\n\n/** @private is the given object a NaN? */\n// eslint-disable-next-line no-self-compare\nexport const isNaN = (obj: any): boolean => obj !== obj;\n\n/** @private Does a React component have exactly 0 children? */\nexport const isEmptyChildren = (children: any): boolean =>\n  React.Children.count(children) === 0;\n\n/** @private is the given object/value a promise? */\nexport const isPromise = (value: any): value is PromiseLike<any> =>\n  isObject(value) && isFunction(value.then);\n\n/** @private is the given object/value a type of synthetic event? */\nexport const isInputEvent = (value: any): value is React.SyntheticEvent<any> =>\n  value && isObject(value) && isObject(value.target);\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?Document} doc Defaults to current document.\n * @return {Element | null}\n * @see https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getActiveElement.js\n */\nexport function getActiveElement(doc?: Document): Element | null {\n  doc = doc || (typeof document !== 'undefined' ? document : undefined);\n  if (typeof doc === 'undefined') {\n    return null;\n  }\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(\n  obj: any,\n  key: string | string[],\n  def?: any,\n  p: number = 0\n) {\n  const path = toPath(key);\n  while (obj && p < path.length) {\n    obj = obj[path[p++]];\n  }\n  return obj === undefined ? def : obj;\n}\n\n/**\n * Deeply set a value from in object via it's path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n  let res: any = clone(obj); // this keeps inheritance when obj is a class\n  let resVal: any = res;\n  let i = 0;\n  let pathArray = toPath(path);\n\n  for (; i < pathArray.length - 1; i++) {\n    const currentPath: string = pathArray[i];\n    let currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n    if (currentObj) {\n      resVal = resVal[currentPath] = clone(currentObj);\n    } else {\n      const nextPath: string = pathArray[i + 1];\n      resVal = resVal[currentPath] =\n        isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n    }\n  }\n\n  // Return original object if new value is the same as current\n  if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n    return obj;\n  }\n\n  if (value === undefined) {\n    delete resVal[pathArray[i]];\n  } else {\n    resVal[pathArray[i]] = value;\n  }\n\n  // If the path array has a single element, the loop did not run.\n  // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n  if (i === 0 && value === undefined) {\n    delete res[pathArray[i]];\n  }\n\n  return res;\n}\n\n/**\n * Recursively a set the same value for all keys and arrays nested object, cloning\n * @param object\n * @param value\n * @param visited\n * @param response\n */\nexport function setNestedObjectValues<T>(\n  object: any,\n  value: any,\n  visited: any = new WeakMap(),\n  response: any = {}\n): T {\n  for (let k of Object.keys(object)) {\n    const val = object[k];\n    if (isObject(val)) {\n      if (!visited.get(val)) {\n        visited.set(val, true);\n        // In order to keep array values consistent for both dot path  and\n        // bracket syntax, we need to check if this is an array so that\n        // this will output  { friends: [true] } and not { friends: { \"0\": true } }\n        response[k] = Array.isArray(val) ? [] : {};\n        setNestedObjectValues(val, value, visited, response[k]);\n      }\n    } else {\n      response[k] = value;\n    }\n  }\n\n  return response;\n}\n","import * as React from 'react';\nimport { FormikContext } from './types';\nimport invariant from 'tiny-warning';\n\nconst PrivateFormikContext = React.createContext<FormikContext<any>>({} as any);\nexport const FormikProvider = PrivateFormikContext.Provider;\nexport const FormikConsumer = PrivateFormikContext.Consumer;\n\nexport function useFormikContext<Values>() {\n  const formik = React.useContext<FormikContext<Values>>(PrivateFormikContext);\n\n  invariant(\n    !!formik,\n    `Formik context is undefined, please verify you are calling useFormikContext() as child of a <Formik> component.`\n  );\n\n  return formik;\n}\n","import * as React from 'react';\nimport isEqual from 'react-fast-compare';\nimport deepmerge from 'deepmerge';\nimport {\n  FormikConfig,\n  FormikErrors,\n  FormikState,\n  FormikTouched,\n  FormikValues,\n  FormikProps,\n  FieldMetaProps,\n  FieldInputProps,\n} from './types';\nimport {\n  isFunction,\n  isString,\n  setIn,\n  isEmptyChildren,\n  isPromise,\n  setNestedObjectValues,\n  getActiveElement,\n  getIn,\n} from './utils';\nimport { FormikProvider } from './FormikContext';\nimport invariant from 'tiny-warning';\nimport { LowPriority, unstable_runWithPriority } from 'scheduler';\n\n// We already used FormikActions. So we'll go all Elm-y, and use Message.\ntype FormikMessage<Values> =\n  | { type: 'SUBMIT_ATTEMPT' }\n  | { type: 'SUBMIT_FAILURE' }\n  | { type: 'SUBMIT_SUCCESS' }\n  | { type: 'SET_ISVALIDATING'; payload: boolean }\n  | { type: 'SET_ISSUBMITTING'; payload: boolean }\n  | { type: 'SET_VALUES'; payload: Values }\n  | { type: 'SET_FIELD_VALUE'; payload: { field: string; value?: any } }\n  | { type: 'SET_FIELD_TOUCHED'; payload: { field: string; value?: boolean } }\n  | { type: 'SET_FIELD_ERROR'; payload: { field: string; value?: string } }\n  | { type: 'SET_TOUCHED'; payload: FormikTouched<Values> }\n  | { type: 'SET_ERRORS'; payload: FormikErrors<Values> }\n  | { type: 'SET_STATUS'; payload: any }\n  | { type: 'SET_FORMIK_STATE'; payload: FormikState<Values> }\n  | { type: 'RESET_FORM'; payload: FormikState<Values> };\n\n// State reducer\nfunction formikReducer<Values>(\n  state: FormikState<Values>,\n  msg: FormikMessage<Values>\n) {\n  switch (msg.type) {\n    case 'SET_VALUES':\n      return { ...state, values: msg.payload };\n    case 'SET_TOUCHED':\n      return { ...state, touched: msg.payload };\n    case 'SET_ERRORS':\n      return { ...state, errors: msg.payload };\n    case 'SET_STATUS':\n      return { ...state, status: msg.payload };\n    case 'SET_ISSUBMITTING':\n      return { ...state, isSubmitting: msg.payload };\n    case 'SET_ISVALIDATING':\n      return { ...state, isValidating: msg.payload };\n    case 'SET_FIELD_VALUE':\n      return {\n        ...state,\n        values: setIn(state.values, msg.payload.field, msg.payload.value),\n      };\n    case 'SET_FIELD_TOUCHED':\n      return {\n        ...state,\n        touched: setIn(state.touched, msg.payload.field, msg.payload.value),\n      };\n    case 'SET_FIELD_ERROR':\n      return {\n        ...state,\n        errors: setIn(state.errors, msg.payload.field, msg.payload.value),\n      };\n    case 'RESET_FORM':\n    case 'SET_FORMIK_STATE':\n      return { ...state, ...msg.payload };\n    case 'SUBMIT_ATTEMPT':\n      return {\n        ...state,\n        touched: setNestedObjectValues<FormikTouched<Values>>(\n          state.values,\n          true\n        ),\n        isSubmitting: true,\n        submitCount: state.submitCount + 1,\n      };\n    case 'SUBMIT_FAILURE':\n      return {\n        ...state,\n        isSubmitting: false,\n      };\n    case 'SUBMIT_SUCCESS':\n      return {\n        ...state,\n        isSubmitting: false,\n      };\n    default:\n      return state;\n  }\n}\n\n// Initial empty states // objects\nconst emptyErrors: FormikErrors<unknown> = {};\nconst emptyTouched: FormikTouched<unknown> = {};\n\n// This is an object that contains a map of all registered fields\n// and their validate functions\ninterface FieldRegistry {\n  [field: string]: {\n    validate: (value: any) => string | Promise<string> | undefined;\n  };\n}\n\nexport function useFormik<Values extends FormikValues = FormikValues>({\n  validateOnChange = true,\n  validateOnBlur = true,\n  isInitialValid,\n  enableReinitialize = false,\n  onSubmit,\n  ...rest\n}: FormikConfig<Values>) {\n  const props = { validateOnChange, validateOnBlur, onSubmit, ...rest };\n  const initialValues = React.useRef(props.initialValues);\n  const initialErrors = React.useRef(props.initialErrors || emptyErrors);\n  const initialTouched = React.useRef(props.initialTouched || emptyTouched);\n  const initialStatus = React.useRef(props.initialStatus);\n  const isMounted = React.useRef<boolean>(false);\n  const fieldRegistry = React.useRef<FieldRegistry>({});\n  React.useEffect(() => {\n    if (__DEV__) {\n      invariant(\n        typeof isInitialValid === 'undefined',\n        'isInitialValid has been deprecated and will be removed in future versions of Formik. Please use initialErrors instead.'\n      );\n    }\n  }, [isInitialValid]);\n\n  React.useEffect(() => {\n    isMounted.current = true;\n\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  const [state, dispatch] = React.useReducer<\n    React.Reducer<FormikState<Values>, FormikMessage<Values>>\n  >(formikReducer, {\n    values: props.initialValues,\n    errors: props.initialErrors || emptyErrors,\n    touched: props.initialTouched || emptyTouched,\n    status: props.initialStatus,\n    isSubmitting: false,\n    isValidating: false,\n    submitCount: 0,\n  });\n\n  const runValidateHandler = React.useCallback(\n    (values: Values, field?: string): Promise<FormikErrors<Values>> => {\n      return new Promise((resolve, reject) => {\n        const maybePromisedErrors = (props.validate as any)(values, field);\n        if (maybePromisedErrors == null) {\n          // use loose null check here on purpose\n          resolve(emptyErrors);\n        } else if (isPromise(maybePromisedErrors)) {\n          (maybePromisedErrors as Promise<any>).then(\n            errors => {\n              resolve(errors || emptyErrors);\n            },\n            actualException => {\n              if (process.env.NODE_ENV !== 'production') {\n                console.warn(\n                  `Warning: An unhandled error was caught during validation in <Formik validate />`,\n                  actualException\n                );\n              }\n\n              reject(actualException);\n            }\n          );\n        } else {\n          resolve(maybePromisedErrors);\n        }\n      });\n    },\n    [props.validate]\n  );\n\n  /**\n   * Run validation against a Yup schema and optionally run a function if successful\n   */\n  const runValidationSchema = React.useCallback(\n    (values: Values, field?: string): Promise<FormikErrors<Values>> => {\n      return new Promise((resolve, reject) => {\n        const validationSchema = props.validationSchema;\n        const schema = isFunction(validationSchema)\n          ? validationSchema(field)\n          : validationSchema;\n        let promise =\n          field && schema.validateAt\n            ? schema.validateAt(field, values)\n            : validateYupSchema(values, schema);\n        promise.then(\n          () => {\n            resolve(emptyErrors);\n          },\n          (err: any) => {\n            // Yup will throw a validation error if validation fails. We catch those and\n            // resolve them into Formik errors. We can sniff is something is a Yup error\n            // by checking error.name.\n            // @see https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n            if (err.name === 'ValidationError') {\n              resolve(yupToFormErrors(err));\n            } else {\n              // We throw any other errors\n              if (process.env.NODE_ENV !== 'production') {\n                console.warn(\n                  `Warning: An unhandled error was caught during validation in <Formik validationSchema />`,\n                  err\n                );\n              }\n\n              reject(err);\n            }\n          }\n        );\n      });\n    },\n    [props.validationSchema]\n  );\n\n  const runSingleFieldLevelValidation = React.useCallback(\n    (field: string, value: void | string): Promise<string> => {\n      return new Promise(resolve =>\n        resolve(fieldRegistry.current[field].validate(value))\n      );\n    },\n    []\n  );\n\n  const runFieldLevelValidations = React.useCallback(\n    (values: Values): Promise<FormikErrors<Values>> => {\n      const fieldKeysWithValidation: string[] = Object.keys(\n        fieldRegistry.current\n      ).filter(f => isFunction(fieldRegistry.current[f].validate));\n\n      // Construct an array with all of the field validation functions\n      const fieldValidations: Promise<string>[] =\n        fieldKeysWithValidation.length > 0\n          ? fieldKeysWithValidation.map(f =>\n              runSingleFieldLevelValidation(f, getIn(values, f))\n            )\n          : [Promise.resolve('DO_NOT_DELETE_YOU_WILL_BE_FIRED')]; // use special case ;)\n\n      return Promise.all(fieldValidations).then((fieldErrorsList: string[]) =>\n        fieldErrorsList.reduce((prev, curr, index) => {\n          if (curr === 'DO_NOT_DELETE_YOU_WILL_BE_FIRED') {\n            return prev;\n          }\n          if (curr) {\n            prev = setIn(prev, fieldKeysWithValidation[index], curr);\n          }\n          return prev;\n        }, {})\n      );\n    },\n    [runSingleFieldLevelValidation]\n  );\n\n  // Run all validations and return the result\n  const runAllValidations = React.useCallback(\n    (values: Values) => {\n      return Promise.all([\n        runFieldLevelValidations(values),\n        props.validationSchema ? runValidationSchema(values) : {},\n        props.validate ? runValidateHandler(values) : {},\n      ]).then(([fieldErrors, schemaErrors, validateErrors]) => {\n        const combinedErrors = deepmerge.all<FormikErrors<Values>>(\n          [fieldErrors, schemaErrors, validateErrors],\n          { arrayMerge }\n        );\n        return combinedErrors;\n      });\n    },\n    [\n      props.validate,\n      props.validationSchema,\n      runFieldLevelValidations,\n      runValidateHandler,\n      runValidationSchema,\n    ]\n  );\n\n  // Run validations and dispatching the result as low-priority via rAF.\n  //\n  // The thinking is that validation as a result of onChange and onBlur\n  // should never block user input. Note: This method should never be called\n  // during the submission phase because validation prior to submission\n  // is actaully high-priority since we absolutely need to guarantee the\n  // form is valid before executing props.onSubmit.\n  const validateFormWithLowPriority = useEventCallback(\n    (values: Values = state.values) => {\n      return unstable_runWithPriority(LowPriority, () => {\n        return runAllValidations(values).then(combinedErrors => {\n          if (!!isMounted.current) {\n            dispatch({ type: 'SET_ERRORS', payload: combinedErrors });\n          }\n          return combinedErrors;\n        });\n      });\n    },\n    [runAllValidations, state.values]\n  );\n\n  // Run all validations methods and update state accordingly\n  const validateFormWithHighPriority = useEventCallback(\n    (values: Values = state.values) => {\n      dispatch({ type: 'SET_ISVALIDATING', payload: true });\n      return runAllValidations(values).then(combinedErrors => {\n        if (!!isMounted.current) {\n          dispatch({ type: 'SET_ISVALIDATING', payload: false });\n          if (!isEqual(state.errors, combinedErrors)) {\n            dispatch({ type: 'SET_ERRORS', payload: combinedErrors });\n          }\n        }\n        return combinedErrors;\n      });\n    },\n    [state.values, state.errors, runAllValidations]\n  );\n\n  const resetForm = React.useCallback(\n    (nextState?: Partial<FormikState<Values>>) => {\n      const values =\n        nextState && nextState.values\n          ? nextState.values\n          : initialValues.current;\n      const errors =\n        nextState && nextState.errors\n          ? nextState.errors\n          : initialErrors.current\n          ? initialErrors.current\n          : props.initialErrors || {};\n      const touched =\n        nextState && nextState.touched\n          ? nextState.touched\n          : initialTouched.current\n          ? initialTouched.current\n          : props.initialTouched || {};\n      const status =\n        nextState && nextState.status\n          ? nextState.status\n          : initialStatus.current\n          ? initialStatus.current\n          : props.initialStatus;\n      initialValues.current = values;\n      initialErrors.current = errors;\n      initialTouched.current = touched;\n      initialStatus.current = status;\n\n      dispatch({\n        type: 'RESET_FORM',\n        payload: {\n          isSubmitting: !!nextState && !!nextState.isSubmitting,\n          errors,\n          touched,\n          status,\n          values,\n          isValidating: !!nextState && !!nextState.isValidating,\n          submitCount:\n            !!nextState &&\n            !!nextState.submitCount &&\n            typeof nextState.submitCount === 'number'\n              ? nextState.submitCount\n              : 0,\n        },\n      });\n    },\n    [props.initialErrors, props.initialStatus, props.initialTouched]\n  );\n\n  React.useEffect(() => {\n    if (\n      enableReinitialize &&\n      isMounted.current === true &&\n      !isEqual(initialValues.current, props.initialValues)\n    ) {\n      initialValues.current = props.initialValues;\n      resetForm();\n    }\n  }, [enableReinitialize, props.initialValues, resetForm]);\n\n  const validateField = useEventCallback(\n    (name: string) => {\n      // This will efficiently validate a single field by avoiding state\n      // changes if the validation function is synchronous. It's different from\n      // what is called when using validateForm.\n\n      if (isFunction(fieldRegistry.current[name].validate)) {\n        const value = getIn(state.values, name);\n        const maybePromise = fieldRegistry.current[name].validate(value);\n        if (isPromise(maybePromise)) {\n          // Only flip isValidating if the function is async.\n          dispatch({ type: 'SET_ISVALIDATING', payload: true });\n          return maybePromise\n            .then((x: any) => x)\n            .then((error: string) => {\n              dispatch({\n                type: 'SET_FIELD_ERROR',\n                payload: { field: name, value: error },\n              });\n              dispatch({ type: 'SET_ISVALIDATING', payload: false });\n            });\n        } else {\n          dispatch({\n            type: 'SET_FIELD_ERROR',\n            payload: {\n              field: name,\n              value: maybePromise as string | undefined,\n            },\n          });\n          return Promise.resolve(maybePromise as string | undefined);\n        }\n      } else {\n        return Promise.resolve();\n      }\n    },\n    [state.values]\n  );\n\n  const registerField = React.useCallback((name: string, { validate }: any) => {\n    fieldRegistry.current[name] = {\n      validate,\n    };\n  }, []);\n\n  const unregisterField = React.useCallback((name: string) => {\n    delete fieldRegistry.current[name];\n  }, []);\n\n  const setTouched = useEventCallback(\n    (touched: FormikTouched<Values>) => {\n      dispatch({ type: 'SET_TOUCHED', payload: touched });\n      return validateOnBlur\n        ? validateFormWithLowPriority(state.values)\n        : Promise.resolve();\n    },\n    [validateFormWithLowPriority, state.values, validateOnBlur]\n  );\n\n  const setErrors = React.useCallback((errors: FormikErrors<Values>) => {\n    dispatch({ type: 'SET_ERRORS', payload: errors });\n  }, []);\n\n  const setValues = useEventCallback(\n    (values: Values) => {\n      dispatch({ type: 'SET_VALUES', payload: values });\n      return validateOnChange\n        ? validateFormWithLowPriority(state.values)\n        : Promise.resolve();\n    },\n    [validateFormWithLowPriority, state.values, validateOnChange]\n  );\n\n  const setFieldError = React.useCallback(\n    (field: string, value: string | undefined) => {\n      dispatch({\n        type: 'SET_FIELD_ERROR',\n        payload: { field, value },\n      });\n    },\n    []\n  );\n\n  const setFieldValue = useEventCallback(\n    (field: string, value: any, shouldValidate: boolean = true) => {\n      dispatch({\n        type: 'SET_FIELD_VALUE',\n        payload: {\n          field,\n          value,\n        },\n      });\n      return validateOnChange && shouldValidate\n        ? validateFormWithLowPriority(setIn(state.values, field, value))\n        : Promise.resolve();\n    },\n    [validateFormWithLowPriority, state.values, validateOnChange]\n  );\n\n  const executeChange = React.useCallback(\n    (eventOrTextValue: string | React.ChangeEvent<any>, maybePath?: string) => {\n      // By default, assume that the first argument is a string. This allows us to use\n      // handleChange with React Native and React Native Web's onChangeText prop which\n      // provides just the value of the input.\n      let field = maybePath;\n      let val = eventOrTextValue;\n      let parsed;\n      // If the first argument is not a string though, it has to be a synthetic React Event (or a fake one),\n      // so we handle like we would a normal HTML change event.\n      if (!isString(eventOrTextValue)) {\n        // If we can, persist the event\n        // @see https://reactjs.org/docs/events.html#event-pooling\n        if ((eventOrTextValue as React.ChangeEvent<any>).persist) {\n          (eventOrTextValue as React.ChangeEvent<any>).persist();\n        }\n        const {\n          type,\n          name,\n          id,\n          value,\n          checked,\n          outerHTML,\n          options,\n          multiple,\n        } = (eventOrTextValue as React.ChangeEvent<any>).target;\n\n        field = maybePath ? maybePath : name ? name : id;\n        if (!field && __DEV__) {\n          warnAboutMissingIdentifier({\n            htmlContent: outerHTML,\n            documentationAnchorLink: 'handlechange-e-reactchangeeventany--void',\n            handlerName: 'handleChange',\n          });\n        }\n        val = /number|range/.test(type)\n          ? ((parsed = parseFloat(value)), isNaN(parsed) ? '' : parsed)\n          : /checkbox/.test(type) // checkboxes\n          ? getValueForCheckbox(getIn(state.values, field!), checked, value)\n          : !!multiple // <select multiple>\n          ? getSelectedValues(options)\n          : value;\n      }\n\n      if (field) {\n        // Set form fields by name\n        setFieldValue(field, val);\n      }\n    },\n    [setFieldValue, state.values]\n  );\n\n  const handleChange = React.useCallback(\n    (\n      eventOrPath: string | React.ChangeEvent<any>\n    ): void | ((eventOrTextValue: string | React.ChangeEvent<any>) => void) => {\n      if (isString(eventOrPath)) {\n        return event => executeChange(event, eventOrPath);\n      } else {\n        executeChange(eventOrPath);\n      }\n    },\n    [executeChange]\n  );\n\n  const setFieldTouched = useEventCallback(\n    (\n      field: string,\n      touched: boolean = true,\n      shouldValidate: boolean = true\n    ) => {\n      dispatch({\n        type: 'SET_FIELD_TOUCHED',\n        payload: {\n          field,\n          value: touched,\n        },\n      });\n      return validateOnBlur && shouldValidate\n        ? validateFormWithLowPriority(state.values)\n        : Promise.resolve();\n    },\n    [validateFormWithLowPriority, state.values, validateOnBlur]\n  );\n\n  const executeBlur = React.useCallback(\n    (e: any, path?: string) => {\n      if (e.persist) {\n        e.persist();\n      }\n      const { name, id, outerHTML } = e.target;\n      const field = path ? path : name ? name : id;\n\n      if (!field && __DEV__) {\n        warnAboutMissingIdentifier({\n          htmlContent: outerHTML,\n          documentationAnchorLink: 'handleblur-e-any--void',\n          handlerName: 'handleBlur',\n        });\n      }\n\n      setFieldTouched(field, true);\n    },\n    [setFieldTouched]\n  );\n\n  const handleBlur = React.useCallback(\n    (eventOrString: any): void | ((e: any) => void) => {\n      if (isString(eventOrString)) {\n        return event => executeBlur(event, eventOrString);\n      } else {\n        executeBlur(eventOrString);\n      }\n    },\n    [executeBlur]\n  );\n\n  function setFormikState(\n    stateOrCb:\n      | FormikState<Values>\n      | ((state: FormikState<Values>) => FormikState<Values>)\n  ): void {\n    if (isFunction(stateOrCb)) {\n      dispatch({ type: 'SET_FORMIK_STATE', payload: stateOrCb(state) });\n    } else {\n      dispatch({ type: 'SET_FORMIK_STATE', payload: stateOrCb });\n    }\n  }\n\n  const setStatus = React.useCallback((status: any) => {\n    dispatch({ type: 'SET_STATUS', payload: status });\n  }, []);\n\n  const setSubmitting = React.useCallback((isSubmitting: boolean) => {\n    dispatch({ type: 'SET_ISSUBMITTING', payload: isSubmitting });\n  }, []);\n\n  const imperativeMethods = {\n    resetForm,\n\n    validateForm: validateFormWithHighPriority,\n    validateField,\n    setErrors,\n    setFieldError,\n    setFieldTouched,\n    setFieldValue,\n    setStatus,\n    setSubmitting,\n    setTouched,\n    setValues,\n    setFormikState,\n  };\n\n  const executeSubmit = useEventCallback(() => {\n    return onSubmit(state.values, imperativeMethods);\n  }, [imperativeMethods, onSubmit, state.values]);\n\n  const submitForm = useEventCallback(() => {\n    dispatch({ type: 'SUBMIT_ATTEMPT' });\n    return validateFormWithHighPriority().then(\n      (combinedErrors: FormikErrors<Values>) => {\n        const isActuallyValid = Object.keys(combinedErrors).length === 0;\n        if (isActuallyValid) {\n          return Promise.resolve(executeSubmit())\n            .then(() => {\n              if (!!isMounted.current) {\n                dispatch({ type: 'SUBMIT_SUCCESS' });\n              }\n            })\n            .catch(_errors => {\n              if (!!isMounted.current) {\n                dispatch({ type: 'SUBMIT_FAILURE' });\n                throw _errors;\n              }\n            });\n        } else if (!!isMounted.current) {\n          // ^^^ Make sure Formik is still mounted before calling setState\n          dispatch({ type: 'SUBMIT_FAILURE' });\n          return;\n        }\n        return;\n      }\n    );\n  }, [executeSubmit, validateFormWithHighPriority]);\n\n  const handleSubmit = useEventCallback(\n    (e?: React.FormEvent<HTMLFormElement>) => {\n      if (e && e.preventDefault && isFunction(e.preventDefault)) {\n        e.preventDefault();\n      }\n\n      if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n        e.stopPropagation();\n      }\n\n      // Warn if form submission is triggered by a <button> without a\n      // specified `type` attribute during development. This mitigates\n      // a common gotcha in forms with both reset and submit buttons,\n      // where the dev forgets to add type=\"button\" to the reset button.\n      if (__DEV__ && typeof document !== 'undefined') {\n        // Safely get the active element (works with IE)\n        const activeElement = getActiveElement();\n        if (\n          activeElement !== null &&\n          activeElement instanceof HTMLButtonElement\n        ) {\n          invariant(\n            activeElement.attributes &&\n              activeElement.attributes.getNamedItem('type'),\n            'You submitted a Formik form using a button with an unspecified `type` attribute.  Most browsers default button elements to `type=\"submit\"`. If this is not a submit button, please add `type=\"button\"`.'\n          );\n        }\n      }\n\n      submitForm();\n    },\n    [submitForm]\n  );\n  const handleReset = useEventCallback(\n    e => {\n      if (e && e.preventDefault && isFunction(e.preventDefault)) {\n        e.preventDefault();\n      }\n\n      if (e && e.stopPropagation && isFunction(e.stopPropagation)) {\n        e.stopPropagation();\n      }\n\n      if (props.onReset) {\n        const maybePromisedOnReset = (props.onReset as any)(\n          state.values,\n          imperativeMethods\n        );\n\n        if (isPromise(maybePromisedOnReset)) {\n          (maybePromisedOnReset as Promise<any>).then(resetForm);\n        } else {\n          resetForm();\n        }\n      } else {\n        resetForm();\n      }\n    },\n    [imperativeMethods, props.onReset, resetForm, state.values]\n  );\n\n  const getFieldMeta = React.useCallback(\n    (name: string) => {\n      return {\n        value: getIn(state.values, name),\n        error: getIn(state.errors, name),\n        touched: !!getIn(state.touched, name),\n        initialValue: getIn(initialValues.current, name),\n        initialTouched: !!getIn(initialTouched.current, name),\n        initialError: getIn(initialErrors.current, name),\n      };\n    },\n    [state.errors, state.touched, state.values]\n  );\n\n  const getFieldProps = React.useCallback(\n    ({\n      name,\n      type,\n      value: valueProp, // value is special for checkboxes\n      as: is,\n      multiple,\n    }): [FieldInputProps<any>, FieldMetaProps<any>] => {\n      const valueState = getIn(state.values, name);\n\n      const field: FieldInputProps<any> = {\n        name,\n        value: valueState,\n        onChange: handleChange,\n        onBlur: handleBlur,\n      };\n\n      if (type === 'checkbox') {\n        if (valueProp === undefined) {\n          field.checked = !!valueState;\n        } else {\n          field.checked = !!(\n            Array.isArray(valueState) && ~valueState.indexOf(valueProp)\n          );\n          field.value = valueProp;\n        }\n      } else if (type === 'radio') {\n        field.checked = valueState === valueProp;\n        field.value = valueProp;\n      } else if (is === 'select' && multiple) {\n        field.value = field.value || [];\n        field.multiple = true;\n      }\n      return [field, getFieldMeta(name)];\n    },\n    [getFieldMeta, handleBlur, handleChange, state.values]\n  );\n\n  const dirty = React.useMemo(\n    () => !isEqual(initialValues.current, state.values),\n    [state.values]\n  );\n\n  const isValid = React.useMemo(\n    () =>\n      typeof isInitialValid !== 'undefined'\n        ? dirty\n          ? state.errors && Object.keys(state.errors).length === 0\n          : isInitialValid !== false && isFunction(isInitialValid)\n          ? (isInitialValid as (props: FormikConfig<Values>) => boolean)(props)\n          : (isInitialValid as boolean)\n        : state.errors && Object.keys(state.errors).length === 0,\n    [isInitialValid, dirty, state.errors, props]\n  );\n\n  const ctx = {\n    ...state,\n    initialValues: initialValues.current,\n    initialErrors: initialErrors.current,\n    initialTouched: initialTouched.current,\n    initialStatus: initialStatus.current,\n    handleBlur,\n    handleChange,\n    handleReset,\n    handleSubmit,\n    resetForm,\n    setErrors,\n    setFormikState,\n    setFieldTouched,\n    setFieldValue,\n    setFieldError,\n    setStatus,\n    setSubmitting,\n    setTouched,\n    setValues,\n    submitForm,\n    validateForm: validateFormWithHighPriority,\n    validateField,\n    isValid,\n    dirty,\n    unregisterField,\n    registerField,\n    getFieldProps,\n    validateOnBlur,\n    validateOnChange,\n  };\n\n  return ctx;\n}\n\nexport function Formik<\n  Values extends FormikValues = FormikValues,\n  ExtraProps = {}\n>(props: FormikConfig<Values> & ExtraProps) {\n  const formikbag = useFormik<Values>(props);\n  const { component, children, render } = props;\n  return (\n    <FormikProvider value={formikbag}>\n      {component\n        ? React.createElement(component as any, formikbag)\n        : render\n        ? render(formikbag)\n        : children // children come last, always called\n        ? isFunction(children)\n          ? (children as ((bag: FormikProps<Values>) => React.ReactNode))(\n              formikbag as FormikProps<Values>\n            )\n          : !isEmptyChildren(children)\n          ? React.Children.only(children)\n          : null\n        : null}\n    </FormikProvider>\n  );\n}\n\nfunction warnAboutMissingIdentifier({\n  htmlContent,\n  documentationAnchorLink,\n  handlerName,\n}: {\n  htmlContent: string;\n  documentationAnchorLink: string;\n  handlerName: string;\n}) {\n  console.warn(\n    `Warning: Formik called \\`${handlerName}\\`, but you forgot to pass an \\`id\\` or \\`name\\` attribute to your input:\n    ${htmlContent}\n    Formik cannot determine which value to update. For more info see https://github.com/jaredpalmer/formik#${documentationAnchorLink}\n  `\n  );\n}\n\n/**\n * Transform Yup ValidationError to a more usable object\n */\nexport function yupToFormErrors<Values>(yupError: any): FormikErrors<Values> {\n  let errors: FormikErrors<Values> = {};\n  if (yupError.inner.length === 0) {\n    return setIn(errors, yupError.path, yupError.message);\n  }\n  for (let err of yupError.inner) {\n    if (!(errors as any)[err.path]) {\n      errors = setIn(errors, err.path, err.message);\n    }\n  }\n  return errors;\n}\n\n/**\n * Validate a yup schema.\n */\nexport function validateYupSchema<T extends FormikValues>(\n  values: T,\n  schema: any,\n  sync: boolean = false,\n  context: any = {}\n): Promise<Partial<T>> {\n  let validateData: FormikValues = {};\n  for (let k in values) {\n    if (values.hasOwnProperty(k)) {\n      const key = String(k);\n      validateData[key] = values[key] !== '' ? values[key] : undefined;\n    }\n  }\n  return schema[sync ? 'validateSync' : 'validate'](validateData, {\n    abortEarly: false,\n    context: context,\n  });\n}\n\n/**\n * deepmerge array merging algorithm\n * https://github.com/KyleAMathews/deepmerge#combine-array\n */\nfunction arrayMerge(target: any[], source: any[], options: any): any[] {\n  const destination = target.slice();\n\n  source.forEach(function(e: any, i: number) {\n    if (typeof destination[i] === 'undefined') {\n      const cloneRequested = options.clone !== false;\n      const shouldClone = cloneRequested && options.isMergeableObject(e);\n      destination[i] = shouldClone\n        ? deepmerge(Array.isArray(e) ? [] : {}, e, options)\n        : e;\n    } else if (options.isMergeableObject(e)) {\n      destination[i] = deepmerge(target[i], e, options);\n    } else if (target.indexOf(e) === -1) {\n      destination.push(e);\n    }\n  });\n  return destination;\n}\n\n/** Return multi select values based on an array of options */\nfunction getSelectedValues(options: any[]) {\n  return options.filter(el => el.selected).map(el => el.value);\n}\n\n/** Return the next value for a checkbox */\nfunction getValueForCheckbox(\n  currentValue: string | any[],\n  checked: boolean,\n  valueProp: any\n) {\n  // eslint-disable-next-line eqeqeq\n  if (valueProp == 'true' || valueProp == 'false') {\n    return !!checked;\n  }\n\n  if (checked) {\n    return Array.isArray(currentValue)\n      ? currentValue.concat(valueProp)\n      : [valueProp];\n  }\n  if (!Array.isArray(currentValue)) {\n    return !!currentValue;\n  }\n  const index = currentValue.indexOf(valueProp);\n  if (index < 0) {\n    return currentValue;\n  }\n  return currentValue.slice(0, index).concat(currentValue.slice(index + 1));\n}\n\nfunction useEventCallback<T extends (...args: any[]) => any>(\n  fn: T,\n  dependencies: React.DependencyList\n): T {\n  const ref: any = React.useRef(() => {\n    throw new Error('Cannot call an event handler while rendering.');\n  });\n\n  React.useEffect(() => {\n    ref.current = fn;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [fn, ...dependencies]);\n\n  return React.useCallback<any>(\n    (...argz: any[]) => {\n      const fn = ref.current;\n      return fn(...argz);\n    },\n    [ref]\n  ) as T;\n}\n","import * as React from 'react';\nimport {\n  FormikProps,\n  GenericFieldHTMLAttributes,\n  FieldMetaProps,\n  FieldInputProps,\n  FieldValidator,\n} from './types';\nimport { useFormikContext } from './FormikContext';\nimport { isFunction, isEmptyChildren, isObject } from './utils';\nimport invariant from 'tiny-warning';\n\nexport interface FieldProps<V = any> {\n  field: FieldInputProps<V>;\n  form: FormikProps<V>; // if ppl want to restrict this for a given form, let them.\n  meta: FieldMetaProps<V>;\n}\n\nexport interface FieldConfig {\n  /**\n   * Field component to render. Can either be a string like 'select' or a component.\n   * @deprecated\n   */\n  component?:\n    | string\n    | React.ComponentType<FieldProps<any>>\n    | React.ComponentType;\n\n  /**\n   * Component to render. Can either be a string e.g. 'select', 'input', or 'textarea', or a component.\n   */\n  as?:\n    | React.ComponentType<FieldProps<any>['field']>\n    | keyof JSX.IntrinsicElements\n    | React.ComponentType;\n\n  /**\n   * Render prop (works like React router's <Route render={props =>} />)\n   * @deprecated\n   */\n  render?: (props: FieldProps<any>) => React.ReactNode;\n\n  /**\n   * Children render function <Field name>{props => ...}</Field>)\n   */\n  children?: ((props: FieldProps<any>) => React.ReactNode) | React.ReactNode;\n\n  /**\n   * Validate a single field value independently\n   */\n  validate?: FieldValidator;\n\n  /**\n   * Field name\n   */\n  name: string;\n\n  /** HTML input type */\n  type?: string;\n\n  /** Field value */\n  value?: any;\n\n  /** Inner ref */\n  innerRef?: (instance: any) => void;\n}\n\nexport type FieldAttributes<T> = GenericFieldHTMLAttributes &\n  FieldConfig &\n  T & { name: string };\n\nexport function useField<Val = any>(\n  propsOrFieldName: string | FieldAttributes<Val>\n) {\n  const formik = useFormikContext();\n  if (__DEV__) {\n    invariant(\n      formik,\n      'useField() / <Field /> must be used underneath a <Formik> component or withFormik() higher order component'\n    );\n  }\n\n  if (isObject(propsOrFieldName)) {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(\n        (propsOrFieldName as FieldAttributes<Val>).name,\n        'Invalid field name. Either pass `useField` a string or an object containing a `name` key.'\n      );\n    }\n    return formik.getFieldProps(propsOrFieldName);\n  }\n\n  return formik.getFieldProps({ name: propsOrFieldName });\n}\n\nexport function Field({\n  validate,\n  name,\n  render,\n  children,\n  as: is, // `as` is reserved in typescript lol\n  component,\n  ...props\n}: FieldAttributes<any>) {\n  const {\n    validate: _validate,\n    validationSchema: _validationSchema,\n    ...formik\n  } = useFormikContext();\n\n  React.useEffect(() => {\n    if (__DEV__) {\n      invariant(\n        !render,\n        `<Field render> has been deprecated and will be removed in future versions of Formik. Please use a child callback function instead. To get rid of this warning, replace <Field name=\"${name}\" render={({field, form}) => ...} /> with <Field name=\"${name}\">{({field, form, meta}) => ...}</Field>`\n      );\n\n      invariant(\n        !component,\n        '<Field component> has been deprecated and will be removed in future versions of Formik. Use <Field as> instead. Note that with the `as` prop, all props are passed directly through and not grouped in `field` object key.'\n      );\n\n      invariant(\n        !(is && children && isFunction(children)),\n        'You should not use <Field as> and <Field children> as a function in the same <Field> component; <Field as> will be ignored.'\n      );\n\n      invariant(\n        !(component && children && isFunction(children)),\n        'You should not use <Field component> and <Field children> as a function in the same <Field> component; <Field component> will be ignored.'\n      );\n\n      invariant(\n        !(render && children && !isEmptyChildren(children)),\n        'You should not use <Field render> and <Field children> in the same <Field> component; <Field children> will be ignored'\n      );\n    }\n    // eslint-disable-next-line\n  }, []);\n\n  React.useEffect(() => {\n    formik.registerField(name, {\n      validate: validate,\n    });\n    return () => {\n      formik.unregisterField(name);\n    };\n  }, [formik, name, validate]);\n  const [field, meta] = formik.getFieldProps({ name, ...props });\n  const legacyBag = { field, form: formik };\n\n  if (render) {\n    return render(legacyBag);\n  }\n\n  if (isFunction(children)) {\n    return children({ ...legacyBag, meta });\n  }\n\n  if (component) {\n    // This behavior is backwards compat with earlier Formik 0.9 to 1.x\n    if (typeof component === 'string') {\n      const { innerRef, ...rest } = props;\n      return React.createElement(\n        component,\n        { ref: innerRef, ...field, ...rest },\n        children\n      );\n    }\n    // We don't pass `meta` for backwards compat\n    return React.createElement(\n      component,\n      { field, form: formik, ...props },\n      children\n    );\n  }\n\n  // default to input here so we can check for both `as` and `children` above\n  const asElement = is || 'input';\n\n  if (typeof asElement === 'string') {\n    const { innerRef, ...rest } = props;\n    return React.createElement(\n      asElement,\n      { ref: innerRef, ...field, ...rest },\n      children\n    );\n  }\n\n  return React.createElement(asElement, { ...field, ...props }, children);\n}\nexport const FastField = Field;\n","import * as React from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\nimport { FormikContext } from './types';\nimport { FormikConsumer } from './FormikContext';\nimport invariant from 'tiny-warning';\n\n/**\n * Connect any component to Formik context, and inject as a prop called `formik`;\n * @param Comp React Component\n */\nexport function connect<OuterProps, Values = {}>(\n  Comp: React.ComponentType<OuterProps & { formik: FormikContext<Values> }>\n) {\n  const C: React.SFC<OuterProps> = (props: OuterProps) => (\n    <FormikConsumer>\n      {formik => {\n        invariant(\n          !!formik,\n          `Formik context is undefined, please verify you are rendering <Form>, <Field>, <FastField>, <FieldArray>, or your custom context-using component as a child of a <Formik> component. Component name: ${\n            Comp.name\n          }`\n        );\n        return <Comp {...props} formik={formik} />;\n      }}\n    </FormikConsumer>\n  );\n  const componentDisplayName =\n    Comp.displayName ||\n    Comp.name ||\n    (Comp.constructor && Comp.constructor.name) ||\n    'Component';\n\n  // Assign Comp to C.WrappedComponent so we can access the inner component in tests\n  // For example, <Field.WrappedComponent /> gets us <FieldInner/>\n  (C as React.SFC<OuterProps> & {\n    WrappedComponent: React.ReactNode;\n  }).WrappedComponent = Comp;\n\n  C.displayName = `FormikConnect(${componentDisplayName})`;\n\n  return hoistNonReactStatics(\n    C,\n    Comp as React.ComponentClass<OuterProps & { formik: FormikContext<Values> }> // cast type to ComponentClass (even if SFC)\n  ) as React.ComponentType<OuterProps>;\n}\n","import * as React from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { connect } from './connect';\nimport {\n  FormikContext,\n  FormikState,\n  SharedRenderProps,\n  FormikProps,\n} from './types';\nimport { getIn, isEmptyChildren, isFunction, setIn } from './utils';\n\nexport type FieldArrayRenderProps = ArrayHelpers & {\n  form: FormikProps<any>;\n  name: string;\n};\n\nexport type FieldArrayConfig = {\n  /** Really the path to the array field to be updated */\n  name: string;\n  /** Should field array validate the form AFTER array updates/changes? */\n  validateOnChange?: boolean;\n} & SharedRenderProps<FieldArrayRenderProps>;\nexport interface ArrayHelpers {\n  /** Imperatively add a value to the end of an array */\n  push: (obj: any) => void;\n  /** Curried fn to add a value to the end of an array */\n  handlePush: (obj: any) => () => void;\n  /** Imperatively swap two values in an array */\n  swap: (indexA: number, indexB: number) => void;\n  /** Curried fn to swap two values in an array */\n  handleSwap: (indexA: number, indexB: number) => () => void;\n  /** Imperatively move an element in an array to another index */\n  move: (from: number, to: number) => void;\n  /** Imperatively move an element in an array to another index */\n  handleMove: (from: number, to: number) => () => void;\n  /** Imperatively insert an element at a given index into the array */\n  insert: (index: number, value: any) => void;\n  /** Curried fn to insert an element at a given index into the array */\n  handleInsert: (index: number, value: any) => () => void;\n  /** Imperatively replace a value at an index of an array  */\n  replace: (index: number, value: any) => void;\n  /** Curried fn to replace an element at a given index into the array */\n  handleReplace: (index: number, value: any) => () => void;\n  /** Imperatively add an element to the beginning of an array and return its length */\n  unshift: (value: any) => number;\n  /** Curried fn to add an element to the beginning of an array */\n  handleUnshift: (value: any) => () => void;\n  /** Curried fn to remove an element at an index of an array */\n  handleRemove: (index: number) => () => void;\n  /** Curried fn to remove a value from the end of the array */\n  handlePop: () => () => void;\n  /** Imperatively remove and element at an index of an array */\n  remove<T>(index: number): T | undefined;\n  /** Imperatively remove and return value from the end of the array */\n  pop<T>(): T | undefined;\n}\n\n/**\n * Some array helpers!\n */\nexport const move = (array: any[], from: number, to: number) => {\n  const copy = [...(array || [])];\n  const value = copy[from];\n  copy.splice(from, 1);\n  copy.splice(to, 0, value);\n  return copy;\n};\n\nexport const swap = (array: any[], indexA: number, indexB: number) => {\n  const copy = [...(array || [])];\n  const a = copy[indexA];\n  copy[indexA] = copy[indexB];\n  copy[indexB] = a;\n  return copy;\n};\n\nexport const insert = (array: any[], index: number, value: any) => {\n  const copy = [...(array || [])];\n  copy.splice(index, 0, value);\n  return copy;\n};\n\nexport const replace = (array: any[], index: number, value: any) => {\n  const copy = [...(array || [])];\n  copy[index] = value;\n  return copy;\n};\nclass FieldArrayInner<Values = {}> extends React.Component<\n  FieldArrayConfig & { formik: FormikContext<Values> },\n  {}\n> {\n  static defaultProps = {\n    validateOnChange: true,\n  };\n\n  constructor(props: FieldArrayConfig & { formik: FormikContext<Values> }) {\n    super(props);\n    // We need TypeScript generics on these, so we'll bind them in the constructor\n    // @todo Fix TS 3.2.1\n    this.remove = this.remove.bind(this) as any;\n    this.pop = this.pop.bind(this) as any;\n  }\n\n  updateArrayField = (\n    fn: Function,\n    alterTouched: boolean | Function,\n    alterErrors: boolean | Function\n  ) => {\n    const {\n      name,\n      validateOnChange,\n      formik: { setFormikState, validateForm },\n    } = this.props;\n    setFormikState(\n      (prevState: FormikState<any>) => {\n        let updateErrors = typeof alterErrors === 'function' ? alterErrors : fn;\n        let updateTouched =\n          typeof alterTouched === 'function' ? alterTouched : fn;\n\n        return {\n          ...prevState,\n          values: setIn(\n            prevState.values,\n            name,\n            fn(getIn(prevState.values, name))\n          ),\n          errors: alterErrors\n            ? setIn(\n                prevState.errors,\n                name,\n                updateErrors(getIn(prevState.errors, name))\n              )\n            : prevState.errors,\n          touched: alterTouched\n            ? setIn(\n                prevState.touched,\n                name,\n                updateTouched(getIn(prevState.touched, name))\n              )\n            : prevState.touched,\n        };\n      },\n      () => {\n        if (validateOnChange) {\n          validateForm();\n        }\n      }\n    );\n  };\n\n  push = (value: any) =>\n    this.updateArrayField(\n      (array: any[]) => [...(array || []), cloneDeep(value)],\n      false,\n      false\n    );\n\n  handlePush = (value: any) => () => this.push(value);\n\n  swap = (indexA: number, indexB: number) =>\n    this.updateArrayField(\n      (array: any[]) => swap(array, indexA, indexB),\n      true,\n      true\n    );\n\n  handleSwap = (indexA: number, indexB: number) => () =>\n    this.swap(indexA, indexB);\n\n  move = (from: number, to: number) =>\n    this.updateArrayField((array: any[]) => move(array, from, to), true, true);\n\n  handleMove = (from: number, to: number) => () => this.move(from, to);\n\n  insert = (index: number, value: any) =>\n    this.updateArrayField(\n      (array: any[]) => insert(array, index, value),\n      (array: any[]) => insert(array, index, null),\n      (array: any[]) => insert(array, index, null)\n    );\n\n  handleInsert = (index: number, value: any) => () => this.insert(index, value);\n\n  replace = (index: number, value: any) =>\n    this.updateArrayField(\n      (array: any[]) => replace(array, index, value),\n      false,\n      false\n    );\n\n  handleReplace = (index: number, value: any) => () =>\n    this.replace(index, value);\n\n  unshift = (value: any) => {\n    let length = -1;\n    this.updateArrayField(\n      (array: any[]) => {\n        const arr = array ? [value, ...array] : [value];\n        if (length < 0) {\n          length = arr.length;\n        }\n        return arr;\n      },\n      (array: any[]) => {\n        const arr = array ? [null, ...array] : [null];\n        if (length < 0) {\n          length = arr.length;\n        }\n        return arr;\n      },\n      (array: any[]) => {\n        const arr = array ? [null, ...array] : [null];\n        if (length < 0) {\n          length = arr.length;\n        }\n        return arr;\n      }\n    );\n    return length;\n  };\n\n  handleUnshift = (value: any) => () => this.unshift(value);\n\n  remove<T>(index: number): T {\n    // We need to make sure we also remove relevant pieces of `touched` and `errors`\n    let result: any;\n    this.updateArrayField(\n      // so this gets call 3 times\n      (array?: any[]) => {\n        const copy = array ? [...array] : [];\n        if (!result) {\n          result = copy[index];\n        }\n        if (isFunction(copy.splice)) {\n          copy.splice(index, 1);\n        }\n        return copy;\n      },\n      true,\n      true\n    );\n\n    return result as T;\n  }\n\n  handleRemove = (index: number) => () => this.remove<any>(index);\n\n  pop<T>(): T {\n    // Remove relevant pieces of `touched` and `errors` too!\n    let result: any;\n    this.updateArrayField(\n      // so this gets call 3 times\n      (array: any[]) => {\n        const tmp = array;\n        if (!result) {\n          result = tmp && tmp.pop && tmp.pop();\n        }\n        return tmp;\n      },\n      true,\n      true\n    );\n\n    return result as T;\n  }\n\n  handlePop = () => () => this.pop<any>();\n\n  render() {\n    const arrayHelpers: ArrayHelpers = {\n      push: this.push,\n      pop: this.pop,\n      swap: this.swap,\n      move: this.move,\n      insert: this.insert,\n      replace: this.replace,\n      unshift: this.unshift,\n      remove: this.remove,\n      handlePush: this.handlePush,\n      handlePop: this.handlePop,\n      handleSwap: this.handleSwap,\n      handleMove: this.handleMove,\n      handleInsert: this.handleInsert,\n      handleReplace: this.handleReplace,\n      handleUnshift: this.handleUnshift,\n      handleRemove: this.handleRemove,\n    };\n\n    const {\n      component,\n      render,\n      children,\n      name,\n      formik: {\n        validate: _validate,\n        validationSchema: _validationSchema,\n        ...restOfFormik\n      },\n    } = this.props;\n\n    const props: FieldArrayRenderProps = {\n      ...arrayHelpers,\n      form: restOfFormik,\n      name,\n    };\n\n    return component\n      ? React.createElement(component as any, props)\n      : render\n        ? (render as any)(props)\n        : children // children come last, always called\n          ? typeof children === 'function'\n            ? (children as any)(props)\n            : !isEmptyChildren(children) ? React.Children.only(children) : null\n          : null;\n  }\n}\n\nexport const FieldArray = connect<FieldArrayConfig, any>(FieldArrayInner);\n","import * as React from 'react';\nimport { FormikContext } from './types';\nimport { getIn, isFunction } from './utils';\nimport { connect } from './connect';\n\nexport interface ErrorMessageProps {\n  name: string;\n  className?: string;\n  component?: string | React.ComponentType;\n  children?: ((errorMessage: string) => React.ReactNode);\n  render?: ((errorMessage: string) => React.ReactNode);\n}\n\nclass ErrorMessageImpl extends React.Component<\n  ErrorMessageProps & { formik: FormikContext<any> }\n> {\n  shouldComponentUpdate(\n    props: ErrorMessageProps & { formik: FormikContext<any> }\n  ) {\n    if (\n      getIn(this.props.formik.errors, this.props.name) !==\n        getIn(props.formik.errors, this.props.name) ||\n      getIn(this.props.formik.touched, this.props.name) !==\n        getIn(props.formik.touched, this.props.name) ||\n      Object.keys(this.props).length !== Object.keys(props).length\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  render() {\n    let { component, formik, render, children, name, ...rest } = this.props;\n\n    const touch = getIn(formik.touched, name);\n    const error = getIn(formik.errors, name);\n\n    return !!touch && !!error\n      ? render\n        ? isFunction(render) ? render(error) : null\n        : children\n          ? isFunction(children) ? children(error) : null\n          : component\n            ? React.createElement(component, rest as any, error)\n            : error\n      : null;\n  }\n}\n\nexport const ErrorMessage = connect<\n  ErrorMessageProps,\n  ErrorMessageProps & { formik: FormikContext<any> }\n>(ErrorMessageImpl);\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar formatName = function formatName(_ref, name) {\n  var sectionPrefix = _ref._reduxForm.sectionPrefix;\n  return sectionPrefix ? sectionPrefix + \".\" + name : name;\n};\n\nvar _default = formatName;\nexports[\"default\"] = _default;","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","export { default } from './StylesProvider';\nexport * from './StylesProvider';","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","module.exports = true;\n","exports.f = {}.propertyIsEnumerable;\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport createGenerateClassName from '../createGenerateClassName';\nimport { create } from 'jss';\nimport jssPreset from '../jssPreset'; // Default JSS instance.\n\nvar jss = create(jssPreset()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = createGenerateClassName(); // Exported for test purposes\n\nexport var sheetsManager = new Map();\nvar defaultOptions = {\n  disableGeneration: false,\n  generateClassName: generateClassName,\n  jss: jss,\n  sheetsCache: null,\n  sheetsManager: sheetsManager,\n  sheetsRegistry: null\n};\nexport var StylesContext = React.createContext(defaultOptions);\n\nif (process.env.NODE_ENV !== 'production') {\n  StylesContext.displayName = 'StylesContext';\n}\n\nvar injectFirstNode;\n\nfunction StylesProvider(props) {\n  var children = props.children,\n      _props$injectFirst = props.injectFirst,\n      injectFirst = _props$injectFirst === void 0 ? false : _props$injectFirst,\n      _props$disableGenerat = props.disableGeneration,\n      disableGeneration = _props$disableGenerat === void 0 ? false : _props$disableGenerat,\n      localOptions = _objectWithoutProperties(props, [\"children\", \"injectFirst\", \"disableGeneration\"]);\n\n  var outerOptions = React.useContext(StylesContext);\n\n  var context = _extends({}, outerOptions, {\n    disableGeneration: disableGeneration\n  }, localOptions);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof window === 'undefined' && !context.sheetsManager) {\n      console.error('Material-UI: you need to use the ServerStyleSheets API when rendering on the server.');\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (context.jss.options.insertionPoint && injectFirst) {\n      console.error('Material-UI: you cannot use a custom insertionPoint and <StylesContext injectFirst> at the same time.');\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (injectFirst && localOptions.jss) {\n      console.error('Material-UI: you cannot use the jss and injectFirst props at the same time.');\n    }\n  }\n\n  if (!context.jss.options.insertionPoint && injectFirst && typeof window !== 'undefined') {\n    if (!injectFirstNode) {\n      var head = document.head;\n      injectFirstNode = document.createComment('mui-inject-first');\n      head.insertBefore(injectFirstNode, head.firstChild);\n    }\n\n    context.jss = create({\n      plugins: jssPreset().plugins,\n      insertionPoint: injectFirstNode\n    });\n  }\n\n  return React.createElement(StylesContext.Provider, {\n    value: context\n  }, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? StylesProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * You can disable the generation of the styles with this option.\n   * It can be useful when traversing the React tree outside of the HTML\n   * rendering step on the server.\n   * Let's say you are using react-apollo to extract all\n   * the queries made by the interface server-side - you can significantly speed up the traversal with this prop.\n   */\n  disableGeneration: PropTypes.bool,\n\n  /**\n   * JSS's class name generator.\n   */\n  generateClassName: PropTypes.func,\n\n  /**\n   * By default, the styles are injected last in the <head> element of the page.\n   * As a result, they gain more specificity than any other style sheet.\n   * If you want to override Material-UI's styles, set this prop.\n   */\n  injectFirst: PropTypes.bool,\n\n  /**\n   * JSS's instance.\n   */\n  jss: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  serverGenerateClassName: PropTypes.func,\n\n  /**\n   * @ignore\n   *\n   * Beta feature.\n   *\n   * Cache for the sheets.\n   */\n  sheetsCache: PropTypes.object,\n\n  /**\n   * @ignore\n   *\n   * The sheetsManager is used to deduplicate style sheet injection in the page.\n   * It's deduplicating using the (theme, styles) couple.\n   * On the server, you should provide a new instance for each request.\n   */\n  sheetsManager: PropTypes.object,\n\n  /**\n   * @ignore\n   *\n   * Collect the sheets.\n   */\n  sheetsRegistry: PropTypes.object\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? StylesProvider.propTypes = exactProp(StylesProvider.propTypes) : void 0;\n}\n\nexport default StylesProvider;","import * as React from 'react';\n\nconst WindowSizeContext = React.createContext(undefined);\n\nexport const withWindowSize = () => (Component) => function ThemedComponent(props) {\n  return (\n    <WindowSizeContext.Consumer>\n      {(windowSize) => <Component {...props} windowSize={windowSize} />}\n    </WindowSizeContext.Consumer>\n  );\n};\n\nexport default WindowSizeContext;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import {makeStyles} from '@material-ui/styles';\nimport {Grid, Typography, CircularProgress} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport React, {useState} from 'react';\nimport {Theme} from '@material-ui/core/';\nimport {useTranslation} from 'react-i18next';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { SetSnackbarOpenAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { ControlledModal } from '../../components';\nimport Sizer from '../Sizer';\nimport ThemeProvider from '../ThemeProvider';\nimport { makeSelectEnv } from '../../modules/AtsModule/selectors';\nimport { AddIntegratedAppConfigAction } from '../../modules/AtsModule/actions';\nimport { SiteName } from '../../constants';\nimport { fromJS } from 'immutable';\nimport { IMap } from 'ats-utils/src';\n\nexport const BUILD_SIZER_MODAL_ID = '__BUILD_SIZER_MODAL__';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n\n}));\n\nfunction BuildSizerModal() {\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const atsApi = useAtsApi();\n  // const atsApiIdentity = useSelector(makeSelectAtsApiState('identity'));\n  const { t } = useTranslation('translations');\n  const envs  = useSelector(makeSelectEnv());\n  const [buildSizerTheme, setBuildSizerTheme] = useState(null);\n\n  // React.useEffect(() => {\n  //   if (envs?.get('ENDPOINT_UI_BRAND_SPECIFIC_BUILDSIZER')) {\n  //     (atsApi.callApi({\n  //       service: 'auth',\n  //       endpoint: 'getAppEnvironmentByDomain',\n  //       body: {\n  //         url: envs?.get('ENDPOINT_UI_BRAND_SPECIFIC_BUILDSIZER')\n  //       }\n  //     }) as any).then(res => {\n  //       const _sizerTheme = res?.payload?.auth?.app?.[0]?.theme;\n  //       if (_sizerTheme) {\n  //         setBuildSizerTheme(_sizerTheme);\n  //         dispatch(new AddIntegratedAppConfigAction({\n  //           appType: SiteName.sizer,\n  //           config: fromJS(res?.payload?.auth?.app?.[0])\n  //         }));\n  //       }\n  //     }).catch(() => {\n  //       // dispatch(new SetSnackbarOpenAction({\n  //       //   message: t('specAssistPreferences.getPreferenceFailMessage'),\n  //       //   severity: 'error',\n  //       // }));\n  //     });\n  //   }\n  // }, [envs]);\n\n  const toggleModal = () => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: BUILD_SIZER_MODAL_ID\n    }));\n  };\n\n  return (\n    <ControlledModal\n      localKey={BUILD_SIZER_MODAL_ID}\n      fullScreen={true}\n    >\n      {/* <AppBar className={classes.appBar} color={appBarColor ?? 'primary'}>\n        <Toolbar>\n          <IconButton color='inherit' onClick={toggleModal} aria-label='Close'>\n            <CloseIcon />\n          </IconButton>\n          <Typography variant='h6' color='inherit' className={classes.flex}>\n            {t('formButtons.close')}\n          </Typography>\n          <Button color='inherit' onClick={this.toggleRequestModal}>\n            <FontAwesomeIcon icon='envelope' className={classes.envelope}/>\n            {t('CrossReference.requestCrossReference')}\n          </Button>\n        </Toolbar>\n      </AppBar> */}\n      <ThemeProvider forcedTheme={buildSizerTheme}>\n        <Sizer />\n      </ThemeProvider>\n    </ControlledModal>\n  );\n}\n\nexport default BuildSizerModal;","/*\n * App Actions\n *\n * Actions change things in your application\n * Since this boilerplate uses a uni-directional data flow, specifically redux,\n * we have these actions which are the only way your application interacts with\n * your application state. This guarantees that your state is up to date and nobody\n * messes it up weirdly somewhere.\n *\n * To add a new Action:\n * 1) Import your constant\n * 2) Add a function like this:\n *    export function yourAction(var) {\n *        return { type: YOUR_ACTION_CONSTANT, var: var }\n *    }\n */\n\n\nimport LanguageModuleActions from '../modules/LanguageModule/actions';\nimport ThemeProviderActions from '../modules/ThemeModule/actions';\nimport PaginationActions from '../containers/Pagination/actions';\n\nexport {\n  default as LanguageModuleActions,\n} from '../modules/LanguageModule/actions';\nexport {\n  default as ThemeProviderActions,\n} from '../modules/ThemeModule/actions';\nexport {\n  default as PaginationActions,\n} from '../containers/Pagination/actions';\n\nexport default {\n  LanguageModuleActions,\n  ThemeProviderActions,\n  PaginationActions,\n};","import * as React from 'react';\nimport { compose } from 'redux';\nimport { withStyles, WithStyles, StyleRules } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport {\n  List,\n  Theme,\n  Typography,\n  Grid,\n  ListItem\n} from '@material-ui/core';\nimport { createStructuredSelector } from 'reselect';\nimport { SetDebug } from '../../modules/DebugModule/actions';\nimport Debug from '../../containers/Debug';\nimport MainMenuItem from '../MainMenuItem';\nimport BugReportIcon from '@material-ui/icons/BugReport';\nimport { makeSelectAppVersionData } from '../../modules/ApplicationModule/selectors';\nimport AppVersionData from '../../models/AppVersionData';\nimport { IMap } from 'ats-utils/src';\nimport { SetAppVersionAction } from '../../modules/ApplicationModule/actions';\nimport { fetchAppVersion } from '../../utils/fetchAppVersion';\n\ntype Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\ninterface IMainMenuItemsComponentProps {\n  menuItems: React.ReactElement<any>;\n  responsive?: boolean;\n  isProduction?: boolean;\n  widthBreakpoint?: Breakpoint;\n  drawerGradient?: string;\n}\n\ninterface IMainMenuItemsProps extends IMainMenuItemsComponentProps {\n  toggleDebug: (debugMode?: number) => any;\n  appVersionData: IMap<AppVersionData>;\n  setVersionData: (versionData: IMap<AppVersionData>) => void;\n}\n\ntype MainMenuItemsProps = IMainMenuItemsProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nconst MainMenuItems: React.SFC<MainMenuItemsProps> = (props) => {\n  const {\n    classes,\n    toggleDebug,\n    responsive,\n    widthBreakpoint,\n    children,\n    menuItems = <React.Fragment />,\n    setVersionData,\n    isProduction,\n    appVersionData,\n    drawerGradient,\n  } = props;\n\n  const appVersion = appVersionData.get('tag');\n\n  // React.Fragment should not be traversed, but is\n  // see https://github.com/facebook/react/issues/11859\n  const resolvedMenuItems =\n    menuItems.type === React.Fragment\n      ? menuItems.props.children\n      : menuItems;\n  // apply responsive props to each menuItem child\n  const extraMenuItems = React.Children.map(resolvedMenuItems, (menuItem) => React.isValidElement(menuItem) ?\n    React.cloneElement(menuItem as any, {\n      responsive,\n      widthBreakpoint,\n      drawerGradient\n    }) :\n    null);\n\n  React.useEffect(() => {\n    fetchAppVersion().then((versionData) => {\n      if (versionData) {\n        setVersionData(versionData);\n      }\n    });\n  }, []);\n\n  return (\n    <Grid container={true} direction='column' justify='space-between' wrap='nowrap' className={classes.list}>\n      <List style={{\n        padding: 0\n      }}>\n        {extraMenuItems}\n        {children}\n        {!isProduction &&\n          <MainMenuItem\n            onClick={toggleDebug(1)}\n            iconProps={<BugReportIcon className={classes.menuIcon} />}\n            label='Debug On (low)'\n            tooltip='Debug On (low)'\n            responsive={responsive}\n            widthBreakpoint={widthBreakpoint}\n          />\n        }\n        {!isProduction &&\n          <MainMenuItem\n            onClick={toggleDebug(5)}\n            iconProps={<BugReportIcon className={classes.menuIcon} />}\n            label='Debug On (medium)'\n            tooltip='Debug On (medium)'\n            responsive={responsive}\n            widthBreakpoint={widthBreakpoint}\n          />\n        }\n        {!isProduction &&\n          <MainMenuItem\n            onClick={toggleDebug(10)}\n            iconProps={<BugReportIcon className={classes.menuIcon} />}\n            label='Debug On (high)'\n            tooltip='Debug On (high)'\n            responsive={responsive}\n            widthBreakpoint={widthBreakpoint}\n          />\n        }\n        <Debug\n          debugLevel={1}\n          delayedRender={() => {\n            return <MainMenuItem\n              onClick={toggleDebug(0)}\n              iconProps={<BugReportIcon className={classes.menuIcon} />}\n              label='Debug Off'\n              tooltip='Debug Off'\n              responsive={responsive}\n              widthBreakpoint={widthBreakpoint}\n            />;\n          }}\n        />\n      </List>\n      {appVersion &&\n        <ListItem dense={true}>\n          <Typography variant='caption' className={classes.version}>{'v' + appVersion}</Typography>\n        </ListItem>\n      }\n    </Grid>\n  );\n};\n\nfunction mapDispatchToProps(dispatch) {\n  return {\n    setVersionData: (versionData: IMap<AppVersionData>) => dispatch(new SetAppVersionAction({versionData})),\n    toggleDebug: (debug = 0) => () => dispatch(new SetDebug(debug)),\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  appVersionData: makeSelectAppVersionData()\n});\n\nconst muiStyles = (theme: Theme): StyleRules => ({\n  list: {\n    overflowY: 'auto',\n    width: '100%',\n    overflowX: 'hidden',\n    flexGrow: 1\n  },\n  menuIcon: {\n    color: theme.palette.mainMenuIcons,\n  },\n  version: {\n    color: theme.palette.mainMenuText ? theme.palette.mainMenuText : theme.palette.primary.contrastText\n  },\n});\n\nexport default compose<React.ComponentClass<IMainMenuItemsComponentProps>>(\n  withStyles(muiStyles),\n  connect(mapStateToProps, mapDispatchToProps),\n)(MainMenuItems);\n","import styled from 'styled-components';\nconst DebugStyle = styled.span`\n  display: inline-block;\n  background-color: rgba(255, 0, 0, 0.01);\n  border: 1px dotted red;\n  max-width: 100%;\n`;\nexport default DebugStyle;","\nimport * as React from 'react';\nimport MenuItem, {\n  MenuItemProps,\n} from '@material-ui/core/MenuItem';\n\ninterface IMenuItemOverrideComponentProps {\n  onClickOverride: (e: React.MouseEvent<HTMLElement>, onClick?: (e: React.MouseEvent<HTMLElement>) => void) => void;\n  onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n}\n\ninterface IMenuItemOverrideProps extends IMenuItemOverrideComponentProps {\n\n}\n\ntype MenuItemOverrideProps<D extends React.ElementType , P extends { button?: true }> = IMenuItemOverrideProps & MenuItemProps<D, P>;\n// type MenuItemOverrideProps<D extends React.ElementType , P> = IMenuItemOverrideProps & OverridableComponent<ListItemTypeMap<{ button: false }, 'li'>> &\n// ExtendButtonBase<ListItemTypeMap<{ button?: true }, 'li'>>;\nclass MenuItemOverride<D extends React.ElementType = 'li', P extends { button?: true } = {}> extends React.Component<MenuItemOverrideProps<D, P>> {\n  public render() {\n    const {\n      children,\n      onClickOverride,\n      onClick,\n      ...other\n    } = this.props;\n    return <MenuItem {...other} onClick={(e) => onClickOverride(e, onClick)}>\n      {children}\n    </MenuItem>;\n  }\n}\n\n\nexport default MenuItemOverride;","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","var defaultShouldError = function defaultShouldError(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nexport default defaultShouldError;","var defaultShouldWarn = function defaultShouldWarn(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nexport default defaultShouldWarn;","function stylis_min (W) {\n  function M(d, c, e, h, a) {\n    for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n      g = e.charCodeAt(l);\n      l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n      if (0 === b + n + v + m) {\n        if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n          switch (g) {\n            case 32:\n            case 9:\n            case 59:\n            case 13:\n            case 10:\n              break;\n\n            default:\n              f += e.charAt(l);\n          }\n\n          g = 59;\n        }\n\n        switch (g) {\n          case 123:\n            f = f.trim();\n            q = f.charCodeAt(0);\n            k = 1;\n\n            for (t = ++l; l < B;) {\n              switch (g = e.charCodeAt(l)) {\n                case 123:\n                  k++;\n                  break;\n\n                case 125:\n                  k--;\n                  break;\n\n                case 47:\n                  switch (g = e.charCodeAt(l + 1)) {\n                    case 42:\n                    case 47:\n                      a: {\n                        for (u = l + 1; u < J; ++u) {\n                          switch (e.charCodeAt(u)) {\n                            case 47:\n                              if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                              break;\n\n                            case 10:\n                              if (47 === g) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                          }\n                        }\n\n                        l = u;\n                      }\n\n                  }\n\n                  break;\n\n                case 91:\n                  g++;\n\n                case 40:\n                  g++;\n\n                case 34:\n                case 39:\n                  for (; l++ < J && e.charCodeAt(l) !== g;) {\n                  }\n\n              }\n\n              if (0 === k) break;\n              l++;\n            }\n\n            k = e.substring(t, l);\n            0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n            switch (q) {\n              case 64:\n                0 < r && (f = f.replace(N, ''));\n                g = f.charCodeAt(1);\n\n                switch (g) {\n                  case 100:\n                  case 109:\n                  case 115:\n                  case 45:\n                    r = c;\n                    break;\n\n                  default:\n                    r = O;\n                }\n\n                k = M(c, r, k, g, a + 1);\n                t = k.length;\n                0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n                if (0 < t) switch (g) {\n                  case 115:\n                    f = f.replace(da, ea);\n\n                  case 100:\n                  case 109:\n                  case 45:\n                    k = f + '{' + k + '}';\n                    break;\n\n                  case 107:\n                    f = f.replace(fa, '$1 $2');\n                    k = f + '{' + k + '}';\n                    k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n                    break;\n\n                  default:\n                    k = f + k, 112 === h && (k = (p += k, ''));\n                } else k = '';\n                break;\n\n              default:\n                k = M(c, X(c, f, I), k, h, a + 1);\n            }\n\n            F += k;\n            k = I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n            break;\n\n          case 125:\n          case 59:\n            f = (0 < r ? f.replace(N, '') : f).trim();\n            if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n              case 0:\n                break;\n\n              case 64:\n                if (105 === g || 99 === g) {\n                  G += f + e.charAt(l);\n                  break;\n                }\n\n              default:\n                58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n            }\n            I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n        }\n      }\n\n      switch (g) {\n        case 13:\n        case 10:\n          47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n          0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n          z = 1;\n          D++;\n          break;\n\n        case 59:\n        case 125:\n          if (0 === b + n + v + m) {\n            z++;\n            break;\n          }\n\n        default:\n          z++;\n          y = e.charAt(l);\n\n          switch (g) {\n            case 9:\n            case 32:\n              if (0 === n + m + b) switch (x) {\n                case 44:\n                case 58:\n                case 9:\n                case 32:\n                  y = '';\n                  break;\n\n                default:\n                  32 !== g && (y = ' ');\n              }\n              break;\n\n            case 0:\n              y = '\\\\0';\n              break;\n\n            case 12:\n              y = '\\\\f';\n              break;\n\n            case 11:\n              y = '\\\\v';\n              break;\n\n            case 38:\n              0 === n + b + m && (r = I = 1, y = '\\f' + y);\n              break;\n\n            case 108:\n              if (0 === n + b + m + E && 0 < u) switch (l - u) {\n                case 2:\n                  112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n                case 8:\n                  111 === K && (E = K);\n              }\n              break;\n\n            case 58:\n              0 === n + b + m && (u = l);\n              break;\n\n            case 44:\n              0 === b + v + n + m && (r = 1, y += '\\r');\n              break;\n\n            case 34:\n            case 39:\n              0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n              break;\n\n            case 91:\n              0 === n + b + v && m++;\n              break;\n\n            case 93:\n              0 === n + b + v && m--;\n              break;\n\n            case 41:\n              0 === n + b + m && v--;\n              break;\n\n            case 40:\n              if (0 === n + b + m) {\n                if (0 === q) switch (2 * x + 3 * K) {\n                  case 533:\n                    break;\n\n                  default:\n                    q = 1;\n                }\n                v++;\n              }\n\n              break;\n\n            case 64:\n              0 === b + v + n + m + u + k && (k = 1);\n              break;\n\n            case 42:\n            case 47:\n              if (!(0 < n + m + v)) switch (b) {\n                case 0:\n                  switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n                    case 235:\n                      b = 47;\n                      break;\n\n                    case 220:\n                      t = l, b = 42;\n                  }\n\n                  break;\n\n                case 42:\n                  47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n              }\n          }\n\n          0 === b && (f += y);\n      }\n\n      K = x;\n      x = g;\n      l++;\n    }\n\n    t = p.length;\n\n    if (0 < t) {\n      r = c;\n      if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n      p = r.join(',') + '{' + p + '}';\n\n      if (0 !== w * E) {\n        2 !== w || L(p, 2) || (E = 0);\n\n        switch (E) {\n          case 111:\n            p = p.replace(ha, ':-moz-$1') + p;\n            break;\n\n          case 112:\n            p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n        }\n\n        E = 0;\n      }\n    }\n\n    return G + p + F;\n  }\n\n  function X(d, c, e) {\n    var h = c.trim().split(ia);\n    c = h;\n    var a = h.length,\n        m = d.length;\n\n    switch (m) {\n      case 0:\n      case 1:\n        var b = 0;\n\n        for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n          c[b] = Z(d, c[b], e).trim();\n        }\n\n        break;\n\n      default:\n        var v = b = 0;\n\n        for (c = []; b < a; ++b) {\n          for (var n = 0; n < m; ++n) {\n            c[v++] = Z(d[n] + ' ', h[b], e).trim();\n          }\n        }\n\n    }\n\n    return c;\n  }\n\n  function Z(d, c, e) {\n    var h = c.charCodeAt(0);\n    33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n    switch (h) {\n      case 38:\n        return c.replace(F, '$1' + d.trim());\n\n      case 58:\n        return d.trim() + c.replace(F, '$1' + d.trim());\n\n      default:\n        if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n    }\n\n    return d + c;\n  }\n\n  function P(d, c, e, h) {\n    var a = d + ';',\n        m = 2 * c + 3 * e + 4 * h;\n\n    if (944 === m) {\n      d = a.indexOf(':', 9) + 1;\n      var b = a.substring(d, a.length - 1).trim();\n      b = a.substring(0, d).trim() + b + ';';\n      return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n    }\n\n    if (0 === w || 2 === w && !L(a, 1)) return a;\n\n    switch (m) {\n      case 1015:\n        return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n      case 951:\n        return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n      case 963:\n        return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n      case 1009:\n        if (100 !== a.charCodeAt(4)) break;\n\n      case 969:\n      case 942:\n        return '-webkit-' + a + a;\n\n      case 978:\n        return '-webkit-' + a + '-moz-' + a + a;\n\n      case 1019:\n      case 983:\n        return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n      case 883:\n        if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n        if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n        break;\n\n      case 932:\n        if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n          case 103:\n            return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n          case 98:\n            return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n        }\n        return '-webkit-' + a + '-ms-' + a + a;\n\n      case 964:\n        return '-webkit-' + a + '-ms-flex-' + a + a;\n\n      case 1023:\n        if (99 !== a.charCodeAt(8)) break;\n        b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n        return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n      case 1005:\n        return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n      case 1e3:\n        b = a.substring(13).trim();\n        c = b.indexOf('-') + 1;\n\n        switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n          case 226:\n            b = a.replace(G, 'tb');\n            break;\n\n          case 232:\n            b = a.replace(G, 'tb-rl');\n            break;\n\n          case 220:\n            b = a.replace(G, 'lr');\n            break;\n\n          default:\n            return a;\n        }\n\n        return '-webkit-' + a + '-ms-' + b + a;\n\n      case 1017:\n        if (-1 === a.indexOf('sticky', 9)) break;\n\n      case 975:\n        c = (a = d).length - 10;\n        b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n        switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n          case 203:\n            if (111 > b.charCodeAt(8)) break;\n\n          case 115:\n            a = a.replace(b, '-webkit-' + b) + ';' + a;\n            break;\n\n          case 207:\n          case 102:\n            a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n        }\n\n        return a + ';';\n\n      case 938:\n        if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n          case 105:\n            return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n          default:\n            return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n        }\n        break;\n\n      case 973:\n      case 989:\n        if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n      case 931:\n      case 953:\n        if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n        break;\n\n      case 962:\n        if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n    }\n\n    return a;\n  }\n\n  function L(d, c) {\n    var e = d.indexOf(1 === c ? ':' : '{'),\n        h = d.substring(0, 3 !== c ? e : 10);\n    e = d.substring(e + 1, d.length - 1);\n    return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n  }\n\n  function ea(d, c) {\n    var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n    return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n  }\n\n  function H(d, c, e, h, a, m, b, v, n, q) {\n    for (var g = 0, x = c, w; g < A; ++g) {\n      switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n        case void 0:\n        case !1:\n        case !0:\n        case null:\n          break;\n\n        default:\n          x = w;\n      }\n    }\n\n    if (x !== c) return x;\n  }\n\n  function T(d) {\n    switch (d) {\n      case void 0:\n      case null:\n        A = S.length = 0;\n        break;\n\n      default:\n        if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n          T(d[c]);\n        } else Y = !!d | 0;\n    }\n\n    return T;\n  }\n\n  function U(d) {\n    d = d.prefix;\n    void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n    return U;\n  }\n\n  function B(d, c) {\n    var e = d;\n    33 > e.charCodeAt(0) && (e = e.trim());\n    V = e;\n    e = [V];\n\n    if (0 < A) {\n      var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n      void 0 !== h && 'string' === typeof h && (c = h);\n    }\n\n    var a = M(O, e, c, 0, 0);\n    0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n    V = '';\n    E = 0;\n    z = D = 1;\n    return a;\n  }\n\n  var ca = /^\\0+/g,\n      N = /[\\0\\r\\f]/g,\n      aa = /: */g,\n      ka = /zoo|gra/,\n      ma = /([,: ])(transform)/g,\n      ia = /,\\r+?/g,\n      F = /([\\t\\r\\n ])*\\f?&/g,\n      fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n      Q = /::(place)/g,\n      ha = /:(read-only)/g,\n      G = /[svh]\\w+-[tblr]{2}/,\n      da = /\\(\\s*(.*)\\s*\\)/g,\n      oa = /([\\s\\S]*?);/g,\n      ba = /-self|flex-/g,\n      na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n      la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n      ja = /([^-])(image-set\\()/,\n      z = 1,\n      D = 1,\n      E = 0,\n      w = 1,\n      O = [],\n      S = [],\n      A = 0,\n      R = null,\n      Y = 0,\n      V = '';\n  B.use = T;\n  B.set = U;\n  void 0 !== W && U(W);\n  return B;\n}\n\nexport default stylis_min;\n","import { StyleSheet } from '@emotion/sheet';\nimport Stylis from '@emotion/stylis';\nimport '@emotion/weak-memoize';\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\n\nfunction toSheet(block) {\n  if (block) {\n    Sheet.current.insert(block + '}');\n  }\n}\n\nvar Sheet = {\n  current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n  switch (context) {\n    // property\n    case 1:\n      {\n        switch (content.charCodeAt(0)) {\n          case 64:\n            {\n              // @import\n              Sheet.current.insert(content + ';');\n              return '';\n            }\n          // charcode for l\n\n          case 108:\n            {\n              // charcode for b\n              // this ignores label\n              if (content.charCodeAt(2) === 98) {\n                return '';\n              }\n            }\n        }\n\n        break;\n      }\n    // selector\n\n    case 2:\n      {\n        if (ns === 0) return content + delimiter;\n        break;\n      }\n    // at-rule\n\n    case 3:\n      {\n        switch (ns) {\n          // @font-face, @page\n          case 102:\n          case 112:\n            {\n              Sheet.current.insert(selectors[0] + content);\n              return '';\n            }\n\n          default:\n            {\n              return content + (at === 0 ? delimiter : '');\n            }\n        }\n      }\n\n    case -2:\n      {\n        content.split(needle).forEach(toSheet);\n      }\n  }\n};\n\nvar createCache = function createCache(options) {\n  if (options === undefined) options = {};\n  var key = options.key || 'css';\n  var stylisOptions;\n\n  if (options.prefix !== undefined) {\n    stylisOptions = {\n      prefix: options.prefix\n    };\n  }\n\n  var stylis = new Stylis(stylisOptions);\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    if (/[^a-z-]/.test(key)) {\n      throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n    }\n  }\n\n  var inserted = {}; // $FlowFixMe\n\n  var container;\n\n  {\n    container = options.container || document.head;\n    var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n    Array.prototype.forEach.call(nodes, function (node) {\n      var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n      attrib.split(' ').forEach(function (id) {\n        inserted[id] = true;\n      });\n\n      if (node.parentNode !== container) {\n        container.appendChild(node);\n      }\n    });\n  }\n\n  var _insert;\n\n  {\n    stylis.use(options.stylisPlugins)(ruleSheet);\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      var name = serialized.name;\n      Sheet.current = sheet;\n\n      if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n        var map = serialized.map;\n        Sheet.current = {\n          insert: function insert(rule) {\n            sheet.insert(rule + map);\n          }\n        };\n      }\n\n      stylis(selector, serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[name] = true;\n      }\n    };\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    // https://esbench.com/bench/5bf7371a4cd7e6009ef61d0a\n    var commentStart = /\\/\\*/g;\n    var commentEnd = /\\*\\//g;\n    stylis.use(function (context, content) {\n      switch (context) {\n        case -1:\n          {\n            while (commentStart.test(content)) {\n              commentEnd.lastIndex = commentStart.lastIndex;\n\n              if (commentEnd.test(content)) {\n                commentStart.lastIndex = commentEnd.lastIndex;\n                continue;\n              }\n\n              throw new Error('Your styles have an unterminated comment (\"/*\" without corresponding \"*/\").');\n            }\n\n            commentStart.lastIndex = 0;\n            break;\n          }\n      }\n    });\n    stylis.use(function (context, content, selectors) {\n      switch (context) {\n        case -1:\n          {\n            var flag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n            var unsafePseudoClasses = content.match(/(:first|:nth|:nth-last)-child/g);\n\n            if (unsafePseudoClasses && cache.compat !== true) {\n              unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n                var ignoreRegExp = new RegExp(unsafePseudoClass + \".*\\\\/\\\\* \" + flag + \" \\\\*\\\\/\");\n                var ignore = ignoreRegExp.test(content);\n\n                if (unsafePseudoClass && !ignore) {\n                  console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n                }\n              });\n            }\n\n            break;\n          }\n      }\n    });\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  return cache;\n};\n\nexport default createCache;\n","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = res[2] || defaultDelimiter\n    var pattern = capture || group\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","export enum QuoteAutoSaveType {\n  NONE = 'none',\n  INTERVAL = 'interval',\n}\n\nexport interface IQuoteAutoSavePreference {\n  type: QuoteAutoSaveType;\n  interval?: number; // in milliseconds\n}\n\nexport type QuoteDiscountListItemType = 'charge' | 'discount' | 'tax';\n\n// One default entry applied to every new quote total. Charges are a fixed amount;\n// discounts and taxes are stored as fractions (0.13 for 13%), like the quote's own discountList.\nexport interface IQuoteDiscountListItem {\n  label: string;\n  type: QuoteDiscountListItemType;\n  value: number;\n}\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport ControlledModal from '../ControlledModal';\nimport ConsentModalContent, { CONSENT_MODAL_PAPER_PROPS } from './ConsentModalContent';\nimport { UpdateConsentStatusAction } from '../../modules/AtsModule/actions';\n\nexport const CONSENT_MODAL = 'CONSENT_MODAL';\n\n/**\n * Data & privacy consent modal shown to logged in users that never made a selection.\n * Opened from the AtsModule saga once the consent status has been fetched, so it stays\n * open across any redirect that happens after the login.\n */\nconst UserConsentModal: React.FC<{}> = () => {\n  const dispatch = useDispatch();\n  const [submitting, setSubmitting] = useState(false);\n\n  const handleConfirm = (consent: boolean) => {\n    setSubmitting(true);\n\n    new Promise((resolve, reject) => (\n      dispatch(new UpdateConsentStatusAction({\n        consent,\n        resolve,\n        reject,\n      }))\n    )).finally(() => setSubmitting(false));\n  };\n\n  return (\n    <ControlledModal\n      localKey={CONSENT_MODAL}\n      disableBackdropClick={true}\n      disableEscapeKeyDown={true}\n      PaperProps={CONSENT_MODAL_PAPER_PROPS}\n    >\n      <ConsentModalContent\n        submitting={submitting}\n        onConfirm={handleConfirm}\n      />\n    </ControlledModal>\n  );\n};\n\nexport default UserConsentModal;\n","/**\n * Create the store with dynamic reducers\n */\n\nimport { createStore, applyMiddleware, compose, Store, Middleware } from 'redux';\nimport Immutable, { fromJS, isCollection, set } from 'immutable';\nimport { routerMiddleware } from 'connected-react-router/immutable';\nimport createSagaMiddleware from 'redux-saga';\nimport createReducer, { configureReducer } from './reducers';\nimport reduxClassActionMiddleware from 'ats-utils/src/reduxClassActionMiddleware';\nimport {\n  isNode,\n  isElement,\n  isPlainObject,\n} from 'ats-utils/src';\nimport {\n  GenericReducer,\n  GenericSaga,\n  IAction,\n  InjectedReducers,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  ProductActionTypes,\n} from './modules/ProductModule/actions';\n\nimport {\n  DEFAULT_MOUNT_POINT as PRODUCT_MOUNT_POINT,\n} from './modules/ProductModule/constants';\nimport { History } from 'history';\n\nexport const sagaMiddleware = createSagaMiddleware();\n\nexport type AtsStore<S = any> = Store<S> & {\n  runSaga?: (saga: GenericSaga) => void;\n  injectedReducers?: {\n    [key: string]: GenericReducer;\n  }\n  injectedSagas?: {\n    [key: string]: GenericSaga;\n  }\n};\n\ninterface IConfigureStoreOptions {\n  initialState?: object;\n  history?: History;\n  reducers?: InjectedReducers;\n  beforeMiddleware?: Middleware[];\n  afterMiddleware?: Middleware[];\n  reset?: boolean;\n}\n\nconst ptrap = 'data:image/png;base64,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';\n\nexport default function configureStore({\n  initialState = {},\n  history,\n  reducers,\n  beforeMiddleware = [],\n  afterMiddleware = [],\n  reset,\n}: IConfigureStoreOptions = {}) {\n  // Create the store with two middlewares\n  // 1. sagaMiddleware: Makes redux-sagas work\n  // 2. routerMiddleware: Syncs the location/URL path to the state\n  const middlewares = [\n    ...beforeMiddleware,\n    reduxClassActionMiddleware,\n    sagaMiddleware,\n    routerMiddleware(history),\n    ...afterMiddleware,\n  ];\n\n  configureReducer({\n    history,\n    reset,\n  });\n  // const appStorage = localForage;\n  // const storage = compose(\n  //   debounce(5000, 30000),\n  //   serialize2\n  // )(adapter(appStorage));\n  //\n  const enhancers = [\n    applyMiddleware(...middlewares),\n  ];\n\n  // action sanitizer, replace big data blobs with string\n  const actionSanitizer = (action: IAction) => {\n    switch (action.type) {\n      case ProductActionTypes.UPDATE_SERIES: {\n        return { ...action, payload: '<<TRUNCATED SERIES DATA>>' };\n      }\n      default:\n        return action;\n    }\n  };\n\n  // state sanitizer, replace big data blobs with string\n  const stateSanitizer = (state) => state.withMutations((stateCtx) => {\n    stateCtx.setIn([PRODUCT_MOUNT_POINT, 'series'], '<<TRUNCATED SERIES DATA>>');\n  });\n\n  // If Redux DevTools Extension is installed use it, otherwise use Redux compose\n  /* eslint-disable no-underscore-dangle */\n  const composeEnhancers =\n    process.env.NODE_ENV !== 'production' &&\n    typeof window === 'object' &&\n    (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n      (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n        // turn on trace in redux devtools. should keep it off since it its pretty heavy and crashes for tool sometimes\n        // maxAge: 300,\n        trace: true,\n        traceLimit: 100,\n\n        actionSanitizer,\n        stateSanitizer,\n        immutable: Immutable,\n        // TODO Try to remove when `react-router-redux` is out of beta, LOCATION_CHANGE should not be fired more than once after hot reloading\n        // Prevent recomputing reducers for `replaceReducer`\n        shouldHotReload: false,\n        serialize: {\n          replacer: (key, value) => {\n            // replace DOM nodes and elements otherwise it goes crazy trying to stringify them\n            if (isNode(value)) {\n              return 'DOMNode';\n            }\n            if (isElement(value)) {\n              return 'DOMElement';\n            }\n            // if (key === 'data') {\n            //   console.error('replacer', {\n            //     key,\n            //     value,\n            //   });\n            //   return '<<DATA>>';\n            // }\n\n            // we are storing giant base64 images in redux state - the devtools chokes on serializing these\n            // let's ptrap any dev curious enough to see what the data actually is (don't worry this is only for devtools - doesn't affect the application in any way)\n            if (isCollection(value) && value.has('data') && value.has('size')) { // detect immutable \"file\" -> has \"data\" and \"size\" keys (there are other objects with data keys)\n              if (value.get('size') > 2000) { // if the original filesize is smaller than our ptrap we should just leave it in :P\n                return set(value, 'data', ptrap);\n              }\n            }\n            if (isPlainObject(value)) {\n              if (value.hasOwnProperty('data') && value.hasOwnProperty('size')) {\n                if (value.size > 2000) {\n                  return {\n                    ...value,\n                    data: ptrap,\n                  };\n                }\n              }\n            }\n\n            // FOR DEBUGGING ONLY\n            // if (value != null) {\n            //   const size = sizeOf(value);\n            //   if (size > 1000) {\n            //     console.error('debug', {\n            //       key, value, size\n            //     });\n            //   }\n            // }\n            return value;\n          }\n        },\n      }) :\n      compose;\n  /* eslint-enable */\n\n  const store: AtsStore = createStore(\n    createReducer(reducers),\n    fromJS(initialState),\n    composeEnhancers(...enhancers)\n  );\n\n  // Extensions\n  store.runSaga = sagaMiddleware.run;\n  store.injectedReducers = {\n    ...reducers,\n  }; // Reducer registry\n  store.injectedSagas = {}; // Saga registry\n\n  // Make reducers hot reloadable, see http://mxs.is/googmo\n  /* istanbul ignore next */\n  if ((module as any).hot) {\n    (module as any).hot.accept('./reducers', () => {\n      store.replaceReducer(createReducer(store.injectedReducers));\n    });\n  }\n\n  return store;\n}\n","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","import * as React from 'react';\nimport {\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  Collapse,\n  Typography,\n  WithStyles,\n  withStyles,\n  Tooltip,\n  Link,\n  FormControlLabel,\n  Switch,\n  IconButton,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport {\n  round\n} from '../../utils/parseFormulaFields';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { StyleRules, WithTheme } from '@material-ui/core/styles';\nimport { fromJS, Map, List } from 'immutable';\nimport { formatThousandsNumber } from '../../utils/format-number';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectLoggedInUserOfficeLocation, makeSelectVisibilityList } from '../../modules/AccountModule/selectors';\nimport { connect } from 'react-redux';\nimport { VisibilityListItem, QuoteSection, QuoteSectionProduct, FirmProduct, Address, Project } from '../../models';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport KeyboardArrowUpRoundedIcon from '@material-ui/icons/KeyboardArrowUpRounded';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport usFlag from '../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../images/productSelectionPage/canFlag.png';\nimport { getTemplateCurrency } from '../QuoteForm/SectionListEdit/constants';\nimport { checkBrandMatch } from '../../containers/Quote/utils';\nimport { AI_IDENTIFIED_PRODUCT_ID, GEOLOCATION_ID, VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID } from '../../constants';\nimport { AtsSvgPushpinRounded } from '../AtsSvg';\nimport ImageCell from '../SpecToQuote/tableCells/ImageCell';\nimport { makeSelectProject } from '../../modules/ProjectModule/selectors';\nimport { formatSectionTotal } from '../../modules/QuoteEditModule/utils';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../containers/QuoteTemplate/utils';\n\nconst styles = (theme: Theme): StyleRules => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    width: 'calc(100% - 20px)'\n  },\n  subTotalBox: {\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    justifyContent: 'flex-end',\n    // alignItems: 'flex-end',\n    '& span': {\n      marginBottom: '19px'\n    },\n    '& div': {\n      marginBottom: '10px'\n    }\n  },\n  expanderColumn: {\n    width: '20px',\n    padding: '0 !important'\n  },\n  expanderColumnChevron: {\n    cursor: 'pointer',\n    padding: '0 !important',\n  },\n  multiLine: {\n    whiteSpace: 'pre-wrap',\n  },\n  tableRow: {\n    background: theme.palette.grey[100]\n  },\n  greyText: {\n    color: theme.palette.grey[500]\n  },\n  expansionContainer: {\n    padding: 8\n  },\n  descAndNote: {\n    width: 0,\n    flexGrow: 1\n  },\n  labelColumn: {\n    width: 0,\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    flexGrow: 1\n  },\n  switchButtonContainer: {\n    padding: '10px 0',\n  },\n  imageCell: {\n    padding: '0px'\n  },\n  tableBorder: {\n    border: '1px solid #C4C4C4',\n    borderRadius: '8px',\n    borderCollapse: 'unset',\n    overflow: 'hidden'\n  },\n});\n\ninterface IProductSectionComponentProps {\n  section: IMap<QuoteSection>;\n  selectedCustomerId: number;\n  isAi: boolean;\n  linkedProjectId: number;\n  handleAddSectionWithTemplateIssue?: (sectionTitle: string) => void;\n  t?(...args: any[]): any;\n}\n\ninterface IProductSectionProps extends IProductSectionComponentProps {\n  visibilityList: List<IMap<VisibilityListItem>>;\n  atsApiIdentity: boolean;\n  loginUserOfficeLocation: IMap<Address>;\n  linkedProject: IMap<Project>;\n}\n\ninterface IProductSectionState {\n  isCollapsed: boolean;\n  collapsedIndex: any;\n  retry: number;\n  showAIProduct: boolean;\n  showImage: boolean;\n}\n\ntype ProductSectionProps =\n  IProductSectionProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithTheme\n  & WithAtsApi;\n\nexport const getVisibilityProducts = ({\n  visibilityList,\n  section,\n  selectedCustomerId,\n}: {\n  visibilityList: IProductSectionProps['visibilityList'],\n  section: IProductSectionComponentProps['section'],\n  selectedCustomerId: IProductSectionComponentProps['selectedCustomerId'],\n}) => {\n  return selectedCustomerId && visibilityList.size ?\n    section.get('products')\n      .filter(product => checkBrandMatch(product, visibilityList) || product.get('id') === VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID)\n    //       return item.get('category') === product.get('categoryName')\n    //       || item.get('category') === null\n    //       && item.get('manufacturer') === product.get('brand')\n    //     }))\n    :\n    section.get('products');\n};\n\nclass ProductSection extends React.Component<ProductSectionProps, IProductSectionState> {\n  public state = {\n    isCollapsed: false,\n    collapsedIndex: this.props.section && this.props.section.get('products') && this.props.section.get('products').size\n      ? this.props.section.get('products').reduce((acc, product, index) => acc.set(`${index}`, true), Map({}))\n      : Map({}),\n    retry: 0,\n    showAIProduct: false,\n    showImage: false\n  };\n\n  public toggleSection = () => {\n    this.setState((prevState) => ({\n      isCollapsed: !prevState.isCollapsed\n    }));\n  }\n\n  public expandRow = (i: number) => {\n    let collapsedIndex = this.state.collapsedIndex;\n    collapsedIndex = collapsedIndex.set(`${i}`, !collapsedIndex.get(`${i}`));\n    this.setState({\n      collapsedIndex,\n    });\n  }\n\n  public fileSrc = (id: string) => {\n    if (!id) {\n      return null;\n    }\n    const {\n      atsApiIdentity,\n      atsApi\n    } = this.props;\n    const { retry } = this.state;\n    try {\n      return atsApiIdentity && atsApi.callApi(id, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true, body: { download: false } }) as string;\n    } catch (e) {\n      if (retry < 5) {\n        setTimeout(() => {\n          this.setState(state => ({ ...state, retry: state.retry + 1 }));\n        }, 1000);\n      }\n      console.debug('Api Error, maybe it isn\\'t loaded yet? Retrying', {\n        e,\n        retry,\n        atsApi,\n      });\n      return null;\n    }\n  }\n\n  public getCutsheetDataByLocaleRegionOrFallback = (productMap: IMap<QuoteSectionProduct>, getDataType: string) => {\n    const { loginUserOfficeLocation, linkedProject } = this.props;\n    // currently only english on AQ\n    // get country id from linked project otherwise login user office location\n    const countryId = linkedProject?.getIn(['location', 'country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n    const isCanada = countryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n    return isCanada\n      ? productMap.getIn(['file', 'media', 'en-ca', 'manufacturer_cutsheet', getDataType]) || productMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', getDataType])\n      : productMap.getIn(['file', 'media', 'en-us', 'manufacturer_cutsheet', getDataType]) || productMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', getDataType]);\n  }\n\n  public render() {\n    const {\n      classes,\n      section,\n      t,\n      theme,\n      handleAddSectionWithTemplateIssue,\n    } = this.props;\n    const {\n      isCollapsed,\n      collapsedIndex,\n      showAIProduct,\n      showImage\n    } = this.state;\n\n    const visibleProducts = section.get('products')?.filter((product) => !product.get('notVisibleToSelectedCustomer'));\n\n    const sectionTemplate = section.get('sectionTemplate') || Map();\n    const pinnedColumn = sectionTemplate.getIn(['settings', 'pinnedColumn']) || List();\n    const sortedFieldsData = pinnedColumn.map(fieldId => sectionTemplate.get('fieldsData').find(field => fieldId === field.get('id'))).concat(sectionTemplate.get('fieldsData').filter(field => !pinnedColumn.includes(field.get('id')))) || List();\n    const currencyType = getTemplateCurrency(sectionTemplate);\n\n    return (\n      <Card className={classes.card}>\n        <CardContent>\n          <Grid container={true} wrap='nowrap' alignItems='center' justify='space-between'>\n            <Grid item={true} xs={6} container={true} wrap='nowrap' alignItems='center'>\n              <Grid item={true} xs={true}>\n                <Grid container={true} wrap='nowrap' alignItems='center'>\n                  <IconButton onClick={this.toggleSection}>\n                    {\n                      isCollapsed ?\n                        <KeyboardArrowDownRoundedIcon fontSize='small' />\n                        :\n                        <KeyboardArrowUpRoundedIcon fontSize='small' />\n                    }\n                  </IconButton>\n                  <Typography\n                    variant='h6'\n                    style={{ overflow: 'hidden', whiteSpace: 'pre-wrap', marginLeft: 8 }}\n                  >\n                    {section.get('sectionTitle')}\n                  </Typography>\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid item={true} xs={6} container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n              <Grid container={true} direction='column' style={{ marginLeft: 16 }}>\n                <div style={{ display: 'flex', justifyItems: 'center' }}>\n                  <img\n                    src={currencyType === 'CAD' ? canFlag : usFlag}\n                    style={{ width: 35 }}\n                    alt={t(`translations:region.${currencyType === 'CAD' ? 'canadianFlagAlt' : 'usFlagAlt'}`)} />\n                  <Typography variant='h6'>{t(`sectionList.${currencyType}`)}</Typography>\n                </div>\n              </Grid>\n              {\n                visibleProducts.size > 0 && !Boolean(visibleProducts.find(x => !x.get('excluded')))\n                && <Tooltip title={t('quoteDetail.sectionExcluded')}>\n                  <RemoveCircleIcon color='primary' />\n                </Tooltip>\n              }\n            </Grid>\n          </Grid>\n\n          {/* {\n            !specToQuoteSection.isEmpty() &&\n            <div className={classes.switchButtonContainer}>\n              <FormControlLabel\n                control={<Switch checked={showAIProduct} onChange={() => {\n                  this.setState({\n                    showImage: !!showAIProduct,\n                    showAIProduct: !showAIProduct\n                  });\n                }} />}\n                label='A.I. Products'\n              />\n              {\n                showAIProduct &&\n                <FormControlLabel\n                  control={<Switch checked={showImage} onChange={() => {\n                    this.setState({\n                      showImage: !showImage,\n                    });\n                  }} />}\n                  label='Images'\n                  disabled={!showAIProduct}\n                />\n              }\n            </div>\n          } */}\n\n        </CardContent>\n        <Collapse in={!isCollapsed}>\n          <CardContent>\n            <Grid container={true}>\n              <Grid\n                item={true}\n                xs={12}\n                style={{ overflowX: 'visible', overflowY: 'hidden' }}\n              >\n                <Table>\n                  <TableHead>\n                    <TableRow>\n                      {\n                        showImage && <TableCell align='center' />\n                      }\n                      {\n                        showAIProduct &&\n                        <>\n                          <TableCell align='center'>\n                            A.I. Identified Product Number\n                          </TableCell>\n                          <TableCell align='center'>\n                            A.I. Identified Manufacturer\n                          </TableCell>\n                        </>\n                      }\n                      <TableCell align='center' className={classes.expanderColumn} />\n                      <TableCell className={classes.greyText} align='center'>{t('quoteDetail.productListLabelColumn')}</TableCell>\n                      <TableCell className={classes.greyText} align='center'>{t('quoteDetail.productListProductColumn')}</TableCell>\n                      {sortedFieldsData.valueSeq().map((column: any) => (\n                        !column.get('invisible') &&\n                        <TableCell className={classes.greyText} align='center' key={`header${column.get('fieldName')}`}>\n                          {\n                            pinnedColumn.includes(column.get('id')) ?\n                              <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                                <AtsSvgPushpinRounded\n                                  color={theme.palette.primary.main}\n                                />\n                                {column.get('name')}\n                              </div>\n                              :\n                              column.get('name')\n                          }\n                        </TableCell>\n                      ))}\n                      <TableCell className={classes.greyText} align='center'>{t('quoteDetail.status')}</TableCell>\n                    </TableRow>\n                  </TableHead>\n                  <TableBody>\n                    {visibleProducts.map((row: IMap<QuoteSectionProduct>, index: number) => (\n                      row.get('id') === -1 ? null :\n                        <React.Fragment key={'row' + index}>\n                          <TableRow className={collapsedIndex.get(`${index}`) ? classes.tableRow : ''}>\n                            {showAIProduct && showImage && <ImageCell className={classes.imageCell} src={row.getIn(['specToQuoteValues', 'specProduct', 'file', 'images', 'main', 'fileId']) + `|fit:40,40`} width='40px' />}\n                            {\n                              showAIProduct &&\n                              <>\n                                <TableCell align='center'>\n                                  {\n                                    row.getIn(['specToQuoteValues', 'specProduct', 'id']) === AI_IDENTIFIED_PRODUCT_ID ?\n                                      !!row.getIn(['specToQuoteValues', 'specProduct', 'identifiedProductNumber']) ?\n                                        row.getIn(['specToQuoteValues', 'specProduct', 'identifiedProductNumber'])\n                                        :\n                                        '-'\n                                      :\n                                      row.getIn(['specToQuoteValues', 'specProduct', 'productNumber'])\n                                  }\n                                </TableCell>\n                                <TableCell align='center'>\n                                  {\n                                    row.getIn(['specToQuoteValues', 'specProduct', 'id']) === AI_IDENTIFIED_PRODUCT_ID ?\n                                      !!row.getIn(['specToQuoteValues', 'specProduct', 'identifiedBrand']) ?\n                                        row.getIn(['specToQuoteValues', 'specProduct', 'identifiedBrand'])\n                                        :\n                                        '-'\n                                      :\n                                      row.getIn(['specToQuoteValues', 'specProduct', 'brand'])\n                                  }\n                                </TableCell>\n                              </>\n                            }\n                            <TableCell align='center'\n                              onClick={() => this.expandRow(index)}\n                              className={classes.expanderColumnChevron}\n                            >\n                              <Grid container={true} alignItems='center'>\n                                {\n                                  collapsedIndex.get(`${index}`) ? <KeyboardArrowUpRoundedIcon /> : <KeyboardArrowDownRoundedIcon />\n                                }\n                              </Grid>\n                            </TableCell>\n                            <TableCell align='center'>\n                              <div style={{ display: 'flex' }}>\n                                <Tooltip title={row.get('labelColumn') || ''}>\n                                  <div className={classes.labelColumn}>\n                                    {row.get('labelColumn')}\n                                  </div>\n                                </Tooltip>\n                              </div>\n                            </TableCell>\n                            <TableCell align='center'>\n                              {this.getCutsheetDataByLocaleRegionOrFallback(row, 'fileId')\n                                ? <Link target='_blank' href={this.fileSrc(this.getCutsheetDataByLocaleRegionOrFallback(row, 'fileId'))}>{row.get('label')}</Link>\n                                : this.getCutsheetDataByLocaleRegionOrFallback(row, 'url')\n                                  ? <Link target='_blank' href={this.getCutsheetDataByLocaleRegionOrFallback(row, 'url')}>{row.get('label')}</Link>\n                                  : row.get('label') || '-'\n                              }\n                            </TableCell>\n                            {sortedFieldsData.map((column: any, columnIndex: number) => {\n                              let cell = row.get('templateCells').find(item => item.get('id') === column.get('id'));\n                              if (!cell) {\n                                if (handleAddSectionWithTemplateIssue) {\n                                  handleAddSectionWithTemplateIssue(section.get('sectionTitle'));\n                                }\n                                cell = column;\n                              }\n                              const fieldType = cell.get('fieldType');\n                              const fieldValue = cell.get('fieldValue');\n                              const formattedValue = cell.get('formattedValue');\n                              const displayValue = cell.get('fieldType') === 'text'\n                                ? fieldValue\n                                : !String(fieldValue)\n                                  ? '-'\n                                  : formattedValue\n                                    ? formatThousandsNumber(formattedValue)\n                                    : Number(fieldValue).toLocaleString('en-US', { maximumFractionDigits: 20 });\n                              return (\n                                !column.get('invisible') &&\n                                  (cell.get('displayPoaTag')\n                                    ? <TableCell\n                                        align='center'\n                                        key={cell.get('fieldName') ?? columnIndex}\n                                      >\n                                        {'P.O.A.'}\n                                      </TableCell>\n                                    : <TableCell\n                                        align='center'\n                                        key={cell.get('fieldName') ?? columnIndex}\n                                      >\n                                        {displayValue}\n                                        {String(fieldValue) && fieldType === 'percentage' ? '%' : ''}\n                                      </TableCell>\n                                  )\n                              );\n                            }\n                            )}\n                            <TableCell align='center'>\n                              {\n                                row.get('excluded') &&\n                                <Tooltip title={t('quoteDetail.itemExcluded')}>\n                                  <RemoveCircleIcon color='primary' />\n                                </Tooltip>\n                              }\n                            </TableCell>\n                          </TableRow>\n                          {collapsedIndex.get(`${index}`) &&\n                            <TableRow>\n                              <TableCell\n                                colSpan={row.get('templateCells', fromJS([])).size + 4}\n                                padding='none'\n                              >\n                                <Grid\n                                  container={true}\n                                  wrap='nowrap'\n                                  className={classes.expansionContainer}\n                                  spacing={2}\n                                >\n                                  <Grid\n                                    item={true}\n                                    container={true}\n                                    direction='column'\n                                    className={classes.descAndNote}\n                                    spacing={1}\n                                  >\n                                    <Grid item={true} className={classes.greyText}>\n                                      <strong>{t('quoteDetail.productDescription')}:</strong>\n                                    </Grid>\n                                    <Grid item={true} className={classes.greyText}>\n                                      {row.get('description')}\n                                    </Grid>\n                                  </Grid>\n                                  <Grid\n                                    item={true}\n                                    container={true}\n                                    direction='column'\n                                    className={classes.descAndNote}\n                                    spacing={1}\n                                  >\n                                    <Grid item={true} className={classes.greyText}>\n                                      <strong>{t('quoteDetail.productNote')}:</strong>\n                                    </Grid>\n                                    <Grid item={true} className={classes.greyText} style={{ whiteSpace: 'pre-wrap' }}>\n                                      {row.get('note')}\n                                    </Grid>\n                                  </Grid>\n                                </Grid>\n                              </TableCell>\n                            </TableRow>\n                          }\n                        </React.Fragment>\n                    ))}\n                  </TableBody>\n                </Table>\n              </Grid>\n            </Grid>\n          </CardContent>\n        </Collapse>\n        <CardContent>\n          <Grid\n            container={true}\n            spacing={3}\n            wrap='nowrap'\n          >\n            <Grid item={true} xs={true}>\n              <Grid container={true} direction='row'>\n                {\n                  showAIProduct &&\n                  <Grid\n                    item={true}\n                    xs={4}\n                    className={classes.multiLine}\n                  >\n                    <strong>A.I. Identified Section Note:</strong><p />\n                    {section.get('aiNote')}\n                  </Grid>\n                }\n                <Grid\n                  item={true}\n                  xs={showAIProduct ? 8 : 12}\n                  className={classes.multiLine}\n                >\n                  {/* <strong>Section Note:</strong><p /> */}\n                  {section.get('note')}\n                </Grid>\n              </Grid>\n            </Grid>\n\n            <Grid\n              item={true}\n              className={classes.subTotalBox}\n            >\n              {section.get('sectionCalculations')\n                ? section.get('sectionCalculations').valueSeq().map((calc: any, index: number) => {\n                    const formattedValue = calc.get('formattedValue')\n                      ? formatThousandsNumber(calc.get('formattedValue'))\n                      : formatSectionTotal({\n                          value: calc.get('value'),\n                          roundingOption: ROUNDING_OPTIONS.NEAREST_CENT,\n                          decimalPrecision: DECIMAL_PRECISION.TWO,\n                        });\n\n                    return <div key={`__subTotal-${index}`}>\n                      {calc.get('name')}: {`${formattedValue}${calc.get('fieldType') === 'percentage' ? '%' : ''}`}\n                    </div>;\n                  })\n                : null\n              }\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  }\n}\n\nconst mapStateToProps = (state, ownProps) => {\n  const linkedProjectId = ownProps.linkedProjectId;\n  const linkedProject = makeSelectProject({ projectId: linkedProjectId })(state);\n  return {\n    linkedProject,\n    ...createStructuredSelector({\n      visibilityList: makeSelectVisibilityList(),\n      atsApiIdentity: makeSelectAtsApiState('identity'),\n      loginUserOfficeLocation: makeSelectLoggedInUserOfficeLocation(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductSectionComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductSection);\n","const toSearchableString = (value: any): string => (value == null ? '' : String(value)).toLowerCase();\n\n/**\n * Case-insensitive substring match for type-ahead filters.\n *\n * The filters used to build `new RegExp(search, 'i')` from whatever the user typed, so a search like\n * `\\` or `(` threw a SyntaxError mid-render and `.` or `*` matched the wrong options. Missing values\n * are treated as an empty string, so an empty search still matches everything.\n */\nexport const includesIgnoreCase = (value: any, search: any): boolean => {\n  return toSearchableString(value).indexOf(toSearchableString(search)) !== -1;\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = scrollbarSize;\n\nvar _inDOM = _interopRequireDefault(require(\"./inDOM\"));\n\nvar size;\n\nfunction scrollbarSize(recalc) {\n  if (!size && size !== 0 || recalc) {\n    if (_inDOM.default) {\n      var scrollDiv = document.createElement('div');\n      scrollDiv.style.position = 'absolute';\n      scrollDiv.style.top = '-9999px';\n      scrollDiv.style.width = '50px';\n      scrollDiv.style.height = '50px';\n      scrollDiv.style.overflow = 'scroll';\n      document.body.appendChild(scrollDiv);\n      size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n    }\n  }\n\n  return size;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonChecked');\n\nexports.default = _default;","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities, makeSelectAdminDivisions } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction } from '../../../modules/ProjectLocationModule/actions';\nimport { IMap } from 'ats-utils/src';\nimport { ListItem, BuildingClassListItem, User, Project, Option, SearchArgs, Office } from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n  autofill,\n} from 'redux-form';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../../components/FieldAutoSuggest';\nimport {\n  startCase,\n} from 'lodash';\nimport { SearchUsersQuickByOfficeIdAction } from '../../../modules/AccountModule/actions';\nimport { makeSelectOfficesByFirm, makeSelectUsers } from '../../../modules/AccountModule/selectors';\nimport { GetBuildingTypesAction, GetBuildingClassesAction } from '../../../modules/BuildingModule/actions';\nimport { makeSelectBuildingTypes, makeSelectBuildingClasses } from '../../../modules/BuildingModule/selectors';\nimport { makeSelectUserFirmId, makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { dateValidateFunc } from '../../../validators';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation, { VALIDATION_HACK_FIELD } from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport { formatDateRangeFilter } from '../../ProjectList/ProjectListFilter';\n\nexport const FORM_NAME = 'MasterListFilters';\n\nconst updatedDateValidateFunc = (value, allValues) => dateValidateFunc('modifiedDate', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\n\ninterface IMasterListFilterComponentProps {\n  open: boolean;\n  toggleDrawer: () => void;\n  form?: string;\n  options: Option<Project>;\n  setSearchArgsAndSearch: (arg: SearchArgs<Project>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IMasterListFilter extends IMasterListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  formValues: Map<string, any>;\n  adminDivisions: Map<number, string>;\n  getBuildingTypes: (id: number) => void;\n  getBuildingClasses: () => void;\n  buildingTypes: List<IMap<ListItem<string, string>>>;\n  buildingClasses: List<IMap<BuildingClassListItem>>;\n  selectedBuildingClassId: number;\n  searchUsers: (searchTerm: string, officeId: number) => void;\n  officeUsers: List<IMap<User>>;\n  firmOffices: List<IMap<Office>>;\n  signedInUserOfficeId: number;\n}\n\ntype IMasterListFilterType = IMasterListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass MasterListFilter extends React.Component<IMasterListFilterType> {\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      getCountries,\n      getBuildingClasses,\n      formValues,\n      searchUsers,\n      signedInUserOfficeId,\n      getBuildingTypes,\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      getCountries();\n      getBuildingClasses();\n      searchUsers('', signedInUserOfficeId);\n\n      // if (formValues != null) {\n      //   const countryId = formValues.getIn(['location', 'country', 'id']);\n      //   if (countryId != null) {\n      //     this.selectCountry(countryId, false);\n      //   }\n      //   const provinceId = formValues.getIn(['location', 'province', 'id']);\n      //   if (provinceId != null) {\n      //     this.selectProvince(provinceId, false);\n      //   }\n      // }\n    }\n\n    if (prevProps.selectedBuildingClassId !== this.props.selectedBuildingClassId && (this.props.selectedBuildingClassId !== -1)) {\n      getBuildingTypes(this.props.selectedBuildingClassId);\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n    } = this.props;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(_countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n\n    } else {\n      dispatch(change(form, 'countryId', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n    } else {\n      dispatch(change(form, 'provinceId', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      // dispatch(change(form, 'location.city', cities.find((city) => {\n      //   return city.get('id') === cityId;\n      // })));\n    } else {\n      dispatch(change(form, 'cityId', null));\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const buildingClassId = ctx.getIn(['buildingClassId', 'eq']);\n        const buildingTypeId = ctx.getIn(['buildingTypeId', 'eq']);\n\n        const createdBy = ctx.getIn(['createdBy', 'eq']);\n        const createdByOffice = ctx.get('createdByOfficeId');\n\n        const modifiedDate = ctx.get('modifiedDate');\n        const formatedModifiedDate = modifiedDate && formatDateRangeFilter(modifiedDate);\n        if (formatedModifiedDate) {\n          ctx.set('modifiedDate', formatedModifiedDate);\n        } else if (modifiedDate) {\n          ctx.delete('modifiedDate');\n        }\n\n        const createdDate = ctx.get('createdDate');\n        const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n        if (formatedCreatedDate) {\n          ctx.set('createdDate', formatedCreatedDate);\n        } else if (createdDate) {\n          ctx.delete('createdDate');\n        }\n\n        buildingClassId && ctx.setIn(['buildingClassId', 'eq'], buildingClassId.id); // tslint:disable-line\n        buildingTypeId && ctx.setIn(['buildingTypeId', 'eq'], buildingTypeId.id); // tslint:disable-line\n\n        createdBy ? ctx.setIn(['createdBy', 'eq'], createdBy.id) : ctx.delete('createdBy');\n        createdByOffice && (createdByOffice.get('eq') ? ctx.setIn(['createdByOfficeId', 'eq'], createdByOffice.getIn(['eq', 'id'])) : ctx.delete('createdByOfficeId')); // tslint:disable-line\n\n        if (ctx.get(VALIDATION_HACK_FIELD)) {\n          ctx.delete(VALIDATION_HACK_FIELD);\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.get(key[0]) && value.getIn([key[0], 'eq']) !== null;\n        });\n\n      const filters = {\n        'and': valuesWithParsedKeys.toJS()\n      };\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      form,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(reset(form || FORM_NAME));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      countries,\n      adminDivisions,\n      provinces,\n      cities,\n      formValues,\n      buildingTypes,\n      buildingClasses,\n      officeUsers,\n      firmOffices,\n      handleSubmit,\n      signedInUserOfficeId,\n      searchUsers,\n      uniqueKey,\n      t,\n    } = this.props;\n\n    const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'id']) : -1;\n    const countryId: number = _countryId != null ? Number(_countryId) : -1;\n    const adminDivision = startCase(adminDivisions.get(countryId, 'province'));\n\n    const usersListItem = officeUsers.reduce((acc, user: IMap<User>) => {\n      const userId = user.get('id');\n      const firstName = user.get('firstName');\n      const lastName = user.get('lastName');\n      const listItem = Map().withMutations((immutableMap) => {\n        immutableMap.set('id', userId),\n        immutableMap.set('value', `${firstName} ${lastName}`);\n      });\n\n      return acc.push(listItem);\n    }, List());\n\n    return (\n      <>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Header */}\n            <Grid\n              className={classes.header}\n              container={true}\n              justify='space-between'\n              alignItems='center'\n            >\n              <Typography\n                variant='h5'\n              >\n                {t('generalListFilter.title')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='flex-end'\n                item={true}\n                xs={7}\n              >\n                <Button\n                  color='primary'\n                  onClick={this.handleResetForm}\n                >\n                  {t('generalListFilter.reset')}\n                </Button>\n                <IconButton\n                  onClick={toggleDrawer}\n                >\n                  <CloseIcon />\n                </IconButton>\n              </Grid>\n            </Grid>\n\n            {/* Content */}\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* location */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('MasterListPage.locationColumn')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    // placeholder={countryName || t('placeholders.CountrySelection')}\n                    props={{\n                      label: t('MasterFilters.country'),\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        // highlightFirstSuggestion: true,\n                        directMode: false,\n                        data: countries.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCountry,\n                      },\n                    }}\n                    name='countryId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    // placeholder={provinceName || t('placeholders.ProvinceSelection')}\n                    props={{\n                      label: adminDivision,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        // highlightFirstSuggestion: true,\n                        directMode: false,\n                        data: provinces.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectProvince,\n                      },\n                    }}\n                    name='provinceId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    // placeholder={cityName || t('placeholders.CitySelection')}\n                    props={{\n                      label: t('MasterFilters.city'),\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        // highlightFirstSuggestion: true,\n                        directMode: false,\n                        data: cities.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return value.length !== 0;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCity,\n                      },\n                    }}\n                    name='cityId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* building class and type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('MasterFilters.buildingTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingClassId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingClasses.toIndexedSeq().toJS(),\n                        label: t('MasterFilters.buildingClass'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                        onChange: (event: object, value: any) => !value && dispatch(autofill(FORM_NAME, 'buildingTypeId', undefined))\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingTypeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingTypes && buildingTypes.toJS(),\n                        label: t('MasterFilters.buildingType'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('MasterFilters.createdDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      }\n                    }}\n                    validate={[createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    to\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      }\n                    }}\n                    validate={[createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* updated date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('MasterFilters.updatedDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`modifiedDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      }\n                    }}\n                    validate={[createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`modifiedDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      }\n                    }}\n                    validate={[updatedDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* creator */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('MasterFilters.creator')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdBy.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: usersListItem.toJS(),\n                        placeholder: t('MasterFilters.selectCreator'),\n                        onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created by office */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdByOffice')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdByOfficeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: firmOffices.toJS(),\n                        placeholder: t('projectListFilter.createdByOfficePlaceholder'),\n                        getOptionLabel: option => option ? option.officeName : null,\n                        renderOption: option => option && <Typography>{option.officeName}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n            </Grid>\n          </form>\n        </Drawer>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  buttonContainer: {\n    marginTop: 0,\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state, ownProps: IMasterListFilterComponentProps) => {\n\n  const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n  const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n  const selectedBuildingClassId = formValues.getIn(['buildingClassId', 'eq', 'id'], -1);\n  const signedInUserOfficeId = makeSelectUserOfficeId()(state);\n  const firmId = makeSelectUserFirmId()(state);\n\n  return {\n    form,\n    selectedBuildingClassId,\n    signedInUserOfficeId,\n    ...createStructuredSelector({\n      adminDivisions: makeSelectAdminDivisions(),\n      buildingTypes: makeSelectBuildingTypes(selectedBuildingClassId),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      buildingClasses: makeSelectBuildingClasses(),\n      formValues: getFormValues(form),\n      officeUsers: makeSelectUsers(),\n      firmOffices: makeSelectOfficesByFirm({firmId}),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getBuildingTypes: (id: number) => {\n      dispatch(new GetBuildingTypesAction(id));\n    },\n    getBuildingClasses: () => {\n      dispatch(new GetBuildingClassesAction());\n    },\n    searchUsers: (searchTerm: string, officeId: number) => {\n      dispatch(new SearchUsersQuickByOfficeIdAction({ searchTerm, officeId }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IMasterListFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: FORM_NAME }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(MasterListFilter);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List, fromJS} from 'immutable';\nimport {\n    Drawer,\n    Button,\n    IconButton,\n    Grid,\n    Typography,\n    Theme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities, makeSelectAdminDivisions } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction } from '../../../modules/ProjectLocationModule/actions';\nimport { IMap } from 'ats-utils/src';\nimport { ListItem, BuildingClassListItem, User, Project, Option, SearchArgs, Office } from '../../../models';\nimport {\n    Field,\n    reduxForm,\n    getFormValues,\n} from 'redux-form/immutable';\nimport {\n    InjectedFormProps,\n    BaseFieldProps,\n    change,\n    reset,\n    autofill,\n} from 'redux-form';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../../components/FieldAutoSuggest';\nimport {\n    startCase,\n} from 'lodash';\nimport { SearchUsersQuickByOfficeIdAction } from '../../../modules/AccountModule/actions';\nimport {makeSelectLoggedInUserOfficeLocation, makeSelectOfficesByFirm, makeSelectUsers} from '../../../modules/AccountModule/selectors';\nimport { GetBuildingTypesAction, GetBuildingClassesAction } from '../../../modules/BuildingModule/actions';\nimport { makeSelectBuildingTypes, makeSelectBuildingClasses } from '../../../modules/BuildingModule/selectors';\nimport { makeSelectUserFirmId, makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { dateValidateFunc } from '../../../validators';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation, { VALIDATION_HACK_FIELD } from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport { formatDateRangeFilter } from '../../ProjectList/ProjectListFilter';\n\nexport const FORM_NAME = 'TemplateListFilters';\n\nconst updatedDateValidateFunc = (value, allValues) => dateValidateFunc('modifiedDate', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\n\ninterface IMasterListFilterComponentProps {\n    open: boolean;\n    toggleDrawer: () => void;\n    form?: string;\n    options: Option<Project>;\n    setSearchArgsAndSearch: (arg: SearchArgs<Project>) => void;\n    uniqueKey: any;\n    setUniqueKey: (key: any) => void;\n}\n\ninterface IMasterListFilter extends IMasterListFilterComponentProps {\n    dispatch: Dispatch<IAction>;\n\n    countries: List<IMap<ListItem>>;\n    provinces: List<IMap<ListItem>>;\n    cities: List<IMap<ListItem>>;\n    getCountries: () => void;\n    formValues: Map<string, any>;\n    adminDivisions: Map<number, string>;\n    getBuildingTypes: (id: number) => void;\n    getBuildingClasses: () => void;\n    buildingTypes: List<IMap<ListItem<string, string>>>;\n    buildingClasses: List<IMap<BuildingClassListItem>>;\n    selectedBuildingClassId: number;\n    searchUsers: (searchTerm: string, officeId: number) => void;\n    officeUsers: List<IMap<User>>;\n    firmOffices: List<IMap<Office>>;\n    signedInUserOfficeId: number;\n}\n\ntype IMasterListFilterType = IMasterListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass MasterTemplateFilter extends React.Component<IMasterListFilterType> {\n\n    public componentDidMount(): void {\n        const {\n            getCountries,\n        } = this.props;\n\n        getCountries();\n    }\n\n    public componentDidUpdate(prevProps, prevState) {\n        const {\n            open,\n            getCountries,\n            getBuildingClasses,\n            formValues,\n            searchUsers,\n            signedInUserOfficeId,\n            getBuildingTypes,\n            dispatch\n        } = this.props;\n\n        if (open && (open !== prevProps.open)) {\n            // getCountries();\n            getBuildingClasses();\n            searchUsers('', signedInUserOfficeId);\n\n            // if (formValues != null) {\n            //   const countryId = formValues.getIn(['location', 'country', 'id']);\n            //   if (countryId != null) {\n            //     this.selectCountry(countryId, false);\n            //   }\n            //   const provinceId = formValues.getIn(['location', 'province', 'id']);\n            //   if (provinceId != null) {\n            //     this.selectProvince(provinceId, false);\n            //   }\n            // }\n        }\n\n        // get province list when default country selected\n        if (formValues !== null && formValues !== prevProps.formValues) {\n            const countryId = formValues.getIn(['countryId', 'eq']);\n            if (countryId && countryId !== (prevProps.formValues || Map()).getIn(['countryId', 'eq'])) {\n                dispatch(new GetProvinceAction(countryId));\n            }\n        }\n\n        if (prevProps.selectedBuildingClassId !== this.props.selectedBuildingClassId && (this.props.selectedBuildingClassId !== -1)) {\n            getBuildingTypes(this.props.selectedBuildingClassId);\n        }\n\n        if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n            this.onSubmit(formValues);\n        }\n    }\n\n    public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n        const {\n            dispatch,\n            countries,\n            form,\n        } = this.props;\n\n        const countryId = Number(_countryId);\n        if (_countryId != null) {\n            dispatch(new GetProvinceAction(_countryId));\n            dispatch(new GetCountryAdminDivisionAction({ countryId }));\n\n        } else {\n            dispatch(change(form, 'countryId', null));\n        }\n        if (clear) {\n            this.selectProvince();\n        }\n    }\n    public selectProvince = (provinceId?: number, clear: boolean = true) => {\n        const {\n            dispatch,\n            provinces,\n            form,\n        } = this.props;\n        if (provinceId != null) {\n            dispatch(new GetCityAction(provinceId));\n        } else {\n            dispatch(change(form, 'provinceId', null));\n        }\n        if (clear) {\n            this.selectCity();\n        }\n    }\n    public selectCity = (cityId?: number) => {\n        const {\n            dispatch,\n            cities,\n            form,\n        } = this.props;\n        if (cityId != null) {\n            // dispatch(change(form, 'location.city', cities.find((city) => {\n            //   return city.get('id') === cityId;\n            // })));\n        } else {\n            dispatch(change(form, 'cityId', null));\n        }\n    }\n\n    public onSubmit = (values: Map<string, any>) => {\n        const {\n            options,\n            setSearchArgsAndSearch,\n        } = this.props;\n\n        if (values.size) {\n            const formatedValues = values.withMutations(ctx => {\n                const buildingClassId = ctx.getIn(['buildingClassId', 'eq']);\n                const buildingTypeId = ctx.getIn(['buildingTypeId', 'eq']);\n\n                const createdBy = ctx.getIn(['createdBy', 'eq']);\n                const createdByOffice = ctx.get('createdByOfficeId');\n\n                const modifiedDate = ctx.get('modifiedDate');\n                const formatedModifiedDate = modifiedDate && formatDateRangeFilter(modifiedDate);\n                if (formatedModifiedDate) {\n                    ctx.set('modifiedDate', formatedModifiedDate);\n                } else if (modifiedDate) {\n                    ctx.delete('modifiedDate');\n                }\n\n                const createdDate = ctx.get('createdDate');\n                const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n                if (formatedCreatedDate) {\n                    ctx.set('createdDate', formatedCreatedDate);\n                } else if (createdDate) {\n                    ctx.delete('createdDate');\n                }\n\n                buildingClassId && ctx.setIn(['buildingClassId', 'eq'], buildingClassId.id); // tslint:disable-line\n                buildingTypeId && ctx.setIn(['buildingTypeId', 'eq'], buildingTypeId.id); // tslint:disable-line\n\n                createdBy ? ctx.setIn(['createdBy', 'eq'], createdBy.id) : ctx.delete('createdBy');\n                createdByOffice && (createdByOffice.get('eq') ? ctx.setIn(['createdByOfficeId', 'eq'], createdByOffice.getIn(['eq', 'id'])) : ctx.delete('createdByOfficeId')); // tslint:disable-line\n\n                if (ctx.get(VALIDATION_HACK_FIELD)) {\n                    ctx.delete(VALIDATION_HACK_FIELD);\n                }\n            });\n\n            const valuesWithParsedKeys = formatedValues\n                .reduce((acc, filter, key) => {\n                    const newFilter = Map().withMutations((ctx) => {\n                        ctx.set(key, filter);\n                    });\n                    return acc.push(newFilter);\n                }, List())\n                .filter((value) => {\n                    // filters out null values. more so for the location stuff\n                    const key = value.keySeq().toJS();\n                    return value.get(key[0]) && value.getIn([key[0], 'eq']) !== null;\n                });\n\n            const filters = {\n                'and': valuesWithParsedKeys.toJS()\n            };\n\n            setSearchArgsAndSearch({\n                options: {\n                    ...options,\n                    offset: 0\n                },\n                filters,\n                page: 0,\n            });\n        }\n    }\n\n    public handleResetForm = () => {\n        const {\n            dispatch,\n            form,\n            options,\n            setSearchArgsAndSearch,\n            setUniqueKey\n        } = this.props;\n\n        dispatch(reset(form || FORM_NAME));\n        setUniqueKey(Date.now());\n\n        setSearchArgsAndSearch({\n            options: {\n                ...options,\n                offset: 0\n            },\n            filters: null,\n            page: 0,\n        });\n    }\n\n    public render() {\n        const {\n            dispatch,\n            classes,\n            open,\n            toggleDrawer,\n            countries,\n            adminDivisions,\n            provinces,\n            cities,\n            formValues,\n            buildingTypes,\n            buildingClasses,\n            officeUsers,\n            firmOffices,\n            handleSubmit,\n            signedInUserOfficeId,\n            searchUsers,\n            uniqueKey,\n            t,\n        } = this.props;\n\n        const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'id']) : -1;\n        const countryId: number = _countryId != null ? Number(_countryId) : -1;\n        const adminDivision = startCase(adminDivisions.get(countryId, 'province'));\n\n        const usersListItem = officeUsers.reduce((acc, user: IMap<User>) => {\n            const userId = user.get('id');\n            const firstName = user.get('firstName');\n            const lastName = user.get('lastName');\n            const listItem = Map().withMutations((immutableMap) => {\n                immutableMap.set('id', userId),\n                    immutableMap.set('value', `${firstName} ${lastName}`);\n            });\n\n            return acc.push(listItem);\n        }, List());\n\n        return (\n            <Drawer\n                className={classes.drawer}\n                classes={{\n                    paper: classes.drawerPaper,\n                }}\n                variant='persistent'\n                anchor='right'\n                open={open}\n                style={{ width: open ? 'initial' : 0}}\n            >\n                <form\n                    key={uniqueKey}\n                    onSubmit={handleSubmit(this.onSubmit)}\n                    className={classes.body}\n                >\n                    {/* Header */}\n                    <Grid\n                        className={classes.header}\n                        container={true}\n                        justify='space-between'\n                        alignItems='center'\n                    >\n                        <Typography\n                            variant='h5'\n                        >\n                            {t('generalListFilter.title')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            justify='flex-end'\n                            item={true}\n                            xs={7}\n                        >\n                            <Button\n                                color='primary'\n                                onClick={this.handleResetForm}\n                            >\n                                {t('generalListFilter.reset')}\n                            </Button>\n                            <IconButton\n                                onClick={toggleDrawer}\n                            >\n                                <CloseIcon />\n                            </IconButton>\n                        </Grid>\n                    </Grid>\n\n                    {/* Content */}\n                    <Grid\n                        item={true}\n                        className={classes.content}\n                    >\n                        {/* location */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('MasterListPage.locationColumn')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            justify='space-between'\n                            wrap='nowrap'\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                                item={true}\n                                xs={4}\n                            >\n                                <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                                    // placeholder={countryName || t('placeholders.CountrySelection')}\n                                    props={{\n                                        label: t('MasterFilters.country'),\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        },\n                                        autosuggestProps: {\n                                            // highlightFirstSuggestion: true,\n                                            directMode: false,\n                                            data: countries.toJS(),\n                                            renderMissingData: (value: any) => `Loading: ${value}`,\n                                            shouldRenderSuggestions: (value: string = '') => {\n                                                return true;\n                                            }\n                                        },\n                                        inputProps: {\n                                            onChange: this.selectCountry,\n                                        },\n                                    }}\n                                    name='countryId.eq'\n                                    component={FieldAutoSuggest}\n                                />\n                            </Grid>\n                            <Grid\n                                item={true}\n                                xs={4}\n                            >\n                                <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                                    // placeholder={provinceName || t('placeholders.ProvinceSelection')}\n                                    props={{\n                                        label: adminDivision,\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        },\n                                        autosuggestProps: {\n                                            // highlightFirstSuggestion: true,\n                                            directMode: false,\n                                            data: provinces.toJS(),\n                                            renderMissingData: (value: any) => `Loading: ${value}`,\n                                            shouldRenderSuggestions: (value: string = '') => {\n                                                return true;\n                                            }\n                                        },\n                                        inputProps: {\n                                            onChange: this.selectProvince,\n                                        },\n                                    }}\n                                    name='provinceId.eq'\n                                    component={FieldAutoSuggest}\n                                />\n                            </Grid>\n                            <Grid\n                                item={true}\n                                xs={4}\n                            >\n                                <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                                    // placeholder={cityName || t('placeholders.CitySelection')}\n                                    props={{\n                                        label: t('MasterFilters.city'),\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        },\n                                        autosuggestProps: {\n                                            // highlightFirstSuggestion: true,\n                                            directMode: false,\n                                            data: cities.toJS(),\n                                            renderMissingData: (value: any) => `Loading: ${value}`,\n                                            shouldRenderSuggestions: (value: string = '') => {\n                                                return value.length !== 0;\n                                            }\n                                        },\n                                        inputProps: {\n                                            onChange: this.selectCity,\n                                        },\n                                    }}\n                                    name='cityId.eq'\n                                    component={FieldAutoSuggest}\n                                />\n                            </Grid>\n                        </Grid>\n\n                        {/* building class and type */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('MasterFilters.buildingTitle')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            justify='space-between'\n                            wrap='nowrap'\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                    name='buildingClassId.eq'\n                                    component={FieldAutocomplete}\n                                    props={{\n                                        inputProps: {\n                                            options: buildingClasses.toIndexedSeq().toJS(),\n                                            label: t('MasterFilters.buildingClass'),\n                                            getOptionLabel: option => option ? option.value : null,\n                                            renderOption: option => option && option.value,\n                                            onChange: (event: object, value: any) => !value && dispatch(autofill(FORM_NAME, 'buildingTypeId', undefined))\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true\n                                        }\n                                    }}\n                                />\n                            </Grid>\n\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                    name='buildingTypeId.eq'\n                                    component={FieldAutocomplete}\n                                    props={{\n                                        inputProps: {\n                                            options: buildingTypes && buildingTypes.toJS(),\n                                            label: t('MasterFilters.buildingType'),\n                                            getOptionLabel: option => option ? option.value : null,\n                                            renderOption: option => option && option.value,\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true\n                                        }\n                                    }}\n                                />\n                            </Grid>\n                        </Grid>\n\n                        {/* created date */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('MasterFilters.createdDate')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            justify='space-between'\n                            alignItems='center'\n                            wrap='nowrap'\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                                    name={`createdDate.gte`}\n                                    props={{\n                                        timeOfDay: 'start',\n                                        keyboardDatePickerProps: {\n                                            placeholder: t('generalListFilter.startBy'),\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        }\n                                    }}\n                                    validate={[createdDateValidateFunc]}\n                                    component={FieldDatePickerV2}\n                                />\n                            </Grid>\n\n                            <Grid\n                                item={true}\n                            >\n                                <Typography\n                                    variant='caption'\n                                    className={classes.subtitle}\n                                >\n                                    to\n                                </Typography>\n                            </Grid>\n\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                                    name={`createdDate.lte`}\n                                    props={{\n                                        timeOfDay: 'end',\n                                        keyboardDatePickerProps: {\n                                            placeholder: t('generalListFilter.endBy'),\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        }\n                                    }}\n                                    validate={[createdDateValidateFunc]}\n                                    component={FieldDatePickerV2}\n                                />\n                            </Grid>\n                        </Grid>\n\n                        {/* updated date */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('MasterFilters.updatedDate')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            justify='space-between'\n                            alignItems='center'\n                            wrap='nowrap'\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                                    name={`modifiedDate.gte`}\n                                    props={{\n                                        timeOfDay: 'start',\n                                        keyboardDatePickerProps: {\n                                            placeholder: t('generalListFilter.startBy'),\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        }\n                                    }}\n                                    validate={[createdDateValidateFunc]}\n                                    component={FieldDatePickerV2}\n                                />\n                            </Grid>\n\n                            <Grid\n                                item={true}\n                            >\n                                <Typography\n                                    variant='caption'\n                                    className={classes.subtitle}\n                                >\n                                    {t('generalListFilter.to')}\n                                </Typography>\n                            </Grid>\n\n                            <Grid\n                                item={true}\n                                xs={6}\n                            >\n                                <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                                    name={`modifiedDate.lte`}\n                                    props={{\n                                        timeOfDay: 'end',\n                                        keyboardDatePickerProps: {\n                                            placeholder: t('generalListFilter.endBy'),\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true,\n                                        }\n                                    }}\n                                    validate={[updatedDateValidateFunc]}\n                                    component={FieldDatePickerV2}\n                                />\n                            </Grid>\n                        </Grid>\n\n                        {/* creator */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('MasterFilters.creator')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                                item={true}\n                                xs={12}\n                            >\n                                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                    name='createdBy.eq'\n                                    component={FieldAutocomplete}\n                                    props={{\n                                        inputProps: {\n                                            options: usersListItem.toJS(),\n                                            placeholder: t('MasterFilters.selectCreator'),\n                                            onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                                            getOptionLabel: option => option ? option.value : null,\n                                            renderOption: option => option && <Typography>{option.value}</Typography>\n                                        },\n                                        formControlProps: {\n                                            fullWidth: true\n                                        }\n                                    }}\n                                />\n                            </Grid>\n                        </Grid>\n\n                        {/* created by office */}\n                        <Typography\n                            variant='caption'\n                            className={classes.subtitle}\n                        >\n                            {t('projectListFilter.createdByOffice')}\n                        </Typography>\n                        <Grid\n                            container={true}\n                            item={true}\n                            xs={12}\n                            spacing={2}\n                        >\n                            <Grid\n                            item={true}\n                            xs={12}\n                            >\n                            <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                name='createdByOfficeId.eq'\n                                component={FieldAutocomplete}\n                                props={{\n                                inputProps: {\n                                    options: firmOffices.toJS(),\n                                    placeholder: t('projectListFilter.createdByOfficePlaceholder'),\n                                    getOptionLabel: option => option ? option.officeName : null,\n                                    renderOption: option => option && <Typography>{option.officeName}</Typography>\n                                },\n                                formControlProps: {\n                                    fullWidth: true\n                                }\n                                }}\n                            />\n                            </Grid>\n                        </Grid>\n\n                    </Grid>\n                </form>\n            </Drawer>\n        );\n    }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n    drawer: {\n        height: '100%'\n    },\n    drawerPaper: {\n        position: 'inherit',\n        borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n    },\n    header: {\n        padding: theme.spacing(0, 2, 1, 0)\n    },\n    body: {\n        padding: theme.spacing(1, 0, 2, 2),\n        height: '100%',\n        maxWidth: '370px'\n    },\n    content: {\n        height: `calc(100% - 72px)`,\n        overflow: 'auto',\n    },\n    subtitleContainer: {\n        marginBottom: theme.spacing(1.5),\n    },\n    subtitle: {\n        color: theme.palette.text.primary,\n        fontSize: theme.typography.pxToRem(16)\n    },\n    buttonContainer: {\n        marginTop: 0,\n    }\n});\n\nconst mapStateToProps = (state, ownProps: IMasterListFilterComponentProps) => {\n\n    const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n    const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n    const selectedBuildingClassId = formValues.getIn(['buildingClassId', 'eq', 'id'], -1);\n    const signedInUserOfficeId = makeSelectUserOfficeId()(state);\n    const officeLocation = makeSelectLoggedInUserOfficeLocation()(state);\n    const countryId = officeLocation?.getIn(['country', 'id']);\n    const firmId = makeSelectUserFirmId()(state);\n    let initialValues = fromJS({});\n    if (countryId != null) {\n        initialValues = initialValues.setIn(['countryId', 'eq'], `${countryId}`);\n    }\n    return {\n        form,\n        initialValues,\n        selectedBuildingClassId,\n        signedInUserOfficeId,\n        ...createStructuredSelector({\n            adminDivisions: makeSelectAdminDivisions(),\n            buildingTypes: makeSelectBuildingTypes(selectedBuildingClassId),\n            countries: makeSelectCountries(),\n            provinces: makeSelectProvinces(),\n            cities: makeSelectCities(),\n            buildingClasses: makeSelectBuildingClasses(),\n            formValues: getFormValues(form),\n            officeUsers: makeSelectUsers(),\n            firmOffices: makeSelectOfficesByFirm({firmId}),\n        })(state)\n    };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n    return {\n        getCountries: () => {\n            dispatch(new GetCountriesAction());\n        },\n        getBuildingTypes: (id: number) => {\n            dispatch(new GetBuildingTypesAction(id));\n        },\n        getBuildingClasses: () => {\n            dispatch(new GetBuildingClassesAction());\n        },\n        searchUsers: (searchTerm: string, officeId: number) => {\n            dispatch(new SearchUsersQuickByOfficeIdAction({ searchTerm, officeId }));\n        },\n        dispatch,\n    };\n};\n\nexport default compose<React.ComponentClass<IMasterListFilterComponentProps>> (\n    withStyles(styles),\n    connect(mapStateToProps, mapDispatchToProps),\n    withReduxFormValidationTranslation({ formName: FORM_NAME }),\n    reduxForm({\n        destroyOnUnmount: true,\n        enableReinitialize : true,\n        touchOnChange: true\n    }),\n    withTranslation('translations'),\n)(MasterTemplateFilter);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {Map, List} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { IMap } from 'ats-utils/src';\nimport { Option, SearchArgs, PureAttributeOption, PureName, PureAttribute } from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n  initialize\n} from 'redux-form';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport FieldCheckbox, {IFieldCheckboxComponentProps} from '../../../components/FieldCheckbox';\n\nexport const DESCRIPTIONS_LIST_FILTER_FORM = 'DescriptionsListFilters';\n\ninterface IDescriptionsListFilterComponentProps {\n  open: boolean;\n  selectedPureAttribute: IMap<PureAttribute>;\n  form?: string;\n  options: Option<PureAttributeOption>;\n  toggleDrawer: () => void;\n  setSearchArgsAndSearch: (arg: SearchArgs<PureAttributeOption>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IDescriptionsListFilter extends IDescriptionsListFilterComponentProps {\n  formValues: Map<string, any>;\n  dispatch: Dispatch<IAction>;\n}\n\ntype IDescriptionsListFilterType = IDescriptionsListFilter & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nclass DescriptionsListFilter extends React.Component<IDescriptionsListFilterType> {\n  public state = {\n    relatedManufacturers: [],\n    relatedCategories: [],\n  };\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      selectedPureAttribute,\n    } = this.props;\n\n    // if (open && (open !== prevProps.open)) {\n    //   !manufacturers.count() && getManufacturers(); // tslint:disable-line\n    //   !categories.count() && getCategories(); // tslint:disable-line\n    // }\n\n    if (open && ((open !== prevProps.open) || !selectedPureAttribute.equals(prevProps.selectedPureAttribute))) {\n      const newRelatedManufacturers = selectedPureAttribute.get('tags')?.reduce((arr, tag) => {\n        if (!arr.get(tag.getIn(['manufacturer', 'id']))) {\n          return arr.set(tag.getIn(['manufacturer', 'id']), tag.get('manufacturer'));\n        }\n        return arr;\n      }, Map()).toIndexedSeq().toJS() as PureName[];\n\n      const newRelatedCategories = selectedPureAttribute.get('tags')?.reduce((arr, tag) => {\n        if (!arr.get(tag.getIn(['category', 'id']))) {\n          return arr.set(tag.getIn(['category', 'id']), tag.get('category'));\n        }\n        return arr;\n      }, Map()).toIndexedSeq().toJS() as PureName[];\n\n      this.setState({\n        relatedManufacturers: newRelatedManufacturers || [],\n        relatedCategories: newRelatedCategories || []\n      });\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    } else if (!formValues && prevProps.formValues) {\n      this.handleResetForm();\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const manufacturer = ctx.get('manufacturerId');\n        const category = ctx.get('categoryId');\n        const activated = ctx.get('activated') ?? List();\n        const deactivated = ctx.get('deactivated') ?? List();\n\n        if (manufacturer) {\n          manufacturer.getIn(['eq', 'id'])\n            ? ctx.setIn(['manufacturerId', 'eq'], manufacturer.getIn(['eq', 'id']))\n            : ctx.delete('manufacturerId');\n        }\n        if (category) {\n          category.getIn(['eq', 'id'])\n            ? ctx.setIn(['categoryId', 'eq'], category.getIn(['eq', 'id']))\n            : ctx.delete('categoryId');\n        }\n        if (activated.first() && !deactivated.first()) {\n          ctx.setIn(['status.name', 'eq'], 'active');\n        }\n        if (deactivated.first() && !activated.first()) {\n          ctx.setIn(['status.name', 'eq'], 'inactive');\n        }\n        ctx.delete('activated');\n        ctx.delete('deactivated');\n      });\n      const valuesWithParsedKeys = formatedValues\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List());\n        const filters = valuesWithParsedKeys.size\n          ? { 'and': valuesWithParsedKeys.toJS() }\n          : {};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        DESCRIPTIONS_LIST_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(DESCRIPTIONS_LIST_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      relatedManufacturers,\n      relatedCategories,\n    } = this.state;\n    const {\n      classes,\n      open,\n      toggleDrawer,\n      handleSubmit,\n      uniqueKey,\n      t,\n    } = this.props;\n\n    return (\n      <Drawer\n        className={classes.drawer}\n        classes={{\n          paper: classes.drawerPaper,\n        }}\n        variant='persistent'\n        anchor='right'\n        open={open}\n        style={{ width: open ? 'initial' : 0}}\n      >\n        <form\n          key={uniqueKey}\n          onSubmit={handleSubmit(this.onSubmit)}\n          className={classes.body}\n        >\n          {/* Header */}\n          <Grid\n            className={classes.header}\n            container={true}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Typography\n              variant='h5'\n            >\n              {t('generalListFilter.title')}\n            </Typography>\n            <Grid\n              container={true}\n              justify='space-between'\n              item={true}\n              xs={5}\n            >\n              <Button\n                color='primary'\n                onClick={this.handleResetForm}\n              >\n                {t('generalListFilter.reset')}\n              </Button>\n              <IconButton\n                onClick={toggleDrawer}\n              >\n                <CloseIcon />\n              </IconButton>\n            </Grid>\n          </Grid>\n\n          {/* Content */}\n          <Grid\n            item={true}\n            className={classes.content}\n          >\n            {/* Status */}\n            <Typography\n                variant='caption'\n                className={classes.subtitle}\n            >\n              {t('pimProductList.status')}\n            </Typography>\n            <Grid\n                container={true}\n                justify='space-between'\n                item={true}\n                xs={12}\n            >\n              <Grid item={true} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='activated'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('pimDescriptionsList.activatedFilter'),\n                      color: 'primary',\n                      helperText: false,\n                    }}\n                />\n              </Grid>\n              <Grid item={true} xs={6}>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='deactivated'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('pimDescriptionsList.deactivatedFilter'),\n                      color: 'primary',\n                      helperText: false,\n                    }}\n                />\n              </Grid>\n            </Grid>\n            {/* Manufacturer */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.manufacturer')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='manufacturerId.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: relatedManufacturers,\n                      placeholder: t('pimProductList.selectManufacturer'),\n                      getOptionLabel: option => option ? option.name : null,\n                      renderOption: option => option && <Typography>{option.name}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n            {/* Category */}\n            <Typography\n              variant='caption'\n              className={classes.subtitle}\n            >\n              {t('pimProductList.category')}\n            </Typography>\n            <Grid\n              container={true}\n              item={true}\n              spacing={2}\n              xs={12}\n            >\n              <Grid\n                item={true}\n                xs={12}\n              >\n                <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                  name='categoryId.eq'\n                  component={FieldAutocomplete}\n                  props={{\n                    inputProps: {\n                      options: relatedCategories,\n                      placeholder: t('pimProductList.selectCategory'),\n                      getOptionLabel: option => option ? option.name : null,\n                      renderOption: option => option && <Typography>{option.name}</Typography>\n                    },\n                    formControlProps: {\n                      fullWidth: true\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n\n          </Grid>\n        </form>\n      </Drawer>\n    );\n  }\n}\n\nconst DRAWER_MAX_WIDTH = 370;\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: `${DRAWER_MAX_WIDTH}px`\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflowY: 'auto',\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16),\n  },\n});\n\nconst mapStateToProps = (state, ownProps: IDescriptionsListFilterComponentProps) => {\n  const form = ownProps.form != null ? ownProps.form : DESCRIPTIONS_LIST_FILTER_FORM;\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IDescriptionsListFilterComponentProps>> (\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: DESCRIPTIONS_LIST_FILTER_FORM }),\n  reduxForm({\n    destroyOnUnmount: true,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(DescriptionsListFilter);\n","import { createStyles, Grid, IconButton, LinearProgress, Link, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { SeriesProductFile } from '../../../models';\nimport useFileUpload, { ERROR_TYPE } from '../../../hooks/useFileUpload';\nimport { IProductFile } from '../../../models/File';\nimport { IMediaKey } from '../../../pages/SeriesEditPage/Attachments';\nimport { Delete } from '@material-ui/icons';\nimport Language from '../../../models/Language';\nimport { useTranslation } from 'react-i18next';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  warningIcon: {\n    marginRight: theme.spacing(),\n  },\n  na: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n  iconButton: {\n    width: 36,\n    height: 36,\n  },\n}));\n\ninterface IMediaUploadComponentProps {\n  formName: string;\n  mediaKey: IMediaKey;\n  selectedLanguage: Language;\n  isPimProductEditDrawer?: boolean;\n  uploadedCutSheetFileIds?: Map<Language, string>;\n  setUploadedCutSheetFileIds?: (fileIdsByLocale: Map<Language, string>) => void;\n}\n\n\nconst MediaUpload: React.FC<IMediaUploadComponentProps> = ({\n  formName,\n  selectedLanguage,\n  mediaKey,\n  isPimProductEditDrawer = false,\n  uploadedCutSheetFileIds = Map(),\n  setUploadedCutSheetFileIds\n}) => {\n\n  const {\n    key,\n    label,\n    accept,\n    tooltip,\n    tArgs,\n  } = mediaKey;\n\n  const formValues = useSelector(getFormValues(formName)) as Map<string, any>;\n  const dispatch = useDispatch();\n  const atsApi = useAtsApi();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const acceptString = accept.join(', ');\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n  const fileName = formFile.getIn(['media', selectedLanguage, key, 'filename']);\n  const fileId = formFile.getIn(['media', selectedLanguage, key, 'fileId']);\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setFile\n   } = useFileUpload(accept);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n      ctx.updateIn(['media', selectedLanguage, key], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n        }));\n      });\n      ctx.deleteIn(['media', mediaKey]);\n    });\n    dispatch(change(formName, 'file', transformedFile));\n\n    // update uploaded cutsheet to check for override cutsheets for product edit drawer\n    if (isPimProductEditDrawer && key === 'manufacturer_cutsheet') {\n      const updatedUploadedCutSheetFileIds = uploadedCutSheetFileIds.set(selectedLanguage, uploadedFile.get('id'));\n      setUploadedCutSheetFileIds(updatedUploadedCutSheetFileIds);\n    }\n  }, [uploadedFile]);\n\n  const handleDeleteFile = () => {\n    const updated = formFile && formFile.withMutations((ctx) => {\n      if (ctx.getIn(['media', selectedLanguage, key, 'url'])) {\n        ctx.deleteIn(['media', selectedLanguage, key, 'fileId']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'filename']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'mimeType']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'size']);\n      } else {\n        ctx.deleteIn(['media', selectedLanguage, key]);\n      }\n      ctx.deleteIn(['media', key]);\n    });\n    dispatch(change(formName, 'file', updated));\n\n    // update the removed cutsheet to check for override cutsheets for product edit drawer\n    if (isPimProductEditDrawer && key === 'manufacturer_cutsheet') {\n      const updatedUploadedCutSheetFileIds = uploadedCutSheetFileIds.delete(selectedLanguage);\n      setUploadedCutSheetFileIds(updatedUploadedCutSheetFileIds);\n    }\n  };\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      _fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const displayError = () => (\n    <>\n      <WarningRoundedIcon color='error' className={classes.warningIcon} />\n      <Typography color='error'>\n        {\n          uploadErr === ERROR_TYPE.size\n          ? t('pimProductDrawer.overLimitMessage')\n          : uploadErr === ERROR_TYPE.type\n            ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n            : t('attachmentDrawer.notUploaded')\n        }\n      </Typography>\n    </>\n  );\n\n  const fileLink = fileId ? generateFileLink(fileId) : '';\n\n  return (\n    <Grid\n      item={true}\n      container={true}\n      style={{ borderBottom: 'solid gray 1px', marginBottom: 8 }}\n    >\n      <Typography color='textPrimary'>\n        { t(label) }\n      </Typography>\n      <Grid container={true} justify='space-between' alignItems='center'>\n        <Grid item={true} xs={8} container={true} direction='column'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n            alignItems='center'\n            item={true}\n          >\n            {\n              isUploading\n                  ? <>\n                      <LinearProgress variant='determinate' value={Number(loadingPercentage)} style={{ flexGrow: 1 }} />\n                      <Typography>{loadingPercentage}%</Typography>\n                    </>\n                  : <Tooltip title={fileName || ''}>\n                      {\n                        fileLink\n                          ? <Link href={fileLink} className={classes.ellipsis}>{fileName}</Link>\n                          : <Typography className={classes.na}>{ t('pimProductDrawer.na') }</Typography>\n                      }\n                    </Tooltip>\n            }\n          </Grid>\n          {\n            uploadErr ? displayError() : null\n          }\n        </Grid>\n        {\n          fileName\n            ? <IconButton onClick={handleDeleteFile} style={{ width: 36, height: 36 }}>\n                <Tooltip title={t('formButtons.delete')}>\n                  <Delete />\n                </Tooltip>\n              </IconButton>\n            : <>\n                <input type='file' accept={acceptString} id={`file-${key}`} style={{ display: 'none' }} onChange={(e) => setFile(e.target.files[0])} />\n                <label htmlFor={`file-${key}`} style={{ display: 'flex' }}>\n                  <Tooltip title={t(tooltip, tArgs)}>\n                    <IconButton\n                      disabled={isUploading}\n                      component='span'\n                      className={classes.iconButton}\n                    >\n                      <PublishIcon />\n                    </IconButton>\n                  </Tooltip>\n                </label>\n              </>\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default MediaUpload;","import { CircularProgress, createStyles, FormControl, Grid, IconButton, LinearProgress, Link, makeStyles, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport { SeriesProductFile } from '../../../models';\nimport { ERROR_TYPE } from '../../../hooks/useFileUpload';\nimport { IProductFile } from '../../../models/File';\nimport { IMediaKey } from '../../../pages/SeriesEditPage/Attachments';\nimport { Delete } from '@material-ui/icons';\nimport Language from '../../../models/Language';\nimport { useTranslation } from 'react-i18next';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport useFileUploadByAny from '../../../hooks/useFileUploadByAny';\nimport { isURL } from '../../../pages/SeriesEditPage/Attachments/EditLink';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport CachedIcon from '@material-ui/icons/Cached';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  ellipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: theme.typography.button.fontSize\n  },\n  hiddenInput: {\n    display: 'none',\n  },\n  warningIcon: {\n    marginRight: theme.spacing(),\n  },\n  fileName: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n  iconButton: {\n    width: 36,\n    height: 36,\n  },\n  input: {\n    padding: theme.spacing(0.5, 1.75),\n    fontSize: theme.typography.body1.fontSize,\n  },\n  noMargin: {\n    marginLeft: 0,\n    marginRight: 0,\n  }\n}));\n\ninterface IFullMediaUploadComponentProps {\n  formName: string;\n  mediaKey: IMediaKey;\n  selectedLanguage: Language;\n  isPimProductEditDrawer?: boolean;\n  uploadedCutSheetFileIds?: Map<Language, string>;\n  setUploadedCutSheetFileIds?: (fileIdsByLocale: Map<Language, string>) => void;\n}\n\n\nconst FullMediaUpload: React.FC<IFullMediaUploadComponentProps> = ({\n  formName,\n  selectedLanguage,\n  mediaKey,\n  isPimProductEditDrawer = false,\n  uploadedCutSheetFileIds = Map(),\n  setUploadedCutSheetFileIds\n}) => {\n\n  const {\n    key,\n    label,\n    accept,\n    tooltip,\n    tArgs,\n  } = mediaKey;\n\n  const formValues = useSelector(getFormValues(formName)) as Map<string, any>;\n  const dispatch = useDispatch();\n  const atsApi = useAtsApi();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const acceptString = accept.join(', ');\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n  const fileName = formFile.getIn(['media', selectedLanguage, key, 'filename']);\n  const fileId = formFile.getIn(['media', selectedLanguage, key, 'fileId']);\n  const url = formFile.getIn(['media', selectedLanguage, key, 'url']);\n\n  const [errorText, setErrorText] = React.useState('');\n  const [urlTempValue, setUrlTempValue] = React.useState(url || '');\n\n  const {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setFile,\n    setUrl,\n    setUploadErr,\n    uploadFileByUrl,\n   } = useFileUploadByAny(accept);\n\n  React.useEffect(() => {\n    setUrlTempValue(url || '');\n  }, [url]);\n\n  React.useEffect(() => {\n    if (!uploadedFile) {\n      return;\n    }\n\n    const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n      ctx.updateIn(['media', selectedLanguage, key], (val: IMap<IProductFile>) => {\n        return (val || Map() as IMap<IProductFile>).merge(fromJS({\n          fileId: uploadedFile.get('id'),\n          filename: uploadedFile.get('origFileName'),\n          mimeType: uploadedFile.get('mediaType'),\n          size: uploadedFile.get('size'),\n        }));\n      });\n      ctx.deleteIn(['media', key]);\n    });\n    dispatch(change(formName, 'file', transformedFile));\n    setUrlTempValue('');\n    setErrorText('');\n\n    // update uploaded cutsheet to check for override cutsheets for product edit drawer\n    if (isPimProductEditDrawer && key === 'manufacturer_cutsheet') {\n      const updatedUploadedCutSheetFileIds = uploadedCutSheetFileIds.set(selectedLanguage, uploadedFile.get('id'));\n      setUploadedCutSheetFileIds(updatedUploadedCutSheetFileIds);\n    }\n  }, [uploadedFile]);\n\n  const handleDeleteFile = () => {\n    const updated = formFile && formFile.withMutations((ctx) => {\n      if (ctx.getIn(['media', selectedLanguage, key, 'url'])) {\n        ctx.deleteIn(['media', selectedLanguage, key, 'fileId']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'filename']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'mimeType']);\n        ctx.deleteIn(['media', selectedLanguage, key, 'size']);\n      } else {\n        ctx.deleteIn(['media', selectedLanguage, key]);\n      }\n      ctx.deleteIn(['media', key]);\n    });\n    dispatch(change(formName, 'file', updated));\n    setUploadErr(null);\n\n    // update the removed cutsheet to check for override cutsheets for product edit drawer\n    if (isPimProductEditDrawer && key === 'manufacturer_cutsheet') {\n      const updatedUploadedCutSheetFileIds = uploadedCutSheetFileIds.delete(selectedLanguage);\n      setUploadedCutSheetFileIds(updatedUploadedCutSheetFileIds);\n    }\n  };\n\n  const handleDeleteUrl = () => {\n    if (formFile.getIn(['media', selectedLanguage, key, 'fileId'])) {\n      const updated = formFile.setIn(['media', selectedLanguage, key, 'url'], '').deleteIn(['media', key]);\n      dispatch(change(formName, 'file', updated));\n    } else {\n      const newFiles = formFile.deleteIn(['media', selectedLanguage, key]).deleteIn(['media', key]);\n      dispatch(change(formName, 'file', newFiles));\n    }\n    setUploadErr(null);\n  };\n\n  const handleDeleteMediaType = () => {\n    const newFiles = formFile.deleteIn(['media', selectedLanguage, key]).deleteIn(['media', key]);\n    dispatch(change(formName, 'file', newFiles));\n    setUploadErr(null);\n  };\n\n  const onAttachLink = () => {\n    setErrorText('');\n\n    if (urlTempValue && isURL(urlTempValue)) {\n      setUrl(urlTempValue);\n\n      const updated = formFile.setIn(['media', selectedLanguage, key, 'url'], urlTempValue).deleteIn(['media', key]);\n      dispatch(change(formName, 'file', updated));\n    } else if (urlTempValue && !isURL(urlTempValue)) {\n      setErrorText(t('errors.isExternalLink'));\n    }\n  };\n\n  const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setUrlTempValue(e.target.value);\n  };\n\n  const generateFileLink = (_fileId: string) => {\n    const _fileLink = atsApi.callApi(\n      _fileId,\n      { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true }\n    ) as string;\n\n    return _fileLink;\n  };\n\n  const fileLink = fileId ? generateFileLink(fileId) : '';\n  const uploadErrFile = !uploadErr?.includes('FromUrl') && uploadErr;\n  const uploadErrUrl = uploadErr?.includes('FromUrl') && uploadErr;\n\n  return (\n    <Grid\n      item={true}\n      container={true}\n      style={{ borderBottom: 'solid gray 1px', marginBottom: 8 }}\n    >\n      <Typography color='textPrimary'>\n        { t(label) }\n      </Typography>\n      <Grid container={true} justify='space-between' alignItems='center'>\n        <Grid item={true} xs={8} container={true} direction='column'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n            alignItems='center'\n            item={true}\n          >\n            {\n              isUploading\n                ? <>\n                    <LinearProgress variant='determinate' value={Number(loadingPercentage)} style={{ flexGrow: 1 }} />\n                    <Typography>{loadingPercentage}%</Typography>\n                    <CircularProgress color='primary' size={18} style={{ marginLeft: 8 }} />\n                  </>\n                : <Tooltip title={fileName || ''}>\n                    {\n                      fileLink\n                        ? <Link href={fileLink} className={classes.ellipsis}>{fileName}</Link>\n                        : <Typography className={classes.fileName}>{ t('pimProductDrawer.na') }</Typography>\n                    }\n                  </Tooltip>\n            }\n          </Grid>\n          {\n            uploadErrFile\n              ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                  <WarningRoundedIcon color='error' className={classes.warningIcon} />\n                  <Typography color='error'>\n                    {\n                      uploadErr === ERROR_TYPE.size\n                      ? t('pimProductDrawer.overLimitMessage')\n                      : uploadErr === ERROR_TYPE.type\n                        ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                        : t('attachmentDrawer.notUploaded')\n                    }\n                  </Typography>\n                </Grid>\n              : null\n          }\n        </Grid>\n        {\n          fileName\n            ? <IconButton onClick={handleDeleteMediaType} disabled={isUploading} className={classes.iconButton}>\n                <Tooltip title={(fileLink && url) ? t('pimProductDrawer.deleteMediaTypeTooltip') : ''}>\n                  <Delete />\n                </Tooltip>\n              </IconButton>\n            : <>\n                <input type='file' accept={acceptString} id={`file-${key}`} style={{ display: 'none' }} onChange={(e) => setFile(e.target.files[0])} />\n                <label htmlFor={`file-${key}`} style={{ display: 'flex' }}>\n                  <Tooltip title={url ? t('pimProductDrawer.deleteUrlFirstPrompt') : t(tooltip, tArgs)}>\n                    <span>\n                      <IconButton\n                        component='span'\n                        disabled={isUploading || Boolean(url)}\n                        className={classes.iconButton}\n                      >\n                        <PublishIcon />\n                      </IconButton>\n                    </span>\n                  </Tooltip>\n                </label>\n              </>\n        }\n      </Grid>\n\n      <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n        <Grid item={true} xs={8} container={true} direction='column'>\n          <Grid\n            container={true}\n            wrap='nowrap'\n            alignItems='center'\n            item={true}\n          >\n            {\n              url\n                ? <Grid item={true} container={true}>\n                    <Tooltip title={url}>\n                      <Link href={url} className={classes.ellipsis} target='_blank' rel='noopener'>{url}</Link>\n                    </Tooltip>\n                    {\n                      uploadErrUrl\n                        ? <Grid container={true} wrap='nowrap' alignItems='center'>\n                            <WarningRoundedIcon color='error' className={classes.warningIcon} />\n                            <Typography color='error'>\n                              {\n                                uploadErr === ERROR_TYPE.sizeFromUrl\n                                ? t('pimProductDrawer.overLimitMessage')\n                                : uploadErr === ERROR_TYPE.typeFromUrl\n                                  ? `${t('upload.typeError')} (${t('upload.acceptedTypes')} ${acceptString.replace(/\\./g, '').toUpperCase()})`\n                                  : t('attachmentDrawer.notUploaded')\n                              }\n                            </Typography>\n                          </Grid>\n                        : null\n                    }\n                  </Grid>\n                : <Tooltip title={fileLink ? t('pimProductDrawer.deleteFileFirstPrompt') : ''}>\n                    <FormControl\n                        fullWidth={true}\n                      >\n                        <TextField\n                          type='text'\n                          variant='outlined'\n                          placeholder={t('pimProductDrawer.urlPlaceholder')}\n                          disabled={isUploading || Boolean(fileLink)}\n                          value={urlTempValue}\n                          onChange={onChange}\n                          InputProps={{\n                            classes: {\n                              input: classes.input,\n                            }\n                          }}\n                          FormHelperTextProps={{\n                            margin: 'dense',\n                            classes: {\n                              contained: classes.noMargin,\n                            }\n                          }}\n                          error={Boolean(errorText)}\n                          helperText={errorText}\n                        />\n                      </FormControl>\n                  </Tooltip>\n            }\n          </Grid>\n        </Grid>\n        {\n          url\n            ? <Grid item={true} container={true} alignItems='center' justify='flex-end' wrap='nowrap'>\n                <Tooltip title={t('pimProductDrawer.refreshFileByUrlTooltip')}>\n                  <span>\n                    <IconButton\n                      className={classes.iconButton}\n                      disabled={isUploading}\n                      onClick={() => uploadFileByUrl(url)}\n                    >\n                      <CachedIcon />\n                    </IconButton>\n                  </span>\n                </Tooltip>\n                <IconButton onClick={handleDeleteMediaType} disabled={isUploading} className={classes.iconButton}>\n                  <Tooltip title={(fileLink && url) ? t('pimProductDrawer.deleteMediaTypeTooltip') : ''}>\n                    <Delete />\n                  </Tooltip>\n                </IconButton>\n              </Grid>\n            : <Tooltip title={fileLink ? t('pimProductDrawer.deleteFileFirstPrompt') : t('pimProductDrawer.uploadFileByUrlTooltip')}>\n                <span>\n                  <IconButton\n                    component='span'\n                    disabled={isUploading  || Boolean(fileLink)}\n                    className={classes.iconButton}\n                    onClick={onAttachLink}\n                  >\n                    <AttachFileIcon />\n                  </IconButton>\n                </span>\n              </Tooltip>\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default FullMediaUpload;","import * as React from 'react';\nimport { connect, useDispatch, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Grid,\n  Typography,\n  Tooltip,\n  Checkbox,\n  FormControlLabel\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport ControlledModal from '../ControlledModal';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { List, Map } from 'immutable';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { WithSpecId, withSpecId } from '../../hoc';\nimport { ListItem, XrefData } from '../../models';\nimport { crossTypes } from '../CrossReferenceTypesInfoPopup/Component';\nimport { CROSS_TYPE_NAMES } from '../../constants';\nimport { AddXrefAction } from '../../modules/CrossRefModule/actions';\nimport { fromJS } from 'immutable';\nimport { makeSelectUserId } from '../../modules/AtsModule/selectors';\nimport { makeSelectXrefTypes } from '../../modules/ListModule/selectors';\nimport { LOADING_MODAL_ID } from '../LoadingModal/Component';\n\nexport const CREATE_AI_XREF_DIALOG_ID = 'CREATE_AI_XREF_DIALOG';\n\ninterface ICreateAiXrefModalContentComponentProps {\n}\n\ninterface ICreateAiXrefModalContentProps extends ICreateAiXrefModalContentComponentProps {\n  overlayProps: { [key: string]: any };\n  selfUserId: number;\n  xrefTypes: List<IMap<ListItem>>;\n  overlayComponent: boolean;\n  dispatch: (s: IAction) => void;\n  addXref: (xrefData: IMap<XrefData>) => void;\n  closeDialog: () => void;\n  openLoadingModal: (action: string) => void;\n}\n\ntype ICreateAiXrefModalContent = ICreateAiXrefModalContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & WithSpecId;\n\nconst styles = (theme: Theme): StyleRules => ({\n  button: {\n    marginRight: theme.spacing(4),\n  },\n  root: {\n    width: 600\n  },\n  rowContainer: {\n    padding: theme.spacing(1, 0)\n  },\n  select: {\n    width: '100%'\n  },\n  placeholder: {\n    color: theme.palette.text.disabled\n  }\n});\nconst CreateAiXrefModal = (CreateAiXrefModalProps: ICreateAiXrefModalContent) => {\n  const {\n    classes,\n    overlayProps,\n    selfUserId,\n    xrefTypes,\n    overlayComponent,\n    addXref,\n    closeDialog,\n    openLoadingModal,\n    t\n  } = CreateAiXrefModalProps;\n\n  const {\n    competitorProductType,\n    sponsorProductType,\n    sponsorProductId,\n    competitorProductId,\n  } = overlayProps;\n\n  const dispatch = useDispatch();\n  const [selectedCrossTypes, setSelectedCrossTypes] = React.useState({});\n\n  React.useEffect(() => {\n    const initialValues = xrefTypes && xrefTypes.reduce((acc, xrefType) => {\n      const value = xrefType.get('value');\n      const foundXref = crossTypes.find(({ type }) => type === value);\n      const foundXrefType = foundXref?.type;\n      if (!foundXref || foundXrefType === CROSS_TYPE_NAMES.firm) {\n        return acc;\n      }\n      return {...acc, [foundXrefType]: false};\n    }, {});\n    setSelectedCrossTypes(initialValues);\n  }, [overlayComponent]);\n\n  const handleCheckChange = (event) => {\n    setSelectedCrossTypes({...selectedCrossTypes, [event.target.name]: event.target.checked });\n  };\n\n  const handleSubmit = () => {\n    const transformedCrossedTypes = fromJS(selectedCrossTypes)\n      .filter((value, key) => Object.values(CROSS_TYPE_NAMES).includes(key))\n      .reduce((acc, value, key) => {\n        if (value) {\n          const crossTypeObj = Map().withMutations(ctx => {\n            ctx.set('type', key);\n            ctx.set('referenceId', selfUserId);\n            ctx.set('score', 1);\n          });\n          return acc.push(crossTypeObj);\n        }\n        return acc;\n      }, List());\n\n    const xrefObj: any = fromJS({\n      competitorProductId,\n      competitorProductType,\n      sponsorProductId,\n      sponsorProductType,\n      types: transformedCrossedTypes\n    });\n\n    closeDialog();\n    addXref(xrefObj);\n    openLoadingModal(t('specToQuotePage.addingCross'));\n  };\n\n  return (\n    <ControlledModal\n      localKey={CREATE_AI_XREF_DIALOG_ID}\n      classes={{\n        paper: classes.root\n      }}\n    >\n      <DialogContent>\n        <DialogContentText id='create-ai-xref-title dialog' variant='h6' color='textPrimary'>\n          {t('specToQuotePage.createAiXrefModalTitle')}\n        </DialogContentText>\n        <DialogContentText id='create-ai-xref-subtitle dialog' variant='subtitle2' color='textSecondary'>\n          {t('specToQuotePage.createAiXrefModalSubTitle')}\n        </DialogContentText>\n        <Grid container={true} className={classes.rowContainer}>\n          {\n            xrefTypes && xrefTypes.map((xrefType) => {\n              const value = xrefType.get('value');\n              const foundXref = crossTypes.find(({ type }) => type === value);\n              if (!foundXref || foundXref.type === CROSS_TYPE_NAMES.firm) {\n                return;\n              }\n              const displayedType = foundXref.type;\n              const label = foundXref.tooltip();\n              const tooltip = foundXref.descriptionTooltip();\n              const icon = foundXref.icon;\n              return (\n                <Tooltip key={displayedType} title={tooltip}>\n                  <Grid container={true} item={true} xs={6} alignItems='center'>\n                    <FormControlLabel\n                      control={\n                        <Checkbox\n                          checked={selectedCrossTypes[displayedType]}\n                          onChange={handleCheckChange}\n                          name={displayedType}\n                          color='primary'\n                        />\n                      }\n                      label={\n                        <Grid container={true} alignItems='center'>\n                        {icon}\n                        <Typography variant='body2' color='textSecondary' style={{marginLeft: 4}}>{label}</Typography>\n                        </Grid>\n                      }\n                    />\n                  </Grid>\n                </Tooltip>\n              );\n            })\n          }\n        </Grid>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={closeDialog}\n          color='primary'\n          className={classes.button}\n          size='large'\n        >\n          {t('formButtons.cancel')}\n        </Button>\n        <Button\n          onClick={handleSubmit}\n          color='primary'\n          className={classes.button}\n          size='large'\n          disabled={!Object.values(selectedCrossTypes).find(x => x)}\n        >\n          {t('formButtons.add')}\n        </Button>\n      </DialogActions>\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state: any) => createStructuredSelector({\n  overlayProps: makeSelectOverlayComponentProp(CREATE_AI_XREF_DIALOG_ID),\n  selfUserId: makeSelectUserId(),\n  xrefTypes: makeSelectXrefTypes(),\n  overlayComponent: makeSelectOverlayComponent(CREATE_AI_XREF_DIALOG_ID)\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    addXref: (xrefData: IMap<XrefData>) => {\n      dispatch(new AddXrefAction({xrefData}));\n    },\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: CREATE_AI_XREF_DIALOG_ID,\n        open: false\n      }));\n    },\n    openLoadingModal: (action: string) => {\n      dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action } }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: true\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<ICreateAiXrefModalContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withSpecId({\n    withSpec: true,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CreateAiXrefModal);","import * as React from 'react';\nimport {\n  Theme,\n  createStyles,\n  Grid,\n  Button,\n  Typography,\n  CircularProgress\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  Map,\n} from 'immutable';\nimport { ControlledModal } from '..';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { Quote } from '../../models';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { makeSelectSelectedQuote, makeSelectIsCreatingSalesOrder } from '../../modules/QuoteModule/selectors';\nimport { CreateSalesOrderAction, SetIsCreatingSalesOrderAction } from '../../modules/QuoteModule/actions';\nimport { GenericErpCronJobAction } from '../../modules/PrintModule/actions';\n\nexport const SALES_ORDER_MODAL_KEY = 'SALES_ORDER_MODAL_KEY';\n\ninterface ISalesOrderModalComponentProps {\n}\n\ninterface ISalesOrderModalProps extends ISalesOrderModalComponentProps {\n  closeSalesOrderModal: () => void;\n  createSalesOrder: (quoteId: number) => void;\n  quote: IMap<Quote>;\n  isCreatingSalesOrder: boolean;\n}\n\ntype SalesOrderModalProps = ISalesOrderModalProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  root: {\n    padding: theme.spacing(3, 3, 2, 3),\n  },\n  buttonContainer: {\n    marginTop: theme.spacing(3)\n  },\n  cancel: {\n    marginRight: theme.spacing(3)\n  }\n});\n\nconst SalesOrderModal: React.FC<SalesOrderModalProps> = ({\n  t,\n  closeSalesOrderModal,\n  createSalesOrder,\n  quote = Map(),\n  isCreatingSalesOrder,\n  classes,\n}) => {\n\n  const internalNo = quote.get('internalNo')?.trim() ?? null;\n\n  const hasNoSalesOrder = !internalNo;\n\n  const handleCreateSalesOrder = () => {\n    createSalesOrder(Number(quote.get('id')));\n  };\n\n  return (\n    <ControlledModal\n      localKey={SALES_ORDER_MODAL_KEY}\n    >\n      <Grid\n        className={classes.root}\n        style={{\n          width: isCreatingSalesOrder ? 'auto' : 577\n        }}\n      >\n        {\n          isCreatingSalesOrder\n            ? <Grid container={true} justify='center' alignItems='center' spacing={1}>\n                <Grid item={true}><CircularProgress /></Grid>\n                <Grid item={true}>\n                  <Typography variant='h6'>\n                    {t('salesOrderModal.creatingMessage')}\n                  </Typography>\n                </Grid>\n              </Grid>\n            : <>\n                <Typography\n                  variant='h6'\n                >\n                  {\n                    hasNoSalesOrder\n                      ? t('salesOrderModal.noExistingSalesOrder')\n                      : t('salesOrderModal.haveExistingSalesOrderDescriptionNew', { id: internalNo })\n                  }\n                </Typography>\n\n                <Grid\n                  container={true}\n                  justify='flex-end'\n                  className={classes.buttonContainer}\n                >\n                  <Button\n                    onClick={closeSalesOrderModal}\n                    color='primary'\n                    className={classes.cancel}\n                  >\n                    {t('formButtons.cancel')}\n                  </Button>\n                  {\n                    hasNoSalesOrder\n                      ? (\n                          <Button\n                            onClick={() => handleCreateSalesOrder()}\n                            color='primary'\n                          >\n                            {t('salesOrderModal.confirm')}\n                          </Button>\n                        )\n                      : (\n                          <Button\n                            onClick={() => handleCreateSalesOrder()}\n                            color='primary'\n                          >\n                            { t('salesOrderModal.createNew') }\n                          </Button>\n                        )\n                  }\n                </Grid>\n              </>\n        }\n      </Grid>\n    </ControlledModal>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectSelectedQuote = makeSelectSelectedQuote();\n  const selectIsCreatingSalesOrder = makeSelectIsCreatingSalesOrder();\n\n  return function mapStateToProps(state) {\n    return ({\n      quote: selectSelectedQuote(state),\n      isCreatingSalesOrder: selectIsCreatingSalesOrder(state)\n    });\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    closeSalesOrderModal: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: SALES_ORDER_MODAL_KEY,\n        open: false\n      }));\n    },\n    createSalesOrder: (quoteId: number) => {\n      dispatch(new GenericErpCronJobAction({ quoteId, dispatch }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<{}>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(SalesOrderModal);\n","import * as React from 'react';\nimport {\n  Grid,\n  InputAdornment,\n  List as MuiList,\n  ListItem,\n  ListItemSecondaryAction,\n  ListItemText,\n  MenuItem,\n  Paper,\n  Select,\n  TextField,\n  Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { StyleRules, } from '@material-ui/core/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { connect, } from 'react-redux';\nimport { compose, } from 'redux';\nimport {\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { InjectedFormProps, } from 'redux-form';\nimport {\n  List,\n  Map,\n  fromJS,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Project,\n} from '../../../models';\nimport { makeSelectFormValues } from '../../CreateNewProjectFormStepper/selectors';\nimport { SetFormValuesAction } from '../../CreateNewProjectFormStepper/actions';\nimport { isEmail } from 'ats-utils/src'; /* tslint:disable-line */\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\n\ntype Permission = 'owner';\ninterface ICollaborator {\n  email: string;\n  id: number;\n  quotePermission: Permission;\n  specPermission: Permission;\n  projectId: number;\n}\n\ninterface IContributorsComponentProps {\n  projectData: IMap<Project>;\n  onSubmit: (values: any) => void;\n}\n\ninterface IContributors extends IContributorsComponentProps {\n  newProjectFormValues: Map<string, any>;\n  dispatch: React.Dispatch<IAction>;\n}\n\nexport const FORM_NAME = 'NewProjectCollaboratorsForm';\n\ntype ContributorsType =\n  IContributors\n  & InjectedFormProps\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  tableContainer: {\n    paddingBottom: theme.spacing(4),\n  },\n  formContainer: {\n    margin: `${theme.spacing(2)}px 0`,\n    width: '100%'\n  },\n  autoComplete: {\n    width: '100%'\n  }\n});\n\n\nclass NewProjectCollaboratorsForm extends React.Component<ContributorsType> {\n\n  public getCollaboratorsEmail = () => {\n    const {newProjectFormValues} = this.props;\n    const collaborators = newProjectFormValues.getIn(['collaborators'], List());\n    if (collaborators.size !== 0) {\n      return collaborators.map(collaborator => collaborator.get('email')).toArray();\n    } else {\n      return [];\n    }\n  }\n\n  public handleSelectChange = (email: string) => (event: React.ChangeEvent<{ value: string }>) => {\n    const { dispatch, newProjectFormValues } = this.props;\n    if (event.target.value === 'remove') {\n      const collaborators = newProjectFormValues.get('collaborators', List());\n      dispatch(new SetFormValuesAction(newProjectFormValues.set('collaborators', collaborators.filter((data) => data.get('email') !== email))));\n    }\n  }\n  public isValidate = () => this.getCollaboratorsEmail().every(email => isEmail(email));\n  public onSubmit = (values) => {\n    const { onSubmit } = this.props;\n    if (this.isValidate()) {\n      onSubmit(values);\n    }\n  }\n  public render() {\n    const {\n      handleSubmit,\n      children,\n      classes,\n      newProjectFormValues,\n      dispatch,\n    } = this.props;\n\n    const collaborators: List<IMap<ICollaborator>> = newProjectFormValues.getIn(['collaborators'], List());\n    return (\n      <form\n        onSubmit={handleSubmit(this.onSubmit)}\n        className={classes.formContainer}\n      >\n        <Grid\n          container={true}\n          spacing={2}\n        >\n          <Autocomplete\n            multiple={true}\n            freeSolo={true}\n            className={classes.autoComplete}\n            value={this.getCollaboratorsEmail()}\n            onChange={(event, value) => {\n              const immutableCollaborators = fromJS(value.map(option => {\n                return ({\n                  email: option,\n                  specPermission: 'owner'\n                });\n              }));\n              dispatch(new SetFormValuesAction(newProjectFormValues.set('collaborators', immutableCollaborators)));\n            }}\n            renderInput={(params) => {\n              return (\n                <TextField\n                  {...params}\n                  variant='standard'\n                  label='Add Collaborators'\n                  placeholder='Press enter to add'\n                  helperText='Enter Email'\n                  error={!this.isValidate()}\n                  fullWidth={true}\n                  InputProps={{\n                    ...params.InputProps,\n                    startAdornment: (\n                      <>\n                        <InputAdornment position='start'>\n                          <i className='fas fa-address-card' style={{color: '#757575'}}/>\n                        </InputAdornment>\n                        {params.InputProps.startAdornment}\n                      </>\n                    )\n                  }}\n                />\n              );\n            }}\n          />\n\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.tableContainer}\n          >\n            {collaborators.size !== 0 ?\n              <Paper elevation={3}>\n                <MuiList>\n                  {collaborators.map((data: IMap<ICollaborator>) => {\n                    const email: string = data.get('email');\n                    const specPermission: Permission = data.get('specPermission');\n                    return (\n                      <ListItem key={email}>\n                        <ListItemText>{email}</ListItemText>\n                        <ListItemSecondaryAction>\n                          <Select\n                            value={specPermission}\n                            onChange={this.handleSelectChange(email)}\n                          >\n                            <MenuItem value='owner'>\n                              owner\n                            </MenuItem>\n                            <MenuItem value='remove'>Remove</MenuItem>\n                          </Select>\n                        </ListItemSecondaryAction>\n                      </ListItem>\n                    );\n                  })}\n                </MuiList>\n              </Paper>\n              : null\n            }\n          </Grid>\n        </Grid>\n        {/* back/finish buttons */}\n        {children}\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state) => ({\n  ...createStructuredSelector({\n    newProjectFormValues: makeSelectFormValues(),\n  })(state),\n});\n\nexport default compose<React.ComponentClass<IContributorsComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps),\n  withTranslation('translations'),\n  withReduxFormValidationTranslation({ formName: FORM_NAME }),\n  reduxForm({\n    form: FORM_NAME,\n    touchOnChange: true,\n    enableReinitialize: true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: true,\n  }),\n)(NewProjectCollaboratorsForm);\n","export const DEFAULT_MOUNT_POINT: string = 'newProjectForm';\n\nexport default {\n  DEFAULT_MOUNT_POINT,\n};\n","/**\n * Shared by the /products grid (PimModule) and the package drawer's product\n * typeahead (ProductModule). A LEAF module because PimModule/saga already\n * imports from ProductModule/saga, so importing it back would be a cycle.\n */\n\n/**\n * Map ms-search `products.search.firm` items to the legacy firm-product row\n * shape the products list and the edit drawer consume.\n *\n * ms-search hydrates every hit with the complete `FirmProductWrapper` from\n * ms-pim (`firmRow`), so the normal path is a PASS-THROUGH: the row is\n * byte-identical to what the legacy PIM branch puts in the store, and every\n * consumer — grid cells, the shop-drawing column, the edit drawer's form and\n * save payload, the child-firm sharing check — works unchanged.\n *\n * Do not go back to hand-picking fields out of the search doc. A firm-product\n * row is a RECORD here, not a search result: `deltas` (the save payload),\n * `file.media`, `customData`, `keywords`, `productSharing` and `dateModified`\n * are either absent from the index or must not be read from it, because the\n * drawer writes every field back on save — so a form seeded from a doc the\n * delta-sync has not caught up on silently overwrites fresh data with stale.\n * The earlier field-by-field mapping shipped eight defects on exactly this,\n * most of them silent rather than an error.\n *\n * The one addition is a top-level `rank`: the wrapper carries it on\n * `firmProduct`, and mergeFirmProductPackagesByRank sorts on it at the row\n * level to line products up against packages.\n */\nexport function mapNewSearchFirmProducts(items: any[]): any[] {\n  return (items || []).map((it) => {\n    const row = it?.firmRow;\n    if (!row) {\n      return firmRowFromDocOnly(it);\n    }\n    return {\n      ...row,\n      rank: row.rank ?? row.firmProduct?.rank ?? null,\n    };\n  });\n}\n\n/**\n * Degraded row for a hit ms-pim could not hydrate (its populate threw, or the\n * whole hydration call failed). Built from the indexed fields alone, so it\n * renders in the grid but carries no `deltas` and CANNOT be edited — the save\n * path reports that explicitly rather than failing obscurely.\n *\n * Showing the product read-only beats dropping it from a search result, which\n * would look like the product no longer exists.\n */\nfunction firmRowFromDocOnly(it: any): any {\n  return {\n    id: it.id,\n    rank: it.rank ?? null,\n    firmId: it.firmId ?? null,\n    sharedProduct: !!it.sharedProduct,\n    productSharing: [],\n    firmProduct: {\n      id: it.id,\n      firmProductId: it.id,\n      productNumber: it.productNumber ?? null,\n      itemNumber: it.itemNumber ?? null,\n      sku: it.sku ?? null,\n      upc: it.upc ?? null,\n      uom: it.uom ?? null,\n      brand: it.brand ?? null,\n      brandId: it.brandId ?? null,\n      category: it.categoryId ?? null,\n      categoryName: it.categoryName ?? null,\n      series: it.seriesId ?? null,\n      seriesName: it.seriesName ?? null,\n      description: it.description ?? null,\n      status: it.status ?? null,\n      dateModified: it.dateModified ?? null,\n      firmId: it.firmId ?? null,\n      price: it.price ?? { default: {} },\n      file: it.mainImageFileId\n        ? { images: { main: { fileId: it.mainImageFileId } } }\n        : {},\n    },\n  };\n}\n\n/**\n * The FLAT firm-product rows, as legacy `product/getSearchFirmProducts`\n * returns them — `productNumber`, `description`, `file` and the rest at the TOP\n * level, with no `firmProduct` wrapper.\n *\n * TWO SHAPES, deliberately, because the two consumers read different things:\n *   - the /products grid and the edit drawer take the WRAPPER\n *     (mapNewSearchFirmProducts), because they need `deltas`, `productSharing`\n *     and the top-level `rank`.\n *   - the package drawer's product typeahead takes THIS, because its\n *     `getOptionLabel` and option renderer read `option.get('productNumber')`\n *     and `option.get('description')` directly.\n *\n * Handing the wrapper to the typeahead resolves its label to '' and renders a\n * row of blank lines — results arrive, the dropdown looks empty. Verified\n * against the live legacy response: its items carry no `firmProduct` key at\n * all, and ms-pim's inner `firmProduct` record is key-for-key the same thing.\n */\nexport function mapNewSearchFirmProductsFlat(items: any[]): any[] {\n  return mapNewSearchFirmProducts(items)\n    .map((row) => row?.firmProduct)\n    .filter((row) => !!row);\n}\n","import * as React from 'react';\nimport {compose,} from 'redux';\nimport {connect} from 'react-redux';\nimport {withTranslation, WithTranslation,} from 'react-i18next';\nimport {\n  AppBar,\n  Dialog,\n  IconButton,\n  Slide,\n  Theme,\n  Toolbar,\n  Typography,\n  withStyles,\n  WithStyles,\n  WithTheme,\n} from '@material-ui/core';\nimport {StyleRules,} from '@material-ui/core/styles';\nimport {TransitionProps} from '@material-ui/core/transitions/transition';\nimport {ComponentProps as WithProjectIdComponentProps} from '../../hoc/withProjectId';\nimport {IAction} from 'ats-utils/src';\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n  return <Slide direction='up' ref={ref} {...props} />;\n});\n\n\nconst styles = (theme: Theme): StyleRules => {\n  return {\n    appBar: {\n      position: 'relative',\n      backgroundColor: 'white'\n    },\n    subtitle: {\n      flex: 1,\n      color: 'black'\n    },\n    iconContainer: {\n      margin: `0 ${theme.spacing() * 2.5}px 0 0`\n    }\n  };\n};\n\ntype IToggleFunction = () => void;\n\ninterface IRequestMasterModalProps  {\n  dispatch: React.Dispatch<IAction>;\n}\n\ninterface IModal {\n  isOpen: boolean;\n}\n\ninterface IUncontrolledModal {\n  open?: never;\n  toggle?: never;\n}\n\ninterface IControlledModal {\n  open: boolean;\n  toggle: (o: boolean) => IToggleFunction;\n}\n\ntype RequestMasterModalComponentProps = (IUncontrolledModal | IControlledModal);\n\ntype RequestMasterModalProps = IRequestMasterModalProps & RequestMasterModalComponentProps & IModal & WithTranslation & WithTheme & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IRequestMasterModalState {\n  open: boolean;\n}\n\nclass RequestMasterModal extends React.Component<\n  RequestMasterModalProps,\n  IRequestMasterModalState\n> {\n  public state = {\n    open: false,\n  };\n\n  public render() {\n    const {\n      classes,\n      t,\n      open: controlledOpen,\n      toggle = this.toggleDialog,\n    } = this.props;\n\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    const controlled = controlledOpen != null;\n    const open = controlled ? controlledOpen : uncontrolledOpen;\n\n    return (\n      <Dialog\n        fullScreen={true}\n        open={open || false}\n        onClose={toggle(false)}\n        TransitionComponent={Transition}\n      >\n        <AppBar\n          className={classes.appBar}\n        >\n          <Toolbar>\n            <IconButton\n              color='primary'\n              onClick={() => toggle(false)()}\n              aria-label='Back'\n            >\n              <ArrowBackIosIcon />\n            </IconButton>\n            <Typography\n              variant='h6'\n              className={classes.subtitle}\n            >\n              {t('requestMaster.requestMaster')}\n            </Typography>\n          </Toolbar>\n        </AppBar>\n        {/* iframe for form */}\n        <iframe width='100%' height='100%' src='https://www.atsspec.com/masterrequest/' />\n      </Dialog>\n    );\n  }\n\n  private toggleDialog = (open: boolean) => () => {\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    this.setState({\n      open: open != null ? open : !uncontrolledOpen\n    });\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<RequestMasterModalComponentProps & WithProjectIdComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(RequestMasterModal);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M5 13h11.17l-4.88 4.88c-.39.39-.39 1.03 0 1.42.39.39 1.02.39 1.41 0l6.59-6.59c.39-.39.39-1.02 0-1.41l-6.58-6.6a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41L16.17 11H5c-.55 0-1 .45-1 1s.45 1 1 1z\"\n}), 'ArrowForwardRounded');\n\nexports.default = _default;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport * as React from 'react';\nexport var ReduxFormContext = React.createContext(null);\nexport var withReduxForm = function withReduxForm(Component) {\n  var Hoc =\n  /*#__PURE__*/\n  function (_React$Component) {\n    _inheritsLoose(Hoc, _React$Component);\n\n    function Hoc() {\n      return _React$Component.apply(this, arguments) || this;\n    }\n\n    var _proto = Hoc.prototype;\n\n    _proto.render = function render() {\n      var _this$props = this.props,\n          forwardedRef = _this$props.forwardedRef,\n          rest = _objectWithoutPropertiesLoose(_this$props, [\"forwardedRef\"]);\n\n      return React.createElement(ReduxFormContext.Consumer, {\n        children: function children(_reduxForm) {\n          return React.createElement(Component, _extends({\n            _reduxForm: _reduxForm,\n            ref: forwardedRef\n          }, rest));\n        }\n      });\n    };\n\n    return Hoc;\n  }(React.Component);\n\n  var ref = React.forwardRef(function (props, ref) {\n    return React.createElement(Hoc, _extends({}, props, {\n      forwardedRef: ref\n    }));\n  });\n  ref.displayName = Component.displayName || Component.name || 'Component';\n  return ref;\n};","import React, { MouseEventHandler } from 'react';\nimport {\n  Grid,\n  IconButton,\n  List,\n  ListItem,\n  ListItemIcon,\n  ListItemText,\n  Radio,\n  Typography,\n  useTheme\n} from '@material-ui/core';\nimport { utcToLocal } from 'ats-utils/src/index';\nimport { useTranslation } from 'react-i18next';\nimport { Theme } from '@material-ui/core/';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Project } from '../../models';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\ninterface IProps {\n  project: IMap<Project>;\n  onClick: MouseEventHandler;\n  isExpanded: boolean;\n  isSelected: boolean;\n  onToggleExpand: (isExpanded: boolean) => void;\n  onSelect: (index: number, value: boolean) => void;\n  selectedIndex: number;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n  row: {\n    cursor: 'pointer',\n    padding: theme.spacing(0, 2),\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    '&:hover': {\n      backgroundColor: theme.palette.action.hover\n    }\n  },\n  projectName: {\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  },\n  list: {\n    paddingLeft: '16px',\n    backgroundColor: '#F7F7F7',\n  }\n}));\nconst ProjectRow = ({\n  project,\n  onClick,\n  isExpanded = false,\n  isSelected = false,\n  onToggleExpand,\n  onSelect,\n  selectedIndex = null,\n}: IProps) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const specs = project.get('specs');\n  const isMaster = project.get('isMaster');\n  return (\n    <div>\n      <Grid\n        container={true}\n        justify='center'\n        className={classes.row}\n        onClick={onClick}\n      >\n        <Radio color='primary' style={{ marginRight: '10px' }} checked={isSelected} />\n        <div style={{ flexGrow: 1 }}>\n          <Grid\n            container={true}\n            justify='space-between'\n            wrap='nowrap'\n          >\n            <Grid style={{ width: 330 }}>\n              <Typography variant='subtitle1' className={classes.projectName} style={{ color: theme.palette.text.primary }}>\n                {project.get('name')}\n              </Typography>\n            </Grid>\n            <Grid>\n              <Typography variant='caption' style={{ color: theme.palette.text.primary }}>\n                {isMaster ? t('addProductToDrawingModal.master') : t('addProductToDrawingModal.project')}\n              </Typography>\n            </Grid>\n          </Grid>\n          <Grid container={true} justify='space-between'>\n            <Typography variant='body2' style={{ fontSize: '13.57px' }}>\n              {`${t('addProductToDrawingModal.lastUpdate')}: ${utcToLocal(project.get('modifiedDate')) || 'N/A'}`}\n            </Typography>\n            {\n              isExpanded ? <IconButton size='small' onClick={(e) => {\n                e.stopPropagation();\n                onToggleExpand(false);\n              }}>\n                <ExpandLessIcon />\n              </IconButton> :\n                <IconButton size='small' onClick={(e) => {\n                  e.stopPropagation();\n                  onToggleExpand(true);\n                }}>\n                  <ExpandMoreIcon />\n                </IconButton>\n            }\n          </Grid>\n        </div>\n      </Grid>\n      {isExpanded ? <List className={classes.list}>\n        <ListItem onClick={() => onSelect(0, selectedIndex === 0 ? false : true)}>\n          <ListItemIcon>\n            <Radio\n              color='primary'\n              checked={selectedIndex === 0}\n            />\n          </ListItemIcon>\n          <ListItemText primaryTypographyProps={{ variant: 'caption' }} primary={t('addProductToDrawingModal.createNewProductGroup')} />\n        </ListItem>\n        {\n          specs.map((spec, index) => {\n            const specId = spec.get('id');\n            const specName = spec.get('name');\n            const checked = selectedIndex === index + 1;\n            return (\n              <ListItem key={specId} onClick={() => onSelect(index + 1, !checked)}>\n                <ListItemIcon>\n                  <Radio\n                    color='primary'\n                    checked={checked}\n                  />\n                </ListItemIcon>\n                <ListItemText style={{ marginRight: '16px' }} primary={specName} primaryTypographyProps={{ variant: 'body2', style: { color: '#000', wordBreak: 'break-all' } }} />\n                <ListItemText\n                  primary={t('addProductToDrawingModal.productGroup')}\n                  primaryTypographyProps={{ variant: 'caption', style: { color: '#000' } }}\n                  style={{ flexGrow: 0, flexShrink: 0 }}\n                />\n              </ListItem>\n            );\n          })\n        }\n      </List> : null}\n    </div>\n  );\n};\n\nexport default ProjectRow;","import React, { useMemo, useState, useEffect, useRef } from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Grid,\n  InputAdornment,\n  TextField,\n  Theme,\n  Typography,\n  useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {\n  AddQuoteToProjectAction,\n  CreateProjectAction,\n  CreateProjectSucceededAction, CreateProjectFromTemplateAction,\n  GetProjectsSucceededAction,\n  LoadingSearchedProjectAction,\n  ProjectFailedAction,\n  QuickSearchProjectsAction,\n  SearchProjectsSucceededAction,\n  SetProjectMasterSavingAllowAction,\n} from '../../modules/ProjectModule/actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectSearchedProjects, makeSelectSearchingProjects } from '../../modules/ProjectModule/selectors';\nimport _ from 'lodash';\nimport { makeStyles } from '@material-ui/styles';\nimport { useTranslation } from 'react-i18next';\nimport ProjectRow from './ProjectRow';\nimport { makeSelectOverlayComponent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { CreateSpecAction, ProductCatalogueCreateDrawingAction } from '../../modules/SpecModule/actions';\nimport { fromJS, List, Map, Set } from 'immutable';\nimport CreateNewProjectModal from '../CreateNewProjectModal';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { Project } from '../../models';\nimport { ProjectTrackerCreateProjectFormVariant } from '../CreateNewProjectModal/constants';\nimport { ADD_PRODUCT_TO_DRAWING_MODAL_ID } from '.';\nimport AddIcon from '@material-ui/icons/Add';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { Mode } from '../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  searchContainer: {\n    width: '100%',\n    flexGrow: 0,\n  },\n  list: {\n    paddingBottom: theme.spacing(6),\n    width: '100%',\n    overflow: 'auto',\n    flexGrow: 1,\n  },\n}));\nconst searchOptions = {\n  limit: 50,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n} as const;\nexport const getSearchFilters = (keyword: string, productUnavailability, productPurchasability) => {\n  const filter: any = {\n    'and': [\n      { // prevent user from altering isAi destinations\n        'isAi': {\n          'eq': false\n        }\n      }\n    ]\n  };\n  if (keyword) {\n    filter.and.push({\n      'name': {\n        'like': keyword\n      }\n    });\n  }\n  if (productPurchasability?.size) {\n    if (productUnavailability?.size) {\n      // find the difference between productPurchasability and productUnavailability\n      const productUnavailabilityIds = productUnavailability.map((country) => country.get('id')).toJS();\n      filter.and.push({\n        'countryId': {\n          'in': productPurchasability.map((country) => country.get('id')).toJS().filter((id) => !productUnavailabilityIds.includes(id))\n        }\n      });\n    } else {\n      filter.and.push({\n        'countryId': {\n          'in': productPurchasability.map((country) => country.get('id')).toJS()\n        }\n      });\n    }\n  }\n\n  return filter;\n};\nconst AddToProject = ({\n  onCancel,\n  isAdding,\n  setIsAdding,\n  AmplitudeTrackOnAddProduct,\n  projectType\n}) => {\n  const [inputValue, setInputValue] = useState('');\n  const [selectionState, setSelectionState] = useState({});\n  const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n  const [selectedProjectId, setSelectedProjectId] = useState(null);\n  const [expandedProjectId, setExpandedProjectId] = useState(null);\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const isLoading = useSelector(makeSelectSearchingProjects());\n  const isModalOpen = useSelector(makeSelectOverlayComponent(ADD_PRODUCT_TO_DRAWING_MODAL_ID)) || false;\n  const data = useSelector(makeSelectSearchedProjects());\n  const { product, includeAlternates, handleAddToDrawing, handleAddToDrawingThenOpenAlternatives, productUnavailability, productPurchasability } = useSelector(makeSelectOverlayComponentProp(ADD_PRODUCT_TO_DRAWING_MODAL_ID));\n\n  const quickSearchProjects = (keyword: string) => {\n    dispatch(new QuickSearchProjectsAction({\n      options: searchOptions,\n      filters: getSearchFilters(keyword, productUnavailability, productPurchasability),\n    }));\n  };\n\n  const reset = () => {\n    setSelectionState({});\n    setIsCreateModalOpen(false);\n    setSelectedProjectId(null);\n    setExpandedProjectId(null);\n  };\n  const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n    quickSearchProjects(keyword);\n  }, 500), []);\n\n  const handleInputChange = (e) => {\n    setInputValue(e.target.value);\n    reset();\n    if (e.target.value !== '') {\n      dispatch(new LoadingSearchedProjectAction());\n      debouncedSearch(e.target.value);\n    }\n  };\n\n  const handleClickNew = () => {\n    setIsCreateModalOpen(true);\n  };\n\n  const renderRow = (project) => {\n    const projectId = project.get('id');\n    const specs = project.get('specs');\n    return <ProjectRow\n      key={projectId}\n      selectedIndex={selectionState[projectId]}\n      onClick={() => {\n        if (selectedProjectId !== projectId) {\n          setSelectedProjectId(projectId);\n          setExpandedProjectId(projectId);\n          if (specs.count() === 0 && selectionState[projectId] !== 0) {\n            // preselect createNewSpec\n            setSelectionState((prevState) => ({\n              ...prevState,\n              [projectId]: 0\n            }));\n          }\n        } else {\n          if (expandedProjectId === projectId) {\n            setExpandedProjectId(null);\n          } else {\n            setExpandedProjectId(projectId);\n          }\n        }\n      }}\n      isExpanded={expandedProjectId === projectId}\n      onToggleExpand={(value) => {\n        if (value) {\n          setExpandedProjectId(projectId);\n        } else {\n          setExpandedProjectId(null);\n        }\n      }}\n      isSelected={selectedProjectId === projectId}\n      onSelect={(index, isSelected) => {\n        if (selectedProjectId !== projectId) {\n          setSelectedProjectId(projectId);\n        }\n        if (isSelected) {\n          // select an item\n          setSelectionState((prevState) => ({\n            ...prevState,\n            [projectId]: index\n          }));\n        } else {\n          // unselect an item\n          setSelectionState((prevState) => ({\n            ...prevState,\n            [projectId]: null\n          }));\n        }\n      }}\n      project={project}\n    />;\n  };\n\n  const addToSpec = (projectId, specId) => {\n    dispatch(new ProductCatalogueCreateDrawingAction({\n      specId,\n      specType: 'project',\n      projectId, // get all specs in the project, so when back to project, we have every specs data\n      onSuccess: () => {\n        setIsAdding(false);\n        onCancel();\n        if (includeAlternates) {\n          handleAddToDrawingThenOpenAlternatives(product, 0);\n        } else {\n          handleAddToDrawing(product);\n        }\n      }\n    }));\n  };\n\n  const handleClickAddButton = () => {\n    setIsAdding(true);\n    const project =  data?.find((_project) => _project.get('id') === selectedProjectId);\n    const createNewSpec = selectionState[selectedProjectId] === 0;\n    AmplitudeTrackOnAddProduct(createNewSpec ? 'Existing Project - New Product Group' : 'Existing Project - Existing Product Group', {destinationProjectId: selectedProjectId});\n    if (createNewSpec) {\n      dispatch(new CreateSpecAction({\n        projectId: selectedProjectId,\n        spec: Map({name: t('addProductToDrawingModal.newProductGroup')}), // default spec name\n        onSuccess: (specId) => {\n          addToSpec(selectedProjectId, specId);\n        }\n      }));\n    } else {\n      const specs = project?.get('specs');\n      const selectedExistingSpec = specs?.filter((spec, index) => selectionState[selectedProjectId] === index + 1).get(0);\n      const specId = selectedExistingSpec?.get('id');\n      addToSpec(selectedProjectId, specId);\n    }\n  };\n\n  useEffect(() => {\n    if (data?.count()) {\n      dispatch(new SearchProjectsSucceededAction({ projects: List(), count: 0, hasNextPage: false }));\n    }\n  }, []);\n\n  useEffect(() => {\n    if (projectType === Mode.project && isModalOpen) {\n      dispatch(new LoadingSearchedProjectAction());\n      quickSearchProjects('');\n    }\n  }, [projectType, isModalOpen]);\n\n  return (\n    <>\n      <Grid container={true} item={true} className={classes.searchContainer} justify='space-between'>\n        <TextField\n          autoFocus={true}\n          value={inputValue}\n          onChange={handleInputChange}\n          disabled={isAdding}\n          placeholder={t('addProductToDrawingModal.enterYourSearch')}\n          InputProps={{\n            startAdornment: <InputAdornment position='start'>\n              <SearchIcon style={{ color: theme.palette.grey[600] }} />\n            </InputAdornment>,\n          }}\n          style={{flex: '1 0 70%', paddingRight: 24}}\n        />\n        <Button\n          variant='outlined'\n          color='primary'\n          onClick={handleClickNew}\n          startIcon={<AddIcon />}\n          style={{ padding: '5px 24px' }}\n          disabled={isAdding}\n        >{t('formButtons.new')}</Button>\n      </Grid>\n      <Grid container={true} alignItems='center' wrap='nowrap' style={{ paddingTop: 4, flexGrow: 0 }}>\n        <WarningIcon style={{color: theme.palette.warning.main, margin: 4}} />\n        <Typography variant='caption' color='textPrimary'>{t('addProductToDrawingModal.projectSearchWarning')}</Typography>\n      </Grid>\n      <Grid\n        container={true}\n        direction='column'\n        justify='center'\n        alignItems='center'\n        className={classes.list}\n      >\n        {\n          isLoading || isAdding ? <Grid container={true} direction='column' alignItems='center'>\n            <Typography variant='h6'>\n              {isAdding ? t('addProductToDrawingModal.addingProduct') : isLoading ? t('addProductToDrawingModal.searching') : null}\n            </Typography>\n            <CircularProgress color='primary' />\n          </Grid>\n            : (data.count() > 0)\n              ? <div style={{ overflow: 'auto', width: '100%', marginTop: '25px', minHeight: '100%' }}>\n                {data.map((project) => {\n                  return renderRow(project);\n                })}\n              </div>\n              : <React.Fragment>\n                <Typography variant='h6'>\n                  {t('addProductToDrawingModal.noResults')}\n                </Typography>\n                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                  {t('addProductToDrawingModal.cantFind')}\n                </Typography>\n              </React.Fragment>\n        }\n      </Grid>\n      <Grid container={true} justify='flex-end' style={{ flexGrow: 0 }}>\n        <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }} disabled={isAdding}>{t('formButtons.cancel')}</Button>\n        <Button\n          variant='contained'\n          color='primary'\n          onClick={handleClickAddButton}\n          disabled={selectedProjectId === null || (!selectionState[selectedProjectId] && selectionState[selectedProjectId] !== 0 ) || isAdding}\n          style={{ padding: '6px 32px' }}\n        >\n          {t('formButtons.add')}\n        </Button>\n      </Grid>\n      <CreateNewProjectModal\n        variantSet={Set([ProjectTrackerCreateProjectFormVariant.WITH_TEMPLATE_SELECTION])}\n        enabledCountryIds={productPurchasability?.map((country) => country.get('id')).toJS()}\n        filterOutCountryIds={productUnavailability?.map((country) => country.get('id')).toJS()}\n        toggle={(open) => () => {\n          setIsCreateModalOpen(open);\n        }}\n        isTestProject={false}\n        open={isCreateModalOpen}\n        onClose={() => {\n          setIsCreateModalOpen(false);\n        }}\n        onSubmit={({ values, projectId, projectValues }) => {\n          const selectedDrawings = values?.get('selectedDrawings') ?? [];\n          const keyedDrawings = {};\n          selectedDrawings.forEach(({ specId, id: drawingId }) => {\n            if (keyedDrawings[specId]) {\n              keyedDrawings[specId].push(drawingId);\n            } else {\n              keyedDrawings[specId] = [drawingId];\n            }\n          });\n          const specDrawingsFormatted: Array<{ id: number, drawings: Array<{ id: number }> }> = [];\n          // tslint:disable-next-line:forin\n          for (const key in keyedDrawings) {\n            const drawings = keyedDrawings[key];\n            specDrawingsFormatted.push({\n              id: parseInt(key, 10),\n              drawings: drawings.map((drawingId) => ({ id: drawingId })),\n            });\n          }\n          const createProjectFromTemplate = selectedDrawings.length > 0;\n          const onSuccess = (responseData: List<IMap<Partial<Project>>> | IMap<Partial<Project>>, quoteId) => {\n            let newProject;\n            if (List.isList(responseData)) {\n              newProject = responseData.first();\n            } else {\n              newProject = responseData;\n            }\n            const newProjectId = newProject.get('id');\n            dispatch(new GetProjectsSucceededAction(fromJS([newProject])));\n            if (quoteId) {\n              dispatch(new AddQuoteToProjectAction({ projectId: newProjectId, quoteId }));\n            } else {\n              dispatch(new CreateProjectSucceededAction());\n            }\n            // after successful project creation, add product to spec\n            setIsCreateModalOpen(false);\n            setIsAdding(true);\n            AmplitudeTrackOnAddProduct('New Project', {destinationProjecId: newProjectId});\n            if (createProjectFromTemplate) {\n              // we create a new spec then add product\n              dispatch(new CreateSpecAction({\n                projectId: newProjectId,\n                spec: Map({name: newProject.get('name')}), // default spec name\n                onSuccess: (newSpecId) => {\n                  addToSpec(newProjectId, newSpecId);\n                }\n              }));\n            } else {\n              // if not from template the new project has a default spec empty which we can put a new drawing in\n              const newSpec = newProject.get('specs').first();\n              const newSpecId = newSpec.get('id');\n              addToSpec(newProjectId, newSpecId);\n            }\n          };\n          const onFailed = (err) => {\n            dispatch(new ProjectFailedAction({ err }));\n            dispatch(new SetProjectMasterSavingAllowAction({ allow: true }));\n          };\n          if (createProjectFromTemplate) {\n            // create project with template\n            dispatch(new CreateProjectFromTemplateAction({\n              project: projectValues,\n              copyInstructions: [\n                {\n                  sourceSpecs: specDrawingsFormatted,\n                  destinationType: 'standard',\n                  sourceType: 'master_template'\n                }\n              ],\n              onSuccess,\n              onFailed\n            }));\n          } else {\n            // create project without template\n            dispatch(new CreateProjectAction({\n              project: projectValues,\n              onSuccess,\n              onFailed\n            }));\n          }\n        }}\n      />\n    </>\n  );\n};\n\nexport default AddToProject;","import React, { MouseEventHandler } from 'react';\nimport { Grid, Radio, Typography, useTheme } from '@material-ui/core';\nimport { utcToLocal } from 'ats-utils/src/index';\nimport { useTranslation } from 'react-i18next';\nimport { Theme } from '@material-ui/core/';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Spec } from '../../models';\nimport { IMap } from 'ats-utils/src/Interfaces';\n\ninterface IProps {\n  index: number;\n  style: React.CSSProperties;\n  spec: IMap<Spec>;\n  onClick: MouseEventHandler;\n  selected: boolean;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n  row: {\n    cursor: 'pointer',\n    padding: theme.spacing(0, 2),\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    '&:hover': {\n      backgroundColor: theme.palette.action.hover\n    }\n  },\n  specName: {\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  },\n}));\nconst SpecificationRow = ({ spec, style, onClick, selected = false }: IProps) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  return (\n    <Grid\n      container={true}\n      justify='center'\n      className={classes.row}\n      style={style}\n      onClick={onClick}\n      wrap='nowrap'\n    >\n      <Radio color='primary' checked={selected} style={{ marginRight: '10px' }} />\n      <div style={{ flexGrow: 1 }}>\n        <Grid\n          container={true}\n          justify='space-between'\n          wrap='nowrap'\n        >\n          <Grid style={{ width: 300 }}>\n            <Typography variant='subtitle1' className={classes.specName} style={{ color: theme.palette.text.primary }}>\n              {spec.get('name')}\n            </Typography>\n          </Grid>\n          <Grid>\n            <Typography variant='caption' style={{ color: theme.palette.text.primary }}>\n              {t('addProductToDrawingModal.quickSpec')}\n            </Typography>\n          </Grid>\n        </Grid>\n        <Grid\n          container={true}\n          justify='flex-start'\n          wrap='nowrap'\n        >\n          <Grid>\n            <Typography variant='body2' style={{ fontSize: '13.57px' }}>\n              {`${t('addProductToDrawingModal.lastUpdate')}: ${utcToLocal(spec.get('modifiedDate')) || 'N/A'}`}\n            </Typography>\n          </Grid>\n        </Grid>\n      </div>\n    </Grid>\n  );\n};\n\nexport default SpecificationRow;","import React, { useMemo, useState, useEffect, useRef } from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Grid,\n  InputAdornment,\n  TextField,\n  Theme,\n  Typography,\n  useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n  CreateSpecAction,\n  LoadingSearchedSpecAction,\n  SearchSpecsSucceededAction,\n  SpecToolSpecListSearchSpecsAction,\n  ProductCatalogueCreateDrawingAction\n} from '../../modules/SpecModule/actions';\nimport {\n  makeSelectSearchedSpecs,\n  makeSelectSearchingSpecs\n} from '../../modules/SpecModule/selectors';\nimport _ from 'lodash';\nimport { makeStyles } from '@material-ui/styles';\nimport { useTranslation } from 'react-i18next';\nimport SpecificationRow from './SpecificationRow';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { List } from 'immutable';\nimport CreateNewSpecModal from '../CreateNewSpecModal';\nimport { FixedSizeList } from 'react-window';\nimport { ADD_PRODUCT_TO_DRAWING_MODAL_ID, MODAL_WIDTH } from './index';\nimport AddIcon from '@material-ui/icons/Add';\nimport { GUEST_USER_ID, Mode } from '../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  searchContainer: {\n    width: '100%',\n    flexGrow: 0,\n  },\n  row: {\n    cursor: 'pointer',\n    padding: theme.spacing(0, 2),\n    borderBottom: `1px solid ${theme.palette.divider}`,\n    '&:hover': {\n      backgroundColor: theme.palette.action.hover\n    }\n  },\n  list: {\n    padding: theme.spacing(3, 0, 6),\n    width: '100%',\n    overflow: 'auto',\n    flexGrow: 1,\n  },\n}));\nconst searchOptions = {\n  limit: 50,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n} as const;\nconst getSearchFilters = (keyword: string) => ({\n  'and': [\n    {\n      'name': {\n        'like': keyword\n      }\n    },\n    { // prevent user from altering isAi destinations\n      'isAi': {\n        'eq': false\n      }\n    },\n    {\n      'projectId': {\n        'eq': null,\n      }\n    },\n    { 'createdBy.user.id': { neq: GUEST_USER_ID } }\n  ]\n});\nconst AddToSpec = ({\n  onCancel,\n  isAdding,\n  setIsAdding,\n  AmplitudeTrackOnAddProduct,\n  projectType\n}) => {\n  const [inputValue, setInputValue] = useState('');\n  const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const isLoading = useSelector(makeSelectSearchingSpecs());\n  const data = useSelector(makeSelectSearchedSpecs());\n  const { product, includeAlternates, handleAddToDrawing, handleAddToDrawingThenOpenAlternatives } = useSelector(makeSelectOverlayComponentProp(ADD_PRODUCT_TO_DRAWING_MODAL_ID));\n  const [selectedItemIndex, setSelectedItemIndex] = useState(null);\n\n  const quickSearchSpecs = (keyword: string) => {\n    dispatch(new SpecToolSpecListSearchSpecsAction({\n      options: searchOptions,\n      filters: getSearchFilters(keyword)\n    }));\n  };\n  const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n    quickSearchSpecs(keyword);\n  }, 500), []);\n  const handleInputChange = (e) => {\n    setInputValue(e.target.value);\n    setSelectedItemIndex(null);\n    if (e.target.value !== '') {\n      dispatch(new LoadingSearchedSpecAction());\n      debouncedSearch(e.target.value);\n    }\n  };\n  const handleClickNew = () => {\n    setIsCreateModalOpen(true);\n  };\n  const addToSpec = (specId) => {\n    dispatch(new ProductCatalogueCreateDrawingAction({\n      specId,\n      specType: 'spec',\n      onSuccess: () => {\n        setIsAdding(false);\n        onCancel();\n        if (includeAlternates) {\n          handleAddToDrawingThenOpenAlternatives(product, 0);\n        } else {\n          handleAddToDrawing(product);\n        }\n      }\n    }));\n  };\n  const renderRow = ({ index: itemIndex, style }) => {\n    const spec = data.get(itemIndex);\n    return <SpecificationRow\n      index={itemIndex}\n      style={style}\n      onClick={() => {\n        setSelectedItemIndex(itemIndex);\n      }}\n      selected={itemIndex === selectedItemIndex}\n      spec={spec}\n    />;\n  };\n  const onAddButtonClicked = () => {\n    const spec = data.get(selectedItemIndex);\n    const specId = spec.get('id');\n    setIsAdding(true);\n    addToSpec(specId);\n    AmplitudeTrackOnAddProduct('Existing Spec', {destinationSpecId: specId});\n  };\n  useEffect(() => {\n    if (data?.count()) {\n      dispatch(new SearchSpecsSucceededAction({ specs: List(), count: 0, hasNextPage: false }));\n    }\n  }, []);\n\n  useEffect(() => {\n    if (projectType === Mode.spec) {\n      dispatch(new LoadingSearchedSpecAction());\n      quickSearchSpecs('');\n    }\n  }, [projectType]);\n\n  return (\n    <>\n      <Grid container={true} item={true} className={classes.searchContainer} justify='space-between'>\n        <TextField\n          autoFocus={true}\n          value={inputValue}\n          onChange={handleInputChange}\n          disabled={isAdding}\n          placeholder={t('addProductToDrawingModal.enterYourSearch')}\n          InputProps={{\n            startAdornment: <InputAdornment position='start'>\n              <SearchIcon style={{ color: theme.palette.grey[600] }} />\n            </InputAdornment>,\n          }}\n          style={{flex: '1 0 70%', paddingRight: 24}}\n        />\n        <Button\n          variant='outlined'\n          color='primary'\n          onClick={handleClickNew}\n          startIcon={<AddIcon />}\n          style={{ padding: '5px 24px' }}\n          disabled={isAdding}\n        >{t('formButtons.new')}</Button>\n      </Grid>\n      <Grid\n        container={true}\n        direction='column'\n        justify='center'\n        alignItems='center'\n        className={classes.list}\n      >\n        {\n          isLoading || isAdding ? <Grid container={true} direction='column' alignItems='center'>\n            <Typography variant='h6'>\n              {isAdding ? t('addProductToDrawingModal.addingProduct') : isLoading ? t('addProductToDrawingModal.searching') : null}\n            </Typography>\n            <CircularProgress color='primary' />\n          </Grid>\n            : (data.count() > 0)\n              ? <FixedSizeList\n                height={400}\n                itemCount={data.size}\n                itemSize={54}\n                width={MODAL_WIDTH - 48}\n              >\n                {renderRow}\n              </FixedSizeList>\n              : <React.Fragment>\n                <Typography variant='h6'>\n                  {t('addProductToDrawingModal.noResults')}\n                </Typography>\n                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                  {t('addProductToDrawingModal.cantFind')}\n                </Typography>\n              </React.Fragment>\n        }\n      </Grid>\n      <Grid container={true} justify='flex-end' style={{ flexGrow: 0 }}>\n        <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }} disabled={isAdding}>{t('formButtons.cancel')}</Button>\n        <Button\n          variant='contained'\n          color='primary'\n          onClick={onAddButtonClicked}\n          disabled={!Number.isSafeInteger(selectedItemIndex) || isAdding}\n          style={{ padding: '6px 32px' }}\n        >\n          {t('formButtons.add')}\n        </Button>\n      </Grid>\n      <CreateNewSpecModal\n        open={isCreateModalOpen}\n        onSubmit={(values, projectIdForCreatingSpec) => {\n          dispatch(new CreateSpecAction({\n            projectId: projectIdForCreatingSpec,\n            spec: values,\n            onSuccess: (specId) => {\n              setIsCreateModalOpen(false);\n              setIsAdding(true);\n              addToSpec(specId);\n              AmplitudeTrackOnAddProduct('New Spec', {destinationSpecId: specId});\n            }\n          }));\n        }}\n        toggle={(open) => () => {\n          setIsCreateModalOpen(open);\n        }}\n      />\n    </>\n  );\n};\n\nexport default AddToSpec;","import React, { useMemo, useState, useEffect, useRef } from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Grid,\n  InputAdornment,\n  TextField,\n  Theme,\n  Typography,\n  useTheme\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {\n  CreateMasterProjectAction,\n  CreateMasterProjectFromTemplateAction,\n  LoadingSearchedMastersAction,\n  SearchMastersAction,\n  SearchMastersSucceededAction,\n} from '../../modules/ProjectModule/actions';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectSearchedMasters, makeSelectSearchingMasters } from '../../modules/ProjectModule/selectors';\nimport _ from 'lodash';\nimport { makeStyles } from '@material-ui/styles';\nimport { useTranslation } from 'react-i18next';\nimport { CreateMasterSpecAction, ProductCatalogueCreateDrawingAction } from '../../modules/SpecModule/actions';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { List, Map } from 'immutable';\nimport CreateNewMasterFromTemplateModal from '../CreateNewMasterFromTemplateModal';\nimport ProjectRow from './ProjectRow';\nimport { ADD_PRODUCT_TO_DRAWING_MODAL_ID } from '.';\nimport AddIcon from '@material-ui/icons/Add';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { Mode } from '../../constants';\nimport { getSearchFilters } from './AddToProject';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  searchContainer: {\n    width: '100%',\n    flexGrow: 0,\n  },\n  list: {\n    paddingBottom: theme.spacing(6),\n    width: '100%',\n    overflow: 'auto',\n    flexGrow: 1,\n  },\n}));\nconst searchOptions = {\n  limit: 50,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n} as const;\n\nconst AddToMaster = ({\n  onCancel,\n  isAdding,\n  setIsAdding,\n  AmplitudeTrackOnAddProduct,\n  projectType\n}) => {\n  const [inputValue, setInputValue] = useState('');\n  const [selectionState, setSelectionState] = useState({});\n  const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n  const [selectedMasterId, setSelectedMasterId] = useState(null);\n  const [expandedMasterId, setExpandedMasterId] = useState(null);\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const isLoading = useSelector(makeSelectSearchingMasters());\n  const data = useSelector(makeSelectSearchedMasters());\n  const { product, includeAlternates, handleAddToDrawing, handleAddToDrawingThenOpenAlternatives, productUnavailability, productPurchasability } = useSelector(makeSelectOverlayComponentProp(ADD_PRODUCT_TO_DRAWING_MODAL_ID));\n\n  const quickSearchMaster = (keyword: string) => {\n    dispatch(new SearchMastersAction({\n      options: searchOptions,\n      filters: getSearchFilters(keyword, productUnavailability, productPurchasability)\n    }));\n  };\n  const reset = () => {\n    setSelectionState({});\n    setIsCreateModalOpen(false);\n    setSelectedMasterId(null);\n    setExpandedMasterId(null);\n  };\n  const debouncedSearch = useMemo(() => _.debounce((keyword: string) => {\n    quickSearchMaster(keyword);\n  }, 500), []);\n  const handleInputChange = (e) => {\n    setInputValue(e.target.value);\n    reset();\n    if (e.target.value !== '') {\n      dispatch(new LoadingSearchedMastersAction());\n      debouncedSearch(e.target.value);\n    }\n  };\n  const handleClickNew = () => {\n    setIsCreateModalOpen(true);\n  };\n  const addToMasterSpec = (masterId, specId) => {\n    dispatch(new ProductCatalogueCreateDrawingAction({\n      specId,\n      specType: 'master',\n      projectId: masterId, // get all specs in the project, so when back to project, we have every specs data\n      onSuccess: () => {\n        setIsAdding(false);\n        onCancel();\n        if (includeAlternates) {\n          handleAddToDrawingThenOpenAlternatives(product, 0);\n        } else {\n          handleAddToDrawing(product);\n        }\n      }\n    }));\n  };\n  const renderRow = (master) => {\n    const masterId = master.get('id');\n    const specs = master.get('specs');\n    return <ProjectRow\n      key={masterId}\n      selectedIndex={selectionState[masterId]}\n      onClick={() => {\n        if (selectedMasterId !== masterId) {\n          setSelectedMasterId(masterId);\n          setExpandedMasterId(masterId);\n          if (specs.count() === 0 && selectionState[masterId] !== 0) {\n            // preselect createNewSpec\n            setSelectionState((prevState) => ({\n              ...prevState,\n              [masterId]: 0\n            }));\n          }\n        } else {\n          if (expandedMasterId === masterId) {\n            setExpandedMasterId(null);\n          } else {\n            setExpandedMasterId(masterId);\n          }\n        }\n      }}\n      isExpanded={expandedMasterId === masterId}\n      onToggleExpand={(value) => {\n        if (value) {\n          setExpandedMasterId(masterId);\n        } else {\n          setExpandedMasterId(null);\n        }\n      }}\n      isSelected={selectedMasterId === masterId}\n      onSelect={(index, isSelected) => {\n        if (selectedMasterId !== masterId) {\n          setSelectedMasterId(masterId);\n        }\n        if (isSelected) {\n          // select an item\n          setSelectionState((prevState) => ({\n            ...prevState,\n            [masterId]: index\n          }));\n        } else {\n          // unselect an item\n          setSelectionState((prevState) => ({\n            ...prevState,\n            [masterId]: null\n          }));\n        }\n      }}\n      project={master}\n    />;\n  };\n  const handleClickAddButton = () => {\n    const master = data?.find((_master) => _master.get('id') === selectedMasterId);\n    const createNewSpec = selectionState[selectedMasterId] === 0;\n    setIsAdding(true);\n    AmplitudeTrackOnAddProduct(createNewSpec ? 'Existing Master - New Product Group' : 'Existing Master - Existing Product Group', {destinationMasterId: selectedMasterId});\n    if (createNewSpec) {\n      dispatch(new CreateMasterSpecAction({\n        projectId: selectedMasterId,\n        spec: Map({name: t('addProductToDrawingModal.newProductGroup')}), // default spec name\n        onSuccess: (specId) => {\n          addToMasterSpec(selectedMasterId, specId);\n        }\n      }));\n    } else {\n      const specs = master?.get('specs');\n      const selectedExistingSpec = specs?.filter((spec, index) => selectionState[selectedMasterId] === index + 1).get(0);\n      const specId = selectedExistingSpec?.get('id');\n      addToMasterSpec(selectedMasterId, specId);\n    }\n  };\n\n  useEffect(() => {\n    if (data?.count()) {\n      dispatch(new SearchMastersSucceededAction({ masters: List(), count: 0, hasNextPage: false }));\n    }\n  }, []);\n\n  useEffect(() => {\n    if (projectType === Mode.master) {\n      dispatch(new LoadingSearchedMastersAction());\n      quickSearchMaster('');\n    }\n  }, [projectType]);\n\n  return (\n    <>\n      <Grid container={true} item={true} className={classes.searchContainer} justify='space-between'>\n        <TextField\n          autoFocus={true}\n          value={inputValue}\n          onChange={handleInputChange}\n          disabled={isAdding}\n          placeholder={t('addProductToDrawingModal.enterYourSearch')}\n          InputProps={{\n            startAdornment: <InputAdornment position='start'>\n              <SearchIcon style={{ color: theme.palette.grey[600] }} />\n            </InputAdornment>,\n          }}\n          style={{flex: '1 0 70%', paddingRight: 24}}\n        />\n        <Button\n          variant='outlined'\n          color='primary'\n          onClick={handleClickNew}\n          startIcon={<AddIcon />}\n          style={{ padding: '5px 24px' }}\n          disabled={isAdding}\n        >{t('formButtons.new')}</Button>\n      </Grid>\n      <Grid container={true} alignItems='center' wrap='nowrap' style={{paddingTop: 4, flexGrow: 0 }}>\n        <WarningIcon style={{color: theme.palette.warning.main, margin: 4}} />\n        <Typography variant='caption' color='textPrimary'>{t('addProductToDrawingModal.projectSearchWarning')}</Typography>\n      </Grid>\n      <Grid\n        container={true}\n        direction='column'\n        justify='center'\n        alignItems='center'\n        className={classes.list}\n      >\n        {\n          isLoading || isAdding ? <Grid container={true} direction='column' alignItems='center'>\n            <Typography variant='h6'>\n              {isAdding ? t('addProductToDrawingModal.addingProduct') : isLoading ? t('addProductToDrawingModal.searching') : null}\n            </Typography>\n            <CircularProgress color='primary' />\n          </Grid>\n            : (data.count() > 0)\n              ? <div style={{ overflow: 'auto', width: '100%', marginTop: '25px', minHeight: '100%' }}>\n                {data.map((master) => {\n                  return renderRow(master);\n                })}\n              </div>\n              : <React.Fragment>\n                <Typography variant='h6'>\n                  {t('addProductToDrawingModal.noResults')}\n                </Typography>\n                <Typography variant='body1' style={{ color: theme.palette.text.primary, fontSize: '15.51px' }}>\n                  {t('addProductToDrawingModal.cantFind')}\n                </Typography>\n              </React.Fragment>\n        }\n      </Grid>\n      <Grid container={true} justify='flex-end' style={{ flexGrow: 0 }}>\n        <Button color='primary' onClick={onCancel} style={{ marginRight: 16 }} disabled={isAdding}>{t('formButtons.cancel')}</Button>\n        <Button\n          variant='contained'\n          color='primary'\n          onClick={handleClickAddButton}\n          disabled={selectedMasterId === null || (!selectionState[selectedMasterId] && selectionState[selectedMasterId] !== 0 ) || isAdding}\n          style={{ padding: '6px 32px' }}\n        >\n          {t('formButtons.add')}\n        </Button>\n      </Grid>\n      <CreateNewMasterFromTemplateModal\n        open={isCreateModalOpen}\n        enabledCountryIds={productPurchasability?.map((country) => country.get('id')).toJS()}\n        filterOutCountryIds={productUnavailability?.map((country) => country.get('id')).toJS()}\n        onSubmit={(values, wholeTemplateSelected) => {\n          const name = values?.get('name');\n          const collaborators = values?.get('collaborators');\n          const selectedTemplateId = values?.getIn(['selectedDrawings', 0, 'templateId']);\n          const selectedDrawings = values?.get('selectedDrawings') ?? [];\n          const keyedDrawings = {};\n          selectedDrawings.forEach(({ specId, id: drawingId }) => {\n            if (keyedDrawings[specId]) {\n              keyedDrawings[specId].push(drawingId);\n            } else {\n              keyedDrawings[specId] = [drawingId];\n            }\n          });\n          const specDrawingsFormatted = [];\n          // tslint:disable-next-line:forin\n          for (const key in keyedDrawings) {\n            const drawings = keyedDrawings[key];\n            specDrawingsFormatted.push({\n              id: key,\n              drawings: drawings.map((drawingId) => ({ id: drawingId }))\n            });\n          }\n          const payload = {\n            masterTemplateId: selectedTemplateId,\n            master: {\n              building: values?.get('building'),\n              location: values?.get('location'),\n              name,\n              collaborators\n            },\n          } as any;\n          const createMasterFromTemplate = selectedDrawings.length > 0;\n          // tslint:disable-next-line:no-shadowed-variable\n          const onSuccess = (resolve) => (masters) => {\n            const newMaster = masters.get(0);\n            const newMasterId = newMaster.get('id');\n            setIsCreateModalOpen(false);\n            setIsAdding(true);\n            AmplitudeTrackOnAddProduct('New Master', {destinationMasterId: newMasterId});\n            if (createMasterFromTemplate) {\n              // when add to a master created from a template, create a new spec then new drawing then add product\n              dispatch(new CreateMasterSpecAction({\n                projectId: newMasterId,\n                spec: Map({name: newMaster.get('name')}), // default spec name\n                onSuccess: (newSpecId) => {\n                  addToMasterSpec(newMasterId, newSpecId);\n                }\n              }));\n            } else {\n              // when add to a master not created from a template, there will be an blank spec created and we will use this blank spec\n              // then create drawing to this spec and add product\n              const newSpecId = newMaster.getIn(['specs', 0, 'id']);\n              addToMasterSpec(newMasterId, newSpecId);\n            }\n            resolve();\n          };\n          if (createMasterFromTemplate) { // create master from template\n            payload.copyInstructions = { specs: specDrawingsFormatted };\n            payload.allSelected = wholeTemplateSelected;\n            return new Promise((resolve, reject) => {\n              dispatch(new CreateMasterProjectFromTemplateAction({\n                ...payload,\n                onSuccess: onSuccess(resolve),\n                onFailed: () => reject()\n              }));\n            });\n          } else { // create master without template\n            return new Promise((resolve, reject) => {\n              dispatch(new CreateMasterProjectAction({\n                master: {\n                  name,\n                  location: values?.get('location'),\n                  building: values?.get('building'),\n                  collaborators,\n                },\n                onSuccess: onSuccess(resolve),\n                onFailed: () => reject()\n              }));\n            });\n          }\n        }}\n        onClose={() => {\n          setIsCreateModalOpen(false);\n        }}\n      />\n    </>\n  );\n};\n\nexport default AddToMaster;","import React, { useEffect } from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Typography,\n  WithTheme,\n  RadioGroup,\n  FormControlLabel,\n  Radio,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { ControlledModal } from '../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { AMPLITUDE_EVENT, Mode } from '../../constants';\nimport AddToProject from './AddToProject';\nimport AddToSpec from './AddToSpec';\nimport AddToMaster from './AddToMaster';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { makeSelectUserCanManageMasters } from '../../modules/AtsModule/selectors';\n\nexport const ADD_PRODUCT_TO_DRAWING_MODAL_ID = 'ADD_PRODUCT_TO_DRAWING_MODAL';\nexport const MODAL_WIDTH = 640;\ninterface IAddProductToDrawingModalComponentProps {\n}\n\ninterface IAddProductToDrawingModalProps extends IAddProductToDrawingModalComponentProps {\n  overlayProps: { [key: string]: any };\n  closeDialog: () => void;\n}\n\ntype IAddProductToDrawingModal = IAddProductToDrawingModalProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & WithTheme & WithAmplitudeData;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: MODAL_WIDTH,\n    maxWidth: 'initial',\n    height: 700,\n  },\n  innerContainer: {\n    padding: theme.spacing(2, 3),\n    height: '100%',\n  },\n  section: {\n    paddingBottom: theme.spacing(2)\n  },\n  groupContainer: {\n    overflowY: 'auto',\n    width: '100%',\n    height: '75%',\n    paddingBottom: theme.spacing(2)\n  },\n  progressContainer: {\n    display: 'flex',\n    height: '100%',\n    alignSelf: 'center',\n    alignItems: 'center',\n  },\n  radioGroup: {\n    width: '100%',\n    justifyContent: 'flex-start',\n    alignItems: 'center'\n  },\n  ctaButton: {\n    padding: '6px 32px'\n  },\n  cancel: {\n    marginRight: theme.spacing(4)\n  },\n  divider: {\n    margin: theme.spacing(2, 0)\n  },\n  ctaContainer: {\n    bottom: 0,\n    padding: theme.spacing(2, 3),\n    backgroundColor: 'white'\n  }\n});\n\nconst AddProductToDrawingModal = (props: IAddProductToDrawingModal) => {\n  const {\n    theme,\n    classes,\n    overlayProps,\n    closeDialog,\n    amplitudeData,\n    t\n  } = props;\n\n  const {\n    product,\n  } = overlayProps;\n\n  const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n\n  // clear props on componentUnmount\n  useEffect(() => {\n    return closeDialog;\n  }, []);\n\n  useEffect(() => {\n    setProjectType(Mode.project);\n  }, []);\n\n  // set to project radio button when modal closes\n  useEffect(() => {\n    if (!product) {\n      setProjectType(Mode.project);\n    }\n  }, [product]);\n\n  const [projectType, setProjectType] = React.useState('');\n  const [isAdding, setIsAdding] = React.useState(false);\n\n  const AmplitudeTrackOnAddProduct = (destinationType: string, destinationId: object) => {\n    amplitude.logEvent(AMPLITUDE_EVENT.productCatalogAddProduct, amplitudeData({\n      productDestination: destinationType,\n      categoryId: product.get('category'),\n      categoryName: product.get('categoryName'),\n      manufacturer: product.get('brand'),\n      productId: product.get('id'),\n      productNumber: product.get('productNumber'),\n      ...destinationId\n    }));\n  };\n\n  return (\n    <ControlledModal\n      localKey={ADD_PRODUCT_TO_DRAWING_MODAL_ID}\n      classes={{\n        paper: classes.root\n      }}\n      onClose={closeDialog}\n    >\n      <Grid container={true} direction='column' className={classes.innerContainer} wrap='nowrap'>\n        <Typography variant='h6' className={classes.section}>\n          {t('addProductToDrawingModal.addProduct')}\n        </Typography>\n        <Grid container={true} className={classes.section}>\n          <RadioGroup\n            aria-label='project-type'\n            name='projectType'\n            row={true}\n            classes={{row: classes.radioGroup}}\n            value={projectType}\n            onChange={(e) => setProjectType(e.target.value)}\n          >\n            <FormControlLabel\n              label={t('addProductToDrawingModal.toProject')}\n              value={Mode.project}\n              control={<Radio color='primary'/>}\n              disabled={isAdding}\n            />\n            <FormControlLabel\n              label={t('addProductToDrawingModal.toQuickSpec')}\n              value={Mode.spec}\n              control={<Radio color='primary'/>}\n              disabled={isAdding}\n            />\n            <Tooltip title={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}>\n              <span>\n                <FormControlLabel\n                  label={t('addProductToDrawingModal.toMaster')}\n                  value={Mode.master}\n                  control={<Radio color='primary'/>}\n                  disabled={isAdding || !userCanManageMasters}\n                />\n              </span>\n            </Tooltip>\n          </RadioGroup>\n        </Grid>\n        {projectType === Mode.project ? <AddToProject onCancel={closeDialog} isAdding={isAdding} setIsAdding={setIsAdding} AmplitudeTrackOnAddProduct={AmplitudeTrackOnAddProduct} projectType={projectType}/> : null}\n        {projectType === Mode.spec ? <AddToSpec onCancel={closeDialog} isAdding={isAdding} setIsAdding={setIsAdding} AmplitudeTrackOnAddProduct={AmplitudeTrackOnAddProduct} projectType={projectType}/> : null}\n        {projectType === Mode.master ? <AddToMaster onCancel={closeDialog} isAdding={isAdding} setIsAdding={setIsAdding} AmplitudeTrackOnAddProduct={AmplitudeTrackOnAddProduct} projectType={projectType}/> : null}\n      </Grid>\n    </ControlledModal>\n  );\n};\n\nconst mapStateToProps = (state: any) => {\n\n  return {\n    ...createStructuredSelector({\n      overlayProps: makeSelectOverlayComponentProp(ADD_PRODUCT_TO_DRAWING_MODAL_ID)\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    closeDialog: () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: ADD_PRODUCT_TO_DRAWING_MODAL_ID,\n        open: false\n      }));\n      dispatch(new SetOverlayComponentPropsAction({\n          id: ADD_PRODUCT_TO_DRAWING_MODAL_ID,\n          props: {}\n      }));\n    },\n  };\n};\n\nexport default compose<React.ComponentClass<IAddProductToDrawingModalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withAmplitudeData,\n)(AddProductToDrawingModal);","import {\n  fromJS,\n  Map,\n  Collection,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  AtsActionTypes,\n  EnvLoadedAction,\n  ChangeSiteAction,\n  ChangeLabelAction,\n  UserLogInAction,\n  HasTokenAction,\n  HasErrorAction,\n  HasServerAction,\n  HasKeyAction,\n  ApiResponseAction,\n  ApiResponseDataAction,\n  ConfigLoadedAction,\n  GetFirmTypesSucceededAction,\n  RegisterUserSucceededAction,\n  UserResetPasswordSucceededAction,\n  VerifyTokenSucceededAction,\n  SetAppLoadingStatusAction,\n  SetBadTokenAction,\n  GetDomainSucceededAction, SetIsVerifyingUserAction,\n  SetUngatedCurrencyAction,\n  AddIntegratedAppConfigAction\n} from './actions';\nimport {\n  Authentication,\n  Error,\n  ListItem,\n  User,\n} from '../../models';\nimport {\n  DEFAULT_SERVER,\n  DEFAULT_SITE,\n  DEFAULT_LABEL,\n} from '../../constants';\nimport AtsStore from '../../store';\nimport {\n  singleOrArray,\n} from 'ats-utils/src';\nimport { fromJSBase } from '../../models/Base';\nimport isFunction from 'lodash/isFunction';\n\nexport interface IAtsReducerState {\n  config: IMap<IConfig>;\n  integratedAppConfigs: Map<string, IMap<IConfig>>;\n  site: string;\n  label: string;\n  init: boolean;\n  env: Map<string, string>;\n  loading: boolean;\n  error: IMap<Error> | boolean;\n  appAuthentication: {\n    [key: string]: Authentication;\n  };\n  authentication: {\n    [key: string]: Authentication;\n  };\n  debug: Collection<string, any>;\n  data: Map<string, any>;\n  dataParams: Map<string, any>;\n  firmTypes: List<IMap<ListItem>>;\n  registeredUser: IMap<User> | boolean;\n  resetPasswordSucceeded: boolean;\n  badToken: boolean;\n  domain: string;\n  ungatedCurrency: string;\n  isVerifyingUser: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  config: {},\n  integratedAppConfigs: {},\n  site: DEFAULT_SITE,\n  label: DEFAULT_LABEL,\n  init: false,\n  env: {},\n  loading: true,\n  error: false,\n  appAuthentication: {},\n  authentication: {},\n  debug: {},\n  data: {},\n  dataParams: {},\n  firmTypes: [],\n  registeredUser: {},\n  resetPasswordSucceeded: false,\n  badToken: false,\n  domain: '',\n  ungatedCurrency: 'USD',\n  isVerifyingUser: true,\n});\n\nconst PERSIST_KEYS: Array<keyof IAtsReducerState> = [\n  'env',\n  'init',\n  'site',\n  'label',\n  'config',\n  'integratedAppConfigs',\n  'firmTypes',\n  'domain',\n  'appAuthentication',\n  // 'authentication',\n  'isVerifyingUser',\n];\n\nexport const reducer = (state: IMapNonRecursive<IAtsReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.INIT: {\n        return state.set('init', true);\n    }\n    case AtsActionTypes.SET_BAD_TOKEN: {\n      const {\n        payload,\n      } = action as SetBadTokenAction;\n      return state.set('badToken', payload);\n    }\n    case AtsActionTypes.USER_RESET_PASSWORD_SUCCEEDED: {\n      const {\n        payload,\n      } = action as UserResetPasswordSucceededAction;\n\n      return state.set('resetPasswordSucceeded', payload);\n    }\n    case AtsActionTypes.ENV_LOADED: {\n      const {\n        payload,\n      } = action as EnvLoadedAction;\n      const {\n        env,\n      } = payload;\n      // atsapi hack\n      AtsStore.get('atsApi').setEnv(env); // dont remove this line unless you know what you are doing !! very important,\n      return state.set('env', fromJS(env));\n    }\n    case AtsActionTypes.CONFIG_LOADED: {\n      const {\n        payload,\n      } = action as ConfigLoadedAction;\n      const {\n        config,\n      } = payload;\n      return state.set('config', config);\n    }\n    case AtsActionTypes.ADD_INTEGRATED_APP_CONFIG: {\n      const {\n        payload,\n      } = action as AddIntegratedAppConfigAction;\n      const {\n        appType,\n        config,\n      } = payload;\n      return state.setIn(['integratedAppConfigs', appType], config);\n    }\n    case AtsActionTypes.CHANGE_SITE: {\n      const {\n        payload,\n      } = action as ChangeSiteAction;\n      const {\n        site,\n      } = payload;\n      return state.set('site', site);\n    }\n    case AtsActionTypes.CHANGE_LABEL: {\n      const {\n        payload,\n      } = action as ChangeLabelAction;\n      const {\n        label,\n      } = payload;\n      return state.set('label', label);\n    }\n    case AtsActionTypes.USER_LOG_IN: {\n      const {\n        payload,\n      } = action as UserLogInAction;\n      const {\n        server = DEFAULT_SERVER,\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.set('init', true); // override init - sometimes redux-localStorage doesn't fire so if they try to login we want to skip init\n        ctx.set('loading', true);\n        ctx.set('error', false);\n        ctx.setIn(['authentication', server], ctx.getIn(['authentication', server]) || new Authentication({}).toImmutable());\n        ctx.setIn(['authentication', server, 'token'], null);\n      });\n    }\n    case AtsActionTypes.SET_APP_TOKEN: {\n      const {\n        payload,\n      } = action as HasTokenAction;\n\n      const {\n        token,\n        server = DEFAULT_SERVER,\n      } = payload;\n      const keyPath = ['appAuthentication', server];\n\n      return state.withMutations((ctx) => {\n        ctx.setIn([...keyPath, 'token'], token);\n        ctx.setIn([...keyPath, 'authenticated_at'], Date.now());\n      });\n    }\n    case AtsActionTypes.APP_LOGGED_IN: {\n      const {\n        payload,\n      } = action as HasTokenAction;\n\n      const {\n        token,\n        server = DEFAULT_SERVER,\n      } = payload;\n      const keyPath = ['appAuthentication', server];\n\n      return state.withMutations((ctx) => {\n        ctx.set('loading', false);\n        ctx.setIn([...keyPath, 'token'], token);\n        ctx.setIn([...keyPath, 'authenticated_at'], Date.now());\n      });\n    }\n    case AtsActionTypes.SET_TOKEN: {\n      const {\n        payload,\n      } = action as HasTokenAction;\n\n      const {\n        token,\n        server = DEFAULT_SERVER,\n      } = payload;\n      const keyPath = ['authentication', server];\n\n      return state.withMutations((ctx) => {\n        ctx.setIn([...keyPath, 'token'], token);\n        ctx.setIn([...keyPath, 'authenticated_at'], Date.now());\n      });\n    }\n    case AtsActionTypes.USER_LOGGED_IN: {\n      const {\n        payload,\n      } = action as HasTokenAction;\n\n      const {\n        token,\n        server = DEFAULT_SERVER,\n        loading = false,\n      } = payload;\n      const keyPath = ['authentication', server];\n\n      return state.withMutations((ctx) => {\n        ctx.set('loading', loading);\n        ctx.setIn([...keyPath, 'token'], token);\n        ctx.setIn([...keyPath, 'authenticated_at'], Date.now());\n        ctx.set('isVerifyingUser', false);\n      });\n    }\n    case AtsActionTypes.USER_RESETPASSWORD_ERROR:\n    case AtsActionTypes.USER_FORGOTPASSWORD_ERROR:\n    case AtsActionTypes.USER_LOGIN_ERROR:\n    case AtsActionTypes.USER_TOKEN_ERROR: {\n      const {\n        payload,\n      } = action as HasErrorAction;\n\n      const {\n        server = DEFAULT_SERVER,\n        error,\n      } = payload;\n      if (server == null || server === DEFAULT_SERVER) { // global error resets everything\n        return INITIAL_STATE.withMutations((ctx) => {\n          ctx.set('error', error);\n          PERSIST_KEYS.forEach((key) => {\n            ctx.set(key, state.get(key));\n          });\n        });\n      }\n      return state.withMutations((ctx) => {\n        ctx.set('loading', false);\n        ctx.set('error', error);\n        ctx.setIn(['authentication', server], null);\n      });\n    }\n    case AtsActionTypes.LOG_IN_AS_AND_REDIRECT:\n    case AtsActionTypes.USER_LOG_OUT: {\n      return state.set('loading', true);\n    }\n    case AtsActionTypes.SET_APP_LOADING_STATUS: {\n      const {\n        payload,\n      } = action as SetAppLoadingStatusAction;\n      return state.withMutations((ctx) => {\n        ctx.set('loading', payload);\n      });\n    }\n    case AtsActionTypes.APP_LOGGED_OUT: {\n      const {\n        payload,\n      } = action as HasServerAction;\n\n      const {\n        server = DEFAULT_SERVER,\n      } = payload;\n      if (server == null || server === DEFAULT_SERVER) { // global logout resets everything\n        return INITIAL_STATE.withMutations((ctx) => {\n          PERSIST_KEYS.forEach((key) => {\n            ctx.set(key, state.get(key));\n          });\n        });\n      }\n      return state.setIn(['appAuthentication', server], null);\n    }\n    case AtsActionTypes.USER_REFRESH_ERROR:\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      const {\n        payload,\n      } = action as HasServerAction;\n\n      const {\n        server = DEFAULT_SERVER,\n        loading = false\n      } = payload;\n      if (server == null || server === DEFAULT_SERVER) { // global logout resets everything\n        return INITIAL_STATE.withMutations((ctx) => {\n          ctx.set('appAuthentication', state.get('appAuthentication'));\n          ctx.set('loading', loading);\n          [...PERSIST_KEYS, 'isVerifyingUser'].forEach((key: keyof IAtsReducerState ) => {\n            ctx.set(key, state.get(key));\n          });\n        });\n      }\n      return state.setIn(['authentication', server], null);\n    }\n    case AtsActionTypes.API_CALL:\n    case AtsActionTypes.ATS_API_CALL:\n      return state.withMutations((ctx) => {\n        const {\n          payload,\n        } = action as HasKeyAction;\n        const {\n          key = ['default'],\n          ...others\n        } = payload;\n        /* tslint:disable */\n        // console.error('ATS MODULE action', action);\n        /* tslint:enable */\n        ctx.set('loading', true);\n        ctx.set('debug', fromJSBase(action, (val) => isFunction(val) ? null : val)); // serializing functions was breaking the localstorage\n        ctx.setIn(['dataParams', ...singleOrArray(key)], others);\n      });\n    case AtsActionTypes.API_RESPONSE: {\n      const {\n        payload,\n      } = action as ApiResponseAction;\n      const {\n        key = [],\n        value,\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.set('loading', false);\n        ctx.set('debug', fromJS(action));\n        ctx.setIn(singleOrArray(key), value);\n      });\n    }\n    case AtsActionTypes.VERIFY_TOKEN_SUCCEEDED: {\n      const {\n        payload\n      } = action as VerifyTokenSucceededAction;\n      const {\n        identity,\n        isGuestToken = false,\n      } = payload;\n      if (isGuestToken) {\n        return state.setIn(['appAuthentication', DEFAULT_SERVER, 'identity'], identity);\n      }\n      return state.setIn(['authentication', DEFAULT_SERVER, 'identity'], identity);\n    }\n    case AtsActionTypes.API_RESPONSE_DATA: {\n      const {\n        payload,\n      } = action as ApiResponseDataAction;\n      const {\n        key,\n        value,\n        resultKey,\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.set('loading', false);\n        ctx.set('debug', fromJS(action));\n        ctx.setIn(['data', ...singleOrArray(key)], value.getIn(singleOrArray(resultKey)));\n      });\n    }\n    case AtsActionTypes.API_RESPONSE_ERROR:  {\n      const {\n        payload,\n      } = action as HasErrorAction;\n\n      const {\n        error,\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.set('loading', false);\n        ctx.set('debug', error);\n      });\n    }\n    case AtsActionTypes.GET_FIRM_TYPES_SUCCEEDED:  {\n      const {\n        payload,\n      } = action as GetFirmTypesSucceededAction;\n\n      return state.set('firmTypes', payload);\n    }\n    case AtsActionTypes.REGISTER_USER_SUCCEEDED: {\n      const {\n        payload,\n      } = action as RegisterUserSucceededAction;\n\n      return state.set('registeredUser', payload);\n    }\n    case AtsActionTypes.RESET_REGISTER_USER: {\n      return state.set('registeredUser', false);\n    }\n    case AtsActionTypes.GET_DOMAIN_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetDomainSucceededAction;\n      return state.set('domain', payload);\n    }\n    case AtsActionTypes.SET_UNGATED_CURRENCY: {\n      const {\n        payload,\n      } = action as SetUngatedCurrencyAction;\n      return state.set('ungatedCurrency', payload.ungatedCurrency);\n    }\n    case AtsActionTypes.SET_IS_VERIFYING_USER: {\n      const { payload } = action as SetIsVerifyingUserAction;\n      return state.set('isVerifyingUser', payload);\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/**\n *\n * App.react.js\n *\n * This component is the skeleton around the actual pages, and should only\n * contain code that should be seen on all pages. (e.g. navigation bar)\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport {\n  compose,\n} from 'redux';\n\n import {\n  makeSelectLoading,\n  makeSelectError,\n  makeSelectToken,\n  makeSelectAuthObject,\n  makeSelectDebug,\n  makeSelectData,\n} from './selectors';\n\nimport {\n  IMap, IAction,\n} from 'ats-utils/src/Interfaces';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport {\n  Button,\n} from '@material-ui/core';\n\nimport {\n  DeprecatedApiCallAction, ApiCallAction,\n} from './actions';\n\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\nimport {\n  Collection,\n  Map,\n} from 'immutable';\nimport {\n  Error,\n} from '../../models';\n\nimport CollapsibleCard from '../../components/CollapsibleCard';\nimport { Dispatch } from 'redux';\n\ninterface IAtsModuleDebugComponentProps {\n\n}\n\ninterface IAtsModuleDebugProps extends IAtsModuleDebugComponentProps {\n  loading: boolean;\n  error: boolean | IMap<Error>;\n  token: any;\n  identity: any;\n  debug: Collection<any, any>;\n  data: Map<string, any>;\n  dispatch: React.Dispatch<IAction>;\n  dispatchDeprecatedApiCall: (payload: {url: string, env: string}) => () => void;\n}\n\ntype AtsModuleDebugProps = IAtsModuleDebugProps;\n\nclass AtsModuleDebug extends React.Component<AtsModuleDebugProps> {\n\n  public render() {\n    const {\n      dispatchDeprecatedApiCall,\n      dispatch,\n    } = this.props;\n    let mainContent: React.ReactElement<any> | null = null;\n    let\n      apiTestButtons: React.ReactElement<any> | null = (\n        <CollapsibleCard CardHeaderProps={{ title: 'api test calls' }}>\n          <br />\n          <Button\n            onClick={\n              dispatchDeprecatedApiCall({\n                url: '/status',\n                env: 'ENDPOINT_AUTH',\n              })\n            }\n          >\n            Get Auth Status With Deprecated Call\n          </Button>\n          {/* <Button\n            onClick={\n              () => {\n                dispatch(new ApiCallAction({\n                  payload: [\n                    {\n                      service: 'auth',\n                      endpoint: 'status',\n                    },\n                  ],\n                }));\n              }\n            }\n          >\n            Get Auth Status\n          </Button> */}\n          <br />\n        </CollapsibleCard>\n      );\n\n    // Show a loading indicator when we're loading\n    if (this.props.loading) {\n      mainContent = (<div>Loading</div>);\n\n    // Show an error if there is one\n    } else if (this.props.error !== false) {\n      mainContent = (<div>Something went Wrong</div>);\n      apiTestButtons = null;\n\n    // If we're not loading, don't have an error and there are repos, show the repos\n    } else {\n      mainContent = (<CollapsibleCard CardHeaderProps={{ title: 'token / identity' }}>\n        {`token : ${this.props.token}`}\n        <br />\n        {`identity : ${this.props.identity}`}\n        <br />\n      </CollapsibleCard>);\n      // mainContent = (<List items={this.props.repos} component={RepoListItem} />);\n    }\n    return (\n      <CollapsibleCard CardHeaderProps={{ title: 'debug' }}>\n        <div>\n          <h3>\n            Debug:\n          </h3>\n          {mainContent}\n          {apiTestButtons}\n          <CollapsibleCard CardHeaderProps={{ title: 'api request/response' }}>\n            {/* {safeStringify(this.props.debug)} */}\n          </CollapsibleCard>\n          <CollapsibleCard CardHeaderProps={{ title: 'data' }}>\n            {/* {safeStringify(this.props.data)} */}\n          </CollapsibleCard>\n        </div>\n      </CollapsibleCard>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch) {\n  return {\n    dispatchDeprecatedApiCall: (params) => () => dispatch(new DeprecatedApiCallAction(params)),\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  loading: makeSelectLoading(),\n  error: makeSelectError(),\n  token: makeSelectToken(),\n  identity: makeSelectAuthObject(),\n  debug: makeSelectDebug(),\n  data: makeSelectData(),\n});\n\nexport default compose<React.ComponentClass<IAtsModuleDebugComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps)\n)(AtsModuleDebug);\n","/*\n * AtsModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IAtsReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IAtsModuleComponentProps {\n\n}\n\ninterface IAtsModuleProps extends IAtsModuleComponentProps {\n  reducerState: IMapNonRecursive<IAtsReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype AtsModuleProps = IAtsModuleProps;\n\nclass AtsModule extends React.Component<AtsModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IAtsModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IAtsModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(AtsModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nexport {\n  default as AtsModuleDebug,\n} from './AtsModuleDebug';\nimport Module from './AtsModule';\nexport default Module;","import * as React from 'react';\nimport {\n  List as MuiList,\n  ListItem as MuiListItem,\n  ListItemText,\n  WithStyles,\n  withStyles,\n  Theme,\n  Button,\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  connect,\n  DispatchProp,\n} from 'react-redux';\nimport {\n  Dispatch,\n  compose,\n} from 'redux';\nimport {\n  Map,\n  List,\n  fromJS,\n  OrderedMap,\n} from 'immutable';\nimport {\n  FilterProductCategoriesAction,\n} from '../../modules/ProductModule/actions';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  CategoryDisplayType,\n} from '../../modules/ProductModule/constants';\nimport {\n  makeSelectProductCategories,\n  makeSelectProductCategoryFilters,\n  makeSelectProductCategorySelect\n} from '../../modules/ProductModule/selectors';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  ProductCategoryGroup,\n  ListItem,\n} from '../../models';\n\nimport CategoryDisplayTypeListItem from '../../models/CategoryDisplayTypeListItem';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nexport type variants = 'compact' | 'default';\n\ninterface IListComponentProps {\n  variant?: variants;\n}\n\ninterface IListProps extends IListComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  productCategories: List<IMap<ProductCategoryGroup>>;\n  productCategorySelect: CategoryDisplayType;\n  productCategoryFilters: IMap<CategoryDisplayTypeListItem>;\n  filterProductCategories: (filter: IMap<CategoryDisplayTypeListItem>) => void;\n}\n\ntype ListProps = IListProps & DispatchProp & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  listItem: {\n    borderRight: `1px solid #D0D0D0`,\n\n    '&:hover': {\n      borderRight: `1px solid ${theme.palette.primary[800]}`,\n      backgroundColor: theme.palette.grey[300],\n    },\n    '&:hover $filterText span': {\n      color: `${theme.palette.primary[800]}`,\n      fontWeight: 'bold',\n      textTransform: 'uppercase',\n    },\n  },\n  listItemCompact: {\n    borderBottom: `1px solid ${theme.palette.secondary['300']}`,\n    fontSize: 12,\n    borderRight: 'none',\n\n    '$filterTextCompact span': {\n      fontWeight: 'bold',\n    },\n    '&:hover $filterTextCompact span': {\n      color: theme.palette.primary.main,\n      fontWeight: 'bold',\n      textTransform: 'uppercase',\n    },\n  },\n\n  filterText: {\n    textAlign: 'right',\n    fontWeight: 'bold',\n    textTransform: 'uppercase',\n  },\n  filterTextCompact: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    textTransform: 'uppercase',\n    padding: 0,\n    width: 75,\n  }\n});\n\ninterface IProductCategoryMenuHelper {\n  id: string;\n  label: string;\n  subList: List<string>;\n}\n\nclass ProductCategoryListComponent extends React.Component<ListProps, {}> {\n  public componentDidMount() {\n    const {\n      filterProductCategories,\n    } = this.props;\n\n    // clears previously selected category filter on mount\n    filterProductCategories(new CategoryDisplayTypeListItem().toImmutable());\n  }\n\n  public render() {\n    const {\n      productCategories,\n      productCategoryFilters,\n      productCategorySelect,\n      filterProductCategories,\n      classes,\n      variant,\n      t,\n    } = this.props;\n\n    const displayType = productCategorySelect;\n    const displayByCategory = displayType === CategoryDisplayType.DISPLAY_BY_CATEGORY;\n\n    const sorted = productCategories\n    .sort((a: IMap<ProductCategoryGroup>, b: IMap<ProductCategoryGroup>) => Number(a.get('divisionNumber')) - Number(b.get('divisionNumber')))\n    .reduce((acc: Map<string, IMap<IProductCategoryMenuHelper>>, item: IMap<ProductCategoryGroup>) => {\n      const id = displayByCategory ? item.get('categoryType') : item.get('divisionNumber');\n      const label = displayByCategory ? item.get('categoryType') : `Division: ${item.get('divisionNumber')}`;\n      const sub = displayByCategory ? `Div ${item.get('divisionNumber')}` : item.get('categoryType');\n      const existing = acc.get(id, Map({\n        id,\n        label,\n        subList: List(),\n      })) as IMap<IProductCategoryMenuHelper>;\n      return acc.update(id, (map: IMap<IProductCategoryMenuHelper>) => (map || existing).update('subList', (list: List<string>) => list.push(sub)));\n    }, OrderedMap<string, IMap<IProductCategoryMenuHelper>>());\n\n    const showCompact = variant === 'compact';\n\n    return (\n      <div>\n        <MuiList>\n          <MuiListItem\n            className={classNames(\n              classes.listItem,\n              {\n                [classes.listItemCompact]: showCompact,\n              },\n            )}\n            onClick={() => filterProductCategories(new CategoryDisplayTypeListItem().toImmutable())}\n            key='displayAllCategories'\n            selected={productCategoryFilters.get('id') === undefined}\n            button={true}\n          >\n            <ListItemText\n              className={classNames(\n                classes.filterText,\n                {\n                  [classes.filterTextCompact]: showCompact,\n                }\n              )}\n              primary={productCategorySelect === CategoryDisplayType.DISPLAY_BY_CATEGORY ? t('ProductCategorySelection.displayAllSubdivision') : t('ProductCategorySelection.displayAllDivision')}\n            />\n          </MuiListItem>\n          {\n            sorted.map((item: IMap<IProductCategoryMenuHelper>) => {\n              return (\n                <MuiListItem\n                  className={classNames(\n                    classes.listItem,\n                    {\n                      [classes.listItemCompact]: showCompact,\n                    },\n                  )}\n                  onClick={() => this.dispatchFilterProductCategories(item.get('id'))}\n                  key={item.get('id')}\n                  selected={productCategoryFilters.get('id') === item.get('id')}\n                  button={true}\n                >\n                  <ListItemText\n                    className={classNames(\n                      classes.filterText,\n                      {\n                        [classes.filterTextCompact]: showCompact,\n                      }\n                    )}\n                    primary={item.get('label')}\n                    secondary={item.get('subList').join(', ')}\n                  />\n                </MuiListItem>\n              );\n            }).valueSeq()\n          }\n        </MuiList>\n      </div>\n    );\n  }\n\n  private dispatchFilterProductCategories = (id: string) => {\n    const {\n      filterProductCategories,\n      productCategorySelect\n    } = this.props;\n\n    const value: CategoryDisplayType = productCategorySelect;\n\n    filterProductCategories(new CategoryDisplayTypeListItem({id, value}).toImmutable());\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n    productCategories: makeSelectProductCategories(),\n    productCategoryFilters: makeSelectProductCategoryFilters(),\n    productCategorySelect: makeSelectProductCategorySelect()\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    filterProductCategories: (params: IMap<CategoryDisplayTypeListItem>) => {\n      dispatch(new FilterProductCategoriesAction(params));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IListComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductCategoryListComponent);\n","import {useAtsApi} from '../contexts/AtsApiContext';\nimport {useSelector} from 'react-redux';\nimport {makeSelectAtsApiState} from '../modules/ApplicationModule/selectors';\nimport { getImageFileUrl } from './imageFileUrl';\n\nconst useImageSrc = (imgId) => {\n    const envLoaded: boolean = useSelector(makeSelectAtsApiState('envLoaded'));\n    const atsApi = useAtsApi();\n    return envLoaded ? getImageFileUrl(atsApi, imgId) : '';\n};\n\nexport default useImageSrc;\n","import React from 'react';\nimport {makeSelectConfig} from '../../modules/AtsModule/selectors';\nimport {useSelector} from 'react-redux';\nimport {WATTS_SPEC_ID, WATTS_SPEC_TOOL_TITLE} from '../../constants';\nimport {makeStyles, Typography, useTheme} from '@material-ui/core';\nimport classNames from 'classnames';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/styles';\nimport Image from '../../components/Image';\nimport {Map as ImmutableMap} from 'immutable';\nimport useImageSrc from '../../utils/useImageSrc';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\ninterface IGuestPageHeaderProps {\n    compactMode?: boolean;\n}\nconst configSelector = makeSelectConfig();\nconst useStyles = makeStyles((theme: Theme) => ({\n    pageTitle: {\n        textAlign: 'center',\n        margin: 'auto',\n        width: '80%',\n        fontWeight: 'bold'\n    },\n    pageTitleCompact: {\n        fontSize: 15,\n        textAlign: 'left',\n        padding: theme.spacing() * 2,\n        lineHeight: `${theme.spacing() * 2.5}px`,\n    },\n}));\nconst GuestPageHeader: React.FC<IGuestPageHeaderProps> = ({\n    compactMode = false,\n}) => {\n    const config = useSelector(configSelector);\n    const classes = useStyles();\n    const theme = useTheme();\n    const apiKey = config?.getIn(['atsApiOptions', 'apiKey']);\n    const { t } = useTranslation('translations');\n    const locale = useSelector(makeSelectLocale());\n    const map = new Map([\n        [WATTS_SPEC_ID, WATTS_SPEC_TOOL_TITLE],\n    ]);\n    const appTitle: string = map.get(apiKey) || config?.get('titleProps') || 'ATS SpecTool';\n    const src = config?.getIn([`productCatalogueLogo${locale === 'fr' ? '_fr' : ''}`, 'src']) || '';\n    const imageSrc = useImageSrc(src);\n    return (\n        src ?\n            <div\n                style={{\n                    width: 'fit-content',\n                    marginLeft: 'auto',\n                    marginRight: 'auto',\n                    marginBottom: theme.spacing(3)\n                }}\n            >\n                <img src={imageSrc} />\n            </div> : <Typography\n            className={classNames(\n                classes.pageTitle,\n                {\n                    [classes.pageTitleCompact]: compactMode,\n                },\n            )}\n            style={{\n                marginBottom: compactMode ? 0 : theme.spacing(2),\n            }}\n            variant='h4'\n        >\n            {t('ProductCategorySelection.headerTitle', { appTitle })}\n        </Typography>\n    );\n};\n\n\nexport default GuestPageHeader;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  reduxForm,\n} from 'redux-form/immutable';\nimport classNames from 'classnames';\nimport {\n  Grid,\n  Typography,\n  MenuItem,\n  Theme,\n  withStyles,\n  WithStyles,\n  Button,\n  Select,\n  Tooltip,\n  AppBar,\n  IconButton,\n  Link,\n} from '@material-ui/core';\nimport {\n  StyleRules, WithTheme\n} from '@material-ui/core/styles';\nimport ProductCategoryListComponent from '../ProductCategoryListComponent';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  MediaCard,\n  QuickSearchInput,\n} from '../../components';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect, useSelector\n} from 'react-redux';\nimport {\n  Trans,\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IConfig,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  QuickSearchAction,\n  GetProductCategoriesAction,\n  SeriesFilterClearAction,\n  SelectCategoryAndGetSpecsAction,\n  SkipRuleEngineAction,\n  ClearQuickSearchAction,\n  GetProductCategoriesSucceededAction,\n  SetHideDiscontinuedSeriesAction,\n  SetSortSeriesByAction,\n  UpdateCategoryPopularityAction\n} from '../../modules/ProductModule/actions';\nimport {\n  SelectCategoryAction,\n  SelectNewCategoryAction,\n  ProductCategorySelectionAction\n} from '../../modules/ProductModule/actions';\n\nimport {\n  PRODUCT_SELECTION_GROUP_FORM,\n  CategoryDisplayType,\n  QuickSearchType,\n} from '../../modules/ProductModule/constants';\nimport {\n  makeSelectSearchResults,\n  makeSelectFilteredProductCategories,\n  selectSearchProductSelectionGroupFormCategorySelect,\n  makeSelectSearchTerm,\n  makeSelectProductCategorySelect,\n  makeSelectSkipRuleEngine,\n  makeSelectSelectingCategory\n} from '../../modules/ProductModule/selectors';\nimport {\n  ProductCategory,\n  ProductCategoryGroup,\n  Spec,\n  Project,\n  Drawing,\n} from '../../models';\nimport {\n  List,\n  Map,\n} from 'immutable';\nimport Debug from '../../containers/Debug';\nimport {\n  MODAL_ID,\n  IModalProps,\n} from '../../containers/CrossReferenceModal';\nimport {\n  ToggleOverlayComponentAction,\n  SetOverlayComponentPropsAction,\n  SetOverlayComponentContentAction,\n  SetTimerStartAction,\n} from '../../modules/ApplicationModule/actions';\nimport { SelectTaskIdAction } from '../../modules/TaskModule/actions';\n\nimport { CONTENT_EDIT_KEY } from '../../components/TaskViewDrawerDetails';\n\nimport {\n  withSpecId,\n  WithSpecId,\n} from '../../hoc';\nimport { BreadcrumbProjectSpecBar } from '../../components/BreadcrumbProjectSpecBar';\nimport { push } from 'connected-react-router';\nimport {\n  PROJECT_DETAIL_PATH,\n  SPEC_DETAIL_PATH,\n  PRODUCT_SELECTION_PATH,\n  PROJECT_LIST_PATH,\n  PRODUCT_CATEGORY_PATH,\n  MASTER_LIST_PATH,\n  MASTER_DETAIL_PATH,\n  SPECIFICATION_LIST_PATH,\n  TEST_PROJECT_LIST_PATH,\n  Mode,\n  TEMPLATE_DETAIL_PATH,\n  TEMPLATE_LIST_PATH,\n  AMPLITUDE_EVENT,\n  DRAWING_NAME_PRIORITY, AOSMITH_SPEC_ID,\n  getLocalePrefix,\n} from '../../constants';\nimport {\n  makeSelectSpec,\n  makeSelectDrawing,\n  makeSelectMode,\n  makeSelectMasterProjectspec,\n  makeSelectMasterDrawing, makeSelectTemplateProjectSpec, makeSelectTemplateDrawing, makeSelectNewDrawingId, makeSelectIsUpdatingDrawing\n} from '../../modules/SpecModule/selectors';\nimport { makeSelectProjects } from '../../modules/ProjectModule/selectors';\nimport { AtsSvgPushpinRounded } from '../../components/AtsSvg';\nimport { DeleteFavouriteCategoryAction, SaveFavouriteCategoryAction } from '../../modules/AccountModule/actions';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { makeSelectOverlayComponents } from '../../modules/ApplicationModule/selectors';\nimport { makeSelectConfig, makeSelectIdentityObject, makeSelectTemplateTranslationObject, makeSelectUserHasMasterTemplate, makeSelectUserIsAtsUser } from '../../modules/AtsModule/selectors';\nimport { AutoSetDrawingNameAction, SetModeAction, SetSelectedSpecIdAction } from '../../modules/SpecModule/actions';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport {AtsActionBlock} from '../../components/AtsSvg/AtsActionBlock';\nimport { GUEST_LOGIN_MODAL } from '../../components/GuestLoginModal';\nimport GuestPageHeader from './GuestPageHeader';\n\nexport type variants = 'compact' | 'default';\n\nexport const getDrawingLabelBaseOnProducts = (currentDrawing: IMap<Drawing>, allDrawings: List<IMap<Drawing>>) => {\n  /////////////////////////////////////////////////////////////////////////////\n  // get drawing label base on products\n  /////////////////////////////////////////////////////////////////////////////\n\n  const newDrawingName = DRAWING_NAME_PRIORITY[currentDrawing.getIn(['products', 0, 'category'])]?.label || currentDrawing.getIn(['products', 0, 'categoryName']) || '';\n\n  /////////////////////////////////////////////////////////////////////////////\n  // determine drawing name base on name of other drawings\n  /////////////////////////////////////////////////////////////////////////////\n\n  const drawingNameLength = newDrawingName.length;\n  const regex = /^-[1-9]+[0-9]*$/;\n  const highestNumber = allDrawings.reduce((currentHighestNumber, drawing) => {\n    const drawingName = drawing.get('name');\n    if (drawingName.startsWith(newDrawingName)) {\n      const remaining = drawingName.slice(drawingNameLength);\n      if (regex.test(remaining)) {\n        const number = Number(remaining.slice(1));\n        if (number > currentHighestNumber) {\n          return number;\n        }\n      }\n    }\n    return currentHighestNumber;\n  }, 0);\n\n  return `${newDrawingName}-${highestNumber + 1}`;\n};\n\ninterface IProductCategorySelectionComponentProps {\n  variant?: variants;\n}\n\ninterface IProductCategorySelectionProps extends IProductCategorySelectionComponentProps {\n  children?: React.ReactNode;\n  searchResults: List<any>;\n  categories: List<IMap<ProductCategoryGroup>>;\n  dispatch: (action: IAction) => void;\n  fetchProducts: () => void;\n  getProductCategories: () => void;\n  selectCategory: (productCategory: IMap<ProductCategory>, selectCategoryWithoutValidate?: boolean) => (event?: object) => void;\n  categorySelect?: QuickSearchType;\n  searchTerm: string;\n  productCategorySelect: CategoryDisplayType;\n  selectTaskId: (taskId: number) => void;\n  selectedSpec: IMap<Spec>;\n  selectedProject: IMap<Project>;\n  selectedDrawing: IMap<Drawing>;\n  projects: IMap<Project>;\n  selectCategoryWithoutValidate: boolean;\n  mode: Mode\n  selectingCategory: boolean;\n  saveFavouriteCategory: (categoryId: number) => void;\n  deleteFavouriteCategory: (categoryId: number) => void;\n  isOverlayComponents: boolean;\n  templateTranslationObject: object;\n  isUpdatingDrawing: boolean;\n  newDrawingId: number;\n  isGuestUser: boolean;\n  hasMasterTemplateRole: boolean;\n  userIsAtsUser: boolean;\n  apiKey: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1,\n    height: 250,\n  },\n  chip: {\n    margin: theme.spacing() / 4,\n  },\n  searchInput: {\n    display: 'inline-block',\n    width: '60%',\n    marginTop: 12,\n  },\n  displaySelectionContainer: {\n    padding: `0 0 0 ${theme.spacing() * 10}px`\n  },\n  displaySelectionContainerCompact: {\n    maxWidth: '100%',\n    flexBasis: '100%',\n    padding: theme.spacing() * 2,\n  },\n  displaySelectionCompact: {\n    width: '50%',\n    fontSize: 14,\n  },\n  headerContainer: {\n    padding: theme.spacing(8, 0, 5)\n  },\n  pageTitle: {\n    textAlign: 'center',\n    margin: 'auto',\n    width: '80%',\n  },\n  pageTitleCompact: {\n    fontSize: 15,\n    textAlign: 'left',\n    padding: theme.spacing() * 2,\n    lineHeight: `${theme.spacing() * 2.5}px`,\n  },\n  availableCategoriesTitle: {\n    textAlign: 'center',\n    marginTop: theme.spacing(3),\n  },\n  availableCategoriesSubText: {\n    textAlign: 'center',\n    marginTop: theme.spacing(),\n    padding: theme.spacing(0, 4),\n  },\n  divisionDropdown: {\n    maxWidth: 'fit-content',\n    marginLeft: 'auto',\n    paddingLeft: theme.spacing(4),\n  },\n  mediaCardCompact: {\n    width: '100%',\n    margin: 0,\n  },\n  productCategoryContainer: {\n    minHeight: 0,\n    marginTop: theme.spacing(3),\n  },\n  categoryListItemCompact: {\n    maxWidth: '33.33%',\n    flexBasis: '33.33%',\n  },\n  categoryListButtonCompact: {\n    width: '100%',\n    textTransform: 'uppercase',\n  },\n  contentContainerCompact: {\n    display: 'flex',\n    flexDirection: 'column',\n    minHeight: 0, // firefox hack\n  },\n  formContainerCompact: {\n    minHeight: 0,\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  categoryContainerCompact: {\n    margin: 0,\n    width: '100%',\n    paddingTop: theme.spacing(),\n    paddingLeft: theme.spacing(2.5),\n  },\n  productCategoryListContainerCompact: {\n    minHeight: 0, // firefox hack\n    flexShrink: 0,\n    overflowY: 'auto',\n\n    '&::-webkit-scrollbar': {\n      width: '5px',\n    },\n    '&::-webkit-scrollbar-track': {\n      background: theme.palette.grey[300]\n    },\n    '&::-webkit-scrollbar-thumb': {\n      background: `${theme.palette.primary[800]}`,\n      borderRadius: theme.shape.borderRadius,\n    },\n    '&::-webkit-scrollbar-thumb:hover': {\n      background: '#555'\n    },\n  },\n  categoryName: {\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    height: '3em',\n    lineHeight: '1.5',\n    display: '-webkit-box',\n    lineClamp: 2,\n    boxOrient: 'vertical',\n  },\n  appBar: {\n    zIndex: theme.zIndex.appBar - 1,\n  },\n  iconFont: {\n    fontSize: 90,\n    color: `${theme.palette.primary[500]}`,\n  }\n});\n\n\nexport const DRAWER_ID = 'taskDrawer';\n\ntype ProductCategorySelectionType =\n  WithSpecId\n  & WithTranslation\n  & InjectedFormProps\n  & IProductCategorySelectionComponentProps\n  & IProductCategorySelectionProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithTheme\n  & WithAtsApi\n  & WithAmplitudeData;\n\nclass ProductCategorySelection extends React.Component<ProductCategorySelectionType, {}> {\n  public state = {\n    category: 0,\n    elevation: 0,\n    pinHoverId: null,\n    categorySearchTerm: ''\n  };\n\n  public componentDidMount() {\n    const {\n      getProductCategories,\n      dispatch,\n    } = this.props;\n\n    this.modeCheck();\n\n    getProductCategories();\n    dispatch(new SeriesFilterClearAction({}));\n  }\n\n  public componentDidUpdate = (prevProps) => {\n    if (!this.props.isOverlayComponents && prevProps.isOverlayComponents) {\n      const tourButton = document.querySelector('a.uf-button-main.uf-visible') as HTMLElement;\n      if (tourButton) {\n        tourButton.style.visibility = 'initial';\n      }\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new SetHideDiscontinuedSeriesAction(false));\n  }\n\n  public modeCheck = () => {\n    const {\n      selectedSpec,\n      mode,\n      isGuestUser,\n      hasMasterTemplateRole,\n      userIsAtsUser,\n      dispatch,\n    } = this.props;\n\n    const resetMode = () => {\n      dispatch(new SetModeAction(Mode.productCatalogue));\n      dispatch(new SetSelectedSpecIdAction(-1));\n    };\n\n    if (selectedSpec?.get('id')) {\n      const isQuickSpec = selectedSpec?.get('projectId') === null;\n      const isMasterSpec = selectedSpec?.get('isMaster');\n      const isTemplateSpec = selectedSpec?.get('isMasterTemplate');\n      const isTestSpec = selectedSpec?.get('status') === 'test';\n      const isProjectSpec = selectedSpec?.get('projectId') && !isMasterSpec && !isTemplateSpec && !isTestSpec;\n  \n      if (isGuestUser) {\n        if (mode !== Mode.spec) {\n          resetMode();\n        }\n      } else {\n        if (\n          (isQuickSpec && mode !== Mode.spec)\n          || (isMasterSpec && mode !== Mode.master)\n          || (isTemplateSpec && mode !== Mode.masterTemplate)\n          || (isTestSpec && mode !== Mode.testProject)\n          || (isProjectSpec && mode !== Mode.project)\n        ) {\n          resetMode();\n        } else if ((isTemplateSpec || mode === Mode.masterTemplate) && !(userIsAtsUser || hasMasterTemplateRole)) {\n          resetMode();\n        }\n      }\n    } else {\n      resetMode();\n    }\n  }\n\n  public toggleTask = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID,\n      open: true\n    }));\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: DRAWER_ID,\n    }));\n  };\n\n  public addTask = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SelectTaskIdAction({taskId: -1}))\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: DRAWER_ID,\n      open: true\n    }));\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: DRAWER_ID,\n      content: CONTENT_EDIT_KEY,\n    }));\n  }\n\n  public handleSelectCategory = (type) => {\n    const {\n      selectCategory,\n      selectedDrawing,\n      selectCategoryWithoutValidate,\n      mode,\n      amplitudeData,\n      dispatch\n    } = this.props;\n\n    dispatch(new UpdateCategoryPopularityAction({categoryId: type.get('id')}));\n\n    // set timer start here, for amplitude stuff to track time when series is fully loaded\n    dispatch(new SetTimerStartAction({startTime:Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n\n    if (mode === Mode.productCatalogue) {\n      // this flow make GetSeries call before SetSortSeriesBy, hence result is not accurate, so we have to set sort series here\n      dispatch(new SetSortSeriesByAction('recommended'));\n      selectCategory(type, true);\n      amplitude.logEvent(AMPLITUDE_EVENT.productCatalogSelectCategory, amplitudeData({\n        categoryId: type.get('id'),\n        categoryName: type.get('name')\n      }));\n    } else {\n      const productsInDrawing = selectedDrawing && selectedDrawing.get('products') || List();\n\n      if (productsInDrawing.size === 0) {\n        return selectCategory(type);\n      }\n      !selectCategoryWithoutValidate ? selectCategory(type) : selectCategory(type, selectCategoryWithoutValidate)\n    }\n  }\n\n  public render() {\n    const {\n      pinHoverId,\n      categorySearchTerm\n    } = this.state;\n    const {\n      t,\n      categories,\n      classes,\n      categorySelect,\n      variant,\n      productCategorySelect,\n      dispatch,\n      selectedSpec = Map(),\n      projects,\n      selectedDrawing,\n      mode,\n      selectingCategory,\n      theme,\n      saveFavouriteCategory,\n      deleteFavouriteCategory,\n      amplitudeData,\n      isOverlayComponents,\n      templateTranslationObject,\n      isUpdatingDrawing,\n      isGuestUser,\n      apiKey\n    } = this.props;\n    const showCompact = variant === 'compact';\n    const searchTermLower = categorySearchTerm.toLowerCase();\n\n    const sortedProductTypesList = categories\n      .reduce((acc, category) => {\n        const productTypes = category.get('productTypes');\n        return acc.push(...productTypes);\n      }, List())\n      .filter(x => x.get('name').toLowerCase().includes(searchTermLower))\n      // sort by favorite(true/false) first then popularity then alphabetically within each group\n      .sort((a, b) =>\n        Number(b.get('isFavourite')) - Number(a.get('isFavourite'))\n        || Number(b.get('popularity')) - Number(a.get('popularity'))\n        || ('' + a.get('name')).localeCompare(b.get('name'))\n      );\n\n    const imgSize = 75;\n\n    const marginOverride0 = {\n      margin: 0,\n    };\n\n    const goto = (path) => {\n      dispatch(push(path));\n    };\n\n    const selectedProjectId = selectedSpec.get('projectId') || '';\n  \n    let projectpath;\n    let specpath;\n    switch(mode) {\n      case Mode.master: {\n        projectpath = `${MASTER_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${MASTER_DETAIL_PATH}/${selectedProjectId}`;\n        break;\n      }\n      case Mode.masterTemplate: {\n        projectpath = `${TEMPLATE_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${TEMPLATE_DETAIL_PATH}/${selectedSpec.get('id') || ''}`\n        break;\n      }\n      default: {\n        projectpath = `${PROJECT_DETAIL_PATH}/${selectedProjectId}`;\n        specpath = `${SPEC_DETAIL_PATH}/${selectedSpec.get('id') || ''}`\n      }\n    }\n    const projectName = (selectedSpec.get('projectTitle') || projects.getIn([selectedSpec.get('projectId'), 'name']));\n    const specName = (selectedSpec.get('name') || t('ProductCategorySelection.unnamed'));\n    const projectAndSpecString = [projectName, specName].filter(x => x).join(' - ');\n    const drawingName = (selectedDrawing ? selectedDrawing.get('name') || t('ProductCategorySelection.unnamed') : t('ProductSelectionGroupDrawingSettings.noDrawingSelected'));\n    const disableCompleteButton = !Boolean(selectedDrawing && selectedDrawing.get('products').count()) || (`/${window.location.pathname.replace(getLocalePrefix(), '').split('/')[1]}` !== PRODUCT_SELECTION_PATH);\n    let breadcrumbs;\n    switch(mode) {\n      case Mode.master: {\n        breadcrumbs = [\n          {\n            label: t('ProductCategorySelection.myMasters'),\n            onClick: () => goto(MASTER_LIST_PATH),\n            path: MASTER_LIST_PATH\n          },\n          projectAndSpecString && {\n            label: projectAndSpecString,\n            onClick: () => goto(projectpath)\n          },\n          drawingName && {label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH)}\n        ];\n        break;\n      }\n      case Mode.masterTemplate: {\n        breadcrumbs = [\n          {\n            label: t('ProductCategorySelection.myTemplates', templateTranslationObject),\n            onClick: () => goto(TEMPLATE_LIST_PATH),\n            path: TEMPLATE_LIST_PATH\n          },\n          projectAndSpecString && {\n            label: projectAndSpecString,\n            onClick: () => goto(projectpath)\n          },\n          drawingName && {label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH)}\n        ];\n        break;\n      }\n      default: {\n        breadcrumbs = [\n          ...(\n            mode === Mode.testProject\n              ? [{label: t('ProductCategorySelection.testProjectListBreadCrumb'), onClick: () => goto(TEST_PROJECT_LIST_PATH)}]\n              : mode === Mode.spec\n                    ? [{label: t('ProductCategorySelection.mySpecifications'), onClick: () => goto(SPECIFICATION_LIST_PATH)}]\n                    : [{label: t('ProductCategorySelection.myProjects'), onClick: () => goto(PROJECT_LIST_PATH)}]\n          ),\n          projectAndSpecString && {\n            label: projectAndSpecString,\n            onClick: () => goto(mode === Mode.spec ? specpath : projectpath)\n          },\n          drawingName && {label: drawingName, onClick: () => goto(PRODUCT_CATEGORY_PATH)}\n        ]\n      }\n    }\n\n    const updateFavouriteCategoryInStateAndAmplitude = (categoryId: number, categoryName: string, favourite: boolean) => {\n      const favouritedCategory = categories.find((category) => {\n        return Boolean(category.get('productTypes').find(productType => productType.get('id') === categoryId));\n      });\n      const favouritedProductTypeIndex = favouritedCategory.get('productTypes').findIndex((productType) => {\n        return productType.get('id') === categoryId;\n      });\n      const categoryWithUpdatedFavourite = favouritedCategory.setIn(['productTypes', favouritedProductTypeIndex, 'isFavourite'], favourite);\n      dispatch(new GetProductCategoriesSucceededAction({response:List([categoryWithUpdatedFavourite])}));\n\n      // Amplitude tracking\n      const trackedData = {\n        categoryId,\n        categoryName\n      }\n      if (favourite) {\n        amplitude.logEvent(AMPLITUDE_EVENT.pinCategory, amplitudeData(trackedData));\n      } else {\n        amplitude.logEvent(AMPLITUDE_EVENT.unpinCategory, amplitudeData(trackedData));\n      }\n    }\n\n    const backTo = () => {\n      switch (mode) {\n        case Mode.master : return t('ProductCategorySelection.backToMaster');\n        case Mode.masterTemplate : return t('ProductCategorySelection.backToTemplate', templateTranslationObject);\n        case Mode.testProject : return t('ProductCategorySelection.backToTestProject');\n        case Mode.project: return t('ProductCategorySelection.backToProject');\n        default : return t('ProductCategorySelection.backToSpec');\n      }\n    }\n\n    const handleCompleteOrGoBack = () => {\n      dispatch(new AutoSetDrawingNameAction({}));\n    };\n\n    const openSignUpDialog = (e) => {\n      e.preventDefault();\n      dispatch(new ToggleOverlayComponentAction({\n        open: true,\n        id: GUEST_LOGIN_MODAL\n      }));\n    };\n\n    return (\n      <div\n        className={classNames({\n          [classes.contentContainerCompact]: showCompact,\n        })}\n      >\n        <AppBar position='sticky' elevation={0} className={classes.appBar}>\n          {mode === Mode.productCatalogue\n            ? null\n            : <BreadcrumbProjectSpecBar\n                breadcrumbs={breadcrumbs}\n                buttons={[\n                  {\n                    label: backTo(),\n                    onClick: handleCompleteOrGoBack,\n                    isLoading: isUpdatingDrawing,\n                    buttonProps: {disabled: isUpdatingDrawing}\n                  },\n                  {\n                    label: t('ProductSelection.complete'),\n                    onClick: handleCompleteOrGoBack,\n                    isLoading: isUpdatingDrawing,\n                    buttonProps: {disabled: disableCompleteButton || isUpdatingDrawing}\n                  }\n                ]}\n              />\n          }\n        </AppBar>\n        <form\n          className={classNames({\n            [classes.formContainerCompact]: showCompact,\n          })}\n        >\n          <Grid\n            className={classes.headerContainer}\n          >\n            {(isGuestUser || apiKey === AOSMITH_SPEC_ID) ? <GuestPageHeader compactMode={showCompact} /> : null}\n            <Typography\n              className={classNames(\n                classes.pageTitle,\n                {\n                  [classes.pageTitleCompact]: showCompact,\n                },\n              )}\n              style={{\n                marginBottom: showCompact ? 0 : theme.spacing(3),\n                color: 'rgba(0, 0, 0, 0.60)'\n              }}\n              variant='h5'\n            >\n              {t('ProductCategorySelection.selectFixtureCategory')}\n            </Typography>\n\n            <QuickSearchInput\n              categorySelect={categorySelect}\n              variant={variant}\n              setCategorySearchTerm={(term) => this.setState({categorySearchTerm: term})}\n            />\n          </Grid>\n\n          <Typography\n            variant='h5'\n            className={classes.availableCategoriesTitle}\n          >\n            {t('ProductCategorySelection.availableCategories')}\n          </Typography>\n          {\n            isGuestUser && (\n              <Typography\n                variant='body2'\n                className={classes.availableCategoriesSubText}\n              >\n                <Trans\n                  t={t}\n                  i18nKey={'ProductCategorySelection.availableCategoriesSubText'}\n                  components={[\n                      <Link key={'signUp'} variant='body2' component='button' style={{ textDecoration: 'underline' }} onClick={openSignUpDialog} />\n                  ]}\n              />\n              </Typography>\n            )\n          }\n          <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n            justify='space-between'\n            className={`${classes.productCategoryContainer} ${isOverlayComponents ? null : 'productSearchTour-2'}`}\n          >\n            <Grid\n              item={true}\n              xs={showCompact ? 3 : 6}\n              sm={showCompact ? 3 : 6}\n              md={3}\n              className={classNames({\n                [classes.productCategoryListContainerCompact]: showCompact,\n              })}\n            >\n              <div className={classes.divisionDropdown}>\n                <Select\n                  value={productCategorySelect}\n                  onChange={\n                    (e) => dispatch(new ProductCategorySelectionAction(e.target.value as CategoryDisplayType))\n                  }\n                  style={showCompact ? marginOverride0 : {}}\n                  className={classNames({\n                    [classes.displaySelectionCompact]: showCompact,\n                  })}\n                  fullWidth={true}\n                >\n                  <MenuItem\n                    value={CategoryDisplayType.DISPLAY_BY_DIVISION}\n                  >\n                    {t('ProductCategorySelection.displayDivision')}\n                  </MenuItem>\n                  <MenuItem\n                    value={CategoryDisplayType.DISPLAY_BY_CATEGORY}\n                  >\n                    {t('ProductCategorySelection.displaySubdivision')}\n                  </MenuItem>\n                </Select>\n              </div>\n              <ProductCategoryListComponent\n                variant={variant}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              xs={showCompact ? 9 : 6}\n              sm={showCompact ? 9 : 6}\n              md={9}\n              // className={classNames({\n              //   [classes.categoryContainerCompact]: showCompact,\n              // })}\n              className={classes.categoryContainerCompact}\n            >\n              <Grid\n                container={true}\n                spacing={2}\n              >\n                {\n                  sortedProductTypesList.map((type: IMap<ProductCategory>) => {\n                    const name = type.get('name');\n                    const id = type.get('id');\n                    const mainImage = type.getIn(['media', 'images', 'main']);\n                    const media = `${mainImage}|resize:${imgSize},${imgSize}`;\n                    const fontClass = type.get('fontClass');\n                    const isFavouriteCategory = type.get('isFavourite');\n                    // if there's no 'mainImage' we use placeholder from font\n                    const displayMediaCard = mainImage && (fontClass === 'icon-placeholder')\n                      // use image from service\n                      ? <MediaCard\n                          onClick={\n                            selectingCategory\n                              ? null\n                              : (() => this.handleSelectCategory(type))\n                          }\n                          key={id}\n                          title={name}\n                          urlOrElement={media}\n                          width={`${imgSize}px`}\n                          defaultImageHeight='75px'\n                          lazyLoad={true}\n                          variant={variant}\n                        >\n                          <Tooltip\n                            title={name}\n                          >\n                            <Typography className={classes.categoryName}>\n                              {name}\n                            </Typography>\n                          </Tooltip>\n                        </MediaCard>\n\n                      // use iconfont\n                      : <MediaCard\n                          onClick={\n                            selectingCategory\n                              ? null\n                              : (() => this.handleSelectCategory(type))\n                          }\n                          key={id}\n                          title={name}\n                          width={`${imgSize}px`}\n                          defaultImageHeight='75px'\n                          variant={variant}\n                          urlOrElement={\n                            <span className={fontClass + ' ' + classes.iconFont}></span>\n                          }\n                        >\n                          <Tooltip\n                            title={name}\n                          >\n                            <Typography className={classes.categoryName}>\n                              {name}\n                            </Typography>\n                          </Tooltip>\n                        </MediaCard>;\n\n                    return (\n                      <Grid\n                        key={id}\n                        container={true}\n                        item={true}\n                        xs={12}\n                        sm={12}\n                        md={4}\n                        lg={3}\n                        spacing={showCompact ? 0 : 1}\n                        className={classNames(\n                          classes.iconFont,\n                          {\n                            [classes.categoryListItemCompact]: showCompact,\n                          })}\n                        style={{position: 'relative'}}\n                      >\n                        <Tooltip\n                          open={pinHoverId === id}\n                          title={isGuestUser ? t('ProductCategorySelection.disabledPin') : isFavouriteCategory ? t('ProductCategorySelection.unpinFavourite') : t('ProductCategorySelection.pinFavourite')}\n                        >\n                          <IconButton\n                              onMouseEnter={() => this.setState({pinHoverId: id})}\n                              onMouseLeave={() => this.setState({pinHoverId: null})}\n                              onClick={(e) => {\n                                e.stopPropagation();\n                                if (isGuestUser) {\n                                    return;\n                                }\n                                this.setState({pinHoverId: null});\n                                if (!isFavouriteCategory) {\n                                  updateFavouriteCategoryInStateAndAmplitude(id, name, true);\n                                  saveFavouriteCategory(id);\n                                } else if (isFavouriteCategory) {\n                                  updateFavouriteCategoryInStateAndAmplitude(id, name, false);\n                                  deleteFavouriteCategory(id);\n                                }\n                              }}\n                              style={{ color: isGuestUser && pinHoverId === id ? 'rgba(0, 0, 0, 0.26)' : 'inherit', padding: 5, position:'absolute', top: 5, right: 5, zIndex: 1}}\n                          >\n                            {isGuestUser && pinHoverId === id ? <AtsActionBlock style={{ color: 'inherit' }} /> : <AtsSvgPushpinRounded\n                                color={isFavouriteCategory ? theme.palette.primary.main : 'lightgrey'}\n                                style={isFavouriteCategory ? {transform: 'rotate(45deg)'} : null}\n                            />}\n                          </IconButton>\n                        </Tooltip>\n                        {displayMediaCard}\n                      </Grid>\n                    );\n                  })\n                }\n              </Grid>\n            </Grid>\n          </Grid>\n        </form>\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  const config = makeSelectConfig()(state);\n  const apiKey = config.getIn(['atsApiOptions', 'apiKey']);\n  const mode = makeSelectMode()(state);\n  const normalSpec = makeSelectSpec()(state);\n  const masterSpec = makeSelectMasterProjectspec()(state);\n  const templateSpec = makeSelectTemplateProjectSpec()(state);\n  let selectedSpec = normalSpec;\n  let selectedDrawing = makeSelectDrawing()(state);\n  switch (mode) {\n    case Mode.master: {\n      selectedSpec = masterSpec;\n      selectedDrawing = makeSelectMasterDrawing()(state);\n      break;\n    }\n    case Mode.masterTemplate: {\n      selectedSpec = templateSpec;\n      selectedDrawing = makeSelectTemplateDrawing()(state);\n      break;\n    }\n  }\n\n  const isOverlayComponents = makeSelectOverlayComponents()(state).find(x => x === true);\n  const isGuestUser = !makeSelectIdentityObject()(state);\n  return {\n    mode,\n    selectedSpec,\n    selectedDrawing,\n    isOverlayComponents,\n    isGuestUser,\n    apiKey,\n    ...createStructuredSelector({\n      searchResults: makeSelectSearchResults(),\n      categories: makeSelectFilteredProductCategories(),\n      categorySelect: selectSearchProductSelectionGroupFormCategorySelect(),\n      searchTerm: makeSelectSearchTerm(),\n      productCategorySelect: makeSelectProductCategorySelect(),\n      projects: makeSelectProjects(),\n      selectCategoryWithoutValidate: makeSelectSkipRuleEngine(),\n      selectingCategory: makeSelectSelectingCategory(),\n      templateTranslationObject: makeSelectTemplateTranslationObject(),\n      isUpdatingDrawing: makeSelectIsUpdatingDrawing(),\n      newDrawingId: makeSelectNewDrawingId(),\n      hasMasterTemplateRole: makeSelectUserHasMasterTemplate(),\n      userIsAtsUser: makeSelectUserIsAtsUser(),\n    })(state)\n  } \n}\n\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getProductCategories: () => {\n      dispatch(new GetProductCategoriesAction({ applyUnavailabilityFilter: true }));\n    },\n    selectCategory: (productCategory: IMap<ProductCategory>, selectCategoryWithoutValidate: boolean) => {\n      // clear the search IT-2345\n      dispatch(new ClearQuickSearchAction());\n\n      if (!selectCategoryWithoutValidate) {\n        dispatch(new SelectCategoryAndGetSpecsAction({\n          productCategory,\n        }));\n\n        // reset the state so the next call doesn't skip rules\n        dispatch(new SkipRuleEngineAction(true));\n      } else {\n        dispatch(new SelectCategoryAction({\n          productCategoryId: productCategory.get('id'),\n        }));\n        dispatch(SelectNewCategoryAction.withCategoryFilter(productCategory, true));\n      }\n    },\n    selectTaskId: (taskId: number) => {\n      dispatch(new SelectTaskIdAction({taskId}));\n    },\n    saveFavouriteCategory: (categoryId: number) => {\n      dispatch(new SaveFavouriteCategoryAction({categoryId}));\n    },\n    deleteFavouriteCategory: (categoryId: number) => {\n      dispatch(new DeleteFavouriteCategoryAction({categoryId}));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IProductCategorySelectionComponentProps>>(\n  withSpecId({redirectToControlled: true}),\n  withAtsApi(),\n  withTranslation('translations'),\n  reduxForm({\n    form: PRODUCT_SELECTION_GROUP_FORM,\n    initialValues: {\n      category: CategoryDisplayType.DISPLAY_BY_CATEGORY,\n    },\n    destroyOnUnmount: false,\n  }),\n  withStyles(styles, {withTheme: true}),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductCategorySelection);\n","/* eslint no-unused-vars:0 */\n\nimport * as React from 'react';\nimport {\n  InputLabel,\n  FormControl,\n  FormHelperText,\n  Select,\n  Theme,\n  Input,\n  MenuItem,\n  Checkbox,\n  ListItemText,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  withStyles,\n  WithStyles\n} from '@material-ui/core/styles';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps\n} from 'redux-form';\nimport {\n  List,\n  Set,\n  isCollection,\n} from 'immutable';\nimport {\n  connect\n} from 'react-redux';\nimport { compose } from 'redux';\n\n\nexport interface IFieldMultiSelectComponentProps {\n  formControlProps?: object;\n  inputProps?: object;\n  label?: string;\n  require?: boolean;\n  values: string[];\n}\n\nexport type IFieldMultiWrappedProps = WrappedFieldProps & IFieldMultiSelectComponentProps;\n\ninterface IFieldMultiSelectProps extends IFieldMultiWrappedProps {\n}\n\ninterface IFieldMultiSelectState {\n  name: string[];\n}\n\ntype FieldMultiSelectProps = IFieldMultiSelectProps & WithStyles<keyof ReturnType<typeof muiStyles>>;\n\nclass FieldMultiSelect extends React.Component<FieldMultiSelectProps, IFieldMultiSelectState> {\n  public state = {\n    name: []\n  };\n\n  public handleChange = (onChange) => (evt) => {\n    const value = (evt && evt.target && evt.target.value) || evt;\n    const finalValue = Set(value);\n    onChange(finalValue);\n\n    // this.setState({ name: evt.target.value });\n  }\n\n  public handleBlur = (onBlur) => (...args) => {\n    // onBlur(...args);\n  }\n\n  public render() {\n    const {\n      classes,\n      input,\n      meta: {\n        error,\n        touched,\n        warning,\n      } = {\n        error: undefined,\n        touched: undefined,\n        warning: undefined,\n      },\n      label,\n      require = false,\n      inputProps = {},\n      formControlProps = {},\n      children,\n      values,\n      ...rest\n    } = this.props;\n    const customOverrideOverride: any = {};\n\n    const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n      const valueAsArray = singleOrArray(inputProps[key]);\n\n      if (isFunction(valueAsArray[0])) {\n        return { ...O, [key]: callFunctions([input[key], ...valueAsArray]) };\n      }\n      return { ...O, [key]: inputProps[key] };\n    }, input || {});\n\n    if (customOverrides.defaultValue != null) {\n      customOverrideOverride.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n      delete customOverrides.defaultValue;\n    }\n    if (customOverrides.onChange != null) {\n      customOverrideOverride.onChange = this.handleChange(customOverrides.onChange);\n    }\n    if (customOverrides.onBlur != null) {\n      customOverrideOverride.onBlur = this.handleBlur(customOverrides.onBlur);\n    }\n    let valueAsSet = customOverrides.value;\n    if (!isCollection(customOverrides.value)) {\n      valueAsSet = Set();\n    } else if (!Set.isSet(customOverrides.value)) {\n      valueAsSet = customOverrides.value.toSet();\n    }\n    const valueSet = valueAsSet;\n    customOverrideOverride.value = valueSet.toArray();\n\n    return (\n      <FormControl error={touched && (error != null)} {...formControlProps}>\n        <InputLabel htmlFor='input-field'>{require ? `${label} *` : label}</InputLabel>\n        <Select\n          multiple={true}\n          onChange={this.handleChange}\n          input={<Input id='select-multiple-checkbox' />}\n          renderValue={(selected: string[]) => {\n            return selected.join(', ');\n          }}\n          classes={{ select: classes.select }}\n          {...customOverrides}\n          {...customOverrideOverride}\n          {...rest}\n        >\n          {\n            children\n              ? children\n              : values.map(value => (\n                  <MenuItem key={value} value={value}>\n                    <Checkbox checked={valueSet.has(value)} />\n                    <ListItemText primary={value} />\n                  </MenuItem>\n                ))\n          }\n        </Select>\n        <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>\n      </FormControl>\n    );\n  }\n\n}\n\nconst muiStyles = (theme: Theme): StyleRules => ({\n  select: {\n    textAlign: 'left',\n  },\n});\n\n// export default withStyles(muiStyles)(FieldMultiSelect);\n\nexport default compose<React.ComponentClass<IFieldMultiWrappedProps>>(\n  withStyles(muiStyles),\n  // connect(null, null),\n)(FieldMultiSelect);\n","\nimport * as React from 'react';\nimport {\n  Input,\n  InputLabel,\n  FormControl,\n  FormHelperText,\n  Chip,\n} from '@material-ui/core';\nimport {\n  isCollection,\n  List,\n  Set,\n} from 'immutable';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  singleOrArray,\n  callFunctions,\n} from 'ats-utils/src';\nimport {\n  isFunction,\n} from 'lodash';\nimport {\n  WrappedFieldProps,\n} from 'redux-form';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport {\n  flatten,\n} from 'lodash';\nimport { InputLabelProps } from '@material-ui/core/InputLabel';\nimport { InputProps } from '@material-ui/core/Input';\n\n\n\nexport interface IFieldMultiTextFieldComponentProps {\n  formControlProps?: object;\n  inputProps?: InputProps;\n  label?: string;\n  require?: boolean;\n  charDelimiter?: string | string[];\n  keyDelimiter?: number | number[];\n  InputLabelProps?: InputLabelProps;\n}\n\nexport type IFieldMultiTextFieldWrappedComponentProps = IFieldMultiTextFieldComponentProps & WrappedFieldProps;\n\ninterface IFieldMultiTextFieldProps extends IFieldMultiTextFieldWrappedComponentProps {\n  customOverrides: any;\n  valueList: List<string>;\n  charDelimiterSet: Set<string>;\n  keyDelimiterSet: Set<number>;\n}\n\ninterface IFieldMultiTextFieldState {\n  value: string;\n}\n\ntype FieldMultiTextFieldProps = IFieldMultiTextFieldProps;\n\nclass FieldMultiTextField extends React.Component<FieldMultiTextFieldProps, IFieldMultiTextFieldState> {\n\n  public state = {\n    value: '',\n  };\n\n  public handleBlur = (onBlur) => (evt, ...args) => {\n    // onBlur(...args);\n    const value = evt.target.value;\n    this.handleMakeChip(value);\n  }\n\n  public handleChange = () => (evt, ...args: any[]) => {\n    const {\n      charDelimiterSet,\n    } = this.props;\n    if (evt && evt.target) {\n      const value = evt.target.value;\n      const valueSet = Set(value);\n      if (charDelimiterSet.map((delimiter) => valueSet.has(delimiter)).has(true)) {\n        this.handleMakeChip(value);\n      } else {\n        this.setState({value});\n      }\n    }\n  }\n\n  public handleMakeChip = (value) => {\n    const {\n      charDelimiterSet,\n      customOverrides,\n      valueList,\n    } = this.props;\n    this.setState({\n      value: '',\n    });\n\n    // array of all values, in case people do weird stuff like adding delimiters in the middle of their input\n    const actualValue: string[] = charDelimiterSet.reduce((val: string[], char) => {\n      return flatten(val.map((str) => str.split(char))).filter((str) => str != null).map((str) => str.trim()).filter((str) => str !== '');\n    }, singleOrArray(value));\n\n    // if we end up with nothing (e.g. just type delimiter) just don't trigger change\n    if (actualValue.length !== 0) {\n      customOverrides.onChange(valueList.concat(List<string>(actualValue)));\n    }\n  }\n\n  public handleRemoveChip = (index: number) => {\n    const {\n      customOverrides,\n      valueList,\n    } = this.props;\n\n    // slice works 'differently' with negative numbers so we just make it positive with the expected value\n    let newIndex = index;\n    while (newIndex < 0) {\n      newIndex = newIndex + valueList.size;\n    }\n    const newList = valueList.slice(0, newIndex).concat(valueList.slice(newIndex + 1));\n    customOverrides.onChange(newList);\n  }\n\n  public handleKeyDown = () => (evt, ...args: any[]) => {\n    const {\n      keyDelimiterSet,\n      valueList,\n    } = this.props;\n\n    const value = evt.target.value;\n    const keyCode = evt.keyCode;\n\n    // if key delimiter is hit (default: tab) will trigger chip making\n    if (keyDelimiterSet.has(keyCode) && value !== '') {\n      evt.preventDefault();\n      this.handleMakeChip(value);\n    }\n\n    // hardcoded delete to remove last chip\n    if (keyCode === 8 && value === '' && valueList.size !== 0) {\n      evt.preventDefault();\n      this.handleRemoveChip(-1);\n    }\n  }\n\n  public render() {\n\n    const {\n      value,\n    } = this.state;\n    const {\n      customOverrides,\n      valueList,\n      input,\n      meta: {\n        error,\n        touched, // eslint-disable-line no-unused-vars\n        warning,\n      } = {\n        error: undefined,\n        touched: undefined,\n        warning: undefined,\n      },\n      label,\n      require = false,\n      formControlProps = {},\n      InputLabelProps: _InputLabelProps,\n      // dispatch,\n      ...rest\n    } = this.props;\n\n    // when I was mutating customOverride here, some weird thing was going on under the hood where the override remained mutated and carried onto the next iteration / render\n    // customOverride has been moved to props to make it more accessible across multiple functions\n    // and also customOverrideOverride was added to prevent weird mutation errors.\n    const customOverrideOverride: any = {};\n\n    if (customOverrides.onChange != null) {\n      customOverrideOverride.onChange = this.handleChange();\n      customOverrideOverride.onKeyDown = this.handleKeyDown();\n    }\n\n    if (customOverrides.onBlur != null) {\n      customOverrideOverride.onBlur = this.handleBlur(customOverrides.onBlur);\n    }\n\n    return (\n      <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby='helper-text'>\n        <InputLabel {..._InputLabelProps}>\n          {require ? `${label} *` : label}\n        </InputLabel>\n        <Input\n          {...customOverrides}\n          {...customOverrideOverride}\n          startAdornment={\n            <React.Fragment>\n              {\n                valueList.map((chipValue, chipIndex) => {\n                  return <Chip\n                    key={chipValue + chipIndex}\n                    label={chipValue}\n                    onDelete={() => this.handleRemoveChip(chipIndex)}\n                  />;\n                }).toArray()\n              }\n            </React.Fragment>\n          }\n          value={value}\n        />\n        <FormHelperText id='helper-text'>{touched && (error || warning)}</FormHelperText>\n      </FormControl>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, props: IFieldMultiTextFieldWrappedComponentProps) => {\n  const {\n    input,\n    inputProps = {},\n    charDelimiter = ',',\n    keyDelimiter = 9,\n  } = props;\n\n  const customOverrides: any = Object.keys(inputProps).reduce((O, key) => {\n    const valueAsArray = singleOrArray(inputProps[key]);\n\n    if (isFunction(valueAsArray[0])) {\n      return { ...O, [key]: callFunctions([(input as any)[key], ...valueAsArray]) };\n    }\n    return { ...O, [key]: inputProps[key] };\n  }, input || {});\n\n  if (customOverrides.defaultValue != null) {\n    customOverrides.value = customOverrides.value != null ? customOverrides.value : customOverrides.defaultValue;\n    delete customOverrides.defaultValue;\n  }\n\n  if (!isCollection(customOverrides.value)) {\n    customOverrides.value = List();\n  } else if (!List.isList(customOverrides.value)) {\n    customOverrides.value = customOverrides.value.toList();\n  }\n  const valueList = customOverrides.value as List<string>;\n\n  const charDelimiterSet = Set<string>(singleOrArray(charDelimiter).join(''));\n  const keyDelimiterSet = Set<number>(singleOrArray(keyDelimiter));\n  return {\n    charDelimiterSet,\n    keyDelimiterSet,\n    customOverrides,\n    valueList,\n  };\n};\nexport default compose<React.ComponentClass<IFieldMultiTextFieldWrappedComponentProps>>(\n  connect(mapStateToProps),\n)(FieldMultiTextField);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  change,\n  BaseFieldProps,\n} from 'redux-form';\nimport FieldTextField, {IFieldTextFieldComponentProps} from '../../../components/FieldTextField';\nimport FieldAutoSuggest, {IFieldAutoSuggestComponentProps} from '../../../components/FieldAutoSuggest';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Checkbox,\n  FormControlLabel,\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {\n  required,\n  isNotEmpty,\n  isInteger,\n  makeDateValidator,\n  isNumberGreaterThanZero,\n  dateNoEarlierThan,\n} from '../../../validators';\nimport {\n  GetProvinceAction,\n  GetCountriesAction,\n  GetCityAction,\n  GetCountryAdminDivisionAction,\n} from '../../../modules/ProjectLocationModule/actions';\nimport {\n  makeSelectCountries,\n  makeSelectProvinces,\n  makeSelectCities,\n  makeSelectDivisionName,\n} from '../../../modules/ProjectLocationModule/selectors';\nimport {\n  selectVisibleCountries,\n  getCountryDisabledPredicate,\n} from '../../../modules/ProjectLocationModule/countryFilter';\nimport {\n  Map,\n  List,\n  Set,\n  is,\n} from 'immutable';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {ListItem, Project} from '../../../models';\nimport {ProjectTrackerCreateProjectFormVariant} from '../../CreateNewProjectModal/constants';\nimport FieldMultiSelect, {IFieldMultiSelectComponentProps} from '../../../components/FieldMultiSelect';\nimport FieldMultiTextField, {IFieldMultiTextFieldComponentProps} from '../../../components/FieldMultiTextField';\nimport { createStructuredSelector } from 'reselect';\nimport {makeSelectLeadSources} from \"../../../modules/ListModule/selectors\";\nimport { ILeadSource } from '../../../modules/ListModule/reducer'\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport moment from 'moment';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../../components/FieldCheckbox';\nimport { makeSelectAutoTrackProjects, makeSelectDefaultProjectVisibility, makeSelectLoggedInUserData } from '../../../modules/AccountModule/selectors';\nimport AssignedTo from '../../../components/QuoteInfo/AssignedTo';\nimport { ProjectVisibility } from '../../../modules/AccountModule/constants';\n\nconst ITEM_HEIGHT = 30;\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1,\n    height: 250,\n  },\n  chip: {\n    margin: theme.spacing() / 4,\n  },\n  leadSourceSelect: {\n\n  },\n  // We had to use a lot of global selectors in order to style react-select.\n  // We are waiting on https://github.com/JedWatson/react-select/issues/1679\n  // to provide a much better implementation.\n  // Also, we had to reset the default style injected by the library.\n  '@global': {\n    '.Select-control': {\n      display: 'flex',\n      alignItems: 'center',\n      border: 0,\n      height: 'auto',\n      background: 'transparent',\n      '&:hover': {\n        boxShadow: 'none',\n      },\n    },\n    '.Select-multi-value-wrapper': {\n      flexGrow: 1,\n      display: 'flex',\n      flexWrap: 'wrap',\n    },\n    '.Select--multi .Select-input': {\n      margin: 0,\n    },\n    '.Select.has-value.is-clearable.Select--single > .Select-control .Select-value': {\n      padding: 0,\n    },\n    '.Select-noresults': {\n      padding: theme.spacing() * 2,\n    },\n    '.Select-input': {\n      display: 'inline-flex !important',\n      padding: 0,\n      height: 'auto',\n      width: 178,\n      outline: 'none',\n      border: 'none'\n    },\n    '.Select-input input': {\n      background: 'transparent',\n      border: 0,\n      padding: 0,\n      cursor: 'default',\n      display: 'inline-block',\n      fontFamily: 'inherit',\n      fontSize: 'inherit',\n      margin: 0,\n      outline: 0,\n    },\n    '.Select-placeholder, .Select--single .Select-value': {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      display: 'flex',\n      alignItems: 'center',\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(16),\n      padding: 0,\n    },\n    '.Select-placeholder': {\n      opacity: 0.42,\n      color: theme.palette.common.black,\n      width: '100%',\n    },\n    '.Select-menu-outer': {\n      backgroundColor: theme.palette.background.paper,\n      boxShadow: theme.shadows[2],\n      position: 'absolute',\n      left: 0,\n      top: `calc(100% + ${theme.spacing()}px)`,\n      width: '100%',\n      zIndex: 2,\n      maxHeight: ITEM_HEIGHT * 3,\n    },\n    '.Select.is-focused:not(.is-open) > .Select-control': {\n      boxShadow: 'none',\n    },\n    '.Select-menu': {\n      maxHeight: ITEM_HEIGHT * 3,\n      overflowY: 'auto',\n    },\n    '.Select-menu div': {\n      boxSizing: 'content-box',\n    },\n    '.Select-arrow-zone, .Select-clear-zone': {\n      color: theme.palette.action.active,\n      cursor: 'pointer',\n      height: 21,\n      width: 21,\n      zIndex: 1,\n    },\n    // Only for screen readers. We can't use display none.\n    '.Select-aria-only': {\n      position: 'absolute',\n      overflow: 'hidden',\n      clip: 'rect(0 0 0 0)',\n      height: 1,\n      width: 1,\n      margin: -1,\n    },\n  },\n});\ninterface IProjectFormComponentProps {\n  onSubmit: (values: any) => void;\n  variantSet: Set<ProjectTrackerCreateProjectFormVariant>;\n  data?: IMap<Project>;\n  form?: string;\n  filterOutCountryIds?: number[];\n  enabledCountryIds?: number[];\n}\n\ninterface IProjectForm extends IProjectFormComponentProps {\n  classes?: object;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  dispatch: React.Dispatch<IAction>;\n  formValues: Map<string, any>;\n  adminDivisions: Map<number, string>;\n  initialValues: IMap<Project>;\n  editMode: boolean;\n  forProjectTracker: boolean;\n  leadSources: List<IMap<ILeadSource>>;\n  defaultProjectVisibility: ProjectVisibility;\n  autoTrackProject: boolean;\n}\n\n// export const leadSourceArray = ['Dodge', 'ConstructConnect Insight', 'Toronto Construction Association', 'Constructo', 'BuildWorks Canada', 'ATS', 'Salle de Plans', 'Databid', 'Builders Exchange - NY', 'Builders Exchange - OH', 'Builders Exchange - KY', 'Biddingo', 'iSqFt', 'Coolnet', 'Other'];\n\nexport const FORM_NAME = 'NewProjectModalForm';\ntype NewProjectModalProps = WithTranslation & WithAmplitudeData & IProjectForm & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst minDateWarn = (value, allValues) => {\n  const noEarlierThan: Date = new Date();\n  const date: Date = new Date(value);\n  return dateNoEarlierThan(date, noEarlierThan, 'Bid date has passed')\n};\n\nconst validDate = makeDateValidator({});\n\nclass NewProjectModalForm extends React.PureComponent<NewProjectModalProps, {}> {\n\n  public componentDidMount() {\n    const {\n      getCountries,\n    } = this.props;\n    getCountries();\n  }\n\n  public componentDidUpdate(prevProps: NewProjectModalProps) {\n    const {\n      formValues: prevFormValues,\n    } = prevProps;\n    const {\n      formValues,\n      initialValues,\n    } = this.props;\n\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (prevFormValues == null || countryId !== prevFormValues.getIn(['location', 'country', 'id'])) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (prevFormValues == null || provinceId !== prevFormValues.getIn(['location', 'province', 'id'])) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n      untouch,\n      amplitudeData,\n    } = this.props;\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      if (isNaN(countryId)) {\n        amplitude.logEvent('NaN Province Search', amplitudeData({\n          countryId: _countryId,\n          type: typeof _countryId,\n          source: 'Project Modal',\n          data: countries?.toJS(),\n        }));\n      }\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(form, 'location.country', countries.find((country) => {\n        return String(country.get('id')) === String(_countryId);\n      })));\n    } else {\n      dispatch(change(form, 'location.country', null));\n    }\n    untouch('location.province.id');\n    untouch('location.city.id');\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n      untouch,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(form, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n    } else {\n      dispatch(change(form, 'location.province', null));\n    }\n    untouch('location.city.id');\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n    } else {\n      dispatch(change(form, 'location.city', null));\n    }\n  }\n\n  public handleFilterLeadSourceValues = (leadSourceList: any) => {\n    const {\n      formValues,\n      dispatch,\n      form,\n    } = this.props;\n\n    const formList = formValues != null ? formValues.get('leadSource') : Map<string, List<string>>();\n\n    const filteredLeadSourceList = formList && formList.filter((item, key) => {\n      return leadSourceList.includes(key)\n    })\n    dispatch(change(form, 'leadSource', filteredLeadSourceList));\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      onSubmit,\n      t,\n      countries,\n      provinces,\n      cities,\n      formValues = Map(),\n      variantSet,\n      forProjectTracker,\n      leadSources,\n      defaultProjectVisibility,\n      children,\n      editMode,\n      enabledCountryIds,\n    } = this.props;\n\n    const country = formValues.getIn(['location', 'country']) || Map();\n    const province = formValues.getIn(['location', 'province']) || Map();\n    const withLeadSource = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_LEAD_SOURCE)\n      ? <React.Fragment>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldMultiSelectComponentProps>>\n              name='leadSourceList'\n              component={FieldMultiSelect}\n              props={{\n                label: t('createNewProject.LeadSource'),\n                formControlProps: {\n                  fullWidth: true,\n                },\n                values: leadSources.toArray().map(leadSource => leadSource.get('value')),\n              }}\n              onChange={this.handleFilterLeadSourceValues}\n            />\n          </Grid>\n        </React.Fragment>\n      : null;\n\n    const withValuation = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_PROJECT_VALUATION)\n      ? <Grid\n          item={true}\n          sm={4}\n        >\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            props={{\n              label: t('createNewProject.ProjectValuation'),\n              formControlProps: {\n                fullWidth: true,\n              },\n              inputProps: {\n                autoComplete: 'no',\n                type: 'number'\n              }\n            }}\n            name='valuation'\n            validate={[isInteger]}\n            component={FieldTextField}\n          />\n        </Grid>\n      : null;\n\n    const leadSourceValues: List<string> | null = forProjectTracker ? formValues && formValues.get('leadSourceList') : null;\n    const leadSourceRefGroup = leadSourceValues && leadSourceValues.map((lead: string, index: number) => {\n      return <Grid\n          key={index}\n          item={true}\n          sm={4}\n        >\n          <Field<BaseFieldProps<IFieldMultiTextFieldComponentProps>>\n            name={`leadSource.${lead}`}\n            props={{\n              label: lead,\n              keyDelimiter: [9, 13],\n              formControlProps: {\n                style: {\n                  width: '100%',\n                }\n              }\n            }}\n            component={FieldMultiTextField}\n          />\n        </Grid>\n    });\n\n    const visibility = editMode ? formValues?.get('visibility') : defaultProjectVisibility;\n    const withAssignedTo = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_ASSIGNED_TO)\n      ? <React.Fragment>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <AssignedTo multiple={true} canSearchFirmUsers={visibility !== ProjectVisibility.OFFICE_ONLY} />\n          </Grid>\n        </React.Fragment>\n      : null;\n\n    const trackProject = variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_TRACK_PROJECT)\n      ? <div style={{ width: '100%', paddingLeft: 12 }}>\n          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n            name='trackProject'\n            component={FieldCheckbox}\n            props={{\n              label: t('createNewProject.trackProject'),\n              variant: 'single',\n              inputProps: {\n                color: 'primary',\n              }\n            }}\n          />\n        </div>\n      : null;\n\n    return (\n      <form\n        onSubmit={handleSubmit(onSubmit)}\n        style={{\n          padding: '24px 0',\n        }}\n      >\n        <Grid\n          container={true}\n          justify='flex-start'\n          alignItems='center'\n          spacing={3}\n        >\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewProject.InternalNumber'),\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  autoComplete: 'no',\n                }\n              }}\n              name='internalNo'\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_PROJECT_VALUATION) ? 4 : 8}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewProject.Name'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  autoComplete: 'no',\n                }\n              }}\n              name='name'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldTextField}\n            />\n          </Grid>\n          {withValuation}\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={countryName || t('placeholders.CountrySelection')}\n              props={{\n                label: t('createNewProject.Country'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.country.id')\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: countries.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  },\n                  getSuggestionDisabled: getCountryDisabledPredicate(enabledCountryIds),\n                },\n                inputProps: {\n                  onChange: this.selectCountry,\n                  type: 'text',\n                  autoComplete: 'no',\n                },\n              }}\n              name='location.country.id'\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldAutoSuggest}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={provinceName || t('placeholders.ProvinceSelection')}\n              props={{\n                label: t('createNewProject.StateProvince'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.province.id')\n                },\n                autosuggestProps:{\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: provinces.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return true;\n                  }\n                },\n                inputProps:{\n                  onChange: this.selectProvince,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty()\n                },\n              }}\n              name='location.province.id'\n              component={FieldAutoSuggest}\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n              // placeholder={cityName || t('placeholders.CitySelection')}\n              props={{\n                label: t('createNewProject.City'),\n                require: true,\n                formControlProps: {\n                  fullWidth: true,\n                  onBlur: () => this.props.touch('location.city.id')\n                },\n                autosuggestProps: {\n                  // highlightFirstSuggestion: true,\n                  directMode: false,\n                  data: cities.toJS(),\n                  renderMissingData: (value: any) => `Loading: ${value}`,\n                  shouldRenderSuggestions: (value: string = '') => {\n                    return value.length !== 0;\n                  }\n                },\n                inputProps: {\n                  onChange: this.selectCity,\n                  type: 'text',\n                  autoComplete: 'no',\n                  disabled: country.isEmpty() || province.isEmpty()\n                },\n              }}\n              name='location.city.id'\n              component={FieldAutoSuggest}\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewProject.Address'),\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  multiline: true,\n                  type: 'text',\n                  autoComplete: 'no',\n                },\n              }}\n              name='address'\n              component={FieldTextField}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n              props={{\n                keyboardDatePickerProps: {\n                  label: `${t('createNewProject.BidDate')} *`,\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n              }}\n              name='bidDate'\n              warn={[minDateWarn]}\n              validate={[required, validDate]}\n              component={FieldDatePickerV2}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            sm={4}\n          >\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              props={{\n                label: t('createNewProject.Area'),\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  autoComplete: 'no',\n                }\n              }}\n              name='area'\n              validate={[\n                isNumberGreaterThanZero,\n              ]}\n              component={FieldTextField}\n            />\n          </Grid>\n          {withLeadSource}\n          {leadSourceRefGroup}\n          {withAssignedTo}\n          {trackProject}\n        </Grid>\n        {children}\n      </form>\n    );\n  }\n}\n\nconst mapStateToProps = (state: any, ownProps: IProjectFormComponentProps) => {\n\n  const editMode = ownProps.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_EDIT_MODE);\n  const forProjectTracker = ownProps.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_PROJECT_TRACKER);\n  const withAssignedTo = ownProps.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_ASSIGNED_TO);\n  const withTrackProject = ownProps.variantSet.has(ProjectTrackerCreateProjectFormVariant.WITH_TRACK_PROJECT);\n\n    // before\n    // {\n    //   \"ATS\":[\n    //     \"ats1\",\n    //     \"ats2\"\n    //   ],\n    //   \"Salle de Plans\":[\n    //       \"sa1\",\n    //       \"sa2\"\n    //   ]\n    // }\n\n    // after\n    // [\n    //   {\n    //     id: 'ATS',\n    //     source: ['ats1', 'ats2']\n    //   },\n    //   {\n    //     id: 'ATS 2',\n    //     source: ['ats1', 'ats2']\n    //   }\n    // ]\n\n\n  // set up initial values\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const leadSource: List<Map<string, List<string>>> = data.get('leadSource') || List<Map<string, List<string>>>();\n\n  const leadSourceList = leadSource.map((source) => source.get('id'));\n\n  const leadSourceForReduxForm = Map<string, List<string>>().withMutations((leadSourceCtx) => {\n    leadSource.forEach((withIdAndSource: any) => {\n      leadSourceCtx.set(withIdAndSource.get('id'), withIdAndSource.get('source'))\n    })\n  });\n\n  const bidDate = data.get('bidDate') && moment.utc(data.get('bidDate')).toISOString();\n\n  const _trackProject = makeSelectAutoTrackProjects()(state);\n  const trackProject = withTrackProject && (data.get('trackProject') ?? _trackProject);\n\n  const loggedInUserData = makeSelectLoggedInUserData()(state);\n\n  const initialValues = ((data || Map<string, any>()) as Map<string, any>).merge({\n    'leadSourceList': leadSourceList,\n    'leadSource': leadSourceForReduxForm,\n    'bidDate': bidDate,\n    trackProject,\n    'assignedTo': data.get('assignedTo') ?? ((withAssignedTo && loggedInUserData) ? List([loggedInUserData]) : List()),\n  });\n\n  // const initialValues = Map<string, any>();\n\n  const form = ownProps.form != null\n    ? ownProps.form\n    : FORM_NAME;\n    // : editMode\n    //   ? `${FORM_NAME}Edit`\n    //   : FORM_NAME;\n\n  const rawCountriesList = makeSelectCountries()(state);\n  const countries = selectVisibleCountries(rawCountriesList, {\n    enabledCountryIds: ownProps.enabledCountryIds,\n    filterOutCountryIds: ownProps.filterOutCountryIds,\n  });\n\n  return {\n    form,\n    initialValues,\n    editMode,\n    forProjectTracker,\n    countries,\n    ...createStructuredSelector({\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      leadSources: makeSelectLeadSources(),\n      defaultProjectVisibility: makeSelectDefaultProjectVisibility(),\n      formValues: getFormValues(form),\n    })(state)\n  };\n};\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectFormComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: FORM_NAME }),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: false,\n  }),\n)(NewProjectModalForm);\n","export default __webpack_public_path__ + \"static/media/quoteSample.6a111e5a.png\";","import * as React from 'react';\nimport { IconButton, makeStyles, TableCell, TableRow, TextField } from '@material-ui/core';\nimport {\n  arrayRemove,\n  change,\n} from 'redux-form';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { QUOTE_PRINT_FORMAT_FORM_NAME } from '.';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { round } from '../../utils/parseFormulaFields';\n\ninterface IProductRowProps {\n  drawingLabel: string;\n  productNumber: string;\n  listPrice: number;\n  isMissing: boolean;\n  qty: number;\n  index: number;\n}\n\nconst regex = /^[1-9]+[0-9]*$/;\n\nconst useStyles = makeStyles((theme) => ({\n  qtyColumnCell: {\n    maxWidth: 81,\n  },\n}));\n\nconst ProductRow = ({ drawingLabel, productNumber, listPrice, isMissing, qty, index }: IProductRowProps) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation();\n  const classes = useStyles();\n  const price = isMissing ? t('translations:QuotePrintFormat.missing') : `$${(listPrice * qty).toFixed(2)}`;\n\n  return (\n    <TableRow>\n      <TableCell size='small'>\n        {drawingLabel}\n      </TableCell>\n      <TableCell size='small'>\n        {productNumber}\n      </TableCell>\n      <TableCell size='small'>\n        {price}\n      </TableCell>\n      <TableCell size='small' className={classes.qtyColumnCell}>\n        <TextField\n          type='number'\n          value={qty}\n          onChange={(e) => {\n            const newQty = e.target.value;\n            if (regex.test(newQty) && Number(newQty) <= 2147483647) {\n              dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, `products[${index}].qty`, newQty));\n            }\n          }}\n        />\n      </TableCell>\n      <TableCell size='small' align='center'>\n        <IconButton\n          size='small'\n          onClick={() => {\n            dispatch(arrayRemove(QUOTE_PRINT_FORMAT_FORM_NAME, 'products', index));\n          }}\n        >\n          <DeleteIcon />\n        </IconButton>\n      </TableCell>\n    </TableRow>\n  );\n};\n\nexport default React.memo(ProductRow);","import * as React from 'react';\nimport {\n    Theme,\n    WithStyles,\n    Grid,\n    Paper,\n    Typography,\n    TableRow,\n    TableContainer,\n    Table,\n    TableHead,\n    TableCell,\n    TableBody,\n    Radio,\n    FormControl,\n    RadioGroup,\n    FormControlLabel,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Map,\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport {\n    Field,\n    getFormValues,\n    reduxForm\n} from 'redux-form/immutable';\nimport quoteSample from '../../images/printPage/quoteSample.png';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport { makeSelectSpecs } from '../../modules/SpecModule/selectors';\nimport { ListItem, Office, Spec } from '../../models';\nimport { StyleRules } from '@material-ui/styles';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport { isNotEmpty, isNotEmptyStringRequired, required } from '../../validators';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../FieldAutoSuggest';\nimport { GetCityAction, GetCountriesAction, GetCountryAdminDivisionAction, GetProvinceAction } from '../../modules/ProjectLocationModule/actions';\nimport { makeSelectCities, makeSelectCountries, makeSelectProvinces } from '../../modules/ProjectLocationModule/selectors';\nimport { makeSelectProjectSpecConfig } from '../../modules/ProjectModule/selectors';\nimport { DetailConfig } from '../../modules/ProjectModule/reducer';\nimport ProductRow from './ProductRow';\nimport classnames from 'classnames';\nimport { makeSelectUserHasNuAirMultiplier, makeSelectUserHasNuAirSmallIndependentAcl, makeSelectUserHasNuAirWholesaleAcl } from '../../modules/AtsModule/selectors';\nimport { WithProjectId, withProjectId } from '../../hoc';\nimport { makeSelectLoggedInUserOffice } from '../../modules/AccountModule/selectors';\n\n\nexport const QUOTE_PRINT_FORMAT_FORM_NAME = 'QuotePrintFormatPrint';\n\n// categories to round instead of flooring\nconst CATEGORIES_TO_ROUND = {\n  2859: true,\n};\n\n// categories to bypass truck and skid check\nconst CATEGORIES_TO_BYPASS_CHECK = {\n  2858: true,\n};\n\ninterface IQuotePrintFormatComponentProps {\n}\n\ninterface IQuotePrintFormatProps extends IQuotePrintFormatComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  formValues: Map<string, any>;\n  projectSpecDetailConfig: DetailConfig;\n  specs: Map<number, IMap<Spec>>;\n  loggedInUserOffice: IMap<Office>;\n  nuAirMultiplier: number;\n  userHasNuAirSmallIndependentAcl: boolean;\n  userHasNuAirWholesaleAcl: boolean;\n}\n\ntype QuotePrintFormatProps = IQuotePrintFormatProps & WithTranslation & WithProjectId & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\nconst sampleModalKey = 'QuotePrintFormatSampleModalKey';\n\nclass QuotePrintFormat extends React.Component<QuotePrintFormatProps> {\n  public state = {\n    locationDataSource: 'custom', // custom, project, office\n  };\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      projectSpecDetailConfig,\n      specs,\n    } = this.props;\n\n    dispatch(new GetCountriesAction());\n\n    dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'products', constructSelectedProducts(projectSpecDetailConfig, specs)));\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      untouch,\n    } = this.props;\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.country', countries.find((country) => {\n        return String(country.get('id')) === String(_countryId);\n      })));\n    } else {\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.country', null));\n    }\n    untouch('location.province');\n    untouch('location.city');\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      untouch,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n    } else {\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.province', null));\n    }\n    untouch('location.city');\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n    } else {\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location.city', null));\n    }\n  }\n\n  public calcUnitListPrice = (product) => {\n    const {\n      nuAirMultiplier,\n      userHasNuAirSmallIndependentAcl,\n      userHasNuAirWholesaleAcl,\n    } = this.props;\n\n    const rawListPrice = Number(product.get('listPrice')) || 0;\n    const qty = Number(product.get('qty')) || 1;\n    const skidQuantity = product.getIn(['bulkPrice', 'skid', 'CAD', 'quantity']) || 0;\n    const skidPrice = Number(product.getIn(['bulkPrice', 'skid', 'CAD', 'price'])) || 0;\n    const truckQuantity = product.getIn(['bulkPrice', 'truck', 'CAD', 'quantity']) || 0;\n    const truckPrice = Number(product.getIn(['bulkPrice', 'truck', 'CAD', 'price'])) || 0;\n\n    // categories to bypass acl checks\n    if (CATEGORIES_TO_BYPASS_CHECK[product.get('categoryId')]) {\n      return Math.floor(rawListPrice);\n    }\n\n    if (truckQuantity > 0 && truckPrice > 0 && qty >= truckQuantity && (userHasNuAirSmallIndependentAcl || userHasNuAirWholesaleAcl)) {\n      return truckPrice;\n    } else if (skidQuantity > 0 && skidPrice > 0 && qty >= skidQuantity && userHasNuAirWholesaleAcl) {\n      return skidPrice;\n    } else {\n      if (CATEGORIES_TO_ROUND[product.get('categoryId')]) {\n        return Math.round(rawListPrice * nuAirMultiplier);\n      }\n      return Math.floor(rawListPrice * nuAirMultiplier);\n    }\n  }\n\n  public checkIsMissing = (product) => {\n    const {\n      userHasNuAirSmallIndependentAcl,\n      userHasNuAirWholesaleAcl,\n    } = this.props;\n\n    const qty = Number(product.get('qty')) || 1;\n    const listPrice = product.get('listPrice') || 0;\n    const isPoa = product.get('isPoa') || false;\n\n    if (listPrice && !isPoa) {\n      return false;\n    }\n\n    // this check needs to go before the truck/skid checks\n    if (CATEGORIES_TO_BYPASS_CHECK[product.get('categoryId')]) {\n      return true;\n    }\n\n    if (\n        (userHasNuAirSmallIndependentAcl || userHasNuAirWholesaleAcl)\n        && product.getIn(['bulkPrice', 'truck', 'CAD', 'quantity'])\n        && qty >= product.getIn(['bulkPrice', 'truck', 'CAD', 'quantity'])\n        && Number(product.getIn(['bulkPrice', 'truck', 'CAD', 'price']))\n      ) {\n      return false;\n    }\n\n    if (\n      userHasNuAirWholesaleAcl\n      && product.getIn(['bulkPrice', 'skid', 'CAD', 'quantity'])\n      && qty >= product.getIn(['bulkPrice', 'skid', 'CAD', 'quantity'])\n      && Number(product.getIn(['bulkPrice', 'skid', 'CAD', 'price']))\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  public handleChangeLocationDataSource = (event: React.ChangeEvent<HTMLInputElement>) => {\n    const { dispatch, project, loggedInUserOffice } = this.props;\n    const { value } = event.target;\n    this.setState({ locationDataSource: value });\n\n    if (value === 'project' && project) {\n      dispatch(new GetProvinceAction(Number(project.getIn(['location', 'country', 'id']))));\n      dispatch(new GetCountryAdminDivisionAction({ countryId: Number(project.getIn(['location', 'country', 'id'])) }));\n      dispatch(new GetCityAction(project.getIn(['location', 'province', 'id'])));\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location', fromJS({\n        country: project.getIn(['location', 'country']),\n        province: project.getIn(['location', 'province']),\n        city: project.getIn(['location', 'city']),\n        address1: project.get('address'),\n        postalZip: project.getIn(['location', 'postalZip']),\n      })));\n    } else if (value === 'office' && loggedInUserOffice) {\n      const officeLocation = loggedInUserOffice.get('location') || Map();\n      dispatch(new GetProvinceAction(Number(officeLocation.getIn(['country', 'id']))));\n      dispatch(new GetCountryAdminDivisionAction({ countryId: Number(officeLocation.getIn(['country', 'id'])) }));\n      dispatch(new GetCityAction(officeLocation.getIn(['province', 'id'])));\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location', fromJS({\n        country: officeLocation.get('country'),\n        province: officeLocation.get('province'),\n        city: officeLocation.get('city'),\n        address1: loggedInUserOffice.get('address1'),\n        postalZip: loggedInUserOffice.get('postalZip'),\n      })));\n    } else {\n      // custom, or a source whose data is not loaded: clear the fields rather than throw on the\n      // missing project or office (Sentry issue 7721703926)\n      if (value !== 'custom') {\n        console.warn('No data for the selected location source, clearing the location fields.', { value }); // tslint:disable-line\n      }\n      dispatch(change(QUOTE_PRINT_FORMAT_FORM_NAME, 'location', fromJS({\n        country: null,\n        province: null,\n        city: null,\n        address1: '',\n        postalZip: '',\n      })));\n      this.selectCountry(null, false);\n      this.selectProvince(null, false);\n      this.selectCity(null);\n    }\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      formValues,\n      countries,\n      provinces,\n      cities,\n    } = this.props;\n\n    const country = formValues?.getIn(['location', 'country']) || Map();\n    const province = formValues?.getIn(['location', 'province']) || Map();\n    const products = formValues?.get('products') || List();\n\n    return (\n      <form>\n        <PrintWrapper>\n          <PrintHeader\n            title={t('QuotePrintFormat.quote')}\n            description={t('QuotePrintFormat.description')}\n            src={pdfIcon}\n            sampleModalKey={sampleModalKey}\n            sampleSrc={quoteSample}\n            sampleAlt={t('QuotePrintFormatPrint.imageAlt')}\n          />\n          <div className={classes.row}>\n            <Paper className={classes.rowItem} elevation={0}>\n              <Typography variant='body2' color='inherit'>{t('QuotePrintFormat.shippingInfoSectionLabel')}</Typography>\n              <FormControl component='fieldset'>\n                <Typography variant='body1' color='inherit' style={{ marginTop: 8 }}>{t('QuotePrintFormat.locationSourceLabel')}</Typography>\n                <RadioGroup aria-label='locationSource' row={true} name='locationSource' value={this.state.locationDataSource} onChange={this.handleChangeLocationDataSource}>\n                  <FormControlLabel value='custom' control={<Radio color='primary' />} label={t('QuotePrintFormat.userInputSourceOptionLabel')} />\n                  <FormControlLabel value='project' control={<Radio color='primary' />} label={t('QuotePrintFormat.projectSourceOptionLabel')} />\n                  <FormControlLabel value='office' control={<Radio color='primary' />} label={t('QuotePrintFormat.officeSourceOptionLabel')} />\n                </RadioGroup>\n              </FormControl>\n              <Grid container={true} spacing={1}>\n                <Grid item={true} xs={3}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.attentionLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    name='attention'\n                    component={FieldTextField}\n                    validate={[isNotEmptyStringRequired]}\n                  />\n                </Grid>\n                <Grid item={true} xs={9}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.addressLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    name='location.address1'\n                    component={FieldTextField}\n                    validate={[isNotEmptyStringRequired]}\n                  />\n                </Grid>\n              </Grid>\n              <Grid container={true} spacing={1}>\n                <Grid item={true} xs={3}>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.postalCodeLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    name='location.postalZip'\n                    component={FieldTextField}\n                    validate={[isNotEmptyStringRequired]}\n                  />\n                </Grid>\n                <Grid item={true} xs={3}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.countryLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                        onBlur: () => this.props.touch('location.country.id')\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: countries.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCountry,\n                        type: 'text',\n                        autoComplete: 'no',\n                      },\n                    }}\n                    name='location.country.id'\n                    validate={[\n                      required,\n                      isNotEmpty\n                    ]}\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid item={true} xs={3}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.StateProvinceLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                        onBlur: () => this.props.touch('location.province.id')\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: provinces.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectProvince,\n                        type: 'text',\n                        autoComplete: 'no',\n                        disabled: country.isEmpty()\n                      },\n                    }}\n                    name='location.province.id'\n                    component={FieldAutoSuggest}\n                    validate={[\n                      required,\n                      isNotEmpty\n                    ]}\n                  />\n                </Grid>\n                <Grid item={true} xs={3}>\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('QuotePrintFormat.cityLabel'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true,\n                        onBlur: () => this.props.touch('location.city.id')\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: cities.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return value.length !== 0;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCity,\n                        type: 'text',\n                        autoComplete: 'no',\n                        disabled: country.isEmpty() || province.isEmpty()\n                      },\n                    }}\n                    name='location.city.id'\n                    component={FieldAutoSuggest}\n                    validate={[\n                      required,\n                      isNotEmpty\n                    ]}\n                  />\n                </Grid>\n              </Grid>\n            </Paper>\n          </div>\n\n          <Typography variant='body2' color='inherit' className={classes.productListTitle}>{t('QuotePrintFormat.productListSectionLabel')}</Typography>\n          <div>\n            <Paper className={classnames(classes.rowItem, classes.productTable)} elevation={0}>\n              <TableContainer>\n                <Table>\n                  <TableHead>\n                    <TableRow>\n                      <TableCell size='small' className={classes.columnHeaderCell}>{t('QuotePrintFormat.labelColumnLabel')}</TableCell>\n                      <TableCell size='small' className={classes.columnHeaderCell}>{t('QuotePrintFormat.productNumberColumnLabel')}</TableCell>\n                      <TableCell size='small' className={classes.columnHeaderCell}>{t('QuotePrintFormat.priceColumnLabel')}</TableCell>\n                      <TableCell size='small' className={classnames(classes.columnHeaderCell, classes.qtyColumnCell)}>{t('QuotePrintFormat.qtyColumnLabel')}</TableCell>\n                      <TableCell size='small' align='center' className={classes.columnHeaderCell}>{t('QuotePrintFormat.actionColumnLabel')}</TableCell>\n                    </TableRow>\n                  </TableHead>\n                  <TableBody>\n                    {products.map((product, index) => {\n                      const drawingLabel = product.get('drawingLabel') || '';\n                      const productNumber = product.get('productNumber') || '';\n                      const qty = product.get('qty') || 1;\n                      const listPrice = this.calcUnitListPrice(product);\n                      const isMissing = this.checkIsMissing(product);\n\n                      return (\n                        <ProductRow\n                          key={index}\n                          drawingLabel={drawingLabel}\n                          productNumber={productNumber}\n                          isMissing={isMissing}\n                          listPrice={listPrice}\n                          qty={qty}\n                          index={index}\n                        />\n                      );\n                    })}\n                  </TableBody>\n                </Table>\n              </TableContainer>\n            </Paper>\n          </div>\n        </PrintWrapper>\n      </form>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  },\n  productListTitle: {\n    margin: theme.spacing(1, 0, 1),\n  },\n  productTable: {\n    maxHeight: 264,\n    overflowY: 'auto',\n    padding: theme.spacing(1, 0),\n  },\n  columnHeaderCell: {\n    color: theme.palette.text.secondary\n  },\n  qtyColumnCell: {\n    maxWidth: 81,\n  },\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  return {\n    form: QUOTE_PRINT_FORMAT_FORM_NAME,\n    ...createStructuredSelector({\n      projectSpecDetailConfig: makeSelectProjectSpecConfig({}),\n      specs: makeSelectSpecs(),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      formValues: getFormValues(QUOTE_PRINT_FORMAT_FORM_NAME),\n      nuAirMultiplier: makeSelectUserHasNuAirMultiplier(),\n      userHasNuAirSmallIndependentAcl: makeSelectUserHasNuAirSmallIndependentAcl(),\n      userHasNuAirWholesaleAcl: makeSelectUserHasNuAirWholesaleAcl(),\n      loggedInUserOffice: makeSelectLoggedInUserOffice(),\n    })(state)\n  };\n};\n\nconst constructSelectedProducts = (projectSpecDetailConfig, specs) => {\n  const selectedProducts = projectSpecDetailConfig.reduce((selectedProductsAcc, drawings, specId) => {\n    if (!specs.has(specId)) {\n      return selectedProductsAcc;\n    }\n\n    const checkedDrawingIds = drawings.reduce((acc, partialDrawing, drawingId) => {\n      if (partialDrawing.get('checked')) {\n        return acc.push(drawingId);\n      }\n      return acc;\n    }, List());\n\n    if (checkedDrawingIds.size === 0) {\n      return selectedProductsAcc;\n    }\n\n    const selectedDrawingProducts = specs.getIn([specId, 'drawings']).reduce((acc, drawing) => {\n      const drawingId = drawing.get('id');\n      if (!checkedDrawingIds.includes(drawingId)) {\n        return acc;\n      }\n      const drawingProducts = drawing.get('products').reduce((_acc, product) => {\n        return _acc.push(fromJS({\n          drawingLabel: drawing.get('name') || '',\n          productNumber: product.get('productNumber'),\n          listPrice: product.getIn(['price', 'default', 'CAD', 'list']),\n          isPoa: product.getIn(['price', 'default', 'CAD', 'isPoa']) ?? false,\n          // isMissing: product.getIn(['price', 'default', 'CAD', 'isPoa']) || !(Number(product.getIn(['price', 'default', 'CAD', 'list'])) > 0),\n          qty: 1,\n          specProductId: product.get('specProductId'),\n          bulkPrice: product.get('bulkPrice'),\n          categoryId: product.get('category'),\n        }));\n      }, List());\n      return acc.concat(drawingProducts);\n    }, List());\n\n    return selectedProductsAcc.concat(selectedDrawingProducts);\n  }, List());\n\n  return selectedProducts;\n};\n\nexport default compose<React.ComponentClass<IQuotePrintFormatComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withProjectId({ withProject: true }),\n  reduxForm({\n    form: QUOTE_PRINT_FORMAT_FORM_NAME,\n    enableReinitialize : true,\n  }),\n  withTranslation('translations'),\n)(QuotePrintFormat);\n","import { Button, CircularProgress, createStyles, Divider, Grid, IconButton, ListItem, makeStyles, Theme, Tooltip, Typography, useTheme } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { BaseFieldProps, change, WrappedFieldArrayProps, arrayMove } from 'redux-form';\nimport { Field } from 'redux-form/immutable';\nimport PimAttribute from '../../../models/PimAttribute';\nimport PimAttributeOption from '../../../models/PimAttributeOption';\nimport FieldReactSelect, { fieldReactSelectStyles, IFieldReactSelectComponentProps } from '../../../components/FieldReactSelect';\nimport NoOptionsMessage from '../Attributes/NoOptionsMessage';\nimport AddIcon from '@material-ui/icons/Add';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { DragDropContext, Draggable, Droppable, DropResult, ResponderProvided } from 'react-beautiful-dnd';\nimport HeightIcon from '@material-ui/icons/Height';\nimport { LEFT_COLUMN_WIDTH, OPTIONS_DIALOG_FORM } from '.';\nimport { useDispatch } from 'react-redux';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { DESCRIPTION_DIALOG_ID } from '../../../containers/PimDescriptionsListPage/DescriptionDialog';\nimport { PureAttributeOption, Series } from '../../../models';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport FieldSwitch, { IFieldSwitchComponentProps } from '../../../components/FieldSwitch';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../../components/FieldDropzone';\nimport { acceptedMainImageExtensions, mainImageUploadValidation } from '../SeriesInfo';\nimport FileLocalizationSelector from '../../../components/FileLocalizationSelector';\nimport Language from '../../../models/Language';\nimport CutsheetDisplay from './CutsheetDisplay';\nimport ReactDOM from 'react-dom';\nconst portal: HTMLElement = document.createElement('div');\n\nif (!document.body) {\n  throw new Error('body not ready for portal creation!');\n}\n\ndocument.body.appendChild(portal);\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  iconPadding: {\n    paddingLeft: theme.spacing(2),\n    paddingTop: theme.spacing(3.75),\n  },\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200],\n    }\n  },\n}));\n\nexport interface IDescriptionsFieldArrayComponentProps {\n  options: List<IMap<PimAttributeOption>>;\n  isFetchingAttributeOptions: boolean;\n  formAttribute: IMap<PimAttribute>;\n  formValues: List<IMap<PimAttributeOption>>;\n  onDescriptionFocus: any;\n  series: IMap<Series>;\n  hasPimPrintDescriptionAcl: boolean;\n  canManageAttributeManagement: boolean;\n  formUseSwatch: boolean;\n  formUseImage: boolean;\n  formUseSpec: boolean;\n  isCategoryLocked: boolean;\n}\n\ntype DescriptionsFieldArrayProps = WrappedFieldArrayProps<{}> & IDescriptionsFieldArrayComponentProps & WithTranslation;\n\nconst DescriptionsFieldArray: React.FC<DescriptionsFieldArrayProps> = (props) => {\n  const {\n    fields,\n    options,\n    isFetchingAttributeOptions,\n    formAttribute,\n    formValues,\n    onDescriptionFocus,\n    series,\n    hasPimPrintDescriptionAcl,\n    canManageAttributeManagement,\n    formUseSwatch,\n    formUseImage,\n    formUseSpec,\n    isCategoryLocked,\n    t,\n  } = props;\n\n  const classes = useStyles();\n  const theme = useTheme();\n  const dispatch = useDispatch();\n\n  const [descriptionInputValue, setDescriptionInputValue] = React.useState('');\n  const [newlyDeletedOptionValueIds, setNewlyDeletedOptionValueIds] = React.useState([]);\n  const [selectedLanguage, setSelectedLanguage] = React.useState<Language>('en');\n\n  const attributeKey = formAttribute?.get('attributeKey');\n  const originalSeriesOptionValues = attributeKey && series?.getIn(['attributes', attributeKey, 'values']);\n  const originalSeriesDeletedOptionValueIds = originalSeriesOptionValues?.filter((value) => value.get('status') === 'deleted')?.map((value) => value.get('id'));\n\n  const disabledDrag = fields.length < 2;\n\n  const onDragEnd = (result: DropResult, provider: ResponderProvided) => {\n     if (!result.destination) {\n      return;\n    }\n\n    const sourceIndex = result.source.index;\n    const destinationIndex = result.destination.index;\n    if (destinationIndex === sourceIndex) {\n      return;\n    }\n    const removed = formValues.get(sourceIndex);\n    const newFormValues = formValues.splice(result.source.index, 1).splice(result.destination.index, 0, removed);\n    dispatch(change(OPTIONS_DIALOG_FORM, `values`, newFormValues));\n  };\n\n  const openDialog = () => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: DESCRIPTION_DIALOG_ID,\n      open: true\n    }));\n  };\n\n  const removeSwatch = (index: number) => {\n    dispatch(change(OPTIONS_DIALOG_FORM, `values[${index}].swatch`, null));\n    dispatch(change(OPTIONS_DIALOG_FORM, `values[${index}].swatchDropzone`, null));\n  };\n\n  const removeImage = (index: number) => {\n    dispatch(change(OPTIONS_DIALOG_FORM, `values[${index}].optionBasedProductImage`, null));\n    dispatch(change(OPTIONS_DIALOG_FORM, `values[${index}].imageDropzone`, null));\n  };\n\n  return (\n    <DragDropContext onDragEnd={onDragEnd}>\n      <Droppable droppableId='droppable'>\n        {\n          provided => (\n            <div ref={provided.innerRef} {...provided.droppableProps} style={{ width: '100%' }}>\n              {\n                fields.map((value, index) => {\n                  return (\n                    <Draggable key={index} isDragDisabled={disabledDrag} draggableId={value + index} index={index}>\n                      {\n                        (provided2, snapshot2) => {\n                          const style = {\n                            paddingBottom: theme.spacing(3),\n                            ...provided2.draggableProps.style\n                          };\n                          const child = (\n                              <Grid\n                                  ref={provided2.innerRef}\n                                  {...provided2.draggableProps}\n                                  {...provided2.dragHandleProps}\n                                  item={true}\n                                  key={index}\n                                  container={true}\n                                  alignItems='flex-start'\n                                  style={style}\n                              >\n                                <Grid item={true} style={{ width: LEFT_COLUMN_WIDTH, paddingTop: theme.spacing(3.75) }}>\n                                  <HeightIcon color={disabledDrag ? 'disabled' : 'action'} />\n                                </Grid>\n                                <Grid xs={9} item={true}>\n                                  <Typography variant='caption' noWrap={true}>\n                                    {t('AttributesDialog.optionDescription')}\n                                  </Typography>\n                                  <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                                      name={value}\n                                      component={FieldReactSelect}\n                                      inputProps={{\n                                        options: isFetchingAttributeOptions ? [] : options.toList(),\n                                        onChange: (option) => {\n                                          const seriesAttributeOptionId = formValues.getIn([index, 'seriesAttributeOptionId']);\n                                          if (seriesAttributeOptionId) {\n                                            dispatch(change(OPTIONS_DIALOG_FORM, `values.${index}.seriesAttributeOptionId`, seriesAttributeOptionId));\n                                          }\n                                        },\n                                        getOptionValue: (option) => option.get('value'),\n                                        getOptionLabel: (option) => (\n                                            <Tooltip title={[option.get('description'), option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}>\n                                              <div>\n                                                {option.get('description')} - <span className={classes.span}>{[option.get('value'), option.get('unit')].filter(x => x || x === 0).join(' - ')}</span>\n                                              </div>\n                                            </Tooltip>\n                                        ),\n                                        filterOption: (option, inputValue: string) => {\n                                          const label = option.label.props.title.toLowerCase();\n                                          return label.includes(inputValue.toLowerCase());\n                                        },\n                                        placeholder: t('AttributesDialog.addDescription'),\n                                        components: {\n                                          Option: ({value: _value, innerProps, data, label}) => {\n                                            const hasBeenDeleted = originalSeriesDeletedOptionValueIds?.includes(data.get('optionId'));\n                                            const isReplacingWithNewlyDeleted = newlyDeletedOptionValueIds.includes(data.get('optionId')) && formValues.getIn([index, 'seriesAttributeOptionId']);\n                                            const disabled = Boolean(hasBeenDeleted && formValues.getIn([index, 'seriesAttributeOptionId'])) || Boolean(isReplacingWithNewlyDeleted);\n                                            return (\n                                                <ListItem\n                                                    value={_value}\n                                                    disabled={disabled || isReplacingWithNewlyDeleted}\n                                                    disableGutters={false}\n                                                    {...innerProps}\n                                                    className={classes.optionComponentRoot}\n                                                    style={{ cursor: disabled ? 'default' : 'pointer' }}\n                                                    onClick={disabled ? (e) => e.stopPropagation() : innerProps.onClick}\n                                                >\n                                                  <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                                                    {label}\n                                                    {\n                                                      hasBeenDeleted && (\n                                                          <Tooltip title={t('configuratorPage.optionsWidget.deletedValueSelectionTooltip')}>\n                                                            <WarningIcon color='action' />\n                                                          </Tooltip>\n                                                      )\n                                                    }\n                                                  </Grid>\n                                                </ListItem>\n                                            );\n                                          }\n                                        },\n                                        styles: fieldReactSelectStyles(theme),\n                                        menuPosition: 'fixed',\n                                        menuShouldScrollIntoView: false,\n                                        isDisabled: !Boolean(formAttribute),\n                                        isLoading: isFetchingAttributeOptions,\n                                        loadingMessage: () => (\n                                            <Grid container={true} justify='center' alignContent='center' wrap='nowrap'>\n                                              <CircularProgress size='1.25rem' style={{ marginRight: 8 }} />\n                                              {t('generalLoading.searching')}\n                                            </Grid>\n                                        ),\n                                        onInputChange: (val: string) => setDescriptionInputValue(val),\n                                        noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newDescription')} disableButton={isCategoryLocked} onClick={canManageAttributeManagement ? () => {\n                                          dispatch(new SetOverlayComponentPropsAction({\n                                            id: DESCRIPTION_DIALOG_ID,\n                                            props: {\n                                              description: descriptionInputValue,\n                                              successCB: (newAttributeOption: IMap<PureAttributeOption>) => {\n                                                const newAttributeOptionId = newAttributeOption.get('id');\n\n                                                const convertedAttributeOption = fromJS({\n                                                  optionId: newAttributeOptionId,\n                                                  optionKey: newAttributeOption.get('key'),\n                                                  description: newAttributeOption.get('description'),\n                                                  unit: newAttributeOption.get('unit'),\n                                                  value: newAttributeOption.get('value'),\n                                                  seriesAttributeOptionId: formValues.getIn([index, 'seriesAttributeOptionId']) ?? null,\n                                                });\n\n                                                // pre-populate feature modal form with new attribute option description\n                                                dispatch(change(OPTIONS_DIALOG_FORM, `values.${index}`, convertedAttributeOption));\n                                                dispatch(change(OPTIONS_DIALOG_FORM, `values.${index}.printDescription.csi`, null));\n                                              }\n                                            }\n                                          }));\n                                          openDialog();\n                                        } : null} />,\n                                        onFocus: () => onDescriptionFocus(index),\n                                      }}\n                                      formControlProps={{\n                                        fullWidth: true\n                                      }}\n                                      helperText={false}\n                                  />\n                                  {hasPimPrintDescriptionAcl &&\n                                  <Grid\n                                      item={true}\n                                      container={true}\n                                      style={{ paddingTop: theme.spacing() }}\n                                  >\n                                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                                        name={`values[${index}].displayPrintDescription`}\n                                        component={FieldSwitch}\n                                        props={{\n                                          label: t('SeriesDetailPage.displayPrintDescription'),\n                                          inputProps: {\n                                            color: 'primary',\n                                            disabled: !formValues.getIn([index, 'optionId'])\n                                          }\n                                        }}\n                                    />\n                                    { formValues.getIn([index, 'displayPrintDescription']) &&\n                                    <Grid container={true}>\n                                      <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center'>\n                                        <Typography>{t('SeriesDetailPage.printDescription')}</Typography>\n                                        <Button\n                                            color='primary'\n                                            onClick={() => dispatch(change(OPTIONS_DIALOG_FORM, `values[${index}].printDescription.csi`, null))}\n                                            disabled={!formValues.getIn([index, 'printDescription', 'csi'])}\n                                        >{t('formButtons.clear')}</Button>\n                                      </Grid>\n                                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                                          name={`values[${index}].printDescription.csi`}\n                                          props={{\n                                            inputProps: {\n                                              type: 'text',\n                                              multiline: true\n                                            },\n                                            formControlProps: {\n                                              fullWidth: true\n                                            }\n                                          }}\n                                          component={FieldTextField}\n                                      />\n                                    </Grid>\n                                    }\n                                  </Grid>\n                                  }\n                                  {/* swatch upload */}\n                                  {formUseSwatch &&\n                                  <Grid\n                                      item={true}\n                                      style={{marginTop: 8, marginBottom: 16}}\n                                  >\n                                    <Typography>{t('configuratorPage.optionsWidget.swatchPreview')}</Typography>\n                                    <Grid container={true} alignItems='flex-end'>\n                                      <Grid container={true} style={{width: 192, height: 192}}>\n                                        <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                                            component={FieldDropzone}\n                                            name={`values[${index}].swatchDropzone`}\n                                            validate={mainImageUploadValidation}\n                                            props={{\n                                              initialImage: formValues.getIn([index, 'swatch']),\n                                              suggestText: t('SeriesDetailPage.uploadSuggest'),\n                                              dropzoneInputProps: {\n                                                accept: acceptedMainImageExtensions,\n                                                disabled: !formValues.getIn([index, 'optionId'])\n                                              }\n                                            }}\n                                        />\n                                      </Grid>\n                                      <IconButton size='small' disabled={!formValues.getIn([index, 'optionId'])} onClick={() => removeSwatch(index)}>\n                                        <Tooltip title={t('formButtons.delete')}>\n                                          <DeleteIcon />\n                                        </Tooltip>\n                                      </IconButton>\n                                    </Grid>\n                                  </Grid>\n                                  }\n                                  {/* image upload */}\n                                  {formUseImage &&\n                                  <Grid\n                                      item={true}\n                                      style={{marginTop: 8, marginBottom: 16}}\n                                  >\n                                    <Typography>{t('configuratorPage.optionsWidget.productImagePreview')}</Typography>\n                                    <Grid container={true} alignItems='flex-end'>\n                                      <Grid container={true} style={{width: 192, height: 192}}>\n                                        <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                                            component={FieldDropzone}\n                                            name={`values[${index}].imageDropzone`}\n                                            validate={mainImageUploadValidation}\n                                            props={{\n                                              initialImage: formValues.getIn([index, 'optionBasedProductImage']),\n                                              suggestText: t('SeriesDetailPage.uploadSuggest'),\n                                              dropzoneInputProps: {\n                                                accept: acceptedMainImageExtensions,\n                                                disabled: !formValues.getIn([index, 'optionId'])\n                                              }\n                                            }}\n                                        />\n                                      </Grid>\n                                      <IconButton size='small' disabled={!formValues.getIn([index, 'optionId'])} onClick={() => removeImage(index)}>\n                                        <Tooltip title={t('formButtons.delete')}>\n                                          <DeleteIcon />\n                                        </Tooltip>\n                                      </IconButton>\n                                    </Grid>\n                                  </Grid>\n                                  }\n                                  {/* cutsheet upload */}\n                                  {formUseSpec &&\n                                  <>\n                                    <Grid container={true} spacing={1} alignItems='center' justify='space-between'>\n                                      <CutsheetDisplay\n                                          formName={OPTIONS_DIALOG_FORM}\n                                          formFilePathArray={['values', index, 'optionBasedManufacturerCutsheet']}\n                                          formFilePathString={`values[${index}].optionBasedManufacturerCutsheet`}\n                                          selectedLanguage={selectedLanguage}\n                                          index={index}\n                                      />\n                                    </Grid>\n                                    <Divider />\n                                    <Grid container={true} spacing={1} justify='flex-end'>\n                                      <FileLocalizationSelector\n                                          selectedLanguage={selectedLanguage}\n                                          setSelectedLanguage={(_selectedLanguage) => setSelectedLanguage(_selectedLanguage)}\n                                          container={true}\n                                          direction={'row'}\n                                          justify={'flex-end'}\n                                          color={'textSecondary'}\n                                          variant={'caption'}\n                                          labelStyle={{marginRight: 16}}\n                                      />\n                                    </Grid>\n                                  </>\n                                  }\n                                </Grid>\n                                <Grid\n                                    item={true}\n                                    xs={2}\n                                    className={classes.iconPadding}\n                                    container={true}\n                                    justify='space-between'\n                                >\n                                  {\n                                    fields.length > 1 && (\n                                        <IconButton\n                                            size='small'\n                                            onClick={() => {\n                                              fields.remove(index);\n                                              // keep track deleted option to prevent it from being replaced to other existing fields\n                                              const isDeletedFromOriginalSeriesOptionValues = originalSeriesOptionValues?.find((optionValue) => optionValue.get('id') === formValues.getIn([index, 'optionId']));\n                                              if (isDeletedFromOriginalSeriesOptionValues) {\n                                                setNewlyDeletedOptionValueIds([...newlyDeletedOptionValueIds, formValues.getIn([index, 'optionId'])]);\n                                              }\n                                            }}\n                                        >\n                                          <DeleteIcon />\n                                        </IconButton>\n                                    )\n                                  }\n                                  {\n                                    (index === fields.length - 1) && (\n                                        <IconButton\n                                            size='small'\n                                            onClick={() => fields.push(null)}\n                                        >\n                                          <AddIcon />\n                                        </IconButton>\n                                    )\n                                  }\n                                </Grid>\n                              </Grid>\n                          );\n                          if (snapshot2.isDragging) {\n                            return ReactDOM.createPortal(child, portal);\n                          } else {\n                            return child;\n                          }\n                        }\n                      }\n                    </Draggable>\n                  );\n                })\n              }\n              {provided.placeholder}\n            </div>\n          )\n        }\n      </Droppable>\n    </DragDropContext>\n  );\n};\n\nexport default withTranslation('translations')(DescriptionsFieldArray);","import * as React from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, ListItem, Grid, useTheme, Typography, Theme, makeStyles, createStyles, FormHelperText, Tooltip } from '@material-ui/core';\nimport { BaseFieldProps, change, InjectedFormProps, stopSubmit, touch } from 'redux-form';\nimport { Field, reduxForm, getFormValues, FieldArray } from 'redux-form/immutable';\nimport { DeleteModal, FieldRadio, FieldReactSelect, FieldSwitch } from '../../../components';\nimport { fieldReactSelectStyles, IFieldReactSelectComponentProps } from '../../../components/FieldReactSelect';\nimport { compose, Dispatch } from 'redux';\nimport { connect } from 'react-redux';\nimport { Map, List, fromJS, OrderedMap, is, getIn } from 'immutable';\nimport { createSelectorCreator, createStructuredSelector, defaultMemoize } from 'reselect';\nimport { makeSelectOptionDialogState } from '../../../modules/ApplicationModule/selectors';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { SearchAttributesAction, SearchAttributeOptionsAction, SetSelectedAttributeIdAction } from '../../../modules/PimModule/actions';\nimport { makeSelectPimAttributes, makeSelectPimAttributeOptionsBySelectedAttributeId, makeSelectSearchedPimProductsList, makeSelectIsFetchingAttributeOptions } from '../../../modules/PimModule/selectors';\nimport { FieldDropzoneStateResetAction, SetOptionDialogStateAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { IAttributeOptionDialogState } from '../../../modules/ApplicationModule/reducer';\nimport { Category, Filter, Product, PureAttribute, Series } from '../../../models';\nimport PimAttribute from '../../../models/PimAttribute';\nimport { IFieldRadioComponentProps } from '../../../components/FieldRadio';\nimport PimAttributeOption from '../../../models/PimAttributeOption';\nimport { SERIES_EDIT_FORM } from '../Component';\nimport { required } from '../../../validators';\nimport NoOptionsMessage from '../Attributes/NoOptionsMessage';\nimport DescriptionsFieldArray, { IDescriptionsFieldArrayComponentProps } from './DescriptionsFieldArray';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { IFieldSwitchComponentProps } from '../../../components/FieldSwitch';\nimport { ATTRIBUTE_DIALOG_ID } from '../../../containers/PimAttributesListPage/AttributeDialog';\nimport { makeSelectCanManageAttributeManagement, makeSelectIsPimTool, makeSelectUserHasFeatOptionBasedCutsheets, makeSelectUserHasFeatOptionBasedImages, makeSelectUserHasPimPrintDescriptionAcl } from '../../../modules/AtsModule/selectors';\nimport Xhr from '../../../utils/Xhr';\nimport { withAtsApi } from '../../../contexts';\nimport Api from 'ats-api/src';\nimport { makeSelectCategory } from '../../../modules/AccountModule/selectors';\nimport WarningIcon from '@material-ui/icons/Warning';\n\nexport const OPTIONS_DIALOG_FORM = 'OptionsDialogForm';\n\nexport const LEFT_COLUMN_WIDTH = 32;\n\ninterface IOptionsDialogComponentProps {\n  series: IMap<Series>;\n}\n\ninterface IOptionsDialogProps extends IOptionsDialogComponentProps {\n  dispatch: Dispatch;\n  searchAttributes: (categoryId: number, filters: Filter) => void;\n  searchOptions: (categoryId: number, attributeId: number, filters?: Filter) => void;\n  clearOptionDialogState: () => void;\n  setAttributeId: (id: number) => void;\n  attributes: List<IMap<PimAttribute>>;\n  options: List<IMap<PimAttributeOption>>;\n  isFetchingAttributeOptions: boolean;\n  optionDialogState: IMap<IAttributeOptionDialogState>;\n  formValues: any;\n  seriesEditFormValues: any;\n  hasPimPrintDescriptionAcl: boolean;\n  canManageAttributeManagement: boolean;\n  products: List<IMap<Product>>;\n  atsApi: Api;\n  hasFeatOptionBasedImages: boolean;\n  hasFeatOptionBasedCutsheets: boolean;\n  categoriesList: List<IMap<Category>>;\n  isPimTool: boolean;\n}\n\ntype OptionsDialogProps = IOptionsDialogProps & InjectedFormProps & WithTranslation;\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  span: {\n    fontStyle: 'italic',\n    color: 'rgba(0, 0, 0, 0.54)',\n  },\n  effectedListContainer: {\n    maxHeight: '150px',\n    overflowY: 'auto',\n    margin: theme.spacing(1.5, 0)\n  },\n  optionComponentRoot: {\n    width: '100%',\n    margin: 0,\n    '&:hover': {\n      background: theme.palette.grey[200],\n    }\n  },\n  warning: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing()\n  },\n}));\n\nconst optionsTypes = [\n  {\n    value: 'radio',\n    label: 'AttributesDialog.radioButton'\n  },\n  {\n    value: 'checkbox',\n    label: 'AttributesDialog.checkbox'\n  }\n];\n\nconst OptionsDialog: React.FC<OptionsDialogProps> = props => {\n  const {\n    searchAttributes,\n    searchOptions,\n    setAttributeId,\n    clearOptionDialogState,\n    reset,\n    dispatch,\n    handleSubmit,\n    t,\n    submitFailed,\n    error,\n    attributes,\n    options,\n    isFetchingAttributeOptions,\n    optionDialogState,\n    formValues,\n    seriesEditFormValues,\n    hasPimPrintDescriptionAcl,\n    canManageAttributeManagement,\n    products,\n    series,\n    atsApi,\n    hasFeatOptionBasedImages,\n    hasFeatOptionBasedCutsheets,\n    categoriesList,\n    isPimTool,\n  } = props;\n\n  const [attributeInputValue, setAttributeInputValue] = React.useState('');\n  const [deleteOptionValueModalOpen, toggleOptionValueDeleteModal] = React.useState(false);\n  const [optionValueDescriptionsWithEffect, setOptionValueDescriptionsWithEffect] = React.useState([]);\n  const [effectedProductNumbers, setEffectedProductNumbers] = React.useState([]);\n  const [bypassFrozenCategory, setBypassFrozenCategory] = React.useState(false);\n\n  const classes = useStyles();\n  const theme = useTheme();\n\n  const formAttribute = formValues && formValues.get('attribute');\n  const formAttributeId = formAttribute && formAttribute.get('attributeId');\n  const formValueIds = formValues && formValues.get('values').filter(x => x && x.get('status') !== 'deleted').map(val => val.get('optionId')).toJS();\n  const formOptionType: 'radio' | 'checkbox' = formValues && formValues.get('optionType');\n  const formDisplayAsAttribute = formValues && formValues.get('displayAsAttribute');\n  const formUseSwatch = formValues && formValues.get('useSwatch');\n  const formUseImage = formValues && formValues.get('enableOptionBasedProductImage') && hasFeatOptionBasedImages;\n  const formUseSpec = formValues && formValues.get('enableOptionBasedManufacturerCutsheet') && hasFeatOptionBasedCutsheets;\n  const formUseAsProductImage = formValues && formValues.get('declareOptionBasedProductImageAsFinal');\n  const formUseAsProductSpec = formValues && formValues.get('declareOptionBasedManufacturerCutsheetAsFinal');\n\n  const dialogOpen = optionDialogState && optionDialogState.get('open') || false;\n  const dialogAttributeId = optionDialogState && optionDialogState.getIn(['attribute', 'id']);\n  const dialogAttributeValues = optionDialogState && optionDialogState.getIn(['attribute', 'values']);\n\n  const seriesCategoryId: number = seriesEditFormValues && seriesEditFormValues.getIn(['categoryName', 'id']);\n  const isCategoryLocked: boolean = categoriesList.find(category => category.get('id') === seriesCategoryId)?.get('isLocked');\n  const seriesAttributes = seriesEditFormValues && seriesEditFormValues.get('attributes') || Map();\n  const seriesAttributeIds = seriesAttributes\n    .toIndexedSeq()\n    .filter(attr => attr.get('id') !== formAttributeId && attr.get('values').some(value => value.get('status') !== 'deleted'))\n    .map(attr => attr.get('id'))\n    .toArray();\n\n  const foundOtherCurrentFinalProductImageOption = seriesAttributes.find(attr => attr.get('declareOptionBasedProductImageAsFinal') && attr.get('id') !== formAttributeId);\n  const foundOtherCurrentFinalProductCutsheetOption = seriesAttributes.find(attr => attr.get('declareOptionBasedManufacturerCutsheetAsFinal') && attr.get('id') !== formAttributeId);\n\n  const brandId = seriesEditFormValues.getIn(['brand', 'id']);\n  const brandFilter = brandId\n    ? [{\n        'manufacturerId': {\n          'eq': brandId\n        }\n      }]\n    : [];\n  // const brandOnlyFilter = {\n  //   'and': [\n  //     ...brandFilter\n  //   ]\n  // };\n  const activeStatusFilter = [{\n    'status.name': {\n      'eq': 'active'\n    }\n  }];\n  // don't return attributes already in series\n  const attributeExclusionFilter = seriesAttributeIds && seriesAttributeIds.length > 0 ? [{\n    'attributeId': {\n      'nin': seriesAttributeIds\n    }\n  }] : [];\n\n  const nullOptionKeyFilter = ((optionDialogState && optionDialogState.getIn(['attribute', 'isOption'])) || formOptionType === 'checkbox')\n    ? [{\n        'optionKey': {\n          neq: null\n        }\n      }]\n    : [];\n\n  React.useEffect(() => {\n    if (dialogOpen && seriesCategoryId) {\n      const attributeFilter = {\n        'and': [\n          ...attributeExclusionFilter,\n          ...brandFilter,\n          ...nullOptionKeyFilter\n        ]\n      };\n\n      searchAttributes(seriesCategoryId, attributeFilter);\n\n      if (dialogAttributeId) {\n        setAttributeId(dialogAttributeId);\n      }\n    }\n  }, [optionDialogState]);\n\n  React.useEffect(() => {\n    if (isCategoryLocked && formAttributeId && attributes) {\n      const selectedAttribute = attributes.find(attr => attr.get('attributeId') === formAttributeId);\n      if (selectedAttribute?.get('allowOverride')) {\n        setBypassFrozenCategory(true);\n      }\n    } else {\n      setBypassFrozenCategory(false);\n    }\n  }, [formAttributeId, attributes]);\n\n  const onAttributeChange = (val: IMap<PimAttribute>) => {\n    const attributeId = val && val.get('attributeId');\n\n    if (attributeId !== formAttributeId) {\n      dispatch(change(OPTIONS_DIALOG_FORM, 'values', fromJS([null])));\n      setAttributeId(attributeId);\n    }\n  };\n\n  const onDescriptionFocus = (index) => {\n    if (formValues.get('values').filter(x => x && x.get('status') !== 'deleted').size) {\n      dispatch(stopSubmit(OPTIONS_DIALOG_FORM));\n    }\n    const nin = formValueIds.filter((id, _index) => _index !== index);\n    const filter = {\n      'and': [\n        ...brandFilter,\n        ...activeStatusFilter,\n        {\n          optionId: {\n            nin\n          }\n        }\n      ]\n    };\n\n    searchOptions(seriesCategoryId, formAttributeId, nin.length ? filter : {\n      'and': [...brandFilter, ...activeStatusFilter]\n    });\n  };\n\n  const onAttributeInputChange = (val: string, actionMeta) => {\n    setAttributeInputValue(val);\n    if (actionMeta.action === 'input-change' || actionMeta.action === 'input-blur') {\n      const filter = {\n        'and': [\n          ...attributeExclusionFilter,\n          ...brandFilter,\n          ...nullOptionKeyFilter,\n          {\n            'or': [\n              {\n                'attributeKey': {\n                    'like': val\n                }\n              },\n              {\n                'name': {\n                  'like': val\n                }\n              }\n            ]\n          }\n        ]\n      };\n      searchAttributes(seriesCategoryId, filter);\n    }\n  };\n\n  const handleClose = () => {\n    setOptionValueDescriptionsWithEffect([]);\n    clearOptionDialogState();\n    reset();\n  };\n\n  const onSubmit = async (values) => {\n    const isOption = values.get('optionType') === 'checkbox';\n    const attributeId = values.getIn(['attribute', 'attributeId']);\n    const attributeKey = values.getIn(['attribute', 'attributeKey']);\n    const name = values.getIn(['attribute', 'name']);\n    const require = values.get('require') || false;\n    const displayAsAttribute = values.get('displayAsAttribute') ?? false;\n    const useSwatch = values.get('useSwatch') || false;\n    const enableOptionBasedProductImage = values.get('enableOptionBasedProductImage') || false;\n    const enableOptionBasedManufacturerCutsheet = values.get('enableOptionBasedManufacturerCutsheet') || false;\n    const declareOptionBasedProductImageAsFinal = values.get('declareOptionBasedProductImageAsFinal') || false;\n    const declareOptionBasedManufacturerCutsheetAsFinal = values.get('declareOptionBasedManufacturerCutsheetAsFinal') || false;\n\n    const transformedOptionValues = await Promise.all(values.get('values').filter(x => x).map(async (val) => {\n      let swatchImageArray;\n      if (val.get('swatchDropzone')) {\n        swatchImageArray = await Xhr({ atsApi, files: val.get('swatchDropzone') });\n      }\n      let productImageArray;\n      if (val.get('imageDropzone')) {\n        productImageArray = await Xhr({ atsApi, files: val.get('imageDropzone') });\n      }\n      const swatchImageId = getIn(swatchImageArray, [0, 'id'], '') || val.get('swatch');\n      const productImageId = getIn(productImageArray, [0, 'id'], '') || val.get('optionBasedProductImage');\n      const optionBasedManufacturerCutsheet = val.get('optionBasedManufacturerCutsheet');\n      const optionId = val.get('optionId');\n      const seriesAttributeOptionId = val.get('seriesAttributeOptionId') ?? null;\n      const description = val.get('description');\n      const value = val.get('value');\n      const unit = val.get('unit');\n      const status = val.get('status') || 'active';\n      const printDescription = val.getIn(['printDescription', 'csi']) ? val.get('printDescription') : null; // turn map back to null value if csi value is not valid\n\n      let newValue = fromJS({\n        id: optionId,\n        description,\n        unit,\n        value,\n        key: attributeKey,\n        status,\n        printDescription,\n        optionBasedManufacturerCutsheet\n      });\n\n      if (seriesAttributeOptionId) {\n        newValue = newValue.set('seriesAttributeOptionId', seriesAttributeOptionId);\n      }\n\n      newValue = newValue.set('swatch', swatchImageId || null);\n      newValue = newValue.set('optionBasedProductImage', productImageId || null);\n      dispatch(new FieldDropzoneStateResetAction());\n\n      return newValue;\n    }));\n\n    const transformedOption = fromJS({\n      id: attributeId,\n      key: attributeKey,\n      name,\n      isOption,\n      require,\n      displayAsAttribute,\n      useSwatch,\n      enableOptionBasedProductImage,\n      enableOptionBasedManufacturerCutsheet,\n      declareOptionBasedProductImageAsFinal,\n      declareOptionBasedManufacturerCutsheetAsFinal,\n      values: transformedOptionValues\n    });\n\n    const editSeriesOption = () => {\n      return seriesAttributes && seriesAttributes.reduce((acc, val, key) => {\n        if (val.get('id') === dialogAttributeId) {\n          return acc.set(attributeKey, transformedOption);\n        }\n        return acc.set(key, val);\n      }, OrderedMap());\n    };\n\n    const addSeriesOption = () => {\n      return seriesAttributes && seriesAttributes.merge(fromJS({\n        [attributeKey]: transformedOption\n      }));\n    };\n\n    const updatedSeriesOption = dialogAttributeId && dialogAttributeValues ? editSeriesOption() : addSeriesOption();\n    // if set as final image is true and there is existing final image option or if set as final cutsheet is true, and there is existing final cutsheet option\n    // then override the existing option to false\n    let updatedSeriesOptionWithOverride = updatedSeriesOption;\n    if ((declareOptionBasedProductImageAsFinal && foundOtherCurrentFinalProductImageOption) || (declareOptionBasedManufacturerCutsheetAsFinal && foundOtherCurrentFinalProductCutsheetOption)) {\n      updatedSeriesOptionWithOverride = updatedSeriesOption.withMutations(ctx => {\n        if (declareOptionBasedProductImageAsFinal && foundOtherCurrentFinalProductImageOption) {\n          const existingFinalImageOptionKey = foundOtherCurrentFinalProductImageOption.get('key');\n          ctx.setIn([existingFinalImageOptionKey, 'declareOptionBasedProductImageAsFinal'], false);\n        }\n        if (declareOptionBasedManufacturerCutsheetAsFinal && foundOtherCurrentFinalProductCutsheetOption) {\n          const existingFinalCutsheetOptionKey = foundOtherCurrentFinalProductCutsheetOption.get('key');\n          ctx.setIn([existingFinalCutsheetOptionKey, 'declareOptionBasedManufacturerCutsheetAsFinal'], false);\n        }\n      });\n    }\n    dispatch(change(SERIES_EDIT_FORM, 'attributes', updatedSeriesOptionWithOverride));\n    handleClose();\n  };\n\n  const checkMissingValueAndProceed = () => {\n    // compare form series attribute option values to form option values to find what is missing\n    const seriesOptionValues = seriesEditFormValues.getIn(['attributes', formAttribute.get('attributeKey'), 'values'], []);\n    const missingOptionValueIds = seriesOptionValues.reduce((acc, optionValue) => { // array of optionIds that the series has but the form does not\n      const optionId = optionValue.get('id');\n      const isDeleted = optionValue.get('status') === 'deleted';\n      if (formValueIds.includes(optionId) || isDeleted) {\n        return acc;\n      } else {\n        setOptionValueDescriptionsWithEffect(current => ([...current, optionValue.getIn(['description'])]));\n        return acc.concat([optionId]);\n      }\n    }, []);\n\n    if (missingOptionValueIds.length ) {\n      toggleOptionValueDeleteModal(true);\n    } else {\n      onSubmit(formValues);\n    }\n  };\n\n  const checkAddToSeries = () => {\n    const numDescriptions = formValues.get('values').filter(x => x && x.get('status') !== 'deleted').size;\n    const errors = [\n      {\n        condition: numDescriptions < 2 && formOptionType === 'radio',\n        message: t('AttributesDialog.radioError')\n      },\n      {\n        condition: numDescriptions < 1 && formOptionType === 'checkbox',\n        message: t('AttributesDialog.checkboxError')\n      }\n    ];\n    const err = errors.find(({condition}) => condition === true);\n    if (err) {\n      dispatch(touch(OPTIONS_DIALOG_FORM, 'attribute'));\n      dispatch(stopSubmit(\n        OPTIONS_DIALOG_FORM,\n        { _error: err.message }\n      ));\n    } else {\n      if (optionDialogState.has('attribute')) {\n        checkMissingValueAndProceed();\n      } else {\n        onSubmit(formValues);\n      }\n    }\n  };\n\n  const handleDelete = () => {\n    toggleOptionValueDeleteModal(false);\n    onSubmit(formValues);\n  };\n\n  const openDialog = () => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: ATTRIBUTE_DIALOG_ID,\n      open: true\n    }));\n  };\n\n  const onOptionTypeChange = (e) => {\n    const typeValue = e.target.value;\n    dispatch(change(OPTIONS_DIALOG_FORM, 'optionType', typeValue));\n    if (typeValue === 'checkbox') {\n      dispatch(change(OPTIONS_DIALOG_FORM, 'enableOptionBasedProductImage', false));\n      dispatch(change(OPTIONS_DIALOG_FORM, 'declareOptionBasedProductImageAsFinal', false));\n      dispatch(change(OPTIONS_DIALOG_FORM, 'enableOptionBasedManufacturerCutsheet', false));\n      dispatch(change(OPTIONS_DIALOG_FORM, 'declareOptionBasedManufacturerCutsheetAsFinal', false));\n    }\n  };\n\n  return (\n    <Dialog\n      open={dialogOpen}\n      onClose={handleClose}\n      aria-labelledby='add-series-attribute-title'\n      fullWidth={true} scroll='body'\n      disableBackdropClick={true}\n      disableEscapeKeyDown={true}\n    >\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <DialogTitle id='add-series-attribute-title' style={{ marginLeft: LEFT_COLUMN_WIDTH, paddingLeft: 8 }}>\n          {dialogAttributeId && dialogAttributeValues ? t('AttributesDialog.editOptions') : t('AttributesDialog.addOptions')}\n        </DialogTitle>\n        <DialogContent style={{ paddingLeft: 8 }}>\n          <Grid container={true} alignItems='center'>\n            <Grid container={true} item={true} style={{ marginLeft: LEFT_COLUMN_WIDTH, marginRight: 16 }}>\n              <Grid xs={12} item={true}>\n                <Typography variant='caption' noWrap={true}>\n                  {t('AttributesDialog.option')}\n                </Typography>\n                <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n                  name='attribute'\n                  validate={required}\n                  component={FieldReactSelect}\n                  inputProps={{\n                    options: attributes && attributes.toList(),\n                    getOptionValue: (option) => option.get('value'),\n                    getOptionLabel: (option) => (\n                      <div>\n                        {option && option.get('name')} - <span className={classes.span}>{option && option.get('attributeKey')}</span>\n                      </div>\n                    ),\n                    filterOption: ({ data }, inputValue: string) => {\n                      const name: string = data.get('name').toLowerCase();\n                      const attributeKey: string = data.get('attributeKey').toLowerCase();\n                      return name.includes(inputValue.toLowerCase()) || attributeKey.includes(inputValue.toLowerCase());\n                    },\n                    placeholder: t('AttributesDialog.addOption'),\n                    components: {\n                      Option: option => (\n                        <ListItem value={option.value} disableGutters={false} {...option.innerProps} className={classes.optionComponentRoot}>\n                          {option.label}\n                        </ListItem>\n                      ),\n                    },\n                    styles: fieldReactSelectStyles(theme),\n                    menuPosition: 'fixed',\n                    menuShouldScrollIntoView: false,\n                    inputValue: attributeInputValue,\n                    onChange: onAttributeChange,\n                    onInputChange: onAttributeInputChange,\n                    noOptionsMessage: () => <NoOptionsMessage buttonText={t('AttributesDialog.newAttribute')} disableButton={isCategoryLocked} onClick={canManageAttributeManagement ? () => {\n                      dispatch(new SetOverlayComponentPropsAction({\n                        id: ATTRIBUTE_DIALOG_ID,\n                        props: {\n                          name: attributeInputValue,\n                          successCB: (newAttribute: IMap<PureAttribute>) => {\n                            const newAttributeId = newAttribute.get('id');\n                            searchAttributes(\n                              seriesCategoryId,\n                              {'and': [\n                                ...attributeExclusionFilter,\n                                ...brandFilter,\n                                ...nullOptionKeyFilter\n                              ]});\n\n                            const convertedAttribute = fromJS({\n                              attributeId: newAttributeId,\n                              attributeKey: newAttribute.get('key'),\n                              name: newAttribute.get('name'),\n                              display: null\n                            });\n                            onAttributeChange(convertedAttribute);\n\n                            // pre-populate feature modal form with new attribute\n                            dispatch(change(OPTIONS_DIALOG_FORM, 'attribute', convertedAttribute));\n                            // dispatch(change(OPTIONS_DIALOG_FORM, 'printDescription.csi', null));\n                          }\n                        }\n                      }));\n                      openDialog();\n                    } : null} />,\n                    isDisabled: Boolean(dialogAttributeId),\n                  }}\n                  formControlProps={{\n                    fullWidth: true\n                  }}\n                />\n              </Grid>\n              {\n                isPimTool && <>\n                  <Grid xs={12} item={true}>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={'displayAsAttribute'}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.optionDisplayAsAttribute'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !formAttribute,\n                        }\n                      }}\n                    />\n                  </Grid>\n                  {\n                    formDisplayAsAttribute && <>\n                      <Grid container={true} xs={12} item={true} wrap='nowrap'>\n                        <WarningIcon fontSize='small' className={classes.warning}/>\n                        <Typography variant='caption'>\n                          {t('configuratorPage.optionsWidget.displayAsAttributeWarningText')}\n                        </Typography>\n                      </Grid>\n                      <Grid container={true} xs={12} item={true} wrap='nowrap'>\n                        <WarningIcon fontSize='small' className={classes.warning}/>\n                        <Typography variant='caption'>\n                          {t('configuratorPage.optionsWidget.displayAsAttributeWarningText2')}\n                        </Typography>\n                      </Grid>\n                    </>\n                  }\n                </>\n              }\n              <Grid xs={12} item={true}>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name={'useSwatch'}\n                  component={FieldSwitch}\n                  props={{\n                    label: t('configuratorPage.optionsWidget.optionIncludesSwatches'),\n                    inputProps: {\n                      color: 'primary',\n                      disabled: !formAttribute,\n                    }\n                  }}\n                />\n              </Grid>\n              {formOptionType === 'radio' && hasFeatOptionBasedImages &&\n                <Grid container={true} xs={12} item={true} style={{marginTop: -8}}>\n                  <Grid xs={6} item={true}>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={`enableOptionBasedProductImage`}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.includeProductImages'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !formAttribute,\n                          onChange: (e) => {\n                            const checked = e.target.checked;\n                            if (!checked) {\n                              dispatch(change(OPTIONS_DIALOG_FORM, 'declareOptionBasedProductImageAsFinal', false));\n                            }\n                          }\n                        }\n                      }}\n                    />\n                  </Grid>\n                  <Grid xs={6} item={true}>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={`declareOptionBasedProductImageAsFinal`}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.useAsFinalProductImage'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !formUseImage\n                        }\n                      }}\n                    />\n                    {formUseAsProductImage &&  foundOtherCurrentFinalProductImageOption &&\n                    <Grid container={true} alignItems='flex-start' wrap='nowrap' style={{paddingBottom: 12}}>\n                      <WarningIcon className={classes.warning}/>\n                      <Typography variant='caption'>{t('configuratorPage.optionsWidget.productImageOverrideWarning')}</Typography>\n                    </Grid>\n                    }\n                  </Grid>\n                </Grid>\n              }\n              {formOptionType === 'radio' && hasFeatOptionBasedCutsheets &&\n                <Grid container={true} xs={12} item={true} style={{marginBottom: 24}}>\n                  <Grid xs={6} item={true}>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={`enableOptionBasedManufacturerCutsheet`}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.includeManufacturerCutsheets'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !formAttribute,\n                          onChange: (e) => {\n                            const checked = e.target.checked;\n                            if (!checked) {\n                              dispatch(change(OPTIONS_DIALOG_FORM, 'declareOptionBasedManufacturerCutsheetAsFinal', false));\n                            }\n                          }\n                        }\n                      }}\n                    />\n                  </Grid>\n                  <Grid xs={6} item={true}>\n                    <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                      name={`declareOptionBasedManufacturerCutsheetAsFinal`}\n                      component={FieldSwitch}\n                      props={{\n                        label: t('configuratorPage.optionsWidget.useAsFinalProductManufacturerCutsheet'),\n                        inputProps: {\n                          color: 'primary',\n                          disabled: !formUseSpec\n                        }\n                      }}\n                    />\n                    {formUseAsProductSpec && foundOtherCurrentFinalProductCutsheetOption &&\n                    <Grid container={true} alignItems='flex-start' wrap='nowrap' style={{paddingTop: 8}}>\n                      <WarningIcon className={classes.warning}/>\n                      <Typography variant='caption'>{t('configuratorPage.optionsWidget.productCutsheetOverrideWarning')}</Typography>\n                    </Grid>\n                    }\n                  </Grid>\n                </Grid>\n              }\n            </Grid>\n            <FieldArray<IDescriptionsFieldArrayComponentProps>\n              name='values'\n              component={DescriptionsFieldArray}\n              props={{\n                options,\n                isFetchingAttributeOptions,\n                formAttribute,\n                formValues: formValues?.get('values') ?? List(),\n                series,\n                onDescriptionFocus,\n                hasPimPrintDescriptionAcl,\n                canManageAttributeManagement,\n                formUseSwatch,\n                formUseImage,\n                formUseSpec,\n                isCategoryLocked: isCategoryLocked && !bypassFrozenCategory,\n              }}\n            />\n            <Grid container={true} item={true} direction='column' style={{ marginLeft: LEFT_COLUMN_WIDTH }}>\n              <Typography variant='subtitle1'>{t('AttributesDialog.optionType')}</Typography>\n              <Grid container={true} item={true}>\n                {\n                  optionsTypes.map(({ value, label }) => (\n                    <Grid\n                      item={true}\n                      xs={6}\n                      key={label}\n                    >\n                      <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                        name='optionType'\n                        component={FieldRadio}\n                        props={{\n                          label: t(label),\n                          color: 'primary',\n                          checkedValue: value,\n                          helperText: false,\n                          onChange: onOptionTypeChange,\n                        }}\n                      />\n                    </Grid>\n                  ))\n                }\n              </Grid>\n              <Grid item={true}>\n                <Field<BaseFieldProps<IFieldSwitchComponentProps>>\n                  name='require'\n                  component={FieldSwitch}\n                  props={{\n                    label: <Tooltip title={t('SeriesDetailPage.optionsDialogRequireTooltip')} placement='top'>\n                      <Typography>{t('SeriesDetailPage.optionsDialogRequireLabel')}</Typography>\n                    </Tooltip>,\n                    inputProps: {\n                      color: 'primary',\n                    }\n                  }}\n                />\n              </Grid>\n            </Grid>\n            {\n              error && (\n                <FormHelperText error={submitFailed}>\n                  {error}\n                </FormHelperText>\n              )\n            }\n          </Grid>\n        </DialogContent>\n        <DialogActions>\n          <Button\n            onClick={handleClose}\n            color='primary'\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            onClick={checkAddToSeries}\n          >\n            {t('AttributesDialog.addToSeries')}\n          </Button>\n        </DialogActions>\n      </form>\n      <DeleteModal // option value\n        open={deleteOptionValueModalOpen}\n        content={\n          <Grid>\n            <Typography variant='h6'>\n              {`${t('AttributesDialog.updateConfirmationTitle', { attributeName: formAttribute && formAttribute.get('name') })}`}\n            </Typography>\n            <Grid container={true} direction='column' spacing={1} className={classes.effectedListContainer}>\n              {\n                optionValueDescriptionsWithEffect.map((description: string, index: number) => (\n                  <Grid key={index} item={true}>\n                    <Typography variant='body1'>\n                      { description }\n                    </Typography>\n                  </Grid>\n                ))\n              }\n            </Grid>\n            <Typography variant='body2' color='textPrimary'>\n              {t('SeriesDetailPage.invalidProductWarning')}\n            </Typography>\n          </Grid>\n        }\n        buttonOk={t('formButtons.confirm')}\n        toggleDeleteModal={() => { toggleOptionValueDeleteModal(false); setOptionValueDescriptionsWithEffect([]); }}\n        handleDelete={handleDelete}\n        withLoading={false}\n      />\n    </Dialog>\n  );\n};\n\nconst createImmutableEqualSelector = createSelectorCreator(\n  defaultMemoize,\n  is\n);\nconst getInitialValues = createImmutableEqualSelector(\n  makeSelectOptionDialogState(),\n  (optionDialogState: IMap<IAttributeOptionDialogState>) => {\n    const attribute = optionDialogState && optionDialogState.get('attribute');\n    const isOption = optionDialogState && optionDialogState.getIn(['attribute', 'isOption']);\n\n    if (attribute) {\n      // attribute from editing or recommended list\n      const values = attribute.get('values')?.filter(value => value.get('status') !== 'deleted');\n      const require = attribute.get('require') || null;\n      const initialAttribute = fromJS({\n        attributeId: attribute.get('id'),\n        attributeKey: attribute.get('key'),\n        name: attribute.get('name'),\n        display: attribute.get('display') || null,\n      });\n      const displayAsAttribute = attribute.get('displayAsAttribute') ?? false;\n      const useSwatch = attribute.get('useSwatch') || false;\n      const enableOptionBasedProductImage = attribute.get('enableOptionBasedProductImage') || false;\n      const enableOptionBasedManufacturerCutsheet = attribute.get('enableOptionBasedManufacturerCutsheet') || false;\n      const declareOptionBasedProductImageAsFinal = attribute.get('declareOptionBasedProductImageAsFinal') || false;\n      const declareOptionBasedManufacturerCutsheetAsFinal = attribute.get('declareOptionBasedManufacturerCutsheetAsFinal') || false;\n\n      const initialOptionValues = values ? values.map((val) => {\n        return fromJS({\n          optionId: val.get('id'),\n          seriesAttributeOptionId: val.get('seriesAttributeOptionId') ?? null,\n          optionKey: val.get('key'),\n          description: val.get('description'),\n          unit: val.get('unit'),\n          value: val.get('value'),\n          status: val.get('status'),\n          swatch: val.get('swatch'),\n          printDescription: val.get('printDescription') || Map(), // if null, then set to empty map or the textfield will break\n          optionBasedProductImage: val.get('optionBasedProductImage'),\n          optionBasedManufacturerCutsheet: val.get('optionBasedManufacturerCutsheet') || Map()\n        });\n      }) : fromJS([null]);\n\n      return Map().withMutations((ctx) => {\n        ctx.set('attribute', initialAttribute);\n        ctx.set('values', initialOptionValues);\n        ctx.set('optionType', isOption === true ? 'checkbox' : 'radio');\n        ctx.set('require', require);\n        ctx.set('displayAsAttribute', displayAsAttribute);\n        ctx.set('useSwatch', useSwatch);\n        ctx.set('enableOptionBasedProductImage', enableOptionBasedProductImage);\n        ctx.set('enableOptionBasedManufacturerCutsheet', enableOptionBasedManufacturerCutsheet);\n        ctx.set('declareOptionBasedProductImageAsFinal', declareOptionBasedProductImageAsFinal);\n        ctx.set('declareOptionBasedManufacturerCutsheetAsFinal', declareOptionBasedManufacturerCutsheetAsFinal);\n      });\n    }\n\n    return fromJS({\n      values: [null], // null value allows placeholder to display\n      optionType: 'radio',\n    });\n  }\n);\n\nconst mapStateToProps = (state) => {\n  const initialValues = getInitialValues(state);\n\n  return {\n    initialValues,\n    ...createStructuredSelector({\n      optionDialogState: makeSelectOptionDialogState(),\n      attributes: makeSelectPimAttributes(),\n      options: makeSelectPimAttributeOptionsBySelectedAttributeId(),\n      isFetchingAttributeOptions: makeSelectIsFetchingAttributeOptions(),\n      formValues: getFormValues(OPTIONS_DIALOG_FORM),\n      seriesEditFormValues: getFormValues(SERIES_EDIT_FORM),\n      products: makeSelectSearchedPimProductsList(),\n      hasPimPrintDescriptionAcl: makeSelectUserHasPimPrintDescriptionAcl(),\n      canManageAttributeManagement: makeSelectCanManageAttributeManagement(),\n      hasFeatOptionBasedImages:  makeSelectUserHasFeatOptionBasedImages(),\n      hasFeatOptionBasedCutsheets: makeSelectUserHasFeatOptionBasedCutsheets(),\n      categoriesList: makeSelectCategory(),\n      isPimTool: makeSelectIsPimTool(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setAttributeId: (id: number) => {\n      dispatch(new SetSelectedAttributeIdAction(id));\n    },\n    searchAttributes: (categoryId: number, filters?: Filter) => {\n      dispatch(new SearchAttributesAction({\n        categoryId,\n        filters,\n      }));\n    },\n    searchOptions: (categoryId: number, attributeId: number, filters?: Filter) => {\n      dispatch(new SearchAttributeOptionsAction({\n        categoryId,\n        attributeId,\n        filters,\n      }));\n    },\n    clearOptionDialogState: () => {\n      dispatch(new SetOptionDialogStateAction(fromJS({\n        open: false,\n      })));\n    }\n  };\n};\n\nexport default compose<React.FC<IOptionsDialogComponentProps>>(\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: OPTIONS_DIALOG_FORM,\n    enableReinitialize: true,\n  }),\n)(OptionsDialog);","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n  /** Pending */\n  PENDING = 0,\n  /** Resolved / OK */\n  RESOLVED = 1,\n  /** Rejected / Error */\n  REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n  private _state: States;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(\n    executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n  ) {\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** JSDoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val as unknown as any);\n      });\n    });\n  }\n\n  /** JSDoc */\n  private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n    this._setResult(States.RESOLVED, value);\n  };\n\n  /** JSDoc */\n  private readonly _reject = (reason?: any) => {\n    this._setResult(States.REJECTED, reason);\n  };\n\n  /** JSDoc */\n  private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value as PromiseLike<T>).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  private readonly _executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };\n}\n\nexport { SyncPromise };\n","module.exports = require(\"core-js/library/fn/object/keys\");","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n  if (key in obj) {\n    (0, _defineProperty2.default)(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {\n  Button,\n  Drawer,\n  Grid,\n  IconButton,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { List, Map } from 'immutable';\nimport { IMap, IAction } from 'ats-utils/src';\nimport {\n  Manufacturer,\n  User,\n  Option,\n  Package,\n  SearchArgs,\n} from '../../../models';\nimport {\n  GetManufacturersAction,\n  SearchUsersQuickByOfficeIdAction,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectManufacturer,\n  makeSelectUsers,\n} from '../../../modules/AccountModule/selectors';\nimport { makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n} from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  dateValidateFunc,\n  isValidMomentDate\n} from '../../../validators';\nimport { FieldAutocomplete } from '../..';\nimport { IFieldAutocompleteComponentProps } from '../../FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { IFieldDatePickerV2CustomProps } from '../../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../FieldDatePickerV2';\nimport { formatDateRangeFilter } from '../../../containers/ProjectList/ProjectListFilter';\n\nexport const PACKAGE_LIST_FILTER_FORM = 'PackageListFilters';\n\nconst dateModifiedValidateFunc = (value, allValues) => dateValidateFunc('modifiedDate', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\n\ninterface IPackageListFilterComponentProps {\n  open: boolean;\n  options: Option<Package>;\n  setSearchArgsAndSearch: (arg: SearchArgs<Package>) => void;\n  toggleDrawer: () => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IPackageListFilter extends IPackageListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n  theme: Theme;\n\n  getManufacturers: () => void;\n  searchUsers: (searchTerm: string, officeId: number) => void;\n\n  formValues: Map<string, any>;\n  officeUsers: List<IMap<User>>;\n  signedInUserOfficeId: number;\n  manufacturers: List<IMap<Manufacturer>>;\n}\n\ntype IPackageListFilterType = IPackageListFilter & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass PackageListFilter extends React.PureComponent<IPackageListFilterType, {}> {\n  public state = {\n    currentSelection: null,\n  };\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      this.getFilterData();\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public getFilterData = () => {\n    const {\n      searchUsers,\n      getManufacturers,\n      signedInUserOfficeId,\n    } = this.props;\n\n    searchUsers('', signedInUserOfficeId);\n    getManufacturers();\n  }\n\n  public toggleDrawer = (open) => () => {\n    this.setState({\n      isDrawerOpened: open,\n    });\n  }\n\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const modifiedBy = ctx.get('modifiedBy');\n        const manufacturer = ctx.get('manufacturerId');\n\n        modifiedBy && (modifiedBy.get('eq') ? ctx.setIn(['modifiedBy', 'eq'], modifiedBy.getIn(['eq', 'id'])) : ctx.delete('modifiedBy')); // tslint:disable-line\n        manufacturer && (manufacturer.get('eq') ? ctx.setIn(['manufacturerId', 'eq'], manufacturer.getIn(['eq', 'id'])) : ctx.delete('manufacturerId')); // tslint:disable-line\n\n        const modifiedDate = ctx.get('modifiedDate');\n        const formatedModifiedDate = modifiedDate && formatDateRangeFilter(modifiedDate);\n        if (formatedModifiedDate) {\n          ctx.set('modifiedDate', formatedModifiedDate);\n        } else if (modifiedDate) {\n          ctx.delete('modifiedDate');\n        }\n\n        const createdDate = ctx.get('createdDate');\n        const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n        if (formatedCreatedDate) {\n          ctx.set('createdDate', formatedCreatedDate);\n        } else if (createdDate) {\n          ctx.delete('createdDate');\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.getIn([key[0], 'eq']) !== null;\n        });\n\n      const filters = valuesWithParsedKeys.size\n                        ? { 'and': valuesWithParsedKeys.toJS() }\n                        : { 'and': []};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(reset(PACKAGE_LIST_FILTER_FORM));\n    this.setState({\n      currentSelection: null\n    });\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      open,\n      toggleDrawer,\n      officeUsers,\n      handleSubmit,\n      manufacturers,\n      signedInUserOfficeId,\n      searchUsers,\n      uniqueKey,\n      t\n    } = this.props;\n\n    const usersListItem = officeUsers.reduce((acc, user: IMap<User>) => {\n      const userId = user.get('id');\n      const firstName = user.get('firstName');\n      const lastName = user.get('lastName');\n      const listItem = Map().withMutations((immutableMap) => {\n        immutableMap.set('id', userId),\n        immutableMap.set('value', `${firstName} ${lastName}`);\n      });\n\n      return acc.push(listItem);\n    }, List());\n\n    return (\n      <React.Fragment>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Header */}\n            <Grid\n              className={classes.header}\n              container={true}\n              justify='space-between'\n              alignItems='center'\n            >\n              <Typography\n                variant='h5'\n              >\n                {t('generalListFilter.title')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='flex-end'\n                item={true}\n                xs={6}\n              >\n                <Button\n                  color='primary'\n                  onClick={this.handleResetForm}\n                >\n                  {t('generalListFilter.reset')}\n                </Button>\n                <IconButton\n                  onClick={toggleDrawer}\n                >\n                  <CloseIcon />\n                </IconButton>\n              </Grid>\n            </Grid>\n\n            {/* Content */}\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* manufacturer */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.manufacturerTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='manufacturerId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: manufacturers.toJS(),\n                        placeholder: t('generalListFilter.manufacturerPlaceholder'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Update date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.updatedDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'modifiedDate.gte'}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'modifiedDate.lte'}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* date added */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.createdDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'createdDate.gte'}\n                    props={{\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      timeOfDay: 'start',\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'createdDate.lte'}\n                    props={{\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      timeOfDay: 'end',\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* modified by */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.updatedByTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='modifiedBy.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: usersListItem.toJS(),\n                        placeholder: t('generalListFilter.updatedByPlaceholder'),\n                        onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n            </Grid>\n          </form>\n        </Drawer>\n      </React.Fragment>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n\n  const form = ownProps.form != null ? ownProps.form : PACKAGE_LIST_FILTER_FORM;\n\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      officeUsers: makeSelectUsers(),\n      manufacturers: makeSelectManufacturer(),\n      signedInUserOfficeId: makeSelectUserOfficeId(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    searchUsers: (searchTerm: string, officeId: number) => {\n      dispatch(new SearchUsersQuickByOfficeIdAction({searchTerm, officeId}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IPackageListFilterComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: PACKAGE_LIST_FILTER_FORM }),\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(PackageListFilter);\n","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {\n  Button,\n  Drawer,\n  Grid,\n  IconButton,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { List, Map } from 'immutable';\nimport { IMap, IAction } from 'ats-utils/src';\nimport {\n  Manufacturer,\n  User,\n  Category,\n  Option,\n  Product,\n  SearchArgs,\n} from '../../../models';\nimport {\n  GetCategoriesAction,\n  GetManufacturersAction,\n  SearchUsersQuickByOfficeIdAction,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectManufacturer,\n  makeSelectUsers,\n  makeSelectCategory,\n} from '../../../modules/AccountModule/selectors';\nimport { makeSelectUserOfficeId } from '../../../modules/AtsModule/selectors';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  reset,\n} from 'redux-form';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  dateValidateFunc,\n  isValidMomentDate\n} from '../../../validators';\nimport { FieldAutocomplete } from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport withReduxFormValidationTranslation from '../../../hoc/withReduxFormValidationTranslation';\nimport { IFieldDatePickerV2CustomProps } from '../../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../FieldDatePickerV2';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../FieldCheckbox';\nimport { formatDateRangeFilter } from '../../../containers/ProjectList/ProjectListFilter';\n\nexport const CONFIG_LIST_FILTER_FORM = 'ConfigListFilters';\n\nconst dateModifiedValidateFunc = (value, allValues) => dateValidateFunc('dateModified', allValues);\nconst dateAddedValidateFunc = (value, allValues) => dateValidateFunc('dateAdded', allValues);\n\ninterface IConfigListFilterComponentProps {\n  open: boolean;\n  options: Option<Product>;\n  setSearchArgsAndSearch: (arg: SearchArgs<Product>) => void;\n  toggleDrawer: () => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n}\n\ninterface IConfigListFilter extends IConfigListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n  theme: Theme;\n\n  getCategories: () => void;\n  getManufacturers: () => void;\n  searchUsers: (searchTerm: string, officeId: number) => void;\n\n  formValues: Map<string, any>;\n  officeUsers: List<IMap<User>>;\n  signedInUserOfficeId: number;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n}\n\ntype IConfigListFilterType = IConfigListFilter & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ConfigListFilter extends React.PureComponent<IConfigListFilterType, {}> {\n  public state = {\n    currentSelection: null,\n  };\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues\n    } = this.props;\n\n    if (open && (open !== prevProps.open)) {\n      this.getFilterData();\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues)) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public getFilterData = () => {\n    const {\n      searchUsers,\n      getManufacturers,\n      getCategories,\n      signedInUserOfficeId,\n    } = this.props;\n\n    searchUsers('', signedInUserOfficeId);\n    getManufacturers();\n    getCategories();\n  }\n\n  public toggleDrawer = (open) => () => {\n    this.setState({\n      isDrawerOpened: open,\n    });\n  }\n\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const modifiedBy = ctx.get('modifiedBy😈user😈id');\n        const manufacturer = ctx.get('brand');\n        const category = ctx.get('categoryName');\n        const seriesType = ctx.getIn(['isConfigurator', 'eq']);\n\n        const firmId = ctx.getIn(['firmId']);\n        if (firmId) {\n          if (firmId.getIn(['eq', 0]) === firmId.getIn(['neq', 0])) {\n            ctx.delete('firmId');\n          } else if (firmId.getIn(['eq', 0]) === null) {\n            ctx.set('firmId', { eq: null });\n          } else {\n            ctx.set('firmId', { neq: null });\n          }\n        }\n\n        if (seriesType && seriesType.count() === 1) {\n          ctx.setIn(['isConfigurator', 'eq'], seriesType.get(0));\n        } else if (seriesType) {\n          ctx.delete('isConfigurator');\n        }\n\n        modifiedBy && (modifiedBy.get('eq') ? ctx.setIn(['modifiedBy😈user😈id', 'eq'], modifiedBy.getIn(['eq', 'id'])) : ctx.delete('modifiedBy😈user😈id')); // tslint:disable-line\n        manufacturer && (manufacturer.get('eq') ? ctx.setIn(['brand', 'eq'], manufacturer.getIn(['eq', 'value'])) : ctx.delete('brand')); // tslint:disable-line\n        category && (category.get('eq') ? ctx.setIn(['categoryName', 'eq'], category.getIn(['eq', 'value'])) : ctx.delete('categoryName')); // tslint:disable-line\n\n        const dateModified = ctx.get('dateModified');\n        const formatedDateModified = dateModified && formatDateRangeFilter(dateModified);\n        if (formatedDateModified) {\n          ctx.set('dateModified', formatedDateModified);\n        } else if (dateModified) {\n          ctx.delete('dateModified');\n        }\n\n        const dateAdded = ctx.get('dateAdded');\n        const formatedDateAdded = dateAdded && formatDateRangeFilter(dateAdded);\n        if (formatedDateAdded) {\n          ctx.set('dateAdded', formatedDateAdded);\n        } else if (dateAdded) {\n          ctx.delete('dateAdded');\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .mapKeys((key) => {\n          return key.replace(new RegExp('😈', 'g'), '.');\n        })\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.getIn([key[0], 'eq']) !== null || key[0] === 'firmId';\n        });\n\n      const filters = valuesWithParsedKeys.size\n                        ? { 'and': valuesWithParsedKeys.toJS() }\n                        : { 'and': []};\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(reset(CONFIG_LIST_FILTER_FORM));\n    this.setState({\n      currentSelection: null\n    });\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      open,\n      toggleDrawer,\n      officeUsers,\n      handleSubmit,\n      categories,\n      manufacturers,\n      signedInUserOfficeId,\n      searchUsers,\n      uniqueKey,\n      t\n    } = this.props;\n\n    const usersListItem = officeUsers.reduce((acc, user: IMap<User>) => {\n      const userId = user.get('id');\n      const firstName = user.get('firstName');\n      const lastName = user.get('lastName');\n      const listItem = Map().withMutations((immutableMap) => {\n        immutableMap.set('id', userId),\n        immutableMap.set('value', `${firstName} ${lastName}`);\n      });\n\n      return acc.push(listItem);\n    }, List());\n\n    return (\n      <React.Fragment>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Header */}\n            <Grid\n              className={classes.header}\n              container={true}\n              justify='space-between'\n              alignItems='center'\n            >\n              <Typography\n                variant='h5'\n              >\n                {t('generalListFilter.title')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='flex-end'\n                item={true}\n                xs={6}\n              >\n                <Button\n                  color='primary'\n                  onClick={this.handleResetForm}\n                >\n                  {t('generalListFilter.reset')}\n                </Button>\n                <IconButton\n                  onClick={toggleDrawer}\n                >\n                  <CloseIcon />\n                </IconButton>\n              </Grid>\n            </Grid>\n\n            {/* Content */}\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* configurator type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('configListFilter.configuratorTypeLabel')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-evenly'\n                item={true}\n                xs={12}\n                className={classes.configTypesCheckboxesContainer}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='firmId.neq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('configListFilter.firmConfigurator'),\n                      color: 'primary',\n                      checkedValue: null\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='firmId.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('configListFilter.manufacturerRecommended'),\n                      color: 'primary',\n                      checkedValue: null\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Series Type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('configListFilter.seriesTypeLabel')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                className={classes.configTypesCheckboxesContainer}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isConfigurator.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('configListFilter.advancedConfiguration'),\n                      checkedValue: true,\n                      inputProps: {\n                        color: 'primary',\n                      }\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={5}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isConfigurator.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('configListFilter.basicConfiguration'),\n                      checkedValue: false,\n                      inputProps: {\n                        color: 'primary',\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* manufacturer */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.manufacturerTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='brand.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: manufacturers.toJS(),\n                        placeholder: t('generalListFilter.manufacturerPlaceholder'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* category */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.categoryTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='categoryName.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: categories && categories.toJS(),\n                        placeholder: t('generalListFilter.categoryPlaceholder'),\n                        getOptionLabel: option => option ? option.label || option.value : null,\n                        renderOption: option => option && <Typography>{option.label || option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Update date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.updatedDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'dateModified.gte'}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'dateModified.lte'}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateModifiedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* date added */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.createdDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'dateAdded.gte'}\n                    props={{\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.startBy'),\n                        className: classes.dateInput\n                      },\n                      timeOfDay: 'start',\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateAddedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('generalListFilter.to')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={'dateAdded.lte'}\n                    props={{\n                      keyboardDatePickerProps: {\n                        placeholder: t('generalListFilter.endBy'),\n                        className: classes.dateInput\n                      },\n                      timeOfDay: 'end',\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[isValidMomentDate, dateAddedValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* modified by */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('generalListFilter.updatedByTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='modifiedBy😈user😈id.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: usersListItem.toJS(),\n                        placeholder: t('generalListFilter.updatedByPlaceholder'),\n                        onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val, signedInUserOfficeId),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n            </Grid>\n          </form>\n        </Drawer>\n      </React.Fragment>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  configTypesCheckboxesContainer: {\n    margin: theme.spacing(1, 0)\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n\n  const form = ownProps.form != null ? ownProps.form : CONFIG_LIST_FILTER_FORM;\n\n  return {\n    form,\n    ...createStructuredSelector({\n      formValues: getFormValues(form),\n      officeUsers: makeSelectUsers(),\n      categories: makeSelectCategory(),\n      manufacturers: makeSelectManufacturer(),\n      signedInUserOfficeId: makeSelectUserOfficeId(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    getCategories: () => {\n      dispatch(new GetCategoriesAction());\n    },\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    searchUsers: (searchTerm: string, officeId: number) => {\n      dispatch(new SearchUsersQuickByOfficeIdAction({searchTerm, officeId}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IConfigListFilterComponentProps>>(\n  withStyles(styles, {withTheme: true}),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: CONFIG_LIST_FILTER_FORM }),\n  reduxForm({\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n  withTranslation('translations'),\n)(ConfigListFilter);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/web/pdf_viewer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n})(this, function() {\nreturn ","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFAnnotationLayerFactory} IPDFAnnotationLayerFactory */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFStructTreeLayerFactory} IPDFStructTreeLayerFactory */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFTextLayerFactory} IPDFTextLayerFactory */\n/** @typedef {import(\"./interfaces\").IPDFXfaLayerFactory} IPDFXfaLayerFactory */\n/** @typedef {import(\"./text_highlighter\").TextHighlighter} TextHighlighter */\n\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\nimport { NullL10n } from \"./l10n_utils.js\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { StructTreeLayerBuilder } from \"./struct_tree_layer_builder.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\n/**\n * @implements IPDFAnnotationLayerFactory\n */\nclass DefaultAnnotationLayerFactory {\n  /**\n   * @param {HTMLDivElement} pageDiv\n   * @param {PDFPageProxy} pdfPage\n   * @param {AnnotationStorage} [annotationStorage]\n   * @param {string} [imageResourcesPath] - Path for image resources, mainly\n   *   for annotation icons. Include trailing slash.\n   * @param {boolean} renderForms\n   * @param {IL10n} l10n\n   * @param {boolean} [enableScripting]\n   * @param {Promise<boolean>} [hasJSActionsPromise]\n   * @param {Object} [mouseState]\n   * @param {Promise<Object<string, Array<Object>> | null>}\n   *   [fieldObjectsPromise]\n   * @param {Map<string, HTMLCanvasElement>} [annotationCanvasMap] - Map some\n   *   annotation ids with canvases used to render them.\n   * @returns {AnnotationLayerBuilder}\n   */\n  createAnnotationLayerBuilder(\n    pageDiv,\n    pdfPage,\n    annotationStorage = null,\n    imageResourcesPath = \"\",\n    renderForms = true,\n    l10n = NullL10n,\n    enableScripting = false,\n    hasJSActionsPromise = null,\n    mouseState = null,\n    fieldObjectsPromise = null,\n    annotationCanvasMap = null\n  ) {\n    return new AnnotationLayerBuilder({\n      pageDiv,\n      pdfPage,\n      imageResourcesPath,\n      renderForms,\n      linkService: new SimpleLinkService(),\n      l10n,\n      annotationStorage,\n      enableScripting,\n      hasJSActionsPromise,\n      fieldObjectsPromise,\n      mouseState,\n      annotationCanvasMap,\n    });\n  }\n}\n\n/**\n * @implements IPDFStructTreeLayerFactory\n */\nclass DefaultStructTreeLayerFactory {\n  /**\n   * @param {PDFPageProxy} pdfPage\n   * @returns {StructTreeLayerBuilder}\n   */\n  createStructTreeLayerBuilder(pdfPage) {\n    return new StructTreeLayerBuilder({\n      pdfPage,\n    });\n  }\n}\n\n/**\n * @implements IPDFTextLayerFactory\n */\nclass DefaultTextLayerFactory {\n  /**\n   * @param {HTMLDivElement} textLayerDiv\n   * @param {number} pageIndex\n   * @param {PageViewport} viewport\n   * @param {boolean} enhanceTextSelection\n   * @param {EventBus} eventBus\n   * @param {TextHighlighter} highlighter\n   * @returns {TextLayerBuilder}\n   */\n  createTextLayerBuilder(\n    textLayerDiv,\n    pageIndex,\n    viewport,\n    enhanceTextSelection = false,\n    eventBus,\n    highlighter\n  ) {\n    return new TextLayerBuilder({\n      textLayerDiv,\n      pageIndex,\n      viewport,\n      enhanceTextSelection,\n      eventBus,\n      highlighter,\n    });\n  }\n}\n\n/**\n * @implements IPDFXfaLayerFactory\n */\nclass DefaultXfaLayerFactory {\n  /**\n   * @param {HTMLDivElement} pageDiv\n   * @param {PDFPageProxy} pdfPage\n   * @param {AnnotationStorage} [annotationStorage]\n   * @param {Object} [xfaHtml]\n   */\n  createXfaLayerBuilder(\n    pageDiv,\n    pdfPage,\n    annotationStorage = null,\n    xfaHtml = null\n  ) {\n    return new XfaLayerBuilder({\n      pageDiv,\n      pdfPage,\n      annotationStorage,\n      linkService: new SimpleLinkService(),\n      xfaHtml,\n    });\n  }\n}\n\nexport {\n  DefaultAnnotationLayerFactory,\n  DefaultStructTreeLayerFactory,\n  DefaultTextLayerFactory,\n  DefaultXfaLayerFactory,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { AnnotationLayer } from \"pdfjs-lib\";\nimport { NullL10n } from \"./l10n_utils.js\";\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} downloadManager\n * @property {IL10n} l10n - Localization service.\n * @property {boolean} [enableScripting]\n * @property {Promise<boolean>} [hasJSActionsPromise]\n * @property {Promise<Object<string, Array<Object>> | null>}\n *   [fieldObjectsPromise]\n * @property {Object} [mouseState]\n * @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]\n */\n\nclass AnnotationLayerBuilder {\n  /**\n   * @param {AnnotationLayerBuilderOptions} options\n   */\n  constructor({\n    pageDiv,\n    pdfPage,\n    linkService,\n    downloadManager,\n    annotationStorage = null,\n    imageResourcesPath = \"\",\n    renderForms = true,\n    l10n = NullL10n,\n    enableScripting = false,\n    hasJSActionsPromise = null,\n    fieldObjectsPromise = null,\n    mouseState = null,\n    annotationCanvasMap = null,\n  }) {\n    this.pageDiv = pageDiv;\n    this.pdfPage = pdfPage;\n    this.linkService = linkService;\n    this.downloadManager = downloadManager;\n    this.imageResourcesPath = imageResourcesPath;\n    this.renderForms = renderForms;\n    this.l10n = l10n;\n    this.annotationStorage = annotationStorage;\n    this.enableScripting = enableScripting;\n    this._hasJSActionsPromise = hasJSActionsPromise;\n    this._fieldObjectsPromise = fieldObjectsPromise;\n    this._mouseState = mouseState;\n    this._annotationCanvasMap = annotationCanvasMap;\n\n    this.div = null;\n    this._cancelled = false;\n  }\n\n  /**\n   * @param {PageViewport} viewport\n   * @param {string} intent (default value is 'display')\n   * @returns {Promise<void>} A promise that is resolved when rendering of the\n   *   annotations is complete.\n   */\n  async render(viewport, intent = \"display\") {\n    const [annotations, hasJSActions = false, fieldObjects = null] =\n      await Promise.all([\n        this.pdfPage.getAnnotations({ intent }),\n        this._hasJSActionsPromise,\n        this._fieldObjectsPromise,\n      ]);\n\n    if (this._cancelled || annotations.length === 0) {\n      return;\n    }\n\n    const parameters = {\n      viewport: viewport.clone({ dontFlip: true }),\n      div: this.div,\n      annotations,\n      page: this.pdfPage,\n      imageResourcesPath: this.imageResourcesPath,\n      renderForms: this.renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      annotationStorage: this.annotationStorage,\n      enableScripting: this.enableScripting,\n      hasJSActions,\n      fieldObjects,\n      mouseState: this._mouseState,\n      annotationCanvasMap: this._annotationCanvasMap,\n    };\n\n    if (this.div) {\n      // If an annotationLayer already exists, refresh its children's\n      // transformation matrices.\n      AnnotationLayer.update(parameters);\n    } else {\n      // Create an annotation layer div and render the annotations\n      // if there is at least one annotation.\n      this.div = document.createElement(\"div\");\n      this.div.className = \"annotationLayer\";\n      this.pageDiv.appendChild(this.div);\n      parameters.div = this.div;\n\n      AnnotationLayer.render(parameters);\n      this.l10n.translate(this.div);\n    }\n  }\n\n  cancel() {\n    this._cancelled = true;\n  }\n\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\n\nexport { AnnotationLayerBuilder };\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  define(Gp, \"constructor\", GeneratorFunctionPrototype);\n  define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals module, __non_webpack_require__ */\n\n\"use strict\";\n\nlet pdfjsLib;\nif (typeof window !== \"undefined\" && window[\"pdfjs-dist/build/pdf\"]) {\n  pdfjsLib = window[\"pdfjs-dist/build/pdf\"];\n} else {\n  pdfjsLib = __non_webpack_require__(\"../build/pdf.js\");\n}\nmodule.exports = pdfjsLib;\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A subset of the l10n strings in the `l10n/en-US/viewer.properties` file.\n */\nconst DEFAULT_L10N_STRINGS = {\n  of_pages: \"of {{pagesCount}}\",\n  page_of_pages: \"({{pageNumber}} of {{pagesCount}})\",\n\n  document_properties_kb: \"{{size_kb}} KB ({{size_b}} bytes)\",\n  document_properties_mb: \"{{size_mb}} MB ({{size_b}} bytes)\",\n  document_properties_date_string: \"{{date}}, {{time}}\",\n  document_properties_page_size_unit_inches: \"in\",\n  document_properties_page_size_unit_millimeters: \"mm\",\n  document_properties_page_size_orientation_portrait: \"portrait\",\n  document_properties_page_size_orientation_landscape: \"landscape\",\n  document_properties_page_size_name_a3: \"A3\",\n  document_properties_page_size_name_a4: \"A4\",\n  document_properties_page_size_name_letter: \"Letter\",\n  document_properties_page_size_name_legal: \"Legal\",\n  document_properties_page_size_dimension_string:\n    \"{{width}} × {{height}} {{unit}} ({{orientation}})\",\n  document_properties_page_size_dimension_name_string:\n    \"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\",\n  document_properties_linearized_yes: \"Yes\",\n  document_properties_linearized_no: \"No\",\n\n  print_progress_percent: \"{{progress}}%\",\n\n  \"toggle_sidebar.title\": \"Toggle Sidebar\",\n  \"toggle_sidebar_notification2.title\":\n    \"Toggle Sidebar (document contains outline/attachments/layers)\",\n\n  additional_layers: \"Additional Layers\",\n  page_landmark: \"Page {{page}}\",\n  thumb_page_title: \"Page {{page}}\",\n  thumb_page_canvas: \"Thumbnail of Page {{page}}\",\n\n  find_reached_top: \"Reached top of document, continued from bottom\",\n  find_reached_bottom: \"Reached end of document, continued from top\",\n  \"find_match_count[one]\": \"{{current}} of {{total}} match\",\n  \"find_match_count[other]\": \"{{current}} of {{total}} matches\",\n  \"find_match_count_limit[one]\": \"More than {{limit}} match\",\n  \"find_match_count_limit[other]\": \"More than {{limit}} matches\",\n  find_not_found: \"Phrase not found\",\n\n  error_version_info: \"PDF.js v{{version}} (build: {{build}})\",\n  error_message: \"Message: {{message}}\",\n  error_stack: \"Stack: {{stack}}\",\n  error_file: \"File: {{file}}\",\n  error_line: \"Line: {{line}}\",\n  rendering_error: \"An error occurred while rendering the page.\",\n\n  page_scale_width: \"Page Width\",\n  page_scale_fit: \"Page Fit\",\n  page_scale_auto: \"Automatic Zoom\",\n  page_scale_actual: \"Actual Size\",\n  page_scale_percent: \"{{scale}}%\",\n\n  loading: \"Loading…\",\n  loading_error: \"An error occurred while loading the PDF.\",\n  invalid_file_error: \"Invalid or corrupted PDF file.\",\n  missing_file_error: \"Missing PDF file.\",\n  unexpected_response_error: \"Unexpected server response.\",\n\n  printing_not_supported:\n    \"Warning: Printing is not fully supported by this browser.\",\n  printing_not_ready: \"Warning: The PDF is not fully loaded for printing.\",\n  web_fonts_disabled:\n    \"Web fonts are disabled: unable to use embedded PDF fonts.\",\n};\n\nfunction getL10nFallback(key, args) {\n  switch (key) {\n    case \"find_match_count\":\n      key = `find_match_count[${args.total === 1 ? \"one\" : \"other\"}]`;\n      break;\n    case \"find_match_count_limit\":\n      key = `find_match_count_limit[${args.limit === 1 ? \"one\" : \"other\"}]`;\n      break;\n  }\n  return DEFAULT_L10N_STRINGS[key] || \"\";\n}\n\nconst PARTIAL_LANG_CODES = {\n  en: \"en-US\",\n  es: \"es-ES\",\n  fy: \"fy-NL\",\n  ga: \"ga-IE\",\n  gu: \"gu-IN\",\n  hi: \"hi-IN\",\n  hy: \"hy-AM\",\n  nb: \"nb-NO\",\n  ne: \"ne-NP\",\n  nn: \"nn-NO\",\n  pa: \"pa-IN\",\n  pt: \"pt-PT\",\n  sv: \"sv-SE\",\n  zh: \"zh-CN\",\n};\n\n// Try to support \"incompletely\" specified language codes (see issue 13689).\nfunction fixupLangCode(langCode) {\n  return PARTIAL_LANG_CODES[langCode?.toLowerCase()] || langCode;\n}\n\n// Replaces {{arguments}} with their values.\nfunction formatL10nValue(text, args) {\n  if (!args) {\n    return text;\n  }\n  return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (all, name) => {\n    return name in args ? args[name] : \"{{\" + name + \"}}\";\n  });\n}\n\n/**\n * No-op implementation of the localization service.\n * @implements {IL10n}\n */\nconst NullL10n = {\n  async getLanguage() {\n    return \"en-us\";\n  },\n\n  async getDirection() {\n    return \"ltr\";\n  },\n\n  async get(key, args = null, fallback = getL10nFallback(key, args)) {\n    return formatL10nValue(fallback, args);\n  },\n\n  async translate(element) {},\n};\n\nexport { fixupLangCode, getL10nFallback, NullL10n };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { addLinkAttributes, LinkTarget } from \"pdfjs-lib\";\nimport { parseQueryString } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n *   for external links. Must use one of the values from {LinkTarget}.\n *   Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n *   external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n *   thus preserving the current zoom level in the viewer, when navigating\n *   to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n  /**\n   * @param {PDFLinkServiceOptions} options\n   */\n  constructor({\n    eventBus,\n    externalLinkTarget = null,\n    externalLinkRel = null,\n    ignoreDestinationZoom = false,\n  } = {}) {\n    this.eventBus = eventBus;\n    this.externalLinkTarget = externalLinkTarget;\n    this.externalLinkRel = externalLinkRel;\n    this.externalLinkEnabled = true;\n    this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n    this.baseUrl = null;\n    this.pdfDocument = null;\n    this.pdfViewer = null;\n    this.pdfHistory = null;\n\n    this._pagesRefCache = null;\n  }\n\n  setDocument(pdfDocument, baseUrl = null) {\n    this.baseUrl = baseUrl;\n    this.pdfDocument = pdfDocument;\n    this._pagesRefCache = Object.create(null);\n  }\n\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n\n  setHistory(pdfHistory) {\n    this.pdfHistory = pdfHistory;\n  }\n\n  /**\n   * @type {number}\n   */\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  }\n\n  /**\n   * @type {number}\n   */\n  get page() {\n    return this.pdfViewer.currentPageNumber;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set page(value) {\n    this.pdfViewer.currentPageNumber = value;\n  }\n\n  /**\n   * @type {number}\n   */\n  get rotation() {\n    return this.pdfViewer.pagesRotation;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set rotation(value) {\n    this.pdfViewer.pagesRotation = value;\n  }\n\n  /**\n   * @private\n   */\n  _goToDestinationHelper(rawDest, namedDest = null, explicitDest) {\n    // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>\n    const destRef = explicitDest[0];\n    let pageNumber;\n\n    if (typeof destRef === \"object\" && destRef !== null) {\n      pageNumber = this._cachedPageNumber(destRef);\n\n      if (!pageNumber) {\n        // Fetch the page reference if it's not yet available. This could\n        // only occur during loading, before all pages have been resolved.\n        this.pdfDocument\n          .getPageIndex(destRef)\n          .then(pageIndex => {\n            this.cachePageRef(pageIndex + 1, destRef);\n            this._goToDestinationHelper(rawDest, namedDest, explicitDest);\n          })\n          .catch(() => {\n            console.error(\n              `PDFLinkService._goToDestinationHelper: \"${destRef}\" is not ` +\n                `a valid page reference, for dest=\"${rawDest}\".`\n            );\n          });\n        return;\n      }\n    } else if (Number.isInteger(destRef)) {\n      pageNumber = destRef + 1;\n    } else {\n      console.error(\n        `PDFLinkService._goToDestinationHelper: \"${destRef}\" is not ` +\n          `a valid destination reference, for dest=\"${rawDest}\".`\n      );\n      return;\n    }\n    if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n      console.error(\n        `PDFLinkService._goToDestinationHelper: \"${pageNumber}\" is not ` +\n          `a valid page number, for dest=\"${rawDest}\".`\n      );\n      return;\n    }\n\n    if (this.pdfHistory) {\n      // Update the browser history before scrolling the new destination into\n      // view, to be able to accurately capture the current document position.\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n    }\n\n    this.pdfViewer.scrollPageIntoView({\n      pageNumber,\n      destArray: explicitDest,\n      ignoreDestinationZoom: this._ignoreDestinationZoom,\n    });\n  }\n\n  /**\n   * This method will, when available, also update the browser history.\n   *\n   * @param {string|Array} dest - The named, or explicit, PDF destination.\n   */\n  async goToDestination(dest) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let namedDest, explicitDest;\n    if (typeof dest === \"string\") {\n      namedDest = dest;\n      explicitDest = await this.pdfDocument.getDestination(dest);\n    } else {\n      namedDest = null;\n      explicitDest = await dest;\n    }\n    if (!Array.isArray(explicitDest)) {\n      console.error(\n        `PDFLinkService.goToDestination: \"${explicitDest}\" is not ` +\n          `a valid destination array, for dest=\"${dest}\".`\n      );\n      return;\n    }\n    this._goToDestinationHelper(dest, namedDest, explicitDest);\n  }\n\n  /**\n   * This method will, when available, also update the browser history.\n   *\n   * @param {number|string} val - The page number, or page label.\n   */\n  goToPage(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageNumber =\n      (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n      val | 0;\n    if (\n      !(\n        Number.isInteger(pageNumber) &&\n        pageNumber > 0 &&\n        pageNumber <= this.pagesCount\n      )\n    ) {\n      console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n      return;\n    }\n\n    if (this.pdfHistory) {\n      // Update the browser history before scrolling the new page into view,\n      // to be able to accurately capture the current document position.\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.pushPage(pageNumber);\n    }\n\n    this.pdfViewer.scrollPageIntoView({ pageNumber });\n  }\n\n  /**\n   * Wrapper around the `addLinkAttributes`-function in the API.\n   * @param {HTMLAnchorElement} link\n   * @param {string} url\n   * @param {boolean} [newWindow]\n   */\n  addLinkAttributes(link, url, newWindow = false) {\n    addLinkAttributes(link, {\n      url,\n      target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n      rel: this.externalLinkRel,\n      enabled: this.externalLinkEnabled,\n    });\n  }\n\n  /**\n   * @param {string|Array} dest - The PDF destination object.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getDestinationHash(dest) {\n    if (typeof dest === \"string\") {\n      if (dest.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(dest));\n      }\n    } else if (Array.isArray(dest)) {\n      const str = JSON.stringify(dest);\n      if (str.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(str));\n      }\n    }\n    return this.getAnchorUrl(\"\");\n  }\n\n  /**\n   * Prefix the full url on anchor links to make sure that links are resolved\n   * relative to the current URL instead of the one defined in <base href>.\n   * @param {string} anchor - The anchor hash, including the #.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getAnchorUrl(anchor) {\n    return (this.baseUrl || \"\") + anchor;\n  }\n\n  /**\n   * @param {string} hash\n   */\n  setHash(hash) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let pageNumber, dest;\n    if (hash.includes(\"=\")) {\n      const params = parseQueryString(hash);\n      if (params.has(\"search\")) {\n        this.eventBus.dispatch(\"findfromurlhash\", {\n          source: this,\n          query: params.get(\"search\").replace(/\"/g, \"\"),\n          phraseSearch: params.get(\"phrase\") === \"true\",\n        });\n      }\n      // borrowing syntax from \"Parameters for Opening PDF Files\"\n      if (params.has(\"page\")) {\n        pageNumber = params.get(\"page\") | 0 || 1;\n      }\n      if (params.has(\"zoom\")) {\n        // Build the destination array.\n        const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n        const zoomArg = zoomArgs[0];\n        const zoomArgNumber = parseFloat(zoomArg);\n\n        if (!zoomArg.includes(\"Fit\")) {\n          // If the zoomArg is a number, it has to get divided by 100. If it's\n          // a string, it should stay as it is.\n          dest = [\n            null,\n            { name: \"XYZ\" },\n            zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n            zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n            zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n          ];\n        } else {\n          if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n            dest = [null, { name: zoomArg }];\n          } else if (\n            zoomArg === \"FitH\" ||\n            zoomArg === \"FitBH\" ||\n            zoomArg === \"FitV\" ||\n            zoomArg === \"FitBV\"\n          ) {\n            dest = [\n              null,\n              { name: zoomArg },\n              zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n            ];\n          } else if (zoomArg === \"FitR\") {\n            if (zoomArgs.length !== 5) {\n              console.error(\n                'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n              );\n            } else {\n              dest = [\n                null,\n                { name: zoomArg },\n                zoomArgs[1] | 0,\n                zoomArgs[2] | 0,\n                zoomArgs[3] | 0,\n                zoomArgs[4] | 0,\n              ];\n            }\n          } else {\n            console.error(\n              `PDFLinkService.setHash: \"${zoomArg}\" is not ` +\n                \"a valid zoom value.\"\n            );\n          }\n        }\n      }\n      if (dest) {\n        this.pdfViewer.scrollPageIntoView({\n          pageNumber: pageNumber || this.page,\n          destArray: dest,\n          allowNegativeOffset: true,\n        });\n      } else if (pageNumber) {\n        this.page = pageNumber; // simple page\n      }\n      if (params.has(\"pagemode\")) {\n        this.eventBus.dispatch(\"pagemode\", {\n          source: this,\n          mode: params.get(\"pagemode\"),\n        });\n      }\n      // Ensure that this parameter is *always* handled last, in order to\n      // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n      if (params.has(\"nameddest\")) {\n        this.goToDestination(params.get(\"nameddest\"));\n      }\n    } else {\n      // Named (or explicit) destination.\n      dest = unescape(hash);\n      try {\n        dest = JSON.parse(dest);\n\n        if (!Array.isArray(dest)) {\n          // Avoid incorrectly rejecting a valid named destination, such as\n          // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n          dest = dest.toString();\n        }\n      } catch (ex) {}\n\n      if (typeof dest === \"string\" || isValidExplicitDestination(dest)) {\n        this.goToDestination(dest);\n        return;\n      }\n      console.error(\n        `PDFLinkService.setHash: \"${unescape(hash)}\" is not ` +\n          \"a valid destination.\"\n      );\n    }\n  }\n\n  /**\n   * @param {string} action\n   */\n  executeNamedAction(action) {\n    // See PDF reference, table 8.45 - Named action\n    switch (action) {\n      case \"GoBack\":\n        this.pdfHistory?.back();\n        break;\n\n      case \"GoForward\":\n        this.pdfHistory?.forward();\n        break;\n\n      case \"NextPage\":\n        this.pdfViewer.nextPage();\n        break;\n\n      case \"PrevPage\":\n        this.pdfViewer.previousPage();\n        break;\n\n      case \"LastPage\":\n        this.page = this.pagesCount;\n        break;\n\n      case \"FirstPage\":\n        this.page = 1;\n        break;\n\n      default:\n        break; // No action according to spec\n    }\n\n    this.eventBus.dispatch(\"namedaction\", {\n      source: this,\n      action,\n    });\n  }\n\n  /**\n   * @param {number} pageNum - page number.\n   * @param {Object} pageRef - reference to the page.\n   */\n  cachePageRef(pageNum, pageRef) {\n    if (!pageRef) {\n      return;\n    }\n    const refStr =\n      pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n    this._pagesRefCache[refStr] = pageNum;\n  }\n\n  /**\n   * @private\n   */\n  _cachedPageNumber(pageRef) {\n    if (!pageRef) {\n      return null;\n    }\n    const refStr =\n      pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;\n    return this._pagesRefCache?.[refStr] || null;\n  }\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageVisible(pageNumber) {\n    return this.pdfViewer.isPageVisible(pageNumber);\n  }\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageCached(pageNumber) {\n    return this.pdfViewer.isPageCached(pageNumber);\n  }\n}\n\nfunction isValidExplicitDestination(dest) {\n  if (!Array.isArray(dest)) {\n    return false;\n  }\n  const destLength = dest.length;\n  if (destLength < 2) {\n    return false;\n  }\n  const page = dest[0];\n  if (\n    !(\n      typeof page === \"object\" &&\n      Number.isInteger(page.num) &&\n      Number.isInteger(page.gen)\n    ) &&\n    !(Number.isInteger(page) && page >= 0)\n  ) {\n    return false;\n  }\n  const zoom = dest[1];\n  if (!(typeof zoom === \"object\" && typeof zoom.name === \"string\")) {\n    return false;\n  }\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (destLength !== 5) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return destLength === 2;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (destLength !== 3) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (destLength !== 6) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (let i = 2; i < destLength; i++) {\n    const param = dest[i];\n    if (!(typeof param === \"number\" || (allowNull && param === null))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService {\n  constructor() {\n    this.externalLinkEnabled = true;\n  }\n\n  /**\n   * @type {number}\n   */\n  get pagesCount() {\n    return 0;\n  }\n\n  /**\n   * @type {number}\n   */\n  get page() {\n    return 0;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set page(value) {}\n\n  /**\n   * @type {number}\n   */\n  get rotation() {\n    return 0;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set rotation(value) {}\n\n  /**\n   * @param {string|Array} dest - The named, or explicit, PDF destination.\n   */\n  async goToDestination(dest) {}\n\n  /**\n   * @param {number|string} val - The page number, or page label.\n   */\n  goToPage(val) {}\n\n  /**\n   * @param {HTMLAnchorElement} link\n   * @param {string} url\n   * @param {boolean} [newWindow]\n   */\n  addLinkAttributes(link, url, newWindow = false) {\n    addLinkAttributes(link, { url, enabled: this.externalLinkEnabled });\n  }\n\n  /**\n   * @param dest - The PDF destination object.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getDestinationHash(dest) {\n    return \"#\";\n  }\n\n  /**\n   * @param hash - The PDF parameters/hash.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getAnchorUrl(hash) {\n    return \"#\";\n  }\n\n  /**\n   * @param {string} hash\n   */\n  setHash(hash) {}\n\n  /**\n   * @param {string} action\n   */\n  executeNamedAction(action) {}\n\n  /**\n   * @param {number} pageNum - page number.\n   * @param {Object} pageRef - reference to the page.\n   */\n  cachePageRef(pageNum, pageRef) {}\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageVisible(pageNumber) {\n    return true;\n  }\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageCached(pageNumber) {\n    return true;\n  }\n}\n\nexport { PDFLinkService, SimpleLinkService };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst LOADINGBAR_END_OFFSET_VAR = \"--loadingBar-end-offset\";\n\nconst RenderingStates = {\n  INITIAL: 0,\n  RUNNING: 1,\n  PAUSED: 2,\n  FINISHED: 3,\n};\n\nconst PresentationModeState = {\n  UNKNOWN: 0,\n  NORMAL: 1,\n  CHANGING: 2,\n  FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n  UNKNOWN: -1,\n  NONE: 0,\n  THUMBS: 1, // Default value.\n  OUTLINE: 2,\n  ATTACHMENTS: 3,\n  LAYERS: 4,\n};\n\nconst RendererType = {\n  CANVAS: \"canvas\",\n  SVG: \"svg\",\n};\n\nconst TextLayerMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_ENHANCE: 2,\n};\n\nconst ScrollMode = {\n  UNKNOWN: -1,\n  VERTICAL: 0, // Default value.\n  HORIZONTAL: 1,\n  WRAPPED: 2,\n  PAGE: 3,\n};\n\nconst SpreadMode = {\n  UNKNOWN: -1,\n  NONE: 0, // Default value.\n  ODD: 1,\n  EVEN: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Returns scale factor for the canvas. It makes sense for the HiDPI displays.\n * @returns {Object} The object with horizontal (sx) and vertical (sy)\n *                   scales. The scaled property is set to false if scaling is\n *                   not required, true otherwise.\n */\nfunction getOutputScale(ctx) {\n  const devicePixelRatio = window.devicePixelRatio || 1;\n  const backingStoreRatio =\n    ctx.webkitBackingStorePixelRatio ||\n    ctx.mozBackingStorePixelRatio ||\n    ctx.backingStorePixelRatio ||\n    1;\n  const pixelRatio = devicePixelRatio / backingStoreRatio;\n  return {\n    sx: pixelRatio,\n    sy: pixelRatio,\n    scaled: pixelRatio !== 1,\n  };\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n *   specifying the offset from the top left edge.\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n *   ignore elements that either: Contains marked content identifiers,\n *   or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n  // Assuming offsetParent is available (it's not available when viewer is in\n  // hidden iframe or object). We have to scroll: if the offsetParent is not set\n  // producing the error. See also animationStarted.\n  let parent = element.offsetParent;\n  if (!parent) {\n    console.error(\"offsetParent is not set -- cannot scroll\");\n    return;\n  }\n  let offsetY = element.offsetTop + element.clientTop;\n  let offsetX = element.offsetLeft + element.clientLeft;\n  while (\n    (parent.clientHeight === parent.scrollHeight &&\n      parent.clientWidth === parent.scrollWidth) ||\n    (scrollMatches &&\n      (parent.classList.contains(\"markedContent\") ||\n        getComputedStyle(parent).overflow === \"hidden\"))\n  ) {\n    offsetY += parent.offsetTop;\n    offsetX += parent.offsetLeft;\n\n    parent = parent.offsetParent;\n    if (!parent) {\n      return; // no need to scroll\n    }\n  }\n  if (spot) {\n    if (spot.top !== undefined) {\n      offsetY += spot.top;\n    }\n    if (spot.left !== undefined) {\n      offsetX += spot.left;\n      parent.scrollLeft = offsetX;\n    }\n  }\n  parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n  const debounceScroll = function (evt) {\n    if (rAF) {\n      return;\n    }\n    // schedule an invocation of scroll for next animation frame.\n    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n      rAF = null;\n\n      const currentX = viewAreaElement.scrollLeft;\n      const lastX = state.lastX;\n      if (currentX !== lastX) {\n        state.right = currentX > lastX;\n      }\n      state.lastX = currentX;\n      const currentY = viewAreaElement.scrollTop;\n      const lastY = state.lastY;\n      if (currentY !== lastY) {\n        state.down = currentY > lastY;\n      }\n      state.lastY = currentY;\n      callback(state);\n    });\n  };\n\n  const state = {\n    right: true,\n    down: true,\n    lastX: viewAreaElement.scrollLeft,\n    lastY: viewAreaElement.scrollTop,\n    _eventHandler: debounceScroll,\n  };\n\n  let rAF = null;\n  viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\n  return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value&param2=...).\n * @param {string}\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n  const params = new Map();\n  for (const [key, value] of new URLSearchParams(query)) {\n    params.set(key.toLowerCase(), value);\n  }\n  return params;\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n *                   or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition) {\n  let minIndex = 0;\n  let maxIndex = items.length - 1;\n\n  if (maxIndex < 0 || !condition(items[maxIndex])) {\n    return items.length;\n  }\n  if (condition(items[minIndex])) {\n    return minIndex;\n  }\n\n  while (minIndex < maxIndex) {\n    const currentIndex = (minIndex + maxIndex) >> 1;\n    const currentItem = items[currentIndex];\n    if (condition(currentItem)) {\n      maxIndex = currentIndex;\n    } else {\n      minIndex = currentIndex + 1;\n    }\n  }\n  return minIndex; /* === maxIndex */\n}\n\n/**\n *  Approximates float number as a fraction using Farey sequence (max order\n *  of 8).\n *  @param {number} x - Positive float number.\n *  @returns {Array} Estimated fraction: the first array item is a numerator,\n *                   the second one is a denominator.\n */\nfunction approximateFraction(x) {\n  // Fast paths for int numbers or their inversions.\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n\n  const x_ = x > 1 ? xinv : x;\n  // a/b and c/d are neighbours in Farey sequence.\n  let a = 0,\n    b = 1,\n    c = 1,\n    d = 1;\n  // Limiting search to order 8.\n  while (true) {\n    // Generating next term in sequence (order of q).\n    const p = a + c,\n      q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p;\n      d = q;\n    } else {\n      a = p;\n      b = q;\n    }\n  }\n  let result;\n  // Select closest of the neighbours to x.\n  if (x_ - a / b < c / d - x_) {\n    result = x_ === x ? [a, b] : [b, a];\n  } else {\n    result = x_ === x ? [c, d] : [d, c];\n  }\n  return result;\n}\n\nfunction roundToDivide(x, div) {\n  const r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n  const [x1, y1, x2, y2] = view;\n  // We need to take the page rotation into account as well.\n  const changeOrientation = rotate % 180 !== 0;\n\n  const width = ((x2 - x1) / 72) * userUnit;\n  const height = ((y2 - y1) / 72) * userUnit;\n\n  return {\n    width: changeOrientation ? height : width,\n    height: changeOrientation ? width : height,\n  };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n *   before the first visible element in `views`, but not by too much. (Usually,\n *   this will be the first element in the first partially visible row in\n *   `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n  // binarySearchFirstItem's assumption is that the input is ordered, with only\n  // one index where the conditions flips from false to true: [false ...,\n  // true...]. With vertical scrolling and spreads, it is possible to have\n  // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n  // similar sequence, with many more mixed true and false in the middle.\n  //\n  // So there is no guarantee that the binary search yields the index of the\n  // first visible element. It could have been any of the other visible elements\n  // that were preceded by a hidden element.\n\n  // Of course, if either this element or the previous (hidden) element is also\n  // the first element, there's nothing to worry about.\n  if (index < 2) {\n    return index;\n  }\n\n  // That aside, the possible cases are represented below.\n  //\n  //     ****  = fully hidden\n  //     A*B*  = mix of partially visible and/or hidden pages\n  //     CDEF  = fully visible\n  //\n  // (1) Binary search could have returned A, in which case we can stop.\n  // (2) Binary search could also have returned B, in which case we need to\n  // check the whole row.\n  // (3) Binary search could also have returned C, in which case we need to\n  // check the whole previous row.\n  //\n  // There's one other possibility:\n  //\n  //     ****  = fully hidden\n  //     ABCD  = mix of fully and/or partially visible pages\n  //\n  // (4) Binary search could only have returned A.\n\n  // Initially assume that we need to find the beginning of the current row\n  // (case 1, 2, or 4), which means finding a page that is above the current\n  // page's top. If the found page is partially visible, we're definitely not in\n  // case 3, and this assumption is correct.\n  let elt = views[index].div;\n  let pageTop = elt.offsetTop + elt.clientTop;\n\n  if (pageTop >= top) {\n    // The found page is fully visible, so we're actually either in case 3 or 4,\n    // and unfortunately we can't tell the difference between them without\n    // scanning the entire previous row, so we just conservatively assume that\n    // we do need to backtrack to that row. In both cases, the previous page is\n    // in the previous row, so use its top instead.\n    elt = views[index - 1].div;\n    pageTop = elt.offsetTop + elt.clientTop;\n  }\n\n  // Now we backtrack to the first page that still has its bottom below\n  // `pageTop`, which is the top of a page in the first visible row (unless\n  // we're in case 4, in which case it's the row before that).\n  // `index` is found by binary search, so the page at `index - 1` is\n  // invisible and we can start looking for potentially visible pages from\n  // `index - 2`. (However, if this loop terminates on its first iteration,\n  // which is the case when pages are stacked vertically, `index` should remain\n  // unchanged, so we use a distinct loop variable.)\n  for (let i = index - 2; i >= 0; --i) {\n    elt = views[i].div;\n    if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n      // We have reached the previous row, so stop now.\n      // This loop is expected to terminate relatively quickly because the\n      // number of pages per row is expected to be small.\n      break;\n    }\n    index = i;\n  }\n  return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n *   HTMLElement, which should all be descendants of `scrollEl` satisfying the\n *   relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n *   sorted in descending order of the percent of their padding box that is\n *   visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n *   laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n *   be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n *   - If `horizontal`, no left of any earlier element is to the right of the\n *     left of any later element.\n *   - Otherwise, `views` can be split into contiguous rows where, within a row,\n *     no top of any element is below the bottom of any other element, and\n *     between rows, no bottom of any element in an earlier row is below the\n *     top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters}\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n  scrollEl,\n  views,\n  sortByVisibility = false,\n  horizontal = false,\n  rtl = false,\n}) {\n  const top = scrollEl.scrollTop,\n    bottom = top + scrollEl.clientHeight;\n  const left = scrollEl.scrollLeft,\n    right = left + scrollEl.clientWidth;\n\n  // Throughout this \"generic\" function, comments will assume we're working with\n  // PDF document pages, which is the most important and complex case. In this\n  // case, the visible elements we're actually interested is the page canvas,\n  // which is contained in a wrapper which adds no padding/border/margin, which\n  // is itself contained in `view.div` which adds no padding (but does add a\n  // border). So, as specified in this function's doc comment, this function\n  // does all of its work on the padding edge of the provided views, starting at\n  // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n  // the border). Adding clientWidth/Height gets us the bottom-right corner of\n  // the padding edge.\n  function isElementBottomAfterViewTop(view) {\n    const element = view.div;\n    const elementBottom =\n      element.offsetTop + element.clientTop + element.clientHeight;\n    return elementBottom > top;\n  }\n  function isElementNextAfterViewHorizontally(view) {\n    const element = view.div;\n    const elementLeft = element.offsetLeft + element.clientLeft;\n    const elementRight = elementLeft + element.clientWidth;\n    return rtl ? elementLeft < right : elementRight > left;\n  }\n\n  const visible = [],\n    ids = new Set(),\n    numViews = views.length;\n  let firstVisibleElementInd = binarySearchFirstItem(\n    views,\n    horizontal\n      ? isElementNextAfterViewHorizontally\n      : isElementBottomAfterViewTop\n  );\n\n  // Please note the return value of the `binarySearchFirstItem` function when\n  // no valid element is found (hence the `firstVisibleElementInd` check below).\n  if (\n    firstVisibleElementInd > 0 &&\n    firstVisibleElementInd < numViews &&\n    !horizontal\n  ) {\n    // In wrapped scrolling (or vertical scrolling with spreads), with some page\n    // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n    // condition: there can be pages with bottoms above the view top between\n    // pages with bottoms below. This function detects and corrects that error;\n    // see it for more comments.\n    firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n      firstVisibleElementInd,\n      views,\n      top\n    );\n  }\n\n  // lastEdge acts as a cutoff for us to stop looping, because we know all\n  // subsequent pages will be hidden.\n  //\n  // When using wrapped scrolling or vertical scrolling with spreads, we can't\n  // simply stop the first time we reach a page below the bottom of the view;\n  // the tops of subsequent pages on the same row could still be visible. In\n  // horizontal scrolling, we don't have that issue, so we can stop as soon as\n  // we pass `right`, without needing the code below that handles the -1 case.\n  let lastEdge = horizontal ? right : -1;\n\n  for (let i = firstVisibleElementInd; i < numViews; i++) {\n    const view = views[i],\n      element = view.div;\n    const currentWidth = element.offsetLeft + element.clientLeft;\n    const currentHeight = element.offsetTop + element.clientTop;\n    const viewWidth = element.clientWidth,\n      viewHeight = element.clientHeight;\n    const viewRight = currentWidth + viewWidth;\n    const viewBottom = currentHeight + viewHeight;\n\n    if (lastEdge === -1) {\n      // As commented above, this is only needed in non-horizontal cases.\n      // Setting lastEdge to the bottom of the first page that is partially\n      // visible ensures that the next page fully below lastEdge is on the\n      // next row, which has to be fully hidden along with all subsequent rows.\n      if (viewBottom >= bottom) {\n        lastEdge = viewBottom;\n      }\n    } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n      break;\n    }\n\n    if (\n      viewBottom <= top ||\n      currentHeight >= bottom ||\n      viewRight <= left ||\n      currentWidth >= right\n    ) {\n      continue;\n    }\n\n    const hiddenHeight =\n      Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n    const hiddenWidth =\n      Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n\n    const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n      fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n    const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n    visible.push({\n      id: view.id,\n      x: currentWidth,\n      y: currentHeight,\n      view,\n      percent,\n      widthPercent: (fractionWidth * 100) | 0,\n    });\n    ids.add(view.id);\n  }\n\n  const first = visible[0],\n    last = visible[visible.length - 1];\n\n  if (sortByVisibility) {\n    visible.sort(function (a, b) {\n      const pc = a.percent - b.percent;\n      if (Math.abs(pc) > 0.001) {\n        return -pc;\n      }\n      return a.id - b.id; // ensure stability\n    });\n  }\n  return { first, last, views: visible, ids };\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenuHandler(evt) {\n  evt.preventDefault();\n}\n\nfunction normalizeWheelEventDirection(evt) {\n  let delta = Math.hypot(evt.deltaX, evt.deltaY);\n  const angle = Math.atan2(evt.deltaY, evt.deltaX);\n  if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n    // All that is left-up oriented has to change the sign.\n    delta = -delta;\n  }\n  return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n  let delta = normalizeWheelEventDirection(evt);\n\n  const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n  const MOUSE_DOM_DELTA_LINE_MODE = 1;\n  const MOUSE_PIXELS_PER_LINE = 30;\n  const MOUSE_LINES_PER_PAGE = 30;\n\n  // Converts delta to per-page units\n  if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n    delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n  } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n    delta /= MOUSE_LINES_PER_PAGE;\n  }\n  return delta;\n}\n\nfunction isValidRotation(angle) {\n  return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n  return (\n    Number.isInteger(mode) &&\n    Object.values(ScrollMode).includes(mode) &&\n    mode !== ScrollMode.UNKNOWN\n  );\n}\n\nfunction isValidSpreadMode(mode) {\n  return (\n    Number.isInteger(mode) &&\n    Object.values(SpreadMode).includes(mode) &&\n    mode !== SpreadMode.UNKNOWN\n  );\n}\n\nfunction isPortraitOrientation(size) {\n  return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n  if (\n    typeof PDFJSDev !== \"undefined\" &&\n    PDFJSDev.test(\"LIB\") &&\n    typeof window === \"undefined\"\n  ) {\n    // Prevent \"ReferenceError: window is not defined\" errors when running the\n    // unit-tests in Node.js environments.\n    setTimeout(resolve, 20);\n    return;\n  }\n  window.requestAnimationFrame(resolve);\n});\n\nfunction clamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n  constructor(id, { height, width, units } = {}) {\n    this.visible = true;\n\n    // Fetch the sub-elements for later.\n    this.div = document.querySelector(id + \" .progress\");\n    // Get the loading bar element, so it can be resized to fit the viewer.\n    this.bar = this.div.parentNode;\n\n    // Get options, with sensible defaults.\n    this.height = height || 100;\n    this.width = width || 100;\n    this.units = units || \"%\";\n\n    // Initialize heights.\n    this.div.style.height = this.height + this.units;\n    this.percent = 0;\n  }\n\n  _updateBar() {\n    if (this._indeterminate) {\n      this.div.classList.add(\"indeterminate\");\n      this.div.style.width = this.width + this.units;\n      return;\n    }\n\n    this.div.classList.remove(\"indeterminate\");\n    const progressSize = (this.width * this._percent) / 100;\n    this.div.style.width = progressSize + this.units;\n  }\n\n  get percent() {\n    return this._percent;\n  }\n\n  set percent(val) {\n    this._indeterminate = isNaN(val);\n    this._percent = clamp(val, 0, 100);\n    this._updateBar();\n  }\n\n  setWidth(viewer) {\n    if (!viewer) {\n      return;\n    }\n    const container = viewer.parentNode;\n    const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n    if (scrollbarWidth > 0) {\n      const doc = document.documentElement;\n      doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, `${scrollbarWidth}px`);\n    }\n  }\n\n  hide() {\n    if (!this.visible) {\n      return;\n    }\n    this.visible = false;\n    this.bar.classList.add(\"hidden\");\n  }\n\n  show() {\n    if (this.visible) {\n      return;\n    }\n    this.visible = true;\n    this.bar.classList.remove(\"hidden\");\n  }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n  let curRoot = document;\n  let curActiveOrFocused =\n    curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n  while (curActiveOrFocused?.shadowRoot) {\n    curRoot = curActiveOrFocused.shadowRoot;\n    curActiveOrFocused =\n      curRoot.activeElement || curRoot.querySelector(\":focus\");\n  }\n\n  return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * NOTE: This is supported to the extent that the viewer implements the\n *       necessary Scroll/Spread modes (since SinglePage, TwoPageLeft,\n *       and TwoPageRight all suggests using non-continuous scrolling).\n * @param {string} mode - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n  let scrollMode = ScrollMode.VERTICAL,\n    spreadMode = SpreadMode.NONE;\n\n  switch (layout) {\n    case \"SinglePage\":\n      scrollMode = ScrollMode.PAGE;\n      break;\n    case \"OneColumn\":\n      break;\n    case \"TwoPageLeft\":\n      scrollMode = ScrollMode.PAGE;\n    /* falls through */\n    case \"TwoColumnLeft\":\n      spreadMode = SpreadMode.ODD;\n      break;\n    case \"TwoPageRight\":\n      scrollMode = ScrollMode.PAGE;\n    /* falls through */\n    case \"TwoColumnRight\":\n      spreadMode = SpreadMode.EVEN;\n      break;\n  }\n  return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n *       since the Fullscreen API used in browsers requires that entering\n *       fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n  switch (mode) {\n    case \"UseNone\":\n      return SidebarView.NONE;\n    case \"UseThumbs\":\n      return SidebarView.THUMBS;\n    case \"UseOutlines\":\n      return SidebarView.OUTLINE;\n    case \"UseAttachments\":\n      return SidebarView.ATTACHMENTS;\n    case \"UseOC\":\n      return SidebarView.LAYERS;\n  }\n  return SidebarView.NONE; // Default value.\n}\n\nexport {\n  animationStarted,\n  apiPageLayoutToViewerModes,\n  apiPageModeToSidebarView,\n  approximateFraction,\n  AutoPrintRegExp,\n  backtrackBeforeAllVisibleElements, // only exported for testing\n  binarySearchFirstItem,\n  DEFAULT_SCALE,\n  DEFAULT_SCALE_DELTA,\n  DEFAULT_SCALE_VALUE,\n  getActiveOrFocusedElement,\n  getOutputScale,\n  getPageSizeInches,\n  getVisibleElements,\n  isPortraitOrientation,\n  isValidRotation,\n  isValidScrollMode,\n  isValidSpreadMode,\n  MAX_AUTO_SCALE,\n  MAX_SCALE,\n  MIN_SCALE,\n  noContextMenuHandler,\n  normalizeWheelEventDelta,\n  normalizeWheelEventDirection,\n  parseQueryString,\n  PresentationModeState,\n  ProgressBar,\n  RendererType,\n  RenderingStates,\n  roundToDivide,\n  SCROLLBAR_PADDING,\n  scrollIntoView,\n  ScrollMode,\n  SidebarView,\n  SpreadMode,\n  TextLayerMode,\n  UNKNOWN_SCALE,\n  VERTICAL_PADDING,\n  watchScroll,\n};\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n\nconst PDF_ROLE_TO_HTML_ROLE = {\n  // Document level structure types\n  Document: null, // There's a \"document\" role, but it doesn't make sense here.\n  DocumentFragment: null,\n  // Grouping level structure types\n  Part: \"group\",\n  Sect: \"group\", // XXX: There's a \"section\" role, but it's abstract.\n  Div: \"group\",\n  Aside: \"note\",\n  NonStruct: \"none\",\n  // Block level structure types\n  P: null,\n  // H<n>,\n  H: \"heading\",\n  Title: null,\n  FENote: \"note\",\n  // Sub-block level structure type\n  Sub: \"group\",\n  // General inline level structure types\n  Lbl: null,\n  Span: null,\n  Em: null,\n  Strong: null,\n  Link: \"link\",\n  Annot: \"note\",\n  Form: \"form\",\n  // Ruby and Warichu structure types\n  Ruby: null,\n  RB: null,\n  RT: null,\n  RP: null,\n  Warichu: null,\n  WT: null,\n  WP: null,\n  // List standard structure types\n  L: \"list\",\n  LI: \"listitem\",\n  LBody: null,\n  // Table standard structure types\n  Table: \"table\",\n  TR: \"row\",\n  TH: \"columnheader\",\n  TD: \"cell\",\n  THead: \"columnheader\",\n  TBody: null,\n  TFoot: null,\n  // Standard structure type Caption\n  Caption: null,\n  // Standard structure type Figure\n  Figure: \"figure\",\n  // Standard structure type Formula\n  Formula: null,\n  // standard structure type Artifact\n  Artifact: null,\n};\n\nconst HEADING_PATTERN = /^H(\\d+)$/;\n\n/**\n * @typedef {Object} StructTreeLayerBuilderOptions\n * @property {PDFPageProxy} pdfPage\n */\n\nclass StructTreeLayerBuilder {\n  /**\n   * @param {StructTreeLayerBuilderOptions} options\n   */\n  constructor({ pdfPage }) {\n    this.pdfPage = pdfPage;\n  }\n\n  render(structTree) {\n    return this._walk(structTree);\n  }\n\n  _setAttributes(structElement, htmlElement) {\n    if (structElement.alt !== undefined) {\n      htmlElement.setAttribute(\"aria-label\", structElement.alt);\n    }\n    if (structElement.id !== undefined) {\n      htmlElement.setAttribute(\"aria-owns\", structElement.id);\n    }\n    if (structElement.lang !== undefined) {\n      htmlElement.setAttribute(\"lang\", structElement.lang);\n    }\n  }\n\n  _walk(node) {\n    if (!node) {\n      return null;\n    }\n\n    const element = document.createElement(\"span\");\n    if (\"role\" in node) {\n      const { role } = node;\n      const match = role.match(HEADING_PATTERN);\n      if (match) {\n        element.setAttribute(\"role\", \"heading\");\n        element.setAttribute(\"aria-level\", match[1]);\n      } else if (PDF_ROLE_TO_HTML_ROLE[role]) {\n        element.setAttribute(\"role\", PDF_ROLE_TO_HTML_ROLE[role]);\n      }\n    }\n\n    this._setAttributes(node, element);\n\n    if (node.children) {\n      if (node.children.length === 1 && \"id\" in node.children[0]) {\n        // Often there is only one content node so just set the values on the\n        // parent node to avoid creating an extra span.\n        this._setAttributes(node.children[0], element);\n      } else {\n        for (const kid of node.children) {\n          element.appendChild(this._walk(kid));\n        }\n      }\n    }\n    return element;\n  }\n}\n\nexport { StructTreeLayerBuilder };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./text_highlighter\").TextHighlighter} TextHighlighter */\n\nimport { renderTextLayer } from \"pdfjs-lib\";\n\nconst EXPAND_DIVS_TIMEOUT = 300; // ms\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {HTMLDivElement} textLayerDiv - The text layer container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n * @property {PageViewport} viewport - The viewport of the text layer.\n * @property {TextHighlighter} highlighter - Optional object that will handle\n *   highlighting text from the find controller.\n * @property {boolean} enhanceTextSelection - Option to turn on improved\n *   text selection.\n */\n\n/**\n * The text layer builder provides text selection functionality for the PDF.\n * It does this by creating overlay divs over the PDF's text. These divs\n * contain text that matches the PDF text they are overlaying.\n */\nclass TextLayerBuilder {\n  constructor({\n    textLayerDiv,\n    eventBus,\n    pageIndex,\n    viewport,\n    highlighter = null,\n    enhanceTextSelection = false,\n  }) {\n    this.textLayerDiv = textLayerDiv;\n    this.eventBus = eventBus;\n    this.textContent = null;\n    this.textContentItemsStr = [];\n    this.textContentStream = null;\n    this.renderingDone = false;\n    this.pageNumber = pageIndex + 1;\n    this.viewport = viewport;\n    this.textDivs = [];\n    this.textLayerRenderTask = null;\n    this.highlighter = highlighter;\n    this.enhanceTextSelection = enhanceTextSelection;\n\n    this._bindMouse();\n  }\n\n  /**\n   * @private\n   */\n  _finishRendering() {\n    this.renderingDone = true;\n\n    if (!this.enhanceTextSelection) {\n      const endOfContent = document.createElement(\"div\");\n      endOfContent.className = \"endOfContent\";\n      this.textLayerDiv.appendChild(endOfContent);\n    }\n\n    this.eventBus.dispatch(\"textlayerrendered\", {\n      source: this,\n      pageNumber: this.pageNumber,\n      numTextDivs: this.textDivs.length,\n    });\n  }\n\n  /**\n   * Renders the text layer.\n   *\n   * @param {number} [timeout] - Wait for a specified amount of milliseconds\n   *                             before rendering.\n   */\n  render(timeout = 0) {\n    if (!(this.textContent || this.textContentStream) || this.renderingDone) {\n      return;\n    }\n    this.cancel();\n\n    this.textDivs.length = 0;\n    this.highlighter?.setTextMapping(this.textDivs, this.textContentItemsStr);\n\n    const textLayerFrag = document.createDocumentFragment();\n    this.textLayerRenderTask = renderTextLayer({\n      textContent: this.textContent,\n      textContentStream: this.textContentStream,\n      container: textLayerFrag,\n      viewport: this.viewport,\n      textDivs: this.textDivs,\n      textContentItemsStr: this.textContentItemsStr,\n      timeout,\n      enhanceTextSelection: this.enhanceTextSelection,\n    });\n    this.textLayerRenderTask.promise.then(\n      () => {\n        this.textLayerDiv.appendChild(textLayerFrag);\n        this._finishRendering();\n        this.highlighter?.enable();\n      },\n      function (reason) {\n        // Cancelled or failed to render text layer; skipping errors.\n      }\n    );\n  }\n\n  /**\n   * Cancel rendering of the text layer.\n   */\n  cancel() {\n    if (this.textLayerRenderTask) {\n      this.textLayerRenderTask.cancel();\n      this.textLayerRenderTask = null;\n    }\n    this.highlighter?.disable();\n  }\n\n  setTextContentStream(readableStream) {\n    this.cancel();\n    this.textContentStream = readableStream;\n  }\n\n  setTextContent(textContent) {\n    this.cancel();\n    this.textContent = textContent;\n  }\n\n  /**\n   * Improves text selection by adding an additional div where the mouse was\n   * clicked. This reduces flickering of the content if the mouse is slowly\n   * dragged up or down.\n   *\n   * @private\n   */\n  _bindMouse() {\n    const div = this.textLayerDiv;\n    let expandDivsTimer = null;\n\n    div.addEventListener(\"mousedown\", evt => {\n      if (this.enhanceTextSelection && this.textLayerRenderTask) {\n        this.textLayerRenderTask.expandTextDivs(true);\n        if (\n          (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n          expandDivsTimer\n        ) {\n          clearTimeout(expandDivsTimer);\n          expandDivsTimer = null;\n        }\n        return;\n      }\n\n      const end = div.querySelector(\".endOfContent\");\n      if (!end) {\n        return;\n      }\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        // On non-Firefox browsers, the selection will feel better if the height\n        // of the `endOfContent` div is adjusted to start at mouse click\n        // location. This avoids flickering when the selection moves up.\n        // However it does not work when selection is started on empty space.\n        let adjustTop = evt.target !== div;\n        if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n          adjustTop =\n            adjustTop &&\n            window\n              .getComputedStyle(end)\n              .getPropertyValue(\"-moz-user-select\") !== \"none\";\n        }\n        if (adjustTop) {\n          const divBounds = div.getBoundingClientRect();\n          const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n          end.style.top = (r * 100).toFixed(2) + \"%\";\n        }\n      }\n      end.classList.add(\"active\");\n    });\n\n    div.addEventListener(\"mouseup\", () => {\n      if (this.enhanceTextSelection && this.textLayerRenderTask) {\n        if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n          expandDivsTimer = setTimeout(() => {\n            if (this.textLayerRenderTask) {\n              this.textLayerRenderTask.expandTextDivs(false);\n            }\n            expandDivsTimer = null;\n          }, EXPAND_DIVS_TIMEOUT);\n        } else {\n          this.textLayerRenderTask.expandTextDivs(false);\n        }\n        return;\n      }\n\n      const end = div.querySelector(\".endOfContent\");\n      if (!end) {\n        return;\n      }\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        end.style.top = \"\";\n      }\n      end.classList.remove(\"active\");\n    });\n  }\n}\n\nexport { TextLayerBuilder };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { XfaLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} XfaLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {IPDFLinkService} linkService\n * @property {Object} [xfaHtml]\n */\n\nclass XfaLayerBuilder {\n  /**\n   * @param {XfaLayerBuilderOptions} options\n   */\n  constructor({\n    pageDiv,\n    pdfPage,\n    annotationStorage = null,\n    linkService,\n    xfaHtml = null,\n  }) {\n    this.pageDiv = pageDiv;\n    this.pdfPage = pdfPage;\n    this.annotationStorage = annotationStorage;\n    this.linkService = linkService;\n    this.xfaHtml = xfaHtml;\n\n    this.div = null;\n    this._cancelled = false;\n  }\n\n  /**\n   * @param {PageViewport} viewport\n   * @param {string} intent (default value is 'display')\n   * @returns {Promise<Object | void>} A promise that is resolved when rendering\n   *   of the XFA layer is complete. The first rendering will return an object\n   *   with a `textDivs` property that  can be used with the TextHighlighter.\n   */\n  render(viewport, intent = \"display\") {\n    if (intent === \"print\") {\n      const parameters = {\n        viewport: viewport.clone({ dontFlip: true }),\n        div: this.div,\n        xfaHtml: this.xfaHtml,\n        annotationStorage: this.annotationStorage,\n        linkService: this.linkService,\n        intent,\n      };\n\n      // Create an xfa layer div and render the form\n      const div = document.createElement(\"div\");\n      this.pageDiv.appendChild(div);\n      parameters.div = div;\n\n      const result = XfaLayer.render(parameters);\n      return Promise.resolve(result);\n    }\n\n    // intent === \"display\"\n    return this.pdfPage\n      .getXfa()\n      .then(xfaHtml => {\n        if (this._cancelled || !xfaHtml) {\n          return { textDivs: [] };\n        }\n\n        const parameters = {\n          viewport: viewport.clone({ dontFlip: true }),\n          div: this.div,\n          xfaHtml,\n          annotationStorage: this.annotationStorage,\n          linkService: this.linkService,\n          intent,\n        };\n\n        if (this.div) {\n          return XfaLayer.update(parameters);\n        }\n        // Create an xfa layer div and render the form\n        this.div = document.createElement(\"div\");\n        this.pageDiv.appendChild(this.div);\n        parameters.div = this.div;\n        return XfaLayer.render(parameters);\n      })\n      .catch(error => {\n        console.error(error);\n      });\n  }\n\n  cancel() {\n    this._cancelled = true;\n  }\n\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\n\nexport { XfaLayerBuilder };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ScrollMode, SpreadMode } from \"./ui_utils.js\";\nimport { BaseViewer } from \"./base_viewer.js\";\n\nclass PDFViewer extends BaseViewer {}\n\nclass PDFSinglePageViewer extends BaseViewer {\n  _resetView() {\n    super._resetView();\n    this._scrollMode = ScrollMode.PAGE;\n    this._spreadMode = SpreadMode.NONE;\n  }\n\n  // eslint-disable-next-line accessor-pairs\n  set scrollMode(mode) {}\n\n  _updateScrollMode() {}\n\n  // eslint-disable-next-line accessor-pairs\n  set spreadMode(mode) {}\n\n  _updateSpreadMode() {}\n}\n\nexport { PDFSinglePageViewer, PDFViewer };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFAnnotationLayerFactory} IPDFAnnotationLayerFactory */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFStructTreeLayerFactory} IPDFStructTreeLayerFactory */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFTextLayerFactory} IPDFTextLayerFactory */\n/** @typedef {import(\"./interfaces\").IPDFXfaLayerFactory} IPDFXfaLayerFactory */\n\nimport {\n  AnnotationMode,\n  createPromiseCapability,\n  PermissionFlag,\n  PixelsPerInch,\n  version,\n} from \"pdfjs-lib\";\nimport {\n  DEFAULT_SCALE,\n  DEFAULT_SCALE_DELTA,\n  DEFAULT_SCALE_VALUE,\n  getVisibleElements,\n  isPortraitOrientation,\n  isValidRotation,\n  isValidScrollMode,\n  isValidSpreadMode,\n  MAX_AUTO_SCALE,\n  MAX_SCALE,\n  MIN_SCALE,\n  PresentationModeState,\n  RendererType,\n  RenderingStates,\n  SCROLLBAR_PADDING,\n  scrollIntoView,\n  ScrollMode,\n  SpreadMode,\n  TextLayerMode,\n  UNKNOWN_SCALE,\n  VERTICAL_PADDING,\n  watchScroll,\n} from \"./ui_utils.js\";\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\nimport { NullL10n } from \"./l10n_utils.js\";\nimport { PDFPageView } from \"./pdf_page_view.js\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { StructTreeLayerBuilder } from \"./struct_tree_layer_builder.js\";\nimport { TextHighlighter } from \"./text_highlighter.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\nconst DEFAULT_CACHE_SIZE = 10;\nconst ENABLE_PERMISSIONS_CLASS = \"enablePermissions\";\n\nconst PagesCountLimit = {\n  FORCE_SCROLL_MODE_PAGE: 15000,\n  FORCE_LAZY_PAGE_INIT: 7500,\n  PAUSE_EAGER_PAGE_INIT: 500,\n};\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} [viewer] - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {IDownloadManager} [downloadManager] - The download manager\n *   component.\n * @property {PDFFindController} [findController] - The find controller\n *   component.\n * @property {PDFScriptingManager} [scriptingManager] - The scripting manager\n *   component.\n * @property {PDFRenderingQueue} [renderingQueue] - The rendering queue object.\n * @property {boolean} [removePageBorders] - Removes the border shadow around\n *   the pages. The default value is `false`.\n * @property {number} [textLayerMode] - Controls if the text layer used for\n *   selection and searching is created, and if the improved text selection\n *   behaviour is enabled. The constants from {TextLayerMode} should be used.\n *   The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n *   created, and if interactive form elements or `AnnotationStorage`-data are\n *   being rendered. The constants from {@link AnnotationMode} should be used;\n *   see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n *   The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   mainly for annotation icons. Include trailing slash.\n * @property {boolean} [enablePrintAutoRotate] - Enables automatic rotation of\n *   landscape pages upon printing. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} [useOnlyCssZoom] - Enables CSS only zooming. The default\n *   value is `false`.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n *   total pixels, i.e. width * height. Use -1 for no limit. The default value\n *   is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n * @property {boolean} [enablePermissions] - Enables PDF document permissions,\n *   when they exist. The default value is `false`.\n */\n\nclass PDFPageViewBuffer {\n  // Here we rely on the fact that `Set`s preserve the insertion order.\n  #buf = new Set();\n\n  #size = 0;\n\n  constructor(size) {\n    this.#size = size;\n  }\n\n  push(view) {\n    const buf = this.#buf;\n    if (buf.has(view)) {\n      buf.delete(view); // Move the view to the \"end\" of the buffer.\n    }\n    buf.add(view);\n\n    if (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n\n  /**\n   * After calling resize, the size of the buffer will be `newSize`.\n   * The optional parameter `idsToKeep` is, if present, a Set of page-ids to\n   * push to the back of the buffer, delaying their destruction. The size of\n   * `idsToKeep` has no impact on the final size of the buffer; if `idsToKeep`\n   * is larger than `newSize`, some of those pages will be destroyed anyway.\n   */\n  resize(newSize, idsToKeep = null) {\n    this.#size = newSize;\n\n    const buf = this.#buf;\n    if (idsToKeep) {\n      const ii = buf.size;\n      let i = 1;\n      for (const view of buf) {\n        if (idsToKeep.has(view.id)) {\n          buf.delete(view); // Move the view to the \"end\" of the buffer.\n          buf.add(view);\n        }\n        if (++i > ii) {\n          break;\n        }\n      }\n    }\n\n    while (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n\n  has(view) {\n    return this.#buf.has(view);\n  }\n\n  [Symbol.iterator]() {\n    return this.#buf.keys();\n  }\n\n  #destroyFirstView() {\n    const firstView = this.#buf.keys().next().value;\n\n    firstView?.destroy();\n    this.#buf.delete(firstView);\n  }\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n *\n * @implements {IPDFAnnotationLayerFactory}\n * @implements {IPDFStructTreeLayerFactory}\n * @implements {IPDFTextLayerFactory}\n * @implements {IPDFXfaLayerFactory}\n */\nclass BaseViewer {\n  #buffer = null;\n\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n  #previousAnnotationMode = null;\n\n  #enablePermissions = false;\n\n  #previousContainerHeight = 0;\n\n  #scrollModePageState = null;\n\n  /**\n   * @param {PDFViewerOptions} options\n   */\n  constructor(options) {\n    if (this.constructor === BaseViewer) {\n      throw new Error(\"Cannot initialize BaseViewer.\");\n    }\n    const viewerVersion =\n      typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : null;\n    if (version !== viewerVersion) {\n      throw new Error(\n        `The API version \"${version}\" does not match the Viewer version \"${viewerVersion}\".`\n      );\n    }\n    this.container = options.container;\n    this.viewer = options.viewer || options.container.firstElementChild;\n\n    if (\n      typeof PDFJSDev === \"undefined\" ||\n      PDFJSDev.test(\"!PRODUCTION || GENERIC\")\n    ) {\n      if (\n        !(\n          this.container?.tagName.toUpperCase() === \"DIV\" &&\n          this.viewer?.tagName.toUpperCase() === \"DIV\"\n        )\n      ) {\n        throw new Error(\"Invalid `container` and/or `viewer` option.\");\n      }\n\n      if (\n        this.container.offsetParent &&\n        getComputedStyle(this.container).position !== \"absolute\"\n      ) {\n        throw new Error(\"The `container` must be absolutely positioned.\");\n      }\n    }\n    this.eventBus = options.eventBus;\n    this.linkService = options.linkService || new SimpleLinkService();\n    this.downloadManager = options.downloadManager || null;\n    this.findController = options.findController || null;\n    this._scriptingManager = options.scriptingManager || null;\n    this.removePageBorders = options.removePageBorders || false;\n    this.textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode =\n      options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n    this.renderer = options.renderer || RendererType.CANVAS;\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n    this.maxCanvasPixels = options.maxCanvasPixels;\n    this.l10n = options.l10n || NullL10n;\n    this.#enablePermissions = options.enablePermissions || false;\n\n    this.defaultRenderingQueue = !options.renderingQueue;\n    if (this.defaultRenderingQueue) {\n      // Custom rendering queue is not specified, using default one\n      this.renderingQueue = new PDFRenderingQueue();\n      this.renderingQueue.setViewer(this);\n    } else {\n      this.renderingQueue = options.renderingQueue;\n    }\n    this._doc = document.documentElement;\n\n    this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n    this.presentationModeState = PresentationModeState.UNKNOWN;\n    this._onBeforeDraw = this._onAfterDraw = null;\n    this._resetView();\n\n    if (this.removePageBorders) {\n      this.viewer.classList.add(\"removePageBorders\");\n    }\n    // Defer the dispatching of this event, to give other viewer components\n    // time to initialize *and* register 'baseviewerinit' event listeners.\n    Promise.resolve().then(() => {\n      this.eventBus.dispatch(\"baseviewerinit\", { source: this });\n    });\n  }\n\n  get pagesCount() {\n    return this._pages.length;\n  }\n\n  getPageView(index) {\n    return this._pages[index];\n  }\n\n  /**\n   * @type {boolean} - True if all {PDFPageView} objects are initialized.\n   */\n  get pageViewsReady() {\n    if (!this._pagesCapability.settled) {\n      return false;\n    }\n    // Prevent printing errors when 'disableAutoFetch' is set, by ensuring\n    // that *all* pages have in fact been completely loaded.\n    return this._pages.every(function (pageView) {\n      return pageView?.pdfPage;\n    });\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get renderForms() {\n    return this.#annotationMode === AnnotationMode.ENABLE_FORMS;\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get enableScripting() {\n    return !!this._scriptingManager;\n  }\n\n  /**\n   * @type {number}\n   */\n  get currentPageNumber() {\n    return this._currentPageNumber;\n  }\n\n  /**\n   * @param {number} val - The page number.\n   */\n  set currentPageNumber(val) {\n    if (!Number.isInteger(val)) {\n      throw new Error(\"Invalid page number.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    // The intent can be to just reset a scroll position and/or scale.\n    if (!this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true)) {\n      console.error(`currentPageNumber: \"${val}\" is not a valid page.`);\n    }\n  }\n\n  /**\n   * @returns {boolean} Whether the pageNumber is valid (within bounds).\n   * @private\n   */\n  _setCurrentPageNumber(val, resetCurrentPageView = false) {\n    if (this._currentPageNumber === val) {\n      if (resetCurrentPageView) {\n        this._resetCurrentPageView();\n      }\n      return true;\n    }\n\n    if (!(0 < val && val <= this.pagesCount)) {\n      return false;\n    }\n    const previous = this._currentPageNumber;\n    this._currentPageNumber = val;\n\n    this.eventBus.dispatch(\"pagechanging\", {\n      source: this,\n      pageNumber: val,\n      pageLabel: this._pageLabels?.[val - 1] ?? null,\n      previous,\n    });\n\n    if (resetCurrentPageView) {\n      this._resetCurrentPageView();\n    }\n    return true;\n  }\n\n  /**\n   * @type {string|null} Returns the current page label, or `null` if no page\n   *   labels exist.\n   */\n  get currentPageLabel() {\n    return this._pageLabels?.[this._currentPageNumber - 1] ?? null;\n  }\n\n  /**\n   * @param {string} val - The page label.\n   */\n  set currentPageLabel(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let page = val | 0; // Fallback page number.\n    if (this._pageLabels) {\n      const i = this._pageLabels.indexOf(val);\n      if (i >= 0) {\n        page = i + 1;\n      }\n    }\n    // The intent can be to just reset a scroll position and/or scale.\n    if (!this._setCurrentPageNumber(page, /* resetCurrentPageView = */ true)) {\n      console.error(`currentPageLabel: \"${val}\" is not a valid page.`);\n    }\n  }\n\n  /**\n   * @type {number}\n   */\n  get currentScale() {\n    return this._currentScale !== UNKNOWN_SCALE\n      ? this._currentScale\n      : DEFAULT_SCALE;\n  }\n\n  /**\n   * @param {number} val - Scale of the pages in percents.\n   */\n  set currentScale(val) {\n    if (isNaN(val)) {\n      throw new Error(\"Invalid numeric scale.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this._setScale(val, false);\n  }\n\n  /**\n   * @type {string}\n   */\n  get currentScaleValue() {\n    return this._currentScaleValue;\n  }\n\n  /**\n   * @param val - The scale of the pages (in percent or predefined value).\n   */\n  set currentScaleValue(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this._setScale(val, false);\n  }\n\n  /**\n   * @type {number}\n   */\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n\n  /**\n   * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).\n   */\n  set pagesRotation(rotation) {\n    if (!isValidRotation(rotation)) {\n      throw new Error(\"Invalid pages rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    // Normalize the rotation, by clamping it to the [0, 360) range.\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    if (this._pagesRotation === rotation) {\n      return; // The rotation didn't change.\n    }\n    this._pagesRotation = rotation;\n\n    const pageNumber = this._currentPageNumber;\n\n    const updateArgs = { rotation };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    // Prevent errors in case the rotation changes *before* the scale has been\n    // set to a non-default value.\n    if (this._currentScaleValue) {\n      this._setScale(this._currentScaleValue, true);\n    }\n\n    this.eventBus.dispatch(\"rotationchanging\", {\n      source: this,\n      pagesRotation: rotation,\n      pageNumber,\n    });\n\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n\n  get firstPagePromise() {\n    return this.pdfDocument ? this._firstPageCapability.promise : null;\n  }\n\n  get onePageRendered() {\n    return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n  }\n\n  get pagesPromise() {\n    return this.pdfDocument ? this._pagesCapability.promise : null;\n  }\n\n  /**\n   * Currently only *some* permissions are supported.\n   */\n  #initializePermissions(permissions) {\n    if (!permissions) {\n      return;\n    }\n\n    if (!permissions.includes(PermissionFlag.COPY)) {\n      this.viewer.classList.add(ENABLE_PERMISSIONS_CLASS);\n    }\n\n    if (\n      !permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) &&\n      !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS)\n    ) {\n      if (this.#annotationMode === AnnotationMode.ENABLE_FORMS) {\n        this.#previousAnnotationMode = this.#annotationMode; // Allow resetting.\n        this.#annotationMode = AnnotationMode.ENABLE;\n      }\n    }\n  }\n\n  #onePageRenderedOrForceFetch() {\n    // Unless the viewer *and* its pages are visible, rendering won't start and\n    // `this._onePageRenderedCapability` thus won't be resolved.\n    // To ensure that automatic printing, on document load, still works even in\n    // those cases we force-allow fetching of all pages when:\n    //  - The viewer is hidden in the DOM, e.g. in a `display: none` <iframe>\n    //    element; fixes bug 1618621.\n    //  - The viewer is visible, but none of the pages are (e.g. if the\n    //    viewer is very small); fixes bug 1618955.\n    if (\n      !this.container.offsetParent ||\n      this._getVisiblePages().views.length === 0\n    ) {\n      return Promise.resolve();\n    }\n    return this._onePageRenderedCapability.promise;\n  }\n\n  /**\n   * @param {PDFDocumentProxy} pdfDocument\n   */\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this.eventBus.dispatch(\"pagesdestroy\", { source: this });\n\n      this._cancelRendering();\n      this._resetView();\n\n      if (this.findController) {\n        this.findController.setDocument(null);\n      }\n      if (this._scriptingManager) {\n        this._scriptingManager.setDocument(null);\n      }\n    }\n\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const isPureXfa = pdfDocument.isPureXfa;\n    const pagesCount = pdfDocument.numPages;\n    const firstPagePromise = pdfDocument.getPage(1);\n    // Rendering (potentially) depends on this, hence fetching it immediately.\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();\n    const permissionsPromise = this.#enablePermissions\n      ? pdfDocument.getPermissions()\n      : Promise.resolve();\n\n    // Given that browsers don't handle huge amounts of DOM-elements very well,\n    // enforce usage of PAGE-scrolling when loading *very* long/large documents.\n    if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      console.warn(\n        \"Forcing PAGE-scrolling for performance reasons, given the length of the document.\"\n      );\n      const mode = (this._scrollMode = ScrollMode.PAGE);\n      this.eventBus.dispatch(\"scrollmodechanged\", { source: this, mode });\n    }\n\n    this._pagesCapability.promise.then(\n      () => {\n        this.eventBus.dispatch(\"pagesloaded\", { source: this, pagesCount });\n      },\n      () => {\n        /* Prevent \"Uncaught (in promise)\"-messages in the console. */\n      }\n    );\n\n    this._onBeforeDraw = evt => {\n      const pageView = this._pages[evt.pageNumber - 1];\n      if (!pageView) {\n        return;\n      }\n      // Add the page to the buffer at the start of drawing. That way it can be\n      // evicted from the buffer and destroyed even if we pause its rendering.\n      this.#buffer.push(pageView);\n    };\n    this.eventBus._on(\"pagerender\", this._onBeforeDraw);\n\n    this._onAfterDraw = evt => {\n      if (evt.cssTransform || this._onePageRenderedCapability.settled) {\n        return;\n      }\n      this._onePageRenderedCapability.resolve({ timestamp: evt.timestamp });\n\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n    };\n    this.eventBus._on(\"pagerendered\", this._onAfterDraw);\n\n    // Fetch a single page so we can get a viewport that will be the default\n    // viewport for all pages\n    Promise.all([firstPagePromise, permissionsPromise])\n      .then(([firstPdfPage, permissions]) => {\n        if (pdfDocument !== this.pdfDocument) {\n          return; // The document was closed while the first page resolved.\n        }\n        this._firstPageCapability.resolve(firstPdfPage);\n        this._optionalContentConfigPromise = optionalContentConfigPromise;\n        this.#initializePermissions(permissions);\n\n        const viewerElement =\n          this._scrollMode === ScrollMode.PAGE ? null : this.viewer;\n        const scale = this.currentScale;\n        const viewport = firstPdfPage.getViewport({\n          scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n        });\n        const textLayerFactory =\n          this.textLayerMode !== TextLayerMode.DISABLE && !isPureXfa\n            ? this\n            : null;\n        const annotationLayerFactory =\n          this.#annotationMode !== AnnotationMode.DISABLE ? this : null;\n        const xfaLayerFactory = isPureXfa ? this : null;\n\n        for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n          const pageView = new PDFPageView({\n            container: viewerElement,\n            eventBus: this.eventBus,\n            id: pageNum,\n            scale,\n            defaultViewport: viewport.clone(),\n            optionalContentConfigPromise,\n            renderingQueue: this.renderingQueue,\n            textLayerFactory,\n            textLayerMode: this.textLayerMode,\n            annotationLayerFactory,\n            annotationMode: this.#annotationMode,\n            xfaLayerFactory,\n            textHighlighterFactory: this,\n            structTreeLayerFactory: this,\n            imageResourcesPath: this.imageResourcesPath,\n            renderer: this.renderer,\n            useOnlyCssZoom: this.useOnlyCssZoom,\n            maxCanvasPixels: this.maxCanvasPixels,\n            l10n: this.l10n,\n          });\n          this._pages.push(pageView);\n        }\n        // Set the first `pdfPage` immediately, since it's already loaded,\n        // rather than having to repeat the `PDFDocumentProxy.getPage` call in\n        // the `this.#ensurePdfPageLoaded` method before rendering can start.\n        const firstPageView = this._pages[0];\n        if (firstPageView) {\n          firstPageView.setPdfPage(firstPdfPage);\n          this.linkService.cachePageRef(1, firstPdfPage.ref);\n        }\n\n        if (this._scrollMode === ScrollMode.PAGE) {\n          // Ensure that the current page becomes visible on document load.\n          this.#ensurePageViewVisible();\n        } else if (this._spreadMode !== SpreadMode.NONE) {\n          this._updateSpreadMode();\n        }\n\n        // Fetch all the pages since the viewport is needed before printing\n        // starts to create the correct size canvas. Wait until one page is\n        // rendered so we don't tie up too many resources early on.\n        this.#onePageRenderedOrForceFetch().then(async () => {\n          if (this.findController) {\n            this.findController.setDocument(pdfDocument); // Enable searching.\n          }\n          if (this._scriptingManager) {\n            this._scriptingManager.setDocument(pdfDocument); // Enable scripting.\n          }\n\n          // In addition to 'disableAutoFetch' being set, also attempt to reduce\n          // resource usage when loading *very* long/large documents.\n          if (\n            pdfDocument.loadingParams.disableAutoFetch ||\n            pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT\n          ) {\n            // XXX: Printing is semi-broken with auto fetch disabled.\n            this._pagesCapability.resolve();\n            return;\n          }\n          let getPagesLeft = pagesCount - 1; // The first page was already loaded.\n\n          if (getPagesLeft <= 0) {\n            this._pagesCapability.resolve();\n            return;\n          }\n          for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {\n            const promise = pdfDocument.getPage(pageNum).then(\n              pdfPage => {\n                const pageView = this._pages[pageNum - 1];\n                if (!pageView.pdfPage) {\n                  pageView.setPdfPage(pdfPage);\n                }\n                this.linkService.cachePageRef(pageNum, pdfPage.ref);\n                if (--getPagesLeft === 0) {\n                  this._pagesCapability.resolve();\n                }\n              },\n              reason => {\n                console.error(\n                  `Unable to get page ${pageNum} to initialize viewer`,\n                  reason\n                );\n                if (--getPagesLeft === 0) {\n                  this._pagesCapability.resolve();\n                }\n              }\n            );\n\n            if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {\n              await promise;\n            }\n          }\n        });\n\n        this.eventBus.dispatch(\"pagesinit\", { source: this });\n\n        pdfDocument.getMetadata().then(({ info }) => {\n          if (pdfDocument !== this.pdfDocument) {\n            return; // The document was closed while the metadata resolved.\n          }\n          if (info.Language) {\n            this.viewer.lang = info.Language;\n          }\n        });\n\n        if (this.defaultRenderingQueue) {\n          this.update();\n        }\n      })\n      .catch(reason => {\n        console.error(\"Unable to initialize viewer\", reason);\n\n        this._pagesCapability.reject(reason);\n      });\n  }\n\n  /**\n   * @param {Array|null} labels\n   */\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (\n      !(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)\n    ) {\n      this._pageLabels = null;\n      console.error(`setPageLabels: Invalid page labels.`);\n    } else {\n      this._pageLabels = labels;\n    }\n    // Update all the `PDFPageView` instances.\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);\n    }\n  }\n\n  _resetView() {\n    this._pages = [];\n    this._currentPageNumber = 1;\n    this._currentScale = UNKNOWN_SCALE;\n    this._currentScaleValue = null;\n    this._pageLabels = null;\n    this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n    this._location = null;\n    this._pagesRotation = 0;\n    this._optionalContentConfigPromise = null;\n    this._firstPageCapability = createPromiseCapability();\n    this._onePageRenderedCapability = createPromiseCapability();\n    this._pagesCapability = createPromiseCapability();\n    this._scrollMode = ScrollMode.VERTICAL;\n    this._previousScrollMode = ScrollMode.UNKNOWN;\n    this._spreadMode = SpreadMode.NONE;\n\n    this.#scrollModePageState = {\n      previousPageNumber: 1,\n      scrollDown: true,\n      pages: [],\n    };\n\n    if (this._onBeforeDraw) {\n      this.eventBus._off(\"pagerender\", this._onBeforeDraw);\n      this._onBeforeDraw = null;\n    }\n    if (this._onAfterDraw) {\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n    }\n    // Remove the pages from the DOM...\n    this.viewer.textContent = \"\";\n    // ... and reset the Scroll mode CSS class(es) afterwards.\n    this._updateScrollMode();\n\n    this.viewer.removeAttribute(\"lang\");\n    // Reset all PDF document permissions.\n    this.viewer.classList.remove(ENABLE_PERMISSIONS_CLASS);\n\n    if (this.#previousAnnotationMode !== null) {\n      this.#annotationMode = this.#previousAnnotationMode;\n      this.#previousAnnotationMode = null;\n    }\n  }\n\n  #ensurePageViewVisible() {\n    if (this._scrollMode !== ScrollMode.PAGE) {\n      throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n    }\n    const pageNumber = this._currentPageNumber,\n      state = this.#scrollModePageState,\n      viewer = this.viewer;\n\n    // Temporarily remove all the pages from the DOM...\n    viewer.textContent = \"\";\n    // ... and clear out the active ones.\n    state.pages.length = 0;\n\n    if (this._spreadMode === SpreadMode.NONE) {\n      // Finally, append the new page to the viewer.\n      const pageView = this._pages[pageNumber - 1];\n\n      if (this.isInPresentationMode) {\n        const spread = document.createElement(\"div\");\n        spread.className = \"spread\";\n        const dummyPage = document.createElement(\"div\");\n        dummyPage.className = \"dummyPage\";\n        dummyPage.style.height = `${this.container.clientHeight}px`;\n\n        spread.appendChild(dummyPage);\n        spread.appendChild(pageView.div);\n        viewer.appendChild(spread);\n      } else {\n        viewer.appendChild(pageView.div);\n      }\n\n      state.pages.push(pageView);\n    } else {\n      const pageIndexSet = new Set(),\n        parity = this._spreadMode - 1;\n\n      // Determine the pageIndices in the new spread.\n      if (pageNumber % 2 !== parity) {\n        // Left-hand side page.\n        pageIndexSet.add(pageNumber - 1);\n        pageIndexSet.add(pageNumber);\n      } else {\n        // Right-hand side page.\n        pageIndexSet.add(pageNumber - 2);\n        pageIndexSet.add(pageNumber - 1);\n      }\n\n      // Finally, append the new pages to the viewer and apply the spreadMode.\n      let spread = null;\n      for (const i of pageIndexSet) {\n        const pageView = this._pages[i];\n        if (!pageView) {\n          continue;\n        }\n        if (spread === null) {\n          spread = document.createElement(\"div\");\n          spread.className = \"spread\";\n          viewer.appendChild(spread);\n        } else if (i % 2 === parity) {\n          spread = spread.cloneNode(false);\n          viewer.appendChild(spread);\n        }\n        spread.appendChild(pageView.div);\n\n        state.pages.push(pageView);\n      }\n    }\n\n    state.scrollDown = pageNumber >= state.previousPageNumber;\n    state.previousPageNumber = pageNumber;\n  }\n\n  _scrollUpdate() {\n    if (this.pagesCount === 0) {\n      return;\n    }\n    this.update();\n  }\n\n  _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null }) {\n    if (this._scrollMode === ScrollMode.PAGE) {\n      if (pageNumber) {\n        // Ensure that `this._currentPageNumber` is correct.\n        this._setCurrentPageNumber(pageNumber);\n      }\n      this.#ensurePageViewVisible();\n      // Ensure that rendering always occurs, to avoid showing a blank page,\n      // even if the current position doesn't change when the page is scrolled.\n      this.update();\n    }\n\n    if (!pageSpot && !this.isInPresentationMode) {\n      const left = pageDiv.offsetLeft + pageDiv.clientLeft;\n      const right = left + pageDiv.clientWidth;\n      const { scrollLeft, clientWidth } = this.container;\n      if (\n        this._scrollMode === ScrollMode.HORIZONTAL ||\n        left < scrollLeft ||\n        right > scrollLeft + clientWidth\n      ) {\n        pageSpot = { left: 0, top: 0 };\n      }\n    }\n    scrollIntoView(pageDiv, pageSpot);\n  }\n\n  /**\n   * Prevent unnecessary re-rendering of all pages when the scale changes\n   * only because of limited numerical precision.\n   */\n  #isSameScale(newScale) {\n    if (\n      this.isInPresentationMode &&\n      this.container.clientHeight !== this.#previousContainerHeight\n    ) {\n      // Ensure that the current page remains centered vertically if/when\n      // the window is resized while PresentationMode is active.\n      return false;\n    }\n    return (\n      newScale === this._currentScale ||\n      Math.abs(newScale - this._currentScale) < 1e-15\n    );\n  }\n\n  _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {\n    this._currentScaleValue = newValue.toString();\n\n    if (this.#isSameScale(newScale)) {\n      if (preset) {\n        this.eventBus.dispatch(\"scalechanging\", {\n          source: this,\n          scale: newScale,\n          presetValue: newValue,\n        });\n      }\n      return;\n    }\n\n    this._doc.style.setProperty(\"--zoom-factor\", newScale);\n    this._doc.style.setProperty(\n      \"--viewport-scale-factor\",\n      newScale * PixelsPerInch.PDF_TO_CSS_UNITS\n    );\n\n    const updateArgs = { scale: newScale };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    this._currentScale = newScale;\n\n    if (!noScroll) {\n      let page = this._currentPageNumber,\n        dest;\n      if (\n        this._location &&\n        !(this.isInPresentationMode || this.isChangingPresentationMode)\n      ) {\n        page = this._location.pageNumber;\n        dest = [\n          null,\n          { name: \"XYZ\" },\n          this._location.left,\n          this._location.top,\n          null,\n        ];\n      }\n      this.scrollPageIntoView({\n        pageNumber: page,\n        destArray: dest,\n        allowNegativeOffset: true,\n      });\n    }\n\n    this.eventBus.dispatch(\"scalechanging\", {\n      source: this,\n      scale: newScale,\n      presetValue: preset ? newValue : undefined,\n    });\n\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n\n    this.#previousContainerHeight = this.container.clientHeight;\n  }\n\n  /**\n   * @private\n   */\n  get _pageWidthScaleFactor() {\n    if (\n      this._spreadMode !== SpreadMode.NONE &&\n      this._scrollMode !== ScrollMode.HORIZONTAL\n    ) {\n      return 2;\n    }\n    return 1;\n  }\n\n  _setScale(value, noScroll = false) {\n    let scale = parseFloat(value);\n\n    if (scale > 0) {\n      this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ false);\n    } else {\n      const currentPage = this._pages[this._currentPageNumber - 1];\n      if (!currentPage) {\n        return;\n      }\n      let hPadding = SCROLLBAR_PADDING,\n        vPadding = VERTICAL_PADDING;\n\n      if (this.isInPresentationMode) {\n        hPadding = vPadding = 4;\n      } else if (this.removePageBorders) {\n        hPadding = vPadding = 0;\n      }\n      if (this._scrollMode === ScrollMode.HORIZONTAL) {\n        [hPadding, vPadding] = [vPadding, hPadding]; // Swap the padding values.\n      }\n      const pageWidthScale =\n        (((this.container.clientWidth - hPadding) / currentPage.width) *\n          currentPage.scale) /\n        this._pageWidthScaleFactor;\n      const pageHeightScale =\n        ((this.container.clientHeight - vPadding) / currentPage.height) *\n        currentPage.scale;\n      switch (value) {\n        case \"page-actual\":\n          scale = 1;\n          break;\n        case \"page-width\":\n          scale = pageWidthScale;\n          break;\n        case \"page-height\":\n          scale = pageHeightScale;\n          break;\n        case \"page-fit\":\n          scale = Math.min(pageWidthScale, pageHeightScale);\n          break;\n        case \"auto\":\n          // For pages in landscape mode, fit the page height to the viewer\n          // *unless* the page would thus become too wide to fit horizontally.\n          const horizontalScale = isPortraitOrientation(currentPage)\n            ? pageWidthScale\n            : Math.min(pageHeightScale, pageWidthScale);\n          scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n          break;\n        default:\n          console.error(`_setScale: \"${value}\" is an unknown zoom value.`);\n          return;\n      }\n      this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ true);\n    }\n  }\n\n  /**\n   * Refreshes page view: scrolls to the current page and updates the scale.\n   * @private\n   */\n  _resetCurrentPageView() {\n    if (this.isInPresentationMode) {\n      // Fixes the case when PDF has different page sizes.\n      this._setScale(this._currentScaleValue, true);\n    }\n\n    const pageView = this._pages[this._currentPageNumber - 1];\n    this._scrollIntoView({ pageDiv: pageView.div });\n  }\n\n  /**\n   * @param {string} label - The page label.\n   * @returns {number|null} The page number corresponding to the page label,\n   *   or `null` when no page labels exist and/or the input is invalid.\n   */\n  pageLabelToPageNumber(label) {\n    if (!this._pageLabels) {\n      return null;\n    }\n    const i = this._pageLabels.indexOf(label);\n    if (i < 0) {\n      return null;\n    }\n    return i + 1;\n  }\n\n  /**\n   * @typedef ScrollPageIntoViewParameters\n   * @property {number} pageNumber - The page number.\n   * @property {Array} [destArray] - The original PDF destination array, in the\n   *   format: <page-ref> </XYZ|/FitXXX> <args..>\n   * @property {boolean} [allowNegativeOffset] - Allow negative page offsets.\n   *   The default value is `false`.\n   * @property {boolean} [ignoreDestinationZoom] - Ignore the zoom argument in\n   *   the destination array. The default value is `false`.\n   */\n\n  /**\n   * Scrolls page into view.\n   * @param {ScrollPageIntoViewParameters} params\n   */\n  scrollPageIntoView({\n    pageNumber,\n    destArray = null,\n    allowNegativeOffset = false,\n    ignoreDestinationZoom = false,\n  }) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageView =\n      Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\n    if (!pageView) {\n      console.error(\n        `scrollPageIntoView: \"${pageNumber}\" is not a valid pageNumber parameter.`\n      );\n      return;\n    }\n\n    if (this.isInPresentationMode || !destArray) {\n      this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n      return;\n    }\n    let x = 0,\n      y = 0;\n    let width = 0,\n      height = 0,\n      widthScale,\n      heightScale;\n    const changeOrientation = pageView.rotation % 180 !== 0;\n    const pageWidth =\n      (changeOrientation ? pageView.height : pageView.width) /\n      pageView.scale /\n      PixelsPerInch.PDF_TO_CSS_UNITS;\n    const pageHeight =\n      (changeOrientation ? pageView.width : pageView.height) /\n      pageView.scale /\n      PixelsPerInch.PDF_TO_CSS_UNITS;\n    let scale = 0;\n    switch (destArray[1].name) {\n      case \"XYZ\":\n        x = destArray[2];\n        y = destArray[3];\n        scale = destArray[4];\n        // If x and/or y coordinates are not supplied, default to\n        // _top_ left of the page (not the obvious bottom left,\n        // since aligning the bottom of the intended page with the\n        // top of the window is rarely helpful).\n        x = x !== null ? x : 0;\n        y = y !== null ? y : pageHeight;\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        scale = \"page-fit\";\n        break;\n      case \"FitH\":\n      case \"FitBH\":\n        y = destArray[2];\n        scale = \"page-width\";\n        // According to the PDF spec, section 12.3.2.2, a `null` value in the\n        // parameter should maintain the position relative to the new page.\n        if (y === null && this._location) {\n          x = this._location.left;\n          y = this._location.top;\n        } else if (typeof y !== \"number\" || y < 0) {\n          // The \"top\" value isn't optional, according to the spec, however some\n          // bad PDF generators will pretend that it is (fixes bug 1663390).\n          y = pageHeight;\n        }\n        break;\n      case \"FitV\":\n      case \"FitBV\":\n        x = destArray[2];\n        width = pageWidth;\n        height = pageHeight;\n        scale = \"page-height\";\n        break;\n      case \"FitR\":\n        x = destArray[2];\n        y = destArray[3];\n        width = destArray[4] - x;\n        height = destArray[5] - y;\n        const hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING;\n        const vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING;\n\n        widthScale =\n          (this.container.clientWidth - hPadding) /\n          width /\n          PixelsPerInch.PDF_TO_CSS_UNITS;\n        heightScale =\n          (this.container.clientHeight - vPadding) /\n          height /\n          PixelsPerInch.PDF_TO_CSS_UNITS;\n        scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n        break;\n      default:\n        console.error(\n          `scrollPageIntoView: \"${destArray[1].name}\" is not a valid destination type.`\n        );\n        return;\n    }\n\n    if (!ignoreDestinationZoom) {\n      if (scale && scale !== this._currentScale) {\n        this.currentScaleValue = scale;\n      } else if (this._currentScale === UNKNOWN_SCALE) {\n        this.currentScaleValue = DEFAULT_SCALE_VALUE;\n      }\n    }\n\n    if (scale === \"page-fit\" && !destArray[4]) {\n      this._scrollIntoView({\n        pageDiv: pageView.div,\n        pageNumber,\n      });\n      return;\n    }\n\n    const boundingRect = [\n      pageView.viewport.convertToViewportPoint(x, y),\n      pageView.viewport.convertToViewportPoint(x + width, y + height),\n    ];\n    let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n    let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n\n    if (!allowNegativeOffset) {\n      // Some bad PDF generators will create destinations with e.g. top values\n      // that exceeds the page height. Ensure that offsets are not negative,\n      // to prevent a previous page from becoming visible (fixes bug 874482).\n      left = Math.max(left, 0);\n      top = Math.max(top, 0);\n    }\n    this._scrollIntoView({\n      pageDiv: pageView.div,\n      pageSpot: { left, top },\n      pageNumber,\n    });\n  }\n\n  _updateLocation(firstPage) {\n    const currentScale = this._currentScale;\n    const currentScaleValue = this._currentScaleValue;\n    const normalizedScaleValue =\n      parseFloat(currentScaleValue) === currentScale\n        ? Math.round(currentScale * 10000) / 100\n        : currentScaleValue;\n\n    const pageNumber = firstPage.id;\n    let pdfOpenParams = \"#page=\" + pageNumber;\n    pdfOpenParams += \"&zoom=\" + normalizedScaleValue;\n    const currentPageView = this._pages[pageNumber - 1];\n    const container = this.container;\n    const topLeft = currentPageView.getPagePoint(\n      container.scrollLeft - firstPage.x,\n      container.scrollTop - firstPage.y\n    );\n    const intLeft = Math.round(topLeft[0]);\n    const intTop = Math.round(topLeft[1]);\n    pdfOpenParams += \",\" + intLeft + \",\" + intTop;\n\n    this._location = {\n      pageNumber,\n      scale: normalizedScaleValue,\n      top: intTop,\n      left: intLeft,\n      rotation: this._pagesRotation,\n      pdfOpenParams,\n    };\n  }\n\n  update() {\n    const visible = this._getVisiblePages();\n    const visiblePages = visible.views,\n      numVisiblePages = visiblePages.length;\n\n    if (numVisiblePages === 0) {\n      return;\n    }\n    const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\n    this.#buffer.resize(newCacheSize, visible.ids);\n\n    this.renderingQueue.renderHighestPriority(visible);\n\n    if (!this.isInPresentationMode) {\n      const isSimpleLayout =\n        this._spreadMode === SpreadMode.NONE &&\n        (this._scrollMode === ScrollMode.PAGE ||\n          this._scrollMode === ScrollMode.VERTICAL);\n      let currentId = this._currentPageNumber;\n      let stillFullyVisible = false;\n\n      for (const page of visiblePages) {\n        if (page.percent < 100) {\n          break;\n        }\n        if (page.id === currentId && isSimpleLayout) {\n          stillFullyVisible = true;\n          break;\n        }\n      }\n      if (!stillFullyVisible) {\n        currentId = visiblePages[0].id;\n      }\n      this._setCurrentPageNumber(currentId);\n    }\n\n    this._updateLocation(visible.first);\n    this.eventBus.dispatch(\"updateviewarea\", {\n      source: this,\n      location: this._location,\n    });\n  }\n\n  containsElement(element) {\n    return this.container.contains(element);\n  }\n\n  focus() {\n    this.container.focus();\n  }\n\n  get _isContainerRtl() {\n    return getComputedStyle(this.container).direction === \"rtl\";\n  }\n\n  get isInPresentationMode() {\n    return this.presentationModeState === PresentationModeState.FULLSCREEN;\n  }\n\n  get isChangingPresentationMode() {\n    return this.presentationModeState === PresentationModeState.CHANGING;\n  }\n\n  get isHorizontalScrollbarEnabled() {\n    return this.isInPresentationMode\n      ? false\n      : this.container.scrollWidth > this.container.clientWidth;\n  }\n\n  get isVerticalScrollbarEnabled() {\n    return this.isInPresentationMode\n      ? false\n      : this.container.scrollHeight > this.container.clientHeight;\n  }\n\n  /**\n   * Helper method for `this._getVisiblePages`. Should only ever be used when\n   * the viewer can only display a single page at a time, for example:\n   *  - When PresentationMode is active.\n   */\n  _getCurrentVisiblePage() {\n    if (!this.pagesCount) {\n      return { views: [] };\n    }\n    const pageView = this._pages[this._currentPageNumber - 1];\n    // NOTE: Compute the `x` and `y` properties of the current view,\n    // since `this._updateLocation` depends of them being available.\n    const element = pageView.div;\n\n    const view = {\n      id: pageView.id,\n      x: element.offsetLeft + element.clientLeft,\n      y: element.offsetTop + element.clientTop,\n      view: pageView,\n    };\n    const ids = new Set([pageView.id]);\n\n    return { first: view, last: view, views: [view], ids };\n  }\n\n  _getVisiblePages() {\n    if (this.isInPresentationMode) {\n      // The algorithm in `getVisibleElements` doesn't work in all browsers and\n      // configurations (e.g. Chrome) when PresentationMode is active.\n      return this._getCurrentVisiblePage();\n    }\n    const views =\n        this._scrollMode === ScrollMode.PAGE\n          ? this.#scrollModePageState.pages\n          : this._pages,\n      horizontal = this._scrollMode === ScrollMode.HORIZONTAL,\n      rtl = horizontal && this._isContainerRtl;\n\n    return getVisibleElements({\n      scrollEl: this.container,\n      views,\n      sortByVisibility: true,\n      horizontal,\n      rtl,\n    });\n  }\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageVisible(pageNumber) {\n    if (!this.pdfDocument) {\n      return false;\n    }\n    if (\n      !(\n        Number.isInteger(pageNumber) &&\n        pageNumber > 0 &&\n        pageNumber <= this.pagesCount\n      )\n    ) {\n      console.error(`isPageVisible: \"${pageNumber}\" is not a valid page.`);\n      return false;\n    }\n    return this._getVisiblePages().ids.has(pageNumber);\n  }\n\n  /**\n   * @param {number} pageNumber\n   */\n  isPageCached(pageNumber) {\n    if (!this.pdfDocument) {\n      return false;\n    }\n    if (\n      !(\n        Number.isInteger(pageNumber) &&\n        pageNumber > 0 &&\n        pageNumber <= this.pagesCount\n      )\n    ) {\n      console.error(`isPageCached: \"${pageNumber}\" is not a valid page.`);\n      return false;\n    }\n    const pageView = this._pages[pageNumber - 1];\n    return this.#buffer.has(pageView);\n  }\n\n  cleanup() {\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      if (\n        this._pages[i] &&\n        this._pages[i].renderingState !== RenderingStates.FINISHED\n      ) {\n        this._pages[i].reset();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  _cancelRendering() {\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      if (this._pages[i]) {\n        this._pages[i].cancelRendering();\n      }\n    }\n  }\n\n  /**\n   * @param {PDFPageView} pageView\n   * @returns {Promise<PDFPageProxy | null>}\n   */\n  async #ensurePdfPageLoaded(pageView) {\n    if (pageView.pdfPage) {\n      return pageView.pdfPage;\n    }\n    try {\n      const pdfPage = await this.pdfDocument.getPage(pageView.id);\n      if (!pageView.pdfPage) {\n        pageView.setPdfPage(pdfPage);\n      }\n      if (!this.linkService._cachedPageNumber(pdfPage.ref)) {\n        this.linkService.cachePageRef(pageView.id, pdfPage.ref);\n      }\n      return pdfPage;\n    } catch (reason) {\n      console.error(\"Unable to get page for page view\", reason);\n      return null; // Page error -- there is nothing that can be done.\n    }\n  }\n\n  #getScrollAhead(visible) {\n    if (visible.first?.id === 1) {\n      return true;\n    } else if (visible.last?.id === this.pagesCount) {\n      return false;\n    }\n    switch (this._scrollMode) {\n      case ScrollMode.PAGE:\n        return this.#scrollModePageState.scrollDown;\n      case ScrollMode.HORIZONTAL:\n        return this.scroll.right;\n    }\n    return this.scroll.down;\n  }\n\n  /**\n   * Only show the `loadingIcon`-spinner on visible pages (see issue 14242).\n   */\n  #toggleLoadingIconSpinner(visibleIds) {\n    for (const id of visibleIds) {\n      const pageView = this._pages[id - 1];\n      pageView?.toggleLoadingIconSpinner(/* viewVisible = */ true);\n    }\n    for (const pageView of this.#buffer) {\n      if (visibleIds.has(pageView.id)) {\n        // Handled above, since the \"buffer\" may not contain all visible pages.\n        continue;\n      }\n      pageView.toggleLoadingIconSpinner(/* viewVisible = */ false);\n    }\n  }\n\n  forceRendering(currentlyVisiblePages) {\n    const visiblePages = currentlyVisiblePages || this._getVisiblePages();\n    const scrollAhead = this.#getScrollAhead(visiblePages);\n    const preRenderExtra =\n      this._spreadMode !== SpreadMode.NONE &&\n      this._scrollMode !== ScrollMode.HORIZONTAL;\n\n    const pageView = this.renderingQueue.getHighestPriority(\n      visiblePages,\n      this._pages,\n      scrollAhead,\n      preRenderExtra\n    );\n    this.#toggleLoadingIconSpinner(visiblePages.ids);\n\n    if (pageView) {\n      this.#ensurePdfPageLoaded(pageView).then(() => {\n        this.renderingQueue.renderView(pageView);\n      });\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @param {HTMLDivElement} textLayerDiv\n   * @param {number} pageIndex\n   * @param {PageViewport} viewport\n   * @param {boolean} enhanceTextSelection\n   * @param {EventBus} eventBus\n   * @param {TextHighlighter} highlighter\n   * @returns {TextLayerBuilder}\n   */\n  createTextLayerBuilder(\n    textLayerDiv,\n    pageIndex,\n    viewport,\n    enhanceTextSelection = false,\n    eventBus,\n    highlighter\n  ) {\n    return new TextLayerBuilder({\n      textLayerDiv,\n      eventBus,\n      pageIndex,\n      viewport,\n      enhanceTextSelection: this.isInPresentationMode\n        ? false\n        : enhanceTextSelection,\n      highlighter,\n    });\n  }\n\n  /**\n   * @param {number} pageIndex\n   * @param {EventBus} eventBus\n   * @returns {TextHighlighter}\n   */\n  createTextHighlighter(pageIndex, eventBus) {\n    return new TextHighlighter({\n      eventBus,\n      pageIndex,\n      findController: this.isInPresentationMode ? null : this.findController,\n    });\n  }\n\n  /**\n   * @param {HTMLDivElement} pageDiv\n   * @param {PDFPageProxy} pdfPage\n   * @param {AnnotationStorage} [annotationStorage] - Storage for annotation\n   *   data in forms.\n   * @param {string} [imageResourcesPath] - Path for image resources, mainly\n   *   for annotation icons. Include trailing slash.\n   * @param {boolean} renderForms\n   * @param {IL10n} l10n\n   * @param {boolean} [enableScripting]\n   * @param {Promise<boolean>} [hasJSActionsPromise]\n   * @param {Object} [mouseState]\n   * @param {Promise<Object<string, Array<Object>> | null>}\n   *   [fieldObjectsPromise]\n   * @param {Map<string, HTMLCanvasElement>} [annotationCanvasMap]\n   * @returns {AnnotationLayerBuilder}\n   */\n  createAnnotationLayerBuilder(\n    pageDiv,\n    pdfPage,\n    annotationStorage = null,\n    imageResourcesPath = \"\",\n    renderForms = true,\n    l10n = NullL10n,\n    enableScripting = null,\n    hasJSActionsPromise = null,\n    mouseState = null,\n    fieldObjectsPromise = null,\n    annotationCanvasMap = null\n  ) {\n    return new AnnotationLayerBuilder({\n      pageDiv,\n      pdfPage,\n      annotationStorage:\n        annotationStorage || this.pdfDocument?.annotationStorage,\n      imageResourcesPath,\n      renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      l10n,\n      enableScripting: enableScripting ?? this.enableScripting,\n      hasJSActionsPromise:\n        hasJSActionsPromise || this.pdfDocument?.hasJSActions(),\n      fieldObjectsPromise:\n        fieldObjectsPromise || this.pdfDocument?.getFieldObjects(),\n      mouseState: mouseState || this._scriptingManager?.mouseState,\n      annotationCanvasMap,\n    });\n  }\n\n  /**\n   * @param {HTMLDivElement} pageDiv\n   * @param {PDFPageProxy} pdfPage\n   * @param {AnnotationStorage} [annotationStorage] - Storage for annotation\n   *   data in forms.\n   * @returns {XfaLayerBuilder}\n   */\n  createXfaLayerBuilder(pageDiv, pdfPage, annotationStorage = null) {\n    return new XfaLayerBuilder({\n      pageDiv,\n      pdfPage,\n      annotationStorage:\n        annotationStorage || this.pdfDocument?.annotationStorage,\n      linkService: this.linkService,\n    });\n  }\n\n  /**\n   * @param {PDFPageProxy} pdfPage\n   * @returns {StructTreeLayerBuilder}\n   */\n  createStructTreeLayerBuilder(pdfPage) {\n    return new StructTreeLayerBuilder({\n      pdfPage,\n    });\n  }\n\n  /**\n   * @type {boolean} Whether all pages of the PDF document have identical\n   *   widths and heights.\n   */\n  get hasEqualPageSizes() {\n    const firstPageView = this._pages[0];\n    for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n      const pageView = this._pages[i];\n      if (\n        pageView.width !== firstPageView.width ||\n        pageView.height !== firstPageView.height\n      ) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Returns sizes of the pages.\n   * @returns {Array} Array of objects with width/height/rotation fields.\n   */\n  getPagesOverview() {\n    return this._pages.map(pageView => {\n      const viewport = pageView.pdfPage.getViewport({ scale: 1 });\n\n      if (!this.enablePrintAutoRotate || isPortraitOrientation(viewport)) {\n        return {\n          width: viewport.width,\n          height: viewport.height,\n          rotation: viewport.rotation,\n        };\n      }\n      // Landscape orientation.\n      return {\n        width: viewport.height,\n        height: viewport.width,\n        rotation: (viewport.rotation - 90) % 360,\n      };\n    });\n  }\n\n  /**\n   * @type {Promise<OptionalContentConfig | null>}\n   */\n  get optionalContentConfigPromise() {\n    if (!this.pdfDocument) {\n      return Promise.resolve(null);\n    }\n    if (!this._optionalContentConfigPromise) {\n      // Prevent issues if the getter is accessed *before* the `onePageRendered`\n      // promise has resolved; won't (normally) happen in the default viewer.\n      return this.pdfDocument.getOptionalContentConfig();\n    }\n    return this._optionalContentConfigPromise;\n  }\n\n  /**\n   * @param {Promise<OptionalContentConfig>} promise - A promise that is\n   *   resolved with an {@link OptionalContentConfig} instance.\n   */\n  set optionalContentConfigPromise(promise) {\n    if (!(promise instanceof Promise)) {\n      throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._optionalContentConfigPromise) {\n      // Ignore the setter *before* the `onePageRendered` promise has resolved,\n      // since it'll be overwritten anyway; won't happen in the default viewer.\n      return;\n    }\n    this._optionalContentConfigPromise = promise;\n\n    const updateArgs = { optionalContentConfigPromise: promise };\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    this.update();\n\n    this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n      source: this,\n      promise,\n    });\n  }\n\n  /**\n   * @type {number} One of the values in {ScrollMode}.\n   */\n  get scrollMode() {\n    return this._scrollMode;\n  }\n\n  /**\n   * @param {number} mode - The direction in which the document pages should be\n   *   laid out within the scrolling container.\n   *   The constants from {ScrollMode} should be used.\n   */\n  set scrollMode(mode) {\n    if (this._scrollMode === mode) {\n      return; // The Scroll mode didn't change.\n    }\n    if (!isValidScrollMode(mode)) {\n      throw new Error(`Invalid scroll mode: ${mode}`);\n    }\n    if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      return; // Disabled for performance reasons.\n    }\n    this._previousScrollMode = this._scrollMode;\n\n    this._scrollMode = mode;\n    this.eventBus.dispatch(\"scrollmodechanged\", { source: this, mode });\n\n    this._updateScrollMode(/* pageNumber = */ this._currentPageNumber);\n  }\n\n  _updateScrollMode(pageNumber = null) {\n    const scrollMode = this._scrollMode,\n      viewer = this.viewer;\n\n    viewer.classList.toggle(\n      \"scrollHorizontal\",\n      scrollMode === ScrollMode.HORIZONTAL\n    );\n    viewer.classList.toggle(\"scrollWrapped\", scrollMode === ScrollMode.WRAPPED);\n\n    if (!this.pdfDocument || !pageNumber) {\n      return;\n    }\n\n    if (scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else if (this._previousScrollMode === ScrollMode.PAGE) {\n      // Ensure that the current spreadMode is still applied correctly when\n      // the *previous* scrollMode was `ScrollMode.PAGE`.\n      this._updateSpreadMode();\n    }\n    // Non-numeric scale values can be sensitive to the scroll orientation.\n    // Call this before re-scrolling to the current page, to ensure that any\n    // changes in scale don't move the current page.\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this._setScale(this._currentScaleValue, true);\n    }\n    this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n    this.update();\n  }\n\n  /**\n   * @type {number} One of the values in {SpreadMode}.\n   */\n  get spreadMode() {\n    return this._spreadMode;\n  }\n\n  /**\n   * @param {number} mode - Group the pages in spreads, starting with odd- or\n   *   even-number pages (unless `SpreadMode.NONE` is used).\n   *   The constants from {SpreadMode} should be used.\n   */\n  set spreadMode(mode) {\n    if (this._spreadMode === mode) {\n      return; // The Spread mode didn't change.\n    }\n    if (!isValidSpreadMode(mode)) {\n      throw new Error(`Invalid spread mode: ${mode}`);\n    }\n    this._spreadMode = mode;\n    this.eventBus.dispatch(\"spreadmodechanged\", { source: this, mode });\n\n    this._updateSpreadMode(/* pageNumber = */ this._currentPageNumber);\n  }\n\n  _updateSpreadMode(pageNumber = null) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const viewer = this.viewer,\n      pages = this._pages;\n\n    if (this._scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else {\n      // Temporarily remove all the pages from the DOM.\n      viewer.textContent = \"\";\n\n      if (this._spreadMode === SpreadMode.NONE) {\n        for (let i = 0, ii = pages.length; i < ii; ++i) {\n          viewer.appendChild(pages[i].div);\n        }\n      } else {\n        const parity = this._spreadMode - 1;\n        let spread = null;\n        for (let i = 0, ii = pages.length; i < ii; ++i) {\n          if (spread === null) {\n            spread = document.createElement(\"div\");\n            spread.className = \"spread\";\n            viewer.appendChild(spread);\n          } else if (i % 2 === parity) {\n            spread = spread.cloneNode(false);\n            viewer.appendChild(spread);\n          }\n          spread.appendChild(pages[i].div);\n        }\n      }\n    }\n\n    if (!pageNumber) {\n      return;\n    }\n    // Non-numeric scale values can be sensitive to the scroll orientation.\n    // Call this before re-scrolling to the current page, to ensure that any\n    // changes in scale don't move the current page.\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this._setScale(this._currentScaleValue, true);\n    }\n    this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n    this.update();\n  }\n\n  /**\n   * @private\n   */\n  _getPageAdvance(currentPageNumber, previous = false) {\n    switch (this._scrollMode) {\n      case ScrollMode.WRAPPED: {\n        const { views } = this._getVisiblePages(),\n          pageLayout = new Map();\n\n        // Determine the current (visible) page layout.\n        for (const { id, y, percent, widthPercent } of views) {\n          if (percent === 0 || widthPercent < 100) {\n            continue;\n          }\n          let yArray = pageLayout.get(y);\n          if (!yArray) {\n            pageLayout.set(y, (yArray ||= []));\n          }\n          yArray.push(id);\n        }\n        // Find the row of the current page.\n        for (const yArray of pageLayout.values()) {\n          const currentIndex = yArray.indexOf(currentPageNumber);\n          if (currentIndex === -1) {\n            continue;\n          }\n          const numPages = yArray.length;\n          if (numPages === 1) {\n            break;\n          }\n          // Handle documents with varying page sizes.\n          if (previous) {\n            for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {\n              const currentId = yArray[i],\n                expectedId = yArray[i + 1] - 1;\n              if (currentId < expectedId) {\n                return currentPageNumber - expectedId;\n              }\n            }\n          } else {\n            for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {\n              const currentId = yArray[i],\n                expectedId = yArray[i - 1] + 1;\n              if (currentId > expectedId) {\n                return expectedId - currentPageNumber;\n              }\n            }\n          }\n          // The current row is \"complete\", advance to the previous/next one.\n          if (previous) {\n            const firstId = yArray[0];\n            if (firstId < currentPageNumber) {\n              return currentPageNumber - firstId + 1;\n            }\n          } else {\n            const lastId = yArray[numPages - 1];\n            if (lastId > currentPageNumber) {\n              return lastId - currentPageNumber + 1;\n            }\n          }\n          break;\n        }\n        break;\n      }\n      case ScrollMode.HORIZONTAL: {\n        break;\n      }\n      case ScrollMode.PAGE:\n      case ScrollMode.VERTICAL: {\n        if (this._spreadMode === SpreadMode.NONE) {\n          break; // Normal vertical scrolling.\n        }\n        const parity = this._spreadMode - 1;\n\n        if (previous && currentPageNumber % 2 !== parity) {\n          break; // Left-hand side page.\n        } else if (!previous && currentPageNumber % 2 === parity) {\n          break; // Right-hand side page.\n        }\n        const { views } = this._getVisiblePages(),\n          expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;\n\n        for (const { id, percent, widthPercent } of views) {\n          if (id !== expectedId) {\n            continue;\n          }\n          if (percent > 0 && widthPercent === 100) {\n            return 2;\n          }\n          break;\n        }\n        break;\n      }\n    }\n    return 1;\n  }\n\n  /**\n   * Go to the next page, taking scroll/spread-modes into account.\n   * @returns {boolean} Whether navigation occured.\n   */\n  nextPage() {\n    const currentPageNumber = this._currentPageNumber,\n      pagesCount = this.pagesCount;\n\n    if (currentPageNumber >= pagesCount) {\n      return false;\n    }\n    const advance =\n      this._getPageAdvance(currentPageNumber, /* previous = */ false) || 1;\n\n    this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\n    return true;\n  }\n\n  /**\n   * Go to the previous page, taking scroll/spread-modes into account.\n   * @returns {boolean} Whether navigation occured.\n   */\n  previousPage() {\n    const currentPageNumber = this._currentPageNumber;\n\n    if (currentPageNumber <= 1) {\n      return false;\n    }\n    const advance =\n      this._getPageAdvance(currentPageNumber, /* previous = */ true) || 1;\n\n    this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\n    return true;\n  }\n\n  /**\n   * Increase the current zoom level one, or more, times.\n   * @param {number} [steps] - Defaults to zooming once.\n   */\n  increaseScale(steps = 1) {\n    let newScale = this._currentScale;\n    do {\n      newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);\n      newScale = Math.ceil(newScale * 10) / 10;\n      newScale = Math.min(MAX_SCALE, newScale);\n    } while (--steps > 0 && newScale < MAX_SCALE);\n    this.currentScaleValue = newScale;\n  }\n\n  /**\n   * Decrease the current zoom level one, or more, times.\n   * @param {number} [steps] - Defaults to zooming once.\n   */\n  decreaseScale(steps = 1) {\n    let newScale = this._currentScale;\n    do {\n      newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);\n      newScale = Math.floor(newScale * 10) / 10;\n      newScale = Math.max(MIN_SCALE, newScale);\n    } while (--steps > 0 && newScale > MIN_SCALE);\n    this.currentScaleValue = newScale;\n  }\n}\n\nexport { BaseViewer, PagesCountLimit, PDFPageViewBuffer };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFAnnotationLayerFactory} IPDFAnnotationLayerFactory */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFStructTreeLayerFactory} IPDFStructTreeLayerFactory */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces\").IPDFTextLayerFactory} IPDFTextLayerFactory */\n/** @typedef {import(\"./interfaces\").IL10n} IPDFXfaLayerFactory */\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_rendering_queue\").PDFRenderingQueue} PDFRenderingQueue */\n\nimport {\n  AnnotationMode,\n  createPromiseCapability,\n  PixelsPerInch,\n  RenderingCancelledException,\n  SVGGraphics,\n} from \"pdfjs-lib\";\nimport {\n  approximateFraction,\n  DEFAULT_SCALE,\n  getOutputScale,\n  RendererType,\n  RenderingStates,\n  roundToDivide,\n  TextLayerMode,\n} from \"./ui_utils.js\";\nimport { compatibilityParams } from \"./app_options.js\";\nimport { NullL10n } from \"./l10n_utils.js\";\n\n/**\n * @typedef {Object} PDFPageViewOptions\n * @property {HTMLDivElement} [container] - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The page unique ID (normally its number).\n * @property {number} scale - The page scale display.\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n *   A promise that is resolved with an {@link OptionalContentConfig} instance.\n *   The default value is `null`.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {IPDFTextLayerFactory} textLayerFactory\n * @property {number} [textLayerMode] - Controls if the text layer used for\n *   selection and searching is created, and if the improved text selection\n *   behaviour is enabled. The constants from {TextLayerMode} should be used.\n *   The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n *   created, and if interactive form elements or `AnnotationStorage`-data are\n *   being rendered. The constants from {@link AnnotationMode} should be used;\n *   see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n *   The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {IPDFAnnotationLayerFactory} annotationLayerFactory\n * @property {IPDFXfaLayerFactory} xfaLayerFactory\n * @property {IPDFStructTreeLayerFactory} structTreeLayerFactory\n * @property {Object} [textHighlighterFactory]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} [useOnlyCssZoom] - Enables CSS only zooming. The default\n *   value is `false`.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n *   total pixels, i.e. width * height. Use -1 for no limit. The default value\n *   is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n */\n\nconst MAX_CANVAS_PIXELS = compatibilityParams.maxCanvasPixels || 16777216;\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n  /**\n   * @param {PDFPageViewOptions} options\n   */\n  constructor(options) {\n    const container = options.container;\n    const defaultViewport = options.defaultViewport;\n\n    this.id = options.id;\n    this.renderingId = \"page\" + this.id;\n\n    this.pdfPage = null;\n    this.pageLabel = null;\n    this.rotation = 0;\n    this.scale = options.scale || DEFAULT_SCALE;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise =\n      options.optionalContentConfigPromise || null;\n    this.hasRestrictedScaling = false;\n    this.textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode =\n      options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n    this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;\n\n    this.eventBus = options.eventBus;\n    this.renderingQueue = options.renderingQueue;\n    this.textLayerFactory = options.textLayerFactory;\n    this.annotationLayerFactory = options.annotationLayerFactory;\n    this.xfaLayerFactory = options.xfaLayerFactory;\n    this.textHighlighter =\n      options.textHighlighterFactory?.createTextHighlighter(\n        this.id - 1,\n        this.eventBus\n      );\n    this.structTreeLayerFactory = options.structTreeLayerFactory;\n    this.renderer = options.renderer || RendererType.CANVAS;\n    this.l10n = options.l10n || NullL10n;\n\n    this.paintTask = null;\n    this.paintedViewportMap = new WeakMap();\n    this.renderingState = RenderingStates.INITIAL;\n    this.resume = null;\n    this._renderError = null;\n    this._isStandalone = !this.renderingQueue?.hasViewer();\n\n    this._annotationCanvasMap = null;\n\n    this.annotationLayer = null;\n    this.textLayer = null;\n    this.zoomLayer = null;\n    this.xfaLayer = null;\n    this.structTreeLayer = null;\n\n    const div = document.createElement(\"div\");\n    div.className = \"page\";\n    div.style.width = Math.floor(this.viewport.width) + \"px\";\n    div.style.height = Math.floor(this.viewport.height) + \"px\";\n    div.setAttribute(\"data-page-number\", this.id);\n    div.setAttribute(\"role\", \"region\");\n    this.l10n.get(\"page_landmark\", { page: this.id }).then(msg => {\n      div.setAttribute(\"aria-label\", msg);\n    });\n    this.div = div;\n\n    container?.appendChild(div);\n  }\n\n  setPdfPage(pdfPage) {\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation,\n    });\n    this.reset();\n  }\n\n  destroy() {\n    this.reset();\n    if (this.pdfPage) {\n      this.pdfPage.cleanup();\n    }\n  }\n\n  /**\n   * @private\n   */\n  async _renderAnnotationLayer() {\n    let error = null;\n    try {\n      await this.annotationLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"annotationlayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error,\n      });\n    }\n  }\n\n  /**\n   * @private\n   */\n  async _renderXfaLayer() {\n    let error = null;\n    try {\n      const result = await this.xfaLayer.render(this.viewport, \"display\");\n      if (this.textHighlighter) {\n        this._buildXfaTextContentItems(result.textDivs);\n      }\n    } catch (ex) {\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"xfalayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error,\n      });\n    }\n  }\n\n  async _buildXfaTextContentItems(textDivs) {\n    const text = await this.pdfPage.getTextContent();\n    const items = [];\n    for (const item of text.items) {\n      items.push(item.str);\n    }\n    this.textHighlighter.setTextMapping(textDivs, items);\n    this.textHighlighter.enable();\n  }\n\n  /**\n   * @private\n   */\n  _resetZoomLayer(removeFromDOM = false) {\n    if (!this.zoomLayer) {\n      return;\n    }\n    const zoomLayerCanvas = this.zoomLayer.firstChild;\n    this.paintedViewportMap.delete(zoomLayerCanvas);\n    // Zeroing the width and height causes Firefox to release graphics\n    // resources immediately, which can greatly reduce memory consumption.\n    zoomLayerCanvas.width = 0;\n    zoomLayerCanvas.height = 0;\n\n    if (removeFromDOM) {\n      // Note: `ChildNode.remove` doesn't throw if the parent node is undefined.\n      this.zoomLayer.remove();\n    }\n    this.zoomLayer = null;\n  }\n\n  reset({\n    keepZoomLayer = false,\n    keepAnnotationLayer = false,\n    keepXfaLayer = false,\n  } = {}) {\n    this.cancelRendering({ keepAnnotationLayer, keepXfaLayer });\n    this.renderingState = RenderingStates.INITIAL;\n\n    const div = this.div;\n    div.style.width = Math.floor(this.viewport.width) + \"px\";\n    div.style.height = Math.floor(this.viewport.height) + \"px\";\n\n    const childNodes = div.childNodes,\n      zoomLayerNode = (keepZoomLayer && this.zoomLayer) || null,\n      annotationLayerNode =\n        (keepAnnotationLayer && this.annotationLayer?.div) || null,\n      xfaLayerNode = (keepXfaLayer && this.xfaLayer?.div) || null;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const node = childNodes[i];\n      switch (node) {\n        case zoomLayerNode:\n        case annotationLayerNode:\n        case xfaLayerNode:\n          continue;\n      }\n      node.remove();\n    }\n    div.removeAttribute(\"data-loaded\");\n\n    if (annotationLayerNode) {\n      // Hide the annotation layer until all elements are resized\n      // so they are not displayed on the already resized page.\n      this.annotationLayer.hide();\n    }\n    if (xfaLayerNode) {\n      // Hide the XFA layer until all elements are resized\n      // so they are not displayed on the already resized page.\n      this.xfaLayer.hide();\n    }\n\n    if (!zoomLayerNode) {\n      if (this.canvas) {\n        this.paintedViewportMap.delete(this.canvas);\n        // Zeroing the width and height causes Firefox to release graphics\n        // resources immediately, which can greatly reduce memory consumption.\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n        delete this.canvas;\n      }\n      this._resetZoomLayer();\n    }\n    if (this.svg) {\n      this.paintedViewportMap.delete(this.svg);\n      delete this.svg;\n    }\n\n    this.loadingIconDiv = document.createElement(\"div\");\n    this.loadingIconDiv.className = \"loadingIcon notVisible\";\n    if (this._isStandalone) {\n      this.toggleLoadingIconSpinner(/* viewVisible = */ true);\n    }\n    this.loadingIconDiv.setAttribute(\"role\", \"img\");\n    this.l10n.get(\"loading\").then(msg => {\n      this.loadingIconDiv?.setAttribute(\"aria-label\", msg);\n    });\n    div.appendChild(this.loadingIconDiv);\n  }\n\n  update({ scale = 0, rotation = null, optionalContentConfigPromise = null }) {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"GENERIC\") &&\n      typeof arguments[0] !== \"object\"\n    ) {\n      console.error(\n        \"PDFPageView.update called with separate parameters, please use an object instead.\"\n      );\n\n      this.update({\n        scale: arguments[0],\n        rotation: arguments[1],\n        optionalContentConfigPromise: arguments[2],\n      });\n      return;\n    }\n\n    this.scale = scale || this.scale;\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation; // The rotation may be zero.\n    }\n    if (optionalContentConfigPromise instanceof Promise) {\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n    }\n\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    const viewportScale = this.scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    this.viewport = this.viewport.clone({\n      scale: viewportScale,\n      rotation: totalRotation,\n    });\n\n    if (this._isStandalone) {\n      const { style } = document.documentElement;\n      style.setProperty(\"--zoom-factor\", this.scale);\n      style.setProperty(\"--viewport-scale-factor\", viewportScale);\n    }\n\n    if (this.svg) {\n      this.cssTransform({\n        target: this.svg,\n        redrawAnnotationLayer: true,\n        redrawXfaLayer: true,\n      });\n\n      this.eventBus.dispatch(\"pagerendered\", {\n        source: this,\n        pageNumber: this.id,\n        cssTransform: true,\n        timestamp: performance.now(),\n        error: this._renderError,\n      });\n      return;\n    }\n\n    let isScalingRestricted = false;\n    if (this.canvas && this.maxCanvasPixels > 0) {\n      const outputScale = this.outputScale;\n      if (\n        ((Math.floor(this.viewport.width) * outputScale.sx) | 0) *\n          ((Math.floor(this.viewport.height) * outputScale.sy) | 0) >\n        this.maxCanvasPixels\n      ) {\n        isScalingRestricted = true;\n      }\n    }\n\n    if (this.canvas) {\n      if (\n        this.useOnlyCssZoom ||\n        (this.hasRestrictedScaling && isScalingRestricted)\n      ) {\n        this.cssTransform({\n          target: this.canvas,\n          redrawAnnotationLayer: true,\n          redrawXfaLayer: true,\n        });\n\n        this.eventBus.dispatch(\"pagerendered\", {\n          source: this,\n          pageNumber: this.id,\n          cssTransform: true,\n          timestamp: performance.now(),\n          error: this._renderError,\n        });\n        return;\n      }\n      if (!this.zoomLayer && !this.canvas.hidden) {\n        this.zoomLayer = this.canvas.parentNode;\n        this.zoomLayer.style.position = \"absolute\";\n      }\n    }\n    if (this.zoomLayer) {\n      this.cssTransform({ target: this.zoomLayer.firstChild });\n    }\n    this.reset({\n      keepZoomLayer: true,\n      keepAnnotationLayer: true,\n      keepXfaLayer: true,\n    });\n  }\n\n  /**\n   * PLEASE NOTE: Most likely you want to use the `this.reset()` method,\n   *              rather than calling this one directly.\n   */\n  cancelRendering({ keepAnnotationLayer = false, keepXfaLayer = false } = {}) {\n    if (this.paintTask) {\n      this.paintTask.cancel();\n      this.paintTask = null;\n    }\n    this.resume = null;\n\n    if (this.textLayer) {\n      this.textLayer.cancel();\n      this.textLayer = null;\n    }\n    if (\n      this.annotationLayer &&\n      (!keepAnnotationLayer || !this.annotationLayer.div)\n    ) {\n      this.annotationLayer.cancel();\n      this.annotationLayer = null;\n      this._annotationCanvasMap = null;\n    }\n    if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {\n      this.xfaLayer.cancel();\n      this.xfaLayer = null;\n      this.textHighlighter?.disable();\n    }\n    if (this._onTextLayerRendered) {\n      this.eventBus._off(\"textlayerrendered\", this._onTextLayerRendered);\n      this._onTextLayerRendered = null;\n    }\n  }\n\n  cssTransform({\n    target,\n    redrawAnnotationLayer = false,\n    redrawXfaLayer = false,\n  }) {\n    // Scale target (canvas or svg), its wrapper and page container.\n    const width = this.viewport.width;\n    const height = this.viewport.height;\n    const div = this.div;\n    target.style.width =\n      target.parentNode.style.width =\n      div.style.width =\n        Math.floor(width) + \"px\";\n    target.style.height =\n      target.parentNode.style.height =\n      div.style.height =\n        Math.floor(height) + \"px\";\n    // The canvas may have been originally rotated; rotate relative to that.\n    const relativeRotation =\n      this.viewport.rotation - this.paintedViewportMap.get(target).rotation;\n    const absRotation = Math.abs(relativeRotation);\n    let scaleX = 1,\n      scaleY = 1;\n    if (absRotation === 90 || absRotation === 270) {\n      // Scale x and y because of the rotation.\n      scaleX = height / width;\n      scaleY = width / height;\n    }\n    target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;\n\n    if (this.textLayer) {\n      // Rotating the text layer is more complicated since the divs inside the\n      // the text layer are rotated.\n      // TODO: This could probably be simplified by drawing the text layer in\n      // one orientation and then rotating overall.\n      const textLayerViewport = this.textLayer.viewport;\n      const textRelativeRotation =\n        this.viewport.rotation - textLayerViewport.rotation;\n      const textAbsRotation = Math.abs(textRelativeRotation);\n      let scale = width / textLayerViewport.width;\n      if (textAbsRotation === 90 || textAbsRotation === 270) {\n        scale = width / textLayerViewport.height;\n      }\n      const textLayerDiv = this.textLayer.textLayerDiv;\n      let transX, transY;\n      switch (textAbsRotation) {\n        case 0:\n          transX = transY = 0;\n          break;\n        case 90:\n          transX = 0;\n          transY = \"-\" + textLayerDiv.style.height;\n          break;\n        case 180:\n          transX = \"-\" + textLayerDiv.style.width;\n          transY = \"-\" + textLayerDiv.style.height;\n          break;\n        case 270:\n          transX = \"-\" + textLayerDiv.style.width;\n          transY = 0;\n          break;\n        default:\n          console.error(\"Bad rotation value.\");\n          break;\n      }\n\n      textLayerDiv.style.transform =\n        `rotate(${textAbsRotation}deg) ` +\n        `scale(${scale}) ` +\n        `translate(${transX}, ${transY})`;\n      textLayerDiv.style.transformOrigin = \"0% 0%\";\n    }\n\n    if (redrawAnnotationLayer && this.annotationLayer) {\n      this._renderAnnotationLayer();\n    }\n    if (redrawXfaLayer && this.xfaLayer) {\n      this._renderXfaLayer();\n    }\n  }\n\n  get width() {\n    return this.viewport.width;\n  }\n\n  get height() {\n    return this.viewport.height;\n  }\n\n  getPagePoint(x, y) {\n    return this.viewport.convertToPdfPoint(x, y);\n  }\n\n  /**\n   * @ignore\n   */\n  toggleLoadingIconSpinner(viewVisible = false) {\n    this.loadingIconDiv?.classList.toggle(\"notVisible\", !viewVisible);\n  }\n\n  draw() {\n    if (this.renderingState !== RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      this.reset(); // Ensure that we reset all state to prevent issues.\n    }\n    const { div, pdfPage } = this;\n\n    if (!pdfPage) {\n      this.renderingState = RenderingStates.FINISHED;\n\n      if (this.loadingIconDiv) {\n        this.loadingIconDiv.remove();\n        delete this.loadingIconDiv;\n      }\n      return Promise.reject(new Error(\"pdfPage is not loaded\"));\n    }\n\n    this.renderingState = RenderingStates.RUNNING;\n\n    // Wrap the canvas so that if it has a CSS transform for high DPI the\n    // overflow will be hidden in Firefox.\n    const canvasWrapper = document.createElement(\"div\");\n    canvasWrapper.style.width = div.style.width;\n    canvasWrapper.style.height = div.style.height;\n    canvasWrapper.classList.add(\"canvasWrapper\");\n\n    if (this.annotationLayer?.div) {\n      // The annotation layer needs to stay on top.\n      div.insertBefore(canvasWrapper, this.annotationLayer.div);\n    } else {\n      div.appendChild(canvasWrapper);\n    }\n\n    let textLayer = null;\n    if (this.textLayerMode !== TextLayerMode.DISABLE && this.textLayerFactory) {\n      const textLayerDiv = document.createElement(\"div\");\n      textLayerDiv.className = \"textLayer\";\n      textLayerDiv.style.width = canvasWrapper.style.width;\n      textLayerDiv.style.height = canvasWrapper.style.height;\n      if (this.annotationLayer?.div) {\n        // The annotation layer needs to stay on top.\n        div.insertBefore(textLayerDiv, this.annotationLayer.div);\n      } else {\n        div.appendChild(textLayerDiv);\n      }\n\n      textLayer = this.textLayerFactory.createTextLayerBuilder(\n        textLayerDiv,\n        this.id - 1,\n        this.viewport,\n        this.textLayerMode === TextLayerMode.ENABLE_ENHANCE,\n        this.eventBus,\n        this.textHighlighter\n      );\n    }\n    this.textLayer = textLayer;\n\n    if (\n      this.#annotationMode !== AnnotationMode.DISABLE &&\n      this.annotationLayerFactory\n    ) {\n      this._annotationCanvasMap ||= new Map();\n      this.annotationLayer ||=\n        this.annotationLayerFactory.createAnnotationLayerBuilder(\n          div,\n          pdfPage,\n          /* annotationStorage = */ null,\n          this.imageResourcesPath,\n          this.#annotationMode === AnnotationMode.ENABLE_FORMS,\n          this.l10n,\n          /* enableScripting = */ null,\n          /* hasJSActionsPromise = */ null,\n          /* mouseState = */ null,\n          /* fieldObjectsPromise = */ null,\n          /* annotationCanvasMap */ this._annotationCanvasMap\n        );\n    }\n\n    if (this.xfaLayer?.div) {\n      // The xfa layer needs to stay on top.\n      div.appendChild(this.xfaLayer.div);\n    }\n\n    let renderContinueCallback = null;\n    if (this.renderingQueue) {\n      renderContinueCallback = cont => {\n        if (!this.renderingQueue.isHighestPriority(this)) {\n          this.renderingState = RenderingStates.PAUSED;\n          this.resume = () => {\n            this.renderingState = RenderingStates.RUNNING;\n            cont();\n          };\n          return;\n        }\n        cont();\n      };\n    }\n\n    const finishPaintTask = async (error = null) => {\n      // The paintTask may have been replaced by a new one, so only remove\n      // the reference to the paintTask if it matches the one that is\n      // triggering this callback.\n      if (paintTask === this.paintTask) {\n        this.paintTask = null;\n      }\n\n      if (error instanceof RenderingCancelledException) {\n        this._renderError = null;\n        return;\n      }\n      this._renderError = error;\n\n      this.renderingState = RenderingStates.FINISHED;\n\n      if (this.loadingIconDiv) {\n        this.loadingIconDiv.remove();\n        delete this.loadingIconDiv;\n      }\n      this._resetZoomLayer(/* removeFromDOM = */ true);\n\n      this.eventBus.dispatch(\"pagerendered\", {\n        source: this,\n        pageNumber: this.id,\n        cssTransform: false,\n        timestamp: performance.now(),\n        error: this._renderError,\n      });\n\n      if (error) {\n        throw error;\n      }\n    };\n\n    const paintTask =\n      this.renderer === RendererType.SVG\n        ? this.paintOnSvg(canvasWrapper)\n        : this.paintOnCanvas(canvasWrapper);\n    paintTask.onRenderContinue = renderContinueCallback;\n    this.paintTask = paintTask;\n\n    const resultPromise = paintTask.promise.then(\n      () => {\n        return finishPaintTask(null).then(() => {\n          if (textLayer) {\n            const readableStream = pdfPage.streamTextContent({\n              normalizeWhitespace: true,\n              includeMarkedContent: true,\n            });\n            textLayer.setTextContentStream(readableStream);\n            textLayer.render();\n          }\n\n          if (this.annotationLayer) {\n            this._renderAnnotationLayer();\n          }\n        });\n      },\n      function (reason) {\n        return finishPaintTask(reason);\n      }\n    );\n\n    if (this.xfaLayerFactory) {\n      if (!this.xfaLayer) {\n        this.xfaLayer = this.xfaLayerFactory.createXfaLayerBuilder(\n          div,\n          pdfPage,\n          /* annotationStorage = */ null\n        );\n      }\n      this._renderXfaLayer();\n    }\n\n    // The structure tree is currently only supported when the text layer is\n    // enabled and a canvas is used for rendering.\n    if (this.structTreeLayerFactory && this.textLayer && this.canvas) {\n      // The structure tree must be generated after the text layer for the\n      // aria-owns to work.\n      this._onTextLayerRendered = event => {\n        if (event.pageNumber !== this.id) {\n          return;\n        }\n        this.eventBus._off(\"textlayerrendered\", this._onTextLayerRendered);\n        this._onTextLayerRendered = null;\n\n        if (!this.canvas) {\n          return; // The canvas was removed, prevent errors below.\n        }\n        this.pdfPage.getStructTree().then(tree => {\n          if (!tree) {\n            return;\n          }\n          if (!this.canvas) {\n            return; // The canvas was removed, prevent errors below.\n          }\n          const treeDom = this.structTreeLayer.render(tree);\n          treeDom.classList.add(\"structTree\");\n          this.canvas.appendChild(treeDom);\n        });\n      };\n      this.eventBus._on(\"textlayerrendered\", this._onTextLayerRendered);\n      this.structTreeLayer =\n        this.structTreeLayerFactory.createStructTreeLayerBuilder(pdfPage);\n    }\n\n    div.setAttribute(\"data-loaded\", true);\n\n    this.eventBus.dispatch(\"pagerender\", {\n      source: this,\n      pageNumber: this.id,\n    });\n    return resultPromise;\n  }\n\n  paintOnCanvas(canvasWrapper) {\n    const renderCapability = createPromiseCapability();\n    const result = {\n      promise: renderCapability.promise,\n      onRenderContinue(cont) {\n        cont();\n      },\n      cancel() {\n        renderTask.cancel();\n      },\n    };\n\n    const viewport = this.viewport;\n    const canvas = document.createElement(\"canvas\");\n\n    // Keep the canvas hidden until the first draw callback, or until drawing\n    // is complete when `!this.renderingQueue`, to prevent black flickering.\n    canvas.hidden = true;\n    let isCanvasHidden = true;\n    const showCanvas = function () {\n      if (isCanvasHidden) {\n        canvas.hidden = false;\n        isCanvasHidden = false;\n      }\n    };\n\n    canvasWrapper.appendChild(canvas);\n    this.canvas = canvas;\n\n    if (\n      typeof PDFJSDev === \"undefined\" ||\n      PDFJSDev.test(\"MOZCENTRAL || GENERIC\")\n    ) {\n      canvas.mozOpaque = true;\n    }\n\n    const ctx = canvas.getContext(\"2d\", { alpha: false });\n    const outputScale = getOutputScale(ctx);\n    this.outputScale = outputScale;\n\n    if (this.useOnlyCssZoom) {\n      const actualSizeViewport = viewport.clone({\n        scale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      });\n      // Use a scale that makes the canvas have the originally intended size\n      // of the page.\n      outputScale.sx *= actualSizeViewport.width / viewport.width;\n      outputScale.sy *= actualSizeViewport.height / viewport.height;\n      outputScale.scaled = true;\n    }\n\n    if (this.maxCanvasPixels > 0) {\n      const pixelsInViewport = viewport.width * viewport.height;\n      const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n      if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n        outputScale.sx = maxScale;\n        outputScale.sy = maxScale;\n        outputScale.scaled = true;\n        this.hasRestrictedScaling = true;\n      } else {\n        this.hasRestrictedScaling = false;\n      }\n    }\n\n    const sfx = approximateFraction(outputScale.sx);\n    const sfy = approximateFraction(outputScale.sy);\n    canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n    canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n    canvas.style.width = roundToDivide(viewport.width, sfx[1]) + \"px\";\n    canvas.style.height = roundToDivide(viewport.height, sfy[1]) + \"px\";\n\n    // Add the viewport so it's known what it was originally drawn with.\n    this.paintedViewportMap.set(canvas, viewport);\n\n    // Rendering area\n    const transform = !outputScale.scaled\n      ? null\n      : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport: this.viewport,\n      annotationMode: this.#annotationMode,\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      annotationCanvasMap: this._annotationCanvasMap,\n    };\n    const renderTask = this.pdfPage.render(renderContext);\n    renderTask.onContinue = function (cont) {\n      showCanvas();\n      if (result.onRenderContinue) {\n        result.onRenderContinue(cont);\n      } else {\n        cont();\n      }\n    };\n\n    renderTask.promise.then(\n      function () {\n        showCanvas();\n        renderCapability.resolve();\n      },\n      function (error) {\n        showCanvas();\n        renderCapability.reject(error);\n      }\n    );\n    return result;\n  }\n\n  paintOnSvg(wrapper) {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"MOZCENTRAL || CHROME\")\n    ) {\n      // Return a mock object, to prevent errors such as e.g.\n      // \"TypeError: paintTask.promise is undefined\".\n      return {\n        promise: Promise.reject(new Error(\"SVG rendering is not supported.\")),\n        onRenderContinue(cont) {},\n        cancel() {},\n      };\n    }\n\n    let cancelled = false;\n    const ensureNotCancelled = () => {\n      if (cancelled) {\n        throw new RenderingCancelledException(\n          `Rendering cancelled, page ${this.id}`,\n          \"svg\"\n        );\n      }\n    };\n\n    const pdfPage = this.pdfPage;\n    const actualSizeViewport = this.viewport.clone({\n      scale: PixelsPerInch.PDF_TO_CSS_UNITS,\n    });\n    const promise = pdfPage\n      .getOperatorList({\n        annotationMode: this.#annotationMode,\n      })\n      .then(opList => {\n        ensureNotCancelled();\n        const svgGfx = new SVGGraphics(\n          pdfPage.commonObjs,\n          pdfPage.objs,\n          /* forceDataSchema = */ compatibilityParams.disableCreateObjectURL\n        );\n        return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {\n          ensureNotCancelled();\n          this.svg = svg;\n          this.paintedViewportMap.set(svg, actualSizeViewport);\n\n          svg.style.width = wrapper.style.width;\n          svg.style.height = wrapper.style.height;\n          this.renderingState = RenderingStates.FINISHED;\n          wrapper.appendChild(svg);\n        });\n      });\n\n    return {\n      promise,\n      onRenderContinue(cont) {\n        cont();\n      },\n      cancel() {\n        cancelled = true;\n      },\n    };\n  }\n\n  /**\n   * @param {string|null} label\n   */\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n\n    if (this.pageLabel !== null) {\n      this.div.setAttribute(\"data-page-label\", this.pageLabel);\n    } else {\n      this.div.removeAttribute(\"data-page-label\");\n    }\n  }\n}\n\nexport { PDFPageView };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  const userAgent =\n    (typeof navigator !== \"undefined\" && navigator.userAgent) || \"\";\n  const platform =\n    (typeof navigator !== \"undefined\" && navigator.platform) || \"\";\n  const maxTouchPoints =\n    (typeof navigator !== \"undefined\" && navigator.maxTouchPoints) || 1;\n\n  const isAndroid = /Android/.test(userAgent);\n  const isIOS =\n    /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n    (platform === \"MacIntel\" && maxTouchPoints > 1);\n  const isIOSChrome = /CriOS/.test(userAgent);\n\n  // Disables URL.createObjectURL() usage in some environments.\n  // Support: Chrome on iOS\n  (function checkOnBlobSupport() {\n    // Sometimes Chrome on iOS loses data created with createObjectURL(),\n    // see issue 8081.\n    if (isIOSChrome) {\n      compatibilityParams.disableCreateObjectURL = true;\n    }\n  })();\n\n  // Limit canvas size to 5 mega-pixels on mobile.\n  // Support: Android, iOS\n  (function checkCanvasSizeLimitation() {\n    if (isIOS || isAndroid) {\n      compatibilityParams.maxCanvasPixels = 5242880;\n    }\n  })();\n}\n\nconst OptionKind = {\n  VIEWER: 0x02,\n  API: 0x04,\n  WORKER: 0x08,\n  PREFERENCE: 0x80,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n *       see `OptionKind.PREFERENCE`, hence the values below must use only\n *       primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n  annotationMode: {\n    /** @type {number} */\n    value: 2,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  cursorToolOnLoad: {\n    /** @type {number} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  defaultUrl: {\n    /** @type {string} */\n    value: \"compressed.tracemonkey-pldi-09.pdf\",\n    kind: OptionKind.VIEWER,\n  },\n  defaultZoomValue: {\n    /** @type {string} */\n    value: \"\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  disableHistory: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER,\n  },\n  disablePageLabels: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enablePermissions: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enablePrintAutoRotate: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableScripting: {\n    /** @type {boolean} */\n    value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  externalLinkRel: {\n    /** @type {string} */\n    value: \"noopener noreferrer nofollow\",\n    kind: OptionKind.VIEWER,\n  },\n  externalLinkTarget: {\n    /** @type {number} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  historyUpdateUrl: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  ignoreDestinationZoom: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  imageResourcesPath: {\n    /** @type {string} */\n    value: \"./images/\",\n    kind: OptionKind.VIEWER,\n  },\n  maxCanvasPixels: {\n    /** @type {number} */\n    value: 16777216,\n    compatibility: compatibilityParams.maxCanvasPixels,\n    kind: OptionKind.VIEWER,\n  },\n  pdfBugEnabled: {\n    /** @type {boolean} */\n    value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  printResolution: {\n    /** @type {number} */\n    value: 150,\n    kind: OptionKind.VIEWER,\n  },\n  renderer: {\n    /** @type {string} */\n    value: \"canvas\",\n    kind: OptionKind.VIEWER,\n  },\n  sidebarViewOnLoad: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  scrollModeOnLoad: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  spreadModeOnLoad: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  textLayerMode: {\n    /** @type {number} */\n    value: 1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  useOnlyCssZoom: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  viewerCssTheme: {\n    /** @type {number} */\n    value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  viewOnLoad: {\n    /** @type {boolean} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n\n  cMapPacked: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API,\n  },\n  cMapUrl: {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n        ? \"../external/bcmaps/\"\n        : \"../web/cmaps/\",\n    kind: OptionKind.API,\n  },\n  disableAutoFetch: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableFontFace: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableRange: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableStream: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  docBaseUrl: {\n    /** @type {string} */\n    value: \"\",\n    kind: OptionKind.API,\n  },\n  enableXfa: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  fontExtraProperties: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API,\n  },\n  isEvalSupported: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API,\n  },\n  maxImageSize: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.API,\n  },\n  pdfBug: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API,\n  },\n  standardFontDataUrl: {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n        ? \"../external/standard_fonts/\"\n        : \"../web/standard_fonts/\",\n    kind: OptionKind.API,\n  },\n  verbosity: {\n    /** @type {number} */\n    value: 1,\n    kind: OptionKind.API,\n  },\n\n  workerPort: {\n    /** @type {Object} */\n    value: null,\n    kind: OptionKind.WORKER,\n  },\n  workerSrc: {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n        ? \"../src/worker_loader.js\"\n        : \"../build/pdf.worker.js\",\n    kind: OptionKind.WORKER,\n  },\n};\nif (\n  typeof PDFJSDev === \"undefined\" ||\n  PDFJSDev.test(\"!PRODUCTION || GENERIC\")\n) {\n  defaultOptions.disablePreferences = {\n    /** @type {boolean} */\n    value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n    kind: OptionKind.VIEWER,\n  };\n  defaultOptions.locale = {\n    /** @type {string} */\n    value: typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\n    kind: OptionKind.VIEWER,\n  };\n  defaultOptions.sandboxBundleSrc = {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")\n        ? \"../build/dev-sandbox/pdf.sandbox.js\"\n        : \"../build/pdf.sandbox.js\",\n    kind: OptionKind.VIEWER,\n  };\n\n  defaultOptions.renderer.kind += OptionKind.PREFERENCE;\n} else if (PDFJSDev.test(\"CHROME\")) {\n  defaultOptions.disableTelemetry = {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  };\n  defaultOptions.sandboxBundleSrc = {\n    /** @type {string} */\n    value: \"../build/pdf.sandbox.js\",\n    kind: OptionKind.VIEWER,\n  };\n}\n\nconst userOptions = Object.create(null);\n\nclass AppOptions {\n  constructor() {\n    throw new Error(\"Cannot initialize AppOptions.\");\n  }\n\n  static get(name) {\n    const userOption = userOptions[name];\n    if (userOption !== undefined) {\n      return userOption;\n    }\n    const defaultOption = defaultOptions[name];\n    if (defaultOption !== undefined) {\n      return defaultOption.compatibility ?? defaultOption.value;\n    }\n    return undefined;\n  }\n\n  static getAll(kind = null) {\n    const options = Object.create(null);\n    for (const name in defaultOptions) {\n      const defaultOption = defaultOptions[name];\n      if (kind) {\n        if ((kind & defaultOption.kind) === 0) {\n          continue;\n        }\n        if (kind === OptionKind.PREFERENCE) {\n          const value = defaultOption.value,\n            valueType = typeof value;\n\n          if (\n            valueType === \"boolean\" ||\n            valueType === \"string\" ||\n            (valueType === \"number\" && Number.isInteger(value))\n          ) {\n            options[name] = value;\n            continue;\n          }\n          throw new Error(`Invalid type for preference: ${name}`);\n        }\n      }\n      const userOption = userOptions[name];\n      options[name] =\n        userOption !== undefined\n          ? userOption\n          : defaultOption.compatibility ?? defaultOption.value;\n    }\n    return options;\n  }\n\n  static set(name, value) {\n    userOptions[name] = value;\n  }\n\n  static setAll(options) {\n    for (const name in options) {\n      userOptions[name] = options[name];\n    }\n  }\n\n  static remove(name) {\n    delete userOptions[name];\n  }\n\n  /**\n   * @ignore\n   */\n  static _hasUserOptions() {\n    return Object.keys(userOptions).length > 0;\n  }\n}\n\nexport { AppOptions, compatibilityParams, OptionKind };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n/** @typedef {import(\"./pdf_viewer\").PDFViewer} PDFViewer */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_thumbnail_viewer\").PDFThumbnailViewer} PDFThumbnailViewer */\n\nimport { RenderingCancelledException } from \"pdfjs-lib\";\nimport { RenderingStates } from \"./ui_utils.js\";\n\nconst CLEANUP_TIMEOUT = 30000;\n\n/**\n * Controls rendering of the views for pages and thumbnails.\n */\nclass PDFRenderingQueue {\n  constructor() {\n    this.pdfViewer = null;\n    this.pdfThumbnailViewer = null;\n    this.onIdle = null;\n    this.highestPriorityPage = null;\n    /** @type {number} */\n    this.idleTimeout = null;\n    this.printing = false;\n    this.isThumbnailViewEnabled = false;\n  }\n\n  /**\n   * @param {PDFViewer} pdfViewer\n   */\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n\n  /**\n   * @param {PDFThumbnailViewer} pdfThumbnailViewer\n   */\n  setThumbnailViewer(pdfThumbnailViewer) {\n    this.pdfThumbnailViewer = pdfThumbnailViewer;\n  }\n\n  /**\n   * @param {IRenderableView} view\n   * @returns {boolean}\n   */\n  isHighestPriority(view) {\n    return this.highestPriorityPage === view.renderingId;\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  hasViewer() {\n    return !!this.pdfViewer;\n  }\n\n  /**\n   * @param {Object} currentlyVisiblePages\n   */\n  renderHighestPriority(currentlyVisiblePages) {\n    if (this.idleTimeout) {\n      clearTimeout(this.idleTimeout);\n      this.idleTimeout = null;\n    }\n\n    // Pages have a higher priority than thumbnails, so check them first.\n    if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n      return;\n    }\n    // No pages needed rendering, so check thumbnails.\n    if (\n      this.isThumbnailViewEnabled &&\n      this.pdfThumbnailViewer?.forceRendering()\n    ) {\n      return;\n    }\n\n    if (this.printing) {\n      // If printing is currently ongoing do not reschedule cleanup.\n      return;\n    }\n\n    if (this.onIdle) {\n      this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n    }\n  }\n\n  /**\n   * @param {Object} visible\n   * @param {Array} views\n   * @param {boolean} scrolledDown\n   * @param {boolean} [preRenderExtra]\n   */\n  getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {\n    /**\n     * The state has changed. Figure out which page has the highest priority to\n     * render next (if any).\n     *\n     * Priority:\n     * 1. visible pages\n     * 2. if last scrolled down, the page after the visible pages, or\n     *    if last scrolled up, the page before the visible pages\n     */\n    const visibleViews = visible.views,\n      numVisible = visibleViews.length;\n\n    if (numVisible === 0) {\n      return null;\n    }\n    for (let i = 0; i < numVisible; i++) {\n      const view = visibleViews[i].view;\n      if (!this.isViewFinished(view)) {\n        return view;\n      }\n    }\n    const firstId = visible.first.id,\n      lastId = visible.last.id;\n\n    // All the visible views have rendered; try to handle any \"holes\" in the\n    // page layout (can happen e.g. with spreadModes at higher zoom levels).\n    if (lastId - firstId + 1 > numVisible) {\n      const visibleIds = visible.ids;\n      for (let i = 1, ii = lastId - firstId; i < ii; i++) {\n        const holeId = scrolledDown ? firstId + i : lastId - i;\n        if (visibleIds.has(holeId)) {\n          continue;\n        }\n        const holeView = views[holeId - 1];\n        if (!this.isViewFinished(holeView)) {\n          return holeView;\n        }\n      }\n    }\n\n    // All the visible views have rendered; try to render next/previous page.\n    // (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)\n    let preRenderIndex = scrolledDown ? lastId : firstId - 2;\n    let preRenderView = views[preRenderIndex];\n\n    if (preRenderView && !this.isViewFinished(preRenderView)) {\n      return preRenderView;\n    }\n    if (preRenderExtra) {\n      preRenderIndex += scrolledDown ? 1 : -1;\n      preRenderView = views[preRenderIndex];\n\n      if (preRenderView && !this.isViewFinished(preRenderView)) {\n        return preRenderView;\n      }\n    }\n    // Everything that needs to be rendered has been.\n    return null;\n  }\n\n  /**\n   * @param {IRenderableView} view\n   * @returns {boolean}\n   */\n  isViewFinished(view) {\n    return view.renderingState === RenderingStates.FINISHED;\n  }\n\n  /**\n   * Render a page or thumbnail view. This calls the appropriate function\n   * based on the views state. If the view is already rendered it will return\n   * `false`.\n   *\n   * @param {IRenderableView} view\n   */\n  renderView(view) {\n    switch (view.renderingState) {\n      case RenderingStates.FINISHED:\n        return false;\n      case RenderingStates.PAUSED:\n        this.highestPriorityPage = view.renderingId;\n        view.resume();\n        break;\n      case RenderingStates.RUNNING:\n        this.highestPriorityPage = view.renderingId;\n        break;\n      case RenderingStates.INITIAL:\n        this.highestPriorityPage = view.renderingId;\n        view\n          .draw()\n          .finally(() => {\n            this.renderHighestPriority();\n          })\n          .catch(reason => {\n            if (reason instanceof RenderingCancelledException) {\n              return;\n            }\n            console.error(`renderView: \"${reason}\"`);\n          });\n        break;\n    }\n    return true;\n  }\n}\n\nexport { PDFRenderingQueue };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_find_controller\").PDFFindController} PDFFindController */\n\n/**\n * @typedef {Object} TextHighlighterOptions\n * @property {PDFFindController} findController\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n */\n\n/**\n * TextHighlighter handles highlighting matches from the FindController in\n * either the text layer or XFA layer depending on the type of document.\n */\nclass TextHighlighter {\n  /**\n   * @param {TextHighlighterOptions} options\n   */\n  constructor({ findController, eventBus, pageIndex }) {\n    this.findController = findController;\n    this.matches = [];\n    this.eventBus = eventBus;\n    this.pageIdx = pageIndex;\n    this._onUpdateTextLayerMatches = null;\n    this.textDivs = null;\n    this.textContentItemsStr = null;\n    this.enabled = false;\n  }\n\n  /**\n   * Store two arrays that will map DOM nodes to text they should contain.\n   * The arrays should be of equal length and the array element at each index\n   * should correspond to the other. e.g.\n   * `items[0] = \"<span>Item 0</span>\" and texts[0] = \"Item 0\";\n   *\n   * @param {Array<Node>} divs\n   * @param {Array<string>} texts\n   */\n  setTextMapping(divs, texts) {\n    this.textDivs = divs;\n    this.textContentItemsStr = texts;\n  }\n\n  /**\n   * Start listening for events to update the highlighter and check if there are\n   * any current matches that need be highlighted.\n   */\n  enable() {\n    if (!this.textDivs || !this.textContentItemsStr) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    if (this.enabled) {\n      throw new Error(\"TextHighlighter is already enabled.\");\n    }\n    this.enabled = true;\n    if (!this._onUpdateTextLayerMatches) {\n      this._onUpdateTextLayerMatches = evt => {\n        if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n          this._updateMatches();\n        }\n      };\n      this.eventBus._on(\n        \"updatetextlayermatches\",\n        this._onUpdateTextLayerMatches\n      );\n    }\n    this._updateMatches();\n  }\n\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n    if (this._onUpdateTextLayerMatches) {\n      this.eventBus._off(\n        \"updatetextlayermatches\",\n        this._onUpdateTextLayerMatches\n      );\n      this._onUpdateTextLayerMatches = null;\n    }\n  }\n\n  _convertMatches(matches, matchesLength) {\n    // Early exit if there is nothing to convert.\n    if (!matches) {\n      return [];\n    }\n    const { textContentItemsStr } = this;\n\n    let i = 0,\n      iIndex = 0;\n    const end = textContentItemsStr.length - 1;\n    const result = [];\n\n    for (let m = 0, mm = matches.length; m < mm; m++) {\n      // Calculate the start position.\n      let matchIdx = matches[m];\n\n      // Loop over the divIdxs.\n      while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n\n      if (i === textContentItemsStr.length) {\n        console.error(\"Could not find a matching mapping\");\n      }\n\n      const match = {\n        begin: {\n          divIdx: i,\n          offset: matchIdx - iIndex,\n        },\n      };\n\n      // Calculate the end position.\n      matchIdx += matchesLength[m];\n\n      // Somewhat the same array as above, but use > instead of >= to get\n      // the end position right.\n      while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n\n      match.end = {\n        divIdx: i,\n        offset: matchIdx - iIndex,\n      };\n      result.push(match);\n    }\n    return result;\n  }\n\n  _renderMatches(matches) {\n    // Early exit if there is nothing to render.\n    if (matches.length === 0) {\n      return;\n    }\n    const { findController, pageIdx } = this;\n    const { textContentItemsStr, textDivs } = this;\n\n    const isSelectedPage = pageIdx === findController.selected.pageIdx;\n    const selectedMatchIdx = findController.selected.matchIdx;\n    const highlightAll = findController.state.highlightAll;\n    let prevEnd = null;\n    const infinity = {\n      divIdx: -1,\n      offset: undefined,\n    };\n\n    function beginText(begin, className) {\n      const divIdx = begin.divIdx;\n      textDivs[divIdx].textContent = \"\";\n      return appendTextToDiv(divIdx, 0, begin.offset, className);\n    }\n\n    function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n      let div = textDivs[divIdx];\n      if (div.nodeType === Node.TEXT_NODE) {\n        const span = document.createElement(\"span\");\n        div.parentNode.insertBefore(span, div);\n        span.appendChild(div);\n        textDivs[divIdx] = span;\n        div = span;\n      }\n      const content = textContentItemsStr[divIdx].substring(\n        fromOffset,\n        toOffset\n      );\n      const node = document.createTextNode(content);\n      if (className) {\n        const span = document.createElement(\"span\");\n        span.className = `${className} appended`;\n        span.appendChild(node);\n        div.appendChild(span);\n        return className.includes(\"selected\") ? span.offsetLeft : 0;\n      }\n      div.appendChild(node);\n      return 0;\n    }\n\n    let i0 = selectedMatchIdx,\n      i1 = i0 + 1;\n    if (highlightAll) {\n      i0 = 0;\n      i1 = matches.length;\n    } else if (!isSelectedPage) {\n      // Not highlighting all and this isn't the selected page, so do nothing.\n      return;\n    }\n\n    for (let i = i0; i < i1; i++) {\n      const match = matches[i];\n      const begin = match.begin;\n      const end = match.end;\n      const isSelected = isSelectedPage && i === selectedMatchIdx;\n      const highlightSuffix = isSelected ? \" selected\" : \"\";\n      let selectedLeft = 0;\n\n      // Match inside new div.\n      if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n        // If there was a previous div, then add the text at the end.\n        if (prevEnd !== null) {\n          appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n        }\n        // Clear the divs and set the content until the starting point.\n        beginText(begin);\n      } else {\n        appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n      }\n\n      if (begin.divIdx === end.divIdx) {\n        selectedLeft = appendTextToDiv(\n          begin.divIdx,\n          begin.offset,\n          end.offset,\n          \"highlight\" + highlightSuffix\n        );\n      } else {\n        selectedLeft = appendTextToDiv(\n          begin.divIdx,\n          begin.offset,\n          infinity.offset,\n          \"highlight begin\" + highlightSuffix\n        );\n        for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n          textDivs[n0].className = \"highlight middle\" + highlightSuffix;\n        }\n        beginText(end, \"highlight end\" + highlightSuffix);\n      }\n      prevEnd = end;\n\n      if (isSelected) {\n        // Attempt to scroll the selected match into view.\n        findController.scrollMatchIntoView({\n          element: textDivs[begin.divIdx],\n          selectedLeft,\n          pageIndex: pageIdx,\n          matchIndex: selectedMatchIdx,\n        });\n      }\n    }\n\n    if (prevEnd) {\n      appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n    }\n  }\n\n  _updateMatches() {\n    if (!this.enabled) {\n      return;\n    }\n    const { findController, matches, pageIdx } = this;\n    const { textContentItemsStr, textDivs } = this;\n    let clearedUntilDivIdx = -1;\n\n    // Clear all current matches.\n    for (let i = 0, ii = matches.length; i < ii; i++) {\n      const match = matches[i];\n      const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n      for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n        const div = textDivs[n];\n        div.textContent = textContentItemsStr[n];\n        div.className = \"\";\n      }\n      clearedUntilDivIdx = match.end.divIdx + 1;\n    }\n\n    if (!findController?.highlightMatches) {\n      return;\n    }\n    // Convert the matches on the `findController` into the match format\n    // used for the textLayer.\n    const pageMatches = findController.pageMatches[pageIdx] || null;\n    const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\n\n    this.matches = this._convertMatches(pageMatches, pageMatchesLength);\n    this._renderMatches(this.matches);\n  }\n}\n\nexport { TextHighlighter };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n\nimport { createObjectURL, createValidAbsoluteUrl, isPdfFile } from \"pdfjs-lib\";\nimport { compatibilityParams } from \"./app_options.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n  throw new Error(\n    'Module \"pdfjs-web/download_manager\" shall not be used ' +\n      \"outside CHROME and GENERIC builds.\"\n  );\n}\n\nfunction download(blobUrl, filename) {\n  const a = document.createElement(\"a\");\n  if (!a.click) {\n    throw new Error('DownloadManager: \"a.click()\" is not supported.');\n  }\n  a.href = blobUrl;\n  a.target = \"_parent\";\n  // Use a.download if available. This increases the likelihood that\n  // the file is downloaded instead of opened by another PDF plugin.\n  if (\"download\" in a) {\n    a.download = filename;\n  }\n  // <a> must be in the document for recent Firefox versions,\n  // otherwise .click() is ignored.\n  (document.body || document.documentElement).appendChild(a);\n  a.click();\n  a.remove();\n}\n\n/**\n * @implements {IDownloadManager}\n */\nclass DownloadManager {\n  constructor() {\n    this._openBlobUrls = new WeakMap();\n  }\n\n  downloadUrl(url, filename) {\n    if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n      console.error(`downloadUrl - not a valid URL: ${url}`);\n      return; // restricted/invalid URL\n    }\n    download(url + \"#pdfjs.action=download\", filename);\n  }\n\n  downloadData(data, filename, contentType) {\n    const blobUrl = createObjectURL(\n      data,\n      contentType,\n      compatibilityParams.disableCreateObjectURL\n    );\n    download(blobUrl, filename);\n  }\n\n  /**\n   * @returns {boolean} Indicating if the data was opened.\n   */\n  openOrDownloadData(element, data, filename) {\n    const isPdfData = isPdfFile(filename);\n    const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n    if (isPdfData && !compatibilityParams.disableCreateObjectURL) {\n      let blobUrl = this._openBlobUrls.get(element);\n      if (!blobUrl) {\n        blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));\n        this._openBlobUrls.set(element, blobUrl);\n      }\n      let viewerUrl;\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n        // The current URL is the viewer, let's use it and append the file.\n        viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n      } else if (PDFJSDev.test(\"CHROME\")) {\n        // In the Chrome extension, the URL is rewritten using the history API\n        // in viewer.js, so an absolute URL must be generated.\n        viewerUrl =\n          // eslint-disable-next-line no-undef\n          chrome.runtime.getURL(\"/content/web/viewer.html\") +\n          \"?file=\" +\n          encodeURIComponent(blobUrl + \"#\" + filename);\n      }\n\n      try {\n        window.open(viewerUrl);\n        return true;\n      } catch (ex) {\n        console.error(`openOrDownloadData: ${ex}`);\n        // Release the `blobUrl`, since opening it failed, and fallback to\n        // downloading the PDF file.\n        URL.revokeObjectURL(blobUrl);\n        this._openBlobUrls.delete(element);\n      }\n    }\n\n    this.downloadData(data, filename, contentType);\n    return false;\n  }\n\n  /**\n   * @param sourceEventType {string} Used to signal what triggered the download.\n   *   The version of PDF.js integrated with Firefox uses this to to determine\n   *   which dialog to show. \"save\" triggers \"save as\" and \"download\" triggers\n   *   the \"open with\" dialog.\n   */\n  download(blob, url, filename, sourceEventType = \"download\") {\n    if (compatibilityParams.disableCreateObjectURL) {\n      // URL.createObjectURL is not supported\n      this.downloadUrl(url, filename);\n      return;\n    }\n    const blobUrl = URL.createObjectURL(blob);\n    download(blobUrl, filename);\n  }\n}\n\nexport { DownloadManager };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst WaitOnType = {\n  EVENT: \"event\",\n  TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n *   `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n *   timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nfunction waitOnEventOrTimeout({ target, name, delay = 0 }) {\n  return new Promise(function (resolve, reject) {\n    if (\n      typeof target !== \"object\" ||\n      !(name && typeof name === \"string\") ||\n      !(Number.isInteger(delay) && delay >= 0)\n    ) {\n      throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n    }\n\n    function handler(type) {\n      if (target instanceof EventBus) {\n        target._off(name, eventHandler);\n      } else {\n        target.removeEventListener(name, eventHandler);\n      }\n\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      resolve(type);\n    }\n\n    const eventHandler = handler.bind(null, WaitOnType.EVENT);\n    if (target instanceof EventBus) {\n      target._on(name, eventHandler);\n    } else {\n      target.addEventListener(name, eventHandler);\n    }\n\n    const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\n    const timeout = setTimeout(timeoutHandler, delay);\n  });\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n  constructor() {\n    this._listeners = Object.create(null);\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {function} listener\n   * @param {Object} [options]\n   */\n  on(eventName, listener, options = null) {\n    this._on(eventName, listener, {\n      external: true,\n      once: options?.once,\n    });\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {function} listener\n   * @param {Object} [options]\n   */\n  off(eventName, listener, options = null) {\n    this._off(eventName, listener, {\n      external: true,\n      once: options?.once,\n    });\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {Object} data\n   */\n  dispatch(eventName, data) {\n    const eventListeners = this._listeners[eventName];\n    if (!eventListeners || eventListeners.length === 0) {\n      return;\n    }\n    let externalListeners;\n    // Making copy of the listeners array in case if it will be modified\n    // during dispatch.\n    for (const { listener, external, once } of eventListeners.slice(0)) {\n      if (once) {\n        this._off(eventName, listener);\n      }\n      if (external) {\n        (externalListeners ||= []).push(listener);\n        continue;\n      }\n      listener(data);\n    }\n    // Dispatch any \"external\" listeners *after* the internal ones, to give the\n    // viewer components time to handle events and update their state first.\n    if (externalListeners) {\n      for (const listener of externalListeners) {\n        listener(data);\n      }\n      externalListeners = null;\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  _on(eventName, listener, options = null) {\n    const eventListeners = (this._listeners[eventName] ||= []);\n    eventListeners.push({\n      listener,\n      external: options?.external === true,\n      once: options?.once === true,\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  _off(eventName, listener, options = null) {\n    const eventListeners = this._listeners[eventName];\n    if (!eventListeners) {\n      return;\n    }\n    for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n      if (eventListeners[i].listener === listener) {\n        eventListeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n}\n\n/**\n * NOTE: Only used to support various PDF viewer tests in `mozilla-central`.\n */\nclass AutomationEventBus extends EventBus {\n  dispatch(eventName, data) {\n    if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n    }\n    super.dispatch(eventName, data);\n\n    const details = Object.create(null);\n    if (data) {\n      for (const key in data) {\n        const value = data[key];\n        if (key === \"source\") {\n          if (value === window || value === document) {\n            return; // No need to re-dispatch (already) global events.\n          }\n          continue; // Ignore the `source` property.\n        }\n        details[key] = value;\n      }\n    }\n    const event = document.createEvent(\"CustomEvent\");\n    event.initCustomEvent(eventName, true, true, details);\n    document.dispatchEvent(event);\n  }\n}\n\nexport { AutomationEventBus, EventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\nimport \"../external/webL10n/l10n.js\";\nimport { fixupLangCode, getL10nFallback } from \"./l10n_utils.js\";\n\nconst webL10n = document.webL10n;\n\n/**\n * @implements {IL10n}\n */\nclass GenericL10n {\n  constructor(lang) {\n    this._lang = lang;\n    this._ready = new Promise((resolve, reject) => {\n      webL10n.setLanguage(fixupLangCode(lang), () => {\n        resolve(webL10n);\n      });\n    });\n  }\n\n  async getLanguage() {\n    const l10n = await this._ready;\n    return l10n.getLanguage();\n  }\n\n  async getDirection() {\n    const l10n = await this._ready;\n    return l10n.getDirection();\n  }\n\n  async get(key, args = null, fallback = getL10nFallback(key, args)) {\n    const l10n = await this._ready;\n    return l10n.get(key, args, fallback);\n  }\n\n  async translate(element) {\n    const l10n = await this._ready;\n    return l10n.translate(element);\n  }\n}\n\nexport { GenericL10n };\n","/**\n * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/*\n  Additional modifications for PDF.js project:\n    - Disables language initialization on page loading.\n    - Disables document translation on page loading.\n    - Removes consoleWarn and consoleLog and use console.log/warn directly.\n    - Removes window._ assignment.\n    - Remove compatibility code for OldIE.\n    - Replaces `String.prototype.substr()` with `String.prototype.substring()`.\n    - Removes `fireL10nReadyEvent` since the \"localized\" event it dispatches\n      is unused and may clash with an identically named event in the viewer.\n*/\n\n/*jshint browser: true, devel: true, es5: true, globalstrict: true */\n'use strict';\n\ndocument.webL10n = (function(window, document, undefined) {\n  var gL10nData = {};\n  var gTextData = '';\n  var gTextProp = 'textContent';\n  var gLanguage = '';\n  var gMacros = {};\n  var gReadyState = 'loading';\n\n\n  /**\n   * Synchronously loading l10n resources significantly minimizes flickering\n   * from displaying the app with non-localized strings and then updating the\n   * strings. Although this will block all script execution on this page, we\n   * expect that the l10n resources are available locally on flash-storage.\n   *\n   * As synchronous XHR is generally considered as a bad idea, we're still\n   * loading l10n resources asynchronously -- but we keep this in a setting,\n   * just in case... and applications using this library should hide their\n   * content until the `localized' event happens.\n   */\n\n  var gAsyncResourceLoading = true; // read-only\n\n\n  /**\n   * DOM helpers for the so-called \"HTML API\".\n   *\n   * These functions are written for modern browsers. For old versions of IE,\n   * they're overridden in the 'startup' section at the end of this file.\n   */\n\n  function getL10nResourceLinks() {\n    return document.querySelectorAll('link[type=\"application/l10n\"]');\n  }\n\n  function getL10nDictionary() {\n    var script = document.querySelector('script[type=\"application/l10n\"]');\n    // TODO: support multiple and external JSON dictionaries\n    return script ? JSON.parse(script.innerHTML) : null;\n  }\n\n  function getTranslatableChildren(element) {\n    return element ? element.querySelectorAll('*[data-l10n-id]') : [];\n  }\n\n  function getL10nAttributes(element) {\n    if (!element)\n      return {};\n\n    var l10nId = element.getAttribute('data-l10n-id');\n    var l10nArgs = element.getAttribute('data-l10n-args');\n    var args = {};\n    if (l10nArgs) {\n      try {\n        args = JSON.parse(l10nArgs);\n      } catch (e) {\n        console.warn('could not parse arguments for #' + l10nId);\n      }\n    }\n    return { id: l10nId, args: args };\n  }\n\n  function xhrLoadText(url, onSuccess, onFailure) {\n    onSuccess = onSuccess || function _onSuccess(data) {};\n    onFailure = onFailure || function _onFailure() {};\n\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, gAsyncResourceLoading);\n    if (xhr.overrideMimeType) {\n      xhr.overrideMimeType('text/plain; charset=utf-8');\n    }\n    xhr.onreadystatechange = function() {\n      if (xhr.readyState == 4) {\n        if (xhr.status == 200 || xhr.status === 0) {\n          onSuccess(xhr.responseText);\n        } else {\n          onFailure();\n        }\n      }\n    };\n    xhr.onerror = onFailure;\n    xhr.ontimeout = onFailure;\n\n    // in Firefox OS with the app:// protocol, trying to XHR a non-existing\n    // URL will raise an exception here -- hence this ugly try...catch.\n    try {\n      xhr.send(null);\n    } catch (e) {\n      onFailure();\n    }\n  }\n\n\n  /**\n   * l10n resource parser:\n   *  - reads (async XHR) the l10n resource matching `lang';\n   *  - imports linked resources (synchronously) when specified;\n   *  - parses the text data (fills `gL10nData' and `gTextData');\n   *  - triggers success/failure callbacks when done.\n   *\n   * @param {string} href\n   *    URL of the l10n resource to parse.\n   *\n   * @param {string} lang\n   *    locale (language) to parse. Must be a lowercase string.\n   *\n   * @param {Function} successCallback\n   *    triggered when the l10n resource has been successfully parsed.\n   *\n   * @param {Function} failureCallback\n   *    triggered when the an error has occurred.\n   *\n   * @return {void}\n   *    uses the following global variables: gL10nData, gTextData, gTextProp.\n   */\n\n  function parseResource(href, lang, successCallback, failureCallback) {\n    var baseURL = href.replace(/[^\\/]*$/, '') || './';\n\n    // handle escaped characters (backslashes) in a string\n    function evalString(text) {\n      if (text.lastIndexOf('\\\\') < 0)\n        return text;\n      return text.replace(/\\\\\\\\/g, '\\\\')\n                 .replace(/\\\\n/g, '\\n')\n                 .replace(/\\\\r/g, '\\r')\n                 .replace(/\\\\t/g, '\\t')\n                 .replace(/\\\\b/g, '\\b')\n                 .replace(/\\\\f/g, '\\f')\n                 .replace(/\\\\{/g, '{')\n                 .replace(/\\\\}/g, '}')\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/\\\\'/g, \"'\");\n    }\n\n    // parse *.properties text data into an l10n dictionary\n    // If gAsyncResourceLoading is false, then the callback will be called\n    // synchronously. Otherwise it is called asynchronously.\n    function parseProperties(text, parsedPropertiesCallback) {\n      var dictionary = {};\n\n      // token expressions\n      var reBlank = /^\\s*|\\s*$/;\n      var reComment = /^\\s*#|^\\s*$/;\n      var reSection = /^\\s*\\[(.*)\\]\\s*$/;\n      var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\n      var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/; // TODO: escape EOLs with '\\'\n\n      // parse the *.properties file into an associative array\n      function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\n        var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\n        var currentLang = '*';\n        var genericLang = lang.split('-', 1)[0];\n        var skipLang = false;\n        var match = '';\n\n        function nextEntry() {\n          // Use infinite loop instead of recursion to avoid reaching the\n          // maximum recursion limit for content with many lines.\n          while (true) {\n            if (!entries.length) {\n              parsedRawLinesCallback();\n              return;\n            }\n            var line = entries.shift();\n\n            // comment or blank line?\n            if (reComment.test(line))\n              continue;\n\n            // the extended syntax supports [lang] sections and @import rules\n            if (extendedSyntax) {\n              match = reSection.exec(line);\n              if (match) { // section start?\n                // RFC 4646, section 4.4, \"All comparisons MUST be performed\n                // in a case-insensitive manner.\"\n\n                currentLang = match[1].toLowerCase();\n                skipLang = (currentLang !== '*') &&\n                    (currentLang !== lang) && (currentLang !== genericLang);\n                continue;\n              } else if (skipLang) {\n                continue;\n              }\n              match = reImport.exec(line);\n              if (match) { // @import rule?\n                loadImport(baseURL + match[1], nextEntry);\n                return;\n              }\n            }\n\n            // key-value pair\n            var tmp = line.match(reSplit);\n            if (tmp && tmp.length == 3) {\n              dictionary[tmp[1]] = evalString(tmp[2]);\n            }\n          }\n        }\n        nextEntry();\n      }\n\n      // import another *.properties file\n      function loadImport(url, callback) {\n        xhrLoadText(url, function(content) {\n          parseRawLines(content, false, callback); // don't allow recursive imports\n        }, function () {\n          console.warn(url + ' not found.');\n          callback();\n        });\n      }\n\n      // fill the dictionary\n      parseRawLines(text, true, function() {\n        parsedPropertiesCallback(dictionary);\n      });\n    }\n\n    // load and parse l10n data (warning: global variables are used here)\n    xhrLoadText(href, function(response) {\n      gTextData += response; // mostly for debug\n\n      // parse *.properties text data into an l10n dictionary\n      parseProperties(response, function(data) {\n\n        // find attribute descriptions, if any\n        for (var key in data) {\n          var id, prop, index = key.lastIndexOf('.');\n          if (index > 0) { // an attribute has been specified\n            id = key.substring(0, index);\n            prop = key.substring(index + 1);\n          } else { // no attribute: assuming text content by default\n            id = key;\n            prop = gTextProp;\n          }\n          if (!gL10nData[id]) {\n            gL10nData[id] = {};\n          }\n          gL10nData[id][prop] = data[key];\n        }\n\n        // trigger callback\n        if (successCallback) {\n          successCallback();\n        }\n      });\n    }, failureCallback);\n  }\n\n  // load and parse all resources for the specified locale\n  function loadLocale(lang, callback) {\n    // RFC 4646, section 2.1 states that language tags have to be treated as\n    // case-insensitive. Convert to lowercase for case-insensitive comparisons.\n    if (lang) {\n      lang = lang.toLowerCase();\n    }\n\n    callback = callback || function _callback() {};\n\n    clear();\n    gLanguage = lang;\n\n    // check all <link type=\"application/l10n\" href=\"...\" /> nodes\n    // and load the resource files\n    var langLinks = getL10nResourceLinks();\n    var langCount = langLinks.length;\n    if (langCount === 0) {\n      // we might have a pre-compiled dictionary instead\n      var dict = getL10nDictionary();\n      if (dict && dict.locales && dict.default_locale) {\n        console.log('using the embedded JSON directory, early way out');\n        gL10nData = dict.locales[lang];\n        if (!gL10nData) {\n          var defaultLocale = dict.default_locale.toLowerCase();\n          for (var anyCaseLang in dict.locales) {\n            anyCaseLang = anyCaseLang.toLowerCase();\n            if (anyCaseLang === lang) {\n              gL10nData = dict.locales[lang];\n              break;\n            } else if (anyCaseLang === defaultLocale) {\n              gL10nData = dict.locales[defaultLocale];\n            }\n          }\n        }\n        callback();\n      } else {\n        console.log('no resource to load, early way out');\n      }\n      // early way out\n      gReadyState = 'complete';\n      return;\n    }\n\n    // start the callback when all resources are loaded\n    var onResourceLoaded = null;\n    var gResourceCount = 0;\n    onResourceLoaded = function() {\n      gResourceCount++;\n      if (gResourceCount >= langCount) {\n        callback();\n        gReadyState = 'complete';\n      }\n    };\n\n    // load all resource files\n    function L10nResourceLink(link) {\n      var href = link.href;\n      // Note: If |gAsyncResourceLoading| is false, then the following callbacks\n      // are synchronously called.\n      this.load = function(lang, callback) {\n        parseResource(href, lang, callback, function() {\n          console.warn(href + ' not found.');\n          // lang not found, used default resource instead\n          console.warn('\"' + lang + '\" resource not found');\n          gLanguage = '';\n          // Resource not loaded, but we still need to call the callback.\n          callback();\n        });\n      };\n    }\n\n    for (var i = 0; i < langCount; i++) {\n      var resource = new L10nResourceLink(langLinks[i]);\n      resource.load(lang, onResourceLoaded);\n    }\n  }\n\n  // clear all l10n data\n  function clear() {\n    gL10nData = {};\n    gTextData = '';\n    gLanguage = '';\n    // TODO: clear all non predefined macros.\n    // There's no such macro /yet/ but we're planning to have some...\n  }\n\n\n  /**\n   * Get rules for plural forms (shared with JetPack), see:\n   * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n   * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p\n   *\n   * @param {string} lang\n   *    locale (language) used.\n   *\n   * @return {Function}\n   *    returns a function that gives the plural form name for a given integer:\n   *       var fun = getPluralRules('en');\n   *       fun(1)    -> 'one'\n   *       fun(0)    -> 'other'\n   *       fun(1000) -> 'other'.\n   */\n\n  function getPluralRules(lang) {\n    var locales2rules = {\n      'af': 3,\n      'ak': 4,\n      'am': 4,\n      'ar': 1,\n      'asa': 3,\n      'az': 0,\n      'be': 11,\n      'bem': 3,\n      'bez': 3,\n      'bg': 3,\n      'bh': 4,\n      'bm': 0,\n      'bn': 3,\n      'bo': 0,\n      'br': 20,\n      'brx': 3,\n      'bs': 11,\n      'ca': 3,\n      'cgg': 3,\n      'chr': 3,\n      'cs': 12,\n      'cy': 17,\n      'da': 3,\n      'de': 3,\n      'dv': 3,\n      'dz': 0,\n      'ee': 3,\n      'el': 3,\n      'en': 3,\n      'eo': 3,\n      'es': 3,\n      'et': 3,\n      'eu': 3,\n      'fa': 0,\n      'ff': 5,\n      'fi': 3,\n      'fil': 4,\n      'fo': 3,\n      'fr': 5,\n      'fur': 3,\n      'fy': 3,\n      'ga': 8,\n      'gd': 24,\n      'gl': 3,\n      'gsw': 3,\n      'gu': 3,\n      'guw': 4,\n      'gv': 23,\n      'ha': 3,\n      'haw': 3,\n      'he': 2,\n      'hi': 4,\n      'hr': 11,\n      'hu': 0,\n      'id': 0,\n      'ig': 0,\n      'ii': 0,\n      'is': 3,\n      'it': 3,\n      'iu': 7,\n      'ja': 0,\n      'jmc': 3,\n      'jv': 0,\n      'ka': 0,\n      'kab': 5,\n      'kaj': 3,\n      'kcg': 3,\n      'kde': 0,\n      'kea': 0,\n      'kk': 3,\n      'kl': 3,\n      'km': 0,\n      'kn': 0,\n      'ko': 0,\n      'ksb': 3,\n      'ksh': 21,\n      'ku': 3,\n      'kw': 7,\n      'lag': 18,\n      'lb': 3,\n      'lg': 3,\n      'ln': 4,\n      'lo': 0,\n      'lt': 10,\n      'lv': 6,\n      'mas': 3,\n      'mg': 4,\n      'mk': 16,\n      'ml': 3,\n      'mn': 3,\n      'mo': 9,\n      'mr': 3,\n      'ms': 0,\n      'mt': 15,\n      'my': 0,\n      'nah': 3,\n      'naq': 7,\n      'nb': 3,\n      'nd': 3,\n      'ne': 3,\n      'nl': 3,\n      'nn': 3,\n      'no': 3,\n      'nr': 3,\n      'nso': 4,\n      'ny': 3,\n      'nyn': 3,\n      'om': 3,\n      'or': 3,\n      'pa': 3,\n      'pap': 3,\n      'pl': 13,\n      'ps': 3,\n      'pt': 3,\n      'rm': 3,\n      'ro': 9,\n      'rof': 3,\n      'ru': 11,\n      'rwk': 3,\n      'sah': 0,\n      'saq': 3,\n      'se': 7,\n      'seh': 3,\n      'ses': 0,\n      'sg': 0,\n      'sh': 11,\n      'shi': 19,\n      'sk': 12,\n      'sl': 14,\n      'sma': 7,\n      'smi': 7,\n      'smj': 7,\n      'smn': 7,\n      'sms': 7,\n      'sn': 3,\n      'so': 3,\n      'sq': 3,\n      'sr': 11,\n      'ss': 3,\n      'ssy': 3,\n      'st': 3,\n      'sv': 3,\n      'sw': 3,\n      'syr': 3,\n      'ta': 3,\n      'te': 3,\n      'teo': 3,\n      'th': 0,\n      'ti': 4,\n      'tig': 3,\n      'tk': 3,\n      'tl': 4,\n      'tn': 3,\n      'to': 0,\n      'tr': 0,\n      'ts': 3,\n      'tzm': 22,\n      'uk': 11,\n      'ur': 3,\n      've': 3,\n      'vi': 0,\n      'vun': 3,\n      'wa': 4,\n      'wae': 3,\n      'wo': 0,\n      'xh': 3,\n      'xog': 3,\n      'yo': 0,\n      'zh': 0,\n      'zu': 3\n    };\n\n    // utility functions for plural rules methods\n    function isIn(n, list) {\n      return list.indexOf(n) !== -1;\n    }\n    function isBetween(n, start, end) {\n      return start <= n && n <= end;\n    }\n\n    // list of all plural rules methods:\n    // map an integer to the plural form name to use\n    var pluralRules = {\n      '0': function(n) {\n        return 'other';\n      },\n      '1': function(n) {\n        if ((isBetween((n % 100), 3, 10)))\n          return 'few';\n        if (n === 0)\n          return 'zero';\n        if ((isBetween((n % 100), 11, 99)))\n          return 'many';\n        if (n == 2)\n          return 'two';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '2': function(n) {\n        if (n !== 0 && (n % 10) === 0)\n          return 'many';\n        if (n == 2)\n          return 'two';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '3': function(n) {\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '4': function(n) {\n        if ((isBetween(n, 0, 1)))\n          return 'one';\n        return 'other';\n      },\n      '5': function(n) {\n        if ((isBetween(n, 0, 2)) && n != 2)\n          return 'one';\n        return 'other';\n      },\n      '6': function(n) {\n        if (n === 0)\n          return 'zero';\n        if ((n % 10) == 1 && (n % 100) != 11)\n          return 'one';\n        return 'other';\n      },\n      '7': function(n) {\n        if (n == 2)\n          return 'two';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '8': function(n) {\n        if ((isBetween(n, 3, 6)))\n          return 'few';\n        if ((isBetween(n, 7, 10)))\n          return 'many';\n        if (n == 2)\n          return 'two';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '9': function(n) {\n        if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))\n          return 'few';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '10': function(n) {\n        if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))\n          return 'few';\n        if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))\n          return 'one';\n        return 'other';\n      },\n      '11': function(n) {\n        if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n          return 'few';\n        if ((n % 10) === 0 ||\n            (isBetween((n % 10), 5, 9)) ||\n            (isBetween((n % 100), 11, 14)))\n          return 'many';\n        if ((n % 10) == 1 && (n % 100) != 11)\n          return 'one';\n        return 'other';\n      },\n      '12': function(n) {\n        if ((isBetween(n, 2, 4)))\n          return 'few';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '13': function(n) {\n        if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n          return 'few';\n        if (n != 1 && (isBetween((n % 10), 0, 1)) ||\n            (isBetween((n % 10), 5, 9)) ||\n            (isBetween((n % 100), 12, 14)))\n          return 'many';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '14': function(n) {\n        if ((isBetween((n % 100), 3, 4)))\n          return 'few';\n        if ((n % 100) == 2)\n          return 'two';\n        if ((n % 100) == 1)\n          return 'one';\n        return 'other';\n      },\n      '15': function(n) {\n        if (n === 0 || (isBetween((n % 100), 2, 10)))\n          return 'few';\n        if ((isBetween((n % 100), 11, 19)))\n          return 'many';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '16': function(n) {\n        if ((n % 10) == 1 && n != 11)\n          return 'one';\n        return 'other';\n      },\n      '17': function(n) {\n        if (n == 3)\n          return 'few';\n        if (n === 0)\n          return 'zero';\n        if (n == 6)\n          return 'many';\n        if (n == 2)\n          return 'two';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '18': function(n) {\n        if (n === 0)\n          return 'zero';\n        if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)\n          return 'one';\n        return 'other';\n      },\n      '19': function(n) {\n        if ((isBetween(n, 2, 10)))\n          return 'few';\n        if ((isBetween(n, 0, 1)))\n          return 'one';\n        return 'other';\n      },\n      '20': function(n) {\n        if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(\n            isBetween((n % 100), 10, 19) ||\n            isBetween((n % 100), 70, 79) ||\n            isBetween((n % 100), 90, 99)\n            ))\n          return 'few';\n        if ((n % 1000000) === 0 && n !== 0)\n          return 'many';\n        if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))\n          return 'two';\n        if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))\n          return 'one';\n        return 'other';\n      },\n      '21': function(n) {\n        if (n === 0)\n          return 'zero';\n        if (n == 1)\n          return 'one';\n        return 'other';\n      },\n      '22': function(n) {\n        if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))\n          return 'one';\n        return 'other';\n      },\n      '23': function(n) {\n        if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)\n          return 'one';\n        return 'other';\n      },\n      '24': function(n) {\n        if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))\n          return 'few';\n        if (isIn(n, [2, 12]))\n          return 'two';\n        if (isIn(n, [1, 11]))\n          return 'one';\n        return 'other';\n      }\n    };\n\n    // return a function that gives the plural form name for a given integer\n    var index = locales2rules[lang.replace(/-.*$/, '')];\n    if (!(index in pluralRules)) {\n      console.warn('plural form unknown for [' + lang + ']');\n      return function() { return 'other'; };\n    }\n    return pluralRules[index];\n  }\n\n  // pre-defined 'plural' macro\n  gMacros.plural = function(str, param, key, prop) {\n    var n = parseFloat(param);\n    if (isNaN(n))\n      return str;\n\n    // TODO: support other properties (l20n still doesn't...)\n    if (prop != gTextProp)\n      return str;\n\n    // initialize _pluralRules\n    if (!gMacros._pluralRules) {\n      gMacros._pluralRules = getPluralRules(gLanguage);\n    }\n    var index = '[' + gMacros._pluralRules(n) + ']';\n\n    // try to find a [zero|one|two] key if it's defined\n    if (n === 0 && (key + '[zero]') in gL10nData) {\n      str = gL10nData[key + '[zero]'][prop];\n    } else if (n == 1 && (key + '[one]') in gL10nData) {\n      str = gL10nData[key + '[one]'][prop];\n    } else if (n == 2 && (key + '[two]') in gL10nData) {\n      str = gL10nData[key + '[two]'][prop];\n    } else if ((key + index) in gL10nData) {\n      str = gL10nData[key + index][prop];\n    } else if ((key + '[other]') in gL10nData) {\n      str = gL10nData[key + '[other]'][prop];\n    }\n\n    return str;\n  };\n\n\n  /**\n   * l10n dictionary functions\n   */\n\n  // fetch an l10n object, warn if not found, apply `args' if possible\n  function getL10nData(key, args, fallback) {\n    var data = gL10nData[key];\n    if (!data) {\n      console.warn('#' + key + ' is undefined.');\n      if (!fallback) {\n        return null;\n      }\n      data = fallback;\n    }\n\n    /** This is where l10n expressions should be processed.\n      * The plan is to support C-style expressions from the l20n project;\n      * until then, only two kinds of simple expressions are supported:\n      *   {[ index ]} and {{ arguments }}.\n      */\n    var rv = {};\n    for (var prop in data) {\n      var str = data[prop];\n      str = substIndexes(str, args, key, prop);\n      str = substArguments(str, args, key);\n      rv[prop] = str;\n    }\n    return rv;\n  }\n\n  // replace {[macros]} with their values\n  function substIndexes(str, args, key, prop) {\n    var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\n    var reMatch = reIndex.exec(str);\n    if (!reMatch || !reMatch.length)\n      return str;\n\n    // an index/macro has been found\n    // Note: at the moment, only one parameter is supported\n    var macroName = reMatch[1];\n    var paramName = reMatch[2];\n    var param;\n    if (args && paramName in args) {\n      param = args[paramName];\n    } else if (paramName in gL10nData) {\n      param = gL10nData[paramName];\n    }\n\n    // there's no macro parser yet: it has to be defined in gMacros\n    if (macroName in gMacros) {\n      var macro = gMacros[macroName];\n      str = macro(str, param, key, prop);\n    }\n    return str;\n  }\n\n  // replace {{arguments}} with their values\n  function substArguments(str, args, key) {\n    var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n    return str.replace(reArgs, function(matched_text, arg) {\n      if (args && arg in args) {\n        return args[arg];\n      }\n      if (arg in gL10nData) {\n        return gL10nData[arg];\n      }\n      console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\n      return matched_text;\n    });\n  }\n\n  // translate an HTML element\n  function translateElement(element) {\n    var l10n = getL10nAttributes(element);\n    if (!l10n.id)\n      return;\n\n    // get the related l10n object\n    var data = getL10nData(l10n.id, l10n.args);\n    if (!data) {\n      console.warn('#' + l10n.id + ' is undefined.');\n      return;\n    }\n\n    // translate element (TODO: security checks?)\n    if (data[gTextProp]) { // XXX\n      if (getChildElementCount(element) === 0) {\n        element[gTextProp] = data[gTextProp];\n      } else {\n        // this element has element children: replace the content of the first\n        // (non-empty) child textNode and clear other child textNodes\n        var children = element.childNodes;\n        var found = false;\n        for (var i = 0, l = children.length; i < l; i++) {\n          if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\n            if (found) {\n              children[i].nodeValue = '';\n            } else {\n              children[i].nodeValue = data[gTextProp];\n              found = true;\n            }\n          }\n        }\n        // if no (non-empty) textNode is found, insert a textNode before the\n        // first element child.\n        if (!found) {\n          var textNode = document.createTextNode(data[gTextProp]);\n          element.insertBefore(textNode, element.firstChild);\n        }\n      }\n      delete data[gTextProp];\n    }\n\n    for (var k in data) {\n      element[k] = data[k];\n    }\n  }\n\n  // webkit browsers don't currently support 'children' on SVG elements...\n  function getChildElementCount(element) {\n    if (element.children) {\n      return element.children.length;\n    }\n    if (typeof element.childElementCount !== 'undefined') {\n      return element.childElementCount;\n    }\n    var count = 0;\n    for (var i = 0; i < element.childNodes.length; i++) {\n      count += element.nodeType === 1 ? 1 : 0;\n    }\n    return count;\n  }\n\n  // translate an HTML subtree\n  function translateFragment(element) {\n    element = element || document.documentElement;\n\n    // check all translatable children (= w/ a `data-l10n-id' attribute)\n    var children = getTranslatableChildren(element);\n    var elementCount = children.length;\n    for (var i = 0; i < elementCount; i++) {\n      translateElement(children[i]);\n    }\n\n    // translate element itself if necessary\n    translateElement(element);\n  }\n\n  return {\n    // get a localized string\n    get: function(key, args, fallbackString) {\n      var index = key.lastIndexOf('.');\n      var prop = gTextProp;\n      if (index > 0) { // An attribute has been specified\n        prop = key.substring(index + 1);\n        key = key.substring(0, index);\n      }\n      var fallback;\n      if (fallbackString) {\n        fallback = {};\n        fallback[prop] = fallbackString;\n      }\n      var data = getL10nData(key, args, fallback);\n      if (data && prop in data) {\n        return data[prop];\n      }\n      return '{{' + key + '}}';\n    },\n\n    // debug\n    getData: function() { return gL10nData; },\n    getText: function() { return gTextData; },\n\n    // get|set the document language\n    getLanguage: function() { return gLanguage; },\n    setLanguage: function(lang, callback) {\n      loadLocale(lang, function() {\n        if (callback)\n          callback();\n      });\n    },\n\n    // get the direction (ltr|rtl) of the current language\n    getDirection: function() {\n      // http://www.w3.org/International/questions/qa-scripts\n      // Arabic, Hebrew, Farsi, Pashto, Urdu\n      var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\n      var shortCode = gLanguage.split('-', 1)[0];\n      return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr';\n    },\n\n    // translate an element or document fragment\n    translate: translateFragment,\n\n    // this can be used to prevent race conditions\n    getReadyState: function() { return gReadyState; },\n    ready: function(callback) {\n      if (!callback) {\n        return;\n      } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\n        window.setTimeout(function() {\n          callback();\n        });\n      } else if (document.addEventListener) {\n        document.addEventListener('localized', function once() {\n          document.removeEventListener('localized', once);\n          callback();\n        });\n      }\n    }\n  };\n}) (window, document);\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { createPromiseCapability } from \"pdfjs-lib\";\nimport { getCharacterType } from \"./pdf_find_utils.js\";\nimport { scrollIntoView } from \"./ui_utils.js\";\n\nconst FindState = {\n  FOUND: 0,\n  NOT_FOUND: 1,\n  WRAPPED: 2,\n  PENDING: 3,\n};\n\nconst FIND_TIMEOUT = 250; // ms\nconst MATCH_SCROLL_OFFSET_TOP = -50; // px\nconst MATCH_SCROLL_OFFSET_LEFT = -400; // px\n\nconst CHARACTERS_TO_NORMALIZE = {\n  \"\\u2010\": \"-\", // Hyphen\n  \"\\u2018\": \"'\", // Left single quotation mark\n  \"\\u2019\": \"'\", // Right single quotation mark\n  \"\\u201A\": \"'\", // Single low-9 quotation mark\n  \"\\u201B\": \"'\", // Single high-reversed-9 quotation mark\n  \"\\u201C\": '\"', // Left double quotation mark\n  \"\\u201D\": '\"', // Right double quotation mark\n  \"\\u201E\": '\"', // Double low-9 quotation mark\n  \"\\u201F\": '\"', // Double high-reversed-9 quotation mark\n  \"\\u00BC\": \"1/4\", // Vulgar fraction one quarter\n  \"\\u00BD\": \"1/2\", // Vulgar fraction one half\n  \"\\u00BE\": \"3/4\", // Vulgar fraction three quarters\n};\n\nlet normalizationRegex = null;\nfunction normalize(text) {\n  if (!normalizationRegex) {\n    // Compile the regular expression for text normalization once.\n    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\n    normalizationRegex = new RegExp(`[${replace}]`, \"g\");\n  }\n  let diffs = null;\n  const normalizedText = text.replace(normalizationRegex, function (ch, index) {\n    const normalizedCh = CHARACTERS_TO_NORMALIZE[ch],\n      diff = normalizedCh.length - ch.length;\n    if (diff !== 0) {\n      (diffs ||= []).push([index, diff]);\n    }\n    return normalizedCh;\n  });\n\n  return [normalizedText, diffs];\n}\n\n// Determine the original, non-normalized, match index such that highlighting of\n// search results is correct in the `textLayer` for strings containing e.g. \"½\"\n// characters; essentially \"inverting\" the result of the `normalize` function.\nfunction getOriginalIndex(matchIndex, diffs = null) {\n  if (!diffs) {\n    return matchIndex;\n  }\n  let totalDiff = 0;\n  for (const [index, diff] of diffs) {\n    const currentIndex = index + totalDiff;\n\n    if (currentIndex >= matchIndex) {\n      break;\n    }\n    if (currentIndex + diff > matchIndex) {\n      totalDiff += matchIndex - currentIndex;\n      break;\n    }\n    totalDiff += diff;\n  }\n  return matchIndex - totalDiff;\n}\n\n/**\n * @typedef {Object} PDFFindControllerOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n  /**\n   * @param {PDFFindControllerOptions} options\n   */\n  constructor({ linkService, eventBus }) {\n    this._linkService = linkService;\n    this._eventBus = eventBus;\n\n    this._reset();\n    eventBus._on(\"find\", this._onFind.bind(this));\n    eventBus._on(\"findbarclose\", this._onFindBarClose.bind(this));\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this.executeCommand = (cmd, state) => {\n        console.error(\n          \"Deprecated method `PDFFindController.executeCommand` called, \" +\n            'please dispatch a \"find\"-event using the EventBus instead.'\n        );\n\n        const eventState = Object.assign(Object.create(null), state, {\n          type: cmd.substring(\"find\".length),\n        });\n        this._onFind(eventState);\n      };\n    }\n  }\n\n  get highlightMatches() {\n    return this._highlightMatches;\n  }\n\n  get pageMatches() {\n    return this._pageMatches;\n  }\n\n  get pageMatchesLength() {\n    return this._pageMatchesLength;\n  }\n\n  get selected() {\n    return this._selected;\n  }\n\n  get state() {\n    return this._state;\n  }\n\n  /**\n   * Set a reference to the PDF document in order to search it.\n   * Note that searching is not possible if this method is not called.\n   *\n   * @param {PDFDocumentProxy} pdfDocument - The PDF document to search.\n   */\n  setDocument(pdfDocument) {\n    if (this._pdfDocument) {\n      this._reset();\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this._pdfDocument = pdfDocument;\n    this._firstPageCapability.resolve();\n  }\n\n  /**\n   * @private\n   */\n  _onFind(state) {\n    if (!state) {\n      return;\n    }\n    const pdfDocument = this._pdfDocument;\n    const { type } = state;\n\n    if (this._state === null || this._shouldDirtyMatch(state)) {\n      this._dirtyMatch = true;\n    }\n    this._state = state;\n    if (type !== \"highlightallchange\") {\n      this._updateUIState(FindState.PENDING);\n    }\n\n    this._firstPageCapability.promise.then(() => {\n      // If the document was closed before searching began, or if the search\n      // operation was relevant for a previously opened document, do nothing.\n      if (\n        !this._pdfDocument ||\n        (pdfDocument && this._pdfDocument !== pdfDocument)\n      ) {\n        return;\n      }\n      this._extractText();\n\n      const findbarClosed = !this._highlightMatches;\n      const pendingTimeout = !!this._findTimeout;\n\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      if (!type) {\n        // Trigger the find action with a small delay to avoid starting the\n        // search when the user is still typing (saving resources).\n        this._findTimeout = setTimeout(() => {\n          this._nextMatch();\n          this._findTimeout = null;\n        }, FIND_TIMEOUT);\n      } else if (this._dirtyMatch) {\n        // Immediately trigger searching for non-'find' operations, when the\n        // current state needs to be reset and matches re-calculated.\n        this._nextMatch();\n      } else if (type === \"again\") {\n        this._nextMatch();\n\n        // When the findbar was previously closed, and `highlightAll` is set,\n        // ensure that the matches on all active pages are highlighted again.\n        if (findbarClosed && this._state.highlightAll) {\n          this._updateAllPages();\n        }\n      } else if (type === \"highlightallchange\") {\n        // If there was a pending search operation, synchronously trigger a new\n        // search *first* to ensure that the correct matches are highlighted.\n        if (pendingTimeout) {\n          this._nextMatch();\n        } else {\n          this._highlightMatches = true;\n        }\n        this._updateAllPages(); // Update the highlighting on all active pages.\n      } else {\n        this._nextMatch();\n      }\n    });\n  }\n\n  scrollMatchIntoView({\n    element = null,\n    selectedLeft = 0,\n    pageIndex = -1,\n    matchIndex = -1,\n  }) {\n    if (!this._scrollMatches || !element) {\n      return;\n    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\n      return;\n    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\n      return;\n    }\n    this._scrollMatches = false; // Ensure that scrolling only happens once.\n\n    const spot = {\n      top: MATCH_SCROLL_OFFSET_TOP,\n      left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT,\n    };\n    scrollIntoView(element, spot, /* scrollMatches = */ true);\n  }\n\n  _reset() {\n    this._highlightMatches = false;\n    this._scrollMatches = false;\n    this._pdfDocument = null;\n    this._pageMatches = [];\n    this._pageMatchesLength = [];\n    this._state = null;\n    // Currently selected match.\n    this._selected = {\n      pageIdx: -1,\n      matchIdx: -1,\n    };\n    // Where the find algorithm currently is in the document.\n    this._offset = {\n      pageIdx: null,\n      matchIdx: null,\n      wrapped: false,\n    };\n    this._extractTextPromises = [];\n    this._pageContents = []; // Stores the normalized text for each page.\n    this._pageDiffs = [];\n    this._matchesCountTotal = 0;\n    this._pagesToSearch = null;\n    this._pendingFindMatches = new Set();\n    this._resumePageIdx = null;\n    this._dirtyMatch = false;\n    clearTimeout(this._findTimeout);\n    this._findTimeout = null;\n\n    this._firstPageCapability = createPromiseCapability();\n  }\n\n  /**\n   * @type {string} The (current) normalized search query.\n   */\n  get _query() {\n    if (this._state.query !== this._rawQuery) {\n      this._rawQuery = this._state.query;\n      [this._normalizedQuery] = normalize(this._state.query);\n    }\n    return this._normalizedQuery;\n  }\n\n  _shouldDirtyMatch(state) {\n    // When the search query changes, regardless of the actual search command\n    // used, always re-calculate matches to avoid errors (fixes bug 1030622).\n    if (state.query !== this._state.query) {\n      return true;\n    }\n    switch (state.type) {\n      case \"again\":\n        const pageNumber = this._selected.pageIdx + 1;\n        const linkService = this._linkService;\n        // Only treat a 'findagain' event as a new search operation when it's\n        // *absolutely* certain that the currently selected match is no longer\n        // visible, e.g. as a result of the user scrolling in the document.\n        //\n        // NOTE: If only a simple `this._linkService.page` check was used here,\n        // there's a risk that consecutive 'findagain' operations could \"skip\"\n        // over matches at the top/bottom of pages thus making them completely\n        // inaccessible when there's multiple pages visible in the viewer.\n        if (\n          pageNumber >= 1 &&\n          pageNumber <= linkService.pagesCount &&\n          pageNumber !== linkService.page &&\n          !linkService.isPageVisible(pageNumber)\n        ) {\n          return true;\n        }\n        return false;\n      case \"highlightallchange\":\n        return false;\n    }\n    return true;\n  }\n\n  /**\n   * Helper for multi-term search that fills the `matchesWithLength` array\n   * and handles cases where one search term includes another search term (for\n   * example, \"tamed tame\" or \"this is\"). It looks for intersecting terms in\n   * the `matches` and keeps elements with a longer match length.\n   */\n  _prepareMatches(matchesWithLength, matches, matchesLength) {\n    function isSubTerm(currentIndex) {\n      const currentElem = matchesWithLength[currentIndex];\n      const nextElem = matchesWithLength[currentIndex + 1];\n\n      // Check for cases like \"TAMEd TAME\".\n      if (\n        currentIndex < matchesWithLength.length - 1 &&\n        currentElem.match === nextElem.match\n      ) {\n        currentElem.skipped = true;\n        return true;\n      }\n\n      // Check for cases like \"thIS IS\".\n      for (let i = currentIndex - 1; i >= 0; i--) {\n        const prevElem = matchesWithLength[i];\n        if (prevElem.skipped) {\n          continue;\n        }\n        if (prevElem.match + prevElem.matchLength < currentElem.match) {\n          break;\n        }\n        if (\n          prevElem.match + prevElem.matchLength >=\n          currentElem.match + currentElem.matchLength\n        ) {\n          currentElem.skipped = true;\n          return true;\n        }\n      }\n      return false;\n    }\n\n    // Sort the array of `{ match: <match>, matchLength: <matchLength> }`\n    // objects on increasing index first and on the length otherwise.\n    matchesWithLength.sort(function (a, b) {\n      return a.match === b.match\n        ? a.matchLength - b.matchLength\n        : a.match - b.match;\n    });\n    for (let i = 0, len = matchesWithLength.length; i < len; i++) {\n      if (isSubTerm(i)) {\n        continue;\n      }\n      matches.push(matchesWithLength[i].match);\n      matchesLength.push(matchesWithLength[i].matchLength);\n    }\n  }\n\n  /**\n   * Determine if the search query constitutes a \"whole word\", by comparing the\n   * first/last character type with the preceding/following character type.\n   */\n  _isEntireWord(content, startIdx, length) {\n    if (startIdx > 0) {\n      const first = content.charCodeAt(startIdx);\n      const limit = content.charCodeAt(startIdx - 1);\n      if (getCharacterType(first) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n    const endIdx = startIdx + length - 1;\n    if (endIdx < content.length - 1) {\n      const last = content.charCodeAt(endIdx);\n      const limit = content.charCodeAt(endIdx + 1);\n      if (getCharacterType(last) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {\n    const matches = [],\n      matchesLength = [];\n    const queryLen = query.length;\n\n    let matchIdx = -queryLen;\n    while (true) {\n      matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\n      if (matchIdx === -1) {\n        break;\n      }\n      if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {\n        continue;\n      }\n      const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),\n        matchEnd = matchIdx + queryLen - 1,\n        originalQueryLen =\n          getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;\n\n      matches.push(originalMatchIdx);\n      matchesLength.push(originalQueryLen);\n    }\n    this._pageMatches[pageIndex] = matches;\n    this._pageMatchesLength[pageIndex] = matchesLength;\n  }\n\n  _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {\n    const matchesWithLength = [];\n\n    // Divide the query into pieces and search for text in each piece.\n    const queryArray = query.match(/\\S+/g);\n    for (let i = 0, len = queryArray.length; i < len; i++) {\n      const subquery = queryArray[i];\n      const subqueryLen = subquery.length;\n\n      let matchIdx = -subqueryLen;\n      while (true) {\n        matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);\n        if (matchIdx === -1) {\n          break;\n        }\n        if (\n          entireWord &&\n          !this._isEntireWord(pageContent, matchIdx, subqueryLen)\n        ) {\n          continue;\n        }\n        const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),\n          matchEnd = matchIdx + subqueryLen - 1,\n          originalQueryLen =\n            getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;\n\n        // Other searches do not, so we store the length.\n        matchesWithLength.push({\n          match: originalMatchIdx,\n          matchLength: originalQueryLen,\n          skipped: false,\n        });\n      }\n    }\n\n    // Prepare arrays for storing the matches.\n    this._pageMatchesLength[pageIndex] = [];\n    this._pageMatches[pageIndex] = [];\n\n    // Sort `matchesWithLength`, remove intersecting terms and put the result\n    // into the two arrays.\n    this._prepareMatches(\n      matchesWithLength,\n      this._pageMatches[pageIndex],\n      this._pageMatchesLength[pageIndex]\n    );\n  }\n\n  _calculateMatch(pageIndex) {\n    let pageContent = this._pageContents[pageIndex];\n    const pageDiffs = this._pageDiffs[pageIndex];\n    let query = this._query;\n    const { caseSensitive, entireWord, phraseSearch } = this._state;\n\n    if (query.length === 0) {\n      // Do nothing: the matches should be wiped out already.\n      return;\n    }\n\n    if (!caseSensitive) {\n      pageContent = pageContent.toLowerCase();\n      query = query.toLowerCase();\n    }\n\n    if (phraseSearch) {\n      this._calculatePhraseMatch(\n        query,\n        pageIndex,\n        pageContent,\n        pageDiffs,\n        entireWord\n      );\n    } else {\n      this._calculateWordMatch(\n        query,\n        pageIndex,\n        pageContent,\n        pageDiffs,\n        entireWord\n      );\n    }\n\n    // When `highlightAll` is set, ensure that the matches on previously\n    // rendered (and still active) pages are correctly highlighted.\n    if (this._state.highlightAll) {\n      this._updatePage(pageIndex);\n    }\n    if (this._resumePageIdx === pageIndex) {\n      this._resumePageIdx = null;\n      this._nextPageMatch();\n    }\n\n    // Update the match count.\n    const pageMatchesCount = this._pageMatches[pageIndex].length;\n    if (pageMatchesCount > 0) {\n      this._matchesCountTotal += pageMatchesCount;\n      this._updateUIResultsCount();\n    }\n  }\n\n  _extractText() {\n    // Perform text extraction once if this method is called multiple times.\n    if (this._extractTextPromises.length > 0) {\n      return;\n    }\n\n    let promise = Promise.resolve();\n    for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n      const extractTextCapability = createPromiseCapability();\n      this._extractTextPromises[i] = extractTextCapability.promise;\n\n      promise = promise.then(() => {\n        return this._pdfDocument\n          .getPage(i + 1)\n          .then(pdfPage => {\n            return pdfPage.getTextContent({\n              normalizeWhitespace: true,\n            });\n          })\n          .then(\n            textContent => {\n              const textItems = textContent.items;\n              const strBuf = [];\n\n              for (let j = 0, jj = textItems.length; j < jj; j++) {\n                strBuf.push(textItems[j].str);\n              }\n\n              // Store the normalized page content (text items) as one string.\n              [this._pageContents[i], this._pageDiffs[i]] = normalize(\n                strBuf.join(\"\")\n              );\n              extractTextCapability.resolve(i);\n            },\n            reason => {\n              console.error(\n                `Unable to get text content for page ${i + 1}`,\n                reason\n              );\n              // Page error -- assuming no text content.\n              this._pageContents[i] = \"\";\n              this._pageDiffs[i] = null;\n              extractTextCapability.resolve(i);\n            }\n          );\n      });\n    }\n  }\n\n  _updatePage(index) {\n    if (this._scrollMatches && this._selected.pageIdx === index) {\n      // If the page is selected, scroll the page into view, which triggers\n      // rendering the page, which adds the text layer. Once the text layer\n      // is built, it will attempt to scroll the selected match into view.\n      this._linkService.page = index + 1;\n    }\n\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: index,\n    });\n  }\n\n  _updateAllPages() {\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: -1,\n    });\n  }\n\n  _nextMatch() {\n    const previous = this._state.findPrevious;\n    const currentPageIndex = this._linkService.page - 1;\n    const numPages = this._linkService.pagesCount;\n\n    this._highlightMatches = true;\n\n    if (this._dirtyMatch) {\n      // Need to recalculate the matches, reset everything.\n      this._dirtyMatch = false;\n      this._selected.pageIdx = this._selected.matchIdx = -1;\n      this._offset.pageIdx = currentPageIndex;\n      this._offset.matchIdx = null;\n      this._offset.wrapped = false;\n      this._resumePageIdx = null;\n      this._pageMatches.length = 0;\n      this._pageMatchesLength.length = 0;\n      this._matchesCountTotal = 0;\n\n      this._updateAllPages(); // Wipe out any previously highlighted matches.\n\n      for (let i = 0; i < numPages; i++) {\n        // Start finding the matches as soon as the text is extracted.\n        if (this._pendingFindMatches.has(i)) {\n          continue;\n        }\n        this._pendingFindMatches.add(i);\n        this._extractTextPromises[i].then(pageIdx => {\n          this._pendingFindMatches.delete(pageIdx);\n          this._calculateMatch(pageIdx);\n        });\n      }\n    }\n\n    // If there's no query there's no point in searching.\n    if (this._query === \"\") {\n      this._updateUIState(FindState.FOUND);\n      return;\n    }\n    // If we're waiting on a page, we return since we can't do anything else.\n    if (this._resumePageIdx) {\n      return;\n    }\n\n    const offset = this._offset;\n    // Keep track of how many pages we should maximally iterate through.\n    this._pagesToSearch = numPages;\n    // If there's already a `matchIdx` that means we are iterating through a\n    // page's matches.\n    if (offset.matchIdx !== null) {\n      const numPageMatches = this._pageMatches[offset.pageIdx].length;\n      if (\n        (!previous && offset.matchIdx + 1 < numPageMatches) ||\n        (previous && offset.matchIdx > 0)\n      ) {\n        // The simple case; we just have advance the matchIdx to select\n        // the next match on the page.\n        offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\n        this._updateMatch(/* found = */ true);\n        return;\n      }\n      // We went beyond the current page's matches, so we advance to\n      // the next page.\n      this._advanceOffsetPage(previous);\n    }\n    // Start searching through the page.\n    this._nextPageMatch();\n  }\n\n  _matchesReady(matches) {\n    const offset = this._offset;\n    const numMatches = matches.length;\n    const previous = this._state.findPrevious;\n\n    if (numMatches) {\n      // There were matches for the page, so initialize `matchIdx`.\n      offset.matchIdx = previous ? numMatches - 1 : 0;\n      this._updateMatch(/* found = */ true);\n      return true;\n    }\n    // No matches, so attempt to search the next page.\n    this._advanceOffsetPage(previous);\n    if (offset.wrapped) {\n      offset.matchIdx = null;\n      if (this._pagesToSearch < 0) {\n        // No point in wrapping again, there were no matches.\n        this._updateMatch(/* found = */ false);\n        // While matches were not found, searching for a page\n        // with matches should nevertheless halt.\n        return true;\n      }\n    }\n    // Matches were not found (and searching is not done).\n    return false;\n  }\n\n  _nextPageMatch() {\n    if (this._resumePageIdx !== null) {\n      console.error(\"There can only be one pending page.\");\n    }\n\n    let matches = null;\n    do {\n      const pageIdx = this._offset.pageIdx;\n      matches = this._pageMatches[pageIdx];\n      if (!matches) {\n        // The matches don't exist yet for processing by `_matchesReady`,\n        // so set a resume point for when they do exist.\n        this._resumePageIdx = pageIdx;\n        break;\n      }\n    } while (!this._matchesReady(matches));\n  }\n\n  _advanceOffsetPage(previous) {\n    const offset = this._offset;\n    const numPages = this._linkService.pagesCount;\n    offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\n    offset.matchIdx = null;\n\n    this._pagesToSearch--;\n\n    if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n      offset.pageIdx = previous ? numPages - 1 : 0;\n      offset.wrapped = true;\n    }\n  }\n\n  _updateMatch(found = false) {\n    let state = FindState.NOT_FOUND;\n    const wrapped = this._offset.wrapped;\n    this._offset.wrapped = false;\n\n    if (found) {\n      const previousPage = this._selected.pageIdx;\n      this._selected.pageIdx = this._offset.pageIdx;\n      this._selected.matchIdx = this._offset.matchIdx;\n      state = wrapped ? FindState.WRAPPED : FindState.FOUND;\n\n      // Update the currently selected page to wipe out any selected matches.\n      if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\n        this._updatePage(previousPage);\n      }\n    }\n\n    this._updateUIState(state, this._state.findPrevious);\n    if (this._selected.pageIdx !== -1) {\n      // Ensure that the match will be scrolled into view.\n      this._scrollMatches = true;\n\n      this._updatePage(this._selected.pageIdx);\n    }\n  }\n\n  _onFindBarClose(evt) {\n    const pdfDocument = this._pdfDocument;\n    // Since searching is asynchronous, ensure that the removal of highlighted\n    // matches (from the UI) is async too such that the 'updatetextlayermatches'\n    // events will always be dispatched in the expected order.\n    this._firstPageCapability.promise.then(() => {\n      // Only update the UI if the document is open, and is the current one.\n      if (\n        !this._pdfDocument ||\n        (pdfDocument && this._pdfDocument !== pdfDocument)\n      ) {\n        return;\n      }\n      // Ensure that a pending, not yet started, search operation is aborted.\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      // Abort any long running searches, to avoid a match being scrolled into\n      // view *after* the findbar has been closed. In this case `this._offset`\n      // will most likely differ from `this._selected`, hence we also ensure\n      // that any new search operation will always start with a clean slate.\n      if (this._resumePageIdx) {\n        this._resumePageIdx = null;\n        this._dirtyMatch = true;\n      }\n      // Avoid the UI being in a pending state when the findbar is re-opened.\n      this._updateUIState(FindState.FOUND);\n\n      this._highlightMatches = false;\n      this._updateAllPages(); // Wipe out any previously highlighted matches.\n    });\n  }\n\n  _requestMatchesCount() {\n    const { pageIdx, matchIdx } = this._selected;\n    let current = 0,\n      total = this._matchesCountTotal;\n    if (matchIdx !== -1) {\n      for (let i = 0; i < pageIdx; i++) {\n        current += this._pageMatches[i]?.length || 0;\n      }\n      current += matchIdx + 1;\n    }\n    // When searching starts, this method may be called before the `pageMatches`\n    // have been counted (in `_calculateMatch`). Ensure that the UI won't show\n    // temporarily broken state when the active find result doesn't make sense.\n    if (current < 1 || current > total) {\n      current = total = 0;\n    }\n    return { current, total };\n  }\n\n  _updateUIResultsCount() {\n    this._eventBus.dispatch(\"updatefindmatchescount\", {\n      source: this,\n      matchesCount: this._requestMatchesCount(),\n    });\n  }\n\n  _updateUIState(state, previous = false) {\n    this._eventBus.dispatch(\"updatefindcontrolstate\", {\n      source: this,\n      state,\n      previous,\n      matchesCount: this._requestMatchesCount(),\n      rawQuery: this._state?.query ?? null,\n    });\n  }\n}\n\nexport { FindState, PDFFindController };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CharacterType = {\n  SPACE: 0,\n  ALPHA_LETTER: 1,\n  PUNCT: 2,\n  HAN_LETTER: 3,\n  KATAKANA_LETTER: 4,\n  HIRAGANA_LETTER: 5,\n  HALFWIDTH_KATAKANA_LETTER: 6,\n  THAI_LETTER: 7,\n};\n\nfunction isAlphabeticalScript(charCode) {\n  return charCode < 0x2e80;\n}\n\nfunction isAscii(charCode) {\n  return (charCode & 0xff80) === 0;\n}\n\nfunction isAsciiAlpha(charCode) {\n  return (\n    (charCode >= /* a = */ 0x61 && charCode <= /* z = */ 0x7a) ||\n    (charCode >= /* A = */ 0x41 && charCode <= /* Z = */ 0x5a)\n  );\n}\n\nfunction isAsciiDigit(charCode) {\n  return charCode >= /* 0 = */ 0x30 && charCode <= /* 9 = */ 0x39;\n}\n\nfunction isAsciiSpace(charCode) {\n  return (\n    charCode === /* SPACE = */ 0x20 ||\n    charCode === /* TAB = */ 0x09 ||\n    charCode === /* CR = */ 0x0d ||\n    charCode === /* LF = */ 0x0a\n  );\n}\n\nfunction isHan(charCode) {\n  return (\n    (charCode >= 0x3400 && charCode <= 0x9fff) ||\n    (charCode >= 0xf900 && charCode <= 0xfaff)\n  );\n}\n\nfunction isKatakana(charCode) {\n  return charCode >= 0x30a0 && charCode <= 0x30ff;\n}\n\nfunction isHiragana(charCode) {\n  return charCode >= 0x3040 && charCode <= 0x309f;\n}\n\nfunction isHalfwidthKatakana(charCode) {\n  return charCode >= 0xff60 && charCode <= 0xff9f;\n}\n\nfunction isThai(charCode) {\n  return (charCode & 0xff80) === 0x0e00;\n}\n\n/**\n * This function is based on the word-break detection implemented in:\n * https://hg.mozilla.org/mozilla-central/file/tip/intl/lwbrk/WordBreaker.cpp\n */\nfunction getCharacterType(charCode) {\n  if (isAlphabeticalScript(charCode)) {\n    if (isAscii(charCode)) {\n      if (isAsciiSpace(charCode)) {\n        return CharacterType.SPACE;\n      } else if (\n        isAsciiAlpha(charCode) ||\n        isAsciiDigit(charCode) ||\n        charCode === /* UNDERSCORE = */ 0x5f\n      ) {\n        return CharacterType.ALPHA_LETTER;\n      }\n      return CharacterType.PUNCT;\n    } else if (isThai(charCode)) {\n      return CharacterType.THAI_LETTER;\n    } else if (charCode === /* NBSP = */ 0xa0) {\n      return CharacterType.SPACE;\n    }\n    return CharacterType.ALPHA_LETTER;\n  }\n\n  if (isHan(charCode)) {\n    return CharacterType.HAN_LETTER;\n  } else if (isKatakana(charCode)) {\n    return CharacterType.KATAKANA_LETTER;\n  } else if (isHiragana(charCode)) {\n    return CharacterType.HIRAGANA_LETTER;\n  } else if (isHalfwidthKatakana(charCode)) {\n    return CharacterType.HALFWIDTH_KATAKANA_LETTER;\n  }\n  return CharacterType.ALPHA_LETTER;\n}\n\nexport { CharacterType, getCharacterType };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport {\n  isValidRotation,\n  parseQueryString,\n  PresentationModeState,\n} from \"./ui_utils.js\";\nimport { waitOnEventOrTimeout } from \"./event_utils.js\";\n\n// Heuristic value used when force-resetting `this._blockHashChange`.\nconst HASH_CHANGE_TIMEOUT = 1000; // milliseconds\n// Heuristic value used when adding the current position to the browser history.\nconst POSITION_UPDATED_THRESHOLD = 50;\n// Heuristic value used when adding a temporary position to the browser history.\nconst UPDATE_VIEWAREA_TIMEOUT = 1000; // milliseconds\n\n/**\n * @typedef {Object} PDFHistoryOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} InitializeParameters\n * @property {string} fingerprint - The PDF document's unique fingerprint.\n * @property {boolean} [resetHistory] - Reset the browsing history.\n * @property {boolean} [updateUrl] - Attempt to update the document URL, with\n *   the current hash, when pushing/replacing browser history entries.\n */\n\n/**\n * @typedef {Object} PushParameters\n * @property {string} [namedDest] - The named destination. If absent, a\n *   stringified version of `explicitDest` is used.\n * @property {Array} explicitDest - The explicit destination array.\n * @property {number} pageNumber - The page to which the destination points.\n */\n\nfunction getCurrentHash() {\n  return document.location.hash;\n}\n\nclass PDFHistory {\n  /**\n   * @param {PDFHistoryOptions} options\n   */\n  constructor({ linkService, eventBus }) {\n    this.linkService = linkService;\n    this.eventBus = eventBus;\n\n    this._initialized = false;\n    this._fingerprint = \"\";\n    this.reset();\n\n    this._boundEvents = null;\n    this._isViewerInPresentationMode = false;\n    // Ensure that we don't miss either a 'presentationmodechanged' or a\n    // 'pagesinit' event, by registering the listeners immediately.\n    this.eventBus._on(\"presentationmodechanged\", evt => {\n      this._isViewerInPresentationMode =\n        evt.state !== PresentationModeState.NORMAL;\n    });\n    this.eventBus._on(\"pagesinit\", () => {\n      this._isPagesLoaded = false;\n\n      this.eventBus._on(\n        \"pagesloaded\",\n        evt => {\n          this._isPagesLoaded = !!evt.pagesCount;\n        },\n        { once: true }\n      );\n    });\n  }\n\n  /**\n   * Initialize the history for the PDF document, using either the current\n   * browser history entry or the document hash, whichever is present.\n   * @param {InitializeParameters} params\n   */\n  initialize({ fingerprint, resetHistory = false, updateUrl = false }) {\n    if (!fingerprint || typeof fingerprint !== \"string\") {\n      console.error(\n        'PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.'\n      );\n      return;\n    }\n    // Ensure that any old state is always reset upon initialization.\n    if (this._initialized) {\n      this.reset();\n    }\n    const reInitialized =\n      this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\n    this._fingerprint = fingerprint;\n    this._updateUrl = updateUrl === true;\n\n    this._initialized = true;\n    this._bindEvents();\n    const state = window.history.state;\n\n    this._popStateInProgress = false;\n    this._blockHashChange = 0;\n    this._currentHash = getCurrentHash();\n    this._numPositionUpdates = 0;\n\n    this._uid = this._maxUid = 0;\n    this._destination = null;\n    this._position = null;\n\n    if (!this._isValidState(state, /* checkReload = */ true) || resetHistory) {\n      const { hash, page, rotation } = this._parseCurrentHash(\n        /* checkNameddest = */ true\n      );\n\n      if (!hash || reInitialized || resetHistory) {\n        // Ensure that the browser history is reset on PDF document load.\n        this._pushOrReplaceState(null, /* forceReplace = */ true);\n        return;\n      }\n      // Ensure that the browser history is initialized correctly when\n      // the document hash is present on PDF document load.\n      this._pushOrReplaceState(\n        { hash, page, rotation },\n        /* forceReplace = */ true\n      );\n      return;\n    }\n\n    // The browser history contains a valid entry, ensure that the history is\n    // initialized correctly on PDF document load.\n    const destination = state.destination;\n    this._updateInternalState(\n      destination,\n      state.uid,\n      /* removeTemporary = */ true\n    );\n\n    if (destination.rotation !== undefined) {\n      this._initialRotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this._initialBookmark = JSON.stringify(destination.dest);\n\n      // If the history is updated, e.g. through the user changing the hash,\n      // before the initial destination has become visible, then we do *not*\n      // want to potentially add `this._position` to the browser history.\n      this._destination.page = null;\n    } else if (destination.hash) {\n      this._initialBookmark = destination.hash;\n    } else if (destination.page) {\n      // Fallback case; shouldn't be necessary, but better safe than sorry.\n      this._initialBookmark = `page=${destination.page}`;\n    }\n  }\n\n  /**\n   * Reset the current `PDFHistory` instance, and consequently prevent any\n   * further updates and/or navigation of the browser history.\n   */\n  reset() {\n    if (this._initialized) {\n      this._pageHide(); // Simulate a 'pagehide' event when resetting.\n\n      this._initialized = false;\n      this._unbindEvents();\n    }\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._initialBookmark = null;\n    this._initialRotation = null;\n  }\n\n  /**\n   * Push an internal destination to the browser history.\n   * @param {PushParameters}\n   */\n  push({ namedDest = null, explicitDest, pageNumber }) {\n    if (!this._initialized) {\n      return;\n    }\n    if (namedDest && typeof namedDest !== \"string\") {\n      console.error(\n        \"PDFHistory.push: \" +\n          `\"${namedDest}\" is not a valid namedDest parameter.`\n      );\n      return;\n    } else if (!Array.isArray(explicitDest)) {\n      console.error(\n        \"PDFHistory.push: \" +\n          `\"${explicitDest}\" is not a valid explicitDest parameter.`\n      );\n      return;\n    } else if (!this._isValidPage(pageNumber)) {\n      // Allow an unset `pageNumber` if and only if the history is still empty;\n      // please refer to the `this._destination.page = null;` comment above.\n      if (pageNumber !== null || this._destination) {\n        console.error(\n          \"PDFHistory.push: \" +\n            `\"${pageNumber}\" is not a valid pageNumber parameter.`\n        );\n        return;\n      }\n    }\n\n    const hash = namedDest || JSON.stringify(explicitDest);\n    if (!hash) {\n      // The hash *should* never be undefined, but if that were to occur,\n      // avoid any possible issues by not updating the browser history.\n      return;\n    }\n\n    let forceReplace = false;\n    if (\n      this._destination &&\n      (isDestHashesEqual(this._destination.hash, hash) ||\n        isDestArraysEqual(this._destination.dest, explicitDest))\n    ) {\n      // When the new destination is identical to `this._destination`, and\n      // its `page` is undefined, replace the current browser history entry.\n      // NOTE: This can only occur if `this._destination` was set either:\n      //  - through the document hash being specified on load.\n      //  - through the user changing the hash of the document.\n      if (this._destination.page) {\n        return;\n      }\n      forceReplace = true;\n    }\n    if (this._popStateInProgress && !forceReplace) {\n      return;\n    }\n\n    this._pushOrReplaceState(\n      {\n        dest: explicitDest,\n        hash,\n        page: pageNumber,\n        rotation: this.linkService.rotation,\n      },\n      forceReplace\n    );\n\n    if (!this._popStateInProgress) {\n      // Prevent the browser history from updating while the new destination is\n      // being scrolled into view, to avoid potentially inconsistent state.\n      this._popStateInProgress = true;\n      // We defer the resetting of `this._popStateInProgress`, to account for\n      // e.g. zooming occurring when the new destination is being navigated to.\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n\n  /**\n   * Push a page to the browser history; generally the `push` method should be\n   * used instead.\n   * @param {number} pageNumber\n   */\n  pushPage(pageNumber) {\n    if (!this._initialized) {\n      return;\n    }\n    if (!this._isValidPage(pageNumber)) {\n      console.error(\n        `PDFHistory.pushPage: \"${pageNumber}\" is not a valid page number.`\n      );\n      return;\n    }\n\n    if (this._destination?.page === pageNumber) {\n      // When the new page is identical to the one in `this._destination`, we\n      // don't want to add a potential duplicate entry in the browser history.\n      return;\n    }\n    if (this._popStateInProgress) {\n      return;\n    }\n\n    this._pushOrReplaceState({\n      // Simulate an internal destination, for `this._tryPushCurrentPosition`:\n      dest: null,\n      hash: `page=${pageNumber}`,\n      page: pageNumber,\n      rotation: this.linkService.rotation,\n    });\n\n    if (!this._popStateInProgress) {\n      // Prevent the browser history from updating while the new page is\n      // being scrolled into view, to avoid potentially inconsistent state.\n      this._popStateInProgress = true;\n      // We defer the resetting of `this._popStateInProgress`, to account for\n      // e.g. zooming occurring when the new page is being navigated to.\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n\n  /**\n   * Push the current position to the browser history.\n   */\n  pushCurrentPosition() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    this._tryPushCurrentPosition();\n  }\n\n  /**\n   * Go back one step in the browser history.\n   * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n   */\n  back() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this._isValidState(state) && state.uid > 0) {\n      window.history.back();\n    }\n  }\n\n  /**\n   * Go forward one step in the browser history.\n   * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n   */\n  forward() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this._isValidState(state) && state.uid < this._maxUid) {\n      window.history.forward();\n    }\n  }\n\n  /**\n   * @type {boolean} Indicating if the user is currently moving through the\n   *   browser history, useful e.g. for skipping the next 'hashchange' event.\n   */\n  get popStateInProgress() {\n    return (\n      this._initialized &&\n      (this._popStateInProgress || this._blockHashChange > 0)\n    );\n  }\n\n  get initialBookmark() {\n    return this._initialized ? this._initialBookmark : null;\n  }\n\n  get initialRotation() {\n    return this._initialized ? this._initialRotation : null;\n  }\n\n  /**\n   * @private\n   */\n  _pushOrReplaceState(destination, forceReplace = false) {\n    const shouldReplace = forceReplace || !this._destination;\n    const newState = {\n      fingerprint: this._fingerprint,\n      uid: shouldReplace ? this._uid : this._uid + 1,\n      destination,\n    };\n\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"CHROME\") &&\n      window.history.state?.chromecomState\n    ) {\n      // history.state.chromecomState is managed by chromecom.js.\n      newState.chromecomState = window.history.state.chromecomState;\n    }\n    this._updateInternalState(destination, newState.uid);\n\n    let newUrl;\n    if (this._updateUrl && destination?.hash) {\n      const baseUrl = document.location.href.split(\"#\")[0];\n      // Prevent errors in Firefox.\n      if (!baseUrl.startsWith(\"file://\")) {\n        newUrl = `${baseUrl}#${destination.hash}`;\n      }\n    }\n    if (shouldReplace) {\n      window.history.replaceState(newState, \"\", newUrl);\n    } else {\n      window.history.pushState(newState, \"\", newUrl);\n    }\n\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"CHROME\") &&\n      top === window\n    ) {\n      // eslint-disable-next-line no-undef\n      chrome.runtime.sendMessage(\"showPageAction\");\n    }\n  }\n\n  /**\n   * @private\n   */\n  _tryPushCurrentPosition(temporary = false) {\n    if (!this._position) {\n      return;\n    }\n    let position = this._position;\n    if (temporary) {\n      position = Object.assign(Object.create(null), this._position);\n      position.temporary = true;\n    }\n\n    if (!this._destination) {\n      this._pushOrReplaceState(position);\n      return;\n    }\n    if (this._destination.temporary) {\n      // Always replace a previous *temporary* position.\n      this._pushOrReplaceState(position, /* forceReplace = */ true);\n      return;\n    }\n    if (this._destination.hash === position.hash) {\n      return; // The current document position has not changed.\n    }\n    if (\n      !this._destination.page &&\n      (POSITION_UPDATED_THRESHOLD <= 0 ||\n        this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)\n    ) {\n      // `this._destination` was set through the user changing the hash of\n      // the document. Do not add `this._position` to the browser history,\n      // to avoid \"flooding\" it with lots of (nearly) identical entries,\n      // since we cannot ensure that the document position has changed.\n      return;\n    }\n\n    let forceReplace = false;\n    if (\n      this._destination.page >= position.first &&\n      this._destination.page <= position.page\n    ) {\n      // When the `page` of `this._destination` is still visible, do not\n      // update the browsing history when `this._destination` either:\n      //  - contains an internal destination, since in this case we\n      //    cannot ensure that the document position has actually changed.\n      //  - was set through the user changing the hash of the document.\n      if (this._destination.dest !== undefined || !this._destination.first) {\n        return;\n      }\n      // To avoid \"flooding\" the browser history, replace the current entry.\n      forceReplace = true;\n    }\n    this._pushOrReplaceState(position, forceReplace);\n  }\n\n  /**\n   * @private\n   */\n  _isValidPage(val) {\n    return (\n      Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount\n    );\n  }\n\n  /**\n   * @private\n   */\n  _isValidState(state, checkReload = false) {\n    if (!state) {\n      return false;\n    }\n    if (state.fingerprint !== this._fingerprint) {\n      if (checkReload) {\n        // Potentially accept the history entry, even if the fingerprints don't\n        // match, when the viewer was reloaded (see issue 6847).\n        if (\n          typeof state.fingerprint !== \"string\" ||\n          state.fingerprint.length !== this._fingerprint.length\n        ) {\n          return false;\n        }\n        const [perfEntry] = performance.getEntriesByType(\"navigation\");\n        if (perfEntry?.type !== \"reload\") {\n          return false;\n        }\n      } else {\n        // This should only occur in viewers with support for opening more than\n        // one PDF document, e.g. the GENERIC viewer.\n        return false;\n      }\n    }\n    if (!Number.isInteger(state.uid) || state.uid < 0) {\n      return false;\n    }\n    if (state.destination === null || typeof state.destination !== \"object\") {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * @private\n   */\n  _updateInternalState(destination, uid, removeTemporary = false) {\n    if (this._updateViewareaTimeout) {\n      // When updating `this._destination`, make sure that we always wait for\n      // the next 'updateviewarea' event before (potentially) attempting to\n      // push the current position to the browser history.\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    if (removeTemporary && destination?.temporary) {\n      // When the `destination` comes from the browser history,\n      // we no longer treat it as a *temporary* position.\n      delete destination.temporary;\n    }\n    this._destination = destination;\n    this._uid = uid;\n    this._maxUid = Math.max(this._maxUid, uid);\n    // This should always be reset when `this._destination` is updated.\n    this._numPositionUpdates = 0;\n  }\n\n  /**\n   * @private\n   */\n  _parseCurrentHash(checkNameddest = false) {\n    const hash = unescape(getCurrentHash()).substring(1);\n    const params = parseQueryString(hash);\n\n    const nameddest = params.get(\"nameddest\") || \"\";\n    let page = params.get(\"page\") | 0;\n\n    if (!this._isValidPage(page) || (checkNameddest && nameddest.length > 0)) {\n      page = null;\n    }\n    return { hash, page, rotation: this.linkService.rotation };\n  }\n\n  /**\n   * @private\n   */\n  _updateViewarea({ location }) {\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n\n    this._position = {\n      hash: this._isViewerInPresentationMode\n        ? `page=${location.pageNumber}`\n        : location.pdfOpenParams.substring(1),\n      page: this.linkService.page,\n      first: location.pageNumber,\n      rotation: location.rotation,\n    };\n\n    if (this._popStateInProgress) {\n      return;\n    }\n\n    if (\n      POSITION_UPDATED_THRESHOLD > 0 &&\n      this._isPagesLoaded &&\n      this._destination &&\n      !this._destination.page\n    ) {\n      // If the current destination was set through the user changing the hash\n      // of the document, we will usually not try to push the current position\n      // to the browser history; see `this._tryPushCurrentPosition()`.\n      //\n      // To prevent `this._tryPushCurrentPosition()` from effectively being\n      // reduced to a no-op in this case, we will assume that the position\n      // *did* in fact change if the 'updateviewarea' event was dispatched\n      // more than `POSITION_UPDATED_THRESHOLD` times.\n      this._numPositionUpdates++;\n    }\n\n    if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n      // When closing the browser, a 'pagehide' event will be dispatched which\n      // *should* allow us to push the current position to the browser history.\n      // In practice, it seems that the event is arriving too late in order for\n      // the session history to be successfully updated.\n      // (For additional details, please refer to the discussion in\n      //  https://bugzilla.mozilla.org/show_bug.cgi?id=1153393.)\n      //\n      // To workaround this we attempt to *temporarily* add the current position\n      // to the browser history only when the viewer is *idle*,\n      // i.e. when scrolling and/or zooming does not occur.\n      //\n      // PLEASE NOTE: It's absolutely imperative that the browser history is\n      // *not* updated too often, since that would render the viewer more or\n      // less unusable. Hence the use of a timeout to delay the update until\n      // the viewer has been idle for `UPDATE_VIEWAREA_TIMEOUT` milliseconds.\n      this._updateViewareaTimeout = setTimeout(() => {\n        if (!this._popStateInProgress) {\n          this._tryPushCurrentPosition(/* temporary = */ true);\n        }\n        this._updateViewareaTimeout = null;\n      }, UPDATE_VIEWAREA_TIMEOUT);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _popState({ state }) {\n    const newHash = getCurrentHash(),\n      hashChanged = this._currentHash !== newHash;\n    this._currentHash = newHash;\n\n    if (\n      (typeof PDFJSDev !== \"undefined\" &&\n        PDFJSDev.test(\"CHROME\") &&\n        state?.chromecomState &&\n        !this._isValidState(state)) ||\n      !state\n    ) {\n      // This case corresponds to the user changing the hash of the document.\n      this._uid++;\n\n      const { hash, page, rotation } = this._parseCurrentHash();\n      this._pushOrReplaceState(\n        { hash, page, rotation },\n        /* forceReplace = */ true\n      );\n      return;\n    }\n    if (!this._isValidState(state)) {\n      // This should only occur in viewers with support for opening more than\n      // one PDF document, e.g. the GENERIC viewer.\n      return;\n    }\n\n    // Prevent the browser history from updating until the new destination,\n    // as stored in the browser history, has been scrolled into view.\n    this._popStateInProgress = true;\n\n    if (hashChanged) {\n      // When the hash changed, implying that the 'popstate' event will be\n      // followed by a 'hashchange' event, then we do *not* want to update the\n      // browser history when handling the 'hashchange' event (in web/app.js)\n      // since that would *overwrite* the new destination navigated to below.\n      //\n      // To avoid accidentally disabling all future user-initiated hash changes,\n      // if there's e.g. another 'hashchange' listener that stops the event\n      // propagation, we make sure to always force-reset `this._blockHashChange`\n      // after `HASH_CHANGE_TIMEOUT` milliseconds have passed.\n      this._blockHashChange++;\n      waitOnEventOrTimeout({\n        target: window,\n        name: \"hashchange\",\n        delay: HASH_CHANGE_TIMEOUT,\n      }).then(() => {\n        this._blockHashChange--;\n      });\n    }\n\n    // Navigate to the new destination.\n    const destination = state.destination;\n    this._updateInternalState(\n      destination,\n      state.uid,\n      /* removeTemporary = */ true\n    );\n\n    if (isValidRotation(destination.rotation)) {\n      this.linkService.rotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this.linkService.goToDestination(destination.dest);\n    } else if (destination.hash) {\n      this.linkService.setHash(destination.hash);\n    } else if (destination.page) {\n      // Fallback case; shouldn't be necessary, but better safe than sorry.\n      this.linkService.page = destination.page;\n    }\n\n    // Since `PDFLinkService.goToDestination` is asynchronous, we thus defer the\n    // resetting of `this._popStateInProgress` slightly.\n    Promise.resolve().then(() => {\n      this._popStateInProgress = false;\n    });\n  }\n\n  /**\n   * @private\n   */\n  _pageHide() {\n    // Attempt to push the `this._position` into the browser history when\n    // navigating away from the document. This is *only* done if the history\n    // is empty/temporary, since otherwise an existing browser history entry\n    // will end up being overwritten (given that new entries cannot be pushed\n    // into the browser history when the 'unload' event has already fired).\n    if (!this._destination || this._destination.temporary) {\n      this._tryPushCurrentPosition();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _bindEvents() {\n    if (this._boundEvents) {\n      return; // The event listeners were already added.\n    }\n    this._boundEvents = {\n      updateViewarea: this._updateViewarea.bind(this),\n      popState: this._popState.bind(this),\n      pageHide: this._pageHide.bind(this),\n    };\n\n    this.eventBus._on(\"updateviewarea\", this._boundEvents.updateViewarea);\n    window.addEventListener(\"popstate\", this._boundEvents.popState);\n    window.addEventListener(\"pagehide\", this._boundEvents.pageHide);\n  }\n\n  /**\n   * @private\n   */\n  _unbindEvents() {\n    if (!this._boundEvents) {\n      return; // The event listeners were already removed.\n    }\n    this.eventBus._off(\"updateviewarea\", this._boundEvents.updateViewarea);\n    window.removeEventListener(\"popstate\", this._boundEvents.popState);\n    window.removeEventListener(\"pagehide\", this._boundEvents.pageHide);\n\n    this._boundEvents = null;\n  }\n}\n\nfunction isDestHashesEqual(destHash, pushHash) {\n  if (typeof destHash !== \"string\" || typeof pushHash !== \"string\") {\n    return false;\n  }\n  if (destHash === pushHash) {\n    return true;\n  }\n  const nameddest = parseQueryString(destHash).get(\"nameddest\");\n  if (nameddest === pushHash) {\n    return true;\n  }\n  return false;\n}\n\nfunction isDestArraysEqual(firstDest, secondDest) {\n  function isEntryEqual(first, second) {\n    if (typeof first !== typeof second) {\n      return false;\n    }\n    if (Array.isArray(first) || Array.isArray(second)) {\n      return false;\n    }\n    if (first !== null && typeof first === \"object\" && second !== null) {\n      if (Object.keys(first).length !== Object.keys(second).length) {\n        return false;\n      }\n      for (const key in first) {\n        if (!isEntryEqual(first[key], second[key])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return first === second || (Number.isNaN(first) && Number.isNaN(second));\n  }\n\n  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\n    return false;\n  }\n  if (firstDest.length !== secondDest.length) {\n    return false;\n  }\n  for (let i = 0, ii = firstDest.length; i < ii; i++) {\n    if (!isEntryEqual(firstDest[i], secondDest[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport { isDestArraysEqual, isDestHashesEqual, PDFHistory };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n\nimport { apiPageLayoutToViewerModes, RenderingStates } from \"./ui_utils.js\";\nimport { createPromiseCapability, shadow } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PDFScriptingManagerOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {string} sandboxBundleSrc - The path and filename of the scripting\n *   bundle.\n * @property {Object} [scriptingFactory] - The factory that is used when\n *   initializing scripting; must contain a `createScripting` method.\n *   PLEASE NOTE: Primarily intended for the default viewer use-case.\n * @property {function} [docPropertiesLookup] - The function that is used to\n *   lookup the necessary document properties.\n */\n\nclass PDFScriptingManager {\n  /**\n   * @param {PDFScriptingManagerOptions} options\n   */\n  constructor({\n    eventBus,\n    sandboxBundleSrc = null,\n    scriptingFactory = null,\n    docPropertiesLookup = null,\n  }) {\n    this._pdfDocument = null;\n    this._pdfViewer = null;\n    this._closeCapability = null;\n    this._destroyCapability = null;\n\n    this._scripting = null;\n    this._mouseState = Object.create(null);\n    this._ready = false;\n\n    this._eventBus = eventBus;\n    this._sandboxBundleSrc = sandboxBundleSrc;\n    this._scriptingFactory = scriptingFactory;\n    this._docPropertiesLookup = docPropertiesLookup;\n\n    // The default viewer already handles adding/removing of DOM events,\n    // hence limit this to only the viewer components.\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"COMPONENTS\") &&\n      !this._scriptingFactory\n    ) {\n      window.addEventListener(\"updatefromsandbox\", event => {\n        this._eventBus.dispatch(\"updatefromsandbox\", {\n          source: window,\n          detail: event.detail,\n        });\n      });\n    }\n  }\n\n  setViewer(pdfViewer) {\n    this._pdfViewer = pdfViewer;\n  }\n\n  async setDocument(pdfDocument) {\n    if (this._pdfDocument) {\n      await this._destroyScripting();\n    }\n    this._pdfDocument = pdfDocument;\n\n    if (!pdfDocument) {\n      return;\n    }\n    const [objects, calculationOrder, docActions] = await Promise.all([\n      pdfDocument.getFieldObjects(),\n      pdfDocument.getCalculationOrderIds(),\n      pdfDocument.getJSActions(),\n    ]);\n\n    if (!objects && !docActions) {\n      // No FieldObjects or JavaScript actions were found in the document.\n      await this._destroyScripting();\n      return;\n    }\n    if (pdfDocument !== this._pdfDocument) {\n      return; // The document was closed while the data resolved.\n    }\n    try {\n      this._scripting = this._createScripting();\n    } catch (error) {\n      console.error(`PDFScriptingManager.setDocument: \"${error?.message}\".`);\n\n      await this._destroyScripting();\n      return;\n    }\n\n    this._internalEvents.set(\"updatefromsandbox\", event => {\n      if (event?.source !== window) {\n        return;\n      }\n      this._updateFromSandbox(event.detail);\n    });\n    this._internalEvents.set(\"dispatcheventinsandbox\", event => {\n      this._scripting?.dispatchEventInSandbox(event.detail);\n    });\n\n    this._internalEvents.set(\"pagechanging\", ({ pageNumber, previous }) => {\n      if (pageNumber === previous) {\n        return; // The current page didn't change.\n      }\n      this._dispatchPageClose(previous);\n      this._dispatchPageOpen(pageNumber);\n    });\n    this._internalEvents.set(\"pagerendered\", ({ pageNumber }) => {\n      if (!this._pageOpenPending.has(pageNumber)) {\n        return; // No pending \"PageOpen\" event for the newly rendered page.\n      }\n      if (pageNumber !== this._pdfViewer.currentPageNumber) {\n        return; // The newly rendered page is no longer the current one.\n      }\n      this._dispatchPageOpen(pageNumber);\n    });\n    this._internalEvents.set(\"pagesdestroy\", async event => {\n      await this._dispatchPageClose(this._pdfViewer.currentPageNumber);\n\n      await this._scripting?.dispatchEventInSandbox({\n        id: \"doc\",\n        name: \"WillClose\",\n      });\n\n      this._closeCapability?.resolve();\n    });\n\n    this._domEvents.set(\"mousedown\", event => {\n      this._mouseState.isDown = true;\n    });\n    this._domEvents.set(\"mouseup\", event => {\n      this._mouseState.isDown = false;\n    });\n\n    for (const [name, listener] of this._internalEvents) {\n      this._eventBus._on(name, listener);\n    }\n    for (const [name, listener] of this._domEvents) {\n      window.addEventListener(name, listener);\n    }\n\n    try {\n      const docProperties = await this._getDocProperties();\n      if (pdfDocument !== this._pdfDocument) {\n        return; // The document was closed while the properties resolved.\n      }\n\n      await this._scripting.createSandbox({\n        objects,\n        calculationOrder,\n        appInfo: {\n          platform: navigator.platform,\n          language: navigator.language,\n        },\n        docInfo: {\n          ...docProperties,\n          actions: docActions,\n        },\n      });\n\n      this._eventBus.dispatch(\"sandboxcreated\", { source: this });\n    } catch (error) {\n      console.error(`PDFScriptingManager.setDocument: \"${error?.message}\".`);\n\n      await this._destroyScripting();\n      return;\n    }\n\n    await this._scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"Open\",\n    });\n    await this._dispatchPageOpen(\n      this._pdfViewer.currentPageNumber,\n      /* initialize = */ true\n    );\n\n    // Defer this slightly, to ensure that scripting is *fully* initialized.\n    Promise.resolve().then(() => {\n      if (pdfDocument === this._pdfDocument) {\n        this._ready = true;\n      }\n    });\n  }\n\n  async dispatchWillSave(detail) {\n    return this._scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"WillSave\",\n    });\n  }\n\n  async dispatchDidSave(detail) {\n    return this._scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidSave\",\n    });\n  }\n\n  async dispatchWillPrint(detail) {\n    return this._scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"WillPrint\",\n    });\n  }\n\n  async dispatchDidPrint(detail) {\n    return this._scripting?.dispatchEventInSandbox({\n      id: \"doc\",\n      name: \"DidPrint\",\n    });\n  }\n\n  get mouseState() {\n    return this._mouseState;\n  }\n\n  get destroyPromise() {\n    return this._destroyCapability?.promise || null;\n  }\n\n  get ready() {\n    return this._ready;\n  }\n\n  /**\n   * @private\n   */\n  get _internalEvents() {\n    return shadow(this, \"_internalEvents\", new Map());\n  }\n\n  /**\n   * @private\n   */\n  get _domEvents() {\n    return shadow(this, \"_domEvents\", new Map());\n  }\n\n  /**\n   * @private\n   */\n  get _pageOpenPending() {\n    return shadow(this, \"_pageOpenPending\", new Set());\n  }\n\n  /**\n   * @private\n   */\n  get _visitedPages() {\n    return shadow(this, \"_visitedPages\", new Map());\n  }\n\n  /**\n   * @private\n   */\n  async _updateFromSandbox(detail) {\n    // Ignore some events, see below, that don't make sense in PresentationMode.\n    const isInPresentationMode =\n      this._pdfViewer.isInPresentationMode ||\n      this._pdfViewer.isChangingPresentationMode;\n\n    const { id, siblings, command, value } = detail;\n    if (!id) {\n      switch (command) {\n        case \"clear\":\n          console.clear();\n          break;\n        case \"error\":\n          console.error(value);\n          break;\n        case \"layout\":\n          if (isInPresentationMode) {\n            return;\n          }\n          const modes = apiPageLayoutToViewerModes(value);\n          this._pdfViewer.spreadMode = modes.spreadMode;\n          break;\n        case \"page-num\":\n          this._pdfViewer.currentPageNumber = value + 1;\n          break;\n        case \"print\":\n          await this._pdfViewer.pagesPromise;\n          this._eventBus.dispatch(\"print\", { source: this });\n          break;\n        case \"println\":\n          console.log(value);\n          break;\n        case \"zoom\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.currentScaleValue = value;\n          break;\n        case \"SaveAs\":\n          this._eventBus.dispatch(\"save\", { source: this });\n          break;\n        case \"FirstPage\":\n          this._pdfViewer.currentPageNumber = 1;\n          break;\n        case \"LastPage\":\n          this._pdfViewer.currentPageNumber = this._pdfViewer.pagesCount;\n          break;\n        case \"NextPage\":\n          this._pdfViewer.nextPage();\n          break;\n        case \"PrevPage\":\n          this._pdfViewer.previousPage();\n          break;\n        case \"ZoomViewIn\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.increaseScale();\n          break;\n        case \"ZoomViewOut\":\n          if (isInPresentationMode) {\n            return;\n          }\n          this._pdfViewer.decreaseScale();\n          break;\n      }\n      return;\n    }\n\n    if (isInPresentationMode) {\n      if (detail.focus) {\n        return;\n      }\n    }\n    delete detail.id;\n    delete detail.siblings;\n\n    const ids = siblings ? [id, ...siblings] : [id];\n    for (const elementId of ids) {\n      const element = document.getElementById(elementId);\n      if (element) {\n        element.dispatchEvent(new CustomEvent(\"updatefromsandbox\", { detail }));\n      } else {\n        // The element hasn't been rendered yet, use the AnnotationStorage.\n        this._pdfDocument?.annotationStorage.setValue(elementId, detail);\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  async _dispatchPageOpen(pageNumber, initialize = false) {\n    const pdfDocument = this._pdfDocument,\n      visitedPages = this._visitedPages;\n\n    if (initialize) {\n      this._closeCapability = createPromiseCapability();\n    }\n    if (!this._closeCapability) {\n      return; // Scripting isn't fully initialized yet.\n    }\n    const pageView = this._pdfViewer.getPageView(/* index = */ pageNumber - 1);\n\n    if (pageView?.renderingState !== RenderingStates.FINISHED) {\n      this._pageOpenPending.add(pageNumber);\n      return; // Wait for the page to finish rendering.\n    }\n    this._pageOpenPending.delete(pageNumber);\n\n    const actionsPromise = (async () => {\n      // Avoid sending, and thus serializing, the `actions` data more than once.\n      const actions = await (!visitedPages.has(pageNumber)\n        ? pageView.pdfPage?.getJSActions()\n        : null);\n      if (pdfDocument !== this._pdfDocument) {\n        return; // The document was closed while the actions resolved.\n      }\n\n      await this._scripting?.dispatchEventInSandbox({\n        id: \"page\",\n        name: \"PageOpen\",\n        pageNumber,\n        actions,\n      });\n    })();\n    visitedPages.set(pageNumber, actionsPromise);\n  }\n\n  /**\n   * @private\n   */\n  async _dispatchPageClose(pageNumber) {\n    const pdfDocument = this._pdfDocument,\n      visitedPages = this._visitedPages;\n\n    if (!this._closeCapability) {\n      return; // Scripting isn't fully initialized yet.\n    }\n    if (this._pageOpenPending.has(pageNumber)) {\n      return; // The page is still rendering; no \"PageOpen\" event dispatched.\n    }\n    const actionsPromise = visitedPages.get(pageNumber);\n    if (!actionsPromise) {\n      return; // The \"PageClose\" event must be preceded by a \"PageOpen\" event.\n    }\n    visitedPages.set(pageNumber, null);\n\n    // Ensure that the \"PageOpen\" event is dispatched first.\n    await actionsPromise;\n    if (pdfDocument !== this._pdfDocument) {\n      return; // The document was closed while the actions resolved.\n    }\n\n    await this._scripting?.dispatchEventInSandbox({\n      id: \"page\",\n      name: \"PageClose\",\n      pageNumber,\n    });\n  }\n\n  /**\n   * @returns {Promise<Object>} A promise that is resolved with an {Object}\n   *   containing the necessary document properties; please find the expected\n   *   format in `PDFViewerApplication._scriptingDocProperties`.\n   * @private\n   */\n  async _getDocProperties() {\n    if (this._docPropertiesLookup) {\n      return this._docPropertiesLookup(this._pdfDocument);\n    }\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"COMPONENTS\")) {\n      const { docPropertiesLookup } = require(\"./generic_scripting.js\");\n\n      return docPropertiesLookup(this._pdfDocument);\n    }\n    throw new Error(\"_getDocProperties: Unable to lookup properties.\");\n  }\n\n  /**\n   * @private\n   */\n  _createScripting() {\n    this._destroyCapability = createPromiseCapability();\n\n    if (this._scripting) {\n      throw new Error(\"_createScripting: Scripting already exists.\");\n    }\n    if (this._scriptingFactory) {\n      return this._scriptingFactory.createScripting({\n        sandboxBundleSrc: this._sandboxBundleSrc,\n      });\n    }\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"COMPONENTS\")) {\n      const { GenericScripting } = require(\"./generic_scripting.js\");\n\n      return new GenericScripting(this._sandboxBundleSrc);\n    }\n    throw new Error(\"_createScripting: Cannot create scripting.\");\n  }\n\n  /**\n   * @private\n   */\n  async _destroyScripting() {\n    if (!this._scripting) {\n      this._pdfDocument = null;\n\n      this._destroyCapability?.resolve();\n      return;\n    }\n    if (this._closeCapability) {\n      await Promise.race([\n        this._closeCapability.promise,\n        new Promise(resolve => {\n          // Avoid the scripting/sandbox-destruction hanging indefinitely.\n          setTimeout(resolve, 1000);\n        }),\n      ]).catch(reason => {\n        // Ignore any errors, to ensure that the sandbox is always destroyed.\n      });\n      this._closeCapability = null;\n    }\n    this._pdfDocument = null;\n\n    try {\n      await this._scripting.destroySandbox();\n    } catch (ex) {}\n\n    for (const [name, listener] of this._internalEvents) {\n      this._eventBus._off(name, listener);\n    }\n    this._internalEvents.clear();\n\n    for (const [name, listener] of this._domEvents) {\n      window.removeEventListener(name, listener);\n    }\n    this._domEvents.clear();\n\n    this._pageOpenPending.clear();\n    this._visitedPages.clear();\n\n    this._scripting = null;\n    delete this._mouseState.isDown;\n    this._ready = false;\n\n    this._destroyCapability?.resolve();\n  }\n}\n\nexport { PDFScriptingManager };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getPdfFilenameFromUrl, loadScript } from \"pdfjs-lib\";\n\nasync function docPropertiesLookup(pdfDocument) {\n  const url = \"\",\n    baseUrl = url.split(\"#\")[0];\n  // eslint-disable-next-line prefer-const\n  let { info, metadata, contentDispositionFilename, contentLength } =\n    await pdfDocument.getMetadata();\n\n  if (!contentLength) {\n    const { length } = await pdfDocument.getDownloadInfo();\n    contentLength = length;\n  }\n\n  return {\n    ...info,\n    baseURL: baseUrl,\n    filesize: contentLength,\n    filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n    metadata: metadata?.getRaw(),\n    authors: metadata?.get(\"dc:creator\"),\n    numPages: pdfDocument.numPages,\n    URL: url,\n  };\n}\n\nclass GenericScripting {\n  constructor(sandboxBundleSrc) {\n    this._ready = loadScript(\n      sandboxBundleSrc,\n      /* removeScriptElement = */ true\n    ).then(() => {\n      return window.pdfjsSandbox.QuickJSSandbox();\n    });\n  }\n\n  async createSandbox(data) {\n    const sandbox = await this._ready;\n    sandbox.create(data);\n  }\n\n  async dispatchEventInSandbox(event) {\n    const sandbox = await this._ready;\n    sandbox.dispatchEvent(event);\n  }\n\n  async destroySandbox() {\n    const sandbox = await this._ready;\n    sandbox.nukeSandbox();\n  }\n}\n\nexport { docPropertiesLookup, GenericScripting };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __w_pdfjs_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__w_pdfjs_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  DefaultAnnotationLayerFactory,\n  DefaultStructTreeLayerFactory,\n  DefaultTextLayerFactory,\n  DefaultXfaLayerFactory,\n} from \"./default_factory.js\";\nimport { PDFLinkService, SimpleLinkService } from \"./pdf_link_service.js\";\nimport { PDFSinglePageViewer, PDFViewer } from \"./pdf_viewer.js\";\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\nimport { DownloadManager } from \"./download_manager.js\";\nimport { EventBus } from \"./event_utils.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { NullL10n } from \"./l10n_utils.js\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { PDFPageView } from \"./pdf_page_view.js\";\nimport { PDFScriptingManager } from \"./pdf_scripting_manager.js\";\nimport { ProgressBar } from \"./ui_utils.js\";\nimport { StructTreeLayerBuilder } from \"./struct_tree_layer_builder.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\n// eslint-disable-next-line no-unused-vars\nconst pdfjsVersion = PDFJSDev.eval(\"BUNDLE_VERSION\");\n// eslint-disable-next-line no-unused-vars\nconst pdfjsBuild = PDFJSDev.eval(\"BUNDLE_BUILD\");\n\nexport {\n  AnnotationLayerBuilder,\n  DefaultAnnotationLayerFactory,\n  DefaultStructTreeLayerFactory,\n  DefaultTextLayerFactory,\n  DefaultXfaLayerFactory,\n  DownloadManager,\n  EventBus,\n  GenericL10n,\n  NullL10n,\n  PDFFindController,\n  PDFHistory,\n  PDFLinkService,\n  PDFPageView,\n  PDFScriptingManager,\n  PDFSinglePageViewer,\n  PDFViewer,\n  ProgressBar,\n  SimpleLinkService,\n  StructTreeLayerBuilder,\n  TextLayerBuilder,\n  XfaLayerBuilder,\n};\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport React, { useState, useCallback, useRef, useEffect, useMemo, useImperativeHandle, forwardRef } from 'react';\n\n//\n// Required\nlet applyAnimatedValues;\nlet createStringInterpolator; //\n// Optional\n//\n\nlet now = () => Date.now();\nlet colorNames = {};\nlet defaultElement;\nlet manualFrameloop;\nlet createAnimatedStyle;\nlet createAnimatedTransform;\nlet createAnimatedInterpolation;\nlet createAnimatedRef = node => node.current;\nlet requestAnimationFrame = typeof window !== 'undefined' ? window.requestAnimationFrame : () => {};\nlet cancelAnimationFrame = typeof window !== 'undefined' ? window.cancelAnimationFrame : () => {}; //\n// Configuration\n//\n\nconst assign = globals => {\n  var _Object$assign = Object.assign({\n    colorNames,\n    defaultElement,\n    applyAnimatedValues,\n    createStringInterpolator,\n    createAnimatedInterpolation,\n    createAnimatedTransform,\n    createAnimatedStyle,\n    createAnimatedRef,\n    requestAnimationFrame,\n    cancelAnimationFrame,\n    manualFrameloop\n  }, globals);\n\n  colorNames = _Object$assign.colorNames;\n  defaultElement = _Object$assign.defaultElement;\n  applyAnimatedValues = _Object$assign.applyAnimatedValues;\n  createStringInterpolator = _Object$assign.createStringInterpolator;\n  createAnimatedInterpolation = _Object$assign.createAnimatedInterpolation;\n  createAnimatedTransform = _Object$assign.createAnimatedTransform;\n  createAnimatedStyle = _Object$assign.createAnimatedStyle;\n  createAnimatedRef = _Object$assign.createAnimatedRef;\n  requestAnimationFrame = _Object$assign.requestAnimationFrame;\n  cancelAnimationFrame = _Object$assign.cancelAnimationFrame;\n  manualFrameloop = _Object$assign.manualFrameloop;\n  return _Object$assign;\n};\n\nvar Globals = /*#__PURE__*/Object.freeze({\n  get applyAnimatedValues () { return applyAnimatedValues; },\n  get createStringInterpolator () { return createStringInterpolator; },\n  now: now,\n  get colorNames () { return colorNames; },\n  get defaultElement () { return defaultElement; },\n  get manualFrameloop () { return manualFrameloop; },\n  get createAnimatedStyle () { return createAnimatedStyle; },\n  get createAnimatedTransform () { return createAnimatedTransform; },\n  get createAnimatedInterpolation () { return createAnimatedInterpolation; },\n  get createAnimatedRef () { return createAnimatedRef; },\n  get requestAnimationFrame () { return requestAnimationFrame; },\n  get cancelAnimationFrame () { return cancelAnimationFrame; },\n  assign: assign\n});\n\nclass Animated {\n  constructor() {\n    this.payload = void 0;\n    this.children = [];\n  }\n\n  getAnimatedValue() {\n    return this.getValue();\n  }\n\n  getPayload() {\n    return this.payload || this;\n  }\n\n  attach() {}\n\n  detach() {}\n\n  getChildren() {\n    return this.children;\n  }\n\n  addChild(child) {\n    if (this.children.length === 0) this.attach();\n    this.children.push(child);\n  }\n\n  removeChild(child) {\n    const index = this.children.indexOf(child);\n    this.children.splice(index, 1);\n    if (this.children.length === 0) this.detach();\n  }\n\n}\nclass AnimatedArray extends Animated {\n  constructor() {\n    super(...arguments);\n    this.payload = void 0;\n  }\n\n  attach() {\n    this.payload.forEach(p => p instanceof Animated && p.addChild(this));\n  }\n\n  detach() {\n    this.payload.forEach(p => p instanceof Animated && p.removeChild(this));\n  }\n\n}\nclass AnimatedObject extends Animated {\n  constructor(payload) {\n    super();\n    this.payload = payload;\n  }\n\n  getValue(animated) {\n    if (animated === void 0) {\n      animated = false;\n    }\n\n    const payload = {};\n\n    for (const key in this.payload) {\n      const value = this.payload[key];\n      if (animated && !(value instanceof Animated)) continue;\n      payload[key] = value instanceof Animated ? value[animated ? 'getAnimatedValue' : 'getValue']() : value;\n    }\n\n    return payload;\n  }\n\n  getAnimatedValue() {\n    return this.getValue(true);\n  }\n\n  attach() {\n    Object.values(this.payload).forEach(s => s instanceof Animated && s.addChild(this));\n  }\n\n  detach() {\n    Object.values(this.payload).forEach(s => s instanceof Animated && s.removeChild(this));\n  }\n\n}\n\nclass AnimatedStyle extends AnimatedObject {\n  constructor(style) {\n    if (style === void 0) {\n      style = {};\n    }\n\n    super(style.transform && createAnimatedTransform ? _extends({}, style, {\n      transform: createAnimatedTransform(style.transform)\n    }) : style);\n  }\n\n}\n\nconst is = {\n  arr: Array.isArray,\n  obj: a => Object.prototype.toString.call(a) === '[object Object]',\n  fun: a => typeof a === 'function',\n  str: a => typeof a === 'string',\n  num: a => typeof a === 'number',\n  und: a => a === void 0,\n  boo: a => typeof a === 'boolean'\n};\nfunction useForceUpdate() {\n  const _useState = useState(false),\n        f = _useState[1];\n\n  const forceUpdate = useCallback(() => f(v => !v), []);\n  return forceUpdate;\n}\nfunction withDefault(value, defaultValue) {\n  return value == null ? defaultValue : value;\n}\nfunction toArray(a) {\n  return is.und(a) ? [] : Array.isArray(a) ? a : [a];\n}\nfunction callProp(obj) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  return is.fun(obj) ? obj(...args) : obj;\n}\n\nfunction getForwardProps(props) {\n  const to = props.to,\n        from = props.from,\n        config = props.config,\n        onStart = props.onStart,\n        onRest = props.onRest,\n        onFrame = props.onFrame,\n        children = props.children,\n        cancel = props.cancel,\n        reset = props.reset,\n        reverse = props.reverse,\n        force = props.force,\n        immediate = props.immediate,\n        delay = props.delay,\n        attach = props.attach,\n        destroyed = props.destroyed,\n        interpolateTo = props.interpolateTo,\n        ref = props.ref,\n        lazy = props.lazy,\n        forward = _objectWithoutPropertiesLoose(props, [\"to\", \"from\", \"config\", \"onStart\", \"onRest\", \"onFrame\", \"children\", \"cancel\", \"reset\", \"reverse\", \"force\", \"immediate\", \"delay\", \"attach\", \"destroyed\", \"interpolateTo\", \"ref\", \"lazy\"]);\n\n  return forward;\n}\n\nfunction interpolateTo(props) {\n  const forward = getForwardProps(props);\n  props = Object.entries(props).reduce((props, _ref) => {\n    let key = _ref[0],\n        value = _ref[1];\n    return key in forward || (props[key] = value), props;\n  }, {});\n  return _extends({\n    to: forward\n  }, props);\n}\nfunction handleRef(ref, forward) {\n  if (forward) {\n    // If it's a function, assume it's a ref callback\n    if (is.fun(forward)) forward(ref);else if (is.obj(forward)) {\n      forward.current = ref;\n    }\n  }\n\n  return ref;\n}\n/** Use a value from the previous render */\n\nfunction usePrev(value) {\n  const prevRef = useRef(undefined);\n  const prev = prevRef.current;\n  prevRef.current = value;\n  return prev;\n}\nfunction fillArray(length, mapIndex) {\n  const arr = [];\n\n  for (let i = 0; i < length; i++) arr.push(mapIndex(i));\n\n  return arr;\n}\n\n/**\n * This tries to put deleted items back into the given `out` list in correct\n * order. Deleted items must have a `left` and `right` property with key of\n * their sibling which is used to find the correct placement.\n */\nfunction reconcileDeleted(deleted, current) {\n  // Copy as we will be mutating the arrays\n  deleted = [...deleted];\n  current = [...current]; // Used to detect deadlock (when a pass finds 0 siblings)\n\n  let failedTries = 0; // Track where the current pass start/ends\n\n  let passIndex = 0;\n  let nextPassIndex = deleted.length; // Insert all deleted items into `current`\n\n  for (let i = 0; i < deleted.length; i++) {\n    if (i === nextPassIndex) {\n      // Sanity test: Push to end if somehow no siblings were found\n      if (passIndex + failedTries === nextPassIndex) {\n        for (let j = i; j < deleted.length; j++) {\n          const _deleted$j = deleted[j],\n                left = _deleted$j.left,\n                right = _deleted$j.right,\n                deletedItem = _objectWithoutPropertiesLoose(_deleted$j, [\"left\", \"right\"]);\n\n          current.push(deletedItem);\n        }\n\n        break;\n      } // Update local state at the end of each pass\n\n\n      passIndex = nextPassIndex;\n      nextPassIndex = deleted.length;\n      failedTries = 0;\n    } // The index of the deleted item in `current`\n\n\n    let index = -1; // Look for the left or right sibling in `current`\n\n    const _deleted$i = deleted[i],\n          left = _deleted$i.left,\n          right = _deleted$i.right,\n          deletedItem = _objectWithoutPropertiesLoose(_deleted$i, [\"left\", \"right\"]);\n\n    for (let j = current.length; --j >= 0;) {\n      const key = current[j].originalKey;\n\n      if (key === right) {\n        index = j;\n        break;\n      }\n\n      if (key === left) {\n        index = j + 1;\n        break;\n      }\n    } // Items with no index are revisited in the next pass\n\n\n    if (index < 0) {\n      failedTries++;\n      deleted.push(deleted[i]);\n    } else {\n      current.splice(index, 0, deletedItem);\n    }\n  }\n\n  return current;\n}\nfunction freeze(obj) {\n  if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n    return Object.freeze(obj);\n  }\n\n  return obj;\n}\n\nclass AnimatedValueArray extends AnimatedArray {\n  constructor(values) {\n    super();\n    this.payload = values;\n  }\n\n  getValue() {\n    return this.payload.map(v => v.getValue());\n  }\n\n  setValue(value, flush) {\n    if (flush === void 0) {\n      flush = true;\n    }\n\n    if (is.arr(value)) {\n      if (value.length === this.payload.length) {\n        value.forEach((v, i) => this.payload[i].setValue(v, flush));\n      }\n    } else {\n      this.payload.forEach(p => p.setValue(value, flush));\n    }\n  }\n\n  interpolate() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return createAnimatedInterpolation(this, ...args);\n  }\n\n}\n\nconst createInterpolator = (range, output, extrapolate) => {\n  if (is.fun(range)) {\n    return range;\n  }\n\n  if (is.arr(range)) {\n    return createInterpolator({\n      range,\n      output: output,\n      extrapolate\n    });\n  }\n\n  if (is.str(range.output[0])) {\n    return createStringInterpolator(range);\n  }\n\n  const config = range;\n  const outputRange = config.output;\n  const inputRange = config.range || [0, 1];\n  const extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';\n  const extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';\n\n  const easing = config.easing || (t => t);\n\n  return input => {\n    const range = findRange(input, inputRange);\n    return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);\n  };\n};\n\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n  let result = map ? map(input) : input; // Extrapolate\n\n  if (result < inputMin) {\n    if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;\n  }\n\n  if (result > inputMax) {\n    if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;\n  }\n\n  if (outputMin === outputMax) return outputMin;\n  if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax; // Input Range\n\n  if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin); // Easing\n\n  result = easing(result); // Output Range\n\n  if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;\n  return result;\n}\n\nfunction findRange(input, inputRange) {\n  for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break;\n\n  return i - 1;\n}\n\n/** Wrap each element type of `T` with the `Animated` type */\n\nclass AnimatedInterpolation extends AnimatedArray {\n  constructor(parents, args) {\n    super();\n    this.calc = void 0;\n    this.calc = createInterpolator(...args);\n    this.payload = Array.isArray(parents) ? parents : parents instanceof AnimatedValueArray ? parents.getPayload() : [parents];\n  }\n\n  getValue() {\n    const args = this.payload.map(value => value.getValue());\n    return this.calc(...args);\n  }\n\n  interpolate() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return createAnimatedInterpolation(this, ...args);\n  }\n\n}\n\n/** API\n *  useChain(references, timeSteps, timeFrame)\n */\n\nfunction useChain(refs, timeSteps, timeFrame) {\n  if (timeFrame === void 0) {\n    timeFrame = 1000;\n  }\n\n  useEffect(() => {\n    if (timeSteps) {\n      let prevDelay = 0;\n      refs.forEach((ref, i) => {\n        if (!ref.current) return;\n        const controllers = ref.current.controllers;\n\n        if (controllers.length) {\n          let delay = timeFrame * timeSteps[i]; // Use the previous delay if none exists.\n\n          if (isNaN(delay)) delay = prevDelay;else prevDelay = delay;\n          controllers.forEach(ctrl => {\n            ctrl.queue.forEach(props => props.delay += delay);\n            ctrl.start();\n          });\n        }\n      });\n    } else {\n      let p = Promise.resolve();\n      refs.forEach(ref => {\n        const _ref = ref.current || {},\n              controllers = _ref.controllers,\n              start = _ref.start;\n\n        if (controllers && controllers.length) {\n          // Take the queue of each controller\n          const updates = controllers.map(ctrl => {\n            const q = ctrl.queue;\n            ctrl.queue = [];\n            return q;\n          }); // Apply the queue when the previous ref stops animating\n\n          p = p.then(() => {\n            controllers.forEach((ctrl, i) => ctrl.queue.push(...updates[i]));\n            return start();\n          });\n        } else {\n          console.warn('useChain ref has no animations:', ref);\n        }\n      });\n    }\n  });\n}\n\nlet active = false;\nconst controllers = new Set();\n\nconst update = () => {\n  if (!active) return false;\n  let time = now();\n\n  for (let controller of controllers) {\n    let isActive = false; // Number of updated animations\n\n    let updateCount = 0;\n\n    for (let configIdx = 0; configIdx < controller.configs.length; configIdx++) {\n      let config = controller.configs[configIdx];\n      let endOfAnimation, lastTime;\n\n      for (let valIdx = 0; valIdx < config.animatedValues.length; valIdx++) {\n        let animated = config.animatedValues[valIdx];\n        if (animated.done) continue;\n        updateCount++;\n        let to = config.toValues[valIdx];\n        let isAnimated = to instanceof Animated;\n        if (isAnimated) to = to.getValue(); // Jump to end value for immediate animations\n\n        if (config.immediate) {\n          animated.setValue(to);\n          animated.done = true;\n          continue;\n        }\n\n        let from = config.fromValues[valIdx]; // Break animation when string values are involved\n\n        if (typeof from === 'string' || typeof to === 'string') {\n          animated.setValue(to);\n          animated.done = true;\n          continue;\n        }\n\n        let position = animated.lastPosition;\n        let velocity = Array.isArray(config.initialVelocity) ? config.initialVelocity[valIdx] : config.initialVelocity;\n\n        if (config.duration !== void 0) {\n          /** Duration easing */\n          position = from + config.easing((time - animated.startTime) / config.duration) * (to - from);\n          endOfAnimation = time >= animated.startTime + config.duration;\n        } else if (config.decay) {\n          const decay = config.decay === true ? 0.998 : config.decay;\n          /** Decay easing */\n\n          position = from + velocity / (1 - decay) * (1 - Math.exp(-(1 - decay) * (time - animated.startTime)));\n          endOfAnimation = Math.abs(animated.lastPosition - position) < 0.1;\n          if (endOfAnimation) to = position;\n        } else {\n          /** Spring easing */\n          lastTime = animated.lastTime !== void 0 ? animated.lastTime : time;\n          velocity = animated.lastVelocity !== void 0 ? animated.lastVelocity : config.initialVelocity; // If we lost a lot of frames just jump to the end.\n\n          if (time > lastTime + 64) lastTime = time; // http://gafferongames.com/game-physics/fix-your-timestep/\n\n          let numSteps = Math.floor(time - lastTime);\n\n          for (let i = 0; i < numSteps; ++i) {\n            let force = -config.tension * (position - to);\n            let damping = -config.friction * velocity;\n            let acceleration = (force + damping) / config.mass;\n            velocity = velocity + acceleration * 1 / 1000;\n            position = position + velocity * 1 / 1000;\n          } // Conditions for stopping the spring animation\n\n\n          let isOvershooting = config.clamp && config.tension !== 0 ? from < to ? position > to : position < to : false;\n          let isVelocity = Math.abs(velocity) <= config.precision;\n          let isDisplacement = config.tension !== 0 ? Math.abs(to - position) <= config.precision : true;\n          endOfAnimation = isOvershooting || isVelocity && isDisplacement;\n          animated.lastVelocity = velocity;\n          animated.lastTime = time;\n        } // Trails aren't done until their parents conclude\n\n\n        if (isAnimated && !config.toValues[valIdx].done) {\n          endOfAnimation = false;\n        }\n\n        if (endOfAnimation) {\n          // Ensure that we end up with a round value\n          if (animated.value !== to) position = to;\n          animated.done = true;\n        } else {\n          isActive = true;\n        }\n\n        animated.setValue(position);\n        animated.lastPosition = position;\n      } // Keep track of updated values only when necessary\n\n\n      if (controller.props.onFrame) {\n        controller.values[config.key] = config.animated.getValue();\n      }\n    }\n\n    controller.onFrame(isActive, updateCount);\n  } // Loop over as long as there are controllers ...\n\n\n  if (controllers.size) {\n    if (manualFrameloop) manualFrameloop();else requestAnimationFrame(update);\n  } else {\n    active = false;\n  }\n\n  return active;\n};\n\nconst start = controller => {\n  controllers.add(controller);\n\n  if (!active) {\n    active = true;\n    if (manualFrameloop) manualFrameloop();else requestAnimationFrame(update);\n  }\n};\n\nconst stop = controller => {\n  controllers.delete(controller);\n};\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n *               new Animated.Value(0)\n *     .interpolate()        .interpolate()    new Animated.Value(1)\n *         opacity               translateY      scale\n *          style                         transform\n *         View#234                         style\n *                                         View#123\n *\n * A) Top Down phase\n * When an AnimatedValue is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\n\nfunction addAnimatedStyles(node, styles) {\n  if ('update' in node) {\n    styles.add(node);\n  } else {\n    node.getChildren().forEach(child => addAnimatedStyles(child, styles));\n  }\n}\n\nclass AnimatedValue extends Animated {\n  constructor(_value) {\n    var _this;\n\n    super();\n    _this = this;\n    this.animatedStyles = new Set();\n    this.value = void 0;\n    this.startPosition = void 0;\n    this.lastPosition = void 0;\n    this.lastVelocity = void 0;\n    this.startTime = void 0;\n    this.lastTime = void 0;\n    this.done = false;\n\n    this.setValue = function (value, flush) {\n      if (flush === void 0) {\n        flush = true;\n      }\n\n      _this.value = value;\n      if (flush) _this.flush();\n    };\n\n    this.value = _value;\n\n    if (is.num(_value)) {\n      this.startPosition = _value;\n      this.lastPosition = _value;\n    }\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  interpolate() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return createAnimatedInterpolation(this, ...args);\n  }\n\n  reset(isActive) {\n    if (is.num(this.value)) {\n      this.startPosition = this.value;\n      this.lastPosition = this.value;\n      this.lastVelocity = isActive ? this.lastVelocity : undefined;\n      this.lastTime = isActive ? this.lastTime : undefined;\n      this.startTime = now();\n    }\n\n    this.done = false;\n    this.animatedStyles.clear();\n  }\n\n  clearStyles() {\n    this.animatedStyles.clear();\n  }\n\n  flush() {\n    if (this.animatedStyles.size === 0) {\n      addAnimatedStyles(this, this.animatedStyles);\n    }\n\n    this.animatedStyles.forEach(animatedStyle => animatedStyle.update());\n  }\n\n}\n\n// Default easing\nconst linear = t => t;\n\nconst emptyObj = Object.freeze({});\nlet nextId = 1;\nclass Controller {\n  constructor(props) {\n    this.id = nextId++;\n    this.idle = true;\n    this.runCount = 0;\n    this.destroyed = false;\n    this.props = {};\n    this.queue = [];\n    this.timestamps = {};\n    this.values = {};\n    this.merged = {};\n    this.animated = {};\n    this.animations = {};\n    this.configs = [];\n    this.onEndQueue = [];\n    this.cancelledAt = 0;\n    if (props) this.update(props).start();\n  }\n  /**\n   * Push props into the update queue. The props are used after `start` is\n   * called and any delay is over. The props are intelligently diffed to ensure\n   * that later calls to this method properly override any delayed props.\n   * The `propsArg` argument is always copied before mutations are made.\n   */\n\n\n  update(propsArg) {\n    if (!propsArg || this.destroyed) return this;\n    const props = interpolateTo(propsArg); // For async animations, the `from` prop must be defined for\n    // the Animated nodes to exist before animations have started.\n\n    this._ensureAnimated(props.from, true);\n\n    this._ensureAnimated(props.to);\n\n    props.timestamp = now(); // The `delay` prop of every update must be a number >= 0\n\n    if (is.fun(props.delay) && is.obj(props.to)) {\n      const from = props.from || emptyObj;\n\n      for (const key in props.to) {\n        this.queue.push(_extends({}, props, {\n          to: {\n            [key]: props.to[key]\n          },\n          from: key in from ? {\n            [key]: from[key]\n          } : void 0,\n          delay: Math.max(0, Math.round(props.delay(key)))\n        }));\n      }\n    } else {\n      props.delay = is.num(props.delay) ? Math.max(0, Math.round(props.delay)) : 0; // Coerce falsy values to undefined for these props\n\n      if (!props.to) props.to = void 0;\n      if (!props.from) props.from = void 0;\n      this.queue.push(props);\n    }\n\n    return this;\n  }\n  /**\n   * Flush the update queue.\n   * If the queue is empty, try starting the frameloop.\n   */\n\n\n  start(onEnd) {\n    if (this.queue.length) this._flush(onEnd);else this._start(onEnd);\n    return this;\n  }\n  /** Stop one animation or all animations */\n\n\n  stop() {\n    for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {\n      keys[_key] = arguments[_key];\n    }\n\n    let finished = false;\n\n    if (is.boo(keys[0])) {\n      var _keys = keys;\n      finished = _keys[0];\n      keys = _keys.slice(1);\n    } // Stop animations by key\n\n\n    if (keys.length) {\n      for (const key of keys) {\n        const index = this.configs.findIndex(config => key === config.key);\n\n        this._stopAnimation(key);\n\n        this.configs[index] = this.animations[key];\n      }\n    } // Stop all animations\n    else if (this.runCount) {\n        this.cancelledAt = now(); // Update the animation configs\n\n        this.configs.forEach(config => this._stopAnimation(config.key));\n        this.configs = Object.values(this.animations); // Exit the frameloop\n\n        this._stop(finished);\n      }\n\n    return this;\n  }\n  /** Revert the controller to its initial state */\n\n\n  reset() {\n    // Stop all current animations\n    this.stop(); // Revert the internal state\n\n    this.destroyed = false;\n    this.props = {};\n    this.queue = [];\n    this.timestamps = {};\n    this.values = {};\n    this.merged = {};\n    this.animated = {};\n    this.animations = {};\n    this.configs = [];\n    return this;\n  }\n  /** Prevent all current and future animation */\n\n\n  destroy() {\n    if (!this.destroyed) {\n      this.stop();\n      this.destroyed = true;\n    }\n  }\n  /** @internal Called by the frameloop */\n\n\n  onFrame(isActive, updateCount) {\n    if (updateCount) {\n      const onFrame = this.props.onFrame;\n      if (onFrame) onFrame(_extends({}, this.values));\n    }\n\n    if (!isActive) this._stop(true);\n  }\n  /**\n   * Set a prop for the next animations where the prop is undefined. The given\n   * value is overridden by the next update where the prop is defined.\n   *\n   * Ongoing animations are not changed.\n   */\n\n\n  setProp(key, value) {\n    this.props[key] = value;\n    this.timestamps[key] = now();\n    return this;\n  } // Create an Animated node if none exists.\n\n\n  _ensureAnimated(values, shouldUpdate) {\n    if (shouldUpdate === void 0) {\n      shouldUpdate = false;\n    }\n\n    if (!is.obj(values)) return;\n\n    for (const key in values) {\n      const value = values[key];\n      let animated = this.animated[key];\n\n      if (animated && shouldUpdate && this.animations[key].isNew) {\n        // Ensure the initial value is up-to-date.\n        if (animated.setValue) {\n          animated.setValue(value);\n        } else {\n          // Derived nodes need to be swapped out.\n          animated = null;\n        }\n      }\n\n      if (!animated) {\n        animated = createAnimated(value);\n\n        if (animated) {\n          if (this.animated[key]) {\n            // Swap out the old node with the new node.\n            moveChildren(this.animated[key], animated);\n          }\n\n          this.animated[key] = animated;\n\n          this._stopAnimation(key, true);\n        } else {\n          console.warn('Given value not animatable:', value);\n        }\n      }\n    }\n  } // Listen for all animations to end.\n\n\n  _onEnd(onEnd) {\n    if (this.runCount) this.onEndQueue.push(onEnd);else onEnd(true);\n  } // Add this controller to the frameloop.\n\n\n  _start(onEnd) {\n    if (onEnd) this._onEnd(onEnd);\n\n    if (this.idle && this.runCount) {\n      this.idle = false;\n      start(this);\n    }\n  } // Remove this controller from the frameloop, and notify any listeners.\n\n\n  _stop(finished) {\n    this.idle = true;\n    stop(this);\n    const onEndQueue = this.onEndQueue;\n\n    if (onEndQueue.length) {\n      this.onEndQueue = [];\n      onEndQueue.forEach(onEnd => onEnd(finished));\n    }\n  } // Execute the current queue of prop updates.\n\n\n  _flush(onEnd) {\n    const queue = this.queue.reduce(reduceDelays, []);\n    this.queue.length = 0; // Track the number of active `_run` calls.\n\n    let runsLeft = Object.keys(queue).length;\n    this.runCount += runsLeft; // Never assume that the last update always finishes last, since that's\n    // not true when 2+ async updates have indeterminate durations.\n\n    const onRunEnd = finished => {\n      this.runCount--;\n      if (--runsLeft) return;\n      if (onEnd) onEnd(finished);\n\n      if (!this.runCount && finished) {\n        const onRest = this.props.onRest;\n        if (onRest) onRest(this.merged);\n      }\n    };\n\n    queue.forEach((props, delay) => {\n      if (delay) {\n        setTimeout(() => {\n          // Cancelling methods touch the `cancelledAt` property\n          if (props.timestamp < this.cancelledAt) return;\n\n          this._run(props, onRunEnd);\n        }, delay);\n      } else {\n        this._run(props, onRunEnd);\n      }\n    });\n  } // Update the props and animations\n\n\n  _run(props, onEnd) {\n    if (is.arr(props.to) || is.fun(props.to)) {\n      this._runAsync(props, onEnd);\n    } else if (this._diff(props)) {\n      this._animate(props)._start(onEnd);\n    } else {\n      this._onEnd(onEnd);\n    }\n  } // Start an async chain or an async script.\n\n\n  _runAsync(_ref, onEnd) {\n    let to = _ref.to,\n        props = _objectWithoutPropertiesLoose(_ref, [\"to\"]);\n\n    // Merge other props immediately.\n    if (this._diff(props)) {\n      this._animate(props);\n    } // Async scripts can be declaratively cancelled.\n\n\n    if (props.cancel === true) {\n      this.props.asyncTo = void 0;\n      return onEnd(false);\n    } // Never run more than one script at a time\n\n\n    const timestamp = props.timestamp;\n\n    if (!this._diff({\n      asyncTo: to,\n      timestamp\n    })) {\n      return onEnd(false);\n    }\n\n    const isCancelled = () => // Cancelling methods touch the `cancelledAt` property\n    timestamp < this.cancelledAt || // Async scripts are also cancelled when a new chain/script begins\n    is.fun(to) && to !== this.props.asyncTo;\n\n    let last;\n\n    const next = props => {\n      if (isCancelled()) throw this;\n      return (last = new Promise(done => {\n        this.update(props).start(done);\n      })).then(() => {\n        if (isCancelled()) throw this;\n      });\n    };\n\n    let queue = Promise.resolve();\n\n    if (is.arr(to)) {\n      to.forEach(props => queue = queue.then(() => next(props)));\n    } else if (is.fun(to)) {\n      queue = queue.then(() => to(next, this.stop.bind(this)) // Always wait for the last update.\n      .then(() => last));\n    }\n\n    queue.catch(err => err !== this && console.error(err)).then(() => onEnd(!isCancelled()));\n  } // Merge every fresh prop. Returns true if one or more props changed.\n  // These props are ignored: (delay, config, immediate, reverse)\n\n\n  _diff(_ref2) {\n    let timestamp = _ref2.timestamp,\n        delay = _ref2.delay,\n        config = _ref2.config,\n        immediate = _ref2.immediate,\n        reverse = _ref2.reverse,\n        props = _objectWithoutPropertiesLoose(_ref2, [\"timestamp\", \"delay\", \"config\", \"immediate\", \"reverse\"]);\n\n    let changed = false; // Ensure the newer timestamp is used.\n\n    const diffTimestamp = keyPath => {\n      const previous = this.timestamps[keyPath];\n\n      if (is.und(previous) || timestamp >= previous) {\n        this.timestamps[keyPath] = timestamp;\n        return true;\n      }\n\n      return false;\n    }; // Generalized diffing algorithm\n\n\n    const diffProp = (keys, value, parent) => {\n      if (is.und(value)) return;\n      const lastKey = keys[keys.length - 1];\n\n      if (is.obj(value)) {\n        if (!is.obj(parent[lastKey])) parent[lastKey] = {};\n\n        for (const key in value) {\n          diffProp(keys.concat(key), value[key], parent[lastKey]);\n        }\n      } else if (diffTimestamp(keys.join('.'))) {\n        const oldValue = parent[lastKey];\n\n        if (!isEqual(value, oldValue)) {\n          changed = true;\n          parent[lastKey] = value;\n        }\n      }\n    };\n\n    if (reverse) {\n      const to = props.to;\n      props.to = props.from;\n      props.from = is.obj(to) ? to : void 0;\n    }\n\n    for (const key in props) {\n      diffProp([key], props[key], this.props);\n    } // These props only affect one update\n\n\n    if ('reset' in props) this.props.reset = false;\n    if ('cancel' in props) this.props.cancel = void 0;\n    return changed;\n  } // Return true if the given prop was changed by this update\n\n\n  _isModified(props, prop) {\n    return this.timestamps[prop] === props.timestamp;\n  } // Update the animation configs. The given props override any default props.\n\n\n  _animate(props) {\n    const _this$props = this.props,\n          _this$props$from = _this$props.from,\n          from = _this$props$from === void 0 ? emptyObj : _this$props$from,\n          _this$props$to = _this$props.to,\n          to = _this$props$to === void 0 ? emptyObj : _this$props$to,\n          attach = _this$props.attach,\n          onStart = _this$props.onStart;\n\n    let isPrevented = _ => false;\n\n    if (props.cancel && this._isModified(props, 'cancel')) {\n      // Stop all animations when `cancel` is true\n      if (props.cancel === true) {\n        this.stop(); // Prevent pending updates from *before* this update only!\n        // (This must come after the `stop` call above)\n\n        this.cancelledAt = props.timestamp;\n        return this;\n      } // Prevent matching properties from animating when\n      // `cancel` is a string or array of strings\n\n\n      const keys = toArray(props.cancel);\n\n      if (is.arr(keys) && keys.length) {\n        isPrevented = key => keys.indexOf(key) >= 0;\n\n        this.stop(...keys);\n      }\n    } // Merge `from` values with `to` values\n\n\n    this.merged = freeze(_extends({}, from, to)); // True if any animation was updated\n\n    let changed = false; // The animations that are starting or restarting\n\n    const started = []; // Attachment handling, trailed springs can \"attach\" themselves to a previous spring\n\n    const target = attach && attach(this); // Reduces input { key: value } pairs into animation objects\n\n    for (const key in this.merged) {\n      if (isPrevented(key)) continue;\n      const state = this.animations[key];\n\n      if (!state) {\n        console.warn(`Failed to animate key: \"${key}\"\\n` + `Did you forget to define \"from.${key}\" for an async animation?`);\n        continue;\n      } // Reuse the Animated nodes whenever possible\n\n\n      let animated = state.animated,\n          animatedValues = state.animatedValues;\n      const value = this.merged[key];\n      const goalValue = computeGoalValue(value);\n      const currValue = animated.getValue(); // Stop animations with a goal value equal to its current value.\n\n      if (!props.reset && isEqual(goalValue, currValue)) {\n        // The animation might be stopped already.\n        if (!state.idle) {\n          changed = true;\n\n          this._stopAnimation(key);\n        }\n\n        continue;\n      } // Replace an animation when its goal value is changed (or it's been reset)\n\n\n      if (props.reset || !isEqual(goalValue, state.isNew ? currValue : state.goalValue)) {\n        let _ref3 = is.und(props.immediate) ? this.props : props,\n            immediate = _ref3.immediate;\n\n        immediate = !!callProp(immediate, key);\n        const isActive = animatedValues.some(v => !v.done);\n        const fromValue = !is.und(from[key]) ? computeGoalValue(from[key]) : goalValue; // Animatable strings use interpolation\n\n        const isInterpolated = isAnimatableString(value);\n\n        if (isInterpolated) {\n          const output = [props.reset ? fromValue : animated.getValue(), goalValue];\n          let input = animatedValues[0];\n\n          if (input) {\n            input.setValue(0, false);\n            input.reset(isActive);\n          } else {\n            input = new AnimatedValue(0);\n          }\n\n          try {\n            const prev = animated;\n            animated = input.interpolate({\n              output\n            });\n            moveChildren(prev, animated);\n          } catch (err) {\n            console.warn('Failed to interpolate string from \"%s\" to \"%s\"', output[0], output[1]);\n            console.error(err);\n            continue;\n          }\n\n          if (immediate) {\n            input.setValue(1, false);\n          }\n        } else {\n          // Convert values into Animated nodes (reusing nodes whenever possible)\n          if (is.arr(value)) {\n            if (animated instanceof AnimatedValueArray) {\n              if (props.reset) animated.setValue(fromValue, false);\n              animatedValues.forEach(v => v.reset(isActive));\n            } else {\n              const prev = animated;\n              animated = createAnimated(fromValue);\n              moveChildren(prev, animated);\n            }\n          } else {\n            if (animated instanceof AnimatedValue) {\n              if (props.reset) animated.setValue(fromValue, false);\n              animated.reset(isActive);\n            } else {\n              const prev = animated;\n              animated = new AnimatedValue(fromValue);\n              moveChildren(prev, animated);\n            }\n          }\n\n          if (immediate) {\n            animated.setValue(goalValue, false);\n          }\n        } // Only change the \"config\" of updated animations.\n\n\n        const config = callProp(props.config, key) || callProp(this.props.config, key) || emptyObj;\n\n        if (!immediate) {\n          started.push(key);\n        }\n\n        changed = true;\n        animatedValues = toArray(animated.getPayload());\n        this.animations[key] = {\n          key,\n          idle: false,\n          goalValue,\n          toValues: toArray(target instanceof Controller ? target.animations[key].animated.getPayload() : isInterpolated && 1 || goalValue),\n          fromValues: animatedValues.map(v => v.getValue()),\n          animated,\n          animatedValues,\n          immediate,\n          duration: config.duration,\n          easing: withDefault(config.easing, linear),\n          decay: config.decay,\n          mass: withDefault(config.mass, 1),\n          tension: withDefault(config.tension, 170),\n          friction: withDefault(config.friction, 26),\n          initialVelocity: withDefault(config.velocity, 0),\n          clamp: withDefault(config.clamp, false),\n          precision: withDefault(config.precision, 0.005),\n          config\n        };\n      }\n    }\n\n    if (changed) {\n      if (onStart && started.length) {\n        started.forEach(key => onStart(this.animations[key]));\n      } // Make animations available to the frameloop\n\n\n      const keys = Object.keys(this.animations);\n      this.configs.length = keys.length;\n      keys.forEach((key, i) => {\n        const config = this.animations[key];\n        this.configs[i] = config;\n        this.values[key] = config.animated.getValue();\n        this.animated[key] = config.animated;\n      });\n    }\n\n    return this;\n  }\n  /**\n   * Stop an animation by its key.\n   *\n   * This mutates the `timestamps.to[key]`, `props.to[key]`, and `animations[key]` properties.\n   * Notably, it does *not* mutate the `configs[key]` or `animated[key]` properties.\n   */\n\n\n  _stopAnimation(key, isNew) {\n    const animated = this.animated[key];\n\n    if (!animated) {\n      return console.warn(`Cannot stop an animation for a key that isn't animated: \"${key}\"`);\n    } // Prevent any pending updates to this key\n\n\n    this.timestamps['to.' + key] = now(); // Idle animations are skipped unless their Animated node changed\n\n    const state = this.animations[key] || emptyObj;\n    if (state.idle && animated === state.animated) return; // Use the previous `isNew` value if nothing was passed\n\n    if (is.und(isNew)) {\n      isNew = !!state.isNew;\n    } // Tell the frameloop to skip animating these values\n\n\n    const animatedValues = toArray(animated.getPayload());\n    animatedValues.forEach(v => v.done = true); // The current value becomes the goal value,\n    // which ensures the integrity of the diffing algorithm.\n\n    const goalValue = animated.getValue();\n\n    if (this.props.to) {\n      this.props.to[key] = goalValue;\n    } // Remove unused data from this key's animation config\n\n\n    this.animations[key] = {\n      key,\n      idle: true,\n      isNew,\n      goalValue,\n      animated,\n      animatedValues\n    };\n  }\n\n}\n/** Wrap any value with an `Animated` node */\n\nfunction createAnimated(value) {\n  return is.arr(value) ? new AnimatedValueArray(value.map(value => {\n    const animated = createAnimated(value);\n    const payload = animated.getPayload();\n    return animated instanceof AnimatedInterpolation ? payload[0] : payload;\n  })) : isAnimatableString(value) ? // Convert \"red\" into \"rgba(255, 0, 0, 1)\" etc\n  new AnimatedValue(0).interpolate({\n    output: [value, value]\n  }) : // The `AnimatedValue` class supports any type, but only numbers are\n  // interpolated by the frameloop.\n  new AnimatedValue(value);\n}\n/**\n * Replace an `Animated` node in the graph.\n * This is most useful for async updates, which don't cause a re-render.\n */\n\n\nfunction moveChildren(prev, next) {\n  const children = prev.getChildren().slice();\n  children.forEach(child => {\n    prev.removeChild(child);\n    next.addChild(child); // Replace `prev` with `next` in child payloads\n\n    const payload = child.getPayload();\n\n    if (is.arr(payload)) {\n      const i = payload.indexOf(prev);\n\n      if (i >= 0) {\n        const copy = [...payload];\n        copy[i] = next;\n        child['payload'] = copy;\n      }\n    } else if (is.obj(payload)) {\n      const entry = Object.entries(payload).find(entry => entry[1] === prev);\n\n      if (entry) {\n        child['payload'] = _extends({}, payload, {\n          [entry[0]]: next\n        });\n      }\n    }\n  });\n} // Merge updates with the same delay.\n// NOTE: Mutation of `props` may occur!\n\n\nfunction reduceDelays(merged, props) {\n  const prev = merged[props.delay];\n\n  if (prev) {\n    props.to = merge(prev.to, props.to);\n    props.from = merge(prev.from, props.from);\n    Object.assign(prev, props);\n  } else {\n    merged[props.delay] = props;\n  }\n\n  return merged;\n}\n\nfunction merge(dest, src) {\n  return is.obj(dest) && is.obj(src) ? _extends({}, dest, src) : src || dest;\n} // Not all strings can be animated (eg: {display: \"none\"})\n\n\nfunction isAnimatableString(value) {\n  if (!is.str(value)) return false;\n  return value.startsWith('#') || /\\d/.test(value) || !!colorNames[value];\n} // Compute the goal value, converting \"red\" to \"rgba(255, 0, 0, 1)\" in the process\n\n\nfunction computeGoalValue(value) {\n  return is.arr(value) ? value.map(computeGoalValue) : isAnimatableString(value) ? createStringInterpolator({\n    range: [0, 1],\n    output: [value, value]\n  })(1) : value;\n} // Compare animatable values\n\n\nfunction isEqual(a, b) {\n  if (is.arr(a)) {\n    if (!is.arr(b) || a.length !== b.length) return false;\n\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n\n    return true;\n  }\n\n  return a === b;\n}\n\n/** API\n * const props = useSprings(number, [{ ... }, { ... }, ...])\n * const [props, set] = useSprings(number, (i, controller) => ({ ... }))\n */\n\nconst useSprings = (length, propsArg, deps) => {\n  const hasNewSprings = length !== usePrev(length);\n  const isFn = is.fun(propsArg);\n  const state = useRef({\n    springs: [],\n    ref: null\n  }).current; // The `propsArg` coerced into an array\n\n  const props = isFn ? [] : propsArg; // Recreate the controllers whenever `length` changes\n\n  const springs = useMemo(() => fillArray(length, i => {\n    const s = new Controller();\n    const p = props[i] || (props[i] = callProp(propsArg, i, s));\n    return s.update(p);\n  }), [length]);\n\n  const _useMemo = useMemo(() => ({\n    /** Apply any pending updates */\n    start: () => Promise.all(state.springs.map(s => new Promise(done => s.start(done)))),\n\n    /** Update the spring controllers */\n    update: props => {\n      const isFn = is.fun(props);\n      const isArr = is.arr(props);\n      state.springs.forEach((spring, i) => {\n        spring.update(isFn ? callProp(props, i, spring) : isArr ? props[i] : props);\n        if (!state.ref) spring.start();\n      });\n    },\n\n    /** Stop one key or all keys from animating */\n    stop: function stop() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return state.springs.forEach(s => s.stop(...args));\n    }\n  }), []),\n        start = _useMemo.start,\n        update = _useMemo.update,\n        stop = _useMemo.stop;\n\n  const ref = props[0] ? props[0].ref : isFn ? state.ref : null;\n  useImperativeHandle(ref, () => ({\n    start,\n    stop,\n\n    get controllers() {\n      return state.springs;\n    }\n\n  })); // Once mounted, update the local state and start any animations.\n\n  useEffect(() => {\n    if (!isFn || hasNewSprings) {\n      props.forEach((p, i) => {\n        // Set default props for async updates\n        springs[i].setProp('config', p.config);\n        springs[i].setProp('immediate', p.immediate);\n      });\n    }\n\n    if (hasNewSprings) {\n      state.springs.forEach(s => s.destroy());\n      state.springs = springs;\n      state.ref = ref;\n\n      if (!ref) {\n        springs.forEach(s => s.start());\n      }\n    } else if (!isFn) {\n      update(props);\n    }\n  }, deps); // Destroy the controllers on unmount\n\n  useEffect(() => {\n    return () => state.springs.forEach(s => s.destroy());\n  }, []);\n  const values = springs.map(s => _extends({}, s.animated));\n  return isFn ? [values, update, stop] : values;\n};\n\n/** API\n * const props = useSpring({ ... })\n * const [props, set] = useSpring(() => ({ ... }))\n */\n\nconst useSpring = (props, deps) => {\n  const isFn = is.fun(props);\n\n  const _useSprings = useSprings(1, isFn ? props : [props], deps),\n        result = _useSprings[0],\n        set = _useSprings[1],\n        stop = _useSprings[2];\n\n  return isFn ? [result[0], set, stop] : result;\n};\n\n/** API\n * const trails = useTrail(number, { ... })\n * const [trails, set] = useTrail(number, () => ({ ... }))\n */\n\nconst useTrail = (length, propsArg) => {\n  const hasNewSprings = length !== usePrev(length);\n  const isFn = is.fun(propsArg); // The `propsArg` coerced into an object\n\n  let props = isFn ? null : propsArg; // Retain the controllers so we can update them.\n\n  const springsRef = useRef([]);\n  const springs = springsRef.current;\n  if (hasNewSprings) springs.length = length; // The controllers are recreated whenever `length` changes.\n\n  const _useSprings = useSprings(length, (i, spring) => {\n    if (isFn && !props) props = callProp(propsArg) || {};\n    springs[i] = spring;\n    return _extends({}, props, {\n      config: callProp(props.config, i),\n      attach: i > 0 && (() => springs[i - 1])\n    });\n  }),\n        values = _useSprings[0],\n        animate = _useSprings[1],\n        stop = _useSprings[2];\n  /** For imperative updates to the props of all springs in the trail */\n\n\n  const update = useCallback(propsArg => animate((i, spring) => {\n    const props = callProp(propsArg, i, spring) || {};\n    const parent = springsRef.current[props.reverse ? i + 1 : i - 1];\n    return _extends({}, props, {\n      config: callProp(props.config, i),\n      attach: !!parent && (() => parent)\n    });\n  }), []); // Update the animations on re-render when `propsArg` is an object\n  // and the controllers were *not* created in the current render.\n\n  useEffect(() => {\n    if (!isFn && !hasNewSprings) {\n      update(propsArg);\n    }\n  }); // Return the update/stop functions when the `propsArg` is a function.\n\n  return isFn ? [values, update, stop] : values;\n};\n\n/** API\n * const transitions = useTransition(items, itemKeys, { ... })\n * const [transitions, update] = useTransition(items, itemKeys, () => ({ ... }))\n */\n\nlet guid = 0;\nconst INITIAL = 'initial';\nconst ENTER = 'enter';\nconst UPDATE = 'update';\nconst LEAVE = 'leave';\n\nconst makeKeys = (items, keys) => (typeof keys === 'function' ? items.map(keys) : toArray(keys)).map(String);\n\nconst makeConfig = props => {\n  let items = props.items,\n      keys = props.keys,\n      rest = _objectWithoutPropertiesLoose(props, [\"items\", \"keys\"]);\n\n  items = toArray(is.und(items) ? null : items);\n  return _extends({\n    items,\n    keys: makeKeys(items, keys)\n  }, rest);\n};\n\nfunction useTransition(input, keyTransform, props) {\n  props = makeConfig(_extends({}, props, {\n    items: input,\n    keys: keyTransform || (i => i)\n  }));\n\n  const _props = props,\n        _props$lazy = _props.lazy,\n        lazy = _props$lazy === void 0 ? false : _props$lazy,\n        _props$unique = _props.unique,\n        from = _props.from,\n        enter = _props.enter,\n        leave = _props.leave,\n        update = _props.update,\n        onDestroyed = _props.onDestroyed,\n        keys = _props.keys,\n        items = _props.items,\n        onFrame = _props.onFrame,\n        _onRest = _props.onRest,\n        onStart = _props.onStart,\n        ref = _props.ref,\n        extra = _objectWithoutPropertiesLoose(_props, [\"lazy\", \"unique\", \"from\", \"enter\", \"leave\", \"update\", \"onDestroyed\", \"keys\", \"items\", \"onFrame\", \"onRest\", \"onStart\", \"ref\"]);\n\n  const forceUpdate = useForceUpdate();\n  const mounted = useRef(false);\n  const state = useRef({\n    mounted: false,\n    first: true,\n    deleted: [],\n    current: {},\n    transitions: [],\n    prevProps: {},\n    paused: !!props.ref,\n    instances: !mounted.current && new Map(),\n    forceUpdate\n  });\n  useImperativeHandle(props.ref, () => ({\n    start: () => Promise.all(Array.from(state.current.instances).map((_ref) => {\n      let c = _ref[1];\n      return new Promise(r => c.start(r));\n    })),\n    stop: finished => Array.from(state.current.instances).forEach((_ref2) => {\n      let c = _ref2[1];\n      return c.stop(finished);\n    }),\n\n    get controllers() {\n      return Array.from(state.current.instances).map((_ref3) => {\n        let c = _ref3[1];\n        return c;\n      });\n    }\n\n  })); // Update state\n\n  state.current = diffItems(state.current, props);\n\n  if (state.current.changed) {\n    // Update state\n    state.current.transitions.forEach(transition => {\n      const phase = transition.phase,\n            key = transition.key,\n            item = transition.item,\n            props = transition.props;\n      if (!state.current.instances.has(key)) state.current.instances.set(key, new Controller()); // Avoid calling `onStart` more than once per transition.\n\n      let started = false; // update the map object\n\n      const ctrl = state.current.instances.get(key);\n\n      const itemProps = _extends({}, extra, props, {\n        ref,\n        onRest: values => {\n          if (state.current.mounted) {\n            if (transition.destroyed) {\n              // If no ref is given delete destroyed items immediately\n              if (!ref && !lazy) cleanUp(state, key);\n              if (onDestroyed) onDestroyed(item);\n            } // A transition comes to rest once all its springs conclude\n\n\n            const curInstances = Array.from(state.current.instances);\n            const active = curInstances.some((_ref4) => {\n              let c = _ref4[1];\n              return !c.idle;\n            });\n\n            if (!active && (ref || lazy) && state.current.deleted.length > 0) {\n              cleanUp(state);\n            }\n\n            if (_onRest) {\n              _onRest(item, phase, values);\n            }\n          }\n        },\n        onFrame: onFrame && (values => onFrame(item, phase, values)),\n        onStart: onStart && (animation => started || (started = (onStart(item, phase, animation), true))) // Update controller\n\n      });\n\n      ctrl.update(itemProps);\n      if (!state.current.paused) ctrl.start();\n    });\n  }\n\n  useEffect(() => {\n    state.current.mounted = mounted.current = true;\n    return () => {\n      state.current.mounted = mounted.current = false;\n      Array.from(state.current.instances).map((_ref5) => {\n        let c = _ref5[1];\n        return c.destroy();\n      });\n      state.current.instances.clear();\n    };\n  }, []);\n  return state.current.transitions.map((_ref6) => {\n    let item = _ref6.item,\n        phase = _ref6.phase,\n        key = _ref6.key;\n    return {\n      item,\n      key,\n      phase,\n      props: state.current.instances.get(key).animated\n    };\n  });\n}\n\nfunction cleanUp(_ref7, filterKey) {\n  let state = _ref7.current;\n  const deleted = state.deleted;\n\n  for (let _ref8 of deleted) {\n    let key = _ref8.key;\n\n    const filter = t => t.key !== key;\n\n    if (is.und(filterKey) || filterKey === key) {\n      state.instances.delete(key);\n      state.transitions = state.transitions.filter(filter);\n      state.deleted = state.deleted.filter(filter);\n    }\n  }\n\n  state.forceUpdate();\n}\n\nfunction diffItems(_ref9, props) {\n  let first = _ref9.first,\n      current = _ref9.current,\n      deleted = _ref9.deleted,\n      prevProps = _ref9.prevProps,\n      state = _objectWithoutPropertiesLoose(_ref9, [\"first\", \"current\", \"deleted\", \"prevProps\"]);\n\n  let items = props.items,\n      keys = props.keys,\n      initial = props.initial,\n      from = props.from,\n      enter = props.enter,\n      leave = props.leave,\n      update = props.update,\n      _props$trail = props.trail,\n      trail = _props$trail === void 0 ? 0 : _props$trail,\n      unique = props.unique,\n      config = props.config,\n      _props$order = props.order,\n      order = _props$order === void 0 ? [ENTER, LEAVE, UPDATE] : _props$order;\n\n  let _makeConfig = makeConfig(prevProps),\n      _keys = _makeConfig.keys,\n      _items = _makeConfig.items;\n\n  if (props.reset) {\n    current = {};\n    state.transitions = [];\n  } // Compare next keys with current keys\n\n\n  const currentKeys = Object.keys(current);\n  const currentSet = new Set(currentKeys);\n  const nextSet = new Set(keys);\n  const addedKeys = keys.filter(key => !currentSet.has(key));\n  const updatedKeys = update ? keys.filter(key => currentSet.has(key)) : [];\n  const deletedKeys = state.transitions.filter(t => !t.destroyed && !nextSet.has(t.originalKey)).map(t => t.originalKey);\n  let delay = -trail;\n\n  while (order.length) {\n    let phase = order.shift();\n\n    if (phase === ENTER) {\n      if (first && !is.und(initial)) {\n        phase = INITIAL;\n        from = initial;\n      }\n\n      addedKeys.forEach(key => {\n        // In unique mode, remove fading out transitions if their key comes in again\n        if (unique && deleted.find(d => d.originalKey === key)) {\n          deleted = deleted.filter(t => t.originalKey !== key);\n        }\n\n        const i = keys.indexOf(key);\n        const item = items[i];\n        const enterProps = callProp(enter, item, i);\n        current[key] = {\n          phase,\n          originalKey: key,\n          key: unique ? String(key) : guid++,\n          item,\n          props: _extends({\n            delay: delay += trail,\n            config: callProp(config, item, phase),\n            from: callProp(from, item),\n            to: enterProps\n          }, is.obj(enterProps) && interpolateTo(enterProps))\n        };\n      });\n    } else if (phase === LEAVE) {\n      deletedKeys.forEach(key => {\n        const i = _keys.indexOf(key);\n\n        const item = _items[i];\n        const leaveProps = callProp(leave, item, i);\n        deleted.push(_extends({}, current[key], {\n          phase,\n          destroyed: true,\n          left: _keys[i - 1],\n          right: _keys[i + 1],\n          props: _extends({\n            delay: delay += trail,\n            config: callProp(config, item, phase),\n            to: leaveProps\n          }, is.obj(leaveProps) && interpolateTo(leaveProps))\n        }));\n        delete current[key];\n      });\n    } else if (phase === UPDATE) {\n      updatedKeys.forEach(key => {\n        const i = keys.indexOf(key);\n        const item = items[i];\n        const updateProps = callProp(update, item, i);\n        current[key] = _extends({}, current[key], {\n          phase,\n          props: _extends({\n            delay: delay += trail,\n            config: callProp(config, item, phase),\n            to: updateProps\n          }, is.obj(updateProps) && interpolateTo(updateProps))\n        });\n      });\n    }\n  }\n\n  let out = keys.map(key => current[key]);\n  out = reconcileDeleted(deleted, out);\n  return _extends({}, state, {\n    first: first && !addedKeys.length,\n    changed: !!(addedKeys.length || deletedKeys.length || updatedKeys.length),\n    transitions: out,\n    current,\n    deleted,\n    prevProps: props\n  });\n}\n\n// The `mass` prop defaults to 1\nconst config = {\n  default: {\n    tension: 170,\n    friction: 26\n  },\n  gentle: {\n    tension: 120,\n    friction: 14\n  },\n  wobbly: {\n    tension: 180,\n    friction: 12\n  },\n  stiff: {\n    tension: 210,\n    friction: 20\n  },\n  slow: {\n    tension: 280,\n    friction: 60\n  },\n  molasses: {\n    tension: 280,\n    friction: 120\n  }\n};\n\nfunction Spring(_ref) {\n  let children = _ref.children,\n      props = _objectWithoutPropertiesLoose(_ref, [\"children\"]);\n\n  return children(useSpring(props));\n}\nfunction Trail(_ref2) {\n  let items = _ref2.items,\n      children = _ref2.children,\n      props = _objectWithoutPropertiesLoose(_ref2, [\"items\", \"children\"]);\n\n  const trails = useTrail(items.length, props);\n  return items.map((item, index) => {\n    const result = children(item, index);\n    return is.fun(result) ? result(trails[index]) : result;\n  });\n}\nfunction Transition(_ref3) {\n  let items = _ref3.items,\n      _ref3$keys = _ref3.keys,\n      keys = _ref3$keys === void 0 ? null : _ref3$keys,\n      children = _ref3.children,\n      props = _objectWithoutPropertiesLoose(_ref3, [\"items\", \"keys\", \"children\"]);\n\n  const transitions = useTransition(items, keys, props);\n  return transitions.map((_ref4, index) => {\n    let item = _ref4.item,\n        key = _ref4.key,\n        props = _ref4.props,\n        phase = _ref4.phase;\n    const result = children(item, phase, index);\n    const element = is.fun(result) ? result(props) : result;\n    return element && React.createElement(element.type, _extends({\n      key: key\n    }, element.props));\n  });\n}\n\nassign({\n  createAnimatedStyle: style => new AnimatedStyle(style),\n  createAnimatedInterpolation: function createAnimatedInterpolation$$1(parents) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return new AnimatedInterpolation(parents, args);\n  }\n});\n\n/**\n * Wraps the `style` property with `AnimatedStyle`.\n */\n\nclass AnimatedProps extends AnimatedObject {\n  constructor(props, callback) {\n    super(props.style && createAnimatedStyle ? _extends({}, props, {\n      style: createAnimatedStyle(props.style)\n    }) : props);\n    this.update = void 0;\n    this.update = callback;\n    this.attach();\n  }\n\n}\n\nconst createAnimatedComponent = Component => {\n  const AnimatedComponent = forwardRef((props, _ref) => {\n    const forceUpdate = useForceUpdate();\n    const mounted = useRef(true);\n    const propsAnimated = useRef(null);\n    const node = useRef(null);\n    const attachProps = useCallback(props => {\n      const oldPropsAnimated = propsAnimated.current;\n\n      const callback = () => {\n        if (node.current) {\n          const didUpdate = applyAnimatedValues(node.current, propsAnimated.current.getAnimatedValue());\n          if (didUpdate === false) forceUpdate();\n        }\n      };\n\n      propsAnimated.current = new AnimatedProps(props, callback);\n      oldPropsAnimated && oldPropsAnimated.detach();\n    }, []);\n    useEffect(() => () => {\n      mounted.current = false;\n      propsAnimated.current && propsAnimated.current.detach();\n    }, []);\n    useImperativeHandle(_ref, () => createAnimatedRef(node, mounted, forceUpdate));\n    attachProps(props);\n\n    const _getValue = propsAnimated.current.getValue(),\n          scrollTop = _getValue.scrollTop,\n          scrollLeft = _getValue.scrollLeft,\n          animatedProps = _objectWithoutPropertiesLoose(_getValue, [\"scrollTop\", \"scrollLeft\"]);\n\n    return React.createElement(Component, _extends({}, animatedProps, {\n      ref: childRef => node.current = handleRef(childRef, _ref)\n    }));\n  });\n  return AnimatedComponent;\n};\n// withExtend(animated, options = {})\n//\n\n/** Add an `extend` method to your `animated` factory function */\nfunction withExtend(animated, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  const self = animated;\n\n  self.extend = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    args.forEach(arg => extend(arg));\n    return self;\n  };\n\n  return self;\n\n  function extend(arg, overrideKey) {\n    // Arrays avoid passing their index to `extend`\n    if (is.arr(arg)) {\n      return arg.forEach(arg => extend(arg));\n    } // Object keys are always used over value inspection\n\n\n    if (is.obj(arg)) {\n      for (const key in arg) extend(arg[key], key);\n\n      return;\n    } // Use the `overrideKey` or inspect the value for a key\n\n\n    let key = is.str(overrideKey) ? overrideKey : is.str(arg) ? arg : arg && is.str(arg.displayName) ? arg.displayName : is.fun(arg) ? arg.name : ''; // This lowercases the first letter of the key\n\n    if (options.lowercase) {\n      key = key[0].toLowerCase() + key.slice(1);\n    } // NOTE(typescript): Properties are not yet inferred from the arguments of\n    // the `extend` method and then attached to the `animated` function via\n    // the return type.\n\n\n    self[key] = animated(arg);\n  }\n}\n\nconst elements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan']; // Extend `animated` with every available DOM element\n\nconst animated$1 = withExtend(createAnimatedComponent).extend(elements);\n/** @deprecated Use `animated.extend` instead */\n\nconst apply = animated$1.extend;\n\nlet isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  columns: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowSpan: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnSpan: true,\n  gridColumnStart: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n\nconst prefixKey = (prefix, key) => prefix + key.charAt(0).toUpperCase() + key.substring(1);\n\nconst prefixes = ['Webkit', 'Ms', 'Moz', 'O'];\nisUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => {\n  prefixes.forEach(prefix => acc[prefixKey(prefix, prop)] = acc[prop]);\n  return acc;\n}, isUnitlessNumber);\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  if (value == null || typeof value === 'boolean' || value === '') return '';\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n\n  return ('' + value).trim();\n}\n\nconst attributeCache = {};\nfunction applyAnimatedValues$1(instance, props) {\n  if (!instance.nodeType || !instance.setAttribute) {\n    return false;\n  }\n\n  const _ref = props,\n        style = _ref.style,\n        children = _ref.children,\n        scrollTop = _ref.scrollTop,\n        scrollLeft = _ref.scrollLeft,\n        attributes = _objectWithoutPropertiesLoose(_ref, [\"style\", \"children\", \"scrollTop\", \"scrollLeft\"]);\n\n  if (scrollTop !== void 0) instance.scrollTop = scrollTop;\n  if (scrollLeft !== void 0) instance.scrollLeft = scrollLeft; // Set textContent, if children is an animatable value\n\n  if (children !== void 0) instance.textContent = children; // Apply CSS styles\n\n  for (let styleName in style) {\n    if (!style.hasOwnProperty(styleName)) continue;\n    var isCustomProperty = styleName.indexOf('--') === 0;\n    var styleValue = dangerousStyleValue(styleName, style[styleName], isCustomProperty);\n    if (styleName === 'float') styleName = 'cssFloat';\n    if (isCustomProperty) instance.style.setProperty(styleName, styleValue);else instance.style[styleName] = styleValue;\n  }\n\n  const isFilterElement = instance.nodeName === 'filter' || instance.parentNode && instance.parentNode.nodeName === 'filter'; // Apply DOM attributes\n\n  for (let name in attributes) {\n    // Attributes are written in dash case\n    const attributeName = isFilterElement || instance.hasAttribute(name) ? name : attributeCache[name] || (attributeCache[name] = name.replace(/([A-Z])/g, n => '-' + n.toLowerCase()));\n    instance.setAttribute(attributeName, attributes[name]);\n  }\n}\n\n// const INTEGER = '[-+]?\\\\d+';\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call() {\n  for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n    parts[_key] = arguments[_key];\n  }\n\n  return '\\\\(\\\\s*(' + parts.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\nconst rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));\nconst hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));\nconst hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));\nconst hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex6 = /^#([0-9a-fA-F]{6})$/;\nconst hex8 = /^#([0-9a-fA-F]{8})$/;\n\n// http://www.w3.org/TR/css3-color/#svg-color\nconst colors = {\n  transparent: 0x00000000,\n  aliceblue: 0xf0f8ffff,\n  antiquewhite: 0xfaebd7ff,\n  aqua: 0x00ffffff,\n  aquamarine: 0x7fffd4ff,\n  azure: 0xf0ffffff,\n  beige: 0xf5f5dcff,\n  bisque: 0xffe4c4ff,\n  black: 0x000000ff,\n  blanchedalmond: 0xffebcdff,\n  blue: 0x0000ffff,\n  blueviolet: 0x8a2be2ff,\n  brown: 0xa52a2aff,\n  burlywood: 0xdeb887ff,\n  burntsienna: 0xea7e5dff,\n  cadetblue: 0x5f9ea0ff,\n  chartreuse: 0x7fff00ff,\n  chocolate: 0xd2691eff,\n  coral: 0xff7f50ff,\n  cornflowerblue: 0x6495edff,\n  cornsilk: 0xfff8dcff,\n  crimson: 0xdc143cff,\n  cyan: 0x00ffffff,\n  darkblue: 0x00008bff,\n  darkcyan: 0x008b8bff,\n  darkgoldenrod: 0xb8860bff,\n  darkgray: 0xa9a9a9ff,\n  darkgreen: 0x006400ff,\n  darkgrey: 0xa9a9a9ff,\n  darkkhaki: 0xbdb76bff,\n  darkmagenta: 0x8b008bff,\n  darkolivegreen: 0x556b2fff,\n  darkorange: 0xff8c00ff,\n  darkorchid: 0x9932ccff,\n  darkred: 0x8b0000ff,\n  darksalmon: 0xe9967aff,\n  darkseagreen: 0x8fbc8fff,\n  darkslateblue: 0x483d8bff,\n  darkslategray: 0x2f4f4fff,\n  darkslategrey: 0x2f4f4fff,\n  darkturquoise: 0x00ced1ff,\n  darkviolet: 0x9400d3ff,\n  deeppink: 0xff1493ff,\n  deepskyblue: 0x00bfffff,\n  dimgray: 0x696969ff,\n  dimgrey: 0x696969ff,\n  dodgerblue: 0x1e90ffff,\n  firebrick: 0xb22222ff,\n  floralwhite: 0xfffaf0ff,\n  forestgreen: 0x228b22ff,\n  fuchsia: 0xff00ffff,\n  gainsboro: 0xdcdcdcff,\n  ghostwhite: 0xf8f8ffff,\n  gold: 0xffd700ff,\n  goldenrod: 0xdaa520ff,\n  gray: 0x808080ff,\n  green: 0x008000ff,\n  greenyellow: 0xadff2fff,\n  grey: 0x808080ff,\n  honeydew: 0xf0fff0ff,\n  hotpink: 0xff69b4ff,\n  indianred: 0xcd5c5cff,\n  indigo: 0x4b0082ff,\n  ivory: 0xfffff0ff,\n  khaki: 0xf0e68cff,\n  lavender: 0xe6e6faff,\n  lavenderblush: 0xfff0f5ff,\n  lawngreen: 0x7cfc00ff,\n  lemonchiffon: 0xfffacdff,\n  lightblue: 0xadd8e6ff,\n  lightcoral: 0xf08080ff,\n  lightcyan: 0xe0ffffff,\n  lightgoldenrodyellow: 0xfafad2ff,\n  lightgray: 0xd3d3d3ff,\n  lightgreen: 0x90ee90ff,\n  lightgrey: 0xd3d3d3ff,\n  lightpink: 0xffb6c1ff,\n  lightsalmon: 0xffa07aff,\n  lightseagreen: 0x20b2aaff,\n  lightskyblue: 0x87cefaff,\n  lightslategray: 0x778899ff,\n  lightslategrey: 0x778899ff,\n  lightsteelblue: 0xb0c4deff,\n  lightyellow: 0xffffe0ff,\n  lime: 0x00ff00ff,\n  limegreen: 0x32cd32ff,\n  linen: 0xfaf0e6ff,\n  magenta: 0xff00ffff,\n  maroon: 0x800000ff,\n  mediumaquamarine: 0x66cdaaff,\n  mediumblue: 0x0000cdff,\n  mediumorchid: 0xba55d3ff,\n  mediumpurple: 0x9370dbff,\n  mediumseagreen: 0x3cb371ff,\n  mediumslateblue: 0x7b68eeff,\n  mediumspringgreen: 0x00fa9aff,\n  mediumturquoise: 0x48d1ccff,\n  mediumvioletred: 0xc71585ff,\n  midnightblue: 0x191970ff,\n  mintcream: 0xf5fffaff,\n  mistyrose: 0xffe4e1ff,\n  moccasin: 0xffe4b5ff,\n  navajowhite: 0xffdeadff,\n  navy: 0x000080ff,\n  oldlace: 0xfdf5e6ff,\n  olive: 0x808000ff,\n  olivedrab: 0x6b8e23ff,\n  orange: 0xffa500ff,\n  orangered: 0xff4500ff,\n  orchid: 0xda70d6ff,\n  palegoldenrod: 0xeee8aaff,\n  palegreen: 0x98fb98ff,\n  paleturquoise: 0xafeeeeff,\n  palevioletred: 0xdb7093ff,\n  papayawhip: 0xffefd5ff,\n  peachpuff: 0xffdab9ff,\n  peru: 0xcd853fff,\n  pink: 0xffc0cbff,\n  plum: 0xdda0ddff,\n  powderblue: 0xb0e0e6ff,\n  purple: 0x800080ff,\n  rebeccapurple: 0x663399ff,\n  red: 0xff0000ff,\n  rosybrown: 0xbc8f8fff,\n  royalblue: 0x4169e1ff,\n  saddlebrown: 0x8b4513ff,\n  salmon: 0xfa8072ff,\n  sandybrown: 0xf4a460ff,\n  seagreen: 0x2e8b57ff,\n  seashell: 0xfff5eeff,\n  sienna: 0xa0522dff,\n  silver: 0xc0c0c0ff,\n  skyblue: 0x87ceebff,\n  slateblue: 0x6a5acdff,\n  slategray: 0x708090ff,\n  slategrey: 0x708090ff,\n  snow: 0xfffafaff,\n  springgreen: 0x00ff7fff,\n  steelblue: 0x4682b4ff,\n  tan: 0xd2b48cff,\n  teal: 0x008080ff,\n  thistle: 0xd8bfd8ff,\n  tomato: 0xff6347ff,\n  turquoise: 0x40e0d0ff,\n  violet: 0xee82eeff,\n  wheat: 0xf5deb3ff,\n  white: 0xffffffff,\n  whitesmoke: 0xf5f5f5ff,\n  yellow: 0xffff00ff,\n  yellowgreen: 0x9acd32ff\n};\n\n/*\nhttps://github.com/react-community/normalize-css-color\n\nBSD 3-Clause License\n\nCopyright (c) 2016, React Community\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nfunction normalizeColor(color) {\n  let match;\n\n  if (typeof color === 'number') {\n    return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;\n  } // Ordered based on occurrences on Facebook codebase\n\n\n  if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;\n  if (colors.hasOwnProperty(color)) return colors[color];\n\n  if (match = rgb.exec(color)) {\n    return (parse255(match[1]) << 24 | // r\n    parse255(match[2]) << 16 | // g\n    parse255(match[3]) << 8 | // b\n    0x000000ff) >>> // a\n    0;\n  }\n\n  if (match = rgba.exec(color)) {\n    return (parse255(match[1]) << 24 | // r\n    parse255(match[2]) << 16 | // g\n    parse255(match[3]) << 8 | // b\n    parse1(match[4])) >>> // a\n    0;\n  }\n\n  if (match = hex3.exec(color)) {\n    return parseInt(match[1] + match[1] + // r\n    match[2] + match[2] + // g\n    match[3] + match[3] + // b\n    'ff', // a\n    16) >>> 0;\n  } // https://drafts.csswg.org/css-color-4/#hex-notation\n\n\n  if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n\n  if (match = hex4.exec(color)) {\n    return parseInt(match[1] + match[1] + // r\n    match[2] + match[2] + // g\n    match[3] + match[3] + // b\n    match[4] + match[4], // a\n    16) >>> 0;\n  }\n\n  if (match = hsl.exec(color)) {\n    return (hslToRgb(parse360(match[1]), // h\n    parsePercentage(match[2]), // s\n    parsePercentage(match[3]) // l\n    ) | 0x000000ff) >>> // a\n    0;\n  }\n\n  if (match = hsla.exec(color)) {\n    return (hslToRgb(parse360(match[1]), // h\n    parsePercentage(match[2]), // s\n    parsePercentage(match[3]) // l\n    ) | parse1(match[4])) >>> // a\n    0;\n  }\n\n  return null;\n}\n\nfunction hue2rgb(p, q, t) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n  return p;\n}\n\nfunction hslToRgb(h, s, l) {\n  const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n  const p = 2 * l - q;\n  const r = hue2rgb(p, q, h + 1 / 3);\n  const g = hue2rgb(p, q, h);\n  const b = hue2rgb(p, q, h - 1 / 3);\n  return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\n\nfunction parse255(str) {\n  const int = parseInt(str, 10);\n  if (int < 0) return 0;\n  if (int > 255) return 255;\n  return int;\n}\n\nfunction parse360(str) {\n  const int = parseFloat(str);\n  return (int % 360 + 360) % 360 / 360;\n}\n\nfunction parse1(str) {\n  const num = parseFloat(str);\n  if (num < 0) return 0;\n  if (num > 1) return 255;\n  return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n  // parseFloat conveniently ignores the final %\n  const int = parseFloat(str);\n  if (int < 0) return 0;\n  if (int > 100) return 1;\n  return int / 100;\n}\n\nfunction colorToRgba(input) {\n  let int32Color = normalizeColor(input);\n  if (int32Color === null) return input;\n  int32Color = int32Color || 0;\n  let r = (int32Color & 0xff000000) >>> 24;\n  let g = (int32Color & 0x00ff0000) >>> 16;\n  let b = (int32Color & 0x0000ff00) >>> 8;\n  let a = (int32Color & 0x000000ff) / 255;\n  return `rgba(${r}, ${g}, ${b}, ${a})`;\n} // Problem: https://github.com/animatedjs/animated/pull/102\n// Solution: https://stackoverflow.com/questions/638565/parsing-scientific-notation-sensibly/658662\n\n\nconst stringShapeRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g; // Covers rgb, rgba, hsl, hsla\n// Taken from https://gist.github.com/olmokramer/82ccce673f86db7cda5e\n\nconst colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi; // Covers color names (transparent, blue, etc.)\n\nconst colorNamesRegex = new RegExp(`(${Object.keys(colors).join('|')})`, 'g');\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape.  Supports\n * things like:\n *\n *   rgba(123, 42, 99, 0.36)           // colors\n *   -45deg                            // values with units\n *   0 2px 2px 0px rgba(0, 0, 0, 0.12) // box shadows\n */\n\nconst createStringInterpolator$1 = config => {\n  // Replace colors with rgba\n  const outputRange = config.output.map(rangeValue => rangeValue.replace(colorRegex, colorToRgba)).map(rangeValue => rangeValue.replace(colorNamesRegex, colorToRgba));\n  const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n  outputRange.forEach(value => {\n    value.match(stringShapeRegex).forEach((number, i) => outputRanges[i].push(+number));\n  });\n  const interpolations = outputRange[0].match(stringShapeRegex).map((_value, i) => createInterpolator(_extends({}, config, {\n    output: outputRanges[i]\n  })));\n  return input => {\n    let i = 0;\n    return outputRange[0] // 'rgba(0, 100, 200, 0)'\n    // ->\n    // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n    .replace(stringShapeRegex, () => interpolations[i++](input)) // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n    // round the opacity (4th column).\n    .replace(/rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi, (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`);\n  };\n};\n\nassign({\n  defaultElement: 'div',\n  colorNames: colors,\n  applyAnimatedValues: applyAnimatedValues$1,\n  createStringInterpolator: createStringInterpolator$1\n});\n\nexport { useChain, useSpring, useSprings, useTrail, useTransition, config, createAnimatedInterpolation as interpolate, Controller, Spring, Trail, Transition, animated$1 as animated, animated$1 as a, apply, Globals };\n","import React from 'react';\nimport ThemeContext from './ThemeContext';\nexport default function useTheme() {\n  return React.useContext(ThemeContext);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Paper from '../Paper';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    overflow: 'hidden'\n  }\n};\nvar Card = React.forwardRef(function Card(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$raised = props.raised,\n      raised = _props$raised === void 0 ? false : _props$raised,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"raised\"]);\n\n  return React.createElement(Paper, _extends({\n    className: clsx(classes.root, className),\n    elevation: raised ? 8 : 1,\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Card.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the card will use raised styling.\n   */\n  raised: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCard'\n})(Card);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nimport { darken, lighten } from '../styles/colorManipulator';\nimport useTheme from '../styles/useTheme';\nvar TRANSITION_DURATION = 4; // seconds\n\nexport var styles = function styles(theme) {\n  var getColor = function getColor(color) {\n    return theme.palette.type === 'light' ? lighten(color, 0.62) : darken(color, 0.5);\n  };\n\n  var backgroundPrimary = getColor(theme.palette.primary.main);\n  var backgroundSecondary = getColor(theme.palette.secondary.main);\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      overflow: 'hidden',\n      height: 4\n    },\n\n    /* Styles applied to the root and bar2 element if `color=\"primary\"`; bar2 if `variant=\"buffer\"`. */\n    colorPrimary: {\n      backgroundColor: backgroundPrimary\n    },\n\n    /* Styles applied to the root and bar2 elements if `color=\"secondary\"`; bar2 if `variant=\"buffer\"`. */\n    colorSecondary: {\n      backgroundColor: backgroundSecondary\n    },\n\n    /* Styles applied to the root element if `variant=\"determinate\"`. */\n    determinate: {},\n\n    /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n    indeterminate: {},\n\n    /* Styles applied to the root element if `variant=\"buffer\"`. */\n    buffer: {\n      backgroundColor: 'transparent'\n    },\n\n    /* Styles applied to the root element if `variant=\"query\"`. */\n    query: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the additional bar element if `variant=\"buffer\"`. */\n    dashed: {\n      position: 'absolute',\n      marginTop: 0,\n      height: '100%',\n      width: '100%',\n      animation: '$buffer 3s infinite linear'\n    },\n\n    /* Styles applied to the additional bar element if `variant=\"buffer\"` and `color=\"primary\"`. */\n    dashedColorPrimary: {\n      backgroundImage: \"radial-gradient(\".concat(backgroundPrimary, \" 0%, \").concat(backgroundPrimary, \" 16%, transparent 42%)\"),\n      backgroundSize: '10px 10px',\n      backgroundPosition: '0px -23px'\n    },\n\n    /* Styles applied to the additional bar element if `variant=\"buffer\"` and `color=\"secondary\"`. */\n    dashedColorSecondary: {\n      backgroundImage: \"radial-gradient(\".concat(backgroundSecondary, \" 0%, \").concat(backgroundSecondary, \" 16%, transparent 42%)\"),\n      backgroundSize: '10px 10px',\n      backgroundPosition: '0px -23px'\n    },\n\n    /* Styles applied to the layered bar1 and bar2 elements. */\n    bar: {\n      width: '100%',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      top: 0,\n      transition: 'transform 0.2s linear',\n      transformOrigin: 'left'\n    },\n\n    /* Styles applied to the bar elements if `color=\"primary\"`; bar2 if `variant` not \"buffer\". */\n    barColorPrimary: {\n      backgroundColor: theme.palette.primary.main\n    },\n\n    /* Styles applied to the bar elements if `color=\"secondary\"`; bar2 if `variant` not \"buffer\". */\n    barColorSecondary: {\n      backgroundColor: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the bar1 element if `variant=\"indeterminate or query\"`. */\n    bar1Indeterminate: {\n      width: 'auto',\n      animation: '$indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite'\n    },\n\n    /* Styles applied to the bar1 element if `variant=\"determinate\"`. */\n    bar1Determinate: {\n      transition: \"transform .\".concat(TRANSITION_DURATION, \"s linear\")\n    },\n\n    /* Styles applied to the bar1 element if `variant=\"buffer\"`. */\n    bar1Buffer: {\n      zIndex: 1,\n      transition: \"transform .\".concat(TRANSITION_DURATION, \"s linear\")\n    },\n\n    /* Styles applied to the bar2 element if `variant=\"indeterminate or query\"`. */\n    bar2Indeterminate: {\n      width: 'auto',\n      animation: '$indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite'\n    },\n\n    /* Styles applied to the bar2 element if `variant=\"buffer\"`. */\n    bar2Buffer: {\n      transition: \"transform .\".concat(TRANSITION_DURATION, \"s linear\")\n    },\n    // Legends:\n    // || represents the viewport\n    // -  represents a light background\n    // x  represents a dark background\n    '@keyframes indeterminate1': {\n      //  |-----|---x-||-----||-----|\n      '0%': {\n        left: '-35%',\n        right: '100%'\n      },\n      //  |-----|-----||-----||xxxx-|\n      '60%': {\n        left: '100%',\n        right: '-90%'\n      },\n      '100%': {\n        left: '100%',\n        right: '-90%'\n      }\n    },\n    '@keyframes indeterminate2': {\n      //  |xxxxx|xxxxx||-----||-----|\n      '0%': {\n        left: '-200%',\n        right: '100%'\n      },\n      //  |-----|-----||-----||-x----|\n      '60%': {\n        left: '107%',\n        right: '-8%'\n      },\n      '100%': {\n        left: '107%',\n        right: '-8%'\n      }\n    },\n    '@keyframes buffer': {\n      '0%': {\n        opacity: 1,\n        backgroundPosition: '0px -23px'\n      },\n      '50%': {\n        opacity: 0,\n        backgroundPosition: '0px -23px'\n      },\n      '100%': {\n        opacity: 1,\n        backgroundPosition: '-200px -23px'\n      }\n    }\n  };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar LinearProgress = React.forwardRef(function LinearProgress(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      value = props.value,\n      valueBuffer = props.valueBuffer,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'indeterminate' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"value\", \"valueBuffer\", \"variant\"]);\n\n  var theme = useTheme();\n  var rootProps = {};\n  var inlineStyles = {\n    bar1: {},\n    bar2: {}\n  };\n\n  if (variant === 'determinate' || variant === 'buffer') {\n    if (value !== undefined) {\n      rootProps['aria-valuenow'] = Math.round(value);\n      var transform = value - 100;\n\n      if (theme.direction === 'rtl') {\n        transform = -transform;\n      }\n\n      inlineStyles.bar1.transform = \"translateX(\".concat(transform, \"%)\");\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('Material-UI: you need to provide a value prop ' + 'when using the determinate or buffer variant of LinearProgress .');\n    }\n  }\n\n  if (variant === 'buffer') {\n    if (valueBuffer !== undefined) {\n      var _transform = (valueBuffer || 0) - 100;\n\n      if (theme.direction === 'rtl') {\n        _transform = -_transform;\n      }\n\n      inlineStyles.bar2.transform = \"translateX(\".concat(_transform, \"%)\");\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('Material-UI: you need to provide a valueBuffer prop ' + 'when using the buffer variant of LinearProgress.');\n    }\n  }\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(color))], className, {\n      determinate: classes.determinate,\n      indeterminate: classes.indeterminate,\n      buffer: classes.buffer,\n      query: classes.query\n    }[variant]),\n    role: \"progressbar\"\n  }, rootProps, {\n    ref: ref\n  }, other), variant === 'buffer' ? React.createElement(\"div\", {\n    className: clsx(classes.dashed, classes[\"dashedColor\".concat(capitalize(color))])\n  }) : null, React.createElement(\"div\", {\n    className: clsx(classes.bar, classes[\"barColor\".concat(capitalize(color))], (variant === 'indeterminate' || variant === 'query') && classes.bar1Indeterminate, {\n      determinate: classes.bar1Determinate,\n      buffer: classes.bar1Buffer\n    }[variant]),\n    style: inlineStyles.bar1\n  }), variant === 'determinate' ? null : React.createElement(\"div\", {\n    className: clsx(classes.bar, (variant === 'indeterminate' || variant === 'query') && classes.bar2Indeterminate, variant === 'buffer' ? [classes[\"color\".concat(capitalize(color))], classes.bar2Buffer] : classes[\"barColor\".concat(capitalize(color))]),\n    style: inlineStyles.bar2\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? LinearProgress.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The value of the progress indicator for the determinate and buffer variants.\n   * Value between 0 and 100.\n   */\n  value: PropTypes.number,\n\n  /**\n   * The value for the buffer variant.\n   * Value between 0 and 100.\n   */\n  valueBuffer: PropTypes.number,\n\n  /**\n   * The variant to use.\n   * Use indeterminate or query when there is no progress value.\n   */\n  variant: PropTypes.oneOf(['determinate', 'indeterminate', 'buffer', 'query'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiLinearProgress'\n})(LinearProgress);","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Popper from '@material-ui/core/Popper';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport Paper from '@material-ui/core/Paper';\nimport IconButton from '@material-ui/core/IconButton';\nimport Chip from '@material-ui/core/Chip';\nimport CloseIcon from '../internal/svg-icons/Close';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport useAutocomplete, { createFilterOptions } from '../useAutocomplete';\nexport { createFilterOptions };\nexport var styles = function styles(theme) {\n  var _option;\n\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      '&:hover $clearIndicatorDirty, &$focused $clearIndicatorDirty': {\n        visibility: 'visible'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if focused. */\n    focused: {},\n\n    /* Styles applied to the tag elements, e.g. the chips. */\n    tag: {\n      margin: 3,\n      maxWidth: 'calc(100% - 6px)'\n    },\n\n    /* Styles applied to the tag elements, e.g. the chips if `size=\"small\"`. */\n    tagSizeSmall: {\n      margin: 2,\n      maxWidth: 'calc(100% - 4px)'\n    },\n\n    /* Styles applied when the popup icon is rendered. */\n    hasPopupIcon: {},\n\n    /* Styles applied when the clear icon is rendered. */\n    hasClearIcon: {},\n\n    /* Styles applied to the Input element. */\n    inputRoot: {\n      flexWrap: 'wrap',\n      '$hasPopupIcon &, $hasClearIcon &': {\n        paddingRight: 26 + 4\n      },\n      '$hasPopupIcon$hasClearIcon &': {\n        paddingRight: 52 + 4\n      },\n      '& $input': {\n        width: 0,\n        minWidth: 30\n      },\n      '&[class*=\"MuiInput-root\"]': {\n        paddingBottom: 1,\n        '& $input': {\n          padding: 4\n        },\n        '& $input:first-child': {\n          padding: '6px 0'\n        }\n      },\n      '&[class*=\"MuiInput-root\"][class*=\"MuiInput-marginDense\"]': {\n        '& $input': {\n          padding: '4px 4px 5px'\n        },\n        '& $input:first-child': {\n          padding: '3px 0 6px'\n        }\n      },\n      '&[class*=\"MuiOutlinedInput-root\"]': {\n        padding: 9,\n        '$hasPopupIcon &, $hasClearIcon &': {\n          paddingRight: 26 + 4 + 9\n        },\n        '$hasPopupIcon$hasClearIcon &': {\n          paddingRight: 52 + 4 + 9\n        },\n        '& $input': {\n          padding: '9.5px 4px'\n        },\n        '& $input:first-child': {\n          paddingLeft: 6\n        },\n        '& $endAdornment': {\n          right: 9\n        }\n      },\n      '&[class*=\"MuiOutlinedInput-root\"][class*=\"MuiOutlinedInput-marginDense\"]': {\n        padding: 6,\n        '& $input': {\n          padding: '4.5px 4px'\n        }\n      },\n      '&[class*=\"MuiFilledInput-root\"]': {\n        paddingTop: 19,\n        paddingLeft: 8,\n        '$hasPopupIcon &, $hasClearIcon &': {\n          paddingRight: 26 + 4 + 9\n        },\n        '$hasPopupIcon$hasClearIcon &': {\n          paddingRight: 52 + 4 + 9\n        },\n        '& $input': {\n          padding: '9px 4px'\n        },\n        '& $endAdornment': {\n          right: 9\n        }\n      },\n      '&[class*=\"MuiFilledInput-root\"][class*=\"MuiFilledInput-marginDense\"]': {\n        paddingBottom: 1,\n        '& $input': {\n          padding: '4.5px 4px'\n        }\n      }\n    },\n\n    /* Styles applied to the input element. */\n    input: {\n      flexGrow: 1,\n      textOverflow: 'ellipsis',\n      opacity: 0\n    },\n\n    /* Styles applied to the input element if tag focused. */\n    inputFocused: {\n      opacity: 1\n    },\n\n    /* Styles applied to the endAdornment element. */\n    endAdornment: {\n      // We use a position absolute to support wrapping tags.\n      position: 'absolute',\n      right: 0,\n      top: 'calc(50% - 14px)' // Center vertically\n\n    },\n\n    /* Styles applied to the clear indictator. */\n    clearIndicator: {\n      marginRight: -2,\n      padding: 4,\n      color: theme.palette.action.active,\n      visibility: 'hidden'\n    },\n\n    /* Styles applied to the clear indictator if the input is dirty. */\n    clearIndicatorDirty: {},\n\n    /* Styles applied to the popup indictator. */\n    popupIndicator: {\n      padding: 2,\n      marginRight: -2,\n      color: theme.palette.action.active\n    },\n\n    /* Styles applied to the popup indictator if the popup is open. */\n    popupIndicatorOpen: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the popper element. */\n    popper: {\n      zIndex: theme.zIndex.modal\n    },\n\n    /* Styles applied to the popper element if `disablePortal={true}`. */\n    popperDisablePortal: {\n      position: 'absolute'\n    },\n\n    /* Styles applied to the `Paper` component. */\n    paper: _extends({}, theme.typography.body1, {\n      overflow: 'hidden',\n      margin: '4px 0',\n      '& > ul': {\n        maxHeight: '40vh',\n        overflow: 'auto'\n      }\n    }),\n\n    /* Styles applied to the `listbox` component. */\n    listbox: {\n      listStyle: 'none',\n      margin: 0,\n      padding: '8px 0px',\n      position: 'relative'\n    },\n\n    /* Styles applied to the loading wrapper. */\n    loading: {\n      color: theme.palette.text.secondary,\n      padding: '14px 16px'\n    },\n\n    /* Styles applied to the no option wrapper. */\n    noOptions: {\n      color: theme.palette.text.secondary,\n      padding: '14px 16px'\n    },\n\n    /* Styles applied to the option elements. */\n    option: (_option = {\n      minHeight: 48,\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n      cursor: 'pointer',\n      paddingTop: 6,\n      boxSizing: 'border-box',\n      outline: '0',\n      WebkitTapHighlightColor: 'transparent',\n      paddingBottom: 6,\n      paddingLeft: 16,\n      paddingRight: 16\n    }, _defineProperty(_option, theme.breakpoints.up('sm'), {\n      minHeight: 'auto'\n    }), _defineProperty(_option, '&[aria-selected=\"true\"]', {\n      backgroundColor: theme.palette.action.selected\n    }), _defineProperty(_option, '&[data-focus=\"true\"]', {\n      backgroundColor: theme.palette.action.hover\n    }), _defineProperty(_option, '&[aria-disabled=\"true\"]', {\n      opacity: 0.5,\n      pointerEvents: 'none'\n    }), _defineProperty(_option, '&:active', {\n      backgroundColor: theme.palette.action.selected\n    }), _option),\n\n    /* Styles applied to the group's label elements. */\n    groupLabel: {\n      backgroundColor: theme.palette.background.paper,\n      top: -8\n    },\n\n    /* Styles applied to the group's ul elements. */\n    groupUl: {\n      padding: 0\n    }\n  };\n};\n\nfunction DisablePortal(props) {\n  // eslint-disable-next-line react/prop-types\n  var anchorEl = props.anchorEl,\n      open = props.open,\n      other = _objectWithoutProperties(props, [\"anchorEl\", \"open\"]);\n\n  return React.createElement(\"div\", other);\n}\n\nvar _ref = React.createElement(CloseIcon, {\n  fontSize: \"small\"\n});\n\nvar _ref2 = React.createElement(ArrowDropDownIcon, null);\n\nvar Autocomplete = React.forwardRef(function Autocomplete(props, ref) {\n  /* eslint-disable no-unused-vars */\n  var _props$autoComplete = props.autoComplete,\n      autoComplete = _props$autoComplete === void 0 ? false : _props$autoComplete,\n      _props$autoHighlight = props.autoHighlight,\n      autoHighlight = _props$autoHighlight === void 0 ? false : _props$autoHighlight,\n      _props$autoSelect = props.autoSelect,\n      autoSelect = _props$autoSelect === void 0 ? false : _props$autoSelect,\n      _props$blurOnSelect = props.blurOnSelect,\n      blurOnSelect = _props$blurOnSelect === void 0 ? false : _props$blurOnSelect,\n      ChipProps = props.ChipProps,\n      classes = props.classes,\n      className = props.className,\n      _props$clearOnEscape = props.clearOnEscape,\n      clearOnEscape = _props$clearOnEscape === void 0 ? false : _props$clearOnEscape,\n      _props$clearText = props.clearText,\n      clearText = _props$clearText === void 0 ? 'Clear' : _props$clearText,\n      _props$closeIcon = props.closeIcon,\n      closeIcon = _props$closeIcon === void 0 ? _ref : _props$closeIcon,\n      _props$closeText = props.closeText,\n      closeText = _props$closeText === void 0 ? 'Close' : _props$closeText,\n      _props$debug = props.debug,\n      debug = _props$debug === void 0 ? false : _props$debug,\n      defaultValue = props.defaultValue,\n      _props$disableClearab = props.disableClearable,\n      disableClearable = _props$disableClearab === void 0 ? false : _props$disableClearab,\n      _props$disableCloseOn = props.disableCloseOnSelect,\n      disableCloseOnSelect = _props$disableCloseOn === void 0 ? false : _props$disableCloseOn,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      _props$disableOpenOnF = props.disableOpenOnFocus,\n      disableOpenOnFocus = _props$disableOpenOnF === void 0 ? false : _props$disableOpenOnF,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      filterOptions = props.filterOptions,\n      _props$filterSelected = props.filterSelectedOptions,\n      filterSelectedOptions = _props$filterSelected === void 0 ? false : _props$filterSelected,\n      _props$forcePopupIcon = props.forcePopupIcon,\n      forcePopupIcon = _props$forcePopupIcon === void 0 ? 'auto' : _props$forcePopupIcon,\n      _props$freeSolo = props.freeSolo,\n      freeSolo = _props$freeSolo === void 0 ? false : _props$freeSolo,\n      getOptionDisabled = props.getOptionDisabled,\n      _props$getOptionLabel = props.getOptionLabel,\n      getOptionLabel = _props$getOptionLabel === void 0 ? function (x) {\n    return x;\n  } : _props$getOptionLabel,\n      getOptionSelected = props.getOptionSelected,\n      groupBy = props.groupBy,\n      idProp = props.id,\n      _props$includeInputIn = props.includeInputInList,\n      includeInputInList = _props$includeInputIn === void 0 ? false : _props$includeInputIn,\n      inputValueProp = props.inputValue,\n      _props$ListboxCompone = props.ListboxComponent,\n      ListboxComponent = _props$ListboxCompone === void 0 ? 'ul' : _props$ListboxCompone,\n      ListboxProps = props.ListboxProps,\n      _props$loading = props.loading,\n      loading = _props$loading === void 0 ? false : _props$loading,\n      _props$loadingText = props.loadingText,\n      loadingText = _props$loadingText === void 0 ? 'Loading…' : _props$loadingText,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      _props$noOptionsText = props.noOptionsText,\n      noOptionsText = _props$noOptionsText === void 0 ? 'No options' : _props$noOptionsText,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onInputChange = props.onInputChange,\n      onOpen = props.onOpen,\n      open = props.open,\n      _props$openText = props.openText,\n      openText = _props$openText === void 0 ? 'Open' : _props$openText,\n      _props$options = props.options,\n      options = _props$options === void 0 ? [] : _props$options,\n      _props$PaperComponent = props.PaperComponent,\n      PaperComponent = _props$PaperComponent === void 0 ? Paper : _props$PaperComponent,\n      _props$PopperComponen = props.PopperComponent,\n      PopperComponentProp = _props$PopperComponen === void 0 ? Popper : _props$PopperComponen,\n      _props$popupIcon = props.popupIcon,\n      popupIcon = _props$popupIcon === void 0 ? _ref2 : _props$popupIcon,\n      renderGroupProp = props.renderGroup,\n      renderInput = props.renderInput,\n      renderOptionProp = props.renderOption,\n      renderTags = props.renderTags,\n      _props$selectOnFocus = props.selectOnFocus,\n      selectOnFocus = _props$selectOnFocus === void 0 ? !props.freeSolo : _props$selectOnFocus,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      valueProp = props.value,\n      other = _objectWithoutProperties(props, [\"autoComplete\", \"autoHighlight\", \"autoSelect\", \"blurOnSelect\", \"ChipProps\", \"classes\", \"className\", \"clearOnEscape\", \"clearText\", \"closeIcon\", \"closeText\", \"debug\", \"defaultValue\", \"disableClearable\", \"disableCloseOnSelect\", \"disabled\", \"disableListWrap\", \"disableOpenOnFocus\", \"disablePortal\", \"filterOptions\", \"filterSelectedOptions\", \"forcePopupIcon\", \"freeSolo\", \"getOptionDisabled\", \"getOptionLabel\", \"getOptionSelected\", \"groupBy\", \"id\", \"includeInputInList\", \"inputValue\", \"ListboxComponent\", \"ListboxProps\", \"loading\", \"loadingText\", \"multiple\", \"noOptionsText\", \"onChange\", \"onClose\", \"onInputChange\", \"onOpen\", \"open\", \"openText\", \"options\", \"PaperComponent\", \"PopperComponent\", \"popupIcon\", \"renderGroup\", \"renderInput\", \"renderOption\", \"renderTags\", \"selectOnFocus\", \"size\", \"value\"]);\n  /* eslint-enable no-unused-vars */\n\n\n  var PopperComponent = disablePortal ? DisablePortal : PopperComponentProp;\n\n  var _useAutocomplete = useAutocomplete(_extends({}, props, {\n    componentName: 'Autocomplete'\n  })),\n      getRootProps = _useAutocomplete.getRootProps,\n      getInputProps = _useAutocomplete.getInputProps,\n      getInputLabelProps = _useAutocomplete.getInputLabelProps,\n      getPopupIndicatorProps = _useAutocomplete.getPopupIndicatorProps,\n      getClearProps = _useAutocomplete.getClearProps,\n      getTagProps = _useAutocomplete.getTagProps,\n      getListboxProps = _useAutocomplete.getListboxProps,\n      getOptionProps = _useAutocomplete.getOptionProps,\n      value = _useAutocomplete.value,\n      dirty = _useAutocomplete.dirty,\n      id = _useAutocomplete.id,\n      popupOpen = _useAutocomplete.popupOpen,\n      focused = _useAutocomplete.focused,\n      focusedTag = _useAutocomplete.focusedTag,\n      anchorEl = _useAutocomplete.anchorEl,\n      setAnchorEl = _useAutocomplete.setAnchorEl,\n      inputValue = _useAutocomplete.inputValue,\n      groupedOptions = _useAutocomplete.groupedOptions;\n\n  var startAdornment;\n\n  if (multiple && value.length > 0) {\n    var getCustomizedTagProps = function getCustomizedTagProps(params) {\n      return _extends({\n        className: clsx(classes.tag, {\n          small: classes.tagSizeSmall\n        }[size]),\n        disabled: disabled\n      }, getTagProps(params));\n    };\n\n    if (renderTags) {\n      startAdornment = renderTags(value, getCustomizedTagProps);\n    } else {\n      startAdornment = value.map(function (option, index) {\n        return React.createElement(Chip, _extends({\n          label: getOptionLabel(option),\n          size: size\n        }, getCustomizedTagProps({\n          index: index\n        }), ChipProps));\n      });\n    }\n  }\n\n  var defaultRenderGroup = function defaultRenderGroup(params) {\n    return React.createElement(\"li\", {\n      key: params.key\n    }, React.createElement(ListSubheader, {\n      className: classes.groupLabel,\n      component: \"div\"\n    }, params.key), React.createElement(\"ul\", {\n      className: classes.groupUl\n    }, params.children));\n  };\n\n  var renderGroup = renderGroupProp || defaultRenderGroup;\n  var renderOption = renderOptionProp || getOptionLabel;\n\n  var renderListOption = function renderListOption(option, index) {\n    var optionProps = getOptionProps({\n      option: option,\n      index: index\n    });\n    return React.createElement(\"li\", _extends({}, optionProps, {\n      className: classes.option\n    }), renderOption(option, {\n      selected: optionProps['aria-selected'],\n      inputValue: inputValue\n    }));\n  };\n\n  var hasClearIcon = !disableClearable && !disabled;\n  var hasPopupIcon = (!freeSolo || forcePopupIcon === true) && forcePopupIcon !== false;\n  return React.createElement(React.Fragment, null, React.createElement(\"div\", _extends({\n    ref: ref,\n    className: clsx(classes.root, className, focused && classes.focused, hasClearIcon && classes.hasClearIcon, hasPopupIcon && classes.hasPopupIcon)\n  }, getRootProps(other)), renderInput({\n    id: id,\n    disabled: disabled,\n    size: size === 'small' ? 'small' : undefined,\n    InputLabelProps: getInputLabelProps(),\n    InputProps: {\n      ref: setAnchorEl,\n      className: classes.inputRoot,\n      startAdornment: startAdornment,\n      endAdornment: React.createElement(\"div\", {\n        className: classes.endAdornment\n      }, hasClearIcon ? React.createElement(IconButton, _extends({}, getClearProps(), {\n        \"aria-label\": clearText,\n        title: clearText,\n        className: clsx(classes.clearIndicator, dirty && classes.clearIndicatorDirty)\n      }), closeIcon) : null, hasPopupIcon ? React.createElement(IconButton, _extends({}, getPopupIndicatorProps(), {\n        disabled: disabled,\n        \"aria-label\": popupOpen ? closeText : openText,\n        title: popupOpen ? closeText : openText,\n        className: clsx(classes.popupIndicator, popupOpen && classes.popupIndicatorOpen)\n      }), popupIcon) : null)\n    },\n    inputProps: _extends({\n      className: clsx(classes.input, focusedTag === -1 && classes.inputFocused),\n      disabled: disabled\n    }, getInputProps())\n  })), popupOpen && anchorEl ? React.createElement(PopperComponent, {\n    className: clsx(classes.popper, disablePortal && classes.popperDisablePortal),\n    style: {\n      width: anchorEl ? anchorEl.clientWidth : null\n    },\n    role: \"presentation\",\n    anchorEl: anchorEl,\n    open: true\n  }, React.createElement(PaperComponent, {\n    className: classes.paper\n  }, loading && groupedOptions.length === 0 ? React.createElement(\"div\", {\n    className: classes.loading\n  }, loadingText) : null, groupedOptions.length === 0 && !freeSolo && !loading ? React.createElement(\"div\", {\n    className: classes.noOptions\n  }, noOptionsText) : null, groupedOptions.length > 0 ? React.createElement(ListboxComponent, _extends({\n    className: classes.listbox\n  }, getListboxProps(), ListboxProps), groupedOptions.map(function (option, index) {\n    if (groupBy) {\n      return renderGroup({\n        key: option.key,\n        children: option.options.map(function (option2, index2) {\n          return renderListOption(option2, option.index + index2);\n        })\n      });\n    }\n\n    return renderListOption(option, index);\n  })) : null)) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? Autocomplete.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the portion of the selected suggestion that has not been typed by the user,\n   * known as the completion string, appears inline after the input cursor in the textbox.\n   * The inline completion string is visually highlighted and has a selected state.\n   */\n  autoComplete: PropTypes.bool,\n\n  /**\n   * If `true`, the first option is automatically highlighted.\n   */\n  autoHighlight: PropTypes.bool,\n\n  /**\n   * If `true`, the selected option becomes the value of the input\n   * when the Autocomplete loses focus unless the user chooses\n   * a different option or changes the character string in the input.\n   */\n  autoSelect: PropTypes.bool,\n\n  /**\n   * Control if the input should be blurred when an option is selected:\n   *\n   * - `false` the input is not blurred.\n   * - `true` the input is always blurred.\n   * - `touch` the input is blurred after a touch event.\n   * - `mouse` the input is blurred after a mouse event.\n   */\n  blurOnSelect: PropTypes.oneOfType([PropTypes.oneOf(['mouse', 'touch']), PropTypes.bool]),\n\n  /**\n   * Props applied to the [`Chip`](/api/chip/) element.\n   */\n  ChipProps: PropTypes.object,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, clear all values when the user presses escape and the popup is closed.\n   */\n  clearOnEscape: PropTypes.bool,\n\n  /**\n   * Override the default text for the *clear* icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  clearText: PropTypes.string,\n\n  /**\n   * The icon to display in place of the default close icon.\n   */\n  closeIcon: PropTypes.node,\n\n  /**\n   * Override the default text for the *close popup* icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  closeText: PropTypes.string,\n\n  /**\n   * If `true`, the popup will ignore the blur event if the input if filled.\n   * You can inspect the popup markup with your browser tools.\n   * Consider this option when you need to customize the component.\n   */\n  debug: PropTypes.bool,\n\n  /**\n   * The default input value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.oneOfType([PropTypes.any, PropTypes.array]),\n\n  /**\n   * If `true`, the input can't be cleared.\n   */\n  disableClearable: PropTypes.bool,\n\n  /**\n   * If `true`, the popup won't close when a value is selected.\n   */\n  disableCloseOnSelect: PropTypes.bool,\n\n  /**\n   * If `true`, the input will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the list box in the popup will not wrap focus.\n   */\n  disableListWrap: PropTypes.bool,\n\n  /**\n   * If `true`, the popup won't open on input focus.\n   */\n  disableOpenOnFocus: PropTypes.bool,\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: PropTypes.bool,\n\n  /**\n   * A filter function that determines the options that are eligible.\n   *\n   * @param {T[]} options The options to render.\n   * @param {object} state The state of the component.\n   * @returns {T[]}\n   */\n  filterOptions: PropTypes.func,\n\n  /**\n   * If `true`, hide the selected options from the list box.\n   */\n  filterSelectedOptions: PropTypes.bool,\n\n  /**\n   * Force the visibility display of the popup icon.\n   */\n  forcePopupIcon: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.bool]),\n\n  /**\n   * If `true`, the Autocomplete is free solo, meaning that the user input is not bound to provided options.\n   */\n  freeSolo: PropTypes.bool,\n\n  /**\n   * Used to determine the disabled state for a given option.\n   */\n  getOptionDisabled: PropTypes.func,\n\n  /**\n   * Used to determine the string value for a given option.\n   * It's used to fill the input (and the list box options if `renderOption` is not provided).\n   */\n  getOptionLabel: PropTypes.func,\n\n  /**\n   * Used to determine if an option is selected.\n   * Uses strict equality by default.\n   */\n  getOptionSelected: PropTypes.func,\n\n  /**\n   * If provided, the options will be grouped under the returned string.\n   * The groupBy value is also used as the text for group headings when `renderGroup` is not provided.\n   *\n   * @param {T} options The option to group.\n   * @returns {string}\n   */\n  groupBy: PropTypes.func,\n\n  /**\n   * This prop is used to help implement the accessibility logic.\n   * If you don't provide this prop. It falls back to a randomly generated id.\n   */\n  id: PropTypes.string,\n\n  /**\n   * If `true`, the highlight can move to the input.\n   */\n  includeInputInList: PropTypes.bool,\n\n  /**\n   * The input value.\n   */\n  inputValue: PropTypes.string,\n\n  /**\n   * The component used to render the listbox.\n   */\n  ListboxComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the Listbox element.\n   */\n  ListboxProps: PropTypes.object,\n\n  /**\n   * If `true`, the component is in a loading state.\n   */\n  loading: PropTypes.bool,\n\n  /**\n   * Text to display when in a loading state.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  loadingText: PropTypes.node,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Text to display when there are no options.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  noOptionsText: PropTypes.node,\n\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {T} value\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the popup requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the input value changes.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} value The new value of the text input.\n   * @param {string} reason Can be: \"input\" (user input), \"reset\" (programmatic change), `\"clear\"`.\n   */\n  onInputChange: PropTypes.func,\n\n  /**\n   * Callback fired when the popup requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control the popup` open state.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Override the default text for the *open popup* icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  openText: PropTypes.string,\n\n  /**\n   * Array of options.\n   */\n  options: PropTypes.array,\n\n  /**\n   * The component used to render the body of the popup.\n   */\n  PaperComponent: PropTypes.elementType,\n\n  /**\n   * The component used to position the popup.\n   */\n  PopperComponent: PropTypes.elementType,\n\n  /**\n   * The icon to display in place of the default popup icon.\n   */\n  popupIcon: PropTypes.node,\n\n  /**\n   * Render the group.\n   *\n   * @param {any} option The group to render.\n   * @returns {ReactNode}\n   */\n  renderGroup: PropTypes.func,\n\n  /**\n   * Render the input.\n   *\n   * @param {object} params\n   * @returns {ReactNode}\n   */\n  renderInput: PropTypes.func.isRequired,\n\n  /**\n   * Render the option, use `getOptionLabel` by default.\n   *\n   * @param {T} option The option to render.\n   * @param {object} state The state of the component.\n   * @returns {ReactNode}\n   */\n  renderOption: PropTypes.func,\n\n  /**\n   * Render the selected value.\n   *\n   * @param {T[]} value The `value` provided to the component.\n   * @param {function} getTagProps A tag props getter.\n   * @returns {ReactNode}\n   */\n  renderTags: PropTypes.func,\n\n  /**\n   * If `true`, the input's text will be selected on focus.\n   */\n  selectOnFocus: PropTypes.bool,\n\n  /**\n   * The size of the autocomplete.\n   */\n  size: PropTypes.oneOf(['medium', 'small']),\n\n  /**\n   * The value of the autocomplete.\n   *\n   * The value must have reference equality with the option in order to be selected.\n   * You can customize the equality behavior with the `getOptionSelected` prop.\n   */\n  value: PropTypes.oneOfType([PropTypes.any, PropTypes.array])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiAutocomplete'\n})(Autocomplete);","import React from 'react';\nimport {\n  Grid,\n  Typography\n} from '@material-ui/core';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nconst LoadingSpinner: React.FC<WithTranslation> = ({ t }) => {\n  return (\n    <Grid\n      container={true}\n      direction='column'\n      justify='center'\n      alignItems='center'\n      style={{\n        height: '100%'\n      }}\n    >\n      <CircularProgress />\n      <Typography variant='caption'>{t('Dashboard.loading')}</Typography>\n    </Grid>\n  );\n};\n\nexport default withTranslation('translations')(LoadingSpinner);\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","import { Api } from 'ats-api/src';\n\n/**\n * File id requested when a caller has no image id. The image service answers it with its\n * placeholder image, which is what call sites that hard-coded 'undefined' already relied on.\n */\nexport const UNDEFINED_IMAGE_FILE_ID = 'undefined';\n\nexport const IMAGE_FILE_URL_OPTIONS = {\n  service: 'image',\n  endpoint: 'getImageFile',\n  urlOnly: true,\n  suppressErrors: true,\n};\n\n/**\n * Builds the URL of an image served by the image service.\n *\n * A missing id (undefined, null or '') is replaced with UNDEFINED_IMAGE_FILE_ID: the ats-api URL\n * builder keeps the `{fileId}` placeholder when the argument is null or undefined and then throws\n * about the unfilled parameter. As this runs during render, that throw blanked the whole page\n * (Sentry issue 7712375202). Any other failure to build the URL yields '' instead of a crash.\n */\nexport const getImageFileUrl = (atsApi: Api, fileId?: string): string => {\n  try {\n    return atsApi.callApi(fileId || UNDEFINED_IMAGE_FILE_ID, IMAGE_FILE_URL_OPTIONS) as string;\n  } catch (err) {\n    console.error('Unable to build the image URL.', err); // tslint:disable-line\n    return '';\n  }\n};\n","import * as React from 'react';\nimport { Button, IconButton } from '@material-ui/core';\n\ninterface IInputButtonProps {\n  variant?: 'text' | 'outlined' | 'contained';\n  isIconButton?: boolean;\n  children?: any;\n  disabled?: boolean;\n  name?: string;\n  color?: any;\n  handleClick?(evt: React.MouseEvent): void;\n  onClick?(evt: React.MouseEvent): void;\n}\n\nconst InputButton: React.FC<IInputButtonProps> = (props) => {\n  const {\n    isIconButton,\n    children,\n    ...rest\n  } = props;\n  if (isIconButton) {\n    return (\n      <IconButton\n        {...rest}\n      >\n        { children }\n      </IconButton>\n    );\n  }\n  return (\n    <Button\n      {...rest}\n    >\n      { children }\n    </Button>\n  );\n};\n\nexport default InputButton;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z\"\n}), 'Save');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\"\n}), 'OpenInNew');\n\nexports.default = _default;","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.toObject = exports.entries = exports.make = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.isTree = isTree;\nexports.get = get;\nexports.set = set;\nexports.del = del;\nexports.hasHash = hasHash;\nexports.compressedTree = compressedTree;\nexports.map = map;\n\nvar _hash = require('./hash');\n\nvar _hash2 = _interopRequireDefault(_hash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /*\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    The big idea here - we want a key value store (where keys are strings) that is immutable, with fairly fast reads and write.\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    If we used a regular object, we'd make copies with assign like so\n                                                                                                                                                                                                    o2 = {...o1, [key]: value}\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    this has an O(N) complexity on the number of keys in the object\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    Instead, we steal an idea from clojure, and store the data in a tree of sorts.\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    Trees have O(logN) reads and writes, and with some memoization, we can get slightly better perf than that.\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    Further, these trees uses arrays at their nodes to store actual info, which are relatively fast for copies\n                                                                                                                                                                                                    \n                                                                                                                                                                                                    */\n\n\n// murmur3 hashing\nfunction log() {\n  //eslint-disable-line no-unused-vars\n  console.dir(this); // eslint-disable-line no-console\n  return this;\n}\nvar forEach = [].forEach;\nvar hasProp = {}.hasOwnProperty;\n\n// Add iterator to each tree and mimic Map behaviour in order to achieve better look in the Redux Dev Tools\nfunction wrapTree(t) {\n  function createTreeIterator(t) {\n    var treeEntries = entries(t);\n    var cur = 0;\n\n    return {\n      next: function next() {\n        return cur < treeEntries.length ? { done: false, value: treeEntries[cur++] } : { done: true };\n      }\n    };\n  }\n\n  t[Symbol.iterator] = function () {\n    return createTreeIterator(t);\n  };\n  // We need to define dummy 'set' method in order to mimic Map behaviour in the eyes of Redux Dev Tools\n  t.set = function () {};\n\n  return t;\n}\n\n// helper to makes a copy of an array with a new value at given position\nfunction replaceInArray(arr, pos, val) {\n  return [].concat(_toConsumableArray(arr.slice(0, pos)), [val], _toConsumableArray(arr.slice(pos + 1)));\n}\n\n// generic memoizer on functions. because we use WeakMap,\n// we don't really worry about garbage collection\n// when the keys are no longer referenced\nfunction memoize(fn) {\n  var c = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new WeakMap();\n  var keyFn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (i) {\n    return i;\n  };\n\n  return function () {\n    var key = keyFn.apply(undefined, arguments);\n    if (c.has(key)) {\n      return c.get(key);\n    }\n    c.set(key, fn.apply(undefined, arguments));\n    return c.get(key);\n  };\n}\n\n// takes a tree level and key, and returns a slot from 0 - 31\nvar getHash = memoize(function () {\n  var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var key = arguments[1];\n\n  // generate a bucket between 0 - 31\n  return (0, _hash2.default)(level + ':' + key, 5381) % 32;\n}, new Map(), function (level, key) {\n  return '' + level + key;\n});\n// nb: there's a memory leak here because Maps hold strong references,\n// but we can just flush this periodically if needed\n\nvar make = exports.make = function make() {\n  var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n  return wrapTree({\n    level: level, slots: new Array(32)\n  });\n};\n\n// helper on checking whether something is 'tree' like\nfunction isTree(tree) {\n  var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  return tree && hasProp.call(tree, 'slots') && hasProp.call(tree, 'level') && tree.level === level;\n}\n\n// we steal this from clojure\n// a tree is made of an array of 32 slots\n// each slot may be\n// undefined\n// a key/value pair\n// yet another tree\n\n// so to get values from this tree\n// we simply walk it based on the hashe for each level\n// until we get a key/value pair\nfunction get(tree, key) {\n  var hash = getHash(tree.level, key),\n      slots = tree.slots;\n\n\n  if (!hasHash(tree, key)) {\n    return;\n  } else if (isTree(slots[hash], tree.level + 1)) {\n    // recurse\n    return get(slots[hash], key);\n  } else {\n    // return value\n    if (slots[hash].key === key) {\n      return slots[hash].value;\n    }\n  }\n}\n\n// similarly, to set a value in a tree\n// we recursively walk the tree till we find the slot where it should live\n// and return copies of just the affected subtree with he new value in place\n\nfunction set(tree, key, value) {\n  var hash = getHash(tree.level, key),\n      slots = tree.slots;\n\n  // simple set\n  if (!hasHash(tree, key)) {\n    return wrapTree({\n      level: tree.level,\n      slots: replaceInArray(slots, hash, { key: key, value: value })\n    });\n  } else if (isTree(slots[hash], tree.level + 1)) {\n    // recurse down\n    var afterSet = set(slots[hash], key, value);\n    if (afterSet === slots[hash]) {\n      // prevents a new object if nothing's changed\n      return tree;\n    }\n    return wrapTree({\n      level: tree.level,\n      slots: replaceInArray(slots, hash, afterSet)\n    });\n  } else {\n    // update in place\n    if (slots[hash].key === key) {\n      if (slots[hash].value === value) {\n        return tree;\n      }\n      return wrapTree({\n        level: tree.level,\n        slots: replaceInArray(slots, hash, { key: key, value: value })\n      });\n    }\n    // replace key value pair with a nested tree\n    return wrapTree({\n      level: tree.level,\n      slots: replaceInArray(slots, hash, set(set(make(tree.level + 1), slots[hash].key, slots[hash].value), key, value))\n    });\n  }\n}\n\n// to delete a key from the tree\n// simply walk the tree till you find the slot\n// and return recursive copies of the array without it\n// todo - reclaim empty arrays\nfunction del(tree, key) {\n  var hash = getHash(tree.level, key),\n      slots = tree.slots;\n\n\n  if (!hasHash(tree, key)) {\n    return tree;\n  } else if (isTree(slots[hash], tree.level + 1)) {\n    var sub = del(slots[hash], key);\n    if (slots[hash] !== sub) {\n      return wrapTree({\n        level: tree.level,\n        slots: replaceInArray(slots, hash, sub)\n      });\n    }\n    return tree;\n  } else {\n    if (slots[hash].key === key && slots[hash].value !== undefined) {\n      return wrapTree({\n        level: tree.level,\n        slots: replaceInArray(slots, hash, undefined)\n      });\n    }\n    return tree;\n  }\n}\n\n// converts a tree to a [key, value] array\nvar entries = exports.entries = memoize(function (tree) {\n  var arr = [];\n  var slots = tree.slots;\n\n  forEach.call(slots, function (val) {\n    if (!val) {\n      return;\n    }\n    if (!isTree(val, tree.level + 1)) {\n      arr.push([val.key, val.value]);\n      return;\n    } else {\n      arr = arr.concat(entries(val));\n    }\n  });\n  return arr;\n});\n\nfunction hasHash(tree, key) {\n  return !!tree.slots[getHash(tree.level, key)];\n}\n\n// converts a tree to an object\nvar toObject = exports.toObject = memoize(function (tree) {\n  return entries(tree).reduce(function (o, _ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        key = _ref2[0],\n        value = _ref2[1];\n\n    return o[key] = value, o;\n  }, {});\n});\n\n// this is a helper when serializing from/to server side\n// simply replaces arrays [foo, bar] with objects {0: foo, 1: bar, length: 2}\n// this is useful when sending sparse arrays over the wire\nfunction compressedTree(t) {\n  var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  if (!isTree(t, level)) {\n    return t;\n  }\n  var len = 0,\n      slots = t.slots.reduce(function (o, val, i) {\n    if (val) {\n      len++;\n      o[i] = compressedTree(val, level + 1);\n    }\n    return o;\n  }, {});\n  slots.length = len;\n  return {\n    level: t.level,\n    slots: slots\n  };\n}\n\n// I don't use this, but it's a way to 'map' over all the values in the tree\n// and 'replace' with new values\nfunction map(tree, fn) {\n  var mapped = tree;\n  entries(tree).forEach(function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 2),\n        key = _ref4[0],\n        value = _ref4[1];\n\n    var computed = fn(value, key);\n    if (computed !== value) {\n      mapped = set(mapped, key, computed);\n    }\n  });\n  return mapped;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.routerActions = exports.goForward = exports.goBack = exports.go = exports.replace = exports.push = exports.CALL_HISTORY_METHOD = exports.onLocationChanged = exports.LOCATION_CHANGE = void 0;\n\n/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nvar LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nexports.LOCATION_CHANGE = LOCATION_CHANGE;\n\nvar onLocationChanged = function onLocationChanged(location, action) {\n  var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return {\n    type: LOCATION_CHANGE,\n    payload: {\n      location: location,\n      action: action,\n      isFirstRendering: isFirstRendering\n    }\n  };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\n\nexports.onLocationChanged = onLocationChanged;\nvar CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\nexports.CALL_HISTORY_METHOD = CALL_HISTORY_METHOD;\n\nvar updateLocation = function updateLocation(method) {\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return {\n      type: CALL_HISTORY_METHOD,\n      payload: {\n        method: method,\n        args: args\n      }\n    };\n  };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nvar push = updateLocation('push');\nexports.push = push;\nvar replace = updateLocation('replace');\nexports.replace = replace;\nvar go = updateLocation('go');\nexports.go = go;\nvar goBack = updateLocation('goBack');\nexports.goBack = goBack;\nvar goForward = updateLocation('goForward');\nexports.goForward = goForward;\nvar routerActions = {\n  push: push,\n  replace: replace,\n  go: go,\n  goBack: goBack,\n  goForward: goForward\n};\nexports.routerActions = routerActions;","import {\n  CHANGE_PAGE,\n  CHANGE_RECORD,\n  CHANGE_PER_PAGE,\n  FIND_RECORD,\n} from './constants';\nimport { Actions } from 'redux-react-local';\n\nexport const $changePage = (ident) => ({\n  absolute = false,\n  page = 0,\n} = {}) => Actions.$(ident)({\n  type: CHANGE_PAGE,\n  payload: {\n    absolute,\n    page,\n  },\n});\n\nexport const $changeRecord = (ident) => ({\n  absolute = false,\n  record = 0,\n} = {}) => Actions.$(ident)({\n  type: CHANGE_RECORD,\n  payload: {\n    absolute,\n    record,\n  },\n});\n\nexport const $changePerPage = (ident) => ({\n  perPage = 10,\n} = {}) => Actions.$(ident)({\n  type: CHANGE_PER_PAGE,\n  payload: {\n    perPage,\n  },\n});\n\nexport const $findRecord = (ident) => ({\n  index = 0,\n} = {}) => Actions.$(ident)({\n  type: FIND_RECORD,\n  payload: {\n    index,\n  },\n});\n\nexport default {\n  $changePage,\n  $changeRecord,\n  $changePerPage,\n  $findRecord,\n};\n","/* tslint:disable */\nimport * as React from 'react';\n\nexport const DEFAULT_REF_KEY = 'forwardedRefAts'\n\nconst withForwardedRef = (refKey: string = DEFAULT_REF_KEY) => <T extends React.Component, OriginalProps extends {}>(Component: React.ComponentClass<OriginalProps>) => {\n\n  type Props = OriginalProps;\n\n  const RefForwardingFactory = (props: Props, ref: React.RefObject<T>) => {\n    const ComponentWithRef: typeof React.Component = Component as React.ComponentClass<OriginalProps & {[x: string]: React.RefObject<T>}>;\n    return <ComponentWithRef {...props} {...{[refKey]: ref}} />\n  };\n\n  const WithForwardedRef = React.forwardRef<T, OriginalProps>(RefForwardingFactory);\n  return WithForwardedRef;\n}\n\nexport default withForwardedRef;","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","import * as React from 'react';\nimport {\n  Paper,\n  ClickAwayListener,\n  Typography,\n  useTheme,\n  Popper\n} from '@material-ui/core';\n\n\ninterface ITagPopperContentComponentProps {\n  // anchorEl: React.RefObject<HTMLElement>;\n  anchorEl: any;\n  valueArray: string[];\n  onClose: (e) => void;\n}\n\ninterface ITagPopperContentProps extends ITagPopperContentComponentProps {\n}\n\nconst TagPopper = (props: ITagPopperContentProps) => {\n  const {\n    anchorEl,\n    valueArray,\n    onClose,\n  } = props;\n\n  const theme = useTheme();\n\n  return (\n    <Popper\n      open={Boolean(anchorEl)}\n      anchorEl={anchorEl}\n      placement='bottom-start'\n      style={{\n        marginLeft: theme.spacing(2),\n        marginTop: 2,\n        overflowWrap: 'break-word',\n      }}\n    >\n      <ClickAwayListener onClickAway={onClose}>\n        <Paper  elevation={8} style={{\n          minWidth: 220,\n          maxHeight: 280,\n          overflowY: 'auto',\n        }}>\n          {\n            valueArray.map((value: string, index) => (\n              <Typography key={index} color='textPrimary' style={{\n                borderBottom: index !== valueArray.length - 1 ? 'solid lightgray 1px' : 'none',\n                margin: theme.spacing(0, 1.5),\n                padding: theme.spacing(1, .5)\n              }}>\n                {value}\n              </Typography>\n            ))\n          }\n        </Paper>\n      </ClickAwayListener>\n    </Popper>\n  );\n};\n\nexport default TagPopper;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.dontSetMe = dontSetMe;\nexports.findInArray = findInArray;\nexports.int = int;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\n// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nfunction findInArray(array /*: Array<any> | TouchList*/, callback /*: Function*/) /*: any*/{\n  for (let i = 0, length = array.length; i < length; i++) {\n    if (callback.apply(callback, [array[i], i, array])) return array[i];\n  }\n}\nfunction isFunction(func /*: any*/) /*: boolean %checks*/{\n  // $FlowIgnore[method-unbinding]\n  return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\nfunction isNum(num /*: any*/) /*: boolean %checks*/{\n  return typeof num === 'number' && !isNaN(num);\n}\nfunction int(a /*: string*/) /*: number*/{\n  return parseInt(a, 10);\n}\nfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) /*: ?Error*/{\n  if (props[propName]) {\n    return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n  }\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M6 2c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6H6zm7 7V3.5L18.5 9H13z\"\n}), 'InsertDriveFile');\n\nexports.default = _default;","/*\n * AppReducer\n *\n * The reducer takes care of our data. Using actions, we can change our\n * application state.\n * To add a new action, add it to the switch statement in the reducer function\n *\n * Example:\n * case YOUR_ACTION_CONSTANT:\n *   return state.set('yourStateVariable', true);\n */\n\nimport { fromJS } from 'immutable';\n\nimport {\n  ApplicationActionTypes,\n} from '../../modules/ApplicationModule/actions';\nimport {\n  ILocalAction,\n} from 'ats-utils/src/Interfaces';\n\n// The initial state of the App\nexport const initialState = fromJS({\n  open: false,\n});\n\nfunction localReducer(state = initialState, action: ILocalAction) {\n  if (action.me) { // happened 'locally'\n    switch (action.meta.type) {\n      case ApplicationActionTypes.TOGGLE_OVERLAY_COMPONENT:\n        return state.set('open', action.payload.open || !state.get('open'));\n      default:\n        return state;\n      // case: increment decrement etc\n    }\n  }\n\n  // \"local\" action, but not local... we can figure out ident using meta\n  if (action.meta) {\n    switch (action.meta.type) {\n      default:\n        return state;\n    }\n  }\n  return state;\n}\n\nexport default localReducer;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport reducer, { initialState } from './localReducer';\nimport { local, Actions } from 'redux-react-local';\n\nimport {\n  ToggleOverlayComponentAction,\n} from '../../modules/ApplicationModule/actions';\n\nimport {\n  Dialog,\n  DialogContent,\n  DialogTitle,\n} from '@material-ui/core';\n\nimport InputButton from '../InputButton';\n\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\ninterface IDialogComponentProps {\n  localComponentId?: string;\n  header?: string;\n  children?: JSX.Element;\n  open?: boolean;\n  state?: {\n    [propName: string]: any\n  };\n  toggleOpen?(...args: any[]): any;\n  localToggleOpen?(...args: any[]): any;\n}\n\ninterface IDialogProps extends IDialogComponentProps {\n  dispatch: Dispatch<IAction>;\n}\n\nconst DialogWidget: React.FC<IDialogProps> = props => {\n  const {\n    header,\n    children,\n\n    // controlled state\n    open: controlledOpen,\n    toggleOpen: controlledToggleOpen, // if controlled and null, don't show buttons\n\n    // local uncontrolled state\n    localComponentId,\n    localToggleOpen,\n    state, // this 'state' prop is provided by redux-react-local... NOT typical redux state\n  } = props;\n\n  const localOpen = state.get('open');\n  const controlled = controlledOpen !== undefined;\n  const open = controlled ? controlledOpen : localOpen;\n  const noop = () => () => undefined;\n  const toggleOpen = controlled ? (controlledToggleOpen || noop) : localToggleOpen; // if controlled but controlledToggleOpen is null, set to noop\n\n  return (\n    <div>\n      {(!controlled || controlledToggleOpen) ? <InputButton variant='contained' handleClick={toggleOpen(true)}>\n        Open Dialog\n      </InputButton> : null}\n      <Dialog\n        onClose={toggleOpen(false)}\n        aria-labelledby={`${localComponentId}-title`}\n        open={open}>\n        <DialogTitle id={`${localComponentId}-title`}>{ header }</DialogTitle>\n        <DialogContent>\n          { children }\n        </DialogContent>\n      </Dialog>\n    </div>\n  );\n};\n\nexport function mergeProps(stateProps, dispatchProps, ownProps) {\n  const localComponentId = `components-DialogWidget-${ownProps.localKey || ''}`;\n  const dispatch = dispatchProps.dispatch;\n\n  const localToggleOpen = (open) => () => {\n    dispatch(Actions.$(localComponentId)(new ToggleOverlayComponentAction({open})));\n  };\n\n  return Object.assign({}, ownProps, stateProps, dispatchProps, {\n    localComponentId,\n    localToggleOpen,\n  });\n}\n\nexport function mapDispatchToProps(dispatch) {\n  return {\n    dispatch,\n  };\n}\n\nexport default compose<React.ComponentClass<IDialogComponentProps>>(\n  connect(null, mapDispatchToProps, mergeProps),\n  local({\n    ident: (props) =>\n      props.localComponentId,\n    initial: initialState,\n    reducer,\n    persist: false,\n  }),\n)(DialogWidget);\n","import { CANCEL } from '@redux-saga/symbols';\n\nfunction delayP(ms, val) {\n  if (val === void 0) {\n    val = true;\n  }\n\n  var timeoutId;\n  var promise = new Promise(function (resolve) {\n    timeoutId = setTimeout(resolve, ms, val);\n  });\n\n  promise[CANCEL] = function () {\n    clearTimeout(timeoutId);\n  };\n\n  return promise;\n}\n\nexport default delayP;\n","/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\n\n// from https://github.com/reduxjs/redux/blob/master/src/utils/isPlainObject.js\nconst isPlainObject: (obj: any) => boolean = (obj: any) => {\n  if (typeof obj !== 'object' || obj === null) { return false; }\n\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n};\n\nexport default isPlainObject;","import {\n  IAction,\n} from '../Interfaces';\n\nimport isPlainObject from '../isPlainObject';\n\nexport const reduxClassActionMiddleware =\n  (store: object) =>\n    (next: (action: IAction) => void) =>\n      (action: any) => {\n        const _action = isPlainObject(action) ? action : {...action};\n        const result = next(_action);\n        return result;\n      };\n\nexport default reduxClassActionMiddleware;","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nmodule.exports = isNil;\n","import * as React from 'react';\n\ninterface IAtsSvgMasterProps {\n  /**\n   * The width of the component.\n   * Default: '125'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '125'\n   */\n  height?: string;\n  /**\n   * The background and shadow colors. These are meant to be changed together.\n   */\n  color?: {\n    /**\n     * The background color.\n     * Default: '#83D3EE'\n     * Expected: primary[200] from theme.palette\n     */\n    backgroundColor: string;\n    /**\n     * The shadow color.\n     * Default: '#00588C'\n     * Expected: primary[900] from theme.palette\n     */\n    shadowColor: string\n  };\n  /**\n   * The opacity of the shadow.\n   * Default: '0.15'\n   */\n  shadowOpacity?: string;\n  /**\n   * The color of the foreground.\n   * Default: '#FFFFFF'\n   */\n  foregroundColor?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n * @prop {string} shadowOpacity - The opacity of the shadow.\n * @prop {string} foregroundColor - The color of the foreground.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgMaster = ({\n  width = '125',\n  height = '125',\n  color: {\n    shadowColor,\n    backgroundColor,\n  } = {\n    shadowColor: '#00588C',\n    backgroundColor: '#83D3EE'\n  },\n  shadowOpacity = '0.15',\n  foregroundColor = '#FFFFFF',\n  margin = '0'\n}: IAtsSvgMasterProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 125 125'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g>\n          <g fill={backgroundColor}>\n            <g>\n              <ellipse\n                cx='62.383'\n                cy='62.004'\n                rx='62.383'\n                ry='62.004'\n              />\n            </g>\n          </g>\n          <path\n            fill={shadowColor}\n            fillRule='nonzero'\n            d='M92.915 54.195l-1.521 17.437 21.63 26.429c-15.805 17.883-21.206 21.2-42.315 24.901L34.641 73.897l29.174 14.715.01-11.895 29.09-22.522z'\n            opacity={shadowOpacity}\n          />\n        </g>\n        <g fill={foregroundColor} fillRule='nonzero' transform='translate(33 31)'>\n          <path d='M31.397 54.317a3.515 3.515 0 01-4.3 0L5.602 37.61a3.464 3.464 0 00-4.264 0 3.484 3.484 0 000 5.487l23.628 18.386c2.517 1.957 6.047 1.957 8.599 0l23.628-18.386a3.484 3.484 0 000-5.487l-.035-.035a3.464 3.464 0 00-4.264 0L31.397 54.317zm2.202-10.556l23.628-18.385c1.783-1.398 1.783-4.124 0-5.523L33.6 1.468c-2.517-1.957-6.047-1.957-8.599 0L1.372 19.888c-1.783 1.399-1.783 4.125 0 5.523L25 43.796a6.98 6.98 0 008.599-.035z'/>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgMaster };\n","import * as React from 'react';\n\ninterface IAtsSvgQuoteProps {\n  /**\n   * The width of the component.\n   * Default: '95'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '95'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: '#666'\n   * Expected: theme.palette.secondary[300]\n   */\n  color?: string;\n  /**\n   * The shadow color.\n   * Default: '#000000'\n   * * Expected: theme.palette.secondary.main\n   */\n  shadowColor?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The background color of the image.\n * @prop {string} shadowColor - The showdow color of the element.\n * @prop {React.CSSProperties} style - style\n */\nconst AtsSvgQuote = ({\n  width = '131',\n  height = '131',\n  color = '#666',\n  shadowColor = '#000000',\n  style = {}\n}: IAtsSvgQuoteProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      xmlnsXlink='http://www.w3.org/1999/xlink'\n      width={width}\n      height={height}\n      viewBox='0 0 131 131'\n      style={style}\n    >\n      <defs>\n        <linearGradient\n          id='linearGradient-1'\n          x1='73.79%'\n          x2='18.342%'\n          y1='81.482%'\n          y2='36.241%'\n        >\n          <stop offset='0%' stopOpacity={0}/>\n          <stop offset='100%' stopColor={shadowColor}/>\n        </linearGradient>\n        <circle id='path-2' cx='62.5' cy='62.5' r='62.5'/>\n        <filter\n          id='filter-3'\n          width='108%'\n          height='108%'\n          x='-4%'\n          y='-3.2%'\n          filterUnits='objectBoundingBox'\n        >\n          <feOffset\n            dy='1'\n            in='SourceAlpha'\n            result='shadowOffsetOuter1'\n          />\n          <feGaussianBlur\n            in='shadowOffsetOuter1'\n            result='shadowBlurOuter1'\n            stdDeviation='1.5'\n          />\n          <feColorMatrix\n            in='shadowBlurOuter1'\n            values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.26 0'\n          />\n        </filter>\n      </defs>\n      <g fill='none' fillRule='evenodd' stroke='none' strokeWidth='1'>\n        <g transform='translate(-982 -401)'>\n          <g transform='translate(985 403)'>\n            <path\n              fill='url(#linearGradient-1)'\n              fillRule='nonzero'\n              d='M42.297 96.13L70.283 125c27.378-7.038 44.688-22.396 51.932-46.074C89.822 47.37 108.318 65.199 89.822 47.37c-.051 32.935-15.893 49.189-47.525 48.76z'\n              opacity='0.118'\n            />\n            <path\n              fill='#FFF'\n              fillRule='nonzero'\n              d='M88.113 46.263l-12.41-12.379A3.045 3.045 0 0073.548 33h-.773v16.168H89v-.77c0-.796-.317-1.566-.887-2.135zM69 50V33H44c-1.663 0-3 1.337-3 3v58c0 1.662 1.337 3 3 3h42c1.662 0 3-1.338 3-3V53H72c-1.65 0-3-1.35-3-3zm-19.887-7.905c0-.559.453-1.01 1.014-1.01h10.14c.56 0 1.015.451 1.015 1.01v2.02c0 .56-.454 1.011-1.014 1.011H50.127c-.56 0-1.014-.452-1.014-1.01v-2.021zm0 10.105v-2.021c0-.558.453-1.01 1.014-1.01h10.14c.56 0 1.015.452 1.015 1.01V52.2c0 .558-.454 1.01-1.014 1.01H50.127c-.56 0-1.014-.452-1.014-1.01zm18.254 33.332v3.047c0 .558-.454 1.01-1.014 1.01h-2.028c-.56 0-1.014-.452-1.014-1.01V85.51a7.272 7.272 0 01-3.976-1.434c-.494-.37-.52-1.108-.072-1.533l1.489-1.416c.35-.334.873-.35 1.284-.093.49.306 1.047.47 1.625.47h3.562c.824 0 1.496-.748 1.496-1.666 0-.751-.458-1.413-1.112-1.608l-5.703-1.705c-2.356-.705-4.003-2.958-4.003-5.48 0-3.098 2.415-5.614 5.409-5.694v-3.047c0-.558.453-1.01 1.013-1.01h2.028c.56 0 1.014.452 1.014 1.01v3.068c1.431.074 2.823.57 3.976 1.434.494.37.52 1.108.072 1.534l-1.489 1.416c-.35.333-.873.348-1.284.092a3.048 3.048 0 00-1.625-.47h-3.562c-.824 0-1.496.748-1.496 1.666 0 .752.458 1.414 1.112 1.608l5.703 1.705c2.356.705 4.003 2.959 4.003 5.481 0 3.099-2.415 5.614-5.408 5.693z'\n            />\n            <g>\n              <g>\n                <g>\n                  <g>\n                    <use\n                      fill='#000'\n                      filter='url(#filter-3)'\n                      xlinkHref='#path-2'\n                    />\n                    <use fill={color} xlinkHref='#path-2'/>\n                  </g>\n                </g>\n              </g>\n              <path\n                fill='url(#linearGradient-1)'\n                fillRule='nonzero'\n                d='M42.297 96.13L70.283 125c27.378-7.038 44.688-22.396 51.932-46.074C89.822 47.37 108.318 65.199 89.822 47.37c-.051 32.935-15.893 49.189-47.525 48.76z'\n                opacity='0.118'\n              />\n              <path\n                fill='#FFF'\n                fillRule='nonzero'\n                d='M88.113 46.263l-12.41-12.379A3.045 3.045 0 0073.548 33h-.773v16.168H89v-.77c0-.796-.317-1.566-.887-2.135zM69 50V33H44c-1.663 0-3 1.337-3 3v58c0 1.662 1.337 3 3 3h42c1.662 0 3-1.338 3-3V53H72c-1.65 0-3-1.35-3-3zm-19.887-7.905c0-.559.453-1.01 1.014-1.01h10.14c.56 0 1.015.451 1.015 1.01v2.02c0 .56-.454 1.011-1.014 1.011H50.127c-.56 0-1.014-.452-1.014-1.01v-2.021zm0 10.105v-2.021c0-.558.453-1.01 1.014-1.01h10.14c.56 0 1.015.452 1.015 1.01V52.2c0 .558-.454 1.01-1.014 1.01H50.127c-.56 0-1.014-.452-1.014-1.01zm18.254 33.332v3.047c0 .558-.454 1.01-1.014 1.01h-2.028c-.56 0-1.014-.452-1.014-1.01V85.51a7.272 7.272 0 01-3.976-1.434c-.494-.37-.52-1.108-.072-1.533l1.489-1.416c.35-.334.873-.35 1.284-.093.49.306 1.047.47 1.625.47h3.562c.824 0 1.496-.748 1.496-1.666 0-.751-.458-1.413-1.112-1.608l-5.703-1.705c-2.356-.705-4.003-2.958-4.003-5.48 0-3.098 2.415-5.614 5.409-5.694v-3.047c0-.558.453-1.01 1.013-1.01h2.028c.56 0 1.014.452 1.014 1.01v3.068c1.431.074 2.823.57 3.976 1.434.494.37.52 1.108.072 1.534l-1.489 1.416c-.35.333-.873.348-1.284.092a3.048 3.048 0 00-1.625-.47h-3.562c-.824 0-1.496.748-1.496 1.666 0 .752.458 1.414 1.112 1.608l5.703 1.705c2.356.705 4.003 2.959 4.003 5.481 0 3.099-2.415 5.614-5.408 5.693z'\n              />\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgQuote };\n","import * as React from 'react';\n\ninterface IAtsSvgAtsLogoProps {\n  /**\n   * The width of the component.\n   * Default: '16'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '18'\n   */\n  height?: string;\n  /**\n   * The background color.\n   * Default: '#666'\n   */\n  color?: string;\n\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {object} color - The background and shadow colors. These are meant to be changed together.\n */\nconst AtsSvgAtsLogo = ({\n  width = '20',\n  height = '20',\n  color = '#FFF',\n  className = '',\n  style = {}\n}: IAtsSvgAtsLogoProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 50 50'\n      className={className}\n      style={style}\n    >\n      <g stroke='none' strokeWidth='1' fill='none' fillRule='evenodd'>\n          <g fill={color}>\n              <path d='M35.7198999,43.0267189 L35.7128089,44.8947224 L12.4571929,44.8947224 L33.4498371,23.90326 L33.4500735,16.6638303 L4.4897547,45.6388038 C4.00662181,46.119573 3.73976416,46.7601259 3.73834028,47.4418066 C3.73692776,48.1241964 4.00118538,48.7656947 4.48219098,49.2485913 C4.95846925,49.7267605 5.61745873,50 6.28779381,50 C6.29252113,50 6.29724846,50 6.30173942,50 L38.2783297,50 C39.6856552,50 40.8306139,48.8548049 40.8306139,47.447243 L40.8306139,43.0267189 L35.7198999,43.0267189' id='Fill-1' />\n              <polyline id='Fill-2' points='35.7284091 40.7897474 40.8306139 40.7897474 40.8306139 40.7438923 35.7286455 40.7438923 35.7284091 40.7897474' />\n              <path d='M11.2547971,35.7088155 L8.7152766,35.7088155 L35.7094998,8.71459232 L35.7094998,33.4966625 L40.8147774,33.4966625 L40.8147774,2.55252061 C40.8143047,1.14472241 39.6691095,0 38.2620204,0 C37.5822307,0 36.9428596,0.264493987 36.4599631,0.745263218 L0.753983958,36.456206 C-0.243954928,37.4442175 -0.252464117,39.0602545 0.735547379,40.0591389 C1.21064382,40.539199 1.87081514,40.8140931 2.54493207,40.8140931 C2.54776847,40.8140931 2.5503685,40.8140931 2.55320489,40.8140931 L6.14904674,40.8140931 L11.2547971,35.7088155' id='Fill-4' />\n              <path d='M48.3950474,4.85567468 L48.3910292,4.85402012 C47.436109,4.46283375 46.3455145,4.68076356 45.6153787,5.4090084 L43.0335487,7.97571099 L43.0333123,15.210177 L44.8686973,13.374792 L44.8686973,35.7036155 L24.8134821,35.7036155 L19.7082045,40.8084203 L47.4131814,40.8084203 C47.4160178,40.8084203 47.4190906,40.8084203 47.421927,40.8084203 C48.1002985,40.8084203 48.7389605,40.5451082 49.2204388,40.0664662 C49.7042808,39.585697 49.9716112,38.9456168 49.9737385,38.2558997 L49.9737385,7.21579306 C49.9711385,6.18003555 49.3513858,5.25347931 48.3950474,4.85567468' id='Fill-5' />\n          </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgAtsLogo };\n","var _defs, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _rect;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgQuoteTakeoffRobot(_ref, svgRef) {\n  var title = _ref.title,\n      titleId = _ref.titleId,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    id: \"Layer_1\",\n    \"data-name\": \"Layer 1\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n    viewBox: \"0 0 389.63 409.34\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \"\\n      .cls-1 {\\n        fill: none;\\n      }\\n\\n      .cls-2 {\\n        clip-path: url(#clip-path);\\n      }\\n\\n      .cls-3 {\\n        clip-path: url(#clip-path-2);\\n      }\\n\\n      .cls-4 {\\n        fill: currentColor;\\n      }\\n\\n      .cls-5 {\\n        fill: #fff;\\n      }\\n    \"), /*#__PURE__*/React.createElement(\"clipPath\", {\n    id: \"clip-path\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-1\",\n    d: \"M-260.86,646.4v-1.12h.84v1.12Zm1.06,2.1a.23.23,0,0,0,.21-.24V645a.22.22,0,0,0-.21-.23h-1.28a.22.22,0,0,0-.22.23v3.22a.23.23,0,0,0,.22.24.23.23,0,0,0,.22-.24v-1.37h.84v1.37A.23.23,0,0,0-259.8,648.5Z\"\n  })), /*#__PURE__*/React.createElement(\"clipPath\", {\n    id: \"clip-path-2\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-1\",\n    d: \"M-258.73,645v3.22a.25.25,0,0,0,.25.24.25.25,0,0,0,.26-.24V645a.24.24,0,0,0-.26-.23A.24.24,0,0,0-258.73,645Z\"\n  })))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M306.46,147a17.32,17.32,0,0,0,1.71.31c9.14.44,9.17.43,9.13,9.48,0,3.71,1.08,8.28-.67,10.86-1.37,2-6.38,1.51-10.44,2.25,0,2.52.05,5.32,0,8.13-.1,4.43-1.5,5.83-6,6-1.86.06-3.72,0-5.58,0a16.11,16.11,0,0,1-1.89-.34V133.08a4.6,4.6,0,0,1,1.25-.46c12-.31,12.59-.66,12.21,11.17A28.58,28.58,0,0,0,306.46,147Z\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M89.23,147.33c0-3.35,0-6.17,0-9-.09-3.91,1.71-5.87,5.67-5.81,2.53,0,5.07,0,7.81,0v52.24c-4.42-.94-9.76-.55-12-3s-1.45-7.74-2.06-12.36a42.52,42.52,0,0,0-5.82-.27c-3.41.24-5-.77-4.78-4.54a106.27,106.27,0,0,0,0-12.87c-.18-3.34.92-4.8,4.38-4.44C84.38,147.49,86.39,147.33,89.23,147.33Z\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M270.58,107.78c-1.24,0-2.48-.19-4.13-.33,0-7.57.06-14.86,0-22.15-.22-24.6-18.59-42.86-43.15-42.91q-25.6,0-51.21,0c-24.74,0-43.23,18.5-43.31,43.24,0,7.15,0,14.31,0,21.91-1.43.12-2.26.22-3.1.24-9,.29-13.28,4.65-13.28,13.75q0,36.8,0,73.58c0,8.79,4.49,13.44,13.1,13.44q72.3,0,144.58,0c8,0,12.71-4.6,12.73-12.45q.09-37.86,0-75.73C282.78,112.67,278.17,108.06,270.58,107.78ZM249.8,89v18.44H145.21c0-5.4-.09-10.93.12-16.45l.52-8.41a22.84,22.84,0,0,1,.3-3.54A27,27,0,0,1,172,58.84c17.06-.17,34.13-.2,51.19,0,13.7.16,25.72,11,26,23.69ZM160,187.26a29.09,29.09,0,1,1,29.19-28.73A29,29,0,0,1,160,187.26Zm75.45,0a29.09,29.09,0,1,1,28.92-29.08A29.07,29.07,0,0,1,235.4,187.26Z\"\n  })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M253.7,158.21a18.16,18.16,0,0,1-18.54,18.41,18.46,18.46,0,1,1,18.54-18.41Zm-23.47-12a6.85,6.85,0,0,0-7,7.09,7.06,7.06,0,0,0,6.87,6.84,7.24,7.24,0,0,0,7-7.18A7.06,7.06,0,0,0,230.23,146.17Z\"\n  })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M178.65,158.17a18.47,18.47,0,1,1-18.59-18.47A18.27,18.27,0,0,1,178.65,158.17Zm-23.65-12a6.93,6.93,0,0,0-6.88,6.78,7.11,7.11,0,0,0,7,7.15,7.25,7.25,0,0,0,6.92-6.87A7,7,0,0,0,155,146.17Z\"\n  })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-1\",\n    d: \"M118.82,284.48c-1.43-1.8-1.07-5-1.68-8.81-3.42,1.22-6.75,1.87-9.48,3.53-2.31,1.41-3.24,15.82-1.66,18.09a4.68,4.68,0,0,0,1.31,1.1L120.82,307l5.53-.06V287.52C123.43,286.44,120.19,286.2,118.82,284.48Z\"\n  })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-1\",\n    d: \"M117.19,276a27.63,27.63,0,0,0,.37,3.61C117.47,278.52,117.38,277.3,117.19,276Z\"\n  })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-1\",\n    d: \"M121.31,286a8.5,8.5,0,0,0,3.07.89C123.29,286.6,122.24,286.34,121.31,286Z\"\n  })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-5\",\n    d: \"M107.66,279.2c-2.31,1.41-3.24,15.82-1.66,18.09a4.68,4.68,0,0,0,1.31,1.1l12.86,8.24h.65l5.53,2.85v-22c-.65-.24-1.31-.43-2-.62a8.5,8.5,0,0,1-3.07-.89,5.35,5.35,0,0,1-2.49-1.53c-.9-1.13-1.09-2.82-1.26-4.85a27.63,27.63,0,0,1-.37-3.61c0-.11,0-.23,0-.35C113.72,276.89,110.39,277.54,107.66,279.2Z\"\n  })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-5\",\n    d: \"M126.77,367V286.85a9.22,9.22,0,0,1-2.39,0c.66.19,1.32.38,2,.62v22l-5.53-2.85h-.65l-12.86-8.24a4.68,4.68,0,0,1-1.31-1.1c-1.58-2.27-.65-16.68,1.66-18.09,2.73-1.66,6.06-2.31,9.48-3.53,0,.12,0,.24,0,.35,0-1.09,0-2.3,0-3.66,0,0-9.26,2.43-9.82,4.31,0,0-5.58-7.41,0,90.31Z\"\n  })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-5\",\n    d: \"M121.31,286a7.17,7.17,0,0,1-1.84-1.36s-1.24-1.32-1.91-5c.17,2,.36,3.72,1.26,4.85A5.35,5.35,0,0,0,121.31,286Z\"\n  })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-5\",\n    d: \"M107.41,275.46c.56-1.35,9.83-3.1,9.83-3.1a19.66,19.66,0,0,0,0,2.63c.19.92.28,1.79.38,2.59a6.64,6.64,0,0,0,1.9,3.61,7.93,7.93,0,0,0,1.84,1c.93.24,2,.43,3.07.65a12.06,12.06,0,0,0,2.39-.05v57.56H107.41C101.83,270.14,107.41,275.46,107.41,275.46Z\"\n  })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n    className: \"cls-4\",\n    d: \"M310.1,290.15l-.31-21.42c-3.82-13.91-14.94-19.29-31.2-18.2-2.39-6.74-2.39-6.74-8.91-7.17-.19-.15-.5-.29-.55-.48-3.27-10.85-8.6-14.29-22.17-14.29H227.47V218.33h-59v10.26H150c-15.11,0-19.7,2.82-23.69,14.54-8,1.26-8,1.26-8.9,7.37-15.06-1-26.06,3.31-30.6,15.24V367H310.75Z\"\n  })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n    className: \"cls-5\",\n    x: 136.49,\n    y: 272.36,\n    width: 125.01,\n    height: 58.4,\n    rx: 3.64\n  })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgQuoteTakeoffRobot);\nexport default __webpack_public_path__ + \"static/media/quoteTakeoffRobot.1d74eafb.svg\";\nexport { ForwardRef as ReactComponent };","var now = require('performance-now')\n  , root = typeof window === 'undefined' ? global : window\n  , vendors = ['moz', 'webkit']\n  , suffix = 'AnimationFrame'\n  , raf = root['request' + suffix]\n  , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n  raf = root[vendors[i] + 'Request' + suffix]\n  caf = root[vendors[i] + 'Cancel' + suffix]\n      || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n  var last = 0\n    , id = 0\n    , queue = []\n    , frameDuration = 1000 / 60\n\n  raf = function(callback) {\n    if(queue.length === 0) {\n      var _now = now()\n        , next = Math.max(0, frameDuration - (_now - last))\n      last = next + _now\n      setTimeout(function() {\n        var cp = queue.slice(0)\n        // Clear queue here to prevent\n        // callbacks from appending listeners\n        // to the current frame's queue\n        queue.length = 0\n        for(var i = 0; i < cp.length; i++) {\n          if(!cp[i].cancelled) {\n            try{\n              cp[i].callback(last)\n            } catch(e) {\n              setTimeout(function() { throw e }, 0)\n            }\n          }\n        }\n      }, Math.round(next))\n    }\n    queue.push({\n      handle: ++id,\n      callback: callback,\n      cancelled: false\n    })\n    return id\n  }\n\n  caf = function(handle) {\n    for(var i = 0; i < queue.length; i++) {\n      if(queue[i].handle === handle) {\n        queue[i].cancelled = true\n      }\n    }\n  }\n}\n\nmodule.exports = function(fn) {\n  // Wrap in a new function to prevent\n  // `cancel` potentially being assigned\n  // to the native rAF function\n  return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n  caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n  if (!object) {\n    object = root;\n  }\n  object.requestAnimationFrame = raf\n  object.cancelAnimationFrame = caf\n}\n","export default function _taggedTemplateLiteral(strings, raw) {\n  if (!raw) {\n    raw = strings.slice(0);\n  }\n\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar sizerStyle = {\n\tposition: 'absolute',\n\ttop: 0,\n\tleft: 0,\n\tvisibility: 'hidden',\n\theight: 0,\n\toverflow: 'scroll',\n\twhiteSpace: 'pre'\n};\n\nvar INPUT_PROPS_BLACKLIST = ['extraWidth', 'injectStyles', 'inputClassName', 'inputRef', 'inputStyle', 'minWidth', 'onAutosize', 'placeholderIsMinWidth'];\n\nvar cleanInputProps = function cleanInputProps(inputProps) {\n\tINPUT_PROPS_BLACKLIST.forEach(function (field) {\n\t\treturn delete inputProps[field];\n\t});\n\treturn inputProps;\n};\n\nvar copyStyles = function copyStyles(styles, node) {\n\tnode.style.fontSize = styles.fontSize;\n\tnode.style.fontFamily = styles.fontFamily;\n\tnode.style.fontWeight = styles.fontWeight;\n\tnode.style.fontStyle = styles.fontStyle;\n\tnode.style.letterSpacing = styles.letterSpacing;\n\tnode.style.textTransform = styles.textTransform;\n};\n\nvar isIE = typeof window !== 'undefined' && window.navigator ? /MSIE |Trident\\/|Edge\\//.test(window.navigator.userAgent) : false;\n\nvar generateId = function generateId() {\n\t// we only need an auto-generated ID for stylesheet injection, which is only\n\t// used for IE. so if the browser is not IE, this should return undefined.\n\treturn isIE ? '_' + Math.random().toString(36).substr(2, 12) : undefined;\n};\n\nvar AutosizeInput = function (_Component) {\n\t_inherits(AutosizeInput, _Component);\n\n\tfunction AutosizeInput(props) {\n\t\t_classCallCheck(this, AutosizeInput);\n\n\t\tvar _this = _possibleConstructorReturn(this, (AutosizeInput.__proto__ || Object.getPrototypeOf(AutosizeInput)).call(this, props));\n\n\t\t_this.inputRef = function (el) {\n\t\t\t_this.input = el;\n\t\t\tif (typeof _this.props.inputRef === 'function') {\n\t\t\t\t_this.props.inputRef(el);\n\t\t\t}\n\t\t};\n\n\t\t_this.placeHolderSizerRef = function (el) {\n\t\t\t_this.placeHolderSizer = el;\n\t\t};\n\n\t\t_this.sizerRef = function (el) {\n\t\t\t_this.sizer = el;\n\t\t};\n\n\t\t_this.state = {\n\t\t\tinputWidth: props.minWidth,\n\t\t\tinputId: props.id || generateId()\n\t\t};\n\t\treturn _this;\n\t}\n\n\t_createClass(AutosizeInput, [{\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\t\t\tthis.mounted = true;\n\t\t\tthis.copyInputStyles();\n\t\t\tthis.updateInputWidth();\n\t\t}\n\t}, {\n\t\tkey: 'UNSAFE_componentWillReceiveProps',\n\t\tvalue: function UNSAFE_componentWillReceiveProps(nextProps) {\n\t\t\tvar id = nextProps.id;\n\n\t\t\tif (id !== this.props.id) {\n\t\t\t\tthis.setState({ inputId: id || generateId() });\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(prevProps, prevState) {\n\t\t\tif (prevState.inputWidth !== this.state.inputWidth) {\n\t\t\t\tif (typeof this.props.onAutosize === 'function') {\n\t\t\t\t\tthis.props.onAutosize(this.state.inputWidth);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateInputWidth();\n\t\t}\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tthis.mounted = false;\n\t\t}\n\t}, {\n\t\tkey: 'copyInputStyles',\n\t\tvalue: function copyInputStyles() {\n\t\t\tif (!this.mounted || !window.getComputedStyle) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar inputStyles = this.input && window.getComputedStyle(this.input);\n\t\t\tif (!inputStyles) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcopyStyles(inputStyles, this.sizer);\n\t\t\tif (this.placeHolderSizer) {\n\t\t\t\tcopyStyles(inputStyles, this.placeHolderSizer);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'updateInputWidth',\n\t\tvalue: function updateInputWidth() {\n\t\t\tif (!this.mounted || !this.sizer || typeof this.sizer.scrollWidth === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar newInputWidth = void 0;\n\t\t\tif (this.props.placeholder && (!this.props.value || this.props.value && this.props.placeholderIsMinWidth)) {\n\t\t\t\tnewInputWidth = Math.max(this.sizer.scrollWidth, this.placeHolderSizer.scrollWidth) + 2;\n\t\t\t} else {\n\t\t\t\tnewInputWidth = this.sizer.scrollWidth + 2;\n\t\t\t}\n\t\t\t// add extraWidth to the detected width. for number types, this defaults to 16 to allow for the stepper UI\n\t\t\tvar extraWidth = this.props.type === 'number' && this.props.extraWidth === undefined ? 16 : parseInt(this.props.extraWidth) || 0;\n\t\t\tnewInputWidth += extraWidth;\n\t\t\tif (newInputWidth < this.props.minWidth) {\n\t\t\t\tnewInputWidth = this.props.minWidth;\n\t\t\t}\n\t\t\tif (newInputWidth !== this.state.inputWidth) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tinputWidth: newInputWidth\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'getInput',\n\t\tvalue: function getInput() {\n\t\t\treturn this.input;\n\t\t}\n\t}, {\n\t\tkey: 'focus',\n\t\tvalue: function focus() {\n\t\t\tthis.input.focus();\n\t\t}\n\t}, {\n\t\tkey: 'blur',\n\t\tvalue: function blur() {\n\t\t\tthis.input.blur();\n\t\t}\n\t}, {\n\t\tkey: 'select',\n\t\tvalue: function select() {\n\t\t\tthis.input.select();\n\t\t}\n\t}, {\n\t\tkey: 'renderStyles',\n\t\tvalue: function renderStyles() {\n\t\t\t// this method injects styles to hide IE's clear indicator, which messes\n\t\t\t// with input size detection. the stylesheet is only injected when the\n\t\t\t// browser is IE, and can also be disabled by the `injectStyles` prop.\n\t\t\tvar injectStyles = this.props.injectStyles;\n\n\t\t\treturn isIE && injectStyles ? _react2.default.createElement('style', { dangerouslySetInnerHTML: {\n\t\t\t\t\t__html: 'input#' + this.state.inputId + '::-ms-clear {display: none;}'\n\t\t\t\t} }) : null;\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar sizerValue = [this.props.defaultValue, this.props.value, ''].reduce(function (previousValue, currentValue) {\n\t\t\t\tif (previousValue !== null && previousValue !== undefined) {\n\t\t\t\t\treturn previousValue;\n\t\t\t\t}\n\t\t\t\treturn currentValue;\n\t\t\t});\n\n\t\t\tvar wrapperStyle = _extends({}, this.props.style);\n\t\t\tif (!wrapperStyle.display) wrapperStyle.display = 'inline-block';\n\n\t\t\tvar inputStyle = _extends({\n\t\t\t\tboxSizing: 'content-box',\n\t\t\t\twidth: this.state.inputWidth + 'px'\n\t\t\t}, this.props.inputStyle);\n\n\t\t\tvar inputProps = _objectWithoutProperties(this.props, []);\n\n\t\t\tcleanInputProps(inputProps);\n\t\t\tinputProps.className = this.props.inputClassName;\n\t\t\tinputProps.id = this.state.inputId;\n\t\t\tinputProps.style = inputStyle;\n\n\t\t\treturn _react2.default.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: this.props.className, style: wrapperStyle },\n\t\t\t\tthis.renderStyles(),\n\t\t\t\t_react2.default.createElement('input', _extends({}, inputProps, { ref: this.inputRef })),\n\t\t\t\t_react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ ref: this.sizerRef, style: sizerStyle },\n\t\t\t\t\tsizerValue\n\t\t\t\t),\n\t\t\t\tthis.props.placeholder ? _react2.default.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ ref: this.placeHolderSizerRef, style: sizerStyle },\n\t\t\t\t\tthis.props.placeholder\n\t\t\t\t) : null\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn AutosizeInput;\n}(_react.Component);\n\nAutosizeInput.propTypes = {\n\tclassName: _propTypes2.default.string, // className for the outer element\n\tdefaultValue: _propTypes2.default.any, // default field value\n\textraWidth: _propTypes2.default.oneOfType([// additional width for input element\n\t_propTypes2.default.number, _propTypes2.default.string]),\n\tid: _propTypes2.default.string, // id to use for the input, can be set for consistent snapshots\n\tinjectStyles: _propTypes2.default.bool, // inject the custom stylesheet to hide clear UI, defaults to true\n\tinputClassName: _propTypes2.default.string, // className for the input element\n\tinputRef: _propTypes2.default.func, // ref callback for the input element\n\tinputStyle: _propTypes2.default.object, // css styles for the input element\n\tminWidth: _propTypes2.default.oneOfType([// minimum width for input element\n\t_propTypes2.default.number, _propTypes2.default.string]),\n\tonAutosize: _propTypes2.default.func, // onAutosize handler: function(newWidth) {}\n\tonChange: _propTypes2.default.func, // onChange handler: function(event) {}\n\tplaceholder: _propTypes2.default.string, // placeholder text\n\tplaceholderIsMinWidth: _propTypes2.default.bool, // don't collapse size to less than the placeholder\n\tstyle: _propTypes2.default.object, // css styles for the outer element\n\tvalue: _propTypes2.default.any // field value\n};\nAutosizeInput.defaultProps = {\n\tminWidth: 1,\n\tinjectStyles: true\n};\n\nexports.default = AutosizeInput;","import * as React from 'react';\nimport { useDispatch, useStore } from 'react-redux';\nimport { push } from 'connected-react-router';\nimport { List } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport QuoteServiceApi from '../../modules/QuoteModule/QuoteServiceApi';\nimport { getDiscontinuedProducts, IDiscontinuedProduct } from '../../modules/QuoteModule/utils';\nimport { getQuoteEditPath } from '../../modules/QuoteModule/constants';\nimport { makeSelectAppId, makeSelectEnv } from '../../modules/AtsModule/selectors';\nimport DiscontinuedProductsModal from '../DiscontinuedProductsModal';\n\nexport interface IDiscontinuedProductsGuardRunOptions {\n  /**\n   * Sections to check, when the caller already holds the quote. Omit to have\n   * the guard fetch the quote by id.\n   */\n  sections?: List<IMap<any>>;\n  /** Overrides the default Review Quote behaviour of navigating to the edit page. */\n  onReviewQuote?: () => void;\n}\n\nexport interface IDiscontinuedProductsGuardHandle {\n  /**\n   * Either run `onContinue` straight away, or warn the user first when the\n   * quote holds discontinued products. A failed fetch also runs `onContinue` —\n   * the check is a courtesy, not a gate.\n   *\n   * Resolves once the check has settled, so a caller that had to fetch can show\n   * progress for exactly as long as the quote is in flight.\n   */\n  run: (quoteId: number, onContinue: () => void, options?: IDiscontinuedProductsGuardRunOptions) => Promise<void>;\n}\n\ninterface IPendingCheck extends IDiscontinuedProductsGuardRunOptions {\n  quoteId: number;\n  onContinue: () => void;\n  products: IDiscontinuedProduct[];\n}\n\n/**\n * Owns the warn-then-continue flow for quote actions (download, ERP, pricing\n * request). Drive it through its ref.\n *\n * From a list, where the row holds only a partial quote, let it fetch and pair\n * the item with `withProgress` so the spinner tracks the fetch:\n *\n *   { withProgress: true, onClick: (id) => guardRef.current.run(id, () => download(id)) }\n *\n * From a page that already has the quote, hand it the sections to skip the fetch:\n *\n *   guardRef.current.run(id, download, { sections, onReviewQuote })\n */\nconst DiscontinuedProductsGuard = React.forwardRef<IDiscontinuedProductsGuardHandle, {}>((_props, ref) => {\n  const dispatch = useDispatch();\n  // useStore, not useSelector: env/appId are only read inside run(), and this\n  // guard is mounted once per row in some lists — subscribing there would cost\n  // two selector runs per row on every dispatch.\n  const store = useStore();\n\n  const [pending, setPending] = React.useState<IPendingCheck>(null);\n\n  // List rows unmount freely (re-sort, pagination, refetch), so a fetch can land\n  // after this guard is gone — keep the state updates off an unmounted tree.\n  const mounted = React.useRef(true);\n  React.useEffect(() => () => { mounted.current = false; }, []);\n\n  React.useImperativeHandle(ref, () => ({\n    run: async (quoteId: number, onContinue: () => void, options: IDiscontinuedProductsGuardRunOptions = {}) => {\n      let sections: any = options.sections;\n      if (!sections) {\n        const state = store.getState();\n        // fetch failure falls through to the original action\n        const quote = await QuoteServiceApi\n          .fetchQuoteById(makeSelectEnv()(state), makeSelectAppId()(state), quoteId)\n          .catch(() => null);\n        sections = quote?.sections;\n      }\n\n      const products = getDiscontinuedProducts(sections);\n      if (mounted.current && products.length) {\n        setPending({ quoteId, onContinue, products, ...options });\n      } else {\n        onContinue();\n      }\n    }\n  }), [store]);\n\n  const handleContinue = () => {\n    const onContinue = pending?.onContinue;\n    setPending(null);\n    onContinue?.();\n  };\n\n  const handleReviewQuote = () => {\n    const { quoteId, onReviewQuote } = pending || ({} as IPendingCheck);\n    setPending(null);\n    if (onReviewQuote) {\n      onReviewQuote();\n    } else if (quoteId) {\n      dispatch(push(getQuoteEditPath(quoteId)));\n    }\n  };\n\n  // Mounted only while a warning is up — some lists render one guard per row,\n  // and an always-mounted Dialog costs a translation subscription apiece.\n  return pending\n    ? <DiscontinuedProductsModal\n        open={true}\n        products={pending.products}\n        onContinue={handleContinue}\n        onReviewQuote={handleReviewQuote}\n        onClose={() => setPending(null)}\n      />\n    : null;\n});\n\nexport default DiscontinuedProductsGuard;\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableRow,\n  Theme,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { IDiscontinuedProduct } from '../../modules/QuoteModule/utils';\n\ninterface IDiscontinuedProductsModalComponentProps {\n  open: boolean;\n  /** The offending products, listed under the message so the user can go find them. */\n  products?: IDiscontinuedProduct[];\n  /** Proceed with the action the user originally asked for. */\n  onContinue: () => void;\n  /** Abandon the action and send the user back to the quote instead. */\n  onReviewQuote: () => void;\n  onClose?: () => void;\n}\n\ntype DiscontinuedProductsModalProps =\n  IDiscontinuedProductsModalComponentProps\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  paper: {\n    width: 500,\n  },\n  content: {\n    padding: theme.spacing(4, 5, 2),\n  },\n  message: {\n    marginBottom: 0,\n    textAlign: 'center',\n  },\n  // Long quotes can carry a lot of discontinued products; cap the list and let\n  // it scroll rather than pushing the buttons off screen.\n  tableContainer: {\n    marginTop: theme.spacing(3),\n    maxHeight: 240,\n    overflowY: 'auto',\n  },\n  rowNumberCell: {\n    width: 72,\n  },\n  actions: {\n    justifyContent: 'center',\n    paddingBottom: theme.spacing(3),\n  },\n  reviewButton: {\n    borderRadius: 24,\n    marginLeft: theme.spacing(3),\n  },\n});\n\nconst DiscontinuedProductsModal: React.FC<DiscontinuedProductsModalProps> = ({\n  open,\n  products,\n  onContinue,\n  onReviewQuote,\n  onClose,\n  classes,\n  t,\n}) => (\n  <Dialog\n    open={open}\n    onClose={onClose}\n    aria-describedby='discontinued-products-description'\n    // maxWidth off so the paper's own 500px width wins; the Dialog's own\n    // margins still keep it inside narrow viewports.\n    maxWidth={false}\n    classes={{ paper: classes.paper }}\n  >\n    <DialogContent className={classes.content}>\n      <DialogContentText\n        id='discontinued-products-description'\n        variant='h6'\n        color='textPrimary'\n        className={classes.message}\n      >\n        {t('discontinuedProductsModal.message')}\n      </DialogContentText>\n      {Boolean(products?.length) &&\n        <div className={classes.tableContainer}>\n          <Table size='small' stickyHeader={true}>\n            <TableHead>\n              <TableRow>\n                <TableCell className={classes.rowNumberCell}>{t('discontinuedProductsModal.row')}</TableCell>\n                <TableCell>{t('discontinuedProductsModal.productNumber')}</TableCell>\n              </TableRow>\n            </TableHead>\n            <TableBody>\n              {products.map((product, index) =>\n                <TableRow key={`${product.row}-${product.productNumber}-${index}`}>\n                  <TableCell className={classes.rowNumberCell}>{product.row ?? '-'}</TableCell>\n                  <TableCell>{product.productNumber || '-'}</TableCell>\n                </TableRow>\n              )}\n            </TableBody>\n          </Table>\n        </div>\n      }\n    </DialogContent>\n    <DialogActions className={classes.actions}>\n      <Button onClick={onContinue} color='primary'>\n        {t('formButtons.continue')}\n      </Button>\n      <Button\n        onClick={onReviewQuote}\n        color='primary'\n        variant='outlined'\n        className={classes.reviewButton}\n      >\n        {t('discontinuedProductsModal.reviewQuote')}\n      </Button>\n    </DialogActions>\n  </Dialog>\n);\n\nexport default compose<React.ComponentClass<IDiscontinuedProductsModalComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(DiscontinuedProductsModal);\n","import * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Typography,\n  Grid,\n} from '@material-ui/core';\nimport {\n  StyleRules, StyledComponentProps\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectDebugState } from '../../modules/DebugModule/selectors';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { GridClassKey } from '@material-ui/core/Grid';\nimport pick from 'lodash/pick';\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n  }\n});\n\ninterface IErrorBoundaryComponentProps extends StyledComponentProps<keyof ReturnType<typeof styles>> {\n  errorMessage?: string;\n}\n\ninterface IErrorBoundaryProps extends IErrorBoundaryComponentProps {\n  debug: number;\n}\n\ninterface IErrorBoundaryState {\n  error?: Error;\n  errorInfo?: {\n    componentStack: string;\n  };\n}\n\ntype ErrorBoundaryProps = IErrorBoundaryProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\nclass ErrorBoundary extends React.Component<ErrorBoundaryProps, IErrorBoundaryState> {\n\n  public state: IErrorBoundaryState = {\n  };\n\n  // public static getDerivedStateFromError(error) {\n  //   return { hasError: true };\n  // }\n\n  public componentDidCatch(error, errorInfo) {\n    const {\n      debug,\n      children,\n    } = this.props;\n    this.setState({\n      error,\n      errorInfo,\n    });\n    if (debug >= 10) {\n      console.error('ErrorBoundary Catch', { // tslint:disable-line\n        children,\n        error,\n        errorInfo,\n      });\n    }\n  }\n\n  public render() {\n    const {\n      errorMessage: _errorMessage,\n      debug,\n      classes,\n    } = this.props;\n\n    const {\n      error,\n      errorInfo,\n    } = this.state;\n\n    const errorMessage = _errorMessage != null ? _errorMessage : 'Something went wrong.';\n\n    if (error != null) {\n      if (debug >= 10) {\n        console.error('ErrorBoundary', { // tslint:disable-line\n          debug,\n          errorMessage,\n          error,\n          errorInfo,\n        });\n      }\n      return <Grid\n        classes={pick(classes, ['container'])}\n        container={true}\n        direction='column'\n        justify='center'\n        alignItems='center'\n      >\n        <Grid\n          item={true}\n        >\n          <FontAwesomeIcon icon='ban' />\n        </Grid>\n        <Grid\n          item={true}\n        >\n          <Typography>{errorMessage}</Typography>\n        </Grid>\n      </Grid>;\n    }\n\n    return this.props.children;\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  debug: makeSelectDebugState(),\n});\n\nexport default compose<React.ComponentClass<IErrorBoundaryComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps),\n)(ErrorBoundary);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0zm10 5h4v2h-4zm0 0h4v2h-4z\"\n}), _react.default.createElement(\"path\", {\n  d: \"M10 16v-1H3.01L3 19c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2v-4h-7v1h-4zm10-9h-4.01V5l-2-2h-4l-2 2v2H4c-1.1 0-2 .9-2 2v3c0 1.11.89 2 2 2h6v-2h4v2h6c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm-6 0h-4V5h4v2z\"\n})), 'BusinessCenter');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"\n}), 'People');\n\nexports.default = _default;","import * as React from 'react';\nimport { withStyles, StyleRules } from '@material-ui/core/styles';\nimport {\n  Tooltip as MuiTooltip,\n} from '@material-ui/core';\n\nconst styles = (): StyleRules => ({\n  popper: {\n    pointerEvents: 'none',\n  },\n});\n\nexport interface ITooltipProps {\n  title: string;\n  classes?: {\n    [propName: string]: any;\n  };\n  children?: any;\n  placement?: 'top-start' | 'bottom' | 'right' | 'top' | 'left' |\n    'bottom-start' | 'bottom-end' | 'left-end' | 'left-start' |\n    'right-end' | 'right-start' | 'top-end';\n}\n\nconst Tooltip: React.FC<ITooltipProps> = (props) => {\n  const { children, classes } = props;\n\n  return (<MuiTooltip\n    classes={{\n      popper: classes.popper,\n    }}\n    {...props}\n  >\n    {children}\n  </MuiTooltip>\n  );\n};\n\nexport default withStyles(styles)(Tooltip);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import * as React from 'react';\nimport {compose, Dispatch} from 'redux';\nimport { IAction } from 'ats-utils/src/Interfaces/IAction/index';\nimport { connect } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  IconButton,\n  Button,\n  Grid,\n  Typography\n} from '@material-ui/core';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {reset, InjectedFormProps} from 'redux-form';\nimport {Form, reduxForm} from 'redux-form/immutable';\nimport { Map } from 'immutable';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport DrawerEditHeader from '../DrawerEditHeader';\ninterface IGenericDrawerComponentProps {\n  ContentComponent: any;\n  title: string;\n  drawerId: string;\n  form?: string;\n  data?: any;\n  closeOnSubmit?: boolean;\n  onCloseOverride?: () => void;\n  onSubmit(values: Map<string, any>): void;\n}\n\ninterface IGenericDrawerProps extends IGenericDrawerComponentProps {\n  dispatch: Dispatch<IAction>;\n}\n\ntype GenericDrawerType = IGenericDrawerProps\n & InjectedFormProps\n & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass GenericDrawer extends React.Component<GenericDrawerType, {}> {\n  public state = {\n  };\n\n  public handleClose = () => {\n    const {\n      drawerId,\n      form,\n      dispatch,\n      onCloseOverride,\n    } = this.props;\n\n    dispatch(reset(form));\n    dispatch(new ToggleOverlayComponentAction({\n      id: drawerId,\n      open: false,\n    }));\n  }\n\n  public handleSubmit = (values: Map<string, any>) => {\n    this.props.onSubmit(values);\n    if (this.props.closeOnSubmit !== false) {\n      this.props.onCloseOverride ? this.props.onCloseOverride() : this.handleClose();\n    }\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      classes,\n      title,\n      ContentComponent,\n      form,\n      data,\n    } = this.props;\n\n    return (\n      <Grid\n        className={classes.root}\n        container={true}\n        direction='column'\n        wrap='nowrap'\n      >\n        { /* Header */}\n        <DrawerEditHeader title={title} handleClose={this.handleClose}/>\n\n        <Form\n          onSubmit={handleSubmit(this.handleSubmit)}\n          className={classes.body}\n        >\n          {/* Main */}\n          <Grid\n            container={true}\n            direction='column'\n          >\n            <ContentComponent form={form} data={data}/>\n          </Grid>\n\n          {/* Cancel and Save Buttons Section */}\n          <DrawerEditCTA handleClose={this.handleClose}/>\n        </Form>\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  header: {\n    background: `linear-gradient(225deg, ${theme.palette.secondary[700]} 0%, ${theme.palette.secondary[900]} 100%)`,\n    color: theme.palette.common.white,\n    position: 'sticky',\n    top: '0',\n    zIndex: theme.zIndex.drawer + 1,\n  },\n  body: {\n    padding: theme.spacing(3, 3, 0, 3),\n    color: theme.palette.text.primary\n  },\n  textColor: {\n    color: theme.palette.common.white\n  },\n  title: {\n    marginLeft: theme.spacing(3)\n  },\n  buttonsSection: {\n    padding: theme.spacing(2, 0, 2, 3),\n    position: 'sticky',\n    bottom: 0\n  }\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\n\nconst mapStateToProps = (state, ownProps) => {\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const initialValues = data;\n\n  return {\n    initialValues,\n  };\n};\n\nexport default compose<React.ComponentClass<IGenericDrawerComponentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    // destroyOnUnmount: true,\n    enableReinitialize : true,\n  })\n)(GenericDrawer);\n","import Lodable from '@loadable/component';\n\nexport default (Lodable as any)(() => import('./VirtualizedTable'));\n","import * as React from 'react';\nimport {\n  Field,\n  reduxForm,\n  formValueSelector,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Button,\n  Tooltip,\n  Theme\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\n\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../../components/FieldTextField';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport StoreContext from '../../../../contexts/StoreContext';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Link, withRouter, RouteComponentProps\n} from 'react-router-dom';\nimport {\n  required\n} from '../../../../validators';\nimport {IAction, IConfig, IMap, isEmail} from 'ats-utils/src';\n\nimport {\n  Map, getIn,\n} from 'immutable';\nimport {LoginWithEmailAction, UserLogInAction, VerifyEmailByKeyAction} from '../../../../modules/AtsModule/actions';\nimport {CustomizedSnackbar, LinkButton} from '../../../../components';\nimport { makeSelectConfig, makeSelectError } from '../../../../modules/AtsModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { SPEC_TOOL_ID, FORGOTPASSWORD_PATH, SIGNUP_PATH } from '../../../../constants';\nimport { Error } from '../../../../models';\nimport { push } from 'connected-react-router';\nimport PersonIcon from '@material-ui/icons/Person';\nimport VpnKeyRoundedIcon from '@material-ui/icons/VpnKeyRounded';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffRoundedIcon from '@material-ui/icons/VisibilityOffRounded';\nimport {SetSnackbarClosedAction} from '../../../../modules/ApplicationModule/actions';\n\ninterface ILogin extends InjectedFormProps {\n  error: string;\n  loginError: IMap<Error> | boolean;\n  passwordTypeEnabled: boolean;\n  togglePasswordVisibility: (arg: boolean) => boolean;\n  onSubmit: () => any;\n  dispatch: (action: IAction) => object;\n  formValues: Map<string, any>;\n  config: IMap<IConfig>;\n  emailKey: string;\n  email: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  fullWidth: {\n    width: '100%',\n  },\n  icon: {\n    padding: theme.spacing(1),\n  },\n  error: {\n    fontSize: 12,\n    display: 'flex',\n    justifyContent: 'space-between',\n    color: '#f00',\n    wordWrap: 'break-word' as 'break-word'\n  },\n  links: {\n    fontSize: 12,\n    color: theme.palette.grey[600],\n    paddingTop: theme.spacing(2),\n  }\n});\n\nexport const FORM_NAME = '__login_form__';\n\ntype LoginProps = WithTranslation & ILogin & RouteComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass Login extends React.Component<LoginProps, {}> {\n  public state = {\n    passwordTypeEnabled: true\n  };\n\n  public ButtonComponent = this.props.config.getIn(['atsApiOptions', 'apiKey'], null) === SPEC_TOOL_ID ? LinkButton : Button;\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      emailKey,\n      email,\n      location\n    } = this.props;\n\n    if (emailKey && email) {\n      setTimeout(() => dispatch(new VerifyEmailByKeyAction({key: emailKey, email})), 500);\n    }\n  }\n  public componentWillUnmount() {\n    const { dispatch } = this.props;\n    dispatch(new SetSnackbarClosedAction());\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      t,\n      onSubmit,\n      error,\n      loginError,\n      classes,\n      config,\n      dispatch,\n    } = this.props;\n    const { passwordTypeEnabled } = this.state;\n\n    const withSignUp = !config.get('noSignUp');\n\n    return (\n      <form\n        className={classes.fullWidth}\n        onSubmit={handleSubmit(onSubmit)}\n      >\n        <CustomizedSnackbar />\n        <Grid\n          container={true}\n          direction='column'\n        >\n          <Grid\n            container={true}\n            item={true}\n            direction='column'\n          >\n            {\n              loginError ?\n              <Grid\n                container={true}\n                item={true}\n                direction='row'\n                wrap='nowrap'\n                alignItems='center'\n              >\n                <div\n                  className={classes.error}\n                  style={{ marginBottom: withSignUp ? 0 : 12 }}\n                >\n                  {withSignUp ? t('login.error') : t('login.errorNoSignUp', 'You entered an incorrect email, password, or both.')}\n                </div>\n                {\n                  withSignUp\n                    ? <Button\n                        color='primary'\n                        onClick={() => dispatch(push(SIGNUP_PATH))}\n                      >\n                        {t('loginPage.signUp')}\n                      </Button>\n                    : null\n                }\n              </Grid>\n              : ''\n            }\n          </Grid>\n          <Grid\n            container={true}\n            item={true}\n          >\n            <Grid\n              container={true}\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='username'\n                props={{\n                  label: `${t('login.username')}:`,\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  inputProps: {\n                    id: 'login-username-m',\n                    InputProps: {\n                      startAdornment: <PersonIcon className={classes.icon}/>,\n                    },\n                  }\n                }}\n                validate={[\n                  required,\n                ]}\n                component={FieldTextField}\n              />\n            </Grid>\n            <Grid\n              container={true}\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='password'\n                props={{\n                  label: `${t('login.password')}:`,\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                  inputProps: {\n                    // fullWidth: true,\n                    type: passwordTypeEnabled ? 'password' : 'text',\n                    InputProps: {\n                      id: 'login-password-m',\n                      startAdornment: <VpnKeyRoundedIcon className={classes.icon}/>,\n                      endAdornment: (\n                        <Tooltip\n                          title={t('toggle.password')}\n                          placement='top'\n                        >\n                          <Button\n                            className={classes.icon}\n                            onClick={this.togglePasswordVisible}\n                          >\n                            {\n                              passwordTypeEnabled === true ?\n                              <VisibilityIcon /> : <VisibilityOffRoundedIcon />\n                            }\n                          </Button>\n                        </Tooltip>\n                      )\n                    }\n                  },\n                }}\n                validate={[\n                  required,\n                ]}\n                component={FieldTextField}\n              />\n            </Grid>\n            {/* REQUESTED TO BE HIDDEN FOR NOW, SEE TICKET PT-799 */}\n            {/* <Grid\n              container={true}\n              item={true}\n            >\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='rememberMe'\n                props={{\n                  label: `${t('login.rememberMe')}`,\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n                validate={[\n                ]}\n                component={FieldCheckbox}\n              />\n            </Grid> */}\n            <Grid\n              item={true}\n            >\n              <this.ButtonComponent\n                id='login-submit-m'\n                type='submit'\n                variant='contained'\n                color='primary'\n              >\n                {t('loginPage.logIn')}\n              </this.ButtonComponent>\n            </Grid>\n            <Grid\n              item={true}\n              container={true}\n              direction='column'\n              alignItems='flex-start'\n            >\n              <Link\n                className={classes.links}\n                to={FORGOTPASSWORD_PATH}\n              >\n                {t('loginPage.forgetPassword')}\n              </Link>\n            </Grid>\n          </Grid>\n        </Grid>\n      </form>\n    );\n  }\n  public togglePasswordVisible = () => {\n    const { passwordTypeEnabled } = this.state;\n    this.setState({passwordTypeEnabled: !passwordTypeEnabled});\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    onSubmit: (values: any) => {\n      const { username, password } = values.toJS();\n      if (isEmail(username)) {\n        dispatch(new LoginWithEmailAction({ username, password }));\n      } else {\n        dispatch(new UserLogInAction({username, password}));\n      }\n    },\n  };\n};\n\nconst mapStateToProps = (state: any, ownProps) => {\n\n  const {\n    match,\n  } = ownProps;\n\n  const emailKey = getIn(match, ['params', 'key'], undefined);\n  const email = getIn(match, ['params', 'email'], undefined);\n\n  const error = state.getIn(['login', 'error']);\n  const passwordTypeEnabled = true;\n  const { username, password } = selector(state, 'username', 'password');\n  return {\n    passwordTypeEnabled,\n    username,\n    password,\n    error,\n    emailKey,\n    email,\n    formValues: getFormValues(FORM_NAME)(state) || Map(),\n    ...createStructuredSelector({\n      loginError: makeSelectError(),\n      config: makeSelectConfig(),\n    })(state)\n  };\n};\n\nconst selector = formValueSelector(FORM_NAME);\n\nconst WrappedComponent = compose<React.ComponentClass<{}>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  reduxForm({\n    form: FORM_NAME,\n  }),\n  withRouter,\n  connect(mapStateToProps, mapDispatchToProps),\n)(Login);\n\nWrappedComponent.contextType = StoreContext;\n\nexport default WrappedComponent;\n","import _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport ExtendableError from 'es6-error';\n\nvar SubmissionError =\n/*#__PURE__*/\nfunction (_ExtendableError) {\n  _inheritsLoose(SubmissionError, _ExtendableError);\n\n  function SubmissionError(errors) {\n    var _this;\n\n    _this = _ExtendableError.call(this, 'Submit Validation Failed') || this;\n    _this.errors = errors;\n    return _this;\n  }\n\n  return SubmissionError;\n}(ExtendableError);\n\nexport default SubmissionError;","var defaultShouldAsyncValidate = function defaultShouldAsyncValidate(_ref) {\n  var initialized = _ref.initialized,\n      trigger = _ref.trigger,\n      pristine = _ref.pristine,\n      syncValidationPasses = _ref.syncValidationPasses;\n\n  if (!syncValidationPasses) {\n    return false;\n  }\n\n  switch (trigger) {\n    case 'blur':\n    case 'change':\n      // blurring\n      return true;\n\n    case 'submit':\n      // submitting, so only async validate if form is dirty or was never initialized\n      // conversely, DON'T async validate if the form is pristine just as it was initialized\n      return !pristine || !initialized;\n\n    default:\n      return false;\n  }\n};\n\nexport default defaultShouldAsyncValidate;","import {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { List } from 'immutable';\n\nexport default {};\n\nexport enum BuildingTypes {\n  GET_BUILDING_CLASS_SUCCEEDED = 'GET_BUILDING_SUCCEEDED',\n  GET_BUILDING_CLASS_FAILED = 'GET_BUILDING_FAILED',\n  GET_BUILDING_CLASSES = 'GET_BUILDING_CLASS',\n  GET_BUILDING_TYPES = 'GET_BUILDING_TYPES',\n  GET_BUILDING_TYPES_SUCCESS = 'GET_BUILDING_TYPES_SUCCESS',\n  GET_BUILDING_TYPES_FAILED = 'GET_BUILDING_TYPES_FAILED',\n  SELECT_BUILDING_CLASS = 'SELECT_BUILDING_CLASS',\n  SELECT_BUILDING_TYPE = 'SELECT_BUILDING_TYPE',\n}\n\n// TODO: add models to replace interfaces declared here\n\ninterface IBuildingResponse {\n  id?: string | number;\n  list: List<IMap<any>>;\n}\n\nexport class SelectBuildingClassAction implements IAction {\n  public readonly type = BuildingTypes.SELECT_BUILDING_CLASS;\n\n  constructor(\n    public payload: any\n  ) {}\n}\n\nexport class SelectBuildingTypeAction implements IAction {\n  public readonly type = BuildingTypes.SELECT_BUILDING_TYPE;\n\n  constructor(\n    public payload: any\n  ) {}\n}\n\nexport class GetBuildingClassesAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_CLASSES;\n\n  constructor (\n    public payload?: IBuildingResponse\n  ) {}\n}\n\nexport class GetBuildingClassSucceededAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_CLASS_SUCCEEDED;\n\n  constructor(\n    public payload: IBuildingResponse\n  ) {}\n}\n\nexport class GetBuildingClassFailedAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_CLASS_FAILED;\n\n  constructor(\n    public payload: {\n      error: Error | string;\n    }\n  ) {}\n}\n\nexport class GetBuildingTypesAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_TYPES;\n\n  constructor(\n    public payload: string | number\n  ) {}\n}\n\nexport class GetBuildingTypesSucceededAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_TYPES_SUCCESS;\n\n  constructor(\n    public payload: IBuildingResponse\n  ) {}\n}\n\nexport class GetBuildingTypesFailedAction implements IAction {\n  public readonly type = BuildingTypes.GET_BUILDING_TYPES_FAILED;\n\n  constructor(\n    public payload: {\n      error: Error | string;\n    }\n  ) {}\n}\n","import {\n  createSelector,\n} from 'reselect';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  IBuildingState,\n} from './reducer';\n\n// import {\n//   Settings,\n// } from '../../models';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added ApplicationModule to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectBuildingClasses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingState>) => state.get('buildingClasses'),\n);\n\nexport const makeSelectBuildingTypes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingState>) => state.get('buildingTypes'),\n);\n\nexport const makeSelectSelectedBuildingClasses = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingState>) => state.get('selectedBuildingClasses'),\n);\n\nexport const makeSelectSelectedBuildingTypes = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IBuildingState>) => state.get('selectedBuildingTypes'),\n);\n\nexport default {\n  selectReducerState,\n};\n","export default {};\nexport const DEFAULT_MOUNT_POINT = 'quoteBuilding';\n","import * as React from 'react';\nimport {\n  AnyAction,\n  compose,\n  Dispatch,\n} from 'redux';\nimport { isEqual } from 'lodash';\nimport { batch, connect } from 'react-redux';\nimport {\n  Button,\n  Card,\n  CardContent,\n  Checkbox,\n  CircularProgress,\n  FormControl,\n  FormControlLabel,\n  Grid,\n  TextField,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\n\nimport {\n  GetCitiesAction,\n  GetCountriesAction,\n  GetProvincesAction,\n  SaveCityNameAction,\n  SaveCountryNameAction,\n  SaveProvinceNameAction,\n} from '../../modules/LocationModule/actions';\nimport {\n  GetBuildingTypesAction,\n  SelectBuildingClassAction,\n} from '../../modules/QuoteBuildingModule/actions';\nimport {\n  makeSelectBuildingTypes,\n  makeSelectSelectedBuildingClasses,\n  makeSelectSelectedBuildingTypes,\n} from '../../modules/QuoteBuildingModule/selectors';\nimport { GetBuildingClassesAction, } from '../../modules/BuildingModule/actions';\nimport { makeSelectBuildingClasses, } from '../../modules/BuildingModule/selectors';\nimport { withTranslation, } from 'react-i18next';\nimport {\n  fromJS,\n  List,\n  Set,\n} from 'immutable';\nimport Select, { components } from 'react-select';\nimport { IMap } from 'ats-utils/src/Interfaces/index';\nimport Project from '../../models/Project';\nimport {\n  makeSelectIsTrackingOrUntrackingProject,\n  makeSelectProject,\n  makeSelectSearchedProjects,\n  makeSelectSelectedProjectId,\n  makeSelectTrackedProjectIds\n} from '../../modules/ProjectModule/selectors';\nimport {\n  GetProjectByIdAndSelectProjectAction,\n  GetProjectsAction,\n  GetTrackedProjectsAction,\n  QuickSearchProjectsAction,\n  SelectProjectAction,\n  TrackProjectAction,\n  UntrackProjectAction\n} from '../../modules/ProjectModule/actions';\nimport { makeSelectQuoteFormProps } from '../../modules/QuoteModule/selectors';\nimport SearchIcon from '@material-ui/icons/Search';\nimport {\n  Field,\n  formValueSelector\n} from 'redux-form/immutable';\nimport {\n  BaseFieldProps,\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  dateNoEarlierThan,\n  isNotEmpty,\n  isNumberGreaterThanZero,\n  isValidMomentDate,\n  required\n} from '../../validators';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport FieldReactSelect, { IFieldReactSelectComponentProps } from '../FieldReactSelect';\nimport moment from 'moment';\nimport { IChangeValueHandler } from '../QuoteForm/types';\nimport {\n  RouteComponentProps,\n  withRouter,\n} from 'react-router';\nimport { IFieldDatePickerV2CustomProps } from '../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../FieldDatePickerV2';\nimport { WithUserId } from '../../hoc';\nimport { makeSelectUserId } from '../../modules/AtsModule/selectors';\nimport { utcToLocal } from 'ats-utils/src';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT, CREATE_NEW_QUOTE_FROM_SPEC_PATH } from '../../constants';\nimport { makeSelectSpecToolProjectListIsLoading } from '../../modules/ApplicationModule/selectors';\nimport { Contact } from '../../models';\nimport { AddCustomerSalesRepsToQuoteAction } from '../../modules/QuoteEditModule/actions';\nimport { getPredefinedContactRole, isArchitect, isContractor, isEngineer, PredefinedContactRole } from '../../modules/QuoteModule/utils';\n\ninterface IQuoteProjectInfoComponentProps {\n  onChange?: IChangeValueHandler;\n  toggleProjectView?: () => void;\n}\n\ninterface IQuoteProjectInfoProps extends IQuoteProjectInfoComponentProps, RouteComponentProps<{ projectId: string }> {\n  dispatch: Dispatch;\n  isTrackingOrUntrackingProject: boolean;\n  isSearchingProjects: boolean;\n  quoteId?: number;\n  countries?: List<any>;\n  provinces?: List<any>;\n  cities?: List<any>;\n  buildingClasses?: List<any>;\n  buildingTypes?: List<any>;\n  selectedBuildingClasses: any[];\n  fetchCountries?: () => void;\n  selectCountry?: (param: any) => any;\n  selectProvince?: (param: any) => any;\n  selectCity?: (param: any) => any;\n  getBuildingClasses?: () => void;\n  getBuildingTypes?: (param: any) => void;\n  selectBuildingClasses?: (param: any) => void;\n  searchedProjects?: List<IMap<Project>>;\n  searchProjects?: (key: string) => void;\n  searchProjectsById?: (id: number) => void;\n  linkedProject?: IMap<Project>;\n  linkedProjectId?: number;\n  selectedProjectId?: number;\n  trackedProjects: List<number>;\n  customers?: Array<IMap<Contact>>;\n  getProject?: (id: number) => void;\n  resetSelectedProjectId: () => void;\n  trackProject: (args: { projectId, type, typeId }) => void;\n  untrackProject: (args: { projectId, type, typeId }) => void;\n  getTrackedProjects: () => void;\n  t?(...args: any[]): any;\n}\n\ninterface IInjectedFormValues {\n  period: number;\n}\n\ntype QuoteProjectInfoProps =\n  IQuoteProjectInfoProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & InjectedFormProps\n  & IInjectedFormValues\n  & WithUserId\n  & WithAmplitudeData;\n\nexport interface IKeyContact {\n  label: string;\n  value: string;\n  name: string;\n  company: string;\n  type: string;\n  address: string;\n  id: string;\n  permissions: string;\n  phone: string;\n}\n\nclass QuoteProjectInfo extends React.Component<QuoteProjectInfoProps, {}> {\n\n  public state = {\n    data: {\n      name: '',\n      building: {\n        buildingClasses: List([]),\n      },\n      location: {\n        country: null,\n        province: null,\n        city: null,\n      },\n      address: '',\n      keyContacts: List<IMap<IKeyContact>>(),\n      bidDate: null,\n      area: null,\n      tracking: null\n    },\n    createNew: false,\n    createProject: false,\n    selectedProject: null,\n    isProjectLinked: false,\n    preselectedProjectLoaded: 0,\n    error: '',\n    createProjectTrackChecked: false\n  };\n\n  public testValid = (value: any) => {\n    const {\n      selectedBuildingClasses,\n      buildingTypes,\n      t\n    } = this.props;\n\n    const selectedClasses = selectedBuildingClasses && selectedBuildingClasses.map(buildingClass => {\n      return buildingClass.id || null;\n    });\n\n    const selectedTypes = value && value.map(buildingType => {\n      return buildingType.classId || null;\n    }) || [];\n\n    const validTypes = selectedClasses && !Boolean(selectedClasses.map(selectedClass =>\n      (!buildingTypes.get(selectedClass, []).size || selectedTypes.includes(selectedClass)))\n      .filter(x => !x)\n      .length\n    );\n\n    return validTypes ? undefined : t(['translations:errors.buildingTypeInBuildingClass', 'Selected building classes require additional types']);\n  }\n\n  public componentDidMount() {\n    const {\n      fetchCountries,\n      getBuildingClasses,\n      match,\n      getProject,\n      linkedProject,\n      linkedProjectId,\n      resetSelectedProjectId,\n      getTrackedProjects,\n      onChange,\n    } = this.props;\n\n    if (!linkedProjectId) {\n      resetSelectedProjectId();\n    }\n\n    // fetchCountries();\n    getBuildingClasses();\n    getTrackedProjects();\n\n    if (match && match.params.projectId) {\n      getProject(Number(match.params.projectId));\n    }\n    if (linkedProjectId) {\n      this.setState({\n        selectedProject: linkedProject,\n        isProjectLinked: true,\n        createNew: !linkedProject,\n      });\n    }\n  }\n\n  public componentDidUpdate(prevProps: Readonly<QuoteProjectInfoProps>, prevState: any, snapshot?: any): void {\n    const {\n      quoteId,\n      selectedProjectId,\n      linkedProjectId,\n      getProject,\n      linkedProject,\n      searchProjectsById,\n      searchedProjects,\n      onChange,\n    } = this.props;\n    const { preselectedProjectLoaded, selectedProject: _selectedProject, isProjectLinked } = this.state;\n\n    if (!isEqual(prevProps.quoteId, quoteId)) {\n      if (quoteId && (!prevProps.quoteId && linkedProjectId\n        || (prevProps.quoteId && !isEqual(prevProps.linkedProjectId, linkedProjectId)))) {\n        getProject(linkedProjectId);\n      }\n    }\n\n    if (linkedProjectId && linkedProject && (!isEqual(prevProps.linkedProject, linkedProject) || (linkedProject && isProjectLinked && !prevState.isProjectLinked))) {\n      this.setState({\n        selectedProject: linkedProject,\n        isProjectLinked: true,\n        createNew: !linkedProject\n      }, () => {\n        onChange({\n          form: 'quote',\n          field: 'projectInfo.isLinked',\n          value: true,\n        });\n        onChange({\n          form: 'quote',\n          field: 'projectInfo.data',\n          value: linkedProject\n        });\n      });\n    }\n    if (_selectedProject?.get('id') && isProjectLinked && !prevState.isProjectLinked) {\n      this.setState({\n        selectedProject: _selectedProject,\n        isProjectLinked: true,\n        createNew: !_selectedProject\n      }, () => {\n        onChange({\n          form: 'quote',\n          field: 'projectInfo.isLinked',\n          value: true,\n        });\n        onChange({\n          form: 'quote',\n          field: 'projectInfo.data',\n          value: _selectedProject\n        });\n      });\n    }\n    if (!quoteId && selectedProjectId > -1 && preselectedProjectLoaded === 0) {\n      searchProjectsById(selectedProjectId);\n      this.setState({\n        preselectedProjectLoaded: 1\n      });\n    }\n\n    const selectedProject: any = searchedProjects.find((project: IMap<Project>) => project.get('id') === Number(selectedProjectId));\n    if (preselectedProjectLoaded === 1 && searchedProjects.size && selectedProject) {\n      this.selectExistingProject({ id: Number(this.props.selectedProjectId) });\n      onChange({\n        form: 'quote',\n        field: 'name',\n        value: selectedProject && selectedProject.get('name', null),\n      });\n      this.setState({\n        preselectedProjectLoaded: 2\n      }, () => {\n        this.linkUnLinkProject({ preLinked: true });\n      });\n    }\n\n    if (!quoteId && _selectedProject && !isEqual(prevState.selectedProject, _selectedProject)) {\n      const skipDates = Boolean(prevState.selectedProject && prevState.selectedProject.get('id') && _selectedProject.get('id') === prevState.selectedProject.get('id') && this.props.quoteId || !prevState.selectedProject && _selectedProject.get('id') === linkedProjectId);\n      this.linkUnLinkProject({ preLinked: true, skipDates });\n    }\n  }\n\n  public bidDateValidateFunc = (value, allValues) => {\n    const { t } = this.props;\n    const date: Date = new Date(allValues.getIn(['projectBidDate']));\n    const noLaterThan: Date = new Date();\n\n    return dateNoEarlierThan(date, noLaterThan, t('quoteInfo.passedBidDateWarning'));\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      searchedProjects,\n      searchProjects,\n      userId,\n      trackedProjects,\n      trackProject,\n      untrackProject,\n      onChange,\n      amplitudeData,\n      isTrackingOrUntrackingProject,\n      isSearchingProjects,\n      location\n    } = this.props;\n    const {\n      selectedProject,\n      isProjectLinked,\n      createProject,\n      createProjectTrackChecked\n    } = this.state;\n\n    return (\n      <Card className={classes.card}>\n        <CardContent>\n          <Typography variant='h6'>\n            {t('projectInfo.title')}\n          </Typography>\n          <Grid\n            className={classes.selectorContainer}\n            container={true}\n            item={true}\n            wrap='nowrap'\n          // xs={12}\n          >\n            <Grid\n              item={true}\n              xs={5}\n            >\n              <Select\n                name='projectInfo'\n                className={classes.optionSelect}\n                styles={customSelectStyles}\n                placeholder={t('projectInfo.searchProjectPlaceholder')}\n                isClearable={true}\n                options={searchedProjects ? searchedProjects.map((option: any) => ({\n                  label: option.get('name'),\n                  value: option.get('name'),\n                  id: option.get('id')\n                })).toArray() : []}\n                value={selectedProject && {\n                  label: selectedProject.get('name'),\n                  value: selectedProject.get('name'),\n                  id: selectedProject.get('id')\n                }}\n                isDisabled={isProjectLinked}\n                components={{ DropdownIndicator: this.dropdownIndicator }}\n                onChange={(e) => {\n                  this.selectExistingProject(e);\n                  // auto track project when select project\n                  const args = e && {\n                    projectId: e['id'],\n                    type: 'user',\n                    typeId: userId\n                  };\n                  if (e) {\n                    trackProject(args);\n                  }\n                }}\n                onInputChange={searchProjects}\n                isLoading={isSearchingProjects}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              container={true}\n              wrap='nowrap'\n            >\n              <Grid\n                item={true}\n              // xs={1}\n              // className={classes.linkButtonContainer}\n              >\n                <Button\n                  className={classes.buttonLink}\n                  // variant='outlined'\n                  disabled={location.pathname.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH)}\n                  onClick={(e) => {\n                    this.linkUnLinkProject({});\n\n                    // auto track/untrack project when click link/unlink\n                    const args = selectedProject && {\n                      projectId: selectedProject.get('id'),\n                      type: 'user',\n                      typeId: userId\n                    };\n                    if (args && !isProjectLinked) {\n                      trackProject(args);\n                    }\n                  }}\n                >\n                  {isProjectLinked ? t('projectInfo.projectUnlink') : t('projectInfo.projectLink')}\n                </Button>\n              </Grid>\n\n              <Grid\n                item={true}\n                container={true}\n              // xs={5}\n              // className={classes.buttonContainer}\n              >\n                {\n                  !isProjectLinked && <>\n                    <div style={{ padding: '12px' }}><span>{t('projectInfo.or')}</span></div>\n                    <Button\n                      className={classes.buttonCreateFolder}\n                      variant='outlined'\n                      onClick={this.createFolder}\n                    >\n                      {t('projectInfo.createFolderLabel')}\n                    </Button>\n                  </>\n                }\n              </Grid>\n              {selectedProject &&\n                <Grid\n                  item={true}\n                  className={classes.trackProjectContainer}\n                >\n                  <FormControlLabel\n                    label={t('projectInfo.trackProjectCheckboxLabel')}\n                    classes={{ label: classes.formControlLabel }}\n                    control={<Checkbox\n                      color='primary'\n                      disabled={isTrackingOrUntrackingProject}\n                      checked={trackedProjects.includes(selectedProject.get('id'))}\n                      onChange={e => {\n                        const args = selectedProject && {\n                          projectId: selectedProject.get('id'),\n                          type: 'user',\n                          typeId: userId\n                        };\n                        e.target.checked\n                          ? trackProject(args)\n                          : untrackProject(args);\n                        amplitude.logEvent(AMPLITUDE_EVENT.trackUntrackProject, amplitudeData({\n                          trackStatus: e.target.checked ? 'Track' : 'Untrack',\n                          projectName: selectedProject.get('name'),\n                          country: selectedProject.getIn(['location', 'country', 'value']),\n                          province: selectedProject.getIn(['location', 'province', 'value']),\n                          city: selectedProject.getIn(['location', 'city', 'value'])\n                        }));\n                      }}\n                    />}\n                  />\n                </Grid>\n              }\n              {/* decided to use a different checkbox component here since this once doesnt need to be controlled */}\n              {(!selectedProject && createProject) &&\n                <Grid\n                  item={true}\n                  className={classes.trackProjectContainer}\n                >\n                  <FormControlLabel\n                    label={t('projectInfo.trackProjectCheckboxLabel')}\n                    classes={{ label: classes.formControlLabel }}\n                    control={<Checkbox\n                      color='primary'\n                      checked={createProjectTrackChecked}\n                      disabled={isTrackingOrUntrackingProject}\n                      onChange={e => {\n                        const checked = e.target.checked;\n                        onChange({\n                          form: 'quote',\n                          field: `projectInfo.data.data.tracking`,\n                          value: checked ? fromJS({ user: [userId] }) : null,\n                        });\n                        this.setState((state: any) => ({\n                          ...state,\n                          data: {\n                            ...state.data,\n                            tracking: checked ? { user: [userId] } : null\n                          },\n                          createProjectTrackChecked: checked\n                        }));\n                        amplitude.logEvent(AMPLITUDE_EVENT.trackUntrackProject, amplitudeData({\n                          trackStatus: checked ? 'Track' : 'Untrack',\n                          projectName: this.state.data.name.length ? this.state.data.name : '-',\n                          country: this.state.data.location.country !== null ? this.state.data.location.country.get('value') : '-',\n                          province: this.state.data.location.province !== null ? this.state.data.location.province.get('value') : '-',\n                          city: this.state.data.location.city !== null ? this.state.data.location.city.get('value') : '-'\n                        }));\n                      }}\n                    />}\n                  />\n                </Grid>\n              }\n            </Grid>\n          </Grid>\n          {\n            (createProject || selectedProject) &&\n            <this.Contacts />\n          }\n        </CardContent>\n      </Card>\n    );\n  }\n\n  private Contacts = () => {\n    const {\n      classes,\n      t,\n      countries,\n      provinces,\n      cities,\n      buildingClasses,\n      buildingTypes,\n      selectedBuildingClasses\n    } = this.props;\n    const {\n      data: {\n        name,\n        building,\n        location,\n        address,\n        bidDate,\n        area,\n      },\n      selectedProject,\n    } = this.state;\n\n    const currentDate = moment();\n    const isDisabled = !!selectedProject;\n\n    const buildingClassOptions = (() => {\n\n      const singleUseOptions = [];\n\n      const multiUseOptions = buildingClasses.filter(x => x.get('isMulti')).map((buildingClass: any) => ({\n        label: buildingClass.get('value'),\n        value: buildingClass.get('value'),\n        name: buildingClass.get('value'),\n        id: buildingClass.get('id'),\n        isMulti: buildingClass.get('isMulti', false),\n        isSingle: buildingClass.get('isSingle', false),\n      })).toArray();\n\n      const allOptions = buildingClasses.map((buildingClass: any) => ({\n        label: buildingClass.get('value'),\n        value: buildingClass.get('value'),\n        name: buildingClass.get('value'),\n        id: buildingClass.get('id'),\n        isMulti: buildingClass.get('isMulti', false),\n        isSingle: buildingClass.get('isSingle', false),\n      })).toArray();\n\n\n      const areThereSelectedBuildingClasses = selectedBuildingClasses && selectedBuildingClasses.length;\n      const areNonMultiUseOptionsSelected = selectedBuildingClasses && selectedBuildingClasses.filter(x => !x.isMulti).length;\n\n      return areThereSelectedBuildingClasses\n        ? areNonMultiUseOptionsSelected\n          ? singleUseOptions\n          : multiUseOptions\n        : allOptions;\n\n    })();\n\n    const buildingClassesHaveNoBuildingTypes = () => {\n      const selectedClasses = selectedBuildingClasses && selectedBuildingClasses.map(buildingClass => {\n        return buildingClass.id || null;\n      });\n\n      const classesRequiringTypes = selectedClasses && selectedClasses.filter(selectedClass => {\n        return buildingTypes && buildingTypes.get(selectedClass) && buildingTypes.get(selectedClass).size;\n      });\n\n      return selectedClasses && classesRequiringTypes && !classesRequiringTypes.length;\n    };\n\n    return <Grid className={classes.gridContainer} container={true} spacing={3}>\n      <Grid item={true} xs={10}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          name='projectName'\n          component={FieldTextField}\n          props={{\n            label: t('projectInfo.projectName'),\n            require: true,\n            formControlProps: {\n              fullWidth: true,\n            },\n            inputProps: {\n              placeholder: t('projectInfo.projectName'),\n              type: 'text',\n              autoComplete: 'no',\n              disabled: isDisabled,\n              onChange: this.onFieldChange,\n              value: selectedProject\n                ? selectedProject.get('name') || ''\n                : name\n                  ? name\n                  : ''\n            },\n          }}\n          validate={isDisabled ? [] : [required, isNotEmpty]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name='buildingClasses'\n          onChange={this.selectBuildingClass}\n          component={FieldReactSelect}\n          inputProps={{\n            placeholder: t('projectInfo.buildingClassPlaceholder'),\n            classes,\n            className: classes.optionSelect,\n            isClearable: true,\n            isMulti: true,\n            isDisabled,\n            styles: { ...customSelectStyles, ...(isDisabled && disabledCustomStyles) },\n            require: true,\n            options: buildingClassOptions,\n            value: selectedProject\n              ? selectedProject\n                .getIn(['building', 'buildingClasses'], fromJS({}))\n                .map((buildingClass) => ({\n                  label: buildingClass.get('value'),\n                  value: buildingClass.get('value'),\n                  name: buildingClass.get('value'),\n                  id: buildingClass.get('id')\n                })).toArray()\n              : building.buildingClasses\n                ? building.buildingClasses.toJS()\n                : ''\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n          validate={isDisabled ? [] : [required, isNotEmpty]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name='buildingTypes'\n          onChange={this.selectBuildingType}\n          component={FieldReactSelect}\n          inputProps={{\n            placeholder: t('projectInfo.buildingTypePlaceholder'),\n            classes,\n            className: classes.optionSelect,\n            isClearable: true,\n            isMulti: true,\n            isDisabled,\n            styles: { ...customSelectStyles, ...(isDisabled && disabledCustomStyles) },\n            require: true,\n            value: selectedProject\n              ? selectedProject.getIn(['building', 'buildingClasses'], fromJS({})).reduce((acc, buildingClass) => {\n                const types = buildingClass.get('buildingTypes').map(buildingType => ({\n                  label: buildingType.get('value'),\n                  value: buildingType.get('value'),\n                  name: buildingType.get('value'),\n                  id: buildingType.get('id')\n                }));\n                return acc.concat(types);\n              }, List([])).toArray()\n              : building.buildingClasses\n                ? building.buildingClasses.reduce((acc, buildingClass) => {\n                  const types = buildingClass.get('buildingTypes')\n                    ? buildingClass.get('buildingTypes').map(buildingType => ({\n                      label: buildingType.get('value'),\n                      value: buildingType.get('value'),\n                      name: buildingType.get('value'),\n                      id: buildingType.get('id'),\n                      classId: buildingType.get('classId'),\n                    }))\n                    : List([]);\n                  return acc.concat(types);\n                }, List([])).toArray()\n                : '',\n            options: buildingTypes.entrySeq()\n              .map(([id, buildingTypeList]) =>\n                buildingTypeList.map((buildingType) => ({\n                  label: buildingType.get('value'),\n                  value: buildingType.get('value'),\n                  name: buildingType.get('value'),\n                  id: buildingType.get('id'),\n                  classId: id,\n                })))\n              .reduce((acc, list) => acc.merge(list), List([]))\n              .toArray()\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n          validate={(isDisabled || buildingClassesHaveNoBuildingTypes()) ? [] : [required, isNotEmpty, this.testValid]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name='location.country'\n          component={FieldReactSelect}\n          onChange={this.onCountrySelect}\n          inputProps={{\n            placeholder: t('projectInfo.countryPlaceholder'),\n            classes,\n            className: classes.optionSelect,\n            isClearable: true,\n            isDisabled,\n            styles: customSelectStyles,\n            require: true,\n            value: selectedProject\n              ? {\n                label: selectedProject.getIn(['location', 'country', 'value']),\n                value: selectedProject.getIn(['location', 'country', 'value'])\n              }\n              : location.country\n                ? location.country.toJS()\n                : '',\n            options: countries ? countries.valueSeq().map((country: any) => ({\n              label: country.get('value'),\n              value: country.get('value'),\n              name: country.get('value'),\n              id: country.get('id')\n            })).toArray() : [],\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n          validate={isDisabled ? [] : [required, isNotEmpty]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name='location.province'\n          component={FieldReactSelect}\n          onChange={this.onProvinceSelect}\n          inputProps={{\n            placeholder: t('projectInfo.provincePlaceholder'),\n            classes,\n            className: classes.optionSelect,\n            isClearable: true,\n            isDisabled,\n            require: true,\n            styles: customSelectStyles,\n            value: selectedProject\n              ? {\n                label: selectedProject.getIn(['location', 'province', 'value']),\n                value: selectedProject.getIn(['location', 'province', 'value'])\n              }\n              : location.province\n                ? location.province.toJS()\n                : '',\n            options: provinces ? provinces.valueSeq().map((province: any) => ({\n              label: province.get('value'),\n              value: province.get('value'),\n              name: province.get('value'),\n              id: province.get('id')\n            })).toArray() : []\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n          validate={isDisabled ? [] : [required, isNotEmpty]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <Field<BaseFieldProps & IFieldReactSelectComponentProps>\n          name='location.city'\n          onChange={this.onCitySelect}\n          component={FieldReactSelect}\n          inputProps={{\n            placeholder: t('projectInfo.cityPlaceholder'),\n            classes,\n            className: classes.optionSelect,\n            isClearable: true,\n            isDisabled,\n            require: true,\n            styles: customSelectStyles,\n            value: selectedProject\n              ? {\n                label: selectedProject.getIn(['location', 'city', 'value']),\n                value: selectedProject.getIn(['location', 'city', 'value'])\n              }\n              : location.city\n                ? location.city.toJS()\n                : '',\n            options: cities ? cities.valueSeq().map((city: any) => ({\n              label: city.get('value'),\n              value: city.get('value'),\n              name: city.get('value'),\n              id: city.get('id')\n            })).toArray() : [],\n          }}\n          formControlProps={{\n            fullWidth: true\n          }}\n          validate={isDisabled ? [] : [required, isNotEmpty]}\n        />\n      </Grid>\n      <Grid item={true} xs={4}>\n        <FormControl className={classes.projectInfoLabel} aria-describedby='helper-text'>\n          <TextField\n            label={t('quoteInfo.address1Label')}\n            name='projectAddress'\n            multiline={true}\n            placeholder={t('quoteInfo.address1Placeholder')}\n            value={\n              selectedProject\n                ? selectedProject.get('address') || ''\n                : address\n                  ? address\n                  : ''}\n            disabled={isDisabled}\n            onChange={this.onFieldChange}\n            helperText=' ' // hacky way to align selects\n          />\n        </FormControl>\n      </Grid>\n      {\n        !isDisabled &&\n        <>\n          <Grid item={true} xs={6}>\n            <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n              name='projectBidDate'\n              component={FieldDatePickerV2}\n              onChange={this.onDateChange}\n              validate={isDisabled ? [] : [required, isValidMomentDate]}\n              warn={isDisabled ? [] : [this.bidDateValidateFunc]}\n              props={{\n                keyboardDatePickerProps: {\n                  label: t('createNewProject.BidDate'),\n                  required: true,\n                  value: selectedProject\n                    ? selectedProject.getIn(['bidDate'])\n                    : bidDate\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n                timeOfDay: 'end',\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={6}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='projectArea'\n              component={FieldTextField}\n              onChange={this.onFieldChange}\n              props={{\n                label: t('createNewProject.Area'),\n                formControlProps: {\n                  fullWidth: true,\n                },\n                inputProps: {\n                  type: 'text',\n                  autoComplete: 'no',\n                  value: selectedProject\n                    ? selectedProject.getIn(['area'], '')\n                    : area\n                      ? area\n                      : '',\n                  disabled: isDisabled,\n                },\n              }}\n              validate={isDisabled ? [] : [isNumberGreaterThanZero]}\n            />\n          </Grid>\n        </>\n      }\n    </Grid>;\n  }\n\n  private onDateChange = (value) => {\n    const { data } = this.state;\n    const { onChange } = this.props;\n    this.setState({\n      data: {\n        ...data,\n        bidDate: value\n      }\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state),\n      })\n    );\n  }\n\n  private onFieldChange = (e) => {\n    const { onChange } = this.props;\n    const fieldName = e.currentTarget.name;\n    const trimFieldName = fieldName.replace('project', '').toLowerCase();\n    const fieldValue = e.currentTarget.value;\n    this.setState({\n      data: fieldName === 'projectName' || fieldName === 'projectAddress' || fieldName === 'projectArea'\n        ? {\n          ...this.state.data,\n          [trimFieldName]: fieldValue,\n        }\n        : {\n          ...this.state.data,\n          location: {\n            ...this.state.data.location,\n            [fieldName]: fieldValue,\n          }\n        },\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state)\n      })\n    );\n  }\n\n  private selectBuildingClass = (list: any, value: any) => {\n    const { onChange, selectBuildingClasses, getBuildingTypes } = this.props;\n\n    this.setState({\n      data: {\n        ...this.state.data,\n        building: {\n          buildingClasses: fromJS(list),\n        },\n      },\n    }, () => onChange({\n      form: 'quote',\n      field: 'projectInfo.data',\n      value: fromJS(this.state),\n    }));\n    selectBuildingClasses(list);\n    if (list) {\n      fromJS(list).forEach((buildingClass: any) => {\n        getBuildingTypes(buildingClass);\n      });\n    }\n  }\n\n  private selectBuildingType = (list: any) => {\n    const { onChange } = this.props;\n    let buildingClasses = this.state.data.building.buildingClasses;\n    buildingClasses = buildingClasses.map(buildingClass => {\n      return buildingClass.delete('buildingTypes');\n    });\n\n    if (list) {\n      fromJS(list).forEach((type) => {\n        const classId = type.get('classId');\n        const buildingClassIndex = buildingClasses.findIndex(bClass => bClass.get('id') === classId);\n        const buildingTypes = buildingClasses.getIn([buildingClassIndex, 'buildingTypes'], List([]));\n\n        if (buildingTypes.findIndex((existingType) => existingType.get('id') === type.get('id')) < 0) {\n          buildingClasses = buildingClasses.setIn([buildingClassIndex, 'buildingTypes'], [...buildingTypes, type]);\n        }\n      });\n    }\n\n    this.setState({\n      data: {\n        ...this.state.data,\n        building: {\n          buildingClasses,\n        },\n      },\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state),\n      })\n    );\n  }\n\n  private onCountrySelect = (value) => {\n    const { selectCountry, onChange } = this.props;\n    const { data } = this.state;\n    selectCountry(value);\n    this.setState({\n      data: {\n        ...data,\n        location: {\n          country: fromJS(value)\n        }\n      },\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state),\n      })\n    );\n  }\n\n  private onProvinceSelect = (value) => {\n    const { selectProvince, onChange } = this.props;\n    const { data } = this.state;\n    selectProvince(value);\n    this.setState({\n      data: {\n        ...data,\n        location: {\n          ...data.location,\n          province: fromJS(value),\n          city: null,\n        }\n      },\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state),\n      })\n    );\n  }\n\n  private onCitySelect = (value) => {\n    const { data } = this.state;\n    const { onChange } = this.props;\n    this.setState({\n      data: {\n        ...data,\n        location: {\n          ...data.location,\n          city: fromJS(value),\n        }\n      },\n    },\n      () => onChange({\n        form: 'quote',\n        field: 'projectInfo.data',\n        value: fromJS(this.state),\n      })\n    );\n  }\n\n  private dropdownIndicator = (props) => {\n    return (\n      <components.DropdownIndicator {...props}>\n        <SearchIcon />\n      </components.DropdownIndicator>\n    );\n  }\n\n  private selectExistingProject = (selection: any) => {\n    const { searchedProjects } = this.props;\n    let selectedProject: IMap<Project>;\n    let unLink = {};\n    if (selection) {\n      selectedProject = searchedProjects.find((project) => project.get('id') === selection.id);\n    } else {\n      unLink = { isProjectLinked: false };\n    }\n    this.setState({\n      selectedProject,\n      ...unLink\n    }, () => this.linkUnLinkProject({}));\n  }\n\n  private linkUnLinkProject = ({\n    preLinked,\n    skipDates\n  }: {\n    preLinked?: boolean;\n    skipDates?: boolean\n  }) => {\n    const { selectedProject, isProjectLinked } = this.state;\n    const { dispatch, onChange, period, customers } = this.props;\n\n    if (!selectedProject) {\n      if (isProjectLinked) {\n        this.setState({\n          isProjectLinked: !isProjectLinked,\n          createProject: false\n        });\n      }\n      return;\n    }\n\n    this.setState({\n      isProjectLinked: preLinked || !isProjectLinked,\n      createProject: false\n    }, () => {\n      const project = fromJS({ ...selectedProject.toJS() });\n      batch(() => {\n        onChange({\n          form: 'quote',\n          field: 'projectInfo.isLinked',\n          value: this.state.isProjectLinked,\n        });\n        if (this.state.isProjectLinked) {\n          onChange({\n            form: 'quote',\n            field: 'projectInfo.data',\n            value: project\n          });\n        }\n      });\n      if (!this.state.isProjectLinked) {\n        return;\n      }\n\n      const keyContacts = project.get('keyContacts') || List();\n\n      // auto add achitect/engineer/contractor\n      const targetedArchitect = keyContacts.find((val) => {\n        const contactType = val.getIn(['contact', 'contactType']);\n        if (contactType) {\n          return isArchitect(contactType) && getPredefinedContactRole(contactType) === PredefinedContactRole.ARCHITECT;\n        }\n        return false;\n      });\n      const targetedContractor = keyContacts.find((val) => {\n        const contactType = val.getIn(['contact', 'contactType']);\n        if (contactType) {\n          return isContractor(contactType) && getPredefinedContactRole(contactType) === PredefinedContactRole.CONTRACTOR;\n        }\n        return false;\n      });\n      const targetedEngineer = keyContacts.find((val) => {\n        const contactType = val.getIn(['contact', 'contactType']);\n        if (contactType) {\n          return isEngineer(contactType) && getPredefinedContactRole(contactType) === PredefinedContactRole.ENGINEER;\n        }\n        return false;\n      });\n\n      if (targetedArchitect) {\n        onChange({\n          form: 'quote',\n          field: 'architectName',\n          value: targetedArchitect.get('contact'),\n        });\n      }\n      if (targetedContractor) {\n        onChange({\n          form: 'quote',\n          field: 'contractorName',\n          value: targetedContractor.get('contact'),\n        });\n      }\n      if (targetedEngineer) {\n        onChange({\n          form: 'quote',\n          field: 'engineerName',\n          value: targetedEngineer.get('contact'),\n        });\n      }\n\n      // get unique list of contacts from keyContacts that excludes the targeted architect, contractor, and engineer;\n      const projectOnlyContacts = keyContacts\n        .filter((keyContact) => keyContact.get('quoteId') === null)\n        .map((keyContact) => {\n          const contact = keyContact.get('contact');\n          // convert all sales rep ids to number in each contact\n          const salesReps = contact.get('salesReps') || List();\n          const salesRepsWithNumberIds = salesReps.map((salesRep) => {\n            return salesRep.set('id', Number(salesRep.get('id')));\n          });\n          return contact.set('salesReps', salesRepsWithNumberIds);\n        });\n      let contactsAdded = Set();\n      const uniqueProjectOnlyContacts = projectOnlyContacts.filter((contact) => {\n        const contactId = contact.get('id');\n        if (contactsAdded.has(contactId) || targetedArchitect?.get('id') === contactId || targetedContractor?.get('id') === contactId || targetedEngineer?.get('id') === contactId) {\n          return false;\n        }\n        contactsAdded = contactsAdded.add(contactId);\n        return true;\n      });\n      // add contacts from uniqueProjectOnlyContacts to customers if they are not already in customers\n      const customersToAdd = customers?.length ? uniqueProjectOnlyContacts.filter((contact) => {\n        return !customers.some((customer) => customer.get('id') === contact.get('id'));\n      }) : uniqueProjectOnlyContacts;\n\n      if (customersToAdd.size) {\n        onChange({\n          form: 'quote',\n          field: 'customers',\n          value: customers?.length ? customers.concat(customersToAdd.toArray()) : customersToAdd.toArray(),\n        });\n        onChange({\n          form: 'quote',\n          field: 'temp.customersInitialized',\n          value: true,\n        });\n\n        const newSalesReps = customersToAdd\n          .map((customer) => customer.get('salesReps'))\n          .reduce((acc, salesReps) => {\n            if (salesReps) {\n              return acc.concat(salesReps);\n            }\n            return acc;\n          }, List());\n        dispatch(new AddCustomerSalesRepsToQuoteAction({\n          salesReps: newSalesReps\n        }));\n      }\n\n      // only sync dates on linking not on unlink\n      const bidDate = utcToLocal(project.get('bidDate'));\n      if (bidDate && this.state.isProjectLinked && !skipDates) {\n        onChange({\n          form: 'quote',\n          field: `expiryDate`,\n          value: moment(bidDate).add(period, 'days').toISOString(),\n        });\n        onChange({\n          form: 'quote',\n          field: `bidDate`,\n          value: moment(bidDate).toISOString(),\n        });\n      }\n    }\n    );\n  }\n\n  private createFolder = () => {\n    const { userId, dispatch } = this.props;\n    dispatch(new GetCountriesAction());\n    this.setState({\n      selectedProject: null,\n      createProject: !this.state.createProject,\n      data: {\n        ...this.state.data,\n        tracking: !this.state.createProject ? { user: [userId] } : null\n      },\n      createProjectTrackChecked: !this.state.createProject\n    },\n      () => this.props.toggleProjectView()\n    );\n  }\n}\n\nconst customSelectStyles = {\n  control: providedStyles => ({\n    ...providedStyles,\n    borderWidth: `0 0 1px 0`,\n    borderRadius: '0',\n  }),\n  indicatorSeparator: providedStyles => ({\n    ...providedStyles,\n    backgroundColor: 'transparent',\n  }),\n  multiValueRemove: providedStyles => ({\n    ...providedStyles,\n    cursor: 'pointer',\n    '&:hover': {\n      backgroundColor: 'transparent',\n    }\n  }),\n};\n\nconst disabledCustomStyles = {\n  multiValue: providedStyles => ({\n    ...providedStyles,\n    backgroundColor: 'transparent',\n  }),\n  multiValueLabel: providedStyles => ({\n    ...providedStyles,\n    fontSize: '100%',\n    padding: '0',\n    paddingLeft: '0',\n    color: '#999999',\n    backgroundColor: 'transparent',\n  }),\n  multiValueRemove: providedStyles => ({\n    ...providedStyles,\n    display: 'none',\n  }),\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  projectInfoLabel: {\n    width: '100%',\n  },\n  selectorContainer: {\n    paddingTop: '24px',\n  },\n  gridContainer: {\n    alignItems: 'center',\n  },\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    overflow: 'inherit',\n  },\n  buttonLink: {\n    backgroundColor: 'transparent',\n    boxShadow: 'none',\n    border: 'none',\n    color: theme.palette.primary[900],\n    paddingTop: '12px',\n    paddingBottom: '12px',\n    '&:hover': {\n      boxShadow: 'none',\n      backgroundColor: 'transparent'\n    }\n  },\n  linkButtonContainer: {\n    display: 'flex',\n    justifyContent: 'center',\n  },\n  buttonContainer: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  buttonCreateFolder: {\n    paddingTop: '8px',\n    paddingBottom: '8px',\n  },\n  formControlLabel: {\n    whiteSpace: 'nowrap'\n  },\n  trackProjectContainer: {\n    display: 'flex',\n    alignItems: 'center'\n  }\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => ({\n  quoteId: makeSelectQuoteFormProps(['id'])(state),\n  countries: state.getIn(['location', 'countries']) || List(),\n  provinces: state.getIn(['location', 'projectProvinces']) || List(),\n  cities: state.getIn(['location', 'projectCities']) || List(),\n  selectedCountry: state.getIn(['location', 'selectedProjectCountry']),\n  selectedProvince: state.getIn(['location', 'selectedProjectProvince']),\n  selectedCity: state.getIn(['location', 'selectedProjectCity']),\n  buildingClasses: makeSelectBuildingClasses()(state).toList(),\n  buildingTypes: makeSelectBuildingTypes()(state),\n  selectedBuildingClasses: makeSelectSelectedBuildingClasses()(state),\n  selectedBuildingTypes: makeSelectSelectedBuildingTypes()(state),\n  linkedProjectId: makeSelectQuoteFormProps(['projectId'])(state),\n  customers: makeSelectQuoteFormProps(['customers'])(state),\n  linkedProject: makeSelectProject(ownProps.linkedProjectId)(state),\n  searchedProjects: makeSelectSearchedProjects()(state),\n  selectedProjectId: makeSelectSelectedProjectId()(state),\n  period: formValueSelector('quote')(state, 'period'),\n  userId: makeSelectUserId()(state),\n  trackedProjects: makeSelectTrackedProjectIds()(state),\n  isTrackingOrUntrackingProject: makeSelectIsTrackingOrUntrackingProject()(state),\n  isSearchingProjects: makeSelectSpecToolProjectListIsLoading()(state)\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => ({\n  fetchCountries: () => {\n    dispatch(new GetCountriesAction());\n  },\n  selectCountry: (country: any) => {\n    if (country) {\n      dispatch(new SaveCountryNameAction({\n        country: fromJS(country),\n        storeKey: 'selectedProjectCountry',\n        provinceKey: 'selectedProjectProvince',\n        cityKey: 'selectedProjectCity',\n      }));\n      dispatch(new GetProvincesAction({ countryId: country.id, storeKey: 'projectProvinces' }));\n    }\n  },\n  selectProvince: (province: any) => {\n    if (province) {\n      dispatch(new SaveProvinceNameAction({\n        province: fromJS(province),\n        storeKey: 'selectedProjectProvince',\n        cityKey: 'selectedProjectCity',\n      }));\n      dispatch(new GetCitiesAction({ provinceId: province.id, storeKey: 'projectCities' }));\n    }\n  },\n  selectCity: (city: any) => {\n    if (city) {\n      dispatch(new SaveCityNameAction({ city: fromJS(city), storeKey: 'selectedProjectCity' }));\n    }\n  },\n  getBuildingClasses: () => {\n    dispatch(new GetBuildingClassesAction());\n  },\n  getBuildingTypes: (buildingClass: any) => {\n    dispatch(new GetBuildingTypesAction(buildingClass.get('id')));\n  },\n  selectBuildingClasses: (buildingClasses: any) => {\n    dispatch(new SelectBuildingClassAction(buildingClasses));\n  },\n  getProject: (id: number) => {\n    dispatch(new GetProjectByIdAndSelectProjectAction({ projectId: id }));\n  },\n  searchProjects: (key: string) => {\n    if (!key) {\n      return;\n    }\n    const filters = {\n      and: [\n        {\n          name: {\n            like: key,\n          }\n        }\n      ],\n    };\n    dispatch(new QuickSearchProjectsAction({ filters }));\n  },\n  searchProjectsById: (id: number) => {\n    if (!id) {\n      return;\n    }\n    const filters = {\n      and: [\n        {\n          id: {\n            eq: Number(id)\n          }\n        }\n      ]\n    };\n    dispatch(new QuickSearchProjectsAction({ filters }));\n  },\n  resetSelectedProjectId: () => {\n    dispatch(new SelectProjectAction({ projectId: -1 }));\n  },\n  trackProject: (args: { projectId, type, typeId }) => dispatch(new TrackProjectAction(args)),\n  untrackProject: (args: { projectId, type, typeId }) => dispatch(new UntrackProjectAction(args)),\n  getTrackedProjects: () => dispatch(new GetTrackedProjectsAction({ type: 'user', projectId: 0, typeId: undefined })),\n  dispatch,\n});\n\nexport default compose<React.ComponentClass<IQuoteProjectInfoComponentProps>>(\n  withStyles(styles),\n  withRouter,\n  connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true }),\n  withTranslation('translations'),\n  withAmplitudeData\n)(QuoteProjectInfo);\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport {\n  BaseFieldProps, touch,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport moment from 'moment';\nimport { Map } from 'immutable';\nimport {\n  Grid,\n  MenuItem,\n  WithStyles,\n  withStyles,\n  Theme,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  dateNoEarlierThan,\n  dateNoLaterThan,\n  isValidMomentDate,\n  required\n} from '../../validators';\nimport { IChangeValueHandler } from '../QuoteForm/types';\nimport { FieldSelect } from '../index';\nimport { IFieldSelectComponentProps } from '../FieldSelect';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap';\nimport { IFieldDatePickerV2CustomProps } from '../FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../FieldDatePickerV2';\nimport { connect, DispatchProp } from 'react-redux';\nimport { IAction, utcToLocal } from 'ats-utils/src';\n\nconst defaultPeriods = [7, 30, 60, 90, 120, 180, 360];\n\nexport interface IInfo {\n  expiryDate: Date;\n  createdDate: Date;\n  bidDate: Date;\n  period: number;\n}\n\ninterface IValidityDate {\n  info: IMap<IInfo>;\n  format: string;\n  onChange: IChangeValueHandler;\n  t?(key: string): string;\n}\n\n\nclass ValidityDate extends React.Component<IValidityDate & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp, any> {\n  public state = {\n    periods: defaultPeriods,\n  };\n\n  public bidDateValidateFunc = (value, allValues) => {\n    const { t } = this.props;\n    const date: Date = new Date(allValues.getIn(['bidDate']));\n    const noLaterThan: Date = new Date();\n\n    return dateNoEarlierThan(date, noLaterThan, t('quoteInfo.passedBidDateWarning'));\n  }\n\n  public expiryDateValidateFunc = (value, allValues) => {\n    const { t } = this.props;\n    const date: Date = new Date(allValues.getIn(['expiryDate']));\n    const noLaterThan: Date = new Date();\n\n    return dateNoEarlierThan(date, noLaterThan, t('quoteInfo.passedExpirationDateWarning'));\n  }\n\n  public componentDidMount(): void {\n    const { info } = this.props;\n    // set up default values\n    if (!info.get('bidDate') || !info.get('expiryDate')) {\n      this.handleChange({\n        bidDate: moment().toISOString(),\n        expiryDate: moment().add(info.get('period'),'days').toISOString()\n      });\n    } else {\n      this.updatePeriods();\n    }\n  }\n\n  public componentDidUpdate(prevProps): void {\n    const { info } = this.props;\n    if (info.get('bidDate') !== prevProps.info.get('bidDate') || info.get('expiryDate') !== prevProps.info.get('expiryDate')) {\n      this.updatePeriods();\n    }\n  }\n\n  public updatePeriods = () => {\n    const { info } = this.props;\n    const newPeriod = (new Date(utcToLocal(info.get('expiryDate'))).getTime() - new Date(utcToLocal(info.get('bidDate'))).getTime()) / 86400000;\n\n    if (isNaN(newPeriod) || newPeriod < 0) {\n      this.handleChange({\n        period: -1,\n      });\n    } else {\n      if (!this.state.periods.includes(newPeriod)) {\n        this.setState({\n          periods: [...defaultPeriods, newPeriod].sort((a, b) => a - b),\n        });\n      } else if (defaultPeriods.includes(newPeriod)) {\n        this.setState({\n          periods: defaultPeriods,\n        });\n      }\n      this.handleChange({\n        period: newPeriod,\n      });\n    }\n  }\n\n  public render() {\n    const {\n      t,\n    } = this.props;\n    const {\n      periods,\n    } = this.state;\n\n    const periodLabel = t('quoteInfo.validityPeriodLabel');\n\n    return (\n      <Grid container={true} spacing={3} direction='row' alignItems='flex-start'>\n        <Grid item={true} xs={4}>\n          <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n            name='bidDate'\n            component={FieldDatePickerV2}\n            validate={[required, isValidMomentDate]}\n            warn={[this.bidDateValidateFunc]}\n            onChange={this.onBidChange}\n            props={{\n              keyboardDatePickerProps: {\n                label: t('quoteInfo.validityBidDateLabel'),\n                required: true,\n              },\n              formControlProps: {\n                fullWidth: true,\n              },\n              timeOfDay: 'current',\n            }}\n          />\n        </Grid>\n        <Grid item={true} xs={4}>\n        <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n            name='expiryDate'\n            component={FieldDatePickerV2}\n            validate={[required, isValidMomentDate]}\n            warn={[this.expiryDateValidateFunc]}\n            onChange={this.onExpiryChange}\n            props={{\n              keyboardDatePickerProps: {\n                label: t('quoteInfo.validityExpirationDateLabel'),\n                required: true,\n              },\n              formControlProps: {\n                fullWidth: true,\n              },\n              timeOfDay: 'current',\n            }}\n          />\n        </Grid>\n        <Grid item={true} xs={2}>\n          <Field<BaseFieldProps<IFieldSelectComponentProps>>\n            name='period'\n            component={FieldSelect}\n            validate={required}\n            props={{\n              label: t('quoteInfo.validityPeriodLabel'),\n              inputProps: {\n                onChange: this.handlePeriodChange,\n              },\n              formControlProps: {\n                fullWidth: true,\n              },\n            }}\n          >\n            {\n              periods.map((period) => (\n                <MenuItem key={period} value={period}>\n                  {period} {periodLabel}\n                </MenuItem>\n              ))\n            }\n          </Field>\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private onBidChange = (event, newValue, previousValue, name) => {\n    const { info = Map() , dispatch } = this.props;\n    // Because of the way FieldDatePickerV2 is written, we need to touch the field manually for validation reasons\n    dispatch(touch('quote', 'bidDate'));\n    this.handleChange(\n      {\n        bidDate: newValue,\n        expiryDate: moment(newValue).add(info.get('period'), 'days').toISOString()\n      });\n  }\n\n  private onExpiryChange = (event, newValue, previousValue, name) => {\n    // Because of the way FieldDatePickerV2 is written, we need to touch the field manually for validation reasons\n    this.props.dispatch(touch('quote', 'expiryDate'));\n    this.handleChange(\n      {\n        expiryDate: newValue\n      });\n  }\n\n  private handlePeriodChange = (value: number) => {\n    const { info = Map() } = this.props;\n    this.handleChange({\n      period: value,\n      expiryDate: moment(info.get('bidDate')).add(value, 'days').toISOString(),\n    });\n  }\n\n  private handleChange = (dates: object) => {\n    const { onChange } = this.props;\n\n    Object.keys(dates).forEach((key: string) => {\n      onChange({\n        form: 'quote',\n        field: `${key}`,\n        value: dates[key]\n      });\n    });\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  helperWarning: {\n    color: `${theme.palette.primary[700]}!important`,\n  }\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({dispatch});\n\nexport default compose<React.ComponentClass<IValidityDate>>(\n  connect(null, mapDispatchToProps),\n  withStyles(styles),\n  withTranslation('translations'),\n)(ValidityDate);\n","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport classNames from 'classnames';\nimport { connect } from 'react-redux';\nimport {\n  BaseFieldProps, change, touch\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  FormControl,\n  FormControlLabel,\n  FormLabel,\n  Grid,\n  Radio,\n  RadioGroup,\n  Typography,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { required, isNotEmpty } from '../../validators';\nimport {\n  GetCountriesAction,\n  GetCitiesAction,\n  GetProvincesAction,\n  SaveCountryNameAction,\n  SaveProvinceNameAction,\n  SaveCityNameAction,\n} from '../../modules/LocationModule/actions';\nimport {\n    List,\n    fromJS,\n} from 'immutable';\nimport { isEqual } from 'lodash';\n\nimport FieldTextField, {\n  IFieldTextFieldComponentProps,\n} from '../../components/FieldTextField';\n\nimport FieldReactSelect, {\n  IFieldReactSelectComponentProps,\n} from '../../components/FieldReactSelect';\nimport {makeSelectSelectedContact} from '../../modules/ContactModule/selectors';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { IAction } from 'ats-utils/src';\nimport { IChangeValueHandler } from '../QuoteForm/types';\n\ninterface IShippingAddress {\n  info?: any;\n  shippingPreference?: any;\n  items: any[];\n  t?(key: string): string;\n}\n\ninterface IShippingAddressStoreProps {\n  selectedContact: any;\n  countries: List<any>;\n  provinces: List<any>;\n  cities: List<any>;\n  selectedCity: any;\n  selectedCountry: any;\n  selectedProvince: any;\n  fetchCountries: () => void;\n  selectCountry: (param: any) => any;\n  selectProvince: (param: any) => any;\n  selectCity: (param: any) => any;\n  currentFormValues?: any;\n  dispatch: Dispatch<IAction>;\n  changeValue: IChangeValueHandler;\n}\n\ntype ShippingAddressProps =\n  IShippingAddress\n  & IShippingAddressStoreProps\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\n\nclass ShippingAddress extends React.Component<ShippingAddressProps, {}> {\n  public state = {\n    shippingAddress: undefined,\n    shippingPreference: undefined,\n  };\n\n  public componentDidMount() {\n    const {\n      fetchCountries\n    } = this.props;\n    fetchCountries();\n  }\n\n  public componentDidUpdate(prevProps: any) {\n    const { shippingPreference, changeValue } = this.props;\n    if (shippingPreference && !isEqual(shippingPreference, prevProps.shippingPreference)) {\n      changeValue({\n        form: 'quote',\n        field: 'shippingPreference',\n        value: shippingPreference\n      });\n      this.setState({ shippingPreference });\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      info,\n      selectedContact,\n      countries,\n      provinces,\n      cities,\n      selectProvince,\n      selectCountry,\n      selectCity,\n      shippingPreference,\n      dispatch,\n    } = this.props;\n\n    return (\n      <Grid className={classes.gridContainer} container={true} spacing={3}>\n        <Grid className={classes.gridItem} item={true} xs={12}>\n          <FormControl>\n            <FormLabel>\n              <Typography variant='body1' noWrap={true}>{t('quoteInfo.shippingAddressTitle')}</Typography>\n            </FormLabel>\n            <Field<BaseFieldProps<{}>>\n              name='shippingPreference'\n              component={this.renderRadioGroup}\n            />\n          </FormControl>\n        </Grid>\n        {/*when user select 'Shipping Address', show more options*/}\n        {shippingPreference === 'shippingAddress' &&\n        <Grid className={classNames(classes.gridItem, classes.addressGrid)} container={true} item={true} spacing={3} xs={12}>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n              name='address.country'\n              onChange={val => {\n                dispatch(change(QUOTE_FORM_NAME, 'address.province', null));\n                dispatch(change(QUOTE_FORM_NAME, 'address.city', null));\n                dispatch(touch(QUOTE_FORM_NAME, 'address.country', 'address.province', 'address.city'));\n                selectCountry(val);\n              }}\n              validate={[\n                required,\n                isNotEmpty\n              ]}\n              component={FieldReactSelect}\n              normalize={(value) => fromJS(value)}\n              format={(value) => value && value.toJS()}\n              props={{\n                inputProps: {\n                  className: classes.optionSelect,\n                  classes,\n                  placeholder: t('quoteInfo.shippingAddressCountryPlaceholder'),\n                  require: true,\n                  isClearable: true,\n                  options: countries ? countries.map((country: any) => ({\n                    label: country.get('value'),\n                    value: country.get('value'),\n                    id: country.get('id')\n                  })).toArray() : [],\n                  styles: customSelectStyles,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n              name='address.province'\n              onChange={val => {\n                dispatch(change(QUOTE_FORM_NAME, 'address.city', null));\n                dispatch(touch(QUOTE_FORM_NAME, 'address.province', 'address.city'));\n                selectProvince(val);\n              }}\n              validate={[\n                required,\n              ]}\n              component={FieldReactSelect}\n              normalize={(value) => fromJS(value)}\n              format={(value) => value && value.toJS()}\n              props={{\n                inputProps: {\n                  className: classes.optionSelect,\n                  classes,\n                  placeholder: t('quoteInfo.shippingAddressProvincePlaceholder'),\n                  require: true,\n                  isClearable: true,\n                  options: provinces ? provinces.map((province: any) => ({\n                    label: province.get('value'),\n                    value: province.get('value'),\n                    id: province.get('id')\n                  })).toArray() : [],\n                  styles: customSelectStyles,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n              name='address.city'\n              onChange={val => {\n                dispatch(touch(QUOTE_FORM_NAME, 'address.city'));\n                selectCity(val);\n              }}\n              validate={[\n                required,\n              ]}\n              component={FieldReactSelect}\n              normalize={(value) => fromJS(value)}\n              format={(value) => value && value.toJS()}\n              props={{\n                inputProps: {\n                  className: classes.optionSelect,\n                  classes,\n                  placeholder: t('quoteInfo.shippingAddressCityPlaceholder'),\n                  require: true,\n                  isClearable: true,\n                  options: cities ? cities.map((city: any) => ({\n                    label: city.get('value'),\n                    value: city.get('value'),\n                    id: city.get('id')\n                  })).toArray() : [],\n                  styles: customSelectStyles,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='address.address1'\n              component={FieldTextField}\n              props={{\n                inputProps: {\n                  placeholder: t('quoteInfo.address1Placeholder'),\n                  multiline: true,\n                  value: info && info.get('address1') || undefined,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n                label: t('quoteInfo.address1Label'),\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='address.address2'\n              component={FieldTextField}\n              props={{\n                inputProps: {\n                  placeholder: t('quoteInfo.address2Placeholder'),\n                  multiline: true,\n                  value: info && info.get('address2') || undefined,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n                label: t('quoteInfo.address2Label'),\n              }}\n            />\n          </Grid>\n          <Grid item={true} xs={4}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='address.zipcode'\n              component={FieldTextField}\n              props={{\n                inputProps: {\n                  placeholder: t('quoteInfo.zipcodePlaceholder'),\n                  multiline: true,\n                  value: info && info.get('zipcode') || undefined,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n                label: t('quoteInfo.zipcode'),\n              }}\n            />\n          </Grid>\n        </Grid>\n        }\n        {/*when user check on 'Customer address' radio button, show more options*/}\n        {shippingPreference === 'customerAddress' &&\n        <Grid className={classes.gridItem} container={true} item={true} spacing={5} xs={12}>\n          {selectedContact &&\n          <Grid item={true} xs={12}>\n            <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n              name='address.address'\n              component={FieldTextField}\n              props={{\n                inputProps: {\n                  disabled: true,\n                  multiline: true,\n                  value: `${(selectedContact.get('address1') || '')} ${(selectedContact.get('address2') || '')}`,\n                  type: 'text',\n                  name: Date.now().toString(),\n                  autoComplete: 'no',\n                },\n                formControlProps: {\n                  fullWidth: true,\n                },\n              }}\n            />\n          </Grid>\n          }\n        </Grid>\n        }\n      </Grid>\n    );\n  }\n\n  private onRadioSelect = (e: React.ChangeEvent<HTMLInputElement>, value: string) => {\n    const { changeValue } = this.props;\n    const name = e.target.name;\n    this.setState({ shippingAddress: value },\n      () => changeValue({\n        form: 'quote',\n        field: name,\n        value,\n      })\n    );\n  }\n\n  private renderRadioGroup = ({ input, meta, label, ...rest }: any) => (\n    <RadioGroup\n      {...input}\n      {...rest}\n      aria-label='helper-text'\n      name='shippingPreference'\n      className={this.props.classes.radioGroup}\n      onChange={this.onRadioSelect}\n      children={\n        this.props.items.map((type: any, index: number) =>\n          <FormControlLabel\n            key={index}\n            label={this.props.t(type.get('labelPath'))}\n            value={type.get('value')}\n            control={\n              <Radio color='primary' />\n            }\n          />\n        )}\n    />)\n}\n\nconst customSelectStyles = {\n    control: providedStyles => ({\n        ...providedStyles,\n        borderWidth: `0 0 1px 0`,\n        borderRadius: '0',\n    }),\n    indicatorSeparator: providedStyles => ({\n        ...providedStyles,\n        backgroundColor: 'transparent',\n    }),\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  gridContainer: {\n    display: 'flex',\n    flexDirection: 'column',\n    justifyContent: 'flex-start',\n  },\n  gridItem: {\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n  },\n  addressGrid: {\n    margin: '0px',\n    paddingRight: '0px!important',\n    paddingLeft: '0px!important',\n  },\n  radioGroup: {\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n  },\n  optionSelect: {\n  },\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  return {\n    selectedContact: makeSelectSelectedContact()(state),\n    countries: state.getIn(['location', 'countries']) || List(),\n    provinces: state.getIn(['location', 'shippingProvinces']) || List(),\n    cities: state.getIn(['location', 'shippingCities']) || List(),\n    selectedCountry: state.getIn(['location', 'selectedShippingCountry']),\n    selectedProvince: state.getIn(['location', 'selectedShippingProvince']),\n    selectedCity: state.getIn(['location', 'selectedShippingCity']),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  const changeValue: IChangeValueHandler = ({ form, field, value }) => dispatch(change(form, field, value));\n  return {\n    changeValue,\n    fetchCountries: () => {\n        dispatch(new GetCountriesAction());\n    },\n    selectCountry: (country: any) => {\n        dispatch(new SaveCountryNameAction({\n          country: fromJS(country),\n          storeKey: 'selectedShippingCountry',\n          provinceKey: 'selectedShippingProvince',\n          cityKey: 'selectedShippingCity',\n        }));\n        dispatch(new GetProvincesAction({ countryId: country ? country.id : '0', storeKey: 'shippingProvinces' }));\n    },\n    selectProvince: (province: any) => {\n        dispatch(new SaveProvinceNameAction({\n          province: fromJS(province),\n          storeKey: 'selectedShippingProvince',\n          cityKey: 'selectedShippingCity',\n        }));\n        dispatch(new GetCitiesAction({ provinceId: province ? province.id : '0', storeKey: 'shippingCities' }));\n    },\n    selectCity: (city: any) => {\n        dispatch(new SaveCityNameAction({ city: fromJS(city), storeKey: 'selectedShippingCity' }));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IShippingAddress>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(ShippingAddress);\n","import * as React from 'react';\nimport {\n  AnyAction,\n  compose,\n  Dispatch,\n} from 'redux';\nimport {\n  Card, CardContent, Grid,\n  MenuItem,\n  Theme, Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { connect, DispatchProp } from 'react-redux';\nimport { withTranslation } from 'react-i18next';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  Field,\n  formValueSelector\n} from 'redux-form/immutable';\nimport { BaseFieldProps } from 'redux-form';\nimport { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport FieldTextField from '../FieldTextFieldDebounced';\nimport QuoteContactsForm from './QuoteContactsForm';\nimport AssignedTo from './AssignedTo';\nimport { fromJS, List, Map } from 'immutable';\nimport ValidityDate from '../ValidityDate';\nimport ShippingAddress from '../ShippingAddress';\nimport { makeSelectQuoteFormProps } from '../../modules/QuoteModule/selectors';\nimport { IMap } from 'ats-utils/src/Interfaces/index';\nimport {\n  makeSelectShareQuotes,\n  makeSelectUsers,\n} from '../../modules/AccountModule/selectors';\nimport {\n  SearchQuoteUsersAction,\n  SearchUsersAction,\n} from '../../modules/AccountModule/actions';\nimport { isNotEmptyStringRequired } from '../../validators';\nimport { makeSelectOfficePricingRegions } from '../../modules/LocationModule/selectors';\nimport { IChangeValueHandler } from '../QuoteForm/types';\nimport { change } from 'redux-form';\nimport { UpdateRegionCalculationsAction } from '../../modules/QuoteEditModule/actions';\nimport { Region } from '../../models';\nimport { FieldSelect } from '..';\nimport {makeSelectUserFirmId, makeSelectUserHasQuoteConnectAcl, makeSelectUserHasFeatAssignTo} from '../../modules/AtsModule/selectors';\nimport {IMPORT_PRICING_FORM_NAME} from '../../constants/quote';\nimport {IAction} from 'ats-utils/src/Interfaces';\n\ninterface IQuoteInfoComponentProps {\n  officeId: number;\n}\ninterface IQuoteInfoProps extends IQuoteInfoComponentProps {\n  firmId: number;\n  changeValue: IChangeValueHandler;\n  quoteCollaborators?: List<IMap<any>>;\n  regions?: List<any>;\n  region?: any;\n  quoteName?: string;\n  quoteBidDate?: string;\n  quoteExpiryDate?: string;\n  quoteCreatedDate?: string;\n  period: number;\n  quoteAddress?: string;\n  quoteShippingPreference?: string;\n  users?: any;\n  hasQuoteConnectAcl?: boolean;\n  hasFeatAssignToAcl?: boolean;\n  shareQuotes?: boolean;\n  dispatch: React.Dispatch<IAction>;\n  t?(...args: any[]): any;\n}\n\ntype QuoteInfoProps = IQuoteInfoProps & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp;\n\nclass QuoteInfo extends React.Component<QuoteInfoProps> {\n  private addressOptions: any = fromJS([\n    {labelPath: 'quoteInfo.projectAddressRadioLabel', value: 'projectAddress', userInput: false},\n    {labelPath: 'quoteInfo.shippingAddressRadioLabel', value: 'shippingAddress', userInput: true},\n    {labelPath: 'quoteInfo.customerAddressRadioLabel', value: 'customerAddress', userInput: false},\n    {labelPath: 'quoteInfo.noShippingRadioAddress', value: 'noShippingAddress', userInput: false},\n  ]);\n\n  public componentDidMount() {\n    const { firmId,  dispatch } = this.props;\n    if (firmId > 0) {\n      // dispatch(new SearchQuoteUsersAction());\n      dispatch(new SearchUsersAction({ filters: fromJS({\n        'and': [\n          {\n            'firm_id': {\n              'eq': firmId\n            }\n          },\n          {\n            'status': {\n              'eq': 'active'\n            }\n          },\n        ]})}));\n    }\n  }\n\n  public componentDidUpdate = (prevProps) => {\n    const { firmId, dispatch } = this.props;\n    if (prevProps.firmId !== firmId && firmId > 0) {\n      // dispatch(new SearchQuoteUsersAction());\n      dispatch(new SearchUsersAction({ filters: fromJS({\n        'and': [\n          {\n            'firm_id': {\n              'eq': firmId\n            }\n          },\n          {\n            'status': {\n              'eq': 'active'\n            }\n          },\n        ]})}));\n    }\n  }\n\n  public onKeyPress = (e: React.KeyboardEvent<HTMLFormElement>) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      users,\n      changeValue,\n      quoteCollaborators,\n      quoteName,\n      regions,\n      quoteBidDate,\n      quoteExpiryDate,\n      quoteCreatedDate,\n      quoteAddress,\n      quoteShippingPreference,\n      hasQuoteConnectAcl,\n      hasFeatAssignToAcl,\n      shareQuotes,\n      t,\n      period,\n      firmId,\n      dispatch,\n    } = this.props;\n\n    const userList = [];\n    const keyedUsers = users.toJS();\n    for (const key in keyedUsers) {\n      if (keyedUsers.hasOwnProperty(key)) {\n        userList.push(keyedUsers[key]);\n      }\n    }\n    const filteredUserList = userList.filter(user => {\n      if (user.firm && user.firm.id === firmId) {\n        return true;\n      }\n      return false;\n    }).sort((a, b) => (a.fullName).localeCompare(b.fullName));\n\n    return (\n      <Card className={classes.card}>\n        <CardContent>\n          <Typography variant='h6'>\n            {t('quoteInfo.title')}\n          </Typography>\n          <Grid\n            container={true}\n            spacing={3}\n          >\n            <Grid\n              item={true}\n              xs={4}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='name'\n                props={{\n                  inputProps: {\n                    placeholder: t('quoteInfo.quoteTitlePlaceholder'),\n                    require: 'true', // hacky right here\n                    type: 'text',\n                    name: Date.now().toString(),\n                    autoComplete: 'no',\n                    onKeyPress: this.onKeyPress\n                  },\n                  label: t('quoteInfo.quoteTitleLabel'),\n                  require: true,\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n                component={FieldTextField}\n                validate={[isNotEmptyStringRequired]}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              xs={4}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='internalNo'\n                props={{\n                  inputProps: {\n                    placeholder: t('quoteInfo.internalQuoteNumberPlaceHolder'),\n                    type: 'text',\n                    name: Date.now().toString(),\n                    autoComplete: 'no',\n                    onKeyPress: this.onKeyPress\n                  },\n                  label: t('quoteInfo.internalQuoteNumberLabel'),\n                  formControlProps: {\n                    fullWidth: true,\n                  },\n                }}\n                component={FieldTextField}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              xs={4}\n            >\n              <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                name='region'\n                props={{\n                  label: t('quoteInfo.regionPlaceholder'),\n                  formControlProps: {\n                    fullWidth: true\n                  },\n                  inputProps: {\n                    value: this.props.regions.find(region => region.get('id') === this.props.region?.get('id')) || this.props.regions.get(0) || '', // display the first obj as default region PT-2877\n                    onChange: region => {\n                      this.props.dispatch(new UpdateRegionCalculationsAction({region}));\n                      // reset import pricing form\n                      if (hasQuoteConnectAcl) {\n                        dispatch(change(IMPORT_PRICING_FORM_NAME, 'importPricingSectionProducts', []));\n                      }\n\n                    }\n                  }\n                  }}\n                component={FieldSelect}\n              >\n                {regions.map(region => <MenuItem key={region.get('id')} value={region}>{region.get('label')}</MenuItem>)}\n              </Field>\n            </Grid>\n          </Grid>\n          <Grid\n            container={true}\n            spacing={3}\n          >\n            {\n              hasFeatAssignToAcl ? (\n                <Grid item={true} xs={4}>\n                  <AssignedTo canSearchFirmUsers={shareQuotes} />\n                </Grid>\n              ) : null\n            }\n            <Grid item={true} xs={hasFeatAssignToAcl ? 8 : 12} style={{ marginTop: 10}}>\n              <QuoteContactsForm\n                contacts={quoteCollaborators || List([])}\n                options={fromJS(filteredUserList)}\n                onChange={changeValue}\n              />\n            </Grid>\n          </Grid>\n          <ValidityDate\n              info={\n                fromJS({\n                  bidDate: quoteBidDate,\n                  expiryDate: quoteExpiryDate,\n                  createdDate: quoteCreatedDate,\n                  period,\n                })\n              }\n              format='YYYY-MM-DD'\n              onChange={changeValue}\n            />\n          <ShippingAddress\n            info={quoteAddress}\n            shippingPreference={quoteShippingPreference}\n            items={this.addressOptions}\n          />\n        </CardContent>\n      </Card>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    overflow: 'inherit',\n  },\n});\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  return {\n    quoteName: makeSelectQuoteFormProps(['name'])(state),\n    quoteCollaborators: makeSelectQuoteFormProps(['collaborators'])(state),\n    quoteBidDate: makeSelectQuoteFormProps(['bidDate'])(state),\n    quoteExpiryDate: makeSelectQuoteFormProps(['expiryDate'])(state),\n    quoteCreatedDate: makeSelectQuoteFormProps(['createdDate'])(state),\n    quoteAddress: makeSelectQuoteFormProps(['address'])(state),\n    quoteShippingPreference: makeSelectQuoteFormProps(['shippingPreference'])(state),\n    regions: makeSelectOfficePricingRegions()(state),\n    region: makeSelectQuoteFormProps(['region'])(state),\n    users: makeSelectUsers()(state),\n    firmId: makeSelectUserFirmId()(state),\n    period: formValueSelector('quote')(state, 'period'),\n    hasQuoteConnectAcl: makeSelectUserHasQuoteConnectAcl()(state),\n    hasFeatAssignToAcl: makeSelectUserHasFeatAssignTo()(state),\n    shareQuotes: makeSelectShareQuotes()(state),\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  const changeValue: IChangeValueHandler = ({ form, field, value}) => dispatch(change(form, field, value));\n  return {\n    changeValue,\n    dispatch,\n  };\n};\nexport default compose<React.ComponentClass<IQuoteInfoComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps, null, {forwardRef: true}),\n  withTranslation('translations'),\n)(QuoteInfo);\n","import QuoteInfo from './QuoteInfo';\n\nexport default QuoteInfo;\n","import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether an input is focused, forwarding any onFocus/onBlur handlers\n * passed by the caller. Returns the focus flag plus handlers to wire onto the input.\n */\nfunction useFocused(onFocus?: (e: any) => void, onBlur?: (e: any) => void) {\n  const [focused, setFocused] = useState(false);\n\n  const handleFocus = useCallback(e => {\n    setFocused(true);\n    if (onFocus) { onFocus(e); }\n  }, [onFocus]);\n\n  const handleBlur = useCallback(e => {\n    setFocused(false);\n    if (onBlur) { onBlur(e); }\n  }, [onBlur]);\n\n  return { focused, handleFocus, handleBlur };\n}\n\nexport default useFocused;\n","import {\n  fromJS,\n  List,\n  Map, Set, updateIn,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  QuoteTypes,\n  GetQuotesSuccessAction,\n  GetRevisionsSuccessAction,\n  DeleteRevisionSuccessAction,\n  SetRevisionSuccessAction,\n  GetQuotePhasesSuccessAction,\n  GetProductMediaSucceededAction,\n  GetQuoteSearchResultsSucceededAction,\n  SetRevisionLoadingAction,\n  SubmittingQuoteAction,\n  GetSpecToQuoteProductsSucceededAction,\n  UpdateQuoteAssignedToSucceededAction,\n  UpdateQuotePhaseSucceededAction,\n  SetIsCreatingSalesOrderAction,\n  GetSpecToQuoteProductsAction,\n  SetIsCreatingQuoteWithSpecToQuoteAction,\n  GetSpecToQuoteDraftSucceededAction,\n  PrepareInitialValuesForSpecToQuote,\n  PrepareInitialValuesForSpecToSourceQuote,\n  ResetQuotesWithExceptionAction,\n  SetGetQuotesLoadingAction,\n  GetQuotesAction,\n  UpdateSpecToQuoteLinkedListRecommendationsAction,\n  MergeBidQuoteSpecToQuoteLinkedListAction,\n} from './actions';\nimport {\n  Quote,\n  ListItem,\n  ShopDrawingHistory,\n  Option,\n  Product,\n} from '../../models';\nimport {\n  PrintActionTypes,\n  PrintQuoteCompletedAction,\n  PrintQuoteSucceededAction,\n  IPrintObj,\n  PrintReportCompletedAction,\n  SetPrintQuoteStatusForShareVendorQuoteAction,\n  ResetPrintShareVendorQuoteAction,\n} from '../PrintModule/actions';\nimport { singleOrArray } from 'ats-utils/src/index';\nimport { IProductMedia } from '../../components/ShopDrawingPrint';\nimport { QUOTE_PRINT_FORMAT } from '../../constants';\nimport { SpecActionTypes } from '../SpecModule/actions';\nimport { AtsActionTypes } from '../AtsModule/actions';\n// import {\n//   Settings,\n// } from '../../models';\n\nexport interface IRevisionState {\n  isLoading: boolean;\n  message: string;\n}\n\nexport enum ISpecToQuoteSortValue {\n  unsorted = 'Unsorted',\n  manufacturer = 'Manufacturer'\n}\n\nexport interface IRecommendation {\n  quoteProduct: IMap<Product>;\n  source: string;\n  type: string;\n}\n\nexport interface ISpecToQuote {\n  recommendations: List<IMap<IRecommendation>>;\n  specProduct: IMap<Product>;\n  recommendedProductNumber: string;\n}\n\nexport interface IQuoteState {\n  quotePreview: Map<any, any>;\n  quotes: Map<number, IMap<Quote>>;\n  quoteList: List<IMap<Quote>>;\n  count: number;\n  hasNextPage: boolean;\n  quotesLoading: boolean;\n  revisions: Map<number, IMap<Quote>>;\n  quotePhases: List<IMap<ListItem>>;\n  selectedQuoteTemplateId: number;\n  selectedQuoteId?: string;\n  printQuoteMap: Map<number, Set<QUOTE_PRINT_FORMAT>>;\n  printQuoteFiles: Map<number, Map<QUOTE_PRINT_FORMAT, List<IMap<IPrintObj>>>>;\n  error: string;\n  productMedia: List<IMap<IProductMedia>>;\n  downloadHistory: List<IMap<ShopDrawingHistory>>;\n  printHistoryLoading: boolean;\n  revisionState: IMap<IRevisionState>;\n  submittingQuote: boolean;\n  specToQuoteLinkedList: Map<number, ISpecToQuote>;\n  reportQuote: {\n    status: 'pending' | 'loading' | 'ready' | 'error',\n    fileId: string\n  };\n  isCreatingSalesOrder: boolean;\n  createQuoteWithSpecToQuote: {\n    isLoading: boolean;\n  };\n  loadingSpecToQuoteLinkedList: {\n    status: boolean;\n    total: number;\n    finished: number;\n  };\n  isGettingSpecToQuoteDraft: boolean;\n  specToQuoteInitialValues: any;\n  specToQuoteDraft: any;\n  quoteBilling: IMap<{\n    data: any;\n    isLoading: boolean;\n  }>;\n  isDownloadingQuoteBilling: boolean;\n  loadingQuotes: List<number>;\n  bidInvitationData: IMap<any>;\n  linkBidInvitationQuote: any;\n}\n\nconst INITIAL_STATE = fromJS({\n  quotes: {},\n  quoteList: [],\n  count: null,\n  hasNextPage: false,\n  quotesLoading: false,\n  revisions: {},\n  quotePhases: [],\n  quotePreview: null,\n  selectedQuoteId: '',\n  printQuoteMap: {},\n  printQuoteFiles: {},\n  error: '',\n  productMedia: [],\n  downloadHistory: {},\n  printHistoryLoading: false,\n  revisionState: {\n    isLoading: false,\n    message: '',\n  },\n  submittingQuote: false,\n  specToQuoteLinkedList: {},\n  reportQuote: {\n    status: 'pending',\n    fileId: null\n  },\n  isCreatingSalesOrder: false,\n  createQuoteWithSpecToQuote: {\n    isLoading: false\n  },\n  loadingSpecToQuoteLinkedList: {\n    status: false,\n    total: 0,\n    finished: 0\n  },\n  allowEmptySpecToQuoteSectionMap: {},\n  isGettingSpecToQuoteDraft: false,\n  specToQuoteInitialValues: null,\n  specToQuoteDraft: {},\n  quoteBilling: {\n    data: null,\n    isLoading: false\n  },\n  isDownloadingQuoteBilling: false,\n  loadingQuotes: [],\n  bidInvitationData: {},\n  linkBidInvitationQuote: null,\n});\n\nexport const reducer = (state: IMapNonRecursive<IQuoteState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case QuoteTypes.RESET_QUOTES_WITH_EXCEPTION: {\n      const { payload } = action as ResetQuotesWithExceptionAction;\n      const { idsToKeep } = payload;\n      return state.set('quotes', idsToKeep.reduce((result, id) => {\n        return result.set(id, state.getIn(['quotes', id]));\n      }, Map() as Map<number, IMap<Quote>>));\n    }\n    case QuoteTypes.RESET_QUOTES: {\n      return state.set('quotes', INITIAL_STATE.get('quotes'));\n    }\n    case QuoteTypes.RESET_REVISIONs: {\n      return state.set('revisions', INITIAL_STATE.get('revisions'));\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT_FAILED: {\n      return state.set('isGettingSpecToQuoteDraft', false);\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT_SUCCEEDED: {\n      const { payload } = action as GetSpecToQuoteDraftSucceededAction;\n      const { draft, userId, createdDate } = payload;\n      return state.withMutations((ctx) => {\n        ctx\n          .setIn(['specToQuoteDraft', 'quoteId'], payload.quoteId)\n          .setIn(['specToQuoteDraft', 'draft'], draft)\n          .setIn(['specToQuoteDraft', 'userId'], userId)\n          .setIn(['specToQuoteDraft', 'createdDate'], createdDate)\n          // .setIn(['specToQuoteLinkedList', draft.get('specId')], draft.get('specToQuoteLinkedList'))\n          .set('isGettingSpecToQuoteDraft', false);\n      });\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT: {\n      return state.set('isGettingSpecToQuoteDraft', true);\n    }\n    case QuoteTypes.SET_IS_CREATING_SALES_ORDER: {\n      const {\n        payload,\n      } = action as SetIsCreatingSalesOrderAction;\n      return state.set('isCreatingSalesOrder', payload.isCreatingSalesOrder);\n    }\n    case PrintActionTypes.PRINT_REPORT_RESET: {\n      return state.set('reportQuote', fromJS({\n        status: 'pending',\n        fileId: null\n      }));\n    }\n    case PrintActionTypes.GENERIC_REPORT_PRINT: {\n      return state.setIn(['reportQuote'], fromJS({\n        status: 'loading'\n      }));\n    }\n    case PrintActionTypes.PRINT_REPORT_COMPLETED: {\n      const { payload } = action as PrintReportCompletedAction;\n      return state.set('reportQuote', fromJS({\n        status: 'ready',\n        fileId: payload.fileId\n      }));\n    }\n    case PrintActionTypes.PRINT_REPORT_FAILED: {\n      return state.setIn(['reportQuote'], fromJS({\n        status: 'error'\n      }));\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS: {\n      const {\n        payload,\n      } = action as GetSpecToQuoteProductsAction;\n      return state.set('loadingSpecToQuoteLinkedList', fromJS({\n        status: true,\n        // total: payload.drawingIds.length,\n        total: 0,\n        finished: 0\n      }));\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetSpecToQuoteProductsSucceededAction;\n\n      const {\n        specId,\n        specToQuoteLinkedList,\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx.setIn(['loadingSpecToQuoteLinkedList', 'status'], false);\n        ctx.setIn(\n          ['specToQuoteLinkedList', specId],\n          Map(specToQuoteLinkedList.map(v => {\n            const trimmedSpecProduct = v.get('specProduct').delete('price').delete('attributes');\n            return [String(v.get('specProductId')), v.set('specProduct', trimmedSpecProduct)];\n          }))\n        );\n      });\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_PRODUCTS_FAILED: {\n      return state.setIn(['loadingSpecToQuoteLinkedList', 'status'], true);\n    }\n    case QuoteTypes.MERGE_BID_QUOTE_SPEC_TO_QUOTE_LINKED_LIST: {\n      const { payload } = action as MergeBidQuoteSpecToQuoteLinkedListAction;\n      const { specId, specToQuoteLinkedList } = payload;\n      return state.updateIn(\n        ['specToQuoteLinkedList', specId],\n        (existing: any) => {\n          const apiData = fromJS(specToQuoteLinkedList);\n          const merged = existing ? apiData.merge(existing) : apiData;\n          return merged;\n        }\n      );\n    }\n    case QuoteTypes.UPDATE_SPEC_TO_QUOTE_LOADING: {\n      return state.setIn(['loadingSpecToQuoteLinkedList', 'finished'], state.getIn(['loadingSpecToQuoteLinkedList', 'finished']) + 1);\n    }\n    case QuoteTypes.GET_PRODUCT_MEDIA_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetProductMediaSucceededAction;\n      return state.set('productMedia', payload);\n    }\n    case QuoteTypes.GET_QUOTES: {\n      const {\n        payload,\n      } = action as GetQuotesAction;\n      const _quoteId = payload.quoteId;\n      return state.withMutations((ctx) => {\n        ctx.set('quotesLoading', true);\n        if (!state.get('loadingQuotes').includes(_quoteId)) {\n          ctx.update('loadingQuotes', (loadingQuotes) => {\n            return loadingQuotes.push(_quoteId);\n          });\n        }\n      });\n    }\n    case QuoteTypes.GET_QUOTES_FAIL: {\n      return state.set('quotesLoading', false).set('loadingQuotes', List());\n    }\n    case QuoteTypes.GET_QUOTES_SUCCESS: {\n      const {\n        payload,\n      } = action as GetQuotesSuccessAction;\n      const {\n        quotes\n      } = payload;\n      return state.withMutations(mutableState => {\n        mutableState.set('quotesLoading', false);\n        mutableState.update(\n          'quotes',\n          (stateQuotes) => {\n            const updatedQuote = quotes.reduce((result, quote) => {\n              return result.set(quote.get('id'), quote);\n            }, stateQuotes);\n\n            const loadingQuotes = state.get('loadingQuotes');\n            if (updatedQuote.every((quote) => loadingQuotes.includes(quote.get('id')))) {\n              mutableState.set('loadingQuotes', List());\n            } else {\n              mutableState.set('loadingQuotes', loadingQuotes.reduce((acc, _quoteId) => updatedQuote.has(_quoteId) ? acc : acc.push(_quoteId), List()));\n            }\n\n            return updatedQuote;\n          }\n        );\n      });\n    }\n    case QuoteTypes.SEARCH_QUOTES: {\n      return state.set('quotesLoading', true);\n    }\n    case QuoteTypes.GET_SEARCHED_QUOTES_SUCCESS: {\n      const {\n        payload,\n      } = action as GetQuoteSearchResultsSucceededAction;\n      const {\n        quotes,\n        count,\n        hasNextPage\n      } = payload;\n      return state.withMutations(mutableState => {\n        mutableState.set('quotes', Map());\n        mutableState.set('quotesLoading', false);\n        mutableState.set('hasNextPage', hasNextPage);\n        mutableState.set('count', count);\n        quotes.map(quote => {\n          mutableState.setIn(['quotes', quote.get('id')], quote);\n        });\n        mutableState.set('quoteList', quotes);\n        // mutableState.update(\n        //   'quotes',\n        //   (stateQuotes) => {\n        //     return quotes.reduce((result, quote) => {\n        //       return result.set(quote.get('id'), quote);\n        //     }, Map<number, IMap<Quote>>());\n        //   }\n        // );\n      });\n    }\n    case QuoteTypes.PATCH_QUOTE_SUCCESS: {\n      return state.update(\n        'quotes',\n        (stateQuotes) => {\n          return stateQuotes.map((quote) => {\n            return action.payload.get('id') === quote.get('id') ? action.payload : quote;\n          });\n        }\n      );\n    }\n    case QuoteTypes.DELETE_QUOTE_SUCCESS:\n      return state.update(\n        'quotes',\n        (stateQuotes: Map<number, IMap<any>>) => {\n          return stateQuotes.delete(Number(action.payload.quoteId));\n        },\n      );\n    case QuoteTypes.CREATE_QUOTE_PREVIEW:\n      return state.update(\n        'quotePreview',\n        () => action.payload ? action.payload : null,\n      );\n    case QuoteTypes.SET_REVISION_LOADING: {\n      const {\n        payload: {\n          isLoading,\n          message = ''\n        }\n      } = action as SetRevisionLoadingAction;\n\n      return state.withMutations((ctx) => {\n        ctx.setIn(['revisionState', 'isLoading'], isLoading);\n        ctx.setIn(['revisionState', 'message'], message);\n      });\n    }\n    case QuoteTypes.SET_REVISION_SUCCESS: {\n      const {\n        payload,\n      } = action as SetRevisionSuccessAction;\n      const {\n        quote,\n      } = payload;\n\n      return state\n        .withMutations((ctx) => {\n          ctx.setIn(['revisions', quote.get('parentQuoteId'), quote.get('id')], quote);\n          ctx.setIn(['revisions', quote.get('parentQuoteId'), quote.get('previousQuoteId'), 'nextQuoteId'], quote.get('id'));\n        });\n    }\n    case QuoteTypes.GET_REVISIONS_SUCCESS: {\n      const {\n        payload,\n      } = action as GetRevisionsSuccessAction;\n      const {\n        revisions,\n      } = payload;\n\n      const sortedRevisions = revisions.sort((A, B) => {\n        const ADate = A.get('createdDate');\n        const BDate = B.get('createdDate');\n\n        if (ADate < BDate) {\n          return -1;\n        }\n        if (ADate > BDate) {\n          return 1;\n        }\n        if (ADate === BDate) {\n          return 0;\n        }\n      });\n\n      return state.set(\n        'revisions',\n        sortedRevisions.reduce((result, revision) => {\n          return result.setIn([revision.get('parentQuoteId'), revision.get('id')], revision);\n        }, Map())\n      );\n    }\n    case QuoteTypes.DELETE_REVISION_SUCCESS: {\n      const {\n        payload,\n      } = action as DeleteRevisionSuccessAction;\n      const {\n        quoteId: revisionToDeleteId,\n        parentQuoteId,\n        previousQuoteId\n      } = payload;\n\n      const newState = state.update(\n        'revisions',\n        (stateQuotes: Map<number, IMap<Quote>>) => stateQuotes.deleteIn([parentQuoteId, revisionToDeleteId]),\n      );\n\n      return previousQuoteId\n        ? newState.withMutations((ctx) => {\n          return ctx.setIn(['revisions', parentQuoteId, previousQuoteId, 'nextQuoteId'], null);\n        })\n        : newState;\n    }\n    case QuoteTypes.SELECT_QUOTE_ID:\n      const quoteId = action.payload.quoteId;\n\n      return state.withMutations((ctx) => {\n        ctx.set('selectedQuoteId', quoteId);\n      });\n    case QuoteTypes.SET_REVISION_FAIL:\n      return state.set('error', action.payload);\n    case QuoteTypes.GET_REVISIONS_FAIL:\n      return state.set('error', action.payload);\n    case QuoteTypes.DELETE_REVISION_FAIL:\n      return state.set('error', action.payload);\n    case QuoteTypes.GET_QUOTE_PHASES_SUCCESS: {\n      const {\n        payload\n      } = action as GetQuotePhasesSuccessAction;\n      const {\n        quotePhases,\n      } = payload;\n      return state.set(\n        'quotePhases',\n        quotePhases,\n      );\n    }\n    case PrintActionTypes.SET_PRINT_QUOTE_STATUS_FOR_SHARE_VENDOR_QUOTE: {\n      const { payload } = action as SetPrintQuoteStatusForShareVendorQuoteAction;\n      const { status, bidInvitationResponseId } = payload;\n      return state.setIn(['printQuoteFiles', bidInvitationResponseId, 'quote', 'status'], status);\n    }\n    case PrintActionTypes.RESET_PRINT_SHARE_VENDOR_QUOTE: {\n      const { payload } = action as ResetPrintShareVendorQuoteAction;\n      const {bidInvitationResponseId} = payload;\n      return state.deleteIn(['printQuoteFiles', bidInvitationResponseId]);\n    }\n    case PrintActionTypes.PRINT_QUOTE_SUCCEEDED: {\n      const {\n        payload,\n      } = action as PrintQuoteSucceededAction;\n      // tslint:disable-next-line\n      const quoteId = payload.get('quoteId');\n      const list = payload.get('list');\n      const type = payload.get('type');\n      const bidInvitationResponseId = payload.getIn(['otherProps', 'bidInvitationResponseId']);\n\n      if (bidInvitationResponseId) {\n        return state.setIn(['printQuoteFiles', bidInvitationResponseId, type], list); // for share vendor quote\n      } else {\n        return state.setIn(['printQuoteFiles', quoteId, type], list);\n      }\n    }\n    case PrintActionTypes.PRINT_QUOTE_COMPLETED: {\n      const {\n        payload,\n      } = action as PrintQuoteCompletedAction;\n      // tslint:disable-next-line\n      const quoteId = payload.get('quoteId');\n      const type = payload.get('type');\n      // return state.deleteIn(['printQuoteMap', quoteId]);\n      const printQuoteTypes: Set<QUOTE_PRINT_FORMAT> = state.getIn(['printQuoteMap', quoteId]) || Set<QUOTE_PRINT_FORMAT>();\n      const updatedPrintQuoteTypes = printQuoteTypes.subtract(singleOrArray(type));\n      return updatedPrintQuoteTypes.isEmpty()\n        ? state.deleteIn(['printQuoteMap', quoteId])\n        : state.setIn(['printQuoteMap', quoteId], updatedPrintQuoteTypes);\n    }\n    case QuoteTypes.RESET_QUOTE_PRINT_DATA: {\n      return state.withMutations((ctx) => {\n        // @ts-ignore\n        ctx.set('printQuoteMap', Map());\n        // @ts-ignore\n        ctx.set('printQuoteFiles', Map());\n      });\n    }\n    case QuoteTypes.SUBMITTING_QUOTE: {\n      const {\n        payload\n      } = action as SubmittingQuoteAction;\n      return state.set('submittingQuote', payload);\n    }\n    case QuoteTypes.UPDATE_QUOTE_PHASE_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateQuotePhaseSucceededAction;\n\n      return state.withMutations((ctx) => {\n        // only update a loaded quote: setIn on a missing one would create a stub holding just this field\n        if (state.hasIn(['quotes', payload.quoteId])) {\n          ctx.setIn(['quotes', payload.quoteId, 'quotePhase'], payload.quotePhase);\n        }\n\n        const quoteIndex = state.get('quoteList').findIndex((quote) => quote.get('id') === payload.quoteId);\n        if (quoteIndex > -1) {\n          ctx.setIn(['quoteList', quoteIndex, 'quotePhase'], payload.quotePhase);\n        }\n      });\n    }\n    case QuoteTypes.UPDATE_QUOTE_ASSIGNED_TO_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateQuoteAssignedToSucceededAction;\n\n      return state.withMutations((ctx) => {\n        // only update a loaded quote: setIn on a missing one would create a stub holding just this field\n        if (state.hasIn(['quotes', payload.quoteId])) {\n          ctx.setIn(['quotes', payload.quoteId, 'assignedTo'], fromJS(payload.assignedTo));\n        }\n\n        const quoteIndex = state.get('quoteList').findIndex((quote) => quote.get('id') === payload.quoteId);\n        if (quoteIndex > -1) {\n          ctx.setIn(['quoteList', quoteIndex, 'assignedTo'], fromJS(payload.assignedTo));\n        }\n      });\n    }\n    case QuoteTypes.SET_IS_CREATING_QUOTE_WITH_SPEC_TO_QUOTE: {\n      const {\n        payload\n      } = action as SetIsCreatingQuoteWithSpecToQuoteAction;\n      return state.setIn(['createQuoteWithSpecToQuote', 'isLoading'], payload.isLoading);\n    }\n    case QuoteTypes.CREATE_QUOTE_WITH_SPEC_TO_QUOTE: {\n      return state.setIn(['createQuoteWithSpecToQuote', 'isLoading'], true);\n    }\n    case QuoteTypes.CREATE_QUOTE_WITH_SPEC_TO_QUOTE_SUCCESS: {\n      return state.setIn(['createQuoteWithSpecToQuote', 'isLoading'], false);\n    }\n    case QuoteTypes.RESET_CREATE_QUOTE_WITH_SPEC_TO_QUOTE: {\n      return state.set('createQuoteWithSpecToQuote', INITIAL_STATE.get('createQuoteWithSpecToQuote'));\n    }\n    case QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE: {\n      const {\n        payload: { draft }\n      } = action as PrepareInitialValuesForSpecToQuote;\n      return state.withMutations((ctx) => {\n        ctx.setIn(['specToQuoteLinkedList', draft.getIn(['spec', 'id'])], draft.get('specToQuoteLinkedList'));\n      });\n      // return state.set('specToQuoteInitialValues', initialValues);\n    }\n    case QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE: {\n      const {\n        payload: { draft }\n      } = action as PrepareInitialValuesForSpecToSourceQuote;\n      const specToQuoteLinkedListTemp = draft.get('specToQuoteLinkedList');\n      const specToQuoteLinkedList = specToQuoteLinkedListTemp?.map(specToQuote => {\n        return specToQuote\n          .set('recommendations', null)\n          .set('recommendedProductNumber', null);\n      });\n      return state.withMutations((ctx) => {\n        ctx.setIn(['specToQuoteLinkedList', draft.getIn(['spec', 'id'])], specToQuoteLinkedList);\n      });\n    }\n    case QuoteTypes.GET_QUOTE_BILLING: {\n      return state.setIn(['quoteBilling', 'isLoading'], true);\n    }\n    case QuoteTypes.GET_QUOTE_BILLING_FAILED: {\n      return state.setIn(['quoteBilling', 'isLoading'], false);\n    }\n    case QuoteTypes.GET_QUOTE_BILLING_SUCCEED: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['quoteBilling', 'isLoading'], false);\n        ctx.setIn(['quoteBilling', 'data'], action.payload.data);\n      });\n    }\n    case QuoteTypes.DOWNLOAD_QUOTE_BILLING: {\n      return state.set('isDownloadingQuoteBilling', true);\n    }\n    case QuoteTypes.DOWNLOAD_QUOTE_BILLING_SUCCEED:\n    case QuoteTypes.DOWNLOAD_QUOTE_BILLING_FAILED: {\n      return state.set('isDownloadingQuoteBilling', false);\n    }\n    case QuoteTypes.GET_SPEC_TO_QUOTE_DRAFT_FAILED: {\n      return state.set('isGettingSpecToQuoteDraft', false);\n    }\n    case QuoteTypes.RESET_SPEC_TO_QUOTE: {\n      return state\n        .set('specToQuoteDraft', Map())\n        .set('specToQuoteLinkedList', Map());\n    }\n    case QuoteTypes.UPDATE_SPEC_TO_QUOTE_LINKED_LIST_RECOMMENDATIONS: {\n      const {\n        payload: {\n          specId,\n          productOrPackageId,\n          productOrPackage\n        }\n      } = action as UpdateSpecToQuoteLinkedListRecommendationsAction;\n\n      const specToQuoteLinkedList = state.getIn(['specToQuoteLinkedList', specId]);\n      const updatedSpecToQuoteLinkedList = specToQuoteLinkedList.map((specToQuote) => {\n        const recommendations = specToQuote.get('recommendations');\n        if (recommendations && recommendations.size) {\n          return specToQuote.set('recommendations', recommendations.map((recommendedProduct, index) => {\n            const quoteProduct = recommendedProduct.get('quoteProduct');\n            if (quoteProduct.get('firmProductId') === productOrPackageId || quoteProduct.getIn(['firmProduct', 'firmProductId']) === productOrPackageId || quoteProduct.get('id') === productOrPackageId) {\n              return recommendedProduct.set('quoteProduct', productOrPackage.set('recommendedIndex', index));\n            } else {\n              // check if recommendations package contain same product\n              // if yes, update the product in the package\n              if (recommendedProduct.get('type') === 'package') {\n                return recommendedProduct.setIn(['quoteProduct', 'products'], quoteProduct.get('products').map(_product => {\n                  if ((_product.get('firmProductId') || _product.getIn(['firmProduct', 'firmProductId'])) === productOrPackageId) {\n                    return productOrPackage;\n                  }\n                  return _product;\n                }));\n              }\n              return recommendedProduct;\n            }\n          }));\n        } else {\n          return specToQuote;\n        }\n\n      });\n      return state.setIn(['specToQuoteLinkedList', specId], updatedSpecToQuoteLinkedList);\n    }\n    case QuoteTypes.SET_BID_INVITATION_DATA: {\n      const {\n        bidInvitationData\n      } = action.payload;\n      return state.set('bidInvitationData', bidInvitationData);\n    }\n    case QuoteTypes.SET_LINK_BID_RESPONSE_QUOTE:\n      return state.set('linkBidInvitationQuote', action.payload);\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import * as React from 'react';\nimport { InputAdornment, Typography } from '@material-ui/core';\n\n/**\n * Renders a character count as an end adornment for a text input.\n * Kept as a single component so every input shows the count identically.\n * `alignSelf: 'flex-end'` overrides the Input row's default center alignment so\n * the count sits at the bottom of a multiline field instead of vertically centered.\n */\nconst CharCountAdornment = ({ count }: { count: number }) => (\n  <InputAdornment position='end' style={{ alignSelf: 'flex-end', marginBottom: 10 }}>\n    <Typography variant='caption' color='textSecondary'>{count}</Typography>\n  </InputAdornment>\n);\n\nexport default CharCountAdornment;\n","import * as React from 'react';\nimport {\n  TextField,\n  TextFieldProps,\n} from '@material-ui/core';\nimport Autocomplete, { AutocompleteProps } from '@material-ui/lab/Autocomplete';\nimport { Map } from 'immutable';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { change } from 'redux-form';\nimport { debounce } from 'lodash';\nimport { makeSelectAllQuickTextList } from '../../../modules/QuickTextModule/selectors';\nimport { quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport useFocused from '../../../hooks/useFocused';\nimport CharCountAdornment from '../../CharCountAdornment';\nimport { QUOTE_INPUT_DELAY } from './constants';\n\nconst _QuickEntry = ({\n  dataPath,\n  label,\n  textFieldProps,\n  autocompleteProps,\n  canClearSet = true,\n  showCharCount = false // when true, show the live character count while focused\n}: { dataPath: Array<string | number>, label: string, textFieldProps?: TextFieldProps, autocompleteProps?: Partial<AutocompleteProps<HTMLElement>>, canClearSet?: boolean, showCharCount?: boolean }) => {\n  const data = useSelector(quoteFormSelector(dataPath));\n  // const product = dataPath\n  const dispatch = useDispatch();\n  const quickTextOptions = useSelector(makeSelectAllQuickTextList()).toArray();\n  const [value, setValue] = React.useState('');\n  const [open, setOpen] = React.useState(false);\n  const [filterString, setFilterString] = React.useState('');\n  const inputRef = React.useRef<Partial<HTMLInputElement>>({\n    value: '',\n    selectionStart: 0,\n    selectionEnd: 0\n  });\n\n  const prevInputRef = React.useRef<Partial<HTMLInputElement>>({\n    selectionStart: 0,\n    selectionEnd: 0,\n    value: ''\n  });\n\n  React.useEffect(() => {\n    if (data !== '' && inputRef.current.value !== data) {\n      inputRef.current.value = data || '';\n      setValue(data || '');\n    }\n    if (canClearSet && data === '' && inputRef.current.value !== data) {\n      inputRef.current.value = data;\n      setValue(data);\n    }\n  }, [data]);\n\n  React.useEffect(() => {\n    // Skip dispatch when value matches the redux-form state — otherwise mount-time\n    // hydration (where [data] effect calls setValue(data)) and external data\n    // refreshes would dispatch a CHANGE with the same value already in the store,\n    // which the auto-save dirty watcher would falsely treat as a user edit.\n    if ((value || '') === (data || '')) {\n      dipatchChangeDebounced.cancel();\n      return;\n    }\n    dipatchChangeDebounced(value);\n  }, [value]);\n\n  React.useEffect(() => {\n    return () => dipatchChangeDebounced.cancel();\n  }, []);\n\n  const dispatchChange = React.useCallback(e => {\n    console.debug(`quickEntry dispatchChange quoteFormPath: ${dataPath}`);\n    dispatch(change(QUOTE_FORM_NAME, dataPath.join('.'), e));\n  }, [dataPath]);\n  const dipatchChangeDebounced = React.useCallback(debounce(dispatchChange, QUOTE_INPUT_DELAY), [dataPath]);\n\n  const { focused, handleFocus, handleBlur } = useFocused(textFieldProps && textFieldProps.onFocus, textFieldProps && textFieldProps.onBlur);\n\n  const focusProps = showCharCount ? { onFocus: handleFocus, onBlur: handleBlur } : {};\n  // Count the same value the input renders (inputRef.current.value) so it stays\n  // accurate while the `::` quick-text menu is open, where `value` state isn't updated.\n  const countAdornment = showCharCount && focused\n    ? <CharCountAdornment count={(inputRef.current.value || '').length} />\n    : null;\n\n  // Pull InputProps/inputProps out of textFieldProps so spreading the rest can't\n  // clobber our controlled value binding or the count adornment — merge them instead.\n  const { InputProps: callerInputProps, inputProps: callerHtmlInputProps, ...restTextFieldProps } = textFieldProps || {};\n\n  if (!open) {\n    return <TextField\n      label={label}\n      fullWidth={true}\n      inputRef={inputRef}\n      inputProps={{ spellCheck: true, ...callerHtmlInputProps, value: inputRef.current.value }}\n      InputProps={{ style: { paddingRight: 0 }, ...callerInputProps, endAdornment: countAdornment }}\n      {...restTextFieldProps}\n      {...focusProps}\n      onChange={(e) => {\n        const val = e.target.value;\n        if (open) {\n          const str = inputRef.current.value.slice(prevInputRef.current.selectionEnd, prevInputRef.current.selectionEnd + (inputRef.current.value.length - value.length));\n          setFilterString(str);\n        } else {\n          if ((inputRef.current.value.match(/::/g) || []).length > (prevInputRef.current.value.match(/::/g) || []).length) {\n            setOpen(true);\n            setTimeout(() => {\n              inputRef.current.focus();\n              inputRef.current.setSelectionRange(prevInputRef.current.selectionStart, prevInputRef.current.selectionEnd);\n            }, 100);\n          }\n          setValue(inputRef.current.value);\n          prevInputRef.current.selectionStart = inputRef.current.selectionStart;\n          prevInputRef.current.selectionEnd = inputRef.current.selectionEnd;\n        }\n        prevInputRef.current.value = inputRef.current.value;\n      }}\n    />;\n  }\n\n  return <Autocomplete\n    options={quickTextOptions}\n    getOptionLabel={(option: any) => {\n      return typeof option !== 'string' ? option.get('key') || '' : '';\n    }}\n    style={{ width: '100%' }}\n    renderInput={(params) => (\n      <TextField\n        {...params}\n        label={label}\n        fullWidth={true}\n        inputRef={inputRef}\n        inputProps={{ ...params.inputProps, spellCheck: true, ...callerHtmlInputProps, value: inputRef.current.value }}\n        InputProps={{ ...params.InputProps, style: { paddingRight: 0 }, ...callerInputProps, endAdornment: countAdornment }}\n        {...restTextFieldProps}\n        {...focusProps}\n      />\n    )}\n    onInputChange={(e, val) => {\n      if (open) {\n        const str = inputRef.current.value.slice(prevInputRef.current.selectionEnd, prevInputRef.current.selectionEnd + (inputRef.current.value.length - value.length));\n        setFilterString(str);\n      } else {\n        if ((inputRef.current.value.match(/::/g) || []).length > (prevInputRef.current.value.match(/::/g) || []).length) {\n          setOpen(true);\n        }\n        setValue(inputRef.current.value);\n        prevInputRef.current.selectionStart = inputRef.current.selectionStart;\n        prevInputRef.current.selectionEnd = inputRef.current.selectionEnd;\n      }\n      prevInputRef.current.value = inputRef.current.value;\n    }}\n    onClose={() => {\n      setOpen(false);\n      setFilterString('');\n      setTimeout(() => {\n        inputRef.current.focus();\n        inputRef.current.setSelectionRange(prevInputRef.current.selectionStart, prevInputRef.current.selectionEnd);\n      }, 100);\n    }}\n    open={open}\n    freeSolo={true}\n    getOptionSelected={() => false}\n    filterOptions={x => x.filter(y => (y.get('key') || '').toLowerCase().includes(filterString.toLowerCase()))}\n    onKeyPress={(e) => {\n      if (e.key === 'Enter' && (!textFieldProps || !textFieldProps.multiline)) {\n        e.preventDefault();\n      }\n    }}\n    onChange={(e: any, val: any) => {\n      if (typeof val !== 'string' && val !== null) {\n        val = (val || Map()).get('blob') || '';\n        const replaced =\n          value.slice(\n            0,\n            prevInputRef.current.selectionEnd - 2\n          ) +\n          val +\n          value.slice(prevInputRef.current.selectionEnd);\n        inputRef.current.value = replaced;\n        setValue(replaced);\n\n        inputRef.current.setSelectionRange(\n          prevInputRef.current.selectionStart + val.length - 2,\n          prevInputRef.current.selectionEnd + val.length - 2\n        );\n\n        setTimeout(() => {\n          inputRef.current.focus();\n          inputRef.current.setSelectionRange(prevInputRef.current.selectionStart + val.length - 2, prevInputRef.current.selectionEnd + val.length - 2);\n        }, QUOTE_INPUT_DELAY);\n      } else if (val === null) {\n        inputRef.current.value = '';\n        setValue('');\n      }\n    }}\n    value={''}\n    autoHighlight={true}\n    {...autocompleteProps}\n  />;\n};\n\nexport const QuickEntry = React.memo(_QuickEntry);\n","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n} from 'redux-form/immutable';\nimport {\n  withTranslation,\n} from 'react-i18next';\n\nimport FieldReactSelect, {\n  IFieldReactSelectComponentProps,\n} from '../FieldReactSelect';\nimport { fromJS, List } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { change } from 'redux-form';\nimport QuickKeysInput from '../QuickKeysInput';\nimport { makeSelectAllQuickTextList } from '../../modules/QuickTextModule/selectors';\nimport { GetAllQuickText } from '../../modules/QuickTextModule/actions';\nimport { makeSelectQuoteFormProps } from '../../modules/QuoteModule/selectors';\nimport { IChangeValueHandler } from '../QuoteForm/types';\nimport { QuickEntry } from '../QuoteForm/SectionListEdit/QuickEntry';\n\ninterface IQuoteTermsConditions {\n  quickEntrySuggestions?: List<IMap<any>>;\n  changeValue: IChangeValueHandler;\n  termsAndConditions?: any;\n  t?(...args: any[]): any;\n}\n\ntype QuoteTermsConditionsProps = IQuoteTermsConditions & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass QuoteTermsConditions extends React.Component<QuoteTermsConditionsProps> {\n\n  public render() {\n    const {\n      classes,\n      termsAndConditions,\n      quickEntrySuggestions,\n      changeValue,\n      t,\n    } = this.props;\n    return (\n      <Grid container={true} className={classes.gridContainer}>\n        <Grid item={true} xs={12}>\n          <Field<BaseFieldProps<IFieldReactSelectComponentProps>>\n            name='termsAndCondition.template'\n            component={FieldReactSelect}\n            props={{\n              inputProps: {\n                className: classes.optionSelect,\n                classes,\n                placeholder: t('termsAndConditions.templateSelectPlaceholder'),\n                options: quickEntrySuggestions ? quickEntrySuggestions.map((suggestion) => fromJS({\n                  label: suggestion.get('key'),\n                  value: suggestion.get('blob'),\n                  id: suggestion.get('id')\n                })) : List(),\n                filterOption: (option, rawInput) => option?.label?.toLowerCase().includes(rawInput?.toLowerCase() || ''),\n                getOptionLabel: (option) => option.get('label'),\n                getOptionValue: (option) => option,\n                styles: customSelectStyles,\n                onChange: this.onTermSelect,\n              },\n              formControlProps: {\n                fullWidth: true,\n              },\n            }}\n          />\n        </Grid>\n        <Grid item={true} xs={12}>\n          <QuickEntry\n            dataPath={['termsAndCondition', 'specialTerms']}\n            label={t('termsAndConditions.otherTermsLabel')}\n            textFieldProps={{\n              multiline: true\n            }}\n            canClearSet={false}\n          />\n        </Grid>\n        <Grid item={true} xs={12}>\n          <QuickEntry\n            dataPath={['termsAndCondition', 'comments']}\n            label={t('termsAndConditions.commentsLabel')}\n            textFieldProps={{\n              multiline: true\n            }}\n            canClearSet={false}\n          />\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private onTermSelect = (term: any) => {\n    const { changeValue } = this.props;\n    const specialTerms = this.props.termsAndConditions && this.props.termsAndConditions.get('specialTerms')\n      ? `${this.props.termsAndConditions.get('specialTerms')} \\n ${term.get('value')}`\n      : term.get('value');\n\n    changeValue({\n      form: 'quote',\n      field: 'termsAndCondition.specialTerms',\n      value: specialTerms,\n    });\n  }\n}\n\nconst customSelectStyles = {\n  control: providedStyles => ({\n    ...providedStyles,\n    borderWidth: `0 0 1px 0`,\n    borderRadius: '0',\n  }),\n  indicatorSeparator: providedStyles => ({\n    ...providedStyles,\n    backgroundColor: 'transparent',\n  }),\n};\n\nconst styles = (theme: Theme) => ({\n  gridContainer: {\n    marginTop: '2em',\n  },\n  optionSelect: {},\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  const changeValue: IChangeValueHandler = ({ form, field, value}) => {\n    dispatch(change(form, field, value));\n    // reset template field if clear specialTerms so placeholder displays\n    if (field === 'termsAndCondition.specialTerms' && !value) {\n      dispatch(change(form, 'termsAndCondition.template', null));\n    }\n  };\n  return {\n    changeValue,\n    getSuggestions: () => {\n      dispatch(new GetAllQuickText());\n    },\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state: any) => {\n  return {\n    termsAndConditions: makeSelectQuoteFormProps(['termsAndCondition'])(state),\n    quickEntrySuggestions: makeSelectAllQuickTextList()(state),\n  };\n};\n\nexport default compose<React.ComponentClass<{}>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withStyles(styles),\n  withTranslation('translations'),\n)(QuoteTermsConditions);\n","import QuoteTermsConditions from './QuoteTermsConditions';\n\nexport default QuoteTermsConditions;\n","import * as React from 'react';\nimport { makeStyles } from '@material-ui/styles';\nimport {\n  Button,\n  Divider,\n  FormControlLabel,\n  Grid,\n  IconButton,\n  InputAdornment,\n  LinearProgress,\n  Radio,\n  RadioGroup,\n  TextField,\n  Theme,\n  Typography,\n} from '@material-ui/core';\nimport { fade } from '@material-ui/core/styles';\nimport AddIcon from '@material-ui/icons/Add';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\nimport { useTranslation } from 'react-i18next';\nimport { List, fromJS } from 'immutable';\nimport {\n  SortableContainer,\n  SortableElement,\n  SortableHandle,\n  arrayMove,\n} from 'react-sortable-hoc';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { IQuoteDiscountListItem, QuoteDiscountListItemType } from '../../modules/AccountModule/types';\nimport { verifyPriceFormat } from '../../utils/parseFormulaFields';\nimport { preventNonNumericKeys } from '../../utils/format-number';\n\nexport type ChargeDiscountTaxList = List<IMap<IQuoteDiscountListItem>>;\ntype Translate = (key: string) => string;\n\nexport interface IChargeDiscountTaxEditorProps {\n  items: ChargeDiscountTaxList;\n  // Return a promise to hold the Add form's input until the change is confirmed, so a failed save can be retried.\n  onChange: (items: ChargeDiscountTaxList) => void | Promise<void>;\n  disabled?: boolean;\n  loading?: boolean;\n  dividerBeforeForm?: boolean;\n}\n\nconst TYPE_LABEL_KEYS: Record<QuoteDiscountListItemType, string> = {\n  charge: 'chargeDiscount.chargeButton',\n  discount: 'chargeDiscount.discountButton',\n  tax: 'chargeDiscount.taxButton',\n};\n\nconst isPercentageType = (type: QuoteDiscountListItemType) => type === 'discount' || type === 'tax';\n\n// discount and tax are stored as fractions (0.1055), so convert back to a percentage for display\nexport const formatChargeDiscountTaxValue = (item: IMap<IQuoteDiscountListItem>) => isPercentageType(item.get('type'))\n  ? `${parseFloat((item.get('value') * 100).toFixed(10))}%`\n  : item.get('value');\n\n// the inputs take a whole percentage for discount and tax, but the stored value is a fraction\nconst toStoredValue = (type: QuoteDiscountListItemType, value: string) => type === 'charge'\n  ? Number(value)\n  : parseFloat((Number(value) / 100).toFixed(10));\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  progress: {\n    marginBottom: theme.spacing(2),\n  },\n  emptyBox: {\n    padding: theme.spacing(1.5, 2),\n    borderRadius: theme.shape.borderRadius,\n    border: `1px solid ${theme.palette.divider}`,\n    backgroundColor: theme.palette.grey[100],\n  },\n  itemsContainer: {\n    padding: theme.spacing(1),\n    borderRadius: theme.shape.borderRadius,\n    border: `1px solid ${theme.palette.divider}`,\n    backgroundColor: theme.palette.grey[100],\n  },\n  itemRow: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: theme.spacing(0.5, 1),\n    marginBottom: theme.spacing(0.75),\n    borderRadius: theme.shape.borderRadius,\n    border: `1px solid ${theme.palette.divider}`,\n    backgroundColor: theme.palette.background.paper,\n    '&:last-child': {\n      marginBottom: 0,\n    },\n  },\n  dragHandle: {\n    cursor: 'grab',\n    color: theme.palette.text.secondary,\n    marginRight: theme.spacing(1),\n  },\n  typeChip: {\n    ...theme.typography.caption,\n    lineHeight: 1,\n    fontWeight: 500,\n    textTransform: 'uppercase',\n    whiteSpace: 'nowrap',\n    padding: theme.spacing(0.5, 1),\n    marginRight: theme.spacing(1.5),\n    borderRadius: theme.shape.borderRadius,\n    color: theme.palette.primary.main,\n    backgroundColor: theme.palette.primary[50],\n  },\n  itemLabel: {\n    flex: 1,\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n  },\n  itemValue: {\n    whiteSpace: 'nowrap',\n    marginRight: theme.spacing(1),\n  },\n  // the row being dragged is rendered on document.body, so it has to sit above a dialog on its own\n  sortableHelper: {\n    zIndex: theme.zIndex.tooltip,\n    boxShadow: theme.shadows[3],\n  },\n  formDivider: {\n    marginTop: theme.spacing(2),\n  },\n  addNewRow: {\n    marginTop: theme.spacing(2),\n  },\n  addNewLabel: {\n    marginRight: theme.spacing(3),\n  },\n  radioLabel: {\n    color: theme.palette.text.primary,\n  },\n  inputsRow: {\n    marginTop: theme.spacing(0.5),\n  },\n  textField: {\n    flex: 1,\n    marginRight: theme.spacing(2),\n  },\n  addButton: {\n    whiteSpace: 'nowrap',\n  },\n}));\n\ninterface ISortableItemProps {\n  item: IMap<IQuoteDiscountListItem>;\n  itemIndex: number;\n  disabled: boolean;\n  classes: ReturnType<typeof useStyles>;\n  t: Translate;\n  onDelete: (index: number) => void;\n}\n\ninterface ISortableListProps extends Omit<ISortableItemProps, 'item' | 'itemIndex'> {\n  items: ChargeDiscountTaxList;\n}\n\nconst DragHandle: any = SortableHandle(({ className }: { className: string }) => (\n  <DragIndicatorIcon className={className} fontSize='small' />\n));\n\nconst SortableItem: any = SortableElement(({ item, itemIndex, disabled, classes, t, onDelete }: ISortableItemProps) => (\n  <div className={classes.itemRow}>\n    <DragHandle className={classes.dragHandle} />\n    <span className={classes.typeChip}>{t(TYPE_LABEL_KEYS[item.get('type')])}</span>\n    <Typography variant='body2' color='textPrimary' className={classes.itemLabel}>{item.get('label')}</Typography>\n    <Typography variant='body2' color='textPrimary' className={classes.itemValue}>{`${item.get('type') === 'discount' ? '-' : ''}${formatChargeDiscountTaxValue(item)}`}</Typography>\n    <IconButton\n      size='small'\n      disabled={disabled}\n      onClick={() => onDelete(itemIndex)}\n      aria-label={t('chargeDiscount.removeItem')}\n    >\n      <CloseIcon fontSize='small' />\n    </IconButton>\n  </div>\n));\n\nconst SortableList: any = SortableContainer(({ items, classes, ...itemProps }: ISortableListProps) => (\n  <div className={classes.itemsContainer}>\n    {items.toArray().map((item, index) => (\n      <SortableItem\n        key={`${item.get('type')}-${item.get('label')}-${index}`}\n        index={index}\n        itemIndex={index}\n        item={item}\n        classes={classes}\n        {...itemProps}\n      />\n    ))}\n  </div>\n));\n\nconst ChargeDiscountTaxEditor: React.FC<IChargeDiscountTaxEditorProps> = ({\n  items,\n  onChange,\n  disabled = false,\n  loading = false,\n  dividerBeforeForm = false,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const [newItem, setNewItem] = React.useState({\n    label: '',\n    value: '',\n    type: 'charge' as QuoteDiscountListItemType,\n  });\n  const [errors, setErrors] = React.useState({\n    label: false,\n    value: false,\n  });\n  const isMounted = React.useRef(true);\n\n  React.useEffect(() => {\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  // the owner may persist the change remotely; wait for it before touching the form and leave error reporting to the owner\n  const applyChange = (updatedItems: ChargeDiscountTaxList, onApplied?: () => void) => {\n    Promise.resolve(onChange(updatedItems)).then(\n      () => {\n        if (onApplied && isMounted.current) {\n          onApplied();\n        }\n      },\n      () => undefined,\n    );\n  };\n\n  const handleSortEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n    if (oldIndex === newIndex) {\n      return;\n    }\n    applyChange(fromJS(arrayMove(items.toJS(), oldIndex, newIndex)));\n  };\n\n  const handleDelete = (index: number) => {\n    applyChange(items.delete(index));\n  };\n\n  const handleTypeChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setNewItem({ ...newItem, type: event.target.value as QuoteDiscountListItemType });\n  };\n\n  const handleFieldChange = (field: 'label' | 'value') => (event: React.ChangeEvent<HTMLInputElement>) => {\n    const fieldValue = event.target.value;\n    // a non-negative amount with at most two decimals\n    if (field === 'value' && !verifyPriceFormat(fieldValue, 2)) {\n      return;\n    }\n    setNewItem({ ...newItem, [field]: fieldValue });\n    // a label made only of spaces is as good as empty\n    setErrors({ ...errors, [field]: !fieldValue.trim() });\n  };\n\n  const handleAdd = () => {\n    const label = newItem.label.trim();\n    const missingLabel = !label;\n    const missingValue = !newItem.value;\n    if (missingLabel || missingValue) {\n      setErrors({ label: missingLabel, value: missingValue });\n      return;\n    }\n    const itemToAdd: IMap<IQuoteDiscountListItem> = fromJS({\n      label,\n      type: newItem.type,\n      value: toStoredValue(newItem.type, newItem.value),\n    });\n    applyChange(items.push(itemToAdd), () => {\n      setNewItem((current) => ({ ...current, label: '', value: '' }));\n    });\n  };\n\n  const renderList = () => {\n    if (loading) {\n      return <LinearProgress className={classes.progress} />;\n    }\n    if (items.size === 0) {\n      return (\n        <div className={classes.emptyBox}>\n          <Typography variant='body2' color='textSecondary'>\n            {t('chargeDiscount.noItemsAddedYet')}\n          </Typography>\n        </div>\n      );\n    }\n    return (\n      <SortableList\n        items={items}\n        classes={classes}\n        t={t}\n        disabled={disabled}\n        onDelete={handleDelete}\n        onSortEnd={handleSortEnd}\n        useDragHandle={true}\n        lockAxis='y'\n        helperClass={classes.sortableHelper}\n      />\n    );\n  };\n\n  return (\n    <React.Fragment>\n      {renderList()}\n      {dividerBeforeForm && <Divider className={classes.formDivider} />}\n      <Grid container={true} alignItems='center' className={classes.addNewRow}>\n        <Typography variant='overline' color='textSecondary' className={classes.addNewLabel}>\n          {t('chargeDiscount.addNew')}\n        </Typography>\n        <RadioGroup\n          row={true}\n          aria-label='type'\n          name='type'\n          value={newItem.type}\n          onChange={handleTypeChange}\n        >\n          {(['charge', 'discount', 'tax'] as QuoteDiscountListItemType[]).map((type) => (\n            <FormControlLabel\n              key={type}\n              value={type}\n              control={<Radio color='primary' />}\n              classes={{ label: classes.radioLabel }}\n              label={t(TYPE_LABEL_KEYS[type])}\n            />\n          ))}\n        </RadioGroup>\n      </Grid>\n      <Grid container={true} alignItems='flex-end' wrap='nowrap' className={classes.inputsRow}>\n        <TextField\n          className={classes.textField}\n          label={t('chargeDiscount.labelPlaceholder')}\n          value={newItem.label}\n          error={errors.label}\n          onChange={handleFieldChange('label')}\n          required={true}\n        />\n        <TextField\n          className={classes.textField}\n          label={t('chargeDiscount.valuePlaceholder')}\n          value={newItem.value}\n          error={errors.value}\n          onChange={handleFieldChange('value')}\n          onKeyDown={preventNonNumericKeys}\n          type='number'\n          InputProps={{\n            endAdornment: isPercentageType(newItem.type)\n              ? <InputAdornment position='end'>%</InputAdornment>\n              : null,\n          }}\n          required={true}\n        />\n        <Button\n          className={classes.addButton}\n          color='primary'\n          startIcon={<AddIcon />}\n          onClick={handleAdd}\n          disabled={disabled}\n        >\n          {t('chargeDiscount.add')}\n        </Button>\n      </Grid>\n    </React.Fragment>\n  );\n};\n\nexport default ChargeDiscountTaxEditor;\n","import ChargeDiscountTaxEditor from './ChargeDiscountTaxEditor';\n\nexport type {\n  ChargeDiscountTaxList,\n  IChargeDiscountTaxEditorProps,\n} from './ChargeDiscountTaxEditor';\nexport { formatChargeDiscountTaxValue } from './ChargeDiscountTaxEditor';\nexport default ChargeDiscountTaxEditor;\n","import * as React from 'react';\nimport {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { List } from 'immutable';\nimport { compose } from 'redux';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport ChargeDiscountTaxEditor, { ChargeDiscountTaxList } from '../ChargeDiscountTaxEditor';\n\ninterface IQuoteChargeDiscountProps {\n  chargesDiscounts: List<any>;\n  update: (updates: List<any>) => void;\n  t?(key: string): string;\n}\ntype QuoteChargeDiscountProps =\n  IQuoteChargeDiscountProps\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IQuoteChargeDiscountState {\n  open: boolean;\n  chargesDiscounts: ChargeDiscountTaxList;\n}\n\n// Edits are kept locally until Update is clicked, so Cancel simply drops them.\nclass QuoteChargeDiscount extends React.Component<QuoteChargeDiscountProps, IQuoteChargeDiscountState> {\n  public state: IQuoteChargeDiscountState = {\n    open: false,\n    chargesDiscounts: this.props.chargesDiscounts,\n  };\n\n  public render() {\n    const { classes, t } = this.props;\n    return (\n      <React.Fragment>\n        <Button\n          variant='outlined'\n          color='primary'\n          className={classes.openPopupButton}\n          onClick={this.handleOpen}\n        >\n          {t('chargeDiscount.openPopupButton')}\n        </Button>\n        <Dialog\n          open={this.state.open}\n          onClose={this.handleClose}\n          maxWidth='sm'\n          fullWidth={true}\n          classes={{ paper: classes.dialogPaper }}\n          aria-labelledby='charge-discount-dialog-title'\n        >\n          <DialogTitle\n            id='charge-discount-dialog-title'\n            disableTypography={true}\n            className={classes.dialogTitle}\n          >\n            <Typography variant='h6'>{t('chargeDiscount.title')}</Typography>\n            <Typography variant='caption' color='textSecondary'>{t('chargeDiscount.instructions')}</Typography>\n          </DialogTitle>\n          <DialogContent className={classes.dialogContent}>\n            <ChargeDiscountTaxEditor\n              items={this.state.chargesDiscounts}\n              onChange={this.handleItemsChange}\n              dividerBeforeForm={true}\n            />\n          </DialogContent>\n          <DialogActions className={classes.dialogActions}>\n            <Button color='primary' onClick={this.handleClose}>\n              {t('chargeDiscount.cancel')}\n            </Button>\n            <Button variant='outlined' color='primary' onClick={this.handleUpdate}>\n              {t('chargeDiscount.update')}\n            </Button>\n          </DialogActions>\n        </Dialog>\n      </React.Fragment>\n    );\n  }\n\n  private handleItemsChange = (chargesDiscounts: ChargeDiscountTaxList) => {\n    this.setState({ chargesDiscounts });\n  }\n\n  private handleOpen = () => {\n    this.setState({\n      open: true,\n      chargesDiscounts: this.props.chargesDiscounts,\n    });\n  }\n\n  private handleClose = () => {\n    this.setState({\n      open: false,\n      chargesDiscounts: this.props.chargesDiscounts,\n    });\n  }\n\n  private handleUpdate = () => {\n    this.setState({ open: false }, () => this.props.update(this.state.chargesDiscounts));\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  openPopupButton: {\n    padding: '10px 36px',\n  },\n  dialogPaper: {\n    maxWidth: 520,\n  },\n  dialogTitle: {\n    display: 'flex',\n    flexDirection: 'column',\n    paddingBottom: theme.spacing(1),\n  },\n  dialogContent: {\n    paddingBottom: theme.spacing(1),\n  },\n  dialogActions: {\n    padding: theme.spacing(2, 3, 3, 3),\n  },\n});\n\nexport default compose<React.ComponentClass<IQuoteChargeDiscountProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(QuoteChargeDiscount);\n","import QuoteChargeDiscount from './QuoteChargeDiscount';\n\nexport default QuoteChargeDiscount;\n","import * as React from 'react';\nimport {\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  TableHead,\n  TableBody,\n  InputAdornment,\n  TableRow,\n  TableCell,\n  Tooltip,\n  Collapse,\n  Button,\n  WithStyles,\n  withStyles,\n  Popper,\n  MenuItem,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  fromJS,\n  List,\n  Map\n} from 'immutable';\nimport { compose } from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport { Dispatch } from 'redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation, WithTranslation,\n} from 'react-i18next';\nimport QuoteGrandTotal from '../QuoteGrandTotal';\nimport QuoteChargeDiscount from '../QuoteChargeDiscount';\nimport { makeSelectQuoteFormProps } from '../../modules/QuoteModule/selectors';\nimport { change } from 'redux-form';\nimport { isEqual } from 'lodash';\nimport { UpdateGrandTotalAction } from '../../modules/QuoteEditModule/actions';\nimport { Quote } from '../../models';\n\nconst styles = (theme: Theme): StyleRules => ({\n  grandTotalWrapper: {\n    justifyContent: 'flex-end'\n  },\n  chargeDiscountWrapper: {\n    display: 'flex',\n    justifyContent: 'flex-end'\n  },\n});\n\nexport interface IGrandTotalsComponentProps {\n  grandTotals?: any;\n  discountList?: any;\n  changeValue?: (fieldName: string, discountList: any) => void;\n  // isDoneRecalculationGrandTotals: () => void;\n  // shouldRecalculateGrandTotals: boolean;\n  sections?: any;\n}\n\ninterface IGrandTotalsProps extends IGrandTotalsComponentProps {\n  dispatch: Dispatch<IAction>;\n}\n\ninterface IGrandTotalsState {\n}\n\ntype ProductSectionComponentProps = IGrandTotalsProps & WithTranslation;\n\ntype GrandTotalsProps =\n  ProductSectionComponentProps\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass GrandTotals extends React.Component<GrandTotalsProps, IGrandTotalsState> {\n  constructor(props: any) {\n    super(props);\n  }\n\n  public shouldComponentUpdate(nextProps: any, nextState: any, nextContext: any): boolean {\n    const grandTotalsHaveChanged = !isEqual(this.props.grandTotals, nextProps.grandTotals);\n    const discountListHasChanged = !isEqual(this.props.discountList, nextProps.discountList);\n    // const shouldRecalculate = nextProps.shouldRecalculateGrandTotals;\n    // return discountListHasChanged || grandTotalsHaveChanged || shouldRecalculate;\n    return discountListHasChanged || grandTotalsHaveChanged;\n  }\n\n  public componentDidUpdate(prevProps: Readonly<GrandTotalsProps>, prevState: Readonly<IGrandTotalsState>, snapshot?: any): void {\n    // if (this.props.shouldRecalculateGrandTotals) {\n    //   this.recalculateGrandTotals();\n    // }\n  }\n\n  public render() {\n    const {\n      classes,\n      grandTotals,\n      discountList,\n      t\n    } = this.props;\n    return (\n      <React.Fragment>\n        <Grid\n          container={true}\n          item={true}\n          xs={12}\n          className={classes.grandTotalWrapper}\n        >\n          {grandTotals\n            ? grandTotals.valueSeq().map((calc: any, index: number) => (\n              <QuoteGrandTotal\n                key={index}\n                grandTotal={calc}\n                discountList={discountList}\n              />\n            ))\n            : ''\n          }\n        </Grid>\n        <Grid\n          item={true}\n          xs={12}\n          className={classes.chargeDiscountWrapper}\n        >\n          {grandTotals && grandTotals.size\n            ? <QuoteChargeDiscount\n              chargesDiscounts={discountList || fromJS([])}\n              update={this.updateDiscounts}\n            />\n            : ''\n          }\n        </Grid>\n      </React.Fragment>\n    );\n  }\n\n  private updateDiscounts = (discountList: any) => {\n    this.props.changeValue('discountList', discountList);\n    this.recalculateGrandTotals(discountList);\n  }\n\n  private recalculateGrandTotals = (discounts?: any) => {\n    const {\n      sections,\n      discountList,\n      dispatch,\n    } = this.props;\n    const currentDiscounts = discounts || discountList;\n\n    dispatch(new UpdateGrandTotalAction({\n      quote: Map({ sections, discountList: currentDiscounts }) as IMap<Quote>,\n    }));\n\n    // const updatedGrandTotals = sections.reduce((gts: any, section: any) => {\n    //     if (section.get('sectionCalculations')) {\n    //       return section.get('sectionCalculations').reduce((ugt: any, calc: any) => {\n    //         return ugt.set(calc.get('name'), fromJS({\n    //           name: calc.get('name'),\n    //           fieldType: calc.get('fieldType'),\n    //           calculationType: calc.get('calculationType'),\n    //           calculationComplexity: calc.get('calculationComplexity') || 'simple',\n    //           formula: calc.get('formula') || '',\n    //           value: ugt.getIn([calc.get('name'), 'value'], 0) + calc.get('value') * (calc.get('calculationType') === 'average' ? calc.get('rowsIncludedInCalculation') : 1),\n    //           rowsIncludedInCalculation: ugt.getIn([calc.get('name'), 'rowsIncludedInCalculation'], 0) + calc.get('rowsIncludedInCalculation'),\n    //         }));\n    //       }, gts);\n    //     }\n    //     return gts;\n    //   }, fromJS({}))\n    //   .map((gt: any) => {\n    //     if (gt.get('calculationType') === 'average') {\n    //       return gt\n    //         .set('discountedValue', gt.get('value') / gt.get('rowsIncludedInCalculation'))\n    //         .set('value', gt.get('value') / gt.get('rowsIncludedInCalculation'));\n    //     } else if (currentDiscounts && currentDiscounts.size) {\n    //       return currentDiscounts.reduce((acc: any, discount: any) => {\n    //         return acc.set('discountedValue', discount.get('type') === 'charge'\n    //           ? acc.get('discountedValue', acc.get('value')) + discount.get('value')\n    //           : acc.get('discountedValue', acc.get('value')) * (1 - discount.get('value'))\n    //         );\n    //       }, gt);\n    //     } else {\n    //       return gt.set('discountedValue', gt.get('value'));\n    //     }\n    //   });\n    // this.props.changeValue('grandTotals', updatedGrandTotals);\n    // this.props.isDoneRecalculationGrandTotals();\n  }\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch,\n    changeValue: (field: string, value: any) => {\n      dispatch(change('quote', field, value));\n    },\n  };\n};\nconst mapStateToProps = (state: any, ownProps: any) => {\n  return {\n    grandTotals: makeSelectQuoteFormProps(['grandTotals'])(state),\n    discountList: makeSelectQuoteFormProps(['discountList'])(state),\n    sections: makeSelectQuoteFormProps(['sections'])(state),\n  };\n};\n\nexport default compose<React.ComponentClass<IGrandTotalsComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps, null, {forwardRef: true}),\n  withTranslation('translations'),\n)(GrandTotals);\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"\n}), 'NavigateNext');","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Box,\n  Typography,\n  Tooltip,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  Check,\n  Edit,\n  Info,\n  NavigateNext\n} from '@material-ui/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IAction, IMap, utcToLocal } from 'ats-utils/src';\nimport { capitalize, initial } from 'lodash';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectUserHasFeatStockLevel } from '../../modules/AtsModule/selectors';\nimport { useTranslation } from 'react-i18next';\nimport i18next from 'i18next';\nimport { Dispatch } from 'redux';\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { PRODUCT_CONTENT_EDIT_KEY, PRODUCT_DRAWER_ID } from '../ProductDrawer';\nimport { PACKAGE_CONTENT_EDIT_KEY, PACKAGE_DRAWER_ID } from '../PackageDrawer';\nimport { GetFirmProductByIdAction, GetPackageByIdAction } from '../../modules/PimModule/actions';\nimport { quoteFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { SetOnFocusProductRow } from '../../modules/QuoteEditModule/actions';\nimport * as uuid from 'uuid';\nimport {\n  change,\n} from 'redux-form';\nimport LinkIcon from '@material-ui/icons/Link';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport { isProductSharedWithFirm } from '../../utils/productSharing';\n\nexport const getManufacturerOfProductOrPackage = productOrPackage => {\n  const multipleManufacturers = i18next.t('translations:productList.multipleManufacturers');\n  return productOrPackage.get('flag') === 'package'\n    ? (productOrPackage.get('products') || []).reduce((manu, prod) => {\n      return (prod.get('brand') || prod.getIn(['firmProduct', 'brand'])) === manu\n        ? manu\n        : multipleManufacturers;\n    }, productOrPackage.get('manufacturerName') || '')\n    : productOrPackage.get('brand') || productOrPackage.getIn(['firmProduct', 'brand']) || '';\n};\n\ninterface IFirmProductPackageAutocompleteOptionCard {\n  option: IMap<any>;\n  selectedRegionId: string;\n  selectedCurrency: string;\n  sectionIndex: number;\n  productIndex: number;\n  callbackWithProduct?: (firmProduct: IMap<any>) => void;\n  showShareStatus?: boolean;\n  userFirmId: number;\n}\n\ntype IFirmProductPackageAutocompleteOption = IFirmProductPackageAutocompleteOptionCard & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  tooltipWrapper: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[1],\n    padding: theme.spacing(1.5, 2),\n    maxHeight: '100vh',\n    overflowY: 'auto'\n  },\n  tooltipMenuItem: {\n    marginTop: theme.spacing(1.5)\n  },\n  packageNumber: {\n    fontWeight: 600,\n  },\n  gray: {\n    color: 'gray'\n  },\n  iconContainer: {\n    marginRight: theme.spacing(),\n  },\n  wrapper: {\n    maxWidth: 350,\n    fontSize: 14\n  },\n  searchOptionBold: {\n    fontWeight: 600,\n    marginRight: theme.spacing(0.5)\n  },\n  internalProductNumberText: {\n    fontStyle: 'italic',\n    marginRight: theme.spacing(0.5)\n  },\n  option: {\n    padding: `${theme.spacing()}px 0px`\n  },\n});\n\nconst FirmProductPackageAutocompleteOption: React.FC<IFirmProductPackageAutocompleteOption> = ({\n  classes,\n  option,\n  selectedRegionId,\n  selectedCurrency,\n  sectionIndex,\n  productIndex,\n  callbackWithProduct,\n  showShareStatus,\n  userFirmId,\n}) => {\n  const dispatch: Dispatch<IAction> = useDispatch();\n\n  const currentRowId = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'rowId']));\n  const hasFeatStockLevelAclRole = useSelector(makeSelectUserHasFeatStockLevel());\n  const { t } = useTranslation('translations');\n\n  const label = option.get('number') || option.get('productNumber') || option.getIn(['firmProduct', 'productNumber']) || '';\n  const internalProductNumber = option.getIn(['firmProduct', 'itemNumber']) || '';\n  const description = option.get('description') || option.getIn(['firmProduct', 'description']) || '';\n  const isPackage = option.get('flag') === 'package';\n  const date = !isPackage\n    ? utcToLocal(option.getIn(['firmProduct', 'dateModified']) || option.get('dateModified') || option.getIn(['firmProduct', 'dateAdded']) || option.get('dateAdded'))\n    : utcToLocal(option.get('modifiedDate') || option.get('createdDate'));\n  const dateNoTimeStamp = date && date.slice(0, 10);\n  const manufacturer = getManufacturerOfProductOrPackage(option);\n  const isSharedProduct = showShareStatus && option.get('sharedProduct') && isProductSharedWithFirm(option, userFirmId);\n  const stockRegion = option.getIn(['firmProduct', 'stockLevels', selectedRegionId])\n                      ?? option.getIn(['stockLevels', selectedRegionId])\n                      ?? option.getIn(['firmProduct', 'stockLevels', 'default'])\n                      ?? option.getIn(['stockLevels', 'default']);\n  const qty = stockRegion?.get('stockLevel') ?? '-';\n  const _products = option.get('products');\n  let isPOA = false;\n\n  let status = '';\n  if (!isPackage) {\n    status = capitalize(option.getIn(['firmProduct', 'status']) ?? option.get('status'));\n    isPOA = option.getIn(['firmProduct', 'price', selectedRegionId, selectedCurrency, 'isPoa']) ?? option.getIn(['price', selectedRegionId, selectedCurrency, 'isPoa']);\n  }\n\n  const openDrawer = (e) => {\n    e.stopPropagation();\n    const id = isPackage ? PACKAGE_DRAWER_ID : PRODUCT_DRAWER_ID;\n    const content = isPackage ? PACKAGE_CONTENT_EDIT_KEY : PRODUCT_CONTENT_EDIT_KEY;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id,\n      content\n    }));\n    dispatch(new ToggleOverlayComponentAction({\n      id,\n      open: true,\n    }));\n\n    if (!option?.get('deltas') && option?.get('flag') !== 'package') { // recommned products has no deltas\n      const firmProductId = option.get('firmProductId') || option.getIn(['firmProudct', 'firmProductId']);\n      dispatch(new GetFirmProductByIdAction({\n        firmProductId,\n        onSuccess: (firmProduct) => {\n          dispatch(new SetOverlayComponentPropsAction({\n            id,\n            props: {\n              initialData: firmProduct,\n              callbackWithProduct\n            }\n          }));\n        }\n      }));\n    } else if (option?.has('recommendedIndex') && option?.get('flag') === 'package') { // recommended packages has recommendedIndex key\n      // get firm package and set props like above\n      dispatch(new GetPackageByIdAction({\n        packageId: option.get('id'),\n        onSuccess: (packageData) => {\n          dispatch(new SetOverlayComponentPropsAction({\n            id,\n            props: {\n              initialData: packageData,\n            }\n          }));\n        }\n      \n      }));\n    } else { // from fresh firm product package search so the results are the most updated already so no need to fetch from db\n      dispatch(new SetOverlayComponentPropsAction({\n        id,\n        props: {\n          initialData: option,\n          callbackWithProduct\n        }\n      }));\n    }\n\n    // setup info for update quote row when product/package is updated\n    const rowId = currentRowId || uuid();\n    dispatch(new SetOnFocusProductRow({ rowId, sectionIndex, productIndex }));\n    if (!currentRowId && productIndex !== undefined) {\n      dispatch(change(QUOTE_FORM_NAME, `sections.${sectionIndex}.products.${productIndex}.rowId`, rowId));\n    }\n  }\n\n  return (\n    <Grid container={true} direction='row' wrap='nowrap' className={classes.option} justify='center'>\n      <Grid item={true}>\n        <FontAwesomeIcon style={{ width: '1.25rem', height: '1.25rem', marginTop: '7px' }} icon={isPackage ? 'boxes' : 'box'} />\n      </Grid>\n      <Box m={1} />\n      <Grid container={true} style={{ overflow: 'hidden' }}>\n        <Grid container={true} wrap='nowrap' justify='space-between' alignItems='center'>\n          <Tooltip title={label || ''}>\n            <Typography noWrap={true} className={classes.searchOptionBold}>{label}</Typography>\n          </Tooltip>\n          {\n            !isPackage\n              ? <Grid item={true} container={true} wrap='nowrap' alignItems='center' justify='flex-end' style={{ width: 'auto', flexShrink: 0 }}>\n                {\n                  showShareStatus &&\n                  <>\n                    <Tooltip title={isSharedProduct ? t('productList.sharedProductTooltip') : t('productList.unsharedProductTooltip')}>\n                      {\n                        isSharedProduct\n                          ? <LinkIcon fontSize='small' color='action' />\n                          : <LinkOffIcon fontSize='small' color='disabled' />\n                      }\n                    </Tooltip>\n                    <Box m={0.25} />\n                  </>\n                }\n                <Typography variant='caption'>{status}</Typography>\n              </Grid>\n              : <Tooltip\n                interactive={true}\n                placement='right-start'\n                classes={{\n                  tooltip: classes.tooltipWrapper\n                }}\n                title={(\n                  <div className={classes.wrapper}>\n                    <Typography className={classes.packageNumber}>{option.get('number')}</Typography>\n                    {\n                      _products?.map((_product, index) => {\n                        const _firmProduct = _product.get('firmProduct') || _product;\n                        const _stockRegion = _firmProduct.getIn(['stockLevels', selectedRegionId]) ?? _firmProduct.getIn(['stockLevels', 'default']);\n                        const _stockable = _stockRegion?.get('stockable');\n                        const _qty = _stockRegion?.get('stockLevel') ?? '-';\n                        const _isPOA = _firmProduct.getIn(['price', selectedRegionId, selectedCurrency, 'isPoa']);\n                        const _id = _firmProduct.get('id');\n                        const _productNumber = _firmProduct.get('productNumber');\n                        const _status = capitalize(_firmProduct.get('status') ?? '');\n                        const _manufacturer = _firmProduct.get('brand');\n                        const _description = _firmProduct.get('description');\n                        const _dateNoTimeStamp = utcToLocal(_firmProduct.get('dateModified') || _firmProduct.get('dateAdded'));\n\n                        return <Grid\n                          key={_id + '_' + index}\n                          container={true}\n                          direction='row'\n                          wrap='nowrap'\n                          className={classes.tooltipMenuItem}\n                        >\n                          <Grid\n                            className={classes.iconContainer}\n                          >\n                            <FontAwesomeIcon icon={'box'} className={classes.gray} />\n                          </Grid>\n                          <Grid container={true} alignContent='center' alignItems='center' style={{ overflow: 'hidden' }}>\n                            <Grid container={true} justify='space-between' wrap='nowrap'>\n                              <Tooltip title={_productNumber || ''}>\n                                <Typography noWrap={true} className={classes.searchOptionBold}>\n                                  {_productNumber}\n                                </Typography>\n                              </Tooltip>\n                              <Tooltip title={_status}>\n                                <Typography noWrap={true} variant='caption'>{_status}</Typography>\n                              </Tooltip>\n                            </Grid>\n                            <Grid container={true} item={true} justify='space-between'>\n                              <Grid item={true}>\n                                <Typography variant='caption'>{_manufacturer}</Typography>\n                              </Grid>\n                              <Grid item={true}>\n                                <Typography variant='caption'>{_dateNoTimeStamp}</Typography>\n                              </Grid>\n                            </Grid>\n                            {\n                              _isPOA || _stockRegion ?\n                                <Grid container={true} item={true} alignItems='center' justify={!_isPOA && _stockRegion ? 'flex-end' : 'space-between'}>\n                                  <Grid item={true} container={true} alignItems='center' xs={6}>\n                                    {\n                                      _isPOA\n                                        ? <>\n                                          <Typography><Check color='primary' /></Typography>\n                                          <Typography variant='caption'>{t('productDrawer.POA')}</Typography>\n                                          <Tooltip title={t('productDrawer.priceIsPOATooltip')}><Info /></Tooltip>\n                                        </>\n                                        : null\n                                    }\n                                  </Grid>\n                                  {\n                                    hasFeatStockLevelAclRole && _stockRegion\n                                      ? <Grid item={true}>\n                                        <Typography variant='caption'>\n                                          {_stockable ? t('productDrawer.inStock') : t('productDrawer.nonStock')}\n                                          | {t('productDrawer.qty')}: <span style={{ color: _qty < 0 ? 'red' : 'inherit' }}>{_qty}</span>\n                                        </Typography>\n                                      </Grid>\n                                      : null\n                                  }\n                                </Grid>\n                                :\n                                null\n                            }\n                            <Grid item={true}>\n                              <Tooltip title={_description || ''}>\n                                <Typography>{_description}</Typography>\n                              </Tooltip>\n                            </Grid>\n                          </Grid>\n                        </Grid>;\n                      })\n                    }\n                  </div>\n                )}\n              >\n                <IconButton size='small'>\n                  <NavigateNext />\n                </IconButton>\n              </Tooltip>\n          }\n        </Grid>\n        {\n          internalProductNumber &&\n          <Grid container={true} wrap='nowrap' alignItems='center'>\n            <Tooltip title={internalProductNumber || ''}>\n              <Typography noWrap={true} className={classes.internalProductNumberText}>{internalProductNumber}</Typography>\n            </Tooltip>\n          </Grid>\n        }\n        <Grid container={true} item={true} justify='space-between'>\n          <Grid item={true}>\n            <Typography variant='caption'>{manufacturer}</Typography>\n          </Grid>\n          <Grid item={true}>\n            <Typography variant='caption'>{dateNoTimeStamp}</Typography>\n          </Grid>\n        </Grid>\n        {\n          isPOA || stockRegion ?\n            <Grid container={true} item={true} alignItems='center' justify={!isPOA && stockRegion ? 'flex-end' : 'space-between'}>\n              <Grid item={true} container={true} alignItems='center' xs={6}>\n                {isPOA ?\n                  <>\n                    <Typography><Check color='primary' /></Typography>\n                    <Typography variant='caption'>{t('productDrawer.POA')}</Typography>\n                    <Tooltip title={t('productDrawer.priceIsPOATooltip')}><Info /></Tooltip>\n                  </>\n                  : null}\n              </Grid>\n              {\n                hasFeatStockLevelAclRole && stockRegion ?\n                  <Grid item={true}>\n                    <Typography variant='caption'>{stockRegion.get('stockable') ? t('productDrawer.inStock') : t('productDrawer.nonStock')} | {t('productDrawer.qty')}: <span style={{ color: qty < 0 ? 'red' : 'inherit' }}>{qty}</span></Typography>\n                  </Grid>\n                  :\n                  null\n              }\n            </Grid>\n            :\n            null\n        }\n        <Grid item={true}>\n          <Tooltip title={description || ''}>\n            <Typography>{description}</Typography>\n          </Tooltip>\n        </Grid>\n      </Grid>\n      <Box m={1} />\n      <Grid item={true}>\n        <Grid container={true} direction='column' alignItems='center' justify='center' style={{ height: '100%' }}>\n          <IconButton size='small' onClick={openDrawer}>\n            <Edit />\n          </IconButton>\n        </Grid>\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default withStyles(styles)(FirmProductPackageAutocompleteOption);\n","import { makeStyles, Theme } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  expansionPanelRoot: {\n    '&::before': {\n      content: 'none'\n    },\n  },\n  expansionPanelDetailsRoot: {\n    padding: '10px 0',\n    overflow: 'auto',\n  },\n  expanded: {\n    '&$expanded': {\n      margin: 0\n    }\n  },\n  switchButtonContainer: {\n    padding: '10px 0',\n  },\n  tableBorder: {\n    // padding: '1px',\n    border: `1px solid ${theme.palette.grey[400]}`,\n    borderRadius: '8px',\n    borderCollapse: 'unset',\n    overflow: 'hidden'\n  },\n  // tableBackground: {\n  //   background: theme.palette.common.white,\n  //   '&>th:not(:nth-child(2)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   },\n  //   '&>td:not(:nth-child(2)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   }\n  // },\n  // tableBackground_showAIProduct: {\n  //   background: theme.palette.common.white,\n  //   '&>th:not(:nth-child(1)):not(:nth-child(4)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   },\n  //   '&>td:not(:nth-child(1)):not(:nth-child(4)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   }\n  // },\n  // tableBackground_showImage_showAIProduct: {\n  //   background: theme.palette.common.white,\n  //   '&>th:not(:nth-child(1)):not(:nth-child(2)):not(:nth-child(5)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   },\n  //   '&>td:not(:nth-child(1)):not(:nth-child(2)):not(:nth-child(5)):not(:last-child)': {\n  //     borderRight: `1px solid ${theme.palette.grey[400]}`,\n  //   }\n  // },\n  tableBackground_showVendorRequestCb: {\n    background: theme.palette.common.white,\n    '&>th': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>th:not(:nth-child(2)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td:not(:nth-child(2)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    }\n  },\n  tableBackground_showAIProduct_showVendorRequestCb: {\n    background: theme.palette.common.white,\n    '&>th': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>th:not(:nth-child(2)):not(:nth-child(4)):not(:nth-child(5)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td:not(:nth-child(2)):not(:nth-child(4)):not(:nth-child(5)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    }\n  },\n  tableBackground_showImage_showAIProduct_showVendorRequestCb: {\n    background: theme.palette.common.white,\n    '&>th': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>th:not(:nth-child(2)):not(:nth-child(5)):not(:nth-child(6)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td:not(:nth-child(2)):not(:nth-child(5)):not(:nth-child(6)):not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    }\n  },\n  tableBackground_note_and_description_row: {\n    '&>th': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td': {\n      borderBottom: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>th:not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    },\n    '&>td:not(:last-child)': {\n      borderRight: `1px solid ${theme.palette.grey[400]}`,\n    }\n  },\n  rowNumberCell: {\n    backgroundColor: theme.palette.grey[300],\n    paddingLeft: 8,\n    paddingRight: 8,\n  },\n  AIProductImageCell: {\n    paddingRight: 0,\n    background: '#E8F5EC',\n  },\n  AIProductImageComponentPlaceholderCell: {\n    paddingRight: 0,\n    background: '#E8F5EC',\n  },\n  AIProductNumberCell: {\n    minWidth: '150px',\n    background: '#E8F5EC',\n  },\n  AIBrandCell: {\n    minWidth: '150px',\n    background: '#E8F5EC',\n    borderRight: `1px solid ${theme.palette.grey[400]}`,\n  },\n  nonAIProductTooltip: {\n    width: '25px',\n    background: '#E8F5EC',\n    paddingRight: 0,\n  },\n  opacity: {\n    '& > div': {\n      opacity: 0.25\n    },\n    '&:hover': {\n      '& > div': {\n        opacity: 1\n      }\n    }\n  },\n  opacityDisabled: {\n    '& > div': {\n      opacity: 0.25\n    },\n  },\n  sectionsList: {\n    // overflow: 'scroll-y'\n    // maxHeight: '80%',\n    width: '200px',\n    // maxHeight: 'calc(90%)',\n    // marginBottom: 12\n  },\n  sectionsTitle: {\n    position: 'sticky',\n    top: 0,\n    zIndex: 999,\n    backgroundColor: theme.palette.common.white,\n    height: 32,\n  },\n  menuList: {\n    paddingTop: 0,\n    paddingBottom: 0\n  },\n  textFieldRoot: {\n    justifyContent: 'flex-end',\n  },\n  textFieldInput: {\n    '& input.Mui-disabled': { // PT-2799\n      color: theme.palette.text.primary\n    },\n  },\n  highlightedTextFieldInput: {\n    '& input.Mui-disabled': {\n      color: theme.palette.text.primary\n    },\n    '& input:first-line': {\n      backgroundColor: 'rgba(77,174,102,0.38)'\n    }\n  },\n  poaTag: {\n    color: theme.palette.error.main,\n    padding: theme.spacing(0.5, 1),\n    marginLeft: 8,\n    marginBottom: 4,\n    borderRadius: 24,\n    border: '1px solid'\n  },\n  boxIcon: {\n    // position: 'absolute',\n    // right: '105%',\n    // top: '35%',\n    fontSize: '18px',\n    color: 'grey'\n  },\n  discontinuedIcon: {\n    display: 'inline-flex',\n    alignItems: 'center',\n    lineHeight: 0\n  },\n  thumbUpButton: {\n    width: 40,\n    height: 35,\n    border: `1px solid ${theme.palette.secondary[500]}`,\n    borderRadius: '45% 0 0 45%',\n    color: theme.palette.secondary[500],\n    '&:hover': {\n      cursor: 'pointer',\n      background: theme.palette.secondary[200]\n    }\n  },\n  thumbUpButtonWithPositiveState: {\n    width: 40,\n    height: 35,\n    border: `1px solid ${theme.palette.secondary[500]}`,\n    borderRadius: '45% 0 0 45%',\n    color: 'white',\n    background: theme.palette.secondary[500],\n    '&:hover': {\n      cursor: 'pointer'\n    }\n  },\n  disabledThumbsUpIcon: {\n    width: 39,\n    height: 35,\n    border: `1px solid lightgray`,\n    borderRadius: '45% 0 0 45%',\n    color: 'white',\n    background: 'lightgray',\n    marginRight: 1,\n    opacity: 0.25\n  },\n  thumbDownButton: {\n    width: 40,\n    height: 35,\n    border: `1px solid ${theme.palette.primary[600]}`,\n    borderRadius: '0 45% 45% 0',\n    color: theme.palette.primary[600],\n    '&:hover': {\n      cursor: 'pointer',\n      background: theme.palette.primary[200]\n    },\n  },\n  thumbDownButtonWithNegativeState: {\n    width: 40,\n    height: 35,\n    border: `1px solid ${theme.palette.primary[600]}`,\n    borderRadius: '0 45% 45% 0',\n    color: 'white',\n    background: theme.palette.primary[600],\n    '&:hover': {\n      cursor: 'pointer'\n    },\n  },\n  disabledThumbsDownIcon: {\n    width: 39,\n    height: 35,\n    border: `1px solid lightgray`,\n    borderRadius: '0 45% 45% 0',\n    color: 'white',\n    background: 'lightgray',\n    marginLeft: 1,\n    opacity: 0.25\n  },\n  columnCell: {\n    '&:hover': {\n      cursor: 'pointer'\n    },\n  },\n  subTotalBox: {\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    justifyContent: 'flex-end',\n    alignItems: 'flex-end',\n  },\n  listIconItem: {\n    width: '30px',\n    minWidth: '30px'\n  },\n  groupLabel: {\n    backgroundColor: theme.palette.secondary[50],\n    paddingLeft: theme.spacing(),\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    fontSize: '0.85em'\n  },\n  infoIcon: {\n    color: 'grey',\n    position: 'relative',\n    top: '3px'\n  },\n  helperText: {\n    color: theme.palette.primary[600]\n  },\n}));\n\nexport default useStyles;\n","import * as React from 'react';\nimport {\n  Box,\n  Button,\n  CircularProgress,\n  Grid,\n  Paper,\n  Tab,\n  Tabs,\n  TextField,\n  Tooltip,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Map } from 'immutable';\nimport { change } from 'redux-form';\nimport { debounce } from 'lodash';\nimport * as uuid from 'uuid';\nimport {\n  QuickSearchPimProductsPackages,\n  SearchParentSharedFirmProductsAction,\n} from '../../../modules/PimModule/actions';\nimport {\n  makeSelectSearchedPimProductsPackages,\n  makeSelectSearchingPimProductsPackages,\n  makeSelectSearchingParentSharedFirmProducts,\n  makeSelectParentSharedFirmProducts\n} from '../../../modules/PimModule/selectors';\nimport {\n  makeSelectIsSpecToQuote,\n  makeSelectUniqueRecommendations,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  makeSelectAddProductOrPackageToQuoteLoading,\n  quoteFormSelector,\n  makeSelectSourceQuote,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  ApplyFeedbackAction,\n  ClearProductInRowAction,\n  SetOnFocusProductRow,\n} from '../../../modules/QuoteEditModule/actions';\nimport {\n  SetOverlayComponentContentAction,\n  ToggleOverlayComponentAction,\n  SetOverlayComponentPropsAction,\n} from '../../../modules/ApplicationModule/actions';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport ProductDrawer, {\n  PRODUCT_CONTENT_EDIT_KEY,\n  PRODUCT_DRAWER_ID\n} from '../../ProductDrawer';\nimport PackageDrawer, {\n  PACKAGE_CONTENT_EDIT_KEY,\n  PACKAGE_DRAWER_ID\n} from '../../PackageDrawer';\nimport FirmProductPackageAutocompleteOption from '../../FirmProductPackageAutocompleteOption';\nimport useStyles from './useStyles';\nimport { getTemplateCurrency } from './constants';\nimport { makeSelectIsChildFirm, makeSelectUserFirmId } from '../../../modules/AtsModule/selectors';\n\nconst PRODUCT_LIBRARY_TAB = 'PRODUCT_LIBRARY';\nconst SHARED_LIBRARY_TAB = 'SHARED_LIBRARY';\n\nconst AC_ = ({\n  product,\n  onChange,\n  textRef,\n  placeholder = '',\n  sectionIndex,\n  productIndex,\n  fromImportVendorPricing,\n  specProductId,\n  callbackWithProduct,\n  vendorQuoteProduct,\n  quoteProductId,\n  vendorQuoteProductPrice\n}: any) => {\n  const dispatch = useDispatch();\n  const isChildFirm = useSelector(makeSelectIsChildFirm());\n  const userFirmId = useSelector(makeSelectUserFirmId());\n  const products = useSelector(makeSelectSearchedPimProductsPackages());\n  const parentSharedProducts = useSelector(makeSelectParentSharedFirmProducts());\n  const searchingProducts = useSelector(makeSelectSearchingPimProductsPackages());\n  const searchingParentSharedProducts = useSelector(makeSelectSearchingParentSharedFirmProducts());\n  const addProductOrPackageToQuoteLoading = useSelector(makeSelectAddProductOrPackageToQuoteLoading());\n  const clearTextRef = () => textRef.current.text = '';\n  const [loading, setLoading] = React.useState(false);\n  const [activeTab, setActiveTab] = React.useState(PRODUCT_LIBRARY_TAB);\n  const isSharedLibraryTab = isChildFirm && activeTab === SHARED_LIBRARY_TAB;\n  const classes = useStyles();\n  const sectionTemplate = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionTemplate']));\n  const selectedCurrency = getTemplateCurrency(sectionTemplate);\n  const { t } = useTranslation('translations');\n  const selectedRegion = useSelector(quoteFormSelector(['region']));\n  const currentRowId = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'rowId']));\n\n  const isSpecToQuote = useSelector(makeSelectIsSpecToQuote());\n  const quoteProductUniquePackageId = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'uniquePackageId']));\n  const quoteProductproductIndex = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'productIndex']));\n  const specToQuoteValues = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'specToQuoteValues']));\n\n  const specId = useSelector(quoteFormSelector(['createdFromSpecId']));\n  const uniqueRecommendations = useSelector(makeSelectUniqueRecommendations(specId, specToQuoteValues?.get('specProductId') || specProductId));\n  const recommendedProducts = uniqueRecommendations?.map((recommendation) => recommendation.get('quoteProduct'));\n  const productsWithRecommendations = recommendedProducts ? products.concat(recommendedProducts) : products;\n  const isNotFirstProductInPackage = isSpecToQuote && !fromImportVendorPricing && Boolean(quoteProductUniquePackageId && quoteProductproductIndex !== 0);\n  const sourceQuoteId = useSelector(makeSelectSourceQuote());\n\n  const searchProducts = query => {\n    dispatch(new QuickSearchPimProductsPackages({ searchTerm: query }));\n    if (isChildFirm) {\n      dispatch(new SearchParentSharedFirmProductsAction({ searchTerm: query }));\n    }\n  };\n  const debouncedSearchProducts = debounce(searchProducts, 500);\n\n  const localOnChange = React.useCallback((event, value) => {\n    setLoading(true);\n    onChange(event, value, () => isSpecToQuote && specToQuoteValues && !fromImportVendorPricing ? handleFeedbackOnSelectChange(value) : null);\n  }, [onChange, isSpecToQuote, specToQuoteValues, fromImportVendorPricing]);\n\n  React.useEffect(() => {\n    if (!addProductOrPackageToQuoteLoading) {\n      setLoading(false);\n    }\n  }, [addProductOrPackageToQuoteLoading]);\n\n  const handleFeedbackOnSelectChange = (value) => {\n    dispatch(new ApplyFeedbackAction({ value, sectionIndex, productIndex }));\n  };\n\n  const getProductOptions = () => {\n    if (isSharedLibraryTab) {\n      return searchingParentSharedProducts ? [] : parentSharedProducts.toArray();\n    }\n\n    if (searchingProducts) {\n      return [];\n    }\n\n    if ((isSpecToQuote && !fromImportVendorPricing) || sourceQuoteId) {\n      return productsWithRecommendations.toArray();\n    }\n\n    if (fromImportVendorPricing) {\n      return productsWithRecommendations\n        .toArray()\n        .filter(p => p.get('flag') !== 'package');\n    }\n\n    return products.toArray();\n  };\n\n  const DrawerButtons = () => <Grid container={true} wrap='nowrap'>\n    <Button\n      style={{ border: 'none', borderRadius: 0 }}\n      variant='outlined'\n      color='primary'\n      fullWidth={true}\n      onClick={(e) => {\n        e.stopPropagation();\n        e.preventDefault();\n        const rowId = currentRowId || (productIndex === undefined ? '-1' : uuid());\n        dispatch(new SetOnFocusProductRow({ rowId, sectionIndex, productIndex }));\n        if (!currentRowId && productIndex !== undefined) {\n          dispatch(change(QUOTE_FORM_NAME, `sections.${sectionIndex}.products.${productIndex}.rowId`, rowId));\n        }\n        dispatch(new SetOverlayComponentContentAction({\n          id: PRODUCT_DRAWER_ID,\n          content: PRODUCT_CONTENT_EDIT_KEY\n        }));\n        dispatch(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: true,\n        }));\n\n        if (callbackWithProduct) {\n          dispatch(new SetOverlayComponentPropsAction({\n            id: PRODUCT_DRAWER_ID,\n            props: {\n              callbackWithProduct,\n              vendorQuoteProduct,\n              vendorQuoteProductPrice,\n            }\n          }));\n        }\n      }}\n    >\n      {t('sectionList.newProductButton')}\n    </Button>\n    {\n      !fromImportVendorPricing &&\n      <Button\n        style={{ border: 'none', borderRadius: 0 }}\n        variant='outlined'\n        color='primary'\n        fullWidth={true}\n        onClick={() => {\n          const rowId = currentRowId || (productIndex === undefined ? '-1' : uuid());\n          dispatch(new SetOnFocusProductRow({ rowId, sectionIndex, productIndex }));\n          if (!currentRowId && productIndex !== undefined) {\n            dispatch(change(QUOTE_FORM_NAME, `sections.${sectionIndex}.products.${productIndex}.rowId`, rowId));\n          }\n          dispatch(new SetOverlayComponentContentAction({\n            id: PACKAGE_DRAWER_ID,\n            content: PACKAGE_CONTENT_EDIT_KEY\n          }));\n\n          dispatch(new ToggleOverlayComponentAction({\n            id: PACKAGE_DRAWER_ID,\n            open: true,\n          }));\n        }}\n      >\n        {t('sectionList.newPackageButton')}\n      </Button>\n    }\n  </Grid>;\n\n  // The popup keeps focus on the combobox input, so the tabs can't be reached\n  // with Tab/arrow keys. Let keyboard users switch tabs with Alt + Left/Right.\n  const handleTabsKeyDown = (e) => {\n    if (isChildFirm && e.altKey && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n      e.preventDefault();\n      setActiveTab((prev) => (prev === PRODUCT_LIBRARY_TAB ? SHARED_LIBRARY_TAB : PRODUCT_LIBRARY_TAB));\n    }\n  };\n\n  return <Autocomplete\n    onOpen={(e) => {\n      if (textRef.current) {\n        textRef.current.focus();\n      }\n    }}\n    options={getProductOptions()}\n    noOptionsText={<Grid container={true} justify='center' style={{ padding: '8px 0' }}>{t('sectionList.noOptions')}</Grid>}\n    loading={isSharedLibraryTab ? searchingParentSharedProducts : searchingProducts}\n    disabled={!Boolean(placeholder) && isNotFirstProductInPackage}\n    disableClearable={Boolean(placeholder) || !product.get('productNumber') || !specToQuoteValues?.get('specProductId')}\n    filterOptions={x => x}\n    getOptionLabel={(option) => option.get('number') || option.get('productNumber') || option.getIn(['firmProduct', 'productNumber']) || ''}\n    onChange={localOnChange}\n    value={product}\n    style={{ width: '100%' }}\n    classes={{\n      groupLabel: classes.groupLabel,\n    }}\n    onInputChange={(e: any, val, reason) => {\n      textRef.current.text = '';\n      if (reason === 'input') {\n        debouncedSearchProducts(val);\n      }\n      if (reason === 'clear') {\n        dispatch(new ClearProductInRowAction({ sectionIndex, productIndex }));\n      }\n    }}\n    renderInput={(params) =>\n      <Tooltip\n        title={\n          product\n            ? `${(product.get('itemNumber') ? product.get('itemNumber') : '')}${product.get('description') ? ' - ' + product.get('description') : ''}`\n            : ''\n          }\n        >\n        <TextField\n          {...params}\n          fullWidth={true}\n          inputRef={textRef}\n          multiline={true}\n          onKeyDown={handleTabsKeyDown}\n          inputProps={{\n            ...params.inputProps,\n            ...textRef.current.text ? { value: textRef.current.text } : {}\n          }}\n          InputProps={{\n            ...params.InputProps,\n            ...loading && addProductOrPackageToQuoteLoading\n              ? {\n                endAdornment: <CircularProgress size='1em' disableShrink={true} />,\n              } : {},\n            style: {\n              whiteSpace: 'normal',\n              overflow: 'visible',\n              textOverflow: 'clip',\n            },\n          }}\n          placeholder={placeholder}\n        />\n      </Tooltip>\n    }\n    renderOption={(option) =>\n      <FirmProductPackageAutocompleteOption\n        option={option}\n        selectedRegionId={selectedRegion.get('id')}\n        selectedCurrency={selectedCurrency}\n        sectionIndex={sectionIndex}\n        productIndex={productIndex}\n        callbackWithProduct={fromImportVendorPricing ? callbackWithProduct : null}\n        showShareStatus={isSharedLibraryTab}\n        userFirmId={userFirmId}\n      />\n    }\n    loadingText={<Grid container={true} alignItems='center' justify='center' style={{ padding: '8px 0' }}><CircularProgress size='1em' /><Box m={0.25} />{t('generalLoading.loading')}</Grid>}\n    onClose={() => {\n      clearTextRef();\n      setActiveTab(PRODUCT_LIBRARY_TAB);\n    }}\n    PaperComponent={({ children, ...props }) => {\n      return <Paper {...props} onMouseDown={e => e.preventDefault()} style={{ width: '150%', fontSize: '1em' }}>\n        {\n          isChildFirm &&\n          <Tabs\n            value={activeTab}\n            onChange={(e, value) => setActiveTab(value)}\n            indicatorColor='primary'\n            textColor='primary'\n            variant='fullWidth'\n            aria-keyshortcuts='Alt+ArrowLeft Alt+ArrowRight'\n          >\n            <Tab value={PRODUCT_LIBRARY_TAB} label={t('sectionList.productLibraryTab')} />\n            <Tab value={SHARED_LIBRARY_TAB} label={t('sectionList.sharedLibraryTab')} />\n          </Tabs>\n        }\n        {children}\n        {!isSharedLibraryTab && <DrawerButtons />}\n      </Paper>;\n    }}\n    groupBy={(option: any) => (\n      isSharedLibraryTab ? null :\n      isSpecToQuote ? (Map.isMap(option) ? option.get('recommendedIndex') !== undefined : option.recommendedIndex !== undefined) ? t('specToQuotePage.productSearchRecommendationHeader') : t('specToQuotePage.productSearchResultsHeader') : null\n    )}\n    {...textRef.current.text ? { inputValue: textRef.current.text } : {}}\n  />;\n};\nexport const AC = React.memo(AC_);\n","import i18next from 'i18next';\nimport {\n  IBidSectionProducts,\n  IBidResponseProduct,\n  IBidGroupProduct,\n} from './BidResponseInterface';\nimport _ from 'lodash';\nimport {\n  AcViewType,\n  AttachmentAIProcessType,\n  AttachmentAISourceType, AttachmentReplyEmailType,\n  RepViewType,\n  VendorQCViewType,\n  VendorAQViewType, SECTION_TYPE_NEW\n} from './BidDetailConstant';\nimport {utcToLocal} from 'ats-utils/src/utcToLocal';\nimport {round} from '../../utils/parseFormulaFields';\nimport QuoteConnectUtil from '../../modules/QuoteConnectService/QuoteConnectUtil';\n\nconst tryParseJSON = (str) => {\n  try {\n    const json = JSON.parse(str);\n    if (typeof json === 'object' && json !== null) {\n      return json;\n    }\n  } catch (e) {\n    return {};\n  }\n  return {};\n};\nconst quotePhaseCode = (quotePhase) => {\n  return (quotePhase || '').trim().replace(/\\s+/g, '').toLowerCase();\n};\n\nconst formatBidResponseProducts = (bidResponseProducts: IBidResponseProduct[]) => {\n  let globalIndexId = 1;\n\n  if (bidResponseProducts) {\n    const groupedData = bidResponseProducts.reduce((acc, responseProduct) => {\n      if (!responseProduct || !responseProduct.BidProduct) {\n        return acc; // Skip invalid items\n      }\n      const {id, sectionId, productNo, productManufacturer, sectionTitle, sectionCurrencyCode} = responseProduct.BidProduct;\n      if (!sectionId || !productNo) {\n        return acc;\n      }\n      const key = sectionId + '|' + productNo;\n      if (!acc.has(key)) {\n        acc.set(key, {\n          id,\n          productNo,\n          productManufacturer,\n          sectionId,\n          sectionTitle,\n          sectionCurrencyCode,\n          isLast: true,\n          BidGroupProducts: [] as IBidGroupProduct[]\n        });\n      }\n      const indexId = globalIndexId++;\n      let attachmentFileName = '';\n      if (responseProduct?.FileUpload?.FileUploadMetas) {\n        if (responseProduct?.FileUpload?.FileUploadMetas.length > 0) {\n          attachmentFileName = responseProduct?.FileUpload?.FileUploadMetas[0].origFileName;\n        }\n      }\n      acc.get(key)!.BidGroupProducts.push({\n        id: responseProduct.id,\n        sectionId,\n        productNo: responseProduct.productNo,\n        productNumber: QuoteConnectUtil.getProductNumber(responseProduct?.Product),\n        productId: responseProduct.productId,\n        listPrice: responseProduct.listPrice,\n        multiplier: responseProduct.multiplier,\n        netPrice: responseProduct.netPrice,\n        attachmentId: responseProduct.attachmentId,\n        attachmentFileName,\n        description: responseProduct.description,\n        note: responseProduct.note,\n        bidInvitationProductId: responseProduct.bidInvitationProductId,\n        error: [],\n        indexId\n      });\n\n      return acc;\n    }, new Map<string, IBidSectionProducts>());\n    let result: IBidSectionProducts[] = Array.from(groupedData.values());\n    result = result.map((item, index, arr) => {\n      const isLast = index === arr.length - 1 || item.sectionId !== arr[index + 1].sectionId;\n      return {...item, isLast};\n    });\n    return result;\n  } else {\n    return [];\n  }\n};\n\nconst getGroupSectionProducts = (bidResponseProducts: IBidResponseProduct[]) => {\n  const groupedProducts = Object.values(\n    bidResponseProducts.reduce((acc, { BidProduct }) => {\n      if (BidProduct) {\n        const {sectionId, sectionTitle, productNo, productManufacturer} = BidProduct;\n        if (!acc[sectionId]) {\n          acc[sectionId] = {sectionId, sectionTitle, products: []};\n        }\n        acc[sectionId].products.push({productNo, productManufacturer});\n      }\n      return acc;\n    }, {})\n  );\n  return groupedProducts;\n};\n\nconst formatQuoteSectionProducts = (invitationResponseResult) => {\n  const sourceQuoteSections = invitationResponseResult?.BidInvitation?.Quote?.SourceQuoteSections || [];\n  const bidResponseProducts: IBidResponseProduct[] = invitationResponseResult?.BidResponseProducts;\n  let newProductMaps = [];\n  if (invitationResponseResult?.attachSection) {\n    const attachSection = JSON.parse(invitationResponseResult?.attachSection);\n    if (attachSection?.newProductMaps?.length > 0) {\n      newProductMaps = attachSection?.newProductMaps;\n    }\n  }\n  const sectionProducts = Object.values(\n    bidResponseProducts?.reduce((acc, responseProduct) => {\n      const sectionId = responseProduct?.BidProduct?.sectionId;\n      let quoteProductId = responseProduct?.BidProduct?.quoteProductId;\n      if (newProductMaps?.length > 0) {\n        const matchAdded = _.findLast(_.flatten(newProductMaps), (item) => {\n          return item?.bidResponseId === responseProduct.id && item.sectionId === sectionId;\n        });\n        if (matchAdded?.quoteProductId) {\n          quoteProductId = matchAdded?.quoteProductId;\n        }\n      }\n      const matchedSection = sourceQuoteSections.find(s => s?.sectionId === sectionId);\n      if (!acc[sectionId]) {\n        acc[sectionId] = {\n          sectionId,\n          sectionTitle: matchedSection?.sectionTitle,\n          sectionNote: matchedSection?.sectionNote || '',\n          resProducts: []\n        };\n      }\n      let fieldsMapping = null;\n      if (responseProduct['fieldsMapping']) {\n        fieldsMapping = tryParseJSON(responseProduct['fieldsMapping']);\n      }\n      let bidLabelColumn = '';\n      let bidProductDescription = '';\n      let bidProductNote = '';\n      matchedSection?.SectionProducts?.forEach((product) => {\n        if (product?.quoteProductId === quoteProductId) {\n          bidProductDescription = product.description || '';\n          bidProductNote = product.note || '';\n          bidLabelColumn = product?.labelColumn || '';\n          return;\n        }\n      });\n\n      acc[sectionId].resProducts.push({\n        productIndex: 0,\n        bidProductId: responseProduct?.BidProduct?.id,\n        bidProductNo: responseProduct?.BidProduct?.productNo,\n        bidLabelColumn,\n        bidProductDescription,\n        bidProductNote,\n        responseProductDescription: responseProduct.description,\n        responseProductNote: responseProduct.note,\n        resProductNo: QuoteConnectUtil.getProductNumber(responseProduct?.Product),\n        fieldsMapping\n      });\n\n      return acc;\n    }, {})\n  );\n  return sectionProducts;\n};\n\nconst getResProductMappingHeaderColumns = (bidResponseProducts: IBidResponseProduct[]) => {\n  let headerMappings = [];\n  bidResponseProducts.forEach ((bidResponseProduct) => {\n    if (bidResponseProduct['fieldsMapping']) {\n      const fieldsMapping = tryParseJSON(bidResponseProduct['fieldsMapping']);\n      return headerMappings = Object.values(fieldsMapping).map(item => item['name']);\n    }\n  });\n  return headerMappings;\n};\n\nconst calculatePrice = (state, payload) => {\n  const priceFields = {\n    productId: null,\n    listPrice: null,\n    multiplier: 1,\n    netPrice: null,\n    error: {\n      productId: null,\n      listPrice: null,\n      multiplier: null,\n      netPrice: null,\n      showError: false\n    }\n  };\n  const productItem = _.get(\n    _.find(state, { id: payload.bidId }),\n    `BidGroupProducts`,\n    []\n  ).find((product) => product.indexId === payload.indexId);\n  if (productItem) {\n    const requiredMsg = i18next.t('translations:errors.required');\n    if (payload.field === 'listPrice') {\n      priceFields.listPrice = payload.fieldValue;\n      priceFields.multiplier = productItem.multiplier;\n      const netPrice = Number(payload.fieldValue) * Number(productItem.multiplier);\n      priceFields.netPrice = round(netPrice, 2).toFixed(2);\n      if (!isValidPositiveNumber(payload.fieldValue)) {\n        priceFields.error.listPrice = requiredMsg;\n        priceFields.error.netPrice = requiredMsg;\n      }\n    }\n    if (payload.field === 'multiplier') {\n      priceFields.listPrice = productItem.listPrice;\n      priceFields.multiplier = payload.fieldValue;\n      const netPrice = Number(payload.fieldValue) * Number(productItem.listPrice);\n      priceFields.netPrice = round(netPrice, 2).toFixed(2);\n      if (!isValidPositiveNumber(payload.fieldValue)) {\n        priceFields.error.multiplier = requiredMsg;\n      }\n      if (!isValidPositiveNumber(priceFields.netPrice)) {\n        priceFields.error.netPrice = requiredMsg;\n      }\n    }\n    if (payload.field === 'netPrice') {\n      priceFields.listPrice = productItem.listPrice;\n      priceFields.multiplier = productItem.multiplier;\n      if (payload.fieldValue) {\n        priceFields.netPrice = payload.fieldValue;\n      } else {\n        priceFields.netPrice = '';\n      }\n      if (!isValidPositiveNumber(payload.fieldValue)) {\n        priceFields.error.netPrice = requiredMsg;\n      }\n    }\n    if (!isValidPositiveNumber(priceFields.multiplier)) {\n      priceFields.error.multiplier = requiredMsg;\n    }\n    if (priceFields.error.listPrice || priceFields.error.multiplier || priceFields.error.netPrice) {\n      if (productItem.productId) {\n        priceFields.error.showError = true;\n      } else {\n        priceFields.error.productId = requiredMsg;\n      }\n    } else {\n      if (productItem.productId) {\n        priceFields.error.productId = null;\n        priceFields.error.showError = false;\n      } else {\n        priceFields.error.productId = requiredMsg;\n        priceFields.error.showError = true;\n      }\n    }\n  }\n  return priceFields;\n};\n\nconst initVerifyAllowBid = (payload: any) => {\n  const requiredMsg = i18next.t('translations:errors.required');\n  _.forEach(payload, (item) => {\n    _.forEach(item?.BidGroupProducts, (suggestProduct) => {\n      if (suggestProduct?.productId || suggestProduct.netPrice) {\n        const netPriceVerify = isValidPositiveNumber(suggestProduct.netPrice);\n        const multiplierVerify = isValidPositiveNumber(suggestProduct.multiplier);\n        if (!suggestProduct?.productId) {\n          suggestProduct.error.productId = requiredMsg;\n          suggestProduct.error.showError = true;\n        }\n        if (!netPriceVerify) {\n          suggestProduct.error.netPrice = requiredMsg;\n          suggestProduct.error.showError = true;\n        }\n        if (!multiplierVerify) {\n          suggestProduct.error.multiplier = requiredMsg;\n          suggestProduct.showError = true;\n        }\n      }\n    });\n  });\n  return payload;\n};\n\nconst createSuggestProduct = (payload, state) => {\n  let maxIndexId = 0;\n\n  state.forEach((section) => {\n    section.BidGroupProducts.forEach((productItem) => {\n      if (productItem.indexId > maxIndexId) {\n        maxIndexId = productItem.indexId;\n      }\n    });\n  });\n  const product: IBidGroupProduct = {\n    id: null,\n    indexId: maxIndexId + 1,\n    productNo: null,\n    productNumber: null,\n    sectionId: '',\n    productId: null,\n    listPrice: null,\n    multiplier: 1,\n    netPrice: null,\n    attachmentId: '',\n    attachmentFileName: '',\n    description: '',\n    note: '',\n    bidInvitationProductId: payload.bidInvitationProductId,\n    error: {\n      listPrice: null,\n      multiplier: null,\n      netPrice: null,\n      showError: false\n    }\n  };\n  return product;\n};\n\nconst createContextSuggestProduct = (payload, state) => {\n  let maxIndexId = 0;\n\n  state?.detailTableProducts.forEach((section) => {\n    section.BidGroupProducts.forEach((productItem) => {\n      if (productItem.indexId > maxIndexId) {\n        maxIndexId = productItem.indexId;\n      }\n    });\n  });\n  const product: IBidGroupProduct = {\n    id: null,\n    indexId: maxIndexId + 1,\n    productNo: null,\n    productNumber: null,\n    sectionId: '',\n    productId: null,\n    listPrice: null,\n    multiplier: 1,\n    netPrice: null,\n    attachmentId: '',\n    attachmentFileName: '',\n    description: '',\n    note: '',\n    bidInvitationProductId: payload.bidInvitationProductId,\n    error: {\n      listPrice: null,\n      multiplier: null,\n      netPrice: null,\n      showError: false\n    }\n  };\n  return product;\n};\n\nconst prefillBidResponseProducts = (invitationResponseResult) => {\n  // get data from BidInvitation build same structure as BidResponseProducts\n  const bidResponseProducts = [];\n  if (invitationResponseResult?.BidInvitation && invitationResponseResult?.BidInvitation?.BidProducts) {\n    _.forEach(invitationResponseResult?.BidInvitation?.BidProducts, (bidProduct) => {\n      const responseProduct = {\n        id: null,\n        productNo: bidProduct.productNo,\n        sectionId: bidProduct.sectionId,\n        productId: null,\n        listPrice: null,\n        multiplier: 1,\n        netPrice: null,\n        description: '',\n        note: '',\n        bidInvitationProductId: bidProduct.id,\n        BidProduct: {\n          id: bidProduct.id,\n          productNo: bidProduct.productNo,\n          productManufacturer: bidProduct.productManufacturer,\n          sectionId: bidProduct.sectionId,\n          sectionTitle: bidProduct.sectionTitle,\n          sectionCurrencyCode: bidProduct.sectionCurrencyCode\n        }\n      };\n      bidResponseProducts.push(responseProduct);\n    });\n  }\n  return bidResponseProducts;\n};\n\nconst initPendingBidResponseProducts = (invitationResponseResult) => {\n  const bidResponseProducts = [];\n  if (invitationResponseResult?.BidInvitation && invitationResponseResult?.BidInvitation?.BidProducts) {\n    _.forEach(invitationResponseResult?.BidInvitation?.BidProducts, (bidProduct) => {\n      const responseProduct = {\n        id: null,\n        productNo: bidProduct.productNo,\n        sectionId: bidProduct.sectionId,\n        productId: null,\n        listPrice: null,\n        multiplier: 1,\n        netPrice: null,\n        attachmentId: null,\n        description: '',\n        note: '',\n        bidInvitationProductId: bidProduct.id,\n        BidProduct: {\n          id: bidProduct.id,\n          productNo: bidProduct.productNo,\n          productManufacturer: bidProduct.productManufacturer,\n          sectionId: bidProduct.sectionId,\n          sectionTitle: bidProduct.sectionTitle,\n          sectionCurrencyCode: bidProduct.sectionCurrencyCode\n        },\n        FileUpload: null,\n        Product: null\n      };\n      invitationResponseResult.BidResponseProducts.forEach((savedResponseProduct) => {\n        if (savedResponseProduct?.bidInvitationProductId === bidProduct.id) {\n          if (savedResponseProduct?.productId && typeof savedResponseProduct.productId === 'string') {\n            savedResponseProduct.productId = Number(savedResponseProduct.productId);\n          }\n          responseProduct.productId = savedResponseProduct.productId;\n          responseProduct.listPrice = savedResponseProduct.listPrice;\n          responseProduct.multiplier = savedResponseProduct.multiplier;\n          responseProduct.netPrice = savedResponseProduct.netPrice;\n          responseProduct.attachmentId = savedResponseProduct.attachmentId;\n          responseProduct.description = savedResponseProduct?.description || '';\n          responseProduct.note = savedResponseProduct?.note || '';\n          if (savedResponseProduct?.FileUpload) {\n            responseProduct.FileUpload = savedResponseProduct?.FileUpload;\n          }\n          if (savedResponseProduct?.Product) {\n            responseProduct.Product = savedResponseProduct?.Product;\n          }\n        }\n      });\n      bidResponseProducts.push(responseProduct);\n    });\n  }\n  return bidResponseProducts;\n};\n\nconst prefillBidResponseSettingInfo = (invitationResponseResult) => {\n  if (!invitationResponseResult.subject) {\n    invitationResponseResult.subject = invitationResponseResult?.quoteConnectBidEmailSetting?.subject || '';\n  }\n  if (!invitationResponseResult.description) {\n    invitationResponseResult.description = invitationResponseResult?.quoteConnectBidEmailSetting?.description || '';\n  }\n  if (invitationResponseResult?.BidInvitationResponseAttachments) {\n    const replyEmailAttachments = [];\n    _.forEach(invitationResponseResult?.BidInvitationResponseAttachments, (sourceFile) => {\n      if (sourceFile.type === AttachmentReplyEmailType) {\n        const replyEmailAttachment = {\n          attachmentId: sourceFile.attachmentId,\n          type: sourceFile.type,\n          origFileName: sourceFile.FileUpload?.FileUploadMetas?.[0]?.origFileName,\n        };\n        replyEmailAttachments.push(replyEmailAttachment);\n      }\n    });\n    invitationResponseResult.replyEmailAttachments = replyEmailAttachments;\n  }\n};\n\nconst getPriceFormat = (data, decimalPlaces) => {\n  if (data) {\n    const factor = Math.pow(10, decimalPlaces);\n    return Math.round(Number(data) * factor) / factor;\n  } else {\n    return null;\n  }\n};\n\nconst getBidResponseProductsSubmitData = (productState, status) => {\n  const result = {\n    termsAndConditions: productState?.termsAndConditions || '',\n    specialTerms: productState?.specialTerms || '',\n    comments: productState?.comments || '',\n    subject: productState?.subject || '',\n    description: productState?.description || '',\n    repExtraInfo: productState?.quoteConnectBidEmailSetting ? JSON.stringify(productState?.quoteConnectBidEmailSetting) : '{}',\n    BidResponseProducts: [],\n    BidInvitationResponseAttachments: []\n  };\n  if (status === 'submitted') {\n    result['status'] = status;\n  }\n  if (productState?.detailTableProducts) {\n    _.forEach(productState?.detailTableProducts, (detailTableProduct) => {\n      if (detailTableProduct?.BidGroupProducts) {\n        _.forEach(detailTableProduct?.BidGroupProducts, (bidGroupProduct) => {\n          const data = {\n            productId: bidGroupProduct?.productId,\n            listPrice: getPriceFormat(bidGroupProduct?.listPrice, 2),\n            multiplier: getPriceFormat(bidGroupProduct?.multiplier, 4),\n            netPrice: getPriceFormat(bidGroupProduct?.netPrice, 2),\n            description: bidGroupProduct?.description,\n            note: bidGroupProduct?.note,\n            attachmentId: bidGroupProduct?.attachmentId,\n            bidInvitationProductId: bidGroupProduct?.bidInvitationProductId\n          };\n          if (status === 'pending') {\n            if (bidGroupProduct?.bidInvitationProductId) {\n              result.BidResponseProducts.push(data);\n            }\n          } else if (bidGroupProduct?.productId && bidGroupProduct?.netPrice) {\n            result.BidResponseProducts.push(data);\n          }\n        });\n      }\n    });\n  }\n  if (productState?.replyEmailAttachments) {\n    const replyEmailAttachments = [];\n    _.forEach(productState?.replyEmailAttachments, (attachment) => {\n        const replyEmailAttachment = {\n          attachmentId: attachment.attachmentId,\n          type: attachment.type,\n        };\n        replyEmailAttachments.push(replyEmailAttachment);\n    });\n    result.BidInvitationResponseAttachments = replyEmailAttachments;\n  }\n  return result;\n};\n\nconst isValidPositiveNumber = (str) => {\n  if (!str) {\n    return false;\n  }\n  const num = Number(str);\n  return str !== null && str !== '' && !isNaN(num) && num > 0;\n};\n\nconst verifyAllowBid = (bidSectionProductsState) => {\n  let allow = true;\n  bidSectionProductsState.forEach(item => {\n    item.BidGroupProducts.forEach(suggestProduct => {\n      if (suggestProduct?.error?.showError) {\n        allow = false;\n        return false;\n      }\n    });\n  });\n  if (allow) {\n    let verifyProduct = true;\n    let totalReplyProducts = 0;\n    bidSectionProductsState.forEach(item => {\n      item.BidGroupProducts.forEach(suggestProduct => {\n        const netPriceVerify = isValidPositiveNumber(suggestProduct.netPrice);\n        const multiplierVerify = isValidPositiveNumber(suggestProduct.multiplier);\n        if (suggestProduct.productId) {\n          if (!netPriceVerify) {\n            verifyProduct = false;\n            return;\n          }\n          if (!multiplierVerify) {\n            verifyProduct = false;\n            return;\n          }\n        }\n        if (suggestProduct.productId && multiplierVerify && netPriceVerify) {\n          totalReplyProducts += 1;\n        }\n      });\n    });\n    allow = verifyProduct;\n    if (totalReplyProducts === 0) {\n      allow = false;\n    }\n  }\n  return allow;\n};\n\nconst getEmailSummary = (bidSummary) => {\n  let emailTemplate = null;\n  if (bidSummary.viewType === AcViewType || bidSummary.viewType === RepViewType) {\n    if (bidSummary?.bidExtraInfo) {\n      emailTemplate = JSON.parse(bidSummary.bidExtraInfo);\n      emailTemplate.subject = bidSummary.bidSubject;\n      emailTemplate.description = bidSummary.bidDescription;\n    }\n  }\n  if (_.includes([VendorQCViewType, VendorAQViewType], bidSummary?.viewType)) {\n    if (bidSummary?.repExtraInfo) {\n      emailTemplate = JSON.parse(bidSummary.repExtraInfo);\n      emailTemplate.subject = bidSummary.subject;\n      emailTemplate.description = bidSummary.description;\n    }\n  }\n  return emailTemplate;\n};\n\nconst getQuoteSearchFilter = (term) => {\n  const filterOptions = {\n    'filters': {\n      'or': [\n        {\n          'quoteNumber': {\n            'like': term\n          }\n        },\n        {\n          'name': {\n            'like': term\n          }\n        },\n        {\n          'pr.name': {\n            'like': term\n          }\n        },\n      ]\n    },\n    'options': {\n      'limit': 100,\n      'offset': 0,\n      'orderBy': {\n        'id': -1\n      }\n    }\n  };\n  return filterOptions;\n};\n\nconst parsingQuoteSearchResult = (quotesResponse) => {\n  const quotes = [];\n  if (quotesResponse?.success) {\n    const quotations = quotesResponse?.data?.payload?.quotation;\n    if (quotations?.quote) {\n      quotations?.quote?.forEach(quote => {\n        quotes.push({\n          quoteId: quote.id,\n          quoteNumber: quote.quoteNumber,\n          name: quote.name,\n          projectId: quote.projectId || null,\n          projectTitle: quote.projectTitle,\n          modifiedDate: quote?.modifiedDate ? utcToLocal(quote?.modifiedDate) : ''\n        });\n      });\n    }\n  }\n  return quotes;\n};\n\n\nconst isSelectedCustomerFiles = (selectCustomerFiles, fileId) => {\n  if (selectCustomerFiles && selectCustomerFiles.length > 0) {\n    return selectCustomerFiles.some(item => item === fileId);\n  } else {\n    return false;\n  }\n};\nconst getBidProjectAttachments = (bidInvitationResponse) => {\n  let files = [];\n  if (bidInvitationResponse?.BidInvitationResponseAttachments?.length > 0) {\n    files = bidInvitationResponse?.BidInvitationResponseAttachments\n      .filter(attachment => [AttachmentAIProcessType, AttachmentAISourceType].includes(attachment.type))\n      .map(attachment => ({\n        attachmentId: attachment.attachmentId,\n        fileName: attachment?.FileUpload?.FileUploadMetas?.[0]?.origFileName\n      }));\n  }\n  return files;\n};\n\nconst getSelectedProjectAttachments = (bidInvitationResponse, selectCustomerFiles) => {\n  let files = [];\n  if (bidInvitationResponse?.BidInvitationResponseAttachments?.length > 0) {\n    files = bidInvitationResponse?.BidInvitationResponseAttachments.filter(attachment => selectCustomerFiles.includes(attachment.attachmentId))\n      .map(attachment => ({\n        attachmentId: attachment.attachmentId,\n        fileName: attachment?.FileUpload?.FileUploadMetas?.[0]?.origFileName\n      }));\n  }\n  return files;\n};\n\nconst getDownloadFile = async (atsApiCall, attachmentId) => {\n  let link = '';\n  if (attachmentId) {\n    link = await atsApiCall.callApi(attachmentId, { service: 'file', endpoint: 'getFile', urlOnly: true, suppressErrors: true, withToken: true, withAppId: true });\n  }\n  return link;\n};\n\nconst groupSuggestSectionCount = (invitationResponseResult) => {\n  const sectionCountMap = {};\n  const sectionCounted = {};\n  const bidResponseProducts = invitationResponseResult?.BidResponseProducts || [];\n\n  bidResponseProducts.forEach(item => {\n    const sectionId = item.BidProduct?.sectionId;\n    if (sectionId) {\n      sectionCountMap[sectionId] = (sectionCountMap[sectionId] || 0) + 1;\n    }\n  });\n\n  bidResponseProducts.forEach(item => {\n    const sectionId = item.BidProduct?.sectionId;\n    if (sectionId) {\n      if (!sectionCounted[sectionId]) {\n        sectionCounted[sectionId] = true;\n        item.sectionCount = sectionCountMap[sectionId];\n      } else {\n        item.sectionCount = 0;\n      }\n    } else {\n      item.sectionCount = 0;\n    }\n  });\n  const processedBidProducts = new Set();\n  let newProductMapsFlatten = null;\n  if (invitationResponseResult?.attachSection) {\n    const attachSection = JSON.parse(invitationResponseResult.attachSection);\n    if (attachSection?.newProductMaps) {\n      newProductMapsFlatten = _.flatten(attachSection?.newProductMaps) as Array<{ bidResponseId: number; sectionId: string; quoteProductId: string }>;\n    }\n  }\n\n  const updatedBidResponseProducts = bidResponseProducts.map(item => {\n    const bidProductId = item?.BidProduct?.id;\n    let quoteProductId = item?.BidProduct?.quoteProductId;\n    let action = 'insert';\n    if (newProductMapsFlatten) {\n      const lastUpdateQuoteProduct = _.findLast(\n        newProductMapsFlatten,\n        (bidRes) => bidRes.bidResponseId === item.id\n      );\n      if (lastUpdateQuoteProduct?.quoteProductId) {\n        quoteProductId = lastUpdateQuoteProduct.quoteProductId;\n        action = '';\n      }\n    }\n    if (processedBidProducts.has(bidProductId)) {\n      // Already seen this BidProduct.id, add type: 'insert'\n      return {\n        ...item,\n        BidProduct: {\n          ...item.BidProduct,\n          quoteProductId,\n          action\n        }\n      };\n    }\n\n    // First occurrence, track it\n    processedBidProducts.add(bidProductId);\n    return item;\n  });\n  return updatedBidResponseProducts;\n};\n\nconst BidInvitationUtil = {\n  quotePhaseCode,\n  formatBidResponseProducts,\n  getGroupSectionProducts,\n  formatQuoteSectionProducts,\n  getResProductMappingHeaderColumns,\n  calculatePrice,\n  initVerifyAllowBid,\n  createSuggestProduct,\n  createContextSuggestProduct,\n  prefillBidResponseProducts,\n  initPendingBidResponseProducts,\n  prefillBidResponseSettingInfo,\n  getBidResponseProductsSubmitData,\n  verifyAllowBid,\n  getEmailSummary,\n  getQuoteSearchFilter,\n  parsingQuoteSearchResult,\n  isSelectedCustomerFiles,\n  getBidProjectAttachments,\n  getSelectedProjectAttachments,\n  getDownloadFile,\n  groupSuggestSectionCount\n};\nexport default BidInvitationUtil;","import React, { useState, memo, useEffect, useCallback, useMemo } from 'react';\nimport {\n  Button,\n  Box,\n  DialogActions,\n  DialogContent,\n  Typography,\n  DialogTitle,\n  IconButton,\n  Theme,\n  makeStyles,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TableRow,\n  Stepper,\n  Step,\n  StepContent,\n  StepLabel,\n  Select,\n  MenuItem,\n  ExpansionPanel,\n  ExpansionPanelDetails,\n  Grid,\n  Checkbox,\n  FormControlLabel,\n  Link,\n  Dialog,\n  Switch,\n  Tooltip,\n  CircularProgress,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport UnfoldMoreIcon from '@material-ui/icons/UnfoldMore';\nimport UnfoldLessIcon from '@material-ui/icons/UnfoldLess';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport DescriptionOutlinedIcon from '@material-ui/icons/DescriptionOutlined';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport { useTranslation } from 'react-i18next';\nimport * as uuid from 'uuid/v1';\n\nimport { AC } from './SectionListEdit/AC';\nimport BidInvitationServiceApi from '../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectEnv, makeSelectAppId } from '../../modules/AtsModule/selectors';\nimport { makeSelectQuoteTemplate } from '../../modules/QuoteModule/selectors';\nimport { fromJS, List } from 'immutable';\nimport { ResetQuoteSearchProducts } from '../../modules/PimModule/actions';\nimport {\n  ImportPricingFromVendorQuoteAction\n} from '../../modules/QuoteEditModule/actions';\nimport _ from 'lodash';\nimport { quoteFormSelector, importPricingFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport useFileSrc from '../../utils/useFileSrc';\nimport QuoteConnectUtil from '../../modules/QuoteConnectService/QuoteConnectUtil';\nimport AccountServiceApi from '../../modules/AccountModule/AccountServiceApi';\nimport { SetLinkBidResponseQuoteAction } from '../../modules/QuoteModule/actions';\nimport Loading from '../Loading';\nimport BidInvitationUtil from '../../containers/AutoQuotationBidDetail/BidInvitationUtil';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport {\n  AttachmentPdfQuotation,\n  AttachmentReplyEmailType,\n  SECTION_TYPE_NEW\n} from '../../containers/AutoQuotationBidDetail/BidDetailConstant';\nimport QuoteFormUtil from './QuoteFormUtil';\nimport PimServiceApi from '../../modules/PimModule/PimServiceApi';\nimport { PRODUCT_DRAWER_ID } from '../ProductDrawer';\nimport { makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\nimport { Currency } from '../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  firstTableCell: {\n    borderRight: '1px solid #C4C4C4',\n    borderLeft: '1px solid #C4C4C4',\n  },\n  tableCell: {\n    borderRight: '1px solid #C4C4C4',\n  },\n  tableAICell: {\n    borderRight: '1px solid #C4C4C4',\n    backgroundColor: '#E8F5EC',\n    minWidth: 100\n  },\n  tableSupplierCell: {\n    borderRight: '1px solid #C4C4C4',\n    backgroundColor: '#FEF2E1',\n    minWidth: 100\n  },\n  gridContainer: {\n    justifyContent: 'space-between',\n  },\n  attachmentFileName: {},\n  attachFileTitleContainer: {\n    paddingTop: theme.spacing(2),\n    display: 'flex',\n  },\n  attachTitleRow: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'flex-start',\n  },\n  attachFilesContainer: {\n    paddingTop: theme.spacing(2),\n    paddingBottom: theme.spacing(2),\n    display: 'flex',\n  },\n  attachmentLabel: {\n    color: theme.palette.primary.main,\n    cursor: 'pointer',\n  },\n  attachDownloadFileRow: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'flex-start',\n  },\n  iconAndTextContainer: {\n    display: 'flex',\n    alignItems: 'center',\n    flexGrow: 1,\n    minWidth: 0,\n  },\n  disabledProductRow: {\n    opacity: 0.5,\n  },\n  disabledProductText: {\n    color: '#9e9e9e',\n  },\n  enabledProductText: {\n    color: 'rgba(0, 0, 0, 0.87)',\n  },\n}));\n\nconst _defaultFieldsToMap = [\n  {\n    key: 'listPrice',\n    alias: 'list',\n    name: 'List Price',\n    mappingTo: ''\n  },\n  {\n    key: 'multiplier',\n    alias: 'multiplier',\n    name: 'Multiplier',\n    mappingTo: ''\n  },\n  {\n    key: 'netPrice',\n    alias: 'netPrice',\n    name: 'Net Price',\n    mappingTo: ''\n  }\n];\n\ninterface IImportPricingStepperProps {\n  bidResponseId: number;\n  open: boolean;\n  onClose: (imported?: boolean) => void;\n  linkBidResponseId?: number;\n  bidResponseProductIds?: number[];\n  invitationResponses?: any[];\n}\n\nconst ImportPricingStepper = ({ bidResponseId, open, onClose, linkBidResponseId, bidResponseProductIds, invitationResponses }: IImportPricingStepperProps) => {\n  const atsApi = useAtsApi();\n  const classes = useStyles();\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n\n  const [loaded, setLoaded] = useState(false);\n  const [loadMappingReady, setLoadMappingReady] = useState(false);\n  const [step, setStep] = useState(0);\n  const [allRowsExpanded, setAllRowsExpanded] = useState(false);\n  const [expandedRows, setExpandedRows] = useState([]);\n  const [selectedVendorQuote, setSelectedVendorQuote] = useState(null);\n  const [fieldsToMap, setFieldsToMap] = useState([]);\n  const [selectedProducts, setSelectedProducts] = useState([]);\n  const [productsToMap, setProductsToMap] = useState({});\n  const [finalCheck, setFinalCheck] = useState(false);\n  const [addMissingProductModalOpen, setAddMissingProductModalOpen] = useState(false);\n  const [selectedMissingProducts, setSelectedMissingProducts] = useState<number[]>([]);\n  const [unmappedProducts, setUnmappedProducts] = useState<any[]>([]);\n  const [importedMissingProductIds, setImportedMissingProductIds] = useState<number[]>([]);\n  const [categories, setCategories] = useState<any[]>([]);\n  const [manufacturers, setManufacturers] = useState<any[]>([]);\n  const [bidImportPriceSetting, setBidImportPriceSetting] = useState([]);\n  const [extraSections, setExtraSections] = useState([]);\n  const [allVendorBidResponseProductIds, setAllVendorBidResponseProductIds] = useState<number[]>([]);\n  const [allVendorBidResponseProducts, setAllVendorBidResponseProducts] = useState<any[]>([]);\n  const [updateFirmProductPrice, setUpdateFirmProductPrice] = useState<Record<number, boolean>>({});\n  const [updatePriceConfirmOpen, setUpdatePriceConfirmOpen] = useState(false);\n  const [fetchingPrices, setFetchingPrices] = useState(false);\n  const mountedRef = React.useRef(true);\n  useEffect(() => () => (mountedRef.current = false), []);\n\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const template = useSelector(makeSelectQuoteTemplate());\n  const quoteId = useSelector(quoteFormSelector(['id']));\n  const quoteSections = useSelector(quoteFormSelector(['sections']));\n  const quoteRegionId = useSelector(quoteFormSelector(['region', 'id'])) || 'default';\n  const importPricingForm = useSelector(importPricingFormSelector());\n  const selectProductDrawerOpen = useMemo(() => makeSelectOverlayComponent(PRODUCT_DRAWER_ID), []);\n  const isProductDrawerOpen = useSelector(selectProductDrawerOpen);\n\n  // Reset state when dialog closes\n  useEffect(() => {\n    if (!open) {\n      setLoaded(false);\n      setLoadMappingReady(false);\n      setStep(0);\n      setFieldsToMap([]);\n      setSelectedProducts([]);\n      setProductsToMap({});\n      setSelectedVendorQuote(null);\n      setFinalCheck(false);\n      setAllRowsExpanded(false);\n      setExpandedRows([]);\n      setImportedMissingProductIds([]);\n      setUnmappedProducts([]);\n      setUpdateFirmProductPrice({});\n      setUpdatePriceConfirmOpen(false);\n      setAddMissingProductModalOpen(false);\n      setSelectedMissingProducts([]);\n      setExtraSections([]);\n      setAllVendorBidResponseProductIds([]);\n    }\n  }, [open]);\n\n  // Fetch initial data when dialog opens\n  useEffect(() => {\n    if (open && bidResponseId) {\n      getInit();\n    }\n  }, [open, bidResponseId]);\n\n  // Fetch vendor quote detail when loaded and template available\n  useEffect(() => {\n    if (!open || !loaded || !bidResponseId || template.size === 0) { return; }\n    fetchDetail(template, quoteSections);\n  }, [loaded, bidResponseId, template]);\n\n  useEffect(() => {\n    if (selectedProducts.length === 0) {\n      setFinalCheck(false);\n    }\n  }, [selectedProducts]);\n\n  useEffect(() => {\n    if (expandedRows.length === 0) {\n      setAllRowsExpanded(false);\n    } else if (expandedRows.length === selectedVendorQuote?.BidResponseProducts?.length) {\n      setAllRowsExpanded(true);\n    }\n  }, [expandedRows]);\n\n  const getInit = useCallback(async () => {\n    const bidImportPriceSettingResult = await AccountServiceApi.fetchPreference(env, appId, 'bidImportPrice');\n    setBidImportPriceSetting(bidImportPriceSettingResult);\n    const categoriesResult = await AccountServiceApi.getCategories(env, appId);\n    setCategories(categoriesResult || []);\n    const manufacturersResult = await AccountServiceApi.getManufacturers(env, appId);\n    setManufacturers(manufacturersResult || []);\n    setLoaded(true);\n  }, [env, appId]);\n\n  const fetchDetail = async (quoteTemplate, sourceQuoteSections) => {\n    const templateObj = quoteTemplate.toJS();\n    const userType = '';\n    const invitationResponseResult = await BidInvitationServiceApi.fetchOneDetailResponse(env, appId, bidResponseId, userType);\n    if (invitationResponseResult?.attachSection) {\n      const attachSection = JSON.parse(invitationResponseResult.attachSection);\n      const extraSectionsTemp = [];\n\n      if (attachSection?.groupedSectionProducts) {\n        _.forEach(attachSection?.groupedSectionProducts, (section) => {\n          if (section?.sectionType === SECTION_TYPE_NEW) {\n            extraSectionsTemp.push(section);\n          }\n        });\n      }\n\n      if (extraSectionsTemp.length > 0) {\n        const sectionMap = {};\n\n        _.forEach(invitationResponseResult?.BidResponseProducts, (bidResponseProduct) => {\n          if (bidResponseProduct?.bidInvitationProductId === 0) {\n            const matchSection = extraSectionsTemp.find(section =>\n              section.products.some(product =>\n                product.suggestAttachProducts.some(\n                  item => item.matchAttachQuoteProductId === bidResponseProduct.quoteProductId\n                )\n              )\n            );\n\n            if (matchSection) {\n              const mapSectionId = matchSection?.sectionId;\n\n              if (!sectionMap[mapSectionId]) {\n                sectionMap[mapSectionId] = uuid();\n              }\n\n              bidResponseProduct.sectionTitle = matchSection?.sectionTitle;\n              bidResponseProduct.BidProduct = {\n                quoteProductId: uuid(),\n                mapSectionId,\n                sectionTitle: matchSection?.sectionTitle || '',\n                sectionType: SECTION_TYPE_NEW,\n                sectionId: sectionMap[mapSectionId]\n              };\n            }\n          }\n        });\n      }\n      setExtraSections(extraSectionsTemp);\n    }\n\n    // Capture ALL vendor product IDs and BRP objects before filtering — needed for cleanup scoping in saga\n    setAllVendorBidResponseProductIds(invitationResponseResult?.BidResponseProducts?.map(brp => brp.id) || []);\n    setAllVendorBidResponseProducts(invitationResponseResult?.BidResponseProducts || []);\n\n    if (bidResponseProductIds?.length && invitationResponseResult?.BidResponseProducts) {\n      invitationResponseResult.BidResponseProducts = invitationResponseResult.BidResponseProducts.filter(\n        brp => bidResponseProductIds.includes(brp.id)\n      );\n    }\n\n    const initMappingProducts = QuoteFormUtil.findMappingProducts(sourceQuoteSections, invitationResponseResult);\n\n    if (initMappingProducts) {\n      const selectedBidIds = Object.keys(initMappingProducts)?.map(Number) || [];\n      const searchProductsParams = QuoteFormUtil.getFirmProductSearchParams(selectedBidIds, invitationResponseResult?.BidResponseProducts);\n      if (searchProductsParams) {\n        const searchFirmProductResults = await PimServiceApi.searchFirmProducts(env, appId, searchProductsParams);\n        if (searchFirmProductResults?.length > 0) {\n          QuoteFormUtil.addSearchProductsToMap(searchFirmProductResults, invitationResponseResult?.BidResponseProducts, initMappingProducts, selectedBidIds);\n        }\n      }\n      setProductsToMap(initMappingProducts);\n      setSelectedProducts(selectedBidIds);\n    }\n    if (invitationResponseResult) {\n      invitationResponseResult.BidResponseProducts = BidInvitationUtil.groupSuggestSectionCount(invitationResponseResult);\n    }\n\n    setSelectedVendorQuote(invitationResponseResult);\n    if (invitationResponseResult) {\n      mappingPriceSetting(invitationResponseResult, templateObj);\n    }\n  };\n\n  const mappingPriceSetting = (invitationResponseResult, templateObj) => {\n    let updateMappingFields = [];\n    const fieldsMapping = invitationResponseResult?.BidResponseProducts[0]?.fieldsMapping;\n    if (fieldsMapping) {\n      const parsedFieldsMappings = JSON.parse(fieldsMapping);\n      Object.entries(parsedFieldsMappings).forEach(([key, child]) => {\n        const defaultSetting = _defaultFieldsToMap.find(item => item.alias === key);\n        updateMappingFields.push(\n          {\n            key,\n            alias: defaultSetting?.alias || '',\n            name: child['name'],\n            mappingTo: ''\n          }\n        );\n      });\n    } else {\n      updateMappingFields = _.clone(_defaultFieldsToMap);\n    }\n    if (bidImportPriceSetting && bidImportPriceSetting.length > 0) {\n      const hasAttachQuote = !!invitationResponseResult.attachedQuoteId;\n      const matchPriceSetting = bidImportPriceSetting.find(item => item.templateId === templateObj?.id && item?.hasAttachQuote === hasAttachQuote);\n      if (matchPriceSetting) {\n        const settings = matchPriceSetting?.setting;\n        if (settings) {\n          updateMappingFields.forEach((mappingField) => {\n            let matchSetting = settings.find(setting => mappingField.key === setting.key);\n            if (!matchSetting) {\n              matchSetting = settings.find(setting => mappingField.alias === setting.key);\n            }\n            if (!matchSetting) {\n              matchSetting = settings.find(setting => mappingField.key === setting.alias);\n            }\n            if (matchSetting) {\n              mappingField.alias = matchSetting.alias;\n              const aliasField = templateObj?.fieldsData?.find(templateItem => templateItem.fieldName === matchSetting.alias);\n              if (aliasField) {\n                if (aliasField.type === 'formula') {\n                  mappingField.mappingTo = 'not';\n                } else {\n                  const existingMapTo = updateMappingFields.find(field => field.mappingTo === aliasField.id);\n                  if (existingMapTo) {\n                    existingMapTo.mappingTo = 'not';\n                  }\n                  mappingField.mappingTo = aliasField.id;\n                }\n              }\n            }\n          });\n        }\n      } else {\n        updateMappingFields.forEach((mappingField) => {\n          let aliasField = templateObj?.fieldsData?.find(templateItem => templateItem.fieldName === mappingField.alias);\n          if (!aliasField) {\n            aliasField = templateObj?.fieldsData?.find(templateItem => templateItem.fieldName === mappingField.key);\n          }\n          if (aliasField) {\n            if (aliasField.type === 'formula') {\n              mappingField.mappingTo = 'not';\n            } else {\n              mappingField.mappingTo = aliasField.id;\n            }\n          }\n        });\n      }\n    }\n    updateMappingFields.forEach((mappingField) => {\n      if (!mappingField.mappingTo) {\n        mappingField.mappingTo = 'not';\n      }\n    });\n    setFieldsToMap(updateMappingFields);\n    setLoadMappingReady(true);\n  };\n\n  const handleOnExpand = (rowId) => {\n    if (expandedRows.includes(rowId)) {\n      setExpandedRows(expandedRows.filter(id => id !== rowId));\n    } else {\n      setExpandedRows([...expandedRows, rowId]);\n    }\n  };\n\n  const handleOnExpandAll = () => {\n    if (allRowsExpanded) {\n      setExpandedRows([]);\n    }\n    else {\n      setExpandedRows(selectedVendorQuote?.BidResponseProducts?.map(row => row.id));\n    }\n    setAllRowsExpanded(!allRowsExpanded);\n  };\n\n  const handleOpenAddMissingProductModal = () => {\n    const currentUnmappedIds = QuoteFormUtil.findUnmappedProducts(selectedVendorQuote?.BidResponseProducts, productsToMap).map(p => p.id);\n    const allProducts = selectedVendorQuote?.BidResponseProducts?.filter(\n      product => currentUnmappedIds.includes(product.id) || importedMissingProductIds.includes(product.id)\n    ) || [];\n\n    const uniqueProducts = QuoteFormUtil.removeDuplicateProducts(allProducts);\n    setUnmappedProducts(uniqueProducts);\n    setSelectedMissingProducts([...importedMissingProductIds]);\n    setAddMissingProductModalOpen(true);\n  };\n\n  const importNewProducts = async () => {\n    const updatedProductsToMap = { ...productsToMap };\n    const updatedSelectedProducts = [...selectedProducts];\n    const updatedImportedIds = [...importedMissingProductIds];\n\n    const newlySelected = unmappedProducts.filter(product =>\n      selectedMissingProducts.includes(product.id) && !importedMissingProductIds.includes(product.id)\n    );\n    newlySelected.forEach((product) => {\n      const productKey = QuoteFormUtil.getProductUniqueKey(product, true);\n      const allMatchingProducts = selectedVendorQuote?.BidResponseProducts?.filter(\n        p => QuoteFormUtil.getProductUniqueKey(p, true) === productKey\n      ) || [];\n\n      allMatchingProducts.forEach((matchingProduct) => {\n        const responseProduct = matchingProduct?.Product;\n        const firmProductData = {\n          firmProduct: {\n            productNumber: responseProduct?.firmProductProductNumber || responseProduct?.productProductNumber,\n            responseProductId: matchingProduct.id\n          }\n        };\n        updatedProductsToMap[matchingProduct.id] = fromJS(firmProductData);\n        if (!updatedSelectedProducts.includes(matchingProduct.id)) {\n          updatedSelectedProducts.push(matchingProduct.id);\n        }\n        if (!updatedImportedIds.includes(matchingProduct.id)) {\n          updatedImportedIds.push(matchingProduct.id);\n        }\n      });\n    });\n\n    const unchecked = importedMissingProductIds.filter(id => !selectedMissingProducts.includes(id));\n    unchecked.forEach((id) => {\n      delete updatedProductsToMap[id];\n      const index = updatedSelectedProducts.indexOf(id);\n      if (index > -1) {\n        updatedSelectedProducts.splice(index, 1);\n      }\n      const importedIndex = updatedImportedIds.indexOf(id);\n      if (importedIndex > -1) {\n        updatedImportedIds.splice(importedIndex, 1);\n      }\n    });\n\n    setProductsToMap(updatedProductsToMap);\n    setSelectedProducts(updatedSelectedProducts);\n    setImportedMissingProductIds(updatedImportedIds);\n    setAddMissingProductModalOpen(false);\n  };\n\n  const bidCurrency = React.useMemo(() => {\n    const bidResponseItems = selectedVendorQuote?.BidResponseProducts?.filter(row => row.bidInvitationProductId !== 0);\n    const bidResponseProduct = bidResponseItems?.length ? bidResponseItems[0] : undefined;\n    return (bidResponseProduct?.BidProduct?.sectionCurrencyCode || 'USD') as Currency;\n  }, [selectedVendorQuote]);\n\n  const handleUpdateFirmProductPriceChange = (rowId: number, checked: boolean) => {\n    setUpdateFirmProductPrice(prev => {\n      const updated = { ...prev, [rowId]: checked };\n      if (checked) {\n        const fpId = productsToMap[rowId]?.getIn(['firmProduct', 'firmProductId'])\n          || productsToMap[rowId]?.get('firmProductId')\n          || productsToMap[rowId]?.get('id');\n        if (fpId) {\n          Object.keys(productsToMap).forEach(key => {\n            if (Number(key) !== rowId) {\n              const otherFpId = productsToMap[key]?.getIn(['firmProduct', 'firmProductId'])\n                || productsToMap[key]?.get('firmProductId')\n                || productsToMap[key]?.get('id');\n              if (otherFpId === fpId) { updated[Number(key)] = false; }\n            }\n          });\n        }\n      }\n      return updated;\n    });\n  };\n\n  const hasUnmappedProducts = React.useMemo(() => {\n    const unmapped = QuoteFormUtil.findUnmappedProducts(selectedVendorQuote?.BidResponseProducts, productsToMap);\n    return unmapped.length > 0;\n  }, [selectedVendorQuote?.BidResponseProducts, productsToMap]);\n\n  const getMappedPriceFields = () => {\n    const fieldNameToPriceKey: Record<string, string> = { list: 'list', listPrice: 'list', sell: 'sell', sellPrice: 'sell', cost: 'cost' };\n    const templateFields = template?.get('fieldsData');\n    return fieldsToMap\n      .filter(f => f.mappingTo !== 'select' && f.mappingTo !== 'not')\n      .map(f => {\n        const templateField = templateFields?.find(tf => tf.get('id') === f.mappingTo);\n        const fieldName = templateField?.get('fieldName');\n        const priceKey = fieldNameToPriceKey[fieldName];\n        return { ...f, priceKey, templateFieldName: templateField?.get('name') || f.name };\n      })\n      .filter(f => f.priceKey);\n  };\n\n  const getUpdatePriceConfirmData = () => {\n    const data = [];\n    const bidResponseProducts = selectedVendorQuote?.BidResponseProducts || [];\n    const mappedPriceFields = getMappedPriceFields();\n\n    bidResponseProducts.forEach((brp) => {\n      if (!updateFirmProductPrice[brp.id] || !selectedProducts.includes(brp.id)) { return; }\n\n      const firmProductNumber = productsToMap[brp.id]?.getIn(['firmProduct', 'productNumber'])\n        || productsToMap[brp.id]?.get('productNumber') || '--';\n\n      // Original prices from firm product (productsToMap)\n      const originalPrices: Record<string, any> = {};\n      const firmProduct = productsToMap[brp.id];\n      if (firmProduct) {\n        mappedPriceFields.forEach(field => {\n          originalPrices[field.priceKey] = firmProduct.getIn(['firmProduct', 'price', quoteRegionId, bidCurrency, field.priceKey])\n            || firmProduct.getIn(['price', quoteRegionId, bidCurrency, field.priceKey]);\n        });\n      }\n\n      // Updated prices from bid response (same logic as priceMapping in ProductRow)\n      const fieldsMapping = brp?.fieldsMapping ? JSON.parse(brp.fieldsMapping) : null;\n      const updatedPrices: Record<string, any> = {};\n      mappedPriceFields.forEach(field => {\n        if (fieldsMapping) {\n          updatedPrices[field.priceKey] = fieldsMapping[field.key]?.value ?? null;\n        } else {\n          updatedPrices[field.priceKey] = brp[field.key] ?? null;\n        }\n      });\n\n      data.push({ firmProductNumber, originalPrices, updatedPrices });\n    });\n\n    return data;\n  };\n\n  const handleOpenConfirmUpdate = () => {\n    setUpdatePriceConfirmOpen(true);\n    setFetchingPrices(true);\n    QuoteFormUtil.fetchFirmProducts(\n      env, appId, productsToMap, selectedProducts, updateFirmProductPrice,\n      selectedVendorQuote?.BidResponseProducts || []\n    ).then(updatedMap => {\n      if (mountedRef.current) { setProductsToMap(updatedMap); }\n    }).catch(() => {\n      // fetch error — dialog will show stale data\n    }).finally(() => {\n      if (mountedRef.current) { setFetchingPrices(false); }\n    });\n  };\n\n  const handleConfirmUpdate = async () => {\n    const bidResponseProducts = selectedVendorQuote?.BidResponseProducts || [];\n    const mappedPriceFields = getMappedPriceFields();\n    const firmProductsToUpdate = [];\n\n    bidResponseProducts.forEach((brp) => {\n      if (!updateFirmProductPrice[brp.id] || !selectedProducts.includes(brp.id)) { return; }\n\n      const firmProduct = productsToMap[brp.id];\n      const firmProductId = firmProduct?.getIn(['firmProduct', 'firmProductId']) || firmProduct?.get('firmProductId');\n      if (!firmProductId) { return; }\n\n      // Build price with only mapped fields — unmapped fields not sent (backend preserves them)\n      const currencyPrice: Record<string, any> = {};\n\n      const fieldsMapping = brp?.fieldsMapping ? JSON.parse(brp.fieldsMapping) : null;\n\n      // Only include mapped fields with values\n      mappedPriceFields.forEach(field => {\n        let newValue = null;\n        if (fieldsMapping) {\n          newValue = fieldsMapping[field.key]?.value ?? null;\n        } else {\n          newValue = brp[field.key] ?? null;\n        }\n        if (newValue != null && newValue !== '') {\n          currencyPrice[field.priceKey] = newValue;\n          currencyPrice[`${field.priceKey}IsOverride`] = true;\n        }\n      });\n\n      firmProductsToUpdate.push({\n        deltas: {\n          firmProductId,\n          price: {\n            [quoteRegionId]: {\n              [bidCurrency]: currencyPrice\n            }\n          }\n        }\n      });\n    });\n\n    if (firmProductsToUpdate.length > 0) {\n      await PimServiceApi.updateBatch(env, appId, { firmProducts: firmProductsToUpdate });\n    }\n\n    handleOnClickImportPricing();\n  };\n\n  const ProductRow = memo(\n    ({ row, attachedQuoteId, expanded, onExpandChnage }: { row: any, attachedQuoteId: number, expanded: boolean, onExpandChnage: (rowId: any) => void }) => {\n      const file = row?.FileUpload;\n      const fileSrc = useFileSrc({ fileId: file?.id })?.fileSrc;\n      const textRef = React.useRef({ focus: () => null, value: '', text: '' }) as any;\n      const specProductId = row?.BidProduct?.specProductId;\n      const quoteProductId = row?.BidProduct?.quoteProductId;\n\n      const fieldsMapping = row?.fieldsMapping ? JSON.parse(row?.fieldsMapping) : null;\n      const priceMapping = {\n        list: '',\n        sell: '',\n        cost: ''\n      };\n      if (fieldsMapping) {\n        priceMapping.list = fieldsMapping[fieldsToMap?.find(a => a.alias === 'list')?.key || 'list']?.value ?? '';\n        priceMapping.sell = fieldsMapping[fieldsToMap?.find(a => a.alias === 'sell')?.key || 'sell']?.value ?? '';\n        priceMapping.cost = fieldsMapping[fieldsToMap?.find(a => a.alias === 'cost')?.key || 'cost']?.value ?? '';\n      } else {\n        if (row.listPrice) {\n          priceMapping.list = row.listPrice;\n        }\n      }\n\n      const vendorQuoteProductPrice = {\n        description: row.description,\n        ...(row.BidProduct && { [bidCurrency]: priceMapping })\n      };\n\n      const onChangeAutocomplete = React.useCallback((event, value, callback?) => {\n        if (value?.toJS()) {\n          setProductsToMap({\n            ...productsToMap,\n            [row.id]: value\n          });\n          if (!selectedProducts.includes(row.id)) {\n            setSelectedProducts([...selectedProducts, row.id]);\n          }\n          if (importedMissingProductIds.includes(row.id)) {\n            setImportedMissingProductIds(prev => prev.filter(id => id !== row.id));\n          }\n          dispatch(new ResetQuoteSearchProducts());\n        }\n      }, [importedMissingProductIds]);\n\n      const onChangeCheckbox = React.useCallback((event) => {\n        if (event.target.checked) {\n          setSelectedProducts([...selectedProducts, row.id]);\n        } else {\n          setSelectedProducts(selectedProducts.filter(id => id !== row.id));\n        }\n      }, [row.id]);\n\n      const handleProductDrawerCallback = React.useCallback((product) => {\n        setProductsToMap({\n          ...productsToMap,\n          [row.id]: product\n        });\n        if (!selectedProducts.includes(row.id)) {\n          setSelectedProducts([...selectedProducts, row.id]);\n        }\n        if (importedMissingProductIds.includes(row.id)) {\n          setImportedMissingProductIds(prev => prev.filter(id => id !== row.id));\n        }\n      }, [productsToMap, selectedProducts, importedMissingProductIds]);\n\n      const selected = selectedProducts.includes(row.id);\n\n      const onClickExpand = () => {\n        onExpandChnage(row.id);\n      };\n\n      const getDynamicFieldsCount = () => {\n        return fieldsToMap.filter(f => f.mappingTo !== 'select' && f.mappingTo !== 'not').length;\n      };\n\n      const getTotalColumn = () => {\n        let count = 8; // 7 base + 1 for updateFirmProductPrice\n        count += getDynamicFieldsCount();\n        if (!attachedQuoteId) {\n          count += 1;\n        }\n        return count;\n      };\n\n      const calculateRowSpan = () => {\n        if (row?.sectionCount > 0) {\n          return row.sectionCount * 2;\n        }\n        return 0;\n      };\n\n      return (\n        <>\n          <TableRow>\n            {(row?.sectionCount > 0) && (\n              <TableCell\n                className={classes.tableAICell}\n                rowSpan={calculateRowSpan()}\n              >\n                {row?.BidProduct?.sectionTitle || '-'}\n              </TableCell>\n            )}\n            <TableCell className={classes.tableAICell}>\n              <Grid container={true} className={classes.gridContainer}>\n                <Grid item={true} xs={11}>\n                  <Typography variant='body2' color='textPrimary'>\n                    {row?.BidProduct?.productNo}\n                  </Typography>\n                  <Typography variant='body2' color='textSecondary'>\n                    {row?.BidProduct?.productManufacturer}\n                  </Typography>\n                </Grid>\n              </Grid>\n            </TableCell>\n            <TableCell className={classes.tableSupplierCell}>{QuoteConnectUtil.getProductNumber(row?.Product)}</TableCell>\n            <TableCell className={classes.tableSupplierCell}>{QuoteConnectUtil.getManufacturer(row?.Product)}</TableCell>\n            <TableCell>\n              <IconButton onClick={onClickExpand}>\n                {expanded ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\n              </IconButton>\n            </TableCell>\n            <TableCell>\n              <Checkbox disabled={!Boolean(productsToMap[row.id])} checked={selected} onChange={onChangeCheckbox} />\n            </TableCell>\n            <TableCell style={{ minWidth: '300px' }}>\n              <AC\n                quoteProductId={quoteProductId}\n                product={productsToMap[row.id]}\n                textRef={textRef}\n                onChange={onChangeAutocomplete}\n                placeholder='Product'\n                fromImportVendorPricing={true}\n                specProductId={specProductId}\n                callbackWithProduct={handleProductDrawerCallback}\n                vendorQuoteProduct={row?.Product}\n                vendorQuoteProductPrice={vendorQuoteProductPrice}\n              />\n            </TableCell>\n            {fieldsToMap.map((field, index) => field.mappingTo !== 'select' && field.mappingTo !== 'not' && (\n              <TableCell key={index} className={index === 0 ? classes.firstTableCell : classes.tableCell}>\n                {fieldsMapping?.[field.key]?.value || row[field.key]}\n              </TableCell>\n            ))}\n            <TableCell className={classes.tableCell}>\n              {Boolean(productsToMap[row.id]) && !importedMissingProductIds.includes(row.id) && (\n                <Tooltip\n                  title={QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id]) ? 'Cannot update pricing, firm product is currently linked to the ATS library.' : ''}\n                  disableHoverListener={!QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id])}\n                >\n                  <span>\n                    <Switch\n                      disabled={QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id])}\n                      checked={!!updateFirmProductPrice[row.id]}\n                      onChange={(e) => {\n                        handleUpdateFirmProductPriceChange(row.id, e.target.checked);\n                      }}\n                      color='primary'\n                      size='small'\n                    />\n                  </span>\n                </Tooltip>\n              )}\n            </TableCell>\n            {(!attachedQuoteId) && (\n              <TableCell className={classes.tableCell}>\n                {file?.FileUploadMetas ? (\n                  <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                    <DescriptionIcon color='primary' />\n                    <Link href={fileSrc} target='_blank' className={classes.attachmentFileName}>\n                      {file?.FileUploadMetas[0]?.origFileName}\n                    </Link>\n                  </Grid>\n                ) : (\n                  <>{t('pricingRequests.noAttachment')}</>\n                )}\n              </TableCell>\n            )}\n          </TableRow>\n          <TableRow>\n            <TableCell colSpan={getTotalColumn()}\n                       style={{ padding: 0, ...expanded ? {} : { border: 0 } }}\n            >\n              <ExpansionPanel\n                square={true}\n                expanded={expanded}\n                elevation={0}\n                TransitionProps={{ mountOnEnter: true, unmountOnExit: true }}\n              >\n                <span />\n                <ExpansionPanelDetails>\n                  <Grid container={true} spacing={2} justify='space-between' alignItems='flex-start'>\n                    <Grid item={true} xs={true}>\n                      <Typography variant='body1'>{t('pricingRequests.productDescription')}</Typography>\n                      <Typography variant='body2'>{row?.description}</Typography>\n                    </Grid>\n                    <Grid item={true} xs={true}>\n                      <Typography variant='body1'>{t('pricingRequests.note')}</Typography>\n                      <Typography variant='body2'>{row?.note}</Typography>\n                    </Grid>\n                  </Grid>\n                </ExpansionPanelDetails>\n              </ExpansionPanel>\n            </TableCell>\n          </TableRow>\n        </>\n      );\n    }\n  );\n\n  const ExtraSectionProductRow = memo(\n    ({ row, expanded, onExpandChnage }: { row: any, expanded: boolean, onExpandChnage: (rowId: any) => void }) => {\n      const textRef = React.useRef({ focus: () => null, value: '', text: '' }) as any;\n      const specProductId = row?.BidProduct?.quoteProductId;\n      const quoteProductId = row?.BidProduct?.quoteProductId;\n\n      const fieldsMapping = row?.fieldsMapping ? JSON.parse(row?.fieldsMapping) : null;\n\n      const priceMapping = fieldsMapping ? {\n        list: fieldsMapping[fieldsToMap?.find(a => a.alias === 'list')?.key || 'list']?.value ?? '',\n        sell: fieldsMapping[fieldsToMap?.find(a => a.alias === 'sell')?.key || 'sellPrice']?.value ?? '',\n        cost: fieldsMapping[fieldsToMap?.find(a => a.alias === 'cost')?.key || 'cost']?.value ?? '',\n      } : {};\n\n      const vendorQuoteProductPrice = {\n        description: row.description,\n        ...(row.BidProduct && { [bidCurrency]: priceMapping })\n      };\n\n      const onChangeAutocomplete = React.useCallback((event, value, callback?) => {\n        if (value) {\n          let updatedValue = value;\n          if (value?.get('firmProduct')) {\n            updatedValue = value.setIn(\n              ['firmProduct', 'quoteProductId'],\n              quoteProductId\n            );\n          } else {\n            updatedValue = value.set('quoteProductId', quoteProductId);\n          }\n          setProductsToMap({\n            ...productsToMap,\n            [row.id]: updatedValue\n          });\n          if (!selectedProducts.includes(row.id)) {\n            setSelectedProducts([...selectedProducts, row.id]);\n          }\n          if (importedMissingProductIds.includes(row.id)) {\n            setImportedMissingProductIds(prev => prev.filter(id => id !== row.id));\n          }\n          dispatch(new ResetQuoteSearchProducts());\n        }\n      }, [importedMissingProductIds]);\n\n      const onChangeCheckbox = React.useCallback((event) => {\n        if (event.target.checked) {\n          setSelectedProducts([...selectedProducts, row.id]);\n        } else {\n          setSelectedProducts(selectedProducts.filter(id => id !== row.id));\n        }\n      }, [row.id]);\n\n      const handleProductDrawerCallback = React.useCallback((product) => {\n        setProductsToMap({\n          ...productsToMap,\n          [row.id]: product\n        });\n        if (!selectedProducts.includes(row.id)) {\n          setSelectedProducts([...selectedProducts, row.id]);\n        }\n        if (importedMissingProductIds.includes(row.id)) {\n          setImportedMissingProductIds(prev => prev.filter(id => id !== row.id));\n        }\n      }, [productsToMap, selectedProducts, importedMissingProductIds]);\n\n      const selected = selectedProducts.includes(row.id);\n\n      const getTotalColumn = () => {\n        return 7 + fieldsToMap.filter(f => f.mappingTo !== 'select' && f.mappingTo !== 'not').length; // 6 base + 1 for updateFirmProductPrice\n      };\n\n      const onClickExpand = () => {\n        onExpandChnage(row.id);\n      };\n\n      return (\n        <>\n          <TableRow>\n            {(row?.sectionCount > 0) && (\n              <TableCell className={classes.tableAICell} rowSpan={row?.sectionCount * 2} colSpan={2}>{t('pricingRequests.suggestedProducts')}</TableCell>\n            )}\n            <TableCell className={classes.tableSupplierCell}>{QuoteConnectUtil.getProductNumber(row?.Product)}</TableCell>\n            <TableCell className={classes.tableSupplierCell}>{QuoteConnectUtil.getManufacturer(row?.Product)}</TableCell>\n            <TableCell>\n              <IconButton onClick={onClickExpand}>\n                {\n                  expanded ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />\n                }\n              </IconButton>\n            </TableCell>\n            <TableCell>\n              <Checkbox disabled={!Boolean(productsToMap[row.id])} checked={selected} onChange={onChangeCheckbox} />\n            </TableCell>\n            <TableCell style={{ minWidth: '300px' }}>\n              <AC\n                quoteProductId={quoteProductId}\n                product={productsToMap[row.id]}\n                textRef={textRef}\n                onChange={onChangeAutocomplete}\n                placeholder='Product'\n                fromImportVendorPricing={true}\n                specProductId={specProductId}\n                callbackWithProduct={handleProductDrawerCallback}\n                vendorQuoteProduct={row?.Product}\n                vendorQuoteProductPrice={vendorQuoteProductPrice}\n              />\n            </TableCell>\n            {\n              fieldsToMap.map((field, index) => field.mappingTo !== 'select' && field.mappingTo !== 'not' && (\n                <TableCell key={index} className={index === 0 ? classes.firstTableCell : classes.tableCell}>{fieldsMapping?.[field.key]?.value || row[field.key]}</TableCell>\n              ))\n            }\n            <TableCell className={classes.tableCell}>\n              {Boolean(productsToMap[row.id]) && !importedMissingProductIds.includes(row.id) && (\n                <Tooltip\n                  title={QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id]) ? 'Cannot update pricing, firm product is currently linked to the ATS library.' : ''}\n                  disableHoverListener={!QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id])}\n                >\n                  <span>\n                    <Switch\n                      disabled={QuoteFormUtil.isFirmProductPriceInherited(productsToMap[row.id])}\n                      checked={!!updateFirmProductPrice[row.id]}\n                      onChange={(e) => {\n                        handleUpdateFirmProductPriceChange(row.id, e.target.checked);\n                      }}\n                      color='primary'\n                      size='small'\n                    />\n                  </span>\n                </Tooltip>\n              )}\n            </TableCell>\n          </TableRow>\n          <TableRow>\n            <TableCell colSpan={getTotalColumn()}\n                       style={{ padding: 0, ...expanded ? {} : { border: 0 } }}\n            >\n              <ExpansionPanel square={true} expanded={expanded} elevation={0}\n                              TransitionProps={{ mountOnEnter: true, unmountOnExit: true }}>\n                <span />\n                <ExpansionPanelDetails>\n                  <Grid container={true} spacing={2} justify='space-between' alignItems='flex-start'>\n                    <Grid item={true} xs={true}>\n                      <Typography variant='body1'>{t('pricingRequests.productDescription')}</Typography>\n                      <Typography variant='body2'>{row?.description}</Typography>\n                    </Grid>\n                    <Grid item={true} xs={true}>\n                      <Typography variant='body1'>{t('pricingRequests.note')}</Typography>\n                      <Typography variant='body2'>{row?.note}</Typography>\n                    </Grid>\n                  </Grid>\n                </ExpansionPanelDetails>\n              </ExpansionPanel>\n            </TableCell>\n          </TableRow>\n        </>\n      );\n  });\n\n  const handleChangeMappingField = (keyInfo, value) => {\n    let alias  = null;\n    const templateObj = template.toJS();\n    if (templateObj?.fieldsData) {\n      templateObj?.fieldsData.forEach((item) => {\n        if (item.id === value) {\n          alias = item.fieldName;\n        }\n      });\n    }\n    if (value === 'not') {\n      alias = keyInfo.alias;\n    }\n    const newFieldsToMap = fieldsToMap.map(field => {\n      if (field.key === keyInfo.key) {\n        return {\n          ...field,\n          alias,\n          mappingTo: value\n        };\n      }\n      return field;\n    });\n    setFieldsToMap(newFieldsToMap);\n  };\n\n  const MappingFieldRow = memo(({ keyInfo, onSelect, index }: { keyInfo: any; onSelect: any; index: any; }) => {\n    return (\n      <TableRow>\n        <TableCell>{keyInfo.name}</TableCell>\n        <TableCell><ArrowForwardIcon /></TableCell>\n        <TableCell>\n          <Select defaultValue={'select'}\n                  fullWidth={true}\n                  value={fieldsToMap[index].mappingTo || 'not'}\n                  onChange={(e) => {\n                    const value = e.target.value as string;\n                    handleChangeMappingField(keyInfo, value);\n                  }\n          }>\n            <MenuItem disabled={true} value='select'>{t('pricingRequests.selectField')}</MenuItem>\n            <MenuItem value='not'>{t('pricingRequests.notToImport')}</MenuItem>\n            {\n              template.get('fieldsData')\n                .filter(field => field.get('type') !== 'formula')\n                .map((field, idx) => (\n                <MenuItem key={idx} value={field.get('id')}\n                  disabled={Boolean(fieldsToMap.find(f => f.mappingTo === field.get('id')))}\n                >{field.get('name')}</MenuItem>\n              ))\n            }\n          </Select>\n        </TableCell>\n      </TableRow>\n    );\n  });\n\n  const onSelectAllCheckbox = (event) => {\n    if (event.target.checked) {\n      setSelectedProducts(_.keys(productsToMap).map(id => parseInt(id, 0)));\n    }\n    else {\n      setSelectedProducts([]);\n    }\n  };\n\n  const handleOnClickImportPricing = async () => {\n    setLoaded(false);\n    const updatedProductsToMap = { ...productsToMap };\n    const newFirmProducts = [];\n    const productKeyToResponseIds: { [key: string]: number[] } = {};\n    importedMissingProductIds.forEach(responseProductId => {\n      const newProduct = QuoteFormUtil.buildNewImportProduct(selectedVendorQuote?.BidResponseProducts, responseProductId, fieldsToMap, quoteRegionId);\n      if (newProduct) {\n        const productKey = QuoteFormUtil.getProductUniqueKey(newProduct, false);\n        if (!productKeyToResponseIds[productKey]) {\n          productKeyToResponseIds[productKey] = [];\n        }\n        productKeyToResponseIds[productKey].push(responseProductId);\n\n        if (!QuoteFormUtil.isProductDuplicate(newProduct, newFirmProducts)) {\n          newFirmProducts.push(newProduct);\n        }\n      }\n    });\n    if (newFirmProducts.length > 0) {\n      const createResults = await PimServiceApi.createBatch(env, appId, {firmProducts: newFirmProducts});\n      if (createResults?.length > 0) {\n        createResults.forEach((result) => {\n          const resultKey = QuoteFormUtil.getProductUniqueKey(result?.firmProduct, false);\n          const responseIds = productKeyToResponseIds[resultKey] || [];\n\n          const firmProductId = result?.firmProduct?.firmProductId || result?.id;\n          // Merge the full firmProduct payload from createBatch (brand, category,\n          // brandId, price, etc.) so the imported quote section product is not\n          // sparse — same fix as PT-5310 #56 for spec-to-quote package products.\n          // Without the full PIM data, Bulk Edit dialog filters these products out\n          // (id missing) and section/category metadata is lost.\n          const fullFirmProductBase = fromJS(result?.firmProduct || {})\n            .set('firmProductId', firmProductId);\n          responseIds.forEach(responseProductId => {\n            const fullFirmProduct = fullFirmProductBase.set('responseProductId', responseProductId);\n            const existingProduct = updatedProductsToMap[responseProductId];\n            if (existingProduct) {\n              const existingInner = existingProduct.get('firmProduct');\n              const mergedInner = existingInner && (existingInner as any).merge\n                ? (existingInner as any).merge(fullFirmProduct)\n                : fullFirmProduct;\n              updatedProductsToMap[responseProductId] = existingProduct.set('firmProduct', mergedInner);\n            } else {\n              updatedProductsToMap[responseProductId] = fromJS({}).set('firmProduct', fullFirmProduct);\n            }\n          });\n        });\n      }\n    }\n    let bidImportPriceSettingTemp = _.clone(bidImportPriceSetting);\n    bidImportPriceSettingTemp = bidImportPriceSettingTemp?.filter(obj => 'hasAttachQuote' in obj) || [];\n    const updateMappingFields = [];\n    fieldsToMap.forEach((field) => {\n      const setting = {\n        key: field.key,\n        alias: field.alias,\n        name: field.name,\n      };\n      if (field.mappingTo === 'not') {\n        setting.alias = '';\n      }\n      updateMappingFields.push(setting);\n    });\n    let newSetting = true;\n    const hasAttachQuote = !!selectedVendorQuote.attachedQuoteId;\n    bidImportPriceSettingTemp?.forEach((item) => {\n      if (item.templateId === template.get('id') && item?.hasAttachQuote === hasAttachQuote) {\n        item.setting = updateMappingFields;\n        item.hasAttachQuote = hasAttachQuote;\n        newSetting = false;\n      }\n    });\n    if (newSetting) {\n      const setting = {\n        templateId: template.get('id'),\n        setting: updateMappingFields,\n        hasAttachQuote: !!selectedVendorQuote.attachedQuoteId\n      };\n      bidImportPriceSettingTemp.push(setting);\n    }\n    if (mountedRef.current) { setBidImportPriceSetting(bidImportPriceSettingTemp); }\n\n    const suggestResponseProductIds = selectedVendorQuote?.BidResponseProducts\n      .filter(item => item.bidInvitationProductId === 0)\n      .map(item => item.id);\n\n    const suggestProductsMapping = [];\n    const insertSectionProducts = [];\n    const bidInvitationResponse = _.cloneDeep(selectedVendorQuote);\n    const bidResponseToQuoteProductId = {};\n    bidInvitationResponse?.BidResponseProducts?.forEach(brp => {\n      bidResponseToQuoteProductId[brp.id] = brp.BidProduct?.quoteProductId;\n    });\n    let insertSectionProductsFormData = importPricingForm?.get('insertSectionProducts');\n    if ((!insertSectionProductsFormData || insertSectionProductsFormData.length === 0) && selectedVendorQuote) {\n      const savedImportPricing = importPricingForm?.get('importPricingSectionProducts') || [];\n      // Reconstruct for current vendor\n      const reconstructedCurrentVendor = QuoteFormUtil.reconstructInsertSectionProducts(\n        savedImportPricing, selectedVendorQuote, quoteSections\n      );\n      // Build BRP→originalQuoteProductId lookup from ALL vendors' responses\n      const allBrpToOriginalQpId: { [brpId: number]: string } = {};\n      (invitationResponses || []).forEach((resp: any) => {\n        resp?.BidResponseProducts?.forEach((brp: any) => {\n          if (brp?.id && brp?.BidProduct?.quoteProductId) {\n            allBrpToOriginalQpId[brp.id] = brp.BidProduct.quoteProductId;\n          }\n        });\n      });\n      // Reconstruct INSERT entries for other vendors (for cross-vendor cleanup)\n      const reconstructedOtherVendors = QuoteFormUtil.reconstructOtherVendorsInsertSectionProducts(\n        savedImportPricing, selectedVendorQuote.id, quoteSections,\n        allVendorBidResponseProducts.length > 0 ? allVendorBidResponseProducts : selectedVendorQuote.BidResponseProducts,\n        allBrpToOriginalQpId\n      );\n      const reconstructed = [...reconstructedCurrentVendor, ...reconstructedOtherVendors];\n      if (reconstructed.length > 0) {\n        insertSectionProductsFormData = reconstructed;\n      }\n    }\n    const previousImportMap = {};\n    insertSectionProductsFormData?.forEach(item => {\n      previousImportMap[item.bidResponseId || item.get?.('bidResponseId')] = item;\n    });\n\n    quoteSections.forEach((section, sectionIndex) => {\n      const sectionId = section.get('sectionId');\n      const bidResponses = selectedVendorQuote?.BidResponseProducts?.filter(item => item?.BidProduct?.sectionId === sectionId);\n\n      if (bidResponses?.length > 0) {\n        const processedFirmProductIds = new Set();\n\n        const sourceProductInfoMap = {};\n        section.get('products')?.forEach(product => {\n          const firmProductId = product.get('firmProductId');\n          const sourceProductNote = product.get('note');\n          const sourceProductDescription = product.get('description');\n          const sourceQuoteProductId = product.get('quoteProductId');\n\n          if (sourceQuoteProductId) {\n            sourceProductInfoMap[sourceQuoteProductId] = {\n              sourceProductNote,\n              sourceProductDescription,\n            };\n          }\n\n          if (firmProductId && firmProductId !== -2 && firmProductId !== '-2') {\n            processedFirmProductIds.add(String(firmProductId));\n          }\n        });\n\n        const groupedByOriginal: Record<string, typeof bidResponses> = {};\n        bidResponses.forEach(bidResponse => {\n          if (!selectedProducts.includes(bidResponse?.id)) { return; }\n          if (!updatedProductsToMap[bidResponse?.id]) { return; }\n\n          const originalQuoteProductId = bidResponse?.BidProduct?.quoteProductId;\n          if (originalQuoteProductId) {\n            if (!groupedByOriginal[originalQuoteProductId]) {\n              groupedByOriginal[originalQuoteProductId] = [];\n            }\n            groupedByOriginal[originalQuoteProductId].push(bidResponse);\n          }\n        });\n\n        const operations = [];\n        Object.entries(groupedByOriginal).forEach(([originalQuoteProductId, responses]) => {\n          responses.forEach((bidResponse, index) => {\n            const previousImport = previousImportMap[bidResponse?.id];\n            let isInsertAction = index > 0;\n            let newProductUuid = null;\n\n            if (index === 0) {\n              // First in group: ALWAYS replace the original row\n              isInsertAction = false;\n              newProductUuid = null;\n            } else if (previousImport && previousImport.newProductUuid) {\n              // Re-import of non-first item: verify the row still exists before reusing UUID\n              const rowStillExists = quoteSections.some(sec =>\n                sec.get('products')?.some(p => p.get('quoteProductId') === previousImport.newProductUuid)\n              );\n              if (rowStillExists) {\n                newProductUuid = previousImport.newProductUuid;\n                isInsertAction = false;\n              } else {\n                // Row was removed (e.g. deselected in previous import then saved), treat as new INSERT\n                newProductUuid = uuid();\n              }\n            } else if (isInsertAction) {\n              // First-time INSERT of non-first item\n              newProductUuid = uuid();\n            }\n\n            operations.push({\n              bidResponse,\n              originalQuoteProductId,\n              isInsertAction,\n              newProductUuid,\n            });\n          });\n        });\n\n        operations.sort((a, b) => {\n          const aIsInsert = a.isInsertAction ? 1 : 0;\n          const bIsInsert = b.isInsertAction ? 1 : 0;\n          return aIsInsert - bIsInsert;\n        });\n\n        const insertCountPerBase = {};\n        operations.forEach(op => {\n          if (op.isInsertAction) {\n            const baseIndex = section.get('products')?.findIndex(\n              item => item.get('quoteProductId') === op.originalQuoteProductId\n            );\n            let insertAfterIndex = baseIndex;\n\n            const targetProduct = section.get('products')?.get(baseIndex);\n            const targetUniquePackageId = targetProduct?.get('uniquePackageId');\n            if (targetUniquePackageId) {\n              let maxPackageIndex = -1;\n              section.get('products')?.forEach((item, idx) => {\n                if (item.get('uniquePackageId') === targetUniquePackageId && idx > maxPackageIndex) {\n                  maxPackageIndex = idx;\n                }\n              });\n              insertAfterIndex = maxPackageIndex;\n            }\n\n            if (!insertCountPerBase[insertAfterIndex]) {\n              insertCountPerBase[insertAfterIndex] = 0;\n            }\n            insertCountPerBase[insertAfterIndex] += 1;\n          }\n        });\n\n        const insertCountByBaseIndex = {};\n\n        operations.forEach(({ bidResponse, originalQuoteProductId, isInsertAction, newProductUuid }) => {\n          let productToMapFirmProductId = updatedProductsToMap[bidResponse?.id]?.getIn(['firmProduct', 'firmProductId']);\n          if (!productToMapFirmProductId) {\n            productToMapFirmProductId = updatedProductsToMap[bidResponse?.id]?.get('firmProductId');\n          }\n          const firmProductIdStr = String(productToMapFirmProductId);\n\n          if (productToMapFirmProductId) {\n\n            let newProduct;\n            if (updatedProductsToMap[bidResponse?.id]?.get('firmProduct')) {\n              newProduct = updatedProductsToMap[bidResponse?.id]\n                .setIn(['firmProduct', 'quoteProductId'], newProductUuid || originalQuoteProductId)\n                .set('quoteProductId', newProductUuid || originalQuoteProductId);\n            } else {\n              newProduct = updatedProductsToMap[bidResponse?.id].set(\n                'quoteProductId',\n                newProductUuid || originalQuoteProductId\n              );\n            }\n\n            const baseIndex = section.get('products')?.findIndex(\n              item => item.get('quoteProductId') === originalQuoteProductId\n            );\n\n            let newIndex;\n            let insertAfterIndex = baseIndex;\n\n            if (baseIndex !== -1) {\n              if (isInsertAction) {\n                const targetProduct = section.get('products')?.get(baseIndex);\n                const targetUniquePackageId = targetProduct?.get('uniquePackageId');\n\n                if (targetUniquePackageId) {\n                  let maxPackageIndex = -1;\n                  section.get('products')?.forEach((item, idx) => {\n                    if (item.get('uniquePackageId') === targetUniquePackageId && idx > maxPackageIndex) {\n                      maxPackageIndex = idx;\n                    }\n                  });\n                  insertAfterIndex = maxPackageIndex;\n                }\n\n                let offsetFromLowerInserts = 0;\n                Object.entries(insertCountByBaseIndex).forEach(([idx, count]) => {\n                  if (Number(idx) < insertAfterIndex) {\n                    offsetFromLowerInserts += Number(count);\n                  }\n                });\n\n                if (!insertCountByBaseIndex[insertAfterIndex]) {\n                  insertCountByBaseIndex[insertAfterIndex] = 0;\n                }\n\n                newIndex = insertAfterIndex + insertCountByBaseIndex[insertAfterIndex] + offsetFromLowerInserts + 1;\n                insertCountByBaseIndex[insertAfterIndex] += 1;\n\n              } else {\n                let offsetFromLowerInserts = 0;\n                Object.entries(insertCountPerBase).forEach(([idx, count]) => {\n                  if (Number(idx) < baseIndex) {\n                    offsetFromLowerInserts += Number(count);\n                  }\n                });\n                newIndex = baseIndex + offsetFromLowerInserts;\n              }\n            } else {\n              newIndex = section.get('products').size;\n            }\n\n            const sourceProductInfo = sourceProductInfoMap[originalQuoteProductId] || {};\n\n            insertSectionProducts.push({\n              bidResponseId: bidResponse?.id,\n              sectionId: section.get('sectionId'),\n              newProductUuid,\n              isInsertAction,\n              originalQuoteProductId,\n              sourceProductNote: sourceProductInfo.sourceProductNote,\n              sourceProductDescription: sourceProductInfo.sourceProductDescription,\n              updateFirmProductPrice: !!updateFirmProductPrice[bidResponse?.id],\n              payload: {\n                section: sectionIndex,\n                row: newIndex,\n                product: isInsertAction ? newProduct.set('isRequestingProduct', false) : newProduct,\n              }\n            });\n\n            if (!isInsertAction) {\n              processedFirmProductIds.add(firmProductIdStr);\n            }\n            const product = bidInvitationResponse.BidResponseProducts.find(p => p.id === bidResponse?.id);\n            if (product?.BidProduct) {\n              product.BidProduct.quoteProductId = newProductUuid || originalQuoteProductId;\n            }\n          }\n        });\n      }\n    });\n    suggestResponseProductIds.forEach(id => {\n      const brp = bidInvitationResponse?.BidResponseProducts?.find(p => p.id === id);\n    });\n\n    Object.keys(updatedProductsToMap).forEach(key => {\n      if (suggestResponseProductIds.includes(Number(key)) && selectedProducts.includes(Number(key))) {\n        const existingQuoteProductId = bidResponseToQuoteProductId[Number(key)];\n\n        let suggestProduct = updatedProductsToMap[key]\n          .set('bidResponseId', Number(key))\n          .set('quoteProductId', existingQuoteProductId);\n\n        if (suggestProduct.get('firmProduct') && existingQuoteProductId) {\n          suggestProduct = suggestProduct.setIn(['firmProduct', 'quoteProductId'], existingQuoteProductId);\n        }\n        suggestProductsMapping.push(suggestProduct);\n      }\n    });\n    if (mountedRef.current) { setProductsToMap(updatedProductsToMap); }\n    await AccountServiceApi.savePreference(env, appId, 'bidImportPrice', bidImportPriceSettingTemp);\n    dispatch(new ImportPricingFromVendorQuoteAction({\n      fieldsToMap,\n      productsToMap: updatedProductsToMap,\n      selectedProducts,\n      bidInvitationResponse,\n      suggestProductsMapping,\n      insertSectionProducts,\n      previousInsertSectionProducts: insertSectionProductsFormData || [],\n      allVendorBidResponseProductIds\n    }));\n    handleCloseModal(true);\n  };\n\n  const onClickFinalCheck = (event, checked) => {\n    setFinalCheck(checked);\n  };\n\n  const handleCloseModal = (imported?: boolean) => {\n    if (linkBidResponseId) {\n      dispatch(new SetLinkBidResponseQuoteAction({\n        status: 'close',\n        linkBidInvitationResponseId: linkBidResponseId,\n        sourceQuoteId: quoteId\n      }));\n    }\n    onClose(imported);\n  };\n\n  const handleClickAttachmentFile = async (attachmentId) => {\n    const fileUrl = await BidInvitationUtil.getDownloadFile(atsApi, attachmentId);\n    return fileUrl;\n  };\n\n  return (\n    <Dialog\n      open={open}\n      onClose={(_event, reason) => {\n        if (isProductDrawerOpen && reason === 'backdropClick') { return; }\n        handleCloseModal();\n      }}\n      maxWidth='xl'\n      fullWidth={true}\n      disableEnforceFocus={true}\n      disablePortal={isProductDrawerOpen}\n      BackdropProps={isProductDrawerOpen ? { invisible: true } : undefined}\n    >\n      <DialogTitle disableTypography={true}>\n        <Grid container={true} justify='space-between' alignItems='center'>\n          <Typography variant='h5' align='center'>\n            {t('pricingRequests.importPricingVendorQuotation')}\n          </Typography>\n          <IconButton aria-label='close' onClick={() => handleCloseModal()}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n      </DialogTitle>\n      {(!loaded) &&\n        <DialogContent>\n          <Loading/>\n        </DialogContent>\n      }\n      {(loaded) &&\n        <>\n          <DialogContent>\n            {(!loadMappingReady) &&\n              <DialogContent>\n                <Loading/>\n              </DialogContent>\n            }\n            {(loadMappingReady) &&\n              <Stepper activeStep={step} orientation='vertical'>\n                <Step>\n                  <StepLabel>{t('pricingRequests.mapVendorQuotationTemplate')}</StepLabel>\n                  <StepContent>\n                    <TableContainer style={{ maxWidth: 600 }}>\n                      <Table style={{ border: '1px solid #C4C4C4', borderRadius: '8px', borderCollapse: 'unset' }}>\n                        <TableHead>\n                          <TableRow>\n                            <TableCell>{t('pricingRequests.vendorQuotationTemplateField')}</TableCell>\n                            <TableCell />\n                            <TableCell>{t('pricingRequests.myQuotationTemplateField')}</TableCell>\n                          </TableRow>\n                        </TableHead>\n                        <TableBody>\n                          {\n                            fieldsToMap.map((keyInfo, index) => (\n                              <MappingFieldRow key={index} index={index} keyInfo={keyInfo} onSelect={() => null} />\n                            ))\n                          }\n                        </TableBody>\n                      </Table>\n                    </TableContainer>\n                    <Button onClick={() => handleCloseModal()} color='primary'>\n                      {t('formButtons.cancel')}\n                    </Button>\n                    <Button disabled={Boolean(fieldsToMap.find(field => field.mappingTo === 'select')) || Boolean(fieldsToMap.every(field => field.mappingTo === 'not'))} onClick={() => setStep(1)} color='primary'>\n                      {t('formButtons.next')}\n                    </Button>\n                  </StepContent>\n                </Step>\n                <Step>\n                  <StepLabel>\n                    <Box display='flex' justifyContent='space-between' alignItems='center' width='100%' flexWrap='wrap' style={{ rowGap: 8 }}>\n                      <span>{t('pricingRequests.selectProductImportPricing')}</span>\n                      {(step === 1 && hasUnmappedProducts) &&\n                        <Button variant='outlined' color='primary' onClick={handleOpenAddMissingProductModal}>\n                          {t('pricingRequests.addMissingProductToFirmLibrary')}\n                        </Button>\n                      }\n                    </Box>\n                  </StepLabel>\n                  <StepContent>\n                    <TableContainer style={{ maxHeight: 660 }}>\n                      <Table style={{ border: '1px solid #C4C4C4', borderRadius: '8px', borderCollapse: 'unset' }}>\n                        <TableHead>\n                          <TableRow>\n                            <TableCell className={classes.tableAICell}>{t('autoQuotationBidDetail.tagColumn')}</TableCell>\n                            <TableCell className={classes.tableAICell}>{t('pricingRequests.pricingRequestProduct')}</TableCell>\n                            <TableCell className={classes.tableSupplierCell}>{t('autoQuotationBidDetail.supplierProductNumber')}</TableCell>\n                            <TableCell className={classes.tableSupplierCell}>{t('autoQuotationBidDetail.supplierProductManufacturer')}</TableCell>\n                            <TableCell>\n                              <IconButton onClick={handleOnExpandAll}>\n                                {allRowsExpanded ? <UnfoldLessIcon /> : <UnfoldMoreIcon />}\n                              </IconButton>\n                            </TableCell>\n                            <TableCell>\n                              <Checkbox disabled={_.isEmpty(productsToMap)} checked={selectedProducts?.length !== 0 && selectedProducts?.length === _.size(productsToMap)} onChange={onSelectAllCheckbox} />\n                            </TableCell>\n                            <TableCell style={{ minWidth: '300px' }}>{t('pricingRequests.firmProductNumber')}</TableCell>\n                            {\n                              fieldsToMap.map((field, index) => field.mappingTo !== 'select' && field.mappingTo !== 'not' && (\n                                <TableCell key={index} className={index === 0 ? classes.firstTableCell : classes.tableCell}>{field.name}</TableCell>\n                              ))\n                            }\n                            <TableCell className={classes.tableCell}>{t('pricingRequests.updateFirmProductPrice')}</TableCell>\n                            {(!selectedVendorQuote?.attachedQuoteId) &&\n                              <TableCell className={classes.tableCell}>{t('pricingRequests.attachment')}</TableCell>\n                            }\n                          </TableRow>\n                        </TableHead>\n                        <TableBody>\n                          {selectedVendorQuote?.BidResponseProducts?.filter(row => row.bidInvitationProductId !== 0)\n                            .map((row, index) => (\n                              <ProductRow\n                                key={'productRow-' + index}\n                                row={row}\n                                attachedQuoteId={selectedVendorQuote?.attachedQuoteId}\n                                expanded={expandedRows.includes(row.id)}\n                                onExpandChnage={handleOnExpand}\n                              />\n                            ))\n                          }\n                          {selectedVendorQuote?.BidResponseProducts?.filter(row => row.bidInvitationProductId === 0)\n                            .map((row, index) => (\n                              <ExtraSectionProductRow\n                                key={'extraProductRow-' + index}\n                                row={row}\n                                expanded={expandedRows.includes(row.id)}\n                                onExpandChnage={handleOnExpand}\n                              />\n                            ))\n                          }\n                        </TableBody>\n                      </Table>\n                    </TableContainer>\n                    <Grid container={true} className={classes.attachFileTitleContainer} justify='flex-start' spacing={2}>\n                      <Grid item={true} className={classes.attachTitleRow}>\n                        <Typography variant={'body2'}>\n                          {t('pricingRequests.attachments')}\n                        </Typography>\n                        <IconButton aria-label='attachments' size='small'>\n                          <AttachFileIcon />\n                        </IconButton>\n                      </Grid>\n                    </Grid>\n                    {(selectedVendorQuote?.attachedQuoteId) &&\n                      <Grid className={classes.attachFilesContainer} container={true} justify='space-between'>\n                        <>\n                          {\n                            selectedVendorQuote?.BidInvitationResponseAttachments\n                              .filter((attachment) => {\n                                return (attachment.type === AttachmentReplyEmailType || attachment.type === AttachmentPdfQuotation);\n                              })\n                              .map((attachment) => (\n                                <React.Fragment key={'attachment-' + attachment.id}>\n                                  <Grid item={true} xs={6} className={classes.attachDownloadFileRow}>\n                                    <Link onClick={async () => {\n                                      const url = await handleClickAttachmentFile(attachment.attachmentId);\n                                      window.open(url, '_blank');\n                                    }}\n                                    >\n                                      <div className={classes.iconAndTextContainer}>\n                                        <IconButton aria-label='attachments' color='primary' className='attachmentIcon' size='small'>\n                                          <DescriptionOutlinedIcon/>\n                                        </IconButton>\n                                        <Typography variant='subtitle1' color='textPrimary' className={classes.attachmentLabel}>\n                                          {attachment?.FileUpload?.FileUploadMetas?.[0]?.origFileName}\n                                        </Typography>\n                                      </div>\n                                    </Link>\n                                  </Grid>\n                                </React.Fragment>\n                              ))\n                          }\n                        </>\n                      </Grid>\n                    }\n                    <Grid container={true} direction='column' justify='space-between'>\n                      <FormControlLabel\n                        disabled={selectedProducts.length === 0}\n                        control={<Checkbox checked={finalCheck} onChange={onClickFinalCheck} />}\n                        label={t('pricingRequests.productMapSuccess')}\n                      />\n                      <Grid>\n                        <Button onClick={() => handleCloseModal()} color='primary'>\n                          {t('formButtons.cancel')}\n                        </Button>\n                        <Button onClick={() => setStep(0)} color='primary'>\n                          {t('formButtons.back')}\n                        </Button>\n                        <Button disabled={!finalCheck || selectedProducts.length === 0} onClick={() => {\n                          const hasUpdatePrice = selectedProducts.some(id => updateFirmProductPrice[id]);\n                          if (hasUpdatePrice) {\n                            handleOpenConfirmUpdate();\n                          } else {\n                            handleOnClickImportPricing();\n                          }\n                        }} color='primary' variant='contained'>\n                          {selectedProducts.some(id => updateFirmProductPrice[id]) ? t('pricingRequests.importPricingAction') : t('pricingRequests.importLabel')}\n                        </Button>\n                      </Grid>\n                    </Grid>\n                  </StepContent>\n                </Step>\n              </Stepper>\n            }\n          </DialogContent>\n\n          <Dialog open={addMissingProductModalOpen} onClose={() => setAddMissingProductModalOpen(false)} maxWidth='sm' fullWidth={true}>\n            <DialogTitle>\n              <Box display='flex' justifyContent='space-between' alignItems='center'>\n                <Typography>{t('pricingRequests.confirmAddMissingProducts')}</Typography>\n                <IconButton onClick={() => setAddMissingProductModalOpen(false)} size='small'>\n                  <CloseIcon />\n                </IconButton>\n              </Box>\n            </DialogTitle>\n            <DialogContent>\n              {unmappedProducts.map((responseProduct, index) => {\n                const isDisabled = !QuoteFormUtil.isProductImportable(responseProduct, manufacturers, categories);\n                return (\n                  <Box key={index} display='flex' alignItems='center' py={1} className={isDisabled ? classes.disabledProductRow : ''}>\n                    <Checkbox\n                      checked={selectedMissingProducts.includes(responseProduct.id)}\n                      disabled={isDisabled}\n                      onChange={(e) => {\n                        if (e.target.checked) {\n                          setSelectedMissingProducts([...selectedMissingProducts, responseProduct.id]);\n                        } else {\n                          setSelectedMissingProducts(selectedMissingProducts.filter(id => id !== responseProduct.id));\n                        }\n                      }}\n                    />\n                    <Box ml={2} display='flex'>\n                      <Typography className={isDisabled ? classes.disabledProductText : classes.enabledProductText}>\n                        {responseProduct.Product.firmProductProductNumber || responseProduct.Product.productProductNumber}\n                      </Typography>\n                    </Box>\n                  </Box>\n                );\n              })}\n            </DialogContent>\n            <DialogActions>\n              <Button onClick={() => setAddMissingProductModalOpen(false)} color='primary'>\n                {t('formButtons.cancel')}\n              </Button>\n              <Button\n                onClick={importNewProducts}\n                color='primary'\n                variant='contained'\n                disabled={!unmappedProducts.some(p => QuoteFormUtil.isProductImportable(p, manufacturers, categories))}\n              >\n                {t('formButtons.confirm')}\n              </Button>\n            </DialogActions>\n          </Dialog>\n        </>\n      }\n      <Dialog open={updatePriceConfirmOpen} onClose={() => setUpdatePriceConfirmOpen(false)} maxWidth='md' fullWidth={true}>\n        <DialogTitle>\n          <Box display='flex' justifyContent='space-between' alignItems='center'>\n            <Typography>{t('pricingRequests.updateFirmProductPriceConfirmTitle')}</Typography>\n            <IconButton onClick={() => setUpdatePriceConfirmOpen(false)} size='small'>\n              <CloseIcon />\n            </IconButton>\n          </Box>\n        </DialogTitle>\n        <DialogContent>\n          {fetchingPrices ? (\n            <Box display='flex' justifyContent='center' alignItems='center' py={4}>\n              <CircularProgress />\n            </Box>\n          ) : (\n            <Table style={{ border: '1px solid #C4C4C4', borderRadius: '8px', borderCollapse: 'unset' }}>\n              <TableHead>\n                <TableRow>\n                  <TableCell>{t('pricingRequests.firmProductNumber')}</TableCell>\n                  {getMappedPriceFields().map(field => {\n                    const originalKeyMap = { list: 'originalListPrice', sell: 'originalSellPrice', cost: 'originalCostPrice' };\n                    const updatedKeyMap = { list: 'updatedListPrice', sell: 'updatedSellPrice', cost: 'updatedCostPrice' };\n                    return (\n                      <React.Fragment key={field.priceKey}>\n                        <TableCell>{t(`pricingRequests.${originalKeyMap[field.priceKey]}`)}</TableCell>\n                        <TableCell>{t(`pricingRequests.${updatedKeyMap[field.priceKey]}`)}</TableCell>\n                      </React.Fragment>\n                    );\n                  })}\n                </TableRow>\n              </TableHead>\n              <TableBody>\n                {getUpdatePriceConfirmData().map((item, index) => (\n                  <TableRow key={index}>\n                    <TableCell>{item.firmProductNumber}</TableCell>\n                    {getMappedPriceFields().map(field => (\n                      <React.Fragment key={field.priceKey}>\n                        <TableCell>{item.originalPrices[field.priceKey] ?? '-'}</TableCell>\n                        <TableCell>{item.updatedPrices[field.priceKey] ?? '-'}</TableCell>\n                      </React.Fragment>\n                    ))}\n                  </TableRow>\n                ))}\n              </TableBody>\n            </Table>\n          )}\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={() => setUpdatePriceConfirmOpen(false)} color='primary'>\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            onClick={() => { setUpdatePriceConfirmOpen(false); handleConfirmUpdate(); }}\n            color='primary'\n            variant='contained'\n            disabled={fetchingPrices}\n            style={{ backgroundColor: fetchingPrices ? undefined : '#E67E22', color: '#fff' }}\n          >\n            {t('pricingRequests.confirmUpdate')}\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </Dialog>\n  );\n};\n\nexport default memo(ImportPricingStepper);\n","import React, { useState, memo, useEffect, useCallback } from 'react';\nimport {\n  Button,\n  DialogActions,\n  DialogContent,\n  Typography,\n  DialogTitle,\n  IconButton,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TableRow,\n  MenuItem,\n  Grid,\n  Avatar,\n  Menu,\n  Dialog,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport { useTranslation } from 'react-i18next';\n\nimport BidInvitationServiceApi from '../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectEnv, makeSelectAppId } from '../../modules/AtsModule/selectors';\nimport { quoteFormSelector } from '../../modules/QuoteEditModule/selectors';\nimport moment from 'moment';\nimport { SetLinkBidResponseQuoteAction } from '../../modules/QuoteModule/actions';\nimport Loading from '../Loading';\nimport ImportPricingServiceApi from '../../modules/QuoteConnectService/ImportPricingServiceApi';\nimport ImportPricingStepper from './ImportPricingStepper';\n\nconst VendorQuotationsModalContentView = ({ linkBidResponseId, onClose }) => {\n  const dispatch = useDispatch();\n  const [loaded, setLoaded] = useState(false);\n  const [res, SetRes] = useState([]);\n  const [selectedVendorQuoteId, setSelectedVendorQuoteId] = useState(-1);\n  const [anchorEl, setAnchorEl] = useState(null);\n  const [alertOpen, setAlertOpen] = useState(false);\n  const [importStepperOpen, setImportStepperOpen] = useState(false);\n  const [importBidResponseId, setImportBidResponseId] = useState(0);\n  const [initLinkBidResponseId] = useState(linkBidResponseId);\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const { t } = useTranslation('translations');\n  const quoteId = useSelector(quoteFormSelector(['id']));\n\n  const getInit = useCallback(async () => {\n    if (initLinkBidResponseId) {\n      setImportBidResponseId(initLinkBidResponseId);\n      setImportStepperOpen(true);\n    } else {\n      const filters = {\n        quoteId,\n        status: ['submitted'],\n        limit: 100\n      };\n      const invitationResponseResult = await BidInvitationServiceApi.fetchAllInvitationResponse(env, appId, filters);\n      const filteredInvitationResponseResult = invitationResponseResult?.filter((item) =>\n        item.BidInvitation.quoteId === quoteId &&\n        item.status === 'submitted'\n      );\n      const importPricingResults = await ImportPricingServiceApi.findAllByQuote(env, appId, quoteId);\n      const bidInvResponseIds = [];\n      if (importPricingResults?.length > 0) {\n        importPricingResults.forEach(result => {\n          bidInvResponseIds.push(result.bidInvResponseId);\n        });\n      }\n      filteredInvitationResponseResult?.forEach(item => {\n        if (bidInvResponseIds.includes(item.id)) {\n          item.showImportPricing = true;\n        } else {\n          item.showImportPricing = false;\n        }\n      });\n      SetRes(filteredInvitationResponseResult);\n    }\n    setLoaded(true);\n  }, [env, appId, quoteId]);\n\n  useEffect(() => {\n    getInit();\n  }, []);\n\n  const handleCloseMenu = () => {\n    setAnchorEl(null);\n    setSelectedVendorQuoteId(-1);\n  };\n\n  const onClickAction = (id) => (event) => {\n    setSelectedVendorQuoteId(id);\n    setAnchorEl(event.currentTarget);\n  };\n\n  const onClickImportPricing = () => {\n    setImportBidResponseId(selectedVendorQuoteId);\n    setImportStepperOpen(true);\n    setAnchorEl(null);\n  };\n\n  const onClickDeleteQuote = async () => {\n    setAlertOpen(true);\n    setAnchorEl(null);\n  };\n\n  const handleDeleteVendorQuote = async () => {\n    if (selectedVendorQuoteId !== -1) {\n      await BidInvitationServiceApi.delete(env, appId, selectedVendorQuoteId);\n      getInit();\n    }\n    setAlertOpen(false);\n  };\n\n  const handleCloseModal = () => {\n    if (initLinkBidResponseId) {\n      dispatch(new SetLinkBidResponseQuoteAction({\n        status: 'close',\n        linkBidInvitationResponseId: linkBidResponseId,\n        sourceQuoteId: quoteId\n      }));\n    }\n    onClose();\n  };\n\n  const handleCloseImportStepper = (imported?: boolean) => {\n    setImportStepperOpen(false);\n    setImportBidResponseId(0);\n    if (initLinkBidResponseId) {\n      handleCloseModal();\n    } else if (imported) {\n      onClose();\n    }\n  };\n\n  if (initLinkBidResponseId) {\n    return (\n      <ImportPricingStepper\n        bidResponseId={importBidResponseId}\n        open={importStepperOpen}\n        onClose={handleCloseImportStepper}\n        linkBidResponseId={linkBidResponseId}\n      />\n    );\n  }\n\n  return (\n    <>\n      <DialogTitle disableTypography={true}>\n        <Grid container={true} justify='space-between' alignItems='center'>\n          <Typography variant='h5' align='center'>\n            {t('pricingRequests.receivedVendorQuotation')}\n          </Typography>\n          <IconButton aria-label='close' onClick={handleCloseModal}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n      </DialogTitle>\n      {(!loaded) &&\n        <DialogContent>\n          <Loading/>\n        </DialogContent>\n      }\n      {(loaded) &&\n        <>\n          <DialogContent>\n            <TableContainer>\n              <Table>\n                <TableHead>\n                  <TableRow>\n                    <TableCell />\n                    <TableCell />\n                    <TableCell>{t('autoQuotationBidDetail.fromEmail')}</TableCell>\n                    <TableCell>{t('autoQuotationBidDetail.repEmail')}</TableCell>\n                    <TableCell>{t('pricingRequests.vendorQuoteNumber')}</TableCell>\n                    <TableCell>{t('pricingRequests.dateRequested')}</TableCell>\n                    <TableCell>{t('autoQuotationBidDetail.receivedDate')}</TableCell>\n                    <TableCell>{t('formButtons.actions')}</TableCell>\n                  </TableRow>\n                </TableHead>\n                <TableBody>\n                  {\n                    res.map((row, index) => (\n                      <TableRow key={index}>\n                        <TableCell>\n                          {(row.showImportPricing) &&\n                            <CheckCircleIcon color='secondary'/>\n                          }\n                          {(!row.showImportPricing) &&\n                            <></>\n                          }\n                        </TableCell>\n                        <TableCell>\n                          <Avatar src={row?.Contact?.logo}>{getInitialsFromEmail(row?.Contact?.email)}</Avatar>\n                        </TableCell>\n                        <TableCell>{row?.Contact?.email || '-'}</TableCell>\n                        <TableCell>{row?.BidInvitation?.User?.email || '-'}</TableCell>\n                        <TableCell>{row?.id ? `BI-${row?.id}` : '-'}</TableCell>\n                        <TableCell>{row?.createdAt ? moment(row?.createdAt).format('YYYY-MM-DD') : '-'}</TableCell>\n                        <TableCell>{row?.updatedAt ? moment(row?.updatedAt).format('YYYY-MM-DD') : '-'}</TableCell>\n                        <TableCell>\n                          <Button onClick={onClickAction(row?.id)} color='primary'>\n                            {t('autoQuotationBidDetail.actionUpcaseLabel')}\n                          </Button>\n                        </TableCell>\n                      </TableRow>\n                    ))\n                  }\n                </TableBody>\n              </Table>\n            </TableContainer>\n          </DialogContent>\n          <Menu\n            anchorEl={anchorEl}\n            open={Boolean(anchorEl)}\n            onClose={handleCloseMenu}\n          >\n            <MenuItem onClick={onClickImportPricing}>{t('pricingRequests.importPricingAction')}</MenuItem>\n            <MenuItem onClick={onClickDeleteQuote}>{t('quoteMenu.delete')}</MenuItem>\n          </Menu>\n          <Dialog open={alertOpen} onClose={() => setAlertOpen(false)} disableBackdropClick={true}>\n            <DialogContent>\n              {t('pricingRequests.confirmDeleteVendorQuote')}?\n            </DialogContent>\n            <DialogActions>\n              <Button onClick={() => setAlertOpen(false)} color='primary'>\n                {t('formButtons.cancel')}\n              </Button>\n              <Button onClick={handleDeleteVendorQuote} color='primary'>\n                {t('formButtons.delete')}\n              </Button>\n            </DialogActions>\n          </Dialog>\n        </>\n      }\n      <ImportPricingStepper\n        bidResponseId={importBidResponseId}\n        open={importStepperOpen}\n        onClose={handleCloseImportStepper}\n        linkBidResponseId={linkBidResponseId}\n      />\n    </>\n  );\n};\n\nexport default memo(VendorQuotationsModalContentView);\n\nfunction getInitialsFromEmail(email) {\n  if (!email) {\n    return '';\n  }\n\n  const parts = email.split('@')[0].split(/[._+-]/);\n  let initials = '';\n\n  for (const part of parts) {\n    if (part.length > 0) {\n      initials += part[0].toUpperCase();\n    }\n  }\n\n  return initials;\n}\n","import React from 'react';\nimport {Button, Checkbox, Chip, CircularProgress, Dialog, DialogContent, Divider, FormControlLabel, FormHelperText, Grid, IconButton, Radio, Step, StepConnector, StepContent, StepLabel, Stepper, TextField, Tooltip, Typography} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles, useTheme} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport CloseIcon from '@material-ui/icons/Close';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { makeSelectHasIsRequestingProduct } from '../../../modules/QuoteModule/selectors';\nimport { Autocomplete } from '@material-ui/lab';\nimport { VirtualizedList } from '../../../pages/FirmDetailPage/OfficesInfo/BrandTags/VirtualizedList';\nimport { fromJS, Set as ImmuSet, List, OrderedMap } from 'immutable';\nimport classnames from 'classnames';\nimport { IMap } from 'ats-utils/src';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { BulkEditSelectedProductsAction } from '../../../modules/QuoteEditModule/actions';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\n\nconst SELECT_ALL_SECTION_OPTION = {\n  value: '- Select All -',\n  sectionId: null,\n  sectionIndex: -1,\n  isSelectAll: true,\n};\n\nconst enum BULK_EDIT_FILTER_TYPE {\n  SECTIONS = 'sections',\n  BRANDS_AND_CATEGORIES = 'brandsAndCategories',\n  PRODUCTS = 'products',\n}\n\nexport const enum COLUMN_ACTIONS {\n  REPLACE = 'replace',\n  ADD = 'add',\n  CLEAR = 'clear',\n}\n\nconst columnActions = [COLUMN_ACTIONS.REPLACE, COLUMN_ACTIONS.ADD, COLUMN_ACTIONS.CLEAR];\n\ninterface IColumnRow {\n  columnName: string;\n  columnAction: COLUMN_ACTIONS;\n  value: string;\n  error?: boolean;\n  touched?: boolean;\n}\n\nconst DEFAULT_NEW_ROW: IMap<IColumnRow> = fromJS({\n  error: false,\n  touched: false,\n  columnName: '',\n  columnAction: COLUMN_ACTIONS.REPLACE,\n  value: '',\n});\n\ninterface IBulkEditDialogProps {\n  open: boolean;\n  onClose: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    width: 1035,\n    maxWidth: '100%',\n    paddingBottom: 12,\n  },\n  filterContainer: {\n    border: `1px solid ${theme.palette.grey[400]}`,\n    borderRadius: 8,\n    marginBottom: theme.spacing(2),\n  },\n  filterChildContainer: {\n    padding: theme.spacing(1, 2),\n  },\n  step0Autocomplete: {\n    marginBottom: theme.spacing(1),\n  },\n  chip: {\n    margin: 2,\n  },\n  chipContainer: {\n    maxHeight: 108,\n    overflowY: 'auto',\n  },\n  divider: {\n    backgroundColor: theme.palette.grey[400],\n    width: '100%',\n  },\n  errorText: {\n    position: 'absolute',\n    left: 0,\n    bottom: -16,\n  },\n}));\n\nconst BulkEditDialog: React.FC<IBulkEditDialogProps> = ({\n  open,\n  onClose\n}) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const sections = useSelector(quoteFormSelector(['sections']));\n  const hasRawPreSelectedProducts = useSelector(makeSelectHasIsRequestingProduct());\n\n  const [activeStep, setActiveStep] = React.useState(0);\n  const [minStep0, setMinStep0] = React.useState(false);\n  const [selectedFilter, setSelectedFilter] = React.useState(BULK_EDIT_FILTER_TYPE.SECTIONS);\n  const [selectedSections, setSelectedSections] = React.useState(OrderedMap<number, IMap<any>>());\n  const [selectedBrands, setSelectedBrands] = React.useState(OrderedMap<number, IMap<any>>());\n  const [selectedCategories, setSelectedCategories] = React.useState(OrderedMap<number, IMap<any>>());\n  const [selectedProducts, setSelectedProducts] = React.useState(OrderedMap<string, IMap<any>>());\n\n  const [sectionInputValue, setSectionInputValue] = React.useState('');\n  const [brandInputValue, setBrandInputValue] = React.useState('');\n  const [categoryInputValue, setCategoryInputValue] = React.useState('');\n  const [productNumberInputValue, setProductNumberInputValue] = React.useState('');\n\n  const [sectionList, setSectionList] = React.useState(fromJS([]));\n  const [brandList, setBrandList] = React.useState(fromJS([]));\n  const [categoryList, setCategoryList] = React.useState(fromJS([]));\n  const [productNumberList, setProductNumberList] = React.useState(fromJS([]));\n\n  const [noProductsError, setNoProductsError] = React.useState(false);\n\n  const selectedQuoteProductIdsBaseOnFilterMapRef = React.useRef(fromJS({}));\n  const availableTemplateColumnsRef = React.useRef(fromJS([]));\n  const [columnsToEdit, setColumnsToEdit] = React.useState(fromJS([DEFAULT_NEW_ROW]));\n\n  const [isProcessingBulkEdit, setIsProcessingBulkEdit] = React.useState(false);\n\n  const disabledNextButton = React.useMemo(() => {\n    switch (selectedFilter) {\n      case BULK_EDIT_FILTER_TYPE.SECTIONS:\n        return selectedSections.size === 0;\n      case BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES:\n        return selectedBrands.size === 0 && selectedCategories.size === 0;\n      case BULK_EDIT_FILTER_TYPE.PRODUCTS:\n        return selectedProducts.size === 0;\n      default:\n        return true;\n    }\n  }, [selectedFilter, selectedSections, selectedBrands, selectedCategories, selectedProducts]);\n\n  const getAllLists = () => {\n    let newSectionList = List();\n    let newBrandList = List();\n    let newCategoryList = List();\n    let newProductNumberList = List();\n\n    let brandMap = fromJS({});\n    let categoryMap = fromJS({});\n    let productNumberMap = fromJS({});\n\n    let preSelectedProductIndexes = List();\n    let currentUniquePackageIdProductToAdd = -1;\n\n    sections?.forEach((section, sectionIndex) => {\n      const sectionTitle = section.get('sectionTitle')?.trim() || t('sectionList.unnamedSectionTitle');\n      const sectionId = section.get('sectionId');\n      const products = section.get('products', fromJS([]));\n      if (products.some(product => product.get('id') > 0)) {\n        newSectionList = newSectionList.push(fromJS({ value: sectionTitle, sectionId, sectionIndex }));\n      }\n\n      products.forEach((product, productIndex) => {\n        const brandId = product.get('brandId');\n        const categoryId = product.get('category');\n        const productNumber = (product.get('productNumber') || '-').toUpperCase();\n\n        if (product.get('id') > 0) {\n          if (!brandMap.has(brandId)) {\n            newBrandList = newBrandList.push(fromJS({ value: product.get('brand') || '-', brandId  }));\n            brandMap = brandMap.set(brandId, 1);\n          }\n          if (!categoryMap.has(categoryId)) {\n            newCategoryList = newCategoryList.push(fromJS({ value: product.get('categoryName') || '-', categoryId }));\n            categoryMap = categoryMap.set(categoryId, 1);\n          }\n\n          let indexOnSelectableProducts = -1;\n          if (productNumberMap.has(productNumber)) {\n            indexOnSelectableProducts = productNumberMap.get(productNumber);\n            newProductNumberList = newProductNumberList.setIn(\n              [indexOnSelectableProducts, 'quoteProductIds'],\n              newProductNumberList.getIn([indexOnSelectableProducts, 'quoteProductIds']).push(product.get('quoteProductId'))\n            );\n          } else {\n            indexOnSelectableProducts = newProductNumberList.size;\n            productNumberMap = productNumberMap.set(productNumber, indexOnSelectableProducts);\n            newProductNumberList = newProductNumberList.push(fromJS({ value: productNumber, quoteProductIds: [product.get('quoteProductId')], id: `${sectionIndex}-${productIndex}` }));\n          }\n\n          const uniquePackageId = product.get('packageId') && product.get('uniquePackageId');\n          if (product.get('isRequestingProduct') || uniquePackageId === currentUniquePackageIdProductToAdd) {\n            if (uniquePackageId) {\n              currentUniquePackageIdProductToAdd = uniquePackageId;\n            }\n            if (indexOnSelectableProducts !== -1) {\n              preSelectedProductIndexes = preSelectedProductIndexes.push(indexOnSelectableProducts);\n            }\n          }\n        }\n      });\n    });\n\n    setSectionList(newSectionList);\n    setBrandList(newBrandList);\n    setCategoryList(newCategoryList);\n    setProductNumberList(newProductNumberList);\n\n    if (preSelectedProductIndexes.size > 0) {\n      setSelectedProducts(preSelectedProductIndexes.reduce((acc, index) => acc.set(newProductNumberList.getIn([index, 'id']), newProductNumberList.get(index)), OrderedMap()));\n      setSelectedFilter(BULK_EDIT_FILTER_TYPE.PRODUCTS);\n    }\n\n    amplitude.logEvent(AMPLITUDE_EVENT.openBulkEditModal, amplitudeData({\n      hasPreSelectedProducts: true,\n      hasValidPreSelectedProducts: newProductNumberList.size > 0,\n    }));\n  };\n\n  const setupStep0 = () => {\n    getAllLists();\n    if (!hasRawPreSelectedProducts) {\n      setSelectedFilter(BULK_EDIT_FILTER_TYPE.SECTIONS);\n      amplitude.logEvent(AMPLITUDE_EVENT.openBulkEditModal, amplitudeData({\n        hasPreSelectedProducts: false,\n        hasValidPreSelectedProducts: false,\n      }));\n    }\n  };\n\n  const setupStep1 = () => {\n    let newQuoteProductIdsMap = fromJS({});\n    const templateColumnNames = new Set<string>();\n\n    const addToColumnNamesSet = (fieldsData) => {\n      if (fieldsData?.size > 0) {\n        fieldsData.forEach((field) => {\n          if (!field.get('invisible') && field.get('editable')) {\n            templateColumnNames.add(field.get('name'));\n          }\n        });\n      }\n    };\n\n    if (selectedFilter === BULK_EDIT_FILTER_TYPE.SECTIONS) {\n      selectedSections.forEach((section) => {\n        const sectionIndex = section.get('sectionIndex');\n        const products = sections.getIn([sectionIndex, 'products'], fromJS([]));\n        let templateHasBeenAdded = false;\n        products.forEach((product) => {\n          if (product.get('id') > 0) {\n            newQuoteProductIdsMap = newQuoteProductIdsMap.set(product.get('quoteProductId'), 1);\n            if (!templateHasBeenAdded) {\n              addToColumnNamesSet(sections.getIn([sectionIndex, 'sectionTemplate', 'fieldsData'], fromJS([])));\n              templateHasBeenAdded = true;\n            }\n          }\n        });\n      });\n    } else if (selectedFilter === BULK_EDIT_FILTER_TYPE.PRODUCTS) {\n      newQuoteProductIdsMap = selectedProducts.reduce((acc, product) => {\n        product.get('quoteProductIds').forEach((quoteProductId) => {\n          acc = acc.set(quoteProductId, 1);\n        });\n        return acc;\n      }, fromJS({}));\n\n      sections.forEach((section) => {\n        const products = section.get('products');\n        if (products?.size > 0) {\n          let templateHasBeenAdded = false;\n          products.forEach((product) => {\n            if (newQuoteProductIdsMap.has(product.get('quoteProductId')) && !templateHasBeenAdded) {\n              addToColumnNamesSet(section.getIn(['sectionTemplate', 'fieldsData'], fromJS([])));\n              templateHasBeenAdded = true;\n            }\n          });\n        }\n      });\n    } else if (selectedFilter === BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES) {\n      let idMap;\n      let checkingFunction;\n      if (selectedBrands.size > 0) {\n        if (selectedCategories.size > 0) {\n          idMap = selectedBrands.reduce((acc, brand) => {\n            return acc.set(\n              brand.get('brandId'),\n              selectedCategories.reduce((_acc, category) => _acc.set(category.get('categoryId'), 1), fromJS({}))\n            );\n          }, fromJS({}));\n          checkingFunction = (brandId, categoryId) => idMap.hasIn([brandId, categoryId]);\n        } else {\n          idMap = selectedBrands.reduce((acc, brand) => acc.set(brand.get('brandId'), 1), fromJS({}));\n          checkingFunction = (brandId, categoryId) => idMap.has(brandId);\n        }\n      } else {\n        idMap = selectedCategories.reduce((acc, category) => acc.set(category.get('categoryId'), 1), fromJS({}));\n        checkingFunction = (brandId, categoryId) => idMap.has(categoryId);\n      }\n\n      sections.forEach((section) => {\n        const products = section.get('products');\n        if (products?.size > 0) {\n          let templateHasBeenAdded = false;\n          products.forEach((product) => {\n            if (product.get('id') > 0 && checkingFunction(product.get('brandId'), product.get('category'))) {\n              newQuoteProductIdsMap = newQuoteProductIdsMap.set(product.get('quoteProductId'), 1);\n              if (!templateHasBeenAdded) {\n                addToColumnNamesSet(section.getIn(['sectionTemplate', 'fieldsData'], fromJS([])));\n                templateHasBeenAdded = true;\n              }\n            }\n          });\n        }\n      });\n    }\n\n    selectedQuoteProductIdsBaseOnFilterMapRef.current = newQuoteProductIdsMap;\n    availableTemplateColumnsRef.current = fromJS([...templateColumnNames].sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })));\n\n    if (newQuoteProductIdsMap.size > 0) {\n      setActiveStep(1);\n      setMinStep0(true);\n    } else {\n      setNoProductsError(true);\n    }\n  };\n\n  React.useEffect(() => {\n    if (open) {\n      setupStep0();\n    } else {\n      setSelectedFilter(BULK_EDIT_FILTER_TYPE.SECTIONS);\n      setSelectedSections(OrderedMap());\n      setSelectedBrands(OrderedMap());\n      setSelectedCategories(OrderedMap());\n      setSelectedProducts(OrderedMap());\n      setSectionInputValue('');\n      setBrandInputValue('');\n      setCategoryInputValue('');\n      setProductNumberInputValue('');\n      setActiveStep(0);\n      setMinStep0(false);\n      setNoProductsError(false);\n      selectedQuoteProductIdsBaseOnFilterMapRef.current = fromJS({});\n      availableTemplateColumnsRef.current = fromJS([]);\n      setColumnsToEdit(fromJS([DEFAULT_NEW_ROW]));\n      setIsProcessingBulkEdit(false);\n    }\n  }, [open]);\n\n  React.useEffect(() => {\n    switch (selectedFilter) {\n      case BULK_EDIT_FILTER_TYPE.SECTIONS:\n        setSelectedBrands(OrderedMap());\n        setSelectedCategories(OrderedMap());\n        setSelectedProducts(OrderedMap());\n        setNoProductsError(false);\n        break;\n      case BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES:\n        setSelectedSections(OrderedMap());\n        setSelectedProducts(OrderedMap());\n        break;\n      case BULK_EDIT_FILTER_TYPE.PRODUCTS:\n        setSelectedSections(OrderedMap());\n        setSelectedBrands(OrderedMap());\n        setSelectedCategories(OrderedMap());\n        setNoProductsError(false);\n        break;\n      default:\n        setSelectedSections(OrderedMap());\n        setSelectedBrands(OrderedMap());\n        setSelectedCategories(OrderedMap());\n        setSelectedProducts(OrderedMap());\n    }\n  }, [selectedFilter]);\n\n  React.useEffect(() => {\n    if (selectedFilter === BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES) {\n      setNoProductsError(false);\n    }\n  }, [selectedBrands, selectedCategories]);\n\n  const handleNext = () => {\n    setupStep1();\n  };\n  const handleBack = () => {\n    setActiveStep(0);\n    setMinStep0(false);\n    selectedQuoteProductIdsBaseOnFilterMapRef.current = fromJS({});\n    availableTemplateColumnsRef.current = fromJS([]);\n    setColumnsToEdit(fromJS([DEFAULT_NEW_ROW]));\n  };\n\n  const getFilteredDataList = (dataList, term: string) => {\n    const getter = List.isList(dataList) ? (data) => data.get('value') : (data) => data.value;\n    const normalizedInput = term.toUpperCase();\n    if (normalizedInput) {\n      return dataList.filter(data => getter(data)?.toUpperCase().includes(normalizedInput));\n    }\n    return dataList;\n  };\n\n  const toggleAllOptions = (type: 'sections' | 'brands' | 'categories' | 'products') => {\n    let currentSelected;\n    let dataList;\n    let key;\n    let input;\n    let setter;\n    switch (type) {\n      case 'sections':\n        currentSelected = selectedSections;\n        dataList = sectionList;\n        key = 'sectionIndex';\n        input = sectionInputValue;\n        setter = setSelectedSections;\n        break;\n      case 'brands':\n        currentSelected = selectedBrands;\n        dataList = brandList;\n        key = 'brandId';\n        input = brandInputValue;\n        setter = setSelectedBrands;\n        break;\n      case 'categories':\n        currentSelected = selectedCategories;\n        dataList = categoryList;\n        key = 'categoryId';\n        input = categoryInputValue;\n        setter = setSelectedCategories;\n        break;\n      case 'products':\n        currentSelected = selectedProducts;\n        dataList = productNumberList;\n        key = 'id';\n        input = productNumberInputValue;\n        setter = setSelectedProducts;\n        break;\n    }\n\n    const filteredDataList = getFilteredDataList(dataList, input);\n    const hasChecked = filteredDataList.some(data => currentSelected.has(data.get(key)));\n\n    setter((prevSelected) => {\n      let newSelected = prevSelected;\n      if (hasChecked) {\n        filteredDataList.forEach((data) => {\n          newSelected = newSelected.delete(data.get(key));\n        });\n      } else {\n        filteredDataList.forEach((data) => {\n          newSelected = newSelected.set(data.get(key), data);\n        });\n      }\n      return newSelected;\n    });\n  };\n\n  const handleDeleteSection = (index: number) => {\n    setSelectedSections(selectedSections.delete(index));\n  };\n\n  const handleDeleteBrand = (brandId: number) => {\n    setSelectedBrands(selectedBrands.delete(brandId));\n  };\n  const handleDeleteCategory = (categoryId: number) => {\n    setSelectedCategories(selectedCategories.delete(categoryId));\n  };\n  const handleDeleteProductNumber = (id: string) => {\n    setSelectedProducts(selectedProducts.delete(id));\n  };\n\n  const handleUpdateStep1Field = <K extends keyof IColumnRow>(indexToEdit: number, fieldToEdit: K, newValue: IColumnRow[K]) => {\n    setColumnsToEdit((prevColumns) => {\n      // update the specific field in the row at indexToEdit\n      let newColumns = prevColumns.setIn([indexToEdit, fieldToEdit], newValue);\n\n      // update error state\n      const isClearAction = newColumns.getIn([indexToEdit, 'columnAction']) === COLUMN_ACTIONS.CLEAR;\n      if (isClearAction) {\n        newColumns = newColumns.setIn([indexToEdit, 'error'], false).setIn([indexToEdit, 'value'], '');\n      } else {\n        if (newColumns.getIn([indexToEdit, 'columnName']) && newColumns.getIn([indexToEdit, 'value'])) {\n          newColumns = newColumns.setIn([indexToEdit, 'error'], false);\n        } else {\n          newColumns = newColumns.setIn([indexToEdit, 'error'], true);\n        }\n      }\n\n      // if it's the last row and the row is considered complete, then add a new empty row\n      if (indexToEdit === prevColumns.size - 1 && newColumns.getIn([indexToEdit, 'columnName'])) {\n        if (isClearAction || newColumns.getIn([indexToEdit, 'value'])) {\n          newColumns = newColumns.push(DEFAULT_NEW_ROW);\n        }\n      }\n      return newColumns;\n    });\n  };\n  const handleDeleteTemplateRow = (indexToDelete: number) => {\n    setColumnsToEdit((prevColumns) => prevColumns.delete(indexToDelete));\n  };\n\n  const handleSave = () => {\n    const hasError = columnsToEdit.some((row) => row.get('error'));\n    if (hasError) {\n      setColumnsToEdit((prevColumns) => {\n        return prevColumns.map((row) => row.set('touched', true));\n      });\n    } else {\n      // process the bulk edit\n      setIsProcessingBulkEdit(true);\n\n      const cleanedColumnsToEditMap = columnsToEdit.pop().reduce((acc, row) => {\n        if (row.get('columnAction') === COLUMN_ACTIONS.ADD && Number(row.get('value')) === 0) {\n          return acc;\n        }\n        return acc.set(row.get('columnName'), row);\n      }, fromJS({}));\n\n      dispatch(new BulkEditSelectedProductsAction({\n        selectedProducts: selectedQuoteProductIdsBaseOnFilterMapRef.current,\n        columnsToEdit: cleanedColumnsToEditMap,\n        onSuccess: () => {\n          setIsProcessingBulkEdit(false);\n          onClose();\n\n          amplitude.logEvent(AMPLITUDE_EVENT.applyBulkEdit, amplitudeData({\n            selectedFilter,\n            numberOfTargetedProducts: selectedQuoteProductIdsBaseOnFilterMapRef.current.size,\n            numberOfSelectedSections: selectedSections.size,\n            numberOfSelectedBrands: selectedBrands.size,\n            numberOfSelectedCategories: selectedCategories.size,\n            numberOfActions: columnsToEdit.size - 1,\n          }));\n          columnsToEdit.pop().forEach((row) => {\n            amplitude.logEvent(AMPLITUDE_EVENT.applyBulkEditOperation, amplitudeData({\n              columnName: row.get('columnName'),\n              columnAction: row.get('columnAction')\n            }));\n          });\n        },\n      }));\n    }\n  };\n\n  const VirtualizedListComp = (defaultprops, ref) => {\n    return <VirtualizedList ref={ref} {...defaultprops} rowheight={32} />;\n  };\n  const vList = React.forwardRef(VirtualizedListComp);\n\n  const DataOption = ({ option, currentSelected, dataList, input, dataKey }) => {\n    const isSelectAll = option.isSelectAll;\n    let value = '';\n    let checked = false;\n    let indeterminate = false;\n    if (isSelectAll) {\n      const filteredDataList = getFilteredDataList(dataList, input);\n      value = input ? t('sectionList.bulkEditDialog.step1.selectAllResultsOptionLabel') : t('sectionList.bulkEditDialog.step1.selectAllOptionLabel');\n      checked = filteredDataList.some(data => currentSelected.has(data.get(dataKey)));\n      indeterminate = checked && filteredDataList.some(data => !currentSelected.has(data.get(dataKey)));\n    } else {\n      checked = currentSelected.has(option[dataKey]);\n      value = option.value;\n    }\n    return (\n      <FormControlLabel\n        control={<Checkbox color='primary' size='small' checked={checked} indeterminate={indeterminate} style={{ padding: 0 }} />}\n        label={\n          <Typography\n            variant='body2'\n            color={isSelectAll ? 'textPrimary' : 'textSecondary'}\n            style={{\n              marginLeft: 8,\n              fontWeight: isSelectAll ? 'bold' : 'normal',\n            }}\n          >\n            {value}\n          </Typography>\n        }\n      />\n    );\n  };\n\n  return (\n    <Dialog open={open} classes={{ paper: classes.dialogPaper }}>\n      <DialogContent style={{ whiteSpace: 'pre-line'}}>\n        <Grid container={true} alignItems='center' justify='space-between' style={{ marginBottom: 16 }}>\n          <Typography variant='h6'>\n            {t('sectionList.bulkEditDialog.title')}\n          </Typography>\n          <IconButton size='small' disabled={isProcessingBulkEdit} onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n        <Stepper activeStep={activeStep} connector={minStep0 ? null : <StepConnector />} orientation='vertical' style={{ padding: 0 }}>\n          <Step active={true}>\n            <StepLabel>{t('sectionList.bulkEditDialog.step1.title')}</StepLabel>\n            <StepContent>\n              {\n                !minStep0 && (\n                  <Grid container={true} wrap='nowrap' alignItems='center' style={{ marginBottom: 8 }}>\n                    <InfoIcon color='action' />\n                    <Typography variant='body1' color='textSecondary' style={{ marginLeft: 8 }}>\n                      {t('sectionList.bulkEditDialog.step1.extraInfo')}\n                    </Typography>\n                  </Grid>\n                )\n              }\n\n              {\n                (!minStep0 || (minStep0 && selectedFilter === BULK_EDIT_FILTER_TYPE.SECTIONS)) && (\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    alignItems='center'\n                    wrap='nowrap'\n                    onClick={(e) => setSelectedFilter(BULK_EDIT_FILTER_TYPE.SECTIONS)}\n                    className={classnames([classes.filterContainer, classes.filterChildContainer])}\n                    style={{ borderColor: selectedFilter === BULK_EDIT_FILTER_TYPE.SECTIONS ? theme.palette.primary.main : theme.palette.grey[400] }}\n                  >\n                    <Grid item={true} xs={3}>\n                      {\n                        minStep0\n                          ? <Typography variant='body2' color='textPrimary'>\n                              {t('sectionList.bulkEditDialog.step1.sectionsLabel')}\n                            </Typography>\n                          : <FormControlLabel\n                              value={BULK_EDIT_FILTER_TYPE.SECTIONS}\n                              checked={selectedFilter === BULK_EDIT_FILTER_TYPE.SECTIONS}\n                              control={minStep0 ? null : <Radio color='primary' />}\n                              label={\n                                <Typography variant='body2' color='textPrimary'>\n                                  {t('sectionList.bulkEditDialog.step1.sectionsLabel')}\n                                </Typography>\n                              }\n                            />\n                      }\n                    </Grid>\n                    <Grid item={true} xs={9} container={true} direction='column'>\n                      {\n                        !minStep0 && (\n                          <Autocomplete\n                            className={classes.step0Autocomplete}\n                            options={sectionList.toJS() || []}\n                            filterOptions={(options, state) => {\n                              const filteredOptions = getFilteredDataList(options, sectionInputValue);\n                              if (filteredOptions.length) {\n                                return [SELECT_ALL_SECTION_OPTION].concat(filteredOptions);\n                              }\n                              return [];\n                            }}\n                            ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n                            value={null}\n                            noOptionsText={t('generalDropdown.noOptions')}\n                            onChange={(e, value) => {\n                              if (value?.isSelectAll) {\n                                toggleAllOptions('sections');\n                              } else {\n                                if (selectedSections.has(value.sectionIndex)) {\n                                  setSelectedSections(selectedSections.delete(value.sectionIndex));\n                                } else {\n                                  setSelectedSections(selectedSections.set(value.sectionIndex, fromJS(value)));\n                                }\n                              }\n                            }}\n                            onBlur={() => setSectionInputValue('')}\n                            inputValue={sectionInputValue}\n                            onInputChange={(e, value, reason) => {\n                              if (reason === 'input') {\n                                setSectionInputValue(value);\n                              }\n                            }}\n                            disableCloseOnSelect={true}\n                            getOptionLabel={(option) => option?.value || ''}\n                            renderInput={(params) => <TextField placeholder={t('sectionList.bulkEditDialog.step1.sectionsPlaceholder')} style={{ width: '100%' }} {...params} />}\n                            renderOption={(option) => option && <DataOption key={option.key || -1} option={option} currentSelected={selectedSections} dataList={sectionList} input={sectionInputValue} dataKey='sectionIndex' />}\n                          />\n                        )\n                      }\n                      {\n                        selectedSections.size > 0 && (\n                          <Grid container={true} className={classes.chipContainer}>\n                            { selectedSections.entrySeq().map(([key, selectedSection], index) => <Chip key={index} className={classes.chip} label={selectedSection.get('value')} onDelete={minStep0 ? null : () => handleDeleteSection(selectedSection.get('sectionIndex'))} />) }\n                          </Grid>\n                        )\n                      }\n                    </Grid>\n                  </Grid>\n                )\n              }\n\n              {\n                (!minStep0 || (minStep0 && selectedFilter === BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES)) && (\n                  <Grid\n                    container={true}\n                    onClick={(e) => setSelectedFilter(BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES)}\n                    className={classes.filterContainer}\n                    style={{\n                      borderColor: selectedFilter === BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES\n                        ? noProductsError\n                          ? theme.palette.error.main\n                          : theme.palette.primary.main\n                        : theme.palette.grey[400]\n                    }}\n                  >\n                    {\n                      !minStep0 && <>\n                        <Grid item={true} xs={12} className={classes.filterChildContainer}>\n                          <FormControlLabel\n                            value={BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES}\n                            checked={selectedFilter === BULK_EDIT_FILTER_TYPE.BRANDS_AND_CATEGORIES}\n                            control={<Radio color='primary' />}\n                            label={\n                              <Typography variant='body2' color='textPrimary'>\n                                {t('sectionList.bulkEditDialog.step1.manufacturersAndCategoriesLabel')}\n                              </Typography>\n                            }\n                          />\n                        </Grid>\n                        <Divider className={classes.divider} />\n                      </>\n                    }\n                    <Grid container={true} item={true} xs={12} direction='row' justify='space-between' alignItems='center' wrap='nowrap' className={classes.filterChildContainer}>\n                      <Grid item={true} xs={3}>\n                        <Typography variant='body2' color='textPrimary'>\n                          {t('sectionList.bulkEditDialog.step1.manufacturersLabel')}\n                        </Typography>\n                      </Grid>\n                      <Grid item={true} xs={9} container={true} direction='column'>\n                        {\n                          !minStep0 && (\n                            <Autocomplete\n                              className={classes.step0Autocomplete}\n                              options={brandList.toJS() || []}\n                              filterOptions={(options, state) => {\n                                const filteredOptions = getFilteredDataList(options, brandInputValue);\n                                if (filteredOptions.length) {\n                                  return [{ brand: '', brandId: null, isSelectAll: true }].concat(filteredOptions);\n                                }\n                                return [];\n                              }}\n                              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n                              value={null}\n                              noOptionsText={t('generalDropdown.noOptions')}\n                              onChange={(e, value) => {\n                                if (value?.isSelectAll) {\n                                  toggleAllOptions('brands');\n                                } else {\n                                  if (selectedBrands.has(value.brandId)) {\n                                    setSelectedBrands(selectedBrands.delete(value.brandId));\n                                  } else {\n                                    setSelectedBrands(selectedBrands.set(value.brandId, fromJS(value)));\n                                  }\n                                }\n                              }}\n                              onBlur={() => setBrandInputValue('')}\n                              inputValue={brandInputValue}\n                              onInputChange={(e, value, reason) => {\n                                if (reason === 'input') {\n                                  setBrandInputValue(value);\n                                }\n                              }}\n                              disableCloseOnSelect={true}\n                              getOptionLabel={(option) => option?.value || ''}\n                              renderInput={(params) => <TextField placeholder={t('sectionList.bulkEditDialog.step1.manufacturersPlaceholder')} style={{ width: '100%' }} {...params} />}\n                              renderOption={(option) => option && <DataOption option={option} currentSelected={selectedBrands} dataList={brandList} input={brandInputValue} dataKey='brandId' />}\n                            />\n                          )\n                        }\n                        {\n                          selectedBrands.size > 0 && (\n                            <Grid container={true} className={classes.chipContainer}>\n                              { selectedBrands.entrySeq().map(([key, selectedBrand], index) => <Chip key={index} className={classes.chip} label={selectedBrand.get('value')} onDelete={minStep0 ? null : () => handleDeleteBrand(selectedBrand.get('brandId'))} />) }\n                            </Grid>\n                          )\n                        }\n                      </Grid>\n                    </Grid>\n                    <Divider className={classes.divider} />\n                    <Grid container={true} item={true} xs={12} direction='row' justify='space-between' alignItems='center' wrap='nowrap' className={classes.filterChildContainer}>\n                      <Grid item={true} xs={3}>\n                        <Typography variant='body2' color='textPrimary'>\n                          {t('sectionList.bulkEditDialog.step1.categoriesLabel')}\n                        </Typography>\n                      </Grid>\n                      <Grid item={true} xs={9} container={true} direction='column'>\n                        {\n                          !minStep0 && (\n                            <Autocomplete\n                              className={classes.step0Autocomplete}\n                              options={categoryList.toJS() || []}\n                              filterOptions={(options, state) => {\n                                const filteredOptions = getFilteredDataList(options, categoryInputValue);\n                                if (filteredOptions.length) {\n                                  return [{ value: '', categoryId: null, isSelectAll: true }].concat(filteredOptions);\n                                }\n                                return [];\n                              }}\n                              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n                              value={null}\n                              noOptionsText={t('generalDropdown.noOptions')}\n                              onChange={(e, value) => {\n                                if (value?.isSelectAll) {\n                                  toggleAllOptions('categories');\n                                } else {\n                                  if (selectedCategories.has(value.categoryId)) {\n                                    setSelectedCategories(selectedCategories.delete(value.categoryId));\n                                  } else {\n                                    setSelectedCategories(selectedCategories.set(value.categoryId, fromJS(value)));\n                                  }\n                                }\n                              }}\n                              onBlur={() => setCategoryInputValue('')}\n                              inputValue={categoryInputValue}\n                              onInputChange={(e, value, reason) => {\n                                if (reason === 'input') {\n                                  setCategoryInputValue(value);\n                                }\n                              }}\n                              disableCloseOnSelect={true}\n                              getOptionLabel={(option) => option?.value || ''}\n                              renderInput={(params) => <TextField placeholder={t('sectionList.bulkEditDialog.step1.categoriesPlaceholder')} style={{ width: '100%' }} {...params} />}\n                              renderOption={(option) => option && <DataOption option={option} currentSelected={selectedCategories} dataList={categoryList} input={categoryInputValue} dataKey='categoryId' />}\n                            />\n                          )\n                        }\n                        {\n                          selectedCategories.size > 0 && (\n                            <Grid container={true} className={classes.chipContainer}>\n                              { selectedCategories.entrySeq().map(([key, selectedCategory], index) => <Chip key={index} className={classes.chip} label={selectedCategory.get('value')} onDelete={minStep0 ? null : () => handleDeleteCategory(selectedCategory.get('categoryId'))} />) }\n                            </Grid>\n                          )\n                        }\n                      </Grid>\n                    </Grid>\n                  </Grid>\n                )\n              }\n              {\n                noProductsError && (\n                  <Typography variant='body1' color='error' style={{ marginTop: -12, marginBottom: 16 }}>\n                    {t('sectionList.bulkEditDialog.step1.noProductsError')}\n                  </Typography>\n                )\n              }\n              {\n                (!minStep0 || (minStep0 && selectedFilter === BULK_EDIT_FILTER_TYPE.PRODUCTS)) && (\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    alignItems='center'\n                    wrap='nowrap'\n                    onClick={(e) => setSelectedFilter(BULK_EDIT_FILTER_TYPE.PRODUCTS)}\n                    className={classnames([classes.filterContainer, classes.filterChildContainer])}\n                    style={selectedFilter === BULK_EDIT_FILTER_TYPE.PRODUCTS ? { borderColor: theme.palette.primary.main } : null}\n                  >\n                    <Grid item={true} xs={3}>\n                      {\n                        minStep0\n                          ? <Typography variant='body2' color='textPrimary'>{t('sectionList.bulkEditDialog.step1.productNumbersLabel')}</Typography>\n                          : <FormControlLabel\n                              value={BULK_EDIT_FILTER_TYPE.PRODUCTS}\n                              checked={selectedFilter === BULK_EDIT_FILTER_TYPE.PRODUCTS}\n                              control={<Radio color='primary' />}\n                              label={<Typography variant='body2' color='textPrimary'>{t('sectionList.bulkEditDialog.step1.productNumbersLabel')}</Typography>}\n                            />\n                      }\n                    </Grid>\n                    <Grid item={true} xs={9} container={true} direction='column'>\n                      {\n                        !minStep0 && (\n                          <Autocomplete\n                            className={classes.step0Autocomplete}\n                            options={productNumberList.toJS() || []}\n                            filterOptions={(options, state) => {\n                              const filteredOptions = getFilteredDataList(options, productNumberInputValue);\n                              if (filteredOptions.length) {\n                                return [{ value: '', quoteProductIds: [], id: '-1', isSelectAll: true }].concat(filteredOptions);\n                              }\n                              return [];\n                            }}\n                            ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n                            value={null}\n                            noOptionsText={t('generalDropdown.noOptions')}\n                            onChange={(e, value) => {\n                              if (value?.isSelectAll) {\n                                toggleAllOptions('products');\n                              } else {\n                                if (selectedProducts.has(value.id)) {\n                                  setSelectedProducts(selectedProducts.delete(value.id));\n                                } else {\n                                  setSelectedProducts(selectedProducts.set(value.id, fromJS(value)));\n                                }\n                              }\n                            }}\n                            onBlur={() => setProductNumberInputValue('')}\n                            inputValue={productNumberInputValue}\n                            onInputChange={(e, value, reason) => {\n                              if (reason === 'input') {\n                                setProductNumberInputValue(value);\n                              }\n                            }}\n                            disableCloseOnSelect={true}\n                            getOptionLabel={(option) => option?.value || ''}\n                            renderInput={(params) => <TextField placeholder={t('sectionList.bulkEditDialog.step1.productNumbersPlaceholder')} style={{ width: '100%' }} {...params} />}\n                            renderOption={(option) => option && <DataOption key={option.key || -1} option={option} currentSelected={selectedProducts} dataList={productNumberList} input={productNumberInputValue} dataKey='id' />}\n                          />\n                        )\n                      }\n                      {\n                        selectedProducts.size > 0 && (\n                          <Grid container={true} className={classes.chipContainer}>\n                            { selectedProducts.entrySeq().map(([key, selectedProduct], index) => <Chip key={index} className={classes.chip} label={selectedProduct.get('value')} onDelete={minStep0 ? null : () => handleDeleteProductNumber(selectedProduct.get('id'))} />) }\n                          </Grid>\n                        )\n                      }\n                    </Grid>\n                  </Grid>\n                )\n              }\n\n              {\n                !minStep0 && (\n                  <Grid container={true} direction='row' justify='flex-start' style={{ marginTop: 32 }}>\n                    <Button\n                      color='primary'\n                      variant='text'\n                      onClick={onClose}\n                    >\n                      {t('formButtons.cancel')}\n                    </Button>\n                    <Button\n                      color='primary'\n                      variant='contained'\n                      disabled={disabledNextButton}\n                      style={{ marginLeft: 24 }}\n                      onClick={() => {\n                        handleNext();\n                      }}\n                    >\n                      {t('formButtons.next')}\n                    </Button>\n                  </Grid>\n                )\n              }\n            </StepContent>\n          </Step>\n          <Step>\n            <StepLabel>{t('sectionList.bulkEditDialog.step2.title')}</StepLabel>\n            <StepContent>\n              {\n                columnsToEdit.map((row, index) => {\n                  const isLastRow = index === columnsToEdit.size - 1;\n                  const displayError = row.get('error') && row.get('touched');\n                  const columnName = row.get('columnName');\n                  const columnAction = row.get('columnAction');\n                  const rowValue = row.get('value');\n\n                  return (\n                    <Grid key={index} container={true} direction='row' alignItems='center' wrap='nowrap' style={{ marginBottom: 4 }}>\n                      <Grid item={true} xs={3} style={{ width: '18%', marginRight: 32 }}>\n                        <Autocomplete\n                          disabled={isProcessingBulkEdit}\n                          options={availableTemplateColumnsRef.current.toJS() || []}\n                          filterOptions={(options) => ImmuSet(options).subtract(columnsToEdit.map((col) => col.get('columnName'))).toJS()}\n                          onChange={(e, value) => {\n                            handleUpdateStep1Field(index, 'columnName', value || '');\n                          }}\n                          value={row.get('columnName') || null}\n                          noOptionsText={t('generalDropdown.noOptions')}\n                          blurOnSelect={true}\n                          disableClearable={true}\n                          getOptionLabel={(option: string) => option || ''}\n                          renderInput={(params) => <TextField placeholder={t('sectionList.bulkEditDialog.step2.selectColumnPlaceholder')} style={{ width: '100%' }} {...params} />}\n                          renderOption={(option) => option && <Typography>{option}</Typography>}\n                        />\n                      </Grid>\n                      <Grid item={true} style={{ width: 115 }}>\n                        <Autocomplete\n                          disabled={!columnName || isProcessingBulkEdit}\n                          options={columnActions || []}\n                          onChange={(e, value) => {\n                            handleUpdateStep1Field(index, 'columnAction', value || '');\n                          }}\n                          value={columnAction || null}\n                          noOptionsText={t('generalDropdown.noOptions')}\n                          blurOnSelect={true}\n                          disableClearable={true}\n                          getOptionLabel={(option: string) => t(`sectionList.bulkEditDialog.step2.columnActions.${option}`) || ''}\n                          renderInput={(params) => <TextField style={{ width: '100%' }} {...params} />}\n                          renderOption={(option) => option && <Typography>{t(`sectionList.bulkEditDialog.step2.columnActions.${option}`)}</Typography>}\n                        />\n                      </Grid>\n                      <Grid item={true} container={true} justify='center' style={{ width: 32 }}>\n                        {\n                          (isLastRow && columnAction !== COLUMN_ACTIONS.CLEAR) && (\n                            <Tooltip title={t(`sectionList.bulkEditDialog.step2.columnActions.${columnAction}Tooltip`)}>\n                              <InfoIcon fontSize='small' color='action' />\n                            </Tooltip>\n                          )\n                        }\n                      </Grid>\n                      <Grid item={true} container={true} direction='column' style={{ width: '18%', position: 'relative' }}>\n                        {\n                          columnAction !== COLUMN_ACTIONS.CLEAR && <>\n                            <TextField\n                              disabled={!columnName || isProcessingBulkEdit}\n                              value={row.get('value') || ''}\n                              onChange={(e) => {\n                                const value = e.target.value || '';\n                                if ((/^(?:0|[1-9]\\d*)(?:\\.\\d*)?$|^\\.\\d+$/.test(value) && Number(value) >= 0) && value.length <= 16) {\n                                  handleUpdateStep1Field(index, 'value', e.target.value);\n                                } else if (!value) {\n                                  handleUpdateStep1Field(index, 'value', '');\n                                }\n                              }}\n                              placeholder={t('sectionList.bulkEditDialog.step2.valuePlaceholder')}\n                            />\n                            {(displayError && !rowValue) && <FormHelperText error={true} className={classes.errorText}>{t('errors.required')}</FormHelperText>}\n                          </>\n                        }\n                      </Grid>\n                      {\n                        !isLastRow && (\n                          <IconButton disabled={isProcessingBulkEdit} onClick={() => handleDeleteTemplateRow(index)}>\n                            <DeleteIcon />\n                          </IconButton>\n                        )\n                      }\n                    </Grid>\n                  );\n                })\n              }\n              <Grid container={true} direction='row' justify='flex-start' alignItems='center' style={{ marginTop: 32 }}>\n                <Button\n                  color='primary'\n                  variant='text'\n                  disabled={isProcessingBulkEdit}\n                  style={{ marginRight: 24 }}\n                  onClick={handleBack}\n                >\n                  {t('formButtons.back')}\n                </Button>\n                <Button\n                  color='primary'\n                  variant='contained'\n                  disabled={isProcessingBulkEdit || columnsToEdit.size <= 1}\n                  style={{ marginRight: 24 }}\n                  onClick={handleSave}\n                >\n                  {t('formButtons.save')}\n                </Button>\n                {\n                  isProcessingBulkEdit && (\n                    <CircularProgress size={24} />\n                  )\n                }\n              </Grid>\n            </StepContent>\n          </Step>\n        </Stepper>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default BulkEditDialog;","import React from 'react';\nimport {Button, Chip, CircularProgress, Dialog, DialogContent, Grid, IconButton, Paper, TextField, Tooltip, Typography} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles, useTheme} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { makeSelectHasIsRequestingProduct } from '../../../modules/QuoteModule/selectors';\nimport { Autocomplete } from '@material-ui/lab';\nimport { VirtualizedList } from '../../../pages/FirmDetailPage/OfficesInfo/BrandTags/VirtualizedList';\nimport { fromJS, List, Map } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport CheckIcon from '@material-ui/icons/Check';\nimport { BulkMoveSelectedProductsAction } from '../../../modules/QuoteEditModule/actions';\n\nconst RIGHT_ARROW_ICON_COLUMN_WIDTH = 50;\nconst SECTION_COLUMN = 258;\nconst PRODUCTS_COLUMN = `calc(100% - ${SECTION_COLUMN + RIGHT_ARROW_ICON_COLUMN_WIDTH}px)`;\n\nexport interface ITargetSection {\n  value: string;\n  sectionId: string;\n  sectionIndex: number;\n}\n\nexport interface IBulkSelectedQuoteProduct {\n  value: string;\n  label: string;\n  quoteProductId: string;\n  sourceSectionIndex: number;\n}\n\ninterface IBulkMoveDialogProps {\n  open: boolean;\n  onClose: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    width: 1035,\n    maxWidth: '100%',\n    paddingBottom: 12,\n  },\n  container: {\n    border: `1px solid ${theme.palette.grey[400]}`,\n    borderRadius: 8,\n    marginBottom: theme.spacing(2),\n    padding: theme.spacing(1, 2),\n  },\n  multiAutocomplete: {\n    marginBottom: theme.spacing(1),\n  },\n  chip: {\n    margin: 2,\n  },\n  chipContainer: {\n    maxHeight: 408,\n    overflowY: 'auto',\n  },\n}));\n\nconst BulkMoveDialog: React.FC<IBulkMoveDialogProps> = ({\n  open,\n  onClose\n}) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const sections = useSelector(quoteFormSelector(['sections']));\n  const hasRawPreSelectedProducts = useSelector(makeSelectHasIsRequestingProduct());\n\n  const [selectedTargetSection, setSelectedTargetSection] = React.useState<IMap<ITargetSection>>(null);\n  const [selectedProducts, setSelectedProducts] = React.useState<List<IMap<IBulkSelectedQuoteProduct>>>(fromJS([]));\n\n  const [sectionList, setSectionList] = React.useState(fromJS([]));\n  const [productNumberList, setProductNumberList] = React.useState(fromJS([]));\n\n  const [productNumberInputValue, setProductNumberInputValue] = React.useState('');\n\n  const [isAddingNewSection, setIsAddingNewSection] = React.useState(false);\n  const [newSectionName, setNewSectionName] = React.useState('');\n\n  const [isProcessingBulkMove, setIsProcessingBulkMove] = React.useState(false);\n\n  const getAllLists = () => {\n    let newSectionList = fromJS([]);\n    let newProductNumberList = fromJS([]);\n\n    sections?.forEach((section, sectionIndex) => {\n      const sectionTitle = section.get('sectionTitle')?.trim() || t('sectionList.unnamedSectionTitle');\n      const sectionId = section.get('sectionId');\n      newSectionList = newSectionList.push(fromJS({ value: sectionTitle, sectionId, sectionIndex }));\n\n      // let currentUniquePackageIdProductToAdd = -1;\n      // let parentProductIndex = -1;\n      section.get('products', fromJS([])).forEach((product, productIndex) => {\n        const productNumber = product.get('productNumber') || '-';\n\n        if (product.get('id') !== -1 && (!product.get('packageId') || !product.get('productIndex'))) {\n            newProductNumberList = newProductNumberList.push(fromJS({\n              value: productNumber,\n              label: `${productNumber} (${sectionTitle})`,\n              quoteProductId: product.get('quoteProductId'),\n              sourceSectionIndex: sectionIndex\n            }));\n        }\n      });\n\n      setSectionList(newSectionList);\n      setProductNumberList(newProductNumberList);\n    });\n  };\n\n  const getPrePopulatedProducts = () => {\n    const prePopulatedProductNumbers = sections?.reduce((acc, section: IMap<any>, sectionIndex: number) => {\n      const sectionTitle = section.get('sectionTitle') || t('sectionList.unnamedSectionTitle');\n      const products = section.get('products');\n      if (products) {\n        return products.reduce((productsAcc, product: IMap<any>) => {\n          if (product.get('id') !== -1 && product.get('isRequestingProduct')) {\n            return productsAcc.push(fromJS({\n              value: product.get('productNumber') || '-',\n              label: `${product.get('productNumber') || '-'} (${sectionTitle})`,\n              quoteProductId: product.get('quoteProductId'),\n              sourceSectionIndex: sectionIndex,\n            }));\n          }\n          return productsAcc;\n        }, acc);\n      } else {\n        return acc;\n      }\n    }, fromJS([]));\n\n    setSelectedProducts(prePopulatedProductNumbers);\n  };\n\n\n  React.useEffect(() => {\n    if (open) {\n      getAllLists();\n      if (hasRawPreSelectedProducts) {\n        getPrePopulatedProducts();\n      }\n    } else {\n      setSelectedTargetSection(null);\n      setSelectedProducts(fromJS([]));\n      setProductNumberInputValue('');\n      setIsAddingNewSection(false);\n      setIsProcessingBulkMove(false);\n    }\n  }, [open]);\n\n  const handleDeleteProductNumber = (index: number) => {\n    setSelectedProducts(selectedProducts.delete(index));\n  };\n\n  const handleAddNewSection = () => {\n    if (newSectionName.trim()) {\n      const newSection = fromJS({\n        value: newSectionName.trim(),\n        sectionId: '',\n        sectionIndex: -1,\n      });\n      setSelectedTargetSection(newSection);\n      setIsAddingNewSection(false);\n      setNewSectionName('');\n    }\n  };\n\n  const handleMove = () => {\n    setIsProcessingBulkMove(true);\n    dispatch(new BulkMoveSelectedProductsAction({\n      selectedProducts: selectedProducts.reduce((acc, product) => acc.set(product.get('quoteProductId'), product), fromJS({})),\n      targetSection: selectedTargetSection,\n      onSuccess: () => {\n        setIsProcessingBulkMove(false);\n        onClose();\n      },\n    }));\n  };\n\n  const VirtualizedListComp = (defaultprops, ref) => {\n    return <VirtualizedList ref={ref} {...defaultprops} rowheight={32} />;\n  };\n  const vList = React.forwardRef(VirtualizedListComp);\n\n  return (\n    <Dialog open={open} classes={{ paper: classes.dialogPaper }}>\n      <DialogContent style={{ whiteSpace: 'pre-line'}}>\n        <Grid container={true} alignItems='center' justify='space-between' style={{ marginBottom: 16 }}>\n          <Typography variant='h6'>\n            {t('sectionList.bulkMoveDialog.title')}\n          </Typography>\n          <IconButton size='small' disabled={isProcessingBulkMove} onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n        <Grid container={true} className={classes.container}>\n          <Grid item={true} container={true} direction='column' style={{ width: PRODUCTS_COLUMN }}>\n            <Typography variant='body1' color='textPrimary'>\n              {t('sectionList.bulkMoveDialog.productNumbersLabel')}\n            </Typography>\n            <Autocomplete\n              className={classes.multiAutocomplete}\n              options={productNumberList.toJS() || []}\n              filterOptions={(options, state) => {\n                const normalizedInput = productNumberInputValue.toLowerCase();\n                const selectedQuoteProductIdsMap = selectedProducts.reduce((acc, product) => {\n                  acc[product.get('quoteProductId')] = 1;\n                  return acc;\n                }, {});\n                return options.filter(option => {\n                  if (normalizedInput) {\n                    return option.value.toLowerCase().includes(normalizedInput) && !selectedQuoteProductIdsMap[option.quoteProductId];\n                  }\n                  return !selectedQuoteProductIdsMap[option.quoteProductId];\n                });\n              }}\n              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n              value={null}\n              noOptionsText={t('generalDropdown.noOptions')}\n              onChange={(e, value) => {\n                setSelectedProducts(selectedProducts.push(fromJS(value)));\n              }}\n              inputValue={productNumberInputValue}\n              onInputChange={(e, value, reason) => {\n                if (reason === 'reset') {\n                  setProductNumberInputValue('');\n                } else {\n                  setProductNumberInputValue(value);\n                }\n              }}\n              blurOnSelect={true}\n              getOptionLabel={(option) => option?.label || ''}\n              renderInput={(params) => <TextField placeholder={t('sectionList.bulkMoveDialog.productNumbersPlaceholder')} style={{ width: '100%' }} {...params} />}\n              renderOption={(option) => option && <Typography>{option.label}</Typography>}\n            />\n          </Grid>\n          <Grid item={true} container={true} justify='center' alignItems='center' style={{ width: RIGHT_ARROW_ICON_COLUMN_WIDTH }} >\n            <ArrowForwardIcon color='primary' style={{ width: 24 }} />\n          </Grid>\n          <Grid item={true} container={true} direction='column' style={{ width: SECTION_COLUMN }}>\n            <Typography variant='body1' color='textPrimary'>\n              {t('sectionList.bulkMoveDialog.targetSectionLabel')}\n            </Typography>\n            {\n              isAddingNewSection\n                ? <Grid container={true} direction='row' wrap='nowrap'>\n                    <TextField\n                      value={newSectionName}\n                      onChange={(e) => setNewSectionName(e.target.value)}\n                    />\n                    <IconButton size='small' onClick={() => setIsAddingNewSection(false)}>\n                      <CloseIcon />\n                    </IconButton>\n                    <IconButton size='small' disabled={newSectionName.trim() === ''} onClick={handleAddNewSection}>\n                      <CheckIcon />\n                    </IconButton>\n                  </Grid>\n                : <Autocomplete\n                    options={sectionList.toJS() || []}\n                    onChange={(e, value) => {\n                      setSelectedTargetSection(fromJS(value));\n                    }}\n                    value={selectedTargetSection?.toJS() || null}\n                    noOptionsText={t('generalDropdown.noOptions')}\n                    blurOnSelect={true}\n                    disableClearable={true}\n                    getOptionLabel={(option) => option?.value || ''}\n                    renderInput={(params) => {\n                      return <Tooltip title={selectedTargetSection?.get('value') || ''}>\n                        <TextField placeholder={t('sectionList.bulkMoveDialog.targetSectionPlaceholder')} style={{ width: '100%' }} {...params} />\n                      </Tooltip>;\n                    }}\n                    renderOption={(option) => option && <Typography>{option.value}</Typography>}\n                    PaperComponent={({ children, ...props }) => {\n                      return <Paper {...props} onMouseDown={e => e.preventDefault()} style={{ fontSize: '1em' }}>\n                        {children}\n                        <Button\n                          style={{ border: 'none', borderRadius: 0 }}\n                          variant='outlined'\n                          color='primary'\n                          fullWidth={true}\n                          onClick={(e) => {\n                            e.stopPropagation();\n                            e.preventDefault();\n                            setNewSectionName(t('sectionList.bulkMoveDialog.defaultNewSectionName'));\n                            setIsAddingNewSection(true);\n                          }}\n                        >\n                          {t('sectionList.bulkMoveDialog.newSectionButton')}\n                        </Button>\n                      </Paper>;\n                    }}\n                  />\n            }\n          </Grid>\n          {\n            selectedProducts.size > 0 && (\n              <Grid container={true} className={classes.chipContainer} style={{ width: PRODUCTS_COLUMN }}>\n                { selectedProducts.map((selectedProduct, index) => <Chip key={index} className={classes.chip} label={selectedProduct.get('label')} onDelete={() => handleDeleteProductNumber(index)} />) }\n              </Grid>\n            )\n          }\n        </Grid>\n\n        <Grid container={true} direction='row' justify='flex-start' alignItems='center' style={{ marginTop: 32 }}>\n          <Button\n            color='primary'\n            variant='text'\n            disabled={isProcessingBulkMove}\n            style={{ marginRight: 24 }}\n            onClick={onClose}\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            variant='contained'\n            disabled={isProcessingBulkMove || !selectedTargetSection || selectedProducts.size === 0}\n            style={{ marginRight: 24 }}\n            onClick={handleMove}\n          >\n            {t('formButtons.move')}\n          </Button>\n          {\n            isProcessingBulkMove && (\n              <CircularProgress size={24} />\n            )\n          }\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default BulkMoveDialog;","import type {ViewRect} from '@dnd-kit/core';\nimport type {Transform} from '@dnd-kit/utilities';\n\nexport function restrictToBoundingRect(\n  transform: Transform,\n  rect: ViewRect,\n  boundingRect: ViewRect\n): Transform {\n  const value = {\n    ...transform,\n  };\n\n  if (rect.top + transform.y <= boundingRect.top) {\n    value.y = boundingRect.top - rect.top;\n  } else if (\n    rect.bottom + transform.y >=\n    boundingRect.top + boundingRect.height\n  ) {\n    value.y = boundingRect.top + boundingRect.height - rect.bottom;\n  }\n\n  if (rect.left + transform.x <= boundingRect.left) {\n    value.x = boundingRect.left - rect.left;\n  } else if (\n    rect.right + transform.x >=\n    boundingRect.left + boundingRect.width\n  ) {\n    value.x = boundingRect.left + boundingRect.width - rect.right;\n  }\n\n  return value;\n}\n","import type {Modifier} from '@dnd-kit/core';\nimport {restrictToBoundingRect} from './utilities';\n\nexport const restrictToParentElement: Modifier = ({\n  transform,\n  activeNodeRect,\n  containerNodeRect,\n}) => {\n  if (!activeNodeRect || !containerNodeRect) {\n    return transform;\n  }\n\n  return restrictToBoundingRect(transform, activeNodeRect, containerNodeRect);\n};\n","import type {Modifier} from '@dnd-kit/core';\n\nexport const restrictToVerticalAxis: Modifier = ({transform}) => {\n  return {\n    ...transform,\n    x: 0,\n  };\n};\n","import * as React from 'react';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useSortable } from '@dnd-kit/sortable';\n\nexport function SortableItem(props) {\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    transform,\n    transition,\n  } = useSortable({ id: props.id, disabled: Boolean(props.disabled) });\n\n  const style = {\n    transform: CSS.Transform.toString(transform),\n    transition,\n  };\n\n  return (\n    <div ref={setNodeRef} style={style} {...attributes} {...listeners} onClick={props.onClick} {...props}>\n      {props.children}\n    </div>\n  );\n}\n","import React from 'react';\nimport {Button, Dialog, DialogContent, Grid, IconButton, MenuItem, Paper, Tooltip, Typography} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles, useTheme} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectSectionsInPages, quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { fromJS, List } from 'immutable';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { closestCenter, DndContext, DragOverlay, KeyboardSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { SortableItem } from './SortableItem';\nimport { change } from 'redux-form';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\ninterface ISortBySectionDialogProps {\n  open: boolean;\n  onClose: () => void;\n  onSuccess: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    width: 614,\n    maxWidth: '100%',\n    paddingBottom: 12,\n  },\n  sectionsContainer: {\n    maxHeight: 288,\n    overflowY: 'auto',\n    marginTop: 16,\n  },\n}));\n\nconst SortBySectionDialog: React.FC<ISortBySectionDialogProps> = ({\n  open,\n  onClose,\n  onSuccess,\n}) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const sectionsInPages = useSelector(makeSelectSectionsInPages());\n  const formSections = useSelector(quoteFormSelector(['sections'])) || List();\n\n  const [activeId, setActiveId] = React.useState(null);\n  const [tempSections, setTempSections] = React.useState(List());\n\n  const sensors = useSensors(\n    useSensor(PointerSensor),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    })\n  );\n\n  React.useEffect(() => {\n    if (open) {\n      setTempSections(formSections);\n    }\n  }, [open]);\n\n  const handleDragEnd = (event) => {\n    const { active, over } = event;\n    setActiveId(null);\n    if (active.id !== over.id) {\n      const item = tempSections.get(active.id);\n      const result = tempSections.delete(active.id);\n      setTempSections(result.insert(over.id, item));\n    }\n  };\n\n  const handleDragStart = (event) => {\n    const { active } = event;\n    setActiveId(active.id);\n  };\n\n  const handleSort = () => {\n    dispatch(change(QUOTE_FORM_NAME, 'sections', fromJS(tempSections)));\n    onClose();\n    onSuccess();\n  };\n\n  return (\n    <Dialog open={open} classes={{ paper: classes.dialogPaper }}>\n      <DialogContent style={{ whiteSpace: 'pre-line'}}>\n        <Grid container={true} alignItems='center' justify='space-between' style={{ marginBottom: 16 }}>\n          <Typography variant='h6'>\n            {t('sectionList.sortBySectionDialog.title')}\n          </Typography>\n          <IconButton size='small' onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n        <Typography variant='body1' color='textPrimary'>\n          {t('sectionList.sortBySectionDialog.subtitle')}\n        </Typography>\n\n        <Paper elevation={6} className={classes.sectionsContainer}>\n          <DndContext\n            sensors={sensors}\n            collisionDetection={closestCenter}\n            onDragEnd={handleDragEnd}\n            onDragStart={handleDragStart}\n            modifiers={[restrictToVerticalAxis]}\n          >\n            <SortableContext\n              items={tempSections.map((section, i) => String(i)).toArray()}\n              strategy={verticalListSortingStrategy}\n            >\n              {tempSections.map((section, i) => {\n                const page = sectionsInPages.findKey(_page => _page.indexOf(i) === 0);\n                const sectionTitle = section.get('sectionTitle') || t('sectionList.unnamedSectionTitle');\n                return <React.Fragment key={i}>\n                  {\n                    page > 0 && (\n                      <MenuItem\n                        key={`page-item-${page}-${i}`}\n                        disabled={true}\n                        style={{\n                          opacity: 1,\n                          position: 'sticky',\n                          top: 0,\n                          height: 40,\n                          zIndex: 1 + page,\n                          backgroundColor: theme.palette.common.white\n                        }}\n                        divider={true}\n                      >\n                        <Typography variant='inherit' color='textPrimary' style={{ fontWeight: 600 }} noWrap={true}>{t('sectionList.sortBySectionDialog.page', { page })}</Typography>\n                      </MenuItem>\n                    )\n                  }\n                  <SortableItem key={`menu-item-${i}`} id={String(i)}>\n                    <MenuItem\n                      divider={true}\n                      style={{\n                        visibility: String(i) === activeId ? 'hidden' : 'visible',\n                        opacity: 1,\n                        color: theme.palette.text.primary,\n                        height: 36,\n                      }}\n                    >\n                      <DragIndicatorIcon color='action' />\n                      <Tooltip title={sectionTitle}>\n                        <Typography variant='inherit' noWrap={true} style={{ marginLeft: 8 }}>{sectionTitle}</Typography>\n                      </Tooltip>\n                    </MenuItem>\n                  </SortableItem>\n                </React.Fragment>;\n              })}\n            </SortableContext>\n            {\n              activeId\n                ? <DragOverlay modifiers={[restrictToParentElement]} dropAnimation={null}>\n                    <MenuItem style={{ height: 36 }}>\n                      <DragIndicatorIcon color='action' />\n                      <Typography variant='inherit' noWrap={true} style={{ marginLeft: 8 }}>\n                        {tempSections.getIn([activeId, 'sectionTitle']) || t('sectionList.unnamedSectionTitle')}\n                      </Typography>\n                    </MenuItem>\n                  </DragOverlay>\n                : null\n            }\n          </DndContext>\n        </Paper>\n\n        <Grid container={true} direction='row' justify='flex-start' alignItems='center' style={{ marginTop: 24 }}>\n          <Button\n            color='primary'\n            variant='text'\n            style={{ marginRight: 24 }}\n            onClick={onClose}\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            variant='contained'\n            onClick={handleSort}\n          >\n            {t('formButtons.save')}\n          </Button>\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default SortBySectionDialog;","var _g, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgRequestPage(_ref, svgRef) {\n  var title = _ref.title,\n      titleId = _ref.titleId,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 20,\n    height: 20,\n    viewBox: \"0 0 20 20\",\n    fill: \"none\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n    clipPath: \"url(#clip0_12379_294628)\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M11.6668 1.66602H5.00016C4.0835 1.66602 3.3335 2.41602 3.3335 3.33268V16.666C3.3335 17.5827 4.0835 18.3327 5.00016 18.3327H15.0002C15.9168 18.3327 16.6668 17.5827 16.6668 16.666V6.66602L11.6668 1.66602ZM12.5002 9.16602H9.16683V9.99935H11.6668C12.1252 9.99935 12.5002 10.3743 12.5002 10.8327V13.3327C12.5002 13.791 12.1252 14.166 11.6668 14.166H10.8335V14.9993H9.16683V14.166H7.50016V12.4993H10.8335V11.666H8.3335C7.87516 11.666 7.50016 11.291 7.50016 10.8327V8.33268C7.50016 7.87435 7.87516 7.49935 8.3335 7.49935H9.16683V6.66602H10.8335V7.49935H12.5002V9.16602Z\",\n    fill: \"#757575\"\n  }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n    id: \"clip0_12379_294628\"\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    width: 20,\n    height: 20,\n    fill: \"white\"\n  })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgRequestPage);\nexport default __webpack_public_path__ + \"static/media/request_page.b04768cd.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport {Button, Chip, CircularProgress, Dialog, DialogContent, Grid, IconButton, Paper, TextField, Tooltip, Typography} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles, useTheme} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { makeSelectHasIsRequestingProduct } from '../../../modules/QuoteModule/selectors';\nimport { Autocomplete } from '@material-ui/lab';\nimport { VirtualizedList } from '../../../pages/FirmDetailPage/OfficesInfo/BrandTags/VirtualizedList';\nimport { fromJS, List, Map } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport CheckIcon from '@material-ui/icons/Check';\nimport { BulkCopySelectedProductsAction, BulkMoveSelectedProductsAction } from '../../../modules/QuoteEditModule/actions';\n\nconst RIGHT_ARROW_ICON_COLUMN_WIDTH = 50;\nconst SECTION_COLUMN = 258;\nconst PRODUCTS_COLUMN = `calc(100% - ${SECTION_COLUMN + RIGHT_ARROW_ICON_COLUMN_WIDTH}px)`;\n\nexport interface ITargetSection {\n  value: string;\n  sectionId: string;\n  sectionIndex: number;\n}\n\nexport interface IBulkMoveSelectedProduct {\n  value: string;\n  label: string;\n  quoteProductId: string;\n  sourceSectionIndex: number;\n}\n\ninterface IBulkCopyDialogProps {\n  open: boolean;\n  onClose: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    width: 1035,\n    maxWidth: '100%',\n    paddingBottom: 12,\n  },\n  container: {\n    border: `1px solid ${theme.palette.grey[400]}`,\n    borderRadius: 8,\n    marginBottom: theme.spacing(2),\n    padding: theme.spacing(1, 2),\n  },\n  multiAutocomplete: {\n    marginBottom: theme.spacing(1),\n  },\n  chip: {\n    margin: 2,\n  },\n  chipContainer: {\n    maxHeight: 408,\n    overflowY: 'auto',\n  },\n}));\n\nconst BulkCopyDialog: React.FC<IBulkCopyDialogProps> = ({\n  open,\n  onClose\n}) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const theme = useTheme();\n  const amplitudeData = useAmplitudeData();\n  const sections = useSelector(quoteFormSelector(['sections']));\n  const hasRawPreSelectedProducts = useSelector(makeSelectHasIsRequestingProduct());\n\n  const [selectedTargetSection, setSelectedTargetSection] = React.useState<IMap<ITargetSection>>(null);\n  const [selectedProducts, setSelectedProducts] = React.useState<List<IMap<IBulkMoveSelectedProduct>>>(fromJS([]));\n\n  const [sectionList, setSectionList] = React.useState(fromJS([]));\n  const [productNumberList, setProductNumberList] = React.useState(fromJS([]));\n\n  const [productNumberInputValue, setProductNumberInputValue] = React.useState('');\n\n  const [isAddingNewSection, setIsAddingNewSection] = React.useState(false);\n  const [newSectionName, setNewSectionName] = React.useState('');\n\n  const [isProcessingBulkCopy, setIsProcessingBulkCopy] = React.useState(false);\n\n  const getAllLists = () => {\n    let newSectionList = fromJS([]);\n    let newProductNumberList = fromJS([]);\n\n    sections?.forEach((section, sectionIndex) => {\n      const sectionTitle = section.get('sectionTitle')?.trim() || t('sectionList.unnamedSectionTitle');\n      const sectionId = section.get('sectionId');\n      newSectionList = newSectionList.push(fromJS({ value: sectionTitle, sectionId, sectionIndex }));\n\n      // let currentUniquePackageIdProductToAdd = -1;\n      // let parentProductIndex = -1;\n      section.get('products', fromJS([])).forEach((product, productIndex) => {\n        const productNumber = product.get('productNumber') || '-';\n\n        if (product.get('id') > 0 && (!product.get('packageId') || !product.get('productIndex'))) {\n            newProductNumberList = newProductNumberList.push(fromJS({\n              value: productNumber,\n              label: `${productNumber} (${sectionTitle})`,\n              quoteProductId: product.get('quoteProductId'),\n              sourceSectionIndex: sectionIndex\n            }));\n        }\n      });\n\n      setSectionList(newSectionList);\n      setProductNumberList(newProductNumberList);\n    });\n  };\n\n  const getPrePopulatedProducts = () => {\n    const prePopulatedProductNumbers = sections?.reduce((acc, section: IMap<any>, sectionIndex: number) => {\n      const sectionTitle = section.get('sectionTitle') || t('sectionList.unnamedSectionTitle');\n      const products = section.get('products');\n      if (products) {\n        return products.reduce((productsAcc, product: IMap<any>) => {\n          if (product.get('id') > 0 && product.get('isRequestingProduct')) {\n            return productsAcc.push(fromJS({\n              value: product.get('productNumber') || '-',\n              label: `${product.get('productNumber') || '-'} (${sectionTitle})`,\n              quoteProductId: product.get('quoteProductId'),\n              sourceSectionIndex: sectionIndex,\n            }));\n          }\n          return productsAcc;\n        }, acc);\n      } else {\n        return acc;\n      }\n    }, fromJS([]));\n\n    setSelectedProducts(prePopulatedProductNumbers);\n  };\n\n\n  React.useEffect(() => {\n    if (open) {\n      getAllLists();\n      if (hasRawPreSelectedProducts) {\n        getPrePopulatedProducts();\n      }\n    } else {\n      setSelectedTargetSection(null);\n      setSelectedProducts(fromJS([]));\n      setProductNumberInputValue('');\n      setIsAddingNewSection(false);\n      setIsProcessingBulkCopy(false);\n    }\n  }, [open]);\n\n  const handleDeleteProductNumber = (index: number) => {\n    setSelectedProducts(selectedProducts.delete(index));\n  };\n\n  const handleAddNewSection = () => {\n    if (newSectionName.trim()) {\n      const newSection = fromJS({\n        value: newSectionName.trim(),\n        sectionId: '',\n        sectionIndex: -1,\n      });\n      setSelectedTargetSection(newSection);\n      setIsAddingNewSection(false);\n      setNewSectionName('');\n    }\n  };\n\n  const handleCopy = () => {\n    setIsProcessingBulkCopy(true);\n    dispatch(new BulkCopySelectedProductsAction({\n      selectedProducts: selectedProducts.reduce((acc, product) => acc.set(product.get('quoteProductId'), product), fromJS({})),\n      targetSection: selectedTargetSection,\n      onSuccess: () => {\n        setIsProcessingBulkCopy(false);\n        onClose();\n      },\n    }));\n  };\n\n  const VirtualizedListComp = (defaultprops, ref) => {\n    return <VirtualizedList ref={ref} {...defaultprops} rowheight={32} />;\n  };\n  const vList = React.forwardRef(VirtualizedListComp);\n\n  return (\n    <Dialog open={open} classes={{ paper: classes.dialogPaper }}>\n      <DialogContent style={{ whiteSpace: 'pre-line'}}>\n        <Grid container={true} alignItems='center' justify='space-between' style={{ marginBottom: 16 }}>\n          <Typography variant='h6'>\n            {t('sectionList.bulkCopyDialog.title')}\n          </Typography>\n          <IconButton size='small' disabled={isProcessingBulkCopy} onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n        <Grid container={true} className={classes.container}>\n          <Grid item={true} container={true} direction='column' style={{ width: PRODUCTS_COLUMN }}>\n            <Typography variant='body1' color='textPrimary'>\n              {t('sectionList.bulkCopyDialog.productNumbersLabel')}\n            </Typography>\n            <Autocomplete\n              className={classes.multiAutocomplete}\n              options={productNumberList.toJS() || []}\n              filterOptions={(options, state) => {\n                const normalizedInput = productNumberInputValue.toLowerCase();\n                const selectedQuoteProductIdsMap = selectedProducts.reduce((acc, product) => {\n                  acc[product.get('quoteProductId')] = 1;\n                  return acc;\n                }, {});\n                return options.filter(option => {\n                  if (normalizedInput) {\n                    return option.value.toLowerCase().includes(normalizedInput) && !selectedQuoteProductIdsMap[option.quoteProductId];\n                  }\n                  return !selectedQuoteProductIdsMap[option.quoteProductId];\n                });\n              }}\n              ListboxComponent={vList as React.ComponentType<React.HTMLAttributes<HTMLElement>>}\n              value={null}\n              noOptionsText={t('generalDropdown.noOptions')}\n              onChange={(e, value) => {\n                setSelectedProducts(selectedProducts.push(fromJS(value)));\n              }}\n              inputValue={productNumberInputValue}\n              onInputChange={(e, value, reason) => {\n                if (reason === 'reset') {\n                  setProductNumberInputValue('');\n                } else {\n                  setProductNumberInputValue(value);\n                }\n              }}\n              blurOnSelect={true}\n              getOptionLabel={(option) => option?.label || ''}\n              renderInput={(params) => <TextField placeholder={t('sectionList.bulkCopyDialog.productNumbersPlaceholder')} style={{ width: '100%' }} {...params} />}\n              renderOption={(option) => option && <Typography>{option.label}</Typography>}\n            />\n          </Grid>\n          <Grid item={true} container={true} justify='center' alignItems='center' style={{ width: RIGHT_ARROW_ICON_COLUMN_WIDTH }} >\n            <ArrowForwardIcon color='primary' style={{ width: 24 }} />\n          </Grid>\n          <Grid item={true} container={true} direction='column' style={{ width: SECTION_COLUMN }}>\n            <Typography variant='body1' color='textPrimary'>\n              {t('sectionList.bulkCopyDialog.targetSectionLabel')}\n            </Typography>\n            {\n              isAddingNewSection\n                ? <Grid container={true} direction='row' wrap='nowrap'>\n                    <TextField\n                      value={newSectionName}\n                      onChange={(e) => setNewSectionName(e.target.value)}\n                    />\n                    <IconButton size='small' onClick={() => setIsAddingNewSection(false)}>\n                      <CloseIcon />\n                    </IconButton>\n                    <IconButton size='small' disabled={newSectionName.trim() === ''} onClick={handleAddNewSection}>\n                      <CheckIcon />\n                    </IconButton>\n                  </Grid>\n                : <Autocomplete\n                    options={sectionList.toJS() || []}\n                    onChange={(e, value) => {\n                      setSelectedTargetSection(fromJS(value));\n                    }}\n                    value={selectedTargetSection?.toJS() || null}\n                    noOptionsText={t('generalDropdown.noOptions')}\n                    blurOnSelect={true}\n                    disableClearable={true}\n                    getOptionLabel={(option) => option?.value || ''}\n                    renderInput={(params) => {\n                      return <Tooltip title={selectedTargetSection?.get('value') || ''}>\n                        <TextField placeholder={t('sectionList.bulkCopyDialog.targetSectionPlaceholder')} style={{ width: '100%' }} {...params} />\n                      </Tooltip>;\n                    }}\n                    renderOption={(option) => option && <Typography>{option.value}</Typography>}\n                    PaperComponent={({ children, ...props }) => {\n                      return <Paper {...props} onMouseDown={e => e.preventDefault()} style={{ fontSize: '1em' }}>\n                        {children}\n                        <Button\n                          style={{ border: 'none', borderRadius: 0 }}\n                          variant='outlined'\n                          color='primary'\n                          fullWidth={true}\n                          onClick={(e) => {\n                            e.stopPropagation();\n                            e.preventDefault();\n                            setNewSectionName(t('sectionList.bulkCopyDialog.defaultNewSectionName'));\n                            setIsAddingNewSection(true);\n                          }}\n                        >\n                          {t('sectionList.bulkCopyDialog.newSectionButton')}\n                        </Button>\n                      </Paper>;\n                    }}\n                  />\n            }\n          </Grid>\n          {\n            selectedProducts.size > 0 && (\n              <Grid container={true} className={classes.chipContainer} style={{ width: PRODUCTS_COLUMN }}>\n                { selectedProducts.map((selectedProduct, index) => <Chip key={index} className={classes.chip} label={selectedProduct.get('label')} onDelete={() => handleDeleteProductNumber(index)} />) }\n              </Grid>\n            )\n          }\n        </Grid>\n\n        <Grid container={true} direction='row' justify='flex-start' alignItems='center' style={{ marginTop: 32 }}>\n          <Button\n            color='primary'\n            variant='text'\n            disabled={isProcessingBulkCopy}\n            style={{ marginRight: 24 }}\n            onClick={onClose}\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            variant='contained'\n            disabled={isProcessingBulkCopy || !selectedTargetSection || selectedProducts.size === 0}\n            style={{ marginRight: 24 }}\n            onClick={handleCopy}\n          >\n            {t('formButtons.copy')}\n          </Button>\n          {\n            isProcessingBulkCopy && (\n              <CircularProgress size={24} />\n            )\n          }\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default BulkCopyDialog;","import React from 'react';\nimport {\n  Button,\n  Dialog,\n  DialogContent,\n  Grid,\n  IconButton,\n  TextField,\n  Typography,\n} from '@material-ui/core';\nimport { Theme } from '@material-ui/core/';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport { useTranslation } from 'react-i18next';\nimport { Autocomplete } from '@material-ui/lab';\nimport CloseIcon from '@material-ui/icons/Close';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { fromJS, List } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { QuoteSectionTemplate } from '../../../models';\nimport { useDispatch } from 'react-redux';\nimport { UpdateAllSectionTemplateAction } from '../../../modules/QuoteEditModule/actions';\n\ninterface IBulkTemplateUpdateDialogProps {\n  open: boolean;\n  onClose: () => void;\n  quoteSectionTemplates?: Map<string, IMap<any>>;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    width: 600,\n    maxWidth: '100%',\n    paddingBottom: 12,\n  },\n  warningContainer: {\n    marginTop: theme.spacing(3),\n    marginBottom: theme.spacing(1),\n  },\n  warningIcon: {\n    color: theme.palette.warning.main,\n    marginRight: theme.spacing(1),\n  },\n}));\n\nconst BulkTemplateUpdateDialog: React.FC<IBulkTemplateUpdateDialogProps> = ({\n  open,\n  onClose,\n  quoteSectionTemplates,\n}) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const theme = useTheme();\n\n  const [selectedTemplate, setSelectedTemplate] = React.useState<IMap<QuoteSectionTemplate>>(null);\n\n  React.useEffect(() => {\n    if (!open) {\n      setSelectedTemplate(null);\n    }\n  }, [open]);\n\n  const templateOptions = React.useMemo(\n    () => (quoteSectionTemplates ? Array.from(quoteSectionTemplates.values()).map((template) => template.toJS()) : []),\n    [quoteSectionTemplates],\n  );\n\n  const handleChangeTemplate = () => {\n    dispatch(new UpdateAllSectionTemplateAction({ template: selectedTemplate }));\n    onClose();\n  };\n\n  return (\n    <Dialog open={open} classes={{ paper: classes.dialogPaper }}>\n      <DialogContent>\n        <Grid container={true} alignItems='center' justify='space-between' style={{ marginBottom: 16 }}>\n          <Typography variant='h6'>\n            {t('sectionList.bulkTemplateUpdateDialog.title')}\n          </Typography>\n          <IconButton size='small' onClick={onClose}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n\n        <Autocomplete\n          options={templateOptions}\n          value={selectedTemplate?.toJS() || null}\n          onChange={(e, value) => {\n            setSelectedTemplate(value ? fromJS(value) : null);\n          }}\n          getOptionLabel={(option) => option?.templateTitle || ''}\n          getOptionSelected={(option, value) => option?.id === value?.id}\n          renderInput={(params) => (\n            <TextField\n              {...params}\n              placeholder={t('sectionList.bulkTemplateUpdateDialog.selectTemplatePlaceholder')}\n              style={{ width: '100%' }}\n            />\n          )}\n          renderOption={(option) => option && <Typography>{option.templateTitle}</Typography>}\n          noOptionsText={t('generalDropdown.noOptions')}\n        />\n\n        <Grid container={true} alignItems='center' wrap='nowrap' className={classes.warningContainer}>\n          <WarningIcon className={classes.warningIcon} />\n          <Typography variant='body2' color='textPrimary'>\n            {t('sectionList.bulkTemplateUpdateDialog.warning')}\n          </Typography>\n        </Grid>\n\n        <Grid container={true} direction='row' justify='flex-end' alignItems='center' style={{ marginTop: 16 }}>\n          <Button\n            color='primary'\n            variant='text'\n            onClick={onClose}\n            style={{ marginRight: theme.spacing(2) }}\n          >\n            {t('formButtons.cancel')}\n          </Button>\n          <Button\n            color='primary'\n            variant='contained'\n            disabled={!selectedTemplate}\n            onClick={handleChangeTemplate}\n          >\n            {t('sectionList.bulkTemplateUpdateDialog.changeTemplateButton')}\n          </Button>\n        </Grid>\n      </DialogContent>\n    </Dialog>\n  );\n};\n\nexport default BulkTemplateUpdateDialog;\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z\"\n}), 'RemoveCircle');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n}), 'RemoveCircleOutline');","import React from 'react';\nimport {\n  TextField,\n  TextFieldProps,\n} from '@material-ui/core';\nimport { debounce } from 'lodash';\nimport useFocused from '../../hooks/useFocused';\nimport CharCountAdornment from '../CharCountAdornment';\n\nconst DebouncedTextField = ({\n  onChange,\n  value = '',\n  delay,\n  shouldComponentUpdate = null, // trigger component update if needed when value changed\n  showCharCount = false, // when true, show the live character count while focused\n  onFocus,\n  onBlur,\n  InputProps,\n  inputProps,\n  ...rest\n}: { value: string, delay?: number, shouldComponentUpdate?: any, showCharCount?: boolean } & TextFieldProps) => {\n  const prevValue = React.useRef<string>();\n\n  const [stateValue, setStateValue] = React.useState(value);\n  const { focused, handleFocus, handleBlur } = useFocused(onFocus, onBlur);\n\n  const debouncedOnChange = React.useCallback(debounce(onChange, delay || 1000), [shouldComponentUpdate, onChange]);\n\n  const handleOnChange = React.useCallback(e => {\n    setStateValue(e.target.value);\n    debouncedOnChange(e.target.value);\n  }, [shouldComponentUpdate]);\n\n  React.useLayoutEffect(() => {\n    if (value !== stateValue) {\n      setStateValue(value);\n    }\n  }, [shouldComponentUpdate, value]);\n\n  React.useEffect(() => {\n    prevValue.current = value;\n  });\n\n  const currentValue = value !== prevValue.current ? value : stateValue;\n  const inputPropsWithCount = showCharCount && focused\n    ? {\n      ...InputProps,\n      endAdornment: (\n        <React.Fragment>\n          {InputProps && InputProps.endAdornment}\n          <CharCountAdornment count={(currentValue || '').length} />\n        </React.Fragment>\n      ),\n    }\n    : InputProps;\n\n  return <TextField\n    value={currentValue}\n    onChange={handleOnChange}\n    onFocus={showCharCount ? handleFocus : onFocus}\n    onBlur={showCharCount ? handleBlur : onBlur}\n    InputProps={inputPropsWithCount}\n    inputProps={inputProps}\n    {...rest}\n  />;\n};\n\nexport default React.memo(DebouncedTextField);\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"\n}), 'ChevronRight');","import * as React from 'react';\nimport {\n  ListItemIcon,\n  ListItemSecondaryAction,\n  Menu,\n  MenuItem,\n  Tooltip,\n} from '@material-ui/core';\nimport { ChevronRight } from '@material-ui/icons';\n\nconst ReusableMenu = ({\n  anchorEl, setAnchorEl, menuContent = [\n    { label: '-' }\n  ]\n}) => {\n  const [localAnchorEl, setLocalAnchorEl] = React.useState(null);\n  const [currentMenuContent, setCurrentMenuContent] = React.useState([]);\n\n  const sectionRef = React.useRef(null);\n\n  const handleClose = ({\n    onChange = () => null,\n    keepOpen\n  }: { onChange?: (e, i) => void, keepOpen?: boolean } = { onChange: () => null }, i?) => e => {\n    e.stopPropagation();\n    if (!keepOpen) {\n      setAnchorEl(null);\n      setCurrentMenuContent([]);\n    }\n    onChange(e, i);\n  };\n\n  React.useEffect(() => {\n    if (localAnchorEl === null) {\n      setAnchorEl(null);\n    }\n  }, [localAnchorEl]);\n\n\n  return (\n    <Menu\n      anchorEl={anchorEl}\n      keepMounted={false}\n      open={Boolean(anchorEl)}\n      onClose={handleClose()}\n    >\n      {menuContent.map((\n        menuItem: {\n          sectionEnd?: boolean,\n          label: string,\n          onChange?: () => void,\n          keepOpen?: boolean,\n          menuItemProps?: any,\n          menuContent?: any,\n          icon?: any,\n          tooltipTitle?: string\n        } = {\n            label: '',\n            onChange: () => null,\n            keepOpen: false\n          }, i) => {\n        const {\n          sectionEnd,\n          label,\n          icon,\n          tooltipTitle,\n          onChange,\n          keepOpen,\n          menuItemProps,\n          menuContent: _menuContent\n        } = menuItem;\n\n        const child = _menuContent ?\n          <MenuItem key={i} onClick={handleClose({\n            keepOpen: true,\n            onChange: e => { setLocalAnchorEl(e.currentTarget); setCurrentMenuContent(_menuContent); } // enhancement for more than one menu item contain sub menu items\n          }, i)} {...menuItemProps} divider={sectionEnd} style={{ alignContent: 'center' }}>\n            {Boolean(icon) && <ListItemIcon>{icon}</ListItemIcon>}\n            {label}\n            <ListItemSecondaryAction>\n              <ReusableMenu anchorEl={localAnchorEl} setAnchorEl={setLocalAnchorEl} menuContent={currentMenuContent} />\n              <ChevronRight style={{\n                // using same style as ListItemSecondaryAction\n                // child inside ListItemSecondaryAction will not vertically align\n                position: 'absolute',\n                right: -16,\n                top: '50%',\n                transform: 'translateY(-50%)',\n              }} />\n            </ListItemSecondaryAction>\n          </MenuItem>\n          :\n          <MenuItem key={i} onClick={handleClose(menuItem, i)} {...menuItemProps} divider={sectionEnd}>\n            {Boolean(icon) && <ListItemIcon>{icon}</ListItemIcon>}\n            {label}\n          </MenuItem>\n          ;\n        return Boolean(tooltipTitle) ?\n          <Tooltip key={i} title={tooltipTitle}>\n            <span>{child}</span>\n          </Tooltip>\n          :\n          child;\n      })}\n    </Menu>\n  );\n};\n\nexport default ReusableMenu;\n","import * as React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Map } from 'immutable';\nimport { makeSelectSections } from '../../../modules/QuoteModule/selectors';\nimport ReusableMenu from './ReusableMenu';\n\nconst SectionsMenu_ = ({ anchorEl, setAnchorEl, menuContent }: any) => {\n  const sections = useSelector(makeSelectSections());\n  const menuContent2 = sections.reduce((acc, section, i) => {\n    const sectionTitle = (section || Map()).get('sectionTitle') || '';\n    const excluded = (section || Map()).getIn(['uiData', 'excluded']) || false;\n\n    const sectionIndex = menuContent?.sectionIndex;\n    const callback = Boolean(menuContent?.callback) ? () => menuContent?.callback(i, excluded) : () => menuContent(i, excluded);\n\n    acc.push({\n      label: sectionTitle,\n      onChange: callback,\n      menuItemProps: {\n        disabled: i === sectionIndex\n      }\n    });\n    return acc;\n  }, []);\n\n  return <ReusableMenu anchorEl={anchorEl} setAnchorEl={setAnchorEl} menuContent={menuContent2} />;\n};\n\nconst SectionsMenu = React.memo(SectionsMenu_);\n\nexport default SectionsMenu;\n","import * as React from 'react';\nimport { IconButton, IconButtonProps } from '@material-ui/core';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\n\nconst _ExpandIcon = ({ onClick, expanded, ...rest }: { onClick: any, expanded: any } & IconButtonProps) => <IconButton\n  onClick={onClick} size='small' {...rest}>\n  {expanded ? <ExpandLess /> : <ExpandMore />}\n</IconButton>;\n\nconst ExpandIcon = React.memo(_ExpandIcon);\n\nexport default ExpandIcon;\n","import { ISpecToQuote } from '../../modules/QuoteModule/reducer';\n\nexport enum FEEDBACK_VALUES {\n  POSITIVE = 'positive',\n  NEGATIVE = 'negative'\n}\n\nexport interface ISpecToQuoteLinkDataInForm extends ISpecToQuote {\n  // originalDrawingIndex: number;\n  // originalProductIndex: number;\n  linked: boolean;\n}\n\nexport interface IFeedback {\n  brand: string;\n  category: string | null;\n  feedback: FEEDBACK_VALUES.POSITIVE | FEEDBACK_VALUES.NEGATIVE;\n  firmProductId: number | null;\n  packageId: number | null;\n  productNumber: string;\n}\n","import React from 'react';\nimport {Typography} from '@material-ui/core';\nimport {Link} from 'react-router-dom';\n\nimport SendPricingRequestsWidgetUtil\nfrom '../../../containers/Dashboard/WidgetLoader/SendPricingRequestsWidget/SendPricingRequestsWidgetUtil';\n\nexport const importedPriceLink = (t, bidResponse) => {\n  return (\n    <>\n      <Typography variant='body2' noWrap={true} style={{ marginRight: 8 }}>\n        {t('pricingRequests.pricingImportedMenu')}\n      </Typography>\n      <Link color='primary' to={SendPricingRequestsWidgetUtil.getBidDetailUrl(bidResponse)}>\n        <Typography variant='body2' color='primary' noWrap={true}>\n          {'BI-' + bidResponse.id}\n        </Typography>\n      </Link>\n    </>\n  );\n};\n","import * as React from 'react';\nimport {\n  Grid,\n  IconButton,\n  InputAdornment,\n  TableCell,\n  TextField,\n  Tooltip,\n  useTheme,\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport LabelSharpIcon from '@material-ui/icons/LabelSharp';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { ReactComponent as CustomRequestPageIcon } from '../../../images/request_page.svg';\nimport { DecrementFocusedFieldsAction, IncrementFocusedFieldsAction } from '../../../modules/QuoteEditModule/actions';\nimport { importedPriceLink } from './SectionListCmponentUtil';\nimport useStyles from './useStyles';\n\nconst _CellThing = ({\n  id,\n  focusCellRef,\n  setCellRef,\n  _setUpdateValues,\n  _onBlurUpdateValues,\n  value,\n  templateIndex,\n  cellId,\n  disabled,\n  parseInput,\n  displayPoaTag,\n  isUpdated,\n  isUpdatedByRate,\n  appliedConversion,\n  productStatus,\n  importedPricingResponse,\n  openMenu,\n}: {\n  id: string,\n  focusCellRef: any,\n  setCellRef: any,\n  _setUpdateValues: (...args: any) => any,\n  _onBlurUpdateValues: (...args: any) => any,\n  value: string | number,\n  templateIndex: number,\n  cellId: string,\n  disabled?: boolean,\n  parseInput: (x: string) => string,\n  displayPoaTag,\n  isUpdated: boolean,\n  isUpdatedByRate: boolean,\n  appliedConversion: any,\n  productStatus: string\n  importedPricingResponse: any,\n  openMenu: any,\n}) => {\n  const prevValue = React.useRef<string | number>();\n  // True between the user's first keystroke in this cell and either blur or\n  // unmount. While true, this cell's cellId is in editingCellIds — paired with\n  // the matching remove that RowThing.handleOnChange dispatches on the rounded\n  // commit (applyRounding=true). Just being focused doesn't add; the user can\n  // tab between cells without typing and auto-save can still fire if pending.\n  const isDirty = React.useRef(false);\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const [stateValue, setStateValue] = React.useState(value);\n  const [width, setWidth] = React.useState(0);\n  const [show, setShow] = React.useState(true);\n\n  React.useLayoutEffect(() => {\n    if (show) {\n      const width_ = document\n        .getElementById(id + '-span')\n        ?.getBoundingClientRect().width;\n      setWidth(width_ + ((displayPoaTag + !disabled) ? 25 : 0));\n      // setWidth(width_);\n      setShow(false);\n    }\n  }, [show]);\n\n  const onChange = React.useCallback(e => {\n    // Only the FIRST keystroke since this cell was last clean adds the cellId\n    // to editingCellIds — subsequent keystrokes are no-ops on the Set. The\n    // release happens on the rounded commit (RowThing dispatches the matching\n    // remove per blurred-entry) or on unmount if the user never blurred.\n    if (!isDirty.current && cellId) {\n      isDirty.current = true;\n      dispatch(new IncrementFocusedFieldsAction({ cellId }));\n    }\n    e.persist();\n    const start = e.target.selectionStart;\n    const end = e.target.selectionEnd;\n    const values = parseInput ? parseInput(e.target.value) : e.target.value;\n    const multiValueCorrection = String(stateValue).length - values.length <= 1 ? 1 : 0;\n    setStateValue(values);\n    _setUpdateValues({ values, templateIndex, cellId });\n    if (values !== e.target.value) {\n      window.requestAnimationFrame(() => {\n        e.target.selectionStart = start - multiValueCorrection;\n        e.target.selectionEnd = end - multiValueCorrection;\n      });\n    }\n    setShow(true);\n  }, [stateValue, parseInput, templateIndex, cellId]);\n\n  const onBlur = React.useCallback(() => {\n    if (isDirty.current) {\n      // Hand off the editing-hold to RowThing's rounded-commit path. Don't\n      // remove the cellId here: RowThing.handleOnChange dispatches the matching\n      // remove once the rounded `change` is in the store, which closes the\n      // un-rounded-value race. Clear isDirty so a re-focus + type starts fresh.\n      isDirty.current = false;\n      _onBlurUpdateValues({ values: stateValue, templateIndex, cellId });\n    }\n  }, [stateValue, templateIndex, cellId]);\n\n  const onFocus = React.useCallback(e => {\n    e.currentTarget.scrollIntoView({ behavior: 'smooth', block: 'center' });\n  }, []);\n\n  // Safety net: if the cell unmounts while still holding (user typed but never\n  // blurred — e.g. section deleted mid-edit), remove its cellId. After a blur,\n  // ownership has already passed to RowThing's rounded commit; if RowThing's\n  // own unmount cleanup runs in the same tick, Set.remove is idempotent so the\n  // double-fire is safe.\n  React.useEffect(() => () => {\n    if (isDirty.current && cellId) {\n      isDirty.current = false;\n      dispatch(new DecrementFocusedFieldsAction({ cellId }));\n    }\n  }, []);\n\n  const editMode = false;\n  const cellRef = React.useRef<Element>();\n  React.useEffect(() => {\n    setCellRef(templateIndex + 1, cellRef);\n  }, [templateIndex]);\n\n  const onKeyDown = e => {\n    if (e.keyCode === 38 || e.keyCode === 40) {\n      focusCellRef(templateIndex, e.keyCode);\n    }\n  };\n\n  React.useEffect(() => {\n    prevValue.current = value;\n  });\n\n  React.useEffect(() => {\n    if (value !== stateValue) {\n      setStateValue(value);\n      setShow(true);\n    }\n  }, [value]);\n\n  const endAdornment = isUpdated\n    ? productStatus === 'discontinued'\n      ? <Tooltip title={t('sectionList.discontinuedProduct')}>\n          <InputAdornment position='end'>\n            <WarningIcon style={{ color: theme.palette.error.main }} />\n          </InputAdornment>\n        </Tooltip>\n      : <Tooltip title={t('sectionList.updatedCell')}>\n          <InputAdornment position='end'>\n            <LabelSharpIcon style={{ color: theme.palette.warning.main, transform: 'rotate(180deg)' }} />\n          </InputAdornment>\n        </Tooltip>\n    : null;\n\n  return <TableCell>\n    {show && (\n      <span\n        id={id + '-span'}\n        style={{\n          display: 'inline-block',\n          maxWidth: '100%',\n          whiteSpace: 'pre',\n          overflow: 'hidden'\n        }}\n      >\n        {value !== prevValue.current ? value : stateValue}\n      </span>\n    )}\n    <Grid container={true} alignItems='center' wrap='nowrap'>\n    {\n      // do it in the stupid way until find a solution\n      isUpdatedByRate && appliedConversion ?\n        <Tooltip\n          title={(\n            <div>\n              <span style={{ display: 'block' }}>{'Pricing updated based on currency conversion rate:'}</span>\n              <span>{`1 ${appliedConversion.get('fromCurrency')} = ${appliedConversion.get('rate')} ${appliedConversion.get('toCurrency')}`}</span>\n            </div>\n          )}\n        >\n          <TextField\n            fullWidth={true}\n            className={isUpdatedByRate ? classes.highlightedTextFieldInput : classes.textFieldInput}\n            onKeyDown={onKeyDown}\n            value={value !== prevValue.current ? (value || '') : (stateValue || '')}\n            onChange={onChange}\n            onBlur={onBlur}\n            InputProps={{\n              // todo: how to work with tooltip only for the text inside input\n              // inputComponent: React.memo(({ inputRef, ...rest }) => <MemoCustomInput inputRef={inputRef} isUpdatedByRate={isUpdatedByRate} appliedConversion={appliedConversion} {...rest} />),\n              disableUnderline: editMode || disabled,\n              readOnly: editMode,\n              classes: {\n                root: classes.textFieldRoot\n              },\n              endAdornment,\n            }}\n            inputProps={{ id, style: { width, minWidth: '100%', textAlign: 'right', color: theme.palette.text.primary } }}\n            onFocus={onFocus}\n            disabled={disabled}\n            inputRef={cellRef}\n          />\n        </Tooltip>\n        :\n        <>\n          <TextField\n            fullWidth={true}\n            className={isUpdatedByRate ? classes.highlightedTextFieldInput : classes.textFieldInput}\n            onKeyDown={onKeyDown}\n            value={value !== prevValue.current ? (value || '') : (stateValue || '')}\n            onChange={onChange}\n            onBlur={onBlur}\n            InputProps={{\n              // todo: how to work with tooltip only for the text inside input\n              // inputComponent: React.memo(({ inputRef, ...rest }) => <MemoCustomInput inputRef={inputRef} isUpdatedByRate={isUpdatedByRate} appliedConversion={appliedConversion} {...rest} />),\n              disableUnderline: editMode || disabled,\n              readOnly: editMode,\n              classes: {\n                root: classes.textFieldRoot\n              },\n              endAdornment,\n            }}\n            inputProps={{ id, style: { width, minWidth: '100%', textAlign: 'right', color: theme.palette.text.primary } }}\n            onFocus={onFocus}\n            disabled={disabled}\n            inputRef={cellRef}\n          />\n          {(importedPricingResponse) &&\n            <IconButton\n              size='small'\n              onClick={openMenu([\n                {\n                  label: importedPriceLink(t, importedPricingResponse?.bidResponse),\n                }\n              ])}\n            >\n              <CustomRequestPageIcon fontSize='small'/>\n            </IconButton>\n          }\n        </>\n    }\n    {\n      displayPoaTag && <span className={classes.poaTag}>{'P.O.A.'}</span>\n    }\n    </Grid>\n  </TableCell>;\n};\n\nconst CellThing = React.memo(_CellThing);\n\nexport default CellThing;\n","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(React.Fragment, null, React.createElement(\"defs\", null, React.createElement(\"path\", {\n  id: \"a\",\n  d: \"M0 0h24v24H0V0z\"\n})), React.createElement(\"path\", {\n  d: \"M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z\"\n})), 'CompareArrows');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M10.59 9.17L6.12 4.7a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41l4.46 4.46 1.42-1.4zm4.76-4.32l1.19 1.19L4.7 17.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L17.96 7.46l1.19 1.19c.31.31.85.09.85-.36V4.5c0-.28-.22-.5-.5-.5h-3.79c-.45 0-.67.54-.36.85zm-.52 8.56l-1.41 1.41 3.13 3.13-1.2 1.2c-.31.31-.09.85.36.85h3.79c.28 0 .5-.22.5-.5v-3.79c0-.45-.54-.67-.85-.35l-1.19 1.19-3.13-3.14z\"\n}), 'ShuffleRounded');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M13 13v8h8v-8h-8zM3 21h8v-8H3v8zM3 3v8h8V3H3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66-5.66-5.65z\"\n}), 'Widgets');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M21 3L3 10.53v.98l6.84 2.65L12.48 21h.98L21 3z\"\n}), 'NearMe');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(React.Fragment, null, React.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), React.createElement(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z\"\n})), 'CancelOutlined');","import React, { useState, useMemo, memo } from 'react';\nimport {\n  Dialog,\n  DialogTitle,\n  DialogContent,\n  Box,\n  Typography,\n  IconButton,\n  Table,\n  TableBody,\n  TableCell,\n  TableContainer,\n  TableHead,\n  TableRow,\n  Collapse,\n  Tooltip\n} from '@material-ui/core';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport BuildIcon from '@material-ui/icons/Build';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport QuoteFormUtil, { IPricingColumn, IPricingRow } from '../QuoteFormUtil';\nimport { quoteFormSelector } from '../../../modules/QuoteEditModule/selectors';\nimport { makeSelectSpecProduct } from '../../../modules/QuoteModule/selectors';\nimport { AI_IDENTIFIED_PRODUCT_ID } from '../../../constants';\nimport { PRODUCT_DRAWER_ID } from '../../ProductDrawer';\nimport { makeSelectOverlayComponent } from '../../../modules/ApplicationModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  dialogPaper: {\n    maxWidth: '90vw',\n    width: '100%'\n  },\n  dialogTitle: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    padding: theme.spacing(2, 3)\n  },\n  productInfoBar: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: theme.spacing(1, 3, 2, 3),\n    flexWrap: 'wrap'\n  },\n  productInfoItem: {\n    display: 'flex',\n    alignItems: 'center',\n    marginRight: theme.spacing(4)\n  },\n  productInfoIcon: {\n    color: theme.palette.text.secondary,\n    fontSize: 18,\n    marginRight: theme.spacing(1)\n  },\n  productInfoLabel: {\n    color: theme.palette.text.secondary,\n    fontWeight: 500,\n    fontSize: 14,\n    marginRight: theme.spacing(1)\n  },\n  productInfoValue: {\n    fontSize: 14,\n    borderBottom: '1px solid ' + theme.palette.text.primary,\n    paddingBottom: 2\n  },\n  tableContainer: {\n    marginBottom: theme.spacing(2),\n    overflowX: 'auto'\n  },\n  table: {\n    border: '1px solid #C4C4C4',\n    borderRadius: 8,\n    borderCollapse: 'separate',\n    overflow: 'hidden',\n    tableLayout: 'fixed'\n  },\n  headerCell: {\n    fontWeight: 600,\n    fontSize: 12,\n    color: theme.palette.text.secondary,\n    borderBottom: '1px solid #C4C4C4',\n    padding: theme.spacing(1, 2)\n  },\n  bodyCell: {\n    fontSize: 13,\n    padding: theme.spacing(1.5, 2),\n    borderBottom: '1px solid #E0E0E0',\n    backgroundColor: '#FAFAFA'\n  },\n  pricingRequestNumber: {\n    color: '#E67E22',\n    fontWeight: 500,\n    cursor: 'pointer'\n  },\n  importPricingAction: {\n    color: '#E67E22',\n    fontWeight: 600,\n    fontSize: 13,\n    textTransform: 'uppercase',\n    cursor: 'pointer',\n    whiteSpace: 'nowrap',\n    '&:hover': {\n      textDecoration: 'underline'\n    }\n  },\n  fromCell: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    maxWidth: 168\n  },\n  expandButton: {\n    padding: 4\n  },\n  expandedContent: {\n    display: 'flex',\n    padding: theme.spacing(1, 2, 2, 6)\n  },\n  expandedLabel: {\n    color: theme.palette.text.secondary,\n    fontSize: 13,\n    fontWeight: 500,\n    minWidth: 80\n  },\n  expandedValue: {\n    fontSize: 13\n  },\n  noBorderBottom: {\n    borderBottom: 'none',\n    backgroundColor: '#FAFAFA'\n  },\n  expandedRow: {\n  },\n  expandCellBody: {\n    width: 40,\n    padding: '4px 8px'\n  },\n  expandedCollapseCell: {\n    padding: 0\n  },\n  colExpand: {\n    width: 40\n  },\n  colPricingRequestNumber: {\n    width: 120,\n    maxWidth: 120\n  },\n  colFrom: {\n    width: 200,\n    maxWidth: 200\n  },\n  colSupplierProductNumber: {\n    width: 180,\n    maxWidth: 180\n  },\n  colValue: {\n    minWidth: 90\n  },\n  colAction: {\n    width: 180\n  },\n  importAllButton: {\n    color: '#E67E22',\n    fontWeight: 600,\n    fontSize: 12,\n    textTransform: 'uppercase',\n    cursor: 'pointer',\n    whiteSpace: 'nowrap',\n    border: '1.5px solid #E67E22',\n    borderRadius: 16,\n    padding: '4px 14px',\n    '&:hover': {\n      backgroundColor: 'rgba(230, 126, 34, 0.08)'\n    }\n  }\n}));\n\ninterface IPricingComparisonProps {\n  quoteId: number;\n  quoteProductId: string;\n  linkBidResponseId: number;\n  open: boolean;\n  invitationResponses: any[];\n  sectionIndex: number;\n  onClose: () => void;\n  onImportPricing?: (bidResponseId: number, bidResponseProductIds: number[]) => void;\n}\n\nconst PricingComparisonRow = memo(({\n  row,\n  columns,\n  onImportPricing\n}: {\n  row: IPricingRow;\n  columns: IPricingColumn[];\n  onImportPricing?: (bidResponseId: number, bidResponseProductIds: number[]) => void;\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const [expanded, setExpanded] = useState(false);\n\n  return (\n    <>\n      <TableRow>\n        <TableCell className={`${expanded ? classes.noBorderBottom : classes.bodyCell} ${classes.expandCellBody}`}>\n          <IconButton className={classes.expandButton} size='small' onClick={() => setExpanded(!expanded)}>\n            {expanded ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\n          </IconButton>\n        </TableCell>\n        <TableCell className={expanded ? classes.noBorderBottom : classes.bodyCell}>\n          <span className={classes.pricingRequestNumber}>{row.pricingRequestNumber}</span>\n        </TableCell>\n        <TableCell className={expanded ? classes.noBorderBottom : classes.bodyCell}>\n          <Tooltip title={row.from} placement='top'>\n            <div className={classes.fromCell}>{row.from}</div>\n          </Tooltip>\n        </TableCell>\n        <TableCell className={expanded ? classes.noBorderBottom : classes.bodyCell}>{row.supplierProductNumber}</TableCell>\n        {columns.map((col) => (\n          <TableCell key={col.key} className={expanded ? classes.noBorderBottom : classes.bodyCell}>\n            {row.values[col.key] ?? '-'}\n          </TableCell>\n        ))}\n        {onImportPricing && (\n          <TableCell className={expanded ? classes.noBorderBottom : classes.bodyCell}>\n            <span className={classes.importPricingAction} onClick={() => onImportPricing(row.bidResponseId, [row.id])}>\n              {t('pricingRequests.importPricingAction')}\n            </span>\n          </TableCell>\n        )}\n      </TableRow>\n      <TableRow className={expanded ? classes.expandedRow : undefined}>\n        <TableCell className={classes.expandedCollapseCell} colSpan={columns.length + 4 + (onImportPricing ? 1 : 0)}>\n          <Collapse in={expanded} timeout='auto' unmountOnExit={true}>\n            <Box className={classes.expandedContent}>\n              <Box flex={1}>\n                <Typography className={classes.expandedLabel}>{t('quoteDetail.productDescription')}:</Typography>\n                <Typography className={classes.expandedValue}>{row.description || ''}</Typography>\n              </Box>\n              <Box flex={1}>\n                <Typography className={classes.expandedLabel}>{t('noteWidget.notes')}:</Typography>\n                <Typography className={classes.expandedValue}>{row.notes || ''}</Typography>\n              </Box>\n            </Box>\n          </Collapse>\n        </TableCell>\n      </TableRow>\n    </>\n  );\n});\n\nconst PricingComparison = memo(({\n  quoteId,\n  quoteProductId,\n  linkBidResponseId,\n  open,\n  invitationResponses,\n  sectionIndex,\n  onClose,\n  onImportPricing\n}: IPricingComparisonProps) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const pricingGroups = useMemo(() => QuoteFormUtil.buildPricingGroups(invitationResponses, quoteProductId), [invitationResponses, quoteProductId]);\n\n  const sectionProducts = useSelector(quoteFormSelector(['sections', sectionIndex, 'products']));\n  const productIndex = sectionProducts?.findIndex((p: any) => p.get('quoteProductId') === quoteProductId) ?? -1;\n  const product = productIndex >= 0 ? sectionProducts.get(productIndex) : null;\n  const sectionTitle = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionTitle']));\n  const specId = useSelector(quoteFormSelector(['createdFromSpecId']));\n  const specProductId = product?.getIn(['specToQuoteValues', 'specProductId']);\n  const specProduct = useSelector(makeSelectSpecProduct(specId, specProductId, sectionIndex, productIndex));\n  const isAiIdentifiedProduct = specProduct?.get('id') === AI_IDENTIFIED_PRODUCT_ID;\n\n  const specProductNumber = isAiIdentifiedProduct\n    ? !!specProduct?.get('identifiedProductNumber') ? specProduct?.get('identifiedProductNumber') : '-'\n    : specProduct?.get('productNumber');\n  const specProductBrand = isAiIdentifiedProduct\n    ? !!specProduct?.get('identifiedBrand') ? specProduct?.get('identifiedBrand') : '-'\n    : specProduct?.get('brand');\n\n  const selectProductDrawerOpen = useMemo(() => makeSelectOverlayComponent(PRODUCT_DRAWER_ID), []);\n  const isProductDrawerOpen = useSelector(selectProductDrawerOpen);\n\n  const productInfo = {\n    sectionTitle: sectionTitle || '',\n    productNumber: specProductNumber || product?.get('productNumber') || '',\n    manufacturer: specProductBrand || product?.getIn(['manufacturer', 'manufacturerName']) || product?.get('brand') || ''\n  };\n\n  return (\n    <Dialog\n      open={open}\n      onClose={(_event, reason) => {\n        if (isProductDrawerOpen && reason === 'backdropClick') { return; }\n        onClose();\n      }}\n      classes={{ paper: classes.dialogPaper }}\n      maxWidth={false}\n      disablePortal={isProductDrawerOpen}\n      disableEnforceFocus={isProductDrawerOpen}\n      BackdropProps={isProductDrawerOpen ? { invisible: true } : undefined}\n    >\n      <DialogTitle disableTypography={true} className={classes.dialogTitle}>\n        <Typography variant='h6'>{t('pricingRequests.pricingComparison')}</Typography>\n        <IconButton size='small' onClick={onClose}>\n          <CloseIcon />\n        </IconButton>\n      </DialogTitle>\n\n      <Box className={classes.productInfoBar}>\n        <Box className={classes.productInfoItem}>\n          <FontAwesomeIcon icon='box' className={classes.productInfoIcon} />\n          <Typography className={classes.productInfoLabel}>{t('autoQuotationBidDetail.tagColumn')}</Typography>\n          <Typography className={classes.productInfoValue}>{productInfo.sectionTitle}</Typography>\n        </Box>\n        <Box className={classes.productInfoItem}>\n          <FontAwesomeIcon icon='box' className={classes.productInfoIcon} />\n          <Typography className={classes.productInfoLabel}>{t('importPricing.productNumber')}</Typography>\n          <Typography className={classes.productInfoValue}>{productInfo.productNumber}</Typography>\n        </Box>\n        <Box className={classes.productInfoItem}>\n          <BuildIcon className={classes.productInfoIcon} />\n          <Typography className={classes.productInfoLabel}>{t('vendorQuotationPrefer.manufacturer')}</Typography>\n          <Typography className={classes.productInfoValue}>{productInfo.manufacturer}</Typography>\n        </Box>\n      </Box>\n\n      <DialogContent>\n        {pricingGroups.map((group, groupIndex) => (\n          <TableContainer key={groupIndex} className={classes.tableContainer}>\n            <Table className={classes.table} style={{ minWidth: 720 + group.columns.length * 110 }}>\n              <TableHead>\n                <TableRow>\n                  <TableCell className={`${classes.headerCell} ${classes.colExpand}`} />\n                  <TableCell className={`${classes.headerCell} ${classes.colPricingRequestNumber}`}>{t('pricingRequests.pricingRequestNumber')}</TableCell>\n                  <TableCell className={`${classes.headerCell} ${classes.colFrom}`}>{t('autoQuotationBidDetail.fromEmail')}</TableCell>\n                  <TableCell className={`${classes.headerCell} ${classes.colSupplierProductNumber}`}>{t('autoQuotationBidDetail.supplierProductNumber')}</TableCell>\n                  {group.columns.map((col) => (\n                    <TableCell key={col.key} className={`${classes.headerCell} ${classes.colValue}`}>{col.label}</TableCell>\n                  ))}\n                  {onImportPricing && (\n                    <TableCell className={`${classes.headerCell} ${classes.colAction}`}>\n                      {group.rows.length > 1 ? (\n                        <span className={classes.importAllButton} onClick={() => onImportPricing(group.rows[0].bidResponseId, group.rows.map(r => r.id))}>\n                          {t('pricingRequests.importAllAction')} ({group.rows.length})\n                        </span>\n                      ) : t('formButtons.actions')}\n                    </TableCell>\n                  )}\n                </TableRow>\n              </TableHead>\n              <TableBody>\n                {group.rows.map((row) => (\n                  <PricingComparisonRow\n                    key={row.id}\n                    row={row}\n                    columns={group.columns}\n                    onImportPricing={onImportPricing}\n                  />\n                ))}\n              </TableBody>\n            </Table>\n          </TableContainer>\n        ))}\n      </DialogContent>\n    </Dialog>\n  );\n});\n\nexport default PricingComparison;\n","import * as React from 'react';\nimport { useState } from 'react';\nimport {\n  Grid,\n  IconButton,\n  Link,\n  TableCell,\n  Tooltip,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { List, Map } from 'immutable';\nimport { change } from 'redux-form';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport LinkIcon from '@material-ui/icons/Link';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport ThumbUpAltOutlinedIcon from '@material-ui/icons/ThumbUpAltOutlined';\nimport ThumbDownAltOutlinedIcon from '@material-ui/icons/ThumbDownAltOutlined';\nimport {\n  CancelOutlined,\n  ChevronRight,\n  CompareArrows,\n  Height,\n  NearMe,\n  ShuffleRounded,\n  Widgets,\n} from '@material-ui/icons';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport { AI_IDENTIFIED_PRODUCT_ID, AMPLITUDE_EVENT, GEOLOCATION_ID, VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID } from '../../../constants';\nimport {\n  makeSelectIsSpecToQuote,\n  makeSelectSpecProduct,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  quoteFormSelector,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  AddProductOrPackageToQuoteAction,\n  ClearProductInRowAction,\n  CopyProductToSectionAction,\n  DeleteProductInRowAction,\n  LinkAndUnlinkProductAction,\n  MoveProductToSectionAction,\n  SetDndMenuPathsAction,\n  SetExcludeProductAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport {\n  SetOverlayComponentPropsAction,\n  ToggleOverlayComponentAction,\n} from '../../../modules/ApplicationModule/actions';\nimport { QuickSearchPimProductsPackages, SearchParentSharedFirmProductsAction } from '../../../modules/PimModule/actions';\nimport { SendRecommendedProductFeedbacksAction } from '../../../modules/QuoteModule/actions';\nimport { makeSelectUserHasAiCreateXref, makeSelectIsChildFirm } from '../../../modules/AtsModule/selectors';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../../modules/AccountModule/selectors';\nimport { MODAL_ID } from '../../../containers/CrossReferenceModal';\nimport { QUOTE_CONFIGURATOR_OVERLAY_COMPONENT } from '../../QuoteProductConfigurator';\nimport { CREATE_AI_XREF_DIALOG_ID } from '../../SpecToQuote/CreateAiXrefModal';\nimport { FEEDBACK_VALUES, IFeedback } from '../../SpecToQuote/interfaces';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport PricingComparison from './PricingComparison';\nimport ImportPricingStepper from '../ImportPricingStepper';\nimport useStyles from './useStyles';\n\nexport const getCutsheetDataByLocaleRegionOrFallback = (productMap: IMap<any>, getDataType: string) => {\n  const linkedProject = useSelector(quoteFormSelector(['projectInfo', 'data']));\n  const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n  // currently only english on AQ\n  // get country id from linked project otherwise login user office location\n  const countryId = linkedProject?.getIn(['location', 'country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n  const isCanada = countryId === GEOLOCATION_ID.canada; // only check if Canada, any other regions get US\n  return isCanada\n    ? productMap.getIn(['file', 'media', 'en-ca', 'manufacturer_cutsheet', getDataType]) || productMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', getDataType])\n    : productMap.getIn(['file', 'media', 'en-us', 'manufacturer_cutsheet', getDataType]) || productMap.getIn(['file', 'media', 'en', 'manufacturer_cutsheet', getDataType]);\n};\n\nconst ActionCell_ = ({\n  sectionIndex,\n  productIndex,\n  excluded,\n  product = Map({ id: -1 }),\n  openMenu,\n  openSubMenu,\n  fileSrc,\n  textRef,\n  invitationResponses,\n}: any) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const specId = useSelector(quoteFormSelector(['createdFromSpecId']));\n  const quoteId = useSelector(quoteFormSelector(['id']));\n  const specToQuoteValues = product.get('specToQuoteValues');\n  const hasAiCreateXrefRole: boolean = useSelector(makeSelectUserHasAiCreateXref());\n  const isChildFirm = useSelector(makeSelectIsChildFirm());\n  const specProductId = specToQuoteValues?.get('specProductId');\n  const specProduct = useSelector(makeSelectSpecProduct(specId, specProductId, sectionIndex, productIndex));\n\n  const amplitudeData = useAmplitudeData();\n\n  const productId = product.get('id');\n  const isStandaloneProduct = specProductId === undefined;\n\n  const isAiIdentifiedProduct = specProduct?.get('id') === AI_IDENTIFIED_PRODUCT_ID;\n  const isSpecToQuote = useSelector(makeSelectIsSpecToQuote());\n  const positiveNegativeValue = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'specToQuoteValues', 'feedback']));\n  const linkedState = specToQuoteValues?.get('linked');\n\n  const isNotFirstProductInPackage = isSpecToQuote && Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0);\n  const isCompleteRow = Boolean((productId > 0) && !isStandaloneProduct);\n  const linkUnlinkDisable = isAiIdentifiedProduct || !isCompleteRow || (isCompleteRow && isNotFirstProductInPackage);\n\n  const manufacturerCutsheetFileId = product && getCutsheetDataByLocaleRegionOrFallback(product, 'fileId');\n  const manufacturerCutsheetURL = product && getCutsheetDataByLocaleRegionOrFallback(product, 'url');\n\n  const disabledS2QFeature = productId < 0 || !Boolean(specToQuoteValues);\n  const isVendorPlaceholderProduct = product.get('id') === VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID;\n  const [pricingComparisonOpen, setPricingComparisonOpen] = useState(false);\n  const [importStepperOpen, setImportStepperOpen] = useState(false);\n  const [importBidResponseId, setImportBidResponseId] = useState(0);\n  const [importBidResponseProductIds, setImportBidResponseProductIds] = useState<number[]>([]);\n  const quoteProductId = product.get('quoteProductId');\n\n  const hasPricingComparison = invitationResponses?.some((response) =>\n    response.BidResponseProducts?.some((brp) =>\n      brp.BidProduct?.quoteProductId === quoteProductId && brp.Product\n    )\n  );\n\n  const handleThumbUpOrDown = (feedback: string) => {\n    // debug log\n    console.debug(`Feedback sectionIndex: ${sectionIndex} productIndex: ${productIndex} action: ${feedback}`);\n    // only submit the feedback if there is value\n    if (productId !== -1) {\n      const isPackage = product.get('packageId') && product.get('uniquePackageId');\n      const firmProductId = isPackage ? null : product.get('firmProductId', null);\n      const packageId = isPackage ? product.get('packageId', null) : null;\n      const productNumber = isAiIdentifiedProduct ? specProduct?.get('identifiedProductNumber') : specProduct?.get('productNumber');\n      const category = isAiIdentifiedProduct ? specProduct?.get('identifiedCategory') : specProduct?.get('categoryName');\n      const brand = isAiIdentifiedProduct ? specProduct?.get('identifiedBrand') : specProduct?.get('brand');\n      const feedbackMap = Map({\n        firmProductId,\n        packageId,\n        productNumber,\n        category,\n        brand,\n        feedback\n      }) as IMap<IFeedback>;\n      const feedbacks = List([feedbackMap]);\n      dispatch(new SendRecommendedProductFeedbacksAction({ feedbacks, specId }));\n    }\n\n    // set positive/negative to product\n    dispatch(change(QUOTE_FORM_NAME, `sections.${sectionIndex}.products.${productIndex}.specToQuoteValues.feedback`, feedback));\n\n    // if feedback is negative then empty the select field\n    if (feedback === FEEDBACK_VALUES.NEGATIVE) {\n      dispatch(new ClearProductInRowAction({ sectionIndex, productIndex }));\n    }\n  };\n\n  const linkAndUnlinkButtonClickHandler = () => {\n    dispatch(new LinkAndUnlinkProductAction({ sectionIndex, productIndex }));\n  };\n\n  // for create AI Xref feature\n\n  const linkedToFirmProductId = product?.get('productId');\n  const isFirmProductLinkedToAtsProduct = Boolean(linkedToFirmProductId);\n  const firmProductIsPackage = Boolean(product?.get('packageId') && product?.get('uniquePackageId'));\n  const enableAddAiXrefButton = !isAiIdentifiedProduct && isFirmProductLinkedToAtsProduct && !firmProductIsPackage;\n\n  const specProductNumber = isAiIdentifiedProduct\n    ? !!specProduct?.get('identifiedProductNumber') ? specProduct?.get('identifiedProductNumber') : '-'\n    : specProduct?.get('productNumber');\n\n  const actionItems: any = [\n    ...(hasPricingComparison ? [{\n      label: t('productActionItems.pricingRequestsComparison'),\n      icon: <CompareArrows />,\n      onChange: () => {\n        setPricingComparisonOpen(true);\n      },\n      menuItemProps: {},\n    }] : []),\n    {\n      label: t('productActionItems.xrefToolLabel'),\n      icon: <ShuffleRounded />,\n      onChange: () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.xrefModalOpened, amplitudeData());\n        dispatch(new SetOverlayComponentPropsAction({\n          id: MODAL_ID,\n          props: {\n            searchTerm: specProductNumber || product.get('productNumber'),\n            onXrefProductSelected: (data) => {\n              const sponsorProduct: any = data.get('sponsorProduct');\n              const productNumber = sponsorProduct.get('productNumber');\n              dispatch(new QuickSearchPimProductsPackages({ searchTerm: productNumber }));\n              if (isChildFirm) {\n                dispatch(new SearchParentSharedFirmProductsAction({ searchTerm: productNumber }));\n              }\n              const timeout = setTimeout(() => {\n                textRef.current.text = productNumber;\n                textRef.current.focus();\n              }, 100);\n            },\n          }\n        }));\n        dispatch(new ToggleOverlayComponentAction({ id: MODAL_ID }));\n      },\n      menuItemProps: {\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0)\n      },\n    },\n    {\n      label: t('productActionItems.productConfiguratorLabel'),\n      icon: <Widgets />,\n      onChange: () => {\n        dispatch(new SetOverlayComponentPropsAction({\n          props: {\n            open: true,\n            addProductToQuote: prod => dispatch(new AddProductOrPackageToQuoteAction({\n              product: prod,\n              section: sectionIndex,\n              row: productIndex\n            }))\n          },\n          id: QUOTE_CONFIGURATOR_OVERLAY_COMPONENT\n        }));\n        amplitude.logEvent(AMPLITUDE_EVENT.productConfiguratorModal, amplitudeData({ configuratorOpened: 'Quote page product configurator button clicked' }));\n      },\n      menuItemProps: {\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0)\n      },\n    },\n    {\n      label: manufacturerCutsheetFileId || manufacturerCutsheetURL ? t('sectionList.downloadManufacturerCutsheet') : t('sectionList.noManufacturerCutsheet'),\n      icon: <CloudDownloadIcon />,\n      menuItemProps: {\n        component: Link,\n        href: manufacturerCutsheetFileId ? fileSrc(manufacturerCutsheetFileId) : manufacturerCutsheetURL,\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0) || !(manufacturerCutsheetFileId || manufacturerCutsheetURL),\n        target: '_blank'\n      },\n      sectionEnd: true // for render divider,\n    },\n    {\n      label: t('productActionItems.moveProductLabel'),\n      icon: <NearMe />,\n      menuItemProps: {\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0) || product.get('id') < 1\n      },\n      menuContent: [{\n        label: t('productActionItems.moveTo'),\n        menuItemProps: {\n          disabled: true\n        }\n      }, {\n        label: t('productActionItems.newSection'),\n        onChange: () => {\n          dispatch(new MoveProductToSectionAction({ fromSection: sectionIndex, toSection: -1, productIndex, product }));\n        }\n      }, {\n        label: <Grid container={true} alignItems='center'>{t('productActionItems.anotherSection')}<ChevronRight /></Grid>,\n        keepOpen: true,\n        onChange: openSubMenu((i, _excluded) => {\n          dispatch(new MoveProductToSectionAction({ fromSection: sectionIndex, toSection: i, productIndex, product }));\n        }, sectionIndex)\n      }],\n      sectionEnd: true // for render divider\n    },\n    {\n      label: t('productActionItems.copyProductLabel'),\n      icon: <FileCopyIcon />,\n      menuItemProps: {\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0) || product.get('id') === -1 || isVendorPlaceholderProduct\n      },\n      menuContent: [\n        {\n          label: t('productActionItems.copyTo'),\n          menuItemProps: {\n            disabled: true\n          }\n        }, {\n          label: t('productActionItems.thisSection'),\n          onChange: () => {\n            dispatch(new CopyProductToSectionAction({ fromSection: sectionIndex, toSection: sectionIndex, product, productIndex }));\n          }\n        }, {\n          label: t('productActionItems.newSection'),\n          onChange: () => {\n            dispatch(new CopyProductToSectionAction({ fromSection: sectionIndex, toSection: -1, product, productIndex }));\n          }\n        }, {\n          label: <Grid container={true} alignItems='center'>{t('productActionItems.anotherSection')}<ChevronRight /></Grid>,\n          keepOpen: true,\n          onChange: openSubMenu((i, _excluded) => {\n            dispatch(new CopyProductToSectionAction({ fromSection: sectionIndex, toSection: i, product, productIndex }));\n          })\n        }\n      ]\n    },\n    {\n      label: t('productActionItems.delete'),\n      icon: <DeleteIcon />,\n      onChange: () => {\n        dispatch(new DeleteProductInRowAction({ sectionIndex, productIndex }));\n      }\n    },\n  ];\n  if (hasAiCreateXrefRole && isSpecToQuote) {\n    actionItems.splice(1, 0, {\n      label: t('productActionItems.addnewCrosslabel'),\n      icon: <AddCircleIcon />,\n      tooltipTitle: !enableAddAiXrefButton ? t('specToQuotePage.disableAddCrossTooltip') : '',\n      menuItemProps: {\n        disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0) || productId === -1 || !enableAddAiXrefButton\n      },\n      onChange: () => {\n        dispatch(new SetOverlayComponentPropsAction({\n          id: CREATE_AI_XREF_DIALOG_ID,\n          props: {\n            competitorProductType: 'product',\n            competitorProductId: specProductId,\n            sponsorProductType: 'product',\n            sponsorProductId: linkedToFirmProductId,\n          }\n        }));\n        dispatch(new ToggleOverlayComponentAction({\n          id: CREATE_AI_XREF_DIALOG_ID,\n          open: true\n        }));\n      },\n    });\n  }\n\n  if (isSpecToQuote) {\n    actionItems.splice(hasAiCreateXrefRole ? 4 : 3, 0,\n      {\n        label: linkedState ? t('productActionItems.unlinkProductLabel') : t('productActionItems.linkProductLabel'),\n        icon: linkedState ? <LinkOffIcon /> : <LinkIcon />,\n        onChange: linkAndUnlinkButtonClickHandler,\n        menuItemProps: {\n          disabled: linkUnlinkDisable\n        }\n      },\n      {\n        label: t('productActionItems.removeRecommendationLabel'),\n        icon: <CancelOutlined />,\n        onChange: () => {\n          dispatch(new ClearProductInRowAction({ sectionIndex, productIndex }));\n        },\n        menuItemProps: {\n          disabled: Boolean(product.get('uniquePackageId') && product.get('productIndex') !== 0) || (productId === -1 || !Boolean(specToQuoteValues) || isNotFirstProductInPackage || isVendorPlaceholderProduct)\n        }\n      },\n    );\n  }\n\n  const handleClick = e => dispatch(new SetDndMenuPathsAction({\n    dataPath: ['sections', sectionIndex, 'products'],\n    labelPath: ['productNumber'],\n    index: productIndex,\n    anchorEl: e.currentTarget\n  }));\n\n  return <TableCell>\n    <Grid container={true} wrap='nowrap' alignItems='center'>\n      {\n        isSpecToQuote &&\n        <>\n          <Tooltip title={t('specToQuotePage.thumbUpTooltip')}>\n            <Grid\n              className={(disabledS2QFeature || isNotFirstProductInPackage) ? classes.disabledThumbsUpIcon : positiveNegativeValue === FEEDBACK_VALUES.POSITIVE ? classes.thumbUpButtonWithPositiveState : classes.thumbUpButton}\n              container={true}\n              justify='center'\n              alignItems='center'\n              onClick={() => (disabledS2QFeature || isNotFirstProductInPackage) ? null : handleThumbUpOrDown(FEEDBACK_VALUES.POSITIVE)}\n            >\n              <ThumbUpAltOutlinedIcon\n                fontSize='small'\n                color={positiveNegativeValue === FEEDBACK_VALUES.POSITIVE ? 'inherit' : 'secondary'}\n              />\n            </Grid>\n          </Tooltip>\n          <Tooltip title={t('specToQuotePage.thumbDownTooltip')}>\n            <Grid\n              className={(disabledS2QFeature || isNotFirstProductInPackage) ? classes.disabledThumbsDownIcon : positiveNegativeValue === FEEDBACK_VALUES.NEGATIVE ? classes.thumbDownButtonWithNegativeState : classes.thumbDownButton}\n              container={true}\n              justify='center'\n              alignItems='center'\n              onClick={() => (disabledS2QFeature || isNotFirstProductInPackage) ? null : handleThumbUpOrDown(FEEDBACK_VALUES.NEGATIVE)}\n            >\n              <ThumbDownAltOutlinedIcon\n                fontSize='small'\n                color={positiveNegativeValue === FEEDBACK_VALUES.NEGATIVE ? 'inherit' : 'primary'}\n              />\n            </Grid>\n          </Tooltip>\n        </>\n      }\n      <Tooltip title={t('sectionList.reorderProducts')}>\n        <span>\n          <IconButton size='small' disabled={productId === -1 || isNotFirstProductInPackage} onClick={handleClick}>\n            <Height />\n          </IconButton>\n        </span>\n      </Tooltip>\n      {/* drop down menu for move/copy/delete product & other related features */}\n      <IconButton size='small' onClick={openMenu(actionItems)}>\n        <MoreVert />\n      </IconButton>\n\n    </Grid>\n    {pricingComparisonOpen && (\n      <PricingComparison\n        quoteId={quoteId}\n        quoteProductId={quoteProductId}\n        linkBidResponseId={0}\n        open={pricingComparisonOpen}\n        invitationResponses={invitationResponses}\n        sectionIndex={sectionIndex}\n        onClose={() => setPricingComparisonOpen(false)}\n        onImportPricing={(bidResponseId, bidResponseProductIds) => {\n          setImportBidResponseId(bidResponseId);\n          setImportBidResponseProductIds(bidResponseProductIds);\n          setImportStepperOpen(true);\n        }}\n      />\n    )}\n    {importStepperOpen && (\n      <ImportPricingStepper\n        bidResponseId={importBidResponseId}\n        bidResponseProductIds={importBidResponseProductIds}\n        open={importStepperOpen}\n        onClose={(imported) => {\n          setImportStepperOpen(false);\n          setImportBidResponseId(0);\n          setImportBidResponseProductIds([]);\n          if (imported) {\n            setPricingComparisonOpen(false);\n          }\n        }}\n      />\n    )}\n  </TableCell>;\n};\n\nconst ActionCell = React.memo(ActionCell_);\n\nexport default ActionCell;\n","import * as React from 'react';\nimport {\n  Checkbox,\n  ExpansionPanel,\n  ExpansionPanelDetails,\n  Grid,\n  IconButton,\n  TableCell,\n  TableRow,\n  TextField,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { fromJS, List, Map } from 'immutable';\nimport { change } from 'redux-form';\nimport * as uuid from 'uuid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  RemoveCircle,\n  RemoveCircleOutline,\n  Info as InfoIcon,\n} from '@material-ui/icons';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport { AI_IDENTIFIED_PRODUCT_ID, VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID } from '../../../constants';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { Product } from '../../../models';\nimport {\n  parseFormulaFields\n} from '../../../utils/parseFormulaFields';\nimport {\n  makeSelectIsSpecToQuote,\n  makeSelectSpecProduct,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  makeSelectExpandedProductInSection,\n  makeSelectLabelColumnWithoutProduct,\n  quoteFormSelector,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  AddProductOrPackageToQuoteAction,\n  DecrementFocusedFieldsAction,\n  FocusCellAction,\n  SetExcludeProductAction,\n  SetExpandedProductInSection,\n  ToggleProductIsRequestingProductAction,\n  UpdateSectionTotalAndGrandTotalAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport {\n  ResetQuoteSearchProducts,\n} from '../../../modules/PimModule/actions';\nimport { makeSelectSelectedSpecIsAI } from '../../../modules/SpecModule/selectors';\nimport DebouncedTextField from '../../DebouncedTextField';\nimport ImageCell from '../../SpecToQuote/tableCells/ImageCell';\nimport { useFileSrc } from '../../PDFModal';\nimport QuoteFormUtil from '../QuoteFormUtil';\nimport { QUOTE_INPUT_DELAY, getTemplateCurrency } from './constants';\nimport useStyles from './useStyles';\nimport ExpandIcon from './ExpandIcon';\nimport CellThing from './CellThing';\nimport { QuickEntry } from './QuickEntry';\nimport { AC } from './AC';\nimport ActionCell from './ActionCell';\nimport { applyRoundingOption } from '../../../modules/QuoteEditModule/utils';\nimport { truncateToDecimal } from '../../../utils/format-number';\nimport { AtsSvgPackageDiscontinued, AtsSvgProductDiscontinued } from '../../AtsSvg';\nimport { DISCONTINUED_PRODUCT_STATUS } from '../../../modules/QuoteModule/utils';\n\nconst RowThing_ = ({\n  pushRef,\n  product = Map({ id: -1 }),\n  productIndex,\n  displayIndex,\n  sectionIndex,\n  fieldsData,\n  openMenu,\n  openSubMenu,\n  AIProduct,\n  showAIProduct,\n  showImage,\n  openPdfModal,\n  rowClassName,\n  currencyType,\n  importedPrices,\n  invitationResponses,\n}: any) => {\n  const sectionId = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionId']));\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n\n  const sectionTemplateFieldsData = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionTemplate', 'fieldsData']));\n  const templateCells = product.get('templateCells') || sectionTemplateFieldsData || List();\n  const [test, setTest] = React.useState(false);\n  const isInitialMount = React.useRef(true);\n  const updateValues = React.useRef({});\n\n  const fileSrc = useFileSrc();\n\n  const isAI = useSelector(makeSelectSelectedSpecIsAI());\n  const isSpecToQuote = useSelector(makeSelectIsSpecToQuote());\n\n  const selectedRegionId = useSelector(quoteFormSelector(['region', 'id']));\n\n  const timer = React.useRef<any>(null);\n  const applyRoundingRef = React.useRef(false);\n\n  const _setUpdateValues = React.useCallback(value => {\n    updateValues.current[value.templateIndex] = { values: value.values, cellId: value.cellId };\n    clearTimeout(timer.current);\n    timer.current = setTimeout(() => setTest(_test => !_test), 500);\n  }, []);\n\n  const _onBlurUpdateValues = React.useCallback(({ values, templateIndex, cellId }) => {\n    clearTimeout(timer.current);\n    if (!(templateIndex in updateValues.current)) {\n      updateValues.current[templateIndex] = { values, cellId };\n    }\n    applyRoundingRef.current = true;\n    setTest(_test => !_test);\n  }, []);\n\n  const handleOnChange = (_updatedValues, applyRounding = false) => {\n    const regionWithPricing = product.getIn(['price', selectedRegionId, currencyType]) ? selectedRegionId : 'default';\n    const isFirmProductPoaAtRegionAndCurrency = Boolean(product.getIn(['price', regionWithPricing, currencyType, 'isPoa']));\n\n    const keyValueList = Object.entries(_updatedValues) as any;\n\n    let parsedFields;\n    const _templateCells = templateCells.toJS();\n    keyValueList.forEach(([key, entry]) => {\n      const value = entry?.values;\n      parsedFields = parseFormulaFields({\n        productFields: parsedFields ? parsedFields : _templateCells,\n        fieldData: templateCells.get(key).withMutations((ctx) => {\n          const applyFullTruncate = ctx.get('fieldType') === 'integer' && (ctx.get('valueType') === 'userInput' || ctx.get('valueType') === 'constant');\n          const _value = applyRounding\n            ? applyFullTruncate\n              ? truncateToDecimal(value, 0)\n              : applyRoundingOption({\n                  value,\n                  roundingOption:\n                  ctx.get('roundingOption'),\n                  decimalPrecision: ctx.get('decimalPrecision'),\n                  truncateDecimals: ctx.get('type') === 'formula'\n                })\n            : value;\n          ctx\n            .set('fieldValue', _value)\n            .set('formattedValue', _value)\n            .set('isFieldUpdated', false); // remove indicator if it is a user input\n\n          if (ctx.get('displayPoaTag') && Number(_value) > 0) {\n            ctx.delete('displayPoaTag');\n          } else if (isFirmProductPoaAtRegionAndCurrency && ctx.get('pimData') === 'list' && ctx.get('fieldValue') && Number(ctx.get('fieldValue')) === 0) {\n            ctx.set('displayPoaTag', true);\n          }\n        }).toJS(),\n        parsedIds: [],\n        isUserInput: true,\n        applyRounding,\n      });\n    });\n\n    const updatedTemplateCells = fromJS(parsedFields);\n\n    dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].products[${productIndex}].templateCells`, updatedTemplateCells));\n    dispatch(new UpdateSectionTotalAndGrandTotalAction({ section: sectionIndex }));\n\n    // Release the per-cell editing holds the blurred cells deferred. CellThing\n    // keeps its hold alive until the rounded `change` is in the store, so\n    // auto-save can't fire on the un-rounded debounced value. With per-cell\n    // ownership in editingCellIds, the matching remove is idempotent — safe\n    // even if the cell already unmounted and ran its own cleanup.\n    if (applyRounding) {\n      Object.values(_updatedValues).forEach((entry: any) => {\n        if (entry?.cellId) {\n          dispatch(new DecrementFocusedFieldsAction({ cellId: entry.cellId }));\n        }\n      });\n    }\n  };\n\n  React.useEffect(() => {\n    if (isInitialMount.current) {\n      isInitialMount.current = false;\n    } else {\n      handleOnChange(updateValues.current, applyRoundingRef.current);\n      updateValues.current = {};\n      applyRoundingRef.current = false;\n    }\n    return () => {\n      clearTimeout(timer.current);\n    };\n  }, [test]);\n\n  // Unmount safety net: if the row unmounts (e.g. section/row deleted) while one\n  // or more cell blurs are queued for a rounded commit that will never fire,\n  // release the per-cell editing holds those cells passed to us.\n  React.useEffect(() => () => {\n    if (applyRoundingRef.current) {\n      Object.values(updateValues.current).forEach((entry: any) => {\n        if (entry?.cellId) {\n          dispatch(new DecrementFocusedFieldsAction({ cellId: entry.cellId }));\n        }\n      });\n    }\n  }, []);\n\n  const expanded = useSelector(makeSelectExpandedProductInSection({ section: sectionIndex, productIndex }));\n  const handleExpand = React.useCallback(() => dispatch(new SetExpandedProductInSection({\n    section: sectionIndex,\n    productIndex\n  })), [sectionIndex, productIndex]);\n\n  const setLabel = React.useCallback(e => {\n    console.debug(`set labelColumn sectionIndex: ${sectionIndex} productIndex: ${productIndex}`);\n    if (!product || product && product.get('id') === -1) {\n      dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].uiData.products[${productIndex}].labelColumn`, e));\n    } else {\n      dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].products[${productIndex}].labelColumn`, e));\n    }\n  }, [sectionIndex, productIndex, product.get('id') === -1]);\n  const labelColumn = useSelector(makeSelectLabelColumnWithoutProduct(sectionIndex, productIndex));\n\n  const onChangeDescription = React.useCallback(val => {\n    console.debug(`onChangeDescription sectionIndex: ${sectionIndex} productIndex: ${productIndex}`);\n    dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].products[${productIndex}].description`, val));\n  }, [sectionIndex, productIndex]);\n\n  const onChangeAIProductNote = React.useCallback(val => {\n    console.debug(`onChangeAIProductNote sectionIndex: ${sectionIndex} productIndex: ${productIndex}`);\n    dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].products[${productIndex}].specToQuoteValues.specProductNote`, val));\n  }, [sectionIndex, productIndex]);\n\n  const specId = useSelector(quoteFormSelector(['createdFromSpecId']));\n  const specToQuoteValues = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'specToQuoteValues']));\n  const specProductId = specToQuoteValues?.get('specProductId');\n  const specProduct = useSelector(makeSelectSpecProduct(specId, specProductId, sectionIndex, productIndex));\n  const isAiIdentifiedProduct = specProduct?.get('id') === AI_IDENTIFIED_PRODUCT_ID;\n  const specProductNumber = isAiIdentifiedProduct\n    ? !!specProduct?.get('identifiedProductNumber') ? specProduct?.get('identifiedProductNumber') : '-'\n    : specProduct?.get('productNumber');\n  const specProductBrand = isAiIdentifiedProduct\n    ? !!specProduct?.get('identifiedBrand') ? specProduct?.get('identifiedBrand') : '-'\n    : specProduct?.get('brand');\n\n  const isNotFirstProductInPackage = isSpecToQuote && product.get('productIndex') > 0;\n\n  const attachLabel = React.useCallback(value => value.get('firmProduct')\n    ? value.setIn(['firmProduct', 'labelColumn'], labelColumn)\n    : value.set('labelColumn', labelColumn), [sectionIndex, productIndex, labelColumn]);\n\n  const onChangeAutocomplete = React.useCallback((event, value, callback?) => {\n    if (value) {\n      dispatch(new AddProductOrPackageToQuoteAction({\n        product: attachLabel(value),\n        section: sectionIndex,\n        row: productIndex,\n        callback: () => {\n          dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].uiData.products[${productIndex}].labelColumn`, ''));\n          dispatch(new ResetQuoteSearchProducts());\n          if (callback) {\n            callback();\n          }\n        }\n      }));\n    } else if (callback) {\n      callback();\n    }\n  }, [sectionIndex, productIndex, specToQuoteValues, labelColumn]);\n\n  const toggleVendorPlaceholderProduct = React.useCallback((e) => {\n    dispatch(new ToggleProductIsRequestingProductAction({ sectionIndex, productIndex, isRequestingProduct: e.target.checked }));\n  }, [sectionIndex, productIndex, product?.get('id')]);\n\n  const textRef = React.useRef({ focus: () => null, selectionStart: 0, selectionEnd: 0, value: '', text: '' }) as any;\n\n  const classes = useStyles();\n\n  const excluded = product.get('excluded') || false;\n  const quickEntryProps = React.useMemo(() => ({\n    dataPath: ['sections', sectionIndex, 'products', productIndex, 'note'],\n    label: t('sectionList.productNoteCellTitle'),\n    autocompleteProps: { disabled: product.get('id') === -1 },\n    textFieldProps: { multiline: true, disabled: product.get('id') === -1 }\n  }), [sectionIndex, productIndex, product.get('id') === -1]);\n\n  const rowRefs = React.useRef([]);\n  const setCellRef = React.useCallback((x, y) => rowRefs.current[x] = y, []);\n  React.useEffect(() => {\n    setCellRef(0, labelRef);\n    pushRef(productIndex, rowRefs);\n  }, [fieldsData]);\n\n  // const focusCellRef = React.useCallback((x, key) => focusRef(key === 38 ? productIndex - 1 : productIndex + 1, x), [productIndex, focusRef]);\n  const focusCellRef = React.useCallback((templateIndex, keyCode) => dispatch(new FocusCellAction({\n    productIndex,\n    sectionIndex,\n    keyCode,\n    templateIndex\n  })), [sectionIndex, productIndex]);\n\n  const acProduct = React.useMemo(() => Map({\n    productNumber: product.get('productNumber'),\n    itemNumber: product.get('itemNumber'),\n    description: product.get('description')\n  }), [product.get('productNumber')]);\n  const labelRef = React.useRef();\n\n  const onKeyDown = e => {\n    if (e.keyCode === 38 || e.keyCode === 40) {\n      focusCellRef('Label', e.keyCode);\n    }\n  };\n\n  const parseInput = React.useCallback(value => {\n    // PT-2447 - Parse commas and spaces\n    const parsedValue = typeof value === 'string'\n      ? value.replace(/,/g, '').replace(/\\s/g, '')\n      : '';\n\n    return isNaN(Number(parsedValue)) ? value : parsedValue;\n  }, []);\n\n  const onFocus = React.useCallback(e => e.currentTarget.scrollIntoView({ behavior: 'smooth', block: 'center' }), []);\n  const media = specProduct?.getIn(['file', 'images', 'main', 'fileId']) + `|fit:40,40`;\n\n  const isRequestingProduct = product.get('isRequestingProduct');\n  const productIsDiscontinued = product.get('status') === DISCONTINUED_PRODUCT_STATUS;\n\n  return <>\n    <TableRow className={rowClassName}>\n      <TableCell className={classes.rowNumberCell}>\n        <Typography variant='body2' color='textPrimary'>{displayIndex + 1}</Typography>\n      </TableCell>\n      {(showAIProduct && showImage)\n        ? specProductId\n          ? <ImageCell className={classes.AIProductImageCell} src={media} width='35px' />\n          : <TableCell className={classes.AIProductImageComponentPlaceholderCell} />\n        : null\n      }\n      {showAIProduct &&\n        <TableCell className={classes.nonAIProductTooltip} >\n          {((isAiIdentifiedProduct && product.get('productIndex') === 0) || (isAiIdentifiedProduct && !product.get('productIndex') && !product.get('uniquePackageId'))) &&\n            <Tooltip title={t('specToQuotePage.tooltipAIInfo')} placement='top-start'>\n              <InfoIcon className={classes.infoIcon} />\n            </Tooltip>\n          }\n        </TableCell>\n      }\n      {showAIProduct && <TableCell className={classes.AIProductNumberCell}>\n        {\n          !isNotFirstProductInPackage && specProduct?.get('aiAnnotation')\n            ? <Typography variant='body2' color='primary' style={{ textDecoration: 'underline', cursor: 'pointer' }} onClick={() => openPdfModal(specProduct)}>{specProductNumber || '-'}</Typography>\n            : <Typography variant='body2' color='textPrimary'>{!isNotFirstProductInPackage && specProductNumber || '-'}</Typography>\n        }\n      </TableCell>}\n      {showAIProduct && <TableCell className={classes.AIBrandCell}>\n        <Typography variant='body2' color='textPrimary'>{!isNotFirstProductInPackage && specProductBrand || '-'}</Typography>\n      </TableCell>}\n      <TableCell padding='none'>\n        <ExpandIcon onClick={handleExpand} expanded={expanded} />\n      </TableCell>\n      {((!product.get('specProductId') && product.get('id') > 0) || (specProductId && !isNotFirstProductInPackage))\n        ? <TableCell padding='none'>\n            <Checkbox\n              checked={isRequestingProduct ?? false}\n              onChange={toggleVendorPlaceholderProduct}\n              color='primary'\n              size='small'\n            />\n          </TableCell>\n        : <TableCell padding='none' />\n      }\n      <TableCell>\n        <Tooltip title={product.get('labelColumn') || ''}>\n          <>\n            <DebouncedTextField delay={QUOTE_INPUT_DELAY} onFocus={onFocus} id={`Section${sectionIndex}-Product${productIndex}-ColumnLabel`}\n              // disabled={product.get('id') === -1}\n              shouldComponentUpdate={product.get('id') === -1}\n              value={product.get('labelColumn') || labelColumn} onChange={setLabel} fullWidth={true}\n              inputRef={labelRef} onKeyDown={onKeyDown} />\n          </>\n        </Tooltip>\n      </TableCell>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' style={{ minWidth: '300px' }}>\n          <Grid container={true} alignContent='center' item={true} xs={1} style={{ marginRight: 4 }}>\n            {\n              product?.get('id') === VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID\n                ? <Tooltip title={t('pricingRequests.productForVendorQuotation')}>\n                    <InfoIcon color='action' />\n                  </Tooltip>\n                : productIsDiscontinued && product.get('id') !== -1\n                  ? <Tooltip title={t('sectionList.discontinuedProductTooltip')}>\n                      <span className={classes.discontinuedIcon}>\n                        {\n                          product.get('uniquePackageId') && product.get('packageNumber')\n                            ? <AtsSvgPackageDiscontinued />\n                            : <AtsSvgProductDiscontinued />\n                        }\n                      </span>\n                    </Tooltip>\n                  : isSpecToQuote && product.get('id') !== -1 && product.get('packageNumber')\n                      ? <Tooltip title={`Package Number ${product.get('packageNumber')}`}>\n                          <FontAwesomeIcon icon={product && product.get('uniquePackageId') ? 'boxes' : 'box'} className={classes.boxIcon} />\n                        </Tooltip>\n                      : product.get('id') !== -1 && <FontAwesomeIcon icon={product && product.get('uniquePackageId') ? 'boxes' : 'box'} className={classes.boxIcon} />\n            }\n          </Grid>\n          <AC product={acProduct} onChange={onChangeAutocomplete} textRef={textRef} sectionIndex={sectionIndex} productIndex={productIndex} />\n          <Grid item={true} xs={1}>\n            <Tooltip disableHoverListener={!product || product.get('id') === -1} title={excluded ? t('sectionList.excluded') : t('sectionList.included')}>\n              <span>\n                <IconButton disabled={product.get('id') === -1 ? true : isNotFirstProductInPackage} size='small' onClick={() => {\n                  dispatch(new SetExcludeProductAction({ section: sectionIndex, row: productIndex, excluded: !excluded }));\n                  dispatch(new UpdateSectionTotalAndGrandTotalAction({ section: sectionIndex }));\n                }}\n                >\n                  {\n                    excluded\n                      ? <RemoveCircle color='primary' />\n                      : <RemoveCircleOutline />\n                  }\n                </IconButton>\n              </span>\n            </Tooltip>\n          </Grid>\n        </Grid>\n      </TableCell>\n      <ActionCell\n        sectionIndex={sectionIndex}\n        productIndex={productIndex}\n        excluded={excluded}\n        product={product}\n        openMenu={openMenu}\n        openSubMenu={openSubMenu}\n        fileSrc={fileSrc}\n        textRef={textRef}\n        invitationResponses={invitationResponses}\n      />\n      {fieldsData.map((field, i) => {\n        const templateIndex = templateCells.findIndex(cell => cell.get('id') === field.get('id'));\n        const templateCell = templateCells.get(templateIndex) || Map();\n        const value = templateCell.get('fieldValue');\n        const invisible = templateCell.get('invisible');\n        const editable = templateCell.get('editable');\n        const displayPoaTag = templateCell.get('displayPoaTag') ?? false;\n        const isUpdated = templateCell.get('isFieldUpdated');\n        const isUpdatedByRate = templateCell.get('isFieldUpdatedByRate');\n        const appliedConversion = templateCell.get('appliedConversion');\n        const quoteProductId = product.get('quoteProductId');\n        const fieldId = field.get('id');\n        // Identifies which cell is mid-edit. quoteProductId is stable across\n        // row reorder, sibling delete, section move; fieldId is stable across\n        // pinning and template column reorder. Empty if either is missing —\n        // CellThing skips dispatch in that case (placeholder rows aren't saved).\n        const cellId = quoteProductId && fieldId ? `${quoteProductId}.${fieldId}` : '';\n        const importedPricingResponse = QuoteFormUtil.findMatchImportPricingBid(sectionId, quoteProductId, templateCell, importedPrices, selectedRegionId);\n        return invisible\n          ? null\n          : <CellThing\n              id={`Section${sectionIndex}-Product${productIndex}-Column${templateIndex !== -1 ? templateIndex : uuid()}`}\n              focusCellRef={focusCellRef}\n              setCellRef={setCellRef}\n              key={i}\n              _setUpdateValues={_setUpdateValues}\n              _onBlurUpdateValues={_onBlurUpdateValues}\n              value={value}\n              templateIndex={templateIndex}\n              cellId={cellId}\n              disabled={!editable}\n              parseInput={parseInput}\n              displayPoaTag={displayPoaTag}\n              isUpdated={isUpdated}\n              isUpdatedByRate={isUpdatedByRate}\n              appliedConversion={appliedConversion}\n              productStatus={product.get('status')}\n              importedPricingResponse={importedPricingResponse}\n              openMenu={openMenu}\n          />;\n      })}\n    </TableRow >\n    <TableRow className={classes.tableBackground_note_and_description_row}>\n      <TableCell className={classes.rowNumberCell} colSpan={1} style={{ padding: 0, ...expanded ? {} : { border: 0 } }}>\n        <ExpansionPanel square={true} expanded={expanded} elevation={0} TransitionProps={{ mountOnEnter: true, unmountOnExit: true }}>\n          <span />\n        </ExpansionPanel>\n      </TableCell>\n      {showAIProduct &&\n        <TableCell className={classes.AIBrandCell} colSpan={showImage ? 4 : 3} style={{ padding: 0, alignContent: 'flex-start', ...expanded ? {} : { border: 0 } }}>\n          <ExpansionPanel style={{ backgroundColor: 'transparent' }} square={true} expanded={expanded} elevation={0}\n            TransitionProps={{ mountOnEnter: true, unmountOnExit: true }}>\n            <div className={classes.AIProductImageCell} />\n            {\n              (isAiIdentifiedProduct || (specProduct && !specProduct.isEmpty() || !specProduct)) &&\n              (!product || product.isEmpty() ||\n                (product.get('uniquePackageId') && product.get('productIndex') === 0) ||\n                (!product.get('productIndex') && !product.get('uniquePackageId'))\n              ) &&\n              <ExpansionPanelDetails>\n                <DebouncedTextField delay={QUOTE_INPUT_DELAY} fullWidth={true} onChange={onChangeAIProductNote} value={specToQuoteValues?.get('specProductNote')} multiline={true} rowsMax={3} showCharCount={true}\n                  shouldComponentUpdate={!specProduct || specProduct && specProduct.isEmpty()}\n                  label={isAI ? t('sectionList.AIProductNoteLabel') : t('sectionList.specProductNoteLabel')} />\n              </ExpansionPanelDetails>\n            }\n\n          </ExpansionPanel>\n        </TableCell>\n      }\n\n      <TableCell colSpan={99} style={{ padding: 0, ...expanded ? {} : { border: 0 } }}>\n        <ExpansionPanel square={true} expanded={expanded} elevation={0}\n          TransitionProps={{ mountOnEnter: true, unmountOnExit: true }}>\n          <span />\n          <ExpansionPanelDetails>\n            <Grid container={true} spacing={2} justify='space-between' alignItems='flex-start'>\n              <Grid item={true} xs={true}>\n                <DebouncedTextField\n                  delay={QUOTE_INPUT_DELAY}\n                  fullWidth={true}\n                  onChange={onChangeDescription}\n                  value={product.get('description')}\n                  multiline={true}\n                  disabled={product.get('id') === -1}\n                  shouldComponentUpdate={product.get('id') === -1}\n                  showCharCount={true}\n                  label={t('sectionList.productDescriptionCellTitle')} />\n              </Grid>\n              <Grid item={true} xs={true}>\n                <QuickEntry {...quickEntryProps} showCharCount={true} />\n              </Grid>\n            </Grid>\n          </ExpansionPanelDetails>\n        </ExpansionPanel>\n      </TableCell>\n    </TableRow>\n  </>;\n};\n\nconst RowThing = React.memo(RowThing_);\n\nexport default RowThing;\n","import * as React from 'react';\nimport {\n  Grid,\n  IconButton,\n  TableCell,\n  TableRow,\n  TextField,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { fromJS, List, Map } from 'immutable';\nimport { change } from 'redux-form';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport LinkIcon from '@material-ui/icons/Link';\nimport ThumbUpAltOutlinedIcon from '@material-ui/icons/ThumbUpAltOutlined';\nimport ThumbDownAltOutlinedIcon from '@material-ui/icons/ThumbDownAltOutlined';\nimport {\n  Height,\n  NearMe,\n  RemoveCircleOutline,\n  ShuffleRounded,\n  Widgets,\n} from '@material-ui/icons';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport { AMPLITUDE_EVENT } from '../../../constants';\nimport {\n  parseAllFormulaFields,\n} from '../../../utils/parseFormulaFields';\nimport { QuoteSectionTemplateFieldsData } from '../../../models';\nimport {\n  makeSelectIsSpecToQuote,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  makeSelectPresentationalLabelColumn,\n  quoteFormSelector,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  AddProductOrPackageToQuoteAction,\n  SetPresentationalLabelColumnAction,\n  UpdateSectionTotalAndGrandTotalAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport {\n  ResetQuoteSearchProducts, SearchParentSharedFirmProductsAction,\n} from '../../../modules/PimModule/actions';\nimport {\n  SetOverlayComponentPropsAction,\n  ToggleOverlayComponentAction,\n} from '../../../modules/ApplicationModule/actions';\nimport { QuickSearchPimProductsPackages } from '../../../modules/PimModule/actions';\nimport { makeSelectUserHasAiCreateXref, makeSelectIsChildFirm } from '../../../modules/AtsModule/selectors';\nimport { MODAL_ID } from '../../../containers/CrossReferenceModal';\nimport { QUOTE_CONFIGURATOR_OVERLAY_COMPONENT } from '../../QuoteProductConfigurator';\nimport { FEEDBACK_VALUES } from '../../SpecToQuote/interfaces';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport DebouncedTextField from '../../DebouncedTextField';\nimport ImageCell from '../../SpecToQuote/tableCells/ImageCell';\nimport { QUOTE_INPUT_DELAY } from './constants';\nimport useStyles from './useStyles';\nimport ExpandIcon from './ExpandIcon';\nimport { AC } from './AC';\n\nconst PresentationalRowThing_ = ({\n  product = Map({ id: -1 }),\n  productIndex,\n  sectionIndex,\n  fieldsData,\n  showAIProduct,\n  showImage,\n  openMenu,\n  rowClassName,\n}: any) => {\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  // const templateCells = product.get('templateCells') || List();\n  // const [test, setTest] = React.useState(false);\n  // const isInitialMount = React.useRef(true);\n  // const updateValues = React.useRef({});\n\n  const isSpecToQuote = useSelector(makeSelectIsSpecToQuote());\n  const isChildFirm = useSelector(makeSelectIsChildFirm());\n  const positiveNegativeValue = useSelector(quoteFormSelector(['sections', sectionIndex, 'products', productIndex, 'specToQuoteValues', 'feedback']));\n  const hasAiCreateXrefRole: boolean = useSelector(makeSelectUserHasAiCreateXref());\n\n  // const handleOnChange = (_updatedValues) => {\n  //   let newTemplateCells = templateCells;\n\n  //   for (const [key, value] of Object.entries(_updatedValues)) {\n  //     newTemplateCells = newTemplateCells.setIn([key, 'fieldValue'], value);\n  //   }\n\n  //   const parsedFields = parseAllFormulaFields({ productFields: newTemplateCells.toJS() as QuoteSectionTemplateFieldsData[] });\n\n  //   for (const [key, value] of Object.entries(_updatedValues)) {\n  //     parsedFields[key].fieldValue = value;\n  //   }\n\n  //   const updatedTemplateCells = fromJS(parsedFields);\n  //   dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].products[${productIndex}].templateCells`, updatedTemplateCells));\n  //   dispatch(new UpdateSectionTotalAndGrandTotalAction({ section: sectionIndex }));\n  // };\n\n  // React.useEffect(() => {\n  //   if (isInitialMount.current) {\n  //     isInitialMount.current = false;\n  //   } else {\n  //     handleOnChange(updateValues.current);\n  //     updateValues.current = {};\n  //   }\n  // }, [test]);\n\n  const textRef = React.useRef({ focus: () => null, selectionStart: 0, selectionEnd: 0, value: '', text: '' }) as any;\n  const amplitudeData = useAmplitudeData();\n  const classes = useStyles();\n\n  const setLabelColumnMemo = React.useCallback(value => dispatch(new SetPresentationalLabelColumnAction({\n    section: sectionIndex,\n    labelColumn: value\n  })), [sectionIndex]);\n  const labelColumn = useSelector(makeSelectPresentationalLabelColumn(sectionIndex));\n\n  const attachLabel = value => value.get('firmProduct')\n    ? value.setIn(['firmProduct', 'labelColumn'], labelColumn)\n    : value.set('labelColumn', labelColumn);\n\n  const onChangeAutocomplete = React.useCallback((event, value, callback?) => {\n    // handleFeedbackOnSelectChange(value);\n    if (value) {\n      dispatch(new AddProductOrPackageToQuoteAction({\n        product: attachLabel(value),\n        section: sectionIndex,\n        row: productIndex,\n        callback: () => {\n          dispatch(new SetPresentationalLabelColumnAction({ section: sectionIndex, labelColumn: '' }));\n          dispatch(new ResetQuoteSearchProducts());\n        }\n      }));\n    }\n\n    if (inputRef && inputRef.current && typeof inputRef.current.focus === 'function') {\n      inputRef.current.focus();\n    }\n    setProductPlaceholder(Map({\n      productNumber: product.get('productNumber'),\n      itemNumber: product.get('itemNumber'),\n      description: product.get('description')\n    }));\n  }, [sectionIndex, productIndex, labelColumn]);\n\n  const inputRef = React.useRef<HTMLInputElement>();\n\n  const [productplaceholder, setProductPlaceholder] = React.useState(Map({\n    productNumber: product.get('productNumber'),\n    itemNumber: product.get('itemNumber'),\n    description: product.get('description')\n  }));\n\n  const actionItems = [\n    {\n      label: t('productActionItems.xrefToolLabel'),\n      icon: <ShuffleRounded />,\n      onChange: () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.xrefModalOpened, amplitudeData());\n        dispatch(new SetOverlayComponentPropsAction({\n          id: MODAL_ID,\n          props: {\n            searchTerm: product.get('productNumber'),\n            onXrefProductSelected: (data) => {\n              const sponsorProduct: any = data.get('sponsorProduct');\n              const productNumber = sponsorProduct.get('productNumber');\n              dispatch(new QuickSearchPimProductsPackages({ searchTerm: productNumber }));\n              if (isChildFirm) {\n                dispatch(new SearchParentSharedFirmProductsAction({ searchTerm: productNumber }));\n              }\n              const timeout = setTimeout(() => {\n                textRef.current.text = productNumber;\n                textRef.current.focus();\n              }, 100);\n            },\n          }\n        }));\n        dispatch(new ToggleOverlayComponentAction({ id: MODAL_ID }));\n      }\n    },\n    {\n      label: t('productActionItems.productConfiguratorLabel'),\n      icon: <Widgets />,\n      onChange: () => {\n        dispatch(new SetOverlayComponentPropsAction({\n          props: {\n            open: true,\n            addProductToQuote: prod => dispatch(new AddProductOrPackageToQuoteAction({\n              product: prod,\n              section: sectionIndex,\n              row: productIndex\n            }))\n          },\n          id: QUOTE_CONFIGURATOR_OVERLAY_COMPONENT\n        }));\n        amplitude.logEvent(AMPLITUDE_EVENT.productConfiguratorModal, amplitudeData({ configuratorOpened: 'Quote page product configurator button clicked' }));\n      }\n    },\n    {\n      label: t('sectionList.noManufacturerCutsheet'),\n      icon: <CloudDownloadIcon />,\n      menuItemProps: {\n        disabled: true,\n      },\n      sectionEnd: true // for render divider\n    },\n    {\n      label: t('productActionItems.moveProductLabel'),\n      icon: <NearMe />,\n      menuItemProps: {\n        disabled: true\n      },\n      sectionEnd: true // for render divider\n    },\n    {\n      label: t('productActionItems.copyProductLabel'),\n      icon: <FileCopyIcon />,\n      menuItemProps: {\n        disabled: true\n      }\n    },\n    {\n      label: t('productActionItems.delete'),\n      icon: <DeleteIcon />,\n      menuItemProps: {\n        disabled: true\n      }\n    }\n  ];\n\n  if (hasAiCreateXrefRole) {\n    actionItems.splice(1, 0, {\n      label: t('productActionItems.addnewCrosslabel'),\n      icon: <AddCircleIcon />,\n      menuItemProps: {\n        disabled: true\n      }\n    });\n  }\n\n  if (isSpecToQuote) {\n    actionItems.splice(hasAiCreateXrefRole ? 4 : 3, 0,\n      {\n        label: t('productActionItems.linkProductLabel'),\n        icon: <LinkIcon />,\n        menuItemProps: {\n          disabled: true\n        }\n      },\n      {\n        label: t('productActionItems.removeRecommendationLabel'),\n        icon: <RemoveCircleOutline />,\n        menuItemProps: {\n          disabled: true\n        }\n      }\n    );\n  }\n\n  return <>\n    <TableRow className={rowClassName}>\n      <TableCell className={classes.rowNumberCell} />\n      {showAIProduct && showImage && <TableCell className={classes.AIProductImageComponentPlaceholderCell} />}\n      {showAIProduct && <TableCell className={classes.nonAIProductTooltip} />}\n      {showAIProduct && <TableCell className={classes.AIProductNumberCell}>\n        <Typography variant='body2' color='textPrimary'>-</Typography>\n      </TableCell>}\n      {showAIProduct && <TableCell className={classes.AIBrandCell}>\n        <Typography variant='body2' color='textPrimary'>-</Typography>\n      </TableCell>}\n      <TableCell padding='none'>\n        <ExpandIcon onClick={() => null} expanded={false} disabled={true} />\n      </TableCell>\n      <TableCell padding='none' />\n      <TableCell>\n        <Tooltip title={labelColumn || ''}>\n          <>\n            <DebouncedTextField delay={QUOTE_INPUT_DELAY} value={labelColumn} onChange={setLabelColumnMemo} fullWidth={true} inputRef={inputRef}\n              placeholder={t('sectionList.labelCellPlaceholder')} />\n          </>\n        </Tooltip>\n      </TableCell>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' style={{ minWidth: '300px' }}>\n          <Grid container={true} item={true} xs={1} style={{ marginRight: 4 }} />\n          <AC product={productplaceholder} onChange={onChangeAutocomplete} textRef={textRef} placeholder={t('sectionList.productColumnPlaceholder')} sectionIndex={sectionIndex} />\n          <Grid item={true} xs={1} />\n        </Grid>\n      </TableCell>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center'>\n\n          {isSpecToQuote &&\n            <>\n              < Tooltip title={t('specToQuotePage.thumbUpTooltip')}>\n                <Grid\n                  className={classes.disabledThumbsUpIcon}\n                  style={{ pointerEvents: 'none', opacity: 0.25 }}\n                  container={true}\n                  justify='center'\n                  alignItems='center'\n                >\n                  <ThumbUpAltOutlinedIcon\n                    fontSize='small'\n                    color={positiveNegativeValue === FEEDBACK_VALUES.POSITIVE ? 'inherit' : 'secondary'}\n                  />\n                </Grid>\n              </Tooltip>\n              <Tooltip title={t('specToQuotePage.thumbDownTooltip')}>\n                <Grid\n                  className={classes.disabledThumbsDownIcon}\n                  style={{ pointerEvents: 'none', opacity: 0.25 }}\n                  container={true}\n                  justify='center'\n                  alignItems='center'\n\n                >\n                  <ThumbDownAltOutlinedIcon\n                    fontSize='small'\n                    color={positiveNegativeValue === FEEDBACK_VALUES.NEGATIVE ? 'inherit' : 'primary'}\n                  />\n                </Grid>\n              </Tooltip>\n            </>\n          }\n\n          <IconButton size='small' style={{ pointerEvents: 'none', opacity: 0.25 }}>\n            <Height />\n          </IconButton>\n          <IconButton size='small' onClick={openMenu(actionItems)}>\n            <MoreVert />\n          </IconButton>\n\n        </Grid>\n      </TableCell>\n      {fieldsData.map((field, i) => {\n        const invisible = field.get('invisible');\n        return invisible\n          ? null\n          : <TableCell key={i}>\n            <TextField disabled={true} fullWidth={true} placeholder={field.get('name')} />\n          </TableCell>;\n      })}\n\n    </TableRow >\n  </>;\n};\n\nconst PresentationalRowThing = React.memo(PresentationalRowThing_);\n\nexport default PresentationalRowThing;\n","import * as React from 'react';\nimport {\n  Button,\n  Checkbox,\n  CircularProgress,\n  ExpansionPanel,\n  ExpansionPanelDetails,\n  Grid,\n  IconButton,\n  Paper,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableRow,\n  Tooltip,\n  Typography,\n  useTheme,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { List, Map } from 'immutable';\nimport { change } from 'redux-form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport UnfoldLessIcon from '@material-ui/icons/UnfoldLess';\nimport UnfoldMoreIcon from '@material-ui/icons/UnfoldMore';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport {\n  Height,\n  RemoveCircle,\n  RemoveCircleOutline,\n} from '@material-ui/icons';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { Product } from '../../../models';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport {\n  makeSelectFormSectionsSize,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  makeSelectExcludedSection,\n  makeSelectExpandedProductInSection,\n  makeSelectSectionExpanded,\n  makeSelectSectionLoading,\n  makeSelectSectionToFocus,\n  quoteFormSelector,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  ClearSectionAction,\n  DeleteSectionAction,\n  DuplicateSectionAction,\n  MapProductsToSectionTemplateAction,\n  PinColumnAction,\n  SetAllExpandedProductInSection,\n  SetDndMenuPathsAction,\n  SetExcludeSectionAction,\n  SetExpandedProductInSection,\n  SetSectionLoadingAndExpandedAction,\n  SetSectionToFocusAction,\n  ToggleExcludeSectionAction,\n  ToggleSectionIsRequestingProductAction,\n  UpdateGrandTotalAction,\n  UpdateSectionTemplateAction,\n  UpdateSectionTitleAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport { makeSelectQuoteTemplateList } from '../../../modules/QuoteTemplateModule/selectors';\nimport {\n  makeSelectChildOrParentHasSectionTemplateRemapAcl,\n} from '../../../modules/AtsModule/selectors';\nimport { makeSelectSelectedSpecIsAI } from '../../../modules/SpecModule/selectors';\nimport { makeSelectLoggedInUserOfficeId } from '../../../modules/AccountModule/selectors';\nimport DebouncedTextField from '../../DebouncedTextField';\nimport { AtsSvgPushpinRounded } from '../../AtsSvg';\nimport PDFModal from '../../PDFModal';\nimport usFlag from '../../../images/productSelectionPage/usFlag.png';\nimport canFlag from '../../../images/productSelectionPage/canFlag.png';\nimport { QUOTE_INPUT_DELAY, getTemplateCurrency } from './constants';\nimport { useSectionStartingIndices } from './hooks';\nimport useStyles from './useStyles';\nimport ReusableMenu from './ReusableMenu';\nimport SectionsMenu from './SectionsMenu';\nimport ExpandIcon from './ExpandIcon';\nimport RowThing from './RowThing';\nimport PresentationalRowThing from './PresentationalRowThing';\nimport { QuickEntry } from './QuickEntry';\nimport { fromJS } from 'immutable';\nimport { applyRoundingOption, formatSectionTotal } from '../../../modules/QuoteEditModule/utils';\nimport { DECIMAL_PRECISION, ROUNDING_OPTIONS } from '../../../containers/QuoteTemplate/utils';\nimport { formatThousandsNumber } from '../../../utils/format-number';\n\nconst TestComp_ = ({\n  sectionIndex,\n  showAIProduct,\n  showImage,\n  importedPrices,\n  invitationResponses,\n}: {\n  sectionIndex: number,\n  showAIProduct: boolean,\n  showImage: boolean,\n  importedPrices: any,\n  invitationResponses: any,\n} & any) => {\n  const dispatch = useDispatch();\n  const expanded = useSelector(makeSelectSectionExpanded(sectionIndex));\n  const loading = useSelector(makeSelectSectionLoading(sectionIndex));\n  const sectionToFocus = useSelector(makeSelectSectionToFocus(sectionIndex));\n  const formSectionsSize = useSelector(makeSelectFormSectionsSize());\n\n  // Get the starting index for this section (calculated once for all sections)\n  const sectionStartingIndices = useSectionStartingIndices();\n  const startingProductIndex = sectionStartingIndices.get(sectionIndex) || 0;\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [menuContent, setMenuContent] = React.useState([]);\n  const [subMenuAnchorEl, setSubMenuAnchorEl] = React.useState(null);\n  const [subMenuContent, setSubMenuContent] = React.useState(null);\n  const [maxLengthWarn, setMaxLengthWarn] = React.useState(false);\n  const sectionRef = React.useRef(null);\n  const sectionTitleRef = React.useRef(null);\n  const [pdfModalProduct, setPdfModalProduct] = React.useState(null);\n\n  const { t } = useTranslation('translations');\n  const togglePdfModal = React.useCallback((product) => {\n    if (product) {\n      setPdfModalProduct(product);\n    } else {\n      setPdfModalProduct(null);\n    }\n  }, []);\n  const openMenu = React.useCallback(_menuContent => e => {\n    setAnchorEl(e.currentTarget);\n    setMenuContent(_menuContent);\n  }, [sectionIndex]);\n\n  const openSubMenu = React.useCallback((_menuContent, _sectionIndex?) => e => {\n    setSubMenuAnchorEl(e.currentTarget);\n    setSubMenuContent(_sectionIndex !== undefined ? { callback: _menuContent, _sectionIndex } : () => _menuContent);\n  }, [sectionIndex]);\n\n  const hasSectionTemplateRemapAcl = useSelector(makeSelectChildOrParentHasSectionTemplateRemapAcl());\n\n  const isAI = useSelector(makeSelectSelectedSpecIsAI());\n\n  const sectionId = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionId']));\n  const specToQuoteSectionNote = useSelector(quoteFormSelector(['sections', sectionIndex, 'aiNote']));\n  const sectionTemplate = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionTemplate']));\n  const fieldsData = (sectionTemplate || Map()).get('fieldsData') || List();\n  const products: List<IMap<Product>> = useSelector(quoteFormSelector(['sections', sectionIndex, 'products'])) || List();\n  const productsVisibleCount = React.useMemo(() => products && products.filter(x => !x.get('notVisibleToSelectedCustomer')).groupBy(x => !x.get('excluded')) || Map(), [products]);\n  const includedCount = React.useMemo(() => (productsVisibleCount.get(true) as Map<any, any> || Map()).size || 0, [productsVisibleCount]);\n  const excludedCount = React.useMemo(() => (productsVisibleCount.get(false) as Map<any, any> || Map()).size || 0, [productsVisibleCount]);\n\n  // Pre-compute visible product indices for row numbering (cumulative across all sections)\n  // Uses the startingProductIndex from the hook calculated at TestComp level\n  const visibleProductIndices = React.useMemo(() => {\n    let indices = fromJS({});\n    let visibleIndex = startingProductIndex;\n    products?.forEach((product, actualIndex) => {\n      if (!product.get('notVisibleToSelectedCustomer')) {\n        indices = indices.set(actualIndex, visibleIndex);\n        visibleIndex++;\n      }\n    });\n    return indices;\n  }, [products, startingProductIndex]);\n\n  const sectionTitle = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionTitle']));\n  const sectionCalculations = useSelector(quoteFormSelector(['sections', sectionIndex, 'sectionCalculations']));\n  const isSectionUpdated = useSelector(quoteFormSelector(['sections', sectionIndex, 'isSectionUpdated']));\n  const currencyType = getTemplateCurrency(sectionTemplate);\n  const pinnedColumn = (sectionTemplate || Map()).getIn(['settings', 'pinnedColumn']) || List();\n  const sortedFieldsData = React.useMemo(() => {\n    return pinnedColumn.map(fieldId => fieldsData.find(field => fieldId === field.get('id'))).concat(fieldsData.filter(field => !pinnedColumn.includes(field.get('id')))) || List();\n  }, [pinnedColumn, fieldsData]);\n\n  const allIsRequestingProduct = React.useMemo(() =>\n    products ? products.every((product: IMap<any>) => product.get('isRequestingProduct') || (product.get('productIndex') && product.get('specProductId'))) : true\n  , [products]);\n\n  const hasIsRequestingProduct = React.useMemo(() =>\n    products ? products.some((product: IMap<any>) => product.get('isRequestingProduct')) : false\n  , [products]);\n\n  const toggleRequestProduct = React.useCallback((e) => {\n    dispatch(new ToggleSectionIsRequestingProductAction({ sectionIndex, isRequestingProduct: !allIsRequestingProduct }));\n  }, [products, allIsRequestingProduct]);\n\n  const handleExpand = React.useCallback(() => dispatch(new SetSectionLoadingAndExpandedAction({\n    ...expanded\n      ? { expanded: false }\n      : { loading: true },\n    section: sectionIndex\n  })), [sectionIndex, expanded]);\n\n  let timeout;\n\n  React.useEffect(() => {\n    if (sectionToFocus) {\n      sectionRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      sectionTitleRef.current.select();\n    }\n  }, [sectionToFocus, sectionId]);\n\n  React.useEffect(() => {\n    if (loading) {\n      clearTimeout(timeout);\n      timeout = setTimeout(() =>\n        dispatch(new SetSectionLoadingAndExpandedAction({\n          loading: false,\n          expanded: true,\n          section: sectionIndex\n        })));\n    }\n  }, [loading]);\n\n  React.useEffect(() => {\n    if (sectionTitle && sectionTitle.length >= 80) {\n      setMaxLengthWarn(true);\n    } else {\n      setMaxLengthWarn(false);\n    }\n  }, [sectionTitle]);\n\n  const handleOnChangeSectionTitle = React.useCallback(e => {\n    if (e.length >= 80) {\n      setMaxLengthWarn(true);\n    } else {\n      setMaxLengthWarn(false);\n    }\n    const newStr = e.replace(/(\\r\\n|\\r|\\n)/g, ' '); // replace newline\n\n    dispatch(new UpdateSectionTitleAction({ sectionIndex, value: newStr }));\n  }, [sectionTitle, maxLengthWarn, sectionIndex]);\n  const classes = useStyles();\n\n  const sectionTemplates = useSelector(makeSelectQuoteTemplateList());\n  const userOfficeId = useSelector(makeSelectLoggedInUserOfficeId());\n\n  const templateMenuContent_ = () => sectionTemplates.reduce((acc, template) => {\n    const content = {\n      label: template.get('templateTitle'),\n      onChange: () => dispatch(new UpdateSectionTemplateAction({ section: sectionIndex, template }))\n    };\n    template.get('defaultOfficeIds')?.includes(userOfficeId) ? acc.unshift(content) : acc.push(content);\n    return acc;\n  }, []);\n  const templateMenuContent = React.useMemo(templateMenuContent_, [sectionTemplates, sectionIndex]);\n\n  const excluded = useSelector(makeSelectExcludedSection({ section: sectionIndex }));\n\n  const excludeSection = React.useCallback(() => {\n    dispatch(new ToggleExcludeSectionAction({ section: sectionIndex }));\n  }, [sectionIndex, excluded]);\n\n  const quickEntryProps_ = () => ({\n    label: t('sectionList.sectionNoteLabel'),\n    dataPath: ['sections', sectionIndex, 'note'],\n    autocompleteProps: { style: { width: '100%' } },\n    textFieldProps: { multiline: true },\n  });\n  const quickEntryProps = React.useMemo(quickEntryProps_, [sectionIndex]);\n\n  const theme = useTheme();\n  const sectionsMenuSetAnchorEl = React.useCallback(() => {\n    setSubMenuAnchorEl(null);\n    setAnchorEl(null);\n  }, []);\n  const refs = React.useRef([]);\n\n  const pushRef = React.useCallback((x, y) => refs.current[x] = y, []);\n  const focusRef = React.useCallback((x, y) => {\n    if (refs.current[x] && refs.current[x].current[y] && refs.current[x].current[y].current) {\n      refs.current[x].current[y].current.focus();\n    }\n  }, [sectionIndex]);\n\n  const handleClick = React.useCallback((event) => {\n    dispatch(new SetDndMenuPathsAction({\n      dataPath: ['sections'],\n      labelPath: ['sectionTitle'],\n      index: sectionIndex,\n      anchorEl: event.currentTarget,\n      isNavigation: true\n    }));\n  }, [sectionIndex]);\n\n  const handleExpandAll = React.useCallback(() => dispatch(new SetAllExpandedProductInSection({\n    section: sectionIndex\n  })), [sectionIndex]);\n\n  const onChangeSpecToQuoteSectionNote = React.useCallback(val => {\n    console.debug(`onChangeSpecToQuoteSectionNote sectionIndex: ${sectionIndex}`);\n    dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].aiNote`, val));\n  }, [sectionIndex]);\n\n  const uiData = useSelector(quoteFormSelector(['sections', sectionIndex, 'uiData'])) || Map();\n  const expandedProductsInSection = useSelector(quoteFormSelector(['sections', sectionIndex, 'uiData', 'expandedProductsInSection'])) || [];\n\n  React.useEffect(() => {\n    // update the section toggle if there are products and uiData doesnt exist yet\n    if (products && products.size > 0 && products.some(product => product.get('id') !== -1)) {\n      if (uiData === undefined || uiData.get('excluded') === undefined) {\n        const shouldExcludeSection = !Boolean(products.find(product => {\n          const isNotExcluded = !Boolean(product.get('excluded'));\n          return isNotExcluded;\n        }));\n        dispatch(new SetExcludeSectionAction({ section: sectionIndex, excluded: shouldExcludeSection }));\n      }\n    }\n  }, [products]);\n\n  const rowClassName = classes[`tableBackground${showImage ? '_showImage' : ''}${showAIProduct ? '_showAIProduct' : ''}_showVendorRequestCb`];\n\n  return (\n    <Grid item={true} style={{ width: '100%', scrollMarginTop: '100px', padding: '0 12px' }} className='Section' id={`Section-${sectionIndex}`} ref={sectionRef}>\n      <ReusableMenu anchorEl={anchorEl} setAnchorEl={setAnchorEl} menuContent={menuContent} />\n      <SectionsMenu anchorEl={subMenuAnchorEl} setAnchorEl={sectionsMenuSetAnchorEl} menuContent={subMenuContent} />\n      {\n        Boolean(pdfModalProduct) ? <PDFModal\n          fileId={pdfModalProduct?.getIn(['aiAnnotation', 'fileId'])}\n          fileName={pdfModalProduct?.getIn(['aiAnnotation', 'fileName'])}\n          defaultPageNumber={pdfModalProduct?.getIn(['aiAnnotation', 'page']) + 1}\n          defaultCoordinates={pdfModalProduct?.getIn(['aiAnnotation', 'coordinates', 0, 0])}\n          onClose={togglePdfModal}\n        /> : null\n      }\n      <Paper style={{ padding: '26px 26px 34px 26px', border: '1px solid var(--Greyscale-400, #BDBDBD)' }} elevation={0} >\n\n        <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap' spacing={4}>\n          <Grid item={true} xs={6}>\n            <Grid container={true} alignItems='center' wrap='nowrap'>\n              {loading ? <IconButton size='medium'><CircularProgress size='1em' disableShrink={true} /></IconButton> :\n                <ExpandIcon onClick={handleExpand} expanded={expanded} size='medium' />}\n              <DebouncedTextField\n                delay={QUOTE_INPUT_DELAY}\n                inputRef={sectionTitleRef}\n                value={sectionTitle}\n                onChange={handleOnChangeSectionTitle}\n                label={t('sectionList.sectionNameLabel')}\n                autoFocus={sectionToFocus}\n                onFocus={e => sectionToFocus && e.currentTarget.select()}\n                showCharCount={true}\n                fullWidth={true}\n                multiline={true}\n                onKeyPress={(e) => {\n                  if (e.key === 'Enter') {\n                    e.preventDefault();\n                  }\n                }}\n                inputProps={{ maxLength: 80 }}\n                InputProps={{\n                  style: {\n                    minWidth: '400px',\n                  },\n                }}\n                helperText={maxLengthWarn ? t('errors.maxLengthCharacters', { limit: 80 }) : null}\n              />\n            </Grid>\n          </Grid>\n\n          <Grid item={true} xs={6}>\n            <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n              <Grid item={true}>\n                <Grid container={true} alignItems='center' wrap='nowrap' spacing={2}>\n                  <Grid item={true}>\n                    <Grid container={true} direction='column'>\n                      <div style={{ display: 'flex', justifyItems: 'center' }}>\n                        <img\n                          src={currencyType === 'CAD' ? canFlag : usFlag}\n                          style={{ width: 35 }}\n                          alt={t(`translations:region.${currencyType === 'CAD' ? 'canadianFlagAlt' : 'usFlagAlt'}`)} />\n                        <Typography variant='h6'>{t(`sectionList.${currencyType}`)}</Typography>\n                      </div>\n                    </Grid>\n                  </Grid>\n                  <Grid item={true}>\n                    {\n                      isSectionUpdated ?\n                        <Grid container={true} direction='row' alignItems='center' wrap='nowrap'>\n                          <InfoOutlinedIcon color='primary' style={{ marginRight: theme.spacing() }} />\n                          <Typography color='primary'>{t('sectionList.pricingUpdatedInfoText')}</Typography>\n                        </Grid> : null\n                    }\n                  </Grid>\n                </Grid>\n              </Grid>\n\n              <Grid item={true}>\n                <Grid container={true} alignItems='center' justify='flex-end'>\n                  {\n                    hasSectionTemplateRemapAcl && (\n                      <Button variant='contained' color='primary' style={{ marginRight: 16 }} onClick={() => dispatch(new MapProductsToSectionTemplateAction({ sectionIndex }))}>\n                        {'Re-map Section Template'}\n                      </Button>\n                    )\n                  }\n                  <FontAwesomeIcon color={theme.palette.text.secondary} icon={'box'} />\n                  <Typography style={{ margin: `0 ${theme.spacing(0.5)}px` }}>+{includedCount} -{excludedCount}</Typography>\n\n                  <Tooltip title={t('sectionList.toggleExclusion')}>\n                    <IconButton size='small' onClick={excludeSection}>\n                      {\n                        excluded\n                          ? <RemoveCircle color='primary' />\n                          : <RemoveCircleOutline />\n                      }\n                    </IconButton>\n                  </Tooltip>\n\n                  <Tooltip title={t('sectionList.reorder')}>\n                    <IconButton size='small' onClick={handleClick} id={`section-${sectionIndex}-sort-button`}>\n                      <Height />\n                    </IconButton>\n\n                  </Tooltip>\n\n                  <IconButton size='small' onClick={openMenu([\n                    {\n                      label: t('sectionList.duplicateSectionLabel'),\n                      onChange: (e, i) => {\n                        dispatch(new DuplicateSectionAction({ section: sectionIndex }));\n                        dispatch(new UpdateGrandTotalAction());\n                      }\n                    },\n                    {\n                      label: t('sectionList.clearSectionlabel'),\n                      onChange: (e, i) => {\n                        dispatch(new ClearSectionAction({ sectionIndex }));\n                      }\n                    },\n                    {\n                      label: t('sectionList.deleteSectionLabel'),\n                      onChange: (e, i) => {\n                        console.debug(`Delete Section ${sectionIndex}`);\n                        dispatch(new DeleteSectionAction({ sectionIndex }));\n                      },\n                    },\n                    {\n                      label: (sectionTemplate || Map()).get('templateTitle') || 'Choose Template',\n                      menuContent: templateMenuContent\n                    }\n                  ])}>\n                    <MoreVert />\n                  </IconButton>\n                </Grid>\n              </Grid>\n            </Grid>\n          </Grid>\n\n        </Grid>\n\n        <ExpansionPanel square={true} expanded={expanded} elevation={0}\n          classes={{ root: classes.expansionPanelRoot, expanded: classes.expanded }}\n          TransitionProps={{ mountOnEnter: true }}>\n          <span />\n          <ExpansionPanelDetails classes={{ root: classes.expansionPanelDetailsRoot }}>\n            <Table className={classes.tableBorder}>\n              <TableHead>\n                <TableRow className={rowClassName}>\n                  <TableCell className={classes.rowNumberCell} />\n                  {showAIProduct && showImage && <TableCell className={classes.AIProductImageCell} />}\n                  {showAIProduct && <TableCell className={classes.nonAIProductTooltip} />}\n                  {showAIProduct && <TableCell className={classes.AIProductNumberCell}>\n                    <Typography>{isAI ? t('sectionList.AIProductNumberCellTitle') : t('sectionList.specProductNumberCellTitle')}</Typography>\n                  </TableCell>}\n                  {showAIProduct && <TableCell className={classes.AIBrandCell}>\n                    <Typography>{isAI ? t('sectionList.AIManufacturerCellTitle') : t('sectionList.specManufacturerCellTitle')}</Typography>\n                  </TableCell>}\n                  <TableCell padding='none'>\n                    <Tooltip\n                      title={expandedProductsInSection.length === 0 || products.size > expandedProductsInSection.length ?\n                        t('sectionList.expandAllRows')\n                        :\n                        t('sectionList.collapseAllRows')\n                      }>\n                      <IconButton size='small' onClick={handleExpandAll}>\n                        {expandedProductsInSection.length === 0 || products.size > expandedProductsInSection.length ? <UnfoldMoreIcon /> : <UnfoldLessIcon />}\n                      </IconButton>\n                    </Tooltip>\n                  </TableCell>\n                  <TableCell padding='none'>\n                    <Checkbox\n                      checked={allIsRequestingProduct && hasIsRequestingProduct}\n                      indeterminate={!allIsRequestingProduct && hasIsRequestingProduct}\n                      onChange={toggleRequestProduct}\n                      color='primary'\n                      size='small'\n                    />\n                  </TableCell>\n                  <TableCell>\n                    {t('sectionList.labelCellTitle')}\n                  </TableCell>\n                  <TableCell>\n                    {t('sectionList.productNumberCellTitle')}\n                  </TableCell>\n                  <TableCell style={{ width: 0 }}>\n                    {t('sectionList.actionCellTitle')}\n                  </TableCell>\n                  {sortedFieldsData.map((field, i) => {\n                    const invisible = field.get('invisible');\n                    return invisible\n                      ? null\n                      :\n                      <Tooltip key={i} title={t('sectionList.pinColumnTooltip')}>\n                        <TableCell className={classes.columnCell} onClick={() => dispatch(new PinColumnAction({ sectionIndex, fieldId: field.get('id') }))}>\n                          <div style={{ display: 'flex', alignItems: 'center' }}>\n                            <AtsSvgPushpinRounded\n                              preserveAspectRatio='none'\n                              color={pinnedColumn.includes(field.get('id')) ? theme.palette.primary.main : 'lightgrey'}\n                            />\n                            {field.get('name')}\n                          </div>\n                        </TableCell>\n                      </Tooltip>;\n                  })\n                  }\n                </TableRow>\n              </TableHead>\n              <TableBody>\n                {(products || Map()).valueSeq().map((product, productIndex) =>\n                  products?.get(productIndex)?.get('notVisibleToSelectedCustomer') ? null :\n                    <RowThing\n                      focusRef={focusRef}\n                      pushRef={pushRef}\n                      openMenu={openMenu}\n                      openSubMenu={openSubMenu}\n                      sectionIndex={sectionIndex}\n                      fieldsData={sortedFieldsData}\n                      product={products?.get(productIndex)}\n                      key={productIndex}\n                      productIndex={productIndex}\n                      displayIndex={visibleProductIndices.get(productIndex)}\n                      showAIProduct={showAIProduct}\n                      showImage={showImage}\n                      openPdfModal={togglePdfModal}\n                      rowClassName={rowClassName}\n                      currencyType={currencyType}\n                      importedPrices={importedPrices}\n                      invitationResponses={invitationResponses}\n                    />\n                )}\n                <PresentationalRowThing\n                  fieldsData={sortedFieldsData}\n                  product={List()}\n                  sectionIndex={sectionIndex}\n                  productIndex={(products || {}).size}\n                  showAIProduct={showAIProduct}\n                  showImage={showImage}\n                  openMenu={openMenu}\n                  rowClassName={rowClassName}\n                />\n              </TableBody>\n            </Table>\n          </ExpansionPanelDetails>\n          <Grid container={true} alignItems='flex-end' wrap='nowrap' spacing={3}>\n            {\n              showAIProduct &&\n              <Grid item={true} xs={3}>\n                <DebouncedTextField delay={QUOTE_INPUT_DELAY} id={`Section${sectionIndex}-AISectionNote`} onChange={onChangeSpecToQuoteSectionNote} value={specToQuoteSectionNote} multiline={true} rowsMax={3} style={{ width: '100%' }} showCharCount={true}\n                  label={isAI ? t('sectionList.AISectionNoteLabel') : t('sectionList.specSectionNoteLabel')} />\n              </Grid>\n            }\n            <Grid item={true} xs={true}>\n              <QuickEntry {...quickEntryProps} showCharCount={true} />\n            </Grid>\n            {\n              sectionCalculations && !sectionCalculations.isEmpty() ?\n                <Grid item={true} className={classes.subTotalBox}>\n                  {\n                    sectionCalculations.valueSeq().map((calc: any, index: number) => {\n                    const formattedValue = calc.get('formattedValue')\n                      ? formatThousandsNumber(calc.get('formattedValue'))\n                      : formatSectionTotal({\n                          value: calc.get('value'),\n                          roundingOption: ROUNDING_OPTIONS.NEAREST_CENT,\n                          decimalPrecision: DECIMAL_PRECISION.TWO,\n                        });\n\n                      return <div key={`__subTotal-${index}`}>\n                          {calc.get('name')}: {`${formattedValue}${calc.get('fieldType') === 'percentage' ? '%' : ''}`}\n                        </div>;\n                    })\n                  }\n                </Grid>\n                : null\n            }\n          </Grid>\n        </ExpansionPanel>\n      </Paper>\n    </Grid>\n  );\n};\n\nexport const TestComp = React.memo(TestComp_);\n","import * as React from 'react';\nimport { useSelector } from 'react-redux';\nimport { fromJS, List } from 'immutable';\nimport { makeSelectSections } from '../../../modules/QuoteModule/selectors';\n\n// Custom hook to calculate starting indices for all sections efficiently\nexport const useSectionStartingIndices = () => {\n  const allSections = useSelector(makeSelectSections());\n\n  return React.useMemo(() => {\n    let startingIndices = fromJS({});\n    let cumulativeIndex = 0;\n\n    allSections.forEach((section, sectionIndex) => {\n      startingIndices = startingIndices.set(sectionIndex, cumulativeIndex);\n      const products = section.get('products') || List();\n      products.forEach((product) => {\n        if (!product.get('notVisibleToSelectedCustomer')) {\n          cumulativeIndex++;\n        }\n      });\n    });\n\n    return startingIndices;\n  }, [allSections]);\n};\n","import * as React from 'react';\nimport { Button, Grid, useTheme } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport { AddNewSectionAction } from '../../../modules/QuoteEditModule/actions';\n\nconst AddSection_ = ({ sectionIndex }: { sectionIndex: number }) => {\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const theme = useTheme();\n  const [hover, setHover] = React.useState(false);\n  return (\n    <Grid container={true} justify='center' alignItems='center' style={{ padding: '0px 14px' }}>\n      <Grid item={true} xs={true} style={{ borderBottom: `1px solid ${hover ? theme.palette.primary.main : '#00000061'}` }} />\n      <Grid item={true} >\n        <Button\n          id={'add-quote-section-button'}\n          onMouseOver={() => setHover(true)}\n          onMouseLeave={() => setHover(false)}\n          onClick={() => dispatch(new AddNewSectionAction({ sectionIndex }))}\n          color='primary'\n        >\n          {\n            hover\n              ?\n              <>\n                <AddCircleIcon />\n                {t('sectionList.addSection')}\n              </>\n              : <AddCircleIcon />\n          }\n        </Button>\n      </Grid>\n      <Grid item={true} xs={true} style={{ borderBottom: `1px solid ${hover ? theme.palette.primary.main : '#00000061'}` }} />\n    </Grid>\n  );\n};\n\nconst AddSection = React.memo(AddSection_);\n\nexport default AddSection;\n","import * as React from 'react';\nimport {\n  Grid,\n  IconButton,\n  makeStyles,\n  TextField,\n  Typography,\n  useTheme,\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport KeyboardArrowLeftIcon from '@material-ui/icons/KeyboardArrowLeft';\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\nimport LastPageIcon from '@material-ui/icons/LastPage';\nimport { SetSectionToFocusAction } from '../../../modules/QuoteEditModule/actions';\n\nconst usePaginationStyles = makeStyles((theme) => ({\n  input: {\n    color: theme.palette.primary.main, // text color always primary\n    '&.Mui-disabled': {\n      color: theme.palette.text.disabled, // fallback to default disabled text color\n    },\n  },\n  underline: {\n    '&:before': {\n      borderBottomColor: theme.palette.primary.main, // underline when unfocused\n    },\n    '&:after': {\n      borderBottomColor: theme.palette.primary.main, // underline when focused\n    },\n    '&:hover:not(.Mui-disabled):before': {\n      borderBottomColor: theme.palette.primary.main, // underline when hovered\n    },\n    '&.Mui-disabled:before': {\n      borderBottomStyle: 'dotted',\n      borderBottomColor: theme.palette.action.disabled, // default disabled color\n    },\n  },\n}));\n\nconst Pagination_ = ({ sectionsInPages, currentPage, setCurrentPage }) => {\n  const dispatch = useDispatch();\n  const classes = usePaginationStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const [statePage, setStatePage] = React.useState(1);\n  const [error, setError] = React.useState(false);\n\n  const onlyOnePage = sectionsInPages.size <= 1;\n\n  React.useEffect(() => {\n    setStatePage(currentPage);\n  }, [currentPage]);\n\n  const onEnterKeyDown = (e) => {\n    if (e.keyCode === 13 && !error) {\n      e.preventDefault(); setCurrentPage(statePage);\n      dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n    } else if (e.keyCode === 13 && error) {\n      alert(t('quotePagination.invalidPageNumber'));\n    }\n  };\n\n  const onInputChange = (e) => {\n    const value = Number(e.target.value);\n    if (!isNaN(value)) {\n      setStatePage(value);\n      setError(Boolean(value <= 0 || value > sectionsInPages.size));\n    }\n  };\n\n  const onPageChange = (page) => {\n    setCurrentPage(page);\n    setStatePage(page);\n    dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n  };\n\n  return (\n    <Grid container={true} direction='row' alignItems='center' wrap='nowrap'>\n      <IconButton size='small' color='primary' disabled={currentPage <= 1} onClick={() => onPageChange(1)}><FirstPageIcon /></IconButton>\n      <IconButton size='small' color='primary' disabled={currentPage <= 1} onClick={() => onPageChange(currentPage - 1)}><KeyboardArrowLeftIcon /></IconButton>\n      <TextField\n        inputProps={{ style: { textAlign: 'center' } }}\n        style={{ width: 32 }}\n        type='tel'\n        value={statePage}\n        disabled={onlyOnePage}\n        onChange={onInputChange}\n        onKeyDown={onEnterKeyDown}\n        InputProps={{\n          classes: {\n            input: classes.input,\n            underline: classes.underline,\n          }\n        }}\n      />\n      <Typography variant='inherit' style={{ color: onlyOnePage ? '#00000061' : theme.palette.primary.main }}>{'/'}</Typography>\n      <Typography variant='inherit' style={{ color: onlyOnePage ? '#00000061' : theme.palette.primary.main, marginLeft: 12 }}>{sectionsInPages.size || 1}</Typography>\n      <IconButton size='small' color='primary' disabled={currentPage >= sectionsInPages.size} onClick={() => onPageChange(currentPage + 1)}><KeyboardArrowRightIcon /></IconButton>\n      <IconButton size='small' color='primary' disabled={currentPage >= sectionsInPages.size} onClick={() => onPageChange(sectionsInPages.size)}><LastPageIcon /></IconButton>\n    </Grid>\n  );\n};\n\nconst Pagination = React.memo(Pagination_);\n\nexport default Pagination;\n","import * as React from 'react';\nimport {\n  Button,\n  Checkbox,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  Divider,\n  Fade,\n  FormControlLabel,\n  Grid,\n  IconButton,\n  Menu,\n  MenuItem,\n  MenuList,\n  Paper,\n  Popper,\n  Theme,\n  Tooltip,\n  Typography,\n  WithStyles,\n  withStyles,\n  WithTheme,\n} from '@material-ui/core';\nimport {\n  compose,\n  Dispatch\n} from 'redux';\nimport {\n  WithTranslation,\n  withTranslation,\n} from 'react-i18next';\nimport {\n  List,\n} from 'immutable';\nimport {\n  Filter,\n  Option,\n  Package,\n  QuoteSectionTemplate,\n} from '../../../models';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport GrandTotals from '../GrandTotals';\nimport {\n  connect,\n  DispatchProp,\n} from 'react-redux';\nimport {\n  makeSelectFormSectionsSize,\n  makeSelectSpecToQuoteDraft,\n  makeSelectSpecToQuoteLinkedListBySpecId,\n  makeSelectIsLoadingSpecToQuoteLinkedList,\n  makeSelectIsSpecToQuote,\n  makeSelectAllIsRequestingProduct,\n  makeSelectHasIsRequestingProduct,\n  makeSelectLinkBidResponseQuote,\n  selectForm,\n  makeSelectIsSelectedProductCount,\n  makeSelectIsSelectedValidProductCount,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  arrayInsert,\n  arrayMove,\n  arrayPush,\n  arrayRemove,\n  change,\n} from 'redux-form';\nimport {\n  IAddItemHandler,\n  IChangeValueHandler,\n  IDeleteItemHandler,\n  IMoveItemHandler\n} from '../types';\nimport { IMPORT_PRICING_FORM_NAME } from '../../../constants/quote';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport SortIcon from '@material-ui/icons/ImportExport';\nimport {\n  Cancel,\n  CheckCircle,\n} from '@material-ui/icons';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT, CREATE_NEW_QUOTE_FROM_SPEC_PATH } from '../../../constants';\nimport { withRouter, match } from 'react-router-dom';\nimport UpdateIcon from '@material-ui/icons/Update';\nimport MonetizationOnIcon from '@material-ui/icons/MonetizationOn';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport withAmplitudeData, { WithAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport {\n  SetOverlayComponentContentAction,\n  SetTimerStartAction,\n  ToggleOverlayComponentAction,\n} from '../../../modules/ApplicationModule/actions';\nimport { makeSelectScrollNode, makeSelectTimerTracker } from '../../../modules/ApplicationModule/selectors';\nimport {\n  AddNewSectionAction,\n  DeleteSelectedProductsAction,\n  GetCurrencyConversionsAction,\n  SetMaxProductsPerPageAction,\n  SetSectionToFocusAction,\n  SortProductsByManufacturerAction,\n  ToggleAllIsRequestingProductAction,\n  UpdateProductsPriceAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport {\n  quoteFormSelector,\n  makeSelectUpdatePricingLoading,\n  makeSelectSectionsInPages,\n  makeSelectMaxProductsPerPage,\n  makeSelectFocusingSection,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  makeSelectAppId,\n  makeSelectEnv,\n  makeSelectUserHasCurrencyConversion,\n  makeSelectUserHasQuoteConnectAcl,\n} from '../../../modules/AtsModule/selectors';\nimport { makeSelectSelectedSpecIsAI } from '../../../modules/SpecModule/selectors';\nimport { AtsSvgBulkEdit, AtsSvgMove } from '../../AtsSvg';\nimport { QuickSearchFirmPackagesAction } from '../../../modules/PackageModule/actions';\nimport { ISpecToQuoteSortValue } from '../../../modules/QuoteModule/reducer';\nimport VendorQuotationsModalContentView from '../VendorQuotationsModalContentView';\nimport BidInvitationServiceApi from '../../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport QuoteFormUtil from '../QuoteFormUtil';\nimport ImportPricingServiceApi from '../../../modules/QuoteConnectService/ImportPricingServiceApi';\nimport BulkEditDialog from './BulkEditDialog';\nimport BulkMoveDialog from './BulkMoveDialog';\nimport SortBySectionDialog from './SortBySectionDialog';\nimport BulkCopyDialog from './BulkCopyDialog';\nimport BulkTemplateUpdateDialog from './BulkTemplateUpdateDialog';\nimport LayersIcon from '@material-ui/icons/Layers';\n\n// Extracted component imports\nimport { TestComp } from './TestComp';\nimport AddSection from './AddSection';\nimport Pagination from './Pagination';\n\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n  headlineTitle: {\n    paddingBottom: 10\n  },\n  addSectionButton: {\n    padding: '10px 36px',\n    marginLeft: '10px',\n  },\n  sortLoadingProgress: {\n    marginRight: theme.spacing()\n  },\n  stickyProductTitle: {\n    position: 'sticky',\n    top: 0,\n    zIndex: 1,\n    backgroundColor: theme.palette.grey[300],\n    height: 48\n  },\n  actionBarContainer: {\n    position: 'sticky',\n    bottom: 0,\n    marginTop: 24,\n    zIndex: 1,\n    backgroundColor: theme.palette.grey[300],\n    padding: '6px 0px',\n    paddingRight: 60,\n  },\n  actionBar: {\n    minHeight: 40,\n    borderRadius: '100vw',\n    margin: '0px 6px',\n    padding: '0px 24px',\n    boxShadow: theme.shadows[8],\n    position: 'relative',\n  },\n  actionButtonsContainer: {\n    position: 'absolute',\n    left: '50%',\n    transform: 'translateX(-50%)',\n    whiteSpace: 'nowrap',\n  },\n  actionBarButton: {\n    padding: '6px 4px',\n    margin: '0px 4px',\n    textTransform: 'none',\n    minWidth: 0,\n  },\n  actionBarButtonIcon: {\n    marginLeft: 0,\n    marginRight: 0\n  },\n  actionBarButtonIconMin: {\n    marginLeft: 0,\n    marginRight: 4\n  },\n  actionBarDivider: {\n    height: '1em',\n    backgroundColor: theme.palette.primary.main,\n    margin: '0px 4px',\n  },\n  showSpecSelect: {\n    marginRight: theme.spacing(1)\n  },\n  sortTooltip: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[4],\n    fontSize: 'inherit',\n    marginBottom: theme.spacing(1),\n  },\n});\n\ninterface ISectionListComponentProps {\n  quoteSectionTemplates?: Map<string, IMap<any>>;\n  productListRef: React.RefObject<HTMLElement>;\n}\n\ninterface IMatchParmsProps {\n  id: string;\n}\n\ninterface ISectionListProps extends ISectionListComponentProps {\n  // quoteId: number;\n  formSectionsSize: number;\n  isUpdatePricingLoading: boolean;\n  match: match<IMatchParmsProps>;\n  loadingSpecToQuoteLinkedList: IMap<{\n    status: boolean;\n    total: number;\n    finished: number;\n  }>;\n  isAI: boolean;\n  disabledSpecToQuote: boolean;\n  isEdit: boolean;\n  isSpecToQuote: boolean;\n  createdFromSpecId: number;\n  getCurrencyConversions: (converionDate: string) => void;\n  conversionDate: string;\n  hasCurrencyConversionAclRole: boolean;\n  timerTracker: any;\n  quickSearchFirmPackages: ({ filters, options }: { filters?: Filter, options?: Option<Package> }) => void;\n  sectionsInPages: any;\n  setMaxProductsPerPage: (maxProductsPerPage: number) => void;\n  maxProductsPerPage: number;\n  focusingSection: number;\n  setFocusingSection: (sectionIndex: number) => void;\n  scrollNode?: React.RefObject<any>;\n  quote: any;\n  hasQuoteConnectAcl: boolean;\n  allIsRequestingProduct: boolean;\n  hasIsRequestingProduct: boolean;\n  isProductSelectedCount: number;\n  isSelectedValidProductCount: number;\n  appId: any;\n  env: any;\n  linkBidResponseId: number;\n  importedPricesForm: any;\n}\n\ntype ISectionListEditProps =\n  ISectionListProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & DispatchProp\n  & WithTranslation\n  & WithTheme\n  & WithAmplitudeData;\n\n// const MAX_PRODUCTS_PER_PAGE = 100;\n\nclass SectionListEdit extends React.PureComponent<ISectionListEditProps, any> {\n  public state = {\n    oldProps: {},\n    isSorting: false,\n    shouldRecalculateGrandTotals: false,\n    currentSectionIndex: null,\n    currentRowIndex: null,\n    cellToFocus: null,\n    count: 0,\n    loadingBarOpen: false,\n    showAIProduct: false,\n    showImage: false,\n    openSortByManufacturerDialog: false,\n    sortDialogLoading: false,\n    hasLoggedS2QLoadingTime: false,\n    selectedFirmPackageOrProduct: null,\n    itemIdToDelete: null,\n    currentPage: 1,\n    maxProducts: 10,\n    sectionToFocus: -1,\n    openVendorQuotationsModal: false,\n    showViewBidInvitationResponseButton: false,\n    invitationResponses: [],\n    importedPrices: [],\n    productViewAnchorEl: null,\n    hideActionBarButtonText: false,\n    openDeleteSelectedProductsDialog: false,\n    isDeletingSelecetedProducts: false,\n    openBulkEditDialog: false,\n    openBulkMoveDialog: false,\n    openBulkCopyDialog: false,\n    openSortBySectionDialog: false,\n    openBulkTemplateUpdateDialog: false,\n  };\n\n  public timer = [];\n\n  public actionBarContainerRef = React.createRef<HTMLDivElement>();\n  public fakeActionButtonsContainerRef = React.createRef<HTMLDivElement>();\n  public paginationRef = React.createRef<HTMLDivElement>();\n  public actionBarContainerResizeObserver = null;\n\n  public setShowAISpecInfo = (): void => {\n    const { isEdit, isSpecToQuote } = this.props;\n    this.setState({\n      showAIProduct: isSpecToQuote,\n      // showImage: false,\n    });\n  }\n\n  public setupResizeObserver = () => {\n    if (!this.actionBarContainerRef.current) { return; }\n    this.actionBarContainerResizeObserver = new ResizeObserver(this.checkCollision);\n    this.actionBarContainerResizeObserver.observe(this.actionBarContainerRef.current);\n    this.actionBarContainerResizeObserver.observe(this.fakeActionButtonsContainerRef.current);\n  }\n\n  public checkCollision = () => {\n    const fakeBRect = this.fakeActionButtonsContainerRef.current?.getBoundingClientRect();\n    const cRect = this.paginationRef.current?.getBoundingClientRect();\n    const COLLIDE_PADDING = 12;\n\n    const bOverlapC = fakeBRect.right > cRect.left - COLLIDE_PADDING;\n\n    this.setState((prev) => {\n      if (!prev.hideActionBarButtonText && bOverlapC) {\n        return { hideActionBarButtonText: true };\n      } else if (prev.hideActionBarButtonText && !bOverlapC) {\n        return { hideActionBarButtonText: false };\n      }\n      return null;\n    });\n  }\n\n  public componentDidMount(): void {\n    const {\n      getCurrencyConversions,\n      conversionDate,\n      hasCurrencyConversionAclRole,\n      dispatch,\n      timerTracker,\n      hasQuoteConnectAcl\n    } = this.props;\n\n    if (this.actionBarContainerRef.current) {\n      this.actionBarContainerResizeObserver = new ResizeObserver(this.checkCollision);\n      this.actionBarContainerResizeObserver.observe(this.actionBarContainerRef.current);\n    }\n    this.checkCollision();\n\n    if (this.props.match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH)) {\n      this.setShowAISpecInfo();\n    }\n\n    if (hasCurrencyConversionAclRole && conversionDate) {\n      getCurrencyConversions(conversionDate);\n    }\n\n    if (this.props.match.url.match(/\\/createQuoteFromSpec\\/([0-9]+)/) && timerTracker.get('action') !== AMPLITUDE_EVENT.s2qLoadingTime) {\n      dispatch(new SetTimerStartAction({ startTime: Date.now(), action: AMPLITUDE_EVENT.s2qLoadingTime }));\n    }\n\n    if (this.props.match.params.id && hasQuoteConnectAcl) {\n      this.fetchBidInvitationResponse();\n      this.fetchHistoryImportedPricing();\n    }\n  }\n\n  public componentDidUpdate(prevProps: Readonly<ISectionListEditProps>, prevState: Readonly<any>, snapshot?: any): void {\n    const {\n      quoteSectionTemplates,\n      formSectionsSize,\n      loadingSpecToQuoteLinkedList,\n      isSpecToQuote,\n      createdFromSpecId,\n      conversionDate,\n      hasCurrencyConversionAclRole,\n      getCurrencyConversions,\n      dispatch,\n      timerTracker,\n      amplitudeData,\n      sectionsInPages,\n      focusingSection,\n      scrollNode,\n      productListRef,\n      // quote\n      importedPricesForm\n    } = this.props;\n\n    if (prevProps.isSpecToQuote !== isSpecToQuote && !createdFromSpecId) {\n      this.setShowAISpecInfo();\n    }\n\n    if (hasCurrencyConversionAclRole && prevProps.conversionDate !== conversionDate) {\n      if (conversionDate) {\n        getCurrencyConversions(conversionDate);\n      }\n    }\n\n    const _sectionSize = sectionsInPages.get(this.state.currentPage)?.size || 0;\n\n    // const isLoadingSections = this.state.count < _sectionSize;\n    const isLoadingSpecToQuoteLinkedList = loadingSpecToQuoteLinkedList.get('status');\n    const isFinishLoading = !loadingSpecToQuoteLinkedList.get('status');\n\n    if (isFinishLoading && isSpecToQuote && timerTracker.get('action') === AMPLITUDE_EVENT.s2qLoadingTime && !this.state.hasLoggedS2QLoadingTime) {\n      const loadingTime = Date.now() - timerTracker.get('startTime');\n      amplitude.logEvent(AMPLITUDE_EVENT.s2qLoadingTime, amplitudeData({\n        duration: loadingTime,\n      }));\n      this.setState({ hasLoggedS2QLoadingTime: true });\n      dispatch(new SetTimerStartAction({ startTime: 0, action: '' }));\n    }\n\n    if ((isLoadingSpecToQuoteLinkedList && !isFinishLoading)) {\n      this.setState({\n        loadingBarOpen: true\n      });\n    }\n\n    if (\n      quoteSectionTemplates !== prevProps.quoteSectionTemplates &&\n      quoteSectionTemplates.size &&\n      !this.props.match.url.includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH) &&\n      !this.props.match.url.includes('edit') &&\n      formSectionsSize === 0\n    ) {\n      this.addNewSection();\n    }\n\n    if (formSectionsSize < prevProps.formSectionsSize && this.state.count === prevProps.formSectionsSize) {\n      const difference = prevProps.formSectionsSize - formSectionsSize;\n      this.timer = this.timer.slice(difference);\n      this.setState(state => ({ ...state, count: state.count - difference }));\n    }\n    if (\n      (this.state.count < _sectionSize)\n    ) {\n      this.timer.push(setTimeout(() => {\n        this.setState(state => ({ ...state, count: state.count + 1 }));\n      }, this.timer.length === 0 ? 0 : 100));\n    } else if (this.timer.length >= _sectionSize && this.timer.length > 0 && isFinishLoading) {\n      // reset count to formSectionsSize\n      // this solves the extra empty sections after fetching recommendations\n      this.setState({\n        count: _sectionSize,\n      });\n\n      if (this.state.loadingBarOpen && !isLoadingSpecToQuoteLinkedList) {\n        setTimeout(() => {\n          this.setState(state => ({ ...state, loadingBarOpen: false }));\n        }, 3000);\n      }\n    }\n\n    if (focusingSection >= 0 && prevProps.focusingSection !== focusingSection && !document.getElementById(`Section-${focusingSection}`)) {\n      const targetPage = sectionsInPages.findKey((sectionsInPage) => sectionsInPage.includes(focusingSection));\n      if (targetPage !== undefined) {\n        this.setState({ currentPage: targetPage });\n      }\n    }\n\n    // reset page position when page changed\n    if (prevState.currentPage !== this.state.currentPage) {\n      scrollNode.current.scrollTo({\n        top: productListRef.current.offsetTop - document.getElementById('quote-app-bar').offsetHeight,\n      });\n\n      window.requestAnimationFrame(() => {\n        this.timer = [];\n        this.setState({ count: 0 });\n      });\n    }\n\n    if (_sectionSize === 0 && this.state.currentPage > 1) {\n      // redirect to previous page if current page is empty\n      this.setState({ currentPage: this.state.currentPage - 1 });\n    }\n\n    if (this.props?.hasQuoteConnectAcl && prevProps.match.params.id !== this.props.match.params.id) {\n      this.fetchBidInvitationResponse();\n      this.fetchHistoryImportedPricing();\n    }\n    if (this.props?.hasQuoteConnectAcl) {\n      if (importedPricesForm && importedPricesForm.size > 0) {\n        const savedImportedPrices = importedPricesForm.getIn(['values', 'importPricingSectionProducts']);\n        if (savedImportedPrices && this.state.importedPrices !== savedImportedPrices) {\n          this.setState({importedPrices: savedImportedPrices});\n        }\n      }\n    }\n  }\n\n  public componentWillUnmount = () => {\n    // Reset form to remove uiData from Sections and Products\n    clearTimeout(this.timer.pop());\n\n    if (this.actionBarContainerResizeObserver) {\n      this.actionBarContainerResizeObserver.disconnect();\n    }\n  }\n\n  public handleCloseSnackbar = () => {\n    this.setState({ loadingBarOpen: false });\n  }\n\n  public handleSortByManufacturer = () => {\n    const {\n      amplitudeData,\n      dispatch,\n    } = this.props;\n\n    dispatch(new SortProductsByManufacturerAction());\n    dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n    this.setState({ currentPage: 1 });\n    amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteSort, amplitudeData({ sort: ISpecToQuoteSortValue.manufacturer }));\n  }\n\n  public toggleAllIsRequestingProduct = () => {\n    const {\n      dispatch,\n      allIsRequestingProduct,\n      hasIsRequestingProduct,\n    } = this.props;\n    dispatch(new ToggleAllIsRequestingProductAction({ isRequestingProduct: !allIsRequestingProduct && !hasIsRequestingProduct }));\n  }\n\n  public handleOnShowAIProductAndImage = (value: string) => {\n    switch (value) {\n      case 'hide': {\n        this.setState({\n          showAIProduct: false,\n          showImage: false,\n          productViewAnchorEl: null\n        });\n        break;\n      }\n      case 'showAIProduct': {\n        this.setState({\n          showAIProduct: true,\n          showImage: false,\n          productViewAnchorEl: null\n        });\n        break;\n      }\n      case 'showAll': {\n        this.setState({\n          showAIProduct: true,\n          showImage: true,\n          productViewAnchorEl: null\n        });\n        break;\n      }\n      default: break;\n    }\n  }\n\n  public onCloseVendorQuoteModal = () => {\n    this.setState({ openVendorQuotationsModal: false });\n  }\n\n  public openVendorQuotationsModal = () => {\n    this.setState({ openVendorQuotationsModal: true });\n  }\n\n  public handleToggleBulkEditDialog = () => {\n    this.setState({ openBulkEditDialog: !this.state.openBulkEditDialog });\n  }\n\n  public handleToggleBulkMoveDialog = () => {\n    this.setState({ openBulkMoveDialog: !this.state.openBulkMoveDialog });\n  }\n\n  public handleToggleBulkCopyDialog = () => {\n    this.setState({ openBulkCopyDialog: !this.state.openBulkCopyDialog });\n  }\n\n  public handleToggleSortBySectionDialog = () => {\n    this.setState({ openSortBySectionDialog: !this.state.openSortBySectionDialog });\n  }\n\n  public handleToggleBulkTemplateUpdateModal = () => {\n    this.setState({ openBulkTemplateUpdateDialog: !this.state.openBulkTemplateUpdateDialog });\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      t,\n      theme,\n      isUpdatePricingLoading,\n      loadingSpecToQuoteLinkedList,\n      isSpecToQuote,\n      isAI,\n      sectionsInPages,\n      allIsRequestingProduct,\n      hasIsRequestingProduct,\n      isProductSelectedCount,\n      isSelectedValidProductCount,\n      linkBidResponseId,\n      formSectionsSize,\n    } = this.props;\n    const {\n      showAIProduct,\n      showImage,\n      openSortByManufacturerDialog,\n      sortDialogLoading,\n      currentPage,\n      openVendorQuotationsModal,\n      showViewBidInvitationResponseButton,\n      invitationResponses,\n      importedPrices,\n      productViewAnchorEl,\n      hideActionBarButtonText,\n      openDeleteSelectedProductsDialog,\n      isDeletingSelecetedProducts,\n    } = this.state;\n    const _sectionSize = sectionsInPages.get(this.state.currentPage)?.size || 0;\n    const noSections = formSectionsSize < 1;\n\n    const anchorEl = document.getElementById('quote-app-bar');\n    const isLoadingSpecToQuoteLinkedList = loadingSpecToQuoteLinkedList.get('status');\n    const isFinishLoading = !loadingSpecToQuoteLinkedList.get('status');\n\n    return (\n      <div className={classes.root} id='test-ID'>\n        {anchorEl && <Popper id={'poppa'} open={this.state.loadingBarOpen} anchorEl={anchorEl} transition={true}>\n          {({ TransitionProps }) => (\n            <Fade {...TransitionProps} timeout={350}>\n              <Paper style={{\n                background: theme.palette.primary[50],\n                borderRadius: theme.shape.borderRadius,\n                minWidth: theme.spacing(50),\n                maxWidth: '100%'\n              }}>\n                <Grid container={true} alignItems='center' justify='center' style={{ padding: '16px 24px 16px 24px' }}>\n                  {isLoadingSpecToQuoteLinkedList ? <CircularProgress color='primary' size='2rem' style={{ marginRight: 12 }} /> : null}\n                  <Typography\n                    variant='body2'>{\n                      isLoadingSpecToQuoteLinkedList ?\n                        t('specToQuotePage.retrievingRelevantProducts') : isFinishLoading && t('generalLoading.loadingCompleted')\n                    }</Typography>\n                  <IconButton size='small' onClick={this.handleCloseSnackbar} color='primary'>\n                    {!loadingSpecToQuoteLinkedList.get('status') ? <CheckCircle /> : <Cancel />}\n                  </IconButton>\n                </Grid>\n              </Paper>\n            </Fade>\n          )}\n        </Popper>}\n\n        <Grid item={true}>\n          <Typography\n            className={classes.headlineTitle}\n            variant='h5'\n          >\n            {t('productList.title')}\n          </Typography>\n        </Grid>\n\n        <Grid container={true} justify='space-between' alignItems='center'>\n          <Tooltip title={hasIsRequestingProduct ? t('sectionList.deselectAllTooltip') : t('sectionList.selectAllTooltip')}>\n            <FormControlLabel\n              control={\n                <Checkbox\n                  checked={allIsRequestingProduct && hasIsRequestingProduct}\n                  indeterminate={!allIsRequestingProduct && hasIsRequestingProduct}\n                  onChange={this.toggleAllIsRequestingProduct}\n                  color='primary'\n                  size='small'\n                />\n              }\n              label={hasIsRequestingProduct ? t('sectionList.deselectAll') : t('sectionList.selectAll')}\n            />\n          </Tooltip>\n          {\n            showViewBidInvitationResponseButton &&\n            <Button\n              variant='text'\n              color='primary'\n              onClick={this.openVendorQuotationsModal}\n            >\n              <MonetizationOnIcon /> {t('sectionList.viewVendorQuatationsButton')}\n            </Button>\n          }\n        </Grid>\n\n        <Grid\n          container={true}\n          spacing={3}\n        >\n          {\n            sectionsInPages.get(currentPage)?.map((sectionIndex, i) => (\n              this.state.count >= i &&\n              <div key={i} style={{ width: '100%', paddingRight: 12 }}>\n                {i === 0 && <AddSection sectionIndex={sectionIndex} />}\n                <TestComp\n                  key={sectionIndex}\n                  sectionIndex={sectionIndex}\n                  showAIProduct={showAIProduct}\n                  showImage={showImage}\n                  importedPrices={importedPrices}\n                  invitationResponses={invitationResponses}\n                />\n                <AddSection sectionIndex={sectionIndex + 1} />\n              </div>\n            ))\n          }\n          {\n            !_sectionSize && <AddSection sectionIndex={0} />\n          }\n\n          <GrandTotals />\n\n        </Grid>\n\n        <div ref={this.actionBarContainerRef} className={classes.actionBarContainer}>\n          <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap' className={classes.actionBar} style={{ backgroundColor: isProductSelectedCount > 0 ? theme.palette.primary[50] : theme.palette.common.white }}>\n            <Grid item={true}>\n              <Typography variant='body2' color='primary' style={{ fontWeight: 'bold' }}>\n                {t('sectionList.numberOfSelectedProducts', { count: isProductSelectedCount })}\n              </Typography>\n            </Grid>\n\n            <Grid item={true} className={classes.actionButtonsContainer}>\n              <Grid container={true} justify='space-between' alignItems='center' wrap='nowrap'>\n                <Tooltip title={t('sectionList.bulkEditButton')}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={!isFinishLoading}\n                      onClick={this.handleToggleBulkEditDialog}\n                      color='primary'\n                      startIcon={<AtsSvgBulkEdit color={theme.palette.primary.main} />}\n                      classes={{ startIcon: classes.actionBarButtonIcon }}\n                    >\n                      {!hideActionBarButtonText ? t('sectionList.bulkEditButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n\n                <Tooltip title={t('sectionList.bulkMoveButton')}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={!isFinishLoading}\n                      onClick={this.handleToggleBulkMoveDialog}\n                      color='primary'\n                      startIcon={<AtsSvgMove color={theme.palette.primary.main} />}\n                      classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    >\n                      {!hideActionBarButtonText ? t('sectionList.bulkMoveButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n\n                <Tooltip title={t('sectionList.bulkCopyButton')}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={!isFinishLoading}\n                      onClick={this.handleToggleBulkCopyDialog}\n                      color='primary'\n                      startIcon={<FileCopyIcon fontSize='inherit' />}\n                      classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    >\n                      {!hideActionBarButtonText ? t('sectionList.bulkCopyButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n\n                <Tooltip\n                  {\n                    ...isSelectedValidProductCount === 0\n                      ? {title: t('sectionList.updateAllProductPricing')}\n                      : {\n                          interactive: true,\n                          placement: 'top',\n                          disableHoverListener: !isFinishLoading || isUpdatePricingLoading,\n                          classes: { tooltip: classes.sortTooltip },\n                          title: (\n                            <MenuList>\n                              <MenuItem disabled={isUpdatePricingLoading} onClick={() => dispatch(new UpdateProductsPriceAction({ updateOnlySelectedProducts: true }))}>\n                                {t('sectionList.updateSelectedProductPricing')}\n                              </MenuItem>\n                              <MenuItem disabled={isUpdatePricingLoading} onClick={() => dispatch(new UpdateProductsPriceAction({}))}>\n                                {t('sectionList.updateAllProductPricing')}\n                              </MenuItem>\n                            </MenuList>\n                          )}\n                      }\n                >\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      color='primary'\n                      onClick={\n                        isProductSelectedCount === 0\n                          ? () => dispatch(new UpdateProductsPriceAction({}))\n                          : null\n                      }\n                      disabled={isUpdatePricingLoading || !isFinishLoading}\n                      startIcon={\n                        isUpdatePricingLoading\n                          ? <CircularProgress size='1em' />\n                          : <UpdateIcon fontSize='inherit' />\n                      }\n                      classes={{ startIcon: hideActionBarButtonText ? classes.actionBarButtonIcon : classes.actionBarButtonIconMin }}\n                      style={{ cursor: isProductSelectedCount > 0 ? 'default' : 'pointer' }}\n                    >\n                      {\n                        !hideActionBarButtonText\n                          ? isUpdatePricingLoading\n                              ? t('sectionList.updatingPricing')\n                              : t('sectionList.updatePricingButton')\n                          : ''\n                      }\n                    </Button>\n                  </span>\n                </Tooltip>\n\n                <Tooltip title={t('sectionList.bulkDeleteButton')}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      onClick={() => this.setState({ openDeleteSelectedProductsDialog: true })}\n                      color='primary'\n                      disabled={isProductSelectedCount === 0 || !isFinishLoading}\n                      startIcon={<DeleteIcon fontSize='inherit' />}\n                      classes={{ startIcon: classes.actionBarButtonIcon }}\n                    >\n                      {!hideActionBarButtonText ? t('sectionList.bulkDeleteButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n                <Divider orientation='vertical' className={classes.actionBarDivider} />\n\n                <Tooltip\n                  interactive={true}\n                  placement={'top'}\n                  disableHoverListener={!isFinishLoading || noSections}\n                  classes={{ tooltip: classes.sortTooltip }}\n                  title={(\n                    <MenuList>\n                      <MenuItem onClick={this.handleToggleSortBySectionDialog}>\n                        {t('sectionList.sort.sortBySection')}\n                      </MenuItem>\n                      <MenuItem onClick={() => this.setState({ openSortByManufacturerDialog: true })}>\n                        {t('sectionList.sort.sortByManufacturer')}\n                      </MenuItem>\n                    </MenuList>\n                  )}\n                >\n                  <Grid\n                    container={true}\n                    justify='center'\n                    alignItems='center'\n                    wrap='nowrap'\n                    className={classes.actionBarButton}\n                    style={{\n                      color: (!isFinishLoading || noSections) ? theme.palette.grey[400] : theme.palette.primary.main,\n                      width: 'fit-content',\n                    }}\n                  >\n                    <SortIcon color='inherit' />\n                    <Typography color='inherit'>\n                      {!hideActionBarButtonText ? t('sectionList.sortButton') : ''}\n                    </Typography>\n                  </Grid>\n                </Tooltip>\n\n                {\n                  isSpecToQuote && <>\n                    <Tooltip title={t('sectionList.viewButton')}>\n                      <Button\n                        className={classes.actionBarButton}\n                        onClick={(e) => this.setState({ productViewAnchorEl: e.currentTarget })}\n                        color='primary'\n                        startIcon={<VisibilityIcon fontSize='inherit' />}\n                        classes={{ startIcon: hideActionBarButtonText ? classes.actionBarButtonIcon : classes.actionBarButtonIconMin }}\n                      >\n                        {!hideActionBarButtonText ? t('sectionList.viewButton') : ''}\n                      </Button>\n                    </Tooltip>\n                    <Menu\n                      id='product-view-menu'\n                      anchorEl={productViewAnchorEl}\n                      open={Boolean(productViewAnchorEl)}\n                      onClose={() => this.setState({ productViewAnchorEl: null })}\n                    >\n                      <MenuItem value={'hide'} onClick={() => this.handleOnShowAIProductAndImage('hide')}>\n                        {isAI ? t('sectionList.aiDisplayDropDown.hideAiProduct') : t('sectionList.aiDisplayDropDown.hideSpecProduct')}\n                      </MenuItem>\n                      <MenuItem value={'showAIProduct'} onClick={() => this.handleOnShowAIProductAndImage('showAIProduct')}>\n                        {isAI ? t('sectionList.aiDisplayDropDown.showAiProduct') : t('sectionList.aiDisplayDropDown.showSpecProduct')}\n                      </MenuItem>\n                      <MenuItem value={'showAll'} onClick={() => this.handleOnShowAIProductAndImage('showAll')}>\n                        {isAI ? t('sectionList.aiDisplayDropDown.showAiProductAndImage') : t('sectionList.aiDisplayDropDown.showSpecProductAndImage')}\n                      </MenuItem>\n                    </Menu>\n                  </>\n                }\n\n                <Tooltip title={t('sectionList.bulkTemplateUpdateButton')}>\n                  <span>\n                    <Button\n                      className={classes.actionBarButton}\n                      disabled={!isFinishLoading || noSections}\n                      onClick={this.handleToggleBulkTemplateUpdateModal}\n                      color='primary'\n                      startIcon={<LayersIcon fontSize='inherit' />}\n                      classes={{ startIcon: classes.actionBarButtonIconMin }}\n                    >\n                      {!hideActionBarButtonText ? t('sectionList.bulkTemplateUpdateButton') : ''}\n                    </Button>\n                  </span>\n                </Tooltip>\n              </Grid>\n            </Grid>\n\n            {/* Fake action buttons container for collision calculation */}\n            <Grid item={true} ref={this.fakeActionButtonsContainerRef} className={classes.actionButtonsContainer} style={{ visibility: 'hidden', pointerEvents: 'none' }}>\n              <Grid container={true} direction='row' justify='space-between' alignItems='center' wrap='nowrap'>\n                <Button className={classes.actionBarButton} startIcon={<AtsSvgBulkEdit />} classes={{ startIcon: classes.actionBarButtonIcon }}>\n                  {t('sectionList.bulkEditButton')}\n                </Button>\n                <Button className={classes.actionBarButton} startIcon={<AtsSvgMove />} classes={{ startIcon: classes.actionBarButtonIconMin }}>\n                  {t('sectionList.bulkMoveButton')}\n                </Button>\n                <Button className={classes.actionBarButton} startIcon={<FileCopyIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIconMin }}>\n                  {t('sectionList.bulkCopyButton')}\n                </Button>\n                <Button className={classes.actionBarButton} startIcon={isUpdatePricingLoading ? <CircularProgress size='1em' /> : <UpdateIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIconMin }}>\n                  { isUpdatePricingLoading ? t('sectionList.updatingPricing') : t('sectionList.updatePricingButton') }\n                </Button>\n                <Button className={classes.actionBarButton} startIcon={<DeleteIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIcon }}>\n                  {t('sectionList.bulkDeleteButton')}\n                </Button>\n                <Divider orientation='vertical' className={classes.actionBarDivider} />\n                <Button className={classes.actionBarButton} startIcon={<SortIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIcon }}>\n                  {t('sectionList.sortButton')}\n                </Button>\n                <Grid container={true} justify='center' alignItems='center' wrap='nowrap' className={classes.actionBarButton} style={{ width: 'fit-content' }}>\n                  <SortIcon color='inherit' />\n                  <Typography color='inherit'>\n                    {t('sectionList.sortButton')}\n                  </Typography>\n                </Grid>\n                {isSpecToQuote && <>\n                    <Button className={classes.actionBarButton} startIcon={<VisibilityIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIconMin }}>\n                      {t('sectionList.viewButton')}\n                    </Button>\n                  </>\n                }\n                <Button className={classes.actionBarButton} startIcon={<LayersIcon fontSize='inherit' />} classes={{ startIcon: classes.actionBarButtonIconMin }}>\n                  {t('sectionList.bulkTemplateUpdateButton')}\n                </Button>\n              </Grid>\n            </Grid>\n\n            <Grid item={true} ref={this.paginationRef}>\n              <Pagination currentPage={currentPage} sectionsInPages={sectionsInPages} setCurrentPage={(page) => this.setState({ currentPage: page })} />\n            </Grid>\n          </Grid>\n        </div>\n\n        {\n          linkBidResponseId &&\n          <VendorQuotationsModalContentView\n            linkBidResponseId={linkBidResponseId}\n            onClose={this.onCloseVendorQuoteModal}\n          />\n        }\n        {\n          openVendorQuotationsModal && !linkBidResponseId &&\n          <Dialog\n            maxWidth='xl'\n            fullWidth={true}\n            open={true}\n            disablePortal={true}\n            disableEnforceFocus={true}\n          >\n            <VendorQuotationsModalContentView\n              linkBidResponseId={0}\n              onClose={this.onCloseVendorQuoteModal}\n            />\n          </Dialog>\n        }\n\n        <Dialog open={openSortByManufacturerDialog}>\n          <DialogContent style={{ whiteSpace: 'pre-line' }}>\n            {t('sectionList.confirmSortContentText')}\n          </DialogContent>\n          <DialogActions>\n            <Button\n              color='primary'\n              disabled={sortDialogLoading}\n              onClick={() => this.setState({ openSortByManufacturerDialog: false })}>\n              {t('formButtons.cancel')}\n            </Button>\n            <Button\n              color='primary'\n              disabled={sortDialogLoading}\n              onClick={() => {\n                this.setState({ sortDialogLoading: true },\n                  () => setTimeout(() => {\n                    this.handleSortByManufacturer();\n                    this.setState({ openSortByManufacturerDialog: false, sortDialogLoading: false });\n                  }, 500));\n                // add timeout for fake loading\n              }}>\n              {sortDialogLoading && <CircularProgress color='inherit' size='1em' className={classes.sortLoadingProgress} />}\n              {t('sectionList.confirmSort')}\n            </Button>\n          </DialogActions>\n        </Dialog>\n\n        <Dialog open={openDeleteSelectedProductsDialog}>\n          <DialogContent style={{ whiteSpace: 'pre-line' }}>\n            <Typography variant='body2' color='textPrimary'>\n              {\n                isProductSelectedCount > 1\n                  ? t('sectionList.deleteSelectedProductsDialog.promptForMulti', { count: isProductSelectedCount })\n                  : t('sectionList.deleteSelectedProductsDialog.promptForSingle')\n              }\n            </Typography>\n            <Typography variant='body1' color='textSecondary' style={{ marginTop: 8 }}>\n              {t('sectionList.deleteSelectedProductsDialog.warning')}\n            </Typography>\n          </DialogContent>\n          <DialogActions>\n            <Button\n              color='primary'\n              disabled={isDeletingSelecetedProducts}\n              onClick={() => this.setState({ openDeleteSelectedProductsDialog: false })}>\n              {t('formButtons.cancel')}\n            </Button>\n            <Button\n              color='primary'\n              onClick={() => {\n                if (!isDeletingSelecetedProducts) {\n                  this.setState({ isDeletingSelecetedProducts: true });\n                  dispatch(new DeleteSelectedProductsAction({\n                    onSuccess: () => {\n                      this.setState({ isDeletingSelecetedProducts: false });\n                      setTimeout(() => this.setState({ openDeleteSelectedProductsDialog: false }), 100);\n                    }\n                  }));\n                }\n              }}\n            >\n              {isDeletingSelecetedProducts && <CircularProgress color='inherit' size='1em' className={classes.sortLoadingProgress} />}\n              {t('formButtons.delete')}\n            </Button>\n          </DialogActions>\n        </Dialog>\n\n        <BulkEditDialog\n          open={this.state.openBulkEditDialog}\n          onClose={this.handleToggleBulkEditDialog}\n        />\n\n        <BulkMoveDialog\n          open={this.state.openBulkMoveDialog}\n          onClose={this.handleToggleBulkMoveDialog}\n        />\n\n        <BulkCopyDialog\n          open={this.state.openBulkCopyDialog}\n          onClose={this.handleToggleBulkCopyDialog}\n        />\n\n        <SortBySectionDialog\n          open={this.state.openSortBySectionDialog}\n          onClose={this.handleToggleSortBySectionDialog}\n          onSuccess={() => this.setState({ currentPage: 1 })}\n        />\n\n        <BulkTemplateUpdateDialog\n          open={this.state.openBulkTemplateUpdateDialog}\n          onClose={this.handleToggleBulkTemplateUpdateModal}\n          quoteSectionTemplates={this.props.quoteSectionTemplates}\n        />\n      </div>\n    );\n  }\n\n  private fetchBidInvitationResponse = async () => {\n    const { appId, env } = this.props;\n    const invitationResponseResult = await BidInvitationServiceApi.fetchAllInvitationResponse(env, appId, {\n      quoteId: this.props.match.params.id,\n      status: ['submitted'],\n      limit: 100\n    });\n\n    if (invitationResponseResult?.length) {\n      this.setState({ showViewBidInvitationResponseButton: true, invitationResponses: invitationResponseResult });\n    } else {\n      this.setState({ showViewBidInvitationResponseButton: false, invitationResponses: [] });\n    }\n  }\n\n  private fetchHistoryImportedPricing = async () => {\n    const quoteId = Number(this.props.match.params.id);\n    const importPricingResults = await ImportPricingServiceApi.findAllByQuote(this.props.env, this.props.appId, quoteId);\n    const importedPrices = QuoteFormUtil.getImportedPriceCells(importPricingResults);\n    this.setState({ importedPrices });\n    this.props.dispatch(change(IMPORT_PRICING_FORM_NAME, 'importPricingSectionProducts', importedPrices));\n  }\n\n  private addNewSection = () => {\n    const { dispatch } = this.props;\n    dispatch(new AddNewSectionAction({}));\n  }\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  const changeValue: IChangeValueHandler = ({ form, field, value }) => dispatch(change(form, field, value));\n  const moveItem: IMoveItemHandler = ({\n    form,\n    field,\n    indexA,\n    indexB\n  }) => dispatch(arrayMove(form, field, indexA, indexB));\n  const deleteItem: IDeleteItemHandler = ({ form, field, index }) => dispatch(arrayRemove(form, field, index));\n  const addItem: IAddItemHandler = ({ form, field, item, atIndex }) => {\n    if (atIndex || atIndex === 0) {\n      dispatch(arrayInsert(form, field, atIndex, item));\n    } else {\n      dispatch(arrayPush(form, field, item));\n    }\n  };\n  const getCurrencyConversions = (conversionDate: string) => {\n    dispatch(new GetCurrencyConversionsAction({ conversionDate }));\n  };\n\n  const quickSearchFirmPackages = ({ filters, options }) => dispatch(new QuickSearchFirmPackagesAction({\n    filters,\n    options\n  }));\n\n  const setMaxProductsPerPage = (maxProductsPerPage: number) => dispatch(new SetMaxProductsPerPageAction({ maxProductsPerPage }));\n\n  const setFocusingSection = (sectionIndex: number) => dispatch(new SetSectionToFocusAction({ sectionIndex }));\n\n  return {\n    dispatch,\n    changeValue,\n    addItem,\n    moveItem,\n    deleteItem,\n    getCurrencyConversions,\n    quickSearchFirmPackages,\n    setMaxProductsPerPage,\n    setFocusingSection\n  };\n};\nconst mapStateToProps = (state, props) => {\n  const specId = quoteFormSelector(['createdFromSpecId'])(state);\n  const specToQuoteDraft = makeSelectSpecToQuoteDraft()(state);\n  const specToQuoteLinkedList = makeSelectSpecToQuoteLinkedListBySpecId(specId)(state);\n  const isSpecToQuote = state.getIn(['router', 'location', 'pathname']).includes(CREATE_NEW_QUOTE_FROM_SPEC_PATH) || makeSelectIsSpecToQuote()(state);\n  const isEdit = state.getIn(['router', 'location', 'pathname']).includes('edit');\n  const urlSearchParams = state.getIn(['router', 'location', 'search']);\n  let linkBidResponseId = null;\n  let sourceQuoteId = null;\n  let importedPricesForm = null;\n  const hasQuoteConnectAcl = makeSelectUserHasQuoteConnectAcl()(state);\n  if (hasQuoteConnectAcl) {\n    if (urlSearchParams) {\n      const urlParams = new URLSearchParams(location.search);\n      const linkBidInvitationQuote = makeSelectLinkBidResponseQuote()(state);\n      if (linkBidInvitationQuote) {\n        linkBidResponseId = null;\n      } else {\n        linkBidResponseId = urlParams.get('linkBidResponseId');\n      }\n      sourceQuoteId = urlParams.get('sourceQuoteId');\n    }\n    // save stat to props\n    importedPricesForm = selectForm(IMPORT_PRICING_FORM_NAME)(state);\n  }\n  return {\n    isEdit,\n    isAI: makeSelectSelectedSpecIsAI()(state),\n    formSectionsSize: makeSelectFormSectionsSize()(state),\n    isSpecToQuote: makeSelectIsSpecToQuote()(state),\n    createdFromSpecId: specId,\n    // quoteId: makeSelectSelectedQuoteId()(state),\n    // quote: makeSelectSelectedQuote()(state),\n    isUpdatePricingLoading: makeSelectUpdatePricingLoading()(state),\n    loadingSpecToQuoteLinkedList: makeSelectIsLoadingSpecToQuoteLinkedList()(state),\n    disabledSpecToQuote: isSpecToQuote ? false : (!specToQuoteDraft || specToQuoteDraft.isEmpty()) && (!specToQuoteLinkedList || specToQuoteLinkedList.size === 0),\n    conversionDate: quoteFormSelector(['conversionDate'], null)(state),\n    hasCurrencyConversionAclRole: makeSelectUserHasCurrencyConversion()(state),\n    timerTracker: makeSelectTimerTracker()(state),\n    maxProductsPerPage: makeSelectMaxProductsPerPage()(state),\n    sectionsInPages: makeSelectSectionsInPages()(state),\n    focusingSection: makeSelectFocusingSection()(state),\n    scrollNode: makeSelectScrollNode()(state),\n    hasQuoteConnectAcl,\n    allIsRequestingProduct: makeSelectAllIsRequestingProduct()(state),\n    hasIsRequestingProduct: makeSelectHasIsRequestingProduct()(state),\n    isProductSelectedCount: makeSelectIsSelectedProductCount()(state),\n    isSelectedValidProductCount: makeSelectIsSelectedValidProductCount()(state),\n    appId: makeSelectAppId()(state),\n    env: makeSelectEnv()(state),\n    linkBidResponseId,\n    importedPricesForm,\n    sourceQuoteId,\n  };\n};\n\nexport default compose<React.ComponentClass<ISectionListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  withRouter,\n)(SectionListEdit);\n","import * as React from 'react';\nimport {\n  ListItemIcon,\n  Menu,\n  MenuItem,\n  Tooltip,\n  Typography,\n  useTheme,\n} from '@material-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { List } from 'immutable';\nimport { arrayMove } from 'redux-form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Height } from '@material-ui/icons';\nimport {\n  closestCenter,\n  DndContext,\n  DragOverlay,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors\n} from '@dnd-kit/core';\nimport {\n  SortableContext,\n  sortableKeyboardCoordinates,\n  verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport {\n  restrictToParentElement,\n  restrictToVerticalAxis\n} from '@dnd-kit/modifiers';\nimport { QUOTE_FORM_NAME } from '../../../constants/quote';\nimport { AI_IDENTIFIED_PRODUCT_ID } from '../../../constants';\nimport {\n  makeSelectIsSpecToQuote,\n  makeSelectSpecProductsFromLinkedList,\n} from '../../../modules/QuoteModule/selectors';\nimport {\n  makeSelectDndMenuPaths,\n  makeSelectFocusingSection,\n  makeSelectSectionsInPages,\n  quoteFormSelector,\n} from '../../../modules/QuoteEditModule/selectors';\nimport {\n  ReorderProductAction,\n  SetDndMenuPathsAction,\n  SetSectionToFocusAction,\n} from '../../../modules/QuoteEditModule/actions';\nimport { SortableItem } from './SortableItem';\nimport useStyles from './useStyles';\n\nexport const DnDMenu = React.memo(() => {\n\n  const _theme = useTheme();\n  const paths = useSelector(makeSelectDndMenuPaths());\n  const { t } = useTranslation('translations');\n\n  const {\n    dataPath,\n    labelPath,\n    index,\n    isNavigation = false, // used for pagination\n    anchorEl\n  } = paths.toJS();\n\n  const options = (dataPath ? useSelector(quoteFormSelector(dataPath)) : List()) || List();\n  const isSpecToQuote = useSelector(makeSelectIsSpecToQuote());\n  const focusedSectionIndex = useSelector(makeSelectFocusingSection());\n  const sectionsInPages = useSelector(makeSelectSectionsInPages());\n  const specId = useSelector(quoteFormSelector(['createdFromSpecId']));\n  const specProducts = useSelector(makeSelectSpecProductsFromLinkedList(specId));\n\n  const dispatch = useDispatch();\n\n  React.useEffect(() => {\n    if (isNavigation && index !== -1) {\n      dispatch(new SetSectionToFocusAction({ sectionIndex: index }));\n    }\n  }, [index]);\n\n  const handleClose = () => {\n    dispatch(new SetDndMenuPathsAction({\n      ...paths.toJS(),\n      anchorEl: null,\n      index: -1\n    }));\n    if (isNavigation && focusedSectionIndex !== -1) {\n      dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n    }\n  };\n\n  const [activeId, setActiveId] = React.useState(null);\n  const sensors = useSensors(\n    useSensor(PointerSensor),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    })\n  );\n\n  const handleDragEnd = (event) => {\n    const { active, over } = event;\n    if (active.id !== over.id) {\n      console.debug(`Reorder from ${active.id} to ${over.id}`);\n      setActiveId(null);\n      if (labelPath.includes('productNumber')) {\n        dispatch(new ReorderProductAction({ fromIndex: Number(active.id), toIndex: Number(over.id), dataPath }));\n      } else {\n        if (isNavigation) {\n          dispatch(new SetSectionToFocusAction({ sectionIndex: -1 }));\n        }\n        dispatch(arrayMove(QUOTE_FORM_NAME, dataPath.join('.'), active.id, over.id));\n      }\n      if (!isNavigation) {\n        handleClose();\n      }\n    } else {\n      // this same as onclick item if id is the same\n      // then focus on the section by setting sectionToFocus index\n      if (isNavigation && active.id === over.id) {\n        dispatch(new SetSectionToFocusAction({ sectionIndex: Number(active.id) }));\n      }\n      setActiveId(null);\n    }\n  };\n\n  const handleDragStart = (event) => {\n    const { active } = event;\n    setActiveId(active.id);\n  };\n\n  const classes = useStyles();\n\n  const onMenuOpenScrollHereRef = React.useRef(null);\n  const handleOpenMenu = () => {\n    if (onMenuOpenScrollHereRef.current) {\n      onMenuOpenScrollHereRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    }\n  };\n\n  const activeSpecProductId = options.getIn([activeId, 'specToQuoteValues', 'specProductId']);\n  const activeSpecProduct = specProducts?.get(String(activeSpecProductId));\n  const activeSpecProductNumber = activeSpecProduct?.get('id') === AI_IDENTIFIED_PRODUCT_ID ?\n    !!activeSpecProduct?.get('identifiedProductNumber') ?\n      activeSpecProduct?.get('identifiedProductNumber') : '-'\n    :\n    activeSpecProduct?.get('productNumber');\n\n  return <Menu\n    anchorEl={isNavigation ? null : anchorEl}\n    open={Boolean(anchorEl)}\n    onClose={handleClose}\n    classes={{ paper: isNavigation ? classes.sectionsList : '', list: isNavigation ? classes.menuList : '' }}\n    onEntered={handleOpenMenu}\n    getContentAnchorEl={null}\n    anchorOrigin={isNavigation ? { vertical: 'center', horizontal: 'right' } : { vertical: 'top', horizontal: 'left' }}\n    transformOrigin={isNavigation ? { vertical: 'center', horizontal: 'right' } : { vertical: 'top', horizontal: 'left' }}\n    disableAutoFocus={true}\n    disableEnforceFocus={true}\n    disableAutoFocusItem={true}\n    disableRestoreFocus={true}\n  >\n    <DndContext\n      sensors={sensors}\n      collisionDetection={closestCenter}\n      onDragEnd={handleDragEnd}\n      onDragStart={handleDragStart}\n      modifiers={[restrictToVerticalAxis]}\n    >\n      <SortableContext\n        items={options.map((option, i) => String(i)).toArray()}\n        strategy={verticalListSortingStrategy}\n      >\n        {options.map((option, i) => {\n          if (isSpecToQuote && (labelPath.includes('productNumber') || (option.get('specProductId') || option.get('specToQuoteValues')))) {\n            if (Boolean(option.get('uniquePackageId')) && option.get('productIndex') > 0) {\n              return;\n            }\n            const specProductId = option.getIn(['specToQuoteValues', 'specProductId']);\n            const specProduct = specProducts?.get(String(specProductId));\n            const isAiIdentifiedProduct = specProduct?.get('id') === AI_IDENTIFIED_PRODUCT_ID;\n            const specProductNumber = isAiIdentifiedProduct\n              ? !!specProduct?.get('identifiedProductNumber') ? specProduct?.get('identifiedProductNumber') : '-'\n              : specProduct?.get('productNumber');\n\n            return <SortableItem key={i} id={String(i)} disabled={i !== index}>\n              <MenuItem\n                disabled={typeof index === 'number' && i !== index}\n                style={{\n                  visibility: String(i) === activeId ? 'hidden' : 'visible',\n                  justifyContent: 'space-between',\n                  backgroundColor: i === index ? '#EEEEEE' : '',\n                  opacity: 1,\n                  color: _theme.palette.text.primary\n                }}\n                ref={i === index ? onMenuOpenScrollHereRef : null}\n              >\n                <ListItemIcon className={classes.listIconItem}>\n                  {option.get('id') !== -1 && specProduct ? <FontAwesomeIcon icon={option.get('uniquePackageId') ? 'boxes' : 'box'} className={classes.boxIcon} /> : <></>}\n                </ListItemIcon>\n                {specProductId && `${specProductNumber || '-'} | `}\n                {`${option.getIn(option.get('uniquePackageId') ? ['packageNumber'] : labelPath) || '-'}`}\n\n\n                <Height style={{ opacity: i === index ? 1 : 0 }} />\n\n\n              </MenuItem>\n            </SortableItem>;\n          } else {\n            const newPage = sectionsInPages.findKey(_page => _page.indexOf(i) === 0);\n            return <React.Fragment key={i}>\n              {\n                // labelPath.includes('sectionTitle') means using sections dnd menu\n                labelPath.includes('sectionTitle') && newPage > 0 && (\n                  <MenuItem\n                    key={`page-item-${newPage}-${i}`}\n                    disabled={true}\n                    style={{\n                      opacity: 1,\n                      position: 'sticky',\n                      top: 0,\n                      height: 40,\n                      zIndex: 1 + newPage,\n                      backgroundColor: _theme.palette.common.white\n                    }}\n                    divider={labelPath.includes('sectionTitle')}\n                  >\n                    <Typography variant='inherit' style={{ color: '#000', fontWeight: 600 }} noWrap={true}>{t('quotePagination.page')} {newPage}</Typography>\n                  </MenuItem>\n                )\n              }\n              <SortableItem key={`menu-item-${i}`} id={String(i)} disabled={!isNavigation && i !== index}>\n                <MenuItem\n                  divider={labelPath.includes('sectionTitle')}\n                  disabled={!isNavigation && i !== index}\n                  style={{\n                    visibility: String(i) === activeId ? 'hidden' : 'visible',\n                    backgroundColor: isNavigation ? i === focusedSectionIndex ? '#EEEEEE' : '' : i === index ? '#EEEEEE' : '',\n                    opacity: 1,\n                    color: _theme.palette.text.primary,\n                    justifyContent: 'space-between',\n                    height: labelPath.includes('sectionTitle') ? 40 : '',\n                    borderRight: isNavigation && i === focusedSectionIndex ? '3px solid var(--Surface-button_bg, #E76C17)' : 'none',\n                  }}\n                  ref={i === index ? onMenuOpenScrollHereRef : null}\n                >\n                  <Tooltip title={option.getIn(labelPath)}>\n                    <Typography variant='inherit' noWrap={true} style={{ marginLeft: labelPath.includes('sectionTitle') ? 8 : '' }}>{option.getIn(labelPath)}</Typography>\n                  </Tooltip>\n                  {\n                    (isNavigation || i === index) &&\n                    <Height />\n                  }\n                </MenuItem>\n              </SortableItem>\n            </React.Fragment>;\n          }\n        })}\n      </SortableContext>\n      {\n        activeId ? labelPath.includes('productNumber') && isSpecToQuote ?\n          <DragOverlay modifiers={[restrictToParentElement]} dropAnimation={null}>\n            <MenuItem style={{ backgroundColor: '#EEEEEE', justifyContent: 'space-between' }}>\n              {\n                isSpecToQuote && <ListItemIcon className={classes.listIconItem}>\n                  {options.get(activeId).get('id') !== -1 && activeSpecProductId && <FontAwesomeIcon icon={options.getIn([activeId, 'uniquePackageId']) ? 'boxes' : 'box'} className={classes.boxIcon} />}\n                </ListItemIcon>\n              }\n              {activeSpecProductId && `${activeSpecProductNumber || '-'} | `}\n              {`${options.getIn([activeId, ...(options.getIn([activeId, 'uniquePackageId']) ? ['packageNumber'] : labelPath)])}`}\n              <Height />\n            </MenuItem>\n          </DragOverlay>\n          :\n          <DragOverlay modifiers={[restrictToParentElement]} dropAnimation={null}>\n            <MenuItem style={{ justifyContent: 'space-between', height: labelPath.includes('sectionTitle') ? 40 : '' }}>\n              <Typography variant='inherit' noWrap={true} style={{ marginLeft: isNavigation ? 8 : '' }}>{options.getIn([activeId, ...labelPath])}</Typography>\n              <Height />\n            </MenuItem>\n          </DragOverlay>\n          :\n          null\n      }\n    </DndContext>\n  </Menu>;\n});\n","import React, { useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Prompt as ReactRouterPrompt } from 'react-router';\nimport { makeSelectLoading } from '../../modules/AtsModule/selectors';\n\ninterface IProps {\n    msg: string;\n}\nfunction Prompt({ msg }: IProps) {\n    // when log out or log in as, loading is true\n    const isLoading = useSelector(makeSelectLoading());\n    const listener = (e) => {\n        e.preventDefault();\n        e.returnValue = msg;\n    };\n    useEffect(() => {\n        window.addEventListener('beforeunload', listener);\n        return () => {\n            window.removeEventListener('beforeunload', listener);\n        };\n    }, []);\n    return (\n        <ReactRouterPrompt when={!isLoading} message={msg} />\n    );\n}\n\nexport default Prompt;","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { batch, connect } from 'react-redux';\nimport {\n  List, Map\n} from 'immutable';\nimport {\n  InjectedFormProps,\n  change,\n  BaseFieldProps,\n} from 'redux-form';\nimport { Field, formValueSelector } from 'redux-form/immutable';\nimport { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport FieldTextField from '../FieldTextFieldDebounced';\nimport {\n  GetQuoteTemplateListAction,\n} from '../../modules/QuoteTemplateModule/actions';\nimport {\n  makeSelectQuoteTemplateList,\n} from '../../modules/QuoteTemplateModule/selectors';\nimport {\n  makeSelectCreateQuoteWithSpecToQuote,\n  makeSelectQuote, makeSelectQuoteFormProps, makeSelectSubmittingQuote,\n  selectReduxFormState,\n} from '../../modules/QuoteModule/selectors';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport {\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n  RootRef,\n  CircularProgress,\n  DialogContentText,\n} from '@material-ui/core';\n\nimport {\n  IMap, IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  QuoteFormQuote, Contact,\n  TableColumn\n} from '../../models';\n\n\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { StyleRules } from '@material-ui/core/styles';\nimport QuoteProjectInfo from '../QuoteProjectInfo';\nimport QuoteInfo from '../QuoteInfo';\nimport QuoteTermsConditions from '../QuoteTermsConditions';\nimport { styles as QuoteCustomersStyles } from '../QuoteCustomers';\nimport { chipStyle } from '../QuoteInfo/QuoteContactsForm';\nimport SectionListEdit from './SectionListEdit/SectionListEdit';\nimport { DnDMenu } from './SectionListEdit/DnDMenu';\nimport { includes } from 'lodash';\nimport { GetAllQuickText, GetDefaultQuickTextByTypeAction } from '../../modules/QuickTextModule/actions';\nimport { makeSelectAllQuickTextList } from '../../modules/QuickTextModule/selectors';\nimport { makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport { SearchContactsSucceededAction, SelectContactAction } from '../../modules/AccountModule/actions';\nimport {\n  makeSelectContactsList,\n  makeSelectSelectedContactId,\n  makeSelectLoadingCustomerDiscount\n} from '../../modules/ContactModule/selectors';\nimport { GetContactsListSuccess, SelectContact, SetSelectedContact, SetStoredContactDataAction } from '../../modules/ContactModule/actions';\nimport { GetRegionsAction } from '../../modules/LocationModule/actions';\nimport QuoteContactsDropdown from '../QuoteContactsDropdown';\nimport { IAllRefs } from '../../containers/Quote/types';\nimport { makeSelectScrollNode } from '../../modules/ApplicationModule/selectors';\nimport { IChangeValueHandler } from './types';\nimport {\n  RouteComponentProps,\n  withRouter\n} from 'react-router-dom';\nimport { DialogComponent } from '..';\nimport ScrollTop from '../ScrollTop';\nimport { ResetQuoteSearchProducts } from '../../modules/PimModule/actions';\nimport { GetCustomerDiscountsAndVisibilityAction, SelectQuoteCustomerAction } from '../../modules/QuoteEditModule/actions';\nimport Prompt from '../Prompt';\nimport { makeSelectDiscountPriority, makeSelectHasAlreadyFetchedManufacturerDiscounts, makeSelectHasFetchedDiscountPriority, makeSelectIsGettingCustomerVisibilitySetting, makeSelectManufacturerDiscounts, makeSelectManufacturerDiscountsIndexMap, makeSelectSelectedManufacturerDiscounts } from '../../modules/AccountModule/selectors';\nimport { defaultColumns } from '../QuoteCustomersTable';\nimport QuoteDiscountsTabs from '../QuoteDiscountsTabs';\nimport { setUsetifulTags, TOUR_TRIGGER_KEY } from '../../utils';\nimport { makeSelectOfficePricingRegions } from '../../modules/LocationModule/selectors';\nimport { constructDiscountsMap } from '../../containers/Quote/utils';\n\ninterface IQuoteFormProps {\n  officeId?: number;\n  allRefs: IAllRefs;\n  quote?: IMap<QuoteFormQuote>;\n  formValues?: any;\n  quickEntrySuggestions?: List<IMap<any>>;\n  quoteId: number;\n  quoteNumber?: string;\n  toggleProjectView: () => void;\n  t?(...args: any[]): any;\n}\n\ninterface IQuoteFormHOCProps extends RouteComponentProps<{ edit: string, projectId: string }> {\n  dispatch: Dispatch<IAction>;\n  contacts: List<IMap<Contact>>;\n  selectedCustomers: List<IMap<Contact>>;\n  selectContact: (contactId: number | string, toggleSnackbar?: boolean) => void;\n  quoteSelectedContactId: number;\n  quoteSectionTemplates: any;\n  getRegions: () => void;\n  getTemplateList: () => void;\n  getSuggestions: () => void;\n  selectedContactId?: number;\n  scrollNode: React.RefObject<any>;\n  changeValue: IChangeValueHandler;\n  loadingCustomerDiscount: boolean;\n  isFormDirty: boolean;\n  isSaving: boolean;\n  isCreatingQuote: boolean;\n  getDefaultQuickTextByType: () => void;\n  isGettingCustomerVisibilitySetting: boolean;\n  pricingRegions: List<IMap<any>>;\n  hasFetchedDiscountPriority: boolean;\n  // discountPriority: string;\n  selectedManufacturerDiscounts: List<number>;\n  selectedDetailedManufacturerDiscounts: List<IMap<any>>;\n  hasAlreadyFetchedManufacturerDiscounts: boolean;\n  initialSelectedManufacturerDiscountsInitialized: boolean;\n}\n\ntype QuoteFormProps =\n  IQuoteFormProps & IQuoteFormHOCProps\n  & InjectedFormProps<{}>\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass QuoteForm extends React.Component<QuoteFormProps, {}> {\n  public state = {\n    menuIndex: 0,\n    selectedContactLoaded: false,\n    searchString: null,\n    currentFocusComponentIndex: null,\n    columnsToDisplay: defaultColumns,\n    openColumnsDrawer: false,\n    constructedInitialManufacturerDiscountsMap: false,\n  };\n\n  public componentDidMount() {\n    const { dispatch, getTemplateList, quickEntrySuggestions, getSuggestions, getRegions, pricingRegions, scrollNode, getDefaultQuickTextByType } = this.props;\n\n    dispatch(new SearchContactsSucceededAction({ contacts: List() }));\n\n    getTemplateList();\n\n    if (!quickEntrySuggestions.size) {\n      getSuggestions();\n    }\n    if (!pricingRegions.size) {\n      getRegions();\n    }\n\n    if (scrollNode && scrollNode.current) {\n      scrollNode.current.scrollTop = 0;\n    }\n  }\n\n  public componentDidUpdate = () => {\n    const {\n      quoteSelectedContactId,\n      selectedCustomers,\n      dispatch,\n      isGettingCustomerVisibilitySetting,\n      hasFetchedDiscountPriority,\n      // discountPriority,\n      hasAlreadyFetchedManufacturerDiscounts,\n      selectedDetailedManufacturerDiscounts,\n      selectedManufacturerDiscounts,\n      initialSelectedManufacturerDiscountsInitialized,\n    } = this.props;\n    const {\n      selectedContactLoaded,\n      constructedInitialManufacturerDiscountsMap\n    } = this.state;\n\n    if (!selectedContactLoaded && quoteSelectedContactId && !isGettingCustomerVisibilitySetting && hasFetchedDiscountPriority) {\n      const selectedCustomer = selectedCustomers && selectedCustomers.find((customer: any) => customer.get('id') === quoteSelectedContactId);\n      dispatch(new GetContactsListSuccess({ list: List(selectedCustomer ? [selectedCustomer] : []) })); // Since we don't preload the contacts list, this must be done to have a contact to attach the visibility and discount lists\n      dispatch(new GetCustomerDiscountsAndVisibilityAction({\n        customerId: selectedCustomer && selectedCustomer.get('id'),\n        onFinallyCb: ({ discounts }) => {\n          batch(() => {\n            dispatch(change(\n              QUOTE_FORM_NAME,\n              'temp.discounts.customer',\n              constructDiscountsMap({ customerDiscounts: discounts })\n            ));\n            dispatch(change(\n              QUOTE_FORM_NAME,\n              'temp.initialSelectedCustomerDataInitialized',\n              true\n            ));\n          });\n        }\n      }));\n      dispatch(new SetSelectedContact({ contactId: selectedCustomer && selectedCustomer.get('id') }));\n      this.setState({\n        selectedContactLoaded: true\n      });\n    }\n    if ((!constructedInitialManufacturerDiscountsMap || !initialSelectedManufacturerDiscountsInitialized) && Boolean(selectedManufacturerDiscounts) && hasFetchedDiscountPriority && hasAlreadyFetchedManufacturerDiscounts) {\n      batch(() => {\n        dispatch(change(\n          QUOTE_FORM_NAME,\n          'temp.discounts.manufacturer',\n          constructDiscountsMap({ manufacturerDiscounts: selectedDetailedManufacturerDiscounts })\n        ));\n        dispatch(change(\n          QUOTE_FORM_NAME,\n          'temp.initialSelectedManufacturerDiscountsInitialized',\n          true\n        ));\n      });\n      this.setState({\n        constructedInitialManufacturerDiscountsMap: true\n      });\n    }\n  }\n\n  public componentWillUnmount() {\n    this.props.selectContact(undefined);\n    this.props.dispatch(new ResetQuoteSearchProducts());\n    // reset tour trigger\n    setUsetifulTags(TOUR_TRIGGER_KEY, null);\n  }\n\n  public shouldComponentUpdate(nextProps: Readonly<QuoteFormProps>, nextState: Readonly<{}>, nextContext: any): boolean {\n    const ignoredProps = ['blur', 'change'];\n    let shouldUpdate = false;\n    Object.entries(nextProps).forEach(([key, val]) => {\n      if (!includes(ignoredProps, key)) {\n        shouldUpdate = shouldUpdate || this.props[key] !== val;\n      }\n    }\n    );\n    Object.entries(nextState).forEach(([key, val]) => {\n      shouldUpdate = shouldUpdate || this.state[key] !== val;\n    }\n    );\n    return shouldUpdate;\n  }\n\n  public onCustomerCardClick = (customer: any) => {\n    const { changeValue, selectedContactId, dispatch } = this.props;\n    dispatch(new GetContactsListSuccess({ list: List([customer]) })); /* Hacky work around for quote stuff */\n    const selectedCustomer = customer.get('id') !== selectedContactId ? customer : Map();\n\n    if (customer.get('id') === selectedContactId) {\n      dispatch(new SetStoredContactDataAction({ data: undefined }));\n    }\n    changeValue({\n      form: 'quote',\n      field: 'selectedCustomer',\n      value: selectedCustomer.get('id') || null\n    });\n    dispatch(new SelectQuoteCustomerAction({ customerId: selectedCustomer.get('id') }));\n  }\n\n  public onSearchChange = (e) => {\n    const { quote } = this.props;\n    const value = e.target.value;\n    const abc = Array.from(document.querySelectorAll(`[value*=\"${value}\"]`));\n    if (abc.length) {\n      (abc[0] as HTMLElement).scrollIntoView({ block: 'center' });\n    }\n    this.setState({ currentFocusComponentIndex: 0 });\n  }\n\n  public onResetColumn = () => {\n    this.setState({ columnsToDisplay: defaultColumns });\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => {\n    this.setState({ columnsToDisplay: newColumnsToDisplay });\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState({ openColumnsDrawer: !this.state.openColumnsDrawer });\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      quoteNumber,\n      quickEntrySuggestions,\n      officeId,\n      allRefs,\n      selectedContactId,\n      contacts,\n      changeValue,\n      match,\n      toggleProjectView,\n      selectedCustomers,\n      selectedManufacturerDiscounts,\n      quoteSectionTemplates,\n      loadingCustomerDiscount,\n      isSaving,\n      isCreatingQuote,\n      location,\n    } = this.props;\n\n    const refreshKey = (location as any)?.state?.refreshKey;\n\n    return (\n      <div style={{ paddingLeft: 10 }}>\n        {!isSaving && !isCreatingQuote && !refreshKey && <Prompt msg={t('general.leavingAlertContent')} />}\n        <DnDMenu />\n        {/*form title*/}\n        <Grid container={true} spacing={1}>\n          <Grid item={true}>\n            <Typography\n              className={classes.headlineTitle}\n              variant='h5'\n            >\n              {match.params.edit ? quoteNumber : t('generalInfo.title')}\n            </Typography>\n          </Grid>\n        </Grid>\n        {/*quote info panel */}\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.quoteInfo}>\n              <QuoteInfo\n                officeId={officeId}\n              />\n            </RootRef>\n          </Grid>\n        </Grid>\n\n        {/*project info panel*/}\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.projectInfo}>\n              <QuoteProjectInfo\n                onChange={changeValue}\n                toggleProjectView={toggleProjectView}\n              />\n            </RootRef>\n          </Grid>\n        </Grid>\n\n        {/* contacts panel */}\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.contacts}>\n              <Card className={classes.card}>\n                <CardContent>\n                  <Typography variant='h6' style={{ marginBottom: 32 }}>\n                    {t('quoteInfo.contactsTitle')}\n                  </Typography>\n                  <Grid container={true} spacing={3}>\n                    <Grid item={true} sm={6} xs={12} style={{ paddingTop: 0, paddingBottom: 0 }}>\n                      <QuoteContactsDropdown\n                        fieldName='architectName'\n                        title={t('quoteInfo.architectLabel')}\n                        subTitle={t('quoteInfo.architectSubtitle')}\n                        options={contacts}\n                        useDivContainer={true}\n                      />\n                    </Grid>\n                    <Grid item={true} sm={6} xs={12} style={{ paddingTop: 0, paddingBottom: 0 }}>\n                      <QuoteContactsDropdown\n                        fieldName='engineerName'\n                        title={t('quoteInfo.engineerLabel')}\n                        subTitle={t('quoteInfo.engineerSubtitle')}\n                        options={contacts}\n                        useDivContainer={true}\n                      />\n                    </Grid>\n                    <Grid item={true} sm={6} xs={12} style={{ paddingTop: 0, paddingBottom: 0 }}>\n                      <QuoteContactsDropdown\n                        fieldName='contractorName'\n                        title={t('quoteInfo.contractorLabel')}\n                        subTitle={t('quoteInfo.contractorSubtitle')}\n                        options={contacts}\n                        useDivContainer={true}\n                      />\n                    </Grid>\n                  </Grid>\n                </CardContent>\n              </Card>\n            </RootRef>\n          </Grid>\n        </Grid>\n\n        {/*customer panel*/}\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.discounts}>\n              <QuoteDiscountsTabs\n                onApplyDiscount={this.onCustomerCardClick}\n                selectedCustomers={selectedCustomers}\n                selectedManufacturerDiscounts={selectedManufacturerDiscounts}\n                contacts={contacts}\n              />\n            </RootRef>\n          </Grid>\n        </Grid>\n\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.internalNotes}>\n              <Card className={classes.card}>\n                <CardContent>\n                  <Typography variant='h6'>\n                    {t('internalNotes.title')}\n                  </Typography>\n                  <Typography variant='caption'>\n                    {t('internalNotes.placeholder')}\n                  </Typography>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='internalNote'\n                    props={{\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      inputProps: {\n                        multiline: true,\n                        rowsMax: 20,\n                      },\n                      helperText: false,\n                    }}\n                    component={FieldTextField}\n                  />\n                </CardContent>\n              </Card>\n            </RootRef>\n          </Grid>\n        </Grid>\n\n        {/* product list panel */}\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            {allRefs.quoteForm &&\n              <RootRef rootRef={allRefs.productList}>\n                <SectionListEdit\n                  productListRef={allRefs.productList}\n                  quoteSectionTemplates={quoteSectionTemplates}\n                />\n              </RootRef>\n            }\n          </Grid>\n        </Grid>\n\n        <Typography className={classes.headlineTitle} variant='h5'>{t('otherInfo.title')}</Typography>\n\n\n        <Grid container={true} spacing={1}>\n          <Grid item={true} xs={12}>\n            <RootRef rootRef={allRefs.terms}>\n              <Card\n                className={classes.card}\n              >\n                <CardContent style={{ minHeight: 250 }}>\n                  <Typography variant='h6'>\n                    {t('termsAndConditions.title')}\n                  </Typography>\n                  <QuoteTermsConditions />\n                </CardContent>\n              </Card>\n            </RootRef>\n          </Grid>\n        </Grid>\n        <ScrollTop />\n\n\n        <DialogComponent\n          open={loadingCustomerDiscount}\n          header=''\n          children={\n            <Grid\n              container={true}\n              direction='column'\n              justify='center'\n              alignItems='center'\n            >\n              <CircularProgress />\n              <DialogContentText id='applying-customer-discount-dialog' variant='h6'>\n                {t('quoteCustomerTable.applyingCustomerInformation')}\n              </DialogContentText>\n            </Grid>\n          }\n        />\n\n      </div>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    height: '100%',\n    width: '100%',\n    margin: 'auto',\n  },\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    overflow: 'inherit',\n  },\n  headlineTitle: {\n    padding: 10,\n    margin: 10,\n  },\n  ...QuoteCustomersStyles(theme),\n  ...chipStyle(theme)\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  const changeValue: IChangeValueHandler = ({ form, field, value }) => dispatch(change(form, field, value));\n  return {\n    dispatch,\n    changeValue,\n    getTemplateList: () => {\n      dispatch(new GetQuoteTemplateListAction());\n    },\n    getSuggestions: () => {\n      dispatch(new GetAllQuickText());\n    },\n    selectContact: (selectedContact: any, toggleSnackbar?: boolean) => {\n      dispatch(new SelectContact({ selectedContact, toggleSnackbar }));\n    },\n\n    getRegions: () => {\n      dispatch(new GetRegionsAction({ type: 'office', regionType: 'P' }));\n    },\n    getDefaultQuickTextByType: () => {\n      dispatch(new GetDefaultQuickTextByTypeAction({ type: 'nonStockProductNote' }));\n    },\n  };\n};\n\nconst mapStateToProps = (state) => ({\n  quoteSectionTemplates: makeSelectQuoteTemplateList()(state),\n  quickEntrySuggestions: makeSelectAllQuickTextList()(state),\n  officeId: makeSelectUserOfficeId()(state),\n  contacts: makeSelectContactsList()(state),\n  quoteNumber: makeSelectQuoteFormProps(['quoteNumber'])(state),\n  quoteSelectedContactId: makeSelectQuoteFormProps(['selectedCustomer'])(state),\n  selectedCustomers: formValueSelector(QUOTE_FORM_NAME)(state, 'customers'),\n  selectedContactId: makeSelectSelectedContactId()(state),\n  scrollNode: makeSelectScrollNode()(state),\n  loadingCustomerDiscount: makeSelectLoadingCustomerDiscount()(state),\n  isSaving: makeSelectSubmittingQuote()(state),\n  isCreatingQuote: makeSelectCreateQuoteWithSpecToQuote()(state),\n  isGettingCustomerVisibilitySetting: makeSelectIsGettingCustomerVisibilitySetting()(state),\n  pricingRegions: makeSelectOfficePricingRegions()(state),\n  // discountPriority: makeSelectDiscountPriority()(state),\n  hasFetchedDiscountPriority: makeSelectHasFetchedDiscountPriority()(state),\n  hasAlreadyFetchedManufacturerDiscounts: makeSelectHasAlreadyFetchedManufacturerDiscounts()(state),\n  selectedDetailedManufacturerDiscounts: makeSelectSelectedManufacturerDiscounts()(state),\n  selectedManufacturerDiscounts: makeSelectQuoteFormProps(['discounts', 'manufacturerDiscounts'])(state),\n  initialSelectedManufacturerDiscountsInitialized: makeSelectQuoteFormProps(['temp', 'initialSelectedManufacturerDiscountsInitialized'])(state),\n  // manufacturerDiscounts: makeSelectManufacturerDiscounts()(state),\n  // manufacturerDiscountsIndexMap: makeSelectManufacturerDiscountsIndexMap()(state),\n});\n\nexport default compose<React.ComponentClass<IQuoteFormProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  withRouter,\n  connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true })\n)(QuoteForm);\n","import QuoteForm from './QuoteForm';\n\nexport default QuoteForm;","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n  Tabs,\n  Tab,\n  Dialog,\n  Button,\n  DialogActions,\n  Link,\n  List as MUIList,\n  Avatar,\n  Tooltip,\n  Checkbox,\n  Stepper,\n  Step,\n  StepLabel,\n  DialogTitle,\n  DialogContent,\n  TextField,\n  IconButton,\n  InputAdornment,\n  Box,\n  CircularProgress,\n} from '@material-ui/core';\nimport {\n  StyleRules, WithTheme\n} from '@material-ui/core/styles';\nimport {\n  Map,\n  List, getIn\n} from 'immutable';\nimport {\n  debounce\n} from 'lodash';\nimport NotFound from '../../components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport { Option, TableColumn, Product, Package, Filter, SearchArgs, Series, FirmProduct, Status, Category, Manufacturer } from '../../models';\nimport { ControlledDrawer, Image, TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { Trans, WithTranslation, withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport ToolBar from '../../components/ToolBar';\nimport { LinkCell, TextCell, RegionCell } from '../../components/_CellRenderers';\nimport { BaseFieldProps, InjectedFormProps, change, destroy } from 'redux-form';\nimport { Field, reduxForm, getFormNames, getFormValues } from 'redux-form/immutable';\nimport {\n  SearchFirmProductsAction,\n  DeleteFirmProductAndSearchFirmProductsAction,\n  SearchFirmSeriesAction,\n  DeleteFirmSeriesThenSearchFirmSeriesAction,\n  GetBulkExportProductsConfigAction,\n  BulkImportProductsAction,\n  SetBulkImportProductsProgressAction,\n  DownloadBulkImportTemplateFileSucceededAction,\n  BulkExportProductsAction,\n  GetFirmProductManufacturersAction,\n  GetFirmProductCategoriesAction,\n  UpdateStoreFirmProductAction,\n} from '../../modules/PimModule/actions';\nimport {\n  SearchFirmPackagesAction,\n  QuickSearchFirmPackagesAction,\n  DeletePackageAndSearchFirmPackagesAction,\n  CheckingProductInPackages,\n} from '../../modules/PackageModule/actions';\nimport {\n  makeSelectFirmSeries,\n  makeSelectFirmSeriesHasNextPage,\n  makeSelectFirmExportFieldsConfig,\n  makeSelectImportProductsProgress,\n  makeSelectIsDownloadTemplateSuccess,\n  makeSelectIsDownloadingTemplate,\n  makeSelectIsFetchingFirmProducts,\n  makeSelectIsImportingProducts,\n  makeSelectSearchedFirmProductsList,\n  makeSelectPendingCreatedFirmProducts,\n  makeSelectSearchedFirmProductsListCount,\n  makeSelectSearchedFirmProductsListHasNextPage,\n  makeSelectSearchingFirmSeries,\n  makeSelectIsExportingProducts\n} from '../../modules/PimModule/selectors';\nimport {\n  makeSelectFirmPackages,\n  makeSelectQuickSearchedFirmPackages,\n  makeSelectCheckingProductInPackages,\n  makeSelectIsFetchingFirmPackages,\n  makeSelectIsLoadingQuickSearchFirmPackage,\n  makeSelectFirmPackagesHasNextPage\n} from '../../modules/PackageModule/selectors';\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, SetSnackbarOpenAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport ProductDrawer, {\n  PRODUCT_DRAWER_ID,\n  PRODUCT_CONTENT_EDIT_KEY\n} from '../../components/ProductDrawer';\nimport PackageDrawer, {\n  PACKAGE_DRAWER_ID,\n  PACKAGE_CONTENT_EDIT_KEY\n} from '../PackageDrawer';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport DeleteModalDialog from '../DeleteModalDialog';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport { AtsSvgEmptyFeaturesOptions, AtsSvgPackage, AtsSvgProduct } from '../AtsSvg';\nimport ProductsListFilter from './ProductsListFilter';\nimport PackageListFilter from './PackageListFilter';\nimport { PACKAGE_LIST_FILTER_FORM } from './PackageListFilter/Component';\nimport { PRODUCT_LIST_FILTER_FORM, PARENT_PRODUCT_LIST_FILTER_FORM } from './ProductsListFilter/Component';\nimport { extractBooleanFilter, pushActiveStatusFilter } from './productFilterUtils';\nimport { makeSelectOverlayComponentContent } from '../../modules/ApplicationModule/selectors';\nimport { SUCCESS_DRAWER } from '../SuccessDrawer';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport { ADD_PRICING_PATH, AMPLITUDE_EVENT, CONFIGURATOR_PATH, MAX_FILE_SIZE, PIM_SERIES_DETAIL_PATH, PRODUCTS_PATH, QUOTE_CONNECT_PRODUCTS_EXPORT_PATH, QUOTE_CONNECT_PRODUCTS_PATH, QUOTE_CONNECT_PRODUCTS_UPLOAD_PATH, UPDATE_PRICING_PATH, GEOLOCATION_ID } from '../../constants';\nimport ThumbUpAltRoundedIcon from '@material-ui/icons/ThumbUpAltRounded';\nimport { push } from 'connected-react-router';\nimport { RouteChildrenProps } from 'react-router';\nimport { CONFIG_PAGE_ROUTE_TYPES } from '../../pages/ProductConfiguratorPage/Component';\nimport i18next from 'i18next';\nimport ConfigListFilter from './ConfigListFilter';\nimport { CONFIG_LIST_FILTER_FORM } from './ConfigListFilter/Component';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport classNames from 'classnames';\nimport { SERIES_STATUS_VALUE_MAP, seriesStatusList } from '../StatusChipPim/Component';\nimport { makeSelectIsChildFirm, makeSelectIsRestrictedOutsideSalesRep, makeSelectIsSuperFirm, makeSelectUserHasFirmAdmin, makeSelectUserHasFeatCreateShopDrawingAcl, makeSelectUserFirmId, makeSelectEnv, makeSelectAppId } from '../../modules/AtsModule/selectors';\nimport ImageCreateApi from '../../modules/ProductModule/ImageCreateApi';\nimport CheckIcon from '@material-ui/icons/Check';\nimport CloseIcon from '@material-ui/icons/Close';\nimport ExportFieldsModal from './/BulkImportExport/ExportFields';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../FieldDropzone';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport LoadingView from './BulkImportExport/Loading';\nimport SummaryView from './/BulkImportExport/Summary';\nimport ConflictView from './BulkImportExport/Conflict';\nimport DownloadTemplate from './/BulkImportExport/DownloadTemplate';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { makeSelectCategory, makeSelectManufacturer, makeSelectQuoteConnectCurrency, makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\nimport { GetCategoriesAction, GetManufacturersAction, GetPreferencesAction } from '../../modules/AccountModule/actions';\nimport { GetAllCategoriesAction, GetAllManufacturersAction } from '../../modules/ListModule/actions';\nimport { InfoRounded } from '@material-ui/icons';\nimport FilterChipsBar from '../FilterChipsBar';\nimport SeriesTypeCell from '../../containers/PimSeriesListPage/_CustomCellRenderers/SeriesTypeCell';\nimport { isProductSharedWithFirm } from '../../utils/productSharing';\nimport QCProductEditModal from './QCProductEditModal';\nimport {PreferenceType} from '../../models/Preferences';\nimport CustomParentFirmProductActionButton from './_CustomCellRenderers/CustomParentFirmProductActionButton';\n\nexport const IMPORT_PRODUCTS_FILE_FORM = 'ImportProductsFile';\n\nexport enum PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES {\n  PRODUCTS = 'products',\n  PARENT_PRODUCTS = 'parentProducts',\n  PACKAGES = 'packages',\n  CONFIGS = 'configs',\n}\n\nconst ACCEPTED_FILE_TYPES = [\n  'text/csv',\n];\n\nconst uploadFileValidation = (value) => {\n  const size = value && value[0] && value[0]['size'] || false;\n  const type = value && value[0] && value[0]['type'] || false;\n\n  const validateSize = size > MAX_FILE_SIZE && `${i18next.t('translations:teamManagementUserDrawer.sizeLimitError')} ${MAX_FILE_SIZE / (1024 * 1024)}MiB`;\n  const validateFileType = !ACCEPTED_FILE_TYPES.includes(type) && type && i18next.t('translations:teamManagementUserDrawer.fileTypeError');\n\n  const message = [validateSize, validateFileType].filter((x) => x).join(' & ');\n  return message || undefined;\n};\n\nconst defaultLimit = 10;\n\nconst defaultOptions: Option<Product | Package | Series> = {\n  limit: defaultLimit,\n  offset: 0,\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[200],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    // boxShadow: theme.shadows[1],\n    // borderRadius: theme.shape.borderRadius\n  },\n  descriptionContainer: {\n    padding: theme.spacing(0, 3),\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n    paddingTop: '10px',\n    backgroundColor: 'transparent'\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    // justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n  tabs: {\n    overflow: 'initial',\n    minHeight: 'initial',\n    marginTop: theme.spacing(0.75)\n  },\n  tabWrapper: {\n    flexDirection: 'row',\n    whiteSpace: 'nowrap',\n  },\n  tabLabelIcon: {\n    minHeight: 'initial',\n    paddingTop: 0,\n    flexBasis: 'auto',\n  },\n  tabIcon: {\n    marginRight: theme.spacing(2)\n  },\n  avatar: {\n    backgroundColor: theme.palette.primary.main,\n    width: theme.spacing(4),\n    height: theme.spacing(4),\n    fontSize: '1rem',\n    justifySelf: 'center',\n  },\n  primary: {\n    textTransform: 'capitalize'\n  },\n  chipContainer: {\n    borderRadius: theme.shape.borderRadius,\n    fontSize: '14px',\n    textTransform: 'uppercase',\n    width: '165px',\n    textAlign: 'center',\n    background: 'white',\n    margin: 'auto',\n  },\n  chip: {\n    padding: '6px 10px',\n    backgroundColor: '#d9c4ec'\n  },\n  ///// statuses /////\n  __1: { // active\n    background: getIn(theme.palette, ['status', 'inProgress'], 'none'),\n  },\n  __2: { // discontinued\n    background: getIn(theme.palette, ['status', 'missed'], 'none'),\n  },\n  __3: { // inactive\n    background: getIn(theme.palette, ['status', 'rejected'], 'none'),\n  },\n  __4: { // deleted\n    background: '#d4d4d4',\n  },\n  __6: { // archived\n    background: '#D5EFF4',\n  },\n\n  null: { // null\n    backgroundColor: '#d4d4d4'\n  },\n  uploadButton: {\n    margin: theme.spacing(0, 1),\n    minWidth: 'auto'\n  },\n  stepContainer: {\n    width: '1000px',\n    background: theme.palette.grey[100],\n    padding: theme.spacing(0.5, 0),\n  },\n  link: {\n    cursor: 'pointer'\n  },\n  step1Container: {\n    paddingLeft: 0\n  },\n  ul: {\n    margin: 0,\n    marginLeft: 10,\n    paddingLeft: 'inherit',\n  },\n  bulkConfirmationModal: {\n    maxWidth: 630,\n  }\n});\n\ninterface IProductAndPackageListComponentProps {\n}\n\ninterface IProductAndPackageListProps extends IProductAndPackageListComponentProps {\n  dispatch: (s: IAction) => void;\n  searchFirmProducts: ({ filters, options, sharedProduct, productSharedWithMe, isQuoteConnect, onSuccess }: { filters?: Filter, options?: Option<Product>, sharedProduct?: boolean, productSharedWithMe?: boolean, isQuoteConnect?: boolean, onSuccess?: () => void }) => void;\n  searchFirmPackages: ({ filters, options }: { filters?: Filter, options?: Option<Package> }) => void;\n  searchFirmSeries: ({ filters, options }: { filters?: Filter, options?: Option<Series> }) => void;\n  deleteFirmProduct: ({ productId, filters, options, sharedProduct }: { productId: number, filters?: Filter, options?: Option<Product>, sharedProduct?: boolean }) => void;\n  deleteFirmPackage: ({ packageId, filters, options }: { packageId: number, filters?: Filter, options?: Option<Package> }) => void;\n  deleteFirmSeries: ({ firmSeriesId, filters, options }: { firmSeriesId: number, filters?: Filter, options?: Option<Series> }) => void;\n  quickSearchFirmPackages: ({ filters, options }: { filters?: Filter, options?: Option<Package> }) => void;\n  getFirmFieldsConfig: () => void;\n  getManufacturers: (isQuoteConnect: boolean) => void;\n  getCategories: (isQuoteConnect: boolean) => void;\n  getCurrencyPreference: (isQuoteConnect: boolean) => void;\n  isFetchingFirmProducts: boolean;\n  isFetchingFirmPackages: boolean;\n  isFetchingFirmSeries: boolean;\n  firmProductsList: List<IMap<FirmProduct>>;\n  /**\n   * Products created in the drawer that the search index has not caught up to\n   * yet. Kept separate from firmProductsList so only the render paths below\n   * see them — the canonical list stays exactly what the search returned.\n   */\n  pendingCreatedFirmProducts: List<IMap<any>>;\n  firmProductsListCount: number;\n  firmProductsListHasNextPage: boolean;\n  firmPackagesList: List<IMap<Package>>;\n  firmPackagesListHasNextPage: boolean;\n  firmSeriesList: List<IMap<Series>>;\n  firmSeriesListHasNextPage: boolean;\n  productDrawerSuccess: string;\n  packageDrawerSuccess: string;\n  isLoadingQuickSearchFirmPackages: boolean;\n  quickSearchedFirmPackagesList: List<IMap<Package>>;\n  checkingPackages: boolean;\n  theme: Theme;\n  forms: List<any>;\n  productFilterFormValues: Map<string, any>;\n  parentProductFilterFormValues: Map<string, any>;\n  packageFilterFormValues: Map<string, any>;\n  configFilterFormValues: Map<string, any>;\n  isSuperFirm: boolean;\n  isChildFirm: boolean;\n  firmExportFieldsConfig: List<string>;\n  formValues: Map<string, any>;\n  isImportingProducts: boolean;\n  importProductsProgress: { percent: number; status: string, details: any };\n  hasFirmAdminAclRole: boolean;\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  isDownloadingTemplate: boolean;\n  isDownloadTemplateSuccess: boolean;\n  isUpdatingPricing: boolean;\n  isAddingNewPricing: boolean;\n  isAddingOrUpdatingPricing: boolean;\n  isQuoteConnect: boolean;\n  isExportingProducts: boolean;\n  isRestrictedOutsideSalesRep: boolean;\n  quoteConnectCurrency: any;\n  userOfficeInCanada: boolean;\n  hasFeatCreateShopDrawingAcl: boolean;\n  userFirmId: number;\n  env: IMap<any>;\n  appId: string;\n}\n\ntype IProductAndPackageList = IProductAndPackageListProps & WithTranslation & WithTheme & WithStyles<keyof ReturnType<typeof styles>> & RouteChildrenProps & WithAmplitudeData & InjectedFormProps;\n\nexport type BulkType = 'new' | 'update';\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  packagesColumns: TableColumn[];\n  productsColumns: TableColumn[];\n  parentProductsColumns: TableColumn[];\n  configsColumns: TableColumn[];\n\n  searchTerm: string;\n  productsSearchTerm: string;\n  parentProductsSearchTerm: string;\n  packagesSearchTerm: string;\n  configSearchTerm: string;\n\n  filters: object;\n  productsFilters: object;\n  parentProductsFilters: object;\n  packagesFilters: object;\n  configsFilters: object;\n\n  options: Option<Product | Package>;\n  anchorEl: HTMLElement;\n  page: number;\n\n  openFilterDrawer: boolean;\n  tabValue: string;\n  filterUniqueKey: any;\n\n  deltasFirmProduct: IMap<FirmProduct>;\n  firmPackage: IMap<Package>;\n\n  itemNameToDelete: string;\n  itemIdToDelete: number;\n  itemToDeleteIsShareable: boolean;\n  deleteModalOpen: boolean;\n  packagesListModalOpen: boolean;\n  categoriesModalOpen: boolean;\n  manufacturersModalOpen: boolean;\n\n  bulkType: BulkType;\n  isUpdatingPricing: boolean;\n  activeStep: number;\n  selectedProducts: number[];\n  excludedProducts: number[];\n  isSelectAll: boolean;\n  isUploadMenuOpen: boolean;\n  isExportModalOpen: boolean;\n  uploadSteps: [\n    { value: 'Template', labelPath: 'exportPricing.templateStepLabel' } | { value: 'Export', labelPath: 'exportPricing.exportStepLabel'},\n    { value: 'Upload', labelPath: 'exportPricing.uploadStepLabel' },\n    { value: 'Summary', labelPath: 'exportPricing.summaryStepLabel' }\n  ];\n  bulkConfirmationModalOpen: boolean;\n\n  openQCEditModal: boolean;\n}\n\nclass ProductAndPackageList extends React.Component<IProductAndPackageList, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n\n    this.resetProductsSelection();\n  }, 500);\n\n  private preloadInMediaImage: Set<number | string> = new Set();\n\n  constructor(props: IProductAndPackageList) {\n    super(props);\n    const {\n      isQuoteConnect,\n      isRestrictedOutsideSalesRep,\n      hasFeatCreateShopDrawingAcl,\n    } = props;\n    this.state = {\n      anchorEl: null,\n      columnsToDisplay: [],\n      productsColumns: isQuoteConnect ? [\n        { id: 'Product Number', label: 'productAndPackageList.productNumber', path: ['productNumber'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'productAndPackageList.manufacturer', path: ['brand'], display: true, sortable: true },\n        { id: 'Category', label: 'productAndPackageList.category', path: ['categoryName'], display: true, sortable: true },\n        { id: 'Description', label: 'productAndPackageList.description', path: ['description'], display: true, sortable: true },\n        { id: 'Price', label: 'productAndPackageList.price', path: ['price'], display: true, sortable: true },\n        { id: 'Last Update', label: 'pricingRequests.lastPriceUpdate', path: ['price', 'default'], display: true, sortable: true },\n        { id: 'Actions', label: 'productAndPackageList.action', display: true, sortable: true, style: { textAlign: 'center' } }\n      ] : [\n        { id: '', label: '', path: ['file', 'images', 'main', 'fileId'], display: true, sortable: false },\n        { id: 'Product Number', label: 'productAndPackageList.productNumber', path: ['productNumber'], display: true, sortable: true },\n        { id: 'Internal Product Number', label: 'productAndPackageList.internalProductNumber', path: ['itemNumber'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'productAndPackageList.manufacturer', path: ['brand'], display: true, sortable: true },\n        { id: 'Category', label: 'productAndPackageList.category', path: ['categoryName'], display: true, sortable: true },\n        { id: 'Last Update', label: 'productAndPackageList.lastUpdate', path: ['dateModified'], display: true, sortable: true },\n        { id: 'Price', label: 'productAndPackageList.price', path: ['price'], display: true, sortable: true },\n        ...hasFeatCreateShopDrawingAcl ? [{ id: 'Has Shop Drawing', label: 'productAndPackageList.hasShopDrawing', display: true, sortable: false }] : [],\n        { id: 'Status', label: 'productAndPackageList.status', path: ['status'], display: true, sortable: true, style: { textAlign: 'center' } },\n        // { id: 'Shared', label: 'productAndPackageList.shared', tooltip: 'productAndPackageList.sharedTooltip', display: true, sortable: true },\n        ...isRestrictedOutsideSalesRep ? [] : [{ id: 'Actions', label: 'productAndPackageList.action', display: true, sortable: true, style: { textAlign: 'center' } }],\n      ],\n      parentProductsColumns: [\n        { id: '', label: '', path: ['file', 'images', 'main', 'fileId'], display: true, sortable: false },\n        { id: 'Product Number', label: 'productAndPackageList.productNumber', path: ['productNumber'], display: true, sortable: true },\n        { id: 'Internal Product Number', label: 'productAndPackageList.internalProductNumber', path: ['itemNumber'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'productAndPackageList.manufacturer', path: ['brand'], display: true, sortable: true },\n        { id: 'Category', label: 'productAndPackageList.category', path: ['categoryName'], display: true, sortable: true },\n        { id: 'Last Update', label: 'productAndPackageList.lastUpdate', path: ['dateModified'], display: true, sortable: true },\n        { id: 'Price', label: 'productAndPackageList.price', path: ['price'], display: true, sortable: true },\n        ...hasFeatCreateShopDrawingAcl ? [{ id: 'Has Shop Drawing', label: 'productAndPackageList.hasShopDrawing', display: true, sortable: false }] : [],\n        { id: 'Status', label: 'productAndPackageList.status', path: ['status'], display: true, sortable: true, style: { textAlign: 'center' } },\n        ...isRestrictedOutsideSalesRep ? [] : [{ id: 'Actions', label: 'productAndPackageList.action', display: true, sortable: true, style: { textAlign: 'center' } }],\n      ],\n      packagesColumns: [\n        { id: 'Package Number', label: 'productAndPackageList.packageNumber', path: ['number'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'productAndPackageList.manufacturer', path: ['manufacturerName'], display: true, sortable: true },\n        { id: '# of Products', label: 'productAndPackageList.numberOfProducts', path: ['productIds'], display: true, sortable: true },\n        { id: 'Last Update', label: 'productAndPackageList.lastUpdate', path: ['modifiedDate'], display: true, sortable: true },\n        { id: 'Description', label: 'productAndPackageList.description', path: ['description'], display: true, sortable: true },\n        ...isRestrictedOutsideSalesRep ? [] :  [{ id: 'Actions', label: 'productAndPackageList.action', display: true, sortable: true, style: { textAlign: 'center' } }],\n      ],\n      configsColumns: [\n        { id: '', label: '', path: ['firmId'], display: true, sortable: false },\n        { id: 'Series Type', label: 'productAndPackageList.seriesTypeLabel', path: ['isConfigurator'], display: true, sortable: true },\n        { id: 'Model Number', label: 'productAndPackageList.modelNumber', path: ['productNumber'], display: true, sortable: true },\n        { id: 'Category', label: 'productAndPackageList.category', path: ['categoryName'], display: true, sortable: true },\n        { id: 'Manufacturer', label: 'productAndPackageList.manufacturer', path: ['brand'], display: true, sortable: true },\n        { id: 'Last Update', label: 'productAndPackageList.lastUpdate', path: ['dateModified'], display: true, sortable: true },\n        { id: 'Region', label: 'productAndPackageList.region', display: true, sortable: true, style: { textAlign: 'center' } },\n        { id: 'List Price', label: 'productAndPackageList.listPrice', path: ['list'], display: true, sortable: true },\n        { id: 'Sell Price', label: 'productAndPackageList.sellPrice', path: ['sell'], display: true, sortable: true },\n        { id: 'Cost', label: 'productAndPackageList.cost', path: ['cost'], display: true, sortable: true },\n        ...isRestrictedOutsideSalesRep ? [] : [{ id: 'Actions', label: 'productAndPackageList.action', display: true, sortable: true, style: { textAlign: 'center' } }],\n      ],\n      openFilterDrawer: false,\n      page: 0,\n      searchTerm: '',\n      productsSearchTerm: '',\n      parentProductsSearchTerm: '',\n      packagesSearchTerm: '',\n      configSearchTerm: '',\n      filters: null,\n      productsFilters: null,\n      parentProductsFilters: null,\n      packagesFilters: null,\n      configsFilters: null,\n      options: defaultOptions,\n      tabValue: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS,\n      filterUniqueKey: '',\n\n      deltasFirmProduct: null,\n      firmPackage: null,\n      itemNameToDelete: '',\n      itemIdToDelete: null,\n      itemToDeleteIsShareable: false,\n      deleteModalOpen: false,\n      packagesListModalOpen: false,\n      categoriesModalOpen: false,\n      manufacturersModalOpen: false,\n\n      bulkType: 'new',\n      isUpdatingPricing: false,\n      activeStep: 0,\n      isSelectAll: false,\n      selectedProducts: [],\n      excludedProducts: [],\n      isUploadMenuOpen: false,\n      isExportModalOpen: false,\n      uploadSteps: [\n        { value: 'Export', labelPath: 'exportPricing.exportStepLabel'},\n        { value: 'Upload', labelPath: 'exportPricing.uploadStepLabel' },\n        { value: 'Summary', labelPath: 'exportPricing.summaryStepLabel' }\n      ],\n      bulkConfirmationModalOpen: false,\n\n      openQCEditModal: false\n    };\n  }\n\n  public componentDidMount() {\n    // const { location, isSuperFirm, getFirmFieldsConfig, hasFirmAdminAclRole, history, getManufacturers, getCategories, isAddingOrUpdatingPricing } = this.props;\n    const { location, isSuperFirm, getFirmFieldsConfig, hasFirmAdminAclRole, history, getManufacturers, getCategories, isAddingOrUpdatingPricing, isQuoteConnect, getCurrencyPreference } = this.props;\n    const { productsColumns, productsFilters, packagesColumns, packagesFilters, configsColumns, configsFilters, parentProductsColumns, parentProductsFilters } = this.state;\n    const initialTabValue = (location.state && (location.state as any).initialTabValue) || PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS;\n\n    if (isSuperFirm) {\n      this.state.productsColumns.splice(-1, 0, { id: 'Shared', label: 'productAndPackageList.shared', tooltip: 'productAndPackageList.sharedTooltip', display: true, sortable: true });\n      this.setState({ productsColumns: this.state.productsColumns });\n    }\n\n    if (initialTabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS) {\n      this.setState({ columnsToDisplay: productsColumns, filters: productsFilters }, () => this.setSearchArgsAndSearch({}));\n    } else if (initialTabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES) {\n      this.setState({ columnsToDisplay: packagesColumns, filters: packagesFilters, tabValue: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES }, () => this.setSearchArgsAndSearch({}));\n    } else if (initialTabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS) {\n      this.setState({ columnsToDisplay: parentProductsColumns, filters: parentProductsFilters, tabValue: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS }, () => this.setSearchArgsAndSearch({}));\n    } else {\n      this.setState({ columnsToDisplay: configsColumns, filters: configsFilters, tabValue: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS }, () => this.setSearchArgsAndSearch({}));\n    }\n\n    if (isAddingOrUpdatingPricing && !hasFirmAdminAclRole && !isQuoteConnect) {\n      history.replace(PRODUCTS_PATH);\n    }\n\n    getFirmFieldsConfig();\n    getManufacturers(isQuoteConnect);\n    getCategories(isQuoteConnect);\n    getCurrencyPreference(isQuoteConnect);\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      firmProductsList,\n      firmPackagesList,\n      firmSeriesList,\n      quickSearchedFirmPackagesList,\n      checkingPackages,\n      packageDrawerSuccess,\n      productDrawerSuccess,\n      isFetchingFirmProducts,\n      isFetchingFirmPackages,\n      isFetchingFirmSeries,\n      productFilterFormValues,\n      parentProductFilterFormValues,\n      packageFilterFormValues,\n      configFilterFormValues,\n      isSuperFirm,\n      amplitudeData,\n      dispatch,\n      isDownloadTemplateSuccess,\n      isAddingOrUpdatingPricing,\n      isQuoteConnect,\n      formValues,\n      quoteConnectCurrency,\n    } = this.props;\n    const {\n      options,\n      page,\n      tabValue,\n      searchTerm,\n      filters,\n    } = this.state;\n\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no projects returned\n    if (\n      (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS && prevProps.firmProductsList?.size && firmProductsList.size === 0 && options.offset && !isFetchingFirmProducts && prevProps.isFetchingFirmProducts) ||\n      (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES && prevProps.firmPackagesList?.size && firmPackagesList.size === 0 && options.offset && !isFetchingFirmPackages && prevProps.isFetchingFirmPackages) ||\n      (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS && prevProps.firmSeriesList?.size && firmSeriesList.size === 0 && options.offset && !isFetchingFirmSeries && prevProps.isFetchingFirmSeries) ||\n      (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS && prevProps.firmProductsList?.size && firmProductsList.size === 0 && options.offset && !isFetchingFirmProducts && prevProps.isFetchingFirmProducts)\n    ) {\n      const newPage = page - 1;\n      const newOffset = options.offset - options.limit;\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: newOffset\n        },\n        page: newPage\n      });\n    }\n    if (prevProps.firmProductsList !== firmProductsList) {\n      this.preloadMainImageFileIds(firmProductsList);\n    }\n\n    if (\n      (packageDrawerSuccess === SUCCESS_DRAWER && prevProps.packageDrawerSuccess !== SUCCESS_DRAWER) ||\n      (productDrawerSuccess === SUCCESS_DRAWER && prevProps.productDrawerSuccess !== SUCCESS_DRAWER)\n    ) {\n      this.setState({ firmPackage: undefined, deltasFirmProduct: undefined });\n      this.setSearchArgsAndSearch({});\n    }\n    if (checkingPackages === false && prevProps.checkingPackages === true) {\n      quickSearchedFirmPackagesList.count() === 0\n        ? this.setState({ deleteModalOpen: true })\n        : this.setState({ packagesListModalOpen: true });\n    }\n\n    if (prevProps.isSuperFirm !== isSuperFirm && isSuperFirm) {\n      this.state.productsColumns.splice(-1, 0, { id: 'Shared', label: 'productAndPackageList.shared', tooltip: 'productAndPackageList.sharedTooltip', display: true, sortable: true });\n      this.setState({ productsColumns: this.state.productsColumns });\n    }\n\n    if (prevProps.isAddingOrUpdatingPricing !== isAddingOrUpdatingPricing) {\n      this.setSearchArgsAndSearch({});\n    }\n\n    // when searchTerm or filters changes then send amplitude tracking\n    if (prevState.searchTerm !== searchTerm || prevState.filters !== filters) {\n      // only track when searchTerm is not an empty string or filters is not empty\n      if ((!!searchTerm && searchTerm.length) || (!!filters && filters['and'].length)) {\n        let trackedData: object;\n        if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS) {\n          trackedData = {\n            search: searchTerm && searchTerm.length ? searchTerm : null,\n            page: tabValue,\n            manufacturer: productFilterFormValues && productFilterFormValues.getIn(['brand', 'eq', 'value'], null) || null,\n            category: productFilterFormValues && productFilterFormValues.getIn(['categoryName', 'eq', 'value'], null) || null,\n            updatedDateStart: productFilterFormValues && productFilterFormValues.getIn(['firmProduct😈dateModified', 'gte'], null) || null,\n            updatedDateEnd: productFilterFormValues && productFilterFormValues.getIn(['firmProduct😈dateModified', 'lte'], null) || null,\n            createdDateStart: productFilterFormValues && productFilterFormValues.getIn(['firmProduct😈dateAdded', 'gte'], null) || null,\n            createdDateEnd: productFilterFormValues && productFilterFormValues.getIn(['firmProduct😈dateAdded', 'lte'], null) || null,\n            updatedBy: productFilterFormValues && productFilterFormValues.getIn(['modifiedBy😈user😈id', 'eq', 'value'], null) || null\n          };\n        } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES) {\n          trackedData = {\n            search: searchTerm && searchTerm.length ? searchTerm : null,\n            page: tabValue,\n            manufacturer: packageFilterFormValues && packageFilterFormValues.getIn(['manufacturerId', 'eq', 'value'], null) || null,\n            updatedDateStart: packageFilterFormValues && packageFilterFormValues.getIn(['modifiedDate', 'gte'], null) || null,\n            updatedDateEnd: packageFilterFormValues && packageFilterFormValues.getIn(['modifiedDate', 'lte'], null) || null,\n            createdDateStart: packageFilterFormValues && packageFilterFormValues.getIn(['createdDate', 'gte'], null) || null,\n            createdDateEnd: packageFilterFormValues && packageFilterFormValues.getIn(['createdDate', 'lte'], null) || null,\n            updatedBy: packageFilterFormValues && packageFilterFormValues.getIn(['modifiedBy', 'eq', 'value'], null) || null\n          };\n        } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS) {\n          trackedData = {\n            search: searchTerm && searchTerm.length ? searchTerm : null,\n            page: tabValue,\n            configuratorType: configFilterFormValues && (configFilterFormValues.getIn(['firmId', 'neq', 0]) === null || configFilterFormValues.getIn(['firmId', 'eq', 0]) === null)\n              ? [\n                configFilterFormValues.getIn(['firmId', 'neq', 0]) === null ? 'Firm' : null,\n                configFilterFormValues.getIn(['firmId', 'eq', 0]) === null ? 'Manufacturer' : null\n              ]\n              : null,\n            manufacturer: configFilterFormValues && configFilterFormValues.getIn(['brand', 'eq', 'value'], null) || null,\n            category: configFilterFormValues && configFilterFormValues.getIn(['categoryName', 'eq', 'value'], null) || null,\n            updatedDateStart: configFilterFormValues && configFilterFormValues.getIn(['dateModified', 'gte'], null) || null,\n            updatedDateEnd: configFilterFormValues && configFilterFormValues.getIn(['dateModified', 'lte'], null) || null,\n            createdDateStart: configFilterFormValues && configFilterFormValues.getIn(['dateAdded', 'gte'], null) || null,\n            createdDateEnd: configFilterFormValues && configFilterFormValues.getIn(['dateAdded', 'lte'], null) || null,\n            updatedBy: configFilterFormValues && configFilterFormValues.getIn(['modifiedBy😈user😈id', 'eq', 'value'], null) || null\n          };\n        } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS) {\n          trackedData = {\n            search: searchTerm && searchTerm.length ? searchTerm : null,\n            page: tabValue,\n            manufacturer: parentProductFilterFormValues && parentProductFilterFormValues.getIn(['brand', 'eq', 'value'], null) || null,\n            category: parentProductFilterFormValues && parentProductFilterFormValues.getIn(['categoryName', 'eq', 'value'], null) || null,\n          };\n        }\n        amplitude.logEvent(AMPLITUDE_EVENT.filterUsage, amplitudeData(trackedData));\n      }\n    }\n    if (prevProps.isDownloadTemplateSuccess !== isDownloadTemplateSuccess && isDownloadTemplateSuccess) {\n      this.setState({\n        isExportModalOpen: false,\n        selectedProducts: [],\n        excludedProducts: [],\n        isSelectAll: false\n      });\n      dispatch(new DownloadBulkImportTemplateFileSucceededAction(false));\n    }\n    if (isQuoteConnect) {\n      if (!formValues?.get('isQuoteConnect')) {\n        dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'isQuoteConnect', isQuoteConnect));\n      }\n      if (!formValues?.get('currency') && quoteConnectCurrency?.get('currency')) {\n        dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'currency', quoteConnectCurrency?.get('currency')));\n      }\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const { dispatch, forms } = this.props;\n    if (forms.includes(PRODUCT_LIST_FILTER_FORM)) {\n      dispatch(destroy(PRODUCT_LIST_FILTER_FORM));\n    }\n    if (forms.includes(PARENT_PRODUCT_LIST_FILTER_FORM)) {\n      dispatch(destroy(PARENT_PRODUCT_LIST_FILTER_FORM));\n    }\n    if (forms.includes(PACKAGE_LIST_FILTER_FORM)) {\n      dispatch(destroy(PACKAGE_LIST_FILTER_FORM));\n    }\n    if (forms.includes(CONFIG_LIST_FILTER_FORM)) {\n      dispatch(destroy(CONFIG_LIST_FILTER_FORM));\n    }\n    if (forms.includes(IMPORT_PRODUCTS_FILE_FORM)) {\n      dispatch(destroy(IMPORT_PRODUCTS_FILE_FORM));\n    }\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<Product | Package>) => {\n    const {\n      dispatch,\n      searchFirmProducts,\n      searchFirmPackages,\n      searchFirmSeries,\n      isAddingOrUpdatingPricing,\n      isQuoteConnect,\n      productFilterFormValues,\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage,\n      tabValue\n    } = this.state;\n    const {\n      options,\n      searchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    const newSearchTerm = searchTerm !== undefined ? searchTerm : currentSearchTerm;\n    const newOptions = options || currentOptions;\n\n    if (newSearchTerm && (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS)) {\n      newOptions.orderBy = {\n        productNumberLength: 1,\n        productNumber: 1\n      };\n    } else {\n      delete newOptions.orderBy;\n    }\n    this.setState(\n      {\n        options: newOptions,\n        searchTerm: newSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage,\n      }, () => {\n        const {\n          constructedFilters,\n          sharedProduct,\n          productSharedWithMe,\n        } = this.constructFilters();\n        if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS) {\n          searchFirmProducts({\n            options: {\n              ...this.state.options,\n              paginationMethod: isAddingOrUpdatingPricing ? 'count' : 'nextPage',\n            },\n            filters: constructedFilters,\n            sharedProduct,\n            isQuoteConnect,\n            onSuccess: !this.state.openFilterDrawer ? null : () => {\n              // update firm brand and categories filter list in case of changes to the firm products\n              dispatch(new GetFirmProductManufacturersAction());\n              dispatch(new GetFirmProductCategoriesAction({ manufacturerIds: productFilterFormValues?.getIn(['brand', 'in'])?.map((brand) => brand.id)?.join(',')}));\n            }\n          });\n        } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS) {\n          searchFirmProducts({\n            options: {\n              ...this.state.options,\n              paginationMethod: isAddingOrUpdatingPricing ? 'count' : 'nextPage',\n            },\n            filters: constructedFilters,\n            sharedProduct: true,\n            productSharedWithMe: productSharedWithMe ?? null,\n            isQuoteConnect,\n            // onSuccess: !this.state.openFilterDrawer ? null : () => {\n            //   // update firm brand and categories filter list in case of changes to the firm products\n            //   dispatch(new GetFirmProductManufacturersAction());\n            //   dispatch(new GetFirmProductCategoriesAction({ manufacturerIds: productFilterFormValues?.getIn(['brand', 'in'])?.map((brand) => brand.id)?.join(',')}));\n            // }\n          });\n        } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES) {\n          searchFirmPackages({\n            options: this.state.options as Option<Package>,\n            filters: constructedFilters,\n          });\n        } else {\n          searchFirmSeries({\n            options: this.state.options as Option<Series>,\n            filters: constructedFilters,\n          });\n        }\n      }\n    );\n  }\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    this.setSearchArgsAndSearch({ options: { ...options, offset: newPage * options.limit }, page: newPage });\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({ options: newOptions, page: adjustedPage });\n  }\n\n  public handleTabChange = (event: React.ChangeEvent<{}>, newValue: string) => {\n    const {\n      tabValue,\n      searchTerm,\n      filters,\n    } = this.state;\n\n    if (tabValue !== newValue) {\n      if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS) {\n        this.props.dispatch(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: false\n        }));\n      } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES) {\n        this.props.dispatch(new ToggleOverlayComponentAction({\n          id: PACKAGE_DRAWER_ID,\n          open: false\n        }));\n      }\n\n      const newData = {\n        columnsToDisplay: this.state[`${newValue}Columns`],\n        filters: this.state[`${newValue}Filters`],\n        searchTerm: this.state[`${newValue}SearchTerm`],\n        [`${tabValue}Filters`]: filters,\n        [`${tabValue}SearchTerm`]: searchTerm,\n      };\n\n      this.setState({\n        tabValue: newValue,\n        openFilterDrawer: false,\n        deltasFirmProduct: null,\n        firmPackage: null,\n        ...newData\n      }, () => this.setSearchArgsAndSearch({\n        page: 0,\n        options: defaultOptions\n      }));\n    }\n  }\n\n  public onClickFab = () => {\n    const { tabValue } = this.state;\n    const {\n      amplitudeData,\n    } = this.props;\n    if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS) {\n      this.setState({ deltasFirmProduct: null }, () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY));\n    } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES) {\n      this.setState({ firmPackage: null }, () => this.openDrawer(PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY));\n    } else {\n      this.props.dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.CREATE}`));\n      // add analytical tracking when click on 'add new configurators' button\n      amplitude.logEvent(AMPLITUDE_EVENT.addNewConfiguratorClick, amplitudeData({ addNewConfiguratorClicked: 'Configurators tab, add new configurator button clicked' }));\n    }\n  }\n\n  public onUploadMenuItemClick = (action: BulkType) => {\n    this.setState({\n      bulkType: action,\n      bulkConfirmationModalOpen: true\n    });\n  }\n\n  // public onUploadMenuItemClick = (action: string) => {\n  //   switch (action) {\n  //     case 'new': this.props.history.replace(ADD_PRICING_PATH); break;\n  //     case 'update': this.props.history.replace(UPDATE_PRICING_PATH); break;\n  //     default: break;\n  //   }\n  // }\n\n  public onConfirmBulkAction = () => {\n    switch (this.state.bulkType) {\n      case 'new':\n        this.props.history.replace(\n          this.props.isQuoteConnect ?\n            QUOTE_CONNECT_PRODUCTS_UPLOAD_PATH\n            :\n            ADD_PRICING_PATH\n        );\n        break;\n      case 'update':\n        this.props.history.replace(\n          this.props.isQuoteConnect ?\n            QUOTE_CONNECT_PRODUCTS_EXPORT_PATH\n            :\n            UPDATE_PRICING_PATH\n        );\n        break;\n      default: break;\n    }\n    this.setState({ bulkConfirmationModalOpen: false });\n  }\n\n  public onExportButtonClick = () => {\n\n    const {\n      dispatch,\n      // isQuoteConnect\n    } = this.props;\n\n    // const {\n    //   constructedFilters,\n    // } = this.constructFilters();\n\n    // const {\n    //   selectedProducts,\n    //   excludedProducts,\n    // } = this.state;\n\n    // if (this.props.isQuoteConnect) {\n\n    //   if (selectedProducts.length) {\n    //     constructedFilters.and.push({\n    //       'firmProduct.id': {\n    //         'in': selectedProducts\n    //       }\n    //     });\n    //   }\n    //   if (excludedProducts.length) {\n    //     constructedFilters.and.push({\n    //       'firmProduct.id': {\n    //         'nin': excludedProducts\n    //       }\n    //     });\n    //   }\n\n    //   dispatch(new BulkExportProductsAction({\n    //     exportFields: [...Object.keys(QCProductTemplateFields)]\n    //     filters: constructedFilters,\n    //     fileType: 'csv',\n    //     isQuoteConnect,\n    //     successCB: () => dispatch(new SetSnackbarOpenAction({\n    //       message: 'Products and pricing successfully exported! You may update existing products and add new products to the file and import it when ready.',\n    //       severity: 'success'\n    //     }))\n    //   }));\n\n    // } else {\n      this.setState({\n        isExportModalOpen: true\n      });\n    // }\n  }\n\n  public onExportModalClose = () => {\n    this.setState({\n      isExportModalOpen: false\n    });\n  }\n\n  public onNextClick = () => {\n    const { formValues, dispatch, isUpdatingPricing, isAddingNewPricing } = this.props;\n    const { activeStep, uploadSteps } = this.state;\n\n    const file = formValues?.get('importFile')?.[0];\n\n    const type = (isUpdatingPricing && 'update') || (isAddingNewPricing && 'new');\n\n    if (activeStep < uploadSteps.length) {\n      if (activeStep === 1 && file && type) {\n        dispatch(new BulkImportProductsAction({ type }));\n      } else {\n        this.setState({ activeStep: activeStep + 1 });\n      }\n    }\n\n  }\n\n  public onbackClick = () => {\n    this.setState({ activeStep: this.state.activeStep - 1 });\n  }\n\n  public onCancelClick = () => {\n    const { dispatch, history, isQuoteConnect } = this.props;\n    history.replace(isQuoteConnect ? QUOTE_CONNECT_PRODUCTS_PATH : PRODUCTS_PATH);\n    this.setState({\n      activeStep: 0,\n      selectedProducts: [],\n      excludedProducts: [],\n      isSelectAll: false,\n      isExportModalOpen: false,\n    });\n    dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'importFile', null));\n  }\n\n  public onSelectProduct = (_deltasFirmProduct: any) => (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => {\n    const { firmProductsListCount } = this.props;\n    const { selectedProducts, isSelectAll, excludedProducts } = this.state;\n    const id = _deltasFirmProduct.get('id');\n\n    if (isSelectAll) {\n      this.setState(prevState => ({\n        excludedProducts: !checked ? (excludedProducts.length + 1) === firmProductsListCount ? [] : [...prevState.excludedProducts, id] : [...prevState.excludedProducts.filter(_id => _id !== id)],\n        isSelectAll: (excludedProducts.length + 1) !== firmProductsListCount\n      }));\n    } else {\n      this.setState(prevState => ({\n        selectedProducts: checked ? (selectedProducts.length + 1) === firmProductsListCount ? [] : [...prevState.selectedProducts, id] : [...prevState.selectedProducts.filter(_id => _id !== id)],\n        isSelectAll: (selectedProducts.length + 1) === firmProductsListCount\n      }));\n    }\n  }\n\n  public onSelectAllProduct = (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => {\n    this.setState({ isSelectAll: checked, selectedProducts: [], excludedProducts: [] });\n  }\n\n  public onClearFile = () => {\n    const { dispatch } = this.props;\n    dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'importFile', null));\n  }\n\n  public onComplete = () => {\n    const { dispatch, history, isQuoteConnect } = this.props;\n    dispatch(new SetBulkImportProductsProgressAction({\n      percent: 0,\n      status: 'pending',\n      details: null\n    }));\n    this.setState({\n      isSelectAll: false,\n      activeStep: 0,\n      selectedProducts: [],\n      excludedProducts: [],\n      isExportModalOpen: false,\n    });\n    history.push(isQuoteConnect ? QUOTE_CONNECT_PRODUCTS_PATH : PRODUCTS_PATH);\n    this.setSearchArgsAndSearch({});\n  }\n\n  public onApply = () => {\n    const { formValues, dispatch } = this.props;\n    const file = formValues?.get('importFile')?.[0];\n    const conflicts = formValues?.get('conflicts');\n    const isUpdatingPricing = this.props.location.pathname === UPDATE_PRICING_PATH;\n    const type = (isUpdatingPricing && 'update');\n\n    if (file && type && conflicts && conflicts.length) {\n      dispatch(new BulkImportProductsAction({ type, conflicts }));\n    }\n  }\n\n  public resetProductsSelection = () => {\n    this.setState({\n      isSelectAll: false,\n      selectedProducts: [],\n      excludedProducts: []\n    });\n  }\n\n\n  public StepPages: React.FC<{}> = () => {\n    const {\n      classes,\n      theme,\n      firmProductsList = List(),\n      firmProductsListCount,\n      isFetchingFirmProducts,\n      firmProductsListHasNextPage,\n      firmPackagesList = List(),\n      isFetchingFirmPackages,\n      firmPackagesListHasNextPage,\n      firmSeriesList = List(),\n      isFetchingFirmSeries,\n      firmSeriesListHasNextPage,\n      isChildFirm,\n      t,\n      dispatch,\n      quickSearchFirmPackages,\n      deleteFirmProduct,\n      deleteFirmPackage,\n      deleteFirmSeries,\n      amplitudeData,\n      formValues,\n      isImportingProducts,\n      importProductsProgress,\n      isAddingNewPricing,\n      isUpdatingPricing,\n      isAddingOrUpdatingPricing,\n      isQuoteConnect,\n      userOfficeInCanada,\n      userFirmId,\n    } = this.props;\n    const {\n      options,\n      page,\n      columnsToDisplay,\n      tabValue,\n      activeStep,\n      selectedProducts,\n      excludedProducts,\n      isSelectAll,\n    } = this.state;\n\n    const emptyProductsLabels = {\n      emptyviewSubtitle: t('productAndPackageList.emptyProductsSubtitle'),\n      emptyviewAddButton: t('productAndPackageList.emptyProductsButton'),\n      emptyviewAlt: t('productAndPackageList.emptyProductsAlt'),\n      emptyviewNotFound: t('productAndPackageList.emptyProductsTitle'),\n    };\n\n    const emptyParentProductsLabels = {\n      emptyviewAlt: t('productAndPackageList.emptyProductsAlt'),\n      emptyviewNotFound: t('productAndPackageList.emptyProductsTitle'),\n    };\n\n    const emptyPackagesLabels = {\n      emptyviewSubtitle: t('productAndPackageList.emptyPackagesSubtitle'),\n      emptyviewAddButton: t('productAndPackageList.emptyPackagesButton'),\n      emptyviewAlt: t('productAndPackageList.emptyPackagesAlt'),\n      emptyviewNotFound: t('productAndPackageList.emptyPackagesTitle'),\n    };\n\n    const emptyConfigsLabels = {\n      emptyviewSubtitle: t('productAndPackageList.emptyConfigsSubtitle'),\n      emptyviewAddButton: t('productAndPackageList.emptyConfigsButton'),\n      emptyviewAlt: t('productAndPackageList.emptyConfigsAlt'),\n      emptyviewNotFound: t('productAndPackageList.emptyConfigsTitle'),\n    };\n\n    const listConfig = (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS)\n      ? {\n        collection: this.displayFirmProducts(firmProductsList),\n        searching: isFetchingFirmProducts,\n        count: isAddingOrUpdatingPricing\n          ? firmProductsListCount\n          : firmProductsListHasNextPage\n            ? options.offset + options.limit + 1\n            : options.offset + this.displayFirmProducts(firmProductsList)?.size\n      }\n      : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n        ? {\n          collection: firmPackagesList,\n          searching: isFetchingFirmPackages,\n          count: firmPackagesListHasNextPage ? options.offset + options.limit + 1 : options.offset + firmPackagesList?.size\n        }\n        : {\n          collection: firmSeriesList,\n          searching: isFetchingFirmSeries,\n          count: firmSeriesListHasNextPage ? options.offset + options.limit + 1 : options.offset + firmSeriesList?.size\n        };\n\n    const file = formValues?.get('importFile')?.[0];\n    const { percent, status, details } = importProductsProgress;\n\n    React.useEffect(() => {\n      this.props.dispatch(new SetBulkImportProductsProgressAction({\n        percent: 0,\n        status: 'pending'\n      }));\n      this.setState({\n        activeStep: 0,\n        selectedProducts: [],\n        excludedProducts: [],\n        uploadSteps: [\n          isAddingNewPricing ? { value: 'Template', labelPath: 'exportPricing.templateStepLabel' } : { value: 'Export', labelPath: 'exportPricing.exportStepLabel'},\n          { value: 'Upload', labelPath: 'exportPricing.uploadStepLabel' },\n          { value: 'Summary', labelPath: 'exportPricing.summaryStepLabel' }\n        ]\n      });\n    }, [this.props.location.pathname]);\n\n    const haveConflicts = status === 'failed' && details?.get('type') === 'conflicts' || details?.get('message')?.toLowerCase()?.includes('conflicts');\n    const haveErrors = status === 'failed' && details?.get('type') === 'errors' || details?.get('message')?.toLowerCase()?.includes('errors');\n\n    // const haveConflicts = status === 'failed' &&  true;\n    // const haveErrors = false;\n\n    const handleOnLoadingFinish = () => {\n      if (status === 'complete' || haveErrors) {\n        this.setState({ activeStep: this.state.activeStep + 1 });\n        dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'importFile', null));\n      } else if (!haveConflicts && !haveErrors) {\n        dispatch(new SetSnackbarOpenAction({\n          message: t('importPricing.fileUploadFailedSnackbarMessage'),\n          severity: 'error',\n          anchorOrigin: {\n            horizontal: 'center',\n            vertical: 'bottom'\n          }\n        }));\n        console.error('something wrong, have errors:', haveErrors); //tslint:disable-line\n        console.error('something wrong, have conflicts:', haveConflicts); //tslint:disable-line\n        console.error('something wrong details:', details); //tslint:disable-line\n      }\n    };\n\n    const hasShopDrawing = (productMap: IMap<Product>) => {\n      return userOfficeInCanada\n          ? productMap.getIn(['file', 'media', 'en-ca', 'shop_drawing']) ? productMap.getIn(['file', 'media', 'en-ca', 'shop_drawing', 'fileId']) : productMap.getIn(['file', 'media', 'en', 'shop_drawing', 'fileId'])\n          : productMap.getIn(['file', 'media', 'en-us', 'shop_drawing']) ? productMap.getIn(['file', 'media', 'en-us', 'shop_drawing', 'fileId']) : productMap.getIn(['file', 'media', 'en', 'shop_drawing', 'fileId']);\n    };\n\n    switch (activeStep) {\n      case 0: return (\n        listConfig.searching\n          ? <NotFound\n            svgIcon={<LoadingImage />}\n            firstRow={<LinearProgress color='secondary' />}\n            secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n            paperContainer={true}\n          />\n          :\n\n          !isAddingNewPricing ?\n            listConfig.collection.size !== 0\n              ? <>\n                <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                  <Table>\n                    <TableHead classes={{ root: classes.tableHead }}>\n                      <TableRow>\n                        {\n                          isUpdatingPricing ?\n                            <TableCell padding='checkbox'>\n                              <Tooltip title={(isSelectAll && !excludedProducts.length) || selectedProducts.length === listConfig.count ? t('exportPricing.unselectAllTooltip') : t('exportPricing.selectAllTooltip')}>\n                                <Checkbox\n                                  checked={(isSelectAll && !excludedProducts.length) || selectedProducts.length === listConfig.count}\n                                  onChange={this.onSelectAllProduct}\n                                />\n                              </Tooltip>\n                            </TableCell>\n                            :\n                            null\n                        }\n                        {columnsToDisplay.map((header, index) => (isAddingOrUpdatingPricing && header.id === 'Actions') ? null : (\n                          <Tooltip key={index} title={header.tooltip ? t(header.tooltip) : ''}>\n                            <TableCell classes={{ root: classes.headerCell }} style={header.style}>\n                              {t(header.label)}\n                            </TableCell>\n                          </Tooltip>\n                        ))}\n                      </TableRow>\n                    </TableHead>\n                    <TableBody>\n                      {\n                        (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS)\n                          ? this.displayFirmProducts(firmProductsList).map((_deltasFirmProduct: IMap<FirmProduct>, index: number) => {\n                            const firmProduct = _deltasFirmProduct.get('firmProduct');\n                            const isSharedProduct = _deltasFirmProduct.get('sharedProduct');\n                            const currentStatus = firmProduct.get('status');\n                            const statusLabelPath = SERIES_STATUS_VALUE_MAP.getIn([currentStatus, 'labelPath']);\n                            const currentStatusMap = seriesStatusList && seriesStatusList.find((_status: IMap<Status>) => _status.get('value') === currentStatus);\n                            const currentStatusClass = currentStatus ? classes[`__${currentStatusMap && currentStatusMap.get('id')}`] : classes.null;\n                            const currentlySharedWithMe = _deltasFirmProduct.get('sharedProduct') && _deltasFirmProduct.get('firmId') !== userFirmId && isProductSharedWithFirm(_deltasFirmProduct, userFirmId);\n\n                            return (\n                              <TableRow id={`${index}`} key={index} hover={true} onClick={(e: any) => {\n                                if (e.target.id === 'checkbox_cell' || e.target.id === 'checkbox_input') {\n                                  return;\n                                }\n                                this.setState({\n                                  deltasFirmProduct: _deltasFirmProduct,\n                                  itemNameToDelete: firmProduct.get('productNumber'),\n                                  itemIdToDelete: firmProduct.get('firmProductId'),\n                                  itemToDeleteIsShareable: isSharedProduct\n                                }, () => isQuoteConnect ? null : this.openDrawer(PRODUCT_DRAWER_ID));\n                              }}>\n                                {\n                                  isUpdatingPricing ?\n                                    <TableCell padding='checkbox' id='checkbox_cell'>\n                                      <Checkbox\n                                        id='checkbox_input'\n                                        // indeterminate={numSelected > 0 && numSelected < rowCount}\n                                        checked={selectedProducts.includes(_deltasFirmProduct.get('id')) ? true : excludedProducts.includes(_deltasFirmProduct.get('id')) ? false : isSelectAll}\n                                        onChange={this.onSelectProduct(_deltasFirmProduct)}\n                                      // inputProps={{ 'aria-label': 'select all desserts' }}\n                                      />\n                                    </TableCell>\n                                    :\n                                    null\n                                }\n                                {_deltasFirmProduct && columnsToDisplay.map((column: TableColumn) => {\n                                  switch (column.id) {\n                                    case '': return <TableCell key={column.label} padding='none' style={{ width: 1 }}>\n                                      <Grid>\n                                        <Image src={firmProduct.getIn(column.path) + `|fit:40,40`} fromService={true} aspectRatio={'100%'} width={'40px'} margin={'0 0 0 16px'} />\n                                      </Grid>\n                                    </TableCell>;\n                                    case 'Product Number':\n                                    case 'Internal Product Number':\n                                    case 'Manufacturer':\n                                    case 'Description':\n                                    case 'Category': return <TextCell key={column.label} text={firmProduct.getIn(column.path)} />;\n                                    case 'Price': return <TextCell\n                                      key={column.label}\n                                      text={firmProduct.getIn(column.path).get('default', Map()).map((prices, currency) => {\n                                        const priceList = prices.map((price, priceType) => {\n                                          if (!['isPoa', 'list', 'sell', 'cost'].includes(priceType)) {\n                                            return;\n                                          }\n                                          return price && priceType !== 'isPoa' && [t(`productAndPackageList.${priceType}`), priceType === 'list' && prices.get('isPoa') ? '0.00' : price].filter(x => x).join(' ');\n                                        }).filter(x => x).join(', ');\n                                        return priceList && (currency + ': ' + priceList);\n                                      }).filter(x => x).join(' ')}\n                                    />;\n                                    case 'Status': return <TableCell key={column.label}>\n                                      <div className={classes.chipContainer}>\n                                        <div className={classNames(classes.chip, currentStatusClass)} onMouseDown={e => e.stopPropagation()}>\n                                          <Typography>\n                                            {statusLabelPath ? t(statusLabelPath) : (currentStatus || '-')}\n                                          </Typography>\n                                        </div>\n                                      </div>\n                                    </TableCell>;\n                                    case 'Last Update': {\n                                      const currency = firmProduct.getIn(['price', 'default'])?.keySeq()?.first();\n                                      return <TextCell\n                                        key={column.label}\n                                        text={utcToLocal(firmProduct.getIn(isQuoteConnect ? [...column.path, currency, 'lastUpdatedAt'] : column.path))}\n                                      />;\n                                    }\n                                    case 'Shared': return <TableCell key={column.label}>\n                                      {isSharedProduct && <CheckIcon color='primary' style={{ display: 'table-cell', margin: 'auto' }} />}\n                                    </TableCell>;\n                                    case 'Has Shop Drawing': return <TableCell key={column.label} style={{ textAlign: 'center' }}>\n                                        {hasShopDrawing(firmProduct) ? <CheckIcon style={{ color: theme.palette.success.main }} /> : <Typography>{t('na')}</Typography>}\n                                      </TableCell>;\n                                    case 'Actions': return isAddingOrUpdatingPricing\n                                      ? null\n                                      : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS\n                                        ? <CustomActionButton\n                                            key={column.label}\n                                            editAction={() => this.setState({ deltasFirmProduct: _deltasFirmProduct }, () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY))}\n                                            copyAction={isChildFirm && isSharedProduct ? null : async () => {\n                                              const updatedDelta = await this.createMainImageFileId(_deltasFirmProduct);\n                                              this.setState({ deltasFirmProduct: updatedDelta.setIn(['firmProduct', 'id'], null) }, () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY));\n                                            }}\n                                            // deleteTooltip={isChildFirm && isSharedProduct ? 'Remove shared product from my firm\\'s product list' : ''}\n                                            deleteAction={() => {\n                                              this.setState({\n                                                deltasFirmProduct: _deltasFirmProduct,\n                                                itemNameToDelete: firmProduct.get('productNumber'),\n                                                itemIdToDelete: firmProduct.get('firmProductId'),\n                                                itemToDeleteIsShareable: isSharedProduct\n                                              });\n                                              dispatch(new CheckingProductInPackages(true));\n                                              quickSearchFirmPackages({\n                                                filters: { productIds: { like: firmProduct.get('firmProductId') } } as Filter\n                                              });\n                                            }}\n                                          />\n                                        : <CustomParentFirmProductActionButton\n                                            key={column.label}\n                                            shareAction={\n                                              currentlySharedWithMe\n                                                ? undefined\n                                                : () => this.setState({ deltasFirmProduct: _deltasFirmProduct }, () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY))\n                                            }\n                                          />;\n                                  }\n                                })}\n                              </TableRow>\n                            );\n                          })\n                          : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n                            ? firmPackagesList.map((firmPackage: IMap<Package>, index: number) => (\n                              <TableRow id={`${index}`} key={index} hover={true} onClick={() => {\n                                this.setState({\n                                  firmPackage,\n                                  itemIdToDelete: firmPackage.get('id'),\n                                  itemNameToDelete: firmPackage.get('number'),\n                                  itemToDeleteIsShareable: false\n                                }, () => this.openDrawer(PACKAGE_DRAWER_ID));\n                              }}>\n                                {firmPackage && columnsToDisplay.map((column: TableColumn) => {\n                                  switch (column.id) {\n                                    case 'Package Number':\n                                    case 'Manufacturer':\n                                    case 'Description': return <TextCell key={column.label} text={firmPackage.getIn(column.path)} />;\n                                    case '# of Products': return <TextCell key={column.label} text={(firmPackage.getIn(column.path) || List()).count()} />;\n                                    case 'Last Update': return <TextCell key={column.label} text={utcToLocal(firmPackage.getIn(column.path))} />;\n                                    case 'Actions': return (\n                                      <CustomActionButton\n                                        key={column.label}\n                                        editAction={() => this.setState({ firmPackage }, () => this.openDrawer(PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY))}\n                                        copyAction={() => this.setState({ firmPackage: firmPackage.set('id', null) }, () => this.openDrawer(PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY))}\n                                        deleteAction={() => {\n                                          this.setState({\n                                            firmPackage,\n                                            deleteModalOpen: true,\n                                            itemIdToDelete: firmPackage.get('id'),\n                                            itemNameToDelete: firmPackage.get('number'),\n                                            itemToDeleteIsShareable: false\n                                          });\n                                        }}\n                                      />\n                                    );\n                                  }\n                                })}\n                              </TableRow>\n                            ))\n                            : firmSeriesList.map((series: IMap<Series>, index: number) => (\n                              <TableRow id={`${index}`} key={index} hover={true}>\n                                {series && columnsToDisplay.map((column: TableColumn) => {\n                                  const isBasicConfig = series.get('isConfigurator') === false;\n                                  const isAtsConfig = series.get('firmId') === null;\n                                  const disabledAction = isAtsConfig || isBasicConfig;\n                                  const disabledTooltip = (isBasicConfig && t('productAndPackageList.disabledActionTooltipForAtsBasicConfigs')) || (isAtsConfig && t('productAndPackageList.disabledActionTooltipForAtsAdvanceConfigs')) || '';\n                                  const companyName = series.getIn(['createdBy', 'firm', 'name']) || '';\n                                  switch (column.id) {\n                                    case '': return <TableCell key={column.label} style={{ textAlign: 'center', paddingRight: 0 }}>\n                                      {\n                                        series.getIn(column.path) === null\n                                          ? <Tooltip title={t('productAndPackageList.manufacturerRecommendedConfigTooltip')}>\n                                            <ThumbUpAltRoundedIcon color='primary' />\n                                          </Tooltip>\n                                          : <Tooltip title={i18next.t('translations:productAndPackageList.customConfiguratorTooltip', { companyName })}>\n                                            <Avatar className={classes.avatar}>{companyName[0]}</Avatar>\n                                          </Tooltip>\n                                      }\n                                    </TableCell>;\n                                    case 'Series Type': return <SeriesTypeCell key={column.id} isConfigurator={series.get('isConfigurator')} />;\n                                    case 'Region': return <RegionCell key={column.label} series={series} />;\n                                    case 'Model Number': return <LinkCell key={column.label} name={series.getIn(column.path)} refresh={false} linkPath={`${PIM_SERIES_DETAIL_PATH}/${series.get('id')}`} />;\n                                    case 'Category':\n                                    case 'Manufacturer': return <TextCell key={column.label} text={series.getIn(column.path)} />;\n                                    case 'List Price': return <TextCell key={column.label} text={this.formatPrice(series, 'list')} />;\n                                    case 'Sell Price': return <TextCell key={column.label} text={this.formatPrice(series, 'sell')} />;\n                                    case 'Cost': return <TextCell key={column.label} text={this.formatPrice(series, 'cost')} />;\n                                    case 'Last Update': return <TextCell key={column.label} text={utcToLocal(series.getIn(column.path))} />;\n                                    case 'Actions': return (\n                                      <CustomActionButton\n                                        key={column.label}\n                                        editTooltip={disabledTooltip}\n                                        deleteTooltip={disabledTooltip}\n                                        copyTooltip={isBasicConfig && disabledTooltip}\n                                        editAction={!disabledAction && (() => dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.EDIT}/${series.get('id')}`)))}\n                                        copyAction={!isBasicConfig && (() => dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.DUPLCIATE}/${series.get('id')}`)))}\n                                        deleteAction={!disabledAction && (() => {\n                                          this.setState({\n                                            deleteModalOpen: true,\n                                            itemIdToDelete: series.get('id'),\n                                            itemNameToDelete: series.get('productNumber'),\n                                            itemToDeleteIsShareable: false\n                                          });\n                                        })}\n                                      />\n                                    );\n                                  }\n                                })}\n                              </TableRow>\n                            ))\n                      }\n                    </TableBody>\n                  </Table>\n                </div>\n                <TablePagination\n                  className={classes.pagination}\n                  component='div'\n                  onChangePage={this.handlePageChange}\n                  labelRowsPerPage={t('Pagination.rowsPerPage')}\n                  labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                  rowsPerPageOptions={[5, 10, 25, 50]}\n                  onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                  count={listConfig.count || 0}\n                  rowsPerPage={options.limit}\n                  page={page}\n                  ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                  classes={{\n                    toolbar: classes.paginationToolbar\n                  }}\n                />\n              </>\n              : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS\n                ? <EmptyView\n                    svg={\n                      <AtsSvgProduct\n                        color={{\n                          backgroundColor: theme.palette.secondary[300],\n                          shadowColor: theme.palette.secondary.main\n                        }}\n                        margin={String(theme.spacing(3))}\n                      />\n                    }\n                    onButtonClicked={() => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY)}\n                    emptyviewSubtitle={emptyProductsLabels.emptyviewSubtitle}\n                    emptyviewAddButton={emptyProductsLabels.emptyviewAddButton}\n                    emptyviewAlt={emptyProductsLabels.emptyviewAlt}\n                    emptyviewNotFound={emptyProductsLabels.emptyviewNotFound}\n                  />\n                : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS\n                  ? <EmptyView\n                      svg={\n                        <AtsSvgProduct\n                          color={{\n                            backgroundColor: theme.palette.secondary[300],\n                            shadowColor: theme.palette.secondary.main\n                          }}\n                          margin={String(theme.spacing(3))}\n                        />\n                      }\n                      emptyviewAlt={emptyParentProductsLabels.emptyviewAlt}\n                      emptyviewNotFound={emptyParentProductsLabels.emptyviewNotFound}\n                    />\n                  : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n                    ? <EmptyView\n                        svg={\n                          <AtsSvgPackage\n                            color={{\n                              backgroundColor: theme.palette.secondary[300],\n                              shadowColor: theme.palette.secondary.main\n                            }}\n                            margin={String(theme.spacing(3))}\n                          />\n                        }\n                        onButtonClicked={() => this.openDrawer(PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY)}\n                        emptyviewSubtitle={emptyPackagesLabels.emptyviewSubtitle}\n                        emptyviewAddButton={emptyPackagesLabels.emptyviewAddButton}\n                        emptyviewAlt={emptyPackagesLabels.emptyviewAlt}\n                        emptyviewNotFound={emptyPackagesLabels.emptyviewNotFound}\n                      />\n                    : <EmptyView\n                        svg={\n                          <AtsSvgEmptyFeaturesOptions\n                            color={theme.palette.secondary[300]}\n                            shadowColor={theme.palette.secondary.main}\n                            style={{ margin: theme.spacing(3) }}\n                          />\n                        }\n                        onButtonClicked={() => {\n                          dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.CREATE}`));\n                          // add analytical tracking when click on 'add new configurators' button\n                          amplitude.logEvent(AMPLITUDE_EVENT.addNewConfiguratorClick, amplitudeData({ addNewConfigurator: 'Configurators tab, add new configurator button clicked' }));\n                        }}\n                        emptyviewSubtitle={emptyConfigsLabels.emptyviewSubtitle}\n                        emptyviewAddButton={emptyConfigsLabels.emptyviewAddButton}\n                        emptyviewAlt={emptyConfigsLabels.emptyviewAlt}\n                        emptyviewNotFound={emptyConfigsLabels.emptyviewNotFound}\n                      />\n            :\n            <DownloadTemplate />\n      );\n      case 1: return (\n        isImportingProducts ? <LoadingView onLoadingFinish={handleOnLoadingFinish} /> :\n          status === 'failed' && haveConflicts ? <ConflictView />\n            :\n            <Grid container={true} justify='center' alignItems='center' style={{ height: '100%', padding: 40 }}>\n              <Grid container={true} justify='center' alignItems='center'>\n                <Grid item={true} xs={12}>\n                  <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                    component={FieldDropzone}\n                    name='importFile'\n                    validate={uploadFileValidation}\n                    props={{\n                      dropzoneRootProps: {\n                        style: { width: '600px', height: '200px' }\n                      }\n                    }}\n                  />\n                  {\n                    file &&\n                    <Grid item={true}>\n                      <Grid container={true} justify='center'>\n                        <TextField\n                          style={{ width: '600px' }}\n                          disabled={true}\n                          value={file?.name}\n                          InputProps={{\n                            startAdornment: file && <InputAdornment position='start'>\n                              <DescriptionIcon />\n                            </InputAdornment>,\n                            endAdornment: <InputAdornment position='end'>\n                              <IconButton onClick={this.onClearFile}><ClearIcon /></IconButton>\n                            </InputAdornment>,\n                          }}\n                        />\n                      </Grid>\n                    </Grid>\n                  }\n                </Grid>\n                {\n                  !isQuoteConnect &&\n                  <Grid item={true} xs={12}>\n                    <Grid container={true} justify='space-evenly' style={{ marginTop: 34 }}>\n\n                      <Grid item={true} xs={4}>\n                        <Grid container={true} justify='flex-end'>\n                          <Box display='block'>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeTitle')}</Typography>\n                            <br />\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeProductNmuber')}</Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeDescription')}</Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticBrand')}\n                              &emsp;&emsp;&emsp;&ensp;\n                              <Link className={classes.link} onClick={() => this.setState({ manufacturersModalOpen: true })}>{t('importPricing.acceptBrandsLink')}</Link>\n                            </Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeCategory')}\n                              &emsp;&emsp;\n                              <Link className={classes.link} onClick={() => this.setState({ categoriesModalOpen: true })}>{t('importPricing.acceptCategoriesLink')}</Link>\n                            </Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeCurrency')}</Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeRegion')}</Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoticeProductStatus')}</Typography>\n                          </Box>\n                        </Grid>\n                      </Grid>\n\n                      <Grid item={true} xs={4}>\n                        <Grid container={true}>\n                          <Box display='block'>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoteTitle')}</Typography>\n                            <br />\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoteDoNot')}</Typography>\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoteCanNot')}</Typography>\n                            <br />\n                            <Typography variant='body1'>{t('importPricing.uploadFileNoteSpecialCharater')}</Typography>\n                            <br />\n                            <Typography variant='body1'>{t('importPricing.uploadFileImportMaxRows')}</Typography>\n                          </Box>\n                        </Grid>\n                      </Grid>\n\n                    </Grid>\n                  </Grid>\n                }\n              </Grid>\n            </Grid>\n      );\n      case 2: return (\n        <SummaryView\n          isUpdatingPricing={isUpdatingPricing}\n          isAddingNewPricing={isAddingNewPricing}\n          onReUploadClick={() => {\n            dispatch(change(IMPORT_PRODUCTS_FILE_FORM, 'importFile', null));\n            dispatch(new SetBulkImportProductsProgressAction({\n              percent: 0,\n              status: 'pending',\n              details: null\n            }));\n            this.setState({ activeStep: 1 });\n          }}\n        />);\n      default: return;\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      theme,\n      quickSearchedFirmPackagesList,\n      isChildFirm,\n      firmExportFieldsConfig,\n      importProductsProgress,\n      formValues,\n      isImportingProducts,\n      categories,\n      manufacturers,\n      t,\n      dispatch,\n      quickSearchFirmPackages,\n      deleteFirmProduct,\n      deleteFirmPackage,\n      deleteFirmSeries,\n      hasFirmAdminAclRole,\n      isDownloadingTemplate,\n      firmProductsList = List(),\n      firmProductsListCount,\n      isFetchingFirmProducts,\n      firmProductsListHasNextPage,\n      firmPackagesList = List(),\n      isFetchingFirmPackages,\n      firmPackagesListHasNextPage,\n      firmSeriesList = List(),\n      isFetchingFirmSeries,\n      firmSeriesListHasNextPage,\n      isUpdatingPricing,\n      isAddingNewPricing,\n      isAddingOrUpdatingPricing,\n      isQuoteConnect,\n      isExportingProducts,\n      isRestrictedOutsideSalesRep,\n      quoteConnectCurrency,\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      openFilterDrawer,\n      tabValue,\n      itemNameToDelete,\n      itemIdToDelete,\n      itemToDeleteIsShareable,\n      deleteModalOpen,\n      packagesListModalOpen,\n      categoriesModalOpen,\n      manufacturersModalOpen,\n      activeStep,\n      selectedProducts,\n      excludedProducts,\n      isSelectAll,\n      isExportModalOpen,\n      uploadSteps,\n      bulkConfirmationModalOpen,\n      openQCEditModal\n    } = this.state;\n\n    const { status, details } = importProductsProgress;\n\n    const haveConflicts = status === 'failed' && details?.get('type') === 'conflicts' || details?.get('message')?.toLowerCase()?.includes('conflicts');\n    const haveErrors = status === 'failed' && details?.get('type') === 'errors' || details?.get('message')?.toLowerCase()?.includes('errors');\n\n    const file = formValues?.get('importFile')?.[0];\n\n    const listConfig = (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS)\n      ? {\n        collection: this.displayFirmProducts(firmProductsList),\n        searching: isFetchingFirmProducts,\n        count: isAddingOrUpdatingPricing\n          ? firmProductsListCount\n          : firmProductsListHasNextPage\n            ? options.offset + options.limit + 1\n            : options.offset + this.displayFirmProducts(firmProductsList)?.size\n      }\n      : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n        ? {\n          collection: firmPackagesList,\n          searching: isFetchingFirmPackages,\n          count: firmPackagesListHasNextPage ? options.offset + options.limit + 1 : options.offset + firmPackagesList?.size\n        }\n        : {\n          collection: firmSeriesList,\n          searching: isFetchingFirmSeries,\n          count: firmSeriesListHasNextPage ? options.offset + options.limit + 1 : options.offset + firmSeriesList?.size\n        };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <ToolBar\n          onClickFilterButton={this.toggleFilterDrawer}\n          onClickUploadProductsButton={(e) => this.setState({ isUploadMenuOpen: true, anchorEl: e.currentTarget })}\n          onClickCancelUploadButton={() => this.setState({ isUpdatingPricing: false })}\n          searchTooltip={t('productAndPackageListTopBar.enterYourSearch')}\n          searchTerm={searchTerm}\n          handleSubmit={this.handleSubmit}\n          onClickFab={this.onClickFab}\n          showColumn={false}\n          step={activeStep}\n          showFilter={!isAddingOrUpdatingPricing || (isUpdatingPricing && activeStep === 0)}\n          showSearchInput={!isAddingOrUpdatingPricing || (isUpdatingPricing && activeStep === 0)}\n          showFab={!isAddingOrUpdatingPricing && !isRestrictedOutsideSalesRep && tabValue !== PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS}\n          showUploadProducts={!isAddingOrUpdatingPricing && tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS && (hasFirmAdminAclRole || isQuoteConnect) && !isAddingOrUpdatingPricing && !isRestrictedOutsideSalesRep} // acl roles needed\n          onUploadMenuItemClick={this.onUploadMenuItemClick}\n          leftComponent={\n            isAddingOrUpdatingPricing ?\n              <Stepper className={classes.stepContainer} activeStep={activeStep}>\n                {\n                  uploadSteps.map((step, i) => <Step className={activeStep === 0 && classes.step1Container} key={step.value + i}>\n                    {\n                      step.value === 'Export' && activeStep === 0 ?\n                        <StepLabel>\n                          <Grid container={true} direction='row' alignItems='center' wrap='nowrap'>\n                            {t(step.labelPath)}\n                            <Tooltip title={\n                              <ul className={classes.ul}>\n                                <li>{t('exportPricing.tooltipDescription1')}</li>\n                                <li>{t('exportPricing.tooltipDescription2')}</li>\n                                <li>{t('exportPricing.tooltipDescription3')}</li>\n                                <li>{t('exportPricing.tooltipDescription4')}</li>\n                              </ul>\n                            }>\n                              <InfoRounded style={{ marginLeft: 10 }} color='action' />\n                            </Tooltip>\n                          </Grid>\n                        </StepLabel>\n                        :\n                        <StepLabel style={{ marginLeft: 10 }}>{t(step.labelPath)}</StepLabel>\n                    }\n                  </Step>)\n                }\n              </Stepper>\n              :\n              !isQuoteConnect ?\n                <Tabs\n                  className={classes.tabs}\n                  value={tabValue}\n                  onChange={this.handleTabChange}\n                  variant='fullWidth'\n                  aria-label={t('productAndPackageListTopBar.tabsAriaLabel')}\n                >\n                  <Tab\n                    label={t('productAndPackageListTopBar.products')}\n                    value={PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS}\n                    icon={<FontAwesomeIcon icon='box' className={classes.tabIcon} style={{ marginBottom: 0 }} />}\n                    classes={{\n                      wrapper: classes.tabWrapper,\n                      labelIcon: classes.tabLabelIcon\n                    }}\n                  />\n                  {\n                    isChildFirm && (\n                      // The `value` prop must live on the Tooltip (the direct child of Tabs), not only on the\n                      // inner Tab. Tabs reads `value` off its direct child to build its valueToIndex map and to\n                      // position the indicator; the Tooltip forwards its remaining props to the Tab, so the Tab\n                      // still receives `selected`/`indicator`/`onChange`. Without this the indicator disappears\n                      // when the shared-products tab is selected. (spread-cast since TooltipProps has no `value`.)\n                      <Tooltip title={t('productAndPackageListTopBar.sharedProductsTooltip')} {...({ value: PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS } as any)}>\n                        <Tab\n                          label={t('productAndPackageListTopBar.parentProducts')}\n                          value={PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS}\n                          icon={<FontAwesomeIcon icon='box' className={classes.tabIcon} style={{ marginBottom: 0 }} />}\n                          classes={{\n                            wrapper: classes.tabWrapper,\n                            labelIcon: classes.tabLabelIcon\n                          }}\n                        />\n                      </Tooltip>\n                    )\n                  }\n                  <Tab\n                    label={t('productAndPackageListTopBar.packages')}\n                    value={PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES}\n                    icon={<FontAwesomeIcon icon='boxes' className={classes.tabIcon} style={{ marginBottom: 0 }} />}\n                    classes={{\n                      wrapper: classes.tabWrapper,\n                      labelIcon: classes.tabLabelIcon\n                    }}\n                  />\n                  <Tab\n                    label={t('productAndPackageListTopBar.configs')}\n                    value={PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS}\n                    icon={<WidgetsIcon fontSize='small' className={classes.tabIcon} style={{ marginBottom: 0 }} />}\n                    classes={{\n                      wrapper: classes.tabWrapper,\n                      labelIcon: classes.tabLabelIcon\n                    }}\n                  />\n                </Tabs>\n                :\n                null\n          }\n          rightComponent={\n            isImportingProducts ? null :\n              status === 'complete' || haveErrors ?\n                <>\n                  <Button\n                    className={classes.uploadButton}\n                    style={{ width: 300 }}\n                    onClick={this.onComplete}\n                    color='primary'\n                    variant='contained'\n                  >\n                    {t('importPricing.complete')}\n                  </Button>\n                </>\n                :\n                haveConflicts ?\n                  <>\n                    <Button\n                      className={classes.uploadButton}\n                      onClick={this.onApply}\n                      color='primary'\n                      variant='contained'\n                    >\n                      {t('importPricing.applyButton')}\n                    </Button>\n                  </>\n                  :\n                  isAddingOrUpdatingPricing ?\n                    <>\n                      <Button\n                        disabled={isDownloadingTemplate || isExportingProducts}\n                        className={classes.uploadButton}\n                        onClick={this.onCancelClick}\n                        color='primary'\n                      >\n                        {t('formButtons.cancel')}\n                      </Button>\n                      {\n                        activeStep > 0 ?\n                          <Button\n                            className={classes.uploadButton}\n                            onClick={this.onbackClick}\n                            color='primary'\n                          >\n                            {t('formButtons.back')}\n                          </Button>\n                          :\n                          null\n                      }\n                      {\n                        activeStep === 0 && isUpdatingPricing && (isSelectAll || selectedProducts.length || excludedProducts.length) ?\n                          <Button\n                            className={classes.uploadButton}\n                            onClick={this.onExportButtonClick}\n                            disabled={isExportingProducts || (isSelectAll && (selectedProducts.length > 1000000 || (listConfig.count - excludedProducts.length) > 1000000))}\n                            color='primary'\n                            variant='contained'\n                          >\n                            {t('exportPricing.exportButton')}\n                            {isExportingProducts && <CircularProgress color='primary' size='1.25rem' style={{ marginLeft: 8 }} />}\n                          </Button>\n                          :\n                          <Button\n                            className={classes.uploadButton}\n                            onClick={this.onNextClick}\n                            disabled={(activeStep === uploadSteps.length - 1) || (!file && activeStep === 1) || (file && !ACCEPTED_FILE_TYPES.includes(file.type)) || isDownloadingTemplate}\n                            color='primary'\n                            variant='contained'\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                      }\n                    </>\n                    :\n                    null\n          }\n        />\n        {\n          !isAddingNewPricing && activeStep === 0 &&\n          <FilterChipsBar\n            filtersFormId={\n              tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS\n                ? PRODUCT_LIST_FILTER_FORM\n                : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS\n                  ? PARENT_PRODUCT_LIST_FILTER_FORM\n                  : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n                    ? PACKAGE_LIST_FILTER_FORM\n                    : CONFIG_LIST_FILTER_FORM\n            }\n            setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n            options={options}\n            setUniqueKey={(key) => this.setState({ filterUniqueKey: key })}\n            containerStyle={{ marginBottom: !isAddingNewPricing && activeStep === 0 ? -10 : 0 }}\n          />\n        }\n\n        {\n          isAddingOrUpdatingPricing &&\n          <Grid container={true} className={classes.descriptionContainer} style={{ marginTop: activeStep > 0 ? 20 : 10 }}>\n            {\n              !isImportingProducts && isAddingNewPricing && !haveErrors && activeStep <= 1 && <Grid item={true} style={{ marginBottom: '10px' }}><Typography>{t('importPricing.description')}</Typography></Grid>\n            }\n            {\n              !isImportingProducts && isUpdatingPricing && !haveConflicts && activeStep <= 1 && <Grid item={true} style={{ marginBottom: '10px' }}>\n                {\n                  isSelectAll && (selectedProducts.length > 1000000 || (listConfig.count - excludedProducts.length) > 1000000) ? // && listConfig.count > 1000000\n                    <Grid container={true} direction='row' alignItems='center'>\n                      <WarningIcon color='error' style={{ marginRight: 10 }} /><Typography variant='body2' color='textPrimary'>{t('exportPricing.exportLimitWarning')}</Typography>\n                    </Grid>\n                    :\n                    isSelectAll || selectedProducts.length || excludedProducts.length ?\n                      <Grid container={true} direction='row' alignItems='center'>\n                        <Typography variant='body2' color='textPrimary'>{t('exportPricing.numbersOfProductSelected', { count: selectedProducts.length || (listConfig.count - excludedProducts.length) })}</Typography>\n                        <Button style={{ paddingTop: 0, paddingBottom: 0, marginLeft: 16 }} color='primary' onClick={this.resetProductsSelection}>{t('exportPricing.clearButton')}</Button>\n                      </Grid>\n                      :\n                      activeStep === 1 ?\n                        <Typography variant='body2' color='textPrimary'>{t('exportPricing.uploadFileDiscription')}</Typography>\n                        :\n                        <Typography variant='body2' color='textPrimary'>{t('exportPricing.description')}</Typography>\n                }\n\n              </Grid>\n            }\n            {\n              isImportingProducts && isAddingNewPricing && !haveErrors && activeStep === 1 && <Grid item={true} style={{ marginBottom: '10px' }}><Typography>{t('importPricing.doNotLeave')}</Typography></Grid>\n            }\n            {\n              isImportingProducts && isUpdatingPricing && !haveErrors && activeStep === 1 && <Grid item={true} style={{ marginBottom: '10px' }}><Typography>{t('exportPricing.doNotLeave')}</Typography></Grid>\n            }\n          </Grid>\n        }\n\n\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            <Paper\n              className={classes.tableContainer}>\n              <this.StepPages />\n            </Paper>\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0\n            }}\n          >\n            {\n              tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS\n                ? <ProductsListFilter\n                    key={PRODUCT_LIST_FILTER_FORM}\n                    formName={PRODUCT_LIST_FILTER_FORM}\n                    toggleDrawer={this.toggleFilterDrawer}\n                    open={this.state.openFilterDrawer}\n                    options={options}\n                    setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                    resetProductsSelection={this.resetProductsSelection}\n                    uniqueKey={this.state.filterUniqueKey}\n                    setUniqueKey={(key) => this.setState({ filterUniqueKey: key })}\n                    isQuoteConnect={isQuoteConnect}\n                  />\n                : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS\n                  ? <ProductsListFilter\n                      key={PARENT_PRODUCT_LIST_FILTER_FORM}\n                      formName={PARENT_PRODUCT_LIST_FILTER_FORM}\n                      toggleDrawer={this.toggleFilterDrawer}\n                      open={this.state.openFilterDrawer}\n                      options={options}\n                      setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                      resetProductsSelection={this.resetProductsSelection}\n                      uniqueKey={this.state.filterUniqueKey}\n                      setUniqueKey={(key) => this.setState({ filterUniqueKey: key })}\n                      isQuoteConnect={isQuoteConnect}\n                    />\n                  : tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES\n                    ? <PackageListFilter\n                        toggleDrawer={this.toggleFilterDrawer}\n                        open={this.state.openFilterDrawer}\n                        options={options}\n                        setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                        uniqueKey={this.state.filterUniqueKey}\n                        setUniqueKey={(key) => this.setState({ filterUniqueKey: key })}\n                      />\n                    : <ConfigListFilter\n                        toggleDrawer={this.toggleFilterDrawer}\n                        open={this.state.openFilterDrawer}\n                        options={options}\n                        setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                        uniqueKey={this.state.filterUniqueKey}\n                        setUniqueKey={(key) => this.setState({ filterUniqueKey: key })}\n                      />\n            }\n          </Grid>\n        </Grid>\n\n        <ExportFieldsModal\n          selectedProducts={selectedProducts}\n          excludedProducts={excludedProducts}\n          firmExportFieldsConfig={firmExportFieldsConfig}\n          constructFilters={this.constructFilters}\n          isExportModalOpen={isExportModalOpen}\n          onExportModalClose={this.onExportModalClose}\n          currency={quoteConnectCurrency?.get('currency')}\n        />\n        <Dialog\n          open={manufacturersModalOpen}\n          onClose={this.closeModal}\n        >\n          <DialogTitle>\n            <Box display='flex' alignItems='center'>\n              <Box flexGrow={1} >{t('importPricing.acceptBrands')}</Box>\n              <Box>\n                <IconButton onClick={this.closeModal}>\n                  <CloseIcon />\n                </IconButton>\n              </Box>\n            </Box>\n          </DialogTitle>\n          <DialogContent>\n            <Grid container={true} spacing={2}>\n              {manufacturers.map(manufacturer => <Grid key={manufacturer.get('id')} item={true} xs={6}>{manufacturer.get('value')}</Grid>)}\n            </Grid>\n          </DialogContent>\n        </Dialog>\n\n        <Dialog\n          open={categoriesModalOpen}\n          onClose={this.closeModal}\n        >\n          <DialogTitle>\n            <Box display='flex' alignItems='center'>\n              <Box flexGrow={1} >{t('importPricing.acceptCategories')}</Box>\n              <Box>\n                <IconButton onClick={this.closeModal}>\n                  <CloseIcon />\n                </IconButton>\n              </Box>\n            </Box>\n          </DialogTitle>\n          <DialogContent>\n            <Grid container={true} spacing={2}>\n              {categories.map(category => <Grid key={category.get('id')} item={true} xs={6}>{category.get('label') || category.get('value')}</Grid>)}\n            </Grid>\n          </DialogContent>\n        </Dialog>\n\n        <Dialog\n          open={packagesListModalOpen}\n          onClose={this.closePackagesListModal}\n        >\n          <div style={{ padding: theme.spacing(2) }}>\n            <Trans\n              i18nKey='translations:productAndPackageList.productsToDelete'\n              values={{ itemToDelete: itemNameToDelete }}\n            />\n            <MUIList>\n              {quickSearchedFirmPackagesList.map((pack, i) => {\n                return <div key={i}>\n                  <Link onClick={() => {\n                    this.closePackagesListModal();\n                    this.setState({ firmPackage: pack, itemIdToDelete: pack.get('id'), itemNameToDelete: pack.get('number') });\n                    this.openDrawer(PACKAGE_DRAWER_ID);\n                  }}>\n                    {pack.get('number')}\n                  </Link>\n                </div>;\n              })}\n            </MUIList>\n            <DialogActions>\n              <Button onClick={this.closePackagesListModal} color='primary'>\n                {t('formButtons.cancel')}\n              </Button>\n            </DialogActions>\n          </div>\n        </Dialog>\n        <div style={{ position: 'absolute' }}>\n          <ControlledDrawer\n            localKey={PRODUCT_DRAWER_ID}\n            menuComponent={\n              <ProductDrawer\n                product={this.state.deltasFirmProduct || undefined}\n                editAction={isAddingOrUpdatingPricing ? null : () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY)}\n                copyAction={\n                  isAddingOrUpdatingPricing || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS\n                    ? null\n                    : () => {\n                        this.setState({ deltasFirmProduct: this.state.deltasFirmProduct.setIn(['firmProduct', 'id'], null) }, () => this.openDrawer(PRODUCT_DRAWER_ID, PRODUCT_CONTENT_EDIT_KEY));\n                      }\n                }\n                deleteAction={\n                  isAddingOrUpdatingPricing || tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS\n                    ? null\n                    : () => {\n                        dispatch(new ToggleOverlayComponentAction({\n                          id: PRODUCT_DRAWER_ID,\n                          open: false,\n                        }));\n                        dispatch(new CheckingProductInPackages(true));\n                        quickSearchFirmPackages({\n                          filters: { productIds: { like: itemIdToDelete } } as Filter\n                        });\n                      }\n                }\n              />\n            }\n          />\n          <ControlledDrawer\n            localKey={PACKAGE_DRAWER_ID}\n            menuComponent={\n              <PackageDrawer\n                onProductClicked={this.onProductClicked}\n                packageData={this.state.firmPackage || undefined}\n                deleteAction={() => this.setState({ deleteModalOpen: true })}\n                copyAction={() => {\n                  this.setState({ firmPackage: this.state.firmPackage.set('id', null) }, () => this.openDrawer(PACKAGE_DRAWER_ID, PACKAGE_CONTENT_EDIT_KEY));\n                }}\n              />\n            }\n          />\n        </div>\n        <DeleteModalDialog\n          open={deleteModalOpen}\n          toggleDeleteModal={() => this.setState({ deleteModalOpen: false })}\n          withLoading={false}\n          contentText={isChildFirm && itemToDeleteIsShareable ? t('deleteModal.removeShareableProduct', { name: itemNameToDelete }) : `${t('deleteModal.areYouSure')} ${itemNameToDelete}?`}\n          itemName={itemNameToDelete}\n          idToDelete={itemIdToDelete}\n          handleDelete={(id: number) => {\n            const {\n              constructedFilters,\n              sharedProduct,\n            } = this.constructFilters();\n            if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS) {\n              deleteFirmSeries({\n                firmSeriesId: id,\n                filters: constructedFilters,\n                options\n              });\n            } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS && !this.state.firmPackage) {\n              deleteFirmProduct({\n                productId: id,\n                filters: constructedFilters,\n                options,\n                sharedProduct\n              });\n            } else {\n              deleteFirmPackage({\n                packageId: id,\n                filters: constructedFilters,\n                options: options as Option<Package>\n              });\n            }\n            this.setState({ deleteModalOpen: false });\n          }}\n        />\n\n        <Dialog\n          onClose={() => this.setState({ bulkConfirmationModalOpen: false })}\n          aria-labelledby={'bulk-confirmation-modal'}\n          open={bulkConfirmationModalOpen}\n          classes={{\n            paper: classes.bulkConfirmationModal\n          }}\n        >\n          <DialogContent>\n            <Typography variant='body2' color='textPrimary'>{t('exportPricing.bulkConfirmationMessage')}</Typography>\n          </DialogContent>\n          <DialogActions>\n            <Button\n              onClick={() => this.setState({ bulkConfirmationModalOpen: false })}\n              color='primary'\n              className={classes.confirmationButton}\n            >\n              {t('formButtons.cancel')}\n            </Button>\n\n            <Button\n              onClick={(e) => {\n                e.stopPropagation();\n                this.onConfirmBulkAction();\n              }}\n              color='primary' autoFocus={true}\n              className={classes.confirmationButton}\n            >\n              {t('exportPricing.bulkConfirmationButton')}\n            </Button>\n          </DialogActions>\n        </Dialog>\n        {(openQCEditModal) &&\n          <QCProductEditModal\n            open={openQCEditModal}\n            product={this.state.deltasFirmProduct}\n            onClose={this.closeQCProductModal}\n            onSuccess={() => {\n              this.closeQCProductModal();\n              this.setSearchArgsAndSearch({});\n            }}\n          />\n        }\n      </Grid>\n    );\n  }\n\n  private constructFilters = () => {\n    const { isQuoteConnect } = this.props;\n    const { searchTerm = '', filters, tabValue } = this.state;\n\n    // const constructedFilters: Filter = (tabValue !== PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PACKAGES)\n    //   ? {\n    //     'and': [\n    //       {\n    //         'productNumber': {\n    //           'like': searchTerm\n    //         }\n    //       }\n    //     ]\n    //   }\n    //   : {\n    //     'and': [\n    //       {\n    //         'number': {\n    //           'like': searchTerm\n    //         }\n    //       }\n    //     ]\n    //   };\n\n\n    // NEW FILTER BELOW FOR WHEN NEEDED PT-2585/PT-2607\n    const constructedFilters: Filter = (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.CONFIGS)\n      ? {\n        'and': [\n          {\n            'productNumber': {\n              'like': searchTerm\n            }\n          }\n        ]\n      }\n      : isQuoteConnect ? {\n        'and': [\n          {\n            'or': [\n              {\n                'productNumber': {\n                  'like': searchTerm\n                }\n              },\n              {\n                'brand': {\n                  'like': searchTerm\n                }\n              },\n              {\n                'description': {\n                  'like': searchTerm\n                }\n              }\n            ]\n          }\n        ]\n      } : {\n        'and': [\n          {\n            'productSearch': {\n              'match': searchTerm\n            }\n          }\n        ]\n      };\n    filters && constructedFilters.and.push(...(filters as any).and); // tslint:disable-line\n\n    let sharedProduct;\n    let productSharedWithMe;\n    if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS) {\n      sharedProduct = extractBooleanFilter(constructedFilters, 'sharedProduct');\n      pushActiveStatusFilter(constructedFilters);\n    } else if (tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PARENT_PRODUCTS) {\n      productSharedWithMe = extractBooleanFilter(constructedFilters, 'productSharedWithMe');\n      pushActiveStatusFilter(constructedFilters);\n    }\n\n    return {\n      constructedFilters,\n      sharedProduct,\n      productSharedWithMe,\n    };\n  }\n\n  private formatPrice = (config: IMap<Series>, priceType: string) => {\n    const cad = config.getIn(['price', 'default', 'CAD', priceType]);\n    const usd = config.getIn(['price', 'default', 'USD', priceType]);\n    return [cad ? `CAD: ${cad}` : null, usd ? `USD: ${usd}` : null].filter(price => price).join(', ');\n  }\n\n  private closePackagesListModal = () => this.setState({ packagesListModalOpen: false });\n\n  private closeModal = () => this.setState({ manufacturersModalOpen: false, categoriesModalOpen: false });\n\n  private closeQCProductModal = () => this.setState({ openQCEditModal: false, deltasFirmProduct: null });\n\n  private onProductClicked = (product: IMap<FirmProduct>) => {\n    this.setState({\n      deltasFirmProduct: product,\n      itemNameToDelete: product.get('productNumber'),\n      itemIdToDelete: product.get('firmProductId'),\n\n    }, () => this.openDrawer(PRODUCT_DRAWER_ID));\n  }\n\n  private createMainImageFileId = async (\n    delta: IMap<FirmProduct>,\n  ): Promise<IMap<FirmProduct>> => {\n    if (!delta) {\n      return delta;\n    }\n    const main = delta.getIn(['firmProduct', 'file', 'images', 'main']);\n    if (!main) {\n      return delta;\n    }\n    const fileId = main.get?.('fileId');\n    const mediaId = main.get?.('id');\n    const url = main.get?.('url');\n    if (fileId || !mediaId || !url) {\n      return delta;\n    }\n    const apiGateway = this.props.env?.get?.('ENDPOINT_APIGATEWAY');\n    if (!apiGateway) {\n      return delta;\n    }\n    if (this.preloadInMediaImage.has(mediaId)) {\n      return delta;\n    }\n    this.preloadInMediaImage.add(mediaId);\n    try {\n      const resolvedFileId = await ImageCreateApi.create(this.props.env, this.props.appId, mediaId);\n      if (!resolvedFileId) {\n        return delta;\n      }\n      const updated = delta.setIn(\n        ['firmProduct', 'file', 'images', 'main', 'fileId'],\n        resolvedFileId,\n      );\n      this.props.dispatch(new UpdateStoreFirmProductAction({ firmProduct: updated }));\n      return updated;\n    } catch {\n      return delta;\n    } finally {\n      this.preloadInMediaImage.delete(mediaId);\n    }\n  }\n\n  /**\n   * The list to render: the search result, plus any just-created product the\n   * index has not caught up to yet.\n   *\n   * FIRST PAGE ONLY. A pending row belongs at the top of the list, not injected\n   * into whatever page the user happens to be on — and the offset>count heal in\n   * componentDidUpdate reads `firmProductsList.size === 0`, which only runs at\n   * offset > 0 and must keep seeing the unmerged list.\n   */\n  private displayFirmProducts = (\n    firmProductsList: List<IMap<FirmProduct>>,\n  ): List<IMap<FirmProduct>> => {\n    const { pendingCreatedFirmProducts } = this.props;\n    const { options } = this.state;\n    if (options?.offset || !pendingCreatedFirmProducts?.size) {\n      return firmProductsList;\n    }\n    const present = firmProductsList?.map((p: any) => p.get('id'))?.toSet();\n    const missing = pendingCreatedFirmProducts\n      .filter((entry: any) => !present?.has(entry.getIn(['firmProduct', 'id'])))\n      .map((entry: any) => entry.get('firmProduct'));\n    return missing.size\n      ? (missing.concat(firmProductsList) as List<IMap<FirmProduct>>)\n      : firmProductsList;\n  }\n\n  private preloadMainImageFileIds = (firmProductsList: List<IMap<FirmProduct>>) => {\n    if (!firmProductsList) {\n      return;\n    }\n    firmProductsList.forEach((delta) => {\n      this.createMainImageFileId(delta).catch(() => undefined);\n    });\n  }\n\n  private openDrawer = (id: string, content: string = '') => {\n    const { dispatch, isQuoteConnect } = this.props;\n    if (isQuoteConnect) {\n      this.setState({ openQCEditModal: true });\n    } else {\n      dispatch(new SetOverlayComponentContentAction({\n        id,\n        content\n      }));\n      dispatch(new ToggleOverlayComponentAction({\n        id,\n        open: true,\n      }));\n      if (id === PRODUCT_DRAWER_ID) {\n        dispatch(new SetOverlayComponentPropsAction({\n          id: PRODUCT_DRAWER_ID,\n          props: {\n            onProductUpdated: this.state.tabValue === PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES.PRODUCTS\n              ? (updatedProduct: IMap<FirmProduct>) => {\n                  this.setState({\n                    deltasFirmProduct: updatedProduct,\n                    itemNameToDelete: updatedProduct.get('productNumber'),\n                    itemIdToDelete: updatedProduct.get('firmProductId'),\n                  });\n                  dispatch(new UpdateStoreFirmProductAction({ firmProduct: updatedProduct }));\n                }\n              : () => this.setSearchArgsAndSearch({})\n          }\n        }));\n      }\n    }\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchFirmProducts: ({ filters, options, sharedProduct, productSharedWithMe, isQuoteConnect, onSuccess }) => dispatch(new SearchFirmProductsAction({\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      },\n      sharedProduct,\n      isQuoteConnect,\n      productSharedWithMe,\n      onSuccess,\n    })),\n    searchFirmPackages: ({ filters, options }) => dispatch(new SearchFirmPackagesAction({\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      }\n    })),\n    quickSearchFirmPackages: ({ filters, options }) => dispatch(new QuickSearchFirmPackagesAction({\n      filters,\n      options\n    })),\n    searchFirmSeries: ({ filters, options }) => dispatch(new SearchFirmSeriesAction({\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      },\n      // isConfigurator: null\n    })),\n    deleteFirmProduct: ({ productId, filters, options, sharedProduct }) => dispatch(new DeleteFirmProductAndSearchFirmProductsAction({\n      productId,\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      },\n      sharedProduct\n    })),\n    deleteFirmPackage: ({ packageId, filters, options }) => dispatch(new DeletePackageAndSearchFirmPackagesAction({\n      packageId,\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      }\n    })),\n    deleteFirmSeries: ({ firmSeriesId, filters, options }) => dispatch(new DeleteFirmSeriesThenSearchFirmSeriesAction({\n      firmSeriesId,\n      filters,\n      options: {\n        ...options,\n        orderBy: {\n          id: -1\n        }\n      },\n      // isConfigurator: null\n    })),\n    getFirmFieldsConfig: () => dispatch(new GetBulkExportProductsConfigAction()),\n    getManufacturers: (isQuoteConnect: boolean) => {\n      if (isQuoteConnect) {\n        dispatch(new GetAllManufacturersAction());\n      } else {\n      dispatch(new GetManufacturersAction());\n      }\n    },\n    getCategories: (isQuoteConnect: boolean) => {\n      if (isQuoteConnect) {\n        dispatch(new GetAllCategoriesAction());\n      } else {\n        dispatch(new GetCategoriesAction());\n      }\n    },\n    getCurrencyPreference: (isQuoteConnect: boolean) => {\n      if (isQuoteConnect) {\n        dispatch(new GetPreferencesAction({\n          userType: 'user',\n          preference: PreferenceType.QuoteConnectCurrency\n        }));\n      }\n    },\n  };\n};\n\nconst mapStateToProps = (originalState: any, originalOwnProps: any) => {\n  const isUpdatingPricing = originalOwnProps.location.pathname === UPDATE_PRICING_PATH || originalOwnProps.location.pathname === QUOTE_CONNECT_PRODUCTS_EXPORT_PATH;\n  const isAddingNewPricing = originalOwnProps.location.pathname === ADD_PRICING_PATH || originalOwnProps.location.pathname === QUOTE_CONNECT_PRODUCTS_UPLOAD_PATH;\n  const isAddingOrUpdatingPricing = isUpdatingPricing || isAddingNewPricing;\n\n  const isQuoteConnect = originalOwnProps.location.pathname.includes(QUOTE_CONNECT_PRODUCTS_PATH);\n  const loginUserOfficeLocation = makeSelectLoggedInUserOfficeLocation()(originalState);\n  const userOfficeInCanada = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.canada;\n\n  return {\n    isUpdatingPricing,\n    isAddingNewPricing,\n    isAddingOrUpdatingPricing,\n    isQuoteConnect,\n    userOfficeInCanada,\n    ...createStructuredSelector({\n      env: makeSelectEnv(),\n      appId: makeSelectAppId(),\n      isFetchingFirmProducts: makeSelectIsFetchingFirmProducts(),\n      isFetchingFirmPackages: makeSelectIsFetchingFirmPackages(),\n      isFetchingFirmSeries: makeSelectSearchingFirmSeries(),\n      firmProductsList: makeSelectSearchedFirmProductsList(),\n      pendingCreatedFirmProducts: makeSelectPendingCreatedFirmProducts(),\n      firmProductsListCount: makeSelectSearchedFirmProductsListCount(),\n      firmProductsListHasNextPage: makeSelectSearchedFirmProductsListHasNextPage(),\n      firmPackagesList: makeSelectFirmPackages(),\n      firmPackagesListHasNextPage: makeSelectFirmPackagesHasNextPage(),\n      firmSeriesList: makeSelectFirmSeries(),\n      firmSeriesListHasNextPage: makeSelectFirmSeriesHasNextPage(),\n      packageDrawerSuccess: makeSelectOverlayComponentContent(PACKAGE_DRAWER_ID),\n      productDrawerSuccess: makeSelectOverlayComponentContent(PRODUCT_DRAWER_ID),\n      quickSearchedFirmPackagesList: makeSelectQuickSearchedFirmPackages(),\n      isLoadingQuickSearchFirmPackages: makeSelectIsLoadingQuickSearchFirmPackage(),\n      checkingPackages: makeSelectCheckingProductInPackages(),\n      isSuperFirm: makeSelectIsSuperFirm(),\n      isChildFirm: makeSelectIsChildFirm(),\n      forms: getFormNames(),\n      productFilterFormValues: getFormValues(PRODUCT_LIST_FILTER_FORM),\n      parentProductFilterFormValues: getFormValues(PARENT_PRODUCT_LIST_FILTER_FORM),\n      packageFilterFormValues: getFormValues(PACKAGE_LIST_FILTER_FORM),\n      configFilterFormValues: getFormValues(CONFIG_LIST_FILTER_FORM),\n      firmExportFieldsConfig: makeSelectFirmExportFieldsConfig(),\n      formValues: getFormValues(IMPORT_PRODUCTS_FILE_FORM),\n      isImportingProducts: makeSelectIsImportingProducts(),\n      importProductsProgress: makeSelectImportProductsProgress(),\n      hasFirmAdminAclRole: makeSelectUserHasFirmAdmin(),\n      categories: makeSelectCategory(),\n      manufacturers: makeSelectManufacturer(),\n      isDownloadingTemplate: makeSelectIsDownloadingTemplate(),\n      isDownloadTemplateSuccess: makeSelectIsDownloadTemplateSuccess(),\n      isExportingProducts: makeSelectIsExportingProducts(),\n      isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n      quoteConnectCurrency: makeSelectQuoteConnectCurrency(),\n      hasFeatCreateShopDrawingAcl: makeSelectUserHasFeatCreateShopDrawingAcl(),\n      userFirmId: makeSelectUserFirmId(),\n    })(originalState)\n  };\n};\n\nexport default compose<React.ComponentClass<IProductAndPackageListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withAmplitudeData,\n  withReduxFormValidationTranslation({ formName: IMPORT_PRODUCTS_FILE_FORM }),\n  reduxForm({\n    form: IMPORT_PRODUCTS_FILE_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true,\n    initialValues: {\n      importFile: null,\n      conflicts: null\n    }\n  })\n)(ProductAndPackageList);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport EditIcon from '@material-ui/icons/Edit';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\ninterface ICustomActionButtonComponentProps {\n  editAction?: () => void;\n  copyAction?: () => void;\n  deleteAction?: () => void;\n  editTooltip?: string;\n  copyTooltip?: string;\n  deleteTooltip?: string;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    t,\n    editAction,\n    copyAction,\n    deleteAction,\n    editTooltip,\n    copyTooltip,\n    deleteTooltip\n  } = props;\n\n  return (\n    <TableCell>\n      <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n        <Tooltip title={editTooltip || t('productAndPackageList.edit')}>\n          <div>\n            <IconButton disabled={!editAction} onClick={(e) => {e.stopPropagation(); editAction();}}>\n              <EditIcon fontSize='small' />\n            </IconButton>\n          </div>\n        </Tooltip>\n        <Tooltip title={copyTooltip || t('productAndPackageList.duplicate')}>\n          <div>\n            <IconButton disabled={!copyAction} onClick={(e) => {e.stopPropagation(); copyAction();}}>\n              <FileCopyIcon fontSize='small' />\n            </IconButton>\n          </div>\n        </Tooltip>\n        <Tooltip title={deleteTooltip || t('productAndPackageList.delete')}>\n          <div>\n            <IconButton disabled={!deleteAction} onClick={(e) => { e.stopPropagation(); deleteAction(); }}>\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          </div>\n        </Tooltip>\n      </Grid>\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(null, mapDispatchToProps)\n)(CustomActionButton);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import ApiClient from '../../utils/apiClient';\n\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\nconst ImageCreateApi = {\n\n  async create(env: any, appId: string, mediaId: number): Promise<string | null> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.post(`/msmedia/image.create`, { mediaId });\n      if (response?.success && response?.data?.payload?.msmedia?.fileId) {\n        return response.data.payload.msmedia.fileId;\n      }\n      return null;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error msmedia/image.create:', error);\n      return null;\n    }\n  },\n\n};\n\nexport default ImageCreateApi;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z\"\n}), 'InfoRounded');","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport ShareIcon from '@material-ui/icons/Share';\n\ninterface ICustomParentFirmProductActionButtonComponentProps {\n  shareAction: () => void;\n}\n\nexport interface ICustomParentFirmProductActionButtonProps extends ICustomParentFirmProductActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CustomParentFirmProductActionButtonProps = ICustomParentFirmProductActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst CustomParentFirmProductActionButton: React.FC<CustomParentFirmProductActionButtonProps> = (props) => {\n  const {\n    t,\n    shareAction,\n  } = props;\n\n  return (\n    <TableCell>\n      <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n        <Tooltip title={shareAction ? t('productAndPackageList.shareProduct') : t('productAndPackageList.productAlreadyShared')}>\n          <div>\n            <IconButton disabled={!shareAction} onClick={(e) => {e.stopPropagation(); shareAction();}}>\n              <ShareIcon fontSize='small' />\n            </IconButton>\n          </div>\n        </Tooltip>\n      </Grid>\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<ICustomParentFirmProductActionButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(null, mapDispatchToProps)\n)(CustomParentFirmProductActionButton);\n","import * as React from 'react';\nimport {compose, Dispatch} from 'redux';\nimport {\n  isImmutable,\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  Grid,\n  Typography,\n  Theme,\n  withStyles,\n  WithStyles,\n  Link,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport {\n  withTranslation, WithTranslation\n} from 'react-i18next';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction/index';\nimport {connect} from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  ToggleOverlayComponentAction,\n  SetOverlayComponentContentAction\n} from '../../modules/ApplicationModule/actions';\nimport {\n  SelectContactAction,\n  GetContactsSucceededAction,\n  SelectTeamOrganizationUserAction,\n  SelectTeamOrganizationOfficeAction,\n  GetOfficeByIdAction,\n  SearchUsersByOfficeIdAction,\n} from '../../modules/AccountModule/actions';\nimport { makeSelectOfficeBySelectedTeamOrganizationOfficeId } from '../../modules/AccountModule/selectors';\nimport { DRAWER_ID as CONTACT_DRAWER_ID } from '../../containers/MyContactsPage/constants';\nimport { DRAWER_ID as USER_DRAWER_ID } from '../../containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/constants';\nimport {\n  Office,\n} from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport { makeSelectUserFirmId } from '../../modules/AtsModule/selectors';\n\nimport { getContactDisplayText } from '../../utils/getContactDisplayText';\n\ninterface IQuoteContactsPreviewComponentProps {\n  label: string;\n  name: string;\n  placeholder: string;\n  options?: any;\n  contactsLabel?: string;\n  contacts?: any;\n  className?: any;\n  officeUser?: boolean;\n  officeId?: number;\n}\n\ninterface IQuoteContactsPreviewProps extends IQuoteContactsPreviewComponentProps {\n  dispatch: Dispatch<IAction>;\n  open: boolean;\n  toggleDrawer: (drawerId: string, open?: boolean) => void;\n  theme: Theme;\n  selectedOffice: IMap<Office>;\n  firmId: number;\n}\n\ntype QuoteContactsPreviewProps = IQuoteContactsPreviewProps\n& WithTranslation\n& WithStyles<keyof ReturnType<typeof styles>>;\n\nclass QuoteContactsPreview extends React.Component<QuoteContactsPreviewProps, {}> {\n  public componentDidMount = () => {\n    const {\n      dispatch,\n      officeId\n    } = this.props;\n\n    if (officeId) {\n      dispatch(new GetOfficeByIdAction({ officeId }));\n      dispatch(new SearchUsersByOfficeIdAction({ officeId, status: 'active' }));\n      dispatch(new SelectTeamOrganizationOfficeAction({ officeId }));\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const {\n      toggleDrawer\n    } = this.props;\n    toggleDrawer(USER_DRAWER_ID, false);\n    toggleDrawer(CONTACT_DRAWER_ID, false);\n  }\n\n  public render() {\n    const {\n      classes,\n      options,\n      contactsLabel,\n      contacts,\n    } = this.props;\n\n    const immutableContacts = isImmutable(contacts) ? contacts : fromJS(contacts);\n    const optionsList = !options ? List() : options.map((option: any) => {\n      const firstName = option.get('firstName') || '';\n      const lastName = option.get('lastName');\n      const organization = option.get('organization');\n      const address1 = option.get('address1');\n      const officeName = option.getIn(['office','officeName']);\n      const email = option.get('email');\n      const internalNo = option.get('internalNo');\n      const optionLabel = getContactDisplayText(option);\n\n      return {\n        label: optionLabel,\n        value: `${firstName}|${lastName}|${organization}|${address1}`,\n        name: optionLabel,\n        company: organization,\n        type: option.get('type'),\n        address: `${option.get('address1') || ''} ${option.get('address2') || ''}`,\n        id: option.get('id'),\n        permissions: option.get('permissions'),\n        phone: option.get('mobileNumber') || option.get('officeNumber'),\n        officeName,\n        email,\n        internalNo: internalNo ?? null\n      };\n    });\n\n    const optionsMap = Map().withMutations((mutableMap) => {\n      optionsList.forEach((option) => {\n        mutableMap.set(option.id, option);\n      });\n      contacts.forEach((option) => mutableMap.set(option.get('id'), option));\n    });\n\n    const contactsValue = immutableContacts\n      .map((contact) => optionsMap.get(contact.get('id')))\n      .filter((contact) => contact != null);\n\n    return (\n      <Grid container={true} className={classes.gridContainer} spacing={3}>\n        <Grid container={true} item={true} xs={12}>\n          <Typography variant='body1' noWrap={true}>{contactsLabel}</Typography>\n          {this.renderEntity(contactsValue)}\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private selectEntity = (selectedEntity: any) => {\n    const {\n      dispatch,\n      officeUser\n    } = this.props;\n    const id = selectedEntity.get('id');\n\n    if (officeUser) {\n      dispatch(new SelectTeamOrganizationUserAction({ userId: id }));\n      this.openDrawer(USER_DRAWER_ID);\n    } else {\n      dispatch(new SelectContactAction(id));\n      dispatch(new GetContactsSucceededAction({contacts: fromJS([selectedEntity.get('contact')])}));\n      this.openDrawer(CONTACT_DRAWER_ID);\n    }\n  }\n\n  private openDrawer = (drawerId) => {\n    const {\n      dispatch,\n      toggleDrawer\n    } = this.props;\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: drawerId,\n      content: 'DEFAULT'\n    }));\n\n    toggleDrawer(drawerId, true);\n  }\n\n  private renderEntity = (selectedEntity: any) => {\n    const { classes } = this.props;\n\n    const entities = selectedEntity && selectedEntity.map((cnt: any, index: number) => {\n      const entity = cnt.get('contact');\n      const displayText = getContactDisplayText(entity) || cnt.get('name');\n      return (\n        <Grid\n          item={true}\n          key={index}\n        >\n          <Link\n            className={classes.contactLink}\n            underline='none'\n            onClick={() => this.selectEntity(cnt)}\n          >\n            {displayText}\n          </Link>\n        </Grid>\n      );\n    });\n\n    return (\n      <Grid container={true} direction='row' spacing={3}>\n        {entities}\n      </Grid>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n    gridContainer: {\n      display: 'flex',\n      alignItems: 'flex-start',\n      flexWrap: 'nowrap',\n    },\n    contactLink: {\n      cursor: 'pointer',\n    },\n});\n\n\nconst mapStateToProps = (originalState: any) => createStructuredSelector({\n  selectedOffice: makeSelectOfficeBySelectedTeamOrganizationOfficeId(),\n  firmId: makeSelectUserFirmId(),\n})(originalState);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  const toggleDrawer = (drawerId: string, open?: boolean) => {\n    dispatch(new ToggleOverlayComponentAction({\n      id: drawerId,\n      open,\n    }));\n  };\n  return {\n    toggleDrawer,\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IQuoteContactsPreviewComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(QuoteContactsPreview);\n","import * as React from 'react';\nimport {\n  Link as MuiLink,\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { compose, Dispatch } from 'redux';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport QuoteContactsPreview from './QuoteContactsPreview';\nimport UserOfficeDisplay from '../UserOfficeDisplay';\nimport { getContactDisplayText } from '../../utils/getContactDisplayText';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces/index';\nimport Project from '../../models/Project';\nimport { List, Map } from 'immutable';\nimport { USER_DETAILS_PATH } from '../../constants';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectIsRestrictedOutsideSalesRep } from '../../modules/AtsModule/selectors';\nimport { withAtsApi } from '../../contexts';\nimport Api from 'ats-api/src';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { DRAWER_ID as CONTACT_DRAWER_ID } from '../../containers/MyContactsPage/constants';\nimport { SelectContactAction, GetContactsSucceededAction } from '../../modules/AccountModule/actions';\nimport { Contact } from '../../models';\nimport { Link } from 'react-router-dom';\n\nconst styles = (theme: Theme) => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n  },\n  cardTitle: {\n    marginBottom: '24px'\n  },\n  linkStyles: {\n    cursor: 'pointer',\n    color: theme.palette.primary.main,\n  }\n});\n\ninterface IQuoteInfoComponentProps {\n  data: any;\n  linkedProject?: IMap<Project>;\n  contactsList: any;\n  t?(...args: any[]): any;\n}\ninterface IQuoteInfoProps extends IQuoteInfoComponentProps {\n  atsApi: Api;\n  isRestrictedOutsideSalesRep: boolean;\n  openDrawer: (contact: IMap<Contact>) => void;\n}\n\nconst QuoteInfo: React.FC<IQuoteInfoProps & WithStyles<keyof ReturnType<typeof styles>>> =\n  ({\n     classes,\n     data,\n     contactsList,\n     isRestrictedOutsideSalesRep,\n     t,\n     openDrawer\n   }) => {\n\n    const selectedCustomer = data.get('selectedCustomer') ? data.get('customers') && data.get('customers').find((customer) => customer.get('id') === data.get('selectedCustomer')) : null;\n    const userId = data.getIn(['createdBy', 'user', 'id']);\n    const architect = data.getIn(['architectName', 0]);\n    const contractor = data.getIn(['contractorName', 0]);\n    const engineer = data.getIn(['engineerName', 0]);\n    const assignedTo = data.getIn(['assignedTo', 0, 'fullName']) || '';\n    const assignedToOfficeName = data.getIn(['assignedTo', 0, 'officeName'])\n      || data.getIn(['assignedTo', 0, 'office', 'officeName'])\n      || '';\n\n    return (\n      <Card className={classes.card}>\n        <CardContent>\n          <Typography variant='h6' className={classes.cardTitle}>{t('quoteInfo.title')}</Typography>\n          <Grid container={true} spacing={3}>\n            <Grid item={true} xs={12} container={true} spacing={3} alignContent={'flex-start'}>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.quoteNumberViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.get('quoteNumber')}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.internalQuoteNumberViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.get('internalNo')}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.createdDateLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.get('createdDate') ? utcToLocal(data.get('createdDate')) : ''}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.requiredDateViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.get('bidDate') ? utcToLocal(data.get('bidDate')) : ''}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.expirationDateViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.get('expiryDate') ? utcToLocal(data.get('expiryDate')) : ''}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.architectLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n               {\n                 architect &&\n                 <MuiLink\n                  color='primary'\n                  style={{ cursor: 'pointer' }}\n                  underline='none'\n                  onClick={() => openDrawer(architect)}\n                >\n                  {getContactDisplayText(architect) || <></>}\n                </MuiLink>\n               }\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.creatorLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {\n                  isRestrictedOutsideSalesRep\n                    ? data.getIn(['createdBy', 'user', 'name'])\n                    : (\n                        <Link\n                          className={classes.linkStyles}\n                          to={`${USER_DETAILS_PATH}/${userId}`}\n                        >\n                          {data.getIn(['createdBy', 'user', 'name'])}\n                        </Link>\n                      )\n                }\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.engineerLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {\n                  engineer &&\n                  <MuiLink\n                    color='primary'\n                    style={{ cursor: 'pointer' }}\n                    underline='none'\n                    onClick={() => openDrawer(engineer)}\n                  >\n                    {getContactDisplayText(engineer) || <></>}\n                  </MuiLink>\n                }\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.assignedToLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                <UserOfficeDisplay\n                  name={\n                    isRestrictedOutsideSalesRep\n                      ? assignedTo\n                      : <Link\n                          className={classes.linkStyles}\n                          to={`${USER_DETAILS_PATH}/${data.getIn(['assignedTo', 0, 'id'])}`}\n                        >\n                          {assignedTo}\n                        </Link>\n                  }\n                  officeName={assignedToOfficeName}\n                />\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.contractorLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {\n                  contractor &&\n                  <MuiLink\n                    color='primary'\n                    style={{ cursor: 'pointer' }}\n                    underline='none'\n                    onClick={() => openDrawer(contractor)}\n                  >\n                    {getContactDisplayText(contractor) || <></>}\n                  </MuiLink>\n                }\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.regionLabel')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                {data.getIn(['region', 'value'])}\n              </Grid>\n              <Grid item={true} xs={3}>\n                {t('quoteInfo.shippingAddressTitle')}:\n              </Grid>\n              <Grid item={true} xs={3}>\n                { data.get('shippingPreference') === 'shippingAddress' &&\n                  [\n                    data.getIn(['address', 'address1']),\n                    data.getIn(['address', 'address2']),\n                    data.getIn(['address', 'city', 'value']),\n                    data.getIn(['address', 'province', 'value']),\n                    data.getIn(['address', 'zipcode']),\n                    data.getIn(['address', 'country', 'value']),\n                  ].filter((addressSegment) => addressSegment).join(', ')\n                }\n                {\n                  data.get('shippingPreference') === 'projectAddress' &&\n                  (\n                    t('quoteInfo.projectAddress')\n                  )\n                }\n                {\n                  data.get('shippingPreference') === 'customerAddress' &&\n                  ( selectedCustomer\n                    ? [\n                        selectedCustomer.getIn(['address1'], null),\n                        selectedCustomer.getIn(['address2'], null),\n                        selectedCustomer.getIn(['cityName'], null),\n                        selectedCustomer.getIn(['provinceName'], null),\n                        selectedCustomer.getIn(['postalZip'], null),\n                        selectedCustomer.getIn(['countryName'], null),\n                      ].filter((addressSegment) => addressSegment).join(', ')\n                    : t('quoteInfo.noSelectedCustomer')\n                  )\n                }\n                {\n                  data.get('shippingPreference') === 'noShippingAddress' &&\n                  (\n                    t('quoteInfo.noShippingAddress')\n                  )\n                }\n              </Grid>\n              <Grid container={true} item={true} xs={12}>\n                <Grid item={true} xs={3}>\n                  {t('quoteInfo.quoteRepsViewLabel')}:\n                </Grid>\n                <Grid item={true} xs={9}>\n                  <QuoteContactsPreview\n                    name='collaborators'\n                    label={t('quoteInfo.quoteRepsLabel')}\n                    placeholder={t('quoteInfo.quoteRepsPlaceholder')}\n                    contacts={data.get('collaborators')}\n                    options={contactsList}\n                    officeUser={true}\n                    officeId={data.getIn(['createdBy', 'office', 'id'])}\n                  />\n                </Grid>\n              </Grid>\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  };\n\n  const mapStateToProps = createStructuredSelector({\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep(),\n  });\n\n  const mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n    return {\n      openDrawer: (contact: IMap<Contact>) => {\n        dispatch(new SelectContactAction(contact.get('id')));\n        dispatch(new GetContactsSucceededAction({contacts: List([contact])}));\n        dispatch(new ToggleOverlayComponentAction({\n          id: CONTACT_DRAWER_ID,\n          open: true\n        }));\n      },\n    };\n  };\n\nexport default compose<React.ComponentClass<IQuoteInfoComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withAtsApi(),\n)(QuoteInfo);\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport ProductSection from './ProductSection';\nimport QuoteGrandTotal from '../QuoteGrandTotal';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { Quote } from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport { useSelector } from 'react-redux';\nimport {\n  Map,\n  List\n} from 'immutable';\nimport { makeSelectChildOrParentHasSectionTemplateRemapAcl } from '../../modules/AtsModule/selectors';\n\nconst styles = (theme: Theme) => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n  },\n  cardTitle: {\n    marginBottom: '24px'\n  },\n  table: {\n    width: '100%'\n  },\n  headlineTitle: {\n    padding: 10,\n    margin: 10,\n  },\n  quote: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n    padding: '2px 20px 0 0'\n  },\n  qCharge: {\n    color: theme.palette.common.black\n  },\n  qGrandTotal: {\n    fontSize: theme.typography.h5.fontSize\n  },\n  qAmount: {\n    minWidth: '150px'\n  },\n  grandTotalWrapper: {\n    justifyContent: 'flex-end'\n  },\n});\n\ninterface IProductListComponentProps {\n  quote: IMap<Quote>;\n  t?(...args: any[]): any;\n}\n\ninterface IProductListProps extends IProductListComponentProps {\n}\n\ntype ProductListProps = IProductListProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst ProductList: React.SFC<ProductListProps> =\n  ({\n    classes,\n    quote,\n    t\n  }) => {\n    const selectedCustomerId = quote.get('selectedCustomer');\n    const hasSectionTemplateRemapAcl = useSelector(makeSelectChildOrParentHasSectionTemplateRemapAcl());\n    const [sectionsWithTemplateIssue, setSectionsWithTemplateIssue] = React.useState(Map());\n\n    const handleSetSectionsWithTemplateIssue = (index: number) => (sectionTitle: string) => {\n      setSectionsWithTemplateIssue(prevValue => prevValue.set(index, sectionTitle));\n    };\n\n    return (\n      <div>\n        {\n          hasSectionTemplateRemapAcl && (\n            <div style={{ marginLeft: 8, padding: 8, border: '2px red solid' }}>\n              <Typography color='textPrimary'>\n                {'Sections with product/section template mapping issue:'}\n              </Typography>\n              {sectionsWithTemplateIssue.entrySeq().map((entry, index: number) => (\n                <div key={`__section-${index}`}>\n                  <Typography color='textPrimary' style={{ marginLeft: 16 }}>\n                    {`section index: ${entry[0]}`}\n                  </Typography>\n                  <Typography color='textPrimary' style={{ marginLeft: 24 }}>\n                    {`section title: ${entry[1]}`}\n                  </Typography>\n                </div>\n              ))}\n            </div>\n          )\n        }\n        <Typography\n          className={classes.headlineTitle}\n          variant='h5'\n        >\n          {t('productList.title')}\n        </Typography>\n        <Grid\n          container={true}\n          spacing={3}\n        >\n          {quote && quote.get('sections')\n            ? quote.get('sections').map((section: any, index: number) => {\n              const shouldShowSection = Boolean(section.get('note') || section.get('products').some(product => product.get('id') !== -1));\n\n              return shouldShowSection && (\n                <Grid item={true} xs={12} key={`__section-${index}`}>\n                  <ProductSection\n                    isAi={quote.get('isAi')}\n                    section={section}\n                    selectedCustomerId={selectedCustomerId}\n                    linkedProjectId={quote.get('projectId')}\n                    handleAddSectionWithTemplateIssue={hasSectionTemplateRemapAcl ? handleSetSectionsWithTemplateIssue(index) : null}\n                  />\n                </Grid>\n              );\n            })\n            : ''\n          }\n          <Grid\n            container={true}\n            item={true}\n            xs={12}\n            className={classes.grandTotalWrapper}\n          >\n            {quote && quote.get('grandTotals')\n              ? quote.get('grandTotals').valueSeq().map((calc: any, index: number) => (\n                <QuoteGrandTotal\n                  key={`__grandTotal-${index}`}\n                  grandTotal={calc}\n                  discountList={quote.get('discountList')}\n                />\n              ))\n              : ''\n            }\n          </Grid>\n        </Grid>\n      </div>\n    );\n  };\n\nexport default compose<React.ComponentClass<IProductListComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(ProductList);\n","import React from 'react';\nimport classnames from 'classnames';\nimport {\n  Grid,\n  Theme,\n  IconButton,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport {compose} from 'redux';\nimport { withForwardedRef, catchForwardedRef } from '../../hoc';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport LockRoundedIcon from '@material-ui/icons/LockRounded';\nimport LockOpenRoundedIcon from '@material-ui/icons/LockOpenRounded';\nimport DeleteModalDialog from '../DeleteModalDialog';\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {},\n  displayNone: {\n    display: 'none'\n  }\n});\n\ninterface IRevisionItemContentProps {\n  rev: any;\n  menuOpen: boolean;\n  hideActions?: boolean;\n\n  onMouseEnter?: () => void;\n  onMouseLeave?: () => void;\n\n  handleEditRevision(event: React.MouseEvent<HTMLElement>): void;\n  handleDeleteRevision(revisionId: number): void;\n  handleCopyRevision(revisionId: number): void;\n}\n\n\ntype RevisionItemContentProps = IRevisionItemContentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nexport class RevisionItemContentClass extends React.Component<RevisionItemContentProps> {\n  public state = {\n    hover: false,\n    deleteModalOpen: false\n  };\n\n  public toggleDeleteModal = () => {\n    this.setState({ deleteModalOpen: !this.state.deleteModalOpen });\n  }\n\n  public render() {\n    const {\n      rev,\n      classes,\n      hideActions,\n      handleEditRevision,\n    } = this.props;\n\n    const nextQuoteId = rev.get('nextQuoteId');\n\n    const lockedQuoteIcon = (\n      <React.Fragment>\n        <IconButton\n          size='small'\n          onClick={(e) => this.onCopyButtonClick(e, rev.get('id'))}\n        >\n          <FileCopyIcon fontSize='small'/>\n        </IconButton>\n      </React.Fragment>\n    );\n\n    const unlockedQuoteIcons = (\n      <React.Fragment>\n        <IconButton\n          size='small'\n          onClick={handleEditRevision}\n        >\n          <EditRoundedIcon fontSize='small'/>\n        </IconButton>\n        <IconButton\n          size='small'\n          onClick={(e) => {\n            e.stopPropagation();\n            this.toggleDeleteModal();\n          }}\n        >\n          <DeleteIcon fontSize='small'/>\n        </IconButton>\n      </React.Fragment>\n    );\n    return (\n      <Grid\n        container={true}\n        direction='row'\n        alignItems='center'\n      >\n        <Grid\n          item={true}\n          xs={2}\n        >\n          <Typography>\n            {\n              nextQuoteId\n              ? <LockRoundedIcon\n                  fontSize='small'\n                  className={classnames(!this.state.hover && classes.displayNone)}\n                />\n              : <LockOpenRoundedIcon\n                  fontSize='small'\n                  className={classnames(!this.state.hover && classes.displayNone)}\n                />\n            }\n          </Typography>\n        </Grid>\n        <Grid\n          item={true}\n          xs={10}\n        >\n          <Grid\n            container={true}\n            direction={'row'}\n            justify='space-between'\n            alignItems='center'\n          >\n            <Grid\n              item={true}\n            >\n              {`${rev.get('quoteNumber')}`}\n            </Grid>\n            <Grid\n              item={true}\n              className={classnames(!this.state.hover && classes.displayNone)}\n            >\n              {\n                hideActions\n                  ? null\n                  : nextQuoteId\n                    ? lockedQuoteIcon\n                    : unlockedQuoteIcons\n              }\n            </Grid>\n          </Grid>\n        </Grid>\n        <DeleteModalDialog\n          open={this.state.deleteModalOpen}\n          toggleDeleteModal={this.toggleDeleteModal}\n          handleDelete={() => {\n            this.onDeleteButtonClick(rev.get('id'));\n            this.toggleDeleteModal();\n          }}\n          itemName={rev.get('quoteNumber')}\n        />\n      </Grid>\n    );\n  }\n  public onMouseEnter = () => {\n    if (this.props.menuOpen) { this.setState({hover: true}); }\n  }\n  public onMouseLeave = () => {\n    if (this.props.menuOpen) { this.setState({hover: false}); }\n  }\n  private onDeleteButtonClick = (id: number) => {\n    this.props.handleDeleteRevision(id);\n  }\n  private onCopyButtonClick = (e: React.MouseEvent<HTMLElement>, id: number) => {\n    e.stopPropagation();\n    this.props.handleCopyRevision(id);\n  }\n}\n\nexport default compose<React.ComponentClass<IRevisionItemContentProps>>(\n  withForwardedRef(),\n  withStyles(styles),\n  catchForwardedRef(),\n)(RevisionItemContentClass);\n","import * as React from 'react';\nimport {\n  Card,\n  CardContent,\n  Grid,\n  Theme,\n  Typography,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap/index';\nimport Project from '../../models/Project';\nimport { PROJECT_LIST_DETAIL_PATH } from '../../constants';\nimport HackBuildingClassListItem from '../../models/HackBuildingClassListItem';\nimport { List } from 'immutable';\nimport { Link } from 'react-router-dom';\n\nconst styles = (theme: Theme) => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n  },\n  cardTitle: {\n    marginBottom: '24px'\n  },\n  projectLink: {\n    color: theme.palette.primary.main,\n    cursor: 'pointer',\n  }\n});\n\ninterface IProjectInfoProps {\n  data: any;\n  linkedProject: IMap<Project>;\n  contactsList: List<any>;\n  t?(...args: any[]): any;\n}\n\nconst ProjectInfo: React.FC<IProjectInfoProps & WithStyles<keyof ReturnType<typeof styles>>> =\n  ({\n     classes,\n     t,\n     linkedProject,\n   }) => {\n    const buildingClasses = linkedProject && linkedProject.getIn(['building', 'buildingClasses']) || List<IMap<HackBuildingClassListItem>>();\n    const projectId = linkedProject && linkedProject.get('id');\n    return (\n      <Card className={classes.card}>\n        <CardContent>\n          <Typography variant='h6'\n                      className={classes.cardTitle}>{t('projectInfo.title')}</Typography>\n          <Grid container={true} spacing={3}>\n            {/*Left column*/}\n            <Grid item={true} xs={6}\n                  container={true} spacing={3} alignContent={'flex-start'}>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.projectTitleLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                <Link\n                  className={classes.projectLink}\n                  to={`${PROJECT_LIST_DETAIL_PATH}/${projectId}`}\n                >\n                  {linkedProject.get('name')}\n                </Link>\n              </Grid>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.countryViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                {linkedProject.getIn(['location', 'country', 'value'])}\n              </Grid>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.cityViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                {linkedProject.getIn(['location', 'city', 'value'])}\n              </Grid>\n            </Grid>\n            {/*Right column*/}\n            <Grid item={true} xs={6}\n                  container={true} spacing={3} alignContent={'flex-start'}>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.buildingClassViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                {\n                  buildingClasses.map((buildingClass, index) => {\n                    const buildingTypes = buildingClass.get('buildingTypes');\n                    return (\n                      <div key={`__${index}`}>\n                        {\n                          `${buildingClass.get('value')}${\n                            buildingTypes.size\n                              ? ` (${buildingTypes.map((buildingType) => buildingType.get('value')).join(', ')})`\n                              : ''\n                          }`\n                        }\n                      </div>\n                    );\n                  })\n                }\n              </Grid>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.provinceViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                {linkedProject.getIn(['location', 'province', 'value'])}\n              </Grid>\n              <Grid item={true} xs={4}>\n                {t('projectInfo.addressViewLabel')}:\n              </Grid>\n              <Grid item={true} xs={8}>\n                {linkedProject.getIn(['address'])}\n                {/*{*/}\n                  {/*[*/}\n                    {/*linkedProject.getIn(['location', 'address1']),*/}\n                    {/*linkedProject.getIn(['location', 'address2']),*/}\n                  {/*].filter((addressSegment) => addressSegment != null).join(', ')*/}\n                {/*}*/}\n              </Grid>\n            </Grid>\n          </Grid>\n        </CardContent>\n      </Card>\n    );\n  };\n\nexport default compose<React.ComponentClass<IProjectInfoProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(ProjectInfo);\n","import * as React from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogContentText,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCheckOpportunityExists, makeSelectCheckOpportunityExistsFetching } from '../../../modules/ProjectModule/selectors';\n\ninterface IOpportunityValuesAndStatusDialogComponentProps {\n  open: boolean;\n  onClose: () => void;\n  onConfirm: () => void;\n  updateQuoteStatusToQuoted: () => void;\n}\n\ninterface IOpportunityValuesAndStatusDialogProps extends IOpportunityValuesAndStatusDialogComponentProps {\n  opportunityExists: boolean;\n  opportunityExistsFetching: boolean;\n}\n\ntype OpportunityValuesAndStatusDialogProps = IOpportunityValuesAndStatusDialogProps & WithTranslation;\n\nconst OpportunityValuesAndStatusDialog: React.FC<OpportunityValuesAndStatusDialogProps> = (props) => {\n  const {\n    open,\n    opportunityExists,\n    opportunityExistsFetching,\n    onClose,\n    onConfirm,\n    updateQuoteStatusToQuoted,\n    t,\n  } = props;\n\n  const usePrevious = <T extends unknown>(value: T): T | undefined => {\n    const ref = React.useRef<T>();\n    React.useEffect(() => {\n      ref.current = value;\n    });\n    return ref.current;\n  };\n\n  const prevOpportunityExistsFetching = usePrevious(opportunityExistsFetching);\n\n  React.useEffect(() => {\n    if (!opportunityExistsFetching && prevOpportunityExistsFetching && !opportunityExists) {\n      updateQuoteStatusToQuoted();\n      onClose();\n    }\n  }, [opportunityExistsFetching]);\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      aria-labelledby={t('quoteStausAndOpportunityConfirmation.ariaLabelledby')}\n      aria-describedby={t('quoteStausAndOpportunityConfirmation.ariaDescribedby')}\n    >\n      {\n        !opportunityExistsFetching && opportunityExists\n          ? <>\n              <DialogContent style={{ width: 319 }}>\n                <DialogContentText id='description' variant='body2'>\n                  {t('quoteStausAndOpportunityConfirmation.confirmationDialogDescription')}\n                </DialogContentText>\n                <DialogContentText id='confirmation' variant='body2'>\n                {t('quoteStausAndOpportunityConfirmation.continueQuery')}\n                </DialogContentText>\n              </DialogContent>\n              <DialogActions>\n                <Button onClick={onClose} color='primary'>\n                {t('formButtons.cancel')}\n                </Button>\n                <Button onClick={onConfirm} color='primary' autoFocus={true}>\n                  {t('formButtons.yes')}\n                </Button>\n              </DialogActions>\n            </>\n          : <DialogContent><CircularProgress /></DialogContent>\n      }\n    </Dialog>\n  );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  opportunityExists: makeSelectCheckOpportunityExists(),\n  opportunityExistsFetching: makeSelectCheckOpportunityExistsFetching(),\n})(state);\n\nexport default compose<React.ComponentClass<IOpportunityValuesAndStatusDialogComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, null)\n)(OpportunityValuesAndStatusDialog);\n","import * as React from 'react';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport {\n  List,\n  Map\n} from 'immutable';\nimport {\n  withTranslation, WithTranslation,\n} from 'react-i18next';\nimport {\n  Grid,\n  Theme,\n  TextField,\n  Card,\n  CardContent,\n  Typography,\n  WithStyles,\n  withStyles,\n  RootRef,\n  LinearProgress,\n  Paper,\n  CircularProgress,\n  DialogContentText,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { styled } from '@material-ui/styles';\nimport {\n  IMap, IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  IMatch,\n} from 'ats-utils/src/Interfaces';\nimport {\n  GetRevisionsAction,\n  DeleteRevisionAction,\n  CopyRevisionAction,\n  GetQuotePhasesAction,\n  UpdateQuotePhaseAction,\n  CreateRevisionAction,\n} from '../../modules/QuoteModule/actions';\nimport QuoteInfo from './QuoteInfo';\nimport ProductList from './ProductList';\nimport StatusChip from '../StatusChip';\nimport RevisionItemContent, { RevisionItemContentClass } from './RevisionItemContent';\nimport MenuItemOverride from '../MenuItemOverride';\nimport {\n  makeSelectQuotePhases,\n  makeSelectRevisions,\n  makeSelectQuotesLoading,\n  makeSelectRevisionState,\n} from '../../modules/QuoteModule/selectors';\nimport Project from '../../models/Project';\nimport { ListItem } from '../../models';\nimport ProjectInfo from './ProjectInfo';\nimport { makeSelectEnv, makeSelectIsRestrictedOutsideSalesRep, makeSelectToken, makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport { withAtsApi } from '../../contexts/AtsApiContext';\nimport Api from 'ats-api/src';\nimport { makeSelectContactsList } from '../../modules/ContactModule/selectors';\nimport { makeSelectUsersPerOfficeWithUsers } from '../../modules/AccountModule/selectors';\nimport { NotFound, WidgetLoaderStyle } from '../../components';\nimport { ReactComponent as LoadingFile } from '../../images/expansion/loadingFile.svg';\nimport { SearchUsersByOfficeIdAction } from '../../modules/AccountModule/actions';\nimport AddIcon from '@material-ui/icons/Add';\n// import WidgetHeaderStyle from '../WidgetHeaderStyle';\n// import UnderConstruction from '../UnderConstruction';\nimport { makeSelectScrollNode } from '../../modules/ApplicationModule/selectors';\nimport DialogComponent from '../DialogComponent';\nimport { IRevisionState } from '../../modules/QuoteModule/reducer';\nimport ScrollTop from '../ScrollTop';\nimport OpportunityValuesAndStatusDialog from '../../containers/QuoteListPage/QuoteList/OpportunityValuesAndStatusDialog';\nimport { CheckOpportunityExistsAction, UpdateQuoteStatusAndOpportunityValueAction } from '../../modules/ProjectModule/actions';\nimport QuoteDiscountsTabs from '../QuoteDiscountsTabs';\nimport { isQuotePhasesDisabledForOSR, getAppliableQuotePhases } from '../../containers/QuoteListPage/QuoteList/utils';\n\nexport const PlaceholderContent = styled('div')(({ theme }: ITheme) => {\n  return {\n    padding: theme.spacing() * 2,\n    height: '100%',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n  };\n});\n\ninterface ITheme {\n  theme: Theme;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    flexGrow: 1,\n  },\n  gridContainer: {\n    flexWrap: 'nowrap',\n  },\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 16,\n    margin: 10,\n  },\n  halfCard: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    // width 100% for now, when attachment, event & task feature ready\n    // can commment back in\n    // width: '50%',\n    width: '100%',\n    '& pre': {\n      whiteSpace: 'pre-wrap',\n    }\n  },\n  headlineTitle: {\n    padding: '28px 10px 10px 10px',\n    margin: 10,\n  },\n  halfCardsContainer: {\n    display: 'inline-flex',\n    width: '100%',\n  },\n  cardTitle: {\n    marginBottom: '24px',\n  },\n  historyWrapper: {\n    margin: '10px 10px 10px 4px',\n  },\n  chipContainer: {\n    paddingTop: '42px',\n    flex: 1\n  },\n  revisionContainer: {\n    padding: '22px 16px',\n    minWidth: '100px'\n  },\n  revisionMenu: {\n    width: '200px'\n  },\n  textField: {\n    width: '180px'\n  },\n  icon: {\n    width: '10px'\n  },\n  displayNone: {\n    display: 'none'\n  },\n  createNewRevision: {\n    // marginRight: '16px',\n  },\n  openSans: {\n    fontFamily: 'Open Sans'\n  },\n  widgetStylePaper: {\n    flex: '1 0 0',\n    width: '100%',\n    padding: theme.spacing(2)\n  },\n});\n\ninterface IQuoteDetailsComponentProps {\n  allRefs: any;\n  quote: IMap<any>;\n  quoteId?: string;\n  officeId?: number;\n  contactsList?: List<any>;\n  linkedProject?: IMap<Project>;\n  officeUsers?: List<any>;\n  match: IMatch;\n  getQuotePhases?: () => void;\n  handleEditRevision: (event: React.MouseEvent<HTMLElement>, id: number) => void;\n  handleSelectRevision(quoteId: string): void;\n}\n\ninterface IQuoteDetailsProps extends IQuoteDetailsComponentProps {\n  quotePhases?: List<IMap<ListItem>>;\n  quoteLoading?: boolean;\n  revisions: any;\n  atsApi: Api;\n  revisionState: IMap<IRevisionState>;\n  dispatch: React.Dispatch<IAction>;\n  scrollNode: React.RefObject<any>;\n  isRestrictedOutsideSalesRep: boolean;\n  checkOpportunityExists: (projectId: number, quoteId: number) => void;\n  updateQuoteStatusAndOpportunityValue: (projectId: number, quoteId: number, quotePhase: string) => void;\n  createRevision(quoteId: number): void;\n  getRevisions(quoteId: number): void;\n  deleteRevision(quoteId: number): void;\n  copyRevision(quoteId: number): void;\n  updateQuotePhase(quoteId: number, quotePhase: string): void;\n  searchUsersByOfficeId(officeId: number): void;\n  // selectRevision(quoteId: string): void;\n}\n\ntype QuoteDetailsProps =\n  IQuoteDetailsProps\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass QuoteDetails extends React.Component<QuoteDetailsProps, any> {\n  public state = {\n    menuIndex: 0,\n    validity: '',\n    anchorEl: null,\n    revision: '',\n    menuOpen: false,\n    statusChangeConfirmationOpen: false,\n    appliableQuotePhases: List(),\n  };\n\n  constructor(props: any) {\n    super(props);\n  }\n\n  public componentDidMount() {\n    const { quotePhases, isRestrictedOutsideSalesRep } = this.props;\n    this.setState({\n      appliableQuotePhases: getAppliableQuotePhases({ isRestrictedOutsideSalesRep, quotePhases })\n    });\n\n    this.props.getRevisions(+this.props.match.params.id);\n    this.props.getQuotePhases();\n    if (!this.props.officeUsers.size && this.props.searchUsersByOfficeId) {\n      this.props.searchUsersByOfficeId(this.props.officeId);\n    }\n    if (this.props.scrollNode && this.props.scrollNode.current) { this.props.scrollNode.current.scrollTop = 0; }\n  }\n\n  public componentDidUpdate(prevProps) {\n    const { quotePhases, isRestrictedOutsideSalesRep } = this.props;\n    if (!prevProps.quotePhases?.size && this.props.quotePhases?.size) {\n      this.setState({\n        appliableQuotePhases: getAppliableQuotePhases({ isRestrictedOutsideSalesRep, quotePhases })\n      });\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      quote,\n      quoteId,\n      linkedProject,\n      t,\n      revisions,\n      quotePhases,\n      quoteLoading,\n      contactsList,\n      officeUsers,\n      allRefs,\n      revisionState,\n      isRestrictedOutsideSalesRep,\n      updateQuotePhase,\n    } = this.props;\n\n    const {\n      anchorEl,\n      revision,\n      menuOpen,\n      statusChangeConfirmationOpen,\n      appliableQuotePhases,\n    } = this.state;\n\n    const linkedProjectId = quote.get('projectId');\n    const quoteIsLocked = quote.get('locked');\n    const quotePhase = quote.get('quotePhase');\n    const disableStatusForOSR = isQuotePhasesDisabledForOSR({ isRestrictedOutsideSalesRep, quoteIsLocked, quotePhase });\n    const disabledTooltip = (!quoteIsLocked && disableStatusForOSR) ? t('quoteStatusChip.disabledTooltipForOSR') : null;\n\n    const createRevisionItem = (\n      <MenuItemOverride\n        value='create'\n        onClickOverride={(e, onClick) => this.handleCreateRevision(e, onClick)}\n      >\n        <Grid\n          container={true}\n          direction='row'\n          justify='space-between'\n          alignItems='center'\n          wrap='nowrap'\n        >\n          <Grid item={true} xs={2} />\n          <Grid\n            item={true}\n            xs={10}\n            alignItems='center'\n            container={true}\n          >\n            <Typography color='primary' variant='button' className={classes.createNewRevision}>\n              {t('quoteDetail.createNewRevision')}\n            </Typography>\n            <AddIcon fontSize='small' color='primary' />\n          </Grid>\n        </Grid>\n      </MenuItemOverride>\n    );\n\n    return (\n      <div className={classes.container}>\n        <Grid container={true} className={classes.header}>\n          <Grid item={true} className={classes.flex}>\n            <Typography className={classes.headlineTitle} variant='h5'>{quote.get('name')}</Typography>\n          </Grid>\n          <Grid item={true} className={classes.chipContainer}>\n            <div style={{ maxWidth: 'fit-content' }}>\n              <StatusChip\n                status={quote.get('quotePhase')}\n                options={appliableQuotePhases}\n                anchorEl={anchorEl}\n                handleOpen={this.handleMenuOpen}\n                handleClose={this.handleMenuClose}\n                changeStatus={this.changeStatus}\n                disabled={quoteIsLocked || disableStatusForOSR}\n                disabledTooltip={disabledTooltip}\n                canDisplayLockIcon={quoteIsLocked}\n              />\n            </div>\n          </Grid>\n          <Grid item={true} className={classes.revisionContainer}>\n            <TextField\n              placeholder={`[${t('quoteDetail.revisionPlaceholder')}]`}\n              label={t('quoteDetail.revisionLabel')}\n              name='revision'\n              select={true}\n              onChange={this.changeRevision}\n              value={(revision === '' && revisions) ? quote.get('quoteNumber') : revision}\n              className={classes.textField}\n              SelectProps={{\n                MenuProps: {\n                  onEntered: this.onEnteredHandler,\n                  onExited: this.onExitedHandler,\n                  className: classes.revisionMenu,\n                  PaperProps: {\n                    style: {\n                      minWidth: 320,\n                    }\n                  }\n                }\n              }}\n            >\n              {revisions && revisions.reverse().map((rev: any) => {\n                const revisionRef = React.createRef<RevisionItemContentClass>();\n                return <MenuItemOverride\n                  key={rev.get('id')}\n                  value={rev.get('quoteNumber')}\n                  onClickOverride={(e, onClick) => this.handleSelectRevision(e, onClick)}\n                  onMouseEnter={() => {\n                    if (revisionRef.current != null) {\n                      revisionRef.current.onMouseEnter();\n                    }\n                  }}\n                  onMouseLeave={() => {\n                    if (revisionRef.current != null) {\n                      revisionRef.current.onMouseLeave();\n                    }\n                  }}\n                >\n                  <RevisionItemContent\n                    ref={revisionRef}\n                    rev={rev}\n                    menuOpen={menuOpen}\n                    hideActions={isRestrictedOutsideSalesRep}\n                    handleEditRevision={(e) => this.handleEditRevision(e, rev.get('id'))}\n                    handleDeleteRevision={this.handleDeleteRevision}\n                    handleCopyRevision={this.handleCopyRevision}\n                  />\n                </MenuItemOverride>;\n              }).valueSeq().toArray()\n              }\n              {!isRestrictedOutsideSalesRep && createRevisionItem}\n            </TextField>\n          </Grid>\n        </Grid>\n        {quoteLoading ?\n          <NotFound\n            firstRow={<LinearProgress color='secondary' />}\n            secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n            paperContainer={true}\n            svgIcon={<LoadingFile />}\n          />\n          :\n          <>\n            <Grid container={true} spacing={1} wrap='nowrap'>\n              <Grid item={true} container={true} xs={12}>\n                <Grid item={true} xs={12}>\n                  <RootRef rootRef={allRefs.quoteInfo}>\n                    <QuoteInfo\n                      data={quote}\n                      linkedProject={linkedProjectId ? linkedProject : null}\n                      contactsList={officeUsers}\n                    // ref={el => el && this.sectionRefs.push(el)}\n                    />\n                  </RootRef>\n                </Grid>\n                {\n                  Boolean(linkedProjectId && linkedProject) &&\n                  <Grid item={true} xs={12}>\n                    <RootRef rootRef={allRefs.projectInfo}>\n                      <ProjectInfo\n                        data={quote}\n                        linkedProject={linkedProject}\n                        contactsList={officeUsers}\n                      />\n                    </RootRef>\n                  </Grid>\n                }\n              </Grid>\n              {/* <Grid item={true} xs={3} container={true} direction='column' wrap='nowrap' className={classes.historyWrapper}>\n                <Paper\n                  classes={{\n                    root: classes.widgetStylePaper\n                  }}\n                >\n                  <WidgetLoaderStyle\n                    header={\n                      <Grid container={true}>\n                        <WidgetHeaderStyle>\n                          {t('quoteDetail.quoteHistoryWidgetTitle')}\n                        </WidgetHeaderStyle>\n                      </Grid>\n                    }\n                  >\n                    <PlaceholderContent>\n                      <UnderConstruction />\n                    </PlaceholderContent>\n                  </WidgetLoaderStyle>\n                </Paper>\n              </Grid> */}\n            </Grid>\n            <Grid container={true} spacing={1}>\n              <Grid item={true} xs={12}>\n                <RootRef rootRef={allRefs.discounts}>\n                  <QuoteDiscountsTabs\n                    preview={true}\n                    selectedCustomers={quote.get('customers') || List()}\n                    selectedManufacturerDiscounts={quote.getIn(['discounts', 'manufacturerDiscounts']) || List()}\n                  />\n                </RootRef>\n              </Grid>\n            </Grid>\n            <Grid container={true} spacing={1}>\n              <Grid item={true} xs={12}>\n                <RootRef rootRef={allRefs.internalNotes}>\n                  <Card className={classes.halfCard}>\n                    <CardContent>\n                      <Typography className={classes.openSans} variant='h6'>\n                        {t('internalNotes.title')}\n                      </Typography>\n                      <pre className={classes.openSans}>{(quote.get('internalNote') || '').trim() || 'N/A'}</pre>\n                    </CardContent>\n                  </Card>\n                </RootRef>\n              </Grid>\n            </Grid>\n            <Grid container={true} spacing={1}>\n              <Grid item={true} xs={12}>\n                <RootRef rootRef={allRefs.productList}>\n                  <ProductList\n                    quote={quote}\n                  />\n                </RootRef>\n              </Grid>\n            </Grid>\n            <Grid container={true} spacing={1}>\n              <Grid item={true} xs={12}>\n                <Typography className={classes.headlineTitle} variant='h5'>{t('otherInfo.title')}</Typography>\n                <div className={classes.halfCardsContainer}>\n                  <Card className={classes.halfCard} {...{ ref: allRefs.terms }}>\n                    <CardContent>\n                      <Typography className={classes.openSans} variant='h6'>{t('otherInfo.termsAndComments')}</Typography>\n                      <p className={classes.openSans}>{t('otherInfo.termsAndConditions')}:</p>\n                      <pre className={classes.openSans}>{quote.getIn(['termsAndCondition', 'specialTerms'])}</pre>\n                      <p className={classes.openSans}>{t('otherInfo.comments')}:</p>\n                      <pre className={classes.openSans}>{quote.getIn(['termsAndCondition', 'comments'])}</pre>\n                    </CardContent>\n                  </Card>\n                </div>\n              </Grid>\n            </Grid>\n          </>\n        }\n        <DialogComponent\n          open={revisionState.get('isLoading')}\n          header=''\n          children={\n            <Grid\n              container={true}\n              direction='column'\n              justify='center'\n              alignItems='center'\n            >\n              <CircularProgress />\n              <DialogContentText id='alert-dialog-description' variant='h6'>\n                {revisionState.get('message')}\n              </DialogContentText>\n            </Grid>\n          }\n        />\n\n        <OpportunityValuesAndStatusDialog\n          open={statusChangeConfirmationOpen}\n          onClose={() => this.toggleStatusConfirmationOpen(false)}\n          onConfirm={this.confirmStatusAndOpportunityValuesUpdate}\n          updateQuoteStatusToQuoted={() => updateQuotePhase(quote.get('id'), 'Quoted')}\n        />\n        <ScrollTop />\n      </div>\n    );\n  }\n\n  private toggleStatusConfirmationOpen = (open?: boolean) => {\n    this.setState({\n      statusChangeConfirmationOpen: open !== undefined ? open : !this.state.statusChangeConfirmationOpen\n    });\n  }\n\n  private confirmStatusAndOpportunityValuesUpdate = () => {\n    const {\n      quote,\n      updateQuoteStatusAndOpportunityValue\n    } = this.props;\n\n    updateQuoteStatusAndOpportunityValue(quote.get('projectId'), quote.get('id'), 'Quoted');\n    this.toggleStatusConfirmationOpen(false);\n  }\n\n  private handleMenuOpen = (event: any) => {\n    this.setState({ anchorEl: event.currentTarget });\n  }\n\n  private changeStatus = (newStatus: IMap<ListItem>) => {\n    const projectId = this.props.quote.get('projectId');\n    const quoteId = this.props.quote.get('id');\n\n    // if changing status to 'Quoted' (id: 7) and there's a linked project then open confirmation dialog\n    if (newStatus.get('id') === 7 && projectId) {\n      this.props.checkOpportunityExists(projectId, quoteId); // check if opportunity value exist or not, if not just do regular quote status update\n      this.setState({\n        statusChangeConfirmationOpen: true,\n      });\n    } else {\n      this.props.updateQuotePhase(quoteId, newStatus.get('value'));\n    }\n    this.setState({ anchorEl: null });\n  }\n\n  private handleMenuClose = () => {\n    this.setState({ anchorEl: null });\n  }\n\n  private changeRevision = (event: any) => {\n    if (event.target.value !== 'create') {\n      this.setState({ revision: event.target.value });\n    }\n  }\n\n  private handleEditRevision = (e, id: number) => {\n\n    e.stopPropagation();\n    this.props.handleEditRevision(e, id);\n  }\n  private handleDeleteRevision = (revisionId: number) => {\n    const currentQuoteId = +this.props.match.params.id;\n    if (revisionId === currentQuoteId) {\n      this.setState({\n        revision: ''\n      });\n    }\n    this.props.deleteRevision(revisionId);\n  }\n  private handleCopyRevision = (revisionId: number) => {\n    this.props.copyRevision(revisionId);\n  }\n  private handleCreateRevision = (e, onClick) => {\n    onClick(e);\n    this.props.createRevision(this.props.revisions.last().get('id'));\n  }\n  private handleSelectRevision = (e, onClick) => {\n    onClick(e);\n    const quote = this.props.revisions.find(rev => {\n      return rev.get('quoteNumber') === e.target.value;\n    });\n\n    const quoteId: string = quote ? quote.get('id').toString() : '';\n\n    this.props.handleSelectRevision(quoteId);\n  }\n  private onEnteredHandler = () => {\n    this.setState({ menuOpen: true });\n  }\n  private onExitedHandler = () => {\n    this.setState({ menuOpen: false });\n  }\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n    createRevision: (quoteId: number) => {\n      dispatch(new CreateRevisionAction(quoteId));\n    },\n    getRevisions: (quoteId: number) => {\n      dispatch(new GetRevisionsAction({ quoteId }));\n    },\n    deleteRevision: (quoteId: number) => {\n      dispatch(new DeleteRevisionAction({ quoteId }));\n    },\n    copyRevision: (quoteId: number) => {\n      dispatch(new CopyRevisionAction({ quoteId }));\n    },\n    getQuotePhases: () => {\n      dispatch(new GetQuotePhasesAction());\n    },\n    updateQuotePhase: (quoteId: number, quotePhase: string) => {\n      dispatch(new UpdateQuotePhaseAction({ quoteId, quotePhase }));\n    },\n    searchUsersByOfficeId: (officeId: number) => {\n      dispatch(new SearchUsersByOfficeIdAction({ officeId, status: 'active' }));\n    },\n    checkOpportunityExists: (projectId: number, quoteId: number) => {\n      dispatch(new CheckOpportunityExistsAction({ projectId, quoteId }));\n    },\n    updateQuoteStatusAndOpportunityValue: (projectId: number, quoteId: number, quotePhase: string) => {\n      dispatch(new UpdateQuoteStatusAndOpportunityValueAction({ projectId, quoteId, quotePhase }));\n    },\n  };\n};\n\nconst mapStateToProps = (state: any, ownProps: any) => {\n  const error = state.getIn(['quote', 'error']);\n  const parentQuoteId: number = ownProps.quote.get('parentQuoteId');\n  return {\n    revisions: makeSelectRevisions(parentQuoteId)(state),\n    quotePhases: makeSelectQuotePhases()(state),\n    quoteLoading: makeSelectQuotesLoading()(state),\n    env: makeSelectEnv()(state),\n    token: makeSelectToken()(state),\n    contactsList: makeSelectContactsList()(state),\n    officeId: makeSelectUserOfficeId()(state),\n    officeUsers: makeSelectUsersPerOfficeWithUsers({ officeId: ownProps.officeId })(state),\n    error,\n    scrollNode: makeSelectScrollNode()(state),\n    revisionState: makeSelectRevisionState()(state),\n    isRestrictedOutsideSalesRep: makeSelectIsRestrictedOutsideSalesRep()(state),\n  };\n};\n\nexport default compose<React.ComponentClass<IQuoteDetailsComponentProps>>(\n  withAtsApi(),\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(QuoteDetails);\n\n\n","import QuoteDetails from './QuoteDetails';\n\nexport default QuoteDetails;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: 8\n  },\n\n  /* Styles applied to the root element if `disableSpacing={false}`. */\n  spacing: {\n    '& > :not(:first-child)': {\n      marginLeft: 8\n    }\n  }\n};\nvar CardActions = React.forwardRef(function CardActions(props, ref) {\n  var _props$disableSpacing = props.disableSpacing,\n      disableSpacing = _props$disableSpacing === void 0 ? false : _props$disableSpacing,\n      classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"disableSpacing\", \"classes\", \"className\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, !disableSpacing && classes.spacing),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardActions.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the actions do not have additional margin.\n   */\n  disableSpacing: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCardActions'\n})(CardActions);","export default __webpack_public_path__ + \"static/media/lochinvarSubmittalSample.7c726c2d.png\";","import { Grid } from '@material-ui/core';\nimport * as React from 'react';\nimport { Image } from '../../..';\n\nconst CardImage: React.FC<{imageId: string}> = ({ imageId }) => (\n  <Grid item={true} xs={5} container={true} justify='center'>\n    <Image\n      src={imageId}\n      width={'110px'}\n      aspectRatio={'100%'}\n      fromService={true}\n    />\n  </Grid>\n);\n\nexport default CardImage;","import { Grid, Theme, Typography } from '@material-ui/core';\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\nimport * as React from 'react';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  contactInfo: {\n    paddingLeft: theme.spacing(2),\n  },\n}));\n\nconst CardContactInfo: React.FC<{ contactInfoArr: string[] }> = ({ contactInfoArr }) => {\n  const classes = useStyles();\n\n  return (\n    <Grid item={true} xs={7} container={true} direction='column' justify='center' className={classes.contactInfo}>\n       {\n         contactInfoArr.map((item, index) => (<Typography key={`${index}-${item}`} gutterBottom={true} variant='body2'>{item}</Typography>))\n       }\n    </Grid>\n  );\n};\n\nexport default CardContactInfo;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Grid,\n  Typography,\n  CardContent,\n  CardActions,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  withStyles,\n  WithTheme,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport submittalSample from '../../images/printPage/lochinvarSubmittalSample.png';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport { ControlledDrawer, UserContactDrawerDetails } from '..';\nimport { DRAWER_ID as CONTACT_DRAWER_ID} from '../../containers/MyContactsPage/constants';\nimport { reduxForm, Field, getFormValues } from 'redux-form/immutable'\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { GetContactsSucceededAction, SelectContactAction } from '../../modules/AccountModule/actions';\nimport { Contact } from '../../models';\nimport CardImage from '../SpecificationBookletBeta/ContactCard/CardImage';\nimport CardContactInfo from '../SpecificationBookletBeta/ContactCard/CardContactInfo';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport ContactSearchInput from './ContactSearchInput';\nimport { ContactCardButton, ContactCardWrapper } from '../SpecificationBookletBeta/ContactCard/Component';\nimport { fromJS, List } from 'immutable';\n\ninterface ILochinvarSubmittalComponentProps {\n}\ninterface ILochinvarSubmittalProps extends ILochinvarSubmittalComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\ntype SubmittalProps = ILochinvarSubmittalProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithTheme;\n\nconst sampleModalKey = 'lochinvarSubmittalSampleModalKey';\nexport const LOCHINVAR_SUBMITTAL_FORM_NAME = 'lochinvarSubmittalPrint';\n\nexport const formatContactName = (contact: IMap<Contact>) => {\n  const organization = contact && contact.get('organization');\n  const firstName = contact && contact.get('firstName');\n  const lastName = contact && contact.get('lastName');\n  \n  return organization || [firstName, lastName].join(' ') || '';\n}\n\nclass Submittal extends React.Component<SubmittalProps> {\n\n  public handleEditIcon = (e: React.SyntheticEvent, contact: IMap<Contact>) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    e.stopPropagation();\n\n    dispatch(new GetContactsSucceededAction({contacts: List([contact])})); /* Hacky workaround for the way the contacts drawer works. This populates the correct field in redux with the necessary contact data */\n    dispatch(new SelectContactAction(contact.get('id')));\n    dispatch(new SetOverlayComponentContentAction({id: CONTACT_DRAWER_ID, content: '__UserContactDrawerDetailsContactEdit__'}));\n    dispatch(new SetOverlayComponentPropsAction({\n      id: CONTACT_DRAWER_ID,\n      props: {\n        submitCb: (data) => dispatch(change(LOCHINVAR_SUBMITTAL_FORM_NAME, 'contact', {\n          label: formatContactName(data),\n          value: data\n        }))\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({id: CONTACT_DRAWER_ID, open: true}));\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      formValues,\n    } = this.props;\n\n    const showAvatar = formValues && formValues.get('avatar') === true;\n    const contact = formValues && formValues.getIn(['contact', 'value']);\n    const name = contact && formatContactName(contact);\n    const imageId = contact && contact.get('imageId') || '';\n\n    return (\n      <>\n        <PrintWrapper>\n          <PrintHeader\n            title={t('LochinvarSubmittalPrint.submittal')}\n            description={t('LochinvarSubmittalPrint.description')}\n            sampleAlt={t('SubmittalPrint.imageAlt')}\n            sampleSrc={submittalSample}\n            sampleModalKey={sampleModalKey}\n            src={pdfIcon}\n          />\n          <form className={classes.form}>\n            <Grid container={true} spacing={2} direction='column'>\n              <Grid item={true}>\n                <Typography variant='body2' color='inherit'>{t('specBookletPrint.includeContactInfo')}</Typography>\n              </Grid>\n              <ContactSearchInput />\n              {\n                contact && (\n                  <>\n                    <Grid item={true}>\n                      <ContactCardWrapper>\n                        <CardContent>\n                          <Grid container={true}>\n                            {showAvatar && <CardImage imageId={imageId}/>}\n                            <CardContactInfo contactInfoArr={[name]}/>\n                          </Grid>\n                        </CardContent>\n                        <CardActions>\n                          <ContactCardButton\n                            onClick={(e) => this.handleEditIcon(e, contact)}\n                            text={t('specBookletPrint.modifyContactInfo')}\n                          />\n                        </CardActions>\n                      </ContactCardWrapper>\n                    </Grid>\n                    <Grid item={true}>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='avatar'\n                        component={FieldCheckbox}\n                        props={{\n                          label: t('specBookletPrint.avatarLogo'),\n                          variant: 'single',\n                          helperText: false,\n                          inputProps: {\n                            defaultValue: true,\n                            color: 'primary',\n                          },\n                        }}\n                      />\n                    </Grid>\n                  </>\n                )\n              }\n              {/* <Grid item={true}>\n                <Typography variant='body2' color='inherit'>{t('SubmittalPrint.priceTitle')}</Typography>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                  name='price'\n                  component={FieldCheckbox}\n                  props={{\n                    label: t('SubmittalPrint.priceLabel'),\n                    variant: 'single',\n                    inputProps: {\n                      defaultValue: true,\n                      color: 'primary',\n                    },\n                  }}\n                />\n              </Grid> */}\n            </Grid>\n          </form>\n          <ControlledDrawer\n            localKey={CONTACT_DRAWER_ID}\n            menuComponent={\n              <UserContactDrawerDetails\n                drawerId={CONTACT_DRAWER_ID}\n              />\n            }\n          />\n        </PrintWrapper>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  form: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    padding: theme.spacing(1),\n  }\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst initialValues = fromJS({\n  avatar: true,\n  // price: false\n});\n\nconst mapStateToProps = (state) => {\n  return {\n    initialValues,\n    ...createStructuredSelector({\n      formValues: getFormValues(LOCHINVAR_SUBMITTAL_FORM_NAME),\n    })(state)\n  }\n};\n\nexport default compose<React.ComponentClass<ILochinvarSubmittalComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: LOCHINVAR_SUBMITTAL_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(Submittal);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n  Tabs,\n  Tab,\n  Tooltip,\n  Fab,\n  TableSortLabel,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  List, Map\n} from 'immutable';\nimport {\n  debounce,\n} from 'lodash';\nimport {\n  makeSelectChildOrParentIsAtsUser,\n  makeSelectUserHasPimIntegrationRole,\n  makeSelectUserId,\n  makeSelectUserIsAtsUser,\n} from '../../../src/modules/AtsModule/selectors';\nimport { AMPLITUDE_EVENT, COLUMN_TYPES, CONFIGURATOR_PATH, PIM_DRAFT_CREATE_PATH, PIM_DRAFT_DETAIL_PATH, PIM_DRAFT_LIST_PATH, PIM_SERIES_DETAIL_PATH } from '../../../src/constants';\nimport NotFound from '../../../src/components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport emptySeriesList from '../../images/project.svg';\nimport { Filter, Option, SavedFilter, SearchArgs, Series, Status, TableColumn} from '../../models';\nimport { DeleteModal, Image, SpeedDialCustom, TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport { SearchSeriesAction, SearchSeriesSucceededAction, ResetPimStateAction, LoadingSeriesAction, DeleteSeriesByIdAndSearchSeriesAction, AddPimSeriesDraftAction, UpdatePimSeriesDraftForDeleteAction, AddPimSeriesDraftForDeleteAction, DuplicateSeriesAction } from '../../modules/PimModule/actions';\nimport { makeSelectSearchedSeries, makeSelectSeriesHasNextPage, makeSelectSearchingSeries, makeSelectIsAddingPimSeriesDraft } from '../../modules/PimModule/selectors';\nimport CategoryFilter from './CategoryFilter';\nimport SeriesListFilter, { SERIES_LIST_FILTER_FORM } from './SeriesListFilter';\nimport ToolBar from '../../components/ToolBar';\nimport ColumnSelector from '../../components/ColumnsSelector';\nimport { TextCell, LinkCell, RegionCell } from '../../components/_CellRenderers';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport StatusCell from './_CustomCellRenderers/StatusCell';\nimport { push } from 'connected-react-router';\nimport { GetPimStatusesAction, GetTestStatusesAction } from '../../modules/ListModule/actions';\nimport { makeSelectPimStatuses, makeSelectTestStatuses } from '../../modules/ListModule/selectors';\nimport DuplicateDialog from './DuplicateDialog';\nimport PublishDialog from './PublishDialog';\nimport { SetOverlayComponentPropsAction, SetSnackbarClosedAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport SeriesTypeCell from './_CustomCellRenderers/SeriesTypeCell';\nimport { CONFIG_PAGE_ROUTE_TYPES } from '../../pages/ProductConfiguratorPage/Component';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport SearchIcon from '@material-ui/icons/Search';\nimport AddIcon from '@material-ui/icons/Add';\nimport FlagIcon from '@material-ui/icons/Flag';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { initialize } from 'redux-form';\nimport { makeSelectFilterList } from '../../modules/AccountModule/selectors';\nimport { GetFiltersByType } from '../../modules/AccountModule/actions';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport PimIntegrationDialog from './PimIntegrationDialog';\n\nexport enum PUBLISH_DRAFT_TAB_TYPES {\n  PUBLISH = 'publish',\n  DRAFT = 'draft',\n}\n\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<Series> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\nexport const constructFilters = (providedFilters, searchTerm = '', excludeGeneric) => {\n  let constructedFilters: any = searchTerm\n    ? {\n        'and': [\n          {\n            'name': {\n              'like': searchTerm\n            }\n          }\n        ]\n      }\n    : providedFilters;\n  (providedFilters && searchTerm) && constructedFilters.and?.push(...((providedFilters as any).and || [])); // tslint:disable-line\n\n  if (excludeGeneric) {\n    if (!constructedFilters || !constructedFilters.and) {\n      constructedFilters = { 'and': [{ 'brandId': { 'neq': 785 } }] };\n    } else {\n      constructedFilters.and.push({ 'brandId': { 'neq': 785 } });\n    }\n  }\n\n  return constructedFilters;\n};\n\ninterface IPimSeriesListPageComponentProps {\n}\n\ninterface IPimSeriesListPageProps extends IPimSeriesListPageComponentProps {\n  dispatch: (s: IAction) => void;\n  getpimStatuses: () => void;\n  getTestStatuses: () => void;\n  searchSeries: (options: Option<Series>, filters?: Filter, draft?: boolean) => void;\n  handleDuplicate: (series: IMap<Series>, filters?: Filter, options?: Option<Series>,searchAfter?: boolean) => void;\n  searchedSeries: List<IMap<Series>>;\n  seriesHasNextPage: boolean;\n  searchingSeries: boolean;\n  pimStatuses: List<IMap<Status>>;\n  testStatuses: List<IMap<Status>>;\n  isAddingDraft: boolean;\n  theme: Theme;\n  userId: number;\n  childOrParentIsAtsUser: boolean;\n  publishColumnsList: List<IMap<SavedFilter>>;\n  draftColumnsList: List<IMap<SavedFilter>>;\n  userHasAtsUserAcl: boolean;\n  hasPimIntegrationRole: boolean;\n  t: (key: string) => string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    height: '100%',\n    backgroundColor: theme.palette.grey[50],\n    width: '100%',\n    flexGrow: 1,\n  },\n  tableOverallContainer: {\n    overflow: 'auto'\n  },\n  contentWrapper: {\n    height: 0,\n    flexGrow: 1,\n    overflowX: 'hidden',\n  },\n  contentSubWrapper: {\n    width: 0,\n    flexGrow: 1,\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    overflowX: 'hidden',\n    padding: '0px 20px 20px 20px',\n    height: 0,\n    flexGrow: 1,\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n  tabs: {\n    overflow: 'initial',\n    minHeight: 'initial',\n    marginTop: theme.spacing(0.75)\n  },\n  tabWrapper: {\n    flexDirection: 'row',\n    whiteSpace: 'nowrap',\n  },\n  tabLabelIcon: {\n    minHeight: 'initial',\n    paddingTop: 0\n  },\n  fab: {\n    position: 'relative' as 'relative',\n    top: '50%',\n    marginBottom: '-50%' /* hack for absolute+relative positions combination effect */\n  },\n  tooltipWrapper: {\n    backgroundColor: theme.palette.common.white,\n    boxShadow: theme.shadows[8],\n    padding: 0\n  },\n  placement: {\n    margin: theme.spacing(1, 0)\n  },\n  createTypeContainer: {\n    cursor: 'pointer',\n    '&:hover': {\n      backgroundColor: 'rgba(0,120,178,0.1)'\n    }\n  },\n  // createTypeIcon: {\n  //   color: '#414141',\n  //   marginTop: theme.spacing(4.75)\n  // },\n  createTypeText: {\n    marginTop: theme.spacing(1.5),\n    width: 100,\n    fontSize: 12,\n    lineHeight: 1.4,\n    textAlign: 'center'\n  },\n  indicator: {\n    backgroundColor: theme.palette.primary[700]\n  },\n  speedDialCustomRoot: {\n    position: 'absolute',\n  },\n  speedDialCustomFab: {\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700]\n    }\n  },\n});\n\ntype IPimSeriesListPage = IPimSeriesListPageProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation & WithAmplitudeData;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  publishColumns: TableColumn[];\n  draftColumns: TableColumn[];\n  anchorEl: HTMLElement;\n  page: number;\n  searchTerm: string;\n  publishSearchTerm: string;\n  draftSearchTerm: string;\n  openFilterDrawer: boolean;\n  openColumnsDrawer: boolean;\n  options: Option<Series>;\n  filters: Filter;\n  publishFilters: Filter;\n  draftFilters: Filter;\n  publishFiltersFormValues: Map<string, any>;\n  draftFiltersFormValues: Map<string, any>;\n  tabValue: string;\n  seriesListFilterUniqueKey: any;\n\n  selectedSeries: IMap<Series>;\n  openDeleteModal: boolean;\n  openDuplicateModal: boolean;\n  openPimIntegrationDailog: boolean;\n\n  orderBy: string;\n  order: 'asc' | 'desc';\n}\n\nclass PimSeriesListPage extends React.Component<IPimSeriesListPage, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  constructor(props: IPimSeriesListPage) {\n    super(props);\n    this.state = {\n      anchorEl: null,\n      columnsToDisplay: [],\n      publishColumns: [\n        { id: 'Image', label: '', path: ['file', 'images', 'main', 'fileId'], display: true, sortable: false },\n        { id: 'SeriesType', label: '', display: true, sortable: false },\n        { id: 'productNumber', label: 'pimProductList.series', display: true, sortable: true, beSortable: true },\n        { id: 'brand', label: 'pimProductList.manufacturer', path: ['brand'], display: true, sortable: true, beSortable: true },\n        { id: 'categoryName', label: 'pimProductList.category', path: ['categoryName'], display: true, sortable: true, beSortable: true },\n        { id: 'description', label: 'pimProductList.description', path: ['description'], display: false, sortable: true, beSortable: true },\n        { id: 'source', label: 'pimProductList.source', path: ['source'], display: false, sortable: true, beSortable: true },\n        { id: 'dateModified', label: 'pimProductList.updatedDate', path: ['dateModified'], display: true, sortable: true, beSortable: true },\n        { id: 'modifiedBy.user.name', label: 'pimProductList.updatedBy', path: ['modifiedBy', 'user', 'name'], display: true, sortable: true, beSortable: true },\n        { id: 'createdBy.user.name', label: 'pimProductList.creator', path: ['createdBy', 'user', 'name'], display: true, sortable: true, beSortable: true },\n        { id: 'region', label: 'pimProductList.region', display: true, sortable: true, beSortable: false },\n        { id: 'status', label: 'pimProductList.status', display: true, sortable: true, beSortable: true },\n        // { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true },\n        { id: 'Actions', label: 'pimProductList.actions', display: true, sortable: true, style: { textAlign: 'center' }},\n      ],\n      draftColumns: [\n        { id: 'Image', label: '', path: ['file', 'images', 'main', 'fileId'], display: true, sortable: false },\n        { id: 'SeriesType', label: '', display: true, sortable: false },\n        { id: 'productNumber', label: 'pimProductList.series', display: true, sortable: true, beSortable: true },\n        { id: 'brand', label: 'pimProductList.manufacturer', path: ['brand'], display: true, sortable: true, beSortable: true },\n        { id: 'categoryName', label: 'pimProductList.category', path: ['categoryName'], display: true, sortable: true, beSortable: true },\n        { id: 'description', label: 'pimProductList.description', path: ['description'], display: false, sortable: true, beSortable: true },\n        { id: 'source', label: 'pimProductList.source', path: ['source'], display: false, sortable: true, beSortable: true },\n        { id: 'dateAdded', label: 'pimProductList.createdDate', path: ['dateAdded'], display: true, sortable: true, beSortable: true },\n        { id: 'dateModified', label: 'pimProductList.updatedDate', path: ['dateModified'], display: true, sortable: true, beSortable: true },\n        { id: 'modifiedBy.user.name', label: 'pimProductList.updatedBy', path: ['modifiedBy', 'user', 'name'], display: true, sortable: true, beSortable: true },\n        { id: 'createdBy.user.name', label: 'pimProductList.creator', path: ['createdBy', 'user', 'name'], display: true, sortable: true, beSortable: true },\n        { id: 'region', label: 'pimProductList.region', display: true, sortable: true, beSortable: false },\n        { id: 'status', label: 'pimProductList.status', display: true, sortable: true, beSortable: true },\n        { id: 'pimStatus', label: 'pimProductList.publishStatus', display: true, sortable: true, beSortable: true },\n        // { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true },\n        { id: 'Draft Actions', label: 'pimProductList.actions', display: true, sortable: true, style: { textAlign: 'center' }},\n      ],\n      openFilterDrawer: false,\n      openColumnsDrawer: false,\n      page: 0,\n      searchTerm: '',\n      publishSearchTerm: '',\n      draftSearchTerm: '',\n      filters: null,\n      publishFilters: null,\n      draftFilters: null,\n      publishFiltersFormValues: null,\n      draftFiltersFormValues: null,\n      options: defaultOptions,\n      tabValue: PUBLISH_DRAFT_TAB_TYPES.PUBLISH,\n      seriesListFilterUniqueKey: '',\n\n      selectedSeries: Map() as IMap<Series>,\n      openDeleteModal: false,\n      openDuplicateModal: false,\n      openPimIntegrationDailog: false,\n\n      orderBy: null,\n      order: 'desc',\n    };\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n      openColumnsDrawer: false\n    }));\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState(prevState => ({\n      openColumnsDrawer: !prevState.openColumnsDrawer,\n      openFilterDrawer: false\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<Series>) => {\n    const {\n      searchSeries,\n      userHasAtsUserAcl,\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage,\n      tabValue\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        const filters = constructFilters(this.state.filters, this.state.searchTerm, !userHasAtsUserAcl);\n\n        searchSeries(\n          this.state.options,\n          filters,\n          tabValue === PUBLISH_DRAFT_TAB_TYPES.DRAFT\n        );\n      }\n    );\n  }\n\n  public componentDidMount() {\n    const {\n      getpimStatuses,\n      getTestStatuses,\n      dispatch,\n      pimStatuses,\n      testStatuses,\n      childOrParentIsAtsUser,\n      publishColumnsList,\n      draftColumnsList,\n      userHasAtsUserAcl\n    } = this.props;\n    const {\n      publishFilters,\n      publishColumns,\n      draftFilters,\n      draftColumns\n    } = this.state;\n\n    if (childOrParentIsAtsUser) {\n      this.state.draftColumns.splice(-1, 0, { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true });\n      this.state.publishColumns.splice(-1, 0, { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true });\n      this.setState({\n        draftColumns: this.state.draftColumns,\n        publishColumns: this.state.publishColumns\n      });\n    }\n\n    if (userHasAtsUserAcl) {\n      const publishStatusColumnIndex = draftColumns.findIndex((column) => column.id === 'pimStatus');\n      this.state.draftColumns.splice(publishStatusColumnIndex, 0, { id: 'testStatus', label: 'pimProductList.testStatus', display: true, sortable: true, beSortable: true });\n      this.setState({draftColumns: this.state.draftColumns});\n    }\n\n    dispatch(new SearchSeriesSucceededAction({ series: List() }));\n    if (location.pathname === PIM_DRAFT_LIST_PATH) {\n      this.setState({ columnsToDisplay: draftColumns, filters: draftFilters, tabValue: PUBLISH_DRAFT_TAB_TYPES.DRAFT }, () => this.setSearchArgsAndSearch({}));\n    } else {\n      this.setState({ columnsToDisplay: publishColumns, filters: publishFilters }, () => this.setSearchArgsAndSearch({}));\n    }\n    if (!pimStatuses) {\n      getpimStatuses();\n    }\n    if (!testStatuses) {\n      getTestStatuses();\n    }\n\n    if (!publishColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.PIM_PUBLISH_LIST_COLUMNS }));\n    }\n    if (!draftColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.PIM_DRAFT_LIST_COLUMNS }));\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { searchedSeries, childOrParentIsAtsUser, userHasAtsUserAcl } = this.props;\n    const { options, page, draftColumns } = this.state;\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no series returned\n    if (prevProps.searchedSeries.size && searchedSeries.size === 0 && options.offset) {\n      // const newPage = Math.floor(seriesCount / options.limit) - (seriesCount < options.limit ? 0 : 1);\n      // const newOffset = options.limit * newPage;\n      const newPage = page - 1;\n      const newOffset = options.offset - options.limit;\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: newOffset\n        },\n        page: newPage\n      });\n    }\n    if (prevProps.childOrParentIsAtsUser !== childOrParentIsAtsUser && childOrParentIsAtsUser) {\n      if (childOrParentIsAtsUser) {\n        this.state.draftColumns.splice(-1, 0, { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true });\n        this.state.publishColumns.splice(-1, 0, { id: 'invalid', label: 'pimProductList.invalidStatus', display: true, sortable: true, beSortable: true });\n        this.setState({\n          draftColumns: this.state.draftColumns,\n          publishColumns: this.state.publishColumns\n        });\n      }\n    }\n\n    if (prevProps.userHasAtsUserAcl !== userHasAtsUserAcl && userHasAtsUserAcl) {\n      const publishStatusColumnIndex = draftColumns.findIndex((column) => column.id === 'pimStatus');\n      this.state.draftColumns.splice(publishStatusColumnIndex, 0, { id: 'testStatus', label: 'pimProductList.testStatus', display: true, sortable: true, beSortable: true });\n      this.setState({draftColumns: this.state.draftColumns});\n    }\n  }\n\n  public componentWillUnmount() {\n    const { dispatch } = this.props;\n\n    dispatch(new ResetPimStateAction('searchedSeries'));\n    dispatch(new SetSnackbarClosedAction());\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => this.setState({ columnsToDisplay: newColumnsToDisplay });\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddSeries = () => {\n    this.props.dispatch(push(PIM_DRAFT_CREATE_PATH));\n  }\n\n  public updateFiltersFormValues = (isDraft: boolean, newFormValues: Map<string, any>) => {\n    isDraft\n      ? this.setState({ draftFiltersFormValues: newFormValues })\n      : this.setState({ publishFiltersFormValues: newFormValues });\n  }\n\n  public handleTabChange = (event: React.ChangeEvent<{}>, newValue: string) => {\n    const {\n      filters,\n      options,\n      columnsToDisplay,\n      searchTerm,\n      tabValue,\n      publishFiltersFormValues,\n      draftFiltersFormValues,\n    } = this.state;\n\n    if (tabValue !== newValue) {\n      const newData = {\n        [`${tabValue}Filters`]: filters,\n        [`${tabValue}Columns`]: columnsToDisplay,\n        [`${tabValue}SearchTerm`]: searchTerm,\n        filters: this.state[`${newValue}Filters`],\n        columnsToDisplay: this.state[`${newValue}Columns`],\n        searchTerm: this.state[`${newValue}SearchTerm`]\n      };\n\n      this.setState({\n        tabValue: newValue,\n        openFilterDrawer: false,\n        ...newData\n      }, () => this.setSearchArgsAndSearch({\n        page: 0,\n        options: {\n          ...defaultOptions,\n          orderBy: options.orderBy\n        }\n      }));\n\n      this.props.dispatch(initialize(SERIES_LIST_FILTER_FORM, newValue === PUBLISH_DRAFT_TAB_TYPES.PUBLISH ? publishFiltersFormValues : draftFiltersFormValues));\n    }\n  }\n\n  public handleSeriesDraftDelete = () => {\n    const { dispatch, amplitudeData, userHasAtsUserAcl } = this.props;\n    const {\n      selectedSeries,\n      options,\n      filters,\n      searchTerm\n    } = this.state;\n\n    const _filters: any = constructFilters(filters, searchTerm, !userHasAtsUserAcl);\n\n    this.setState({ openDeleteModal: false });\n    dispatch(new LoadingSeriesAction());\n    dispatch(new DeleteSeriesByIdAndSearchSeriesAction({\n      seriesId: selectedSeries.get('id'),\n      options,\n      filters: _filters,\n      draft: true,\n      sendAmplitude: () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.seriesDeleted, amplitudeData({\n          seriesName: selectedSeries.get('name'),\n          seriesId: selectedSeries.get('id'),\n          manufacturerName: selectedSeries.get('brand'),\n          categoryName: selectedSeries.get('categoryName')\n        }));\n      }\n    }));\n  }\n\n  public handleEditSeries = (series: IMap<Series>) => {\n    const { dispatch, t, amplitudeData } = this.props;\n\n    if (series.get('draftId')) {\n      this.redirectToEdit(series.get('isConfigurator'), series.get('draftId'));\n    } else {\n      dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('pimProductList.creatingDraft'), actionOnItem: series.get('productNumber') } }));\n      dispatch(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: true\n      }));\n      const onSuccess = (result: IMap<Series>) => {\n        amplitude.logEvent(AMPLITUDE_EVENT.seriesDraftCreated, amplitudeData({\n          seriesName: result.get('name'),\n          seriesId: result.get('id'),\n          manufacturerName: result.get('brand'),\n          categoryName: result.get('categoryName'),\n          numberOfOptions: result.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n          seriesType: result.get('isConfigurator') ? 'Advance' : 'Basic',\n        }));\n      };\n      dispatch(new AddPimSeriesDraftAction({\n        series: series.set('draftParentId', series.get('id')),\n        redirectOnSuccess: false,\n        useSourceSeriesSkipAttributes: true,\n        onSuccess\n      }));\n    }\n  }\n\n  public redirectToEdit = (isConfigurator: boolean, id: number) => {\n    const { dispatch } = this.props;\n\n    if (isConfigurator) {\n      dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.EDIT}/${id}`));\n    } else {\n      dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${id}/edit`));\n    }\n  }\n\n  public handleDeleteSeries = (series: IMap<Series>) => {\n    const {\n      dispatch\n    } = this.props;\n\n    const draftId = series.get('draftId');\n    if (draftId) {\n      dispatch(new UpdatePimSeriesDraftForDeleteAction({\n        seriesId: draftId,\n        seriesInfo: {\n          status: 'archived'\n        }\n      }));\n    } else {\n      dispatch(new AddPimSeriesDraftForDeleteAction({\n        series: series.withMutations(ctx => ctx.set('draftParentId', series.get('id')).set('status', 'archived')),\n        dispatch\n      }));\n    }\n  }\n\n  public handleDuplicateSeries = (series: IMap<Series>, _filters?: Filter, options?: Option<Series>, searchAfter?: boolean) => {\n    const { searchTerm } = this.state;\n    if (series.get('isConfigurator')) {\n      const filters: any = constructFilters(_filters, searchTerm, !this.props.userHasAtsUserAcl);\n\n      this.props.handleDuplicate(series, filters, options, searchAfter);\n    } else {\n      this.setState({ openDuplicateModal: true });\n    }\n  }\n\n  public getDirection = (_orderBy: string) => {\n    const { order, orderBy } = this.state;\n    return orderBy === _orderBy ? order : order === 'asc' ? 'desc' : 'asc';\n  }\n\n  public sortList = (_orderBy: string) => {\n    const {\n      options,\n      order,\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        orderBy: {\n          [_orderBy]: order === 'asc' ? -1 : 1\n        }\n      }\n    });\n\n    this.setState({\n      orderBy: _orderBy,\n      order: order === 'asc' ? 'desc' : 'asc'\n    });\n  }\n\n  public render() {\n    const {\n      classes,\n      t,\n      searchedSeries,\n      searchingSeries,\n      seriesHasNextPage,\n      isAddingDraft,\n      hasPimIntegrationRole,\n      dispatch,\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      filters,\n      page,\n      openFilterDrawer,\n      openColumnsDrawer,\n      columnsToDisplay,\n      tabValue,\n      selectedSeries,\n      openDeleteModal,\n      openDuplicateModal,\n      order,\n      orderBy,\n    } = this.state;\n\n    const isDraft = tabValue === PUBLISH_DRAFT_TAB_TYPES.DRAFT;\n    const detailPath = isDraft ? PIM_DRAFT_DETAIL_PATH : PIM_SERIES_DETAIL_PATH;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => {\n      return column.display;\n    });\n\n    const labels = {\n      emptyviewSubtitle: '',\n      emptyviewAddButton: '',\n      emptyviewAlt: t('pimProductList.imageAlt'),\n      emptyviewNotFound: isDraft ? t('pimProductList.draftNotFound') : t('pimProductList.notFound')\n    };\n\n    return (\n      <Grid\n        container={true}\n        wrap='nowrap'\n        className={classes.container}\n      >\n        <Grid\n          className={classes.tableOverallContainer}\n          container={true}\n          item={true}\n          xs={12}\n          direction='column'\n          alignContent='flex-start'\n        >\n          <ToolBar\n            onClickColumnButton={this.toggleColumnsDrawer}\n            onClickFilterButton={this.toggleFilterDrawer}\n            searchTooltip={t('pimProductList.searchTooltip')}\n            handleSubmit={this.handleSubmit}\n            searchTerm={searchTerm}\n            customizedFab={\n              <SpeedDialCustom\n                actions={[\n                  { icon: <AccountTreeIcon fontSize='small' />, tooltipTitle: t('pimProductList.basicConfig'), onClick: this.handleAddSeries },\n                  { icon: <WidgetsIcon fontSize='small' />, tooltipTitle: t('pimProductList.advancedConfig'), onClick: () => dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.CREATE}`)) },\n                  ...hasPimIntegrationRole\n                    ? [{ icon: <SearchIcon fontSize='small' />, tooltipTitle: t('pimIntegrationDialog.searchPimIntegration'), onClick: () => this.setState({ openPimIntegrationDailog: true }) }]\n                    : [],\n                ]}\n                overRideClasses={{ root: classes.speedDialCustomRoot, fab: classes.speedDialCustomFab }}\n              />\n              // <Tooltip\n              //   interactive={true}\n              //   placement='bottom-start'\n              //   title={\n              //     <Grid container={true} style={{ width: 254, height: 127 }}>\n              //       <Grid\n              //         item={true}\n              //         xs={6}\n              //         container={true}\n              //         direction='column'\n              //         alignItems='center'\n              //         className={classes.createTypeContainer}\n              //         onClick={this.handleAddSeries}\n              //       >\n              //         <AccountTreeIcon fontSize='large' className={classes.createTypeIcon} />\n              //         <Typography color='textPrimary' className={classes.createTypeText}>{t('pimProductList.basicConfig')}</Typography>\n              //       </Grid>\n              //       <Grid\n              //         item={true}\n              //         xs={6}\n              //         container={true}\n              //         direction='column'\n              //         alignItems='center'\n              //         className={classes.createTypeContainer}\n              //         onClick={() => dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.CREATE}`))}\n              //       >\n              //         <WidgetsIcon fontSize='large' className={classes.createTypeIcon} />\n              //         <Typography color='textPrimary' className={classes.createTypeText}>{t('pimProductList.advancedConfig')}</Typography>\n              //       </Grid>\n              //     </Grid>\n              //   }\n              //   classes={{\n              //     tooltip: classes.tooltipWrapper,\n              //     tooltipPlacementBottom: classes.placement\n              //   }}\n              //   PopperProps={{\n              //     modifiers: {\n              //       computeStyle: {\n              //         gpuAcceleration: false\n              //       }\n              //     }\n              //   }}\n              // >\n              //   <Fab\n              //     color='primary'\n              //     aria-label={t('listPageToolbar.fabAriaLabel')}\n              //     classes={{root: classes.fab}}\n              //   >\n              //     <AddIcon/>\n              //   </Fab>\n              // </Tooltip>\n            }\n            leftComponent={\n              <Tabs\n                className={classes.tabs}\n                value={tabValue}\n                onChange={this.handleTabChange}\n                textColor='primary'\n                variant='fullWidth'\n                aria-label={t('pimProductList.tabsAriaLabel')}\n                classes={{\n                  indicator: classes.indicator\n                }}\n              >\n                <Tab\n                  label={t('pimProductList.publishTab')}\n                  value={PUBLISH_DRAFT_TAB_TYPES.PUBLISH}\n                  icon={<div/>}\n                  classes={{\n                    wrapper: classes.tabWrapper,\n                    labelIcon: classes.tabLabelIcon\n                  }}\n                />\n                <Tab\n                  label={t('pimProductList.draftTab')}\n                  value={PUBLISH_DRAFT_TAB_TYPES.DRAFT}\n                  icon={<div/>}\n                  classes={{\n                    wrapper: classes.tabWrapper,\n                    labelIcon: classes.tabLabelIcon\n                  }}\n                />\n              </Tabs>\n            }\n          />\n          <Grid container={true} wrap='nowrap' className={classes.contentWrapper}>\n            <CategoryFilter\n              filters={filters}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n            />\n            <Grid container={true} direction='column' className={classes.contentSubWrapper}>\n              <FilterChipsBar\n                filtersFormId={SERIES_LIST_FILTER_FORM}\n                setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                options={options}\n                containerStyle={{ marginBottom: 'unset' }}\n                setUniqueKey={(key) => this.setState({ seriesListFilterUniqueKey: key})}\n                updatePimSeriesListFilterFormValues={this.updateFiltersFormValues}\n                isDraftPimSeriesList={isDraft}\n              />\n              <Grid\n                container={true}\n                direction='row'\n                className={classes.contentContainer}\n                wrap='nowrap'\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                  className={classes.contentItemContainer}\n                >\n                  {searchingSeries\n                    ? <NotFound\n                        svgIcon={<LoadingImage />}\n                        firstRow={<LinearProgress color='secondary'/>}\n                        secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n                        paperContainer={true}\n                      />\n                    : <Paper\n                        className={classes.tableContainer}\n                      >\n                        {searchedSeries.size !== 0\n                          ? <>\n                              <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                                <Table>\n                                  <TableHead classes={{ root: classes.tableHead }}>\n                                    <TableRow>\n                                      {filteredColumnsToDisplay.map((header, index) => (\n                                        header.beSortable\n                                          ? (\n                                              <TableCell\n                                                key={index}\n                                                classes={{ root: classes.headerCell }}\n                                                style={header.style}\n                                                sortDirection={orderBy === header.id ? order : false}\n                                              >\n                                                <TableSortLabel\n                                                  active={orderBy === header.id}\n                                                  direction={this.getDirection(header.id)}\n                                                  onClick={() => this.sortList(header.id)}\n                                                >\n                                                  {t(header.label)}\n                                                </TableSortLabel>\n                                              </TableCell>\n                                            )\n                                          : (\n                                              <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                                {t(header.label)}\n                                              </TableCell>\n                                            )\n                                      ))}\n                                    </TableRow>\n                                  </TableHead>\n                                  <TableBody>\n                                    {searchedSeries && searchedSeries.map((series: IMap<Series>, index: number) => (\n                                      <TableRow id={`${index}`} key={index} hover={true} onClick={() => this.setState({ selectedSeries: series })}>\n                                        {series && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                          switch (column.id) {\n                                            case 'Image': return (\n                                              <TableCell key={column.id} padding='none' style={{width: 1}}>\n                                                <Image src={series.getIn(column.path) + `|fit:40,40`} fromService={true} aspectRatio={'100%'} width={'40px'} margin={'0 0 0 16px'} />\n                                              </TableCell>\n                                            );\n                                            case 'SeriesType': return <SeriesTypeCell key={column.id} isConfigurator={series.get('isConfigurator')} />;\n                                            case 'region': return <RegionCell key={column.label} series={series} />;\n                                            case 'productNumber': return <LinkCell refresh={false} key={column.label} name={series.get('productNumber')} linkPath={`${detailPath}/${series.get('id')}`} />;\n                                            case 'brand':\n                                            case 'categoryName':\n                                            case 'description':\n                                            case 'source':\n                                            case 'modifiedBy.user.name':\n                                            case 'createdBy.user.name': return <TextCell key={column.label} text={series.getIn(column.path)}/>;\n                                            case 'dateAdded':\n                                            case 'dateModified': return <TextCell key={column.label} text={utcToLocal(series.getIn(column.path), true)} />;\n                                            case 'status': return <StatusCell key={column.label} series={series} editable={isDraft} />;\n                                            case 'pimStatus': return <StatusCell key={column.label} series={series} statusType={'pimStatus'} />;\n                                            case 'testStatus': return <StatusCell key={column.label} series={series} statusType={'testStatus'} editable={false}/>;\n                                            case 'invalid': return (\n                                              <TableCell key={column.id} padding='none' style={{width: 1, textAlign: 'center'}}>\n                                                { series.get('invalid') &&\n                                                  <Tooltip title={t('pimProductList.flagTooltip')}><FlagIcon color='error' /></Tooltip>\n                                                }\n                                              </TableCell>\n                                            );\n                                            case 'Actions':\n                                              return <CustomActionButton\n                                                        key={column.label}\n                                                        editAction={!isAddingDraft && (() => this.handleEditSeries(series))}\n                                                        duplicateAction={() => this.handleDuplicateSeries(series)}\n                                                        deleteAction={() => this.handleDeleteSeries(series)}\n                                                      />;\n                                            case 'Draft Actions':\n                                              return <CustomActionButton\n                                                        key={column.label}\n                                                        editAction={() => this.redirectToEdit(series.get('isConfigurator'), series.get('id'))}\n                                                        duplicateAction={() => this.handleDuplicateSeries(series, filters, options, true)}\n                                                        deleteAction={() => this.setState({ openDeleteModal: true, selectedSeries: series })}\n                                                      />;\n                                          }\n                                        })}\n\n                                        </TableRow>\n                                      ))}\n                                  </TableBody>\n                                </Table>\n                              </div>\n                              <TablePagination\n                                count={seriesHasNextPage ? options.offset + options.limit + 1 : options.offset + searchedSeries?.size}\n                                labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                                className={classes.pagination}\n                                component='div'\n                                labelRowsPerPage={t('Pagination.rowsPerPage')}\n                                onChangePage={this.handlePageChange}\n                                rowsPerPageOptions={[5, 10, 25, 50]}\n                                onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                                rowsPerPage={options.limit}\n                                page={page}\n                                ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                                classes={{\n                                  toolbar: classes.paginationToolbar\n                                }}\n                              />\n                            </>\n                          : <EmptyView\n                              image={emptySeriesList}\n                              onButtonClicked={this.handleAddSeries}\n                              emptyviewSubtitle={labels.emptyviewSubtitle}\n                              emptyviewAddButton={labels.emptyviewAddButton}\n                              emptyviewAlt={labels.emptyviewAlt}\n                              emptyviewNotFound={labels.emptyviewNotFound}\n                            />\n                        }\n                      </Paper>\n                  }\n                </Grid>\n              </Grid>\n            </Grid>\n            <Grid\n              item={true}\n              className={classes.contentItemContainer}\n              style={{\n                minWidth: openFilterDrawer ? '370px' : 0,\n              }}\n            >\n              <SeriesListFilter\n                toggleDrawer={this.toggleFilterDrawer}\n                open={this.state.openFilterDrawer}\n                options={options}\n                isDraft={isDraft}\n                setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n                updateFiltersFormValues={this.updateFiltersFormValues}\n                uniqueKey={this.state.seriesListFilterUniqueKey}\n                setUniqueKey={(key) => this.setState({ seriesListFilterUniqueKey: key})}\n              />\n            </Grid>\n            <Grid\n              item={true}\n              className={classes.contentItemContainer}\n              style={{\n                minWidth: openColumnsDrawer ? '370px' : 0,\n              }}\n            >\n              <ColumnSelector\n                columnType={tabValue === PUBLISH_DRAFT_TAB_TYPES.PUBLISH ? COLUMN_TYPES.PIM_PUBLISH_LIST_COLUMNS : COLUMN_TYPES.PIM_DRAFT_LIST_COLUMNS}\n                defaultColumns={tabValue === PUBLISH_DRAFT_TAB_TYPES.PUBLISH ? this.state.publishColumns : this.state.draftColumns}\n                columnsToDisplay={columnsToDisplay}\n                disabledColumns={['productNumber']}\n                isOpen={openColumnsDrawer}\n                onClose={this.toggleColumnsDrawer}\n                handleColumnsChange={this.handleColumnsChange}\n              />\n            </Grid>\n            <DeleteModal\n              idToDelete={selectedSeries.get('id')}\n              open={openDeleteModal}\n              itemName={selectedSeries.get('productNumber')}\n              toggleDeleteModal={() => this.setState({ openDeleteModal: false })}\n              handleDelete={this.handleSeriesDraftDelete}\n              withLoading={false}\n            />\n            <DuplicateDialog\n              open={openDuplicateModal}\n              series={selectedSeries}\n              filters={filters}\n              searchTerm={searchTerm}\n              options={options}\n              searchAfter={selectedSeries.get('draft')}\n              toggleDuplicateDialog={() => this.setState({ openDuplicateModal: false })}\n            />\n            <PublishDialog\n              series={selectedSeries}\n              redirectToDetail={false}\n              searchTerm={searchTerm}\n              filters={filters}\n              options={options}\n            />\n            <PimIntegrationDialog\n              open={this.state.openPimIntegrationDailog}\n              isUpdate={false}\n              togglePimIntegrationDialog={() => this.setState({ openPimIntegrationDailog: false })}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchSeries: (options: Option<Series>, filters?: Filter, draft?: boolean) => {\n      dispatch(new SearchSeriesAction({\n        options,\n        filters,\n        draft\n      }));\n    },\n    getpimStatuses: () => {\n      dispatch(new GetPimStatusesAction());\n    },\n    getTestStatuses: () => {\n      dispatch(new GetTestStatusesAction());\n    },\n    handleDuplicate: (series: IMap<Series>, filters?: Filter, options?: Option<Series>, searchAfter?: boolean) => {\n      dispatch(new DuplicateSeriesAction({\n        series,\n        draft: true,\n        duplicateProducts: false,\n        searchAfter,\n        filters,\n        options,\n        dispatch\n      }));\n    }\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  searchingSeries: makeSelectSearchingSeries(),\n  searchedSeries: makeSelectSearchedSeries(),\n  seriesHasNextPage: makeSelectSeriesHasNextPage(),\n  userId: makeSelectUserId(),\n  pimStatuses: makeSelectPimStatuses(),\n  testStatuses: makeSelectTestStatuses(),\n  isAddingDraft: makeSelectIsAddingPimSeriesDraft(),\n  childOrParentIsAtsUser : makeSelectChildOrParentIsAtsUser(),\n  publishColumnsList: makeSelectFilterList(COLUMN_TYPES.PIM_PUBLISH_LIST_COLUMNS),\n  draftColumnsList: makeSelectFilterList(COLUMN_TYPES.PIM_DRAFT_LIST_COLUMNS),\n  userHasAtsUserAcl: makeSelectUserIsAtsUser(),\n  hasPimIntegrationRole: makeSelectUserHasPimIntegrationRole()\n});\n\nexport default compose<React.ComponentClass<IPimSeriesListPageComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps)\n)(PimSeriesListPage);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport classnames from 'classnames';\nimport {\n  MenuItem,\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  ExpansionPanel,\n  ExpansionPanelSummary,\n  ExpansionPanelDetails,\n  MenuList,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  Map,\n  List,\n  fromJS\n} from 'immutable';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { GetBrandRepProductCategoriesAction } from '../../../modules/ProductModule/actions';\nimport { ProductCategoryGroup, Series, Option, SearchArgs, Filter, ListItem } from '../../../models';\nimport { makeSelectProductCategories } from '../../../modules/ProductModule/selectors';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { change } from 'redux-form';\nimport { SERIES_LIST_FILTER_FORM } from '../SeriesListFilter';\n\ninterface IDivision extends ProductCategoryGroup {\n  categoryTypes: List<string>;\n}\n\ninterface ICategoryFilterComponentProps {\n  filters: Filter;\n  options: Option<Series>;\n  setSearchArgsAndSearch: (args: SearchArgs<Series>) => void;\n}\n\ninterface ICategoryFilterProps extends ICategoryFilterComponentProps {\n  dispatch: (s: IAction) => void;\n  subdivisions: List<IMap<ProductCategoryGroup>>;\n  getSubdivisions: () => void;\n}\ntype CategoryFilterProps = ICategoryFilterProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  divisionFilterContainer: {\n    maxWidth: '240px',\n  },\n  tabs: {\n    background: theme.palette.grey[100],\n    height: '51px'\n  },\n  expansionContainer: {\n    height: 0,\n    flexGrow: 1,\n    overflow: 'auto',\n    flexBasis: 'auto'\n  },\n  expansionPanel: {\n    background: '#EFEFEF'\n  },\n  expansionPanelExapanded: {\n    margin: '0 !important'\n  },\n  expansionPanelSummary: {\n    '&:hover $divisionNumber': {\n      color: theme.palette.primary[800]\n    }\n  },\n  expansionPanelSummaryContent: {\n    flexDirection: 'column'\n  },\n  expansionPanelSummaryContentExpanded: {\n    marginBottom: '0 !important',\n  },\n  divisionMenu: {\n    width: '100%'\n  },\n  divisionNumber: {\n    fontWeight: 'bold',\n  },\n  expansionPanelDetails: {\n    paddingTop: 0,\n    paddingBottom: 0\n  },\n  divisionMenuListItem: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n  },\n  selectedCategory: {\n    background: `${theme.palette.grey[400]} !important`\n  },\n  displayAll: {\n    background: '#EFEFEF',\n    cursor: 'pointer',\n  },\n  displayAllText: {\n    padding: theme.spacing(1, 3),\n    fontWeight: 'bold',\n    '&:hover': {\n      background: theme.palette.action.hover,\n      color: theme.palette.primary[800]\n    }\n  }\n});\n\nconst CategoryFilter: React.FC<CategoryFilterProps> = (props) => {\n  const {\n    classes,\n    getSubdivisions,\n    subdivisions,\n    filters,\n    options,\n    t,\n    setSearchArgsAndSearch,\n    dispatch,\n  } = props;\n  const [category, selectCategory] = React.useState(null);\n\n  React.useEffect(() => getSubdivisions(), []);\n\n  React.useEffect(() => {\n    if (filters) {\n      const _categoryObject = filters?.and?.find(filter => filter.category);\n      const _categoryId = _categoryObject && (_categoryObject as any).category.eq;\n      if (_categoryId !== category) {\n        if (_categoryId) {\n          selectCategory(_categoryId);\n        } else if (!_categoryId) {\n          selectCategory(null);\n        }\n      }\n    }\n    if (!filters && category) {\n      selectCategory(null);\n    }\n  }, [filters]);\n\n  const handleClick = (categoryItem: IMap<ListItem>) => {\n    if (categoryItem) {\n      selectCategory(categoryItem.get('id') === category ? null : categoryItem.get('id'));\n      dispatch(change(SERIES_LIST_FILTER_FORM, 'category.eq', categoryItem));\n    } else {\n      selectCategory(null);\n      dispatch(change(SERIES_LIST_FILTER_FORM, 'category.eq', null));\n    }\n  };\n\n  const divisions = subdivisions.reduce((acc: Map<string, IMap<IDivision>>, division: IMap<IDivision>) => {\n    const divisionNumber = division.get('divisionNumber');\n    const categoryType = division.get('categoryType');\n    const productTypes = division.get('productTypes');\n\n    return acc.update(\n      divisionNumber,\n      (concatenatedDivision: IMap<IDivision> = fromJS({\n        divisionNumber,\n        categoryTypes: List([categoryType]),\n        productTypes\n      })) => (\n        acc.get(divisionNumber)\n          ? concatenatedDivision.withMutations(mutable => mutable\n              .update('categoryTypes', list => list.push(categoryType))\n              .update('productTypes', list => {\n                const concatedList = list.concat(productTypes);\n                const sortedList = concatedList.sort((a, b) => {\n                  const aName = a.get('name');\n                  const bName = b.get('name');\n\n                  if (aName < bName) {\n                    return -1;\n                  }\n                  if (aName > bName) {\n                    return 1;\n                  }\n                  return 0;\n                });\n                return sortedList;\n              })\n            )\n          : concatenatedDivision\n      )\n    );\n  }, Map<string, IMap<IDivision>>())\n  .toOrderedMap().sortBy((v, k) => k);\n\n  return (\n    <Grid\n      container={true}\n      direction='column'\n      wrap='nowrap'\n      className={classes.divisionFilterContainer}\n    >\n      {\n        divisions.valueSeq().size\n          ? <div\n              className={classnames(classes.displayAll, category === null ? classes.selectedCategory : '')}\n              onClick={() => handleClick(null)}\n            >\n              <Typography className={classes.displayAllText}>\n                {t('pimProductList.allDivisions')}\n              </Typography>\n            </div>\n        : null\n      }\n      <Grid\n        className={classes.expansionContainer}\n        item={true}\n        xs={12}\n      >\n        {\n          divisions.valueSeq().map((division, divisionIndex) => (\n            <ExpansionPanel\n              key={divisionIndex}\n              className={classes.expansionPanel}\n              classes={{\n                expanded: classes.expansionPanelExapanded\n              }}\n            >\n              <ExpansionPanelSummary\n                className={classes.expansionPanelSummary}\n                classes={{\n                  content: classes.expansionPanelSummaryContent,\n                  expanded: classes.expansionPanelSummaryContentExpanded\n                }}\n                expandIcon={<ExpandMoreIcon />}\n                id={`${division.get('divisionNumber')}: panel-header`}\n                aria-controls={`${division.get('divisionNumber')}: panel-content`}\n              >\n                <Typography className={classes.divisionNumber}>\n                  {t('pimProductList.division')}{division.get('divisionNumber')}\n                </Typography>\n                <Typography>\n                  {division.get('categoryTypes').join(', ')}\n                </Typography>\n              </ExpansionPanelSummary>\n              <ExpansionPanelDetails\n                className={classes.expansionPanelDetails}\n              >\n                <MenuList\n                  className={classes.divisionMenu}\n                >\n                  {\n                    division.get('productTypes').map((type, typeIndex) => (\n                      <MenuItem\n                        key={typeIndex}\n                        onClick={() => handleClick(fromJS({ id: type.get('id'), value: type.get('name') }))}\n                        className={type.get('id') === category ? classes.selectedCategory : ''}\n                      >\n                        <Tooltip\n                          title={type.get('name')}\n                        >\n                          <span className={classes.divisionMenuListItem}>\n                            {type.get('name')}\n                          </span>\n                        </Tooltip>\n                      </MenuItem>\n                    ))\n                  }\n                </MenuList>\n              </ExpansionPanelDetails>\n            </ExpansionPanel>\n          ))\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getSubdivisions: () => {\n      dispatch(new GetBrandRepProductCategoriesAction());\n    },\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  subdivisions: makeSelectProductCategories(),\n});\n\n\nexport default compose<React.ComponentClass<ICategoryFilterComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(CategoryFilter);\n","import * as React from 'react';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell,\n  Grid,\n  Tooltip,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport EditIcon from '@material-ui/icons/Edit';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\ninterface ICustomActionButtonComponentProps {\n  editAction?: () => void;\n  duplicateAction: () => void;\n  deleteAction: () => void;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation;\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    editAction,\n    duplicateAction,\n    deleteAction,\n    t,\n  } = props;\n\n  return (\n    <>\n      <TableCell>\n        <Grid container={true} wrap='nowrap' alignItems='center' justify='center'>\n          <Tooltip title={t('formButtons.edit')}>\n            <IconButton disabled={!editAction} onClick={(e) => {e.stopPropagation(); editAction();}}>\n              <EditIcon fontSize='small' />\n            </IconButton>\n          </Tooltip>\n          <Tooltip title={t('formButtons.duplicate')}>\n            <IconButton onClick={duplicateAction}>\n              <FileCopyIcon fontSize='small' />\n            </IconButton>\n          </Tooltip>\n          <Tooltip title={t('formButtons.delete')}>\n            <IconButton onClick={(e) => { e.stopPropagation(); deleteAction(); }}>\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          </Tooltip>\n        </Grid>\n      </TableCell>\n    </>\n  );\n};\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n)(CustomActionButton);","import * as React from 'react';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TableCell\n} from '@material-ui/core';\nimport { StatusChipPim } from '../../../components';\nimport { Series } from '../../../models';\n\ninterface IStatusCellComponentProps {\n  series: IMap<Series>;\n  statusType?: string;\n  editable?: boolean;\n}\n\ntype StatusCellType = IStatusCellComponentProps;\n\nconst StatusCell: React.FC<StatusCellType> = (props) => {\n  const {\n    series,\n    statusType = 'status',\n    editable\n  } = props;\n  return (\n    <TableCell\n      style={{\n        whiteSpace: 'nowrap',\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n      }}\n    >\n      <StatusChipPim\n        row={series}\n        statusType={statusType}\n        editable={editable}\n        seriesInvalidStatus={series.get('invalid')}\n        seriesStatus={series.get('status')}\n      />\n    </TableCell>\n  );\n};\n\nexport default StatusCell;","import * as React from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  Dialog,\n  DialogContent,\n  DialogContentText,\n  DialogActions,\n  Grid,\n  Radio,\n  RadioGroup,\n  FormControlLabel,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { DuplicateSeriesAction } from '../../../modules/PimModule/actions';\nimport { Filter, Option, Series } from '../../../models';\nimport { makeSelectUserIsAtsUser } from '../../../modules/AtsModule/selectors';\nimport { constructFilters } from '..';\n\ninterface IDuplicateDialogContentComponentProps {\n  open: boolean;\n  series: IMap<Series>;\n  filters?: Filter;\n  searchTerm?: string;\n  options?: Option<Series>;\n  searchAfter?: boolean;\n  toggleDuplicateDialog: () => void;\n}\n\ninterface IDuplicateDialogContentProps extends IDuplicateDialogContentComponentProps {\n  dispatch: (s: IAction) => void;\n  _handleDuplicate: (series: IMap<Series>, duplicateProducts: boolean, filters?: Filter, options?: Option<Series>, searchAfter?: boolean) => void;\n}\n\ntype IDuplicateDialogContent = IDuplicateDialogContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  deleteDialog: {\n    paddingTop: theme.spacing() * 2.5,\n    paddingBottom: theme.spacing() * 1,\n  },\n  button: {\n    marginRight: theme.spacing() * 4,\n  },\n  root: {\n    width: 488\n  }\n});\nconst DuplicateDialog = (DuplicateDialogProps: IDuplicateDialogContent) => {\n  const {\n    open,\n    series,\n    classes,\n    filters,\n    searchTerm,\n    options,\n    searchAfter,\n    toggleDuplicateDialog,\n    _handleDuplicate,\n    t\n  } = DuplicateDialogProps;\n\n  const [withProducts, setWithProducts] = React.useState('');\n  const userHasAtsUserAcl = useSelector(makeSelectUserIsAtsUser());\n\n  const handleDuplicate = () => {\n    const _filters: any = constructFilters(filters, searchTerm, !userHasAtsUserAcl);\n    _handleDuplicate(series, Boolean(withProducts), _filters, options, searchAfter);\n  };\n\n  return (\n    <Dialog\n      onClose={toggleDuplicateDialog}\n      aria-describedby='duplicate with products confirmation dialog'\n      open={open}\n      classes={{\n        paper: classes.root\n      }}\n    >\n      <DialogContent>\n        <DialogContentText id='alert-dialog-description' variant='h6'>\n          { t('duplicateSeriesDialog.dialogQuery') }\n        </DialogContentText>\n        <RadioGroup aria-label='duplicate series with or without series selection' value={withProducts} onChange={(event: React.ChangeEvent<HTMLInputElement>) => setWithProducts((event.target as HTMLInputElement).value)}>\n          <Grid container={true} justify='space-between' wrap='nowrap'>\n            <FormControlLabel value={''} control={<Radio />} label={t('duplicateSeriesDialog.seriesOnlyRadioLabel')} />\n            <FormControlLabel value={'1'} control={<Radio />} label={t('duplicateSeriesDialog.withProductsRadioLabel')} />\n          </Grid>\n        </RadioGroup>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={toggleDuplicateDialog}\n          color='primary'\n          className={classes.button}\n        >\n          { t('formButtons.cancel') }\n        </Button>\n\n        <Button\n          onClick={(e) => {\n            e.stopPropagation();\n\n            handleDuplicate();\n            toggleDuplicateDialog();\n          }}\n          color='primary'\n          autoFocus={true}\n          className={classes.button}\n        >\n          { t('formButtons.confirm') }\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    _handleDuplicate: (series: IMap<Series>, duplicateProducts: boolean, filters?: Filter, options?: Option<Series>, searchAfter?: boolean) => {\n      dispatch(new DuplicateSeriesAction({\n        series,\n        draft: true,\n        duplicateProducts,\n        searchAfter,\n        filters,\n        options,\n        dispatch\n      }));\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IDuplicateDialogContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(DuplicateDialog);","import * as React from 'react';\nimport {\n  MenuItem,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { compose } from 'redux';\nimport classNames from 'classnames';\nimport NestedMenu, {\n  IMenuItem,\n  IMenuComponentStyles,\n  MenuComponentStyles,\n} from './atsMenu';\n\nexport const styles = (theme: Theme) => ({\n  subMenuContainer: {\n  },\n  subMenuItem: {\n    display: 'flex',\n    justifyContent: 'space-between'\n  },\n  openSubMenuIcon: {\n    marginLeft: '10px'\n  },\n  subMenuProjectsContainer: {\n  }\n});\n\n\n// custom component props - extends IMenuItem (maybe this should actually be defined here and included in the other file)\ninterface ISubMenuComponentProps extends IMenuItem {\n  anchorHorizontal?: number | 'center' | 'right' | 'left';\n  transformHorizontal?: number | 'center' | 'right' | 'left';\n}\n\ntype SubMenuComponentProps = ISubMenuComponentProps\n& IMenuComponentStyles;\n\ninterface ISubMenuProps extends SubMenuComponentProps {\n}\n\ninterface IMenuState {\n  menuOpen: boolean;\n  anchorEl: null | HTMLElement | ((element: HTMLElement) => HTMLElement); // from PopoverProps\n}\n\ntype SubMenuProps = ISubMenuProps & MenuComponentStyles;\n\nclass NestedSubMenu extends React.Component<SubMenuProps, IMenuState> {\n  public state = {\n    menuOpen: false,\n    anchorEl: null\n  };\n\n  public render() {\n    const {\n      caption,\n      menuItems,\n      classes,\n      disabled,\n      anchorHorizontal = 'right',\n      transformHorizontal = 'left',\n    } = this.props;\n    const { menuOpen, anchorEl } = this.state;\n    return (\n      <React.Fragment>\n        <MenuItem\n          disabled={disabled}\n          onClick={this.handleItemClick}\n          className={classNames(classes.subMenuItem)}\n        >\n          {caption}\n          <FontAwesomeIcon icon={'chevron-right'} size={'1x'} className={classes.openSubMenuIcon}/>\n        </MenuItem>\n        <NestedMenu\n          open={menuOpen}\n          menuItems={menuItems}\n          anchorEl={anchorEl}\n          onClose={this.handleSubMenuClose}\n          anchorOrigin={{\n            vertical: 'top',\n            horizontal: anchorHorizontal\n          }}\n          transformOrigin={{\n            vertical: 'top',\n            horizontal: transformHorizontal\n          }}\n          classes={classes}\n        />\n      </React.Fragment>\n    );\n  }\n  private handleItemClick = (event: any) => {\n    const savedTarget = event.currentTarget;\n    this.setState((prevState) => ({\n      menuOpen: !prevState.menuOpen,\n      anchorEl: savedTarget\n    }));\n  }\n  private handleSubMenuClose = () => {\n    this.setState((prevState) => ({\n       menuOpen: false\n    }));\n  }\n}\n\nexport default compose<React.ComponentClass<SubMenuComponentProps>>(\n  withStyles(styles),\n)(NestedSubMenu);\n","import * as React from 'react';\nimport {\n  Button,\n  CircularProgress,\n  Menu,\n  MenuItem,\n  Theme,\n  Tooltip,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport NestedSubMenu, {styles as nestedSubMenuStyles} from './atsSubMenu';\nimport classnames from 'classnames';\nimport { MenuProps } from '@material-ui/core/Menu';\nimport { StyledComponentProps } from '@material-ui/core/styles/withStyles';\nimport {StyleRules} from '@material-ui/core/styles';\n\n\nexport const styles = (theme: Theme): StyleRules => ({\n  disabled: {\n    color: theme.palette.grey[50]\n  },\n  fullHeight: {\n    height: '100%',\n    overflowY: 'auto'\n  },\n  newProjectContainer: {\n    marginTop: 'auto',\n    height: `${theme.spacing() * 5}px`\n  },\n  subMenuItem: {\n  },\n  subMenuContainer: {\n  },\n  openSubMenuIcon: {\n  },\n  subMenuProjectsContainer: {\n  },\n  disableHover: {\n    '&:hover': {\n      backgroundColor: 'transparent'\n    }\n  },\n  itemProgress: {\n    marginLeft: theme.spacing()\n  }\n});\n\n\nexport type styleKeyNames = keyof ReturnType<typeof nestedSubMenuStyles> | keyof ReturnType<typeof styles>;\n// classes? component prop for overriding\nexport type IMenuComponentStyles = StyledComponentProps<styleKeyNames>;\n\n// menuItem prop\nexport interface IMenuItem extends IMenuComponentStyles {\n  key: string;\n  caption?: any;\n  onClick?: (event: React.MouseEvent) => any;\n  /**\n   * Keep the menu open with a spinner beside this item until its onClick\n   * settles, then close. For actions that have work to do (a fetch) before\n   * anything visible happens — onClick must return a promise.\n   */\n  withProgress?: boolean;\n  disabled?: boolean;\n  disabledTooltip?: string;\n  disableHover?: boolean;\n  disableGutters?: boolean;\n  disableRipple?: boolean;\n  menuItems?: IMenuItem[];\n  fullHeight?: boolean;\n  type?: 'button' | 'icon';\n  icon?: 'delete';\n}\n\n// custom component props\nexport interface IMenuComponentProps extends IMenuComponentStyles {\n  menuItems: IMenuItem[];\n  className?: string;\n}\n\n// the main component prop export\ntype MenuComponentProps = IMenuComponentProps\n& IMenuComponentStyles\n& MenuProps;\n\n// any other custom component props goes here\ninterface IMenuProps extends MenuComponentProps {\n}\n\n// classes prop for withStyles\nexport type MenuComponentStyles = WithStyles<styleKeyNames>;\n\n// main props\ntype NestedMenuProps = IMenuProps & MenuComponentStyles;\n\nclass NestedMenu extends React.Component<NestedMenuProps, { pendingIndex: number }> {\n  // Tracked by index, not by `key` — the React keys below are `${key}${index}`\n  // precisely because item keys are not guaranteed unique within a menu.\n  public state = {\n    pendingIndex: null,\n  };\n\n  private unmounted = false;\n\n  public componentWillUnmount() {\n    this.unmounted = true;\n  }\n\n  public render() {\n    const {\n      anchorEl,\n      open,\n      onClose,\n      anchorOrigin,\n      transformOrigin,\n      classes,\n      menuItems,\n    } = this.props;\n    return (\n      <Menu anchorEl={anchorEl}\n            open={open}\n            onClose={onClose}\n            disableAutoFocusItem={true}\n            anchorOrigin={anchorOrigin}\n            transformOrigin={transformOrigin}\n            getContentAnchorEl={null}\n            classes={{\n              paper: classes.subMenuContainer\n            }}\n            MenuListProps={{\n              classes: {\n                root: classes.subMenuProjectsContainer\n            },\n            }}\n            disablePortal={true}\n      >\n        {\n          menuItems.map((menuItem, index) => {\n            // Everything destructured here is an ATS-only field that MUI's\n            // MenuItem must not receive — the rest is spread onto it as-is.\n            const {\n              key,\n              disableHover,\n              caption,\n              onClick,\n              disabledTooltip,\n              withProgress,\n              ...menuItemProps\n            } = menuItem;\n\n            const customProps = {};\n            if (onClick) {\n              customProps['onClick'] = (e) => {\n                if (this.state.pendingIndex != null) {\n                  return; // an item's action is already running\n                }\n                if (!withProgress) {\n                  onClose(e, null);\n                  onClick(e);\n                  return;\n                }\n                // Hold the menu open and mark this item as busy, so an action\n                // that has to fetch before it can do anything shows its progress\n                // in place rather than through a modal that may only flash up.\n                this.setState({ pendingIndex: index });\n                const settle = () => {\n                  if (this.unmounted) {\n                    return;\n                  }\n                  this.setState({ pendingIndex: null });\n                  onClose(null, null);\n                };\n                Promise.resolve(onClick(e)).then(settle, settle);\n              };\n            }\n            if (menuItem.hasOwnProperty('menuItems')) {\n              return (\n                <NestedSubMenu\n                  {...menuItem}\n                />\n              );\n            }\n            return menuItem.disabled\n              ? <Tooltip title={menuItem.disabledTooltip || ''}\n                         key={`${key}${index}`}\n                         placement='bottom'\n                >\n                  <div>\n                    <MenuItem\n                        className={classnames([\n                          menuItem.caption && menuItem.caption.key === '__new_project' ? classes.newProjectContainer : '' ,\n                          menuItem.caption && menuItem.caption.key === '__menu_projects' ? classes.fullHeight : '',\n                          menuItem.disableHover ? classes.disableHover : ''\n                        ])}\n                        {...menuItemProps}\n                        {...customProps}\n                    >\n                      {menuItem.caption}\n                    </MenuItem>\n                  </div>\n                </Tooltip>\n                : <MenuItem\n                key={`${key}${index}`}\n                className={classnames([\n                  menuItem.caption && menuItem.caption.key === '__new_project' ? classes.newProjectContainer : '' ,\n                  menuItem.caption && menuItem.caption.key === '__menu_projects' ? classes.fullHeight : '',\n                  menuItem.disableHover ? classes.disableHover : ''\n                ])}\n                {...menuItemProps}\n                {...customProps}\n              >\n                {menuItem.caption}\n                {this.state.pendingIndex === index && <CircularProgress size={16} className={classes.itemProgress} />}\n              </MenuItem>\n            ;\n          })\n        }\n      </Menu>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<MenuComponentProps>>(\n  withStyles(styles),\n)(NestedMenu);\n","import NestedMenu, {styleKeyNames} from './atsMenu';\n\nexport type NestedMenuStyleKeys = styleKeyNames;\n\nexport default NestedMenu;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","/*\n To use this:\n  1. import it in your containers/App/index.tsx and create the routes for it\n  2. make sure you have a QuoteSettingsMenuItems object passed to the component, in which you define the links you want\n     to have\n */\nimport * as React from 'react';\nimport {compose} from 'redux';\nimport {\n  Route,\n  Switch,\n} from 'react-router-dom';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {Link} from 'react-router-dom';\nimport {\n  List,\n  ListItem,\n  ListItemIcon,\n  ListItemText,\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\nimport {\n  SETTINGS_PATH,\n} from '../../constants';\nimport {ISettingsMenuItem, ISettingsMenuLink} from '../../models/SettingsMenu';\nimport classnames from 'classnames';\nimport ErrorBoundary from '../ErrorBoundary';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport NotFoundPage from '../../pages/NotFoundPage';\n\ninterface ISettingsMenuProps {\n  items: ISettingsMenuItem[];\n  location: any;\n}\n\ntype SettingsMenuPropsWithStyles = ISettingsMenuProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\ninterface ISettingMenuState {\n  menuOpen: boolean;\n  menuWidth: number;\n}\n\nconst iconWidth = 2.5;\n\nconst styles = (theme: Theme): StyleRules => ({\n  errorBoundaryContainer: {\n    height: '100%',\n  },\n  nested: {\n    paddingLeft: (4 + iconWidth) * theme.spacing(),\n  },\n  settingContent: {\n    width: 0, // the side menu width is set dynamically, so let flex auto set this width\n    flex: 'auto',\n    overflowY: 'auto',\n  },\n  settingContentLayer: {\n    height: '100%',\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  noMargin: {\n    margin: `0 ${theme.spacing()}px`,\n    width: iconWidth * theme.spacing(),\n    minWidth: 0,\n  },\n  noWordBreak: {\n    wordBreak: 'break-word',\n  },\n  disablePointerEvents: {\n    pointerEvents: 'none',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap'\n  },\n  buttonRipple: {\n    color: theme.palette.grey[100]\n  },\n  linkItemTextContainer: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    color: theme.palette.text.primary,\n  },\n  linkItemText: {\n    whiteSpace: 'nowrap'\n  },\n  root: {\n    flexGrow: 1,\n    height: 0,\n  },\n  sideMenu: {\n    overflowY: 'auto',\n    backgroundColor: 'white',\n    boxShadow: theme.shadows[1],\n    transition: theme.transitions.create(['width', 'z-index'], {\n      easing: theme.transitions.easing.easeInOut,\n      duration: theme.transitions.duration.complex,\n    }),\n    [theme.breakpoints.down('xs')]: {\n      width: 0,\n      zIndex: -1\n    }\n  },\n  collapseButton: {\n    width: 0,\n    overflow: 'hidden',\n    [theme.breakpoints.down('xs')]: {\n      width: 19,\n      height: 65,\n      position: 'fixed',\n      color: 'white',\n      background: theme.palette.grey[700],\n      borderRadius: `0 5px 5px 0`,\n      bottom: 'calc(50% + 100px)',\n      cursor: 'pointer',\n    }\n  },\n  closedMenuSelectedItem: {\n    backgroundColor: 'white !important'\n  },\n  settingHeaderLabel: {\n    color: theme.palette.text.primary\n  }\n});\n\nconst shouldOverrideOnClick = disabled => Object.assign({}, disabled && {\n  onClick: ev => ev.preventDefault()\n});\n\nclass SettingsMenu extends React.Component<SettingsMenuPropsWithStyles, ISettingMenuState> {\n  public refMenu = React.createRef<HTMLDivElement>();\n  public refContent = React.createRef<HTMLDivElement>();\n  public state = {\n    menuWidth: 0,\n    menuOpen: document.documentElement.clientWidth >= 600,\n  };\n\n  public widthListener = () => this.setState({\n    menuOpen: document.documentElement.clientWidth >= 600,\n    menuWidth: Math.max(this.refMenu.current.offsetWidth, this.state.menuWidth)\n  })\n\n  public componentDidMount = () => window.addEventListener('resize', this.widthListener);\n\n  public componentWillUnmount = () => window.removeEventListener('resize', this.widthListener);\n\n  public checkIfActiveRoute(route) {\n    const { pathname } = this.props.location;\n\n    return pathname === route;\n  }\n\n  public toggleSideMenu = (open?: boolean) => document.documentElement.clientWidth < 600 && this.setState({ menuOpen: open === undefined ? !this.state.menuOpen : open });\n\n  public render() {\n    const {\n      menuOpen,\n      menuWidth\n    } = this.state;\n    const {\n      classes,\n      items,\n      t,\n    } = this.props;\n\n    return (\n      <Grid container={true} className={classes.root} wrap='nowrap'>\n        <Grid\n          item={true}\n          className={classes.sideMenu}\n          style={{\n            width: menuOpen ? (menuWidth || 'auto') : 0,\n            zIndex: menuOpen ? 0 : -1\n          }}\n        >\n          <List\n            component='nav'\n            ref={this.refMenu}\n          >\n            {items.map((menuItem: ISettingsMenuItem) => (\n              <React.Fragment key={`__${menuItem.label}`}>\n                <ListItem\n                  button={true}\n                  classes={{\n                    root: classnames(classes.noWordBreak, classes.disablePointerEvents)\n                  }}\n                  onClick={ev => ev.preventDefault()}\n                >\n                  <ListItemIcon className={classes.noMargin}>\n                    <FontAwesomeIcon icon={menuItem.icon}/>\n                  </ListItemIcon>\n                  <ListItemText primary={t(menuItem.label)} classes={{ primary: classes.settingHeaderLabel }} />\n                </ListItem>\n                <List disablePadding={true}>\n                  {\n                    menuItem.links.filter((link) => !link.hideInMenu).map((link: ISettingsMenuLink) =>\n                      <Link\n                        to={`${SETTINGS_PATH}${link.to}`}\n                        key={`__${link.label}`}\n                        {...shouldOverrideOnClick(link.listItemProps && link.listItemProps.disabled)}\n                      >\n                        <ListItem\n                          {...link.listItemProps}\n                          button={true}\n                          classes={{\n                            root: classnames(classes.nested, classes.noWordBreak),\n                            selected: menuOpen ? '' : classes.closedMenuSelectedItem\n                          }}\n                          TouchRippleProps={{ classes: { root: classes.buttonRipple }}}\n                          selected={this.checkIfActiveRoute(`${SETTINGS_PATH}${link.to}`)}\n                          onClick={() => {\n                            this.toggleSideMenu(false);\n\n                            if (this.refContent.current.scrollTo) { /* check for IE+Edge browser compatibility */\n                              this.refContent.current.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n                            } else {\n                              this.refContent.current.scrollTop = 0;\n                              this.refContent.current.scrollLeft = 0;\n                            }\n                          }}\n                        >\n                          <ListItemText primary={t(link.label)} className={classes.linkItemTextContainer} classes={{primary: classes.linkItemText}}/>\n                        </ListItem>\n                      </Link>\n                    )\n                  }\n                </List>\n              </React.Fragment>\n            ))}\n          </List>\n        </Grid>\n        <Grid item={true} ref={this.refContent} className={classes.settingContent}>\n          <div className={classes.settingContentLayer}>\n            <Switch>\n              {items.reduce((links, item) => {\n                return links.concat(item.links);\n              }, []).filter((link) => link.component != null).map((link) => {\n                return <Route\n                  key={`__${link.to}`}\n                  path={`${SETTINGS_PATH}${link.to}`}\n                  exact={true}\n                  render={() => {\n                    return <ErrorBoundary\n                      errorMessage='Settings Error'\n                      classes={{\n                        container: classes.errorBoundaryContainer,\n                      }}\n                    >\n                      <link.component />\n                    </ErrorBoundary>;\n                  }}\n                />;\n              })}\n              <Route component={NotFoundPage}/>\n            </Switch>\n            <Grid\n              container={true}\n              justify='center'\n              alignItems='center'\n              className={classes.collapseButton}\n              onClick={() => this.toggleSideMenu()}\n            >\n              <ArrowLeftIcon fontSize='small' style={{ transform: menuOpen ? 'scaleX(1)' : 'scaleX(-1)'}} />\n            </Grid>\n          </div>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nexport default compose<React.ComponentClass<ISettingsMenuProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(SettingsMenu);\n","import * as React from 'react';\nimport {\n  Theme,\n  Select,\n  MenuItem,\n  FormControl,\n  InputLabel,\n} from '@material-ui/core';\nimport {\n  WithStyles,\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectSelectedProjectId,\n  makeSelectProjects,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  SelectProjectAction,\n} from '../../modules/ProjectModule/actions';\nimport { Map } from 'immutable';\nimport { Project } from '../../models';\n\ninterface IProjectSelectorComponentProps {\n  projectId?: number;\n  onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;\n}\n\ninterface IProjectSelectorProps extends IProjectSelectorComponentProps {\n  selectedProjectId: number;\n  projects: Map<number, IMap<Project>>;\n  dispatch: React.Dispatch<IAction>;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  formControl: {\n    margin: theme.spacing(),\n    minWidth: 120,\n  },\n});\n\ntype ProjectSelectorType = IProjectSelectorProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ProjectSelector extends React.Component<ProjectSelectorType, {}> {\n  public selectProject = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    const projectId = (e.target as HTMLInputElement).value;\n    if (projectId != null) {\n      dispatch(new SelectProjectAction({projectId: parseInt(projectId, 10)}));\n    }\n  }\n\n  public render() {\n    const {\n      selectedProjectId,\n      projectId: controlledProjectId,\n      projects,\n      classes,\n      onChange: controlledOnChange,\n      t,\n    } = this.props;\n\n    const onChange = controlledOnChange != null ? controlledOnChange : this.selectProject;\n    const projectId = controlledProjectId != null ? controlledProjectId : selectedProjectId;\n\n    return (\n      <FormControl className={classes.formControl}>\n        <InputLabel htmlFor='selected-projectId'>{t('ProjectSelector.project')}</InputLabel>\n        <Select\n          onChange={onChange}\n          value={projectId}\n          inputProps={{\n            name: 'selectedProjectId',\n            id: 'selected-projectId',\n          }}\n        >\n          {\n            projects.map((project: IMap<Project>, elProjectId: number) => {\n              return (<MenuItem key={elProjectId} value={elProjectId}>{project.get('id')} {\n                project.get('name') || t('ProjectSelector.unnamed')\n              }</MenuItem>);\n            }).valueSeq().toArray().sort((a: any, b: any) => {\n              return a.key - b.key;\n            })\n          }\n        </Select>\n      </FormControl>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  selectedProjectId: makeSelectSelectedProjectId(),\n  projects: makeSelectProjects(),\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<AnyAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectSelectorComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(ProjectSelector);","import ProjectSelector from './ProjectSelector';\n\nexport default ProjectSelector;","import * as React from 'react';\nimport classNames from 'classnames';\nimport { camelizeString } from '../../utils/camelizeString';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport {\n  Menu,\n  MenuItem,\n  ListItemText,\n  WithStyles,\n  withStyles,\n  Tooltip, Grid\n} from '@material-ui/core';\nimport Typography, {\n  TypographyProps,\n} from '@material-ui/core/Typography';\nimport {StyleRules} from '@material-ui/core/styles';\nimport {compose} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport { ListItem } from '../../models';\nimport {\n  List,\n  getIn,\n  fromJS,\n} from 'immutable';\nimport LockRoundedIcon from '@material-ui/icons/LockRounded';\nimport i18next from 'i18next';\n\nexport const convertToStatusPath = (rawStatus: string, translated?: boolean) => {\n  const camelizedPhase = camelizeString(rawStatus);\n  if (translated) {\n    return i18next.t(`translations:status.${camelizedPhase}`, rawStatus);\n  }\n  return `status.${camelizedPhase}`;\n};\n\nconst styles = (theme: any): StyleRules => {\n  return {\n    chip: {\n      borderRadius: theme.shape.borderRadius,\n      fontSize: '14px',\n      padding: '6px 10px',\n      textTransform: 'uppercase',\n      width: 'auto',\n      minWidth: 170,\n      cursor: 'pointer',\n      textAlign: 'center'\n    },\n    'inProgress': {\n      background: getIn(theme.palette, ['status', 'inProgress'], 'none'),\n    },\n    'pendingApproval': {\n      background: getIn(theme.palette, ['status', 'pendingApproval'], 'none'),\n    },\n    'awarded': {\n      background: getIn(theme.palette, ['status', 'awarded'], 'none'),\n    },\n    'rejected': {\n      background: getIn(theme.palette, ['status', 'rejected'], 'none'),\n    },\n    passed: {\n      background: getIn(theme.palette, ['status', 'passed'], 'none'),\n    },\n    missed: {\n      background: getIn(theme.palette, ['status', 'missed'], 'none'),\n    },\n    quoted: {\n      background: getIn(theme.palette, ['status', 'quoted'], 'none'),\n    },\n    lost: {\n      background: getIn(theme.palette, ['status', 'lost'], 'none'),\n    },\n    won: {\n      background: getIn(theme.palette, ['status', 'won'], 'none'),\n    },\n    'created': {\n      background: getIn(theme.palette, ['status', 'created'], 'none'),\n    },\n    'completed': {\n      background: getIn(theme.palette, ['status', 'completed'], 'none'),\n    },\n    disabledContainer: {\n      background: theme.palette.action.disabledBackground,\n      cursor: 'default'\n    },\n    disabledText: {\n      color: theme.palette.text.secondary,\n      width: '100%'\n    }\n  };\n};\n\ninterface IStatusChipComponentProps {\n  status: string;\n  anchorEl: HTMLElement | ((element: HTMLElement) => HTMLElement);\n  handleOpen?: (event?: any) => void;\n  handleExit?: (event?: any) => void;\n  handleClose?: (event?: any) => void;\n  changeStatus?:  (newStatus?: IMap<ListItem<any, any>>, e?: any) => void;\n  TypographyProps?: TypographyProps;\n  options?: List<IMap<ListItem<any, any>>>;\n  disabled?: boolean;\n  disabledTooltip?: string;\n  canDisplayLockIcon?: boolean;\n  styleOverride?: any;\n}\n\ninterface IStatusChipProps extends IStatusChipComponentProps {\n\n}\n\ntype StatusChipProps = IStatusChipProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst StatusChip: React.FC<StatusChipProps> =\n  ({\n     classes,\n     t,\n     status,\n     anchorEl,\n     handleOpen,\n     handleExit,\n     handleClose,\n     changeStatus,\n     options,\n     TypographyProps: LocalTypographyProps,\n     disabled,\n     disabledTooltip,\n     canDisplayLockIcon = true,\n     styleOverride,\n   }) => {\n\n    const statusMap = options.reduce((sm, listItem) => {\n      const value = listItem.get('value');\n      const camelizedPhase = camelizeString(value);\n      return sm.set(value, fromJS({\n        label: t(`status.${camelizedPhase}`, value),\n        color: camelizedPhase,\n        value\n      }));\n    }, fromJS({}));\n\n    return (\n      <React.Fragment>\n        <Tooltip\n          title={\n            disabled\n              ? disabledTooltip ?? t('quoteStatusChip.lockedTooltip')\n              : statusMap.getIn([status, 'label'], status)\n          }\n        >\n          <div\n            onClick={disabled ? null : handleOpen}\n            aria-owns={anchorEl ? 'change-status' : undefined}\n            className={classNames(classes.chip, disabled ? classes.disabledContainer : classes[statusMap.getIn([status, 'color'])])}\n            style={styleOverride && styleOverride.chip || {}}\n            onMouseDown={e => e.stopPropagation()}\n          >\n            <Grid container={true} justify='center' alignItems='center' wrap='nowrap'>\n              { (disabled && canDisplayLockIcon) ? <LockRoundedIcon fontSize='small' color='disabled' /> : null }\n              <Typography\n                className={disabled ? classes.disabledText : ''} {...LocalTypographyProps}\n                style={{\n                  textOverflow: 'ellipsis',\n                  overflow: 'hidden',\n                }}\n              >\n                {statusMap.getIn([status, 'label'], status)}\n              </Typography>\n            </Grid>\n          </div>\n        </Tooltip>\n        <Menu\n          id='change-status'\n          anchorEl={anchorEl}\n          open={Boolean(anchorEl)}\n          // onExit={() => handleExit(statusMap.getIn([status, 'color']))}\n          onClose={handleClose}\n        >\n          {options.map((option, index) => (\n            <MenuItem key={index} value={option.get('value')} onClick={(e) => changeStatus(option, e)}>\n              <ListItemText classes={{primary: classes.primary}}\n                inset={false}\n                primary={statusMap.getIn([option.get('value'), 'label'], option.get('value'))}\n              />\n            </MenuItem>\n          ))\n          }\n        </Menu>\n      </React.Fragment>\n    );\n  };\n\nexport default compose<React.ComponentClass<IStatusChipProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(StatusChip);\n","import StatusChip from './StatusChip';\n\nexport default StatusChip;","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","import type {\n  CaptureContext,\n  Client,\n  ClientOptions,\n  Event,\n  EventHint,\n  Scope as ScopeInterface,\n  ScopeContext,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors';\nimport { Scope, getGlobalScope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\nimport { spanToJSON } from './spanUtils';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n  | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n  | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n  client?: Client,\n  isolationScope?: Scope,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  // TODO (v8): Update this order to be: Global > Client > Scope\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // eslint-disable-next-line deprecation/deprecation\n    ...getGlobalEventProcessors(),\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n *  Enhances event using the client configuration.\n *  It takes care of all \"static\" values like environment, release and `dist`,\n *  as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event!.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts && event.contexts.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      const data = spanToJSON(span).data;\n\n      if (data) {\n        // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n        // eslint-disable-next-line deprecation/deprecation\n        span.data = normalize(data, depth, maxBreadth);\n      }\n\n      return span;\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n  hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","/* eslint no-var: 0 */\nvar main = require('./dist/commonjs/index.js').default;\n\nmodule.exports = main;\nmodule.exports.default = main;\n","/* eslint no-var: 0 */\nvar main = require('./dist/commonjs/index.js').default;\n\nmodule.exports = main;\nmodule.exports.default = main;\n","import { Api } from 'ats-api/src';\n\nexport const API_GATEWAY_ENV = 'ENDPOINT_APIGATEWAY';\n\n/**\n * Registers a direct URL-path endpoint into atsApi.endpointData so callApi can\n * resolve it like a swagger-described one.\n *\n * A service starting with '/' is gateway-relative: its base URL is\n * `${ENDPOINT_APIGATEWAY}${service}` (e.g. service '/mspim' -> `${gateway}/mspim`)\n * instead of requiring a dedicated `ENDPOINT_<SERVICE>` env entry. An unprefixed\n * service keeps today's behavior and never falls back to the gateway.\n *\n * An endpoint already known for the service is left alone (swagger data wins), and\n * loadEndpoints resets endpointData — so call this before every use, not once.\n */\nexport const registerDirectApiEndpoint = (atsApi: Api, { service, endpoint, method }: {\n  service: string,\n  endpoint: string,\n  method?: string,\n}) => {\n  const api = atsApi as any;\n  const serviceKey = service.toLowerCase();\n  if (api.endpointData?.[serviceKey]?.[endpoint]) {\n    return;\n  }\n  const isGatewayRelative = serviceKey.startsWith('/');\n  api.endpointData = {\n    ...api.endpointData,\n    [serviceKey]: {\n      ...api.endpointData?.[serviceKey],\n      [endpoint]: {\n        method,\n        url: isGatewayRelative ? `${serviceKey}${endpoint}` : endpoint,\n        env: isGatewayRelative ? API_GATEWAY_ENV : `ENDPOINT_${service.toUpperCase()}`,\n      },\n    },\n  };\n};\n","import React from 'react';\nvar ThemeContext = React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n  ThemeContext.displayName = 'ThemeContext';\n}\n\nexport default ThemeContext;","var hasSymbol = typeof Symbol === 'function' && Symbol.for;\nexport default hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__';","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n  mobileStepper: 1000,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nexport default zIndex;","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/3ffe3a5d82f6f561b82ff78d82b32a7d14aed558/js/src/modal.js#L512-L519\nexport default function getScrollbarSize() {\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '99px';\n  scrollDiv.style.height = '99px';\n  scrollDiv.style.position = 'absolute';\n  scrollDiv.style.top = '-9999px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarSize;\n}","import React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar RadioGroupContext = React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n  RadioGroupContext.displayName = 'RadioGroupContext';\n}\n\nexport default RadioGroupContext;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"formulaParser\"] = factory();\n\telse\n\t\troot[\"formulaParser\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 15);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nexports.nil = new Error('#NULL!');\nexports.div0 = new Error('#DIV/0!');\nexports.value = new Error('#VALUE!');\nexports.ref = new Error('#REF!');\nexports.name = new Error('#NAME?');\nexports.num = new Error('#NUM!');\nexports.na = new Error('#N/A');\nexports.error = new Error('#ERROR!');\nexports.data = new Error('#GETTING_DATA');\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\n\nexports.flattenShallow = function(array) {\n  if (!array || !array.reduce) {\n    return array;\n  }\n\n  return array.reduce(function(a, b) {\n    var aIsArray = Array.isArray(a);\n    var bIsArray = Array.isArray(b);\n\n    if (aIsArray && bIsArray ) {\n      return a.concat(b);\n    }\n    if (aIsArray) {\n      a.push(b);\n\n      return a;\n    }\n    if (bIsArray) {\n      return [a].concat(b);\n    }\n\n    return [a, b];\n  });\n};\n\nexports.isFlat = function(array) {\n  if (!array) {\n    return false;\n  }\n\n  for (var i = 0; i < array.length; ++i) {\n    if (Array.isArray(array[i])) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nexports.flatten = function() {\n  var result = exports.argsToArray.apply(null, arguments);\n\n  while (!exports.isFlat(result)) {\n    result = exports.flattenShallow(result);\n  }\n\n  return result;\n};\n\nexports.argsToArray = function(args) {\n  var result = [];\n\n  exports.arrayEach(args, function(value) {\n    result.push(value);\n  });\n\n  return result;\n};\n\nexports.numbers = function() {\n  var possibleNumbers = this.flatten.apply(null, arguments);\n  return possibleNumbers.filter(function(el) {\n    return typeof el === 'number';\n  });\n};\n\nexports.cleanFloat = function(number) {\n  var power = 1e14;\n  return Math.round(number * power) / power;\n};\n\nexports.parseBool = function(bool) {\n  if (typeof bool === 'boolean') {\n    return bool;\n  }\n\n  if (bool instanceof Error) {\n    return bool;\n  }\n\n  if (typeof bool === 'number') {\n    return bool !== 0;\n  }\n\n  if (typeof bool === 'string') {\n    var up = bool.toUpperCase();\n    if (up === 'TRUE') {\n      return true;\n    }\n\n    if (up === 'FALSE') {\n      return false;\n    }\n  }\n\n  if (bool instanceof Date && !isNaN(bool)) {\n    return true;\n  }\n\n  return error.value;\n};\n\nexports.parseNumber = function(string) {\n  if (string === undefined || string === '') {\n    return error.value;\n  }\n  if (!isNaN(string)) {\n    return parseFloat(string);\n  }\n\n  return error.value;\n};\n\nexports.parseNumberArray = function(arr) {\n  var len;\n\n  if (!arr || (len = arr.length) === 0) {\n    return error.value;\n  }\n\n  var parsed;\n\n  while (len--) {\n    parsed = exports.parseNumber(arr[len]);\n    if (parsed === error.value) {\n      return parsed;\n    }\n    arr[len] = parsed;\n  }\n\n  return arr;\n};\n\nexports.parseMatrix = function(matrix) {\n  var n;\n\n  if (!matrix || (n = matrix.length) === 0) {\n    return error.value;\n  }\n  var pnarr;\n\n  for (var i = 0; i < matrix.length; i++) {\n    pnarr = exports.parseNumberArray(matrix[i]);\n    matrix[i] = pnarr;\n\n    if (pnarr instanceof Error) {\n      return pnarr;\n    }\n  }\n\n  return matrix;\n};\n\nvar d1900 = new Date(Date.UTC(1900, 0, 1));\nexports.parseDate = function(date) {\n  if (!isNaN(date)) {\n    if (date instanceof Date) {\n      return new Date(date);\n    }\n    var d = parseInt(date, 10);\n    if (d < 0) {\n      return error.num;\n    }\n    if (d <= 60) {\n      return new Date(d1900.getTime() + (d - 1) * 86400000);\n    }\n    return new Date(d1900.getTime() + (d - 2) * 86400000);\n  }\n  if (typeof date === 'string') {\n    date = new Date(date);\n    if (!isNaN(date)) {\n      return date;\n    }\n  }\n  return error.value;\n};\n\nexports.parseDateArray = function(arr) {\n  var len = arr.length;\n  var parsed;\n  while (len--) {\n    parsed = this.parseDate(arr[len]);\n    if (parsed === error.value) {\n      return parsed;\n    }\n    arr[len] = parsed;\n  }\n  return arr;\n};\n\nexports.anyIsError = function() {\n  var n = arguments.length;\n  while (n--) {\n    if (arguments[n] instanceof Error) {\n      return true;\n    }\n  }\n  return false;\n};\n\nexports.arrayValuesToNumbers = function(arr) {\n  var n = arr.length;\n  var el;\n  while (n--) {\n    el = arr[n];\n    if (typeof el === 'number') {\n      continue;\n    }\n    if (el === true) {\n      arr[n] = 1;\n      continue;\n    }\n    if (el === false) {\n      arr[n] = 0;\n      continue;\n    }\n    if (typeof el === 'string') {\n      var number = this.parseNumber(el);\n      if (number instanceof Error) {\n        arr[n] = 0;\n      } else {\n        arr[n] = number;\n      }\n    }\n  }\n  return arr;\n};\n\nexports.rest = function(array, idx) {\n  idx = idx || 1;\n  if (!array || typeof array.slice !== 'function') {\n    return array;\n  }\n  return array.slice(idx);\n};\n\nexports.initial = function(array, idx) {\n  idx = idx || 1;\n  if (!array || typeof array.slice !== 'function') {\n    return array;\n  }\n  return array.slice(0, array.length - idx);\n};\n\nexports.arrayEach = function(array, iteratee) {\n  var index = -1, length = array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n\n  return array;\n};\n\nexports.transpose = function(matrix) {\n  if(!matrix) {\n    return error.value;\n  }\n\n  return matrix[0].map(function(col, i) {\n    return matrix.map(function(row) {\n      return row[i];\n    });\n  });\n};\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _errors;\n\nexports['default'] = error;\nexports.isValidStrict = isValidStrict;\nvar ERROR = exports.ERROR = 'ERROR';\nvar ERROR_DIV_ZERO = exports.ERROR_DIV_ZERO = 'DIV/0';\nvar ERROR_NAME = exports.ERROR_NAME = 'NAME';\nvar ERROR_NOT_AVAILABLE = exports.ERROR_NOT_AVAILABLE = 'N/A';\nvar ERROR_NULL = exports.ERROR_NULL = 'NULL';\nvar ERROR_NUM = exports.ERROR_NUM = 'NUM';\nvar ERROR_REF = exports.ERROR_REF = 'REF';\nvar ERROR_VALUE = exports.ERROR_VALUE = 'VALUE';\n\nvar errors = (_errors = {}, _errors[ERROR] = '#ERROR!', _errors[ERROR_DIV_ZERO] = '#DIV/0!', _errors[ERROR_NAME] = '#NAME?', _errors[ERROR_NOT_AVAILABLE] = '#N/A', _errors[ERROR_NULL] = '#NULL!', _errors[ERROR_NUM] = '#NUM!', _errors[ERROR_REF] = '#REF!', _errors[ERROR_VALUE] = '#VALUE!', _errors);\n\n/**\n * Return error type based on provided error id.\n *\n * @param {String} type Error type.\n * @returns {String|null} Returns error id.\n */\nfunction error(type) {\n  var result = void 0;\n\n  type = (type + '').replace(/#|!|\\?/g, '');\n\n  if (errors[type]) {\n    result = errors[type];\n  }\n\n  return result ? result : null;\n}\n\n/**\n * Check if error type is strict valid with knows errors.\n *\n * @param {String} Error type.\n * @return {Boolean}\n */\nfunction isValidStrict(type) {\n  var valid = false;\n\n  for (var i in errors) {\n    if (Object.prototype.hasOwnProperty.call(errors, i) && errors[i] === type) {\n      valid = true;\n      break;\n    }\n  }\n\n  return valid;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.toNumber = toNumber;\nexports.invertNumber = invertNumber;\n/**\n * Convert value into number.\n *\n * @param {String|Number} number\n * @returns {*}\n */\nfunction toNumber(number) {\n  var result = void 0;\n\n  if (typeof number === 'number') {\n    result = number;\n  } else if (typeof number === 'string') {\n    result = number.indexOf('.') > -1 ? parseFloat(number) : parseInt(number, 10);\n  }\n\n  return result;\n}\n\n/**\n * Invert provided number.\n *\n * @param {Number} number\n * @returns {Number} Returns inverted number.\n */\nfunction invertNumber(number) {\n  return -1 * toNumber(number);\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(1);\nvar error = __webpack_require__(0);\nvar statistical = __webpack_require__(5);\nvar information = __webpack_require__(8);\nvar evalExpression = __webpack_require__(7);\n\nexports.ABS = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.abs(number);\n\n  return result;\n};\n\nexports.ACOS = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.acos(number);\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.ACOSH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.log(number + Math.sqrt(number * number - 1));\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.ACOT = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.atan(1 / number);\n\n  return result;\n};\n\nexports.ACOTH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = 0.5 * Math.log((number + 1) / (number - 1));\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\n//TODO: use options\nexports.AGGREGATE = function(function_num, options, ref1, ref2) {\n  function_num = utils.parseNumber(function_num);\n  options = utils.parseNumber(function_num);\n  if (utils.anyIsError(function_num, options)) {\n    return error.value;\n  }\n  switch (function_num) {\n    case 1:\n      return statistical.AVERAGE(ref1);\n    case 2:\n      return statistical.COUNT(ref1);\n    case 3:\n      return statistical.COUNTA(ref1);\n    case 4:\n      return statistical.MAX(ref1);\n    case 5:\n      return statistical.MIN(ref1);\n    case 6:\n      return exports.PRODUCT(ref1);\n    case 7:\n      return statistical.STDEV.S(ref1);\n    case 8:\n      return statistical.STDEV.P(ref1);\n    case 9:\n      return exports.SUM(ref1);\n    case 10:\n      return statistical.VAR.S(ref1);\n    case 11:\n      return statistical.VAR.P(ref1);\n    case 12:\n      return statistical.MEDIAN(ref1);\n    case 13:\n      return statistical.MODE.SNGL(ref1);\n    case 14:\n      return statistical.LARGE(ref1, ref2);\n    case 15:\n      return statistical.SMALL(ref1, ref2);\n    case 16:\n      return statistical.PERCENTILE.INC(ref1, ref2);\n    case 17:\n      return statistical.QUARTILE.INC(ref1, ref2);\n    case 18:\n      return statistical.PERCENTILE.EXC(ref1, ref2);\n    case 19:\n      return statistical.QUARTILE.EXC(ref1, ref2);\n  }\n};\n\nexports.ARABIC = function(text) {\n  // Credits: Rafa? Kukawski\n  if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\n    return error.value;\n  }\n  var r = 0;\n  text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {\n    r += {\n      M: 1000,\n      CM: 900,\n      D: 500,\n      CD: 400,\n      C: 100,\n      XC: 90,\n      L: 50,\n      XL: 40,\n      X: 10,\n      IX: 9,\n      V: 5,\n      IV: 4,\n      I: 1\n    }[i];\n  });\n  return r;\n};\n\nexports.ASIN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.asin(number);\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.ASINH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.log(number + Math.sqrt(number * number + 1));\n};\n\nexports.ATAN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.atan(number);\n};\n\nexports.ATAN2 = function(number_x, number_y) {\n  number_x = utils.parseNumber(number_x);\n  number_y = utils.parseNumber(number_y);\n  if (utils.anyIsError(number_x, number_y)) {\n    return error.value;\n  }\n  return Math.atan2(number_x, number_y);\n};\n\nexports.ATANH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var result = Math.log((1 + number) / (1 - number)) / 2;\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.BASE = function(number, radix, min_length) {\n  min_length = min_length || 0;\n\n  number = utils.parseNumber(number);\n  radix = utils.parseNumber(radix);\n  min_length = utils.parseNumber(min_length);\n  if (utils.anyIsError(number, radix, min_length)) {\n    return error.value;\n  }\n  min_length = (min_length === undefined) ? 0 : min_length;\n  var result = number.toString(radix);\n  return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result;\n};\n\nexports.CEILING = function(number, significance, mode) {\n  significance = (significance === undefined) ? 1 : Math.abs(significance);\n  mode = mode || 0;\n\n  number = utils.parseNumber(number);\n  significance = utils.parseNumber(significance);\n  mode = utils.parseNumber(mode);\n  if (utils.anyIsError(number, significance, mode)) {\n    return error.value;\n  }\n  if (significance === 0) {\n    return 0;\n  }\n  var precision = -Math.floor(Math.log(significance) / Math.log(10));\n  if (number >= 0) {\n    return exports.ROUND(Math.ceil(number / significance) * significance, precision);\n  } else {\n    if (mode === 0) {\n      return -exports.ROUND(Math.floor(Math.abs(number) / significance) * significance, precision);\n    } else {\n      return -exports.ROUND(Math.ceil(Math.abs(number) / significance) * significance, precision);\n    }\n  }\n};\n\nexports.CEILING.MATH = exports.CEILING;\n\nexports.CEILING.PRECISE = exports.CEILING;\n\nexports.COMBIN = function(number, number_chosen) {\n  number = utils.parseNumber(number);\n  number_chosen = utils.parseNumber(number_chosen);\n  if (utils.anyIsError(number, number_chosen)) {\n    return error.value;\n  }\n  return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen));\n};\n\nexports.COMBINA = function(number, number_chosen) {\n  number = utils.parseNumber(number);\n  number_chosen = utils.parseNumber(number_chosen);\n  if (utils.anyIsError(number, number_chosen)) {\n    return error.value;\n  }\n  return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1);\n};\n\nexports.COS = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.cos(number);\n};\n\nexports.COSH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return (Math.exp(number) + Math.exp(-number)) / 2;\n};\n\nexports.COT = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return 1 / Math.tan(number);\n};\n\nexports.COTH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var e2 = Math.exp(2 * number);\n  return (e2 + 1) / (e2 - 1);\n};\n\nexports.CSC = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return 1 / Math.sin(number);\n};\n\nexports.CSCH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return 2 / (Math.exp(number) - Math.exp(-number));\n};\n\nexports.DECIMAL = function(number, radix) {\n  if (arguments.length < 1) {\n    return error.value;\n  }\n\n  return parseInt(number, radix);\n};\n\nexports.DEGREES = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return number * 180 / Math.PI;\n};\n\nexports.EVEN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return exports.CEILING(number, -2, -1);\n};\n\nexports.EXP = function(number) {\n  if (arguments.length < 1) {\n    return error.na;\n  }\n  if (typeof number !== 'number' || arguments.length > 1) {\n    return error.error;\n  }\n\n  number = Math.exp(number);\n\n  return number;\n};\n\nvar MEMOIZED_FACT = [];\nexports.FACT = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var n = Math.floor(number);\n  if (n === 0 || n === 1) {\n    return 1;\n  } else if (MEMOIZED_FACT[n] > 0) {\n    return MEMOIZED_FACT[n];\n  } else {\n    MEMOIZED_FACT[n] = exports.FACT(n - 1) * n;\n    return MEMOIZED_FACT[n];\n  }\n};\n\nexports.FACTDOUBLE = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var n = Math.floor(number);\n  if (n <= 0) {\n    return 1;\n  } else {\n    return n * exports.FACTDOUBLE(n - 2);\n  }\n};\n\nexports.FLOOR = function(number, significance) {\n  number = utils.parseNumber(number);\n  significance = utils.parseNumber(significance);\n  if (utils.anyIsError(number, significance)) {\n    return error.value;\n  }\n  if (significance === 0) {\n    return 0;\n  }\n\n  if (!(number > 0 && significance > 0) && !(number < 0 && significance < 0)) {\n    return error.num;\n  }\n\n  significance = Math.abs(significance);\n  var precision = -Math.floor(Math.log(significance) / Math.log(10));\n  if (number >= 0) {\n    return exports.ROUND(Math.floor(number / significance) * significance, precision);\n  } else {\n    return -exports.ROUND(Math.ceil(Math.abs(number) / significance), precision);\n  }\n};\n\n//TODO: Verify\nexports.FLOOR.MATH = function(number, significance, mode) {\n  significance = (significance === undefined) ? 1 : significance;\n  mode = (mode === undefined) ? 0 : mode;\n\n  number = utils.parseNumber(number);\n  significance = utils.parseNumber(significance);\n  mode = utils.parseNumber(mode);\n  if (utils.anyIsError(number, significance, mode)) {\n    return error.value;\n  }\n  if (significance === 0) {\n    return 0;\n  }\n\n  significance = significance ? Math.abs(significance) : 1;\n  var precision = -Math.floor(Math.log(significance) / Math.log(10));\n  if (number >= 0) {\n    return exports.ROUND(Math.floor(number / significance) * significance, precision);\n  } else if (mode === 0 || mode === undefined) {\n    return -exports.ROUND(Math.ceil(Math.abs(number) / significance) * significance, precision);\n  }\n  return -exports.ROUND(Math.floor(Math.abs(number) / significance) * significance, precision);\n};\n\n// Deprecated\nexports.FLOOR.PRECISE = exports.FLOOR.MATH;\n\n// adapted http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript\nexports.GCD = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var n = range.length;\n  var r0 = range[0];\n  var x = r0 < 0 ? -r0 : r0;\n  for (var i = 1; i < n; i++) {\n    var ri = range[i];\n    var y = ri < 0 ? -ri : ri;\n    while (x && y) {\n      if (x > y) {\n        x %= y;\n      } else {\n        y %= x;\n      }\n    }\n    x += y;\n  }\n  return x;\n};\n\n\nexports.INT = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.floor(number);\n};\n\n//TODO: verify\nexports.ISO = {\n  CEILING: exports.CEILING\n};\n\nexports.LCM = function() {\n  // Credits: Jonas Raoni Soares Silva\n  var o = utils.parseNumberArray(utils.flatten(arguments));\n  if (o instanceof Error) {\n    return o;\n  }\n  for (var i, j, n, d, r = 1;\n       (n = o.pop()) !== undefined;) {\n    while (n > 1) {\n      if (n % 2) {\n        for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {\n          //empty\n        }\n        d = (i <= j) ? i : n;\n      } else {\n        d = 2;\n      }\n      for (n /= d, r *= d, i = o.length; i;\n           (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {\n        //empty\n      }\n    }\n  }\n  return r;\n};\n\nexports.LN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.log(number);\n};\n\nexports.LN10 = function() {\n  return Math.log(10);\n};\n\nexports.LN2 = function() {\n  return Math.log(2);\n};\n\nexports.LOG10E = function() {\n  return Math.LOG10E;\n};\n\nexports.LOG2E = function() {\n  return Math.LOG2E;\n};\n\nexports.LOG = function(number, base) {\n  number = utils.parseNumber(number);\n  base = utils.parseNumber(base);\n  if (utils.anyIsError(number, base)) {\n    return error.value;\n  }\n  base = (base === undefined) ? 10 : base;\n  return Math.log(number) / Math.log(base);\n};\n\nexports.LOG10 = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.log(number) / Math.log(10);\n};\n\nexports.MOD = function(dividend, divisor) {\n  dividend = utils.parseNumber(dividend);\n  divisor = utils.parseNumber(divisor);\n  if (utils.anyIsError(dividend, divisor)) {\n    return error.value;\n  }\n  if (divisor === 0) {\n    return error.div0;\n  }\n  var modulus = Math.abs(dividend % divisor);\n  return (divisor > 0) ? modulus : -modulus;\n};\n\nexports.MROUND = function(number, multiple) {\n  number = utils.parseNumber(number);\n  multiple = utils.parseNumber(multiple);\n  if (utils.anyIsError(number, multiple)) {\n    return error.value;\n  }\n  if (number * multiple < 0) {\n    return error.num;\n  }\n\n  return Math.round(number / multiple) * multiple;\n};\n\nexports.MULTINOMIAL = function() {\n  var args = utils.parseNumberArray(utils.flatten(arguments));\n  if (args instanceof Error) {\n    return args;\n  }\n  var sum = 0;\n  var divisor = 1;\n  for (var i = 0; i < args.length; i++) {\n    sum += args[i];\n    divisor *= exports.FACT(args[i]);\n  }\n  return exports.FACT(sum) / divisor;\n};\n\nexports.ODD = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var temp = Math.ceil(Math.abs(number));\n  temp = (temp & 1) ? temp : temp + 1;\n  return (number > 0) ? temp : -temp;\n};\n\nexports.PI = function() {\n  return Math.PI;\n};\n\nexports.E = function() {\n  return Math.E;\n};\n\nexports.POWER = function(number, power) {\n  number = utils.parseNumber(number);\n  power = utils.parseNumber(power);\n  if (utils.anyIsError(number, power)) {\n    return error.value;\n  }\n  var result = Math.pow(number, power);\n  if (isNaN(result)) {\n    return error.num;\n  }\n\n  return result;\n};\n\nexports.PRODUCT = function() {\n  var args = utils.parseNumberArray(utils.flatten(arguments));\n  if (args instanceof Error) {\n    return args;\n  }\n  var result = 1;\n  for (var i = 0; i < args.length; i++) {\n    result *= args[i];\n  }\n  return result;\n};\n\nexports.QUOTIENT = function(numerator, denominator) {\n  numerator = utils.parseNumber(numerator);\n  denominator = utils.parseNumber(denominator);\n  if (utils.anyIsError(numerator, denominator)) {\n    return error.value;\n  }\n  return parseInt(numerator / denominator, 10);\n};\n\nexports.RADIANS = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return number * Math.PI / 180;\n};\n\nexports.RAND = function() {\n  return Math.random();\n};\n\nexports.RANDBETWEEN = function(bottom, top) {\n  bottom = utils.parseNumber(bottom);\n  top = utils.parseNumber(top);\n  if (utils.anyIsError(bottom, top)) {\n    return error.value;\n  }\n  // Creative Commons Attribution 3.0 License\n  // Copyright (c) 2012 eqcode\n  return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;\n};\n\n// TODO\nexports.ROMAN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  // The MIT License\n  // Copyright (c) 2008 Steven Levithan\n  var digits = String(number).split('');\n  var key = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];\n  var roman = '';\n  var i = 3;\n  while (i--) {\n    roman = (key[+digits.pop() + (i * 10)] || '') + roman;\n  }\n  return new Array(+digits.join('') + 1).join('M') + roman;\n};\n\nexports.ROUND = function(number, digits) {\n  number = utils.parseNumber(number);\n  digits = utils.parseNumber(digits);\n  if (utils.anyIsError(number, digits)) {\n    return error.value;\n  }\n  return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits);\n};\n\nexports.ROUNDDOWN = function(number, digits) {\n  number = utils.parseNumber(number);\n  digits = utils.parseNumber(digits);\n  if (utils.anyIsError(number, digits)) {\n    return error.value;\n  }\n  var sign = (number > 0) ? 1 : -1;\n  return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n\nexports.ROUNDUP = function(number, digits) {\n  number = utils.parseNumber(number);\n  digits = utils.parseNumber(digits);\n  if (utils.anyIsError(number, digits)) {\n    return error.value;\n  }\n  var sign = (number > 0) ? 1 : -1;\n  return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n\nexports.SEC = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return 1 / Math.cos(number);\n};\n\nexports.SECH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return 2 / (Math.exp(number) + Math.exp(-number));\n};\n\nexports.SERIESSUM = function(x, n, m, coefficients) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  m = utils.parseNumber(m);\n  coefficients = utils.parseNumberArray(coefficients);\n  if (utils.anyIsError(x, n, m, coefficients)) {\n    return error.value;\n  }\n  var result = coefficients[0] * Math.pow(x, n);\n  for (var i = 1; i < coefficients.length; i++) {\n    result += coefficients[i] * Math.pow(x, n + i * m);\n  }\n  return result;\n};\n\nexports.SIGN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  if (number < 0) {\n    return -1;\n  } else if (number === 0) {\n    return 0;\n  } else {\n    return 1;\n  }\n};\n\nexports.SIN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.sin(number);\n};\n\nexports.SINH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return (Math.exp(number) - Math.exp(-number)) / 2;\n};\n\nexports.SQRT = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  if (number < 0) {\n    return error.num;\n  }\n  return Math.sqrt(number);\n};\n\nexports.SQRTPI = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.sqrt(number * Math.PI);\n};\n\nexports.SQRT1_2 = function() {\n  return 1 / Math.sqrt(2);\n};\n\nexports.SQRT2 = function() {\n  return Math.sqrt(2);\n};\n\nexports.SUBTOTAL = function(function_code, ref1) {\n  function_code = utils.parseNumber(function_code);\n  if (function_code instanceof Error) {\n    return function_code;\n  }\n  switch (function_code) {\n    case 1:\n      return statistical.AVERAGE(ref1);\n    case 2:\n      return statistical.COUNT(ref1);\n    case 3:\n      return statistical.COUNTA(ref1);\n    case 4:\n      return statistical.MAX(ref1);\n    case 5:\n      return statistical.MIN(ref1);\n    case 6:\n      return exports.PRODUCT(ref1);\n    case 7:\n      return statistical.STDEV.S(ref1);\n    case 8:\n      return statistical.STDEV.P(ref1);\n    case 9:\n      return exports.SUM(ref1);\n    case 10:\n      return statistical.VAR.S(ref1);\n    case 11:\n      return statistical.VAR.P(ref1);\n    // no hidden values for us\n    case 101:\n      return statistical.AVERAGE(ref1);\n    case 102:\n      return statistical.COUNT(ref1);\n    case 103:\n      return statistical.COUNTA(ref1);\n    case 104:\n      return statistical.MAX(ref1);\n    case 105:\n      return statistical.MIN(ref1);\n    case 106:\n      return exports.PRODUCT(ref1);\n    case 107:\n      return statistical.STDEV.S(ref1);\n    case 108:\n      return statistical.STDEV.P(ref1);\n    case 109:\n      return exports.SUM(ref1);\n    case 110:\n      return statistical.VAR.S(ref1);\n    case 111:\n      return statistical.VAR.P(ref1);\n\n  }\n};\n\nexports.ADD = function (num1, num2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  num1 = utils.parseNumber(num1);\n  num2 = utils.parseNumber(num2);\n  if (utils.anyIsError(num1, num2)) {\n    return error.value;\n  }\n\n  return num1 + num2;\n};\n\nexports.MINUS = function (num1, num2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  num1 = utils.parseNumber(num1);\n  num2 = utils.parseNumber(num2);\n  if (utils.anyIsError(num1, num2)) {\n    return error.value;\n  }\n\n  return num1 - num2;\n};\n\nexports.DIVIDE = function (dividend, divisor) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  dividend = utils.parseNumber(dividend);\n  divisor = utils.parseNumber(divisor);\n  if (utils.anyIsError(dividend, divisor)) {\n    return error.value;\n  }\n\n  if (divisor === 0) {\n    return error.div0;\n  }\n\n  return dividend / divisor;\n};\n\nexports.MULTIPLY = function (factor1, factor2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  factor1 = utils.parseNumber(factor1);\n  factor2 = utils.parseNumber(factor2);\n  if (utils.anyIsError(factor1, factor2)) {\n    return error.value;\n  }\n\n  return factor1 * factor2;\n};\n\nexports.GTE = function (num1, num2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  num1 = utils.parseNumber(num1);\n  num2 = utils.parseNumber(num2);\n  if (utils.anyIsError(num1, num2)) {\n    return error.error;\n  }\n\n  return num1 >= num2;\n};\n\nexports.LT = function (num1, num2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  num1 = utils.parseNumber(num1);\n  num2 = utils.parseNumber(num2);\n  if (utils.anyIsError(num1, num2)) {\n    return error.error;\n  }\n\n  return num1 < num2;\n};\n\n\nexports.LTE = function (num1, num2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  num1 = utils.parseNumber(num1);\n  num2 = utils.parseNumber(num2);\n  if (utils.anyIsError(num1, num2)) {\n    return error.error;\n  }\n\n  return num1 <= num2;\n};\n\nexports.EQ = function (value1, value2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  return value1 === value2;\n};\n\nexports.NE = function (value1, value2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  return value1 !== value2;\n};\n\nexports.POW = function (base, exponent) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  base = utils.parseNumber(base);\n  exponent = utils.parseNumber(exponent);\n  if (utils.anyIsError(base, exponent)) {\n    return error.error;\n  }\n\n  return exports.POWER(base, exponent);\n};\n\nexports.SUM = function() {\n  var result = 0;\n\n  utils.arrayEach(utils.argsToArray(arguments), function(value) {\n    if (typeof value === 'number') {\n      result += value;\n\n    } else if (typeof value === 'string') {\n      var parsed = parseFloat(value);\n\n      !isNaN(parsed) && (result += parsed);\n\n    } else if (Array.isArray(value)) {\n      result += exports.SUM.apply(null, value);\n    }\n  });\n\n  return result;\n};\n\nexports.SUMIF = function(range, criteria) {\n  range = utils.parseNumberArray(utils.flatten(range));\n\n  if (range instanceof Error) {\n    return range;\n  }\n  var result = 0;\n  var isWildcard = criteria === void 0 || criteria === '*';\n  var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + '');\n\n  for (var i = 0; i < range.length; i++) {\n    var value = range[i];\n\n    if (isWildcard) {\n      result += value;\n    } else {\n      var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n      result += (evalExpression.compute(tokens) ? value : 0);\n    }\n  }\n\n  return result;\n};\n\nexports.SUMIFS = function() {\n  var args = utils.argsToArray(arguments);\n  var range = utils.parseNumberArray(utils.flatten(args.shift()));\n\n  if (range instanceof Error) {\n    return range;\n  }\n  var criterias = args;\n  var n_range_elements = range.length;\n  var criteriaLength = criterias.length;\n  var result = 0;\n\n  for (var i = 0; i < n_range_elements; i++) {\n    var value = range[i];\n    var isMeetCondition = false;\n\n    for (var j = 0; j < criteriaLength; j++) {\n      var criteria = criterias[j];\n      var isWildcard = criteria === void 0 || criteria === '*';\n      var computedResult = false;\n\n      if (isWildcard) {\n        computedResult = true;\n      } else {\n        var tokenizedCriteria = evalExpression.parse(criteria + '');\n        var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n        computedResult = evalExpression.compute(tokens);\n      }\n\n      // Criterias are calculated as AND so any `false` breakes the loop as unmeet condition\n      if (!computedResult) {\n        isMeetCondition = false;\n        break;\n      }\n\n      isMeetCondition = true;\n    }\n\n    if (isMeetCondition) {\n      result += value;\n    }\n  }\n\n  return result;\n};\n\nexports.SUMPRODUCT = function() {\n  if (!arguments || arguments.length === 0) {\n    return error.value;\n  }\n  var arrays = arguments.length + 1;\n  var result = 0;\n  var product;\n  var k;\n  var _i;\n  var _ij;\n  for (var i = 0; i < arguments[0].length; i++) {\n    if (!(arguments[0][i] instanceof Array)) {\n      product = 1;\n      for (k = 1; k < arrays; k++) {\n        _i = utils.parseNumber(arguments[k - 1][i]);\n        if (_i instanceof Error) {\n          return _i;\n        }\n        product *= _i;\n      }\n      result += product;\n    } else {\n      for (var j = 0; j < arguments[0][i].length; j++) {\n        product = 1;\n        for (k = 1; k < arrays; k++) {\n          _ij = utils.parseNumber(arguments[k - 1][i][j]);\n          if (_ij instanceof Error) {\n            return _ij;\n          }\n          product *= _ij;\n        }\n        result += product;\n      }\n    }\n  }\n  return result;\n};\n\nexports.SUMSQ = function() {\n  var numbers = utils.parseNumberArray(utils.flatten(arguments));\n  if (numbers instanceof Error) {\n    return numbers;\n  }\n  var result = 0;\n  var length = numbers.length;\n  for (var i = 0; i < length; i++) {\n    result += (information.ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0;\n  }\n  return result;\n};\n\nexports.SUMX2MY2 = function(array_x, array_y) {\n  array_x = utils.parseNumberArray(utils.flatten(array_x));\n  array_y = utils.parseNumberArray(utils.flatten(array_y));\n  if (utils.anyIsError(array_x, array_y)) {\n    return error.value;\n  }\n  var result = 0;\n  for (var i = 0; i < array_x.length; i++) {\n    result += array_x[i] * array_x[i] - array_y[i] * array_y[i];\n  }\n  return result;\n};\n\nexports.SUMX2PY2 = function(array_x, array_y) {\n  array_x = utils.parseNumberArray(utils.flatten(array_x));\n  array_y = utils.parseNumberArray(utils.flatten(array_y));\n  if (utils.anyIsError(array_x, array_y)) {\n    return error.value;\n  }\n  var result = 0;\n  array_x = utils.parseNumberArray(utils.flatten(array_x));\n  array_y = utils.parseNumberArray(utils.flatten(array_y));\n  for (var i = 0; i < array_x.length; i++) {\n    result += array_x[i] * array_x[i] + array_y[i] * array_y[i];\n  }\n  return result;\n};\n\nexports.SUMXMY2 = function(array_x, array_y) {\n  array_x = utils.parseNumberArray(utils.flatten(array_x));\n  array_y = utils.parseNumberArray(utils.flatten(array_y));\n  if (utils.anyIsError(array_x, array_y)) {\n    return error.value;\n  }\n  var result = 0;\n  array_x = utils.flatten(array_x);\n  array_y = utils.flatten(array_y);\n  for (var i = 0; i < array_x.length; i++) {\n    result += Math.pow(array_x[i] - array_y[i], 2);\n  }\n  return result;\n};\n\nexports.TAN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return Math.tan(number);\n};\n\nexports.TANH = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  var e2 = Math.exp(2 * number);\n  return (e2 - 1) / (e2 + 1);\n};\n\nexports.TRUNC = function(number, digits) {\n  digits = (digits === undefined) ? 0 : digits;\n  number = utils.parseNumber(number);\n  digits = utils.parseNumber(digits);\n  if (utils.anyIsError(number, digits)) {\n    return error.value;\n  }\n  var sign = (number > 0) ? 1 : -1;\n  return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar mathTrig = __webpack_require__(4);\nvar text = __webpack_require__(6);\nvar jStat = __webpack_require__(10);\nvar utils = __webpack_require__(1);\nvar evalExpression = __webpack_require__(7);\nvar error = __webpack_require__(0);\nvar misc = __webpack_require__(11);\n\nvar SQRT2PI = 2.5066282746310002;\n\nexports.AVEDEV = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  return jStat.sum(jStat(range).subtract(jStat.mean(range)).abs()[0]) / range.length;\n};\n\nexports.AVERAGE = function() {\n  var range = utils.numbers(utils.flatten(arguments));\n  var n = range.length;\n  var sum = 0;\n  var count = 0;\n  var result;\n\n  for (var i = 0; i < n; i++) {\n    sum += range[i];\n    count += 1;\n  }\n  result = sum / count;\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.AVERAGEA = function() {\n  var range = utils.flatten(arguments);\n  var n = range.length;\n  var sum = 0;\n  var count = 0;\n  var result;\n  for (var i = 0; i < n; i++) {\n    var el = range[i];\n    if (typeof el === 'number') {\n      sum += el;\n    }\n    if (el === true) {\n      sum++;\n    }\n    if (el !== null) {\n      count++;\n    }\n  }\n  result = sum / count;\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.AVERAGEIF = function(range, criteria, average_range) {\n  if (arguments.length <= 1) {\n    return error.na;\n  }\n  average_range = average_range || range;\n  range = utils.flatten(range);\n  average_range = utils.parseNumberArray(utils.flatten(average_range));\n\n  if (average_range instanceof Error) {\n    return average_range;\n  }\n  var average_count = 0;\n  var result = 0;\n  var isWildcard = criteria === void 0 || criteria === '*';\n  var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + '');\n\n  for (var i = 0; i < range.length; i++) {\n    var value = range[i];\n\n    if (isWildcard) {\n      result += average_range[i];\n      average_count++;\n    } else {\n      var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n      if (evalExpression.compute(tokens)) {\n        result += average_range[i];\n        average_count++;\n      }\n    }\n  }\n\n  return result / average_count;\n};\n\nexports.AVERAGEIFS = function() {\n  // Does not work with multi dimensional ranges yet!\n  //http://office.microsoft.com/en-001/excel-help/averageifs-function-HA010047493.aspx\n  var args = utils.argsToArray(arguments);\n  var criteriaLength = (args.length - 1) / 2;\n  var range = utils.flatten(args[0]);\n  var count = 0;\n  var result = 0;\n\n  for (var i = 0; i < range.length; i++) {\n    var isMeetCondition = false;\n\n    for (var j = 0; j < criteriaLength; j++) {\n      var value = args[2 * j + 1][i];\n      var criteria = args[2 * j + 2];\n      var isWildcard = criteria === void 0 || criteria === '*';\n      var computedResult = false;\n\n      if (isWildcard) {\n        computedResult = true;\n      } else {\n        var tokenizedCriteria = evalExpression.parse(criteria + '');\n        var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n        computedResult = evalExpression.compute(tokens);\n      }\n\n      // Criterias are calculated as AND so any `false` breakes the loop as unmeet condition\n      if (!computedResult) {\n        isMeetCondition = false;\n        break;\n      }\n\n      isMeetCondition = true;\n    }\n\n    if (isMeetCondition) {\n      result += range[i];\n      count++;\n    }\n  }\n\n  var average = result / count;\n\n  if (isNaN(average)) {\n    return 0;\n  } else {\n    return average;\n  }\n};\n\nexports.BETA = {};\n\nexports.BETA.DIST = function(x, alpha, beta, cumulative, A, B) {\n  if (arguments.length < 4) {\n    return error.value;\n  }\n\n  A = (A === undefined) ? 0 : A;\n  B = (B === undefined) ? 1 : B;\n\n  x = utils.parseNumber(x);\n  alpha = utils.parseNumber(alpha);\n  beta = utils.parseNumber(beta);\n  A = utils.parseNumber(A);\n  B = utils.parseNumber(B);\n  if (utils.anyIsError(x, alpha, beta, A, B)) {\n    return error.value;\n  }\n\n  x = (x - A) / (B - A);\n  return (cumulative) ? jStat.beta.cdf(x, alpha, beta) : jStat.beta.pdf(x, alpha, beta);\n};\n\nexports.BETA.INV = function(probability, alpha, beta, A, B) {\n  A = (A === undefined) ? 0 : A;\n  B = (B === undefined) ? 1 : B;\n\n  probability = utils.parseNumber(probability);\n  alpha = utils.parseNumber(alpha);\n  beta = utils.parseNumber(beta);\n  A = utils.parseNumber(A);\n  B = utils.parseNumber(B);\n  if (utils.anyIsError(probability, alpha, beta, A, B)) {\n    return error.value;\n  }\n\n  return jStat.beta.inv(probability, alpha, beta) * (B - A) + A;\n};\n\nexports.BINOM = {};\n\nexports.BINOM.DIST = function(successes, trials, probability, cumulative) {\n  successes = utils.parseNumber(successes);\n  trials = utils.parseNumber(trials);\n  probability = utils.parseNumber(probability);\n  cumulative = utils.parseNumber(cumulative);\n  if (utils.anyIsError(successes, trials, probability, cumulative)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.binomial.cdf(successes, trials, probability) : jStat.binomial.pdf(successes, trials, probability);\n};\n\nexports.BINOM.DIST.RANGE = function(trials, probability, successes, successes2) {\n  successes2 = (successes2 === undefined) ? successes : successes2;\n\n  trials = utils.parseNumber(trials);\n  probability = utils.parseNumber(probability);\n  successes = utils.parseNumber(successes);\n  successes2 = utils.parseNumber(successes2);\n  if (utils.anyIsError(trials, probability, successes, successes2)) {\n    return error.value;\n  }\n\n  var result = 0;\n  for (var i = successes; i <= successes2; i++) {\n    result += mathTrig.COMBIN(trials, i) * Math.pow(probability, i) * Math.pow(1 - probability, trials - i);\n  }\n  return result;\n};\n\nexports.BINOM.INV = function(trials, probability, alpha) {\n  trials = utils.parseNumber(trials);\n  probability = utils.parseNumber(probability);\n  alpha = utils.parseNumber(alpha);\n  if (utils.anyIsError(trials, probability, alpha)) {\n    return error.value;\n  }\n\n  var x = 0;\n  while (x <= trials) {\n    if (jStat.binomial.cdf(x, trials, probability) >= alpha) {\n      return x;\n    }\n    x++;\n  }\n};\n\nexports.CHISQ = {};\n\nexports.CHISQ.DIST = function(x, k, cumulative) {\n  x = utils.parseNumber(x);\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(x, k)) {\n    return error.value;\n  }\n\n  return (cumulative) ? jStat.chisquare.cdf(x, k) : jStat.chisquare.pdf(x, k);\n};\n\nexports.CHISQ.DIST.RT = function(x, k) {\n  if (!x | !k) {\n    return error.na;\n  }\n\n  if (x < 1 || k > Math.pow(10, 10)) {\n    return error.num;\n  }\n\n  if ((typeof x !== 'number') || (typeof k !== 'number')) {\n    return error.value;\n  }\n\n  return 1 -  jStat.chisquare.cdf(x, k);\n};\n\nexports.CHISQ.INV = function(probability, k) {\n  probability = utils.parseNumber(probability);\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(probability, k)) {\n    return error.value;\n  }\n  return jStat.chisquare.inv(probability, k);\n};\n\nexports.CHISQ.INV.RT = function(p, k) {\n  if (!p | !k) {\n    return error.na;\n  }\n\n  if (p < 0 || p > 1 || k < 1 || k > Math.pow(10, 10)) {\n    return error.num;\n  }\n\n  if ((typeof p !== 'number') || (typeof k !== 'number')) {\n    return error.value;\n  }\n\n  return jStat.chisquare.inv(1.0 - p, k);\n};\n\nexports.CHISQ.TEST = function(observed, expected) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  if ((!(observed instanceof Array)) || (!(expected instanceof Array))) {\n    return error.value;\n  }\n\n  if (observed.length !== expected.length) {\n    return error.value;\n  }\n\n  if (observed[0] && expected[0] &&\n    observed[0].length !== expected[0].length) {\n    return error.value;\n  }\n\n  var row = observed.length;\n  var tmp, i, j;\n\n  // Convert single-dimension array into two-dimension array\n  for (i = 0; i < row; i ++) {\n    if (!(observed[i] instanceof Array)) {\n      tmp = observed[i];\n      observed[i] = [];\n      observed[i].push(tmp);\n    }\n    if (!(expected[i] instanceof Array)) {\n      tmp = expected[i];\n      expected[i] = [];\n      expected[i].push(tmp);\n    }\n  }\n\n  var col = observed[0].length;\n  var dof = (col === 1) ? row-1 : (row-1)*(col-1);\n  var xsqr = 0;\n  var Pi =Math.PI;\n\n  for (i = 0; i < row; i ++) {\n    for (j = 0; j < col; j ++) {\n      xsqr += Math.pow((observed[i][j] - expected[i][j]), 2) / expected[i][j];\n    }\n  }\n\n  // Get independency by X square and its degree of freedom\n  function ChiSq(xsqr, dof) {\n    var p = Math.exp(-0.5 * xsqr);\n    if((dof%2) === 1) {\n      p = p * Math.sqrt(2 * xsqr/Pi);\n    }\n    var k = dof;\n    while(k >= 2) {\n      p = p * xsqr/k;\n      k = k - 2;\n    }\n    var t = p;\n    var a = dof;\n    while (t > 0.0000000001*p) {\n      a = a + 2;\n      t = t * xsqr/a;\n      p = p + t;\n    }\n    return 1-p;\n  }\n\n  return Math.round(ChiSq(xsqr, dof) * 1000000) / 1000000;\n};\n\nexports.COLUMN = function(matrix, index) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  if (index < 0) {\n    return error.num;\n  }\n\n  if (!(matrix instanceof Array) || (typeof index !== 'number')) {\n    return error.value;\n  }\n\n  if (matrix.length === 0) {\n    return undefined;\n  }\n\n  return jStat.col(matrix, index);\n};\n\nexports.COLUMNS = function(matrix) {\n  if (arguments.length !== 1) {\n    return error.na;\n  }\n\n  if (!(matrix instanceof Array)) {\n    return error.value;\n  }\n\n  if (matrix.length === 0) {\n    return 0;\n  }\n\n  return jStat.cols(matrix);\n};\n\nexports.CONFIDENCE = {};\n\nexports.CONFIDENCE.NORM = function(alpha, sd, n) {\n  alpha = utils.parseNumber(alpha);\n  sd = utils.parseNumber(sd);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(alpha, sd, n)) {\n    return error.value;\n  }\n  return jStat.normalci(1, alpha, sd, n)[1] - 1;\n};\n\nexports.CONFIDENCE.T = function(alpha, sd, n) {\n  alpha = utils.parseNumber(alpha);\n  sd = utils.parseNumber(sd);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(alpha, sd, n)) {\n    return error.value;\n  }\n  return jStat.tci(1, alpha, sd, n)[1] - 1;\n};\n\nexports.CORREL = function(array1, array2) {\n  array1 = utils.parseNumberArray(utils.flatten(array1));\n  array2 = utils.parseNumberArray(utils.flatten(array2));\n  if (utils.anyIsError(array1, array2)) {\n    return error.value;\n  }\n  return jStat.corrcoeff(array1, array2);\n};\n\nexports.COUNT = function() {\n  return utils.numbers(utils.flatten(arguments)).length;\n};\n\nexports.COUNTA = function() {\n  var range = utils.flatten(arguments);\n  return range.length - exports.COUNTBLANK(range);\n};\n\nexports.COUNTIN = function (range, value) {\n  var result = 0;\n\n  range = utils.flatten(range);\n\n  for (var i = 0; i < range.length; i++) {\n    if (range[i] === value) {\n      result++;\n    }\n  }\n  return result;\n};\n\n\nexports.COUNTBLANK = function() {\n  var range = utils.flatten(arguments);\n  var blanks = 0;\n  var element;\n  for (var i = 0; i < range.length; i++) {\n    element = range[i];\n    if (element === null || element === '') {\n      blanks++;\n    }\n  }\n  return blanks;\n};\n\nexports.COUNTIF = function(range, criteria) {\n  range = utils.flatten(range);\n\n  var isWildcard = criteria === void 0 || criteria === '*';\n\n  if (isWildcard) {\n    return range.length;\n  }\n\n  var matches = 0;\n  var tokenizedCriteria = evalExpression.parse(criteria + '');\n\n  for (var i = 0; i < range.length; i++) {\n    var value = range[i];\n    var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n    if (evalExpression.compute(tokens)) {\n      matches++;\n    }\n  }\n\n  return matches;\n};\n\nexports.COUNTIFS = function() {\n  var args = utils.argsToArray(arguments);\n  var results = new Array(utils.flatten(args[0]).length);\n\n  for (var i = 0; i < results.length; i++) {\n    results[i] = true;\n  }\n  for (i = 0; i < args.length; i += 2) {\n    var range = utils.flatten(args[i]);\n    var criteria = args[i + 1];\n    var isWildcard = criteria === void 0 || criteria === '*';\n\n    if (!isWildcard) {\n      var tokenizedCriteria = evalExpression.parse(criteria + '');\n\n      for (var j = 0; j < range.length; j++) {\n        var value = range[j];\n        var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n        results[j] = results[j] && evalExpression.compute(tokens);\n      }\n    }\n  }\n  var result = 0;\n  for (i = 0; i < results.length; i++) {\n    if (results[i]) {\n      result++;\n    }\n  }\n\n  return result;\n};\n\nexports.COUNTUNIQUE = function () {\n  return misc.UNIQUE.apply(null, utils.flatten(arguments)).length;\n};\n\nexports.COVARIANCE = {};\n\nexports.COVARIANCE.P = function(array1, array2) {\n  array1 = utils.parseNumberArray(utils.flatten(array1));\n  array2 = utils.parseNumberArray(utils.flatten(array2));\n  if (utils.anyIsError(array1, array2)) {\n    return error.value;\n  }\n  var mean1 = jStat.mean(array1);\n  var mean2 = jStat.mean(array2);\n  var result = 0;\n  var n = array1.length;\n  for (var i = 0; i < n; i++) {\n    result += (array1[i] - mean1) * (array2[i] - mean2);\n  }\n  return result / n;\n};\n\nexports.COVARIANCE.S = function(array1, array2) {\n  array1 = utils.parseNumberArray(utils.flatten(array1));\n  array2 = utils.parseNumberArray(utils.flatten(array2));\n  if (utils.anyIsError(array1, array2)) {\n    return error.value;\n  }\n  return jStat.covariance(array1, array2);\n};\n\nexports.DEVSQ = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var mean = jStat.mean(range);\n  var result = 0;\n  for (var i = 0; i < range.length; i++) {\n    result += Math.pow((range[i] - mean), 2);\n  }\n  return result;\n};\n\nexports.EXPON = {};\n\nexports.EXPON.DIST = function(x, lambda, cumulative) {\n  x = utils.parseNumber(x);\n  lambda = utils.parseNumber(lambda);\n  if (utils.anyIsError(x, lambda)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda);\n};\n\nexports.F = {};\n\nexports.F.DIST = function(x, d1, d2, cumulative) {\n  x = utils.parseNumber(x);\n  d1 = utils.parseNumber(d1);\n  d2 = utils.parseNumber(d2);\n  if (utils.anyIsError(x, d1, d2)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.centralF.cdf(x, d1, d2) : jStat.centralF.pdf(x, d1, d2);\n};\n\nexports.F.DIST.RT = function(x, d1, d2) {\n  if (arguments.length !== 3) {\n    return error.na;\n  }\n\n  if (x < 0 || d1 < 1 || d2 < 1) {\n    return error.num;\n  }\n\n  if ((typeof x !== 'number') || (typeof d1 !== 'number') || (typeof d2 !== 'number')) {\n    return error.value;\n  }\n\n  return 1 - jStat.centralF.cdf(x, d1, d2);\n};\n\nexports.F.INV = function(probability, d1, d2) {\n  probability = utils.parseNumber(probability);\n  d1 = utils.parseNumber(d1);\n  d2 = utils.parseNumber(d2);\n  if (utils.anyIsError(probability, d1, d2)) {\n    return error.value;\n  }\n  if (probability <= 0.0 || probability > 1.0) {\n    return error.num;\n  }\n\n  return jStat.centralF.inv(probability, d1, d2);\n};\n\nexports.F.INV.RT = function(p, d1, d2) {\n  if (arguments.length !== 3) {\n    return error.na;\n  }\n\n  if (p < 0 || p > 1 || d1 < 1 || d1 > Math.pow(10, 10) || d2 < 1 || d2 > Math.pow(10, 10)) {\n    return error.num;\n  }\n\n  if ((typeof p !== 'number') || (typeof d1 !== 'number') || (typeof d2 !== 'number')) {\n    return error.value;\n  }\n\n  return jStat.centralF.inv(1.0 - p, d1, d2);\n};\n\nexports.F.TEST = function(array1, array2) {\n  if (!array1 || !array2) {\n    return error.na;\n  }\n\n  if (!(array1 instanceof Array) || !(array2 instanceof Array)) {\n    return error.na;\n  }\n\n  if (array1.length < 2 || array2.length < 2) {\n    return error.div0;\n  }\n\n  var sumOfSquares = function(values, x1) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n      sum +=Math.pow((values[i] - x1), 2);\n    }\n    return sum;\n  };\n\n  var x1 = mathTrig.SUM(array1) / array1.length;\n  var x2 = mathTrig.SUM(array2) / array2.length;\n  var sum1 = sumOfSquares(array1, x1) / (array1.length - 1);\n  var sum2 = sumOfSquares(array2, x2) / (array2.length - 1);\n\n  return sum1 / sum2;\n};\n\nexports.FISHER = function(x) {\n  x = utils.parseNumber(x);\n  if (x instanceof Error) {\n    return x;\n  }\n  return Math.log((1 + x) / (1 - x)) / 2;\n};\n\nexports.FISHERINV = function(y) {\n  y = utils.parseNumber(y);\n  if (y instanceof Error) {\n    return y;\n  }\n  var e2y = Math.exp(2 * y);\n  return (e2y - 1) / (e2y + 1);\n};\n\nexports.FORECAST = function(x, data_y, data_x) {\n  x = utils.parseNumber(x);\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(x, data_y, data_x)) {\n    return error.value;\n  }\n  var xmean = jStat.mean(data_x);\n  var ymean = jStat.mean(data_y);\n  var n = data_x.length;\n  var num = 0;\n  var den = 0;\n  for (var i = 0; i < n; i++) {\n    num += (data_x[i] - xmean) * (data_y[i] - ymean);\n    den += Math.pow(data_x[i] - xmean, 2);\n  }\n  var b = num / den;\n  var a = ymean - b * xmean;\n  return a + b * x;\n};\n\nexports.FREQUENCY = function(data, bins) {\n  data = utils.parseNumberArray(utils.flatten(data));\n  bins = utils.parseNumberArray(utils.flatten(bins));\n  if (utils.anyIsError(data, bins)) {\n    return error.value;\n  }\n  var n = data.length;\n  var b = bins.length;\n  var r = [];\n  for (var i = 0; i <= b; i++) {\n    r[i] = 0;\n    for (var j = 0; j < n; j++) {\n      if (i === 0) {\n        if (data[j] <= bins[0]) {\n          r[0] += 1;\n        }\n      } else if (i < b) {\n        if (data[j] > bins[i - 1] && data[j] <= bins[i]) {\n          r[i] += 1;\n        }\n      } else if (i === b) {\n        if (data[j] > bins[b - 1]) {\n          r[b] += 1;\n        }\n      }\n    }\n  }\n  return r;\n};\n\n\nexports.GAMMA = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n\n  if (number === 0) {\n    return error.num;\n  }\n\n  if (parseInt(number, 10) === number && number < 0) {\n    return error.num;\n  }\n\n  return jStat.gammafn(number);\n};\n\nexports.GAMMA.DIST = function(value, alpha, beta, cumulative) {\n  if (arguments.length !== 4) {\n    return error.na;\n  }\n\n  if (value < 0 || alpha <= 0 || beta <= 0) {\n    return error.value;\n  }\n\n  if ((typeof value !== 'number') || (typeof alpha !== 'number') || (typeof beta !== 'number')) {\n    return error.value;\n  }\n\n  return cumulative ? jStat.gamma.cdf(value, alpha, beta, true) : jStat.gamma.pdf(value, alpha, beta, false);\n};\n\nexports.GAMMA.INV = function(probability, alpha, beta) {\n  if (arguments.length !== 3) {\n    return error.na;\n  }\n\n  if (probability < 0 || probability > 1 || alpha <= 0 || beta <= 0) {\n    return error.num;\n  }\n\n  if ((typeof probability !== 'number') || (typeof alpha !== 'number') || (typeof beta !== 'number')) {\n    return error.value;\n  }\n\n  return jStat.gamma.inv(probability, alpha, beta);\n};\n\nexports.GAMMALN = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return jStat.gammaln(number);\n};\n\nexports.GAMMALN.PRECISE = function(x) {\n  if (arguments.length !== 1) {\n    return error.na;\n  }\n\n  if (x <= 0) {\n    return error.num;\n  }\n\n  if (typeof x !== 'number') {\n    return error.value;\n  }\n\n  return jStat.gammaln(x);\n};\n\nexports.GAUSS = function(z) {\n  z = utils.parseNumber(z);\n  if (z instanceof Error) {\n    return z;\n  }\n  return jStat.normal.cdf(z, 0, 1) - 0.5;\n};\n\nexports.GEOMEAN = function() {\n  var args = utils.parseNumberArray(utils.flatten(arguments));\n  if (args instanceof Error) {\n    return args;\n  }\n  return jStat.geomean(args);\n};\n\nexports.GROWTH = function(known_y, known_x, new_x, use_const) {\n  // Credits: Ilmari Karonen (http://stackoverflow.com/questions/14161990/how-to-implement-growth-function-in-javascript)\n\n  known_y = utils.parseNumberArray(known_y);\n  if (known_y instanceof Error) {\n    return known_y;\n  }\n\n  // Default values for optional parameters:\n  var i;\n  if (known_x === undefined) {\n    known_x = [];\n    for (i = 1; i <= known_y.length; i++) {\n      known_x.push(i);\n    }\n  }\n  if (new_x === undefined) {\n    new_x = [];\n    for (i = 1; i <= known_y.length; i++) {\n      new_x.push(i);\n    }\n  }\n\n  known_x = utils.parseNumberArray(known_x);\n  new_x = utils.parseNumberArray(new_x);\n  if (utils.anyIsError(known_x, new_x)) {\n    return error.value;\n  }\n\n\n  if (use_const === undefined) {\n    use_const = true;\n  }\n\n  // Calculate sums over the data:\n  var n = known_y.length;\n  var avg_x = 0;\n  var avg_y = 0;\n  var avg_xy = 0;\n  var avg_xx = 0;\n  for (i = 0; i < n; i++) {\n    var x = known_x[i];\n    var y = Math.log(known_y[i]);\n    avg_x += x;\n    avg_y += y;\n    avg_xy += x * y;\n    avg_xx += x * x;\n  }\n  avg_x /= n;\n  avg_y /= n;\n  avg_xy /= n;\n  avg_xx /= n;\n\n  // Compute linear regression coefficients:\n  var beta;\n  var alpha;\n  if (use_const) {\n    beta = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x);\n    alpha = avg_y - beta * avg_x;\n  } else {\n    beta = avg_xy / avg_xx;\n    alpha = 0;\n  }\n\n  // Compute and return result array:\n  var new_y = [];\n  for (i = 0; i < new_x.length; i++) {\n    new_y.push(Math.exp(alpha + beta * new_x[i]));\n  }\n  return new_y;\n};\n\nexports.HARMEAN = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var n = range.length;\n  var den = 0;\n  for (var i = 0; i < n; i++) {\n    den += 1 / range[i];\n  }\n  return n / den;\n};\n\nexports.HYPGEOM = {};\n\nexports.HYPGEOM.DIST = function(x, n, M, N, cumulative) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  M = utils.parseNumber(M);\n  N = utils.parseNumber(N);\n  if (utils.anyIsError(x, n, M, N)) {\n    return error.value;\n  }\n\n  function pdf(x, n, M, N) {\n    return mathTrig.COMBIN(M, x) * mathTrig.COMBIN(N - M, n - x) / mathTrig.COMBIN(N, n);\n  }\n\n  function cdf(x, n, M, N) {\n    var result = 0;\n    for (var i = 0; i <= x; i++) {\n      result += pdf(i, n, M, N);\n    }\n    return result;\n  }\n\n  return (cumulative) ? cdf(x, n, M, N) : pdf(x, n, M, N);\n};\n\nexports.INTERCEPT = function(known_y, known_x) {\n  known_y = utils.parseNumberArray(known_y);\n  known_x = utils.parseNumberArray(known_x);\n  if (utils.anyIsError(known_y, known_x)) {\n    return error.value;\n  }\n  if (known_y.length !== known_x.length) {\n    return error.na;\n  }\n  return exports.FORECAST(0, known_y, known_x);\n};\n\nexports.KURT = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var mean = jStat.mean(range);\n  var n = range.length;\n  var sigma = 0;\n  for (var i = 0; i < n; i++) {\n    sigma += Math.pow(range[i] - mean, 4);\n  }\n  sigma = sigma / Math.pow(jStat.stdev(range, true), 4);\n  return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * sigma - 3 * (n - 1) * (n - 1) / ((n - 2) * (n - 3));\n};\n\nexports.LARGE = function(range, k) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(range, k)) {\n    return range;\n  }\n  return range.sort(function(a, b) {\n    return b - a;\n  })[k - 1];\n};\n\nexports.LINEST = function(data_y, data_x) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(data_y, data_x)) {\n    return error.value;\n  }\n  var ymean = jStat.mean(data_y);\n  var xmean = jStat.mean(data_x);\n  var n = data_x.length;\n  var num = 0;\n  var den = 0;\n  for (var i = 0; i < n; i++) {\n    num += (data_x[i] - xmean) * (data_y[i] - ymean);\n    den += Math.pow(data_x[i] - xmean, 2);\n  }\n  var m = num / den;\n  var b = ymean - m * xmean;\n  return [m, b];\n};\n\n// According to Microsoft:\n// http://office.microsoft.com/en-us/starter-help/logest-function-HP010342665.aspx\n// LOGEST returns are based on the following linear model:\n// ln y = x1 ln m1 + ... + xn ln mn + ln b\nexports.LOGEST = function(data_y, data_x) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(data_y, data_x)) {\n    return error.value;\n  }\n  for (var i = 0; i < data_y.length; i ++) {\n    data_y[i] = Math.log(data_y[i]);\n  }\n\n  var result = exports.LINEST(data_y, data_x);\n  result[0] = Math.round(Math.exp(result[0])*1000000)/1000000;\n  result[1] = Math.round(Math.exp(result[1])*1000000)/1000000;\n  return result;\n};\n\nexports.LOGNORM = {};\n\nexports.LOGNORM.DIST = function(x, mean, sd, cumulative) {\n  x = utils.parseNumber(x);\n  mean = utils.parseNumber(mean);\n  sd = utils.parseNumber(sd);\n  if (utils.anyIsError(x, mean, sd)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.lognormal.cdf(x, mean, sd) : jStat.lognormal.pdf(x, mean, sd);\n};\n\nexports.LOGNORM.INV = function(probability, mean, sd) {\n  probability = utils.parseNumber(probability);\n  mean = utils.parseNumber(mean);\n  sd = utils.parseNumber(sd);\n  if (utils.anyIsError(probability, mean, sd)) {\n    return error.value;\n  }\n  return jStat.lognormal.inv(probability, mean, sd);\n};\n\nexports.MAX = function() {\n  var range = utils.numbers(utils.flatten(arguments));\n  return (range.length === 0) ? 0 : Math.max.apply(Math, range);\n};\n\nexports.MAXA = function() {\n  var range = utils.arrayValuesToNumbers(utils.flatten(arguments));\n  return (range.length === 0) ? 0 : Math.max.apply(Math, range);\n};\n\nexports.MEDIAN = function() {\n  var range = utils.arrayValuesToNumbers(utils.flatten(arguments));\n  var result = jStat.median(range);\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.MIN = function() {\n  var range = utils.numbers(utils.flatten(arguments));\n  return (range.length === 0) ? 0 : Math.min.apply(Math, range);\n};\n\nexports.MINA = function() {\n  var range = utils.arrayValuesToNumbers(utils.flatten(arguments));\n  return (range.length === 0) ? 0 : Math.min.apply(Math, range);\n};\n\nexports.MODE = {};\n\nexports.MODE.MULT = function() {\n  // Credits: Roönaän\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var n = range.length;\n  var count = {};\n  var maxItems = [];\n  var max = 0;\n  var currentItem;\n\n  for (var i = 0; i < n; i++) {\n    currentItem = range[i];\n    count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;\n    if (count[currentItem] > max) {\n      max = count[currentItem];\n      maxItems = [];\n    }\n    if (count[currentItem] === max) {\n      maxItems[maxItems.length] = currentItem;\n    }\n  }\n  return maxItems;\n};\n\nexports.MODE.SNGL = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  return exports.MODE.MULT(range).sort(function(a, b) {\n    return a - b;\n  })[0];\n};\n\nexports.NEGBINOM = {};\n\nexports.NEGBINOM.DIST = function(k, r, p, cumulative) {\n  k = utils.parseNumber(k);\n  r = utils.parseNumber(r);\n  p = utils.parseNumber(p);\n  if (utils.anyIsError(k, r, p)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.negbin.cdf(k, r, p) : jStat.negbin.pdf(k, r, p);\n};\n\nexports.NORM = {};\n\nexports.NORM.DIST = function(x, mean, sd, cumulative) {\n  x = utils.parseNumber(x);\n  mean = utils.parseNumber(mean);\n  sd = utils.parseNumber(sd);\n  if (utils.anyIsError(x, mean, sd)) {\n    return error.value;\n  }\n  if (sd <= 0) {\n    return error.num;\n  }\n\n  // Return normal distribution computed by jStat [http://jstat.org]\n  return (cumulative) ? jStat.normal.cdf(x, mean, sd) : jStat.normal.pdf(x, mean, sd);\n};\n\nexports.NORM.INV = function(probability, mean, sd) {\n  probability = utils.parseNumber(probability);\n  mean = utils.parseNumber(mean);\n  sd = utils.parseNumber(sd);\n  if (utils.anyIsError(probability, mean, sd)) {\n    return error.value;\n  }\n  return jStat.normal.inv(probability, mean, sd);\n};\n\nexports.NORM.S = {};\n\nexports.NORM.S.DIST = function(z, cumulative) {\n  z = utils.parseNumber(z);\n  if (z instanceof Error) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1);\n};\n\nexports.NORM.S.INV = function(probability) {\n  probability = utils.parseNumber(probability);\n  if (probability instanceof Error) {\n    return error.value;\n  }\n  return jStat.normal.inv(probability, 0, 1);\n};\n\nexports.PEARSON = function(data_x, data_y) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(data_y, data_x)) {\n    return error.value;\n  }\n  var xmean = jStat.mean(data_x);\n  var ymean = jStat.mean(data_y);\n  var n = data_x.length;\n  var num = 0;\n  var den1 = 0;\n  var den2 = 0;\n  for (var i = 0; i < n; i++) {\n    num += (data_x[i] - xmean) * (data_y[i] - ymean);\n    den1 += Math.pow(data_x[i] - xmean, 2);\n    den2 += Math.pow(data_y[i] - ymean, 2);\n  }\n  return num / Math.sqrt(den1 * den2);\n};\n\nexports.PERCENTILE = {};\n\nexports.PERCENTILE.EXC = function(array, k) {\n  array = utils.parseNumberArray(utils.flatten(array));\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(array, k)) {\n    return error.value;\n  }\n  array = array.sort(function(a, b) {\n    {\n      return a - b;\n    }\n  });\n  var n = array.length;\n  if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {\n    return error.num;\n  }\n  var l = k * (n + 1) - 1;\n  var fl = Math.floor(l);\n  return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\n};\n\nexports.PERCENTILE.INC = function(array, k) {\n  array = utils.parseNumberArray(utils.flatten(array));\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(array, k)) {\n    return error.value;\n  }\n  array = array.sort(function(a, b) {\n    return a - b;\n  });\n  var n = array.length;\n  var l = k * (n - 1);\n  var fl = Math.floor(l);\n  return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\n};\n\nexports.PERCENTRANK = {};\n\nexports.PERCENTRANK.EXC = function(array, x, significance) {\n  significance = (significance === undefined) ? 3 : significance;\n  array = utils.parseNumberArray(utils.flatten(array));\n  x = utils.parseNumber(x);\n  significance = utils.parseNumber(significance);\n  if (utils.anyIsError(array, x, significance)) {\n    return error.value;\n  }\n  array = array.sort(function(a, b) {\n    return a - b;\n  });\n  var uniques = misc.UNIQUE.apply(null, array);\n  var n = array.length;\n  var m = uniques.length;\n  var power = Math.pow(10, significance);\n  var result = 0;\n  var match = false;\n  var i = 0;\n  while (!match && i < m) {\n    if (x === uniques[i]) {\n      result = (array.indexOf(uniques[i]) + 1) / (n + 1);\n      match = true;\n    } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n      result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);\n      match = true;\n    }\n    i++;\n  }\n  return Math.floor(result * power) / power;\n};\n\nexports.PERCENTRANK.INC = function(array, x, significance) {\n  significance = (significance === undefined) ? 3 : significance;\n  array = utils.parseNumberArray(utils.flatten(array));\n  x = utils.parseNumber(x);\n  significance = utils.parseNumber(significance);\n  if (utils.anyIsError(array, x, significance)) {\n    return error.value;\n  }\n  array = array.sort(function(a, b) {\n    return a - b;\n  });\n  var uniques = misc.UNIQUE.apply(null, array);\n  var n = array.length;\n  var m = uniques.length;\n  var power = Math.pow(10, significance);\n  var result = 0;\n  var match = false;\n  var i = 0;\n  while (!match && i < m) {\n    if (x === uniques[i]) {\n      result = array.indexOf(uniques[i]) / (n - 1);\n      match = true;\n    } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n      result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);\n      match = true;\n    }\n    i++;\n  }\n  return Math.floor(result * power) / power;\n};\n\nexports.PERMUT = function(number, number_chosen) {\n  number = utils.parseNumber(number);\n  number_chosen = utils.parseNumber(number_chosen);\n  if (utils.anyIsError(number, number_chosen)) {\n    return error.value;\n  }\n  return mathTrig.FACT(number) / mathTrig.FACT(number - number_chosen);\n};\n\nexports.PERMUTATIONA = function(number, number_chosen) {\n  number = utils.parseNumber(number);\n  number_chosen = utils.parseNumber(number_chosen);\n  if (utils.anyIsError(number, number_chosen)) {\n    return error.value;\n  }\n  return Math.pow(number, number_chosen);\n};\n\nexports.PHI = function(x) {\n  x = utils.parseNumber(x);\n  if (x instanceof Error) {\n    return error.value;\n  }\n  return Math.exp(-0.5 * x * x) / SQRT2PI;\n};\n\nexports.POISSON = {};\n\nexports.POISSON.DIST = function(x, mean, cumulative) {\n  x = utils.parseNumber(x);\n  mean = utils.parseNumber(mean);\n  if (utils.anyIsError(x, mean)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean);\n};\n\nexports.PROB = function(range, probability, lower, upper) {\n  if (lower === undefined) {\n    return 0;\n  }\n  upper = (upper === undefined) ? lower : upper;\n\n  range = utils.parseNumberArray(utils.flatten(range));\n  probability = utils.parseNumberArray(utils.flatten(probability));\n  lower = utils.parseNumber(lower);\n  upper = utils.parseNumber(upper);\n  if (utils.anyIsError(range, probability, lower, upper)) {\n    return error.value;\n  }\n\n  if (lower === upper) {\n    return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0;\n  }\n\n  var sorted = range.sort(function(a, b) {\n    return a - b;\n  });\n  var n = sorted.length;\n  var result = 0;\n  for (var i = 0; i < n; i++) {\n    if (sorted[i] >= lower && sorted[i] <= upper) {\n      result += probability[range.indexOf(sorted[i])];\n    }\n  }\n  return result;\n};\n\nexports.QUARTILE = {};\n\nexports.QUARTILE.EXC = function(range, quart) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  quart = utils.parseNumber(quart);\n  if (utils.anyIsError(range, quart)) {\n    return error.value;\n  }\n  switch (quart) {\n    case 1:\n      return exports.PERCENTILE.EXC(range, 0.25);\n    case 2:\n      return exports.PERCENTILE.EXC(range, 0.5);\n    case 3:\n      return exports.PERCENTILE.EXC(range, 0.75);\n    default:\n      return error.num;\n  }\n};\n\nexports.QUARTILE.INC = function(range, quart) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  quart = utils.parseNumber(quart);\n  if (utils.anyIsError(range, quart)) {\n    return error.value;\n  }\n  switch (quart) {\n    case 1:\n      return exports.PERCENTILE.INC(range, 0.25);\n    case 2:\n      return exports.PERCENTILE.INC(range, 0.5);\n    case 3:\n      return exports.PERCENTILE.INC(range, 0.75);\n    default:\n      return error.num;\n  }\n};\n\nexports.RANK = {};\n\nexports.RANK.AVG = function(number, range, order) {\n  number = utils.parseNumber(number);\n  range = utils.parseNumberArray(utils.flatten(range));\n  if (utils.anyIsError(number, range)) {\n    return error.value;\n  }\n  range = utils.flatten(range);\n  order = order || false;\n  var sort = (order) ? function(a, b) {\n    return a - b;\n  } : function(a, b) {\n    return b - a;\n  };\n  range = range.sort(sort);\n\n  var length = range.length;\n  var count = 0;\n  for (var i = 0; i < length; i++) {\n    if (range[i] === number) {\n      count++;\n    }\n  }\n\n  return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1;\n};\n\nexports.RANK.EQ = function(number, range, order) {\n  number = utils.parseNumber(number);\n  range = utils.parseNumberArray(utils.flatten(range));\n  if (utils.anyIsError(number, range)) {\n    return error.value;\n  }\n  order = order || false;\n  var sort = (order) ? function(a, b) {\n    return a - b;\n  } : function(a, b) {\n    return b - a;\n  };\n  range = range.sort(sort);\n  return range.indexOf(number) + 1;\n};\n\nexports.ROW = function(matrix, index) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  if (index < 0) {\n    return error.num;\n  }\n\n  if (!(matrix instanceof Array) || (typeof index !== 'number')) {\n    return error.value;\n  }\n\n  if (matrix.length === 0) {\n    return undefined;\n  }\n\n  return jStat.row(matrix, index);\n};\n\nexports.ROWS = function(matrix) {\n  if (arguments.length !== 1) {\n    return error.na;\n  }\n\n  if (!(matrix instanceof Array)) {\n    return error.value;\n  }\n\n  if (matrix.length === 0) {\n    return 0;\n  }\n\n  return jStat.rows(matrix);\n};\n\nexports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  if (utils.anyIsError(data_x, data_y)) {\n    return error.value;\n  }\n  return Math.pow(exports.PEARSON(data_x, data_y), 2);\n};\n\nexports.SKEW = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var mean = jStat.mean(range);\n  var n = range.length;\n  var sigma = 0;\n  for (var i = 0; i < n; i++) {\n    sigma += Math.pow(range[i] - mean, 3);\n  }\n  return n * sigma / ((n - 1) * (n - 2) * Math.pow(jStat.stdev(range, true), 3));\n};\n\nexports.SKEW.P = function() {\n  var range = utils.parseNumberArray(utils.flatten(arguments));\n  if (range instanceof Error) {\n    return range;\n  }\n  var mean = jStat.mean(range);\n  var n = range.length;\n  var m2 = 0;\n  var m3 = 0;\n  for (var i = 0; i < n; i++) {\n    m3 += Math.pow(range[i] - mean, 3);\n    m2 += Math.pow(range[i] - mean, 2);\n  }\n  m3 = m3 / n;\n  m2 = m2 / n;\n  return m3 / Math.pow(m2, 3 / 2);\n};\n\nexports.SLOPE = function(data_y, data_x) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(data_y, data_x)) {\n    return error.value;\n  }\n  var xmean = jStat.mean(data_x);\n  var ymean = jStat.mean(data_y);\n  var n = data_x.length;\n  var num = 0;\n  var den = 0;\n  for (var i = 0; i < n; i++) {\n    num += (data_x[i] - xmean) * (data_y[i] - ymean);\n    den += Math.pow(data_x[i] - xmean, 2);\n  }\n  return num / den;\n};\n\nexports.SMALL = function(range, k) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  k = utils.parseNumber(k);\n  if (utils.anyIsError(range, k)) {\n    return range;\n  }\n  return range.sort(function(a, b) {\n    return a - b;\n  })[k - 1];\n};\n\nexports.STANDARDIZE = function(x, mean, sd) {\n  x = utils.parseNumber(x);\n  mean = utils.parseNumber(mean);\n  sd = utils.parseNumber(sd);\n  if (utils.anyIsError(x, mean, sd)) {\n    return error.value;\n  }\n  return (x - mean) / sd;\n};\n\nexports.STDEV = {};\n\nexports.STDEV.P = function() {\n  var v = exports.VAR.P.apply(this, arguments);\n  var result = Math.sqrt(v);\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.STDEV.S = function() {\n  var v = exports.VAR.S.apply(this, arguments);\n  var result = Math.sqrt(v);\n\n  return result;\n};\n\nexports.STDEVA = function() {\n  var v = exports.VARA.apply(this, arguments);\n  var result = Math.sqrt(v);\n\n  return result;\n};\n\nexports.STDEVPA = function() {\n  var v = exports.VARPA.apply(this, arguments);\n  var result = Math.sqrt(v);\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\n\nexports.STEYX = function(data_y, data_x) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  if (utils.anyIsError(data_y, data_x)) {\n    return error.value;\n  }\n  var xmean = jStat.mean(data_x);\n  var ymean = jStat.mean(data_y);\n  var n = data_x.length;\n  var lft = 0;\n  var num = 0;\n  var den = 0;\n  for (var i = 0; i < n; i++) {\n    lft += Math.pow(data_y[i] - ymean, 2);\n    num += (data_x[i] - xmean) * (data_y[i] - ymean);\n    den += Math.pow(data_x[i] - xmean, 2);\n  }\n  return Math.sqrt((lft - num * num / den) / (n - 2));\n};\n\nexports.TRANSPOSE = function(matrix) {\n  if (!matrix) {\n    return error.na;\n  }\n  return jStat.transpose(matrix);\n};\n\nexports.T = text.T;\n\nexports.T.DIST = function(x, df, cumulative) {\n  x = utils.parseNumber(x);\n  df = utils.parseNumber(df);\n  if (utils.anyIsError(x, df)) {\n    return error.value;\n  }\n  return (cumulative) ? jStat.studentt.cdf(x, df) : jStat.studentt.pdf(x, df);\n};\n\nexports.T.DIST['2T'] = function(x, df) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  if (x < 0 || df < 1) {\n    return error.num;\n  }\n\n  if ((typeof x !== 'number') || (typeof df !== 'number')) {\n    return error.value;\n  }\n\n  return (1 - jStat.studentt.cdf(x , df)) * 2;\n};\n\nexports.T.DIST.RT = function(x, df) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n\n  if (x < 0 || df < 1) {\n    return error.num;\n  }\n\n  if ((typeof x !== 'number') || (typeof df !== 'number')) {\n    return error.value;\n  }\n\n  return 1 - jStat.studentt.cdf(x , df);\n};\n\nexports.T.INV = function(probability, df) {\n  probability = utils.parseNumber(probability);\n  df = utils.parseNumber(df);\n  if (utils.anyIsError(probability, df)) {\n    return error.value;\n  }\n  return jStat.studentt.inv(probability, df);\n};\n\nexports.T.INV['2T'] = function(probability, df) {\n  probability = utils.parseNumber(probability);\n  df = utils.parseNumber(df);\n  if (probability <= 0 || probability > 1 || df < 1) {\n    return error.num;\n  }\n  if (utils.anyIsError(probability, df)) {\n    return error.value;\n  }\n  return Math.abs(jStat.studentt.inv(probability/2, df));\n};\n\n// The algorithm can be found here:\n// http://www.chem.uoa.gr/applets/AppletTtest/Appl_Ttest2.html\nexports.T.TEST = function(data_x, data_y) {\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  if (utils.anyIsError(data_x, data_y)) {\n    return error.value;\n  }\n\n  var mean_x = jStat.mean(data_x);\n  var mean_y = jStat.mean(data_y);\n  var s_x = 0;\n  var s_y = 0;\n  var i;\n\n  for (i = 0; i < data_x.length; i++) {\n    s_x += Math.pow(data_x[i] - mean_x, 2);\n  }\n  for (i = 0; i < data_y.length; i++) {\n    s_y += Math.pow(data_y[i] - mean_y, 2);\n  }\n\n  s_x = s_x / (data_x.length-1);\n  s_y = s_y / (data_y.length-1);\n\n  var t = Math.abs(mean_x - mean_y) / Math.sqrt(s_x/data_x.length + s_y/data_y.length);\n\n  return exports.T.DIST['2T'](t, data_x.length+data_y.length-2);\n};\n\nexports.TREND = function(data_y, data_x, new_data_x) {\n  data_y = utils.parseNumberArray(utils.flatten(data_y));\n  data_x = utils.parseNumberArray(utils.flatten(data_x));\n  new_data_x = utils.parseNumberArray(utils.flatten(new_data_x));\n  if (utils.anyIsError(data_y, data_x, new_data_x)) {\n    return error.value;\n  }\n  var linest = exports.LINEST(data_y, data_x);\n  var m = linest[0];\n  var b = linest[1];\n  var result = [];\n\n  new_data_x.forEach(function(x) {\n    result.push(m * x + b);\n  });\n\n  return result;\n};\n\nexports.TRIMMEAN = function(range, percent) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  percent = utils.parseNumber(percent);\n  if (utils.anyIsError(range, percent)) {\n    return error.value;\n  }\n  var trim = mathTrig.FLOOR(range.length * percent, 2) / 2;\n  return jStat.mean(utils.initial(utils.rest(range.sort(function(a, b) {\n    return a - b;\n  }), trim), trim));\n};\n\nexports.VAR = {};\n\nexports.VAR.P = function() {\n  var range = utils.numbers(utils.flatten(arguments));\n  var n = range.length;\n  var sigma = 0;\n  var mean = exports.AVERAGE(range);\n  var result;\n  for (var i = 0; i < n; i++) {\n    sigma += Math.pow(range[i] - mean, 2);\n  }\n  result = sigma / n;\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.VAR.S = function() {\n  var range = utils.numbers(utils.flatten(arguments));\n  var n = range.length;\n  var sigma = 0;\n  var mean = exports.AVERAGE(range);\n  for (var i = 0; i < n; i++) {\n    sigma += Math.pow(range[i] - mean, 2);\n  }\n  return sigma / (n - 1);\n};\n\nexports.VARA = function() {\n  var range = utils.flatten(arguments);\n  var n = range.length;\n  var sigma = 0;\n  var count = 0;\n  var mean = exports.AVERAGEA(range);\n  for (var i = 0; i < n; i++) {\n    var el = range[i];\n    if (typeof el === 'number') {\n      sigma += Math.pow(el - mean, 2);\n    } else if (el === true) {\n      sigma += Math.pow(1 - mean, 2);\n    } else {\n      sigma += Math.pow(0 - mean, 2);\n    }\n\n    if (el !== null) {\n      count++;\n    }\n  }\n  return sigma / (count - 1);\n};\n\nexports.VARPA = function() {\n  var range = utils.flatten(arguments);\n  var n = range.length;\n  var sigma = 0;\n  var count = 0;\n  var mean = exports.AVERAGEA(range);\n  var result;\n  for (var i = 0; i < n; i++) {\n    var el = range[i];\n    if (typeof el === 'number') {\n      sigma += Math.pow(el - mean, 2);\n    } else if (el === true) {\n      sigma += Math.pow(1 - mean, 2);\n    } else {\n      sigma += Math.pow(0 - mean, 2);\n    }\n\n    if (el !== null) {\n      count++;\n    }\n  }\n  result = sigma / count;\n\n  if (isNaN(result)) {\n    result = error.num;\n  }\n\n  return result;\n};\n\nexports.WEIBULL = {};\n\nexports.WEIBULL.DIST = function(x, alpha, beta, cumulative) {\n  x = utils.parseNumber(x);\n  alpha = utils.parseNumber(alpha);\n  beta = utils.parseNumber(beta);\n  if (utils.anyIsError(x, alpha, beta)) {\n    return error.value;\n  }\n  return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);\n};\n\nexports.Z = {};\n\nexports.Z.TEST = function(range, x, sd) {\n  range = utils.parseNumberArray(utils.flatten(range));\n  x = utils.parseNumber(x);\n  if (utils.anyIsError(range, x)) {\n    return error.value;\n  }\n\n  sd = sd || exports.STDEV.S(range);\n  var n = range.length;\n  return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true);\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(1);\nvar error = __webpack_require__(0);\n\n//TODO\nexports.ASC = function() {\n  throw new Error('ASC is not implemented');\n};\n\n//TODO\nexports.BAHTTEXT = function() {\n  throw new Error('BAHTTEXT is not implemented');\n};\n\nexports.CHAR = function(number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return String.fromCharCode(number);\n};\n\nexports.CLEAN = function(text) {\n  text = text || '';\n  var re = /[\\0-\\x1F]/g;\n  return text.replace(re, \"\");\n};\n\nexports.CODE = function(text) {\n  text = text || '';\n  var result = text.charCodeAt(0);\n\n  if (isNaN(result)) {\n    result = error.na;\n  }\n  return result;\n};\n\nexports.CONCATENATE = function() {\n  var args = utils.flatten(arguments);\n\n  var trueFound = 0;\n  while ((trueFound = args.indexOf(true)) > -1) {\n    args[trueFound] = 'TRUE';\n  }\n\n  var falseFound = 0;\n  while ((falseFound = args.indexOf(false)) > -1) {\n    args[falseFound] = 'FALSE';\n  }\n\n  return args.join('');\n};\n\n//TODO\nexports.DBCS = function() {\n  throw new Error('DBCS is not implemented');\n};\n\n//TODO\nexports.DOLLAR = function() {\n  throw new Error('DOLLAR is not implemented');\n};\n\nexports.EXACT = function(text1, text2) {\n  if (arguments.length !== 2) {\n    return error.na;\n  }\n  return text1 === text2;\n};\n\nexports.FIND = function(find_text, within_text, position) {\n  if (arguments.length < 2) {\n    return error.na;\n  }\n  position = (position === undefined) ? 0 : position;\n  return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null;\n};\n\n//TODO\nexports.FIXED = function() {\n  throw new Error('FIXED is not implemented');\n};\n\nexports.HTML2TEXT = function (value) {\n  var result = '';\n\n  if (value) {\n    if (value instanceof Array) {\n      value.forEach(function (line) {\n        if (result !== '') {\n          result += '\\n';\n        }\n        result += (line.replace(/<(?:.|\\n)*?>/gm, ''));\n      });\n    } else {\n      result = value.replace(/<(?:.|\\n)*?>/gm, '');\n    }\n  }\n\n  return result;\n};\n\nexports.LEFT = function(text, number) {\n  number = (number === undefined) ? 1 : number;\n  number = utils.parseNumber(number);\n  if (number instanceof Error || typeof text !== 'string') {\n    return error.value;\n  }\n  return text ? text.substring(0, number) : null;\n};\n\nexports.LEN = function(text) {\n  if (arguments.length === 0) {\n    return error.error;\n  }\n\n  if (typeof text === 'string') {\n    return text ? text.length : 0;\n  }\n\n  if (text.length) {\n    return text.length;\n  }\n\n  return error.value;\n};\n\nexports.LOWER = function(text) {\n  if (typeof text !== 'string') {\n    return error.value;\n  }\n  return text ? text.toLowerCase() : text;\n};\n\nexports.MID = function(text, start, number) {\n  start = utils.parseNumber(start);\n  number = utils.parseNumber(number);\n  if (utils.anyIsError(start, number) || typeof text !== 'string') {\n    return number;\n  }\n\n  var begin = start - 1;\n  var end = begin + number;\n\n  return text.substring(begin, end);\n};\n\n// TODO\nexports.NUMBERVALUE = function (text, decimal_separator, group_separator)  {\n  decimal_separator = (typeof decimal_separator === 'undefined') ? '.' : decimal_separator;\n  group_separator = (typeof group_separator === 'undefined') ? ',' : group_separator;\n  return Number(text.replace(decimal_separator, '.').replace(group_separator, ''));\n};\n\n// TODO\nexports.PRONETIC = function() {\n  throw new Error('PRONETIC is not implemented');\n};\n\nexports.PROPER = function(text) {\n  if (text === undefined || text.length === 0) {\n    return error.value;\n  }\n  if (text === true) {\n    text = 'TRUE';\n  }\n  if (text === false) {\n    text = 'FALSE';\n  }\n  if (isNaN(text) && typeof text === 'number') {\n    return error.value;\n  }\n  if (typeof text === 'number') {\n    text = '' + text;\n  }\n\n  return text.replace(/\\w\\S*/g, function(txt) {\n    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n  });\n};\n\nexports.REGEXEXTRACT = function (text, regular_expression) {\n  if (arguments.length < 2) {\n    return error.na;\n  }\n  var match = text.match(new RegExp(regular_expression));\n  return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null;\n};\n\nexports.REGEXMATCH = function (text, regular_expression, full) {\n  if (arguments.length < 2) {\n    return error.na;\n  }\n  var match = text.match(new RegExp(regular_expression));\n  return full ? match : !!match;\n};\n\nexports.REGEXREPLACE = function (text, regular_expression, replacement) {\n  if (arguments.length < 3) {\n    return error.na;\n  }\n  return text.replace(new RegExp(regular_expression), replacement);\n};\n\nexports.REPLACE = function(text, position, length, new_text) {\n  position = utils.parseNumber(position);\n  length = utils.parseNumber(length);\n  if (utils.anyIsError(position, length) ||\n    typeof text !== 'string' ||\n    typeof new_text !== 'string') {\n    return error.value;\n  }\n  return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length);\n};\n\nexports.REPT = function(text, number) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return new Array(number + 1).join(text);\n};\n\nexports.RIGHT = function(text, number) {\n  number = (number === undefined) ? 1 : number;\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n  return text ? text.substring(text.length - number) : error.na;\n};\n\nexports.SEARCH = function(find_text, within_text, position) {\n  var foundAt;\n  if (typeof find_text !== 'string' || typeof within_text !== 'string') {\n    return error.value;\n  }\n  position = (position === undefined) ? 0 : position;\n  foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1;\n  return (foundAt === 0)?error.value:foundAt;\n};\n\nexports.SPLIT = function (text, separator) {\n  return text.split(separator);\n};\n\nexports.SUBSTITUTE = function(text, old_text, new_text, occurrence) {\n  if (arguments.length < 2) {\n    return error.na;\n  }\n  if (!text || !old_text || !new_text) {\n    return text;\n  } else if (occurrence === undefined) {\n    return text.replace(new RegExp(old_text, 'g'), new_text);\n  } else {\n    var index = 0;\n    var i = 0;\n    while (text.indexOf(old_text, index) > 0) {\n      index = text.indexOf(old_text, index + 1);\n      i++;\n      if (i === occurrence) {\n        return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n      }\n    }\n  }\n};\n\nexports.T = function(value) {\n  return (typeof value === \"string\") ? value : '';\n};\n\n// TODO incomplete implementation\nexports.TEXT = function() {\n  throw new Error('TEXT is not implemented');\n};\n\nexports.TRIM = function(text) {\n  if (typeof text !== 'string') {\n    return error.value;\n  }\n  return text.replace(/ +/g, ' ').trim();\n};\n\nexports.UNICHAR = exports.CHAR;\n\nexports.UNICODE = exports.CODE;\n\nexports.UPPER = function(text) {\n  if (typeof text !== 'string') {\n    return error.value;\n  }\n  return text.toUpperCase();\n};\n\n//TODO\nexports.VALUE = function() {\n  throw new Error('VALUE is not implemented');\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar defaultOperator = '=';\nvar validSymbols = ['>', '>=', '<', '<=', '=', '<>'];\nvar TOKEN_TYPE_OPERATOR = 'operator';\nvar TOKEN_TYPE_LITERAL = 'literal';\nvar SUPPORTED_TOKENS = [TOKEN_TYPE_OPERATOR, TOKEN_TYPE_LITERAL];\n\nexports.TOKEN_TYPE_OPERATOR = TOKEN_TYPE_OPERATOR;\nexports.TOKEN_TYPE_LITERAL = TOKEN_TYPE_LITERAL;\n\n/**\n * Create token which describe passed symbol/value.\n *\n * @param {String} value Value/Symbol to describe.\n * @param {String} type Type of the token 'operator' or 'literal'.\n * @return {Object}\n */\nfunction createToken(value, type) {\n  if (SUPPORTED_TOKENS.indexOf(type) === -1) {\n    throw new Error('Unsupported token type: ' + type);\n  }\n\n  return {\n    value: value,\n    type: type,\n  };\n}\n\n/**\n * Tries to cast numeric values to their type passed as a string.\n *\n * @param {*} value\n * @return {*}\n */\nfunction castValueToCorrectType(value) {\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  if (/^\\d+(\\.\\d+)?$/.test(value)) {\n    value = value.indexOf('.') === -1 ? parseInt(value, 10) : parseFloat(value);\n  }\n\n  return value;\n}\n\n/**\n * Generate stream of tokens from passed expression.\n *\n * @param {String} expression\n * @return {String[]}\n */\nfunction tokenizeExpression(expression) {\n  var expressionLength = expression.length;\n  var tokens = [];\n  var cursorIndex = 0;\n  var processedValue = '';\n  var processedSymbol = '';\n\n  while (cursorIndex < expressionLength) {\n    var char = expression.charAt(cursorIndex);\n\n    switch (char) {\n      case '>':\n      case '<':\n      case '=':\n        processedSymbol = processedSymbol + char;\n\n        if (processedValue.length > 0) {\n          tokens.push(processedValue);\n          processedValue = '';\n        }\n      break;\n      default:\n        if (processedSymbol.length > 0) {\n          tokens.push(processedSymbol);\n          processedSymbol = '';\n        }\n\n        processedValue = processedValue + char;\n      break;\n    }\n    cursorIndex++;\n  }\n\n  if (processedValue.length > 0) {\n    tokens.push(processedValue);\n  }\n  if (processedSymbol.length > 0) {\n    tokens.push(processedSymbol);\n  }\n\n  return tokens;\n};\n\n/**\n * Analyze and convert tokens to an object which describes their meaning.\n *\n * @param {String[]} tokens\n * @return {Object[]}\n */\nfunction analyzeTokens(tokens) {\n  var literalValue = '';\n  var analyzedTokens = [];\n\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (i === 0 && validSymbols.indexOf(token) >= 0) {\n      analyzedTokens.push(createToken(token, TOKEN_TYPE_OPERATOR));\n    } else {\n      literalValue += token;\n    }\n  }\n\n  if (literalValue.length > 0) {\n    analyzedTokens.push(createToken(castValueToCorrectType(literalValue), TOKEN_TYPE_LITERAL));\n  }\n\n  if (analyzedTokens.length > 0 && analyzedTokens[0].type !== TOKEN_TYPE_OPERATOR) {\n    analyzedTokens.unshift(createToken(defaultOperator, TOKEN_TYPE_OPERATOR));\n  }\n\n  return analyzedTokens;\n};\n\n/**\n * Compute/Evaluate an expression passed as an array of tokens.\n *\n * @param {Object[]} tokens\n * @return {Boolean}\n */\nfunction computeExpression(tokens) {\n  var values = [];\n  var operator;\n\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    switch (token.type) {\n      case TOKEN_TYPE_OPERATOR:\n        operator = token.value;\n      break;\n      case TOKEN_TYPE_LITERAL:\n        values.push(token.value);\n      break;\n    }\n  }\n\n  return evaluate(values, operator);\n};\n\n/**\n * Evaluate values based on passed math operator.\n *\n * @param {*} values\n * @param {String} operator\n * @return {Boolean}\n */\nfunction evaluate(values, operator) {\n  var result = false;\n\n  switch (operator) {\n    case '>':\n      result = values[0] > values[1];\n      break;\n    case '>=':\n      result = values[0] >= values[1];\n      break;\n    case '<':\n      result = values[0] < values[1];\n      break;\n    case '<=':\n      result = values[0] <= values[1];\n      break;\n    case '=':\n      result = values[0] == values[1];\n      break;\n    case '<>':\n      result = values[0] != values[1];\n      break;\n  }\n\n  return result;\n}\n\nexports.parse = function(expression) {\n  return analyzeTokens(tokenizeExpression(expression));\n};\nexports.createToken = createToken;\nexports.compute = computeExpression;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\n\n// TODO\nexports.CELL = function() {\n  throw new Error('CELL is not implemented');\n};\n\nexports.ERROR = {};\nexports.ERROR.TYPE = function(error_val) {\n  switch (error_val) {\n    case error.nil: return 1;\n    case error.div0: return 2;\n    case error.value: return 3;\n    case error.ref: return 4;\n    case error.name: return 5;\n    case error.num: return 6;\n    case error.na: return 7;\n    case error.data: return 8;\n  }\n  return error.na;\n};\n\n// TODO\nexports.INFO = function() {\n  throw new Error('INFO is not implemented');\n};\n\nexports.ISBLANK = function(value) {\n  return value === null;\n};\n\nexports.ISBINARY = function (number) {\n  return (/^[01]{1,10}$/).test(number);\n};\n\nexports.ISERR = function(value) {\n  return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 ||\n    (typeof value === 'number' && (isNaN(value) || !isFinite(value)));\n};\n\nexports.ISERROR = function(value) {\n  return exports.ISERR(value) || value === error.na;\n};\n\nexports.ISEVEN = function(number) {\n  return (Math.floor(Math.abs(number)) & 1) ? false : true;\n};\n\n// TODO\nexports.ISFORMULA = function() {\n  throw new Error('ISFORMULA is not implemented');\n};\n\nexports.ISLOGICAL = function(value) {\n  return value === true || value === false;\n};\n\nexports.ISNA = function(value) {\n  return value === error.na;\n};\n\nexports.ISNONTEXT = function(value) {\n  return typeof(value) !== 'string';\n};\n\nexports.ISNUMBER = function(value) {\n  return typeof(value) === 'number' && !isNaN(value) && isFinite(value);\n};\n\nexports.ISODD = function(number) {\n  return (Math.floor(Math.abs(number)) & 1) ? true : false;\n};\n\n// TODO\nexports.ISREF = function() {\n  throw new Error('ISREF is not implemented');\n};\n\nexports.ISTEXT = function(value) {\n  return typeof(value) === 'string';\n};\n\nexports.N = function(value) {\n  if (this.ISNUMBER(value)) {\n    return value;\n  }\n  if (value instanceof Date) {\n    return value.getTime();\n  }\n  if (value === true) {\n    return 1;\n  }\n  if (value === false) {\n    return 0;\n  }\n  if (this.ISERROR(value)) {\n    return value;\n  }\n  return 0;\n};\n\nexports.NA = function() {\n  return error.na;\n};\n\n\n// TODO\nexports.SHEET = function() {\n  throw new Error('SHEET is not implemented');\n};\n\n// TODO\nexports.SHEETS = function() {\n  throw new Error('SHEETS is not implemented');\n};\n\nexports.TYPE = function(value) {\n  if (this.ISNUMBER(value)) {\n    return 1;\n  }\n  if (this.ISTEXT(value)) {\n    return 2;\n  }\n  if (this.ISLOGICAL(value)) {\n    return 4;\n  }\n  if (this.ISERROR(value)) {\n    return 16;\n  }\n  if (Array.isArray(value)) {\n    return 64;\n  }\n};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar utils = __webpack_require__(1);\n\nvar d1900 = new Date(Date.UTC(1900, 0, 1));\nvar WEEK_STARTS = [\n  undefined,\n  0,\n  1,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  undefined,\n  1,\n  2,\n  3,\n  4,\n  5,\n  6,\n  0\n];\nvar WEEK_TYPES = [\n  [],\n  [1, 2, 3, 4, 5, 6, 7],\n  [7, 1, 2, 3, 4, 5, 6],\n  [6, 0, 1, 2, 3, 4, 5],\n  [],\n  [],\n  [],\n  [],\n  [],\n  [],\n  [],\n  [7, 1, 2, 3, 4, 5, 6],\n  [6, 7, 1, 2, 3, 4, 5],\n  [5, 6, 7, 1, 2, 3, 4],\n  [4, 5, 6, 7, 1, 2, 3],\n  [3, 4, 5, 6, 7, 1, 2],\n  [2, 3, 4, 5, 6, 7, 1],\n  [1, 2, 3, 4, 5, 6, 7]\n];\nvar WEEKEND_TYPES = [\n  [],\n  [6, 0],\n  [0, 1],\n  [1, 2],\n  [2, 3],\n  [3, 4],\n  [4, 5],\n  [5, 6],\n  undefined,\n  undefined,\n  undefined, [0, 0],\n  [1, 1],\n  [2, 2],\n  [3, 3],\n  [4, 4],\n  [5, 5],\n  [6, 6]\n];\n\nexports.DATE = function(year, month, day) {\n  var result;\n\n  year = utils.parseNumber(year);\n  month = utils.parseNumber(month);\n  day = utils.parseNumber(day);\n\n  if (utils.anyIsError(year, month, day)) {\n    result = error.value;\n\n  } else if (year < 0 || month < 0 || day < 0) {\n    result = error.num;\n\n  } else {\n    result = new Date(year, month - 1, day);\n  }\n\n  return result;\n};\n\nexports.DATEVALUE = function(date_text) {\n  var modifier = 2;\n  var date;\n\n  if (typeof date_text !== 'string') {\n    return error.value;\n  }\n\n  date = Date.parse(date_text);\n\n  if (isNaN(date)) {\n    return error.value;\n  }\n\n  if (date <= -2203891200000) {\n    modifier = 1;\n  }\n\n  return Math.ceil((date - d1900) / 86400000) + modifier;\n};\n\nexports.DAY = function(serial_number) {\n  var date = utils.parseDate(serial_number);\n  if (date instanceof Error) {\n    return date;\n  }\n\n  return date.getDate();\n};\n\nexports.DAYS = function(end_date, start_date) {\n  end_date = utils.parseDate(end_date);\n  start_date = utils.parseDate(start_date);\n\n  if (end_date instanceof Error) {\n    return end_date;\n  }\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n\n  return serial(end_date) - serial(start_date);\n};\n\nexports.DAYS360 = function(start_date, end_date, method) {\n  method = utils.parseBool(method);\n  start_date = utils.parseDate(start_date);\n  end_date = utils.parseDate(end_date);\n\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  if (end_date instanceof Error) {\n    return end_date;\n  }\n  if (method instanceof Error) {\n    return method;\n  }\n  var sm = start_date.getMonth();\n  var em = end_date.getMonth();\n  var sd, ed;\n\n  if (method) {\n    sd = start_date.getDate() === 31 ? 30 : start_date.getDate();\n    ed = end_date.getDate() === 31 ? 30 : end_date.getDate();\n  } else {\n    var smd = new Date(start_date.getFullYear(), sm + 1, 0).getDate();\n    var emd = new Date(end_date.getFullYear(), em + 1, 0).getDate();\n    sd = start_date.getDate() === smd ? 30 : start_date.getDate();\n    if (end_date.getDate() === emd) {\n      if (sd < 30) {\n        em++;\n        ed = 1;\n      } else {\n        ed = 30;\n      }\n    } else {\n      ed = end_date.getDate();\n    }\n  }\n\n  return 360 * (end_date.getFullYear() - start_date.getFullYear()) +\n    30 * (em - sm) + (ed - sd);\n};\n\nexports.EDATE = function(start_date, months) {\n  start_date = utils.parseDate(start_date);\n\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  if (isNaN(months)) {\n    return error.value;\n  }\n  months = parseInt(months, 10);\n  start_date.setMonth(start_date.getMonth() + months);\n\n  return serial(start_date);\n};\n\nexports.EOMONTH = function(start_date, months) {\n  start_date = utils.parseDate(start_date);\n\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  if (isNaN(months)) {\n    return error.value;\n  }\n  months = parseInt(months, 10);\n\n  return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0));\n};\n\nexports.HOUR = function(serial_number) {\n  serial_number = utils.parseDate(serial_number);\n\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n\n  return serial_number.getHours();\n};\n\nexports.INTERVAL = function (second) {\n  if (typeof second !== 'number' && typeof second !== 'string') {\n    return error.value;\n  } else {\n    second = parseInt(second, 10);\n  }\n\n  var year  = Math.floor(second/946080000);\n  second    = second%946080000;\n  var month = Math.floor(second/2592000);\n  second    = second%2592000;\n  var day   = Math.floor(second/86400);\n  second    = second%86400;\n\n  var hour  = Math.floor(second/3600);\n  second    = second%3600;\n  var min   = Math.floor(second/60);\n  second    = second%60;\n  var sec   = second;\n\n  year  = (year  > 0) ? year  + 'Y' : '';\n  month = (month > 0) ? month + 'M' : '';\n  day   = (day   > 0) ? day   + 'D' : '';\n  hour  = (hour  > 0) ? hour  + 'H' : '';\n  min   = (min   > 0) ? min   + 'M' : '';\n  sec   = (sec   > 0) ? sec   + 'S' : '';\n\n  return 'P' + year + month + day + 'T' + hour + min + sec;\n};\n\nexports.ISOWEEKNUM = function(date) {\n  date = utils.parseDate(date);\n\n  if (date instanceof Error) {\n    return date;\n  }\n\n  date.setHours(0, 0, 0);\n  date.setDate(date.getDate() + 4 - (date.getDay() || 7));\n  var yearStart = new Date(date.getFullYear(), 0, 1);\n\n  return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);\n};\n\nexports.MINUTE = function(serial_number) {\n  serial_number = utils.parseDate(serial_number);\n\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n\n  return serial_number.getMinutes();\n};\n\nexports.MONTH = function(serial_number) {\n  serial_number = utils.parseDate(serial_number);\n\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n\n  return serial_number.getMonth() + 1;\n};\n\nexports.NETWORKDAYS = function(start_date, end_date, holidays) {\n  return this.NETWORKDAYS.INTL(start_date, end_date, 1, holidays);\n};\n\nexports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) {\n  start_date = utils.parseDate(start_date);\n\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  end_date = utils.parseDate(end_date);\n\n  if (end_date instanceof Error) {\n    return end_date;\n  }\n  if (weekend === undefined) {\n    weekend = WEEKEND_TYPES[1];\n  } else {\n    weekend = WEEKEND_TYPES[weekend];\n  }\n  if (!(weekend instanceof Array)) {\n    return error.value;\n  }\n  if (holidays === undefined) {\n    holidays = [];\n  } else if (!(holidays instanceof Array)) {\n    holidays = [holidays];\n  }\n\n  for (var i = 0; i < holidays.length; i++) {\n    var h = utils.parseDate(holidays[i]);\n    if (h instanceof Error) {\n      return h;\n    }\n    holidays[i] = h;\n  }\n  var days = (end_date - start_date) / (1000 * 60 * 60 * 24) + 1;\n  var total = days;\n  var day = start_date;\n  for (i = 0; i < days; i++) {\n    var d = (new Date().getTimezoneOffset() > 0) ? day.getUTCDay() : day.getDay();\n    var dec = false;\n    if (d === weekend[0] || d === weekend[1]) {\n      dec = true;\n    }\n    for (var j = 0; j < holidays.length; j++) {\n      var holiday = holidays[j];\n      if (holiday.getDate() === day.getDate() &&\n        holiday.getMonth() === day.getMonth() &&\n        holiday.getFullYear() === day.getFullYear()) {\n        dec = true;\n        break;\n      }\n    }\n    if (dec) {\n      total--;\n    }\n    day.setDate(day.getDate() + 1);\n  }\n\n  return total;\n};\n\nexports.NOW = function() {\n  return new Date();\n};\n\nexports.SECOND = function(serial_number) {\n  serial_number = utils.parseDate(serial_number);\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n\n  return serial_number.getSeconds();\n};\n\nexports.TIME = function(hour, minute, second) {\n  hour = utils.parseNumber(hour);\n  minute = utils.parseNumber(minute);\n  second = utils.parseNumber(second);\n  if (utils.anyIsError(hour, minute, second)) {\n    return error.value;\n  }\n  if (hour < 0 || minute < 0 || second < 0) {\n    return error.num;\n  }\n\n  return (3600 * hour + 60 * minute + second) / 86400;\n};\n\nexports.TIMEVALUE = function(time_text) {\n  time_text = utils.parseDate(time_text);\n\n  if (time_text instanceof Error) {\n    return time_text;\n  }\n\n  return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;\n};\n\nexports.TODAY = function() {\n  return new Date();\n};\n\nexports.WEEKDAY = function(serial_number, return_type) {\n  serial_number = utils.parseDate(serial_number);\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n  if (return_type === undefined) {\n    return_type = 1;\n  }\n  var day = serial_number.getDay();\n\n  return WEEK_TYPES[return_type][day];\n};\n\nexports.WEEKNUM = function(serial_number, return_type) {\n  serial_number = utils.parseDate(serial_number);\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n  if (return_type === undefined) {\n    return_type = 1;\n  }\n  if (return_type === 21) {\n    return this.ISOWEEKNUM(serial_number);\n  }\n  var week_start = WEEK_STARTS[return_type];\n  var jan = new Date(serial_number.getFullYear(), 0, 1);\n  var inc = jan.getDay() < week_start ? 1 : 0;\n  jan -= Math.abs(jan.getDay() - week_start) * 24 * 60 * 60 * 1000;\n\n  return Math.floor(((serial_number - jan) / (1000 * 60 * 60 * 24)) / 7 + 1) + inc;\n};\n\nexports.WORKDAY = function(start_date, days, holidays) {\n  return this.WORKDAY.INTL(start_date, days, 1, holidays);\n};\n\nexports.WORKDAY.INTL = function(start_date, days, weekend, holidays) {\n  start_date = utils.parseDate(start_date);\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  days = utils.parseNumber(days);\n  if (days instanceof Error) {\n    return days;\n  }\n  if (days < 0) {\n    return error.num;\n  }\n  if (weekend === undefined) {\n    weekend = WEEKEND_TYPES[1];\n  } else {\n    weekend = WEEKEND_TYPES[weekend];\n  }\n  if (!(weekend instanceof Array)) {\n    return error.value;\n  }\n  if (holidays === undefined) {\n    holidays = [];\n  } else if (!(holidays instanceof Array)) {\n    holidays = [holidays];\n  }\n  for (var i = 0; i < holidays.length; i++) {\n    var h = utils.parseDate(holidays[i]);\n    if (h instanceof Error) {\n      return h;\n    }\n    holidays[i] = h;\n  }\n  var d = 0;\n  while (d < days) {\n    start_date.setDate(start_date.getDate() + 1);\n    var day = start_date.getDay();\n    if (day === weekend[0] || day === weekend[1]) {\n      continue;\n    }\n    for (var j = 0; j < holidays.length; j++) {\n      var holiday = holidays[j];\n      if (holiday.getDate() === start_date.getDate() &&\n        holiday.getMonth() === start_date.getMonth() &&\n        holiday.getFullYear() === start_date.getFullYear()) {\n        d--;\n        break;\n      }\n    }\n    d++;\n  }\n\n  return start_date;\n};\n\nexports.YEAR = function(serial_number) {\n  serial_number = utils.parseDate(serial_number);\n\n  if (serial_number instanceof Error) {\n    return serial_number;\n  }\n\n  return serial_number.getFullYear();\n};\n\nfunction isLeapYear(year) {\n  return new Date(year, 1, 29).getMonth() === 1;\n}\n\n// TODO : Use DAYS ?\nfunction daysBetween(start_date, end_date) {\n  return Math.ceil((end_date - start_date) / 1000 / 60 / 60 / 24);\n}\n\nexports.YEARFRAC = function(start_date, end_date, basis) {\n  start_date = utils.parseDate(start_date);\n  if (start_date instanceof Error) {\n    return start_date;\n  }\n  end_date = utils.parseDate(end_date);\n  if (end_date instanceof Error) {\n    return end_date;\n  }\n\n  basis = basis || 0;\n  var sd = start_date.getDate();\n  var sm = start_date.getMonth() + 1;\n  var sy = start_date.getFullYear();\n  var ed = end_date.getDate();\n  var em = end_date.getMonth() + 1;\n  var ey = end_date.getFullYear();\n\n  switch (basis) {\n    case 0:\n      // US (NASD) 30/360\n      if (sd === 31 && ed === 31) {\n        sd = 30;\n        ed = 30;\n      } else if (sd === 31) {\n        sd = 30;\n      } else if (sd === 30 && ed === 31) {\n        ed = 30;\n      }\n      return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n    case 1:\n      // Actual/actual\n      var feb29Between = function(date1, date2) {\n        var year1 = date1.getFullYear();\n        var mar1year1 = new Date(year1, 2, 1);\n        if (isLeapYear(year1) && date1 < mar1year1 && date2 >= mar1year1) {\n          return true;\n        }\n        var year2 = date2.getFullYear();\n        var mar1year2 = new Date(year2, 2, 1);\n        return (isLeapYear(year2) && date2 >= mar1year2 && date1 < mar1year2);\n      };\n      var ylength = 365;\n      if (sy === ey || ((sy + 1) === ey) && ((sm > em) || ((sm === em) && (sd >= ed)))) {\n        if ((sy === ey && isLeapYear(sy)) ||\n          feb29Between(start_date, end_date) ||\n          (em === 1 && ed === 29)) {\n          ylength = 366;\n        }\n        return daysBetween(start_date, end_date) / ylength;\n      }\n      var years = (ey - sy) + 1;\n      var days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\n      var average = days / years;\n      return daysBetween(start_date, end_date) / average;\n    case 2:\n      // Actual/360\n      return daysBetween(start_date, end_date) / 360;\n    case 3:\n      // Actual/365\n      return daysBetween(start_date, end_date) / 365;\n    case 4:\n      // European 30/360\n      return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n  }\n};\n\nfunction serial(date) {\n  var addOn = (date > -2203891200000) ? 2 : 1;\n\n  return Math.ceil((date - d1900) / 86400000) + addOn;\n}\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n(function (window, factory) {\n    if (true) {\n        module.exports = factory();\n    } else if (typeof define === 'function' && define.amd) {\n        define('jstat', factory);\n    } else if(typeof exports === 'object') {\n        exports['jstat'] = factory();\n    } else {\n        window['jstat'] = factory();\n    }\n})(typeof self !== 'undefined' ? self : this, function () {\nvar jStat = (function(Math, undefined) {\n\n// For quick reference.\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n// Calculate correction for IEEE error\n// TODO: This calculation can be improved.\nfunction calcRdx(n, m) {\n  var val = n > m ? n : m;\n  return Math.pow(10,\n                  17 - ~~(Math.log(((val > 0) ? val : -val)) * Math.LOG10E));\n}\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n  return toString.call(arg) === '[object Array]';\n};\n\n\nfunction isFunction(arg) {\n  return toString.call(arg) === '[object Function]';\n}\n\n\nfunction isNumber(arg) {\n  return typeof arg === 'number' && arg === arg;\n}\n\n\n// Converts the jStat matrix to vector.\nfunction toVector(arr) {\n  return concat.apply([], arr);\n}\n\n\n// The one and only jStat constructor.\nfunction jStat() {\n  return new jStat._init(arguments);\n}\n\n\n// TODO: Remove after all references in src files have been removed.\njStat.fn = jStat.prototype;\n\n\n// By separating the initializer from the constructor it's easier to handle\n// always returning a new instance whether \"new\" was used or not.\njStat._init = function _init(args) {\n  var i;\n\n  // If first argument is an array, must be vector or matrix.\n  if (isArray(args[0])) {\n    // Check if matrix.\n    if (isArray(args[0][0])) {\n      // See if a mapping function was also passed.\n      if (isFunction(args[1]))\n        args[0] = jStat.map(args[0], args[1]);\n      // Iterate over each is faster than this.push.apply(this, args[0].\n      for (var i = 0; i < args[0].length; i++)\n        this[i] = args[0][i];\n      this.length = args[0].length;\n\n    // Otherwise must be a vector.\n    } else {\n      this[0] = isFunction(args[1]) ? jStat.map(args[0], args[1]) : args[0];\n      this.length = 1;\n    }\n\n  // If first argument is number, assume creation of sequence.\n  } else if (isNumber(args[0])) {\n    this[0] = jStat.seq.apply(null, args);\n    this.length = 1;\n\n  // Handle case when jStat object is passed to jStat.\n  } else if (args[0] instanceof jStat) {\n    // Duplicate the object and pass it back.\n    return jStat(args[0].toArray());\n\n  // Unexpected argument value, return empty jStat object.\n  // TODO: This is strange behavior. Shouldn't this throw or some such to let\n  // the user know they had bad arguments?\n  } else {\n    this[0] = [];\n    this.length = 1;\n  }\n\n  return this;\n};\njStat._init.prototype = jStat.prototype;\njStat._init.constructor = jStat;\n\n\n// Utility functions.\n// TODO: for internal use only?\njStat.utils = {\n  calcRdx: calcRdx,\n  isArray: isArray,\n  isFunction: isFunction,\n  isNumber: isNumber,\n  toVector: toVector\n};\n\n\n// Easily extend the jStat object.\n// TODO: is this seriously necessary?\njStat.extend = function extend(obj) {\n  var i, j;\n\n  if (arguments.length === 1) {\n    for (j in obj)\n      jStat[j] = obj[j];\n    return this;\n  }\n\n  for (var i = 1; i < arguments.length; i++) {\n    for (j in arguments[i])\n      obj[j] = arguments[i][j];\n  }\n\n  return obj;\n};\n\n\n// Returns the number of rows in the matrix.\njStat.rows = function rows(arr) {\n  return arr.length || 1;\n};\n\n\n// Returns the number of columns in the matrix.\njStat.cols = function cols(arr) {\n  return arr[0].length || 1;\n};\n\n\n// Returns the dimensions of the object { rows: i, cols: j }\njStat.dimensions = function dimensions(arr) {\n  return {\n    rows: jStat.rows(arr),\n    cols: jStat.cols(arr)\n  };\n};\n\n\n// Returns a specified row as a vector or return a sub matrix by pick some rows\njStat.row = function row(arr, index) {\n  if (isArray(index)) {\n    return index.map(function(i) {\n      return jStat.row(arr, i);\n    })\n  }\n  return arr[index];\n};\n\n\n// return row as array\n// rowa([[1,2],[3,4]],0) -> [1,2]\njStat.rowa = function rowa(arr, i) {\n  return jStat.row(arr, i);\n};\n\n\n// Returns the specified column as a vector or return a sub matrix by pick some\n// columns\njStat.col = function col(arr, index) {\n  if (isArray(index)) {\n    var submat = jStat.arange(arr.length).map(function(i) {\n      return new Array(index.length);\n    });\n    index.forEach(function(ind, i){\n      jStat.arange(arr.length).forEach(function(j) {\n        submat[j][i] = arr[j][ind];\n      });\n    });\n    return submat;\n  }\n  var column = new Array(arr.length);\n  for (var i = 0; i < arr.length; i++)\n    column[i] = [arr[i][index]];\n  return column;\n};\n\n\n// return column as array\n// cola([[1,2],[3,4]],0) -> [1,3]\njStat.cola = function cola(arr, i) {\n  return jStat.col(arr, i).map(function(a){ return a[0] });\n};\n\n\n// Returns the diagonal of the matrix\njStat.diag = function diag(arr) {\n  var nrow = jStat.rows(arr);\n  var res = new Array(nrow);\n  for (var row = 0; row < nrow; row++)\n    res[row] = [arr[row][row]];\n  return res;\n};\n\n\n// Returns the anti-diagonal of the matrix\njStat.antidiag = function antidiag(arr) {\n  var nrow = jStat.rows(arr) - 1;\n  var res = new Array(nrow);\n  for (var i = 0; nrow >= 0; nrow--, i++)\n    res[i] = [arr[i][nrow]];\n  return res;\n};\n\n// Transpose a matrix or array.\njStat.transpose = function transpose(arr) {\n  var obj = [];\n  var objArr, rows, cols, j, i;\n\n  // Make sure arr is in matrix format.\n  if (!isArray(arr[0]))\n    arr = [arr];\n\n  rows = arr.length;\n  cols = arr[0].length;\n\n  for (var i = 0; i < cols; i++) {\n    objArr = new Array(rows);\n    for (j = 0; j < rows; j++)\n      objArr[j] = arr[j][i];\n    obj.push(objArr);\n  }\n\n  // If obj is vector, return only single array.\n  return obj.length === 1 ? obj[0] : obj;\n};\n\n\n// Map a function to an array or array of arrays.\n// \"toAlter\" is an internal variable.\njStat.map = function map(arr, func, toAlter) {\n  var row, nrow, ncol, res, col;\n\n  if (!isArray(arr[0]))\n    arr = [arr];\n\n  nrow = arr.length;\n  ncol = arr[0].length;\n  res = toAlter ? arr : new Array(nrow);\n\n  for (row = 0; row < nrow; row++) {\n    // if the row doesn't exist, create it\n    if (!res[row])\n      res[row] = new Array(ncol);\n    for (col = 0; col < ncol; col++)\n      res[row][col] = func(arr[row][col], row, col);\n  }\n\n  return res.length === 1 ? res[0] : res;\n};\n\n\n// Cumulatively combine the elements of an array or array of arrays using a function.\njStat.cumreduce = function cumreduce(arr, func, toAlter) {\n  var row, nrow, ncol, res, col;\n\n  if (!isArray(arr[0]))\n    arr = [arr];\n\n  nrow = arr.length;\n  ncol = arr[0].length;\n  res = toAlter ? arr : new Array(nrow);\n\n  for (row = 0; row < nrow; row++) {\n    // if the row doesn't exist, create it\n    if (!res[row])\n      res[row] = new Array(ncol);\n    if (ncol > 0)\n      res[row][0] = arr[row][0];\n    for (col = 1; col < ncol; col++)\n      res[row][col] = func(res[row][col-1], arr[row][col]);\n  }\n  return res.length === 1 ? res[0] : res;\n};\n\n\n// Destructively alter an array.\njStat.alter = function alter(arr, func) {\n  return jStat.map(arr, func, true);\n};\n\n\n// Generate a rows x cols matrix according to the supplied function.\njStat.create = function  create(rows, cols, func) {\n  var res = new Array(rows);\n  var i, j;\n\n  if (isFunction(cols)) {\n    func = cols;\n    cols = rows;\n  }\n\n  for (var i = 0; i < rows; i++) {\n    res[i] = new Array(cols);\n    for (j = 0; j < cols; j++)\n      res[i][j] = func(i, j);\n  }\n\n  return res;\n};\n\n\nfunction retZero() { return 0; }\n\n\n// Generate a rows x cols matrix of zeros.\njStat.zeros = function zeros(rows, cols) {\n  if (!isNumber(cols))\n    cols = rows;\n  return jStat.create(rows, cols, retZero);\n};\n\n\nfunction retOne() { return 1; }\n\n\n// Generate a rows x cols matrix of ones.\njStat.ones = function ones(rows, cols) {\n  if (!isNumber(cols))\n    cols = rows;\n  return jStat.create(rows, cols, retOne);\n};\n\n\n// Generate a rows x cols matrix of uniformly random numbers.\njStat.rand = function rand(rows, cols) {\n  if (!isNumber(cols))\n    cols = rows;\n  return jStat.create(rows, cols, Math.random);\n};\n\n\nfunction retIdent(i, j) { return i === j ? 1 : 0; }\n\n\n// Generate an identity matrix of size row x cols.\njStat.identity = function identity(rows, cols) {\n  if (!isNumber(cols))\n    cols = rows;\n  return jStat.create(rows, cols, retIdent);\n};\n\n\n// Tests whether a matrix is symmetric\njStat.symmetric = function symmetric(arr) {\n  var issymmetric = true;\n  var size = arr.length;\n  var row, col;\n\n  if (arr.length !== arr[0].length)\n    return false;\n\n  for (row = 0; row < size; row++) {\n    for (col = 0; col < size; col++)\n      if (arr[col][row] !== arr[row][col])\n        return false;\n  }\n\n  return true;\n};\n\n\n// Set all values to zero.\njStat.clear = function clear(arr) {\n  return jStat.alter(arr, retZero);\n};\n\n\n// Generate sequence.\njStat.seq = function seq(min, max, length, func) {\n  if (!isFunction(func))\n    func = false;\n\n  var arr = [];\n  var hival = calcRdx(min, max);\n  var step = (max * hival - min * hival) / ((length - 1) * hival);\n  var current = min;\n  var cnt;\n\n  // Current is assigned using a technique to compensate for IEEE error.\n  // TODO: Needs better implementation.\n  for (cnt = 0;\n       current <= max && cnt < length;\n       cnt++, current = (min * hival + step * hival * cnt) / hival) {\n    arr.push((func ? func(current, cnt) : current));\n  }\n\n  return arr;\n};\n\n\n// arange(5) -> [0,1,2,3,4]\n// arange(1,5) -> [1,2,3,4]\n// arange(5,1,-1) -> [5,4,3,2]\njStat.arange = function arange(start, end, step) {\n  var rl = [];\n  step = step || 1;\n  if (end === undefined) {\n    end = start;\n    start = 0;\n  }\n  if (start === end || step === 0) {\n    return [];\n  }\n  if (start < end && step < 0) {\n    return [];\n  }\n  if (start > end && step > 0) {\n    return [];\n  }\n  if (step > 0) {\n    for (i = start; i < end; i += step) {\n      rl.push(i);\n    }\n  } else {\n    for (i = start; i > end; i += step) {\n      rl.push(i);\n    }\n  }\n  return rl;\n};\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// slice(A,{row:{end:2},col:{start:1}}) -> [[2,3],[5,6]]\n// slice(A,1,{start:1}) -> [5,6]\n// as numpy code A[:2,1:]\njStat.slice = (function(){\n  function _slice(list, start, end, step) {\n    // note it's not equal to range.map mode it's a bug\n    var i;\n    var rl = [];\n    var length = list.length;\n    if (start === undefined && end === undefined && step === undefined) {\n      return jStat.copy(list);\n    }\n\n    start = start || 0;\n    end = end || list.length;\n    start = start >= 0 ? start : length + start;\n    end = end >= 0 ? end : length + end;\n    step = step || 1;\n    if (start === end || step === 0) {\n      return [];\n    }\n    if (start < end && step < 0) {\n      return [];\n    }\n    if (start > end && step > 0) {\n      return [];\n    }\n    if (step > 0) {\n      for (i = start; i < end; i += step) {\n        rl.push(list[i]);\n      }\n    } else {\n      for (i = start; i > end;i += step) {\n        rl.push(list[i]);\n      }\n    }\n    return rl;\n  }\n\n  function slice(list, rcSlice) {\n    rcSlice = rcSlice || {};\n    if (isNumber(rcSlice.row)) {\n      if (isNumber(rcSlice.col))\n        return list[rcSlice.row][rcSlice.col];\n      var row = jStat.rowa(list, rcSlice.row);\n      var colSlice = rcSlice.col || {};\n      return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n    }\n\n    if (isNumber(rcSlice.col)) {\n      var col = jStat.cola(list, rcSlice.col);\n      var rowSlice = rcSlice.row || {};\n      return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);\n    }\n\n    var rowSlice = rcSlice.row || {};\n    var colSlice = rcSlice.col || {};\n    var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);\n    return rows.map(function(row) {\n      return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n    });\n  }\n\n  return slice;\n}());\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// sliceAssign(A,{row:{start:1},col:{start:1}},[[0,0],[0,0]])\n// A=[[1,2,3],[4,0,0],[7,0,0]]\njStat.sliceAssign = function sliceAssign(A, rcSlice, B) {\n  if (isNumber(rcSlice.row)) {\n    if (isNumber(rcSlice.col))\n      return A[rcSlice.row][rcSlice.col] = B;\n    rcSlice.col = rcSlice.col || {};\n    rcSlice.col.start = rcSlice.col.start || 0;\n    rcSlice.col.end = rcSlice.col.end || A[0].length;\n    rcSlice.col.step = rcSlice.col.step || 1;\n    var nl = jStat.arange(rcSlice.col.start,\n                          Math.min(A.length, rcSlice.col.end),\n                          rcSlice.col.step);\n    var m = rcSlice.row;\n    nl.forEach(function(n, i) {\n      A[m][n] = B[i];\n    });\n    return A;\n  }\n\n  if (isNumber(rcSlice.col)) {\n    rcSlice.row = rcSlice.row || {};\n    rcSlice.row.start = rcSlice.row.start || 0;\n    rcSlice.row.end = rcSlice.row.end || A.length;\n    rcSlice.row.step = rcSlice.row.step || 1;\n    var ml = jStat.arange(rcSlice.row.start,\n                          Math.min(A[0].length, rcSlice.row.end),\n                          rcSlice.row.step);\n    var n = rcSlice.col;\n    ml.forEach(function(m, j) {\n      A[m][n] = B[j];\n    });\n    return A;\n  }\n\n  if (B[0].length === undefined) {\n    B = [B];\n  }\n  rcSlice.row.start = rcSlice.row.start || 0;\n  rcSlice.row.end = rcSlice.row.end || A.length;\n  rcSlice.row.step = rcSlice.row.step || 1;\n  rcSlice.col.start = rcSlice.col.start || 0;\n  rcSlice.col.end = rcSlice.col.end || A[0].length;\n  rcSlice.col.step = rcSlice.col.step || 1;\n  var ml = jStat.arange(rcSlice.row.start,\n                        Math.min(A.length, rcSlice.row.end),\n                        rcSlice.row.step);\n  var nl = jStat.arange(rcSlice.col.start,\n                        Math.min(A[0].length, rcSlice.col.end),\n                        rcSlice.col.step);\n  ml.forEach(function(m, i) {\n    nl.forEach(function(n, j) {\n      A[m][n] = B[i][j];\n    });\n  });\n  return A;\n};\n\n\n// [1,2,3] ->\n// [[1,0,0],[0,2,0],[0,0,3]]\njStat.diagonal = function diagonal(diagArray) {\n  var mat = jStat.zeros(diagArray.length, diagArray.length);\n  diagArray.forEach(function(t, i) {\n    mat[i][i] = t;\n  });\n  return mat;\n};\n\n\n// return copy of A\njStat.copy = function copy(A) {\n  return A.map(function(row) {\n    if (isNumber(row))\n      return row;\n    return row.map(function(t) {\n      return t;\n    });\n  });\n};\n\n\n// TODO: Go over this entire implementation. Seems a tragic waste of resources\n// doing all this work. Instead, and while ugly, use new Function() to generate\n// a custom function for each static method.\n\n// Quick reference.\nvar jProto = jStat.prototype;\n\n// Default length.\njProto.length = 0;\n\n// For internal use only.\n// TODO: Check if they're actually used, and if they are then rename them\n// to _*\njProto.push = Array.prototype.push;\njProto.sort = Array.prototype.sort;\njProto.splice = Array.prototype.splice;\njProto.slice = Array.prototype.slice;\n\n\n// Return a clean array.\njProto.toArray = function toArray() {\n  return this.length > 1 ? slice.call(this) : slice.call(this)[0];\n};\n\n\n// Map a function to a matrix or vector.\njProto.map = function map(func, toAlter) {\n  return jStat(jStat.map(this, func, toAlter));\n};\n\n\n// Cumulatively combine the elements of a matrix or vector using a function.\njProto.cumreduce = function cumreduce(func, toAlter) {\n  return jStat(jStat.cumreduce(this, func, toAlter));\n};\n\n\n// Destructively alter an array.\njProto.alter = function alter(func) {\n  jStat.alter(this, func);\n  return this;\n};\n\n\n// Extend prototype with methods that have no argument.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jProto[passfunc] = function(func) {\n      var self = this,\n      results;\n      // Check for callback.\n      if (func) {\n        setTimeout(function() {\n          func.call(self, jProto[passfunc].call(self));\n        });\n        return this;\n      }\n      results = jStat[passfunc](this);\n      return isArray(results) ? jStat(results) : results;\n    };\n  })(funcs[i]);\n})('transpose clear symmetric rows cols dimensions diag antidiag'.split(' '));\n\n\n// Extend prototype with methods that have one argument.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jProto[passfunc] = function(index, func) {\n      var self = this;\n      // check for callback\n      if (func) {\n        setTimeout(function() {\n          func.call(self, jProto[passfunc].call(self, index));\n        });\n        return this;\n      }\n      return jStat(jStat[passfunc](this, index));\n    };\n  })(funcs[i]);\n})('row col'.split(' '));\n\n\n// Extend prototype with simple shortcut methods.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jProto[passfunc] = function() {\n      return jStat(jStat[passfunc].apply(null, arguments));\n    };\n  })(funcs[i]);\n})('create zeros ones rand identity'.split(' '));\n\n\n// Exposing jStat.\nreturn jStat;\n\n}(Math));\n(function(jStat, Math) {\n\nvar isFunction = jStat.utils.isFunction;\n\n// Ascending functions for sort\nfunction ascNum(a, b) { return a - b; }\n\nfunction clip(arg, min, max) {\n  return Math.max(min, Math.min(arg, max));\n}\n\n\n// sum of an array\njStat.sum = function sum(arr) {\n  var sum = 0;\n  var i = arr.length;\n  while (--i >= 0)\n    sum += arr[i];\n  return sum;\n};\n\n\n// sum squared\njStat.sumsqrd = function sumsqrd(arr) {\n  var sum = 0;\n  var i = arr.length;\n  while (--i >= 0)\n    sum += arr[i] * arr[i];\n  return sum;\n};\n\n\n// sum of squared errors of prediction (SSE)\njStat.sumsqerr = function sumsqerr(arr) {\n  var mean = jStat.mean(arr);\n  var sum = 0;\n  var i = arr.length;\n  var tmp;\n  while (--i >= 0) {\n    tmp = arr[i] - mean;\n    sum += tmp * tmp;\n  }\n  return sum;\n};\n\n// sum of an array in each row\njStat.sumrow = function sumrow(arr) {\n  var sum = 0;\n  var i = arr.length;\n  while (--i >= 0)\n    sum += arr[i];\n  return sum;\n};\n\n// product of an array\njStat.product = function product(arr) {\n  var prod = 1;\n  var i = arr.length;\n  while (--i >= 0)\n    prod *= arr[i];\n  return prod;\n};\n\n\n// minimum value of an array\njStat.min = function min(arr) {\n  var low = arr[0];\n  var i = 0;\n  while (++i < arr.length)\n    if (arr[i] < low)\n      low = arr[i];\n  return low;\n};\n\n\n// maximum value of an array\njStat.max = function max(arr) {\n  var high = arr[0];\n  var i = 0;\n  while (++i < arr.length)\n    if (arr[i] > high)\n      high = arr[i];\n  return high;\n};\n\n\n// unique values of an array\njStat.unique = function unique(arr) {\n  var hash = {}, _arr = [];\n  for(var i = 0; i < arr.length; i++) {\n    if (!hash[arr[i]]) {\n      hash[arr[i]] = true;\n      _arr.push(arr[i]);\n    }\n  }\n  return _arr;\n};\n\n\n// mean value of an array\njStat.mean = function mean(arr) {\n  return jStat.sum(arr) / arr.length;\n};\n\n\n// mean squared error (MSE)\njStat.meansqerr = function meansqerr(arr) {\n  return jStat.sumsqerr(arr) / arr.length;\n};\n\n\n// geometric mean of an array\njStat.geomean = function geomean(arr) {\n  return Math.pow(jStat.product(arr), 1 / arr.length);\n};\n\n\n// median of an array\njStat.median = function median(arr) {\n  var arrlen = arr.length;\n  var _arr = arr.slice().sort(ascNum);\n  // check if array is even or odd, then return the appropriate\n  return !(arrlen & 1)\n    ? (_arr[(arrlen / 2) - 1 ] + _arr[(arrlen / 2)]) / 2\n    : _arr[(arrlen / 2) | 0 ];\n};\n\n\n// cumulative sum of an array\njStat.cumsum = function cumsum(arr) {\n  return jStat.cumreduce(arr, function (a, b) { return a + b; });\n};\n\n\n// cumulative product of an array\njStat.cumprod = function cumprod(arr) {\n  return jStat.cumreduce(arr, function (a, b) { return a * b; });\n};\n\n\n// successive differences of a sequence\njStat.diff = function diff(arr) {\n  var diffs = [];\n  var arrLen = arr.length;\n  var i;\n  for (var i = 1; i < arrLen; i++)\n    diffs.push(arr[i] - arr[i - 1]);\n  return diffs;\n};\n\n\n// ranks of an array\njStat.rank = function (arr) {\n  var arrlen = arr.length;\n  var sorted = arr.slice().sort(ascNum);\n  var ranks = new Array(arrlen);\n  for (var i = 0; i < arrlen; i++) {\n    var first = sorted.indexOf(arr[i]);\n    var last = sorted.lastIndexOf(arr[i]);\n    if (first === last) {\n      var val = first;\n    } else {\n      var val = (first + last) / 2;\n    }\n    ranks[i] = val + 1;\n  }\n  return ranks;\n};\n\n\n// mode of an array\n// if there are multiple modes of an array, return all of them\n// is this the appropriate way of handling it?\njStat.mode = function mode(arr) {\n  var arrLen = arr.length;\n  var _arr = arr.slice().sort(ascNum);\n  var count = 1;\n  var maxCount = 0;\n  var numMaxCount = 0;\n  var mode_arr = [];\n  var i;\n\n  for (var i = 0; i < arrLen; i++) {\n    if (_arr[i] === _arr[i + 1]) {\n      count++;\n    } else {\n      if (count > maxCount) {\n        mode_arr = [_arr[i]];\n        maxCount = count;\n        numMaxCount = 0;\n      }\n      // are there multiple max counts\n      else if (count === maxCount) {\n        mode_arr.push(_arr[i]);\n        numMaxCount++;\n      }\n      // resetting count for new value in array\n      count = 1;\n    }\n  }\n\n  return numMaxCount === 0 ? mode_arr[0] : mode_arr;\n};\n\n\n// range of an array\njStat.range = function range(arr) {\n  return jStat.max(arr) - jStat.min(arr);\n};\n\n// variance of an array\n// flag = true indicates sample instead of population\njStat.variance = function variance(arr, flag) {\n  return jStat.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));\n};\n\n// pooled variance of an array of arrays\njStat.pooledvariance = function pooledvariance(arr) {\n  var sumsqerr = arr.reduce(function (a, samples) {return a + jStat.sumsqerr(samples);}, 0);\n  var count = arr.reduce(function (a, samples) {return a + samples.length;}, 0);\n  return sumsqerr / (count - arr.length);\n};\n\n// deviation of an array\njStat.deviation = function (arr) {\n  var mean = jStat.mean(arr);\n  var arrlen = arr.length;\n  var dev = new Array(arrlen);\n  for (var i = 0; i < arrlen; i++) {\n    dev[i] = arr[i] - mean;\n  }\n  return dev;\n};\n\n// standard deviation of an array\n// flag = true indicates sample instead of population\njStat.stdev = function stdev(arr, flag) {\n  return Math.sqrt(jStat.variance(arr, flag));\n};\n\n// pooled standard deviation of an array of arrays\njStat.pooledstdev = function pooledstdev(arr) {\n  return Math.sqrt(jStat.pooledvariance(arr));\n};\n\n// mean deviation (mean absolute deviation) of an array\njStat.meandev = function meandev(arr) {\n  var mean = jStat.mean(arr);\n  var a = [];\n  for (var i = arr.length - 1; i >= 0; i--) {\n    a.push(Math.abs(arr[i] - mean));\n  }\n  return jStat.mean(a);\n};\n\n\n// median deviation (median absolute deviation) of an array\njStat.meddev = function meddev(arr) {\n  var median = jStat.median(arr);\n  var a = [];\n  for (var i = arr.length - 1; i >= 0; i--) {\n    a.push(Math.abs(arr[i] - median));\n  }\n  return jStat.median(a);\n};\n\n\n// coefficient of variation\njStat.coeffvar = function coeffvar(arr) {\n  return jStat.stdev(arr) / jStat.mean(arr);\n};\n\n\n// quartiles of an array\njStat.quartiles = function quartiles(arr) {\n  var arrlen = arr.length;\n  var _arr = arr.slice().sort(ascNum);\n  return [\n    _arr[ Math.round((arrlen) / 4) - 1 ],\n    _arr[ Math.round((arrlen) / 2) - 1 ],\n    _arr[ Math.round((arrlen) * 3 / 4) - 1 ]\n  ];\n};\n\n\n// Arbitary quantiles of an array. Direct port of the scipy.stats\n// implementation by Pierre GF Gerard-Marchant.\njStat.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {\n  var sortedArray = arr.slice().sort(ascNum);\n  var quantileVals = [quantilesArray.length];\n  var n = arr.length;\n  var i, p, m, aleph, k, gamma;\n\n  if (typeof alphap === 'undefined')\n    alphap = 3 / 8;\n  if (typeof betap === 'undefined')\n    betap = 3 / 8;\n\n  for (var i = 0; i < quantilesArray.length; i++) {\n    p = quantilesArray[i];\n    m = alphap + p * (1 - alphap - betap);\n    aleph = n * p + m;\n    k = Math.floor(clip(aleph, 1, n - 1));\n    gamma = clip(aleph - k, 0, 1);\n    quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];\n  }\n\n  return quantileVals;\n};\n\n// Returns the k-th percentile of values in a range, where k is in the\n// range 0..1, exclusive.\njStat.percentile = function percentile(arr, k) {\n  var _arr = arr.slice().sort(ascNum);\n  var realIndex = k * (_arr.length - 1);\n  var index = parseInt(realIndex);\n  var frac = realIndex - index;\n\n  if (index + 1 < _arr.length) {\n    return _arr[index] * (1 - frac) + _arr[index + 1] * frac;\n  } else {\n    return _arr[index];\n  }\n}\n\n\n// The percentile rank of score in a given array. Returns the percentage\n// of all values in the input array that are less than (kind='strict') or\n// less or equal than (kind='weak') score. Default is weak.\njStat.percentileOfScore = function percentileOfScore(arr, score, kind) {\n  var counter = 0;\n  var len = arr.length;\n  var strict = false;\n  var value, i;\n\n  if (kind === 'strict')\n    strict = true;\n\n  for (var i = 0; i < len; i++) {\n    value = arr[i];\n    if ((strict && value < score) ||\n        (!strict && value <= score)) {\n      counter++;\n    }\n  }\n\n  return counter / len;\n};\n\n\n// Histogram (bin count) data\njStat.histogram = function histogram(arr, bins) {\n  var first = jStat.min(arr);\n  var binCnt = bins || 4;\n  var binWidth = (jStat.max(arr) - first) / binCnt;\n  var len = arr.length;\n  var bins = [];\n  var i;\n\n  for (var i = 0; i < binCnt; i++)\n    bins[i] = 0;\n  for (var i = 0; i < len; i++)\n    bins[Math.min(Math.floor(((arr[i] - first) / binWidth)), binCnt - 1)] += 1;\n\n  return bins;\n};\n\n\n// covariance of two arrays\njStat.covariance = function covariance(arr1, arr2) {\n  var u = jStat.mean(arr1);\n  var v = jStat.mean(arr2);\n  var arr1Len = arr1.length;\n  var sq_dev = new Array(arr1Len);\n  var i;\n\n  for (var i = 0; i < arr1Len; i++)\n    sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);\n\n  return jStat.sum(sq_dev) / (arr1Len - 1);\n};\n\n\n// (pearson's) population correlation coefficient, rho\njStat.corrcoeff = function corrcoeff(arr1, arr2) {\n  return jStat.covariance(arr1, arr2) /\n      jStat.stdev(arr1, 1) /\n      jStat.stdev(arr2, 1);\n};\n\n  // (spearman's) rank correlation coefficient, sp\njStat.spearmancoeff =  function (arr1, arr2) {\n  arr1 = jStat.rank(arr1);\n  arr2 = jStat.rank(arr2);\n  //return pearson's correlation of the ranks:\n  return jStat.corrcoeff(arr1, arr2);\n}\n\n\n// statistical standardized moments (general form of skew/kurt)\njStat.stanMoment = function stanMoment(arr, n) {\n  var mu = jStat.mean(arr);\n  var sigma = jStat.stdev(arr);\n  var len = arr.length;\n  var skewSum = 0;\n\n  for (var i = 0; i < len; i++)\n    skewSum += Math.pow((arr[i] - mu) / sigma, n);\n\n  return skewSum / arr.length;\n};\n\n// (pearson's) moment coefficient of skewness\njStat.skewness = function skewness(arr) {\n  return jStat.stanMoment(arr, 3);\n};\n\n// (pearson's) (excess) kurtosis\njStat.kurtosis = function kurtosis(arr) {\n  return jStat.stanMoment(arr, 4) - 3;\n};\n\n\nvar jProto = jStat.prototype;\n\n\n// Extend jProto with method for calculating cumulative sums and products.\n// This differs from the similar extension below as cumsum and cumprod should\n// not be run again in the case fullbool === true.\n// If a matrix is passed, automatically assume operation should be done on the\n// columns.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    // If a matrix is passed, automatically assume operation should be done on\n    // the columns.\n    jProto[passfunc] = function(fullbool, func) {\n      var arr = [];\n      var i = 0;\n      var tmpthis = this;\n      // Assignment reassignation depending on how parameters were passed in.\n      if (isFunction(fullbool)) {\n        func = fullbool;\n        fullbool = false;\n      }\n      // Check if a callback was passed with the function.\n      if (func) {\n        setTimeout(function() {\n          func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n        });\n        return this;\n      }\n      // Check if matrix and run calculations.\n      if (this.length > 1) {\n        tmpthis = fullbool === true ? this : this.transpose();\n        for (; i < tmpthis.length; i++)\n          arr[i] = jStat[passfunc](tmpthis[i]);\n        return arr;\n      }\n      // Pass fullbool if only vector, not a matrix. for variance and stdev.\n      return jStat[passfunc](this[0], fullbool);\n    };\n  })(funcs[i]);\n})(('cumsum cumprod').split(' '));\n\n\n// Extend jProto with methods which don't require arguments and work on columns.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    // If a matrix is passed, automatically assume operation should be done on\n    // the columns.\n    jProto[passfunc] = function(fullbool, func) {\n      var arr = [];\n      var i = 0;\n      var tmpthis = this;\n      // Assignment reassignation depending on how parameters were passed in.\n      if (isFunction(fullbool)) {\n        func = fullbool;\n        fullbool = false;\n      }\n      // Check if a callback was passed with the function.\n      if (func) {\n        setTimeout(function() {\n          func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n        });\n        return this;\n      }\n      // Check if matrix and run calculations.\n      if (this.length > 1) {\n        if (passfunc !== 'sumrow')\n          tmpthis = fullbool === true ? this : this.transpose();\n        for (; i < tmpthis.length; i++)\n          arr[i] = jStat[passfunc](tmpthis[i]);\n        return fullbool === true\n            ? jStat[passfunc](jStat.utils.toVector(arr))\n            : arr;\n      }\n      // Pass fullbool if only vector, not a matrix. for variance and stdev.\n      return jStat[passfunc](this[0], fullbool);\n    };\n  })(funcs[i]);\n})(('sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr ' +\n    'geomean median diff rank mode range variance deviation stdev meandev ' +\n    'meddev coeffvar quartiles histogram skewness kurtosis').split(' '));\n\n\n// Extend jProto with functions that take arguments. Operations on matrices are\n// done on columns.\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jProto[passfunc] = function() {\n      var arr = [];\n      var i = 0;\n      var tmpthis = this;\n      var args = Array.prototype.slice.call(arguments);\n\n      // If the last argument is a function, we assume it's a callback; we\n      // strip the callback out and call the function again.\n      if (isFunction(args[args.length - 1])) {\n        var callbackFunction = args[args.length - 1];\n        var argsToPass = args.slice(0, args.length - 1);\n\n        setTimeout(function() {\n          callbackFunction.call(tmpthis,\n                                jProto[passfunc].apply(tmpthis, argsToPass));\n        });\n        return this;\n\n      // Otherwise we curry the function args and call normally.\n      } else {\n        var callbackFunction = undefined;\n        var curriedFunction = function curriedFunction(vector) {\n          return jStat[passfunc].apply(tmpthis, [vector].concat(args));\n        }\n      }\n\n      // If this is a matrix, run column-by-column.\n      if (this.length > 1) {\n        tmpthis = tmpthis.transpose();\n        for (; i < tmpthis.length; i++)\n          arr[i] = curriedFunction(tmpthis[i]);\n        return arr;\n      }\n\n      // Otherwise run on the vector.\n      return curriedFunction(this[0]);\n    };\n  })(funcs[i]);\n})('quantiles percentileOfScore'.split(' '));\n\n}(jStat, Math));\n// Special functions //\n(function(jStat, Math) {\n\n// Log-gamma function\njStat.gammaln = function gammaln(x) {\n  var j = 0;\n  var cof = [\n    76.18009172947146, -86.50532032941677, 24.01409824083091,\n    -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5\n  ];\n  var ser = 1.000000000190015;\n  var xx, y, tmp;\n  tmp = (y = xx = x) + 5.5;\n  tmp -= (xx + 0.5) * Math.log(tmp);\n  for (; j < 6; j++)\n    ser += cof[j] / ++y;\n  return Math.log(2.5066282746310005 * ser / xx) - tmp;\n};\n\n\n// gamma of x\njStat.gammafn = function gammafn(x) {\n  var p = [-1.716185138865495, 24.76565080557592, -379.80425647094563,\n           629.3311553128184, 866.9662027904133, -31451.272968848367,\n           -36144.413418691176, 66456.14382024054\n  ];\n  var q = [-30.8402300119739, 315.35062697960416, -1015.1563674902192,\n           -3107.771671572311, 22538.118420980151, 4755.8462775278811,\n           -134659.9598649693, -115132.2596755535];\n  var fact = false;\n  var n = 0;\n  var xden = 0;\n  var xnum = 0;\n  var y = x;\n  var i, z, yi, res, sum, ysq;\n  if (y <= 0) {\n    res = y % 1 + 3.6e-16;\n    if (res) {\n      fact = (!(y & 1) ? 1 : -1) * Math.PI / Math.sin(Math.PI * res);\n      y = 1 - y;\n    } else {\n      return Infinity;\n    }\n  }\n  yi = y;\n  if (y < 1) {\n    z = y++;\n  } else {\n    z = (y -= n = (y | 0) - 1) - 1;\n  }\n  for (var i = 0; i < 8; ++i) {\n    xnum = (xnum + p[i]) * z;\n    xden = xden * z + q[i];\n  }\n  res = xnum / xden + 1;\n  if (yi < y) {\n    res /= yi;\n  } else if (yi > y) {\n    for (var i = 0; i < n; ++i) {\n      res *= y;\n      y++;\n    }\n  }\n  if (fact) {\n    res = fact / res;\n  }\n  return res;\n};\n\n\n// lower incomplete gamma function, which is usually typeset with a\n// lower-case greek gamma as the function symbol\njStat.gammap = function gammap(a, x) {\n  return jStat.lowRegGamma(a, x) * jStat.gammafn(a);\n};\n\n\n// The lower regularized incomplete gamma function, usually written P(a,x)\njStat.lowRegGamma = function lowRegGamma(a, x) {\n  var aln = jStat.gammaln(a);\n  var ap = a;\n  var sum = 1 / a;\n  var del = sum;\n  var b = x + 1 - a;\n  var c = 1 / 1.0e-30;\n  var d = 1 / b;\n  var h = d;\n  var i = 1;\n  // calculate maximum number of itterations required for a\n  var ITMAX = -~(Math.log((a >= 1) ? a : 1 / a) * 8.5 + a * 0.4 + 17);\n  var an, endval;\n\n  if (x < 0 || a <= 0) {\n    return NaN;\n  } else if (x < a + 1) {\n    for (; i <= ITMAX; i++) {\n      sum += del *= x / ++ap;\n    }\n    return (sum * Math.exp(-x + a * Math.log(x) - (aln)));\n  }\n\n  for (; i <= ITMAX; i++) {\n    an = -i * (i - a);\n    b += 2;\n    d = an * d + b;\n    c = b + an / c;\n    d = 1 / d;\n    h *= d * c;\n  }\n\n  return (1 - h * Math.exp(-x + a * Math.log(x) - (aln)));\n};\n\n// natural log factorial of n\njStat.factorialln = function factorialln(n) {\n  return n < 0 ? NaN : jStat.gammaln(n + 1);\n};\n\n// factorial of n\njStat.factorial = function factorial(n) {\n  return n < 0 ? NaN : jStat.gammafn(n + 1);\n};\n\n// combinations of n, m\njStat.combination = function combination(n, m) {\n  // make sure n or m don't exceed the upper limit of usable values\n  return (n > 170 || m > 170)\n      ? Math.exp(jStat.combinationln(n, m))\n      : (jStat.factorial(n) / jStat.factorial(m)) / jStat.factorial(n - m);\n};\n\n\njStat.combinationln = function combinationln(n, m){\n  return jStat.factorialln(n) - jStat.factorialln(m) - jStat.factorialln(n - m);\n};\n\n\n// permutations of n, m\njStat.permutation = function permutation(n, m) {\n  return jStat.factorial(n) / jStat.factorial(n - m);\n};\n\n\n// beta function\njStat.betafn = function betafn(x, y) {\n  // ensure arguments are positive\n  if (x <= 0 || y <= 0)\n    return undefined;\n  // make sure x + y doesn't exceed the upper limit of usable values\n  return (x + y > 170)\n      ? Math.exp(jStat.betaln(x, y))\n      : jStat.gammafn(x) * jStat.gammafn(y) / jStat.gammafn(x + y);\n};\n\n\n// natural logarithm of beta function\njStat.betaln = function betaln(x, y) {\n  return jStat.gammaln(x) + jStat.gammaln(y) - jStat.gammaln(x + y);\n};\n\n\n// Evaluates the continued fraction for incomplete beta function by modified\n// Lentz's method.\njStat.betacf = function betacf(x, a, b) {\n  var fpmin = 1e-30;\n  var m = 1;\n  var qab = a + b;\n  var qap = a + 1;\n  var qam = a - 1;\n  var c = 1;\n  var d = 1 - qab * x / qap;\n  var m2, aa, del, h;\n\n  // These q's will be used in factors that occur in the coefficients\n  if (Math.abs(d) < fpmin)\n    d = fpmin;\n  d = 1 / d;\n  h = d;\n\n  for (; m <= 100; m++) {\n    m2 = 2 * m;\n    aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n    // One step (the even one) of the recurrence\n    d = 1 + aa * d;\n    if (Math.abs(d) < fpmin)\n      d = fpmin;\n    c = 1 + aa / c;\n    if (Math.abs(c) < fpmin)\n      c = fpmin;\n    d = 1 / d;\n    h *= d * c;\n    aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n    // Next step of the recurrence (the odd one)\n    d = 1 + aa * d;\n    if (Math.abs(d) < fpmin)\n      d = fpmin;\n    c = 1 + aa / c;\n    if (Math.abs(c) < fpmin)\n      c = fpmin;\n    d = 1 / d;\n    del = d * c;\n    h *= del;\n    if (Math.abs(del - 1.0) < 3e-7)\n      break;\n  }\n\n  return h;\n};\n\n\n// Returns the inverse of the lower regularized inomplete gamma function\njStat.gammapinv = function gammapinv(p, a) {\n  var j = 0;\n  var a1 = a - 1;\n  var EPS = 1e-8;\n  var gln = jStat.gammaln(a);\n  var x, err, t, u, pp, lna1, afac;\n\n  if (p >= 1)\n    return Math.max(100, a + 100 * Math.sqrt(a));\n  if (p <= 0)\n    return 0;\n  if (a > 1) {\n    lna1 = Math.log(a1);\n    afac = Math.exp(a1 * (lna1 - 1) - gln);\n    pp = (p < 0.5) ? p : 1 - p;\n    t = Math.sqrt(-2 * Math.log(pp));\n    x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;\n    if (p < 0.5)\n      x = -x;\n    x = Math.max(1e-3,\n                 a * Math.pow(1 - 1 / (9 * a) - x / (3 * Math.sqrt(a)), 3));\n  } else {\n    t = 1 - a * (0.253 + a * 0.12);\n    if (p < t)\n      x = Math.pow(p / t, 1 / a);\n    else\n      x = 1 - Math.log(1 - (p - t) / (1 - t));\n  }\n\n  for(; j < 12; j++) {\n    if (x <= 0)\n      return 0;\n    err = jStat.lowRegGamma(a, x) - p;\n    if (a > 1)\n      t = afac * Math.exp(-(x - a1) + a1 * (Math.log(x) - lna1));\n    else\n      t = Math.exp(-x + a1 * Math.log(x) - gln);\n    u = err / t;\n    x -= (t = u / (1 - 0.5 * Math.min(1, u * ((a - 1) / x - 1))));\n    if (x <= 0)\n      x = 0.5 * (x + t);\n    if (Math.abs(t) < EPS * x)\n      break;\n  }\n\n  return x;\n};\n\n\n// Returns the error function erf(x)\njStat.erf = function erf(x) {\n  var cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,\n             -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,\n             4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,\n             1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,\n             6.529054439e-9, 5.059343495e-9, -9.91364156e-10,\n             -2.27365122e-10, 9.6467911e-11, 2.394038e-12,\n             -6.886027e-12, 8.94487e-13, 3.13092e-13,\n             -1.12708e-13, 3.81e-16, 7.106e-15,\n             -1.523e-15, -9.4e-17, 1.21e-16,\n             -2.8e-17];\n  var j = cof.length - 1;\n  var isneg = false;\n  var d = 0;\n  var dd = 0;\n  var t, ty, tmp, res;\n\n  if (x < 0) {\n    x = -x;\n    isneg = true;\n  }\n\n  t = 2 / (2 + x);\n  ty = 4 * t - 2;\n\n  for(; j > 0; j--) {\n    tmp = d;\n    d = ty * d - dd + cof[j];\n    dd = tmp;\n  }\n\n  res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);\n  return isneg ? res - 1 : 1 - res;\n};\n\n\n// Returns the complmentary error function erfc(x)\njStat.erfc = function erfc(x) {\n  return 1 - jStat.erf(x);\n};\n\n\n// Returns the inverse of the complementary error function\njStat.erfcinv = function erfcinv(p) {\n  var j = 0;\n  var x, err, t, pp;\n  if (p >= 2)\n    return -100;\n  if (p <= 0)\n    return 100;\n  pp = (p < 1) ? p : 2 - p;\n  t = Math.sqrt(-2 * Math.log(pp / 2));\n  x = -0.70711 * ((2.30753 + t * 0.27061) /\n                  (1 + t * (0.99229 + t * 0.04481)) - t);\n  for (; j < 2; j++) {\n    err = jStat.erfc(x) - pp;\n    x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);\n  }\n  return (p < 1) ? x : -x;\n};\n\n\n// Returns the inverse of the incomplete beta function\njStat.ibetainv = function ibetainv(p, a, b) {\n  var EPS = 1e-8;\n  var a1 = a - 1;\n  var b1 = b - 1;\n  var j = 0;\n  var lna, lnb, pp, t, u, err, x, al, h, w, afac;\n  if (p <= 0)\n    return 0;\n  if (p >= 1)\n    return 1;\n  if (a >= 1 && b >= 1) {\n    pp = (p < 0.5) ? p : 1 - p;\n    t = Math.sqrt(-2 * Math.log(pp));\n    x = (2.30753 + t * 0.27061) / (1 + t* (0.99229 + t * 0.04481)) - t;\n    if (p < 0.5)\n      x = -x;\n    al = (x * x - 3) / 6;\n    h = 2 / (1 / (2 * a - 1)  + 1 / (2 * b - 1));\n    w = (x * Math.sqrt(al + h) / h) - (1 / (2 * b - 1) - 1 / (2 * a - 1)) *\n        (al + 5 / 6 - 2 / (3 * h));\n    x = a / (a + b * Math.exp(2 * w));\n  } else {\n    lna = Math.log(a / (a + b));\n    lnb = Math.log(b / (a + b));\n    t = Math.exp(a * lna) / a;\n    u = Math.exp(b * lnb) / b;\n    w = t + u;\n    if (p < t / w)\n      x = Math.pow(a * w * p, 1 / a);\n    else\n      x = 1 - Math.pow(b * w * (1 - p), 1 / b);\n  }\n  afac = -jStat.gammaln(a) - jStat.gammaln(b) + jStat.gammaln(a + b);\n  for(; j < 10; j++) {\n    if (x === 0 || x === 1)\n      return x;\n    err = jStat.ibeta(x, a, b) - p;\n    t = Math.exp(a1 * Math.log(x) + b1 * Math.log(1 - x) + afac);\n    u = err / t;\n    x -= (t = u / (1 - 0.5 * Math.min(1, u * (a1 / x - b1 / (1 - x)))));\n    if (x <= 0)\n      x = 0.5 * (x + t);\n    if (x >= 1)\n      x = 0.5 * (x + t + 1);\n    if (Math.abs(t) < EPS * x && j > 0)\n      break;\n  }\n  return x;\n};\n\n\n// Returns the incomplete beta function I_x(a,b)\njStat.ibeta = function ibeta(x, a, b) {\n  // Factors in front of the continued fraction.\n  var bt = (x === 0 || x === 1) ?  0 :\n    Math.exp(jStat.gammaln(a + b) - jStat.gammaln(a) -\n             jStat.gammaln(b) + a * Math.log(x) + b *\n             Math.log(1 - x));\n  if (x < 0 || x > 1)\n    return false;\n  if (x < (a + 1) / (a + b + 2))\n    // Use continued fraction directly.\n    return bt * jStat.betacf(x, a, b) / a;\n  // else use continued fraction after making the symmetry transformation.\n  return 1 - bt * jStat.betacf(1 - x, b, a) / b;\n};\n\n\n// Returns a normal deviate (mu=0, sigma=1).\n// If n and m are specified it returns a object of normal deviates.\njStat.randn = function randn(n, m) {\n  var u, v, x, y, q, mat;\n  if (!m)\n    m = n;\n  if (n)\n    return jStat.create(n, m, function() { return jStat.randn(); });\n  do {\n    u = Math.random();\n    v = 1.7156 * (Math.random() - 0.5);\n    x = u - 0.449871;\n    y = Math.abs(v) + 0.386595;\n    q = x * x + y * (0.19600 * y - 0.25472 * x);\n  } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math.log(u) * u * u));\n  return v / u;\n};\n\n\n// Returns a gamma deviate by the method of Marsaglia and Tsang.\njStat.randg = function randg(shape, n, m) {\n  var oalph = shape;\n  var a1, a2, u, v, x, mat;\n  if (!m)\n    m = n;\n  if (!shape)\n    shape = 1;\n  if (n) {\n    mat = jStat.zeros(n,m);\n    mat.alter(function() { return jStat.randg(shape); });\n    return mat;\n  }\n  if (shape < 1)\n    shape += 1;\n  a1 = shape - 1 / 3;\n  a2 = 1 / Math.sqrt(9 * a1);\n  do {\n    do {\n      x = jStat.randn();\n      v = 1 + a2 * x;\n    } while(v <= 0);\n    v = v * v * v;\n    u = Math.random();\n  } while(u > 1 - 0.331 * Math.pow(x, 4) &&\n          Math.log(u) > 0.5 * x*x + a1 * (1 - v + Math.log(v)));\n  // alpha > 1\n  if (shape == oalph)\n    return a1 * v;\n  // alpha < 1\n  do {\n    u = Math.random();\n  } while(u === 0);\n  return Math.pow(u, 1 / oalph) * a1 * v;\n};\n\n\n// making use of static methods on the instance\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jStat.fn[passfunc] = function() {\n      return jStat(\n          jStat.map(this, function(value) { return jStat[passfunc](value); }));\n    }\n  })(funcs[i]);\n})('gammaln gammafn factorial factorialln'.split(' '));\n\n\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jStat.fn[passfunc] = function() {\n      return jStat(jStat[passfunc].apply(null, arguments));\n    };\n  })(funcs[i]);\n})('randn'.split(' '));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\n// generate all distribution instance methods\n(function(list) {\n  for (var i = 0; i < list.length; i++) (function(func) {\n    // distribution instance method\n    jStat[func] = function(a, b, c) {\n      if (!(this instanceof arguments.callee))\n        return new arguments.callee(a, b, c);\n      this._a = a;\n      this._b = b;\n      this._c = c;\n      return this;\n    };\n    // distribution method to be used on a jStat instance\n    jStat.fn[func] = function(a, b, c) {\n      var newthis = jStat[func](a, b, c);\n      newthis.data = this;\n      return newthis;\n    };\n    // sample instance method\n    jStat[func].prototype.sample = function(arr) {\n      var a = this._a;\n      var b = this._b;\n      var c = this._c;\n      if (arr)\n        return jStat.alter(arr, function() {\n          return jStat[func].sample(a, b, c);\n        });\n      else\n        return jStat[func].sample(a, b, c);\n    };\n    // generate the pdf, cdf and inv instance methods\n    (function(vals) {\n      for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n        jStat[func].prototype[fnfunc] = function(x) {\n          var a = this._a;\n          var b = this._b;\n          var c = this._c;\n          if (!x && x !== 0)\n            x = this.data;\n          if (typeof x !== 'number') {\n            return jStat.fn.map.call(x, function(x) {\n              return jStat[func][fnfunc](x, a, b, c);\n            });\n          }\n          return jStat[func][fnfunc](x, a, b, c);\n        };\n      })(vals[i]);\n    })('pdf cdf inv'.split(' '));\n    // generate the mean, median, mode and variance instance methods\n    (function(vals) {\n      for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n        jStat[func].prototype[fnfunc] = function() {\n          return jStat[func][fnfunc](this._a, this._b, this._c);\n        };\n      })(vals[i]);\n    })('mean median mode variance'.split(' '));\n  })(list[i]);\n})((\n  'beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy ' +\n  'laplace lognormal noncentralt normal pareto studentt weibull uniform ' +\n  'binomial negbin hypgeom poisson triangular tukey arcsine'\n).split(' '));\n\n\n\n// extend beta function with static methods\njStat.extend(jStat.beta, {\n  pdf: function pdf(x, alpha, beta) {\n    // PDF is zero outside the support\n    if (x > 1 || x < 0)\n      return 0;\n    // PDF is one for the uniform case\n    if (alpha == 1 && beta == 1)\n      return 1;\n\n    if (alpha < 512 && beta < 512) {\n      return (Math.pow(x, alpha - 1) * Math.pow(1 - x, beta - 1)) /\n          jStat.betafn(alpha, beta);\n    } else {\n      return Math.exp((alpha - 1) * Math.log(x) +\n                      (beta - 1) * Math.log(1 - x) -\n                      jStat.betaln(alpha, beta));\n    }\n  },\n\n  cdf: function cdf(x, alpha, beta) {\n    return (x > 1 || x < 0) ? (x > 1) * 1 : jStat.ibeta(x, alpha, beta);\n  },\n\n  inv: function inv(x, alpha, beta) {\n    return jStat.ibetainv(x, alpha, beta);\n  },\n\n  mean: function mean(alpha, beta) {\n    return alpha / (alpha + beta);\n  },\n\n  median: function median(alpha, beta) {\n    return jStat.ibetainv(0.5, alpha, beta);\n  },\n\n  mode: function mode(alpha, beta) {\n    return (alpha - 1 ) / ( alpha + beta - 2);\n  },\n\n  // return a random sample\n  sample: function sample(alpha, beta) {\n    var u = jStat.randg(alpha);\n    return u / (u + jStat.randg(beta));\n  },\n\n  variance: function variance(alpha, beta) {\n    return (alpha * beta) / (Math.pow(alpha + beta, 2) * (alpha + beta + 1));\n  }\n});\n\n// extend F function with static methods\njStat.extend(jStat.centralF, {\n  // This implementation of the pdf function avoids float overflow\n  // See the way that R calculates this value:\n  // https://svn.r-project.org/R/trunk/src/nmath/df.c\n  pdf: function pdf(x, df1, df2) {\n    var p, q, f;\n\n    if (x < 0)\n      return 0;\n\n    if (df1 <= 2) {\n      if (x === 0 && df1 < 2) {\n        return Infinity;\n      }\n      if (x === 0 && df1 === 2) {\n        return 1;\n      }\n      return (1 / jStat.betafn(df1 / 2, df2 / 2)) *\n              Math.pow(df1 / df2, df1 / 2) *\n              Math.pow(x, (df1/2) - 1) *\n              Math.pow((1 + (df1 / df2) * x), -(df1 + df2) / 2);\n    }\n\n    p = (df1 * x) / (df2 + x * df1);\n    q = df2 / (df2 + x * df1);\n    f = df1 * q / 2.0;\n    return f * jStat.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);\n  },\n\n  cdf: function cdf(x, df1, df2) {\n    if (x < 0)\n      return 0;\n    return jStat.ibeta((df1 * x) / (df1 * x + df2), df1 / 2, df2 / 2);\n  },\n\n  inv: function inv(x, df1, df2) {\n    return df2 / (df1 * (1 / jStat.ibetainv(x, df1 / 2, df2 / 2) - 1));\n  },\n\n  mean: function mean(df1, df2) {\n    return (df2 > 2) ? df2 / (df2 - 2) : undefined;\n  },\n\n  mode: function mode(df1, df2) {\n    return (df1 > 2) ? (df2 * (df1 - 2)) / (df1 * (df2 + 2)) : undefined;\n  },\n\n  // return a random sample\n  sample: function sample(df1, df2) {\n    var x1 = jStat.randg(df1 / 2) * 2;\n    var x2 = jStat.randg(df2 / 2) * 2;\n    return (x1 / df1) / (x2 / df2);\n  },\n\n  variance: function variance(df1, df2) {\n    if (df2 <= 4)\n      return undefined;\n    return 2 * df2 * df2 * (df1 + df2 - 2) /\n        (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));\n  }\n});\n\n\n// extend cauchy function with static methods\njStat.extend(jStat.cauchy, {\n  pdf: function pdf(x, local, scale) {\n    if (scale < 0) { return 0; }\n\n    return (scale / (Math.pow(x - local, 2) + Math.pow(scale, 2))) / Math.PI;\n  },\n\n  cdf: function cdf(x, local, scale) {\n    return Math.atan((x - local) / scale) / Math.PI + 0.5;\n  },\n\n  inv: function(p, local, scale) {\n    return local + scale * Math.tan(Math.PI * (p - 0.5));\n  },\n\n  median: function median(local, scale) {\n    return local;\n  },\n\n  mode: function mode(local, scale) {\n    return local;\n  },\n\n  sample: function sample(local, scale) {\n    return jStat.randn() *\n        Math.sqrt(1 / (2 * jStat.randg(0.5))) * scale + local;\n  }\n});\n\n\n\n// extend chisquare function with static methods\njStat.extend(jStat.chisquare, {\n  pdf: function pdf(x, dof) {\n    if (x < 0)\n      return 0;\n    return (x === 0 && dof === 2) ? 0.5 :\n        Math.exp((dof / 2 - 1) * Math.log(x) - x / 2 - (dof / 2) *\n                 Math.log(2) - jStat.gammaln(dof / 2));\n  },\n\n  cdf: function cdf(x, dof) {\n    if (x < 0)\n      return 0;\n    return jStat.lowRegGamma(dof / 2, x / 2);\n  },\n\n  inv: function(p, dof) {\n    return 2 * jStat.gammapinv(p, 0.5 * dof);\n  },\n\n  mean : function(dof) {\n    return dof;\n  },\n\n  // TODO: this is an approximation (is there a better way?)\n  median: function median(dof) {\n    return dof * Math.pow(1 - (2 / (9 * dof)), 3);\n  },\n\n  mode: function mode(dof) {\n    return (dof - 2 > 0) ? dof - 2 : 0;\n  },\n\n  sample: function sample(dof) {\n    return jStat.randg(dof / 2) * 2;\n  },\n\n  variance: function variance(dof) {\n    return 2 * dof;\n  }\n});\n\n\n\n// extend exponential function with static methods\njStat.extend(jStat.exponential, {\n  pdf: function pdf(x, rate) {\n    return x < 0 ? 0 : rate * Math.exp(-rate * x);\n  },\n\n  cdf: function cdf(x, rate) {\n    return x < 0 ? 0 : 1 - Math.exp(-rate * x);\n  },\n\n  inv: function(p, rate) {\n    return -Math.log(1 - p) / rate;\n  },\n\n  mean : function(rate) {\n    return 1 / rate;\n  },\n\n  median: function (rate) {\n    return (1 / rate) * Math.log(2);\n  },\n\n  mode: function mode(rate) {\n    return 0;\n  },\n\n  sample: function sample(rate) {\n    return -1 / rate * Math.log(Math.random());\n  },\n\n  variance : function(rate) {\n    return Math.pow(rate, -2);\n  }\n});\n\n\n\n// extend gamma function with static methods\njStat.extend(jStat.gamma, {\n  pdf: function pdf(x, shape, scale) {\n    if (x < 0)\n      return 0;\n    return (x === 0 && shape === 1) ? 1 / scale :\n            Math.exp((shape - 1) * Math.log(x) - x / scale -\n                    jStat.gammaln(shape) - shape * Math.log(scale));\n  },\n\n  cdf: function cdf(x, shape, scale) {\n    if (x < 0)\n      return 0;\n    return jStat.lowRegGamma(shape, x / scale);\n  },\n\n  inv: function(p, shape, scale) {\n    return jStat.gammapinv(p, shape) * scale;\n  },\n\n  mean : function(shape, scale) {\n    return shape * scale;\n  },\n\n  mode: function mode(shape, scale) {\n    if(shape > 1) return (shape - 1) * scale;\n    return undefined;\n  },\n\n  sample: function sample(shape, scale) {\n    return jStat.randg(shape) * scale;\n  },\n\n  variance: function variance(shape, scale) {\n    return shape * scale * scale;\n  }\n});\n\n// extend inverse gamma function with static methods\njStat.extend(jStat.invgamma, {\n  pdf: function pdf(x, shape, scale) {\n    if (x <= 0)\n      return 0;\n    return Math.exp(-(shape + 1) * Math.log(x) - scale / x -\n                    jStat.gammaln(shape) + shape * Math.log(scale));\n  },\n\n  cdf: function cdf(x, shape, scale) {\n    if (x <= 0)\n      return 0;\n    return 1 - jStat.lowRegGamma(shape, scale / x);\n  },\n\n  inv: function(p, shape, scale) {\n    return scale / jStat.gammapinv(1 - p, shape);\n  },\n\n  mean : function(shape, scale) {\n    return (shape > 1) ? scale / (shape - 1) : undefined;\n  },\n\n  mode: function mode(shape, scale) {\n    return scale / (shape + 1);\n  },\n\n  sample: function sample(shape, scale) {\n    return scale / jStat.randg(shape);\n  },\n\n  variance: function variance(shape, scale) {\n    if (shape <= 2)\n      return undefined;\n    return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));\n  }\n});\n\n\n// extend kumaraswamy function with static methods\njStat.extend(jStat.kumaraswamy, {\n  pdf: function pdf(x, alpha, beta) {\n    if (x === 0 && alpha === 1)\n      return beta;\n    else if (x === 1 && beta === 1)\n      return alpha;\n    return Math.exp(Math.log(alpha) + Math.log(beta) + (alpha - 1) *\n                    Math.log(x) + (beta - 1) *\n                    Math.log(1 - Math.pow(x, alpha)));\n  },\n\n  cdf: function cdf(x, alpha, beta) {\n    if (x < 0)\n      return 0;\n    else if (x > 1)\n      return 1;\n    return (1 - Math.pow(1 - Math.pow(x, alpha), beta));\n  },\n\n  inv: function inv(p, alpha, beta) {\n    return Math.pow(1 - Math.pow(1 - p, 1 / beta), 1 / alpha);\n  },\n\n  mean : function(alpha, beta) {\n    return (beta * jStat.gammafn(1 + 1 / alpha) *\n            jStat.gammafn(beta)) / (jStat.gammafn(1 + 1 / alpha + beta));\n  },\n\n  median: function median(alpha, beta) {\n    return Math.pow(1 - Math.pow(2, -1 / beta), 1 / alpha);\n  },\n\n  mode: function mode(alpha, beta) {\n    if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))\n      return undefined;\n    return Math.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);\n  },\n\n  variance: function variance(alpha, beta) {\n    throw new Error('variance not yet implemented');\n    // TODO: complete this\n  }\n});\n\n\n\n// extend lognormal function with static methods\njStat.extend(jStat.lognormal, {\n  pdf: function pdf(x, mu, sigma) {\n    if (x <= 0)\n      return 0;\n    return Math.exp(-Math.log(x) - 0.5 * Math.log(2 * Math.PI) -\n                    Math.log(sigma) - Math.pow(Math.log(x) - mu, 2) /\n                    (2 * sigma * sigma));\n  },\n\n  cdf: function cdf(x, mu, sigma) {\n    if (x < 0)\n      return 0;\n    return 0.5 +\n        (0.5 * jStat.erf((Math.log(x) - mu) / Math.sqrt(2 * sigma * sigma)));\n  },\n\n  inv: function(p, mu, sigma) {\n    return Math.exp(-1.41421356237309505 * sigma * jStat.erfcinv(2 * p) + mu);\n  },\n\n  mean: function mean(mu, sigma) {\n    return Math.exp(mu + sigma * sigma / 2);\n  },\n\n  median: function median(mu, sigma) {\n    return Math.exp(mu);\n  },\n\n  mode: function mode(mu, sigma) {\n    return Math.exp(mu - sigma * sigma);\n  },\n\n  sample: function sample(mu, sigma) {\n    return Math.exp(jStat.randn() * sigma + mu);\n  },\n\n  variance: function variance(mu, sigma) {\n    return (Math.exp(sigma * sigma) - 1) * Math.exp(2 * mu + sigma * sigma);\n  }\n});\n\n\n\n// extend noncentralt function with static methods\njStat.extend(jStat.noncentralt, {\n  pdf: function pdf(x, dof, ncp) {\n    var tol = 1e-14;\n    if (Math.abs(ncp) < tol)  // ncp approx 0; use student-t\n      return jStat.studentt.pdf(x, dof)\n\n    if (Math.abs(x) < tol) {  // different formula for x == 0\n      return Math.exp(jStat.gammaln((dof + 1) / 2) - ncp * ncp / 2 -\n                      0.5 * Math.log(Math.PI * dof) - jStat.gammaln(dof / 2));\n    }\n\n    // formula for x != 0\n    return dof / x *\n        (jStat.noncentralt.cdf(x * Math.sqrt(1 + 2 / dof), dof+2, ncp) -\n         jStat.noncentralt.cdf(x, dof, ncp));\n  },\n\n  cdf: function cdf(x, dof, ncp) {\n    var tol = 1e-14;\n    var min_iterations = 200;\n\n    if (Math.abs(ncp) < tol)  // ncp approx 0; use student-t\n      return jStat.studentt.cdf(x, dof);\n\n    // turn negative x into positive and flip result afterwards\n    var flip = false;\n    if (x < 0) {\n      flip = true;\n      ncp = -ncp;\n    }\n\n    var prob = jStat.normal.cdf(-ncp, 0, 1);\n    var value = tol + 1;\n    // use value at last two steps to determine convergence\n    var lastvalue = value;\n    var y = x * x / (x * x + dof);\n    var j = 0;\n    var p = Math.exp(-ncp * ncp / 2);\n    var q = Math.exp(-ncp * ncp / 2 - 0.5 * Math.log(2) -\n                     jStat.gammaln(3 / 2)) * ncp;\n    while (j < min_iterations || lastvalue > tol || value > tol) {\n      lastvalue = value;\n      if (j > 0) {\n        p *= (ncp * ncp) / (2 * j);\n        q *= (ncp * ncp) / (2 * (j + 1 / 2));\n      }\n      value = p * jStat.beta.cdf(y, j + 0.5, dof / 2) +\n          q * jStat.beta.cdf(y, j+1, dof/2);\n      prob += 0.5 * value;\n      j++;\n    }\n\n    return flip ? (1 - prob) : prob;\n  }\n});\n\n\n// extend normal function with static methods\njStat.extend(jStat.normal, {\n  pdf: function pdf(x, mean, std) {\n    return Math.exp(-0.5 * Math.log(2 * Math.PI) -\n                    Math.log(std) - Math.pow(x - mean, 2) / (2 * std * std));\n  },\n\n  cdf: function cdf(x, mean, std) {\n    return 0.5 * (1 + jStat.erf((x - mean) / Math.sqrt(2 * std * std)));\n  },\n\n  inv: function(p, mean, std) {\n    return -1.41421356237309505 * std * jStat.erfcinv(2 * p) + mean;\n  },\n\n  mean : function(mean, std) {\n    return mean;\n  },\n\n  median: function median(mean, std) {\n    return mean;\n  },\n\n  mode: function (mean, std) {\n    return mean;\n  },\n\n  sample: function sample(mean, std) {\n    return jStat.randn() * std + mean;\n  },\n\n  variance : function(mean, std) {\n    return std * std;\n  }\n});\n\n\n\n// extend pareto function with static methods\njStat.extend(jStat.pareto, {\n  pdf: function pdf(x, scale, shape) {\n    if (x < scale)\n      return 0;\n    return (shape * Math.pow(scale, shape)) / Math.pow(x, shape + 1);\n  },\n\n  cdf: function cdf(x, scale, shape) {\n    if (x < scale)\n      return 0;\n    return 1 - Math.pow(scale / x, shape);\n  },\n\n  inv: function inv(p, scale, shape) {\n    return scale / Math.pow(1 - p, 1 / shape);\n  },\n\n  mean: function mean(scale, shape) {\n    if (shape <= 1)\n      return undefined;\n    return (shape * Math.pow(scale, shape)) / (shape - 1);\n  },\n\n  median: function median(scale, shape) {\n    return scale * (shape * Math.SQRT2);\n  },\n\n  mode: function mode(scale, shape) {\n    return scale;\n  },\n\n  variance : function(scale, shape) {\n    if (shape <= 2)\n      return undefined;\n    return (scale*scale * shape) / (Math.pow(shape - 1, 2) * (shape - 2));\n  }\n});\n\n\n\n// extend studentt function with static methods\njStat.extend(jStat.studentt, {\n  pdf: function pdf(x, dof) {\n    dof = dof > 1e100 ? 1e100 : dof;\n    return (1/(Math.sqrt(dof) * jStat.betafn(0.5, dof/2))) *\n        Math.pow(1 + ((x * x) / dof), -((dof + 1) / 2));\n  },\n\n  cdf: function cdf(x, dof) {\n    var dof2 = dof / 2;\n    return jStat.ibeta((x + Math.sqrt(x * x + dof)) /\n                       (2 * Math.sqrt(x * x + dof)), dof2, dof2);\n  },\n\n  inv: function(p, dof) {\n    var x = jStat.ibetainv(2 * Math.min(p, 1 - p), 0.5 * dof, 0.5);\n    x = Math.sqrt(dof * (1 - x) / x);\n    return (p > 0.5) ? x : -x;\n  },\n\n  mean: function mean(dof) {\n    return (dof > 1) ? 0 : undefined;\n  },\n\n  median: function median(dof) {\n    return 0;\n  },\n\n  mode: function mode(dof) {\n    return 0;\n  },\n\n  sample: function sample(dof) {\n    return jStat.randn() * Math.sqrt(dof / (2 * jStat.randg(dof / 2)));\n  },\n\n  variance: function variance(dof) {\n    return (dof  > 2) ? dof / (dof - 2) : (dof > 1) ? Infinity : undefined;\n  }\n});\n\n\n\n// extend weibull function with static methods\njStat.extend(jStat.weibull, {\n  pdf: function pdf(x, scale, shape) {\n    if (x < 0 || scale < 0 || shape < 0)\n      return 0;\n    return (shape / scale) * Math.pow((x / scale), (shape - 1)) *\n        Math.exp(-(Math.pow((x / scale), shape)));\n  },\n\n  cdf: function cdf(x, scale, shape) {\n    return x < 0 ? 0 : 1 - Math.exp(-Math.pow((x / scale), shape));\n  },\n\n  inv: function(p, scale, shape) {\n    return scale * Math.pow(-Math.log(1 - p), 1 / shape);\n  },\n\n  mean : function(scale, shape) {\n    return scale * jStat.gammafn(1 + 1 / shape);\n  },\n\n  median: function median(scale, shape) {\n    return scale * Math.pow(Math.log(2), 1 / shape);\n  },\n\n  mode: function mode(scale, shape) {\n    if (shape <= 1)\n      return 0;\n    return scale * Math.pow((shape - 1) / shape, 1 / shape);\n  },\n\n  sample: function sample(scale, shape) {\n    return scale * Math.pow(-Math.log(Math.random()), 1 / shape);\n  },\n\n  variance: function variance(scale, shape) {\n    return scale * scale * jStat.gammafn(1 + 2 / shape) -\n        Math.pow(jStat.weibull.mean(scale, shape), 2);\n  }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.uniform, {\n  pdf: function pdf(x, a, b) {\n    return (x < a || x > b) ? 0 : 1 / (b - a);\n  },\n\n  cdf: function cdf(x, a, b) {\n    if (x < a)\n      return 0;\n    else if (x < b)\n      return (x - a) / (b - a);\n    return 1;\n  },\n\n  inv: function(p, a, b) {\n    return a + (p * (b - a));\n  },\n\n  mean: function mean(a, b) {\n    return 0.5 * (a + b);\n  },\n\n  median: function median(a, b) {\n    return jStat.mean(a, b);\n  },\n\n  mode: function mode(a, b) {\n    throw new Error('mode is not yet implemented');\n  },\n\n  sample: function sample(a, b) {\n    return (a / 2 + b / 2) + (b / 2 - a / 2) * (2 * Math.random() - 1);\n  },\n\n  variance: function variance(a, b) {\n    return Math.pow(b - a, 2) / 12;\n  }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.binomial, {\n  pdf: function pdf(k, n, p) {\n    return (p === 0 || p === 1) ?\n      ((n * p) === k ? 1 : 0) :\n      jStat.combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n  },\n\n  cdf: function cdf(x, n, p) {\n    var binomarr = [],\n    k = 0;\n    if (x < 0) {\n      return 0;\n    }\n    if (x < n) {\n      for (; k <= x; k++) {\n        binomarr[ k ] = jStat.binomial.pdf(k, n, p);\n      }\n      return jStat.sum(binomarr);\n    }\n    return 1;\n  }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.negbin, {\n  pdf: function pdf(k, r, p) {\n    if (k !== k >>> 0)\n      return false;\n    if (k < 0)\n      return 0;\n    return jStat.combination(k + r - 1, r - 1) *\n        Math.pow(1 - p, k) * Math.pow(p, r);\n  },\n\n  cdf: function cdf(x, r, p) {\n    var sum = 0,\n    k = 0;\n    if (x < 0) return 0;\n    for (; k <= x; k++) {\n      sum += jStat.negbin.pdf(k, r, p);\n    }\n    return sum;\n  }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.hypgeom, {\n  pdf: function pdf(k, N, m, n) {\n    // Hypergeometric PDF.\n\n    // A simplification of the CDF algorithm below.\n\n    // k = number of successes drawn\n    // N = population size\n    // m = number of successes in population\n    // n = number of items drawn from population\n\n    if(k !== k | 0) {\n      return false;\n    } else if(k < 0 || k < m - (N - n)) {\n      // It's impossible to have this few successes drawn.\n      return 0;\n    } else if(k > n || k > m) {\n      // It's impossible to have this many successes drawn.\n      return 0;\n    } else if (m * 2 > N) {\n      // More than half the population is successes.\n\n      if(n * 2 > N) {\n        // More than half the population is sampled.\n\n        return jStat.hypgeom.pdf(N - m - n + k, N, N - m, N - n)\n      } else {\n        // Half or less of the population is sampled.\n\n        return jStat.hypgeom.pdf(n - k, N, N - m, n);\n      }\n\n    } else if(n * 2 > N) {\n      // Half or less is successes.\n\n      return jStat.hypgeom.pdf(m - k, N, m, N - n);\n\n    } else if(m < n) {\n      // We want to have the number of things sampled to be less than the\n      // successes available. So swap the definitions of successful and sampled.\n      return jStat.hypgeom.pdf(k, N, n, m);\n    } else {\n      // If we get here, half or less of the population was sampled, half or\n      // less of it was successes, and we had fewer sampled things than\n      // successes. Now we can do this complicated iterative algorithm in an\n      // efficient way.\n\n      // The basic premise of the algorithm is that we partially normalize our\n      // intermediate product to keep it in a numerically good region, and then\n      // finish the normalization at the end.\n\n      // This variable holds the scaled probability of the current number of\n      // successes.\n      var scaledPDF = 1;\n\n      // This keeps track of how much we have normalized.\n      var samplesDone = 0;\n\n      for(var i = 0; i < k; i++) {\n        // For every possible number of successes up to that observed...\n\n        while(scaledPDF > 1 && samplesDone < n) {\n          // Intermediate result is growing too big. Apply some of the\n          // normalization to shrink everything.\n\n          scaledPDF *= 1 - (m / (N - samplesDone));\n\n          // Say we've normalized by this sample already.\n          samplesDone++;\n        }\n\n        // Work out the partially-normalized hypergeometric PDF for the next\n        // number of successes\n        scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n      }\n\n      for(; samplesDone < n; samplesDone++) {\n        // Apply all the rest of the normalization\n        scaledPDF *= 1 - (m / (N - samplesDone));\n      }\n\n      // Bound answer sanely before returning.\n      return Math.min(1, Math.max(0, scaledPDF));\n    }\n  },\n\n  cdf: function cdf(x, N, m, n) {\n    // Hypergeometric CDF.\n\n    // This algorithm is due to Prof. Thomas S. Ferguson, <tom@math.ucla.edu>,\n    // and comes from his hypergeometric test calculator at\n    // <http://www.math.ucla.edu/~tom/distributions/Hypergeometric.html>.\n\n    // x = number of successes drawn\n    // N = population size\n    // m = number of successes in population\n    // n = number of items drawn from population\n\n    if(x < 0 || x < m - (N - n)) {\n      // It's impossible to have this few successes drawn or fewer.\n      return 0;\n    } else if(x >= n || x >= m) {\n      // We will always have this many successes or fewer.\n      return 1;\n    } else if (m * 2 > N) {\n      // More than half the population is successes.\n\n      if(n * 2 > N) {\n        // More than half the population is sampled.\n\n        return jStat.hypgeom.cdf(N - m - n + x, N, N - m, N - n)\n      } else {\n        // Half or less of the population is sampled.\n\n        return 1 - jStat.hypgeom.cdf(n - x - 1, N, N - m, n);\n      }\n\n    } else if(n * 2 > N) {\n      // Half or less is successes.\n\n      return 1 - jStat.hypgeom.cdf(m - x - 1, N, m, N - n);\n\n    } else if(m < n) {\n      // We want to have the number of things sampled to be less than the\n      // successes available. So swap the definitions of successful and sampled.\n      return jStat.hypgeom.cdf(x, N, n, m);\n    } else {\n      // If we get here, half or less of the population was sampled, half or\n      // less of it was successes, and we had fewer sampled things than\n      // successes. Now we can do this complicated iterative algorithm in an\n      // efficient way.\n\n      // The basic premise of the algorithm is that we partially normalize our\n      // intermediate sum to keep it in a numerically good region, and then\n      // finish the normalization at the end.\n\n      // Holds the intermediate, scaled total CDF.\n      var scaledCDF = 1;\n\n      // This variable holds the scaled probability of the current number of\n      // successes.\n      var scaledPDF = 1;\n\n      // This keeps track of how much we have normalized.\n      var samplesDone = 0;\n\n      for(var i = 0; i < x; i++) {\n        // For every possible number of successes up to that observed...\n\n        while(scaledCDF > 1 && samplesDone < n) {\n          // Intermediate result is growing too big. Apply some of the\n          // normalization to shrink everything.\n\n          var factor = 1 - (m / (N - samplesDone));\n\n          scaledPDF *= factor;\n          scaledCDF *= factor;\n\n          // Say we've normalized by this sample already.\n          samplesDone++;\n        }\n\n        // Work out the partially-normalized hypergeometric PDF for the next\n        // number of successes\n        scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n\n        // Add to the CDF answer.\n        scaledCDF += scaledPDF;\n      }\n\n      for(; samplesDone < n; samplesDone++) {\n        // Apply all the rest of the normalization\n        scaledCDF *= 1 - (m / (N - samplesDone));\n      }\n\n      // Bound answer sanely before returning.\n      return Math.min(1, Math.max(0, scaledCDF));\n    }\n  }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.poisson, {\n  pdf: function pdf(k, l) {\n    if (l < 0 || (k % 1) !== 0 || k < 0) {\n      return 0;\n    }\n\n    return Math.pow(l, k) * Math.exp(-l) / jStat.factorial(k);\n  },\n\n  cdf: function cdf(x, l) {\n    var sumarr = [],\n    k = 0;\n    if (x < 0) return 0;\n    for (; k <= x; k++) {\n      sumarr.push(jStat.poisson.pdf(k, l));\n    }\n    return jStat.sum(sumarr);\n  },\n\n  mean : function(l) {\n    return l;\n  },\n\n  variance : function(l) {\n    return l;\n  },\n\n  sample: function sample(l) {\n    var p = 1, k = 0, L = Math.exp(-l);\n    do {\n      k++;\n      p *= Math.random();\n    } while (p > L);\n    return k - 1;\n  }\n});\n\n// extend triangular function with static methods\njStat.extend(jStat.triangular, {\n  pdf: function pdf(x, a, b, c) {\n    if (b <= a || c < a || c > b) {\n      return NaN;\n    } else {\n      if (x < a || x > b) {\n        return 0;\n      } else if (x < c) {\n          return (2 * (x - a)) / ((b - a) * (c - a));\n      } else if (x === c) {\n          return (2 / (b - a));\n      } else { // x > c\n          return (2 * (b - x)) / ((b - a) * (b - c));\n      }\n    }\n  },\n\n  cdf: function cdf(x, a, b, c) {\n    if (b <= a || c < a || c > b)\n      return NaN;\n    if (x <= a)\n      return 0;\n    else if (x >= b)\n      return 1;\n    if (x <= c)\n      return Math.pow(x - a, 2) / ((b - a) * (c - a));\n    else // x > c\n      return 1 - Math.pow(b - x, 2) / ((b - a) * (b - c));\n  },\n\n  inv: function inv(p, a, b, c) {\n    if (b <= a || c < a || c > b) {\n      return NaN;\n    } else {\n      if (p <= ((c - a) / (b - a))) {\n        return a + (b - a) * Math.sqrt(p * ((c - a) / (b - a)));\n      } else { // p > ((c - a) / (b - a))\n        return a + (b - a) * (1 - Math.sqrt((1 - p) * (1 - ((c - a) / (b - a)))));\n      }\n    }\n  },\n\n  mean: function mean(a, b, c) {\n    return (a + b + c) / 3;\n  },\n\n  median: function median(a, b, c) {\n    if (c <= (a + b) / 2) {\n      return b - Math.sqrt((b - a) * (b - c)) / Math.sqrt(2);\n    } else if (c > (a + b) / 2) {\n      return a + Math.sqrt((b - a) * (c - a)) / Math.sqrt(2);\n    }\n  },\n\n  mode: function mode(a, b, c) {\n    return c;\n  },\n\n  sample: function sample(a, b, c) {\n    var u = Math.random();\n    if (u < ((c - a) / (b - a)))\n      return a + Math.sqrt(u * (b - a) * (c - a))\n    return b - Math.sqrt((1 - u) * (b - a) * (b - c));\n  },\n\n  variance: function variance(a, b, c) {\n    return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;\n  }\n});\n\n\n// extend arcsine function with static methods\njStat.extend(jStat.arcsine, {\n  pdf: function pdf(x, a, b) {\n    if (b <= a) return NaN;\n\n    return (x <= a || x >= b) ? 0 :\n      (2 / Math.PI) *\n        Math.pow(Math.pow(b - a, 2) -\n                  Math.pow(2 * x - a - b, 2), -0.5);\n  },\n\n  cdf: function cdf(x, a, b) {\n    if (x < a)\n      return 0;\n    else if (x < b)\n      return (2 / Math.PI) * Math.asin(Math.sqrt((x - a)/(b - a)));\n    return 1;\n  },\n\n  inv: function(p, a, b) {\n    return a + (0.5 - 0.5 * Math.cos(Math.PI * p)) * (b - a);\n  },\n\n  mean: function mean(a, b) {\n    if (b <= a) return NaN;\n    return (a + b) / 2;\n  },\n\n  median: function median(a, b) {\n    if (b <= a) return NaN;\n    return (a + b) / 2;\n  },\n\n  mode: function mode(a, b) {\n    throw new Error('mode is not yet implemented');\n  },\n\n  sample: function sample(a, b) {\n    return ((a + b) / 2) + ((b - a) / 2) *\n      Math.sin(2 * Math.PI * jStat.uniform.sample(0, 1));\n  },\n\n  variance: function variance(a, b) {\n    if (b <= a) return NaN;\n    return Math.pow(b - a, 2) / 8;\n  }\n});\n\n\nfunction laplaceSign(x) { return x / Math.abs(x); }\n\njStat.extend(jStat.laplace, {\n  pdf: function pdf(x, mu, b) {\n    return (b <= 0) ? 0 : (Math.exp(-Math.abs(x - mu) / b)) / (2 * b);\n  },\n\n  cdf: function cdf(x, mu, b) {\n    if (b <= 0) { return 0; }\n\n    if(x < mu) {\n      return 0.5 * Math.exp((x - mu) / b);\n    } else {\n      return 1 - 0.5 * Math.exp(- (x - mu) / b);\n    }\n  },\n\n  mean: function(mu, b) {\n    return mu;\n  },\n\n  median: function(mu, b) {\n    return mu;\n  },\n\n  mode: function(mu, b) {\n    return mu;\n  },\n\n  variance: function(mu, b) {\n    return 2 * b * b;\n  },\n\n  sample: function sample(mu, b) {\n    var u = Math.random() - 0.5;\n\n    return mu - (b * laplaceSign(u) * Math.log(1 - (2 * Math.abs(u))));\n  }\n});\n\nfunction tukeyWprob(w, rr, cc) {\n  var nleg = 12;\n  var ihalf = 6;\n\n  var C1 = -30;\n  var C2 = -50;\n  var C3 = 60;\n  var bb   = 8;\n  var wlar = 3;\n  var wincr1 = 2;\n  var wincr2 = 3;\n  var xleg = [\n    0.981560634246719250690549090149,\n    0.904117256370474856678465866119,\n    0.769902674194304687036893833213,\n    0.587317954286617447296702418941,\n    0.367831498998180193752691536644,\n    0.125233408511468915472441369464\n  ];\n  var aleg = [\n    0.047175336386511827194615961485,\n    0.106939325995318430960254718194,\n    0.160078328543346226334652529543,\n    0.203167426723065921749064455810,\n    0.233492536538354808760849898925,\n    0.249147045813402785000562436043\n  ];\n\n  var qsqz = w * 0.5;\n\n  // if w >= 16 then the integral lower bound (occurs for c=20)\n  // is 0.99999999999995 so return a value of 1.\n\n  if (qsqz >= bb)\n    return 1.0;\n\n  // find (f(w/2) - 1) ^ cc\n  // (first term in integral of hartley's form).\n\n  var pr_w = 2 * jStat.normal.cdf(qsqz, 0, 1, 1, 0) - 1; // erf(qsqz / M_SQRT2)\n  // if pr_w ^ cc < 2e-22 then set pr_w = 0\n  if (pr_w >= Math.exp(C2 / cc))\n    pr_w = Math.pow(pr_w, cc);\n  else\n    pr_w = 0.0;\n\n  // if w is large then the second component of the\n  // integral is small, so fewer intervals are needed.\n\n  var wincr;\n  if (w > wlar)\n    wincr = wincr1;\n  else\n    wincr = wincr2;\n\n  // find the integral of second term of hartley's form\n  // for the integral of the range for equal-length\n  // intervals using legendre quadrature.  limits of\n  // integration are from (w/2, 8).  two or three\n  // equal-length intervals are used.\n\n  // blb and bub are lower and upper limits of integration.\n\n  var blb = qsqz;\n  var binc = (bb - qsqz) / wincr;\n  var bub = blb + binc;\n  var einsum = 0.0;\n\n  // integrate over each interval\n\n  var cc1 = cc - 1.0;\n  for (var wi = 1; wi <= wincr; wi++) {\n    var elsum = 0.0;\n    var a = 0.5 * (bub + blb);\n\n    // legendre quadrature with order = nleg\n\n    var b = 0.5 * (bub - blb);\n\n    for (var jj = 1; jj <= nleg; jj++) {\n      var j, xx;\n      if (ihalf < jj) {\n        j = (nleg - jj) + 1;\n        xx = xleg[j-1];\n      } else {\n        j = jj;\n        xx = -xleg[j-1];\n      }\n      var c = b * xx;\n      var ac = a + c;\n\n      // if exp(-qexpo/2) < 9e-14,\n      // then doesn't contribute to integral\n\n      var qexpo = ac * ac;\n      if (qexpo > C3)\n        break;\n\n      var pplus = 2 * jStat.normal.cdf(ac, 0, 1, 1, 0);\n      var pminus= 2 * jStat.normal.cdf(ac, w, 1, 1, 0);\n\n      // if rinsum ^ (cc-1) < 9e-14,\n      // then doesn't contribute to integral\n\n      var rinsum = (pplus * 0.5) - (pminus * 0.5);\n      if (rinsum >= Math.exp(C1 / cc1)) {\n        rinsum = (aleg[j-1] * Math.exp(-(0.5 * qexpo))) * Math.pow(rinsum, cc1);\n        elsum += rinsum;\n      }\n    }\n    elsum *= (((2.0 * b) * cc) / Math.sqrt(2 * Math.PI));\n    einsum += elsum;\n    blb = bub;\n    bub += binc;\n  }\n\n  // if pr_w ^ rr < 9e-14, then return 0\n  pr_w += einsum;\n  if (pr_w <= Math.exp(C1 / rr))\n    return 0;\n\n  pr_w = Math.pow(pr_w, rr);\n  if (pr_w >= 1) // 1 was iMax was eps\n    return 1;\n  return pr_w;\n}\n\nfunction tukeyQinv(p, c, v) {\n  var p0 = 0.322232421088;\n  var q0 = 0.993484626060e-01;\n  var p1 = -1.0;\n  var q1 = 0.588581570495;\n  var p2 = -0.342242088547;\n  var q2 = 0.531103462366;\n  var p3 = -0.204231210125;\n  var q3 = 0.103537752850;\n  var p4 = -0.453642210148e-04;\n  var q4 = 0.38560700634e-02;\n  var c1 = 0.8832;\n  var c2 = 0.2368;\n  var c3 = 1.214;\n  var c4 = 1.208;\n  var c5 = 1.4142;\n  var vmax = 120.0;\n\n  var ps = 0.5 - 0.5 * p;\n  var yi = Math.sqrt(Math.log(1.0 / (ps * ps)));\n  var t = yi + (((( yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0)\n     / (((( yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);\n  if (v < vmax) t += (t * t * t + t) / v / 4.0;\n  var q = c1 - c2 * t;\n  if (v < vmax) q += -c3 / v + c4 * t / v;\n  return t * (q * Math.log(c - 1.0) + c5);\n}\n\njStat.extend(jStat.tukey, {\n  cdf: function cdf(q, nmeans, df) {\n    // Identical implementation as the R ptukey() function as of commit 68947\n    var rr = 1;\n    var cc = nmeans;\n\n    var nlegq = 16;\n    var ihalfq = 8;\n\n    var eps1 = -30.0;\n    var eps2 = 1.0e-14;\n    var dhaf  = 100.0;\n    var dquar = 800.0;\n    var deigh = 5000.0;\n    var dlarg = 25000.0;\n    var ulen1 = 1.0;\n    var ulen2 = 0.5;\n    var ulen3 = 0.25;\n    var ulen4 = 0.125;\n    var xlegq = [\n      0.989400934991649932596154173450,\n      0.944575023073232576077988415535,\n      0.865631202387831743880467897712,\n      0.755404408355003033895101194847,\n      0.617876244402643748446671764049,\n      0.458016777657227386342419442984,\n      0.281603550779258913230460501460,\n      0.950125098376374401853193354250e-1\n    ];\n    var alegq = [\n      0.271524594117540948517805724560e-1,\n      0.622535239386478928628438369944e-1,\n      0.951585116824927848099251076022e-1,\n      0.124628971255533872052476282192,\n      0.149595988816576732081501730547,\n      0.169156519395002538189312079030,\n      0.182603415044923588866763667969,\n      0.189450610455068496285396723208\n    ];\n\n    if (q <= 0)\n      return 0;\n\n    // df must be > 1\n    // there must be at least two values\n\n    if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n    if (!Number.isFinite(q))\n      return 1;\n\n    if (df > dlarg)\n      return tukeyWprob(q, rr, cc);\n\n    // calculate leading constant\n\n    var f2 = df * 0.5;\n    var f2lf = ((f2 * Math.log(df)) - (df * Math.log(2))) - jStat.gammaln(f2);\n    var f21 = f2 - 1.0;\n\n    // integral is divided into unit, half-unit, quarter-unit, or\n    // eighth-unit length intervals depending on the value of the\n    // degrees of freedom.\n\n    var ff4 = df * 0.25;\n    var ulen;\n    if      (df <= dhaf)  ulen = ulen1;\n    else if (df <= dquar) ulen = ulen2;\n    else if (df <= deigh) ulen = ulen3;\n    else                  ulen = ulen4;\n\n    f2lf += Math.log(ulen);\n\n    // integrate over each subinterval\n\n    var ans = 0.0;\n\n    for (var i = 1; i <= 50; i++) {\n      var otsum = 0.0;\n\n      // legendre quadrature with order = nlegq\n      // nodes (stored in xlegq) are symmetric around zero.\n\n      var twa1 = (2 * i - 1) * ulen;\n\n      for (var jj = 1; jj <= nlegq; jj++) {\n        var j, t1;\n        if (ihalfq < jj) {\n          j = jj - ihalfq - 1;\n          t1 = (f2lf + (f21 * Math.log(twa1 + (xlegq[j] * ulen))))\n              - (((xlegq[j] * ulen) + twa1) * ff4);\n        } else {\n          j = jj - 1;\n          t1 = (f2lf + (f21 * Math.log(twa1 - (xlegq[j] * ulen))))\n              + (((xlegq[j] * ulen) - twa1) * ff4);\n        }\n\n        // if exp(t1) < 9e-14, then doesn't contribute to integral\n        var qsqz;\n        if (t1 >= eps1) {\n          if (ihalfq < jj) {\n            qsqz = q * Math.sqrt(((xlegq[j] * ulen) + twa1) * 0.5);\n          } else {\n            qsqz = q * Math.sqrt(((-(xlegq[j] * ulen)) + twa1) * 0.5);\n          }\n\n          // call wprob to find integral of range portion\n\n          var wprb = tukeyWprob(qsqz, rr, cc);\n          var rotsum = (wprb * alegq[j]) * Math.exp(t1);\n          otsum += rotsum;\n        }\n        // end legendre integral for interval i\n        // L200:\n      }\n\n      // if integral for interval i < 1e-14, then stop.\n      // However, in order to avoid small area under left tail,\n      // at least  1 / ulen  intervals are calculated.\n      if (i * ulen >= 1.0 && otsum <= eps2)\n        break;\n\n      // end of interval i\n      // L330:\n\n      ans += otsum;\n    }\n\n    if (otsum > eps2) { // not converged\n      throw new Error('tukey.cdf failed to converge');\n    }\n    if (ans > 1)\n      ans = 1;\n    return ans;\n  },\n\n  inv: function(p, nmeans, df) {\n    // Identical implementation as the R qtukey() function as of commit 68947\n    var rr = 1;\n    var cc = nmeans;\n\n    var eps = 0.0001;\n    var maxiter = 50;\n\n    // df must be > 1 ; there must be at least two values\n    if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n    if (p < 0 || p > 1) return NaN;\n    if (p === 0) return 0;\n    if (p === 1) return Infinity;\n\n    // Initial value\n\n    var x0 = tukeyQinv(p, cc, df);\n\n    // Find prob(value < x0)\n\n    var valx0 = jStat.tukey.cdf(x0, nmeans, df) - p;\n\n    // Find the second iterate and prob(value < x1).\n    // If the first iterate has probability value\n    // exceeding p then second iterate is 1 less than\n    // first iterate; otherwise it is 1 greater.\n\n    var x1;\n    if (valx0 > 0.0)\n      x1 = Math.max(0.0, x0 - 1.0);\n    else\n      x1 = x0 + 1.0;\n    var valx1 = jStat.tukey.cdf(x1, nmeans, df) - p;\n\n    // Find new iterate\n\n    var ans;\n    for(var iter = 1; iter < maxiter; iter++) {\n      ans = x1 - ((valx1 * (x1 - x0)) / (valx1 - valx0));\n      valx0 = valx1;\n\n      // New iterate must be >= 0\n\n      x0 = x1;\n      if (ans < 0.0) {\n        ans = 0.0;\n        valx1 = -p;\n      }\n      // Find prob(value < new iterate)\n\n      valx1 = jStat.tukey.cdf(ans, nmeans, df) - p;\n      x1 = ans;\n\n      // If the difference between two successive\n      // iterates is less than eps, stop\n\n      var xabs = Math.abs(x1 - x0);\n      if (xabs < eps)\n        return ans;\n    }\n\n    throw new Error('tukey.inv failed to converge');\n  }\n});\n\n}(jStat, Math));\n/* Provides functions for the solution of linear system of equations, integration, extrapolation,\n * interpolation, eigenvalue problems, differential equations and PCA analysis. */\n\n(function(jStat, Math) {\n\nvar push = Array.prototype.push;\nvar isArray = jStat.utils.isArray;\n\nfunction isUsable(arg) {\n  return isArray(arg) || arg instanceof jStat;\n}\n\njStat.extend({\n\n  // add a vector/matrix to a vector/matrix or scalar\n  add: function add(arr, arg) {\n    // check if arg is a vector or scalar\n    if (isUsable(arg)) {\n      if (!isUsable(arg[0])) arg = [ arg ];\n      return jStat.map(arr, function(value, row, col) {\n        return value + arg[row][col];\n      });\n    }\n    return jStat.map(arr, function(value) { return value + arg; });\n  },\n\n  // subtract a vector or scalar from the vector\n  subtract: function subtract(arr, arg) {\n    // check if arg is a vector or scalar\n    if (isUsable(arg)) {\n      if (!isUsable(arg[0])) arg = [ arg ];\n      return jStat.map(arr, function(value, row, col) {\n        return value - arg[row][col] || 0;\n      });\n    }\n    return jStat.map(arr, function(value) { return value - arg; });\n  },\n\n  // matrix division\n  divide: function divide(arr, arg) {\n    if (isUsable(arg)) {\n      if (!isUsable(arg[0])) arg = [ arg ];\n      return jStat.multiply(arr, jStat.inv(arg));\n    }\n    return jStat.map(arr, function(value) { return value / arg; });\n  },\n\n  // matrix multiplication\n  multiply: function multiply(arr, arg) {\n    var row, col, nrescols, sum, nrow, ncol, res, rescols;\n    // eg: arr = 2 arg = 3 -> 6 for res[0][0] statement closure\n    if (arr.length === undefined && arg.length === undefined) {\n      return arr * arg;\n    }\n    nrow = arr.length,\n    ncol = arr[0].length,\n    res = jStat.zeros(nrow, nrescols = (isUsable(arg)) ? arg[0].length : ncol),\n    rescols = 0;\n    if (isUsable(arg)) {\n      for (; rescols < nrescols; rescols++) {\n        for (row = 0; row < nrow; row++) {\n          sum = 0;\n          for (col = 0; col < ncol; col++)\n          sum += arr[row][col] * arg[col][rescols];\n          res[row][rescols] = sum;\n        }\n      }\n      return (nrow === 1 && rescols === 1) ? res[0][0] : res;\n    }\n    return jStat.map(arr, function(value) { return value * arg; });\n  },\n\n  // outer([1,2,3],[4,5,6])\n  // ===\n  // [[1],[2],[3]] times [[4,5,6]]\n  // ->\n  // [[4,5,6],[8,10,12],[12,15,18]]\n  outer:function outer(A, B) {\n    return jStat.multiply(A.map(function(t){ return [t] }), [B]);\n  },\n\n\n  // Returns the dot product of two matricies\n  dot: function dot(arr, arg) {\n    if (!isUsable(arr[0])) arr = [ arr ];\n    if (!isUsable(arg[0])) arg = [ arg ];\n    // convert column to row vector\n    var left = (arr[0].length === 1 && arr.length !== 1) ? jStat.transpose(arr) : arr,\n    right = (arg[0].length === 1 && arg.length !== 1) ? jStat.transpose(arg) : arg,\n    res = [],\n    row = 0,\n    nrow = left.length,\n    ncol = left[0].length,\n    sum, col;\n    for (; row < nrow; row++) {\n      res[row] = [];\n      sum = 0;\n      for (col = 0; col < ncol; col++)\n      sum += left[row][col] * right[row][col];\n      res[row] = sum;\n    }\n    return (res.length === 1) ? res[0] : res;\n  },\n\n  // raise every element by a scalar\n  pow: function pow(arr, arg) {\n    return jStat.map(arr, function(value) { return Math.pow(value, arg); });\n  },\n\n  // exponentiate every element\n  exp: function exp(arr) {\n    return jStat.map(arr, function(value) { return Math.exp(value); });\n  },\n\n  // generate the natural log of every element\n  log: function exp(arr) {\n    return jStat.map(arr, function(value) { return Math.log(value); });\n  },\n\n  // generate the absolute values of the vector\n  abs: function abs(arr) {\n    return jStat.map(arr, function(value) { return Math.abs(value); });\n  },\n\n  // computes the p-norm of the vector\n  // In the case that a matrix is passed, uses the first row as the vector\n  norm: function norm(arr, p) {\n    var nnorm = 0,\n    i = 0;\n    // check the p-value of the norm, and set for most common case\n    if (isNaN(p)) p = 2;\n    // check if multi-dimensional array, and make vector correction\n    if (isUsable(arr[0])) arr = arr[0];\n    // vector norm\n    for (; i < arr.length; i++) {\n      nnorm += Math.pow(Math.abs(arr[i]), p);\n    }\n    return Math.pow(nnorm, 1 / p);\n  },\n\n  // computes the angle between two vectors in rads\n  // In case a matrix is passed, this uses the first row as the vector\n  angle: function angle(arr, arg) {\n    return Math.acos(jStat.dot(arr, arg) / (jStat.norm(arr) * jStat.norm(arg)));\n  },\n\n  // augment one matrix by another\n  // Note: this function returns a matrix, not a jStat object\n  aug: function aug(a, b) {\n    var newarr = [];\n    for (var i = 0; i < a.length; i++) {\n      newarr.push(a[i].slice());\n    }\n    for (var i = 0; i < newarr.length; i++) {\n      push.apply(newarr[i], b[i]);\n    }\n    return newarr;\n  },\n\n  // The inv() function calculates the inverse of a matrix\n  // Create the inverse by augmenting the matrix by the identity matrix of the\n  // appropriate size, and then use G-J elimination on the augmented matrix.\n  inv: function inv(a) {\n    var rows = a.length;\n    var cols = a[0].length;\n    var b = jStat.identity(rows, cols);\n    var c = jStat.gauss_jordan(a, b);\n    var result = [];\n    var i = 0;\n    var j;\n\n    //We need to copy the inverse portion to a new matrix to rid G-J artifacts\n    for (; i < rows; i++) {\n      result[i] = [];\n      for (j = cols; j < c[0].length; j++)\n        result[i][j - cols] = c[i][j];\n    }\n    return result;\n  },\n\n  // calculate the determinant of a matrix\n  det: function det(a) {\n    var alen = a.length,\n    alend = alen * 2,\n    vals = new Array(alend),\n    rowshift = alen - 1,\n    colshift = alend - 1,\n    mrow = rowshift - alen + 1,\n    mcol = colshift,\n    i = 0,\n    result = 0,\n    j;\n    // check for special 2x2 case\n    if (alen === 2) {\n      return a[0][0] * a[1][1] - a[0][1] * a[1][0];\n    }\n    for (; i < alend; i++) {\n      vals[i] = 1;\n    }\n    for (var i = 0; i < alen; i++) {\n      for (j = 0; j < alen; j++) {\n        vals[(mrow < 0) ? mrow + alen : mrow ] *= a[i][j];\n        vals[(mcol < alen) ? mcol + alen : mcol ] *= a[i][j];\n        mrow++;\n        mcol--;\n      }\n      mrow = --rowshift - alen + 1;\n      mcol = --colshift;\n    }\n    for (var i = 0; i < alen; i++) {\n      result += vals[i];\n    }\n    for (; i < alend; i++) {\n      result -= vals[i];\n    }\n    return result;\n  },\n\n  gauss_elimination: function gauss_elimination(a, b) {\n    var i = 0,\n    j = 0,\n    n = a.length,\n    m = a[0].length,\n    factor = 1,\n    sum = 0,\n    x = [],\n    maug, pivot, temp, k;\n    a = jStat.aug(a, b);\n    maug = a[0].length;\n    for(var i = 0; i < n; i++) {\n      pivot = a[i][i];\n      j = i;\n      for (k = i + 1; k < m; k++) {\n        if (pivot < Math.abs(a[k][i])) {\n          pivot = a[k][i];\n          j = k;\n        }\n      }\n      if (j != i) {\n        for(k = 0; k < maug; k++) {\n          temp = a[i][k];\n          a[i][k] = a[j][k];\n          a[j][k] = temp;\n        }\n      }\n      for (j = i + 1; j < n; j++) {\n        factor = a[j][i] / a[i][i];\n        for(k = i; k < maug; k++) {\n          a[j][k] = a[j][k] - factor * a[i][k];\n        }\n      }\n    }\n    for (var i = n - 1; i >= 0; i--) {\n      sum = 0;\n      for (j = i + 1; j<= n - 1; j++) {\n        sum = sum + x[j] * a[i][j];\n      }\n      x[i] =(a[i][maug - 1] - sum) / a[i][i];\n    }\n    return x;\n  },\n\n  gauss_jordan: function gauss_jordan(a, b) {\n    var m = jStat.aug(a, b),\n    h = m.length,\n    w = m[0].length;\n    var c = 0;\n    // find max pivot\n    for (var y = 0; y < h; y++) {\n      var maxrow = y;\n      for (var y2 = y+1; y2 < h; y2++) {\n        if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y]))\n          maxrow = y2;\n      }\n      var tmp = m[y];\n      m[y] = m[maxrow];\n      m[maxrow] = tmp\n      for (var y2 = y+1; y2 < h; y2++) {\n        c = m[y2][y] / m[y][y];\n        for (var x = y; x < w; x++) {\n          m[y2][x] -= m[y][x] * c;\n        }\n      }\n    }\n    // backsubstitute\n    for (var y = h-1; y >= 0; y--) {\n      c = m[y][y];\n      for (var y2 = 0; y2 < y; y2++) {\n        for (var x = w-1; x > y-1; x--) {\n          m[y2][x] -= m[y][x] * m[y2][y] / c;\n        }\n      }\n      m[y][y] /= c;\n      for (var x = h; x < w; x++) {\n        m[y][x] /= c;\n      }\n    }\n    return m;\n  },\n\n  // solve equation\n  // Ax=b\n  // A is upper triangular matrix\n  // A=[[1,2,3],[0,4,5],[0,6,7]]\n  // b=[1,2,3]\n  // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]\n  // if you use matrix style\n  // A=[[1,2,3],[0,4,5],[0,6,7]]\n  // b=[[1],[2],[3]]\n  // will return [[2.666],[0.1666],[1.666]]\n  triaUpSolve: function triaUpSolve(A, b) {\n    var size = A[0].length;\n    var x = jStat.zeros(1, size)[0];\n    var parts;\n    var matrix_mode = false;\n\n    if (b[0].length != undefined) {\n      b = b.map(function(i){ return i[0] });\n      matrix_mode = true;\n    }\n\n    jStat.arange(size - 1, -1, -1).forEach(function(i) {\n      parts = jStat.arange(i + 1, size).map(function(j) {\n        return x[j] * A[i][j];\n      });\n      x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n    });\n\n    if (matrix_mode)\n      return x.map(function(i){ return [i] });\n    return x;\n  },\n\n  triaLowSolve: function triaLowSolve(A, b) {\n    // like to triaUpSolve but A is lower triangular matrix\n    var size = A[0].length;\n    var x = jStat.zeros(1, size)[0];\n    var parts;\n\n    var matrix_mode=false;\n    if (b[0].length != undefined) {\n      b = b.map(function(i){ return i[0] });\n      matrix_mode = true;\n    }\n\n    jStat.arange(size).forEach(function(i) {\n      parts = jStat.arange(i).map(function(j) {\n        return A[i][j] * x[j];\n      });\n      x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n    })\n\n    if (matrix_mode)\n      return x.map(function(i){ return [i] });\n    return x;\n  },\n\n\n  // A -> [L,U]\n  // A=LU\n  // L is lower triangular matrix\n  // U is upper triangular matrix\n  lu: function lu(A) {\n    var size = A.length;\n    //var L=jStat.diagonal(jStat.ones(1,size)[0]);\n    var L = jStat.identity(size);\n    var R = jStat.zeros(A.length, A[0].length);\n    var parts;\n    jStat.arange(size).forEach(function(t) {\n      R[0][t] = A[0][t];\n    });\n    jStat.arange(1, size).forEach(function(l) {\n      jStat.arange(l).forEach(function(i) {\n        parts = jStat.arange(i).map(function(jj) {\n          return L[l][jj] * R[jj][i];\n        });\n        L[l][i] = (A[l][i] - jStat.sum(parts)) / R[i][i];\n      });\n      jStat.arange(l, size).forEach(function(j) {\n        parts = jStat.arange(l).map(function(jj) {\n          return L[l][jj] * R[jj][j];\n        });\n        R[l][j] = A[i][j] - jStat.sum(parts);\n      });\n    });\n    return [L, R];\n  },\n\n  // A -> T\n  // A=TT'\n  // T is lower triangular matrix\n  cholesky: function cholesky(A) {\n    var size = A.length;\n    var T = jStat.zeros(A.length, A[0].length);\n    var parts;\n    jStat.arange(size).forEach(function(i) {\n      parts = jStat.arange(i).map(function(t) {\n        return Math.pow(T[i][t],2);\n      });\n      T[i][i] = Math.sqrt(A[i][i] - jStat.sum(parts));\n      jStat.arange(i + 1, size).forEach(function(j) {\n        parts = jStat.arange(i).map(function(t) {\n          return T[i][t] * T[j][t];\n        });\n        T[j][i] = (A[i][j] - jStat.sum(parts)) / T[i][i];\n      });\n    });\n    return T;\n  },\n\n\n  gauss_jacobi: function gauss_jacobi(a, b, x, r) {\n    var i = 0;\n    var j = 0;\n    var n = a.length;\n    var l = [];\n    var u = [];\n    var d = [];\n    var xv, c, h, xk;\n    for (; i < n; i++) {\n      l[i] = [];\n      u[i] = [];\n      d[i] = [];\n      for (j = 0; j < n; j++) {\n        if (i > j) {\n          l[i][j] = a[i][j];\n          u[i][j] = d[i][j] = 0;\n        } else if (i < j) {\n          u[i][j] = a[i][j];\n          l[i][j] = d[i][j] = 0;\n        } else {\n          d[i][j] = a[i][j];\n          l[i][j] = u[i][j] = 0;\n        }\n      }\n    }\n    h = jStat.multiply(jStat.multiply(jStat.inv(d), jStat.add(l, u)), -1);\n    c = jStat.multiply(jStat.inv(d), b);\n    xv = x;\n    xk = jStat.add(jStat.multiply(h, x), c);\n    i = 2;\n    while (Math.abs(jStat.norm(jStat.subtract(xk,xv))) > r) {\n      xv = xk;\n      xk = jStat.add(jStat.multiply(h, xv), c);\n      i++;\n    }\n    return xk;\n  },\n\n  gauss_seidel: function gauss_seidel(a, b, x, r) {\n    var i = 0;\n    var n = a.length;\n    var l = [];\n    var u = [];\n    var d = [];\n    var j, xv, c, h, xk;\n    for (; i < n; i++) {\n      l[i] = [];\n      u[i] = [];\n      d[i] = [];\n      for (j = 0; j < n; j++) {\n        if (i > j) {\n          l[i][j] = a[i][j];\n          u[i][j] = d[i][j] = 0;\n        } else if (i < j) {\n          u[i][j] = a[i][j];\n          l[i][j] = d[i][j] = 0;\n        } else {\n          d[i][j] = a[i][j];\n          l[i][j] = u[i][j] = 0;\n        }\n      }\n    }\n    h = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d, l)), u), -1);\n    c = jStat.multiply(jStat.inv(jStat.add(d, l)), b);\n    xv = x;\n    xk = jStat.add(jStat.multiply(h, x), c);\n    i = 2;\n    while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n      xv = xk;\n      xk = jStat.add(jStat.multiply(h, xv), c);\n      i = i + 1;\n    }\n    return xk;\n  },\n\n  SOR: function SOR(a, b, x, r, w) {\n    var i = 0;\n    var n = a.length;\n    var l = [];\n    var u = [];\n    var d = [];\n    var j, xv, c, h, xk;\n    for (; i < n; i++) {\n      l[i] = [];\n      u[i] = [];\n      d[i] = [];\n      for (j = 0; j < n; j++) {\n        if (i > j) {\n          l[i][j] = a[i][j];\n          u[i][j] = d[i][j] = 0;\n        } else if (i < j) {\n          u[i][j] = a[i][j];\n          l[i][j] = d[i][j] = 0;\n        } else {\n          d[i][j] = a[i][j];\n          l[i][j] = u[i][j] = 0;\n        }\n      }\n    }\n    h = jStat.multiply(jStat.inv(jStat.add(d, jStat.multiply(l, w))),\n                       jStat.subtract(jStat.multiply(d, 1 - w),\n                                      jStat.multiply(u, w)));\n    c = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d,\n        jStat.multiply(l, w))), b), w);\n    xv = x;\n    xk = jStat.add(jStat.multiply(h, x), c);\n    i = 2;\n    while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n      xv = xk;\n      xk = jStat.add(jStat.multiply(h, xv), c);\n      i++;\n    }\n    return xk;\n  },\n\n  householder: function householder(a) {\n    var m = a.length;\n    var n = a[0].length;\n    var i = 0;\n    var w = [];\n    var p = [];\n    var alpha, r, k, j, factor;\n    for (; i < m - 1; i++) {\n      alpha = 0;\n      for (j = i + 1; j < n; j++)\n      alpha += (a[j][i] * a[j][i]);\n      factor = (a[i + 1][i] > 0) ? -1 : 1;\n      alpha = factor * Math.sqrt(alpha);\n      r = Math.sqrt((((alpha * alpha) - a[i + 1][i] * alpha) / 2));\n      w = jStat.zeros(m, 1);\n      w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);\n      for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);\n      p = jStat.subtract(jStat.identity(m, n),\n          jStat.multiply(jStat.multiply(w, jStat.transpose(w)), 2));\n      a = jStat.multiply(p, jStat.multiply(a, p));\n    }\n    return a;\n  },\n\n  // A -> [Q,R]\n  // Q is orthogonal matrix\n  // R is upper triangular\n  QR: (function() {\n    // x -> Q\n    // find a orthogonal matrix Q st.\n    // Qx=y\n    // y is [||x||,0,0,...]\n\n    // quick ref\n    var sum   = jStat.sum;\n    var range = jStat.arange;\n\n    function get_Q1(x) {\n      var size = x.length;\n      var norm_x = jStat.norm(x, 2);\n      var e1 = jStat.zeros(1, size)[0];\n      e1[0] = 1;\n      var u = jStat.add(jStat.multiply(jStat.multiply(e1, norm_x), -1), x);\n      var norm_u = jStat.norm(u, 2);\n      var v = jStat.divide(u, norm_u);\n      var Q = jStat.subtract(jStat.identity(size),\n                             jStat.multiply(jStat.outer(v, v), 2));\n      return Q;\n    }\n\n    function qr(A) {\n      var size = A[0].length;\n      var QList = [];\n      jStat.arange(size).forEach(function(i) {\n        var x = jStat.slice(A, { row: { start: i }, col: i });\n        var Q = get_Q1(x);\n        var Qn = jStat.identity(A.length);\n        Qn = jStat.sliceAssign(Qn, { row: { start: i }, col: { start: i }}, Q);\n        A = jStat.multiply(Qn, A);\n        QList.push(Qn);\n      });\n      var Q = QList.reduce(function(x, y){ return jStat.multiply(x,y) });\n      var R = A;\n      return [Q, R];\n    }\n\n    function qr2(x) {\n      // quick impletation\n      // https://www.stat.wisc.edu/~larget/math496/qr.html\n\n      var n = x.length;\n      var p = x[0].length;\n\n      x = jStat.copy(x);\n      r = jStat.zeros(p, p);\n\n      var i,j,k;\n      for(j = 0; j < p; j++){\n        r[j][j] = Math.sqrt(sum(range(n).map(function(i){\n          return x[i][j] * x[i][j];\n        })));\n        for(i = 0; i < n; i++){\n          x[i][j] = x[i][j] / r[j][j];\n        }\n        for(k = j+1; k < p; k++){\n          r[j][k] = sum(range(n).map(function(i){\n            return x[i][j] * x[i][k];\n          }));\n          for(i = 0; i < n; i++){\n            x[i][k] = x[i][k] - x[i][j]*r[j][k];\n          }\n        }\n      }\n      return [x, r];\n    }\n\n    return qr2;\n  }()),\n\n  lstsq: (function(A, b) {\n    // solve least squard problem for Ax=b as QR decomposition way if b is\n    // [[b1],[b2],[b3]] form will return [[x1],[x2],[x3]] array form solution\n    // else b is [b1,b2,b3] form will return [x1,x2,x3] array form solution\n    function R_I(A) {\n      A = jStat.copy(A);\n      var size = A.length;\n      var I = jStat.identity(size);\n      jStat.arange(size - 1, -1, -1).forEach(function(i) {\n        jStat.sliceAssign(\n            I, { row: i }, jStat.divide(jStat.slice(I, { row: i }), A[i][i]));\n        jStat.sliceAssign(\n            A, { row: i }, jStat.divide(jStat.slice(A, { row: i }), A[i][i]));\n        jStat.arange(i).forEach(function(j) {\n          var c = jStat.multiply(A[j][i], -1);\n          var Aj = jStat.slice(A, { row: j });\n          var cAi = jStat.multiply(jStat.slice(A, { row: i }), c);\n          jStat.sliceAssign(A, { row: j }, jStat.add(Aj, cAi));\n          var Ij = jStat.slice(I, { row: j });\n          var cIi = jStat.multiply(jStat.slice(I, { row: i }), c);\n          jStat.sliceAssign(I, { row: j }, jStat.add(Ij, cIi));\n        })\n      });\n      return I;\n    }\n\n    function qr_solve(A, b){\n      var array_mode = false;\n      if (b[0].length === undefined) {\n        // [c1,c2,c3] mode\n        b = b.map(function(x){ return [x] });\n        array_mode = true;\n      }\n      var QR = jStat.QR(A);\n      var Q = QR[0];\n      var R = QR[1];\n      var attrs = A[0].length;\n      var Q1 = jStat.slice(Q,{col:{end:attrs}});\n      var R1 = jStat.slice(R,{row:{end:attrs}});\n      var RI = R_I(R1);\n\t  var Q2 = jStat.transpose(Q1);\n\n\t  if(Q2[0].length === undefined){\n\t\t  Q2 = [Q2]; // The confusing jStat.multifly implementation threat nature process again.\n\t  }\n\n      var x = jStat.multiply(jStat.multiply(RI, Q2), b);\n\n\t  if(x.length === undefined){\n\t\t  x = [[x]]; // The confusing jStat.multifly implementation threat nature process again.\n\t  }\n\n\n      if (array_mode)\n        return x.map(function(i){ return i[0] });\n      return x;\n    }\n\n    return qr_solve;\n  }()),\n\n  jacobi: function jacobi(a) {\n    var condition = 1;\n    var count = 0;\n    var n = a.length;\n    var e = jStat.identity(n, n);\n    var ev = [];\n    var b, i, j, p, q, maxim, theta, s;\n    // condition === 1 only if tolerance is not reached\n    while (condition === 1) {\n      count++;\n      maxim = a[0][1];\n      p = 0;\n      q = 1;\n      for (var i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          if (i != j) {\n            if (maxim < Math.abs(a[i][j])) {\n              maxim = Math.abs(a[i][j]);\n              p = i;\n              q = j;\n            }\n          }\n        }\n      }\n      if (a[p][p] === a[q][q])\n        theta = (a[p][q] > 0) ? Math.PI / 4 : -Math.PI / 4;\n      else\n        theta = Math.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;\n      s = jStat.identity(n, n);\n      s[p][p] = Math.cos(theta);\n      s[p][q] = -Math.sin(theta);\n      s[q][p] = Math.sin(theta);\n      s[q][q] = Math.cos(theta);\n      // eigen vector matrix\n      e = jStat.multiply(e, s);\n      b = jStat.multiply(jStat.multiply(jStat.inv(s), a), s);\n      a = b;\n      condition = 0;\n      for (var i = 1; i < n; i++) {\n        for (j = 1; j < n; j++) {\n          if (i != j && Math.abs(a[i][j]) > 0.001) {\n            condition = 1;\n          }\n        }\n      }\n    }\n    for (var i = 0; i < n; i++) ev.push(a[i][i]);\n    //returns both the eigenvalue and eigenmatrix\n    return [e, ev];\n  },\n\n  rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {\n    var k1, k2, u_j1, k3, k4;\n    if (order === 2) {\n      while (t_j <= p) {\n        k1 = h * f(t_j, u_j);\n        k2 = h * f(t_j + h, u_j + k1);\n        u_j1 = u_j + (k1 + k2) / 2;\n        u_j = u_j1;\n        t_j = t_j + h;\n      }\n    }\n    if (order === 4) {\n      while (t_j <= p) {\n        k1 = h * f(t_j, u_j);\n        k2 = h * f(t_j + h / 2, u_j + k1 / 2);\n        k3 = h * f(t_j + h / 2, u_j + k2 / 2);\n        k4 = h * f(t_j +h, u_j + k3);\n        u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;\n        u_j = u_j1;\n        t_j = t_j + h;\n      }\n    }\n    return u_j;\n  },\n\n  romberg: function romberg(f, a, b, order) {\n    var i = 0;\n    var h = (b - a) / 2;\n    var x = [];\n    var h1 = [];\n    var g = [];\n    var m, a1, j, k, I, d;\n    while (i < order / 2) {\n      I = f(a);\n      for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;\n      m = x.length;\n      for (j = 1; j < m - 1; j++) {\n        I += (((j % 2) !== 0) ? 4 : 2) * f(x[j]);\n      }\n      I = (h / 3) * (I + f(b));\n      g[i] = I;\n      h /= 2;\n      i++;\n    }\n    a1 = g.length;\n    m = 1;\n    while (a1 !== 1) {\n      for (j = 0; j < a1 - 1; j++)\n      h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n      a1 = h1.length;\n      g = h1;\n      h1 = [];\n      m++;\n    }\n    return g;\n  },\n\n  richardson: function richardson(X, f, x, h) {\n    function pos(X, x) {\n      var i = 0;\n      var n = X.length;\n      var p;\n      for (; i < n; i++)\n        if (X[i] === x) p = i;\n      return p;\n    }\n    var n = X.length,\n    h_min = Math.abs(x - X[pos(X, x) + 1]),\n    i = 0,\n    g = [],\n    h1 = [],\n    y1, y2, m, a, j;\n    while (h >= h_min) {\n      y1 = pos(X, x + h);\n      y2 = pos(X, x);\n      g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);\n      h /= 2;\n      i++;\n    }\n    a = g.length;\n    m = 1;\n    while (a != 1) {\n      for (j = 0; j < a - 1; j++)\n      h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n      a = h1.length;\n      g = h1;\n      h1 = [];\n      m++;\n    }\n    return g;\n  },\n\n  simpson: function simpson(f, a, b, n) {\n    var h = (b - a) / n;\n    var I = f(a);\n    var x = [];\n    var j = a;\n    var k = 0;\n    var i = 1;\n    var m;\n    for (; j <= b; j = j + h, k++)\n      x[k] = j;\n    m = x.length;\n    for (; i < m - 1; i++) {\n      I += ((i % 2 !== 0) ? 4 : 2) * f(x[i]);\n    }\n    return (h / 3) * (I + f(b));\n  },\n\n  hermite: function hermite(X, F, dF, value) {\n    var n = X.length;\n    var p = 0;\n    var i = 0;\n    var l = [];\n    var dl = [];\n    var A = [];\n    var B = [];\n    var j;\n    for (; i < n; i++) {\n      l[i] = 1;\n      for (j = 0; j < n; j++) {\n        if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);\n      }\n      dl[i] = 0;\n      for (j = 0; j < n; j++) {\n        if (i != j) dl[i] += 1 / (X [i] - X[j]);\n      }\n      A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);\n      B[i] = (value - X[i]) * (l[i] * l[i]);\n      p += (A[i] * F[i] + B[i] * dF[i]);\n    }\n    return p;\n  },\n\n  lagrange: function lagrange(X, F, value) {\n    var p = 0;\n    var i = 0;\n    var j, l;\n    var n = X.length;\n    for (; i < n; i++) {\n      l = F[i];\n      for (j = 0; j < n; j++) {\n        // calculating the lagrange polynomial L_i\n        if (i != j) l *= (value - X[j]) / (X[i] - X[j]);\n      }\n      // adding the lagrange polynomials found above\n      p += l;\n    }\n    return p;\n  },\n\n  cubic_spline: function cubic_spline(X, F, value) {\n    var n = X.length;\n    var i = 0, j;\n    var A = [];\n    var B = [];\n    var alpha = [];\n    var c = [];\n    var h = [];\n    var b = [];\n    var d = [];\n    for (; i < n - 1; i++)\n      h[i] = X[i + 1] - X[i];\n    alpha[0] = 0;\n    for (var i = 1; i < n - 1; i++) {\n      alpha[i] = (3 / h[i]) * (F[i + 1] - F[i]) -\n          (3 / h[i-1]) * (F[i] - F[i-1]);\n    }\n    for (var i = 1; i < n - 1; i++) {\n      A[i] = [];\n      B[i] = [];\n      A[i][i-1] = h[i-1];\n      A[i][i] = 2 * (h[i - 1] + h[i]);\n      A[i][i+1] = h[i];\n      B[i][0] = alpha[i];\n    }\n    c = jStat.multiply(jStat.inv(A), B);\n    for (j = 0; j < n - 1; j++) {\n      b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;\n      d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);\n    }\n    for (j = 0; j < n; j++) {\n      if (X[j] > value) break;\n    }\n    j -= 1;\n    return F[j] + (value - X[j]) * b[j] + jStat.sq(value-X[j]) *\n        c[j] + (value - X[j]) * jStat.sq(value - X[j]) * d[j];\n  },\n\n  gauss_quadrature: function gauss_quadrature() {\n    throw new Error('gauss_quadrature not yet implemented');\n  },\n\n  PCA: function PCA(X) {\n    var m = X.length;\n    var n = X[0].length;\n    var flag = false;\n    var i = 0;\n    var j, temp1;\n    var u = [];\n    var D = [];\n    var result = [];\n    var temp2 = [];\n    var Y = [];\n    var Bt = [];\n    var B = [];\n    var C = [];\n    var V = [];\n    var Vt = [];\n    for (var i = 0; i < m; i++) {\n      u[i] = jStat.sum(X[i]) / n;\n    }\n    for (var i = 0; i < n; i++) {\n      B[i] = [];\n      for(j = 0; j < m; j++) {\n        B[i][j] = X[j][i] - u[j];\n      }\n    }\n    B = jStat.transpose(B);\n    for (var i = 0; i < m; i++) {\n      C[i] = [];\n      for (j = 0; j < m; j++) {\n        C[i][j] = (jStat.dot([B[i]], [B[j]])) / (n - 1);\n      }\n    }\n    result = jStat.jacobi(C);\n    V = result[0];\n    D = result[1];\n    Vt = jStat.transpose(V);\n    for (var i = 0; i < D.length; i++) {\n      for (j = i; j < D.length; j++) {\n        if(D[i] < D[j])  {\n          temp1 = D[i];\n          D[i] = D[j];\n          D[j] = temp1;\n          temp2 = Vt[i];\n          Vt[i] = Vt[j];\n          Vt[j] = temp2;\n        }\n      }\n    }\n    Bt = jStat.transpose(B);\n    for (var i = 0; i < m; i++) {\n      Y[i] = [];\n      for (j = 0; j < Bt.length; j++) {\n        Y[i][j] = jStat.dot([Vt[i]], [Bt[j]]);\n      }\n    }\n    return [X, D, Vt, Y];\n  }\n});\n\n// extend jStat.fn with methods that require one argument\n(function(funcs) {\n  for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n    jStat.fn[passfunc] = function(arg, func) {\n      var tmpthis = this;\n      // check for callback\n      if (func) {\n        setTimeout(function() {\n          func.call(tmpthis, jStat.fn[passfunc].call(tmpthis, arg));\n        }, 15);\n        return this;\n      }\n      if (typeof jStat[passfunc](this, arg) === 'number')\n        return jStat[passfunc](this, arg);\n      else\n        return jStat(jStat[passfunc](this, arg));\n    };\n  }(funcs[i]));\n}('add divide multiply subtract dot pow exp log abs norm angle'.split(' ')));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\nvar slice = [].slice;\nvar isNumber = jStat.utils.isNumber;\nvar isArray = jStat.utils.isArray;\n\n// flag==true denotes use of sample standard deviation\n// Z Statistics\njStat.extend({\n  // 2 different parameter lists:\n  // (value, mean, sd)\n  // (value, array, flag)\n  zscore: function zscore() {\n    var args = slice.call(arguments);\n    if (isNumber(args[1])) {\n      return (args[0] - args[1]) / args[2];\n    }\n    return (args[0] - jStat.mean(args[1])) / jStat.stdev(args[1], args[2]);\n  },\n\n  // 3 different paramter lists:\n  // (value, mean, sd, sides)\n  // (zscore, sides)\n  // (value, array, sides, flag)\n  ztest: function ztest() {\n    var args = slice.call(arguments);\n    var z;\n    if (isArray(args[1])) {\n      // (value, array, sides, flag)\n      z = jStat.zscore(args[0],args[1],args[3]);\n      return (args[2] === 1) ?\n        (jStat.normal.cdf(-Math.abs(z), 0, 1)) :\n        (jStat.normal.cdf(-Math.abs(z), 0, 1)*2);\n    } else {\n      if (args.length > 2) {\n        // (value, mean, sd, sides)\n        z = jStat.zscore(args[0],args[1],args[2]);\n        return (args[3] === 1) ?\n          (jStat.normal.cdf(-Math.abs(z),0,1)) :\n          (jStat.normal.cdf(-Math.abs(z),0,1)* 2);\n      } else {\n        // (zscore, sides)\n        z = args[0];\n        return (args[1] === 1) ?\n          (jStat.normal.cdf(-Math.abs(z),0,1)) :\n          (jStat.normal.cdf(-Math.abs(z),0,1)*2);\n      }\n    }\n  }\n});\n\njStat.extend(jStat.fn, {\n  zscore: function zscore(value, flag) {\n    return (value - this.mean()) / this.stdev(flag);\n  },\n\n  ztest: function ztest(value, sides, flag) {\n    var zscore = Math.abs(this.zscore(value, flag));\n    return (sides === 1) ?\n      (jStat.normal.cdf(-zscore, 0, 1)) :\n      (jStat.normal.cdf(-zscore, 0, 1) * 2);\n  }\n});\n\n// T Statistics\njStat.extend({\n  // 2 parameter lists\n  // (value, mean, sd, n)\n  // (value, array)\n  tscore: function tscore() {\n    var args = slice.call(arguments);\n    return (args.length === 4) ?\n      ((args[0] - args[1]) / (args[2] / Math.sqrt(args[3]))) :\n      ((args[0] - jStat.mean(args[1])) /\n       (jStat.stdev(args[1], true) / Math.sqrt(args[1].length)));\n  },\n\n  // 3 different paramter lists:\n  // (value, mean, sd, n, sides)\n  // (tscore, n, sides)\n  // (value, array, sides)\n  ttest: function ttest() {\n    var args = slice.call(arguments);\n    var tscore;\n    if (args.length === 5) {\n      tscore = Math.abs(jStat.tscore(args[0], args[1], args[2], args[3]));\n      return (args[4] === 1) ?\n        (jStat.studentt.cdf(-tscore, args[3]-1)) :\n        (jStat.studentt.cdf(-tscore, args[3]-1)*2);\n    }\n    if (isNumber(args[1])) {\n      tscore = Math.abs(args[0])\n      return (args[2] == 1) ?\n        (jStat.studentt.cdf(-tscore, args[1]-1)) :\n        (jStat.studentt.cdf(-tscore, args[1]-1) * 2);\n    }\n    tscore = Math.abs(jStat.tscore(args[0], args[1]))\n    return (args[2] == 1) ?\n      (jStat.studentt.cdf(-tscore, args[1].length-1)) :\n      (jStat.studentt.cdf(-tscore, args[1].length-1) * 2);\n  }\n});\n\njStat.extend(jStat.fn, {\n  tscore: function tscore(value) {\n    return (value - this.mean()) / (this.stdev(true) / Math.sqrt(this.cols()));\n  },\n\n  ttest: function ttest(value, sides) {\n    return (sides === 1) ?\n      (1 - jStat.studentt.cdf(Math.abs(this.tscore(value)), this.cols()-1)) :\n      (jStat.studentt.cdf(-Math.abs(this.tscore(value)), this.cols()-1)*2);\n  }\n});\n\n// F Statistics\njStat.extend({\n  // Paramter list is as follows:\n  // (array1, array2, array3, ...)\n  // or it is an array of arrays\n  // array of arrays conversion\n  anovafscore: function anovafscore() {\n    var args = slice.call(arguments),\n    expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;\n    if (args.length === 1) {\n      tmpargs = new Array(args[0].length);\n      for (var i = 0; i < args[0].length; i++) {\n        tmpargs[i] = args[0][i];\n      }\n      args = tmpargs;\n    }\n    // 2 sample case\n    if (args.length === 2) {\n      return jStat.variance(args[0]) / jStat.variance(args[1]);\n    }\n    // Builds sample array\n    sample = new Array();\n    for (var i = 0; i < args.length; i++) {\n      sample = sample.concat(args[i]);\n    }\n    sampMean = jStat.mean(sample);\n    // Computes the explained variance\n    expVar = 0;\n    for (var i = 0; i < args.length; i++) {\n      expVar = expVar + args[i].length * Math.pow(jStat.mean(args[i]) - sampMean, 2);\n    }\n    expVar /= (args.length - 1);\n    // Computes unexplained variance\n    unexpVar = 0;\n    for (var i = 0; i < args.length; i++) {\n      sampSampMean = jStat.mean(args[i]);\n      for (j = 0; j < args[i].length; j++) {\n        unexpVar += Math.pow(args[i][j] - sampSampMean, 2);\n      }\n    }\n    unexpVar /= (sample.length - args.length);\n    return expVar / unexpVar;\n  },\n\n  // 2 different paramter setups\n  // (array1, array2, array3, ...)\n  // (anovafscore, df1, df2)\n  anovaftest: function anovaftest() {\n    var args = slice.call(arguments),\n    df1, df2, n, i;\n    if (isNumber(args[0])) {\n      return 1 - jStat.centralF.cdf(args[0], args[1], args[2]);\n    }\n    anovafscore = jStat.anovafscore(args);\n    df1 = args.length - 1;\n    n = 0;\n    for (var i = 0; i < args.length; i++) {\n      n = n + args[i].length;\n    }\n    df2 = n - df1 - 1;\n    return 1 - jStat.centralF.cdf(anovafscore, df1, df2);\n  },\n\n  ftest: function ftest(fscore, df1, df2) {\n    return 1 - jStat.centralF.cdf(fscore, df1, df2);\n  }\n});\n\njStat.extend(jStat.fn, {\n  anovafscore: function anovafscore() {\n    return jStat.anovafscore(this.toArray());\n  },\n\n  anovaftes: function anovaftes() {\n    var n = 0;\n    var i;\n    for (var i = 0; i < this.length; i++) {\n      n = n + this[i].length;\n    }\n    return jStat.ftest(this.anovafscore(), this.length - 1, n - this.length);\n  }\n});\n\n// Tukey's range test\njStat.extend({\n  // 2 parameter lists\n  // (mean1, mean2, n1, n2, sd)\n  // (array1, array2, sd)\n  qscore: function qscore() {\n    var args = slice.call(arguments);\n    var mean1, mean2, n1, n2, sd;\n    if (isNumber(args[0])) {\n        mean1 = args[0];\n        mean2 = args[1];\n        n1 = args[2];\n        n2 = args[3];\n        sd = args[4];\n    } else {\n        mean1 = jStat.mean(args[0]);\n        mean2 = jStat.mean(args[1]);\n        n1 = args[0].length;\n        n2 = args[1].length;\n        sd = args[2];\n    }\n    return Math.abs(mean1 - mean2) / (sd * Math.sqrt((1 / n1 + 1 / n2) / 2));\n  },\n\n  // 3 different parameter lists:\n  // (qscore, n, k)\n  // (mean1, mean2, n1, n2, sd, n, k)\n  // (array1, array2, sd, n, k)\n  qtest: function qtest() {\n    var args = slice.call(arguments);\n\n    var qscore;\n    if (args.length === 3) {\n      qscore = args[0];\n      args = args.slice(1);\n    } else if (args.length === 7) {\n      qscore = jStat.qscore(args[0], args[1], args[2], args[3], args[4]);\n      args = args.slice(5);\n    } else {\n      qscore = jStat.qscore(args[0], args[1], args[2]);\n      args = args.slice(3);\n    }\n\n    var n = args[0];\n    var k = args[1];\n\n    return 1 - jStat.tukey.cdf(qscore, k, n - k);\n  },\n\n  tukeyhsd: function tukeyhsd(arrays) {\n    var sd = jStat.pooledstdev(arrays);\n    var means = arrays.map(function (arr) {return jStat.mean(arr);});\n    var n = arrays.reduce(function (n, arr) {return n + arr.length;}, 0);\n\n    var results = [];\n    for (var i = 0; i < arrays.length; ++i) {\n        for (var j = i + 1; j < arrays.length; ++j) {\n            var p = jStat.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);\n            results.push([[i, j], p]);\n        }\n    }\n\n    return results;\n  }\n});\n\n// Error Bounds\njStat.extend({\n  // 2 different parameter setups\n  // (value, alpha, sd, n)\n  // (value, alpha, array)\n  normalci: function normalci() {\n    var args = slice.call(arguments),\n    ans = new Array(2),\n    change;\n    if (args.length === 4) {\n      change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n                        args[2] / Math.sqrt(args[3]));\n    } else {\n      change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n                        jStat.stdev(args[2]) / Math.sqrt(args[2].length));\n    }\n    ans[0] = args[0] - change;\n    ans[1] = args[0] + change;\n    return ans;\n  },\n\n  // 2 different parameter setups\n  // (value, alpha, sd, n)\n  // (value, alpha, array)\n  tci: function tci() {\n    var args = slice.call(arguments),\n    ans = new Array(2),\n    change;\n    if (args.length === 4) {\n      change = Math.abs(jStat.studentt.inv(args[1] / 2, args[3] - 1) *\n                        args[2] / Math.sqrt(args[3]));\n    } else {\n      change = Math.abs(jStat.studentt.inv(args[1] / 2, args[2].length - 1) *\n                        jStat.stdev(args[2], true) / Math.sqrt(args[2].length));\n    }\n    ans[0] = args[0] - change;\n    ans[1] = args[0] + change;\n    return ans;\n  },\n\n  significant: function significant(pvalue, alpha) {\n    return pvalue < alpha;\n  }\n});\n\njStat.extend(jStat.fn, {\n  normalci: function normalci(value, alpha) {\n    return jStat.normalci(value, alpha, this.toArray());\n  },\n\n  tci: function tci(value, alpha) {\n    return jStat.tci(value, alpha, this.toArray());\n  }\n});\n\n// internal method for calculating the z-score for a difference of proportions test\nfunction differenceOfProportions(p1, n1, p2, n2) {\n  if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {\n    throw new Error(\"Proportions should be greater than 0 and less than 1\")\n  }\n  var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);\n  var se = Math.sqrt(pooled * (1 - pooled) * ((1/n1) + (1/n2)));\n  return (p1 - p2) / se;\n}\n\n// Difference of Proportions\njStat.extend(jStat.fn, {\n  oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {\n    var z = differenceOfProportions(p1, n1, p2, n2);\n    return jStat.ztest(z, 1);\n  },\n\n  twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {\n    var z = differenceOfProportions(p1, n1, p2, n2);\n    return jStat.ztest(z, 2);\n  }\n});\n\n}(jStat, Math));\njStat.models = (function(){\n\n  function sub_regress(endog, exog) {\n    return ols(endog, exog);\n  }\n\n  function sub_regress(exog) {\n    var var_count = exog[0].length;\n    var modelList = jStat.arange(var_count).map(function(endog_index) {\n      var exog_index =\n          jStat.arange(var_count).filter(function(i){return i!==endog_index});\n      return ols(jStat.col(exog, endog_index).map(function(x){ return x[0] }),\n                 jStat.col(exog, exog_index))\n    });\n    return modelList;\n  }\n\n  // do OLS model regress\n  // exog have include const columns ,it will not generate it .In fact, exog is\n  // \"design matrix\" look at\n  //https://en.wikipedia.org/wiki/Design_matrix\n  function ols(endog, exog) {\n    var nobs = endog.length;\n    var df_model = exog[0].length - 1;\n    var df_resid = nobs-df_model - 1;\n    var coef = jStat.lstsq(exog, endog);\n    var predict =\n        jStat.multiply(exog, coef.map(function(x) { return [x] }))\n            .map(function(p) { return p[0] });\n    var resid = jStat.subtract(endog, predict);\n    var ybar = jStat.mean(endog);\n    // constant cause problem\n    // var SST = jStat.sum(endog.map(function(y) {\n    //   return Math.pow(y-ybar,2);\n    // }));\n    var SSE = jStat.sum(predict.map(function(f) {\n      return Math.pow(f - ybar, 2);\n    }));\n    var SSR = jStat.sum(endog.map(function(y, i) {\n      return Math.pow(y - predict[i], 2);\n    }));\n    var SST = SSE + SSR;\n    var R2 = (SSE / SST);\n    return {\n        exog:exog,\n        endog:endog,\n        nobs:nobs,\n        df_model:df_model,\n        df_resid:df_resid,\n        coef:coef,\n        predict:predict,\n        resid:resid,\n        ybar:ybar,\n        SST:SST,\n        SSE:SSE,\n        SSR:SSR,\n        R2:R2\n    };\n  }\n\n  // H0: b_I=0\n  // H1: b_I!=0\n  function t_test(model) {\n    var subModelList = sub_regress(model.exog);\n    //var sigmaHat=jStat.stdev(model.resid);\n    var sigmaHat = Math.sqrt(model.SSR / (model.df_resid));\n    var seBetaHat = subModelList.map(function(mod) {\n      var SST = mod.SST;\n      var R2 = mod.R2;\n      return sigmaHat / Math.sqrt(SST * (1 - R2));\n    });\n    var tStatistic = model.coef.map(function(coef, i) {\n      return (coef - 0) / seBetaHat[i];\n    });\n    var pValue = tStatistic.map(function(t) {\n      var leftppf = jStat.studentt.cdf(t, model.df_resid);\n      return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;\n    });\n    var c = jStat.studentt.inv(0.975, model.df_resid);\n    var interval95 = model.coef.map(function(coef, i) {\n      var d = c * seBetaHat[i];\n      return [coef - d, coef + d];\n    })\n    return {\n        se: seBetaHat,\n        t: tStatistic,\n        p: pValue,\n        sigmaHat: sigmaHat,\n        interval95: interval95\n    };\n  }\n\n  function F_test(model) {\n    var F_statistic =\n        (model.R2 / model.df_model) / ((1 - model.R2) / model.df_resid);\n    var fcdf = function(x, n1, n2) {\n      return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2)\n    }\n    var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);\n    return { F_statistic: F_statistic, pvalue: pvalue };\n  }\n\n  function ols_wrap(endog, exog) {\n    var model = ols(endog,exog);\n    var ttest = t_test(model);\n    var ftest = F_test(model);\n    // Provide the Wherry / Ezekiel / McNemar / Cohen Adjusted R^2\n    // Which matches the 'adjusted R^2' provided by R's lm package\n    var adjust_R2 =\n        1 - (1 - model.R2) * ((model.nobs - 1) / (model.df_resid));\n    model.t = ttest;\n    model.f = ftest;\n    model.adjust_R2 = adjust_R2;\n    return model;\n  }\n\n  return { ols: ols_wrap };\n})();\n  return jStat;\n});\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar utils = __webpack_require__(1);\nvar error = __webpack_require__(0);\n\nexports.UNIQUE = function () {\n  var result = [];\n  for (var i = 0; i < arguments.length; ++i) {\n    var hasElement = false;\n    var element    = arguments[i];\n\n    // Check if we've already seen this element.\n    for (var j = 0; j < result.length; ++j) {\n      hasElement = result[j] === element;\n      if (hasElement) { break; }\n    }\n\n    // If we did not find it, add it to the result.\n    if (!hasElement) {\n      result.push(element);\n    }\n  }\n  return result;\n};\n\nexports.FLATTEN = utils.flatten;\n\nexports.ARGS2ARRAY = function () {\n  return Array.prototype.slice.call(arguments, 0);\n};\n\nexports.REFERENCE = function (context, reference) {\n  if (!arguments.length) {\n    return error.error;\n  }\n  try {\n    var path = reference.split('.');\n    var result = context;\n    for (var i = 0; i < path.length; ++i) {\n      var step = path[i];\n      if (step[step.length - 1] === ']') {\n        var opening = step.indexOf('[');\n        var index = step.substring(opening + 1, step.length - 1);\n        result = result[step.substring(0, opening)][index];\n      } else {\n        result = result[step];\n      }\n    }\n    return result;\n  } catch (error) {}\n};\n\nexports.JOIN = function (array, separator) {\n  return array.join(separator);\n};\n\nexports.NUMBERS = function () {\n  var possibleNumbers = utils.flatten(arguments);\n  return possibleNumbers.filter(function (el) {\n    return typeof el === 'number';\n  });\n};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar jStat = __webpack_require__(10);\nvar text = __webpack_require__(6);\nvar utils = __webpack_require__(1);\nvar bessel = __webpack_require__(26);\n\nfunction isValidBinaryNumber(number) {\n  return (/^[01]{1,10}$/).test(number);\n}\n\nexports.BESSELI = function(x, n) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(x, n)) {\n    return error.value;\n  }\n\n  return bessel.besseli(x, n);\n};\n\nexports.BESSELJ = function(x, n) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(x, n)) {\n    return error.value;\n  }\n\n  return bessel.besselj(x, n);\n};\n\nexports.BESSELK = function(x, n) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(x, n)) {\n    return error.value;\n  }\n\n  return bessel.besselk(x, n);\n};\n\nexports.BESSELY = function(x, n) {\n  x = utils.parseNumber(x);\n  n = utils.parseNumber(n);\n  if (utils.anyIsError(x, n)) {\n    return error.value;\n  }\n\n  return bessel.bessely(x, n);\n};\n\nexports.BIN2DEC = function(number) {\n  // Return error if number is not binary or contains more than 10 characters (10 digits)\n  if (!isValidBinaryNumber(number)) {\n    return error.num;\n  }\n\n  // Convert binary number to decimal\n  var result = parseInt(number, 2);\n\n  // Handle negative numbers\n  var stringified = number.toString();\n  if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n    return parseInt(stringified.substring(1), 2) - 512;\n  } else {\n    return result;\n  }\n};\n\n\nexports.BIN2HEX = function(number, places) {\n  // Return error if number is not binary or contains more than 10 characters (10 digits)\n  if (!isValidBinaryNumber(number)) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character hexadecimal number if number is negative\n  var stringified = number.toString();\n  if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n    return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);\n  }\n\n  // Convert binary number to hexadecimal\n  var result = parseInt(number, 2).toString(16);\n\n  // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n  if (places === undefined) {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.BIN2OCT = function(number, places) {\n  // Return error if number is not binary or contains more than 10 characters (10 digits)\n  if (!isValidBinaryNumber(number)) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character octal number if number is negative\n  var stringified = number.toString();\n  if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n    return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);\n  }\n\n  // Convert binary number to octal\n  var result = parseInt(number, 2).toString(8);\n\n  // Return octal number using the minimum number of characters necessary if places is undefined\n  if (places === undefined) {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.BITAND = function(number1, number2) {\n  // Return error if either number is a non-numeric value\n  number1 = utils.parseNumber(number1);\n  number2 = utils.parseNumber(number2);\n  if (utils.anyIsError(number1, number2)) {\n    return error.value;\n  }\n\n  // Return error if either number is less than 0\n  if (number1 < 0 || number2 < 0) {\n    return error.num;\n  }\n\n  // Return error if either number is a non-integer\n  if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n    return error.num;\n  }\n\n  // Return error if either number is greater than (2^48)-1\n  if (number1 > 281474976710655 || number2 > 281474976710655) {\n    return error.num;\n  }\n\n  // Return bitwise AND of two numbers\n  return number1 & number2;\n};\n\nexports.BITLSHIFT = function(number, shift) {\n  number = utils.parseNumber(number);\n  shift = utils.parseNumber(shift);\n  if (utils.anyIsError(number, shift)) {\n    return error.value;\n  }\n\n  // Return error if number is less than 0\n  if (number < 0) {\n    return error.num;\n  }\n\n  // Return error if number is a non-integer\n  if (Math.floor(number) !== number) {\n    return error.num;\n  }\n\n  // Return error if number is greater than (2^48)-1\n  if (number > 281474976710655) {\n    return error.num;\n  }\n\n  // Return error if the absolute value of shift is greater than 53\n  if (Math.abs(shift) > 53) {\n    return error.num;\n  }\n\n  // Return number shifted by shift bits to the left or to the right if shift is negative\n  return (shift >= 0) ? number << shift : number >> -shift;\n};\n\nexports.BITOR = function(number1, number2) {\n  number1 = utils.parseNumber(number1);\n  number2 = utils.parseNumber(number2);\n  if (utils.anyIsError(number1, number2)) {\n    return error.value;\n  }\n\n  // Return error if either number is less than 0\n  if (number1 < 0 || number2 < 0) {\n    return error.num;\n  }\n\n  // Return error if either number is a non-integer\n  if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n    return error.num;\n  }\n\n  // Return error if either number is greater than (2^48)-1\n  if (number1 > 281474976710655 || number2 > 281474976710655) {\n    return error.num;\n  }\n\n  // Return bitwise OR of two numbers\n  return number1 | number2;\n};\n\nexports.BITRSHIFT = function(number, shift) {\n  number = utils.parseNumber(number);\n  shift = utils.parseNumber(shift);\n  if (utils.anyIsError(number, shift)) {\n    return error.value;\n  }\n\n  // Return error if number is less than 0\n  if (number < 0) {\n    return error.num;\n  }\n\n  // Return error if number is a non-integer\n  if (Math.floor(number) !== number) {\n    return error.num;\n  }\n\n  // Return error if number is greater than (2^48)-1\n  if (number > 281474976710655) {\n    return error.num;\n  }\n\n  // Return error if the absolute value of shift is greater than 53\n  if (Math.abs(shift) > 53) {\n    return error.num;\n  }\n\n  // Return number shifted by shift bits to the right or to the left if shift is negative\n  return (shift >= 0) ? number >> shift : number << -shift;\n};\n\nexports.BITXOR = function(number1, number2) {\n  number1 = utils.parseNumber(number1);\n  number2 = utils.parseNumber(number2);\n  if (utils.anyIsError(number1, number2)) {\n    return error.value;\n  }\n\n  // Return error if either number is less than 0\n  if (number1 < 0 || number2 < 0) {\n    return error.num;\n  }\n\n  // Return error if either number is a non-integer\n  if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n    return error.num;\n  }\n\n  // Return error if either number is greater than (2^48)-1\n  if (number1 > 281474976710655 || number2 > 281474976710655) {\n    return error.num;\n  }\n\n  // Return bitwise XOR of two numbers\n  return number1 ^ number2;\n};\n\nexports.COMPLEX = function(real, imaginary, suffix) {\n  real = utils.parseNumber(real);\n  imaginary = utils.parseNumber(imaginary);\n  if (utils.anyIsError(real, imaginary)) {\n    return real;\n  }\n\n  // Set suffix\n  suffix = (suffix === undefined) ? 'i' : suffix;\n\n  // Return error if suffix is neither \"i\" nor \"j\"\n  if (suffix !== 'i' && suffix !== 'j') {\n    return error.value;\n  }\n\n  // Return complex number\n  if (real === 0 && imaginary === 0) {\n    return 0;\n  } else if (real === 0) {\n    return (imaginary === 1) ? suffix : imaginary.toString() + suffix;\n  } else if (imaginary === 0) {\n    return real.toString();\n  } else {\n    var sign = (imaginary > 0) ? '+' : '';\n    return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);\n  }\n};\n\nexports.CONVERT = function(number, from_unit, to_unit) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n\n  // List of units supported by CONVERT and units defined by the International System of Units\n  // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion ratio]\n  var units = [\n    [\"a.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\n    [\"a.u. of charge\", \"e\", null, \"electric_charge\", false, false, 1.60217653141414e-19],\n    [\"a.u. of energy\", \"Eh\", null, \"energy\", false, false, 4.35974417757576e-18],\n    [\"a.u. of length\", \"a?\", null, \"length\", false, false, 5.29177210818182e-11],\n    [\"a.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\n    [\"a.u. of time\", \"?/Eh\", null, \"time\", false, false, 2.41888432650516e-17],\n    [\"admiralty knot\", \"admkn\", null, \"speed\", false, true, 0.514773333],\n    [\"ampere\", \"A\", null, \"electric_current\", true, false, 1],\n    [\"ampere per meter\", \"A/m\", null, \"magnetic_field_intensity\", true, false, 1],\n    [\"ångström\", \"Å\", [\"ang\"], \"length\", false, true, 1e-10],\n    [\"are\", \"ar\", null, \"area\", false, true, 100],\n    [\"astronomical unit\", \"ua\", null, \"length\", false, false, 1.49597870691667e-11],\n    [\"bar\", \"bar\", null, \"pressure\", false, false, 100000],\n    [\"barn\", \"b\", null, \"area\", false, false, 1e-28],\n    [\"becquerel\", \"Bq\", null, \"radioactivity\", true, false, 1],\n    [\"bit\", \"bit\", [\"b\"], \"information\", false, true, 1],\n    [\"btu\", \"BTU\", [\"btu\"], \"energy\", false, true, 1055.05585262],\n    [\"byte\", \"byte\", null, \"information\", false, true, 8],\n    [\"candela\", \"cd\", null, \"luminous_intensity\", true, false, 1],\n    [\"candela per square metre\", \"cd/m?\", null, \"luminance\", true, false, 1],\n    [\"coulomb\", \"C\", null, \"electric_charge\", true, false, 1],\n    [\"cubic ångström\", \"ang3\", [\"ang^3\"], \"volume\", false, true, 1e-30],\n    [\"cubic foot\", \"ft3\", [\"ft^3\"], \"volume\", false, true, 0.028316846592],\n    [\"cubic inch\", \"in3\", [\"in^3\"], \"volume\", false, true, 0.000016387064],\n    [\"cubic light-year\", \"ly3\", [\"ly^3\"], \"volume\", false, true, 8.46786664623715e-47],\n    [\"cubic metre\", \"m?\", null, \"volume\", true, true, 1],\n    [\"cubic mile\", \"mi3\", [\"mi^3\"], \"volume\", false, true, 4168181825.44058],\n    [\"cubic nautical mile\", \"Nmi3\", [\"Nmi^3\"], \"volume\", false, true, 6352182208],\n    [\"cubic Pica\", \"Pica3\", [\"Picapt3\", \"Pica^3\", \"Picapt^3\"], \"volume\", false, true, 7.58660370370369e-8],\n    [\"cubic yard\", \"yd3\", [\"yd^3\"], \"volume\", false, true, 0.764554857984],\n    [\"cup\", \"cup\", null, \"volume\", false, true, 0.0002365882365],\n    [\"dalton\", \"Da\", [\"u\"], \"mass\", false, false, 1.66053886282828e-27],\n    [\"day\", \"d\", [\"day\"], \"time\", false, true, 86400],\n    [\"degree\", \"°\", null, \"angle\", false, false, 0.0174532925199433],\n    [\"degrees Rankine\", \"Rank\", null, \"temperature\", false, true, 0.555555555555556],\n    [\"dyne\", \"dyn\", [\"dy\"], \"force\", false, true, 0.00001],\n    [\"electronvolt\", \"eV\", [\"ev\"], \"energy\", false, true, 1.60217656514141],\n    [\"ell\", \"ell\", null, \"length\", false, true, 1.143],\n    [\"erg\", \"erg\", [\"e\"], \"energy\", false, true, 1e-7],\n    [\"farad\", \"F\", null, \"electric_capacitance\", true, false, 1],\n    [\"fluid ounce\", \"oz\", null, \"volume\", false, true, 0.0000295735295625],\n    [\"foot\", \"ft\", null, \"length\", false, true, 0.3048],\n    [\"foot-pound\", \"flb\", null, \"energy\", false, true, 1.3558179483314],\n    [\"gal\", \"Gal\", null, \"acceleration\", false, false, 0.01],\n    [\"gallon\", \"gal\", null, \"volume\", false, true, 0.003785411784],\n    [\"gauss\", \"G\", [\"ga\"], \"magnetic_flux_density\", false, true, 1],\n    [\"grain\", \"grain\", null, \"mass\", false, true, 0.0000647989],\n    [\"gram\", \"g\", null, \"mass\", false, true, 0.001],\n    [\"gray\", \"Gy\", null, \"absorbed_dose\", true, false, 1],\n    [\"gross registered ton\", \"GRT\", [\"regton\"], \"volume\", false, true, 2.8316846592],\n    [\"hectare\", \"ha\", null, \"area\", false, true, 10000],\n    [\"henry\", \"H\", null, \"inductance\", true, false, 1],\n    [\"hertz\", \"Hz\", null, \"frequency\", true, false, 1],\n    [\"horsepower\", \"HP\", [\"h\"], \"power\", false, true, 745.69987158227],\n    [\"horsepower-hour\", \"HPh\", [\"hh\", \"hph\"], \"energy\", false, true, 2684519.538],\n    [\"hour\", \"h\", [\"hr\"], \"time\", false, true, 3600],\n    [\"imperial gallon (U.K.)\", \"uk_gal\", null, \"volume\", false, true, 0.00454609],\n    [\"imperial hundredweight\", \"lcwt\", [\"uk_cwt\", \"hweight\"], \"mass\", false, true, 50.802345],\n    [\"imperial quart (U.K)\", \"uk_qt\", null, \"volume\", false, true, 0.0011365225],\n    [\"imperial ton\", \"brton\", [\"uk_ton\", \"LTON\"], \"mass\", false, true, 1016.046909],\n    [\"inch\", \"in\", null, \"length\", false, true, 0.0254],\n    [\"international acre\", \"uk_acre\", null, \"area\", false, true, 4046.8564224],\n    [\"IT calorie\", \"cal\", null, \"energy\", false, true, 4.1868],\n    [\"joule\", \"J\", null, \"energy\", true, true, 1],\n    [\"katal\", \"kat\", null, \"catalytic_activity\", true, false, 1],\n    [\"kelvin\", \"K\", [\"kel\"], \"temperature\", true, true, 1],\n    [\"kilogram\", \"kg\", null, \"mass\", true, true, 1],\n    [\"knot\", \"kn\", null, \"speed\", false, true, 0.514444444444444],\n    [\"light-year\", \"ly\", null, \"length\", false, true, 9460730472580800],\n    [\"litre\", \"L\", [\"l\", \"lt\"], \"volume\", false, true, 0.001],\n    [\"lumen\", \"lm\", null, \"luminous_flux\", true, false, 1],\n    [\"lux\", \"lx\", null, \"illuminance\", true, false, 1],\n    [\"maxwell\", \"Mx\", null, \"magnetic_flux\", false, false, 1e-18],\n    [\"measurement ton\", \"MTON\", null, \"volume\", false, true, 1.13267386368],\n    [\"meter per hour\", \"m/h\", [\"m/hr\"], \"speed\", false, true, 0.00027777777777778],\n    [\"meter per second\", \"m/s\", [\"m/sec\"], \"speed\", true, true, 1],\n    [\"meter per second squared\", \"m?s??\", null, \"acceleration\", true, false, 1],\n    [\"parsec\", \"pc\", [\"parsec\"], \"length\", false, true, 30856775814671900],\n    [\"meter squared per second\", \"m?/s\", null, \"kinematic_viscosity\", true, false, 1],\n    [\"metre\", \"m\", null, \"length\", true, true, 1],\n    [\"miles per hour\", \"mph\", null, \"speed\", false, true, 0.44704],\n    [\"millimetre of mercury\", \"mmHg\", null, \"pressure\", false, false, 133.322],\n    [\"minute\", \"?\", null, \"angle\", false, false, 0.000290888208665722],\n    [\"minute\", \"min\", [\"mn\"], \"time\", false, true, 60],\n    [\"modern teaspoon\", \"tspm\", null, \"volume\", false, true, 0.000005],\n    [\"mole\", \"mol\", null, \"amount_of_substance\", true, false, 1],\n    [\"morgen\", \"Morgen\", null, \"area\", false, true, 2500],\n    [\"n.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\n    [\"n.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\n    [\"n.u. of speed\", \"c?\", null, \"speed\", false, false, 299792458],\n    [\"n.u. of time\", \"?/(me?c??)\", null, \"time\", false, false, 1.28808866778687e-21],\n    [\"nautical mile\", \"M\", [\"Nmi\"], \"length\", false, true, 1852],\n    [\"newton\", \"N\", null, \"force\", true, true, 1],\n    [\"œrsted\", \"Oe \", null, \"magnetic_field_intensity\", false, false, 79.5774715459477],\n    [\"ohm\", \"Ω\", null, \"electric_resistance\", true, false, 1],\n    [\"ounce mass\", \"ozm\", null, \"mass\", false, true, 0.028349523125],\n    [\"pascal\", \"Pa\", null, \"pressure\", true, false, 1],\n    [\"pascal second\", \"Pa?s\", null, \"dynamic_viscosity\", true, false, 1],\n    [\"pferdestärke\", \"PS\", null, \"power\", false, true, 735.49875],\n    [\"phot\", \"ph\", null, \"illuminance\", false, false, 0.0001],\n    [\"pica (1/6 inch)\", \"pica\", null, \"length\", false, true, 0.00035277777777778],\n    [\"pica (1/72 inch)\", \"Pica\", [\"Picapt\"], \"length\", false, true, 0.00423333333333333],\n    [\"poise\", \"P\", null, \"dynamic_viscosity\", false, false, 0.1],\n    [\"pond\", \"pond\", null, \"force\", false, true, 0.00980665],\n    [\"pound force\", \"lbf\", null, \"force\", false, true, 4.4482216152605],\n    [\"pound mass\", \"lbm\", null, \"mass\", false, true, 0.45359237],\n    [\"quart\", \"qt\", null, \"volume\", false, true, 0.000946352946],\n    [\"radian\", \"rad\", null, \"angle\", true, false, 1],\n    [\"second\", \"?\", null, \"angle\", false, false, 0.00000484813681109536],\n    [\"second\", \"s\", [\"sec\"], \"time\", true, true, 1],\n    [\"short hundredweight\", \"cwt\", [\"shweight\"], \"mass\", false, true, 45.359237],\n    [\"siemens\", \"S\", null, \"electrical_conductance\", true, false, 1],\n    [\"sievert\", \"Sv\", null, \"equivalent_dose\", true, false, 1],\n    [\"slug\", \"sg\", null, \"mass\", false, true, 14.59390294],\n    [\"square ångström\", \"ang2\", [\"ang^2\"], \"area\", false, true, 1e-20],\n    [\"square foot\", \"ft2\", [\"ft^2\"], \"area\", false, true, 0.09290304],\n    [\"square inch\", \"in2\", [\"in^2\"], \"area\", false, true, 0.00064516],\n    [\"square light-year\", \"ly2\", [\"ly^2\"], \"area\", false, true, 8.95054210748189e+31],\n    [\"square meter\", \"m?\", null, \"area\", true, true, 1],\n    [\"square mile\", \"mi2\", [\"mi^2\"], \"area\", false, true, 2589988.110336],\n    [\"square nautical mile\", \"Nmi2\", [\"Nmi^2\"], \"area\", false, true, 3429904],\n    [\"square Pica\", \"Pica2\", [\"Picapt2\", \"Pica^2\", \"Picapt^2\"], \"area\", false, true, 0.00001792111111111],\n    [\"square yard\", \"yd2\", [\"yd^2\"], \"area\", false, true, 0.83612736],\n    [\"statute mile\", \"mi\", null, \"length\", false, true, 1609.344],\n    [\"steradian\", \"sr\", null, \"solid_angle\", true, false, 1],\n    [\"stilb\", \"sb\", null, \"luminance\", false, false, 0.0001],\n    [\"stokes\", \"St\", null, \"kinematic_viscosity\", false, false, 0.0001],\n    [\"stone\", \"stone\", null, \"mass\", false, true, 6.35029318],\n    [\"tablespoon\", \"tbs\", null, \"volume\", false, true, 0.0000147868],\n    [\"teaspoon\", \"tsp\", null, \"volume\", false, true, 0.00000492892],\n    [\"tesla\", \"T\", null, \"magnetic_flux_density\", true, true, 1],\n    [\"thermodynamic calorie\", \"c\", null, \"energy\", false, true, 4.184],\n    [\"ton\", \"ton\", null, \"mass\", false, true, 907.18474],\n    [\"tonne\", \"t\", null, \"mass\", false, false, 1000],\n    [\"U.K. pint\", \"uk_pt\", null, \"volume\", false, true, 0.00056826125],\n    [\"U.S. bushel\", \"bushel\", null, \"volume\", false, true, 0.03523907],\n    [\"U.S. oil barrel\", \"barrel\", null, \"volume\", false, true, 0.158987295],\n    [\"U.S. pint\", \"pt\", [\"us_pt\"], \"volume\", false, true, 0.000473176473],\n    [\"U.S. survey mile\", \"survey_mi\", null, \"length\", false, true, 1609.347219],\n    [\"U.S. survey/statute acre\", \"us_acre\", null, \"area\", false, true, 4046.87261],\n    [\"volt\", \"V\", null, \"voltage\", true, false, 1],\n    [\"watt\", \"W\", null, \"power\", true, true, 1],\n    [\"watt-hour\", \"Wh\", [\"wh\"], \"energy\", false, true, 3600],\n    [\"weber\", \"Wb\", null, \"magnetic_flux\", true, false, 1],\n    [\"yard\", \"yd\", null, \"length\", false, true, 0.9144],\n    [\"year\", \"yr\", null, \"time\", false, true, 31557600]\n  ];\n\n  // Binary prefixes\n  // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived from]\n  var binary_prefixes = {\n    Yi: [\"yobi\", 80, 1208925819614629174706176, \"Yi\", \"yotta\"],\n    Zi: [\"zebi\", 70, 1180591620717411303424, \"Zi\", \"zetta\"],\n    Ei: [\"exbi\", 60, 1152921504606846976, \"Ei\", \"exa\"],\n    Pi: [\"pebi\", 50, 1125899906842624, \"Pi\", \"peta\"],\n    Ti: [\"tebi\", 40, 1099511627776, \"Ti\", \"tera\"],\n    Gi: [\"gibi\", 30, 1073741824, \"Gi\", \"giga\"],\n    Mi: [\"mebi\", 20, 1048576, \"Mi\", \"mega\"],\n    ki: [\"kibi\", 10, 1024, \"ki\", \"kilo\"]\n  };\n\n  // Unit prefixes\n  // [Name, Multiplier, Abbreviation]\n  var unit_prefixes = {\n    Y: [\"yotta\", 1e+24, \"Y\"],\n    Z: [\"zetta\", 1e+21, \"Z\"],\n    E: [\"exa\", 1e+18, \"E\"],\n    P: [\"peta\", 1e+15, \"P\"],\n    T: [\"tera\", 1e+12, \"T\"],\n    G: [\"giga\", 1e+09, \"G\"],\n    M: [\"mega\", 1e+06, \"M\"],\n    k: [\"kilo\", 1e+03, \"k\"],\n    h: [\"hecto\", 1e+02, \"h\"],\n    e: [\"dekao\", 1e+01, \"e\"],\n    d: [\"deci\", 1e-01, \"d\"],\n    c: [\"centi\", 1e-02, \"c\"],\n    m: [\"milli\", 1e-03, \"m\"],\n    u: [\"micro\", 1e-06, \"u\"],\n    n: [\"nano\", 1e-09, \"n\"],\n    p: [\"pico\", 1e-12, \"p\"],\n    f: [\"femto\", 1e-15, \"f\"],\n    a: [\"atto\", 1e-18, \"a\"],\n    z: [\"zepto\", 1e-21, \"z\"],\n    y: [\"yocto\", 1e-24, \"y\"]\n  };\n\n  // Initialize units and multipliers\n  var from = null;\n  var to = null;\n  var base_from_unit = from_unit;\n  var base_to_unit = to_unit;\n  var from_multiplier = 1;\n  var to_multiplier = 1;\n  var alt;\n\n  // Lookup from and to units\n  for (var i = 0; i < units.length; i++) {\n    alt = (units[i][2] === null) ? [] : units[i][2];\n    if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n      from = units[i];\n    }\n    if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n      to = units[i];\n    }\n  }\n\n  // Lookup from prefix\n  if (from === null) {\n    var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];\n    var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];\n\n    // Handle dekao unit prefix (only unit prefix with two characters)\n    if (from_unit.substring(0, 2) === 'da') {\n      from_unit_prefix = [\"dekao\", 1e+01, \"da\"];\n    }\n\n    // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n    if (from_binary_prefix) {\n      from_multiplier = from_binary_prefix[2];\n      base_from_unit = from_unit.substring(2);\n    } else if (from_unit_prefix) {\n      from_multiplier = from_unit_prefix[1];\n      base_from_unit = from_unit.substring(from_unit_prefix[2].length);\n    }\n\n    // Lookup from unit\n    for (var j = 0; j < units.length; j++) {\n      alt = (units[j][2] === null) ? [] : units[j][2];\n      if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n        from = units[j];\n      }\n    }\n  }\n\n  // Lookup to prefix\n  if (to === null) {\n    var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];\n    var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];\n\n    // Handle dekao unit prefix (only unit prefix with two characters)\n    if (to_unit.substring(0, 2) === 'da') {\n      to_unit_prefix = [\"dekao\", 1e+01, \"da\"];\n    }\n\n    // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n    if (to_binary_prefix) {\n      to_multiplier = to_binary_prefix[2];\n      base_to_unit = to_unit.substring(2);\n    } else if (to_unit_prefix) {\n      to_multiplier = to_unit_prefix[1];\n      base_to_unit = to_unit.substring(to_unit_prefix[2].length);\n    }\n\n    // Lookup to unit\n    for (var k = 0; k < units.length; k++) {\n      alt = (units[k][2] === null) ? [] : units[k][2];\n      if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n        to = units[k];\n      }\n    }\n  }\n\n  // Return error if a unit does not exist\n  if (from === null || to === null) {\n    return error.na;\n  }\n\n  // Return error if units represent different quantities\n  if (from[3] !== to[3]) {\n    return error.na;\n  }\n\n  // Return converted number\n  return number * from[6] * from_multiplier / (to[6] * to_multiplier);\n};\n\nexports.DEC2BIN = function(number, places) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n\n  // Return error if number is not decimal, is lower than -512, or is greater than 511\n  if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character binary number if number is negative\n  if (number < 0) {\n    return '1' + text.REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);\n  }\n\n  // Convert decimal number to binary\n  var result = parseInt(number, 10).toString(2);\n\n  // Return binary number using the minimum number of characters necessary if places is undefined\n  if (typeof places === 'undefined') {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.DEC2HEX = function(number, places) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n\n  // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n  if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character hexadecimal number if number is negative\n  if (number < 0) {\n    return (1099511627776 + number).toString(16);\n  }\n\n  // Convert decimal number to hexadecimal\n  var result = parseInt(number, 10).toString(16);\n\n  // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n  if (typeof places === 'undefined') {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.DEC2OCT = function(number, places) {\n  number = utils.parseNumber(number);\n  if (number instanceof Error) {\n    return number;\n  }\n\n  // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n  if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character octal number if number is negative\n  if (number < 0) {\n    return (1073741824 + number).toString(8);\n  }\n\n  // Convert decimal number to octal\n  var result = parseInt(number, 10).toString(8);\n\n  // Return octal number using the minimum number of characters necessary if places is undefined\n  if (typeof places === 'undefined') {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.DELTA = function(number1, number2) {\n  // Set number2 to zero if undefined\n  number2 = (number2 === undefined) ? 0 : number2;\n  number1 = utils.parseNumber(number1);\n  number2 = utils.parseNumber(number2);\n  if (utils.anyIsError(number1, number2)) {\n    return error.value;\n  }\n\n  // Return delta\n  return (number1 === number2) ? 1 : 0;\n};\n\n// TODO: why is upper_bound not used ? The excel documentation has no examples with upper_bound\nexports.ERF = function(lower_bound, upper_bound) {\n  // Set number2 to zero if undefined\n  upper_bound = (upper_bound === undefined) ? 0 : upper_bound;\n\n  lower_bound = utils.parseNumber(lower_bound);\n  upper_bound = utils.parseNumber(upper_bound);\n  if (utils.anyIsError(lower_bound, upper_bound)) {\n    return error.value;\n  }\n\n  return jStat.erf(lower_bound);\n};\n\n// TODO\nexports.ERF.PRECISE = function() {\n  throw new Error('ERF.PRECISE is not implemented');\n};\n\nexports.ERFC = function(x) {\n  // Return error if x is not a number\n  if (isNaN(x)) {\n    return error.value;\n  }\n\n  return jStat.erfc(x);\n};\n\n// TODO\nexports.ERFC.PRECISE = function() {\n  throw new Error('ERFC.PRECISE is not implemented');\n};\n\nexports.GESTEP = function(number, step) {\n  step = step || 0;\n  number = utils.parseNumber(number);\n  if (utils.anyIsError(step, number)) {\n    return number;\n  }\n\n  // Return delta\n  return (number >= step) ? 1 : 0;\n};\n\nexports.HEX2BIN = function(number, places) {\n  // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n  if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Check if number is negative\n  var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false;\n\n  // Convert hexadecimal number to decimal\n  var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\n\n  // Return error if number is lower than -512 or greater than 511\n  if (decimal < -512 || decimal > 511) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character binary number if number is negative\n  if (negative) {\n    return '1' + text.REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\n  }\n\n  // Convert decimal number to binary\n  var result = decimal.toString(2);\n\n  // Return binary number using the minimum number of characters necessary if places is undefined\n  if (places === undefined) {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.HEX2DEC = function(number) {\n  // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n  if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Convert hexadecimal number to decimal\n  var decimal = parseInt(number, 16);\n\n  // Return decimal number\n  return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal;\n};\n\nexports.HEX2OCT = function(number, places) {\n  // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n  if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Convert hexadecimal number to decimal\n  var decimal = parseInt(number, 16);\n\n  // Return error if number is positive and greater than 0x1fffffff (536870911)\n  if (decimal > 536870911 && decimal < 1098974756864) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character octal number if number is negative\n  if (decimal >= 1098974756864) {\n    return (decimal - 1098437885952).toString(8);\n  }\n\n  // Convert decimal number to octal\n  var result = decimal.toString(8);\n\n  // Return octal number using the minimum number of characters necessary if places is undefined\n  if (places === undefined) {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.IMABS = function(inumber) {\n  // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  // Return error if either coefficient is not a number\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return absolute value of complex number\n  return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n};\n\nexports.IMAGINARY = function(inumber) {\n  if (inumber === undefined || inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Return 0 if inumber is equal to 0\n  if (inumber === 0 || inumber === '0') {\n    return 0;\n  }\n\n  // Handle special cases\n  if (['i', 'j'].indexOf(inumber) >= 0) {\n    return 1;\n  }\n\n  // Normalize imaginary coefficient\n  inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');\n\n  // Lookup sign\n  var plus = inumber.indexOf('+');\n  var minus = inumber.indexOf('-');\n  if (plus === 0) {\n    plus = inumber.indexOf('+', 1);\n  }\n\n  if (minus === 0) {\n    minus = inumber.indexOf('-', 1);\n  }\n\n  // Lookup imaginary unit\n  var last = inumber.substring(inumber.length - 1, inumber.length);\n  var unit = (last === 'i' || last === 'j');\n\n  if (plus >= 0 || minus >= 0) {\n    // Return error if imaginary unit is neither i nor j\n    if (!unit) {\n      return error.num;\n    }\n\n    // Return imaginary coefficient of complex number\n    if (plus >= 0) {\n      return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\n        error.num :\n        Number(inumber.substring(plus + 1, inumber.length - 1));\n    } else {\n      return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\n        error.num :\n        -Number(inumber.substring(minus + 1, inumber.length - 1));\n    }\n  } else {\n    if (unit) {\n      return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1);\n    } else {\n      return (isNaN(inumber)) ? error.num : 0;\n    }\n  }\n};\n\nexports.IMARGUMENT = function(inumber) {\n  // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  // Return error if either coefficient is not a number\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return error if inumber is equal to zero\n  if (x === 0 && y === 0) {\n    return error.div0;\n  }\n\n  // Return PI/2 if x is equal to zero and y is positive\n  if (x === 0 && y > 0) {\n    return Math.PI / 2;\n  }\n\n  // Return -PI/2 if x is equal to zero and y is negative\n  if (x === 0 && y < 0) {\n    return -Math.PI / 2;\n  }\n\n  // Return zero if x is negative and y is equal to zero\n  if (y === 0 && x > 0) {\n    return 0;\n  }\n\n  // Return zero if x is negative and y is equal to zero\n  if (y === 0 && x < 0) {\n    return -Math.PI;\n  }\n\n  // Return argument of complex number\n  if (x > 0) {\n    return Math.atan(y / x);\n  } else if (x < 0 && y >= 0) {\n    return Math.atan(y / x) + Math.PI;\n  } else {\n    return Math.atan(y / x) - Math.PI;\n  }\n};\n\nexports.IMCONJUGATE = function(inumber) {\n  // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return conjugate of complex number\n  return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber;\n};\n\nexports.IMCOS = function(inumber) {\n  // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return cosine of complex number\n  return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\n};\n\nexports.IMCOSH = function(inumber) {\n  // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return hyperbolic cosine of complex number\n  return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit);\n};\n\nexports.IMCOT = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return cotangent of complex number\n  return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber));\n};\n\nexports.IMDIV = function(inumber1, inumber2) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var a = exports.IMREAL(inumber1);\n  var b = exports.IMAGINARY(inumber1);\n  var c = exports.IMREAL(inumber2);\n  var d = exports.IMAGINARY(inumber2);\n\n  if (utils.anyIsError(a, b, c, d)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit1 = inumber1.substring(inumber1.length - 1);\n  var unit2 = inumber2.substring(inumber2.length - 1);\n  var unit = 'i';\n  if (unit1 === 'j') {\n    unit = 'j';\n  } else if (unit2 === 'j') {\n    unit = 'j';\n  }\n\n  // Return error if inumber2 is null\n  if (c === 0 && d === 0) {\n    return error.num;\n  }\n\n  // Return exponential of complex number\n  var den = c * c + d * d;\n  return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit);\n};\n\nexports.IMEXP = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return exponential of complex number\n  var e = Math.exp(x);\n  return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit);\n};\n\nexports.IMLN = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return exponential of complex number\n  return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit);\n};\n\nexports.IMLOG10 = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return exponential of complex number\n  return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit);\n};\n\nexports.IMLOG2 = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return exponential of complex number\n  return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit);\n};\n\nexports.IMPOWER = function(inumber, number) {\n  number = utils.parseNumber(number);\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n  if (utils.anyIsError(number, x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Calculate power of modulus\n  var p = Math.pow(exports.IMABS(inumber), number);\n\n  // Calculate argument\n  var t = exports.IMARGUMENT(inumber);\n\n  // Return exponential of complex number\n  return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit);\n};\n\nexports.IMPRODUCT = function() {\n  // Initialize result\n  var result = arguments[0];\n\n  if (!arguments.length) {\n    return error.value;\n  }\n\n  // Loop on all numbers\n  for (var i = 1; i < arguments.length; i++) {\n    // Lookup coefficients of two complex numbers\n    var a = exports.IMREAL(result);\n    var b = exports.IMAGINARY(result);\n    var c = exports.IMREAL(arguments[i]);\n    var d = exports.IMAGINARY(arguments[i]);\n\n    if (utils.anyIsError(a, b, c, d)) {\n      return error.value;\n    }\n\n    // Complute product of two complex numbers\n    result = exports.COMPLEX(a * c - b * d, a * d + b * c);\n  }\n\n  // Return product of complex numbers\n  return result;\n};\n\nexports.IMREAL = function(inumber) {\n  if (inumber === undefined || inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Return 0 if inumber is equal to 0\n  if (inumber === 0 || inumber === '0') {\n    return 0;\n  }\n\n  // Handle special cases\n  if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {\n    return 0;\n  }\n\n  // Lookup sign\n  var plus = inumber.indexOf('+');\n  var minus = inumber.indexOf('-');\n  if (plus === 0) {\n    plus = inumber.indexOf('+', 1);\n  }\n  if (minus === 0) {\n    minus = inumber.indexOf('-', 1);\n  }\n\n  // Lookup imaginary unit\n  var last = inumber.substring(inumber.length - 1, inumber.length);\n  var unit = (last === 'i' || last === 'j');\n\n  if (plus >= 0 || minus >= 0) {\n    // Return error if imaginary unit is neither i nor j\n    if (!unit) {\n      return error.num;\n    }\n\n    // Return real coefficient of complex number\n    if (plus >= 0) {\n      return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\n        error.num :\n        Number(inumber.substring(0, plus));\n    } else {\n      return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\n        error.num :\n        Number(inumber.substring(0, minus));\n    }\n  } else {\n    if (unit) {\n      return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0;\n    } else {\n      return (isNaN(inumber)) ? error.num : inumber;\n    }\n  }\n};\n\nexports.IMSEC = function(inumber) {\n  // Return error if inumber is a logical value\n  if (inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return secant of complex number\n  return exports.IMDIV('1', exports.IMCOS(inumber));\n};\n\nexports.IMSECH = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return hyperbolic secant of complex number\n  return exports.IMDIV('1', exports.IMCOSH(inumber));\n};\n\nexports.IMSIN = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return sine of complex number\n  return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\n};\n\nexports.IMSINH = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Return hyperbolic sine of complex number\n  return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit);\n};\n\nexports.IMSQRT = function(inumber) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit = inumber.substring(inumber.length - 1);\n  unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n  // Calculate power of modulus\n  var s = Math.sqrt(exports.IMABS(inumber));\n\n  // Calculate argument\n  var t = exports.IMARGUMENT(inumber);\n\n  // Return exponential of complex number\n  return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit);\n};\n\nexports.IMCSC = function (inumber) {\n  // Return error if inumber is a logical value\n  if (inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  // Return error if either coefficient is not a number\n  if (utils.anyIsError(x, y)) {\n    return error.num;\n  }\n\n  // Return cosecant of complex number\n  return exports.IMDIV('1', exports.IMSIN(inumber));\n};\n\nexports.IMCSCH = function (inumber) {\n  // Return error if inumber is a logical value\n  if (inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  // Return error if either coefficient is not a number\n  if (utils.anyIsError(x, y)) {\n    return error.num;\n  }\n\n  // Return hyperbolic cosecant of complex number\n  return exports.IMDIV('1', exports.IMSINH(inumber));\n};\n\nexports.IMSUB = function(inumber1, inumber2) {\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var a = this.IMREAL(inumber1);\n  var b = this.IMAGINARY(inumber1);\n  var c = this.IMREAL(inumber2);\n  var d = this.IMAGINARY(inumber2);\n\n  if (utils.anyIsError(a, b, c, d)) {\n    return error.value;\n  }\n\n  // Lookup imaginary unit\n  var unit1 = inumber1.substring(inumber1.length - 1);\n  var unit2 = inumber2.substring(inumber2.length - 1);\n  var unit = 'i';\n  if (unit1 === 'j') {\n    unit = 'j';\n  } else if (unit2 === 'j') {\n    unit = 'j';\n  }\n\n  // Return _ of two complex numbers\n  return this.COMPLEX(a - c, b - d, unit);\n};\n\nexports.IMSUM = function() {\n  if (!arguments.length) {\n    return error.value;\n  }\n  var args = utils.flatten(arguments);\n\n  // Initialize result\n  var result = args[0];\n\n  // Loop on all numbers\n  for (var i = 1; i < args.length; i++) {\n    // Lookup coefficients of two complex numbers\n    var a = this.IMREAL(result);\n    var b = this.IMAGINARY(result);\n    var c = this.IMREAL(args[i]);\n    var d = this.IMAGINARY(args[i]);\n\n    if (utils.anyIsError(a, b, c, d)) {\n      return error.value;\n    }\n\n    // Complute product of two complex numbers\n    result = this.COMPLEX(a + c, b + d);\n  }\n\n  // Return sum of complex numbers\n  return result;\n};\n\nexports.IMTAN = function(inumber) {\n  // Return error if inumber is a logical value\n  if (inumber === true || inumber === false) {\n    return error.value;\n  }\n\n  // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n  var x = exports.IMREAL(inumber);\n  var y = exports.IMAGINARY(inumber);\n\n  if (utils.anyIsError(x, y)) {\n    return error.value;\n  }\n\n  // Return tangent of complex number\n  return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber));\n};\n\nexports.OCT2BIN = function(number, places) {\n  // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n  if (!/^[0-7]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Check if number is negative\n  var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false;\n\n  // Convert octal number to decimal\n  var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);\n\n  // Return error if number is lower than -512 or greater than 511\n  if (decimal < -512 || decimal > 511) {\n    return error.num;\n  }\n\n  // Ignore places and return a 10-character binary number if number is negative\n  if (negative) {\n    return '1' + text.REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\n  }\n\n  // Convert decimal number to binary\n  var result = decimal.toString(2);\n\n  // Return binary number using the minimum number of characters necessary if places is undefined\n  if (typeof places === 'undefined') {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\nexports.OCT2DEC = function(number) {\n  // Return error if number is not octal or contains more than ten characters (10 digits)\n  if (!/^[0-7]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Convert octal number to decimal\n  var decimal = parseInt(number, 8);\n\n  // Return decimal number\n  return (decimal >= 536870912) ? decimal - 1073741824 : decimal;\n};\n\nexports.OCT2HEX = function(number, places) {\n  // Return error if number is not octal or contains more than ten characters (10 digits)\n  if (!/^[0-7]{1,10}$/.test(number)) {\n    return error.num;\n  }\n\n  // Convert octal number to decimal\n  var decimal = parseInt(number, 8);\n\n  // Ignore places and return a 10-character octal number if number is negative\n  if (decimal >= 536870912) {\n    return 'ff' + (decimal + 3221225472).toString(16);\n  }\n\n  // Convert decimal number to hexadecimal\n  var result = decimal.toString(16);\n\n  // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n  if (places === undefined) {\n    return result;\n  } else {\n    // Return error if places is nonnumeric\n    if (isNaN(places)) {\n      return error.value;\n    }\n\n    // Return error if places is negative\n    if (places < 0) {\n      return error.num;\n    }\n\n    // Truncate places in case it is not an integer\n    places = Math.floor(places);\n\n    // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n    return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n  }\n};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nvar SUPPORTED_FORMULAS = ['ABS', 'ACCRINT', 'ACOS', 'ACOSH', 'ACOT', 'ACOTH', 'ADD', 'AGGREGATE', 'AND', 'ARABIC', 'ARGS2ARRAY', 'ASIN', 'ASINH', 'ATAN', 'ATAN2', 'ATANH', 'AVEDEV', 'AVERAGE', 'AVERAGEA', 'AVERAGEIF', 'AVERAGEIFS', 'BASE', 'BESSELI', 'BESSELJ', 'BESSELK', 'BESSELY', 'BETA.DIST', 'BETA.INV', 'BETADIST', 'BETAINV', 'BIN2DEC', 'BIN2HEX', 'BIN2OCT', 'BINOM.DIST', 'BINOM.DIST.RANGE', 'BINOM.INV', 'BINOMDIST', 'BITAND', 'BITLSHIFT', 'BITOR', 'BITRSHIFT', 'BITXOR', 'CEILING', 'CEILINGMATH', 'CEILINGPRECISE', 'CHAR', 'CHISQ.DIST', 'CHISQ.DIST.RT', 'CHISQ.INV', 'CHISQ.INV.RT', 'CHOOSE', 'CHOOSE', 'CLEAN', 'CODE', 'COLUMN', 'COLUMNS', 'COMBIN', 'COMBINA', 'COMPLEX', 'CONCATENATE', 'CONFIDENCE', 'CONFIDENCE.NORM', 'CONFIDENCE.T', 'CONVERT', 'CORREL', 'COS', 'COSH', 'COT', 'COTH', 'COUNT', 'COUNTA', 'COUNTBLANK', 'COUNTIF', 'COUNTIFS', 'COUNTIN', 'COUNTUNIQUE', 'COVARIANCE.P', 'COVARIANCE.S', 'CSC', 'CSCH', 'CUMIPMT', 'CUMPRINC', 'DATE', 'DATEVALUE', 'DAY', 'DAYS', 'DAYS360', 'DB', 'DDB', 'DEC2BIN', 'DEC2HEX', 'DEC2OCT', 'DECIMAL', 'DEGREES', 'DELTA', 'DEVSQ', 'DIVIDE', 'DOLLARDE', 'DOLLARFR', 'E', 'EDATE', 'EFFECT', 'EOMONTH', 'EQ', 'ERF', 'ERFC', 'EVEN', 'EXACT', 'EXP', 'EXPON.DIST', 'EXPONDIST', 'F.DIST', 'F.DIST.RT', 'F.INV', 'F.INV.RT', 'FACT', 'FACTDOUBLE', 'FALSE', 'FDIST', 'FDISTRT', 'FIND', 'FINV', 'FINVRT', 'FISHER', 'FISHERINV', 'FLATTEN', 'FLOOR', 'FORECAST', 'FREQUENCY', 'FV', 'FVSCHEDULE', 'GAMMA', 'GAMMA.DIST', 'GAMMA.INV', 'GAMMADIST', 'GAMMAINV', 'GAMMALN', 'GAMMALN.PRECISE', 'GAUSS', 'GCD', 'GEOMEAN', 'GESTEP', 'GROWTH', 'GTE', 'HARMEAN', 'HEX2BIN', 'HEX2DEC', 'HEX2OCT', 'HOUR', 'HTML2TEXT', 'HYPGEOM.DIST', 'HYPGEOMDIST', 'IF', 'IMABS', 'IMAGINARY', 'IMARGUMENT', 'IMCONJUGATE', 'IMCOS', 'IMCOSH', 'IMCOT', 'IMCSC', 'IMCSCH', 'IMDIV', 'IMEXP', 'IMLN', 'IMLOG10', 'IMLOG2', 'IMPOWER', 'IMPRODUCT', 'IMREAL', 'IMSEC', 'IMSECH', 'IMSIN', 'IMSINH', 'IMSQRT', 'IMSUB', 'IMSUM', 'IMTAN', 'INT', 'INTERCEPT', 'INTERVAL', 'IPMT', 'IRR', 'ISBINARY', 'ISBLANK', 'ISEVEN', 'ISLOGICAL', 'ISNONTEXT', 'ISNUMBER', 'ISODD', 'ISODD', 'ISOWEEKNUM', 'ISPMT', 'ISTEXT', 'JOIN', 'KURT', 'LARGE', 'LCM', 'LEFT', 'LEN', 'LINEST', 'LN', 'LOG', 'LOG10', 'LOGEST', 'LOGNORM.DIST', 'LOGNORM.INV', 'LOGNORMDIST', 'LOGNORMINV', 'LOWER', 'LT', 'LTE', 'MATCH', 'MAX', 'MAXA', 'MEDIAN', 'MID', 'MIN', 'MINA', 'MINUS', 'MINUTE', 'MIRR', 'MOD', 'MODE.MULT', 'MODE.SNGL', 'MODEMULT', 'MODESNGL', 'MONTH', 'MROUND', 'MULTINOMIAL', 'MULTIPLY', 'NE', 'NEGBINOM.DIST', 'NEGBINOMDIST', 'NETWORKDAYS', 'NOMINAL', 'NORM.DIST', 'NORM.INV', 'NORM.S.DIST', 'NORM.S.INV', 'NORMDIST', 'NORMINV', 'NORMSDIST', 'NORMSINV', 'NOT', 'NOW', 'NPER', 'NPV', 'NUMBERS', 'OCT2BIN', 'OCT2DEC', 'OCT2HEX', 'ODD', 'OR', 'PDURATION', 'PEARSON', 'PERCENTILEEXC', 'PERCENTILEINC', 'PERCENTRANKEXC', 'PERCENTRANKINC', 'PERMUT', 'PERMUTATIONA', 'PHI', 'PI', 'PMT', 'POISSON.DIST', 'POISSONDIST', 'POW', 'POWER', 'PPMT', 'PROB', 'PRODUCT', 'PROPER', 'PV', 'QUARTILE.EXC', 'QUARTILE.INC', 'QUARTILEEXC', 'QUARTILEINC', 'QUOTIENT', 'RADIANS', 'RAND', 'RANDBETWEEN', 'RANK.AVG', 'RANK.EQ', 'RANKAVG', 'RANKEQ', 'RATE', 'REFERENCE', 'REGEXEXTRACT', 'REGEXMATCH', 'REGEXREPLACE', 'REPLACE', 'REPT', 'RIGHT', 'ROMAN', 'ROUND', 'ROUNDDOWN', 'ROUNDUP', 'ROW', 'ROWS', 'RRI', 'RSQ', 'SEARCH', 'SEC', 'SECH', 'SECOND', 'SERIESSUM', 'SIGN', 'SIN', 'SINH', 'SKEW', 'SKEW.P', 'SKEWP', 'SLN', 'SLOPE', 'SMALL', 'SPLIT', 'SPLIT', 'SQRT', 'SQRTPI', 'STANDARDIZE', 'STDEV.P', 'STDEV.S', 'STDEVA', 'STDEVP', 'STDEVPA', 'STDEVS', 'STEYX', 'SUBSTITUTE', 'SUBTOTAL', 'SUM', 'SUMIF', 'SUMIFS', 'SUMPRODUCT', 'SUMSQ', 'SUMX2MY2', 'SUMX2PY2', 'SUMXMY2', 'SWITCH', 'SYD', 'T', 'T.DIST', 'T.DIST.2T', 'T.DIST.RT', 'T.INV', 'T.INV.2T', 'TAN', 'TANH', 'TBILLEQ', 'TBILLPRICE', 'TBILLYIELD', 'TDIST', 'TDIST2T', 'TDISTRT', 'TIME', 'TIMEVALUE', 'TINV', 'TINV2T', 'TODAY', 'TRANSPOSE', 'TREND', 'TRIM', 'TRIMMEAN', 'TRUE', 'TRUNC', 'UNICHAR', 'UNICODE', 'UNIQUE', 'UPPER', 'VAR.P', 'VAR.S', 'VARA', 'VARP', 'VARPA', 'VARS', 'WEEKDAY', 'WEEKNUM', 'WEIBULL.DIST', 'WEIBULLDIST', 'WORKDAY', 'XIRR', 'XNPV', 'XOR', 'YEAR', 'YEARFRAC'];\n\nexports['default'] = SUPPORTED_FORMULAS;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.rowLabelToIndex = rowLabelToIndex;\nexports.rowIndexToLabel = rowIndexToLabel;\nexports.columnLabelToIndex = columnLabelToIndex;\nexports.columnIndexToLabel = columnIndexToLabel;\nexports.extractLabel = extractLabel;\nexports.toLabel = toLabel;\n/**\n * Convert row label to index.\n *\n * @param {String} label Row label (eq. '1', '5')\n * @returns {Number} Returns -1 if label is not recognized otherwise proper row index.\n */\nfunction rowLabelToIndex(label) {\n  var result = parseInt(label, 10);\n\n  if (isNaN(result)) {\n    result = -1;\n  } else {\n    result = Math.max(result - 1, -1);\n  }\n\n  return result;\n}\n\n/**\n * Convert row index to label.\n *\n * @param {Number} row Row index.\n * @returns {String} Returns row label (eq. '1', '7').\n */\nfunction rowIndexToLabel(row) {\n  var result = '';\n\n  if (row >= 0) {\n    result = '' + (row + 1);\n  }\n\n  return result;\n}\n\nvar COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nvar COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n\n/**\n * Convert column label to index.\n *\n * @param {String} label Column label (eq. 'ABB', 'CNQ')\n * @returns {Number} Returns -1 if label is not recognized otherwise proper column index.\n */\nfunction columnLabelToIndex(label) {\n  var result = 0;\n\n  if (typeof label === 'string') {\n    label = label.toUpperCase();\n\n    for (var i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n      result += Math.pow(COLUMN_LABEL_BASE_LENGTH, j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n    }\n  }\n  --result;\n\n  return result;\n}\n\n/**\n * Convert column index to label.\n *\n * @param {Number} column Column index.\n * @returns {String} Returns column label (eq. 'ABB', 'CNQ').\n */\nfunction columnIndexToLabel(column) {\n  var result = '';\n\n  while (column >= 0) {\n    result = String.fromCharCode(column % COLUMN_LABEL_BASE_LENGTH + 97) + result;\n    column = Math.floor(column / COLUMN_LABEL_BASE_LENGTH) - 1;\n  }\n\n  return result.toUpperCase();\n}\n\nvar LABEL_EXTRACT_REGEXP = /^([$])?([A-Za-z]+)([$])?([0-9]+)$/;\n\n/**\n * Extract cell coordinates.\n *\n * @param {String} label Cell coordinates (eq. 'A1', '$B6', '$N$98').\n * @returns {Array} Returns an array of objects.\n */\nfunction extractLabel(label) {\n  if (typeof label !== 'string' || !LABEL_EXTRACT_REGEXP.test(label)) {\n    return [];\n  }\n\n  var _label$toUpperCase$ma = label.toUpperCase().match(LABEL_EXTRACT_REGEXP),\n      columnAbs = _label$toUpperCase$ma[1],\n      column = _label$toUpperCase$ma[2],\n      rowAbs = _label$toUpperCase$ma[3],\n      row = _label$toUpperCase$ma[4];\n\n  return [{\n    index: rowLabelToIndex(row),\n    label: row,\n    isAbsolute: rowAbs === '$'\n  }, {\n    index: columnLabelToIndex(column),\n    label: column,\n    isAbsolute: columnAbs === '$'\n  }];\n}\n\n/**\n * Convert row and column indexes into cell label.\n *\n * @param {Object} row Object with `index` and `isAbsolute` properties.\n * @param {Object} column Object with `index` and `isAbsolute` properties.\n * @returns {String} Returns cell label.\n */\nfunction toLabel(row, column) {\n  var rowLabel = (row.isAbsolute ? '$' : '') + rowIndexToLabel(row.index);\n  var columnLabel = (column.isAbsolute ? '$' : '') + columnIndexToLabel(column.index);\n\n  return columnLabel + rowLabel;\n}\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.rowLabelToIndex = exports.rowIndexToLabel = exports.columnLabelToIndex = exports.columnIndexToLabel = exports.toLabel = exports.extractLabel = exports.error = exports.Parser = exports.ERROR_VALUE = exports.ERROR_REF = exports.ERROR_NUM = exports.ERROR_NULL = exports.ERROR_NOT_AVAILABLE = exports.ERROR_NAME = exports.ERROR_DIV_ZERO = exports.ERROR = exports.SUPPORTED_FORMULAS = undefined;\n\nvar _parser = __webpack_require__(16);\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _supportedFormulas = __webpack_require__(13);\n\nvar _supportedFormulas2 = _interopRequireDefault(_supportedFormulas);\n\nvar _error = __webpack_require__(2);\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _cell = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports.SUPPORTED_FORMULAS = _supportedFormulas2['default'];\nexports.ERROR = _error.ERROR;\nexports.ERROR_DIV_ZERO = _error.ERROR_DIV_ZERO;\nexports.ERROR_NAME = _error.ERROR_NAME;\nexports.ERROR_NOT_AVAILABLE = _error.ERROR_NOT_AVAILABLE;\nexports.ERROR_NULL = _error.ERROR_NULL;\nexports.ERROR_NUM = _error.ERROR_NUM;\nexports.ERROR_REF = _error.ERROR_REF;\nexports.ERROR_VALUE = _error.ERROR_VALUE;\nexports.Parser = _parser2['default'];\nexports.error = _error2['default'];\nexports.extractLabel = _cell.extractLabel;\nexports.toLabel = _cell.toLabel;\nexports.columnIndexToLabel = _cell.columnIndexToLabel;\nexports.columnLabelToIndex = _cell.columnLabelToIndex;\nexports.rowIndexToLabel = _cell.rowIndexToLabel;\nexports.rowLabelToIndex = _cell.rowLabelToIndex;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _tinyEmitter = __webpack_require__(17);\n\nvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\nvar _evaluateByOperator = __webpack_require__(18);\n\nvar _evaluateByOperator2 = _interopRequireDefault(_evaluateByOperator);\n\nvar _grammarParser = __webpack_require__(39);\n\nvar _string = __webpack_require__(40);\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar _error2 = _interopRequireDefault(_error);\n\nvar _cell = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @class Parser\n */\nvar Parser = function (_Emitter) {\n  _inherits(Parser, _Emitter);\n\n  function Parser() {\n    _classCallCheck(this, Parser);\n\n    var _this = _possibleConstructorReturn(this, _Emitter.call(this));\n\n    _this.parser = new _grammarParser.Parser();\n    _this.parser.yy = {\n      toNumber: _number.toNumber,\n      trimEdges: _string.trimEdges,\n      invertNumber: _number.invertNumber,\n      throwError: function throwError(errorName) {\n        return _this._throwError(errorName);\n      },\n      callVariable: function callVariable(variable) {\n        return _this._callVariable(variable);\n      },\n      evaluateByOperator: _evaluateByOperator2['default'],\n      callFunction: function callFunction(name, params) {\n        return _this._callFunction(name, params);\n      },\n      cellValue: function cellValue(value) {\n        return _this._callCellValue(value);\n      },\n      rangeValue: function rangeValue(start, end) {\n        return _this._callRangeValue(start, end);\n      }\n    };\n    _this.variables = Object.create(null);\n    _this.functions = Object.create(null);\n\n    _this.setVariable('TRUE', true).setVariable('FALSE', false).setVariable('NULL', null);\n    return _this;\n  }\n\n  /**\n   * Parse formula expression.\n   *\n   * @param {String} expression to parse.\n   * @return {*} Returns an object with tow properties `error` and `result`.\n   */\n\n\n  Parser.prototype.parse = function parse(expression) {\n    var result = null;\n    var error = null;\n\n    try {\n      if (expression === '') {\n        result = '';\n      } else {\n        result = this.parser.parse(expression);\n      }\n    } catch (ex) {\n      var message = (0, _error2['default'])(ex.message);\n\n      if (message) {\n        error = message;\n      } else {\n        error = (0, _error2['default'])(_error.ERROR);\n      }\n    }\n\n    if (result instanceof Error) {\n      error = (0, _error2['default'])(result.message) || (0, _error2['default'])(_error.ERROR);\n      result = null;\n    }\n\n    return {\n      error: error,\n      result: result\n    };\n  };\n\n  /**\n   * Set predefined variable name which can be visible while parsing formula expression.\n   *\n   * @param {String} name Variable name.\n   * @param {*} value Variable value.\n   * @returns {Parser}\n   */\n\n\n  Parser.prototype.setVariable = function setVariable(name, value) {\n    this.variables[name] = value;\n\n    return this;\n  };\n\n  /**\n   * Get variable name.\n   *\n   * @param {String} name Variable name.\n   * @returns {*}\n   */\n\n\n  Parser.prototype.getVariable = function getVariable(name) {\n    return this.variables[name];\n  };\n\n  /**\n   * Retrieve variable value by its name.\n   *\n   * @param name Variable name.\n   * @returns {*}\n   * @private\n   */\n\n\n  Parser.prototype._callVariable = function _callVariable(name) {\n    var value = this.getVariable(name);\n\n    this.emit('callVariable', name, function (newValue) {\n      if (newValue !== void 0) {\n        value = newValue;\n      }\n    });\n\n    if (value === void 0) {\n      throw Error(_error.ERROR_NAME);\n    }\n\n    return value;\n  };\n\n  /**\n   * Set custom function which can be visible while parsing formula expression.\n   *\n   * @param {String} name Custom function name.\n   * @param {Function} fn Custom function.\n   * @returns {Parser}\n   */\n\n\n  Parser.prototype.setFunction = function setFunction(name, fn) {\n    this.functions[name] = fn;\n\n    return this;\n  };\n\n  /**\n   * Get custom function.\n   *\n   * @param {String} name Custom function name.\n   * @returns {*}\n   */\n\n\n  Parser.prototype.getFunction = function getFunction(name) {\n    return this.functions[name];\n  };\n\n  /**\n   * Call function with provided params.\n   *\n   * @param name Function name.\n   * @param params Function params.\n   * @returns {*}\n   * @private\n   */\n\n\n  Parser.prototype._callFunction = function _callFunction(name) {\n    var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n    var fn = this.getFunction(name);\n    var value = void 0;\n\n    if (fn) {\n      value = fn(params);\n    }\n\n    this.emit('callFunction', name, params, function (newValue) {\n      if (newValue !== void 0) {\n        value = newValue;\n      }\n    });\n\n    return value === void 0 ? (0, _evaluateByOperator2['default'])(name, params) : value;\n  };\n\n  /**\n   * Retrieve value by its label (`B3`, `B$3`, `B$3`, `$B$3`).\n   *\n   * @param {String} label Coordinates.\n   * @returns {*}\n   * @private\n   */\n\n\n  Parser.prototype._callCellValue = function _callCellValue(label) {\n    label = label.toUpperCase();\n\n    var _extractLabel = (0, _cell.extractLabel)(label),\n        row = _extractLabel[0],\n        column = _extractLabel[1];\n\n    var value = void 0;\n\n    this.emit('callCellValue', { label: label, row: row, column: column }, function (_value) {\n      value = _value;\n    });\n\n    return value;\n  };\n\n  /**\n   * Retrieve value by its label (`B3:A1`, `B$3:A1`, `B$3:$A1`, `$B$3:A$1`).\n   *\n   * @param {String} startLabel Coordinates of the first cell.\n   * @param {String} endLabel Coordinates of the last cell.\n   * @returns {Array} Returns an array of mixed values.\n   * @private\n   */\n\n\n  Parser.prototype._callRangeValue = function _callRangeValue(startLabel, endLabel) {\n    startLabel = startLabel.toUpperCase();\n    endLabel = endLabel.toUpperCase();\n\n    var _extractLabel2 = (0, _cell.extractLabel)(startLabel),\n        startRow = _extractLabel2[0],\n        startColumn = _extractLabel2[1];\n\n    var _extractLabel3 = (0, _cell.extractLabel)(endLabel),\n        endRow = _extractLabel3[0],\n        endColumn = _extractLabel3[1];\n\n    var startCell = {};\n    var endCell = {};\n\n    if (startRow.index <= endRow.index) {\n      startCell.row = startRow;\n      endCell.row = endRow;\n    } else {\n      startCell.row = endRow;\n      endCell.row = startRow;\n    }\n\n    if (startColumn.index <= endColumn.index) {\n      startCell.column = startColumn;\n      endCell.column = endColumn;\n    } else {\n      startCell.column = endColumn;\n      endCell.column = startColumn;\n    }\n\n    startCell.label = (0, _cell.toLabel)(startCell.row, startCell.column);\n    endCell.label = (0, _cell.toLabel)(endCell.row, endCell.column);\n\n    var value = [];\n\n    this.emit('callRangeValue', startCell, endCell, function () {\n      var _value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      value = _value;\n    });\n\n    return value;\n  };\n\n  /**\n   * Try to throw error by its name.\n   *\n   * @param {String} errorName Error name.\n   * @returns {String}\n   * @private\n   */\n\n\n  Parser.prototype._throwError = function _throwError(errorName) {\n    if ((0, _error.isValidStrict)(errorName)) {\n      throw Error(errorName);\n    }\n\n    throw Error(_error.ERROR);\n  };\n\n  return Parser;\n}(_tinyEmitter2['default']);\n\nexports['default'] = Parser;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nfunction E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = evaluateByOperator;\nexports.registerOperation = registerOperation;\n\nvar _add = __webpack_require__(19);\n\nvar _add2 = _interopRequireDefault(_add);\n\nvar _ampersand = __webpack_require__(20);\n\nvar _ampersand2 = _interopRequireDefault(_ampersand);\n\nvar _divide = __webpack_require__(21);\n\nvar _divide2 = _interopRequireDefault(_divide);\n\nvar _equal = __webpack_require__(22);\n\nvar _equal2 = _interopRequireDefault(_equal);\n\nvar _formulaFunction = __webpack_require__(23);\n\nvar _formulaFunction2 = _interopRequireDefault(_formulaFunction);\n\nvar _greaterThan = __webpack_require__(31);\n\nvar _greaterThan2 = _interopRequireDefault(_greaterThan);\n\nvar _greaterThanOrEqual = __webpack_require__(32);\n\nvar _greaterThanOrEqual2 = _interopRequireDefault(_greaterThanOrEqual);\n\nvar _lessThan = __webpack_require__(33);\n\nvar _lessThan2 = _interopRequireDefault(_lessThan);\n\nvar _lessThanOrEqual = __webpack_require__(34);\n\nvar _lessThanOrEqual2 = _interopRequireDefault(_lessThanOrEqual);\n\nvar _minus = __webpack_require__(35);\n\nvar _minus2 = _interopRequireDefault(_minus);\n\nvar _multiply = __webpack_require__(36);\n\nvar _multiply2 = _interopRequireDefault(_multiply);\n\nvar _notEqual = __webpack_require__(37);\n\nvar _notEqual2 = _interopRequireDefault(_notEqual);\n\nvar _power = __webpack_require__(38);\n\nvar _power2 = _interopRequireDefault(_power);\n\nvar _error = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/* eslint-disable import/no-named-as-default-member */\nvar availableOperators = Object.create(null);\n\n/**\n * Evaluate values by operator id.git\n *\n * @param {String} operator Operator id.\n * @param {Array} [params=[]] Arguments to evaluate.\n * @returns {*}\n */\nfunction evaluateByOperator(operator) {\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  operator = operator.toUpperCase();\n\n  if (!availableOperators[operator]) {\n    throw Error(_error.ERROR_NAME);\n  }\n\n  return availableOperators[operator].apply(availableOperators, params);\n}\n\n/**\n * Register operator.\n *\n * @param {String|Array} symbol Symbol to register.\n * @param {Function} func Logic to register for this symbol.\n */\nfunction registerOperation(symbol, func) {\n  if (!Array.isArray(symbol)) {\n    symbol = [symbol.toUpperCase()];\n  }\n  symbol.forEach(function (s) {\n    if (func.isFactory) {\n      availableOperators[s] = func(s);\n    } else {\n      availableOperators[s] = func;\n    }\n  });\n}\n\nregisterOperation(_add2['default'].SYMBOL, _add2['default']);\nregisterOperation(_ampersand2['default'].SYMBOL, _ampersand2['default']);\nregisterOperation(_divide2['default'].SYMBOL, _divide2['default']);\nregisterOperation(_equal2['default'].SYMBOL, _equal2['default']);\nregisterOperation(_power2['default'].SYMBOL, _power2['default']);\nregisterOperation(_formulaFunction2['default'].SYMBOL, _formulaFunction2['default']);\nregisterOperation(_greaterThan2['default'].SYMBOL, _greaterThan2['default']);\nregisterOperation(_greaterThanOrEqual2['default'].SYMBOL, _greaterThanOrEqual2['default']);\nregisterOperation(_lessThan2['default'].SYMBOL, _lessThan2['default']);\nregisterOperation(_lessThanOrEqual2['default'].SYMBOL, _lessThanOrEqual2['default']);\nregisterOperation(_multiply2['default'].SYMBOL, _multiply2['default']);\nregisterOperation(_notEqual2['default'].SYMBOL, _notEqual2['default']);\nregisterOperation(_minus2['default'].SYMBOL, _minus2['default']);\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar SYMBOL = exports.SYMBOL = '+';\n\nfunction func(first) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  var result = rest.reduce(function (acc, value) {\n    return acc + (0, _number.toNumber)(value);\n  }, (0, _number.toNumber)(first));\n\n  if (isNaN(result)) {\n    throw Error(_error.ERROR_VALUE);\n  }\n\n  return result;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '&';\n\nfunction func() {\n  for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) {\n    params[_key] = arguments[_key];\n  }\n\n  return params.reduce(function (acc, value) {\n    return acc + value.toString();\n  }, '');\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar SYMBOL = exports.SYMBOL = '/';\n\nfunction func(first) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  var result = rest.reduce(function (acc, value) {\n    return acc / (0, _number.toNumber)(value);\n  }, (0, _number.toNumber)(first));\n\n  if (result === Infinity) {\n    throw Error(_error.ERROR_DIV_ZERO);\n  }\n  if (isNaN(result)) {\n    throw Error(_error.ERROR_VALUE);\n  }\n\n  return result;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '=';\n\nfunction func(exp1, exp2) {\n  return exp1 === exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _formulajs = __webpack_require__(24);\n\nvar formulajs = _interopRequireWildcard(_formulajs);\n\nvar _supportedFormulas = __webpack_require__(13);\n\nvar _supportedFormulas2 = _interopRequireDefault(_supportedFormulas);\n\nvar _error = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar SYMBOL = exports.SYMBOL = _supportedFormulas2['default'];\n\nfunction func(symbol) {\n  return function __formulaFunction() {\n    symbol = symbol.toUpperCase();\n\n    var symbolParts = symbol.split('.');\n    var foundFormula = false;\n    var result = void 0;\n\n    if (symbolParts.length === 1) {\n      if (formulajs[symbolParts[0]]) {\n        foundFormula = true;\n        result = formulajs[symbolParts[0]].apply(formulajs, arguments);\n      }\n    } else {\n      var length = symbolParts.length;\n      var index = 0;\n      var nestedFormula = formulajs;\n\n      while (index < length) {\n        nestedFormula = nestedFormula[symbolParts[index]];\n        index++;\n\n        if (!nestedFormula) {\n          nestedFormula = null;\n          break;\n        }\n      }\n      if (nestedFormula) {\n        foundFormula = true;\n        result = nestedFormula.apply(undefined, arguments);\n      }\n    }\n\n    if (!foundFormula) {\n      throw Error(_error.ERROR_NAME);\n    }\n\n    return result;\n  };\n}\n\nfunc.isFactory = true;\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar categories = [\n  __webpack_require__(25),\n  __webpack_require__(27),\n  __webpack_require__(12),\n  __webpack_require__(28),\n  __webpack_require__(4),\n  __webpack_require__(6),\n  __webpack_require__(9),\n  __webpack_require__(29),\n  __webpack_require__(8),\n  __webpack_require__(30),\n  __webpack_require__(5),\n  __webpack_require__(11)\n];\n\nfor (var c in categories) {\n  var category = categories[c];\n  for (var f in category) {\n    exports[f] = exports[f] || category[f];\n  }\n}\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar mathTrig = __webpack_require__(4);\nvar statistical = __webpack_require__(5);\nvar engineering = __webpack_require__(12);\nvar dateTime = __webpack_require__(9);\n\nfunction set(fn, root) {\n  if (root) {\n    for (var i in root) {\n      fn[i] = root[i];\n    }\n  }\n\n  return fn;\n}\n\nexports.BETADIST = statistical.BETA.DIST;\nexports.BETAINV = statistical.BETA.INV;\nexports.BINOMDIST = statistical.BINOM.DIST;\nexports.CEILING = exports.ISOCEILING = set(mathTrig.CEILING.MATH, mathTrig.CEILING);\nexports.CEILINGMATH = mathTrig.CEILING.MATH;\nexports.CEILINGPRECISE = mathTrig.CEILING.PRECISE;\nexports.CHIDIST = statistical.CHISQ.DIST;\nexports.CHIDISTRT = statistical.CHISQ.DIST.RT;\nexports.CHIINV = statistical.CHISQ.INV;\nexports.CHIINVRT = statistical.CHISQ.INV.RT;\nexports.CHITEST = statistical.CHISQ.TEST;\nexports.CONFIDENCE = set(statistical.CONFIDENCE.NORM, statistical.CONFIDENCE);\nexports.COVAR = statistical.COVARIANCE.P;\nexports.COVARIANCEP = statistical.COVARIANCE.P;\nexports.COVARIANCES = statistical.COVARIANCE.S;\nexports.CRITBINOM = statistical.BINOM.INV;\nexports.EXPONDIST = statistical.EXPON.DIST;\nexports.ERFCPRECISE = engineering.ERFC.PRECISE;\nexports.ERFPRECISE = engineering.ERF.PRECISE;\nexports.FDIST = statistical.F.DIST;\nexports.FDISTRT = statistical.F.DIST.RT;\nexports.FINVRT = statistical.F.INV.RT;\nexports.FINV = statistical.F.INV;\nexports.FLOOR = set(mathTrig.FLOOR.MATH, mathTrig.FLOOR);\nexports.FLOORMATH = mathTrig.FLOOR.MATH;\nexports.FLOORPRECISE = mathTrig.FLOOR.PRECISE;\nexports.FTEST = statistical.F.TEST;\nexports.GAMMADIST = statistical.GAMMA.DIST;\nexports.GAMMAINV = statistical.GAMMA.INV;\nexports.GAMMALNPRECISE = statistical.GAMMALN.PRECISE;\nexports.HYPGEOMDIST = statistical.HYPGEOM.DIST;\nexports.LOGINV = statistical.LOGNORM.INV;\nexports.LOGNORMINV = statistical.LOGNORM.INV;\nexports.LOGNORMDIST = statistical.LOGNORM.DIST;\nexports.MODE = set(statistical.MODE.SNGL, statistical.MODE);\nexports.MODEMULT = statistical.MODE.MULT;\nexports.MODESNGL = statistical.MODE.SNGL;\nexports.NEGBINOMDIST = statistical.NEGBINOM.DIST;\nexports.NETWORKDAYSINTL = dateTime.NETWORKDAYS.INTL;\nexports.NORMDIST = statistical.NORM.DIST;\nexports.NORMINV = statistical.NORM.INV;\nexports.NORMSDIST = statistical.NORM.S.DIST;\nexports.NORMSINV = statistical.NORM.S.INV;\nexports.PERCENTILE = set(statistical.PERCENTILE.EXC, statistical.PERCENTILE);\nexports.PERCENTILEEXC = statistical.PERCENTILE.EXC;\nexports.PERCENTILEINC = statistical.PERCENTILE.INC;\nexports.PERCENTRANK = set(statistical.PERCENTRANK.INC, statistical.PERCENTRANK);\nexports.PERCENTRANKEXC = statistical.PERCENTRANK.EXC;\nexports.PERCENTRANKINC = statistical.PERCENTRANK.INC;\nexports.POISSON = set(statistical.POISSON.DIST, statistical.POISSON);\nexports.POISSONDIST = statistical.POISSON.DIST;\nexports.QUARTILE = set(statistical.QUARTILE.INC, statistical.QUARTILE);\nexports.QUARTILEEXC = statistical.QUARTILE.EXC;\nexports.QUARTILEINC = statistical.QUARTILE.INC;\nexports.RANK = set(statistical.RANK.EQ, statistical.RANK);\nexports.RANKAVG = statistical.RANK.AVG;\nexports.RANKEQ = statistical.RANK.EQ;\nexports.SKEWP = statistical.SKEW.P;\nexports.STDEV = set(statistical.STDEV.S, statistical.STDEV);\nexports.STDEVP = statistical.STDEV.P;\nexports.STDEVS = statistical.STDEV.S;\nexports.TDIST = statistical.T.DIST;\nexports.TDISTRT = statistical.T.DIST.RT;\nexports.TINV = statistical.T.INV;\nexports.TTEST = statistical.T.TEST;\nexports.VAR = set(statistical.VAR.S, statistical.VAR);\nexports.VARP = statistical.VAR.P;\nexports.VARS = statistical.VAR.S;\nexports.WEIBULL = set(statistical.WEIBULL.DIST, statistical.WEIBULL);\nexports.WEIBULLDIST = statistical.WEIBULL.DIST;\nexports.WORKDAYINTL = dateTime.WORKDAY.INTL;\nexports.ZTEST = statistical.Z.TEST;\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar M = Math;\nfunction _horner(arr, v) { return arr.reduce(function(z,w){return v * z + w;},0); };\nfunction _bessel_iter(x, n, f0, f1, sign) {\n  if(!sign) sign = -1;\n  var tdx = 2 / x, f2;\n  if(n === 0) return f0;\n  if(n === 1) return f1;\n  for(var o = 1; o != n; ++o) {\n    f2 = f1 * o * tdx + sign * f0;\n    f0 = f1; f1 = f2;\n  }\n  return f1;\n}\nfunction _bessel_wrap(bessel0, bessel1, name, nonzero, sign) {\n  return function bessel(x,n) {\n    if(n === 0) return bessel0(x);\n    if(n === 1) return bessel1(x);\n    if(n < 0) throw name + ': Order (' + n + ') must be nonnegative';\n    if(nonzero == 1 && x === 0) throw name + ': Undefined when x == 0';\n    if(nonzero == 2 && x <= 0) throw name + ': Undefined when x <= 0';\n    var b0 = bessel0(x), b1 = bessel1(x);\n    return _bessel_iter(x, n, b0, b1, sign);\n  };\n}\nvar besselj = (function() {\n  var b0_a1a = [57568490574.0,-13362590354.0,651619640.7,-11214424.18,77392.33017,-184.9052456].reverse();\n  var b0_a2a = [57568490411.0,1029532985.0,9494680.718,59272.64853,267.8532712,1.0].reverse();\n  var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n  var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934935152e-7].reverse();\n  var W = 0.636619772; // 2 / Math.PI\n\n  function bessel0(x) {\n    var a, a1, a2, y = x * x, xx = M.abs(x) - 0.785398164;\n    if(M.abs(x) < 8) {\n      a1 = _horner(b0_a1a, y);\n      a2 = _horner(b0_a2a, y);\n      a = a1/a2;\n    }\n    else {\n      y = 64 / y;\n      a1 = _horner(b0_a1b, y);\n      a2 = _horner(b0_a2b, y);\n      a = M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n    }\n    return a;\n  }\n  var b1_a1a = [72362614232.0,-7895059235.0,242396853.1,-2972611.439, 15704.48260, -30.16036606].reverse();\n  var b1_a2a = [144725228442.0, 2300535178.0, 18583304.74, 99447.43394, 376.9991397, 1.0].reverse();\n  var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n  var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n  function bessel1(x) {\n    var a, a1, a2, y = x*x, xx = M.abs(x) - 2.356194491;\n    if(Math.abs(x)< 8) {\n      a1 = x*_horner(b1_a1a, y);\n      a2 = _horner(b1_a2a, y);\n      a = a1 / a2;\n    } else {\n      y = 64 / y;\n      a1=_horner(b1_a1b, y);\n      a2=_horner(b1_a2b, y);\n      a=M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n      if(x < 0) a = -a;\n    }\n    return a;\n  }\n  return function besselj(x, n) {\n    n = Math.round(n);\n    if(n === 0) return bessel0(M.abs(x));\n    if(n === 1) return bessel1(M.abs(x));\n    if(n < 0) throw 'BESSELJ: Order (' + n + ') must be nonnegative';\n    if(M.abs(x) === 0) return 0;\n\n    var ret, j, tox = 2 / M.abs(x), m, jsum, sum, bjp, bj, bjm;\n    if(M.abs(x) > n) {\n      ret = _bessel_iter(x, n, bessel0(M.abs(x)), bessel1(M.abs(x)),-1);\n    } else {\n      m=2*M.floor((n+M.floor(M.sqrt(40*n)))/2);\n      jsum=0;\n      bjp=ret=sum=0.0;\n      bj=1.0;\n      for (j=m;j>0;j--) {\n        bjm=j*tox*bj-bjp;\n        bjp=bj;\n        bj=bjm;\n        if (M.abs(bj) > 1E10) {\n          bj *= 1E-10;\n          bjp *= 1E-10;\n          ret *= 1E-10;\n          sum *= 1E-10;\n        }\n        if (jsum) sum += bj;\n        jsum=!jsum;\n        if (j == n) ret=bjp;\n      }\n      sum=2.0*sum-bj;\n      ret /= sum;\n    }\n    return x < 0 && (n%2) ? -ret : ret;\n  };\n})();\nvar bessely = (function() {\n  var b0_a1a = [-2957821389.0, 7062834065.0, -512359803.6, 10879881.29, -86327.92757, 228.4622733].reverse();\n  var b0_a2a = [40076544269.0, 745249964.8, 7189466.438, 47447.26470, 226.1030244, 1.0].reverse();\n  var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n  var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934945152e-7].reverse();\n\n  var W = 0.636619772;\n  function bessel0(x) {\n    var a, a1, a2, y = x * x, xx = x - 0.785398164;\n    if(x < 8) {\n      a1 = _horner(b0_a1a, y);\n      a2 = _horner(b0_a2a, y);\n      a = a1/a2 + W * besselj(x,0) * M.log(x);\n    } else {\n      y = 64 / y;\n      a1 = _horner(b0_a1b, y);\n      a2 = _horner(b0_a2b, y);\n      a = M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n    }\n    return a;\n  }\n\n  var b1_a1a = [-0.4900604943e13, 0.1275274390e13, -0.5153438139e11, 0.7349264551e9, -0.4237922726e7, 0.8511937935e4].reverse();\n  var b1_a2a = [0.2499580570e14, 0.4244419664e12, 0.3733650367e10, 0.2245904002e8, 0.1020426050e6, 0.3549632885e3, 1].reverse();\n  var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n  var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n  function bessel1(x) {\n    var a, a1, a2, y = x*x, xx = x - 2.356194491;\n    if(x < 8) {\n      a1 = x*_horner(b1_a1a, y);\n      a2 = _horner(b1_a2a, y);\n      a = a1/a2 + W * (besselj(x,1) * M.log(x) - 1 / x);\n    } else {\n      y = 64 / y;\n      a1=_horner(b1_a1b, y);\n      a2=_horner(b1_a2b, y);\n      a=M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n    }\n    return a;\n  }\n\n  return _bessel_wrap(bessel0, bessel1, 'BESSELY', 1, -1);\n})();\nvar besseli = (function() {\n  var b0_a = [1.0, 3.5156229, 3.0899424, 1.2067492, 0.2659732, 0.360768e-1, 0.45813e-2].reverse();\n  var b0_b = [0.39894228, 0.1328592e-1, 0.225319e-2, -0.157565e-2, 0.916281e-2, -0.2057706e-1, 0.2635537e-1, -0.1647633e-1, 0.392377e-2].reverse();\n  function bessel0(x) {\n    if(x <= 3.75) return _horner(b0_a, x*x/(3.75*3.75));\n    return M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b0_b, 3.75/M.abs(x));\n  }\n\n  var b1_a = [0.5, 0.87890594, 0.51498869, 0.15084934, 0.2658733e-1, 0.301532e-2, 0.32411e-3].reverse();\n  var b1_b = [0.39894228, -0.3988024e-1, -0.362018e-2, 0.163801e-2, -0.1031555e-1, 0.2282967e-1, -0.2895312e-1, 0.1787654e-1, -0.420059e-2].reverse();\n  function bessel1(x) {\n    if(x < 3.75) return x * _horner(b1_a, x*x/(3.75*3.75));\n    return (x < 0 ? -1 : 1) * M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b1_b, 3.75/M.abs(x));\n  }\n\n  return function besseli(x, n) {\n    n = Math.round(n);\n    if(n === 0) return bessel0(x);\n    if(n == 1) return bessel1(x);\n    if(n < 0) throw 'BESSELI Order (' + n + ') must be nonnegative';\n    if(M.abs(x) === 0) return 0;\n\n    var ret, j, tox = 2 / M.abs(x), m, bip, bi, bim;\n    m=2*M.round((n+M.round(M.sqrt(40*n)))/2);\n    bip=ret=0.0;\n    bi=1.0;\n    for (j=m;j>0;j--) {\n      bim=j*tox*bi + bip;\n      bip=bi; bi=bim;\n      if (M.abs(bi) > 1E10) {\n        bi *= 1E-10;\n        bip *= 1E-10;\n        ret *= 1E-10;\n      }\n      if(j == n) ret = bip;\n    }\n    ret *= besseli(x, 0) / bi;\n    return x < 0 && (n%2) ? -ret : ret;\n  };\n\n})();\n\nvar besselk = (function() {\n  var b0_a = [-0.57721566, 0.42278420, 0.23069756, 0.3488590e-1, 0.262698e-2, 0.10750e-3, 0.74e-5].reverse();\n  var b0_b = [1.25331414, -0.7832358e-1, 0.2189568e-1, -0.1062446e-1, 0.587872e-2, -0.251540e-2, 0.53208e-3].reverse();\n  function bessel0(x) {\n    if(x <= 2) return -M.log(x/2)*besseli(x,0) + _horner(b0_a, x*x/4);\n    return M.exp(-x)/M.sqrt(x)*_horner(b0_b, 2/x);\n  }\n\n  var b1_a = [1.0, 0.15443144, -0.67278579, -0.18156897, -0.1919402e-1, -0.110404e-2, -0.4686e-4].reverse();\n  var b1_b = [1.25331414, 0.23498619, -0.3655620e-1, 0.1504268e-1, -0.780353e-2, 0.325614e-2, -0.68245e-3].reverse();\n  function bessel1(x) {\n    if(x <= 2) return M.log(x/2)*besseli(x,1) + (1/x)*_horner(b1_a, x*x/4);\n    return M.exp(-x)/M.sqrt(x)*_horner(b1_b, 2/x);\n  }\n\n  return _bessel_wrap(bessel0, bessel1, 'BESSELK', 2, 1);\n})();\nif(true) {\n  exports.besselj = besselj;\n  exports.bessely = bessely;\n  exports.besseli = besseli;\n  exports.besselk = besselk;\n}\n\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar stats = __webpack_require__(5);\nvar maths = __webpack_require__(4);\nvar utils = __webpack_require__(1);\nvar evalExpression = __webpack_require__(7);\n\nfunction compact(array) {\n  var result = [];\n\n  utils.arrayEach(array, function(value) {\n    if (value) {\n      result.push(value);\n    }\n  });\n\n  return result;\n}\n\nexports.FINDFIELD = function(database, title) {\n  var index = null;\n\n  utils.arrayEach(database, function(value, i) {\n    if (value[0] === title) {\n      index = i;\n      return false;\n    }\n  });\n\n  // Return error if the input field title is incorrect\n  if (index == null) {\n    return error.value;\n  }\n\n  return index;\n};\n\nfunction findResultIndex(database, criterias) {\n  var matches = {};\n  for (var i = 1; i < database[0].length; ++i) {\n    matches[i] = true;\n  }\n  var maxCriteriaLength = criterias[0].length;\n  for (i = 1; i < criterias.length; ++i) {\n    if (criterias[i].length > maxCriteriaLength) {\n      maxCriteriaLength = criterias[i].length;\n    }\n  }\n\n  for (var k = 1; k < database.length; ++k) {\n    for (var l = 1; l < database[k].length; ++l) {\n      var currentCriteriaResult = false;\n      var hasMatchingCriteria   = false;\n      for (var j = 0; j < criterias.length; ++j) {\n        var criteria = criterias[j];\n        if (criteria.length < maxCriteriaLength) {\n          continue;\n        }\n\n        var criteriaField = criteria[0];\n        if (database[k][0] !== criteriaField) {\n          continue;\n        }\n        hasMatchingCriteria = true;\n        for (var p = 1; p < criteria.length; ++p) {\n          if (!currentCriteriaResult) {\n            var isWildcard = criteria[p] === void 0 || criteria[p] === '*';\n\n            if (isWildcard) {\n              currentCriteriaResult = true;\n            } else {\n              var tokenizedCriteria = evalExpression.parse(criteria[p] + '');\n              var tokens = [evalExpression.createToken(database[k][l], evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n              currentCriteriaResult = evalExpression.compute(tokens);\n            }\n          }\n        }\n      }\n      if (hasMatchingCriteria) {\n        matches[l] = matches[l] && currentCriteriaResult;\n      }\n    }\n  }\n\n  var result = [];\n  for (var n = 0; n < database[0].length; ++n) {\n    if (matches[n]) {\n      result.push(n - 1);\n    }\n  }\n\n  return result;\n}\n\n// Database functions\nexports.DAVERAGE = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n  var sum = 0;\n\n  utils.arrayEach(resultIndexes, function(value) {\n    sum += targetFields[value];\n  });\n\n  return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;\n};\n\nexports.DCOUNT = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n\n  return stats.COUNT(targetValues);\n};\n\nexports.DCOUNTA = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n\n  return stats.COUNTA(targetValues);\n};\n\nexports.DGET = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  // Return error if no record meets the criteria\n  if (resultIndexes.length === 0) {\n    return error.value;\n  }\n  // Returns the #NUM! error value because more than one record meets the\n  // criteria\n  if (resultIndexes.length > 1) {\n    return error.num;\n  }\n\n  return targetFields[resultIndexes[0]];\n};\n\nexports.DMAX = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var maxValue = targetFields[resultIndexes[0]];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    if (maxValue < targetFields[value]) {\n      maxValue = targetFields[value];\n    }\n  });\n\n  return maxValue;\n};\n\nexports.DMIN = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var minValue = targetFields[resultIndexes[0]];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    if (minValue > targetFields[value]) {\n      minValue = targetFields[value];\n    }\n  });\n\n  return minValue;\n};\n\nexports.DPRODUCT = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n  targetValues = compact(targetValues);\n\n  var result = 1;\n\n  utils.arrayEach(targetValues, function(value) {\n    result *= value;\n  });\n\n  return result;\n};\n\nexports.DSTDEV = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n  targetValues = compact(targetValues);\n\n  return stats.STDEV.S(targetValues);\n};\n\nexports.DSTDEVP = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n  targetValues = compact(targetValues);\n\n  return stats.STDEV.P(targetValues);\n};\n\nexports.DSUM = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n\n  return maths.SUM(targetValues);\n};\n\nexports.DVAR = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n\n  return stats.VAR.S(targetValues);\n};\n\nexports.DVARP = function(database, field, criteria) {\n  // Return error if field is not a number and not a string\n  if (isNaN(field) && (typeof field !== \"string\")) {\n    return error.value;\n  }\n  var resultIndexes = findResultIndex(database, criteria);\n  var targetFields = [];\n\n  if (typeof field === \"string\") {\n    var index = exports.FINDFIELD(database, field);\n    targetFields = utils.rest(database[index]);\n  } else {\n    targetFields = utils.rest(database[field]);\n  }\n  var targetValues = [];\n\n  utils.arrayEach(resultIndexes, function(value) {\n    targetValues.push(targetFields[value]);\n  });\n\n  return stats.VAR.P(targetValues);\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar utils = __webpack_require__(1);\nvar information = __webpack_require__(8);\n\nexports.AND = function() {\n  var args = utils.flatten(arguments);\n  var result = true;\n  for (var i = 0; i < args.length; i++) {\n    if (!args[i]) {\n      result = false;\n    }\n  }\n  return result;\n};\n\nexports.CHOOSE = function() {\n  if (arguments.length < 2) {\n    return error.na;\n  }\n\n  var index = arguments[0];\n  if (index < 1 || index > 254) {\n    return error.value;\n  }\n\n  if (arguments.length < index + 1) {\n    return error.value;\n  }\n\n  return arguments[index];\n};\n\nexports.FALSE = function() {\n  return false;\n};\n\nexports.IF = function(test, then_value, otherwise_value) {\n  return test ? then_value : otherwise_value;\n};\n\nexports.IFERROR = function(value, valueIfError) {\n  if (information.ISERROR(value)) {\n    return valueIfError;\n  }\n  return value;\n};\n\nexports.IFNA = function(value, value_if_na) {\n  return value === error.na ? value_if_na : value;\n};\n\nexports.NOT = function(logical) {\n  return !logical;\n};\n\nexports.OR = function() {\n  var args = utils.flatten(arguments);\n  var result = false;\n  for (var i = 0; i < args.length; i++) {\n    if (args[i]) {\n      result = true;\n    }\n  }\n  return result;\n};\n\nexports.TRUE = function() {\n  return true;\n};\n\nexports.XOR = function() {\n  var args = utils.flatten(arguments);\n  var result = 0;\n  for (var i = 0; i < args.length; i++) {\n    if (args[i]) {\n      result++;\n    }\n  }\n  return (Math.floor(Math.abs(result)) & 1) ? true : false;\n};\n\nexports.SWITCH = function () {\n  var result;\n\n  if (arguments.length > 0)  {\n    var targetValue = arguments[0];\n    var argc = arguments.length - 1;\n    var switchCount = Math.floor(argc / 2);\n    var switchSatisfied = false;\n    var hasDefaultClause = argc % 2 !== 0;\n    var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];\n\n    if (switchCount) {\n      for (var index = 0; index < switchCount; index++) {\n        if (targetValue === arguments[index * 2 + 1]) {\n          result = arguments[index * 2 + 2];\n          switchSatisfied = true;\n          break;\n        }\n      }\n    }\n\n    if (!switchSatisfied) {\n      result = hasDefaultClause ? defaultClause : error.na;\n    }\n  } else {\n    result = error.value;\n  }\n\n  return result;\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar dateTime = __webpack_require__(9);\nvar utils = __webpack_require__(1);\n\nfunction validDate(d) {\n  return d && d.getTime && !isNaN(d.getTime());\n}\n\nfunction ensureDate(d) {\n  return (d instanceof Date)?d:new Date(d);\n}\n\nexports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) {\n  // Return error if either date is invalid\n  issue      = ensureDate(issue);\n  first      = ensureDate(first);\n  settlement = ensureDate(settlement);\n  if (!validDate(issue) || !validDate(first) || !validDate(settlement)) {\n    return error.value;\n  }\n\n  // Return error if either rate or par are lower than or equal to zero\n  if (rate <= 0 || par <= 0) {\n    return error.num;\n  }\n\n  // Return error if frequency is neither 1, 2, or 4\n  if ([1, 2, 4].indexOf(frequency) === -1) {\n    return error.num;\n  }\n\n  // Return error if basis is neither 0, 1, 2, 3, or 4\n  if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {\n    return error.num;\n  }\n\n  // Return error if settlement is before or equal to issue\n  if (settlement <= issue) {\n    return error.num;\n  }\n\n  // Set default values\n  par   = par   || 0;\n  basis = basis || 0;\n\n  // Compute accrued interest\n  return par * rate * dateTime.YEARFRAC(issue, settlement, basis);\n};\n\n// TODO\nexports.ACCRINTM = function() {\n  throw new Error('ACCRINTM is not implemented');\n};\n\n// TODO\nexports.AMORDEGRC = function() {\n  throw new Error('AMORDEGRC is not implemented');\n};\n\n// TODO\nexports.AMORLINC = function() {\n  throw new Error('AMORLINC is not implemented');\n};\n\n// TODO\nexports.COUPDAYBS = function() {\n  throw new Error('COUPDAYBS is not implemented');\n};\n\n// TODO\nexports.COUPDAYS = function() {\n  throw new Error('COUPDAYS is not implemented');\n};\n\n// TODO\nexports.COUPDAYSNC = function() {\n  throw new Error('COUPDAYSNC is not implemented');\n};\n\n// TODO\nexports.COUPNCD = function() {\n  throw new Error('COUPNCD is not implemented');\n};\n\n// TODO\nexports.COUPNUM = function() {\n  throw new Error('COUPNUM is not implemented');\n};\n\n// TODO\nexports.COUPPCD = function() {\n  throw new Error('COUPPCD is not implemented');\n};\n\nexports.CUMIPMT = function(rate, periods, value, start, end, type) {\n  // Credits: algorithm inspired by Apache OpenOffice\n  // Credits: Hannes Stiebitzhofer for the translations of function and variable names\n  // Requires exports.FV() and exports.PMT() from exports.js [http://stoic.com/exports/]\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  value = utils.parseNumber(value);\n  if (utils.anyIsError(rate, periods, value)) {\n    return error.value;\n  }\n\n  // Return error if either rate, periods, or value are lower than or equal to zero\n  if (rate <= 0 || periods <= 0 || value <= 0) {\n    return error.num;\n  }\n\n  // Return error if start < 1, end < 1, or start > end\n  if (start < 1 || end < 1 || start > end) {\n    return error.num;\n  }\n\n  // Return error if type is neither 0 nor 1\n  if (type !== 0 && type !== 1) {\n    return error.num;\n  }\n\n  // Compute cumulative interest\n  var payment = exports.PMT(rate, periods, value, 0, type);\n  var interest = 0;\n\n  if (start === 1) {\n    if (type === 0) {\n      interest = -value;\n      start++;\n    }\n  }\n\n  for (var i = start; i <= end; i++) {\n    if (type === 1) {\n      interest += exports.FV(rate, i - 2, payment, value, 1) - payment;\n    } else {\n      interest += exports.FV(rate, i - 1, payment, value, 0);\n    }\n  }\n  interest *= rate;\n\n  // Return cumulative interest\n  return interest;\n};\n\nexports.CUMPRINC = function(rate, periods, value, start, end, type) {\n  // Credits: algorithm inspired by Apache OpenOffice\n  // Credits: Hannes Stiebitzhofer for the translations of function and variable names\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  value = utils.parseNumber(value);\n  if (utils.anyIsError(rate, periods, value)) {\n    return error.value;\n  }\n\n  // Return error if either rate, periods, or value are lower than or equal to zero\n  if (rate <= 0 || periods <= 0 || value <= 0) {\n    return error.num;\n  }\n\n  // Return error if start < 1, end < 1, or start > end\n  if (start < 1 || end < 1 || start > end) {\n    return error.num;\n  }\n\n  // Return error if type is neither 0 nor 1\n  if (type !== 0 && type !== 1) {\n    return error.num;\n  }\n\n  // Compute cumulative principal\n  var payment = exports.PMT(rate, periods, value, 0, type);\n  var principal = 0;\n  if (start === 1) {\n    if (type === 0) {\n      principal = payment + value * rate;\n    } else {\n      principal = payment;\n    }\n    start++;\n  }\n  for (var i = start; i <= end; i++) {\n    if (type > 0) {\n      principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate;\n    } else {\n      principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate;\n    }\n  }\n\n  // Return cumulative principal\n  return principal;\n};\n\nexports.DB = function(cost, salvage, life, period, month) {\n  // Initialize month\n  month = (month === undefined) ? 12 : month;\n\n  cost = utils.parseNumber(cost);\n  salvage = utils.parseNumber(salvage);\n  life = utils.parseNumber(life);\n  period = utils.parseNumber(period);\n  month = utils.parseNumber(month);\n  if (utils.anyIsError(cost, salvage, life, period, month)) {\n    return error.value;\n  }\n\n  // Return error if any of the parameters is negative\n  if (cost < 0 || salvage < 0 || life < 0 || period < 0) {\n    return error.num;\n  }\n\n  // Return error if month is not an integer between 1 and 12\n  if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {\n    return error.num;\n  }\n\n  // Return error if period is greater than life\n  if (period > life) {\n    return error.num;\n  }\n\n  // Return 0 (zero) if salvage is greater than or equal to cost\n  if (salvage >= cost) {\n    return 0;\n  }\n\n  // Rate is rounded to three decimals places\n  var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);\n\n  // Compute initial depreciation\n  var initial = cost * rate * month / 12;\n\n  // Compute total depreciation\n  var total = initial;\n  var current = 0;\n  var ceiling = (period === life) ? life - 1 : period;\n  for (var i = 2; i <= ceiling; i++) {\n    current = (cost - total) * rate;\n    total += current;\n  }\n\n  // Depreciation for the first and last periods are special cases\n  if (period === 1) {\n    // First period\n    return initial;\n  } else if (period === life) {\n    // Last period\n    return (cost - total) * rate;\n  } else {\n    return current;\n  }\n};\n\nexports.DDB = function(cost, salvage, life, period, factor) {\n  // Initialize factor\n  factor = (factor === undefined) ? 2 : factor;\n\n  cost = utils.parseNumber(cost);\n  salvage = utils.parseNumber(salvage);\n  life = utils.parseNumber(life);\n  period = utils.parseNumber(period);\n  factor = utils.parseNumber(factor);\n  if (utils.anyIsError(cost, salvage, life, period, factor)) {\n    return error.value;\n  }\n\n  // Return error if any of the parameters is negative or if factor is null\n  if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {\n    return error.num;\n  }\n\n  // Return error if period is greater than life\n  if (period > life) {\n    return error.num;\n  }\n\n  // Return 0 (zero) if salvage is greater than or equal to cost\n  if (salvage >= cost) {\n    return 0;\n  }\n\n  // Compute depreciation\n  var total = 0;\n  var current = 0;\n  for (var i = 1; i <= period; i++) {\n    current = Math.min((cost - total) * (factor / life), (cost - salvage - total));\n    total += current;\n  }\n\n  // Return depreciation\n  return current;\n};\n\n// TODO\nexports.DISC = function() {\n  throw new Error('DISC is not implemented');\n};\n\nexports.DOLLARDE = function(dollar, fraction) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  dollar = utils.parseNumber(dollar);\n  fraction = utils.parseNumber(fraction);\n  if (utils.anyIsError(dollar, fraction)) {\n    return error.value;\n  }\n\n  // Return error if fraction is negative\n  if (fraction < 0) {\n    return error.num;\n  }\n\n  // Return error if fraction is greater than or equal to 0 and less than 1\n  if (fraction >= 0 && fraction < 1) {\n    return error.div0;\n  }\n\n  // Truncate fraction if it is not an integer\n  fraction = parseInt(fraction, 10);\n\n  // Compute integer part\n  var result = parseInt(dollar, 10);\n\n  // Add decimal part\n  result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;\n\n  // Round result\n  var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);\n  result = Math.round(result * power) / power;\n\n  // Return converted dollar price\n  return result;\n};\n\nexports.DOLLARFR = function(dollar, fraction) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  dollar = utils.parseNumber(dollar);\n  fraction = utils.parseNumber(fraction);\n  if (utils.anyIsError(dollar, fraction)) {\n    return error.value;\n  }\n\n  // Return error if fraction is negative\n  if (fraction < 0) {\n    return error.num;\n  }\n\n  // Return error if fraction is greater than or equal to 0 and less than 1\n  if (fraction >= 0 && fraction < 1) {\n    return error.div0;\n  }\n\n  // Truncate fraction if it is not an integer\n  fraction = parseInt(fraction, 10);\n\n  // Compute integer part\n  var result = parseInt(dollar, 10);\n\n  // Add decimal part\n  result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;\n\n  // Return converted dollar price\n  return result;\n};\n\n// TODO\nexports.DURATION = function() {\n  throw new Error('DURATION is not implemented');\n};\n\nexports.EFFECT = function(rate, periods) {\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  if (utils.anyIsError(rate, periods)) {\n    return error.value;\n  }\n\n  // Return error if rate <=0 or periods < 1\n  if (rate <= 0 || periods < 1) {\n    return error.num;\n  }\n\n  // Truncate periods if it is not an integer\n  periods = parseInt(periods, 10);\n\n  // Return effective annual interest rate\n  return Math.pow(1 + rate / periods, periods) - 1;\n};\n\nexports.FV = function(rate, periods, payment, value, type) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  value = value || 0;\n  type = type || 0;\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  payment = utils.parseNumber(payment);\n  value = utils.parseNumber(value);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, periods, payment, value, type)) {\n    return error.value;\n  }\n\n  // Return future value\n  var result;\n  if (rate === 0) {\n    result = value + payment * periods;\n  } else {\n    var term = Math.pow(1 + rate, periods);\n    if (type === 1) {\n      result = value * term + payment * (1 + rate) * (term - 1) / rate;\n    } else {\n      result = value * term + payment * (term - 1) / rate;\n    }\n  }\n  return -result;\n};\n\nexports.FVSCHEDULE = function(principal, schedule) {\n  principal = utils.parseNumber(principal);\n  schedule = utils.parseNumberArray(utils.flatten(schedule));\n  if (utils.anyIsError(principal, schedule)) {\n    return error.value;\n  }\n\n  var n = schedule.length;\n  var future = principal;\n\n  // Apply all interests in schedule\n  for (var i = 0; i < n; i++) {\n    // Apply scheduled interest\n    future *= 1 + schedule[i];\n  }\n\n  // Return future value\n  return future;\n};\n\n// TODO\nexports.INTRATE = function() {\n  throw new Error('INTRATE is not implemented');\n};\n\nexports.IPMT = function(rate, period, periods, present, future, type) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  future = future || 0;\n  type = type || 0;\n\n  rate = utils.parseNumber(rate);\n  period = utils.parseNumber(period);\n  periods = utils.parseNumber(periods);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, period, periods, present, future, type)) {\n    return error.value;\n  }\n\n  // Compute payment\n  var payment = exports.PMT(rate, periods, present, future, type);\n\n  // Compute interest\n  var interest;\n  if (period === 1) {\n    if (type === 1) {\n      interest = 0;\n    } else {\n      interest = -present;\n    }\n  } else {\n    if (type === 1) {\n      interest = exports.FV(rate, period - 2, payment, present, 1) - payment;\n    } else {\n      interest = exports.FV(rate, period - 1, payment, present, 0);\n    }\n  }\n\n  // Return interest\n  return interest * rate;\n};\n\nexports.IRR = function(values, guess) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  guess = guess || 0;\n\n  values = utils.parseNumberArray(utils.flatten(values));\n  guess = utils.parseNumber(guess);\n  if (utils.anyIsError(values, guess)) {\n    return error.value;\n  }\n\n  // Calculates the resulting amount\n  var irrResult = function(values, dates, rate) {\n    var r = rate + 1;\n    var result = values[0];\n    for (var i = 1; i < values.length; i++) {\n      result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365);\n    }\n    return result;\n  };\n\n  // Calculates the first derivation\n  var irrResultDeriv = function(values, dates, rate) {\n    var r = rate + 1;\n    var result = 0;\n    for (var i = 1; i < values.length; i++) {\n      var frac = (dates[i] - dates[0]) / 365;\n      result -= frac * values[i] / Math.pow(r, frac + 1);\n    }\n    return result;\n  };\n\n  // Initialize dates and check that values contains at least one positive value and one negative value\n  var dates = [];\n  var positive = false;\n  var negative = false;\n  for (var i = 0; i < values.length; i++) {\n    dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;\n    if (values[i] > 0) {\n      positive = true;\n    }\n    if (values[i] < 0) {\n      negative = true;\n    }\n  }\n\n  // Return error if values does not contain at least one positive value and one negative value\n  if (!positive || !negative) {\n    return error.num;\n  }\n\n  // Initialize guess and resultRate\n  guess = (guess === undefined) ? 0.1 : guess;\n  var resultRate = guess;\n\n  // Set maximum epsilon for end of iteration\n  var epsMax = 1e-10;\n\n  // Implement Newton's method\n  var newRate, epsRate, resultValue;\n  var contLoop = true;\n  do {\n    resultValue = irrResult(values, dates, resultRate);\n    newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\n    epsRate = Math.abs(newRate - resultRate);\n    resultRate = newRate;\n    contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\n  } while (contLoop);\n\n  // Return internal rate of return\n  return resultRate;\n};\n\nexports.ISPMT = function(rate, period, periods, value) {\n  rate = utils.parseNumber(rate);\n  period = utils.parseNumber(period);\n  periods = utils.parseNumber(periods);\n  value = utils.parseNumber(value);\n  if (utils.anyIsError(rate, period, periods, value)) {\n    return error.value;\n  }\n\n  // Return interest\n  return value * rate * (period / periods - 1);\n};\n\n// TODO\nexports.MDURATION = function() {\n  throw new Error('MDURATION is not implemented');\n};\n\nexports.MIRR = function(values, finance_rate, reinvest_rate) {\n  values = utils.parseNumberArray(utils.flatten(values));\n  finance_rate = utils.parseNumber(finance_rate);\n  reinvest_rate = utils.parseNumber(reinvest_rate);\n  if (utils.anyIsError(values, finance_rate, reinvest_rate)) {\n    return error.value;\n  }\n\n  // Initialize number of values\n  var n = values.length;\n\n  // Lookup payments (negative values) and incomes (positive values)\n  var payments = [];\n  var incomes = [];\n  for (var i = 0; i < n; i++) {\n    if (values[i] < 0) {\n      payments.push(values[i]);\n    } else {\n      incomes.push(values[i]);\n    }\n  }\n\n  // Return modified internal rate of return\n  var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);\n  var den = exports.NPV(finance_rate, payments) * (1 + finance_rate);\n  return Math.pow(num / den, 1 / (n - 1)) - 1;\n};\n\nexports.NOMINAL = function(rate, periods) {\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  if (utils.anyIsError(rate, periods)) {\n    return error.value;\n  }\n\n  // Return error if rate <=0 or periods < 1\n  if (rate <= 0 || periods < 1) {\n    return error.num;\n  }\n\n  // Truncate periods if it is not an integer\n  periods = parseInt(periods, 10);\n\n  // Return nominal annual interest rate\n  return (Math.pow(rate + 1, 1 / periods) - 1) * periods;\n};\n\nexports.NPER = function(rate, payment, present, future, type) {\n  type = (type === undefined) ? 0 : type;\n  future = (future === undefined) ? 0 : future;\n\n  rate = utils.parseNumber(rate);\n  payment = utils.parseNumber(payment);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, payment, present, future, type)) {\n    return error.value;\n  }\n\n  // Return number of periods\n  var num = payment * (1 + rate * type) - future * rate;\n  var den = (present * rate + payment * (1 + rate * type));\n  return Math.log(num / den) / Math.log(1 + rate);\n};\n\nexports.NPV = function() {\n  var args = utils.parseNumberArray(utils.flatten(arguments));\n  if (args instanceof Error) {\n    return args;\n  }\n\n  // Lookup rate\n  var rate = args[0];\n\n  // Initialize net present value\n  var value = 0;\n\n  // Loop on all values\n  for (var j = 1; j < args.length; j++) {\n    value += args[j] / Math.pow(1 + rate, j);\n  }\n\n  // Return net present value\n  return value;\n};\n\n// TODO\nexports.ODDFPRICE = function() {\n  throw new Error('ODDFPRICE is not implemented');\n};\n\n// TODO\nexports.ODDFYIELD = function() {\n  throw new Error('ODDFYIELD is not implemented');\n};\n\n// TODO\nexports.ODDLPRICE = function() {\n  throw new Error('ODDLPRICE is not implemented');\n};\n\n// TODO\nexports.ODDLYIELD = function() {\n  throw new Error('ODDLYIELD is not implemented');\n};\n\nexports.PDURATION = function(rate, present, future) {\n  rate = utils.parseNumber(rate);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  if (utils.anyIsError(rate, present, future)) {\n    return error.value;\n  }\n\n  // Return error if rate <=0\n  if (rate <= 0) {\n    return error.num;\n  }\n\n  // Return number of periods\n  return (Math.log(future) - Math.log(present)) / Math.log(1 + rate);\n};\n\nexports.PMT = function(rate, periods, present, future, type) {\n  // Credits: algorithm inspired by Apache OpenOffice\n\n  future = future || 0;\n  type = type || 0;\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, periods, present, future, type)) {\n    return error.value;\n  }\n\n  // Return payment\n  var result;\n  if (rate === 0) {\n    result = (present + future) / periods;\n  } else {\n    var term = Math.pow(1 + rate, periods);\n    if (type === 1) {\n      result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);\n    } else {\n      result = future * rate / (term - 1) + present * rate / (1 - 1 / term);\n    }\n  }\n  return -result;\n};\n\nexports.PPMT = function(rate, period, periods, present, future, type) {\n  future = future || 0;\n  type = type || 0;\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, periods, present, future, type)) {\n    return error.value;\n  }\n\n  return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type);\n};\n\n// TODO\nexports.PRICE = function() {\n  throw new Error('PRICE is not implemented');\n};\n\n// TODO\nexports.PRICEDISC = function() {\n  throw new Error('PRICEDISC is not implemented');\n};\n\n// TODO\nexports.PRICEMAT = function() {\n  throw new Error('PRICEMAT is not implemented');\n};\n\nexports.PV = function(rate, periods, payment, future, type) {\n  future = future || 0;\n  type = type || 0;\n\n  rate = utils.parseNumber(rate);\n  periods = utils.parseNumber(periods);\n  payment = utils.parseNumber(payment);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  if (utils.anyIsError(rate, periods, payment, future, type)) {\n    return error.value;\n  }\n\n  // Return present value\n  if (rate === 0) {\n    return -payment * periods - future;\n  } else {\n    return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods);\n  }\n};\n\nexports.RATE = function(periods, payment, present, future, type, guess) {\n  // Credits: rabugento\n\n  guess = (guess === undefined) ? 0.01 : guess;\n  future = (future === undefined) ? 0 : future;\n  type = (type === undefined) ? 0 : type;\n\n  periods = utils.parseNumber(periods);\n  payment = utils.parseNumber(payment);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  type = utils.parseNumber(type);\n  guess = utils.parseNumber(guess);\n  if (utils.anyIsError(periods, payment, present, future, type, guess)) {\n    return error.value;\n  }\n\n  // Set maximum epsilon for end of iteration\n  var epsMax = 1e-10;\n\n  // Set maximum number of iterations\n  var iterMax = 50;\n\n  // Implement Newton's method\n  var y, y0, y1, x0, x1 = 0,\n    f = 0,\n    i = 0;\n  var rate = guess;\n  if (Math.abs(rate) < epsMax) {\n    y = present * (1 + periods * rate) + payment * (1 + rate * type) * periods + future;\n  } else {\n    f = Math.exp(periods * Math.log(1 + rate));\n    y = present * f + payment * (1 / rate + type) * (f - 1) + future;\n  }\n  y0 = present + payment * periods + future;\n  y1 = present * f + payment * (1 / rate + type) * (f - 1) + future;\n  i = x0 = 0;\n  x1 = rate;\n  while ((Math.abs(y0 - y1) > epsMax) && (i < iterMax)) {\n    rate = (y1 * x0 - y0 * x1) / (y1 - y0);\n    x0 = x1;\n    x1 = rate;\n    if (Math.abs(rate) < epsMax) {\n      y = present * (1 + periods * rate) + payment * (1 + rate * type) * periods + future;\n    } else {\n      f = Math.exp(periods * Math.log(1 + rate));\n      y = present * f + payment * (1 / rate + type) * (f - 1) + future;\n    }\n    y0 = y1;\n    y1 = y;\n    ++i;\n  }\n  return rate;\n};\n\n// TODO\nexports.RECEIVED = function() {\n  throw new Error('RECEIVED is not implemented');\n};\n\nexports.RRI = function(periods, present, future) {\n  periods = utils.parseNumber(periods);\n  present = utils.parseNumber(present);\n  future = utils.parseNumber(future);\n  if (utils.anyIsError(periods, present, future)) {\n    return error.value;\n  }\n\n  // Return error if periods or present is equal to 0 (zero)\n  if (periods === 0 || present === 0) {\n    return error.num;\n  }\n\n  // Return equivalent interest rate\n  return Math.pow(future / present, 1 / periods) - 1;\n};\n\nexports.SLN = function(cost, salvage, life) {\n  cost = utils.parseNumber(cost);\n  salvage = utils.parseNumber(salvage);\n  life = utils.parseNumber(life);\n  if (utils.anyIsError(cost, salvage, life)) {\n    return error.value;\n  }\n\n  // Return error if life equal to 0 (zero)\n  if (life === 0) {\n    return error.num;\n  }\n\n  // Return straight-line depreciation\n  return (cost - salvage) / life;\n};\n\nexports.SYD = function(cost, salvage, life, period) {\n  // Return error if any of the parameters is not a number\n  cost = utils.parseNumber(cost);\n  salvage = utils.parseNumber(salvage);\n  life = utils.parseNumber(life);\n  period = utils.parseNumber(period);\n  if (utils.anyIsError(cost, salvage, life, period)) {\n    return error.value;\n  }\n\n  // Return error if life equal to 0 (zero)\n  if (life === 0) {\n    return error.num;\n  }\n\n  // Return error if period is lower than 1 or greater than life\n  if (period < 1 || period > life) {\n    return error.num;\n  }\n\n  // Truncate period if it is not an integer\n  period = parseInt(period, 10);\n\n  // Return straight-line depreciation\n  return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1));\n};\n\nexports.TBILLEQ = function(settlement, maturity, discount) {\n  settlement = utils.parseDate(settlement);\n  maturity = utils.parseDate(maturity);\n  discount = utils.parseNumber(discount);\n  if (utils.anyIsError(settlement, maturity, discount)) {\n    return error.value;\n  }\n\n  // Return error if discount is lower than or equal to zero\n  if (discount <= 0) {\n    return error.num;\n  }\n\n  // Return error if settlement is greater than maturity\n  if (settlement > maturity) {\n    return error.num;\n  }\n\n  // Return error if maturity is more than one year after settlement\n  if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n    return error.num;\n  }\n\n  // Return bond-equivalent yield\n  return (365 * discount) / (360 - discount * dateTime.DAYS360(settlement, maturity, false));\n};\n\nexports.TBILLPRICE = function(settlement, maturity, discount) {\n  settlement = utils.parseDate(settlement);\n  maturity = utils.parseDate(maturity);\n  discount = utils.parseNumber(discount);\n  if (utils.anyIsError(settlement, maturity, discount)) {\n    return error.value;\n  }\n\n  // Return error if discount is lower than or equal to zero\n  if (discount <= 0) {\n    return error.num;\n  }\n\n  // Return error if settlement is greater than maturity\n  if (settlement > maturity) {\n    return error.num;\n  }\n\n  // Return error if maturity is more than one year after settlement\n  if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n    return error.num;\n  }\n\n  // Return bond-equivalent yield\n  return 100 * (1 - discount * dateTime.DAYS360(settlement, maturity, false) / 360);\n};\n\nexports.TBILLYIELD = function(settlement, maturity, price) {\n  settlement = utils.parseDate(settlement);\n  maturity = utils.parseDate(maturity);\n  price = utils.parseNumber(price);\n  if (utils.anyIsError(settlement, maturity, price)) {\n    return error.value;\n  }\n\n  // Return error if price is lower than or equal to zero\n  if (price <= 0) {\n    return error.num;\n  }\n\n  // Return error if settlement is greater than maturity\n  if (settlement > maturity) {\n    return error.num;\n  }\n\n  // Return error if maturity is more than one year after settlement\n  if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n    return error.num;\n  }\n\n  // Return bond-equivalent yield\n  return (100 - price) * 360 / (price * dateTime.DAYS360(settlement, maturity, false));\n};\n\n// TODO\nexports.VDB = function() {\n  throw new Error('VDB is not implemented');\n};\n\n// TODO needs better support for date\n// exports.XIRR = function(values, dates, guess) {\n//   // Credits: algorithm inspired by Apache OpenOffice\n//\n//   values = utils.parseNumberArray(utils.flatten(values));\n//   dates = utils.parseDateArray(utils.flatten(dates));\n//   guess = utils.parseNumber(guess);\n//\n//   if (utils.anyIsError(values, dates, guess)) {\n//     return error.value;\n//   }\n//\n//   // Calculates the resulting amount\n//   var irrResult = function(values, dates, rate) {\n//     var r = rate + 1;\n//     var result = values[0];\n//     for (var i = 1; i < values.length; i++) {\n//       result += values[i] / Math.pow(r, dateTime.DAYS(dates[i], dates[0]) / 365);\n//     }\n//     return result;\n//   };\n//\n//   // Calculates the first derivation\n//   var irrResultDeriv = function(values, dates, rate) {\n//     var r = rate + 1;\n//     var result = 0;\n//     for (var i = 1; i < values.length; i++) {\n//       var frac = dateTime.DAYS(dates[i], dates[0]) / 365;\n//       result -= frac * values[i] / Math.pow(r, frac + 1);\n//     }\n//     return result;\n//   };\n//\n//   // Check that values contains at least one positive value and one negative value\n//   var positive = false;\n//   var negative = false;\n//   for (var i = 0; i < values.length; i++) {\n//     if (values[i] > 0) {\n//       positive = true;\n//     }\n//     if (values[i] < 0) {\n//       negative = true;\n//     }\n//   }\n//\n//   // Return error if values does not contain at least one positive value and one negative value\n//   if (!positive || !negative) {\n//     return error.num;\n//   }\n//\n//   // Initialize guess and resultRate\n//   guess = guess || 0.1;\n//   var resultRate = guess;\n//\n//   // Set maximum epsilon for end of iteration\n//   var epsMax = 1e-10;\n//\n//   // Implement Newton's method\n//   var newRate, epsRate, resultValue;\n//   var contLoop = true;\n//   do {\n//     resultValue = irrResult(values, dates, resultRate);\n//     newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\n//     epsRate = Math.abs(newRate - resultRate);\n//     resultRate = newRate;\n//     contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\n//   } while (contLoop);\n//\n//   // Return internal rate of return\n//   return resultRate;\n// };\n\nexports.XNPV = function(rate, values, dates) {\n  rate = utils.parseNumber(rate);\n  values = utils.parseNumberArray(utils.flatten(values));\n  dates = utils.parseDateArray(utils.flatten(dates));\n  if (utils.anyIsError(rate, values, dates)) {\n    return error.value;\n  }\n\n  var result = 0;\n  for (var i = 0; i < values.length; i++) {\n    result += values[i] / Math.pow(1 + rate, dateTime.DAYS(dates[i], dates[0]) / 365);\n  }\n  return result;\n};\n\n// TODO\nexports.YIELD = function() {\n  throw new Error('YIELD is not implemented');\n};\n\n// TODO\nexports.YIELDDISC = function() {\n  throw new Error('YIELDDISC is not implemented');\n};\n\n// TODO\nexports.YIELDMAT = function() {\n  throw new Error('YIELDMAT is not implemented');\n};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar error = __webpack_require__(0);\nvar utils = __webpack_require__(1);\n\nexports.MATCH = function(lookupValue, lookupArray, matchType) {\n  if (!lookupValue && !lookupArray) {\n    return error.na;\n  }\n\n  if (arguments.length === 2) {\n    matchType = 1;\n  }\n  if (!(lookupArray instanceof Array)) {\n    return error.na;\n  }\n\n  if (matchType !== -1 && matchType !== 0 && matchType !== 1) {\n    return error.na;\n  }\n  var index;\n  var indexValue;\n  for (var idx = 0; idx < lookupArray.length; idx++) {\n    if (matchType === 1) {\n      if (lookupArray[idx] === lookupValue) {\n        return idx + 1;\n      } else if (lookupArray[idx] < lookupValue) {\n        if (!indexValue) {\n          index = idx + 1;\n          indexValue = lookupArray[idx];\n        } else if (lookupArray[idx] > indexValue) {\n          index = idx + 1;\n          indexValue = lookupArray[idx];\n        }\n      }\n    } else if (matchType === 0) {\n      if (typeof lookupValue === 'string') {\n        lookupValue = lookupValue.replace(/\\?/g, '.');\n        if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) {\n          return idx + 1;\n        }\n      } else {\n        if (lookupArray[idx] === lookupValue) {\n          return idx + 1;\n        }\n      }\n    } else if (matchType === -1) {\n      if (lookupArray[idx] === lookupValue) {\n        return idx + 1;\n      } else if (lookupArray[idx] > lookupValue) {\n        if (!indexValue) {\n          index = idx + 1;\n          indexValue = lookupArray[idx];\n        } else if (lookupArray[idx] < indexValue) {\n          index = idx + 1;\n          indexValue = lookupArray[idx];\n        }\n      }\n    }\n  }\n\n  return index ? index : error.na;\n};\n\nexports.VLOOKUP = function (needle, table, index, rangeLookup) {\n  if (!needle || !table || !index) {\n    return error.na;\n  }\n\n  rangeLookup = rangeLookup || false;\n  for (var i = 0; i < table.length; i++) {\n    var row = table[i];\n    if ((!rangeLookup && row[0] === needle) ||\n      ((row[0] === needle) ||\n        (rangeLookup && typeof row[0] === \"string\" && row[0].toLowerCase().indexOf(needle.toLowerCase()) !== -1))) {\n      return (index < (row.length + 1) ? row[index - 1] : error.ref);\n    }\n  }\n\n  return error.na;\n};\n\nexports.HLOOKUP = function (needle, table, index, rangeLookup) {\n  if (!needle || !table || !index) {\n    return error.na;\n  }\n\n  rangeLookup = rangeLookup || false;\n\n  var transposedTable = utils.transpose(table);\n\n  for (var i = 0; i < transposedTable.length; i++) {\n    var row = transposedTable[i];\n    if ((!rangeLookup && row[0] === needle) ||\n      ((row[0] === needle) ||\n        (rangeLookup && typeof row[0] === \"string\" && row[0].toLowerCase().indexOf(needle.toLowerCase()) !== -1))) {\n      return (index < (row.length + 1) ? row[index - 1] : error.ref);\n    }\n  }\n\n  return error.na;\n};\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '>';\n\nfunction func(exp1, exp2) {\n  return exp1 > exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '>=';\n\nfunction func(exp1, exp2) {\n  return exp1 >= exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '<';\n\nfunction func(exp1, exp2) {\n  return exp1 < exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '<=';\n\nfunction func(exp1, exp2) {\n  return exp1 <= exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar SYMBOL = exports.SYMBOL = '-';\n\nfunction func(first) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  var result = rest.reduce(function (acc, value) {\n    return acc - (0, _number.toNumber)(value);\n  }, (0, _number.toNumber)(first));\n\n  if (isNaN(result)) {\n    throw Error(_error.ERROR_VALUE);\n  }\n\n  return result;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar SYMBOL = exports.SYMBOL = '*';\n\nfunction func(first) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  var result = rest.reduce(function (acc, value) {\n    return acc * (0, _number.toNumber)(value);\n  }, (0, _number.toNumber)(first));\n\n  if (isNaN(result)) {\n    throw Error(_error.ERROR_VALUE);\n  }\n\n  return result;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports['default'] = func;\nvar SYMBOL = exports.SYMBOL = '<>';\n\nfunction func(exp1, exp2) {\n  return exp1 !== exp2;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SYMBOL = undefined;\nexports['default'] = func;\n\nvar _number = __webpack_require__(3);\n\nvar _error = __webpack_require__(2);\n\nvar SYMBOL = exports.SYMBOL = '^';\n\nfunction func(exp1, exp2) {\n  var result = Math.pow((0, _number.toNumber)(exp1), (0, _number.toNumber)(exp2));\n\n  if (isNaN(result)) {\n    throw Error(_error.ERROR_VALUE);\n  }\n\n  return result;\n}\n\nfunc.SYMBOL = SYMBOL;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar grammarParser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,8],$V2=[1,6],$V3=[1,7],$V4=[1,9],$V5=[1,14],$V6=[1,15],$V7=[1,16],$V8=[1,12],$V9=[1,13],$Va=[1,17],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,22],$Vf=[1,23],$Vg=[1,24],$Vh=[1,25],$Vi=[1,26],$Vj=[1,27],$Vk=[1,28],$Vl=[5,9,10,11,13,14,15,16,17,18,19,20,29,30],$Vm=[5,9,10,11,13,14,15,16,17,18,19,20,29,30,32],$Vn=[5,9,10,11,13,14,15,16,17,18,19,20,29,30,34],$Vo=[5,10,11,13,14,15,16,17,29,30],$Vp=[5,10,13,14,15,16,29,30],$Vq=[5,10,11,13,14,15,16,17,18,19,29,30],$Vr=[13,29,30];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"expression\":4,\"EOF\":5,\"variableSequence\":6,\"number\":7,\"STRING\":8,\"&\":9,\"=\":10,\"+\":11,\"(\":12,\")\":13,\"<\":14,\">\":15,\"NOT\":16,\"-\":17,\"*\":18,\"/\":19,\"^\":20,\"FUNCTION\":21,\"expseq\":22,\"cell\":23,\"ABSOLUTE_CELL\":24,\"RELATIVE_CELL\":25,\"MIXED_CELL\":26,\":\":27,\"ARRAY\":28,\";\":29,\",\":30,\"VARIABLE\":31,\"DECIMAL\":32,\"NUMBER\":33,\"%\":34,\"ERROR\":35,\"$accept\":0,\"$end\":1},\nterminals_: {5:\"EOF\",8:\"STRING\",9:\"&\",10:\"=\",11:\"+\",12:\"(\",13:\")\",14:\"<\",15:\">\",16:\"NOT\",17:\"-\",18:\"*\",19:\"/\",20:\"^\",21:\"FUNCTION\",24:\"ABSOLUTE_CELL\",25:\"RELATIVE_CELL\",26:\"MIXED_CELL\",27:\":\",28:\"ARRAY\",29:\";\",30:\",\",31:\"VARIABLE\",32:\"DECIMAL\",33:\"NUMBER\",34:\"%\",35:\"ERROR\"},\nproductions_: [0,[3,2],[4,1],[4,1],[4,1],[4,3],[4,3],[4,3],[4,3],[4,4],[4,4],[4,4],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,2],[4,2],[4,3],[4,4],[4,1],[4,1],[4,2],[23,1],[23,1],[23,1],[23,3],[23,3],[23,3],[23,3],[23,3],[23,3],[23,3],[23,3],[23,3],[22,1],[22,1],[22,3],[22,3],[6,1],[6,3],[7,1],[7,3],[7,2],[2,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n\n      return $$[$0-1];\n\nbreak;\ncase 2:\n\n      this.$ = yy.callVariable($$[$0][0]);\n\nbreak;\ncase 3:\n\n      this.$ = yy.toNumber($$[$0]);\n\nbreak;\ncase 4:\n\n      this.$ = yy.trimEdges($$[$0]);\n\nbreak;\ncase 5:\n\n      this.$ = yy.evaluateByOperator('&', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 6:\n\n      this.$ = yy.evaluateByOperator('=', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 7:\n\n      this.$ = yy.evaluateByOperator('+', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 8:\n\n      this.$ = $$[$0-1];\n\nbreak;\ncase 9:\n\n      this.$ = yy.evaluateByOperator('<=', [$$[$0-3], $$[$0]]);\n\nbreak;\ncase 10:\n\n      this.$ = yy.evaluateByOperator('>=', [$$[$0-3], $$[$0]]);\n\nbreak;\ncase 11:\n\n      this.$ = yy.evaluateByOperator('<>', [$$[$0-3], $$[$0]]);\n\nbreak;\ncase 12:\n\n      this.$ = yy.evaluateByOperator('NOT', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 13:\n\n      this.$ = yy.evaluateByOperator('>', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 14:\n\n      this.$ = yy.evaluateByOperator('<', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 15:\n\n      this.$ = yy.evaluateByOperator('-', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 16:\n\n      this.$ = yy.evaluateByOperator('*', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 17:\n\n      this.$ = yy.evaluateByOperator('/', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 18:\n\n      this.$ = yy.evaluateByOperator('^', [$$[$0-2], $$[$0]]);\n\nbreak;\ncase 19:\n\n      var n1 = yy.invertNumber($$[$0]);\n\n      this.$ = n1;\n\n      if (isNaN(this.$)) {\n          this.$ = 0;\n      }\n\nbreak;\ncase 20:\n\n      var n1 = yy.toNumber($$[$0]);\n\n      this.$ = n1;\n\n      if (isNaN(this.$)) {\n          this.$ = 0;\n      }\n\nbreak;\ncase 21:\n\n      this.$ = yy.callFunction($$[$0-2]);\n\nbreak;\ncase 22:\n\n      this.$ = yy.callFunction($$[$0-3], $$[$0-1]);\n\nbreak;\ncase 26: case 27: case 28:\n\n      this.$ = yy.cellValue($$[$0]);\n\nbreak;\ncase 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37:\n\n      this.$ = yy.rangeValue($$[$0-2], $$[$0]);\n\nbreak;\ncase 38: case 42:\n\n      this.$ = [$$[$0]];\n\nbreak;\ncase 39:\n\n      this.$ = yy.trimEdges(yytext).split(',');\n\nbreak;\ncase 40: case 41:\n\n      $$[$0-2].push($$[$0]);\n      this.$ = $$[$0-2];\n\nbreak;\ncase 43:\n\n      this.$ = (Array.isArray($$[$0-2]) ? $$[$0-2] : [$$[$0-2]]);\n      this.$.push($$[$0]);\n\nbreak;\ncase 44:\n\n      this.$ = $$[$0];\n\nbreak;\ncase 45:\n\n      this.$ = ($$[$0-2] + '.' + $$[$0]) * 1;\n\nbreak;\ncase 46:\n\n      this.$ = $$[$0-1] * 0.01;\n\nbreak;\ncase 47:\n\n      this.$ = yy.throwError($$[$0]);\n\nbreak;\n}\n},\ntable: [{2:11,3:1,4:2,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{1:[3]},{5:[1,18],9:$Vb,10:$Vc,11:$Vd,14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk},o($Vl,[2,2],{32:[1,29]}),o($Vl,[2,3],{34:[1,30]}),o($Vl,[2,4]),{2:11,4:31,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:32,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:33,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{12:[1,34]},o($Vl,[2,23]),o($Vl,[2,24],{2:35,35:$Va}),o($Vm,[2,42]),o($Vn,[2,44],{32:[1,36]}),o($Vl,[2,26],{27:[1,37]}),o($Vl,[2,27],{27:[1,38]}),o($Vl,[2,28],{27:[1,39]}),o([5,9,10,11,13,14,15,16,17,18,19,20,29,30,35],[2,47]),{1:[2,1]},{2:11,4:40,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:41,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:42,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:45,6:3,7:4,8:$V0,10:[1,43],11:$V1,12:$V2,15:[1,44],17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:47,6:3,7:4,8:$V0,10:[1,46],11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:48,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:49,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:50,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:51,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:52,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{31:[1,53]},o($Vn,[2,46]),{9:$Vb,10:$Vc,11:$Vd,13:[1,54],14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk},o($Vo,[2,19],{9:$Vb,18:$Vi,19:$Vj,20:$Vk}),o($Vo,[2,20],{9:$Vb,18:$Vi,19:$Vj,20:$Vk}),{2:11,4:57,6:3,7:4,8:$V0,11:$V1,12:$V2,13:[1,55],17:$V3,21:$V4,22:56,23:10,24:$V5,25:$V6,26:$V7,28:[1,58],31:$V8,33:$V9,35:$Va},o($Vl,[2,25]),{33:[1,59]},{24:[1,60],25:[1,61],26:[1,62]},{24:[1,63],25:[1,64],26:[1,65]},{24:[1,66],25:[1,67],26:[1,68]},o($Vl,[2,5]),o([5,10,13,29,30],[2,6],{9:$Vb,11:$Vd,14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vo,[2,7],{9:$Vb,18:$Vi,19:$Vj,20:$Vk}),{2:11,4:69,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:70,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},o($Vp,[2,14],{9:$Vb,11:$Vd,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),{2:11,4:71,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},o($Vp,[2,13],{9:$Vb,11:$Vd,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o([5,10,13,16,29,30],[2,12],{9:$Vb,11:$Vd,14:$Ve,15:$Vf,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vo,[2,15],{9:$Vb,18:$Vi,19:$Vj,20:$Vk}),o($Vq,[2,16],{9:$Vb,20:$Vk}),o($Vq,[2,17],{9:$Vb,20:$Vk}),o([5,10,11,13,14,15,16,17,18,19,20,29,30],[2,18],{9:$Vb}),o($Vm,[2,43]),o($Vl,[2,8]),o($Vl,[2,21]),{13:[1,72],29:[1,73],30:[1,74]},o($Vr,[2,38],{9:$Vb,10:$Vc,11:$Vd,14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vr,[2,39]),o($Vn,[2,45]),o($Vl,[2,29]),o($Vl,[2,30]),o($Vl,[2,31]),o($Vl,[2,32]),o($Vl,[2,33]),o($Vl,[2,34]),o($Vl,[2,35]),o($Vl,[2,36]),o($Vl,[2,37]),o($Vp,[2,9],{9:$Vb,11:$Vd,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vp,[2,11],{9:$Vb,11:$Vd,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vp,[2,10],{9:$Vb,11:$Vd,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vl,[2,22]),{2:11,4:75,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},{2:11,4:76,6:3,7:4,8:$V0,11:$V1,12:$V2,17:$V3,21:$V4,23:10,24:$V5,25:$V6,26:$V7,31:$V8,33:$V9,35:$Va},o($Vr,[2,40],{9:$Vb,10:$Vc,11:$Vd,14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk}),o($Vr,[2,41],{9:$Vb,10:$Vc,11:$Vd,14:$Ve,15:$Vf,16:$Vg,17:$Vh,18:$Vi,19:$Vj,20:$Vk})],\ndefaultActions: {18:[2,1]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse (input) {\n    var self = this,\n        stack = [0],\n        tstack = [], // token stack\n        vstack = [null], // semantic value stack\n        lstack = [], // location stack\n        table = this.table,\n        yytext = '',\n        yylineno = 0,\n        yyleng = 0,\n        recovering = 0,\n        TERROR = 2,\n        EOF = 1;\n\n    var args = lstack.slice.call(arguments, 1);\n\n    //this.reductionCount = this.shiftCount = 0;\n\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    // copy state\n    for (var k in this.yy) {\n      if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n        sharedState.yy[k] = this.yy[k];\n      }\n    }\n\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n\n    var ranges = lexer.options && lexer.options.ranges;\n\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n\n    function popStack (n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n\n_token_stack:\n    var lex = function () {\n        var token;\n        token = lexer.lex() || EOF;\n        // if token isn't its numeric value, convert\n        if (typeof token !== 'number') {\n            token = self.symbols_[token] || token;\n        }\n        return token;\n    }\n\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        // retreive state number from top of stack\n        state = stack[stack.length - 1];\n\n        // use default actions if available\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            // read action for current state and first input\n            action = table[state] && table[state][symbol];\n        }\n\n_handle_error:\n        // handle parse error\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var error_rule_depth;\n            var errStr = '';\n\n            // Return the rule stack depth where the nearest error rule can be found.\n            // Return FALSE when no error recovery rule was found.\n            function locateNearestErrorRecoveryRule(state) {\n                var stack_probe = stack.length - 1;\n                var depth = 0;\n\n                // try to recover from error\n                for(;;) {\n                    // check for error recovery rule in this state\n                    if ((TERROR.toString()) in table[state]) {\n                        return depth;\n                    }\n                    if (state === 0 || stack_probe < 2) {\n                        return false; // No suitable error recovery rule available.\n                    }\n                    stack_probe -= 2; // popStack(1): [symbol, action]\n                    state = stack[stack_probe];\n                    ++depth;\n                }\n            }\n\n            if (!recovering) {\n                // first see if there's any chance at hitting an error recovery rule:\n                error_rule_depth = locateNearestErrorRecoveryRule(state);\n\n                // Report error\n                expected = [];\n                for (p in table[state]) {\n                    if (this.terminals_[p] && p > TERROR) {\n                        expected.push(\"'\"+this.terminals_[p]+\"'\");\n                    }\n                }\n                if (lexer.showPosition) {\n                    errStr = 'Parse error on line '+(yylineno+1)+\":\\n\"+lexer.showPosition()+\"\\nExpecting \"+expected.join(', ') + \", got '\" + (this.terminals_[symbol] || symbol)+ \"'\";\n                } else {\n                    errStr = 'Parse error on line '+(yylineno+1)+\": Unexpected \" +\n                                  (symbol == EOF ? \"end of input\" :\n                                              (\"'\"+(this.terminals_[symbol] || symbol)+\"'\"));\n                }\n                this.parseError(errStr, {\n                    text: lexer.match,\n                    token: this.terminals_[symbol] || symbol,\n                    line: lexer.yylineno,\n                    loc: yyloc,\n                    expected: expected,\n                    recoverable: (error_rule_depth !== false)\n                });\n            } else if (preErrorSymbol !== EOF) {\n                error_rule_depth = locateNearestErrorRecoveryRule(state);\n            }\n\n            // just recovered from another error\n            if (recovering == 3) {\n                if (symbol === EOF || preErrorSymbol === EOF) {\n                    throw new Error(errStr || 'Parsing halted while starting to recover from another error.');\n                }\n\n                // discard current lookahead and grab another\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                symbol = lex();\n            }\n\n            // try to recover from error\n            if (error_rule_depth === false) {\n                throw new Error(errStr || 'Parsing halted. No suitable error recovery rule available.');\n            }\n            popStack(error_rule_depth);\n\n            preErrorSymbol = (symbol == TERROR ? null : symbol); // save the lookahead token\n            symbol = TERROR;         // insert generic error symbol as new lookahead\n            state = stack[stack.length-1];\n            action = table[state] && table[state][TERROR];\n            recovering = 3; // allow 3 real symbols to be shifted before reporting a new error\n        }\n\n        // this shouldn't happen, unless resolve defaults are off\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);\n        }\n\n        switch (action[0]) {\n            case 1: // shift\n                //this.shiftCount++;\n\n                stack.push(symbol);\n                vstack.push(lexer.yytext);\n                lstack.push(lexer.yylloc);\n                stack.push(action[1]); // push state\n                symbol = null;\n                if (!preErrorSymbol) { // normal execution/no error\n                    yyleng = lexer.yyleng;\n                    yytext = lexer.yytext;\n                    yylineno = lexer.yylineno;\n                    yyloc = lexer.yylloc;\n                    if (recovering > 0) {\n                        recovering--;\n                    }\n                } else {\n                    // error just occurred, resume old lookahead f/ before error\n                    symbol = preErrorSymbol;\n                    preErrorSymbol = null;\n                }\n                break;\n\n            case 2:\n                // reduce\n                //this.reductionCount++;\n\n                len = this.productions_[action[1]][1];\n\n                // perform semantic action\n                yyval.$ = vstack[vstack.length-len]; // default to $$ = $1\n                // default location, uses first token for firsts, last for lasts\n                yyval._$ = {\n                    first_line: lstack[lstack.length-(len||1)].first_line,\n                    last_line: lstack[lstack.length-1].last_line,\n                    first_column: lstack[lstack.length-(len||1)].first_column,\n                    last_column: lstack[lstack.length-1].last_column\n                };\n                if (ranges) {\n                  yyval._$.range = [lstack[lstack.length-(len||1)].range[0], lstack[lstack.length-1].range[1]];\n                }\n                r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\n                if (typeof r !== 'undefined') {\n                    return r;\n                }\n\n                // pop off stack\n                if (len) {\n                    stack = stack.slice(0,-1*len*2);\n                    vstack = vstack.slice(0, -1*len);\n                    lstack = lstack.slice(0, -1*len);\n                }\n\n                stack.push(this.productions_[action[1]][0]);    // push nonterminal (reduce)\n                vstack.push(yyval.$);\n                lstack.push(yyval._$);\n                // goto new state = table[STATE][NONTERMINAL]\n                newState = table[stack[stack.length-2]][stack[stack.length-1]];\n                stack.push(newState);\n                break;\n\n            case 3:\n                // accept\n                return true;\n        }\n\n    }\n\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 8;\nbreak;\ncase 2:return 8;\nbreak;\ncase 3:return 21;\nbreak;\ncase 4:return 35;\nbreak;\ncase 5:return 24;\nbreak;\ncase 6:return 26;\nbreak;\ncase 7:return 26;\nbreak;\ncase 8:return 25;\nbreak;\ncase 9:return 21;\nbreak;\ncase 10:return 31;\nbreak;\ncase 11:return 31;\nbreak;\ncase 12:return 33;\nbreak;\ncase 13:return 28;\nbreak;\ncase 14:return 9;\nbreak;\ncase 15:return ' ';\nbreak;\ncase 16:return 32;\nbreak;\ncase 17:return 27;\nbreak;\ncase 18:return 29;\nbreak;\ncase 19:return 30;\nbreak;\ncase 20:return 18;\nbreak;\ncase 21:return 19;\nbreak;\ncase 22:return 17;\nbreak;\ncase 23:return 11;\nbreak;\ncase 24:return 20;\nbreak;\ncase 25:return 12;\nbreak;\ncase 26:return 13;\nbreak;\ncase 27:return 15;\nbreak;\ncase 28:return 14;\nbreak;\ncase 29:return 16;\nbreak;\ncase 30:return '\"';\nbreak;\ncase 31:return \"'\";\nbreak;\ncase 32:return \"!\";\nbreak;\ncase 33:return 10;\nbreak;\ncase 34:return 34;\nbreak;\ncase 35:return '#';\nbreak;\ncase 36:return 5;\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\"(\\\\[\"]|[^\"])*\")/,/^(?:'(\\\\[']|[^'])*')/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9\\.]+(?=[(]))/,/^(?:#[A-Z0-9\\/]+(!|\\?)?)/,/^(?:\\$[A-Za-z]+\\$[0-9]+)/,/^(?:\\$[A-Za-z]+[0-9]+)/,/^(?:[A-Za-z]+\\$[0-9]+)/,/^(?:[A-Za-z]+[0-9]+)/,/^(?:[A-Za-z\\.]+(?=[(]))/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/,/^(?:[A-Za-z_]+)/,/^(?:[0-9]+)/,/^(?:\\[(.*)?\\])/,/^(?:&)/,/^(?: )/,/^(?:[.])/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:\\/)/,/^(?:-)/,/^(?:\\+)/,/^(?:\\^)/,/^(?:\\()/,/^(?:\\))/,/^(?:>)/,/^(?:<)/,/^(?:NOT\\b)/,/^(?:\")/,/^(?:')/,/^(?:!)/,/^(?:=)/,/^(?:%)/,/^(?:[#])/,/^(?:$)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (true) {\nexports.parser = grammarParser;\nexports.Parser = grammarParser.Parser;\nexports.parse = function () { return grammarParser.parse.apply(grammarParser, arguments); };\n}\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.trimEdges = trimEdges;\n/* eslint-disable import/prefer-default-export */\n/**\n * Trim value by cutting character starting from the beginning and ending at the same time.\n *\n * @param {String} string String to trimming.\n * @param {Number} [margin=1] Number of character to cut.\n * @returns {String}\n */\nfunction trimEdges(string) {\n  var margin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  string = string.substring(margin, string.length - margin);\n\n  return string;\n}\n\n/***/ })\n/******/ ]);\n});","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    // $FlowFixMe\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      // $FlowFixMe\n      return document.styleSheets[i];\n    }\n  }\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  return tag;\n}\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(options) {\n    this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      var _tag = createStyleElement(this);\n\n      var before;\n\n      if (this.tags.length === 0) {\n        before = this.before;\n      } else {\n        before = this.tags[this.tags.length - 1].nextSibling;\n      }\n\n      this.container.insertBefore(_tag, before);\n      this.tags.push(_tag);\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is a really hot path\n        // we check the second character first because having \"i\"\n        // as the second character will happen less often than\n        // having \"@\" as the first character\n        var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n\n        sheet.insertRule(rule, // we need to insert @import rules before anything else\n        // otherwise there will be an error\n        // technically this means that the @import rules will\n        // _usually_(not always since there could be multiple style tags)\n        // be the first ones in prod and generally later in dev\n        // this shouldn't really matter in the real world though\n        // @import is generally only used for font faces from google fonts and etc.\n        // so while this could be technically correct then it would be slower and larger\n        // for a tiny bit of correctness that won't matter in the real world\n        isImportRule ? 0 : sheet.cssRules.length);\n      } catch (e) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n        }\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    // $FlowFixMe\n    this.tags.forEach(function (tag) {\n      return tag.parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { Component } from 'react';\n\nvar defaultProps = {\n  defaultInputValue: '',\n  defaultMenuIsOpen: false,\n  defaultValue: null\n};\n\nvar manageState = function manageState(SelectComponent) {\n  var _class, _temp;\n\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_Component) {\n    _inherits(StateManager, _Component);\n\n    function StateManager() {\n      var _getPrototypeOf2;\n\n      var _this;\n\n      _classCallCheck(this, StateManager);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(StateManager)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"select\", void 0);\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"state\", {\n        inputValue: _this.props.inputValue !== undefined ? _this.props.inputValue : _this.props.defaultInputValue,\n        menuIsOpen: _this.props.menuIsOpen !== undefined ? _this.props.menuIsOpen : _this.props.defaultMenuIsOpen,\n        value: _this.props.value !== undefined ? _this.props.value : _this.props.defaultValue\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onChange\", function (value, actionMeta) {\n        _this.callProp('onChange', value, actionMeta);\n\n        _this.setState({\n          value: value\n        });\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onInputChange\", function (value, actionMeta) {\n        // TODO: for backwards compatibility, we allow the prop to return a new\n        // value, but now inputValue is a controllable prop we probably shouldn't\n        var newValue = _this.callProp('onInputChange', value, actionMeta);\n\n        _this.setState({\n          inputValue: newValue !== undefined ? newValue : value\n        });\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuOpen\", function () {\n        _this.callProp('onMenuOpen');\n\n        _this.setState({\n          menuIsOpen: true\n        });\n      });\n\n      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"onMenuClose\", function () {\n        _this.callProp('onMenuClose');\n\n        _this.setState({\n          menuIsOpen: false\n        });\n      });\n\n      return _this;\n    }\n\n    _createClass(StateManager, [{\n      key: \"focus\",\n      value: function focus() {\n        this.select.focus();\n      }\n    }, {\n      key: \"blur\",\n      value: function blur() {\n        this.select.blur();\n      } // FIXME: untyped flow code, return any\n\n    }, {\n      key: \"getProp\",\n      value: function getProp(key) {\n        return this.props[key] !== undefined ? this.props[key] : this.state[key];\n      } // FIXME: untyped flow code, return any\n\n    }, {\n      key: \"callProp\",\n      value: function callProp(name) {\n        if (typeof this.props[name] === 'function') {\n          var _this$props;\n\n          for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            args[_key2 - 1] = arguments[_key2];\n          }\n\n          return (_this$props = this.props)[name].apply(_this$props, args);\n        }\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this2 = this;\n\n        var _this$props2 = this.props,\n            defaultInputValue = _this$props2.defaultInputValue,\n            defaultMenuIsOpen = _this$props2.defaultMenuIsOpen,\n            defaultValue = _this$props2.defaultValue,\n            props = _objectWithoutProperties(_this$props2, [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\"]);\n\n        return React.createElement(SelectComponent, _extends({}, props, {\n          ref: function ref(_ref) {\n            _this2.select = _ref;\n          },\n          inputValue: this.getProp('inputValue'),\n          menuIsOpen: this.getProp('menuIsOpen'),\n          onChange: this.onChange,\n          onInputChange: this.onInputChange,\n          onMenuClose: this.onMenuClose,\n          onMenuOpen: this.onMenuOpen,\n          value: this.getProp('value')\n        }));\n      }\n    }]);\n\n    return StateManager;\n  }(Component), _defineProperty(_class, \"defaultProps\", defaultProps), _temp;\n};\n\nexport { manageState as m };\n","import ApiClient from '../../utils/apiClient';\nimport {IQuoteSearchResponse} from './QuoteInterface';\nconst apiEndPoint = 'ENDPOINT_QUOTATION2';\n\nconst QuoteServiceApi = {\n  async fetchQuoteById(env: any, appId: string, quoteId: number): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: any = await apiClient.fetchData(`/quote/${quoteId}`);\n      if (response?.payload?.quotation?.quote?.[0]) {\n        return response?.payload?.quotation?.quote?.[0];\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get project by id:', error);\n      throw error;\n    }\n  },\n\n  async search(env: any, appId: string, filterOptions: object): Promise<IQuoteSearchResponse> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response: IQuoteSearchResponse = await apiClient.post(`/search/quotes`, filterOptions);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get Quotes:', error);\n      throw error;\n    }\n  },\n\n  async getDraft(env: any, appId: string, quoteId: number) {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.fetchData(`/quote/${quoteId}/draft`);\n      if (response?.payload?.quotation?.draft?.[0]?.draft) {\n        const responseData = response?.payload?.quotation?.draft?.[0]?.draft;\n        if (responseData) {\n          return JSON.parse(responseData);\n        }\n      } else {\n        return null;\n      }\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error get Quote Draft:', error);\n      throw error;\n    }\n  },\n};\nexport default QuoteServiceApi;","import React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar TableContext = React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n  TableContext.displayName = 'TableContext';\n}\n\nexport default TableContext;","import * as React from 'react';\nimport { Paper, Switch, FormControlLabel, Divider, makeStyles } from '@material-ui/core';\n\ninterface IUseTogglePaperParams {\n  // When false the hook returns undefined so MUI falls back to its default Paper.\n  enabled: boolean;\n  checked: boolean;\n  label: React.ReactNode;\n  onChange: (checked: boolean) => void;\n}\n\nconst useStyles = makeStyles({\n  toggleHeader: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n    padding: '4px 0px',\n  },\n});\n\n// Builds a MUI Autocomplete PaperComponent that pins a Switch above the option list. Memoised so\n// its component identity stays stable while the input value changes (identity churn would remount\n// the option list on every keystroke); only the toggle's own state rebuilds it.\nexport const useTogglePaper = ({ enabled, checked, label, onChange }: IUseTogglePaperParams) => {\n  const classes = useStyles();\n  return React.useMemo(() => {\n    if (!enabled) {\n      return undefined;\n    }\n    return ({ children, ...paperProps }: any) => (\n      <Paper {...paperProps}>\n        <div className={classes.toggleHeader} onMouseDown={(e) => e.preventDefault()}>\n          <FormControlLabel\n            control={\n              <Switch\n                checked={checked}\n                onChange={(e) => onChange(e.target.checked)}\n                color='primary'\n              />\n            }\n            label={label}\n          />\n        </div>\n        <Divider />\n        {children}\n      </Paper>\n    );\n  }, [enabled, checked, label, classes.toggleHeader]); // onChange forwards to a stable setter\n};\n\nexport default useTogglePaper;\n","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","import React from 'react';\n/**\n * @ignore - internal component.\n * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}\n */\n\nvar ExpansionPanelContext = React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n  ExpansionPanelContext.displayName = 'ExpansionPanelContext';\n}\n\nexport default ExpansionPanelContext;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/**\n * Copies text to the clipboard and resolves whether it worked. It never rejects.\n *\n * The async Clipboard API can be refused: inside an iframe that doesn't allow clipboard-write, under a\n * browser or company policy, or outside a secure context (Sentry issue 7790591826). The older copy\n * command on a selected textarea isn't governed by those rules, so it is tried next. When both fail the\n * caller should let the user copy the text by hand.\n */\nexport const copyToClipboard = (text: string): Promise<boolean> => {\n  const clipboard = typeof navigator !== 'undefined' ? navigator.clipboard : undefined;\n  if (clipboard && clipboard.writeText) {\n    return clipboard.writeText(text).then(() => true, () => copyWithCopyCommand(text));\n  }\n  return Promise.resolve(copyWithCopyCommand(text));\n};\n\nconst copyWithCopyCommand = (text: string): boolean => {\n  if (typeof document === 'undefined' || !document.body) {\n    return false;\n  }\n  const previousFocus = document.activeElement as HTMLElement | null;\n  const textarea = document.createElement('textarea');\n  textarea.value = text;\n  // off screen and read-only, so the page doesn't jump and mobile keyboards don't open\n  textarea.setAttribute('readonly', '');\n  textarea.style.position = 'fixed';\n  textarea.style.top = '0';\n  textarea.style.left = '-9999px';\n  document.body.appendChild(textarea);\n  textarea.focus({ preventScroll: true });\n  textarea.select();\n\n  let copied = false;\n  try {\n    copied = document.execCommand('copy');\n  } catch (e) {\n    copied = false;\n  }\n\n  document.body.removeChild(textarea);\n  if (previousFocus && previousFocus.focus) {\n    previousFocus.focus();\n  }\n  return copied;\n};\n\nexport default copyToClipboard;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34a.9959.9959 0 00-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z\"\n}), 'Brush');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose, Dispatch\n} from 'redux';\nimport {\n  IAction, IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n} from '@material-ui/core';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { fromJS, List } from 'immutable';\nimport { MissingRule, Product, ProductCategory, ProductCategoryGroup, Series } from '../../models';\nimport { ClearQuickSearchAction, GetSeriesAndAddSeriesSpecificFiltersAction, SelectCategoryAction, SelectNewCategoryAction, SelectSeriesAction, SkipRuleEngineAction } from '../../modules/ProductModule/actions';\nimport { AtsApiCallAction, SetAppLoadingStatusAction } from '../../modules/AtsModule/actions';\nimport { SetOverlayComponentPropsAction, SetTimerStartAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { IModalProps } from '../ProductDrawer';\nimport { MODAL_ID } from '../../containers/CrossReferenceModal';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../constants';\n\ninterface ISpecToolXrefButtonComponentProps {\n  allCategories: List<IMap<ProductCategoryGroup>>;\n  searchTerm: string;\n  children: React.ReactNode;\n}\n\ninterface ISpecToolXrefButtonProps extends ISpecToolXrefButtonComponentProps {\n  dispatch: Dispatch<IAction>;\n}\n\ntype SpecToolXrefButtonProps = ISpecToolXrefButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst SpecToolXrefButton: React.FC<SpecToolXrefButtonProps> = (props) => {\n  const {\n    dispatch,\n    allCategories,\n    searchTerm,\n    children,\n    amplitudeData\n  } = props;\n\n  const xrefSelectedAction = (data) => {\n    const sponsorProduct = data.get('sponsorProduct');\n    const sponsorType = data.get('sponsorProductType');\n\n    const onSeriesSelected = (series: IMap<Series>) => () => {\n      // set timer start here, for amplitude stuff to track time when series is fully loaded\n      dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n\n      const id = series.get('id');\n      const categoryId = series.get('category');\n      const categoryName = series.get('categoryName');\n      const allCategoryMap = allCategories.reduce((listOfCategories, productCategoryGroup) => {\n        return listOfCategories.concat(productCategoryGroup.get('productTypes'));\n      }, List());\n      const foundProductCategory = allCategoryMap.find((cat) => cat.get('id') === categoryId);\n      const productCategory: IMap<ProductCategory> = foundProductCategory != null\n        ? foundProductCategory\n        : new ProductCategory({ id: categoryId, name: categoryName }).toImmutable();\n      dispatch(new SelectCategoryAction({ productCategoryId: categoryId }));\n      dispatch(new SelectNewCategoryAction({\n        missingRule: new MissingRule({\n          category: productCategory,\n          filters: fromJS({\n            and: [\n              {\n                category: {\n                  eq: productCategory.get('id'),\n                }\n              },\n              {\n                id: {\n                  eq: id,\n                }\n              }\n            ]\n          }),\n        }).toImmutable(),\n        skipRules: true\n      }));\n      dispatch(new SkipRuleEngineAction(true));\n      dispatch(new SelectSeriesAction(id));\n      // clear the search IT-2345\n      dispatch(new ClearQuickSearchAction());\n    };\n\n    const onProductSelected = (product) => () => {\n      // set timer start here, for amplitude stuff to track time when series is fully loaded\n      dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n\n      const categoryId = product.get('category');\n      const categoryName = product.get('categoryName');\n      const seriesId = product.get('series');\n      const allCategoryMap = allCategories.reduce((listOfCategories, productCategoryGroup) => {\n        return listOfCategories.concat(productCategoryGroup.get('productTypes'));\n      }, List());\n      const foundProductCategory = allCategoryMap.find((cat) => cat.get('id') === categoryId);\n      const productCategory: IMap<ProductCategory> = foundProductCategory != null\n        ? foundProductCategory\n        : new ProductCategory({ id: categoryId, name: categoryName }).toImmutable();\n      dispatch(new SelectCategoryAction({ productCategoryId: categoryId }));\n      dispatch(new SelectNewCategoryAction({\n        missingRule: new MissingRule({\n          category: productCategory,\n          filters: fromJS({\n            and: [\n              {\n                category: {\n                  eq: productCategory.get('id'),\n                }\n              },\n              {\n                id: {\n                  eq: seriesId,\n                }\n              }\n            ]\n          }),\n        }).toImmutable(),\n        skipRules: true\n      }));\n      dispatch(new SkipRuleEngineAction(true));\n      dispatch(new SelectSeriesAction(seriesId));\n\n      dispatch(new GetSeriesAndAddSeriesSpecificFiltersAction({\n        seriesId,\n        productAttributes: product.get('attributes'),\n      }));\n      // clear the search IT-2345\n      dispatch(new ClearQuickSearchAction());\n    };\n\n    switch (sponsorType) {\n      case 'product':\n        dispatch(new AtsApiCallAction(\n          {\n            payload: {\n              service: 'product',\n              endpoint: 'getProduct',\n              params: {\n                productId: sponsorProduct.get('id'),\n              },\n            },\n          },\n          (apiResp) => {\n            if (!apiResp.err) {\n              const immutableResp = fromJS(apiResp);\n\n              const products: List<IMap<Product>> = immutableResp.getIn(['data', 'payload', 'product', 'product']);\n              if (products.count() !== 0) {\n                const product = products.get(0);\n                if (product != null) {\n                  onProductSelected(product)();\n                }\n              }\n            }\n            dispatch(new SetOverlayComponentPropsAction({\n              id: MODAL_ID,\n              props: {\n                searchTerm: '',\n              } as IModalProps,\n            }));\n          },\n        ));\n        break;\n      case 'series':\n        dispatch(new AtsApiCallAction(\n          {\n            payload: {\n              service: 'product',\n              endpoint: 'getSeries',\n              params: {\n                seriesId: sponsorProduct.get('id'),\n              },\n            },\n          },\n          (apiResp) => {\n            if (!apiResp.err) {\n              const immutableResp = fromJS(apiResp);\n              const seriess: List<IMap<Series>> = immutableResp.getIn(['data', 'payload', 'product', 'series']);\n              if (seriess.count() !== 0) {\n                const series = seriess.get(0);\n                if (series != null) {\n                  onSeriesSelected(series)();\n                }\n              }\n            }\n            dispatch(new SetOverlayComponentPropsAction({\n              id: MODAL_ID,\n              props: {\n                searchTerm: '',\n              } as IModalProps,\n            }));\n          },\n        ));\n        break;\n    }\n    dispatch(new SetAppLoadingStatusAction(false));\n  };\n\n  return (\n    <Grid\n      onClick={() => {\n        const tourButton = document.querySelector('a.uf-button-main.uf-visible') as HTMLElement;\n        if (tourButton) {\n          tourButton.style.visibility = 'hidden';\n        }\n        dispatch(new SetOverlayComponentPropsAction({\n          id: MODAL_ID,\n          props: {\n            searchTerm,\n            onXrefProductSelected: (data) => xrefSelectedAction(data)\n          } as IModalProps,\n        }));\n        dispatch(new ToggleOverlayComponentAction({id: MODAL_ID}));\n        amplitude.logEvent(AMPLITUDE_EVENT.xrefModalOpened, amplitudeData());\n      }}\n    >\n      {children}\n    </Grid>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n});\n\n\nexport default compose<React.FC<ISpecToolXrefButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps)\n)(SpecToolXrefButton);\n","import { makeStyles } from '@material-ui/core/styles';\nimport * as React from 'react';\nimport { TableCell } from '@material-ui/core';\nimport { Image } from '../../index';\n\nconst useStyles = makeStyles(() => ({\n  tableCellImage: {\n    padding: '24px 24px 24px 0px'\n  },\n}));\nconst ImageCell: React.FC<{ src: string, className?: string, width?: string }> = ({ src, className, width }) => {\n  const classes = useStyles();\n  return (\n    <TableCell\n      component='th'\n      scope='row'\n      className={className ? className : classes.tableCellImage}\n    >\n      <Image\n        src={src}\n        width={width ? width : `40px`}\n        aspectRatio={'100%'}\n        fromService={true}\n      />\n    </TableCell>\n  );\n};\n\nexport default React.memo(ImageCell);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","import {\n  Theme,\n} from '@material-ui/core';\nimport {StyleRules} from '@material-ui/core/styles';\n\nexport const styles = (theme: Theme): StyleRules => ({\n  gridContainer: {\n    marginTop: '0.25em',\n  },\n  noResults: {\n    display: 'flex',\n    height: '100%',\n    justifyContent: 'center',\n    alignItems: 'center',\n    flexDirection: 'column',\n  },\n  menuItemIcon: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  menuItemDetails: {\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  menuItemType: {\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  createContact: {\n    width: '100%',\n    backgroundColor: 'transparent',\n    boxShadow: 'none',\n    color: theme.palette.primary[800],\n    '&:hover': {\n      backgroundColor: 'transparent',\n    }\n  },\n});","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 6h-8l-1.41-1.41C10.21 4.21 9.7 4 9.17 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z\"\n}), 'FolderSharedRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M22 10l-6-6H4c-1.1 0-2 .9-2 2v12.01c0 1.1.9 1.99 2 1.99l16-.01c1.1 0 2-.89 2-1.99v-8zm-7-4.5l5.5 5.5H15V5.5z\"\n}), 'Note');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 8h-3V4H3c-1.1 0-2 .9-2 2v11h2c0 1.66 1.34 3 3 3s3-1.34 3-3h6c0 1.66 1.34 3 3 3s3-1.34 3-3h2v-5l-3-4zM6 18.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm13.5-9l1.96 2.5H17V9.5h2.5zm-1.5 9c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"\n}), 'LocalShipping');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z\"\n}), 'LibraryAdd');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12.5 6.9c1.42 0 2.13.54 2.39 1.4.13.43.56.7 1.01.7h.06c.7 0 1.22-.71.97-1.36-.44-1.15-1.41-2.08-2.93-2.45V4.5c0-.83-.67-1.5-1.5-1.5S11 3.67 11 4.5v.66c-.39.08-.75.21-1.1.36l1.51 1.51c.32-.08.69-.13 1.09-.13zM4.77 4.62c-.39.39-.39 1.02 0 1.41L7.5 8.77c0 2.08 1.56 3.22 3.91 3.91l3.51 3.51c-.34.49-1.05.91-2.42.91-1.65 0-2.5-.59-2.83-1.43-.15-.39-.49-.67-.9-.67H8.6c-.72 0-1.24.74-.95 1.39.59 1.33 1.89 2.12 3.36 2.44v.67c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-.65c.96-.18 1.83-.55 2.46-1.12l1.51 1.51c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L6.18 4.62a.9959.9959 0 00-1.41 0z\"\n}), 'MoneyOffRounded');\n\nexports.default = _default;","import * as React from 'react';\nimport { IconButton } from '@material-ui/core';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport { DRAWER_EXPANDED_EVENT, getDrawerExpanded, setDrawerExpanded } from '../../utils/drawerExpanded';\n\ninterface IDrawerExpandButtonProps {\n  className?: string;\n}\n\n/**\n * Toggles the shared drawer \"expanded\" flag. Self-contained: it holds its own\n * mirror of the persisted state and re-renders in sync with any other listener\n * via the DRAWER_EXPANDED_EVENT / storage events (see utils/drawerExpanded).\n * Only mounted when a drawer supports expanding, so hidden drawers attach no\n * listeners.\n */\nconst DrawerExpandButton: React.FC<IDrawerExpandButtonProps> = ({ className }) => {\n  const [expanded, setExpanded] = React.useState<boolean>(getDrawerExpanded());\n\n  React.useEffect(() => {\n    const sync = () => setExpanded(getDrawerExpanded());\n    window.addEventListener(DRAWER_EXPANDED_EVENT, sync);\n    window.addEventListener('storage', sync);\n    return () => {\n      window.removeEventListener(DRAWER_EXPANDED_EVENT, sync);\n      window.removeEventListener('storage', sync);\n    };\n  }, []);\n\n  return (\n    <IconButton\n      onClick={() => setDrawerExpanded(!expanded)}\n      color='inherit'\n      size='small'\n      className={className}\n    >\n      {expanded ? <RemoveIcon /> : <LaunchIcon />}\n    </IconButton>\n  );\n};\n\nexport default DrawerExpandButton;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 13H5v-2h14v2z\"\n}), 'Remove');\n\nexports.default = _default;","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n **/\n\nexport default function createDetectElementResize(nonce) {\n  // Check `document` and `window` in case of server-side rendering\n  var _window;\n  if (typeof window !== 'undefined') {\n    _window = window;\n  } else if (typeof self !== 'undefined') {\n    _window = self;\n  } else {\n    _window = global;\n  }\n\n  var attachEvent = typeof document !== 'undefined' && document.attachEvent;\n\n  if (!attachEvent) {\n    var requestFrame = function () {\n      var raf = _window.requestAnimationFrame || _window.mozRequestAnimationFrame || _window.webkitRequestAnimationFrame || function (fn) {\n        return _window.setTimeout(fn, 20);\n      };\n      return function (fn) {\n        return raf(fn);\n      };\n    }();\n\n    var cancelFrame = function () {\n      var cancel = _window.cancelAnimationFrame || _window.mozCancelAnimationFrame || _window.webkitCancelAnimationFrame || _window.clearTimeout;\n      return function (id) {\n        return cancel(id);\n      };\n    }();\n\n    var resetTriggers = function resetTriggers(element) {\n      var triggers = element.__resizeTriggers__,\n          expand = triggers.firstElementChild,\n          contract = triggers.lastElementChild,\n          expandChild = expand.firstElementChild;\n      contract.scrollLeft = contract.scrollWidth;\n      contract.scrollTop = contract.scrollHeight;\n      expandChild.style.width = expand.offsetWidth + 1 + 'px';\n      expandChild.style.height = expand.offsetHeight + 1 + 'px';\n      expand.scrollLeft = expand.scrollWidth;\n      expand.scrollTop = expand.scrollHeight;\n    };\n\n    var checkTriggers = function checkTriggers(element) {\n      return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height;\n    };\n\n    var scrollListener = function scrollListener(e) {\n      // Don't measure (which forces) reflow for scrolls that happen inside of children!\n      if (e.target.className && typeof e.target.className.indexOf === 'function' && e.target.className.indexOf('contract-trigger') < 0 && e.target.className.indexOf('expand-trigger') < 0) {\n        return;\n      }\n\n      var element = this;\n      resetTriggers(this);\n      if (this.__resizeRAF__) {\n        cancelFrame(this.__resizeRAF__);\n      }\n      this.__resizeRAF__ = requestFrame(function () {\n        if (checkTriggers(element)) {\n          element.__resizeLast__.width = element.offsetWidth;\n          element.__resizeLast__.height = element.offsetHeight;\n          element.__resizeListeners__.forEach(function (fn) {\n            fn.call(element, e);\n          });\n        }\n      });\n    };\n\n    /* Detect CSS Animations support to detect element display/re-attach */\n    var animation = false,\n        keyframeprefix = '',\n        animationstartevent = 'animationstart',\n        domPrefixes = 'Webkit Moz O ms'.split(' '),\n        startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\n        pfx = '';\n    {\n      var elm = document.createElement('fakeelement');\n      if (elm.style.animationName !== undefined) {\n        animation = true;\n      }\n\n      if (animation === false) {\n        for (var i = 0; i < domPrefixes.length; i++) {\n          if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n            pfx = domPrefixes[i];\n            keyframeprefix = '-' + pfx.toLowerCase() + '-';\n            animationstartevent = startEvents[i];\n            animation = true;\n            break;\n          }\n        }\n      }\n    }\n\n    var animationName = 'resizeanim';\n    var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\n    var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\n  }\n\n  var createStyles = function createStyles(doc) {\n    if (!doc.getElementById('detectElementResize')) {\n      //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n      var css = (animationKeyframes ? animationKeyframes : '') + '.resize-triggers { ' + (animationStyle ? animationStyle : '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n          head = doc.head || doc.getElementsByTagName('head')[0],\n          style = doc.createElement('style');\n\n      style.id = 'detectElementResize';\n      style.type = 'text/css';\n\n      if (nonce != null) {\n        style.setAttribute('nonce', nonce);\n      }\n\n      if (style.styleSheet) {\n        style.styleSheet.cssText = css;\n      } else {\n        style.appendChild(doc.createTextNode(css));\n      }\n\n      head.appendChild(style);\n    }\n  };\n\n  var addResizeListener = function addResizeListener(element, fn) {\n    if (attachEvent) {\n      element.attachEvent('onresize', fn);\n    } else {\n      if (!element.__resizeTriggers__) {\n        var doc = element.ownerDocument;\n        var elementStyle = _window.getComputedStyle(element);\n        if (elementStyle && elementStyle.position == 'static') {\n          element.style.position = 'relative';\n        }\n        createStyles(doc);\n        element.__resizeLast__ = {};\n        element.__resizeListeners__ = [];\n        (element.__resizeTriggers__ = doc.createElement('div')).className = 'resize-triggers';\n        element.__resizeTriggers__.innerHTML = '<div class=\"expand-trigger\"><div></div></div>' + '<div class=\"contract-trigger\"></div>';\n        element.appendChild(element.__resizeTriggers__);\n        resetTriggers(element);\n        element.addEventListener('scroll', scrollListener, true);\n\n        /* Listen for a css animation to detect element display/re-attach */\n        if (animationstartevent) {\n          element.__resizeTriggers__.__animationListener__ = function animationListener(e) {\n            if (e.animationName == animationName) {\n              resetTriggers(element);\n            }\n          };\n          element.__resizeTriggers__.addEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n        }\n      }\n      element.__resizeListeners__.push(fn);\n    }\n  };\n\n  var removeResizeListener = function removeResizeListener(element, fn) {\n    if (attachEvent) {\n      element.detachEvent('onresize', fn);\n    } else {\n      element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n      if (!element.__resizeListeners__.length) {\n        element.removeEventListener('scroll', scrollListener, true);\n        if (element.__resizeTriggers__.__animationListener__) {\n          element.__resizeTriggers__.removeEventListener(animationstartevent, element.__resizeTriggers__.__animationListener__);\n          element.__resizeTriggers__.__animationListener__ = null;\n        }\n        try {\n          element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n        } catch (e) {\n          // Preact compat; see developit/preact-compat/issues/228\n        }\n      }\n    }\n  };\n\n  return {\n    addResizeListener: addResizeListener,\n    removeResizeListener: removeResizeListener\n  };\n}","import { IMap } from 'ats-utils/src';\nimport { fromJS } from 'immutable';\nimport * as React from 'react';\nimport { MAX_FILE_SIZE_100MB } from '../constants';\nimport AtsApiContext from '../contexts/AtsApiContext';\nimport { IFileMetaObj } from '../modules/FileModule/saga';\nimport { ERROR_TYPE } from './useFileUpload';\nimport { readUploadResponse } from '../utils/uploadResponse';\n\n// contains basic upload file logic\n// optionally accepts a max file size argument\n// if no argument provided - defaults to max 15MB, and no file type check\n\n// TO USE:\n// the hook provides a setFile cb\n// in the parent component on file change - provide the file to setFile cb\n// i.e. onChange={(e) => setFile(e.target.files[0])}\n// when useFileUploadByAny gets the file, it'll perform all basic upload file duties LOL\n// (i.e. make the upload file call, keep track of loading percentages, and upload errors)\n// it will return the final uploadedFile, loadingPercentage, isUploading flag and uploadedErr\n\nconst useFileUploadByAny = (acceptedExtensions = [], maxFileSize = MAX_FILE_SIZE_100MB) => {\n  const atsApi = React.useContext(AtsApiContext);\n\n  const [file, setFile] = React.useState<File>(null);\n  const [url, setUrl] = React.useState<string>(null);\n  const [uploadedFile, setUploadedFile] = React.useState<IMap<IFileMetaObj>>(null);\n  const [loadingPercentage, setLoadingPercentage] = React.useState<string>(null);\n  const [isUploading, setIsUploading] = React.useState(false);\n  const [uploadErr, setUploadErr] = React.useState<ERROR_TYPE | null>(null);\n\n  React.useEffect(() => {\n    uploadFile();\n  }, [file]);\n\n  React.useEffect(() => {\n    uploadFileByUrl();\n  }, [url]);\n\n  const uploadFile = () => {\n    const fileUploadUrl = atsApi.callApi({\n      service: 'file',\n      endpoint: 'uploadFile',\n      urlOnly: true,\n      withToken: true,\n      withAppId: true,\n    }) as string;\n\n    setUploadErr(null);\n\n    if (!file) {\n      return;\n    }\n\n    if (acceptedExtensions.length && !(new RegExp('(' + acceptedExtensions.join('|').replace(/\\./g, '\\\\.') + ')$', 'i')).test(file.name)) {\n      return setUploadErr(ERROR_TYPE.type);\n    }\n\n    if (file.size > maxFileSize) {\n      return setUploadErr(ERROR_TYPE.size);\n    }\n\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    data.append('file', file);\n    data.append('type', 'file');\n\n    req.open('POST', fileUploadUrl);\n\n    req.upload.addEventListener('progress', (e) => {\n      const percent = Math.round((e.loaded / e.total) * 100);\n      setLoadingPercentage(percent.toFixed(0));\n    });\n\n    req.onloadstart = () => setIsUploading(true);\n\n    req.addEventListener('loadend', (e) => {\n      setIsUploading(false);\n      const { payload, error } = readUploadResponse(req);\n\n      if (error) {\n        console.error('error uploading file', error); //tslint:disable-line\n        return setUploadErr(ERROR_TYPE.failedUpload);\n      }\n\n      const uploaded: IMap<IFileMetaObj> = fromJS(payload.file.files[0]);\n      setUploadedFile(uploaded);\n    });\n\n    req.send(data);\n  };\n\n  const uploadFileByUrl = (_url = url) => {\n    setUploadErr(null);\n\n    if (!_url) {\n      return;\n    }\n\n    const fileUploadUrl = atsApi.callApi({\n      service: 'file',\n      endpoint: 'uploadFileFromUrl',\n      urlOnly: true,\n      withToken: true,\n      withAppId: true,\n    }) as string;\n\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    data.append('url', _url);\n\n    req.open('POST', fileUploadUrl);\n\n    req.upload.addEventListener('progress', (e) => {\n      const percent = Math.round((e.loaded / e.total) * 75);\n      setLoadingPercentage(percent.toFixed(0));\n    });\n\n    req.onloadstart = () => setIsUploading(true);\n\n    req.addEventListener('loadend', (e) => {\n      setIsUploading(false);\n      setLoadingPercentage('100');\n\n      const { payload, error } = readUploadResponse(req);\n\n      if (error || !payload.file?.files?.[0]) {\n        console.error('error uploading file', error); //tslint:disable-line\n        return setUploadErr(ERROR_TYPE.failedUploadFromUrl);\n      }\n\n      // validate file size and type\n      if (payload.file.files[0].size > maxFileSize) {\n        console.error('error uploading file - file size over limit'); //tslint:disable-line\n        return setUploadErr(ERROR_TYPE.sizeFromUrl);\n      } else if (acceptedExtensions.length && !(new RegExp('(' + acceptedExtensions.join('|').replace(/\\./g, '\\\\.') + ')$', 'i')).test(payload.file.files[0].origFileName)) {\n        console.error('error uploading file - file type not allowed'); //tslint:disable-line\n        return setUploadErr(ERROR_TYPE.typeFromUrl);\n      }\n\n      const uploaded: IMap<IFileMetaObj> = fromJS(payload.file.files[0]);\n      setUploadedFile(uploaded);\n    });\n\n    req.send(data);\n  };\n\n  return {\n    fileState: {\n      uploadedFile,\n      loadingPercentage,\n      isUploading,\n      uploadErr,\n    },\n    setUploadErr,\n    setFile,\n    setUrl,\n    uploadFileByUrl,\n  } as const;\n};\n\nexport default useFileUploadByAny;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l4 4 4-4H6z\"\n}), 'Cached');\n\nexports.default = _default;","import * as React from 'react';\nimport { useState } from 'react';\nimport { Field } from 'redux-form/immutable';\nimport { BaseFieldProps } from 'redux-form';\nimport { useTranslation } from 'react-i18next';\nimport FieldAutocomplete, { IFieldAutocompleteComponentProps } from '../FieldAutocomplete';\nimport UserOfficeDisplay, { renderUserOfficeTags } from '../UserOfficeDisplay';\nimport useAssignableUserSearch from '../../hooks/useAssignableUserSearch';\nimport useTightTooltip from '../../hooks/useTightTooltip';\n\ninterface IAssignedToProps {\n  multiple?: boolean;\n  canSearchFirmUsers?: boolean;\n}\n\nconst AssignedTo: React.FC<IAssignedToProps> = ({ multiple = false, canSearchFirmUsers = false }) => {\n  const { t } = useTranslation('translations');\n  const tightTooltipClasses = useTightTooltip();\n  const {\n    userOptions,\n    searchTerm,\n    setSearchTerm,\n    searchUsersFromFirm,\n    setSearchUsersFromFirm,\n    showInitialUsers,\n  } = useAssignableUserSearch({ canSearchFirm: canSearchFirmUsers });\n  const [initSearchTerm, setInitSearchTerm] = useState('');\n\n  const renderOption = (option) => <UserOfficeDisplay name={option.fullName} officeName={option.officeName} />;\n\n  const paperToggleProps = {\n    paperToggle: canSearchFirmUsers,\n    paperToggleChecked: !searchUsersFromFirm,\n    paperToggleLabel: t('quoteInfo.showMyOfficeOnly'),\n    onPaperToggleChange: (checked: boolean) => setSearchUsersFromFirm(!checked),\n  };\n\n  if (multiple) {\n    return (\n      <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n        name='assignedTo'\n        component={FieldAutocomplete}\n        props={{\n          inputProps: {\n            label: t('quoteInfo.assignedToLabel'),\n            placeholder: t('quoteInfo.assignedToPlaceholder'),\n            options: userOptions,\n            multiple,\n            filterSelectedOptions: true,\n            inputValue: searchTerm,\n            getOptionSelected: (option, value) => option.id === value.id,\n            getOptionLabel: (option) => option ? option.fullName || '' : '',\n            onInputChange: (event: object, val: string, reason: string) => {\n              if (reason !== 'reset' || (reason === 'reset' && event)) {\n                setSearchTerm(val);\n              }\n            },\n            renderOption,\n            renderTags: renderUserOfficeTags(tightTooltipClasses),\n            ...paperToggleProps,\n          },\n          formControlProps: {\n            fullWidth: true,\n          },\n        }}\n      />\n    );\n  }\n\n  return (\n    <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n      name='assignedTo'\n      component={FieldAutocomplete}\n      props={{\n        inputProps: {\n          label: t('quoteInfo.assignedToLabel'),\n          placeholder: t('quoteInfo.assignedToPlaceholder'),\n          options: userOptions,\n          filterSelectedOptions: true,\n          inputValue: searchTerm,\n          onOpen: () => {\n            showInitialUsers();\n          },\n          getOptionSelected: (option, value) => option.id === value.id,\n          getOptionLabel: (option) => option ? option.fullName || '' : '',\n          onInputChange: (event: object, val: string, reason: string) => {\n            if (reason !== 'reset' || (reason === 'reset' && event)) {\n              setSearchTerm(val);\n            } else if (!event && val !== initSearchTerm) {\n              setInitSearchTerm(val);\n              setSearchTerm(val);\n            } else if (!val) {\n              setSearchTerm('');\n            }\n          },\n          renderOption,\n          inputTooltip: (option) => option ? option.officeName || '' : '',\n          inputTooltipPlacement: 'bottom-start',\n          inputTooltipClasses: tightTooltipClasses,\n          ...paperToggleProps,\n        },\n        formControlProps: {\n          fullWidth: true,\n        },\n      }}\n    />\n  );\n};\n\nexport default AssignedTo;\n","import { makeStyles } from '@material-ui/core';\n\n// Tighten the default MUI tooltip gap (14px desktop / 24px mobile). The bottom class covers both\n// 'bottom' and 'bottom-start' since MUI keys the class on placement.split('-')[0].\nconst useStyles = makeStyles({\n  tooltipBottom: {\n    margin: '3px 0',\n  },\n});\n\n// Returns a `classes` object ready to pass to a MUI Tooltip's `classes` prop.\nexport const useTightTooltip = () => {\n  const { tooltipBottom } = useStyles();\n  return { tooltipPlacementBottom: tooltipBottom };\n};\n\nexport default useTightTooltip;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M24 24H0V0h24v24z\"\n})), 'Http');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16.5 6.75v10.58c0 2.09-1.53 3.95-3.61 4.15-2.39.23-4.39-1.64-4.39-3.98V5.14c0-1.31.94-2.5 2.24-2.63 1.5-.15 2.76 1.02 2.76 2.49v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6.75c0-.41-.34-.75-.75-.75s-.75.34-.75.75v8.61c0 1.31.94 2.5 2.24 2.63 1.5.15 2.76-1.02 2.76-2.49V5.17c0-2.09-1.53-3.95-3.61-4.15C9.01.79 7 2.66 7 5v12.27c0 2.87 2.1 5.44 4.96 5.71 3.29.3 6.04-2.26 6.04-5.48V6.75c0-.41-.34-.75-.75-.75s-.75.34-.75.75z\"\n}), 'AttachFileRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z\"\n}), 'NoteAdd');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11 18h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1zm-6 0h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1zM16 6v11c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1z\"\n}), 'ViewColumnRounded');\n\nexports.default = _default;","export default \"data:image/png;base64,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\"","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"\n}), 'KeyboardArrowLeft');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"\n}), 'KeyboardArrowRight');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z\"\n}), 'ZoomOut');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\"\n}), 'Share');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  TableCell,\n  Tooltip,\n} from '@material-ui/core';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport WidgetsIcon from '@material-ui/icons/Widgets';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\ninterface ISeriesTypeCellProps {\n  isConfigurator: boolean;\n}\n\ntype SeriesTypeCellProps = ISeriesTypeCellProps & WithTranslation;\n\nconst SeriesTypeCell: React.FC<SeriesTypeCellProps> = (props) => {\n  const {\n    isConfigurator,\n    t\n  } = props;\n\n  return (\n    <TableCell\n      style={{ textAlign: 'center' }}\n    >\n      {\n        isConfigurator\n          ? <Tooltip title={t('SeriesDetailPage.advancedConfigurationTooltip')} placement='bottom-start'>\n              <WidgetsIcon color='action' />\n            </Tooltip>\n          : <Tooltip title={t('SeriesDetailPage.basicConfigurationTooltip')} placement='bottom-start'>\n              <AccountTreeIcon color='action' />\n            </Tooltip>\n      }\n    </TableCell>\n  );\n};\n\nexport default withTranslation('translations')(SeriesTypeCell);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), _react.default.createElement(\"path\", {\n  d: \"M13.12 2.06L7.58 7.6c-.37.37-.58.88-.58 1.41V19c0 1.1.9 2 2 2h9c.8 0 1.52-.48 1.84-1.21l3.26-7.61C23.94 10.2 22.49 8 20.34 8h-5.65l.95-4.58c.1-.5-.05-1.01-.41-1.37-.59-.58-1.53-.58-2.11.01zM3 21c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2s-2 .9-2 2v8c0 1.1.9 2 2 2z\"\n})), 'ThumbUpAltRounded');\n\nexports.default = _default;","/* tslint:disable */ \nimport * as React from 'react';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n} from '@material-ui/core';\nimport {\n  Image,\n} from '../../../../components';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\n\nexport type variants = 'compact' | 'default';\n\ninterface IEmptyWidgetContent {\n  image?: string;\n  children?: React.ReactNode;\n  SvgElement?: JSX.Element;\n}\n\ntype IEmptyWidget = IEmptyWidgetContent & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1\n  },\n  imageContainer: {\n    width: '96px'\n  },\n  content: {\n    textAlign: 'center'\n  }\n});\n\nconst EmptyWidgetContent: React.FC<IEmptyWidget> = ({\n  classes,\n  children,\n  image,\n  SvgElement,\n}) => {\n\n  return (\n    <Grid\n      container={true}\n      direction='column'\n      justify='center'\n      alignItems='center'\n      className={classes.root}\n    >\n      { \n        image\n        ? (<Grid\n            item={true}\n            className={classes.imageContainer}\n          >\n            <Image\n              src={image || ''}\n              aspectRatio={'100%'}\n            />\n          </Grid>)\n        : SvgElement\n      }\n      <Grid\n        className={classes.content}\n      >\n        {children}\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default withStyles(styles)(EmptyWidgetContent);\n","import { Button, createStyles, makeStyles, TableCell, TableRow, Theme } from '@material-ui/core';\nimport * as React from 'react';\nimport ThumbUpRoundedIcon from '@material-ui/icons/ThumbUpRounded';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { List } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport RecommendedAttribute from '../../../../models/RecommendedAttribute';\nimport { Attribute } from '../../../../models';\nimport { useSelector } from 'react-redux';\nimport { makeSelectIsPimTool } from '../../../../modules/AtsModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  noWrap: {\n    whiteSpace: 'nowrap',\n  },\n  grey: {\n    color: theme.palette.grey[600],\n  },\n  noPadding: {\n    padding: 0,\n  }\n}));\n\ninterface IRecommendedRowsComponentProps {\n  filteredRecommendedAttributes: List<IMap<RecommendedAttribute>>;\n  openAttributeDialog: (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => void;\n  openOptionsDialog?: (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => void;\n  setAnchorEl?: (anchorEl: HTMLElement | null) => void;\n  setMenuContent?: (menuContent: object[] | null) => void;\n}\n\ntype RecommendedRowsProps = IRecommendedRowsComponentProps & WithTranslation;\nconst RecommendedRows: React.FC<RecommendedRowsProps> = ({\n  t,\n  filteredRecommendedAttributes,\n  openAttributeDialog,\n  openOptionsDialog,\n  setAnchorEl,\n  setMenuContent,\n}) => {\n  const classes = useStyles();\n  const isPimTool = useSelector(makeSelectIsPimTool());\n\n  return (\n    <>\n      {\n        filteredRecommendedAttributes && filteredRecommendedAttributes\n        .map((recommendedAttr, index) => {\n          const name = recommendedAttr?.get('name');\n          const attributeKey = recommendedAttr?.get('attributeKey');\n          return (\n            <TableRow\n              key={index}\n            >\n              <TableCell className={classes.noPadding}><ThumbUpRoundedIcon fontSize='small' className={classes.grey}/></TableCell>\n              <TableCell component='th' scope='row'>{name}</TableCell>\n              <TableCell align='left'>{attributeKey}</TableCell>\n              { !isPimTool && <TableCell align='left' /> }\n              { !isPimTool && <TableCell align='left' /> }\n              { !isPimTool && <TableCell align='left' /> }\n              { !isPimTool && <TableCell align='center' /> }\n              <TableCell align='center' className={classes.noWrap}>\n                {\n                  isPimTool\n                    ? <Button\n                        color='primary'\n                        onClick={(e) => {\n                          setAnchorEl(e.currentTarget);\n                          setMenuContent([\n                            {\n                              label: t('pimUnlistedAttributesWidget.addToFeatures'),\n                              handleClick: () => openAttributeDialog(recommendedAttr)\n                            },\n                            {\n                              label: t('pimUnlistedAttributesWidget.addToOptions'),\n                              handleClick: () => {\n                                openOptionsDialog(recommendedAttr);\n                              }\n                            }\n                          ]);\n                        }}\n                      >\n                        {t('formButtons.action')}\n                      </Button>\n                    : <Button\n                        color='primary'\n                        onClick={() => openAttributeDialog(recommendedAttr)}\n                      >\n                        {t('AttributesDialog.addAttribute')}\n                      </Button>\n                }\n              </TableCell>\n            </TableRow>\n          );\n        })\n      }\n    </>\n  );\n};\n\nexport default withTranslation('translations')(RecommendedRows);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\"\n}), 'ArrowDownward');\n\nexports.default = _default;","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Button,\n  Grid,\n  FormHelperText,\n  Chip,\n  Typography,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { StyleRules } from '@material-ui/styles';\nimport { createStructuredSelector } from 'reselect';\nimport { FieldAutocomplete, FieldTextField } from '../../../components';\nimport { AttributeTag, Category, ListItem, Manufacturer, PureAttributeOption } from '../../../models';\nimport { Field } from 'redux-form/immutable';\nimport { BaseFieldProps } from 'redux-form';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport { isNotEmptyStringRequired } from '../../../validators';\nimport { List } from 'immutable';\nimport {\n    makeSelectCategory,\n    makeSelectToolSpecificManufacturers,\n    selectBrandRep, selectBrandRepCategoryByManufacturer, selectBrandRepManufacturerByCategory,\n    selectIsLoadingBrandRep\n} from '../../../modules/AccountModule/selectors';\nimport {\n    GetBrandRepAction,\n    GetBrandRepCategoriesAction,\n    GetManufacturersAction\n} from '../../../modules/AccountModule/actions';\nimport { IAttributeTag } from '../../PimAttributesListPage/AttributeDialog';\nimport { makeSelectIsSearchingPureAttributeOptionsSecondary, makeSelectPureAttributeOptionsSecondary } from '../../../modules/PimModule/selectors';\nimport LockIcon from '@material-ui/icons/Lock';\n\ninterface IOptionFieldsContentComponentProps {\n  manufacturer: ListItem;\n  category: ListItem;\n  tags: IMap<Map<string, IAttributeTag>>;\n  emptyTagError: boolean;\n  valueInput?: string;\n  hasSelectedOption?: boolean;\n  handleAddTag: () => void;\n  handleDeleteTag: (tag: IAttributeTag) => void;\n  valueOnChange?: (e: any, value: string) => void;\n  valueAutocompleteOnInputChange?: (event: object, val: string, reason: string) => void;\n  valueAutocompleteOnChange?: (val: any) => void;\n}\n\ninterface IOptionFieldsContentProps extends IOptionFieldsContentComponentProps {\n  manufacturers: List<IMap<Manufacturer>>;\n  categories: List<IMap<Category>>;\n  attributeOptions: List<IMap<PureAttributeOption>>;\n  isSearchingAttributeOptions: boolean;\n  getManufacturers: () => void;\n  getCategories: () => void;\n  getBrandRep: () => void;\n  brandRep: List<IMap<AttributeTag>>;\n  categoryByManufacturer: {[index: string]: number[] | null};\n  manufacturerByCategory: {[index: string]: number[] | null};\n}\n\ntype IOptionFieldsContent = IOptionFieldsContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\nconst styles = (theme: Theme): StyleRules => ({\n  subtitle: {\n    margin: theme.spacing(1.5, 0, .5, 0)\n  },\n  chipsContainer: {\n    backgroundColor: theme.palette.grey[200],\n    padding: theme.spacing(1, .5)\n  },\n  chip: {\n    margin: theme.spacing(.25)\n  },\n  optionHoverStyle: {\n    '&[aria-disabled=\"true\"]': {\n      '&:hover': {\n        background: 'white !important',\n      },\n      '&:focus': {\n        background: 'white !important',\n      }\n    }\n  }\n});\n\nconst OptionFields = (OptionFieldsProps: IOptionFieldsContent) => {\n  const {\n    classes,\n    emptyTagError,\n    manufacturer,\n    category,\n    tags,\n    manufacturers,\n    categories,\n    attributeOptions,\n    isSearchingAttributeOptions,\n    hasSelectedOption,\n    valueInput,\n    getManufacturers,\n    getCategories,\n    handleAddTag,\n    handleDeleteTag,\n    valueOnChange,\n    valueAutocompleteOnInputChange,\n    valueAutocompleteOnChange,\n    t,\n    getBrandRep,\n    brandRep,\n    categoryByManufacturer,\n    manufacturerByCategory,\n  } = OptionFieldsProps;\n\n  const categoryOptions = React.useMemo(() => {\n      return categories.toJS();\n      //     .filter((_category) => {\n      //     const hasSelectedManufacturer: boolean = manufacturer !== undefined && manufacturer !== null;\n      //     if (hasSelectedManufacturer) {\n      //         return (\n      //             categoryByManufacturer[manufacturer.id] === null || // manufacturer support all category\n      //             categoryByManufacturer[manufacturer.id]?.includes(_category.id) || // category is one of categories that manufacturer supports\n      //             manufacturerByCategory[_category.id] === null //  this category is supported by all the manufacturer\n      //         );\n      //     } else {\n      //         return true;\n      //     }\n      // });\n  }, [categories, categoryByManufacturer, manufacturerByCategory, manufacturer]);\n    const manufacturerOptions = React.useMemo(() => {\n        return manufacturers.toJS().filter((_manufacturer) => {\n            const hasSelectedCategory: boolean = category !== undefined && category !== null;\n            if (hasSelectedCategory) {\n                return (\n                    manufacturerByCategory[category.id] === null || // the category support all manufacturer\n                    manufacturerByCategory[category.id]?.includes(_manufacturer.id) || // manufacturer is one of manufacturers that category supports\n                    categoryByManufacturer[_manufacturer.id] === null //  this manufacturer is supported by all the category\n                );\n            } else {\n                return true;\n            }\n        });\n    }, [manufacturers, categoryByManufacturer, manufacturerByCategory, category]);\n  React.useEffect(() => {\n    if (!brandRep.count()) {\n        getBrandRep();\n    }\n    if (!manufacturers.count()) {\n      getManufacturers();\n    }\n    if (!categories.count()) {\n      getCategories();\n    }\n  }, []);\n\n  return (\n    <>\n      <Grid item={true}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          name='description'\n          component={FieldTextField}\n          props={{\n            require: true,\n            formControlProps: {\n              fullWidth: true\n            },\n            label: t('pureAttributeOptionDialog.descriptionLabel'),\n            inputProps: {\n              placeholder: t('pureAttributeOptionDialog.descriptionPlaceholder')\n            }\n          }}\n          validate={[\n            isNotEmptyStringRequired\n          ]}\n        />\n      </Grid>\n      <Grid item={true}>\n        <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n          name='unit'\n          component={FieldTextField}\n          props={{\n            formControlProps: {\n              fullWidth: true\n            },\n            label: t('pureAttributeOptionDialog.unitLabel'),\n            inputProps: {\n              placeholder: t('pureAttributeOptionDialog.unitPlaceholder')\n            }\n          }}\n        />\n      </Grid>\n      <Grid item={true}>\n        {\n          valueAutocompleteOnInputChange && valueAutocompleteOnChange\n            ? (\n                <>\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='value'\n                    component={FieldAutocomplete}\n                    validate={valueInput?.trim() ? null : [isNotEmptyStringRequired]}\n                    props={{\n                      require: true,\n                      inputProps: {\n                        options: attributeOptions.toJS(),\n                        freeSolo: !hasSelectedOption,\n                        inputValue: valueInput || '',\n                        label: t('pureAttributeOptionDialog.valueLabel'),\n                        placeholder: t('pureAttributeOptionDialog.valuePlaceholder'),\n                        getOptionLabel: option => option ? option.value?.toString() || valueInput?.toString() || null : null,\n                        renderOption: option => option && (\n                          <Tooltip title={`Select this option to edit its detail`}>\n                            <Typography color='textPrimary'>{option.value}</Typography>\n                          </Tooltip>\n                        ),\n                        onInputChange: valueAutocompleteOnInputChange,\n                        onChange: valueAutocompleteOnChange,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      helperText: !hasSelectedOption\n                    }}\n                  />\n                  {\n                    hasSelectedOption && <Typography variant='caption' color='primary'>{'*The Value field of existing options cannot be edited'}</Typography>\n                  }\n                </>\n              )\n            : (\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  name='value'\n                  component={FieldTextField}\n                  onChange={valueOnChange ? valueOnChange : null}\n                  props={{\n                    require: true,\n                    formControlProps: {\n                      fullWidth: true\n                    },\n                    label: t('pureAttributeOptionDialog.valueLabel'),\n                    inputProps: {\n                      placeholder: t('pureAttributeOptionDialog.valuePlaceholder')\n                    }\n                  }}\n                  validate={[\n                    isNotEmptyStringRequired\n                  ]}\n                />\n              )\n        }\n      </Grid>\n      <Typography className={classes.subtitle} color='textPrimary'>\n        {t('pureAttributeOptionDialog.tagSubtitle') + ' *'}\n      </Typography>\n      <Grid\n        item={true}\n        xs={12}\n      >\n        <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n          name='manufacturer'\n          component={FieldAutocomplete}\n          props={{\n            inputProps: {\n              options: manufacturerOptions,\n              label: t('pureAttributeOptionDialog.manufacturerLabel'),\n              placeholder: t('pureAttributeOptionDialog.manufacturerPlaceholder'),\n              getOptionLabel: option => option ? option.value : null,\n              renderOption: option => option && <Typography>{option.value}</Typography>\n            },\n            formControlProps: {\n              fullWidth: true\n            }\n          }}\n        />\n      </Grid>\n      <Grid\n        item={true}\n        xs={12}\n      >\n        <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n          name='category'\n          component={FieldAutocomplete}\n          props={{\n            inputProps: {\n              options: categoryOptions,\n              label: t('pureAttributeOptionDialog.categoryLabel'),\n              placeholder: t('pureAttributeOptionDialog.categoryPlaceholder'),\n              getOptionLabel: option => option ? option.value : null,\n              getOptionDisabled: option => option.isLocked,\n              renderOption: (option, state) => {\n                const isCategoryLocked = option.isLocked;\n                return option && <Grid container={true} direction='row' justify='space-between'>\n                    <Typography>{option.value}</Typography>\n                    {isCategoryLocked &&\n                      <Tooltip title={t('pureAttributeOptionDialog.lockedCategoryTooltip')}>\n                        <LockIcon fontSize='small' style={{fontSize: 18, pointerEvents: 'auto'}} onClick={(e) => e.stopPropagation()}/>\n                      </Tooltip>\n                    }\n                  </Grid>;\n              },\n              classes: {option: classes.optionHoverStyle},\n            },\n            formControlProps: {\n              fullWidth: true\n            }\n          }}\n        />\n      </Grid>\n      <Grid style={{ textAlign: 'right' }}>\n        <Button\n          color='primary'\n          disabled={!manufacturer || !category}\n          onClick={handleAddTag}\n        >\n          {t('pureAttributeOptionDialog.addToOption')}\n        </Button>\n      </Grid>\n      <Grid className={classes.chipsContainer}>\n        {\n          tags?.toIndexedSeq().map((tag: IAttributeTag, index) => (\n            <Chip\n              key={index}\n              label={`${tag.manufacturer.name} - ${tag.category.name}`}\n              disabled={tag.disabled}\n              onDelete={() => handleDeleteTag(tag)}\n              className={classes.chip}\n            />\n          ))\n        }\n      </Grid>\n      <FormHelperText error={true}>{emptyTagError ? t('pureAttributeOptionDialog.emptyTagsError') : ''}</FormHelperText>\n    </>\n  );\n};\n\nconst mapStateToProps = (state: any) => createStructuredSelector({\n  manufacturers: makeSelectToolSpecificManufacturers(),\n  categories: makeSelectCategory(),\n  attributeOptions: makeSelectPureAttributeOptionsSecondary(),\n  isSearchingAttributeOptions: makeSelectIsSearchingPureAttributeOptionsSecondary(),\n  brandRep: selectBrandRep,\n  categoryByManufacturer: selectBrandRepCategoryByManufacturer,\n  manufacturerByCategory: selectBrandRepManufacturerByCategory,\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getManufacturers: () => {\n      dispatch(new GetManufacturersAction());\n    },\n    getCategories: () => {\n      dispatch(new GetBrandRepCategoriesAction());\n    },\n    getBrandRep: () => {\n        dispatch(new GetBrandRepAction());\n    }\n  };\n};\n\nexport default compose<React.ComponentClass<IOptionFieldsContentComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(OptionFields);","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import { Button, createStyles, Dialog, DialogActions, DialogContent, Grid, makeStyles, Theme, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  productNumberDialogRoot: {\n    maxWidth: 665\n  },\n  dialogTitle: {\n    marginBottom: theme.spacing(2)\n  },\n}));\n\ninterface IProductNumberDialogComponentProps {\n  open: boolean;\n  onClose: () => void;\n  onConfirm: () => void;\n}\n\ninterface IProductNumberDialogProps extends IProductNumberDialogComponentProps {\n}\n\n\nconst ProductNumberDialog: React.FC<IProductNumberDialogProps> = ({\n  open,\n  onClose,\n  onConfirm,\n}) => {\n\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      classes={{\n        paper: classes.productNumberDialogRoot\n      }}\n    >\n      <DialogContent>\n        <Grid container={true}>\n          <Grid item={true} xs={1}>\n            <InfoOutlinedIcon color='primary' fontSize='large' />\n          </Grid>\n          <Grid item={true} xs={11}>\n            <Typography variant='h6' color='textPrimary' className={classes.dialogTitle}>\n              { t('pimProductDrawer.productNumberDialogTitle') }\n            </Typography>\n            <Typography variant='body2' color='textPrimary'>\n              { t('pimProductDrawer.productNumberDialogSubtitle') }\n            </Typography>\n          </Grid>\n        </Grid>\n      </DialogContent>\n      <DialogActions>\n        <Button\n          onClick={onClose}\n          color='primary'\n        >\n          { t('formButtons.cancel') }\n        </Button>\n        <Button\n          onClick={onConfirm}\n          color='primary'\n        >\n          { t('formButtons.yes') }\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nexport default ProductNumberDialog;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n}), 'InfoOutlined');\n\nexports.default = _default;","import { createStyles, FormControl, Grid, IconButton, Link, makeStyles, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { Map } from 'immutable';\nimport * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { SeriesProductFile } from '../../../models';\nimport { Delete } from '@material-ui/icons';\nimport Language from '../../../models/Language';\nimport { useTranslation } from 'react-i18next';\nimport { isURL } from '../../../pages/SeriesEditPage/Attachments/EditLink';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  url: {\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis'\n  },\n  button: {\n    padding: '3px 16px', // need to make the list items line up 0-0\n  },\n  input: {\n    padding: theme.spacing(0.5, 1.75),\n    fontSize: theme.typography.body1.fontSize,\n  },\n  icon: {\n    color: theme.palette.grey[600],\n  },\n  noMargin: {\n    marginLeft: 0,\n    marginRight: 0,\n  }\n}));\n\ninterface ILinkItemComponentProps {\n  formName: string;\n  mediaKey: any;\n  selectedLanguage: Language;\n}\n\n\nconst LinkItem: React.FC<ILinkItemComponentProps> = ({\n  formName,\n  selectedLanguage,\n  mediaKey,\n}) => {\n\n  const {\n    key,\n    label,\n  } = mediaKey;\n\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const formValues = useSelector(getFormValues(formName)) as Map<string, any>;\n  const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n  const url = formFile.getIn(['links', selectedLanguage, key, 'url']);\n\n  const [errorText, setErrorText] = React.useState('');\n  const [value, setValue] = React.useState(url || '');\n\n  React.useEffect(() => {\n    setValue(url || '');\n  }, [url, selectedLanguage]);\n\n  const onAttachLink = () => {\n    setErrorText('');\n\n    if (value && isURL(value)) {\n      const updated = formFile.setIn(['links', selectedLanguage, key, 'url'], value).deleteIn(['links', key]);\n      dispatch(change(formName, 'file', updated));\n    } else if (value && !isURL(value)) {\n      setErrorText(t('errors.isExternalLink'));\n    }\n  };\n\n  const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setValue(e.target.value);\n  };\n\n  const handleDeleteUrl = () => {\n    const updated = formFile.deleteIn(['links', selectedLanguage, key]).deleteIn(['links', key]);\n    dispatch(change(formName, `file`, updated));\n  };\n\n  return (\n    <Grid\n      container={true}\n      direction='column'\n    >\n      <Typography color='textPrimary'>\n        { t(label) }\n      </Typography>\n      <Grid\n        container={true}\n        direction='row'\n        justify='space-between'\n        alignItems='center'\n        style={{ minHeight: 36, marginBottom: 12 }}\n      >\n        {\n          url\n            ? <>\n                <Grid item={true} xs={9}>\n                  <Link href={url} variant='body1' target='_blank' rel='noopener' style={{ wordBreak: 'break-all' }}>{url}</Link>\n                </Grid>\n                <IconButton onClick={handleDeleteUrl} style={{ width: 36, height: 36 }}>\n                  <Tooltip title={t('formButtons.delete')}>\n                    <Delete />\n                  </Tooltip>\n                </IconButton>\n              </>\n            : <>\n                <Grid item={true} xs={9}>\n                  <FormControl\n                    fullWidth={true}\n                  >\n                    <TextField\n                      type='text'\n                      variant='outlined'\n                      placeholder={t('pimProductDrawer.urlPlaceholder')}\n                      value={value}\n                      onChange={onChange}\n                      InputProps={{\n                        classes: {\n                          input: classes.input,\n                        }\n                      }}\n                      FormHelperTextProps={{\n                        margin: 'dense',\n                        classes: {\n                          contained: classes.noMargin,\n                        }\n                      }}\n                      error={Boolean(errorText)}\n                      helperText={errorText}\n                    />\n                  </FormControl>\n                </Grid>\n                <IconButton onClick={onAttachLink} style={{ width: 36, height: 36 }}>\n                  <Tooltip title={t('SeriesDetailPage.attachLink')}>\n                    <AttachFileIcon />\n                  </Tooltip>\n                </IconButton>\n              </>\n        }\n      </Grid>\n    </Grid>\n  );\n};\n\nexport default LinkItem;","import * as React from 'react';\nimport { Grid } from '@material-ui/core';\nimport { WidgetHeaderStyle, WidgetLoaderStyle } from '../../../../components';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport UnlistedAttributes, { SeriesType } from './UnlistedAttributes';\n\ninterface IUnlistedAttributesWidgetComponentProps {\n  formName: string;\n  seriesType: SeriesType;\n}\n\nconst UnlistedAttributesWidget: React.FC<IUnlistedAttributesWidgetComponentProps & WithTranslation> = (props) => {\n  const {\n    formName,\n    seriesType,\n    t,\n  } = props;\n\n  return (\n    <WidgetLoaderStyle\n      noAuto={true}\n      header={\n        <Grid container={true}>\n          <Grid container={true} item={true} xs={true} alignItems='center'>\n            <WidgetHeaderStyle>\n              {t('pimUnlistedAttributesWidget.unlistedAttributes')}\n            </WidgetHeaderStyle>\n          </Grid>\n          <UnlistedAttributes formName={formName} seriesType={seriesType} />\n        </Grid>\n      }\n    />\n  );\n};\n\nexport default compose<React.FC<IUnlistedAttributesWidgetComponentProps>>(\n  withTranslation('translations'),\n)(UnlistedAttributesWidget);\n\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 16h2v-2h-2v2zm0-9v5h2V7h-2zM10 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 10c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"\n}), 'DiscFull');\n\nexports.default = _default;","import * as React from 'react';\nimport { Grid, Typography, Theme, Tooltip, Backdrop, IconButton } from '@material-ui/core';\nimport { StyleRules, WithStyles, withStyles } from '@material-ui/styles';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectAtsApiIdentity } from '../../modules/ApplicationModule/selectors';\nimport { IS_PRODUCTION } from '../../constants';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport AddIcon from '@material-ui/icons/Add';\nimport ZoomOutIcon from '@material-ui/icons/ZoomOut';\nimport classnames from 'classnames';\n\ninterface IImageViewerComponentProps {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  fileId: string;\n  fileName: string;\n}\n\ninterface IImageViewerProps extends IImageViewerComponentProps {\n  atsApiIdentity: boolean;\n}\n\ntype ImageViewerProps = IImageViewerProps & WithTranslation & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n  backdrop: {\n    zIndex: theme.zIndex.drawer + 1,\n    backgroundColor: 'rgba(0, 0, 0, 0.7)'\n  },\n  topControlContainer: {\n    width: '100%',\n    position: 'absolute',\n    top: 0,\n    background: 'linear-gradient(to bottom, rgba(0,0,0,.6) 0%,rgba(0,0,0,0) 100%)',\n  },\n  zoomControlContainer: {\n    position: 'absolute',\n    bottom: 24,\n    left: '50%',\n    transform: 'translateX(-50%)',\n    backgroundColor: '#000',\n    borderRadius: theme.shape.borderRadius,\n  },\n  control: {\n    color: '#fff',\n    padding: theme.spacing(),\n  },\n  controlRoot: {\n    borderRadius: theme.shape.borderRadius,\n    '&:hover': {\n      background: 'rgba(170, 170, 170, 0.4)'\n    },\n    '&:disabled': {\n      color: 'rgba(170, 170, 170, 0.4)'\n    },\n  },\n  topControlIcon: {\n    margin: theme.spacing()\n  },\n  zoomControlIcon: {\n    margin: theme.spacing(.25)\n  },\n  img: {\n    width: '100%',\n    '&:active': {\n      cursor: 'move'\n    }\n  }\n});\n\nconst ImageViewer: React.FC<ImageViewerProps> = ({ classes, atsApiIdentity, atsApi, t, open, setOpen, fileId, fileName }): JSX.Element => {\n\n  const imgRef = React.createRef<any>();\n\n  const [zoomFactor, setZoomFactor] = React.useState(1);\n  const [isPanning, setPanning] = React.useState(false);\n  const [position, setPosition] = React.useState({\n    oldX: 0,\n    oldY: 0,\n    x: 0,\n    y: 0\n  });\n\n  React.useEffect(() => {\n    if (open && imgRef && imgRef.current) {\n      imgRef.current.style = '';\n      setZoomFactor(1);\n      setPosition({\n        oldX: 0,\n        oldY: 0,\n        x: 0,\n        y: 0\n      });\n    }\n  }, [open]);\n\n  React.useEffect(() => {\n    if (zoomFactor === 1) {\n      setPosition({\n        oldX: 0,\n        oldY: 0,\n        x: 0,\n        y: 0\n      });\n    }\n  }, [zoomFactor]);\n\n  const zoom = (factor) => {\n    setZoomFactor(factor);\n  };\n\n  const onMouseDown = (e) => {\n    e.preventDefault();\n    if (zoomFactor !== 1) {\n      setPanning(true);\n      setPosition({\n        ...position,\n        oldX: e.clientX,\n        oldY: e.clientY\n      });\n    }\n  };\n\n  const mouseup = () => {\n    setPanning(false);\n  };\n\n  const mousemove = (event) => {\n    if (isPanning) {\n      setPosition({\n        x: position.x + event.clientX - position.oldX,\n        y: position.y + event.clientY - position.oldY,\n        oldX: event.clientX,\n        oldY: event.clientY,\n      });\n    }\n  };\n\n  const getSrc = (service: string, endpoint: string) => {\n    if (fileId) {\n      try {\n        return atsApiIdentity\n          ? (atsApi.callApi(fileId, { service, endpoint, urlOnly: true, suppressErrors: IS_PRODUCTION, withToken: true, withAppId: true }) as string)\n          : '';\n      } catch (e) {\n        console.error(e); // tslint:disable-line\n      }\n    }\n    return '';\n  };\n\n  const imageURL = getSrc('image', 'getImageFile');\n  const fileSrc = getSrc('file', 'getFile');\n\n  const ControlIcon = (props: {tooltip: string, href?: string, classNames: string, disabled?: boolean, onClick?: () => void, Icon: JSX.Element}) => {\n    const { tooltip, href = '', classNames, disabled = false, onClick = null, Icon } = props;\n    return (\n      <Tooltip title={tooltip}>\n        <div>\n          <IconButton\n            href={href}\n            className={classNames}\n            classes={{\n              root: classes.controlRoot\n            }}\n            disabled={disabled}\n            onClick={onClick}\n          >\n            { Icon }\n          </IconButton>\n        </div>\n      </Tooltip>\n    );\n  };\n\n  return (\n    <Backdrop className={classes.backdrop} open={open} onClick={e => e.target === e.currentTarget && setOpen(false)}>\n      <div\n        onMouseDown={onMouseDown}\n        style={{\n          transform: `translate(${position.x}px, ${position.y}px)`,\n          margin: '0 12px',\n        }}\n      >\n        <img\n          ref={imgRef}\n          src={imageURL}\n          className={classes.img}\n          style={{\n            transform: `scale(${zoomFactor})`\n          }}\n          onMouseMove={mousemove}\n          onMouseUp={mouseup}\n        />\n      </div>\n\n      <div className={classes.topControlContainer}>\n        <Grid container={true} justify='space-between' alignContent='center' wrap='nowrap' className={classes.topControl}>\n          <Grid container={true} alignItems='center'>\n            <ControlIcon\n              tooltip={t('imageViewer.close')}\n              classNames={classnames(classes.control, classes.topControlIcon)}\n              onClick={() => setOpen(false)}\n              Icon={<ArrowBackIcon />}\n            />\n            <Typography variant='body2' className={classes.control}>\n              {fileName}\n            </Typography>\n          </Grid>\n          <ControlIcon\n            tooltip={t('imageViewer.download')}\n            href={fileSrc}\n            classNames={classnames(classes.control, classes.topControlIcon)}\n            disabled={fileSrc ? false : true}\n            Icon={<CloudDownloadIcon />}\n          />\n        </Grid>\n      </div>\n\n      <div className={classes.zoomControlContainer}>\n        <Grid container={true}>\n          <ControlIcon\n            tooltip={t('imageViewer.zoomOut')}\n            classNames={classnames(classes.control, classes.zoomControlIcon)}\n            disabled={zoomFactor === 1}\n            onClick={() => zoom(zoomFactor - 0.25)}\n            Icon={<RemoveIcon />}\n          />\n          <ControlIcon\n            tooltip={t('imageViewer.resetZoom')}\n            classNames={classnames(classes.control, classes.zoomControlIcon)}\n            disabled={zoomFactor === 1}\n            onClick={() => zoom(1)}\n            Icon={<ZoomOutIcon />}\n          />\n          <ControlIcon\n            tooltip={t('imageViewer.zoomIn')}\n            classNames={classnames(classes.control, classes.zoomControlIcon)}\n            disabled={zoomFactor === 2}\n            onClick={() => zoom(zoomFactor + 0.25)}\n            Icon={<AddIcon />}\n          />\n        </Grid>\n      </div>\n    </Backdrop>\n  );\n};\n\nconst mapStateToProps = (state: any) => createStructuredSelector({\n  atsApiIdentity: makeSelectAtsApiIdentity()\n})(state);\n\nexport default compose<React.FC<IImageViewerComponentProps>>(\n  withStyles(styles),\n  withAtsApi(),\n  withTranslation('translations'),\n  connect(mapStateToProps, null)\n)(ImageViewer);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUnchecked');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 24V0\"\n})), 'LinkOff');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z\"\n}), 'UnfoldMore');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), _react.default.createElement(\"path\", {\n  d: \"M21 8h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2c0-1.1-.9-2-2-2zm0 4l-3 7H9V9l4.34-4.34L12.23 10H21v2zM1 9h4v12H1z\"\n})), 'ThumbUpAltOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), _react.default.createElement(\"path\", {\n  d: \"M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.58-6.59c.37-.36.59-.86.59-1.41V5c0-1.1-.9-2-2-2zm0 12l-4.34 4.34L11.77 14H3v-2l3-7h9v10zm4-12h4v12h-4z\"\n})), 'ThumbDownAltOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"\n}), 'Attachment');\n\nexports.default = _default;","export default __webpack_public_path__ + \"static/media/Error.fef9ea48.svg\";","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M14 7l-5 5 5 5V7z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M24 0v24H0V0h24z\"\n})), 'ArrowLeft');\n\nexports.default = _default;","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z\"\n}), 'AssignmentTurnedIn');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\"\n}), 'AccountCircleRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"defs\", null, _react.default.createElement(\"path\", {\n  id: \"a\",\n  d: \"M0 0h24v24H0V0z\"\n})), _react.default.createElement(\"path\", {\n  d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z\"\n})), 'WatchLater');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21.41 9.41l-4.83-4.83c-.37-.37-.88-.58-1.41-.58H4c-1.1 0-2 .9-2 2v12.01c0 1.1.89 1.99 1.99 1.99H20c1.1 0 2-.9 2-2v-7.17c0-.53-.21-1.04-.59-1.42zM15 5.5l5.5 5.5H16c-.55 0-1-.45-1-1V5.5z\"\n}), 'NoteRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z\"\n}), 'QuestionAnswer');\n\nexports.default = _default;","import { createSelector } from 'reselect';\nimport {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  IFormStepperReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added CreateNewProjectFormStepper to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectFormValues = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IFormStepperReducerState>) => state.get('formValues') || Map<string, any>(),\n);\n\n\nexport default {\n  selectReducerState,\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"\n}), 'FilterList');\n\nexports.default = _default;","import base from './base';\nimport {\n  mergeDeep,\n} from 'immutable';\n\nconst lightGrey = '#f4f4f4';\nconst darkGrey = '#424242';\n\nconst theme = mergeDeep({}, base, {\n  direction: 'ltr',\n  breakpoints: {\n    keys: [\n      'xs',\n      'sm',\n      'md',\n      'lg',\n      'xl'\n    ],\n    values: {\n      xs: 0,\n      sm: 600,\n      md: 960,\n      lg: 1200,\n      xl: 1920\n    }\n  },\n  palette: {\n    common: {\n      black: lightGrey,\n      white: '#fff'\n    },\n    type: 'light',\n    primary: {\n      main: lightGrey,\n      light: lightGrey,\n      dark: lightGrey,\n      contrastText: '#fff'\n    },\n    secondary: {\n      main: darkGrey,\n      light: darkGrey,\n      dark: darkGrey,\n      contrastText: '#fff'\n    },\n    error: {\n      light: lightGrey,\n      main: lightGrey,\n      dark: lightGrey,\n      contrastText: '#fff'\n    },\n    grey: {\n      50: lightGrey,\n      100: lightGrey,\n      200: lightGrey,\n      300: lightGrey,\n      400: lightGrey,\n      500: lightGrey,\n      600: lightGrey,\n      700: lightGrey,\n      800: lightGrey,\n      900: lightGrey,\n      A100: lightGrey,\n      A200: lightGrey,\n      A400: lightGrey,\n      A700: lightGrey,\n    },\n    contrastThreshold: 3,\n    tonalOffset: 0.2,\n    text: {\n      primary: lightGrey,\n      secondary: darkGrey,\n      disabled: lightGrey,\n      hint: lightGrey,\n    },\n    divider: lightGrey,\n    background: {\n      paper: '#fff',\n      default: '#fff',\n      level2: lightGrey,\n      level1: '#fff'\n    },\n    action: {\n      active: darkGrey,\n      hover: lightGrey,\n      hoverOpacity: 0.08,\n      selected: darkGrey,\n      disabled: lightGrey,\n      disabledBackground: lightGrey\n    }\n  },\n});\n\nexport default theme;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M8.17 5.7L1 10.48V21h5v-8h4v8h5V10.25z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M17 7h2v2h-2z\"\n}), _react.default.createElement(\"path\", {\n  d: \"M10 3v1.51l2 1.33L13.73 7H15v.85l2 1.34V11h2v2h-2v2h2v2h-2v4h6V3H10zm9 6h-2V7h2v2z\"\n})), 'HomeWork');\n\nexports.default = _default;","import React from 'react';\nimport { Dialog } from '@material-ui/core';\nimport ConsentModalContent, { CONSENT_MODAL_PAPER_PROPS } from './ConsentModalContent';\n\nexport interface IConsentModalProps {\n  open: boolean;\n  onClose: () => void;\n  onConfirm: (consent: boolean) => void;\n}\n\nconst ConsentModal: React.FC<IConsentModalProps> = ({\n  open,\n  onClose,\n  onConfirm,\n}) => {\n  return (\n    <Dialog\n      open={open}\n      onClose={onClose}\n      PaperProps={CONSENT_MODAL_PAPER_PROPS}\n    >\n      <ConsentModalContent\n        isNewUser={true}\n        onConfirm={onConfirm}\n      />\n    </Dialog>\n  );\n};\n\nexport default ConsentModal;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17.3 6.3a.9959.9959 0 00-1.41 0l-5.64 5.64 1.41 1.41L17.3 7.7c.38-.38.38-1.02 0-1.4zm4.24-.01l-9.88 9.88-3.48-3.47a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L22.95 7.71c.39-.39.39-1.02 0-1.41h-.01c-.38-.4-1.01-.4-1.4-.01zM1.12 14.12L5.3 18.3c.39.39 1.02.39 1.41 0l.7-.7-4.88-4.9a.9959.9959 0 00-1.41 0c-.39.39-.39 1.03 0 1.42z\"\n}), 'DoneAllRounded');\n\nexports.default = _default;","import React from 'react';\nimport {\n  Grid,\n  Hidden\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport { useTheme } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport portalGraphic from '../../../images/login/ats_portal_graphic.svg';\nimport useAppConfig from '../../../hooks/useAppConfig';\nimport {AOSMITH_SPEC_ID, FIAT_SPEC_ID, PRIER_SPEC_ID} from '../../../constants';\nimport { useAtsApi } from '../../../contexts/AtsApiContext';\nimport { useSelector } from 'react-redux';\nimport { makeSelectAtsApiState } from '../../../modules/ApplicationModule/selectors';\n\nconst useStyles = makeStyles({\n  fullHeight: {\n    height: '100%',\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  fiatPrierGreyBackground: {\n    backgroundColor: '#4B4B4E'\n  }\n});\n\nconst SideDiv: React.FC = () => {\n  const config = useAppConfig();\n  const atsApi = useAtsApi();\n  const envLoaded = useSelector(makeSelectAtsApiState('envLoaded'));\n  const classes = useStyles();\n  const theme = useTheme();\n  const appId = config.getIn(['atsApiOptions', 'apiKey']);\n  const customPortalGraphic = config.getIn(['portalGraphicProps', 'src']);\n  const customPortalGraphicSize = config.getIn(['portalGraphicProps', 'size']) || 'cover';\n  const customPortalGraphicURL: string = customPortalGraphic && envLoaded ? atsApi.callApi(customPortalGraphic, {\n    service: 'image',\n    endpoint: 'getImageFile',\n    urlOnly: true,\n    suppressErrors: true\n  }) as string : '';\n  // prevent flicker at the beginning\n  const defaultPortalGraphic = envLoaded ? {\n    backgroundImage: `url(${portalGraphic})`,\n    backgroundColor: theme.palette.secondary[800],\n  } : {};\n\n  const defaultProps = {\n    className: classnames(classes.fullHeight, classes.fullWidth),\n    style: customPortalGraphic ? {\n      backgroundImage: `url(${customPortalGraphicURL})`,\n      backgroundSize: customPortalGraphicSize,\n      backgroundPosition: 'center',\n    } : defaultPortalGraphic\n  };\n  const propsMap = new Map([\n      [AOSMITH_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n        ),\n        style: {\n          backgroundColor: theme.palette.primary.main\n        }\n      }],\n      [FIAT_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n            classes.fiatPrierGreyBackground,\n        ),\n        style: customPortalGraphic ? {\n          backgroundImage: `url(${customPortalGraphicURL})`,\n          backgroundSize: customPortalGraphicSize,\n          backgroundPosition: 'center',\n        } : defaultPortalGraphic\n      }],\n      [PRIER_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n            classes.fiatPrierGreyBackground,\n        ),\n        style: customPortalGraphic ? {\n          backgroundImage: `url(${customPortalGraphicURL})`,\n          backgroundSize: customPortalGraphicSize,\n          backgroundPosition: 'center',\n        } : defaultPortalGraphic\n      }]\n  ]);\n  return (\n    <Hidden\n      smDown={true}\n    >\n      <Grid\n        md={3}\n        xs='auto'\n        container={true}\n        item={true}\n      >\n        <div {...propsMap.get(appId) ?? defaultProps} />\n      </Grid>\n    </Hidden>\n  );\n};\n\nexport default SideDiv;\n","import { useMemo } from 'react';\nimport { makeSelectConfig } from '../modules/AtsModule/selectors';\nimport { useSelector } from 'react-redux';\nimport {\n  IConfig,\n  IMap\n} from 'ats-utils/src';\nimport { Map } from 'immutable';\n\nconst useConfig = (): IMap<IConfig> | Map<string, any> => {\n  const configSelector = useMemo(() => makeSelectConfig(), []);\n  return useSelector(configSelector);\n};\n\nexport default useConfig;\n","import React, {useState} from 'react';\nimport {createDroppableSpecListId} from '../../../components/ProjectDetail/helpers';\nimport clsx from 'clsx';\nimport {Droppable} from 'react-beautiful-dnd';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\nimport {Spec} from '../../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    droppableIsDraggingOver: {\n        backgroundColor: '#F8F1E8',\n        border: `2px dashed ${theme.palette.primary[400]}`,\n    },\n    fullWidth: {\n        width: '100%',\n    },\n    fullHeight: {\n        height: '100%',\n    }\n}));\n\ninterface IDroppableDrawingListProps extends React.HTMLAttributes<HTMLDivElement> {\n    droppableId?: string;\n    spec: IMap<Spec>;\n    children: React.ReactNode;\n}\nconst DroppableDrawingList = ({\n    droppableId,\n    spec,\n    children,\n    ...props\n}: IDroppableDrawingListProps): React.ReactElement => {\n    const specId = spec.get('id');\n    const projectTitle = spec.get('projectTitle');\n    const classes = useStyles();\n    const [isDropDisabled, setIsDropDisabled] = useState(true);\n    return (\n        <div\n            onMouseEnter={() => setIsDropDisabled(false)}\n            onMouseLeave={() => setIsDropDisabled(true)}\n            {...props}\n        >\n            <Droppable droppableId={droppableId ? droppableId : createDroppableSpecListId(specId, projectTitle)} isDropDisabled={isDropDisabled}>\n                {(provided, snapshot) => (\n                    <div ref={provided.innerRef} {...provided.droppableProps} className={clsx({\n                        [classes.droppableIsDraggingOver]: snapshot.isDraggingOver,\n                        [classes.fullWidth]: true,\n                        [classes.fullHeight]: true\n                    })}>\n                        {children}\n                        {provided.placeholder}\n                    </div>\n                )}\n            </Droppable>\n        </div>\n    );\n};\n\nexport default React.memo(DroppableDrawingList);","export default __webpack_public_path__ + \"static/media/revitSVG.65fda549.svg\";","export default __webpack_public_path__ + \"static/media/autocad-icon.d21f1a93.svg\";","import {getFormValues} from 'redux-form/immutable';\nimport {LOCHINVAR_SUBMITTAL_FORM_NAME} from '../../LochinvarSubmittal';\nimport {SUBMITTAL_FORM_NAME} from '../../SubmittalBeta';\nimport {FORM_NAME as PRODUCT_BROCHURE_FORM_NAME} from '../../ProductBrochureBeta';\nimport {SCHEDULE_FORM_NAME} from '../../ScheduleBeta';\nimport {LONG_SPEC_FORM_NAME} from '../../LongSpecBeta';\nimport {SHORT_SPEC_FORM_NAME} from '../../ShortSpecBeta';\nimport {BOBRICK_CSI_MASTER_SPEC_FORM} from '../../BobrickCSIMasterSpecBeta';\nimport {BOBRICK_PLANNING_GUIDE_FORM} from '../../BobrickPlanningGuideBeta';\nimport {CSI_FORMATTED_SPECS_FORM_NAME} from '../../CSIFormattedSpecs';\nimport {useSelector} from 'react-redux';\nimport {BOBRICK_SPEC_ID, LOCHINVAR_SPEC_ID, NU_AIR_SPEC_ID, SPEC_PRINT_TYPE, WATTS_SPEC_ID} from '../../../constants';\nimport {makeSelectConfig, makeSelectIdentityObject, makeSelectUserHasNuAirSmallIndependentAcl, makeSelectUserHasNuAirWholesaleAcl} from '../../../modules/AtsModule/selectors';\nimport {useTranslation} from 'react-i18next';\nimport {useMemo, useState} from 'react';\nimport {BORBRICK_CSI_MASTER_SPECS, BORBRICK_PLANNING_GUIDE, WATTS_CSI_MASTER_SPEC} from '../constant';\nimport {DOWNLOAD_GROUP, IDownloadFormatItem} from '../types';\nimport { QUOTE_PRINT_FORMAT_FORM_NAME } from '../../QuotePrintFormat';\nimport { MANUFACTURER_CUTSHEET_FORM_NAME } from '../../ManufacturerSpecSheetBeta';\nimport { makeSelectProjectSpecConfig } from '../../../modules/ProjectModule/selectors';\nimport { makeSelectCurrentSpecs } from '../../../modules/SpecModule/selectors';\nimport { makeSelectLocale } from '../../../modules/LanguageModule/selectors';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../../modules/AccountModule/selectors';\nimport { getMediaFileIdByRegionLocaleOrFallback } from '../../ProjectDetailSpecDrawingProduct';\n\nconst CATEGORIES_WITH_SCHEDULE_OBJECT = {\n    '1': 'Sink',\n    '2': 'Faucet',\n    '3': 'P-Trap',\n    '4': 'Supply',\n    '5': 'Carrier',\n    '6': 'Mechanical Mixing Valve',\n    '7': 'Flush Valve',\n    '10': 'Bed Pan Cleanser',\n    '11': 'Transformer',\n    '14': 'Basin',\n    '15': 'Shower Head',\n    '16': 'Water Filter',\n    '104': 'Bidet',\n    '105': 'Bidet Fitting',\n    '106': 'Urinal',\n    '108': 'Toilet',\n    '109': 'Seat',\n    '110': 'Backrest',\n    '114': 'Baby Change Table',\n    '115': 'Backflow Preventer',\n    '120': 'Water Heater',\n    '125': 'Combination Towel/Waste Unit',\n    '130': 'Drinking Fountain',\n    '132': 'Emergency Equipment',\n    '136': 'Grab Bars',\n    '137': 'Hand Dryers',\n    '145': 'Locker',\n    '148': 'Mirrors',\n    '153': 'Paper Towel Dispensers',\n    '160': 'Pump',\n    '166': 'Sanitary Napkin Disposals',\n    '167': 'Sanitary Napkin/Tampon Vendors',\n    '168': 'Hooks/Shelves/Custodial Accessories',\n    '172': 'Soap Dispensers',\n    '176': 'Thermostatic Mixing Valve',\n    '177': 'Toilet Seat Cover Dispensers',\n    '178': 'Toilet Tissue Dispensers',\n    '186': 'Washfountain - Multi-Lav',\n    '187': 'Waste Receptacles',\n    '201': 'Bathroom Accessories',\n    '206': 'Chemical-Waste Neutralization Tanks',\n    '222': 'Complete Shower Trim',\n    '224': 'Tub Spout',\n    '226': 'Floor Drain',\n    '227': 'Bathtub',\n    '230': 'Shower Valve',\n    '231': 'Hand Shower',\n    '234': 'Vacuum Breaker',\n    '235': 'Hydrant',\n    '236': 'Air Gap',\n    '238': 'Trench Drain',\n    '239': 'Fixture Drain',\n    '243': 'Backwater Valve',\n    '244': 'Clean Out',\n    '245': 'Dielectric Union',\n    '252': 'Shower Floor and Stalls',\n    '271': 'Floor Sink',\n    '273': 'Chiller',\n    '277': 'Slide bar',\n    '280': 'Tub Filler',\n    '283': 'Flush Valve Retrofit',\n    '286': 'Wall Supply',\n    '287': 'Body Spray',\n    '288': 'Shower Hose',\n    '303': 'Dialysis Box',\n    '306': 'Roof Pipe Support System',\n    '311': 'Shower Arm',\n    '312': 'Vanity',\n    '328': 'Roof Drain',\n    '337': 'Expansion Tank',\n    '338': 'Check Valve',\n    '343': 'Diverter Valve Trim',\n    '344': 'Diverter Valves',\n    '350': 'Toilet Compartment Accessories/ Multi Purpose Unit',\n    '351': 'Shower And Tub Accessories',\n    '352': 'Sanitary Disposal Bag Dispenser',\n    '353': 'Healthcare Accessories',\n    '354': 'Partitions',\n    '355': 'Bed Liner Dispenser',\n    '358': 'Faucet and Soap Dispenser Combo',\n    '359': 'Laundry Box',\n    '370': 'Hand Shower Kit',\n    '371': 'Grab Bar Fastening System',\n    '376': 'Interceptors',\n    '377': 'Basin Pedestal',\n    '406': 'Channel',\n    '407': 'Grate',\n    '413': 'Thermometer',\n    '415': 'Faucet Flow Control',\n    '420': 'Faucet and Flush Valve Power Kit',\n    '429': 'Mobile Device Holder',\n    '438': 'Service Check Valves',\n    '443': 'Gauges',\n    '444': 'ACV',\n    '447': 'Ball Valve',\n    '450': 'Anti-Scale System',\n    '453': 'Soap Dispensers - Wall -Mounted',\n    '454': 'Cubicle Collection',\n    '466': 'Boilers',\n    '492': 'Snow and ice melting',\n    '499': 'Backflow Preventer Accessories',\n    '500': 'Trap Primer Adaptor',\n    '501': 'ACV Accessories',\n    '502': 'Roof Drain Accessories',\n    '503': 'Disinfection UV Solutions',\n    '504': 'Filter Housing',\n    '508': 'Y (Wye) Strainer',\n    '509': 'Faucet and Flush Valve Battery Backup',\n    '511': 'Hygiene Barriers',\n    '512': 'Hygiene and Custodial Accessories',\n    '521': 'Laboratory Furniture',\n    '536': 'Lighting Fixtures',\n    '550': 'Water Heater Accessories',\n    '590': 'Exhaust Fans',\n    '633': 'Kitchen Accessories',\n    '639': 'Air Handler/Fan Coil',\n    '641': 'Packaged Terminal Air Conditioner',\n    '838': 'Electric Heating Cables and Mats',\n    '839': 'Snow Melt Control Panel',\n    '840': 'Snow Melt Sensor',\n    '841': 'Snow Melt Accessories',\n    '1501': 'Fire Extinguishers',\n    '2273': 'Ventilator (HRV/ERV)',\n    '5719': 'Shower Door',\n    '5722': 'Steam Shower',\n    '5724': 'Sink Waste Disposal'\n};\n\nexport const useDownloadViewData = () => {\n    const selectLochinvarData = getFormValues(LOCHINVAR_SUBMITTAL_FORM_NAME);\n    const selectSubmittalData = getFormValues(SUBMITTAL_FORM_NAME);\n    const selectProductBrochureData = getFormValues(PRODUCT_BROCHURE_FORM_NAME);\n    const selectScheduleData = getFormValues(SCHEDULE_FORM_NAME);\n    const selectLongSpecData = getFormValues(LONG_SPEC_FORM_NAME);\n    const selectShortSpecData = getFormValues(SHORT_SPEC_FORM_NAME);\n    const selectManufacturerCutsheetData = getFormValues(MANUFACTURER_CUTSHEET_FORM_NAME);\n    const selectBobrickCSIMasterSpecData = getFormValues(BOBRICK_CSI_MASTER_SPEC_FORM);\n    const selectBobrickPlanningGuideData = getFormValues(BOBRICK_PLANNING_GUIDE_FORM);\n    const selectCSIData = getFormValues(CSI_FORMATTED_SPECS_FORM_NAME);\n    const selectQuotePrintFormatData = getFormValues(QUOTE_PRINT_FORMAT_FORM_NAME);\n    const lochinvarSubmittalData = useSelector(selectLochinvarData);\n    const submittal = useSelector(selectSubmittalData);\n    const productBrochure = useSelector(selectProductBrochureData);\n    const schedule = useSelector(selectScheduleData);\n    const longSpec = useSelector(selectLongSpecData);\n    const shortSpec = useSelector(selectShortSpecData);\n    const manufacturerCutsheet = useSelector(selectManufacturerCutsheetData);\n    const bobrickCSIMasterSpec = useSelector(selectBobrickCSIMasterSpecData);\n    const bobrickPlanningGuide = useSelector(selectBobrickPlanningGuideData);\n    const CSIData = useSelector(selectCSIData);\n    const quotePrintFormatData = useSelector(selectQuotePrintFormatData);\n    return {\n        [SPEC_PRINT_TYPE.lochinvarSubmittal]: lochinvarSubmittalData,\n        [SPEC_PRINT_TYPE.submittal]: submittal,\n        [SPEC_PRINT_TYPE.productBrochure]: productBrochure,\n        [SPEC_PRINT_TYPE.schedule]: schedule,\n        [SPEC_PRINT_TYPE.longSpec]: longSpec,\n        [SPEC_PRINT_TYPE.shortSpec]: shortSpec,\n        [SPEC_PRINT_TYPE.manufacturerSpecSheet]: manufacturerCutsheet,\n        [SPEC_PRINT_TYPE.csi]: CSIData,\n        [SPEC_PRINT_TYPE.projectQuoteNuAir]: quotePrintFormatData,\n        bobrickCSIMasterSpec,\n        bobrickPlanningGuide,\n    } as any;\n};\n\nexport const useDownloadView = ({ isQuickSpec }: { isQuickSpec?: boolean}) => {\n    const data = useDownloadViewData();\n    const isLoggedInUser = useSelector(makeSelectIdentityObject());\n    const config = useSelector(makeSelectConfig());\n    const locale =  useSelector(makeSelectLocale());\n    const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey']);\n    const isWatts = apiKey === WATTS_SPEC_ID;\n    const isBobrick = apiKey === BOBRICK_SPEC_ID;\n    const isLochinvar = apiKey === LOCHINVAR_SPEC_ID;\n    const isNuAir = apiKey === NU_AIR_SPEC_ID;\n    const { t } = useTranslation('translations');\n    const hasNuAirSmallIndependentAcl = useSelector(makeSelectUserHasNuAirSmallIndependentAcl());\n    const hasNuAirWholesaleAcl = useSelector(makeSelectUserHasNuAirWholesaleAcl());\n    const enableNuAirQuotePrint = isNuAir && isLoggedInUser && !isQuickSpec && (hasNuAirSmallIndependentAcl || hasNuAirWholesaleAcl);\n    const projectSpecDetailConfig =  useSelector(makeSelectProjectSpecConfig({}));\n    const specs = useSelector(makeSelectCurrentSpecs());\n\n    const countryId = (specs?.first() as any)?.getIn(['address', 'country', 'id']) || loginUserOfficeLocation.getIn(['country', 'id']);\n\n    const hasProductInScheduleCategory = useMemo(() => specs?.some((spec) => {\n      const specId = spec.get('id');\n      if (projectSpecDetailConfig.has(specId)) {\n        return spec.get('drawings')?.some((drawing) => {\n          if (projectSpecDetailConfig.getIn([specId, drawing.get('id'), 'checked'])) {\n            return drawing.get('products')?.some((product) => {\n              return CATEGORIES_WITH_SCHEDULE_OBJECT[product.get('category')] !== undefined;\n            });\n          } else {\n            return false;\n          }\n        });\n      } else {\n        return false;\n      }\n    }), [specs, projectSpecDetailConfig]);\n\n    const hasProductWithMediaFile = (mediaType: string) => specs?.some((spec) => {\n      const specId = spec.get('id');\n      if (projectSpecDetailConfig.has(specId)) {\n        return spec.get('drawings')?.some((drawing) => {\n          if (projectSpecDetailConfig.getIn([specId, drawing.get('id'), 'checked'])) {\n            return drawing.get('products')?.some((product) => {\n              const fileId = getMediaFileIdByRegionLocaleOrFallback(mediaType, {\n                  locale,\n                  countryId,\n                  product,\n                  isGuestUser: !isLoggedInUser,\n              });\n              return Boolean(fileId);\n            });\n          } else {\n            return false;\n          }\n        });\n      } else {\n        return false;\n      }\n    });\n\n    const hasProductWithRevit = useMemo(() => hasProductWithMediaFile('revit'), [specs, projectSpecDetailConfig, locale, countryId, isLoggedInUser]);\n\n    const hasProductWithAutoCad = useMemo(() => hasProductWithMediaFile('cad'), [specs, projectSpecDetailConfig, locale, countryId, isLoggedInUser]);\n\n    const [formats, setFormats] = useState<IDownloadFormatItem[]>([\n        ...isLochinvar ? [{\n            key: SPEC_PRINT_TYPE.lochinvarSubmittal,\n            label: t('downloadView.lochinvarSubmittalPackage'),\n            selected: false,\n            isActive: true,\n            group: DOWNLOAD_GROUP.projectDocuments,\n        }] : [],\n        {\n            key: SPEC_PRINT_TYPE.submittal,\n            label: t('downloadView.submittal'),\n            selected: false,\n            isActive: !isLochinvar,\n            group: DOWNLOAD_GROUP.projectDocuments,\n        },\n        {\n            key: SPEC_PRINT_TYPE.productBrochure,\n            label: t('downloadView.productBrochure'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.projectDocuments,\n        },\n        ...hasProductInScheduleCategory ? [\n          {\n              key: SPEC_PRINT_TYPE.schedule,\n              label: t('downloadView.schedule'),\n              selected: false,\n              isActive: false,\n              group: DOWNLOAD_GROUP.specifications,\n          }\n        ] : [],\n        {\n            key: SPEC_PRINT_TYPE.longSpec,\n            label: t('downloadView.longSpec'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.specifications,\n        },\n        {\n            key: SPEC_PRINT_TYPE.shortSpec,\n            label: t('downloadView.shortSpec'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.specifications,\n        },\n        {\n            key: SPEC_PRINT_TYPE.manufacturerSpecSheet,\n            label: t('downloadView.manufacturerSpec'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.projectDocuments,\n        },\n        ...hasProductWithRevit ? [{\n            key: SPEC_PRINT_TYPE.revit,\n            label: t('downloadView.revit'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.bimCad,\n        }] : [],\n        ...hasProductWithAutoCad ? [{\n            key: SPEC_PRINT_TYPE.autoCad,\n            label: t('downloadView.autoCad'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.bimCad,\n        }] : [],\n        {\n            key: SPEC_PRINT_TYPE.csi,\n            label: t('downloadView.csi3PartSpec'),\n            selected: false,\n            isActive: false,\n            group: DOWNLOAD_GROUP.specifications,\n        },\n        ...enableNuAirQuotePrint ? [\n            {\n                key: SPEC_PRINT_TYPE.projectQuoteNuAir,\n                label: t('downloadView.quote'),\n                formName: QUOTE_PRINT_FORMAT_FORM_NAME,\n                selected: false,\n                isActive: false,\n                isProjectLevel: true,\n                group: DOWNLOAD_GROUP.projectDocuments,\n                requiredFields: [\n                    'attention',\n                    'location.address1',\n                    'location.postalZip',\n                    'location.country.id',\n                    'location.province.id',\n                    'location.city.id',\n                ],\n            }\n        ] : [],\n        ...isBobrick ? [\n            {\n                key: BORBRICK_CSI_MASTER_SPECS,\n                label: t('downloadView.csiPartitionMasterSpecs'),\n                isActive: false,\n                isAdditionalFormat: true,\n            },\n            {\n                key: BORBRICK_PLANNING_GUIDE,\n                label: t('downloadView.planningGuide'),\n                isActive: false,\n                isAdditionalFormat: true,\n            }\n        ] as IDownloadFormatItem[] : [],\n        ...isWatts ? [\n            {\n                key: WATTS_CSI_MASTER_SPEC,\n                label: t('downloadView.csiMasterSpecs'),\n                isActive: false,\n                isAdditionalFormat: true,\n            }\n        ] as IDownloadFormatItem[] : []\n    ]);\n    return {\n        formats,\n        setFormats,\n        data\n    };\n};","import * as React from 'react';\nimport {useEffect, useState} from 'react';\nimport {getFormValues} from 'redux-form/immutable';\nimport SpecificationBookletBeta, {SPEC_BOOKLET_FORM_NAME} from '../SpecificationBookletBeta';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    makeSelectSelectedSpecId,\n    makeSelectSelectedSpecIdLixilPrintConfigPrintGroups\n} from '../../modules/SpecModule/selectors';\nimport {makeSelectLocationForSeriesSearchFilter} from '../../modules/AccountModule/selectors';\nimport {makeSelectShouldDisableContinuePrint, makeSelectSpecPrintError} from '../../modules/PrintModule/selectors';\nimport {\n    CancelDownloadLixirSpecBookletAction,\n    GenericSpecPrintAction,\n    ShouldDisablePrintContinueAction\n} from '../../modules/PrintModule/actions';\nimport {fromJS, Map} from 'immutable';\nimport {SetSpecPrintConfigAction} from '../../modules/SpecModule/actions';\nimport {AMPLITUDE_EVENT, IMPERIAL_UNITS_COUNTRY_IDS, SPEC_DETAIL_PATH, SPEC_PRINT_OPERATION_ID, SPEC_PRINT_TYPE} from '../../constants';\nimport {makeSelectPollingPrintId, makeSelectPrintSpecIdTypeFiles} from '../../modules/ApplicationModule/selectors';\nimport {BreadcrumbProjectSpecBar} from '../BreadcrumbProjectSpecBar';\nimport {Button, CircularProgress, Grid, Paper, Theme, Typography, useTheme} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {AtsSvgDownload, AtsSvgPreparingDoc} from '../AtsSvg';\nimport CheckIcon from '@material-ui/icons/Check';\nimport errorImage from '../../images/printPage/Error.svg';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport useFileSrc from '../../utils/useFileSrc';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport { makeSelectLocationPathname } from '../../modules/RouterModule/selectors';\nimport { SetTimerStartAction } from '../../modules/ApplicationModule/actions';\ninterface ILixirSpecBookletProps {\n    specId: number;\n    onCancel: React.MouseEventHandler<HTMLButtonElement>;\n    isMaster: boolean;\n}\nconst useLixirSpecBookletStyles = makeStyles((theme: Theme) => ({\n    downloadComplete: {\n        display: 'flex',\n        flexDirection: 'column',\n        flex: '1 1 300px',\n        justifyContent: 'center',\n        padding: theme.spacing(3),\n    },\n}));\n\nconst LixirSpecBooklet: React.FC<ILixirSpecBookletProps> = ({ specId, onCancel, isMaster }) => {\n    const classes = useLixirSpecBookletStyles();\n    const [isLoading, setIsLoading] = useState(false);\n    const formValuesSelector = getFormValues(SPEC_BOOKLET_FORM_NAME);\n    const formValues: any = useSelector(formValuesSelector);\n    const selectedLixilPrintGroups = useSelector(makeSelectSelectedSpecIdLixilPrintConfigPrintGroups());\n    const dispatch = useDispatch();\n    const location = useSelector(makeSelectLocationForSeriesSearchFilter());\n    const countryId = location?.getIn(['country', 'id']);\n    const xAtsLanguage = countryId && IMPERIAL_UNITS_COUNTRY_IDS.includes(countryId) ? 'en-us' : 'en-ca';\n    const disableDownload = useSelector(makeSelectShouldDisableContinuePrint());\n    useEffect(() => {\n        dispatch(new ShouldDisablePrintContinueAction(true));\n    }, []);\n    const onClickDownload = () => {\n        const invalidKeys = ['avatar', 'type'];\n        // transform value for BE\n        const transformedFormValuesForBE = formValues.withMutations(ctx => {\n            // BE wants these in arrays\n            const brandingPagesArray = [ctx.get('brandingPages')];\n            const backCoverPagesArray = [ctx.get('backCoverPages')];\n            ctx.set('brandingPages', brandingPagesArray);\n            ctx.set('backCoverPages', backCoverPagesArray);\n            // BE wants these as id (number)\n            const contactId = ctx.getIn(['contact','id']);\n            const customerId = ctx.getIn(['customer', 'id']);\n            ctx.set('contact', contactId);\n            ctx.set('customer', customerId);\n        });\n        const filtered = transformedFormValuesForBE.filter((val, key) => !invalidKeys.includes(key));\n        const config = Map()\n            .set('productGroups', selectedLixilPrintGroups)\n            .merge(filtered);\n        // merge selectedLixilPrintGroups stored in local state with the formValues\n        const transformedValues = fromJS({data: config});\n\n        dispatch(new SetSpecPrintConfigAction({\n            specId,\n            type: SPEC_PRINT_TYPE.specBooklet,\n            config\n        }));\n        dispatch(new GenericSpecPrintAction({\n            xAtsLanguage,\n            operationId: SPEC_PRINT_OPERATION_ID.createSpecBooklet,\n            printType: SPEC_PRINT_TYPE.specBooklet,\n            countryId,\n            specId,\n            printData: transformedValues\n        }));\n    };\n    const specPrintError = useSelector(makeSelectSpecPrintError());\n    const printSpecIdTypeFiles = useSelector(makeSelectPrintSpecIdTypeFiles());\n    const selectedSpecId = useSelector(makeSelectSelectedSpecId());\n    const pollingPrintId = useSelector(makeSelectPollingPrintId());\n    const error = specPrintError && specPrintError.getIn(['payload', 'error', 'error']);\n    const lastStatus = error ? 'Error Printing' : printSpecIdTypeFiles.getIn([selectedSpecId, SPEC_PRINT_TYPE.specBooklet, pollingPrintId, 'status'], 'pending');\n    const fileId = printSpecIdTypeFiles.getIn([selectedSpecId, SPEC_PRINT_TYPE.specBooklet, pollingPrintId, 'fileId'], '');\n    const { fileSrc } = useFileSrc({ fileId });\n    const amplitudeData = useAmplitudeData();\n    const { t } = useTranslation('translations');\n    const onDownload = () => {\n        amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, amplitudeData({\n            printType: SPEC_PRINT_TYPE.specBooklet,\n            specId,\n            isMaster,\n        }));\n    };\n    React.useEffect(() => {\n        return () => {\n            dispatch(new CancelDownloadLixirSpecBookletAction());\n        };\n    }, []);\n    return (\n        <>\n            <BreadcrumbProjectSpecBar\n                breadcrumbs={[]}\n                buttons={isLoading ? [] : [\n                    {\n                        label: t('lixirBooklet.back'),\n                        onClick: onCancel,\n                        buttonProps: {variant: 'text'},\n                    },\n                    {\n                        label: t('lixirBooklet.download'),\n                        onClick: () => {\n                            setIsLoading(true);\n                            // set timer start here, for amplitude stuff to track time when series is fully loaded\n                            dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.printGenerateTime}));\n                            onClickDownload();\n                        },\n                        buttonProps: {variant: 'contained', disabled: disableDownload }\n                    }\n                ]} />\n            {\n                !isLoading ? <SpecificationBookletBeta  /> :\n                    <Paper className={classes.downloadComplete}>\n                        <Grid\n                            container={true}\n                            direction='column'\n                            wrap='nowrap'\n                            alignItems='center'\n                        >\n                            {\n                                lastStatus === 'pending'\n                                    ? <PreparingDownload onCancel={onCancel} />\n                                    : lastStatus === 'Error Printing' || lastStatus === 'failed'\n                                        ? <ErrorPrinting handleRetry={onCancel} error={error} />\n                                        : <DownloadReady fileSrc={fileSrc} onDownload={onDownload} onCancel={onCancel} />\n                            }\n                        </Grid>\n                    </Paper>\n            }\n        </>\n    );\n};\n\nconst usePreparingDownloadStyle = makeStyles((theme: Theme) => ({\n    readyToGo: {\n        margin: `${theme.spacing() * 2}px 0`\n    },\n    loader: {\n        margin: `0 ${theme.spacing()}px`,\n    },\n    chosenDownloads: {\n        fontWeight: 'bold' as 'bold',\n        color: '#000'\n    },\n    downloadLink: {\n        marginTop: '10px'\n    },\n}));\nconst PreparingDownload = ({ onCancel }) => {\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const classes = usePreparingDownloadStyle();\n    return (\n        <React.Fragment>\n            <Grid item={true}>\n                <AtsSvgPreparingDoc color={theme.palette.primary.main} />\n            </Grid>\n            <Typography className={classes.readyToGo} variant='h5'>\n                {t('projectDownloadComplete.preparingFiles')}\n            </Typography>\n            <Grid\n                container={true}\n                direction='row'\n                wrap='nowrap'\n                justify='center'\n                alignItems='center'\n            >\n                <Grid\n                    className={classes.loader}\n                >\n                    <CircularProgress />\n                </Grid>\n                <Grid>\n                    <Typography className={classes.chosenDownloads}>{t('specBookletPrint.specificationBooklet')}</Typography>\n                </Grid>\n            </Grid>\n            <Typography className={classes.downloadLink}>{t('projectDownloadComplete.doNotClose')}</Typography>\n            <Button color='primary' onClick={onCancel} style={{ marginTop: '18px' }}>{t('downloadView.cancel')}</Button>\n        </React.Fragment>\n    );\n};\n\nconst useDownloadReadyStyle = makeStyles((theme: Theme) => ({\n    check: {\n        color: theme.palette.primary.main,\n        margin: '5px',\n    },\n    readyToGo: {\n        margin: `${theme.spacing() * 2}px 0`\n    },\n    chosenDownloads: {\n        fontWeight: 'bold' as 'bold',\n        color: '#000'\n    },\n}));\nconst DownloadReady = ({\n    fileSrc,\n    onDownload,\n    onCancel\n}) => {\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const classes = useDownloadReadyStyle();\n    const pathname = useSelector(makeSelectLocationPathname());\n    return (\n        <React.Fragment>\n            <Grid item={true}>\n                <AtsSvgDownload color={{ shadowColor: theme.palette.primary[200], backgroundColor: theme.palette.primary.main}} />\n            </Grid>\n            <Typography className={classes.readyToGo} variant='h5'>\n                {t('projectDownloadComplete.specReady')}\n            </Typography>\n            <Grid container={true} justify='center' alignItems='center'>\n                <Grid className={classes.check}>\n                    <CheckIcon />\n                </Grid>\n                <Grid>\n                    <Typography className={classes.chosenDownloads}>{t('specBookletPrint.specificationBooklet')}</Typography>\n                </Grid>\n            </Grid>\n            <Grid container={true} justify='center'>\n                <Button\n                    color='primary'\n                    variant='contained'\n                    style={{ marginTop: '36px' }}\n                    href={fileSrc}\n                    disabled={!Boolean(fileSrc)}\n                    onClick={onDownload}\n                >\n                    {t('specBookletPrint.downloadFile')}\n                </Button>\n            </Grid>\n            <Grid container={true} justify='center'>\n                <Button\n                    color='primary'\n                    variant='text'\n                    style={{ marginTop: '36px' }}\n                    onClick={onCancel}\n                >\n                    {pathname?.includes(SPEC_DETAIL_PATH) ? t('downloadView.backToSpecification') : t('downloadView.backToProject')}\n                </Button>\n            </Grid>\n        </React.Fragment>\n    );\n};\n\nconst ErrorPrinting = ({\n    handleRetry,\n    error,\n}) => {\n    const { t } = useTranslation('translations');\n    const classes = useDownloadReadyStyle();\n    return (\n        <React.Fragment>\n            <Grid item={true}>\n                <img src={errorImage} alt='error image'/>\n            </Grid>\n            <Typography className={classes.readyToGo} variant='h5'>\n                { error ? error : t('projectDownloadComplete.errorTitle') }\n            </Typography>\n            <Grid\n                container={true}\n                alignItems='center'\n                direction='column'\n                wrap='nowrap'\n                spacing={2}\n            >\n                <Grid\n                    className={classes.check}\n                    container={true}\n                    item={true}\n                    justify='center'\n                    wrap='nowrap'\n                >\n                    <WarningRoundedIcon />\n                    <Typography className={classes.chosenDownloads}>{t('specBookletPrint.specificationBooklet')}</Typography>\n                </Grid>\n                <Grid item={true}>\n                    <Typography>{t('projectDownloadComplete.contactATS')}</Typography>\n                </Grid>\n                <Grid item={true}>\n                    <Button onClick={handleRetry}>{t('projectDownloadComplete.retryDownload')}</Button>\n                </Grid>\n            </Grid>\n        </React.Fragment>\n    );\n};\n\nexport default LixirSpecBooklet;","const getBoundingRect = (clientRects) => {\n    const rects = Array.from(clientRects).map((rect) => {\n        const { left, top, width, height, pageNumber } = rect;\n        const X0 = left;\n        const X1 = left + width;\n        const Y0 = top;\n        const Y1 = top + height;\n        return { X0, X1, Y0, Y1, pageNumber };\n    });\n    let firstPageNumber = Number.MAX_SAFE_INTEGER;\n    rects.forEach((rect) => {\n        var _a;\n        firstPageNumber = Math.min(firstPageNumber, (_a = rect.pageNumber) !== null && _a !== void 0 ? _a : firstPageNumber);\n    });\n    const rectsWithSizeOnFirstPage = rects.filter((rect) => (rect.X0 > 0 || rect.X1 > 0 || rect.Y0 > 0 || rect.Y1 > 0) &&\n        rect.pageNumber === firstPageNumber);\n    const optimal = rectsWithSizeOnFirstPage.reduce((res, rect) => {\n        return {\n            X0: Math.min(res.X0, rect.X0),\n            X1: Math.max(res.X1, rect.X1),\n            Y0: Math.min(res.Y0, rect.Y0),\n            Y1: Math.max(res.Y1, rect.Y1),\n            pageNumber: firstPageNumber,\n        };\n    }, rectsWithSizeOnFirstPage[0]);\n    const { X0, X1, Y0, Y1, pageNumber } = optimal;\n    return {\n        left: X0,\n        top: Y0,\n        width: X1 - X0,\n        height: Y1 - Y0,\n        pageNumber,\n    };\n};\nexport default getBoundingRect;\n//# sourceMappingURL=get-bounding-rect.js.map","const sort = (rects) => rects.sort((A, B) => {\n    const top = (A.pageNumber || 0) * A.top - (B.pageNumber || 0) * B.top;\n    if (top === 0) {\n        return A.left - B.left;\n    }\n    return top;\n});\nconst overlaps = (A, B) => A.pageNumber === B.pageNumber &&\n    A.left <= B.left &&\n    B.left <= A.left + A.width;\nconst sameLine = (A, B, yMargin = 5) => A.pageNumber === B.pageNumber &&\n    Math.abs(A.top - B.top) < yMargin &&\n    Math.abs(A.height - B.height) < yMargin;\nconst inside = (A, B) => A.pageNumber === B.pageNumber &&\n    A.top > B.top &&\n    A.left > B.left &&\n    A.top + A.height < B.top + B.height &&\n    A.left + A.width < B.left + B.width;\nconst nextTo = (A, B, xMargin = 10) => {\n    const Aright = A.left + A.width;\n    const Bright = B.left + B.width;\n    return (A.pageNumber === B.pageNumber &&\n        A.left <= B.left &&\n        Aright <= Bright &&\n        B.left - Aright <= xMargin);\n};\nconst extendWidth = (A, B) => {\n    // extend width of A to cover B\n    A.width = Math.max(B.width - A.left + B.left, A.width);\n};\nconst optimizeClientRects = (clientRects) => {\n    const rects = sort(clientRects);\n    const toRemove = new Set();\n    const firstPass = rects.filter((rect) => {\n        return rects.every((otherRect) => {\n            return !inside(rect, otherRect);\n        });\n    });\n    let passCount = 0;\n    while (passCount <= 2) {\n        firstPass.forEach((A) => {\n            firstPass.forEach((B) => {\n                if (A === B || toRemove.has(A) || toRemove.has(B)) {\n                    return;\n                }\n                if (!sameLine(A, B)) {\n                    return;\n                }\n                if (overlaps(A, B)) {\n                    extendWidth(A, B);\n                    A.height = Math.max(A.height, B.height);\n                    toRemove.add(B);\n                }\n                if (nextTo(A, B)) {\n                    extendWidth(A, B);\n                    toRemove.add(B);\n                }\n            });\n        });\n        passCount += 1;\n    }\n    return firstPass.filter((rect) => !toRemove.has(rect));\n};\nexport default optimizeClientRects;\n//# sourceMappingURL=optimize-client-rects.js.map","import optimizeClientRects from \"./optimize-client-rects\";\nconst isClientRectInsidePageRect = (clientRect, pageRect) => {\n    if (clientRect.top < pageRect.top) {\n        return false;\n    }\n    if (clientRect.bottom > pageRect.bottom) {\n        return false;\n    }\n    if (clientRect.right > pageRect.right) {\n        return false;\n    }\n    if (clientRect.left < pageRect.left) {\n        return false;\n    }\n    return true;\n};\nconst getClientRects = (range, pages, shouldOptimize = true) => {\n    const clientRects = Array.from(range.getClientRects());\n    const rects = [];\n    for (const clientRect of clientRects) {\n        for (const page of pages) {\n            const pageRect = page.node.getBoundingClientRect();\n            if (isClientRectInsidePageRect(clientRect, pageRect) &&\n                clientRect.width > 0 &&\n                clientRect.height > 0 &&\n                clientRect.width < pageRect.width &&\n                clientRect.height < pageRect.height) {\n                const highlightedRect = {\n                    top: clientRect.top + page.node.scrollTop - pageRect.top,\n                    left: clientRect.left + page.node.scrollLeft - pageRect.left,\n                    width: clientRect.width,\n                    height: clientRect.height,\n                    pageNumber: page.number,\n                };\n                rects.push(highlightedRect);\n            }\n        }\n    }\n    return shouldOptimize ? optimizeClientRects(rects) : rects;\n};\nexport default getClientRects;\n//# sourceMappingURL=get-client-rects.js.map","export const getDocument = (elm) => (elm || {}).ownerDocument || document;\nexport const getWindow = (elm) => (getDocument(elm) || {}).defaultView || window;\nexport const isHTMLElement = (elm) => elm instanceof HTMLElement || elm instanceof getWindow(elm).HTMLElement;\nexport const isHTMLCanvasElement = (elm) => elm instanceof HTMLCanvasElement ||\n    elm instanceof getWindow(elm).HTMLCanvasElement;\nexport const asElement = (x) => x;\nexport const getPageFromElement = (target) => {\n    const node = asElement(target.closest(\".page\"));\n    if (!node || !isHTMLElement(node)) {\n        return null;\n    }\n    const number = Number(asElement(node).dataset.pageNumber);\n    return { node, number };\n};\nexport const getPagesFromRange = (range) => {\n    const startParentElement = range.startContainer.parentElement;\n    const endParentElement = range.endContainer.parentElement;\n    if (!isHTMLElement(startParentElement) || !isHTMLElement(endParentElement)) {\n        return [];\n    }\n    const startPage = getPageFromElement(asElement(startParentElement));\n    const endPage = getPageFromElement(asElement(endParentElement));\n    if (!(startPage === null || startPage === void 0 ? void 0 : startPage.number) || !(endPage === null || endPage === void 0 ? void 0 : endPage.number)) {\n        return [];\n    }\n    if (startPage.number === endPage.number) {\n        return [startPage];\n    }\n    if (startPage.number === endPage.number - 1) {\n        return [startPage, endPage];\n    }\n    const pages = [];\n    let currentPageNumber = startPage.number;\n    const document = startPage.node.ownerDocument;\n    while (currentPageNumber <= endPage.number) {\n        const currentPage = getPageFromElement(document.querySelector(`[data-page-number='${currentPageNumber}'`));\n        if (currentPage) {\n            pages.push(currentPage);\n        }\n        currentPageNumber++;\n    }\n    return pages;\n};\nexport const findOrCreateContainerLayer = (container, className) => {\n    const doc = getDocument(container);\n    let layer = container.querySelector(`.${className}`);\n    if (!layer) {\n        layer = doc.createElement(\"div\");\n        layer.className = className;\n        container.appendChild(layer);\n    }\n    return layer;\n};\n//# sourceMappingURL=pdfjs-dom.js.map","import { isHTMLCanvasElement } from \"./pdfjs-dom\";\nconst getAreaAsPNG = (canvas, position) => {\n    const { left, top, width, height } = position;\n    const doc = canvas ? canvas.ownerDocument : null;\n    // @TODO: cache this?\n    const newCanvas = doc && doc.createElement(\"canvas\");\n    if (!newCanvas || !isHTMLCanvasElement(newCanvas)) {\n        return \"\";\n    }\n    newCanvas.width = width;\n    newCanvas.height = height;\n    const newCanvasContext = newCanvas.getContext(\"2d\");\n    if (!newCanvasContext || !canvas) {\n        return \"\";\n    }\n    const dpr = window.devicePixelRatio;\n    newCanvasContext.drawImage(canvas, left * dpr, top * dpr, width * dpr, height * dpr, 0, 0, width, height);\n    return newCanvas.toDataURL(\"image/png\");\n};\nexport default getAreaAsPNG;\n//# sourceMappingURL=get-area-as-png.js.map","import React, { Component } from \"react\";\nconst clamp = (value, left, right) => Math.min(Math.max(value, left), right);\nclass TipContainer extends Component {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            height: 0,\n            width: 0,\n        };\n        this.node = null;\n        this.updatePosition = () => {\n            if (!this.node) {\n                return;\n            }\n            const { offsetHeight, offsetWidth } = this.node;\n            this.setState({\n                height: offsetHeight,\n                width: offsetWidth,\n            });\n        };\n    }\n    componentDidUpdate(nextProps) {\n        if (this.props.children !== nextProps.children) {\n            this.updatePosition();\n        }\n    }\n    componentDidMount() {\n        setTimeout(this.updatePosition, 0);\n    }\n    render() {\n        const { children, style, scrollTop, pageBoundingRect } = this.props;\n        const { height, width } = this.state;\n        const isStyleCalculationInProgress = width === 0 && height === 0;\n        const shouldMove = style.top - height - 5 < scrollTop;\n        const top = shouldMove ? style.bottom + 5 : style.top - height - 5;\n        const left = clamp(style.left - width / 2, 0, pageBoundingRect.width - width);\n        const childrenWithProps = React.Children.map(children, (child) => \n        // @ts-ignore\n        React.cloneElement(child, {\n            onUpdate: () => {\n                this.setState({\n                    width: 0,\n                    height: 0,\n                }, () => {\n                    setTimeout(this.updatePosition, 0);\n                });\n            },\n            popup: {\n                position: shouldMove ? \"below\" : \"above\",\n            },\n        }));\n        return (React.createElement(\"div\", { className: \"PdfHighlighter__tip-container\", style: {\n                visibility: isStyleCalculationInProgress ? \"hidden\" : \"visible\",\n                top,\n                left,\n            }, ref: (node) => {\n                this.node = node;\n            } }, childrenWithProps));\n    }\n}\nexport default TipContainer;\n//# sourceMappingURL=TipContainer.js.map","import React, { Component } from \"react\";\nimport { asElement, isHTMLElement } from \"../lib/pdfjs-dom\";\nimport \"../style/MouseSelection.css\";\nclass MouseSelection extends Component {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            locked: false,\n            start: null,\n            end: null,\n        };\n        this.reset = () => {\n            const { onDragEnd } = this.props;\n            onDragEnd();\n            this.setState({ start: null, end: null, locked: false });\n        };\n    }\n    getBoundingRect(start, end) {\n        return {\n            left: Math.min(end.x, start.x),\n            top: Math.min(end.y, start.y),\n            width: Math.abs(end.x - start.x),\n            height: Math.abs(end.y - start.y),\n        };\n    }\n    componentDidUpdate() {\n        const { onChange } = this.props;\n        const { start, end } = this.state;\n        const isVisible = Boolean(start && end);\n        onChange(isVisible);\n    }\n    componentDidMount() {\n        if (!this.root) {\n            return;\n        }\n        const that = this;\n        const { onSelection, onDragStart, onDragEnd, shouldStart } = this.props;\n        const container = asElement(this.root.parentElement);\n        if (!isHTMLElement(container)) {\n            return;\n        }\n        let containerBoundingRect = null;\n        const containerCoords = (pageX, pageY) => {\n            if (!containerBoundingRect) {\n                containerBoundingRect = container.getBoundingClientRect();\n            }\n            return {\n                x: pageX - containerBoundingRect.left + container.scrollLeft,\n                y: pageY -\n                    containerBoundingRect.top +\n                    container.scrollTop -\n                    window.scrollY,\n            };\n        };\n        container.addEventListener(\"mousemove\", (event) => {\n            const { start, locked } = this.state;\n            if (!start || locked) {\n                return;\n            }\n            that.setState(Object.assign(Object.assign({}, this.state), { end: containerCoords(event.pageX, event.pageY) }));\n        });\n        container.addEventListener(\"mousedown\", (event) => {\n            if (!shouldStart(event)) {\n                this.reset();\n                return;\n            }\n            const startTarget = asElement(event.target);\n            if (!isHTMLElement(startTarget)) {\n                return;\n            }\n            onDragStart();\n            this.setState({\n                start: containerCoords(event.pageX, event.pageY),\n                end: null,\n                locked: false,\n            });\n            const onMouseUp = (event) => {\n                var _a;\n                // emulate listen once\n                (_a = event.currentTarget) === null || _a === void 0 ? void 0 : _a.removeEventListener(\"mouseup\", onMouseUp);\n                const { start } = this.state;\n                if (!start) {\n                    return;\n                }\n                const end = containerCoords(event.pageX, event.pageY);\n                const boundingRect = that.getBoundingRect(start, end);\n                if (!isHTMLElement(event.target) ||\n                    !container.contains(asElement(event.target)) ||\n                    !that.shouldRender(boundingRect)) {\n                    that.reset();\n                    return;\n                }\n                that.setState({\n                    end,\n                    locked: true,\n                }, () => {\n                    const { start, end } = that.state;\n                    if (!start || !end) {\n                        return;\n                    }\n                    if (isHTMLElement(event.target)) {\n                        onSelection(startTarget, boundingRect, that.reset);\n                        onDragEnd();\n                    }\n                });\n            };\n            const { ownerDocument: doc } = container;\n            if (doc.body) {\n                doc.body.addEventListener(\"mouseup\", onMouseUp);\n            }\n        });\n    }\n    shouldRender(boundingRect) {\n        return boundingRect.width >= 1 && boundingRect.height >= 1;\n    }\n    render() {\n        const { start, end } = this.state;\n        return (React.createElement(\"div\", { className: \"MouseSelection-container\", ref: (node) => {\n                if (!node) {\n                    return;\n                }\n                this.root = node;\n            } }, start && end ? (React.createElement(\"div\", { className: \"MouseSelection\", style: this.getBoundingRect(start, end) })) : null));\n    }\n}\nexport default MouseSelection;\n//# sourceMappingURL=MouseSelection.js.map","// \"viewport\" rectangle is { top, left, width, height }\nexport const viewportToScaled = (rect, { width, height }) => {\n    return {\n        x1: rect.left,\n        y1: rect.top,\n        x2: rect.left + rect.width,\n        y2: rect.top + rect.height,\n        width,\n        height,\n        pageNumber: rect.pageNumber,\n    };\n};\nconst pdfToViewport = (pdf, viewport) => {\n    const [x1, y1, x2, y2] = viewport.convertToViewportRectangle([\n        pdf.x1,\n        pdf.y1,\n        pdf.x2,\n        pdf.y2,\n    ]);\n    return {\n        left: x1,\n        top: y1,\n        width: x2 - x1,\n        height: y1 - y2,\n        pageNumber: pdf.pageNumber,\n    };\n};\nexport const scaledToViewport = (scaled, viewport, usePdfCoordinates = false) => {\n    const { width, height } = viewport;\n    if (usePdfCoordinates) {\n        return pdfToViewport(scaled, viewport);\n    }\n    if (scaled.x1 === undefined) {\n        throw new Error(\"You are using old position format, please update\");\n    }\n    const x1 = (width * scaled.x1) / scaled.width;\n    const y1 = (height * scaled.y1) / scaled.height;\n    const x2 = (width * scaled.x2) / scaled.width;\n    const y2 = (height * scaled.y2) / scaled.height;\n    return {\n        left: x1,\n        top: y1,\n        width: x2 - x1,\n        height: y2 - y1,\n        pageNumber: scaled.pageNumber,\n    };\n};\n//# sourceMappingURL=coordinates.js.map","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport React, { PureComponent } from \"react\";\nimport ReactDom from \"react-dom\";\nimport debounce from \"lodash.debounce\";\nimport { EventBus, PDFViewer, PDFLinkService, NullL10n, } from \"pdfjs-dist/legacy/web/pdf_viewer\";\nimport \"pdfjs-dist/web/pdf_viewer.css\";\nimport \"../style/pdf_viewer.css\";\nimport \"../style/PdfHighlighter.css\";\nimport getBoundingRect from \"../lib/get-bounding-rect\";\nimport getClientRects from \"../lib/get-client-rects\";\nimport getAreaAsPng from \"../lib/get-area-as-png\";\nimport { asElement, getPagesFromRange, getPageFromElement, getWindow, findOrCreateContainerLayer, isHTMLElement, } from \"../lib/pdfjs-dom\";\nimport TipContainer from \"./TipContainer\";\nimport MouseSelection from \"./MouseSelection\";\nimport { scaledToViewport, viewportToScaled } from \"../lib/coordinates\";\nconst EMPTY_ID = \"empty-id\";\nexport class PdfHighlighter extends PureComponent {\n    constructor(props) {\n        super(props);\n        this.state = {\n            ghostHighlight: null,\n            isCollapsed: true,\n            range: null,\n            scrolledToHighlightId: EMPTY_ID,\n            isAreaSelectionInProgress: false,\n            tip: null,\n            tipPosition: null,\n            tipChildren: null,\n        };\n        this.eventBus = new EventBus();\n        this.linkService = new PDFLinkService({\n            eventBus: this.eventBus,\n            externalLinkTarget: 2,\n        });\n        this.resizeObserver = null;\n        this.containerNode = null;\n        this.unsubscribe = () => { };\n        this.attachRef = (ref) => {\n            var _a;\n            const { eventBus, resizeObserver: observer } = this;\n            this.containerNode = ref;\n            this.unsubscribe();\n            if (ref) {\n                const { ownerDocument: doc } = ref;\n                eventBus.on(\"textlayerrendered\", this.onTextLayerRendered);\n                eventBus.on(\"pagesinit\", this.onDocumentReady);\n                doc.addEventListener(\"selectionchange\", this.onSelectionChange);\n                doc.addEventListener(\"keydown\", this.handleKeyDown);\n                (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.addEventListener(\"resize\", this.debouncedScaleValue);\n                if (observer)\n                    observer.observe(ref);\n                this.unsubscribe = () => {\n                    var _a;\n                    eventBus.off(\"pagesinit\", this.onDocumentReady);\n                    eventBus.off(\"textlayerrendered\", this.onTextLayerRendered);\n                    doc.removeEventListener(\"selectionchange\", this.onSelectionChange);\n                    doc.removeEventListener(\"keydown\", this.handleKeyDown);\n                    (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.removeEventListener(\"resize\", this.debouncedScaleValue);\n                    if (observer)\n                        observer.disconnect();\n                };\n            }\n        };\n        this.hideTipAndSelection = () => {\n            this.setState({\n                tipPosition: null,\n                tipChildren: null,\n            });\n            this.setState({ ghostHighlight: null, tip: null }, () => this.renderHighlights());\n        };\n        this.renderTip = () => {\n            const { tipPosition, tipChildren } = this.state;\n            if (!tipPosition)\n                return null;\n            const { boundingRect, pageNumber } = tipPosition;\n            const page = {\n                node: this.viewer.getPageView((boundingRect.pageNumber || pageNumber) - 1)\n                    .div,\n                pageNumber: boundingRect.pageNumber || pageNumber,\n            };\n            const pageBoundingClientRect = page.node.getBoundingClientRect();\n            const pageBoundingRect = {\n                bottom: pageBoundingClientRect.bottom,\n                height: pageBoundingClientRect.height,\n                left: pageBoundingClientRect.left,\n                right: pageBoundingClientRect.right,\n                top: pageBoundingClientRect.top,\n                width: pageBoundingClientRect.width,\n                x: pageBoundingClientRect.x,\n                y: pageBoundingClientRect.y,\n                pageNumber: page.pageNumber,\n            };\n            return (React.createElement(TipContainer, { scrollTop: this.viewer.container.scrollTop, pageBoundingRect: pageBoundingRect, style: {\n                    left: page.node.offsetLeft + boundingRect.left + boundingRect.width / 2,\n                    top: boundingRect.top + page.node.offsetTop,\n                    bottom: boundingRect.top + page.node.offsetTop + boundingRect.height,\n                } }, tipChildren));\n        };\n        this.onTextLayerRendered = () => {\n            this.renderHighlights();\n        };\n        this.scrollTo = (highlight) => {\n            const { pageNumber, boundingRect, usePdfCoordinates } = highlight.position;\n            this.viewer.container.removeEventListener(\"scroll\", this.onScroll);\n            const pageViewport = this.viewer.getPageView(pageNumber - 1).viewport;\n            const scrollMargin = 10;\n            this.viewer.scrollPageIntoView({\n                pageNumber,\n                destArray: [\n                    null,\n                    { name: \"XYZ\" },\n                    ...pageViewport.convertToPdfPoint(0, scaledToViewport(boundingRect, pageViewport, usePdfCoordinates).top -\n                        scrollMargin),\n                    0,\n                ],\n            });\n            this.setState({\n                scrolledToHighlightId: highlight.id,\n            }, () => this.renderHighlights());\n            // wait for scrolling to finish\n            setTimeout(() => {\n                this.viewer.container.addEventListener(\"scroll\", this.onScroll);\n            }, 100);\n        };\n        this.onDocumentReady = () => {\n            const { scrollRef } = this.props;\n            this.handleScaleValue();\n            scrollRef(this.scrollTo);\n        };\n        this.onSelectionChange = () => {\n            const container = this.containerNode;\n            const selection = getWindow(container).getSelection();\n            if (!selection) {\n                return;\n            }\n            const range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n            if (selection.isCollapsed) {\n                this.setState({ isCollapsed: true });\n                return;\n            }\n            if (!range ||\n                !container ||\n                !container.contains(range.commonAncestorContainer)) {\n                return;\n            }\n            this.setState({\n                isCollapsed: false,\n                range,\n            });\n            this.debouncedAfterSelection();\n        };\n        this.onScroll = () => {\n            const { onScrollChange } = this.props;\n            onScrollChange();\n            this.setState({\n                scrolledToHighlightId: EMPTY_ID,\n            }, () => this.renderHighlights());\n            this.viewer.container.removeEventListener(\"scroll\", this.onScroll);\n        };\n        this.onMouseDown = (event) => {\n            if (!isHTMLElement(event.target)) {\n                return;\n            }\n            if (asElement(event.target).closest(\".PdfHighlighter__tip-container\")) {\n                return;\n            }\n            this.hideTipAndSelection();\n        };\n        this.handleKeyDown = (event) => {\n            if (event.code === \"Escape\") {\n                this.hideTipAndSelection();\n            }\n        };\n        this.afterSelection = () => {\n            const { onSelectionFinished } = this.props;\n            const { isCollapsed, range } = this.state;\n            if (!range || isCollapsed) {\n                return;\n            }\n            const pages = getPagesFromRange(range);\n            if (!pages || pages.length === 0) {\n                return;\n            }\n            const rects = getClientRects(range, pages);\n            if (rects.length === 0) {\n                return;\n            }\n            const boundingRect = getBoundingRect(rects);\n            const viewportPosition = {\n                boundingRect,\n                rects,\n                pageNumber: pages[0].number,\n            };\n            const content = {\n                text: range.toString(),\n            };\n            const scaledPosition = this.viewportPositionToScaled(viewportPosition);\n            this.setTip(viewportPosition, onSelectionFinished(scaledPosition, content, () => this.hideTipAndSelection(), () => this.setState({\n                ghostHighlight: { position: scaledPosition },\n            }, () => this.renderHighlights())));\n        };\n        this.debouncedAfterSelection = debounce(this.afterSelection, 500);\n        this.handleScaleValue = () => {\n            if (this.viewer) {\n                this.viewer.currentScaleValue = this.props.pdfScaleValue; //\"page-width\";\n            }\n        };\n        this.debouncedScaleValue = debounce(this.handleScaleValue, 500);\n        if (typeof ResizeObserver !== \"undefined\") {\n            this.resizeObserver = new ResizeObserver(this.debouncedScaleValue);\n        }\n    }\n    componentDidMount() {\n        this.init();\n    }\n    componentDidUpdate(prevProps) {\n        if (prevProps.pdfDocument !== this.props.pdfDocument) {\n            this.init();\n            return;\n        }\n        if (prevProps.highlights !== this.props.highlights) {\n            this.renderHighlights(this.props);\n        }\n    }\n    init() {\n        const { pdfDocument } = this.props;\n        this.viewer =\n            this.viewer ||\n                new PDFViewer({\n                    container: this.containerNode,\n                    eventBus: this.eventBus,\n                    // enhanceTextSelection: true, // deprecated. https://github.com/mozilla/pdf.js/issues/9943#issuecomment-409369485\n                    textLayerMode: 2,\n                    removePageBorders: true,\n                    linkService: this.linkService,\n                    l10n: NullL10n,\n                });\n        this.linkService.setDocument(pdfDocument);\n        this.linkService.setViewer(this.viewer);\n        this.viewer.setDocument(pdfDocument);\n        // debug\n        window.PdfViewer = this;\n    }\n    componentWillUnmount() {\n        this.unsubscribe();\n    }\n    findOrCreateHighlightLayer(page) {\n        const { textLayer } = this.viewer.getPageView(page - 1) || {};\n        if (!textLayer) {\n            return null;\n        }\n        return findOrCreateContainerLayer(textLayer.textLayerDiv, \"PdfHighlighter__highlight-layer\");\n    }\n    groupHighlightsByPage(highlights) {\n        const { ghostHighlight } = this.state;\n        const allHighlights = [...highlights, ghostHighlight].filter(Boolean);\n        const pageNumbers = new Set();\n        for (const highlight of allHighlights) {\n            pageNumbers.add(highlight.position.pageNumber);\n            for (const rect of highlight.position.rects) {\n                if (rect.pageNumber) {\n                    pageNumbers.add(rect.pageNumber);\n                }\n            }\n        }\n        const groupedHighlights = {};\n        for (const pageNumber of pageNumbers) {\n            groupedHighlights[pageNumber] = groupedHighlights[pageNumber] || [];\n            for (const highlight of allHighlights) {\n                const pageSpecificHighlight = Object.assign(Object.assign({}, highlight), { position: {\n                        pageNumber,\n                        boundingRect: highlight.position.boundingRect,\n                        rects: [],\n                        usePdfCoordinates: highlight.position.usePdfCoordinates,\n                    } });\n                let anyRectsOnPage = false;\n                for (const rect of highlight.position.rects) {\n                    if (pageNumber === (rect.pageNumber || highlight.position.pageNumber)) {\n                        pageSpecificHighlight.position.rects.push(rect);\n                        anyRectsOnPage = true;\n                    }\n                }\n                if (anyRectsOnPage || pageNumber === highlight.position.pageNumber) {\n                    groupedHighlights[pageNumber].push(pageSpecificHighlight);\n                }\n            }\n        }\n        return groupedHighlights;\n    }\n    showTip(highlight, content) {\n        const { isCollapsed, ghostHighlight, isAreaSelectionInProgress } = this.state;\n        const highlightInProgress = !isCollapsed || ghostHighlight;\n        if (highlightInProgress || isAreaSelectionInProgress) {\n            return;\n        }\n        this.setTip(highlight.position, content);\n    }\n    scaledPositionToViewport({ pageNumber, boundingRect, rects, usePdfCoordinates, }) {\n        const viewport = this.viewer.getPageView(pageNumber - 1).viewport;\n        return {\n            boundingRect: scaledToViewport(boundingRect, viewport, usePdfCoordinates),\n            rects: (rects || []).map((rect) => scaledToViewport(rect, viewport, usePdfCoordinates)),\n            pageNumber,\n        };\n    }\n    viewportPositionToScaled({ pageNumber, boundingRect, rects, }) {\n        const viewport = this.viewer.getPageView(pageNumber - 1).viewport;\n        return {\n            boundingRect: viewportToScaled(boundingRect, viewport),\n            rects: (rects || []).map((rect) => viewportToScaled(rect, viewport)),\n            pageNumber,\n        };\n    }\n    screenshot(position, pageNumber) {\n        const canvas = this.viewer.getPageView(pageNumber - 1).canvas;\n        return getAreaAsPng(canvas, position);\n    }\n    renderHighlights(nextProps) {\n        const { highlightTransform, highlights } = nextProps || this.props;\n        const { pdfDocument } = this.props;\n        const { tip, scrolledToHighlightId } = this.state;\n        const highlightsByPage = this.groupHighlightsByPage(highlights);\n        for (let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber++) {\n            const highlightLayer = this.findOrCreateHighlightLayer(pageNumber);\n            if (highlightLayer) {\n                ReactDom.render(React.createElement(\"div\", null, (highlightsByPage[String(pageNumber)] || []).map((_a, index) => {\n                    var { position, id } = _a, highlight = __rest(_a, [\"position\", \"id\"]);\n                    // @ts-ignore\n                    const viewportHighlight = Object.assign({ id, position: this.scaledPositionToViewport(position) }, highlight);\n                    if (tip && tip.highlight.id === String(id)) {\n                        this.showTip(tip.highlight, tip.callback(viewportHighlight));\n                    }\n                    const isScrolledTo = Boolean(scrolledToHighlightId === id);\n                    return highlightTransform(viewportHighlight, index, (highlight, callback) => {\n                        this.setState({\n                            tip: { highlight, callback },\n                        });\n                        this.showTip(highlight, callback(highlight));\n                    }, this.hideTipAndSelection, (rect) => {\n                        const viewport = this.viewer.getPageView((rect.pageNumber || pageNumber) - 1).viewport;\n                        return viewportToScaled(rect, viewport);\n                    }, (boundingRect) => this.screenshot(boundingRect, pageNumber), isScrolledTo);\n                })), highlightLayer);\n            }\n        }\n    }\n    setTip(position, inner) {\n        this.setState({\n            tipPosition: position,\n            tipChildren: inner,\n        });\n    }\n    toggleTextSelection(flag) {\n        this.viewer.viewer.classList.toggle(\"PdfHighlighter--disable-selection\", flag);\n    }\n    render() {\n        const { onSelectionFinished, enableAreaSelection } = this.props;\n        return (React.createElement(\"div\", { onPointerDown: this.onMouseDown },\n            React.createElement(\"div\", { ref: this.attachRef, className: \"PdfHighlighter\", onContextMenu: (e) => e.preventDefault() },\n                React.createElement(\"div\", { className: \"pdfViewer\" }),\n                this.renderTip(),\n                typeof enableAreaSelection === \"function\" ? (React.createElement(MouseSelection, { onDragStart: () => this.toggleTextSelection(true), onDragEnd: () => this.toggleTextSelection(false), onChange: (isVisible) => this.setState({ isAreaSelectionInProgress: isVisible }), shouldStart: (event) => enableAreaSelection(event) &&\n                        isHTMLElement(event.target) &&\n                        Boolean(asElement(event.target).closest(\".page\")), onSelection: (startTarget, boundingRect, resetSelection) => {\n                        const page = getPageFromElement(startTarget);\n                        if (!page) {\n                            return;\n                        }\n                        const pageBoundingRect = Object.assign(Object.assign({}, boundingRect), { top: boundingRect.top - page.node.offsetTop, left: boundingRect.left - page.node.offsetLeft, pageNumber: page.number });\n                        const viewportPosition = {\n                            boundingRect: pageBoundingRect,\n                            rects: [],\n                            pageNumber: page.number,\n                        };\n                        const scaledPosition = this.viewportPositionToScaled(viewportPosition);\n                        const image = this.screenshot(pageBoundingRect, pageBoundingRect.pageNumber);\n                        this.setTip(viewportPosition, onSelectionFinished(scaledPosition, { image }, () => this.hideTipAndSelection(), () => this.setState({\n                            ghostHighlight: {\n                                position: scaledPosition,\n                                content: { image },\n                            },\n                        }, () => {\n                            resetSelection();\n                            this.renderHighlights();\n                        })));\n                    } })) : null)));\n    }\n}\nPdfHighlighter.defaultProps = {\n    pdfScaleValue: \"auto\",\n};\n//# sourceMappingURL=PdfHighlighter.js.map","import React, { Component } from \"react\";\nimport \"../style/Tip.css\";\nexport class Tip extends Component {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            compact: true,\n            text: \"\",\n            emoji: \"\",\n        };\n    }\n    // for TipContainer\n    componentDidUpdate(nextProps, nextState) {\n        const { onUpdate } = this.props;\n        if (onUpdate && this.state.compact !== nextState.compact) {\n            onUpdate();\n        }\n    }\n    render() {\n        const { onConfirm, onOpen } = this.props;\n        const { compact, text, emoji } = this.state;\n        return (React.createElement(\"div\", { className: \"Tip\" }, compact ? (React.createElement(\"div\", { className: \"Tip__compact\", onClick: () => {\n                onOpen();\n                this.setState({ compact: false });\n            } }, \"Add highlight\")) : (React.createElement(\"form\", { className: \"Tip__card\", onSubmit: (event) => {\n                event.preventDefault();\n                onConfirm({ text, emoji });\n            } },\n            React.createElement(\"div\", null,\n                React.createElement(\"textarea\", { placeholder: \"Your comment\", autoFocus: true, value: text, onChange: (event) => this.setState({ text: event.target.value }), ref: (node) => {\n                        if (node) {\n                            node.focus();\n                        }\n                    } }),\n                React.createElement(\"div\", null, [\"💩\", \"😱\", \"😍\", \"🔥\", \"😳\", \"⚠️\"].map((_emoji) => (React.createElement(\"label\", { key: _emoji },\n                    React.createElement(\"input\", { checked: emoji === _emoji, type: \"radio\", name: \"emoji\", value: _emoji, onChange: (event) => this.setState({ emoji: event.target.value }) }),\n                    _emoji))))),\n            React.createElement(\"div\", null,\n                React.createElement(\"input\", { type: \"submit\", value: \"Save\" }))))));\n    }\n}\nexport default Tip;\n//# sourceMappingURL=Tip.js.map","import React, { Component } from \"react\";\nimport \"../style/Highlight.css\";\nexport class Highlight extends Component {\n    render() {\n        const { position, onClick, onMouseOver, onMouseOut, comment, isScrolledTo, } = this.props;\n        const { rects, boundingRect } = position;\n        return (React.createElement(\"div\", { className: `Highlight ${isScrolledTo ? \"Highlight--scrolledTo\" : \"\"}` },\n            comment ? (React.createElement(\"div\", { className: \"Highlight__emoji\", style: {\n                    left: 20,\n                    top: boundingRect.top,\n                } }, comment.emoji)) : null,\n            React.createElement(\"div\", { className: \"Highlight__parts\" }, rects.map((rect, index) => (React.createElement(\"div\", { onMouseOver: onMouseOver, onMouseOut: onMouseOut, onClick: onClick, key: index, style: rect, className: `Highlight__part` }))))));\n    }\n}\nexport default Highlight;\n//# sourceMappingURL=Highlight.js.map","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport React, { Component } from \"react\";\nclass MouseMonitor extends Component {\n    constructor() {\n        super(...arguments);\n        this.container = null;\n        this.unsubscribe = () => { };\n        this.onMouseMove = (event) => {\n            if (!this.container) {\n                return;\n            }\n            const { onMoveAway, paddingX, paddingY } = this.props;\n            const { clientX, clientY } = event;\n            // TODO: see if possible to optimize\n            const { left, top, width, height } = this.container.getBoundingClientRect();\n            const inBoundsX = clientX > left - paddingX && clientX < left + width + paddingX;\n            const inBoundsY = clientY > top - paddingY && clientY < top + height + paddingY;\n            const isNear = inBoundsX && inBoundsY;\n            if (!isNear) {\n                onMoveAway();\n            }\n        };\n        this.attachRef = (ref) => {\n            this.container = ref;\n            this.unsubscribe();\n            if (ref) {\n                const { ownerDocument: doc } = ref;\n                doc.addEventListener(\"mousemove\", this.onMouseMove);\n                this.unsubscribe = () => {\n                    doc.removeEventListener(\"mousemove\", this.onMouseMove);\n                };\n            }\n        };\n    }\n    render() {\n        // eslint-disable-next-line\n        const _a = this.props, { onMoveAway, paddingX, paddingY, children } = _a, restProps = __rest(_a, [\"onMoveAway\", \"paddingX\", \"paddingY\", \"children\"]);\n        return (React.createElement(\"div\", { ref: this.attachRef }, React.cloneElement(children, restProps)));\n    }\n}\nexport default MouseMonitor;\n//# sourceMappingURL=MouseMonitor.js.map","import React, { Component } from \"react\";\nimport MouseMonitor from \"./MouseMonitor\";\nexport class Popup extends Component {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            mouseIn: false,\n        };\n    }\n    render() {\n        const { onMouseOver, popupContent, onMouseOut } = this.props;\n        return (React.createElement(\"div\", { onMouseOver: () => {\n                this.setState({ mouseIn: true });\n                onMouseOver(React.createElement(MouseMonitor, { onMoveAway: () => {\n                        if (this.state.mouseIn) {\n                            return;\n                        }\n                        onMouseOut();\n                    }, paddingX: 60, paddingY: 30, children: popupContent }));\n            }, onMouseOut: () => {\n                this.setState({ mouseIn: false });\n            } }, this.props.children));\n    }\n}\nexport default Popup;\n//# sourceMappingURL=Popup.js.map","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo, useCallback, useMemo } from 'react';\nvar rowSizeBase = {\n    width: '100%',\n    height: '10px',\n    top: '0px',\n    left: '0px',\n    cursor: 'row-resize',\n};\nvar colSizeBase = {\n    width: '10px',\n    height: '100%',\n    top: '0px',\n    left: '0px',\n    cursor: 'col-resize',\n};\nvar edgeBase = {\n    width: '20px',\n    height: '20px',\n    position: 'absolute',\n    zIndex: 1,\n};\nvar styles = {\n    top: __assign(__assign({}, rowSizeBase), { top: '-5px' }),\n    right: __assign(__assign({}, colSizeBase), { left: undefined, right: '-5px' }),\n    bottom: __assign(__assign({}, rowSizeBase), { top: undefined, bottom: '-5px' }),\n    left: __assign(__assign({}, colSizeBase), { left: '-5px' }),\n    topRight: __assign(__assign({}, edgeBase), { right: '-10px', top: '-10px', cursor: 'ne-resize' }),\n    bottomRight: __assign(__assign({}, edgeBase), { right: '-10px', bottom: '-10px', cursor: 'se-resize' }),\n    bottomLeft: __assign(__assign({}, edgeBase), { left: '-10px', bottom: '-10px', cursor: 'sw-resize' }),\n    topLeft: __assign(__assign({}, edgeBase), { left: '-10px', top: '-10px', cursor: 'nw-resize' }),\n};\nexport var Resizer = memo(function (props) {\n    var onResizeStart = props.onResizeStart, direction = props.direction, children = props.children, replaceStyles = props.replaceStyles, className = props.className;\n    var onMouseDown = useCallback(function (e) {\n        onResizeStart(e, direction);\n    }, [onResizeStart, direction]);\n    var onTouchStart = useCallback(function (e) {\n        onResizeStart(e, direction);\n    }, [onResizeStart, direction]);\n    var style = useMemo(function () {\n        return __assign(__assign({ position: 'absolute', userSelect: 'none' }, styles[direction]), (replaceStyles !== null && replaceStyles !== void 0 ? replaceStyles : {}));\n    }, [replaceStyles, direction]);\n    return (_jsx(\"div\", { className: className || undefined, style: style, onMouseDown: onMouseDown, onTouchStart: onTouchStart, children: children }));\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { PureComponent } from 'react';\nimport { flushSync } from 'react-dom';\nimport { Resizer } from './resizer';\nvar DEFAULT_SIZE = {\n    width: 'auto',\n    height: 'auto',\n};\nvar clamp = function (n, min, max) { return Math.max(Math.min(n, max), min); };\nvar snap = function (n, size, gridGap) {\n    var v = Math.round(n / size);\n    return v * size + gridGap * (v - 1);\n};\nvar hasDirection = function (dir, target) {\n    return new RegExp(dir, 'i').test(target);\n};\n// INFO: In case of window is a Proxy and does not porxy Events correctly, use isTouchEvent & isMouseEvent to distinguish event type instead of `instanceof`.\nvar isTouchEvent = function (event) {\n    return Boolean(event.touches && event.touches.length);\n};\nvar isMouseEvent = function (event) {\n    return Boolean((event.clientX || event.clientX === 0) &&\n        (event.clientY || event.clientY === 0));\n};\nvar findClosestSnap = function (n, snapArray, snapGap) {\n    if (snapGap === void 0) { snapGap = 0; }\n    var closestGapIndex = snapArray.reduce(function (prev, curr, index) { return (Math.abs(curr - n) < Math.abs(snapArray[prev] - n) ? index : prev); }, 0);\n    var gap = Math.abs(snapArray[closestGapIndex] - n);\n    return snapGap === 0 || gap < snapGap ? snapArray[closestGapIndex] : n;\n};\nvar getStringSize = function (n) {\n    n = n.toString();\n    if (n === 'auto') {\n        return n;\n    }\n    if (n.endsWith('px')) {\n        return n;\n    }\n    if (n.endsWith('%')) {\n        return n;\n    }\n    if (n.endsWith('vh')) {\n        return n;\n    }\n    if (n.endsWith('vw')) {\n        return n;\n    }\n    if (n.endsWith('vmax')) {\n        return n;\n    }\n    if (n.endsWith('vmin')) {\n        return n;\n    }\n    return \"\".concat(n, \"px\");\n};\nvar getPixelSize = function (size, parentSize, innerWidth, innerHeight) {\n    if (size && typeof size === 'string') {\n        if (size.endsWith('px')) {\n            return Number(size.replace('px', ''));\n        }\n        if (size.endsWith('%')) {\n            var ratio = Number(size.replace('%', '')) / 100;\n            return parentSize * ratio;\n        }\n        if (size.endsWith('vw')) {\n            var ratio = Number(size.replace('vw', '')) / 100;\n            return innerWidth * ratio;\n        }\n        if (size.endsWith('vh')) {\n            var ratio = Number(size.replace('vh', '')) / 100;\n            return innerHeight * ratio;\n        }\n    }\n    return size;\n};\nvar calculateNewMax = function (parentSize, innerWidth, innerHeight, maxWidth, maxHeight, minWidth, minHeight) {\n    maxWidth = getPixelSize(maxWidth, parentSize.width, innerWidth, innerHeight);\n    maxHeight = getPixelSize(maxHeight, parentSize.height, innerWidth, innerHeight);\n    minWidth = getPixelSize(minWidth, parentSize.width, innerWidth, innerHeight);\n    minHeight = getPixelSize(minHeight, parentSize.height, innerWidth, innerHeight);\n    return {\n        maxWidth: typeof maxWidth === 'undefined' ? undefined : Number(maxWidth),\n        maxHeight: typeof maxHeight === 'undefined' ? undefined : Number(maxHeight),\n        minWidth: typeof minWidth === 'undefined' ? undefined : Number(minWidth),\n        minHeight: typeof minHeight === 'undefined' ? undefined : Number(minHeight),\n    };\n};\n/**\n * transform T | [T, T] to [T, T]\n * @param val\n * @returns\n */\n// tslint:disable-next-line\nvar normalizeToPair = function (val) { return (Array.isArray(val) ? val : [val, val]); };\nvar definedProps = [\n    'as',\n    'ref',\n    'style',\n    'className',\n    'grid',\n    'gridGap',\n    'snap',\n    'bounds',\n    'boundsByDirection',\n    'size',\n    'defaultSize',\n    'minWidth',\n    'minHeight',\n    'maxWidth',\n    'maxHeight',\n    'lockAspectRatio',\n    'lockAspectRatioExtraWidth',\n    'lockAspectRatioExtraHeight',\n    'enable',\n    'handleStyles',\n    'handleClasses',\n    'handleWrapperStyle',\n    'handleWrapperClass',\n    'children',\n    'onResizeStart',\n    'onResize',\n    'onResizeStop',\n    'handleComponent',\n    'scale',\n    'resizeRatio',\n    'snapGap',\n];\n// HACK: This class is used to calculate % size.\nvar baseClassName = '__resizable_base__';\nvar Resizable = /** @class */ (function (_super) {\n    __extends(Resizable, _super);\n    function Resizable(props) {\n        var _a, _b, _c, _d;\n        var _this = _super.call(this, props) || this;\n        _this.ratio = 1;\n        _this.resizable = null;\n        // For parent boundary\n        _this.parentLeft = 0;\n        _this.parentTop = 0;\n        // For boundary\n        _this.resizableLeft = 0;\n        _this.resizableRight = 0;\n        _this.resizableTop = 0;\n        _this.resizableBottom = 0;\n        // For target boundary\n        _this.targetLeft = 0;\n        _this.targetTop = 0;\n        _this.delta = {\n            width: 0,\n            height: 0,\n        };\n        _this.appendBase = function () {\n            if (!_this.resizable || !_this.window) {\n                return null;\n            }\n            var parent = _this.parentNode;\n            if (!parent) {\n                return null;\n            }\n            var element = _this.window.document.createElement('div');\n            element.style.width = '100%';\n            element.style.height = '100%';\n            element.style.position = 'absolute';\n            element.style.transform = 'scale(0, 0)';\n            element.style.left = '0';\n            element.style.flex = '0 0 100%';\n            if (element.classList) {\n                element.classList.add(baseClassName);\n            }\n            else {\n                element.className += baseClassName;\n            }\n            parent.appendChild(element);\n            return element;\n        };\n        _this.removeBase = function (base) {\n            var parent = _this.parentNode;\n            if (!parent) {\n                return;\n            }\n            parent.removeChild(base);\n        };\n        _this.state = {\n            isResizing: false,\n            width: (_b = (_a = _this.propsSize) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 'auto',\n            height: (_d = (_c = _this.propsSize) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 'auto',\n            direction: 'right',\n            original: {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0,\n            },\n            backgroundStyle: {\n                height: '100%',\n                width: '100%',\n                backgroundColor: 'rgba(0,0,0,0)',\n                cursor: 'auto',\n                opacity: 0,\n                position: 'fixed',\n                zIndex: 9999,\n                top: '0',\n                left: '0',\n                bottom: '0',\n                right: '0',\n            },\n            flexBasis: undefined,\n        };\n        _this.onResizeStart = _this.onResizeStart.bind(_this);\n        _this.onMouseMove = _this.onMouseMove.bind(_this);\n        _this.onMouseUp = _this.onMouseUp.bind(_this);\n        return _this;\n    }\n    Object.defineProperty(Resizable.prototype, \"parentNode\", {\n        get: function () {\n            if (!this.resizable) {\n                return null;\n            }\n            return this.resizable.parentNode;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Resizable.prototype, \"window\", {\n        get: function () {\n            if (!this.resizable) {\n                return null;\n            }\n            if (!this.resizable.ownerDocument) {\n                return null;\n            }\n            return this.resizable.ownerDocument.defaultView;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Resizable.prototype, \"propsSize\", {\n        get: function () {\n            return this.props.size || this.props.defaultSize || DEFAULT_SIZE;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Resizable.prototype, \"size\", {\n        get: function () {\n            var width = 0;\n            var height = 0;\n            if (this.resizable && this.window) {\n                var orgWidth = this.resizable.offsetWidth;\n                var orgHeight = this.resizable.offsetHeight;\n                // HACK: Set position `relative` to get parent size.\n                //       This is because when re-resizable set `absolute`, I can not get base width correctly.\n                var orgPosition = this.resizable.style.position;\n                if (orgPosition !== 'relative') {\n                    this.resizable.style.position = 'relative';\n                }\n                // INFO: Use original width or height if set auto.\n                width = this.resizable.style.width !== 'auto' ? this.resizable.offsetWidth : orgWidth;\n                height = this.resizable.style.height !== 'auto' ? this.resizable.offsetHeight : orgHeight;\n                // Restore original position\n                this.resizable.style.position = orgPosition;\n            }\n            return { width: width, height: height };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Resizable.prototype, \"sizeStyle\", {\n        get: function () {\n            var _this = this;\n            var size = this.props.size;\n            var getSize = function (key) {\n                var _a;\n                if (typeof _this.state[key] === 'undefined' || _this.state[key] === 'auto') {\n                    return 'auto';\n                }\n                if (_this.propsSize && _this.propsSize[key] && ((_a = _this.propsSize[key]) === null || _a === void 0 ? void 0 : _a.toString().endsWith('%'))) {\n                    if (_this.state[key].toString().endsWith('%')) {\n                        return _this.state[key].toString();\n                    }\n                    var parentSize = _this.getParentSize();\n                    var value = Number(_this.state[key].toString().replace('px', ''));\n                    var percent = (value / parentSize[key]) * 100;\n                    return \"\".concat(percent, \"%\");\n                }\n                return getStringSize(_this.state[key]);\n            };\n            var width = size && typeof size.width !== 'undefined' && !this.state.isResizing\n                ? getStringSize(size.width)\n                : getSize('width');\n            var height = size && typeof size.height !== 'undefined' && !this.state.isResizing\n                ? getStringSize(size.height)\n                : getSize('height');\n            return { width: width, height: height };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Resizable.prototype.getParentSize = function () {\n        if (!this.parentNode) {\n            if (!this.window) {\n                return { width: 0, height: 0 };\n            }\n            return { width: this.window.innerWidth, height: this.window.innerHeight };\n        }\n        var base = this.appendBase();\n        if (!base) {\n            return { width: 0, height: 0 };\n        }\n        // INFO: To calculate parent width with flex layout\n        var wrapChanged = false;\n        var wrap = this.parentNode.style.flexWrap;\n        if (wrap !== 'wrap') {\n            wrapChanged = true;\n            this.parentNode.style.flexWrap = 'wrap';\n            // HACK: Use relative to get parent padding size\n        }\n        base.style.position = 'relative';\n        base.style.minWidth = '100%';\n        base.style.minHeight = '100%';\n        var size = {\n            width: base.offsetWidth,\n            height: base.offsetHeight,\n        };\n        if (wrapChanged) {\n            this.parentNode.style.flexWrap = wrap;\n        }\n        this.removeBase(base);\n        return size;\n    };\n    Resizable.prototype.bindEvents = function () {\n        if (this.window) {\n            this.window.addEventListener('mouseup', this.onMouseUp);\n            this.window.addEventListener('mousemove', this.onMouseMove);\n            this.window.addEventListener('mouseleave', this.onMouseUp);\n            this.window.addEventListener('touchmove', this.onMouseMove, {\n                capture: true,\n                passive: false,\n            });\n            this.window.addEventListener('touchend', this.onMouseUp);\n        }\n    };\n    Resizable.prototype.unbindEvents = function () {\n        if (this.window) {\n            this.window.removeEventListener('mouseup', this.onMouseUp);\n            this.window.removeEventListener('mousemove', this.onMouseMove);\n            this.window.removeEventListener('mouseleave', this.onMouseUp);\n            this.window.removeEventListener('touchmove', this.onMouseMove, true);\n            this.window.removeEventListener('touchend', this.onMouseUp);\n        }\n    };\n    Resizable.prototype.componentDidMount = function () {\n        if (!this.resizable || !this.window) {\n            return;\n        }\n        var computedStyle = this.window.getComputedStyle(this.resizable);\n        this.setState({\n            width: this.state.width || this.size.width,\n            height: this.state.height || this.size.height,\n            flexBasis: computedStyle.flexBasis !== 'auto' ? computedStyle.flexBasis : undefined,\n        });\n    };\n    Resizable.prototype.componentWillUnmount = function () {\n        if (this.window) {\n            this.unbindEvents();\n        }\n    };\n    Resizable.prototype.createSizeForCssProperty = function (newSize, kind) {\n        var propsSize = this.propsSize && this.propsSize[kind];\n        return this.state[kind] === 'auto' &&\n            this.state.original[kind] === newSize &&\n            (typeof propsSize === 'undefined' || propsSize === 'auto')\n            ? 'auto'\n            : newSize;\n    };\n    Resizable.prototype.calculateNewMaxFromBoundary = function (maxWidth, maxHeight) {\n        var boundsByDirection = this.props.boundsByDirection;\n        var direction = this.state.direction;\n        var widthByDirection = boundsByDirection && hasDirection('left', direction);\n        var heightByDirection = boundsByDirection && hasDirection('top', direction);\n        var boundWidth;\n        var boundHeight;\n        if (this.props.bounds === 'parent') {\n            var parent_1 = this.parentNode;\n            if (parent_1) {\n                boundWidth = widthByDirection\n                    ? this.resizableRight - this.parentLeft\n                    : parent_1.offsetWidth + (this.parentLeft - this.resizableLeft);\n                boundHeight = heightByDirection\n                    ? this.resizableBottom - this.parentTop\n                    : parent_1.offsetHeight + (this.parentTop - this.resizableTop);\n            }\n        }\n        else if (this.props.bounds === 'window') {\n            if (this.window) {\n                boundWidth = widthByDirection ? this.resizableRight : this.window.innerWidth - this.resizableLeft;\n                boundHeight = heightByDirection ? this.resizableBottom : this.window.innerHeight - this.resizableTop;\n            }\n        }\n        else if (this.props.bounds) {\n            boundWidth = widthByDirection\n                ? this.resizableRight - this.targetLeft\n                : this.props.bounds.offsetWidth + (this.targetLeft - this.resizableLeft);\n            boundHeight = heightByDirection\n                ? this.resizableBottom - this.targetTop\n                : this.props.bounds.offsetHeight + (this.targetTop - this.resizableTop);\n        }\n        if (boundWidth && Number.isFinite(boundWidth)) {\n            maxWidth = maxWidth && maxWidth < boundWidth ? maxWidth : boundWidth;\n        }\n        if (boundHeight && Number.isFinite(boundHeight)) {\n            maxHeight = maxHeight && maxHeight < boundHeight ? maxHeight : boundHeight;\n        }\n        return { maxWidth: maxWidth, maxHeight: maxHeight };\n    };\n    Resizable.prototype.calculateNewSizeFromDirection = function (clientX, clientY) {\n        var scale = this.props.scale || 1;\n        var _a = normalizeToPair(this.props.resizeRatio || 1), resizeRatioX = _a[0], resizeRatioY = _a[1];\n        var _b = this.state, direction = _b.direction, original = _b.original;\n        var _c = this.props, lockAspectRatio = _c.lockAspectRatio, lockAspectRatioExtraHeight = _c.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _c.lockAspectRatioExtraWidth;\n        var newWidth = original.width;\n        var newHeight = original.height;\n        var extraHeight = lockAspectRatioExtraHeight || 0;\n        var extraWidth = lockAspectRatioExtraWidth || 0;\n        if (hasDirection('right', direction)) {\n            newWidth = original.width + ((clientX - original.x) * resizeRatioX) / scale;\n            if (lockAspectRatio) {\n                newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n            }\n        }\n        if (hasDirection('left', direction)) {\n            newWidth = original.width - ((clientX - original.x) * resizeRatioX) / scale;\n            if (lockAspectRatio) {\n                newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n            }\n        }\n        if (hasDirection('bottom', direction)) {\n            newHeight = original.height + ((clientY - original.y) * resizeRatioY) / scale;\n            if (lockAspectRatio) {\n                newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n            }\n        }\n        if (hasDirection('top', direction)) {\n            newHeight = original.height - ((clientY - original.y) * resizeRatioY) / scale;\n            if (lockAspectRatio) {\n                newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n            }\n        }\n        return { newWidth: newWidth, newHeight: newHeight };\n    };\n    Resizable.prototype.calculateNewSizeFromAspectRatio = function (newWidth, newHeight, max, min) {\n        var _a = this.props, lockAspectRatio = _a.lockAspectRatio, lockAspectRatioExtraHeight = _a.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _a.lockAspectRatioExtraWidth;\n        var computedMinWidth = typeof min.width === 'undefined' ? 10 : min.width;\n        var computedMaxWidth = typeof max.width === 'undefined' || max.width < 0 ? newWidth : max.width;\n        var computedMinHeight = typeof min.height === 'undefined' ? 10 : min.height;\n        var computedMaxHeight = typeof max.height === 'undefined' || max.height < 0 ? newHeight : max.height;\n        var extraHeight = lockAspectRatioExtraHeight || 0;\n        var extraWidth = lockAspectRatioExtraWidth || 0;\n        if (lockAspectRatio) {\n            var extraMinWidth = (computedMinHeight - extraHeight) * this.ratio + extraWidth;\n            var extraMaxWidth = (computedMaxHeight - extraHeight) * this.ratio + extraWidth;\n            var extraMinHeight = (computedMinWidth - extraWidth) / this.ratio + extraHeight;\n            var extraMaxHeight = (computedMaxWidth - extraWidth) / this.ratio + extraHeight;\n            var lockedMinWidth = Math.max(computedMinWidth, extraMinWidth);\n            var lockedMaxWidth = Math.min(computedMaxWidth, extraMaxWidth);\n            var lockedMinHeight = Math.max(computedMinHeight, extraMinHeight);\n            var lockedMaxHeight = Math.min(computedMaxHeight, extraMaxHeight);\n            newWidth = clamp(newWidth, lockedMinWidth, lockedMaxWidth);\n            newHeight = clamp(newHeight, lockedMinHeight, lockedMaxHeight);\n        }\n        else {\n            newWidth = clamp(newWidth, computedMinWidth, computedMaxWidth);\n            newHeight = clamp(newHeight, computedMinHeight, computedMaxHeight);\n        }\n        return { newWidth: newWidth, newHeight: newHeight };\n    };\n    Resizable.prototype.setBoundingClientRect = function () {\n        var adjustedScale = 1 / (this.props.scale || 1);\n        // For parent boundary\n        if (this.props.bounds === 'parent') {\n            var parent_2 = this.parentNode;\n            if (parent_2) {\n                var parentRect = parent_2.getBoundingClientRect();\n                this.parentLeft = parentRect.left * adjustedScale;\n                this.parentTop = parentRect.top * adjustedScale;\n            }\n        }\n        // For target(html element) boundary\n        if (this.props.bounds && typeof this.props.bounds !== 'string') {\n            var targetRect = this.props.bounds.getBoundingClientRect();\n            this.targetLeft = targetRect.left * adjustedScale;\n            this.targetTop = targetRect.top * adjustedScale;\n        }\n        // For boundary\n        if (this.resizable) {\n            var _a = this.resizable.getBoundingClientRect(), left = _a.left, top_1 = _a.top, right = _a.right, bottom = _a.bottom;\n            this.resizableLeft = left * adjustedScale;\n            this.resizableRight = right * adjustedScale;\n            this.resizableTop = top_1 * adjustedScale;\n            this.resizableBottom = bottom * adjustedScale;\n        }\n    };\n    Resizable.prototype.onResizeStart = function (event, direction) {\n        if (!this.resizable || !this.window) {\n            return;\n        }\n        var clientX = 0;\n        var clientY = 0;\n        if (event.nativeEvent && isMouseEvent(event.nativeEvent)) {\n            clientX = event.nativeEvent.clientX;\n            clientY = event.nativeEvent.clientY;\n        }\n        else if (event.nativeEvent && isTouchEvent(event.nativeEvent)) {\n            clientX = event.nativeEvent.touches[0].clientX;\n            clientY = event.nativeEvent.touches[0].clientY;\n        }\n        if (this.props.onResizeStart) {\n            if (this.resizable) {\n                var startResize = this.props.onResizeStart(event, direction, this.resizable);\n                if (startResize === false) {\n                    return;\n                }\n            }\n        }\n        // Fix #168\n        if (this.props.size) {\n            if (typeof this.props.size.height !== 'undefined' && this.props.size.height !== this.state.height) {\n                this.setState({ height: this.props.size.height });\n            }\n            if (typeof this.props.size.width !== 'undefined' && this.props.size.width !== this.state.width) {\n                this.setState({ width: this.props.size.width });\n            }\n        }\n        // For lockAspectRatio case\n        this.ratio =\n            typeof this.props.lockAspectRatio === 'number' ? this.props.lockAspectRatio : this.size.width / this.size.height;\n        var flexBasis;\n        var computedStyle = this.window.getComputedStyle(this.resizable);\n        if (computedStyle.flexBasis !== 'auto') {\n            var parent_3 = this.parentNode;\n            if (parent_3) {\n                var dir = this.window.getComputedStyle(parent_3).flexDirection;\n                this.flexDir = dir.startsWith('row') ? 'row' : 'column';\n                flexBasis = computedStyle.flexBasis;\n            }\n        }\n        // For boundary\n        this.setBoundingClientRect();\n        this.bindEvents();\n        var state = {\n            original: {\n                x: clientX,\n                y: clientY,\n                width: this.size.width,\n                height: this.size.height,\n            },\n            isResizing: true,\n            backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: this.window.getComputedStyle(event.target).cursor || 'auto' }),\n            direction: direction,\n            flexBasis: flexBasis,\n        };\n        this.setState(state);\n    };\n    Resizable.prototype.onMouseMove = function (event) {\n        var _this = this;\n        if (!this.state.isResizing || !this.resizable || !this.window) {\n            return;\n        }\n        if (this.window.TouchEvent && isTouchEvent(event)) {\n            try {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n            catch (e) {\n                // Ignore on fail\n            }\n        }\n        var _a = this.props, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight, minWidth = _a.minWidth, minHeight = _a.minHeight;\n        var clientX = isTouchEvent(event) ? event.touches[0].clientX : event.clientX;\n        var clientY = isTouchEvent(event) ? event.touches[0].clientY : event.clientY;\n        var _b = this.state, direction = _b.direction, original = _b.original, width = _b.width, height = _b.height;\n        var parentSize = this.getParentSize();\n        var max = calculateNewMax(parentSize, this.window.innerWidth, this.window.innerHeight, maxWidth, maxHeight, minWidth, minHeight);\n        maxWidth = max.maxWidth;\n        maxHeight = max.maxHeight;\n        minWidth = max.minWidth;\n        minHeight = max.minHeight;\n        // Calculate new size\n        var _c = this.calculateNewSizeFromDirection(clientX, clientY), newHeight = _c.newHeight, newWidth = _c.newWidth;\n        // Calculate max size from boundary settings\n        var boundaryMax = this.calculateNewMaxFromBoundary(maxWidth, maxHeight);\n        if (this.props.snap && this.props.snap.x) {\n            newWidth = findClosestSnap(newWidth, this.props.snap.x, this.props.snapGap);\n        }\n        if (this.props.snap && this.props.snap.y) {\n            newHeight = findClosestSnap(newHeight, this.props.snap.y, this.props.snapGap);\n        }\n        // Calculate new size from aspect ratio\n        var newSize = this.calculateNewSizeFromAspectRatio(newWidth, newHeight, { width: boundaryMax.maxWidth, height: boundaryMax.maxHeight }, { width: minWidth, height: minHeight });\n        newWidth = newSize.newWidth;\n        newHeight = newSize.newHeight;\n        if (this.props.grid) {\n            var newGridWidth = snap(newWidth, this.props.grid[0], this.props.gridGap ? this.props.gridGap[0] : 0);\n            var newGridHeight = snap(newHeight, this.props.grid[1], this.props.gridGap ? this.props.gridGap[1] : 0);\n            var gap = this.props.snapGap || 0;\n            var w = gap === 0 || Math.abs(newGridWidth - newWidth) <= gap ? newGridWidth : newWidth;\n            var h = gap === 0 || Math.abs(newGridHeight - newHeight) <= gap ? newGridHeight : newHeight;\n            newWidth = w;\n            newHeight = h;\n        }\n        var delta = {\n            width: newWidth - original.width,\n            height: newHeight - original.height,\n        };\n        this.delta = delta;\n        if (width && typeof width === 'string') {\n            if (width.endsWith('%')) {\n                var percent = (newWidth / parentSize.width) * 100;\n                newWidth = \"\".concat(percent, \"%\");\n            }\n            else if (width.endsWith('vw')) {\n                var vw = (newWidth / this.window.innerWidth) * 100;\n                newWidth = \"\".concat(vw, \"vw\");\n            }\n            else if (width.endsWith('vh')) {\n                var vh = (newWidth / this.window.innerHeight) * 100;\n                newWidth = \"\".concat(vh, \"vh\");\n            }\n        }\n        if (height && typeof height === 'string') {\n            if (height.endsWith('%')) {\n                var percent = (newHeight / parentSize.height) * 100;\n                newHeight = \"\".concat(percent, \"%\");\n            }\n            else if (height.endsWith('vw')) {\n                var vw = (newHeight / this.window.innerWidth) * 100;\n                newHeight = \"\".concat(vw, \"vw\");\n            }\n            else if (height.endsWith('vh')) {\n                var vh = (newHeight / this.window.innerHeight) * 100;\n                newHeight = \"\".concat(vh, \"vh\");\n            }\n        }\n        var newState = {\n            width: this.createSizeForCssProperty(newWidth, 'width'),\n            height: this.createSizeForCssProperty(newHeight, 'height'),\n        };\n        if (this.flexDir === 'row') {\n            newState.flexBasis = newState.width;\n        }\n        else if (this.flexDir === 'column') {\n            newState.flexBasis = newState.height;\n        }\n        var widthChanged = this.state.width !== newState.width;\n        var heightChanged = this.state.height !== newState.height;\n        var flexBaseChanged = this.state.flexBasis !== newState.flexBasis;\n        var changed = widthChanged || heightChanged || flexBaseChanged;\n        if (changed) {\n            // For v18, update state sync\n            flushSync(function () {\n                _this.setState(newState);\n            });\n        }\n        if (this.props.onResize) {\n            if (changed) {\n                this.props.onResize(event, direction, this.resizable, delta);\n            }\n        }\n    };\n    Resizable.prototype.onMouseUp = function (event) {\n        var _a, _b;\n        var _c = this.state, isResizing = _c.isResizing, direction = _c.direction, original = _c.original;\n        if (!isResizing || !this.resizable) {\n            return;\n        }\n        if (this.props.onResizeStop) {\n            this.props.onResizeStop(event, direction, this.resizable, this.delta);\n        }\n        if (this.props.size) {\n            this.setState({ width: (_a = this.props.size.width) !== null && _a !== void 0 ? _a : 'auto', height: (_b = this.props.size.height) !== null && _b !== void 0 ? _b : 'auto' });\n        }\n        this.unbindEvents();\n        this.setState({\n            isResizing: false,\n            backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: 'auto' }),\n        });\n    };\n    Resizable.prototype.updateSize = function (size) {\n        var _a, _b;\n        this.setState({ width: (_a = size.width) !== null && _a !== void 0 ? _a : 'auto', height: (_b = size.height) !== null && _b !== void 0 ? _b : 'auto' });\n    };\n    Resizable.prototype.renderResizer = function () {\n        var _this = this;\n        var _a = this.props, enable = _a.enable, handleStyles = _a.handleStyles, handleClasses = _a.handleClasses, handleWrapperStyle = _a.handleWrapperStyle, handleWrapperClass = _a.handleWrapperClass, handleComponent = _a.handleComponent;\n        if (!enable) {\n            return null;\n        }\n        var resizers = Object.keys(enable).map(function (dir) {\n            if (enable[dir] !== false) {\n                return (_jsx(Resizer, { direction: dir, onResizeStart: _this.onResizeStart, replaceStyles: handleStyles && handleStyles[dir], className: handleClasses && handleClasses[dir], children: handleComponent && handleComponent[dir] ? handleComponent[dir] : null }, dir));\n            }\n            return null;\n        });\n        // #93 Wrap the resize box in span (will not break 100% width/height)\n        return (_jsx(\"div\", { className: handleWrapperClass, style: handleWrapperStyle, children: resizers }));\n    };\n    Resizable.prototype.render = function () {\n        var _this = this;\n        var extendsProps = Object.keys(this.props).reduce(function (acc, key) {\n            if (definedProps.indexOf(key) !== -1) {\n                return acc;\n            }\n            acc[key] = _this.props[key];\n            return acc;\n        }, {});\n        var style = __assign(__assign(__assign({ position: 'relative', userSelect: this.state.isResizing ? 'none' : 'auto' }, this.props.style), this.sizeStyle), { maxWidth: this.props.maxWidth, maxHeight: this.props.maxHeight, minWidth: this.props.minWidth, minHeight: this.props.minHeight, boxSizing: 'border-box', flexShrink: 0 });\n        if (this.state.flexBasis) {\n            style.flexBasis = this.state.flexBasis;\n        }\n        var Wrapper = this.props.as || 'div';\n        return (_jsxs(Wrapper, __assign({ style: style, className: this.props.className }, extendsProps, { \n            // `ref` is after `extendsProps` to ensure this one wins over a version\n            // passed in\n            ref: function (c) {\n                if (c) {\n                    _this.resizable = c;\n                }\n            }, children: [this.state.isResizing && _jsx(\"div\", { style: this.state.backgroundStyle }), this.props.children, this.renderResizer()] })));\n    };\n    Resizable.defaultProps = {\n        as: 'div',\n        onResizeStart: function () { },\n        onResize: function () { },\n        onResizeStop: function () { },\n        enable: {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true,\n            topRight: true,\n            bottomRight: true,\n            bottomLeft: true,\n            topLeft: true,\n        },\n        style: {},\n        grid: [1, 1],\n        gridGap: [0, 0],\n        lockAspectRatio: false,\n        lockAspectRatioExtraWidth: 0,\n        lockAspectRatioExtraHeight: 0,\n        scale: 1,\n        resizeRatio: 1,\n        snapGap: 0,\n    };\n    return Resizable;\n}(PureComponent));\nexport { Resizable };\n","import { createElement, PureComponent } from 'react';\nimport Draggable from 'react-draggable';\nimport { Resizable } from 're-resizable';\nimport { flushSync } from 'react-dom';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\n\nvar resizableStyle = {\n    width: \"auto\",\n    height: \"auto\",\n    display: \"inline-block\",\n    position: \"absolute\",\n    top: 0,\n    left: 0,\n};\nvar getEnableResizingByFlag = function (flag) { return ({\n    bottom: flag,\n    bottomLeft: flag,\n    bottomRight: flag,\n    left: flag,\n    right: flag,\n    top: flag,\n    topLeft: flag,\n    topRight: flag,\n}); };\nvar Rnd = /** @class */ (function (_super) {\n    __extends(Rnd, _super);\n    function Rnd(props) {\n        var _this = _super.call(this, props) || this;\n        _this.resizingPosition = { x: 0, y: 0 };\n        _this.offsetFromParent = { left: 0, top: 0 };\n        _this.resizableElement = { current: null };\n        _this.originalPosition = { x: 0, y: 0 };\n        _this.state = {\n            resizing: false,\n            bounds: {\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0,\n            },\n            maxWidth: props.maxWidth,\n            maxHeight: props.maxHeight,\n        };\n        _this.onResizeStart = _this.onResizeStart.bind(_this);\n        _this.onResize = _this.onResize.bind(_this);\n        _this.onResizeStop = _this.onResizeStop.bind(_this);\n        _this.onDragStart = _this.onDragStart.bind(_this);\n        _this.onDrag = _this.onDrag.bind(_this);\n        _this.onDragStop = _this.onDragStop.bind(_this);\n        _this.getMaxSizesFromProps = _this.getMaxSizesFromProps.bind(_this);\n        return _this;\n    }\n    Rnd.prototype.componentDidMount = function () {\n        this.updateOffsetFromParent();\n        var _a = this.offsetFromParent, left = _a.left, top = _a.top;\n        var _b = this.getDraggablePosition(), x = _b.x, y = _b.y;\n        this.draggable.setState({\n            x: x - left,\n            y: y - top,\n        });\n        // HACK: Apply position adjustment\n        this.forceUpdate();\n    };\n    // HACK: To get `react-draggable` state x and y.\n    Rnd.prototype.getDraggablePosition = function () {\n        var _a = this.draggable.state, x = _a.x, y = _a.y;\n        return { x: x, y: y };\n    };\n    Rnd.prototype.getParent = function () {\n        return this.resizable && this.resizable.parentNode;\n    };\n    Rnd.prototype.getParentSize = function () {\n        return this.resizable.getParentSize();\n    };\n    Rnd.prototype.getMaxSizesFromProps = function () {\n        var maxWidth = typeof this.props.maxWidth === \"undefined\" ? Number.MAX_SAFE_INTEGER : this.props.maxWidth;\n        var maxHeight = typeof this.props.maxHeight === \"undefined\" ? Number.MAX_SAFE_INTEGER : this.props.maxHeight;\n        return { maxWidth: maxWidth, maxHeight: maxHeight };\n    };\n    Rnd.prototype.getSelfElement = function () {\n        return this.resizable && this.resizable.resizable;\n    };\n    Rnd.prototype.getOffsetHeight = function (boundary) {\n        var scale = this.props.scale;\n        switch (this.props.bounds) {\n            case \"window\":\n                return window.innerHeight / scale;\n            case \"body\":\n                return document.body.offsetHeight / scale;\n            default:\n                return boundary.offsetHeight;\n        }\n    };\n    Rnd.prototype.getOffsetWidth = function (boundary) {\n        var scale = this.props.scale;\n        switch (this.props.bounds) {\n            case \"window\":\n                return window.innerWidth / scale;\n            case \"body\":\n                return document.body.offsetWidth / scale;\n            default:\n                return boundary.offsetWidth;\n        }\n    };\n    Rnd.prototype.onDragStart = function (e, data) {\n        if (this.props.onDragStart && this.props.onDragStart(e, data) === false) {\n            return false;\n        }\n        var pos = this.getDraggablePosition();\n        this.originalPosition = pos;\n        if (!this.props.bounds)\n            return;\n        var parent = this.getParent();\n        var scale = this.props.scale;\n        var boundary;\n        if (this.props.bounds === \"parent\") {\n            boundary = parent;\n        }\n        else if (this.props.bounds === \"body\") {\n            var parentRect_1 = parent.getBoundingClientRect();\n            var parentLeft_1 = parentRect_1.left;\n            var parentTop_1 = parentRect_1.top;\n            var bodyRect = document.body.getBoundingClientRect();\n            var left_1 = -(parentLeft_1 - parent.offsetLeft * scale - bodyRect.left) / scale;\n            var top_1 = -(parentTop_1 - parent.offsetTop * scale - bodyRect.top) / scale;\n            var right = (document.body.offsetWidth - this.resizable.size.width * scale) / scale + left_1;\n            var bottom = (document.body.offsetHeight - this.resizable.size.height * scale) / scale + top_1;\n            return this.setState({ bounds: { top: top_1, right: right, bottom: bottom, left: left_1 } });\n        }\n        else if (this.props.bounds === \"window\") {\n            if (!this.resizable)\n                return;\n            var parentRect_2 = parent.getBoundingClientRect();\n            var parentLeft_2 = parentRect_2.left;\n            var parentTop_2 = parentRect_2.top;\n            var left_2 = -(parentLeft_2 - parent.offsetLeft * scale) / scale;\n            var top_2 = -(parentTop_2 - parent.offsetTop * scale) / scale;\n            var right = (window.innerWidth - this.resizable.size.width * scale) / scale + left_2;\n            var bottom = (window.innerHeight - this.resizable.size.height * scale) / scale + top_2;\n            return this.setState({ bounds: { top: top_2, right: right, bottom: bottom, left: left_2 } });\n        }\n        else if (typeof this.props.bounds === \"string\") {\n            boundary = document.querySelector(this.props.bounds);\n        }\n        else if (this.props.bounds instanceof HTMLElement) {\n            boundary = this.props.bounds;\n        }\n        if (!(boundary instanceof HTMLElement) || !(parent instanceof HTMLElement)) {\n            return;\n        }\n        var boundaryRect = boundary.getBoundingClientRect();\n        var boundaryLeft = boundaryRect.left;\n        var boundaryTop = boundaryRect.top;\n        var parentRect = parent.getBoundingClientRect();\n        var parentLeft = parentRect.left;\n        var parentTop = parentRect.top;\n        var left = (boundaryLeft - parentLeft) / scale;\n        var top = boundaryTop - parentTop;\n        if (!this.resizable)\n            return;\n        this.updateOffsetFromParent();\n        var offset = this.offsetFromParent;\n        this.setState({\n            bounds: {\n                top: top - offset.top,\n                right: left + (boundary.offsetWidth - this.resizable.size.width) - offset.left / scale,\n                bottom: top + (boundary.offsetHeight - this.resizable.size.height) - offset.top,\n                left: left - offset.left / scale,\n            },\n        });\n    };\n    Rnd.prototype.onDrag = function (e, data) {\n        if (!this.props.onDrag)\n            return;\n        var _a = this.offsetFromParent, left = _a.left, top = _a.top;\n        if (!this.props.dragAxis || this.props.dragAxis === \"both\") {\n            return this.props.onDrag(e, __assign(__assign({}, data), { x: data.x + left, y: data.y + top }));\n        }\n        else if (this.props.dragAxis === \"x\") {\n            return this.props.onDrag(e, __assign(__assign({}, data), { x: data.x + left, y: this.originalPosition.y + top, deltaY: 0 }));\n        }\n        else if (this.props.dragAxis === \"y\") {\n            return this.props.onDrag(e, __assign(__assign({}, data), { x: this.originalPosition.x + left, y: data.y + top, deltaX: 0 }));\n        }\n    };\n    Rnd.prototype.onDragStop = function (e, data) {\n        if (!this.props.onDragStop)\n            return;\n        var _a = this.offsetFromParent, left = _a.left, top = _a.top;\n        if (!this.props.dragAxis || this.props.dragAxis === \"both\") {\n            return this.props.onDragStop(e, __assign(__assign({}, data), { x: data.x + left, y: data.y + top }));\n        }\n        else if (this.props.dragAxis === \"x\") {\n            return this.props.onDragStop(e, __assign(__assign({}, data), { x: data.x + left, y: this.originalPosition.y + top, deltaY: 0 }));\n        }\n        else if (this.props.dragAxis === \"y\") {\n            return this.props.onDragStop(e, __assign(__assign({}, data), { x: this.originalPosition.x + left, y: data.y + top, deltaX: 0 }));\n        }\n    };\n    Rnd.prototype.onResizeStart = function (e, dir, elementRef) {\n        if (this.props.onResizeStart && this.props.onResizeStart(e, dir, elementRef) === false) {\n            return false;\n        }\n        e.stopPropagation();\n        this.setState({\n            resizing: true,\n        });\n        var scale = this.props.scale;\n        var offset = this.offsetFromParent;\n        var pos = this.getDraggablePosition();\n        this.resizingPosition = { x: pos.x + offset.left, y: pos.y + offset.top };\n        this.originalPosition = pos;\n        if (this.props.bounds) {\n            var parent_1 = this.getParent();\n            var boundary = void 0;\n            if (this.props.bounds === \"parent\") {\n                boundary = parent_1;\n            }\n            else if (this.props.bounds === \"body\") {\n                boundary = document.body;\n            }\n            else if (this.props.bounds === \"window\") {\n                boundary = window;\n            }\n            else if (typeof this.props.bounds === \"string\") {\n                boundary = document.querySelector(this.props.bounds);\n            }\n            else if (this.props.bounds instanceof HTMLElement) {\n                boundary = this.props.bounds;\n            }\n            var self_1 = this.getSelfElement();\n            if (self_1 instanceof Element &&\n                (boundary instanceof HTMLElement || boundary === window) &&\n                parent_1 instanceof HTMLElement) {\n                var _a = this.getMaxSizesFromProps(), maxWidth = _a.maxWidth, maxHeight = _a.maxHeight;\n                var parentSize = this.getParentSize();\n                if (maxWidth && typeof maxWidth === \"string\") {\n                    if (maxWidth.endsWith(\"%\")) {\n                        var ratio = Number(maxWidth.replace(\"%\", \"\")) / 100;\n                        maxWidth = parentSize.width * ratio;\n                    }\n                    else if (maxWidth.endsWith(\"px\")) {\n                        maxWidth = Number(maxWidth.replace(\"px\", \"\"));\n                    }\n                }\n                if (maxHeight && typeof maxHeight === \"string\") {\n                    if (maxHeight.endsWith(\"%\")) {\n                        var ratio = Number(maxHeight.replace(\"%\", \"\")) / 100;\n                        maxHeight = parentSize.height * ratio;\n                    }\n                    else if (maxHeight.endsWith(\"px\")) {\n                        maxHeight = Number(maxHeight.replace(\"px\", \"\"));\n                    }\n                }\n                var selfRect = self_1.getBoundingClientRect();\n                var selfLeft = selfRect.left;\n                var selfTop = selfRect.top;\n                var boundaryRect = this.props.bounds === \"window\" ? { left: 0, top: 0 } : boundary.getBoundingClientRect();\n                var boundaryLeft = boundaryRect.left;\n                var boundaryTop = boundaryRect.top;\n                var offsetWidth = this.getOffsetWidth(boundary);\n                var offsetHeight = this.getOffsetHeight(boundary);\n                var hasLeft = dir.toLowerCase().endsWith(\"left\");\n                var hasRight = dir.toLowerCase().endsWith(\"right\");\n                var hasTop = dir.startsWith(\"top\");\n                var hasBottom = dir.startsWith(\"bottom\");\n                if ((hasLeft || hasTop) && this.resizable) {\n                    var max = (selfLeft - boundaryLeft) / scale + this.resizable.size.width;\n                    this.setState({ maxWidth: max > Number(maxWidth) ? maxWidth : max });\n                }\n                // INFO: To set bounds in `lock aspect ratio with bounds` case. See also that story.\n                if (hasRight || (this.props.lockAspectRatio && !hasLeft && !hasTop)) {\n                    var max = offsetWidth + (boundaryLeft - selfLeft) / scale;\n                    this.setState({ maxWidth: max > Number(maxWidth) ? maxWidth : max });\n                }\n                if ((hasTop || hasLeft) && this.resizable) {\n                    var max = (selfTop - boundaryTop) / scale + this.resizable.size.height;\n                    this.setState({\n                        maxHeight: max > Number(maxHeight) ? maxHeight : max,\n                    });\n                }\n                // INFO: To set bounds in `lock aspect ratio with bounds` case. See also that story.\n                if (hasBottom || (this.props.lockAspectRatio && !hasTop && !hasLeft)) {\n                    var max = offsetHeight + (boundaryTop - selfTop) / scale;\n                    this.setState({\n                        maxHeight: max > Number(maxHeight) ? maxHeight : max,\n                    });\n                }\n            }\n        }\n        else {\n            this.setState({\n                maxWidth: this.props.maxWidth,\n                maxHeight: this.props.maxHeight,\n            });\n        }\n    };\n    Rnd.prototype.onResize = function (e, direction, elementRef, delta) {\n        var _this = this;\n        // INFO: Apply x and y position adjustments caused by resizing to draggable\n        var newPos = { x: this.originalPosition.x, y: this.originalPosition.y };\n        var left = -delta.width;\n        var top = -delta.height;\n        var directions = [\"top\", \"left\", \"topLeft\", \"bottomLeft\", \"topRight\"];\n        if (directions.includes(direction)) {\n            if (direction === \"bottomLeft\") {\n                newPos.x += left;\n            }\n            else if (direction === \"topRight\") {\n                newPos.y += top;\n            }\n            else {\n                newPos.x += left;\n                newPos.y += top;\n            }\n        }\n        var draggableState = this.draggable.state;\n        if (newPos.x !== draggableState.x || newPos.y !== draggableState.y) {\n            flushSync(function () {\n                _this.draggable.setState(newPos);\n            });\n        }\n        this.updateOffsetFromParent();\n        var offset = this.offsetFromParent;\n        var x = this.getDraggablePosition().x + offset.left;\n        var y = this.getDraggablePosition().y + offset.top;\n        this.resizingPosition = { x: x, y: y };\n        if (!this.props.onResize)\n            return;\n        this.props.onResize(e, direction, elementRef, delta, {\n            x: x,\n            y: y,\n        });\n    };\n    Rnd.prototype.onResizeStop = function (e, direction, elementRef, delta) {\n        this.setState({\n            resizing: false,\n        });\n        var _a = this.getMaxSizesFromProps(), maxWidth = _a.maxWidth, maxHeight = _a.maxHeight;\n        this.setState({ maxWidth: maxWidth, maxHeight: maxHeight });\n        if (this.props.onResizeStop) {\n            this.props.onResizeStop(e, direction, elementRef, delta, this.resizingPosition);\n        }\n    };\n    Rnd.prototype.updateSize = function (size) {\n        if (!this.resizable)\n            return;\n        this.resizable.updateSize({ width: size.width, height: size.height });\n    };\n    Rnd.prototype.updatePosition = function (position) {\n        this.draggable.setState(position);\n    };\n    Rnd.prototype.updateOffsetFromParent = function () {\n        var scale = this.props.scale;\n        var parent = this.getParent();\n        var self = this.getSelfElement();\n        if (!parent || self === null) {\n            return {\n                top: 0,\n                left: 0,\n            };\n        }\n        var parentRect = parent.getBoundingClientRect();\n        var parentLeft = parentRect.left;\n        var parentTop = parentRect.top;\n        var selfRect = self.getBoundingClientRect();\n        var position = this.getDraggablePosition();\n        var scrollLeft = parent.scrollLeft;\n        var scrollTop = parent.scrollTop;\n        this.offsetFromParent = {\n            left: selfRect.left - parentLeft + scrollLeft - position.x * scale,\n            top: selfRect.top - parentTop + scrollTop - position.y * scale,\n        };\n    };\n    Rnd.prototype.render = function () {\n        var _this = this;\n        var _a = this.props, disableDragging = _a.disableDragging, style = _a.style, dragHandleClassName = _a.dragHandleClassName, position = _a.position, onMouseDown = _a.onMouseDown, onMouseUp = _a.onMouseUp, dragAxis = _a.dragAxis, dragGrid = _a.dragGrid, bounds = _a.bounds, enableUserSelectHack = _a.enableUserSelectHack, cancel = _a.cancel, children = _a.children, onResizeStart = _a.onResizeStart, onResize = _a.onResize, onResizeStop = _a.onResizeStop, onDragStart = _a.onDragStart, onDrag = _a.onDrag, onDragStop = _a.onDragStop, resizeHandleStyles = _a.resizeHandleStyles, resizeHandleClasses = _a.resizeHandleClasses, resizeHandleComponent = _a.resizeHandleComponent, enableResizing = _a.enableResizing, resizeGrid = _a.resizeGrid, resizeHandleWrapperClass = _a.resizeHandleWrapperClass, resizeHandleWrapperStyle = _a.resizeHandleWrapperStyle, scale = _a.scale, allowAnyClick = _a.allowAnyClick, dragPositionOffset = _a.dragPositionOffset, resizableProps = __rest(_a, [\"disableDragging\", \"style\", \"dragHandleClassName\", \"position\", \"onMouseDown\", \"onMouseUp\", \"dragAxis\", \"dragGrid\", \"bounds\", \"enableUserSelectHack\", \"cancel\", \"children\", \"onResizeStart\", \"onResize\", \"onResizeStop\", \"onDragStart\", \"onDrag\", \"onDragStop\", \"resizeHandleStyles\", \"resizeHandleClasses\", \"resizeHandleComponent\", \"enableResizing\", \"resizeGrid\", \"resizeHandleWrapperClass\", \"resizeHandleWrapperStyle\", \"scale\", \"allowAnyClick\", \"dragPositionOffset\"]);\n        var defaultValue = this.props.default ? __assign({}, this.props.default) : undefined;\n        // Remove unknown props, see also https://reactjs.org/warnings/unknown-prop.html\n        delete resizableProps.default;\n        var cursorStyle = disableDragging || dragHandleClassName ? { cursor: \"auto\" } : { cursor: \"move\" };\n        var innerStyle = __assign(__assign(__assign({}, resizableStyle), cursorStyle), style);\n        var _b = this.offsetFromParent, left = _b.left, top = _b.top;\n        var draggablePosition;\n        if (position) {\n            draggablePosition = {\n                x: position.x - left,\n                y: position.y - top,\n            };\n        }\n        // INFO: Make uncontorolled component when resizing to control position by setPostion.\n        var pos = this.state.resizing ? undefined : draggablePosition;\n        var dragAxisOrUndefined = this.state.resizing ? \"both\" : dragAxis;\n        return (createElement(Draggable, { ref: function (c) {\n                if (!c)\n                    return;\n                _this.draggable = c;\n            }, handle: dragHandleClassName ? \".\".concat(dragHandleClassName) : undefined, defaultPosition: defaultValue, onMouseDown: onMouseDown, \n            // @ts-expect-error\n            onMouseUp: onMouseUp, onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop, axis: dragAxisOrUndefined, disabled: disableDragging, grid: dragGrid, bounds: bounds ? this.state.bounds : undefined, position: pos, enableUserSelectHack: enableUserSelectHack, cancel: cancel, scale: scale, allowAnyClick: allowAnyClick, nodeRef: this.resizableElement, positionOffset: dragPositionOffset },\n            createElement(Resizable, __assign({}, resizableProps, { ref: function (c) {\n                    if (!c)\n                        return;\n                    _this.resizable = c;\n                    _this.resizableElement.current = c.resizable;\n                }, defaultSize: defaultValue, size: this.props.size, enable: typeof enableResizing === \"boolean\" ? getEnableResizingByFlag(enableResizing) : enableResizing, onResizeStart: this.onResizeStart, onResize: this.onResize, onResizeStop: this.onResizeStop, style: innerStyle, minWidth: this.props.minWidth, minHeight: this.props.minHeight, maxWidth: this.state.resizing ? this.state.maxWidth : this.props.maxWidth, maxHeight: this.state.resizing ? this.state.maxHeight : this.props.maxHeight, grid: resizeGrid, handleWrapperClass: resizeHandleWrapperClass, handleWrapperStyle: resizeHandleWrapperStyle, lockAspectRatio: this.props.lockAspectRatio, lockAspectRatioExtraWidth: this.props.lockAspectRatioExtraWidth, lockAspectRatioExtraHeight: this.props.lockAspectRatioExtraHeight, handleStyles: resizeHandleStyles, handleClasses: resizeHandleClasses, handleComponent: resizeHandleComponent, scale: this.props.scale }), children)));\n    };\n    Rnd.defaultProps = {\n        maxWidth: Number.MAX_SAFE_INTEGER,\n        maxHeight: Number.MAX_SAFE_INTEGER,\n        scale: 1,\n        onResizeStart: function () { },\n        onResize: function () { },\n        onResizeStop: function () { },\n        onDragStart: function () { },\n        onDrag: function () { },\n        onDragStop: function () { },\n    };\n    return Rnd;\n}(PureComponent));\n\nexport { Rnd };\n","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport React, { Component } from \"react\";\nimport { Rnd } from \"react-rnd\";\nimport { getPageFromElement } from \"../lib/pdfjs-dom\";\nimport \"../style/AreaHighlight.css\";\nexport class AreaHighlight extends Component {\n    render() {\n        const _a = this.props, { highlight, onChange, isScrolledTo } = _a, otherProps = __rest(_a, [\"highlight\", \"onChange\", \"isScrolledTo\"]);\n        return (React.createElement(\"div\", { className: `AreaHighlight ${isScrolledTo ? \"AreaHighlight--scrolledTo\" : \"\"}` },\n            React.createElement(Rnd, Object.assign({ className: \"AreaHighlight__part\", onDragStop: (_, data) => {\n                    const boundingRect = Object.assign(Object.assign({}, highlight.position.boundingRect), { top: data.y, left: data.x });\n                    onChange(boundingRect);\n                }, onResizeStop: (_mouseEvent, _direction, ref, _delta, position) => {\n                    var _a;\n                    const boundingRect = {\n                        top: position.y,\n                        left: position.x,\n                        width: ref.offsetWidth,\n                        height: ref.offsetHeight,\n                        pageNumber: ((_a = getPageFromElement(ref)) === null || _a === void 0 ? void 0 : _a.number) || -1,\n                    };\n                    onChange(boundingRect);\n                }, position: {\n                    x: highlight.position.boundingRect.left,\n                    y: highlight.position.boundingRect.top,\n                }, size: {\n                    width: highlight.position.boundingRect.width,\n                    height: highlight.position.boundingRect.height,\n                }, onClick: (event) => {\n                    event.stopPropagation();\n                    event.preventDefault();\n                } }, otherProps))));\n    }\n}\nexport default AreaHighlight;\n//# sourceMappingURL=AreaHighlight.js.map","import React, { Component } from \"react\";\nimport { getDocument, GlobalWorkerOptions } from \"pdfjs-dist/legacy/build/pdf\";\nexport class PdfLoader extends Component {\n    constructor() {\n        super(...arguments);\n        this.state = {\n            pdfDocument: null,\n            error: null,\n        };\n        this.documentRef = React.createRef();\n    }\n    componentDidMount() {\n        this.load();\n    }\n    componentWillUnmount() {\n        const { pdfDocument: discardedDocument } = this.state;\n        if (discardedDocument) {\n            discardedDocument.destroy();\n        }\n    }\n    componentDidUpdate({ url }) {\n        if (this.props.url !== url) {\n            this.load();\n        }\n    }\n    componentDidCatch(error, info) {\n        const { onError } = this.props;\n        if (onError) {\n            onError(error);\n        }\n        this.setState({ pdfDocument: null, error });\n    }\n    load() {\n        const { ownerDocument = document } = this.documentRef.current || {};\n        const { url, cMapUrl, cMapPacked, workerSrc } = this.props;\n        const { pdfDocument: discardedDocument } = this.state;\n        this.setState({ pdfDocument: null, error: null });\n        if (typeof workerSrc === \"string\") {\n            GlobalWorkerOptions.workerSrc = workerSrc;\n        }\n        Promise.resolve()\n            .then(() => discardedDocument && discardedDocument.destroy())\n            .then(() => {\n            if (!url) {\n                return;\n            }\n            return getDocument(Object.assign(Object.assign({}, this.props), { ownerDocument,\n                cMapUrl,\n                cMapPacked })).promise.then((pdfDocument) => {\n                this.setState({ pdfDocument });\n            });\n        })\n            .catch((e) => this.componentDidCatch(e));\n    }\n    render() {\n        const { children, beforeLoad } = this.props;\n        const { pdfDocument, error } = this.state;\n        return (React.createElement(React.Fragment, null,\n            React.createElement(\"span\", { ref: this.documentRef }),\n            error\n                ? this.renderError()\n                : !pdfDocument || !children\n                    ? beforeLoad\n                    : children(pdfDocument)));\n    }\n    renderError() {\n        const { errorMessage } = this.props;\n        if (errorMessage) {\n            return React.cloneElement(errorMessage, { error: this.state.error });\n        }\n        return null;\n    }\n}\nPdfLoader.defaultProps = {\n    workerSrc: \"https://unpkg.com/pdfjs-dist@2.16.105/build/pdf.worker.min.js\",\n};\nexport default PdfLoader;\n//# sourceMappingURL=PdfLoader.js.map","import type { IHighlight } from 'react-pdf-highlighter';\n\nexport type ToolType = 'draw' | 'rectangle' | 'shape' | 'textAnnotation' | 'strikethrough' | 'underline' | 'select';\n\nexport type ShapeKind = 'check' | 'close' | 'star' | 'arrowBack' | 'arrowUp' | 'arrowForward' | 'arrowDown';\n\nexport type AreaShape = 'rectangle' | 'ellipse';\n\n// SVG paths from Material-UI icons (24x24 viewBox), used by both the on-screen\n// overlay and the saved PDF so the rendered shape matches exactly.\nexport const SHAPE_PATHS: Record<ShapeKind, string> = {\n  check: 'M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z',\n  close: 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z',\n  star: 'M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z',\n  arrowBack: 'M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z',\n  arrowUp: 'M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z',\n  arrowForward: 'M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z',\n  arrowDown: 'M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z',\n};\n\n// Annotations managed by react-pdf-highlighter (text-selection strikethrough/underline + area shapes)\nexport interface IAnnotation extends IHighlight {\n  // `#RRGGBB`, or `#RRGGBBAA` when a non-opaque alpha was picked (see utils.parseHexColor)\n  highlightColor?: string;\n  type?: 'area' | 'strikethrough' | 'underline';\n  areaShape?: AreaShape;\n}\n\n// A point on a page, as fractions of the page's width/height (0-1)\nexport interface IDrawPoint {\n  x: number;\n  y: number;\n}\n\n// Click-placed overlays rendered directly on page elements (not through PdfHighlighter)\nexport interface IClickOverlay {\n  id: string;\n  type: 'shape' | 'textAnnotation' | 'draw';\n  pageNumber: number;\n  // Percentage-based position relative to page (0-1), zoom-independent.\n  // For 'draw' this is the first point of the stroke.\n  xPct: number;\n  yPct: number;\n  // Viewer scale at draw time, used to convert CSS-px sizes to PDF points\n  drawScale?: number;\n  shapeKind?: ShapeKind;\n  shapeSize?: number;\n  // Colors are `#RRGGBB` or `#RRGGBBAA`, same as IAnnotation.highlightColor\n  shapeColor?: string;\n  annotationText?: string;\n  textColor?: string;\n  textFontSize?: number;\n  // Freehand stroke (type 'draw'): page-relative points and the stroke width in CSS px at\n  // drawScale, so it scales with zoom like shapeSize/textFontSize.\n  points?: IDrawPoint[];\n  strokeWidth?: number;\n  strokeColor?: string;\n}\n\nexport interface IPdfProduct {\n  productId: number;\n  productNumber: string;\n  imageSrc: string;\n  brand: string;\n  category: string;\n  fileSrc: string;\n  fileName: string;\n  languageCode: string;\n  shopDrawingFileSrc?: string;\n  shopDrawingFileName?: string;\n}\n\nexport const DEFAULT_SHAPE_SIZE = 36;\nexport const DEFAULT_RECTANGLE_COLOR = '#FF0000';\nexport const DEFAULT_AREA_SHAPE: AreaShape = 'rectangle';\nexport const DEFAULT_SHAPE_COLOR = '#00AA00';\nexport const DEFAULT_SHAPE_KIND: ShapeKind = 'check';\nexport const DEFAULT_TEXT_COLOR = '#000000';\nexport const DEFAULT_TEXT_FONT_SIZE = 16;\nexport const DEFAULT_STRIKETHROUGH_COLOR = '#000000';\nexport const DEFAULT_UNDERLINE_COLOR = '#000000';\n// Draw strokes carry their translucency in the color's alpha (0x66 = 40%) so the picker's\n// opacity field shows the real rendered opacity. They are also multiply-blended on screen and\n// in the PDF so text stays legible at any alpha.\nexport const DEFAULT_DRAW_COLOR = '#FFFF0066';\nexport const DEFAULT_DRAW_STROKE_WIDTH = 12;\nexport const MIN_DRAW_STROKE_WIDTH = 1;\nexport const MAX_DRAW_STROKE_WIDTH = 40;\n","// react-pdf-highlighter exposes its viewer instance on window.PdfViewer via init().\n// Helper to read the current render scale (CSS pixels per PDF point) from it.\nexport const getViewerScale = (): number =>\n  (window as any).PdfViewer?.viewer?.currentScale || 1;\n\nlet idCounter = 0;\nexport const genId = () => `hl-${Date.now()}-${++idCounter}`;\n\n// Annotation colors are stored as hex strings: `#RRGGBB`, or `#RRGGBBAA` when the user\n// picked a non-opaque alpha in the color picker. Returns 0-255 channels and a 0-1 alpha\n// (1 when the hex carries no alpha suffix).\nexport const parseHexColor = (hex: string) => {\n  const m = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(hex || '');\n  if (!m) { return { r: 0, g: 0, b: 0, a: 1 }; }\n  return {\n    r: parseInt(m[1], 16),\n    g: parseInt(m[2], 16),\n    b: parseInt(m[3], 16),\n    a: m[4] != null ? parseInt(m[4], 16) / 255 : 1,\n  };\n};\n\n// 0-1 channels for pdf-lib's rgb(); `a` is the alpha encoded in the hex (1 if none).\nexport const hexToRgb = (hex: string) => {\n  const { r, g, b, a } = parseHexColor(hex);\n  return { r: r / 255, g: g / 255, b: b / 255, a };\n};\n\n// CSS rgba() string using the alpha encoded in the hex (1 if none). The optional `alpha`\n// is an extra multiplier on top of it.\nexport const hexToRgba = (hex: string, alpha: number = 1) => {\n  const { r, g, b, a } = parseHexColor(hex);\n  return `rgba(${r}, ${g}, ${b}, ${alpha * a})`;\n};\n\n// Inverse of parseHexColor, for react-color's `rgb` result. The alpha suffix is omitted\n// when fully opaque so opaque colors keep matching the 6-digit presets.\nexport const rgbaToHex = ({ r, g, b, a }: { r: number; g: number; b: number; a?: number }) => {\n  const toHex = (v: number) =>\n    ('0' + Math.round(Math.max(0, Math.min(255, v))).toString(16)).slice(-2).toUpperCase();\n  const alpha = a == null ? 1 : a;\n  const base = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n  return alpha >= 1 ? base : `${base}${toHex(alpha * 255)}`;\n};\n\n// Builds an SVG path (\"M x y L x y ...\") from stroke points already mapped into the target\n// coordinate space. A single point becomes a zero-length segment so round line caps render\n// it as a dot.\nexport const pointsToSvgPath = (points: Array<{ x: number; y: number }>) => {\n  if (points.length === 0) { return ''; }\n  const pts = points.length === 1 ? [points[0], points[0]] : points;\n  return pts\n    .map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x.toFixed(2)} ${p.y.toFixed(2)}`)\n    .join(' ');\n};\n\nexport const getPointsBounds = (points: Array<{ x: number; y: number }>) => {\n  let minX = Infinity;\n  let minY = Infinity;\n  let maxX = -Infinity;\n  let maxY = -Infinity;\n  for (const p of points) {\n    if (p.x < minX) { minX = p.x; }\n    if (p.y < minY) { minY = p.y; }\n    if (p.x > maxX) { maxX = p.x; }\n    if (p.y > maxY) { maxY = p.y; }\n  }\n  return { minX, minY, maxX, maxY };\n};\n\nexport const clearMouseSelection = () => {\n  const el = document.querySelector('.MouseSelection') as HTMLElement;\n  if (el) {\n    el.style.width = '0';\n    el.style.height = '0';\n    el.style.display = 'none';\n  }\n};\n","import { makeStyles } from '@material-ui/core';\nimport { AreaShape } from './types';\n\ninterface IStyleProps {\n  rectangleColor: string;\n  hideSelectionBackground: boolean;\n  areaShape: AreaShape;\n}\n\nexport const useStyles = makeStyles((theme) => ({\n  root: {\n    width: '100%',\n    height: '100%',\n    display: 'flex',\n    flexDirection: 'column',\n    backgroundColor: '#525659',\n    overflow: 'hidden',\n  },\n  toolbar: {\n    display: 'flex',\n    alignItems: 'stretch',\n    padding: '4px 8px',\n    backgroundColor: theme.palette.background.paper,\n    zIndex: 10,\n    flexShrink: 0,\n  },\n  toolGroup: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: '0px 4px',\n    borderRight: `1px solid ${theme.palette.divider}`,\n    borderBottom: `3px solid ${theme.palette.common.white}`,\n  },\n  toolGroupSelected: {\n    borderBottom: `3px solid ${theme.palette.primary.main}`,\n  },\n  toolGroupLast: {\n    display: 'flex',\n    alignItems: 'center',\n    paddingLeft: 8,\n  },\n  activeBtn: {\n    color: theme.palette.primary.main,\n  },\n  tools: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  cta: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n  sizeInput: {\n    minWidth: 48,\n    '& input': { textAlign: 'center', fontSize: 12 },\n  },\n  strokeSliderWrap: {\n    flex: 1,\n    display: 'flex',\n    alignItems: 'center',\n    padding: '0 8px',\n  },\n  strokeSizeValue: {\n    minWidth: 32,\n    textAlign: 'right' as const,\n  },\n  dropdownCaret: {\n    padding: 2,\n    marginLeft: -4,\n  },\n  toolSettingsPopover: {\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'stretch',\n    padding: theme.spacing(1),\n    '& > * + *': {\n      marginTop: theme.spacing(1),\n    },\n  },\n  toolSettingsRow: {\n    display: 'flex',\n    flexDirection: 'row',\n    alignItems: 'center',\n    // '& > * + *': {\n    //   marginLeft: 2,\n    // },\n  },\n  zoomSlider: {\n    width: 150,\n    margin: '0 8px',\n  },\n  pageInput: {\n    width: 56,\n    marginLeft: 4,\n    '& input': { textAlign: 'center', fontSize: 12 },\n  },\n  viewerContainer: (props: IStyleProps) => ({\n    flex: 1,\n    position: 'relative' as const,\n    overflow: 'hidden',\n    '& .PdfHighlighter': {\n      height: '100%',\n    },\n    '& .MouseSelection': {\n      background: 'none',\n      border: `3px solid ${props.rectangleColor}`,\n      mixBlendMode: 'normal',\n      opacity: 1,\n      borderRadius: props.areaShape === 'ellipse' ? '50%' : 0,\n    },\n    // Strikethrough/underline hide the native selection background and draw their own preview.\n    '& ::selection': props.hideSelectionBackground ? { backgroundColor: 'transparent' } : {},\n    '& .pdfViewer .page': {\n      margin: '0 auto 10px !important',\n      border: 'none !important',\n      borderImage: 'none !important',\n      boxShadow: 'none !important',\n      contain: 'layout style',\n    },\n    '& .annotationLayer': {\n      display: 'none',\n    },\n    // pdfjs's endOfContent element is positioned over the area below the click\n    // on mousedown with user-select: none, which intermittently kills text\n    // selection when the cursor strays into it during a rightward drag.\n    '& .textLayer .endOfContent': {\n      display: 'none',\n    },\n  }),\n  viewerContainerPointer: {\n    '&, & *': {\n      cursor: 'crosshair !important',\n    },\n  },\n  // Freehand drawing: crosshair everywhere and no text selection while dragging over the text layer.\n  viewerContainerDraw: {\n    '&, & *': {\n      cursor: 'crosshair !important',\n      userSelect: 'none',\n    },\n  },\n  spacer: { flex: 1 },\n  mainContent: {\n    flex: 1,\n    display: 'flex',\n    overflow: 'hidden',\n    minHeight: 0,\n  },\n  sidebar: {\n    width: 320,\n    marginRight: 16,\n    flexShrink: 0,\n    overflow: 'auto',\n    backgroundColor: '#525659',\n  },\n  productItem: {\n    cursor: 'pointer',\n    backgroundColor: theme.palette.common.white,\n    borderBottom: `1px solid ${theme.palette.divider}`,\n  },\n  productItemSelected: {\n    backgroundColor: theme.palette.grey[100],\n    borderRight: `2px solid ${theme.palette.primary.main}`,\n    '&:hover': {\n      backgroundColor: theme.palette.grey[100],\n    },\n  },\n  productHeader: {\n    display: 'flex',\n    alignItems: 'flex-start',\n    padding: theme.spacing(1.5, 1.5, 1),\n  },\n  productImage: {\n    width: 48,\n    height: 48,\n    objectFit: 'contain' as const,\n    flexShrink: 0,\n    marginRight: theme.spacing(1),\n  },\n  productInfo: {\n    flex: 1,\n    minWidth: 0,\n    paddingLeft: theme.spacing(),\n  },\n  productMetaText: {\n    wordBreak: 'break-word'\n  },\n  fileSection: {\n    padding: theme.spacing(0.5, 1.5, 0.5)\n  },\n  fileSectionSelected: {\n    backgroundColor: theme.palette.grey[300],\n  },\n  fileSectionLabel: {\n    display: 'block',\n    marginBottom: 2,\n  },\n  fileRow: {\n    display: 'flex',\n    alignItems: 'center',\n    overflow: 'hidden',\n  },\n  fileIcon: {\n    fontSize: 16,\n    color: theme.palette.text.secondary,\n    marginRight: 4,\n    flexShrink: 0,\n  },\n  fileNameText: {\n    marginLeft: 20,\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap' as const,\n    display: 'block',\n  },\n  confirmDialogPaper: {\n    minWidth: 420,\n    borderRadius: 8,\n    padding: theme.spacing(2),\n  },\n  confirmDialogContent: {\n    position: 'relative' as const,\n    paddingTop: theme.spacing(3),\n  },\n  confirmCloseIcon: {\n    position: 'absolute' as const,\n    top: 0,\n    right: 0,\n  },\n  confirmText: {\n    textAlign: 'center' as const,\n  },\n  confirmActions: {\n    display: 'flex',\n    justifyContent: 'center',\n    marginTop: theme.spacing(3),\n    '& > button:not(:last-child)': {\n      marginRight: theme.spacing(2),\n    },\n  },\n  confirmSaveButton: {\n    borderRadius: 24,\n    paddingLeft: theme.spacing(3),\n    paddingRight: theme.spacing(3),\n  },\n}));\n","import React, { useState, useEffect } from 'react';\nimport {\n  IClickOverlay,\n  DEFAULT_SHAPE_SIZE,\n  DEFAULT_SHAPE_COLOR,\n  DEFAULT_SHAPE_KIND,\n  DEFAULT_TEXT_COLOR,\n  DEFAULT_TEXT_FONT_SIZE,\n  DEFAULT_DRAW_COLOR,\n  DEFAULT_DRAW_STROKE_WIDTH,\n  SHAPE_PATHS,\n} from './types';\nimport { hexToRgba, pointsToSvgPath, getPointsBounds } from './utils';\n\ninterface IOverlayLayerProps {\n  overlays: IClickOverlay[];\n  editingTextId: string | null;\n  setEditingTextId: (id: string | null) => void;\n  setOverlays: React.Dispatch<React.SetStateAction<IClickOverlay[]>>;\n  pdfScale: string;\n  currentScale: number;\n  isSelectionMode: boolean;\n  selectedOverlayId: string | null;\n  onSelectOverlay: (id: string) => void;\n}\n\n// Renders click-placed overlays as absolute-positioned siblings (no portals).\n// Earlier the overlays were portalled into pdfjs's per-page DOM elements, but pdfjs\n// recycles those elements aggressively on zoom and React's portal teardown was\n// failing with \"removeChild: not a child of this node\" plus losing overlays for\n// pages that hadn't fully re-rendered. This version owns its own DOM and computes\n// each overlay's pixel position from `pageEl.getBoundingClientRect()` on every\n// scroll/zoom/page-add.\nexport const OverlayLayer: React.FC<IOverlayLayerProps> = ({\n  overlays,\n  editingTextId,\n  setEditingTextId,\n  setOverlays,\n  pdfScale,\n  currentScale,\n  isSelectionMode,\n  selectedOverlayId,\n  onSelectOverlay,\n}) => {\n  const [, forceUpdate] = useState(0);\n  const [layerEl, setLayerEl] = useState<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    let observer: MutationObserver | null = null;\n    let pollTimer: any = null;\n    let debounceTimer: any = null;\n    let rafScheduled = false;\n    let scrollContainer: HTMLElement | null = null;\n\n    const triggerUpdate = () => {\n      if (debounceTimer) { clearTimeout(debounceTimer); }\n      debounceTimer = setTimeout(() => forceUpdate((n) => n + 1), 50);\n    };\n\n    const onScroll = () => {\n      if (rafScheduled) { return; }\n      rafScheduled = true;\n      requestAnimationFrame(() => {\n        rafScheduled = false;\n        forceUpdate((n) => n + 1);\n      });\n    };\n\n    const setup = (): boolean => {\n      const pdfViewerEl = document.querySelector('.pdfViewer');\n      const sc = document.querySelector('.PdfHighlighter') as HTMLElement | null;\n      if (!pdfViewerEl || !sc) { return false; }\n      observer = new MutationObserver(triggerUpdate);\n      observer.observe(pdfViewerEl, { childList: true });\n      scrollContainer = sc;\n      sc.addEventListener('scroll', onScroll, { passive: true });\n      triggerUpdate();\n      return true;\n    };\n\n    if (!setup()) {\n      pollTimer = setInterval(() => {\n        if (setup() && pollTimer) {\n          clearInterval(pollTimer);\n          pollTimer = null;\n        }\n      }, 100);\n    }\n\n    // pdfjs can resize page elements in-place (page-width mode on window resize)\n    // without changing .pdfViewer's childList, so the MutationObserver doesn't fire.\n    // Piggy-back on the scroll re-render path to refresh pageRect on window resize.\n    window.addEventListener('resize', onScroll);\n\n    return () => {\n      if (observer) { observer.disconnect(); }\n      if (pollTimer) { clearInterval(pollTimer); }\n      if (debounceTimer) { clearTimeout(debounceTimer); }\n      if (scrollContainer) { scrollContainer.removeEventListener('scroll', onScroll); }\n      window.removeEventListener('resize', onScroll);\n    };\n  }, [pdfScale]);\n\n  const layerRect = layerEl?.getBoundingClientRect();\n\n  return (\n    <div\n      ref={setLayerEl}\n      style={{\n        position: 'absolute',\n        top: 0,\n        left: 0,\n        right: 0,\n        bottom: 0,\n        overflow: 'hidden',\n        pointerEvents: 'none',\n      }}\n    >\n      {layerRect && overlays.map((ov) => {\n        const pageEl = document.querySelector(`[data-page-number=\"${ov.pageNumber}\"]`) as HTMLElement | null;\n        if (!pageEl) { return null; }\n        const pageRect = pageEl.getBoundingClientRect();\n        const baseLeft = pageRect.left - layerRect.left + ov.xPct * pageRect.width;\n        const baseTop = pageRect.top - layerRect.top + ov.yPct * pageRect.height;\n        const sizeRatio = currentScale / (ov.drawScale || 1);\n\n        if (ov.type === 'shape') {\n          const size = (ov.shapeSize || DEFAULT_SHAPE_SIZE) * sizeRatio;\n          const path = SHAPE_PATHS[ov.shapeKind || DEFAULT_SHAPE_KIND];\n          const isSelected = selectedOverlayId === ov.id;\n          return (\n            <div\n              key={ov.id}\n              onClick={isSelectionMode\n                ? (e) => { e.stopPropagation(); onSelectOverlay(ov.id); }\n                : undefined}\n              style={{\n                position: 'absolute',\n                left: baseLeft - size / 2,\n                top: baseTop - size / 2,\n                width: size,\n                height: size,\n                // In select mode the shape becomes clickable to select; otherwise it's\n                // purely visual so it doesn't block interactions underneath.\n                pointerEvents: isSelectionMode ? 'auto' : 'none',\n                cursor: isSelectionMode ? 'pointer' : undefined,\n                zIndex: 3,\n                outline: isSelected ? '2px dashed #1976d2' : undefined,\n                outlineOffset: 4,\n              }}\n            >\n              <svg width={size} height={size} viewBox='0 0 24 24'>\n                <path d={path} fill={ov.shapeColor || DEFAULT_SHAPE_COLOR} />\n              </svg>\n            </div>\n          );\n        }\n        if (ov.type === 'textAnnotation') {\n          const isEditing = editingTextId === ov.id;\n          const isSelected = selectedOverlayId === ov.id;\n          const fontSize = (ov.textFontSize || DEFAULT_TEXT_FONT_SIZE) * sizeRatio;\n          const maxWidth = pageRect.right - layerRect.left - baseLeft;\n          const maxHeight = pageRect.bottom - layerRect.top - baseTop;\n          return (\n            <div\n              key={ov.id}\n              style={{\n                position: 'absolute',\n                left: baseLeft,\n                top: baseTop,\n                maxWidth,\n                maxHeight,\n                overflow: 'hidden',\n                pointerEvents: 'auto',\n                zIndex: 4,\n                outline: isSelected ? '2px dashed #1976d2' : undefined,\n                outlineOffset: 4,\n                cursor: isSelectionMode && !isEditing ? 'pointer' : undefined,\n              }}\n              onMouseDown={(e) => e.stopPropagation()}\n              onPointerDown={(e) => e.stopPropagation()}\n              onClick={isSelectionMode && !isEditing\n                ? (e) => { e.stopPropagation(); onSelectOverlay(ov.id); }\n                : undefined}\n            >\n              {isEditing ? (\n                <textarea\n                  autoFocus={true}\n                  rows={1}\n                  style={{\n                    fontSize,\n                    color: ov.textColor || DEFAULT_TEXT_COLOR,\n                    background: 'rgba(255,255,255,0.7)',\n                    border: '1px solid rgba(0,0,0,0.2)',\n                    outline: 'none',\n                    padding: 1,\n                    margin: 1,\n                    minWidth: 60,\n                    maxWidth: '100%',\n                    fontFamily: 'sans-serif',\n                    resize: 'none',\n                    overflow: 'hidden',\n                    lineHeight: 1.3,\n                    boxSizing: 'border-box' as const,\n                  }}\n                  defaultValue={ov.annotationText || ''}\n                  onChange={(e) => {\n                    const el = e.target;\n                    el.style.height = 'auto';\n                    el.style.height = `${el.scrollHeight}px`;\n                  }}\n                  onFocus={(e) => {\n                    const el = e.target;\n                    el.style.height = 'auto';\n                    el.style.height = `${el.scrollHeight}px`;\n                  }}\n                  onBlur={(e) => {\n                    const val = e.target.value;\n                    setOverlays((prev) =>\n                      val.trim()\n                        ? prev.map((o) => o.id === ov.id ? { ...o, annotationText: val } : o)\n                        : prev.filter((o) => o.id !== ov.id),\n                    );\n                    setEditingTextId(null);\n                  }}\n                  onKeyDown={(e) => {\n                    if (e.key === 'Escape') {\n                      setOverlays((prev) => prev.filter((o) => o.id !== ov.id));\n                      setEditingTextId(null);\n                    }\n                  }}\n                />\n              ) : (\n                <span\n                  style={{\n                    display: 'block',\n                    fontSize,\n                    color: ov.textColor || DEFAULT_TEXT_COLOR,\n                    fontFamily: 'sans-serif',\n                    whiteSpace: 'pre-wrap',\n                    wordBreak: 'break-word',\n                    maxWidth: '100%',\n                    pointerEvents: 'auto',\n                    cursor: 'text',\n                    userSelect: 'none',\n                    lineHeight: 1.3,\n                  }}\n                  onDoubleClick={isSelectionMode ? undefined : () => setEditingTextId(ov.id)}\n                >\n                  {ov.annotationText}\n                </span>\n              )}\n            </div>\n          );\n        }\n        if (ov.type === 'draw' && ov.points && ov.points.length > 0) {\n          const isSelected = selectedOverlayId === ov.id;\n          const strokeWidth = (ov.strokeWidth || DEFAULT_DRAW_STROKE_WIDTH) * sizeRatio;\n          const pageLeft = pageRect.left - layerRect.left;\n          const pageTop = pageRect.top - layerRect.top;\n          const pts = ov.points.map((p) => ({ x: p.x * pageRect.width, y: p.y * pageRect.height }));\n          // Bounding-box hit area like the other annotations, padded by half the stroke so\n          // the edge of a thick stroke is still clickable in select mode.\n          const b = getPointsBounds(pts);\n          const half = strokeWidth / 2;\n          return (\n            <React.Fragment key={ov.id}>\n              <svg\n                style={{\n                  position: 'absolute',\n                  left: pageLeft,\n                  top: pageTop,\n                  width: pageRect.width,\n                  height: pageRect.height,\n                  overflow: 'visible',\n                  pointerEvents: 'none',\n                  mixBlendMode: 'multiply',\n                  zIndex: 3,\n                }}\n              >\n                <path\n                  d={pointsToSvgPath(pts)}\n                  fill='none'\n                  stroke={hexToRgba(ov.strokeColor || DEFAULT_DRAW_COLOR)}\n                  strokeWidth={strokeWidth}\n                  strokeLinecap='round'\n                  strokeLinejoin='round'\n                />\n              </svg>\n              <div\n                onClick={isSelectionMode\n                  ? (e) => { e.stopPropagation(); onSelectOverlay(ov.id); }\n                  : undefined}\n                style={{\n                  position: 'absolute',\n                  left: pageLeft + b.minX - half,\n                  top: pageTop + b.minY - half,\n                  width: b.maxX - b.minX + strokeWidth,\n                  height: b.maxY - b.minY + strokeWidth,\n                  pointerEvents: isSelectionMode ? 'auto' : 'none',\n                  cursor: isSelectionMode ? 'pointer' : undefined,\n                  zIndex: 3,\n                  outline: isSelected ? '2px dashed #1976d2' : undefined,\n                  outlineOffset: 4,\n                }}\n              />\n            </React.Fragment>\n          );\n        }\n        return null;\n      })}\n    </div>\n  );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { IClickOverlay, IDrawPoint } from './types';\nimport { getViewerScale, genId, hexToRgba, pointsToSvgPath } from './utils';\n\ninterface IDrawLayerProps {\n  active: boolean;\n  // The viewer container this layer is positioned over; mousedowns on a page inside it start a stroke.\n  containerRef: React.RefObject<HTMLDivElement>;\n  color: string;\n  strokeWidth: number;\n  onCommit: (overlay: IClickOverlay) => void;\n}\n\ninterface ILiveStroke {\n  pageNumber: number;\n  pageEl: HTMLElement;\n  points: IDrawPoint[];\n}\n\n// Ignore mousemove samples closer than this (CSS px) to the previous point to keep strokes compact.\nconst MIN_POINT_DISTANCE_PX = 1.5;\n\n// Captures freehand strokes for the `draw` tool. Points are stored as fractions of the page\n// the stroke started on (clamped to its bounds), so committed strokes are zoom-independent\n// like the other click-placed overlays. Only the in-progress stroke is rendered here;\n// committed strokes are rendered by OverlayLayer.\nexport const DrawLayer: React.FC<IDrawLayerProps> = ({ active, containerRef, color, strokeWidth, onCommit }) => {\n  // The in-progress stroke lives in a ref (mutated on every mousemove); renders are\n  // scheduled through forceUpdate so mousemove bursts collapse into one frame.\n  const [, forceUpdate] = useState(0);\n  const liveStrokeRef = useRef<ILiveStroke | null>(null);\n  const colorRef = useRef(color);\n  colorRef.current = color;\n  const strokeWidthRef = useRef(strokeWidth);\n  strokeWidthRef.current = strokeWidth;\n  const onCommitRef = useRef(onCommit);\n  onCommitRef.current = onCommit;\n\n  useEffect(() => {\n    const containerEl = containerRef.current;\n    if (!active || !containerEl) { return; }\n\n    let rafId = 0;\n    const scheduleRender = () => {\n      if (rafId) { return; }\n      rafId = requestAnimationFrame(() => {\n        rafId = 0;\n        forceUpdate((n) => n + 1);\n      });\n    };\n\n    const toPagePoint = (pageEl: HTMLElement, clientX: number, clientY: number): IDrawPoint => {\n      const r = pageEl.getBoundingClientRect();\n      return {\n        x: Math.max(0, Math.min(1, (clientX - r.left) / r.width)),\n        y: Math.max(0, Math.min(1, (clientY - r.top) / r.height)),\n      };\n    };\n\n    const onMouseDown = (e: MouseEvent) => {\n      if (e.button !== 0) { return; }\n      const target = e.target as HTMLElement | null;\n      const pageEl = target && target.closest ? target.closest('.page') as HTMLElement | null : null;\n      if (!pageEl) { return; }\n      const pageNumber = parseInt(pageEl.dataset.pageNumber || '0', 10);\n      if (!pageNumber) { return; }\n      // Keep the browser from starting a text selection in the pdfjs text layer.\n      e.preventDefault();\n      liveStrokeRef.current = { pageNumber, pageEl, points: [toPagePoint(pageEl, e.clientX, e.clientY)] };\n      scheduleRender();\n    };\n\n    const onMouseMove = (e: MouseEvent) => {\n      const s = liveStrokeRef.current;\n      if (!s) { return; }\n      const r = s.pageEl.getBoundingClientRect();\n      const next = toPagePoint(s.pageEl, e.clientX, e.clientY);\n      const last = s.points[s.points.length - 1];\n      const dx = (next.x - last.x) * r.width;\n      const dy = (next.y - last.y) * r.height;\n      if (dx * dx + dy * dy < MIN_POINT_DISTANCE_PX * MIN_POINT_DISTANCE_PX) { return; }\n      s.points.push(next);\n      scheduleRender();\n    };\n\n    const onMouseUp = () => {\n      const s = liveStrokeRef.current;\n      if (!s) { return; }\n      liveStrokeRef.current = null;\n      scheduleRender();\n      const first = s.points[0];\n      onCommitRef.current({\n        id: genId(),\n        type: 'draw',\n        pageNumber: s.pageNumber,\n        xPct: first.x,\n        yPct: first.y,\n        drawScale: getViewerScale(),\n        points: s.points,\n        strokeWidth: strokeWidthRef.current,\n        strokeColor: colorRef.current,\n      });\n    };\n\n    containerEl.addEventListener('mousedown', onMouseDown);\n    window.addEventListener('mousemove', onMouseMove);\n    window.addEventListener('mouseup', onMouseUp);\n    return () => {\n      containerEl.removeEventListener('mousedown', onMouseDown);\n      window.removeEventListener('mousemove', onMouseMove);\n      window.removeEventListener('mouseup', onMouseUp);\n      if (rafId) { cancelAnimationFrame(rafId); }\n      // Drop any half-drawn stroke if the tool changes mid-gesture.\n      liveStrokeRef.current = null;\n    };\n  }, [active, containerRef]);\n\n  const live = liveStrokeRef.current;\n  const container = containerRef.current;\n  if (!active || !live || !container || live.points.length === 0) { return null; }\n  const layerRect = container.getBoundingClientRect();\n  const pageRect = live.pageEl.getBoundingClientRect();\n  const d = pointsToSvgPath(live.points.map((p) => ({ x: p.x * pageRect.width, y: p.y * pageRect.height })));\n\n  // The wrapper must not get a z-index: a positioned element with one is a stacking context,\n  // which isolates the svg's mix-blend-mode so it would only blend against this transparent\n  // wrapper instead of the page canvas. Same structure as OverlayLayer, so the live stroke\n  // renders exactly like the committed one.\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0,\n        pointerEvents: 'none',\n        overflow: 'hidden',\n      }}\n    >\n      <svg\n        style={{\n          position: 'absolute',\n          left: pageRect.left - layerRect.left,\n          top: pageRect.top - layerRect.top,\n          width: pageRect.width,\n          height: pageRect.height,\n          overflow: 'visible',\n          mixBlendMode: 'multiply',\n          zIndex: 5,\n        }}\n      >\n        <path\n          d={d}\n          fill='none'\n          stroke={hexToRgba(color)}\n          strokeWidth={strokeWidth}\n          strokeLinecap='round'\n          strokeLinejoin='round'\n        />\n      </svg>\n    </div>\n  );\n};\n","import {\n  PDFDocument,\n  rgb,\n  pushGraphicsState,\n  popGraphicsState,\n  translate,\n  rotateDegrees,\n  setLineJoin,\n  BlendMode,\n  LineCapStyle,\n  LineJoinStyle,\n} from 'pdf-lib';\nimport {\n  IAnnotation,\n  IClickOverlay,\n  DEFAULT_SHAPE_SIZE,\n  DEFAULT_SHAPE_COLOR,\n  DEFAULT_SHAPE_KIND,\n  DEFAULT_RECTANGLE_COLOR,\n  DEFAULT_TEXT_COLOR,\n  DEFAULT_TEXT_FONT_SIZE,\n  DEFAULT_STRIKETHROUGH_COLOR,\n  DEFAULT_UNDERLINE_COLOR,\n  DEFAULT_DRAW_COLOR,\n  DEFAULT_DRAW_STROKE_WIDTH,\n  SHAPE_PATHS,\n} from './types';\nimport { hexToRgb, pointsToSvgPath } from './utils';\n\n// pdfjs renders pages with `scale = currentScale * PDF_TO_CSS_UNITS` (96/72), so a\n// CSS-pixel size captured at currentScale=s corresponds to s*(96/72) PDF points per\n// CSS pixel on screen. Convert back to PDF points by dividing by both.\nconst PDF_TO_CSS_UNITS = 96 / 72;\n\n// Map a display-space rect (Dleft, Dtop, Dw, Dh) — top-left origin, y-down — into the\n// unrotated PDF coordinate system (bottom-left origin, y-up) for a page with /Rotate.\nconst displayRectToPdf = (\n  Dleft: number, Dtop: number, Dw: number, Dh: number,\n  rawW: number, rawH: number, rotation: number,\n) => {\n  switch (rotation) {\n    case 90:\n      return { x: Dtop, y: Dleft, width: Dh, height: Dw };\n    case 180:\n      return { x: rawW - Dleft - Dw, y: Dtop, width: Dw, height: Dh };\n    case 270:\n      return { x: rawW - Dtop - Dh, y: rawH - Dleft - Dw, width: Dh, height: Dw };\n    default:\n      return { x: Dleft, y: rawH - Dtop - Dh, width: Dw, height: Dh };\n  }\n};\n\n// Map a display-space point (Dx, Dy) — top-left origin, y-down — into PDF coords.\nconst displayPointToPdf = (\n  Dx: number, Dy: number, rawW: number, rawH: number, rotation: number,\n) => {\n  switch (rotation) {\n    case 90: return { x: Dy, y: Dx };\n    case 180: return { x: rawW - Dx, y: Dy };\n    case 270: return { x: rawW - Dy, y: rawH - Dx };\n    default: return { x: Dx, y: rawH - Dy };\n  }\n};\n\nexport const generateAnnotatedPdf = async (\n  fileSrc: string,\n  annotations: IAnnotation[],\n  overlays: IClickOverlay[],\n): Promise<Uint8Array> => {\n  const res = await fetch(fileSrc);\n  const bytes = await res.arrayBuffer();\n  const pdfDoc = await PDFDocument.load(bytes);\n\n  for (const hl of annotations) {\n    const { boundingRect, rects } = hl.position;\n    const pageNumber = boundingRect.pageNumber || hl.position.pageNumber;\n    const page = pdfDoc.getPage(pageNumber - 1);\n    const { width: rawW, height: rawH } = page.getSize();\n    const rotation = page.getRotation().angle;\n    const isRotated90 = rotation === 90 || rotation === 270;\n    const dispW = isRotated90 ? rawH : rawW;\n    const dispH = isRotated90 ? rawW : rawH;\n\n    // Draws the outline of an area annotation. rect.x1/y1/x2/y2 are viewport CSS pixels at\n    // capture; rect.width/height is the viewport dimensions (display orientation) at capture,\n    // used to renormalize.\n    const drawAnnotRect = (rect: any, color: { r: number; g: number; b: number; a: number }) => {\n      const Dleft = rect.x1 * dispW / rect.width;\n      const Dtop = rect.y1 * dispH / rect.height;\n      const Dw = (rect.x2 - rect.x1) * dispW / rect.width;\n      const Dh = (rect.y2 - rect.y1) * dispH / rect.height;\n      // On-screen the rect uses `border: 3px solid; box-sizing: border-box` — the 3-CSS-px\n      // border sits inside the drawn bounds. pdf-lib centers the stroke on the path, so we\n      // (1) scale the 3 CSS-px border to PDF points using the capture scale, and\n      // (2) inset the rect by half the border width so the stroke's outer edge lands on\n      // the originally drawn bounds.\n      const captureScale = rect.width / dispW;\n      const borderWidth = 3 / captureScale;\n      const half = borderWidth / 2;\n      const r = displayRectToPdf(\n        Dleft + half, Dtop + half,\n        Math.max(0, Dw - borderWidth), Math.max(0, Dh - borderWidth),\n        rawW, rawH, rotation,\n      );\n      page.drawRectangle({\n        ...r,\n        borderColor: rgb(color.r, color.g, color.b),\n        borderWidth,\n        borderOpacity: color.a,\n      });\n    };\n\n    if (hl.type === 'area') {\n      const areaColor = hexToRgb(hl.highlightColor || DEFAULT_RECTANGLE_COLOR);\n      if (hl.areaShape === 'ellipse') {\n        const rect = boundingRect;\n        const Dleft = rect.x1 * dispW / rect.width;\n        const Dtop = rect.y1 * dispH / rect.height;\n        const Dw = (rect.x2 - rect.x1) * dispW / rect.width;\n        const Dh = (rect.y2 - rect.y1) * dispH / rect.height;\n        // Match the bordered rectangle's stroke-inset trick so the ellipse's outer\n        // stroke edge lands on the originally drawn bounds (pdf-lib centers strokes).\n        const captureScale = rect.width / dispW;\n        const borderWidth = 3 / captureScale;\n        const half = borderWidth / 2;\n        const r = displayRectToPdf(\n          Dleft + half, Dtop + half,\n          Math.max(0, Dw - borderWidth), Math.max(0, Dh - borderWidth),\n          rawW, rawH, rotation,\n        );\n        page.drawEllipse({\n          x: r.x + r.width / 2,\n          y: r.y + r.height / 2,\n          xScale: r.width / 2,\n          yScale: r.height / 2,\n          borderColor: rgb(areaColor.r, areaColor.g, areaColor.b),\n          borderWidth,\n          borderOpacity: areaColor.a,\n        });\n      } else {\n        drawAnnotRect(boundingRect, areaColor);\n      }\n    } else if (hl.type === 'strikethrough' || hl.type === 'underline') {\n      const isUnderline = hl.type === 'underline';\n      const c = hexToRgb(\n        hl.highlightColor || (isUnderline ? DEFAULT_UNDERLINE_COLOR : DEFAULT_STRIKETHROUGH_COLOR),\n      );\n      for (const rect of rects) {\n        const Dleft = rect.x1 * dispW / rect.width;\n        const Dtop = rect.y1 * dispH / rect.height;\n        const Dw = (rect.x2 - rect.x1) * dispW / rect.width;\n        const Dh = (rect.y2 - rect.y1) * dispH / rect.height;\n        const lineH = Math.max(2, Dh * 0.06);\n        const lineDtop = isUnderline ? Dtop + Dh - lineH : Dtop + Dh / 2 - lineH / 2;\n        const r = displayRectToPdf(Dleft, lineDtop, Dw, lineH, rawW, rawH, rotation);\n        page.drawRectangle({ ...r, color: rgb(c.r, c.g, c.b), opacity: c.a });\n      }\n    }\n  }\n\n  for (const ov of overlays) {\n    const page = pdfDoc.getPage(ov.pageNumber - 1);\n    const { width: rawW, height: rawH } = page.getSize();\n    const rotation = page.getRotation().angle;\n    const isRotated90 = rotation === 90 || rotation === 270;\n    const dispW = isRotated90 ? rawH : rawW;\n    const dispH = isRotated90 ? rawW : rawH;\n    const Dx = ov.xPct * dispW;\n    const Dy = ov.yPct * dispH;\n    const { x: Px, y: Py } = displayPointToPdf(Dx, Dy, rawW, rawH, rotation);\n    const drawScale = ov.drawScale || 1;\n\n    // Set up a local coordinate system at the click point with +x = display right and\n    // +y = display up, so we can draw without worrying about page rotation.\n    page.pushOperators(\n      pushGraphicsState(),\n      translate(Px, Py),\n      rotateDegrees(rotation),\n    );\n\n    if (ov.type === 'shape') {\n      const sCss = ov.shapeSize || DEFAULT_SHAPE_SIZE;\n      const s = sCss / (drawScale * PDF_TO_CSS_UNITS);\n      const cc = hexToRgb(ov.shapeColor || DEFAULT_SHAPE_COLOR);\n      const gc = rgb(cc.r, cc.g, cc.b);\n      const path = SHAPE_PATHS[ov.shapeKind || DEFAULT_SHAPE_KIND];\n      // Same SVG path used for the on-screen icon (24x24 viewBox), centered on the local origin.\n      // pdf-lib's drawSvgPath transform is [scale 0 0 -scale x y], so passing x=-s/2, y=s/2\n      // with scale s/24 maps the path's (12,12) center to local (0, 0).\n      page.drawSvgPath(path, {\n        x: -s / 2,\n        y: s / 2,\n        scale: s / 24,\n        color: gc,\n        opacity: cc.a,\n      });\n    } else if (ov.type === 'textAnnotation' && ov.annotationText) {\n      const c = hexToRgb(ov.textColor || DEFAULT_TEXT_COLOR);\n      const fontSizeCss = ov.textFontSize || DEFAULT_TEXT_FONT_SIZE;\n      const fontSize = fontSizeCss / (drawScale * PDF_TO_CSS_UNITS);\n      const lineHeight = fontSize * 1.3;\n      const lines = ov.annotationText.split('\\n');\n      lines.forEach((line, idx) => {\n        // Local origin is at the click point; baseline sits 0.8*fontSize below (display down).\n        page.drawText(line, {\n          x: 0,\n          y: -fontSize * 0.8 - idx * lineHeight,\n          size: fontSize,\n          color: rgb(c.r, c.g, c.b),\n          opacity: c.a,\n        });\n      });\n    } else if (ov.type === 'draw' && ov.points && ov.points.length > 0) {\n      const c = hexToRgb(ov.strokeColor || DEFAULT_DRAW_COLOR);\n      const widthCss = ov.strokeWidth || DEFAULT_DRAW_STROKE_WIDTH;\n      const borderWidth = widthCss / (drawScale * PDF_TO_CSS_UNITS);\n      // Points are page fractions; express them in display-space PDF points relative to the\n      // stroke's first point, which is the local origin. drawSvgPath flips Y, so these\n      // display-down offsets land on the local +y-up axis correctly.\n      const path = pointsToSvgPath(ov.points.map((p) => ({\n        x: (p.x - ov.xPct) * dispW,\n        y: (p.y - ov.yPct) * dispH,\n      })));\n      // Multiply-blended so text underneath stays legible; round joins avoid miter spikes on sharp turns.\n      page.pushOperators(setLineJoin(LineJoinStyle.Round));\n      page.drawSvgPath(path, {\n        x: 0,\n        y: 0,\n        borderColor: rgb(c.r, c.g, c.b),\n        borderWidth,\n        borderOpacity: c.a,\n        borderLineCap: LineCapStyle.Round,\n        blendMode: BlendMode.Multiply,\n      });\n    }\n\n    page.pushOperators(popGraphicsState());\n  }\n\n  return pdfDoc.save();\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport {\n  Dialog,\n  IconButton,\n  Slider,\n  TextField,\n  Tooltip,\n  Paper,\n  Typography,\n  CircularProgress,\n  Grid,\n  Link,\n  Button,\n  Popover,\n} from '@material-ui/core';\nimport BorderColorIcon from '@material-ui/icons/BorderColor';\nimport CheckIcon from '@material-ui/icons/Check';\nimport TextFieldsIcon from '@material-ui/icons/TextFields';\nimport UndoIcon from '@material-ui/icons/Undo';\nimport SaveAltIcon from '@material-ui/icons/SaveAlt';\nimport SaveIcon from '@material-ui/icons/Save';\nimport CloseIcon from '@material-ui/icons/Close';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport {\n  PdfLoader,\n  PdfHighlighter,\n} from 'react-pdf-highlighter';\nimport type { LTWHP } from 'react-pdf-highlighter';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport { AddFirmProductFileAction } from '../../modules/PimModule/actions';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\nimport { GEOLOCATION_ID } from '../../constants';\nimport { FirmProduct } from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\nimport AttachFileIcon from '@material-ui/icons/AttachFile';\nimport Image from '../Image';\nimport { generateFileLink } from '../../utils/helpers';\nimport { useTranslation } from 'react-i18next';\nimport Crop169Icon from '@material-ui/icons/Crop169';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Prompt  } from 'react-router';\nimport {\n  ToolType,\n  ShapeKind,\n  AreaShape,\n  IAnnotation,\n  IClickOverlay,\n  IPdfProduct,\n  DEFAULT_SHAPE_SIZE,\n  DEFAULT_RECTANGLE_COLOR,\n  DEFAULT_SHAPE_COLOR,\n  DEFAULT_SHAPE_KIND,\n  DEFAULT_TEXT_COLOR,\n  DEFAULT_TEXT_FONT_SIZE,\n  DEFAULT_STRIKETHROUGH_COLOR,\n  DEFAULT_UNDERLINE_COLOR,\n  DEFAULT_AREA_SHAPE,\n  DEFAULT_DRAW_COLOR,\n  DEFAULT_DRAW_STROKE_WIDTH,\n  MIN_DRAW_STROKE_WIDTH,\n  MAX_DRAW_STROKE_WIDTH,\n} from './types';\nimport { getViewerScale, genId, rgbaToHex, clearMouseSelection } from './utils';\nimport { useStyles } from './styles';\nimport { OverlayLayer } from './OverlayLayer';\nimport { DrawLayer } from './DrawLayer';\nimport { generateAnnotatedPdf as generateAnnotatedPdfBytes } from './pdfGeneration';\nimport { PDFDocument } from 'pdf-lib';\nimport FormatStrikethroughIcon from '@material-ui/icons/FormatStrikethrough';\nimport FormatUnderlinedIcon from '@material-ui/icons/FormatUnderlined';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport StarIcon from '@material-ui/icons/Star';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport { SketchPicker, ColorResult } from 'react-color';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\nimport TouchAppIcon from '@material-ui/icons/TouchApp';\n\nconst ANNOTATION_COLOR_PRESETS = Array.from(new Set([\n  DEFAULT_DRAW_COLOR,\n  DEFAULT_RECTANGLE_COLOR,\n  DEFAULT_SHAPE_COLOR,\n  DEFAULT_TEXT_COLOR,\n  DEFAULT_STRIKETHROUGH_COLOR,\n  DEFAULT_UNDERLINE_COLOR,\n]));\n\ninterface IProps {\n  open: boolean;\n  onClose: () => void;\n  initialSelectedIndex?: number;\n  pdfProducts: List<IMap<IPdfProduct>>;\n  onUploaded?: (updatedProduct: IMap<FirmProduct>) => void;\n}\n\nconst SHAPE_ICONS: Record<ShapeKind, React.ReactNode> = {\n  check: <CheckIcon />,\n  close: <CloseIcon />,\n  star: <StarIcon />,\n  arrowBack: <ArrowBackIcon />,\n  arrowUp: <ArrowUpwardIcon />,\n  arrowForward: <ArrowForwardIcon />,\n  arrowDown: <ArrowDownwardIcon />,\n};\n\nconst AREA_SHAPE_ICONS: Record<AreaShape, React.ReactNode> = {\n  rectangle: <Crop169Icon />,\n  ellipse: <RadioButtonUncheckedIcon />,\n};\n\n\nconst PDFEditorModal: React.FC<IProps> = ({\n  open,\n  onClose,\n  initialSelectedIndex = 0,\n  pdfProducts,\n  onUploaded\n}) => {\n  const [rectangleColor, setRectangleColor] = useState(DEFAULT_RECTANGLE_COLOR);\n  const [areaShape, setAreaShape] = useState<AreaShape>(DEFAULT_AREA_SHAPE);\n  const [activeTool, setActiveTool] = useState<ToolType>('draw');\n  const hideSelectionBackground = activeTool === 'strikethrough' || activeTool === 'underline';\n  const classes = useStyles({ rectangleColor, hideSelectionBackground, areaShape });\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n\n  const [hideTitle, setHideTitle] = useState(false);\n\n  useEffect(() => {\n    if (!open) {\n      setHideTitle(false);\n      return;\n    }\n\n    let observer: ResizeObserver | null = null;\n\n    const check = () => {\n      const el = document.querySelector(`.${classes.toolbar}`) as HTMLDivElement | null;\n      if (!el) { return; }\n      const grid = el.firstElementChild as HTMLElement | null;\n      if (!grid) { return; }\n      let childrenSum = 0;\n      for (const child of Array.from(grid.children)) {\n        childrenSum += (child as HTMLElement).offsetWidth;\n      }\n      const cs = window.getComputedStyle(el);\n      const padX = parseFloat(cs.paddingLeft || '0') + parseFloat(cs.paddingRight || '0');\n      const available = el.clientWidth - padX;\n      if (childrenSum > available) {\n        setHideTitle(true);\n        // Once overflow is detected we never reverse, so stop observing to avoid layout\n        // flushes from getComputedStyle on every subsequent resize.\n        observer?.disconnect();\n        observer = null;\n        return;\n      }\n      // Wire up the ResizeObserver lazily once the element exists so window resizes are caught.\n      if (!observer && typeof ResizeObserver !== 'undefined') {\n        observer = new ResizeObserver(check);\n        observer.observe(el);\n      }\n    };\n\n    // Defer the first check so MUI's Dialog/Fade transition has finished and layout has\n    // settled before we measure.\n    const rafId = requestAnimationFrame(check);\n    const timeoutId = setTimeout(check, 300);\n\n    return () => {\n      cancelAnimationFrame(rafId);\n      clearTimeout(timeoutId);\n      observer?.disconnect();\n    };\n  }, [open, classes.toolbar]);\n\n  const [statePdfProducts, setStatePdfProducts] = useState(List());\n  const [selectedIndex, setSelectedIndex] = useState<number>(initialSelectedIndex);\n  const [pdfBlobUrl, setPdfBlobUrl] = useState<string | null>(null);\n\n  const selectedPdfProduct = statePdfProducts.get(selectedIndex) || null;\n  const originalFileSrc = selectedPdfProduct\n    ? (selectedPdfProduct.get('shopDrawingFileSrc') || selectedPdfProduct.get('fileSrc'))\n    : '';\n  const fileSrc = pdfBlobUrl || originalFileSrc;\n  const fileName = selectedPdfProduct\n    ? (selectedPdfProduct.get('shopDrawingFileName') || selectedPdfProduct.get('fileName'))\n    : '';\n  const productId = selectedPdfProduct ? selectedPdfProduct.get('productId') : 0;\n\n  // Validate that fileSrc is actually a PDF by fetching its headers\n  useEffect(() => {\n    if (!open || !fileSrc) { return; }\n    let cancelled = false;\n    fetch(fileSrc, { method: 'GET', headers: { Range: 'bytes=0-4' } })\n      .then((res) => {\n        if (cancelled) { return; }\n        const contentType = res.headers.get('content-type') || '';\n        if (contentType.includes('application/pdf')) { return; }\n        // If server doesn't return content-type, check magic bytes\n        return res.arrayBuffer().then((buf) => {\n          if (cancelled) { return; }\n          const bytes = new Uint8Array(buf);\n          // PDF magic bytes: %PDF (0x25 0x50 0x44 0x46)\n          const isPdf = bytes[0] === 0x25 && bytes[1] === 0x50 && bytes[2] === 0x44 && bytes[3] === 0x46;\n          if (!isPdf) {\n            dispatch(new SetSnackbarOpenAction({\n              message: t('pdfEditorModal.errorSourceCutsheetNotPdf'),\n              severity: 'error',\n            }));\n            // onClose();\n          }\n        });\n      })\n      .catch(() => {\n        if (cancelled) { return; }\n        dispatch(new SetSnackbarOpenAction({\n          message: t('pdfEditorModal.errorSourceCutsheetNotPdf'),\n          severity: 'error',\n        }));\n        // onClose();\n      });\n    return () => { cancelled = true; };\n  }, [open, fileSrc]);\n\n  // When the user switches to a different product's PDF (or the shop drawing\n  // changes after a save), drop any in-memory page-deletion blob URL.\n  useEffect(() => {\n    setPdfBlobUrl((prev) => {\n      if (prev) { URL.revokeObjectURL(prev); }\n      return null;\n    });\n  }, [originalFileSrc]);\n\n  // Revoke any blob URL on unmount so we don't leak.\n  useEffect(() => {\n    return () => {\n      if (pdfBlobUrl) { URL.revokeObjectURL(pdfBlobUrl); }\n    };\n  }, [pdfBlobUrl]);\n\n  const [settingsAnchor, setSettingsAnchor] = useState<{ tool: ToolType; el: HTMLElement } | null>(null);\n  const [shapeSize, setShapeSize] = useState(DEFAULT_SHAPE_SIZE);\n  const [shapeColor, setShapeColor] = useState(DEFAULT_SHAPE_COLOR);\n  const [shapeKind, setShapeKind] = useState<ShapeKind>(DEFAULT_SHAPE_KIND);\n  const [textColor, setTextColor] = useState(DEFAULT_TEXT_COLOR);\n  const [textFontSize, setTextFontSize] = useState(DEFAULT_TEXT_FONT_SIZE);\n  const [strikethroughColor, setStrikethroughColor] = useState(DEFAULT_STRIKETHROUGH_COLOR);\n  const [underlineColor, setUnderlineColor] = useState(DEFAULT_UNDERLINE_COLOR);\n  const [drawColor, setDrawColor] = useState(DEFAULT_DRAW_COLOR);\n  const [drawStrokeWidth, setDrawStrokeWidth] = useState(DEFAULT_DRAW_STROKE_WIDTH);\n  const [selectionPreviewRects, setSelectionPreviewRects] = useState<\n    Array<{ left: number; top: number; width: number; height: number }>\n  >([]);\n  const [editingTextId, setEditingTextId] = useState<string | null>(null);\n  const [selectedItemId, setSelectedItemId] = useState<{ kind: 'annotation' | 'overlay'; id: string } | null>(null);\n  const [annotations, setAnnotations] = useState<IAnnotation[]>([]);\n  const [overlays, setOverlays] = useState<IClickOverlay[]>([]);\n  const [zoomValue, setZoomValue] = useState<number | null>(null);\n  const [committedZoom, setCommittedZoom] = useState<number | null>(null);\n  const initialZoomSet = useRef(false);\n  // Page to scroll to after the next PDF load. Set by handleDeletePage so the user\n  // stays on (or near) the page they were viewing instead of being kicked to page 1.\n  const pendingTargetPage = useRef<number | null>(null);\n\n  const activeToolRef = useRef(activeTool);\n  activeToolRef.current = activeTool;\n  const selectedItemIdRef = useRef(selectedItemId);\n  selectedItemIdRef.current = selectedItemId;\n  const rectangleColorRef = useRef(rectangleColor);\n  rectangleColorRef.current = rectangleColor;\n  const areaShapeRef = useRef(areaShape);\n  areaShapeRef.current = areaShape;\n  const shapeSizeRef = useRef(shapeSize);\n  shapeSizeRef.current = shapeSize;\n  const shapeColorRef = useRef(shapeColor);\n  shapeColorRef.current = shapeColor;\n  const shapeKindRef = useRef(shapeKind);\n  shapeKindRef.current = shapeKind;\n  const textColorRef = useRef(textColor);\n  textColorRef.current = textColor;\n  const textFontSizeRef = useRef(textFontSize);\n  textFontSizeRef.current = textFontSize;\n  const strikethroughColorRef = useRef(strikethroughColor);\n  strikethroughColorRef.current = strikethroughColor;\n  const underlineColorRef = useRef(underlineColor);\n  underlineColorRef.current = underlineColor;\n  const annotationsRef = useRef(annotations);\n  annotationsRef.current = annotations;\n  const overlaysRef = useRef(overlays);\n  overlaysRef.current = overlays;\n\n  const scrollViewerTo = useRef((_: IAnnotation) => { /* noop */ });\n  const hideTipRef = useRef<(() => void) | null>(null);\n  const isMouseDownRef = useRef(false);\n  const pendingAnnotationRef = useRef<{ hl: IAnnotation; hide: () => void } | null>(null);\n  const lastAddedIdRef = useRef<string | null>(null);\n  const pdfHighlighterRef = useRef<any>(null);\n  const viewerContainerRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    if (open) {\n      setStatePdfProducts(pdfProducts);\n      setSelectedIndex(initialSelectedIndex);\n    } else {\n      setStatePdfProducts(List());\n      (window as any).PdfViewer = null;\n      setSelectedIndex(initialSelectedIndex);\n      setAnnotations([]);\n      setOverlays([]);\n      setEditingTextId(null);\n      setSelectedItemId(null);\n      pendingAnnotationRef.current = null;\n      lastAddedIdRef.current = null;\n      undoStackRef.current = [];\n    }\n  }, [open]);\n\n  // Clear the annotation selection whenever the user leaves the select tool —\n  // dashed outlines aren't relevant once we're back to editing/adding annotations.\n  useEffect(() => {\n    if (activeTool !== 'select') { setSelectedItemId(null); }\n  }, [activeTool]);\n\n  // In select mode, pick up clicks on annotation click-catchers via a document-level\n  // pointerdown listener in CAPTURE phase. We can't rely on inline React onClick on\n  // the click-catcher because PdfHighlighter mounts it via ReactDOM.render into a\n  // secondary React tree, and PdfHighlighter's own onPointerDown handler fires\n  // hideTipAndSelection → renderHighlights, which re-mounts the inner tree mid-click\n  // and loses the cross-tree setSelectedItemId update. Capture-phase document listener\n  // fires before any of that and updates state directly in the main tree.\n  useEffect(() => {\n    if (activeTool !== 'select') { return; }\n    const onCapturePointerDown = (e: PointerEvent) => {\n      const target = e.target as HTMLElement | null;\n      if (!target || !target.closest) { return; }\n      const hit = target.closest('[data-annotation-id]') as HTMLElement | null;\n      if (!hit) { return; }\n      const id = hit.getAttribute('data-annotation-id');\n      if (!id) { return; }\n      // Stop both the inner-tree React processing and PdfHighlighter's\n      // hideTipAndSelection so the inner tree doesn't get re-mounted under us.\n      e.stopPropagation();\n      e.preventDefault();\n      setSelectedItemId({ kind: 'annotation', id });\n    };\n    document.addEventListener('pointerdown', onCapturePointerDown, true);\n    return () => document.removeEventListener('pointerdown', onCapturePointerDown, true);\n  }, [activeTool]);\n\n  const commitPending = useCallback(() => {\n    const pending = pendingAnnotationRef.current;\n    if (pending && pending.hl.id !== lastAddedIdRef.current) {\n      lastAddedIdRef.current = pending.hl.id;\n      setAnnotations((prev) => [...prev, pending.hl]);\n      pending.hide();\n      window.getSelection()?.removeAllRanges();\n    }\n    pendingAnnotationRef.current = null;\n  }, []);\n\n  // Unified undo: removes last item from whichever list was modified last\n  const undoStackRef = useRef<Array<'highlight' | 'overlay'>>([]);\n\n  // Action to perform after the user picks \"Don't Save\" / \"Save\" in the confirm dialog\n  const pendingActionRef = useRef<(() => void) | null>(null);\n\n  const switchToIndex = useCallback((index: number) => {\n    setSelectedIndex(index);\n    setAnnotations([]);\n    setOverlays([]);\n    setEditingTextId(null);\n    pendingAnnotationRef.current = null;\n    lastAddedIdRef.current = null;\n    undoStackRef.current = [];\n  }, []);\n\n  const handleSelectProduct = useCallback((index: number) => {\n    if (index === selectedIndex) {\n      return;\n    }\n    if (annotations.length > 0 || overlays.length > 0) {\n      pendingActionRef.current = () => switchToIndex(index);\n      setConfirmCloseOpen(true);\n      return;\n    }\n    switchToIndex(index);\n  }, [selectedIndex, annotations.length, overlays.length, switchToIndex]);\n\n  const handleUndo = useCallback(() => {\n    const lastType = undoStackRef.current.pop();\n    if (lastType === 'overlay') {\n      setOverlays((prev) => prev.slice(0, -1));\n    } else if (lastType === 'highlight') {\n      setAnnotations((prev) => prev.slice(0, -1));\n    }\n    if (hideTipRef.current) {\n      hideTipRef.current();\n    }\n    clearMouseSelection();\n    window.getSelection()?.removeAllRanges();\n  }, []);\n\n  const commitTextSelection = useCallback(() => {\n    const inst = pdfHighlighterRef.current;\n    if (!inst) { return false; }\n    const sel = window.getSelection();\n    if (!sel || sel.rangeCount === 0 || sel.isCollapsed) { return false; }\n    const range = sel.getRangeAt(0);\n\n    const allClientRects = Array.from(range.getClientRects()).filter((r) => r.width > 0 && r.height > 0);\n    if (allClientRects.length === 0) { return false; }\n\n    // Resolve the page from the first visible rect rather than range.startContainer —\n    // the latter can land on weird ancestor nodes for selections that cross span\n    // boundaries. elementFromPoint at a known-visible rect is reliable.\n    const firstRect = allClientRects[0];\n    const probeX = firstRect.left + Math.min(2, firstRect.width / 2);\n    const probeY = firstRect.top + firstRect.height / 2;\n    const probeEl = document.elementFromPoint(probeX, probeY) as HTMLElement | null;\n    let startPage: HTMLElement | null = probeEl?.closest('.page') as HTMLElement | null;\n    if (!startPage) {\n      const allPages = Array.from(document.querySelectorAll('.page')) as HTMLElement[];\n      for (const p of allPages) {\n        const pr = p.getBoundingClientRect();\n        if (probeY >= pr.top && probeY <= pr.bottom) {\n          startPage = p;\n          break;\n        }\n      }\n    }\n    if (!startPage) { return false; }\n    const pageNumber = parseInt(startPage.dataset.pageNumber || '0', 10);\n    if (!pageNumber) { return false; }\n    const pageRect = startPage.getBoundingClientRect();\n\n    // Filter only by Y so rects extending a fraction past the page's right edge\n    // (common at line ends due to subpixel rendering) aren't dropped.\n    const Y_TOLERANCE = 50;\n    const rects: Array<{ left: number; top: number; width: number; height: number; pageNumber: number }> = [];\n    for (const r of allClientRects) {\n      const cy = r.top + r.height / 2;\n      if (cy < pageRect.top - Y_TOLERANCE) { continue; }\n      if (cy > pageRect.bottom + Y_TOLERANCE) { continue; }\n      rects.push({\n        left: r.left - pageRect.left,\n        top: r.top - pageRect.top,\n        width: r.width,\n        height: r.height,\n        pageNumber,\n      });\n    }\n    if (rects.length === 0) { return false; }\n\n    const minLeft = Math.min(...rects.map((r) => r.left));\n    const minTop = Math.min(...rects.map((r) => r.top));\n    const maxRight = Math.max(...rects.map((r) => r.left + r.width));\n    const maxBottom = Math.max(...rects.map((r) => r.top + r.height));\n    const boundingRect = {\n      left: minLeft,\n      top: minTop,\n      width: maxRight - minLeft,\n      height: maxBottom - minTop,\n      pageNumber,\n    };\n    const viewportPosition = { boundingRect, rects, pageNumber };\n    const scaledPosition = inst.viewportPositionToScaled(viewportPosition);\n\n    const tool = activeToolRef.current;\n    if (tool !== 'strikethrough' && tool !== 'underline') { return false; }\n    const colorByTool: Record<'strikethrough' | 'underline', string> = {\n      strikethrough: strikethroughColorRef.current,\n      underline: underlineColorRef.current,\n    };\n\n    const newHl: IAnnotation = {\n      id: genId(),\n      content: { text: range.toString() },\n      position: scaledPosition,\n      comment: { text: '', emoji: '' },\n      type: tool,\n      highlightColor: colorByTool[tool],\n    };\n    setAnnotations((prev) => [...prev, newHl]);\n    undoStackRef.current.push('highlight');\n    window.getSelection()?.removeAllRanges();\n    return true;\n  }, []);\n\n  useEffect(() => {\n    const handleMouseDown = () => { isMouseDownRef.current = true; };\n    const handleMouseUp = () => {\n      isMouseDownRef.current = false;\n      const inst = pdfHighlighterRef.current;\n      // Cancel the library's 500ms debounced afterSelection — we commit text\n      // selections ourselves via commitTextSelection so the highlight isn't\n      // lost when the user starts a new gesture inside that window.\n      inst?.debouncedAfterSelection?.cancel?.();\n      const tool = activeToolRef.current;\n      if (tool === 'strikethrough' || tool === 'underline') {\n        const ok = commitTextSelection();\n        if (!ok && inst) {\n          // Fallback: sync the live selection into the library and trigger\n          // afterSelection synchronously, in case our custom path missed it.\n          const sel = window.getSelection();\n          if (sel && sel.rangeCount > 0 && !sel.isCollapsed) {\n            const range = sel.getRangeAt(0);\n            const container = inst.containerNode;\n            if (container && container.contains(range.commonAncestorContainer)) {\n              inst.state.range = range;\n              inst.state.isCollapsed = false;\n            }\n          }\n          inst.afterSelection?.();\n        }\n      }\n      commitPending();\n    };\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if ((e.ctrlKey || e.metaKey) && e.key === 'z') {\n        e.preventDefault();\n        handleUndo();\n        return;\n      }\n      if (e.key === 'Backspace' || e.key === 'Delete') {\n        // Don't intercept while the user is typing in an input/textarea\n        // (e.g., editing a text annotation overlay).\n        const target = e.target as HTMLElement | null;\n        const tag = target?.tagName;\n        if (tag === 'INPUT' || tag === 'TEXTAREA' || (target && target.isContentEditable)) { return; }\n        const sel = selectedItemIdRef.current;\n        if (!sel) { return; }\n        e.preventDefault();\n        if (sel.kind === 'annotation') {\n          setAnnotations((prev) => prev.filter((a) => a.id !== sel.id));\n        } else {\n          setOverlays((prev) => prev.filter((o) => o.id !== sel.id));\n        }\n        setSelectedItemId(null);\n      }\n    };\n    window.addEventListener('mousedown', handleMouseDown);\n    window.addEventListener('mouseup', handleMouseUp);\n    window.addEventListener('keydown', handleKeyDown);\n    return () => {\n      window.removeEventListener('mousedown', handleMouseDown);\n      window.removeEventListener('mouseup', handleMouseUp);\n      window.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [commitPending, commitTextSelection, handleUndo]);\n\n  const pdfScale = committedZoom === null ? 'page-width' : `${committedZoom / 100}`;\n  const pdfLoaded = !!fileSrc && committedZoom !== null;\n\n  useEffect(() => {\n    initialZoomSet.current = false;\n    setCommittedZoom(null);\n    setZoomValue(null);\n    // Clear the stale viewer reference (library only re-sets it after the new PDF finishes init)\n    (window as any).PdfViewer = null;\n  }, [fileSrc]);\n\n  useEffect(() => {\n    if (initialZoomSet.current || committedZoom !== null) { return; }\n    const timer = setInterval(() => {\n      const pdfViewer = (window as any).PdfViewer;\n      if (pdfViewer?.viewer?.currentScale) {\n        const actualScale = pdfViewer.viewer.currentScale;\n        // Floor (don't round) so the committed scale never exceeds pdfjs's measured\n        // fit-to-width — rounding up by even a fraction of a percent causes a slight\n        // horizontal scrollbar on wide PDFs at certain viewport widths.\n        const fitZoom = Math.min(Math.floor(actualScale * 100), 100);\n        setZoomValue(fitZoom);\n        setCommittedZoom(fitZoom);\n        initialZoomSet.current = true;\n        clearInterval(timer);\n      }\n    }, 100);\n    return () => clearInterval(timer);\n  }, [committedZoom]);\n\n  const [currentPage, setCurrentPage] = useState(1);\n  const [totalPages, setTotalPages] = useState(0);\n  const [pageInputValue, setPageInputValue] = useState('1');\n\n  useEffect(() => {\n    setCurrentPage(1);\n    setTotalPages(0);\n    setPageInputValue('1');\n  }, [fileSrc]);\n\n  useEffect(() => {\n    if (!pdfLoaded) { return; }\n\n    let cleanup: (() => void) | null = null;\n    // Poll until pdfjs has finished initializing the new viewer. PdfHighlighter remounts\n    // on every pdfScale change (key={pdfScale}), so window.PdfViewer.viewer.pagesCount\n    // is briefly 0 each time until the document loads.\n    const initTimer = setInterval(() => {\n      const pdfViewer = (window as any).PdfViewer;\n      const viewer = pdfViewer?.viewer;\n      if (!viewer || !viewer.pagesCount) { return; }\n      clearInterval(initTimer);\n      setTotalPages(viewer.pagesCount);\n\n      // Ignore pdfjs's `pagechanging` event — its built-in heuristic mis-reports the page\n      // (e.g., shows 2 while the user is at the top of page 1). Compute it ourselves: the\n      // current page is the highest-numbered page whose top edge is at or above the\n      // scrolling container's top edge.\n      const container = document.querySelector('.PdfHighlighter') as HTMLElement | null;\n      if (!container) { return; }\n\n      let rafScheduled = false;\n      const updatePage = () => {\n        const containerTop = container.getBoundingClientRect().top;\n        const pages = container.querySelectorAll('[data-page-number]');\n        let page = 1;\n        pages.forEach((el) => {\n          const n = parseInt((el as HTMLElement).dataset.pageNumber || '0', 10);\n          if (!n) { return; }\n          if (el.getBoundingClientRect().top - containerTop <= 1 && n > page) {\n            page = n;\n          }\n        });\n        setCurrentPage(page);\n        setPageInputValue(String(page));\n      };\n      const onScroll = () => {\n        if (rafScheduled) { return; }\n        rafScheduled = true;\n        requestAnimationFrame(() => {\n          rafScheduled = false;\n          updatePage();\n        });\n      };\n\n      updatePage();\n      container.addEventListener('scroll', onScroll, { passive: true });\n      cleanup = () => container.removeEventListener('scroll', onScroll);\n\n      // Restore the page the user was on (set by handleDeletePage). The resulting\n      // scroll fires onScroll → updatePage so currentPage/pageInputValue catch up.\n      if (\n        pendingTargetPage.current !== null &&\n        pendingTargetPage.current >= 1 &&\n        pendingTargetPage.current <= viewer.pagesCount\n      ) {\n        viewer.currentPageNumber = pendingTargetPage.current;\n      }\n      pendingTargetPage.current = null;\n    }, 100);\n\n    return () => {\n      clearInterval(initTimer);\n      if (cleanup) { cleanup(); }\n    };\n    // pdfScale is a dep because the PdfHighlighter component has key={pdfScale} and\n    // remounts on zoom changes — replacing the .PdfHighlighter element and the viewer.\n  }, [pdfLoaded, pdfScale]);\n\n  // react-pdf-highlighter passes textLayerMode: 2 (ENABLE_ENHANCE) to pdfjs, which\n  // makes pdfjs rewrite every text span's transform/padding on mousedown. That DOM\n  // mutation breaks the browser's selection — every mousemove places a fresh\n  // collapsed caret instead of extending the selection (anchorOffset === focusOffset\n  // throughout the drag). Disabling enhanceTextSelection on each TextLayerBuilder\n  // is the only knob we have without forking the library.\n  useEffect(() => {\n    if (!pdfLoaded) { return; }\n    let textLayerListener: ((evt: any) => void) | null = null;\n    let inst: any = null;\n    const patchPage = (pageNumber: number) => {\n      const pageView = inst?.viewer?.getPageView?.(pageNumber - 1);\n      if (pageView?.textLayer) {\n        pageView.textLayer.enhanceTextSelection = false;\n      }\n    };\n    const initTimer = setInterval(() => {\n      inst = pdfHighlighterRef.current;\n      if (!inst?.eventBus || !inst.viewer) { return; }\n      clearInterval(initTimer);\n      const total = inst.viewer.pagesCount || 0;\n      for (let i = 1; i <= total; i++) { patchPage(i); }\n      textLayerListener = (evt: any) => patchPage(evt.pageNumber);\n      inst.eventBus.on('textlayerrendered', textLayerListener);\n    }, 100);\n    return () => {\n      clearInterval(initTimer);\n      if (inst?.eventBus && textLayerListener) {\n        inst.eventBus.off('textlayerrendered', textLayerListener);\n      }\n    };\n  }, [pdfLoaded, pdfScale]);\n\n  // While a strikethrough/underline drag is in progress, render preview lines that track\n  // the live text selection rects. The native ::selection background is hidden via styles\n  // (it can only paint a flat color, not a strikethrough/underline) so this overlay is\n  // what gives the user visual feedback of what will be committed on mouseup.\n  // We drive updates from selectionchange + mousemove + scroll because selectionchange\n  // alone occasionally misses frames during a fast drag inside the pdfjs textLayer.\n  useEffect(() => {\n    if (activeTool !== 'strikethrough' && activeTool !== 'underline') {\n      setSelectionPreviewRects([]);\n      return;\n    }\n    let rafId = 0;\n    const update = () => {\n      if (rafId) { return; }\n      rafId = requestAnimationFrame(() => {\n        rafId = 0;\n        const layer = viewerContainerRef.current;\n        const sel = window.getSelection();\n        if (!layer || !sel || sel.rangeCount === 0 || sel.isCollapsed) {\n          setSelectionPreviewRects((prev) => (prev.length ? [] : prev));\n          return;\n        }\n        const range = sel.getRangeAt(0);\n        const layerRect = layer.getBoundingClientRect();\n        const next = Array.from(range.getClientRects())\n          .filter((r) => r.width > 0 && r.height > 0)\n          .map((r) => ({\n            left: r.left - layerRect.left,\n            top: r.top - layerRect.top,\n            width: r.width,\n            height: r.height,\n          }));\n        setSelectionPreviewRects(next);\n      });\n    };\n    document.addEventListener('selectionchange', update);\n    document.addEventListener('mousemove', update);\n    const sc = document.querySelector('.PdfHighlighter');\n    sc?.addEventListener('scroll', update, { passive: true });\n    return () => {\n      document.removeEventListener('selectionchange', update);\n      document.removeEventListener('mousemove', update);\n      sc?.removeEventListener('scroll', update);\n      if (rafId) { cancelAnimationFrame(rafId); }\n    };\n  }, [activeTool]);\n\n  const handlePageInputCommit = useCallback(() => {\n    const page = parseInt(pageInputValue, 10);\n    if (!isNaN(page) && page >= 1 && page <= totalPages) {\n      const pdfViewer = (window as any).PdfViewer;\n      if (pdfViewer?.viewer) {\n        pdfViewer.viewer.currentPageNumber = page;\n      }\n    } else {\n      setPageInputValue(String(currentPage));\n    }\n  }, [pageInputValue, totalPages, currentPage]);\n\n  const atsApi = useAtsApi();\n  const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n  const [isUploading, setIsUploading] = useState(false);\n\n  const generateAnnotatedPdf = useCallback(\n    () => generateAnnotatedPdfBytes(fileSrc, annotationsRef.current, overlaysRef.current),\n    [fileSrc],\n  );\n\n  const handleUploadAndUpdate = useCallback(async (options?: { onSuccess?: () => void }) => {\n    if (isUploading) { return; }\n    setIsUploading(true);\n\n    try {\n      // 1. Generate annotated PDF\n      const pdfBytes = await generateAnnotatedPdf();\n      const blob = new Blob([pdfBytes as any], { type: 'application/pdf' });\n      const file = new File([blob], `shop_drawing_${selectedPdfProduct.get('fileName')}` || 'shop_drawing.pdf', { type: 'application/pdf' });\n\n      // 2. Get upload URL\n      const fileUploadUrl = atsApi.callApi({\n        service: 'file',\n        endpoint: 'uploadFile',\n        urlOnly: true,\n        withToken: true,\n        withAppId: true,\n      }) as string;\n\n      // 3. Upload file via XHR\n      const uploadedFileId: string = await new Promise((resolve, reject) => {\n        const req = new XMLHttpRequest();\n        const data = new FormData();\n        data.append('file', file);\n        data.append('type', 'file');\n        req.open('POST', fileUploadUrl);\n        req.addEventListener('loadend', () => {\n          try {\n            const payload = JSON.parse(req.responseText).payload;\n            if (payload.error) {\n              reject(new Error(payload.error.message || 'Upload failed'));\n            } else {\n              const uploadedFile = payload.file.files[0];\n              resolve(uploadedFile.fileId || uploadedFile.id);\n            }\n          } catch (e) {\n            reject(new Error('Failed to parse upload response'));\n          }\n        });\n        req.addEventListener('error', () => reject(new Error('Upload request failed')));\n        req.send(data);\n      });\n\n      // 4. Add shop drawing to product\n      const isCanada = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.canada;\n      const languageCode = isCanada ? 'en-ca' : 'en-us';\n\n      dispatch(new AddFirmProductFileAction({\n        firmProductId: productId,\n        fileId: uploadedFileId,\n        fileType: 'shop_drawing',\n        languageCode: selectedPdfProduct.get('languageCode') || languageCode,\n        onSuccess: (updatedProduct) => {\n          onUploaded?.(updatedProduct);\n          dispatch(new SetSnackbarOpenAction({\n            message: t('pdfEditorModal.shopDrawingSavedSuccess'),\n            severity: 'success',\n          }));\n          setStatePdfProducts((prev) => prev.update(selectedIndex, (p) => {\n            if (!p) { return p; }\n            return p.set('shopDrawingFileSrc', generateFileLink(uploadedFileId)).set('shopDrawingFileName', file.name);\n          }));\n          setAnnotations([]);\n          setOverlays([]);\n          setEditingTextId(null);\n          pendingAnnotationRef.current = null;\n          lastAddedIdRef.current = null;\n          undoStackRef.current = [];\n          options?.onSuccess?.();\n        },\n      }));\n    } catch (err) {\n      console.debug('Upload failed:', err); // tslint:disable-line\n      dispatch(new SetSnackbarOpenAction({\n        message: t('pdfEditorModal.errorFailedToSaveShopDrawing'),\n        severity: 'error',\n      }));\n    } finally {\n      setIsUploading(false);\n    }\n  }, [isUploading, generateAnnotatedPdf, atsApi, loginUserOfficeLocation, productId, dispatch, fileName, onUploaded, onClose, selectedIndex]);\n\n  const [confirmCloseOpen, setConfirmCloseOpen] = useState(false);\n\n  const hasUnsavedAnnotations = annotations.length > 0 || overlays.length > 0;\n\n  useEffect(() => {\n    if (!open || !hasUnsavedAnnotations) { return; }\n    const handleBeforeUnload = (e: BeforeUnloadEvent) => {\n      e.preventDefault();\n    };\n    window.addEventListener('beforeunload', handleBeforeUnload);\n    return () => window.removeEventListener('beforeunload', handleBeforeUnload);\n  }, [open, hasUnsavedAnnotations]);\n\n  const handleAttemptClose = useCallback(() => {\n    if (hasUnsavedAnnotations) {\n      pendingActionRef.current = () => onClose();\n      setConfirmCloseOpen(true);\n    } else {\n      onClose();\n    }\n  }, [hasUnsavedAnnotations, onClose]);\n\n  const handleConfirmCancel = useCallback(() => {\n    pendingActionRef.current = null;\n    setConfirmCloseOpen(false);\n  }, []);\n\n  const handleConfirmDontSave = useCallback(() => {\n    setConfirmCloseOpen(false);\n    const action = pendingActionRef.current;\n    pendingActionRef.current = null;\n    action?.();\n  }, []);\n\n  const handleConfirmSave = useCallback(() => {\n    setConfirmCloseOpen(false);\n    const action = pendingActionRef.current;\n    pendingActionRef.current = null;\n    handleUploadAndUpdate({ onSuccess: action || undefined });\n  }, [handleUploadAndUpdate]);\n\n  const handleDownload = useCallback(async () => {\n    try {\n      const pdfBytes = await generateAnnotatedPdf();\n      const blob = new Blob([pdfBytes as any], { type: 'application/pdf' });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = hasUnsavedAnnotations ? 'shop_drawing_in_progress.pdf' : fileName || 'edited.pdf';\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n      URL.revokeObjectURL(url);\n    } catch (err) {\n      console.debug('PDF download failed:', err); // tslint:disable-line\n    }\n  }, [generateAnnotatedPdf, fileName, hasUnsavedAnnotations]);\n\n  const handleDeletePage = useCallback(async () => {\n    if (totalPages <= 1) { return; }\n    try {\n      const res = await fetch(fileSrc);\n      const bytes = await res.arrayBuffer();\n      const pdfDoc = await PDFDocument.load(bytes);\n      pdfDoc.removePage(currentPage - 1);\n      const newBytes = await pdfDoc.save();\n      const blob = new Blob([newBytes as any], { type: 'application/pdf' });\n      const newUrl = URL.createObjectURL(blob);\n\n      // Drop annotations on the deleted page; renumber rest down by one.\n      const deleted = currentPage;\n      setAnnotations((prev) =>\n        prev\n          .filter((hl) => (hl.position.boundingRect.pageNumber || hl.position.pageNumber) !== deleted)\n          .map((hl) => {\n            const shift = (n?: number) => (n && n > deleted ? n - 1 : n);\n            return {\n              ...hl,\n              position: {\n                ...hl.position,\n                pageNumber: shift(hl.position.pageNumber)!,\n                boundingRect: { ...hl.position.boundingRect, pageNumber: shift(hl.position.boundingRect.pageNumber)! },\n                rects: hl.position.rects.map((r) => ({ ...r, pageNumber: shift(r.pageNumber)! })),\n              },\n            };\n          }),\n      );\n      setOverlays((prev) =>\n        prev\n          .filter((o) => o.pageNumber !== deleted)\n          .map((o) => (o.pageNumber > deleted ? { ...o, pageNumber: o.pageNumber - 1 } : o)),\n      );\n\n      // Stay on the same page number in the new PDF if it still exists, otherwise\n      // fall back to the page before it (e.g. delete last page → land on new last).\n      pendingTargetPage.current = Math.min(currentPage, totalPages - 1);\n\n      setPdfBlobUrl((prev) => {\n        if (prev) { URL.revokeObjectURL(prev); }\n        return newUrl;\n      });\n    } catch (err) {\n      console.debug('Delete page failed:', err); // tslint:disable-line\n    }\n  }, [fileSrc, currentPage, totalPages]);\n\n  const zoomPct = zoomValue ?? 100;\n\n  const getPageClickPosition = (e: React.MouseEvent) => {\n    const target = e.target as HTMLElement;\n    const pageEl = target.closest('.page') as HTMLElement;\n    if (!pageEl) { return null; }\n    const pageNumber = Number(pageEl.dataset.pageNumber);\n    if (!pageNumber) { return null; }\n    const pageRect = pageEl.getBoundingClientRect();\n    return {\n      pageNumber,\n      xPct: (e.clientX - pageRect.left) / pageRect.width,\n      yPct: (e.clientY - pageRect.top) / pageRect.height,\n    };\n  };\n\n  const handleViewerMouseDown = useCallback((e: React.MouseEvent) => {\n    if (activeToolRef.current !== 'shape') { return; }\n    const pos = getPageClickPosition(e);\n    if (!pos) { return; }\n    const drawScale = getViewerScale();\n    setOverlays((prev) => [...prev, {\n      id: genId(),\n      type: 'shape',\n      pageNumber: pos.pageNumber,\n      xPct: pos.xPct,\n      yPct: pos.yPct,\n      drawScale,\n      shapeKind: shapeKindRef.current,\n      shapeSize: shapeSizeRef.current,\n      shapeColor: shapeColorRef.current,\n    }]);\n    undoStackRef.current.push('overlay');\n  }, []);\n\n  const handleViewerClick = useCallback((e: React.MouseEvent) => {\n    if (activeToolRef.current === 'select') {\n      // Annotation click-catchers are tagged with data-annotation-id and selection is\n      // applied via the document-level capture-phase pointerdown listener. The subsequent\n      // click event still bubbles here — ignore it so we don't immediately clear the\n      // selection we just made. Overlay clicks already stopPropagation in OverlayLayer.\n      const target = e.target as HTMLElement | null;\n      if (target && target.closest && target.closest('[data-annotation-id]')) { return; }\n      setSelectedItemId(null);\n      return;\n    }\n    if (activeToolRef.current !== 'textAnnotation') { return; }\n    const pos = getPageClickPosition(e);\n    if (!pos) { return; }\n    const id = genId();\n    const drawScale = getViewerScale();\n    setOverlays((prev) => [...prev, {\n      id,\n      type: 'textAnnotation',\n      pageNumber: pos.pageNumber,\n      xPct: pos.xPct,\n      yPct: pos.yPct,\n      drawScale,\n      annotationText: '',\n      textColor: textColorRef.current,\n      textFontSize: textFontSizeRef.current,\n    }]);\n    undoStackRef.current.push('overlay');\n    setEditingTextId(id);\n  }, []);\n\n  // Each mouse-down-to-mouse-up stroke from DrawLayer is its own overlay (one undo step).\n  const handleDrawCommit = useCallback((ov: IClickOverlay) => {\n    setOverlays((prev) => [...prev, ov]);\n    undoStackRef.current.push('overlay');\n  }, []);\n\n  // PdfHighlighter re-runs highlightTransform only when its `highlights` prop reference\n  // changes (it uses ReactDOM.render imperatively and gates re-renders on highlights\n  // identity in componentDidUpdate). To make the select-tool's click-catcher and dashed\n  // outline reflect the latest activeTool / selectedItemId, hand it a fresh array ref\n  // whenever those inputs change — even though the memo body only reads `annotations`.\n  const highlightsForRender = React.useMemo(\n    () => annotations.slice(),\n    [annotations, activeTool, selectedItemId],\n  );\n\n  return (\n    <Dialog open={open} onClose={handleAttemptClose} fullScreen={true}>\n      <div className={classes.root}>\n        <Paper square={true} elevation={2} className={classes.toolbar}>\n          <Grid container={true} alignItems='center' justify='space-between' wrap='nowrap'>\n            {!hideTitle && (\n              <Typography variant='h6' style={{ whiteSpace: 'nowrap' }}>\n                {t('pdfEditorModal.createShopDrawing')}\n              </Typography>\n            )}\n\n            <div className={classes.tools}>\n              {/* Undo */}\n              <div className={classes.toolGroup}>\n                <Tooltip title={t('pdfEditorModal.undoTooltip')}>\n                  <span>\n                    <IconButton size='small' onClick={handleUndo} disabled={!hasUnsavedAnnotations}>\n                      <UndoIcon />\n                    </IconButton>\n                  </span>\n                </Tooltip>\n              </div>\n              {(() => {\n                const tools: Array<{ tool: ToolType; icon: React.ReactNode; tooltipKey: string }> = [\n                  { tool: 'draw', icon: <BorderColorIcon />, tooltipKey: 'pdfEditorModal.highlightTooltip' },\n                  { tool: 'rectangle', icon: AREA_SHAPE_ICONS[areaShape], tooltipKey: 'pdfEditorModal.rectangleTooltip' },\n                  { tool: 'shape', icon: SHAPE_ICONS[shapeKind], tooltipKey: 'pdfEditorModal.shapeTooltip' },\n                  { tool: 'textAnnotation', icon: <TextFieldsIcon />, tooltipKey: 'pdfEditorModal.textTooltip' },\n                  { tool: 'strikethrough', icon: <FormatStrikethroughIcon />, tooltipKey: 'pdfEditorModal.strikethroughTooltip' },\n                  { tool: 'underline', icon: <FormatUnderlinedIcon />, tooltipKey: 'pdfEditorModal.underlineTooltip' },\n                ];\n                return tools.map(({ tool, icon, tooltipKey }) => (\n                  <div\n                    key={tool}\n                    className={`${classes.toolGroup} ${activeTool === tool ? classes.toolGroupSelected : ''}`}\n                  >\n                    <Tooltip title={t(tooltipKey)}>\n                      <IconButton\n                        size='small'\n                        className={activeTool === tool ? classes.activeBtn : ''}\n                        onClick={() => setActiveTool(tool)}\n                      >\n                        {icon}\n                      </IconButton>\n                    </Tooltip>\n                    <IconButton\n                      size='small'\n                      className={classes.dropdownCaret}\n                      onClick={(e) => {\n                        setActiveTool(tool);\n                        setSettingsAnchor({ tool, el: e.currentTarget });\n                      }}\n                    >\n                      <ArrowDropDownIcon fontSize='small' />\n                    </IconButton>\n                  </div>\n                ));\n              })()}\n              {/* Select-to-delete tool — has no settings dropdown so it lives outside the\n                  mapped tools array (which renders a caret per item). */}\n              <div className={`${classes.toolGroup} ${activeTool === 'select' ? classes.toolGroupSelected : ''}`}>\n                <Tooltip title={t('pdfEditorModal.selectAnnotationTooltip')}>\n                  <IconButton\n                    size='small'\n                    className={activeTool === 'select' ? classes.activeBtn : ''}\n                    onClick={() => setActiveTool('select')}\n                  >\n                    <TouchAppIcon />\n                  </IconButton>\n                </Tooltip>\n              </div>\n\n              {/* Zoom slider */}\n              <div className={classes.toolGroup}>\n                <Typography variant='caption' style={{ minWidth: 36, textAlign: 'right' }}>\n                  {zoomPct}%\n                </Typography>\n                <Tooltip title={t('pdfEditorModal.zoomTooltip')}>\n                  <span>\n                    <Slider\n                      className={classes.zoomSlider}\n                      value={zoomPct}\n                      min={5}\n                      max={300}\n                      disabled={!pdfLoaded}\n                      onChange={(_, v) => setZoomValue(v as number)}\n                      onChangeCommitted={(_, v) => { setZoomValue(v as number); setCommittedZoom(v as number); }}\n                    />\n                  </span>\n                </Tooltip>\n              </div>\n\n              {/* Page navigation */}\n              <div className={classes.toolGroup} style={{ whiteSpace: 'nowrap' }}>\n                <TextField\n                  type='number'\n                  value={pageInputValue}\n                  onChange={(e) => setPageInputValue(e.target.value)}\n                  className={classes.pageInput}\n                  inputProps={{\n                    min: 1,\n                    max: totalPages || 1,\n                    onBlur: handlePageInputCommit,\n                    onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n                      if (e.key === 'Enter') {\n                        handlePageInputCommit();\n                        (e.target as HTMLInputElement).blur();\n                      }\n                    },\n                  }}\n                  size='small'\n                  disabled={!pdfLoaded}\n                />\n                <Typography variant='caption' style={{ marginLeft: 4 }}>\n                  {`/ ${totalPages}`}\n                </Typography>\n              </div>\n\n              {/* Delete current page */}\n              <div className={classes.toolGroup}>\n                <Tooltip title={t('pdfEditorModal.deletePageTooltip')}>\n                  <span>\n                    <IconButton\n                      size='small'\n                      onClick={handleDeletePage}\n                      disabled={!pdfLoaded || totalPages <= 1}\n                    >\n                      <DeleteIcon />\n                    </IconButton>\n                  </span>\n                </Tooltip>\n              </div>\n            </div>\n\n            <div className={classes.cta}>\n              <div className={classes.toolGroup}>\n                <Tooltip title={t('pdfEditorModal.downloadTooltip')}>\n                  <span>\n                    <IconButton size='small' onClick={handleDownload} disabled={!pdfLoaded || !hasUnsavedAnnotations}>\n                      <SaveAltIcon />\n                    </IconButton>\n                  </span>\n                </Tooltip>\n              </div>\n              <div className={classes.toolGroup}>\n                <Tooltip title={t('pdfEditorModal.saveShopDrawingTooltip')}>\n                  <span>\n                  <IconButton size='small' onClick={() => handleUploadAndUpdate()} disabled={isUploading || !pdfLoaded || !hasUnsavedAnnotations}>\n                    {isUploading\n                      ? <CircularProgress size={20} />\n                      : <SaveIcon />\n                    }\n                  </IconButton>\n                  </span>\n                </Tooltip>\n              </div>\n              <div className={classes.toolGroupLast}>\n                <Tooltip title={t('pdfEditorModal.closeTooltip')}>\n                  <IconButton size='small' onClick={handleAttemptClose}>\n                    <CloseIcon />\n                  </IconButton>\n                </Tooltip>\n              </div>\n            </div>\n          </Grid>\n        </Paper>\n\n        {(() => {\n          if (!settingsAnchor) { return null; }\n          const tool = settingsAnchor.tool;\n          // Partial since the `select` tool has no settings popover and therefore no color.\n          const colorByTool: Partial<Record<ToolType, { value: string; set: (v: string) => void }>> = {\n            draw: { value: drawColor, set: setDrawColor },\n            rectangle: { value: rectangleColor, set: setRectangleColor },\n            shape: { value: shapeColor, set: setShapeColor },\n            textAnnotation: { value: textColor, set: setTextColor },\n            strikethrough: { value: strikethroughColor, set: setStrikethroughColor },\n            underline: { value: underlineColor, set: setUnderlineColor },\n          };\n          const sizeByTool: Partial<Record<ToolType, { value: number; set: (v: number) => void }>> = {\n            shape: { value: shapeSize, set: setShapeSize },\n            textAnnotation: { value: textFontSize, set: setTextFontSize },\n          };\n          const colorCfg = colorByTool[tool];\n          const sizeCfg = sizeByTool[tool];\n          if (!colorCfg) { return null; }\n          const shapeOptions = (Object.keys(SHAPE_ICONS) as ShapeKind[]).map((kind) => ({\n            kind,\n            icon: SHAPE_ICONS[kind],\n          }));\n          const areaShapeOptions = (Object.keys(AREA_SHAPE_ICONS) as AreaShape[]).map((kind) => ({\n            kind,\n            icon: AREA_SHAPE_ICONS[kind],\n          }));\n          return (\n            <Popover\n              open={true}\n              anchorEl={settingsAnchor.el}\n              onClose={() => setSettingsAnchor(null)}\n              anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n              transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n            >\n              <div className={classes.toolSettingsPopover}>\n                {tool === 'rectangle' && (\n                  <div className={classes.toolSettingsRow}>\n                    {areaShapeOptions.map(({ kind, icon }) => (\n                      <IconButton\n                        key={kind}\n                        size='small'\n                        color={areaShape === kind ? 'primary' : 'default'}\n                        onClick={() => setAreaShape(kind)}\n                      >\n                        {icon}\n                      </IconButton>\n                    ))}\n                  </div>\n                )}\n                {tool === 'shape' && (\n                  <div className={classes.toolSettingsRow}>\n                    {shapeOptions.map(({ kind, icon }) => (\n                      <IconButton\n                        key={kind}\n                        size='small'\n                        color={shapeKind === kind ? 'primary' : 'default'}\n                        onClick={() => setShapeKind(kind)}\n                      >\n                        {icon}\n                      </IconButton>\n                    ))}\n                  </div>\n                )}\n                {sizeCfg && (\n                  <div className={classes.toolSettingsRow}>\n                    <Tooltip title={t('pdfEditorModal.fontSizeTooltip')}>\n                      <TextField\n                        type='number'\n                        value={sizeCfg.value}\n                        onChange={(e) => {\n                          const v = parseInt(e.target.value, 10);\n                          if (!isNaN(v)) { sizeCfg.set(Math.max(8, Math.min(200, v))); }\n                        }}\n                        className={classes.sizeInput}\n                        inputProps={{ min: 8, max: 200 }}\n                        size='small'\n                      />\n                    </Tooltip>\n                  </div>\n                )}\n                {tool === 'draw' && (\n                  <div className={classes.toolSettingsRow}>\n                    <Tooltip title={t('pdfEditorModal.strokeSizeTooltip')}>\n                      <span className={classes.strokeSliderWrap}>\n                        <Slider\n                          value={drawStrokeWidth}\n                          min={MIN_DRAW_STROKE_WIDTH}\n                          max={MAX_DRAW_STROKE_WIDTH}\n                          step={1}\n                          onChange={(_, v) => setDrawStrokeWidth(v as number)}\n                        />\n                      </span>\n                    </Tooltip>\n                    <Typography variant='caption' className={classes.strokeSizeValue}>\n                      {`${drawStrokeWidth}px`}\n                    </Typography>\n                  </div>\n                )}\n                <SketchPicker\n                  color={colorCfg.value}\n                  // `c.hex` is always 6 digits (react-color drops alpha), so build the\n                  // stored value from `c.rgb` to keep the alpha the user picked.\n                  onChange={(c: ColorResult) => colorCfg.set(rgbaToHex(c.rgb))}\n                  presetColors={ANNOTATION_COLOR_PRESETS}\n                  disableAlpha={false}\n                  styles={{\n                    default: {\n                      picker: {\n                        boxShadow: 'none',\n                        padding: 0,\n                        width: 212,\n                      },\n                    },\n                  }}\n                />\n              </div>\n            </Popover>\n          );\n        })()}\n\n        <div className={classes.mainContent}>\n        <div className={classes.sidebar}>\n          {statePdfProducts.toArray().map((p, idx) => {\n            const isSelected = idx === selectedIndex;\n            const productImageSrc = p.get('imageSrc') || 'undefined';\n            const productNumber = p.get('productNumber');\n            const brand = p.get('brand');\n            const category = p.get('category');\n            const manufacturerCutsheetFileLink = p.get('fileSrc');\n            const cutsheetFileName = p.get('fileName');\n            const shopDrawingFileSrc = p.get('shopDrawingFileSrc');\n            const shopDrawingFileName = p.get('shopDrawingFileName');\n            return (\n              <div\n                key={`${p.get('productId')}-${idx}`}\n                className={`${classes.productItem} ${isSelected ? classes.productItemSelected : ''}`}\n                onClick={() => handleSelectProduct(idx)}\n              >\n                <div className={classes.productHeader}>\n                  {productImageSrc && (\n                    <Image src={productImageSrc + `|fit:81,81`} fromService={true} aspectRatio={'100%'} width={'81px'} margin={'0 0 0 0px'} />\n                  )}\n                  <div className={classes.productInfo}>\n                    <Typography variant='body2' color='textPrimary' className={classes.productMetaText}>{productNumber}</Typography>\n                    <Typography variant='body1' className={classes.productMetaText}>{brand}</Typography>\n                    <Typography variant='body1' className={classes.productMetaText}>{category}</Typography>\n                  </div>\n                </div>\n                {cutsheetFileName && (\n                  <div className={`${classes.fileSection} ${(isSelected && !shopDrawingFileName) ? classes.fileSectionSelected : ''}`}>\n                    <div className={classes.fileRow}>\n                      <AttachFileIcon className={classes.fileIcon} />\n                      <Typography variant='caption' color='textPrimary' className={classes.fileSectionLabel}>{t('pdfEditorModal.manufacturerCutsheet')}</Typography>\n                    </div>\n                    <Tooltip title={cutsheetFileName}>\n                      <Link variant='caption' href={manufacturerCutsheetFileLink} underline='none' className={classes.fileNameText}>{cutsheetFileName}</Link>\n                    </Tooltip>\n                  </div>\n                )}\n                {shopDrawingFileName && (\n                  <div className={`${classes.fileSection} ${isSelected ? classes.fileSectionSelected : ''}`}>\n                    <div className={classes.fileRow}>\n                      <AttachFileIcon className={classes.fileIcon} />\n                      <Typography variant='caption' color='textPrimary' className={classes.fileSectionLabel}>{t('pdfEditorModal.shopDrawing')}</Typography>\n                    </div>\n                    <Tooltip title={shopDrawingFileName}>\n                      <Link variant='caption' href={shopDrawingFileSrc} underline='none' className={classes.fileNameText}>{shopDrawingFileName}</Link>\n                    </Tooltip>\n                  </div>\n                )}\n              </div>\n            );\n          })}\n        </div>\n        <div\n          ref={viewerContainerRef}\n          className={[\n            classes.viewerContainer,\n            activeTool === 'rectangle' || activeTool === 'shape' ? classes.viewerContainerPointer : '',\n            activeTool === 'draw' ? classes.viewerContainerDraw : '',\n          ].join(' ')}\n          onClick={handleViewerClick}\n          onMouseDown={handleViewerMouseDown}\n        >\n          <PdfLoader\n            url={fileSrc}\n            workerSrc='https://unpkg.com/pdfjs-dist@2.12.313/build/pdf.worker.min.js'\n            beforeLoad={<CircularProgress style={{ margin: 'auto' }} />}\n          >\n            {(pdfDocument) => (\n              <PdfHighlighter<IAnnotation>\n                ref={pdfHighlighterRef}\n                key={pdfScale}\n                pdfDocument={pdfDocument}\n                highlights={highlightsForRender}\n                pdfScaleValue={pdfScale}\n                enableAreaSelection={(event) =>\n                  activeToolRef.current === 'rectangle'\n                }\n                onScrollChange={() => { /* noop */ }}\n                scrollRef={(scrollTo) => {\n                  scrollViewerTo.current = scrollTo;\n                }}\n                onSelectionFinished={(\n                  position,\n                  content,\n                  hideTipAndSelection,\n                  transformSelection,\n                ) => {\n                  hideTipRef.current = hideTipAndSelection;\n                  const tool = activeToolRef.current;\n\n                  if ((tool === 'strikethrough' || tool === 'underline') && content.text) {\n                    const colorByTool: Record<'strikethrough' | 'underline', string> = {\n                      strikethrough: strikethroughColorRef.current,\n                      underline: underlineColorRef.current,\n                    };\n                    const newHl: IAnnotation = {\n                      id: genId(),\n                      content,\n                      position,\n                      comment: { text: '', emoji: '' },\n                      type: tool,\n                      highlightColor: colorByTool[tool],\n                    };\n                    pendingAnnotationRef.current = { hl: newHl, hide: hideTipAndSelection };\n                    if (!isMouseDownRef.current) {\n                      commitPending();\n                      undoStackRef.current.push('highlight');\n                    }\n                    return null;\n                  }\n\n                  if (tool === 'rectangle') {\n                    const newHl: IAnnotation = {\n                      id: genId(),\n                      content,\n                      position,\n                      comment: { text: '', emoji: '' },\n                      type: 'area',\n                      highlightColor: rectangleColorRef.current,\n                      areaShape: areaShapeRef.current,\n                    };\n                    setAnnotations((prev) => [...prev, newHl]);\n                    undoStackRef.current.push('highlight');\n                    hideTipAndSelection();\n                    clearMouseSelection();\n                    return null;\n                  }\n\n                  hideTipAndSelection();\n                  return null;\n                }}\n                highlightTransform={(\n                  highlight,\n                  index,\n                  setTip,\n                  hideTip,\n                  viewportToScaled,\n                  screenshot,\n                  isScrolledTo,\n                ) => {\n                  const hl = highlight as IAnnotation & { position: { boundingRect: LTWHP; rects: LTWHP[] } };\n                  const bRect = hl.position.boundingRect as any;\n                  const isSelected = !!selectedItemId\n                    && selectedItemId.kind === 'annotation'\n                    && selectedItemId.id === hl.id;\n                  const outlineRadius = hl.type === 'area' && hl.areaShape === 'ellipse' ? '50%' : 0;\n                  // Selection chrome: a transparent click-catcher at boundingRect (only in\n                  // select mode), plus a dashed outline a few pixels around the annotation\n                  // when this one is currently selected. Sits above the annotation visuals\n                  // via zIndex; outline mirrors area-shape border-radius (ellipse vs rect).\n                  const chrome = (\n                    <>\n                      {activeTool === 'select' && (\n                        // No inline onClick/onPointerDown: PdfHighlighter renders its\n                        // highlights via ReactDOM.render into its own React tree, and\n                        // event handlers attached there sometimes fail to flush\n                        // setSelectedItemId across to the main React tree in React 16\n                        // (PdfHighlighter's own onPointerDown re-mounts the inner tree\n                        // mid-click). Instead, tag the click-catcher with data-annotation-id\n                        // and let a document-level capture-phase listener in the main\n                        // tree pick up the click.\n                        <div\n                          data-annotation-id={hl.id}\n                          style={{\n                            position: 'absolute',\n                            left: bRect.left,\n                            top: bRect.top,\n                            width: bRect.width,\n                            height: bRect.height,\n                            pointerEvents: 'auto',\n                            cursor: 'pointer',\n                            zIndex: 2,\n                          }}\n                        />\n                      )}\n                      {isSelected && (\n                        <div\n                          style={{\n                            position: 'absolute',\n                            left: bRect.left - 4,\n                            top: bRect.top - 4,\n                            width: bRect.width + 8,\n                            height: bRect.height + 8,\n                            border: '2px dashed #1976d2',\n                            borderRadius: outlineRadius,\n                            boxSizing: 'border-box',\n                            pointerEvents: 'none',\n                            zIndex: 3,\n                          }}\n                        />\n                      )}\n                    </>\n                  );\n\n                  if (hl.type === 'area') {\n                    const areaColor = hl.highlightColor || DEFAULT_RECTANGLE_COLOR;\n                    const left = bRect.left;\n                    const top = bRect.top;\n                    const width = bRect.width;\n                    const height = bRect.height;\n                    if (hl.areaShape === 'ellipse') {\n                      return (\n                        <React.Fragment key={hl.id}>\n                          <svg\n                            style={{\n                              position: 'absolute',\n                              left,\n                              top,\n                              width,\n                              height,\n                              overflow: 'visible',\n                              pointerEvents: 'none',\n                            }}\n                          >\n                            <ellipse\n                              cx={width / 2}\n                              cy={height / 2}\n                              rx={Math.max(0, width / 2 - 1.5)}\n                              ry={Math.max(0, height / 2 - 1.5)}\n                              fill='none'\n                              stroke={areaColor}\n                              strokeWidth={3}\n                            />\n                          </svg>\n                          {chrome}\n                        </React.Fragment>\n                      );\n                    }\n                    return (\n                      <React.Fragment key={hl.id}>\n                        <div\n                          style={{\n                            position: 'absolute',\n                            left,\n                            top,\n                            width,\n                            height,\n                            border: `3px solid ${areaColor}`,\n                            boxSizing: 'border-box',\n                            pointerEvents: 'none',\n                          }}\n                        />\n                        {chrome}\n                      </React.Fragment>\n                    );\n                  }\n\n                  if (hl.type === 'strikethrough' || hl.type === 'underline') {\n                    const lineColor = hl.highlightColor\n                      || (hl.type === 'strikethrough' ? DEFAULT_STRIKETHROUGH_COLOR : DEFAULT_UNDERLINE_COLOR);\n                    const isUnderline = hl.type === 'underline';\n                    return (\n                      <React.Fragment key={hl.id}>\n                        <div>\n                          {hl.position.rects.map((rect: any, i: number) => {\n                            const lineHeight = Math.max(2, rect.height * 0.06);\n                            const top = isUnderline\n                              ? rect.top + rect.height - lineHeight\n                              : rect.top + rect.height / 2 - lineHeight / 2;\n                            return (\n                              <div\n                                key={i}\n                                style={{\n                                  position: 'absolute',\n                                  left: rect.left,\n                                  top,\n                                  width: rect.width,\n                                  height: lineHeight,\n                                  backgroundColor: lineColor,\n                                  pointerEvents: 'none',\n                                }}\n                              />\n                            );\n                          })}\n                        </div>\n                        {chrome}\n                      </React.Fragment>\n                    );\n                  }\n\n                  // Every annotation the tools create is one of the types handled above.\n                  return <React.Fragment key={hl.id} />;\n                }}\n              />\n            )}\n          </PdfLoader>\n          {/*\n            key={pdfScale} forces OverlayLayer to fully unmount + remount in sync with the\n            PdfHighlighter remount. Without it, OverlayLayer's portals (which target page\n            elements created by pdfjs) try to clean up after pdfjs has already destroyed\n            the old pages — producing \"Failed to execute 'removeChild': not a child of\n            this node\" errors when the user changes zoom multiple times.\n          */}\n          <OverlayLayer\n            key={pdfScale}\n            overlays={overlays}\n            editingTextId={editingTextId}\n            setEditingTextId={setEditingTextId}\n            setOverlays={setOverlays}\n            pdfScale={pdfScale}\n            currentScale={committedZoom !== null ? committedZoom / 100 : 1}\n            isSelectionMode={activeTool === 'select'}\n            selectedOverlayId={\n              selectedItemId && selectedItemId.kind === 'overlay' ? selectedItemId.id : null\n            }\n            onSelectOverlay={(id) => setSelectedItemId({ kind: 'overlay', id })}\n          />\n          <DrawLayer\n            active={activeTool === 'draw'}\n            containerRef={viewerContainerRef}\n            color={drawColor}\n            strokeWidth={drawStrokeWidth}\n            onCommit={handleDrawCommit}\n          />\n          {(activeTool === 'strikethrough' || activeTool === 'underline') && selectionPreviewRects.length > 0 && (\n            <div\n              style={{\n                position: 'absolute',\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0,\n                pointerEvents: 'none',\n                overflow: 'hidden',\n                zIndex: 5,\n              }}\n            >\n              {selectionPreviewRects.map((r, i) => {\n                const lineH = Math.max(2, r.height * 0.06);\n                const top = activeTool === 'underline'\n                  ? r.top + r.height - lineH\n                  : r.top + r.height / 2 - lineH / 2;\n                return (\n                  <div\n                    key={i}\n                    style={{\n                      position: 'absolute',\n                      left: r.left,\n                      top,\n                      width: r.width,\n                      height: lineH,\n                      backgroundColor: activeTool === 'strikethrough' ? strikethroughColor : underlineColor,\n                    }}\n                  />\n                );\n              })}\n            </div>\n          )}\n        </div>\n        </div>\n      </div>\n      <Prompt when={hasUnsavedAnnotations} message={t('pdfEditorModal.unsavedShopDrawingPrompt')} />\n      <Dialog\n        open={confirmCloseOpen}\n        onClose={handleConfirmCancel}\n        classes={{ paper: classes.confirmDialogPaper }}\n      >\n        <div className={classes.confirmDialogContent}>\n          <IconButton\n            size='small'\n            className={classes.confirmCloseIcon}\n            onClick={handleConfirmCancel}\n          >\n            <CloseIcon />\n          </IconButton>\n          <Typography variant='body2' color='textPrimary' className={classes.confirmText}>\n            {t('pdfEditorModal.unsavedShopDrawingMessage')}\n          </Typography>\n          <Typography variant='body2' color='textPrimary' className={classes.confirmText}>\n            {t('pdfEditorModal.saveShopDrawingPrompt')}\n          </Typography>\n          <div className={classes.confirmActions}>\n            <Button color='primary' onClick={handleConfirmDontSave}>\n              {t('pdfEditorModal.dontSaveButton')}\n            </Button>\n            <Button\n              color='primary'\n              variant='outlined'\n              className={classes.confirmSaveButton}\n              onClick={handleConfirmSave}\n            >\n              {t('pdfEditorModal.saveButton')}\n            </Button>\n          </div>\n        </div>\n      </Dialog>\n    </Dialog>\n  );\n};\n\nexport default PDFEditorModal;\n","import * as React from 'react';\nimport {Input, InputAdornment} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\n\nfunction SearchField({\n    placeholder,\n    value,\n    onChange,\n}) {\n    return (\n        <Input\n            placeholder={placeholder}\n            onChange={onChange}\n            value={value}\n            endAdornment={\n                <InputAdornment position='end'>\n                    <SearchIcon fontSize='small' style={{ color: '#757575'}} />\n                </InputAdornment>\n            }\n        />\n    );\n}\n\nexport default SearchField;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {Number}    delay          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}   [noTrailing]   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset)\n * @param  {Function}  callback       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {Boolean}   [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @return {Function}  A new, throttled, function.\n */\nfunction throttle (delay, noTrailing, callback, debounceMode) {\n  /*\n   * After wrapper has stopped being called, this timeout ensures that\n   * `callback` is executed at the proper times in `throttle` and `end`\n   * debounce modes.\n   */\n  var timeoutID;\n  var cancelled = false; // Keep track of the last time `callback` was executed.\n\n  var lastExec = 0; // Function to clear existing timeout\n\n  function clearExistingTimeout() {\n    if (timeoutID) {\n      clearTimeout(timeoutID);\n    }\n  } // Function to cancel next exec\n\n\n  function cancel() {\n    clearExistingTimeout();\n    cancelled = true;\n  } // `noTrailing` defaults to falsy.\n\n\n  if (typeof noTrailing !== 'boolean') {\n    debounceMode = callback;\n    callback = noTrailing;\n    noTrailing = undefined;\n  }\n  /*\n   * The `wrapper` function encapsulates all of the throttling / debouncing\n   * functionality and when executed will limit the rate at which `callback`\n   * is executed.\n   */\n\n\n  function wrapper() {\n    var self = this;\n    var elapsed = Date.now() - lastExec;\n    var args = arguments;\n\n    if (cancelled) {\n      return;\n    } // Execute `callback` and update the `lastExec` timestamp.\n\n\n    function exec() {\n      lastExec = Date.now();\n      callback.apply(self, args);\n    }\n    /*\n     * If `debounceMode` is true (at begin) this is used to clear the flag\n     * to allow future `callback` executions.\n     */\n\n\n    function clear() {\n      timeoutID = undefined;\n    }\n\n    if (debounceMode && !timeoutID) {\n      /*\n       * Since `wrapper` is being called for the first time and\n       * `debounceMode` is true (at begin), execute `callback`.\n       */\n      exec();\n    }\n\n    clearExistingTimeout();\n\n    if (debounceMode === undefined && elapsed > delay) {\n      /*\n       * In throttle mode, if `delay` time has been exceeded, execute\n       * `callback`.\n       */\n      exec();\n    } else if (noTrailing !== true) {\n      /*\n       * In trailing throttle mode, since `delay` time has not been\n       * exceeded, schedule `callback` to execute `delay` ms after most\n       * recent execution.\n       *\n       * If `debounceMode` is true (at begin), schedule `clear` to execute\n       * after `delay` ms.\n       *\n       * If `debounceMode` is false (at end), schedule `callback` to\n       * execute after `delay` ms.\n       */\n      timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n    }\n  }\n\n  wrapper.cancel = cancel; // Return the wrapper function.\n\n  return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {Number}   delay         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {Boolean}  [atBegin]     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\n\nfunction debounce (delay, atBegin, callback) {\n  return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexport { throttle, debounce };\n","import React from 'react';\nimport {Button, Menu, MenuItem, Typography} from '@material-ui/core';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport Tooltip from '../Tooltip';\n\nfunction SpecMenu({ currentSpec, specs, onSelect }) {\n    const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n        setAnchorEl(event.currentTarget);\n    };\n\n    const handleSelect = (spec) => () => {\n        onSelect(spec);\n        handleClose();\n    };\n    const handleClose = () => {\n        setAnchorEl(null);\n    };\n\n    if (currentSpec === undefined || currentSpec === null) {\n        return null;\n    }\n    return (\n        <>\n            <Tooltip title={currentSpec.get('name')}>\n                <Button variant='outlined' color='primary' onClick={handleClick} endIcon={anchorEl ? <KeyboardArrowUpIcon color='primary' /> : <KeyboardArrowDownIcon color='primary' />}>\n                    <Typography color='primary' style={{ width: '200px', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', textAlign: 'center' }}>{currentSpec.get('name')}</Typography>\n                </Button>\n            </Tooltip>\n            <Menu\n                anchorEl={anchorEl}\n                open={Boolean(anchorEl)}\n                onClose={handleClose}\n            >\n                {\n                    specs.map((spec, index) => {\n                        return (\n                            <MenuItem key={index} onClick={handleSelect(spec)} selected={spec.get('name') === currentSpec.get('name')}>\n                                <Typography color='primary'>{spec.get('name')}</Typography>\n                            </MenuItem>\n                        );\n                    })\n                }\n            </Menu>\n        </>\n    );\n}\n\nexport default SpecMenu;","import React from 'react';\nimport {useDispatch} from 'react-redux';\nimport {MasterDrawerLoadSpecAction, MasterDrawerSelectSpecAction} from '../../modules/SpecModule/actions';\nimport {Draggable} from 'react-beautiful-dnd';\nimport {IconButton, TableCell, TableRow, Tooltip, Typography} from '@material-ui/core';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\nimport SpecMenu from './SpecMenu';\nimport {fromJS} from 'immutable';\n\nfunction Row({\n  project,\n  projectType, // 'master' | 'template'\n  isExpanded,\n  onToggleExpand,\n  children\n}) {\n    const name = project.getIn(['data', 'name']);\n    const currentSpec = project.get('currentSpec');\n    const projectId = project.getIn(['data', 'id']);\n    const dispatch = useDispatch();\n    const handleSelect = (spec) => {\n        if (project && spec) {\n            dispatch(new MasterDrawerSelectSpecAction({\n                projectId,\n                spec: fromJS({\n                    name: spec.get('name'),\n                    id: spec.get('id')\n                }),\n                type: projectType,\n            }));\n            if (isExpanded) {\n                dispatch(new MasterDrawerLoadSpecAction({\n                    projectId,\n                    specId: spec.get('id'),\n                    type: projectType,\n                }));\n            }\n        }\n    };\n    return (\n        <>\n            <TableRow>\n                <TableCell>\n                    {\n                        currentSpec ?\n                            <IconButton\n                                size='small'\n                                onClick={() => {\n                                    onToggleExpand(!isExpanded);\n                                }}\n                            >\n                                {isExpanded ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />}\n                            </IconButton>\n                            : null\n                    }\n                </TableCell>\n                <TableCell align='left' style={{ maxWidth: '400px', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n                    <Tooltip title={name}>\n                        <Typography color='primary' style={{ maxWidth: '400px', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{name}</Typography>\n                    </Tooltip>\n                </TableCell>\n                <TableCell align='left' style={{ maxWidth: 258 }}><SpecMenu currentSpec={project.get('currentSpec')} specs={project.getIn(['data', 'specs'])} onSelect={handleSelect}/></TableCell>\n            </TableRow>\n            {children}\n        </>\n    );\n}\n\nexport default Row;","import {\n    Checkbox,\n    CircularProgress,\n    Grid,\n    IconButton,\n    Link,\n    makeStyles,\n    Tooltip,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\nimport {Image} from '../../../index';\nimport React from 'react';\nimport clsx from 'clsx';\nimport {AtsSvgPushpinRounded} from '../../../AtsSvg';\nimport {Draggable, DraggableProvided, DraggableStateSnapshot} from 'react-beautiful-dnd';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport DrawingModel from '../../../../models/Drawing';\nimport {createDraggableMasterDrawingId} from '../../helpers';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport i18next from 'i18next';\nimport {useDrawerBusy} from '../DrawerBusyContext';\n\nconst useStyles = makeStyles((theme) => ({\n    drawingBoxStyle: {\n        width: `705px`,\n        minHeight: '112px',\n        backgroundColor: '#ffffff',\n        borderRadius: '8px',\n        borderColor: '#979797',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        padding: '8px',\n        display: 'flex',\n        justifyContent: 'space-between',\n        gap: '16px'\n    },\n    flexCenter: {\n        display: 'flex',\n        flexDirection: 'column',\n        justifyContent: 'center',\n        alignItems: 'center'\n    },\n    isDragging: {\n        backgroundColor: '#ffffff',\n        borderRadius: '8px',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        padding: '8px',\n        border: `2px solid ${theme.palette.primary.main}`,\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center',\n        minWidth: '705px',\n        minHeight: '56px'\n    }\n}));\n\n// The host page starts its copy in onDragEnd, which react-beautiful-dnd calls only once the drop animation\n// ends, and it lets another drawing be picked up during that animation. Skipping the animation starts the\n// copy, and disables dragging, as soon as the drawing is dropped.\nconst skipDropAnimation = (style: DraggableProvided['draggableProps']['style'], snapshot: DraggableStateSnapshot) =>\n    snapshot.isDropAnimating ? { ...style, transitionDuration: '0.001s' } : style;\n\nfunction Drawing({\n     drawing,\n     onPin,\n     onClickOriginalProjectName,\n     originalProjectName,\n     isUpdating,\n     checked,\n     onCheck,\n     index,\n     draggableId,\n     numberOfSelectedDrawings,\n     t,\n}: {\n    drawing: IMap<DrawingModel>,\n    onPin: (isPinned: boolean) => void,\n    originalProjectName?: string,\n    onClickOriginalProjectName?: () => void\n    isUpdating: boolean,\n    checked: boolean,\n    onCheck: (event: React.ChangeEvent<HTMLInputElement>) => void,\n    index: number,\n    draggableId: string,\n    numberOfSelectedDrawings: number,\n    t: i18next.TFunction\n}) {\n    const classes = useStyles();\n    const theme = useTheme();\n    const isDragDisabled = useDrawerBusy();\n    const drawingName = drawing.get('name');\n    const isPinned = drawing.get('isPinned');\n    const pinButtonTooltip = isPinned ? t('MasterAccessDrawer.unpinDrawingTooltip') : t('MasterAccessDrawer.pinDrawingTooltip');\n    const handlePin = () => {\n        onPin(!isPinned);\n    };\n    return (\n        <div\n            className={clsx({\n                [classes.drawingBoxStyle]: true,\n            })}\n        >\n            <div style={{ overflow: 'auto', flex: 1 }}>\n                <div style={{minHeight: '1rem', display: 'flex', justifyContent: 'space-between' }}>\n                    <div style={{ display: 'flex', width: originalProjectName ? '60%' : '100%' }}>\n                        <Checkbox\n                            size='small'\n                            color='primary'\n                            checked={checked}\n                            onChange={onCheck}\n                            style={{ padding: '0 12px 0 5px' }}\n                        />\n                        <Tooltip title={drawingName}>\n                            <Typography component='span' style={{ flex: 1, textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap' }}>{drawingName}</Typography>\n                        </Tooltip>\n                    </div>\n                    {originalProjectName ?\n                      <Tooltip title={originalProjectName}>\n                        <Link\n                            component='button'\n                            variant='body2'\n                            color='primary'\n                            style={{ width: '40%', textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', textAlign: 'right', paddingLeft: 8 }}\n                            onClick={onClickOriginalProjectName}\n                        >\n                            {originalProjectName}\n                        </Link>\n                      </Tooltip> : null\n                    }\n                </div>\n                <div style={{ display: 'flex', marginTop: 8 }}>\n                    <Draggable\n                        key={draggableId}\n                        draggableId={draggableId}\n                        index={index}\n                        disableInteractiveElementBlocking={true}\n                        isDragDisabled={isDragDisabled}\n                    >\n                        {\n                            // tslint:disable-next-line:no-shadowed-variable\n                            (provided, snapshot) => {\n                                return (\n                                    <div\n                                        ref={provided.innerRef}\n                                        className={clsx({\n                                            [classes.flexCenter]: !snapshot.isDragging,\n                                            [classes.isDragging]: snapshot.isDragging\n                                        })}\n                                        {...provided.draggableProps}\n                                        style={skipDropAnimation(provided.draggableProps.style, snapshot)}\n                                    >\n                                        <IconButton size='small' {...provided.dragHandleProps} disabled={isDragDisabled}>\n                                            <DragIndicatorIcon/>\n                                        </IconButton>\n                                        {snapshot.isDragging ? <>\n                                            <FileCopyIcon color='primary' />\n                                            <Typography>\n                                                { (numberOfSelectedDrawings && checked) ? `${numberOfSelectedDrawings} ${t('MasterAccessDrawer.drawings')}` : drawingName}\n                                            </Typography>\n                                        </> : null}\n                                    </div>\n                                );\n                            }\n                        }\n                    </Draggable>\n                    <div style={{flex: 1, overflowX: 'auto'}}>\n                        <Grid container={true} alignItems='center' wrap='nowrap'>\n                            {\n                                drawing.get('products').map((product, _index) => {\n                                    const title =\n                                        <span>{t('MasterAccessDrawer.manufacturerLabelTooltip')}: {product.get('brand')}<br/>{t('MasterAccessDrawer.productNumberLabelTooltip')}: {product.get('productNumberClean')}\n                                            <br/>{t('MasterAccessDrawer.categoryLabelTooltip')}: {product.get('categoryName')}\n                                        </span>;\n                                    return (\n                                        <Grid\n                                            item={true}\n                                            key={_index}\n                                            style={{ padding: '0 10px' }}\n                                        >\n                                            <Tooltip\n                                                title={title}\n                                                style={{whiteSpace: 'pre-line'}}\n                                            >\n                                                <span>\n                                                    <Image\n                                                        src={product.getIn(['file', 'images', 'main', 'fileId']) + `|resize:50,50` || ''}\n                                                        width='50px'\n                                                        aspectRatio={'100%'}\n                                                        fromService={true}\n                                                    />\n                                                </span>\n                                            </Tooltip>\n                                        </Grid>\n                                    );\n                                })\n                            }\n                        </Grid>\n                    </div>\n\n                <div className={classes.flexCenter}>\n                    {isUpdating ? <CircularProgress style={{ width: '24px', height: '24px', marginRight: '12px' }} /> : <Tooltip title={pinButtonTooltip} >\n                        <IconButton onClick={handlePin}>\n                            <AtsSvgPushpinRounded\n                                color={isPinned ? theme.palette.primary.main : 'lightgrey'}\n                            />\n                        </IconButton>\n                    </Tooltip>}\n                </div>\n                </div>\n            </div>\n        </div>\n    );\n}\nexport default Drawing;","import {Collapse, makeStyles, TableCell, TableRow, Typography} from '@material-ui/core';\nimport {Droppable} from 'react-beautiful-dnd';\nimport React from 'react';\nconst useStyles = makeStyles((theme) => ({\n    drawingDroppable: {\n        padding: '16px 32px',\n        display: 'flex',\n        flexDirection: 'column',\n        gap: '12px',\n        alignItems: 'center',\n        justifyContent: 'center'\n    },\n}));\nfunction CollapseTableRow({\n    open,\n    isLoading,\n    droppableId,\n    children\n}) {\n    const classes = useStyles();\n    return (\n        <TableRow style={{ position: 'relative' }}>\n            <TableCell colSpan={4} style={{ paddingBottom: 0, paddingTop: 0, backgroundColor: '#f5f5f5', }}>\n                <Collapse in={open} timeout='auto' unmountOnExit={true}>\n                    <Droppable droppableId={droppableId} isDropDisabled={true}>\n                        {\n                            (provided) => {\n                                return (\n                                    <div\n                                        ref={provided.innerRef}\n                                        {...provided.droppableProps}\n                                        className={classes.drawingDroppable}\n                                    >\n                                        {isLoading ? <Typography>Loading...</Typography> : children}\n                                        {provided.placeholder}\n                                    </div>\n                                );\n                            }\n                        }\n                    </Droppable>\n                </Collapse>\n            </TableCell>\n        </TableRow>\n    );\n}\n\nexport default CollapseTableRow;","import React from 'react';\nimport { Button, Tooltip } from '@material-ui/core';\nimport { useDrawerBusy } from './DrawerBusyContext';\n\n// Hide the floating bar once fewer than this many pixels of the parent remain visible\n// above it (i.e. the bar would sit within 100px of the parent's top). The re-show\n// threshold is higher to create a hysteresis band, so scroll jitter around the boundary\n// doesn't flicker the bar in and out.\nconst MIN_VISIBLE_PARENT_HEIGHT = 100;\nconst SHOW_HYSTERESIS = 40;\n\n// Reverse-sticky action bar: sticks to the bottom of the visible screen while the\n// parent's bottom is below the viewport, and drops to its natural position (just below\n// the parent) once the parent's bottom scrolls into view.\nfunction ImportSelectedDrawingsBar({ t, onImport }: { t: any, onImport?: () => void }) {\n    const isBusy = useDrawerBusy();\n    const wrapperRef = React.useRef<HTMLDivElement>(null);\n    const barRef = React.useRef<HTMLDivElement>(null);\n    // null -> natural position in flow; otherwise an overlay style (fixed) or { display: 'none' }.\n    const [overlayStyle, setOverlayStyle] = React.useState<React.CSSProperties | null>(null);\n    const [barHeight, setBarHeight] = React.useState<number>(0);\n    // Last measured bar height, kept in a ref so the scroll handler always reads the current\n    // value (the handler closure is created once). The state copy only drives the wrapper's\n    // reserved height. Using a stale height here is what made the bar flicker.\n    const barHeightRef = React.useRef<number>(0);\n    // Tracks whether the floating bar is currently hidden, for hysteresis between updates.\n    const hiddenRef = React.useRef<boolean>(false);\n    // Signature of the last applied overlay style, so we only re-render when it actually\n    // changes instead of on every scroll event. Starts matching the initial in-flow state.\n    const appliedSignatureRef = React.useRef<string>('flow');\n\n    React.useLayoutEffect(() => {\n        let frame = 0;\n        const compute = () => {\n            frame = 0;\n            const wrapper = wrapperRef.current;\n            const bar = barRef.current;\n            // Measure against the parent (the drawings list container): it keeps a stable,\n            // non-zero width and a meaningful top edge even when the bar detaches from flow.\n            const parent = wrapper && wrapper.parentElement;\n            if (!wrapper || !bar || !parent) {\n                return;\n            }\n            // While hidden, offsetHeight is 0 -> fall back to the last known height so the\n            // threshold math stays consistent between the shown and hidden states.\n            const measured = bar.offsetHeight;\n            if (measured && measured !== barHeightRef.current) {\n                barHeightRef.current = measured;\n                setBarHeight(measured);\n            }\n            const height = barHeightRef.current;\n            const rect = parent.getBoundingClientRect();\n            const viewportBottom = window.innerHeight;\n            let next: React.CSSProperties | null = null;\n            if (rect.bottom > viewportBottom) {\n                // Parent's bottom is below the visible screen -> pin to the bottom of the viewport.\n                const visibleAboveBar = (viewportBottom - height) - rect.top;\n                // Hysteresis: once hidden, only re-show after clearly past the threshold.\n                let hidden = hiddenRef.current;\n                if (visibleAboveBar < MIN_VISIBLE_PARENT_HEIGHT) {\n                    hidden = true;\n                } else if (visibleAboveBar > MIN_VISIBLE_PARENT_HEIGHT + SHOW_HYSTERESIS) {\n                    hidden = false;\n                }\n                hiddenRef.current = hidden;\n                next = hidden\n                    // Too little of the parent is visible above the bar -> hide it.\n                    ? { display: 'none' }\n                    : { position: 'fixed', bottom: 0, left: rect.left, width: rect.width, zIndex: 2 };\n            } else {\n                // Parent's bottom is visible -> sit at the natural position, just below the parent.\n                hiddenRef.current = false;\n                next = null;\n            }\n            // Only re-render when the resulting style actually changes; scroll fires constantly.\n            const signature = next === null ? 'flow' : JSON.stringify(next);\n            if (signature !== appliedSignatureRef.current) {\n                appliedSignatureRef.current = signature;\n                setOverlayStyle(next);\n            }\n        };\n        // Coalesce the constant stream of scroll events into one measurement per frame.\n        const update = () => {\n            if (!frame) {\n                frame = window.requestAnimationFrame(compute);\n            }\n        };\n        compute();\n        // Capture phase so scrolling inside the #scrollable container is also picked up.\n        window.addEventListener('scroll', update, true);\n        window.addEventListener('resize', update);\n        return () => {\n            if (frame) {\n                window.cancelAnimationFrame(frame);\n            }\n            window.removeEventListener('scroll', update, true);\n            window.removeEventListener('resize', update);\n        };\n    }, []);\n\n    return (\n        <div ref={wrapperRef} style={{ minHeight: barHeight, width: '100%' }}>\n            <div\n                ref={barRef}\n                style={{\n                    display: 'flex',\n                    justifyContent: 'center',\n                    justifyItems: 'center',\n                    padding: 12,\n                    backgroundColor: '#F5F5F5',\n                    boxSizing: 'border-box',\n                    width: '100%',\n                    ...(overlayStyle ?? {}),\n                }}\n            >\n                {/* a disabled button fires no events, so the tooltip needs a wrapper to anchor to */}\n                <Tooltip title={t('MasterAccessDrawer.importSelectedDrawingsTooltip')}>\n                    <span>\n                        <Button\n                            variant='contained'\n                            color='primary'\n                            disabled={isBusy}\n                            onClick={onImport}\n                        >\n                            {t('MasterAccessDrawer.importSelectedDrawings')}\n                        </Button>\n                    </span>\n                </Tooltip>\n            </div>\n        </div>\n    );\n}\n\nexport default ImportSelectedDrawingsBar;\n","import {\n    TableContainer,\n    Paper,\n    Table,\n    TableHead,\n    TableCell,\n    TableRow,\n    TableBody,\n    Typography,\n    Checkbox,\n    FormControlLabel, IconButton, makeStyles,\n} from '@material-ui/core';\nimport React from 'react';\nimport InfiniteScroll from 'react-infinite-scroll-component';\nimport {Draggable, Droppable} from 'react-beautiful-dnd';\nimport {\n    createDraggableIdForDragSelectedDrawing,\n    createDraggableMasterDrawingId,\n    createDroppableMasterDrawingId,\n} from '../../helpers';\nimport Row from '../../Row';\nimport Drawing from '../Drawing';\nimport CollapseTableRow from '../../CollapseTableRow';\nimport ImportSelectedDrawingsBar from '../ImportSelectedDrawingsBar';\nimport {useImportSelectedDrawings} from '../ImportSelectedDrawingsContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    MasterDrawerLoadSpecAction, MasterDrawerToggleExpandAction,\n    MasterDrawerUpdateDrawer, SelectMasterDrawerDrawingAction, SetMasterDrawerUpdatingAction,\n    TogglePinMasterDrawingAction,\n} from '../../../../modules/SpecModule/actions';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectMasterDrawerData} from '../../../../modules/SpecModule/selectors';\nimport {List} from 'immutable';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport { useAmplitudeData } from '../../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../../constants';\n\nconst useStyles = makeStyles((theme) => ({\n    isDragging: {\n        backgroundColor: '#ffffff',\n        borderRadius: '8px',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        padding: '8px',\n        border: `2px solid ${theme.palette.primary.main}`,\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center',\n        minWidth: '705px',\n        minHeight: '56px'\n    }\n}));\n\nfunction MasterTable({\n    projects,\n    InfiniteScrollProps,\n}) {\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const amplitudeData = useAmplitudeData();\n    const onImportSelectedDrawings = useImportSelectedDrawings();\n    const state = useSelector(makeSelectMasterDrawerData());\n    const drawingIdsUpdating = state.get('drawingIdsUpdating', List());\n    return (\n        <TableContainer id='scrollable' component={Paper}>\n            {\n                <InfiniteScroll\n                    {...InfiniteScrollProps}\n                    scrollableTarget='scrollable'\n                >\n                    <Table stickyHeader={true}>\n                        <TableHead>\n                            <TableRow>\n                                <TableCell />\n                                <TableCell align='left'>{t('MasterAccessDrawer.masterColumnLabel')}</TableCell>\n                                <TableCell align='left'>{t('MasterAccessDrawer.productGroupsColumnLabel')}</TableCell>\n                            </TableRow>\n                        </TableHead>\n                        <TableBody>\n                            {\n                                projects.map((project, index) => {\n                                    const projectId = project.getIn(['data', 'id']);\n                                    const projectTitle = project.getIn(['data', 'name']);\n                                    const isLoadingSpecData = project.get('isLoadingSpecData');\n                                    const currentSpec = project.get('currentSpec');\n                                    const currentSpecData = project.get('currentSpecData');\n                                    const isExpanded = project.get('isExpanded');\n                                    const selectedDrawingIds = currentSpec?.get('selectedDrawingIds') ?? List();\n                                    const hasSelectedDrawings = selectedDrawingIds.size > 0;\n                                    return (\n                                        <Row\n                                            key={index}\n                                            project={project}\n                                            projectType={'master'}\n                                            isExpanded={isExpanded}\n                                            onToggleExpand={(newValue) => {\n                                                dispatch(new MasterDrawerToggleExpandAction({\n                                                    projectId,\n                                                    value: newValue,\n                                                    type: 'master'\n                                                }));\n                                                const currentSpecId = currentSpec?.get('id');\n                                                const currentDataId = currentSpecData?.get('id');\n                                                if (currentSpecId && (!currentDataId || currentSpecId !== currentDataId)) {\n                                                    dispatch(new MasterDrawerLoadSpecAction({\n                                                        projectId: project.getIn(['data', 'id']),\n                                                        specId: currentSpecId,\n                                                        type: 'master',\n                                                    }));\n                                                }\n                                            }}\n                                        >\n                                            <CollapseTableRow\n                                                open={isExpanded}\n                                                isLoading={isLoadingSpecData}\n                                                droppableId={createDroppableMasterDrawingId(project,index)}\n                                            >\n                                                {\n                                                    currentSpecData?.get('drawings').size > 0 ? <div style={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>\n                                                        <FormControlLabel\n                                                            control={\n                                                                <Checkbox\n                                                                    color='primary'\n                                                                    checked={currentSpecData.get('drawings').every((drawing) => selectedDrawingIds.contains(drawing.get('id')))}\n                                                                    onChange={(event) => {\n                                                                        dispatch(new SelectMasterDrawerDrawingAction({\n                                                                            projectId,\n                                                                            drawingIds: currentSpecData.get('drawings').map((drawing) => drawing.get('id')),\n                                                                            type: 'master',\n                                                                            value: event.target.checked,\n                                                                        }));\n                                                                    }}\n                                                                />\n                                                            }\n                                                            label={<Typography>{t('MasterAccessDrawer.selectAllDrawings')}</Typography>}\n                                                        />\n                                                    </div> : null\n                                                }\n                                                {\n                                                    currentSpecData?.get('drawings').size > 0 ?\n                                                        <Droppable droppableId={'drawings-droppable-id'} isDropDisabled={true}>\n                                                            {\n                                                                (provided) => {\n                                                                    return (\n                                                                        <div ref={provided.innerRef} {...provided.droppableProps} style={{ display: 'flex', flexDirection: 'column', gap: '12px', }}>\n                                                                            {\n                                                                                currentSpecData.get('drawings').map((drawing, drawingIndex) => {\n                                                                                    const isSelected = selectedDrawingIds.contains(drawing.get('id'));\n                                                                                    return (\n                                                                                        <Drawing\n                                                                                            key={drawingIndex}\n                                                                                            drawing={drawing}\n                                                                                            index={drawingIndex}\n                                                                                            numberOfSelectedDrawings={selectedDrawingIds.size}\n                                                                                            t={t}\n                                                                                            draggableId={\n                                                                                              isSelected\n                                                                                                ? createDraggableIdForDragSelectedDrawing(projectId, currentSpecData.get('id'), selectedDrawingIds, 'Masters List', drawingIndex)\n                                                                                                : createDraggableMasterDrawingId(projectId, currentSpecData.get('id'), drawing.get('id'), 'Masters List', project.getIn(['data', 'name']))\n                                                                                            }\n                                                                                            isUpdating={drawingIdsUpdating.contains(drawing.get('id'))}\n                                                                                            checked={isSelected}\n                                                                                            onCheck={(event) => {\n                                                                                                dispatch(new SelectMasterDrawerDrawingAction({\n                                                                                                    projectId,\n                                                                                                    drawingIds: List([drawing.get('id')]),\n                                                                                                    value: (event as React.ChangeEvent<HTMLInputElement>).target.checked,\n                                                                                                    type: 'master',\n                                                                                                }));\n                                                                                            }}\n                                                                                            onPin={(newValue) => {\n                                                                                                dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                                    drawingId: drawing.get('id'),\n                                                                                                    value: true,\n                                                                                                }));\n                                                                                                dispatch(new TogglePinMasterDrawingAction({\n                                                                                                    specId: currentSpecData.get('id'),\n                                                                                                    drawingId: drawing.get('id'),\n                                                                                                    isPinned: newValue,\n                                                                                                    onSuccess: () => {\n                                                                                                        const trackedData = {\n                                                                                                            sourceType: 'Master',\n                                                                                                            sourceId: projectId,\n                                                                                                            sourceName: projectTitle,\n                                                                                                            drawingId: drawing.get('id'),\n                                                                                                            isPinned: newValue,\n                                                                                                        };\n                                                                                                        amplitude.logEvent(AMPLITUDE_EVENT.pinDrawing, amplitudeData(trackedData));\n                                                                                                        dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                                            drawingId: drawing.get('id'),\n                                                                                                            value: false,\n                                                                                                        }));\n                                                                                                        dispatch(new MasterDrawerUpdateDrawer({\n                                                                                                            projectId,\n                                                                                                            drawingId: drawing.get('id'),\n                                                                                                            drawing: drawing.set('isPinned', newValue),\n                                                                                                            type: 'master'\n                                                                                                        }));\n                                                                                                    }\n                                                                                                }));\n                                                                                            }}\n                                                                                        />\n                                                                                    );\n                                                                                })\n                                                                            }\n                                                                            {provided.placeholder}\n                                                                        </div>\n                                                                    );\n                                                                }\n                                                            }\n                                                        </Droppable>  : <Typography>{t('MasterAccessDrawer.noDrawings')}</Typography>\n                                                }\n                                                {\n                                                  hasSelectedDrawings ? <ImportSelectedDrawingsBar\n                                                    t={t}\n                                                    onImport={() => onImportSelectedDrawings(\n                                                      createDraggableIdForDragSelectedDrawing(projectId, currentSpecData.get('id'), selectedDrawingIds, 'Masters List')\n                                                    )}\n                                                  /> : null\n                                                }\n                                            </CollapseTableRow>\n                                        </Row>\n                                     );\n                                })\n                            }\n                        </TableBody>\n                    </Table>\n                </InfiniteScroll>\n            }\n        </TableContainer>\n    );\n}\n\n\nexport default MasterTable;","import {useCallback, useEffect, useRef} from 'react';\nimport {CircularProgress, Divider, LinearProgress, Typography, useTheme} from '@material-ui/core';\nimport * as React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport SearchField from '../SearchField';\nimport MasterTable from '../tables/MasterTable';\nimport _ from 'lodash';\nimport {GetMasterDrawerDataAction} from '../../../../modules/SpecModule/actions';\nimport {makeSelectMasterDrawerData} from '../../../../modules/SpecModule/selectors';\nimport {List} from 'immutable';\nimport {useTranslation} from 'react-i18next';\nimport {AtsSvgMaster} from '../../../AtsSvg';\nimport EmptyView from '../../../EmptyView';\nimport {makeSelectConfigAtsSvgProps} from '../../../../modules/AtsModule/selectors';\nimport {ReactComponent as LoadingImage} from '../../../../images/loadingCart.svg';\nimport NotFound from '../../../NotFound';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        height: '100%',\n        display: 'flex',\n        flexDirection: 'column'\n    },\n    searchFieldContainer: {\n        padding: theme.spacing(1.5),\n        display: 'flex',\n        justifyContent: 'flex-end',\n    },\n}));\nexport const LIMIT = 30;\nfunction MasterTab() {\n    const state = useSelector(makeSelectMasterDrawerData());\n    const masters = state.get('masters', List());\n    const hasNextPage = state.get('mastersHasNextPage');\n    const mastersLoadingStatus = state.get('mastersLoadingStatus');\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const [searchValue, setSearchValue] = React.useState<string>('');\n    const offset = useRef(0);\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const configAtsSvgProps = useSelector(makeSelectConfigAtsSvgProps());\n    const fetchData = ({\n        options,\n        filters,\n        withInfiniteScroll = false\n     }) => {\n        dispatch(new GetMasterDrawerDataAction({\n            options,\n            filters,\n            type: 'master',\n            withInfiniteScroll,\n        }));\n    };\n    const debouncedFetchData = useCallback(_.debounce(fetchData, 500), []);\n    const handleChange = (event: any) => {\n        setSearchValue(event.target.value);\n        debouncedFetchData({\n            options: {\n                limit: LIMIT,\n                offset: 0,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        name: {\n                            like: event.target.value,\n                        }\n                    }\n                ]\n            },\n        });\n        offset.current = 0;\n    };\n    let content = null;\n    if (mastersLoadingStatus.get('isLoading') && !mastersLoadingStatus.get('withInfiniteScroll')) {\n        content = <NotFound\n            svgIcon={<LoadingImage />}\n            firstRow={<LinearProgress color='secondary'/>}\n            secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n            paperContainer={true}\n        />;\n    } else if (masters.size === 0) {\n        content = <EmptyView\n            svg={<AtsSvgMaster color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary[900] }} {...configAtsSvgProps} />}\n            emptyviewSubtitle={t('MasterAccessDrawer.noMastersFound')}\n            emptyviewAlt={''}\n            emptyviewNotFound={''}\n        />;\n    } else {\n        content = <MasterTable\n            projects={masters}\n            InfiniteScrollProps={{\n                hasMore: hasNextPage,\n                next: () => {\n                    debouncedFetchData({\n                        options: {\n                            limit: LIMIT,\n                            offset: offset.current + LIMIT,\n                            orderBy: {\n                                createdDate: -1\n                            }\n                        },\n                        filters: {\n                            and: [\n                                {\n                                    name: {\n                                        like: searchValue,\n                                    }\n                                }\n                            ]\n                        },\n                        withInfiniteScroll: true\n                    });\n                    offset.current += LIMIT;\n                },\n                loader: <div style={{ height: '80px', display: 'flex', justifyContent: 'center', alignItems: 'center'}}><CircularProgress /></div>,\n                dataLength: masters.size,\n            }}\n        />;\n    }\n    return (\n        <>\n            <div className={classes.searchFieldContainer}>\n                <SearchField\n                    onChange={handleChange}\n                    value={searchValue}\n                    placeholder={t('MasterAccessDrawer.SearchMasters')}\n                />\n            </div>\n            <Divider />\n            {content}\n        </>\n    );\n}\n\n\nexport default MasterTab;","import {\n    TableContainer,\n    Paper,\n    Table,\n    TableHead,\n    TableCell,\n    TableRow,\n    TableBody,\n    Typography, makeStyles, FormControlLabel, Checkbox, IconButton,\n} from '@material-ui/core';\nimport React from 'react';\nimport InfiniteScroll from 'react-infinite-scroll-component';\nimport {\n    MasterDrawerLoadSpecAction,\n    MasterDrawerToggleExpandAction,\n    MasterDrawerUpdateDrawer, SelectMasterDrawerDrawingAction, SetMasterDrawerUpdatingAction,\n    TogglePinTemplateDrawingAction,\n} from '../../../../modules/SpecModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Draggable, Droppable} from 'react-beautiful-dnd';\nimport {\n    createDraggableIdForDragSelectedDrawing,\n    createDraggableTemplateDrawingId,\n    createDroppableTemplateDrawingId,\n} from '../../helpers';\nimport Drawing from '../Drawing';\nimport CollapseTableRow from '../../CollapseTableRow';\nimport ImportSelectedDrawingsBar from '../ImportSelectedDrawingsBar';\nimport {useImportSelectedDrawings} from '../ImportSelectedDrawingsContext';\nimport Row from '../../Row';\nimport {makeSelectMasterDrawerData} from '../../../../modules/SpecModule/selectors';\nimport {List} from 'immutable';\nimport { useTranslation } from 'react-i18next';\nimport { makeSelectIsAtsSpecTool } from '../../../../modules/AtsModule/selectors';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport { useAmplitudeData } from '../../../../hoc/withAmplitudeData';\nimport { AMPLITUDE_EVENT } from '../../../../constants';\n\nconst useStyles = makeStyles((theme) => ({\n    isDragging: {\n        backgroundColor: '#ffffff',\n        borderRadius: '8px',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        padding: '8px',\n        border: `2px solid ${theme.palette.primary.main}`,\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center',\n        minWidth: '705px',\n        minHeight: '56px'\n    }\n}));\n\nfunction TemplateTable({\n projects,\n InfiniteScrollProps,\n}) {\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const state = useSelector(makeSelectMasterDrawerData());\n    const { t } = useTranslation('translations');\n    const amplitudeData = useAmplitudeData();\n    const onImportSelectedDrawings = useImportSelectedDrawings();\n\n    const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n    const templateTranslationObject = isAtsSpecTool ? { firm: 'ATS', separator: ' ' } : { firm: '', separator: '' };\n\n    const drawingIdsUpdating = state.get('drawingIdsUpdating', List());\n    return (\n        <TableContainer id='scrollable' component={Paper}>\n            {\n                <InfiniteScroll\n                    {...InfiniteScrollProps}\n                    scrollableTarget='scrollable'\n                >\n                    <Table stickyHeader={true}>\n                        <TableHead>\n                            <TableRow>\n                                <TableCell />\n                                {/*<TableCell />*/}\n                                <TableCell align='left'>{t('MasterAccessDrawer.templateColumnLabel', templateTranslationObject)}</TableCell>\n                                <TableCell align='left'>{t('MasterAccessDrawer.productGroupsColumnLabel')}</TableCell>\n                            </TableRow>\n                        </TableHead>\n                        <TableBody>\n                            {\n                                projects.map((project, index) => {\n                                    const projectId = project.getIn(['data', 'id']);\n                                    const projectTitle = project.getIn(['data', 'name']);\n                                    const isLoadingSpecData = project.get('isLoadingSpecData');\n                                    const currentSpec = project.get('currentSpec');\n                                    const currentSpecData = project.get('currentSpecData');\n                                    const isExpanded = project.get('isExpanded');\n                                    const selectedDrawingIds = currentSpec?.get('selectedDrawingIds') ?? List();\n                                    const hasSelectedDrawings = selectedDrawingIds.size > 0;\n                                    return (\n                                        <Row\n                                            key={index}\n                                            project={project}\n                                            projectType='template'\n                                            isExpanded={isExpanded}\n                                            onToggleExpand={(newValue) => {\n                                                dispatch(new MasterDrawerToggleExpandAction({\n                                                    projectId,\n                                                    value: newValue,\n                                                    type: 'template'\n                                                }));\n                                                const currentSpecId = currentSpec?.get('id');\n                                                const currentDataId = currentSpecData?.get('id');\n                                                if (currentSpecId && (!currentDataId || currentSpecId !== currentDataId)) {\n                                                    dispatch(new MasterDrawerLoadSpecAction({\n                                                        projectId: project.getIn(['data', 'id']),\n                                                        specId: currentSpecId,\n                                                        type: 'template',\n                                                    }));\n                                                }\n                                            }}\n                                        >\n                                            <CollapseTableRow\n                                                open={isExpanded}\n                                                isLoading={isLoadingSpecData}\n                                                droppableId={createDroppableTemplateDrawingId(project,index)}\n                                            >\n                                                {\n                                                    currentSpecData?.get('drawings').size > 0 ? <div style={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>\n                                                        <FormControlLabel\n                                                            control={\n                                                                <Checkbox\n                                                                    color='primary'\n                                                                    checked={currentSpecData.get('drawings').every((drawing) => selectedDrawingIds.contains(drawing.get('id')))}\n                                                                    onChange={(event) => {\n                                                                        dispatch(new SelectMasterDrawerDrawingAction({\n                                                                            projectId,\n                                                                            drawingIds: currentSpecData.get('drawings').map((drawing) => drawing.get('id')),\n                                                                            type: 'template',\n                                                                            value: event.target.checked,\n                                                                        }));\n                                                                    }}\n                                                                />\n                                                            }\n                                                            label={<Typography>{t('MasterAccessDrawer.selectAllDrawings')}</Typography>}\n                                                        />\n                                                    </div> : null\n                                                }\n                                                {\n                                                    currentSpecData?.get('drawings')?.size ? <Droppable droppableId={'dummy-template-droppable-list'} isDropDisabled={true}>\n                                                        {\n                                                            (provided) => {\n                                                                return (\n                                                                    <div ref={provided.innerRef} {...provided.droppableProps} style={{ display: 'flex', flexDirection: 'column', gap: '12px', }}>\n                                                                        {\n                                                                            currentSpecData.get('drawings').map((drawing, drawingIndex) => {\n                                                                                const isSelected = selectedDrawingIds.contains(drawing.get('id'));\n                                                                                return (\n                                                                                    <Drawing\n                                                                                        key={drawingIndex}\n                                                                                        index={drawingIndex}\n                                                                                        numberOfSelectedDrawings={hasSelectedDrawings ? selectedDrawingIds.size : 0}\n                                                                                        t={t}\n                                                                                        draggableId={\n                                                                                          isSelected\n                                                                                            ? createDraggableIdForDragSelectedDrawing(projectId, currentSpecData.get('id'), selectedDrawingIds, 'Templates List', drawingIndex)\n                                                                                            : createDraggableTemplateDrawingId(project.getIn(['data', 'id']), currentSpecData.get('id'), drawing.get('id'), 'Templates List', project.getIn(['data', 'name']))\n                                                                                        }\n                                                                                        isUpdating={drawingIdsUpdating.contains(drawing.get('id'))}\n                                                                                        drawing={drawing}\n                                                                                        checked={isSelected}\n                                                                                        onCheck={(event) => {\n                                                                                            dispatch(new SelectMasterDrawerDrawingAction({\n                                                                                                projectId,\n                                                                                                drawingIds: List([drawing.get('id')]),\n                                                                                                value: (event as React.ChangeEvent<HTMLInputElement>).target.checked,\n                                                                                                type: 'template',\n                                                                                            }));\n                                                                                        }}\n                                                                                        onPin={(newValue) => {\n                                                                                            dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                                drawingId: drawing.get('id'),\n                                                                                                value: true,\n                                                                                            }));\n                                                                                            dispatch(new TogglePinTemplateDrawingAction({\n                                                                                                specId: currentSpecData.get('id'),\n                                                                                                drawingId: drawing.get('id'),\n                                                                                                isPinned: newValue,\n                                                                                                onSuccess: () => {\n                                                                                                    const trackedData = {\n                                                                                                        sourceType: 'Template',\n                                                                                                        sourceId: projectId,\n                                                                                                        sourceName: projectTitle,\n                                                                                                        drawingId: drawing.get('id'),\n                                                                                                        isPinned: newValue,\n                                                                                                    };\n                                                                                                    amplitude.logEvent(AMPLITUDE_EVENT.pinDrawing, amplitudeData(trackedData));\n                                                                                                    dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                                        drawingId: drawing.get('id'),\n                                                                                                        value: false,\n                                                                                                    }));\n                                                                                                    dispatch(new MasterDrawerUpdateDrawer({\n                                                                                                        projectId: project.getIn(['data', 'id']),\n                                                                                                        drawingId: drawing.get('id'),\n                                                                                                        drawing: drawing.set('isPinned', newValue),\n                                                                                                        type: 'template'\n                                                                                                    }));\n                                                                                                }\n                                                                                            }));\n                                                                                        }}\n                                                                                    />\n                                                                                );\n                                                                            })\n                                                                        }\n                                                                        {provided.placeholder}\n                                                                    </div>\n                                                                );\n                                                            }\n                                                        }\n                                                    </Droppable> : <Typography>{t('MasterAccessDrawer.noDrawings')}</Typography>\n                                                }\n                                                {\n                                                  hasSelectedDrawings ? <ImportSelectedDrawingsBar\n                                                    t={t}\n                                                    onImport={() => onImportSelectedDrawings(\n                                                      createDraggableIdForDragSelectedDrawing(projectId, currentSpecData.get('id'), selectedDrawingIds, 'Templates List')\n                                                    )}\n                                                  /> : null\n                                                }\n                                            </CollapseTableRow>\n                                        </Row>\n                                    );\n                                })\n                            }\n                        </TableBody>\n                    </Table>\n                </InfiniteScroll>\n            }\n        </TableContainer>\n    );\n}\n\nexport default TemplateTable;","import {useCallback, useEffect, useRef} from 'react';\nimport {\n    CircularProgress,\n    Divider,\n    FormControlLabel,\n    LinearProgress,\n    Switch,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport * as React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport SearchField from '../SearchField';\nimport TemplateTable from '../tables/TemplateTable';\nimport _ from 'lodash';\nimport {GetMasterDrawerDataAction} from '../../../../modules/SpecModule/actions';\nimport {makeSelectMasterDrawerData} from '../../../../modules/SpecModule/selectors';\nimport {List} from 'immutable';\nimport {useSpecContext} from '../../SpecContext';\nimport {useTranslation} from 'react-i18next';\nimport EmptyView from '../../../EmptyView';\nimport {AtsSvgMaster} from '../../../AtsSvg';\nimport {makeSelectConfigAtsSvgProps} from '../../../../modules/AtsModule/selectors';\nimport {ReactComponent as LoadingImage} from '../../../../images/loadingCart.svg';\nimport NotFound from '../../../NotFound';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        height: '100%',\n        display: 'flex',\n        flexDirection: 'column'\n    },\n    searchFieldContainer: {\n        padding: theme.spacing(1.5),\n        display: 'flex',\n        justifyContent: 'flex-end',\n    },\n}));\nexport const LIMIT = 30;\nexport const getBuildingTypeFilter = (spec) => {\n    const buildingClasses = spec?.getIn(['building', 'buildingClasses'], List()) ?? List();\n    return buildingClasses.map((buildingClass) => {\n        const filter = {\n            and: []\n        };\n        if (buildingClass.get('id') != null) {\n            filter.and.push({\n                buildingClassId: {\n                    eq: buildingClass.get('id'),\n                }\n            });\n        }\n        if (buildingClasses.get('buildingTypes') != null && buildingClasses.get('buildingTypes').size > 0) {\n            filter.and.push({\n                buildingTypeId: {\n                    in: buildingClass.get('buildingTypes')?.map((buildingType) => buildingType.get('id')) ?? List(),\n                }\n            });\n        }\n        return filter;\n    }).toArray();\n};\nfunction TemplateTab({\n    countryId,\n    switchState = false,\n    onSwitch,\n}: {\n    countryId?: number,\n    switchState?: boolean,\n    onSwitch?: (state: boolean) => void\n}) {\n    const spec = useSpecContext();\n    const isChildSpec = Boolean(spec?.get('projectId'));\n    const state = useSelector(makeSelectMasterDrawerData());\n    const templates = state.get('templates', List());\n    const hasNextPage = state.get('templatesHasNextPage');\n    const templatesLoadingStatus = state.get('templatesLoadingStatus');\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const [searchValue, setSearchValue] = React.useState<string>('');\n    const { t } = useTranslation('translations');\n    const theme = useTheme();\n    const configAtsSvgProps = useSelector(makeSelectConfigAtsSvgProps());\n    const fetchData = ({\n       options,\n       filters,\n       withInfiniteScroll = false\n    }) => {\n        dispatch(new GetMasterDrawerDataAction({\n            options,\n            filters,\n            type: 'template',\n            withInfiniteScroll,\n        }));\n    };\n    const debouncedFetchData = useCallback(_.debounce(fetchData, 500), []);\n    const handleChange = (event: any) => {\n        setSearchValue(event.target.value);\n        debouncedFetchData({\n            options: {\n                limit: LIMIT,\n                offset: 0,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        name: {\n                            like: event.target.value,\n                        }\n                    },\n                    ...switchState ? getBuildingTypeFilter(spec) : [],\n                    ...countryId ? [{\n                        countryId: {\n                            eq: countryId\n                        }\n                    }] : [],\n                ]\n            },\n        });\n    };\n    let content = null;\n    if (templatesLoadingStatus.get('isLoading') && !templatesLoadingStatus.get('withInfiniteScroll')) {\n        content = <NotFound\n            svgIcon={<LoadingImage />}\n            firstRow={<LinearProgress color='secondary'/>}\n            secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n            paperContainer={true}\n        />;\n    } else if (templates.size === 0) {\n        content = <EmptyView\n            svg={<AtsSvgMaster color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary[900] }} {...configAtsSvgProps} />}\n            emptyviewSubtitle={t('MasterAccessDrawer.noTemplatesFound')}\n            emptyviewAlt={''}\n            emptyviewNotFound={''}\n        />;\n    } else {\n        content = <TemplateTable\n            projects={templates}\n            InfiniteScrollProps={{\n                hasMore: hasNextPage,\n                next: () => {\n                    debouncedFetchData({\n                        options: {\n                            limit: LIMIT,\n                            offset: templates.size,\n                            orderBy: {\n                                createdDate: -1\n                            }\n                        },\n                        filters: {\n                            and: [\n                                {\n                                    name: {\n                                        like: searchValue,\n                                    }\n                                },\n                                ...switchState ? getBuildingTypeFilter(spec) : [],\n                                ...countryId ? [{\n                                    countryId: {\n                                        eq: countryId\n                                    }\n                                }] : [],\n                            ]\n                        },\n                        withInfiniteScroll: true\n                    });\n                },\n                loader: <div style={{ height: '80px', display: 'flex', justifyContent: 'center', alignItems: 'center'}}><CircularProgress /></div>,\n                dataLength: templates.size,\n            }}\n        />;\n    }\n    return (\n        <>\n            <div style={{ display: 'flex', justifyContent: isChildSpec ? 'space-between' : 'flex-end' }}>\n                {\n                    isChildSpec && (\n                        <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', marginLeft: '24px' }}>\n                            <FormControlLabel\n                                control={\n                                    <Switch\n                                        color='primary'\n                                        checked={switchState}\n                                        onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n                                            onSwitch?.(event.target.checked);\n                                            debouncedFetchData({\n                                                options: {\n                                                    limit: LIMIT,\n                                                    offset: 0,\n                                                    orderBy: {\n                                                        createdDate: -1\n                                                    }\n                                                },\n                                                filters: {\n                                                    and: [\n                                                        {\n                                                            name: {\n                                                                like: event.target.value,\n                                                            }\n                                                        },\n                                                        ...event.target.checked ? getBuildingTypeFilter(spec) : [],\n                                                        ...countryId ? [{\n                                                            countryId: {\n                                                                eq: countryId\n                                                            }\n                                                        }] : [],\n                                                    ]\n                                                },\n                                            });\n                                        }}\n                                    />\n                                }\n                                label={t('MasterAccessDrawer.BuildingType')}\n                            />\n                        </div>\n                    )\n                }\n                <div className={classes.searchFieldContainer}>\n                    <SearchField\n                        onChange={handleChange}\n                        value={searchValue}\n                        placeholder={t('MasterAccessDrawer.SearchTemplates')}\n                    />\n                </div>\n            </div>\n            <Divider />\n            {content}\n        </>\n    );\n}\n\n\nexport default TemplateTab;","import React, { createContext } from 'react';\n\ninterface ITabContextType {\n    tabValue: number;\n    setTabValue: (value: number) => void;\n}\n\nconst Context = createContext<ITabContextType>(undefined);\n\nfunction TabContext(props) {\n    return (\n        <Context.Provider {...props}>\n            {props.children}\n        </Context.Provider>\n    );\n}\n\nexport const useTabContext = () => {\n    if (!React.useContext(Context)) {\n        throw new Error('useTabContext must be used within a TabContext');\n    }\n    return React.useContext(Context);\n};\nexport default TabContext;","import SearchField from '../SearchField';\nimport * as React from 'react';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {\n    Checkbox,\n    CircularProgress,\n    Divider,\n    FormControlLabel,\n    LinearProgress,\n    TableBody,\n    Theme,\n    Typography,\n    useTheme\n} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useCallback, useEffect, useRef} from 'react';\nimport {\n    GetMasterDrawerDataAction,\n    GetPinnedDrawingAction,\n    MasterDrawerLoadSpecAction,\n    MasterDrawerSelectSpecAction,\n    MasterDrawerToggleExpandAction,\n    SelectPinnedDrawingAction,\n    SetMasterDrawerUpdatingAction,\n    TogglePinMasterDrawingAction,\n    TogglePinTemplateDrawingAction,\n} from '../../../../modules/SpecModule/actions';\nimport _ from 'lodash';\nimport {makeSelectMasterDrawerData} from '../../../../modules/SpecModule/selectors';\nimport {fromJS, List} from 'immutable';\nimport {Draggable, Droppable} from 'react-beautiful-dnd';\nimport {\n    createDraggableIdForDragAllSelectedPinnedDrawing,\n    createDraggableMasterDrawingId,\n    createDraggableTemplateDrawingId,\n} from '../../helpers';\nimport Drawing from '../Drawing';\nimport ImportSelectedDrawingsBar from '../ImportSelectedDrawingsBar';\nimport {useImportSelectedDrawings} from '../ImportSelectedDrawingsContext';\nimport InfiniteScroll from 'react-infinite-scroll-component';\nimport {LIMIT as MASTER_LIMIT} from './MasterTab';\nimport {useTabContext} from '../../TabContext';\nimport {useTranslation} from 'react-i18next';\nimport EmptyView from '../../../EmptyView';\nimport {ReactComponent as LoadingImage} from '../../../../images/loadingCart.svg';\nimport NotFound from '../../../NotFound';\nimport { useAmplitudeData } from '../../../../hoc/withAmplitudeData';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT } from '../../../../constants';\nimport {Spec} from '../../../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport DrawingType from '../../../../models/Drawing';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        height: '100%',\n        display: 'flex',\n        flexDirection: 'column'\n    },\n    searchFieldContainer: {\n        padding: theme.spacing(1.5),\n        display: 'flex',\n        justifyContent: 'flex-end',\n    },\n    drawingDroppable: {\n        padding: '16px 32px',\n        display: 'flex',\n        flexDirection: 'column',\n        gap: '12px',\n        alignItems: 'center',\n        justifyContent: 'center'\n    },\n    isDragging: {\n        backgroundColor: '#ffffff',\n        borderRadius: '8px',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        padding: '8px',\n        border: `2px solid ${theme.palette.primary.main}`,\n        display: 'flex',\n        flexDirection: 'row',\n        alignItems: 'center',\n        minWidth: '705px',\n        minHeight: '56px'\n    }\n}));\nexport const LIMIT = 10;\nfunction PinTab() {\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const amplitudeData = useAmplitudeData();\n    const onImportSelectedDrawings = useImportSelectedDrawings();\n    const { tabValue, setTabValue } = useTabContext();\n    const [searchValue, setSearchValue] = React.useState<string>('');\n    const state = useSelector(makeSelectMasterDrawerData());\n    const drawingIdsUpdating = state.get('drawingIdsUpdating', List());\n    const selectedPinnedDrawingIds = state.get('selectedPinnedDrawingIds', List());\n    const hasSelectedDrawings = selectedPinnedDrawingIds.size > 0;\n    const specs = state.get('specs', List());\n    const hasNextPage = state.get('specsHasNextPage');\n    const specsLoadingStatus = state.get('specsLoadingStatus');\n\n    const pinnedDrawings: List<{\n        specId: number,\n        specName: string,\n        projectId: number,\n        drawing: IMap<DrawingType>,\n        projectType: 'template' | 'master',\n        projectTitle: string\n    }> = specs.reduce((acc, spec) => {\n        const projectId = spec.get('projectId');\n        const projectTitle = spec.get('projectTitle');\n        const specId = spec.get('id');\n        const specName = spec.get('name');\n        let projectType = '';\n        if (spec.get('isMasterTemplate')) {\n            projectType = 'template';\n        }\n        if (spec.get('isMaster')) {\n            projectType = 'master';\n        }\n        if (projectType === '') {\n            throw new Error(`spec with specId ${specId} belongs to neither template nor master`);\n        }\n        const specDrawings = spec.get('drawings', List());\n        const pinnedSpecDrawings = specDrawings.filter(drawing => {\n            if (searchValue === '') {\n                return drawing.get('isPinned');\n            } else {\n                if (!drawing.get('name')) {\n                    return false;\n                }\n                return drawing.get('isPinned') && drawing.get('name').toLowerCase().includes(searchValue.toLowerCase());\n            }\n        });\n        return acc.concat(pinnedSpecDrawings.map((drawing) => ({\n            specId,\n            specName,\n            projectId,\n            drawing,\n            projectType,\n            projectTitle\n        })));\n    }, List());\n\n    const fetchData = ({\n           drawingName = '',\n           withInfiniteScroll = false\n    }) => {\n        dispatch(new GetPinnedDrawingAction({\n            options: {\n                limit: LIMIT,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        hasPinnedDrawing: {\n                            eq: true\n                        },\n                    },\n                    ...drawingName !== '' ? [{\n                        'drawing.name': {\n                            like: drawingName,\n                        }\n                    }] : []\n                ]\n            },\n            withInfiniteScroll,\n        }));\n    };\n    const debouncedFetchData = useCallback(_.debounce(fetchData, 500), []);\n    const handleChange = (event: any) => {\n        setSearchValue(event.target.value);\n        debouncedFetchData({\n            drawingName: event.target.value\n        });\n    };\n    useEffect(() => {\n        // initial fetch\n        fetchData({\n            drawingName: searchValue\n        });\n    }, []);\n\n    const InfiniteScrollProps = {\n        hasMore: hasNextPage,\n        next: () => {\n            debouncedFetchData({\n                drawingName: searchValue,\n                withInfiniteScroll: true\n            });\n        },\n        loader: <div style={{ height: '80px', display: 'flex', justifyContent: 'center', alignItems: 'center'}}><CircularProgress /></div>,\n        dataLength: specs.size,\n    };\n    let content = null;\n    if (specsLoadingStatus.get('isLoading') && !specsLoadingStatus.get('withInfiniteScroll')) {\n        content = <NotFound\n            svgIcon={<LoadingImage />}\n            firstRow={<LinearProgress color='secondary'/>}\n            secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n            paperContainer={true}\n        />;\n    } else if (pinnedDrawings.size === 0) {\n        content = <EmptyView\n            svg={null}\n            emptyviewSubtitle={t('MasterAccessDrawer.noDrawingsFound')}\n            emptyviewAlt={''}\n            emptyviewNotFound={''}\n        />;\n    } else {\n        content = <>\n            <Droppable droppableId='pinned-drawing-droppable' isDropDisabled={true}>\n                {(provided, snapshot) => {\n                    return (\n                        <div ref={provided.innerRef} {...provided.droppableProps} style={{ width: '100%', display: 'flex', justifyContent: 'space-between', padding: '16px 40px 0 40px' }}>\n                            <FormControlLabel\n                                control={\n                                    <Checkbox\n                                        color='primary'\n                                        checked={pinnedDrawings.every(({ projectId, specId, drawing }) =>\n                                            selectedPinnedDrawingIds.find(([pId, sId, dId]) => dId === drawing.get('id')) !== undefined\n                                        )}\n                                        onChange={(event) => {\n                                            dispatch(new SelectPinnedDrawingAction({\n                                                data: pinnedDrawings.toArray().map(({ projectId, specId, drawing, projectType }) => [projectId, specId, drawing.get('id'), projectType]),\n                                                value: event.target.checked,\n                                            }));\n                                        }}\n                                    />\n                                }\n                                label={<Typography>{t('MasterAccessDrawer.selectAllDrawings')}</Typography>}\n                            />\n                        {provided.placeholder}\n                        </div>\n                    );\n                }}\n            </Droppable>\n            <div id='scrollable' style={{ overflowX: 'auto'}}>\n                <InfiniteScroll\n                    {...InfiniteScrollProps}\n                    scrollableTarget={'scrollable'}\n                >\n                    <div>\n                        <Droppable droppableId={'Pinned'} isDropDisabled={true}>\n                            {\n                                (provided) => {\n                                    return (\n                                        <div ref={provided.innerRef} {...provided.droppableProps} className={classes.drawingDroppable}>\n                                            {\n                                                pinnedDrawings.map(({ projectId, specId, specName, drawing, projectType, projectTitle }, index) => {\n                                                    const draggableId = {\n                                                        master: createDraggableMasterDrawingId(projectId, specId, drawing.get('id'), 'Pinned Drawings List', projectTitle),\n                                                        template: createDraggableTemplateDrawingId(projectId, specId, drawing.get('id'), 'Pinned Drawings List', projectTitle)\n                                                    };\n                                                    const isSelected = selectedPinnedDrawingIds.find(([pId, sId, dId]) => dId === drawing.get('id')) !== undefined;\n                                                    return (\n                                                        <Drawing\n                                                            numberOfSelectedDrawings={selectedPinnedDrawingIds.size}\n                                                            t={t}\n                                                            draggableId={\n                                                              isSelected\n                                                                ? createDraggableIdForDragAllSelectedPinnedDrawing(selectedPinnedDrawingIds.toArray(), index)\n                                                                : draggableId[projectType]\n                                                            }\n                                                            index={index}\n                                                            key={index}\n                                                            drawing={drawing}\n                                                            originalProjectName={projectTitle}\n                                                            isUpdating={drawingIdsUpdating.contains(drawing.get('id'))}\n                                                            onCheck={(event) => {\n                                                                dispatch(new SelectPinnedDrawingAction({\n                                                                    data: [[projectId, specId, drawing.get('id'), projectType]],\n                                                                    value: event.target.checked\n                                                                }));\n                                                            }}\n                                                            checked={isSelected}\n                                                            onClickOriginalProjectName={() => {\n                                                                if (projectType === 'master') {\n                                                                    setTabValue(1);\n                                                                }\n                                                                if (projectType === 'template') {\n                                                                    setTabValue(2);\n                                                                }\n                                                                dispatch(new GetMasterDrawerDataAction({\n                                                                    options: {\n                                                                        limit: MASTER_LIMIT,\n                                                                        offset: 0,\n                                                                        orderBy: {\n                                                                            createdDate: -1\n                                                                        }\n                                                                    },\n                                                                    filters: {\n                                                                        and: [\n                                                                            {\n                                                                                id: {\n                                                                                    eq: projectId,\n                                                                                }\n                                                                            }\n                                                                        ]\n                                                                    },\n                                                                    type: projectType,\n                                                                    onSuccess: () => {\n                                                                        dispatch(new MasterDrawerToggleExpandAction({\n                                                                            projectId,\n                                                                            value: true,\n                                                                            type:  projectType\n                                                                        }));\n                                                                        dispatch(new MasterDrawerSelectSpecAction({\n                                                                            projectId,\n                                                                            type: projectType,\n                                                                            spec: fromJS({\n                                                                                id: specId,\n                                                                                name: specName\n                                                                            })\n                                                                        }));\n                                                                        dispatch(new MasterDrawerLoadSpecAction({\n                                                                            projectId,\n                                                                            specId,\n                                                                            type: projectType,\n                                                                        }));\n                                                                    }\n                                                                }));\n                                                            }}\n                                                            onPin={(newValue) => {\n                                                                if (projectType === 'master') {\n                                                                    dispatch(new SetMasterDrawerUpdatingAction({\n                                                                        drawingId: drawing.get('id'),\n                                                                        value: true,\n                                                                    }));\n                                                                    dispatch(new TogglePinMasterDrawingAction({\n                                                                        specId,\n                                                                        drawingId: drawing.get('id'),\n                                                                        isPinned: newValue,\n                                                                        onSuccess: () => {\n                                                                            const trackedData = {\n                                                                                sourceType: 'Master',\n                                                                                sourceId: projectId,\n                                                                                sourceName: projectTitle,\n                                                                                drawingId: drawing.get('id'),\n                                                                                isPinned: newValue,\n                                                                            };\n                                                                            amplitude.logEvent(AMPLITUDE_EVENT.pinDrawing, amplitudeData(trackedData));\n                                                                            dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                drawingId: drawing.get('id'),\n                                                                                value: false,\n                                                                            }));\n                                                                            fetchData({drawingName: searchValue});\n                                                                        }\n                                                                    }));\n                                                                }\n                                                                if (projectType === 'template') {\n                                                                    dispatch(new SetMasterDrawerUpdatingAction({\n                                                                        drawingId: drawing.get('id'),\n                                                                        value: true,\n                                                                    }));\n                                                                    dispatch(new TogglePinTemplateDrawingAction({\n                                                                        specId,\n                                                                        drawingId: drawing.get('id'),\n                                                                        isPinned: newValue,\n                                                                        onSuccess: () => {\n                                                                            const trackedData = {\n                                                                                sourceType: 'Template',\n                                                                                sourceId: projectId,\n                                                                                sourceName: projectTitle,\n                                                                                drawingId: drawing.get('id'),\n                                                                                isPinned: newValue,\n                                                                            };\n                                                                            amplitude.logEvent(AMPLITUDE_EVENT.pinDrawing, amplitudeData(trackedData));\n                                                                            dispatch(new SetMasterDrawerUpdatingAction({\n                                                                                drawingId: drawing.get('id'),\n                                                                                value: false,\n                                                                            }));\n                                                                            fetchData({drawingName: searchValue});\n                                                                        }\n                                                                    }));\n                                                                }\n                                                            }}\n                                                        />\n                                                    );\n                                                })\n                                            }\n                                            {provided.placeholder}\n                                            {\n                                                hasSelectedDrawings ? <ImportSelectedDrawingsBar\n                                                    t={t}\n                                                    onImport={() => onImportSelectedDrawings(\n                                                        createDraggableIdForDragAllSelectedPinnedDrawing(selectedPinnedDrawingIds.toArray())\n                                                    )}\n                                                /> : null\n                                            }\n                                        </div>\n                                    );\n                                }\n                            }\n                        </Droppable>\n                    </div>\n                </InfiniteScroll>\n            </div>\n        </>;\n    }\n    return (\n        <>\n            <div className={classes.searchFieldContainer}>\n                <SearchField\n                    onChange={handleChange}\n                    value={searchValue}\n                    placeholder={t('MasterAccessDrawer.SearchDrawings')}\n                />\n            </div>\n            <Divider />\n            {content}\n        </>\n    );\n}\nexport default PinTab;","import {Drawer, Grid, Tabs, Tab, Typography, Divider} from '@material-ui/core';\nimport * as React from 'react';\nimport {makeStyles} from '@material-ui/core/styles';\nimport MasterTab from './tabs/MasterTab';\nimport TemplateTab, {getBuildingTypeFilter} from './tabs/TemplateTab';\nimport PinTab from './tabs/PinTab';\nimport {GetMasterDrawerDataAction, GetPinnedDrawingAction} from '../../../modules/SpecModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport { LIMIT as MASTER_LIMIT } from './tabs/MasterTab';\nimport { LIMIT as TEMPLATE_LIMIT } from './tabs/TemplateTab';\nimport { LIMIT as PIN_LIMIT } from './tabs/PinTab';\nimport TabContext from '../TabContext';\nimport {useMemo} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport LayersIcon from '@material-ui/icons/Layers';\nimport {AtsSvgPushpinRounded} from '../../AtsSvg';\nimport {makeSelectIsAtsSpecTool} from '../../../modules/AtsModule/selectors';\nimport {useSpecContext} from '../SpecContext';\n\nexport const MASTER_QUICK_ACCESS_DRAWER_WIDTH = 800;\n\nconst useStyles = makeStyles((theme) => ({\n    header: {\n        position: 'sticky',\n        top: '0',\n        zIndex: theme.zIndex.drawer + 1,\n        paddingLeft: theme.spacing(3),\n        color: theme.palette.common.white,\n        background: `linear-gradient(225deg, ${theme.palette.secondary[700]} 0%, ${theme.palette.secondary[900]} 100%)`,\n    },\n    description: {\n        padding: `${theme.spacing(1.5)}px ${theme.spacing(3)}px`,\n    }\n}));\nfunction MasterAndTemplateDrawer({\n    tabValue: defaultTabValue = 1,\n    CloseButtonComponent,\n    countryId,\n    switchState,\n    onSwitch\n}: {\n    tabValue?: number;\n    CloseButtonComponent: React.ReactElement;\n    countryId?: number;\n    switchState?: boolean;\n    onSwitch?: (state: boolean) => void;\n}) {\n    const [tabValue, setTabValue] = React.useState(defaultTabValue);\n    const spec = useSpecContext();\n    const contextValue = useMemo(() => ({tabValue, setTabValue}), [tabValue, setTabValue]);\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const isAtsSpecTool = useSelector(makeSelectIsAtsSpecTool());\n\n    const templateTranslationObject = isAtsSpecTool ? { firm: 'ATS', separator: ' ' } : { firm: '', separator: '' };\n\n    const fetchInitialMasterData = () => {\n        dispatch(new GetMasterDrawerDataAction({\n            options: {\n                limit: MASTER_LIMIT,\n                offset: 0,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        name: {\n                            like: '',\n                        }\n                    }\n                ]\n            },\n            type: 'master',\n        }));\n    };\n    const fetchInitialTemplateData = () => {\n        dispatch(new GetMasterDrawerDataAction({\n            options: {\n                limit: TEMPLATE_LIMIT,\n                offset: 0,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        name: {\n                            like: '',\n                        }\n                    },\n                    ...switchState ? getBuildingTypeFilter(spec) : [],\n                    ...countryId ? [{\n                        countryId: {\n                            eq: countryId\n                        }\n                    }] : [],\n                ]\n            },\n            type: 'template',\n        }));\n    };\n    const fetchInitialPinData = () => {\n        dispatch(new GetPinnedDrawingAction({\n            options: {\n                limit: PIN_LIMIT,\n                orderBy: {\n                    createdDate: -1\n                }\n            },\n            filters: {\n                and: [\n                    {\n                        hasPinnedDrawing: {\n                            eq: true\n                        },\n                    },\n                ]\n            },\n        }));\n    };\n    const handleTabChange = (event, newValue) => {\n        if (newValue === 1) {\n            fetchInitialMasterData();\n        }\n        if (newValue === 2) {\n            fetchInitialTemplateData();\n        }\n        if (newValue === 3) {\n            fetchInitialPinData();\n        }\n        setTabValue(newValue);\n    };\n\n    React.useEffect(() => {\n        if (defaultTabValue === 1) {\n            fetchInitialMasterData();\n        }\n        if (defaultTabValue === 2) {\n            fetchInitialTemplateData();\n        }\n        if (defaultTabValue === 3) {\n            fetchInitialPinData();\n        }\n    }, [defaultTabValue]);\n    return (\n        <Drawer\n            variant='persistent'\n            anchor='right'\n            open={true}\n            PaperProps={{\n                style: {\n                    width: MASTER_QUICK_ACCESS_DRAWER_WIDTH\n                }\n            }}\n        >\n            <Grid\n                container={true}\n                alignItems='center'\n                justify='space-between'\n                className={classes.header}\n            >\n                <Typography\n                    variant='subtitle1'\n                    color='inherit'\n                >\n                    {t('MasterAccessDrawer.master_and_templates')}\n                </Typography>\n                {CloseButtonComponent}\n            </Grid>\n            <Typography variant='caption' className={classes.description}>\n                {t('MasterAccessDrawer.description')}\n            </Typography>\n            <Tabs\n                value={tabValue}\n                indicatorColor='primary'\n                textColor='primary'\n                onChange={handleTabChange}\n            >\n                <Tab\n                    label={\n                        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                            <LayersIcon />\n                            <Typography component='span' style={{ marginLeft: 8 }}>{t('MasterAccessDrawer.masters')}</Typography>\n                        </div>\n                     }\n                    value={1}\n                />\n                <Tab\n                    label={\n                        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                            <LayersIcon />\n                            <Typography component='span' style={{ marginLeft: 8 }}>{t('MasterAccessDrawer.templates', templateTranslationObject)}</Typography>\n                        </div>\n                    }\n                    value={2}\n                />\n                <Tab\n                    label={\n                        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n                            <AtsSvgPushpinRounded  color={'currentColor'}/>\n                            <Typography component='span' style={{ marginLeft: 8 }}>{t('MasterAccessDrawer.pinned_drawings')}</Typography>\n                        </div>\n                    }\n                    value={3}\n                />\n            </Tabs>\n            <Divider/>\n            <TabContext value={contextValue}>\n                <div style={{flex: 1, display: 'flex', flexDirection: 'column', overflow: 'auto'}}>\n                    {tabValue === 1 ? <MasterTab /> : null}\n                    {tabValue === 2 ? <TemplateTab countryId={countryId} onSwitch={onSwitch} switchState={switchState} /> : null}\n                    {tabValue === 3 ? <PinTab /> : null}\n                </div>\n            </TabContext>\n        </Drawer>\n    );\n}\n\nexport default MasterAndTemplateDrawer;","export default __webpack_public_path__ + \"static/media/revitDownloadSample.9acfcef8.jpg\";","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Paper,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport revitDownloadSample from '../../images/printPage/revitDownloadSample.jpg';\nimport revitSVG from '../../images/printPage/revitSVG.svg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\n\ninterface IRevitFilesBetaComponentProps {\n}\ninterface IRevitFilesBetaProps extends IRevitFilesBetaComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype RevitFilesProps = IRevitFilesBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\ninterface RevitFilesState {\n  added: boolean\n}\n\nconst sampleModalKey = 'revitFilesSampleModalKey';\nclass RevitFiles extends React.Component<RevitFilesProps, RevitFilesState> {\n  public state: RevitFilesState = {\n    added: false\n  }\n\n\n  public handleAdd = () => {\n    this.setState(prevState => ({\n      added: !prevState.added\n    }))\n  }\n\n  public render() {\n    const {\n      t,\n    } = this.props;\n    const {\n      added\n    } = this.state;\n\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('RevitPrint.revit')}\n          description={t('RevitPrint.description')}\n          src={revitSVG}\n          sampleModalKey={sampleModalKey}\n          sampleSrc={revitDownloadSample}\n          sampleAlt={t('RevitPrint.imageAlt')}\n        />\n      </PrintWrapper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n});\n\nexport default compose<React.ComponentClass<IRevitFilesBetaComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(RevitFiles);\n","export default __webpack_public_path__ + \"static/media/cad-sample.f5fa6fa5.jpg\";","import * as React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport autocadIcon from '../../images/printPage/autocad-icon.svg';\nimport cadSample from '../../images/printPage/cad-sample.jpg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\n\nconst sampleModalKey = 'autoCadFilesSampleModalKey';\n\nconst AutoCadFilesBeta: React.FC = () => {\n    const { t } = useTranslation('translations');\n    return (\n        <PrintWrapper>\n            <PrintHeader\n                title={t('AutoCadPrint.autoCad')}\n                description={t('AutoCadPrint.description')}\n                src={autocadIcon}\n                sampleModalKey={sampleModalKey}\n                sampleSrc={cadSample}\n                sampleAlt={t('AutoCadPrint.imageAlt')}\n            />\n        </PrintWrapper>\n    );\n};\n\nexport default AutoCadFilesBeta;\n","import * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Grid,\n  Paper,\n  Typography,\n  Link,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport i18next from 'i18next';\nimport { SPEC_PRINT_TYPE, AMPLITUDE_EVENT } from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport withSpecId, { WithSpecId } from '../../hoc/withSpecId';\nimport { Spec } from '../../models';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { connect } from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectSpec\n} from '../../modules/SpecModule/selectors';\nconst sampleModalKey = 'CSISampleModalKey';\nconst REDIRECT_URL = 'https://products-specpoint.mydeltek.com/products/company/2e5d5377-6aec-43d6-b62e-507c395e75fa?groupby=sectionNumber%20false%2CproductType%20false&sortby=sectionNumber%2CproductType%2Ctype%2ClastUpdated%20desc&ia=true&defaultFilter=true&df=\\'WATTS+Water+Technologies%3B+A+WATTS+Company\\'%|%\\'WATTS+Water+Technologies%3B+A+WATTS+Company\\'%2C\\'Ames+Fire+%26+Waterworks%3B+A+WATTS+Brand\\'%|%\\'Ames+Fire+%26+Waterworks%3B+A+WATTS+Brand\\'%2C\\'BLÜCHER%3B+A+WATTS+Bran';\ninterface IWattsCSIComponentProps {\n}\n\ntype WattsCSIProps = IWattsCSIComponentProps & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithAmplitudeData;\n\nclass WattsCSIBeta extends React.Component<WattsCSIProps> {\n\n  // public handleLinkOnClick = () => {\n  //   const printType = SPEC_PRINT_TYPE.wattsCSI;\n  //   const {\n  //     amplitudeData,\n  //     specId,\n  //     spec\n  //   } = this.props;\n  //   const isMaster = spec && spec.get('isMaster');\n  //\n  //   amplitude.logEvent(AMPLITUDE_EVENT.downloadSpec, amplitudeData({\n  //     printType,\n  //     specId,\n  //     isMaster,\n  //   }));\n  // }\n\n  public render() {\n    const {\n      classes,\n    } = this.props;\n\n    return (\n      <Paper\n        className={classes.root}\n      >\n        <Grid\n          className={classes.tabContent}\n          container={true}\n          direction='column'\n          wrap='nowrap'\n        >\n          <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n          >\n            <Grid>\n              <FontAwesomeIcon\n                className={classes.tabTitleIcon}\n                icon={['far', 'file-word']}\n              />\n            </Grid>\n            <Grid\n              className={classes.descriptionTitle}\n            >\n              <Typography>{i18next.t('translations:WattsCSIPrint.csi')}</Typography>\n            </Grid>\n          </Grid>\n          <Grid\n            className={classes.templateDescription}\n          >\n            <Typography>\n              <Link href={REDIRECT_URL} target='_blank'>{i18next.t('translations:WattsCSIPrint.clickToDownload')}</Link>\n            </Typography>\n\n          </Grid>\n        </Grid>\n      </Paper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    flexGrow: 1,\n    width: '100%',\n    backgroundColor: theme.palette.background.paper,\n  },\n  tabContent: {\n    padding: '40px',\n  },\n  tabTitleIcon: {\n    fontSize: 24,\n    paddingTop: 3,\n  },\n  descriptionTitle: {\n    fontSize: 20,\n    paddingLeft: 10\n  },\n  templateDescription: {\n    paddingTop: 20,\n  }\n});\n\n\nconst mapStateToProps = (originalState: any, originalOwnProps: any) => {\n  const specId = originalOwnProps.specId;\n\n  return createStructuredSelector({\n    spec: makeSelectSpec({specId}),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IWattsCSIComponentProps>>(\n  withSpecId({withSpec: true}),\n  withStyles(styles),\n  withAmplitudeData,\n  connect(mapStateToProps),\n)(WattsCSIBeta);","import React from 'react';\nimport {IconPrefix} from '@fortawesome/free-regular-svg-icons';\nimport {IconName} from '@fortawesome/fontawesome-svg-core';\nimport {useTranslation} from 'react-i18next';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {Theme, Typography} from '@material-ui/core';\nimport {iconMap} from './constant';\nimport {IFiles} from './types';\nimport {makeStyles} from '@material-ui/styles';\n\nconst useLoadingScreenStyles = makeStyles((theme: Theme) => ({\n    tabTitleIcon: {\n        fontSize: 24,\n        paddingTop: 3,\n    },\n    icon: {\n        width: 25\n    },\n    listItem: {\n        display: 'flex',\n        alignItems: 'center',\n        gap: '16px',\n        padding: theme.spacing(1),\n        overflow: 'hidden',\n        width: '40%'\n    }\n}));\n\nconst GridFileName = ({ file }: { file: IFiles }) => {\n    const src: [IconPrefix, IconName] | string = iconMap.get(file.type);\n    const classes = useLoadingScreenStyles();\n    const { t } = useTranslation('translations');\n    return (\n        <div className={classes.listItem}>\n            {Array.isArray(src) ? <FontAwesomeIcon className={classes.tabTitleIcon} icon={src}/> : <img src={src} className={classes.icon} alt={''}/>}\n            <Typography component='span' variant='caption' style={{ textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap' }}>\n                {file.name} - {t(`specPrintTypes.${file.type}`)}\n            </Typography>\n        </div>\n    );\n};\n\nexport default GridFileName;","import React, {ReactNode} from 'react';\nimport {CircularProgress, Grid, IconButton, Theme, Typography, useMediaQuery, useTheme} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport {AtsSvgDownload, AtsSvgPreparingDoc} from '../AtsSvg';\nimport CheckIcon from '@material-ui/icons/Check';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport {IFiles} from './types';\nimport {makeStyles} from '@material-ui/styles';\nimport CircularProgressWithLabel from './CircularProgressWithLabel';\nimport GridFileName from './GridFileName';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport useFileSrc from '../../utils/useFileSrc';\n\ninterface ILoadingScreenProps {\n    files: IFiles[];\n    actionButtons: ReactNode;\n}\n\nconst useLoadingScreenStyles = makeStyles((theme: Theme) => ({\n    gridContainer: {\n        width: '80%',\n        display: 'flex',\n        flex: '1 1 0',\n        flexDirection: 'column',\n        overflow: 'auto',\n        marginTop: '16px',\n        marginBottom: '64px',\n    },\n    status: {\n        display: 'flex',\n        alignItems: 'center',\n        gap: '8px',\n        width: '40%'\n    },\n    row: {\n        width: '100%',\n        overflow: 'hidden',\n        display: 'flex',\n        flexShrink: 0,\n        flexGrow: 0,\n        justifyContent: 'center',\n        alignItems: 'center',\n        gap: '24px'\n    },\n    svgContainer: {\n        display: 'flex',\n        justifyContent: 'center',\n        width: '100%',\n        '& svg': {\n            height: '100%'\n        }\n    }\n}));\n\nconst LoadingScreen: React.FC<ILoadingScreenProps> = ({\n  files,\n  actionButtons,\n}) => {\n    const classes = useLoadingScreenStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const total = files.length;\n    let succeed = 0;\n    let failed = 0;\n    let loading = 0;\n    files.forEach(({ status }) => {\n        if (status === 'succeed') {\n            succeed++;\n        }\n        if (status === 'failed') {\n            failed++;\n        }\n        if (status === 'loading') {\n            loading++;\n        }\n    });\n    const match = useMediaQuery('(min-height: 720px)');\n    const value = total > 0 ? Math.floor(((succeed + failed) / total) * 100) : 100;\n    return (\n        <Grid container={true} alignItems='center' direction='column' style={{ flex: 1 }}>\n            {\n                value === 100 ? <>\n                        {match\n                            ?   <div className={classes.svgContainer} style={{ height: `min(35%, 131px)`}}>\n                                    <AtsSvgDownload color={{ shadowColor: theme.palette.primary[200], backgroundColor: theme.palette.primary.main }} />\n                                </div>\n                            :   null\n                        }\n                        <Typography variant='h6' style={{ marginTop: theme.spacing(2) }}>{t('downloadView.documentReadyToGo')}</Typography>\n                        {actionButtons}\n                    </>\n                    : <>\n                        {match\n                            ?   <div className={classes.svgContainer} style={{ height: `min(35%, 350px)` }}>\n                                    <AtsSvgPreparingDoc color={theme.palette.primary.main} />\n                                </div>\n                            :   null\n                        }\n                        <Grid item={true} container={true} justify='center' alignItems='center'>\n                            {/* <CircularProgressWithLabel variant='determinate' value={value} size={62} /> */}\n                            <Typography variant='h6' style={{ marginLeft: '8px'}}>{t('downloadView.preparingDocuments')}</Typography>\n                        </Grid>\n                        <Typography>{t('downloadView.doNotLeave')}</Typography>\n                    </>\n            }\n            <div style={{ marginTop: '24px', display: 'flex', justifyContent: 'space-around', width: '100%', textAlign: 'center' }}>\n                <div>\n                    <Typography>{t('downloadView.completed')}</Typography>\n                    <Typography variant='h4'>{succeed}</Typography>\n                </div>\n                <div>\n                    <Typography>{t('downloadView.pending')}</Typography>\n                    <Typography variant='h4'>{loading}</Typography>\n                </div>\n                <div>\n                    <Typography>{t('downloadView.failed')}</Typography>\n                    <Typography variant='h4'>{failed}</Typography>\n                </div>\n            </div>\n            <div className={classes.gridContainer}>\n                {\n                    files.map((file, index) => {\n                        let statusElement = null;\n                        if (file.status === 'succeed') {\n                            statusElement = (\n                                <div className={classes.status}>\n                                    <CheckIcon color='primary' />\n                                    <Typography>{t('downloadView.completed')}</Typography>\n                                </div>\n                            );\n                        }\n                        if (file.status === 'failed') {\n                            statusElement = (\n                                <div className={classes.status}>\n                                    <ClearIcon color='primary' />\n                                    <Typography>{t('downloadView.failed')}</Typography>\n                                </div>\n                            );\n                        }\n                        if (file.status === 'loading') {\n                            statusElement = (\n                                <div className={classes.status}>\n                                    <CircularProgress color='primary' />\n                                    <Typography>{t('downloadView.pending')}</Typography>\n                                </div>\n                            );\n                        }\n                        return (\n                            <div key={index} className={classes.row}>\n                                <GridFileName key={file.fileId} file={file} />\n                                {statusElement}\n                                <DownloadIcon file={file} disabled={file.status !== 'succeed'} />\n                            </div>\n                        );\n                    })\n                }\n            </div>\n        </Grid>\n    );\n};\n\nconst DownloadIcon = ({ file, disabled } ) => {\n    const { fileSrc } = useFileSrc({ fileId: file.fileId });\n    return (\n        <IconButton\n            disabled={disabled}\n            onClick={() => {\n                const link = document.createElement('a');\n                link.href = fileSrc;\n                link.click();\n        }}>\n            <CloudDownloadIcon />\n        </IconButton>\n    );\n};\nexport default LoadingScreen;","import React, { useEffect } from 'react';\nimport {\n    Button,\n    Checkbox,\n    FormControlLabel,\n    Grid,\n    Typography,\n} from '@material-ui/core';\nimport {Theme} from '@material-ui/core/';\n// useTheme must come from core/styles: it falls back to the default theme when no ThemeProvider is present\nimport {useTheme} from '@material-ui/core/styles';\nimport {makeStyles} from '@material-ui/styles';\nimport clsx from 'clsx';\nimport SubmittalBeta from '../../components/SubmittalBeta';\nimport ProductBrochureBeta from '../ProductBrochureBeta';\nimport ScheduleBeta from '../ScheduleBeta';\nimport LongSpecBeta from '../LongSpecBeta';\nimport ShortSpecBeta from '../ShortSpecBeta';\nimport ManufacturerSpecSheetBeta from '../ManufacturerSpecSheetBeta';\nimport RevitFilesBeta from '../RevitFilesBeta';\nimport AutoCadFilesBeta from '../AutoCadFilesBeta';\nimport CSIFormattedSpecs from '../CSIFormattedSpecs';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {SPEC_PRINT_TYPE} from '../../constants';\nimport {makeSelectBulkDownloadStatus} from '../../modules/PrintModule/selectors';\nimport {List} from 'immutable';\nimport InfoIcon from '@material-ui/icons/Info';\nimport useFileSrc from '../../utils/useFileSrc';\nimport {Tooltip} from '../index';\nimport BobrickCSIMasterSpecBeta from '../BobrickCSIMasterSpecBeta';\nimport {change} from 'redux-form';\nimport BobrickPlanningGuideBeta from '../BobrickPlanningGuideBeta';\nimport WattsCSIBeta from '../WattsCSIBeta';\nimport LochinvarSubmittal from '../../components/LochinvarSubmittal';\nimport {useTranslation} from 'react-i18next';\nimport { CancelBulkSpecCronJobAction } from '../../modules/PrintModule/actions';\nimport LoadingScreen from './LoadingScreen';\nimport {\n    BORBRICK_CSI_MASTER_SPECS,\n    BORBRICK_PLANNING_GUIDE,\n    DOWNLOAD_GROUPS,\n    WATTS_CSI_MASTER_SPEC\n} from './constant';\nimport {FORM_BACKED_FORMATS, getFormatChecked, getFormatPartiallyChecked, isSelectableFormat} from './selection';\nimport QuotePrintFormat from '../QuotePrintFormat';\ninterface IController {\n    open: boolean;\n}\nconst Controller: React.FC<IController> = ({ open, children }) => {\n    return (\n        <div style={{ display: open ? 'block' : 'none' }}>\n            {children}\n        </div>\n    );\n};\nconst useStyles = makeStyles((theme: Theme) => ({\n    container: {\n        padding: theme.spacing(3, 3, 0 ,3),\n        flex: 1,\n        overflowX: 'auto',\n    },\n    titleContainer: {\n        marginBottom: theme.spacing(2),\n    },\n    subtitle: {\n        marginBottom: theme.spacing(2),\n    },\n    checkbox: {\n        padding: theme.spacing(0, 3, 0, 1),\n        width: 'fit-content'\n    },\n    groupHeader: {\n        padding: theme.spacing(0, 3, 0, 1),\n        marginTop: theme.spacing(1),\n        marginLeft: 0,\n        marginRight: 0,\n        width: '100%',\n        borderTop: `1px solid ${theme.palette.divider}`,\n    },\n    groupChildRow: {\n        paddingLeft: theme.spacing(3),\n    },\n    formatSelectButton: {\n        width: '100%',\n        justifyContent: 'flex-start',\n        borderRadius: 0,\n        textTransform: 'none',\n        paddingTop: 2,\n        paddingBottom: 2,\n    },\n    activeStyle: {\n        backgroundColor: 'rgba(0, 0, 0, 0.04)',\n        textDecoration: 'none',\n        borderRight: `5px solid ${theme.palette.primary.main}`\n    }\n}));\n\nfunction DownloadView({\n    hash,\n    title,\n    formats,\n    setFormats,\n    data,\n    actions\n}) {\n    const dispatch = useDispatch();\n    const classes = useStyles();\n    const theme = useTheme();\n    const { t } = useTranslation('translations');\n    const getRowChecked = (format) => getFormatChecked(format, data);\n    const getRowPartiallyChecked = (format) => getFormatPartiallyChecked(format, data);\n    const getTriState = (items) => {\n        const selectableItems = items.filter(isSelectableFormat);\n        const checkedCount = selectableItems.filter(getRowChecked).length;\n        const hasPartiallyCheckedRow = selectableItems.some(getRowPartiallyChecked);\n        const checked = selectableItems.length > 0 && checkedCount === selectableItems.length;\n        return { checked, indeterminate: !checked && (checkedCount > 0 || hasPartiallyCheckedRow) };\n    };\n    const { checked: areAllFormatsSelected, indeterminate: isSelectAllIndeterminate } = getTriState(formats);\n    const setSelectionForKeys = (keys: string[], checked: boolean) => {\n        keys.forEach((key) => {\n            const formBacked = FORM_BACKED_FORMATS[key];\n            if (formBacked) {\n                formBacked.fields.forEach((field) => dispatch(change(formBacked.formName, field, checked)));\n            }\n        });\n        setFormats(formats.map((format) => {\n            if (!keys.includes(format.key) || !isSelectableFormat(format) || FORM_BACKED_FORMATS[format.key]) {\n                return format;\n            }\n            return {\n                ...format,\n                selected: checked,\n            };\n        }));\n    };\n    const setActiveFormat = (key: string) => {\n        setFormats(formats.map((format) => ({\n            ...format,\n            isActive: format.key === key,\n        })));\n    };\n    // MUI v4 does not apply color='primary' to the indeterminate state, and stylesheet\n    // overrides are unreliable in this app's styling setup — hence the inline color\n    const renderHeaderCheckbox = (indeterminate: boolean) => (\n        <Checkbox color='primary' indeterminate={indeterminate} style={indeterminate ? { color: theme.palette.primary.main } : undefined} />\n    );\n    const renderFormatRow = (format) => {\n        const isRowPartiallyChecked = getRowPartiallyChecked(format);\n        return (\n            <Button\n                key={format.key}\n                className={clsx(classes.formatSelectButton, classes.groupChildRow, format.isActive && classes.activeStyle)}\n                onClick={() => setActiveFormat(format.key)}\n            >\n                {\n                    isSelectableFormat(format) && <Checkbox\n                        checked={getRowChecked(format)}\n                        indeterminate={isRowPartiallyChecked}\n                        color='primary'\n                        style={isRowPartiallyChecked ? { color: theme.palette.primary.main } : undefined}\n                        onClick={(event) => {\n                            event.stopPropagation();\n                        }}\n                        onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n                            setSelectionForKeys([format.key], event.target.checked);\n                        }}\n                    />\n                }\n                <Typography component='span' variant='body1'>\n                    {format.label}\n                </Typography>\n            </Button>\n        );\n    };\n    const activeFormat = formats.find((format) => format.isActive);\n    const selectBulkDownloadStatus = useSelector(makeSelectBulkDownloadStatus(hash)) ?? List();\n    const { fileSrc } = useFileSrc({\n        fileId: selectBulkDownloadStatus.get('zipFileId'),\n    });\n    const additionalFormats = formats.filter((format) => format.isAdditionalFormat);\n    const { checked: areAllAdditionalSelected, indeterminate: isAdditionalIndeterminate } = getTriState(additionalFormats);\n    const additionalDocumentsLabel = (\n        <Typography component='span' variant='body1' color='textPrimary' style={{ display: 'flex', alignItems: 'center', gap: '4px', fontWeight: 700 }}>\n            {t('downloadView.additionalDocuments')}\n            <Tooltip title={t('downloadView.additionalDocumentsTooltip')}>\n                <InfoIcon fontSize='small' onClick={(event) => event.preventDefault()} />\n            </Tooltip>\n        </Typography>\n    );\n\n    useEffect(() => {\n        return () => {\n            dispatch(new CancelBulkSpecCronJobAction());\n        };\n    }, []);\n\n    const actionButtons = (\n        <Grid container={true} justify='center' wrap='nowrap' style={{ marginTop: 24, gap: 24 }}>\n            {actions}\n            <Button\n                color='primary'\n                variant='contained'\n                href={fileSrc}\n                disabled={!Boolean(fileSrc)}\n            >\n                {t('downloadView.downloadAllFiles')}\n            </Button>\n        </Grid>\n    );\n\n    return (\n        <>\n            <Grid container={true} className={classes.container} direction='column'>\n                {\n                    selectBulkDownloadStatus.get('jobs')?.size ? <LoadingScreen files={selectBulkDownloadStatus.get('jobs').toJS()} actionButtons={actionButtons} /> : <>\n                    <Grid item={true} className={classes.subtitle}>\n                        <Typography variant='h6'>{t('downloadView.printFormats')}</Typography>\n                        <Typography variant='caption'>{t('downloadView.subtitle')}</Typography>\n                    </Grid>\n                    <Grid container={true} item={true} wrap='nowrap'>\n                        <Grid container={true} item={true} style={{ flex: '0 0 max-content', borderRight: '1px solid lightgrey' }} direction='column'>\n                        <FormControlLabel\n                            control={renderHeaderCheckbox(isSelectAllIndeterminate)}\n                            label={t('downloadView.selectAll')}\n                            className={classes.checkbox}\n                            checked={areAllFormatsSelected}\n                            onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n                                setSelectionForKeys(formats.map((format) => format.key), event.target.checked);\n                            }}\n                        />\n                            {\n                                DOWNLOAD_GROUPS.map((group) => {\n                                    const groupFormats = formats.filter((format) => format.group === group.key);\n                                    if (!groupFormats.length) {\n                                        return null;\n                                    }\n                                    const { checked: isGroupChecked, indeterminate: isGroupIndeterminate } = getTriState(groupFormats);\n                                    return (\n                                        <React.Fragment key={group.key}>\n                                            <FormControlLabel\n                                                control={renderHeaderCheckbox(isGroupIndeterminate)}\n                                                label={\n                                                    <Typography component='span' variant='body1' color='textPrimary' style={{ fontWeight: 700 }}>\n                                                        {t(group.labelKey)}\n                                                    </Typography>\n                                                }\n                                                className={classes.groupHeader}\n                                                checked={isGroupChecked}\n                                                onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n                                                    setSelectionForKeys(groupFormats.map((format) => format.key), event.target.checked);\n                                                }}\n                                            />\n                                            {groupFormats.map(renderFormatRow)}\n                                        </React.Fragment>\n                                    );\n                                })\n                            }\n                            {\n                                additionalFormats.length ? (\n                                    <>\n                                        {\n                                            additionalFormats.some(isSelectableFormat) ? (\n                                                <FormControlLabel\n                                                    control={renderHeaderCheckbox(isAdditionalIndeterminate)}\n                                                    label={additionalDocumentsLabel}\n                                                    className={classes.groupHeader}\n                                                    checked={areAllAdditionalSelected}\n                                                    onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n                                                        setSelectionForKeys(additionalFormats.map((format) => format.key), event.target.checked);\n                                                    }}\n                                                />\n                                            ) : (\n                                                <div className={classes.groupHeader} style={{ padding: '6px 24px 6px 8px' }}>\n                                                    {additionalDocumentsLabel}\n                                                </div>\n                                            )\n                                        }\n                                        {additionalFormats.map(renderFormatRow)}\n                                    </>\n                                ) : null\n                            }\n                        </Grid>\n                        <Grid item={true} style={{ flex: 1, padding: '0 24px' }}>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.lochinvarSubmittal}>\n                                <LochinvarSubmittal />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.submittal}>\n                                <SubmittalBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.productBrochure}>\n                             <ProductBrochureBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.schedule}>\n                              <ScheduleBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.longSpec}>\n                              <LongSpecBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.shortSpec}>\n                              <ShortSpecBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.manufacturerSpecSheet}>\n                              <ManufacturerSpecSheetBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.revit}>\n                              <RevitFilesBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.autoCad}>\n                              <AutoCadFilesBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.csi}>\n                                <CSIFormattedSpecs />\n                            </Controller>\n                            <Controller open={activeFormat.key === BORBRICK_CSI_MASTER_SPECS}>\n                              <BobrickCSIMasterSpecBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === BORBRICK_PLANNING_GUIDE}>\n                              <BobrickPlanningGuideBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === WATTS_CSI_MASTER_SPEC}>\n                                <WattsCSIBeta />\n                            </Controller>\n                            <Controller open={activeFormat.key === SPEC_PRINT_TYPE.projectQuoteNuAir}>\n                                <QuotePrintFormat />\n                            </Controller>\n                        </Grid>\n                    </Grid>\n                    </>\n                }\n            </Grid>\n        </>\n    );\n}\n\n\nexport default DownloadView;","import * as React from 'react';\nimport {\n    Card,\n    CardContent,\n    Grid,\n    Theme,\n    Tooltip,\n    Typography,\n    WithStyles\n} from '@material-ui/core';\nimport {StyleRules, withStyles} from '@material-ui/styles';\nimport {IConfig, IMap} from 'ats-utils/src';\nimport {Product} from '../../../models';\nimport {List} from 'immutable';\nimport {connect, DispatchProp} from 'react-redux';\nimport {compose} from 'redux';\nimport {WithTranslation, withTranslation} from 'react-i18next';\nimport {createStructuredSelector} from 'reselect';\nimport {withAtsApi} from '../../../contexts';\nimport {IWithAtsApi} from '../../../contexts/AtsApiContext';\nimport {makeSelectAtsApiState} from '../../../modules/ApplicationModule/selectors';\nimport {makeSelectConfig} from '../../../modules/AtsModule/selectors';\nimport withAmplitudeData, {WithAmplitudeData} from '../../../hoc/withAmplitudeData';\nimport Image from '../../../components/Image';\n\ninterface IProductsContainerComponentProps {\n    products: List<IMap<Product>>;\n}\n\ninterface IProductsContainerProps extends IProductsContainerComponentProps {\n    config: IMap<IConfig>;\n}\n\ntype ProductsContainerProps = IProductsContainerProps & IWithAtsApi & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp & WithAmplitudeData;\n\nconst ProductsContainerBase = ({ products = List(), classes,}: ProductsContainerProps) => {\n    return (\n        <>\n            <div className={classes.productsContainer}>\n                { products.size ?\n                    <Grid container={true} wrap='nowrap'>\n                        {products.map((product, i) => {\n                            return (\n                                <div key={i} style={{display: 'flex'}}>\n                                    <Card classes={{root: classes.cardContainer}}>\n                                        <CardContent className={classes.cardContent}>\n                                            <Grid container={true} alignItems='center' spacing={1} wrap='nowrap'>\n                                                <Grid item={true}>\n                                                    <Image\n                                                        src={product.getIn(['file', 'images', 'main', 'fileId']) + `|resize:70,70` || ''}\n                                                        width='70px'\n                                                        aspectRatio={'100%'}\n                                                        fromService={true}\n                                                    />\n                                                </Grid>\n                                                <Grid item={true} style={{ overflow: 'auto' }}>\n                                                    <Tooltip title={product.get('brand')} placement='top-start'>\n                                                        <Typography variant='body1' color='textPrimary' noWrap={true}>{product.get('brand')}</Typography>\n                                                    </Tooltip>\n                                                    <Tooltip title={product.get('productNumber')} placement='top-start'>\n                                                        <Typography variant='body1' noWrap={true}>{product.get('productNumber')}</Typography>\n                                                    </Tooltip>\n                                                    <Tooltip title={product.get('categoryName')} placement='top-start'>\n                                                        <Typography variant='body1' noWrap={true}>{product.get('categoryName')}</Typography>\n                                                    </Tooltip>\n                                                </Grid>\n                                            </Grid>\n                                        </CardContent>\n                                    </Card>\n                                </div>\n                            );\n                        })}\n                    </Grid> : null }\n            </div>\n        </>\n    );\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n    productsContainer: {\n        margin: theme.spacing(1.5, 0, 1),\n        overflow: 'auto'\n    },\n    productCard: {\n        margin: theme.spacing(),\n        width: 290\n    },\n    cardContainer: {\n        margin: theme.spacing(1),\n        border: '0.5px solid rgba(0,0,0,0.12)',\n        padding: theme.spacing(1, 1, 0),\n        display: 'flex'\n    },\n    cardContent: {\n        position: 'relative',\n        width: 290,\n        padding: theme.spacing(3, 0),\n        // paddingBottom: `0px !important`\n    },\n    divider: {\n        margin: theme.spacing(2, 0, 0)\n    },\n    alternativeContainer: {\n        padding: theme.spacing(2, 0, 1)\n    }\n});\n\nconst mapStateToProps = (state, props) => {\n    return {\n        ...createStructuredSelector({\n            atsApiIdentity: makeSelectAtsApiState('identity'),\n            config: makeSelectConfig(),\n        })(state)\n    };\n};\n\nconst ProductsContainer = compose<React.FC<IProductsContainerComponentProps>>(\n    connect(mapStateToProps, dispatch => ({ dispatch })),\n    withAtsApi(),\n    withAmplitudeData,\n    withTranslation('translations'),\n    withStyles(styles)\n)(ProductsContainerBase);\n\nexport default ProductsContainer;","import React from 'react';\nimport {Card, CardContent, Checkbox, Grid, TextField, Theme, WithStyles, withStyles} from '@material-ui/core';\nimport {compose} from 'redux';\nimport {WithTranslation, withTranslation} from 'react-i18next';\nimport {connect, DispatchProp} from 'react-redux';\nimport ProductsContainer from './ProductsContainer';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Drawing as DrawingType} from '../../../models';\ninterface IComponentProps {\n    drawing: IMap<DrawingType>;\n    selected: boolean;\n    onCheck?: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n}\ninterface IProps {\n\n}\ninterface IState {\n}\ntype Props = IComponentProps & IProps & WithStyles<keyof ReturnType<typeof styles>> & DispatchProp & WithTranslation;\nconst styles = (theme: Theme) => ({\n    drawingCardContainer: {\n        width: '100%'\n    },\n    autoWidth: {\n        width: 'auto'\n    },\n    iconButton: {\n        color: theme.palette.text.secondary\n    },\n});\nclass Drawing extends React.Component<Props, IState> {\n    public render() {\n        const {\n            t,\n            onCheck,\n            classes,\n            drawing,\n            selected\n        } = this.props;\n        const name = drawing.get('name');\n        const note = drawing.get('note');\n        return (\n            <Card variant='outlined' className={classes.drawingCardContainer}>\n                <CardContent>\n                    <Grid container={true} justify='space-between' wrap='nowrap'>\n                        <Grid container={true} spacing={1}>\n                            <Grid item={true} container={true} alignItems='flex-end' className={classes.autoWidth} style={{ padding: 0 }}>\n                                <Checkbox color='primary' style={{ padding: 4 }} onChange={onCheck} checked={selected}/>\n                            </Grid>\n                            <Grid item={true}>\n                                <TextField disabled={true} value={name} label={`${t('masterDrawing.drawingLabelLabel')}:`} size='small' />\n                            </Grid>\n                        </Grid>\n                    </Grid>\n                    <ProductsContainer products={drawing.get('products')} />\n                    <Grid item={true}>\n                        <TextField fullWidth={true} disabled={true} value={note} label={`${t('masterDrawing.drawingNoteLabel')}:`} />\n                    </Grid>\n                </CardContent>\n            </Card>\n        );\n    }\n}\nconst mapStateToProps = () => ({\n});\nconst mapDispatchToProps = (dispatch) => ({\n});\nexport default compose<React.ComponentType<IComponentProps>>(\n    withStyles(styles),\n    withTranslation('translations'),\n    connect(mapStateToProps, mapDispatchToProps)\n)(Drawing);","import React, {useState} from 'react';\nimport {\n    Box, Button,\n    Card,\n    CardContent, CardHeader,\n    Checkbox,\n    FormControlLabel,\n    Paper,\n    Theme,\n    Modal as MuiModal\n} from '@material-ui/core';\nimport {useTranslation} from 'react-i18next';\nimport Drawing from './Drawing';\nimport {List, Map} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Drawing as DrawingType} from '../../../models';\nimport {makeStyles} from '@material-ui/styles';\n\ninterface IProps {\n    open: boolean;\n    title: string;\n    initialDrawingIds: number[];\n    drawings: List<IMap<DrawingType>>;\n    onCancel: () => void;\n    onSave: (selectedDrawingIds: number[]) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    card: {\n        position: 'absolute',\n        top: '50%',\n        left: '50%',\n        transform: 'translate(-50%, -50%)',\n        width: '80vw',\n        maxHeight: '90%',\n        display: 'flex',\n        flexDirection: 'column'\n    },\n    checkbox: {\n        padding: theme.spacing(0, 2)\n    },\n    drawingsContainer: {\n        overflowY: 'auto'\n    },\n    drawingCardContainer: {\n        width: '100%'\n    },\n    actionButton: {\n        marginRight: theme.spacing(6)\n    }\n}));\n\nconst checkIsSelectingAll = (drawings, selectedDrawingIds) => {\n    let isSelectingAll = true;\n    const drawingIds = drawings.map((drawing) => drawing.get('id'));\n    for (const drawingId of drawingIds) {\n        if (!selectedDrawingIds.includes(drawingId)) {\n            isSelectingAll = false;\n        }\n    }\n    return isSelectingAll;\n};\n\nfunction Modal({\n    open,\n    title,\n    drawings,\n    initialDrawingIds,\n    onCancel,\n    onSave,\n }: IProps) {\n    const classes = useStyles();\n    const {t} = useTranslation('translations');\n    const [selectedDrawingIds, setSelectedDrawingIds] = useState(initialDrawingIds);\n    const selectAll = () => {\n        const drawingIds = drawings.map((drawing) => drawing.get('id')).toArray();\n        setSelectedDrawingIds(drawingIds);\n    };\n    const deselectAll = () => {\n        setSelectedDrawingIds([]);\n    };\n    const toggleSelectAll = (e, toggled) => {\n        if (toggled) {\n            selectAll();\n        } else {\n            deselectAll();\n        }\n    };\n    const onClose = () => {\n        onCancel();\n    };\n    return (\n        <MuiModal\n            disableEscapeKeyDown={true}\n            open={open}\n            onClose={onClose}\n            keepMounted={false}\n        >\n            <Card className={classes.card}>\n                <CardHeader\n                    title={title}\n                    titleTypographyProps={{variant: 'h6'}}\n                    action={\n                        <Box>\n                            <Button color={'primary'} className={classes.actionButton} onClick={onCancel}>{t('formStepping.createMasterFromTemplateSteps.cancel')}</Button>\n                            <Button color={'primary'} variant='contained' className={classes.actionButton} onClick={() => onSave(selectedDrawingIds)}>{t('formStepping.createMasterFromTemplateSteps.save')}</Button>\n                        </Box>\n                    }\n                />\n                <FormControlLabel\n                    control={<Checkbox color='primary' />}\n                    label={t('masterSpecView.selectAllCheckBox')}\n                    className={classes.checkbox}\n                    checked={checkIsSelectingAll(drawings, selectedDrawingIds)}\n                    onChange={toggleSelectAll}\n                />\n                <CardContent className={classes.drawingsContainer}>\n                    <Paper elevation={0}>\n                        {\n                            drawings.count() === 0 ? (\n                                <Card elevation={0} variant='outlined' className={classes.drawingCardContainer}>\n                                    <CardContent>\n                                        {t('formStepping.createMasterFromTemplateSteps.noDrawingMessage')}\n                                    </CardContent>\n                                </Card>\n                            ) : drawings.map((drawing) => {\n                                const drawingId = drawing.get('id');\n                                return (\n                                    <Drawing\n                                        onCheck={(e,value) => {\n                                            if (value) {\n                                                // add\n                                                if (!selectedDrawingIds.includes(drawingId)) {\n                                                    setSelectedDrawingIds((prev) => [...prev, drawingId]);\n                                                }\n                                            } else {\n                                                // remove\n                                                setSelectedDrawingIds((prevIds) => prevIds.filter((id) => id !== drawingId));\n                                            }\n                                        }}\n                                        selected={selectedDrawingIds.includes(drawingId)}\n                                        key={drawingId}\n                                        drawing={drawing}\n                                    />\n                                );\n                            })\n                        }\n                    </Paper>\n                </CardContent>\n            </Card>\n        </MuiModal>\n    );\n}\n\nexport default Modal;","import React, {MouseEventHandler, useReducer, useState} from 'react';\nimport {\n    Button,\n    Checkbox, CircularProgress,\n    Menu,\n    MenuItem, Radio,\n    Table,\n    TableBody,\n    TableCell,\n    TableContainer,\n    TableHead,\n    TableRow\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport {makeSelectSearchedTemplates} from '../../../modules/ProjectModule/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport {KeyboardArrowRight} from '@material-ui/icons';\nimport {Theme} from '@material-ui/core/';\nimport {makeSelectSearchingGetTemplateSpecById, makeSelectTemplateSpecs} from '../../../modules/SpecModule/selectors';\nimport {GetTemplateSpecsAction} from '../../../modules/SpecModule/actions';\nimport Modal from './Modal';\nimport {List} from 'immutable';\nimport { makeSelectTemplateTranslationObject } from '../../../modules/AtsModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    table: {\n        minWidth: 600,\n    },\n}));\nconst selectTemplates = makeSelectSearchedTemplates();\nconst selectTemplateSpecs = makeSelectTemplateSpecs();\nconst selectSearchingGetTemplateSpecById = makeSelectSearchingGetTemplateSpecById();\nconst OPEN_MENU = 'OPEN_MENU';\nconst CLOSE_MENU = 'CLOSE_MENU';\nconst menuStateReducer = (state, action) => {\n    switch (action.type) {\n        case OPEN_MENU: {\n            return {\n                menuId: action.payload.menuId,\n                anchorEl: action.payload.anchorEl,\n            };\n        }\n        case CLOSE_MENU: {\n            return {\n                menuId: null,\n                anchorEl: null\n            };\n        }\n        default: return state;\n    }\n};\nconst isAllDrawingInTemplateSelected = (templateSpecs, template, selectedDrawings) => {\n    if (selectedDrawings.length === 0) {\n        return false;\n    }\n    const specs = template.get('specs');\n    let result = true;\n    for (const spec of specs) {\n        const specId = spec.get('id');\n        const specDrawings = templateSpecs.getIn([specId, 'drawings']);\n        if (specDrawings === undefined) {\n            return false;\n        }\n        specDrawings.forEach((specDrawing) => {\n            if (!selectedDrawings.find(({ id, templateId, specId: _specId }) => id === specDrawing.get('id') && templateId === template.get('id') && specId === _specId)) {\n                result = false;\n            }\n        });\n    }\n    return result;\n};\nconst isAtLeastOneDrawingInTemplateSelected = (templateSpecs, template, selectedDrawings) => {\n    const specs = template.get('specs');\n    let result = false;\n    for (const spec of specs) {\n        const specId = spec.get('id');\n        const specDrawings = templateSpecs.getIn([specId, 'drawings']);\n        if (specDrawings === undefined) {\n            return false;\n        } //  the template specs has not loaded yet\n        specDrawings.forEach((specDrawing) => {\n            if (selectedDrawings.find(({ id, templateId, specId: _specId }) => id === specDrawing.get('id') && templateId === template.get('id') && specId === _specId)) {\n                result = true;\n            }\n        });\n    }\n    return result;\n};\nfunction TemplateSelectionTable({\n    updateWholeTemplateSelected,\n    selectedDrawings,\n    setSelectedDrawings,\n}) {\n    const dispatch = useDispatch();\n    const classes = useStyles();\n    const templates = useSelector(selectTemplates);\n    const templateSpecs = useSelector(selectTemplateSpecs);\n    const searchingTemplateSpecById = useSelector(selectSearchingGetTemplateSpecById);\n    const templateTranslationObject = useSelector(makeSelectTemplateTranslationObject());\n    const { t } = useTranslation('translations');\n    const [modalId, setModalId] = useState(null);\n    const [menuState, dispatchMenuState] = useReducer(menuStateReducer, {\n        menuId: null,\n        anchorEl: null\n    });\n    const open = Boolean(menuState.anchorEl);\n    const handleClose = (e, reason) => {\n        dispatchMenuState({\n            type: CLOSE_MENU\n        });\n    };\n    const handleClickMenuItem = (specId) => () => {\n        // open modal\n        setModalId(specId);\n    };\n    const getMenuItems = (template) => {\n        const templateId = template.get('id');\n        const templateName = template.get('name');\n        const specs = template.get('specs');\n        return specs ? specs.map((spec) => {\n                    const specTitle = spec.get('name');\n                    const specId = spec.get('id');\n                    const specDrawings = templateSpecs.getIn([specId, 'drawings'], List());\n                    // spec is selected if one of its drawings are selected\n                    // const checked = selectedDrawings.find((drawing) => drawing.templateId === templateId && drawing.specId === specId);\n                    let checked = false;\n                    for (const specDrawing of specDrawings) {\n                        if (selectedDrawings.find((selectedDrawing) => selectedDrawing.templateId === templateId && selectedDrawing.specId === specId && selectedDrawing.id === specDrawing.get('id'))) {\n                            checked = true;\n                            break;\n                        }\n                    }\n                    const specDrawingIds = specDrawings?.map((specDrawing) => specDrawing.get('id')).toArray() ?? [];\n                    const handleSelect = (e) => {\n                        e.stopPropagation();\n                        const isToggleOn = e.target.checked;\n                        if (isToggleOn) {\n                            // select all the drawings under this spec\n                            const newSelectedDrawings = [...selectedDrawings].filter((drawing) => drawing.templateId === templateId); // if the use is working on a new template, remove drawings selected in the previous template\n                            specDrawingIds.forEach((id) => {\n                                const newDrawing = {id, specId, templateId};\n                                newSelectedDrawings.push(newDrawing);\n                            });\n                            setSelectedDrawings(newSelectedDrawings);\n                            updateWholeTemplateSelected(isAllDrawingInTemplateSelected(templateSpecs, template, selectedDrawings));\n                        } else {\n                            // unselect all the drawings under this spec\n                            const newSelectedDrawings = [...selectedDrawings].filter((drawing) => drawing.templateId !== templateId || drawing.specId !== specId); // unselect all the drawings in the spec\n                            setSelectedDrawings(newSelectedDrawings);\n                            updateWholeTemplateSelected(false);\n                        }\n                    };\n                    return (\n                        <MItem key={specId} onClick={handleClickMenuItem(specId)} title={specTitle} handleSelect={handleSelect} checked={checked}>\n                            {\n                                modalId === specId ?  <Modal\n                                    title={templateName}\n                                    open={modalId === specId}\n                                    onCancel={() => {\n                                        setModalId(null);\n                                    }}\n                                    initialDrawingIds={selectedDrawings.filter((drawing) => drawing.specId === specId).map((drawing) => drawing.id)}\n                                    drawings={specDrawings}\n                                    onSave={(selectedDrawingIds) => {\n                                        const newSelectedDrawings = [...selectedDrawings]\n                                            .filter((drawing) => drawing.templateId === templateId && drawing.specId !== specId) // unselect all the drawings in the spec\n                                            .concat(selectedDrawingIds.map((id) => ({\n                                                id,\n                                                specId,\n                                                templateId,\n                                            })));\n                                        setSelectedDrawings(newSelectedDrawings);\n                                        updateWholeTemplateSelected(isAllDrawingInTemplateSelected(templateSpecs, template, newSelectedDrawings));\n                                        // close the modal\n                                        setModalId(null);\n                                    }}\n                                /> : null\n                            }\n                        </MItem>\n                    );\n                }) : [];\n    };\n    const activeTemplate = templates.find((template) => template.get('id') === menuState.menuId);\n    const disableClearSelectionButton = selectedDrawings.length === 0;\n\n    return (\n        <TableContainer style={{ position: 'relative' }}>\n            {searchingTemplateSpecById ? <Loading /> : null}\n            <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n                <Button\n                    color='primary'\n                    style={{ marginRight: 0, marginLeft: 'auto'}}\n                    onClick={() => setSelectedDrawings([])}\n                    disabled={disableClearSelectionButton}\n                >\n                    {t('formStepping.createMasterFromTemplateSteps.clear')}\n                </Button>\n            </div>\n            <Table className={classes.table}>\n                <TableHead>\n                    <TableRow>\n                        <TableCell />\n                        <TableCell>{t('formStepping.createMasterFromTemplateSteps.templateTitle', templateTranslationObject)}</TableCell>\n                        <TableCell>{t('formStepping.createMasterFromTemplateSteps.buildingType')}</TableCell>\n                        <TableCell>{t('formStepping.createMasterFromTemplateSteps.specification')}</TableCell>\n                    </TableRow>\n                </TableHead>\n                <TableBody>\n                    {templates.map((template) => {\n                        const templateId = template.get('id');\n                        const templateName = template.get('name');\n                        const specs = template.get('specs');\n                        const specIds = specs.map((spec) => spec.get('id'));\n                        let subheader = '';\n                        template.getIn(['building', 'buildingClasses'])?.forEach((buildingClass) => {\n                            const value = buildingClass.get('value');\n                            const buildingTypes = buildingClass.get('buildingTypes');\n                            const buildingTypeNames = buildingTypes.map((buildingType) => buildingType.get('value'));\n                            subheader += `\\n ${value}: ${buildingTypeNames.join(', ')}`;\n                        });\n                        return (\n                            <TableRow key={templateId}>\n                                <TableCell>\n                                    <Radio\n                                        color='primary'\n                                        checked={isAtLeastOneDrawingInTemplateSelected(templateSpecs, template, selectedDrawings)}\n                                        disabled={!specIds?.size}\n                                        onChange={(e) => {\n                                            const newValue = e.target.checked;\n                                            if (newValue) {\n                                                dispatch(new GetTemplateSpecsAction(specIds.toArray(), {\n                                                    withLoading: true,\n                                                    onSuccess: (_specs) => {\n                                                        const newSelectedDrawings = [];\n                                                        _specs.forEach((spec) => {\n                                                            const id = spec.first().get('id');\n                                                            const specDrawings = spec.first().get('drawings');\n                                                            specDrawings.forEach((specDrawing) => newSelectedDrawings.push({\n                                                                templateId,\n                                                                specId: id,\n                                                                id: specDrawing.get('id')\n                                                            }));\n                                                        });\n                                                        setSelectedDrawings(newSelectedDrawings);\n                                                        updateWholeTemplateSelected(true);\n                                                    }\n                                                }));\n                                            } else {\n                                                setSelectedDrawings([]);\n                                                updateWholeTemplateSelected(false);\n                                            }\n                                        }}\n                                    />\n                                </TableCell>\n                                <TableCell>{templateName}</TableCell>\n                                <TableCell>{subheader}</TableCell>\n                                <TableCell>\n                                    <Button\n                                        color='primary'\n                                        disabled={!specIds?.size}\n                                        onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n                                            specs.forEach((spec) => {\n                                                const specId = spec.get('id');\n                                                dispatch(new GetTemplateSpecsAction(specId));\n                                            });\n                                            dispatchMenuState({\n                                                type: OPEN_MENU,\n                                                payload: {\n                                                    anchorEl: event.currentTarget,\n                                                    menuId: templateId\n                                                }\n                                            });\n                                        }}\n                                    >\n                                        {t('formStepping.createMasterFromTemplateSteps.viewSpecs')}\n                                    </Button>\n                                </TableCell>\n                            </TableRow>\n                        );\n                    })}\n                    {\n                        (activeTemplate && !searchingTemplateSpecById) ? <Menu\n                            anchorEl={menuState.anchorEl}\n                            open={open && activeTemplate && !searchingTemplateSpecById}\n                            onClose={handleClose}\n                        >\n                            {getMenuItems(activeTemplate)}\n                        </Menu> : null\n                    }\n                </TableBody>\n            </Table>\n        </TableContainer>\n    );\n}\ninterface IMItemProps {\n    onClick:  MouseEventHandler;\n    checked: boolean;\n    handleSelect: MouseEventHandler;\n    title: React.ReactNode;\n    children: React.ReactNode;\n}\nconst MItem = React.forwardRef<{}, IMItemProps>(({\n    onClick,\n    checked,\n    handleSelect,\n    title,\n    children\n}, ref) => {\n    return (\n        <div>\n            <MenuItem onClick={onClick}>\n                <Checkbox checked={checked} onClick={handleSelect} color='primary'/>\n                {title}\n                <KeyboardArrowRight />\n            </MenuItem>\n            {children}\n        </div>\n    );\n});\n\nconst Loading = () => {\n    return (\n        <div style={{\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            top: 0,\n            bottom: 0,\n            right: 0,\n            left: 0,\n            backgroundColor: 'rgba(255,255,255,0.9)',\n            position: 'absolute',\n            zIndex: 100,\n        }}>\n            <CircularProgress size='3rem' />\n        </div>\n    );\n};\nexport default TemplateSelectionTable;","import * as React from 'react';\nimport {\n    CircularProgress,\n    Grid,\n    Theme,\n    Typography,\n} from '@material-ui/core';\nimport {useDispatch, useSelector,} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport {\n    LoadingSearchedTemplateAction,\n    SearchTemplatesAction\n} from '../../../modules/ProjectModule/actions';\nimport {makeSelectSearchedTemplates, makeSelectSearchingTemplates} from '../../../modules/ProjectModule/selectors';\nimport TemplateSelectionTable from './TemplateSelectionTable';\nimport {useEffect, useState} from 'react';\nimport {useFormContext} from '../../CreateNewMasterFromTemplateModal';\nimport {makeStyles} from '@material-ui/styles';\nimport { makeSelectTemplateTranslationObject } from '../../../modules/AtsModule/selectors';\n\ninterface IProps {\n    provinceId: number;\n    countryId: number;\n    buildings: any;\n    onSubmit: (values: any) => void;\n    updateWholeTemplateSelected: (allSelected: boolean) => void;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    tableContainer: {\n        paddingBottom: theme.spacing(4),\n    },\n    formContainer: {\n        margin: `${theme.spacing(2)}px 0`,\n        width: '100%'\n    },\n    autoComplete: {\n        width: '100%'\n    },\n    expand: {\n        position: 'absolute',\n        top: 0,\n        right: 0,\n        transform: 'rotate(0deg)',\n        marginLeft: 'auto',\n        transition: theme.transitions.create('transform', {\n            duration: theme.transitions.duration.shortest,\n        }),\n    },\n    expandOpen: {\n        transform: 'rotate(180deg)',\n    },\n    templatesContainer: {\n        maxHeight: 700,\n        'overflow-y': 'auto',\n        marginBottom: theme.spacing(1.5)\n    }\n}));\n\nconst isLoadingSelector = makeSelectSearchingTemplates();\nconst templatesSelector = makeSelectSearchedTemplates();\nconst TemplateSelectionForm: React.FC<IProps> = ({\n     countryId,\n     provinceId,\n     buildings,\n     updateWholeTemplateSelected,\n     onSubmit,\n     children,\n}) => {\n    const [selectedDrawings, setSelectedDrawings] = useState([]);\n    // const {formValues} = useFormContext();\n    const dispatch = useDispatch();\n    const classes = useStyles();\n    const loading = useSelector(isLoadingSelector);\n    const templates = useSelector(templatesSelector);\n    const templateTranslationObject = useSelector(makeSelectTemplateTranslationObject());\n    const {t} = useTranslation('translations');\n    useEffect(() => {\n        const filters = {\n            'and': [\n                {'p.countryId': {eq: countryId}},\n                ...provinceId ? [{'or': [{'p.provinceId': {eq: provinceId}}, {'p.provinceId': {eq: null}}]}] : [],\n                ...buildings?.buildingClasses?.count() ? [{'or': buildings.buildingClasses?.map((building) => ({'lfbcbt.name': {'eq': building.get('value')}}))}] : []\n            ]\n        };\n        const options = {};\n        const queries = {useLooseBuildingClassFilter: 1};\n        dispatch(new LoadingSearchedTemplateAction());\n        dispatch(new SearchTemplatesAction({\n            filters,\n            options,\n            queries\n        }));\n    }, []);\n    const handleSubmit = (e) => {\n        e.preventDefault();\n        onSubmit({\n            selectedDrawings,\n        });\n    };\n    return (\n        <form\n            onSubmit={handleSubmit}\n            className={classes.formContainer}\n        >\n            {\n                loading\n                    ? <CircularProgress/>\n                    : !templates?.count()\n                        ? <Typography\n                            color='textPrimary'\n                        >{t('formStepping.createMasterFromTemplateSteps.noTemplateMessage', templateTranslationObject)}</Typography>\n                        : (\n                            <Grid\n                                container={true}\n                                spacing={2}\n                                className={classes.templatesContainer}\n                            >\n                                <TemplateSelectionTable\n                                    selectedDrawings={selectedDrawings}\n                                    updateWholeTemplateSelected={updateWholeTemplateSelected}\n                                    setSelectedDrawings={setSelectedDrawings}\n                                />\n                            </Grid>\n                        )\n            }\n            {/* back/finish buttons */}\n            {children}\n        </form>\n    );\n};\nexport default TemplateSelectionForm;","export default __webpack_public_path__ + \"static/media/submittalSample.0d0f81f9.png\";","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {IconButton, Theme, Typography} from '@material-ui/core/';\nimport EditIcon from '@material-ui/icons/Edit';\nimport {Image} from '../../index';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    root: {\n        padding: theme.spacing(1),\n        display: 'flex',\n        alignItems: 'center',\n    },\n    description: {\n        flex: 1,\n        textOverflow: 'ellipsis',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n    }\n}));\nconst ContactCard = ({\n    showAvatar,\n    imageId,\n    description,\n    onEdit,\n    imageProps = {},\n    typographyProps = {},\n    ...props\n}) => {\n    const classes = useStyles();\n    return (\n        <div className={classes.root} {...props}>\n            {showAvatar && <Image\n                src={imageId}\n                width={'110px'}\n                aspectRatio={'100%'}\n                fromService={true}\n                {...imageProps}\n            />}\n            <Typography className={classes.description} {...typographyProps}>{description}</Typography>\n            <div>\n                <IconButton size='small' onClick={onEdit}>\n                    <EditIcon fontSize='small'/>\n                </IconButton>\n            </div>\n        </div>\n    );\n};\n\nexport default ContactCard;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Grid,\n  Typography,\n  Paper,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  withStyles,\n  WithTheme,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction, IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport submittalSample from '../../images/printPage/submittalSample.png';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport { ControlledDrawer, UserContactDrawerDetails } from '..';\nimport { DRAWER_ID as CONTACT_DRAWER_ID} from '../../containers/MyContactsPage/constants';\nimport { reduxForm, Field, getFormValues } from 'redux-form/immutable'\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { GetContactsSucceededAction, SelectContactAction } from '../../modules/AccountModule/actions';\nimport { Contact } from '../../models';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport ContactSearchInput from './ContactSearchInput';\nimport { fromJS, List } from 'immutable';\nimport ContactCard from './ContactCard';\n\ninterface ISubmittalBetaComponentProps {\n}\ninterface ISubmittalBetaProps extends ISubmittalBetaComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n}\n\ntype SubmittalProps = ISubmittalBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithTheme;\n\nconst sampleModalKey = 'submittalSampleModalKey';\nexport const SUBMITTAL_FORM_NAME = 'submittalPrint';\n\nexport const formatContactName = (contact: IMap<Contact>) => {\n  const organization = contact && contact.get('organization');\n  const firstName = contact && contact.get('firstName');\n  const lastName = contact && contact.get('lastName');\n  \n  return organization || [firstName, lastName].join(' ') || '';\n}\n\nclass Submittal extends React.Component<SubmittalProps> {\n\n  public handleEditIcon = (e: React.SyntheticEvent, contact: IMap<Contact>) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    e.stopPropagation();\n\n    dispatch(new GetContactsSucceededAction({contacts: List([contact])})); /* Hacky workaround for the way the contacts drawer works. This populates the correct field in redux with the necessary contact data */\n    dispatch(new SelectContactAction(contact.get('id')));\n    dispatch(new SetOverlayComponentContentAction({id: CONTACT_DRAWER_ID, content: '__UserContactDrawerDetailsContactEdit__'}));\n    dispatch(new SetOverlayComponentPropsAction({\n      id: CONTACT_DRAWER_ID,\n      props: {\n        submitCb: (data) => dispatch(change(SUBMITTAL_FORM_NAME, 'contact', {\n          label: formatContactName(data),\n          value: data\n        }))\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({id: CONTACT_DRAWER_ID, open: true}));\n  }\n\n  public render() {\n    const {\n      dispatch,\n      t,\n      classes,\n      formValues\n    } = this.props;\n\n    const showAvatar = formValues && formValues.get('avatar') === true;\n    const contact = formValues && formValues.getIn(['contact', 'value']);\n    const name = contact && formatContactName(contact);\n    const imageId = contact && contact.get('imageId') || '';\n\n    return (\n      <>\n        <PrintWrapper>\n          <PrintHeader\n            title={t('SubmittalPrint.submittal')}\n            description={t('SubmittalPrint.description')}\n            sampleAlt={t('SubmittalPrint.imageAlt')}\n            sampleSrc={submittalSample}\n            sampleModalKey={sampleModalKey}\n            src={pdfIcon}\n          />\n          <form className={classes.form}>\n            <div className={classes.row}>\n              <Paper className={classes.rowItem} elevation={0}>\n                <Typography variant='body2' color='inherit'>{t('specBookletPrint.includeContactInfo')}</Typography>\n                <ContactSearchInput onChange={() => dispatch(change(SUBMITTAL_FORM_NAME, 'avatar', true))} />\n                {\n                  contact && (\n                      <>\n                        <Grid item={true}>\n                          <ContactCard\n                              imageId={imageId}\n                              description={name}\n                              showAvatar={true}\n                              onEdit={(e) => this.handleEditIcon(e, contact)}\n                              imageProps={{\n                                style: {\n                                  width: 56,\n                                  marginRight: 12\n                                }\n                              }}\n                              style={{\n                                margin: '8px 0',\n                                borderRadius: 4,\n                                border: '1px solid rgba(189, 189, 189, 1)'\n                              }}\n                              typographyProps={{\n                                style: {\n                                  fontSize: 13.5,\n                                  font: 'Montserrat',\n                                  weight: 400,\n                                  color: 'rgba(0, 0, 0, 0.87)',\n                                  textOverflow: 'ellipsis',\n                                  whiteSpace: 'nowrap',\n                                  overflow: 'hidden',\n                                  width: 0\n                                }\n                              }}\n                          />\n                        </Grid>\n                        <Grid item={true}>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                              name='avatar'\n                              component={FieldCheckbox}\n                              props={{\n                                label: t('specBookletPrint.avatarLogo'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                  defaultValue: true,\n                                  color: 'primary',\n                                },\n                              }}\n                          />\n                        </Grid>\n                      </>\n                  )\n                }\n              </Paper>\n              <Paper className={classes.rowItem} elevation={0}>\n                <Typography variant='body2' color='inherit'>{t('SubmittalPrint.drawingLabel')}</Typography>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='includeLabel'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('SubmittalPrint.includeDrawingLabel'),\n                      variant: 'single',\n                      helperText: false,\n                      inputProps: {\n                        defaultValue: true,\n                        color: 'primary',\n                      },\n                    }}\n                />\n              </Paper>\n            </div>\n            <div className={classes.row}>\n              <Paper className={classes.rowItem} elevation={0}>\n                <Typography variant='body2' color='inherit'>{t('SubmittalPrint.swatchTitle')}</Typography>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='includeSwatches'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('SubmittalPrint.swatchLabel'),\n                      variant: 'single',\n                      helperText: false,\n                      inputProps: {\n                        defaultValue: true,\n                        color: 'primary',\n                      },\n                    }}\n                />\n              </Paper>\n              <Paper className={classes.rowItem} elevation={0}>\n                <Typography variant='body2' color='inherit'>{t('SubmittalPrint.priceTitle')}</Typography>\n                <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='price'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('SubmittalPrint.priceLabel'),\n                      variant: 'single',\n                      helperText: false,\n                      inputProps: {\n                        defaultValue: true,\n                        color: 'primary',\n                      },\n                    }}\n                />\n              </Paper>\n            </div>\n          </form>\n          <ControlledDrawer\n            localKey={CONTACT_DRAWER_ID}\n            menuComponent={\n              <UserContactDrawerDetails\n                drawerId={CONTACT_DRAWER_ID}\n              />\n            }\n          />\n        </PrintWrapper>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  form: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    padding: theme.spacing(1),\n  },\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  }\n});\n\nconst initialValues = fromJS({\n  avatar: true,\n  price: true,\n  includeLabel: true,\n  includeSwatches: true,\n});\n\nconst mapStateToProps = (state) => {\n  return {\n    initialValues,\n    ...createStructuredSelector({\n      formValues: getFormValues(SUBMITTAL_FORM_NAME),\n    })(state)\n  }\n};\n\nexport default compose<React.ComponentClass<ISubmittalBetaComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: SUBMITTAL_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(Submittal);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n  Tabs,\n  Tab\n} from '@material-ui/core';\nimport {\n  StyleRules, WithTheme\n} from '@material-ui/core/styles';\nimport {\n  Map,\n  List as ImmutableList, List\n} from 'immutable';\nimport { makeSelectSearchedProjects, makeSelectSearchingProjects, makeSelectSearchedProjectsHasNextPage } from '../../modules/ProjectModule/selectors';\nimport { SearchProjectsAction, LoadingSearchedProjectAction } from '../../modules/ProjectModule/actions';\nimport {\n  debounce\n} from 'lodash';\nimport {\n  makeSelectConfigAtsSvgProps,\n  makeSelectUserFirmId,\n  makeSelectUserHasAnyPimRole,\n} from '../../modules/AtsModule/selectors';\nimport {\n  CREATE_NEW_PROJECT_PATH,\n  PROJECT_DETAIL_PATH,\n  TEST_PROJECT_LIST_PATH,\n  CREATE_NEW_TEST_PROJECT_PATH,\n  Mode,\n  MINIMUM_SEARCH_CHARACTERS,\n  COLUMN_TYPES,\n} from '../../constants';\nimport { togglePath } from '../../components/TogglePath/utils';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../modules/RouterModule/selectors';\nimport NotFound from '../../components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\nimport ProjectListFilter from './ProjectListFilter';\nimport { Project, Option, TableColumn, SearchArgs, SavedFilter} from '../../models';\nimport { SpeedDialCustom, TablePaginationActions } from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport ToolBar from '../../components/ToolBar';\nimport ColumnSelector from '../../components/ColumnsSelector';\nimport { CollaborationIconCell, LinkCell, ListCell, TextCell } from '../../components/_CellRenderers';\nimport CustomProjectActionButton from './_CustomCellRenderers/CustomProjectActionButton';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport { SetModeAction } from '../../modules/SpecModule/actions';\nimport { AtsSvgFolder, AtsSvgTestProject } from '../../components/AtsSvg';\nimport { destroy } from 'redux-form';\nimport { getFormNames } from 'redux-form/immutable';\nimport { PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM } from './ProjectListFilter';\nimport { RouteComponentProps } from 'react-router';\nimport { makeSelectFilterList, makeSelectSpecToolDefaultProjectListFilter } from '../../modules/AccountModule/selectors';\nimport { GetFiltersByType, GetOfficesByFirmIdAction, ResetFiltersAndColumnsAction } from '../../modules/AccountModule/actions';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport { buildingType } from '../ProjectList';\n\nexport enum PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES {\n  projects = 'projects',\n  testProjects = 'testProjects'\n}\n\nconst defaultLimit = 10;\n\nconst defaultOptions: Option<Project> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[200],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n  tabs: {\n    overflow: 'initial',\n    minHeight: 'initial',\n    marginTop: theme.spacing(0.75)\n  },\n  tabWrapper: {\n    flexDirection: 'row',\n    whiteSpace: 'nowrap',\n    width: 'fit-content'\n  },\n  tabLabelIcon: {\n    minHeight: 'initial',\n    paddingTop: 0\n  },\n  tabIcon: {\n    marginRight: theme.spacing(2)\n  },\n  speedDialCustomRoot: {\n    position: 'absolute',\n    right: 0,\n    alignItems: 'flex-end'\n  },\n  speedDialCustomFab: {\n    '&:hover': {\n      backgroundColor: theme.palette.primary[700]\n    }\n  },\n  indicator: {\n    backgroundColor: theme.palette.primary[700]\n  }\n});\n\ninterface IProjectAndTestProjectListComponentProps {\n  initialTabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES;\n}\n\ninterface IProjectAndTestProjectListProps extends IProjectAndTestProjectListComponentProps {\n  dispatch: (s: IAction) => void;\n  searchProjects: (options: Option<Project>, filters?: object) => void;\n  searchedProjects: Map<number, IMap<Project>>;\n  searchedProjectsHasNextPage: boolean;\n  searchingProjects: boolean;\n  theme: Theme;\n  location: IMap<IRouterReducerLocation>;\n  forms: List<any>;\n  userHasAnyPimRole: boolean;\n  defaultProjectListFilter: object;\n  firmId: number;\n  // firmOffices: List<IMap<Office>>;\n  projectColumnsList: List<IMap<SavedFilter>>;\n  testProjectColumnsList: List<IMap<SavedFilter>>;\n  configAtsSvgProps: object;\n}\n\ntype IProjectAndTestProjectList = IProjectAndTestProjectListProps & RouteComponentProps & WithTheme & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  projectsColumns: TableColumn[];\n  testProjectsColumns: TableColumn[];\n  anchorEl: HTMLElement;\n  page: number;\n  searchTerm: string;\n  projectsSearchTerm: string;\n  testProjectsSearchTerm: string;\n  openFilterDrawer: boolean;\n  openColumnsDrawer: boolean;\n  options: Option<Project>;\n  filters: object;\n  projectsFilters: object;\n  testProjectsFilters: object;\n  tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES;\n  projectFilterInitialized: boolean;\n  projectFilterMounted: boolean;\n  projectListFilterUniqueKey: any;\n}\n\nconst locationContent = (x: any) => [x.getIn(['city', 'value'], null), x.getIn(['province', 'value'], null), x.getIn(['country', 'value'], null)].filter((y) => y).join(', ');\n\nclass ProjectAndTestProjectList extends React.Component<IProjectAndTestProjectList, IState> {\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  constructor(props: IProjectAndTestProjectList) {\n    super(props);\n    this.state = {\n      anchorEl: null,\n      columnsToDisplay: [],\n      projectsColumns: [\n        { id: 'Type', label: 'specAndProjectList.typeColumn', path: ['isCollaborated'], display: true, sortable: false },\n        { id: 'Project Name', label: 'specAndProjectList.projectNameColumn', path: ['name'], display: true, sortable: true },\n        { id: 'Specifications', label: 'specAndProjectList.specificationsColumn', path: ['specs'], display: true, sortable: true },\n        { id: 'Location', label: 'specAndProjectList.locationColumn', path: ['location'], display: true, sortable: true },\n        { id: 'Address', label: 'specAndProjectList.addressColumn', path: ['address'], display: false, sortable: true },\n        { id: 'Building Type', label: 'specAndProjectList.buildingTypeColumn', path: ['building'], display: true, sortable: true },\n        { id: 'Bid Date', label: 'specAndProjectList.bidDateColumn', path: ['bidDate'], display: true, sortable: true },\n        { id: 'Created Date', label: 'specAndProjectList.createdDateColumn', path: ['createdDate'], display: false, sortable: true },\n        { id: 'Updated Date', label: 'specAndProjectList.updatedDateColumn', path: ['modifiedDate'], display: false, sortable: true },\n        { id: 'Creator', label: 'specAndProjectList.creatorColumn', path: ['createdBy', 'user', 'name'], display: true, sortable: true },\n        { id: 'Actions', label: 'specAndProjectList.actionsColumn', display: true, sortable: true },\n        { id: 'Internal No.', label: 'specAndProjectList.internalNoColumnLabel', path: ['internalNo'], display: false, sortable: true },\n      ],\n      testProjectsColumns: [\n        { id: 'Type', label: 'specAndProjectList.typeColumn', path: ['isCollaborated'], display: true, sortable: false },\n        { id: 'Test Project Name', label: 'specAndProjectList.projectNameColumn', path: ['name'], display: true, sortable: true },\n        { id: 'Specifications', label: 'specAndProjectList.specificationsColumn', path: ['specs'], display: true, sortable: true },\n        { id: 'Location', label: 'specAndProjectList.locationColumn', path: ['location'], display: true, sortable: true },\n        { id: 'Address', label: 'specAndProjectList.addressColumn', path: ['address'], display: false, sortable: true },\n        { id: 'Building Type', label: 'specAndProjectList.buildingTypeColumn', path: ['building'], display: true, sortable: true },\n        { id: 'Bid Date', label: 'specAndProjectList.bidDateColumn', path: ['bidDate'], display: true, sortable: true },\n        { id: 'Created Date', label: 'specAndProjectList.createdDateColumn', path: ['createdDate'], display: false, sortable: true },\n        { id: 'Updated Date', label: 'specAndProjectList.updatedDateColumn', path: ['modifiedDate'], display: false, sortable: true },\n        { id: 'Creator', label: 'specAndProjectList.creatorColumn', path: ['createdBy', 'user', 'name'], display: true, sortable: true },\n        { id: 'Actions', label: 'specAndProjectList.actionsColumn', display: true, sortable: true },\n        { id: 'Internal No.', label: 'specAndProjectList.internalNoColumnLabel', path: ['internalNo'], display: false, sortable: true },\n      ],\n      openFilterDrawer: false,\n      openColumnsDrawer: false,\n      page: 0,\n      searchTerm: '',\n      projectsSearchTerm: '',\n      testProjectsSearchTerm: '',\n      filters: null,\n      projectsFilters: null,\n      testProjectsFilters: null,\n      options: defaultOptions,\n      tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects,\n      projectFilterInitialized: false,\n      projectFilterMounted: false,\n      projectListFilterUniqueKey: ''\n    };\n  }\n\n  public componentDidMount() {\n    const { dispatch, userHasAnyPimRole, defaultProjectListFilter, firmId, projectColumnsList, testProjectColumnsList } = this.props;\n    const { projectsColumns, testProjectsColumns } = this.state;\n\n    dispatch(new SetModeAction(Mode.project));\n\n    if (firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n\n    // set the default filter as well as assign the proper tabValue\n    if (defaultProjectListFilter) {\n      if (location.pathname === TEST_PROJECT_LIST_PATH && userHasAnyPimRole) {\n        this.setState({\n          columnsToDisplay: testProjectsColumns,\n          testProjectsFilters: defaultProjectListFilter,\n          projectsFilters: defaultProjectListFilter,\n          filters: defaultProjectListFilter,\n          tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects,\n          projectFilterMounted: true,\n        }, () => this.setSearchArgsAndSearch({}));\n      } else {\n        this.setState({\n          columnsToDisplay: projectsColumns,\n          testProjectsFilters: defaultProjectListFilter,\n          projectsFilters: defaultProjectListFilter,\n          filters: defaultProjectListFilter,\n          projectFilterMounted: true\n        }, () => this.setSearchArgsAndSearch({}));\n      }\n    } else {\n      dispatch(new LoadingSearchedProjectAction());\n    }\n\n    if (!projectColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.SPEC_PROJECT_LIST_COLUMNS }));\n    }\n    if (!testProjectColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.SPEC_TEST_PROJECT_LIST_COLUMNS }));\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      searchedProjects,\n      searchedProjectsHasNextPage,\n      userHasAnyPimRole,\n      initialTabValue,\n      defaultProjectListFilter,\n      firmId,\n      dispatch\n    } = this.props;\n    const {\n      options,\n      page,\n      tabValue,\n      testProjectsColumns,\n      projectsColumns,\n      projectsFilters,\n    } = this.state;\n\n    if (prevProps.firmId !== firmId && firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n\n    // set the default filter as well as assign the proper tabValue\n    if (!prevProps.defaultProjectListFilter && defaultProjectListFilter) {\n      if (location.pathname === TEST_PROJECT_LIST_PATH && userHasAnyPimRole) {\n        this.setState({\n          columnsToDisplay: testProjectsColumns,\n          projectsFilters: defaultProjectListFilter,\n          testProjectsFilters: defaultProjectListFilter,\n          filters: defaultProjectListFilter,\n          tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects,\n          projectFilterMounted: true,\n        }, () => this.setSearchArgsAndSearch({}));\n      } else {\n        this.setState({\n          columnsToDisplay: projectsColumns,\n          projectsFilters: defaultProjectListFilter,\n          testProjectsFilters: defaultProjectListFilter,\n          filters: defaultProjectListFilter,\n          tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects,\n          projectFilterMounted: true,\n        }, () => this.setSearchArgsAndSearch({}));\n      }\n    }\n\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no projects returned\n    if (\n      ((tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects || tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects) && prevProps.searchedProjects.size && searchedProjects.size === 0 && options.offset)\n    ) {\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: options.offset - options.limit\n        },\n        page: page - 1\n      });\n    }\n\n    // page has changed\n    if (initialTabValue !== prevProps.initialTabValue) {\n      if (initialTabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects) {\n        this.setState({ columnsToDisplay: projectsColumns, filters: projectsFilters, tabValue: initialTabValue }, () => this.setSearchArgsAndSearch({ options: defaultOptions, page: 0 }));\n      }\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const { dispatch, forms } = this.props;\n    if (forms.includes(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM)) {\n      dispatch(destroy(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM));\n    }\n    dispatch(new ResetFiltersAndColumnsAction());\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n      openColumnsDrawer: false\n    }));\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState(prevState => ({\n      openColumnsDrawer: !prevState.openColumnsDrawer,\n      openFilterDrawer: false\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<Project>) => {\n    const {\n      searchProjects,\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage,\n      tabValue\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        const filters: any = {\n          'and': [\n            ...(tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects)\n                ? [{\n                  'status': {\n                    'eq': 'test'\n                  }\n                }]\n                : [],\n          ]\n        };\n        if (this.state.searchTerm) {\n          filters.and.push({\n            'or': [\n              {\n                'name': {\n                  'like': this.state.searchTerm\n                }\n              },\n              {\n                'internalNo': {\n                  'like': this.state.searchTerm\n                }\n              },\n            ]\n          });\n        }\n        this.state.filters && filters.and.push(...(this.state.filters as any).and); // tslint:disable-line\n\n        if (filters.and.length === 0) {\n          delete filters.and;\n        }\n\n        searchProjects(\n          this.state.options,\n          filters,\n        );\n      }\n    );\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => this.setState({ columnsToDisplay: newColumnsToDisplay });\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAdd = (path: string) => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: path,\n      dispatch,\n      location,\n    })()();\n  }\n\n  public handleTabChange = (event: React.ChangeEvent<{}>, newValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES) => {\n    const {\n      tabValue,\n      searchTerm,\n      columnsToDisplay,\n      filters,\n      projectFilterMounted,\n    } = this.state;\n    const {\n      defaultProjectListFilter,\n      t\n    } = this.props;\n\n    if (tabValue !== newValue) {\n      const title = document.getElementById('pageTitle');\n      if (newValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects && title) {\n        title.innerHTML = t('pageTitle.projectListPage');\n      }\n      if (newValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects && title) {\n        title.innerHTML = t('pageTitle.projectListPage');\n      }\n\n      const newData = {\n        columnsToDisplay: this.state[`${newValue}Columns`],\n        filters: this.state[`${newValue}Filters`],\n        searchTerm: this.state[`${newValue}SearchTerm`],\n        [`${tabValue}Columns`]: columnsToDisplay,\n        [`${tabValue}Filters`]: filters,\n        [`${tabValue}SearchTerm`]: searchTerm,\n      };\n\n      if (!projectFilterMounted && newValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects) {\n        newData.filters = defaultProjectListFilter;\n      }\n\n      this.setState({\n        tabValue: newValue,\n        openFilterDrawer: false,\n        ...newData\n      }, () => this.setSearchArgsAndSearch({\n        page: 0,\n        options: defaultOptions\n      }));\n    }\n  }\n\n  public render() {\n    const {\n      classes,\n      theme,\n      searchedProjects = Map(),\n      searchingProjects,\n      searchedProjectsHasNextPage,\n      userHasAnyPimRole,\n      projectColumnsList,\n      testProjectColumnsList,\n      configAtsSvgProps,\n      t\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      filters,\n      page,\n      openFilterDrawer,\n      openColumnsDrawer,\n      columnsToDisplay,\n      tabValue\n    } = this.state;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display);\n\n    const emptyProjectsLabels = {\n      // emptyviewSubtitle: t('projectList.emptyviewSubtitle'),\n      emptyviewAddButton: t('projectList.emptyviewAddButton'),\n      emptyviewAlt: t('projectList.emptyviewAlt'),\n      emptyviewNotFound: t('projectList.emptyviewNotFound'),\n    };\n\n    const emptyTestProjectsLabels = {\n      // emptyviewSubtitle: t('testProjectList.emptyviewSubtitle'),\n      emptyviewAddButton: t('testProjectList.emptyviewAddButton'),\n      emptyviewAlt: t('testProjectList.emptyviewAlt'),\n      emptyviewNotFound: t('testProjectList.emptyviewNotFound'),\n    };\n\n    const speedDialActions = tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects\n      ? [{\n          icon: <Grid container={true} wrap='nowrap' alignItems='center'>\n            <FolderIcon />\n            <Typography variant='body2' style={{whiteSpace: 'nowrap', textTransform: 'capitalize', marginLeft: 8}}>\n              {t('specAndProjectList.newProject')}\n            </Typography>\n          </Grid>,\n          tooltipTitle: '',\n          onClick: () => this.handleAdd(CREATE_NEW_PROJECT_PATH),\n          FabProps: {style: {borderRadius: 5, width: 'auto', margin: 0, padding: '0 16px'}}\n        }]\n      : [{\n          icon: <Grid container={true} wrap='nowrap' alignItems='center'>\n            <AtsSvgTestProject />\n            <Typography variant='body2' style={{whiteSpace: 'nowrap', textTransform: 'capitalize', marginLeft: 8}}>\n              {t('specAndProjectList.newTestProject')}\n            </Typography>\n          </Grid>,\n          tooltipTitle: '',\n          onClick: () => this.handleAdd(CREATE_NEW_TEST_PROJECT_PATH),\n          FabProps: {style: {borderRadius: 5, width: 'auto', margin: 0, padding: '0 16px'}}\n        }];\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <ToolBar\n          onClickColumnButton={this.toggleColumnsDrawer}\n          onClickFilterButton={this.toggleFilterDrawer}\n          searchTooltip={tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects ? t('specAndProjectList.projectsSearchTooltip') : t('specAndProjectList.testProjectsSearchTooltip')}\n          searchTerm={searchTerm}\n          minimumCharacters={tabValue !== PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects ? MINIMUM_SEARCH_CHARACTERS : 0}\n          minimumCharactersText={tabValue !== PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects ? t('search.minimumCharacterMessage', { minimumCharacters: MINIMUM_SEARCH_CHARACTERS }) : ''}\n          handleSubmit={this.handleSubmit}\n          customizedFab={\n            <SpeedDialCustom\n              actions={speedDialActions}\n              overRideClasses={{ root: classes.speedDialCustomRoot, fab: classes.speedDialCustomFab }}\n            />\n          }\n          leftComponent={\n            <Tabs\n              className={classes.tabs}\n              value={tabValue}\n              onChange={this.handleTabChange}\n              textColor='primary'\n              variant='fullWidth'\n              aria-label={t('specAndProjectList.tabsAriaLabel')}\n              classes={{\n                indicator: classes.indicator\n              }}\n            >\n              <Tab\n                label={t('specAndProjectList.projectsTab')}\n                value={PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects}\n                icon={<FolderIcon className={classes.tabIcon} style={{ marginBottom: 0 }} />}\n                classes={{\n                  wrapper: classes.tabWrapper,\n                  labelIcon: classes.tabLabelIcon\n                }}\n              />\n              {\n                userHasAnyPimRole &&\n                  <Tab\n                    label={t('specAndProjectList.testProjectsTab')}\n                    value={PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects}\n                    icon={<AtsSvgTestProject\n                            color={tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects ? theme.palette.primary.main : undefined}\n                            className={classes.tabIcon}\n                            style={{ marginBottom: 0 }}\n                          />}\n                    classes={{\n                      wrapper: classes.tabWrapper,\n                      labelIcon: classes.tabLabelIcon\n                    }}\n                  />\n              }\n            </Tabs>\n          }\n        />\n        <FilterChipsBar\n          filtersFormId={PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM}\n          setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n          options={options}\n          setUniqueKey={(key) => this.setState({ projectListFilterUniqueKey: key })}\n        />\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            {searchingProjects\n              ? <NotFound\n                  svgIcon={<LoadingImage />}\n                  firstRow={<LinearProgress color='secondary'/>}\n                  secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n                  paperContainer={true}\n                />\n              : <Paper\n                  className={classes.tableContainer}\n                >\n                  {searchedProjects.size !== 0\n                    ? <>\n                        <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                          <Table>\n                            <TableHead classes={{ root: classes.tableHead }}>\n                              <TableRow>\n                                {filteredColumnsToDisplay.map((header, index) => (\n                                  <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                    {t(header.label)}\n                                  </TableCell>\n                                ))}\n                              </TableRow>\n                            </TableHead>\n                            <TableBody>\n                              {\n                                searchedProjects.map((project: IMap<Project>, index: number) => (\n                                  <TableRow id={`${index}`} key={index} hover={true}>\n                                    {project && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                      switch (column.id) {\n                                        case 'Type': return <CollaborationIconCell key={column.label} isCollaborated={project.getIn(column.path)} />;\n                                        case 'Project Name':\n                                        case 'Test Project Name': return <LinkCell key={column.label} refresh={false} name={project.getIn(column.path)} linkPath={`${PROJECT_DETAIL_PATH}/${project.get('id')}`} />;\n                                        case 'Specifications': return <ListCell\n                                                                        key={column.label}\n                                                                        data={project.get('specs').map(spec => ({\n                                                                          name: spec.get('name'),\n                                                                          path: `${PROJECT_DETAIL_PATH}/${project.get('id')}`,\n                                                                          state: { initialSelectedSpecId: spec.get('id') }\n                                                                        }))}\n                                                                      />;\n                                        case 'Location': return <TextCell key={column.label} text={locationContent(project.getIn(column.path))} />;\n                                        case 'Address': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Building Type': return <TextCell key={column.label} text={buildingType(project.getIn(column.path))} />;\n                                        case 'Bid Date':\n                                        case 'Created Date':\n                                        case 'Updated Date': return <TextCell key={column.label} text={utcToLocal(project.getIn(column.path))} />;\n                                        case 'Creator': return <TextCell key={column.label} text={project.getIn(column.path)} />;\n                                        case 'Actions': return <CustomProjectActionButton key={column.label} project={project} options={options} filters={filters} searchTerm={searchTerm} />;\n                                        case 'Internal No.': return <TextCell key={column.label} text={project.getIn(column.path) ? project.getIn(column.path) : '-'} />;\n                                      }\n                                    })}\n                                  </TableRow>\n                                ))\n                              }\n                            </TableBody>\n                          </Table>\n                        </div>\n                        <TablePagination\n                          className={classes.pagination}\n                          component='div'\n                          onChangePage={this.handlePageChange}\n                          labelRowsPerPage={t('Pagination.rowsPerPage')}\n                          rowsPerPageOptions={[5, 10, 25, 50]}\n                          onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                          count={searchedProjectsHasNextPage ? options.offset + options.limit + 1 : options.offset + searchedProjects?.size}\n                          labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                          rowsPerPage={options.limit}\n                          page={page}\n                          ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                          classes={{\n                            toolbar: classes.paginationToolbar\n                          }}\n                        />\n                      </>\n                    : tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects\n                        ? <EmptyView\n                            svg={\n                              <AtsSvgFolder color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary.main }} {...configAtsSvgProps} />\n                            }\n                            onButtonClicked={() => this.handleAdd( CREATE_NEW_PROJECT_PATH)}\n                            {...emptyProjectsLabels}\n                          />\n                        : <EmptyView\n                            svg={\n                              <AtsSvgFolder color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary.main }} {...configAtsSvgProps} />\n                            }\n                            onButtonClicked={() => this.handleAdd( CREATE_NEW_TEST_PROJECT_PATH)}\n                            {...emptyTestProjectsLabels}\n                          />\n                  }\n                </Paper>\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            <ProjectListFilter\n              toggleDrawer={this.toggleFilterDrawer}\n              open={this.state.openFilterDrawer}\n              projectFilterInitialized={this.state.projectFilterInitialized}\n              setInitialized={() => this.setState({ projectFilterInitialized: true })}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n              uniqueKey={this.state.projectListFilterUniqueKey}\n              setUniqueKey={(key) => this.setState({ projectListFilterUniqueKey: key })}\n              tabValue={tabValue}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openColumnsDrawer ? '370px' : 0,\n            }}\n          >\n            <ColumnSelector\n              columnType={\n                tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects\n                  ? COLUMN_TYPES.SPEC_TEST_PROJECT_LIST_COLUMNS\n                  : COLUMN_TYPES.SPEC_PROJECT_LIST_COLUMNS\n              }\n              defaultColumns={\n                tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects\n                ? this.state.testProjectsColumns\n                : this.state.projectsColumns\n              }\n              columnsToDisplay={columnsToDisplay}\n              disabledColumns={['Type', 'Project Name', 'Test Project Name', 'Actions']}\n              isOpen={openColumnsDrawer}\n              onClose={this.toggleColumnsDrawer}\n              handleColumnsChange={this.handleColumnsChange}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchProjects: (options: Option<Project>, filters?: object) => {\n      dispatch(new LoadingSearchedProjectAction());\n      dispatch(new SearchProjectsAction({\n        options,\n        filters\n      }));\n    },\n  };\n};\n\nconst makeMapStateToProps = () => {\n  const searchedProjectsSelect = makeSelectSearchedProjects();\n  const searchedProjectsHasNextPageSelect = makeSelectSearchedProjectsHasNextPage();\n  const searchingProjectsSelect = makeSelectSearchingProjects();\n  const locationSelect = makeSelectLocation();\n  const userHasAnyPimRoleSelect = makeSelectUserHasAnyPimRole();\n  const defaultProjectListFilterSelect = makeSelectSpecToolDefaultProjectListFilter();\n  const projectColumnsListSelect = makeSelectFilterList(COLUMN_TYPES.SPEC_PROJECT_LIST_COLUMNS);\n  const testProjectColumnsListSelect = makeSelectFilterList(COLUMN_TYPES.SPEC_TEST_PROJECT_LIST_COLUMNS);\n  const formsSelect = getFormNames();\n  const configAtsSvgPropsSelect = makeSelectConfigAtsSvgProps();\n\n  return function mapStateToProps(state) {\n    const firmId = makeSelectUserFirmId()(state);\n    // const firmOfficesSelect = makeSelectOfficesByFirm({firmId});\n    return ({\n      searchedProjects: searchedProjectsSelect(state),\n      searchedProjectsHasNextPage: searchedProjectsHasNextPageSelect(state),\n      searchingProjects: searchingProjectsSelect(state),\n      location: locationSelect(state),\n      userHasAnyPimRole: userHasAnyPimRoleSelect(state),\n      forms: formsSelect(state),\n      defaultProjectListFilter: defaultProjectListFilterSelect(state),\n      firmId,\n      // firmOffices: firmOfficesSelect(state),\n      projectColumnsList: projectColumnsListSelect(state),\n      testProjectColumnsList: testProjectColumnsListSelect(state),\n      configAtsSvgProps: configAtsSvgPropsSelect(state)\n    });\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectAndTestProjectListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(ProjectAndTestProjectList);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction';\nimport {\n  Map,\n  List,\n} from 'immutable';\nimport {\n  Drawer,\n  Button,\n  IconButton,\n  Grid,\n  Typography,\n  Theme,\n  WithTheme\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { createStructuredSelector } from 'reselect';\nimport { makeSelectCountries, makeSelectProvinces, makeSelectCities, makeSelectAdminDivisions } from '../../../modules/ProjectLocationModule/selectors';\nimport { GetCountriesAction, GetProvinceAction, GetCountryAdminDivisionAction, GetCityAction } from '../../../modules/ProjectLocationModule/actions';\nimport { IMap } from 'ats-utils/src';\nimport {\n  ListItem,\n  BuildingClassListItem,\n  User,\n  Office,\n  Project,\n  Option,\n  SearchArgs,\n} from '../../../models';\nimport {\n  Field,\n  reduxForm,\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n  reset,\n  autofill,\n  initialize,\n} from 'redux-form';\nimport FieldAutoSuggest, { IFieldAutoSuggestComponentProps } from '../../../components/FieldAutoSuggest';\nimport {\n  set,\n  startCase,\n} from 'lodash';\nimport {\n  SearchUsersQuickAction,\n} from '../../../modules/AccountModule/actions';\nimport {\n  makeSelectUsers,\n  makeSelectOfficesByFirm,\n  makeSelectLoggedInUserOfficeId\n} from '../../../modules/AccountModule/selectors';\nimport { GetBuildingTypesAction, GetBuildingClassesAction } from '../../../modules/BuildingModule/actions';\nimport { makeSelectBuildingTypes, makeSelectBuildingClasses } from '../../../modules/BuildingModule/selectors';\nimport { makeSelectUserFirmId } from '../../../modules/AtsModule/selectors';\nimport { WithStyles, withStyles } from '@material-ui/styles';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { dateValidateFunc } from '../../../validators';\nimport {\n  FieldAutocomplete,\n} from '../../../components';\nimport { IFieldAutocompleteComponentProps } from '../../../components/FieldAutocomplete';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\nimport PeopleRoundedIcon from '@material-ui/icons/PeopleRounded';\nimport withReduxFormValidationTranslation, { VALIDATION_HACK_FIELD } from '../../../hoc/withReduxFormValidationTranslation';\nimport { IFieldDatePickerV2CustomProps } from '../../../components/FieldDatePickerV2/types';\nimport FieldDatePickerV2 from '../../../components/FieldDatePickerV2';\nimport { formatDateRangeFilter } from '../../ProjectList/ProjectListFilter';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../../../components/FieldCheckbox';\nimport { PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES } from '../Component';\n\nexport const PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM = 'SpecToolProjectListFilters';\n\nconst bidDateValidateFunc = (value, allValues) => dateValidateFunc('bidDate', allValues);\nconst createdDateValidateFunc = (value, allValues) => dateValidateFunc('createdDate', allValues);\nconst updatedDateValidateFunc = (value, allValues) => dateValidateFunc('modifiedDate', allValues);\n\ninterface IProjectListFilterComponentProps {\n  open: boolean;\n  projectFilterInitialized: boolean;\n  setInitialized: () => void;\n  toggleDrawer: () => void;\n  form?: string;\n  options: Option<Project>;\n  setSearchArgsAndSearch: (arg: SearchArgs<Project>) => void;\n  uniqueKey: any;\n  setUniqueKey: (key: any) => void;\n  tabValue: PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES;\n}\n\ninterface IProjectListFilter extends IProjectListFilterComponentProps {\n  dispatch: Dispatch<IAction>;\n  formValues: Map<string, any>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  adminDivisions: Map<number, string>;\n  getBuildingTypes: (id: number) => void;\n  getBuildingClasses: () => void;\n  buildingTypes: List<IMap<ListItem<string, string>>>;\n  buildingClasses: List<IMap<BuildingClassListItem>>;\n  selectedBuildingClassId: number;\n  searchUsers: (searchTerm: string) => void;\n  users: List<IMap<User>>;\n  firmOffices: List<IMap<Office>>;\n  userOfficeId: number;\n}\n\ntype IProjectListFilterType = IProjectListFilter & WithTranslation & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nclass ProjectListFilter extends React.Component<IProjectListFilterType> {\n\n  public state = {\n    projectTabFormValues: null,\n    testProjectTabFormValues: null\n  };\n\n  public collaborated = [\n    {\n      text: this.props.t('projectListFilter.collaborated'),\n      icon: <PeopleRoundedIcon color='primary' style={{ marginRight: 10}} />,\n      value: true\n    },\n    {\n      text: this.props.t('projectListFilter.nonCollaborated'),\n      icon: <PersonRoundedIcon color='primary' style={{ marginRight: 10}} />,\n      value: false\n    }\n  ];\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      open,\n      formValues,\n      firmOffices,\n      userOfficeId,\n      projectFilterInitialized,\n      setInitialized,\n      getCountries,\n      getBuildingClasses,\n      searchUsers,\n      getBuildingTypes,\n      tabValue,\n      dispatch\n    } = this.props;\n\n    const {\n      projectTabFormValues,\n      testProjectTabFormValues\n    } = this.state;\n\n    const userOffice = firmOffices?.find((office) => office.get('id') === userOfficeId)?.toJS();\n    const defaultFilters = {\n      isAi: { neq: [true] },\n      'createdByOfficeId': { eq: userOffice }\n    };\n    if (!projectFilterInitialized && userOffice) {\n      dispatch(initialize(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM, defaultFilters));\n      setInitialized();\n      this.setState({\n        projectTabFormValues: defaultFilters,\n        testProjectTabFormValues: defaultFilters\n      });\n    }\n\n    // since each tab use the same filter form, we need to reinitialize the form when switching tabs\n    if (tabValue !== prevProps.tabValue) {\n      // save the current tab formValues to state and initialize the other tab formValues that saved in state\n      if (tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.projects) {\n        this.setState({ testProjectTabFormValues: formValues });\n        dispatch(initialize(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM, projectTabFormValues));\n      }\n      if (tabValue === PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES.testProjects) {\n        this.setState({ projectTabFormValues: formValues });\n        dispatch(initialize(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM, testProjectTabFormValues));\n      }\n    }\n\n    if (open && (open !== prevProps.open)) {\n      getCountries();\n      getBuildingClasses();\n      searchUsers('');\n    }\n\n    if (prevProps.selectedBuildingClassId !== this.props.selectedBuildingClassId && (this.props.selectedBuildingClassId !== -1)) {\n      getBuildingTypes(this.props.selectedBuildingClassId);\n    }\n\n    if (formValues && formValues.size && !formValues.equals(prevProps.formValues) && projectFilterInitialized === prevProps.projectFilterInitialized) {\n      this.onSubmit(formValues);\n    }\n  }\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(_countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n\n    } else {\n      dispatch(change(form, 'countryId', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n    } else {\n      dispatch(change(form, 'provinceId', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      form,\n    } = this.props;\n    if (cityId == null) {\n      dispatch(change(form, 'cityId', null));\n    }\n  }\n\n  public onSubmit = (values: Map<string, any>) => {\n    const {\n      options,\n      setSearchArgsAndSearch,\n    } = this.props;\n\n    if (values.size) {\n      const formatedValues = values.withMutations(ctx => {\n        const buildingClassId = ctx.getIn(['buildingClassId', 'eq']);\n        const buildingTypeId = ctx.getIn(['buildingTypeId', 'eq']);\n\n        const createdBy = ctx.get('createdBy');\n        const createdByOffice = ctx.get('createdByOfficeId');\n\n        const collaborated = ctx.get('isCollaborated');\n\n        buildingClassId && ctx.setIn(['buildingClassId', 'eq'], buildingClassId.id); // tslint:disable-line\n        buildingTypeId && ctx.setIn(['buildingTypeId', 'eq'], buildingTypeId.id); // tslint:disable-line\n\n        const bidDate = ctx.get('bidDate');\n        const formatedBidDate = bidDate && formatDateRangeFilter(bidDate);\n        if (formatedBidDate) {\n          ctx.set('bidDate', formatedBidDate);\n        } else if (bidDate) {\n          ctx.delete('bidDate');\n        }\n\n        const createdDate = ctx.get('createdDate');\n        const formatedCreatedDate = createdDate && formatDateRangeFilter(createdDate);\n        if (formatedCreatedDate) {\n          ctx.set('createdDate', formatedCreatedDate);\n        } else if (createdDate) {\n          ctx.delete('createdDate');\n        }\n\n        const modifiedDate = ctx.get('modifiedDate');\n        const formatedModifiedDate = modifiedDate && formatDateRangeFilter(modifiedDate);\n        if (formatedModifiedDate) {\n          ctx.set('modifiedDate', formatedModifiedDate);\n        } else if (modifiedDate) {\n          ctx.delete('modifiedDate');\n        }\n\n        createdBy && (createdBy.get('eq') ? ctx.setIn(['createdBy', 'eq'], createdBy.getIn(['eq', 'id'])) : ctx.delete('createdBy')); // tslint:disable-line\n        createdByOffice && (createdByOffice.get('eq') ? ctx.setIn(['createdByOfficeId', 'eq'], createdByOffice.getIn(['eq', 'id'])) : ctx.delete('createdByOfficeId')); // tslint:disable-line\n\n        collaborated && (collaborated.get('eq')) ? ctx.setIn(['isCollaborated', 'eq'], collaborated.getIn(['eq', 'value'])) : ctx.delete('isCollaborated'); // tslint:disable-line\n\n        const nonAiSpec = ctx.getIn(['isAi', 'neq', 0]);\n        const aiSpec = ctx.getIn(['isAi', 'eq', 0]);\n        if (nonAiSpec === aiSpec) {\n          ctx.delete('isAi');\n        } else {\n          aiSpec ? ctx.setIn(['isAi', 'eq'], true) : ctx.setIn(['isAi', 'eq'], false);\n          ctx.deleteIn(['isAi', 'neq']);\n        }\n\n        if (ctx.get(VALIDATION_HACK_FIELD)) {\n          ctx.delete(VALIDATION_HACK_FIELD);\n        }\n      });\n\n      const valuesWithParsedKeys = formatedValues\n        .reduce((acc, filter, key) => {\n          const newFilter = Map().withMutations((ctx) => {\n            ctx.set(key, filter);\n          });\n          return acc.push(newFilter);\n        }, List())\n        .filter((value) => {\n          // filters out null values. more so for the location stuff\n          const key = value.keySeq().toJS();\n          return value.get(key[0]) && value.getIn([key[0], 'eq']) !== null;\n        });\n\n      const filters = {\n        'and': valuesWithParsedKeys.toJS(),\n      };\n\n      setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: 0\n        },\n        filters,\n        page: 0,\n      });\n    }\n  }\n\n  public handleResetForm = () => {\n    const {\n      dispatch,\n      form,\n      options,\n      setSearchArgsAndSearch,\n      setUniqueKey\n    } = this.props;\n\n    dispatch(\n      initialize(\n        PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM,\n        {}\n      )\n    );\n\n    dispatch(reset(form || PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM));\n    setUniqueKey(Date.now());\n\n    setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      filters: null,\n      page: 0,\n    });\n  }\n\n  public render() {\n    const {\n      dispatch,\n      classes,\n      open,\n      toggleDrawer,\n      countries,\n      adminDivisions,\n      provinces,\n      cities,\n      formValues,\n      buildingTypes,\n      buildingClasses,\n      users,\n      firmOffices,\n      handleSubmit,\n      searchUsers,\n      uniqueKey,\n      t\n    } = this.props;\n\n    const _countryId = formValues != null ? formValues.getIn(['location', 'country', 'id']) : -1;\n    const countryId: number = _countryId != null ? Number(_countryId) : -1;\n    const adminDivision = startCase(adminDivisions.get(countryId, 'province'));\n\n    const usersListItem = users.reduce((acc, user: IMap<User>) => {\n      const listItem = Map().withMutations((immutableMap) => {\n        immutableMap.set('id', user.get('id')),\n        immutableMap.set('value', `${user.get('firstName')} ${user.get('lastName')}`);\n      });\n\n      return acc.push(listItem);\n    }, List());\n\n    return (\n      <>\n        <Drawer\n          className={classes.drawer}\n          classes={{\n            paper: classes.drawerPaper,\n          }}\n          variant='persistent'\n          anchor='right'\n          open={open}\n          style={{ width: open ? 'initial' : 0}}\n        >\n          <form\n            key={uniqueKey}\n            onSubmit={handleSubmit(this.onSubmit)}\n            className={classes.body}\n          >\n            {/* Header */}\n            <Grid\n              className={classes.header}\n              container={true}\n              justify='space-between'\n              alignItems='center'\n            >\n              <Typography\n                variant='h5'\n              >\n                {t('generalListFilter.title')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='flex-end'\n                item={true}\n                xs={7}\n              >\n                <Button\n                  color='primary'\n                  onClick={this.handleResetForm}\n                >\n                  {t('generalListFilter.reset')}\n                </Button>\n                <IconButton\n                  onClick={toggleDrawer}\n                >\n                  <CloseIcon />\n                </IconButton>\n              </Grid>\n            </Grid>\n\n            {/* Content */}\n            <Grid\n              item={true}\n              className={classes.content}\n            >\n              {/* location */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.location')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.country'),\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: countries.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCountry,\n                      },\n                    }}\n                    name='countryId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: adminDivision,\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: provinces.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return true;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectProvince,\n                      },\n                    }}\n                    name='provinceId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={4}\n                >\n                  <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n                    props={{\n                      label: t('projectListFilter.city'),\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                      autosuggestProps: {\n                        directMode: false,\n                        data: cities.toJS(),\n                        renderMissingData: (value: any) => `Loading: ${value}`,\n                        shouldRenderSuggestions: (value: string = '') => {\n                          return value.length !== 0;\n                        }\n                      },\n                      inputProps: {\n                        onChange: this.selectCity,\n                      },\n                    }}\n                    name='cityId.eq'\n                    component={FieldAutoSuggest}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* building class and type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.buildingTitle')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingClassId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingClasses.toIndexedSeq().toJS(),\n                        label: t('projectListFilter.buildingClass'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                        onChange: (event: object, value: any) => !value && dispatch(autofill(PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM, 'buildingTypeId', undefined))\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='buildingTypeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: buildingTypes && buildingTypes.toJS(),\n                        label: t('projectListFilter.buildingType'),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && option.value,\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* required date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.bidDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.startDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('projectListFilter.toDate')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`bidDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.endDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[bidDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.startDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('projectListFilter.toDate')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`createdDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.endDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[createdDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* updated date */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.updatedDate')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                alignItems='center'\n                wrap='nowrap'\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`modifiedDate.gte`}\n                    props={{\n                      timeOfDay: 'start',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.startDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[updatedDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='caption'\n                    className={classes.subtitle}\n                  >\n                    {t('projectListFilter.toDate')}\n                  </Typography>\n                </Grid>\n\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldDatePickerV2CustomProps>>\n                    name={`modifiedDate.lte`}\n                    props={{\n                      timeOfDay: 'end',\n                      keyboardDatePickerProps: {\n                        placeholder: t('projectListFilter.endDatePlaceholder'),\n                        className: classes.dateInput\n                      },\n                      formControlProps: {\n                        fullWidth: true,\n                      },\n                    }}\n                    validate={[updatedDateValidateFunc]}\n                    component={FieldDatePickerV2}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created by */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdBy')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdBy.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: usersListItem.toJS(),\n                        placeholder: t('projectListFilter.createdByPlaceholder'),\n                        onInputChange: (event: object, val: string, reason: string) => reason === 'input' && searchUsers(val),\n                        getOptionLabel: option => option ? option.value : null,\n                        renderOption: option => option && <Typography>{option.value}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* created by office */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.createdByOffice')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='createdByOfficeId.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: firmOffices.toJS(),\n                        placeholder: t('projectListFilter.createdByOfficePlaceholder'),\n                        getOptionLabel: option => option ? option.officeName : null,\n                        renderOption: option => option && <Typography>{option.officeName}</Typography>\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* collaboration */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('projectListFilter.collaboration')}\n              </Typography>\n              <Grid\n                container={true}\n                item={true}\n                xs={12}\n                spacing={2}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                    name='isCollaborated.eq'\n                    component={FieldAutocomplete}\n                    props={{\n                      inputProps: {\n                        options: this.collaborated,\n                        placeholder: t('projectListFilter.collaboratedPlaceholder'),\n                        getOptionLabel: option => option ? option.text : null,\n                        renderOption: option => option && (\n                          <Grid container={true} wrap='nowrap'>\n                            {option.icon}\n                            <Typography>{option.text}</Typography>\n                          </Grid>\n                        )\n                      },\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* spec type */}\n              <Typography\n                variant='caption'\n                className={classes.subtitle}\n              >\n                {t('specListFilter.specType')}\n              </Typography>\n              <Grid\n                container={true}\n                justify='space-between'\n                item={true}\n                xs={12}\n              >\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isAi.neq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('specListFilter.nonAiSpec'),\n                      color: 'primary',\n                      helperText: false\n                    }}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={6}\n                >\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                    name='isAi.eq'\n                    component={FieldCheckbox}\n                    props={{\n                      label: t('specListFilter.aiSpec'),\n                      color: 'primary',\n                      helperText: false\n                    }}\n                  />\n                </Grid>\n              </Grid>\n\n            </Grid>\n          </form>\n        </Drawer>\n      </>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  drawer: {\n    height: '100%'\n  },\n  drawerPaper: {\n    position: 'inherit',\n    borderRadius: `0 ${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0`,\n  },\n  header: {\n    padding: theme.spacing(0, 2, 1, 0)\n  },\n  body: {\n    padding: theme.spacing(1, 0, 2, 2),\n    height: '100%',\n    maxWidth: '370px'\n  },\n  content: {\n    height: `calc(100% - 72px)`,\n    overflow: 'auto',\n  },\n  subtitleContainer: {\n    marginBottom: theme.spacing(1.5),\n  },\n  subtitle: {\n    color: theme.palette.text.primary,\n    fontSize: theme.typography.pxToRem(16)\n  },\n  buttonContainer: {\n    marginTop: 0,\n  },\n  avatar: {\n    background: theme.palette.primary.main\n  },\n  avatarText: {\n    color: theme.palette.primary.contrastText\n  },\n  dateInput: {\n    '& input': {\n      fontSize: theme.typography.caption.fontSize\n    },\n  }\n});\n\nconst mapStateToProps = (state, ownProps: IProjectListFilterComponentProps) => {\n\n  const form = ownProps.form != null ? ownProps.form : PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM;\n  const formValues = (getFormValues(form)(state) || Map<string, any>()) as Map<string, any>;\n  const selectedBuildingClassId = formValues.getIn(['buildingClassId', 'eq', 'id'], -1);\n  const firmId = makeSelectUserFirmId()(state);\n\n  return {\n    form,\n    selectedBuildingClassId,\n    ...createStructuredSelector({\n      adminDivisions: makeSelectAdminDivisions(),\n      buildingTypes: makeSelectBuildingTypes(selectedBuildingClassId),\n      countries: makeSelectCountries(),\n      provinces: makeSelectProvinces(),\n      cities: makeSelectCities(),\n      buildingClasses: makeSelectBuildingClasses(),\n      formValues: getFormValues(form),\n      users: makeSelectUsers(),\n      firmOffices: makeSelectOfficesByFirm({firmId}),\n      userOfficeId: makeSelectLoggedInUserOfficeId()\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    getBuildingTypes: (id: number) => {\n      dispatch(new GetBuildingTypesAction(id));\n    },\n    getBuildingClasses: () => {\n      dispatch(new GetBuildingClassesAction());\n    },\n    searchUsers: (searchTerm: string) => {\n      dispatch(new SearchUsersQuickAction({searchTerm, delay: false}));\n    },\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProjectListFilterComponentProps>> (\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM }),\n  reduxForm({\n    form: PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM,\n    destroyOnUnmount: false,\n    enableReinitialize : true,\n    touchOnChange: true\n  }),\n)(ProjectListFilter);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Typography, TableCell, Button\n} from '@material-ui/core';\nimport {\n  DeleteProjectAndSearchProjectsAction,\n  DuplicateProjectAction,\n  LoadingSearchedProjectAction\n} from '../../../modules/ProjectModule/actions';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport Project from '../../../models/Project';\nimport { togglePath } from '../../../components/TogglePath/utils';\nimport {\n  EDIT_PROJECT_PATH,\n  EDIT_TEST_PROJECT_PATH,\n  PROJECT_DETAIL_PATH,\n  PROJECT_DOWNLOAD_PATH\n} from '../../../constants';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../../modules/RouterModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { Filter, Option } from '../../../models';\nimport { LOADING_MODAL_ID } from '../../../components/LoadingModal/Component';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport EditIcon from '@material-ui/icons/Edit';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { DeleteModal, NestedMenu } from '../../../components';\nimport {RouteComponentProps} from 'react-router-dom';\nimport {withRouter} from 'react-router';\n\ninterface ICustomProjectActionButtonComponentProps {\n  project: IMap<Project>;\n  options: Option<Project>;\n  filters: Filter;\n  searchTerm: string;\n}\n\nexport interface ICustomProjectActionButtonProps extends ICustomProjectActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n  location: IMap<IRouterReducerLocation>;\n}\n\ntype CustomProjectActionButtonProps = ICustomProjectActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & RouteComponentProps;\n\nconst styles = (theme: Theme): StyleRules => ({\n  cell: {\n    whiteSpace: 'nowrap',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  icon: {\n    marginRight: theme.spacing(1.5)\n  }\n});\n\nconst CustomProjectActionButton: React.FC<CustomProjectActionButtonProps> = (props) => {\n  const {\n    classes,\n    dispatch,\n    project,\n    location,\n    options,\n    searchTerm,\n    filters,\n    t,\n    history,\n  } = props;\n\n  const projectId = project.get('id');\n\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [showDeleteModal, setShowDeleteModal] = React.useState(false);\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const handleOpen = (e: React.MouseEvent<HTMLButtonElement>) => {\n    setAnchorEl(e.currentTarget);\n  };\n\n  const toggleDeleteModal = () => {\n    setShowDeleteModal(!showDeleteModal);\n  };\n\n  const handleDelete = () => {\n    const mutableFilters: any = {\n      'and': [\n        ...(project.get('status') === 'test')\n        ? [{\n            'status': {\n              'eq': 'test'\n            }\n          }]\n        : []\n      ]\n    };\n    if (searchTerm) {\n      mutableFilters.and.push({\n        'or': [\n          {\n            'name': {\n              'like': searchTerm\n            }\n          },\n          {\n            'internalNo': {\n              'like': searchTerm\n            }\n          },\n        ]\n      });\n    }\n    filters && mutableFilters.and.push(...(filters as any).and); // tslint:disable-line\n    if (mutableFilters.and.length === 0) {\n      delete mutableFilters.and;\n    }\n    dispatch(new LoadingSearchedProjectAction());\n    dispatch(new DeleteProjectAndSearchProjectsAction({\n        id: projectId,\n        projectName: project.get('name') ?? '',\n        specIds: project?.get('specs')?.map((spec: any) => spec.id).join(',') ?? '',\n        options,\n        filters: mutableFilters\n      })\n    );\n    toggleDeleteModal();\n  };\n\n  const handleEditProject = () => {\n    const editPath = project.get('status') === 'test' ? EDIT_TEST_PROJECT_PATH : EDIT_PROJECT_PATH;\n    togglePath({\n      pathName: `${editPath}/${projectId}`,\n      dispatch,\n      location,\n    })()();\n  };\n\n  const handleDuplicateProject = () => {\n    dispatch(new DuplicateProjectAction({ projectId }));\n    dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: project.get('name') } }));\n    dispatch(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: true\n    }));\n  };\n  const menuItems = [\n    {\n      key: '__editProject',\n      caption: (\n        <Grid container={true} alignItems='center' wrap='nowrap'>\n          <EditIcon className={classes.icon} />\n          <Typography>{t('specAndProjectListCTA.edit')}</Typography>\n        </Grid>\n      ),\n      onClick: () => handleEditProject()\n    },\n    {\n      key: '__duplicateProject',\n      caption: (\n        <Grid container={true} alignItems='center' wrap='nowrap'>\n          <FileCopyIcon className={classes.icon} />\n          <Typography>{t('specAndProjectListCTA.duplicate')}</Typography>\n        </Grid>\n      ),\n      onClick: () => handleDuplicateProject()\n    },\n    {\n      key: '__deleteProject',\n      caption: (\n        <Grid container={true} alignItems='center' wrap='nowrap'>\n          <DeleteIcon className={classes.icon} />\n          <Typography>{t('specAndProjectListCTA.delete')}</Typography>\n        </Grid>\n      ),\n      onClick: () => toggleDeleteModal()\n    }\n  ];\n\n  return (\n    <TableCell className={classes.cell}>\n      <Button\n        color='primary'\n        onClick={handleOpen}\n      >\n        {t('tableCell.action')}\n      </Button>\n      <NestedMenu\n        anchorEl={anchorEl}\n        open={Boolean(anchorEl)}\n        onClose={handleClose}\n        menuItems={menuItems}\n      />\n      <DeleteModal\n        idToDelete={projectId}\n        open={showDeleteModal}\n        itemName={project.get('name')}\n        additionalText={t('deleteModal.deleteProjectWillDeleteSpecs')}\n        toggleDeleteModal={toggleDeleteModal}\n        handleDelete={handleDelete}\n        withLoading={false}\n      />\n    </TableCell>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  location: makeSelectLocation(),\n});\n\n\nexport default compose<React.ComponentClass<ICustomProjectActionButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  withRouter,\n  connect(mapStateToProps, mapDispatchToProps)\n)(CustomProjectActionButton);\n","import { Button, createStyles, Grid, IconButton, makeStyles, TableCell, TableRow, Theme, Tooltip, Typography } from '@material-ui/core';\nimport * as React from 'react';\nimport CheckIcon from '@material-ui/icons/Check';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CreateIcon from '@material-ui/icons/Create';\nimport { List, OrderedSet, Seq } from 'immutable';\nimport classnames from 'classnames';\nimport { Attribute } from '../../../../models';\nimport { IMap } from 'ats-utils/src';\nimport RecommendedAttribute from '../../../../models/RecommendedAttribute';\nimport { connect, useDispatch } from 'react-redux';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../../modules/ApplicationModule/actions';\nimport { PRINT_DESCRIPTION_MODAL_ID } from '../../../../components/PrintDescriptionModal/Component';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport { makeSelectSite, makeSelectUserHasPimPrintDescriptionAcl } from '../../../../modules/AtsModule/selectors';\nimport { SiteName } from '../../../../constants';\n\ninterface IFeatureRowsComponentProps {\n  features: Seq.Indexed<[string, IMap<Attribute>]>;\n  attributeOrder: OrderedSet<any>;\n  openAttributeDialog: (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => void;\n  openDeleteDialog: (name: string, key: string) => void;\n}\n\ninterface IFeatureRowsProps extends IFeatureRowsComponentProps {\n  hasPimPrintDescriptionAcl: boolean;\n  site: string;\n}\n\nconst FeatureRows: React.FC<IFeatureRowsProps & WithTranslation> = ({\n  features,\n  attributeOrder,\n  openAttributeDialog,\n  openDeleteDialog,\n  hasPimPrintDescriptionAcl,\n  site,\n  t\n}) => {\n  const dispatch = useDispatch();\n  const isPimTool = site === SiteName.pim;\n  return (\n    <>\n      {\n        features\n          .map(([key, attribute]) => {\n            const name = attribute.get('name');\n            const description = attribute.getIn(['values', 0, 'description']);\n            const printDescriptionCsi = attribute.getIn(['values', 0, 'printDescription', 'csi']);\n            // 'optionKey' is used in advance configurations\n            const values = attribute.get('values').map(value => value.get('key') ? value : value.set('key', value.get('optionKey')));\n            const attrKey = attribute.getIn(['values', 0, 'key']) || attribute.getIn(['values', 0, 'optionKey']);\n\n            return (\n              <TableRow\n                key={name}\n              >\n                <TableCell />\n                <TableCell component='th' scope='row'>{name}</TableCell>\n                  <NestedCell arr={values} arrKey='key'/>\n                  <NestedCell arr={values} arrKey='unit' align='center'/>\n                  <NestedCell arr={values} arrKey='value'/>\n                <TableCell align='left'>\n                  <Grid>\n                    <Typography color='textPrimary' variant='body2'>{description}</Typography>\n                    {printDescriptionCsi && hasPimPrintDescriptionAcl && isPimTool &&\n                      <Button\n                        color='primary'\n                        size='small'\n                        onClick={() => {\n                          dispatch(new SetOverlayComponentPropsAction({\n                            id: PRINT_DESCRIPTION_MODAL_ID,\n                            props: {\n                              description,\n                              printDescription: printDescriptionCsi\n                            }\n                          }));\n                          dispatch(new ToggleOverlayComponentAction({ id: PRINT_DESCRIPTION_MODAL_ID, open: true}));\n                        }}\n                      >\n                        {t('SeriesDetailPage.printDescription')}\n                      </Button>\n                    }\n                  </Grid>\n                </TableCell>\n                <TableCell align='center'>\n                  {\n                    attributeOrder && attributeOrder.size === 0\n                    ? <CheckIcon color='primary'/>\n                    : attributeOrder && attributeOrder.includes(attrKey)\n                      ? <CheckIcon color='primary'/>\n                      : null\n                  }\n                </TableCell>\n                {\n                  <TableCell align='center'>\n                    <IconButton\n                      size='small'\n                      onClick={() => openAttributeDialog(attribute)}\n                    >\n                      <CreateIcon fontSize='small'/>\n                    </IconButton>\n                    <IconButton\n                      size='small'\n                      onClick={() => openDeleteDialog(name, key)}\n                    >\n                      <DeleteIcon fontSize='small'/>\n                    </IconButton>\n                  </TableCell>\n                }\n              </TableRow>\n            );\n          })\n      }\n    </>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectUserHasPimPrintDescriptionAcl = makeSelectUserHasPimPrintDescriptionAcl();\n  const selectSite = makeSelectSite();\n  return function mapStateToProps(state) {\n    return ({\n      hasPimPrintDescriptionAcl: selectUserHasPimPrintDescriptionAcl(state),\n      site: selectSite(state)\n    });\n  };\n};\n\nexport default compose<React.FC<IFeatureRowsComponentProps>>(\n  connect(makeMapStateToProps, null),\n  withTranslation('translations'),\n)(FeatureRows);\n\n\ntype Align = 'inherit' | 'left' | 'center' | 'right' | 'justify';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  nestedCell: {\n    padding: theme.spacing(0, 2),\n  },\n  nestedGrid: {\n    padding: theme.spacing(0.5, 0),\n    maxWidth: '150px',\n  },\n  truncateText: {\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    whiteSpace: 'nowrap',\n  },\n}));\n\ninterface INestedCell {\n  arr: List<any>;\n  arrKey: string;\n  align?: Align;\n}\n\nexport const NestedCell: React.FC<INestedCell> = ({\n  arr,\n  arrKey,\n  align = 'left',\n}) => {\n  const classes = useStyles();\n  return (\n    <TableCell align={align} padding='none' className={classes.nestedCell}>\n      <Grid container={true} direction='column' justify='space-evenly'>\n        {arr.map((value, key) => (\n          <Tooltip title={value.get(arrKey) || ''} key={value}>\n            <Grid item={true} className={classnames(classes.nestedGrid, classes.truncateText)}>{value.get(arrKey) || '-'}</Grid>\n          </Tooltip>\n        )\n      )}\n      </Grid>\n    </TableCell>\n  );\n};","import * as React from 'react';\nimport { Grid, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, TablePagination, makeStyles, Theme, createStyles, useTheme } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { List, OrderedMap, OrderedSet, Map, fromJS } from 'immutable';\nimport { IAction, IMap } from 'ats-utils/src';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport { connect, useSelector } from 'react-redux';\nimport { SetAttributeDialogStateAction } from '../../../../modules/ApplicationModule/actions';\nimport { createStructuredSelector } from 'reselect';\nimport { getFormValues } from 'redux-form/immutable';\nimport { Attribute } from '../../../../models';\nimport { change } from 'redux-form';\nimport RecommendedAttribute from '../../../../models/RecommendedAttribute';\nimport NoAttributesFound from '../NoAttributesFound';\nimport DeleteModalDialog from '../../../../components/DeleteModalDialog';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { makeSelectCategoryToAttributeWhitelistMap } from '../../../../modules/ProductModule/selectors';\nimport FeatureRows from './FeatureRows';\nimport { AtsSvgEmptyFeaturesOptions } from '../../../../components/AtsSvg';\nimport { makeSelectCombinedMandatoryRecommendedAttributes } from '../../../../modules/PimModule/selectors';\nimport RecommendedRows from '../UnlistedAttributesWidget/RecommendedRows';\nimport { makeSelectIsAutoquote } from '../../../../modules/AtsModule/selectors';\n\n\ninterface IFeaturesComponentProps {\n  formName: string;\n}\n\ninterface IFeaturesProps extends IFeaturesComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  formValues: any;\n  combinedMandatoryRecommendedAttributes: List<IMap<RecommendedAttribute>>;\n  categoryToAttributeWhiteListMap: Map<number, OrderedSet<string>>;\n}\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  title: {\n    padding: theme.spacing(2, 0, 1),\n  },\n  pagination: {\n    border: 'none',\n  },\n  toolbar: {\n    paddingLeft: '0px'\n  },\n  noWrap: {\n    whiteSpace: 'nowrap',\n  },\n  grey: {\n    color: theme.palette.grey[600],\n  },\n}));\n\nexport const ROWS_PER_PAGE = 10;\n\nconst Features: React.FC<IFeaturesProps & WithTranslation> = (props): JSX.Element => {\n  const {\n    dispatch,\n    formValues,\n    combinedMandatoryRecommendedAttributes,\n    categoryToAttributeWhiteListMap,\n    formName,\n    t,\n  } = props;\n\n  const theme = useTheme();\n  const classes = useStyles();\n  const isAutoquote = useSelector(makeSelectIsAutoquote());\n\n  const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false);\n  const [nameToDelete, setNameToDelete] = React.useState('');\n  const [keyToDelete, setKeyToDelete] = React.useState('');\n\n  const [page, setPage] = React.useState(0);\n  const handleChangePage = (event: unknown, newPage: number) => setPage(newPage);\n\n  const formCategoryId = formValues && formValues.getIn(['categoryName', 'id']);\n\n  const formAttributes: Map<string, IMap<Attribute>> = formValues && formValues.get('attributes') || Map();\n  const filteredFormAttributes = formAttributes\n    .map((attr) => {\n      const values = attr.get('values');\n      const validValues = values.filter((value) => value.get('status') !== 'deleted');\n      return attr.set('values', validValues);\n    })\n    .filter((attr) => attr.get('values').count());\n\n  const formAttributesOptions = formValues && formValues.get('attributeOptions') || Map();\n  const filteredFormAttributesOptions = formAttributesOptions\n    .map((attr) => {\n      const values = attr.get('values');\n      const validValues = values.filter((value) => value.get('status') !== 'deleted');\n      return attr.set('values', validValues);\n    })\n    .filter((attr) => attr.get('values').count());\n\n  const formFeatures = filteredFormAttributes.filter(attribute => attribute.get('isAttribute'));\n  const attributeOrder = categoryToAttributeWhiteListMap && categoryToAttributeWhiteListMap.get(formCategoryId) || OrderedSet();\n\n  // anytime the brand or category changes in SeriesInfo, it calls searchRecommendedAttributes\n  // Features comp displays the recommendedAttributes response\n  // if recommended attribute already in series, don't show\n  const filteredRecommendedAttributes = combinedMandatoryRecommendedAttributes && combinedMandatoryRecommendedAttributes\n  .filter((recommendedAttr) => {\n    const recommendedAttrKey = recommendedAttr.get('attributeKey');\n    return !filteredFormAttributes.has(recommendedAttrKey) && !filteredFormAttributesOptions.has(recommendedAttrKey);\n  }) || List<IMap<RecommendedAttribute>>();\n\n  const getSortedFeatures = () => {\n    if (attributeOrder.size === 0) {\n      return formFeatures;\n    }\n\n    const sortableMap = attributeOrder.reduce((acc, val) => {\n      const found = formFeatures.findEntry(attr => attr.getIn(['values', 0, 'key']) === val);\n      if (found) {\n        const [key, value] = found;\n        return acc.set(key, value);\n      }\n      return acc;\n    }, OrderedMap()) as OrderedMap<string, IMap<Attribute>>;\n\n    const unsortableMap = formFeatures && formFeatures.filter((attr, key) => {\n        return !attributeOrder.includes(attr.getIn(['values', 0, 'key']));\n    }).toOrderedMap();\n\n    const sorted = sortableMap && sortableMap.mergeDeep(unsortableMap);\n    return sorted;\n  };\n\n  const slicedSortedFeatures = getSortedFeatures().entrySeq()\n  .slice(page * ROWS_PER_PAGE, page * ROWS_PER_PAGE + ROWS_PER_PAGE);\n\n  const deleteAttribute = (key: string) => {\n    const updated = formValues && formValues.get('attributes').filter((attr, attrKey) => attrKey !== key);\n    dispatch(change(formName, 'attributes', updated));\n    setDeleteDialogOpen(false);\n  };\n\n  const openAttributeDialog = (attribute?: IMap<Attribute> | IMap<RecommendedAttribute>) => {\n    dispatch(new SetAttributeDialogStateAction(fromJS({\n      open: true,\n      ...(attribute && { attribute }),\n    })));\n  };\n\n  const openDeleteDialog = (name: string, key: string) => {\n    setDeleteDialogOpen(true);\n    setNameToDelete(name);\n    setKeyToDelete(key);\n  };\n\n  const isEmpty = isAutoquote\n    ? filteredRecommendedAttributes.size === 0 && getSortedFeatures().size === 0\n    : getSortedFeatures().size === 0;\n\n  return (\n    <Grid item={true} xs={12}>\n      {\n        isEmpty\n        ? <NoAttributesFound\n          SvgElement={<AtsSvgEmptyFeaturesOptions width='95' height='95' color={theme.palette.secondary[300]} shadowColor={theme.palette.secondary.main}/>}\n          title={t('SeriesDetailPage.noFeatures')}\n          subtitle={t('SeriesDetailPage.noFeaturesSubtitle')}\n          buttonText={t('SeriesDetailPage.addFeature')}\n          onClick={() => openAttributeDialog()}\n        />\n        : (\n          <>\n            <TableContainer>\n              <Table\n                aria-label='attributes table'\n              >\n                <TableHead>\n                  <TableRow>\n                    <TableCell />\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.attribute')}</TableCell>\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.key')}</TableCell>\n                    <TableCell className={classes.grey} align='center'>{t('SeriesAttributesWidget.unit')}</TableCell>\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.value')}</TableCell>\n                    <TableCell className={classes.grey} align='left'>{t('SeriesAttributesWidget.description')}</TableCell>\n                    <TableCell className={classnames(classes.grey, classes.noWrap)} align='center'><ArrowDownwardIcon fontSize='small'/>{t('SeriesAttributesWidget.visible')}</TableCell>\n                    <TableCell className={classnames(classes.grey, classes.noWrap)} align='center'>{t('formButtons.actions')}</TableCell>\n                  </TableRow>\n                </TableHead>\n                <TableBody>\n                  {\n                    isAutoquote && (\n                      <RecommendedRows\n                        filteredRecommendedAttributes={filteredRecommendedAttributes}\n                        openAttributeDialog={openAttributeDialog}\n                      />\n                    )\n                  }\n                  <FeatureRows\n                    features={slicedSortedFeatures}\n                    attributeOrder={attributeOrder}\n                    openAttributeDialog={openAttributeDialog}\n                    openDeleteDialog={openDeleteDialog}\n                  />\n                </TableBody>\n              </Table>\n            </TableContainer>\n            <table>\n              <tbody>\n                <tr>\n                  <TablePagination\n                    count={formFeatures && formFeatures.size}\n                    onChangePage={handleChangePage}\n                    page={page}\n                    rowsPerPage={ROWS_PER_PAGE}\n                    rowsPerPageOptions={[]}\n                    className={classes.pagination}\n                    classes={{\n                      toolbar: classes.toolbar\n                    }}\n                  />\n                </tr>\n              </tbody>\n            </table>\n            <DeleteModalDialog\n              itemName={nameToDelete}\n              idToDelete={keyToDelete}\n              open={deleteDialogOpen}\n              toggleDeleteModal={() => setDeleteDialogOpen(!deleteDialogOpen)}\n              handleDelete={deleteAttribute}\n              withLoading={false}\n            />\n          </>\n        )\n      }\n    </Grid>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n  combinedMandatoryRecommendedAttributes: makeSelectCombinedMandatoryRecommendedAttributes(),\n  categoryToAttributeWhiteListMap: makeSelectCategoryToAttributeWhitelistMap(),\n})(state);\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.FC<IFeaturesComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(Features);","import * as React from 'react';\nimport { Grid, IconButton } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS } from 'immutable';\nimport AddIcon from '@material-ui/icons/Add';\nimport { IAttributeOptionDialogState } from '../../../../modules/ApplicationModule/reducer';\nimport { SetAttributeDialogStateAction } from '../../../../modules/ApplicationModule/actions';\nimport { connect } from 'react-redux';\nimport { WidgetHeaderEndStyle, WidgetHeaderStyle, WidgetLoaderStyle } from '../../../../components';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport Features from './Features';\n\ninterface IFeaturesWidgetComponentProps {\n  formName: string;\n}\n\ninterface IFeaturesWidgetProps extends IFeaturesWidgetComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  setAttributeDialogState: (payload: IMap<IAttributeOptionDialogState>) => void;\n}\n\nconst FeaturesWidget: React.FC<IFeaturesWidgetProps & WithTranslation> = (props) => {\n  const {\n    formName,\n    t,\n    setAttributeDialogState\n  } = props;\n\n  const openFeaturesDialog = () => {\n    setAttributeDialogState(fromJS({\n      open: true\n    }));\n  };\n\n  return (\n    <WidgetLoaderStyle\n      noAuto={true}\n      header={\n        <Grid container={true}>\n          <Grid container={true} item={true} xs={true} alignItems='center'>\n            <WidgetHeaderStyle>\n              {t('SeriesDetailPage.features')}\n            </WidgetHeaderStyle>\n          </Grid>\n          <WidgetHeaderEndStyle>\n            <IconButton\n              onClick={openFeaturesDialog}\n            >\n              <AddIcon fontSize='large'/>\n            </IconButton>\n          </WidgetHeaderEndStyle>\n          <Features formName={formName} />\n        </Grid>\n      }\n    />\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    setAttributeDialogState: (payload: IMap<IAttributeOptionDialogState>) => {\n      dispatch(new SetAttributeDialogStateAction(payload));\n    },\n  };\n};\n\nexport default compose<React.FC<IFeaturesWidgetComponentProps>>(\n  connect(null, mapDispatchToProps),\n  withTranslation('translations'),\n)(FeaturesWidget);\n\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { filenameIsInApp, node } from './node-stack-trace';\n\nexport { filenameIsInApp };\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirst: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n","import React from 'react';\nimport { fromJS, List, Map } from 'immutable';\nimport {\n  Box,\n  Checkbox,\n  Chip,\n  Dialog,\n  DialogContent,\n  IconButton,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableRow,\n  Theme,\n  Typography,\n  makeStyles,\n  StyleRules,\n  Grid,\n} from '@material-ui/core';\nimport { Autocomplete, createFilterOptions } from '@material-ui/lab';\nimport TextField from '@material-ui/core/TextField';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslation } from 'react-i18next';\nimport { batch, useDispatch, useSelector } from 'react-redux';\nimport { arrayPush, arrayRemove, change } from 'redux-form';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { AtsApiCallAction } from '../../modules/AtsModule/actions';\nimport { SetSnackbarOpenAction } from '../../modules/ApplicationModule/actions';\nimport { makeSelectManufacturerDiscounts, makeSelectManufacturerDiscountsIndexMap } from '../../modules/AccountModule/selectors';\nimport { AddManufacturerDiscountsToQuoteAction, UpdateAllSectionTotalThenGrandTotalAction } from '../../modules/QuoteEditModule/actions';\nimport { constructDiscountsMap } from '../../containers/Quote/utils';\n\ninterface IManufacturerDiscountsTabProps {\n  preview: boolean;\n  selectedManufacturerDiscounts: List<number>;\n}\n\nconst useStyles = makeStyles((theme: Theme): StyleRules => ({\n  searchContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  searchLabel: {\n    fontSize: theme.typography.pxToRem(12),\n    color: theme.palette.text.secondary,\n    marginBottom: theme.spacing(0.5),\n  },\n  table: {\n    '& th': {\n      borderBottom: `1px solid ${theme.palette.divider}`,\n    },\n    '& td': {\n      borderBottom: `1px solid ${theme.palette.divider}`,\n    },\n  },\n  manufacturerName: {\n    color: theme.palette.primary.main,\n    fontWeight: 500,\n    cursor: 'pointer',\n    '&:hover': {\n      textDecoration: 'underline',\n    },\n  },\n  discountCount: {\n    color: theme.palette.text.secondary,\n  },\n  viewLink: {\n    color: theme.palette.primary.main,\n    cursor: 'pointer',\n    fontWeight: 500,\n    '&:hover': {\n      textDecoration: 'underline',\n    },\n  },\n  dialogTitle: {\n    padding: theme.spacing(2, 3),\n  },\n  detailTable: {\n    backgroundColor: theme.palette.grey[50],\n    '& td': {\n      borderBottom: `1px solid ${theme.palette.divider}`,\n      padding: theme.spacing(1.5, 1),\n      // verticalAlign: 'top',\n    },\n  },\n  categoryChip: {\n    margin: theme.spacing(0.25),\n    backgroundColor: theme.palette.grey[200],\n    color: theme.palette.text.primary,\n    height: 24,\n    fontSize: theme.typography.pxToRem(12),\n  },\n  categoriesCell: {\n    display: 'flex',\n    flexWrap: 'wrap',\n    gap: theme.spacing(0.5),\n  },\n  textSecondaryCell: {\n    color: theme.palette.text.secondary,\n  },\n  includedNotesSection: {\n    padding: theme.spacing(2),\n    backgroundColor: theme.palette.grey[200],\n    borderBottom: `1px solid ${theme.palette.divider}`\n  },\n  includedNotesTitle: {\n    fontWeight: 600,\n    marginBottom: theme.spacing(1),\n  },\n  noteRow: {\n    display: 'flex',\n    alignItems: 'flex-start',\n    marginBottom: theme.spacing(1),\n  },\n  noteCheckbox: {\n    padding: theme.spacing(0, 1, 0, 0),\n  },\n  noteLabel: {\n    fontWeight: 500,\n    minWidth: 100,\n    marginRight: theme.spacing(1),\n  },\n  noteText: {\n    color: theme.palette.text.secondary,\n    flex: 1,\n  },\n}));\n\nconst ManufacturerDiscountsTab: React.FC<IManufacturerDiscountsTabProps> = ({\n  preview,\n  selectedManufacturerDiscounts = List(),\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const manufacturerDiscounts = useSelector(makeSelectManufacturerDiscounts());\n  const manufacturerDiscountsIndexMap = useSelector(makeSelectManufacturerDiscountsIndexMap());\n\n  const [inputSearchTerm, setInputSearchTerm] = React.useState('');\n  const [viewDialogOpen, setViewDialogOpen] = React.useState(false);\n  const [viewingManufacturer, setViewingManufacturer] = React.useState<Map<string, any> | null>(null);\n\n  const currentDiscounts = React.useMemo(() => {\n    return selectedManufacturerDiscounts\n      .map((id) => manufacturerDiscounts.get(manufacturerDiscountsIndexMap.get(id)))\n      .filter((entry) => entry !== undefined)\n      .sort((a, b) => {\n        const labelA = a.getIn(['manufacturer', 'label']);\n        const labelB = b.getIn(['manufacturer', 'label']);\n        return labelA.localeCompare(labelB);\n      });\n  }, [selectedManufacturerDiscounts, manufacturerDiscounts, manufacturerDiscountsIndexMap]);\n\n  // Build options for the search autocomplete (exclude already selected manufacturers)\n  const manufacturerOptions = React.useMemo(() => {\n    if (!manufacturerDiscounts) { return []; }\n    const selectedIds = selectedManufacturerDiscounts.toSet();\n    return manufacturerDiscounts\n      .filter((discount) => !selectedIds.has(discount.getIn(['manufacturer', 'id'])))\n      .toJS();\n  }, [manufacturerDiscounts, selectedManufacturerDiscounts]);\n\n  // Custom filter function that filters by manufacturer.label\n  const filterOptions = createFilterOptions({\n    stringify: (option: any) => option?.manufacturer?.label || '',\n  });\n\n  const handleViewClick = (manufacturer: Map<string, any>) => {\n    setViewingManufacturer(manufacturer);\n    setViewDialogOpen(true);\n  };\n\n  const handleCloseViewDialog = () => {\n    setViewDialogOpen(false);\n    setViewingManufacturer(null);\n  };\n\n  const handleDeleteManufacturer = (manufacturerId: number) => {\n    const index = selectedManufacturerDiscounts.indexOf(manufacturerId);\n    if (index !== -1) {\n      let discountsToRemove = fromJS({});\n      batch(() => {\n        dispatch(arrayRemove(QUOTE_FORM_NAME, 'discounts.manufacturerDiscounts', index));\n        dispatch(change(\n          QUOTE_FORM_NAME,\n          'temp.discounts.manufacturer',\n          constructDiscountsMap({\n            manufacturerDiscounts: currentDiscounts.filter((group) => {\n              if (group.getIn(['manufacturer', 'id']) !== manufacturerId) {\n                return true;\n              } else {\n                discountsToRemove = constructDiscountsMap({ manufacturerDiscounts: List([group]) });\n                return false;\n              }\n            }) }))\n        );\n      });\n      dispatch(new UpdateAllSectionTotalThenGrandTotalAction({\n        type: 'manufacturer',\n        discountsToRemove,\n      }));\n    }\n  };\n\n  const handleSelectManufacturer = (manufacturerId: number) => {\n    const newDetailedManufacturerDiscount = manufacturerDiscounts.get(manufacturerDiscountsIndexMap.get(manufacturerId));\n    batch(() => {\n      dispatch(arrayPush(QUOTE_FORM_NAME, 'discounts.manufacturerDiscounts', manufacturerId));\n      dispatch(change(\n        QUOTE_FORM_NAME,\n        'temp.discounts.manufacturer',\n        constructDiscountsMap({\n          manufacturerDiscounts: currentDiscounts.push(newDetailedManufacturerDiscount)\n        })\n      ));\n    });\n    dispatch(new UpdateAllSectionTotalThenGrandTotalAction({\n      type: 'manufacturer',\n      discountsToApply: constructDiscountsMap({ manufacturerDiscounts: List([newDetailedManufacturerDiscount]) })\n    }));\n  };\n\n  const getDiscountCount = (manufacturer: Map<string, any>) => {\n    const regions = manufacturer.get('regions') as List<Map<string, any>> || List();\n    return regions.reduce((total, region) => {\n      const types = region.get('types') as List<any> || List();\n      return total + types.size;\n    }, 0);\n  };\n\n  return (\n    <Box>\n      {/* Search Dropdown */}\n      {!preview && (\n        <Box className={classes.searchContainer}>\n          <Typography className={classes.searchLabel}>\n            {t('quoteDiscounts.searchForManufacturerDiscount')}\n          </Typography>\n          <Autocomplete\n            style={{ width: '100%' }}\n            options={manufacturerOptions}\n            getOptionLabel={(option: any) => option?.manufacturer?.label || ''}\n            filterOptions={filterOptions}\n            value={null}\n            blurOnSelect={true}\n            inputValue={inputSearchTerm}\n            onInputChange={(e, value, reason) => {\n              if (reason === 'reset') {\n                setInputSearchTerm('');\n              } else {\n                setInputSearchTerm(value);\n              }\n            }}\n            onChange={(_, newValue) => {\n              if (newValue) {\n                handleSelectManufacturer(newValue.manufacturer.id);\n              }\n            }}\n            renderInput={(params) => (\n              <TextField\n                {...params}\n                fullWidth={true}\n                size='small'\n                placeholder={t('quoteDiscounts.selectPlaceholder')}\n              />\n            )}\n          />\n        </Box>\n      )}\n\n      {/* Table */}\n      <Table className={classes.table}>\n        <TableHead>\n          <TableRow>\n            <TableCell>{t('quoteDiscounts.manufacturer')}</TableCell>\n            <TableCell>{t('quoteDiscounts.discount')}</TableCell>\n            <TableCell />\n            {!preview && <TableCell align='right'>{t('quoteDiscounts.action')}</TableCell>}\n          </TableRow>\n        </TableHead>\n        <TableBody>\n          {currentDiscounts.map((manufacturerDiscountGroup: Map<string, any>) => {\n            const groupId = manufacturerDiscountGroup.get('id');\n            const manufacturerId = manufacturerDiscountGroup.getIn(['manufacturer', 'id']);\n            const manufacturerLabel = manufacturerDiscountGroup.getIn(['manufacturer', 'label']);\n            const discountCount = getDiscountCount(manufacturerDiscountGroup);\n\n            return (\n              <TableRow key={groupId}>\n                <TableCell>\n                  <Typography\n                    className={classes.manufacturerName}\n                    onClick={() => handleViewClick(manufacturerDiscountGroup)}\n                  >\n                    {manufacturerLabel}\n                  </Typography>\n                </TableCell>\n                <TableCell>\n                  <Typography className={classes.discountCount}>\n                    {discountCount} {discountCount === 1 ? t('discountManagement.discount') : t('discountManagement.discounts')}\n                  </Typography>\n                </TableCell>\n                <TableCell>\n                  <Typography\n                    className={classes.viewLink}\n                    onClick={() => handleViewClick(manufacturerDiscountGroup)}\n                  >\n                    {t('quoteDiscounts.view')}\n                  </Typography>\n                </TableCell>\n                {!preview && (\n                  <TableCell align='right'>\n                    <IconButton\n                      size='small'\n                      onClick={() => handleDeleteManufacturer(manufacturerId)}\n                    >\n                      <DeleteIcon />\n                    </IconButton>\n                  </TableCell>\n                )}\n              </TableRow>\n            );\n          })}\n        </TableBody>\n      </Table>\n\n      {/* View Details Dialog */}\n      <Dialog\n        open={viewDialogOpen}\n        onClose={handleCloseViewDialog}\n        maxWidth='md'\n        fullWidth={true}\n      >\n        <Grid container={true} justify='space-between' alignItems='center' className={classes.dialogTitle}>\n          <Typography variant='h6'>\n            {t('quoteDiscounts.discountDetails', { brand: viewingManufacturer?.getIn(['manufacturer', 'label']) })}\n          </Typography>\n          <IconButton size='small' onClick={handleCloseViewDialog}>\n            <CloseIcon />\n          </IconButton>\n        </Grid>\n        <DialogContent style={{ paddingBottom: 24}}>\n          {viewingManufacturer && (\n            <>\n              <Table className={classes.detailTable} size='small'>\n                <TableBody>\n                  {(viewingManufacturer.get('regions') as List<Map<string, any>> || List()).map((region: Map<string, any>, regionIndex: number) => {\n                    const regionLabel = region.getIn(['region', 'label']) as string;\n                    const types = region.get('types') as List<Map<string, any>> || List();\n\n                    return types.map((typeEntry: Map<string, any>, typeIndex: number) => {\n                      const categories = typeEntry.get('categories') as List<Map<string, any>> || List();\n                      const categoryChips = categories.size === 0\n                        ? [{ label: t('discountManagement.AllCategories'), key: 'all' }]\n                        : categories.map((cat: Map<string, any>) => ({ label: cat.get('label'), key: cat.get('id') })).toJS();\n\n                      return (\n                        <TableRow key={`${regionIndex}-${typeIndex}`}>\n                          <TableCell className={classes.textSecondaryCell}>\n                            {typeIndex ? '' : regionLabel}\n                          </TableCell>\n                          <TableCell className={classes.textSecondaryCell}>{typeEntry.get('value')}</TableCell>\n                          <TableCell className={classes.textSecondaryCell}>{t(`discountManagement.${typeEntry.get('type')}`)}</TableCell>\n                          <TableCell>\n                            <Box className={classes.categoriesCell}>\n                              {categoryChips.map((chip: any) => (\n                                <Chip\n                                  key={chip.key}\n                                  label={chip.label}\n                                  size='small'\n                                  className={classes.categoryChip}\n                                />\n                              ))}\n                            </Box>\n                          </TableCell>\n                        </TableRow>\n                      );\n                    });\n                  })}\n                </TableBody>\n              </Table>\n\n{/* Included Notes Section - commented out for now\n              <Box className={classes.includedNotesSection}>\n                <Typography className={classes.includedNotesTitle}>\n                  {t('quoteDiscounts.includedNotes')}:\n                </Typography>\n\n                <Box className={classes.noteRow}>\n                  <Checkbox\n                    checked={viewingManufacturer.get('useSectionNotes', false)}\n                    disabled={true}\n                    className={classes.noteCheckbox}\n                    color='primary'\n                  />\n                  <Typography className={classes.noteLabel}>\n                    {t('quoteDiscounts.sectionNotes')}:\n                  </Typography>\n                  <Typography className={classes.noteText}>\n                    {viewingManufacturer.get('sectionNote', '')}\n                  </Typography>\n                </Box>\n\n                <Box className={classes.noteRow}>\n                  <Checkbox\n                    checked={viewingManufacturer.get('useTermsNote', false)}\n                    disabled={true}\n                    className={classes.noteCheckbox}\n                    color='primary'\n                  />\n                  <Typography className={classes.noteLabel}>\n                    {t('quoteDiscounts.specialTerms')}:\n                  </Typography>\n                  <Typography className={classes.noteText}>\n                    {viewingManufacturer.get('termsNote', '')}\n                  </Typography>\n                </Box>\n\n                <Box className={classes.noteRow}>\n                  <Checkbox\n                    checked={viewingManufacturer.get('useCommentNote', false)}\n                    disabled={true}\n                    className={classes.noteCheckbox}\n                    color='primary'\n                  />\n                  <Typography className={classes.noteLabel}>\n                    {t('quoteDiscounts.comments')}:\n                  </Typography>\n                  <Typography className={classes.noteText}>\n                    {viewingManufacturer.get('commentNote', '')}\n                  </Typography>\n                </Box>\n              </Box>\n              */}\n            </>\n          )}\n        </DialogContent>\n      </Dialog>\n    </Box>\n  );\n};\n\nexport default ManufacturerDiscountsTab;\n","import React from 'react';\nimport { List } from 'immutable';\nimport { Contact } from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport {\n  Box,\n  Button,\n  StyleRules,\n  Theme,\n  makeStyles,\n  Tabs,\n  Tab,\n  CardContent,\n  Card,\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport QuoteCustomersWithBid, { BID_FORM_NAME } from '../QuoteCustomersWithBid';\nimport ManufacturerDiscountsTab from './ManufacturerDiscountsTab';\nimport { makeSelectSelectedContactId } from '../../modules/ContactModule/selectors';\nimport ViewColumnRoundedIcon from '@material-ui/icons/ViewColumnRounded';\nimport { destroy } from 'redux-form';\n\ninterface IQuoteDiscountsTabsProps {\n  preview?: boolean;\n  selectedCustomers: List<IMap<Contact>>;\n  contacts?: List<IMap<Contact>>;\n  onApplyDiscount?: (customer: any) => void;\n  selectedManufacturerDiscounts: List<number>;\n}\n\nconst useStyles = makeStyles((theme: Theme): StyleRules => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n    overflow: 'inherit'\n  },\n  tabsContainer: {\n    marginBottom: theme.spacing(2),\n  },\n  tab: {\n    minWidth: 'auto',\n  },\n}));\n\nconst QuoteDiscountsTabs: React.FC<IQuoteDiscountsTabsProps> = ({\n  preview = false,\n  selectedCustomers,\n  contacts,\n  onApplyDiscount,\n  selectedManufacturerDiscounts,\n}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n\n  const [activeTab, setActiveTab] = React.useState(0);\n\n  const [openColumnsDrawer, setOpenColumnsDrawer] = React.useState(false);\n  const selectedCustomerId = useSelector(makeSelectSelectedContactId());\n\n  React.useEffect(() => {\n    return () => {\n      dispatch(destroy(BID_FORM_NAME));\n    };\n  }, []);\n\n  const handleTabChange = (_event: React.ChangeEvent<{}>, newValue: number) => {\n    setActiveTab(newValue);\n  };\n\n  const toggleColumnsDrawer = () => {\n    setOpenColumnsDrawer(!openColumnsDrawer);\n  };\n\n  return (\n    <Card className={classes.card}>\n      <CardContent>\n        <Box style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>\n          <Box display='flex' justifyContent='space-between' alignItems='center' className={classes.tabsContainer}>\n            <Tabs\n              value={activeTab}\n              onChange={handleTabChange}\n              textColor='primary'\n              indicatorColor='primary'\n            >\n              <Tab label={t('quoteDiscounts.customerDiscounts')} className={classes.tab} />\n              <Tab label={t('quoteDiscounts.manufacturerDiscounts')} className={classes.tab} />\n            </Tabs>\n            {(activeTab === 0 && !preview) && (\n              <Box display='flex'>\n                <Button color='primary' onClick={toggleColumnsDrawer}>\n                  <ViewColumnRoundedIcon className={classes.columnIcon} />\n                  {t('quoteCustomerTable.columnButton')}\n                </Button>\n                <Button color='primary' disabled={!Boolean(selectedCustomerId)} onClick={() =>\n                  selectedCustomerId ? onApplyDiscount(selectedCustomers.find(c => c.get('id') === selectedCustomerId)) : null\n                }>\n                  {t('quoteCustomerTable.resetCustomerDiscount')}\n                </Button>\n              </Box>\n            )}\n          </Box>\n\n\n          {activeTab === 0 && (\n            <QuoteCustomersWithBid\n              preview={preview}\n              selectedCustomers={selectedCustomers}\n              contacts={contacts}\n              openColumnsDrawer={openColumnsDrawer}\n              toggleColumnsDrawer={toggleColumnsDrawer}\n              onApplyDiscount={onApplyDiscount}\n            />\n          )}\n\n          {activeTab === 1 && (\n            <ManufacturerDiscountsTab\n              preview={preview}\n              selectedManufacturerDiscounts={selectedManufacturerDiscounts}\n            />\n          )}\n\n        </Box>\n      </CardContent>\n    </Card>\n  );\n};\n\nexport default QuoteDiscountsTabs;\n","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  WithStyles,\n  withStyles,\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport classNames from 'classnames';\nimport {\n  withTranslation,\n} from 'react-i18next';\nimport { formatThousandsNumber } from '../../utils/format-number';\nimport { formatGrandTotal } from '../../modules/QuoteEditModule/utils';\nimport { DECIMAL_PRECISION } from '../../containers/QuoteTemplate/utils';\n\nconst styles = (theme: Theme) => ({\n  card: {\n    backgroundColor: theme.palette.common.white,\n    padding: 10,\n    margin: 10,\n  },\n  cardTitle: {\n    marginBottom: '24px'\n  },\n  grandTotal: {\n    flexBasis: '300px'\n  },\n  quote: {\n    display: 'flex',\n    justifyContent: 'flex-end',\n    padding: '0 10px 0 0'\n  },\n  qCharge: {\n    color: theme.palette.common.black\n  },\n  qGrandTotal: {\n    fontSize: theme.typography.h5.fontSize\n  },\n  qAmount: {\n    flexBasis: '0'\n  },\n});\n\ninterface IQuoteGrandTotalProps {\n  grandTotal: any;\n  discountList: any;\n  t?(...args: any[]): any;\n}\n\nconst QuoteGrandTotal: React.SFC<IQuoteGrandTotalProps & WithStyles<keyof ReturnType<typeof styles>>> =\n  ({\n    classes,\n    grandTotal,\n    discountList,\n    t\n  }) => {\n    const value = grandTotal.get('value');\n    const discountedValue = grandTotal.get('discountedValue');\n    const formattedValue = grandTotal.get('formattedValue');\n    const formattedDiscountedValue = grandTotal.get('formattedDiscountedValue');\n    const displayedValue = formattedValue ? formatThousandsNumber(formattedValue) : formatGrandTotal({\n      value,\n      decimalPrecision: DECIMAL_PRECISION.TWO\n    });\n    const displayedDiscountedValue = formattedDiscountedValue ? formatThousandsNumber(formattedDiscountedValue) : formatGrandTotal({\n      value: discountedValue,\n      decimalPrecision: DECIMAL_PRECISION.TWO\n    });\n    return (\n      <Grid container={true} wrap={'nowrap'} className={classes.grandTotal}\n        item={true}>\n        <Grid container={true}\n          item={true} className={classes.quote}>\n          <Grid item={true} xs={12} className={classes.quote}>\n            {grandTotal.get('name')}\n          </Grid>\n          {discountList\n            ? discountList.map((discount: any, i: number) => (\n              <Grid item={true} key={`__discountValue-${i}`}\n                xs={12} className={classNames(classes.quote, classes.qCharge)}>\n                {grandTotal.get('calculationType') === 'average'\n                  ? ''\n                  : `${discount.get('label')}:`\n                }\n              </Grid>\n            ))\n            : ''\n          }\n          <Grid item={true} xs={12} className={classNames(classes.quote, classes.qGrandTotal)}>\n            {t('sectionList.grandTotal')}:\n          </Grid>\n        </Grid>\n        <Grid container={true}\n          item={true} className={classNames(classes.qAmount)}>\n          <Grid item={true} xs={12} className={classNames(classes.quote)}>\n            {displayedValue}\n          </Grid>\n          {discountList\n            ? discountList.map((discount: any, i: number) => (\n              <Grid item={true} key={`__discountValue-${i}`}\n                xs={12} className={classNames(classes.quote, classes.qCharge)}>\n                {grandTotal.get('calculationType') === 'average'\n                  ? ''\n                  : discount.get('type') === 'discount' || discount.get('type') === 'tax'\n                    ? `${discount.get('type') === 'discount' ? '-' : ''}${parseFloat((discount.get('value') * 100).toFixed(10))}%`\n                    : formatThousandsNumber(discount.get('value') || 0)\n                }\n              </Grid>\n            ))\n            : ''\n          }\n          <Grid item={true} xs={12} className={classNames(classes.quote, classes.qGrandTotal)}>\n            {displayedDiscountedValue}\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  };\n\nexport default compose<React.ComponentClass<IQuoteGrandTotalProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(QuoteGrandTotal);\n","import QuoteGrandTotal from './QuoteGrandTotal';\n\nexport default QuoteGrandTotal;","interface IBuildUserSearchFiltersParams {\n  // Whether the \"search the whole firm\" scope is currently selected.\n  searchUsersFromFirm: boolean;\n  // Whether firm-wide search is permitted at all; when false the search always falls back to office.\n  canSearchFirm: boolean;\n  firmId: number;\n  userOfficeId: number;\n  // Optional free-text term matched against email/full name.\n  term?: string;\n}\n\n// Builds the `searchUsers` filter payload for the assignable-user Autocompletes. Firm-wide search\n// requires both the toggle to be on and the caller to permit it; otherwise results are scoped to the\n// user's own office. Kept pure (no React/redux) so the scoping logic can be unit tested directly.\nexport const buildUserSearchFilters = (\n  { searchUsersFromFirm, canSearchFirm, firmId, userOfficeId, term }: IBuildUserSearchFiltersParams,\n): { and: any[] } => {\n  const andFilters: any[] = [\n    ...(searchUsersFromFirm && canSearchFirm)\n      ? [{ 'firm_id': { 'eq': firmId } }]\n      : [{ 'office_id': { 'eq': userOfficeId } }],\n    { 'status': { 'eq': 'active' } },\n  ];\n  if (term) {\n    andFilters.push({\n      'or': [\n        { 'email': { 'like': term } },\n        { 'fullName': { 'like': term } },\n      ],\n    });\n  }\n  return { 'and': andFilters };\n};\n\nexport default buildUserSearchFilters;\n","import { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { makeSelectUserFirmId, makeSelectUserOfficeId } from '../modules/AtsModule/selectors';\nimport AtsStore from '../store';\nimport { buildUserSearchFilters } from '../utils/buildUserSearchFilters';\n\ninterface IUseAssignableUserSearchParams {\n  // Whether firm-wide search is permitted; also the initial state of the firm/office scope toggle.\n  canSearchFirm: boolean;\n  // Whether searching should run (e.g. a modal being open). Defaults to true for always-mounted use.\n  active?: boolean;\n}\n\ninterface IUseAssignableUserSearchResult {\n  userOptions: any[];\n  searchTerm: string;\n  setSearchTerm: (term: string) => void;\n  searchUsersFromFirm: boolean;\n  setSearchUsersFromFirm: (fromFirm: boolean) => void;\n  showInitialUsers: () => void;\n}\n\nconst HAS_MANY_THRESHOLD = 500;\n\n// Encapsulates the shared \"assignable user\" Autocomplete search: firm/office scoped filters, the\n// account/searchUsers API call with office-name enrichment, and the server re-search that kicks in\n// only when the initial result set exceeds HAS_MANY_THRESHOLD.\nexport const useAssignableUserSearch = (\n  { canSearchFirm, active = true }: IUseAssignableUserSearchParams,\n): IUseAssignableUserSearchResult => {\n  const firmId = useSelector(makeSelectUserFirmId());\n  const userOfficeId = useSelector(makeSelectUserOfficeId());\n\n  const [userOptions, setUserOptions] = useState([]);\n  const [initialUsers, setInitialUsers] = useState([]);\n  const [hasMany, setHasMany] = useState(false);\n  const [searchTerm, setSearchTerm] = useState('');\n  const [searchUsersFromFirm, setSearchUsersFromFirm] = useState(canSearchFirm);\n\n  const buildFilters = (term?: string) =>\n    buildUserSearchFilters({ searchUsersFromFirm, canSearchFirm, firmId, userOfficeId, term });\n\n  const searchUsers = (filters) => {\n    return AtsStore.get('atsApi').callApi({\n      service: 'account',\n      endpoint: 'searchUsers',\n      body: { filters },\n    }).then((response) => {\n      const users = response?.payload?.account?.user || [];\n      return users\n        .map((user) => ({ ...user, officeName: user.office?.officeName || '' }))\n        .sort((a, b) => (a.fullName || '').localeCompare(b.fullName || ''));\n    });\n  };\n\n  // Fetch on activation / firm-office scope change; clear the list when inactive (e.g. modal closed).\n  useEffect(() => {\n    if (active && firmId > 0) {\n      searchUsers(buildFilters())\n        .then((sortedUsers) => {\n          setInitialUsers(sortedUsers);\n          setHasMany(sortedUsers.length > HAS_MANY_THRESHOLD);\n          setUserOptions(sortedUsers);\n        })\n        .catch((err) => {\n          console.error('useAssignableUserSearch: Failed to search users', err); // tslint:disable-line\n        });\n    } else if (!active) {\n      setSearchTerm('');\n      setUserOptions([]);\n      setInitialUsers([]);\n      setHasMany(false);\n    }\n  }, [active, searchUsersFromFirm, firmId, userOfficeId, canSearchFirm]);\n\n  // Server-side re-search while typing, only when the initial result set exceeded the threshold.\n  useEffect(() => {\n    if (!hasMany || !active) {\n      return;\n    }\n    const trimmed = searchTerm.trim();\n    if (trimmed) {\n      searchUsers(buildFilters(trimmed))\n        .then((sortedUsers) => setUserOptions(sortedUsers))\n        .catch((err) => {\n          console.error('useAssignableUserSearch: Failed to search users', err); // tslint:disable-line\n        });\n    } else {\n      setUserOptions(initialUsers);\n    }\n  }, [searchTerm, hasMany, initialUsers, active]);\n\n  const showInitialUsers = () => setUserOptions(initialUsers);\n\n  return {\n    userOptions,\n    searchTerm,\n    setSearchTerm,\n    searchUsersFromFirm,\n    setSearchUsersFromFirm,\n    showInitialUsers,\n  };\n};\n\nexport default useAssignableUserSearch;\n","var getErrorKeys = function getErrorKeys(name, type) {\n  switch (type) {\n    case 'Field':\n      return [name, name + \"._error\"];\n\n    case 'FieldArray':\n      return [name + \"._error\"];\n\n    default:\n      throw new Error('Unknown field type');\n  }\n};\n\nvar createHasError = function createHasError(_ref) {\n  var getIn = _ref.getIn;\n\n  var hasError = function hasError(field, syncErrors, asyncErrors, submitErrors) {\n    if (!syncErrors && !asyncErrors && !submitErrors) {\n      return false;\n    }\n\n    var name = getIn(field, 'name');\n    var type = getIn(field, 'type');\n    return getErrorKeys(name, type).some(function (key) {\n      return getIn(syncErrors, key) || getIn(asyncErrors, key) || getIn(submitErrors, key);\n    });\n  };\n\n  return hasError;\n};\n\nexport default createHasError;","import createHasError from '../hasError';\n\nvar createIsValid = function createIsValid(structure) {\n  var getIn = structure.getIn,\n      keys = structure.keys;\n  var hasError = createHasError(structure);\n  return function (form, getFormState, ignoreSubmitErrors) {\n    if (ignoreSubmitErrors === void 0) {\n      ignoreSubmitErrors = false;\n    }\n\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      var formState = nonNullGetFormState(state);\n      var syncError = getIn(formState, form + \".syncError\");\n\n      if (syncError) {\n        return false;\n      }\n\n      if (!ignoreSubmitErrors) {\n        var error = getIn(formState, form + \".error\");\n\n        if (error) {\n          return false;\n        }\n      }\n\n      var syncErrors = getIn(formState, form + \".syncErrors\");\n      var asyncErrors = getIn(formState, form + \".asyncErrors\");\n      var submitErrors = ignoreSubmitErrors ? undefined : getIn(formState, form + \".submitErrors\");\n\n      if (!syncErrors && !asyncErrors && !submitErrors) {\n        return true;\n      }\n\n      var registeredFields = getIn(formState, form + \".registeredFields\");\n\n      if (!registeredFields) {\n        return true;\n      }\n\n      return !keys(registeredFields).filter(function (name) {\n        return getIn(registeredFields, \"['\" + name + \"'].count\") > 0;\n      }).some(function (name) {\n        return hasError(getIn(registeredFields, \"['\" + name + \"']\"), syncErrors, asyncErrors, submitErrors);\n      });\n    };\n  };\n};\n\nexport default createIsValid;","import {Button, Tooltip} from '@material-ui/core';\nimport React from 'react';\nimport {ButtonProps} from '@material-ui/core/Button';\n\nexport interface ITooltipButtonProps extends ButtonProps {\n    tooltip?: string;\n    hidden?: boolean;\n}\nfunction TooltipButton({\n    tooltip = '',\n    hidden = false,\n    children,\n    ...props\n}: ITooltipButtonProps) {\n    if (hidden) {\n        return null;\n    }\n    return (\n        <Tooltip title={tooltip}>\n            <span>\n                <Button {...props}>\n                    {children}\n                </Button>\n            </span>\n        </Tooltip>\n    );\n}\n\nexport default TooltipButton;","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport TooltipButton, {ITooltipButtonProps} from '../../../pages/SpecDetail/buttons/TooltipButton';\n\nconst DownloadSpecBookletButton = (props: ITooltipButtonProps) => {\n    const { t } = useTranslation('translations');\n    return (\n        <TooltipButton\n            color={'primary'}\n            variant='text'\n            {...props}\n        >\n            {t('ProjectDetail.downloadSpecBooklet')}\n        </TooltipButton>\n    );\n};\n\nexport default DownloadSpecBookletButton;","export default __webpack_public_path__ + \"static/media/productBrochureSample.96438303.jpg\";","import * as React from 'react';\nimport {\n    Theme,\n    WithStyles,\n    Grid,\n    Paper,\n    Typography,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  Map,\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n  change,\n} from 'redux-form';\nimport {\n    Field, getFormValues,\n    reduxForm\n} from 'redux-form/immutable';\nimport productBrochureSample from '../../images/printPage/productBrochureSample.jpg';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport FieldRadio, { IFieldRadioComponentProps } from '../FieldRadio';\nimport { StyleRules } from '@material-ui/styles';\nimport { GetCoverImagesAction, ICoverImage } from '../../modules/PrintModule/actions';\nimport { makeSelectCoverImages } from '../../modules/PrintModule/selectors';\nimport { IS_PRODUCTION, SPEC_PRINT_TYPE } from '../../constants';\nimport PrintHeader, { PrintWrapper } from './PrintHeader';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport CoverImageComp from '../SpecificationBookletBeta/CoverImageComp';\n\n\nexport const FORM_NAME = 'productBrochurePrint';\n\ninterface IProductBrochureComponentProps {\n  destroyOnUnmount?: boolean;\n}\n\ninterface IProductBrochureProps extends IProductBrochureComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  getCoverImages: () => void;\n  coverImages: List<IMap<ICoverImage>>;\n  formValues: Map<string, any>;\n  includeDrawingLabel: boolean;\n}\n\ntype ProductBrochureProps = IProductBrochureProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\ninterface IProductBrochureState {\n  added: boolean;\n}\n\nconst sampleModalKey = 'productBrochureSampleModalKey';\nconst numOfProductsSelectionArray = [1, 2, 4];\n\nclass ProductBrochureBeta extends React.Component<ProductBrochureProps, IProductBrochureState> {\n  public state: IProductBrochureState = {\n    added: false,\n  };\n\n  public componentDidMount() {\n    const {\n      getCoverImages,\n    } = this.props;\n\n    getCoverImages();\n  }\n\n  public handleAdd = () => {\n    this.setState(prevState => ({\n      added: !prevState.added\n    }));\n  }\n\n  public handleClickCoverImage = (id: number) => {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(change(FORM_NAME, 'coverImageId', id));\n  }\n  public render() {\n    const {\n      coverImages,\n      t,\n      classes,\n      dispatch,\n      formValues,\n      includeDrawingLabel\n    } = this.props;\n    return (\n      <form>\n        <PrintWrapper>\n          <PrintHeader\n            title={t('productBrochurePrint.productBrochure')}\n            description={t('productBrochurePrint.description')}\n            src={pdfIcon}\n            sampleModalKey={sampleModalKey}\n            sampleSrc={productBrochureSample}\n            sampleAlt={t('productBrochurePrint.imageAlt')}\n          />\n          <div className={classes.row}>\n            <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n                <CoverImageComp\n                    coverImages={coverImages}\n                    formName={FORM_NAME}\n                    cardListProps={{\n                        style: {\n                            minWidth: 0,\n                            overflow: 'auto',\n                            flexWrap: 'nowrap',\n                        }\n                    }}\n                    cardRootProps={{\n                        style: {\n                            flexShrink: 0,\n                            flexBasis: 'auto',\n                            boxShadow: 'none',\n                        }\n                    }}\n                    titleProps={{\n                        style: {\n                            textAlign: 'center'\n                        }\n                    }}\n                    cardProps={{\n                        elevation: 0\n                    }}\n                    imageProps={{\n                        width: '86px'\n                    }}\n                />\n            </Paper>\n            <Paper className={classes.rowItem} elevation={0}>\n              <Grid container={true} direction='column'>\n                  <Typography variant='body2' color='inherit'>{t('productBrochurePrint.includeListPricing')}</Typography>\n                  <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                      name='includePrice'\n                      component={FieldCheckbox}\n                      props={{\n                          label: t('productBrochurePrint.includeListPricingDescription'),\n                          variant: 'single',\n                          helperText: false,\n                          inputProps: {\n                              defaultValue: true,\n                              color: 'primary',\n                          },\n                      }}\n                  />\n              </Grid>\n            </Paper>\n          </div>\n          <div className={classes.row}>\n              <Paper className={classes.rowItem} elevation={0}>\n                  <Grid container={true} direction='column'>\n                      <Typography variant='body2' color='inherit'>{t('SubmittalPrint.drawingLabel')}</Typography>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeLabel'\n                          component={FieldCheckbox}\n                          props={{\n                              label: t('SubmittalPrint.includeDrawingLabel'),\n                              variant: 'single',\n                              helperText: false,\n                              inputProps: {\n                                  defaultValue: true,\n                                  color: 'primary',\n                                  onChange: (value: boolean) => {\n                                      if (!value) {\n                                          dispatch(change(FORM_NAME, 'sortBy', 'product'));\n                                      }\n                                  },\n                              },\n                          }}\n                      />\n                  </Grid>\n              </Paper>\n              <Paper className={classes.rowItem} elevation={0}>\n                  <Grid container={true} direction='column'>\n                      <Typography variant='body2' color='inherit'>{t('SubmittalPrint.swatchTitle')}</Typography>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeSwatches'\n                          component={FieldCheckbox}\n                          props={{\n                              label: t('SubmittalPrint.swatchLabel'),\n                              variant: 'single',\n                              helperText: false,\n                              inputProps: {\n                                  defaultValue: true,\n                                  color: 'primary',\n                              },\n                          }}\n                      />\n                  </Grid>\n              </Paper>\n          </div>\n          <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n              <div>\n                  <Typography variant='subtitle1' color='inherit'>{t('productBrochurePrint.chooseTemplate')}</Typography>\n              </div>\n              <div>\n                  <Typography variant='body1'>{t('productBrochurePrint.templateOptionDescription')}</Typography>\n              </div>\n              <div\n                  style={{\n                    display: 'flex',\n                    padding: '16px 16px 0px 16px',\n                    alignItems: 'center',\n                    gap: 16,\n                }}\n              >\n                  <Grid container={true} style={{ borderRight: '1px solid rgba(189, 189, 189, 1)'}} alignItems='center'>\n                      {\n                          numOfProductsSelectionArray.map((selectionNumber, index) => {\n                              return (\n                                <Grid key={index} item={true} xs={4}>\n                                  <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                      key={index}\n                                      name='numOfProducts'\n                                      component={FieldRadio}\n                                      props={{\n                                          label: selectionNumber === 1 ? `${selectionNumber} ${t('productBrochurePrint.productPerPage')}` : `${selectionNumber} ${t('productBrochurePrint.productsPerPage')}`,\n                                          color: 'primary',\n                                          checkedValue: selectionNumber,\n                                          helperText: false,\n                                      }}\n                                  />\n                                </Grid>\n                              );\n                          })\n                      }\n                  </Grid>\n                  <Grid container={true} className={classes.radioContainer}>\n                      <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='sortBy'\n                          component={FieldRadio}\n                          props={{\n                              label: t('productBrochurePrint.groupByDrawing'),\n                              color: 'primary',\n                              checkedValue: 'drawing',\n                              helperText: false,\n                              disabled: !includeDrawingLabel\n                          }}\n                      />\n                      <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                          name='sortBy'\n                          component={FieldRadio}\n                          props={{\n                              label: t('productBrochurePrint.groupByProduct'),\n                              color: 'primary',\n                              checkedValue: 'product',\n                              helperText: false,\n                          }}\n                      />\n                  </Grid>\n              </div>\n          </Paper>\n        </PrintWrapper>\n      </form>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  radioContainer: {\n    // padding: theme.spacing(0, 1),\n    alignItems: 'center'\n  },\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  },\n    card: {\n        cursor: 'pointer',\n        margin: theme.spacing(),\n    },\n    cardContent: {\n        position: 'relative',\n        padding: 0,\n        paddingBottom: `0 !important`,\n    },\n    cardSelected: {\n        backgroundColor: theme.palette.primary[700] + '14',\n    },\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getCoverImages: () => {\n      dispatch(new GetCoverImagesAction(SPEC_PRINT_TYPE.productBrochure));\n    },\n  };\n};\n\nconst mapStateToProps = (state, ownProps) => {\n  const form = ownProps.form != null ? ownProps.form : FORM_NAME;\n  const coverImages = makeSelectCoverImages(SPEC_PRINT_TYPE.productBrochure)(state);\n\n  // constant in this comp at the top\n  const numberOfValuesDefault = numOfProductsSelectionArray[0];\n  const firstCoverImageId = coverImages && coverImages.getIn(['0', 'id']);\n  const formValue: Map<string, any> =  getFormValues(FORM_NAME)(state) as Map<string, any>;\n  const includeDrawingLabel = formValue?.get('includeLabel');\n  const initialValues = fromJS({\n    coverImageId: firstCoverImageId,\n    numOfProducts: numberOfValuesDefault,\n    sortBy: 'drawing',\n    includeLabel: true,\n    includeSwatches: true,\n    includePrice: true,\n    url: IS_PRODUCTION ? window.location.origin : 'https://spec.dev.atssoftware.com/',\n  });\n\n  return {\n    form,\n    initialValues,\n    coverImages,\n    includeDrawingLabel,\n    destroyOnUnmount: ownProps.destroyOnUnmount ?? true,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductBrochureComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    enableReinitialize : true,\n  }),\n  withTranslation('translations'),\n)(ProductBrochureBeta);\n","import * as React from 'react';\nimport { compose } from 'redux';\nimport { Card, CardContent, createStyles, Grid, IconButton, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport CheckCircleRoundedIcon from '@material-ui/icons/CheckCircleRounded';\nimport { Image } from '../../index';\nimport classNames from 'classnames';\nimport { createStructuredSelector } from 'reselect';\nimport { getFormValues } from 'redux-form/immutable';\nimport { connect } from 'react-redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { DeleteCoverImageAction, ICoverImage } from '../../../modules/PrintModule/actions';\nimport { change } from 'redux-form';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport InfoIcon from '@material-ui/icons/Info';\nimport { SPEC_PRINT_TYPE } from '../../../constants';\nimport DeleteModalDialog from '../../DeleteModalDialog';\nimport { makeSelectCoverImages } from '../../../modules/PrintModule/selectors';\nimport { List } from 'immutable';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  chooseCoverImage: {\n    marginBottom: theme.spacing(2)\n  },\n  card: {\n    cursor: 'pointer',\n    margin: theme.spacing(),\n  },\n  selectedCheckIcon: {\n    color: theme.palette.primary.main,\n    position: 'absolute',\n    top: theme.spacing(1.5),\n    right: theme.spacing(1.5),\n    zIndex: 1,\n  },\n  coverTitle: {\n    padding: theme.spacing(1, 1),\n  },\n  textEllipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n  },\n  cardContent: {\n    position: 'relative',\n\n    // over writing material ui's custom stuff\n    padding: 0,\n    paddingBottom: `0 !important`,\n  },\n  cardSelected: {\n    backgroundColor: theme.palette.primary[700] + '14',\n  },\n  deleteBar: {\n    width: '120px',\n    background: theme.palette.secondary[700],\n    color: 'white',\n    position: 'absolute',\n    bottom: '0',\n    left: '50%',\n    transform: 'translate(-50%)',\n    opacity: 0.7\n  }\n}));\n\ninterface ISelectableCardComponentProps {\n  imageObj: IMap<ICoverImage>;\n  formName: string;\n  displayMaximumUploadWarning?: boolean;\n  cardRootProps?: any;\n  cardProps?: any;\n  imageProps?: any;\n  titleProps?: any;\n}\n\ninterface ISelectableCardProps extends ISelectableCardComponentProps {\n  formValues: any;\n  dispatch: React.Dispatch<IAction>;\n  deleteCoverImage: (printType: SPEC_PRINT_TYPE, id: number) => void;\n  coverImages: List<IMap<ICoverImage>>;\n}\n\nconst SelectableCard: React.FC<ISelectableCardProps & WithTranslation> = ({\n  imageObj,\n  formValues,\n  dispatch,\n  formName,\n  displayMaximumUploadWarning,\n  deleteCoverImage,\n  coverImages,\n  t,\n  cardRootProps,\n  cardProps,\n  imageProps,\n  titleProps,\n}) => {\n  const classes = useStyles();\n\n  const title = imageObj.get('title');\n  const id = imageObj.get('id');\n  const src = imageObj.get('thumbnail');\n  const selectedCoverId = formValues && formValues.get('coverImageId');\n  const isCustom = imageObj.get('isCustom');\n  const [isHover, setIsHover] = React.useState(false);\n  const [isDeleteModalOpen, setIsDeleteModalOpen] = React.useState(false);\n\n  const handleClickCoverImage = (coverId: number) => {\n    dispatch(change(formName, 'coverImageId', coverId));\n  };\n\n  const handleDelete = (idToDelete: number) => {\n    const printType = SPEC_PRINT_TYPE.specBooklet;\n    const defaultCoverId = coverImages && coverImages.getIn(['0', 'id']);\n    deleteCoverImage(printType, idToDelete);\n    setIsDeleteModalOpen(false);\n    // if deleted cover is same as selected cover, then set to default cover\n    if (idToDelete === selectedCoverId) {\n      dispatch(change(formName, 'coverImageId', defaultCoverId));\n    }\n  };\n\n  return (\n    <>\n      <Grid\n        key={id}\n        item={true}\n        xs={6}\n        sm={4}\n        md={3}\n        xl={2}\n        {...cardRootProps}\n      >\n        <Card\n          className={classes.card}\n          onClick={() => handleClickCoverImage(id)}\n          onMouseEnter={() => setIsHover(true)}\n          onMouseLeave={() => setIsHover(false)}\n          {...cardProps}\n        >\n          <CardContent\n            className={classNames(selectedCoverId === id ? [classes.cardContent, classes.cardSelected] : classes.cardContent)}\n          >\n            {\n              selectedCoverId === id\n                ? <CheckCircleRoundedIcon\n                    className={classes.selectedCheckIcon}\n                  />\n                : undefined\n            }\n            {\n              <Grid>\n                <Grid style={{position: 'relative'}}>\n                  <Image\n                    src={src || ''}\n                    width='120px'\n                    aspectRatio={'100%'}\n                    fromService={true}\n                    {...imageProps}\n                  />\n                  { isCustom && isHover &&\n                    <Grid\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        setIsDeleteModalOpen(true);\n                      }}\n                      container={true}\n                      justify='center'\n                      className={classes.deleteBar}\n                    >\n                      <DeleteIcon fontSize='small'/>\n                      <Typography color='inherit' style={{textTransform: 'uppercase'}}>{t('specBookletPrint.delete')}</Typography>\n                    </Grid>\n                  }\n                </Grid>\n                <Grid\n                  className={classes.coverTitle}\n                  container={true}\n                  justify='center'\n                >\n                  <Tooltip title={title}>\n                    <Typography\n                      variant='body2'\n                      className={classes.textEllipsis}\n                      {...titleProps}\n                    >\n                      {title}\n                    </Typography>\n                  </Tooltip>\n                </Grid>\n              </Grid>\n            }\n          </CardContent>\n        </Card>\n        { displayMaximumUploadWarning &&\n          <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n            style={{ margin: '8px', width: 'auto'}}\n          >\n            <InfoIcon fontSize='small' color='primary' style={{marginRight: '4px'}}/>\n            <Typography variant='caption' color='primary'>{t('specBookletPrint.maxUploadWarning')}</Typography>\n          </Grid>\n        }\n      </Grid>\n      <DeleteModalDialog\n        open={isDeleteModalOpen}\n        idToDelete={id}\n        handleDelete={handleDelete}\n        itemName={title}\n        toggleDeleteModal={() => setIsDeleteModalOpen(false)}\n      />\n    </>\n  );\n};\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  formValues: getFormValues(ownProps.formName),\n  coverImages: makeSelectCoverImages(SPEC_PRINT_TYPE.specBooklet)\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({\n  dispatch,\n  deleteCoverImage: (printType: SPEC_PRINT_TYPE, id: number) => {\n    dispatch(new DeleteCoverImageAction({printType, id}));\n  }\n});\n\nexport default compose<React.FC<ISelectableCardComponentProps>>(\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(SelectableCard);","import * as React from 'react';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { Card, CardContent, createStyles, Grid, makeStyles, Theme,  Tooltip,  Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\nimport SelectableCard from '../SelectableCard';\nimport { ICoverImage } from '../../../modules/PrintModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport AddIcon from '@material-ui/icons/Add';\nimport { ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { UPLOAD_COVER_DRAWER } from '../index';\nimport { SPEC_PRINT_TYPE } from '../../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  chooseCoverImage: {\n    marginBottom: theme.spacing(2)\n  },\n  card: {\n    cursor: 'pointer',\n    margin: theme.spacing()\n  },\n  cardContent: {\n    position: 'relative',\n    // over writing material ui's custom stuff\n    padding: 0,\n    paddingBottom: `0 !important`,\n  },\n  coverTitle: {\n    padding: theme.spacing(1, 1),\n  },\n  textEllipsis: {\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n  },\n  addIcon: {\n    fontSize: '4rem',\n    color: theme.palette.secondary[300]\n  }\n}));\n\ninterface ICoverImageCompComponentProps {\n  coverImages: List<IMap<ICoverImage>>;\n  formName: string;\n  customImagesIsMax?: boolean;\n  printType?: SPEC_PRINT_TYPE;\n  cardRootProps?: any;\n  cardListProps?: any;\n  imageProps?: any;\n  titleProps?: any;\n  cardProps?: any;\n}\ninterface ICoverImageCompProps extends ICoverImageCompComponentProps {\n  uploadCoverDrawerOpen: (drawerState: boolean) => void;\n}\n\ntype CoverImageCompType = ICoverImageCompProps & WithTranslation;\n\nconst CoverImageComp: React.FC<CoverImageCompType> = ({\n  coverImages,\n  formName,\n  customImagesIsMax,\n  t,\n  printType,\n  uploadCoverDrawerOpen,\n  cardRootProps,\n  cardListProps,\n  imageProps,\n  titleProps,\n  cardProps\n}) => {\n\n  const classes = useStyles();\n  const cards = coverImages && coverImages.map((imageObj: IMap<ICoverImage>, index: number) => {\n    const thumbnail = imageObj.get('thumbnail');\n    const isLastImage = index === coverImages.size - 1;\n    const displayMaximumUploadWarning = isLastImage && customImagesIsMax;\n    if (thumbnail) {\n      return (\n        <SelectableCard\n          key={index}\n          imageObj={imageObj}\n          formName={formName}\n          displayMaximumUploadWarning={displayMaximumUploadWarning}\n          cardRootProps={cardRootProps}\n          imageProps={imageProps}\n          titleProps={titleProps}\n          cardProps={cardProps}\n        />\n      );\n    }\n  }).push(\n      !customImagesIsMax && printType === SPEC_PRINT_TYPE.specBooklet &&\n      <Grid\n        key='addCoverImageButton'\n        item={true}\n        xs={6}\n        sm={4}\n        md={3}\n        xl={2}\n        {...cardRootProps}\n      >\n        <Card\n          className={classes.card}\n          onClick={() => uploadCoverDrawerOpen(true)}\n        >\n          <CardContent className={classes.cardContent}>\n            <Grid\n              container={true}\n              direction='column'\n              justify='center'\n              alignItems='center'\n            >\n              <Grid\n                container={true}\n                justify='center'\n                alignItems='center'\n                style={{width: '120px', height: '100px'}}\n              >\n                <AddIcon className={classes.addIcon}/>\n              </Grid>\n              <Grid\n                className={classes.coverTitle}\n                container={true}\n                direction='column'\n                alignItems='center'\n              >\n                <Tooltip title={t('specBookletPrint.uploadNewCover')}>\n                  <Typography\n                    variant='body2'\n                    className={classes.textEllipsis}\n                  >\n                    {t('specBookletPrint.uploadNewCover')}\n                  </Typography>\n                </Tooltip>\n                <Typography\n                    variant='caption'\n                    className={classes.textEllipsis}\n                    style={{color: 'grey'}}\n                  >\n                    {t('specBookletPrint.width')}: 960px, {t('specBookletPrint.height')}: 560px\n                  </Typography>\n              </Grid>\n            </Grid>\n          </CardContent>\n        </Card>\n      </Grid>\n  );\n\n  return (\n    <>\n      <Grid\n        className={classes.chooseCoverImage}\n        item={true}\n      >\n        <Typography variant='body2' color='inherit'>{t('specBookletPrint.chooseCoverImage')}</Typography>\n      </Grid>\n      <Grid\n        container={true}\n        direction='row'\n        item={true}\n        {...cardListProps}\n      >\n        {cards}\n      </Grid>\n    </>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    uploadCoverDrawerOpen: (drawerState: boolean) => {\n      dispatch(new ToggleOverlayComponentAction({ open: drawerState, id: UPLOAD_COVER_DRAWER}));\n    }\n  };\n};\n\nexport default compose<React.FC<ICoverImageCompComponentProps>>(\n  withTranslation('translations'),\n  connect(null, mapDispatchToProps),\n)(CoverImageComp);","export default __webpack_public_path__ + \"static/media/scheduleSample.d4eb6cd7.jpg\";","/* tslint:disable */\nimport * as React from 'react';\nimport {\n    Grid, Paper,\n    Theme, Typography,\n    WithStyles,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  BaseFieldProps,\n  InjectedFormProps,\n} from 'redux-form';\nimport scheduleSample from '../../images/printPage/scheduleSample.jpg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport FieldCheckbox, {IFieldCheckboxComponentProps} from '../FieldCheckbox';\nimport FieldRadio, {IFieldRadioComponentProps} from '../FieldRadio';\nimport {fromJS} from 'immutable';\nimport { makeSelectUserIsDeveloper } from '../../modules/AtsModule/selectors';\n\ninterface IScheduleBetaComponentProps {\n}\ninterface IScheduleBetaProps extends IScheduleBetaComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  isDeveloper: boolean;\n}\n\ntype ScheduleProps = IScheduleBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\nconst sampleModalKey = 'scheduleSampleModalKey';\nexport const SCHEDULE_FORM_NAME = 'schedulePrint';\n\nclass Schedule extends React.Component<ScheduleProps, {}> {\n\n  public render() {\n    const {\n      t,\n      classes,\n      isDeveloper,\n    } = this.props;\n\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('SchedulePrint.schedule')}\n          description={t('SchedulePrint.description')}\n          sampleAlt={t('SchedulePrint.imageAlt')}\n          sampleModalKey={sampleModalKey}\n          fontIcon={['far', 'file-word']}\n          sampleSrc={scheduleSample}\n        />\n        <form className={classes.form}>\n            {\n              isDeveloper && (\n                <div className={classes.row}>\n                    <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n                        <Typography variant='body2' color='inherit'>{t('schedulePrint.outputFormat')}</Typography>\n                        <Grid container={true} alignItems='center'>\n                            <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                name='outputFormat'\n                                component={FieldRadio}\n                                props={{\n                                    label: t('schedulePrint.outputFormatXlsx'),\n                                    color: 'primary',\n                                    checkedValue: 'xlsx',\n                                    helperText: false,\n                                }}\n                            />\n                            <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                name='outputFormat'\n                                component={FieldRadio}\n                                props={{\n                                    label: t('schedulePrint.outputFormatDxf'),\n                                    color: 'primary',\n                                    checkedValue: 'dxf',\n                                    helperText: false,\n                                }}\n                            />\n                        </Grid>\n                    </Paper>\n                </div>\n              )\n            }\n            <div className={classes.row}>\n                <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n                    <Typography variant='body2' color='inherit'>{t('schedulePrint.formatCaps')}</Typography>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='formatAllCaps'\n                        component={FieldCheckbox}\n                        props={{\n                            label: t('schedulePrint.formatAllCaps'),\n                            variant: 'single',\n                            helperText: false,\n                            inputProps: {\n                                color: 'primary',\n                            },\n                        }}\n                    />\n                </Paper>\n                <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n                    <Typography variant='body2' color='inherit'>{t('schedulePrint.drawingLabel')}</Typography>\n                    <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='includeLabel'\n                        component={FieldCheckbox}\n                        props={{\n                            label: t('schedulePrint.includeDrawingLabel'),\n                            variant: 'single',\n                            helperText: false,\n                            inputProps: {\n                                color: 'primary',\n                            },\n                        }}\n                    />\n                </Paper>\n            </div>\n        </form>\n      </PrintWrapper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n  form: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    padding: theme.spacing(1),\n  },\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  }\n}) as const;\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  isDeveloper: makeSelectUserIsDeveloper(),\n});\n\nconst initialValues = fromJS({\n  formatAllCaps: false,\n  includeLabel: true,\n  outputFormat: 'xlsx',\n});\nexport default compose<React.ComponentClass<IScheduleBetaComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: SCHEDULE_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n    initialValues\n  }),\n)(Schedule);\n","export default __webpack_public_path__ + \"static/media/longSpecSample.80441de0.jpg\";","import * as React from 'react';\nimport {\n    Theme,\n    WithStyles,\n    Tooltip, Typography, Paper\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport { fromJS } from 'immutable';\nimport longSpecSample from '../../images/printPage/longSpecSample.jpg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport {makeSelectIdentityObject, makeSelectIsAtsSpecTool} from '../../modules/AtsModule/selectors';\n\ninterface ILongSpecBetaComponentProps {\n}\ninterface ILongSpecBetaProps extends ILongSpecBetaComponentProps {\n  isAtsSpecTool: boolean;\n  isGuestUser: boolean;\n}\n\ntype LongSpecProps = ILongSpecBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\nconst sampleModalKey = 'longSpecSampleModalKey';\nexport const LONG_SPEC_FORM_NAME = 'longSpecPrint';\nclass LongSpecBeta extends React.Component<LongSpecProps> {\n\n  public render() {\n    const {\n      t,\n      classes,\n      isAtsSpecTool,\n      isGuestUser,\n    } = this.props;\n\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('LongSpecPrint.longSpec')}\n          description={t('LongSpecPrint.description')}\n          sampleAlt={t('LongSpecPrint.imageAlt')}\n          fontIcon={['far', 'file-word']}\n          sampleModalKey={sampleModalKey}\n          sampleSrc={longSpecSample}\n        />\n          <form className={classes.form}>\n              <div className={classes.row}>\n                  <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                      <Typography\n                        variant='body2'\n                        color='inherit'\n                      >\n                        {t('SubmittalPrint.excludePageFormatting')}\n                      </Typography>\n                      <Tooltip\n                        title={t('LongSpecPrint.excludeFormatTooltip')}\n                        placement='bottom-start'\n                        className={classes.tooltip}\n                      >\n                        <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='simpleFormatting'\n                          component={FieldCheckbox}\n                          props={{\n                            label: t('LongSpecPrint.excludeFormat'),\n                            variant: 'single',\n                            formControlProps: {\n                              fullWidth: true,\n                            },\n                            inputProps: {\n                              color: 'primary',\n                            },\n                            helperText: false,\n                          }}\n                        />\n                      </Tooltip>\n                  </Paper>\n                 <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                      <Typography\n                          variant='body2'\n                          color='inherit'\n                      >\n                          {t('SubmittalPrint.drawingLabel')}\n                      </Typography>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                          name='includeLabel'\n                          component={FieldCheckbox}\n                          props={{\n                              label: t('SubmittalPrint.includeDrawingLabel'),\n                              variant: 'single',\n                              helperText: false,\n                              inputProps: {\n                                  color: 'primary',\n                              },\n                          }}\n                      />\n                  </Paper>\n              </div>\n              <div className={classes.row}>\n                  { isAtsSpecTool && !isGuestUser &&\n                      <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                            variant='body2'\n                            color='inherit'\n                          >\n                            {t('LongSpecPrint.includeAlternatives')}\n                          </Typography>\n                              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                                  name='includeAlternatives'\n                                  component={FieldCheckbox}\n                                  props={{\n                                      label: t('LongSpecPrint.includeAlternatives'),\n                                      variant: 'single',\n                                      formControlProps: {\n                                          fullWidth: true,\n                                      },\n                                      inputProps: {\n                                          color: 'primary',\n                                      },\n                                      helperText: false,\n                                  }}\n                              />\n                      </Paper>\n                  }\n                  {\n                      isGuestUser ? null : <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                              variant='body2'\n                              color='inherit'\n                          >\n                              {t('LongSpecPrint.includeNotes')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                              name='includeNotes'\n                              component={FieldCheckbox}\n                              props={{\n                                  label: t('LongSpecPrint.includeNotes'),\n                                  variant: 'single',\n                                  helperText: false,\n                                  inputProps: {\n                                      color: 'primary',\n                                  },\n                              }}\n                          />\n                      </Paper>\n                  }\n              </div>\n          </form>\n      </PrintWrapper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n    form: {\n        padding: theme.spacing(),\n    },\n    tooltip: {\n        width: 'max-content'\n    },\n    row: {\n        display: 'flex',\n        flexDirection: 'row',\n        gap: theme.spacing(2),\n        margin: theme.spacing(1, 0),\n    },\n    rowItem: {\n        flexGrow: 1,\n        flexShrink: 1,\n        flexBasis: 0,\n        padding: theme.spacing(2),\n        borderColor: theme.palette.grey[400],\n        borderWidth: 1,\n        borderStyle: 'solid',\n        borderRadius: 8,\n    }\n}) as const;\n\nconst mapStateToProps = (state) => {\n    const selectIsAtsSpecTool = makeSelectIsAtsSpecTool();\n    const isAtsSpecTool = selectIsAtsSpecTool(state);\n    const identityObject = makeSelectIdentityObject()(state);\n    const isGuestUser = !identityObject;\n    return {\n        initialValues: fromJS({\n            simpleFormatting: false,\n            includeLabel: true,\n            includeAlternatives: isAtsSpecTool ?? false,\n            ...isGuestUser ? {} : {includeNotes: true}\n        }),\n        isAtsSpecTool,\n        isGuestUser\n  };\n};\n\nexport default compose<React.ComponentClass<ILongSpecBetaComponentProps>>(\n    withStyles(styles),\n    connect(mapStateToProps),\n    withTranslation('translations'),\n    reduxForm({\n        form: LONG_SPEC_FORM_NAME,\n        destroyOnUnmount: true,\n        enableReinitialize: true,\n    }),\n)(LongSpecBeta);\n","export default __webpack_public_path__ + \"static/media/shortSpecSample.e2025602.jpg\";","import * as React from 'react';\nimport {\n  Theme,\n  WithStyles,\n  Paper,\n  Tooltip,\n  Typography,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport { fromJS } from 'immutable';\nimport shortSpecSample from '../../images/printPage/shortSpecSample.jpg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport {makeSelectIdentityObject, makeSelectIsAtsSpecTool} from '../../modules/AtsModule/selectors';\n\ninterface IShortSpecBetaComponentProps {\n}\ninterface IShortSpecBetaProps extends IShortSpecBetaComponentProps {\n  isAtsSpecTool: boolean;\n  isGuestUser: boolean;\n}\n\ntype ShortSpecProps = IShortSpecBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\nconst sampleModalKey = 'ShortSpecSampleModalKey';\nexport const SHORT_SPEC_FORM_NAME = 'shortSpecPrint';\nclass ShortSpecBeta extends React.Component<ShortSpecProps> {\n\n  public render() {\n    const {\n      t,\n      classes,\n      isAtsSpecTool,\n      isGuestUser\n    } = this.props;\n\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('ShortSpecPrint.shortSpec')}\n          description={t('ShortSpecPrint.description')}\n          sampleAlt={t('ShortSpecPrint.imageAlt')}\n          fontIcon={['far', 'file-word']}\n          sampleModalKey={sampleModalKey}\n          sampleSrc={shortSpecSample}\n        />\n          <form className={classes.form}>\n              <div className={classes.row}>\n                  <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                      <Typography\n                        variant='body2'\n                        color='inherit'\n                      >\n                        {t('SubmittalPrint.excludePageFormatting')}\n                      </Typography>\n                      <Tooltip\n                        title={t('LongSpecPrint.excludeFormatTooltip')}\n                        placement='bottom-start'\n                        className={classes.tooltip}\n                      >\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='simpleFormatting'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('LongSpecPrint.excludeFormat'),\n                                variant: 'single',\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    color: 'primary',\n                                },\n                                helperText: false,\n                            }}\n                          />\n                      </Tooltip>\n                  </Paper>\n                  <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                      <Typography\n                        variant='body2'\n                        color='inherit'\n                      >\n                        {t('SubmittalPrint.drawingLabel')}\n                      </Typography>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='includeLabel'\n                        component={FieldCheckbox}\n                        props={{\n                            label: t('SubmittalPrint.includeDrawingLabel'),\n                            variant: 'single',\n                            helperText: false,\n                            inputProps: {\n                                color: 'primary',\n                            },\n                        }}\n                      />\n                  </Paper>\n              </div>\n              <div className={classes.row}>\n                  { isAtsSpecTool && !isGuestUser &&\n                      <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                            variant='body2'\n                            color='inherit'\n                          >\n                            {t('ShortSpecPrint.includeAlternatives')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='includeAlternatives'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('ShortSpecPrint.includeAlternatives'),\n                                variant: 'single',\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    color: 'primary',\n                                },\n                                helperText: false,\n                            }}\n                          />\n                      </Paper>\n                  }\n                  {\n                      isGuestUser ? null : <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                              variant='body2'\n                              color='inherit'\n                          >\n                              {t('ShortSpecPrint.includeNotes')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                              name='includeNotes'\n                              component={FieldCheckbox}\n                              props={{\n                                  label: t('ShortSpecPrint.includeNotes'),\n                                  variant: 'single',\n                                  helperText: false,\n                                  inputProps: {\n                                      color: 'primary',\n                                  },\n                              }}\n                          />\n                      </Paper>\n                  }\n              </div>\n          </form>\n      </PrintWrapper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n    form: {\n        padding: theme.spacing(),\n    },\n    tooltip: {\n        width: 'max-content'\n    },\n    row: {\n        display: 'flex',\n        flexDirection: 'row',\n        gap: theme.spacing(2),\n        margin: theme.spacing(1, 0),\n    },\n    rowItem: {\n        flexGrow: 1,\n        flexShrink: 1,\n        flexBasis: 0,\n        padding: theme.spacing(2),\n        borderColor: theme.palette.grey[400],\n        borderWidth: 1,\n        borderStyle: 'solid',\n        borderRadius: 8,\n    }\n}) as const;\n\nconst mapStateToProps = (state) => {\n    const selectIsAtsSpecTool = makeSelectIsAtsSpecTool();\n    const isAtsSpecTool = selectIsAtsSpecTool(state);\n    const identityObject = makeSelectIdentityObject()(state);\n    const isGuestUser = !identityObject;\n    return {\n        initialValues: fromJS({\n            simpleFormatting: false,\n            includeLabel: true,\n            includeAlternatives: isAtsSpecTool ?? false,\n            ...isGuestUser ? {} : {\n                includeNotes: true\n            }\n        }),\n        isAtsSpecTool,\n        isGuestUser\n    };\n};\n\nexport default compose<React.ComponentClass<IShortSpecBetaComponentProps>>(\n    withStyles(styles),\n    connect(mapStateToProps),\n    withTranslation('translations'),\n    reduxForm({\n        form: SHORT_SPEC_FORM_NAME,\n        destroyOnUnmount: true,\n        enableReinitialize: true,\n    }),\n)(ShortSpecBeta);\n","export default __webpack_public_path__ + \"static/media/manufacturerSpecSheetSample.c096bac1.jpg\";","import * as React from 'react';\nimport {\n  Paper,\n  Theme,\n  Typography,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  BaseFieldProps,\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport manufacturerSpecSheetSample from '../../images/printPage/manufacturerSpecSheetSample.jpg';\nimport pdfIcon from '../../images/printPage/pdfIcon.svg';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport FieldCheckbox, { IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport { fromJS } from 'immutable';\n\ninterface IManufacturerSpecSheetBetaComponentProps {\n}\ninterface IManufacturerSpecSheetBetaProps extends IManufacturerSpecSheetBetaComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ManufacturerSpecSheetProps = IManufacturerSpecSheetBetaProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\n\nconst sampleModalKey = 'ManufacturerSpecSheetSampleModalKey';\nexport const MANUFACTURER_CUTSHEET_FORM_NAME = 'manufacturerSpecSheetPrint';\n\nclass ManufacturerSpecSheetBeta extends React.Component<ManufacturerSpecSheetProps, {}> {\n\n  public render() {\n    const {\n      t,\n      classes,\n    } = this.props;\n\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('ManufacturerSpecSheetPrint.manufacturerSpecSheet')}\n          description={t('ManufacturerSpecSheetPrint.description')}\n          src={pdfIcon}\n          sampleModalKey={sampleModalKey}\n          sampleSrc={manufacturerSpecSheetSample}\n          sampleAlt={t('ManufacturerSpecSheetPrint.imageAlt')}\n        />\n        <form className={classes.form}>\n          <div className={classes.row}>\n            <Paper className={classes.rowItem} elevation={0} style={{ minWidth: 0 }}>\n              <Typography variant='body2' color='inherit'>{t('ManufacturerSpecSheetPrint.includeEpdCheckboxTitle')}</Typography>\n              <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                name='epd'\n                component={FieldCheckbox}\n                props={{\n                  label: t('ManufacturerSpecSheetPrint.includeEpdCheckboxLabel'),\n                  variant: 'single',\n                  helperText: false,\n                  inputProps: {\n                    color: 'primary',\n                  },\n                }}\n              />\n            </Paper>\n          </div>\n        </form>\n      </PrintWrapper>\n    );\n  }\n}\n\nconst styles = (theme: Theme) => ({\n  form: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    padding: theme.spacing(1),\n  },\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  }\n}) as const;\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n});\n\nconst initialValues = fromJS({\n  epd: true\n});\nexport default compose<React.ComponentClass<IManufacturerSpecSheetBetaComponentProps>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: MANUFACTURER_CUTSHEET_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n    initialValues\n  }),\n)(ManufacturerSpecSheetBeta);\n","export default __webpack_public_path__ + \"static/media/CSISample.a7742534.jpg\";","import * as React from 'react';\nimport {\n  Theme, Typography, Paper,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  withStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  BaseFieldProps,\n  InjectedFormProps,\n} from 'redux-form';\nimport { connect } from 'react-redux';\nimport CSISample from '../../images/printPage/CSISample.jpg';\nimport { StyleRules } from '@material-ui/styles';\nimport PrintHeader, { PrintWrapper } from '../ProductBrochureBeta/PrintHeader';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport {Field, reduxForm} from 'redux-form/immutable';\nimport FieldCheckbox, {IFieldCheckboxComponentProps} from '../FieldCheckbox';\nimport {fromJS} from 'immutable';\nimport {makeSelectIdentityObject, makeSelectIsAtsSpecTool} from '../../modules/AtsModule/selectors';\n\nconst sampleModalKey = 'CSISampleModalKey';\n\ninterface ICSIFormattedSpecsComponentProps {\n}\n\ninterface ICSIFormattedSpecsComponentBetaProps extends ICSIFormattedSpecsComponentProps {\n    isAtsSpecTool: boolean;\n    isGuestUser: boolean;\n}\n\ntype CSIFormattedSpecsProps = ICSIFormattedSpecsComponentBetaProps & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}> & WithTranslation;\n\nexport const CSI_FORMATTED_SPECS_FORM_NAME = 'CSI_FORMATTED_SPECS_FORM_NAME';\nclass CSIFormattedSpecs extends React.Component<CSIFormattedSpecsProps> {\n\n  public render() {\n    const {\n      t,\n      classes,\n      isAtsSpecTool,\n      isGuestUser\n    } = this.props;\n    return (\n      <PrintWrapper>\n        <PrintHeader\n          title={t('CsiPrint.csi')}\n          description={t('CsiPrint.description')}\n          fontIcon={['far', 'file-word']}\n          sampleModalKey={sampleModalKey}\n          sampleSrc={CSISample}\n          sampleAlt={t('CsiPrint.imageAlt')}\n        />\n          <form className={classes.form}>\n              <div className={classes.row}>\n                  <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                      <Typography\n                        variant='body2'\n                        color='inherit'\n                      >\n                        {t('SubmittalPrint.drawingLabel')}\n                      </Typography>\n                      <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                        name='includeLabel'\n                        component={FieldCheckbox}\n                        props={{\n                            label: t('SubmittalPrint.includeDrawingLabel'),\n                            variant: 'single',\n                            helperText: false,\n                            inputProps: {\n                                color: 'primary',\n                            },\n                        }}\n                      />\n                  </Paper>\n                  { isAtsSpecTool && !isGuestUser &&\n                      <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                            variant='body2'\n                            color='inherit'\n                          >\n                            {t('CsiPrint.includeAlternatives')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='includeAlternatives'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('CsiPrint.includeAlternatives'),\n                                variant: 'single',\n                                formControlProps: {\n                                    fullWidth: true,\n                                },\n                                inputProps: {\n                                    color: 'primary',\n                                },\n                                helperText: false,\n                            }}\n                          />\n                      </Paper>\n                  }\n                  { !isAtsSpecTool && !isGuestUser &&\n                      <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                            variant='body2'\n                            color='inherit'\n                          >\n                            {t('CsiPrint.includeNotes')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='includeNotes'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('CsiPrint.includeNotes'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                    color: 'primary',\n                                },\n                            }}\n                          />\n                      </Paper>\n                  }\n              </div>\n              { isAtsSpecTool && !isGuestUser &&\n                  <div className={classes.row}>\n                      <Paper className={classes.rowItem} elevation={0} style={{minWidth: 0}}>\n                          <Typography\n                            variant='body2'\n                            color='inherit'\n                          >\n                            {t('CsiPrint.includeNotes')}\n                          </Typography>\n                          <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n                            name='includeNotes'\n                            component={FieldCheckbox}\n                            props={{\n                                label: t('CsiPrint.includeNotes'),\n                                variant: 'single',\n                                helperText: false,\n                                inputProps: {\n                                    color: 'primary',\n                                },\n                            }}\n                          />\n                      </Paper>\n                      <Paper className={classes.rowItem} elevation={0} style={{borderWidth: 0}} />\n                  </div>\n              }\n          </form>\n      </PrintWrapper>\n  );\n  }\n  }\n\n  const styles = (theme: Theme): StyleRules => ({\n      form: {\n          padding: theme.spacing(1),\n  },\n  item: {\n    width: '50%',\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  },\n  row: {\n    display: 'flex',\n    flexDirection: 'row',\n    gap: theme.spacing(2),\n    margin: theme.spacing(1, 0),\n  },\n  rowItem: {\n    flexGrow: 1,\n    flexShrink: 1,\n    flexBasis: 0,\n    padding: theme.spacing(2),\n    borderColor: theme.palette.grey[400],\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderRadius: 8,\n  }\n});\n\nconst mapStateToProps = (state) => {\n  const selectIsAtsSpecTool = makeSelectIsAtsSpecTool();\n  const isAtsSpecTool = selectIsAtsSpecTool(state);\n  const identityObject = makeSelectIdentityObject()(state);\n  const isGuestUser = !identityObject;\n  return {\n    initialValues: fromJS({\n      includeLabel: true,\n      includeAlternatives: isAtsSpecTool ?? false,\n      ...isGuestUser ? {} : {includeNotes: true}\n    }),\n    isAtsSpecTool,\n    isGuestUser,\n  };\n};\n\nexport default compose<React.ComponentClass<ICSIFormattedSpecsComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps),\n  reduxForm({\n    form: CSI_FORMATTED_SPECS_FORM_NAME,\n    destroyOnUnmount: true,\n    enableReinitialize: true,\n  }),\n)(CSIFormattedSpecs);\n","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() as string;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n","var red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nexport default red;","var green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nexport default green;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 5.83l2.46 2.46c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 3.7a.9959.9959 0 00-1.41 0L8.12 6.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 5.83zm0 12.34l-2.46-2.46a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41l3.17 3.18c.39.39 1.02.39 1.41 0l3.17-3.17c.39-.39.39-1.02 0-1.41a.9959.9959 0 00-1.41 0L12 18.17z\"\n}), 'UnfoldMoreRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z\"\n}), 'ImportExport');\n\nexports.default = _default;","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\nvar hasElementType = typeof Element !== 'undefined';\n\nfunction equal(a, b) {\n  // fast-deep-equal index.js 2.0.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a)\n      , arrB = isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!hasProp.call(b, keys[i])) return false;\n    // end fast-deep-equal\n\n    // start react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element && b instanceof Element)\n      return a === b;\n\n    // custom handling for React\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of a react element\n        continue;\n      } else {\n        // all other properties should be traversed as usual\n        if (!equal(a[key], b[key])) return false;\n      }\n    }\n    // end react-fast-compare\n\n    // fast-deep-equal index.js 2.0.1\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function exportedEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if ((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","var isHotReloading = function isHotReloading() {\n  var castModule = module;\n  return !!(typeof castModule !== 'undefined' && castModule.hot && typeof castModule.hot.status === 'function' && castModule.hot.status() === 'apply');\n};\n\nexport default isHotReloading;","import 'whatwg-fetch';\n// this wasn't building on Ryan's computer so we're importing locally.. if someone can get this to work...\nimport {\n  safeStringify,\n} from 'ats-utils/src';\n// import safeStringify from '../safeStringify';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param  {object} response A response from a network request\n *\n * @return {object}          The parsed JSON from the request\n */\nfunction parseJSON(response) {\n  try {\n    return response.json();\n  } catch (e) {\n    console.error('could not parse response', e); // eslint-disable-line no-console\n  }\n}\n\nfunction parseTextCsv(response) {\n  try {\n    return response.text();\n  } catch(e) {\n    console.error('could not parse response', e); // eslint-disable-line no-console\n  }\n}\n\nexport default function request(_url, _options = {}) {\n  const defaultHeaders = {\n    Accept: 'application/json',\n    'Content-Type': 'application/json',\n  };\n\n  const options = {\n    ..._options,\n  };\n\n  const url = _url;\n\n  options.headers = {\n    ...defaultHeaders,\n    ...options.headers,\n  };\n\n  if (options.body) {\n    options.body = safeStringify(options.body);\n  }\n\n  return fetch(url, options)\n    .then((response) => {\n      if (!(response.status >= 200 && response.status < 300)) {\n        throw parseJSON(response);\n      }\n      if(response.headers.get('Content-Type').includes('text/csv')) {\n        return parseTextCsv(response);\n      }\n      return parseJSON(response);\n    })\n}\n\n","/*\n*\n*   Data for url / param generation\n*   must be nested under SERVICE name and then ENDPOINT name\n*   attributes:\n*     method: string (default 'get') -> http method to use\n*     url: string -> path to append to service url.\n*       Parameters in curly braces {param} will be extracted from body as named parameters,\n*       or in-order from params sent to apiCall\n*     params: array of string (representing keys) or <key_object> -> sanity check params being sent\n*       <key_object>: object of shape:\n*         {\n*           key: string -> key of value in parameters\n*           required: boolean (default false) -> throw error if parameter is not prsent\n*         }\n*\n*/\nconst endpointData = {\n  auth: {\n    status: {\n      url: '/status',\n    },\n    login: {\n      method: 'post',\n      url: '/login',\n      params: [ // unused at the moment\n        { key: 'username', required: true },\n        { key: 'password', required: true },\n      ],\n    },\n    verifyToken: {\n      url: '/verify/token',\n    },\n    verifyEmail: {\n      url: '/verify/email/{email}/{key}',\n    },\n  },\n  list: {\n    \"getFirmTypes\":{\n      \"summary\":\"Get list of firm types\",\n      \"description\":\"Get list of firm types\",\n      \"operationId\":\"getFirmTypes\",\n      \"tags\":[\n        \"Account\"\n      ],\n      \"responses\":{\n        \"200\":{ \n           \"description\":\"ListItem of Firm Types\",\n           \"schema\":{ \n              \"type\":\"object\",\n              \"properties\":{ \n                 \"meta\":{ \n                    \"type\":\"object\",\n                    \"properties\":{ \n                       \"version\":{ \n                          \"type\":\"string\"\n                       },\n                       \"serviceName\":{ \n                          \"type\":\"string\"\n                       },\n                       \"startTime\":{ \n                          \"type\":\"number\",\n                          \"format\":\"integer\"\n                       },\n                       \"render\":{ \n                          \"type\":\"string\"\n                       },\n                       \"apiVersion\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestTime\":{ \n                          \"type\":\"string\",\n                          \"format\":\"date-time\"\n                       },\n                       \"requestMethod\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestHost\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestQueryString\":{ \n                          \"type\":\"string\"\n                       },\n                       \"versionNumbers\":{ \n                          \"type\":\"object\",\n                          \"properties\":{ \n                             \"name\":{ \n                                \"type\":\"string\"\n                             }\n                          }\n                       },\n                       \"cacheInfo\":{ \n                          \"type\":\"string\"\n                       }\n                    }\n                 },\n                 \"payload\":{ \n                    \"type\":\"array\",\n                    \"items\":{ \n                       \"type\":\"object\",\n                       \"properties\":{ \n                          \"list\":{ \n                             \"type\":\"array\",\n                             \"items\":{ \n                                \"type\":\"object\",\n                                \"properties\":{ \n                                   \"firmTypes\":{ \n                                      \"properties\":{ \n                                         \"id\":{ \n                                            \"type\":\"number\",\n                                            \"format\":\"integer\"\n                                         },\n                                         \"value\":{ \n                                            \"type\":\"string\"\n                                         }\n                                      }\n                                   }\n                                }\n                             }\n                          }\n                       }\n                    }\n                 }\n              }\n           }\n        },\n        \"404\":{ \n           \"description\":\"No firm type found\",\n           \"schema\":{ \n              \"type\":\"object\",\n              \"properties\":{ \n                 \"meta\":{ \n                    \"type\":\"object\",\n                    \"properties\":{ \n                       \"version\":{ \n                          \"type\":\"string\"\n                       },\n                       \"serviceName\":{ \n                          \"type\":\"string\"\n                       },\n                       \"startTime\":{ \n                          \"type\":\"number\",\n                          \"format\":\"integer\"\n                       },\n                       \"render\":{ \n                          \"type\":\"string\"\n                       },\n                       \"apiVersion\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestTime\":{ \n                          \"type\":\"string\",\n                          \"format\":\"date-time\"\n                       },\n                       \"requestMethod\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestHost\":{ \n                          \"type\":\"string\"\n                       },\n                       \"requestQueryString\":{ \n                          \"type\":\"string\"\n                       },\n                       \"versionNumbers\":{ \n                          \"type\":\"object\",\n                          \"properties\":{ \n                             \"name\":{ \n                                \"type\":\"string\"\n                             }\n                          }\n                       },\n                       \"cacheInfo\":{ \n                          \"type\":\"string\"\n                       }\n                    }\n                 },\n                 \"payload\":{ \n                    \"type\":\"object\",\n                    \"properties\":{ \n                       \"error\":{ \n                          \"type\":\"object\",\n                          \"properties\":{ \n                             \"error_type\":{ \n                                \"type\":\"string\"\n                             },\n                             \"error\":{ \n                                \"type\":\"string\"\n                             },\n                             \"code\":{ \n                                \"type\":\"number\",\n                                \"format\":\"integer\"\n                             }\n                          }\n                       }\n                    }\n                 }\n              }\n           }\n        }\n     },\n      \"method\":\"get\",\n      \"url\":\"/firm/types\",\n      \"env\":\"ENDPOINT_LIST2\"\n    },\n  },\n  image: {\n    \"status\":{\n      \"summary\":\"Status\",\n      \"description\":\"Checks the status of the service\",\n      \"operationId\":\"status\",\n      \"tags\":[\n        \"Image\"\n      ],\n      \"responses\":{\n        \"200\":{\n          \"description\":\"Server is up\",\n          \"schema\":{\n            \"type\":\"object\",\n            \"properties\":{\n              \"token\":{\n                \"type\":\"string\"\n              }\n            }\n          }\n        }\n      },\n      \"method\":\"get\",\n      \"url\":\"/status\",\n      \"env\":\"ENDPOINT_IMAGE2\"\n    },\n    \"getImageFile\":{\n      \"summary\":\"Get image file\",\n      \"description\":\"Given file ID, get that file image in JPEG/PNG/SVG format\",\n      \"operationId\":\"getImageFile\",\n      \"parameters\":[\n        {\n          \"name\":\"fileId\",\n          \"in\":\"path\",\n          \"description\":\"Id of the image file\",\n          \"required\":true,\n          \"type\":\"string\"\n        }\n      ],\n      \"tags\":[\n        \"Image\"\n      ],\n      \"produces\":[\n        \"image/jpeg\",\n        \"image/png\"\n      ],\n      \"responses\":{\n        \"200\":{\n          \"description\":\"Image in  JPEG/PNG/SVG format\",\n          \"schema\":{\n            \"type\":\"string\",\n            \"format\":\"binary\"\n          }\n        },\n        \"404\":{\n          \"description\":\"Invalid id provided\",\n          \"schema\":{\n            \"$ref\":\"#/definitions/ErrorResponse\"\n          }\n        }\n      },\n      \"method\":\"get\",\n      \"url\":\"/image/{fileId}\",\n      \"env\":\"ENDPOINT_IMAGE2\"\n    },\n    \"createImageFile\":{\n      \"summary\":\"Create a new Image file\",\n      \"description\":\"Create a new image file in the system\",\n      \"operationId\":\"createImageFile\",\n      \"consumes\":[\n        \"multipart/form-data\"\n      ],\n      \"parameters\":[\n        {\n          \"in\":\"formData\",\n          \"name\":\"upfile\",\n          \"type\":\"file\",\n          \"description\":\"Image file that will be uploaded in the file system\",\n          \"required\":true\n        }\n      ],\n      \"tags\":[\n        \"Image\"\n      ],\n      \"responses\":{\n        \"201\":{\n          \"description\":\"New Image file created successfully\",\n          \"schema\":{\n            \"$ref\":\"#/definitions/ImageResponse\"\n          }\n        },\n        \"400\":{\n          \"description\":\"Invalid request (this request is missing some information)\",\n          \"schema\":{\n            \"$ref\":\"#/definitions/ErrorResponse\"\n          }\n        }\n      },\n      \"method\":\"post\",\n      \"url\":\"/image\",\n      \"env\":\"ENDPOINT_IMAGE2\"\n    }\n  },\n  auth: {\n    \"login\": {\n      \"summary\": \"Login User\",\n      \"description\": \"The Login endpoint returns the user's JWT token.\",\n      \"operationId\": \"login\",\n      \"consumes\": [\n        \"multipart/form-data\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"username\",\n          \"in\": \"formData\",\n          \"description\": \"username\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"password\",\n          \"in\": \"formData\",\n          \"description\": \"password\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"User JWT token\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"auth\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"token\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Missing parameters\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"403\": {\n          \"description\": \"Invalid username/password combination\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/login\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"loginAs\": {\n      \"summary\": \"Login as user\",\n      \"description\": \"Login as user\",\n      \"operationId\": \"loginAs\",\n      \"consumes\": [\n        \"multipart/form-data\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"username\",\n          \"in\": \"path\",\n          \"description\": \"username\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"X-ATS-TOKEN\",\n          \"in\": \"header\",\n          \"description\": \"JWT Token\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"User JWT token\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"auth\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"token\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Failed to login as\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/login-as/{username}\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"logout\": {\n      \"summary\": \"Logout User\",\n      \"description\": \"This end point will return user token of the original user for login as user, or null if not login as user\",\n      \"operationId\": \"logout\",\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"User JWT token or null\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"auth\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"token\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/logout\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"verifyToken\": {\n      \"summary\": \"Validate User JWT token\",\n      \"description\": \"The Verify endpoint validates the JWT token.\",\n      \"operationId\": \"verifyToken\",\n      \"parameters\": [\n        {\n          \"name\": \"X-ATS-TOKEN\",\n          \"in\": \"header\",\n          \"description\": \"JWT Token\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"true if token is valid and false if invalid\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"auth\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"verify_token\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"user\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"claims\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                              \"identity\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"uid\": {\n                                    \"type\": \"integer\"\n                                  },\n                                  \"given_name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"family_name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"username\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"email\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"verified\": {\n                                    \"type\": \"boolean\"\n                                  },\n                                  \"firm_id\": {\n                                    \"type\": \"integer\"\n                                  },\n                                  \"firm_type_id\": {\n                                    \"type\": \"integer\"\n                                  },\n                                  \"firm_type_name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"office_id\": {\n                                    \"type\": \"integer\"\n                                  },\n                                  \"acl_roles\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                      \"type\": \"integer\"\n                                    }\n                                  },\n                                  \"acl_role_names\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"parentUserToken\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"originalUser\": {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                      \"uid\": {\n                                        \"type\": \"integer\"\n                                      },\n                                      \"given_name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"family_name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"username\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"email\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"acl_roles\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"integer\"\n                                        }\n                                      },\n                                      \"acl_role_names\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"firm_id\": {\n                                        \"type\": \"integer\"\n                                      },\n                                      \"firm_type_id\": {\n                                        \"type\": \"integer\"\n                                      },\n                                      \"firm_type_name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"office_id\": {\n                                        \"type\": \"integer\"\n                                      }\n                                    }\n                                  },\n                                  \"version\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              },\n                              \"iat\": {\n                                \"type\": \"integer\"\n                              },\n                              \"exp\": {\n                                \"type\": \"integer\"\n                              },\n                              \"zoneinfo\": {\n                                \"type\": \"string\"\n                              }\n                            }\n                          },\n                          \"user\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                              \"uid\": {\n                                \"type\": \"integer\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              },\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"verified\": {\n                                \"type\": \"boolean\"\n                              },\n                              \"office_id\": {\n                                \"type\": \"integer\"\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"No token provided, or token not valid\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"get\",\n      \"url\": \"/verify/token\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"forgotPassword\": {\n      \"summary\": \"Forgot user Password\",\n      \"description\": \"The forgotpassword POST endpoint can be used to get a random key for resetting user's password.\",\n      \"operationId\": \"forgotPassword\",\n      \"parameters\": [\n        {\n          \"name\": \"email\",\n          \"in\": \"path\",\n          \"description\": \"email\",\n          \"required\": true,\n          \"type\": \"integer\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Reset password key\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"key\": {\n                \"type\": \"string\"\n              },\n              \"expireIn\": {\n                \"type\": \"integer\"\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Invalid email provided\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/forgotpassword\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"resetPassword\": {\n      \"summary\": \"Reset user Password\",\n      \"description\": \"The resetpassword POST endpoint can be used to reset the user's password.\",\n      \"operationId\": \"resetPassword\",\n      \"consumes\": [\n        \"multipart/form-data\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"key\",\n          \"in\": \"formData\",\n          \"description\": \"key can be obtained from /resetpassword/email\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"password\",\n          \"in\": \"formData\",\n          \"description\": \"New password for the user\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Password successfully updated\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"success\": {\n                \"type\": \"boolean\"\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Invalid/expired key provided\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/resetpassword\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"setPassword\": {\n      \"summary\": \"Set user Password\",\n      \"description\": \"The setpassword POST endpoint can be used to set the user's password after user registered. Auto set user's email verify flag to TRUE.\",\n      \"operationId\": \"setPassword\",\n      \"consumes\": [\n        \"multipart/form-data\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"key\",\n          \"in\": \"formData\",\n          \"description\": \"key can be obtained from /resetpassword/email\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"password\",\n          \"in\": \"formData\",\n          \"description\": \"New password for the user\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Password successfully set\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"success\": {\n                \"type\": \"boolean\"\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Invalid/expired key provided\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/setpassword\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"verifyEmailByKey\": {\n      \"summary\": \"Validate your Email from a link\",\n      \"description\": \"This is a linkable endpoint to validate an email from an html link\",\n      \"operationId\": \"verifyEmailByKey\",\n      \"parameters\": [\n        {\n          \"name\": \"email-key\",\n          \"in\": \"path\",\n          \"description\": \"generated unique\",\n          \"required\": true,\n          \"type\": \"integer\"\n        },\n        {\n          \"name\": \"email\",\n          \"in\": \"path\",\n          \"description\": \"email address to validate\",\n          \"required\": true,\n          \"type\": \"integer\"\n        }\n      ],\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Email has been validated\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"key\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Invalid email-key provided\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"get\",\n      \"url\": \"/verify/email/{key}/{email}\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"verifyEmail\": {\n      \"summary\": \"Verify user email\",\n      \"description\": \"Generate a new email key for a given user\",\n      \"operationId\": \"verifyEmail\",\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"X-ATS-TOKEN\",\n          \"in\": \"header\",\n          \"description\": \"valid JWT token\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"email-key to be embedded in a link\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"token\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        },\n        \"400\": {\n          \"description\": \"Invalid/expired key provided\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/verify/email\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"registerUser\": {\n      \"summary\": \"Register a user with its firm and office\",\n      \"description\": \"Register a user with its firm and office\",\n      \"operationId\": \"registerUser\",\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Registered a new user\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"token\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Could not register user\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/registration\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"resendActivation\": {\n      \"summary\": \"Resend the activation link to the user\",\n      \"description\": \"Resend the activation link to the user\",\n      \"operationId\": \"resendActivation\",\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Resend the activation link\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"token\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Cannot resend link\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/resendActivation\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"emailExists\": {\n      \"summary\": \"Check if email already exists or not\",\n      \"description\": \"Check if email already exists or not\",\n      \"operationId\": \"emailExists\",\n      \"tags\": [\n        \"Auth\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Check if email exists\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"token\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Email already exists\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/emailexists\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"authorize\": {\n      \"summary\": \"Authorize the request\",\n      \"description\": \"This will return a valid JWT token\",\n      \"operationId\": \"authorize\",\n      \"parameters\": [\n        {\n          \"name\": \"X-ATS-App-Id\",\n          \"in\": \"header\",\n          \"description\": \"App Id\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"App\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"returns a valid JWT token\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"count\": {\n                \"type\": \"integer\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Inetrnal server error/ Invalid\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/app/authorize\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"getAppConfigByDomain\": {\n      \"summary\": \"get App config\",\n      \"description\": \"This will return the config/theme/env-vars of the APP for the given AppId\",\n      \"operationId\": \"getAppConfigByDomain\",\n      \"tags\": [\n        \"App\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"APP config & env-vars\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"count\": {\n                \"type\": \"integer\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"No Domain provided or Internal server error\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/auth/app/config\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"getAppById\": {\n      \"summary\": \"get App details\",\n      \"description\": \"This will return the details of the APP for the given Id\",\n      \"operationId\": \"getAppById\",\n      \"parameters\": [\n        {\n          \"name\": \"X-Ats-App-Id\",\n          \"in\": \"header\",\n          \"description\": \"App Id\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"appId\",\n          \"in\": \"path\",\n          \"description\": \"app id\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"App\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"APP details\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"count\": {\n                \"type\": \"integer\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"No AppId provided or Internal server error\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"get\",\n      \"url\": \"/app/{appId}\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    },\n    \"createApp\": {\n      \"summary\": \"Create an App\",\n      \"description\": \"creates an App for the given details\",\n      \"operationId\": \"createApp\",\n      \"consumes\": [\n        \"multipart/form-data\"\n      ],\n      \"parameters\": [\n        {\n          \"name\": \"X-ATS-APP-ID\",\n          \"in\": \"header\",\n          \"description\": \"App Id\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"appName\",\n          \"in\": \"formData\",\n          \"description\": \"Name of Application\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"firmId\",\n          \"in\": \"formData\",\n          \"description\": \"Id of the firm\",\n          \"required\": true,\n          \"type\": \"integer\"\n        },\n        {\n          \"name\": \"description\",\n          \"in\": \"formData\",\n          \"description\": \"description of app\",\n          \"required\": true,\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"allowAnonymous\",\n          \"in\": \"formData\",\n          \"description\": \"annonymous user allowed or not\",\n          \"required\": true,\n          \"type\": \"integer\"\n        },\n        {\n          \"name\": \"environment\",\n          \"in\": \"formData\",\n          \"description\": \"environment used (local, staging)\",\n          \"required\": true,\n          \"type\": \"string\"\n        }\n      ],\n      \"tags\": [\n        \"App\"\n      ],\n      \"responses\": {\n        \"200\": {\n          \"description\": \"Creates an App for the given data\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"count\": {\n                \"type\": \"integer\"\n              }\n            }\n          }\n        },\n        \"500\": {\n          \"description\": \"Unable to create an App\",\n          \"schema\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"meta\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"render\": {\n                    \"type\": \"string\"\n                  },\n                  \"apiVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceName\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceVersion\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestTime\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestMethod\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestHost\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestQueryString\": {\n                    \"type\": \"string\"\n                  },\n                  \"versionNumbers\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"service\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework\": {\n                        \"type\": \"string\"\n                      },\n                      \"ats-framework-ext\": {\n                        \"type\": \"string\"\n                      },\n                      \"transmission-layer\": {\n                        \"type\": \"string\"\n                      }\n                    }\n                  },\n                  \"cacheInfo\": {\n                    \"type\": \"string\"\n                  }\n                }\n              },\n              \"payload\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"error\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"error_type\": {\n                        \"type\": \"string\"\n                      },\n                      \"error\": {\n                        \"type\": \"string\"\n                      },\n                      \"code\": {\n                        \"type\": \"integer\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"method\": \"post\",\n      \"url\": \"/app\",\n      \"env\": \"ENDPOINT_AUTH2\"\n    }\n  }\n};\nexport default endpointData;\n","import {\n  camelize,\n} from 'ats-utils/src';\n\nimport {\n  ISwaggerParser,\n  ISwaggerParserOptions,\n} from 'ats-utils/src/Interfaces/SwaggerParser';\n\nimport {\n  ISwaggerEndpointResponse,\n  IParsedResponse,\n} from 'ats-utils/src/Interfaces/AtsApi';\n\nconst ERROR_IF_PARSE_FAILED = true;\nconst WARN_IF_PARSE_FAILED = true;\n/*\n*   Swagger Parser\n*   Usage: parses swagger responses from hitting ats api service endpoints\n*   NOTE: must also provide envKey, the key in the environment corresponding to the url that the\n*         swagger response comes from\n*/\nclass SwaggerParser implements ISwaggerParser {\n  private response: ISwaggerEndpointResponse;\n  private envKey: string;\n  private parsedData: IParsedResponse;\n\n  constructor(\n    {\n      envKey,\n      response,\n    }: ISwaggerParserOptions\n  ) {\n    this.setResponse(response).setEnvKey(envKey);\n  }\n\n  public setResponse(response: ISwaggerEndpointResponse) {\n    this.response = response;\n    return this;\n  }\n\n  public getResponse() {\n    return this.response;\n  }\n\n  public setEnvKey(envKey: string) {\n    this.envKey = envKey;\n    return this;\n  }\n\n  public getEnvKey() {\n    return this.envKey;\n  }\n\n  public setParsedData(parsedData: IParsedResponse) {\n    this.parsedData = parsedData;\n    return this;\n  }\n\n  public getParsedData() {\n    return this.parsedData;\n  }\n\n  public parseResponse() {\n    const response = this.getResponse();\n    const envKey = this.getEnvKey();\n    try {\n      const serviceName = response.meta.serviceName;\n      const serviceVersion = response.meta.serviceVersion || '';\n      const swaggerEndpointData = response.payload[serviceName].endpoint;\n      const endpointData = Object.keys(swaggerEndpointData).reduce((endpoints, endpointUrl) => {\n        const data = swaggerEndpointData[endpointUrl];\n        return {\n          ...endpoints,\n          ...Object.keys(data).reduce((acc, methodKey) => {\n            const methodValue = data[methodKey];\n            const methodName = camelize(methodValue.operationId || methodValue.summary);\n            return {\n              ...acc,\n              [methodName]: {\n                ...methodValue,\n                method: methodKey,\n                url: endpointUrl,\n                env: envKey,\n              }\n            };\n          }, {})\n        };\n      }, {});\n      this.setParsedData({\n        serviceName,\n        serviceVersion,\n        endpointData,\n      });\n    } catch (e) {\n      const failureData = [\n        'Failed to parse swagger response',\n        {\n          response,\n          envKey,\n          e,\n        },\n      ];\n      if (ERROR_IF_PARSE_FAILED) {\n        console.error(...failureData); // tslint:disable-line\n      } else if (WARN_IF_PARSE_FAILED) {\n        console.warn(...failureData); // tslint:disable-line\n      }\n    }\n    return this;\n  }\n\n\n}\n\nexport default SwaggerParser;\n","/* eslint-disable */\n\nimport fetchWithDefaultHeaders from '../../utils/fetchWithDefaultHeaders';\nimport envProd from './env.json';\nimport defaultEndpointData from './endpointData';\nimport prebuiltEndpointData from './prebuiltEndpointData.json';\nimport SwaggerParser from '../SwaggerParser';\nimport {\n  EventType,\n  HttpMethod,\n  IApiOptions,\n  IAtsApiAppendParametersOptions,\n  IEndpointDataInfo,\n  IIdentity,\n  IServiceData,\n} from 'ats-utils/src/Interfaces/AtsApi';\nimport {\n  stringifyQueryParams,\n  stringReplace,\n} from 'ats-utils/src';\n\nimport {\n  isFunction,\n  isObject,\n} from 'lodash';\n\nimport moment from 'moment';\nconst ERROR_IF_ARGS_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH = true;\nconst WARN_IF_ARGS_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH = true;\nconst ERROR_IF_BODY_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH = true;\nconst WARN_IF_BODY_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH = true;\nconst ERROR_IF_ARGS_AND_BODY_PARAMS_FOUND = true;\nconst WARN_IF_ARGS_AND_BODY_PARAMS_FOUND = true;\nconst ERROR_IF_MISSING_PARAMETERS = true;\nconst WARN_IF_MISSING_PARAMETERS = true;\n\nconst X_ATS_TOKEN_KEY = 'X-ATS-TOKEN';\nconst X_ATS_APP_ID_KEY = 'X-ATS-APP-ID';\nconst X_ATS_TIMEZONE_OFFSET = 'X-ATS-TIMEZONE-OFFSET';\nconst X_ATS_TIME_ZONE = 'X-ATS-TIMEZONE';\nconst X_ATS_SESSION_ID = 'X-ATS-SESSION-ID';\n\n// 'ready' waits for every service's OPTIONS call, so one that never answers would hold back the whole app start\nconst LOAD_ENDPOINTS_TIMEOUT_MS = 10000;\n// wait before giving the services whose OPTIONS call failed their one retry\nconst LOAD_ENDPOINTS_RETRY_DELAY_MS = 1000;\n\n/*\n*   ATS api\n*   onEvent -> trigger status\n*     init\n*     ready\n*     token\n*     identity\n*     user\n*\n*   onEventFn -> the functions to trigger when status triggered\n*\n*   appToken -> token from just api key\n*   appIdentity -> identity from appToken\n*   userToken -> token from user login\n*   userIdentity -> identity\n*\n*\n*/\n\nexport type IEventCallback = (atsApi?: Api, event?: EventType) => void;\n\nclass Api implements IApiOptions {\n  public debug: boolean;\n  public suppressErrors: boolean;\n  public appToken: string;\n  public appIdentity: IIdentity;\n  public userToken: string;\n  public userIdentity: IIdentity;\n  public onEventFn: {\n    [event in EventType]?: IEventCallback[];\n  };\n  public everyEventFn: {\n    [event in EventType]?: IEventCallback[];\n  };\n  public onEvent: {\n    [event in EventType]?: boolean;\n  };\n  public abortControllers: AbortController[];\n\n  public apiKey?: string;\n  public serviceBlacklist: string[];\n  public env: object;\n\n  public endpointData: IServiceData;\n  public loadEndpointsTimeout?: NodeJS.Timeout | number | any;\n  // bumped by every loadEndpoints so an older run stops writing endpointData and triggering 'ready'\n  public loadEndpointsRun: number = 0;\n  // private envLoaded;\n  // private userToken;\n  // private identity;\n\n  // blacklist of services to NOT fetch endpoints for\n  constructor({\n                apiKey,\n                env,\n                serviceBlacklist,\n                endpointData,\n                debug = false,\n                suppressErrors = false,\n              }: IApiOptions = {}) {\n    console.debug('initializing atsApi', {\n      apiKey,\n      env,\n      serviceBlacklist,\n      endpointData,\n      debug,\n    });\n\n    this.debug = debug;\n    this.suppressErrors = suppressErrors;\n\n    this.appToken = null;\n    this.appIdentity = null;\n    this.userToken = null;\n    this.userIdentity = null;\n    this.onEventFn = {};\n    this.everyEventFn = {};\n    this.onEvent = {};\n\n    this.abortControllers = [];\n    if (apiKey) {\n      this.apiKey = apiKey;\n      this.serviceBlacklist = serviceBlacklist;\n      this.env = {...envProd, ...env};\n      this.trigger('init');\n      this.trigger('envLoaded', env != null);\n      if (endpointData == null) {\n        this.loadEndpointsDebounced();\n      } else {\n        this.setEndpointData({\n          ...prebuiltEndpointData,\n          ...endpointData,\n        });\n      }\n    } else {\n      console.error('API KEY MISSING. PLEASE CONTACT ATS FOR A KEY'); // tslint:disable-line\n      window.stop();\n    }\n  }\n\n  public on(event: EventType, fn: IEventCallback) {\n    if (!isFunction(fn)) {\n      console.error('must call on(fn) with a function, instead given: ', { // tslint:disable-line\n        fn\n      });\n    }\n    const FnList = this.onEventFn[event] || [];\n\n    if (this.onEvent[event]) {\n      fn();\n    } else {\n      FnList.push(fn);\n      this.onEventFn[event] = FnList;\n    }\n  }\n\n  public every(event: EventType, fn: IEventCallback) {\n    if (!isFunction(fn)) {\n      console.error('must call every(fn) with a function, instead given: ', { // tslint:disable-line\n        fn\n      });\n    }\n    const FnList = this.everyEventFn[event] || [];\n\n    FnList.push(fn);\n    this.everyEventFn[event] = FnList;\n  }\n\n  public trigger(event: EventType, on: boolean = true) {\n    if (this.debug) {\n      console.error('trigger', { // tslint:disable-line\n        event,\n        on,\n      });\n    }\n    if (on) {\n      // call related buffered functions\n      this.onEvent[event] = true;\n      (this.onEventFn[event] || []).forEach((fn) => {\n        fn(this, event);\n      });\n      this.onEventFn[event] = null;\n      (this.everyEventFn[event] || []).forEach((fn) => {\n        fn(this, event);\n      });\n      (this.everyEventFn['trigger'] || []).forEach((fn) => {\n        fn(this, event);\n      });\n    } else {\n      // remove event from registered event list\n      this.untrigger(event);\n    }\n  }\n\n  public untrigger(event: EventType) {\n    // remove registered event\n    delete this.onEvent[event];\n    // call registered functions of 'untrigger' event\n    (this.everyEventFn['untrigger'] || []).forEach((fn) => {\n      fn(this, event);\n    });\n  }\n\n  public invalidateAppToken() {\n    this.untrigger('appToken');\n    this.untrigger('appIdentity');\n    this.appToken = null;\n    this.appIdentity = null;\n    this.invalidateToken();\n  }\n\n  public invalidateToken() {\n    this.untrigger('token');\n    this.untrigger('identity');\n    this.userToken = null;\n    this.userIdentity = null;\n  }\n\n  public ready(fn) {\n    this.on('ready', fn);\n  }\n\n  public toString() {\n    return `API: { key: ${this.apiKey} }, { envCount: ${Object.keys(this.env).length} }`;\n  }\n\n  public getHeaders(_token, appId, withTimezoneOffset, withTimezone, xAtsLanguage?, sessionId?) {\n    const token = _token != null ? _token : this.getToken();\n    // if provide _token is an empty string, then do not include token in headers\n    const offset = Math.abs(moment().utcOffset());\n    return {\n      'x-ats-language': xAtsLanguage || this.getLanguage(),\n      [X_ATS_APP_ID_KEY]: appId || this.getApiKey(),\n      ...(\n        (token && _token !== '') && {\n          [X_ATS_TOKEN_KEY]: token,\n        }\n      ),\n      ...(\n        withTimezoneOffset && {\n          [X_ATS_TIMEZONE_OFFSET]: `${moment().utcOffset() < 0 ? '-' : ''}${('0' + Math.floor(offset / 60)).slice(-2)}:${('0' + (offset % 60)).slice(-2)}`\n        }\n      ),\n      ...(\n        withTimezone && {\n          [X_ATS_TIME_ZONE]: `${Intl.DateTimeFormat().resolvedOptions().timeZone}`\n        }\n      ),\n      ...(\n         sessionId && {\n            [X_ATS_SESSION_ID]: sessionId\n          }\n      )\n    };\n  }\n\n  public setApiKey(apiKey) {\n    this.apiKey = apiKey;\n    return this;\n  }\n\n  public setAppToken(token) {\n    this.appToken = token;\n    if (token != null) {\n      this.trigger('appToken');\n    } else {\n      this.untrigger('appToken');\n    }\n    return this;\n  }\n\n  public setToken(token) {\n    this.userToken = token;\n    if (token != null) {\n      this.trigger('token');\n    } else {\n      this.untrigger('token');\n    }\n    return this;\n  }\n\n\n  public setEnv(env, serviceBlacklist) {\n    this.env = env;\n    if (serviceBlacklist != null) {\n      this.serviceBlacklist = serviceBlacklist;\n    }\n    if (env != null) {\n      this.loadEndpointsDebounced();\n    }\n    this.trigger('envLoaded', env != null);\n    return this;\n  }\n\n  public getEnv() {\n    return this.env;\n  }\n\n  public setEndpointData(endpointData?: IServiceData) {\n    if (endpointData != null) {\n      this.endpointData = endpointData;\n    }\n    this.trigger('ready');\n    return this;\n  }\n\n  // maybe have a lsit of which endpoints to load?\n  public loadEndpointsDebounced() {\n    this.untrigger('ready');\n    if (this.loadEndpointsTimeout != null) {\n      clearTimeout(this.loadEndpointsTimeout);\n      this.loadEndpointsTimeout = null;\n    }\n\n    this.loadEndpointsTimeout = setTimeout((function () {\n      this.loadEndpoints();\n    }).bind(this), 500);\n  }\n\n  public loadEndpoints() {\n    this.abortControllers.forEach((abortController) => {\n      abortController.abort();\n    });\n    this.abortControllers = [];\n    this.endpointData = {};\n    const run = ++this.loadEndpointsRun;\n    const isCurrentRun = () => run === this.loadEndpointsRun;\n    const loadEndpointLogs = [];\n    const skippedEndpoints = [];\n    const parsedEndpoints = [];\n    const retriedEndpoints = [];\n    const serviceBlacklistLowerCase = (this.serviceBlacklist || []).map((service) => service && service.toLowerCase());\n    const env = this.getEnv();\n    // the env is parsed to only include endpoints (key startsWith ENDPOINT_) for OPTIONS calls\n    const envEndpoints = Object.keys(env).filter(key => key.startsWith('ENDPOINT_')).reduce((acc, curr) => {\n      acc[curr] = env[curr];\n      return acc;\n    }, {});\n\n    // resolves true once the service's endpoints are parsed into endpointData, false when the call or the parsing failed\n    const loadServiceEndpoints = (service: string): Promise<boolean> => new Promise((resolve) => {\n      const controller = new AbortController();\n      const signal = controller.signal;\n      this.abortControllers.push(controller);\n      const timeout = setTimeout(() => controller.abort(), LOAD_ENDPOINTS_TIMEOUT_MS);\n      fetchWithDefaultHeaders(env[service], {method: 'options', signal}).then((response) => { // fetchWithDefaultHeaders is a promise\n        clearTimeout(timeout);\n        if (!isCurrentRun()) {\n          resolve(false);\n          return response;\n        }\n        const swaggerParser = new SwaggerParser({response, envKey: service});\n        const {\n          serviceName,\n          serviceVersion,\n          endpointData,\n        } = swaggerParser.parseResponse().getParsedData();\n\n        this.endpointData[serviceName] = endpointData;\n        loadEndpointLogs.push([`parsed: ${service}`]);\n        parsedEndpoints.push(service);\n        resolve(true);\n        return response;\n      }).catch((error) => {\n        clearTimeout(timeout);\n        loadEndpointLogs.push([`could not parse: ${service}`, {\n          error,\n        }]);\n        resolve(false);\n        return error;\n      });\n    });\n    const notLoaded = (services: string[], loaded: boolean[]) => services.filter((_service, i) => !loaded[i]);\n\n    const servicesToLoad = Object.keys(envEndpoints).filter((service) => {\n      if (serviceBlacklistLowerCase.indexOf(service.toLowerCase()) === -1) {\n        return true;\n      }\n      loadEndpointLogs.push([`skipping: ${service}`]);\n      skippedEndpoints.push(service);\n      return false;\n    });\n\n    Promise.all(servicesToLoad.map(loadServiceEndpoints)).then((loaded) => {\n      const failed = notLoaded(servicesToLoad, loaded);\n      if (failed.length === 0 || !isCurrentRun()) {\n        return failed;\n      }\n      // a service left out stays unknown for the whole visit (every call to it fails with Unknown Endpoint), so the\n      // failed ones get one more try before 'ready'. Only the page loads that hit a failure wait for it.\n      return new Promise((resolve) => setTimeout(resolve, LOAD_ENDPOINTS_RETRY_DELAY_MS)).then(() => {\n        if (!isCurrentRun()) {\n          return failed;\n        }\n        loadEndpointLogs.push([`retrying: ${failed.join(', ')}`]);\n        retriedEndpoints.push(...failed);\n        return Promise.all(failed.map(loadServiceEndpoints)).then((retried) => notLoaded(failed, retried));\n      });\n    }).then((failedEndpoints) => {\n      // a newer loadEndpoints reset endpointData and will trigger 'ready' itself once its own calls are done\n      if (!isCurrentRun()) {\n        return;\n      }\n      console.debug('loadEndpoints status (expand to see)', {\n        resolvedEndpoints: Object.keys(envEndpoints),\n        parsedEndpoints,\n        skippedEndpoints,\n        retriedEndpoints,\n        failedEndpoints,\n        loadEndpointLogs,\n        endpointData: this.endpointData,\n      });\n      this.trigger('ready');\n    });\n  }\n\n  public getApiKey() {\n    return this.apiKey;\n  }\n\n  public getLanguage() {\n    const defaultLangauge = 'en';\n    const langaugeStatePath = ['languages💾','locale'];\n    if ((window as any).Ats && (window as any).Ats.AtsStore && (window as any).Ats.AtsStore.store && (window as any).Ats.AtsStore.store.store) {\n      return (window as any).Ats.AtsStore.store.store.getState().getIn(langaugeStatePath) || defaultLangauge;\n    }\n    return defaultLangauge;\n  }\n// basically just to check if we have a valid token\n  public getToken() {\n    if (this.getUserToken() != null) {\n      return this.getUserToken();\n    }\n    return this.getAppToken();\n  }\n\n  public getAppToken() {\n    return this.appToken;\n  }\n\n  public getUserToken() {\n    return this.userToken;\n  }\n\n  public getIdentity() {\n    if (this.getUserToken() != null) {\n      return this.getUserIdentity();\n    }\n    return this.getAppIdentity();\n  }\n\n  public getAppIdentity() {\n    return this.appIdentity;\n  }\n\n  public getUserIdentity() {\n    return this.userIdentity;\n  }\n\n// here we might want to call the verify token api call and set this.userToken, then return this.getToken()\n  public async getTokenValid() {\n    try {\n      await this.callApi({\n        service: 'auth',\n        endpoint: 'verifyToken',\n        token: this.getUserToken(),\n      }, (resp) => {\n        this.processUserIdentity(resp);\n      });\n    } catch (e) {\n      this.invalidateToken();\n    }\n    return this.getUserToken();\n  }\n\n// here we might want to call the verify token api call and set this.userToken, then return this.getToken()\n  public async getAppTokenValid() {\n    try {\n      await this.callApi({\n        service: 'auth',\n        endpoint: 'verifyToken',\n        token: this.getAppToken(),\n      }, (resp) => {\n        this.processAppIdentity(resp);\n      });\n    } catch (e) {\n      this.invalidateAppToken();\n    }\n    return this.getAppToken();\n  }\n\n// check if env has been loaded... will be null if using default env but if you're using default you can ignore this anyway\n  public getEnvLoaded() {\n    return this.onEvent['envLoaded'];\n  }\n\n  public callApiProcessToken = async ({token, service, endpoint, url, options, callback, skipTokenProcessing = false}) => {\n\n    let resp;\n    try {\n      resp = await this.internalCallApi(url, options);\n    } catch (error) {\n      throw await error;\n    }\n    // console.debug('or maybe grab token here, that way we can handle errors as well (e.g. remove token)'); // @@TODO\n\n    // skipTokenProcessing lets a caller authorize/login/verify on behalf of something else\n    // (e.g. generating a token for another app id) without replacing the tokens/identities this instance is running with\n    if (!skipTokenProcessing) {\n      const lowerService = service.toLowerCase();\n      // login response hack for now\n      if (lowerService === 'auth' && endpoint === 'authorize') {\n        this.processAppToken(resp);\n      }\n      // login response hack for now\n      if (lowerService === 'auth' && endpoint === 'login') {\n        this.processUserToken(resp);\n      }\n      // login response hack for now\n      if (lowerService === 'auth' && endpoint === 'verifyToken') {\n        if (\n          (token != null && token === this.getAppToken())\n        ) {\n          this.processAppIdentity(resp);\n        } else {\n          this.processUserIdentity(resp);\n        }\n      }\n    }\n    return this.processResponse(resp, callback);\n  }\n\n  public processAppToken = (resp) => {\n    try {\n      const token = resp.payload.auth.token;\n      this.appToken = token;\n      this.trigger('appToken');\n    } catch (e) {\n      this.invalidateAppToken();\n      // throw new Error(`Invalid login response: ${resp} ${e}`);\n    }\n  }\n\n  public processAppIdentity = (resp) => {\n    try {\n      const identity = resp.payload.auth.user.claims.identity;\n      this.appIdentity = identity;\n      this.trigger('appIdentity');\n    } catch (e) {\n      this.invalidateAppToken();\n      // throw new Error(`Invalid verify token response: ${resp} ${e}`);\n    }\n  }\n\n  public processUserToken = (resp) => {\n    try {\n      const token = resp.payload.auth.token;\n      this.userToken = token;\n      this.trigger('token');\n    } catch (e) {\n      this.invalidateToken();\n      // throw new Error(`Invalid login response: ${resp} ${e}`);\n    }\n  }\n\n  public processUserIdentity = (resp) => {\n    try {\n      const identity = resp.payload.auth.user.claims.identity;\n      this.userIdentity = identity;\n      this.trigger('identity');\n    } catch (e) {\n      this.invalidateToken();\n      // throw new Error(`Invalid verify token response: ${resp} ${e}`);\n    }\n  }\n\n  public processResponse = (resp, func) => {\n    // console.debug('pull token from here and set it to this.token'); // @@TODO\n    return func && func(resp) || resp;\n  }\n\n  public getEndpointParams = ({service, endpoint}) => {\n    return ((this.endpointData || [])[service] || [])[endpoint] ||\n      ((defaultEndpointData || [])[service] || [])[endpoint];\n  }\n\n  public appendParameters: (\n    baseUrlOrOptions: string | IAtsApiAppendParametersOptions,\n    maybeOptions?: IAtsApiAppendParametersOptions\n  ) => string = (baseUrlOrOptions, maybeOptions) => {\n    let baseUrl = baseUrlOrOptions as string;\n    let options = maybeOptions;\n    if (options == null && isObject(baseUrlOrOptions)) {\n      baseUrl = '';\n      options = baseUrlOrOptions as IAtsApiAppendParametersOptions;\n    }\n    let {\n      body = {},\n    } = options;\n    const {\n      withToken,\n      withAppId,\n    } = options;\n    const token = options.token != null ? options.token : this.getToken(); // use specific token - otherwise fallback to automatic token (which may be either app token or user token)\n    const appId = options.appId != null ? options.appId : this.getApiKey(); // use specific appId - otherwise fallback to automatic api key (x-ats-app-id)\n\n    if (withToken && token != null) {\n      body = {\n        ...body,\n        [X_ATS_TOKEN_KEY]: token,\n      };\n    }\n    if (withAppId && appId != null) {\n      body = {\n        ...body,\n        [X_ATS_APP_ID_KEY]: appId,\n      };\n    }\n\n    const url = baseUrl + (baseUrl.indexOf('?') === -1 ? '?' : '&') + stringifyQueryParams(body);\n    return url;\n  }\n\n  public callApi = (...args) => {\n    const argCopy = [\n      ...args,\n    ];\n    let callback;\n    let options;\n\n    if (isFunction(args[args.length - 1])) {\n      callback = args[args.length - 1];\n      args = args.slice(0, args.length - 1);\n    }\n    if (isObject(args[args.length - 1])) {\n      options = args[args.length - 1];\n      args = args.slice(0, args.length - 1);\n    }\n    const body = options.body || {}; // body AND parameters to be used in url substitution\n    const service = (options.service || ''); // which service to call. See swagger serviceName + serviceVersion (e.g. auth)\n    const endpoint = options.endpoint; // which endpoint to call. See swagger operationId (e.g. verifyToken)\n    const token = options.token != null ? options.token : this.getToken(); // use specific token - otherwise fallback to automatic token (which may be either app token or user token)\n    const appId = options.appId != null ? options.appId : this.getApiKey(); // use specific appId - otherwise fallback to automatic api key (x-ats-app-id)\n    const params = options.params; // pull url parameters from here instead of body\n    const queries = options.queries; // request querys\n    const withTimezoneOffset = options.withTimezoneOffset; // pass in timezone offset\n    const withTimezone = options.withTimezone;\n    const xAtsLanguage = options.xAtsLanguage; // provided x-ats-language, specifically for spec print as of writing\n    const urlOnly = options.urlOnly; // return generated url - don't make api call\n    const withToken = options.withToken; // attach token to generated url\n    const withAppId = options.withAppId; // attach appid to generated url\n    const suppressErrors = options.suppressErrors != null ? options.suppressErrors : this.suppressErrors;\n    const sessionId = options.sessionId;\n    const signal = options.signal; // AbortController signal to cancel the request\n    const skipTokenProcessing = options.skipTokenProcessing; // don't pull the token/identity out of the response into this instance (see callApiProcessToken)\n\n    // quick hack to check if we support this endpointData, else fallback to other one.\n    // console.debug('callApi', {\n    //   args,\n    //   service,\n    //   endpoint,\n    //   body,\n    //   ed: this.endpointData,\n    //   defaultEndpointData,\n    // })\n    const endpointParams = this.getEndpointParams({service, endpoint});\n    // console.error('debug', { // tslint:disable-line\n    //   endpointParams,\n    // });\n\n    if (endpointParams != null) {\n      try {\n        const {\n          url,\n          options: apiParamsOptions,\n        } = this.generateApiParams({token, appId, withTimezoneOffset, withTimezone, xAtsLanguage, service, endpoint, body, params, queries, args, sessionId });\n        // console.error('debug', { // tslint:disable-line\n        //   apiParamsOptions,\n        // });\n        if (urlOnly) {\n          return this.appendParameters(`${url}`, {\n            body: options.body,\n            withAppId,\n            withToken,\n            token,\n            appId,\n          });\n          // let retUrl = `${url}`;\n          // if (withToken && token != null) {\n          //   // retUrl = `${retUrl}${token != null ? `${(retUrl.indexOf('?') === -1 ? '?' : '&')}${X_ATS_TOKEN_KEY}=${token}` : ''}`;\n          //   retUrl = this.appendParameters(retUrl, {withToken, token})\n          // }\n          // if (withAppId && appId != null) {\n          //   // retUrl = `${retUrl}${appId != null ? `${(retUrl.indexOf('?') === -1 ? '?' : '&')}${X_ATS_APP_ID_KEY}=${appId}` : ''}`;\n          //   retUrl = this.appendParameters(retUrl, {withAppId, appId})\n          // }\n          // return retUrl;\n        }\n        return this.callApiProcessToken({token, service, endpoint, url, options: {...apiParamsOptions, signal}, callback, skipTokenProcessing});\n      } catch (e) {\n        if (callback) {\n          throw e;\n        }\n        return Promise.reject(e);\n      }\n    } else {\n      if (!suppressErrors) {\n        console.error('unknown endpoints: ', { // tslint:disable-line\n          argCopy,\n          endpointData: this.endpointData,\n          defaultEndpointData,\n          onEvent: this.onEvent,\n        });\n      }\n      const error = new Error('Unknown Endpoint');\n      // url-only and callback callers use the result synchronously (many build a url inside a try/catch), so they keep\n      // the throw. Everyone else gets a rejection like the other failures above, so their .catch handles it - a throw\n      // skipped it, and from a component lifecycle it unmounted the whole app (Sentry issue 7766358749)\n      if (urlOnly || callback) {\n        throw error;\n      }\n      return Promise.reject(error);\n    }\n  }\n\n  // register an endpoint whose url is the endpoint itself, so getEndpointParams resolves it like a swagger one.\n  // an endpoint already known for that service is left alone (swagger data wins, and loadEndpoints resets\n  // endpointData, which is why directCallApi registers on every call rather than once)\n  public registerDirectEndpoint = ({service, endpoint, method = 'get'}: {\n    service: string,\n    endpoint: string,\n    method?: HttpMethod,\n  }) => {\n    const serviceKey = service.toLowerCase();\n    const serviceEndpoints = (this.endpointData || {})[serviceKey];\n\n    if (serviceEndpoints != null && serviceEndpoints[endpoint] != null) {\n      return this;\n    }\n\n    this.endpointData = {\n      ...this.endpointData,\n      [serviceKey]: {\n        ...serviceEndpoints,\n        [endpoint]: {\n          method,\n          url: endpoint,\n          env: `ENDPOINT_${serviceKey.toUpperCase()}`,\n        } as IEndpointDataInfo,\n      },\n    };\n    return this;\n  }\n\n  /**\n   * Direct api call - calls an endpoint by its url path (e.g. '/series.search') instead of by its\n   * swagger operationId (e.g. 'getMsSearchSeries'), for endpoints that aren't described by a swagger.\n   * The endpoint is registered into endpointData and then handed off to callApi, so everything else\n   * (headers/token/appId, url substitution, urlOnly, callback, promise) behaves exactly the same.\n   * This is the non generator counterpart of the directApiCallWaitingAction saga in ats-framework.\n   * e.g. atsApi.directCallApi({ service: 'msauth', endpoint: '/consent', method: 'get' })\n   */\n  public directCallApi = (...args) => {\n    const callback = isFunction(args[args.length - 1]) ? args[args.length - 1] : null;\n    const argsWithoutCallback = callback != null ? args.slice(0, args.length - 1) : args;\n    const lastArg = argsWithoutCallback[argsWithoutCallback.length - 1];\n    // typed as any - isObject narrows to 'object', which has none of the call options on it\n    const options: any = isObject(lastArg) ? lastArg : null;\n\n    // nothing we can register - let callApi report it the way it always does\n    if (options == null || !options.service || !options.endpoint) {\n      return this.callApi(...args);\n    }\n\n    // endpointData is keyed by lowercase service name, and getEndpointParams looks up the service\n    // as given - so normalize both sides to keep the lookup from missing what we just registered\n    const service = options.service.toLowerCase();\n\n    this.registerDirectEndpoint({\n      service,\n      endpoint: options.endpoint,\n      method: options.method,\n    });\n\n    const directArgs = [\n      ...argsWithoutCallback.slice(0, argsWithoutCallback.length - 1),\n      {\n        ...options,\n        service,\n      },\n      ...(callback != null ? [callback] : []),\n    ];\n\n    return this.callApi(...directArgs);\n  }\n\n  public generateApiParams = ({\n                                token,\n                                appId,\n                                withTimezoneOffset,\n                                withTimezone,\n                                sessionId,\n                                xAtsLanguage,\n                                service,\n                                endpoint,\n                                body,\n                                params,\n                                queries,\n                                args,\n                              }: {\n    token?: string,\n    appId?: string,\n    withTimezoneOffset?: boolean,\n    withTimezone?: boolean,\n    sessionId?: string,\n    xAtsLanguage?: string,\n    service: string,\n    endpoint: string,\n    body?: object,\n    params?: object,\n    queries?: object,\n    args?: any[],\n  }) => {\n    const endpointParams = this.getEndpointParams({service, endpoint});\n\n    const hasParams = params != null;\n\n    const substitutionParams = hasParams ? params : body;\n\n    const {\n      method: _method = 'get',\n      url: _url,\n    } = endpointParams;\n\n    // regex for getting the values between curly braces in a string e.g. 'str{value}ing'\n    const capturingGroupRegex = /\\{([^{}]+)\\}/g;\n\n    // count of capturing groups before any substitution\n    // we can get the required number and required keys for the capturing groups for error messaging\n    const capturingGroupsBeforeArgs = [];\n    let captureGroup = capturingGroupRegex.exec(_url);\n    while (captureGroup != null) {\n      capturingGroupsBeforeArgs.push(captureGroup[1]);\n      captureGroup = capturingGroupRegex.exec(_url);\n    }\n\n    // if we have any args, we assume they take precedence so we substitute them into the string first\n    // this ignores the capturing group key, it simply does it in order\n    // the exception is if you have a capturing group that is just numbers... in that case it will attempt\n    // to use the group key as the index in your array of args\n    const argsInUrl = stringReplace(_url, args);\n\n    if (args.length !== 0 && capturingGroupsBeforeArgs.length !== args.length) {\n      const errorMsg = `Expected ${capturingGroupsBeforeArgs.length} arguments, received ${args.length}. In: (${service}, ${endpoint})`;\n      if (WARN_IF_ARGS_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH) {\n        console.warn(errorMsg, {service, endpoint, body, params, args});\n      }\n      if (ERROR_IF_ARGS_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH) {\n        throw new Error(errorMsg);\n      }\n    }\n\n    // capture any remaining groups\n    // we use this to remove values from the body that are put into the url\n    const capturingGroupsBeforeBody = [];\n    let captureGroupBeforeBody = capturingGroupRegex.exec(argsInUrl);\n    while (captureGroupBeforeBody != null) {\n      capturingGroupsBeforeBody.push(captureGroupBeforeBody[1]);\n      captureGroupBeforeBody = capturingGroupRegex.exec(argsInUrl);\n    }\n\n    if (args.length !== 0 && capturingGroupsBeforeBody.length !== 0) {\n      const errorMsg = `Received both arguments (${args.length}) and body with params not covered by arguments (${capturingGroupsBeforeBody.join(', ')}). Please use either one or the other. In: (${service}, ${endpoint})`;\n      if (WARN_IF_ARGS_AND_BODY_PARAMS_FOUND) {\n        console.warn(errorMsg, {service, endpoint, body, params, args});\n      }\n      if (ERROR_IF_ARGS_AND_BODY_PARAMS_FOUND) {\n        throw new Error(errorMsg);\n      }\n    }\n\n\n// ERROR_IF_BODY_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH\n\n    // filter out any body key/value pairs that were consumed by the url replacement\n    const [bodyWithoutUrlParams, bodyOnlyUrlParams] = Object.keys(substitutionParams).reduce((_body, key) => {\n      if (capturingGroupsBeforeBody.indexOf(key) === -1) {\n        return [\n          {\n            ..._body[0],\n            [key]: body[key],\n          },\n          _body[1],\n        ];\n      } else {\n        return [\n          _body[0],\n          {\n            ..._body[1],\n            [key]: body[key],\n          },\n        ];\n      }\n    }, [{}, {}]);\n\n    const bodyOnlyUrlParamsKeys = Object.keys(bodyOnlyUrlParams);\n\n\n    if (capturingGroupsBeforeBody.length !== 0 && capturingGroupsBeforeBody.length !== bodyOnlyUrlParamsKeys.length) {\n      const errorMsg = `Expected (${capturingGroupsBeforeBody.join(', ')}) argument keys, received (${bodyOnlyUrlParamsKeys.join(', ')}). In: (${service}, ${endpoint})`;\n      if (WARN_IF_BODY_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH) {\n        console.warn(errorMsg, {service, endpoint, body, params, args});\n      }\n      if (ERROR_IF_BODY_GIVEN_BUT_URL_REPLACEMENT_COUNT_MISMATCH) {\n        throw new Error(errorMsg);\n      }\n    }\n\n    // do the actual string replacement here\n    const bodyInUrl = stringReplace(argsInUrl, substitutionParams);\n\n    // capture any remaining groups\n    // we use this to remove values from the body that are put into the url\n    const capturingGroupsBeforeCall = [];\n    let captureGroupBeforeCall = capturingGroupRegex.exec(bodyInUrl);\n    while (captureGroupBeforeCall != null) {\n      capturingGroupsBeforeCall.push(captureGroupBeforeCall[1]);\n      captureGroupBeforeCall = capturingGroupRegex.exec(bodyInUrl);\n    }\n\n    if (capturingGroupsBeforeCall.length !== 0) {\n      const errorMsg = `Missing parameters (${capturingGroupsBeforeCall.join(', ')}). In: (${service}, ${endpoint})`;\n      if (WARN_IF_MISSING_PARAMETERS) {\n        console.warn(errorMsg, {service, endpoint, body, params, args});\n      }\n      if (ERROR_IF_MISSING_PARAMETERS) {\n        throw new Error(errorMsg);\n      }\n    }\n\n\n    const serviceName = endpointParams['env'] || `ENDPOINT_${service.toUpperCase()}`;\n    const urlBeforeQueryString = `${this.getEnv()[serviceName]}${bodyInUrl}`;\n\n    const method = _method.toUpperCase();\n\n    let url = urlBeforeQueryString;\n    let finalBody = hasParams ? body : bodyWithoutUrlParams;\n\n    if (['GET'].indexOf(method) !== -1) {\n      if (bodyWithoutUrlParams && Object.keys(bodyWithoutUrlParams).length !== 0) {\n        url = this.appendParameters(url, {\n          body: bodyWithoutUrlParams\n        });\n        // url += (urlBeforeQueryString.indexOf('?') === -1 ? '?' : '&') + stringifyQueryParams(bodyWithoutUrlParams);\n      }\n      finalBody = null;\n    }\n\n    // supplier for query has the reponsibility for formating the query value\n    const queryString = queries && Object.entries(queries).map(entry => `${entry[0]}=${entry[1]}`).join('&');\n    url = queryString ? `${url}?${queryString}` : url;\n\n    const options = {\n      ...(finalBody && (Object.keys(finalBody).length !== 0) && {\n        body: finalBody,\n      }),\n      method,\n      headers: this.getHeaders(token, appId, withTimezoneOffset, withTimezone, xAtsLanguage, sessionId),\n    };\n\n    return {\n      url,\n      options,\n    };\n  }\n\n  public internalCallApi = (url, options) => {\n    return fetchWithDefaultHeaders(url, options).then((resp) => { // fetchWithDefaultHeaders is a promise\n      return resp;\n    }).catch((error) => {\n      throw error;\n    });\n  }\n}\n\nexport default Api;\n","// if (!(global as any)._babelPolyfill) { // eslint-disable-line no-underscore-dangle\n//   throw new Error('babel-polyfill required! please include <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js\"></script> at the top of your file');\n// }\n\n\nimport { Api } from './classes';\nexport * from './classes';\n\nexport default Api;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative'\n    },\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      'label + &': {\n        marginTop: 16\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:not($disabled):before': {\n        borderBottom: \"2px solid \".concat(theme.palette.text.primary),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          borderBottom: \"1px solid \".concat(bottomLineColor)\n        }\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Styles applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {},\n\n    /* Styles applied to the `input` element. */\n    input: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {},\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {},\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {}\n  };\n};\nvar Input = React.forwardRef(function Input(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return React.createElement(InputBase, _extends({\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Input.propTypes = {\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the wrapper element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the native input.\n   * Either a string to use a DOM element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiInput'\n})(Input);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport debounce from '../utils/debounce';\nimport clsx from 'clsx';\nimport { chainPropTypes, elementTypeAcceptingRef, refType } from '@material-ui/utils';\nimport ownerDocument from '../utils/ownerDocument';\nimport ownerWindow from '../utils/ownerWindow';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport withStyles from '../styles/withStyles';\nimport Modal from '../Modal';\nimport Grow from '../Grow';\nimport Paper from '../Paper';\nexport function getOffsetTop(rect, vertical) {\n  var offset = 0;\n\n  if (typeof vertical === 'number') {\n    offset = vertical;\n  } else if (vertical === 'center') {\n    offset = rect.height / 2;\n  } else if (vertical === 'bottom') {\n    offset = rect.height;\n  }\n\n  return offset;\n}\nexport function getOffsetLeft(rect, horizontal) {\n  var offset = 0;\n\n  if (typeof horizontal === 'number') {\n    offset = horizontal;\n  } else if (horizontal === 'center') {\n    offset = rect.width / 2;\n  } else if (horizontal === 'right') {\n    offset = rect.width;\n  }\n\n  return offset;\n}\n\nfunction getTransformOriginValue(transformOrigin) {\n  return [transformOrigin.horizontal, transformOrigin.vertical].map(function (n) {\n    return typeof n === 'number' ? \"\".concat(n, \"px\") : n;\n  }).join(' ');\n} // Sum the scrollTop between two elements.\n\n\nfunction getScrollParent(parent, child) {\n  var element = child;\n  var scrollTop = 0;\n\n  while (element && element !== parent) {\n    element = element.parentElement;\n    scrollTop += element.scrollTop;\n  }\n\n  return scrollTop;\n}\n\nfunction getAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\n\nexport var styles = {\n  /* Styles applied to the root element */\n  root: {},\n\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    position: 'absolute',\n    overflowY: 'auto',\n    overflowX: 'hidden',\n    // So we see the popover when it's empty.\n    // It's most likely on issue on userland.\n    minWidth: 16,\n    minHeight: 16,\n    maxWidth: 'calc(100% - 32px)',\n    maxHeight: 'calc(100% - 32px)',\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Popover = React.forwardRef(function Popover(props, ref) {\n  var action = props.action,\n      anchorEl = props.anchorEl,\n      _props$anchorOrigin = props.anchorOrigin,\n      anchorOrigin = _props$anchorOrigin === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$anchorOrigin,\n      anchorPosition = props.anchorPosition,\n      _props$anchorReferenc = props.anchorReference,\n      anchorReference = _props$anchorReferenc === void 0 ? 'anchorEl' : _props$anchorReferenc,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      containerProp = props.container,\n      _props$elevation = props.elevation,\n      elevation = _props$elevation === void 0 ? 8 : _props$elevation,\n      getContentAnchorEl = props.getContentAnchorEl,\n      _props$marginThreshol = props.marginThreshold,\n      marginThreshold = _props$marginThreshol === void 0 ? 16 : _props$marginThreshol,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      _props$transformOrigi = props.transformOrigin,\n      transformOrigin = _props$transformOrigi === void 0 ? {\n    vertical: 'top',\n    horizontal: 'left'\n  } : _props$transformOrigi,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDurationProp = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$TransitionProp = props.TransitionProps,\n      TransitionProps = _props$TransitionProp === void 0 ? {} : _props$TransitionProp,\n      other = _objectWithoutProperties(props, [\"action\", \"anchorEl\", \"anchorOrigin\", \"anchorPosition\", \"anchorReference\", \"children\", \"classes\", \"className\", \"container\", \"elevation\", \"getContentAnchorEl\", \"marginThreshold\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"open\", \"PaperProps\", \"transformOrigin\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  var paperRef = React.useRef(); // Returns the top/left offset of the position\n  // to attach to on the anchor element (or body if none is provided)\n\n  var getAnchorOffset = React.useCallback(function (contentAnchorOffset) {\n    if (anchorReference === 'anchorPosition') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!anchorPosition) {\n          console.error('Material-UI: you need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference=\"anchorPosition\" />.');\n        }\n      }\n\n      return anchorPosition;\n    }\n\n    var resolvedAnchorEl = getAnchorEl(anchorEl);\n    var containerWindow = ownerWindow(resolvedAnchorEl); // If an anchor element wasn't provided, just use the parent body element of this Popover\n\n    var anchorElement = resolvedAnchorEl instanceof containerWindow.Element ? resolvedAnchorEl : ownerDocument(paperRef.current).body;\n    var anchorRect = anchorElement.getBoundingClientRect();\n\n    if (process.env.NODE_ENV !== 'production') {\n      var box = anchorElement.getBoundingClientRect();\n\n      if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n        console.warn(['Material-UI: the `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n      }\n    }\n\n    var anchorVertical = contentAnchorOffset === 0 ? anchorOrigin.vertical : 'center';\n    return {\n      top: anchorRect.top + getOffsetTop(anchorRect, anchorVertical),\n      left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)\n    };\n  }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]); // Returns the vertical offset of inner content to anchor the transform on if provided\n\n  var getContentAnchorOffset = React.useCallback(function (element) {\n    var contentAnchorOffset = 0;\n\n    if (getContentAnchorEl && anchorReference === 'anchorEl') {\n      var contentAnchorEl = getContentAnchorEl(element);\n\n      if (contentAnchorEl && element.contains(contentAnchorEl)) {\n        var scrollTop = getScrollParent(element, contentAnchorEl);\n        contentAnchorOffset = contentAnchorEl.offsetTop + contentAnchorEl.clientHeight / 2 - scrollTop || 0;\n      } // != the default value\n\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (anchorOrigin.vertical !== 'top') {\n          console.error(['Material-UI: you can not change the default `anchorOrigin.vertical` value ', 'when also providing the `getContentAnchorEl` prop to the popover component.', 'Only use one of the two props.', 'Set `getContentAnchorEl` to `null | undefined`' + ' or leave `anchorOrigin.vertical` unchanged.'].join('\\n'));\n        }\n      }\n    }\n\n    return contentAnchorOffset;\n  }, [anchorOrigin.vertical, anchorReference, getContentAnchorEl]); // Return the base transform origin using the element\n  // and taking the content anchor offset into account if in use\n\n  var getTransformOrigin = React.useCallback(function (elemRect) {\n    var contentAnchorOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    return {\n      vertical: getOffsetTop(elemRect, transformOrigin.vertical) + contentAnchorOffset,\n      horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)\n    };\n  }, [transformOrigin.horizontal, transformOrigin.vertical]);\n  var getPositioningStyle = React.useCallback(function (element) {\n    // Check if the parent has requested anchoring on an inner content node\n    var contentAnchorOffset = getContentAnchorOffset(element);\n    var elemRect = {\n      width: element.offsetWidth,\n      height: element.offsetHeight\n    }; // Get the transform origin point on the element itself\n\n    var elemTransformOrigin = getTransformOrigin(elemRect, contentAnchorOffset);\n\n    if (anchorReference === 'none') {\n      return {\n        top: null,\n        left: null,\n        transformOrigin: getTransformOriginValue(elemTransformOrigin)\n      };\n    } // Get the offset of of the anchoring element\n\n\n    var anchorOffset = getAnchorOffset(contentAnchorOffset); // Calculate element positioning\n\n    var top = anchorOffset.top - elemTransformOrigin.vertical;\n    var left = anchorOffset.left - elemTransformOrigin.horizontal;\n    var bottom = top + elemRect.height;\n    var right = left + elemRect.width; // Use the parent window of the anchorEl if provided\n\n    var containerWindow = ownerWindow(getAnchorEl(anchorEl)); // Window thresholds taking required margin into account\n\n    var heightThreshold = containerWindow.innerHeight - marginThreshold;\n    var widthThreshold = containerWindow.innerWidth - marginThreshold; // Check if the vertical axis needs shifting\n\n    if (top < marginThreshold) {\n      var diff = top - marginThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    } else if (bottom > heightThreshold) {\n      var _diff = bottom - heightThreshold;\n\n      top -= _diff;\n      elemTransformOrigin.vertical += _diff;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {\n        console.error(['Material-UI: the popover component is too tall.', \"Some part of it can not be seen on the screen (\".concat(elemRect.height - heightThreshold, \"px).\"), 'Please consider adding a `max-height` to improve the user-experience.'].join('\\n'));\n      }\n    } // Check if the horizontal axis needs shifting\n\n\n    if (left < marginThreshold) {\n      var _diff2 = left - marginThreshold;\n\n      left -= _diff2;\n      elemTransformOrigin.horizontal += _diff2;\n    } else if (right > widthThreshold) {\n      var _diff3 = right - widthThreshold;\n\n      left -= _diff3;\n      elemTransformOrigin.horizontal += _diff3;\n    }\n\n    return {\n      top: \"\".concat(Math.round(top), \"px\"),\n      left: \"\".concat(Math.round(left), \"px\"),\n      transformOrigin: getTransformOriginValue(elemTransformOrigin)\n    };\n  }, [anchorEl, anchorReference, getAnchorOffset, getContentAnchorOffset, getTransformOrigin, marginThreshold]);\n  var setPositioningStyles = React.useCallback(function () {\n    var element = paperRef.current;\n\n    if (!element) {\n      return;\n    }\n\n    var positioning = getPositioningStyle(element);\n\n    if (positioning.top !== null) {\n      element.style.top = positioning.top;\n    }\n\n    if (positioning.left !== null) {\n      element.style.left = positioning.left;\n    }\n\n    element.style.transformOrigin = positioning.transformOrigin;\n  }, [getPositioningStyle]);\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n\n    setPositioningStyles();\n  };\n\n  var handlePaperRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    paperRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  React.useEffect(function () {\n    if (open) {\n      setPositioningStyles();\n    }\n  });\n  React.useImperativeHandle(action, function () {\n    return open ? {\n      updatePosition: function updatePosition() {\n        setPositioningStyles();\n      }\n    } : null;\n  }, [open, setPositioningStyles]);\n  React.useEffect(function () {\n    if (!open) {\n      return undefined;\n    }\n\n    var handleResize = debounce(function () {\n      setPositioningStyles();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('rezise', handleResize);\n    };\n  }, [open, setPositioningStyles]);\n  var transitionDuration = transitionDurationProp;\n\n  if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {\n    transitionDuration = undefined;\n  } // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n\n\n  var container = containerProp || (anchorEl ? ownerDocument(getAnchorEl(anchorEl)).body : undefined);\n  return React.createElement(Modal, _extends({\n    container: container,\n    open: open,\n    ref: ref,\n    BackdropProps: {\n      invisible: true\n    },\n    className: clsx(classes.root, className)\n  }, other), React.createElement(TransitionComponent, _extends({\n    appear: true,\n    in: open,\n    onEnter: onEnter,\n    onEntered: onEntered,\n    onExit: onExit,\n    onExited: onExited,\n    onExiting: onExiting,\n    timeout: transitionDuration\n  }, TransitionProps, {\n    onEntering: createChainedFunction(handleEntering, TransitionProps.onEntering)\n  }), React.createElement(Paper, _extends({\n    elevation: elevation,\n    ref: handlePaperRef\n  }, PaperProps, {\n    className: clsx(classes.paper, PaperProps.className)\n  }), children)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Popover.propTypes = {\n  /**\n   * A ref for imperative actions.\n   * It currently only supports updatePosition() action.\n   */\n  action: refType,\n\n  /**\n   * This is the DOM element, or a function that returns the DOM element,\n   * that may be used to set the position of the popover.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([PropTypes.object, PropTypes.func]), function (props) {\n    if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {\n      var resolvedAnchorEl = getAnchorEl(props.anchorEl);\n      var containerWindow = ownerWindow(resolvedAnchorEl);\n\n      if (resolvedAnchorEl instanceof containerWindow.Element) {\n        var box = resolvedAnchorEl.getBoundingClientRect();\n\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['Material-UI: the `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else {\n        return new Error(['Material-UI: the `anchorEl` prop provided to the component is invalid.', \"It should be an Element instance but it's `\".concat(resolvedAnchorEl, \"` instead.\")].join('\\n'));\n      }\n    }\n\n    return null;\n  }),\n\n  /**\n   * This is the point on the anchor where the popover's\n   * `anchorEl` will attach to. This is not used when the\n   * anchorReference is 'anchorPosition'.\n   *\n   * Options:\n   * vertical: [top, center, bottom];\n   * horizontal: [left, center, right].\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['left', 'center', 'right'])]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['top', 'center', 'bottom'])]).isRequired\n  }),\n\n  /**\n   * This is the position that may be used\n   * to set the position of the popover.\n   * The coordinates are relative to\n   * the application's client area.\n   */\n  anchorPosition: PropTypes.shape({\n    left: PropTypes.number.isRequired,\n    top: PropTypes.number.isRequired\n  }),\n\n  /*\n   * This determines which anchor prop to refer to to set\n   * the position of the popover.\n   */\n  anchorReference: PropTypes.oneOf(['anchorEl', 'anchorPosition', 'none']),\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * A node, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n  /**\n   * The elevation of the popover.\n   */\n  elevation: PropTypes.number,\n\n  /**\n   * This function is called in order to retrieve the content anchor element.\n   * It's the opposite of the `anchorEl` prop.\n   * The content anchor element should be an element inside the popover.\n   * It's used to correctly scroll and set the position of the popover.\n   * The positioning strategy tries to make the content anchor element just above the\n   * anchor element.\n   */\n  getContentAnchorEl: PropTypes.func,\n\n  /**\n   * Specifies how close to the edge of the window the popover can appear.\n   */\n  marginThreshold: PropTypes.number,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired before the component is entering.\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired when the component has entered.\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired when the component is entering.\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired before the component is exiting.\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired when the component has exited.\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * Callback fired when the component is exiting.\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * If `true`, the popover is visible.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * Props applied to the [`Paper`](/api/paper/) element.\n   */\n  PaperProps: PropTypes.shape({\n    component: elementTypeAcceptingRef\n  }),\n\n  /**\n   * This is the point on the popover which\n   * will attach to the anchor's origin.\n   *\n   * Options:\n   * vertical: [top, center, bottom, x(px)];\n   * horizontal: [left, center, right, x(px)].\n   */\n  transformOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['left', 'center', 'right'])]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['top', 'center', 'bottom'])]).isRequired\n  }),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  }), PropTypes.oneOf(['auto'])]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiPopover'\n})(Popover);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListContext from '../List/ListContext';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      minWidth: 56,\n      color: theme.palette.action.active,\n      flexShrink: 0,\n      display: 'inline-flex'\n    },\n\n    /* Styles applied to the root element when the parent `ListItem` uses `alignItems=\"flex-start\"`. */\n    alignItemsFlexStart: {\n      marginTop: 8\n    }\n  };\n};\n/**\n * A simple wrapper to apply `List` styles to an `Icon` or `SvgIcon`.\n */\n\nvar ListItemIcon = React.forwardRef(function ListItemIcon(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\"]);\n\n  var context = React.useContext(ListContext);\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, context.alignItems === 'flex-start' && classes.alignItemsFlexStart),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemIcon.propTypes = {\n  /**\n   * The content of the component, normally `Icon`, `SvgIcon`,\n   * or a `@material-ui/icons` SVG icon element.\n   */\n  children: PropTypes.element.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiListItemIcon'\n})(ListItemIcon);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Typography from '../Typography';\nimport withStyles from '../styles/withStyles';\nimport FormControlContext, { useFormControl } from '../FormControl/FormControlContext';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    height: '0.01em',\n    // Fix IE 11 flexbox alignment. To remove at some point.\n    maxHeight: '2em',\n    alignItems: 'center',\n    whiteSpace: 'nowrap'\n  },\n\n  /* Styles applied to the root element if `variant=\"filled\"`. */\n  filled: {\n    '&$positionStart:not($hiddenLabel)': {\n      marginTop: 16\n    }\n  },\n\n  /* Styles applied to the root element if `position=\"start\"`. */\n  positionStart: {\n    marginRight: 8\n  },\n\n  /* Styles applied to the root element if `position=\"end\"`. */\n  positionEnd: {\n    marginLeft: 8\n  },\n\n  /* Styles applied to the root element if `disablePointerEvents=true`. */\n  disablePointerEvents: {\n    pointerEvents: 'none'\n  },\n\n  /* Styles applied if the adornment is used inside <FormControl hiddenLabel />. */\n  hiddenLabel: {},\n\n  /* Styles applied if the adornment is used inside <FormControl margin=\"dense\" />. */\n  marginDense: {}\n};\nvar InputAdornment = React.forwardRef(function InputAdornment(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disablePointer = props.disablePointerEvents,\n      disablePointerEvents = _props$disablePointer === void 0 ? false : _props$disablePointer,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      position = props.position,\n      variantProp = props.variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"component\", \"disablePointerEvents\", \"disableTypography\", \"position\", \"variant\"]);\n\n  var muiFormControl = useFormControl() || {};\n  var variant = variantProp;\n\n  if (variantProp && muiFormControl.variant) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (variantProp === muiFormControl.variant) {\n        console.error('Material-UI: The `InputAdornment` variant infers the variant prop ' + 'you do not have to provide one.');\n      }\n    }\n  }\n\n  if (muiFormControl && !variant) {\n    variant = muiFormControl.variant;\n  }\n\n  return React.createElement(FormControlContext.Provider, {\n    value: null\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className, disablePointerEvents && classes.disablePointerEvents, muiFormControl.hiddenLabel && classes.hiddenLabel, {\n      filled: classes.filled\n    }[variant], {\n      start: classes.positionStart,\n      end: classes.positionEnd\n    }[position], {\n      dense: classes.marginDense\n    }[muiFormControl.margin]),\n    ref: ref\n  }, other), typeof children === 'string' && !disableTypography ? React.createElement(Typography, {\n    color: \"textSecondary\"\n  }, children) : children));\n});\nprocess.env.NODE_ENV !== \"production\" ? InputAdornment.propTypes = {\n  /**\n   * The content of the component, normally an `IconButton` or string.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Disable pointer events on the root.\n   * This allows for the content of the adornment to focus the input on click.\n   */\n  disablePointerEvents: PropTypes.bool,\n\n  /**\n   * If children is a string then disable wrapping in a Typography component.\n   */\n  disableTypography: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  muiFormControl: PropTypes.object,\n\n  /**\n   * The position this adornment should appear relative to the `Input`.\n   */\n  position: PropTypes.oneOf(['start', 'end']),\n\n  /**\n   * The variant to use.\n   * Note: If you are using the `TextField` component or the `FormControl` component\n   * you do not have to set this manually.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiInputAdornment'\n})(InputAdornment);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n// @inheritedComponent IconButton\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport { fade } from '../styles/colorManipulator';\nimport capitalize from '../utils/capitalize';\nimport SwitchBase from '../internal/SwitchBase';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      width: 34 + 12 * 2,\n      height: 14 + 12 * 2,\n      overflow: 'hidden',\n      padding: 12,\n      boxSizing: 'border-box',\n      position: 'relative',\n      flexShrink: 0,\n      zIndex: 0,\n      // Reset the stacking context.\n      verticalAlign: 'middle' // For correct alignment with the text.\n\n    },\n\n    /* Styles applied to the root element if `edge=\"start\"`. */\n    edgeStart: {\n      marginLeft: -8\n    },\n\n    /* Styles applied to the root element if `edge=\"end\"`. */\n    edgeEnd: {\n      marginRight: -8\n    },\n\n    /* Styles applied to the internal `SwitchBase` component's `root` class. */\n    switchBase: {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      zIndex: 1,\n      // Render above the focus ripple.\n      color: theme.palette.type === 'light' ? theme.palette.grey[50] : theme.palette.grey[400],\n      transition: theme.transitions.create(['left', 'transform'], {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&$checked': {\n        transform: 'translateX(20px)'\n      },\n      '&$disabled': {\n        color: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[800]\n      },\n      '&$checked + $track': {\n        opacity: 0.5\n      },\n      '&$disabled + $track': {\n        opacity: theme.palette.type === 'light' ? 0.12 : 0.1\n      }\n    },\n\n    /* Styles applied to the internal SwitchBase component's root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[800]\n      },\n      '&$checked + $track': {\n        backgroundColor: theme.palette.primary.main\n      },\n      '&$disabled + $track': {\n        backgroundColor: theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white\n      }\n    },\n\n    /* Styles applied to the internal SwitchBase component's root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[800]\n      },\n      '&$checked + $track': {\n        backgroundColor: theme.palette.secondary.main\n      },\n      '&$disabled + $track': {\n        backgroundColor: theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white\n      }\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      width: 40,\n      height: 24,\n      padding: 7,\n      '& $thumb': {\n        width: 16,\n        height: 16\n      },\n      '& $switchBase': {\n        padding: 4,\n        '&$checked': {\n          transform: 'translateX(16px)'\n        }\n      }\n    },\n\n    /* Pseudo-class applied to the internal `SwitchBase` component's `checked` class. */\n    checked: {},\n\n    /* Pseudo-class applied to the internal SwitchBase component's disabled class. */\n    disabled: {},\n\n    /* Styles applied to the internal SwitchBase component's input element. */\n    input: {\n      left: '-100%',\n      width: '300%'\n    },\n\n    /* Styles used to create the thumb passed to the internal `SwitchBase` component `icon` prop. */\n    thumb: {\n      boxShadow: theme.shadows[1],\n      backgroundColor: 'currentColor',\n      width: 20,\n      height: 20,\n      borderRadius: '50%'\n    },\n\n    /* Styles applied to the track element. */\n    track: {\n      height: '100%',\n      width: '100%',\n      borderRadius: 14 / 2,\n      zIndex: -1,\n      transition: theme.transitions.create(['opacity', 'background-color'], {\n        duration: theme.transitions.duration.shortest\n      }),\n      backgroundColor: theme.palette.type === 'light' ? theme.palette.common.black : theme.palette.common.white,\n      opacity: theme.palette.type === 'light' ? 0.38 : 0.3\n    }\n  };\n};\nvar Switch = React.forwardRef(function Switch(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$edge = props.edge,\n      edge = _props$edge === void 0 ? false : _props$edge,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"disabled\", \"edge\", \"size\"]);\n\n  var icon = React.createElement(\"span\", {\n    className: classes.thumb\n  });\n  return React.createElement(\"span\", {\n    className: clsx(classes.root, className, {\n      start: classes.edgeStart,\n      end: classes.edgeEnd\n    }[edge], {\n      small: classes[\"size\".concat(capitalize(size))]\n    }[size])\n  }, React.createElement(SwitchBase, _extends({\n    type: \"checkbox\",\n    icon: icon,\n    checkedIcon: icon,\n    classes: {\n      root: clsx(classes.switchBase, classes[\"color\".concat(capitalize(color))]),\n      input: classes.input,\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    ref: ref,\n    disabled: disabled\n  }, other)), React.createElement(\"span\", {\n    className: classes.track\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Switch.propTypes = {\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary', 'default']),\n\n  /**\n   * @ignore\n   */\n  defaultChecked: PropTypes.bool,\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   */\n  edge: PropTypes.oneOf(['start', 'end', false]),\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The size of the switch.\n   * `small` is equivalent to the dense switch styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiSwitch'\n})(Switch);","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport getScrollbarSize from '../utils/getScrollbarSize';\nimport ownerDocument from '../utils/ownerDocument';\nimport ownerWindow from '../utils/ownerWindow'; // Is a vertical scrollbar displayed?\n\nfunction isOverflowing(container) {\n  var doc = ownerDocument(container);\n\n  if (doc.body === container) {\n    return ownerWindow(doc).innerWidth > doc.documentElement.clientWidth;\n  }\n\n  return container.scrollHeight > container.clientHeight;\n}\n\nexport function ariaHidden(node, show) {\n  if (show) {\n    node.setAttribute('aria-hidden', 'true');\n  } else {\n    node.removeAttribute('aria-hidden');\n  }\n}\n\nfunction getPaddingRight(node) {\n  return parseInt(window.getComputedStyle(node)['padding-right'], 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountNode, currentNode) {\n  var nodesToExclude = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n  var show = arguments.length > 4 ? arguments[4] : undefined;\n  var blacklist = [mountNode, currentNode].concat(_toConsumableArray(nodesToExclude));\n  var blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n  [].forEach.call(container.children, function (node) {\n    if (node.nodeType === 1 && blacklist.indexOf(node) === -1 && blacklistTagNames.indexOf(node.tagName) === -1) {\n      ariaHidden(node, show);\n    }\n  });\n}\n\nfunction findIndexOf(containerInfo, callback) {\n  var idx = -1;\n  containerInfo.some(function (item, index) {\n    if (callback(item)) {\n      idx = index;\n      return true;\n    }\n\n    return false;\n  });\n  return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n  var restoreStyle = [];\n  var restorePaddings = [];\n  var container = containerInfo.container;\n  var fixedNodes;\n\n  if (!props.disableScrollLock) {\n    if (isOverflowing(container)) {\n      // Compute the size before applying overflow hidden to avoid any scroll jumps.\n      var scrollbarSize = getScrollbarSize();\n      restoreStyle.push({\n        value: container.style.paddingRight,\n        key: 'padding-right',\n        el: container\n      }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n      container.style['padding-right'] = \"\".concat(getPaddingRight(container) + scrollbarSize, \"px\"); // .mui-fixed is a global helper.\n\n      fixedNodes = ownerDocument(container).querySelectorAll('.mui-fixed');\n      [].forEach.call(fixedNodes, function (node) {\n        restorePaddings.push(node.style.paddingRight);\n        node.style.paddingRight = \"\".concat(getPaddingRight(node) + scrollbarSize, \"px\");\n      });\n    } // Improve Gatsby support\n    // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n    var parent = container.parentElement;\n    var scrollContainer = parent.nodeName === 'HTML' && window.getComputedStyle(parent)['overflow-y'] === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n    // screensize shrink.\n\n    restoreStyle.push({\n      value: scrollContainer.style.overflow,\n      key: 'overflow',\n      el: scrollContainer\n    });\n    scrollContainer.style.overflow = 'hidden';\n  }\n\n  var restore = function restore() {\n    if (fixedNodes) {\n      [].forEach.call(fixedNodes, function (node, i) {\n        if (restorePaddings[i]) {\n          node.style.paddingRight = restorePaddings[i];\n        } else {\n          node.style.removeProperty('padding-right');\n        }\n      });\n    }\n\n    restoreStyle.forEach(function (_ref) {\n      var value = _ref.value,\n          el = _ref.el,\n          key = _ref.key;\n\n      if (value) {\n        el.style.setProperty(key, value);\n      } else {\n        el.style.removeProperty(key);\n      }\n    });\n  };\n\n  return restore;\n}\n\nfunction getHiddenSiblings(container) {\n  var hiddenSiblings = [];\n  [].forEach.call(container.children, function (node) {\n    if (node.getAttribute && node.getAttribute('aria-hidden') === 'true') {\n      hiddenSiblings.push(node);\n    }\n  });\n  return hiddenSiblings;\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\n\n\nvar ModalManager =\n/*#__PURE__*/\nfunction () {\n  function ModalManager() {\n    _classCallCheck(this, ModalManager);\n\n    // this.modals[modalIndex] = modal\n    this.modals = []; // this.containers[containerIndex] = {\n    //   modals: [],\n    //   container,\n    //   restore: null,\n    // }\n\n    this.containers = [];\n  }\n\n  _createClass(ModalManager, [{\n    key: \"add\",\n    value: function add(modal, container) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex !== -1) {\n        return modalIndex;\n      }\n\n      modalIndex = this.modals.length;\n      this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n      if (modal.modalRef) {\n        ariaHidden(modal.modalRef, false);\n      }\n\n      var hiddenSiblingNodes = getHiddenSiblings(container);\n      ariaHiddenSiblings(container, modal.mountNode, modal.modalRef, hiddenSiblingNodes, true);\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.container === container;\n      });\n\n      if (containerIndex !== -1) {\n        this.containers[containerIndex].modals.push(modal);\n        return modalIndex;\n      }\n\n      this.containers.push({\n        modals: [modal],\n        container: container,\n        restore: null,\n        hiddenSiblingNodes: hiddenSiblingNodes\n      });\n      return modalIndex;\n    }\n  }, {\n    key: \"mount\",\n    value: function mount(modal, props) {\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n\n      if (!containerInfo.restore) {\n        containerInfo.restore = handleContainer(containerInfo, props);\n      }\n    }\n  }, {\n    key: \"remove\",\n    value: function remove(modal) {\n      var modalIndex = this.modals.indexOf(modal);\n\n      if (modalIndex === -1) {\n        return modalIndex;\n      }\n\n      var containerIndex = findIndexOf(this.containers, function (item) {\n        return item.modals.indexOf(modal) !== -1;\n      });\n      var containerInfo = this.containers[containerIndex];\n      containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n      this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n      if (containerInfo.modals.length === 0) {\n        // The modal might be closed before it had the chance to be mounted in the DOM.\n        if (containerInfo.restore) {\n          containerInfo.restore();\n        }\n\n        if (modal.modalRef) {\n          // In case the modal wasn't in the DOM yet.\n          ariaHidden(modal.modalRef, true);\n        }\n\n        ariaHiddenSiblings(containerInfo.container, modal.mountNode, modal.modalRef, containerInfo.hiddenSiblingNodes, false);\n        this.containers.splice(containerIndex, 1);\n      } else {\n        // Otherwise make sure the next top modal is visible to a screen reader.\n        var nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n        // aria-hidden because the dom element doesn't exist either\n        // when modal was unmounted before modalRef gets null\n\n        if (nextTop.modalRef) {\n          ariaHidden(nextTop.modalRef, false);\n        }\n      }\n\n      return modalIndex;\n    }\n  }, {\n    key: \"isTopModal\",\n    value: function isTopModal(modal) {\n      return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n    }\n  }]);\n\n  return ModalManager;\n}();\n\nexport { ModalManager as default };","/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport ownerDocument from '../utils/ownerDocument';\nimport useForkRef from '../utils/useForkRef';\n/**\n * @ignore - internal component.\n */\n\nfunction TrapFocus(props) {\n  var children = props.children,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      getDoc = props.getDoc,\n      isEnabled = props.isEnabled,\n      open = props.open;\n  var ignoreNextEnforceFocus = React.useRef();\n  var sentinelStart = React.useRef(null);\n  var sentinelEnd = React.useRef(null);\n  var nodeToRestore = React.useRef();\n  var rootRef = React.useRef(null); // can be removed once we drop support for non ref forwarding class components\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    rootRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRef = useForkRef(children.ref, handleOwnRef); // ⚠️ You may rely on React.useMemo as a performance optimization, not as a semantic guarantee.\n  // https://reactjs.org/docs/hooks-reference.html#usememo\n\n  React.useMemo(function () {\n    if (!open || typeof window === 'undefined') {\n      return;\n    }\n\n    nodeToRestore.current = getDoc().activeElement;\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  React.useEffect(function () {\n    if (!open) {\n      return;\n    }\n\n    var doc = ownerDocument(rootRef.current); // We might render an empty child.\n\n    if (!disableAutoFocus && rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['Material-UI: the modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n\n        rootRef.current.setAttribute('tabIndex', -1);\n      }\n\n      rootRef.current.focus();\n    }\n\n    var contain = function contain() {\n      if (disableEnforceFocus || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      if (rootRef.current && !rootRef.current.contains(doc.activeElement)) {\n        rootRef.current.focus();\n      }\n    };\n\n    var loopFocus = function loopFocus(event) {\n      // 9 = Tab\n      if (disableEnforceFocus || !isEnabled() || event.keyCode !== 9) {\n        return;\n      } // Make sure the next tab starts from the right place.\n\n\n      if (doc.activeElement === rootRef.current) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n\n        if (event.shiftKey) {\n          sentinelEnd.current.focus();\n        } else {\n          sentinelStart.current.focus();\n        }\n      }\n    };\n\n    doc.addEventListener('focus', contain, true);\n    doc.addEventListener('keydown', loopFocus, true); // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area\n    // e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n\n    var interval = setInterval(function () {\n      contain();\n    }, 50);\n    return function () {\n      clearInterval(interval);\n      doc.removeEventListener('focus', contain, true);\n      doc.removeEventListener('keydown', loopFocus, true); // restoreLastFocus()\n\n      if (!disableRestoreFocus) {\n        // In IE 11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE 11 have a focus method.\n        // Once IE 11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          nodeToRestore.current.focus();\n        }\n\n        nodeToRestore.current = null;\n      }\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open]);\n  return React.createElement(React.Fragment, null, React.createElement(\"div\", {\n    tabIndex: 0,\n    ref: sentinelStart,\n    \"data-test\": \"sentinelStart\"\n  }), React.cloneElement(children, {\n    ref: handleRef\n  }), React.createElement(\"div\", {\n    tabIndex: 0,\n    ref: sentinelEnd,\n    \"data-test\": \"sentinelEnd\"\n  }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TrapFocus.propTypes = {\n  /**\n   * A single child content element.\n   */\n  children: PropTypes.element.isRequired,\n\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden.\n   */\n  disableRestoreFocus: PropTypes.bool,\n\n  /**\n   * Return the document to consider.\n   * We use it to implement the restore focus between different browser documents.\n   */\n  getDoc: PropTypes.func.isRequired,\n\n  /**\n   * Do we still want to enforce the focus?\n   * This prop helps nesting TrapFocus elements.\n   */\n  isEnabled: PropTypes.func.isRequired,\n\n  /**\n   * If `true`, the modal is open.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\n/*\n\nIn the future, we should be able to replace TrapFocus with:\nhttps://github.com/facebook/react/blob/master/packages/react-events/docs/FocusScope.md\n\n```jsx\nimport FocusScope from 'react-dom/FocusScope';\n\nfunction TrapFocus(props) {\n  const {\n    children\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableRestoreFocus = false,\n    open,\n  } = props;\n\n  if (!open) {\n    return children;\n  }\n\n  return (\n    <FocusScope\n      autoFocus={!disableAutoFocus}\n      contain={!disableEnforceFocus}\n      restoreFocus={!disableRestoreFocus}\n    >\n      {children}\n    </FocusScope>\n  );\n}\n```\n\n*/\n\nexport default TrapFocus;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    zIndex: -1,\n    position: 'fixed',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent',\n    // Disable scroll capabilities.\n    touchAction: 'none'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar SimpleBackdrop = React.forwardRef(function SimpleBackdrop(props, ref) {\n  var _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      other = _objectWithoutProperties(props, [\"invisible\", \"open\"]);\n\n  return open ? React.createElement(\"div\", _extends({\n    \"aria-hidden\": true,\n    ref: ref\n  }, other, {\n    style: _extends({}, styles.root, {}, invisible ? styles.invisible : {}, {}, other.style)\n  })) : null;\n});\nprocess.env.NODE_ENV !== \"production\" ? SimpleBackdrop.propTypes = {\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: PropTypes.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\nexport default SimpleBackdrop;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { getThemeProps, useTheme } from '@material-ui/styles';\nimport { elementAcceptingRef } from '@material-ui/utils';\nimport ownerDocument from '../utils/ownerDocument';\nimport Portal from '../Portal';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport zIndex from '../styles/zIndex';\nimport ModalManager, { ariaHidden } from './ModalManager';\nimport TrapFocus from './TrapFocus';\nimport SimpleBackdrop from './SimpleBackdrop';\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container;\n  return ReactDOM.findDOMNode(container);\n}\n\nfunction getHasTransition(props) {\n  return props.children ? props.children.props.hasOwnProperty('in') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\n\n\nvar defaultManager = new ModalManager();\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'fixed',\n      zIndex: theme.zIndex.modal,\n      right: 0,\n      bottom: 0,\n      top: 0,\n      left: 0\n    },\n\n    /* Styles applied to the root element if the `Modal` has exited. */\n    hidden: {\n      visibility: 'hidden'\n    }\n  };\n};\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/api/dialog/)\n * - [Drawer](/api/drawer/)\n * - [Menu](/api/menu/)\n * - [Popover](/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nvar Modal = React.forwardRef(function Modal(inProps, ref) {\n  var theme = useTheme();\n  var props = getThemeProps({\n    name: 'MuiModal',\n    props: _extends({}, inProps),\n    theme: theme\n  });\n\n  var _props$BackdropCompon = props.BackdropComponent,\n      BackdropComponent = _props$BackdropCompon === void 0 ? SimpleBackdrop : _props$BackdropCompon,\n      BackdropProps = props.BackdropProps,\n      children = props.children,\n      _props$closeAfterTran = props.closeAfterTransition,\n      closeAfterTransition = _props$closeAfterTran === void 0 ? false : _props$closeAfterTran,\n      container = props.container,\n      _props$disableAutoFoc = props.disableAutoFocus,\n      disableAutoFocus = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$disableBackdro = props.disableBackdropClick,\n      disableBackdropClick = _props$disableBackdro === void 0 ? false : _props$disableBackdro,\n      _props$disableEnforce = props.disableEnforceFocus,\n      disableEnforceFocus = _props$disableEnforce === void 0 ? false : _props$disableEnforce,\n      _props$disableEscapeK = props.disableEscapeKeyDown,\n      disableEscapeKeyDown = _props$disableEscapeK === void 0 ? false : _props$disableEscapeK,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      _props$disableRestore = props.disableRestoreFocus,\n      disableRestoreFocus = _props$disableRestore === void 0 ? false : _props$disableRestore,\n      _props$disableScrollL = props.disableScrollLock,\n      disableScrollLock = _props$disableScrollL === void 0 ? false : _props$disableScrollL,\n      _props$hideBackdrop = props.hideBackdrop,\n      hideBackdrop = _props$hideBackdrop === void 0 ? false : _props$hideBackdrop,\n      _props$keepMounted = props.keepMounted,\n      keepMounted = _props$keepMounted === void 0 ? false : _props$keepMounted,\n      _props$manager = props.manager,\n      manager = _props$manager === void 0 ? defaultManager : _props$manager,\n      onBackdropClick = props.onBackdropClick,\n      onClose = props.onClose,\n      onEscapeKeyDown = props.onEscapeKeyDown,\n      onRendered = props.onRendered,\n      open = props.open,\n      other = _objectWithoutProperties(props, [\"BackdropComponent\", \"BackdropProps\", \"children\", \"closeAfterTransition\", \"container\", \"disableAutoFocus\", \"disableBackdropClick\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onEscapeKeyDown\", \"onRendered\", \"open\"]);\n\n  var _React$useState = React.useState(true),\n      exited = _React$useState[0],\n      setExited = _React$useState[1];\n\n  var modal = React.useRef({});\n  var mountNodeRef = React.useRef(null);\n  var modalRef = React.useRef(null);\n  var handleRef = useForkRef(modalRef, ref);\n  var hasTransition = getHasTransition(props);\n\n  var getDoc = function getDoc() {\n    return ownerDocument(mountNodeRef.current);\n  };\n\n  var getModal = function getModal() {\n    modal.current.modalRef = modalRef.current;\n    modal.current.mountNode = mountNodeRef.current;\n    return modal.current;\n  };\n\n  var handleMounted = function handleMounted() {\n    manager.mount(getModal(), {\n      disableScrollLock: disableScrollLock\n    }); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n    modalRef.current.scrollTop = 0;\n  };\n\n  var handleOpen = useEventCallback(function () {\n    var resolvedContainer = getContainer(container) || getDoc().body;\n    manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n    if (modalRef.current) {\n      handleMounted();\n    }\n  });\n  var isTopModal = React.useCallback(function () {\n    return manager.isTopModal(getModal());\n  }, [manager]);\n  var handlePortalRef = useEventCallback(function (node) {\n    mountNodeRef.current = node;\n\n    if (!node) {\n      return;\n    }\n\n    if (onRendered) {\n      onRendered();\n    }\n\n    if (open && isTopModal()) {\n      handleMounted();\n    } else {\n      ariaHidden(modalRef.current, true);\n    }\n  });\n  var handleClose = React.useCallback(function () {\n    manager.remove(getModal());\n  }, [manager]);\n  React.useEffect(function () {\n    return function () {\n      handleClose();\n    };\n  }, [handleClose]);\n  React.useEffect(function () {\n    if (open) {\n      handleOpen();\n    } else if (!hasTransition || !closeAfterTransition) {\n      handleClose();\n    }\n  }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n  if (!keepMounted && !open && (!hasTransition || exited)) {\n    return null;\n  }\n\n  var handleEnter = function handleEnter() {\n    setExited(false);\n  };\n\n  var handleExited = function handleExited() {\n    setExited(true);\n\n    if (closeAfterTransition) {\n      handleClose();\n    }\n  };\n\n  var handleBackdropClick = function handleBackdropClick(event) {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n\n    if (!disableBackdropClick && onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviours like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    if (event.key !== 'Escape' || !isTopModal()) {\n      return;\n    } // Swallow the event, in case someone is listening for the escape key on the body.\n\n\n    event.stopPropagation();\n\n    if (onEscapeKeyDown) {\n      onEscapeKeyDown(event);\n    }\n\n    if (!disableEscapeKeyDown && onClose) {\n      onClose(event, 'escapeKeyDown');\n    }\n  };\n\n  var inlineStyle = styles(theme || {\n    zIndex: zIndex\n  });\n  var childProps = {};\n\n  if (children.props.tabIndex === undefined) {\n    childProps.tabIndex = children.props.tabIndex || '-1';\n  } // It's a Transition like component\n\n\n  if (hasTransition) {\n    childProps.onEnter = createChainedFunction(handleEnter, children.props.onEnter);\n    childProps.onExited = createChainedFunction(handleExited, children.props.onExited);\n  }\n\n  return React.createElement(Portal, {\n    ref: handlePortalRef,\n    container: container,\n    disablePortal: disablePortal\n  }, React.createElement(\"div\", _extends({\n    ref: handleRef,\n    onKeyDown: handleKeyDown,\n    role: \"presentation\"\n  }, other, {\n    style: _extends({}, inlineStyle.root, {}, !open && exited ? inlineStyle.hidden : {}, {}, other.style)\n  }), hideBackdrop ? null : React.createElement(BackdropComponent, _extends({\n    open: open,\n    onClick: handleBackdropClick\n  }, BackdropProps)), React.createElement(TrapFocus, {\n    disableEnforceFocus: disableEnforceFocus,\n    disableAutoFocus: disableAutoFocus,\n    disableRestoreFocus: disableRestoreFocus,\n    getDoc: getDoc,\n    isEnabled: isTopModal,\n    open: open\n  }, React.cloneElement(children, childProps))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Modal.propTypes = {\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   */\n  BackdropComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the [`Backdrop`](/api/backdrop/) element.\n   */\n  BackdropProps: PropTypes.object,\n\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n\n  /**\n   * When set to true the Modal waits until a nested Transition is completed before closing.\n   */\n  closeAfterTransition: PropTypes.bool,\n\n  /**\n   * A node, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   */\n  container: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableAutoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, clicking the backdrop will not fire any callback.\n   */\n  disableBackdropClick: PropTypes.bool,\n\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   */\n  disableEnforceFocus: PropTypes.bool,\n\n  /**\n   * If `true`, hitting escape will not fire any callback.\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: PropTypes.bool,\n\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden.\n   */\n  disableRestoreFocus: PropTypes.bool,\n\n  /**\n   * Disable the scroll lock behavior.\n   */\n  disableScrollLock: PropTypes.bool,\n\n  /**\n   * If `true`, the backdrop is not rendered.\n   */\n  hideBackdrop: PropTypes.bool,\n\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Modal.\n   */\n  keepMounted: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  manager: PropTypes.object,\n\n  /**\n   * Callback fired when the backdrop is clicked.\n   */\n  onBackdropClick: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the escape key is pressed,\n   * `disableEscapeKeyDown` is false and the modal is in focus.\n   */\n  onEscapeKeyDown: PropTypes.func,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   * It signals that the `open={true}` prop took effect.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: PropTypes.func,\n\n  /**\n   * If `true`, the modal is open.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\nexport default Modal;","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true; // eslint-disable-line no-param-reassign\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options); // eslint-disable-line no-param-reassign\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item; // eslint-disable-line no-param-reassign\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options); // eslint-disable-line no-param-reassign\n        } else {\n            acc[key] = value; // eslint-disable-line no-param-reassign\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key]; // eslint-disable-line no-param-reassign\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar encode = function encode(str, defaultEncoder, charset) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    merge: merge\n};\n","\"use strict\";\n\nexports.__esModule = true;\nexports.UPDATE_SYNC_WARNINGS = exports.UPDATE_SYNC_ERRORS = exports.UNTOUCH = exports.UNREGISTER_FIELD = exports.TOUCH = exports.SUBMIT = exports.STOP_SUBMIT = exports.STOP_ASYNC_VALIDATION = exports.START_SUBMIT = exports.START_ASYNC_VALIDATION = exports.SET_SUBMIT_SUCCEEDED = exports.SET_SUBMIT_FAILED = exports.RESET_SECTION = exports.RESET = exports.REGISTER_FIELD = exports.INITIALIZE = exports.FOCUS = exports.DESTROY = exports.CLEAR_ASYNC_ERROR = exports.CLEAR_SUBMIT_ERRORS = exports.CLEAR_SUBMIT = exports.CLEAR_FIELDS = exports.CHANGE = exports.BLUR = exports.AUTOFILL = exports.ARRAY_SWAP = exports.ARRAY_UNSHIFT = exports.ARRAY_SPLICE = exports.ARRAY_SHIFT = exports.ARRAY_REMOVE_ALL = exports.ARRAY_REMOVE = exports.ARRAY_PUSH = exports.ARRAY_POP = exports.ARRAY_MOVE = exports.ARRAY_INSERT = exports.prefix = void 0;\nvar prefix = '@@redux-form/';\nexports.prefix = prefix;\nvar ARRAY_INSERT = prefix + \"ARRAY_INSERT\";\nexports.ARRAY_INSERT = ARRAY_INSERT;\nvar ARRAY_MOVE = prefix + \"ARRAY_MOVE\";\nexports.ARRAY_MOVE = ARRAY_MOVE;\nvar ARRAY_POP = prefix + \"ARRAY_POP\";\nexports.ARRAY_POP = ARRAY_POP;\nvar ARRAY_PUSH = prefix + \"ARRAY_PUSH\";\nexports.ARRAY_PUSH = ARRAY_PUSH;\nvar ARRAY_REMOVE = prefix + \"ARRAY_REMOVE\";\nexports.ARRAY_REMOVE = ARRAY_REMOVE;\nvar ARRAY_REMOVE_ALL = prefix + \"ARRAY_REMOVE_ALL\";\nexports.ARRAY_REMOVE_ALL = ARRAY_REMOVE_ALL;\nvar ARRAY_SHIFT = prefix + \"ARRAY_SHIFT\";\nexports.ARRAY_SHIFT = ARRAY_SHIFT;\nvar ARRAY_SPLICE = prefix + \"ARRAY_SPLICE\";\nexports.ARRAY_SPLICE = ARRAY_SPLICE;\nvar ARRAY_UNSHIFT = prefix + \"ARRAY_UNSHIFT\";\nexports.ARRAY_UNSHIFT = ARRAY_UNSHIFT;\nvar ARRAY_SWAP = prefix + \"ARRAY_SWAP\";\nexports.ARRAY_SWAP = ARRAY_SWAP;\nvar AUTOFILL = prefix + \"AUTOFILL\";\nexports.AUTOFILL = AUTOFILL;\nvar BLUR = prefix + \"BLUR\";\nexports.BLUR = BLUR;\nvar CHANGE = prefix + \"CHANGE\";\nexports.CHANGE = CHANGE;\nvar CLEAR_FIELDS = prefix + \"CLEAR_FIELDS\";\nexports.CLEAR_FIELDS = CLEAR_FIELDS;\nvar CLEAR_SUBMIT = prefix + \"CLEAR_SUBMIT\";\nexports.CLEAR_SUBMIT = CLEAR_SUBMIT;\nvar CLEAR_SUBMIT_ERRORS = prefix + \"CLEAR_SUBMIT_ERRORS\";\nexports.CLEAR_SUBMIT_ERRORS = CLEAR_SUBMIT_ERRORS;\nvar CLEAR_ASYNC_ERROR = prefix + \"CLEAR_ASYNC_ERROR\";\nexports.CLEAR_ASYNC_ERROR = CLEAR_ASYNC_ERROR;\nvar DESTROY = prefix + \"DESTROY\";\nexports.DESTROY = DESTROY;\nvar FOCUS = prefix + \"FOCUS\";\nexports.FOCUS = FOCUS;\nvar INITIALIZE = prefix + \"INITIALIZE\";\nexports.INITIALIZE = INITIALIZE;\nvar REGISTER_FIELD = prefix + \"REGISTER_FIELD\";\nexports.REGISTER_FIELD = REGISTER_FIELD;\nvar RESET = prefix + \"RESET\";\nexports.RESET = RESET;\nvar RESET_SECTION = prefix + \"RESET_SECTION\";\nexports.RESET_SECTION = RESET_SECTION;\nvar SET_SUBMIT_FAILED = prefix + \"SET_SUBMIT_FAILED\";\nexports.SET_SUBMIT_FAILED = SET_SUBMIT_FAILED;\nvar SET_SUBMIT_SUCCEEDED = prefix + \"SET_SUBMIT_SUCCEEDED\";\nexports.SET_SUBMIT_SUCCEEDED = SET_SUBMIT_SUCCEEDED;\nvar START_ASYNC_VALIDATION = prefix + \"START_ASYNC_VALIDATION\";\nexports.START_ASYNC_VALIDATION = START_ASYNC_VALIDATION;\nvar START_SUBMIT = prefix + \"START_SUBMIT\";\nexports.START_SUBMIT = START_SUBMIT;\nvar STOP_ASYNC_VALIDATION = prefix + \"STOP_ASYNC_VALIDATION\";\nexports.STOP_ASYNC_VALIDATION = STOP_ASYNC_VALIDATION;\nvar STOP_SUBMIT = prefix + \"STOP_SUBMIT\";\nexports.STOP_SUBMIT = STOP_SUBMIT;\nvar SUBMIT = prefix + \"SUBMIT\";\nexports.SUBMIT = SUBMIT;\nvar TOUCH = prefix + \"TOUCH\";\nexports.TOUCH = TOUCH;\nvar UNREGISTER_FIELD = prefix + \"UNREGISTER_FIELD\";\nexports.UNREGISTER_FIELD = UNREGISTER_FIELD;\nvar UNTOUCH = prefix + \"UNTOUCH\";\nexports.UNTOUCH = UNTOUCH;\nvar UPDATE_SYNC_ERRORS = prefix + \"UPDATE_SYNC_ERRORS\";\nexports.UPDATE_SYNC_ERRORS = UPDATE_SYNC_ERRORS;\nvar UPDATE_SYNC_WARNINGS = prefix + \"UPDATE_SYNC_WARNINGS\";\nexports.UPDATE_SYNC_WARNINGS = UPDATE_SYNC_WARNINGS;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar isEvent = function isEvent(candidate) {\n  return !!(candidate && candidate.stopPropagation && candidate.preventDefault);\n};\n\nvar _default = isEvent;\nexports[\"default\"] = _default;","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _hasError = _interopRequireDefault(require(\"../hasError\"));\n\nvar createIsValid = function createIsValid(structure) {\n  var getIn = structure.getIn,\n      keys = structure.keys;\n  var hasError = (0, _hasError[\"default\"])(structure);\n  return function (form, getFormState, ignoreSubmitErrors) {\n    if (ignoreSubmitErrors === void 0) {\n      ignoreSubmitErrors = false;\n    }\n\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      var formState = nonNullGetFormState(state);\n      var syncError = getIn(formState, form + \".syncError\");\n\n      if (syncError) {\n        return false;\n      }\n\n      if (!ignoreSubmitErrors) {\n        var error = getIn(formState, form + \".error\");\n\n        if (error) {\n          return false;\n        }\n      }\n\n      var syncErrors = getIn(formState, form + \".syncErrors\");\n      var asyncErrors = getIn(formState, form + \".asyncErrors\");\n      var submitErrors = ignoreSubmitErrors ? undefined : getIn(formState, form + \".submitErrors\");\n\n      if (!syncErrors && !asyncErrors && !submitErrors) {\n        return true;\n      }\n\n      var registeredFields = getIn(formState, form + \".registeredFields\");\n\n      if (!registeredFields) {\n        return true;\n      }\n\n      return !keys(registeredFields).filter(function (name) {\n        return getIn(registeredFields, \"['\" + name + \"'].count\") > 0;\n      }).some(function (name) {\n        return hasError(getIn(registeredFields, \"['\" + name + \"']\"), syncErrors, asyncErrors, submitErrors);\n      });\n    };\n  };\n};\n\nvar _default = createIsValid;\nexports[\"default\"] = _default;","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = compareObjects;\nfunction compareObjects(objA, objB) {\n  var keys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n  if (objA === objB) {\n    return false;\n  }\n\n  var aKeys = Object.keys(objA);\n  var bKeys = Object.keys(objB);\n\n  if (aKeys.length !== bKeys.length) {\n    return true;\n  }\n\n  var keysMap = {};\n  var i = void 0,\n      len = void 0;\n\n  for (i = 0, len = keys.length; i < len; i++) {\n    keysMap[keys[i]] = true;\n  }\n\n  for (i = 0, len = aKeys.length; i < len; i++) {\n    var key = aKeys[i];\n    var aValue = objA[key];\n    var bValue = objB[key];\n\n    if (aValue === bValue) {\n      continue;\n    }\n\n    if (!keysMap[key] || aValue === null || bValue === null || (typeof aValue === 'undefined' ? 'undefined' : _typeof(aValue)) !== 'object' || (typeof bValue === 'undefined' ? 'undefined' : _typeof(bValue)) !== 'object') {\n      return true;\n    }\n\n    var aValueKeys = Object.keys(aValue);\n    var bValueKeys = Object.keys(bValue);\n\n    if (aValueKeys.length !== bValueKeys.length) {\n      return true;\n    }\n\n    for (var n = 0, length = aValueKeys.length; n < length; n++) {\n      var aValueKey = aValueKeys[n];\n\n      if (aValue[aValueKey] !== bValue[aValueKey]) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty;","function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nmodule.exports = _assertThisInitialized;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addClassName = addClassName;\nexports.addEvent = addEvent;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.getTranslation = getTranslation;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.removeClassName = removeClassName;\nexports.removeEvent = removeEvent;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nvar _shims = require(\"./shims\");\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\nlet matchesSelectorFunc = '';\nfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/{\n  if (!matchesSelectorFunc) {\n    matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n      // $FlowIgnore: Doesn't think elements are indexable\n      return (0, _shims.isFunction)(el[method]);\n    });\n  }\n\n  // Might not be found entirely (not an Element?) - in that case, bail\n  // $FlowIgnore: Doesn't think elements are indexable\n  if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false;\n\n  // $FlowIgnore: Doesn't think elements are indexable\n  return el[matchesSelectorFunc](selector);\n}\n\n// Works up the tree to the draggable itself attempting to match selector.\nfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/{\n  let node = el;\n  do {\n    if (matchesSelector(node, selector)) return true;\n    if (node === baseNode) return false;\n    // $FlowIgnore[incompatible-type]\n    node = node.parentNode;\n  } while (node);\n  return false;\n}\nfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n  if (!el) return;\n  const options = {\n    capture: true,\n    ...inputOptions\n  };\n  // $FlowIgnore[method-unbinding]\n  if (el.addEventListener) {\n    el.addEventListener(event, handler, options);\n  } else if (el.attachEvent) {\n    el.attachEvent('on' + event, handler);\n  } else {\n    // $FlowIgnore: Doesn't think elements are indexable\n    el['on' + event] = handler;\n  }\n}\nfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n  if (!el) return;\n  const options = {\n    capture: true,\n    ...inputOptions\n  };\n  // $FlowIgnore[method-unbinding]\n  if (el.removeEventListener) {\n    el.removeEventListener(event, handler, options);\n  } else if (el.detachEvent) {\n    el.detachEvent('on' + event, handler);\n  } else {\n    // $FlowIgnore: Doesn't think elements are indexable\n    el['on' + event] = null;\n  }\n}\nfunction outerHeight(node /*: HTMLElement*/) /*: number*/{\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetTop which is including margin. See getBoundPosition\n  let height = node.clientHeight;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  height += (0, _shims.int)(computedStyle.borderTopWidth);\n  height += (0, _shims.int)(computedStyle.borderBottomWidth);\n  return height;\n}\nfunction outerWidth(node /*: HTMLElement*/) /*: number*/{\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetLeft which is including margin. See getBoundPosition\n  let width = node.clientWidth;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  width += (0, _shims.int)(computedStyle.borderLeftWidth);\n  width += (0, _shims.int)(computedStyle.borderRightWidth);\n  return width;\n}\nfunction innerHeight(node /*: HTMLElement*/) /*: number*/{\n  let height = node.clientHeight;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  height -= (0, _shims.int)(computedStyle.paddingTop);\n  height -= (0, _shims.int)(computedStyle.paddingBottom);\n  return height;\n}\nfunction innerWidth(node /*: HTMLElement*/) /*: number*/{\n  let width = node.clientWidth;\n  const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n  width -= (0, _shims.int)(computedStyle.paddingLeft);\n  width -= (0, _shims.int)(computedStyle.paddingRight);\n  return width;\n}\n/*:: interface EventWithOffset {\n  clientX: number, clientY: number\n}*/\n// Get from offsetParent\nfunction offsetXYFromParent(evt /*: EventWithOffset*/, offsetParent /*: HTMLElement*/, scale /*: number*/) /*: ControlPosition*/{\n  const isBody = offsetParent === offsetParent.ownerDocument.body;\n  const offsetParentRect = isBody ? {\n    left: 0,\n    top: 0\n  } : offsetParent.getBoundingClientRect();\n  const x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n  const y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n  return {\n    x,\n    y\n  };\n}\nfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/{\n  const translation = getTranslation(controlPos, positionOffset, 'px');\n  return {\n    [(0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default)]: translation\n  };\n}\nfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/{\n  const translation = getTranslation(controlPos, positionOffset, '');\n  return translation;\n}\nfunction getTranslation(_ref /*:: */, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/{\n  let {\n    x,\n    y\n  } /*: ControlPosition*/ = _ref /*: ControlPosition*/;\n  let translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n  if (positionOffset) {\n    const defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n    const defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n    translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n  }\n  return translation;\n}\nfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/{\n  return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, t => identifier === t.identifier) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, t => identifier === t.identifier);\n}\nfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/{\n  if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n  if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n}\n\n// User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n\n// Note we're passing `document` b/c we could be iframed\nfunction addUserSelectStyles(doc /*: ?Document*/) {\n  if (!doc) return;\n  let styleEl = doc.getElementById('react-draggable-style-el');\n  if (!styleEl) {\n    styleEl = doc.createElement('style');\n    styleEl.type = 'text/css';\n    styleEl.id = 'react-draggable-style-el';\n    styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n    styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n    doc.getElementsByTagName('head')[0].appendChild(styleEl);\n  }\n  if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\nfunction removeUserSelectStyles(doc /*: ?Document*/) {\n  if (!doc) return;\n  try {\n    if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n    // $FlowIgnore: IE\n    if (doc.selection) {\n      // $FlowIgnore: IE\n      doc.selection.empty();\n    } else {\n      // Remove selection caused by scroll, unless it's a focused input\n      // (we use doc.defaultView in case we're in an iframe)\n      const selection = (doc.defaultView || window).getSelection();\n      if (selection && selection.type !== 'Caret') {\n        selection.removeAllRanges();\n      }\n    }\n  } catch (e) {\n    // probably IE\n  }\n}\nfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n  if (el.classList) {\n    el.classList.add(className);\n  } else {\n    if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n      el.className += \" \".concat(className);\n    }\n  }\n}\nfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n  if (el.classList) {\n    el.classList.remove(className);\n  } else {\n    el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n  }\n}","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","var baseForOwn = require('./_baseForOwn'),\n    castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Checkboard = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _checkboard = require('../../helpers/checkboard');\n\nvar checkboard = _interopRequireWildcard(_checkboard);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Checkboard = exports.Checkboard = function Checkboard(_ref) {\n  var white = _ref.white,\n      grey = _ref.grey,\n      size = _ref.size,\n      renderers = _ref.renderers,\n      borderRadius = _ref.borderRadius,\n      boxShadow = _ref.boxShadow;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      grid: {\n        borderRadius: borderRadius,\n        boxShadow: boxShadow,\n        absolute: '0px 0px 0px 0px',\n        background: 'url(' + checkboard.get(white, grey, size, renderers.canvas) + ') center left'\n      }\n    }\n  });\n\n  return _react2.default.createElement('div', { style: styles.grid });\n};\n\nCheckboard.defaultProps = {\n  size: 8,\n  white: 'transparent',\n  grey: 'rgba(0,0,0,.08)',\n  renderers: {}\n};\n\nexports.default = Checkboard;","import { Button, Card, CardContent, Grid, IconButton, Theme, Typography } from '@material-ui/core';\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport * as React from 'react';\nimport { getFormValues } from 'redux-form/immutable';\nimport {\n  change,\n} from 'redux-form';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { DRAWER_ID as USER_DRAWER_ID } from '../../../containers/Dashboard/WidgetLoader/TeamManagementWidgets/User/constants';\nimport { fromJS, List } from 'immutable';\nimport { TEAM_MANAGEMENT_USER_EDIT } from '../../TeamManagementUserDrawer';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { compose } from 'redux';\nimport withUserPermissions, { IWithUserPermissions } from '../../../hoc/withUserPermissions';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { SPEC_BOOKLET_FORM_NAME } from '../index';\nimport { Contact, User } from '../../../models';\nimport { ConditionalTooltip } from '../..';\nimport { CONTACT_DRAWER_ID } from '../../../containers/Forms/NewProjectKeyContactsForm';\nimport { GetContactsSucceededAction, SelectContactAction } from '../../../modules/AccountModule/actions';\nimport { Image } from '../..';\n\nexport const ContactCardWrapper: React.FC = ({ children }) => {\n  const classes = useStyles();\n  return (\n    <Card className={classes.card} variant='outlined'>\n      {children}\n    </Card>\n  );\n};\n\nexport const ContactCardButton: React.FC<{onClick: any, text?: string, isDisabled?: boolean}> = ({ onClick, isDisabled = false, text = '' }) => {\n  const classes = useStyles();\n  return (\n    <Button\n      size='small'\n      disabled={isDisabled}\n      onClick={onClick}\n      classes={{\n        root: classes.button\n      }}\n      endIcon={<EditIcon fontSize='small'/>}\n    >\n      {text}\n    </Button>\n  );\n};\n\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n  card: {\n    width: 370,\n    borderRadius: theme.shape.borderRadius,\n  },\n  imageCard: {\n    width: 'auto'\n  },\n  button: {\n    textTransform: 'none',\n    ...theme.typography.caption\n  },\n  editButton: {\n    marginLeft: theme.spacing(1)\n  },\n  cardAndButton: {\n    marginTop: theme.spacing(3),\n  },\n  contactInfo: {\n    paddingLeft: theme.spacing(2),\n  },\n}));\n\ninterface IContactCardComponentProps {\n  selfUser: IMap<User>;\n  cardType: 'user' | 'customer';\n}\ninterface IContactCardProps extends IContactCardComponentProps {\n  formValues: any;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ContactCardProps = IContactCardProps & WithTranslation & IWithUserPermissions;\n\nexport const formatCustomerName = (customer: IMap<Contact>) => {\n  const organization = customer && customer.get('organization');\n  const firstName = customer && customer.get('firstName');\n  const lastName = customer && customer.get('lastName');\n\n  return organization || [firstName, lastName].filter(x => x).join(' ') || '';\n};\n\nconst ContactCard: React.FC<ContactCardProps> = props => {\n  const {\n    formValues,\n    selfUser,\n    cardType,\n    selfFirmId,\n    selfOfficeId,\n    dispatch,\n    hasOfficeAdminPermissions,\n    hasFirmAdminPermissions,\n    t,\n  } = props;\n\n  const classes = useStyles();\n\n  const contactId = formValues && formValues.getIn(['contact', 'id']);\n  const contactData = formValues && formValues.getIn(['contact', 'value']);\n  const customerData = formValues && formValues.getIn(['customer', 'value']);\n  const customerImageId = customerData && customerData.get('imageId') || '';\n\n  const lastName = contactData && contactData.get('lastName') || '';\n  const firstName = contactData && contactData.get('firstName') || '';\n  const email = contactData && contactData.get('email');\n  const officePhone = contactData && contactData.get('officePhone');\n  const extension = contactData && contactData.get('extension');\n  const mobilePhone = contactData && contactData.get('mobilePhone');\n  const name = [firstName, lastName].filter(x => x).join(' ');\n  const phoneNumber = [officePhone, extension].filter(x => x).join(' - ') || mobilePhone;\n\n  const selfEdit = selfUser && selfUser.get('id') === contactId;\n  const officeAdminEdit = hasOfficeAdminPermissions(selfOfficeId);\n  const firmAdminEdit = hasFirmAdminPermissions(selfFirmId);\n  const isDisabled = selfEdit ? false : (!officeAdminEdit && !firmAdminEdit);\n\n  const customOnUserSubmit = (submitValues: Map<string, any>) => {\n    const firstNameVal = submitValues.get('firstName');\n    const lastNameVal = submitValues.get('lastName');\n    const label = [firstNameVal, lastNameVal].filter(x => x).join(' ');\n\n    dispatch(change(SPEC_BOOKLET_FORM_NAME, 'contact', fromJS({\n      id: contactId,\n      label,\n      value: submitValues\n    })));\n  };\n\n  const openUserDrawer = () => {\n    dispatch(new SetOverlayComponentPropsAction({\n      id: USER_DRAWER_ID,\n      props: fromJS({\n        user: contactData,\n        customOnSubmit: customOnUserSubmit,\n      })\n    }));\n\n    dispatch(new SetOverlayComponentContentAction({\n      id: USER_DRAWER_ID,\n      content: TEAM_MANAGEMENT_USER_EDIT,\n    }));\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: USER_DRAWER_ID,\n      open: true\n    }));\n  };\n\n  const handleCustomerEdit = (e: React.SyntheticEvent, customer: IMap<Contact>) => {\n    e.stopPropagation();\n    dispatch(new GetContactsSucceededAction({contacts: List([customer])})); /* Hacky workaround for the way the contacts drawer works. This populates the correct field in redux with the necessary contact data */\n    dispatch(new SelectContactAction(customer.get('id')));\n    dispatch(new SetOverlayComponentContentAction({id: CONTACT_DRAWER_ID, content: '__UserContactDrawerDetailsContactEdit__'}));\n    dispatch(new SetOverlayComponentPropsAction({\n      id: CONTACT_DRAWER_ID,\n      props: {\n        submitCb: (data) => dispatch(change(SPEC_BOOKLET_FORM_NAME, 'customer', fromJS({\n          id: data.get('id'),\n          label: formatCustomerName(data),\n          value: data\n        })))\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({id: CONTACT_DRAWER_ID, open: true}));\n  };\n\n  return (\n    cardType === 'user'\n    ? <Grid className={classes.cardAndButton} container={true} wrap='nowrap' justify='flex-start' alignItems='flex-start'>\n        <ContactCardWrapper>\n          <CardContent style={{paddingBottom: 16}}>\n            <Grid item={true} container={true} direction='column' justify='center' className={classes.contactInfo}>\n              {\n                [name,phoneNumber,email].map((item, index) => (\n                  <Typography key={`${index}-${item}`} gutterBottom={true} variant='body2'>{item}</Typography>\n                ))\n              }\n            </Grid>\n          </CardContent>\n        </ContactCardWrapper>\n        <ConditionalTooltip showTooltip={isDisabled} title={t('specBookletPrint.adminPermissions')}>\n          <span>\n            <IconButton\n              size='small'\n              disabled={isDisabled}\n              onClick={openUserDrawer}\n              classes={{\n                root: classes.editButton\n              }}\n            >\n              <EditIcon fontSize='small'/>\n            </IconButton>\n          </span>\n        </ConditionalTooltip>\n      </Grid>\n    : customerData\n      ? <Grid className={classes.cardAndButton} container={true} wrap='nowrap' justify='flex-start' alignItems='flex-start'>\n          {\n            !!customerImageId\n            ? <Card className={classes.imageCard} variant='outlined'>\n                <CardContent style={{paddingBottom: 16}}>\n                  <Grid container={true} justify='center'>\n                    <Image\n                      src={customerImageId || '725e89da99cd9ae692d49bc367006290'}\n                      width={'150px'}\n                      aspectRatio={'100%'}\n                      fromService={true}\n                      />\n                  </Grid>\n                </CardContent>\n              </Card>\n            : <Typography>{t('specBookletPrint.contactNoImage')}</Typography>\n        }\n          <IconButton\n          size='small'\n            onClick={e => handleCustomerEdit(e,customerData)}\n            classes={{\n              root: classes.editButton\n            }}\n          >\n            <EditIcon fontSize='small'/>\n          </IconButton>\n        </Grid>\n      : null\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n  formValues: getFormValues(SPEC_BOOKLET_FORM_NAME),\n})(state);\n\nexport default compose<React.FC<IContactCardComponentProps>>(\n  withUserPermissions,\n  connect(mapStateToProps, mapDispatchToProps),\n  withTranslation('translations'),\n)(ContactCard);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _extendableBuiltin(cls) {\n  function ExtendableBuiltin() {\n    cls.apply(this, arguments);\n  }\n\n  ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n    constructor: {\n      value: cls,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(ExtendableBuiltin, cls);\n  } else {\n    ExtendableBuiltin.__proto__ = cls;\n  }\n\n  return ExtendableBuiltin;\n}\n\nvar ExtendableError = function (_extendableBuiltin2) {\n  _inherits(ExtendableError, _extendableBuiltin2);\n\n  function ExtendableError() {\n    var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n    _classCallCheck(this, ExtendableError);\n\n    // extending Error is weird and does not propagate `message`\n    var _this = _possibleConstructorReturn(this, (ExtendableError.__proto__ || Object.getPrototypeOf(ExtendableError)).call(this, message));\n\n    Object.defineProperty(_this, 'message', {\n      configurable: true,\n      enumerable: false,\n      value: message,\n      writable: true\n    });\n\n    Object.defineProperty(_this, 'name', {\n      configurable: true,\n      enumerable: false,\n      value: _this.constructor.name,\n      writable: true\n    });\n\n    if (Error.hasOwnProperty('captureStackTrace')) {\n      Error.captureStackTrace(_this, _this.constructor);\n      return _possibleConstructorReturn(_this);\n    }\n\n    Object.defineProperty(_this, 'stack', {\n      configurable: true,\n      enumerable: false,\n      value: new Error(message).stack,\n      writable: true\n    });\n    return _this;\n  }\n\n  return ExtendableError;\n}(_extendableBuiltin(Error));\n\nexport default ExtendableError;\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","import React, {\n  useCallback,\n  useState,\n} from 'react';\nimport {\n  List as ImuList\n} from 'immutable';\nimport {\n  List,\n  AutoSizer,\n  CellMeasurer,\n  CellMeasurerCache,\n} from 'react-virtualized';\nimport { MenuListComponentProps } from 'react-select-virtualized';\nimport { IMap } from 'ats-utils/src/Interfaces/IMap';\nimport { ListItem } from '../../../models';\n\ntype Props = MenuListComponentProps<IMap<ListItem<string, number | string>>>;\n\n\nconst OVER_SCAN_ROW_COUNT = 100;\nconst LIST_HEIGHT = 200;\n\nconst VirtualizedList: React.FC<Props> = (props: Props) => {\n  const {\n    options, children,\n  } = props;\n  const [cache] = useState(new CellMeasurerCache({fixedWidth: true, minHeight: 10}));\n  const size = ImuList.isList(options) ? options.count() : options.length;\n  const rowRenderer = useCallback(\n    ({index, key, parent, style,}) =>\n      (\n        <CellMeasurer\n          cache={cache}\n          key={key}\n          columnIndex={0}\n          rowIndex={index}\n          parent={parent}\n        >\n          {\n            ({registerChild}) => (\n              <div ref={registerChild} style={style}>{children[index]}</div>\n            )\n          }\n        </CellMeasurer>\n      ), [children]);\n  return (\n    <>\n      {\n        size === 0 ?\n          children :\n          <AutoSizer disableHeight={true}>\n            {\n              ({width}) => <List\n                height={LIST_HEIGHT}\n                overscanRowCount={OVER_SCAN_ROW_COUNT}\n                rowCount={size}\n                rowHeight={cache.rowHeight}\n                rowRenderer={rowRenderer}\n                width={width}\n              />\n            }\n          </AutoSizer>\n      }\n    </>\n  );\n};\n\n\nexport default VirtualizedList;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _url = require('url');\n\nvar _url2 = _interopRequireDefault(_url);\n\nvar _queryString = require('query-string');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar defaults = {\n  redirectQueryParamName: 'redirect',\n  locationSelector: function locationSelector(_ref) {\n    var location = _ref.location;\n    return location;\n  }\n};\n\nexports.default = function (args) {\n  var _defaults$args = _extends({}, defaults, args),\n      redirectQueryParamName = _defaults$args.redirectQueryParamName,\n      locationSelector = _defaults$args.locationSelector;\n\n  var getRedirectQueryParam = function getRedirectQueryParam(props) {\n    var location = locationSelector(props);\n    var query = (0, _queryString.parse)(location.search);\n    return query[redirectQueryParamName];\n  };\n\n  var createRedirectLoc = function createRedirectLoc(allowRedirectBack) {\n    return function (props, redirectPath) {\n      var location = locationSelector(props);\n      var redirectLoc = _url2.default.parse(redirectPath, true);\n\n      var query = void 0;\n\n      if (allowRedirectBack) {\n        query = _defineProperty({}, redirectQueryParamName, '' + location.pathname + location.search + location.hash);\n      } else {\n        query = {};\n      }\n\n      query = _extends({}, query, redirectLoc.query);\n\n      return {\n        pathname: redirectLoc.pathname,\n        hash: redirectLoc.hash,\n        search: (0, _queryString.stringify)(query)\n      };\n    };\n  };\n\n  return {\n    getRedirectQueryParam: getRedirectQueryParam,\n    createRedirectLoc: createRedirectLoc\n  };\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z\"\n}), 'Block');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z\"\n}), 'Assignment');\n\nexports.default = _default;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\n\nvar processProps = function processProps(type, props, _value, deepEqual) {\n  var value = props.value;\n\n  if (type === 'checkbox') {\n    return _extends({}, props, {\n      checked: !!value\n    });\n  }\n\n  if (type === 'radio') {\n    return _extends({}, props, {\n      checked: deepEqual(value, _value),\n      value: _value\n    });\n  }\n\n  if (type === 'select-multiple') {\n    return _extends({}, props, {\n      value: value || []\n    });\n  }\n\n  if (type === 'file') {\n    return _extends({}, props, {\n      value: value || undefined\n    });\n  }\n\n  return props;\n};\n\nvar createFieldProps = function createFieldProps(_ref, name, _ref2) {\n  var getIn = _ref.getIn,\n      toJS = _ref.toJS,\n      deepEqual = _ref.deepEqual;\n\n  var asyncError = _ref2.asyncError,\n      asyncValidating = _ref2.asyncValidating,\n      onBlur = _ref2.onBlur,\n      onChange = _ref2.onChange,\n      onDrop = _ref2.onDrop,\n      onDragStart = _ref2.onDragStart,\n      dirty = _ref2.dirty,\n      dispatch = _ref2.dispatch,\n      onFocus = _ref2.onFocus,\n      form = _ref2.form,\n      format = _ref2.format,\n      initial = _ref2.initial,\n      parse = _ref2.parse,\n      pristine = _ref2.pristine,\n      props = _ref2.props,\n      state = _ref2.state,\n      submitError = _ref2.submitError,\n      submitFailed = _ref2.submitFailed,\n      submitting = _ref2.submitting,\n      syncError = _ref2.syncError,\n      syncWarning = _ref2.syncWarning,\n      validate = _ref2.validate,\n      value = _ref2.value,\n      _value = _ref2._value,\n      warn = _ref2.warn,\n      custom = _objectWithoutPropertiesLoose(_ref2, [\"asyncError\", \"asyncValidating\", \"onBlur\", \"onChange\", \"onDrop\", \"onDragStart\", \"dirty\", \"dispatch\", \"onFocus\", \"form\", \"format\", \"initial\", \"parse\", \"pristine\", \"props\", \"state\", \"submitError\", \"submitFailed\", \"submitting\", \"syncError\", \"syncWarning\", \"validate\", \"value\", \"_value\", \"warn\"]);\n\n  var error = syncError || asyncError || submitError;\n  var warning = syncWarning;\n\n  var formatFieldValue = function formatFieldValue(value, format) {\n    if (format === null) {\n      return value;\n    }\n\n    var defaultFormattedValue = value == null ? '' : value;\n    return format ? format(value, name) : defaultFormattedValue;\n  };\n\n  var formattedFieldValue = formatFieldValue(value, format);\n  return {\n    input: processProps(custom.type, {\n      name: name,\n      onBlur: onBlur,\n      onChange: onChange,\n      onDragStart: onDragStart,\n      onDrop: onDrop,\n      onFocus: onFocus,\n      value: formattedFieldValue\n    }, _value, deepEqual),\n    meta: _extends({}, toJS(state), {\n      active: !!(state && getIn(state, 'active')),\n      asyncValidating: asyncValidating,\n      autofilled: !!(state && getIn(state, 'autofilled')),\n      dirty: dirty,\n      dispatch: dispatch,\n      error: error,\n      form: form,\n      initial: initial,\n      warning: warning,\n      invalid: !!error,\n      pristine: pristine,\n      submitting: !!submitting,\n      submitFailed: !!submitFailed,\n      touched: !!(state && getIn(state, 'touched')),\n      valid: !error,\n      visited: !!(state && getIn(state, 'visited'))\n    }),\n    custom: _extends({}, custom, props)\n  };\n};\n\nexport default createFieldProps;","import isEvent from './isEvent';\n\nvar getSelectedValues = function getSelectedValues(options) {\n  var result = [];\n\n  if (options) {\n    for (var index = 0; index < options.length; index++) {\n      var option = options[index];\n\n      if (option.selected) {\n        result.push(option.value);\n      }\n    }\n  }\n\n  return result;\n};\n\nvar getValue = function getValue(event, isReactNative) {\n  if (isEvent(event)) {\n    if (!isReactNative && event.nativeEvent && event.nativeEvent.text !== undefined) {\n      return event.nativeEvent.text;\n    }\n\n    if (isReactNative && event.nativeEvent !== undefined) {\n      return event.nativeEvent.text;\n    }\n\n    var detypedEvent = event;\n    var _detypedEvent$target = detypedEvent.target,\n        type = _detypedEvent$target.type,\n        value = _detypedEvent$target.value,\n        checked = _detypedEvent$target.checked,\n        files = _detypedEvent$target.files,\n        dataTransfer = detypedEvent.dataTransfer;\n\n    if (type === 'checkbox') {\n      return !!checked;\n    }\n\n    if (type === 'file') {\n      return files || dataTransfer && dataTransfer.files;\n    }\n\n    if (type === 'select-multiple') {\n      return getSelectedValues(event.target.options);\n    }\n\n    return value;\n  }\n\n  return event;\n};\n\nexport default getValue;","var isReactNative = typeof window !== 'undefined' && window.navigator && window.navigator.product && window.navigator.product === 'ReactNative';\nexport default isReactNative;","import getValue from './getValue';\nimport isReactNative from '../isReactNative';\n\nvar onChangeValue = function onChangeValue(event, _ref) {\n  var name = _ref.name,\n      parse = _ref.parse,\n      normalize = _ref.normalize;\n  // read value from input\n  var value = getValue(event, isReactNative); // parse value if we have a parser\n\n  if (parse) {\n    value = parse(value, name);\n  } // normalize value\n\n\n  if (normalize) {\n    value = normalize(name, value);\n  }\n\n  return value;\n};\n\nexport default onChangeValue;","export var dataKey = 'text';","import { isValidElementType } from 'react-is';\n\nvar validateComponentProp = function validateComponentProp(props, propName, componentName) {\n  if (!isValidElementType(props[propName])) {\n    return new Error('Invalid prop `' + propName + '` supplied to' + ' `' + componentName + '`.');\n  }\n\n  return null;\n};\n\nexport default validateComponentProp;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport React, { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport createFieldProps from './createFieldProps';\nimport onChangeValue from './events/onChangeValue';\nimport { dataKey } from './util/eventConsts';\nimport plain from './structure/plain';\nimport isReactNative from './isReactNative';\nimport validateComponentProp from './util/validateComponentProp';\nimport isEvent from './events/isEvent';\nvar propsToNotUpdateFor = ['_reduxForm'];\n\nvar isObject = function isObject(entity) {\n  return entity && typeof entity === 'object';\n};\n\nvar isFunction = function isFunction(entity) {\n  return entity && typeof entity === 'function';\n};\n\nvar eventPreventDefault = function eventPreventDefault(event) {\n  if (isObject(event) && isFunction(event.preventDefault)) {\n    event.preventDefault();\n  }\n};\n\nvar eventDataTransferGetData = function eventDataTransferGetData(event, key) {\n  if (isObject(event) && isObject(event.dataTransfer) && isFunction(event.dataTransfer.getData)) {\n    return event.dataTransfer.getData(key);\n  }\n};\n\nvar eventDataTransferSetData = function eventDataTransferSetData(event, key, value) {\n  if (isObject(event) && isObject(event.dataTransfer) && isFunction(event.dataTransfer.setData)) {\n    event.dataTransfer.setData(key, value);\n  }\n};\n\nvar createConnectedField = function createConnectedField(structure) {\n  var deepEqual = structure.deepEqual,\n      getIn = structure.getIn;\n\n  var getSyncError = function getSyncError(syncErrors, name) {\n    var error = plain.getIn(syncErrors, name); // Because the error for this field might not be at a level in the error structure where\n    // it can be set directly, it might need to be unwrapped from the _error property\n\n    return error && error._error ? error._error : error;\n  };\n\n  var getSyncWarning = function getSyncWarning(syncWarnings, name) {\n    var warning = getIn(syncWarnings, name); // Because the warning for this field might not be at a level in the warning structure where\n    // it can be set directly, it might need to be unwrapped from the _warning property\n\n    return warning && warning._warning ? warning._warning : warning;\n  };\n\n  var ConnectedField =\n  /*#__PURE__*/\n  function (_Component) {\n    _inheritsLoose(ConnectedField, _Component);\n\n    function ConnectedField() {\n      var _this;\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n      _this.ref = React.createRef();\n\n      _this.isPristine = function () {\n        return _this.props.pristine;\n      };\n\n      _this.getValue = function () {\n        return _this.props.value;\n      };\n\n      _this.handleChange = function (event) {\n        var _this$props = _this.props,\n            name = _this$props.name,\n            dispatch = _this$props.dispatch,\n            parse = _this$props.parse,\n            normalize = _this$props.normalize,\n            onChange = _this$props.onChange,\n            _reduxForm = _this$props._reduxForm,\n            previousValue = _this$props.value;\n        var newValue = onChangeValue(event, {\n          name: name,\n          parse: parse,\n          normalize: normalize\n        });\n        var defaultPrevented = false;\n\n        if (onChange) {\n          // Can't seem to find a way to extend Event in React Native,\n          // thus I simply avoid adding preventDefault() in a RN environment\n          // to prevent the following error:\n          // `One of the sources for assign has an enumerable key on the prototype chain`\n          // Reference: https://github.com/facebook/react-native/issues/5507\n          if (!isReactNative && isEvent(event)) {\n            onChange(_extends({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), newValue, previousValue, name);\n          } else {\n            defaultPrevented = onChange(event, newValue, previousValue, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          // dispatch change action\n          dispatch(_reduxForm.change(name, newValue)); // call post-change callback\n\n          if (_reduxForm.asyncValidate) {\n            _reduxForm.asyncValidate(name, newValue, 'change');\n          }\n        }\n      };\n\n      _this.handleFocus = function (event) {\n        var _this$props2 = _this.props,\n            name = _this$props2.name,\n            dispatch = _this$props2.dispatch,\n            onFocus = _this$props2.onFocus,\n            _reduxForm = _this$props2._reduxForm;\n        var defaultPrevented = false;\n\n        if (onFocus) {\n          if (!isReactNative) {\n            onFocus(_extends({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), name);\n          } else {\n            defaultPrevented = onFocus(event, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          dispatch(_reduxForm.focus(name));\n        }\n      };\n\n      _this.handleBlur = function (event) {\n        var _this$props3 = _this.props,\n            name = _this$props3.name,\n            dispatch = _this$props3.dispatch,\n            parse = _this$props3.parse,\n            normalize = _this$props3.normalize,\n            onBlur = _this$props3.onBlur,\n            _reduxForm = _this$props3._reduxForm,\n            _value = _this$props3._value,\n            previousValue = _this$props3.value;\n        var newValue = onChangeValue(event, {\n          name: name,\n          parse: parse,\n          normalize: normalize\n        }); // for checkbox and radio, if the value property of checkbox or radio equals\n        // the value passed by blur event, then fire blur action with previousValue.\n\n        if (newValue === _value && _value !== undefined) {\n          newValue = previousValue;\n        }\n\n        var defaultPrevented = false;\n\n        if (onBlur) {\n          if (!isReactNative) {\n            onBlur(_extends({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), newValue, previousValue, name);\n          } else {\n            defaultPrevented = onBlur(event, newValue, previousValue, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          // dispatch blur action\n          dispatch(_reduxForm.blur(name, newValue)); // call post-blur callback\n\n          if (_reduxForm.asyncValidate) {\n            _reduxForm.asyncValidate(name, newValue, 'blur');\n          }\n        }\n      };\n\n      _this.handleDragStart = function (event) {\n        var _this$props4 = _this.props,\n            name = _this$props4.name,\n            onDragStart = _this$props4.onDragStart,\n            value = _this$props4.value;\n        eventDataTransferSetData(event, dataKey, value == null ? '' : value);\n\n        if (onDragStart) {\n          onDragStart(event, name);\n        }\n      };\n\n      _this.handleDrop = function (event) {\n        var _this$props5 = _this.props,\n            name = _this$props5.name,\n            dispatch = _this$props5.dispatch,\n            onDrop = _this$props5.onDrop,\n            _reduxForm = _this$props5._reduxForm,\n            previousValue = _this$props5.value;\n        var newValue = eventDataTransferGetData(event, dataKey);\n        var defaultPrevented = false;\n\n        if (onDrop) {\n          onDrop(_extends({}, event, {\n            preventDefault: function preventDefault() {\n              defaultPrevented = true;\n              return eventPreventDefault(event);\n            }\n          }), newValue, previousValue, name);\n        }\n\n        if (!defaultPrevented) {\n          // dispatch change action\n          dispatch(_reduxForm.change(name, newValue));\n          eventPreventDefault(event);\n        }\n      };\n\n      return _this;\n    }\n\n    var _proto = ConnectedField.prototype;\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      var _this2 = this;\n\n      var nextPropsKeys = Object.keys(nextProps);\n      var thisPropsKeys = Object.keys(this.props); // if we have children, we MUST update in React 16\n      // https://twitter.com/erikras/status/915866544558788608\n\n      return !!(this.props.children || nextProps.children || nextPropsKeys.length !== thisPropsKeys.length || nextPropsKeys.some(function (prop) {\n        if (~(nextProps.immutableProps || []).indexOf(prop)) {\n          return _this2.props[prop] !== nextProps[prop];\n        }\n\n        return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this2.props[prop], nextProps[prop]);\n      }));\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      return this.ref.current;\n    };\n\n    _proto.render = function render() {\n      var _this$props6 = this.props,\n          component = _this$props6.component,\n          forwardRef = _this$props6.forwardRef,\n          name = _this$props6.name,\n          _reduxForm = _this$props6._reduxForm,\n          normalize = _this$props6.normalize,\n          onBlur = _this$props6.onBlur,\n          onChange = _this$props6.onChange,\n          onFocus = _this$props6.onFocus,\n          onDragStart = _this$props6.onDragStart,\n          onDrop = _this$props6.onDrop,\n          immutableProps = _this$props6.immutableProps,\n          rest = _objectWithoutPropertiesLoose(_this$props6, [\"component\", \"forwardRef\", \"name\", \"_reduxForm\", \"normalize\", \"onBlur\", \"onChange\", \"onFocus\", \"onDragStart\", \"onDrop\", \"immutableProps\"]);\n\n      var _createFieldProps = createFieldProps(structure, name, _extends({}, rest, {\n        form: _reduxForm.form,\n        onBlur: this.handleBlur,\n        onChange: this.handleChange,\n        onDrop: this.handleDrop,\n        onDragStart: this.handleDragStart,\n        onFocus: this.handleFocus\n      })),\n          custom = _createFieldProps.custom,\n          props = _objectWithoutPropertiesLoose(_createFieldProps, [\"custom\"]);\n\n      if (forwardRef) {\n        custom.ref = this.ref;\n      }\n\n      if (typeof component === 'string') {\n        var input = props.input,\n            meta = props.meta; // eslint-disable-line no-unused-vars\n        // flatten input into other props\n\n        return createElement(component, _extends({}, input, custom));\n      } else {\n        return createElement(component, _extends({}, props, custom));\n      }\n    };\n\n    return ConnectedField;\n  }(Component);\n\n  ConnectedField.propTypes = {\n    component: validateComponentProp,\n    props: PropTypes.object\n  };\n  var connector = connect(function (state, ownProps) {\n    var name = ownProps.name,\n        _ownProps$_reduxForm = ownProps._reduxForm,\n        initialValues = _ownProps$_reduxForm.initialValues,\n        getFormState = _ownProps$_reduxForm.getFormState;\n    var formState = getFormState(state);\n    var initialState = getIn(formState, \"initial.\" + name);\n    var initial = initialState !== undefined ? initialState : initialValues && getIn(initialValues, name);\n    var value = getIn(formState, \"values.\" + name);\n    var submitting = getIn(formState, 'submitting');\n    var syncError = getSyncError(getIn(formState, 'syncErrors'), name);\n    var syncWarning = getSyncWarning(getIn(formState, 'syncWarnings'), name);\n    var pristine = deepEqual(value, initial);\n    return {\n      asyncError: getIn(formState, \"asyncErrors.\" + name),\n      asyncValidating: getIn(formState, 'asyncValidating') === name,\n      dirty: !pristine,\n      pristine: pristine,\n      state: getIn(formState, \"fields.\" + name),\n      submitError: getIn(formState, \"submitErrors.\" + name),\n      submitFailed: getIn(formState, 'submitFailed'),\n      submitting: submitting,\n      syncError: syncError,\n      syncWarning: syncWarning,\n      initial: initial,\n      value: value,\n      _value: ownProps.value // save value passed in (for radios)\n\n    };\n  }, undefined, undefined, {\n    forwardRef: true\n  });\n  return connector(ConnectedField);\n};\n\nexport default createConnectedField;","import _isEqualWith from \"lodash/isEqualWith\";\n\nvar customizer = function customizer(objectValue, otherValue, indexOrkey, object, other, stack) {\n  // https://lodash.com/docs/4.17.4#isEqualWith\n  if (stack) {\n    // Shallow compares\n    // For 1st level, stack === undefined.\n    //   -> Do nothing (and implicitly return undefined so that it goes to compare 2nd level)\n    // For 2nd level and up, stack !== undefined.\n    //   -> Compare by === operator\n    return objectValue === otherValue;\n  }\n};\n\nvar shallowCompare = function shallowCompare(instance, nextProps, nextState) {\n  var propsEqual = _isEqualWith(instance.props, nextProps, customizer);\n\n  var stateEqual = _isEqualWith(instance.state, nextState, customizer);\n\n  return !propsEqual || !stateEqual;\n};\n\nexport default shallowCompare;","var formatName = function formatName(_ref, name) {\n  var sectionPrefix = _ref._reduxForm.sectionPrefix;\n  return sectionPrefix ? sectionPrefix + \".\" + name : name;\n};\n\nexport default formatName;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport React, { Component, createElement } from 'react';\nimport { polyfill } from 'react-lifecycles-compat';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\nimport createConnectedField from './ConnectedField';\nimport shallowCompare from './util/shallowCompare';\nimport prefixName from './util/prefixName';\nimport plain from './structure/plain';\nimport { withReduxForm } from './ReduxFormContext';\nimport validateComponentProp from './util/validateComponentProp';\n\nvar createField = function createField(structure) {\n  var ConnectedField = createConnectedField(structure);\n  var setIn = structure.setIn;\n\n  var Field =\n  /*#__PURE__*/\n  function (_Component) {\n    _inheritsLoose(Field, _Component);\n\n    function Field(props) {\n      var _this;\n\n      _this = _Component.call(this, props) || this;\n      _this.ref = React.createRef();\n      _this.ref = React.createRef();\n\n      _this.normalize = function (name, value) {\n        var normalize = _this.props.normalize;\n\n        if (!normalize) {\n          return value;\n        }\n\n        var previousValues = _this.props._reduxForm.getValues();\n\n        var previousValue = _this.value;\n        var nextValues = setIn(previousValues, name, value);\n        return normalize(value, previousValue, nextValues, previousValues, name);\n      };\n\n      if (!props._reduxForm) {\n        throw new Error('Field must be inside a component decorated with reduxForm()');\n      }\n\n      return _this;\n    }\n\n    var _proto = Field.prototype;\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this2 = this;\n\n      this.props._reduxForm.register(this.name, 'Field', function () {\n        return _this2.props.validate;\n      }, function () {\n        return _this2.props.warn;\n      });\n    };\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n      return shallowCompare(this, nextProps, nextState);\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var oldName = prefixName(this.props, this.props.name);\n      var newName = prefixName(nextProps, nextProps.name);\n\n      if (oldName !== newName || // use deepEqual here because they could be a function or an array of functions\n      !plain.deepEqual(this.props.validate, nextProps.validate) || !plain.deepEqual(this.props.warn, nextProps.warn)) {\n        // unregister old name\n        this.props._reduxForm.unregister(oldName); // register new name\n\n\n        this.props._reduxForm.register(newName, 'Field', function () {\n          return nextProps.validate;\n        }, function () {\n          return nextProps.warn;\n        });\n      }\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      this.props._reduxForm.unregister(this.name);\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      invariant(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to Field');\n      return this.ref.current ? this.ref.current.getRenderedComponent() : undefined;\n    };\n\n    _proto.render = function render() {\n      return createElement(ConnectedField, _extends({}, this.props, {\n        name: this.name,\n        normalize: this.normalize,\n        ref: this.ref\n      }));\n    };\n\n    _createClass(Field, [{\n      key: \"name\",\n      get: function get() {\n        return prefixName(this.props, this.props.name);\n      }\n    }, {\n      key: \"dirty\",\n      get: function get() {\n        return !this.pristine;\n      }\n    }, {\n      key: \"pristine\",\n      get: function get() {\n        return !!(this.ref.current && this.ref.current.isPristine());\n      }\n    }, {\n      key: \"value\",\n      get: function get() {\n        return this.ref.current && this.ref.current.getValue();\n      }\n    }]);\n\n    return Field;\n  }(Component);\n\n  Field.propTypes = {\n    name: PropTypes.string.isRequired,\n    component: validateComponentProp,\n    format: PropTypes.func,\n    normalize: PropTypes.func,\n    onBlur: PropTypes.func,\n    onChange: PropTypes.func,\n    onFocus: PropTypes.func,\n    onDragStart: PropTypes.func,\n    onDrop: PropTypes.func,\n    parse: PropTypes.func,\n    props: PropTypes.object,\n    validate: PropTypes.oneOfType([PropTypes.func, PropTypes.arrayOf(PropTypes.func)]),\n    warn: PropTypes.oneOfType([PropTypes.func, PropTypes.arrayOf(PropTypes.func)]),\n    forwardRef: PropTypes.bool,\n    immutableProps: PropTypes.arrayOf(PropTypes.string),\n    _reduxForm: PropTypes.object\n  };\n  polyfill(Field);\n  return withReduxForm(Field);\n};\n\nexport default createField;","import createField from './createField';\nimport plain from './structure/plain';\nexport default createField(plain);","import _extends from \"@babel/runtime/helpers/extends\";\nimport isPromise from 'is-promise';\nimport SubmissionError from './SubmissionError';\n\nvar isSubmissionError = function isSubmissionError(error) {\n  return error && error.name === SubmissionError.name;\n};\n\nvar mergeErrors = function mergeErrors(_ref) {\n  var asyncErrors = _ref.asyncErrors,\n      syncErrors = _ref.syncErrors;\n  return asyncErrors && typeof asyncErrors.merge === 'function' ? asyncErrors.merge(syncErrors).toJS() : _extends({}, asyncErrors, syncErrors);\n};\n\nvar isImmutableList;\n\ntry {\n  // ImmutableJS isList implementation if available\n  // eslint-disable-next-line import/no-extraneous-dependencies\n  var _require = require('immutable'),\n      List = _require.List;\n\n  isImmutableList = List.isList;\n} catch (err) {\n  isImmutableList = function isImmutableList(maybeList) {\n    return false;\n  };\n} // fields may be an Immutable List which cannot be spread\n// convert the fields to an array if necessary\n\n\nvar makeFieldsArray = function makeFieldsArray(fields) {\n  return isImmutableList(fields) ? fields.toArray() : fields;\n};\n\nvar executeSubmit = function executeSubmit(submit, fields, props) {\n  var dispatch = props.dispatch,\n      submitAsSideEffect = props.submitAsSideEffect,\n      onSubmitFail = props.onSubmitFail,\n      onSubmitSuccess = props.onSubmitSuccess,\n      startSubmit = props.startSubmit,\n      stopSubmit = props.stopSubmit,\n      setSubmitFailed = props.setSubmitFailed,\n      setSubmitSucceeded = props.setSubmitSucceeded,\n      values = props.values;\n  fields = makeFieldsArray(fields);\n  var result;\n\n  try {\n    result = submit(values, dispatch, props);\n  } catch (submitError) {\n    var error = isSubmissionError(submitError) ? submitError.errors : undefined;\n    stopSubmit(error);\n    setSubmitFailed.apply(void 0, fields);\n\n    if (onSubmitFail) {\n      onSubmitFail(error, dispatch, submitError, props);\n    }\n\n    if (error || onSubmitFail) {\n      // if you've provided an onSubmitFail callback, don't re-throw the error\n      return error;\n    } else {\n      throw submitError;\n    }\n  }\n\n  if (submitAsSideEffect) {\n    if (result) {\n      dispatch(result);\n    }\n  } else {\n    if (isPromise(result)) {\n      startSubmit();\n      return result.then(function (submitResult) {\n        stopSubmit();\n        setSubmitSucceeded();\n\n        if (onSubmitSuccess) {\n          onSubmitSuccess(submitResult, dispatch, props);\n        }\n\n        return submitResult;\n      }, function (submitError) {\n        var error = isSubmissionError(submitError) ? submitError.errors : undefined;\n        stopSubmit(error);\n        setSubmitFailed.apply(void 0, fields);\n\n        if (onSubmitFail) {\n          onSubmitFail(error, dispatch, submitError, props);\n        }\n\n        if (error || onSubmitFail) {\n          // if you've provided an onSubmitFail callback, don't re-throw the error\n          return error;\n        } else {\n          throw submitError;\n        }\n      });\n    } else {\n      setSubmitSucceeded();\n\n      if (onSubmitSuccess) {\n        onSubmitSuccess(result, dispatch, props);\n      }\n    }\n  }\n\n  return result;\n};\n\nvar handleSubmit = function handleSubmit(submit, props, valid, asyncValidate, fields) {\n  var dispatch = props.dispatch,\n      onSubmitFail = props.onSubmitFail,\n      setSubmitFailed = props.setSubmitFailed,\n      syncErrors = props.syncErrors,\n      asyncErrors = props.asyncErrors,\n      touch = props.touch,\n      persistentSubmitErrors = props.persistentSubmitErrors;\n  fields = makeFieldsArray(fields);\n  touch.apply(void 0, fields); // mark all fields as touched\n\n  if (valid || persistentSubmitErrors) {\n    var asyncValidateResult = asyncValidate && asyncValidate();\n\n    if (asyncValidateResult) {\n      return asyncValidateResult.then(function (asyncErrors) {\n        if (asyncErrors) {\n          throw asyncErrors;\n        }\n\n        return executeSubmit(submit, fields, props);\n      })[\"catch\"](function (asyncErrors) {\n        setSubmitFailed.apply(void 0, fields);\n\n        if (onSubmitFail) {\n          onSubmitFail(asyncErrors, dispatch, null, props);\n        }\n\n        return Promise.reject(asyncErrors);\n      });\n    } else {\n      return executeSubmit(submit, fields, props);\n    }\n  } else {\n    setSubmitFailed.apply(void 0, fields);\n    var errors = mergeErrors({\n      asyncErrors: asyncErrors,\n      syncErrors: syncErrors\n    });\n\n    if (onSubmitFail) {\n      onSubmitFail(errors, dispatch, null, props);\n    }\n\n    return errors;\n  }\n};\n\nexport default handleSubmit;","import isPromise from 'is-promise';\n\nvar asyncValidation = function asyncValidation(fn, start, stop, field) {\n  start(field);\n  var promise = fn();\n\n  if (!isPromise(promise)) {\n    throw new Error('asyncValidate function passed to reduxForm must return a promise');\n  }\n\n  var handleErrors = function handleErrors(rejected) {\n    return function (errors) {\n      if (rejected) {\n        if (errors && Object.keys(errors).length) {\n          stop(errors);\n          return errors;\n        } else {\n          stop();\n          throw new Error('Asynchronous validation promise was rejected without errors.');\n        }\n      }\n\n      stop();\n      return Promise.resolve();\n    };\n  };\n\n  return promise.then(handleErrors(false), handleErrors(true));\n};\n\nexport default asyncValidation;","import isEvent from './isEvent';\n\nvar silenceEvent = function silenceEvent(event) {\n  var is = isEvent(event);\n\n  if (is) {\n    event.preventDefault();\n  }\n\n  return is;\n};\n\nexport default silenceEvent;","import silenceEvent from './silenceEvent';\n\nvar silenceEvents = function silenceEvents(fn) {\n  return function (event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return silenceEvent(event) ? fn.apply(void 0, args) : fn.apply(void 0, [event].concat(args));\n  };\n};\n\nexport default silenceEvents;","import plain from './structure/plain';\n\nvar toArray = function toArray(value) {\n  return Array.isArray(value) ? value : [value];\n};\n\nvar getError = function getError(value, values, props, validators, name) {\n  var array = toArray(validators);\n\n  for (var i = 0; i < array.length; i++) {\n    var error = array[i](value, values, props, name);\n\n    if (error) {\n      return error;\n    }\n  }\n};\n\nvar generateValidator = function generateValidator(validators, _ref) {\n  var getIn = _ref.getIn;\n  return function (values, props) {\n    var errors = {};\n    Object.keys(validators).forEach(function (name) {\n      var value = getIn(values, name);\n      var error = getError(value, values, props, validators[name], name);\n\n      if (error) {\n        errors = plain.setIn(errors, name, error);\n      }\n    });\n    return errors;\n  };\n};\n\nexport default generateValidator;","var getDisplayName = function getDisplayName(Comp) {\n  return Comp.displayName || Comp.name || 'Component';\n};\n\nexport default getDisplayName;","import _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _merge from \"lodash/merge\";\nimport _mapValues from \"lodash/mapValues\";\nimport { polyfill } from 'react-lifecycles-compat';\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport isPromise from 'is-promise';\nimport PropTypes from 'prop-types';\nimport React, { createElement } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport importedActions from './actions';\nimport asyncValidation from './asyncValidation';\nimport defaultShouldAsyncValidate from './defaultShouldAsyncValidate';\nimport defaultShouldValidate from './defaultShouldValidate';\nimport defaultShouldError from './defaultShouldError';\nimport defaultShouldWarn from './defaultShouldWarn';\nimport silenceEvent from './events/silenceEvent';\nimport silenceEvents from './events/silenceEvents';\nimport generateValidator from './generateValidator';\nimport handleSubmit from './handleSubmit';\nimport createIsValid from './selectors/isValid';\nimport plain from './structure/plain';\nimport getDisplayName from './util/getDisplayName';\nimport isHotReloading from './util/isHotReloading';\nimport { withReduxForm, ReduxFormContext } from './ReduxFormContext';\n\nvar isClassComponent = function isClassComponent(Component) {\n  return Boolean(Component && Component.prototype && typeof Component.prototype.isReactComponent === 'object');\n}; // extract field-specific actions\n\n\nvar arrayInsert = importedActions.arrayInsert,\n    arrayMove = importedActions.arrayMove,\n    arrayPop = importedActions.arrayPop,\n    arrayPush = importedActions.arrayPush,\n    arrayRemove = importedActions.arrayRemove,\n    arrayRemoveAll = importedActions.arrayRemoveAll,\n    arrayShift = importedActions.arrayShift,\n    arraySplice = importedActions.arraySplice,\n    arraySwap = importedActions.arraySwap,\n    arrayUnshift = importedActions.arrayUnshift,\n    blur = importedActions.blur,\n    change = importedActions.change,\n    focus = importedActions.focus,\n    formActions = _objectWithoutPropertiesLoose(importedActions, [\"arrayInsert\", \"arrayMove\", \"arrayPop\", \"arrayPush\", \"arrayRemove\", \"arrayRemoveAll\", \"arrayShift\", \"arraySplice\", \"arraySwap\", \"arrayUnshift\", \"blur\", \"change\", \"focus\"]);\n\nvar arrayActions = {\n  arrayInsert: arrayInsert,\n  arrayMove: arrayMove,\n  arrayPop: arrayPop,\n  arrayPush: arrayPush,\n  arrayRemove: arrayRemove,\n  arrayRemoveAll: arrayRemoveAll,\n  arrayShift: arrayShift,\n  arraySplice: arraySplice,\n  arraySwap: arraySwap,\n  arrayUnshift: arrayUnshift\n};\nvar propsToNotUpdateFor = [].concat(Object.keys(importedActions), ['array', 'asyncErrors', 'initialValues', 'syncErrors', 'syncWarnings', 'values', 'registeredFields']);\n\nvar checkSubmit = function checkSubmit(submit) {\n  if (!submit || typeof submit !== 'function') {\n    throw new Error('You must either pass handleSubmit() an onSubmit function or pass onSubmit as a prop');\n  }\n\n  return submit;\n};\n\n/**\n * The decorator that is the main API to redux-form\n */\nvar createReduxForm = function createReduxForm(structure) {\n  var deepEqual = structure.deepEqual,\n      empty = structure.empty,\n      getIn = structure.getIn,\n      setIn = structure.setIn,\n      keys = structure.keys,\n      fromJS = structure.fromJS;\n  var isValid = createIsValid(structure);\n  return function (initialConfig) {\n    var config = _extends({\n      touchOnBlur: true,\n      touchOnChange: false,\n      persistentSubmitErrors: false,\n      destroyOnUnmount: true,\n      shouldAsyncValidate: defaultShouldAsyncValidate,\n      shouldValidate: defaultShouldValidate,\n      shouldError: defaultShouldError,\n      shouldWarn: defaultShouldWarn,\n      enableReinitialize: false,\n      keepDirtyOnReinitialize: false,\n      updateUnregisteredFields: false,\n      getFormState: function getFormState(state) {\n        return getIn(state, 'form');\n      },\n      pure: true,\n      forceUnregisterOnUnmount: false,\n      submitAsSideEffect: false\n    }, initialConfig);\n\n    return function (WrappedComponent) {\n      var Form =\n      /*#__PURE__*/\n      function (_React$Component) {\n        _inheritsLoose(Form, _React$Component);\n\n        function Form() {\n          var _this;\n\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n          _this.wrapped = React.createRef();\n          _this.destroyed = false;\n          _this.fieldCounts = {};\n          _this.fieldValidators = {};\n          _this.lastFieldValidatorKeys = [];\n          _this.fieldWarners = {};\n          _this.lastFieldWarnerKeys = [];\n          _this.innerOnSubmit = undefined;\n          _this.submitPromise = undefined;\n\n          _this.getValues = function () {\n            return _this.props.values;\n          };\n\n          _this.isValid = function () {\n            return _this.props.valid;\n          };\n\n          _this.isPristine = function () {\n            return _this.props.pristine;\n          };\n\n          _this.register = function (name, type, getValidator, getWarner) {\n            var lastCount = _this.fieldCounts[name];\n            var nextCount = (lastCount || 0) + 1;\n            _this.fieldCounts[name] = nextCount;\n\n            _this.props.registerField(name, type);\n\n            if (getValidator) {\n              _this.fieldValidators[name] = getValidator;\n            }\n\n            if (getWarner) {\n              _this.fieldWarners[name] = getWarner;\n            }\n          };\n\n          _this.unregister = function (name) {\n            var lastCount = _this.fieldCounts[name];\n            if (lastCount === 1) delete _this.fieldCounts[name];else if (lastCount != null) _this.fieldCounts[name] = lastCount - 1;\n\n            if (!_this.destroyed) {\n              var _this$props = _this.props,\n                  _destroyOnUnmount = _this$props.destroyOnUnmount,\n                  forceUnregisterOnUnmount = _this$props.forceUnregisterOnUnmount,\n                  unregisterField = _this$props.unregisterField;\n\n              if (_destroyOnUnmount || forceUnregisterOnUnmount) {\n                unregisterField(name, _destroyOnUnmount);\n\n                if (!_this.fieldCounts[name]) {\n                  delete _this.fieldValidators[name];\n                  delete _this.fieldWarners[name];\n                  _this.lastFieldValidatorKeys = _this.lastFieldValidatorKeys.filter(function (key) {\n                    return key !== name;\n                  });\n                }\n              } else {\n                unregisterField(name, false);\n              }\n            }\n          };\n\n          _this.getFieldList = function (options) {\n            var registeredFields = _this.props.registeredFields;\n            var list = [];\n\n            if (!registeredFields) {\n              return list;\n            }\n\n            var keySeq = keys(registeredFields);\n\n            if (options) {\n              if (options.excludeFieldArray) {\n                keySeq = keySeq.filter(function (name) {\n                  return getIn(registeredFields, \"['\" + name + \"'].type\") !== 'FieldArray';\n                });\n              }\n\n              if (options.excludeUnregistered) {\n                keySeq = keySeq.filter(function (name) {\n                  return getIn(registeredFields, \"['\" + name + \"'].count\") !== 0;\n                });\n              }\n            }\n\n            return fromJS(keySeq.reduce(function (acc, key) {\n              acc.push(key);\n              return acc;\n            }, list));\n          };\n\n          _this.getValidators = function () {\n            var validators = {};\n            Object.keys(_this.fieldValidators).forEach(function (name) {\n              var validator = _this.fieldValidators[name]();\n\n              if (validator) {\n                validators[name] = validator;\n              }\n            });\n            return validators;\n          };\n\n          _this.generateValidator = function () {\n            var validators = _this.getValidators();\n\n            return Object.keys(validators).length ? generateValidator(validators, structure) : undefined;\n          };\n\n          _this.getWarners = function () {\n            var warners = {};\n            Object.keys(_this.fieldWarners).forEach(function (name) {\n              var warner = _this.fieldWarners[name]();\n\n              if (warner) {\n                warners[name] = warner;\n              }\n            });\n            return warners;\n          };\n\n          _this.generateWarner = function () {\n            var warners = _this.getWarners();\n\n            return Object.keys(warners).length ? generateValidator(warners, structure) : undefined;\n          };\n\n          _this.asyncValidate = function (name, value, trigger) {\n            var _this$props2 = _this.props,\n                asyncBlurFields = _this$props2.asyncBlurFields,\n                asyncChangeFields = _this$props2.asyncChangeFields,\n                asyncErrors = _this$props2.asyncErrors,\n                asyncValidate = _this$props2.asyncValidate,\n                dispatch = _this$props2.dispatch,\n                initialized = _this$props2.initialized,\n                pristine = _this$props2.pristine,\n                shouldAsyncValidate = _this$props2.shouldAsyncValidate,\n                startAsyncValidation = _this$props2.startAsyncValidation,\n                stopAsyncValidation = _this$props2.stopAsyncValidation,\n                syncErrors = _this$props2.syncErrors,\n                values = _this$props2.values;\n            var submitting = !name;\n\n            var fieldNeedsValidation = function fieldNeedsValidation() {\n              var fieldNeedsValidationForBlur = asyncBlurFields && name && ~asyncBlurFields.indexOf(name.replace(/\\[[0-9]+\\]/g, '[]'));\n              var fieldNeedsValidationForChange = asyncChangeFields && name && ~asyncChangeFields.indexOf(name.replace(/\\[[0-9]+\\]/g, '[]'));\n              var asyncValidateByDefault = !(asyncBlurFields || asyncChangeFields);\n              return submitting || asyncValidateByDefault || (trigger === 'blur' ? fieldNeedsValidationForBlur : fieldNeedsValidationForChange);\n            };\n\n            if (asyncValidate) {\n              var valuesToValidate = submitting ? values : setIn(values, name, value);\n              var syncValidationPasses = submitting || !getIn(syncErrors, name);\n\n              if (fieldNeedsValidation() && shouldAsyncValidate({\n                asyncErrors: asyncErrors,\n                initialized: initialized,\n                trigger: submitting ? 'submit' : trigger,\n                blurredField: name,\n                pristine: pristine,\n                syncValidationPasses: syncValidationPasses\n              })) {\n                return asyncValidation(function () {\n                  return asyncValidate(valuesToValidate, dispatch, _this.props, name);\n                }, startAsyncValidation, stopAsyncValidation, name);\n              }\n            }\n          };\n\n          _this.submitCompleted = function (result) {\n            delete _this.submitPromise;\n            return result;\n          };\n\n          _this.submitFailed = function (error) {\n            delete _this.submitPromise;\n            throw error;\n          };\n\n          _this.listenToSubmit = function (promise) {\n            if (!isPromise(promise)) {\n              return promise;\n            }\n\n            _this.submitPromise = promise;\n            return promise.then(_this.submitCompleted, _this.submitFailed);\n          };\n\n          _this.submit = function (submitOrEvent) {\n            var _this$props3 = _this.props,\n                onSubmit = _this$props3.onSubmit,\n                blur = _this$props3.blur,\n                change = _this$props3.change,\n                dispatch = _this$props3.dispatch;\n\n            if (!submitOrEvent || silenceEvent(submitOrEvent)) {\n              // submitOrEvent is an event: fire submit if not already submitting\n              if (!_this.submitPromise) {\n                // avoid recursive stack trace if use Form with onSubmit as handleSubmit\n                if (_this.innerOnSubmit && _this.innerOnSubmit !== _this.submit) {\n                  // will call \"submitOrEvent is the submit function\" block below\n                  return _this.innerOnSubmit();\n                } else {\n                  return _this.listenToSubmit(handleSubmit(checkSubmit(onSubmit), _extends({}, _this.props, bindActionCreators({\n                    blur: blur,\n                    change: change\n                  }, dispatch)), _this.props.validExceptSubmit, _this.asyncValidate, _this.getFieldList({\n                    excludeFieldArray: true,\n                    excludeUnregistered: true\n                  })));\n                }\n              }\n            } else {\n              // submitOrEvent is the submit function: return deferred submit thunk\n              return silenceEvents(function () {\n                return !_this.submitPromise && _this.listenToSubmit(handleSubmit(checkSubmit(submitOrEvent), _extends({}, _this.props, bindActionCreators({\n                  blur: blur,\n                  change: change\n                }, dispatch)), _this.props.validExceptSubmit, _this.asyncValidate, _this.getFieldList({\n                  excludeFieldArray: true,\n                  excludeUnregistered: true\n                })));\n              });\n            }\n          };\n\n          _this.reset = function () {\n            return _this.props.reset();\n          };\n\n          return _this;\n        }\n\n        var _proto = Form.prototype;\n\n        _proto.initIfNeeded = function initIfNeeded(nextProps) {\n          var enableReinitialize = this.props.enableReinitialize;\n\n          if (nextProps) {\n            if ((enableReinitialize || !nextProps.initialized) && !deepEqual(this.props.initialValues, nextProps.initialValues)) {\n              var _keepDirty = nextProps.initialized && this.props.keepDirtyOnReinitialize;\n\n              this.props.initialize(nextProps.initialValues, _keepDirty, {\n                keepValues: nextProps.keepValues,\n                lastInitialValues: this.props.initialValues,\n                updateUnregisteredFields: nextProps.updateUnregisteredFields\n              });\n            }\n          } else if (this.props.initialValues && (!this.props.initialized || enableReinitialize)) {\n            this.props.initialize(this.props.initialValues, this.props.keepDirtyOnReinitialize, {\n              keepValues: this.props.keepValues,\n              updateUnregisteredFields: this.props.updateUnregisteredFields\n            });\n          }\n        };\n\n        _proto.updateSyncErrorsIfNeeded = function updateSyncErrorsIfNeeded(nextSyncErrors, nextError, lastSyncErrors) {\n          var _this$props4 = this.props,\n              error = _this$props4.error,\n              updateSyncErrors = _this$props4.updateSyncErrors;\n          var noErrors = (!lastSyncErrors || !Object.keys(lastSyncErrors).length) && !error;\n          var nextNoErrors = (!nextSyncErrors || !Object.keys(nextSyncErrors).length) && !nextError;\n\n          if (!(noErrors && nextNoErrors) && (!plain.deepEqual(lastSyncErrors, nextSyncErrors) || !plain.deepEqual(error, nextError))) {\n            updateSyncErrors(nextSyncErrors, nextError);\n          }\n        };\n\n        _proto.clearSubmitPromiseIfNeeded = function clearSubmitPromiseIfNeeded(nextProps) {\n          var submitting = this.props.submitting;\n\n          if (this.submitPromise && submitting && !nextProps.submitting) {\n            delete this.submitPromise;\n          }\n        };\n\n        _proto.submitIfNeeded = function submitIfNeeded(nextProps) {\n          var _this$props5 = this.props,\n              clearSubmit = _this$props5.clearSubmit,\n              triggerSubmit = _this$props5.triggerSubmit;\n\n          if (!triggerSubmit && nextProps.triggerSubmit) {\n            clearSubmit();\n            this.submit();\n          }\n        };\n\n        _proto.shouldErrorFunction = function shouldErrorFunction() {\n          var _this$props6 = this.props,\n              shouldValidate = _this$props6.shouldValidate,\n              shouldError = _this$props6.shouldError;\n          var shouldValidateOverridden = shouldValidate !== defaultShouldValidate;\n          var shouldErrorOverridden = shouldError !== defaultShouldError;\n          return shouldValidateOverridden && !shouldErrorOverridden ? shouldValidate : shouldError;\n        };\n\n        _proto.validateIfNeeded = function validateIfNeeded(nextProps) {\n          var _this$props7 = this.props,\n              validate = _this$props7.validate,\n              values = _this$props7.values;\n          var shouldError = this.shouldErrorFunction();\n          var fieldLevelValidate = this.generateValidator();\n\n          if (validate || fieldLevelValidate) {\n            var initialRender = nextProps === undefined;\n            var fieldValidatorKeys = Object.keys(this.getValidators());\n            var validateParams = {\n              values: values,\n              nextProps: nextProps,\n              props: this.props,\n              initialRender: initialRender,\n              lastFieldValidatorKeys: this.lastFieldValidatorKeys,\n              fieldValidatorKeys: fieldValidatorKeys,\n              structure: structure\n            };\n\n            if (shouldError(validateParams)) {\n              var propsToValidate = initialRender || !nextProps ? this.props : nextProps;\n\n              var _merge2 = _merge(validate ? validate(propsToValidate.values, propsToValidate) || {} : {}, fieldLevelValidate ? fieldLevelValidate(propsToValidate.values, propsToValidate) || {} : {}),\n                  _error = _merge2._error,\n                  nextSyncErrors = _objectWithoutPropertiesLoose(_merge2, [\"_error\"]);\n\n              this.lastFieldValidatorKeys = fieldValidatorKeys;\n              this.updateSyncErrorsIfNeeded(nextSyncErrors, _error, propsToValidate.syncErrors);\n            }\n          } else {\n            this.lastFieldValidatorKeys = [];\n          }\n        };\n\n        _proto.updateSyncWarningsIfNeeded = function updateSyncWarningsIfNeeded(nextSyncWarnings, nextWarning, lastSyncWarnings) {\n          var _this$props8 = this.props,\n              warning = _this$props8.warning,\n              syncWarnings = _this$props8.syncWarnings,\n              updateSyncWarnings = _this$props8.updateSyncWarnings;\n          var noWarnings = (!syncWarnings || !Object.keys(syncWarnings).length) && !warning;\n          var nextNoWarnings = (!nextSyncWarnings || !Object.keys(nextSyncWarnings).length) && !nextWarning;\n\n          if (!(noWarnings && nextNoWarnings) && (!plain.deepEqual(lastSyncWarnings, nextSyncWarnings) || !plain.deepEqual(warning, nextWarning))) {\n            updateSyncWarnings(nextSyncWarnings, nextWarning);\n          }\n        };\n\n        _proto.shouldWarnFunction = function shouldWarnFunction() {\n          var _this$props9 = this.props,\n              shouldValidate = _this$props9.shouldValidate,\n              shouldWarn = _this$props9.shouldWarn;\n          var shouldValidateOverridden = shouldValidate !== defaultShouldValidate;\n          var shouldWarnOverridden = shouldWarn !== defaultShouldWarn;\n          return shouldValidateOverridden && !shouldWarnOverridden ? shouldValidate : shouldWarn;\n        };\n\n        _proto.warnIfNeeded = function warnIfNeeded(nextProps) {\n          var _this$props10 = this.props,\n              warn = _this$props10.warn,\n              values = _this$props10.values;\n          var shouldWarn = this.shouldWarnFunction();\n          var fieldLevelWarn = this.generateWarner();\n\n          if (warn || fieldLevelWarn) {\n            var initialRender = nextProps === undefined;\n            var fieldWarnerKeys = Object.keys(this.getWarners());\n            var validateParams = {\n              values: values,\n              nextProps: nextProps,\n              props: this.props,\n              initialRender: initialRender,\n              lastFieldValidatorKeys: this.lastFieldWarnerKeys,\n              fieldValidatorKeys: fieldWarnerKeys,\n              structure: structure\n            };\n\n            if (shouldWarn(validateParams)) {\n              var propsToWarn = initialRender || !nextProps ? this.props : nextProps;\n\n              var _merge3 = _merge(warn ? warn(propsToWarn.values, propsToWarn) : {}, fieldLevelWarn ? fieldLevelWarn(propsToWarn.values, propsToWarn) : {}),\n                  _warning = _merge3._warning,\n                  nextSyncWarnings = _objectWithoutPropertiesLoose(_merge3, [\"_warning\"]);\n\n              this.lastFieldWarnerKeys = fieldWarnerKeys;\n              this.updateSyncWarningsIfNeeded(nextSyncWarnings, _warning, propsToWarn.syncWarnings);\n            }\n          }\n        };\n\n        _proto.componentWillMount = function componentWillMount() {\n          if (!isHotReloading()) {\n            this.initIfNeeded();\n            this.validateIfNeeded();\n            this.warnIfNeeded();\n          }\n\n          invariant(this.props.shouldValidate, 'shouldValidate() is deprecated and will be removed in v9.0.0. Use shouldWarn() or shouldError() instead.');\n        };\n\n        _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n          this.initIfNeeded(nextProps);\n          this.validateIfNeeded(nextProps);\n          this.warnIfNeeded(nextProps);\n          this.clearSubmitPromiseIfNeeded(nextProps);\n          this.submitIfNeeded(nextProps);\n          var onChange = nextProps.onChange,\n              values = nextProps.values,\n              dispatch = nextProps.dispatch;\n\n          if (onChange && !deepEqual(values, this.props.values)) {\n            onChange(values, dispatch, nextProps, this.props.values);\n          }\n        };\n\n        _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n          var _this2 = this;\n\n          if (!this.props.pure) return true;\n          var _config$immutableProp = config.immutableProps,\n              immutableProps = _config$immutableProp === void 0 ? [] : _config$immutableProp; // if we have children, we MUST update in React 16\n          // https://twitter.com/erikras/status/915866544558788608\n\n          return !!(this.props.children || nextProps.children || Object.keys(nextProps).some(function (prop) {\n            // useful to debug rerenders\n            // if (!plain.deepEqual(this.props[ prop ], nextProps[ prop ])) {\n            //   console.info(prop, 'changed', this.props[ prop ], '==>', nextProps[ prop ])\n            // }\n            if (~immutableProps.indexOf(prop)) {\n              return _this2.props[prop] !== nextProps[prop];\n            }\n\n            return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this2.props[prop], nextProps[prop]);\n          }));\n        };\n\n        _proto.componentDidMount = function componentDidMount() {\n          if (!isHotReloading()) {\n            this.initIfNeeded(this.props);\n            this.validateIfNeeded();\n            this.warnIfNeeded();\n          }\n\n          invariant(this.props.shouldValidate, 'shouldValidate() is deprecated and will be removed in v9.0.0. Use shouldWarn() or shouldError() instead.');\n        };\n\n        _proto.componentWillUnmount = function componentWillUnmount() {\n          var _this$props11 = this.props,\n              destroyOnUnmount = _this$props11.destroyOnUnmount,\n              destroy = _this$props11.destroy;\n\n          if (destroyOnUnmount && !isHotReloading()) {\n            this.destroyed = true;\n            destroy();\n          }\n        };\n\n        _proto.render = function render() {\n          var _ref,\n              _this3 = this;\n\n          // remove some redux-form config-only props\n\n          /* eslint-disable no-unused-vars */\n          var _this$props12 = this.props,\n              anyTouched = _this$props12.anyTouched,\n              array = _this$props12.array,\n              arrayInsert = _this$props12.arrayInsert,\n              arrayMove = _this$props12.arrayMove,\n              arrayPop = _this$props12.arrayPop,\n              arrayPush = _this$props12.arrayPush,\n              arrayRemove = _this$props12.arrayRemove,\n              arrayRemoveAll = _this$props12.arrayRemoveAll,\n              arrayShift = _this$props12.arrayShift,\n              arraySplice = _this$props12.arraySplice,\n              arraySwap = _this$props12.arraySwap,\n              arrayUnshift = _this$props12.arrayUnshift,\n              asyncErrors = _this$props12.asyncErrors,\n              asyncValidate = _this$props12.asyncValidate,\n              asyncValidating = _this$props12.asyncValidating,\n              blur = _this$props12.blur,\n              change = _this$props12.change,\n              clearSubmit = _this$props12.clearSubmit,\n              destroy = _this$props12.destroy,\n              destroyOnUnmount = _this$props12.destroyOnUnmount,\n              forceUnregisterOnUnmount = _this$props12.forceUnregisterOnUnmount,\n              dirty = _this$props12.dirty,\n              dispatch = _this$props12.dispatch,\n              enableReinitialize = _this$props12.enableReinitialize,\n              error = _this$props12.error,\n              focus = _this$props12.focus,\n              form = _this$props12.form,\n              getFormState = _this$props12.getFormState,\n              immutableProps = _this$props12.immutableProps,\n              initialize = _this$props12.initialize,\n              initialized = _this$props12.initialized,\n              initialValues = _this$props12.initialValues,\n              invalid = _this$props12.invalid,\n              keepDirtyOnReinitialize = _this$props12.keepDirtyOnReinitialize,\n              keepValues = _this$props12.keepValues,\n              updateUnregisteredFields = _this$props12.updateUnregisteredFields,\n              pristine = _this$props12.pristine,\n              propNamespace = _this$props12.propNamespace,\n              registeredFields = _this$props12.registeredFields,\n              registerField = _this$props12.registerField,\n              reset = _this$props12.reset,\n              resetSection = _this$props12.resetSection,\n              setSubmitFailed = _this$props12.setSubmitFailed,\n              setSubmitSucceeded = _this$props12.setSubmitSucceeded,\n              shouldAsyncValidate = _this$props12.shouldAsyncValidate,\n              shouldValidate = _this$props12.shouldValidate,\n              shouldError = _this$props12.shouldError,\n              shouldWarn = _this$props12.shouldWarn,\n              startAsyncValidation = _this$props12.startAsyncValidation,\n              startSubmit = _this$props12.startSubmit,\n              stopAsyncValidation = _this$props12.stopAsyncValidation,\n              stopSubmit = _this$props12.stopSubmit,\n              submitAsSideEffect = _this$props12.submitAsSideEffect,\n              submitting = _this$props12.submitting,\n              submitFailed = _this$props12.submitFailed,\n              submitSucceeded = _this$props12.submitSucceeded,\n              touch = _this$props12.touch,\n              touchOnBlur = _this$props12.touchOnBlur,\n              touchOnChange = _this$props12.touchOnChange,\n              persistentSubmitErrors = _this$props12.persistentSubmitErrors,\n              syncErrors = _this$props12.syncErrors,\n              syncWarnings = _this$props12.syncWarnings,\n              unregisterField = _this$props12.unregisterField,\n              untouch = _this$props12.untouch,\n              updateSyncErrors = _this$props12.updateSyncErrors,\n              updateSyncWarnings = _this$props12.updateSyncWarnings,\n              valid = _this$props12.valid,\n              validExceptSubmit = _this$props12.validExceptSubmit,\n              values = _this$props12.values,\n              warning = _this$props12.warning,\n              rest = _objectWithoutPropertiesLoose(_this$props12, [\"anyTouched\", \"array\", \"arrayInsert\", \"arrayMove\", \"arrayPop\", \"arrayPush\", \"arrayRemove\", \"arrayRemoveAll\", \"arrayShift\", \"arraySplice\", \"arraySwap\", \"arrayUnshift\", \"asyncErrors\", \"asyncValidate\", \"asyncValidating\", \"blur\", \"change\", \"clearSubmit\", \"destroy\", \"destroyOnUnmount\", \"forceUnregisterOnUnmount\", \"dirty\", \"dispatch\", \"enableReinitialize\", \"error\", \"focus\", \"form\", \"getFormState\", \"immutableProps\", \"initialize\", \"initialized\", \"initialValues\", \"invalid\", \"keepDirtyOnReinitialize\", \"keepValues\", \"updateUnregisteredFields\", \"pristine\", \"propNamespace\", \"registeredFields\", \"registerField\", \"reset\", \"resetSection\", \"setSubmitFailed\", \"setSubmitSucceeded\", \"shouldAsyncValidate\", \"shouldValidate\", \"shouldError\", \"shouldWarn\", \"startAsyncValidation\", \"startSubmit\", \"stopAsyncValidation\", \"stopSubmit\", \"submitAsSideEffect\", \"submitting\", \"submitFailed\", \"submitSucceeded\", \"touch\", \"touchOnBlur\", \"touchOnChange\", \"persistentSubmitErrors\", \"syncErrors\", \"syncWarnings\", \"unregisterField\", \"untouch\", \"updateSyncErrors\", \"updateSyncWarnings\", \"valid\", \"validExceptSubmit\", \"values\", \"warning\"]);\n          /* eslint-enable no-unused-vars */\n\n\n          var reduxFormProps = _extends({\n            array: array,\n            anyTouched: anyTouched,\n            asyncValidate: this.asyncValidate,\n            asyncValidating: asyncValidating\n          }, bindActionCreators({\n            blur: blur,\n            change: change\n          }, dispatch), {\n            clearSubmit: clearSubmit,\n            destroy: destroy,\n            dirty: dirty,\n            dispatch: dispatch,\n            error: error,\n            form: form,\n            handleSubmit: this.submit,\n            initialize: initialize,\n            initialized: initialized,\n            initialValues: initialValues,\n            invalid: invalid,\n            pristine: pristine,\n            reset: reset,\n            resetSection: resetSection,\n            submitting: submitting,\n            submitAsSideEffect: submitAsSideEffect,\n            submitFailed: submitFailed,\n            submitSucceeded: submitSucceeded,\n            touch: touch,\n            untouch: untouch,\n            valid: valid,\n            warning: warning\n          });\n\n          var propsToPass = _extends({}, propNamespace ? (_ref = {}, _ref[propNamespace] = reduxFormProps, _ref) : reduxFormProps, rest);\n\n          if (isClassComponent(WrappedComponent)) {\n            ;\n            propsToPass.ref = this.wrapped;\n          }\n\n          var _reduxForm = _extends({}, this.props, {\n            getFormState: function getFormState(state) {\n              return getIn(_this3.props.getFormState(state), _this3.props.form);\n            },\n            asyncValidate: this.asyncValidate,\n            getValues: this.getValues,\n            sectionPrefix: undefined,\n            register: this.register,\n            unregister: this.unregister,\n            registerInnerOnSubmit: function registerInnerOnSubmit(innerOnSubmit) {\n              return _this3.innerOnSubmit = innerOnSubmit;\n            }\n          });\n\n          return createElement(ReduxFormContext.Provider, {\n            value: _reduxForm,\n            children: createElement(WrappedComponent, propsToPass)\n          });\n        };\n\n        return Form;\n      }(React.Component);\n\n      Form.displayName = \"Form(\" + getDisplayName(WrappedComponent) + \")\";\n      Form.WrappedComponent = WrappedComponent;\n      Form.propTypes = {\n        destroyOnUnmount: PropTypes.bool,\n        forceUnregisterOnUnmount: PropTypes.bool,\n        form: PropTypes.string.isRequired,\n        immutableProps: PropTypes.arrayOf(PropTypes.string),\n        initialValues: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n        getFormState: PropTypes.func,\n        onSubmitFail: PropTypes.func,\n        onSubmitSuccess: PropTypes.func,\n        propNamespace: PropTypes.string,\n        validate: PropTypes.func,\n        warn: PropTypes.func,\n        touchOnBlur: PropTypes.bool,\n        touchOnChange: PropTypes.bool,\n        triggerSubmit: PropTypes.bool,\n        persistentSubmitErrors: PropTypes.bool,\n        registeredFields: PropTypes.any\n      };\n      var connector = connect(function (state, props) {\n        var form = props.form,\n            getFormState = props.getFormState,\n            initialValues = props.initialValues,\n            enableReinitialize = props.enableReinitialize,\n            keepDirtyOnReinitialize = props.keepDirtyOnReinitialize;\n        var formState = getIn(getFormState(state) || empty, form) || empty;\n        var stateInitial = getIn(formState, 'initial');\n        var initialized = !!stateInitial;\n        var shouldUpdateInitialValues = enableReinitialize && initialized && !deepEqual(initialValues, stateInitial);\n        var shouldResetValues = shouldUpdateInitialValues && !keepDirtyOnReinitialize;\n        var initial = initialValues || stateInitial || empty;\n\n        if (!shouldUpdateInitialValues) {\n          initial = stateInitial || empty;\n        }\n\n        var values = getIn(formState, 'values') || initial;\n\n        if (shouldResetValues) {\n          values = initial;\n        }\n\n        var pristine = shouldResetValues || deepEqual(initial, values);\n        var asyncErrors = getIn(formState, 'asyncErrors');\n        var syncErrors = getIn(formState, 'syncErrors') || plain.empty;\n        var syncWarnings = getIn(formState, 'syncWarnings') || plain.empty;\n        var registeredFields = getIn(formState, 'registeredFields');\n        var valid = isValid(form, getFormState, false)(state);\n        var validExceptSubmit = isValid(form, getFormState, true)(state);\n        var anyTouched = !!getIn(formState, 'anyTouched');\n        var submitting = !!getIn(formState, 'submitting');\n        var submitFailed = !!getIn(formState, 'submitFailed');\n        var submitSucceeded = !!getIn(formState, 'submitSucceeded');\n        var error = getIn(formState, 'error');\n        var warning = getIn(formState, 'warning');\n        var triggerSubmit = getIn(formState, 'triggerSubmit');\n        return {\n          anyTouched: anyTouched,\n          asyncErrors: asyncErrors,\n          asyncValidating: getIn(formState, 'asyncValidating') || false,\n          dirty: !pristine,\n          error: error,\n          initialized: initialized,\n          invalid: !valid,\n          pristine: pristine,\n          registeredFields: registeredFields,\n          submitting: submitting,\n          submitFailed: submitFailed,\n          submitSucceeded: submitSucceeded,\n          syncErrors: syncErrors,\n          syncWarnings: syncWarnings,\n          triggerSubmit: triggerSubmit,\n          values: values,\n          valid: valid,\n          validExceptSubmit: validExceptSubmit,\n          warning: warning\n        };\n      }, function (dispatch, initialProps) {\n        var bindForm = function bindForm(actionCreator) {\n          return actionCreator.bind(null, initialProps.form);\n        }; // Bind the first parameter on `props.form`\n\n\n        var boundFormACs = _mapValues(formActions, bindForm);\n\n        var boundArrayACs = _mapValues(arrayActions, bindForm);\n\n        var boundBlur = function boundBlur(field, value) {\n          return blur(initialProps.form, field, value, !!initialProps.touchOnBlur);\n        };\n\n        var boundChange = function boundChange(field, value) {\n          return change(initialProps.form, field, value, !!initialProps.touchOnChange, !!initialProps.persistentSubmitErrors);\n        };\n\n        var boundFocus = bindForm(focus); // Wrap action creators with `dispatch`\n\n        var connectedFormACs = bindActionCreators(boundFormACs, dispatch);\n        var connectedArrayACs = {\n          insert: bindActionCreators(boundArrayACs.arrayInsert, dispatch),\n          move: bindActionCreators(boundArrayACs.arrayMove, dispatch),\n          pop: bindActionCreators(boundArrayACs.arrayPop, dispatch),\n          push: bindActionCreators(boundArrayACs.arrayPush, dispatch),\n          remove: bindActionCreators(boundArrayACs.arrayRemove, dispatch),\n          removeAll: bindActionCreators(boundArrayACs.arrayRemoveAll, dispatch),\n          shift: bindActionCreators(boundArrayACs.arrayShift, dispatch),\n          splice: bindActionCreators(boundArrayACs.arraySplice, dispatch),\n          swap: bindActionCreators(boundArrayACs.arraySwap, dispatch),\n          unshift: bindActionCreators(boundArrayACs.arrayUnshift, dispatch)\n        };\n\n        var computedActions = _extends({}, connectedFormACs, boundArrayACs, {\n          blur: boundBlur,\n          change: boundChange,\n          array: connectedArrayACs,\n          focus: boundFocus,\n          dispatch: dispatch\n        });\n\n        return function () {\n          return computedActions;\n        };\n      }, undefined, {\n        forwardRef: true\n      });\n      var ConnectedForm = hoistStatics(connector(Form), WrappedComponent);\n      ConnectedForm.defaultProps = config; // build outer component to expose instance api\n\n      var ReduxForm =\n      /*#__PURE__*/\n      function (_React$Component2) {\n        _inheritsLoose(ReduxForm, _React$Component2);\n\n        function ReduxForm() {\n          var _this4;\n\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n\n          _this4 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;\n          _this4.ref = React.createRef();\n          return _this4;\n        }\n\n        var _proto2 = ReduxForm.prototype;\n\n        _proto2.submit = function submit() {\n          return this.ref.current && this.ref.current.submit();\n        };\n\n        _proto2.reset = function reset() {\n          if (this.ref) {\n            this.ref.current.reset();\n          }\n        };\n\n        _proto2.render = function render() {\n          var _this$props13 = this.props,\n              initialValues = _this$props13.initialValues,\n              rest = _objectWithoutPropertiesLoose(_this$props13, [\"initialValues\"]);\n\n          return createElement(ConnectedForm, _extends({}, rest, {\n            ref: this.ref,\n            // convert initialValues if need to\n            initialValues: fromJS(initialValues)\n          }));\n        };\n\n        _createClass(ReduxForm, [{\n          key: \"valid\",\n          get: function get() {\n            return !!(this.ref.current && this.ref.current.isValid());\n          }\n        }, {\n          key: \"invalid\",\n          get: function get() {\n            return !this.valid;\n          }\n        }, {\n          key: \"pristine\",\n          get: function get() {\n            return !!(this.ref.current && this.ref.current.isPristine());\n          }\n        }, {\n          key: \"dirty\",\n          get: function get() {\n            return !this.pristine;\n          }\n        }, {\n          key: \"values\",\n          get: function get() {\n            return this.ref.current ? this.ref.current.getValues() : empty;\n          }\n        }, {\n          key: \"fieldList\",\n          get: function get() {\n            // mainly provided for testing\n            return this.ref.current ? this.ref.current.getFieldList() : [];\n          }\n        }, {\n          key: \"wrappedInstance\",\n          get: function get() {\n            // for testing\n            return this.ref.current && this.ref.current.wrapped.current;\n          }\n        }]);\n\n        return ReduxForm;\n      }(React.Component);\n\n      polyfill(ReduxForm);\n      var WithContext = hoistStatics(withReduxForm(ReduxForm), WrappedComponent);\n      WithContext.defaultProps = config;\n      return WithContext;\n    };\n  };\n};\n\nexport default createReduxForm;","import createReduxForm from './createReduxForm';\nimport plain from './structure/plain';\nexport default createReduxForm(plain);","import * as React from 'react';\nimport {\n    Typography,\n    withStyles,\n    Theme\n} from '@material-ui/core';\nimport {\n    compose,\n} from 'redux';\nimport {\n    IMap,\n  } from 'ats-utils/src/Interfaces';\nimport {\n    Image,\n} from '../../components';\n\ninterface INoImagePlaceholderComponentProps {\n  contacts?: IMap<any>;\n  rowIndex?: number;\n}\n\ninterface INoImagePlaceholderProps extends INoImagePlaceholderComponentProps {\n    classes: any;\n}\n\nconst styles = (theme: Theme) => ({\n    circle: {\n        width: '40px',\n        height: '40px',\n        borderRadius: '50%',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        background: theme.palette.primary[700]\n    },\n    textStyle: {\n        color: 'white',\n        lineHeight: 1\n    }\n});\n\nconst NoImagePlaceholder: React.SFC< INoImagePlaceholderProps > = (props: any) => {\n    const {\n        classes,\n        contacts,\n        rowIndex\n    } = props;\n    const contactsValueSeq = contacts.valueSeq();\n\n    const firstName = contactsValueSeq.getIn([rowIndex, 'firstName']) || '';\n    const lastName = contactsValueSeq.getIn([rowIndex, 'lastName'], '') || '';\n    const organization = contactsValueSeq.getIn([rowIndex, 'organization'], '') || '';\n    const imageId = contactsValueSeq.getIn([rowIndex, 'imageId']) || '';\n    const imgSize = 40;\n\n    return (\n        !imageId\n        ?\n        <div className={classes.circle}>\n            {\n              firstName && lastName\n                ? <Typography className={classes.textStyle}>\n                    {firstName.charAt(0).toUpperCase()}\n                    {lastName.charAt(0).toUpperCase()}\n                  </Typography>\n                : <Typography className={classes.textStyle}>\n                    {organization.charAt(0).toUpperCase()}\n                  </Typography>\n            }\n        </div>\n        :\n        <div className={classes.circle}>\n            <Image\n                src={imageId}\n                width={`${imgSize}px`}\n                aspectRatio={'100%'}\n                fromService={true}\n                backgroundStyle={{borderRadius: '50%', backgroundSize: 'cover'}}\n            />\n        </div>\n    );\n};\n\nexport default compose<React.ComponentClass<INoImagePlaceholderComponentProps>>(\n    withStyles(styles),\n)(NoImagePlaceholder);\n","import * as React from 'react';\nimport {\n  withStyles,\n  Theme,\n  IconButton\n} from '@material-ui/core';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DeleteContactsByIdAction,\n  DeleteContactAction\n} from '../../modules/AccountModule/actions';\nimport classnames from 'classnames';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\ninterface IDeleteButtonComponentProps {\n}\n\ninterface IDeleteButtonProps extends IDeleteButtonComponentProps {\n  deleteContact: () => void;\n  deleteContactRedux: () => void;\n  classes: any;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n      display: 'none'\n  },\n});\n\nconst DeleteButton: React.SFC<IDeleteButtonProps> = (props: any) => {\n  const {\n    classes,\n    rowIndex,\n    tableState,\n    deleteContact,\n    deleteContactRedux,\n    rowData\n  } = props;\n\n  return (\n    <IconButton\n      onClick={(e) => {\n        e.stopPropagation();\n        deleteContact(rowData.get('id'));\n        deleteContactRedux(rowData.get('id'));\n      }}\n      className={classnames({\n        [classes.root]: tableState.tableHoverIndex !== rowIndex\n      })}\n      >\n      <DeleteIcon />\n    </IconButton>\n  );\n};\n\nconst mapStateToProps = () => ({\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    deleteContact: (id: number) => dispatch(new DeleteContactsByIdAction({ contactId: id })),\n    deleteContactRedux: (id: number) => dispatch(new DeleteContactAction(id)),\n  };\n};\n\nexport default compose<React.ComponentClass<{}>>(\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps),\n)(DeleteButton);\n","import * as React from 'react';\nimport {\n  withStyles,\n  Theme,\n  IconButton\n} from '@material-ui/core';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ToggleOverlayComponentAction,\n  SetOverlayComponentContentAction\n} from '../../modules/ApplicationModule/actions';\nimport classnames from 'classnames';\nimport { DRAWER_ID } from '../../containers/MyContactsPage/constants';\nimport { CONTENT_EDIT_KEY } from '../../components/UserContactDrawerDetails';\nimport { SelectContactAction } from '../../modules/AccountModule/actions';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\n\ninterface IEditButtonComponentProps {\n}\n\ninterface IEditButtonProps extends IEditButtonComponentProps {\n  setSelectedContact: () => void;\n  toggleOverlayComponent: () => void;\n  setOverlayComponentContent: () => void;\n  classes: any;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    display: 'none'\n  },\n});\n\nconst EditButton: React.SFC<IEditButtonProps> = (props: any) => {\n  const {\n    setSelectedContact,\n    setOverlayComponentContent,\n    toggleOverlayComponent,\n    rowData,\n    classes,\n    rowIndex,\n    tableState\n  } = props;\n\n  return (\n    <IconButton\n      onClick={(e) => {\n        e.stopPropagation();\n        setSelectedContact(rowData.get('id'));\n        setOverlayComponentContent();\n        toggleOverlayComponent();\n      }}\n      className={classnames({\n        [classes.root]: tableState.tableHoverIndex !== rowIndex\n      })}\n      >\n      <EditRoundedIcon />\n    </IconButton>\n  );\n};\n\nconst mapStateToProps = () => ({\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n    return {\n        setSelectedContact: (contactId: number) => dispatch(new SelectContactAction(contactId)),\n        toggleOverlayComponent: () => dispatch(new ToggleOverlayComponentAction({ open: true, id: DRAWER_ID })),\n        setOverlayComponentContent: () => dispatch(new SetOverlayComponentContentAction({ content: CONTENT_EDIT_KEY, id: DRAWER_ID})),\n    };\n};\n\nexport default compose<React.ComponentClass<IEditButtonComponentProps>>(\n    withStyles(styles),\n    connect(mapStateToProps, mapDispatchToProps),\n)(EditButton);\n","import * as React from 'react';\nimport {\n    Typography,\n    Theme\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\n\ninterface IFullNameComponentProps {\n}\n\ninterface IFullNameProps extends IFullNameComponentProps {\n}\n\ntype FullNameProps = IFullNameProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => ({\n    textStyle: {\n        overflow: 'hidden',\n        textOverflow: 'ellipsis',\n    },\n});\n\nconst FullName: React.SFC< FullNameProps > = (props: any) => {\n    const {\n        classes,\n        contacts,\n        rowIndex\n    } = props;\n    const contactsValueSeq = contacts.valueSeq();\n    return (\n        <Typography\n            className={classes.textStyle}\n            style={{whiteSpace: 'nowrap'}} /* inline to fix problem with @types typing */\n        >\n            {(contactsValueSeq.getIn([rowIndex, 'firstName']) || '' )} {(contactsValueSeq.getIn([rowIndex, 'lastName']) || '')}\n        </Typography>\n    );\n};\n\nexport default withStyles(styles)(FullName);\n","import * as React from 'react';\nimport {\n  // Typography,\n  Theme,\n  createStyles\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport FieldCheckbox from '../FieldCheckbox';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  Map,\n} from 'immutable';\nimport { WrappedFieldProps, InjectedFormProps } from 'redux-form';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport { isFunction } from 'lodash';\n\ntype nameFunction = (rowData: Map<string, any>) => string;\ninterface ICollaboratorsCheckboxComponentProps extends WrappedFieldProps {\n  disabled: boolean;\n  rowData: Map<string, any>;\n  checkedValue?: any;\n  label?: string;\n  name?: string | nameFunction;\n}\n\ninterface ICollaboratorsCheckboxProps extends ICollaboratorsCheckboxComponentProps {\n}\n\ntype CollaboratorsCheckboxProps = ICollaboratorsCheckboxProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme) => createStyles({\n  checkbox: {\n    padding: 0,\n  },\n  checkboxFormControl: {\n    margin: 0,\n    flexDirection: 'row'\n  },\n  labelroot: {\n    margin: 0\n  }\n});\n\ninterface IFieldProps {\n  [key: string]: any;\n}\n\nconst CollaboratorsCheckbox: React.SFC<CollaboratorsCheckboxProps> = (props) => {\n  const {\n    classes,\n\n    disabled,\n    rowData,\n    label,\n    checkedValue,\n    name: _name,\n\n  } = props;\n\n  const TypedField = Field as new () => Field<IFieldProps>;\n\n  const name = _name == null\n    ? `${rowData.get('id')}`\n    : isFunction(_name)\n      ? _name(rowData)\n      : _name;\n\n  return (\n    <TypedField\n      name={name}\n      component={FieldCheckbox}\n      checkedValue={checkedValue || label}\n      formControlProps={{\n        classes: { root: classes.checkboxFormControl }\n      }}\n      formControlLabelProps={{\n        classes: { root: classes.labelroot }\n      }}\n      inputProps={{\n        classes: { root: classes.checkbox },\n        color: 'primary',\n        onClick: (e) => e.stopPropagation(),\n        disabled\n      }}\n    />\n  );\n};\n\nconst mapStateToProps = (state: any, props: any) => ({\n});\n\nconst mapDispatchToProps = () => ({\n});\n\nexport default compose<React.ComponentClass<InjectedFormProps>>(\n    withStyles(styles),\n    connect(mapStateToProps, mapDispatchToProps)\n)(CollaboratorsCheckbox);\n","import * as React from 'react';\nimport {\n  Typography,\n  withStyles,\n  Theme\n} from '@material-ui/core';\nimport {\n  compose,\n} from 'redux';\nimport classnames from 'classnames';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\ninterface IFullNameComponentProps {\n  contacts?: IMap<any>;\n  rowIndex?: number;\n}\n\ninterface IFullNameProps extends IFullNameComponentProps {\n  classes: any;\n}\n\nconst styles = (theme: Theme) => ({\n  textStyle: {\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n  },\n  name: {\n    fontWeight: theme.typography.fontWeightMedium\n  },\n  email: {\n    fontSize: `${theme.typography.fontSize * 0.8}px`\n  }\n});\n\nconst FullName: React.SFC< IFullNameProps > = (props: any) => {\n  const {\n    classes,\n    contacts,\n    rowIndex\n  } = props;\n  const contactsValueSeq = contacts.valueSeq();\n\n  const name = [(contactsValueSeq.getIn([rowIndex, 'firstName']) || '' ), (contactsValueSeq.getIn([rowIndex, 'lastName']) || '')].filter(x => x).join(' ');\n\n  return (\n    <React.Fragment>\n      <Typography\n        className={classnames(classes.textStyle, classes.name)}\n        style={{whiteSpace: 'nowrap'}} /* inline to fix problem with @types typing */\n      >\n        {name || contactsValueSeq.getIn([rowIndex, 'organization'])}\n      </Typography>\n      <Typography\n        className={classnames(classes.textStyle, classes.email)}\n        style={{ whiteSpace: 'nowrap'}} /* inline to fix problem with @types typing */\n      >\n        {(contactsValueSeq.getIn([rowIndex, 'email']) || '')}\n      </Typography>\n    </React.Fragment>\n  );\n};\n\nexport default compose<React.ComponentClass<IFullNameComponentProps>>(\n  withStyles(styles),\n)(FullName);\n","import * as React from 'react';\nimport {\n  Column,\n  Table,\n  AutoSizer,\n} from 'react-virtualized';\nimport {\n  Typography,\n  withStyles,\n  Theme,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  IAction, IMap\n} from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  makeSelectAlphabetizedContacts,\n  makeSelectSelectedContactId,\n} from '../../modules/AccountModule/selectors';\nimport {\n  SelectContactAction,\n} from '../../modules/AccountModule/actions';\nimport { Contact } from '../../models';\nimport { List } from 'immutable';\n// import { Image } from '../../components/Image';\nimport NoImagePlaceholder from '../../components/_VirtualizedTableRenderers/NoImagePlaceholder';\nimport {\n  ToggleOverlayComponentAction,\n  SetOverlayComponentContentAction\n} from '../../modules/ApplicationModule/actions';\nimport { DRAWER_ID } from '../MyContactsPage/constants';\nimport { makeSelectOverlayComponent } from '../../modules/ApplicationModule/selectors';\nimport DeleteButton from '../../components/_VirtualizedTableRenderers/DeleteButton';\nimport EditButton from '../../components/_VirtualizedTableRenderers/EditButton';\nimport FullName from '../../components/_VirtualizedTableRenderers/FullName';\nimport { makeSelectOverlayComponentContent } from '../../modules/ApplicationModule/selectors';\nimport CollaboratorsCheckBox from '../../components/_VirtualizedTableRenderers/CollaboratorsCheckBox';\nimport LogInAsModalCell from '../../components/_VirtualizedTableRenderers/LogInAsModalCell';\nimport {\n  withForwardedRef,\n  catchForwardedRef,\n  } from '../../hoc';\n\n\n\nexport interface IVirtualizedTableRef {\n  TableRef: React.RefObject<any>;\n}\ninterface IVirtualizedTableComponentProps {\n  columnProps: any;\n  tableData: any;\n  tableProps?: any;\n  tableRef?: any;\n  formName?: string;\n  ref?: React.RefObject<IVirtualizedTableRef>;\n}\n\ninterface IVirtualizedTableProps extends IVirtualizedTableComponentProps {\n  classes: any;\n  contacts: List<IMap<Contact>>;\n  selectedContactId: number;\n  setSelectedContact: (contactId: number) => void;\n  setOverlayComponentContent: () => void;\n  toggleOverlayComponentAction: any;\n  drawerState: boolean;\n  content: any;\n  theme: Theme;\n}\n\ninterface IVirtualizedTableState {\n  tableHoverIndex?: number;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    flexGrow: 1,\n    padding: `${theme.spacing() * 3}px 0`\n  },\n  tooltip: {\n    // background: theme.palette.primary[400],\n    fontSize: theme.typography.fontSize * 1.2\n  },\n});\n\nexport const immutableTableRowGetter = (immutableData) => ({ index }) => {\n  return immutableData.get(index);\n};\n\nexport const immutableCellDataGetter = ({ columnData, dataKey, rowData }) => {\n  return rowData.get(dataKey);\n};\nclass VirtualizedTable extends React.Component<IVirtualizedTableProps, IVirtualizedTableState> {\n  public TableRef: React.RefObject<any> = React.createRef();\n  public state = {\n    tableHoverIndex: undefined,\n  };\n\n  public RowRend: React.SFC<any> = (props) => {\n    return (\n      <div\n      key={props.key}\n      onMouseEnter={props.onRowMouseOver(props.index)}\n      onClick={props.onRowClick(props.rowData)}\n      style={{\n        background: (\n          // this.props.selectedContactId === props.rowData.get('id')\n          //   ? this.props.theme.palette.primary[100]\n          //   : (\n              props.index === this.state.tableHoverIndex\n                ? this.props.theme.palette.grey[300]\n                : ''\n            // )\n        ),\n        paddingLeft: this.props.theme.spacing() * 5 + 'px',\n        paddingRight: (this.props.theme.spacing() * 5) + 12 + 'px', /* The 12px extra being added is to replace the 12px added by react-virtualized to make space for the scroll bar */\n        boxSizing: 'border-box',\n        ...props.style\n      }}\n      >\n        {props.columns}\n      </div>\n    );\n  }\n\n  public HeadRend: React.SFC<any> = (props) => {\n    return (\n      <div\n        role='row'\n        style={{\n          paddingLeft: this.props.theme.spacing() * 5 + 'px',\n          paddingRight: (this.props.theme.spacing() * 5) + 14 + 'px',\n          boxSizing: 'border-box',\n          ...props.style,\n        }}\n        className={this.props.classes.headerRenderer}\n      >\n        {props.columns}\n      </div>\n    );\n  }\n\n  public HeadCell: React.SFC<any> = (props) => {\n    const {\n      classes,\n    } = this.props;\n    const {\n      label,\n    } = props;\n    return (\n      <Tooltip\n        placement='top'\n        title={label ? label : ''}\n        enterDelay={500}\n        classes={{\n          tooltip: classes.tooltip\n        }}\n      >\n        <Typography\n          style={{\n            textOverflow: 'ellipsis',\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n            fontWeight: 'bold'\n          }}\n        >\n          {label}\n        </Typography>\n      </Tooltip>\n    );\n  }\n\n  public TextCell: React.SFC<any> = (props) => {\n    const {\n      classes,\n    } = this.props;\n    const {\n    } = this.state;\n    const {\n      cellData,\n    } = props;\n    return (\n      <Tooltip\n        placement='top'\n        title={cellData ? cellData : ''}\n        enterDelay={500}\n        classes={{\n          tooltip: classes.tooltip\n        }}\n      >\n        <Typography\n          style={{\n            cursor: 'pointer',\n            textOverflow: 'ellipsis',\n            whiteSpace: 'nowrap',\n            overflow: 'hidden'\n          }}\n        >\n          {cellData}\n        </Typography>\n      </Tooltip>\n    );\n  }\n\n  public render() {\n    const {\n      columnProps,\n      tableData,\n      tableProps\n    } = this.props;\n\n    const contactValues = tableData.valueSeq();\n\n    if (contactValues.count() !== 0) {\n      return (\n        <React.Fragment>\n          <AutoSizer>\n            {({ height, width }) => {\n              return (\n                <Table\n                  ref={this.TableRef}\n                  height={height}\n                  width={width}\n                  disableHeader={true}\n                  headerHeight={56}\n                  headerStyle={{\n                    display: 'flex',\n                    justifyContent: 'space-between',\n                    alignItems: 'center',\n                    overflow: 'hidden',\n                    cursor: 'default'\n                  }}\n                  headerRowRenderer={this.HeadRend}\n                  rowHeight={56}\n                  rowCount={contactValues.count()}\n                  scrollToAlignment='start'\n                  rowGetter={immutableTableRowGetter(contactValues)}\n                  gridStyle={{outline: 'none'}}\n                  rowRenderer={this.RowRend}\n                  onRowMouseOver={(ind: number) => () => this.setState({tableHoverIndex: ind})}\n                  onRowClick={(rowData: any) => () => {\n                    this.props.setOverlayComponentContent();\n                    if (this.props.drawerState === true && this.props.selectedContactId === rowData.get('id') && this.props.content === 'DEFAULT') {\n                      this.props.toggleOverlayComponentAction();\n                    } else if (this.props.drawerState !== true) {\n                      this.props.toggleOverlayComponentAction();\n                    }\n                    this.props.setSelectedContact(rowData.get('id'));\n                  }}\n                  rowStyle={{\n                    display: 'flex',\n                    justifyContent: 'space-between',\n                    outline: 'none',\n                    cursor: 'pointer',\n                  }}\n                  {...tableProps}\n                >\n                  {columnProps.columns.map((column, index) => {\n                    const CellType = ((type) => {\n                      switch (type) {\n                      case 'TextCell':\n                        return this.TextCell;\n                      case 'NoImagePlaceholder':\n                        return NoImagePlaceholder;\n                      case 'DeleteButton':\n                        return DeleteButton;\n                      case 'EditButton':\n                        return EditButton;\n                      case 'FullName':\n                        return FullName;\n                      case 'CollaboratorsCheckbox':\n                        return CollaboratorsCheckBox;\n                      case 'LogInAsModalCell':\n                        return LogInAsModalCell;\n                      default:\n                        return ;\n                      }\n                    })(column.celltype);\n                    return (\n                      <Column\n                        dataKey={''}\n                        key={'column' + index}\n                        cellDataGetter={immutableCellDataGetter}\n                        width={1}\n                        flexGrow={1}\n                        style={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start' }}\n                        cellRenderer={props => CellType && <CellType form={this.props.formName} {...props} {...column} tableState={this.state} contacts={tableData} />}\n                        headerRenderer={this.HeadCell}\n                        {...column}\n                      />\n                    );})}\n                </Table>\n              );\n            }}\n          </AutoSizer>\n        </React.Fragment>\n      );\n    }\n\n\n    return (\n      <Typography>\n        No Contacts\n      </Typography>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    setSelectedContact: (contactId: number) => dispatch(new SelectContactAction(contactId)),\n    toggleOverlayComponentAction: () => dispatch(new ToggleOverlayComponentAction({ id: DRAWER_ID })),\n    setOverlayComponentContent: () => dispatch(new SetOverlayComponentContentAction({ content: 'DEFAULT', id: DRAWER_ID})),\n  };\n};\nconst mapStateToProps = createStructuredSelector({\n  selectedContactId: makeSelectSelectedContactId(),\n  contacts: makeSelectAlphabetizedContacts(),\n  drawerState: makeSelectOverlayComponent(DRAWER_ID),\n  content: makeSelectOverlayComponentContent(DRAWER_ID),\n});\n\n// Main wrappers\nexport default compose<React.RefForwardingComponent<IVirtualizedTableRef, IVirtualizedTableComponentProps>>(\n  withForwardedRef(),\n  connect(mapStateToProps, mapDispatchToProps),\n  withStyles(styles, { withTheme: true }),\n  catchForwardedRef(),\n)(VirtualizedTable);","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n    return undefined;\n  }\n\n  // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n  // It is later used to read Sentry-DSC-values from.\n  let baggageObject: Readonly<Record<string, string>> = {};\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      for (const key of Object.keys(currBaggageObject)) {\n        acc[key] = currBaggageObject[key];\n      }\n      return acc;\n    }, {});\n  } else {\n    // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n    // this is how we choose to handle it)\n    if (!baggageHeader) {\n      return undefined;\n    }\n\n    baggageObject = baggageHeaderToObject(baggageHeader);\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      acc[key] = value;\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","!function(e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(null):\"function\"==typeof define&&define.amd?define(e(null)):window.stylis=e(null)}(function e(a){\"use strict\";var r=/^\\0+/g,c=/[\\0\\r\\f]/g,s=/: */g,t=/zoo|gra/,i=/([,: ])(transform)/g,f=/,+\\s*(?![^(]*[)])/g,n=/ +\\s*(?![^(]*[)])/g,l=/ *[\\0] */g,o=/,\\r+?/g,h=/([\\t\\r\\n ])*\\f?&/g,u=/:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g,d=/\\W+/g,b=/@(k\\w+)\\s*(\\S*)\\s*/,p=/::(place)/g,k=/:(read-only)/g,g=/\\s+(?=[{\\];=:>])/g,A=/([[}=:>])\\s+/g,C=/(\\{[^{]+?);(?=\\})/g,w=/\\s{2,}/g,v=/([^\\(])(:+) */g,m=/[svh]\\w+-[tblr]{2}/,x=/\\(\\s*(.*)\\s*\\)/g,$=/([\\s\\S]*?);/g,y=/-self|flex-/g,O=/[^]*?(:[rp][el]a[\\w-]+)[^]*/,j=/stretch|:\\s*\\w+\\-(?:conte|avail)/,z=/([^-])(image-set\\()/,N=\"-webkit-\",S=\"-moz-\",F=\"-ms-\",W=59,q=125,B=123,D=40,E=41,G=91,H=93,I=10,J=13,K=9,L=64,M=32,P=38,Q=45,R=95,T=42,U=44,V=58,X=39,Y=34,Z=47,_=62,ee=43,ae=126,re=0,ce=12,se=11,te=107,ie=109,fe=115,ne=112,le=111,oe=105,he=99,ue=100,de=112,be=1,pe=1,ke=0,ge=1,Ae=1,Ce=1,we=0,ve=0,me=0,xe=[],$e=[],ye=0,Oe=null,je=-2,ze=-1,Ne=0,Se=1,Fe=2,We=3,qe=0,Be=1,De=\"\",Ee=\"\",Ge=\"\";function He(e,a,s,t,i){for(var f,n,o=0,h=0,u=0,d=0,g=0,A=0,C=0,w=0,m=0,$=0,y=0,O=0,j=0,z=0,R=0,we=0,$e=0,Oe=0,je=0,ze=s.length,Je=ze-1,Re=\"\",Te=\"\",Ue=\"\",Ve=\"\",Xe=\"\",Ye=\"\";R<ze;){if(C=s.charCodeAt(R),R===Je)if(h+d+u+o!==0){if(0!==h)C=h===Z?I:Z;d=u=o=0,ze++,Je++}if(h+d+u+o===0){if(R===Je){if(we>0)Te=Te.replace(c,\"\");if(Te.trim().length>0){switch(C){case M:case K:case W:case J:case I:break;default:Te+=s.charAt(R)}C=W}}if(1===$e)switch(C){case B:case q:case W:case Y:case X:case D:case E:case U:$e=0;case K:case J:case I:case M:break;default:for($e=0,je=R,g=C,R--,C=W;je<ze;)switch(s.charCodeAt(je++)){case I:case J:case W:++R,C=g,je=ze;break;case V:if(we>0)++R,C=g;case B:je=ze}}switch(C){case B:for(g=(Te=Te.trim()).charCodeAt(0),y=1,je=++R;R<ze;){switch(C=s.charCodeAt(R)){case B:y++;break;case q:y--;break;case Z:switch(A=s.charCodeAt(R+1)){case T:case Z:R=Qe(A,R,Je,s)}break;case G:C++;case D:C++;case Y:case X:for(;R++<Je&&s.charCodeAt(R)!==C;);}if(0===y)break;R++}if(Ue=s.substring(je,R),g===re)g=(Te=Te.replace(r,\"\").trim()).charCodeAt(0);switch(g){case L:if(we>0)Te=Te.replace(c,\"\");switch(A=Te.charCodeAt(1)){case ue:case ie:case fe:case Q:f=a;break;default:f=xe}if(je=(Ue=He(a,f,Ue,A,i+1)).length,me>0&&0===je)je=Te.length;if(ye>0)if(f=Ie(xe,Te,Oe),n=Pe(We,Ue,f,a,pe,be,je,A,i,t),Te=f.join(\"\"),void 0!==n)if(0===(je=(Ue=n.trim()).length))A=0,Ue=\"\";if(je>0)switch(A){case fe:Te=Te.replace(x,Me);case ue:case ie:case Q:Ue=Te+\"{\"+Ue+\"}\";break;case te:if(Ue=(Te=Te.replace(b,\"$1 $2\"+(Be>0?De:\"\")))+\"{\"+Ue+\"}\",1===Ae||2===Ae&&Le(\"@\"+Ue,3))Ue=\"@\"+N+Ue+\"@\"+Ue;else Ue=\"@\"+Ue;break;default:if(Ue=Te+Ue,t===de)Ve+=Ue,Ue=\"\"}else Ue=\"\";break;default:Ue=He(a,Ie(a,Te,Oe),Ue,t,i+1)}Xe+=Ue,O=0,$e=0,z=0,we=0,Oe=0,j=0,Te=\"\",Ue=\"\",C=s.charCodeAt(++R);break;case q:case W:if((je=(Te=(we>0?Te.replace(c,\"\"):Te).trim()).length)>1){if(0===z)if((g=Te.charCodeAt(0))===Q||g>96&&g<123)je=(Te=Te.replace(\" \",\":\")).length;if(ye>0)if(void 0!==(n=Pe(Se,Te,a,e,pe,be,Ve.length,t,i,t)))if(0===(je=(Te=n.trim()).length))Te=\"\\0\\0\";switch(g=Te.charCodeAt(0),A=Te.charCodeAt(1),g){case re:break;case L:if(A===oe||A===he){Ye+=Te+s.charAt(R);break}default:if(Te.charCodeAt(je-1)===V)break;Ve+=Ke(Te,g,A,Te.charCodeAt(2))}}O=0,$e=0,z=0,we=0,Oe=0,Te=\"\",C=s.charCodeAt(++R)}}switch(C){case J:case I:if(h+d+u+o+ve===0)switch($){case E:case X:case Y:case L:case ae:case _:case T:case ee:case Z:case Q:case V:case U:case W:case B:case q:break;default:if(z>0)$e=1}if(h===Z)h=0;else if(ge+O===0&&t!==te&&Te.length>0)we=1,Te+=\"\\0\";if(ye*qe>0)Pe(Ne,Te,a,e,pe,be,Ve.length,t,i,t);be=1,pe++;break;case W:case q:if(h+d+u+o===0){be++;break}default:switch(be++,Re=s.charAt(R),C){case K:case M:if(d+o+h===0)switch(w){case U:case V:case K:case M:Re=\"\";break;default:if(C!==M)Re=\" \"}break;case re:Re=\"\\\\0\";break;case ce:Re=\"\\\\f\";break;case se:Re=\"\\\\v\";break;case P:if(d+h+o===0&&ge>0)Oe=1,we=1,Re=\"\\f\"+Re;break;case 108:if(d+h+o+ke===0&&z>0)switch(R-z){case 2:if(w===ne&&s.charCodeAt(R-3)===V)ke=w;case 8:if(m===le)ke=m}break;case V:if(d+h+o===0)z=R;break;case U:if(h+u+d+o===0)we=1,Re+=\"\\r\";break;case Y:case X:if(0===h)d=d===C?0:0===d?C:d;break;case G:if(d+h+u===0)o++;break;case H:if(d+h+u===0)o--;break;case E:if(d+h+o===0)u--;break;case D:if(d+h+o===0){if(0===O)switch(2*w+3*m){case 533:break;default:y=0,O=1}u++}break;case L:if(h+u+d+o+z+j===0)j=1;break;case T:case Z:if(d+o+u>0)break;switch(h){case 0:switch(2*C+3*s.charCodeAt(R+1)){case 235:h=Z;break;case 220:je=R,h=T}break;case T:if(C===Z&&w===T&&je+2!==R){if(33===s.charCodeAt(je+2))Ve+=s.substring(je,R+1);Re=\"\",h=0}}}if(0===h){if(ge+d+o+j===0&&t!==te&&C!==W)switch(C){case U:case ae:case _:case ee:case E:case D:if(0===O){switch(w){case K:case M:case I:case J:Re+=\"\\0\";break;default:Re=\"\\0\"+Re+(C===U?\"\":\"\\0\")}we=1}else switch(C){case D:if(z+7===R&&108===w)z=0;O=++y;break;case E:if(0==(O=--y))we=1,Re+=\"\\0\"}break;case K:case M:switch(w){case re:case B:case q:case W:case U:case ce:case K:case M:case I:case J:break;default:if(0===O)we=1,Re+=\"\\0\"}}if(Te+=Re,C!==M&&C!==K)$=C}}m=w,w=C,R++}if(je=Ve.length,me>0)if(0===je&&0===Xe.length&&0===a[0].length==false)if(t!==ie||1===a.length&&(ge>0?Ee:Ge)===a[0])je=a.join(\",\").length+2;if(je>0){if(f=0===ge&&t!==te?function(e){for(var a,r,s=0,t=e.length,i=Array(t);s<t;++s){for(var f=e[s].split(l),n=\"\",o=0,h=0,u=0,d=0,b=f.length;o<b;++o){if(0===(h=(r=f[o]).length)&&b>1)continue;if(u=n.charCodeAt(n.length-1),d=r.charCodeAt(0),a=\"\",0!==o)switch(u){case T:case ae:case _:case ee:case M:case D:break;default:a=\" \"}switch(d){case P:r=a+Ee;case ae:case _:case ee:case M:case E:case D:break;case G:r=a+r+Ee;break;case V:switch(2*r.charCodeAt(1)+3*r.charCodeAt(2)){case 530:if(Ce>0){r=a+r.substring(8,h-1);break}default:if(o<1||f[o-1].length<1)r=a+Ee+r}break;case U:a=\"\";default:if(h>1&&r.indexOf(\":\")>0)r=a+r.replace(v,\"$1\"+Ee+\"$2\");else r=a+r+Ee}n+=r}i[s]=n.replace(c,\"\").trim()}return i}(a):a,ye>0)if(void 0!==(n=Pe(Fe,Ve,f,e,pe,be,je,t,i,t))&&0===(Ve=n).length)return Ye+Ve+Xe;if(Ve=f.join(\",\")+\"{\"+Ve+\"}\",Ae*ke!=0){if(2===Ae&&!Le(Ve,2))ke=0;switch(ke){case le:Ve=Ve.replace(k,\":\"+S+\"$1\")+Ve;break;case ne:Ve=Ve.replace(p,\"::\"+N+\"input-$1\")+Ve.replace(p,\"::\"+S+\"$1\")+Ve.replace(p,\":\"+F+\"input-$1\")+Ve}ke=0}}return Ye+Ve+Xe}function Ie(e,a,r){var c=a.trim().split(o),s=c,t=c.length,i=e.length;switch(i){case 0:case 1:for(var f=0,n=0===i?\"\":e[0]+\" \";f<t;++f)s[f]=Je(n,s[f],r,i).trim();break;default:f=0;var l=0;for(s=[];f<t;++f)for(var h=0;h<i;++h)s[l++]=Je(e[h]+\" \",c[f],r,i).trim()}return s}function Je(e,a,r,c){var s=a,t=s.charCodeAt(0);if(t<33)t=(s=s.trim()).charCodeAt(0);switch(t){case P:switch(ge+c){case 0:case 1:if(0===e.trim().length)break;default:return s.replace(h,\"$1\"+e.trim())}break;case V:switch(s.charCodeAt(1)){case 103:if(Ce>0&&ge>0)return s.replace(u,\"$1\").replace(h,\"$1\"+Ge);break;default:return e.trim()+s.replace(h,\"$1\"+e.trim())}default:if(r*ge>0&&s.indexOf(\"\\f\")>0)return s.replace(h,(e.charCodeAt(0)===V?\"\":\"$1\")+e.trim())}return e+s}function Ke(e,a,r,c){var l,o=0,h=e+\";\",u=2*a+3*r+4*c;if(944===u)return function(e){var a=e.length,r=e.indexOf(\":\",9)+1,c=e.substring(0,r).trim(),s=e.substring(r,a-1).trim();switch(e.charCodeAt(9)*Be){case 0:break;case Q:if(110!==e.charCodeAt(10))break;default:for(var t=s.split((s=\"\",f)),i=0,r=0,a=t.length;i<a;r=0,++i){for(var l=t[i],o=l.split(n);l=o[r];){var h=l.charCodeAt(0);if(1===Be&&(h>L&&h<90||h>96&&h<123||h===R||h===Q&&l.charCodeAt(1)!==Q))switch(isNaN(parseFloat(l))+(-1!==l.indexOf(\"(\"))){case 1:switch(l){case\"infinite\":case\"alternate\":case\"backwards\":case\"running\":case\"normal\":case\"forwards\":case\"both\":case\"none\":case\"linear\":case\"ease\":case\"ease-in\":case\"ease-out\":case\"ease-in-out\":case\"paused\":case\"reverse\":case\"alternate-reverse\":case\"inherit\":case\"initial\":case\"unset\":case\"step-start\":case\"step-end\":break;default:l+=De}}o[r++]=l}s+=(0===i?\"\":\",\")+o.join(\" \")}}if(s=c+s+\";\",1===Ae||2===Ae&&Le(s,1))return N+s+s;return s}(h);else if(0===Ae||2===Ae&&!Le(h,1))return h;switch(u){case 1015:return 97===h.charCodeAt(10)?N+h+h:h;case 951:return 116===h.charCodeAt(3)?N+h+h:h;case 963:return 110===h.charCodeAt(5)?N+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return N+h+h;case 978:return N+h+S+h+h;case 1019:case 983:return N+h+S+h+F+h+h;case 883:if(h.charCodeAt(8)===Q)return N+h+h;if(h.indexOf(\"image-set(\",11)>0)return h.replace(z,\"$1\"+N+\"$2\")+h;return h;case 932:if(h.charCodeAt(4)===Q)switch(h.charCodeAt(5)){case 103:return N+\"box-\"+h.replace(\"-grow\",\"\")+N+h+F+h.replace(\"grow\",\"positive\")+h;case 115:return N+h+F+h.replace(\"shrink\",\"negative\")+h;case 98:return N+h+F+h.replace(\"basis\",\"preferred-size\")+h}return N+h+F+h+h;case 964:return N+h+F+\"flex-\"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return l=h.substring(h.indexOf(\":\",15)).replace(\"flex-\",\"\").replace(\"space-between\",\"justify\"),N+\"box-pack\"+l+N+h+F+\"flex-pack\"+l+h;case 1005:return t.test(h)?h.replace(s,\":\"+N)+h.replace(s,\":\"+S)+h:h;case 1e3:switch(o=(l=h.substring(13).trim()).indexOf(\"-\")+1,l.charCodeAt(0)+l.charCodeAt(o)){case 226:l=h.replace(m,\"tb\");break;case 232:l=h.replace(m,\"tb-rl\");break;case 220:l=h.replace(m,\"lr\");break;default:return h}return N+h+F+l+h;case 1017:if(-1===h.indexOf(\"sticky\",9))return h;case 975:switch(o=(h=e).length-10,u=(l=(33===h.charCodeAt(o)?h.substring(0,o):h).substring(e.indexOf(\":\",7)+1).trim()).charCodeAt(0)+(0|l.charCodeAt(7))){case 203:if(l.charCodeAt(8)<111)break;case 115:h=h.replace(l,N+l)+\";\"+h;break;case 207:case 102:h=h.replace(l,N+(u>102?\"inline-\":\"\")+\"box\")+\";\"+h.replace(l,N+l)+\";\"+h.replace(l,F+l+\"box\")+\";\"+h}return h+\";\";case 938:if(h.charCodeAt(5)===Q)switch(h.charCodeAt(6)){case 105:return l=h.replace(\"-items\",\"\"),N+h+N+\"box-\"+l+F+\"flex-\"+l+h;case 115:return N+h+F+\"flex-item-\"+h.replace(y,\"\")+h;default:return N+h+F+\"flex-line-pack\"+h.replace(\"align-content\",\"\").replace(y,\"\")+h}break;case 973:case 989:if(h.charCodeAt(3)!==Q||122===h.charCodeAt(4))break;case 931:case 953:if(true===j.test(e))if(115===(l=e.substring(e.indexOf(\":\")+1)).charCodeAt(0))return Ke(e.replace(\"stretch\",\"fill-available\"),a,r,c).replace(\":fill-available\",\":stretch\");else return h.replace(l,N+l)+h.replace(l,S+l.replace(\"fill-\",\"\"))+h;break;case 962:if(h=N+h+(102===h.charCodeAt(5)?F+h:\"\")+h,r+c===211&&105===h.charCodeAt(13)&&h.indexOf(\"transform\",10)>0)return h.substring(0,h.indexOf(\";\",27)+1).replace(i,\"$1\"+N+\"$2\")+h}return h}function Le(e,a){var r=e.indexOf(1===a?\":\":\"{\"),c=e.substring(0,3!==a?r:10),s=e.substring(r+1,e.length-1);return Oe(2!==a?c:c.replace(O,\"$1\"),s,a)}function Me(e,a){var r=Ke(a,a.charCodeAt(0),a.charCodeAt(1),a.charCodeAt(2));return r!==a+\";\"?r.replace($,\" or ($1)\").substring(4):\"(\"+a+\")\"}function Pe(e,a,r,c,s,t,i,f,n,l){for(var o,h=0,u=a;h<ye;++h)switch(o=$e[h].call(Te,e,u,r,c,s,t,i,f,n,l)){case void 0:case false:case true:case null:break;default:u=o}if(u!==a)return u}function Qe(e,a,r,c){for(var s=a+1;s<r;++s)switch(c.charCodeAt(s)){case Z:if(e===T)if(c.charCodeAt(s-1)===T&&a+2!==s)return s+1;break;case I:if(e===Z)return s+1}return s}function Re(e){for(var a in e){var r=e[a];switch(a){case\"keyframe\":Be=0|r;break;case\"global\":Ce=0|r;break;case\"cascade\":ge=0|r;break;case\"compress\":we=0|r;break;case\"semicolon\":ve=0|r;break;case\"preserve\":me=0|r;break;case\"prefix\":if(Oe=null,!r)Ae=0;else if(\"function\"!=typeof r)Ae=1;else Ae=2,Oe=r}}return Re}function Te(a,r){if(void 0!==this&&this.constructor===Te)return e(a);var s=a,t=s.charCodeAt(0);if(t<33)t=(s=s.trim()).charCodeAt(0);if(Be>0)De=s.replace(d,t===G?\"\":\"-\");if(t=1,1===ge)Ge=s;else Ee=s;var i,f=[Ge];if(ye>0)if(void 0!==(i=Pe(ze,r,f,f,pe,be,0,0,0,0))&&\"string\"==typeof i)r=i;var n=He(xe,f,r,0,0);if(ye>0)if(void 0!==(i=Pe(je,n,f,f,pe,be,n.length,0,0,0))&&\"string\"!=typeof(n=i))t=0;return De=\"\",Ge=\"\",Ee=\"\",ke=0,pe=1,be=1,we*t==0?n:n.replace(c,\"\").replace(g,\"\").replace(A,\"$1\").replace(C,\"$1\").replace(w,\" \")}if(Te.use=function e(a){switch(a){case void 0:case null:ye=$e.length=0;break;default:if(\"function\"==typeof a)$e[ye++]=a;else if(\"object\"==typeof a)for(var r=0,c=a.length;r<c;++r)e(a[r]);else qe=0|!!a}return e},Te.set=Re,void 0!==a)Re(a);return Te});\n//# sourceMappingURL=stylis.min.js.map","import { AnalyticsConnector } from '@amplitude/analytics-connector';\n\nexport const getAnalyticsConnector = (instanceName = '$default_instance'): AnalyticsConnector => {\n  return AnalyticsConnector.getInstance(instanceName);\n};\n\nexport const setConnectorUserId = (userId: string | undefined, instanceName?: string): void => {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\n\nexport const setConnectorDeviceId = (deviceId: string, instanceName?: string): void => {\n  getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n","module.exports = require(\"core-js/library/fn/date/now\");","module.exports = require(\"core-js/library/fn/object/assign\");","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z\"\n}), 'ShowChart');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\"\n}), 'Message');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"\n}), 'Repeat');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 10h-3v3c0 .55-.45 1-1 1s-1-.45-1-1v-3H8c-.55 0-1-.45-1-1s.45-1 1-1h3V8c0-.55.45-1 1-1s1 .45 1 1v3h3c.55 0 1 .45 1 1s-.45 1-1 1z\"\n}), 'AddBoxRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z\"\n}), 'Straighten');\n\nexports.default = _default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.connectedReduxRedirect = exports.connectedRouterRedirect = undefined;\n\nvar _locationHelper = require('../history4/locationHelper');\n\nvar _locationHelper2 = _interopRequireDefault(_locationHelper);\n\nvar _redirect = require('../helper/redirect');\n\nvar _redirect2 = _interopRequireDefault(_redirect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _redirectUtil = (0, _redirect2.default)({\n  locationHelperBuilder: _locationHelper2.default,\n  getRouterRedirect: function getRouterRedirect(_ref) {\n    var history = _ref.history;\n    return history.replace;\n  }\n});\n\nvar connectedRouterRedirect = _redirectUtil.connectedRouterRedirect,\n    connectedReduxRedirect = _redirectUtil.connectedReduxRedirect;\nexports.connectedRouterRedirect = connectedRouterRedirect;\nexports.connectedReduxRedirect = connectedReduxRedirect;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M9.29 15.88L13.17 12 9.29 8.12a.9959.9959 0 010-1.41c.39-.39 1.02-.39 1.41 0l4.59 4.59c.39.39.39 1.02 0 1.41L10.7 17.3c-.39.39-1.02.39-1.41 0-.38-.39-.39-1.03 0-1.42z\"\n}), 'KeyboardArrowRightRounded');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default (Lodable as any)(() => import('./Component'));\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12.6 18.06c-.36.28-.87.28-1.23 0l-6.15-4.78a.991.991 0 00-1.22 0c-.51.4-.51 1.17 0 1.57l6.76 5.26c.72.56 1.73.56 2.46 0l6.76-5.26c.51-.4.51-1.17 0-1.57l-.01-.01a.991.991 0 00-1.22 0l-6.15 4.79zm.63-3.02l6.76-5.26c.51-.4.51-1.18 0-1.58l-6.76-5.26c-.72-.56-1.73-.56-2.46 0L4.01 8.21c-.51.4-.51 1.18 0 1.58l6.76 5.26c.72.56 1.74.56 2.46-.01z\"\n}), 'LayersRounded');\n\nexports.default = _default;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function createMixins(breakpoints, spacing, mixins) {\n  var _toolbar;\n\n  return _extends({\n    gutters: function gutters() {\n      var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      // To deprecate in v4.1\n      //       warning(\n      //         false,\n      //         [\n      //           'Material-UI: theme.mixins.gutters() is deprecated.',\n      //           'You can use the source of the mixin directly:',\n      //           `\n      // paddingLeft: theme.spacing(2),\n      // paddingRight: theme.spacing(2),\n      // [theme.breakpoints.up('sm')]: {\n      //   paddingLeft: theme.spacing(3),\n      //   paddingRight: theme.spacing(3),\n      // },\n      // `,\n      //         ].join('\\n'),\n      //       );\n      return _extends({\n        paddingLeft: spacing(2),\n        paddingRight: spacing(2)\n      }, styles, _defineProperty({}, breakpoints.up('sm'), _extends({\n        paddingLeft: spacing(3),\n        paddingRight: spacing(3)\n      }, styles[breakpoints.up('sm')])));\n    },\n    toolbar: (_toolbar = {\n      minHeight: 56\n    }, _defineProperty(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n      minHeight: 48\n    }), _defineProperty(_toolbar, breakpoints.up('sm'), {\n      minHeight: 64\n    }), _toolbar)\n  }, mixins);\n}","var common = {\n  black: '#000',\n  white: '#fff'\n};\nexport default common;","var indigo = {\n  50: '#e8eaf6',\n  100: '#c5cae9',\n  200: '#9fa8da',\n  300: '#7986cb',\n  400: '#5c6bc0',\n  500: '#3f51b5',\n  600: '#3949ab',\n  700: '#303f9f',\n  800: '#283593',\n  900: '#1a237e',\n  A100: '#8c9eff',\n  A200: '#536dfe',\n  A400: '#3d5afe',\n  A700: '#304ffe'\n};\nexport default indigo;","var pink = {\n  50: '#fce4ec',\n  100: '#f8bbd0',\n  200: '#f48fb1',\n  300: '#f06292',\n  400: '#ec407a',\n  500: '#e91e63',\n  600: '#d81b60',\n  700: '#c2185b',\n  800: '#ad1457',\n  900: '#880e4f',\n  A100: '#ff80ab',\n  A200: '#ff4081',\n  A400: '#f50057',\n  A700: '#c51162'\n};\nexport default pink;","var orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nexport default orange;","var blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nexport default blue;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { deepmerge } from '@material-ui/utils';\nimport common from '../colors/common';\nimport grey from '../colors/grey';\nimport indigo from '../colors/indigo';\nimport pink from '../colors/pink';\nimport red from '../colors/red';\nimport orange from '../colors/orange';\nimport blue from '../colors/blue';\nimport green from '../colors/green';\nimport { darken, getContrastRatio, lighten } from './colorManipulator';\nexport var light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.54)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    // Text hints.\n    hint: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: common.white,\n    default: grey[50]\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)'\n  }\n};\nexport var dark = {\n  text: {\n    primary: common.white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    hint: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: grey[800],\n    default: '#303030'\n  },\n  action: {\n    active: common.white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)'\n  }\n};\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = lighten(intent.main, tonalOffset);\n    } else if (direction === 'dark') {\n      intent.dark = darken(intent.main, tonalOffset * 1.5);\n    }\n  }\n}\n\nexport default function createPalette(palette) {\n  var _palette$primary = palette.primary,\n      primary = _palette$primary === void 0 ? {\n    light: indigo[300],\n    main: indigo[500],\n    dark: indigo[700]\n  } : _palette$primary,\n      _palette$secondary = palette.secondary,\n      secondary = _palette$secondary === void 0 ? {\n    light: pink.A200,\n    main: pink.A400,\n    dark: pink.A700\n  } : _palette$secondary,\n      _palette$error = palette.error,\n      error = _palette$error === void 0 ? {\n    light: red[300],\n    main: red[500],\n    dark: red[700]\n  } : _palette$error,\n      _palette$warning = palette.warning,\n      warning = _palette$warning === void 0 ? {\n    light: orange[300],\n    main: orange[500],\n    dark: orange[700]\n  } : _palette$warning,\n      _palette$info = palette.info,\n      info = _palette$info === void 0 ? {\n    light: blue[300],\n    main: blue[500],\n    dark: blue[700]\n  } : _palette$info,\n      _palette$success = palette.success,\n      success = _palette$success === void 0 ? {\n    light: green[300],\n    main: green[500],\n    dark: green[700]\n  } : _palette$success,\n      _palette$type = palette.type,\n      type = _palette$type === void 0 ? 'light' : _palette$type,\n      _palette$contrastThre = palette.contrastThreshold,\n      contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n      _palette$tonalOffset = palette.tonalOffset,\n      tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n      other = _objectWithoutProperties(palette, [\"primary\", \"secondary\", \"error\", \"warning\", \"info\", \"success\", \"type\", \"contrastThreshold\", \"tonalOffset\"]); // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n\n  function getContrastText(background) {\n    if (!background) {\n      throw new TypeError(\"Material-UI: missing background argument in getContrastText(\".concat(background, \").\"));\n    }\n\n    var contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n    if (process.env.NODE_ENV !== 'production') {\n      var contrast = getContrastRatio(background, contrastText);\n\n      if (contrast < 3) {\n        console.error([\"Material-UI: the contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n\n    return contrastText;\n  }\n\n  function augmentColor(color) {\n    var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n    var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n    var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n    color = _extends({}, color);\n\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!color.main) {\n        throw new Error(['Material-UI: the color provided to augmentColor(color) is invalid.', \"The color object needs to have a `main` property or a `\".concat(mainShade, \"` property.\")].join('\\n'));\n      }\n    }\n\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n\n    return color;\n  }\n\n  var types = {\n    dark: dark,\n    light: light\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (!types[type]) {\n      console.error(\"Material-UI: the palette type `\".concat(type, \"` is not supported.\"));\n    }\n  }\n\n  var paletteOutput = deepmerge(_extends({\n    // A collection of common colors.\n    common: common,\n    // The palette type, can be light or dark.\n    type: type,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor(primary),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor(error),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor(warning),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor(info),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor(success),\n    // The grey colors.\n    grey: grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold: contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText: getContrastText,\n    // Generate a rich color object.\n    augmentColor: augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset: tonalOffset\n  }, types[type]), other);\n  return paletteOutput;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { deepmerge } from '@material-ui/utils';\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n  textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nexport default function createTypography(palette, typography) {\n  var _ref = typeof typography === 'function' ? typography(palette) : typography,\n      _ref$fontFamily = _ref.fontFamily,\n      fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n      _ref$fontSize = _ref.fontSize,\n      fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n      _ref$fontWeightLight = _ref.fontWeightLight,\n      fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n      _ref$fontWeightRegula = _ref.fontWeightRegular,\n      fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n      _ref$fontWeightMedium = _ref.fontWeightMedium,\n      fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n      _ref$fontWeightBold = _ref.fontWeightBold,\n      fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n      _ref$htmlFontSize = _ref.htmlFontSize,\n      htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n      allVariants = _ref.allVariants,\n      pxToRem2 = _ref.pxToRem,\n      other = _objectWithoutProperties(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('Material-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Material-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  var coef = fontSize / 14;\n\n  var pxToRem = pxToRem2 || function (size) {\n    return \"\".concat(size / htmlFontSize * coef, \"rem\");\n  };\n\n  var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n    return _extends({\n      fontFamily: fontFamily,\n      fontWeight: fontWeight,\n      fontSize: pxToRem(size),\n      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n      lineHeight: lineHeight\n    }, fontFamily === defaultFontFamily ? {\n      letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n    } : {}, {}, casing, {}, allVariants);\n  };\n\n  var variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n  };\n  return deepmerge(_extends({\n    htmlFontSize: htmlFontSize,\n    pxToRem: pxToRem,\n    round: round,\n    // TODO To remove in v5?\n    fontFamily: fontFamily,\n    fontSize: fontSize,\n    fontWeightLight: fontWeightLight,\n    fontWeightRegular: fontWeightRegular,\n    fontWeightMedium: fontWeightMedium,\n    fontWeightBold: fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n\n  });\n}","var shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n  return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","var shape = {\n  borderRadius: 4\n};\nexport default shape;","var warnOnce;\nexport default function createSpacing() {\n  var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  } // All components align to an 8dp square baseline grid for mobile, tablet, and desktop.\n  // https://material.io/design/layout/understanding-layout.html#pixel-density\n\n\n  var transform;\n\n  if (typeof spacingInput === 'function') {\n    transform = spacingInput;\n  } else {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof spacingInput !== 'number') {\n        console.error([\"Material-UI: the `theme.spacing` value (\".concat(spacingInput, \") is invalid.\"), 'It should be a number or a function.'].join('\\n'));\n      }\n    }\n\n    transform = function transform(factor) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof factor !== 'number') {\n          console.error(\"Expected spacing argument to be a number, got \".concat(factor));\n        }\n      }\n\n      return spacingInput * factor;\n    };\n  }\n\n  var spacing = function spacing() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(args.length <= 4)) {\n        console.error(\"Material-UI: Too many arguments provided, expected between 0 and 4, got \".concat(args.length));\n      }\n    }\n\n    if (args.length === 0) {\n      return transform(1);\n    }\n\n    if (args.length === 1) {\n      return transform(args[0]);\n    }\n\n    return args.map(function (factor) {\n      var output = transform(factor);\n      return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n    }).join(' ');\n  }; // Backward compatibility, to remove in v5.\n\n\n  Object.defineProperty(spacing, 'unit', {\n    get: function get() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!warnOnce || process.env.NODE_ENV === 'test') {\n          console.error(['Material-UI: theme.spacing.unit usage has been deprecated.', 'It will be removed in v5.', 'You can replace `theme.spacing.unit * y` with `theme.spacing(y)`.', '', 'You can use the `https://github.com/mui-org/material-ui/tree/master/packages/material-ui-codemod/README.md#theme-spacing-api` migration helper to make the process smoother.'].join('\\n'));\n        }\n\n        warnOnce = true;\n      }\n\n      return spacingInput;\n    }\n  });\n  spacing.mui = true;\n  return spacing;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { deepmerge } from '@material-ui/utils';\nimport createBreakpoints from './createBreakpoints';\nimport createMixins from './createMixins';\nimport createPalette from './createPalette';\nimport createTypography from './createTypography';\nimport shadows from './shadows';\nimport shape from './shape';\nimport createSpacing from './createSpacing';\nimport transitions from './transitions';\nimport zIndex from './zIndex';\n\nfunction createMuiTheme() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _options$breakpoints = options.breakpoints,\n      breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n      _options$mixins = options.mixins,\n      mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n      _options$palette = options.palette,\n      paletteInput = _options$palette === void 0 ? {} : _options$palette,\n      spacingInput = options.spacing,\n      _options$typography = options.typography,\n      typographyInput = _options$typography === void 0 ? {} : _options$typography,\n      other = _objectWithoutProperties(options, [\"breakpoints\", \"mixins\", \"palette\", \"spacing\", \"typography\"]);\n\n  var palette = createPalette(paletteInput);\n  var breakpoints = createBreakpoints(breakpointsInput);\n  var spacing = createSpacing(spacingInput);\n  var muiTheme = deepmerge({\n    breakpoints: breakpoints,\n    direction: 'ltr',\n    mixins: createMixins(breakpoints, spacing, mixinsInput),\n    overrides: {},\n    // Inject custom styles\n    palette: palette,\n    props: {},\n    // Provide default props\n    shadows: shadows,\n    typography: createTypography(palette, typographyInput),\n    spacing: spacing,\n    shape: shape,\n    transitions: transitions,\n    zIndex: zIndex\n  }, other);\n\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  muiTheme = args.reduce(function (acc, argument) {\n    return deepmerge(acc, argument);\n  }, muiTheme);\n\n  if (process.env.NODE_ENV !== 'production') {\n    var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected'];\n\n    var traverse = function traverse(node, parentKey) {\n      var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n      for (key in node) {\n        var child = node[key];\n\n        if (depth === 1) {\n          if (key.indexOf('Mui') === 0 && child) {\n            traverse(child, key, depth + 1);\n          }\n        } else if (pseudoClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            console.error([\"Material-UI: the `\".concat(parentKey, \"` component increases \") + \"the CSS specificity of the `\".concat(key, \"` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify({\n              root: _defineProperty({}, \"&$\".concat(key), child)\n            }, null, 2), '', 'https://material-ui.com/r/pseudo-classes-guide'].join('\\n'));\n          } // Remove the style to prevent global conflicts.\n\n\n          node[key] = {};\n        }\n      }\n    };\n\n    traverse(muiTheme.overrides);\n  }\n\n  return muiTheme;\n}\n\nexport default createMuiTheme;","import {\n  fromJS,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ThemeActionTypes,\n  ChangeThemeAction,\n} from './actions';\n\nexport interface IThemeReducerState {\n  theme?: object;\n}\n\nconst INITIAL_STATE = fromJS({\n  theme: undefined,\n});\n\nexport const reducer = (state: IMapNonRecursive<IThemeReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ThemeActionTypes.CHANGE_THEME: {\n      const {\n        payload: theme,\n      } = action as ChangeThemeAction;\n      return state.set('theme', theme);\n    }\n\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","/*\n * AccountModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IThemeReducerState } from './reducer';\nimport {\n  injectReducer,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IAccountModuleComponentProps {\n\n}\n\ninterface IAccountModuleProps extends IAccountModuleComponentProps {\n  reducerState: IMapNonRecursive<IThemeReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype AccountModuleProps = IAccountModuleProps;\n\nclass AccountModule extends React.Component<AccountModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IAccountModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IAccountModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n)(AccountModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './ThemeModule';\nexport default Module;\n","// customized snackbar with redux\n// https://material-ui.com/api/snackbar/\n// created by Jasmine Tossan ( ╯°□°)╯ ┻━━┻\n\n// dispatch SetSnackbarOpenAction with options (ISnackBarOptions)\n// close with SetSnackbarClosedAction\n\nimport * as React from 'react';\nimport Snackbar, { SnackbarOrigin } from '@material-ui/core/Snackbar';\nimport MuiAlert, { AlertProps, Color } from '@material-ui/lab/Alert';\nimport { Theme, WithStyles, withStyles } from '@material-ui/core/styles';\nimport { makeSelectSnackbarOptions } from '../../modules/ApplicationModule/selectors';\nimport { connect } from 'react-redux';\nimport { SetSnackbarClosedAction, ISnackbarActionProps } from '../../modules/ApplicationModule/actions';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { Dispatch, compose } from 'redux';\nimport { StyleRules } from '@material-ui/styles';\nimport { Button, Grid, SvgIcon, WithTheme } from '@material-ui/core';\nimport { makeSelectSite } from '../../modules/AtsModule/selectors';\nimport { SiteName } from '../../constants';\nimport ErpContent from './ErpContent';\nimport PricingUpdateError from './PricingUpdateError';\n\nexport enum CONTENT_TYPE {\n  erp = 'erp',\n  pricingUpdateErrorMessage = 'pricingUpdateErrorMessage',\n}\n\nexport interface ISnackbarContentProps {\n  contentType: CONTENT_TYPE;\n  details: IMap<Map<string, any>>;\n}\n\nexport interface ISnackBarOptions {\n  isSnackbarOpen: boolean;\n  message?: string;\n  content?: IMap<ISnackbarContentProps>;\n  severity: Color;\n  anchorOrigin: SnackbarOrigin;\n  backgroundColor?: 'black' | 'white';\n  actionProps: ISnackbarActionProps;\n  icon: any;\n}\n\ninterface ICustomizedSnackBarComponentProps {\n\n}\n\ninterface ICustomizedSnackBarProps extends ICustomizedSnackBarComponentProps {\n  snackbarState: IMap<ISnackBarOptions>;\n  site: SiteName;\n  setSnackbarClosed: () => void;\n}\n\ntype CustomizedSnackbarProps = ICustomizedSnackBarProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nfunction Alert(props: AlertProps) {\n  return <MuiAlert elevation={6} variant='filled' {...props} />;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    width: '100%',\n    '& > * + *': {\n      marginTop: theme.spacing(2),\n    },\n    zIndex: 1300\n  },\n  black: {\n    background: theme.palette.common.black\n  },\n  white: {\n    background: theme.palette.common.white\n  },\n  pimSuccessIcon: {\n    color: theme.palette.primary.main\n  },\n  pimSuccessMessage: {\n    color: theme.palette.text.primary\n  },\n  pimSuccessCloseIcon: {\n    color: theme.palette.text.secondary\n  },\n  button: {\n    margin: theme.spacing(0, 1)\n  }\n});\n\nconst CustomizedSnackbar: React.FC<CustomizedSnackbarProps> = (props) => {\n  const {\n    classes,\n    setSnackbarClosed,\n    snackbarState,\n    site,\n  } = props;\n\n  const isSnackbarOpen = snackbarState.get('isSnackbarOpen');\n  const contentType = snackbarState.getIn(['content', 'contentType']);\n  const details = snackbarState.getIn(['content', 'details']);\n  const message = snackbarState.get('message');\n  const severity = snackbarState.get('severity');\n  const isPimToolAndWhite = site === SiteName.pim && (severity === 'success' || severity === 'info');\n  const backgroundColor = snackbarState.get('backgroundColor') || (isPimToolAndWhite && 'white');\n  const anchorOrigin = snackbarState.get('anchorOrigin').toJS();\n  const action = snackbarState.get('actionProps');\n  const label = snackbarState.getIn(['actionProps', 'label']);\n  const onclick = snackbarState.getIn(['actionProps', 'onclick']);\n  const autoHideDuration = snackbarState.getIn(['actionProps', 'autoHideDuration']);\n  const buttonStyle = snackbarState.getIn(['actionProps', 'buttonStyle'], {});\n  const iconProps = snackbarState.get('iconProps');\n\n  let content = null;\n  switch (contentType) {\n    case CONTENT_TYPE.erp:\n      content = <ErpContent details={details} />;\n      break;\n    case CONTENT_TYPE.pricingUpdateErrorMessage:\n      content = <PricingUpdateError details={details} />;\n      break;\n    default:\n      break;\n  }\n\n  const handleClose = (event?: React.SyntheticEvent, reason?: string) => {\n    if (reason === 'clickaway') {\n      return;\n    }\n    setSnackbarClosed();\n  };\n\n  return (\n    <div className={classes.root}>\n      <Snackbar\n        open={isSnackbarOpen}\n        autoHideDuration={\n          autoHideDuration === null\n            ? null\n            : autoHideDuration\n              ? autoHideDuration\n              : 5000}\n        onClose={handleClose}\n        anchorOrigin={anchorOrigin}\n      >\n        <Alert\n          icon={\n            iconProps ? <img {...iconProps} /> : null\n          }\n          severity={severity}\n          onClose={handleClose}\n          className={backgroundColor ? classes[backgroundColor] : null}\n          {\n          ...isPimToolAndWhite\n            ? {\n              classes: {\n                icon: classes.pimSuccessIcon,\n                message: classes.pimSuccessMessage,\n                action: classes.pimSuccessCloseIcon\n              }\n            }\n            : {}\n          }\n          style={{ display: 'flex', alignItems: 'center' }}\n        >\n          {\n            content\n              ? content\n              : <Grid>\n                {message}\n                {\n                  (action && label) && <Button className={classes.button} color={isPimToolAndWhite ? 'primary' : 'default'} style={{ ...buttonStyle }} onClick={onclick}>\n                    {label}\n                  </Button>\n                }\n              </Grid>\n          }\n        </Alert>\n      </Snackbar>\n    </div>\n  );\n};\n\nconst mapStateToProps = (state) => {\n  return {\n    snackbarState: makeSelectSnackbarOptions()(state),\n    site: makeSelectSite()(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => ({\n  setSnackbarClosed: () => {\n    dispatch(new SetSnackbarClosedAction());\n  },\n  dispatch,\n});\n\nexport default compose<React.ComponentClass<ICustomizedSnackBarComponentProps>>(\n  withStyles(styles, {\n    withTheme: true\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CustomizedSnackbar);","import * as React from 'react';\nimport { Theme, WithStyles, withStyles } from '@material-ui/core/styles';\nimport { compose } from 'redux';\nimport { StyleRules } from '@material-ui/styles';\nimport { Grid, List as ReactList, ListItem, Typography, WithTheme} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\n\ninterface IErpContentComponentProps {\n  details: IMap<Map<string, any>>;\n}\n\ninterface IErpContentProps extends IErpContentComponentProps {\n}\n\ntype ErpContentProps = IErpContentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    maxWidth: 720,\n  },\n  list: {\n    maxHeight: 264,\n    overflowY: 'auto',\n  }\n});\n\nconst ErpContent: React.FC<ErpContentProps> = (props) => {\n  const {\n    classes,\n    details,\n  } = props;\n\n  const header = details.get('header') ?? '';\n  const subHeader = details.get('subHeader') ?? '';\n  const secondaryDetails = details.get('secondaryDetails') ?? List();\n  const erpId = details.get('erpId') ? `- ${details.get('erpId')}` : '';\n\n  return (\n    <Grid container={true} direction='column' spacing={1} className={classes.root}>\n      {\n        header && (\n          <Grid item={true}>\n            <Typography variant={(header && !subHeader && !secondaryDetails.size) ? 'body2' : 'h6'} color='inherit'>\n              {header} {erpId}\n            </Typography>\n          </Grid>\n        )\n      }\n      {\n        subHeader && (\n          <Grid item={true}>\n            <Typography variant='body1' color='inherit'>\n              {subHeader}\n            </Typography>\n          </Grid>\n        )\n      }\n      {\n        secondaryDetails.size ? (\n          <Grid item={true}>\n            <ReactList disablePadding={true} className={classes.list}>\n              {secondaryDetails.map((detail, index: number) => (\n                <ListItem key={index} disableGutters={true}>\n                  <Typography variant='body1' color='inherit' style={{ width: 16 }}>\n                      {`-`}\n                  </Typography>\n                  <div style={{ width: 'calc(100% - 16px)'}}>\n                    <Typography variant='body1' color='inherit'>\n                      {detail?.get('text') || ''}\n                    </Typography>\n                  </div>\n                </ListItem>\n              ))}\n            </ReactList>\n          </Grid>\n        ) : null\n      }\n    </Grid>\n  );\n};\n\nexport default compose<React.ComponentClass<IErpContentComponentProps>>(\n  withStyles(styles, {\n    withTheme: true\n  })\n)(ErpContent);","import * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { WithStyles, withStyles } from '@material-ui/core/styles';\nimport { StyleRules } from '@material-ui/styles';\nimport { Grid, Typography, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper } from '@material-ui/core';\nimport { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\n\ninterface IErpError {\n  productNumber?: string;\n  itemNumber?: string;\n  errorCode?: string;\n  errorMessage?: string;\n}\n\ninterface IPricingUpdateErrorComponentProps {\n  details: IMap<Map<string, any>>;\n}\n\ntype PricingUpdateErrorProps = IPricingUpdateErrorComponentProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (): StyleRules<{}, 'root' | 'tableContainer' | 'errorMessageCell'> => ({\n  root: {\n    maxWidth: 820,\n  },\n  tableContainer: {\n    maxHeight: '50vh',\n    overflowY: 'auto',\n  },\n  errorMessageCell: {\n    wordBreak: 'break-word',\n  },\n});\n\nconst PricingUpdateError: React.FC<PricingUpdateErrorProps> = (props) => {\n  const {\n    classes,\n    details,\n  } = props;\n\n  const { t } = useTranslation('translations');\n  const successHeader = details.get('successHeader');\n  const erpErrors: List<IMap<IErpError>> = details.get('erpErrors') ?? List();\n  const errorCodePrefix = t('productPricingUpdateSnackBarError.errorCodePrefix');\n\n  return (\n    <Grid container={true} direction='column' spacing={1} className={classes.root}>\n      {\n        successHeader && (\n          <Grid item={true}>\n            <Typography variant={'h6'} color='inherit'>\n              {successHeader}\n            </Typography>\n          </Grid>\n        )\n      }\n      <Grid item={true}>\n        <Typography variant='h6' color='inherit'>\n          {t('productPricingUpdateSnackBarError.title')}\n        </Typography>\n      </Grid>\n      <TableContainer component={Paper} className={classes.tableContainer}>\n        <Table aria-label='product pricing update error table'>\n          <TableHead>\n            <TableRow>\n              <TableCell>{t('productPricingUpdateSnackBarError.productNumberHeader')}</TableCell>\n              <TableCell>{t('productPricingUpdateSnackBarError.itemNumberHeader')}</TableCell>\n              <TableCell>{t('productPricingUpdateSnackBarError.errorHeader')}</TableCell>\n            </TableRow>\n          </TableHead>\n          <TableBody>\n            {erpErrors.map((error, index) => {\n              const errorCode = error.get('errorCode');\n              const errorMessage = errorCode ? `${errorCodePrefix} ${errorCode}: ${error.get('errorMessage')}` : error.get('errorMessage');\n              return (\n                <TableRow key={index}>\n                  <TableCell>\n                    {error.get('productNumber')}\n                  </TableCell>\n                  <TableCell>{error.get('itemNumber')}</TableCell>\n                  <TableCell className={classes.errorMessageCell}>{errorMessage}</TableCell>\n                </TableRow>\n              );\n            })}\n          </TableBody>\n        </Table>\n      </TableContainer>\n    </Grid>\n  );\n};\n\nexport default withStyles(styles)(PricingUpdateError);\n","import * as React from 'react';\nimport {\n    connect,\n} from 'react-redux';\nimport {\n    compose\n} from 'redux';\nimport {\n    IAction,\n    IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n    withStyles,\n    WithStyles,\n    Theme, Tooltip,\n} from '@material-ui/core';\nimport {\n    SelectTemplateProjectAction,\n    LoadingSearchedTemplateAction,\n    DeleteTemplateAndSearchTemplatesAction, DuplicateTemplateAction,\n} from '../../../modules/ProjectModule/actions';\nimport {\n    createStructuredSelector\n} from 'reselect';\nimport Project from '../../../models/Project';\nimport { togglePath } from '../../../components/TogglePath/utils';\nimport {EDIT_TEMPLATE_PATH} from '../../../constants';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../../modules/RouterModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n    withTranslation,\n    WithTranslation\n} from 'react-i18next';\nimport { Filter, Option } from '../../../models';\nimport ActionButton from '../../../components/_CellRenderers/ActionButton';\nimport {SetOverlayComponentPropsAction, ToggleOverlayComponentAction} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\n\ninterface ICustomActionButtonComponentProps {\n    template: IMap<Project>;\n    options: Option<Project>;\n    filters: Filter;\n    searchTerm: string;\n    disabled?: boolean;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n    dispatch: (s: IAction) => void;\n    location: IMap<IRouterReducerLocation>;\n    selectTemplateId: (templateId: number) => void;\n    duplicateTemplate: (templateId: number) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n    const {\n        dispatch,\n        template,\n        location,\n        options,\n        searchTerm,\n        filters,\n        t,\n        selectTemplateId,\n        duplicateTemplate,\n        disabled = false,\n    } = props;\n\n    const templateId = template.get('id');\n\n    const handleDelete = () => {\n        const mutableFilters: any = {\n            'and': []\n        };\n        if (searchTerm) {\n            mutableFilters.and.push({\n                'name': {\n                    'like': searchTerm\n                }\n            });\n        }\n        filters && mutableFilters.and.push(...(filters as any).and); // tslint:disable-line\n        if (mutableFilters.and.length === 0) {\n            delete mutableFilters.and;\n        }\n        dispatch(new LoadingSearchedTemplateAction());\n        dispatch(new DeleteTemplateAndSearchTemplatesAction({\n                id: templateId,\n                templateName: template.get('name') ?? '',\n                specIds: template.get('specs')?.map(spec => spec.get('id'))?.join(',') ?? '',\n                options,\n                filters: mutableFilters\n            })\n        );\n    };\n\n    const handleEditTemplate = () => {\n        selectTemplateId(templateId);\n        togglePath({\n            pathName: `${EDIT_TEMPLATE_PATH}/${templateId}`,\n            dispatch,\n            location,\n        })()();\n    };\n\n    const menuItems = [\n        {\n            key: '__editTemplate',\n            caption: t('TemplateActions.editTemplate'),\n            onClick: () => handleEditTemplate()\n        },\n        {\n            key: '__duplicateMasterTemplate',\n            caption: t('TemplateActions.duplicateTemplate'),\n            onClick: () => {\n                duplicateTemplate(templateId);\n                dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: template.get('name') } }));\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: true\n                }));\n            }\n        }\n    ];\n\n    const deleteMenuItem = {\n        key: '__deleteTemplate',\n        caption: t('TemplateActions.deleteTemplate'),\n    };\n\n    return (\n        <ActionButton\n            id={templateId}\n            name={template.get('name')}\n            menuItems={menuItems}\n            deleteMenuItem={deleteMenuItem}\n            deleteItem={handleDelete}\n            withLoading={false}\n            disabled={disabled}\n            tooltip={disabled ? t('MasterActions.disabledWithNoPermission') : ''}\n        />\n    );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n    return {\n        dispatch,\n        duplicateTemplate: (templateId: number) => dispatch(new DuplicateTemplateAction({ templateId })),\n        selectTemplateId: (templateId: number) => dispatch(new SelectTemplateProjectAction({ projectId: templateId }))\n    };\n};\n\nconst mapStateToProps = createStructuredSelector({\n    location: makeSelectLocation(),\n});\n\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n    withTranslation('translations'),\n    withStyles(styles),\n    connect(mapStateToProps, mapDispatchToProps)\n)(CustomActionButton);\n","import * as React from 'react';\nimport {\n  connect, useSelector,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  Map,\n  List as ImmutableList,\n  List\n} from 'immutable';\nimport {\n  makeSelectSearchedTemplates, makeSelectSearchedTemplatesCount, makeSelectSearchedTemplatesHasNextPage, makeSelectSearchingTemplates\n} from '../../modules/ProjectModule/selectors';\nimport {\n  LoadingSearchedTemplateAction, SearchTemplatesAction\n} from '../../modules/ProjectModule/actions';\nimport {\n  debounce\n} from 'lodash';\nimport {\n  makeSelectConfigAtsSvgProps, makeSelectIdentityObject,\n  makeSelectTemplateTranslationObject,\n  makeSelectUserFirmId,\n  makeSelectUserHasMasterTemplate,\n  makeSelectUserIsAtsUser,\n} from '../../modules/AtsModule/selectors';\nimport {\n  COLUMN_TYPES,\n  CREATE_NEW_TEMPLATE_PATH,\n  TEMPLATE_DETAIL_PATH,\n} from '../../constants';\nimport { togglePath } from '../../components/TogglePath/utils';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../modules/RouterModule/selectors';\nimport NotFound from '../../components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\n\nimport {Project, Option, TableColumn, SearchArgs, SavedFilter, Identity} from '../../models';\nimport { TablePaginationActions} from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport ToolBar from '../../components/ToolBar';\nimport ColumnSelector from '../../components/ColumnsSelector';\nimport {\n  LinkCell,\n  TextCell\n} from '../../components/_CellRenderers';\nimport { AtsSvgMaster } from '../../components/AtsSvg';\nimport { SelectMasterSpecAction } from '../../modules/SpecModule/actions';\nimport MasterTemplateFilter, { FORM_NAME as MASTER_TEMPLATE_LIST_FILTER_FORM } from './MasterTemplateFilter';\nimport CustomActionButtonForTemplate from './_CustomCellRenderers/CustomActionButtonForTemplate';\nimport CopyModal from '../CopyModal';\nimport { makeSelectFilterList } from '../../modules/AccountModule/selectors';\nimport { GetFiltersByType, GetOfficesByFirmIdAction } from '../../modules/AccountModule/actions';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport InfoBar from '../../components/InfoBar';\nimport { buildingType } from '../ProjectList';\n\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<Project> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\n// INTERFACES\n\ninterface IMasterListComponentProps {\n}\n\ninterface IMasterListProps extends IMasterListComponentProps {\n  dispatch: (s: IAction) => void;\n  searchTemplates: (options: Option<Project>, filters?: object) => void;\n  searchedTemplates: Map<number, IMap<Project>>;\n  searchedTemplatesHasNextPage: boolean;\n  searchingTemplates: boolean;\n  theme: Theme;\n  location: IMap<IRouterReducerLocation>;\n  hasMasterTemplateRole: boolean;\n  userIsAtsUser: boolean;\n  templateColumnsList: List<IMap<SavedFilter>>;\n  configAtsSvgProps: object;\n  templateTranslationObject: object;\n  firmId: number;\n  identity: IMap<Identity>;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[100],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n    // position: 'sticky',\n    // top: 0,\n    // zIndex: 9001 /* It's over 9000!!!!! */\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n});\n\ntype IMasterList = IMasterListProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  page: number;\n  searchTerm: string;\n  openFilterDrawer: boolean;\n  openColumnsDrawer: boolean;\n  options: Option<Project>;\n  filters: object;\n  masterTemplateListFilterUniqueKey: any;\n}\n\nclass MasterList extends React.Component<IMasterList, IState> {\n\n  public templateColumns = [\n    { id: 'Template Title', label: 'MasterListPage.templateTitleColumn', path: ['name'], display: true, sortable: true },\n    { id: 'Template Facility Type', label: 'MasterListPage.buildingTypeColumn', path: ['building'], display: true, sortable: true },\n    { id: 'Template Created by', label: 'MasterListPage.templateCreatedByColumn',  path: ['createdBy', 'user', 'name'], display: false, sortable: true },\n    { id: 'Template Created Date', label: 'MasterListPage.templateCreatedDateColumn', path: ['createdDate'], display: false, sortable: true },\n    { id: 'Template Last Updated by', label: 'MasterListPage.templateLastUpdatedBy', path: ['modifiedBy', 'user', 'name'], display: false, sortable: true },\n    { id: 'Template Updated Date', label: 'MasterListPage.templateUpdatedDateColumn', path: ['modifiedDate'], display: true, sortable: true },\n    { id: 'Actions', label: 'MasterListPage.actionsColumn', display: true, sortable: true },\n  ];\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  public constructor(props) {\n    super(props);\n    this.state = {\n      // someone mixed concept 'columnsToDisplay' with 'columnsToSort', make sure unsortable columns appear before sortable columns or you have to do refactor to seperate concerns, 2020-03-11 https://atsinc.atlassian.net/browse/PT-1261\n      columnsToDisplay: this.templateColumns,\n      openFilterDrawer: false,\n      openColumnsDrawer: false,\n      page: 0,\n      searchTerm: '',\n      filters: null,\n      options: defaultOptions,\n      masterTemplateListFilterUniqueKey: '',\n    };\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n      openColumnsDrawer: false\n    }));\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState(prevState => ({\n      openColumnsDrawer: !prevState.openColumnsDrawer,\n      openFilterDrawer: false\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<Project>) => {\n    const {\n      dispatch,\n      searchTemplates,\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage,\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        const filters: any = {\n          'and': []\n        };\n        if (this.state.searchTerm) {\n          filters.and.push({\n            'name': {\n              'like': this.state.searchTerm\n            }\n          });\n        }\n        this.state.filters && filters.and.push(...(this.state.filters as any).and); // tslint:disable-line\n        dispatch(new LoadingSearchedTemplateAction());\n        if (filters.and.length === 0) {\n          delete filters.and;\n        }\n        searchTemplates(\n            this.state.options,\n            filters\n        );\n      }\n    );\n  }\n\n  public componentDidMount() {\n    const { dispatch, templateColumnsList, firmId } = this.props;\n\n    this.setSearchArgsAndSearch({});\n\n    if (!templateColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.SPEC_TEMPLATE_LIST_COLUMNS }));\n    }\n    if (firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { dispatch, searchedTemplates, firmId } = this.props;\n    const { options, page } = this.state;\n\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no projects returned\n    if (prevProps.searchedTemplates.size && searchedTemplates.size === 0 && options.offset) {\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: options.offset - options.limit\n        },\n        page: page - 1\n      });\n    }\n\n    if (prevProps.firmId !== firmId && firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => this.setState({ columnsToDisplay: newColumnsToDisplay });\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddTemplate = () => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: CREATE_NEW_TEMPLATE_PATH,\n      dispatch,\n      location,\n    })()();\n  }\n\n  public handleAdd = (path: string) => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: path,\n      dispatch,\n      location,\n    })()();\n  }\n\n  public render() {\n    const {\n      theme,\n      classes,\n      searchingTemplates,\n      searchedTemplates,\n      searchedTemplatesHasNextPage,\n      t,\n      hasMasterTemplateRole,\n      userIsAtsUser,\n      configAtsSvgProps,\n      templateTranslationObject,\n      identity,\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      filters,\n      page,\n      openFilterDrawer,\n      openColumnsDrawer,\n      columnsToDisplay,\n    } = this.state;\n\n    const canEditTemplate = hasMasterTemplateRole || userIsAtsUser;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display);\n\n    const labels = {\n      emptyviewSubtitle: t('MasterListPage.noTemplate'),\n      emptyviewAddButton: t('MasterListPage.addTemplate'),\n      emptyviewAlt: t('MasterListPage.noTemplateAlt'),\n      emptyviewNotFound: t('MasterListPage.noTemplateFound', templateTranslationObject),\n    };\n    const isGuestUser = !identity;\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        {isGuestUser ? <InfoBar>\n          {t('infoBar.text1')}\n        </InfoBar> : null}\n        <CopyModal defaultDestinationType='master' />\n        <ToolBar\n          onClickColumnButton={this.toggleColumnsDrawer}\n          onClickFilterButton={this.toggleFilterDrawer}\n          searchTooltip={t('MasterListPage.templateSearchTooltip', templateTranslationObject)}\n          searchTerm={searchTerm}\n          showFab={canEditTemplate}\n          onClickFab={() => this.handleAdd(CREATE_NEW_TEMPLATE_PATH)}\n          handleSubmit={this.handleSubmit}\n        />\n        <FilterChipsBar\n          filtersFormId={MASTER_TEMPLATE_LIST_FILTER_FORM}\n          setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n          options={options}\n          setUniqueKey={(key) => this.setState({ masterTemplateListFilterUniqueKey: key})}\n        />\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            {\n              searchingTemplates\n                ? <NotFound\n                    svgIcon={<LoadingImage />}\n                    firstRow={<LinearProgress color='secondary'/>}\n                    secondRow={<Typography variant='h4'>{t('MasterListPage.loading')}</Typography>}\n                    paperContainer={true}\n                  />\n                : <Paper\n                    className={classes.tableContainer}\n                  >\n                    {\n                      searchedTemplates.size !== 0\n                        ? <>\n                            <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                              <Table>\n                                <TableHead classes={{ root: classes.tableHead }}>\n                                  <TableRow>\n                                    {filteredColumnsToDisplay.map((header, index) => (\n                                        <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                          {t(header.label)}\n                                        </TableCell>\n                                    ))}\n                                  </TableRow>\n                                </TableHead>\n                                <TableBody>\n                                  {searchedTemplates && searchedTemplates.map((template: IMap<Project>, index: number) => (\n                                      <TableRow id={`${index}`} key={index} hover={true}>\n                                        {template && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                          switch (column.id) {\n                                            case 'Template Title': return <LinkCell key={column.label} name={template.getIn(column.path)} refresh={false} linkPath={`${TEMPLATE_DETAIL_PATH}/${template.get('id')}`} />;\n                                            case 'Template Facility Type': return <TextCell key={column.label} text={buildingType(template.getIn(column.path))} />;\n                                            case 'Template Created by': return <TextCell key={column.label} text={template.getIn(column.path)} />;\n                                            case 'Template Created Date': return <TextCell key={column.label} text={utcToLocal(template.getIn(column.path))} />;\n                                            case 'Template Updated Date': return <TextCell key={column.label} text={utcToLocal(template.getIn(column.path))} />;\n                                            case 'Template Last Updated by': return <TextCell key={column.label} text={template.getIn(column.path)} />;\n                                            case 'Actions': return <CustomActionButtonForTemplate disabled={!canEditTemplate} key={column.label} template={template} options={options} filters={filters} searchTerm={searchTerm}/>;\n                                          }\n                                        })}\n                                      </TableRow>\n                                  ))}\n                                </TableBody>\n                              </Table>\n                            </div>\n                            <TablePagination\n                              className={classes.pagination}\n                              component='div'\n                              labelRowsPerPage={t('Pagination.rowsPerPage')}\n                              onChangePage={this.handlePageChange}\n                              rowsPerPageOptions={[5, 10, 25, 50]}\n                              onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                              count={searchedTemplatesHasNextPage ? options.offset + options.limit + 1 : options.offset + searchedTemplates?.size}\n                              labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                              rowsPerPage={options.limit}\n                              page={page}\n                              ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                              classes={{\n                                toolbar: classes.paginationToolbar\n                              }}\n                            />\n                          </>\n                        : <EmptyView\n                            svg={<AtsSvgMaster color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary[900] }} {...configAtsSvgProps} />}\n                            disabledAdd={!canEditTemplate}\n                            onButtonClicked={this.handleAddTemplate}\n                            emptyviewSubtitle={labels.emptyviewSubtitle}\n                            emptyviewAddButton={labels.emptyviewAddButton}\n                            emptyviewAlt={labels.emptyviewAlt}\n                            emptyviewNotFound={labels.emptyviewNotFound}\n                          />\n                    }\n                </Paper>\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            <MasterTemplateFilter\n              toggleDrawer={this.toggleFilterDrawer}\n              open={this.state.openFilterDrawer}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n              uniqueKey={this.state.masterTemplateListFilterUniqueKey}\n              setUniqueKey={(key) => this.setState({ masterTemplateListFilterUniqueKey: key})}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openColumnsDrawer ? '370px' : 0,\n            }}\n          >\n            <ColumnSelector\n              columnType={COLUMN_TYPES.SPEC_TEMPLATE_LIST_COLUMNS}\n              defaultColumns={this.templateColumns}\n              columnsToDisplay={columnsToDisplay}\n              disabledColumns={['Template Title']}\n              isOpen={openColumnsDrawer}\n              onClose={this.toggleColumnsDrawer}\n              handleColumnsChange={this.handleColumnsChange}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchTemplates: (options: Option<Project>, filters?: object) => {\n      dispatch(new SearchTemplatesAction({\n        options,\n        filters\n      }));\n    },\n    setSelectedMasterSpec: (id: number) => dispatch(new SelectMasterSpecAction(id)),\n  };\n};\n\nconst makeMapStateToProps = () => {\n  const searchedTemplatesSelect = makeSelectSearchedTemplates();\n  const searchedTemplatesHasNextPageSelect = makeSelectSearchedTemplatesHasNextPage();\n  const searchingTemplatesSelect = makeSelectSearchingTemplates();\n  const locationSelect = makeSelectLocation();\n  const hasMasterTemplateRole = makeSelectUserHasMasterTemplate();\n  const userIsAtsUser = makeSelectUserIsAtsUser();\n  const templateColumnsListSelect = makeSelectFilterList(COLUMN_TYPES.SPEC_TEMPLATE_LIST_COLUMNS);\n  const configAtsSvgPropsSelect = makeSelectConfigAtsSvgProps();\n  const templateTranslationObjectSelect = makeSelectTemplateTranslationObject();\n  const userFirmIdSelect = makeSelectUserFirmId();\n  const identitySelect = makeSelectIdentityObject();\n  return (state) => ({\n    searchedTemplates: searchedTemplatesSelect(state),\n    searchedTemplatesHasNextPage: searchedTemplatesHasNextPageSelect(state),\n    searchingTemplates: searchingTemplatesSelect(state),\n    location: locationSelect(state),\n    hasMasterTemplateRole: hasMasterTemplateRole(state),\n    userIsAtsUser: userIsAtsUser(state),\n    templateColumnsList: templateColumnsListSelect(state),\n    configAtsSvgProps: configAtsSvgPropsSelect(state),\n    templateTranslationObject: templateTranslationObjectSelect(state),\n    firmId: userFirmIdSelect(state),\n    identity: identitySelect(state),\n  });\n};\n\nexport default compose<React.ComponentClass<IMasterListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(MasterList);\n","/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n  var theme = params.theme,\n      name = params.name,\n      props = params.props;\n\n  if (!theme || !theme.props || !theme.props[name]) {\n    return props;\n  } // Resolve default props, code borrow from React source.\n  // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n  var defaultProps = theme.props[name];\n  var propName;\n\n  for (propName in defaultProps) {\n    if (props[propName] === undefined) {\n      props[propName] = defaultProps[propName];\n    }\n  }\n\n  return props;\n}\n\nexport default getThemeProps;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { duration } from '../styles/transitions';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport useForkRef from '../utils/useForkRef';\nvar styles = {\n  entering: {\n    opacity: 1\n  },\n  entered: {\n    opacity: 1\n  }\n};\nvar defaultTimeout = {\n  enter: duration.enteringScreen,\n  exit: duration.leavingScreen\n};\n/**\n * The Fade transition is used by the [Modal](/components/modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Fade = React.forwardRef(function Fade(props, ref) {\n  var children = props.children,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onExit = props.onExit,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n      other = _objectWithoutProperties(props, [\"children\", \"in\", \"onEnter\", \"onExit\", \"style\", \"timeout\"]);\n\n  var theme = useTheme();\n  var handleRef = useForkRef(children.ref, ref);\n\n  var handleEnter = function handleEnter(node, isAppearing) {\n    reflow(node); // So the animation always start from the start.\n\n    var transitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n\n  var handleExit = function handleExit(node) {\n    var transitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n\n    if (onExit) {\n      onExit(node);\n    }\n  };\n\n  return React.createElement(Transition, _extends({\n    appear: true,\n    in: inProp,\n    onEnter: handleEnter,\n    onExit: handleExit,\n    timeout: timeout\n  }, other), function (state, childProps) {\n    return React.cloneElement(children, _extends({\n      style: _extends({\n        opacity: 0,\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], {}, style, {}, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Fade.propTypes = {\n  /**\n   * A single child content element.\n   */\n  children: PropTypes.element,\n\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Fade;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Fade from '../Fade';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    // Improve scrollable dialog support.\n    zIndex: -1,\n    position: 'fixed',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    right: 0,\n    bottom: 0,\n    top: 0,\n    left: 0,\n    backgroundColor: 'rgba(0, 0, 0, 0.5)',\n    WebkitTapHighlightColor: 'transparent',\n    // Disable scroll capabilities.\n    touchAction: 'none'\n  },\n\n  /* Styles applied to the root element if `invisible={true}`. */\n  invisible: {\n    backgroundColor: 'transparent'\n  }\n};\nvar Backdrop = React.forwardRef(function Backdrop(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$invisible = props.invisible,\n      invisible = _props$invisible === void 0 ? false : _props$invisible,\n      open = props.open,\n      transitionDuration = props.transitionDuration,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\"]);\n\n  return React.createElement(Fade, _extends({\n    in: open,\n    timeout: transitionDuration\n  }, other), React.createElement(\"div\", {\n    className: clsx(classes.root, className, invisible && classes.invisible),\n    \"aria-hidden\": true,\n    ref: ref\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   */\n  invisible: PropTypes.bool,\n\n  /**\n   * If `true`, the backdrop is open.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiBackdrop'\n})(Backdrop);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport useForkRef from '../utils/useForkRef';\n\nfunction getScale(value) {\n  return \"scale(\".concat(value, \", \").concat(Math.pow(value, 2), \")\");\n}\n\nvar styles = {\n  entering: {\n    opacity: 1,\n    transform: getScale(1)\n  },\n  entered: {\n    opacity: 1,\n    transform: 'none'\n  }\n};\n/**\n * The Grow transition is used by the [Tooltip](/components/tooltips/) and\n * [Popover](/components/popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Grow = React.forwardRef(function Grow(props, ref) {\n  var children = props.children,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onExit = props.onExit,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? 'auto' : _props$timeout,\n      other = _objectWithoutProperties(props, [\"children\", \"in\", \"onEnter\", \"onExit\", \"style\", \"timeout\"]);\n\n  var timer = React.useRef();\n  var autoTimeout = React.useRef();\n  var handleRef = useForkRef(children.ref, ref);\n  var theme = useTheme();\n\n  var handleEnter = function handleEnter(node, isAppearing) {\n    reflow(node); // So the animation always start from the start.\n\n    var _getTransitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    }),\n        transitionDuration = _getTransitionProps.duration,\n        delay = _getTransitionProps.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay\n    })].join(',');\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n\n  var handleExit = function handleExit(node) {\n    var _getTransitionProps2 = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    }),\n        transitionDuration = _getTransitionProps2.duration,\n        delay = _getTransitionProps2.delay;\n\n    var duration;\n\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration: duration,\n      delay: delay\n    }), theme.transitions.create('transform', {\n      duration: duration * 0.666,\n      delay: delay || duration * 0.333\n    })].join(',');\n    node.style.opacity = '0';\n    node.style.transform = getScale(0.75);\n\n    if (onExit) {\n      onExit(node);\n    }\n  };\n\n  var addEndListener = function addEndListener(_, next) {\n    if (timeout === 'auto') {\n      timer.current = setTimeout(next, autoTimeout.current || 0);\n    }\n  };\n\n  React.useEffect(function () {\n    return function () {\n      clearTimeout(timer.current);\n    };\n  }, []);\n  return React.createElement(Transition, _extends({\n    appear: true,\n    in: inProp,\n    onEnter: handleEnter,\n    onExit: handleExit,\n    addEndListener: addEndListener,\n    timeout: timeout === 'auto' ? null : timeout\n  }, other), function (state, childProps) {\n    return React.cloneElement(children, _extends({\n      style: _extends({\n        opacity: 0,\n        transform: getScale(0.75),\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], {}, style, {}, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Grow.propTypes = {\n  /**\n   * A single child content element.\n   */\n  children: PropTypes.element,\n\n  /**\n   * If `true`, show the component; triggers the enter or exit animation.\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  }), PropTypes.oneOf(['auto'])])\n} : void 0;\nGrow.muiSupportAuto = true;\nexport default Grow;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    margin: 0,\n    padding: '16px 24px',\n    flex: '0 0 auto'\n  }\n};\nvar DialogTitle = React.forwardRef(function DialogTitle(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"disableTypography\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), disableTypography ? children : React.createElement(Typography, {\n    component: \"h2\",\n    variant: \"h6\"\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogTitle.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the children won't be wrapped by a typography component.\n   * For instance, this can be useful to render an h4 instead of the default h2.\n   */\n  disableTypography: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiDialogTitle'\n})(DialogTitle);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the root element if `disableGutters={false}`. */\n    gutters: _defineProperty({\n      paddingLeft: theme.spacing(2),\n      paddingRight: theme.spacing(2)\n    }, theme.breakpoints.up('sm'), {\n      paddingLeft: theme.spacing(3),\n      paddingRight: theme.spacing(3)\n    }),\n\n    /* Styles applied to the root element if `variant=\"regular\"`. */\n    regular: theme.mixins.toolbar,\n\n    /* Styles applied to the root element if `variant=\"dense\"`. */\n    dense: {\n      minHeight: 48\n    }\n  };\n};\nvar Toolbar = React.forwardRef(function Toolbar(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'regular' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"variant\"]);\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, classes[variant], className, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Toolbar.propTypes = {\n  /**\n   * Toolbar children, usually a mixture of `IconButton`, `Button` and `Typography`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, disables gutter padding.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['regular', 'dense'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiToolbar'\n})(Toolbar);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport Paper from '../Paper';\nexport var styles = function styles(theme) {\n  var backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'flex',\n      flexDirection: 'column',\n      width: '100%',\n      boxSizing: 'border-box',\n      // Prevent padding issue with the Modal and fixed positioned AppBar.\n      zIndex: theme.zIndex.appBar,\n      flexShrink: 0\n    },\n\n    /* Styles applied to the root element if `position=\"fixed\"`. */\n    positionFixed: {\n      position: 'fixed',\n      top: 0,\n      left: 'auto',\n      right: 0,\n      '@media print': {\n        // Prevent the app bar to be visible on each printed page.\n        position: 'absolute'\n      }\n    },\n\n    /* Styles applied to the root element if `position=\"absolute\"`. */\n    positionAbsolute: {\n      position: 'absolute',\n      top: 0,\n      left: 'auto',\n      right: 0\n    },\n\n    /* Styles applied to the root element if `position=\"sticky\"`. */\n    positionSticky: {\n      // ⚠️ sticky is not supported by IE 11.\n      position: 'sticky',\n      top: 0,\n      left: 'auto',\n      right: 0\n    },\n\n    /* Styles applied to the root element if `position=\"static\"`. */\n    positionStatic: {\n      position: 'static',\n      transform: 'translateZ(0)' // Make sure we can see the elevation.\n\n    },\n\n    /* Styles applied to the root element if `position=\"relative\"`. */\n    positionRelative: {\n      position: 'relative'\n    },\n\n    /* Styles applied to the root element if `color=\"default\"`. */\n    colorDefault: {\n      backgroundColor: backgroundColorDefault,\n      color: theme.palette.getContrastText(backgroundColorDefault)\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      backgroundColor: theme.palette.primary.main,\n      color: theme.palette.primary.contrastText\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      backgroundColor: theme.palette.secondary.main,\n      color: theme.palette.secondary.contrastText\n    }\n  };\n};\nvar AppBar = React.forwardRef(function AppBar(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$position = props.position,\n      position = _props$position === void 0 ? 'fixed' : _props$position,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"position\"]);\n\n  return React.createElement(Paper, _extends({\n    square: true,\n    component: \"header\",\n    elevation: 4,\n    className: clsx(classes.root, classes[\"position\".concat(capitalize(position))], className, color !== 'inherit' && classes[\"color\".concat(capitalize(color))], {\n      fixed: 'mui-fixed'\n    }[position]),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The positioning type. The behavior of the different options is described\n   * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\n   * Note: `sticky` is not universally supported and will fall back to `static` when unavailable.\n   */\n  position: PropTypes.oneOf(['absolute', 'fixed', 'relative', 'static', 'sticky'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiAppBar'\n})(AppBar);","import warning from 'tiny-warning';\nimport { createRule } from 'jss';\n\nvar now = Date.now();\nvar fnValuesNs = \"fnValues\" + now;\nvar fnRuleNs = \"fnStyle\" + ++now;\n\nvar functionPlugin = function functionPlugin() {\n  return {\n    onCreateRule: function onCreateRule(name, decl, options) {\n      if (typeof decl !== 'function') return null;\n      var rule = createRule(name, {}, options);\n      rule[fnRuleNs] = decl;\n      return rule;\n    },\n    onProcessStyle: function onProcessStyle(style, rule) {\n      // We need to extract function values from the declaration, so that we can keep core unaware of them.\n      // We need to do that only once.\n      // We don't need to extract functions on each style update, since this can happen only once.\n      // We don't support function values inside of function rules.\n      if (fnValuesNs in rule || fnRuleNs in rule) return style;\n      var fnValues = {};\n\n      for (var prop in style) {\n        var value = style[prop];\n        if (typeof value !== 'function') continue;\n        delete style[prop];\n        fnValues[prop] = value;\n      }\n\n      rule[fnValuesNs] = fnValues;\n      return style;\n    },\n    onUpdate: function onUpdate(data, rule, sheet, options) {\n      var styleRule = rule;\n      var fnRule = styleRule[fnRuleNs]; // If we have a style function, the entire rule is dynamic and style object\n      // will be returned from that function.\n\n      if (fnRule) {\n        // Empty object will remove all currently defined props\n        // in case function rule returns a falsy value.\n        styleRule.style = fnRule(data) || {};\n\n        if (process.env.NODE_ENV === 'development') {\n          for (var prop in styleRule.style) {\n            if (typeof styleRule.style[prop] === 'function') {\n              process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Function values inside function rules are not supported.') : void 0;\n              break;\n            }\n          }\n        }\n      }\n\n      var fnValues = styleRule[fnValuesNs]; // If we have a fn values map, it is a rule with function values.\n\n      if (fnValues) {\n        for (var _prop in fnValues) {\n          styleRule.prop(_prop, fnValues[_prop](data), options);\n        }\n      }\n    }\n  };\n};\n\nexport default functionPlugin;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { RuleList } from 'jss';\n\nvar at = '@global';\nvar atPrefix = '@global ';\n\nvar GlobalContainerRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalContainerRule(key, styles, options) {\n    this.type = 'global';\n    this.at = at;\n    this.isProcessed = false;\n    this.key = key;\n    this.options = options;\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var selector in styles) {\n      this.rules.add(selector, styles[selector]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = GlobalContainerRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (rule) this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.rules.toString();\n  };\n\n  return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalPrefixedRule(key, style, options) {\n    this.type = 'global';\n    this.at = at;\n    this.isProcessed = false;\n    this.key = key;\n    this.options = options;\n    var selector = key.substr(atPrefix.length);\n    this.rule = options.jss.createRule(selector, style, _extends({}, options, {\n      parent: this\n    }));\n  }\n\n  var _proto2 = GlobalPrefixedRule.prototype;\n\n  _proto2.toString = function toString(options) {\n    return this.rule ? this.rule.toString(options) : '';\n  };\n\n  return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n  var parts = selector.split(separatorRegExp);\n  var scoped = '';\n\n  for (var i = 0; i < parts.length; i++) {\n    scoped += scope + \" \" + parts[i].trim();\n    if (parts[i + 1]) scoped += ', ';\n  }\n\n  return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule, sheet) {\n  var options = rule.options,\n      style = rule.style;\n  var rules = style ? style[at] : null;\n  if (!rules) return;\n\n  for (var name in rules) {\n    sheet.addRule(name, rules[name], _extends({}, options, {\n      selector: addScope(name, rule.selector)\n    }));\n  }\n\n  delete style[at];\n}\n\nfunction handlePrefixedGlobalRule(rule, sheet) {\n  var options = rule.options,\n      style = rule.style;\n\n  for (var prop in style) {\n    if (prop[0] !== '@' || prop.substr(0, at.length) !== at) continue;\n    var selector = addScope(prop.substr(at.length), rule.selector);\n    sheet.addRule(selector, style[prop], _extends({}, options, {\n      selector: selector\n    }));\n    delete style[prop];\n  }\n}\n/**\n * Convert nested rules to separate, remove them from original styles.\n */\n\n\nfunction jssGlobal() {\n  function onCreateRule(name, styles, options) {\n    if (!name) return null;\n\n    if (name === at) {\n      return new GlobalContainerRule(name, styles, options);\n    }\n\n    if (name[0] === '@' && name.substr(0, atPrefix.length) === atPrefix) {\n      return new GlobalPrefixedRule(name, styles, options);\n    }\n\n    var parent = options.parent;\n\n    if (parent) {\n      if (parent.type === 'global' || parent.options.parent && parent.options.parent.type === 'global') {\n        options.scoped = false;\n      }\n    }\n\n    if (options.scoped === false) {\n      options.selector = name;\n    }\n\n    return null;\n  }\n\n  function onProcessRule(rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return;\n    handleNestedGlobalContainerRule(rule, sheet);\n    handlePrefixedGlobalRule(rule, sheet);\n  }\n\n  return {\n    onCreateRule: onCreateRule,\n    onProcessRule: onProcessRule\n  };\n}\n\nexport default jssGlobal;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport warning from 'tiny-warning';\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n/**\n * Convert nested rules to separate, remove them from original styles.\n */\n\nfunction jssNested() {\n  // Get a function to be used for $ref replacement.\n  function getReplaceRef(container, sheet) {\n    return function (match, key) {\n      var rule = container.getRule(key) || sheet && sheet.getRule(key);\n\n      if (rule) {\n        return rule.selector;\n      }\n\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Could not find the referenced rule \\\"\" + key + \"\\\" in \\\"\" + (container.options.meta || container.toString()) + \"\\\".\") : void 0;\n      return key;\n    };\n  }\n\n  function replaceParentRefs(nestedProp, parentProp) {\n    var parentSelectors = parentProp.split(separatorRegExp);\n    var nestedSelectors = nestedProp.split(separatorRegExp);\n    var result = '';\n\n    for (var i = 0; i < parentSelectors.length; i++) {\n      var parent = parentSelectors[i];\n\n      for (var j = 0; j < nestedSelectors.length; j++) {\n        var nested = nestedSelectors[j];\n        if (result) result += ', '; // Replace all & by the parent or prefix & with the parent.\n\n        result += nested.indexOf('&') !== -1 ? nested.replace(parentRegExp, parent) : parent + \" \" + nested;\n      }\n    }\n\n    return result;\n  }\n\n  function getOptions(rule, container, prevOptions) {\n    // Options has been already created, now we only increase index.\n    if (prevOptions) return _extends({}, prevOptions, {\n      index: prevOptions.index + 1\n    });\n    var nestingLevel = rule.options.nestingLevel;\n    nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n    var options = _extends({}, rule.options, {\n      nestingLevel: nestingLevel,\n      index: container.indexOf(rule) + 1 // We don't need the parent name to be set options for chlid.\n\n    });\n\n    delete options.name;\n    return options;\n  }\n\n  function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style') return style;\n    var styleRule = rule;\n    var container = styleRule.options.parent;\n    var options;\n    var replaceRef;\n\n    for (var prop in style) {\n      var isNested = prop.indexOf('&') !== -1;\n      var isNestedConditional = prop[0] === '@';\n      if (!isNested && !isNestedConditional) continue;\n      options = getOptions(styleRule, container, options);\n\n      if (isNested) {\n        var selector = replaceParentRefs(prop, styleRule.selector); // Lazily create the ref replacer function just once for\n        // all nested rules within the sheet.\n\n        if (!replaceRef) replaceRef = getReplaceRef(container, sheet); // Replace all $refs.\n\n        selector = selector.replace(refRegExp, replaceRef);\n        container.addRule(selector, style[prop], _extends({}, options, {\n          selector: selector\n        }));\n      } else if (isNestedConditional) {\n        // Place conditional right after the parent rule to ensure right ordering.\n        container.addRule(prop, {}, options).addRule(styleRule.key, style[prop], {\n          selector: styleRule.selector\n        });\n      }\n\n      delete style[prop];\n    }\n\n    return style;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle\n  };\n}\n\nexport default jssNested;\n","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","import hyphenate from 'hyphenate-style-name';\n\n/**\n * Convert camel cased property names to dash separated.\n */\n\nfunction convertCase(style) {\n  var converted = {};\n\n  for (var prop in style) {\n    var key = prop.indexOf('--') === 0 ? prop : hyphenate(prop);\n    converted[key] = style[prop];\n  }\n\n  if (style.fallbacks) {\n    if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n  }\n\n  return converted;\n}\n/**\n * Allow camel cased property names by converting them back to dasherized.\n */\n\n\nfunction camelCase() {\n  function onProcessStyle(style) {\n    if (Array.isArray(style)) {\n      // Handle rules like @font-face, which can have multiple styles in an array\n      for (var index = 0; index < style.length; index++) {\n        style[index] = convertCase(style[index]);\n      }\n\n      return style;\n    }\n\n    return convertCase(style);\n  }\n\n  function onChangeValue(value, prop, rule) {\n    if (prop.indexOf('--') === 0) {\n      return value;\n    }\n\n    var hyphenatedProp = hyphenate(prop); // There was no camel case in place\n\n    if (prop === hyphenatedProp) return value;\n    rule.prop(hyphenatedProp, value); // Core will ignore that property value we set the proper one above.\n\n    return null;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default camelCase;\n","import { hasCSSTOMSupport } from 'jss';\n\nvar px = hasCSSTOMSupport && CSS ? CSS.px : 'px';\nvar ms = hasCSSTOMSupport && CSS ? CSS.ms : 'ms';\nvar percent = hasCSSTOMSupport && CSS ? CSS.percent : '%';\n/**\n * Generated jss-plugin-default-unit CSS property units\n */\n\nvar defaultUnits = {\n  // Animation properties\n  'animation-delay': ms,\n  'animation-duration': ms,\n  // Background properties\n  'background-position': px,\n  'background-position-x': px,\n  'background-position-y': px,\n  'background-size': px,\n  // Border Properties\n  border: px,\n  'border-bottom': px,\n  'border-bottom-left-radius': px,\n  'border-bottom-right-radius': px,\n  'border-bottom-width': px,\n  'border-left': px,\n  'border-left-width': px,\n  'border-radius': px,\n  'border-right': px,\n  'border-right-width': px,\n  'border-top': px,\n  'border-top-left-radius': px,\n  'border-top-right-radius': px,\n  'border-top-width': px,\n  'border-width': px,\n  'border-block': px,\n  'border-block-end': px,\n  'border-block-end-width': px,\n  'border-block-start': px,\n  'border-block-start-width': px,\n  'border-block-width': px,\n  'border-inline': px,\n  'border-inline-end': px,\n  'border-inline-end-width': px,\n  'border-inline-start': px,\n  'border-inline-start-width': px,\n  'border-inline-width': px,\n  'border-start-start-radius': px,\n  'border-start-end-radius': px,\n  'border-end-start-radius': px,\n  'border-end-end-radius': px,\n  // Margin properties\n  margin: px,\n  'margin-bottom': px,\n  'margin-left': px,\n  'margin-right': px,\n  'margin-top': px,\n  'margin-block': px,\n  'margin-block-end': px,\n  'margin-block-start': px,\n  'margin-inline': px,\n  'margin-inline-end': px,\n  'margin-inline-start': px,\n  // Padding properties\n  padding: px,\n  'padding-bottom': px,\n  'padding-left': px,\n  'padding-right': px,\n  'padding-top': px,\n  'padding-block': px,\n  'padding-block-end': px,\n  'padding-block-start': px,\n  'padding-inline': px,\n  'padding-inline-end': px,\n  'padding-inline-start': px,\n  // Mask properties\n  'mask-position-x': px,\n  'mask-position-y': px,\n  'mask-size': px,\n  // Width and height properties\n  height: px,\n  width: px,\n  'min-height': px,\n  'max-height': px,\n  'min-width': px,\n  'max-width': px,\n  // Position properties\n  bottom: px,\n  left: px,\n  top: px,\n  right: px,\n  inset: px,\n  'inset-block': px,\n  'inset-block-end': px,\n  'inset-block-start': px,\n  'inset-inline': px,\n  'inset-inline-end': px,\n  'inset-inline-start': px,\n  // Shadow properties\n  'box-shadow': px,\n  'text-shadow': px,\n  // Column properties\n  'column-gap': px,\n  'column-rule': px,\n  'column-rule-width': px,\n  'column-width': px,\n  // Font and text properties\n  'font-size': px,\n  'font-size-delta': px,\n  'letter-spacing': px,\n  'text-decoration-thickness': px,\n  'text-indent': px,\n  'text-stroke': px,\n  'text-stroke-width': px,\n  'word-spacing': px,\n  // Motion properties\n  motion: px,\n  'motion-offset': px,\n  // Outline properties\n  outline: px,\n  'outline-offset': px,\n  'outline-width': px,\n  // Perspective properties\n  perspective: px,\n  'perspective-origin-x': percent,\n  'perspective-origin-y': percent,\n  // Transform properties\n  'transform-origin': percent,\n  'transform-origin-x': percent,\n  'transform-origin-y': percent,\n  'transform-origin-z': percent,\n  // Transition properties\n  'transition-delay': ms,\n  'transition-duration': ms,\n  // Alignment properties\n  'vertical-align': px,\n  'flex-basis': px,\n  // Some random properties\n  'shape-margin': px,\n  size: px,\n  gap: px,\n  // Grid properties\n  grid: px,\n  'grid-gap': px,\n  'row-gap': px,\n  'grid-row-gap': px,\n  'grid-column-gap': px,\n  'grid-template-rows': px,\n  'grid-template-columns': px,\n  'grid-auto-rows': px,\n  'grid-auto-columns': px,\n  // Not existing properties.\n  // Used to avoid issues with jss-plugin-expand integration.\n  'box-shadow-x': px,\n  'box-shadow-y': px,\n  'box-shadow-blur': px,\n  'box-shadow-spread': px,\n  'font-line-height': px,\n  'text-shadow-x': px,\n  'text-shadow-y': px,\n  'text-shadow-blur': px\n};\n\n/**\n * Clones the object and adds a camel cased property version.\n */\n\nfunction addCamelCasedVersion(obj) {\n  var regExp = /(-[a-z])/g;\n\n  var replace = function replace(str) {\n    return str[1].toUpperCase();\n  };\n\n  var newObj = {};\n\n  for (var key in obj) {\n    newObj[key] = obj[key];\n    newObj[key.replace(regExp, replace)] = obj[key];\n  }\n\n  return newObj;\n}\n\nvar units = addCamelCasedVersion(defaultUnits);\n/**\n * Recursive deep style passing function\n */\n\nfunction iterate(prop, value, options) {\n  if (value == null) return value;\n\n  if (Array.isArray(value)) {\n    for (var i = 0; i < value.length; i++) {\n      value[i] = iterate(prop, value[i], options);\n    }\n  } else if (typeof value === 'object') {\n    if (prop === 'fallbacks') {\n      for (var innerProp in value) {\n        value[innerProp] = iterate(innerProp, value[innerProp], options);\n      }\n    } else {\n      for (var _innerProp in value) {\n        value[_innerProp] = iterate(prop + \"-\" + _innerProp, value[_innerProp], options);\n      }\n    } // eslint-disable-next-line no-restricted-globals\n\n  } else if (typeof value === 'number' && isNaN(value) === false) {\n    var unit = options[prop] || units[prop]; // Add the unit if available, except for the special case of 0px.\n\n    if (unit && !(value === 0 && unit === px)) {\n      return typeof unit === 'function' ? unit(value).toString() : \"\" + value + unit;\n    }\n\n    return value.toString();\n  }\n\n  return value;\n}\n/**\n * Add unit to numeric values.\n */\n\n\nfunction defaultUnit(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var camelCasedOptions = addCamelCasedVersion(options);\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n\n    for (var prop in style) {\n      style[prop] = iterate(prop, style[prop], camelCasedOptions);\n    }\n\n    return style;\n  }\n\n  function onChangeValue(value, prop) {\n    return iterate(prop, value, camelCasedOptions);\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default defaultUnit;\n","import isInBrowser from 'is-in-browser';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\n\n// Export javascript style and css style vendor prefixes.\nvar js = '';\nvar css = '';\nvar vendor = '';\nvar browser = '';\nvar isTouch = isInBrowser && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside.\n\nif (isInBrowser) {\n  // Order matters. We need to check Webkit the last one because\n  // other vendors use to add Webkit prefixes to some properties\n  var jsCssMap = {\n    Moz: '-moz-',\n    ms: '-ms-',\n    O: '-o-',\n    Webkit: '-webkit-'\n  };\n\n  var _document$createEleme = document.createElement('p'),\n      style = _document$createEleme.style;\n\n  var testProp = 'Transform';\n\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      js = key;\n      css = jsCssMap[key];\n      break;\n    }\n  } // Correctly detect the Edge browser.\n\n\n  if (js === 'Webkit' && 'msHyphens' in style) {\n    js = 'ms';\n    css = jsCssMap.ms;\n    browser = 'edge';\n  } // Correctly detect the Safari browser.\n\n\n  if (js === 'Webkit' && '-apple-trailing-word' in style) {\n    vendor = 'apple';\n  }\n}\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String, vendor: String, browser: String}}\n * @api public\n */\n\n\nvar prefix = {\n  js: js,\n  css: css,\n  vendor: vendor,\n  browser: browser,\n  isTouch: isTouch\n};\n\n/**\n * Test if a keyframe at-rule should be prefixed or not\n *\n * @param {String} vendor prefix string for the current browser.\n * @return {String}\n * @api public\n */\n\nfunction supportedKeyframes(key) {\n  // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a'\n  if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules.\n  // https://caniuse.com/#search=keyframes\n\n  if (prefix.js === 'ms') return key;\n  return \"@\" + prefix.css + \"keyframes\" + key.substr(10);\n}\n\n// https://caniuse.com/#search=appearance\n\nvar appearence = {\n  noPrefill: ['appearance'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'appearance') return false;\n    if (prefix.js === 'ms') return \"-webkit-\" + prop;\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=color-adjust\n\nvar colorAdjust = {\n  noPrefill: ['color-adjust'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'color-adjust') return false;\n    if (prefix.js === 'Webkit') return prefix.css + \"print-\" + prop;\n    return prop;\n  }\n};\n\nvar regExp = /[-\\s]+(.)?/g;\n/**\n * Replaces the letter with the capital letter\n *\n * @param {String} match\n * @param {String} c\n * @return {String}\n * @api private\n */\n\nfunction toUpper(match, c) {\n  return c ? c.toUpperCase() : '';\n}\n/**\n * Convert dash separated strings to camel-cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\n\nfunction camelize(str) {\n  return str.replace(regExp, toUpper);\n}\n\n/**\n * Convert dash separated strings to pascal cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction pascalize(str) {\n  return camelize(\"-\" + str);\n}\n\n// but we can use a longhand property instead.\n// https://caniuse.com/#search=mask\n\nvar mask = {\n  noPrefill: ['mask'],\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^mask/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var longhand = 'mask-image';\n\n      if (camelize(longhand) in style) {\n        return prop;\n      }\n\n      if (prefix.js + pascalize(longhand) in style) {\n        return prefix.css + prop;\n      }\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=text-orientation\n\nvar textOrientation = {\n  noPrefill: ['text-orientation'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'text-orientation') return false;\n\n    if (prefix.vendor === 'apple' && !prefix.isTouch) {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=transform\n\nvar transform = {\n  noPrefill: ['transform'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transform') return false;\n\n    if (options.transform) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=transition\n\nvar transition = {\n  noPrefill: ['transition'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transition') return false;\n\n    if (options.transition) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=writing-mode\n\nvar writingMode = {\n  noPrefill: ['writing-mode'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'writing-mode') return false;\n\n    if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=user-select\n\nvar userSelect = {\n  noPrefill: ['user-select'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'user-select') return false;\n\n    if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=multicolumn\n// https://github.com/postcss/autoprefixer/issues/491\n// https://github.com/postcss/autoprefixer/issues/177\n\nvar breakPropsOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^break-/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var jsProp = \"WebkitColumn\" + pascalize(prop);\n      return jsProp in style ? prefix.css + \"column-\" + prop : false;\n    }\n\n    if (prefix.js === 'Moz') {\n      var _jsProp = \"page\" + pascalize(prop);\n\n      return _jsProp in style ? \"page-\" + prop : false;\n    }\n\n    return false;\n  }\n};\n\n// See https://github.com/postcss/autoprefixer/issues/324.\n\nvar inlineLogicalOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^(border|margin|padding)-inline/.test(prop)) return false;\n    if (prefix.js === 'Moz') return prop;\n    var newProp = prop.replace('-inline', '');\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\n// Camelization is required because we can't test using.\n// CSS syntax for e.g. in FF.\n\nvar unprefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    return camelize(prop) in style ? prop : false;\n  }\n};\n\nvar prefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var pascalized = pascalize(prop); // Return custom CSS variable without prefixing.\n\n    if (prop[0] === '-') return prop; // Return already prefixed value without prefixing.\n\n    if (prop[0] === '-' && prop[1] === '-') return prop;\n    if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback.\n\n    if (prefix.js !== 'Webkit' && \"Webkit\" + pascalized in style) return \"-webkit-\" + prop;\n    return false;\n  }\n};\n\n// https://caniuse.com/#search=scroll-snap\n\nvar scrollSnap = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop.substring(0, 11) !== 'scroll-snap') return false;\n\n    if (prefix.js === 'ms') {\n      return \"\" + prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=overscroll-behavior\n\nvar overscrollBehavior = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'overscroll-behavior') return false;\n\n    if (prefix.js === 'ms') {\n      return prefix.css + \"scroll-chaining\";\n    }\n\n    return prop;\n  }\n};\n\nvar propMap = {\n  'flex-grow': 'flex-positive',\n  'flex-shrink': 'flex-negative',\n  'flex-basis': 'flex-preferred-size',\n  'justify-content': 'flex-pack',\n  order: 'flex-order',\n  'align-items': 'flex-align',\n  'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin.\n\n}; // Support old flex spec from 2012.\n\nvar flex2012 = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var newProp = propMap[prop];\n    if (!newProp) return false;\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\nvar propMap$1 = {\n  flex: 'box-flex',\n  'flex-grow': 'box-flex',\n  'flex-direction': ['box-orient', 'box-direction'],\n  order: 'box-ordinal-group',\n  'align-items': 'box-align',\n  'flex-flow': ['box-orient', 'box-direction'],\n  'justify-content': 'box-pack'\n};\nvar propKeys = Object.keys(propMap$1);\n\nvar prefixCss = function prefixCss(p) {\n  return prefix.css + p;\n}; // Support old flex spec from 2009.\n\n\nvar flex2009 = {\n  supportedProperty: function supportedProperty(prop, style, _ref) {\n    var multiple = _ref.multiple;\n\n    if (propKeys.indexOf(prop) > -1) {\n      var newProp = propMap$1[prop];\n\n      if (!Array.isArray(newProp)) {\n        return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n      }\n\n      if (!multiple) return false;\n\n      for (var i = 0; i < newProp.length; i++) {\n        if (!(prefix.js + pascalize(newProp[0]) in style)) {\n          return false;\n        }\n      }\n\n      return newProp.map(prefixCss);\n    }\n\n    return false;\n  }\n};\n\n// plugins = [\n//   ...plugins,\n//    breakPropsOld,\n//    inlineLogicalOld,\n//    unprefixed,\n//    prefixed,\n//    scrollSnap,\n//    flex2012,\n//    flex2009\n// ]\n// Plugins without 'noPrefill' value, going last.\n// 'flex-*' plugins should be at the bottom.\n// 'flex2009' going after 'flex2012'.\n// 'prefixed' going after 'unprefixed'\n\nvar plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009];\nvar propertyDetectors = plugins.filter(function (p) {\n  return p.supportedProperty;\n}).map(function (p) {\n  return p.supportedProperty;\n});\nvar noPrefill = plugins.filter(function (p) {\n  return p.noPrefill;\n}).reduce(function (a, p) {\n  a.push.apply(a, _toConsumableArray(p.noPrefill));\n  return a;\n}, []);\n\nvar el;\nvar cache = {};\n\nif (isInBrowser) {\n  el = document.createElement('p'); // We test every property on vendor prefix requirement.\n  // Once tested, result is cached. It gives us up to 70% perf boost.\n  // http://jsperf.com/element-style-object-access-vs-plain-object\n  //\n  // Prefill cache with known css properties to reduce amount of\n  // properties we need to feature test at runtime.\n  // http://davidwalsh.name/vendor-prefix\n\n  var computed = window.getComputedStyle(document.documentElement, '');\n\n  for (var key$1 in computed) {\n    // eslint-disable-next-line no-restricted-globals\n    if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1];\n  } // Properties that cannot be correctly detected using the\n  // cache prefill method.\n\n\n  noPrefill.forEach(function (x) {\n    return delete cache[x];\n  });\n}\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `false` if not supported.\n *\n * @param {String} prop dash separated\n * @param {Object} [options]\n * @return {String|Boolean}\n * @api public\n */\n\n\nfunction supportedProperty(prop, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  // For server-side rendering.\n  if (!el) return prop; // Remove cache for benchmark tests or return property from the cache.\n\n  if (process.env.NODE_ENV !== 'benchmark' && cache[prop] != null) {\n    return cache[prop];\n  } // Check if 'transition' or 'transform' natively supported in browser.\n\n\n  if (prop === 'transition' || prop === 'transform') {\n    options[prop] = prop in el.style;\n  } // Find a plugin for current prefix property.\n\n\n  for (var i = 0; i < propertyDetectors.length; i++) {\n    cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found.\n\n    if (cache[prop]) break;\n  } // Reset styles for current property.\n  // Firefox can even throw an error for invalid properties, e.g., \"0\".\n\n\n  try {\n    el.style[prop] = '';\n  } catch (err) {\n    return false;\n  }\n\n  return cache[prop];\n}\n\nvar cache$1 = {};\nvar transitionProperties = {\n  transition: 1,\n  'transition-property': 1,\n  '-webkit-transition': 1,\n  '-webkit-transition-property': 1\n};\nvar transPropsRegExp = /(^\\s*[\\w-]+)|, (\\s*[\\w-]+)(?![^()]*\\))/g;\nvar el$1;\n/**\n * Returns prefixed value transition/transform if needed.\n *\n * @param {String} match\n * @param {String} p1\n * @param {String} p2\n * @return {String}\n * @api private\n */\n\nfunction prefixTransitionCallback(match, p1, p2) {\n  if (p1 === 'var') return 'var';\n  if (p1 === 'all') return 'all';\n  if (p2 === 'all') return ', all';\n  var prefixedValue = p1 ? supportedProperty(p1) : \", \" + supportedProperty(p2);\n  if (!prefixedValue) return p1 || p2;\n  return prefixedValue;\n}\n\nif (isInBrowser) el$1 = document.createElement('p');\n/**\n * Returns prefixed value if needed. Returns `false` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\n\nfunction supportedValue(property, value) {\n  // For server-side rendering.\n  var prefixedValue = value;\n  if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'.\n  // We want only prefixable values here.\n  // eslint-disable-next-line no-restricted-globals\n\n  if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) {\n    return prefixedValue;\n  } // Create cache key for current value.\n\n\n  var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache.\n\n  if (process.env.NODE_ENV !== 'benchmark' && cache$1[cacheKey] != null) {\n    return cache$1[cacheKey];\n  } // IE can even throw an error in some cases, for e.g. style.content = 'bar'.\n\n\n  try {\n    // Test value as it is.\n    el$1.style[property] = prefixedValue;\n  } catch (err) {\n    // Return false if value not supported.\n    cache$1[cacheKey] = false;\n    return false;\n  } // If 'transition' or 'transition-property' property.\n\n\n  if (transitionProperties[property]) {\n    prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback);\n  } else if (el$1.style[property] === '') {\n    // Value with a vendor prefix.\n    prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n\n    if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value.\n\n    el$1.style[property] = prefixedValue; // Return false if value not supported.\n\n    if (el$1.style[property] === '') {\n      cache$1[cacheKey] = false;\n      return false;\n    }\n  } // Reset styles for current property.\n\n\n  el$1.style[property] = ''; // Write current value to cache.\n\n  cache$1[cacheKey] = prefixedValue;\n  return cache$1[cacheKey];\n}\n\nexport { prefix, supportedKeyframes, supportedProperty, supportedValue };\n","import { supportedKeyframes, supportedValue, supportedProperty } from 'css-vendor';\nimport { toCssValue } from 'jss';\n\n/**\n * Add vendor prefix to a property name when needed.\n */\n\nfunction jssVendorPrefixer() {\n  function onProcessRule(rule) {\n    if (rule.type === 'keyframes') {\n      var atRule = rule;\n      atRule.at = supportedKeyframes(atRule.at);\n    }\n  }\n\n  function prefixStyle(style) {\n    for (var prop in style) {\n      var value = style[prop];\n\n      if (prop === 'fallbacks' && Array.isArray(value)) {\n        style[prop] = value.map(prefixStyle);\n        continue;\n      }\n\n      var changeProp = false;\n      var supportedProp = supportedProperty(prop);\n      if (supportedProp && supportedProp !== prop) changeProp = true;\n      var changeValue = false;\n      var supportedValue$1 = supportedValue(supportedProp, toCssValue(value));\n      if (supportedValue$1 && supportedValue$1 !== value) changeValue = true;\n\n      if (changeProp || changeValue) {\n        if (changeProp) delete style[prop];\n        style[supportedProp || prop] = supportedValue$1 || value;\n      }\n    }\n\n    return style;\n  }\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n    return prefixStyle(style);\n  }\n\n  function onChangeValue(value, prop) {\n    return supportedValue(prop, toCssValue(value)) || value;\n  }\n\n  return {\n    onProcessRule: onProcessRule,\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default jssVendorPrefixer;\n","/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n  var sort = function sort(prop0, prop1) {\n    if (prop0.length === prop1.length) {\n      return prop0 > prop1 ? 1 : -1;\n    }\n\n    return prop0.length - prop1.length;\n  };\n\n  return {\n    onProcessStyle: function onProcessStyle(style, rule) {\n      if (rule.type !== 'style') return style;\n      var newStyle = {};\n      var props = Object.keys(style).sort(sort);\n\n      for (var i = 0; i < props.length; i++) {\n        newStyle[props[i]] = style[props[i]];\n      }\n\n      return newStyle;\n    }\n  };\n}\n\nexport default jssPropsSort;\n","import functions from 'jss-plugin-rule-value-function';\nimport global from 'jss-plugin-global';\nimport nested from 'jss-plugin-nested';\nimport camelCase from 'jss-plugin-camel-case';\nimport defaultUnit from 'jss-plugin-default-unit';\nimport vendorPrefixer from 'jss-plugin-vendor-prefixer';\nimport propsSort from 'jss-plugin-props-sort'; // Subset of jss-preset-default with only the plugins the Material-UI components are using.\n\nfunction jssPreset() {\n  return {\n    plugins: [functions(), global(), nested(), camelCase(), defaultUnit(), // Disable the vendor prefixer server-side, it does nothing.\n    // This way, we can get a performance boost.\n    // In the documentation, we are using `autoprefixer` to solve this problem.\n    typeof window === 'undefined' ? null : vendorPrefixer(), propsSort()]\n  };\n}\n\nexport default jssPreset;","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUnchecked');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z\"\n}), 'RadioButtonChecked');","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport RadioButtonUncheckedIcon from '../internal/svg-icons/RadioButtonUnchecked';\nimport RadioButtonCheckedIcon from '../internal/svg-icons/RadioButtonChecked';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    root: {\n      position: 'relative',\n      display: 'flex',\n      '&$checked $layer': {\n        transform: 'scale(1)',\n        transition: theme.transitions.create('transform', {\n          easing: theme.transitions.easing.easeOut,\n          duration: theme.transitions.duration.shortest\n        })\n      }\n    },\n    layer: {\n      left: 0,\n      position: 'absolute',\n      transform: 'scale(0)',\n      transition: theme.transitions.create('transform', {\n        easing: theme.transitions.easing.easeIn,\n        duration: theme.transitions.duration.shortest\n      })\n    },\n    checked: {}\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nfunction RadioButtonIcon(props) {\n  var checked = props.checked,\n      classes = props.classes,\n      fontSize = props.fontSize;\n  return React.createElement(\"div\", {\n    className: clsx(classes.root, checked && classes.checked)\n  }, React.createElement(RadioButtonUncheckedIcon, {\n    fontSize: fontSize\n  }), React.createElement(RadioButtonCheckedIcon, {\n    fontSize: fontSize,\n    className: classes.layer\n  }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? RadioButtonIcon.propTypes = {\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The size of the radio.\n   * `small` is equivalent to the dense radio styling.\n   */\n  fontSize: PropTypes.oneOf(['small', 'default'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateRadioButtonIcon'\n})(RadioButtonIcon);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport SwitchBase from '../internal/SwitchBase';\nimport RadioButtonIcon from './RadioButtonIcon';\nimport { fade } from '../styles/colorManipulator';\nimport capitalize from '../utils/capitalize';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport withStyles from '../styles/withStyles';\nimport useRadioGroup from '../RadioGroup/useRadioGroup';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Pseudo-class applied to the root element if `checked={true}`. */\n    checked: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }\n  };\n};\nvar defaultCheckedIcon = React.createElement(RadioButtonIcon, {\n  checked: true\n});\nvar defaultIcon = React.createElement(RadioButtonIcon, null);\nvar Radio = React.forwardRef(function Radio(props, ref) {\n  var checkedProp = props.checked,\n      classes = props.classes,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      nameProp = props.name,\n      onChangeProp = props.onChange,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = _objectWithoutProperties(props, [\"checked\", \"classes\", \"color\", \"disabled\", \"name\", \"onChange\", \"size\"]);\n\n  var radioGroup = useRadioGroup();\n  var checked = checkedProp;\n  var onChange = createChainedFunction(onChangeProp, radioGroup && radioGroup.onChange);\n  var name = nameProp;\n\n  if (radioGroup) {\n    if (typeof checked === 'undefined') {\n      checked = radioGroup.value === props.value;\n    }\n\n    if (typeof name === 'undefined') {\n      name = radioGroup.name;\n    }\n  }\n\n  return React.createElement(SwitchBase, _extends({\n    color: color,\n    type: \"radio\",\n    icon: React.cloneElement(defaultIcon, {\n      fontSize: size === 'small' ? 'small' : 'default'\n    }),\n    checkedIcon: React.cloneElement(defaultCheckedIcon, {\n      fontSize: size === 'small' ? 'small' : 'default'\n    }),\n    classes: {\n      root: clsx(classes.root, classes[\"color\".concat(capitalize(color))]),\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    name: name,\n    checked: checked,\n    onChange: onChange,\n    ref: ref,\n    disabled: disabled\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Radio.propTypes = {\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary', 'default']),\n\n  /**\n   * If `true`, the switch will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The size of the radio.\n   * `small` is equivalent to the dense radio styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiRadio'\n})(Radio);","import React from 'react';\nimport RadioGroupContext from './RadioGroupContext';\nexport default function useRadioGroup() {\n  return React.useContext(RadioGroupContext);\n}","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreHoriz');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '../styles/withStyles';\nimport { emphasize } from '../styles/colorManipulator';\nimport MoreHorizIcon from '../internal/svg-icons/MoreHoriz';\n\nvar styles = function styles(theme) {\n  return {\n    root: {\n      display: 'flex'\n    },\n    icon: {\n      width: 24,\n      height: 16,\n      backgroundColor: theme.palette.grey[100],\n      color: theme.palette.grey[700],\n      borderRadius: 2,\n      marginLeft: theme.spacing(0.5),\n      marginRight: theme.spacing(0.5),\n      cursor: 'pointer',\n      '&:hover, &:focus': {\n        backgroundColor: theme.palette.grey[200]\n      },\n      '&:active': {\n        boxShadow: theme.shadows[0],\n        backgroundColor: emphasize(theme.palette.grey[200], 0.12)\n      }\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\n\nfunction BreadcrumbCollapsed(props) {\n  var classes = props.classes,\n      other = _objectWithoutProperties(props, [\"classes\"]);\n\n  return React.createElement(\"li\", _extends({\n    className: classes.root\n  }, other), React.createElement(MoreHorizIcon, {\n    className: classes.icon\n  }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? BreadcrumbCollapsed.propTypes = {\n  /**\n   * @ignore\n   */\n  classes: PropTypes.object.isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateBreadcrumbCollapsed'\n})(BreadcrumbCollapsed);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nimport BreadcrumbCollapsed from './BreadcrumbCollapsed';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the ol element. */\n  ol: {\n    display: 'flex',\n    flexWrap: 'wrap',\n    alignItems: 'center',\n    padding: 0,\n    // Reset\n    margin: 0 // Reset\n\n  },\n\n  /* Styles applied to the li element. */\n  li: {\n    listStyle: 'none'\n  },\n\n  /* Styles applied to the separator element. */\n  separator: {\n    display: 'flex',\n    userSelect: 'none',\n    marginLeft: 8,\n    marginRight: 8\n  }\n};\n\nfunction insertSeparators(items, className, separator) {\n  return items.reduce(function (acc, current, index) {\n    if (index < items.length - 1) {\n      acc = acc.concat(current, React.createElement(\"li\", {\n        \"aria-hidden\": true,\n        key: \"separator-\".concat(index),\n        className: className\n      }, separator));\n    } else {\n      acc.push(current);\n    }\n\n    return acc;\n  }, []);\n}\n\nvar Breadcrumbs = React.forwardRef(function Breadcrumbs(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'nav' : _props$component,\n      _props$itemsAfterColl = props.itemsAfterCollapse,\n      itemsAfterCollapse = _props$itemsAfterColl === void 0 ? 1 : _props$itemsAfterColl,\n      _props$itemsBeforeCol = props.itemsBeforeCollapse,\n      itemsBeforeCollapse = _props$itemsBeforeCol === void 0 ? 1 : _props$itemsBeforeCol,\n      _props$maxItems = props.maxItems,\n      maxItems = _props$maxItems === void 0 ? 8 : _props$maxItems,\n      _props$separator = props.separator,\n      separator = _props$separator === void 0 ? '/' : _props$separator,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"component\", \"itemsAfterCollapse\", \"itemsBeforeCollapse\", \"maxItems\", \"separator\"]);\n\n  var _React$useState = React.useState(false),\n      expanded = _React$useState[0],\n      setExpanded = _React$useState[1];\n\n  var renderItemsBeforeAndAfter = function renderItemsBeforeAndAfter(allItems) {\n    var handleClickExpand = function handleClickExpand() {\n      setExpanded(true);\n    }; // This defends against someone passing weird input, to ensure that if all\n    // items would be shown anyway, we just show all items without the EllipsisItem\n\n\n    if (itemsBeforeCollapse + itemsAfterCollapse >= allItems.length) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.error(['Material-UI: you have provided an invalid combination of props to the Breadcrumbs.', \"itemsAfterCollapse={\".concat(itemsAfterCollapse, \"} + itemsBeforeCollapse={\").concat(itemsBeforeCollapse, \"} >= maxItems={\").concat(maxItems, \"}\")].join('\\n'));\n      }\n\n      return allItems;\n    }\n\n    return [].concat(_toConsumableArray(allItems.slice(0, itemsBeforeCollapse)), [React.createElement(BreadcrumbCollapsed, {\n      key: \"ellipsis\",\n      onClick: handleClickExpand\n    })], _toConsumableArray(allItems.slice(allItems.length - itemsAfterCollapse, allItems.length)));\n  };\n\n  var allItems = React.Children.toArray(children).filter(function (child) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Breadcrumbs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    return React.isValidElement(child);\n  }).map(function (child, index) {\n    return React.createElement(\"li\", {\n      className: classes.li,\n      key: \"child-\".concat(index)\n    }, child);\n  });\n  return React.createElement(Typography, _extends({\n    ref: ref,\n    component: Component,\n    color: \"textSecondary\",\n    className: clsx(classes.root, className)\n  }, other), React.createElement(\"ol\", {\n    className: classes.ol\n  }, insertSeparators(expanded || maxItems && allItems.length <= maxItems ? allItems : renderItemsBeforeAndAfter(allItems), classes.separator, separator)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Breadcrumbs.propTypes = {\n  /**\n   * The breadcrumb children.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   * By default, it maps the variant to a good default headline component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If max items is exceeded, the number of items to show after the ellipsis.\n   */\n  itemsAfterCollapse: PropTypes.number,\n\n  /**\n   * If max items is exceeded, the number of items to show before the ellipsis.\n   */\n  itemsBeforeCollapse: PropTypes.number,\n\n  /**\n   * Specifies the maximum number of breadcrumbs to display. When there are more\n   * than the maximum number, only the first `itemsBeforeCollapse` and last `itemsAfterCollapse`\n   * will be shown, with an ellipsis in between.\n   */\n  maxItems: PropTypes.number,\n\n  /**\n   * Custom separator node.\n   */\n  separator: PropTypes.node\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiBreadcrumbs'\n})(Breadcrumbs);","import PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport withWidth, { isWidthDown, isWidthUp } from '../withWidth';\nimport useTheme from '../styles/useTheme';\n/**\n * @ignore - internal component.\n */\n\nfunction HiddenJs(props) {\n  var children = props.children,\n      only = props.only,\n      width = props.width;\n  var theme = useTheme();\n  var visible = true; // `only` check is faster to get out sooner if used.\n\n  if (only) {\n    if (Array.isArray(only)) {\n      for (var i = 0; i < only.length; i += 1) {\n        var breakpoint = only[i];\n\n        if (width === breakpoint) {\n          visible = false;\n          break;\n        }\n      }\n    } else if (only && width === only) {\n      visible = false;\n    }\n  } // Allow `only` to be combined with other props. If already hidden, no need to check others.\n\n\n  if (visible) {\n    // determine visibility based on the smallest size up\n    for (var _i = 0; _i < theme.breakpoints.keys.length; _i += 1) {\n      var _breakpoint = theme.breakpoints.keys[_i];\n      var breakpointUp = props[\"\".concat(_breakpoint, \"Up\")];\n      var breakpointDown = props[\"\".concat(_breakpoint, \"Down\")];\n\n      if (breakpointUp && isWidthUp(_breakpoint, width) || breakpointDown && isWidthDown(_breakpoint, width)) {\n        visible = false;\n        break;\n      }\n    }\n  }\n\n  if (!visible) {\n    return null;\n  }\n\n  return children;\n}\n\nHiddenJs.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Specify which implementation to use.  'js' is the default, 'css' works better for\n   * server-side rendering.\n   */\n  implementation: PropTypes.oneOf(['js', 'css']),\n\n  /**\n   * You can use this prop when choosing the `js` implementation with server-side rendering.\n   *\n   * As `window.innerWidth` is unavailable on the server,\n   * we default to rendering an empty component during the first mount.\n   * You might want to use an heuristic to approximate\n   * the screen width of the client browser screen width.\n   *\n   * For instance, you could be using the user-agent or the client-hints.\n   * https://caniuse.com/#search=client%20hint\n   */\n  initialWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  lgDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  lgUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  mdDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  mdUp: PropTypes.bool,\n\n  /**\n   * Hide the given breakpoint(s).\n   */\n  only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']))]),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  smDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  smUp: PropTypes.bool,\n\n  /**\n   * @ignore\n   * width prop provided by withWidth decorator.\n   */\n  width: PropTypes.string.isRequired,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xlDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xlUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xsDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xsUp: PropTypes.bool\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  HiddenJs.propTypes = exactProp(HiddenJs.propTypes);\n}\n\nexport default withWidth()(HiddenJs);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nimport useTheme from '../styles/useTheme';\n\nvar styles = function styles(theme) {\n  var hidden = {\n    display: 'none'\n  };\n  return theme.breakpoints.keys.reduce(function (acc, key) {\n    acc[\"only\".concat(capitalize(key))] = _defineProperty({}, theme.breakpoints.only(key), hidden);\n    acc[\"\".concat(key, \"Up\")] = _defineProperty({}, theme.breakpoints.up(key), hidden);\n    acc[\"\".concat(key, \"Down\")] = _defineProperty({}, theme.breakpoints.down(key), hidden);\n    return acc;\n  }, {});\n};\n/**\n * @ignore - internal component.\n */\n\n\nfunction HiddenCss(props) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      only = props.only,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"only\"]);\n\n  var theme = useTheme();\n\n  if (process.env.NODE_ENV !== 'production') {\n    var unknownProps = Object.keys(other).filter(function (propName) {\n      var isUndeclaredBreakpoint = !theme.breakpoints.keys.some(function (breakpoint) {\n        return \"\".concat(breakpoint, \"Up\") === propName || \"\".concat(breakpoint, \"Down\") === propName;\n      });\n      return isUndeclaredBreakpoint;\n    });\n\n    if (unknownProps.length > 0) {\n      console.error(\"Material-UI: unsupported props received by `<Hidden implementation=\\\"css\\\" />`: \".concat(unknownProps.join(', '), \". Did you forget to wrap this component in a ThemeProvider declaring these breakpoints?\"));\n    }\n  }\n\n  var clsx = [];\n\n  if (className) {\n    clsx.push(className);\n  }\n\n  for (var i = 0; i < theme.breakpoints.keys.length; i += 1) {\n    var breakpoint = theme.breakpoints.keys[i];\n    var breakpointUp = props[\"\".concat(breakpoint, \"Up\")];\n    var breakpointDown = props[\"\".concat(breakpoint, \"Down\")];\n\n    if (breakpointUp) {\n      clsx.push(classes[\"\".concat(breakpoint, \"Up\")]);\n    }\n\n    if (breakpointDown) {\n      clsx.push(classes[\"\".concat(breakpoint, \"Down\")]);\n    }\n  }\n\n  if (only) {\n    var onlyBreakpoints = Array.isArray(only) ? only : [only];\n    onlyBreakpoints.forEach(function (breakpoint) {\n      clsx.push(classes[\"only\".concat(capitalize(breakpoint))]);\n    });\n  }\n\n  return React.createElement(\"div\", {\n    className: clsx.join(' ')\n  }, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? HiddenCss.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Specify which implementation to use.  'js' is the default, 'css' works better for\n   * server-side rendering.\n   */\n  implementation: PropTypes.oneOf(['js', 'css']),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  lgDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  lgUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  mdDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  mdUp: PropTypes.bool,\n\n  /**\n   * Hide the given breakpoint(s).\n   */\n  only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']))]),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  smDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  smUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xlDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xlUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xsDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xsUp: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateHiddenCss'\n})(HiddenCss);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport HiddenJs from './HiddenJs';\nimport HiddenCss from './HiddenCss';\n/**\n * Responsively hides children based on the selected implementation.\n */\n\nfunction Hidden(props) {\n  var _props$implementation = props.implementation,\n      implementation = _props$implementation === void 0 ? 'js' : _props$implementation,\n      _props$lgDown = props.lgDown,\n      lgDown = _props$lgDown === void 0 ? false : _props$lgDown,\n      _props$lgUp = props.lgUp,\n      lgUp = _props$lgUp === void 0 ? false : _props$lgUp,\n      _props$mdDown = props.mdDown,\n      mdDown = _props$mdDown === void 0 ? false : _props$mdDown,\n      _props$mdUp = props.mdUp,\n      mdUp = _props$mdUp === void 0 ? false : _props$mdUp,\n      _props$smDown = props.smDown,\n      smDown = _props$smDown === void 0 ? false : _props$smDown,\n      _props$smUp = props.smUp,\n      smUp = _props$smUp === void 0 ? false : _props$smUp,\n      _props$xlDown = props.xlDown,\n      xlDown = _props$xlDown === void 0 ? false : _props$xlDown,\n      _props$xlUp = props.xlUp,\n      xlUp = _props$xlUp === void 0 ? false : _props$xlUp,\n      _props$xsDown = props.xsDown,\n      xsDown = _props$xsDown === void 0 ? false : _props$xsDown,\n      _props$xsUp = props.xsUp,\n      xsUp = _props$xsUp === void 0 ? false : _props$xsUp,\n      other = _objectWithoutProperties(props, [\"implementation\", \"lgDown\", \"lgUp\", \"mdDown\", \"mdUp\", \"smDown\", \"smUp\", \"xlDown\", \"xlUp\", \"xsDown\", \"xsUp\"]);\n\n  if (implementation === 'js') {\n    return React.createElement(HiddenJs, _extends({\n      lgDown: lgDown,\n      lgUp: lgUp,\n      mdDown: mdDown,\n      mdUp: mdUp,\n      smDown: smDown,\n      smUp: smUp,\n      xlDown: xlDown,\n      xlUp: xlUp,\n      xsDown: xsDown,\n      xsUp: xsUp\n    }, other));\n  }\n\n  return React.createElement(HiddenCss, _extends({\n    lgDown: lgDown,\n    lgUp: lgUp,\n    mdDown: mdDown,\n    mdUp: mdUp,\n    smDown: smDown,\n    smUp: smUp,\n    xlDown: xlDown,\n    xlUp: xlUp,\n    xsDown: xsDown,\n    xsUp: xsUp\n  }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Hidden.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Specify which implementation to use.  'js' is the default, 'css' works better for\n   * server-side rendering.\n   */\n  implementation: PropTypes.oneOf(['js', 'css']),\n\n  /**\n   * You can use this prop when choosing the `js` implementation with server-side rendering.\n   *\n   * As `window.innerWidth` is unavailable on the server,\n   * we default to rendering an empty component during the first mount.\n   * You might want to use an heuristic to approximate\n   * the screen width of the client browser screen width.\n   *\n   * For instance, you could be using the user-agent or the client-hints.\n   * https://caniuse.com/#search=client%20hint\n   */\n  initialWidth: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  lgDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  lgUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  mdDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  mdUp: PropTypes.bool,\n\n  /**\n   * Hide the given breakpoint(s).\n   */\n  only: PropTypes.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), PropTypes.arrayOf(PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']))]),\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  smDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  smUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xlDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xlUp: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and down will be hidden.\n   */\n  xsDown: PropTypes.bool,\n\n  /**\n   * If `true`, screens this size and up will be hidden.\n   */\n  xsUp: PropTypes.bool\n} : void 0;\nexport default Hidden;","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Person from '../internal/svg-icons/Person';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      flexShrink: 0,\n      width: 40,\n      height: 40,\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(20),\n      lineHeight: 1,\n      borderRadius: '50%',\n      overflow: 'hidden',\n      userSelect: 'none'\n    },\n\n    /* Styles applied to the root element if not `src` or `srcSet`. */\n    colorDefault: {\n      color: theme.palette.background.default,\n      backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n    },\n\n    /* Styles applied to the root element if `variant=\"circle\"`. */\n    circle: {},\n\n    /* Styles applied to the root element if `variant=\"rounded\"`. */\n    rounded: {\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `variant=\"square\"`. */\n    square: {\n      borderRadius: 0\n    },\n\n    /* Styles applied to the img element if either `src` or `srcSet` is defined. */\n    img: {\n      width: '100%',\n      height: '100%',\n      textAlign: 'center',\n      // Handle non-square image. The property isn't supported by IE 11.\n      objectFit: 'cover',\n      // Hide alt text.\n      color: 'transparent',\n      // Hide the image broken icon, only works on Chrome.\n      textIndent: 10000\n    },\n\n    /* Styles applied to the fallback icon */\n    fallback: {\n      width: '75%',\n      height: '75%'\n    }\n  };\n};\n\nfunction useLoaded(_ref) {\n  var src = _ref.src,\n      srcSet = _ref.srcSet;\n\n  var _React$useState = React.useState(false),\n      loaded = _React$useState[0],\n      setLoaded = _React$useState[1];\n\n  React.useEffect(function () {\n    if (!src && !srcSet) {\n      return undefined;\n    }\n\n    setLoaded(false);\n    var active = true;\n    var image = new Image();\n    image.src = src;\n    image.srcSet = srcSet;\n\n    image.onload = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('loaded');\n    };\n\n    image.onerror = function () {\n      if (!active) {\n        return;\n      }\n\n      setLoaded('error');\n    };\n\n    return function () {\n      active = false;\n    };\n  }, [src, srcSet]);\n  return loaded;\n}\n\nvar Avatar = React.forwardRef(function Avatar(props, ref) {\n  var alt = props.alt,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      imgProps = props.imgProps,\n      sizes = props.sizes,\n      src = props.src,\n      srcSet = props.srcSet,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'circle' : _props$variant,\n      other = _objectWithoutProperties(props, [\"alt\", \"children\", \"classes\", \"className\", \"component\", \"imgProps\", \"sizes\", \"src\", \"srcSet\", \"variant\"]);\n\n  var children = null; // Use a hook instead of onError on the img element to support server-side rendering.\n\n  var loaded = useLoaded({\n    src: src,\n    srcSet: srcSet\n  });\n  var hasImg = src || srcSet;\n  var hasImgNotFailing = hasImg && loaded !== 'error';\n\n  if (hasImgNotFailing) {\n    children = React.createElement(\"img\", _extends({\n      alt: alt,\n      src: src,\n      srcSet: srcSet,\n      sizes: sizes,\n      className: classes.img\n    }, imgProps));\n  } else if (childrenProp != null) {\n    children = childrenProp;\n  } else if (hasImg && alt) {\n    children = alt[0];\n  } else {\n    children = React.createElement(Person, {\n      className: classes.fallback\n    });\n  }\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, classes.system, classes[variant], className, !hasImgNotFailing && classes.colorDefault),\n    ref: ref\n  }, other), children);\n});\nprocess.env.NODE_ENV !== \"production\" ? Avatar.propTypes = {\n  /**\n   * Used in combination with `src` or `srcSet` to\n   * provide an alt attribute for the rendered `img` element.\n   */\n  alt: PropTypes.string,\n\n  /**\n   * Used to render icon or text elements inside the Avatar if `src` is not set.\n   * This can be an element, or just a string.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Attributes applied to the `img` element if the component is used to display an image.\n   * It can be used to listen for the loading error event.\n   */\n  imgProps: PropTypes.object,\n\n  /**\n   * The `sizes` attribute for the `img` element.\n   */\n  sizes: PropTypes.string,\n\n  /**\n   * The `src` attribute for the `img` element.\n   */\n  src: PropTypes.string,\n\n  /**\n   * The `srcSet` attribute for the `img` element.\n   * Use this attribute for responsive image display.\n   */\n  srcSet: PropTypes.string,\n\n  /**\n   * The shape of the avatar.\n   */\n  variant: PropTypes.oneOf(['circle', 'rounded', 'square'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiAvatar'\n})(Avatar);","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CancelIcon from '../internal/svg-icons/Cancel';\nimport withStyles from '../styles/withStyles';\nimport { emphasize, fade } from '../styles/colorManipulator';\nimport useForkRef from '../utils/useForkRef';\nimport unsupportedProp from '../utils/unsupportedProp';\nimport capitalize from '../utils/capitalize';\nimport ButtonBase from '../ButtonBase';\nexport var styles = function styles(theme) {\n  var backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n  var deleteIconColor = fade(theme.palette.text.primary, 0.26);\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      fontFamily: theme.typography.fontFamily,\n      fontSize: theme.typography.pxToRem(13),\n      display: 'inline-flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      height: 32,\n      color: theme.palette.getContrastText(backgroundColor),\n      backgroundColor: backgroundColor,\n      borderRadius: 32 / 2,\n      whiteSpace: 'nowrap',\n      transition: theme.transitions.create(['background-color', 'box-shadow']),\n      // label will inherit this from root, then `clickable` class overrides this for both\n      cursor: 'default',\n      // We disable the focus ring for mouse, touch and keyboard users.\n      outline: 0,\n      textDecoration: 'none',\n      border: 'none',\n      // Remove `button` border\n      padding: 0,\n      // Remove `button` padding\n      verticalAlign: 'middle',\n      boxSizing: 'border-box',\n      '&$disabled': {\n        opacity: 0.5,\n        pointerEvents: 'none'\n      },\n      '& $avatar': {\n        marginLeft: 5,\n        marginRight: -6,\n        width: 24,\n        height: 24,\n        color: theme.palette.type === 'light' ? theme.palette.grey[700] : theme.palette.grey[300],\n        fontSize: theme.typography.pxToRem(12)\n      },\n      '& $avatarColorPrimary': {\n        color: theme.palette.primary.contrastText,\n        backgroundColor: theme.palette.primary.dark\n      },\n      '& $avatarColorSecondary': {\n        color: theme.palette.secondary.contrastText,\n        backgroundColor: theme.palette.secondary.dark\n      },\n      '& $avatarSmall': {\n        marginLeft: 4,\n        marginRight: -4,\n        width: 18,\n        height: 18,\n        fontSize: theme.typography.pxToRem(10)\n      }\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      height: 24\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      backgroundColor: theme.palette.primary.main,\n      color: theme.palette.primary.contrastText\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      backgroundColor: theme.palette.secondary.main,\n      color: theme.palette.secondary.contrastText\n    },\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `onClick` is defined or `clickable={true}`. */\n    clickable: {\n      userSelect: 'none',\n      WebkitTapHighlightColor: 'transparent',\n      cursor: 'pointer',\n      '&:hover, &:focus': {\n        backgroundColor: emphasize(backgroundColor, 0.08)\n      },\n      '&:active': {\n        boxShadow: theme.shadows[1]\n      }\n    },\n\n    /* Styles applied to the root element if `onClick` and `color=\"primary\"` is defined or `clickable={true}`. */\n    clickableColorPrimary: {\n      '&:hover, &:focus': {\n        backgroundColor: emphasize(theme.palette.primary.main, 0.08)\n      }\n    },\n\n    /* Styles applied to the root element if `onClick` and `color=\"secondary\"` is defined or `clickable={true}`. */\n    clickableColorSecondary: {\n      '&:hover, &:focus': {\n        backgroundColor: emphasize(theme.palette.secondary.main, 0.08)\n      }\n    },\n\n    /* Styles applied to the root element if `onDelete` is defined. */\n    deletable: {\n      '&:focus': {\n        backgroundColor: emphasize(backgroundColor, 0.08)\n      }\n    },\n\n    /* Styles applied to the root element if `onDelete` and `color=\"primary\"` is defined. */\n    deletableColorPrimary: {\n      '&:focus': {\n        backgroundColor: emphasize(theme.palette.primary.main, 0.2)\n      }\n    },\n\n    /* Styles applied to the root element if `onDelete` and `color=\"secondary\"` is defined. */\n    deletableColorSecondary: {\n      '&:focus': {\n        backgroundColor: emphasize(theme.palette.secondary.main, 0.2)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      backgroundColor: 'transparent',\n      border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n      '$clickable&:hover, $clickable&:focus, $deletable&:focus': {\n        backgroundColor: fade(theme.palette.text.primary, theme.palette.action.hoverOpacity)\n      },\n      '& $avatar': {\n        marginLeft: 4\n      },\n      '& $avatarSmall': {\n        marginLeft: 2\n      },\n      '& $icon': {\n        marginLeft: 4\n      },\n      '& $iconSmall': {\n        marginLeft: 2\n      },\n      '& $deleteIcon': {\n        marginRight: 5\n      },\n      '& $deleteIconSmall': {\n        marginRight: 3\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n    outlinedPrimary: {\n      color: theme.palette.primary.main,\n      border: \"1px solid \".concat(theme.palette.primary.main),\n      '$clickable&:hover, $clickable&:focus, $deletable&:focus': {\n        backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n    outlinedSecondary: {\n      color: theme.palette.secondary.main,\n      border: \"1px solid \".concat(theme.palette.secondary.main),\n      '$clickable&:hover, $clickable&:focus, $deletable&:focus': {\n        backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity)\n      }\n    },\n    // TODO remove in V5\n\n    /* Styles applied to the `avatar` element. */\n    avatar: {},\n\n    /* Styles applied to the `avatar` element if `size=\"small\"`. */\n    avatarSmall: {},\n\n    /* Styles applied to the `avatar` element if `color=\"primary\"`. */\n    avatarColorPrimary: {},\n\n    /* Styles applied to the `avatar` element if `color=\"secondary\"`. */\n    avatarColorSecondary: {},\n\n    /* Styles applied to the `icon` element. */\n    icon: {\n      color: theme.palette.type === 'light' ? theme.palette.grey[700] : theme.palette.grey[300],\n      marginLeft: 5,\n      marginRight: -6\n    },\n\n    /* Styles applied to the `icon` element if `size=\"small\"`. */\n    iconSmall: {\n      width: 18,\n      height: 18,\n      marginLeft: 4,\n      marginRight: -4\n    },\n\n    /* Styles applied to the `icon` element if `color=\"primary\"`. */\n    iconColorPrimary: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the `icon` element if `color=\"secondary\"`. */\n    iconColorSecondary: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the label `span` element. */\n    label: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      paddingLeft: 12,\n      paddingRight: 12,\n      whiteSpace: 'nowrap'\n    },\n\n    /* Styles applied to the label `span` element if `size=\"small\"`. */\n    labelSmall: {\n      paddingLeft: 8,\n      paddingRight: 8\n    },\n\n    /* Styles applied to the `deleteIcon` element. */\n    deleteIcon: {\n      WebkitTapHighlightColor: 'transparent',\n      color: deleteIconColor,\n      height: 22,\n      width: 22,\n      cursor: 'pointer',\n      margin: '0 5px 0 -6px',\n      '&:hover': {\n        color: fade(deleteIconColor, 0.4)\n      }\n    },\n\n    /* Styles applied to the `deleteIcon` element if `size=\"small\"`. */\n    deleteIconSmall: {\n      height: 16,\n      width: 16,\n      marginRight: 4,\n      marginLeft: -4\n    },\n\n    /* Styles applied to the deleteIcon element if `color=\"primary\"` and `variant=\"default\"`. */\n    deleteIconColorPrimary: {\n      color: fade(theme.palette.primary.contrastText, 0.7),\n      '&:hover, &:active': {\n        color: theme.palette.primary.contrastText\n      }\n    },\n\n    /* Styles applied to the deleteIcon element if `color=\"secondary\"` and `variant=\"default\"`. */\n    deleteIconColorSecondary: {\n      color: fade(theme.palette.secondary.contrastText, 0.7),\n      '&:hover, &:active': {\n        color: theme.palette.secondary.contrastText\n      }\n    },\n\n    /* Styles applied to the deleteIcon element if `color=\"primary\"` and `variant=\"outlined\"`. */\n    deleteIconOutlinedColorPrimary: {\n      color: fade(theme.palette.primary.main, 0.7),\n      '&:hover, &:active': {\n        color: theme.palette.primary.main\n      }\n    },\n\n    /* Styles applied to the deleteIcon element if `color=\"secondary\"` and `variant=\"outlined\"`. */\n    deleteIconOutlinedColorSecondary: {\n      color: fade(theme.palette.secondary.main, 0.7),\n      '&:hover, &:active': {\n        color: theme.palette.secondary.main\n      }\n    }\n  };\n};\n/**\n * Chips represent complex entities in small blocks, such as a contact.\n */\n\nvar Chip = React.forwardRef(function Chip(props, ref) {\n  var avatarProp = props.avatar,\n      classes = props.classes,\n      className = props.className,\n      clickableProp = props.clickable,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      ComponentProp = props.component,\n      deleteIconProp = props.deleteIcon,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      iconProp = props.icon,\n      label = props.label,\n      onClick = props.onClick,\n      onDelete = props.onDelete,\n      onKeyUp = props.onKeyUp,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'default' : _props$variant,\n      other = _objectWithoutProperties(props, [\"avatar\", \"classes\", \"className\", \"clickable\", \"color\", \"component\", \"deleteIcon\", \"disabled\", \"icon\", \"label\", \"onClick\", \"onDelete\", \"onKeyUp\", \"size\", \"variant\"]);\n\n  var chipRef = React.useRef(null);\n  var handleRef = useForkRef(chipRef, ref);\n\n  var handleDeleteIconClick = function handleDeleteIconClick(event) {\n    // Stop the event from bubbling up to the `Chip`\n    event.stopPropagation();\n\n    if (onDelete) {\n      onDelete(event);\n    }\n  };\n\n  var handleKeyUp = function handleKeyUp(event) {\n    if (onKeyUp) {\n      onKeyUp(event);\n    } // Ignore events from children of `Chip`.\n\n\n    if (event.currentTarget !== event.target) {\n      return;\n    }\n\n    var key = event.key;\n\n    if (onDelete && (key === 'Backspace' || key === 'Delete')) {\n      onDelete(event);\n    } else if (key === 'Escape' && chipRef.current) {\n      chipRef.current.blur();\n    }\n  };\n\n  var clickable = clickableProp !== false && onClick ? true : clickableProp;\n  var small = size === 'small';\n  var Component = ComponentProp || (clickable ? ButtonBase : 'div');\n  var moreProps = Component === ButtonBase ? {\n    component: 'div'\n  } : {};\n  var deleteIcon = null;\n\n  if (onDelete) {\n    var customClasses = clsx(color !== 'default' && (variant === \"default\" ? classes[\"deleteIconColor\".concat(capitalize(color))] : classes[\"deleteIconOutlinedColor\".concat(capitalize(color))]), small && classes.deleteIconSmall);\n    deleteIcon = deleteIconProp && React.isValidElement(deleteIconProp) ? React.cloneElement(deleteIconProp, {\n      className: clsx(deleteIconProp.props.className, classes.deleteIcon, customClasses),\n      onClick: handleDeleteIconClick\n    }) : React.createElement(CancelIcon, {\n      className: clsx(classes.deleteIcon, customClasses),\n      onClick: handleDeleteIconClick\n    });\n  }\n\n  var avatar = null;\n\n  if (avatarProp && React.isValidElement(avatarProp)) {\n    avatar = React.cloneElement(avatarProp, {\n      className: clsx(classes.avatar, avatarProp.props.className, small && classes.avatarSmall, color !== 'default' && classes[\"avatarColor\".concat(capitalize(color))])\n    });\n  }\n\n  var icon = null;\n\n  if (iconProp && React.isValidElement(iconProp)) {\n    icon = React.cloneElement(iconProp, {\n      className: clsx(classes.icon, iconProp.props.className, small && classes.iconSmall, color !== 'default' && classes[\"iconColor\".concat(capitalize(color))])\n    });\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (avatar && icon) {\n      console.error('Material-UI: the Chip component can not handle the avatar ' + 'and the icon prop at the same time. Pick one.');\n    }\n  }\n\n  return React.createElement(Component, _extends({\n    role: clickable || onDelete ? 'button' : undefined,\n    className: clsx(classes.root, className, color !== 'default' && [classes[\"color\".concat(capitalize(color))], clickable && classes[\"clickableColor\".concat(capitalize(color))], onDelete && classes[\"deletableColor\".concat(capitalize(color))]], variant !== \"default\" && [classes.outlined, {\n      primary: classes.outlinedPrimary,\n      secondary: classes.outlinedSecondary\n    }[color]], disabled && classes.disabled, small && classes.sizeSmall, clickable && classes.clickable, onDelete && classes.deletable),\n    \"aria-disabled\": disabled ? true : undefined,\n    tabIndex: clickable || onDelete ? 0 : undefined,\n    onClick: onClick,\n    onKeyUp: handleKeyUp,\n    ref: handleRef\n  }, moreProps, other), avatar || icon, React.createElement(\"span\", {\n    className: clsx(classes.label, small && classes.labelSmall)\n  }, label), deleteIcon);\n});\nprocess.env.NODE_ENV !== \"production\" ? Chip.propTypes = {\n  /**\n   * Avatar element.\n   */\n  avatar: PropTypes.element,\n\n  /**\n   * This prop isn't supported.\n   * Use the `component` prop if you need to change the children structure.\n   */\n  children: unsupportedProp,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the chip will appear clickable, and will raise when pressed,\n   * even if the onClick prop is not defined.\n   * If false, the chip will not be clickable, even if onClick prop is defined.\n   * This can be used, for example,\n   * along with the component prop to indicate an anchor Chip is clickable.\n   */\n  clickable: PropTypes.bool,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Override the default delete icon element. Shown only if `onDelete` is set.\n   */\n  deleteIcon: PropTypes.element,\n\n  /**\n   * If `true`, the chip should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Icon element.\n   */\n  icon: PropTypes.element,\n\n  /**\n   * The content of the label.\n   */\n  label: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * Callback function fired when the delete icon is clicked.\n   * If set, the delete icon will be shown.\n   */\n  onDelete: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n\n  /**\n   * The size of the chip.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['default', 'outlined'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiChip'\n})(Chip);","import * as React from 'react';\nimport { TextField, FormControl, FormHelperText } from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core/styles';\n\nimport * as uuid from 'uuid/v1';\n\nimport {\n  onChangeValue,\n} from 'ats-utils/src';\nimport { FieldProps } from 'formik';\nimport { FormControlProps } from '@material-ui/core/FormControl';\n\nconst styles = (theme: any) => ({\n  root: {\n  }\n});\n\ninterface IFormikTextFieldProps {\n  id?: string;\n  label: string;\n  formControlProps?: FormControlProps;\n  normalize?: (value: any, name: string) => any;\n  parse?: (value: any, name: string) => any;\n  format?: (value: any, name: string) => any;\n}\n\ntype FormikTextField = IFormikTextFieldProps & FieldProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst FormikTextField: React.FC<FormikTextField> = (props) => {\n  const {\n    form: {\n      setFieldValue,\n      touched: _touched,\n      errors,\n    },\n    field: {\n      name,\n      value: _value = '',\n      onChange,\n      onBlur,\n    },\n    id = uuid(),\n    label,\n    parse,\n    normalize,\n    format = (anyValue) => anyValue,\n    formControlProps,\n    ...rest\n  } = props;\n  const cellValue = format(_value, name);\n\n  const touched = _touched[name];\n  const error = errors[name];\n\n  // console.error('test', {\n  //   props,\n  //   _touched,\n  //   errors,\n  //   touched,\n  //   error,\n  //   name,\n  // });\n\n\n  return <FormControl error={touched && (error != null)} {...formControlProps} aria-describedby={id}>\n    <TextField\n        label={label}\n        name={name}\n        value={cellValue || ''}\n        onChange={(e) => {\n          const parsedValue = onChangeValue(e, {name, parse});\n          // e.target.value = parsedValue; // @@TODO REALLY UGLY HACK BECAUSE FORMIK ONLY ACCEPTS EVENTS FOR ONCHANGE\n          // onChange(e);\n          setFieldValue(name, parsedValue);\n        }}\n        onBlur={(e) => {\n          const parsedValue = onChangeValue(e, {name, parse, normalize});\n          // e.target.value = parsedValue; // @@TODO REALLY UGLY HACK BECAUSE FORMIK ONLY ACCEPTS EVENTS FOR ONCHANGE\n          // onChange(e);\n          setFieldValue(name, parsedValue);\n        }}\n        {...rest}\n      />\n    <FormHelperText id={id}>{touched && error}</FormHelperText>\n  </FormControl>;\n};\n\nexport default withStyles(styles)(FormikTextField);\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/*  ListTableCell\n*   used in TableContainer for header / cells\n*   This is simply a Material-ui table cell with some customized style\n*/\nimport * as React from 'react';\nimport {\n  Theme,\n  makeStyles\n} from '@material-ui/core/styles';\nimport {\n  TableCell,\n  TableCellProps,\n} from '@material-ui/core';\n\nexport const TABLE_CELL_MAX_WIDTH = 128; // default max width for table cell, used in TableContainer\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  root: {\n    padding: theme.spacing(),\n    textAlign: 'left',\n    width: '20%',\n    whiteSpace: 'nowrap',\n    boxSizing: 'content-box',\n    overflow: 'hidden',\n    maxWidth: TABLE_CELL_MAX_WIDTH,\n    textOverflow: 'ellipsis'\n  },\n}));\n\nconst ListTableCell: React.FC<TableCellProps> = props => {\n  const { children, ...rest} = props;\n  const { root } = useStyles();\n  return (\n    <TableCell\n      className={root}\n      {...rest}\n    >\n      {children}\n    </TableCell>\n  );\n};\n\n\nexport default ListTableCell;\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","\"use strict\";\n\nconst {\n  default: Draggable,\n  DraggableCore\n} = require('./Draggable');\n\n// Previous versions of this lib exported <Draggable> as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Asynchronously loads the component\n */\nimport Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import _ from 'lodash';\nimport i18next from 'i18next';\nimport {dateNoEarlierThan, dateNoLaterThan} from '../../../../validators';\nimport {\n  DATE_INTERVAL,\n  BID_INVITATION_DETAIL_ROOT_PATH,\n  VENDOR_QUOTATION_BID_PATH\n} from '../../../../constants';\nimport BidInvitationUtil from '../../../AutoQuotationDashboard/BidInvitationUtil';\nconst getDefaultFilterOptions = () => {\n  return {\n    incoming: false,\n    outcoming: false,\n    from: '',\n    to: '',\n    status: [],\n    bidDate: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n    createdAt: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n    updatedAt: {\n      period: '',\n      startDate: '',\n      endDate: ''\n    },\n  };\n};\n\nconst initFilterForm = () => {\n  const defaultOptions =  getDefaultFilterOptions();\n  const formData = {\n    ...defaultOptions,\n    title: 'Pricing Requests',\n    status: {\n      submitted: false,\n      pending: false,\n      declined: false\n    },\n  };\n\n  return formData;\n};\n\nconst getFiltersConfigToFormState = (filters: any) => {\n  const initData = filters.toJS();\n  const defaultOptions = getDefaultFilterOptions();\n  let filterResult = {\n    title: initData?.config?.title,\n    incoming: initData?.config?.filters?.incoming || false,\n    outcoming: initData?.config?.filters?.outcoming || false,\n    from: initData?.config?.filters?.from || '',\n    to: initData?.config?.filters?.to || '',\n    status: {},\n    bidDate: defaultOptions.bidDate,\n    createdAt: defaultOptions.createdAt,\n    updatedAt: defaultOptions.updatedAt,\n  };\n  if (!_.isEmpty(initData?.config?.filters)) {\n    const periodFilter = BidInvitationUtil.initPeriodFilter(initData?.config?.filters);\n    filterResult = {...filterResult, ...periodFilter};\n  }\n  filterResult.status = {\n    submitted: initData?.config?.filters?.status?.includes('submitted') || false,\n    pending: initData?.config?.filters?.status?.includes('pending') || false,\n    declined: initData?.config?.filters?.status?.includes('declined') || false\n  };\n  return filterResult;\n};\n\nconst generateSaveFilterOptions = (sourceValues: any) => {\n  const filterData = sourceValues.toJS();\n  const statusList = [];\n  if (filterData?.status?.submitted) {\n    statusList.push('submitted');\n  }\n  if (filterData?.status?.pending) {\n    statusList.push('pending');\n  }\n  if (filterData?.status?.declined) {\n    statusList.push('declined');\n  }\n  const parsingData = getDefaultFilterOptions();\n  if (filterData?.incoming) {\n    parsingData.incoming = filterData?.incoming;\n  }\n  if (filterData?.outcoming) {\n    parsingData.outcoming = filterData?.outcoming;\n  }\n  if (filterData?.from) {\n    if (typeof filterData?.from === 'string') {\n      parsingData.from = filterData?.from;\n    } else {\n      parsingData.from = filterData?.from?.value;\n    }\n  }\n  if (filterData?.to) {\n    if (typeof filterData?.to === 'string') {\n      parsingData.to = filterData?.to;\n    } else {\n      parsingData.to = filterData?.to?.value;\n    }\n  }\n  parsingData.status = statusList;\n  if (filterData.bidDate) {\n    parsingData.bidDate = filterData.bidDate;\n    if (parsingData.bidDate?.period && (!parsingData.bidDate?.startDate && !parsingData.bidDate?.endDate)) {\n      parsingData.bidDate.period = '';\n    }\n  }\n  if (filterData.createdAt) {\n    parsingData.createdAt = filterData.createdAt;\n    if (parsingData.createdAt?.period && (!parsingData.createdAt?.startDate && !parsingData.createdAt?.endDate)) {\n      parsingData.createdAt.period = '';\n    }\n  }\n  if (filterData.updatedAt) {\n    parsingData.updatedAt = filterData.updatedAt;\n    if (parsingData.updatedAt?.period && (!parsingData.updatedAt?.startDate && !parsingData.updatedAt?.endDate)) {\n      parsingData.updatedAt.period = '';\n    }\n  }\n  return parsingData;\n};\n\nconst startDateValidate = (value, allValues, field) => {\n  const period = allValues.getIn([field, 'period']);\n  const startDate = allValues.getIn([field, 'startDate']);\n  const endDate = allValues.getIn([field, 'endDate']);\n  const date: Date = new Date(startDate);\n  const noLaterThan: Date = new Date(endDate);\n  if (period === DATE_INTERVAL.CUSTOM) {\n    if (!startDate || !endDate) {\n      return undefined;\n    }\n  }\n  const message = i18next.t('translations:date.startBeforeEnd');\n  return dateNoLaterThan(date, noLaterThan, message);\n};\n\nconst endDateValidate = (value, allValues , field) => {\n  const period = allValues.getIn([field, 'period']);\n  const startDate = allValues.getIn([field, 'startDate']);\n  const endDate = allValues.getIn([field, 'endDate']);\n  const noEarlierThan: Date = new Date(startDate);\n  const date: Date = new Date(endDate);\n  if (period === DATE_INTERVAL.CUSTOM) {\n    if (!startDate || !endDate) {\n      return undefined;\n    }\n  }\n  const message = i18next.t('translations:date.endAfterStart');\n  return dateNoEarlierThan(date, noEarlierThan, message);\n};\n\nconst bidStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'bidDate');\n};\nconst bidEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'bidDate');\n};\n\nconst bidDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['bidDate', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n   return false;\n};\n\nconst createdStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'createdAt');\n};\nconst createdEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'createdAt');\n};\n\nconst createdDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['createdAt', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst updatedStartDateValidate = (value, allValues) => {\n  return startDateValidate(value, allValues, 'updatedAt');\n};\nconst updatedEndDateValidate = (value, allValues) => {\n  return endDateValidate(value, allValues, 'updatedAt');\n};\n\nconst updatedDateDisableChange = (allValues: any): any => {\n  if (allValues) {\n    const period = allValues.getIn(['updatedAt', 'period']);\n    if (period && period !== DATE_INTERVAL.CUSTOM) {\n      return true;\n    }\n  }\n  return false;\n};\n\nconst getBidDetailUrl = (bidItem) => {\n  let bidUrl = BID_INVITATION_DETAIL_ROOT_PATH + '/' + bidItem.id;\n  if (bidItem.status === 'submitted') {\n    bidUrl = VENDOR_QUOTATION_BID_PATH + '/' + bidItem.id;\n  }\n  return bidUrl;\n};\n\nconst BidInvitationWidgetUtil = {\n  getFiltersConfigToFormState,\n  initFilterForm,\n  generateSaveFilterOptions,\n  bidStartDateValidate,\n  bidEndDateValidate,\n  bidDateDisableChange,\n  createdStartDateValidate,\n  createdEndDateValidate,\n  createdDateDisableChange,\n  updatedStartDateValidate,\n  updatedEndDateValidate,\n  updatedDateDisableChange,\n  getBidDetailUrl\n};\nexport default BidInvitationWidgetUtil;","import * as React from 'react';\n\ninterface IAtsSvgDashboardEditLayoutProps {\n  /**\n   * The width of the component.\n   * Default: '194'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '122'\n   */\n  height?: string;\n  /**\n   * The only themeable part of the SVG.\n   * Default: '#4D913A'\n   * Original: '#B8E986', using Default instead as Original have no match with palette.\n   * Expected: secondary[800] from theme.palette.\n   */\n  color?: string;\n  /**\n   * The margin of the SVG.\n   * Default: '0'\n   */\n  margin?: string;\n}\n\n\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} color - The only themeable part of the SVG.\n * @prop {string} margin - The margin of the SVG.\n */\nconst AtsSvgDashboardEditLayout = ({\n  width = '194',\n  height = '122',\n  color = '#4D913A',\n  margin = '0'\n}: IAtsSvgDashboardEditLayoutProps) => {\n\n  return (\n    <svg\n      xmlns='http://www.w3.org/2000/svg'\n      width={width}\n      height={height}\n      viewBox='0 0 194 122'\n      style={{ maxWidth: '100%', margin: Number(margin) ? `${margin}px` : margin }}\n    >\n      <defs>\n        <path\n          id='path-1'\n          d='M0 8.349C0 3.738 3.728 0 8.34 0h173.161c4.607 0 8.34 3.747 8.34 8.349v8.349H0v-8.35z'\n        />\n        <path\n          id='path-2'\n          d='M0 16h189.842v88.262c0 7.456-6.048 13.5-13.501 13.5H13.501C6.044 117.763 0 111.72 0 104.263V16z'\n        />\n        <path id='path-3' d='M18 0H56.944V4.861H18z'/>\n        <path id='path-4' d='M18 0H56.944V4.861H18z'/>\n        <path id='path-5' d='M18 0H56.944V4.861H18z'/>\n        <path id='path-6' d='M18 0H56.944V4.861H18z'/>\n        <path id='path-7' d='M18 0H56.944V4.861H18z'/>\n        <rect id='path-8' width='51' height='26' x='27' y='42' rx='3'/>\n        <mask\n          id='mask-9'\n          width='51'\n          height='26'\n          x='0'\n          y='0'\n          fill='#fff'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n        >\n          <use xlinkHref='#path-8'/>\n        </mask>\n        <rect id='path-10' width='51' height='30' x='27' y='71' rx='3'/>\n        <mask\n          id='mask-11'\n          width='51'\n          height='30'\n          x='0'\n          y='0'\n          fill='#fff'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n        >\n          <use xlinkHref='#path-10'/>\n        </mask>\n        <rect id='path-12' width='19' height='59' x='83' y='42' rx='3'/>\n        <mask\n          id='mask-13'\n          width='19'\n          height='59'\n          x='0'\n          y='0'\n          fill='#fff'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n        >\n          <use xlinkHref='#path-12'/>\n        </mask>\n        <rect id='path-14' width='43' height='59' x='102' y='42' rx='3'/>\n        <mask\n          id='mask-15'\n          width='43'\n          height='59'\n          x='0'\n          y='0'\n          fill='#fff'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n        >\n          <use xlinkHref='#path-14'/>\n        </mask>\n        <rect id='path-16' width='36' height='59' x='147' y='42' rx='3'/>\n        <mask\n          id='mask-17'\n          width='36'\n          height='59'\n          x='0'\n          y='0'\n          fill='#fff'\n          maskContentUnits='userSpaceOnUse'\n          maskUnits='objectBoundingBox'\n        >\n          <use xlinkHref='#path-16'/>\n        </mask>\n      </defs>\n      <g\n        fill='none'\n        fillRule='evenodd'\n        stroke='none'\n        strokeWidth='1'\n        transform='translate(-3200 -1692)'\n      >\n        <g transform='translate(3202 1694)'>\n          <g>\n            <g transform='translate(0 .158)'>\n              <g>\n                <use fill='#D1D1D1' xlinkHref='#path-1'/>\n                <path\n                  stroke='#D0D0D0'\n                  strokeWidth='1.5'\n                  d='M-.75 8.349C-.75 3.322 3.316-.75 8.34-.75h173.161c5.018 0 9.09 4.08 9.09 9.099v9.099H-.75v-9.1z'\n                />\n              </g>\n              <g>\n                <use fill='#FFF' xlinkHref='#path-2'/>\n                <path\n                  stroke='#D0D0D0'\n                  strokeWidth='1.5'\n                  d='M-.75 15.25h191.342v89.012c0 7.87-6.383 14.25-14.251 14.25H13.501c-7.871 0-14.251-6.378-14.251-14.25V15.25z'\n                />\n              </g>\n              <g opacity='0.65' transform='translate(0 16.698)'>\n                <path fill='#E9E9E9' d='M0 0H21.814V101.763H0z'/>\n                <path\n                  fill='#C7C7C7'\n                  d='M6 37H16.749000000000002V44.246H6z'\n                />\n                <path\n                  fill='#C7C7C7'\n                  d='M6 51H16.749000000000002V58.246H6z'\n                />\n                <path\n                  fill='#C7C7C7'\n                  d='M6 65H16.749000000000002V72.246H6z'\n                />\n                <path fill='#C5C5C5' d='M0 0H21.814V26.465H0z'/>\n              </g>\n              <path fill='#C7C7C7' d='M30 25H51.814V30.671H30z'/>\n              <g fill='#FFF' transform='translate(7.594 5.671)'>\n                <ellipse cx='2.769' cy='2.757' rx='2.769' ry='2.757'/>\n                <ellipse cx='10.769' cy='2.757' rx='2.769' ry='2.757'/>\n                <ellipse cx='19.769' cy='2.757' rx='2.769' ry='2.757'/>\n              </g>\n            </g>\n          </g>\n          <path fill={color} d='M160 25H179V30H160z'/>\n          <path fill='#9B9B9B' d='M136 25H155V30H136z'/>\n          <path fill='#9B9B9B' d='M114 25H133V30H114z'/>\n          <path fill='#9B9B9B' d='M114 25H133V30H114z'/>\n          <g transform='translate(85 47)'>\n            <path fill='#DADADA' d='M0 0H16.286V4.861H0z'/>\n            <g>\n              <use fill='#F4F4F4' xlinkHref='#path-3'/>\n              <path\n                stroke='#CACACA'\n                strokeWidth='2'\n                d='M19 1H55.944V3.861H19z'\n              />\n            </g>\n          </g>\n          <g transform='translate(85 57)'>\n            <path fill='#DADADA' d='M0 0H16.286V4.861H0z'/>\n            <g>\n              <use fill='#F4F4F4' xlinkHref='#path-4'/>\n              <path\n                stroke='#CACACA'\n                strokeWidth='2'\n                d='M19 1H55.944V3.861H19z'\n              />\n            </g>\n          </g>\n          <g transform='translate(85 69)'>\n            <path fill='#DADADA' d='M0 0H16.286V4.861H0z'/>\n            <g>\n              <use fill='#F4F4F4' xlinkHref='#path-5'/>\n              <path\n                stroke='#CACACA'\n                strokeWidth='2'\n                d='M19 1H55.944V3.861H19z'\n              />\n            </g>\n          </g>\n          <g transform='translate(85 79)'>\n            <path fill='#DADADA' d='M0 0H16.286V4.861H0z'/>\n            <g>\n              <use fill='#F4F4F4' xlinkHref='#path-6'/>\n              <path\n                stroke='#CACACA'\n                strokeWidth='2'\n                d='M19 1H55.944V3.861H19z'\n              />\n            </g>\n          </g>\n          <g transform='translate(85 91)'>\n            <path fill='#DADADA' d='M0 0H16.286V4.861H0z'/>\n            <g>\n              <use fill='#F4F4F4' xlinkHref='#path-7'/>\n              <path\n                stroke='#CACACA'\n                strokeWidth='2'\n                d='M19 1H55.944V3.861H19z'\n              />\n            </g>\n          </g>\n          <path fill='#F9F9F9' d='M29 71H77V101H29z'/>\n          <g fill='#BCBEC0' opacity='0.5' transform='translate(46 81)'>\n            <path d='M18.06 11.22l-4.598-5.73a.847.847 0 00-.656-.312.888.888 0 00-.657.312l-.606.752c-.026.026-.05.077-.076.103a.812.812 0 01-.581.26.733.733 0 01-.556-.234c-.05-.052-.1-.103-.126-.155L7.956 3.415A1.068 1.068 0 007.097 3c-.353 0-.656.156-.858.415L.227 10.91l-.1.13a.798.798 0 00-.127.414c0 .415.328.752.732.752h16.974c.303 0 .555-.259.555-.57a.53.53 0 00-.1-.337l-.102-.078zM16.844 0C15.834 0 15 .856 15 1.893s.833 1.893 1.844 1.893c1.01 0 1.844-.856 1.844-1.893S17.854 0 16.844 0z'/>\n          </g>\n          <path fill='#F9F9F9' d='M29 45H77V66H29z'/>\n          <g fill='#BCBEC0' opacity='0.5' transform='translate(46 53)'>\n            <path d='M18.06 7.691l-4.598-3.967a1.025 1.025 0 00-.656-.216c-.253 0-.506.09-.657.216l-.606.52c-.026.018-.05.054-.076.072-.152.108-.354.18-.581.18a.917.917 0 01-.556-.162c-.05-.036-.1-.072-.126-.108L7.956 2.287C7.754 2.107 7.451 2 7.097 2c-.353 0-.656.108-.858.287L.227 7.476l-.1.09c-.076.09-.127.18-.127.287 0 .287.328.52.732.52h16.974c.303 0 .555-.179.555-.394a.295.295 0 00-.1-.234l-.102-.054zM16.844 0C15.834 0 15 .592 15 1.31c0 .719.833 1.311 1.844 1.311 1.01 0 1.844-.592 1.844-1.31C18.688.592 17.854 0 16.844 0z'/>\n          </g>\n          <path fill='#DADADA' d='M148 47H181V98H148z'/>\n          <g fill='#9B9B9B' transform='translate(72 44)'>\n            <path d='M2.547 1.909l1.27 1.27-.638.639-1.27-1.271-1.27 1.27L0 3.18l1.27-1.27L0 .639.638 0l1.27 1.27L3.18 0l.639.638-1.271 1.27z'/>\n          </g>\n          <g fill='#9B9B9B' transform='translate(72 74)'>\n            <path d='M2.547 1.909l1.27 1.27-.638.639-1.27-1.271-1.27 1.27L0 3.18l1.27-1.27L0 .639.638 0l1.27 1.27L3.18 0l.639.638-1.271 1.27z'/>\n          </g>\n          <g fill='#9B9B9B' transform='translate(96 44)'>\n            <path d='M2.547 1.909l1.27 1.27-.638.639-1.27-1.271-1.27 1.27L0 3.18l1.27-1.27L0 .639.638 0l1.27 1.27L3.18 0l.639.638-1.271 1.27z'/>\n          </g>\n          <g fill='#9B9B9B' transform='translate(137 44)'>\n            <path d='M2.547 1.909l1.27 1.27-.638.639-1.27-1.271-1.27 1.27L0 3.18l1.27-1.27L0 .639.638 0l1.27 1.27L3.18 0l.639.638-1.271 1.27z'/>\n          </g>\n          <g fill='#9B9B9B' transform='translate(176 44)'>\n            <path d='M2.547 1.909l1.27 1.27-.638.639-1.27-1.271-1.27 1.27L0 3.18l1.27-1.27L0 .639.638 0l1.27 1.27L3.18 0l.639.638-1.271 1.27z'/>\n          </g>\n          <use\n            stroke='#D0D0D0'\n            strokeDasharray='6'\n            strokeWidth='2'\n            mask='url(#mask-9)'\n            xlinkHref='#path-8'\n          />\n          <use\n            stroke='#D0D0D0'\n            strokeDasharray='6'\n            strokeWidth='2'\n            mask='url(#mask-11)'\n            xlinkHref='#path-10'\n          />\n          <use\n            stroke='#D0D0D0'\n            strokeDasharray='6'\n            strokeWidth='2'\n            mask='url(#mask-13)'\n            xlinkHref='#path-12'\n          />\n          <use\n            stroke='#D0D0D0'\n            strokeDasharray='6'\n            strokeWidth='2'\n            mask='url(#mask-15)'\n            xlinkHref='#path-14'\n          />\n          <use\n            stroke='#D0D0D0'\n            strokeDasharray='6'\n            strokeWidth='2'\n            mask='url(#mask-17)'\n            xlinkHref='#path-16'\n          />\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgDashboardEditLayout };\n","\nimport isObject from 'lodash/isObject';\nimport { Api } from 'ats-api/src';\nimport { Map } from 'immutable';\nimport {\n  Link,\n} from 'react-router-dom';\n\nexport interface IHref {\n  env: string;\n  href: string;\n}\n\ninterface IHrefString {\n  href?: string;\n}\n\ninterface IHrefObject {\n  href: string | IHref;\n\n  env: Map<string, string>;\n  token: string;\n  atsApi: Api;\n}\n\nexport type IOnClick = (evt: React.MouseEvent) => void;\n\ninterface IGenerateLinkParamsOptions {\n  to?: string;\n  onClick?: IOnClick;\n\n  env?: Map<string, string>;\n  token?: string;\n  atsApi?: Api;\n  id?: number;\n\n  target?: string;\n  withAppId?: boolean;\n}\n\nconst generateLinkParams = ({\n  href,\n  to,\n  onClick,\n\n  atsApi,\n  env,\n  token,\n  id,\n  withAppId,\n  target\n}: IGenerateLinkParamsOptions & (IHrefString | IHrefObject)) => {\n  let linkProps = {};\n  const idExists = id ? `/${id}` : '';\n  if (href) {\n    if (isObject(href)) {\n      const {\n        env: envHref,\n        href: hrefHref,\n      } = href;\n      const endpointUrl = env.get(envHref);\n      linkProps = (endpointUrl === env.get('ENDPOINT_SELF'))\n      ? {\n        component: Link,\n        to: hrefHref,\n      }\n      : {\n        component: 'a',\n        target: target ? target : '_top',\n        href: (\n          atsApi.appendParameters(`${endpointUrl || ''}${hrefHref}${idExists}`, {token, withToken: true, withAppId})\n        )\n      };\n    } else {\n      linkProps = {\n        component: 'a',\n        href,\n        target: target ? target : '_top',\n      };\n    }\n  }\n  if (to) {\n    linkProps = {\n      component: Link,\n      to,\n    };\n  }\n  if (onClick) {\n    linkProps = {\n      onClick,\n    };\n  }\n  return linkProps;\n};\n\nexport default generateLinkParams;","import { fromJS } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport AppVersionData from '../../models/AppVersionData';\n\n/**\n * Where the deployed application's version.json lives. Always an absolute path: a relative\n * './version.json' resolves against the current route (e.g. /en/version.json), and the\n * single-page-app fallback answers that with the HTML shell and status 200, which then fails to\n * parse as JSON (Sentry issue 7715554636).\n */\nexport const VERSION_JSON_PATH = `${process.env.PUBLIC_URL || ''}/version.json`;\n\n/**\n * Loads version.json. Resolves to the version data, or to null after logging when the request\n * or the parse fails. It never rejects, so callers can chain `.then` without a `.catch`.\n */\nexport const fetchAppVersion = async (): Promise<IMap<AppVersionData> | null> => {\n  try {\n    const response = await fetch(VERSION_JSON_PATH);\n    if (response.status !== 200) {\n      console.error('Problem fetching version info. Status Code: ' + response.status); // tslint:disable-line\n      return null;\n    }\n    return fromJS(await response.json());\n  } catch (err) {\n    console.error('Error fetching version info.', err); // tslint:disable-line\n    return null;\n  }\n};\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import Lodable from '@loadable/component';\n\nimport { DRAWER_ID } from './constants';\nexport {\n  DRAWER_ID,\n};\n\nexport default Lodable(() => import('./Component'));\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","/**\n * Asynchronously loads the component\n */\nimport Lodable from '@loadable/component';\nimport DashboardCanvasWidget from './DashboardCanvasWidget/index';\nexport {\n  DashboardCanvasWidget,\n};\n\nexport default Lodable(() => import('./Component'));\n","/**\n * Asynchronously loads the component\n */\nimport Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import createResizeDetector from 'element-resize-detector'\n\nconst instances = {}\n\n// Lazily require to not cause bug\n// https://github.com/ctrlplusb/react-sizeme/issues/6\nfunction resizeDetector(strategy = 'scroll') {\n  if (!instances[strategy]) {\n    instances[strategy] = createResizeDetector({\n      strategy,\n    })\n  }\n\n  return instances[strategy]\n}\n\nexport default resizeDetector\n","/* eslint-disable react/no-multi-comp */\n/* eslint-disable react/require-default-props */\n/* eslint-disable react/no-find-dom-node */\n\nimport React, { Children, Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ReactDOM from 'react-dom'\nimport invariant from 'invariant'\nimport { debounce, throttle } from 'throttle-debounce'\nimport resizeDetector from './resize-detector'\n\nconst errMsg =\n  'react-sizeme: an error occurred whilst stopping to listen to node size changes'\n\nconst defaultConfig = {\n  monitorWidth: true,\n  monitorHeight: false,\n  monitorPosition: false,\n  refreshRate: 16,\n  refreshMode: 'throttle',\n  noPlaceholder: false,\n  resizeDetectorStrategy: 'scroll',\n}\n\nfunction getDisplayName(WrappedComponent) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component'\n}\n\n/**\n * This is a utility wrapper component that will allow our higher order\n * component to get a ref handle on our wrapped components html.\n * @see https://gist.github.com/jimfb/32b587ee6177665fb4cf\n */\nclass ReferenceWrapper extends Component {\n  static displayName = 'SizeMeReferenceWrapper'\n\n  render() {\n    return Children.only(this.props.children)\n  }\n}\nReferenceWrapper.propTypes = { children: PropTypes.element.isRequired }\n\nfunction Placeholder({ className, style }) {\n  // Lets create the props for the temp element.\n  const phProps = {}\n\n  // We will use any provided className/style or else make the temp\n  // container take the full available space.\n  if (!className && !style) {\n    phProps.style = { width: '100%', height: '100%' }\n  } else {\n    if (className) {\n      phProps.className = className\n    }\n    if (style) {\n      phProps.style = style\n    }\n  }\n\n  return <div {...phProps} />\n}\nPlaceholder.displayName = 'SizeMePlaceholder'\nPlaceholder.propTypes = {\n  className: PropTypes.string,\n  style: PropTypes.object,\n}\n\n/**\n * As we need to maintain a ref on the root node that is rendered within our\n * SizeMe component we need to wrap our entire render in a sub component.\n * Without this, we lose the DOM ref after the placeholder is removed from\n * the render and the actual component is rendered.\n * It took me forever to figure this out, so tread extra careful on this one!\n */\nconst renderWrapper = WrappedComponent => {\n  function SizeMeRenderer(props) {\n    const {\n      explicitRef,\n      className,\n      style,\n      size,\n      disablePlaceholder,\n      onSize,\n      ...restProps\n    } = props\n\n    const noSizeData =\n      size == null ||\n      (size.width == null && size.height == null && size.position == null)\n\n    const renderPlaceholder = noSizeData && !disablePlaceholder\n\n    const renderProps = {\n      className,\n      style,\n    }\n\n    if (size != null) {\n      renderProps.size = size\n    }\n\n    const toRender = renderPlaceholder ? (\n      <Placeholder className={className} style={style} />\n    ) : (\n      <WrappedComponent {...renderProps} {...restProps} />\n    )\n\n    return <ReferenceWrapper ref={explicitRef}>{toRender}</ReferenceWrapper>\n  }\n\n  SizeMeRenderer.displayName = `SizeMeRenderer(${getDisplayName(\n    WrappedComponent,\n  )})`\n\n  SizeMeRenderer.propTypes = {\n    explicitRef: PropTypes.func.isRequired,\n    className: PropTypes.string,\n    style: PropTypes.object, // eslint-disable-line react/forbid-prop-types\n    size: PropTypes.shape({\n      width: PropTypes.number, // eslint-disable-line react/no-unused-prop-types\n      height: PropTypes.number, // eslint-disable-line react/no-unused-prop-types\n    }),\n    disablePlaceholder: PropTypes.bool,\n    onSize: PropTypes.func,\n  }\n\n  return SizeMeRenderer\n}\n\n/**\n * :: config -> Component -> WrappedComponent\n *\n * Higher order component that allows the wrapped component to become aware\n * of it's size, by receiving it as an object within it's props.\n *\n * @param  monitorWidth\n *   Default true, whether changes in the element's width should be monitored,\n *   causing a size property to be broadcast.\n * @param  monitorHeight\n *   Default false, whether changes in the element's height should be monitored,\n *   causing a size property to be broadcast.\n *\n * @return The wrapped component.\n */\nfunction withSize(config = defaultConfig) {\n  const {\n    monitorWidth = defaultConfig.monitorWidth,\n    monitorHeight = defaultConfig.monitorHeight,\n    monitorPosition = defaultConfig.monitorPosition,\n    refreshRate = defaultConfig.refreshRate,\n    refreshMode = defaultConfig.refreshMode,\n    noPlaceholder = defaultConfig.noPlaceholder,\n    resizeDetectorStrategy = defaultConfig.resizeDetectorStrategy,\n  } = config\n\n  invariant(\n    monitorWidth || monitorHeight || monitorPosition,\n    'You have to monitor at least one of the width, height, or position when using \"sizeMe\"',\n  )\n\n  invariant(\n    refreshRate >= 16,\n    \"It is highly recommended that you don't put your refreshRate lower than \" +\n      '16 as this may cause layout thrashing.',\n  )\n\n  invariant(\n    refreshMode === 'throttle' || refreshMode === 'debounce',\n    'The refreshMode should have a value of \"throttle\" or \"debounce\"',\n  )\n\n  const refreshDelayStrategy = refreshMode === 'throttle' ? throttle : debounce\n\n  return function WrapComponent(WrappedComponent) {\n    const SizeMeRenderWrapper = renderWrapper(WrappedComponent)\n\n    class SizeAwareComponent extends React.Component {\n      static displayName = `SizeMe(${getDisplayName(WrappedComponent)})`\n\n      static propTypes = {\n        onSize: PropTypes.func,\n      }\n\n      domEl = null\n\n      state = {\n        width: undefined,\n        height: undefined,\n        position: undefined,\n      }\n\n      componentDidMount() {\n        this.detector = resizeDetector(resizeDetectorStrategy)\n        this.determineStrategy(this.props)\n        this.handleDOMNode()\n      }\n\n      componentDidUpdate() {\n        this.determineStrategy(this.props)\n        this.handleDOMNode()\n      }\n\n      componentWillUnmount() {\n        // Change our size checker to a noop just in case we have some\n        // late running events.\n        this.hasSizeChanged = () => undefined\n        this.checkIfSizeChanged = () => undefined\n        this.uninstall()\n      }\n\n      uninstall = () => {\n        if (this.domEl) {\n          try {\n            this.detector.uninstall(this.domEl)\n          } catch (err) {\n            // eslint-disable-next-line no-console\n            console.warn(errMsg)\n          }\n          this.domEl = null\n        }\n      }\n\n      determineStrategy = props => {\n        if (props.onSize) {\n          if (!this.callbackState) {\n            this.callbackState = {\n              ...this.state,\n            }\n          }\n          this.strategy = 'callback'\n        } else {\n          this.strategy = 'render'\n        }\n      }\n\n      strategisedSetState = state => {\n        if (this.strategy === 'callback') {\n          this.callbackState = state\n          this.props.onSize(state)\n        }\n        this.setState(state)\n      }\n\n      strategisedGetState = () =>\n        this.strategy === 'callback' ? this.callbackState : this.state\n\n      handleDOMNode() {\n        const found = this.element && ReactDOM.findDOMNode(this.element)\n\n        if (!found) {\n          // If we previously had a dom node then we need to ensure that\n          // we remove any existing listeners to avoid memory leaks.\n          this.uninstall()\n          return\n        }\n\n        if (!this.domEl) {\n          this.domEl = found\n          this.detector.listenTo(this.domEl, this.checkIfSizeChanged)\n        } else if (!this.domEl.isSameNode(found)) {\n          this.uninstall()\n          this.domEl = found\n          this.detector.listenTo(this.domEl, this.checkIfSizeChanged)\n        } else {\n          // Do nothing 👍\n        }\n      }\n\n      refCallback = element => {\n        this.element = element\n      }\n\n      hasSizeChanged = (current, next) => {\n        const c = current\n        const n = next\n        const cp = c.position || {}\n        const np = n.position || {}\n\n        return (\n          (monitorWidth && c.width !== n.width) ||\n          (monitorHeight && c.height !== n.height) ||\n          (monitorPosition &&\n            (cp.top !== np.top ||\n              cp.left !== np.left ||\n              cp.bottom !== np.bottom ||\n              cp.right !== np.right))\n        )\n      }\n\n      checkIfSizeChanged = refreshDelayStrategy(refreshRate, el => {\n        const {\n          width,\n          height,\n          right,\n          left,\n          top,\n          bottom,\n        } = el.getBoundingClientRect()\n\n        const next = {\n          width: monitorWidth ? width : null,\n          height: monitorHeight ? height : null,\n          position: monitorPosition ? { right, left, top, bottom } : null,\n        }\n\n        if (this.hasSizeChanged(this.strategisedGetState(), next)) {\n          this.strategisedSetState(next)\n        }\n      })\n\n      render() {\n        const disablePlaceholder =\n          withSize.enableSSRBehaviour ||\n          withSize.noPlaceholders ||\n          noPlaceholder ||\n          this.strategy === 'callback'\n\n        const size = { ...this.state }\n\n        return (\n          <SizeMeRenderWrapper\n            explicitRef={this.refCallback}\n            size={this.strategy === 'callback' ? null : size}\n            disablePlaceholder={disablePlaceholder}\n            {...this.props}\n          />\n        )\n      }\n    }\n\n    SizeAwareComponent.WrappedComponent = WrappedComponent\n\n    return SizeAwareComponent\n  }\n}\n\n/**\n * Allow SizeMe to run within SSR environments.  This is a \"global\" behaviour\n * flag that should be set within the initialisation phase of your application.\n *\n * Warning: don't set this flag unless you need to as using it may cause\n * extra render cycles to happen within your components depending on the logic\n * contained within them around the usage of the `size` data.\n *\n * DEPRECATED: Please use the global noPlaceholders\n */\nwithSize.enableSSRBehaviour = false\n\n/**\n * Global configuration allowing to disable placeholder rendering for all\n * sizeMe components.\n */\nwithSize.noPlaceholders = false\n\nexport default withSize\n","import React, { Component } from 'react'\nimport isShallowEqual from 'shallowequal'\nimport PropTypes from 'prop-types'\nimport withSize from './with-size'\n\nexport default class SizeMe extends Component {\n  static propTypes = {\n    children: PropTypes.func,\n    render: PropTypes.func,\n  }\n\n  static defaultProps = {\n    children: undefined,\n    render: undefined,\n  }\n\n  constructor(props) {\n    super(props)\n    const { children, render, ...sizeMeConfig } = props\n    this.createComponent(sizeMeConfig)\n    this.state = {\n      size: {\n        width: undefined,\n        height: undefined,\n      },\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {\n      children: prevChildren,\n      render: prevRender,\n      ...currentSizeMeConfig\n    } = this.props\n    const {\n      children: nextChildren,\n      render: nextRender,\n      ...prevSizeMeConfig\n    } = prevProps\n    if (!isShallowEqual(currentSizeMeConfig, prevSizeMeConfig)) {\n      this.createComponent(currentSizeMeConfig)\n    }\n  }\n\n  createComponent = config => {\n    this.SizeAware = withSize(config)(({ children }) => children)\n  }\n\n  onSize = size => this.setState({ size })\n\n  render() {\n    const { SizeAware } = this\n    const render = this.props.children || this.props.render\n    return (\n      <SizeAware onSize={this.onSize}>\n        {render({ size: this.state.size })}\n      </SizeAware>\n    )\n  }\n}\n","export combineReducers from './combineReducers';\n","import * as React from 'react';\nimport {compose} from 'redux';\nimport {Grid, Theme, IconButton, Typography, WithStyles, withStyles, FormControl, InputLabel, Select, MenuItem, FormControlLabel, Checkbox, Switch} from '@material-ui/core';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {change, InjectedFormProps, BaseFieldProps} from 'redux-form';\nimport {Field, reduxForm, getFormValues} from 'redux-form/immutable';\nimport {StyleRules, WithTheme} from '@material-ui/core/styles';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction/index';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport {connect} from 'react-redux';\nimport {List, Map, is} from 'immutable';\nimport {\n  makeSelectAdminDivisions,\n  makeSelectCities,\n  makeSelectCountries,\n  makeSelectProvinces\n} from '../../modules/ProjectLocationModule/selectors';\nimport {\n  GetCityAction,\n  GetCountriesAction,\n  GetCountryAdminDivisionAction,\n  GetProvinceAction\n} from '../../modules/ProjectLocationModule/actions';\nimport {IFieldAutoSuggestComponentProps} from '../FieldAutoSuggest';\nimport {isNotEmptyStringRequired, required, isNotEmpty } from '../../validators';\nimport FieldAutoSuggest from '../FieldAutoSuggest';\nimport {IMap} from 'ats-utils/src/Interfaces/IMap/index';\nimport {ListItem} from '../../models';\nimport { startCase } from 'lodash';\nimport {makeSelectTeamOrganization, makeSelectOffices} from '../../modules/AccountModule/selectors';\nimport {Office} from '../../models';\nimport {default as FieldCheckbox, IFieldCheckboxComponentProps } from '../FieldCheckbox';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../FieldDropzone';\nimport { uploadFileValidation } from '../TeamManagementUserEditDrawer/Component';\nimport { NoPhotoPreviewAction } from '../../modules/ApplicationModule/actions';\nimport DrawerRow from '../DrawerRow';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { TEAM_MANAGEMENT_OFFICE_EDIT } from './';\n\nconst styles =  (theme: Theme): StyleRules => ({\n  root: {\n  },\n  uploadPhoto: {\n    height: theme.spacing(24),\n    marginBottom: theme.spacing()\n  },\n  title: {\n    marginBottom: theme.spacing(),\n  },\n  bottonMargin: {\n    marginBottom: theme.spacing(),\n  }\n});\n\nclass TeamOrganization {\n  public selectedOfficeId?: number;\n  public selectedUserId?: number;\n  public drawerOfficeId?: number;\n}\n\ninterface ITeamManagementOfficeContentProps {\n  form: string;\n  data: IMap<Office>;\n}\n\ninterface ITeamManagementOfficeContent extends ITeamManagementOfficeContentProps {\n  dispatch: React.Dispatch<IAction>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  getCountries: () => void;\n  formValues: Map<string, any>;\n  adminDivisions: Map<string, string>;\n  teamOrganization: IMap<TeamOrganization>;\n  initialValues: IMap<Office>;\n}\n\ninterface ITeamManagementOfficeState {\n  fileId: string;\n  imageId: string;\n}\n\ntype TeamManagementOfficeContentType = ITeamManagementOfficeContent & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithTheme;\n\nclass TeamManagementOfficeContent extends React.Component<TeamManagementOfficeContentType, ITeamManagementOfficeState> {\n  public state = {\n    fileId: '',\n    imageId: '',\n  };\n\n  public componentDidMount() {\n    const {\n      getCountries,\n      formValues,\n      dispatch,\n      form,\n    } = this.props;\n\n    this.setState({\n      imageId: formValues.get('imageId')\n    });\n    getCountries();\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (countryId != null) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (provinceId != null) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      formValues: prevFormValues,\n    } = prevProps;\n    const {\n      formValues,\n      initialValues,\n      dispatch,\n    } = this.props;\n\n    const {\n      fileId\n    } = this.state;\n\n    if (fileId !== prevState.fileId) {\n      dispatch(change(this.props.form, 'imageId', fileId));\n    }\n\n    if (formValues != null) {\n      const countryId = formValues.getIn(['location', 'country', 'id']);\n      if (prevFormValues == null || countryId !== prevFormValues.getIn(['location', 'country', 'id'])) {\n        this.selectCountry(countryId, false);\n      }\n      const provinceId = formValues.getIn(['location', 'province', 'id']);\n      if (prevFormValues == null || provinceId !== prevFormValues.getIn(['location', 'province', 'id'])) {\n        this.selectProvince(provinceId, false);\n      }\n    }\n\n    if (initialValues && ( !is(initialValues, prevProps.initialValues) )) {\n      this.props.reset();\n    }\n  }\n\n\n  public selectCountry = (_countryId: number | string, clear: boolean = true) => {\n    const {\n      dispatch,\n      countries,\n      form,\n    } = this.props;\n\n    const countryId = Number(_countryId);\n    if (_countryId != null) {\n      dispatch(new GetProvinceAction(_countryId));\n      dispatch(new GetCountryAdminDivisionAction({ countryId }));\n      dispatch(change(form, 'location.country', countries.find((country) => {\n        return country.get('id') === _countryId;\n      })));\n    } else {\n      dispatch(change(form, 'countryId', ''));\n      dispatch(change(form, 'location.country', null));\n    }\n    if (clear) {\n      this.selectProvince();\n    }\n  }\n  public selectProvince = (provinceId?: number, clear: boolean = true) => {\n    const {\n      dispatch,\n      provinces,\n      form,\n    } = this.props;\n    if (provinceId != null) {\n      dispatch(new GetCityAction(provinceId));\n      dispatch(change(form, 'location.province', provinces.find((province) => {\n        return province.get('id') === provinceId;\n      })));\n    } else {\n      dispatch(change(form, 'provinceId', ''));\n      dispatch(change(form, 'location.province', null));\n    }\n    if (clear) {\n      this.selectCity();\n    }\n  }\n  public selectCity = (cityId?: number) => {\n    const {\n      dispatch,\n      cities,\n      form,\n    } = this.props;\n    if (cityId != null) {\n      dispatch(change(form, 'location.city', cities.find((city) => {\n        return city.get('id') === cityId;\n      })));\n    } else {\n      dispatch(change(form, 'cityId', ''));\n      dispatch(change(form, 'location.city', null));\n    }\n  }\n\n  public removePhoto = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(this.props.form, 'imageId', ''));\n    dispatch(change(this.props.form, 'dropzone', ''));\n    this.setState({\n      imageId: ''\n    });\n  }\n\n  public renderLocation = (name: string, label: string, data: List<any>, onChange: (id?: string | number, clear?: boolean) => void) => (\n    <Grid item={true} xs={12}>\n      <Field<BaseFieldProps<IFieldAutoSuggestComponentProps>>\n        name={name}\n        component={FieldAutoSuggest}\n        validate={[\n          required,\n          isNotEmpty,\n        ]}\n        props={{\n          label,\n          require: true,\n          autosuggestProps: {\n            highlightFirstSuggestion: true,\n            directMode: false,\n            data: data.toJS(),\n            renderMissingData: (value: any) => `${this.props.t('generalLoading.shortLoading')}: ${value}`,\n            shouldRenderSuggestions: (value: string = '') => {\n              return value.length !== 0;\n            }\n          },\n          inputProps: {\n            onChange,\n            type: 'text',\n            name: Date.now().toString(),\n            autoComplete: 'no',\n          },\n          formControlProps: {\n            fullWidth: true,\n          }\n        }}\n      />\n    </Grid>\n  )\n\n  public render() {\n    const {\n      imageId\n    } = this.state;\n    const {\n      classes,\n      countries,\n      provinces,\n      cities,\n      adminDivisions,\n      formValues,\n      data,\n      // initialValues,\n      theme,\n      t\n    } = this.props;\n\n    // const imageId = initialValues.get('imageId', '');\n    const countryId = formValues != null ? formValues.getIn(['location', 'country', 'id', -1]) : -1;\n    const adminDivision = startCase(adminDivisions.get(countryId, '')) || t('teamManagementOfficeDrawer.stateProvinceLabel');\n    const headOfficeStatus = data && data.get('headOffice');\n\n    return (\n      <div>\n        <Grid container={true} direction='column' justify='center' className={classes.uploadPhoto}>\n          <Grid container={true} justify='space-between'>\n            <Typography variant='body2' color='inherit' className={classes.title}>\n              {t('teamManagementOfficeDrawer.uploadPhotoTitle')}\n            </Typography>\n            {\n              (imageId || (formValues && formValues.get('dropzone'))) &&\n              <IconButton onClick={this.removePhoto} size='small' className={classes.bottonMargin}>\n                <FontAwesomeIcon icon='trash-alt' size='sm' />\n              </IconButton>\n            }\n          </Grid>\n          <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n            component={FieldDropzone}\n            name='dropzone'\n            validate={uploadFileValidation}\n            props={{\n              initialImage: imageId,\n              suggestText: t('uploadPhoto.suggest')\n            }}\n          />\n        </Grid>\n        <DrawerTextFieldRow\n          name='officeName'\n          validate={[\n            isNotEmptyStringRequired,\n          ]}\n          props={{\n            label: t('teamManagementOfficeDrawer.officeTitleLabel'),\n            require: true,\n            inputProps: {\n              type: 'text',\n              name: Date.now().toString(),\n              autoComplete: 'no',\n            },\n          }}\n          icon='building'\n        />\n        <DrawerRow drawerView={false}>\n          <Grid item={true} xs={12}>\n            <Field<BaseFieldProps<IFieldCheckboxComponentProps>>\n              name='headOffice' // 1 or 0\n              component={FieldCheckbox}\n              props={{\n                variant: 'single',\n                checkedValue: 1,\n                uncheckedValue: 0,\n                label: t('teamManagementOfficeDrawer.headOfficeCheckbox'),\n                inputProps: {\n                  disabled: headOfficeStatus ? true : false\n                }\n              }}\n            />\n          </Grid>\n        </DrawerRow>\n        <DrawerTextFieldRow\n          name='address1'\n          validate={[\n            isNotEmptyStringRequired,\n          ]}\n          props={{\n            label: t('teamManagementOfficeDrawer.addressLabel'),\n            require: true,\n            inputProps: {\n              type: 'text',\n              name: Date.now().toString(),\n              autoComplete: 'no',\n            },\n          }}\n          icon='map-pin'\n        />\n        <DrawerRow drawerView={false}>\n          {this.renderLocation('location.country.id', t('teamManagementOfficeDrawer.countryLabel'), countries, this.selectCountry)}\n          {this.renderLocation('location.province.id', adminDivision, provinces, this.selectProvince)}\n          {this.renderLocation('location.city.id', t('teamManagementOfficeDrawer.cityLabel'), cities, this.selectCity)}\n        </DrawerRow>\n        <DrawerTextFieldRow\n          name='postalZip'\n          validate={[\n            isNotEmptyStringRequired,\n          ]}\n          props={{\n            label: t('teamManagementOfficeDrawer.postalCodeLabel'),\n            require: true,\n            inputProps: {\n              type: 'text',\n              name: Date.now().toString(),\n              autoComplete: 'no',\n            }\n          }}\n        />\n        <DrawerTextFieldRow\n          name='phone'\n          validate={[isNotEmptyStringRequired]}\n          props={{\n            label: t('teamManagementOfficeDrawer.officeNumberLabel'),\n            require: true,\n            inputProps: {\n              type: 'text',\n              name: Date.now().toString(),\n              autoComplete: 'no',\n            },\n          }}\n          icon='phone'\n        />\n      </div>\n    );\n  }\n}\n\n\nconst mapStateToProps = (state, ownProps) => {\n  const data = ownProps.data != null ? ownProps.data : Map<string, any>();\n  const initialValues = data;\n\n  return {\n    countries: makeSelectCountries()(state),\n    adminDivisions: makeSelectAdminDivisions()(state),\n    provinces: makeSelectProvinces()(state),\n    cities: makeSelectCities()(state),\n    teamOrganization: makeSelectTeamOrganization()(state),\n    formValues: getFormValues(ownProps.form)(state),\n    initialValues\n  };\n};\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    getCountries: () => {\n      dispatch(new GetCountriesAction());\n    },\n    dispatch\n  };\n};\n\nconst validate = (formValues: any) => {\n  const errors: any = {};\n  return errors;\n};\n\n\nexport default compose(\n  withStyles(styles, {withTheme: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: 'TeamManagementOfficeDrawerEdit' }),\n  reduxForm({\n    touchOnChange: true,\n    enableReinitialize : true,\n    keepDirtyOnReinitialize: false,\n    forceUnregisterOnUnmount: true,\n    destroyOnUnmount: true,\n    validate\n  }),\n)(TeamManagementOfficeContent);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport GenericDrawer from '../GenericDrawer';\nimport TeamManagementOfficeContent from './Content';\nimport {makeSelectOfficeByTeamOrganization, makeSelectTeamOrganization} from '../../modules/AccountModule/selectors';\nimport {makeSelectUserFirmId} from '../../modules/AtsModule/selectors';\nimport {IMap} from 'ats-utils/src/Interfaces/IMap/index';\nimport {Office} from '../../models';\nimport {UpdateOfficeByIdAction, CreateOfficeAction} from '../../modules/AccountModule/actions';\nimport {Dispatch, compose} from 'redux';\nimport {IAction} from 'ats-utils/src/Interfaces/IAction/index';\nimport {Map, getIn} from 'immutable';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport Xhr from '../../utils/Xhr';\nimport { withAtsApi } from '../../contexts';\nimport Api from 'ats-api/src';\nimport { FieldDropzoneStateResetAction } from '../../modules/ApplicationModule/actions';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\ninterface ITeamManagementOfficeDrawerComponentProps {\n  drawerId: string;\n  handleCancel: () => void;\n  useCustomData?: boolean;\n}\n\ninterface ITeamManagementOfficeDrawer extends ITeamManagementOfficeDrawerComponentProps {\n  office?: IMap<Office>;\n  customOnSubmit?: any;\n  dispatch: Dispatch<IAction>;\n  firmId: number;\n  content: string;\n  atsApi: Api;\n  createOrUpdateOffice(office: IMap<Partial<Office>>, id?: number): void;\n}\n\n// export const DEFAULT_FORM_NAME = 'TeamManagementOfficeDrawerForm';\n// export const TEAM_MANAGEMENT_OFFICE_VIEW = 'TeamManagementOfficeDrawerView';\nexport const TEAM_MANAGEMENT_OFFICE_EDIT = 'TeamManagementOfficeDrawerEdit';\n\n\ntype ITeamManagementOfficeDrawerType = ITeamManagementOfficeDrawer & WithTranslation;\n\nclass TeamManagementOfficeDrawer extends React.Component<ITeamManagementOfficeDrawerType> {\n  public handleSubmit = async (values: Map<string, any>) => {\n    const { office, createOrUpdateOffice, firmId, dispatch, customOnSubmit } = this.props;\n    const imageArray = await Xhr({atsApi: this.props.atsApi, files: values.get('dropzone')});\n    const imageId = getIn(imageArray, [0, 'id'], '');\n    const submitValues: any = values.filter((value, key) => (\n      ['officeName', 'firmId', 'location', 'address1', 'address2', 'postalZip', 'phone',\n        'tollfree', 'fax', 'language', 'headOffice', 'status', 'atsMigrationId', 'batch', 'imageId'].includes(key)\n    )).set('imageId', imageId ? imageId : values.get('imageId'));\n    const id = office && office.get('id');\n\n    if (customOnSubmit) {\n      customOnSubmit(submitValues);\n    }\n\n    if (!submitValues.get('firmId')) {\n      createOrUpdateOffice(submitValues.set('firmId', firmId), id);\n    } else {\n      createOrUpdateOffice(submitValues, id);\n    }\n    dispatch(new FieldDropzoneStateResetAction());\n  }\n\n  public render() {\n    const {\n      drawerId,\n      office,\n      content: _contentString,\n      handleCancel,\n      t\n    } = this.props;\n\n    return (\n      <GenericDrawer\n        ContentComponent={TeamManagementOfficeContent}\n        data={office}\n        title={t('teamManagementOfficeDrawer.drawerTitle')}\n        drawerId={drawerId}\n        form={TEAM_MANAGEMENT_OFFICE_EDIT}\n        onSubmit={(this.handleSubmit)}\n        onCloseOverride={handleCancel}\n      />\n    );\n  }\n}\n\nconst mapStateToProps = (state, props: ITeamManagementOfficeDrawerComponentProps) => {\n  const {\n    drawerId,\n    useCustomData = false,\n  } = props;\n\n  const overlayComponentProps = makeSelectOverlayComponentProp(drawerId)(state) as IMap<{office: IMap<Office>}>;\n  const office = Map.isMap(overlayComponentProps) && overlayComponentProps && overlayComponentProps.get('office');\n  const customOnSubmit = Map.isMap(overlayComponentProps) && overlayComponentProps && overlayComponentProps.get('customOnSubmit');\n  const teamOrganization = makeSelectTeamOrganization()(state);\n  const userFirmId = makeSelectUserFirmId()(state);\n  const firmId = teamOrganization.get('selectedFirmId') !== -1 ? teamOrganization.get('selectedFirmId') : userFirmId;\n\n  return {\n    office: useCustomData ? office : makeSelectOfficeByTeamOrganization()(state),\n    firmId,\n    content: makeSelectOverlayComponentContent(drawerId)(state),\n    ...(customOnSubmit && {customOnSubmit})\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => {\n  return {\n    createOrUpdateOffice: (office: IMap<Partial<Office>>, id?: number) => {\n      if (!id) {\n        dispatch(new CreateOfficeAction({ office }));\n      } else {\n        dispatch(new UpdateOfficeByIdAction({ id, office }));\n      }\n    },\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<ITeamManagementOfficeDrawerComponentProps>> (\n  withAtsApi(),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(TeamManagementOfficeDrawer);\n\n","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","import arrayWithHoles from \"@babel/runtime/helpers/esm/arrayWithHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime/helpers/esm/nonIterableRest\";\nexport default function _toArray(arr) {\n  return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar util = require('./utils');\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = util.assign(\n    {\n        'default': Format.RFC3986,\n        formatters: {\n            RFC1738: function (value) {\n                return replace.call(value, percentTwenties, '+');\n            },\n            RFC3986: function (value) {\n                return String(value);\n            }\n        }\n    },\n    Format\n);\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]], '-',\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]],\n    bth[buf[i++]], bth[buf[i++]]\n  ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _actionTypes = require(\"./actionTypes\");\n\nvar arrayInsert = function arrayInsert(form, field, index, value) {\n  return {\n    type: _actionTypes.ARRAY_INSERT,\n    meta: {\n      form: form,\n      field: field,\n      index: index\n    },\n    payload: value\n  };\n};\n\nvar arrayMove = function arrayMove(form, field, from, to) {\n  return {\n    type: _actionTypes.ARRAY_MOVE,\n    meta: {\n      form: form,\n      field: field,\n      from: from,\n      to: to\n    }\n  };\n};\n\nvar arrayPop = function arrayPop(form, field) {\n  return {\n    type: _actionTypes.ARRAY_POP,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arrayPush = function arrayPush(form, field, value) {\n  return {\n    type: _actionTypes.ARRAY_PUSH,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar arrayRemove = function arrayRemove(form, field, index) {\n  return {\n    type: _actionTypes.ARRAY_REMOVE,\n    meta: {\n      form: form,\n      field: field,\n      index: index\n    }\n  };\n};\n\nvar arrayRemoveAll = function arrayRemoveAll(form, field) {\n  return {\n    type: _actionTypes.ARRAY_REMOVE_ALL,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arrayShift = function arrayShift(form, field) {\n  return {\n    type: _actionTypes.ARRAY_SHIFT,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar arraySplice = function arraySplice(form, field, index, removeNum, value) {\n  var action = {\n    type: _actionTypes.ARRAY_SPLICE,\n    meta: {\n      form: form,\n      field: field,\n      index: index,\n      removeNum: removeNum\n    }\n  };\n\n  if (value !== undefined) {\n    action.payload = value;\n  }\n\n  return action;\n};\n\nvar arraySwap = function arraySwap(form, field, indexA, indexB) {\n  if (indexA === indexB) {\n    throw new Error('Swap indices cannot be equal');\n  }\n\n  if (indexA < 0 || indexB < 0) {\n    throw new Error('Swap indices cannot be negative');\n  }\n\n  return {\n    type: _actionTypes.ARRAY_SWAP,\n    meta: {\n      form: form,\n      field: field,\n      indexA: indexA,\n      indexB: indexB\n    }\n  };\n};\n\nvar arrayUnshift = function arrayUnshift(form, field, value) {\n  return {\n    type: _actionTypes.ARRAY_UNSHIFT,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar autofill = function autofill(form, field, value) {\n  return {\n    type: _actionTypes.AUTOFILL,\n    meta: {\n      form: form,\n      field: field\n    },\n    payload: value\n  };\n};\n\nvar blur = function blur(form, field, value, touch) {\n  return {\n    type: _actionTypes.BLUR,\n    meta: {\n      form: form,\n      field: field,\n      touch: touch\n    },\n    payload: value\n  };\n};\n\nvar change = function change(form, field, value, touch, persistentSubmitErrors) {\n  return {\n    type: _actionTypes.CHANGE,\n    meta: {\n      form: form,\n      field: field,\n      touch: touch,\n      persistentSubmitErrors: persistentSubmitErrors\n    },\n    payload: value\n  };\n};\n\nvar clearSubmit = function clearSubmit(form) {\n  return {\n    type: _actionTypes.CLEAR_SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar clearSubmitErrors = function clearSubmitErrors(form) {\n  return {\n    type: _actionTypes.CLEAR_SUBMIT_ERRORS,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar clearAsyncError = function clearAsyncError(form, field) {\n  return {\n    type: _actionTypes.CLEAR_ASYNC_ERROR,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar clearFields = function clearFields(form, keepTouched, persistentSubmitErrors) {\n  for (var _len = arguments.length, fields = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    fields[_key - 3] = arguments[_key];\n  }\n\n  return {\n    type: _actionTypes.CLEAR_FIELDS,\n    meta: {\n      form: form,\n      keepTouched: keepTouched,\n      persistentSubmitErrors: persistentSubmitErrors,\n      fields: fields\n    }\n  };\n};\n\nvar destroy = function destroy() {\n  for (var _len2 = arguments.length, form = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    form[_key2] = arguments[_key2];\n  }\n\n  return {\n    type: _actionTypes.DESTROY,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar focus = function focus(form, field) {\n  return {\n    type: _actionTypes.FOCUS,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar initialize = function initialize(form, values, keepDirty, otherMeta) {\n  if (otherMeta === void 0) {\n    otherMeta = {};\n  }\n\n  if (keepDirty instanceof Object) {\n    otherMeta = keepDirty;\n    keepDirty = false;\n  }\n\n  return {\n    type: _actionTypes.INITIALIZE,\n    meta: (0, _extends2[\"default\"])({\n      form: form,\n      keepDirty: keepDirty\n    }, otherMeta),\n    payload: values\n  };\n};\n\nvar registerField = function registerField(form, name, type) {\n  return {\n    type: _actionTypes.REGISTER_FIELD,\n    meta: {\n      form: form\n    },\n    payload: {\n      name: name,\n      type: type\n    }\n  };\n};\n\nvar reset = function reset(form) {\n  return {\n    type: _actionTypes.RESET,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar resetSection = function resetSection(form) {\n  for (var _len3 = arguments.length, sections = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    sections[_key3 - 1] = arguments[_key3];\n  }\n\n  return {\n    type: _actionTypes.RESET_SECTION,\n    meta: {\n      form: form,\n      sections: sections\n    }\n  };\n};\n\nvar startAsyncValidation = function startAsyncValidation(form, field) {\n  return {\n    type: _actionTypes.START_ASYNC_VALIDATION,\n    meta: {\n      form: form,\n      field: field\n    }\n  };\n};\n\nvar startSubmit = function startSubmit(form) {\n  return {\n    type: _actionTypes.START_SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar stopAsyncValidation = function stopAsyncValidation(form, errors) {\n  return {\n    type: _actionTypes.STOP_ASYNC_VALIDATION,\n    meta: {\n      form: form\n    },\n    payload: errors,\n    error: !!(errors && Object.keys(errors).length)\n  };\n};\n\nvar stopSubmit = function stopSubmit(form, errors) {\n  return {\n    type: _actionTypes.STOP_SUBMIT,\n    meta: {\n      form: form\n    },\n    payload: errors,\n    error: !!(errors && Object.keys(errors).length)\n  };\n};\n\nvar submit = function submit(form) {\n  return {\n    type: _actionTypes.SUBMIT,\n    meta: {\n      form: form\n    }\n  };\n};\n\nvar setSubmitFailed = function setSubmitFailed(form) {\n  for (var _len4 = arguments.length, fields = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    fields[_key4 - 1] = arguments[_key4];\n  }\n\n  return {\n    type: _actionTypes.SET_SUBMIT_FAILED,\n    meta: {\n      form: form,\n      fields: fields\n    },\n    error: true\n  };\n};\n\nvar setSubmitSucceeded = function setSubmitSucceeded(form) {\n  for (var _len5 = arguments.length, fields = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    fields[_key5 - 1] = arguments[_key5];\n  }\n\n  return {\n    type: _actionTypes.SET_SUBMIT_SUCCEEDED,\n    meta: {\n      form: form,\n      fields: fields\n    },\n    error: false\n  };\n};\n\nvar touch = function touch(form) {\n  for (var _len6 = arguments.length, fields = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n    fields[_key6 - 1] = arguments[_key6];\n  }\n\n  return {\n    type: _actionTypes.TOUCH,\n    meta: {\n      form: form,\n      fields: fields\n    }\n  };\n};\n\nvar unregisterField = function unregisterField(form, name, destroyOnUnmount) {\n  if (destroyOnUnmount === void 0) {\n    destroyOnUnmount = true;\n  }\n\n  return {\n    type: _actionTypes.UNREGISTER_FIELD,\n    meta: {\n      form: form\n    },\n    payload: {\n      name: name,\n      destroyOnUnmount: destroyOnUnmount\n    }\n  };\n};\n\nvar untouch = function untouch(form) {\n  for (var _len7 = arguments.length, fields = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n    fields[_key7 - 1] = arguments[_key7];\n  }\n\n  return {\n    type: _actionTypes.UNTOUCH,\n    meta: {\n      form: form,\n      fields: fields\n    }\n  };\n};\n\nvar updateSyncErrors = function updateSyncErrors(form, syncErrors, error) {\n  if (syncErrors === void 0) {\n    syncErrors = {};\n  }\n\n  return {\n    type: _actionTypes.UPDATE_SYNC_ERRORS,\n    meta: {\n      form: form\n    },\n    payload: {\n      syncErrors: syncErrors,\n      error: error\n    }\n  };\n};\n\nvar updateSyncWarnings = function updateSyncWarnings(form, syncWarnings, warning) {\n  if (syncWarnings === void 0) {\n    syncWarnings = {};\n  }\n\n  return {\n    type: _actionTypes.UPDATE_SYNC_WARNINGS,\n    meta: {\n      form: form\n    },\n    payload: {\n      syncWarnings: syncWarnings,\n      warning: warning\n    }\n  };\n};\n\nvar actions = {\n  arrayInsert: arrayInsert,\n  arrayMove: arrayMove,\n  arrayPop: arrayPop,\n  arrayPush: arrayPush,\n  arrayRemove: arrayRemove,\n  arrayRemoveAll: arrayRemoveAll,\n  arrayShift: arrayShift,\n  arraySplice: arraySplice,\n  arraySwap: arraySwap,\n  arrayUnshift: arrayUnshift,\n  autofill: autofill,\n  blur: blur,\n  change: change,\n  clearFields: clearFields,\n  clearSubmit: clearSubmit,\n  clearSubmitErrors: clearSubmitErrors,\n  clearAsyncError: clearAsyncError,\n  destroy: destroy,\n  focus: focus,\n  initialize: initialize,\n  registerField: registerField,\n  reset: reset,\n  resetSection: resetSection,\n  startAsyncValidation: startAsyncValidation,\n  startSubmit: startSubmit,\n  stopAsyncValidation: stopAsyncValidation,\n  stopSubmit: stopSubmit,\n  submit: submit,\n  setSubmitFailed: setSubmitFailed,\n  setSubmitSucceeded: setSubmitSucceeded,\n  touch: touch,\n  unregisterField: unregisterField,\n  untouch: untouch,\n  updateSyncErrors: updateSyncErrors,\n  updateSyncWarnings: updateSyncWarnings\n};\nvar _default = actions;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar defaultShouldAsyncValidate = function defaultShouldAsyncValidate(_ref) {\n  var initialized = _ref.initialized,\n      trigger = _ref.trigger,\n      pristine = _ref.pristine,\n      syncValidationPasses = _ref.syncValidationPasses;\n\n  if (!syncValidationPasses) {\n    return false;\n  }\n\n  switch (trigger) {\n    case 'blur':\n    case 'change':\n      // blurring\n      return true;\n\n    case 'submit':\n      // submitting, so only async validate if form is dirty or was never initialized\n      // conversely, DON'T async validate if the form is pristine just as it was initialized\n      return !pristine || !initialized;\n\n    default:\n      return false;\n  }\n};\n\nvar _default = defaultShouldAsyncValidate;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar defaultShouldValidate = function defaultShouldValidate(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nvar _default = defaultShouldValidate;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar defaultShouldError = function defaultShouldError(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nvar _default = defaultShouldError;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar defaultShouldWarn = function defaultShouldWarn(_ref) {\n  var values = _ref.values,\n      nextProps = _ref.nextProps,\n      initialRender = _ref.initialRender,\n      lastFieldValidatorKeys = _ref.lastFieldValidatorKeys,\n      fieldValidatorKeys = _ref.fieldValidatorKeys,\n      structure = _ref.structure;\n\n  if (initialRender) {\n    return true;\n  }\n\n  return !structure.deepEqual(values, nextProps && nextProps.values) || !structure.deepEqual(lastFieldValidatorKeys, fieldValidatorKeys);\n};\n\nvar _default = defaultShouldWarn;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _es6Error = _interopRequireDefault(require(\"es6-error\"));\n\nvar SubmissionError =\n/*#__PURE__*/\nfunction (_ExtendableError) {\n  (0, _inheritsLoose2[\"default\"])(SubmissionError, _ExtendableError);\n\n  function SubmissionError(errors) {\n    var _this;\n\n    _this = _ExtendableError.call(this, 'Submit Validation Failed') || this;\n    _this.errors = errors;\n    return _this;\n  }\n\n  return SubmissionError;\n}(_es6Error[\"default\"]);\n\nvar _default = SubmissionError;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar processProps = function processProps(type, props, _value, deepEqual) {\n  var value = props.value;\n\n  if (type === 'checkbox') {\n    return (0, _extends2[\"default\"])({}, props, {\n      checked: !!value\n    });\n  }\n\n  if (type === 'radio') {\n    return (0, _extends2[\"default\"])({}, props, {\n      checked: deepEqual(value, _value),\n      value: _value\n    });\n  }\n\n  if (type === 'select-multiple') {\n    return (0, _extends2[\"default\"])({}, props, {\n      value: value || []\n    });\n  }\n\n  if (type === 'file') {\n    return (0, _extends2[\"default\"])({}, props, {\n      value: value || undefined\n    });\n  }\n\n  return props;\n};\n\nvar createFieldProps = function createFieldProps(_ref, name, _ref2) {\n  var getIn = _ref.getIn,\n      toJS = _ref.toJS,\n      deepEqual = _ref.deepEqual;\n  var asyncError = _ref2.asyncError,\n      asyncValidating = _ref2.asyncValidating,\n      onBlur = _ref2.onBlur,\n      onChange = _ref2.onChange,\n      onDrop = _ref2.onDrop,\n      onDragStart = _ref2.onDragStart,\n      dirty = _ref2.dirty,\n      dispatch = _ref2.dispatch,\n      onFocus = _ref2.onFocus,\n      form = _ref2.form,\n      format = _ref2.format,\n      initial = _ref2.initial,\n      parse = _ref2.parse,\n      pristine = _ref2.pristine,\n      props = _ref2.props,\n      state = _ref2.state,\n      submitError = _ref2.submitError,\n      submitFailed = _ref2.submitFailed,\n      submitting = _ref2.submitting,\n      syncError = _ref2.syncError,\n      syncWarning = _ref2.syncWarning,\n      validate = _ref2.validate,\n      value = _ref2.value,\n      _value = _ref2._value,\n      warn = _ref2.warn,\n      custom = (0, _objectWithoutPropertiesLoose2[\"default\"])(_ref2, [\"asyncError\", \"asyncValidating\", \"onBlur\", \"onChange\", \"onDrop\", \"onDragStart\", \"dirty\", \"dispatch\", \"onFocus\", \"form\", \"format\", \"initial\", \"parse\", \"pristine\", \"props\", \"state\", \"submitError\", \"submitFailed\", \"submitting\", \"syncError\", \"syncWarning\", \"validate\", \"value\", \"_value\", \"warn\"]);\n  var error = syncError || asyncError || submitError;\n  var warning = syncWarning;\n\n  var formatFieldValue = function formatFieldValue(value, format) {\n    if (format === null) {\n      return value;\n    }\n\n    var defaultFormattedValue = value == null ? '' : value;\n    return format ? format(value, name) : defaultFormattedValue;\n  };\n\n  var formattedFieldValue = formatFieldValue(value, format);\n  return {\n    input: processProps(custom.type, {\n      name: name,\n      onBlur: onBlur,\n      onChange: onChange,\n      onDragStart: onDragStart,\n      onDrop: onDrop,\n      onFocus: onFocus,\n      value: formattedFieldValue\n    }, _value, deepEqual),\n    meta: (0, _extends2[\"default\"])({}, toJS(state), {\n      active: !!(state && getIn(state, 'active')),\n      asyncValidating: asyncValidating,\n      autofilled: !!(state && getIn(state, 'autofilled')),\n      dirty: dirty,\n      dispatch: dispatch,\n      error: error,\n      form: form,\n      initial: initial,\n      warning: warning,\n      invalid: !!error,\n      pristine: pristine,\n      submitting: !!submitting,\n      submitFailed: !!submitFailed,\n      touched: !!(state && getIn(state, 'touched')),\n      valid: !error,\n      visited: !!(state && getIn(state, 'visited'))\n    }),\n    custom: (0, _extends2[\"default\"])({}, custom, props)\n  };\n};\n\nvar _default = createFieldProps;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getValue = _interopRequireDefault(require(\"./getValue\"));\n\nvar _isReactNative = _interopRequireDefault(require(\"../isReactNative\"));\n\nvar onChangeValue = function onChangeValue(event, _ref) {\n  var name = _ref.name,\n      parse = _ref.parse,\n      normalize = _ref.normalize;\n  // read value from input\n  var value = (0, _getValue[\"default\"])(event, _isReactNative[\"default\"]); // parse value if we have a parser\n\n  if (parse) {\n    value = parse(value, name);\n  } // normalize value\n\n\n  if (normalize) {\n    value = normalize(name, value);\n  }\n\n  return value;\n};\n\nvar _default = onChangeValue;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\nvar isReactNative = typeof window !== 'undefined' && window.navigator && window.navigator.product && window.navigator.product === 'ReactNative';\nvar _default = isReactNative;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nvar getIn = function getIn(state, field) {\n  if (!state) {\n    return state;\n  }\n\n  var path = (0, _toPath2[\"default\"])(field);\n  var length = path.length;\n\n  if (!length) {\n    return undefined;\n  }\n\n  var result = state;\n\n  for (var i = 0; i < length && result; ++i) {\n    result = result[path[i]];\n  }\n\n  return result;\n};\n\nvar _default = getIn;\nexports[\"default\"] = _default;","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nfunction keys(value) {\n  if (!value) {\n    return [];\n  }\n\n  if (Array.isArray(value)) {\n    return value.map(function (i) {\n      return i.name;\n    });\n  }\n\n  return Object.keys(value);\n}\n\nvar _default = keys;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isEqualWith2 = _interopRequireDefault(require(\"lodash/isEqualWith\"));\n\nvar customizer = function customizer(objectValue, otherValue, indexOrkey, object, other, stack) {\n  // https://lodash.com/docs/4.17.4#isEqualWith\n  if (stack) {\n    // Shallow compares\n    // For 1st level, stack === undefined.\n    //   -> Do nothing (and implicitly return undefined so that it goes to compare 2nd level)\n    // For 2nd level and up, stack !== undefined.\n    //   -> Compare by === operator\n    return objectValue === otherValue;\n  }\n};\n\nvar shallowCompare = function shallowCompare(instance, nextProps, nextState) {\n  var propsEqual = (0, _isEqualWith2[\"default\"])(instance.props, nextProps, customizer);\n  var stateEqual = (0, _isEqualWith2[\"default\"])(instance.state, nextState, customizer);\n  return !propsEqual || !stateEqual;\n};\n\nvar _default = shallowCompare;\nexports[\"default\"] = _default;","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createIsPristine = function createIsPristine(_ref) {\n  var deepEqual = _ref.deepEqual,\n      empty = _ref.empty,\n      getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      var formState = nonNullGetFormState(state);\n\n      for (var _len = arguments.length, fields = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        fields[_key - 1] = arguments[_key];\n      }\n\n      if (fields && fields.length) {\n        return fields.every(function (field) {\n          var fieldInitial = getIn(formState, form + \".initial.\" + field);\n          var fieldValue = getIn(formState, form + \".values.\" + field);\n          return deepEqual(fieldInitial, fieldValue);\n        });\n      }\n\n      var initial = getIn(formState, form + \".initial\") || empty;\n      var values = getIn(formState, form + \".values\") || initial;\n      return deepEqual(initial, values);\n    };\n  };\n};\n\nvar _default = createIsPristine;\nexports[\"default\"] = _default;","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isEvent = _interopRequireDefault(require(\"./isEvent\"));\n\nvar silenceEvent = function silenceEvent(event) {\n  var is = (0, _isEvent[\"default\"])(event);\n\n  if (is) {\n    event.preventDefault();\n  }\n\n  return is;\n};\n\nvar _default = silenceEvent;\nexports[\"default\"] = _default;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport function isPlainObject(item) {\n  return item && _typeof(item) === 'object' && item.constructor === Object;\n}\nexport default function deepmerge(target, source) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n    clone: true\n  };\n  var output = options.clone ? _extends({}, target) : target;\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(function (key) {\n      // Avoid prototype pollution\n      if (key === '__proto__') {\n        return;\n      }\n\n      if (isPlainObject(source[key]) && key in target) {\n        output[key] = deepmerge(target[key], source[key], options);\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n\n  return output;\n}","(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = 'status' in options ? options.status : 200\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","export default (action: Object): string => {\n  return action && action.type === '@@redux/INIT' ? 'initialState argument passed to createStore' : 'previous state received by the reducer';\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.$ = $;\nexports.setState = setState;\nexports.unmount = unmount;\nexports.swap = swap;\nexports.register = register;\nfunction $(ident) {\n  return function (action) {\n    var useLocal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    // 'localize' an event. super convenient for making actions 'local' to this component\n    return _extends({}, action, {\n      type: ident + ':' + action.type,\n      meta: _extends({}, action.meta || {}, {\n        ident: ident,\n        type: action.type,\n        local: useLocal\n      })\n    });\n  };\n}\n\nfunction setState(ident) {\n  return function (state) {\n    return { type: '$$local.setState', payload: { state: state, ident: ident } };\n  };\n}\n\nfunction unmount(ident, persist) {\n  return function () {\n    return {\n      type: '$$local.unmount',\n      payload: {\n        ident: ident,\n        persist: persist\n      }\n    };\n  };\n}\n\nfunction swap(ident, reducer, persist, next, initial) {\n  return function () {\n    return {\n      type: '$$local.swap',\n      payload: {\n        ident: ident,\n        next: next,\n        initial: initial,\n        reducer: reducer,\n        persist: persist\n      }\n    };\n  };\n}\n\nfunction register(ident, initial, reducer, persist) {\n  return function () {\n    return {\n      type: '$$local.register',\n      payload: {\n        ident: ident,\n        initial: initial,\n        reducer: reducer,\n        persist: persist\n      }\n    };\n  };\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _reactRouter = require(\"react-router\");\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar createSelectors = function createSelectors(structure) {\n  var getIn = structure.getIn,\n      toJS = structure.toJS;\n\n  var isRouter = function isRouter(value) {\n    return value != null && _typeof(value) === 'object' && getIn(value, ['location']) && getIn(value, ['action']);\n  };\n\n  var getRouter = function getRouter(state) {\n    var router = toJS(getIn(state, ['router']));\n\n    if (!isRouter(router)) {\n      throw 'Could not find router reducer in state tree, it must be mounted under \"router\"';\n    }\n\n    return router;\n  };\n\n  var getLocation = function getLocation(state) {\n    return toJS(getIn(getRouter(state), ['location']));\n  };\n\n  var getAction = function getAction(state) {\n    return toJS(getIn(getRouter(state), ['action']));\n  };\n\n  var getSearch = function getSearch(state) {\n    return toJS(getIn(getRouter(state), ['location', 'search']));\n  };\n\n  var getHash = function getHash(state) {\n    return toJS(getIn(getRouter(state), ['location', 'hash']));\n  }; // It only makes sense to recalculate the `matchPath` whenever the pathname\n  // of the location changes. That's why `createMatchSelector` memoizes\n  // the latest result based on the location's pathname.\n\n\n  var createMatchSelector = function createMatchSelector(path) {\n    var lastPathname = null;\n    var lastMatch = null;\n    return function (state) {\n      var _ref = getLocation(state) || {},\n          pathname = _ref.pathname;\n\n      if (pathname === lastPathname) {\n        return lastMatch;\n      }\n\n      lastPathname = pathname;\n      var match = (0, _reactRouter.matchPath)(pathname, path);\n\n      if (!match || !lastMatch || match.url !== lastMatch.url) {\n        lastMatch = match;\n      }\n\n      return lastMatch;\n    };\n  };\n\n  return {\n    getLocation: getLocation,\n    getAction: getAction,\n    getRouter: getRouter,\n    getSearch: getSearch,\n    getHash: getHash,\n    createMatchSelector: createMatchSelector\n  };\n};\n\nvar _default = createSelectors;\nexports.default = _default;","import _ from 'lodash';\nimport {\n  Map\n} from 'immutable';\n\nimport {\n  Validator,\n} from 'redux-form';\n\nimport { getFilterConfigFromPropsAndName } from '../utils';\nimport { IMap } from 'ats-utils/src';\nimport { TableColumnConfig } from '../../../models';\n\nexport const defaultConfig = Map({\n  label: 'Value'\n});\n\nlet cachedValidate = Map<any, Validator>();\n\nexport const validate = (_filterConfig: IMap<TableColumnConfig>) => {\n  const validatorKey = _filterConfig;\n\n  if (!cachedValidate.has(validatorKey)) {\n    cachedValidate = cachedValidate.set(validatorKey,\n      (value = '', allValues, props, name) => {\n        const filterConfig = _filterConfig || getFilterConfigFromPropsAndName({props, name}) || Map<string, any>();\n        const config = defaultConfig.merge(filterConfig.getIn(['component_data', 'validate']));\n        const label = config.get('label') || 'Value';\n\n        if (config.get('required') && (value === '' || value == null)) {\n          return `${label} is required`;\n        }\n\n        const min = _.toNumber(config.get('min'));\n\n        if (_.isNumber(min) && value.length < min) {\n          return `${label} can't be less than ${min} characters`;\n        }\n        const max = _.toNumber(config.get('max'));\n\n        if (_.isNumber(max) && value.length > max) {\n          return `${label} can't be greater than ${max} characters`;\n        }\n\n        return null;\n      }\n    );\n  }\n  return cachedValidate.get(validatorKey);\n};\n\nexport default validate;\n","import * as React from 'react';\nimport {\n  TextField,\n  Popper,\n  Tooltip,\n  WithStyles,\n  Theme,\n  createStyles,\n  withStyles,\n} from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { compose } from 'redux';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport useTogglePaper from '../../hooks/useTogglePaper';\n\ninterface IAtsAutocompleteProps {\n  caption?: boolean;\n  textFieldProps?: object;\n  textField_inputProps?: object;\n  error?: boolean;\n  require?: boolean;\n  customOverrides: any;\n  rest?: object;\n}\n\nexport type AtsAutocompleteProps = IAtsAutocompleteProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst AtsAutocomplete: React.FC<AtsAutocompleteProps> = (props) => {\n  const {\n    t,\n    tReady,\n    classes,\n    caption = false,\n    textFieldProps = {},\n    textField_inputProps = {},\n    error = false,\n    require = false,\n    customOverrides,\n    ...rest\n  } = props;\n\n  // inputTooltip is an optional (value) => ReactNode hook consumers can pass via inputProps to\n  // show a tooltip over the input reflecting the current selection; inputTooltipPlacement sets its\n  // position (MUI TooltipProps['placement']) and inputTooltipClasses overrides its classes (e.g. to\n  // tighten the gap). paperToggle* render a switch pinned above the option list inside the dropdown.\n  // Pull them out so they are not spread onto Autocomplete as unknown props.\n  const {\n    inputTooltip,\n    inputTooltipPlacement,\n    inputTooltipClasses,\n    paperToggle,\n    paperToggleChecked,\n    paperToggleLabel,\n    onPaperToggleChange,\n    ...autocompleteOverrides\n  } = customOverrides;\n\n  const PaperComponent = useTogglePaper({\n    enabled: paperToggle,\n    checked: paperToggleChecked,\n    label: paperToggleLabel,\n    onChange: onPaperToggleChange,\n  });\n\n  const renderInput = params => (\n    <TextField\n      {...params}\n      label={ customOverrides.label && require ? `${customOverrides.label} *` : customOverrides.label }\n      placeholder={ customOverrides.placeholder && require ? `${customOverrides.placeholder} *` : customOverrides.placeholder }\n      fullWidth={true}\n      inputProps={{ ...params.inputProps, ...textField_inputProps, className: caption ? classes.input : ''}}\n      error={error}\n      {...textFieldProps}\n    />\n  );\n\n  return (\n    <Autocomplete\n      renderInput={inputTooltip\n        ? params => (\n          <Tooltip title={inputTooltip(autocompleteOverrides.value) || ''} placement={inputTooltipPlacement} classes={inputTooltipClasses}>\n            {renderInput(params)}\n          </Tooltip>\n        )\n        : renderInput\n      }\n      openText={t('formButtons.open')}\n      closeText={t('formButtons.close')}\n      clearText={t('formButtons.clear')}\n      noOptionsText={t('generalDropdown.noOptions')}\n      loadingText={t('generalLoading.loading')}\n      {...autocompleteOverrides}\n      {...rest}\n      {...(PaperComponent ? { PaperComponent } : {})}\n    />\n  );\n};\n\nconst styles = (theme: Theme) => createStyles({\n  input: {\n    fontSize: theme.typography.caption.fontSize\n  }\n});\n\nexport default compose<React.ComponentClass<IAtsAutocompleteProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n)(AtsAutocomplete);","import { fromJS } from 'immutable';\nimport {\n  CHANGE_PAGE,\n  CHANGE_RECORD,\n  CHANGE_PER_PAGE,\n  FIND_RECORD,\n} from './constants';\nimport {\n  ILocalAction,\n} from 'ats-utils/src/Interfaces';\n\nexport const INITIAL_STATE = fromJS({\n  currentPage: 0,\n  currentRecord: 0,\n  perPage: 10,\n  selectedRecord: -1,\n});\n\nconst localReducer = (state: any = INITIAL_STATE, action: ILocalAction) => {\n  // console.error('action', {\n  //   state: state.toJS(),\n  //   action,\n  // });\n  if (action.me) {\n    switch (action.meta.type) {\n      case CHANGE_PER_PAGE: {\n        const {\n          perPage\n        } = action.payload;\n        return state.set('perPage', Math.max(1, perPage));\n      }\n      case CHANGE_PAGE: {\n        const {\n          absolute,\n          page,\n        } = action.payload;\n        if (!absolute) {\n          return state.update('currentPage', (val) => Math.max(0, val + page));\n        }\n        return state.set('currentPage', Math.max(0, page));\n      }\n      case CHANGE_RECORD: {\n        const {\n          absolute,\n          record,\n        } = action.payload;\n        if (!absolute) {\n          return state.update('currentRecord', (val) => Math.max(0, val + record));\n        }\n        return state.set('currentRecord', Math.max(0, record));\n      }\n      case FIND_RECORD: {\n        const {\n          index,\n        } = action.payload;\n        const perPage = state.get('perPage');\n        const page = Math.max(0, Math.floor(Number(index) / Number(perPage)));\n        return state.withMutations((ctx) => {\n          ctx.set('selectedRecord', index);\n          ctx.set('currentPage', isNaN(page) ? 0 : page);\n        });\n      }\n      default:\n        return state;\n    }\n  }\n  return state;\n};\n\nexport default localReducer;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","module.exports = require('./_hide');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","import * as React from 'react';\nimport {\n  MenuItem,\n  Popper,\n  Button,\n  ListItemIcon,\n  ListItemText,\n  Tooltip,\n} from '@material-ui/core';\nimport { components } from 'react-select';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nexport const Input = (props) => {\n  // must manually set isHidden because otherwise it would set opacity to 0 when selecting a new product\n  return (\n    <div style={{border: '0', fontSize: 'inherit'}}>\n      <components.Input {...props} isHidden={false}/>\n    </div>\n  );\n};\n\nexport const Menu = (\n  anchorEl: React.RefObject<HTMLElement>,\n  openDrawer: (createProduct: boolean) => () => void,\n) => (props) => {\n  const width = anchorEl.current != null ? anchorEl.current.clientWidth : 256;\n  return (\n    <React.Fragment>\n      <Popper\n        open={true}\n        anchorEl={anchorEl.current}\n        placement='bottom-start'\n        style={{width, marginTop: 32, zIndex: 1500}}\n      >\n        <components.Menu {...props}>\n          {props.children}\n          <Button\n            color='primary' style={{width: '50%'}}\n            onClick={openDrawer(true)}\n          >\n            + Product\n          </Button>\n          <Button\n            color='primary' style={{width: '50%'}}\n            onClick={openDrawer(false)}\n          >\n            + Package\n          </Button>\n        </components.Menu>\n      </Popper>\n    </React.Fragment>\n  );\n};\n\nexport const Option: React.SFC<any> = ({\n                                  children,\n                                  isFocused,\n                                  isDisabled,\n                                  innerProps,\n                                  innerRef,\n                                  data,\n                                }) => {\n  return (\n    <MenuItem\n      selected={isFocused}\n      disabled={isDisabled}\n      {...innerProps}\n      style={{\n        whiteSpace: 'normal',\n      }}\n      ref={innerRef}\n    >\n      <ListItemIcon>\n        <FontAwesomeIcon icon={data.flag === 'package' ? 'boxes' : 'box'}/>\n      </ListItemIcon>\n      <ListItemText\n        disableTypography={true}\n        primary={<strong>{data.label}</strong>}\n        secondary={<Tooltip title={data.description}>\n        <div style={{\n          overflow: 'hidden',\n          textOverflow: 'ellipsis',\n          whiteSpace: 'nowrap',\n          width: '100%',\n        }}>\n          {data.description}\n        </div></Tooltip>}\n      />\n    </MenuItem>\n  );\n};\n\nexport const customSelectStyles = {\n  control: providedStyles => ({\n    ...providedStyles,\n    borderWidth: `0 0 1px 0`,\n    borderRadius: '0',\n    background: '#F5F5F5'\n  }),\n  indicatorSeparator: providedStyles => ({\n    ...providedStyles,\n    backgroundColor: 'transparent',\n  }),\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4 20h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2zM2 6c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2zm4 1H4V5h2v2zm-2 7h16c1.1 0 2-.9 2-2s-.9-2-2-2H4c-1.1 0-2 .9-2 2s.9 2 2 2zm0-3h2v2H4v-2z\"\n}), 'StorageRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"\n}), 'Lock');\n\nexports.default = _default;","var defineProperty = require(\"./defineProperty\");\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectSpread2;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct\");\n\nvar possibleConstructorReturn = require(\"./possibleConstructorReturn\");\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return possibleConstructorReturn(this, result);\n  };\n}\n\nmodule.exports = _createSuper;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\nexports.getBoundPosition = getBoundPosition;\nexports.getControlPosition = getControlPosition;\nexports.snapToGrid = snapToGrid;\nvar _shims = require(\"./shims\");\nvar _domFns = require(\"./domFns\");\n/*:: import type Draggable from '../Draggable';*/\n/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n/*:: import type DraggableCore from '../DraggableCore';*/\nfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/{\n  // If no bounds, short-circuit and move on\n  if (!draggable.props.bounds) return [x, y];\n\n  // Clone new bounds\n  let {\n    bounds\n  } = draggable.props;\n  bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n  const node = findDOMNode(draggable);\n  if (typeof bounds === 'string') {\n    const {\n      ownerDocument\n    } = node;\n    const ownerWindow = ownerDocument.defaultView;\n    let boundNode;\n    if (bounds === 'parent') {\n      boundNode = node.parentNode;\n    } else {\n      boundNode = ownerDocument.querySelector(bounds);\n    }\n    if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n      throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n    }\n    const boundNodeEl /*: HTMLElement*/ = boundNode; // for Flow, can't seem to refine correctly\n    const nodeStyle = ownerWindow.getComputedStyle(node);\n    const boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);\n    // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n    bounds = {\n      left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n      top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n      right: (0, _domFns.innerWidth)(boundNodeEl) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n      bottom: (0, _domFns.innerHeight)(boundNodeEl) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n    };\n  }\n\n  // Keep x and y below right and bottom limits...\n  if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n  if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n  // But above left and top limits.\n  if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n  if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n  return [x, y];\n}\nfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/{\n  const x = Math.round(pendingX / grid[0]) * grid[0];\n  const y = Math.round(pendingY / grid[1]) * grid[1];\n  return [x, y];\n}\nfunction canDragX(draggable /*: Draggable*/) /*: boolean*/{\n  return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\nfunction canDragY(draggable /*: Draggable*/) /*: boolean*/{\n  return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n}\n\n// Get {x, y} positions from event.\nfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/{\n  const touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n  if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n  const node = findDOMNode(draggableCore);\n  // User can provide an offsetParent if desired.\n  const offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n  return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n}\n\n// Create an data object exposed by <DraggableCore>'s events\nfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/{\n  const isStart = !(0, _shims.isNum)(draggable.lastX);\n  const node = findDOMNode(draggable);\n  if (isStart) {\n    // If this is our first move, use the x and y as last coords.\n    return {\n      node,\n      deltaX: 0,\n      deltaY: 0,\n      lastX: x,\n      lastY: y,\n      x,\n      y\n    };\n  } else {\n    // Otherwise calculate proper values.\n    return {\n      node,\n      deltaX: x - draggable.lastX,\n      deltaY: y - draggable.lastY,\n      lastX: draggable.lastX,\n      lastY: draggable.lastY,\n      x,\n      y\n    };\n  }\n}\n\n// Create an data exposed by <Draggable>'s events\nfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/{\n  const scale = draggable.props.scale;\n  return {\n    node: coreData.node,\n    x: draggable.state.x + coreData.deltaX / scale,\n    y: draggable.state.y + coreData.deltaY / scale,\n    deltaX: coreData.deltaX / scale,\n    deltaY: coreData.deltaY / scale,\n    lastX: draggable.state.x,\n    lastY: draggable.state.y\n  };\n}\n\n// A lot faster than stringify/parse\nfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/{\n  return {\n    left: bounds.left,\n    top: bounds.top,\n    right: bounds.right,\n    bottom: bounds.bottom\n  };\n}\nfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/{\n  const node = draggable.findDOMNode();\n  if (!node) {\n    throw new Error('<DraggableCore>: Unmounted during event!');\n  }\n  // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n  return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = log;\n/*eslint no-console:0*/\nfunction log() {\n  if (undefined) console.log(...arguments);\n}","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorWrap = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _debounce = require('lodash/debounce');\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorWrap = exports.ColorWrap = function ColorWrap(Picker) {\n  var ColorPicker = function (_ref) {\n    _inherits(ColorPicker, _ref);\n\n    function ColorPicker(props) {\n      _classCallCheck(this, ColorPicker);\n\n      var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this));\n\n      _this.handleChange = function (data, event) {\n        var isValidColor = _color2.default.simpleCheckForValidColor(data);\n        if (isValidColor) {\n          var colors = _color2.default.toState(data, data.h || _this.state.oldHue);\n          _this.setState(colors);\n          _this.props.onChangeComplete && _this.debounce(_this.props.onChangeComplete, colors, event);\n          _this.props.onChange && _this.props.onChange(colors, event);\n        }\n      };\n\n      _this.handleSwatchHover = function (data, event) {\n        var isValidColor = _color2.default.simpleCheckForValidColor(data);\n        if (isValidColor) {\n          var colors = _color2.default.toState(data, data.h || _this.state.oldHue);\n          _this.props.onSwatchHover && _this.props.onSwatchHover(colors, event);\n        }\n      };\n\n      _this.state = _extends({}, _color2.default.toState(props.color, 0));\n\n      _this.debounce = (0, _debounce2.default)(function (fn, data, event) {\n        fn(data, event);\n      }, 100);\n      return _this;\n    }\n\n    _createClass(ColorPicker, [{\n      key: 'componentWillReceiveProps',\n      value: function componentWillReceiveProps(nextProps) {\n        this.setState(_extends({}, _color2.default.toState(nextProps.color, this.state.oldHue)));\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        var optionalEvents = {};\n        if (this.props.onSwatchHover) {\n          optionalEvents.onSwatchHover = this.handleSwatchHover;\n        }\n\n        return _react2.default.createElement(Picker, _extends({}, this.props, this.state, {\n          onChange: this.handleChange\n        }, optionalEvents));\n      }\n    }]);\n\n    return ColorPicker;\n  }(_react.PureComponent || _react.Component);\n\n  ColorPicker.propTypes = _extends({}, Picker.propTypes);\n\n  ColorPicker.defaultProps = _extends({}, Picker.defaultProps, {\n    color: {\n      h: 250,\n      s: 0.50,\n      l: 0.20,\n      a: 1\n    }\n  });\n\n  return ColorPicker;\n};\n\nexports.default = ColorWrap;","export var red = {\"50\":\"#ffebee\",\"100\":\"#ffcdd2\",\"200\":\"#ef9a9a\",\"300\":\"#e57373\",\"400\":\"#ef5350\",\"500\":\"#f44336\",\"600\":\"#e53935\",\"700\":\"#d32f2f\",\"800\":\"#c62828\",\"900\":\"#b71c1c\",\"a100\":\"#ff8a80\",\"a200\":\"#ff5252\",\"a400\":\"#ff1744\",\"a700\":\"#d50000\"};\nexport var pink = {\"50\":\"#fce4ec\",\"100\":\"#f8bbd0\",\"200\":\"#f48fb1\",\"300\":\"#f06292\",\"400\":\"#ec407a\",\"500\":\"#e91e63\",\"600\":\"#d81b60\",\"700\":\"#c2185b\",\"800\":\"#ad1457\",\"900\":\"#880e4f\",\"a100\":\"#ff80ab\",\"a200\":\"#ff4081\",\"a400\":\"#f50057\",\"a700\":\"#c51162\"};\nexport var purple = {\"50\":\"#f3e5f5\",\"100\":\"#e1bee7\",\"200\":\"#ce93d8\",\"300\":\"#ba68c8\",\"400\":\"#ab47bc\",\"500\":\"#9c27b0\",\"600\":\"#8e24aa\",\"700\":\"#7b1fa2\",\"800\":\"#6a1b9a\",\"900\":\"#4a148c\",\"a100\":\"#ea80fc\",\"a200\":\"#e040fb\",\"a400\":\"#d500f9\",\"a700\":\"#aa00ff\"};\nexport var deepPurple = {\"50\":\"#ede7f6\",\"100\":\"#d1c4e9\",\"200\":\"#b39ddb\",\"300\":\"#9575cd\",\"400\":\"#7e57c2\",\"500\":\"#673ab7\",\"600\":\"#5e35b1\",\"700\":\"#512da8\",\"800\":\"#4527a0\",\"900\":\"#311b92\",\"a100\":\"#b388ff\",\"a200\":\"#7c4dff\",\"a400\":\"#651fff\",\"a700\":\"#6200ea\"};\nexport var indigo = {\"50\":\"#e8eaf6\",\"100\":\"#c5cae9\",\"200\":\"#9fa8da\",\"300\":\"#7986cb\",\"400\":\"#5c6bc0\",\"500\":\"#3f51b5\",\"600\":\"#3949ab\",\"700\":\"#303f9f\",\"800\":\"#283593\",\"900\":\"#1a237e\",\"a100\":\"#8c9eff\",\"a200\":\"#536dfe\",\"a400\":\"#3d5afe\",\"a700\":\"#304ffe\"};\nexport var blue = {\"50\":\"#e3f2fd\",\"100\":\"#bbdefb\",\"200\":\"#90caf9\",\"300\":\"#64b5f6\",\"400\":\"#42a5f5\",\"500\":\"#2196f3\",\"600\":\"#1e88e5\",\"700\":\"#1976d2\",\"800\":\"#1565c0\",\"900\":\"#0d47a1\",\"a100\":\"#82b1ff\",\"a200\":\"#448aff\",\"a400\":\"#2979ff\",\"a700\":\"#2962ff\"};\nexport var lightBlue = {\"50\":\"#e1f5fe\",\"100\":\"#b3e5fc\",\"200\":\"#81d4fa\",\"300\":\"#4fc3f7\",\"400\":\"#29b6f6\",\"500\":\"#03a9f4\",\"600\":\"#039be5\",\"700\":\"#0288d1\",\"800\":\"#0277bd\",\"900\":\"#01579b\",\"a100\":\"#80d8ff\",\"a200\":\"#40c4ff\",\"a400\":\"#00b0ff\",\"a700\":\"#0091ea\"};\nexport var cyan = {\"50\":\"#e0f7fa\",\"100\":\"#b2ebf2\",\"200\":\"#80deea\",\"300\":\"#4dd0e1\",\"400\":\"#26c6da\",\"500\":\"#00bcd4\",\"600\":\"#00acc1\",\"700\":\"#0097a7\",\"800\":\"#00838f\",\"900\":\"#006064\",\"a100\":\"#84ffff\",\"a200\":\"#18ffff\",\"a400\":\"#00e5ff\",\"a700\":\"#00b8d4\"};\nexport var teal = {\"50\":\"#e0f2f1\",\"100\":\"#b2dfdb\",\"200\":\"#80cbc4\",\"300\":\"#4db6ac\",\"400\":\"#26a69a\",\"500\":\"#009688\",\"600\":\"#00897b\",\"700\":\"#00796b\",\"800\":\"#00695c\",\"900\":\"#004d40\",\"a100\":\"#a7ffeb\",\"a200\":\"#64ffda\",\"a400\":\"#1de9b6\",\"a700\":\"#00bfa5\"};\nexport var green = {\"50\":\"#e8f5e9\",\"100\":\"#c8e6c9\",\"200\":\"#a5d6a7\",\"300\":\"#81c784\",\"400\":\"#66bb6a\",\"500\":\"#4caf50\",\"600\":\"#43a047\",\"700\":\"#388e3c\",\"800\":\"#2e7d32\",\"900\":\"#1b5e20\",\"a100\":\"#b9f6ca\",\"a200\":\"#69f0ae\",\"a400\":\"#00e676\",\"a700\":\"#00c853\"};\nexport var lightGreen = {\"50\":\"#f1f8e9\",\"100\":\"#dcedc8\",\"200\":\"#c5e1a5\",\"300\":\"#aed581\",\"400\":\"#9ccc65\",\"500\":\"#8bc34a\",\"600\":\"#7cb342\",\"700\":\"#689f38\",\"800\":\"#558b2f\",\"900\":\"#33691e\",\"a100\":\"#ccff90\",\"a200\":\"#b2ff59\",\"a400\":\"#76ff03\",\"a700\":\"#64dd17\"};\nexport var lime = {\"50\":\"#f9fbe7\",\"100\":\"#f0f4c3\",\"200\":\"#e6ee9c\",\"300\":\"#dce775\",\"400\":\"#d4e157\",\"500\":\"#cddc39\",\"600\":\"#c0ca33\",\"700\":\"#afb42b\",\"800\":\"#9e9d24\",\"900\":\"#827717\",\"a100\":\"#f4ff81\",\"a200\":\"#eeff41\",\"a400\":\"#c6ff00\",\"a700\":\"#aeea00\"};\nexport var yellow = {\"50\":\"#fffde7\",\"100\":\"#fff9c4\",\"200\":\"#fff59d\",\"300\":\"#fff176\",\"400\":\"#ffee58\",\"500\":\"#ffeb3b\",\"600\":\"#fdd835\",\"700\":\"#fbc02d\",\"800\":\"#f9a825\",\"900\":\"#f57f17\",\"a100\":\"#ffff8d\",\"a200\":\"#ffff00\",\"a400\":\"#ffea00\",\"a700\":\"#ffd600\"};\nexport var amber = {\"50\":\"#fff8e1\",\"100\":\"#ffecb3\",\"200\":\"#ffe082\",\"300\":\"#ffd54f\",\"400\":\"#ffca28\",\"500\":\"#ffc107\",\"600\":\"#ffb300\",\"700\":\"#ffa000\",\"800\":\"#ff8f00\",\"900\":\"#ff6f00\",\"a100\":\"#ffe57f\",\"a200\":\"#ffd740\",\"a400\":\"#ffc400\",\"a700\":\"#ffab00\"};\nexport var orange = {\"50\":\"#fff3e0\",\"100\":\"#ffe0b2\",\"200\":\"#ffcc80\",\"300\":\"#ffb74d\",\"400\":\"#ffa726\",\"500\":\"#ff9800\",\"600\":\"#fb8c00\",\"700\":\"#f57c00\",\"800\":\"#ef6c00\",\"900\":\"#e65100\",\"a100\":\"#ffd180\",\"a200\":\"#ffab40\",\"a400\":\"#ff9100\",\"a700\":\"#ff6d00\"};\nexport var deepOrange = {\"50\":\"#fbe9e7\",\"100\":\"#ffccbc\",\"200\":\"#ffab91\",\"300\":\"#ff8a65\",\"400\":\"#ff7043\",\"500\":\"#ff5722\",\"600\":\"#f4511e\",\"700\":\"#e64a19\",\"800\":\"#d84315\",\"900\":\"#bf360c\",\"a100\":\"#ff9e80\",\"a200\":\"#ff6e40\",\"a400\":\"#ff3d00\",\"a700\":\"#dd2c00\"};\nexport var brown = {\"50\":\"#efebe9\",\"100\":\"#d7ccc8\",\"200\":\"#bcaaa4\",\"300\":\"#a1887f\",\"400\":\"#8d6e63\",\"500\":\"#795548\",\"600\":\"#6d4c41\",\"700\":\"#5d4037\",\"800\":\"#4e342e\",\"900\":\"#3e2723\"};\nexport var grey = {\"50\":\"#fafafa\",\"100\":\"#f5f5f5\",\"200\":\"#eeeeee\",\"300\":\"#e0e0e0\",\"400\":\"#bdbdbd\",\"500\":\"#9e9e9e\",\"600\":\"#757575\",\"700\":\"#616161\",\"800\":\"#424242\",\"900\":\"#212121\"};\nexport var blueGrey = {\"50\":\"#eceff1\",\"100\":\"#cfd8dc\",\"200\":\"#b0bec5\",\"300\":\"#90a4ae\",\"400\":\"#78909c\",\"500\":\"#607d8b\",\"600\":\"#546e7a\",\"700\":\"#455a64\",\"800\":\"#37474f\",\"900\":\"#263238\"};\nexport var darkText = {\"primary\":\"rgba(0, 0, 0, 0.87)\",\"secondary\":\"rgba(0, 0, 0, 0.54)\",\"disabled\":\"rgba(0, 0, 0, 0.38)\",\"dividers\":\"rgba(0, 0, 0, 0.12)\"};\nexport var lightText = {\"primary\":\"rgba(255, 255, 255, 1)\",\"secondary\":\"rgba(255, 255, 255, 0.7)\",\"disabled\":\"rgba(255, 255, 255, 0.5)\",\"dividers\":\"rgba(255, 255, 255, 0.12)\"};\nexport var darkIcons = {\"active\":\"rgba(0, 0, 0, 0.54)\",\"inactive\":\"rgba(0, 0, 0, 0.38)\"};\nexport var lightIcons = {\"active\":\"rgba(255, 255, 255, 1)\",\"inactive\":\"rgba(255, 255, 255, 0.5)\"};\nexport var white = \"#ffffff\";\nexport var black = \"#000000\";\n\nexport default {\n  red: red,\n  pink: pink,\n  purple: purple,\n  deepPurple: deepPurple,\n  indigo: indigo,\n  blue: blue,\n  lightBlue: lightBlue,\n  cyan: cyan,\n  teal: teal,\n  green: green,\n  lightGreen: lightGreen,\n  lime: lime,\n  yellow: yellow,\n  amber: amber,\n  orange: orange,\n  deepOrange: deepOrange,\n  brown: brown,\n  grey: grey,\n  blueGrey: blueGrey,\n  darkText: darkText,\n  lightText: lightText,\n  darkIcons: darkIcons,\n  lightIcons: lightIcons,\n  white: white,\n  black: black\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  transform: \"scale(1.2, 1.2)\",\n  fill: \"none\",\n  d: \"M0 0h20v20H0V0z\"\n}), _react.default.createElement(\"path\", {\n  transform: \"scale(1.2, 1.2)\",\n  d: \"M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z\"\n})), 'Settings');\n\nexports.default = _default;","import createIsValid from './selectors/isValid';\nimport plain from './structure/plain';\nexport default createIsValid(plain);","import Store from './store';\n\n// mounted to atsAuth by default\nexport const selectState = (namespace = Store.get('reducerNamespace')) => (state) => state.get(namespace);\n\n// select from redux-react-local state\nexport const selectLocalState = (ident) => (state) => state.get('local').$get(ident);\n\nexport const selectFormState = () => (state) => state.get('form');\n\nexport default {\n  selectState,\n  selectLocalState,\n  selectFormState\n};\n","/**\n *\n * App.react.js\n *\n * This component is the skeleton around the actual pages, and should only\n * contain code that should be seen on all pages. (e.g. navigation bar)\n *\n * NOTE: while this component should technically be a stateless functional\n * component (SFC), hot reloading does not currently support SFCs. If hot\n * reloading is not a necessity for you then you can refactor it and remove\n * the linting exception.\n */\n\nimport * as React from 'react';\nimport { Provider } from 'react-redux';\nimport ThemeProvider from '../ThemeProvider';\nimport LanguageProvider from '../LanguageProvider';\nimport { ConnectedRouter } from 'connected-react-router/immutable';\nimport jssCompose from 'jss-compose';\nimport jssExtend from 'jss-extend';\nimport AtsApiContext from '../../contexts/AtsApiContext';\nimport StoreContext from '../../contexts/StoreContext';\nimport WindowSizeContext from '../../contexts/WindowSizeContext';\nimport { Root } from 'redux-react-local';\nimport {\n  withSize,\n} from 'react-sizeme';\nimport i18next from 'i18next';\nimport PaddedMessage from '../../components/PaddedMessage';\nimport { create } from 'jss';\nimport { StylesProvider, jssPreset, createGenerateClassName } from '@material-ui/styles';\nimport Api from 'ats-api/src';\nimport { SagaMiddleware } from 'redux-saga';\nimport { History } from 'history';\nimport defaultTheme from '../../themes/whiteLoading';\n\nconst generateClassName = createGenerateClassName({\n  productionPrefix: 'ats-',\n});\nconst jss = create({\n  plugins: [...jssPreset().plugins, jssCompose(), jssExtend()],\n});\n\ninterface IAppWrapperProps {\n  children?: JSX.Element;\n  atsStore?: object;\n  i18n?: i18next.i18n | boolean;\n  history?: History<any>;\n  size?: {\n    width: number;\n    height: number;\n  };\n  atsApi?: Api;\n  sagaMiddleware?: SagaMiddleware<any>;\n  suspenseFallback?: React.ReactNode;\n}\n\ntype AppWrapperProps = IAppWrapperProps;\nconst AppWrapper = (props: AppWrapperProps) => {\n  const {\n    children,\n    atsStore: store,\n    i18n = false, // we want default i18n if no configuration provided\n    history,\n    sagaMiddleware: middleware,\n    atsApi,\n    size,\n    suspenseFallback,\n  } = props;\n\n  const wrappers = [\n    { // **NOTE** ConnectedRouter MUST come first or else the other wrappers won't rerender on route changes properly\n      component: ConnectedRouter,\n      props: {\n        history,\n      },\n    },\n    {\n      component: React.Suspense,\n      props: {\n        fallback: suspenseFallback || <PaddedMessage\n            loading={true}\n            GridProps={{\n              justify: 'center',\n            }}>\n          Loading...\n        </PaddedMessage>,\n      },\n    },\n    {\n      component: AtsApiContext.Provider,\n      props: {\n        value: atsApi,\n      },\n    },\n    {\n      component: Root,\n      props: {\n        store,\n      },\n    },\n    {\n      component: LanguageProvider,\n      props: {\n        i18n,\n      },\n    },\n    {\n      component: ThemeProvider,\n      props: {\n        defaultTheme,\n      },\n    },\n    {\n      component: Provider,\n      props: {\n        store,\n      },\n    },\n    {\n      component: StoreContext.Provider,\n      props: {\n        value: store,\n      },\n    },\n    {\n      component: StylesProvider,\n      props: {\n        generateClassName,\n        jss,\n      },\n    },\n    {\n      component: WindowSizeContext.Provider,\n      props: {\n        value: size,\n      },\n    },\n  ];\n\n  return wrappers.reduce((component, wrapper) => {\n    if (wrapper.props) {\n      if (Object.values(wrapper.props).filter((propValue) => propValue == null).length !== 0) {\n        return component;\n      }\n    }\n    return (<wrapper.component {...(wrapper.props || {})}>\n      {component}\n    </wrapper.component>);\n  }, children);\n};\n\nexport default withSize({\n  refreshRate: 128,\n  monitorHeight: true,\n})(AppWrapper);\n","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n    for(var i = 0; i < collection.length; i++) {\n        var result = callback(collection[i]);\n        if(result) {\n            return result;\n        }\n    }\n};\n","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n    function isAnyIeVersion() {\n        var agent = navigator.userAgent.toLowerCase();\n        return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n    }\n\n    if(!isAnyIeVersion()) {\n        return false;\n    }\n\n    if(!version) {\n        return true;\n    }\n\n    //Shamelessly stolen from https://gist.github.com/padolsey/527683\n    var ieVersion = (function(){\n        var undef,\n            v = 3,\n            div = document.createElement(\"div\"),\n            all = div.getElementsByTagName(\"i\");\n\n        do {\n            div.innerHTML = \"<!--[if gt IE \" + (++v) + \"]><i></i><![endif]-->\";\n        }\n        while (all[0]);\n\n        return v > 4 ? v : undef;\n    }());\n\n    return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n    return !!window.opera;\n};\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(i,s),a=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(a=o-Math.min(i,s)),o-=1;o>=a;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===a)return 0;o-=1}else if(u[0][o]<u[1][o])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),o=1;o<i;o++)s[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var a=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)a();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var a=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&o(t.prototype,r),n&&o(t,n),e}();t.default=a,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),o=u(r(95)),a=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=a.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=a.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=a.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=a.default.find(o.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return a.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];\"string\"==typeof o?(i[t]=o,s+=1):\"object\"==typeof o&&(r[t]=o,n+=1)})),n>0){var o=Object.keys(r),u=a.default.find(o,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=a.default.find(o,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=a.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=a.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(a.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e){return this.isBrowser(e)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,o=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=o,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?) Version\\//],describe:function(e){var t=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return{name:s.OS_MAP.iOS,version:t}}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=o,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?) Version\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=o,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var o=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=o,e.exports=t.default}})}));","import React from 'react';\nimport {useTranslation} from 'react-i18next';\n\nimport _ from 'lodash';\nimport {\n  TableCell,\n  TableRow,\n  Button,\n} from '@material-ui/core';\n\nimport TableDynamicCell from './DynamicColumn/TableDynamicCell';\nimport {getUpdatedAtCell, getResponseStatusCell, getResponseIdCell} from './BidComponentUtil';\n\nconst BidResponseTable = ({\n                            widgetName,\n                            invitation,\n                            tableColumns,\n                            notifyMenu,\n}) => {\n  const { t } = useTranslation('translations');\n\n  const onClickShowMenu = (bidResponse) => (event) => {\n    notifyMenu(event.currentTarget, invitation, bidResponse);\n  };\n\n  const getActionsCell = (bidResponse, indexId) => {\n    return (\n      <TableCell key={indexId}>\n        <Button onClick={onClickShowMenu(bidResponse)} color='primary'>\n          {t('autoQuotationBidDetail.actionUpcaseLabel')}\n        </Button>\n      </TableCell>\n    );\n  };\n  const getTableCellsById = (bidResponse) => {\n    return _.map(tableColumns, (column) => {\n      if (column?.display) {\n        const indexId = `bidResponse-cell-${column.id}-${bidResponse.id}`;\n        switch (column.id) {\n          case 'projectName':\n            return TableDynamicCell.getEmptyCell(indexId);\n          case 'quoteNumber':\n            return getResponseIdCell(bidResponse, indexId);\n          case 'from':\n            return TableDynamicCell.getTextCell(invitation.User?.email, indexId);\n          case 'receipt':\n            return TableDynamicCell.getTextCell(bidResponse?.Contact?.email, indexId);\n          case 'status':\n            return getResponseStatusCell(bidResponse, indexId);\n          case 'bidSubject':\n            return TableDynamicCell.getTextCell(bidResponse.bidSubject, indexId);\n          case 'createdAt':\n            return TableDynamicCell.getTimeCell(bidResponse?.BidInvitation?.createdAt, indexId);\n          case 'updatedAt':\n            return getUpdatedAtCell(bidResponse, indexId);\n          case 'actions':\n            return getActionsCell(bidResponse, indexId);\n        }\n      }\n    });\n  };\n\n  return (\n    <>\n      {invitation?.BidResponses.map((bidResponse, index: number) => (\n        <TableRow\n          id={`bidResponse-${bidResponse.id}-${index}`}\n          key={`bidResponse-${bidResponse.id}-${index}`}\n          hover={true}\n        >\n          <>{getTableCellsById(bidResponse)}</>\n        </TableRow>\n      ))}\n    </>\n  );\n};\nexport default BidResponseTable;","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport {useTranslation} from 'react-i18next';\n\nimport {\n  Theme,\n  Tooltip,\n  Typography,\n  IconButton,\n  Menu,\n  MenuItem,\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\nimport MonetizationOnIcon from '@material-ui/icons/MonetizationOn';\nimport {\n  QUOTE_PATH,\n} from '../../../../../constants';\n\nimport SendPricingRequestsWidgetUtil from '../SendPricingRequestsWidgetUtil';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  disableIcon: {\n    '&.Mui-disabled': {\n      color: 'lightgrey',\n    },\n  },\n}));\nconst BidResponseMenu = ({\n                           currentInvitation,\n                           currentBidResponse,\n                           currentAnchorEl,\n                           notifyAnchorElChange\n                        }) => {\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n\n  const handleCloseMenu = () => {\n    notifyAnchorElChange();\n  };\n\n  const handleImportPrice = async () => {\n    const url = `${QUOTE_PATH}/${currentInvitation.quoteId}/edit?linkBidResponseId=${currentBidResponse?.id}`;\n    window.open(url, '_blank');\n  };\n\n  return (\n      <Menu\n        anchorEl={currentAnchorEl}\n        open={Boolean(currentAnchorEl)}\n        onClose={handleCloseMenu}\n      >\n        <MenuItem>\n          <Tooltip title={t('autoQuotationBidDetail.viewDetail')}>\n            <span>\n              <Link to={SendPricingRequestsWidgetUtil.getBidDetailUrl(currentBidResponse)}>\n                <IconButton size='small'>\n                    <OpenInNewIcon fontSize='small'/>\n                    <Typography variant='body1' style={{ marginLeft: 8 }}>\n                      {t('autoQuotationBidDetail.prDetail')}\n                    </Typography>\n                </IconButton>\n              </Link>\n            </span>\n          </Tooltip>\n        </MenuItem>\n        {(currentBidResponse?.status === 'submitted') &&\n          <MenuItem>\n            <Tooltip title={t('pricingRequests.importPricingAction')}>\n              <span>\n                <IconButton className={classes.disableIcon} onClick={() => {handleImportPrice();}} size='small'>\n                  <MonetizationOnIcon fontSize='small'/>\n                  <Typography variant='body1' style={{ marginLeft: 8 }}>\n                    {t('pricingRequests.importPricingAction')}\n                  </Typography>\n                </IconButton>\n              </span>\n            </Tooltip>\n          </MenuItem>\n        }\n      </Menu>\n  );\n};\nexport default BidResponseMenu;","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport _ from 'lodash';\n\nimport {\n  Theme,\n  Box,\n  LinearProgress,\n  Typography,\n  Tooltip\n} from '@material-ui/core';\nimport {makeStyles} from '@material-ui/styles';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  statusBar: {\n    display: 'flex',\n    alignItems: 'center',\n    width: 180,\n  },\n  trackColor: {\n    backgroundColor: '#F5C7A6',\n    flexGrow: 1,\n    height: '10px',\n    alignItems: 'center',\n  },\n  barColorPrimary: {\n    backgroundColor: '#E76C17',\n  },\n  percentText: {\n    paddingLeft: 4,\n    alignItems: 'center',\n  }\n}));\nconst BidStatusSummaryBar = ({invitation}) => {\n  const { t } = useTranslation('translations');\n  const classes = useStyles();\n  const totalResponse = invitation.BidResponses.length;\n  const statusesToFilter = ['submitted', 'declined'];\n  const totalReplied =  _.filter(invitation.BidResponses, (response) =>\n    statusesToFilter.includes(response.status)\n  ).length;\n  const totalSubmitted =  _.filter(invitation.BidResponses, (response) =>\n    response.status === 'submitted'\n  ).length;\n  const totalDeclined =  _.filter(invitation.BidResponses, (response) =>\n    response.status === 'declined'\n  ).length;\n\n  const getPercentRate = () => {\n    let rate = 0;\n    if (invitation?.BidResponses) {\n      if (totalReplied) {\n        rate = Math.round(totalReplied * 100 / totalResponse);\n      }\n    }\n    return rate;\n  };\n  let tooltipTitle = `${t(`pricingRequests.prSent`)}: ${totalResponse}`;\n  tooltipTitle += `\\n ${t(`pricingRequests.prReceived`)}: ${totalSubmitted}`;\n  if (totalDeclined) {\n    tooltipTitle += `\\n ${t(`pricingRequests.prDeclined`)}: ${totalDeclined}`;\n  }\n  return (\n    <Tooltip\n      title={\n        <div style={{ whiteSpace: 'pre-line' }}>\n          {tooltipTitle}\n        </div>\n      }\n    >\n      <Box className={classes.statusBar}>\n        <>\n          <LinearProgress\n            variant='determinate'\n            value={getPercentRate()}\n            classes={{\n              root: classes.trackColor,\n              bar1Determinate: classes.barColorPrimary,\n            }}\n            style={{ height: '10px' }}\n          />\n          <Typography variant='body1' className={classes.percentText}>\n            {totalReplied}/{totalResponse}\n          </Typography>\n        </>\n      </Box>\n    </Tooltip>\n  );\n};\nexport default BidStatusSummaryBar;","import React, {useState, useEffect, useCallback, } from 'react';\nimport {Button, Dialog, DialogActions, DialogContent, Grid, makeStyles, Theme, Typography} from '@material-ui/core';\n\nimport {StyleRules} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport BidInvitationServiceApi from '../../modules/QuoteConnectService/BidInvitationServiceApi';\nimport {useSelector} from 'react-redux';\nimport {makeSelectEnv, makeSelectAppId} from '../../modules/AtsModule/selectors';\n\nconst useStyles = makeStyles((theme: Theme): StyleRules => ({\n  dialogContent: {\n    marginTop: theme.spacing() * 2,\n  }\n}));\n\nconst DeclineDialog = ({declineOpen, handleDeclineClose, id}) => {\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n\n  const confirmDeclineInvitation = async () => {\n    const declineData = {\n      id,\n      status: 'declined'\n    };\n    const invitationResponseResult = await BidInvitationServiceApi.update(env, appId, id, declineData);\n    handleDeclineClose(true);\n  };\n\n  return (\n    <Dialog\n      open={declineOpen}\n      onClick={() => { handleDeclineClose(false);}}\n      aria-labelledby='decline invitation confirmation dialog'\n      aria-describedby='decline invitation confirmation dialog'\n      disableBackdropClick={true}\n    >\n      <DialogContent>\n        <Typography variant='h6' color='inherit'>\n          {t('pricingRequests.confirmDeclinePR')}?\n        </Typography>\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={() => { handleDeclineClose(false);}} color='primary'>\n          {t('formButtons.cancel')}\n        </Button>\n        <Button onClick={confirmDeclineInvitation} color='primary'>\n          {t('formButtons.save')}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\nexport default DeclineDialog;","import { assertIs, error } from \"../utils\";\nexport var RotationTypes;\n(function (RotationTypes) {\n    RotationTypes[\"Degrees\"] = \"degrees\";\n    RotationTypes[\"Radians\"] = \"radians\";\n})(RotationTypes || (RotationTypes = {}));\nexport var radians = function (radianAngle) {\n    assertIs(radianAngle, 'radianAngle', ['number']);\n    return { type: RotationTypes.Radians, angle: radianAngle };\n};\nexport var degrees = function (degreeAngle) {\n    assertIs(degreeAngle, 'degreeAngle', ['number']);\n    return { type: RotationTypes.Degrees, angle: degreeAngle };\n};\nvar Radians = RotationTypes.Radians, Degrees = RotationTypes.Degrees;\nexport var degreesToRadians = function (degree) { return (degree * Math.PI) / 180; };\nexport var radiansToDegrees = function (radian) { return (radian * 180) / Math.PI; };\n// prettier-ignore\nexport var toRadians = function (rotation) {\n    return rotation.type === Radians ? rotation.angle\n        : rotation.type === Degrees ? degreesToRadians(rotation.angle)\n            : error(\"Invalid rotation: \" + JSON.stringify(rotation));\n};\n// prettier-ignore\nexport var toDegrees = function (rotation) {\n    return rotation.type === Radians ? radiansToDegrees(rotation.angle)\n        : rotation.type === Degrees ? rotation.angle\n            : error(\"Invalid rotation: \" + JSON.stringify(rotation));\n};\nexport var reduceRotation = function (degreeAngle) {\n    if (degreeAngle === void 0) { degreeAngle = 0; }\n    var quadrants = (degreeAngle / 90) % 4;\n    if (quadrants === 0)\n        return 0;\n    if (quadrants === 1)\n        return 90;\n    if (quadrants === 2)\n        return 180;\n    if (quadrants === 3)\n        return 270;\n    return 0; // `degreeAngle` is not a multiple of 90\n};\nexport var adjustDimsForRotation = function (dims, degreeAngle) {\n    if (degreeAngle === void 0) { degreeAngle = 0; }\n    var rotation = reduceRotation(degreeAngle);\n    return rotation === 90 || rotation === 270\n        ? { width: dims.height, height: dims.width }\n        : { width: dims.width, height: dims.height };\n};\nexport var rotateRectangle = function (rectangle, borderWidth, degreeAngle) {\n    if (borderWidth === void 0) { borderWidth = 0; }\n    if (degreeAngle === void 0) { degreeAngle = 0; }\n    var x = rectangle.x, y = rectangle.y, w = rectangle.width, h = rectangle.height;\n    var r = reduceRotation(degreeAngle);\n    var b = borderWidth / 2;\n    // prettier-ignore\n    if (r === 0)\n        return { x: x - b, y: y - b, width: w, height: h };\n    else if (r === 90)\n        return { x: x - h + b, y: y - b, width: h, height: w };\n    else if (r === 180)\n        return { x: x - w + b, y: y - h + b, width: w, height: h };\n    else if (r === 270)\n        return { x: x - b, y: y - w + b, width: h, height: w };\n    else\n        return { x: x - b, y: y - b, width: w, height: h };\n};\n//# sourceMappingURL=rotations.js.map","import { PDFName, PDFNumber } from \"../core\";\nexport var asPDFName = function (name) {\n    return name instanceof PDFName ? name : PDFName.of(name);\n};\nexport var asPDFNumber = function (num) {\n    return num instanceof PDFNumber ? num : PDFNumber.of(num);\n};\nexport var asNumber = function (num) {\n    return num instanceof PDFNumber ? num.asNumber() : num;\n};\n//# sourceMappingURL=objects.js.map","import { asNumber, asPDFName, asPDFNumber } from \"./objects\";\nimport { degreesToRadians } from \"./rotations\";\nimport { PDFOperator, PDFOperatorNames as Ops, } from \"../core\";\n/* ==================== Clipping Path Operators ==================== */\nexport var clip = function () { return PDFOperator.of(Ops.ClipNonZero); };\nexport var clipEvenOdd = function () { return PDFOperator.of(Ops.ClipEvenOdd); };\n/* ==================== Graphics State Operators ==================== */\nvar cos = Math.cos, sin = Math.sin, tan = Math.tan;\nexport var concatTransformationMatrix = function (a, b, c, d, e, f) {\n    return PDFOperator.of(Ops.ConcatTransformationMatrix, [\n        asPDFNumber(a),\n        asPDFNumber(b),\n        asPDFNumber(c),\n        asPDFNumber(d),\n        asPDFNumber(e),\n        asPDFNumber(f),\n    ]);\n};\nexport var translate = function (xPos, yPos) {\n    return concatTransformationMatrix(1, 0, 0, 1, xPos, yPos);\n};\nexport var scale = function (xPos, yPos) {\n    return concatTransformationMatrix(xPos, 0, 0, yPos, 0, 0);\n};\nexport var rotateRadians = function (angle) {\n    return concatTransformationMatrix(cos(asNumber(angle)), sin(asNumber(angle)), -sin(asNumber(angle)), cos(asNumber(angle)), 0, 0);\n};\nexport var rotateDegrees = function (angle) {\n    return rotateRadians(degreesToRadians(asNumber(angle)));\n};\nexport var skewRadians = function (xSkewAngle, ySkewAngle) {\n    return concatTransformationMatrix(1, tan(asNumber(xSkewAngle)), tan(asNumber(ySkewAngle)), 1, 0, 0);\n};\nexport var skewDegrees = function (xSkewAngle, ySkewAngle) {\n    return skewRadians(degreesToRadians(asNumber(xSkewAngle)), degreesToRadians(asNumber(ySkewAngle)));\n};\nexport var setDashPattern = function (dashArray, dashPhase) {\n    return PDFOperator.of(Ops.SetLineDashPattern, [\n        \"[\" + dashArray.map(asPDFNumber).join(' ') + \"]\",\n        asPDFNumber(dashPhase),\n    ]);\n};\nexport var restoreDashPattern = function () { return setDashPattern([], 0); };\nexport var LineCapStyle;\n(function (LineCapStyle) {\n    LineCapStyle[LineCapStyle[\"Butt\"] = 0] = \"Butt\";\n    LineCapStyle[LineCapStyle[\"Round\"] = 1] = \"Round\";\n    LineCapStyle[LineCapStyle[\"Projecting\"] = 2] = \"Projecting\";\n})(LineCapStyle || (LineCapStyle = {}));\nexport var setLineCap = function (style) {\n    return PDFOperator.of(Ops.SetLineCapStyle, [asPDFNumber(style)]);\n};\nexport var LineJoinStyle;\n(function (LineJoinStyle) {\n    LineJoinStyle[LineJoinStyle[\"Miter\"] = 0] = \"Miter\";\n    LineJoinStyle[LineJoinStyle[\"Round\"] = 1] = \"Round\";\n    LineJoinStyle[LineJoinStyle[\"Bevel\"] = 2] = \"Bevel\";\n})(LineJoinStyle || (LineJoinStyle = {}));\nexport var setLineJoin = function (style) {\n    return PDFOperator.of(Ops.SetLineJoinStyle, [asPDFNumber(style)]);\n};\nexport var setGraphicsState = function (state) {\n    return PDFOperator.of(Ops.SetGraphicsStateParams, [asPDFName(state)]);\n};\nexport var pushGraphicsState = function () { return PDFOperator.of(Ops.PushGraphicsState); };\nexport var popGraphicsState = function () { return PDFOperator.of(Ops.PopGraphicsState); };\nexport var setLineWidth = function (width) {\n    return PDFOperator.of(Ops.SetLineWidth, [asPDFNumber(width)]);\n};\n/* ==================== Path Construction Operators ==================== */\nexport var appendBezierCurve = function (x1, y1, x2, y2, x3, y3) {\n    return PDFOperator.of(Ops.AppendBezierCurve, [\n        asPDFNumber(x1),\n        asPDFNumber(y1),\n        asPDFNumber(x2),\n        asPDFNumber(y2),\n        asPDFNumber(x3),\n        asPDFNumber(y3),\n    ]);\n};\nexport var appendQuadraticCurve = function (x1, y1, x2, y2) {\n    return PDFOperator.of(Ops.CurveToReplicateInitialPoint, [\n        asPDFNumber(x1),\n        asPDFNumber(y1),\n        asPDFNumber(x2),\n        asPDFNumber(y2),\n    ]);\n};\nexport var closePath = function () { return PDFOperator.of(Ops.ClosePath); };\nexport var moveTo = function (xPos, yPos) {\n    return PDFOperator.of(Ops.MoveTo, [asPDFNumber(xPos), asPDFNumber(yPos)]);\n};\nexport var lineTo = function (xPos, yPos) {\n    return PDFOperator.of(Ops.LineTo, [asPDFNumber(xPos), asPDFNumber(yPos)]);\n};\n/**\n * @param xPos x coordinate for the lower left corner of the rectangle\n * @param yPos y coordinate for the lower left corner of the rectangle\n * @param width width of the rectangle\n * @param height height of the rectangle\n */\nexport var rectangle = function (xPos, yPos, width, height) {\n    return PDFOperator.of(Ops.AppendRectangle, [\n        asPDFNumber(xPos),\n        asPDFNumber(yPos),\n        asPDFNumber(width),\n        asPDFNumber(height),\n    ]);\n};\n/**\n * @param xPos x coordinate for the lower left corner of the square\n * @param yPos y coordinate for the lower left corner of the square\n * @param size width and height of the square\n */\nexport var square = function (xPos, yPos, size) {\n    return rectangle(xPos, yPos, size, size);\n};\n/* ==================== Path Painting Operators ==================== */\nexport var stroke = function () { return PDFOperator.of(Ops.StrokePath); };\nexport var fill = function () { return PDFOperator.of(Ops.FillNonZero); };\nexport var fillAndStroke = function () { return PDFOperator.of(Ops.FillNonZeroAndStroke); };\nexport var endPath = function () { return PDFOperator.of(Ops.EndPath); };\n/* ==================== Text Positioning Operators ==================== */\nexport var nextLine = function () { return PDFOperator.of(Ops.NextLine); };\nexport var moveText = function (x, y) {\n    return PDFOperator.of(Ops.MoveText, [asPDFNumber(x), asPDFNumber(y)]);\n};\n/* ==================== Text Showing Operators ==================== */\nexport var showText = function (text) {\n    return PDFOperator.of(Ops.ShowText, [text]);\n};\n/* ==================== Text State Operators ==================== */\nexport var beginText = function () { return PDFOperator.of(Ops.BeginText); };\nexport var endText = function () { return PDFOperator.of(Ops.EndText); };\nexport var setFontAndSize = function (name, size) { return PDFOperator.of(Ops.SetFontAndSize, [asPDFName(name), asPDFNumber(size)]); };\nexport var setCharacterSpacing = function (spacing) {\n    return PDFOperator.of(Ops.SetCharacterSpacing, [asPDFNumber(spacing)]);\n};\nexport var setWordSpacing = function (spacing) {\n    return PDFOperator.of(Ops.SetWordSpacing, [asPDFNumber(spacing)]);\n};\n/** @param squeeze horizontal character spacing */\nexport var setCharacterSqueeze = function (squeeze) {\n    return PDFOperator.of(Ops.SetTextHorizontalScaling, [asPDFNumber(squeeze)]);\n};\nexport var setLineHeight = function (lineHeight) {\n    return PDFOperator.of(Ops.SetTextLineHeight, [asPDFNumber(lineHeight)]);\n};\nexport var setTextRise = function (rise) {\n    return PDFOperator.of(Ops.SetTextRise, [asPDFNumber(rise)]);\n};\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n    TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n    TextRenderingMode[TextRenderingMode[\"Outline\"] = 1] = \"Outline\";\n    TextRenderingMode[TextRenderingMode[\"FillAndOutline\"] = 2] = \"FillAndOutline\";\n    TextRenderingMode[TextRenderingMode[\"Invisible\"] = 3] = \"Invisible\";\n    TextRenderingMode[TextRenderingMode[\"FillAndClip\"] = 4] = \"FillAndClip\";\n    TextRenderingMode[TextRenderingMode[\"OutlineAndClip\"] = 5] = \"OutlineAndClip\";\n    TextRenderingMode[TextRenderingMode[\"FillAndOutlineAndClip\"] = 6] = \"FillAndOutlineAndClip\";\n    TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\nexport var setTextRenderingMode = function (mode) {\n    return PDFOperator.of(Ops.SetTextRenderingMode, [asPDFNumber(mode)]);\n};\nexport var setTextMatrix = function (a, b, c, d, e, f) {\n    return PDFOperator.of(Ops.SetTextMatrix, [\n        asPDFNumber(a),\n        asPDFNumber(b),\n        asPDFNumber(c),\n        asPDFNumber(d),\n        asPDFNumber(e),\n        asPDFNumber(f),\n    ]);\n};\nexport var rotateAndSkewTextRadiansAndTranslate = function (rotationAngle, xSkewAngle, ySkewAngle, x, y) {\n    return setTextMatrix(cos(asNumber(rotationAngle)), sin(asNumber(rotationAngle)) + tan(asNumber(xSkewAngle)), -sin(asNumber(rotationAngle)) + tan(asNumber(ySkewAngle)), cos(asNumber(rotationAngle)), x, y);\n};\nexport var rotateAndSkewTextDegreesAndTranslate = function (rotationAngle, xSkewAngle, ySkewAngle, x, y) {\n    return rotateAndSkewTextRadiansAndTranslate(degreesToRadians(asNumber(rotationAngle)), degreesToRadians(asNumber(xSkewAngle)), degreesToRadians(asNumber(ySkewAngle)), x, y);\n};\n/* ==================== XObject Operator ==================== */\nexport var drawObject = function (name) {\n    return PDFOperator.of(Ops.DrawObject, [asPDFName(name)]);\n};\n/* ==================== Color Operators ==================== */\nexport var setFillingGrayscaleColor = function (gray) {\n    return PDFOperator.of(Ops.NonStrokingColorGray, [asPDFNumber(gray)]);\n};\nexport var setStrokingGrayscaleColor = function (gray) {\n    return PDFOperator.of(Ops.StrokingColorGray, [asPDFNumber(gray)]);\n};\nexport var setFillingRgbColor = function (red, green, blue) {\n    return PDFOperator.of(Ops.NonStrokingColorRgb, [\n        asPDFNumber(red),\n        asPDFNumber(green),\n        asPDFNumber(blue),\n    ]);\n};\nexport var setStrokingRgbColor = function (red, green, blue) {\n    return PDFOperator.of(Ops.StrokingColorRgb, [\n        asPDFNumber(red),\n        asPDFNumber(green),\n        asPDFNumber(blue),\n    ]);\n};\nexport var setFillingCmykColor = function (cyan, magenta, yellow, key) {\n    return PDFOperator.of(Ops.NonStrokingColorCmyk, [\n        asPDFNumber(cyan),\n        asPDFNumber(magenta),\n        asPDFNumber(yellow),\n        asPDFNumber(key),\n    ]);\n};\nexport var setStrokingCmykColor = function (cyan, magenta, yellow, key) {\n    return PDFOperator.of(Ops.StrokingColorCmyk, [\n        asPDFNumber(cyan),\n        asPDFNumber(magenta),\n        asPDFNumber(yellow),\n        asPDFNumber(key),\n    ]);\n};\n/* ==================== Marked Content Operators ==================== */\nexport var beginMarkedContent = function (tag) {\n    return PDFOperator.of(Ops.BeginMarkedContent, [asPDFName(tag)]);\n};\nexport var endMarkedContent = function () { return PDFOperator.of(Ops.EndMarkedContent); };\n//# sourceMappingURL=operators.js.map","import { setFillingCmykColor, setFillingGrayscaleColor, setFillingRgbColor, setStrokingCmykColor, setStrokingGrayscaleColor, setStrokingRgbColor, } from \"./operators\";\nimport { assertRange, error } from \"../utils\";\nexport var ColorTypes;\n(function (ColorTypes) {\n    ColorTypes[\"Grayscale\"] = \"Grayscale\";\n    ColorTypes[\"RGB\"] = \"RGB\";\n    ColorTypes[\"CMYK\"] = \"CMYK\";\n})(ColorTypes || (ColorTypes = {}));\nexport var grayscale = function (gray) {\n    assertRange(gray, 'gray', 0.0, 1.0);\n    return { type: ColorTypes.Grayscale, gray: gray };\n};\nexport var rgb = function (red, green, blue) {\n    assertRange(red, 'red', 0, 1);\n    assertRange(green, 'green', 0, 1);\n    assertRange(blue, 'blue', 0, 1);\n    return { type: ColorTypes.RGB, red: red, green: green, blue: blue };\n};\nexport var cmyk = function (cyan, magenta, yellow, key) {\n    assertRange(cyan, 'cyan', 0, 1);\n    assertRange(magenta, 'magenta', 0, 1);\n    assertRange(yellow, 'yellow', 0, 1);\n    assertRange(key, 'key', 0, 1);\n    return { type: ColorTypes.CMYK, cyan: cyan, magenta: magenta, yellow: yellow, key: key };\n};\nvar Grayscale = ColorTypes.Grayscale, RGB = ColorTypes.RGB, CMYK = ColorTypes.CMYK;\n// prettier-ignore\nexport var setFillingColor = function (color) {\n    return color.type === Grayscale ? setFillingGrayscaleColor(color.gray)\n        : color.type === RGB ? setFillingRgbColor(color.red, color.green, color.blue)\n            : color.type === CMYK ? setFillingCmykColor(color.cyan, color.magenta, color.yellow, color.key)\n                : error(\"Invalid color: \" + JSON.stringify(color));\n};\n// prettier-ignore\nexport var setStrokingColor = function (color) {\n    return color.type === Grayscale ? setStrokingGrayscaleColor(color.gray)\n        : color.type === RGB ? setStrokingRgbColor(color.red, color.green, color.blue)\n            : color.type === CMYK ? setStrokingCmykColor(color.cyan, color.magenta, color.yellow, color.key)\n                : error(\"Invalid color: \" + JSON.stringify(color));\n};\n// prettier-ignore\nexport var componentsToColor = function (comps, scale) {\n    if (scale === void 0) { scale = 1; }\n    return ((comps === null || comps === void 0 ? void 0 : comps.length) === 1 ? grayscale(comps[0] * scale)\n        : (comps === null || comps === void 0 ? void 0 : comps.length) === 3 ? rgb(comps[0] * scale, comps[1] * scale, comps[2] * scale)\n            : (comps === null || comps === void 0 ? void 0 : comps.length) === 4 ? cmyk(comps[0] * scale, comps[1] * scale, comps[2] * scale, comps[3] * scale)\n                : undefined);\n};\n// prettier-ignore\nexport var colorToComponents = function (color) {\n    return color.type === Grayscale ? [color.gray]\n        : color.type === RGB ? [color.red, color.green, color.blue]\n            : color.type === CMYK ? [color.cyan, color.magenta, color.yellow, color.key]\n                : error(\"Invalid color: \" + JSON.stringify(color));\n};\n//# sourceMappingURL=colors.js.map","export var TextAlignment;\n(function (TextAlignment) {\n    TextAlignment[TextAlignment[\"Left\"] = 0] = \"Left\";\n    TextAlignment[TextAlignment[\"Center\"] = 1] = \"Center\";\n    TextAlignment[TextAlignment[\"Right\"] = 2] = \"Right\";\n})(TextAlignment || (TextAlignment = {}));\n//# sourceMappingURL=alignment.js.map","// Originated from pdfkit Copyright (c) 2014 Devon Govett\n// https://github.com/foliojs/pdfkit/blob/1e62e6ffe24b378eb890df507a47610f4c4a7b24/lib/path.js\n// MIT LICENSE\n// Updated for pdf-lib & TypeScript by Jeremy Messenger\nimport { appendBezierCurve, appendQuadraticCurve, closePath, lineTo, moveTo, } from \"./operators\";\nvar cx = 0;\nvar cy = 0;\nvar px = 0;\nvar py = 0;\nvar sx = 0;\nvar sy = 0;\nvar parameters = new Map([\n    ['A', 7],\n    ['a', 7],\n    ['C', 6],\n    ['c', 6],\n    ['H', 1],\n    ['h', 1],\n    ['L', 2],\n    ['l', 2],\n    ['M', 2],\n    ['m', 2],\n    ['Q', 4],\n    ['q', 4],\n    ['S', 4],\n    ['s', 4],\n    ['T', 2],\n    ['t', 2],\n    ['V', 1],\n    ['v', 1],\n    ['Z', 0],\n    ['z', 0],\n]);\nvar parse = function (path) {\n    var cmd;\n    var ret = [];\n    var args = [];\n    var curArg = '';\n    var foundDecimal = false;\n    var params = 0;\n    for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {\n        var c = path_1[_i];\n        if (parameters.has(c)) {\n            params = parameters.get(c);\n            if (cmd) {\n                // save existing command\n                if (curArg.length > 0) {\n                    args[args.length] = +curArg;\n                }\n                ret[ret.length] = { cmd: cmd, args: args };\n                args = [];\n                curArg = '';\n                foundDecimal = false;\n            }\n            cmd = c;\n        }\n        else if ([' ', ','].includes(c) ||\n            (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\n            (c === '.' && foundDecimal)) {\n            if (curArg.length === 0) {\n                continue;\n            }\n            if (args.length === params) {\n                // handle reused commands\n                ret[ret.length] = { cmd: cmd, args: args };\n                args = [+curArg];\n                // handle assumed commands\n                if (cmd === 'M') {\n                    cmd = 'L';\n                }\n                if (cmd === 'm') {\n                    cmd = 'l';\n                }\n            }\n            else {\n                args[args.length] = +curArg;\n            }\n            foundDecimal = c === '.';\n            // fix for negative numbers or repeated decimals with no delimeter between commands\n            curArg = ['-', '.'].includes(c) ? c : '';\n        }\n        else {\n            curArg += c;\n            if (c === '.') {\n                foundDecimal = true;\n            }\n        }\n    }\n    // add the last command\n    if (curArg.length > 0) {\n        if (args.length === params) {\n            // handle reused commands\n            ret[ret.length] = { cmd: cmd, args: args };\n            args = [+curArg];\n            // handle assumed commands\n            if (cmd === 'M') {\n                cmd = 'L';\n            }\n            if (cmd === 'm') {\n                cmd = 'l';\n            }\n        }\n        else {\n            args[args.length] = +curArg;\n        }\n    }\n    ret[ret.length] = { cmd: cmd, args: args };\n    return ret;\n};\nvar apply = function (commands) {\n    // current point, control point, and subpath starting point\n    cx = cy = px = py = sx = sy = 0;\n    // run the commands\n    var cmds = [];\n    for (var i = 0; i < commands.length; i++) {\n        var c = commands[i];\n        if (c.cmd && typeof runners[c.cmd] === 'function') {\n            var cmd = runners[c.cmd](c.args);\n            if (Array.isArray(cmd)) {\n                cmds = cmds.concat(cmd);\n            }\n            else {\n                cmds.push(cmd);\n            }\n        }\n    }\n    return cmds;\n};\nvar runners = {\n    M: function (a) {\n        cx = a[0];\n        cy = a[1];\n        px = py = null;\n        sx = cx;\n        sy = cy;\n        return moveTo(cx, cy);\n    },\n    m: function (a) {\n        cx += a[0];\n        cy += a[1];\n        px = py = null;\n        sx = cx;\n        sy = cy;\n        return moveTo(cx, cy);\n    },\n    C: function (a) {\n        cx = a[4];\n        cy = a[5];\n        px = a[2];\n        py = a[3];\n        return appendBezierCurve(a[0], a[1], a[2], a[3], a[4], a[5]);\n    },\n    c: function (a) {\n        var cmd = appendBezierCurve(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);\n        px = cx + a[2];\n        py = cy + a[3];\n        cx += a[4];\n        cy += a[5];\n        return cmd;\n    },\n    S: function (a) {\n        if (px === null || py === null) {\n            px = cx;\n            py = cy;\n        }\n        var cmd = appendBezierCurve(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n        px = a[0];\n        py = a[1];\n        cx = a[2];\n        cy = a[3];\n        return cmd;\n    },\n    s: function (a) {\n        if (px === null || py === null) {\n            px = cx;\n            py = cy;\n        }\n        var cmd = appendBezierCurve(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);\n        px = cx + a[0];\n        py = cy + a[1];\n        cx += a[2];\n        cy += a[3];\n        return cmd;\n    },\n    Q: function (a) {\n        px = a[0];\n        py = a[1];\n        cx = a[2];\n        cy = a[3];\n        return appendQuadraticCurve(a[0], a[1], cx, cy);\n    },\n    q: function (a) {\n        var cmd = appendQuadraticCurve(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n        px = cx + a[0];\n        py = cy + a[1];\n        cx += a[2];\n        cy += a[3];\n        return cmd;\n    },\n    T: function (a) {\n        if (px === null || py === null) {\n            px = cx;\n            py = cy;\n        }\n        else {\n            px = cx - (px - cx);\n            py = cy - (py - cy);\n        }\n        var cmd = appendQuadraticCurve(px, py, a[0], a[1]);\n        px = cx - (px - cx);\n        py = cy - (py - cy);\n        cx = a[0];\n        cy = a[1];\n        return cmd;\n    },\n    t: function (a) {\n        if (px === null || py === null) {\n            px = cx;\n            py = cy;\n        }\n        else {\n            px = cx - (px - cx);\n            py = cy - (py - cy);\n        }\n        var cmd = appendQuadraticCurve(px, py, cx + a[0], cy + a[1]);\n        cx += a[0];\n        cy += a[1];\n        return cmd;\n    },\n    A: function (a) {\n        var cmds = solveArc(cx, cy, a);\n        cx = a[5];\n        cy = a[6];\n        return cmds;\n    },\n    a: function (a) {\n        a[5] += cx;\n        a[6] += cy;\n        var cmds = solveArc(cx, cy, a);\n        cx = a[5];\n        cy = a[6];\n        return cmds;\n    },\n    L: function (a) {\n        cx = a[0];\n        cy = a[1];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    l: function (a) {\n        cx += a[0];\n        cy += a[1];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    H: function (a) {\n        cx = a[0];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    h: function (a) {\n        cx += a[0];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    V: function (a) {\n        cy = a[0];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    v: function (a) {\n        cy += a[0];\n        px = py = null;\n        return lineTo(cx, cy);\n    },\n    Z: function () {\n        var cmd = closePath();\n        cx = sx;\n        cy = sy;\n        return cmd;\n    },\n    z: function () {\n        var cmd = closePath();\n        cx = sx;\n        cy = sy;\n        return cmd;\n    },\n};\nvar solveArc = function (x, y, coords) {\n    var rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6];\n    var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n    var cmds = [];\n    for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {\n        var seg = segs_1[_i];\n        var bez = segmentToBezier.apply(void 0, seg);\n        cmds.push(appendBezierCurve.apply(void 0, bez));\n    }\n    return cmds;\n};\n// from Inkscape svgtopdf, thanks!\nvar arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n    var th = rotateX * (Math.PI / 180);\n    var sinTh = Math.sin(th);\n    var cosTh = Math.cos(th);\n    rx = Math.abs(rx);\n    ry = Math.abs(ry);\n    px = cosTh * (ox - x) * 0.5 + sinTh * (oy - y) * 0.5;\n    py = cosTh * (oy - y) * 0.5 - sinTh * (ox - x) * 0.5;\n    var pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\n    if (pl > 1) {\n        pl = Math.sqrt(pl);\n        rx *= pl;\n        ry *= pl;\n    }\n    var a00 = cosTh / rx;\n    var a01 = sinTh / rx;\n    var a10 = -sinTh / ry;\n    var a11 = cosTh / ry;\n    var x0 = a00 * ox + a01 * oy;\n    var y0 = a10 * ox + a11 * oy;\n    var x1 = a00 * x + a01 * y;\n    var y1 = a10 * x + a11 * y;\n    var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n    var sfactorSq = 1 / d - 0.25;\n    if (sfactorSq < 0) {\n        sfactorSq = 0;\n    }\n    var sfactor = Math.sqrt(sfactorSq);\n    if (sweep === large) {\n        sfactor = -sfactor;\n    }\n    var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n    var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n    var th0 = Math.atan2(y0 - yc, x0 - xc);\n    var th1 = Math.atan2(y1 - yc, x1 - xc);\n    var thArc = th1 - th0;\n    if (thArc < 0 && sweep === 1) {\n        thArc += 2 * Math.PI;\n    }\n    else if (thArc > 0 && sweep === 0) {\n        thArc -= 2 * Math.PI;\n    }\n    var segments = Math.ceil(Math.abs(thArc / (Math.PI * 0.5 + 0.001)));\n    var result = [];\n    for (var i = 0; i < segments; i++) {\n        var th2 = th0 + (i * thArc) / segments;\n        var th3 = th0 + ((i + 1) * thArc) / segments;\n        result[i] = [xc, yc, th2, th3, rx, ry, sinTh, cosTh];\n    }\n    return result;\n};\nvar segmentToBezier = function (cx1, cy1, th0, th1, rx, ry, sinTh, cosTh) {\n    var a00 = cosTh * rx;\n    var a01 = -sinTh * ry;\n    var a10 = sinTh * rx;\n    var a11 = cosTh * ry;\n    var thHalf = 0.5 * (th1 - th0);\n    var t = ((8 / 3) * Math.sin(thHalf * 0.5) * Math.sin(thHalf * 0.5)) /\n        Math.sin(thHalf);\n    var x1 = cx1 + Math.cos(th0) - t * Math.sin(th0);\n    var y1 = cy1 + Math.sin(th0) + t * Math.cos(th0);\n    var x3 = cx1 + Math.cos(th1);\n    var y3 = cy1 + Math.sin(th1);\n    var x2 = x3 + t * Math.sin(th1);\n    var y2 = y3 - t * Math.cos(th1);\n    var result = [\n        a00 * x1 + a01 * y1,\n        a10 * x1 + a11 * y1,\n        a00 * x2 + a01 * y2,\n        a10 * x2 + a11 * y2,\n        a00 * x3 + a01 * y3,\n        a10 * x3 + a11 * y3,\n    ];\n    return result;\n};\nexport var svgPathToOperators = function (path) { return apply(parse(path)); };\n//# sourceMappingURL=svgPath.js.map","import { __spreadArrays } from \"tslib\";\nimport { setFillingColor, setStrokingColor } from \"./colors\";\nimport { beginText, closePath, drawObject, endText, fill, fillAndStroke, lineTo, moveTo, nextLine, popGraphicsState, pushGraphicsState, rotateAndSkewTextRadiansAndTranslate, rotateRadians, scale, setFontAndSize, setLineHeight, setLineWidth, showText, skewRadians, stroke, translate, setLineCap, rotateDegrees, setGraphicsState, setDashPattern, beginMarkedContent, endMarkedContent, clip, endPath, appendBezierCurve, } from \"./operators\";\nimport { degrees, toRadians } from \"./rotations\";\nimport { svgPathToOperators } from \"./svgPath\";\nimport { asNumber } from \"./objects\";\nexport var drawText = function (line, options) {\n    return [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        beginText(),\n        setFillingColor(options.color),\n        setFontAndSize(options.font, options.size),\n        rotateAndSkewTextRadiansAndTranslate(toRadians(options.rotate), toRadians(options.xSkew), toRadians(options.ySkew), options.x, options.y),\n        showText(line),\n        endText(),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\nexport var drawLinesOfText = function (lines, options) {\n    var operators = [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        beginText(),\n        setFillingColor(options.color),\n        setFontAndSize(options.font, options.size),\n        setLineHeight(options.lineHeight),\n        rotateAndSkewTextRadiansAndTranslate(toRadians(options.rotate), toRadians(options.xSkew), toRadians(options.ySkew), options.x, options.y),\n    ].filter(Boolean);\n    for (var idx = 0, len = lines.length; idx < len; idx++) {\n        operators.push(showText(lines[idx]), nextLine());\n    }\n    operators.push(endText(), popGraphicsState());\n    return operators;\n};\nexport var drawImage = function (name, options) {\n    return [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        translate(options.x, options.y),\n        rotateRadians(toRadians(options.rotate)),\n        scale(options.width, options.height),\n        skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n        drawObject(name),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\nexport var drawPage = function (name, options) {\n    return [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        translate(options.x, options.y),\n        rotateRadians(toRadians(options.rotate)),\n        scale(options.xScale, options.yScale),\n        skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n        drawObject(name),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\nexport var drawLine = function (options) {\n    var _a, _b;\n    return [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        options.color && setStrokingColor(options.color),\n        setLineWidth(options.thickness),\n        setDashPattern((_a = options.dashArray) !== null && _a !== void 0 ? _a : [], (_b = options.dashPhase) !== null && _b !== void 0 ? _b : 0),\n        moveTo(options.start.x, options.start.y),\n        options.lineCap && setLineCap(options.lineCap),\n        moveTo(options.start.x, options.start.y),\n        lineTo(options.end.x, options.end.y),\n        stroke(),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\nexport var drawRectangle = function (options) {\n    var _a, _b;\n    return [\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        options.color && setFillingColor(options.color),\n        options.borderColor && setStrokingColor(options.borderColor),\n        setLineWidth(options.borderWidth),\n        options.borderLineCap && setLineCap(options.borderLineCap),\n        setDashPattern((_a = options.borderDashArray) !== null && _a !== void 0 ? _a : [], (_b = options.borderDashPhase) !== null && _b !== void 0 ? _b : 0),\n        translate(options.x, options.y),\n        rotateRadians(toRadians(options.rotate)),\n        skewRadians(toRadians(options.xSkew), toRadians(options.ySkew)),\n        moveTo(0, 0),\n        lineTo(0, options.height),\n        lineTo(options.width, options.height),\n        lineTo(options.width, 0),\n        closePath(),\n        // prettier-ignore\n        options.color && options.borderWidth ? fillAndStroke()\n            : options.color ? fill()\n                : options.borderColor ? stroke()\n                    : closePath(),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\nvar KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\n/** @deprecated */\nexport var drawEllipsePath = function (config) {\n    var x = asNumber(config.x);\n    var y = asNumber(config.y);\n    var xScale = asNumber(config.xScale);\n    var yScale = asNumber(config.yScale);\n    x -= xScale;\n    y -= yScale;\n    var ox = xScale * KAPPA;\n    var oy = yScale * KAPPA;\n    var xe = x + xScale * 2;\n    var ye = y + yScale * 2;\n    var xm = x + xScale;\n    var ym = y + yScale;\n    return [\n        pushGraphicsState(),\n        moveTo(x, ym),\n        appendBezierCurve(x, ym - oy, xm - ox, y, xm, y),\n        appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym),\n        appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye),\n        appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym),\n        popGraphicsState(),\n    ];\n};\nvar drawEllipseCurves = function (config) {\n    var centerX = asNumber(config.x);\n    var centerY = asNumber(config.y);\n    var xScale = asNumber(config.xScale);\n    var yScale = asNumber(config.yScale);\n    var x = -xScale;\n    var y = -yScale;\n    var ox = xScale * KAPPA;\n    var oy = yScale * KAPPA;\n    var xe = x + xScale * 2;\n    var ye = y + yScale * 2;\n    var xm = x + xScale;\n    var ym = y + yScale;\n    return [\n        translate(centerX, centerY),\n        rotateRadians(toRadians(config.rotate)),\n        moveTo(x, ym),\n        appendBezierCurve(x, ym - oy, xm - ox, y, xm, y),\n        appendBezierCurve(xm + ox, y, xe, ym - oy, xe, ym),\n        appendBezierCurve(xe, ym + oy, xm + ox, ye, xm, ye),\n        appendBezierCurve(xm - ox, ye, x, ym + oy, x, ym),\n    ];\n};\nexport var drawEllipse = function (options) {\n    var _a, _b, _c;\n    return __spreadArrays([\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        options.color && setFillingColor(options.color),\n        options.borderColor && setStrokingColor(options.borderColor),\n        setLineWidth(options.borderWidth),\n        options.borderLineCap && setLineCap(options.borderLineCap),\n        setDashPattern((_a = options.borderDashArray) !== null && _a !== void 0 ? _a : [], (_b = options.borderDashPhase) !== null && _b !== void 0 ? _b : 0)\n    ], (options.rotate === undefined\n        ? drawEllipsePath({\n            x: options.x,\n            y: options.y,\n            xScale: options.xScale,\n            yScale: options.yScale,\n        })\n        : drawEllipseCurves({\n            x: options.x,\n            y: options.y,\n            xScale: options.xScale,\n            yScale: options.yScale,\n            rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0),\n        })), [\n        // prettier-ignore\n        options.color && options.borderWidth ? fillAndStroke()\n            : options.color ? fill()\n                : options.borderColor ? stroke()\n                    : closePath(),\n        popGraphicsState(),\n    ]).filter(Boolean);\n};\nexport var drawSvgPath = function (path, options) {\n    var _a, _b, _c;\n    return __spreadArrays([\n        pushGraphicsState(),\n        options.graphicsState && setGraphicsState(options.graphicsState),\n        translate(options.x, options.y),\n        rotateRadians(toRadians((_a = options.rotate) !== null && _a !== void 0 ? _a : degrees(0))),\n        // SVG path Y axis is opposite pdf-lib's\n        options.scale ? scale(options.scale, -options.scale) : scale(1, -1),\n        options.color && setFillingColor(options.color),\n        options.borderColor && setStrokingColor(options.borderColor),\n        options.borderWidth && setLineWidth(options.borderWidth),\n        options.borderLineCap && setLineCap(options.borderLineCap),\n        setDashPattern((_b = options.borderDashArray) !== null && _b !== void 0 ? _b : [], (_c = options.borderDashPhase) !== null && _c !== void 0 ? _c : 0)\n    ], svgPathToOperators(path), [\n        // prettier-ignore\n        options.color && options.borderWidth ? fillAndStroke()\n            : options.color ? fill()\n                : options.borderColor ? stroke()\n                    : closePath(),\n        popGraphicsState(),\n    ]).filter(Boolean);\n};\nexport var drawCheckMark = function (options) {\n    var size = asNumber(options.size);\n    /*********************** Define Check Mark Points ***************************/\n    // A check mark is defined by three points in some coordinate space. Here, we\n    // define these points in a unit coordinate system, where the range of the x\n    // and y axis are both [-1, 1].\n    //\n    // Note that we do not hard code `p1y` in case we wish to change the\n    // size/shape of the check mark in the future. We want the check mark to\n    // always form a right angle. This means that the dot product between (p1-p2)\n    // and (p3-p2) should be zero:\n    //\n    //   (p1x-p2x) * (p3x-p2x) + (p1y-p2y) * (p3y-p2y) = 0\n    //\n    // We can now rejigger this equation to solve for `p1y`:\n    //\n    //   (p1y-p2y) * (p3y-p2y) = -((p1x-p2x) * (p3x-p2x))\n    //   (p1y-p2y) = -((p1x-p2x) * (p3x-p2x)) / (p3y-p2y)\n    //   p1y = -((p1x-p2x) * (p3x-p2x)) / (p3y-p2y) + p2y\n    //\n    // Thanks to my friend Joel Walker (https://github.com/JWalker1995) for\n    // devising the above equation and unit coordinate system approach!\n    // (x, y) coords of the check mark's bottommost point\n    var p2x = -1 + 0.75;\n    var p2y = -1 + 0.51;\n    // (x, y) coords of the check mark's topmost point\n    var p3y = 1 - 0.525;\n    var p3x = 1 - 0.31;\n    // (x, y) coords of the check mark's center (vertically) point\n    var p1x = -1 + 0.325;\n    var p1y = -((p1x - p2x) * (p3x - p2x)) / (p3y - p2y) + p2y;\n    /****************************************************************************/\n    return [\n        pushGraphicsState(),\n        options.color && setStrokingColor(options.color),\n        setLineWidth(options.thickness),\n        translate(options.x, options.y),\n        moveTo(p1x * size, p1y * size),\n        lineTo(p2x * size, p2y * size),\n        lineTo(p3x * size, p3y * size),\n        stroke(),\n        popGraphicsState(),\n    ].filter(Boolean);\n};\n// prettier-ignore\nexport var rotateInPlace = function (options) {\n    return options.rotation === 0 ? [\n        translate(0, 0),\n        rotateDegrees(0)\n    ]\n        : options.rotation === 90 ? [\n            translate(options.width, 0),\n            rotateDegrees(90)\n        ]\n            : options.rotation === 180 ? [\n                translate(options.width, options.height),\n                rotateDegrees(180)\n            ]\n                : options.rotation === 270 ? [\n                    translate(0, options.height),\n                    rotateDegrees(270)\n                ]\n                    : [];\n}; // Invalid rotation - noop\nexport var drawCheckBox = function (options) {\n    var outline = drawRectangle({\n        x: options.x,\n        y: options.y,\n        width: options.width,\n        height: options.height,\n        borderWidth: options.borderWidth,\n        color: options.color,\n        borderColor: options.borderColor,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    if (!options.filled)\n        return outline;\n    var width = asNumber(options.width);\n    var height = asNumber(options.height);\n    var checkMarkSize = Math.min(width, height) / 2;\n    var checkMark = drawCheckMark({\n        x: width / 2,\n        y: height / 2,\n        size: checkMarkSize,\n        thickness: options.thickness,\n        color: options.markColor,\n    });\n    return __spreadArrays([pushGraphicsState()], outline, checkMark, [popGraphicsState()]);\n};\nexport var drawRadioButton = function (options) {\n    var width = asNumber(options.width);\n    var height = asNumber(options.height);\n    var outlineScale = Math.min(width, height) / 2;\n    var outline = drawEllipse({\n        x: options.x,\n        y: options.y,\n        xScale: outlineScale,\n        yScale: outlineScale,\n        color: options.color,\n        borderColor: options.borderColor,\n        borderWidth: options.borderWidth,\n    });\n    if (!options.filled)\n        return outline;\n    var dot = drawEllipse({\n        x: options.x,\n        y: options.y,\n        xScale: outlineScale * 0.45,\n        yScale: outlineScale * 0.45,\n        color: options.dotColor,\n        borderColor: undefined,\n        borderWidth: 0,\n    });\n    return __spreadArrays([pushGraphicsState()], outline, dot, [popGraphicsState()]);\n};\nexport var drawButton = function (options) {\n    var x = asNumber(options.x);\n    var y = asNumber(options.y);\n    var width = asNumber(options.width);\n    var height = asNumber(options.height);\n    var background = drawRectangle({\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        borderWidth: options.borderWidth,\n        color: options.color,\n        borderColor: options.borderColor,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    var lines = drawTextLines(options.textLines, {\n        color: options.textColor,\n        font: options.font,\n        size: options.fontSize,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    return __spreadArrays([pushGraphicsState()], background, lines, [popGraphicsState()]);\n};\nexport var drawTextLines = function (lines, options) {\n    var operators = [\n        beginText(),\n        setFillingColor(options.color),\n        setFontAndSize(options.font, options.size),\n    ];\n    for (var idx = 0, len = lines.length; idx < len; idx++) {\n        var _a = lines[idx], encoded = _a.encoded, x = _a.x, y = _a.y;\n        operators.push(rotateAndSkewTextRadiansAndTranslate(toRadians(options.rotate), toRadians(options.xSkew), toRadians(options.ySkew), x, y), showText(encoded));\n    }\n    operators.push(endText());\n    return operators;\n};\nexport var drawTextField = function (options) {\n    var x = asNumber(options.x);\n    var y = asNumber(options.y);\n    var width = asNumber(options.width);\n    var height = asNumber(options.height);\n    var borderWidth = asNumber(options.borderWidth);\n    var padding = asNumber(options.padding);\n    var clipX = x + borderWidth / 2 + padding;\n    var clipY = y + borderWidth / 2 + padding;\n    var clipWidth = width - (borderWidth / 2 + padding) * 2;\n    var clipHeight = height - (borderWidth / 2 + padding) * 2;\n    var clippingArea = [\n        moveTo(clipX, clipY),\n        lineTo(clipX, clipY + clipHeight),\n        lineTo(clipX + clipWidth, clipY + clipHeight),\n        lineTo(clipX + clipWidth, clipY),\n        closePath(),\n        clip(),\n        endPath(),\n    ];\n    var background = drawRectangle({\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        borderWidth: options.borderWidth,\n        color: options.color,\n        borderColor: options.borderColor,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    var lines = drawTextLines(options.textLines, {\n        color: options.textColor,\n        font: options.font,\n        size: options.fontSize,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    var markedContent = __spreadArrays([\n        beginMarkedContent('Tx'),\n        pushGraphicsState()\n    ], lines, [\n        popGraphicsState(),\n        endMarkedContent(),\n    ]);\n    return __spreadArrays([\n        pushGraphicsState()\n    ], background, clippingArea, markedContent, [\n        popGraphicsState(),\n    ]);\n};\nexport var drawOptionList = function (options) {\n    var x = asNumber(options.x);\n    var y = asNumber(options.y);\n    var width = asNumber(options.width);\n    var height = asNumber(options.height);\n    var lineHeight = asNumber(options.lineHeight);\n    var borderWidth = asNumber(options.borderWidth);\n    var padding = asNumber(options.padding);\n    var clipX = x + borderWidth / 2 + padding;\n    var clipY = y + borderWidth / 2 + padding;\n    var clipWidth = width - (borderWidth / 2 + padding) * 2;\n    var clipHeight = height - (borderWidth / 2 + padding) * 2;\n    var clippingArea = [\n        moveTo(clipX, clipY),\n        lineTo(clipX, clipY + clipHeight),\n        lineTo(clipX + clipWidth, clipY + clipHeight),\n        lineTo(clipX + clipWidth, clipY),\n        closePath(),\n        clip(),\n        endPath(),\n    ];\n    var background = drawRectangle({\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        borderWidth: options.borderWidth,\n        color: options.color,\n        borderColor: options.borderColor,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    var highlights = [];\n    for (var idx = 0, len = options.selectedLines.length; idx < len; idx++) {\n        var line = options.textLines[options.selectedLines[idx]];\n        highlights.push.apply(highlights, drawRectangle({\n            x: line.x - padding,\n            y: line.y - (lineHeight - line.height) / 2,\n            width: width - borderWidth,\n            height: line.height + (lineHeight - line.height) / 2,\n            borderWidth: 0,\n            color: options.selectedColor,\n            borderColor: undefined,\n            rotate: degrees(0),\n            xSkew: degrees(0),\n            ySkew: degrees(0),\n        }));\n    }\n    var lines = drawTextLines(options.textLines, {\n        color: options.textColor,\n        font: options.font,\n        size: options.fontSize,\n        rotate: degrees(0),\n        xSkew: degrees(0),\n        ySkew: degrees(0),\n    });\n    var markedContent = __spreadArrays([\n        beginMarkedContent('Tx'),\n        pushGraphicsState()\n    ], lines, [\n        popGraphicsState(),\n        endMarkedContent(),\n    ]);\n    return __spreadArrays([\n        pushGraphicsState()\n    ], background, highlights, clippingArea, markedContent, [\n        popGraphicsState(),\n    ]);\n};\n//# sourceMappingURL=operations.js.map","// tslint:disable: max-classes-per-file\nimport { __extends } from \"tslib\";\n// TODO: Include link to documentation with example\nvar EncryptedPDFError = /** @class */ (function (_super) {\n    __extends(EncryptedPDFError, _super);\n    function EncryptedPDFError() {\n        var _this = this;\n        var msg = 'Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways.';\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return EncryptedPDFError;\n}(Error));\nexport { EncryptedPDFError };\n// TODO: Include link to documentation with example\nvar FontkitNotRegisteredError = /** @class */ (function (_super) {\n    __extends(FontkitNotRegisteredError, _super);\n    function FontkitNotRegisteredError() {\n        var _this = this;\n        var msg = 'Input to `PDFDocument.embedFont` was a custom font, but no `fontkit` instance was found. You must register a `fontkit` instance with `PDFDocument.registerFontkit(...)` before embedding custom fonts.';\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return FontkitNotRegisteredError;\n}(Error));\nexport { FontkitNotRegisteredError };\n// TODO: Include link to documentation with example\nvar ForeignPageError = /** @class */ (function (_super) {\n    __extends(ForeignPageError, _super);\n    function ForeignPageError() {\n        var _this = this;\n        var msg = 'A `page` passed to `PDFDocument.addPage` or `PDFDocument.insertPage` was from a different (foreign) PDF document. If you want to copy pages from one PDFDocument to another, you must use `PDFDocument.copyPages(...)` to copy the pages before adding or inserting them.';\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return ForeignPageError;\n}(Error));\nexport { ForeignPageError };\n// TODO: Include link to documentation with example\nvar RemovePageFromEmptyDocumentError = /** @class */ (function (_super) {\n    __extends(RemovePageFromEmptyDocumentError, _super);\n    function RemovePageFromEmptyDocumentError() {\n        var _this = this;\n        var msg = 'PDFDocument has no pages so `PDFDocument.removePage` cannot be called';\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return RemovePageFromEmptyDocumentError;\n}(Error));\nexport { RemovePageFromEmptyDocumentError };\nvar NoSuchFieldError = /** @class */ (function (_super) {\n    __extends(NoSuchFieldError, _super);\n    function NoSuchFieldError(name) {\n        var _this = this;\n        var msg = \"PDFDocument has no form field with the name \\\"\" + name + \"\\\"\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return NoSuchFieldError;\n}(Error));\nexport { NoSuchFieldError };\nvar UnexpectedFieldTypeError = /** @class */ (function (_super) {\n    __extends(UnexpectedFieldTypeError, _super);\n    function UnexpectedFieldTypeError(name, expected, actual) {\n        var _a, _b;\n        var _this = this;\n        var expectedType = expected === null || expected === void 0 ? void 0 : expected.name;\n        var actualType = (_b = (_a = actual === null || actual === void 0 ? void 0 : actual.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : actual;\n        var msg = \"Expected field \\\"\" + name + \"\\\" to be of type \" + expectedType + \", \" +\n            (\"but it is actually of type \" + actualType);\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return UnexpectedFieldTypeError;\n}(Error));\nexport { UnexpectedFieldTypeError };\nvar MissingOnValueCheckError = /** @class */ (function (_super) {\n    __extends(MissingOnValueCheckError, _super);\n    function MissingOnValueCheckError(onValue) {\n        var _this = this;\n        var msg = \"Failed to select check box due to missing onValue: \\\"\" + onValue + \"\\\"\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return MissingOnValueCheckError;\n}(Error));\nexport { MissingOnValueCheckError };\nvar FieldAlreadyExistsError = /** @class */ (function (_super) {\n    __extends(FieldAlreadyExistsError, _super);\n    function FieldAlreadyExistsError(name) {\n        var _this = this;\n        var msg = \"A field already exists with the specified name: \\\"\" + name + \"\\\"\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return FieldAlreadyExistsError;\n}(Error));\nexport { FieldAlreadyExistsError };\nvar InvalidFieldNamePartError = /** @class */ (function (_super) {\n    __extends(InvalidFieldNamePartError, _super);\n    function InvalidFieldNamePartError(namePart) {\n        var _this = this;\n        var msg = \"Field name contains invalid component: \\\"\" + namePart + \"\\\"\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return InvalidFieldNamePartError;\n}(Error));\nexport { InvalidFieldNamePartError };\nvar FieldExistsAsNonTerminalError = /** @class */ (function (_super) {\n    __extends(FieldExistsAsNonTerminalError, _super);\n    function FieldExistsAsNonTerminalError(name) {\n        var _this = this;\n        var msg = \"A non-terminal field already exists with the specified name: \\\"\" + name + \"\\\"\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return FieldExistsAsNonTerminalError;\n}(Error));\nexport { FieldExistsAsNonTerminalError };\nvar RichTextFieldReadError = /** @class */ (function (_super) {\n    __extends(RichTextFieldReadError, _super);\n    function RichTextFieldReadError(fieldName) {\n        var _this = this;\n        var msg = \"Reading rich text fields is not supported: Attempted to read rich text field: \" + fieldName;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return RichTextFieldReadError;\n}(Error));\nexport { RichTextFieldReadError };\nvar CombedTextLayoutError = /** @class */ (function (_super) {\n    __extends(CombedTextLayoutError, _super);\n    function CombedTextLayoutError(lineLength, cellCount) {\n        var _this = this;\n        var msg = \"Failed to layout combed text as lineLength=\" + lineLength + \" is greater than cellCount=\" + cellCount;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return CombedTextLayoutError;\n}(Error));\nexport { CombedTextLayoutError };\nvar ExceededMaxLengthError = /** @class */ (function (_super) {\n    __extends(ExceededMaxLengthError, _super);\n    function ExceededMaxLengthError(textLength, maxLength, name) {\n        var _this = this;\n        var msg = \"Attempted to set text with length=\" + textLength + \" for TextField with maxLength=\" + maxLength + \" and name=\" + name;\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return ExceededMaxLengthError;\n}(Error));\nexport { ExceededMaxLengthError };\nvar InvalidMaxLengthError = /** @class */ (function (_super) {\n    __extends(InvalidMaxLengthError, _super);\n    function InvalidMaxLengthError(textLength, maxLength, name) {\n        var _this = this;\n        var msg = \"Attempted to set maxLength=\" + maxLength + \", which is less than \" + textLength + \", the length of this field's current value (name=\" + name + \")\";\n        _this = _super.call(this, msg) || this;\n        return _this;\n    }\n    return InvalidMaxLengthError;\n}(Error));\nexport { InvalidMaxLengthError };\n//# sourceMappingURL=errors.js.map","import { CombedTextLayoutError } from \"../errors\";\nimport { TextAlignment } from \"./alignment\";\nimport { cleanText, lineSplit, mergeLines, charAtIndex, charSplit, } from \"../../utils\";\nvar MIN_FONT_SIZE = 4;\nvar MAX_FONT_SIZE = 500;\nvar computeFontSize = function (lines, font, bounds, multiline) {\n    if (multiline === void 0) { multiline = false; }\n    var fontSize = MIN_FONT_SIZE;\n    while (fontSize < MAX_FONT_SIZE) {\n        var linesUsed = 0;\n        for (var lineIdx = 0, lineLen = lines.length; lineIdx < lineLen; lineIdx++) {\n            linesUsed += 1;\n            var line = lines[lineIdx];\n            var words = line.split(' ');\n            // Layout the words using the current `fontSize`, line wrapping\n            // whenever we reach the end of the current line.\n            var spaceInLineRemaining = bounds.width;\n            for (var idx = 0, len = words.length; idx < len; idx++) {\n                var isLastWord = idx === len - 1;\n                var word = isLastWord ? words[idx] : words[idx] + ' ';\n                var widthOfWord = font.widthOfTextAtSize(word, fontSize);\n                spaceInLineRemaining -= widthOfWord;\n                if (spaceInLineRemaining <= 0) {\n                    linesUsed += 1;\n                    spaceInLineRemaining = bounds.width - widthOfWord;\n                }\n            }\n        }\n        // Return if we exceeded the allowed width\n        if (!multiline && linesUsed > lines.length)\n            return fontSize - 1;\n        var height = font.heightAtSize(fontSize);\n        var lineHeight = height + height * 0.2;\n        var totalHeight = lineHeight * linesUsed;\n        // Return if we exceeded the allowed height\n        if (totalHeight > Math.abs(bounds.height))\n            return fontSize - 1;\n        fontSize += 1;\n    }\n    return fontSize;\n};\nvar computeCombedFontSize = function (line, font, bounds, cellCount) {\n    var cellWidth = bounds.width / cellCount;\n    var cellHeight = bounds.height;\n    var fontSize = MIN_FONT_SIZE;\n    var chars = charSplit(line);\n    while (fontSize < MAX_FONT_SIZE) {\n        for (var idx = 0, len = chars.length; idx < len; idx++) {\n            var c = chars[idx];\n            var tooLong = font.widthOfTextAtSize(c, fontSize) > cellWidth * 0.75;\n            if (tooLong)\n                return fontSize - 1;\n        }\n        var height = font.heightAtSize(fontSize, { descender: false });\n        if (height > cellHeight)\n            return fontSize - 1;\n        fontSize += 1;\n    }\n    return fontSize;\n};\nvar lastIndexOfWhitespace = function (line) {\n    for (var idx = line.length; idx > 0; idx--) {\n        if (/\\s/.test(line[idx]))\n            return idx;\n    }\n    return undefined;\n};\nvar splitOutLines = function (input, maxWidth, font, fontSize) {\n    var _a;\n    var lastWhitespaceIdx = input.length;\n    while (lastWhitespaceIdx > 0) {\n        var line = input.substring(0, lastWhitespaceIdx);\n        var encoded = font.encodeText(line);\n        var width = font.widthOfTextAtSize(line, fontSize);\n        if (width < maxWidth) {\n            var remainder = input.substring(lastWhitespaceIdx) || undefined;\n            return { line: line, encoded: encoded, width: width, remainder: remainder };\n        }\n        lastWhitespaceIdx = (_a = lastIndexOfWhitespace(line)) !== null && _a !== void 0 ? _a : 0;\n    }\n    // We were unable to split the input enough to get a chunk that would fit\n    // within the specified `maxWidth` so we'll just return everything\n    return {\n        line: input,\n        encoded: font.encodeText(input),\n        width: font.widthOfTextAtSize(input, fontSize),\n        remainder: undefined,\n    };\n};\nexport var layoutMultilineText = function (text, _a) {\n    var alignment = _a.alignment, fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds;\n    var lines = lineSplit(cleanText(text));\n    if (fontSize === undefined || fontSize === 0) {\n        fontSize = computeFontSize(lines, font, bounds, true);\n    }\n    var height = font.heightAtSize(fontSize);\n    var lineHeight = height + height * 0.2;\n    var textLines = [];\n    var minX = bounds.x;\n    var minY = bounds.y;\n    var maxX = bounds.x + bounds.width;\n    var maxY = bounds.y + bounds.height;\n    var y = bounds.y + bounds.height;\n    for (var idx = 0, len = lines.length; idx < len; idx++) {\n        var prevRemainder = lines[idx];\n        while (prevRemainder !== undefined) {\n            var _b = splitOutLines(prevRemainder, bounds.width, font, fontSize), line = _b.line, encoded = _b.encoded, width = _b.width, remainder = _b.remainder;\n            // prettier-ignore\n            var x = (alignment === TextAlignment.Left ? bounds.x\n                : alignment === TextAlignment.Center ? bounds.x + (bounds.width / 2) - (width / 2)\n                    : alignment === TextAlignment.Right ? bounds.x + bounds.width - width\n                        : bounds.x);\n            y -= lineHeight;\n            if (x < minX)\n                minX = x;\n            if (y < minY)\n                minY = y;\n            if (x + width > maxX)\n                maxX = x + width;\n            if (y + height > maxY)\n                maxY = y + height;\n            textLines.push({ text: line, encoded: encoded, width: width, height: height, x: x, y: y });\n            // Only trim lines that we had to split ourselves. So we won't trim lines\n            // that the user provided themselves with whitespace.\n            prevRemainder = remainder === null || remainder === void 0 ? void 0 : remainder.trim();\n        }\n    }\n    return {\n        fontSize: fontSize,\n        lineHeight: lineHeight,\n        lines: textLines,\n        bounds: {\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY,\n        },\n    };\n};\nexport var layoutCombedText = function (text, _a) {\n    var fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds, cellCount = _a.cellCount;\n    var line = mergeLines(cleanText(text));\n    if (line.length > cellCount) {\n        throw new CombedTextLayoutError(line.length, cellCount);\n    }\n    if (fontSize === undefined || fontSize === 0) {\n        fontSize = computeCombedFontSize(line, font, bounds, cellCount);\n    }\n    var cellWidth = bounds.width / cellCount;\n    var height = font.heightAtSize(fontSize, { descender: false });\n    var y = bounds.y + (bounds.height / 2 - height / 2);\n    var cells = [];\n    var minX = bounds.x;\n    var minY = bounds.y;\n    var maxX = bounds.x + bounds.width;\n    var maxY = bounds.y + bounds.height;\n    var cellOffset = 0;\n    var charOffset = 0;\n    while (cellOffset < cellCount) {\n        var _b = charAtIndex(line, charOffset), char = _b[0], charLength = _b[1];\n        var encoded = font.encodeText(char);\n        var width = font.widthOfTextAtSize(char, fontSize);\n        var cellCenter = bounds.x + (cellWidth * cellOffset + cellWidth / 2);\n        var x = cellCenter - width / 2;\n        if (x < minX)\n            minX = x;\n        if (y < minY)\n            minY = y;\n        if (x + width > maxX)\n            maxX = x + width;\n        if (y + height > maxY)\n            maxY = y + height;\n        cells.push({ text: line, encoded: encoded, width: width, height: height, x: x, y: y });\n        cellOffset += 1;\n        charOffset += charLength;\n    }\n    return {\n        fontSize: fontSize,\n        cells: cells,\n        bounds: {\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY,\n        },\n    };\n};\nexport var layoutSinglelineText = function (text, _a) {\n    var alignment = _a.alignment, fontSize = _a.fontSize, font = _a.font, bounds = _a.bounds;\n    var line = mergeLines(cleanText(text));\n    if (fontSize === undefined || fontSize === 0) {\n        fontSize = computeFontSize([line], font, bounds);\n    }\n    var encoded = font.encodeText(line);\n    var width = font.widthOfTextAtSize(line, fontSize);\n    var height = font.heightAtSize(fontSize, { descender: false });\n    // prettier-ignore\n    var x = (alignment === TextAlignment.Left ? bounds.x\n        : alignment === TextAlignment.Center ? bounds.x + (bounds.width / 2) - (width / 2)\n            : alignment === TextAlignment.Right ? bounds.x + bounds.width - width\n                : bounds.x);\n    var y = bounds.y + (bounds.height / 2 - height / 2);\n    return {\n        fontSize: fontSize,\n        line: { text: line, encoded: encoded, width: width, height: height, x: x, y: y },\n        bounds: { x: x, y: y, width: width, height: height },\n    };\n};\n//# sourceMappingURL=layout.js.map","export var ImageAlignment;\n(function (ImageAlignment) {\n    ImageAlignment[ImageAlignment[\"Left\"] = 0] = \"Left\";\n    ImageAlignment[ImageAlignment[\"Center\"] = 1] = \"Center\";\n    ImageAlignment[ImageAlignment[\"Right\"] = 2] = \"Right\";\n})(ImageAlignment || (ImageAlignment = {}));\n//# sourceMappingURL=alignment.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { drawCheckBox, rotateInPlace, drawRadioButton, drawButton, drawTextField, drawOptionList, } from \"../operations\";\nimport { rgb, componentsToColor, setFillingColor, grayscale, cmyk, } from \"../colors\";\nimport { reduceRotation, adjustDimsForRotation } from \"../rotations\";\nimport { layoutMultilineText, layoutCombedText, layoutSinglelineText, } from \"../text/layout\";\nimport { TextAlignment } from \"../text/alignment\";\nimport { setFontAndSize } from \"../operators\";\nimport { findLastMatch } from \"../../utils\";\n/********************* Appearance Provider Functions **************************/\nexport var normalizeAppearance = function (appearance) {\n    if ('normal' in appearance)\n        return appearance;\n    return { normal: appearance };\n};\n// Examples:\n//   `/Helv 12 Tf` -> ['/Helv 12 Tf', 'Helv', '12']\n//   `/HeBo 8.00 Tf` -> ['/HeBo 8 Tf', 'HeBo', '8.00']\nvar tfRegex = /\\/([^\\0\\t\\n\\f\\r\\ ]+)[\\0\\t\\n\\f\\r\\ ]+(\\d*\\.\\d+|\\d+)[\\0\\t\\n\\f\\r\\ ]+Tf/;\nvar getDefaultFontSize = function (field) {\n    var _a, _b;\n    var da = (_a = field.getDefaultAppearance()) !== null && _a !== void 0 ? _a : '';\n    var daMatch = (_b = findLastMatch(da, tfRegex).match) !== null && _b !== void 0 ? _b : [];\n    var defaultFontSize = Number(daMatch[2]);\n    return isFinite(defaultFontSize) ? defaultFontSize : undefined;\n};\n// Examples:\n//   `0.3 g` -> ['0.3', 'g']\n//   `0.3 1 .3 rg` -> ['0.3', '1', '.3', 'rg']\n//   `0.3 1 .3 0 k` -> ['0.3', '1', '.3', '0', 'k']\nvar colorRegex = /(\\d*\\.\\d+|\\d+)[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]*(\\d*\\.\\d+|\\d+)?[\\0\\t\\n\\f\\r\\ ]+(g|rg|k)/;\nvar getDefaultColor = function (field) {\n    var _a;\n    var da = (_a = field.getDefaultAppearance()) !== null && _a !== void 0 ? _a : '';\n    var daMatch = findLastMatch(da, colorRegex).match;\n    var _b = daMatch !== null && daMatch !== void 0 ? daMatch : [], c1 = _b[1], c2 = _b[2], c3 = _b[3], c4 = _b[4], colorSpace = _b[5];\n    if (colorSpace === 'g' && c1) {\n        return grayscale(Number(c1));\n    }\n    if (colorSpace === 'rg' && c1 && c2 && c3) {\n        return rgb(Number(c1), Number(c2), Number(c3));\n    }\n    if (colorSpace === 'k' && c1 && c2 && c3 && c4) {\n        return cmyk(Number(c1), Number(c2), Number(c3), Number(c4));\n    }\n    return undefined;\n};\nvar updateDefaultAppearance = function (field, color, font, fontSize) {\n    var _a;\n    if (fontSize === void 0) { fontSize = 0; }\n    var da = [\n        setFillingColor(color).toString(),\n        setFontAndSize((_a = font === null || font === void 0 ? void 0 : font.name) !== null && _a !== void 0 ? _a : 'dummy__noop', fontSize).toString(),\n    ].join('\\n');\n    field.setDefaultAppearance(da);\n};\nexport var defaultCheckBoxAppearanceProvider = function (checkBox, widget) {\n    var _a, _b, _c;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(checkBox.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = (_b = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor())) !== null && _b !== void 0 ? _b : black;\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8);\n    // Update color\n    var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black;\n    if (widgetColor) {\n        updateDefaultAppearance(widget, textColor);\n    }\n    else {\n        updateDefaultAppearance(checkBox.acroField, textColor);\n    }\n    var options = {\n        x: 0 + borderWidth / 2,\n        y: 0 + borderWidth / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        thickness: 1.5,\n        borderWidth: borderWidth,\n        borderColor: borderColor,\n        markColor: textColor,\n    };\n    return {\n        normal: {\n            on: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: normalBackgroundColor, filled: true }))),\n            off: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: normalBackgroundColor, filled: false }))),\n        },\n        down: {\n            on: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: downBackgroundColor, filled: true }))),\n            off: __spreadArrays(rotate, drawCheckBox(__assign(__assign({}, options), { color: downBackgroundColor, filled: false }))),\n        },\n    };\n};\nexport var defaultRadioGroupAppearanceProvider = function (radioGroup, widget) {\n    var _a, _b, _c;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(radioGroup.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = (_b = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor())) !== null && _b !== void 0 ? _b : black;\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8);\n    // Update color\n    var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black;\n    if (widgetColor) {\n        updateDefaultAppearance(widget, textColor);\n    }\n    else {\n        updateDefaultAppearance(radioGroup.acroField, textColor);\n    }\n    var options = {\n        x: width / 2,\n        y: height / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        borderWidth: borderWidth,\n        borderColor: borderColor,\n        dotColor: textColor,\n    };\n    return {\n        normal: {\n            on: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: normalBackgroundColor, filled: true }))),\n            off: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: normalBackgroundColor, filled: false }))),\n        },\n        down: {\n            on: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: downBackgroundColor, filled: true }))),\n            off: __spreadArrays(rotate, drawRadioButton(__assign(__assign({}, options), { color: downBackgroundColor, filled: false }))),\n        },\n    };\n};\nexport var defaultButtonAppearanceProvider = function (button, widget, font) {\n    var _a, _b, _c, _d, _e;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(button.acroField);\n    var widgetFontSize = getDefaultFontSize(widget);\n    var fieldFontSize = getDefaultFontSize(button.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var captions = ap === null || ap === void 0 ? void 0 : ap.getCaptions();\n    var normalText = (_a = captions === null || captions === void 0 ? void 0 : captions.normal) !== null && _a !== void 0 ? _a : '';\n    var downText = (_c = (_b = captions === null || captions === void 0 ? void 0 : captions.down) !== null && _b !== void 0 ? _b : normalText) !== null && _c !== void 0 ? _c : '';\n    var borderWidth = (_d = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _d !== void 0 ? _d : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _f = adjustDimsForRotation(rectangle, rotation), width = _f.width, height = _f.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor());\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var downBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor(), 0.8);\n    var bounds = {\n        x: borderWidth,\n        y: borderWidth,\n        width: width - borderWidth * 2,\n        height: height - borderWidth * 2,\n    };\n    var normalLayout = layoutSinglelineText(normalText, {\n        alignment: TextAlignment.Center,\n        fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n        font: font,\n        bounds: bounds,\n    });\n    var downLayout = layoutSinglelineText(downText, {\n        alignment: TextAlignment.Center,\n        fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n        font: font,\n        bounds: bounds,\n    });\n    // Update font size and color\n    var fontSize = Math.min(normalLayout.fontSize, downLayout.fontSize);\n    var textColor = (_e = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _e !== void 0 ? _e : black;\n    if (widgetColor || widgetFontSize !== undefined) {\n        updateDefaultAppearance(widget, textColor, font, fontSize);\n    }\n    else {\n        updateDefaultAppearance(button.acroField, textColor, font, fontSize);\n    }\n    var options = {\n        x: 0 + borderWidth / 2,\n        y: 0 + borderWidth / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        borderWidth: borderWidth,\n        borderColor: borderColor,\n        textColor: textColor,\n        font: font.name,\n        fontSize: fontSize,\n    };\n    return {\n        normal: __spreadArrays(rotate, drawButton(__assign(__assign({}, options), { color: normalBackgroundColor, textLines: [normalLayout.line] }))),\n        down: __spreadArrays(rotate, drawButton(__assign(__assign({}, options), { color: downBackgroundColor, textLines: [downLayout.line] }))),\n    };\n};\nexport var defaultTextFieldAppearanceProvider = function (textField, widget, font) {\n    var _a, _b, _c, _d;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(textField.acroField);\n    var widgetFontSize = getDefaultFontSize(widget);\n    var fieldFontSize = getDefaultFontSize(textField.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var text = (_a = textField.getText()) !== null && _a !== void 0 ? _a : '';\n    var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _e = adjustDimsForRotation(rectangle, rotation), width = _e.width, height = _e.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor());\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var textLines;\n    var fontSize;\n    var padding = textField.isCombed() ? 0 : 1;\n    var bounds = {\n        x: borderWidth + padding,\n        y: borderWidth + padding,\n        width: width - (borderWidth + padding) * 2,\n        height: height - (borderWidth + padding) * 2,\n    };\n    if (textField.isMultiline()) {\n        var layout = layoutMultilineText(text, {\n            alignment: textField.getAlignment(),\n            fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n            font: font,\n            bounds: bounds,\n        });\n        textLines = layout.lines;\n        fontSize = layout.fontSize;\n    }\n    else if (textField.isCombed()) {\n        var layout = layoutCombedText(text, {\n            fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n            font: font,\n            bounds: bounds,\n            cellCount: (_c = textField.getMaxLength()) !== null && _c !== void 0 ? _c : 0,\n        });\n        textLines = layout.cells;\n        fontSize = layout.fontSize;\n    }\n    else {\n        var layout = layoutSinglelineText(text, {\n            alignment: textField.getAlignment(),\n            fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n            font: font,\n            bounds: bounds,\n        });\n        textLines = [layout.line];\n        fontSize = layout.fontSize;\n    }\n    // Update font size and color\n    var textColor = (_d = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _d !== void 0 ? _d : black;\n    if (widgetColor || widgetFontSize !== undefined) {\n        updateDefaultAppearance(widget, textColor, font, fontSize);\n    }\n    else {\n        updateDefaultAppearance(textField.acroField, textColor, font, fontSize);\n    }\n    var options = {\n        x: 0 + borderWidth / 2,\n        y: 0 + borderWidth / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0,\n        borderColor: borderColor,\n        textColor: textColor,\n        font: font.name,\n        fontSize: fontSize,\n        color: normalBackgroundColor,\n        textLines: textLines,\n        padding: padding,\n    };\n    return __spreadArrays(rotate, drawTextField(options));\n};\nexport var defaultDropdownAppearanceProvider = function (dropdown, widget, font) {\n    var _a, _b, _c;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(dropdown.acroField);\n    var widgetFontSize = getDefaultFontSize(widget);\n    var fieldFontSize = getDefaultFontSize(dropdown.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var text = (_a = dropdown.getSelected()[0]) !== null && _a !== void 0 ? _a : '';\n    var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _d = adjustDimsForRotation(rectangle, rotation), width = _d.width, height = _d.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor());\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var padding = 1;\n    var bounds = {\n        x: borderWidth + padding,\n        y: borderWidth + padding,\n        width: width - (borderWidth + padding) * 2,\n        height: height - (borderWidth + padding) * 2,\n    };\n    var _e = layoutSinglelineText(text, {\n        alignment: TextAlignment.Left,\n        fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n        font: font,\n        bounds: bounds,\n    }), line = _e.line, fontSize = _e.fontSize;\n    // Update font size and color\n    var textColor = (_c = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _c !== void 0 ? _c : black;\n    if (widgetColor || widgetFontSize !== undefined) {\n        updateDefaultAppearance(widget, textColor, font, fontSize);\n    }\n    else {\n        updateDefaultAppearance(dropdown.acroField, textColor, font, fontSize);\n    }\n    var options = {\n        x: 0 + borderWidth / 2,\n        y: 0 + borderWidth / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0,\n        borderColor: borderColor,\n        textColor: textColor,\n        font: font.name,\n        fontSize: fontSize,\n        color: normalBackgroundColor,\n        textLines: [line],\n        padding: padding,\n    };\n    return __spreadArrays(rotate, drawTextField(options));\n};\nexport var defaultOptionListAppearanceProvider = function (optionList, widget, font) {\n    var _a, _b;\n    // The `/DA` entry can be at the widget or field level - so we handle both\n    var widgetColor = getDefaultColor(widget);\n    var fieldColor = getDefaultColor(optionList.acroField);\n    var widgetFontSize = getDefaultFontSize(widget);\n    var fieldFontSize = getDefaultFontSize(optionList.acroField);\n    var rectangle = widget.getRectangle();\n    var ap = widget.getAppearanceCharacteristics();\n    var bs = widget.getBorderStyle();\n    var borderWidth = (_a = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _a !== void 0 ? _a : 0;\n    var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n    var _c = adjustDimsForRotation(rectangle, rotation), width = _c.width, height = _c.height;\n    var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n    var black = rgb(0, 0, 0);\n    var borderColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBorderColor());\n    var normalBackgroundColor = componentsToColor(ap === null || ap === void 0 ? void 0 : ap.getBackgroundColor());\n    var options = optionList.getOptions();\n    var selected = optionList.getSelected();\n    if (optionList.isSorted())\n        options.sort();\n    var text = '';\n    for (var idx = 0, len = options.length; idx < len; idx++) {\n        text += options[idx];\n        if (idx < len - 1)\n            text += '\\n';\n    }\n    var padding = 1;\n    var bounds = {\n        x: borderWidth + padding,\n        y: borderWidth + padding,\n        width: width - (borderWidth + padding) * 2,\n        height: height - (borderWidth + padding) * 2,\n    };\n    var _d = layoutMultilineText(text, {\n        alignment: TextAlignment.Left,\n        fontSize: widgetFontSize !== null && widgetFontSize !== void 0 ? widgetFontSize : fieldFontSize,\n        font: font,\n        bounds: bounds,\n    }), lines = _d.lines, fontSize = _d.fontSize, lineHeight = _d.lineHeight;\n    var selectedLines = [];\n    for (var idx = 0, len = lines.length; idx < len; idx++) {\n        var line = lines[idx];\n        if (selected.includes(line.text))\n            selectedLines.push(idx);\n    }\n    var blue = rgb(153 / 255, 193 / 255, 218 / 255);\n    // Update font size and color\n    var textColor = (_b = widgetColor !== null && widgetColor !== void 0 ? widgetColor : fieldColor) !== null && _b !== void 0 ? _b : black;\n    if (widgetColor || widgetFontSize !== undefined) {\n        updateDefaultAppearance(widget, textColor, font, fontSize);\n    }\n    else {\n        updateDefaultAppearance(optionList.acroField, textColor, font, fontSize);\n    }\n    return __spreadArrays(rotate, drawOptionList({\n        x: 0 + borderWidth / 2,\n        y: 0 + borderWidth / 2,\n        width: width - borderWidth,\n        height: height - borderWidth,\n        borderWidth: borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0,\n        borderColor: borderColor,\n        textColor: textColor,\n        font: font.name,\n        fontSize: fontSize,\n        color: normalBackgroundColor,\n        textLines: lines,\n        lineHeight: lineHeight,\n        selectedColor: blue,\n        selectedLines: selectedLines,\n        padding: padding,\n    }));\n};\n//# sourceMappingURL=appearances.js.map","import { __awaiter, __generator } from \"tslib\";\nimport PDFDocument from \"./PDFDocument\";\nimport { PDFPageEmbedder, PDFRef } from \"../core\";\nimport { assertIs } from \"../utils\";\n/**\n * Represents a PDF page that has been embedded in a [[PDFDocument]].\n */\nvar PDFEmbeddedPage = /** @class */ (function () {\n    function PDFEmbeddedPage(ref, doc, embedder) {\n        this.alreadyEmbedded = false;\n        assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        assertIs(embedder, 'embedder', [[PDFPageEmbedder, 'PDFPageEmbedder']]);\n        this.ref = ref;\n        this.doc = doc;\n        this.width = embedder.width;\n        this.height = embedder.height;\n        this.embedder = embedder;\n    }\n    /**\n     * Compute the width and height of this page after being scaled by the\n     * given `factor`. For example:\n     * ```js\n     * embeddedPage.width  // => 500\n     * embeddedPage.height // => 250\n     *\n     * const scaled = embeddedPage.scale(0.5)\n     * scaled.width  // => 250\n     * scaled.height // => 125\n     * ```\n     * This operation is often useful before drawing a page with\n     * [[PDFPage.drawPage]] to compute the `width` and `height` options.\n     * @param factor The factor by which this page should be scaled.\n     * @returns The width and height of the page after being scaled.\n     */\n    PDFEmbeddedPage.prototype.scale = function (factor) {\n        assertIs(factor, 'factor', ['number']);\n        return { width: this.width * factor, height: this.height * factor };\n    };\n    /**\n     * Get the width and height of this page. For example:\n     * ```js\n     * const { width, height } = embeddedPage.size()\n     * ```\n     * @returns The width and height of the page.\n     */\n    PDFEmbeddedPage.prototype.size = function () {\n        return this.scale(1);\n    };\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFDocument.save]] and [[PDFDocument.saveAsBase64]] methods will\n     * > automatically ensure all embeddable pages get embedded.\n     *\n     * Embed this embeddable page in its document.\n     *\n     * @returns Resolves when the embedding is complete.\n     */\n    PDFEmbeddedPage.prototype.embed = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.alreadyEmbedded) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.embedder.embedIntoContext(this.doc.context, this.ref)];\n                    case 1:\n                        _a.sent();\n                        this.alreadyEmbedded = true;\n                        _a.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.embedPdf]] and\n     * > [[PDFDocument.embedPage]] methods, which will create instances of\n     * > [[PDFEmbeddedPage]] for you.\n     *\n     * Create an instance of [[PDFEmbeddedPage]] from an existing ref and embedder\n     *\n     * @param ref The unique reference for this embedded page.\n     * @param doc The document to which the embedded page will belong.\n     * @param embedder The embedder that will be used to embed the page.\n     */\n    PDFEmbeddedPage.of = function (ref, doc, embedder) {\n        return new PDFEmbeddedPage(ref, doc, embedder);\n    };\n    return PDFEmbeddedPage;\n}());\nexport default PDFEmbeddedPage;\n//# sourceMappingURL=PDFEmbeddedPage.js.map","import { __awaiter, __generator } from \"tslib\";\nimport PDFDocument from \"./PDFDocument\";\nimport { CustomFontEmbedder, PDFRef, StandardFontEmbedder, } from \"../core\";\nimport { assertIs, assertOrUndefined } from \"../utils\";\n/**\n * Represents a font that has been embedded in a [[PDFDocument]].\n */\nvar PDFFont = /** @class */ (function () {\n    function PDFFont(ref, doc, embedder) {\n        this.modified = true;\n        assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        assertIs(embedder, 'embedder', [\n            [CustomFontEmbedder, 'CustomFontEmbedder'],\n            [StandardFontEmbedder, 'StandardFontEmbedder'],\n        ]);\n        this.ref = ref;\n        this.doc = doc;\n        this.name = embedder.fontName;\n        this.embedder = embedder;\n    }\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFPage.drawText]] method will automatically encode the text it is\n     * > given.\n     *\n     * Encodes a string of text in this font.\n     *\n     * @param text The text to be encoded.\n     * @returns The encoded text as a hex string.\n     */\n    PDFFont.prototype.encodeText = function (text) {\n        assertIs(text, 'text', ['string']);\n        this.modified = true;\n        return this.embedder.encodeText(text);\n    };\n    /**\n     * Measure the width of a string of text drawn in this font at a given size.\n     * For example:\n     * ```js\n     * const width = font.widthOfTextAtSize('Foo Bar Qux Baz', 36)\n     * ```\n     * @param text The string of text to be measured.\n     * @param size The font size to be used for this measurement.\n     * @returns The width of the string of text when drawn in this font at the\n     *          given size.\n     */\n    PDFFont.prototype.widthOfTextAtSize = function (text, size) {\n        assertIs(text, 'text', ['string']);\n        assertIs(size, 'size', ['number']);\n        return this.embedder.widthOfTextAtSize(text, size);\n    };\n    /**\n     * Measure the height of this font at a given size. For example:\n     * ```js\n     * const height = font.heightAtSize(24)\n     * ```\n     *\n     * The `options.descender` value controls whether or not the font's\n     * descender is included in the height calculation.\n     *\n     * @param size The font size to be used for this measurement.\n     * @param options The options to be used when computing this measurement.\n     * @returns The height of this font at the given size.\n     */\n    PDFFont.prototype.heightAtSize = function (size, options) {\n        var _a;\n        assertIs(size, 'size', ['number']);\n        assertOrUndefined(options === null || options === void 0 ? void 0 : options.descender, 'options.descender', ['boolean']);\n        return this.embedder.heightOfFontAtSize(size, {\n            descender: (_a = options === null || options === void 0 ? void 0 : options.descender) !== null && _a !== void 0 ? _a : true,\n        });\n    };\n    /**\n     * Compute the font size at which this font is a given height. For example:\n     * ```js\n     * const fontSize = font.sizeAtHeight(12)\n     * ```\n     * @param height The height to be used for this calculation.\n     * @returns The font size at which this font is the given height.\n     */\n    PDFFont.prototype.sizeAtHeight = function (height) {\n        assertIs(height, 'height', ['number']);\n        return this.embedder.sizeOfFontAtHeight(height);\n    };\n    /**\n     * Get the set of unicode code points that can be represented by this font.\n     * @returns The set of unicode code points supported by this font.\n     */\n    PDFFont.prototype.getCharacterSet = function () {\n        if (this.embedder instanceof StandardFontEmbedder) {\n            return this.embedder.encoding.supportedCodePoints;\n        }\n        else {\n            return this.embedder.font.characterSet;\n        }\n    };\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFDocument.save]] and [[PDFDocument.saveAsBase64]] methods will\n     * > automatically ensure all fonts get embedded.\n     *\n     * Embed this font in its document.\n     *\n     * @returns Resolves when the embedding is complete.\n     */\n    PDFFont.prototype.embed = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this.modified) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.embedder.embedIntoContext(this.doc.context, this.ref)];\n                    case 1:\n                        _a.sent();\n                        this.modified = false;\n                        _a.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.embedFont]] and\n     * > [[PDFDocument.embedStandardFont]] methods, which will create instances\n     * > of [[PDFFont]] for you.\n     *\n     * Create an instance of [[PDFFont]] from an existing ref and embedder\n     *\n     * @param ref The unique reference for this font.\n     * @param doc The document to which the font will belong.\n     * @param embedder The embedder that will be used to embed the font.\n     */\n    PDFFont.of = function (ref, doc, embedder) {\n        return new PDFFont(ref, doc, embedder);\n    };\n    return PDFFont;\n}());\nexport default PDFFont;\n//# sourceMappingURL=PDFFont.js.map","import { __awaiter, __generator } from \"tslib\";\nimport PDFDocument from \"./PDFDocument\";\nimport { JpegEmbedder, PDFRef, PngEmbedder } from \"../core\";\nimport { assertIs } from \"../utils\";\n/**\n * Represents an image that has been embedded in a [[PDFDocument]].\n */\nvar PDFImage = /** @class */ (function () {\n    function PDFImage(ref, doc, embedder) {\n        assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        assertIs(embedder, 'embedder', [\n            [JpegEmbedder, 'JpegEmbedder'],\n            [PngEmbedder, 'PngEmbedder'],\n        ]);\n        this.ref = ref;\n        this.doc = doc;\n        this.width = embedder.width;\n        this.height = embedder.height;\n        this.embedder = embedder;\n    }\n    /**\n     * Compute the width and height of this image after being scaled by the\n     * given `factor`. For example:\n     * ```js\n     * image.width  // => 500\n     * image.height // => 250\n     *\n     * const scaled = image.scale(0.5)\n     * scaled.width  // => 250\n     * scaled.height // => 125\n     * ```\n     * This operation is often useful before drawing an image with\n     * [[PDFPage.drawImage]] to compute the `width` and `height` options.\n     * @param factor The factor by which this image should be scaled.\n     * @returns The width and height of the image after being scaled.\n     */\n    PDFImage.prototype.scale = function (factor) {\n        assertIs(factor, 'factor', ['number']);\n        return { width: this.width * factor, height: this.height * factor };\n    };\n    /**\n     * Get the width and height of this image after scaling it as large as\n     * possible while maintaining its aspect ratio and not exceeding the\n     * specified `width` and `height`. For example:\n     * ```\n     * image.width  // => 500\n     * image.height // => 250\n     *\n     * const scaled = image.scaleToFit(750, 1000)\n     * scaled.width  // => 750\n     * scaled.height // => 375\n     * ```\n     * The `width` and `height` parameters can also be thought of as the width\n     * and height of a box that the scaled image must fit within.\n     * @param width The bounding box's width.\n     * @param height The bounding box's height.\n     * @returns The width and height of the image after being scaled.\n     */\n    PDFImage.prototype.scaleToFit = function (width, height) {\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var imgWidthScale = width / this.width;\n        var imgHeightScale = height / this.height;\n        var scale = Math.min(imgWidthScale, imgHeightScale);\n        return this.scale(scale);\n    };\n    /**\n     * Get the width and height of this image. For example:\n     * ```js\n     * const { width, height } = image.size()\n     * ```\n     * @returns The width and height of the image.\n     */\n    PDFImage.prototype.size = function () {\n        return this.scale(1);\n    };\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFDocument.save]] and [[PDFDocument.saveAsBase64]] methods will\n     * > automatically ensure all images get embedded.\n     *\n     * Embed this image in its document.\n     *\n     * @returns Resolves when the embedding is complete.\n     */\n    PDFImage.prototype.embed = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, doc, ref;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!this.embedder)\n                            return [2 /*return*/];\n                        // The image should only be embedded once. If there's a pending embed\n                        // operation then wait on it. Otherwise we need to start the embed.\n                        if (!this.embedTask) {\n                            _a = this, doc = _a.doc, ref = _a.ref;\n                            this.embedTask = this.embedder.embedIntoContext(doc.context, ref);\n                        }\n                        return [4 /*yield*/, this.embedTask];\n                    case 1:\n                        _b.sent();\n                        // We clear `this.embedder` so that the indirectly referenced image data\n                        // can be garbage collected, thus avoiding a memory leak.\n                        // See https://github.com/Hopding/pdf-lib/pull/1032/files.\n                        this.embedder = undefined;\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.embedPng]] and [[PDFDocument.embedJpg]]\n     * > methods, which will create instances of [[PDFImage]] for you.\n     *\n     * Create an instance of [[PDFImage]] from an existing ref and embedder\n     *\n     * @param ref The unique reference for this image.\n     * @param doc The document to which the image will belong.\n     * @param embedder The embedder that will be used to embed the image.\n     */\n    PDFImage.of = function (ref, doc, embedder) {\n        return new PDFImage(ref, doc, embedder);\n    };\n    return PDFImage;\n}());\nexport default PDFImage;\n//# sourceMappingURL=PDFImage.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport PDFDocument from \"../PDFDocument\";\nimport { colorToComponents, setFillingColor } from \"../colors\";\nimport { toDegrees, rotateRectangle, reduceRotation, adjustDimsForRotation, degrees, } from \"../rotations\";\nimport { PDFRef, PDFWidgetAnnotation, PDFName, MethodNotImplementedError, AcroFieldFlags, PDFAcroTerminal, AnnotationFlags, } from \"../../core\";\nimport { assertIs, assertMultiple, assertOrUndefined } from \"../../utils\";\nimport { ImageAlignment } from '../image';\nimport { drawImage, rotateInPlace } from '../operations';\nexport var assertFieldAppearanceOptions = function (options) {\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.x, 'options.x', ['number']);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.y, 'options.y', ['number']);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.width, 'options.width', ['number']);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.height, 'options.height', ['number']);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.textColor, 'options.textColor', [\n        [Object, 'Color'],\n    ]);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.backgroundColor, 'options.backgroundColor', [\n        [Object, 'Color'],\n    ]);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.borderColor, 'options.borderColor', [\n        [Object, 'Color'],\n    ]);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.borderWidth, 'options.borderWidth', ['number']);\n    assertOrUndefined(options === null || options === void 0 ? void 0 : options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n};\n/**\n * Represents a field of a [[PDFForm]].\n *\n * This class is effectively abstract. All fields in a [[PDFForm]] will\n * actually be an instance of a subclass of this class.\n *\n * Note that each field in a PDF is represented by a single field object.\n * However, a given field object may be rendered at multiple locations within\n * the document (across one or more pages). The rendering of a field is\n * controlled by its widgets. Each widget causes its field to be displayed at a\n * particular location in the document.\n *\n * Most of the time each field in a PDF has only a single widget, and thus is\n * only rendered once. However, if a field is rendered multiple times, it will\n * have multiple widgets - one for each location it is rendered.\n *\n * This abstraction of field objects and widgets is defined in the PDF\n * specification and dictates how PDF files store fields and where they are\n * to be rendered.\n */\nvar PDFField = /** @class */ (function () {\n    function PDFField(acroField, ref, doc) {\n        assertIs(acroField, 'acroField', [[PDFAcroTerminal, 'PDFAcroTerminal']]);\n        assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        this.acroField = acroField;\n        this.ref = ref;\n        this.doc = doc;\n    }\n    /**\n     * Get the fully qualified name of this field. For example:\n     * ```js\n     * const fields = form.getFields()\n     * fields.forEach(field => {\n     *   const name = field.getName()\n     *   console.log('Field name:', name)\n     * })\n     * ```\n     * Note that PDF fields are structured as a tree. Each field is the\n     * descendent of a series of ancestor nodes all the way up to the form node,\n     * which is always the root of the tree. Each node in the tree (except for\n     * the form node) has a partial name. Partial names can be composed of any\n     * unicode characters except a period (`.`). The fully qualified name of a\n     * field is composed of the partial names of all its ancestors joined\n     * with periods. This means that splitting the fully qualified name on\n     * periods and taking the last element of the resulting array will give you\n     * the partial name of a specific field.\n     * @returns The fully qualified name of this field.\n     */\n    PDFField.prototype.getName = function () {\n        var _a;\n        return (_a = this.acroField.getFullyQualifiedName()) !== null && _a !== void 0 ? _a : '';\n    };\n    /**\n     * Returns `true` if this field is read only. This means that PDF readers\n     * will not allow users to interact with the field or change its value. See\n     * [[PDFField.enableReadOnly]] and [[PDFField.disableReadOnly]].\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * if (field.isReadOnly()) console.log('Read only is enabled')\n     * ```\n     * @returns Whether or not this is a read only field.\n     */\n    PDFField.prototype.isReadOnly = function () {\n        return this.acroField.hasFlag(AcroFieldFlags.ReadOnly);\n    };\n    /**\n     * Prevent PDF readers from allowing users to interact with this field or\n     * change its value. The field will not respond to mouse or keyboard input.\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.enableReadOnly()\n     * ```\n     * Useful for fields whose values are computed, imported from a database, or\n     * prefilled by software before being displayed to the user.\n     */\n    PDFField.prototype.enableReadOnly = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.ReadOnly, true);\n    };\n    /**\n     * Allow users to interact with this field and change its value in PDF\n     * readers via mouse and keyboard input. For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.disableReadOnly()\n     * ```\n     */\n    PDFField.prototype.disableReadOnly = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.ReadOnly, false);\n    };\n    /**\n     * Returns `true` if this field must have a value when the form is submitted.\n     * See [[PDFField.enableRequired]] and [[PDFField.disableRequired]].\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * if (field.isRequired()) console.log('Field is required')\n     * ```\n     * @returns Whether or not this field is required.\n     */\n    PDFField.prototype.isRequired = function () {\n        return this.acroField.hasFlag(AcroFieldFlags.Required);\n    };\n    /**\n     * Require this field to have a value when the form is submitted.\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.enableRequired()\n     * ```\n     */\n    PDFField.prototype.enableRequired = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.Required, true);\n    };\n    /**\n     * Do not require this field to have a value when the form is submitted.\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.disableRequired()\n     * ```\n     */\n    PDFField.prototype.disableRequired = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.Required, false);\n    };\n    /**\n     * Returns `true` if this field's value should be exported when the form is\n     * submitted. See [[PDFField.enableExporting]] and\n     * [[PDFField.disableExporting]].\n     * For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * if (field.isExported()) console.log('Exporting is enabled')\n     * ```\n     * @returns Whether or not this field's value should be exported.\n     */\n    PDFField.prototype.isExported = function () {\n        return !this.acroField.hasFlag(AcroFieldFlags.NoExport);\n    };\n    /**\n     * Indicate that this field's value should be exported when the form is\n     * submitted in a PDF reader. For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.enableExporting()\n     * ```\n     */\n    PDFField.prototype.enableExporting = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.NoExport, false);\n    };\n    /**\n     * Indicate that this field's value should **not** be exported when the form\n     * is submitted in a PDF reader. For example:\n     * ```js\n     * const field = form.getField('some.field')\n     * field.disableExporting()\n     * ```\n     */\n    PDFField.prototype.disableExporting = function () {\n        this.acroField.setFlagTo(AcroFieldFlags.NoExport, true);\n    };\n    /** @ignore */\n    PDFField.prototype.needsAppearancesUpdate = function () {\n        throw new MethodNotImplementedError(this.constructor.name, 'needsAppearancesUpdate');\n    };\n    /** @ignore */\n    PDFField.prototype.defaultUpdateAppearances = function (_font) {\n        throw new MethodNotImplementedError(this.constructor.name, 'defaultUpdateAppearances');\n    };\n    PDFField.prototype.markAsDirty = function () {\n        this.doc.getForm().markFieldAsDirty(this.ref);\n    };\n    PDFField.prototype.markAsClean = function () {\n        this.doc.getForm().markFieldAsClean(this.ref);\n    };\n    PDFField.prototype.isDirty = function () {\n        return this.doc.getForm().fieldIsDirty(this.ref);\n    };\n    PDFField.prototype.createWidget = function (options) {\n        var _a;\n        var textColor = options.textColor;\n        var backgroundColor = options.backgroundColor;\n        var borderColor = options.borderColor;\n        var borderWidth = options.borderWidth;\n        var degreesAngle = toDegrees(options.rotate);\n        var caption = options.caption;\n        var x = options.x;\n        var y = options.y;\n        var width = options.width + borderWidth;\n        var height = options.height + borderWidth;\n        var hidden = Boolean(options.hidden);\n        var pageRef = options.page;\n        assertMultiple(degreesAngle, 'degreesAngle', 90);\n        // Create a widget for this field\n        var widget = PDFWidgetAnnotation.create(this.doc.context, this.ref);\n        // Set widget properties\n        var rect = rotateRectangle({ x: x, y: y, width: width, height: height }, borderWidth, degreesAngle);\n        widget.setRectangle(rect);\n        if (pageRef)\n            widget.setP(pageRef);\n        var ac = widget.getOrCreateAppearanceCharacteristics();\n        if (backgroundColor) {\n            ac.setBackgroundColor(colorToComponents(backgroundColor));\n        }\n        ac.setRotation(degreesAngle);\n        if (caption)\n            ac.setCaptions({ normal: caption });\n        if (borderColor)\n            ac.setBorderColor(colorToComponents(borderColor));\n        var bs = widget.getOrCreateBorderStyle();\n        if (borderWidth !== undefined)\n            bs.setWidth(borderWidth);\n        widget.setFlagTo(AnnotationFlags.Print, true);\n        widget.setFlagTo(AnnotationFlags.Hidden, hidden);\n        widget.setFlagTo(AnnotationFlags.Invisible, false);\n        // Set acrofield properties\n        if (textColor) {\n            var da = (_a = this.acroField.getDefaultAppearance()) !== null && _a !== void 0 ? _a : '';\n            var newDa = da + '\\n' + setFillingColor(textColor).toString();\n            this.acroField.setDefaultAppearance(newDa);\n        }\n        return widget;\n    };\n    PDFField.prototype.updateWidgetAppearanceWithFont = function (widget, font, _a) {\n        var normal = _a.normal, rollover = _a.rollover, down = _a.down;\n        this.updateWidgetAppearances(widget, {\n            normal: this.createAppearanceStream(widget, normal, font),\n            rollover: rollover && this.createAppearanceStream(widget, rollover, font),\n            down: down && this.createAppearanceStream(widget, down, font),\n        });\n    };\n    PDFField.prototype.updateOnOffWidgetAppearance = function (widget, onValue, _a) {\n        var normal = _a.normal, rollover = _a.rollover, down = _a.down;\n        this.updateWidgetAppearances(widget, {\n            normal: this.createAppearanceDict(widget, normal, onValue),\n            rollover: rollover && this.createAppearanceDict(widget, rollover, onValue),\n            down: down && this.createAppearanceDict(widget, down, onValue),\n        });\n    };\n    PDFField.prototype.updateWidgetAppearances = function (widget, _a) {\n        var normal = _a.normal, rollover = _a.rollover, down = _a.down;\n        widget.setNormalAppearance(normal);\n        if (rollover) {\n            widget.setRolloverAppearance(rollover);\n        }\n        else {\n            widget.removeRolloverAppearance();\n        }\n        if (down) {\n            widget.setDownAppearance(down);\n        }\n        else {\n            widget.removeDownAppearance();\n        }\n    };\n    // // TODO: Do we need to do this...?\n    // private foo(font: PDFFont, dict: PDFDict) {\n    //   if (!dict.lookup(PDFName.of('DR'))) {\n    //     dict.set(PDFName.of('DR'), dict.context.obj({}));\n    //   }\n    //   const DR = dict.lookup(PDFName.of('DR'), PDFDict);\n    //   if (!DR.lookup(PDFName.of('Font'))) {\n    //     DR.set(PDFName.of('Font'), dict.context.obj({}));\n    //   }\n    //   const Font = DR.lookup(PDFName.of('Font'), PDFDict);\n    //   Font.set(PDFName.of(font.name), font.ref);\n    // }\n    PDFField.prototype.createAppearanceStream = function (widget, appearance, font) {\n        var _a;\n        var context = this.acroField.dict.context;\n        var _b = widget.getRectangle(), width = _b.width, height = _b.height;\n        // TODO: Do we need to do this...?\n        // if (font) {\n        //   this.foo(font, widget.dict);\n        //   this.foo(font, this.doc.getForm().acroForm.dict);\n        // }\n        // END TODO\n        var Resources = font && { Font: (_a = {}, _a[font.name] = font.ref, _a) };\n        var stream = context.formXObject(appearance, {\n            Resources: Resources,\n            BBox: context.obj([0, 0, width, height]),\n            Matrix: context.obj([1, 0, 0, 1, 0, 0]),\n        });\n        var streamRef = context.register(stream);\n        return streamRef;\n    };\n    /**\n     * Create a FormXObject of the supplied image and add it to context.\n     * The FormXObject size is calculated based on the widget (including\n     * the alignment).\n     * @param widget The widget that should display the image.\n     * @param alignment The alignment of the image.\n     * @param image The image that should be displayed.\n     * @returns The ref for the FormXObject that was added to the context.\n     */\n    PDFField.prototype.createImageAppearanceStream = function (widget, image, alignment) {\n        // NOTE: This implementation doesn't handle image borders.\n        // NOTE: Acrobat seems to resize the image (maybe even skewing its aspect\n        //       ratio) to fit perfectly within the widget's rectangle. This method\n        //       does not currently do that. Should there be an option for that?\n        var _a;\n        var _b;\n        var context = this.acroField.dict.context;\n        var rectangle = widget.getRectangle();\n        var ap = widget.getAppearanceCharacteristics();\n        var bs = widget.getBorderStyle();\n        var borderWidth = (_b = bs === null || bs === void 0 ? void 0 : bs.getWidth()) !== null && _b !== void 0 ? _b : 0;\n        var rotation = reduceRotation(ap === null || ap === void 0 ? void 0 : ap.getRotation());\n        var rotate = rotateInPlace(__assign(__assign({}, rectangle), { rotation: rotation }));\n        var adj = adjustDimsForRotation(rectangle, rotation);\n        var imageDims = image.scaleToFit(adj.width - borderWidth * 2, adj.height - borderWidth * 2);\n        // Support borders on images and maybe other properties\n        var options = {\n            x: borderWidth,\n            y: borderWidth,\n            width: imageDims.width,\n            height: imageDims.height,\n            //\n            rotate: degrees(0),\n            xSkew: degrees(0),\n            ySkew: degrees(0),\n        };\n        if (alignment === ImageAlignment.Center) {\n            options.x += (adj.width - borderWidth * 2) / 2 - imageDims.width / 2;\n            options.y += (adj.height - borderWidth * 2) / 2 - imageDims.height / 2;\n        }\n        else if (alignment === ImageAlignment.Right) {\n            options.x = adj.width - borderWidth - imageDims.width;\n            options.y = adj.height - borderWidth - imageDims.height;\n        }\n        var imageName = this.doc.context.addRandomSuffix('Image', 10);\n        var appearance = __spreadArrays(rotate, drawImage(imageName, options));\n        ////////////\n        var Resources = { XObject: (_a = {}, _a[imageName] = image.ref, _a) };\n        var stream = context.formXObject(appearance, {\n            Resources: Resources,\n            BBox: context.obj([0, 0, rectangle.width, rectangle.height]),\n            Matrix: context.obj([1, 0, 0, 1, 0, 0]),\n        });\n        return context.register(stream);\n    };\n    PDFField.prototype.createAppearanceDict = function (widget, appearance, onValue) {\n        var context = this.acroField.dict.context;\n        var onStreamRef = this.createAppearanceStream(widget, appearance.on);\n        var offStreamRef = this.createAppearanceStream(widget, appearance.off);\n        var appearanceDict = context.obj({});\n        appearanceDict.set(onValue, onStreamRef);\n        appearanceDict.set(PDFName.of('Off'), offStreamRef);\n        return appearanceDict;\n    };\n    return PDFField;\n}());\nexport default PDFField;\n//# sourceMappingURL=PDFField.js.map","export var StandardFonts;\n(function (StandardFonts) {\n    StandardFonts[\"Courier\"] = \"Courier\";\n    StandardFonts[\"CourierBold\"] = \"Courier-Bold\";\n    StandardFonts[\"CourierOblique\"] = \"Courier-Oblique\";\n    StandardFonts[\"CourierBoldOblique\"] = \"Courier-BoldOblique\";\n    StandardFonts[\"Helvetica\"] = \"Helvetica\";\n    StandardFonts[\"HelveticaBold\"] = \"Helvetica-Bold\";\n    StandardFonts[\"HelveticaOblique\"] = \"Helvetica-Oblique\";\n    StandardFonts[\"HelveticaBoldOblique\"] = \"Helvetica-BoldOblique\";\n    StandardFonts[\"TimesRoman\"] = \"Times-Roman\";\n    StandardFonts[\"TimesRomanBold\"] = \"Times-Bold\";\n    StandardFonts[\"TimesRomanItalic\"] = \"Times-Italic\";\n    StandardFonts[\"TimesRomanBoldItalic\"] = \"Times-BoldItalic\";\n    StandardFonts[\"Symbol\"] = \"Symbol\";\n    StandardFonts[\"ZapfDingbats\"] = \"ZapfDingbats\";\n})(StandardFonts || (StandardFonts = {}));\n//# sourceMappingURL=StandardFonts.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport { normalizeAppearance, defaultCheckBoxAppearanceProvider, } from \"./appearances\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { PDFName, PDFDict, PDFAcroCheckBox, } from \"../../core\";\nimport { assertIs, assertOrUndefined } from \"../../utils\";\n/**\n * Represents a check box field of a [[PDFForm]].\n *\n * [[PDFCheckBox]] fields are interactive boxes that users can click with their\n * mouse. This type of [[PDFField]] has two states: `on` and `off`. The purpose\n * of a check box is to enable users to select from one or more options, where\n * each option is represented by a single check box. Check boxes are typically\n * square in shape and display a check mark when they are in the `on` state.\n */\nvar PDFCheckBox = /** @class */ (function (_super) {\n    __extends(PDFCheckBox, _super);\n    function PDFCheckBox(acroCheckBox, ref, doc) {\n        var _this = _super.call(this, acroCheckBox, ref, doc) || this;\n        assertIs(acroCheckBox, 'acroCheckBox', [\n            [PDFAcroCheckBox, 'PDFAcroCheckBox'],\n        ]);\n        _this.acroField = acroCheckBox;\n        return _this;\n    }\n    /**\n     * Mark this check box. This operation is analogous to a human user clicking\n     * a check box to fill it in a PDF reader. This method will update the\n     * underlying state of the check box field to indicate it has been selected.\n     * PDF libraries and readers will be able to extract this value from the\n     * saved document and determine that it was selected.\n     *\n     * For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * checkBox.check()\n     * ```\n     *\n     * This method will mark this check box as dirty, causing its appearance\n     * streams to be updated when either [[PDFDocument.save]] or\n     * [[PDFForm.updateFieldAppearances]] is called. The updated appearance\n     * streams will display a check mark inside the widgets of this check box\n     * field.\n     */\n    PDFCheckBox.prototype.check = function () {\n        var _a;\n        var onValue = (_a = this.acroField.getOnValue()) !== null && _a !== void 0 ? _a : PDFName.of('Yes');\n        this.markAsDirty();\n        this.acroField.setValue(onValue);\n    };\n    /**\n     * Clears this check box. This operation is analogous to a human user clicking\n     * a check box to unmark it in a PDF reader. This method will update the\n     * underlying state of the check box field to indicate it has been deselected.\n     * PDF libraries and readers will be able to extract this value from the\n     * saved document and determine that it was not selected.\n     *\n     * For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * checkBox.uncheck()\n     * ```\n     *\n     * This method will mark this check box as dirty. See [[PDFCheckBox.check]]\n     * for more details about what this means.\n     */\n    PDFCheckBox.prototype.uncheck = function () {\n        this.markAsDirty();\n        this.acroField.setValue(PDFName.of('Off'));\n    };\n    /**\n     * Returns `true` if this check box is selected (either by a human user via\n     * a PDF reader, or else programmatically via software). For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * if (checkBox.isChecked()) console.log('check box is selected')\n     * ```\n     * @returns Whether or not this check box is selected.\n     */\n    PDFCheckBox.prototype.isChecked = function () {\n        var onValue = this.acroField.getOnValue();\n        return !!onValue && onValue === this.acroField.getValue();\n    };\n    /**\n     * Show this check box on the specified page. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const checkBox = form.createCheckBox('some.checkBox.field')\n     *\n     * checkBox.addToPage(page, {\n     *   x: 50,\n     *   y: 75,\n     *   width: 25,\n     *   height: 25,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     * })\n     * ```\n     * This will create a new widget for this check box field.\n     * @param page The page to which this check box widget should be added.\n     * @param options The options to be used when adding this check box widget.\n     */\n    PDFCheckBox.prototype.addToPage = function (page, options) {\n        var _a, _b, _c, _d, _e, _f;\n        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        if (!options)\n            options = {};\n        if (!('textColor' in options))\n            options.textColor = rgb(0, 0, 0);\n        if (!('backgroundColor' in options))\n            options.backgroundColor = rgb(1, 1, 1);\n        if (!('borderColor' in options))\n            options.borderColor = rgb(0, 0, 0);\n        if (!('borderWidth' in options))\n            options.borderWidth = 1;\n        // Create a widget for this check box\n        var widget = this.createWidget({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : 0,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : 0,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : 50,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : 50,\n            textColor: options.textColor,\n            backgroundColor: options.backgroundColor,\n            borderColor: options.borderColor,\n            borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0,\n            rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0),\n            hidden: options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        this.acroField.addWidget(widgetRef);\n        // Set appearance streams for widget\n        widget.setAppearanceState(PDFName.of('Off'));\n        this.updateWidgetAppearance(widget, PDFName.of('Yes'));\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if any of this check box's widgets do not have an\n     * appearance stream for its current state. For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * if (checkBox.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this check box needs an appearance update.\n     */\n    PDFCheckBox.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var state = widget.getAppearanceState();\n            var normal = (_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal;\n            if (!(normal instanceof PDFDict))\n                return true;\n            if (state && !normal.has(state))\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this check box's widgets using\n     * the default appearance provider for check boxes. For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * checkBox.defaultUpdateAppearances()\n     * ```\n     */\n    PDFCheckBox.prototype.defaultUpdateAppearances = function () {\n        this.updateAppearances();\n    };\n    /**\n     * Update the appearance streams for each of this check box's widgets using\n     * the given appearance provider. If no `provider` is passed, the default\n     * appearance provider for check boxs will be used. For example:\n     * ```js\n     * const checkBox = form.getCheckBox('some.checkBox.field')\n     * checkBox.updateAppearances((field, widget) => {\n     *   ...\n     *   return {\n     *     normal: { on: drawCheckBox(...), off: drawCheckBox(...) },\n     *     down: { on: drawCheckBox(...), off: drawCheckBox(...) },\n     *   }\n     * })\n     * ```\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFCheckBox.prototype.updateAppearances = function (provider) {\n        var _a;\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var onValue = (_a = widget.getOnValue()) !== null && _a !== void 0 ? _a : PDFName.of('Yes');\n            if (!onValue)\n                continue;\n            this.updateWidgetAppearance(widget, onValue, provider);\n        }\n        this.markAsClean();\n    };\n    PDFCheckBox.prototype.updateWidgetAppearance = function (widget, onValue, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultCheckBoxAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget));\n        this.updateOnOffWidgetAppearance(widget, onValue, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getCheckBox]] method, which will create an\n     * > instance of [[PDFCheckBox]] for you.\n     *\n     * Create an instance of [[PDFCheckBox]] from an existing acroCheckBox and ref\n     *\n     * @param acroCheckBox The underlying `PDFAcroCheckBox` for this check box.\n     * @param ref The unique reference for this check box.\n     * @param doc The document to which this check box will belong.\n     */\n    PDFCheckBox.of = function (acroCheckBox, ref, doc) {\n        return new PDFCheckBox(acroCheckBox, ref, doc);\n    };\n    return PDFCheckBox;\n}(PDFField));\nexport default PDFCheckBox;\n//# sourceMappingURL=PDFCheckBox.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport PDFFont from \"../PDFFont\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { normalizeAppearance, defaultDropdownAppearanceProvider, } from \"./appearances\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport { PDFHexString, PDFStream, PDFAcroComboBox, AcroChoiceFlags, } from \"../../core\";\nimport { assertIs, assertOrUndefined, assertPositive } from \"../../utils\";\n/**\n * Represents a dropdown field of a [[PDFForm]].\n *\n * [[PDFDropdown]] fields are interactive text boxes that display a single\n * element (the currently selected value). The purpose of a dropdown is to\n * enable users to select a single option from a set of possible options. Users\n * can click on a dropdown to view the full list of options it provides.\n * Clicking on an option in the list will cause it to be selected and displayed\n * in the dropdown's text box. Some dropdowns allow users to enter text\n * directly into the box from their keyboard, rather than only being allowed to\n * choose an option from the list (see [[PDFDropdown.isEditable]]).\n */\nvar PDFDropdown = /** @class */ (function (_super) {\n    __extends(PDFDropdown, _super);\n    function PDFDropdown(acroComboBox, ref, doc) {\n        var _this = _super.call(this, acroComboBox, ref, doc) || this;\n        assertIs(acroComboBox, 'acroComboBox', [\n            [PDFAcroComboBox, 'PDFAcroComboBox'],\n        ]);\n        _this.acroField = acroComboBox;\n        return _this;\n    }\n    /**\n     * Get the list of available options for this dropdown. These options will be\n     * displayed to users who click on this dropdown in a PDF reader.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * const options = dropdown.getOptions()\n     * console.log('Dropdown options:', options)\n     * ```\n     * @returns The options for this dropdown.\n     */\n    PDFDropdown.prototype.getOptions = function () {\n        var rawOptions = this.acroField.getOptions();\n        var options = new Array(rawOptions.length);\n        for (var idx = 0, len = options.length; idx < len; idx++) {\n            var _a = rawOptions[idx], display = _a.display, value = _a.value;\n            options[idx] = (display !== null && display !== void 0 ? display : value).decodeText();\n        }\n        return options;\n    };\n    /**\n     * Get the selected options for this dropdown. These are the values that were\n     * selected by a human user via a PDF reader, or programatically via\n     * software.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * const selections = dropdown.getSelected()\n     * console.log('Dropdown selections:', selections)\n     * ```\n     * > **NOTE:** Note that PDF readers only display one selected option when\n     * > rendering dropdowns. However, the PDF specification does allow for\n     * > multiple values to be selected in a dropdown. As such, the `pdf-lib`\n     * > API supports this. However, in most cases the array returned by this\n     * > method will contain only a single element (or no elements).\n     * @returns The selected options in this dropdown.\n     */\n    PDFDropdown.prototype.getSelected = function () {\n        var values = this.acroField.getValues();\n        var selected = new Array(values.length);\n        for (var idx = 0, len = values.length; idx < len; idx++) {\n            selected[idx] = values[idx].decodeText();\n        }\n        return selected;\n    };\n    /**\n     * Set the list of options that are available for this dropdown. These are\n     * the values that will be available for users to select when they view this\n     * dropdown in a PDF reader. Note that preexisting options for this dropdown\n     * will be removed. Only the values passed as `options` will be available to\n     * select.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('planets.dropdown')\n     * dropdown.setOptions(['Earth', 'Mars', 'Pluto', 'Venus'])\n     * ```\n     * @param options The options that should be available in this dropdown.\n     */\n    PDFDropdown.prototype.setOptions = function (options) {\n        assertIs(options, 'options', [Array]);\n        var optionObjects = new Array(options.length);\n        for (var idx = 0, len = options.length; idx < len; idx++) {\n            optionObjects[idx] = { value: PDFHexString.fromText(options[idx]) };\n        }\n        this.acroField.setOptions(optionObjects);\n    };\n    /**\n     * Add to the list of options that are available for this dropdown. Users\n     * will be able to select these values in a PDF reader. In addition to the\n     * values passed as `options`, any preexisting options for this dropdown will\n     * still be available for users to select.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('rockets.dropdown')\n     * dropdown.addOptions(['Saturn IV', 'Falcon Heavy'])\n     * ```\n     * @param options New options that should be available in this dropdown.\n     */\n    PDFDropdown.prototype.addOptions = function (options) {\n        assertIs(options, 'options', ['string', Array]);\n        var optionsArr = Array.isArray(options) ? options : [options];\n        var existingOptions = this.acroField.getOptions();\n        var newOptions = new Array(optionsArr.length);\n        for (var idx = 0, len = optionsArr.length; idx < len; idx++) {\n            newOptions[idx] = { value: PDFHexString.fromText(optionsArr[idx]) };\n        }\n        this.acroField.setOptions(existingOptions.concat(newOptions));\n    };\n    /**\n     * Select one or more values for this dropdown. This operation is analogous\n     * to a human user opening the dropdown in a PDF reader and clicking on a\n     * value to select it. This method will update the underlying state of the\n     * dropdown to indicate which values have been selected. PDF libraries and\n     * readers will be able to extract these values from the saved document and\n     * determine which values were selected.\n     *\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('best.superhero.dropdown')\n     * dropdown.select('One Punch Man')\n     * ```\n     *\n     * This method will mark this dropdown as dirty, causing its appearance\n     * streams to be updated when either [[PDFDocument.save]] or\n     * [[PDFForm.updateFieldAppearances]] is called. The updated streams will\n     * display the selected option inside the widgets of this dropdown.\n     *\n     * **IMPORTANT:** The default font used to update appearance streams is\n     * [[StandardFonts.Helvetica]]. Note that this is a WinAnsi font. This means\n     * that encoding errors will be thrown if the selected option for this field\n     * contains characters outside the WinAnsi character set (the latin alphabet).\n     *\n     * Embedding a custom font and passing it to\n     * [[PDFForm.updateFieldAppearances]] or [[PDFDropdown.updateAppearances]]\n     * allows you to generate appearance streams with characters outside the\n     * latin alphabet (assuming the custom font supports them).\n     *\n     * Selecting an option that does not exist in this dropdown's option list\n     * (see [[PDFDropdown.getOptions]]) will enable editing on this dropdown\n     * (see [[PDFDropdown.enableEditing]]).\n     *\n     * > **NOTE:** PDF readers only display one selected option when rendering\n     * > dropdowns. However, the PDF specification does allow for multiple values\n     * > to be selected in a dropdown. As such, the `pdf-lib` API supports this.\n     * > However, it is not recommended to select more than one value with this\n     * > method, as only one will be visible. [[PDFOptionList]] fields are better\n     * > suited for displaying multiple selected values.\n     *\n     * @param options The options to be selected.\n     * @param merge Whether or not existing selections should be preserved.\n     */\n    PDFDropdown.prototype.select = function (options, merge) {\n        if (merge === void 0) { merge = false; }\n        assertIs(options, 'options', ['string', Array]);\n        assertIs(merge, 'merge', ['boolean']);\n        var optionsArr = Array.isArray(options) ? options : [options];\n        var validOptions = this.getOptions();\n        var hasCustomOption = optionsArr.find(function (option) { return !validOptions.includes(option); });\n        if (hasCustomOption)\n            this.enableEditing();\n        this.markAsDirty();\n        if (optionsArr.length > 1 || (optionsArr.length === 1 && merge)) {\n            this.enableMultiselect();\n        }\n        var values = new Array(optionsArr.length);\n        for (var idx = 0, len = optionsArr.length; idx < len; idx++) {\n            values[idx] = PDFHexString.fromText(optionsArr[idx]);\n        }\n        if (merge) {\n            var existingValues = this.acroField.getValues();\n            this.acroField.setValues(existingValues.concat(values));\n        }\n        else {\n            this.acroField.setValues(values);\n        }\n    };\n    /**\n     * Clear all selected values for this dropdown. This operation is equivalent\n     * to selecting an empty list. This method will update the underlying state\n     * of the dropdown to indicate that no values have been selected.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.clear()\n     * ```\n     * This method will mark this text field as dirty. See [[PDFDropdown.select]]\n     * for more details about what this means.\n     */\n    PDFDropdown.prototype.clear = function () {\n        this.markAsDirty();\n        this.acroField.setValues([]);\n    };\n    /**\n     * Set the font size for this field. Larger font sizes will result in larger\n     * text being displayed when PDF readers render this dropdown. Font sizes may\n     * be integer or floating point numbers. Supplying a negative font size will\n     * cause this method to throw an error.\n     *\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.setFontSize(4)\n     * dropdown.setFontSize(15.7)\n     * ```\n     *\n     * > This method depends upon the existence of a default appearance\n     * > (`/DA`) string. If this field does not have a default appearance string,\n     * > or that string does not contain a font size (via the `Tf` operator),\n     * > then this method will throw an error.\n     *\n     * @param fontSize The font size to be used when rendering text in this field.\n     */\n    PDFDropdown.prototype.setFontSize = function (fontSize) {\n        assertPositive(fontSize, 'fontSize');\n        this.acroField.setFontSize(fontSize);\n        this.markAsDirty();\n    };\n    /**\n     * Returns `true` if users are allowed to edit the selected value of this\n     * dropdown directly and are not constrained by the list of available\n     * options. See [[PDFDropdown.enableEditing]] and\n     * [[PDFDropdown.disableEditing]]. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.isEditable()) console.log('Editing is enabled')\n     * ```\n     * @returns Whether or not this dropdown is editable.\n     */\n    PDFDropdown.prototype.isEditable = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.Edit);\n    };\n    /**\n     * Allow users to edit the selected value of this dropdown in PDF readers\n     * with their keyboard. This means that the selected value of this dropdown\n     * will not be constrained by the list of available options. However, if this\n     * dropdown has any available options, users will still be allowed to select\n     * from that list.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.enableEditing()\n     * ```\n     */\n    PDFDropdown.prototype.enableEditing = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Edit, true);\n    };\n    /**\n     * Do not allow users to edit the selected value of this dropdown in PDF\n     * readers with their keyboard. This will constrain the selected value of\n     * this dropdown to the list of available options. Users will only be able\n     * to select an option from that list.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.disableEditing()\n     * ```\n     */\n    PDFDropdown.prototype.disableEditing = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Edit, false);\n    };\n    /**\n     * Returns `true` if the option list of this dropdown is always displayed\n     * in alphabetical order, irrespective of the order in which the options\n     * were added to the dropdown. See [[PDFDropdown.enableSorting]] and\n     * [[PDFDropdown.disableSorting]]. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.isSorted()) console.log('Sorting is enabled')\n     * ```\n     * @returns Whether or not this dropdown's options are sorted.\n     */\n    PDFDropdown.prototype.isSorted = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.Sort);\n    };\n    /**\n     * Always display the option list of this dropdown in alphabetical order,\n     * irrespective of the order in which the options were added to this dropdown.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.enableSorting()\n     * ```\n     */\n    PDFDropdown.prototype.enableSorting = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Sort, true);\n    };\n    /**\n     * Do not always display the option list of this dropdown in alphabetical\n     * order. Instead, display the options in whichever order they were added\n     * to the list. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.disableSorting()\n     * ```\n     */\n    PDFDropdown.prototype.disableSorting = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Sort, false);\n    };\n    /**\n     * Returns `true` if multiple options can be selected from this dropdown's\n     * option list. See [[PDFDropdown.enableMultiselect]] and\n     * [[PDFDropdown.disableMultiselect]]. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.isMultiselect()) console.log('Multiselect is enabled')\n     * ```\n     * @returns Whether or not multiple options can be selected.\n     */\n    PDFDropdown.prototype.isMultiselect = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.MultiSelect);\n    };\n    /**\n     * Allow users to select more than one option from this dropdown's option\n     * list. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.enableMultiselect()\n     * ```\n     */\n    PDFDropdown.prototype.enableMultiselect = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, true);\n    };\n    /**\n     * Do not allow users to select more than one option from this dropdown's\n     * option list. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.disableMultiselect()\n     * ```\n     */\n    PDFDropdown.prototype.disableMultiselect = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, false);\n    };\n    /**\n     * Returns `true` if the selected option should be spell checked by PDF\n     * readers. Spell checking will only be performed if this dropdown allows\n     * editing (see [[PDFDropdown.isEditable]]). See\n     * [[PDFDropdown.enableSpellChecking]] and\n     * [[PDFDropdown.disableSpellChecking]]. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.isSpellChecked()) console.log('Spell checking is enabled')\n     * ```\n     * @returns Whether or not this dropdown can be spell checked.\n     */\n    PDFDropdown.prototype.isSpellChecked = function () {\n        return !this.acroField.hasFlag(AcroChoiceFlags.DoNotSpellCheck);\n    };\n    /**\n     * Allow PDF readers to spell check the selected option of this dropdown.\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.enableSpellChecking()\n     * ```\n     */\n    PDFDropdown.prototype.enableSpellChecking = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.DoNotSpellCheck, false);\n    };\n    /**\n     * Do not allow PDF readers to spell check the selected option of this\n     * dropdown. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.disableSpellChecking()\n     * ```\n     */\n    PDFDropdown.prototype.disableSpellChecking = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.DoNotSpellCheck, true);\n    };\n    /**\n     * Returns `true` if the option selected by a user is stored, or \"committed\",\n     * when the user clicks the option. The alternative is that the user's\n     * selection is stored when the user leaves this dropdown field (by clicking\n     * outside of it - on another field, for example). See\n     * [[PDFDropdown.enableSelectOnClick]] and\n     * [[PDFDropdown.disableSelectOnClick]]. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.isSelectOnClick()) console.log('Select on click is enabled')\n     * ```\n     * @returns Whether or not options are selected immediately after they are\n     *          clicked.\n     */\n    PDFDropdown.prototype.isSelectOnClick = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.CommitOnSelChange);\n    };\n    /**\n     * Store the option selected by a user immediately after the user clicks the\n     * option. Do not wait for the user to leave this dropdown field (by clicking\n     * outside of it - on another field, for example). For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.enableSelectOnClick()\n     * ```\n     */\n    PDFDropdown.prototype.enableSelectOnClick = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, true);\n    };\n    /**\n     * Wait to store the option selected by a user until they leave this dropdown\n     * field (by clicking outside of it - on another field, for example).\n     * For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.disableSelectOnClick()\n     * ```\n     */\n    PDFDropdown.prototype.disableSelectOnClick = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, false);\n    };\n    /**\n     * Show this dropdown on the specified page. For example:\n     * ```js\n     * const ubuntuFont = await pdfDoc.embedFont(ubuntuFontBytes)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const dropdown = form.createDropdown('best.gundam')\n     * dropdown.setOptions(['Exia', 'Dynames'])\n     * dropdown.select('Exia')\n     *\n     * dropdown.addToPage(page, {\n     *   x: 50,\n     *   y: 75,\n     *   width: 200,\n     *   height: 100,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     *   font: ubuntuFont,\n     * })\n     * ```\n     * This will create a new widget for this dropdown field.\n     * @param page The page to which this dropdown widget should be added.\n     * @param options The options to be used when adding this dropdown widget.\n     */\n    PDFDropdown.prototype.addToPage = function (page, options) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        if (!options)\n            options = {};\n        if (!('textColor' in options))\n            options.textColor = rgb(0, 0, 0);\n        if (!('backgroundColor' in options))\n            options.backgroundColor = rgb(1, 1, 1);\n        if (!('borderColor' in options))\n            options.borderColor = rgb(0, 0, 0);\n        if (!('borderWidth' in options))\n            options.borderWidth = 1;\n        // Create a widget for this dropdown\n        var widget = this.createWidget({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : 0,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : 0,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : 200,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : 50,\n            textColor: options.textColor,\n            backgroundColor: options.backgroundColor,\n            borderColor: options.borderColor,\n            borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0,\n            rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0),\n            hidden: options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        this.acroField.addWidget(widgetRef);\n        // Set appearance streams for widget\n        var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont();\n        this.updateWidgetAppearance(widget, font);\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if this dropdown has been marked as dirty, or if any of\n     * this dropdown's widgets do not have an appearance stream. For example:\n     * ```js\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * if (dropdown.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this dropdown needs an appearance update.\n     */\n    PDFDropdown.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        if (this.isDirty())\n            return true;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream;\n            if (!hasAppearances)\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this dropdown's widgets using\n     * the default appearance provider for dropdowns. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.defaultUpdateAppearances(helvetica)\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     */\n    PDFDropdown.prototype.defaultUpdateAppearances = function (font) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        this.updateAppearances(font);\n    };\n    /**\n     * Update the appearance streams for each of this dropdown's widgets using\n     * the given appearance provider. If no `provider` is passed, the default\n     * appearance provider for dropdowns will be used. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const dropdown = form.getDropdown('some.dropdown.field')\n     * dropdown.updateAppearances(helvetica, (field, widget, font) => {\n     *   ...\n     *   return drawTextField(...)\n     * })\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFDropdown.prototype.updateAppearances = function (font, provider) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            this.updateWidgetAppearance(widget, font, provider);\n        }\n        this.markAsClean();\n    };\n    // getOption(index: number): string {}\n    // getSelectedIndices(): number[] {}\n    // removeOptions(option: string | string[]) {}\n    // removeIndices(option: number[]) {}\n    // deselect(options: string | string[]) {}\n    // deselectIndices(optionIndices: number[]) {}\n    PDFDropdown.prototype.updateWidgetAppearance = function (widget, font, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultDropdownAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget, font));\n        this.updateWidgetAppearanceWithFont(widget, font, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getDropdown]] method, which will create an\n     * > instance of [[PDFDropdown]] for you.\n     *\n     * Create an instance of [[PDFDropdown]] from an existing acroComboBox and ref\n     *\n     * @param acroComboBox The underlying `PDFAcroComboBox` for this dropdown.\n     * @param ref The unique reference for this dropdown.\n     * @param doc The document to which this dropdown will belong.\n     */\n    PDFDropdown.of = function (acroComboBox, ref, doc) {\n        return new PDFDropdown(acroComboBox, ref, doc);\n    };\n    return PDFDropdown;\n}(PDFField));\nexport default PDFDropdown;\n//# sourceMappingURL=PDFDropdown.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport PDFFont from \"../PDFFont\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { normalizeAppearance, defaultOptionListAppearanceProvider, } from \"./appearances\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport { PDFHexString, PDFStream, PDFAcroListBox, AcroChoiceFlags, } from \"../../core\";\nimport { assertIs, assertIsSubset, assertOrUndefined, assertPositive, } from \"../../utils\";\n/**\n * Represents an option list field of a [[PDFForm]].\n *\n * [[PDFOptionList]] fields are interactive lists of options. The purpose of an\n * option list is to enable users to select one or more options from a set of\n * possible options. Users are able to see the full set of options without\n * first having to click on the field (though scrolling may be necessary).\n * Clicking an option in the list will cause it to be selected and displayed\n * with a highlighted background. Some option lists allow users to select\n * more than one option (see [[PDFOptionList.isMultiselect]]).\n */\nvar PDFOptionList = /** @class */ (function (_super) {\n    __extends(PDFOptionList, _super);\n    function PDFOptionList(acroListBox, ref, doc) {\n        var _this = _super.call(this, acroListBox, ref, doc) || this;\n        assertIs(acroListBox, 'acroListBox', [[PDFAcroListBox, 'PDFAcroListBox']]);\n        _this.acroField = acroListBox;\n        return _this;\n    }\n    /**\n     * Get the list of available options for this option list. These options will\n     * be displayed to users who view this option list in a PDF reader.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * const options = optionList.getOptions()\n     * console.log('Option List options:', options)\n     * ```\n     * @returns The options for this option list.\n     */\n    PDFOptionList.prototype.getOptions = function () {\n        var rawOptions = this.acroField.getOptions();\n        var options = new Array(rawOptions.length);\n        for (var idx = 0, len = options.length; idx < len; idx++) {\n            var _a = rawOptions[idx], display = _a.display, value = _a.value;\n            options[idx] = (display !== null && display !== void 0 ? display : value).decodeText();\n        }\n        return options;\n    };\n    /**\n     * Get the selected options for this option list. These are the values that\n     * were selected by a human user via a PDF reader, or programatically via\n     * software.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * const selections = optionList.getSelected()\n     * console.log('Option List selections:', selections)\n     * ```\n     * @returns The selected options for this option list.\n     */\n    PDFOptionList.prototype.getSelected = function () {\n        var values = this.acroField.getValues();\n        var selected = new Array(values.length);\n        for (var idx = 0, len = values.length; idx < len; idx++) {\n            selected[idx] = values[idx].decodeText();\n        }\n        return selected;\n    };\n    /**\n     * Set the list of options that are available for this option list. These are\n     * the values that will be available for users to select when they view this\n     * option list in a PDF reader. Note that preexisting options for this\n     * option list will be removed. Only the values passed as `options` will be\n     * available to select.\n     *\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('planets.optionList')\n     * optionList.setOptions(['Earth', 'Mars', 'Pluto', 'Venus'])\n     * ```\n     *\n     * This method will mark this option list as dirty, causing its appearance\n     * streams to be updated when either [[PDFDocument.save]] or\n     * [[PDFForm.updateFieldAppearances]] is called. The updated streams will\n     * display the options this field contains inside the widgets of this text\n     * field (with selected options highlighted).\n     *\n     * **IMPORTANT:** The default font used to update appearance streams is\n     * [[StandardFonts.Helvetica]]. Note that this is a WinAnsi font. This means\n     * that encoding errors will be thrown if this field contains any options\n     * with characters outside the WinAnsi character set (the latin alphabet).\n     *\n     * Embedding a custom font and passing it to\n     * [[PDFForm.updateFieldAppearances]] or [[PDFOptionList.updateAppearances]]\n     * allows you to generate appearance streams with characters outside the\n     * latin alphabet (assuming the custom font supports them).\n     *\n     * @param options The options that should be available in this option list.\n     */\n    PDFOptionList.prototype.setOptions = function (options) {\n        assertIs(options, 'options', [Array]);\n        this.markAsDirty();\n        var optionObjects = new Array(options.length);\n        for (var idx = 0, len = options.length; idx < len; idx++) {\n            optionObjects[idx] = { value: PDFHexString.fromText(options[idx]) };\n        }\n        this.acroField.setOptions(optionObjects);\n    };\n    /**\n     * Add to the list of options that are available for this option list. Users\n     * will be able to select these values in a PDF reader. In addition to the\n     * values passed as `options`, any preexisting options for this option list\n     * will still be available for users to select.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('rockets.optionList')\n     * optionList.addOptions(['Saturn IV', 'Falcon Heavy'])\n     * ```\n     * This method will mark this option list as dirty. See\n     * [[PDFOptionList.setOptions]] for more details about what this means.\n     * @param options New options that should be available in this option list.\n     */\n    PDFOptionList.prototype.addOptions = function (options) {\n        assertIs(options, 'options', ['string', Array]);\n        this.markAsDirty();\n        var optionsArr = Array.isArray(options) ? options : [options];\n        var existingOptions = this.acroField.getOptions();\n        var newOptions = new Array(optionsArr.length);\n        for (var idx = 0, len = optionsArr.length; idx < len; idx++) {\n            newOptions[idx] = { value: PDFHexString.fromText(optionsArr[idx]) };\n        }\n        this.acroField.setOptions(existingOptions.concat(newOptions));\n    };\n    /**\n     * Select one or more values for this option list. This operation is analogous\n     * to a human user opening the option list in a PDF reader and clicking on one\n     * or more values to select them. This method will update the underlying state\n     * of the option list to indicate which values have been selected. PDF\n     * libraries and readers will be able to extract these values from the saved\n     * document and determine which values were selected.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('best.superheroes.optionList')\n     * optionList.select(['One Punch Man', 'Iron Man'])\n     * ```\n     * This method will mark this option list as dirty. See\n     * [[PDFOptionList.setOptions]] for more details about what this means.\n     * @param options The options to be selected.\n     * @param merge Whether or not existing selections should be preserved.\n     */\n    PDFOptionList.prototype.select = function (options, merge) {\n        if (merge === void 0) { merge = false; }\n        assertIs(options, 'options', ['string', Array]);\n        assertIs(merge, 'merge', ['boolean']);\n        var optionsArr = Array.isArray(options) ? options : [options];\n        var validOptions = this.getOptions();\n        assertIsSubset(optionsArr, 'option', validOptions);\n        this.markAsDirty();\n        if (optionsArr.length > 1 || (optionsArr.length === 1 && merge)) {\n            this.enableMultiselect();\n        }\n        var values = new Array(optionsArr.length);\n        for (var idx = 0, len = optionsArr.length; idx < len; idx++) {\n            values[idx] = PDFHexString.fromText(optionsArr[idx]);\n        }\n        if (merge) {\n            var existingValues = this.acroField.getValues();\n            this.acroField.setValues(existingValues.concat(values));\n        }\n        else {\n            this.acroField.setValues(values);\n        }\n    };\n    /**\n     * Clear all selected values for this option list. This operation is\n     * equivalent to selecting an empty list. This method will update the\n     * underlying state of the option list to indicate that no values have been\n     * selected.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.clear()\n     * ```\n     * This method will mark this option list as dirty. See\n     * [[PDFOptionList.setOptions]] for more details about what this means.\n     */\n    PDFOptionList.prototype.clear = function () {\n        this.markAsDirty();\n        this.acroField.setValues([]);\n    };\n    /**\n     * Set the font size for the text in this field. There needs to be a\n     * default appearance string (DA) set with a font value specified\n     * for this to work. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.setFontSize(4);\n     * ```\n     * @param fontSize The font size to set the font to.\n     */\n    /**\n     * Set the font size for this field. Larger font sizes will result in larger\n     * text being displayed when PDF readers render this option list. Font sizes\n     * may be integer or floating point numbers. Supplying a negative font size\n     * will cause this method to throw an error.\n     *\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.setFontSize(4)\n     * optionList.setFontSize(15.7)\n     * ```\n     *\n     * > This method depends upon the existence of a default appearance\n     * > (`/DA`) string. If this field does not have a default appearance string,\n     * > or that string does not contain a font size (via the `Tf` operator),\n     * > then this method will throw an error.\n     *\n     * @param fontSize The font size to be used when rendering text in this field.\n     */\n    PDFOptionList.prototype.setFontSize = function (fontSize) {\n        assertPositive(fontSize, 'fontSize');\n        this.acroField.setFontSize(fontSize);\n        this.markAsDirty();\n    };\n    /**\n     * Returns `true` if the options of this option list are always displayed\n     * in alphabetical order, irrespective of the order in which the options\n     * were added to the option list. See [[PDFOptionList.enableSorting]] and\n     * [[PDFOptionList.disableSorting]]. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * if (optionList.isSorted()) console.log('Sorting is enabled')\n     * ```\n     * @returns Whether or not this option list is sorted.\n     */\n    PDFOptionList.prototype.isSorted = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.Sort);\n    };\n    /**\n     * Always display the options of this option list in alphabetical order,\n     * irrespective of the order in which the options were added to this option\n     * list.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.enableSorting()\n     * ```\n     */\n    PDFOptionList.prototype.enableSorting = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Sort, true);\n    };\n    /**\n     * Do not always display the options of this option list in alphabetical\n     * order. Instead, display the options in whichever order they were added\n     * to this option list. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.disableSorting()\n     * ```\n     */\n    PDFOptionList.prototype.disableSorting = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.Sort, false);\n    };\n    /**\n     * Returns `true` if multiple options can be selected from this option list.\n     * See [[PDFOptionList.enableMultiselect]] and\n     * [[PDFOptionList.disableMultiselect]]. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * if (optionList.isMultiselect()) console.log('Multiselect is enabled')\n     * ```\n     * @returns Whether or not multiple options can be selected.\n     */\n    PDFOptionList.prototype.isMultiselect = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.MultiSelect);\n    };\n    /**\n     * Allow users to select more than one option from this option list.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.enableMultiselect()\n     * ```\n     */\n    PDFOptionList.prototype.enableMultiselect = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, true);\n    };\n    /**\n     * Do not allow users to select more than one option from this option list.\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.disableMultiselect()\n     * ```\n     */\n    PDFOptionList.prototype.disableMultiselect = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.MultiSelect, false);\n    };\n    /**\n     * Returns `true` if the option selected by a user is stored, or \"committed\",\n     * when the user clicks the option. The alternative is that the user's\n     * selection is stored when the user leaves this option list field (by\n     * clicking outside of it - on another field, for example). See\n     * [[PDFOptionList.enableSelectOnClick]] and\n     * [[PDFOptionList.disableSelectOnClick]]. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * if (optionList.isSelectOnClick()) console.log('Select on click is enabled')\n     * ```\n     * @returns Whether or not options are selected immediately after they are\n     *          clicked.\n     */\n    PDFOptionList.prototype.isSelectOnClick = function () {\n        return this.acroField.hasFlag(AcroChoiceFlags.CommitOnSelChange);\n    };\n    /**\n     * Store the option selected by a user immediately after the user clicks the\n     * option. Do not wait for the user to leave this option list field (by\n     * clicking outside of it - on another field, for example). For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.enableSelectOnClick()\n     * ```\n     */\n    PDFOptionList.prototype.enableSelectOnClick = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, true);\n    };\n    /**\n     * Wait to store the option selected by a user until they leave this option\n     * list field (by clicking outside of it - on another field, for example).\n     * For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.disableSelectOnClick()\n     * ```\n     */\n    PDFOptionList.prototype.disableSelectOnClick = function () {\n        this.acroField.setFlagTo(AcroChoiceFlags.CommitOnSelChange, false);\n    };\n    /**\n     * Show this option list on the specified page. For example:\n     * ```js\n     * const ubuntuFont = await pdfDoc.embedFont(ubuntuFontBytes)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const optionList = form.createOptionList('best.gundams')\n     * optionList.setOptions(['Exia', 'Dynames', 'Kyrios', 'Virtue'])\n     * optionList.select(['Exia', 'Virtue'])\n     *\n     * optionList.addToPage(page, {\n     *   x: 50,\n     *   y: 75,\n     *   width: 200,\n     *   height: 100,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     *   font: ubuntuFont,\n     * })\n     * ```\n     * This will create a new widget for this option list field.\n     * @param page The page to which this option list widget should be added.\n     * @param options The options to be used when adding this option list widget.\n     */\n    PDFOptionList.prototype.addToPage = function (page, options) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        if (!options)\n            options = {};\n        if (!('textColor' in options))\n            options.textColor = rgb(0, 0, 0);\n        if (!('backgroundColor' in options))\n            options.backgroundColor = rgb(1, 1, 1);\n        if (!('borderColor' in options))\n            options.borderColor = rgb(0, 0, 0);\n        if (!('borderWidth' in options))\n            options.borderWidth = 1;\n        // Create a widget for this option list\n        var widget = this.createWidget({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : 0,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : 0,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : 200,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : 100,\n            textColor: options.textColor,\n            backgroundColor: options.backgroundColor,\n            borderColor: options.borderColor,\n            borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0,\n            rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0),\n            hidden: options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        this.acroField.addWidget(widgetRef);\n        // Set appearance streams for widget\n        var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont();\n        this.updateWidgetAppearance(widget, font);\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if this option list has been marked as dirty, or if any of\n     * this option list's widgets do not have an appearance stream. For example:\n     * ```js\n     * const optionList = form.getOptionList('some.optionList.field')\n     * if (optionList.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this option list needs an appearance update.\n     */\n    PDFOptionList.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        if (this.isDirty())\n            return true;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream;\n            if (!hasAppearances)\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this option list's widgets using\n     * the default appearance provider for option lists. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.defaultUpdateAppearances(helvetica)\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     */\n    PDFOptionList.prototype.defaultUpdateAppearances = function (font) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        this.updateAppearances(font);\n    };\n    /**\n     * Update the appearance streams for each of this option list's widgets using\n     * the given appearance provider. If no `provider` is passed, the default\n     * appearance provider for option lists will be used. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const optionList = form.getOptionList('some.optionList.field')\n     * optionList.updateAppearances(helvetica, (field, widget, font) => {\n     *   ...\n     *   return drawOptionList(...)\n     * })\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFOptionList.prototype.updateAppearances = function (font, provider) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            this.updateWidgetAppearance(widget, font, provider);\n        }\n        this.markAsClean();\n    };\n    // getOption(index: number): string {}\n    // getSelectedIndices(): number[] {}\n    // removeOptions(option: string | string[]) {}\n    // removeIndices(option: number[]) {}\n    // deselect(options: string | string[]) {}\n    // deselectIndices(optionIndices: number[]) {}\n    PDFOptionList.prototype.updateWidgetAppearance = function (widget, font, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultOptionListAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget, font));\n        this.updateWidgetAppearanceWithFont(widget, font, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getOptionList]] method, which will create\n     * > an instance of [[PDFOptionList]] for you.\n     *\n     * Create an instance of [[PDFOptionList]] from an existing acroListBox and\n     * ref\n     *\n     * @param acroComboBox The underlying `PDFAcroListBox` for this option list.\n     * @param ref The unique reference for this option list.\n     * @param doc The document to which this option list will belong.\n     */\n    PDFOptionList.of = function (acroListBox, ref, doc) {\n        return new PDFOptionList(acroListBox, ref, doc);\n    };\n    return PDFOptionList;\n}(PDFField));\nexport default PDFOptionList;\n//# sourceMappingURL=PDFOptionList.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { normalizeAppearance, defaultRadioGroupAppearanceProvider, } from \"./appearances\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport { PDFName, PDFHexString, PDFDict, PDFAcroRadioButton, AcroButtonFlags, } from \"../../core\";\nimport { assertIs, assertOrUndefined, assertIsOneOf } from \"../../utils\";\n/**\n * Represents a radio group field of a [[PDFForm]].\n *\n * [[PDFRadioGroup]] fields are collections of radio buttons. The purpose of a\n * radio group is to enable users to select one option from a set of mutually\n * exclusive choices. Each choice in a radio group is represented by a radio\n * button. Radio buttons each have two states: `on` and `off`. At most one\n * radio button in a group may be in the `on` state at any time. Users can\n * click on a radio button to select it (and thereby automatically deselect any\n * other radio button that might have already been selected). Some radio\n * groups allow users to toggle a selected radio button `off` by clicking on\n * it (see [[PDFRadioGroup.isOffToggleable]]).\n *\n * Note that some radio groups allow multiple radio buttons to be in the `on`\n * state at the same type **if** they represent the same underlying value (see\n * [[PDFRadioGroup.isMutuallyExclusive]]).\n */\nvar PDFRadioGroup = /** @class */ (function (_super) {\n    __extends(PDFRadioGroup, _super);\n    function PDFRadioGroup(acroRadioButton, ref, doc) {\n        var _this = _super.call(this, acroRadioButton, ref, doc) || this;\n        assertIs(acroRadioButton, 'acroRadioButton', [\n            [PDFAcroRadioButton, 'PDFAcroRadioButton'],\n        ]);\n        _this.acroField = acroRadioButton;\n        return _this;\n    }\n    /**\n     * Get the list of available options for this radio group. Each option is\n     * represented by a radio button. These radio buttons are displayed at\n     * various locations in the document, potentially on different pages (though\n     * typically they are stacked horizontally or vertically on the same page).\n     * For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * const options = radioGroup.getOptions()\n     * console.log('Radio Group options:', options)\n     * ```\n     * @returns The options for this radio group.\n     */\n    PDFRadioGroup.prototype.getOptions = function () {\n        var exportValues = this.acroField.getExportValues();\n        if (exportValues) {\n            var exportOptions = new Array(exportValues.length);\n            for (var idx = 0, len = exportValues.length; idx < len; idx++) {\n                exportOptions[idx] = exportValues[idx].decodeText();\n            }\n            return exportOptions;\n        }\n        var onValues = this.acroField.getOnValues();\n        var onOptions = new Array(onValues.length);\n        for (var idx = 0, len = onOptions.length; idx < len; idx++) {\n            onOptions[idx] = onValues[idx].decodeText();\n        }\n        return onOptions;\n    };\n    /**\n     * Get the selected option for this radio group. The selected option is\n     * represented by the radio button in this group that is turned on. At most\n     * one radio button in a group can be selected. If no buttons in this group\n     * are selected, `undefined` is returned.\n     * For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * const selected = radioGroup.getSelected()\n     * console.log('Selected radio button:', selected)\n     * ```\n     * @returns The selected option for this radio group.\n     */\n    PDFRadioGroup.prototype.getSelected = function () {\n        var value = this.acroField.getValue();\n        if (value === PDFName.of('Off'))\n            return undefined;\n        var exportValues = this.acroField.getExportValues();\n        if (exportValues) {\n            var onValues = this.acroField.getOnValues();\n            for (var idx = 0, len = onValues.length; idx < len; idx++) {\n                if (onValues[idx] === value)\n                    return exportValues[idx].decodeText();\n            }\n        }\n        return value.decodeText();\n    };\n    // // TODO: Figure out why this seems to crash Acrobat. Maybe it's because we\n    // //       aren't removing the widget reference from the page's Annots?\n    // removeOption(option: string) {\n    //   assertIs(option, 'option', ['string']);\n    //   // TODO: Assert is valid `option`!\n    //   const onValues = this.acroField.getOnValues();\n    //   const exportValues = this.acroField.getExportValues();\n    //   if (exportValues) {\n    //     for (let idx = 0, len = exportValues.length; idx < len; idx++) {\n    //       if (exportValues[idx].decodeText() === option) {\n    //         this.acroField.removeWidget(idx);\n    //         this.acroField.removeExportValue(idx);\n    //       }\n    //     }\n    //   } else {\n    //     for (let idx = 0, len = onValues.length; idx < len; idx++) {\n    //       const value = onValues[idx];\n    //       if (value.decodeText() === option) {\n    //         this.acroField.removeWidget(idx);\n    //         this.acroField.removeExportValue(idx);\n    //       }\n    //     }\n    //   }\n    // }\n    /**\n     * Select an option for this radio group. This operation is analogous to a\n     * human user clicking one of the radio buttons in this group via a PDF\n     * reader to toggle it on. This method will update the underlying state of\n     * the radio group to indicate which option has been selected. PDF libraries\n     * and readers will be able to extract this value from the saved document and\n     * determine which option was selected.\n     *\n     * For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('best.superhero.radioGroup')\n     * radioGroup.select('One Punch Man')\n     * ```\n     *\n     * This method will mark this radio group as dirty, causing its appearance\n     * streams to be updated when either [[PDFDocument.save]] or\n     * [[PDFForm.updateFieldAppearances]] is called. The updated appearance\n     * streams will display a dot inside the widget of this check box field\n     * that represents the selected option.\n     *\n     * @param option The option to be selected.\n     */\n    PDFRadioGroup.prototype.select = function (option) {\n        assertIs(option, 'option', ['string']);\n        var validOptions = this.getOptions();\n        assertIsOneOf(option, 'option', validOptions);\n        this.markAsDirty();\n        var onValues = this.acroField.getOnValues();\n        var exportValues = this.acroField.getExportValues();\n        if (exportValues) {\n            for (var idx = 0, len = exportValues.length; idx < len; idx++) {\n                if (exportValues[idx].decodeText() === option) {\n                    this.acroField.setValue(onValues[idx]);\n                }\n            }\n        }\n        else {\n            for (var idx = 0, len = onValues.length; idx < len; idx++) {\n                var value = onValues[idx];\n                if (value.decodeText() === option)\n                    this.acroField.setValue(value);\n            }\n        }\n    };\n    /**\n     * Clear any selected option for this dropdown. This will result in all\n     * radio buttons in this group being toggled off. This method will update\n     * the underlying state of the dropdown to indicate that no radio buttons\n     * have been selected.\n     * For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.clear()\n     * ```\n     * This method will mark this radio group as dirty. See\n     * [[PDFRadioGroup.select]] for more details about what this means.\n     */\n    PDFRadioGroup.prototype.clear = function () {\n        this.markAsDirty();\n        this.acroField.setValue(PDFName.of('Off'));\n    };\n    /**\n     * Returns `true` if users can click on radio buttons in this group to toggle\n     * them off. The alternative is that once a user clicks on a radio button\n     * to select it, the only way to deselect it is by selecting on another radio\n     * button in the group. See [[PDFRadioGroup.enableOffToggling]] and\n     * [[PDFRadioGroup.disableOffToggling]]. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * if (radioGroup.isOffToggleable()) console.log('Off toggling is enabled')\n     * ```\n     */\n    PDFRadioGroup.prototype.isOffToggleable = function () {\n        return !this.acroField.hasFlag(AcroButtonFlags.NoToggleToOff);\n    };\n    /**\n     * Allow users to click on selected radio buttons in this group to toggle\n     * them off. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.enableOffToggling()\n     * ```\n     * > **NOTE:** This feature is documented in the PDF specification\n     * > (Table 226). However, most PDF readers do not respect this option and\n     * > prevent users from toggling radio buttons off even when it is enabled.\n     * > At the time of this writing (9/6/2020) Mac's Preview software did\n     * > respect the option. Adobe Acrobat, Foxit Reader, and Google Chrome did\n     * > not.\n     */\n    PDFRadioGroup.prototype.enableOffToggling = function () {\n        this.acroField.setFlagTo(AcroButtonFlags.NoToggleToOff, false);\n    };\n    /**\n     * Prevent users from clicking on selected radio buttons in this group to\n     * toggle them off. Clicking on a selected radio button will have no effect.\n     * The only way to deselect a selected radio button is to click on a\n     * different radio button in the group. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.disableOffToggling()\n     * ```\n     */\n    PDFRadioGroup.prototype.disableOffToggling = function () {\n        this.acroField.setFlagTo(AcroButtonFlags.NoToggleToOff, true);\n    };\n    /**\n     * Returns `true` if the radio buttons in this group are mutually exclusive.\n     * This means that when the user selects a radio button, only that specific\n     * button will be turned on. Even if other radio buttons in the group\n     * represent the same value, they will not be enabled. The alternative to\n     * this is that clicking a radio button will select that button along with\n     * any other radio buttons in the group that share the same value. See\n     * [[PDFRadioGroup.enableMutualExclusion]] and\n     * [[PDFRadioGroup.disableMutualExclusion]].\n     * For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * if (radioGroup.isMutuallyExclusive()) console.log('Mutual exclusion is enabled')\n     * ```\n     */\n    PDFRadioGroup.prototype.isMutuallyExclusive = function () {\n        return !this.acroField.hasFlag(AcroButtonFlags.RadiosInUnison);\n    };\n    /**\n     * When the user clicks a radio button in this group it will be selected. In\n     * addition, any other radio buttons in this group that share the same\n     * underlying value will also be selected. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.enableMutualExclusion()\n     * ```\n     * Note that this option must be enabled prior to adding options to the\n     * radio group. It does not currently apply retroactively to existing\n     * radio buttons in the group.\n     */\n    PDFRadioGroup.prototype.enableMutualExclusion = function () {\n        this.acroField.setFlagTo(AcroButtonFlags.RadiosInUnison, false);\n    };\n    /**\n     * When the user clicks a radio button in this group only it will be selected.\n     * No other radio buttons in the group will be selected, even if they share\n     * the same underlying value. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.disableMutualExclusion()\n     * ```\n     * Note that this option must be disabled prior to adding options to the\n     * radio group. It does not currently apply retroactively to existing\n     * radio buttons in the group.\n     */\n    PDFRadioGroup.prototype.disableMutualExclusion = function () {\n        this.acroField.setFlagTo(AcroButtonFlags.RadiosInUnison, true);\n    };\n    /**\n     * Add a new radio button to this group on the specified page. For example:\n     * ```js\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const radioGroup = form.createRadioGroup('best.gundam')\n     *\n     * const options = {\n     *   x: 50,\n     *   width: 25,\n     *   height: 25,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     * }\n     *\n     * radioGroup.addOptionToPage('Exia', page, { ...options, y: 50 })\n     * radioGroup.addOptionToPage('Dynames', page, { ...options, y: 110 })\n     * ```\n     * This will create a new radio button widget for this radio group field.\n     * @param option The option that the radio button widget represents.\n     * @param page The page to which the radio button widget should be added.\n     * @param options The options to be used when adding the radio button widget.\n     */\n    PDFRadioGroup.prototype.addOptionToPage = function (option, page, options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        assertIs(option, 'option', ['string']);\n        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        // Create a widget for this radio button\n        var widget = this.createWidget({\n            x: (_a = options === null || options === void 0 ? void 0 : options.x) !== null && _a !== void 0 ? _a : 0,\n            y: (_b = options === null || options === void 0 ? void 0 : options.y) !== null && _b !== void 0 ? _b : 0,\n            width: (_c = options === null || options === void 0 ? void 0 : options.width) !== null && _c !== void 0 ? _c : 50,\n            height: (_d = options === null || options === void 0 ? void 0 : options.height) !== null && _d !== void 0 ? _d : 50,\n            textColor: (_e = options === null || options === void 0 ? void 0 : options.textColor) !== null && _e !== void 0 ? _e : rgb(0, 0, 0),\n            backgroundColor: (_f = options === null || options === void 0 ? void 0 : options.backgroundColor) !== null && _f !== void 0 ? _f : rgb(1, 1, 1),\n            borderColor: (_g = options === null || options === void 0 ? void 0 : options.borderColor) !== null && _g !== void 0 ? _g : rgb(0, 0, 0),\n            borderWidth: (_h = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _h !== void 0 ? _h : 1,\n            rotate: (_j = options === null || options === void 0 ? void 0 : options.rotate) !== null && _j !== void 0 ? _j : degrees(0),\n            hidden: options === null || options === void 0 ? void 0 : options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        var apStateValue = this.acroField.addWidgetWithOpt(widgetRef, PDFHexString.fromText(option), !this.isMutuallyExclusive());\n        // Set appearance streams for widget\n        widget.setAppearanceState(PDFName.of('Off'));\n        this.updateWidgetAppearance(widget, apStateValue);\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if any of this group's radio button widgets do not have an\n     * appearance stream for their current state. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * if (radioGroup.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this radio group needs an appearance update.\n     */\n    PDFRadioGroup.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var state = widget.getAppearanceState();\n            var normal = (_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal;\n            if (!(normal instanceof PDFDict))\n                return true;\n            if (state && !normal.has(state))\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this group's radio button widgets\n     * using the default appearance provider for radio groups. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.defaultUpdateAppearances()\n     * ```\n     */\n    PDFRadioGroup.prototype.defaultUpdateAppearances = function () {\n        this.updateAppearances();\n    };\n    // rg.updateAppearances((field: any, widget: any) => {\n    //   assert(field === rg);\n    //   assert(widget instanceof PDFWidgetAnnotation);\n    //   return { on: [...rectangle, ...circle], off: [...rectangle, ...circle] };\n    // });\n    /**\n     * Update the appearance streams for each of this group's radio button widgets\n     * using the given appearance provider. If no `provider` is passed, the\n     * default appearance provider for radio groups will be used. For example:\n     * ```js\n     * const radioGroup = form.getRadioGroup('some.radioGroup.field')\n     * radioGroup.updateAppearances((field, widget) => {\n     *   ...\n     *   return {\n     *     normal: { on: drawRadioButton(...), off: drawRadioButton(...) },\n     *     down: { on: drawRadioButton(...), off: drawRadioButton(...) },\n     *   }\n     * })\n     * ```\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFRadioGroup.prototype.updateAppearances = function (provider) {\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var onValue = widget.getOnValue();\n            if (!onValue)\n                continue;\n            this.updateWidgetAppearance(widget, onValue, provider);\n        }\n    };\n    PDFRadioGroup.prototype.updateWidgetAppearance = function (widget, onValue, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultRadioGroupAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget));\n        this.updateOnOffWidgetAppearance(widget, onValue, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getOptionList]] method, which will create an\n     * > instance of [[PDFOptionList]] for you.\n     *\n     * Create an instance of [[PDFOptionList]] from an existing acroRadioButton\n     * and ref\n     *\n     * @param acroRadioButton The underlying `PDFAcroRadioButton` for this\n     *                        radio group.\n     * @param ref The unique reference for this radio group.\n     * @param doc The document to which this radio group will belong.\n     */\n    PDFRadioGroup.of = function (acroRadioButton, ref, doc) { return new PDFRadioGroup(acroRadioButton, ref, doc); };\n    return PDFRadioGroup;\n}(PDFField));\nexport default PDFRadioGroup;\n//# sourceMappingURL=PDFRadioGroup.js.map","import { __extends } from \"tslib\";\nimport PDFField from \"./PDFField\";\nimport { PDFAcroSignature } from \"../../core\";\nimport { assertIs } from \"../../utils\";\n/**\n * Represents a signature field of a [[PDFForm]].\n *\n * [[PDFSignature]] fields are digital signatures. `pdf-lib` does not\n * currently provide any specialized APIs for creating digital signatures or\n * reading the contents of existing digital signatures.\n */\nvar PDFSignature = /** @class */ (function (_super) {\n    __extends(PDFSignature, _super);\n    function PDFSignature(acroSignature, ref, doc) {\n        var _this = _super.call(this, acroSignature, ref, doc) || this;\n        assertIs(acroSignature, 'acroSignature', [\n            [PDFAcroSignature, 'PDFAcroSignature'],\n        ]);\n        _this.acroField = acroSignature;\n        return _this;\n    }\n    PDFSignature.prototype.needsAppearancesUpdate = function () {\n        return false;\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getSignature]] method, which will create an\n     * > instance of [[PDFSignature]] for you.\n     *\n     * Create an instance of [[PDFSignature]] from an existing acroSignature and\n     * ref\n     *\n     * @param acroSignature The underlying `PDFAcroSignature` for this signature.\n     * @param ref The unique reference for this signature.\n     * @param doc The document to which this signature will belong.\n     */\n    PDFSignature.of = function (acroSignature, ref, doc) { return new PDFSignature(acroSignature, ref, doc); };\n    return PDFSignature;\n}(PDFField));\nexport default PDFSignature;\n//# sourceMappingURL=PDFSignature.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport PDFFont from \"../PDFFont\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { normalizeAppearance, defaultTextFieldAppearanceProvider, } from \"./appearances\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport { RichTextFieldReadError, ExceededMaxLengthError, InvalidMaxLengthError, } from \"../errors\";\nimport { ImageAlignment } from \"../image/alignment\";\nimport { TextAlignment } from \"../text/alignment\";\nimport { PDFHexString, PDFStream, PDFAcroText, AcroTextFlags, } from \"../../core\";\nimport { assertIs, assertIsOneOf, assertOrUndefined, assertPositive, assertRangeOrUndefined, } from \"../../utils\";\n/**\n * Represents a text field of a [[PDFForm]].\n *\n * [[PDFTextField]] fields are boxes that display text entered by the user. The\n * purpose of a text field is to enable users to enter text or view text values\n * in the document prefilled by software. Users can click on a text field and\n * input text via their keyboard. Some text fields allow multiple lines of text\n * to be entered (see [[PDFTextField.isMultiline]]).\n */\nvar PDFTextField = /** @class */ (function (_super) {\n    __extends(PDFTextField, _super);\n    function PDFTextField(acroText, ref, doc) {\n        var _this = _super.call(this, acroText, ref, doc) || this;\n        assertIs(acroText, 'acroText', [[PDFAcroText, 'PDFAcroText']]);\n        _this.acroField = acroText;\n        return _this;\n    }\n    /**\n     * Get the text that this field contains. This text is visible to users who\n     * view this field in a PDF reader.\n     *\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * const text = textField.getText()\n     * console.log('Text field contents:', text)\n     * ```\n     *\n     * Note that if this text field contains no underlying value, `undefined`\n     * will be returned. Text fields may also contain an underlying value that\n     * is simply an empty string (`''`). This detail is largely irrelevant for\n     * most applications. In general, you'll want to treat both cases the same\n     * way and simply consider the text field to be empty. In either case, the\n     * text field will appear empty to users when viewed in a PDF reader.\n     *\n     * An error will be thrown if this is a rich text field. `pdf-lib` does not\n     * support reading rich text fields. Nor do most PDF readers and writers.\n     * Rich text fields are based on XFA (XML Forms Architecture). Relatively few\n     * PDFs use rich text fields or XFA. Unlike PDF itself, XFA is not an ISO\n     * standard. XFA has been deprecated in PDF 2.0:\n     * * https://en.wikipedia.org/wiki/XFA\n     * * http://blog.pdfshareforms.com/pdf-2-0-release-bid-farewell-xfa-forms/\n     *\n     * @returns The text contained in this text field.\n     */\n    PDFTextField.prototype.getText = function () {\n        var value = this.acroField.getValue();\n        if (!value && this.isRichFormatted()) {\n            throw new RichTextFieldReadError(this.getName());\n        }\n        return value === null || value === void 0 ? void 0 : value.decodeText();\n    };\n    /**\n     * Set the text for this field. This operation is analogous to a human user\n     * clicking on the text field in a PDF reader and typing in text via their\n     * keyboard. This method will update the underlying state of the text field\n     * to indicate what text has been set. PDF libraries and readers will be able\n     * to extract these values from the saved document and determine what text\n     * was set.\n     *\n     * For example:\n     * ```js\n     * const textField = form.getTextField('best.superhero.text.field')\n     * textField.setText('One Punch Man')\n     * ```\n     *\n     * This method will mark this text field as dirty, causing its appearance\n     * streams to be updated when either [[PDFDocument.save]] or\n     * [[PDFForm.updateFieldAppearances]] is called. The updated streams will\n     * display the text this field contains inside the widgets of this text\n     * field.\n     *\n     * **IMPORTANT:** The default font used to update appearance streams is\n     * [[StandardFonts.Helvetica]]. Note that this is a WinAnsi font. This means\n     * that encoding errors will be thrown if this field contains text outside\n     * the WinAnsi character set (the latin alphabet).\n     *\n     * Embedding a custom font and passing it to\n     * [[PDFForm.updateFieldAppearances]] or [[PDFTextField.updateAppearances]]\n     * allows you to generate appearance streams with characters outside the\n     * latin alphabet (assuming the custom font supports them).\n     *\n     * If this is a rich text field, it will be converted to a standard text\n     * field in order to set the text. `pdf-lib` does not support writing rich\n     * text strings. Nor do most PDF readers and writers. See\n     * [[PDFTextField.getText]] for more information about rich text fields and\n     * their deprecation in PDF 2.0.\n     *\n     * @param text The text this field should contain.\n     */\n    PDFTextField.prototype.setText = function (text) {\n        assertOrUndefined(text, 'text', ['string']);\n        var maxLength = this.getMaxLength();\n        if (maxLength !== undefined && text && text.length > maxLength) {\n            throw new ExceededMaxLengthError(text.length, maxLength, this.getName());\n        }\n        this.markAsDirty();\n        this.disableRichFormatting();\n        if (text) {\n            this.acroField.setValue(PDFHexString.fromText(text));\n        }\n        else {\n            this.acroField.removeValue();\n        }\n    };\n    /**\n     * Get the alignment for this text field. This value represents the\n     * justification of the text when it is displayed to the user in PDF readers.\n     * There are three possible alignments: left, center, and right. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * const alignment = textField.getAlignment()\n     * if (alignment === TextAlignment.Left) console.log('Text is left justified')\n     * if (alignment === TextAlignment.Center) console.log('Text is centered')\n     * if (alignment === TextAlignment.Right) console.log('Text is right justified')\n     * ```\n     * @returns The alignment of this text field.\n     */\n    PDFTextField.prototype.getAlignment = function () {\n        var quadding = this.acroField.getQuadding();\n        // prettier-ignore\n        return (quadding === 0 ? TextAlignment.Left\n            : quadding === 1 ? TextAlignment.Center\n                : quadding === 2 ? TextAlignment.Right\n                    : TextAlignment.Left);\n    };\n    /**\n     * Set the alignment for this text field. This will determine the\n     * justification of the text when it is displayed to the user in PDF readers.\n     * There are three possible alignments: left, center, and right. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     *\n     * // Text will be left justified when displayed\n     * textField.setAlignment(TextAlignment.Left)\n     *\n     * // Text will be centered when displayed\n     * textField.setAlignment(TextAlignment.Center)\n     *\n     * // Text will be right justified when displayed\n     * textField.setAlignment(TextAlignment.Right)\n     * ```\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     * @param alignment The alignment for this text field.\n     */\n    PDFTextField.prototype.setAlignment = function (alignment) {\n        assertIsOneOf(alignment, 'alignment', TextAlignment);\n        this.markAsDirty();\n        this.acroField.setQuadding(alignment);\n    };\n    /**\n     * Get the maximum length of this field. This value represents the maximum\n     * number of characters that can be typed into this field by the user. If\n     * this field does not have a maximum length, `undefined` is returned.\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * const maxLength = textField.getMaxLength()\n     * if (maxLength === undefined) console.log('No max length')\n     * else console.log(`Max length is ${maxLength}`)\n     * ```\n     * @returns The maximum number of characters allowed in this field, or\n     *          `undefined` if no limit exists.\n     */\n    PDFTextField.prototype.getMaxLength = function () {\n        return this.acroField.getMaxLength();\n    };\n    /**\n     * Set the maximum length of this field. This limits the number of characters\n     * that can be typed into this field by the user. This also limits the length\n     * of the string that can be passed to [[PDFTextField.setText]]. This limit\n     * can be removed by passing `undefined` as `maxLength`. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     *\n     * // Allow between 0 and 5 characters to be entered\n     * textField.setMaxLength(5)\n     *\n     * // Allow any number of characters to be entered\n     * textField.setMaxLength(undefined)\n     * ```\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     * @param maxLength The maximum number of characters allowed in this field, or\n     *                  `undefined` to remove the limit.\n     */\n    PDFTextField.prototype.setMaxLength = function (maxLength) {\n        assertRangeOrUndefined(maxLength, 'maxLength', 0, Number.MAX_SAFE_INTEGER);\n        this.markAsDirty();\n        if (maxLength === undefined) {\n            this.acroField.removeMaxLength();\n        }\n        else {\n            var text = this.getText();\n            if (text && text.length > maxLength) {\n                throw new InvalidMaxLengthError(text.length, maxLength, this.getName());\n            }\n            this.acroField.setMaxLength(maxLength);\n        }\n    };\n    /**\n     * Remove the maximum length for this text field. This allows any number of\n     * characters to be typed into this field by the user. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.removeMaxLength()\n     * ```\n     * Calling this method is equivalent to passing `undefined` to\n     * [[PDFTextField.setMaxLength]].\n     */\n    PDFTextField.prototype.removeMaxLength = function () {\n        this.markAsDirty();\n        this.acroField.removeMaxLength();\n    };\n    /**\n     * Display an image inside the bounds of this text field's widgets. For example:\n     * ```js\n     * const pngImage = await pdfDoc.embedPng(...)\n     * const textField = form.getTextField('some.text.field')\n     * textField.setImage(pngImage)\n     * ```\n     * This will update the appearances streams for each of this text field's widgets.\n     * @param image The image that should be displayed.\n     */\n    PDFTextField.prototype.setImage = function (image) {\n        var fieldAlignment = this.getAlignment();\n        // prettier-ignore\n        var alignment = fieldAlignment === TextAlignment.Center ? ImageAlignment.Center\n            : fieldAlignment === TextAlignment.Right ? ImageAlignment.Right\n                : ImageAlignment.Left;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var streamRef = this.createImageAppearanceStream(widget, image, alignment);\n            this.updateWidgetAppearances(widget, { normal: streamRef });\n        }\n        this.markAsClean();\n    };\n    /**\n     * Set the font size for this field. Larger font sizes will result in larger\n     * text being displayed when PDF readers render this text field. Font sizes\n     * may be integer or floating point numbers. Supplying a negative font size\n     * will cause this method to throw an error.\n     *\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.setFontSize(4)\n     * textField.setFontSize(15.7)\n     * ```\n     *\n     * > This method depends upon the existence of a default appearance\n     * > (`/DA`) string. If this field does not have a default appearance string,\n     * > or that string does not contain a font size (via the `Tf` operator),\n     * > then this method will throw an error.\n     *\n     * @param fontSize The font size to be used when rendering text in this field.\n     */\n    PDFTextField.prototype.setFontSize = function (fontSize) {\n        assertPositive(fontSize, 'fontSize');\n        this.acroField.setFontSize(fontSize);\n        this.markAsDirty();\n    };\n    /**\n     * Returns `true` if each line of text is shown on a new line when this\n     * field is displayed in a PDF reader. The alternative is that all lines of\n     * text are merged onto a single line when displayed. See\n     * [[PDFTextField.enableMultiline]] and [[PDFTextField.disableMultiline]].\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isMultiline()) console.log('Multiline is enabled')\n     * ```\n     * @returns Whether or not this is a multiline text field.\n     */\n    PDFTextField.prototype.isMultiline = function () {\n        return this.acroField.hasFlag(AcroTextFlags.Multiline);\n    };\n    /**\n     * Display each line of text on a new line when this field is displayed in a\n     * PDF reader. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableMultiline()\n     * ```\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     */\n    PDFTextField.prototype.enableMultiline = function () {\n        this.markAsDirty();\n        this.acroField.setFlagTo(AcroTextFlags.Multiline, true);\n    };\n    /**\n     * Display each line of text on the same line when this field is displayed\n     * in a PDF reader. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableMultiline()\n     * ```\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     */\n    PDFTextField.prototype.disableMultiline = function () {\n        this.markAsDirty();\n        this.acroField.setFlagTo(AcroTextFlags.Multiline, false);\n    };\n    /**\n     * Returns `true` if this is a password text field. This means that the field\n     * is intended for storing a secure password. See\n     * [[PDFTextField.enablePassword]] and [[PDFTextField.disablePassword]].\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isPassword()) console.log('Password is enabled')\n     * ```\n     * @returns Whether or not this is a password text field.\n     */\n    PDFTextField.prototype.isPassword = function () {\n        return this.acroField.hasFlag(AcroTextFlags.Password);\n    };\n    /**\n     * Indicate that this text field is intended for storing a secure password.\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enablePassword()\n     * ```\n     * Values entered into password text fields should not be displayed on the\n     * screen by PDF readers. Most PDF readers will display the value as\n     * asterisks or bullets. PDF readers should never store values entered by the\n     * user into password text fields. Similarly, applications should not\n     * write data to a password text field.\n     *\n     * **Please note that this method does not cause entered values to be\n     * encrypted or secured in any way! It simply sets a flag that PDF software\n     * and readers can access to determine the _purpose_ of this field.**\n     */\n    PDFTextField.prototype.enablePassword = function () {\n        this.acroField.setFlagTo(AcroTextFlags.Password, true);\n    };\n    /**\n     * Indicate that this text field is **not** intended for storing a secure\n     * password. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disablePassword()\n     * ```\n     */\n    PDFTextField.prototype.disablePassword = function () {\n        this.acroField.setFlagTo(AcroTextFlags.Password, false);\n    };\n    /**\n     * Returns `true` if the contents of this text field represent a file path.\n     * See [[PDFTextField.enableFileSelection]] and\n     * [[PDFTextField.disableFileSelection]]. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isFileSelector()) console.log('Is a file selector')\n     * ```\n     * @returns Whether or not this field should contain file paths.\n     */\n    PDFTextField.prototype.isFileSelector = function () {\n        return this.acroField.hasFlag(AcroTextFlags.FileSelect);\n    };\n    /**\n     * Indicate that this text field is intended to store a file path. The\n     * contents of the file stored at that path should be submitted as the value\n     * of the field. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableFileSelection()\n     * ```\n     */\n    PDFTextField.prototype.enableFileSelection = function () {\n        this.acroField.setFlagTo(AcroTextFlags.FileSelect, true);\n    };\n    /**\n     * Indicate that this text field is **not** intended to store a file path.\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableFileSelection()\n     * ```\n     */\n    PDFTextField.prototype.disableFileSelection = function () {\n        this.acroField.setFlagTo(AcroTextFlags.FileSelect, false);\n    };\n    /**\n     * Returns `true` if the text entered in this field should be spell checked\n     * by PDF readers. See [[PDFTextField.enableSpellChecking]] and\n     * [[PDFTextField.disableSpellChecking]]. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isSpellChecked()) console.log('Spell checking is enabled')\n     * ```\n     * @returns Whether or not this field should be spell checked.\n     */\n    PDFTextField.prototype.isSpellChecked = function () {\n        return !this.acroField.hasFlag(AcroTextFlags.DoNotSpellCheck);\n    };\n    /**\n     * Allow PDF readers to spell check the text entered in this field.\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableSpellChecking()\n     * ```\n     */\n    PDFTextField.prototype.enableSpellChecking = function () {\n        this.acroField.setFlagTo(AcroTextFlags.DoNotSpellCheck, false);\n    };\n    /**\n     * Do not allow PDF readers to spell check the text entered in this field.\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableSpellChecking()\n     * ```\n     */\n    PDFTextField.prototype.disableSpellChecking = function () {\n        this.acroField.setFlagTo(AcroTextFlags.DoNotSpellCheck, true);\n    };\n    /**\n     * Returns `true` if PDF readers should allow the user to scroll the text\n     * field when its contents do not fit within the field's view bounds. See\n     * [[PDFTextField.enableScrolling]] and [[PDFTextField.disableScrolling]].\n     * For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isScrollable()) console.log('Scrolling is enabled')\n     * ```\n     * @returns Whether or not the field is scrollable in PDF readers.\n     */\n    PDFTextField.prototype.isScrollable = function () {\n        return !this.acroField.hasFlag(AcroTextFlags.DoNotScroll);\n    };\n    /**\n     * Allow PDF readers to present a scroll bar to the user when the contents\n     * of this text field do not fit within its view bounds. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableScrolling()\n     * ```\n     * A horizontal scroll bar should be shown for singleline fields. A vertical\n     * scroll bar should be shown for multiline fields.\n     */\n    PDFTextField.prototype.enableScrolling = function () {\n        this.acroField.setFlagTo(AcroTextFlags.DoNotScroll, false);\n    };\n    /**\n     * Do not allow PDF readers to present a scroll bar to the user when the\n     * contents of this text field do not fit within its view bounds. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableScrolling()\n     * ```\n     */\n    PDFTextField.prototype.disableScrolling = function () {\n        this.acroField.setFlagTo(AcroTextFlags.DoNotScroll, true);\n    };\n    /**\n     * Returns `true` if this is a combed text field. This means that the field\n     * is split into `n` equal size cells with one character in each (where `n`\n     * is equal to the max length of the text field). The result is that all\n     * characters in this field are displayed an equal distance apart from one\n     * another. See [[PDFTextField.enableCombing]] and\n     * [[PDFTextField.disableCombing]]. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isCombed()) console.log('Combing is enabled')\n     * ```\n     * Note that in order for a text field to be combed, the following must be\n     * true (in addition to enabling combing):\n     * * It must not be a multiline field (see [[PDFTextField.isMultiline]])\n     * * It must not be a password field (see [[PDFTextField.isPassword]])\n     * * It must not be a file selector field (see [[PDFTextField.isFileSelector]])\n     * * It must have a max length defined (see [[PDFTextField.setMaxLength]])\n     * @returns Whether or not this field is combed.\n     */\n    PDFTextField.prototype.isCombed = function () {\n        return (this.acroField.hasFlag(AcroTextFlags.Comb) &&\n            !this.isMultiline() &&\n            !this.isPassword() &&\n            !this.isFileSelector() &&\n            this.getMaxLength() !== undefined);\n    };\n    /**\n     * Split this field into `n` equal size cells with one character in each\n     * (where `n` is equal to the max length of the text field). This will cause\n     * all characters in the field to be displayed an equal distance apart from\n     * one another. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableCombing()\n     * ```\n     *\n     * In addition to calling this method, text fields must have a max length\n     * defined in order to be combed (see [[PDFTextField.setMaxLength]]).\n     *\n     * This method will also call the following three methods internally:\n     * * [[PDFTextField.disableMultiline]]\n     * * [[PDFTextField.disablePassword]]\n     * * [[PDFTextField.disableFileSelection]]\n     *\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     */\n    PDFTextField.prototype.enableCombing = function () {\n        if (this.getMaxLength() === undefined) {\n            var msg = \"PDFTextFields must have a max length in order to be combed\";\n            console.warn(msg);\n        }\n        this.markAsDirty();\n        this.disableMultiline();\n        this.disablePassword();\n        this.disableFileSelection();\n        this.acroField.setFlagTo(AcroTextFlags.Comb, true);\n    };\n    /**\n     * Turn off combing for this text field. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableCombing()\n     * ```\n     * See [[PDFTextField.isCombed]] and [[PDFTextField.enableCombing]] for more\n     * information about what combing is.\n     *\n     * This method will mark this text field as dirty. See\n     * [[PDFTextField.setText]] for more details about what this means.\n     */\n    PDFTextField.prototype.disableCombing = function () {\n        this.markAsDirty();\n        this.acroField.setFlagTo(AcroTextFlags.Comb, false);\n    };\n    /**\n     * Returns `true` if this text field contains rich text. See\n     * [[PDFTextField.enableRichFormatting]] and\n     * [[PDFTextField.disableRichFormatting]]. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.isRichFormatted()) console.log('Rich formatting enabled')\n     * ```\n     * @returns Whether or not this field contains rich text.\n     */\n    PDFTextField.prototype.isRichFormatted = function () {\n        return this.acroField.hasFlag(AcroTextFlags.RichText);\n    };\n    /**\n     * Indicate that this field contains XFA data - or rich text. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.enableRichFormatting()\n     * ```\n     * Note that `pdf-lib` does not support reading or writing rich text fields.\n     * Nor do most PDF readers and writers. Rich text fields are based on XFA\n     * (XML Forms Architecture). Relatively few PDFs use rich text fields or XFA.\n     * Unlike PDF itself, XFA is not an ISO standard. XFA has been deprecated in\n     * PDF 2.0:\n     * * https://en.wikipedia.org/wiki/XFA\n     * * http://blog.pdfshareforms.com/pdf-2-0-release-bid-farewell-xfa-forms/\n     */\n    PDFTextField.prototype.enableRichFormatting = function () {\n        this.acroField.setFlagTo(AcroTextFlags.RichText, true);\n    };\n    /**\n     * Indicate that this is a standard text field that does not XFA data (rich\n     * text). For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * textField.disableRichFormatting()\n     * ```\n     */\n    PDFTextField.prototype.disableRichFormatting = function () {\n        this.acroField.setFlagTo(AcroTextFlags.RichText, false);\n    };\n    /**\n     * Show this text field on the specified page. For example:\n     * ```js\n     * const ubuntuFont = await pdfDoc.embedFont(ubuntuFontBytes)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const textField = form.createTextField('best.gundam')\n     * textField.setText('Exia')\n     *\n     * textField.addToPage(page, {\n     *   x: 50,\n     *   y: 75,\n     *   width: 200,\n     *   height: 100,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     *   font: ubuntuFont,\n     * })\n     * ```\n     * This will create a new widget for this text field.\n     * @param page The page to which this text field widget should be added.\n     * @param options The options to be used when adding this text field widget.\n     */\n    PDFTextField.prototype.addToPage = function (page, options) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        if (!options)\n            options = {};\n        if (!('textColor' in options))\n            options.textColor = rgb(0, 0, 0);\n        if (!('backgroundColor' in options))\n            options.backgroundColor = rgb(1, 1, 1);\n        if (!('borderColor' in options))\n            options.borderColor = rgb(0, 0, 0);\n        if (!('borderWidth' in options))\n            options.borderWidth = 1;\n        // Create a widget for this text field\n        var widget = this.createWidget({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : 0,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : 0,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : 200,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : 50,\n            textColor: options.textColor,\n            backgroundColor: options.backgroundColor,\n            borderColor: options.borderColor,\n            borderWidth: (_e = options.borderWidth) !== null && _e !== void 0 ? _e : 0,\n            rotate: (_f = options.rotate) !== null && _f !== void 0 ? _f : degrees(0),\n            hidden: options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        this.acroField.addWidget(widgetRef);\n        // Set appearance streams for widget\n        var font = (_g = options.font) !== null && _g !== void 0 ? _g : this.doc.getForm().getDefaultFont();\n        this.updateWidgetAppearance(widget, font);\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if this text field has been marked as dirty, or if any of\n     * this text field's widgets do not have an appearance stream. For example:\n     * ```js\n     * const textField = form.getTextField('some.text.field')\n     * if (textField.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this text field needs an appearance update.\n     */\n    PDFTextField.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        if (this.isDirty())\n            return true;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream;\n            if (!hasAppearances)\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this text field's widgets using\n     * the default appearance provider for text fields. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const textField = form.getTextField('some.text.field')\n     * textField.defaultUpdateAppearances(helvetica)\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     */\n    PDFTextField.prototype.defaultUpdateAppearances = function (font) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        this.updateAppearances(font);\n    };\n    /**\n     * Update the appearance streams for each of this text field's widgets using\n     * the given appearance provider. If no `provider` is passed, the default\n     * appearance provider for text fields will be used. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const textField = form.getTextField('some.text.field')\n     * textField.updateAppearances(helvetica, (field, widget, font) => {\n     *   ...\n     *   return drawTextField(...)\n     * })\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFTextField.prototype.updateAppearances = function (font, provider) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            this.updateWidgetAppearance(widget, font, provider);\n        }\n        this.markAsClean();\n    };\n    PDFTextField.prototype.updateWidgetAppearance = function (widget, font, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultTextFieldAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget, font));\n        this.updateWidgetAppearanceWithFont(widget, font, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getTextField]] method, which will create an\n     * > instance of [[PDFTextField]] for you.\n     *\n     * Create an instance of [[PDFTextField]] from an existing acroText and ref\n     *\n     * @param acroText The underlying `PDFAcroText` for this text field.\n     * @param ref The unique reference for this text field.\n     * @param doc The document to which this text field will belong.\n     */\n    PDFTextField.of = function (acroText, ref, doc) {\n        return new PDFTextField(acroText, ref, doc);\n    };\n    return PDFTextField;\n}(PDFField));\nexport default PDFTextField;\n//# sourceMappingURL=PDFTextField.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport PDFDocument from \"../PDFDocument\";\nimport PDFButton from \"./PDFButton\";\nimport PDFCheckBox from \"./PDFCheckBox\";\nimport PDFDropdown from \"./PDFDropdown\";\nimport PDFOptionList from \"./PDFOptionList\";\nimport PDFRadioGroup from \"./PDFRadioGroup\";\nimport PDFSignature from \"./PDFSignature\";\nimport PDFTextField from \"./PDFTextField\";\nimport { NoSuchFieldError, UnexpectedFieldTypeError, FieldAlreadyExistsError, InvalidFieldNamePartError, } from \"../errors\";\nimport PDFFont from \"../PDFFont\";\nimport { StandardFonts } from \"../StandardFonts\";\nimport { rotateInPlace } from \"../operations\";\nimport { drawObject, popGraphicsState, pushGraphicsState, translate, } from \"../operators\";\nimport { PDFAcroForm, PDFAcroCheckBox, PDFAcroComboBox, PDFAcroListBox, PDFAcroRadioButton, PDFAcroSignature, PDFAcroText, PDFAcroPushButton, PDFAcroNonTerminal, PDFDict, PDFRef, createPDFAcroFields, PDFName, } from \"../../core\";\nimport { assertIs, Cache, assertOrUndefined } from \"../../utils\";\n/**\n * Represents the interactive form of a [[PDFDocument]].\n *\n * Interactive forms (sometimes called _AcroForms_) are collections of fields\n * designed to gather information from a user. A PDF document may contains any\n * number of fields that appear on various pages, all of which make up a single,\n * global interactive form spanning the entire document. This means that\n * instances of [[PDFDocument]] shall contain at most one [[PDFForm]].\n *\n * The fields of an interactive form are represented by [[PDFField]] instances.\n */\nvar PDFForm = /** @class */ (function () {\n    function PDFForm(acroForm, doc) {\n        var _this = this;\n        this.embedDefaultFont = function () {\n            return _this.doc.embedStandardFont(StandardFonts.Helvetica);\n        };\n        assertIs(acroForm, 'acroForm', [[PDFAcroForm, 'PDFAcroForm']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        this.acroForm = acroForm;\n        this.doc = doc;\n        this.dirtyFields = new Set();\n        this.defaultFontCache = Cache.populatedBy(this.embedDefaultFont);\n    }\n    /**\n     * Returns `true` if this [[PDFForm]] has XFA data. Most PDFs with form\n     * fields do not use XFA as it is not widely supported by PDF readers.\n     *\n     * > `pdf-lib` does not support creation, modification, or reading of XFA\n     * > fields.\n     *\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * if (form.hasXFA()) console.log('PDF has XFA data')\n     * ```\n     * @returns Whether or not this form has XFA data.\n     */\n    PDFForm.prototype.hasXFA = function () {\n        return this.acroForm.dict.has(PDFName.of('XFA'));\n    };\n    /**\n     * Disconnect the XFA data from this [[PDFForm]] (if any exists). This will\n     * force readers to fallback to standard fields if the [[PDFDocument]]\n     * contains any. For example:\n     *\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * form.deleteXFA()\n     * ```\n     */\n    PDFForm.prototype.deleteXFA = function () {\n        this.acroForm.dict.delete(PDFName.of('XFA'));\n    };\n    /**\n     * Get all fields contained in this [[PDFForm]]. For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const fields = form.getFields()\n     * fields.forEach(field => {\n     *   const type = field.constructor.name\n     *   const name = field.getName()\n     *   console.log(`${type}: ${name}`)\n     * })\n     * ```\n     * @returns An array of all fields in this form.\n     */\n    PDFForm.prototype.getFields = function () {\n        var allFields = this.acroForm.getAllFields();\n        var fields = [];\n        for (var idx = 0, len = allFields.length; idx < len; idx++) {\n            var _a = allFields[idx], acroField = _a[0], ref = _a[1];\n            var field = convertToPDFField(acroField, ref, this.doc);\n            if (field)\n                fields.push(field);\n        }\n        return fields;\n    };\n    /**\n     * Get the field in this [[PDFForm]] with the given name. For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const field = form.getFieldMaybe('Page1.Foo.Bar[0]')\n     * if (field) console.log('Field exists!')\n     * ```\n     * @param name A fully qualified field name.\n     * @returns The field with the specified name, if one exists.\n     */\n    PDFForm.prototype.getFieldMaybe = function (name) {\n        assertIs(name, 'name', ['string']);\n        var fields = this.getFields();\n        for (var idx = 0, len = fields.length; idx < len; idx++) {\n            var field = fields[idx];\n            if (field.getName() === name)\n                return field;\n        }\n        return undefined;\n    };\n    /**\n     * Get the field in this [[PDFForm]] with the given name. For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const field = form.getField('Page1.Foo.Bar[0]')\n     * ```\n     * If no field exists with the provided name, an error will be thrown.\n     * @param name A fully qualified field name.\n     * @returns The field with the specified name.\n     */\n    PDFForm.prototype.getField = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getFieldMaybe(name);\n        if (field)\n            return field;\n        throw new NoSuchFieldError(name);\n    };\n    /**\n     * Get the button field in this [[PDFForm]] with the given name. For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const button = form.getButton('Page1.Foo.Button[0]')\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a button.\n     * @param name A fully qualified button name.\n     * @returns The button with the specified name.\n     */\n    PDFForm.prototype.getButton = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFButton)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFButton, field);\n    };\n    /**\n     * Get the check box field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const checkBox = form.getCheckBox('Page1.Foo.CheckBox[0]')\n     * checkBox.check()\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a check box.\n     * @param name A fully qualified check box name.\n     * @returns The check box with the specified name.\n     */\n    PDFForm.prototype.getCheckBox = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFCheckBox)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFCheckBox, field);\n    };\n    /**\n     * Get the dropdown field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const dropdown = form.getDropdown('Page1.Foo.Dropdown[0]')\n     * const options = dropdown.getOptions()\n     * dropdown.select(options[0])\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a dropdown.\n     * @param name A fully qualified dropdown name.\n     * @returns The dropdown with the specified name.\n     */\n    PDFForm.prototype.getDropdown = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFDropdown)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFDropdown, field);\n    };\n    /**\n     * Get the option list field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const optionList = form.getOptionList('Page1.Foo.OptionList[0]')\n     * const options = optionList.getOptions()\n     * optionList.select(options[0])\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not an option list.\n     * @param name A fully qualified option list name.\n     * @returns The option list with the specified name.\n     */\n    PDFForm.prototype.getOptionList = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFOptionList)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFOptionList, field);\n    };\n    /**\n     * Get the radio group field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const radioGroup = form.getRadioGroup('Page1.Foo.RadioGroup[0]')\n     * const options = radioGroup.getOptions()\n     * radioGroup.select(options[0])\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a radio group.\n     * @param name A fully qualified radio group name.\n     * @returns The radio group with the specified name.\n     */\n    PDFForm.prototype.getRadioGroup = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFRadioGroup)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFRadioGroup, field);\n    };\n    /**\n     * Get the signature field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const signature = form.getSignature('Page1.Foo.Signature[0]')\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a signature.\n     * @param name A fully qualified signature name.\n     * @returns The signature with the specified name.\n     */\n    PDFForm.prototype.getSignature = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFSignature)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFSignature, field);\n    };\n    /**\n     * Get the text field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const textField = form.getTextField('Page1.Foo.TextField[0]')\n     * textField.setText('Are you designed to act or to be acted upon?')\n     * ```\n     * An error will be thrown if no field exists with the provided name, or if\n     * the field exists but is not a text field.\n     * @param name A fully qualified text field name.\n     * @returns The text field with the specified name.\n     */\n    PDFForm.prototype.getTextField = function (name) {\n        assertIs(name, 'name', ['string']);\n        var field = this.getField(name);\n        if (field instanceof PDFTextField)\n            return field;\n        throw new UnexpectedFieldTypeError(name, PDFTextField, field);\n    };\n    /**\n     * Create a new button field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const button = form.createButton('cool.new.button')\n     *\n     * button.addToPage('Do Stuff', font, page)\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new button.\n     * @returns The new button field.\n     */\n    PDFForm.prototype.createButton = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var button = PDFAcroPushButton.create(this.doc.context);\n        button.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [button, button.ref], nameParts.terminal);\n        return PDFButton.of(button, button.ref, this.doc);\n    };\n    /**\n     * Create a new check box field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const checkBox = form.createCheckBox('cool.new.checkBox')\n     *\n     * checkBox.addToPage(page)\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new check box.\n     * @returns The new check box field.\n     */\n    PDFForm.prototype.createCheckBox = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var checkBox = PDFAcroCheckBox.create(this.doc.context);\n        checkBox.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [checkBox, checkBox.ref], nameParts.terminal);\n        return PDFCheckBox.of(checkBox, checkBox.ref, this.doc);\n    };\n    /**\n     * Create a new dropdown field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const dropdown = form.createDropdown('cool.new.dropdown')\n     *\n     * dropdown.addToPage(font, page)\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new dropdown.\n     * @returns The new dropdown field.\n     */\n    PDFForm.prototype.createDropdown = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var comboBox = PDFAcroComboBox.create(this.doc.context);\n        comboBox.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [comboBox, comboBox.ref], nameParts.terminal);\n        return PDFDropdown.of(comboBox, comboBox.ref, this.doc);\n    };\n    /**\n     * Create a new option list field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const optionList = form.createOptionList('cool.new.optionList')\n     *\n     * optionList.addToPage(font, page)\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new option list.\n     * @returns The new option list field.\n     */\n    PDFForm.prototype.createOptionList = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var listBox = PDFAcroListBox.create(this.doc.context);\n        listBox.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [listBox, listBox.ref], nameParts.terminal);\n        return PDFOptionList.of(listBox, listBox.ref, this.doc);\n    };\n    /**\n     * Create a new radio group field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const radioGroup = form.createRadioGroup('cool.new.radioGroup')\n     *\n     * radioGroup.addOptionToPage('is-dog', page, { y: 0 })\n     * radioGroup.addOptionToPage('is-cat', page, { y: 75 })\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new radio group.\n     * @returns The new radio group field.\n     */\n    PDFForm.prototype.createRadioGroup = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var radioButton = PDFAcroRadioButton.create(this.doc.context);\n        radioButton.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [radioButton, radioButton.ref], nameParts.terminal);\n        return PDFRadioGroup.of(radioButton, radioButton.ref, this.doc);\n    };\n    /**\n     * Create a new text field in this [[PDFForm]] with the given name.\n     * For example:\n     * ```js\n     * const font = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const textField = form.createTextField('cool.new.textField')\n     *\n     * textField.addToPage(font, page)\n     * ```\n     * An error will be thrown if a field already exists with the provided name.\n     * @param name The fully qualified name for the new radio group.\n     * @returns The new radio group field.\n     */\n    PDFForm.prototype.createTextField = function (name) {\n        assertIs(name, 'name', ['string']);\n        var nameParts = splitFieldName(name);\n        var parent = this.findOrCreateNonTerminals(nameParts.nonTerminal);\n        var text = PDFAcroText.create(this.doc.context);\n        text.setPartialName(nameParts.terminal);\n        addFieldToParent(parent, [text, text.ref], nameParts.terminal);\n        return PDFTextField.of(text, text.ref, this.doc);\n    };\n    /**\n     * Flatten all fields in this [[PDFForm]].\n     *\n     * Flattening a form field will take the current appearance for each of that\n     * field's widgets and make them part of their page's content stream. All form\n     * fields and annotations associated are then removed. Note that once a form\n     * has been flattened its fields can no longer be accessed or edited.\n     *\n     * This operation is often used after filling form fields to ensure a\n     * consistent appearance across different PDF readers and/or printers.\n     * Another common use case is to copy a template document with form fields\n     * into another document. In this scenario you would load the template\n     * document, fill its fields, flatten it, and then copy its pages into the\n     * recipient document - the filled fields will be copied over.\n     *\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm();\n     * form.flatten();\n     * ```\n     */\n    PDFForm.prototype.flatten = function (options) {\n        if (options === void 0) { options = { updateFieldAppearances: true }; }\n        if (options.updateFieldAppearances) {\n            this.updateFieldAppearances();\n        }\n        var fields = this.getFields();\n        for (var i = 0, lenFields = fields.length; i < lenFields; i++) {\n            var field = fields[i];\n            var widgets = field.acroField.getWidgets();\n            for (var j = 0, lenWidgets = widgets.length; j < lenWidgets; j++) {\n                var widget = widgets[j];\n                var page = this.findWidgetPage(widget);\n                var widgetRef = this.findWidgetAppearanceRef(field, widget);\n                var xObjectKey = page.node.newXObject('FlatWidget', widgetRef);\n                var rectangle = widget.getRectangle();\n                var operators = __spreadArrays([\n                    pushGraphicsState(),\n                    translate(rectangle.x, rectangle.y)\n                ], rotateInPlace(__assign(__assign({}, rectangle), { rotation: 0 })), [\n                    drawObject(xObjectKey),\n                    popGraphicsState(),\n                ]).filter(Boolean);\n                page.pushOperators.apply(page, operators);\n            }\n            this.removeField(field);\n        }\n    };\n    /**\n     * Remove a field from this [[PDFForm]].\n     *\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm();\n     * const ageField = form.getFields().find(x => x.getName() === 'Age');\n     * form.removeField(ageField);\n     * ```\n     */\n    PDFForm.prototype.removeField = function (field) {\n        var widgets = field.acroField.getWidgets();\n        var pages = new Set();\n        for (var i = 0, len = widgets.length; i < len; i++) {\n            var widget = widgets[i];\n            var widgetRef = this.findWidgetAppearanceRef(field, widget);\n            var page = this.findWidgetPage(widget);\n            pages.add(page);\n            page.node.removeAnnot(widgetRef);\n        }\n        pages.forEach(function (page) { return page.node.removeAnnot(field.ref); });\n        this.acroForm.removeField(field.acroField);\n        var fieldKids = field.acroField.normalizedEntries().Kids;\n        var kidsCount = fieldKids.size();\n        for (var childIndex = 0; childIndex < kidsCount; childIndex++) {\n            var child = fieldKids.get(childIndex);\n            if (child instanceof PDFRef) {\n                this.doc.context.delete(child);\n            }\n        }\n        this.doc.context.delete(field.ref);\n    };\n    /**\n     * Update the appearance streams for all widgets of all fields in this\n     * [[PDFForm]]. Appearance streams will only be created for a widget if it\n     * does not have any existing appearance streams, or the field's value has\n     * changed (e.g. by calling [[PDFTextField.setText]] or\n     * [[PDFDropdown.select]]).\n     *\n     * For example:\n     * ```js\n     * const courier = await pdfDoc.embedFont(StandardFonts.Courier)\n     * const form = pdfDoc.getForm()\n     * form.updateFieldAppearances(courier)\n     * ```\n     *\n     * **IMPORTANT:** The default value for the `font` parameter is\n     * [[StandardFonts.Helvetica]]. Note that this is a WinAnsi font. This means\n     * that encoding errors will be thrown if any fields contain text with\n     * characters outside the WinAnsi character set (the latin alphabet).\n     *\n     * Embedding a custom font and passing that as the `font`\n     * parameter allows you to generate appearance streams with non WinAnsi\n     * characters (assuming your custom font supports them).\n     *\n     * > **NOTE:** The [[PDFDocument.save]] method will call this method to\n     * > update appearances automatically if a form was accessed via the\n     * > [[PDFDocument.getForm]] method prior to saving.\n     *\n     * @param font Optionally, the font to use when creating new appearances.\n     */\n    PDFForm.prototype.updateFieldAppearances = function (font) {\n        assertOrUndefined(font, 'font', [[PDFFont, 'PDFFont']]);\n        font = font !== null && font !== void 0 ? font : this.getDefaultFont();\n        var fields = this.getFields();\n        for (var idx = 0, len = fields.length; idx < len; idx++) {\n            var field = fields[idx];\n            if (field.needsAppearancesUpdate()) {\n                field.defaultUpdateAppearances(font);\n            }\n        }\n    };\n    /**\n     * Mark a field as dirty. This will cause its appearance streams to be\n     * updated by [[PDFForm.updateFieldAppearances]].\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const field = form.getField('foo.bar')\n     * form.markFieldAsDirty(field.ref)\n     * ```\n     * @param fieldRef The reference to the field that should be marked.\n     */\n    PDFForm.prototype.markFieldAsDirty = function (fieldRef) {\n        assertOrUndefined(fieldRef, 'fieldRef', [[PDFRef, 'PDFRef']]);\n        this.dirtyFields.add(fieldRef);\n    };\n    /**\n     * Mark a field as dirty. This will cause its appearance streams to not be\n     * updated by [[PDFForm.updateFieldAppearances]].\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const field = form.getField('foo.bar')\n     * form.markFieldAsClean(field.ref)\n     * ```\n     * @param fieldRef The reference to the field that should be marked.\n     */\n    PDFForm.prototype.markFieldAsClean = function (fieldRef) {\n        assertOrUndefined(fieldRef, 'fieldRef', [[PDFRef, 'PDFRef']]);\n        this.dirtyFields.delete(fieldRef);\n    };\n    /**\n     * Returns `true` is the specified field has been marked as dirty.\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const field = form.getField('foo.bar')\n     * if (form.fieldIsDirty(field.ref)) console.log('Field is dirty')\n     * ```\n     * @param fieldRef The reference to the field that should be checked.\n     * @returns Whether or not the specified field is dirty.\n     */\n    PDFForm.prototype.fieldIsDirty = function (fieldRef) {\n        assertOrUndefined(fieldRef, 'fieldRef', [[PDFRef, 'PDFRef']]);\n        return this.dirtyFields.has(fieldRef);\n    };\n    PDFForm.prototype.getDefaultFont = function () {\n        return this.defaultFontCache.access();\n    };\n    PDFForm.prototype.findWidgetPage = function (widget) {\n        var pageRef = widget.P();\n        var page = this.doc.getPages().find(function (x) { return x.ref === pageRef; });\n        if (page === undefined) {\n            var widgetRef = this.doc.context.getObjectRef(widget.dict);\n            if (widgetRef === undefined) {\n                throw new Error('Could not find PDFRef for PDFObject');\n            }\n            page = this.doc.findPageForAnnotationRef(widgetRef);\n            if (page === undefined) {\n                throw new Error(\"Could not find page for PDFRef \" + widgetRef);\n            }\n        }\n        return page;\n    };\n    PDFForm.prototype.findWidgetAppearanceRef = function (field, widget) {\n        var _a;\n        var refOrDict = widget.getNormalAppearance();\n        if (refOrDict instanceof PDFDict &&\n            (field instanceof PDFCheckBox || field instanceof PDFRadioGroup)) {\n            var value = field.acroField.getValue();\n            var ref = (_a = refOrDict.get(value)) !== null && _a !== void 0 ? _a : refOrDict.get(PDFName.of('Off'));\n            if (ref instanceof PDFRef) {\n                refOrDict = ref;\n            }\n        }\n        if (!(refOrDict instanceof PDFRef)) {\n            var name_1 = field.getName();\n            throw new Error(\"Failed to extract appearance ref for: \" + name_1);\n        }\n        return refOrDict;\n    };\n    PDFForm.prototype.findOrCreateNonTerminals = function (partialNames) {\n        var nonTerminal = [\n            this.acroForm,\n        ];\n        for (var idx = 0, len = partialNames.length; idx < len; idx++) {\n            var namePart = partialNames[idx];\n            if (!namePart)\n                throw new InvalidFieldNamePartError(namePart);\n            var parent_1 = nonTerminal[0], parentRef = nonTerminal[1];\n            var res = this.findNonTerminal(namePart, parent_1);\n            if (res) {\n                nonTerminal = res;\n            }\n            else {\n                var node = PDFAcroNonTerminal.create(this.doc.context);\n                node.setPartialName(namePart);\n                node.setParent(parentRef);\n                var nodeRef = this.doc.context.register(node.dict);\n                parent_1.addField(nodeRef);\n                nonTerminal = [node, nodeRef];\n            }\n        }\n        return nonTerminal;\n    };\n    PDFForm.prototype.findNonTerminal = function (partialName, parent) {\n        var fields = parent instanceof PDFAcroForm\n            ? this.acroForm.getFields()\n            : createPDFAcroFields(parent.Kids());\n        for (var idx = 0, len = fields.length; idx < len; idx++) {\n            var _a = fields[idx], field = _a[0], ref = _a[1];\n            if (field.getPartialName() === partialName) {\n                if (field instanceof PDFAcroNonTerminal)\n                    return [field, ref];\n                throw new FieldAlreadyExistsError(partialName);\n            }\n        }\n        return undefined;\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.getForm]] method, which will create an\n     * > instance of [[PDFForm]] for you.\n     *\n     * Create an instance of [[PDFForm]] from an existing acroForm and embedder\n     *\n     * @param acroForm The underlying `PDFAcroForm` for this form.\n     * @param doc The document to which the form will belong.\n     */\n    PDFForm.of = function (acroForm, doc) {\n        return new PDFForm(acroForm, doc);\n    };\n    return PDFForm;\n}());\nexport default PDFForm;\nvar convertToPDFField = function (field, ref, doc) {\n    if (field instanceof PDFAcroPushButton)\n        return PDFButton.of(field, ref, doc);\n    if (field instanceof PDFAcroCheckBox)\n        return PDFCheckBox.of(field, ref, doc);\n    if (field instanceof PDFAcroComboBox)\n        return PDFDropdown.of(field, ref, doc);\n    if (field instanceof PDFAcroListBox)\n        return PDFOptionList.of(field, ref, doc);\n    if (field instanceof PDFAcroText)\n        return PDFTextField.of(field, ref, doc);\n    if (field instanceof PDFAcroRadioButton) {\n        return PDFRadioGroup.of(field, ref, doc);\n    }\n    if (field instanceof PDFAcroSignature) {\n        return PDFSignature.of(field, ref, doc);\n    }\n    return undefined;\n};\nvar splitFieldName = function (fullyQualifiedName) {\n    if (fullyQualifiedName.length === 0) {\n        throw new Error('PDF field names must not be empty strings');\n    }\n    var parts = fullyQualifiedName.split('.');\n    for (var idx = 0, len = parts.length; idx < len; idx++) {\n        if (parts[idx] === '') {\n            throw new Error(\"Periods in PDF field names must be separated by at least one character: \\\"\" + fullyQualifiedName + \"\\\"\");\n        }\n    }\n    if (parts.length === 1)\n        return { nonTerminal: [], terminal: parts[0] };\n    return {\n        nonTerminal: parts.slice(0, parts.length - 1),\n        terminal: parts[parts.length - 1],\n    };\n};\nvar addFieldToParent = function (_a, _b, partialName) {\n    var parent = _a[0], parentRef = _a[1];\n    var field = _b[0], fieldRef = _b[1];\n    var entries = parent.normalizedEntries();\n    var fields = createPDFAcroFields('Kids' in entries ? entries.Kids : entries.Fields);\n    for (var idx = 0, len = fields.length; idx < len; idx++) {\n        if (fields[idx][0].getPartialName() === partialName) {\n            throw new FieldAlreadyExistsError(partialName);\n        }\n    }\n    parent.addField(fieldRef);\n    field.setParent(parentRef);\n};\n//# sourceMappingURL=PDFForm.js.map","export var ParseSpeeds;\n(function (ParseSpeeds) {\n    ParseSpeeds[ParseSpeeds[\"Fastest\"] = Infinity] = \"Fastest\";\n    ParseSpeeds[ParseSpeeds[\"Fast\"] = 1500] = \"Fast\";\n    ParseSpeeds[ParseSpeeds[\"Medium\"] = 500] = \"Medium\";\n    ParseSpeeds[ParseSpeeds[\"Slow\"] = 100] = \"Slow\";\n})(ParseSpeeds || (ParseSpeeds = {}));\n//# sourceMappingURL=PDFDocumentOptions.js.map","export var PageSizes = {\n    '4A0': [4767.87, 6740.79],\n    '2A0': [3370.39, 4767.87],\n    A0: [2383.94, 3370.39],\n    A1: [1683.78, 2383.94],\n    A2: [1190.55, 1683.78],\n    A3: [841.89, 1190.55],\n    A4: [595.28, 841.89],\n    A5: [419.53, 595.28],\n    A6: [297.64, 419.53],\n    A7: [209.76, 297.64],\n    A8: [147.4, 209.76],\n    A9: [104.88, 147.4],\n    A10: [73.7, 104.88],\n    B0: [2834.65, 4008.19],\n    B1: [2004.09, 2834.65],\n    B2: [1417.32, 2004.09],\n    B3: [1000.63, 1417.32],\n    B4: [708.66, 1000.63],\n    B5: [498.9, 708.66],\n    B6: [354.33, 498.9],\n    B7: [249.45, 354.33],\n    B8: [175.75, 249.45],\n    B9: [124.72, 175.75],\n    B10: [87.87, 124.72],\n    C0: [2599.37, 3676.54],\n    C1: [1836.85, 2599.37],\n    C2: [1298.27, 1836.85],\n    C3: [918.43, 1298.27],\n    C4: [649.13, 918.43],\n    C5: [459.21, 649.13],\n    C6: [323.15, 459.21],\n    C7: [229.61, 323.15],\n    C8: [161.57, 229.61],\n    C9: [113.39, 161.57],\n    C10: [79.37, 113.39],\n    RA0: [2437.8, 3458.27],\n    RA1: [1729.13, 2437.8],\n    RA2: [1218.9, 1729.13],\n    RA3: [864.57, 1218.9],\n    RA4: [609.45, 864.57],\n    SRA0: [2551.18, 3628.35],\n    SRA1: [1814.17, 2551.18],\n    SRA2: [1275.59, 1814.17],\n    SRA3: [907.09, 1275.59],\n    SRA4: [637.8, 907.09],\n    Executive: [521.86, 756.0],\n    Folio: [612.0, 936.0],\n    Legal: [612.0, 1008.0],\n    Letter: [612.0, 792.0],\n    Tabloid: [792.0, 1224.0],\n};\n//# sourceMappingURL=sizes.js.map","export var BlendMode;\n(function (BlendMode) {\n    BlendMode[\"Normal\"] = \"Normal\";\n    BlendMode[\"Multiply\"] = \"Multiply\";\n    BlendMode[\"Screen\"] = \"Screen\";\n    BlendMode[\"Overlay\"] = \"Overlay\";\n    BlendMode[\"Darken\"] = \"Darken\";\n    BlendMode[\"Lighten\"] = \"Lighten\";\n    BlendMode[\"ColorDodge\"] = \"ColorDodge\";\n    BlendMode[\"ColorBurn\"] = \"ColorBurn\";\n    BlendMode[\"HardLight\"] = \"HardLight\";\n    BlendMode[\"SoftLight\"] = \"SoftLight\";\n    BlendMode[\"Difference\"] = \"Difference\";\n    BlendMode[\"Exclusion\"] = \"Exclusion\";\n})(BlendMode || (BlendMode = {}));\n//# sourceMappingURL=PDFPageOptions.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { PDFName, PDFArray, PDFDict, PDFHexString } from \"../core\";\n/**\n * Represents a file that has been embedded in a [[PDFDocument]].\n */\nvar PDFEmbeddedFile = /** @class */ (function () {\n    function PDFEmbeddedFile(ref, doc, embedder) {\n        this.alreadyEmbedded = false;\n        this.ref = ref;\n        this.doc = doc;\n        this.embedder = embedder;\n    }\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFDocument.save]] and [[PDFDocument.saveAsBase64]] methods will\n     * > automatically ensure all embeddable files get embedded.\n     *\n     * Embed this embeddable file in its document.\n     *\n     * @returns Resolves when the embedding is complete.\n     */\n    PDFEmbeddedFile.prototype.embed = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var ref, Names, EmbeddedFiles, EFNames, AF;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.alreadyEmbedded) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.embedder.embedIntoContext(this.doc.context, this.ref)];\n                    case 1:\n                        ref = _a.sent();\n                        if (!this.doc.catalog.has(PDFName.of('Names'))) {\n                            this.doc.catalog.set(PDFName.of('Names'), this.doc.context.obj({}));\n                        }\n                        Names = this.doc.catalog.lookup(PDFName.of('Names'), PDFDict);\n                        if (!Names.has(PDFName.of('EmbeddedFiles'))) {\n                            Names.set(PDFName.of('EmbeddedFiles'), this.doc.context.obj({}));\n                        }\n                        EmbeddedFiles = Names.lookup(PDFName.of('EmbeddedFiles'), PDFDict);\n                        if (!EmbeddedFiles.has(PDFName.of('Names'))) {\n                            EmbeddedFiles.set(PDFName.of('Names'), this.doc.context.obj([]));\n                        }\n                        EFNames = EmbeddedFiles.lookup(PDFName.of('Names'), PDFArray);\n                        EFNames.push(PDFHexString.fromText(this.embedder.fileName));\n                        EFNames.push(ref);\n                        /**\n                         * The AF-Tag is needed to achieve PDF-A3 compliance for embedded files\n                         *\n                         * The following document outlines the uses cases of the associated files (AF) tag.\n                         * See:\n                         * https://www.pdfa.org/wp-content/uploads/2018/10/PDF20_AN002-AF.pdf\n                         */\n                        if (!this.doc.catalog.has(PDFName.of('AF'))) {\n                            this.doc.catalog.set(PDFName.of('AF'), this.doc.context.obj([]));\n                        }\n                        AF = this.doc.catalog.lookup(PDFName.of('AF'), PDFArray);\n                        AF.push(ref);\n                        this.alreadyEmbedded = true;\n                        _a.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.attach]] method, which will create\n     * instances of [[PDFEmbeddedFile]] for you.\n     *\n     * Create an instance of [[PDFEmbeddedFile]] from an existing ref and embedder\n     *\n     * @param ref The unique reference for this file.\n     * @param doc The document to which the file will belong.\n     * @param embedder The embedder that will be used to embed the file.\n     */\n    PDFEmbeddedFile.of = function (ref, doc, embedder) {\n        return new PDFEmbeddedFile(ref, doc, embedder);\n    };\n    return PDFEmbeddedFile;\n}());\nexport default PDFEmbeddedFile;\n//# sourceMappingURL=PDFEmbeddedFile.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { PDFName, PDFArray, PDFDict, PDFHexString } from \"../core\";\n/**\n * Represents JavaScript that has been embedded in a [[PDFDocument]].\n */\nvar PDFJavaScript = /** @class */ (function () {\n    function PDFJavaScript(ref, doc, embedder) {\n        this.alreadyEmbedded = false;\n        this.ref = ref;\n        this.doc = doc;\n        this.embedder = embedder;\n    }\n    /**\n     * > **NOTE:** You probably don't need to call this method directly. The\n     * > [[PDFDocument.save]] and [[PDFDocument.saveAsBase64]] methods will\n     * > automatically ensure all JavaScripts get embedded.\n     *\n     * Embed this JavaScript in its document.\n     *\n     * @returns Resolves when the embedding is complete.\n     */\n    PDFJavaScript.prototype.embed = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, catalog, context, ref, Names, Javascript, JSNames;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!!this.alreadyEmbedded) return [3 /*break*/, 2];\n                        _a = this.doc, catalog = _a.catalog, context = _a.context;\n                        return [4 /*yield*/, this.embedder.embedIntoContext(this.doc.context, this.ref)];\n                    case 1:\n                        ref = _b.sent();\n                        if (!catalog.has(PDFName.of('Names'))) {\n                            catalog.set(PDFName.of('Names'), context.obj({}));\n                        }\n                        Names = catalog.lookup(PDFName.of('Names'), PDFDict);\n                        if (!Names.has(PDFName.of('JavaScript'))) {\n                            Names.set(PDFName.of('JavaScript'), context.obj({}));\n                        }\n                        Javascript = Names.lookup(PDFName.of('JavaScript'), PDFDict);\n                        if (!Javascript.has(PDFName.of('Names'))) {\n                            Javascript.set(PDFName.of('Names'), context.obj([]));\n                        }\n                        JSNames = Javascript.lookup(PDFName.of('Names'), PDFArray);\n                        JSNames.push(PDFHexString.fromText(this.embedder.scriptName));\n                        JSNames.push(ref);\n                        this.alreadyEmbedded = true;\n                        _b.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.addJavaScript]] method, which will\n     * create instances of [[PDFJavaScript]] for you.\n     *\n     * Create an instance of [[PDFJavaScript]] from an existing ref and script\n     *\n     * @param ref The unique reference for this script.\n     * @param doc The document to which the script will belong.\n     * @param embedder The embedder that will be used to embed the script.\n     */\n    PDFJavaScript.of = function (ref, doc, embedder) {\n        return new PDFJavaScript(ref, doc, embedder);\n    };\n    return PDFJavaScript;\n}());\nexport default PDFJavaScript;\n//# sourceMappingURL=PDFJavaScript.js.map","import { __awaiter, __generator } from \"tslib\";\nimport PDFHexString from \"../objects/PDFHexString\";\nvar JavaScriptEmbedder = /** @class */ (function () {\n    function JavaScriptEmbedder(script, scriptName) {\n        this.script = script;\n        this.scriptName = scriptName;\n    }\n    JavaScriptEmbedder.for = function (script, scriptName) {\n        return new JavaScriptEmbedder(script, scriptName);\n    };\n    JavaScriptEmbedder.prototype.embedIntoContext = function (context, ref) {\n        return __awaiter(this, void 0, void 0, function () {\n            var jsActionDict;\n            return __generator(this, function (_a) {\n                jsActionDict = context.obj({\n                    Type: 'Action',\n                    S: 'JavaScript',\n                    JS: PDFHexString.fromText(this.script),\n                });\n                if (ref) {\n                    context.assign(ref, jsActionDict);\n                    return [2 /*return*/, ref];\n                }\n                else {\n                    return [2 /*return*/, context.register(jsActionDict)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    return JavaScriptEmbedder;\n}());\nexport default JavaScriptEmbedder;\n//# sourceMappingURL=JavaScriptEmbedder.js.map","import { __awaiter, __generator, __rest } from \"tslib\";\nimport { EncryptedPDFError, FontkitNotRegisteredError, ForeignPageError, RemovePageFromEmptyDocumentError, } from \"./errors\";\nimport PDFEmbeddedPage from \"./PDFEmbeddedPage\";\nimport PDFFont from \"./PDFFont\";\nimport PDFImage from \"./PDFImage\";\nimport PDFPage from \"./PDFPage\";\nimport PDFForm from \"./form/PDFForm\";\nimport { PageSizes } from \"./sizes\";\nimport { CustomFontEmbedder, CustomFontSubsetEmbedder, JpegEmbedder, PageEmbeddingMismatchedContextError, PDFCatalog, PDFContext, PDFDict, PDFHexString, PDFName, PDFObjectCopier, PDFPageEmbedder, PDFPageLeaf, PDFPageTree, PDFParser, PDFStreamWriter, PDFString, PDFWriter, PngEmbedder, StandardFontEmbedder, UnexpectedObjectTypeError, } from \"../core\";\nimport { ParseSpeeds, } from \"./PDFDocumentOptions\";\nimport { assertIs, assertIsOneOfOrUndefined, assertOrUndefined, assertRange, Cache, canBeConvertedToUint8Array, encodeToBase64, isStandardFont, pluckIndices, range, toUint8Array, } from \"../utils\";\nimport FileEmbedder, { AFRelationship } from \"../core/embedders/FileEmbedder\";\nimport PDFEmbeddedFile from \"./PDFEmbeddedFile\";\nimport PDFJavaScript from \"./PDFJavaScript\";\nimport JavaScriptEmbedder from \"../core/embedders/JavaScriptEmbedder\";\n/**\n * Represents a PDF document.\n */\nvar PDFDocument = /** @class */ (function () {\n    function PDFDocument(context, ignoreEncryption, updateMetadata) {\n        var _this = this;\n        /** The default word breaks used in PDFPage.drawText */\n        this.defaultWordBreaks = [' '];\n        this.computePages = function () {\n            var pages = [];\n            _this.catalog.Pages().traverse(function (node, ref) {\n                if (node instanceof PDFPageLeaf) {\n                    var page = _this.pageMap.get(node);\n                    if (!page) {\n                        page = PDFPage.of(node, ref, _this);\n                        _this.pageMap.set(node, page);\n                    }\n                    pages.push(page);\n                }\n            });\n            return pages;\n        };\n        this.getOrCreateForm = function () {\n            var acroForm = _this.catalog.getOrCreateAcroForm();\n            return PDFForm.of(acroForm, _this);\n        };\n        assertIs(context, 'context', [[PDFContext, 'PDFContext']]);\n        assertIs(ignoreEncryption, 'ignoreEncryption', ['boolean']);\n        this.context = context;\n        this.catalog = context.lookup(context.trailerInfo.Root);\n        this.isEncrypted = !!context.lookup(context.trailerInfo.Encrypt);\n        this.pageCache = Cache.populatedBy(this.computePages);\n        this.pageMap = new Map();\n        this.formCache = Cache.populatedBy(this.getOrCreateForm);\n        this.fonts = [];\n        this.images = [];\n        this.embeddedPages = [];\n        this.embeddedFiles = [];\n        this.javaScripts = [];\n        if (!ignoreEncryption && this.isEncrypted)\n            throw new EncryptedPDFError();\n        if (updateMetadata)\n            this.updateInfoDict();\n    }\n    /**\n     * Load an existing [[PDFDocument]]. The input data can be provided in\n     * multiple formats:\n     *\n     * | Type          | Contents                                               |\n     * | ------------- | ------------------------------------------------------ |\n     * | `string`      | A base64 encoded string (or data URI) containing a PDF |\n     * | `Uint8Array`  | The raw bytes of a PDF                                 |\n     * | `ArrayBuffer` | The raw bytes of a PDF                                 |\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument } from 'pdf-lib'\n     *\n     * // pdf=string\n     * const base64 =\n     *  'JVBERi0xLjcKJYGBgYEKCjUgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbm' +\n     *  'd0aCAxMDQKPj4Kc3RyZWFtCniccwrhMlAAwaJ0Ln2P1Jyy1JLM5ERdc0MjCwUjE4WQNC4Q' +\n     *  '6cNlCFZkqGCqYGSqEJLLZWNuYGZiZmbkYuZsZmlmZGRgZmluDCQNzc3NTM2NzdzMXMxMjQ' +\n     *  'ztFEKyuEK0uFxDuAAOERdVCmVuZHN0cmVhbQplbmRvYmoKCjYgMCBvYmoKPDwKL0ZpbHRl' +\n     *  'ciAvRmxhdGVEZWNvZGUKL1R5cGUgL09ialN0bQovTiA0Ci9GaXJzdCAyMAovTGVuZ3RoID' +\n     *  'IxNQo+PgpzdHJlYW0KeJxVj9GqwjAMhu/zFHkBzTo3nCCCiiKIHPEICuJF3cKoSCu2E8/b' +\n     *  '20wPIr1p8v9/8kVhgilmGfawX2CGaVrgcAi0/bsy0lrX7IGWpvJ4iJYEN3gEmrrGBlQwGs' +\n     *  'HHO9VBX1wNrxAqMX87RBD5xpJuddqwd82tjAHxzV1U5LPgy52DKXWnr1Lheg+j/c/pzGVr' +\n     *  'iqV0VlwZPXGPCJjElw/ybkwUmeoWgxesDXGhHJC/D/iikp1Av80ptKU0FdBEe25pPihAM1' +\n     *  'u6ytgaaWfs2Hrz35CJT1+EWmAKZW5kc3RyZWFtCmVuZG9iagoKNyAwIG9iago8PAovU2l6' +\n     *  'ZSA4Ci9Sb290IDIgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9UeXBlIC9YUmVmCi9MZW' +\n     *  '5ndGggMzgKL1cgWyAxIDIgMiBdCi9JbmRleCBbIDAgOCBdCj4+CnN0cmVhbQp4nBXEwREA' +\n     *  'EBAEsCwz3vrvRmOOyyOoGhZdutHN2MT55fIAVocD+AplbmRzdHJlYW0KZW5kb2JqCgpzdG' +\n     *  'FydHhyZWYKNTEwCiUlRU9G'\n     *\n     * const dataUri = 'data:application/pdf;base64,' + base64\n     *\n     * const pdfDoc1 = await PDFDocument.load(base64)\n     * const pdfDoc2 = await PDFDocument.load(dataUri)\n     *\n     * // pdf=Uint8Array\n     * import fs from 'fs'\n     * const uint8Array = fs.readFileSync('with_update_sections.pdf')\n     * const pdfDoc3 = await PDFDocument.load(uint8Array)\n     *\n     * // pdf=ArrayBuffer\n     * const url = 'https://pdf-lib.js.org/assets/with_update_sections.pdf'\n     * const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())\n     * const pdfDoc4 = await PDFDocument.load(arrayBuffer)\n     *\n     * ```\n     *\n     * @param pdf The input data containing a PDF document.\n     * @param options The options to be used when loading the document.\n     * @returns Resolves with a document loaded from the input.\n     */\n    PDFDocument.load = function (pdf, options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, ignoreEncryption, _b, parseSpeed, _c, throwOnInvalidObject, _d, updateMetadata, _e, capNumbers, bytes, context;\n            return __generator(this, function (_f) {\n                switch (_f.label) {\n                    case 0:\n                        _a = options.ignoreEncryption, ignoreEncryption = _a === void 0 ? false : _a, _b = options.parseSpeed, parseSpeed = _b === void 0 ? ParseSpeeds.Slow : _b, _c = options.throwOnInvalidObject, throwOnInvalidObject = _c === void 0 ? false : _c, _d = options.updateMetadata, updateMetadata = _d === void 0 ? true : _d, _e = options.capNumbers, capNumbers = _e === void 0 ? false : _e;\n                        assertIs(pdf, 'pdf', ['string', Uint8Array, ArrayBuffer]);\n                        assertIs(ignoreEncryption, 'ignoreEncryption', ['boolean']);\n                        assertIs(parseSpeed, 'parseSpeed', ['number']);\n                        assertIs(throwOnInvalidObject, 'throwOnInvalidObject', ['boolean']);\n                        bytes = toUint8Array(pdf);\n                        return [4 /*yield*/, PDFParser.forBytesWithOptions(bytes, parseSpeed, throwOnInvalidObject, capNumbers).parseDocument()];\n                    case 1:\n                        context = _f.sent();\n                        return [2 /*return*/, new PDFDocument(context, ignoreEncryption, updateMetadata)];\n                }\n            });\n        });\n    };\n    /**\n     * Create a new [[PDFDocument]].\n     * @returns Resolves with the newly created document.\n     */\n    PDFDocument.create = function (options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, updateMetadata, context, pageTree, pageTreeRef, catalog;\n            return __generator(this, function (_b) {\n                _a = options.updateMetadata, updateMetadata = _a === void 0 ? true : _a;\n                context = PDFContext.create();\n                pageTree = PDFPageTree.withContext(context);\n                pageTreeRef = context.register(pageTree);\n                catalog = PDFCatalog.withContextAndPages(context, pageTreeRef);\n                context.trailerInfo.Root = context.register(catalog);\n                return [2 /*return*/, new PDFDocument(context, false, updateMetadata)];\n            });\n        });\n    };\n    /**\n     * Register a fontkit instance. This must be done before custom fonts can\n     * be embedded. See [here](https://github.com/Hopding/pdf-lib/tree/master#fontkit-installation)\n     * for instructions on how to install and register a fontkit instance.\n     *\n     * > You do **not** need to call this method to embed standard fonts.\n     *\n     * For example:\n     * ```js\n     * import { PDFDocument } from 'pdf-lib'\n     * import fontkit from '@pdf-lib/fontkit'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * pdfDoc.registerFontkit(fontkit)\n     * ```\n     *\n     * @param fontkit The fontkit instance to be registered.\n     */\n    PDFDocument.prototype.registerFontkit = function (fontkit) {\n        this.fontkit = fontkit;\n    };\n    /**\n     * Get the [[PDFForm]] containing all interactive fields for this document.\n     * For example:\n     * ```js\n     * const form = pdfDoc.getForm()\n     * const fields = form.getFields()\n     * fields.forEach(field => {\n     *   const type = field.constructor.name\n     *   const name = field.getName()\n     *   console.log(`${type}: ${name}`)\n     * })\n     * ```\n     * @returns The form for this document.\n     */\n    PDFDocument.prototype.getForm = function () {\n        var form = this.formCache.access();\n        if (form.hasXFA()) {\n            console.warn('Removing XFA form data as pdf-lib does not support reading or writing XFA');\n            form.deleteXFA();\n        }\n        return form;\n    };\n    /**\n     * Get this document's title metadata. The title appears in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const title = pdfDoc.getTitle()\n     * ```\n     * @returns A string containing the title of this document, if it has one.\n     */\n    PDFDocument.prototype.getTitle = function () {\n        var title = this.getInfoDict().lookup(PDFName.Title);\n        if (!title)\n            return undefined;\n        assertIsLiteralOrHexString(title);\n        return title.decodeText();\n    };\n    /**\n     * Get this document's author metadata. The author appears in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const author = pdfDoc.getAuthor()\n     * ```\n     * @returns A string containing the author of this document, if it has one.\n     */\n    PDFDocument.prototype.getAuthor = function () {\n        var author = this.getInfoDict().lookup(PDFName.Author);\n        if (!author)\n            return undefined;\n        assertIsLiteralOrHexString(author);\n        return author.decodeText();\n    };\n    /**\n     * Get this document's subject metadata. The subject appears in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const subject = pdfDoc.getSubject()\n     * ```\n     * @returns A string containing the subject of this document, if it has one.\n     */\n    PDFDocument.prototype.getSubject = function () {\n        var subject = this.getInfoDict().lookup(PDFName.Subject);\n        if (!subject)\n            return undefined;\n        assertIsLiteralOrHexString(subject);\n        return subject.decodeText();\n    };\n    /**\n     * Get this document's keywords metadata. The keywords appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const keywords = pdfDoc.getKeywords()\n     * ```\n     * @returns A string containing the keywords of this document, if it has any.\n     */\n    PDFDocument.prototype.getKeywords = function () {\n        var keywords = this.getInfoDict().lookup(PDFName.Keywords);\n        if (!keywords)\n            return undefined;\n        assertIsLiteralOrHexString(keywords);\n        return keywords.decodeText();\n    };\n    /**\n     * Get this document's creator metadata. The creator appears in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const creator = pdfDoc.getCreator()\n     * ```\n     * @returns A string containing the creator of this document, if it has one.\n     */\n    PDFDocument.prototype.getCreator = function () {\n        var creator = this.getInfoDict().lookup(PDFName.Creator);\n        if (!creator)\n            return undefined;\n        assertIsLiteralOrHexString(creator);\n        return creator.decodeText();\n    };\n    /**\n     * Get this document's producer metadata. The producer appears in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const producer = pdfDoc.getProducer()\n     * ```\n     * @returns A string containing the producer of this document, if it has one.\n     */\n    PDFDocument.prototype.getProducer = function () {\n        var producer = this.getInfoDict().lookup(PDFName.Producer);\n        if (!producer)\n            return undefined;\n        assertIsLiteralOrHexString(producer);\n        return producer.decodeText();\n    };\n    /**\n     * Get this document's creation date metadata. The creation date appears in\n     * the \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * const creationDate = pdfDoc.getCreationDate()\n     * ```\n     * @returns A Date containing the creation date of this document,\n     *          if it has one.\n     */\n    PDFDocument.prototype.getCreationDate = function () {\n        var creationDate = this.getInfoDict().lookup(PDFName.CreationDate);\n        if (!creationDate)\n            return undefined;\n        assertIsLiteralOrHexString(creationDate);\n        return creationDate.decodeDate();\n    };\n    /**\n     * Get this document's modification date metadata. The modification date\n     * appears in the \"Document Properties\" section of most PDF readers.\n     * For example:\n     * ```js\n     * const modification = pdfDoc.getModificationDate()\n     * ```\n     * @returns A Date containing the modification date of this document,\n     *          if it has one.\n     */\n    PDFDocument.prototype.getModificationDate = function () {\n        var modificationDate = this.getInfoDict().lookup(PDFName.ModDate);\n        if (!modificationDate)\n            return undefined;\n        assertIsLiteralOrHexString(modificationDate);\n        return modificationDate.decodeDate();\n    };\n    /**\n     * Set this document's title metadata. The title will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setTitle('🥚 The Life of an Egg 🍳')\n     * ```\n     *\n     * To display the title in the window's title bar, set the\n     * `showInWindowTitleBar` option to `true` (works for _most_ PDF readers).\n     * For example:\n     * ```js\n     * pdfDoc.setTitle('🥚 The Life of an Egg 🍳', { showInWindowTitleBar: true })\n     * ```\n     *\n     * @param title The title of this document.\n     * @param options The options to be used when setting the title.\n     */\n    PDFDocument.prototype.setTitle = function (title, options) {\n        assertIs(title, 'title', ['string']);\n        var key = PDFName.of('Title');\n        this.getInfoDict().set(key, PDFHexString.fromText(title));\n        // Indicate that readers should display the title rather than the filename\n        if (options === null || options === void 0 ? void 0 : options.showInWindowTitleBar) {\n            var prefs = this.catalog.getOrCreateViewerPreferences();\n            prefs.setDisplayDocTitle(true);\n        }\n    };\n    /**\n     * Set this document's author metadata. The author will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setAuthor('Humpty Dumpty')\n     * ```\n     * @param author The author of this document.\n     */\n    PDFDocument.prototype.setAuthor = function (author) {\n        assertIs(author, 'author', ['string']);\n        var key = PDFName.of('Author');\n        this.getInfoDict().set(key, PDFHexString.fromText(author));\n    };\n    /**\n     * Set this document's subject metadata. The subject will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setSubject('📘 An Epic Tale of Woe 📖')\n     * ```\n     * @param subject The subject of this document.\n     */\n    PDFDocument.prototype.setSubject = function (subject) {\n        assertIs(subject, 'author', ['string']);\n        var key = PDFName.of('Subject');\n        this.getInfoDict().set(key, PDFHexString.fromText(subject));\n    };\n    /**\n     * Set this document's keyword metadata. These keywords will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setKeywords(['eggs', 'wall', 'fall', 'king', 'horses', 'men'])\n     * ```\n     * @param keywords An array of keywords associated with this document.\n     */\n    PDFDocument.prototype.setKeywords = function (keywords) {\n        assertIs(keywords, 'keywords', [Array]);\n        var key = PDFName.of('Keywords');\n        this.getInfoDict().set(key, PDFHexString.fromText(keywords.join(' ')));\n    };\n    /**\n     * Set this document's creator metadata. The creator will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setCreator('PDF App 9000 🤖')\n     * ```\n     * @param creator The creator of this document.\n     */\n    PDFDocument.prototype.setCreator = function (creator) {\n        assertIs(creator, 'creator', ['string']);\n        var key = PDFName.of('Creator');\n        this.getInfoDict().set(key, PDFHexString.fromText(creator));\n    };\n    /**\n     * Set this document's producer metadata. The producer will appear in the\n     * \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setProducer('PDF App 9000 🤖')\n     * ```\n     * @param producer The producer of this document.\n     */\n    PDFDocument.prototype.setProducer = function (producer) {\n        assertIs(producer, 'creator', ['string']);\n        var key = PDFName.of('Producer');\n        this.getInfoDict().set(key, PDFHexString.fromText(producer));\n    };\n    /**\n     * Set this document's language metadata. The language will appear in the\n     * \"Document Properties\" section of some PDF readers. For example:\n     * ```js\n     * pdfDoc.setLanguage('en-us')\n     * ```\n     *\n     * @param language An RFC 3066 _Language-Tag_ denoting the language of this\n     *                 document, or an empty string if the language is unknown.\n     */\n    PDFDocument.prototype.setLanguage = function (language) {\n        assertIs(language, 'language', ['string']);\n        var key = PDFName.of('Lang');\n        this.catalog.set(key, PDFString.of(language));\n    };\n    /**\n     * Set this document's creation date metadata. The creation date will appear\n     * in the \"Document Properties\" section of most PDF readers. For example:\n     * ```js\n     * pdfDoc.setCreationDate(new Date())\n     * ```\n     * @param creationDate The date this document was created.\n     */\n    PDFDocument.prototype.setCreationDate = function (creationDate) {\n        assertIs(creationDate, 'creationDate', [[Date, 'Date']]);\n        var key = PDFName.of('CreationDate');\n        this.getInfoDict().set(key, PDFString.fromDate(creationDate));\n    };\n    /**\n     * Set this document's modification date metadata. The modification date will\n     * appear in the \"Document Properties\" section of most PDF readers. For\n     * example:\n     * ```js\n     * pdfDoc.setModificationDate(new Date())\n     * ```\n     * @param modificationDate The date this document was last modified.\n     */\n    PDFDocument.prototype.setModificationDate = function (modificationDate) {\n        assertIs(modificationDate, 'modificationDate', [[Date, 'Date']]);\n        var key = PDFName.of('ModDate');\n        this.getInfoDict().set(key, PDFString.fromDate(modificationDate));\n    };\n    /**\n     * Get the number of pages contained in this document. For example:\n     * ```js\n     * const totalPages = pdfDoc.getPageCount()\n     * ```\n     * @returns The number of pages in this document.\n     */\n    PDFDocument.prototype.getPageCount = function () {\n        if (this.pageCount === undefined)\n            this.pageCount = this.getPages().length;\n        return this.pageCount;\n    };\n    /**\n     * Get an array of all the pages contained in this document. The pages are\n     * stored in the array in the same order that they are rendered in the\n     * document. For example:\n     * ```js\n     * const pages = pdfDoc.getPages()\n     * pages[0]   // The first page of the document\n     * pages[2]   // The third page of the document\n     * pages[197] // The 198th page of the document\n     * ```\n     * @returns An array of all the pages contained in this document.\n     */\n    PDFDocument.prototype.getPages = function () {\n        return this.pageCache.access();\n    };\n    /**\n     * Get the page rendered at a particular `index` of the document. For example:\n     * ```js\n     * pdfDoc.getPage(0)   // The first page of the document\n     * pdfDoc.getPage(2)   // The third page of the document\n     * pdfDoc.getPage(197) // The 198th page of the document\n     * ```\n     * @returns The [[PDFPage]] rendered at the given `index` of the document.\n     */\n    PDFDocument.prototype.getPage = function (index) {\n        var pages = this.getPages();\n        assertRange(index, 'index', 0, pages.length - 1);\n        return pages[index];\n    };\n    /**\n     * Get an array of indices for all the pages contained in this document. The\n     * array will contain a range of integers from\n     * `0..pdfDoc.getPageCount() - 1`. For example:\n     * ```js\n     * const pdfDoc = await PDFDocument.create()\n     * pdfDoc.addPage()\n     * pdfDoc.addPage()\n     * pdfDoc.addPage()\n     *\n     * const indices = pdfDoc.getPageIndices()\n     * indices // => [0, 1, 2]\n     * ```\n     * @returns An array of indices for all pages contained in this document.\n     */\n    PDFDocument.prototype.getPageIndices = function () {\n        return range(0, this.getPageCount());\n    };\n    /**\n     * Remove the page at a given index from this document. For example:\n     * ```js\n     * pdfDoc.removePage(0)   // Remove the first page of the document\n     * pdfDoc.removePage(2)   // Remove the third page of the document\n     * pdfDoc.removePage(197) // Remove the 198th page of the document\n     * ```\n     * Once a page has been removed, it will no longer be rendered at that index\n     * in the document.\n     * @param index The index of the page to be removed.\n     */\n    PDFDocument.prototype.removePage = function (index) {\n        var pageCount = this.getPageCount();\n        if (this.pageCount === 0)\n            throw new RemovePageFromEmptyDocumentError();\n        assertRange(index, 'index', 0, pageCount - 1);\n        this.catalog.removeLeafNode(index);\n        this.pageCount = pageCount - 1;\n    };\n    /**\n     * Add a page to the end of this document. This method accepts three\n     * different value types for the `page` parameter:\n     *\n     * | Type               | Behavior                                                                            |\n     * | ------------------ | ----------------------------------------------------------------------------------- |\n     * | `undefined`        | Create a new page and add it to the end of this document                            |\n     * | `[number, number]` | Create a new page with the given dimensions and add it to the end of this document  |\n     * | `PDFPage`          | Add the existing page to the end of this document                                   |\n     *\n     * For example:\n     * ```js\n     * // page=undefined\n     * const newPage = pdfDoc.addPage()\n     *\n     * // page=[number, number]\n     * import { PageSizes } from 'pdf-lib'\n     * const newPage1 = pdfDoc.addPage(PageSizes.A7)\n     * const newPage2 = pdfDoc.addPage(PageSizes.Letter)\n     * const newPage3 = pdfDoc.addPage([500, 750])\n     *\n     * // page=PDFPage\n     * const pdfDoc1 = await PDFDocument.create()\n     * const pdfDoc2 = await PDFDocument.load(...)\n     * const [existingPage] = await pdfDoc1.copyPages(pdfDoc2, [0])\n     * pdfDoc1.addPage(existingPage)\n     * ```\n     *\n     * @param page Optionally, the desired dimensions or existing page.\n     * @returns The newly created (or existing) page.\n     */\n    PDFDocument.prototype.addPage = function (page) {\n        assertIs(page, 'page', ['undefined', [PDFPage, 'PDFPage'], Array]);\n        return this.insertPage(this.getPageCount(), page);\n    };\n    /**\n     * Insert a page at a given index within this document. This method accepts\n     * three different value types for the `page` parameter:\n     *\n     * | Type               | Behavior                                                                       |\n     * | ------------------ | ------------------------------------------------------------------------------ |\n     * | `undefined`        | Create a new page and insert it into this document                             |\n     * | `[number, number]` | Create a new page with the given dimensions and insert it into this document   |\n     * | `PDFPage`          | Insert the existing page into this document                                    |\n     *\n     * For example:\n     * ```js\n     * // page=undefined\n     * const newPage = pdfDoc.insertPage(2)\n     *\n     * // page=[number, number]\n     * import { PageSizes } from 'pdf-lib'\n     * const newPage1 = pdfDoc.insertPage(2, PageSizes.A7)\n     * const newPage2 = pdfDoc.insertPage(0, PageSizes.Letter)\n     * const newPage3 = pdfDoc.insertPage(198, [500, 750])\n     *\n     * // page=PDFPage\n     * const pdfDoc1 = await PDFDocument.create()\n     * const pdfDoc2 = await PDFDocument.load(...)\n     * const [existingPage] = await pdfDoc1.copyPages(pdfDoc2, [0])\n     * pdfDoc1.insertPage(0, existingPage)\n     * ```\n     *\n     * @param index The index at which the page should be inserted (zero-based).\n     * @param page Optionally, the desired dimensions or existing page.\n     * @returns The newly created (or existing) page.\n     */\n    PDFDocument.prototype.insertPage = function (index, page) {\n        var pageCount = this.getPageCount();\n        assertRange(index, 'index', 0, pageCount);\n        assertIs(page, 'page', ['undefined', [PDFPage, 'PDFPage'], Array]);\n        if (!page || Array.isArray(page)) {\n            var dims = Array.isArray(page) ? page : PageSizes.A4;\n            page = PDFPage.create(this);\n            page.setSize.apply(page, dims);\n        }\n        else if (page.doc !== this) {\n            throw new ForeignPageError();\n        }\n        var parentRef = this.catalog.insertLeafNode(page.ref, index);\n        page.node.setParent(parentRef);\n        this.pageMap.set(page.node, page);\n        this.pageCache.invalidate();\n        this.pageCount = pageCount + 1;\n        return page;\n    };\n    /**\n     * Copy pages from a source document into this document. Allows pages to be\n     * copied between different [[PDFDocument]] instances. For example:\n     * ```js\n     * const pdfDoc = await PDFDocument.create()\n     * const srcDoc = await PDFDocument.load(...)\n     *\n     * const copiedPages = await pdfDoc.copyPages(srcDoc, [0, 3, 89])\n     * const [firstPage, fourthPage, ninetiethPage] = copiedPages;\n     *\n     * pdfDoc.addPage(fourthPage)\n     * pdfDoc.insertPage(0, ninetiethPage)\n     * pdfDoc.addPage(firstPage)\n     * ```\n     * @param srcDoc The document from which pages should be copied.\n     * @param indices The indices of the pages that should be copied.\n     * @returns Resolves with an array of pages copied into this document.\n     */\n    PDFDocument.prototype.copyPages = function (srcDoc, indices) {\n        return __awaiter(this, void 0, void 0, function () {\n            var copier, srcPages, copiedPages, idx, len, srcPage, copiedPage, ref;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        assertIs(srcDoc, 'srcDoc', [[PDFDocument, 'PDFDocument']]);\n                        assertIs(indices, 'indices', [Array]);\n                        return [4 /*yield*/, srcDoc.flush()];\n                    case 1:\n                        _a.sent();\n                        copier = PDFObjectCopier.for(srcDoc.context, this.context);\n                        srcPages = srcDoc.getPages();\n                        copiedPages = new Array(indices.length);\n                        for (idx = 0, len = indices.length; idx < len; idx++) {\n                            srcPage = srcPages[indices[idx]];\n                            copiedPage = copier.copy(srcPage.node);\n                            ref = this.context.register(copiedPage);\n                            copiedPages[idx] = PDFPage.of(copiedPage, ref, this);\n                        }\n                        return [2 /*return*/, copiedPages];\n                }\n            });\n        });\n    };\n    /**\n     * Get a copy of this document.\n     *\n     * For example:\n     * ```js\n     * const srcDoc = await PDFDocument.load(...)\n     * const pdfDoc = await srcDoc.copy()\n     * ```\n     *\n     * > **NOTE:**  This method won't copy all information over to the new\n     * > document (acroforms, outlines, etc...).\n     *\n     * @returns Resolves with a copy this document.\n     */\n    PDFDocument.prototype.copy = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var pdfCopy, contentPages, idx, len;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, PDFDocument.create()];\n                    case 1:\n                        pdfCopy = _a.sent();\n                        return [4 /*yield*/, pdfCopy.copyPages(this, this.getPageIndices())];\n                    case 2:\n                        contentPages = _a.sent();\n                        for (idx = 0, len = contentPages.length; idx < len; idx++) {\n                            pdfCopy.addPage(contentPages[idx]);\n                        }\n                        if (this.getAuthor() !== undefined) {\n                            pdfCopy.setAuthor(this.getAuthor());\n                        }\n                        if (this.getCreationDate() !== undefined) {\n                            pdfCopy.setCreationDate(this.getCreationDate());\n                        }\n                        if (this.getCreator() !== undefined) {\n                            pdfCopy.setCreator(this.getCreator());\n                        }\n                        if (this.getModificationDate() !== undefined) {\n                            pdfCopy.setModificationDate(this.getModificationDate());\n                        }\n                        if (this.getProducer() !== undefined) {\n                            pdfCopy.setProducer(this.getProducer());\n                        }\n                        if (this.getSubject() !== undefined) {\n                            pdfCopy.setSubject(this.getSubject());\n                        }\n                        if (this.getTitle() !== undefined) {\n                            pdfCopy.setTitle(this.getTitle());\n                        }\n                        pdfCopy.defaultWordBreaks = this.defaultWordBreaks;\n                        return [2 /*return*/, pdfCopy];\n                }\n            });\n        });\n    };\n    /**\n     * Add JavaScript to this document. The supplied `script` is executed when the\n     * document is opened. The `script` can be used to perform some operation\n     * when the document is opened (e.g. logging to the console), or it can be\n     * used to define a function that can be referenced later in a JavaScript\n     * action. For example:\n     * ```js\n     * // Show \"Hello World!\" in the console when the PDF is opened\n     * pdfDoc.addJavaScript(\n     *   'main',\n     *   'console.show(); console.println(\"Hello World!\");'\n     * );\n     *\n     * // Define a function named \"foo\" that can be called in JavaScript Actions\n     * pdfDoc.addJavaScript(\n     *   'foo',\n     *   'function foo() { return \"foo\"; }'\n     * );\n     * ```\n     * See the [JavaScript for Acrobat API Reference](https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf)\n     * for details.\n     * @param name The name of the script. Must be unique per document.\n     * @param script The JavaScript to execute.\n     */\n    PDFDocument.prototype.addJavaScript = function (name, script) {\n        assertIs(name, 'name', ['string']);\n        assertIs(script, 'script', ['string']);\n        var embedder = JavaScriptEmbedder.for(script, name);\n        var ref = this.context.nextRef();\n        var javaScript = PDFJavaScript.of(ref, this, embedder);\n        this.javaScripts.push(javaScript);\n    };\n    /**\n     * Add an attachment to this document. Attachments are visible in the\n     * \"Attachments\" panel of Adobe Acrobat and some other PDF readers. Any\n     * type of file can be added as an attachment. This includes, but is not\n     * limited to, `.png`, `.jpg`, `.pdf`, `.csv`, `.docx`, and `.xlsx` files.\n     *\n     * The input data can be provided in multiple formats:\n     *\n     * | Type          | Contents                                                       |\n     * | ------------- | -------------------------------------------------------------- |\n     * | `string`      | A base64 encoded string (or data URI) containing an attachment |\n     * | `Uint8Array`  | The raw bytes of an attachment                                 |\n     * | `ArrayBuffer` | The raw bytes of an attachment                                 |\n     *\n     * For example:\n     * ```js\n     * // attachment=string\n     * await pdfDoc.attach('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...', 'cat_riding_unicorn.jpg', {\n     *   mimeType: 'image/jpeg',\n     *   description: 'Cool cat riding a unicorn! 🦄🐈🕶️',\n     *   creationDate: new Date('2019/12/01'),\n     *   modificationDate: new Date('2020/04/19'),\n     * })\n     * await pdfDoc.attach('data:image/jpeg;base64,/9j/4AAQ...', 'cat_riding_unicorn.jpg', {\n     *   mimeType: 'image/jpeg',\n     *   description: 'Cool cat riding a unicorn! 🦄🐈🕶️',\n     *   creationDate: new Date('2019/12/01'),\n     *   modificationDate: new Date('2020/04/19'),\n     * })\n     *\n     * // attachment=Uint8Array\n     * import fs from 'fs'\n     * const uint8Array = fs.readFileSync('cat_riding_unicorn.jpg')\n     * await pdfDoc.attach(uint8Array, 'cat_riding_unicorn.jpg', {\n     *   mimeType: 'image/jpeg',\n     *   description: 'Cool cat riding a unicorn! 🦄🐈🕶️',\n     *   creationDate: new Date('2019/12/01'),\n     *   modificationDate: new Date('2020/04/19'),\n     * })\n     *\n     * // attachment=ArrayBuffer\n     * const url = 'https://pdf-lib.js.org/assets/cat_riding_unicorn.jpg'\n     * const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())\n     * await pdfDoc.attach(arrayBuffer, 'cat_riding_unicorn.jpg', {\n     *   mimeType: 'image/jpeg',\n     *   description: 'Cool cat riding a unicorn! 🦄🐈🕶️',\n     *   creationDate: new Date('2019/12/01'),\n     *   modificationDate: new Date('2020/04/19'),\n     * })\n     * ```\n     *\n     * @param attachment The input data containing the file to be attached.\n     * @param name The name of the file to be attached.\n     * @returns Resolves when the attachment is complete.\n     */\n    PDFDocument.prototype.attach = function (attachment, name, options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var bytes, embedder, ref, embeddedFile;\n            return __generator(this, function (_a) {\n                assertIs(attachment, 'attachment', ['string', Uint8Array, ArrayBuffer]);\n                assertIs(name, 'name', ['string']);\n                assertOrUndefined(options.mimeType, 'mimeType', ['string']);\n                assertOrUndefined(options.description, 'description', ['string']);\n                assertOrUndefined(options.creationDate, 'options.creationDate', [Date]);\n                assertOrUndefined(options.modificationDate, 'options.modificationDate', [\n                    Date,\n                ]);\n                assertIsOneOfOrUndefined(options.afRelationship, 'options.afRelationship', AFRelationship);\n                bytes = toUint8Array(attachment);\n                embedder = FileEmbedder.for(bytes, name, options);\n                ref = this.context.nextRef();\n                embeddedFile = PDFEmbeddedFile.of(ref, this, embedder);\n                this.embeddedFiles.push(embeddedFile);\n                return [2 /*return*/];\n            });\n        });\n    };\n    /**\n     * Embed a font into this document. The input data can be provided in multiple\n     * formats:\n     *\n     * | Type            | Contents                                                |\n     * | --------------- | ------------------------------------------------------- |\n     * | `StandardFonts` | One of the standard 14 fonts                            |\n     * | `string`        | A base64 encoded string (or data URI) containing a font |\n     * | `Uint8Array`    | The raw bytes of a font                                 |\n     * | `ArrayBuffer`   | The raw bytes of a font                                 |\n     *\n     * For example:\n     * ```js\n     * // font=StandardFonts\n     * import { StandardFonts } from 'pdf-lib'\n     * const font1 = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     *\n     * // font=string\n     * const font2 = await pdfDoc.embedFont('AAEAAAAVAQAABABQRFNJRx/upe...')\n     * const font3 = await pdfDoc.embedFont('data:font/opentype;base64,AAEAAA...')\n     *\n     * // font=Uint8Array\n     * import fs from 'fs'\n     * const font4 = await pdfDoc.embedFont(fs.readFileSync('Ubuntu-R.ttf'))\n     *\n     * // font=ArrayBuffer\n     * const url = 'https://pdf-lib.js.org/assets/ubuntu/Ubuntu-R.ttf'\n     * const ubuntuBytes = await fetch(url).then(res => res.arrayBuffer())\n     * const font5 = await pdfDoc.embedFont(ubuntuBytes)\n     * ```\n     * See also: [[registerFontkit]]\n     * @param font The input data for a font.\n     * @param options The options to be used when embedding the font.\n     * @returns Resolves with the embedded font.\n     */\n    PDFDocument.prototype.embedFont = function (font, options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, subset, customName, features, embedder, bytes, fontkit, _b, ref, pdfFont;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        _a = options.subset, subset = _a === void 0 ? false : _a, customName = options.customName, features = options.features;\n                        assertIs(font, 'font', ['string', Uint8Array, ArrayBuffer]);\n                        assertIs(subset, 'subset', ['boolean']);\n                        if (!isStandardFont(font)) return [3 /*break*/, 1];\n                        embedder = StandardFontEmbedder.for(font, customName);\n                        return [3 /*break*/, 7];\n                    case 1:\n                        if (!canBeConvertedToUint8Array(font)) return [3 /*break*/, 6];\n                        bytes = toUint8Array(font);\n                        fontkit = this.assertFontkit();\n                        if (!subset) return [3 /*break*/, 3];\n                        return [4 /*yield*/, CustomFontSubsetEmbedder.for(fontkit, bytes, customName, features)];\n                    case 2:\n                        _b = _c.sent();\n                        return [3 /*break*/, 5];\n                    case 3: return [4 /*yield*/, CustomFontEmbedder.for(fontkit, bytes, customName, features)];\n                    case 4:\n                        _b = _c.sent();\n                        _c.label = 5;\n                    case 5:\n                        embedder = _b;\n                        return [3 /*break*/, 7];\n                    case 6: throw new TypeError('`font` must be one of `StandardFonts | string | Uint8Array | ArrayBuffer`');\n                    case 7:\n                        ref = this.context.nextRef();\n                        pdfFont = PDFFont.of(ref, this, embedder);\n                        this.fonts.push(pdfFont);\n                        return [2 /*return*/, pdfFont];\n                }\n            });\n        });\n    };\n    /**\n     * Embed a standard font into this document.\n     * For example:\n     * ```js\n     * import { StandardFonts } from 'pdf-lib'\n     * const helveticaFont = pdfDoc.embedFont(StandardFonts.Helvetica)\n     * ```\n     * @param font The standard font to be embedded.\n     * @param customName The name to be used when embedding the font.\n     * @returns The embedded font.\n     */\n    PDFDocument.prototype.embedStandardFont = function (font, customName) {\n        assertIs(font, 'font', ['string']);\n        if (!isStandardFont(font)) {\n            throw new TypeError('`font` must be one of type `StandardFonts`');\n        }\n        var embedder = StandardFontEmbedder.for(font, customName);\n        var ref = this.context.nextRef();\n        var pdfFont = PDFFont.of(ref, this, embedder);\n        this.fonts.push(pdfFont);\n        return pdfFont;\n    };\n    /**\n     * Embed a JPEG image into this document. The input data can be provided in\n     * multiple formats:\n     *\n     * | Type          | Contents                                                      |\n     * | ------------- | ------------------------------------------------------------- |\n     * | `string`      | A base64 encoded string (or data URI) containing a JPEG image |\n     * | `Uint8Array`  | The raw bytes of a JPEG image                                 |\n     * | `ArrayBuffer` | The raw bytes of a JPEG image                                 |\n     *\n     * For example:\n     * ```js\n     * // jpg=string\n     * const image1 = await pdfDoc.embedJpg('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD...')\n     * const image2 = await pdfDoc.embedJpg('data:image/jpeg;base64,/9j/4AAQ...')\n     *\n     * // jpg=Uint8Array\n     * import fs from 'fs'\n     * const uint8Array = fs.readFileSync('cat_riding_unicorn.jpg')\n     * const image3 = await pdfDoc.embedJpg(uint8Array)\n     *\n     * // jpg=ArrayBuffer\n     * const url = 'https://pdf-lib.js.org/assets/cat_riding_unicorn.jpg'\n     * const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())\n     * const image4 = await pdfDoc.embedJpg(arrayBuffer)\n     * ```\n     *\n     * @param jpg The input data for a JPEG image.\n     * @returns Resolves with the embedded image.\n     */\n    PDFDocument.prototype.embedJpg = function (jpg) {\n        return __awaiter(this, void 0, void 0, function () {\n            var bytes, embedder, ref, pdfImage;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        assertIs(jpg, 'jpg', ['string', Uint8Array, ArrayBuffer]);\n                        bytes = toUint8Array(jpg);\n                        return [4 /*yield*/, JpegEmbedder.for(bytes)];\n                    case 1:\n                        embedder = _a.sent();\n                        ref = this.context.nextRef();\n                        pdfImage = PDFImage.of(ref, this, embedder);\n                        this.images.push(pdfImage);\n                        return [2 /*return*/, pdfImage];\n                }\n            });\n        });\n    };\n    /**\n     * Embed a PNG image into this document. The input data can be provided in\n     * multiple formats:\n     *\n     * | Type          | Contents                                                     |\n     * | ------------- | ------------------------------------------------------------ |\n     * | `string`      | A base64 encoded string (or data URI) containing a PNG image |\n     * | `Uint8Array`  | The raw bytes of a PNG image                                 |\n     * | `ArrayBuffer` | The raw bytes of a PNG image                                 |\n     *\n     * For example:\n     * ```js\n     * // png=string\n     * const image1 = await pdfDoc.embedPng('iVBORw0KGgoAAAANSUhEUgAAAlgAAAF3...')\n     * const image2 = await pdfDoc.embedPng('data:image/png;base64,iVBORw0KGg...')\n     *\n     * // png=Uint8Array\n     * import fs from 'fs'\n     * const uint8Array = fs.readFileSync('small_mario.png')\n     * const image3 = await pdfDoc.embedPng(uint8Array)\n     *\n     * // png=ArrayBuffer\n     * const url = 'https://pdf-lib.js.org/assets/small_mario.png'\n     * const arrayBuffer = await fetch(url).then(res => res.arrayBuffer())\n     * const image4 = await pdfDoc.embedPng(arrayBuffer)\n     * ```\n     *\n     * @param png The input data for a PNG image.\n     * @returns Resolves with the embedded image.\n     */\n    PDFDocument.prototype.embedPng = function (png) {\n        return __awaiter(this, void 0, void 0, function () {\n            var bytes, embedder, ref, pdfImage;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        assertIs(png, 'png', ['string', Uint8Array, ArrayBuffer]);\n                        bytes = toUint8Array(png);\n                        return [4 /*yield*/, PngEmbedder.for(bytes)];\n                    case 1:\n                        embedder = _a.sent();\n                        ref = this.context.nextRef();\n                        pdfImage = PDFImage.of(ref, this, embedder);\n                        this.images.push(pdfImage);\n                        return [2 /*return*/, pdfImage];\n                }\n            });\n        });\n    };\n    /**\n     * Embed one or more PDF pages into this document.\n     *\n     * For example:\n     * ```js\n     * const pdfDoc = await PDFDocument.create()\n     *\n     * const sourcePdfUrl = 'https://pdf-lib.js.org/assets/with_large_page_count.pdf'\n     * const sourcePdf = await fetch(sourcePdfUrl).then((res) => res.arrayBuffer())\n     *\n     * // Embed page 74 of `sourcePdf` into `pdfDoc`\n     * const [embeddedPage] = await pdfDoc.embedPdf(sourcePdf, [73])\n     * ```\n     *\n     * See [[PDFDocument.load]] for examples of the allowed input data formats.\n     *\n     * @param pdf The input data containing a PDF document.\n     * @param indices The indices of the pages that should be embedded.\n     * @returns Resolves with an array of the embedded pages.\n     */\n    PDFDocument.prototype.embedPdf = function (pdf, indices) {\n        if (indices === void 0) { indices = [0]; }\n        return __awaiter(this, void 0, void 0, function () {\n            var srcDoc, _a, srcPages;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        assertIs(pdf, 'pdf', [\n                            'string',\n                            Uint8Array,\n                            ArrayBuffer,\n                            [PDFDocument, 'PDFDocument'],\n                        ]);\n                        assertIs(indices, 'indices', [Array]);\n                        if (!(pdf instanceof PDFDocument)) return [3 /*break*/, 1];\n                        _a = pdf;\n                        return [3 /*break*/, 3];\n                    case 1: return [4 /*yield*/, PDFDocument.load(pdf)];\n                    case 2:\n                        _a = _b.sent();\n                        _b.label = 3;\n                    case 3:\n                        srcDoc = _a;\n                        srcPages = pluckIndices(srcDoc.getPages(), indices);\n                        return [2 /*return*/, this.embedPages(srcPages)];\n                }\n            });\n        });\n    };\n    /**\n     * Embed a single PDF page into this document.\n     *\n     * For example:\n     * ```js\n     * const pdfDoc = await PDFDocument.create()\n     *\n     * const sourcePdfUrl = 'https://pdf-lib.js.org/assets/with_large_page_count.pdf'\n     * const sourceBuffer = await fetch(sourcePdfUrl).then((res) => res.arrayBuffer())\n     * const sourcePdfDoc = await PDFDocument.load(sourceBuffer)\n     * const sourcePdfPage = sourcePdfDoc.getPages()[73]\n     *\n     * const embeddedPage = await pdfDoc.embedPage(\n     *   sourcePdfPage,\n     *\n     *   // Clip a section of the source page so that we only embed part of it\n     *   { left: 100, right: 450, bottom: 330, top: 570 },\n     *\n     *   // Translate all drawings of the embedded page by (10, 200) units\n     *   [1, 0, 0, 1, 10, 200],\n     * )\n     * ```\n     *\n     * @param page The page to be embedded.\n     * @param boundingBox\n     * Optionally, an area of the source page that should be embedded\n     * (defaults to entire page).\n     * @param transformationMatrix\n     * Optionally, a transformation matrix that is always applied to the embedded\n     * page anywhere it is drawn.\n     * @returns Resolves with the embedded pdf page.\n     */\n    PDFDocument.prototype.embedPage = function (page, boundingBox, transformationMatrix) {\n        return __awaiter(this, void 0, void 0, function () {\n            var embeddedPage;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        assertIs(page, 'page', [[PDFPage, 'PDFPage']]);\n                        return [4 /*yield*/, this.embedPages([page], [boundingBox], [transformationMatrix])];\n                    case 1:\n                        embeddedPage = (_a.sent())[0];\n                        return [2 /*return*/, embeddedPage];\n                }\n            });\n        });\n    };\n    /**\n     * Embed one or more PDF pages into this document.\n     *\n     * For example:\n     * ```js\n     * const pdfDoc = await PDFDocument.create()\n     *\n     * const sourcePdfUrl = 'https://pdf-lib.js.org/assets/with_large_page_count.pdf'\n     * const sourceBuffer = await fetch(sourcePdfUrl).then((res) => res.arrayBuffer())\n     * const sourcePdfDoc = await PDFDocument.load(sourceBuffer)\n     *\n     * const page1 = sourcePdfDoc.getPages()[0]\n     * const page2 = sourcePdfDoc.getPages()[52]\n     * const page3 = sourcePdfDoc.getPages()[73]\n     *\n     * const embeddedPages = await pdfDoc.embedPages([page1, page2, page3])\n     * ```\n     *\n     * @param page\n     * The pages to be embedded (they must all share the same context).\n     * @param boundingBoxes\n     * Optionally, an array of clipping boundaries - one for each page\n     * (defaults to entirety of each page).\n     * @param transformationMatrices\n     * Optionally, an array of transformation matrices - one for each page\n     * (each page's transformation will apply anywhere it is drawn).\n     * @returns Resolves with an array of the embedded pdf pages.\n     */\n    PDFDocument.prototype.embedPages = function (pages, boundingBoxes, transformationMatrices) {\n        if (boundingBoxes === void 0) { boundingBoxes = []; }\n        if (transformationMatrices === void 0) { transformationMatrices = []; }\n        return __awaiter(this, void 0, void 0, function () {\n            var idx, len, currPage, nextPage, context, maybeCopyPage, embeddedPages, idx, len, page, box, matrix, embedder, ref;\n            var _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (pages.length === 0)\n                            return [2 /*return*/, []];\n                        // Assert all pages have the same context\n                        for (idx = 0, len = pages.length - 1; idx < len; idx++) {\n                            currPage = pages[idx];\n                            nextPage = pages[idx + 1];\n                            if (currPage.node.context !== nextPage.node.context) {\n                                throw new PageEmbeddingMismatchedContextError();\n                            }\n                        }\n                        context = pages[0].node.context;\n                        maybeCopyPage = context === this.context\n                            ? function (p) { return p; }\n                            : PDFObjectCopier.for(context, this.context).copy;\n                        embeddedPages = new Array(pages.length);\n                        idx = 0, len = pages.length;\n                        _b.label = 1;\n                    case 1:\n                        if (!(idx < len)) return [3 /*break*/, 4];\n                        page = maybeCopyPage(pages[idx].node);\n                        box = boundingBoxes[idx];\n                        matrix = transformationMatrices[idx];\n                        return [4 /*yield*/, PDFPageEmbedder.for(page, box, matrix)];\n                    case 2:\n                        embedder = _b.sent();\n                        ref = this.context.nextRef();\n                        embeddedPages[idx] = PDFEmbeddedPage.of(ref, this, embedder);\n                        _b.label = 3;\n                    case 3:\n                        idx++;\n                        return [3 /*break*/, 1];\n                    case 4:\n                        (_a = this.embeddedPages).push.apply(_a, embeddedPages);\n                        return [2 /*return*/, embeddedPages];\n                }\n            });\n        });\n    };\n    /**\n     * > **NOTE:** You shouldn't need to call this method directly. The [[save]]\n     * > and [[saveAsBase64]] methods will automatically ensure that all embedded\n     * > assets are flushed before serializing the document.\n     *\n     * Flush all embedded fonts, PDF pages, and images to this document's\n     * [[context]].\n     *\n     * @returns Resolves when the flush is complete.\n     */\n    PDFDocument.prototype.flush = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.embedAll(this.fonts)];\n                    case 1:\n                        _a.sent();\n                        return [4 /*yield*/, this.embedAll(this.images)];\n                    case 2:\n                        _a.sent();\n                        return [4 /*yield*/, this.embedAll(this.embeddedPages)];\n                    case 3:\n                        _a.sent();\n                        return [4 /*yield*/, this.embedAll(this.embeddedFiles)];\n                    case 4:\n                        _a.sent();\n                        return [4 /*yield*/, this.embedAll(this.javaScripts)];\n                    case 5:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Serialize this document to an array of bytes making up a PDF file.\n     * For example:\n     * ```js\n     * const pdfBytes = await pdfDoc.save()\n     * ```\n     *\n     * There are a number of things you can do with the serialized document,\n     * depending on the JavaScript environment you're running in:\n     * * Write it to a file in Node or React Native\n     * * Download it as a Blob in the browser\n     * * Render it in an `iframe`\n     *\n     * @param options The options to be used when saving the document.\n     * @returns Resolves with the bytes of the serialized document.\n     */\n    PDFDocument.prototype.save = function (options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, useObjectStreams, _b, addDefaultPage, _c, objectsPerTick, _d, updateFieldAppearances, form, Writer;\n            return __generator(this, function (_e) {\n                switch (_e.label) {\n                    case 0:\n                        _a = options.useObjectStreams, useObjectStreams = _a === void 0 ? true : _a, _b = options.addDefaultPage, addDefaultPage = _b === void 0 ? true : _b, _c = options.objectsPerTick, objectsPerTick = _c === void 0 ? 50 : _c, _d = options.updateFieldAppearances, updateFieldAppearances = _d === void 0 ? true : _d;\n                        assertIs(useObjectStreams, 'useObjectStreams', ['boolean']);\n                        assertIs(addDefaultPage, 'addDefaultPage', ['boolean']);\n                        assertIs(objectsPerTick, 'objectsPerTick', ['number']);\n                        assertIs(updateFieldAppearances, 'updateFieldAppearances', ['boolean']);\n                        if (addDefaultPage && this.getPageCount() === 0)\n                            this.addPage();\n                        if (updateFieldAppearances) {\n                            form = this.formCache.getValue();\n                            if (form)\n                                form.updateFieldAppearances();\n                        }\n                        return [4 /*yield*/, this.flush()];\n                    case 1:\n                        _e.sent();\n                        Writer = useObjectStreams ? PDFStreamWriter : PDFWriter;\n                        return [2 /*return*/, Writer.forContext(this.context, objectsPerTick).serializeToBuffer()];\n                }\n            });\n        });\n    };\n    /**\n     * Serialize this document to a base64 encoded string or data URI making up a\n     * PDF file. For example:\n     * ```js\n     * const base64String = await pdfDoc.saveAsBase64()\n     * base64String // => 'JVBERi0xLjcKJYGBgYEKC...'\n     *\n     * const base64DataUri = await pdfDoc.saveAsBase64({ dataUri: true })\n     * base64DataUri // => 'data:application/pdf;base64,JVBERi0xLjcKJYGBgYEKC...'\n     * ```\n     *\n     * @param options The options to be used when saving the document.\n     * @returns Resolves with a base64 encoded string or data URI of the\n     *          serialized document.\n     */\n    PDFDocument.prototype.saveAsBase64 = function (options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, dataUri, otherOptions, bytes, base64;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        _a = options.dataUri, dataUri = _a === void 0 ? false : _a, otherOptions = __rest(options, [\"dataUri\"]);\n                        assertIs(dataUri, 'dataUri', ['boolean']);\n                        return [4 /*yield*/, this.save(otherOptions)];\n                    case 1:\n                        bytes = _b.sent();\n                        base64 = encodeToBase64(bytes);\n                        return [2 /*return*/, dataUri ? \"data:application/pdf;base64,\" + base64 : base64];\n                }\n            });\n        });\n    };\n    PDFDocument.prototype.findPageForAnnotationRef = function (ref) {\n        var pages = this.getPages();\n        for (var idx = 0, len = pages.length; idx < len; idx++) {\n            var page = pages[idx];\n            var annotations = page.node.Annots();\n            if ((annotations === null || annotations === void 0 ? void 0 : annotations.indexOf(ref)) !== undefined) {\n                return page;\n            }\n        }\n        return undefined;\n    };\n    PDFDocument.prototype.embedAll = function (embeddables) {\n        return __awaiter(this, void 0, void 0, function () {\n            var idx, len;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        idx = 0, len = embeddables.length;\n                        _a.label = 1;\n                    case 1:\n                        if (!(idx < len)) return [3 /*break*/, 4];\n                        return [4 /*yield*/, embeddables[idx].embed()];\n                    case 2:\n                        _a.sent();\n                        _a.label = 3;\n                    case 3:\n                        idx++;\n                        return [3 /*break*/, 1];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PDFDocument.prototype.updateInfoDict = function () {\n        var pdfLib = \"pdf-lib (https://github.com/Hopding/pdf-lib)\";\n        var now = new Date();\n        var info = this.getInfoDict();\n        this.setProducer(pdfLib);\n        this.setModificationDate(now);\n        if (!info.get(PDFName.of('Creator')))\n            this.setCreator(pdfLib);\n        if (!info.get(PDFName.of('CreationDate')))\n            this.setCreationDate(now);\n    };\n    PDFDocument.prototype.getInfoDict = function () {\n        var existingInfo = this.context.lookup(this.context.trailerInfo.Info);\n        if (existingInfo instanceof PDFDict)\n            return existingInfo;\n        var newInfo = this.context.obj({});\n        this.context.trailerInfo.Info = this.context.register(newInfo);\n        return newInfo;\n    };\n    PDFDocument.prototype.assertFontkit = function () {\n        if (!this.fontkit)\n            throw new FontkitNotRegisteredError();\n        return this.fontkit;\n    };\n    return PDFDocument;\n}());\nexport default PDFDocument;\n/* tslint:disable-next-line only-arrow-functions */\nfunction assertIsLiteralOrHexString(pdfObject) {\n    if (!(pdfObject instanceof PDFHexString) &&\n        !(pdfObject instanceof PDFString)) {\n        throw new UnexpectedObjectTypeError([PDFHexString, PDFString], pdfObject);\n    }\n}\n//# sourceMappingURL=PDFDocument.js.map","import { __assign } from \"tslib\";\nimport { rgb } from \"./colors\";\nimport { drawImage, drawLine, drawLinesOfText, drawPage, drawRectangle, drawSvgPath, drawEllipse, } from \"./operations\";\nimport { popGraphicsState, pushGraphicsState, translate, LineCapStyle, scale, } from \"./operators\";\nimport PDFDocument from \"./PDFDocument\";\nimport PDFEmbeddedPage from \"./PDFEmbeddedPage\";\nimport PDFFont from \"./PDFFont\";\nimport PDFImage from \"./PDFImage\";\nimport { BlendMode, } from \"./PDFPageOptions\";\nimport { degrees, toDegrees } from \"./rotations\";\nimport { StandardFonts } from \"./StandardFonts\";\nimport { PDFContentStream, PDFName, PDFOperator, PDFPageLeaf, PDFRef, PDFDict, PDFArray, } from \"../core\";\nimport { assertEachIs, assertIs, assertMultiple, assertOrUndefined, breakTextIntoLines, cleanText, rectanglesAreEqual, lineSplit, assertRangeOrUndefined, assertIsOneOfOrUndefined, } from \"../utils\";\n/**\n * Represents a single page of a [[PDFDocument]].\n */\nvar PDFPage = /** @class */ (function () {\n    function PDFPage(leafNode, ref, doc) {\n        this.fontSize = 24;\n        this.fontColor = rgb(0, 0, 0);\n        this.lineHeight = 24;\n        this.x = 0;\n        this.y = 0;\n        assertIs(leafNode, 'leafNode', [[PDFPageLeaf, 'PDFPageLeaf']]);\n        assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        this.node = leafNode;\n        this.ref = ref;\n        this.doc = doc;\n    }\n    /**\n     * Rotate this page by a multiple of 90 degrees. For example:\n     * ```js\n     * import { degrees } from 'pdf-lib'\n     *\n     * page.setRotation(degrees(-90))\n     * page.setRotation(degrees(0))\n     * page.setRotation(degrees(90))\n     * page.setRotation(degrees(180))\n     * page.setRotation(degrees(270))\n     * ```\n     * @param angle The angle to rotate this page.\n     */\n    PDFPage.prototype.setRotation = function (angle) {\n        var degreesAngle = toDegrees(angle);\n        assertMultiple(degreesAngle, 'degreesAngle', 90);\n        this.node.set(PDFName.of('Rotate'), this.doc.context.obj(degreesAngle));\n    };\n    /**\n     * Get this page's rotation angle in degrees. For example:\n     * ```js\n     * const rotationAngle = page.getRotation().angle;\n     * ```\n     * @returns The rotation angle of the page in degrees (always a multiple of\n     *          90 degrees).\n     */\n    PDFPage.prototype.getRotation = function () {\n        var Rotate = this.node.Rotate();\n        return degrees(Rotate ? Rotate.asNumber() : 0);\n    };\n    /**\n     * Resize this page by increasing or decreasing its width and height. For\n     * example:\n     * ```js\n     * page.setSize(250, 500)\n     * page.setSize(page.getWidth() + 50, page.getHeight() + 100)\n     * page.setSize(page.getWidth() - 50, page.getHeight() - 100)\n     * ```\n     *\n     * Note that the PDF specification does not allow for pages to have explicit\n     * widths and heights. Instead it defines the \"size\" of a page in terms of\n     * five rectangles: the MediaBox, CropBox, BleedBox, TrimBox, and ArtBox. As a\n     * result, this method cannot directly change the width and height of a page.\n     * Instead, it works by adjusting these five boxes.\n     *\n     * This method performs the following steps:\n     *   1. Set width & height of MediaBox.\n     *   2. Set width & height of CropBox, if it has same dimensions as MediaBox.\n     *   3. Set width & height of BleedBox, if it has same dimensions as MediaBox.\n     *   4. Set width & height of TrimBox, if it has same dimensions as MediaBox.\n     *   5. Set width & height of ArtBox, if it has same dimensions as MediaBox.\n     *\n     * This approach works well for most PDF documents as all PDF pages must\n     * have a MediaBox, but relatively few have a CropBox, BleedBox, TrimBox, or\n     * ArtBox. And when they do have these additional boxes, they often have the\n     * same dimensions as the MediaBox. However, if you find this method does not\n     * work for your document, consider setting the boxes directly:\n     *   * [[PDFPage.setMediaBox]]\n     *   * [[PDFPage.setCropBox]]\n     *   * [[PDFPage.setBleedBox]]\n     *   * [[PDFPage.setTrimBox]]\n     *   * [[PDFPage.setArtBox]]\n     *\n     * @param width The new width of the page.\n     * @param height The new height of the page.\n     */\n    PDFPage.prototype.setSize = function (width, height) {\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var mediaBox = this.getMediaBox();\n        this.setMediaBox(mediaBox.x, mediaBox.y, width, height);\n        var cropBox = this.getCropBox();\n        var bleedBox = this.getBleedBox();\n        var trimBox = this.getTrimBox();\n        var artBox = this.getArtBox();\n        var hasCropBox = this.node.CropBox();\n        var hasBleedBox = this.node.BleedBox();\n        var hasTrimBox = this.node.TrimBox();\n        var hasArtBox = this.node.ArtBox();\n        if (hasCropBox && rectanglesAreEqual(cropBox, mediaBox)) {\n            this.setCropBox(mediaBox.x, mediaBox.y, width, height);\n        }\n        if (hasBleedBox && rectanglesAreEqual(bleedBox, mediaBox)) {\n            this.setBleedBox(mediaBox.x, mediaBox.y, width, height);\n        }\n        if (hasTrimBox && rectanglesAreEqual(trimBox, mediaBox)) {\n            this.setTrimBox(mediaBox.x, mediaBox.y, width, height);\n        }\n        if (hasArtBox && rectanglesAreEqual(artBox, mediaBox)) {\n            this.setArtBox(mediaBox.x, mediaBox.y, width, height);\n        }\n    };\n    /**\n     * Resize this page by increasing or decreasing its width. For example:\n     * ```js\n     * page.setWidth(250)\n     * page.setWidth(page.getWidth() + 50)\n     * page.setWidth(page.getWidth() - 50)\n     * ```\n     *\n     * This method uses [[PDFPage.setSize]] to set the page's width.\n     *\n     * @param width The new width of the page.\n     */\n    PDFPage.prototype.setWidth = function (width) {\n        assertIs(width, 'width', ['number']);\n        this.setSize(width, this.getSize().height);\n    };\n    /**\n     * Resize this page by increasing or decreasing its height. For example:\n     * ```js\n     * page.setHeight(500)\n     * page.setHeight(page.getWidth() + 100)\n     * page.setHeight(page.getWidth() - 100)\n     * ```\n     *\n     * This method uses [[PDFPage.setSize]] to set the page's height.\n     *\n     * @param height The new height of the page.\n     */\n    PDFPage.prototype.setHeight = function (height) {\n        assertIs(height, 'height', ['number']);\n        this.setSize(this.getSize().width, height);\n    };\n    /**\n     * Set the MediaBox of this page. For example:\n     * ```js\n     * const mediaBox = page.getMediaBox()\n     *\n     * page.setMediaBox(0, 0, 250, 500)\n     * page.setMediaBox(mediaBox.x, mediaBox.y, 50, 100)\n     * page.setMediaBox(15, 5, mediaBox.width - 50, mediaBox.height - 100)\n     * ```\n     *\n     * See [[PDFPage.getMediaBox]] for details about what the MediaBox represents.\n     *\n     * @param x The x coordinate of the lower left corner of the new MediaBox.\n     * @param y The y coordinate of the lower left corner of the new MediaBox.\n     * @param width The width of the new MediaBox.\n     * @param height The height of the new MediaBox.\n     */\n    PDFPage.prototype.setMediaBox = function (x, y, width, height) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var mediaBox = this.doc.context.obj([x, y, x + width, y + height]);\n        this.node.set(PDFName.MediaBox, mediaBox);\n    };\n    /**\n     * Set the CropBox of this page. For example:\n     * ```js\n     * const cropBox = page.getCropBox()\n     *\n     * page.setCropBox(0, 0, 250, 500)\n     * page.setCropBox(cropBox.x, cropBox.y, 50, 100)\n     * page.setCropBox(15, 5, cropBox.width - 50, cropBox.height - 100)\n     * ```\n     *\n     * See [[PDFPage.getCropBox]] for details about what the CropBox represents.\n     *\n     * @param x The x coordinate of the lower left corner of the new CropBox.\n     * @param y The y coordinate of the lower left corner of the new CropBox.\n     * @param width The width of the new CropBox.\n     * @param height The height of the new CropBox.\n     */\n    PDFPage.prototype.setCropBox = function (x, y, width, height) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var cropBox = this.doc.context.obj([x, y, x + width, y + height]);\n        this.node.set(PDFName.CropBox, cropBox);\n    };\n    /**\n     * Set the BleedBox of this page. For example:\n     * ```js\n     * const bleedBox = page.getBleedBox()\n     *\n     * page.setBleedBox(0, 0, 250, 500)\n     * page.setBleedBox(bleedBox.x, bleedBox.y, 50, 100)\n     * page.setBleedBox(15, 5, bleedBox.width - 50, bleedBox.height - 100)\n     * ```\n     *\n     * See [[PDFPage.getBleedBox]] for details about what the BleedBox represents.\n     *\n     * @param x The x coordinate of the lower left corner of the new BleedBox.\n     * @param y The y coordinate of the lower left corner of the new BleedBox.\n     * @param width The width of the new BleedBox.\n     * @param height The height of the new BleedBox.\n     */\n    PDFPage.prototype.setBleedBox = function (x, y, width, height) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var bleedBox = this.doc.context.obj([x, y, x + width, y + height]);\n        this.node.set(PDFName.BleedBox, bleedBox);\n    };\n    /**\n     * Set the TrimBox of this page. For example:\n     * ```js\n     * const trimBox = page.getTrimBox()\n     *\n     * page.setTrimBox(0, 0, 250, 500)\n     * page.setTrimBox(trimBox.x, trimBox.y, 50, 100)\n     * page.setTrimBox(15, 5, trimBox.width - 50, trimBox.height - 100)\n     * ```\n     *\n     * See [[PDFPage.getTrimBox]] for details about what the TrimBox represents.\n     *\n     * @param x The x coordinate of the lower left corner of the new TrimBox.\n     * @param y The y coordinate of the lower left corner of the new TrimBox.\n     * @param width The width of the new TrimBox.\n     * @param height The height of the new TrimBox.\n     */\n    PDFPage.prototype.setTrimBox = function (x, y, width, height) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var trimBox = this.doc.context.obj([x, y, x + width, y + height]);\n        this.node.set(PDFName.TrimBox, trimBox);\n    };\n    /**\n     * Set the ArtBox of this page. For example:\n     * ```js\n     * const artBox = page.getArtBox()\n     *\n     * page.setArtBox(0, 0, 250, 500)\n     * page.setArtBox(artBox.x, artBox.y, 50, 100)\n     * page.setArtBox(15, 5, artBox.width - 50, artBox.height - 100)\n     * ```\n     *\n     * See [[PDFPage.getArtBox]] for details about what the ArtBox represents.\n     *\n     * @param x The x coordinate of the lower left corner of the new ArtBox.\n     * @param y The y coordinate of the lower left corner of the new ArtBox.\n     * @param width The width of the new ArtBox.\n     * @param height The height of the new ArtBox.\n     */\n    PDFPage.prototype.setArtBox = function (x, y, width, height) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        assertIs(width, 'width', ['number']);\n        assertIs(height, 'height', ['number']);\n        var artBox = this.doc.context.obj([x, y, x + width, y + height]);\n        this.node.set(PDFName.ArtBox, artBox);\n    };\n    /**\n     * Get this page's width and height. For example:\n     * ```js\n     * const { width, height } = page.getSize()\n     * ```\n     *\n     * This method uses [[PDFPage.getMediaBox]] to obtain the page's\n     * width and height.\n     *\n     * @returns The width and height of the page.\n     */\n    PDFPage.prototype.getSize = function () {\n        var _a = this.getMediaBox(), width = _a.width, height = _a.height;\n        return { width: width, height: height };\n    };\n    /**\n     * Get this page's width. For example:\n     * ```js\n     * const width = page.getWidth()\n     * ```\n     *\n     * This method uses [[PDFPage.getSize]] to obtain the page's size.\n     *\n     * @returns The width of the page.\n     */\n    PDFPage.prototype.getWidth = function () {\n        return this.getSize().width;\n    };\n    /**\n     * Get this page's height. For example:\n     * ```js\n     * const height = page.getHeight()\n     * ```\n     *\n     * This method uses [[PDFPage.getSize]] to obtain the page's size.\n     *\n     * @returns The height of the page.\n     */\n    PDFPage.prototype.getHeight = function () {\n        return this.getSize().height;\n    };\n    /**\n     * Get the rectangle defining this page's MediaBox. For example:\n     * ```js\n     * const { x, y, width, height } = page.getMediaBox()\n     * ```\n     *\n     * The MediaBox of a page defines the boundaries of the physical medium on\n     * which the page is to be displayed/printed. It may include extended area\n     * surrounding the page content for bleed marks, printing marks, etc...\n     * It may also include areas close to the edges of the medium that cannot be\n     * marked because of physical limitations of the output device. Content\n     * falling outside this boundary may safely be discarded without affecting\n     * the meaning of the PDF file.\n     *\n     * @returns An object defining the lower left corner of the MediaBox and its\n     *          width & height.\n     */\n    PDFPage.prototype.getMediaBox = function () {\n        var mediaBox = this.node.MediaBox();\n        return mediaBox.asRectangle();\n    };\n    /**\n     * Get the rectangle defining this page's CropBox. For example:\n     * ```js\n     * const { x, y, width, height } = page.getCropBox()\n     * ```\n     *\n     * The CropBox of a page defines the region to which the contents of the page\n     * shall be clipped when displayed or printed. Unlike the other boxes, the\n     * CropBox does not necessarily represent the physical page geometry. It\n     * merely imposes clipping on the page contents.\n     *\n     * The CropBox's default value is the page's MediaBox.\n     *\n     * @returns An object defining the lower left corner of the CropBox and its\n     *          width & height.\n     */\n    PDFPage.prototype.getCropBox = function () {\n        var _a;\n        var cropBox = this.node.CropBox();\n        return (_a = cropBox === null || cropBox === void 0 ? void 0 : cropBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getMediaBox();\n    };\n    /**\n     * Get the rectangle defining this page's BleedBox. For example:\n     * ```js\n     * const { x, y, width, height } = page.getBleedBox()\n     * ```\n     *\n     * The BleedBox of a page defines the region to which the contents of the\n     * page shall be clipped when output in a production environment. This may\n     * include any extra bleed area needed to accommodate the physical\n     * limitations of cutting, folding, and trimming equipment. The actual\n     * printed page may include printing marks that fall outside the BleedBox.\n     *\n     * The BleedBox's default value is the page's CropBox.\n     *\n     * @returns An object defining the lower left corner of the BleedBox and its\n     *          width & height.\n     */\n    PDFPage.prototype.getBleedBox = function () {\n        var _a;\n        var bleedBox = this.node.BleedBox();\n        return (_a = bleedBox === null || bleedBox === void 0 ? void 0 : bleedBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox();\n    };\n    /**\n     * Get the rectangle defining this page's TrimBox. For example:\n     * ```js\n     * const { x, y, width, height } = page.getTrimBox()\n     * ```\n     *\n     * The TrimBox of a page defines the intended dimensions of the finished\n     * page after trimming. It may be smaller than the MediaBox to allow for\n     * production-related content, such as printing instructions, cut marks, or\n     * color bars.\n     *\n     * The TrimBox's default value is the page's CropBox.\n     *\n     * @returns An object defining the lower left corner of the TrimBox and its\n     *          width & height.\n     */\n    PDFPage.prototype.getTrimBox = function () {\n        var _a;\n        var trimBox = this.node.TrimBox();\n        return (_a = trimBox === null || trimBox === void 0 ? void 0 : trimBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox();\n    };\n    /**\n     * Get the rectangle defining this page's ArtBox. For example:\n     * ```js\n     * const { x, y, width, height } = page.getArtBox()\n     * ```\n     *\n     * The ArtBox of a page defines the extent of the page's meaningful content\n     * (including potential white space).\n     *\n     * The ArtBox's default value is the page's CropBox.\n     *\n     * @returns An object defining the lower left corner of the ArtBox and its\n     *          width & height.\n     */\n    PDFPage.prototype.getArtBox = function () {\n        var _a;\n        var artBox = this.node.ArtBox();\n        return (_a = artBox === null || artBox === void 0 ? void 0 : artBox.asRectangle()) !== null && _a !== void 0 ? _a : this.getCropBox();\n    };\n    /**\n     * Translate this page's content to a new location on the page. This operation\n     * is often useful after resizing the page with [[setSize]]. For example:\n     * ```js\n     * // Add 50 units of whitespace to the top and right of the page\n     * page.setSize(page.getWidth() + 50, page.getHeight() + 50)\n     *\n     * // Move the page's content from the lower-left corner of the page\n     * // to the top-right corner.\n     * page.translateContent(50, 50)\n     *\n     * // Now there are 50 units of whitespace to the left and bottom of the page\n     * ```\n     * See also: [[resetPosition]]\n     * @param x The new position on the x-axis for this page's content.\n     * @param y The new position on the y-axis for this page's content.\n     */\n    PDFPage.prototype.translateContent = function (x, y) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        this.node.normalize();\n        this.getContentStream();\n        var start = this.createContentStream(pushGraphicsState(), translate(x, y));\n        var startRef = this.doc.context.register(start);\n        var end = this.createContentStream(popGraphicsState());\n        var endRef = this.doc.context.register(end);\n        this.node.wrapContentStreams(startRef, endRef);\n    };\n    /**\n     * Scale the size, content, and annotations of a page.\n     *\n     * For example:\n     * ```js\n     * page.scale(0.5, 0.5);\n     * ```\n     *\n     * @param x The factor by which the width for the page should be scaled\n     *          (e.g. `0.5` is 50%).\n     * @param y The factor by which the height for the page should be scaled\n     *          (e.g. `2.0` is 200%).\n     */\n    PDFPage.prototype.scale = function (x, y) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        this.setSize(this.getWidth() * x, this.getHeight() * y);\n        this.scaleContent(x, y);\n        this.scaleAnnotations(x, y);\n    };\n    /**\n     * Scale the content of a page. This is useful after resizing an existing\n     * page. This scales only the content, not the annotations.\n     *\n     * For example:\n     * ```js\n     * // Bisect the size of the page\n     * page.setSize(page.getWidth() / 2, page.getHeight() / 2);\n     *\n     * // Scale the content of the page down by 50% in x and y\n     * page.scaleContent(0.5, 0.5);\n     * ```\n     * See also: [[scaleAnnotations]]\n     * @param x The factor by which the x-axis for the content should be scaled\n     *          (e.g. `0.5` is 50%).\n     * @param y The factor by which the y-axis for the content should be scaled\n     *          (e.g. `2.0` is 200%).\n     */\n    PDFPage.prototype.scaleContent = function (x, y) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        this.node.normalize();\n        this.getContentStream();\n        var start = this.createContentStream(pushGraphicsState(), scale(x, y));\n        var startRef = this.doc.context.register(start);\n        var end = this.createContentStream(popGraphicsState());\n        var endRef = this.doc.context.register(end);\n        this.node.wrapContentStreams(startRef, endRef);\n    };\n    /**\n     * Scale the annotations of a page. This is useful if you want to scale a\n     * page with comments or other annotations.\n     * ```js\n     * // Scale the content of the page down by 50% in x and y\n     * page.scaleContent(0.5, 0.5);\n     *\n     * // Scale the content of the page down by 50% in x and y\n     * page.scaleAnnotations(0.5, 0.5);\n     * ```\n     * See also: [[scaleContent]]\n     * @param x The factor by which the x-axis for the annotations should be\n     *          scaled (e.g. `0.5` is 50%).\n     * @param y The factor by which the y-axis for the annotations should be\n     *          scaled (e.g. `2.0` is 200%).\n     */\n    PDFPage.prototype.scaleAnnotations = function (x, y) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        var annots = this.node.Annots();\n        if (!annots)\n            return;\n        for (var idx = 0; idx < annots.size(); idx++) {\n            var annot = annots.lookup(idx);\n            if (annot instanceof PDFDict)\n                this.scaleAnnot(annot, x, y);\n        }\n    };\n    /**\n     * Reset the x and y coordinates of this page to `(0, 0)`. This operation is\n     * often useful after calling [[translateContent]]. For example:\n     * ```js\n     * // Shift the page's contents up and to the right by 50 units\n     * page.translateContent(50, 50)\n     *\n     * // This text will shifted - it will be drawn at (50, 50)\n     * page.drawText('I am shifted')\n     *\n     * // Move back to (0, 0)\n     * page.resetPosition()\n     *\n     * // This text will not be shifted - it will be drawn at (0, 0)\n     * page.drawText('I am not shifted')\n     * ```\n     */\n    PDFPage.prototype.resetPosition = function () {\n        this.getContentStream(false);\n        this.x = 0;\n        this.y = 0;\n    };\n    /**\n     * Choose a default font for this page. The default font will be used whenever\n     * text is drawn on this page and no font is specified. For example:\n     * ```js\n     * import { StandardFonts } from 'pdf-lib'\n     *\n     * const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman)\n     * const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const courierFont = await pdfDoc.embedFont(StandardFonts.Courier)\n     *\n     * const page = pdfDoc.addPage()\n     *\n     * page.setFont(helveticaFont)\n     * page.drawText('I will be drawn in Helvetica')\n     *\n     * page.setFont(timesRomanFont)\n     * page.drawText('I will be drawn in Courier', { font: courierFont })\n     * ```\n     * @param font The default font to be used when drawing text on this page.\n     */\n    PDFPage.prototype.setFont = function (font) {\n        // TODO: Reuse image Font name if we've already added this image to Resources.Fonts\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        this.font = font;\n        this.fontKey = this.node.newFontDictionary(this.font.name, this.font.ref);\n    };\n    /**\n     * Choose a default font size for this page. The default font size will be\n     * used whenever text is drawn on this page and no font size is specified.\n     * For example:\n     * ```js\n     * page.setFontSize(12)\n     * page.drawText('I will be drawn in size 12')\n     *\n     * page.setFontSize(36)\n     * page.drawText('I will be drawn in size 24', { fontSize: 24 })\n     * ```\n     * @param fontSize The default font size to be used when drawing text on this\n     *                 page.\n     */\n    PDFPage.prototype.setFontSize = function (fontSize) {\n        assertIs(fontSize, 'fontSize', ['number']);\n        this.fontSize = fontSize;\n    };\n    /**\n     * Choose a default font color for this page. The default font color will be\n     * used whenever text is drawn on this page and no font color is specified.\n     * For example:\n     * ```js\n     * import { rgb, cmyk, grayscale } from 'pdf-lib'\n     *\n     * page.setFontColor(rgb(0.97, 0.02, 0.97))\n     * page.drawText('I will be drawn in pink')\n     *\n     * page.setFontColor(cmyk(0.4, 0.7, 0.39, 0.15))\n     * page.drawText('I will be drawn in gray', { color: grayscale(0.5) })\n     * ```\n     * @param fontColor The default font color to be used when drawing text on\n     *                  this page.\n     */\n    PDFPage.prototype.setFontColor = function (fontColor) {\n        assertIs(fontColor, 'fontColor', [[Object, 'Color']]);\n        this.fontColor = fontColor;\n    };\n    /**\n     * Choose a default line height for this page. The default line height will be\n     * used whenever text is drawn on this page and no line height is specified.\n     * For example:\n     * ```js\n     * page.setLineHeight(12);\n     * page.drawText('These lines will be vertically \\n separated by 12 units')\n     *\n     * page.setLineHeight(36);\n     * page.drawText('These lines will be vertically \\n separated by 24 units', {\n     *   lineHeight: 24\n     * })\n     * ```\n     * @param lineHeight The default line height to be used when drawing text on\n     *                   this page.\n     */\n    PDFPage.prototype.setLineHeight = function (lineHeight) {\n        assertIs(lineHeight, 'lineHeight', ['number']);\n        this.lineHeight = lineHeight;\n    };\n    /**\n     * Get the default position of this page. For example:\n     * ```js\n     * const { x, y } = page.getPosition()\n     * ```\n     * @returns The default position of the page.\n     */\n    PDFPage.prototype.getPosition = function () {\n        return { x: this.x, y: this.y };\n    };\n    /**\n     * Get the default x coordinate of this page. For example:\n     * ```js\n     * const x = page.getX()\n     * ```\n     * @returns The default x coordinate of the page.\n     */\n    PDFPage.prototype.getX = function () {\n        return this.x;\n    };\n    /**\n     * Get the default y coordinate of this page. For example:\n     * ```js\n     * const y = page.getY()\n     * ```\n     * @returns The default y coordinate of the page.\n     */\n    PDFPage.prototype.getY = function () {\n        return this.y;\n    };\n    /**\n     * Change the default position of this page. For example:\n     * ```js\n     * page.moveTo(0, 0)\n     * page.drawText('I will be drawn at the origin')\n     *\n     * page.moveTo(0, 25)\n     * page.drawText('I will be drawn 25 units up')\n     *\n     * page.moveTo(25, 25)\n     * page.drawText('I will be drawn 25 units up and 25 units to the right')\n     * ```\n     * @param x The new default position on the x-axis for this page.\n     * @param y The new default position on the y-axis for this page.\n     */\n    PDFPage.prototype.moveTo = function (x, y) {\n        assertIs(x, 'x', ['number']);\n        assertIs(y, 'y', ['number']);\n        this.x = x;\n        this.y = y;\n    };\n    /**\n     * Change the default position of this page to be further down the y-axis.\n     * For example:\n     * ```js\n     * page.moveTo(50, 50)\n     * page.drawText('I will be drawn at (50, 50)')\n     *\n     * page.moveDown(10)\n     * page.drawText('I will be drawn at (50, 40)')\n     * ```\n     * @param yDecrease The amount by which the page's default position along the\n     *                  y-axis should be decreased.\n     */\n    PDFPage.prototype.moveDown = function (yDecrease) {\n        assertIs(yDecrease, 'yDecrease', ['number']);\n        this.y -= yDecrease;\n    };\n    /**\n     * Change the default position of this page to be further up the y-axis.\n     * For example:\n     * ```js\n     * page.moveTo(50, 50)\n     * page.drawText('I will be drawn at (50, 50)')\n     *\n     * page.moveUp(10)\n     * page.drawText('I will be drawn at (50, 60)')\n     * ```\n     * @param yIncrease The amount by which the page's default position along the\n     *                  y-axis should be increased.\n     */\n    PDFPage.prototype.moveUp = function (yIncrease) {\n        assertIs(yIncrease, 'yIncrease', ['number']);\n        this.y += yIncrease;\n    };\n    /**\n     * Change the default position of this page to be further left on the x-axis.\n     * For example:\n     * ```js\n     * page.moveTo(50, 50)\n     * page.drawText('I will be drawn at (50, 50)')\n     *\n     * page.moveLeft(10)\n     * page.drawText('I will be drawn at (40, 50)')\n     * ```\n     * @param xDecrease The amount by which the page's default position along the\n     *                  x-axis should be decreased.\n     */\n    PDFPage.prototype.moveLeft = function (xDecrease) {\n        assertIs(xDecrease, 'xDecrease', ['number']);\n        this.x -= xDecrease;\n    };\n    /**\n     * Change the default position of this page to be further right on the y-axis.\n     * For example:\n     * ```js\n     * page.moveTo(50, 50)\n     * page.drawText('I will be drawn at (50, 50)')\n     *\n     * page.moveRight(10)\n     * page.drawText('I will be drawn at (60, 50)')\n     * ```\n     * @param xIncrease The amount by which the page's default position along the\n     *                  x-axis should be increased.\n     */\n    PDFPage.prototype.moveRight = function (xIncrease) {\n        assertIs(xIncrease, 'xIncrease', ['number']);\n        this.x += xIncrease;\n    };\n    /**\n     * Push one or more operators to the end of this page's current content\n     * stream. For example:\n     * ```js\n     * import {\n     *   pushGraphicsState,\n     *   moveTo,\n     *   lineTo,\n     *   closePath,\n     *   setFillingColor,\n     *   rgb,\n     *   fill,\n     *   popGraphicsState,\n     * } from 'pdf-lib'\n     *\n     * // Draw a green triangle in the lower-left corner of the page\n     * page.pushOperators(\n     *   pushGraphicsState(),\n     *   moveTo(0, 0),\n     *   lineTo(100, 0),\n     *   lineTo(50, 100),\n     *   closePath(),\n     *   setFillingColor(rgb(0.0, 1.0, 0.0)),\n     *   fill(),\n     *   popGraphicsState(),\n     * )\n     * ```\n     * @param operator The operators to be pushed.\n     */\n    PDFPage.prototype.pushOperators = function () {\n        var operator = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            operator[_i] = arguments[_i];\n        }\n        assertEachIs(operator, 'operator', [[PDFOperator, 'PDFOperator']]);\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, operator);\n    };\n    /**\n     * Draw one or more lines of text on this page. For example:\n     * ```js\n     * import { StandardFonts, rgb } from 'pdf-lib'\n     *\n     * const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman)\n     *\n     * const page = pdfDoc.addPage()\n     *\n     * page.setFont(helveticaFont)\n     *\n     * page.moveTo(5, 200)\n     * page.drawText('The Life of an Egg', { size: 36 })\n     *\n     * page.moveDown(36)\n     * page.drawText('An Epic Tale of Woe', { size: 30 })\n     *\n     * page.drawText(\n     *   `Humpty Dumpty sat on a wall \\n` +\n     *   `Humpty Dumpty had a great fall; \\n` +\n     *   `All the king's horses and all the king's men \\n` +\n     *   `Couldn't put Humpty together again. \\n`,\n     *   {\n     *     x: 25,\n     *     y: 100,\n     *     font: timesRomanFont,\n     *     size: 24,\n     *     color: rgb(1, 0, 0),\n     *     lineHeight: 24,\n     *     opacity: 0.75,\n     *   },\n     * )\n     * ```\n     * @param text The text to be drawn.\n     * @param options The options to be used when drawing the text.\n     */\n    PDFPage.prototype.drawText = function (text, options) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        if (options === void 0) { options = {}; }\n        assertIs(text, 'text', ['string']);\n        assertOrUndefined(options.color, 'options.color', [[Object, 'Color']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertOrUndefined(options.font, 'options.font', [[PDFFont, 'PDFFont']]);\n        assertOrUndefined(options.size, 'options.size', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.xSkew, 'options.xSkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.ySkew, 'options.ySkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.lineHeight, 'options.lineHeight', ['number']);\n        assertOrUndefined(options.maxWidth, 'options.maxWidth', ['number']);\n        assertOrUndefined(options.wordBreaks, 'options.wordBreaks', [Array]);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var _h = this.setOrEmbedFont(options.font), oldFont = _h.oldFont, newFont = _h.newFont, newFontKey = _h.newFontKey;\n        var fontSize = options.size || this.fontSize;\n        var wordBreaks = options.wordBreaks || this.doc.defaultWordBreaks;\n        var textWidth = function (t) { return newFont.widthOfTextAtSize(t, fontSize); };\n        var lines = options.maxWidth === undefined\n            ? lineSplit(cleanText(text))\n            : breakTextIntoLines(text, wordBreaks, options.maxWidth, textWidth);\n        var encodedLines = new Array(lines.length);\n        for (var idx = 0, len = lines.length; idx < len; idx++) {\n            encodedLines[idx] = newFont.encodeText(lines[idx]);\n        }\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            blendMode: options.blendMode,\n        });\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawLinesOfText(encodedLines, {\n            color: (_a = options.color) !== null && _a !== void 0 ? _a : this.fontColor,\n            font: newFontKey,\n            size: fontSize,\n            rotate: (_b = options.rotate) !== null && _b !== void 0 ? _b : degrees(0),\n            xSkew: (_c = options.xSkew) !== null && _c !== void 0 ? _c : degrees(0),\n            ySkew: (_d = options.ySkew) !== null && _d !== void 0 ? _d : degrees(0),\n            x: (_e = options.x) !== null && _e !== void 0 ? _e : this.x,\n            y: (_f = options.y) !== null && _f !== void 0 ? _f : this.y,\n            lineHeight: (_g = options.lineHeight) !== null && _g !== void 0 ? _g : this.lineHeight,\n            graphicsState: graphicsStateKey,\n        }));\n        if (options.font) {\n            if (oldFont)\n                this.setFont(oldFont);\n            else\n                this.resetFont();\n        }\n    };\n    /**\n     * Draw an image on this page. For example:\n     * ```js\n     * import { degrees } from 'pdf-lib'\n     *\n     * const jpgUrl = 'https://pdf-lib.js.org/assets/cat_riding_unicorn.jpg'\n     * const jpgImageBytes = await fetch(jpgUrl).then((res) => res.arrayBuffer())\n     *\n     * const jpgImage = await pdfDoc.embedJpg(jpgImageBytes)\n     * const jpgDims = jpgImage.scale(0.5)\n     *\n     * const page = pdfDoc.addPage()\n     *\n     * page.drawImage(jpgImage, {\n     *   x: 25,\n     *   y: 25,\n     *   width: jpgDims.width,\n     *   height: jpgDims.height,\n     *   rotate: degrees(30),\n     *   opacity: 0.75,\n     * })\n     * ```\n     * @param image The image to be drawn.\n     * @param options The options to be used when drawing the image.\n     */\n    PDFPage.prototype.drawImage = function (image, options) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        if (options === void 0) { options = {}; }\n        // TODO: Reuse image XObject name if we've already added this image to Resources.XObjects\n        assertIs(image, 'image', [[PDFImage, 'PDFImage']]);\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.width, 'options.width', ['number']);\n        assertOrUndefined(options.height, 'options.height', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.xSkew, 'options.xSkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.ySkew, 'options.ySkew', [[Object, 'Rotation']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var xObjectKey = this.node.newXObject('Image', image.ref);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            blendMode: options.blendMode,\n        });\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawImage(xObjectKey, {\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : image.size().width,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : image.size().height,\n            rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : degrees(0),\n            xSkew: (_f = options.xSkew) !== null && _f !== void 0 ? _f : degrees(0),\n            ySkew: (_g = options.ySkew) !== null && _g !== void 0 ? _g : degrees(0),\n            graphicsState: graphicsStateKey,\n        }));\n    };\n    /**\n     * Draw an embedded PDF page on this page. For example:\n     * ```js\n     * import { degrees } from 'pdf-lib'\n     *\n     * const pdfDoc = await PDFDocument.create()\n     * const page = pdfDoc.addPage()\n     *\n     * const sourcePdfUrl = 'https://pdf-lib.js.org/assets/with_large_page_count.pdf'\n     * const sourcePdf = await fetch(sourcePdfUrl).then((res) => res.arrayBuffer())\n     *\n     * // Embed page 74 from the PDF\n     * const [embeddedPage] = await pdfDoc.embedPdf(sourcePdf, 73)\n     *\n     * page.drawPage(embeddedPage, {\n     *   x: 250,\n     *   y: 200,\n     *   xScale: 0.5,\n     *   yScale: 0.5,\n     *   rotate: degrees(30),\n     *   opacity: 0.75,\n     * })\n     * ```\n     *\n     * The `options` argument accepts both `width`/`height` and `xScale`/`yScale`\n     * as options. Since each of these options defines the size of the drawn page,\n     * if both options are given, `width` and `height` take precedence and the\n     * corresponding scale variants are ignored.\n     *\n     * @param embeddedPage The embedded page to be drawn.\n     * @param options The options to be used when drawing the embedded page.\n     */\n    PDFPage.prototype.drawPage = function (embeddedPage, options) {\n        var _a, _b, _c, _d, _e;\n        if (options === void 0) { options = {}; }\n        // TODO: Reuse embeddedPage XObject name if we've already added this embeddedPage to Resources.XObjects\n        assertIs(embeddedPage, 'embeddedPage', [\n            [PDFEmbeddedPage, 'PDFEmbeddedPage'],\n        ]);\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.xScale, 'options.xScale', ['number']);\n        assertOrUndefined(options.yScale, 'options.yScale', ['number']);\n        assertOrUndefined(options.width, 'options.width', ['number']);\n        assertOrUndefined(options.height, 'options.height', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.xSkew, 'options.xSkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.ySkew, 'options.ySkew', [[Object, 'Rotation']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var xObjectKey = this.node.newXObject('EmbeddedPdfPage', embeddedPage.ref);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            blendMode: options.blendMode,\n        });\n        // prettier-ignore\n        var xScale = (options.width !== undefined ? options.width / embeddedPage.width\n            : options.xScale !== undefined ? options.xScale\n                : 1);\n        // prettier-ignore\n        var yScale = (options.height !== undefined ? options.height / embeddedPage.height\n            : options.yScale !== undefined ? options.yScale\n                : 1);\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawPage(xObjectKey, {\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y,\n            xScale: xScale,\n            yScale: yScale,\n            rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0),\n            xSkew: (_d = options.xSkew) !== null && _d !== void 0 ? _d : degrees(0),\n            ySkew: (_e = options.ySkew) !== null && _e !== void 0 ? _e : degrees(0),\n            graphicsState: graphicsStateKey,\n        }));\n    };\n    /**\n     * Draw an SVG path on this page. For example:\n     * ```js\n     * import { rgb } from 'pdf-lib'\n     *\n     * const svgPath = 'M 0,20 L 100,160 Q 130,200 150,120 C 190,-40 200,200 300,150 L 400,90'\n     *\n     * // Draw path as black line\n     * page.drawSvgPath(svgPath, { x: 25, y: 75 })\n     *\n     * // Change border style and opacity\n     * page.drawSvgPath(svgPath, {\n     *   x: 25,\n     *   y: 275,\n     *   borderColor: rgb(0.5, 0.5, 0.5),\n     *   borderWidth: 2,\n     *   borderOpacity: 0.75,\n     * })\n     *\n     * // Set fill color and opacity\n     * page.drawSvgPath(svgPath, {\n     *   x: 25,\n     *   y: 475,\n     *   color: rgb(1.0, 0, 0),\n     *   opacity: 0.75,\n     * })\n     *\n     * // Draw 50% of original size\n     * page.drawSvgPath(svgPath, {\n     *   x: 25,\n     *   y: 675,\n     *   scale: 0.5,\n     * })\n     * ```\n     * @param path The SVG path to be drawn.\n     * @param options The options to be used when drawing the SVG path.\n     */\n    PDFPage.prototype.drawSvgPath = function (path, options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        if (options === void 0) { options = {}; }\n        assertIs(path, 'path', ['string']);\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.scale, 'options.scale', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.borderWidth, 'options.borderWidth', ['number']);\n        assertOrUndefined(options.color, 'options.color', [[Object, 'Color']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertOrUndefined(options.borderColor, 'options.borderColor', [\n            [Object, 'Color'],\n        ]);\n        assertOrUndefined(options.borderDashArray, 'options.borderDashArray', [\n            Array,\n        ]);\n        assertOrUndefined(options.borderDashPhase, 'options.borderDashPhase', [\n            'number',\n        ]);\n        assertIsOneOfOrUndefined(options.borderLineCap, 'options.borderLineCap', LineCapStyle);\n        assertRangeOrUndefined(options.borderOpacity, 'options.borderOpacity', 0, 1);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            borderOpacity: options.borderOpacity,\n            blendMode: options.blendMode,\n        });\n        if (!('color' in options) && !('borderColor' in options)) {\n            options.borderColor = rgb(0, 0, 0);\n        }\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawSvgPath(path, {\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y,\n            scale: options.scale,\n            rotate: (_c = options.rotate) !== null && _c !== void 0 ? _c : degrees(0),\n            color: (_d = options.color) !== null && _d !== void 0 ? _d : undefined,\n            borderColor: (_e = options.borderColor) !== null && _e !== void 0 ? _e : undefined,\n            borderWidth: (_f = options.borderWidth) !== null && _f !== void 0 ? _f : 0,\n            borderDashArray: (_g = options.borderDashArray) !== null && _g !== void 0 ? _g : undefined,\n            borderDashPhase: (_h = options.borderDashPhase) !== null && _h !== void 0 ? _h : undefined,\n            borderLineCap: (_j = options.borderLineCap) !== null && _j !== void 0 ? _j : undefined,\n            graphicsState: graphicsStateKey,\n        }));\n    };\n    /**\n     * Draw a line on this page. For example:\n     * ```js\n     * import { rgb } from 'pdf-lib'\n     *\n     * page.drawLine({\n     *   start: { x: 25, y: 75 },\n     *   end: { x: 125, y: 175 },\n     *   thickness: 2,\n     *   color: rgb(0.75, 0.2, 0.2),\n     *   opacity: 0.75,\n     * })\n     * ```\n     * @param options The options to be used when drawing the line.\n     */\n    PDFPage.prototype.drawLine = function (options) {\n        var _a, _b, _c, _d, _e;\n        assertIs(options.start, 'options.start', [\n            [Object, '{ x: number, y: number }'],\n        ]);\n        assertIs(options.end, 'options.end', [\n            [Object, '{ x: number, y: number }'],\n        ]);\n        assertIs(options.start.x, 'options.start.x', ['number']);\n        assertIs(options.start.y, 'options.start.y', ['number']);\n        assertIs(options.end.x, 'options.end.x', ['number']);\n        assertIs(options.end.y, 'options.end.y', ['number']);\n        assertOrUndefined(options.thickness, 'options.thickness', ['number']);\n        assertOrUndefined(options.color, 'options.color', [[Object, 'Color']]);\n        assertOrUndefined(options.dashArray, 'options.dashArray', [Array]);\n        assertOrUndefined(options.dashPhase, 'options.dashPhase', ['number']);\n        assertIsOneOfOrUndefined(options.lineCap, 'options.lineCap', LineCapStyle);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            borderOpacity: options.opacity,\n            blendMode: options.blendMode,\n        });\n        if (!('color' in options)) {\n            options.color = rgb(0, 0, 0);\n        }\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawLine({\n            start: options.start,\n            end: options.end,\n            thickness: (_a = options.thickness) !== null && _a !== void 0 ? _a : 1,\n            color: (_b = options.color) !== null && _b !== void 0 ? _b : undefined,\n            dashArray: (_c = options.dashArray) !== null && _c !== void 0 ? _c : undefined,\n            dashPhase: (_d = options.dashPhase) !== null && _d !== void 0 ? _d : undefined,\n            lineCap: (_e = options.lineCap) !== null && _e !== void 0 ? _e : undefined,\n            graphicsState: graphicsStateKey,\n        }));\n    };\n    /**\n     * Draw a rectangle on this page. For example:\n     * ```js\n     * import { degrees, grayscale, rgb } from 'pdf-lib'\n     *\n     * page.drawRectangle({\n     *   x: 25,\n     *   y: 75,\n     *   width: 250,\n     *   height: 75,\n     *   rotate: degrees(-15),\n     *   borderWidth: 5,\n     *   borderColor: grayscale(0.5),\n     *   color: rgb(0.75, 0.2, 0.2),\n     *   opacity: 0.5,\n     *   borderOpacity: 0.75,\n     * })\n     * ```\n     * @param options The options to be used when drawing the rectangle.\n     */\n    PDFPage.prototype.drawRectangle = function (options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n        if (options === void 0) { options = {}; }\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.width, 'options.width', ['number']);\n        assertOrUndefined(options.height, 'options.height', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.xSkew, 'options.xSkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.ySkew, 'options.ySkew', [[Object, 'Rotation']]);\n        assertOrUndefined(options.borderWidth, 'options.borderWidth', ['number']);\n        assertOrUndefined(options.color, 'options.color', [[Object, 'Color']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertOrUndefined(options.borderColor, 'options.borderColor', [\n            [Object, 'Color'],\n        ]);\n        assertOrUndefined(options.borderDashArray, 'options.borderDashArray', [\n            Array,\n        ]);\n        assertOrUndefined(options.borderDashPhase, 'options.borderDashPhase', [\n            'number',\n        ]);\n        assertIsOneOfOrUndefined(options.borderLineCap, 'options.borderLineCap', LineCapStyle);\n        assertRangeOrUndefined(options.borderOpacity, 'options.borderOpacity', 0, 1);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            borderOpacity: options.borderOpacity,\n            blendMode: options.blendMode,\n        });\n        if (!('color' in options) && !('borderColor' in options)) {\n            options.color = rgb(0, 0, 0);\n        }\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawRectangle({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y,\n            width: (_c = options.width) !== null && _c !== void 0 ? _c : 150,\n            height: (_d = options.height) !== null && _d !== void 0 ? _d : 100,\n            rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : degrees(0),\n            xSkew: (_f = options.xSkew) !== null && _f !== void 0 ? _f : degrees(0),\n            ySkew: (_g = options.ySkew) !== null && _g !== void 0 ? _g : degrees(0),\n            borderWidth: (_h = options.borderWidth) !== null && _h !== void 0 ? _h : 0,\n            color: (_j = options.color) !== null && _j !== void 0 ? _j : undefined,\n            borderColor: (_k = options.borderColor) !== null && _k !== void 0 ? _k : undefined,\n            borderDashArray: (_l = options.borderDashArray) !== null && _l !== void 0 ? _l : undefined,\n            borderDashPhase: (_m = options.borderDashPhase) !== null && _m !== void 0 ? _m : undefined,\n            graphicsState: graphicsStateKey,\n            borderLineCap: (_o = options.borderLineCap) !== null && _o !== void 0 ? _o : undefined,\n        }));\n    };\n    /**\n     * Draw a square on this page. For example:\n     * ```js\n     * import { degrees, grayscale, rgb } from 'pdf-lib'\n     *\n     * page.drawSquare({\n     *   x: 25,\n     *   y: 75,\n     *   size: 100,\n     *   rotate: degrees(-15),\n     *   borderWidth: 5,\n     *   borderColor: grayscale(0.5),\n     *   color: rgb(0.75, 0.2, 0.2),\n     *   opacity: 0.5,\n     *   borderOpacity: 0.75,\n     * })\n     * ```\n     * @param options The options to be used when drawing the square.\n     */\n    PDFPage.prototype.drawSquare = function (options) {\n        if (options === void 0) { options = {}; }\n        var size = options.size;\n        assertOrUndefined(size, 'size', ['number']);\n        this.drawRectangle(__assign(__assign({}, options), { width: size, height: size }));\n    };\n    /**\n     * Draw an ellipse on this page. For example:\n     * ```js\n     * import { grayscale, rgb } from 'pdf-lib'\n     *\n     * page.drawEllipse({\n     *   x: 200,\n     *   y: 75,\n     *   xScale: 100,\n     *   yScale: 50,\n     *   borderWidth: 5,\n     *   borderColor: grayscale(0.5),\n     *   color: rgb(0.75, 0.2, 0.2),\n     *   opacity: 0.5,\n     *   borderOpacity: 0.75,\n     * })\n     * ```\n     * @param options The options to be used when drawing the ellipse.\n     */\n    PDFPage.prototype.drawEllipse = function (options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n        if (options === void 0) { options = {}; }\n        assertOrUndefined(options.x, 'options.x', ['number']);\n        assertOrUndefined(options.y, 'options.y', ['number']);\n        assertOrUndefined(options.xScale, 'options.xScale', ['number']);\n        assertOrUndefined(options.yScale, 'options.yScale', ['number']);\n        assertOrUndefined(options.rotate, 'options.rotate', [[Object, 'Rotation']]);\n        assertOrUndefined(options.color, 'options.color', [[Object, 'Color']]);\n        assertRangeOrUndefined(options.opacity, 'opacity.opacity', 0, 1);\n        assertOrUndefined(options.borderColor, 'options.borderColor', [\n            [Object, 'Color'],\n        ]);\n        assertRangeOrUndefined(options.borderOpacity, 'options.borderOpacity', 0, 1);\n        assertOrUndefined(options.borderWidth, 'options.borderWidth', ['number']);\n        assertOrUndefined(options.borderDashArray, 'options.borderDashArray', [\n            Array,\n        ]);\n        assertOrUndefined(options.borderDashPhase, 'options.borderDashPhase', [\n            'number',\n        ]);\n        assertIsOneOfOrUndefined(options.borderLineCap, 'options.borderLineCap', LineCapStyle);\n        assertIsOneOfOrUndefined(options.blendMode, 'options.blendMode', BlendMode);\n        var graphicsStateKey = this.maybeEmbedGraphicsState({\n            opacity: options.opacity,\n            borderOpacity: options.borderOpacity,\n            blendMode: options.blendMode,\n        });\n        if (!('color' in options) && !('borderColor' in options)) {\n            options.color = rgb(0, 0, 0);\n        }\n        var contentStream = this.getContentStream();\n        contentStream.push.apply(contentStream, drawEllipse({\n            x: (_a = options.x) !== null && _a !== void 0 ? _a : this.x,\n            y: (_b = options.y) !== null && _b !== void 0 ? _b : this.y,\n            xScale: (_c = options.xScale) !== null && _c !== void 0 ? _c : 100,\n            yScale: (_d = options.yScale) !== null && _d !== void 0 ? _d : 100,\n            rotate: (_e = options.rotate) !== null && _e !== void 0 ? _e : undefined,\n            color: (_f = options.color) !== null && _f !== void 0 ? _f : undefined,\n            borderColor: (_g = options.borderColor) !== null && _g !== void 0 ? _g : undefined,\n            borderWidth: (_h = options.borderWidth) !== null && _h !== void 0 ? _h : 0,\n            borderDashArray: (_j = options.borderDashArray) !== null && _j !== void 0 ? _j : undefined,\n            borderDashPhase: (_k = options.borderDashPhase) !== null && _k !== void 0 ? _k : undefined,\n            borderLineCap: (_l = options.borderLineCap) !== null && _l !== void 0 ? _l : undefined,\n            graphicsState: graphicsStateKey,\n        }));\n    };\n    /**\n     * Draw a circle on this page. For example:\n     * ```js\n     * import { grayscale, rgb } from 'pdf-lib'\n     *\n     * page.drawCircle({\n     *   x: 200,\n     *   y: 150,\n     *   size: 100,\n     *   borderWidth: 5,\n     *   borderColor: grayscale(0.5),\n     *   color: rgb(0.75, 0.2, 0.2),\n     *   opacity: 0.5,\n     *   borderOpacity: 0.75,\n     * })\n     * ```\n     * @param options The options to be used when drawing the ellipse.\n     */\n    PDFPage.prototype.drawCircle = function (options) {\n        if (options === void 0) { options = {}; }\n        var _a = options.size, size = _a === void 0 ? 100 : _a;\n        assertOrUndefined(size, 'size', ['number']);\n        this.drawEllipse(__assign(__assign({}, options), { xScale: size, yScale: size }));\n    };\n    PDFPage.prototype.setOrEmbedFont = function (font) {\n        var oldFont = this.font;\n        var oldFontKey = this.fontKey;\n        if (font)\n            this.setFont(font);\n        else\n            this.getFont();\n        var newFont = this.font;\n        var newFontKey = this.fontKey;\n        return { oldFont: oldFont, oldFontKey: oldFontKey, newFont: newFont, newFontKey: newFontKey };\n    };\n    PDFPage.prototype.getFont = function () {\n        if (!this.font || !this.fontKey) {\n            var font = this.doc.embedStandardFont(StandardFonts.Helvetica);\n            this.setFont(font);\n        }\n        return [this.font, this.fontKey];\n    };\n    PDFPage.prototype.resetFont = function () {\n        this.font = undefined;\n        this.fontKey = undefined;\n    };\n    PDFPage.prototype.getContentStream = function (useExisting) {\n        if (useExisting === void 0) { useExisting = true; }\n        if (useExisting && this.contentStream)\n            return this.contentStream;\n        this.contentStream = this.createContentStream();\n        this.contentStreamRef = this.doc.context.register(this.contentStream);\n        this.node.addContentStream(this.contentStreamRef);\n        return this.contentStream;\n    };\n    PDFPage.prototype.createContentStream = function () {\n        var operators = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            operators[_i] = arguments[_i];\n        }\n        var dict = this.doc.context.obj({});\n        var contentStream = PDFContentStream.of(dict, operators);\n        return contentStream;\n    };\n    PDFPage.prototype.maybeEmbedGraphicsState = function (options) {\n        var opacity = options.opacity, borderOpacity = options.borderOpacity, blendMode = options.blendMode;\n        if (opacity === undefined &&\n            borderOpacity === undefined &&\n            blendMode === undefined) {\n            return undefined;\n        }\n        var graphicsState = this.doc.context.obj({\n            Type: 'ExtGState',\n            ca: opacity,\n            CA: borderOpacity,\n            BM: blendMode,\n        });\n        var key = this.node.newExtGState('GS', graphicsState);\n        return key;\n    };\n    PDFPage.prototype.scaleAnnot = function (annot, x, y) {\n        var selectors = ['RD', 'CL', 'Vertices', 'QuadPoints', 'L', 'Rect'];\n        for (var idx = 0, len = selectors.length; idx < len; idx++) {\n            var list = annot.lookup(PDFName.of(selectors[idx]));\n            if (list instanceof PDFArray)\n                list.scalePDFNumbers(x, y);\n        }\n        var inkLists = annot.lookup(PDFName.of('InkList'));\n        if (inkLists instanceof PDFArray) {\n            for (var idx = 0, len = inkLists.size(); idx < len; idx++) {\n                var arr = inkLists.lookup(idx);\n                if (arr instanceof PDFArray)\n                    arr.scalePDFNumbers(x, y);\n            }\n        }\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.addPage]] and [[PDFDocument.insertPage]]\n     * > methods, which can create instances of [[PDFPage]] for you.\n     *\n     * Create an instance of [[PDFPage]] from an existing leaf node.\n     *\n     * @param leafNode The leaf node to be wrapped.\n     * @param ref The unique reference for the page.\n     * @param doc The document to which the page will belong.\n     */\n    PDFPage.of = function (leafNode, ref, doc) {\n        return new PDFPage(leafNode, ref, doc);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFDocument.addPage]] and [[PDFDocument.insertPage]]\n     * > methods, which can create instances of [[PDFPage]] for you.\n     *\n     * Create an instance of [[PDFPage]].\n     *\n     * @param doc The document to which the page will belong.\n     */\n    PDFPage.create = function (doc) {\n        assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);\n        var dummyRef = PDFRef.of(-1);\n        var pageLeaf = PDFPageLeaf.withContextAndParent(doc.context, dummyRef);\n        var pageRef = doc.context.register(pageLeaf);\n        return new PDFPage(pageLeaf, pageRef, doc);\n    };\n    return PDFPage;\n}());\nexport default PDFPage;\n//# sourceMappingURL=PDFPage.js.map","import { __extends } from \"tslib\";\nimport PDFPage from \"../PDFPage\";\nimport PDFFont from \"../PDFFont\";\nimport { ImageAlignment } from \"../image/alignment\";\nimport { normalizeAppearance, defaultButtonAppearanceProvider, } from \"./appearances\";\nimport PDFField, { assertFieldAppearanceOptions, } from \"./PDFField\";\nimport { rgb } from \"../colors\";\nimport { degrees } from \"../rotations\";\nimport { PDFStream, PDFAcroPushButton, } from \"../../core\";\nimport { assertIs, assertOrUndefined, assertPositive } from \"../../utils\";\n/**\n * Represents a button field of a [[PDFForm]].\n *\n * [[PDFButton]] fields are interactive controls that users can click with their\n * mouse. This type of [[PDFField]] is not stateful. The purpose of a button\n * is to perform an action when the user clicks on it, such as opening a print\n * modal or resetting the form. Buttons are typically rectangular in shape and\n * have a text label describing the action that they perform when clicked.\n */\nvar PDFButton = /** @class */ (function (_super) {\n    __extends(PDFButton, _super);\n    function PDFButton(acroPushButton, ref, doc) {\n        var _this = _super.call(this, acroPushButton, ref, doc) || this;\n        assertIs(acroPushButton, 'acroButton', [\n            [PDFAcroPushButton, 'PDFAcroPushButton'],\n        ]);\n        _this.acroField = acroPushButton;\n        return _this;\n    }\n    /**\n     * Display an image inside the bounds of this button's widgets. For example:\n     * ```js\n     * const pngImage = await pdfDoc.embedPng(...)\n     * const button = form.getButton('some.button.field')\n     * button.setImage(pngImage, ImageAlignment.Center)\n     * ```\n     * This will update the appearances streams for each of this button's widgets.\n     * @param image The image that should be displayed.\n     * @param alignment The alignment of the image.\n     */\n    PDFButton.prototype.setImage = function (image, alignment) {\n        if (alignment === void 0) { alignment = ImageAlignment.Center; }\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var streamRef = this.createImageAppearanceStream(widget, image, alignment);\n            this.updateWidgetAppearances(widget, { normal: streamRef });\n        }\n        this.markAsClean();\n    };\n    /**\n     * Set the font size for this field. Larger font sizes will result in larger\n     * text being displayed when PDF readers render this button. Font sizes may\n     * be integer or floating point numbers. Supplying a negative font size will\n     * cause this method to throw an error.\n     *\n     * For example:\n     * ```js\n     * const button = form.getButton('some.button.field')\n     * button.setFontSize(4)\n     * button.setFontSize(15.7)\n     * ```\n     *\n     * > This method depends upon the existence of a default appearance\n     * > (`/DA`) string. If this field does not have a default appearance string,\n     * > or that string does not contain a font size (via the `Tf` operator),\n     * > then this method will throw an error.\n     *\n     * @param fontSize The font size to be used when rendering text in this field.\n     */\n    PDFButton.prototype.setFontSize = function (fontSize) {\n        assertPositive(fontSize, 'fontSize');\n        this.acroField.setFontSize(fontSize);\n        this.markAsDirty();\n    };\n    /**\n     * Show this button on the specified page with the given text. For example:\n     * ```js\n     * const ubuntuFont = await pdfDoc.embedFont(ubuntuFontBytes)\n     * const page = pdfDoc.addPage()\n     *\n     * const form = pdfDoc.getForm()\n     * const button = form.createButton('some.button.field')\n     *\n     * button.addToPage('Do Stuff', page, {\n     *   x: 50,\n     *   y: 75,\n     *   width: 200,\n     *   height: 100,\n     *   textColor: rgb(1, 0, 0),\n     *   backgroundColor: rgb(0, 1, 0),\n     *   borderColor: rgb(0, 0, 1),\n     *   borderWidth: 2,\n     *   rotate: degrees(90),\n     *   font: ubuntuFont,\n     * })\n     * ```\n     * This will create a new widget for this button field.\n     * @param text The text to be displayed for this button widget.\n     * @param page The page to which this button widget should be added.\n     * @param options The options to be used when adding this button widget.\n     */\n    PDFButton.prototype.addToPage = function (\n    // TODO: This needs to be optional, e.g. for image buttons\n    text, page, options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n        assertOrUndefined(text, 'text', ['string']);\n        assertOrUndefined(page, 'page', [[PDFPage, 'PDFPage']]);\n        assertFieldAppearanceOptions(options);\n        // Create a widget for this button\n        var widget = this.createWidget({\n            x: ((_a = options === null || options === void 0 ? void 0 : options.x) !== null && _a !== void 0 ? _a : 0) - ((_b = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _b !== void 0 ? _b : 0) / 2,\n            y: ((_c = options === null || options === void 0 ? void 0 : options.y) !== null && _c !== void 0 ? _c : 0) - ((_d = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _d !== void 0 ? _d : 0) / 2,\n            width: (_e = options === null || options === void 0 ? void 0 : options.width) !== null && _e !== void 0 ? _e : 100,\n            height: (_f = options === null || options === void 0 ? void 0 : options.height) !== null && _f !== void 0 ? _f : 50,\n            textColor: (_g = options === null || options === void 0 ? void 0 : options.textColor) !== null && _g !== void 0 ? _g : rgb(0, 0, 0),\n            backgroundColor: (_h = options === null || options === void 0 ? void 0 : options.backgroundColor) !== null && _h !== void 0 ? _h : rgb(0.75, 0.75, 0.75),\n            borderColor: options === null || options === void 0 ? void 0 : options.borderColor,\n            borderWidth: (_j = options === null || options === void 0 ? void 0 : options.borderWidth) !== null && _j !== void 0 ? _j : 0,\n            rotate: (_k = options === null || options === void 0 ? void 0 : options.rotate) !== null && _k !== void 0 ? _k : degrees(0),\n            caption: text,\n            hidden: options === null || options === void 0 ? void 0 : options.hidden,\n            page: page.ref,\n        });\n        var widgetRef = this.doc.context.register(widget.dict);\n        // Add widget to this field\n        this.acroField.addWidget(widgetRef);\n        // Set appearance streams for widget\n        var font = (_l = options === null || options === void 0 ? void 0 : options.font) !== null && _l !== void 0 ? _l : this.doc.getForm().getDefaultFont();\n        this.updateWidgetAppearance(widget, font);\n        // Add widget to the given page\n        page.node.addAnnot(widgetRef);\n    };\n    /**\n     * Returns `true` if this button has been marked as dirty, or if any of this\n     * button's widgets do not have an appearance stream. For example:\n     * ```js\n     * const button = form.getButton('some.button.field')\n     * if (button.needsAppearancesUpdate()) console.log('Needs update')\n     * ```\n     * @returns Whether or not this button needs an appearance update.\n     */\n    PDFButton.prototype.needsAppearancesUpdate = function () {\n        var _a;\n        if (this.isDirty())\n            return true;\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            var hasAppearances = ((_a = widget.getAppearances()) === null || _a === void 0 ? void 0 : _a.normal) instanceof PDFStream;\n            if (!hasAppearances)\n                return true;\n        }\n        return false;\n    };\n    /**\n     * Update the appearance streams for each of this button's widgets using\n     * the default appearance provider for buttons. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const button = form.getButton('some.button.field')\n     * button.defaultUpdateAppearances(helvetica)\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     */\n    PDFButton.prototype.defaultUpdateAppearances = function (font) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        this.updateAppearances(font);\n    };\n    /**\n     * Update the appearance streams for each of this button's widgets using\n     * the given appearance provider. If no `provider` is passed, the default\n     * appearance provider for buttons will be used. For example:\n     * ```js\n     * const helvetica = await pdfDoc.embedFont(StandardFonts.Helvetica)\n     * const button = form.getButton('some.button.field')\n     * button.updateAppearances(helvetica, (field, widget, font) => {\n     *   ...\n     *   return {\n     *     normal: drawButton(...),\n     *     down: drawButton(...),\n     *   }\n     * })\n     * ```\n     * @param font The font to be used for creating the appearance streams.\n     * @param provider Optionally, the appearance provider to be used for\n     *                 generating the contents of the appearance streams.\n     */\n    PDFButton.prototype.updateAppearances = function (font, provider) {\n        assertIs(font, 'font', [[PDFFont, 'PDFFont']]);\n        assertOrUndefined(provider, 'provider', [Function]);\n        var widgets = this.acroField.getWidgets();\n        for (var idx = 0, len = widgets.length; idx < len; idx++) {\n            var widget = widgets[idx];\n            this.updateWidgetAppearance(widget, font, provider);\n        }\n    };\n    PDFButton.prototype.updateWidgetAppearance = function (widget, font, provider) {\n        var apProvider = provider !== null && provider !== void 0 ? provider : defaultButtonAppearanceProvider;\n        var appearances = normalizeAppearance(apProvider(this, widget, font));\n        this.updateWidgetAppearanceWithFont(widget, font, appearances);\n    };\n    /**\n     * > **NOTE:** You probably don't want to call this method directly. Instead,\n     * > consider using the [[PDFForm.getButton]] method, which will create an\n     * > instance of [[PDFButton]] for you.\n     *\n     * Create an instance of [[PDFButton]] from an existing acroPushButton and ref\n     *\n     * @param acroPushButton The underlying `PDFAcroPushButton` for this button.\n     * @param ref The unique reference for this button.\n     * @param doc The document to which this button will belong.\n     */\n    PDFButton.of = function (acroPushButton, ref, doc) { return new PDFButton(acroPushButton, ref, doc); };\n    return PDFButton;\n}(PDFField));\nexport default PDFButton;\n//# sourceMappingURL=PDFButton.js.map","\nimport {\n  grey,\n  red,\n} from '@material-ui/core/colors';\n\nimport base from './base';\n\nimport {\n  mergeDeep,\n} from 'immutable';\n\nconst theme = mergeDeep({}, base, {\n  palette: {\n    contrastThreshold: 3,\n    tonalOffset: 0.2,\n    primary: grey,\n    secondary: grey,\n    error: red,\n  },\n});\n\nexport default theme;\n","import base from './base';\nimport lightDefault from './lightDefault';\nimport whiteLoading from './whiteLoading';\n\nexport default {\n  base,\n  lightDefault,\n  whiteLoading,\n};","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { makeSelectContact } from '../../modules/AccountModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport { Contact, Product } from '../../models';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { SetOverlayComponentContentAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { GetDiscountsForCustomerId } from '../../modules/AccountModule/actions';\nimport { makeSelectUserOfficeId } from '../../modules/AtsModule/selectors';\nimport ProductDrawerEdit from '../ProductDrawerEdit';\nimport SuccessDrawer, { SUCCESS_DRAWER } from '../SuccessDrawer';\nimport ProductDrawerView from '../ProductDrawerView';\nimport TakeoffDrawerView from '../TakeoffDrawerView';\nimport { makeSelectSelectedProjectFiles } from '../../modules/ProjectModule/selectors';\nimport { List } from 'immutable';\n\ninterface IProductDrawerContentProps {\n}\n\nexport interface IModalProps {\n}\n\ninterface IProductDrawerProps extends IProductDrawerContentProps {\n  dispatch: React.Dispatch<IAction>;\n  content: string;\n  modalProps: IModalProps;\n  selectedProjectFiles: List<IMap<File>>;\n}\n\nexport const TAKEOFF_DRAWER_LOADING = '__TakeoffDrawerLOADING__';\nexport const TAKEOFF_DRAWER_ID = 'TakeoffDrawer';\n\ntype ProductDrawerType = WithTranslation & IProductDrawerProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass ProductDrawer extends React.Component<ProductDrawerType, {}> {\n\n  public componentWillUnmount(): void {\n    const { dispatch } = this.props;\n    dispatch(new ToggleOverlayComponentAction({\n      id: TAKEOFF_DRAWER_ID,\n      open: false\n    }))\n  }\n\n  // public componentDidUpdate = (prevProps, prevState) => {\n  //   const { product } = this.props;\n  //   if (prevProps.product && !product) {\n  //     this.toggleDrawer();\n  //   }\n  // }\n\n  public toggleDrawer = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: TAKEOFF_DRAWER_ID\n    }))\n  };\n\n  public render() {\n    const {\n      content: _contentString,\n      selectedProjectFiles,\n    } = this.props;\n\n    const publicFiles = selectedProjectFiles && selectedProjectFiles.filter(file => file.get('permission') === 'public');\n    const protectedFiles = selectedProjectFiles && selectedProjectFiles.filter(file => file.get('permission') === 'protected');\n\n    const content = (() => {\n      switch (_contentString) {\n        // case TAKEOFF_DRAWER_LOADING: {\n        //   return <ProductDrawerEdit\n        //     productData={product}\n        //     toggleDrawer={this.toggleDrawer}\n        //   />\n        // }\n        case SUCCESS_DRAWER: {\n          return <SuccessDrawer\n          />\n        }\n        default: {\n          return <TakeoffDrawerView\n            publicFiles={publicFiles}\n            protectedFiles={protectedFiles}\n          />\n        }\n      }\n    })();\n\n    return <Grid>\n      {\n        content\n      }\n    </Grid>\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    display: 'flex',\n  }\n});\n\nconst mapStateToProps = (state, props: IProductDrawerContentProps) => {\n  const {\n    // TAKEOFF_DRAWER_ID,\n  } = props;\n  return createStructuredSelector({\n    selectedProjectFiles: makeSelectSelectedProjectFiles(),\n  })(state);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductDrawerContentProps>> (\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductDrawer);\n","import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n  parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n  elem: unknown,\n  options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem as SimpleNode;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n  const elem = el as {\n    tagName?: string;\n    id?: string;\n    className?: string;\n    getAttribute(key: string): string;\n  };\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n      return elem.dataset['sentryComponent'];\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    // eslint-disable-next-line prefer-const\n    className = elem.className;\n    if (className && isString(className)) {\n      classes = className.split(/\\s+/);\n      for (i = 0; i < classes.length; i++) {\n        out.push(`.${classes[i]}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (i = 0; i < allowedAttrs.length; i++) {\n    key = allowedAttrs[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) as unknown as E;\n  }\n  return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem as SimpleNode;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n      return currentElem.dataset['sentryComponent'];\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n  // memoize\n  (obj: any) => boolean,\n  // unmemoize\n  (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner: any = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj: any): boolean {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj: any): void {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\ndeclare const EdgeRuntime: string | undefined;\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement as unknown) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFetch(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  /** Display name of this error instance. */\n  public name: string;\n\n  public logLevel: ConsoleLevel;\n\n  public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n    super(message);\n\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n","import type {\n  DsnComponents,\n  Event,\n  EventEnvelope,\n  EventItem,\n  SdkInfo,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  SessionEnvelope,\n  SessionItem,\n} from '@sentry/types';\nimport {\n  createEnvelope,\n  createEventEnvelopeHeaders,\n  dsnToString,\n  getSdkMetadataForEnvelopeHeader,\n} from '@sentry/utils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n  session: Session | SessionAggregates,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): SessionEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem: SessionItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n  event: Event,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): EventEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem: EventItem = [{ type: eventType }, event];\n  return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n  return __SENTRY_SDK_SOURCE__;\n}\n","import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn: DsnComponents,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n  dsnLike: DsnLike,\n  dialogOptions: {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [key: string]: any;\n    user?: { name?: string; email?: string };\n  },\n): string {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule<T>(moduleName: string): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(module, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  try {\n    const { cwd } = dynamicRequire(module, 'process');\n    mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n  } catch (e) {\n    // no-empty\n  }\n\n  return mod;\n}\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = {\n    parse: require('./lib/parse'),\n    stringify: require('./lib/stringify')\n};\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","var baseConformsTo = require('./_baseConformsTo'),\n    keys = require('./keys');\n\n/**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\nfunction conformsTo(object, source) {\n  return source == null || baseConformsTo(object, source, keys(source));\n}\n\nmodule.exports = conformsTo;\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n  var key = '__global_unique_id__';\n  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n  var Provider = /*#__PURE__*/function (_Component) {\n    _inheritsLoose(Provider, _Component);\n\n    function Provider() {\n      var _this;\n\n      _this = _Component.apply(this, arguments) || this;\n      _this.emitter = createEventEmitter(_this.props.value);\n      return _this;\n    }\n\n    var _proto = Provider.prototype;\n\n    _proto.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0;\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n          if (process.env.NODE_ENV !== 'production') {\n            warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    _proto.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(Component);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n  var Consumer = /*#__PURE__*/function (_Component2) {\n    _inheritsLoose(Consumer, _Component2);\n\n    function Consumer() {\n      var _this2;\n\n      _this2 = _Component2.apply(this, arguments) || this;\n      _this2.state = {\n        value: _this2.getValue()\n      };\n\n      _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({\n            value: _this2.getValue()\n          });\n        }\n      };\n\n      return _this2;\n    }\n\n    var _proto2 = Consumer.prototype;\n\n    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n\n      var observedBits = this.props.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    _proto2.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    _proto2.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(Component);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|default|defer|dir|disabled|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|itemProp|itemScope|itemType|itemID|itemRef|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","var ApplicationContextProviderImpl = /** @class */ (function () {\n    function ApplicationContextProviderImpl() {\n    }\n    ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n        return {\n            versionName: this.versionName,\n            language: getLanguage(),\n            platform: 'Web',\n            os: undefined,\n            deviceModel: undefined,\n        };\n    };\n    return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n    return ((typeof navigator !== 'undefined' &&\n        ((navigator.languages && navigator.languages[0]) ||\n            navigator.language)) ||\n        '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n    function EventBridgeImpl() {\n        this.queue = [];\n    }\n    EventBridgeImpl.prototype.logEvent = function (event) {\n        if (!this.receiver) {\n            if (this.queue.length < 512) {\n                this.queue.push(event);\n            }\n        }\n        else {\n            this.receiver(event);\n        }\n    };\n    EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n        this.receiver = receiver;\n        if (this.queue.length > 0) {\n            this.queue.forEach(function (event) {\n                receiver(event);\n            });\n            this.queue = [];\n        }\n    };\n    return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n  __assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n    }\n    return t;\n  };\n  return __assign.apply(this, arguments);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n    var primitive = ['string', 'number', 'boolean', 'undefined'];\n    var typeA = typeof obj1;\n    var typeB = typeof obj2;\n    if (typeA !== typeB) {\n        return false;\n    }\n    for (var _i = 0, primitive_1 = primitive; _i < primitive_1.length; _i++) {\n        var p = primitive_1[_i];\n        if (p === typeA) {\n            return obj1 === obj2;\n        }\n    }\n    // check null\n    if (obj1 == null && obj2 == null) {\n        return true;\n    }\n    else if (obj1 == null || obj2 == null) {\n        return false;\n    }\n    // if got here - objects\n    if (obj1.length !== obj2.length) {\n        return false;\n    }\n    //check if arrays\n    var isArrayA = Array.isArray(obj1);\n    var isArrayB = Array.isArray(obj2);\n    if (isArrayA !== isArrayB) {\n        return false;\n    }\n    if (isArrayA && isArrayB) {\n        //arrays\n        for (var i = 0; i < obj1.length; i++) {\n            if (!isEqual(obj1[i], obj2[i])) {\n                return false;\n            }\n        }\n    }\n    else {\n        //objects\n        var sorted1 = Object.keys(obj1).sort();\n        var sorted2 = Object.keys(obj2).sort();\n        if (!isEqual(sorted1, sorted2)) {\n            return false;\n        }\n        //compare object values\n        var result_1 = true;\n        Object.keys(obj1).forEach(function (key) {\n            if (!isEqual(obj1[key], obj2[key])) {\n                result_1 = false;\n            }\n        });\n        return result_1;\n    }\n    return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n    Object.entries = function (obj) {\n        var ownProps = Object.keys(obj);\n        var i = ownProps.length;\n        var resArray = new Array(i);\n        while (i--) {\n            resArray[i] = [ownProps[i], obj[ownProps[i]]];\n        }\n        return resArray;\n    };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n    function IdentityStoreImpl() {\n        this.identity = { userProperties: {} };\n        this.listeners = new Set();\n    }\n    IdentityStoreImpl.prototype.editIdentity = function () {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var actingUserProperties = __assign({}, this.identity.userProperties);\n        var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n        return {\n            setUserId: function (userId) {\n                actingIdentity.userId = userId;\n                return this;\n            },\n            setDeviceId: function (deviceId) {\n                actingIdentity.deviceId = deviceId;\n                return this;\n            },\n            setUserProperties: function (userProperties) {\n                actingIdentity.userProperties = userProperties;\n                return this;\n            },\n            setOptOut: function (optOut) {\n                actingIdentity.optOut = optOut;\n                return this;\n            },\n            updateUserProperties: function (actions) {\n                var actingProperties = actingIdentity.userProperties || {};\n                for (var _i = 0, _a = Object.entries(actions); _i < _a.length; _i++) {\n                    var _b = _a[_i], action = _b[0], properties = _b[1];\n                    switch (action) {\n                        case ID_OP_SET:\n                            for (var _c = 0, _d = Object.entries(properties); _c < _d.length; _c++) {\n                                var _e = _d[_c], key = _e[0], value = _e[1];\n                                actingProperties[key] = value;\n                            }\n                            break;\n                        case ID_OP_UNSET:\n                            for (var _f = 0, _g = Object.keys(properties); _f < _g.length; _f++) {\n                                var key = _g[_f];\n                                delete actingProperties[key];\n                            }\n                            break;\n                        case ID_OP_CLEAR_ALL:\n                            actingProperties = {};\n                            break;\n                    }\n                }\n                actingIdentity.userProperties = actingProperties;\n                return this;\n            },\n            commit: function () {\n                self.setIdentity(actingIdentity);\n                return this;\n            },\n        };\n    };\n    IdentityStoreImpl.prototype.getIdentity = function () {\n        return __assign({}, this.identity);\n    };\n    IdentityStoreImpl.prototype.setIdentity = function (identity) {\n        var originalIdentity = __assign({}, this.identity);\n        this.identity = __assign({}, identity);\n        if (!isEqual(originalIdentity, this.identity)) {\n            this.listeners.forEach(function (listener) {\n                listener(identity);\n            });\n        }\n    };\n    IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n        this.listeners.add(listener);\n    };\n    IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n        this.listeners.delete(listener);\n    };\n    return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n    ? globalThis\n    : typeof global !== 'undefined'\n        ? global\n        : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n    function AnalyticsConnector() {\n        this.identityStore = new IdentityStoreImpl();\n        this.eventBridge = new EventBridgeImpl();\n        this.applicationContextProvider = new ApplicationContextProviderImpl();\n    }\n    AnalyticsConnector.getInstance = function (instanceName) {\n        if (!safeGlobal['analyticsConnectorInstances']) {\n            safeGlobal['analyticsConnectorInstances'] = {};\n        }\n        if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n            safeGlobal['analyticsConnectorInstances'][instanceName] =\n                new AnalyticsConnector();\n        }\n        return safeGlobal['analyticsConnectorInstances'][instanceName];\n    };\n    return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n  const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n  let called = false\n  return () => {\n    if (called) {\n      return\n    }\n    called = true\n    window.Promise.resolve().then(() => {\n      called = false\n      fn()\n    })\n  }\n}\n\nexport function taskDebounce(fn) {\n  let scheduled = false;\n  return () => {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(() => {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n  ? microtaskDebounce\n  : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n  const getType = {};\n  return (\n    functionToCheck &&\n    getType.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  const window = element.ownerDocument.defaultView;\n  const css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body\n    case '#document':\n      return element.body\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n","/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  const noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  let offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  const nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (\n    ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n    getStyleComputedProperty(offsetParent, 'position') === 'static'\n  ) {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  const order =\n    element1.compareDocumentPosition(element2) &\n    Node.DOCUMENT_POSITION_FOLLOWING;\n  const start = order ? element1 : element2;\n  const end = order ? element2 : element1;\n\n  // Get common ancestor container\n  const range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  const { commonAncestorContainer } = range;\n\n  // Both nodes are inside #document\n  if (\n    (element1 !== commonAncestorContainer &&\n      element2 !== commonAncestorContainer) ||\n    start.contains(end)\n  ) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  const element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n  const { nodeName } = element;\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return (\n    nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n  );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n  const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  const nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    const html = element.ownerDocument.documentElement;\n    const scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n  const scrollTop = getScroll(element, 'top');\n  const scrollLeft = getScroll(element, 'left');\n  const modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n  const sideA = axis === 'x' ? 'Left' : 'Top';\n  const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return (\n    parseFloat(styles[`border${sideA}Width`]) +\n    parseFloat(styles[`border${sideB}Width`])\n  );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(\n    body[`offset${axis}`],\n    body[`scroll${axis}`],\n    html[`client${axis}`],\n    html[`offset${axis}`],\n    html[`scroll${axis}`],\n    isIE(10)\n      ? (parseInt(html[`offset${axis}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n    : 0 \n  );\n}\n\nexport default function getWindowSizes(document) {\n  const body = document.body;\n  const html = document.documentElement;\n  const computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle),\n  };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n  return {\n    ...offsets,\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height,\n  };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n  let rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      const scrollTop = getScroll(element, 'top');\n      const scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    }\n    else {\n      rect = element.getBoundingClientRect();\n    }\n  }\n  catch(e){}\n\n  const result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top,\n  };\n\n  // subtract scrollbar size from sizes\n  const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  const width =\n    sizes.width || element.clientWidth || result.width;\n  const height =\n    sizes.height || element.clientHeight || result.height;\n\n  let horizScrollbar = element.offsetWidth - width;\n  let vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    const styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n  const isIE10 = runIsIE(10);\n  const isHTML = parent.nodeName === 'HTML';\n  const childrenRect = getBoundingClientRect(children);\n  const parentRect = getBoundingClientRect(parent);\n  const scrollParent = getScrollParent(children);\n\n  const styles = getStyleComputedProperty(parent);\n  const borderTopWidth = parseFloat(styles.borderTopWidth);\n  const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if(fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  let offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height,\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    const marginTop = parseFloat(styles.marginTop);\n    const marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (\n    isIE10 && !fixedPosition\n      ? parent.contains(scrollParent)\n      : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n  ) {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n  const html = element.ownerDocument.documentElement;\n  const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  const width = Math.max(html.clientWidth, window.innerWidth || 0);\n  const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  const scrollTop = !excludeScroll ? getScroll(html) : 0;\n  const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  const offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width,\n    height,\n  };\n\n  return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n  const nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  const parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n   if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  let el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n  popper,\n  reference,\n  padding,\n  boundariesElement,\n  fixedPosition = false\n) {\n  // NOTE: 1 DOM access here\n\n  let boundaries = { top: 0, left: 0 };\n  const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport' ) {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  }\n\n  else {\n    // Handle other cases based on DOM element used as boundaries\n    let boundariesNode;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    const offsets = getOffsetRectRelativeToArbitraryNode(\n      boundariesNode,\n      offsetParent,\n      fixedPosition\n    );\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      const { height, width } = getWindowSizes(popper.ownerDocument);\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  const isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n  boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n  return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n  placement,\n  refRect,\n  popper,\n  reference,\n  boundariesElement,\n  padding = 0\n) {\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  const boundaries = getBoundaries(\n    popper,\n    reference,\n    padding,\n    boundariesElement\n  );\n\n  const rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top,\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height,\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom,\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height,\n    },\n  };\n\n  const sortedAreas = Object.keys(rects)\n    .map(key => ({\n      key,\n      ...rects[key],\n      area: getArea(rects[key]),\n    }))\n    .sort((a, b) => b.area - a.area);\n\n  const filteredAreas = sortedAreas.filter(\n    ({ width, height }) =>\n      width >= popper.clientWidth && height >= popper.clientHeight\n  );\n\n  const computedPlacement = filteredAreas.length > 0\n    ? filteredAreas[0].key\n    : sortedAreas[0].key;\n\n  const variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n  const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n  const window = element.ownerDocument.defaultView;\n  const styles = window.getComputedStyle(element);\n  const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  const result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x,\n  };\n  return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n  const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  const popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  const popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height,\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  const mainSide = isHoriz ? 'top' : 'left';\n  const secondarySide = isHoriz ? 'left' : 'top';\n  const measurement = isHoriz ? 'height' : 'width';\n  const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] =\n    referenceOffsets[mainSide] +\n    referenceOffsets[measurement] / 2 -\n    popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] =\n      referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] =\n      referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n  const modifiersToRun = ends === undefined\n    ? modifiers\n    : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(modifier => {\n    if (modifier['function']) { // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(cur => cur[prop] === value);\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  const match = find(arr, obj => obj[prop] === value);\n  return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  let data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {},\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(\n    this.state,\n    this.popper,\n    this.reference,\n    this.options.positionFixed\n  );\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(\n    this.options.placement,\n    data.offsets.reference,\n    this.popper,\n    this.reference,\n    this.options.modifiers.flip.boundariesElement,\n    this.options.modifiers.flip.padding\n  );\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(\n    this.popper,\n    data.offsets.reference,\n    data.placement\n  );\n\n  data.offsets.popper.position = this.options.positionFixed\n    ? 'fixed'\n    : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(\n    ({ name, enabled }) => enabled && name === modifierName\n  );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n  const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefix = prefixes[i];\n    const toCheck = prefix ? `${prefix}${upperProp}` : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n  const ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  const isBody = scrollParent.nodeName === 'BODY';\n  const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(\n      getScrollParent(target.parentNode),\n      event,\n      callback,\n      scrollParents\n    );\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n  reference,\n  options,\n  state,\n  updateBound\n) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  const scrollElement = getScrollParent(reference);\n  attachToScrollParents(\n    scrollElement,\n    'scroll',\n    state.updateBound,\n    state.scrollParents\n  );\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(\n      this.reference,\n      this.options,\n      this.state,\n      this.scheduleUpdate\n    );\n  }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(target => {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n  Object.keys(styles).forEach(prop => {\n    let unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (\n      ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n        -1 &&\n      isNumeric(styles[prop])\n    ) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n  const { x, y } = options;\n  const { popper } = data.offsets;\n\n  // Remove this legacy support in Popper.js v2\n  const legacyGpuAccelerationOption = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'applyStyle'\n  ).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn(\n      'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n    );\n  }\n  const gpuAcceleration =\n    legacyGpuAccelerationOption !== undefined\n      ? legacyGpuAccelerationOption\n      : options.gpuAcceleration;\n\n  const offsetParent = getOffsetParent(data.instance.popper);\n  const offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  const styles = {\n    position: popper.position,\n  };\n\n  const offsets = getRoundedOffsets(\n    data,\n    window.devicePixelRatio < 2 || !isFirefox\n  );\n\n  const sideA = x === 'bottom' ? 'top' : 'bottom';\n  const sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  const prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  let left, top;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    const invertTop = sideA === 'bottom' ? -1 : 1;\n    const invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = `${sideA}, ${sideB}`;\n  }\n\n  // Attributes\n  const attributes = {\n    'x-placement': data.placement,\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = { ...attributes, ...data.attributes };\n  data.styles = { ...styles, ...data.styles };\n  data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n  return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n  modifiers,\n  requestingName,\n  requestedName\n) {\n  const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n  const isRequired =\n    !!requesting &&\n    modifiers.some(modifier => {\n      return (\n        modifier.name === requestedName &&\n        modifier.enabled &&\n        modifier.order < requesting.order\n      );\n    });\n\n  if (!isRequired) {\n    const requesting = `\\`${requestingName}\\``;\n    const requested = `\\`${requestedName}\\``;\n    console.warn(\n      `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n    );\n  }\n  return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n  'auto-start',\n  'auto',\n  'auto-end',\n  'top-start',\n  'top',\n  'top-end',\n  'right-start',\n  'right',\n  'right-end',\n  'bottom-end',\n  'bottom',\n  'bottom-start',\n  'left-end',\n  'left',\n  'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n  const index = validPlacements.indexOf(placement);\n  const arr = validPlacements\n    .slice(index + 1)\n    .concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    options.boundariesElement,\n    data.positionFixed\n  );\n\n  let placement = data.placement.split('-')[0];\n  let placementOpposite = getOppositePlacement(placement);\n  let variation = data.placement.split('-')[1] || '';\n\n  let flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach((step, index) => {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    const popperOffsets = data.offsets.popper;\n    const refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    const floor = Math.floor;\n    const overlapsRef =\n      (placement === 'left' &&\n        floor(popperOffsets.right) > floor(refOffsets.left)) ||\n      (placement === 'right' &&\n        floor(popperOffsets.left) < floor(refOffsets.right)) ||\n      (placement === 'top' &&\n        floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n      (placement === 'bottom' &&\n        floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n    const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    const overflowsBottom =\n      floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    const overflowsBoundaries =\n      (placement === 'left' && overflowsLeft) ||\n      (placement === 'right' && overflowsRight) ||\n      (placement === 'top' && overflowsTop) ||\n      (placement === 'bottom' && overflowsBottom);\n\n    // flip the variation if required\n    const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    const flippedVariationByRef =\n      !!options.flipVariations &&\n      ((isVertical && variation === 'start' && overflowsLeft) ||\n        (isVertical && variation === 'end' && overflowsRight) ||\n        (!isVertical && variation === 'start' && overflowsTop) ||\n        (!isVertical && variation === 'end' && overflowsBottom));\n\n    // flips variation if popper content overflows boundaries\n    const flippedVariationByContent =\n      !!options.flipVariationsByContent &&\n      ((isVertical && variation === 'start' && overflowsRight) ||\n        (isVertical && variation === 'end' && overflowsLeft) ||\n        (!isVertical && variation === 'start' && overflowsBottom) ||\n        (!isVertical && variation === 'end' && overflowsTop));\n\n    const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = {\n        ...data.offsets.popper,\n        ...getPopperOffsets(\n          data.instance.popper,\n          data.offsets.reference,\n          data.placement\n        ),\n      };\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  const value = +split[1];\n  const unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    let element;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    const rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    let size;\n    if (unit === 'vh') {\n      size = Math.max(\n        document.documentElement.clientHeight,\n        window.innerHeight || 0\n      );\n    } else {\n      size = Math.max(\n        document.documentElement.clientWidth,\n        window.innerWidth || 0\n      );\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n  offset,\n  popperOffsets,\n  referenceOffsets,\n  basePlacement\n) {\n  const offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  const divider = fragments.indexOf(\n    find(fragments, frag => frag.search(/,|\\s/) !== -1)\n  );\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn(\n      'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n    );\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  const splitRegex = /\\s*,\\s*|\\s+/;\n  let ops = divider !== -1\n    ? [\n        fragments\n          .slice(0, divider)\n          .concat([fragments[divider].split(splitRegex)[0]]),\n        [fragments[divider].split(splitRegex)[1]].concat(\n          fragments.slice(divider + 1)\n        ),\n      ]\n    : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map((op, index) => {\n    // Most of the units rely on the orientation of the popper\n    const measurement = (index === 1 ? !useHeight : useHeight)\n      ? 'height'\n      : 'width';\n    let mergeWithPrevious = false;\n    return (\n      op\n        // This aggregates any `+` or `-` sign that aren't considered operators\n        // e.g.: 10 + +5 => [10, +, +5]\n        .reduce((a, b) => {\n          if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n            a[a.length - 1] = b;\n            mergeWithPrevious = true;\n            return a;\n          } else if (mergeWithPrevious) {\n            a[a.length - 1] += b;\n            mergeWithPrevious = false;\n            return a;\n          } else {\n            return a.concat(b);\n          }\n        }, [])\n        // Here we convert the string values into number values (in px)\n        .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n    );\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach((op, index) => {\n    op.forEach((frag, index2) => {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n  const { placement, offsets: { popper, reference } } = data;\n  const basePlacement = placement.split('-')[0];\n\n  let offsets;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift,\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0,\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent',\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether,\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]',\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false,\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner,\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide,\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right',\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined,\n  },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    const { reference, popper } = data.offsets;\n    const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    const side = isVertical ? 'left' : 'top';\n    const measurement = isVertical ? 'width' : 'height';\n\n    const shiftOffsets = {\n      start: { [side]: reference[side] },\n      end: {\n        [side]: reference[side] + reference[measurement] - popper[measurement],\n      },\n    };\n\n    data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n  }\n\n  return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n  let boundariesElement =\n    options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  const transformProp = getSupportedPropertyName('transform');\n  const popperStyles = data.instance.popper.style; // assignment to help minification\n  const { top, left, [transformProp]: transform } = popperStyles;\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    boundariesElement,\n    data.positionFixed\n  );\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  const order = options.priority;\n  let popper = data.offsets.popper;\n\n  const check = {\n    primary(placement) {\n      let value = popper[placement];\n      if (\n        popper[placement] < boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return { [placement]: value };\n    },\n    secondary(placement) {\n      const mainSide = placement === 'right' ? 'left' : 'top';\n      let value = popper[mainSide];\n      if (\n        popper[placement] > boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.min(\n          popper[mainSide],\n          boundaries[placement] -\n            (placement === 'right' ? popper.width : popper.height)\n        );\n      }\n      return { [mainSide]: value };\n    },\n  };\n\n  order.forEach(placement => {\n    const side =\n      ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = { ...popper, ...check[side](placement) };\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n  const { popper, reference } = data.offsets;\n  const placement = data.placement.split('-')[0];\n  const floor = Math.floor;\n  const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  const side = isVertical ? 'right' : 'bottom';\n  const opSide = isVertical ? 'left' : 'top';\n  const measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] =\n      floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  let arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn(\n        'WARNING: `arrow.element` must be child of its popper element!'\n      );\n      return data;\n    }\n  }\n\n  const placement = data.placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  const len = isVertical ? 'height' : 'width';\n  const sideCapitalized = isVertical ? 'Top' : 'Left';\n  const side = sideCapitalized.toLowerCase();\n  const altSide = isVertical ? 'left' : 'top';\n  const opSide = isVertical ? 'bottom' : 'right';\n  const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -=\n      popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] +=\n      reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  const css = getStyleComputedProperty(data.instance.popper);\n  const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n  const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n  let sideValue =\n    center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = {\n    [side]: Math.round(sideValue),\n    [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n  };\n\n  return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] =\n    reference[basePlacement] -\n    (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  const refRect = data.offsets.reference;\n  const bound = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'preventOverflow'\n  ).boundaries;\n\n  if (\n    refRect.bottom < bound.top ||\n    refRect.left > bound.right ||\n    refRect.top > bound.bottom ||\n    refRect.right < bound.left\n  ) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n  const { popper, reference } = data.offsets;\n  const { round, floor } = Math;\n  const noRound = v => v;\n  \n  const referenceWidth = round(reference.width);\n  const popperWidth = round(popper.width);\n  \n  const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  const isVariation = data.placement.indexOf('-') !== -1;\n  const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  const horizontalToInteger = !shouldRound\n    ? noRound\n    : isVertical || isVariation || sameWidthParity\n    ? round\n    : floor;\n  const verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(\n      bothOddWidth && !isVariation && shouldRound\n        ? popper.left - 1\n        : popper.left\n    ),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right),\n  };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n  reference,\n  popper,\n  options,\n  modifierOptions,\n  state\n) {\n  // compute reference element offsets\n  const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  const placement = computeAutoPlacement(\n    options.placement,\n    referenceOffsets,\n    popper,\n    reference,\n    options.modifiers.flip.boundariesElement,\n    options.modifiers.flip.padding\n  );\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function(prop) {\n    const value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: () => {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: () => {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  constructor(reference, popper, options = {}) {\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = { ...Popper.Defaults, ...options };\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: [],\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys({\n      ...Popper.Defaults.modifiers,\n      ...options.modifiers,\n    }).forEach(name => {\n      this.options.modifiers[name] = {\n        // If it's a built-in modifier, use it as base\n        ...(Popper.Defaults.modifiers[name] || {}),\n        // If there are custom options, override and merge with default ones\n        ...(options.modifiers ? options.modifiers[name] : {}),\n      };\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers)\n      .map(name => ({\n        name,\n        ...this.options.modifiers[name],\n      }))\n      // sort the modifiers by order\n      .sort((a, b) => a.order - b.order);\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(modifierOptions => {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(\n          this.reference,\n          this.popper,\n          this.options,\n          modifierOptions,\n          this.state\n        );\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    const eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n  update() {\n    return update.call(this);\n  }\n  destroy() {\n    return destroy.call(this);\n  }\n  enableEventListeners() {\n    return enableEventListeners.call(this);\n  }\n  disableEventListeners() {\n    return disableEventListeners.call(this);\n  }\n\n  /**\n   * Schedules an update. It will run on the next UI update available.\n   * @method scheduleUpdate\n   * @memberof Popper\n   */\n  scheduleUpdate = () => requestAnimationFrame(this.update);\n\n  /**\n   * Collection of utilities useful when writing custom modifiers.\n   * Starting from version 1.7, this method is available only if you\n   * include `popper-utils.js` before `popper.js`.\n   *\n   * **DEPRECATION**: This way to access PopperUtils is deprecated\n   * and will be removed in v2! Use the PopperUtils module directly instead.\n   * Due to the high instability of the methods contained in Utils, we can't\n   * guarantee them to follow semver. Use them at your own risk!\n   * @static\n   * @private\n   * @type {Object}\n   * @deprecated since version 1.8\n   * @member Utils\n   * @memberof Popper\n   */\n  static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n  static placements = placements;\n\n  static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","/*!\n * Fuse.js v3.4.4 - Lightweight fuzzy-search (http://fusejs.io)\n * \n * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"Fuse\",[],t):\"object\"==typeof exports?exports.Fuse=t():e.Fuse=t()}(this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e,t){e.exports=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===Object.prototype.toString.call(e)}},function(e,t,n){function r(e){return(r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=n(2),a=n(8),s=n(0),c=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,h=void 0===c?.6:c,l=n.maxPatternLength,u=void 0===l?32:l,f=n.caseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,k=void 0===m?1:m,S=n.id,x=void 0===S?null:S,b=n.keys,M=void 0===b?[]:b,_=n.shouldSort,L=void 0===_||_,w=n.getFn,A=void 0===w?a:w,C=n.sortFn,I=void 0===C?function(e,t){return e.score-t.score}:C,O=n.tokenize,j=void 0!==O&&O,P=n.matchAllTokens,F=void 0!==P&&P,T=n.includeMatches,z=void 0!==T&&T,E=n.includeScore,K=void 0!==E&&E,$=n.verbose,J=void 0!==$&&$;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:k,id:x,keys:M,includeMatches:z,includeScore:K,shouldSort:L,getFn:A,sortFn:I,verbose:J,tokenize:j,matchAllTokens:F},this.setCollection(t)}var t,n,c;return t=e,(n=[{key:\"setCollection\",value:function(e){return this.list=e,e}},{key:\"search\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\\nSearch pattern: \"'.concat(e,'\"'));var n=this._prepareSearchers(e),r=n.tokenSearchers,o=n.fullSearcher,i=this._search(r,o),a=i.weights,s=i.results;return this._computeScore(a,s),this.options.shouldSort&&this._sort(s),t.limit&&\"number\"==typeof t.limit&&(s=s.slice(0,t.limit)),this._format(s)}},{key:\"_prepareSearchers\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),r=0,o=n.length;r<o;r+=1)t.push(new i(n[r],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:\"_search\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=this.list,r={},o=[];if(\"string\"==typeof n[0]){for(var i=0,a=n.length;i<a;i+=1)this._analyze({key:\"\",value:n[i],record:i,index:i},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t});return{weights:null,results:o}}for(var s={},c=0,h=n.length;c<h;c+=1)for(var l=n[c],u=0,f=this.options.keys.length;u<f;u+=1){var d=this.options.keys[u];if(\"string\"!=typeof d){if(s[d.name]={weight:1-d.weight||1},d.weight<=0||d.weight>1)throw new Error(\"Key weight has to be > 0 and <= 1\");d=d.name}else s[d]={weight:1};this._analyze({key:d,value:this.options.getFn(l,d),record:l,index:c},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t})}return{weights:s,results:o}}},{key:\"_analyze\",value:function(e,t){var n=e.key,r=e.arrayIndex,o=void 0===r?-1:r,i=e.value,a=e.record,c=e.index,h=t.tokenSearchers,l=void 0===h?[]:h,u=t.fullSearcher,f=void 0===u?[]:u,d=t.resultMap,v=void 0===d?{}:d,p=t.results,g=void 0===p?[]:p;if(null!=i){var y=!1,m=-1,k=0;if(\"string\"==typeof i){this._log(\"\\nKey: \".concat(\"\"===n?\"-\":n));var S=f.search(i);if(this._log('Full text: \"'.concat(i,'\", score: ').concat(S.score)),this.options.tokenize){for(var x=i.split(this.options.tokenSeparator),b=[],M=0;M<l.length;M+=1){var _=l[M];this._log('\\nPattern: \"'.concat(_.pattern,'\"'));for(var L=!1,w=0;w<x.length;w+=1){var A=x[w],C=_.search(A),I={};C.isMatch?(I[A]=C.score,y=!0,L=!0,b.push(C.score)):(I[A]=1,this.options.matchAllTokens||b.push(1)),this._log('Token: \"'.concat(A,'\", score: ').concat(I[A]))}L&&(k+=1)}m=b[0];for(var O=b.length,j=1;j<O;j+=1)m+=b[j];m/=O,this._log(\"Token score average:\",m)}var P=S.score;m>-1&&(P=(P+m)/2),this._log(\"Score average:\",P);var F=!this.options.tokenize||!this.options.matchAllTokens||k>=l.length;if(this._log(\"\\nCheck Matches: \".concat(F)),(y||S.isMatch)&&F){var T=v[c];T?T.output.push({key:n,arrayIndex:o,value:i,score:P,matchedIndices:S.matchedIndices}):(v[c]={item:a,output:[{key:n,arrayIndex:o,value:i,score:P,matchedIndices:S.matchedIndices}]},g.push(v[c]))}}else if(s(i))for(var z=0,E=i.length;z<E;z+=1)this._analyze({key:n,arrayIndex:z,value:i[z],record:a,index:c},{resultMap:v,results:g,tokenSearchers:l,fullSearcher:f})}}},{key:\"_computeScore\",value:function(e,t){this._log(\"\\n\\nComputing score:\\n\");for(var n=0,r=t.length;n<r;n+=1){for(var o=t[n].output,i=o.length,a=1,s=1,c=0;c<i;c+=1){var h=e?e[o[c].key].weight:1,l=(1===h?o[c].score:o[c].score||.001)*h;1!==h?s=Math.min(s,l):(o[c].nScore=l,a*=l)}t[n].score=1===s?a:s,this._log(t[n])}}},{key:\"_sort\",value:function(e){this._log(\"\\n\\nSorting....\"),e.sort(this.options.sortFn)}},{key:\"_format\",value:function(e){var t=[];if(this.options.verbose){var n=[];this._log(\"\\n\\nOutput:\\n\\n\",JSON.stringify(e,function(e,t){if(\"object\"===r(t)&&null!==t){if(-1!==n.indexOf(t))return;n.push(t)}return t})),n=null}var o=[];this.options.includeMatches&&o.push(function(e,t){var n=e.output;t.matches=[];for(var r=0,o=n.length;r<o;r+=1){var i=n[r];if(0!==i.matchedIndices.length){var a={indices:i.matchedIndices,value:i.value};i.key&&(a.key=i.key),i.hasOwnProperty(\"arrayIndex\")&&i.arrayIndex>-1&&(a.arrayIndex=i.arrayIndex),t.matches.push(a)}}}),this.options.includeScore&&o.push(function(e,t){t.score=e.score});for(var i=0,a=e.length;i<a;i+=1){var s=e[i];if(this.options.id&&(s.item=this.options.getFn(s.item,this.options.id)[0]),o.length){for(var c={item:s.item},h=0,l=o.length;h<l;h+=1)o[h](s,c);t.push(c)}else t.push(s.item)}return t}},{key:\"_log\",value:function(){var e;this.options.verbose&&(e=console).log.apply(e,arguments)}}])&&o(t.prototype,n),c&&o(t,c),e}();e.exports=c},function(e,t,n){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var o=n(3),i=n(4),a=n(7),s=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,h=void 0===c?.6:c,l=n.maxPatternLength,u=void 0===l?32:l,f=n.isCaseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,k=void 0===m?1:m;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:k},this.pattern=this.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length<=u&&(this.patternAlphabet=a(this.pattern))}var t,n,s;return t=e,(n=[{key:\"search\",value:function(e){if(this.options.isCaseSensitive||(e=e.toLowerCase()),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t=this.options,n=t.maxPatternLength,r=t.tokenSeparator;if(this.pattern.length>n)return o(e,this.pattern,r);var a=this.options,s=a.location,c=a.distance,h=a.threshold,l=a.findAllMatches,u=a.minMatchCharLength;return i(e,this.pattern,this.patternAlphabet,{location:s,distance:c,threshold:h,findAllMatches:l,minMatchCharLength:u})}}])&&r(t.prototype,n),s&&r(t,s),e}();e.exports=s},function(e,t){var n=/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;e.exports=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,o=new RegExp(t.replace(n,\"\\\\$&\").replace(r,\"|\")),i=e.match(o),a=!!i,s=[];if(a)for(var c=0,h=i.length;c<h;c+=1){var l=i[c];s.push([e.indexOf(l),l.length-1])}return{score:a?.5:1,isMatch:a,matchedIndices:s}}},function(e,t,n){var r=n(5),o=n(6);e.exports=function(e,t,n,i){for(var a=i.location,s=void 0===a?0:a,c=i.distance,h=void 0===c?100:c,l=i.threshold,u=void 0===l?.6:l,f=i.findAllMatches,d=void 0!==f&&f,v=i.minMatchCharLength,p=void 0===v?1:v,g=s,y=e.length,m=u,k=e.indexOf(t,g),S=t.length,x=[],b=0;b<y;b+=1)x[b]=0;if(-1!==k){var M=r(t,{errors:0,currentLocation:k,expectedLocation:g,distance:h});if(m=Math.min(M,m),-1!==(k=e.lastIndexOf(t,g+S))){var _=r(t,{errors:0,currentLocation:k,expectedLocation:g,distance:h});m=Math.min(_,m)}}k=-1;for(var L=[],w=1,A=S+y,C=1<<S-1,I=0;I<S;I+=1){for(var O=0,j=A;O<j;){r(t,{errors:I,currentLocation:g+j,expectedLocation:g,distance:h})<=m?O=j:A=j,j=Math.floor((A-O)/2+O)}A=j;var P=Math.max(1,g-j+1),F=d?y:Math.min(g+j,y)+S,T=Array(F+2);T[F+1]=(1<<I)-1;for(var z=F;z>=P;z-=1){var E=z-1,K=n[e.charAt(E)];if(K&&(x[E]=1),T[z]=(T[z+1]<<1|1)&K,0!==I&&(T[z]|=(L[z+1]|L[z])<<1|1|L[z+1]),T[z]&C&&(w=r(t,{errors:I,currentLocation:E,expectedLocation:g,distance:h}))<=m){if(m=w,(k=E)<=g)break;P=Math.max(1,2*g-k)}}if(r(t,{errors:I+1,currentLocation:g,expectedLocation:g,distance:h})>m)break;L=T}return{isMatch:k>=0,score:0===w?.001:w,matchedIndices:o(x,p)}}},function(e,t){e.exports=function(e,t){var n=t.errors,r=void 0===n?0:n,o=t.currentLocation,i=void 0===o?0:o,a=t.expectedLocation,s=void 0===a?0:a,c=t.distance,h=void 0===c?100:c,l=r/e.length,u=Math.abs(s-i);return h?l+u/h:u?1:l}},function(e,t){e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=-1,o=-1,i=0,a=e.length;i<a;i+=1){var s=e[i];s&&-1===r?r=i:s||-1===r||((o=i-1)-r+1>=t&&n.push([r,o]),r=-1)}return e[i-1]&&i-r>=t&&n.push([r,i-1]),n}},function(e,t){e.exports=function(e){for(var t={},n=e.length,r=0;r<n;r+=1)t[e.charAt(r)]=0;for(var o=0;o<n;o+=1)t[e.charAt(o)]|=1<<n-o-1;return t}},function(e,t,n){var r=n(0);e.exports=function(e,t){return function e(t,n,o){if(n){var i=n.indexOf(\".\"),a=n,s=null;-1!==i&&(a=n.slice(0,i),s=n.slice(i+1));var c=t[a];if(null!=c)if(s||\"string\"!=typeof c&&\"number\"!=typeof c)if(r(c))for(var h=0,l=c.length;h<l;h+=1)e(c[h],s,o);else s&&e(c,s,o);else o.push(c.toString())}else o.push(t);return o}(e,t,[])}}])});","var basePick = require('./_basePick'),\n    flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\"\n}), 'Dashboard');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"\n}), 'Dns');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M12 2l-5.5 9h11z\"\n}), _react.default.createElement(\"circle\", {\n  cx: \"17.5\",\n  cy: \"17.5\",\n  r: \"4.5\"\n}), _react.default.createElement(\"path\", {\n  d: \"M3 13.5h8v8H3z\"\n})), 'Category');\n\nexports.default = _default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _eventlistener = require('eventlistener');\n\nvar _lodash = require('lodash.debounce');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _lodash3 = require('lodash.throttle');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _parentScroll = require('./utils/parentScroll');\n\nvar _parentScroll2 = _interopRequireDefault(_parentScroll);\n\nvar _inViewport = require('./utils/inViewport');\n\nvar _inViewport2 = _interopRequireDefault(_inViewport);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LazyLoad = function (_Component) {\n  _inherits(LazyLoad, _Component);\n\n  function LazyLoad(props) {\n    _classCallCheck(this, LazyLoad);\n\n    var _this = _possibleConstructorReturn(this, (LazyLoad.__proto__ || Object.getPrototypeOf(LazyLoad)).call(this, props));\n\n    _this.lazyLoadHandler = _this.lazyLoadHandler.bind(_this);\n\n    if (props.throttle > 0) {\n      if (props.debounce) {\n        _this.lazyLoadHandler = (0, _lodash2.default)(_this.lazyLoadHandler, props.throttle);\n      } else {\n        _this.lazyLoadHandler = (0, _lodash4.default)(_this.lazyLoadHandler, props.throttle);\n      }\n    }\n\n    _this.state = { visible: false };\n    return _this;\n  }\n\n  _createClass(LazyLoad, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._mounted = true;\n      var eventNode = this.getEventNode();\n\n      this.lazyLoadHandler();\n\n      if (this.lazyLoadHandler.flush) {\n        this.lazyLoadHandler.flush();\n      }\n\n      (0, _eventlistener.add)(window, 'resize', this.lazyLoadHandler);\n      (0, _eventlistener.add)(eventNode, 'scroll', this.lazyLoadHandler);\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps() {\n      if (!this.state.visible) {\n        this.lazyLoadHandler();\n      }\n    }\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(_nextProps, nextState) {\n      return nextState.visible;\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this._mounted = false;\n      if (this.lazyLoadHandler.cancel) {\n        this.lazyLoadHandler.cancel();\n      }\n\n      this.detachListeners();\n    }\n  }, {\n    key: 'getEventNode',\n    value: function getEventNode() {\n      return (0, _parentScroll2.default)((0, _reactDom.findDOMNode)(this));\n    }\n  }, {\n    key: 'getOffset',\n    value: function getOffset() {\n      var _props = this.props,\n          offset = _props.offset,\n          offsetVertical = _props.offsetVertical,\n          offsetHorizontal = _props.offsetHorizontal,\n          offsetTop = _props.offsetTop,\n          offsetBottom = _props.offsetBottom,\n          offsetLeft = _props.offsetLeft,\n          offsetRight = _props.offsetRight,\n          threshold = _props.threshold;\n\n\n      var _offsetAll = threshold || offset;\n      var _offsetVertical = offsetVertical || _offsetAll;\n      var _offsetHorizontal = offsetHorizontal || _offsetAll;\n\n      return {\n        top: offsetTop || _offsetVertical,\n        bottom: offsetBottom || _offsetVertical,\n        left: offsetLeft || _offsetHorizontal,\n        right: offsetRight || _offsetHorizontal\n      };\n    }\n  }, {\n    key: 'lazyLoadHandler',\n    value: function lazyLoadHandler() {\n      if (!this._mounted) {\n        return;\n      }\n      var offset = this.getOffset();\n      var node = (0, _reactDom.findDOMNode)(this);\n      var eventNode = this.getEventNode();\n\n      if ((0, _inViewport2.default)(node, eventNode, offset)) {\n        var onContentVisible = this.props.onContentVisible;\n\n\n        this.setState({ visible: true }, function () {\n          if (onContentVisible) {\n            onContentVisible();\n          }\n        });\n        this.detachListeners();\n      }\n    }\n  }, {\n    key: 'detachListeners',\n    value: function detachListeners() {\n      var eventNode = this.getEventNode();\n\n      (0, _eventlistener.remove)(window, 'resize', this.lazyLoadHandler);\n      (0, _eventlistener.remove)(eventNode, 'scroll', this.lazyLoadHandler);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props2 = this.props,\n          children = _props2.children,\n          className = _props2.className,\n          height = _props2.height,\n          width = _props2.width;\n      var visible = this.state.visible;\n\n\n      var elStyles = { height: height, width: width };\n      var elClasses = 'LazyLoad' + (visible ? ' is-visible' : '') + (className ? ' ' + className : '');\n\n      return _react2.default.createElement(this.props.elementType, {\n        className: elClasses,\n        style: elStyles\n      }, visible && _react.Children.only(children));\n    }\n  }]);\n\n  return LazyLoad;\n}(_react.Component);\n\nexports.default = LazyLoad;\n\n\nLazyLoad.propTypes = {\n  children: _propTypes2.default.node.isRequired,\n  className: _propTypes2.default.string,\n  debounce: _propTypes2.default.bool,\n  elementType: _propTypes2.default.string,\n  height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  offset: _propTypes2.default.number,\n  offsetBottom: _propTypes2.default.number,\n  offsetHorizontal: _propTypes2.default.number,\n  offsetLeft: _propTypes2.default.number,\n  offsetRight: _propTypes2.default.number,\n  offsetTop: _propTypes2.default.number,\n  offsetVertical: _propTypes2.default.number,\n  threshold: _propTypes2.default.number,\n  throttle: _propTypes2.default.number,\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  onContentVisible: _propTypes2.default.func\n};\n\nLazyLoad.defaultProps = {\n  elementType: 'div',\n  debounce: true,\n  offset: 0,\n  offsetBottom: 0,\n  offsetHorizontal: 0,\n  offsetLeft: 0,\n  offsetRight: 0,\n  offsetTop: 0,\n  offsetVertical: 0,\n  throttle: 250\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.88-11.71L10 14.17l-1.88-1.88a.9959.9959 0 00-1.41 0c-.39.39-.39 1.02 0 1.41l2.59 2.59c.39.39 1.02.39 1.41 0L17.3 9.7c.39-.39.39-1.02 0-1.41-.39-.39-1.03-.39-1.42 0z\"\n}), 'CheckCircleOutlineRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17l-.59.59-.58.58V4h16v12zm-9-4h2v2h-2zm0-6h2v4h-2z\"\n}), 'FeedbackOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-5h-1V6c0-2.76-2.24-5-5-5-2.28 0-4.27 1.54-4.84 3.75-.14.54.18 1.08.72 1.22.53.14 1.08-.18 1.22-.72C9.44 3.93 10.63 3 12 3c1.65 0 3 1.35 3 3v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 11c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-8c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v8z\"\n}), 'LockOpenRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _capitalize = _interopRequireDefault(require(\"../utils/capitalize\"));\n\nvar styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      userSelect: 'none',\n      width: '1em',\n      height: '1em',\n      display: 'inline-block',\n      fill: 'currentColor',\n      flexShrink: 0,\n      fontSize: theme.typography.pxToRem(24),\n      transition: theme.transitions.create('fill', {\n        duration: theme.transitions.duration.shorter\n      })\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `color=\"action\"`. */\n    colorAction: {\n      color: theme.palette.action.active\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      color: theme.palette.error.main\n    },\n\n    /* Styles applied to the root element if `color=\"disabled\"`. */\n    colorDisabled: {\n      color: theme.palette.action.disabled\n    },\n\n    /* Styles applied to the root element if `fontSize=\"inherit\"`. */\n    fontSizeInherit: {\n      fontSize: 'inherit'\n    },\n\n    /* Styles applied to the root element if `fontSize=\"small\"`. */\n    fontSizeSmall: {\n      fontSize: theme.typography.pxToRem(20)\n    },\n\n    /* Styles applied to the root element if `fontSize=\"large\"`. */\n    fontSizeLarge: {\n      fontSize: theme.typography.pxToRem(35)\n    }\n  };\n};\n\nexports.styles = styles;\n\nvar SvgIcon = _react.default.forwardRef(function SvgIcon(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'inherit' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'svg' : _props$component,\n      _props$fontSize = props.fontSize,\n      fontSize = _props$fontSize === void 0 ? 'default' : _props$fontSize,\n      htmlColor = props.htmlColor,\n      titleAccess = props.titleAccess,\n      _props$viewBox = props.viewBox,\n      viewBox = _props$viewBox === void 0 ? '0 0 24 24' : _props$viewBox,\n      other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\", \"htmlColor\", \"titleAccess\", \"viewBox\"]);\n  return _react.default.createElement(Component, (0, _extends2.default)({\n    className: (0, _clsx.default)(classes.root, className, color !== 'inherit' && classes[\"color\".concat((0, _capitalize.default)(color))], fontSize !== 'default' && classes[\"fontSize\".concat((0, _capitalize.default)(fontSize))]),\n    focusable: \"false\",\n    viewBox: viewBox,\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? null : 'true',\n    role: titleAccess ? 'img' : 'presentation',\n    ref: ref\n  }, other), children, titleAccess ? _react.default.createElement(\"title\", null, titleAccess) : null);\n});\n\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * Node passed into the SVG element.\n   */\n  children: _propTypes.default.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: _propTypes.default.object,\n\n  /**\n   * @ignore\n   */\n  className: _propTypes.default.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   */\n  color: _propTypes.default.oneOf(['action', 'disabled', 'error', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: _propTypes.default.elementType,\n\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   */\n  fontSize: _propTypes.default.oneOf(['default', 'inherit', 'large', 'small']),\n\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: _propTypes.default.string,\n\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this property.\n   */\n  shapeRendering: _propTypes.default.string,\n\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: _propTypes.default.string,\n\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   */\n  viewBox: _propTypes.default.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\n\nvar _default = (0, _withStyles.default)(styles, {\n  name: 'MuiSvgIcon'\n})(SvgIcon);\n\nexports.default = _default;","module.exports = require(\"core-js/library/fn/object/values\");","module.exports = require(\"core-js/library/fn/number/is-integer\");","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n  if (file && acceptedFiles) {\n    var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n\n    if (acceptedFilesArray.length === 0) {\n      return true;\n    }\n\n    var fileName = file.name || '';\n    var mimeType = (file.type || '').toLowerCase();\n    var baseMimeType = mimeType.replace(/\\/.*$/, '');\n    return acceptedFilesArray.some(function (type) {\n      var validType = type.trim().toLowerCase();\n\n      if (validType.charAt(0) === '.') {\n        return fileName.toLowerCase().endsWith(validType);\n      } else if (validType.endsWith('/*')) {\n        // This is something like a image/* mime type\n        return baseMimeType === validType.replace(/\\/.*$/, '');\n      }\n\n      return mimeType === validType;\n    });\n  }\n\n  return true;\n};","module.exports = LinearLayoutVector;\n\nLinearLayoutVector.prototype.getLength = getLength;\nLinearLayoutVector.prototype.setLength = setLength;\nLinearLayoutVector.prototype.getDefaultSize = getDefaultSize;\nLinearLayoutVector.prototype.setDefaultSize = setDefaultSize;\nLinearLayoutVector.prototype.getAxisOffset = getAxisOffset;\nLinearLayoutVector.prototype.setAxisOffset = setAxisOffset;\nLinearLayoutVector.prototype.getGap = getGap;\nLinearLayoutVector.prototype.setGap = setGap;\nLinearLayoutVector.prototype.getItemSize = getItemSize;\nLinearLayoutVector.prototype.setItemSize = setItemSize;\nLinearLayoutVector.prototype.insert = insert;\nLinearLayoutVector.prototype.remove = remove;\nLinearLayoutVector.prototype.start = start;\nLinearLayoutVector.prototype.end = end;\nLinearLayoutVector.prototype.indexOf = indexOf;\nLinearLayoutVector.prototype.clear = clear;\nLinearLayoutVector.prototype.toString = toString;\n\n/**\n * A sparse array of sizes that represent items in a dimension.\n *\n * Provides efficient support for finding the cumulative distance to\n * the start/end of an item along the axis, and similarly for finding the\n * index of the item at a particular distance.\n *\n * Default size is used for items whose size hasn't been specified.\n */\nfunction LinearLayoutVector(block_size) {\n\n    if(block_size === undefined) {\n        block_size = 128;\n    }\n\n    // Assumption: vector elements (sizes) will typically be set in\n    // small ranges that reflect localized scrolling.  Allocate vector\n    // elements in blocks of block_size, which must be a power of 2.\n    // block_shift is the power of 2 and block_mask masks off as many\n    // low order bits.  The block_table contains all of the allocated\n    // blocks and has length/block_size elements which are allocated lazily.\n    var pow = (Math.log(block_size) / Math.log(2)) | 0,\n        size = Math.pow(2, pow),\n        mask = size - 1;\n\n    this.block_size  = size;\n    this.block_shift = pow;\n    this.block_mask  = mask;\n    this.block_table = [];\n\n    this._defaultSize = 0;\n    this._axisOffset = 0;\n    this._gap = 0;\n\n    // Sorted Vector of intervals for the pending removes, in descending order,\n    // for example [7, 5, 3, 1] for the removes at 7, 6, 5, 3, 2, 1\n    this.removes = null;\n    // Sorted Vector of intervals for the pending inserts, in ascending order,\n    // for example [1, 3, 5, 7] for the inserts at 1, 2, 3, 5, 6, 7\n    this.inserts = null;\n\n    this._length = 0;\n    // What the length will be after any pending changes are flushed.\n    this._pendingLength = -1;\n}\n\n/**\n * The number of item size valued elements.\n *\n * @default 0\n */\nfunction getLength() {\n    return this._pendingLength === -1 ? this._length : this._pendingLength;\n}\n\n/**\n * @private\n * Grows or truncates the vector to be the specified newLength.\n * When truncating, releases empty blocks and sets to NaN any values\n * in the last block beyond the newLength.\n */\nfunction setLength(newLength) {\n    flushPendingChanges.call(this);\n\n    if(newLength < this._length) {\n        // Clear any remaining non-NaN values in the last block\n        var blockIndex = newLength >> this.block_shift;\n        var endIndex = Math.min(blockIndex * this.block_size + this.block_size, this._length) - 1;\n        clearInterval.call(this, newLength, endIndex);\n    }\n\n    this._length = newLength;\n\n    // update the table\n    var partialBlock = ((this._length & this.block_mask) === 0) ? 0 : 1;\n    this.block_table.length = (this._length >> this.block_shift) + partialBlock;\n}\n\n//----------------------------------\n//  defaultSize\n//----------------------------------\n\n/**\n * The size of items whose size was not specified with setItemSize.\n *\n * @default 0\n */\nfunction getDefaultSize() {\n    return this._defaultSize;\n}\n\n/**\n * @private\n */\nfunction setDefaultSize(value) {\n    this._defaultSize = value;\n}\n\n//----------------------------------\n//  axisOffset\n//----------------------------------\n\n/**\n * The offset of the first item from the origin in the majorAxis\n * direction. This is useful when implementing padding,\n * in addition to gaps, for virtual layouts.\n *\n * @see #gap\n */\nfunction getAxisOffset() {\n    return this._axisOffset;\n}\n\n/**\n * @private\n */\nfunction setAxisOffset(value) {\n    this._axisOffset = value;\n}\n\n//----------------------------------\n//  gap\n//----------------------------------\n\n/**\n * The distance between items.\n *\n * @default 0\n */\nfunction getGap() {\n    return this._gap;\n}\n\n/**\n * @private\n */\nfunction setGap(value) {\n    this._gap = value;\n}\n\n//--------------------------------------------------------------------------\n//\n//  Methods\n//\n//--------------------------------------------------------------------------\n\n/**\n * Return the size of the item at index.  If no size was ever\n * specified then then the defaultSize is returned.\n *\n * @param index The item's index.\n * @see defaultSize\n */\nfunction getItemSize(index) {\n    flushPendingChanges.call(this);\n\n    var block = this.block_table[index >> this.block_shift];\n    if(block) {\n        var value = block.sizes[index & this.block_mask];\n        return (value !== value) ? this._defaultSize : value;\n    } else {\n        return this._defaultSize;\n    }\n}\n\n/**\n * Set the size of the item at index. If an index is\n * set to <code>NaN</code> then subsequent calls to get\n * will return the defaultSize.\n *\n * @param index The item's index.\n * @param value The item's size.\n * @see defaultSize\n */\nfunction setItemSize(index, value) {\n    flushPendingChanges.call(this);\n\n    if(index >= this.getLength()) {\n        throw new Error(\"Invalid index and all that.\");\n    }\n\n    var blockIndex = index >> this.block_shift;\n    var block = this.block_table[blockIndex];\n    if(!block) {\n        block = this.block_table[blockIndex] = new Block(this.block_size);\n    }\n\n    var sizesIndex = index & this.block_mask;\n    var sizes = block.sizes;\n    var oldValue = sizes[sizesIndex];\n    if(oldValue === value) {\n        return;\n    }\n\n    if(oldValue !== oldValue) {\n        block.defaultCount -= 1;\n        block.sizesSum += value;\n    } else if(value !== value) {\n        block.defaultCount += 1;\n        block.sizesSum -= oldValue;\n    } else {\n        block.sizesSum += value - oldValue;\n    }\n\n    sizes[sizesIndex] = value;\n}\n\n/**\n * Make room for a new item at index by shifting all of the sizes\n * one position to the right, beginning with startIndex.\n *\n * The value at index will be NaN.\n *\n * This is similar to array.splice(index, 0, NaN).\n *\n * @param index The position of the new NaN size item.\n */\nfunction insert(index) {\n    // We don't support interleaved pending inserts and removes\n    if(this.removes) {\n        flushPendingChanges.call(this);\n    }\n\n    if(this.inserts) {\n        // Update the last interval or add a new one?\n        var lastIndex = this.inserts.length - 1;\n        var intervalEnd = this.inserts[lastIndex];\n\n        if(index === intervalEnd + 1) {\n            // Extend the end of the interval\n            this.inserts[lastIndex] = index;\n        } else if(index > intervalEnd) {\n            // New interval\n            this.inserts.push(index);\n            this.inserts.push(index);\n        } else {\n            // We can't support pending inserts that are not ascending\n            flushPendingChanges.call(this);\n        }\n    }\n\n    this._pendingLength = Math.max(this._length, index + 1);\n\n    if(!this.inserts) {\n        this.inserts = [];\n        this.inserts.push(index);\n        this.inserts.push(index);\n    }\n}\n\n/**\n * Remove index by shifting all of the sizes one position to the left,\n * begining with index+1.\n *\n * This is similar to array.splice(index, 1).\n *\n * @param index The position to be removed.\n */\nfunction remove(index) {\n    // We don't support interleaved pending inserts and removes\n    if(this.inserts) {\n        flushPendingChanges.call(this);\n    }\n\n    // length getter takes into account pending inserts/removes but doesn't flush\n    if(index >= this.getLength()) {\n        throw new Error(\"Invalid index and all that.\");\n    }\n\n    if(this.removes) {\n        // Update the last interval or add a new one?\n        var lastIndex = this.removes.length - 1;\n        var intervalStart = this.removes[lastIndex];\n\n        if(index === intervalStart - 1) {\n            // Extend the start of the interval\n            this.removes[lastIndex] = index;\n        } else if(index < intervalStart) {\n            // New interval\n            this.removes.push(index);\n            this.removes.push(index);\n        } else {\n            // We can't support pending removes that are not descending\n            flushPendingChanges.call(this);\n        }\n    }\n\n    this._pendingLength = (this._pendingLength === -1) ? length - 1 : this._pendingLength - 1;\n\n    if(!this.removes) {\n        this.removes = [];\n        this.removes.push(index);\n        this.removes.push(index);\n    }\n}\n\n/**\n * @private\n * Returns true when all sizes in the specified interval for the block are NaN\n */\nfunction isIntervalClear(block, index, count) {\n    var sizes = block.sizes, size;\n    for(count += index; index < count; ++index) {\n        if((size = sizes[index]) === size) {\n            return false;\n        }\n    }\n    return true;\n}\n\n/**\n * @private\n * Copies elements between blocks. Indices relative to the blocks.\n * If srcBlock is null, then it fills the destination with NaNs.\n * The case of srcBlock === dstBlock is also supported.\n * The caller must ensure that count is within range.\n */\nfunction inBlockCopy(dstBlock, dstIndexStart, srcBlock, srcIndexStart, count) {\n    var ascending = dstIndexStart < srcIndexStart;\n\n    var srcIndex = ascending ? srcIndexStart : srcIndexStart + count - 1;\n    var dstIndex = ascending ? dstIndexStart : dstIndexStart + count - 1;\n    var increment = ascending ? +1 : -1;\n\n    var dstSizes = dstBlock.sizes;\n    var srcSizes = srcBlock ? srcBlock.sizes : null;\n    var dstValue = NaN;\n    var srcValue = NaN;\n    var sizesSumDelta = 0; // How much the destination sizesSum will change\n    var defaultCountDelta = 0; // How much the destination defaultCount will change\n\n    while(count > 0) {\n        if(srcSizes) {\n            srcValue = srcSizes[srcIndex];\n        }\n\n        dstValue = dstSizes[dstIndex];\n\n        // Are the values different?\n        if(srcValue !== dstValue) { // Triple '=' to handle NaN comparison\n\n            // Are we removing a default size or a chached size?\n            if(dstValue !== dstValue) {\n                defaultCountDelta--;\n            } else {\n                sizesSumDelta -= dstValue;\n            }\n\n            // Are we adding a default size or a cached size?\n            if(srcValue !== srcValue) {\n                defaultCountDelta++;\n            } else {\n                sizesSumDelta += srcValue;\n            }\n\n            dstSizes[dstIndex] = srcValue;\n        }\n\n        srcIndex += increment;\n        dstIndex += increment;\n        count--;\n    }\n\n    dstBlock.sizesSum += sizesSumDelta;\n    dstBlock.defaultCount += defaultCountDelta;\n}\n\n/**\n * @private\n * Copies 'count' elements from dstIndex to srcIndex.\n * Safe for overlapping source and destination intervals.\n * If any blocks are left full of NaNs, they will be deallcated.\n */\nfunction copyInterval(dstIndex, srcIndex, count) {\n    var ascending = dstIndex < srcIndex;\n    if(!ascending) {\n        dstIndex += count - 1;\n        srcIndex += count - 1;\n    }\n\n    while(count > 0) {\n        // Figure out destination block\n        var dstBlockIndex = dstIndex >> this.block_shift;\n        var dstSizesIndex = dstIndex & this.block_mask;\n        var dstBlock = this.block_table[dstBlockIndex];\n\n        // Figure out source block\n        var srcBlockIndex = srcIndex >> this.block_shift;\n        var srcSizesIndex = srcIndex & this.block_mask;\n        var srcBlock = this.block_table[srcBlockIndex];\n\n        // Figure out number of elements to copy\n        var copyCount = ascending ?\n            Math.min(this.block_size - dstSizesIndex, this.block_size - srcSizesIndex) :\n            1 + Math.min(dstSizesIndex, srcSizesIndex);\n\n        copyCount = Math.min(copyCount, count);\n\n        // Figure out the start index for each block\n        var dstStartIndex = ascending ? dstSizesIndex : dstSizesIndex - copyCount + 1;\n        var srcStartIndex = ascending ? srcSizesIndex : srcSizesIndex - copyCount + 1;\n\n        // Check whether a destination block needs to be allocated.\n        // Allocate only if there are non-default values to be copied from the source.\n        if(srcBlock && !dstBlock && isIntervalClear(srcBlock, srcStartIndex, copyCount)) {\n            dstBlock = new Block(this.block_size);\n            this.block_table[dstBlockIndex] = dstBlock;\n        }\n\n        // Copy to non-null dstBlock, srcBlock can be null\n        if(dstBlock) {\n            inBlockCopy(dstBlock, dstStartIndex, srcBlock, srcStartIndex, copyCount);\n\n            // If this is the last time we're visiting this block, and it contains\n            // only NaNs, then remove it\n            if(dstBlock.defaultCount === this.block_size) {\n                var blockEndReached = ascending ?\n                    (dstStartIndex + copyCount === this.block_size) :\n                    (dstStartIndex === 0);\n                if(blockEndReached || count === copyCount)\n                    this.block_table[dstBlockIndex] = null;\n            }\n        }\n\n        dstIndex += ascending ? copyCount : -copyCount;\n        srcIndex += ascending ? copyCount : -copyCount;\n        count -= copyCount;\n    }\n}\n\n/**\n * @private\n * Sets all elements within the specified interval to NaN (both ends inclusive).\n * Releases empty blocks.\n */\nfunction clearInterval(start, end) {\n    while(start <= end) {\n        // Figure our destination block\n        var blockIndex = start >> this.block_shift;\n        var sizesIndex = start & this.block_mask;\n        var block = this.block_table[blockIndex];\n\n        // Figure out number of elements to clear in this iteration\n        // Make sure we don't clear more items than requested\n        var clearCount = this.block_size - sizesIndex;\n        clearCount = Math.min(clearCount, end - start + 1);\n\n        if(block) {\n            if(clearCount === this.block_size) {\n                this.block_table[blockIndex] = null;\n            } else {\n                // Copying from null source block is equivalent of clearing the destination block\n                inBlockCopy(block, sizesIndex, null /*srcBlock*/, 0, clearCount);\n\n                // If the blockDst contains only default sizes, then remove the block\n                if(block.defaultCount === this.block_size) {\n                    this.block_table[blockIndex] = null;\n                }\n            }\n        }\n\n        start += clearCount;\n    }\n}\n\n/**\n * @private\n * Removes the elements designated by the intervals and truncates\n * the LinearLayoutVector to the new length.\n * 'intervals' is a Vector of descending intervals [7, 5, 3, 1]\n */\nfunction removeIntervals(intervals) {\n    var intervalsCount = intervals.length;\n    if(intervalsCount === 0) {\n        return;\n    }\n\n    // Adding final nextIntervalStart value (see below).\n    intervals.reverse(); // turn into ascending, for example [7, 5, 3, 1] --> [1, 3, 5, 7]\n    intervals.push(this.getLength());\n\n    // Move the elements\n    var dstStart = intervals[0];\n    var srcStart;\n    var count;\n    var i = 0;\n    do {\n        var intervalEnd = intervals[i + 1];\n        var nextIntervalStart = intervals[i + 2]\n        i += 2;\n\n        // Start copy from after the end of current interval\n        srcStart = intervalEnd + 1;\n\n        // copy all elements up to the start of the next interval.\n        count = nextIntervalStart - srcStart;\n\n        copyInterval.call(this, dstStart, srcStart, count);\n        dstStart += count;\n    } while(i < intervalsCount)\n\n    // Truncate the excess elements.\n    this.setLength(dstStart);\n}\n\n/**\n * @private\n * Increases the length and inserts NaN values for the elements designated by the intervals.\n * 'intervals' is a Vector of ascending intervals [1, 3, 5, 7]\n */\nfunction insertIntervals(intervals, newLength) {\n    var intervalsCount = intervals.length;\n    if(intervalsCount === 0) {\n        return;\n    }\n\n    // Allocate enough space for the insertions, all the elements\n    // allocated are NaN by default.\n    var oldLength = this.getLength();\n    this.setLength(newLength);\n\n    var srcEnd = oldLength - 1;\n    var dstEnd = newLength - 1;\n    var i = intervalsCount - 2;\n    while(i >= 0) {\n        // Find current interval\n        var intervalStart = intervals[i];\n        var intervalEnd = intervals[i + 1];\n        i -= 2;\n\n        // Start after the current interval\n        var dstStart = intervalEnd + 1;\n        var copyCount = dstEnd - dstStart + 1;\n        var srcStart = srcEnd - copyCount + 1;\n\n        copyInterval.call(this, dstStart, srcStart, copyCount);\n        dstStart -= copyCount;\n        dstEnd = intervalStart - 1;\n\n        // Fill in with default NaN values after the copy\n        clearInterval.call(this, intervalStart, intervalEnd);\n    }\n}\n\n/**\n * @private\n * Processes any pending removes or pending inserts.\n */\nfunction flushPendingChanges() {\n    var intervals;\n    if(this.removes) {\n        intervals = this.removes;\n        this.removes = null;\n        this._pendingLength = -1;\n        removeIntervals.call(this, intervals);\n    } else if(this.inserts) {\n        intervals = this.inserts;\n        var newLength = this._pendingLength;\n        this.inserts = null;\n        this._pendingLength = -1;\n        insertIntervals.call(this, intervals, newLength);\n    }\n}\n\n/**\n * The cumulative distance to the start of the item at index, including\n * the gaps between items and the axisOffset.\n *\n * The value of start(0) is axisOffset.\n *\n * Equivalent to:\n * <pre>\n * var distance = this.getAxisOffset();\n * for (var i = 0; i &lt; index; i++)\n *     distance += get(i);\n * return distance + (gap * index);\n * </pre>\n *\n * The actual implementation is relatively efficient.\n *\n * @param index The item's index.\n * @see #end\n */\nfunction start(index) {\n\n    flushPendingChanges.call(this);\n\n    if((this._length === 0) || (index === 0)) {\n        return this.getAxisOffset();\n    }\n\n    if(index >= this._length) {\n        throw new Error(\"Invalid index and all that.\");\n    }\n\n    var distance = this.getAxisOffset();\n    var blockIndex = index >> this.block_shift;\n    for(var i = 0; i < blockIndex; i++)\n    {\n        var block = this.block_table[i];\n        distance += block ?\n            block.sizesSum + (block.defaultCount * this._defaultSize) :\n            this.block_size * this._defaultSize;\n    }\n    var lastBlock = this.block_table[blockIndex];\n    var lastBlockOffset = index & ~this.block_mask;\n    var lastBlockLength = index - lastBlockOffset;\n    if(lastBlock) {\n        var sizes = lastBlock.sizes;\n        for(i = 0; i < lastBlockLength; i++) {\n            var size = sizes[i];\n            distance += (size !== size) ? this._defaultSize : size;\n        }\n    } else {\n        distance += this._defaultSize * lastBlockLength;\n    }\n    distance += index * this.getGap();\n    return distance;\n}\n\n/**\n * The cumulative distance to the end of the item at index, including\n * the gaps between items.\n *\n * If <code>index &lt;(length-1)</code> then the value of this\n * function is defined as:\n * <code>start(index) + get(index)</code>.\n *\n * @param index The item's index.\n * @see #start\n */\nfunction end(index) {\n    flushPendingChanges.call(this);\n    return this.start(index) + this.getItemSize(index);\n}\n\n/**\n * Returns the index of the item that overlaps the specified distance.\n *\n * The item at index <code>i</code> overlaps a distance value\n * if <code>start(i) &lt;= distance &lt; end(i)</code>.\n *\n * If no such item exists, -1 is returned.\n */\nfunction indexOf(distance) {\n    flushPendingChanges.call(this);\n    var index = indexOfInternal.call(this, distance);\n    return (index >= this._length) ? -1 : index;\n}\n\nfunction indexOfInternal(distance) {\n\n    if((this._length === 0) || (distance < 0)) {\n        return -1;\n    }\n\n    // The area of the first item includes the axisOffset\n    var curDistance = this.getAxisOffset();\n\n    if(distance < curDistance) {\n        return 0;\n    }\n\n    var index = -1,\n        block = null,\n        blockSize = this.block_size,\n        defaultSize = this._defaultSize,\n        gap = this.getGap(),\n        blockGap = gap * blockSize;\n\n    // Find the block that contains distance and the index of its\n    // first element\n    var blockIndex = -1,\n        blockTable = this.block_table,\n        blockTableLength = blockTable.length;\n\n    for(; ++blockIndex < blockTableLength;) {\n        block = blockTable[blockIndex];\n        var blockDistance = blockGap + (\n            block ?\n                block.sizesSum + (block.defaultCount * defaultSize) :\n                blockSize * defaultSize\n        );\n\n        if((distance === curDistance) || ((distance >= curDistance) && (distance < (curDistance + blockDistance)))) {\n            index = blockIndex << this.block_shift;\n            break;\n        }\n        curDistance += blockDistance;\n    }\n\n    if((index === -1) || (distance === curDistance)) {\n        return index;\n    }\n\n    // At this point index corresponds to the first item in this block\n    if(block) {\n        // Find the item that contains distance and return its index\n        var sizes = block.sizes,\n            n = this.block_size - 1;\n        for(var i = 0; i < n; i++) {\n            var size = sizes[i];\n            curDistance += gap + (size !== size ? this._defaultSize : size);\n            if(curDistance > distance) {\n                return index + i;\n            }\n        }\n        // TBD special-case for the very last index\n        return index + this.block_size - 1;\n    } else {\n        return index + Math.floor(Number(distance - curDistance) / Number(this._defaultSize + gap));\n    }\n}\n\n/**\n * Clear all cached state, reset length to zero.\n */\nfunction clear() {\n    // Discard any pending changes, before setting the length\n    // otherwise the length setter will commit the changes.\n    this.removes = null;\n    this.inserts = null;\n    this._pendingLength = -1;\n\n    this.setLength(0); // clears the this.block_table as well\n}\n\nfunction toString() {\n    return \"LinearLayoutVector { \" +\n        \"length: \" + this._length + \", \" +\n        \"size: \" + this.end(this.getLength() -1) + \", \" +\n        \"[blocks: \" + this.block_table.length + \"]\" + \", \" +\n        \"gap: \" + this._gap + \", \" +\n        \"defaultSize: \" + this._defaultSize + \", \" +\n        \"pendingRemoves: \" + (this.removes ? this.removes.length : 0) + \", \" +\n        \"pendingInserts: \" + (this.inserts ? this.inserts.length : 0) +\n        \" }\";\n}\n\n/**\n * @private\n * A LinearLayoutVector block of layout element heights or widths.\n *\n * Total \"distance\" for a Block is: sizesSum + (defaultCount * distanceVector.default).\n */\nfunction Block(block_size) {\n\n    this.sizes = new Array(block_size);\n    this.sizesSum = 0;\n    this.defaultCount = block_size;\n\n    for(var i = -1; ++i < block_size;) {\n        this.sizes[i] = NaN;\n    }\n}\n","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};","module.exports = { \"default\": require(\"core-js/library/fn/object/get-own-property-descriptor\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z\"\n}), 'Done');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z\"\n}), 'Tune');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11 18h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM3 7c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm4 6h10c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1z\"\n}), 'FilterListRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z\"\n}), 'Bookmark');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z\"\n}), 'BookmarkBorder');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"defs\", null, _react.default.createElement(\"path\", {\n  id: \"a\",\n  d: \"M0 0h24v24H0z\"\n})), _react.default.createElement(\"path\", {\n  d: \"M15 3l2.3 2.3-2.89 2.87 1.42 1.42L18.7 6.7 21 9V3zM3 9l2.3-2.3 2.87 2.89 1.42-1.42L6.7 5.3 9 3H3zm6 12l-2.3-2.3 2.89-2.87-1.42-1.42L5.3 17.3 3 15v6zm12-6l-2.3 2.3-2.87-2.89-1.42 1.42 2.89 2.87L15 21h6z\"\n})), 'ZoomOutMap');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z\"\n}), 'FindInPage');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9h2v3h3v2z\"\n}), 'CreateNewFolder');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M6.05 8.05c-2.73 2.73-2.73 7.15-.02 9.88 1.47-3.4 4.09-6.24 7.36-7.93-2.77 2.34-4.71 5.61-5.39 9.32 2.6 1.23 5.8.78 7.95-1.37C19.43 14.47 20 4 20 4S9.53 4.57 6.05 8.05z\"\n}), 'Eco');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M13.12 2.06L7.58 7.6c-.37.37-.58.88-.58 1.41V19c0 1.1.9 2 2 2h9c.8 0 1.52-.48 1.84-1.21l3.26-7.61C23.94 10.2 22.49 8 20.34 8h-5.65l.95-4.58c.1-.5-.05-1.01-.41-1.37-.59-.58-1.53-.58-2.11.01zM3 21c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2s-2 .9-2 2v8c0 1.1.9 2 2 2z\"\n}), 'ThumbUpRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\",\n  opacity: \".87\"\n}), _react.default.createElement(\"path\", {\n  d: \"M3 5v14h17V5H3zm4 2v2H5V7h2zm-2 6v-2h2v2H5zm0 2h2v2H5v-2zm13 2H9v-2h9v2zm0-4H9v-2h9v2zm0-4H9V7h9v2z\"\n})), 'ViewListOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z\"\n}), 'DoneAll');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 1H5c-1.1 0-1.99.9-1.99 2L3 15.93c0 .69.35 1.3.88 1.66L12 23l8.11-5.41c.53-.36.88-.97.88-1.66L21 3c0-1.1-.9-2-2-2zm-9 15l-5-5 1.41-1.41L10 13.17l7.59-7.59L19 7l-9 9z\"\n}), 'Beenhere');\n\nexports.default = _default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CustomPicker = exports.TwitterPicker = exports.SwatchesPicker = exports.SliderPicker = exports.SketchPicker = exports.PhotoshopPicker = exports.MaterialPicker = exports.HuePicker = exports.GithubPicker = exports.CompactPicker = exports.ChromePicker = exports.default = exports.CirclePicker = exports.BlockPicker = exports.AlphaPicker = undefined;\n\nvar _Alpha = require('./components/alpha/Alpha');\n\nObject.defineProperty(exports, 'AlphaPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Alpha).default;\n  }\n});\n\nvar _Block = require('./components/block/Block');\n\nObject.defineProperty(exports, 'BlockPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Block).default;\n  }\n});\n\nvar _Circle = require('./components/circle/Circle');\n\nObject.defineProperty(exports, 'CirclePicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Circle).default;\n  }\n});\n\nvar _Chrome = require('./components/chrome/Chrome');\n\nObject.defineProperty(exports, 'ChromePicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Chrome).default;\n  }\n});\n\nvar _Compact = require('./components/compact/Compact');\n\nObject.defineProperty(exports, 'CompactPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Compact).default;\n  }\n});\n\nvar _Github = require('./components/github/Github');\n\nObject.defineProperty(exports, 'GithubPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Github).default;\n  }\n});\n\nvar _Hue = require('./components/hue/Hue');\n\nObject.defineProperty(exports, 'HuePicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Hue).default;\n  }\n});\n\nvar _Material = require('./components/material/Material');\n\nObject.defineProperty(exports, 'MaterialPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Material).default;\n  }\n});\n\nvar _Photoshop = require('./components/photoshop/Photoshop');\n\nObject.defineProperty(exports, 'PhotoshopPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Photoshop).default;\n  }\n});\n\nvar _Sketch = require('./components/sketch/Sketch');\n\nObject.defineProperty(exports, 'SketchPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Sketch).default;\n  }\n});\n\nvar _Slider = require('./components/slider/Slider');\n\nObject.defineProperty(exports, 'SliderPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Slider).default;\n  }\n});\n\nvar _Swatches = require('./components/swatches/Swatches');\n\nObject.defineProperty(exports, 'SwatchesPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Swatches).default;\n  }\n});\n\nvar _Twitter = require('./components/twitter/Twitter');\n\nObject.defineProperty(exports, 'TwitterPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Twitter).default;\n  }\n});\n\nvar _ColorWrap = require('./components/common/ColorWrap');\n\nObject.defineProperty(exports, 'CustomPicker', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_ColorWrap).default;\n  }\n});\n\nvar _Chrome2 = _interopRequireDefault(_Chrome);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Chrome2.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\"\n}), 'ArrowUpward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 6H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H5V8h14v8z\"\n}), 'Crop169');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z\"\n}), 'Undo');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M17.75 7L14 3.25l-10 10V17h3.75l10-10zm2.96-2.96c.39-.39.39-1.02 0-1.41L18.37.29a.9959.9959 0 0 0-1.41 0L15 2.25 18.75 6l1.96-1.96z\"\n}), _react.default.createElement(\"path\", {\n  fillOpacity: \".36\",\n  d: \"M0 20h24v4H0z\"\n})), 'BorderColor');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"defs\", null, _react.default.createElement(\"path\", {\n  id: \"a\",\n  d: \"M24 24H0V0h24v24z\"\n})), _react.default.createElement(\"path\", {\n  d: \"M2.5 4v3h5v12h3V7h5V4h-13zm19 5h-9v3h3v7h3v-7h3V9z\"\n})), 'TextFields');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z\"\n}), 'FormatStrikethrough');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\"\n}), 'FormatUnderlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"defs\", null, _react.default.createElement(\"path\", {\n  id: \"a\",\n  d: \"M0 0h24v24H0V0z\"\n})), _react.default.createElement(\"path\", {\n  d: \"M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.74c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3.74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10 6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8 4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.02-.14.02-.2 0-.62-.38-1.16-.91-1.38z\"\n})), 'TouchApp');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zm-6 .67l2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z\"\n}), 'SaveAlt');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z\"\n}), 'ShoppingCart');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M8 16h8v2H8zm0-4h8v2H8zm6-10H6c-1.1 0-2 .9-2 2v16c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm4 18H6V4h7v5h5v11z\"\n}), 'DescriptionOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M17.03 5L3 5.01v13.98l14.03.01L22 12l-4.97-7z\"\n}), 'LabelSharp');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M24 24H0V0h24v24z\"\n})), 'FirstPage');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"\n}), 'LastPage');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-8.5 7.5c0 .83-.67 1.5-1.5 1.5H9v2H7.5V7H10c.83 0 1.5.67 1.5 1.5v1zm5 2c0 .83-.67 1.5-1.5 1.5h-2.5V7H15c.83 0 1.5.67 1.5 1.5v3zm4-3H19v1h1.5V11H19v2h-1.5V7h3v1.5zM9 9.5h1v-1H9v1zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm10 5.5h1v-3h-1v3z\"\n}), 'PictureAsPdf');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"\n}), 'Image');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z\"\n}), 'GridOn');\n\nexports.default = _default;","import React, {\n  useCallback,\n  useEffect,\n  useRef,\n  useState\n} from 'react';\nimport { makeStyles, } from '@material-ui/core/styles';\nimport {\n  AppBar,\n  Grid,\n  RootRef,\n  Tab,\n  Tabs\n} from '@material-ui/core';\nimport { debounce } from 'lodash';\nimport _ from 'lodash';\n\ninterface IScrollTabLabel {\n  label: string;\n  ref: React.RefObject<HTMLElement>;\n}\n\ninterface IScrollTabContainerComponentProps {\n  display?: boolean;\n  unscrollableTabItems?: React.ReactElement | React.ReactElement[];\n  labels: IScrollTabLabel[];\n  scrollNode: React.RefObject<HTMLElement>;\n  noContainer?: boolean;\n  calcActiveLabel?: ICalcActiveLabel; // pass in a customized function to override default\n}\n\ntype ICalcActiveLabel = (labels: IScrollTabLabel[], scrollNode: React.RefObject<HTMLElement>) => number;\n\nconst useStyles = makeStyles((theme) => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n  },\n  appBar: {\n    width: '100%',\n    position: 'sticky',\n    backgroundColor: theme.palette.grey[300],\n  },\n  tab: {\n    // maxWidth: 150,\n    minWidth: 0,\n    display: 'inline-block',\n    flexShrink: 0,\n    paddingTop: 12,\n    paddingBottom: 12,\n  },\n  tab__wrapper: {\n    fontSize: theme.typography.subtitle1.fontSize,\n    whiteSpace: 'nowrap',\n    textOverflow: 'ellipsis',\n    overflow: 'hidden',\n    display: 'block',\n  },\n  scrollButtons: {\n    color: theme.palette.primary[900],\n    maxWidth: 30\n  },\n}));\n\n// A function to calculate and return the index of active label\nconst defaultCalcActiveLabel: ICalcActiveLabel = (labels: IScrollTabLabel[], scrollNode: React.RefObject<HTMLElement>) => {\n  for (let i = 0; i < labels.length; i++) { // tslint:disable-line\n    if (labels[i].ref.current === null) {\n      continue;\n    }\n    const { clientHeight, offsetTop } = labels[i].ref.current;\n    const boundary = clientHeight > 600 ?  (clientHeight + offsetTop - 100) : (clientHeight / 2 + offsetTop);\n    if (scrollNode.current.scrollTop <= boundary) {\n      return i;\n    }\n  }\n\n  // fallback to index 0 if something wrong\n  return 0;\n};\n\n// A custom hook to keep track of prevValue\nfunction usePrevValue(value) {\n  const prevValue = useRef(value);\n  useEffect(() => {\n    prevValue.current = value;\n  },[value]);\n  return prevValue.current;\n}\nconst ScrollTabContainer: React.FC<IScrollTabContainerComponentProps> =\n({\n  labels = [],\n  scrollNode,\n  display = true,\n  unscrollableTabItems = null,\n  noContainer,\n  children,\n  calcActiveLabel= defaultCalcActiveLabel\n}) => {\n    const [tabIndex, setTabIndex] = useState(0);\n    const isScrollingCausedByManullyClick = useRef<boolean>(false); // use this ref to diff srolling cases, 1. Clickig on tab. 2. Scrolling mouse wheel\n    const { appBar, container, scrollButtons, tab, tab__wrapper } = useStyles();\n    const prevLabels = usePrevValue(labels);\n    const rootRef = useRef<HTMLElement | null>(null);\n    const onChangeTab = useCallback((e: React.ChangeEvent<{}>, index: number) => {\n      setTabIndex(index);\n      if (\n        labels.length > tabIndex &&\n        labels[tabIndex] != null\n      ) {\n        const ref = labels[index].ref;\n        if (\n          ref != null &&\n          ref.current != null &&\n          scrollNode != null &&\n          scrollNode.current != null &&\n          rootRef.current != null\n        ) {\n          isScrollingCausedByManullyClick.current = true;\n          scrollNode.current.scrollTo({\n            top: ref.current.offsetTop - rootRef.current.offsetTop,\n            left: 0,\n            behavior: 'smooth'\n          });\n        }\n      }\n    }, [labels, scrollNode]);\n\n  useEffect(() => {\n        // A debounced scroll handler that ONLY hanle scroll event caused by scrolling mouse wheel.\n        const debouncedHandleScroll = debounce(() => {\n          // If a scroll event caused by clicking a tab is detected, ignore the case.\n          if (isScrollingCausedByManullyClick.current) {\n            isScrollingCausedByManullyClick.current = false;\n            return;\n          }\n          // Scroll event detected, calculate active label and set the state to be it.\n          if (scrollNode != null && scrollNode.current != null && rootRef.current != null && !isElementScrolledToBottom(scrollNode.current)) {\n            setTabIndex(calcActiveLabel(labels, scrollNode));\n          }\n      }, 200);\n      scrollNode.current.addEventListener('scroll', debouncedHandleScroll);\n      return () => scrollNode.current && scrollNode.current.removeEventListener('scroll', debouncedHandleScroll);\n    }, [tabIndex, scrollNode, labels]\n  );\n    useEffect(() => {\n      // Reset initial state whenever labels changed\n      if (!_.isEqual(labels, prevLabels)) {\n        setTabIndex(0);\n        scrollNode.current.scrollTo(0, 0);\n      }\n    }, [labels]);\n\n    return (\n      <React.Fragment>\n        <AppBar\n          classes={{root: appBar}}\n          elevation={0}\n          id='quote-app-bar'\n          style={display ? {} : {display: 'none'}}\n        >\n          <Tabs\n            value={tabIndex}\n            onChange={onChangeTab}\n            indicatorColor='primary'\n            textColor='primary'\n            variant='scrollable'\n            classes={{scrollButtons}}\n          >\n            {\n              labels.map((label: IScrollTabLabel, index: number) =>\n                <Tab\n                  label={label.label}\n                  key={index}\n                  classes={{\n                    root: tab,\n                    wrapper: tab__wrapper,\n                  }}\n                />)\n            }\n            {unscrollableTabItems}\n          </Tabs>\n        </AppBar>\n        <RootRef rootRef={rootRef}>\n          <Grid\n            container={true}\n            className={noContainer ? '' : container}\n            direction='column'\n            wrap='nowrap'\n          >\n            {children}\n          </Grid>\n        </RootRef>\n      </React.Fragment>\n    );\n  }\n;\n\nconst isElementScrolledToBottom = (el: HTMLElement) => el.scrollTop === (el.scrollHeight - el.offsetHeight);\n\nexport default ScrollTabContainer;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'ExitToApp');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\"\n}), 'History');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 16v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-5 0h-2v-2h2v2zm0-4h-2V8h2v4zm-1 10c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2z\"\n}), 'NotificationImportant');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"path\", {\n  d: \"M10 17l5-5-5-5v10z\"\n}), _react.default.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 24V0h24v24H0z\"\n})), 'ArrowRight');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z\"\n}), 'AddRounded');\n\nexports.default = _default;","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUncheckedRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 13.5v-7c0-.41.47-.65.8-.4l4.67 3.5c.27.2.27.6 0 .8l-4.67 3.5c-.33.25-.8.01-.8-.4z\"\n}), 'PlayCircleFilledRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"\n}), 'VpnKey');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z\"\n}), 'Notifications');\n\nexports.default = _default;","/**\n * Browser page translation (Chrome's Google Translate, Edge's Microsoft Translator) rewrites the DOM\n * behind React's back: it wraps text nodes in <font> elements, which moves them out of the parent\n * React remembers. When React later removes or reorders such a node, removeChild / insertBefore throw\n * NotFoundError, and React 16 answers an error thrown during the commit by unmounting the whole app\n * (Sentry issues 7753283027 and 7713042064: blank page, unsaved edits lost).\n *\n * This guard makes those two calls tolerate a moved node instead: removing a node that already lives\n * elsewhere is skipped, and inserting before a moved reference node appends instead, so the content\n * still shows. It is the long-standing workaround for facebook/react#11538. Installed once per page\n * from the framework init, before anything renders.\n */\n\nconst GUARD_FLAG = '__atsDomTranslationGuard';\nconst MAX_WARNINGS = 5;\n\nlet warnings = 0;\nlet originalRemoveChild: typeof Node.prototype.removeChild = null;\nlet originalInsertBefore: typeof Node.prototype.insertBefore = null;\n\nconst warn = (message: string, ...details: any[]) => {\n  if (warnings < MAX_WARNINGS) {\n    warnings++;\n    console.warn(`${message} (browser page translation?)`, ...details); // tslint:disable-line\n  }\n};\n\nfunction guardedRemoveChild<T extends Node>(this: Node, child: T): T {\n  if (child != null && child.parentNode !== this) {\n    warn('Skipped removing a DOM node that is no longer a child of its parent', child, this);\n    return child;\n  }\n  return originalRemoveChild.call(this, child);\n}\n\nfunction guardedInsertBefore<T extends Node>(this: Node, newNode: T, referenceNode: Node | null): T {\n  if (referenceNode != null && referenceNode.parentNode !== this) {\n    warn('Appended a DOM node because its reference node is no longer a child of the parent', referenceNode, this);\n    return this.appendChild(newNode);\n  }\n  return originalInsertBefore.call(this, newNode, referenceNode);\n}\n\n/** Installs the guard. Returns false when there is no DOM or it is already installed. */\nexport const installDomTranslationGuard = (): boolean => {\n  if (typeof Node !== 'function' || Node.prototype == null || Node.prototype[GUARD_FLAG]) {\n    return false;\n  }\n  originalRemoveChild = Node.prototype.removeChild;\n  originalInsertBefore = Node.prototype.insertBefore;\n  Node.prototype.removeChild = guardedRemoveChild;\n  Node.prototype.insertBefore = guardedInsertBefore;\n  Node.prototype[GUARD_FLAG] = true;\n  return true;\n};\n\n/** Restores the native calls; only tests need this. */\nexport const uninstallDomTranslationGuard = (): void => {\n  if (typeof Node !== 'function' || Node.prototype == null || !Node.prototype[GUARD_FLAG]) {\n    return;\n  }\n  Node.prototype.removeChild = originalRemoveChild;\n  Node.prototype.insertBefore = originalInsertBefore;\n  delete Node.prototype[GUARD_FLAG];\n  originalRemoveChild = null;\n  originalInsertBefore = null;\n  warnings = 0;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = jssCompose;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Set selector.\n *\n * @param {Object} original rule\n * @param {String} className class string\n * @return {Boolean} flag, indicating function was successfull or not\n */\nfunction registerClass(rule, className) {\n  // Skip falsy values\n  if (!className) return true;\n\n  // Support array of class names `{composes: ['foo', 'bar']}`\n  if (Array.isArray(className)) {\n    for (var index = 0; index < className.length; index++) {\n      var isSetted = registerClass(rule, className[index]);\n      if (!isSetted) return false;\n    }\n\n    return true;\n  }\n\n  // Support space separated class names `{composes: 'foo bar'}`\n  if (className.indexOf(' ') > -1) {\n    return registerClass(rule, className.split(' '));\n  }\n\n  var parent = rule.options.parent;\n\n  // It is a ref to a local rule.\n\n  if (className[0] === '$') {\n    var refRule = parent.getRule(className.substr(1));\n\n    if (!refRule) {\n      (0, _warning2.default)(false, '[JSS] Referenced rule is not defined. \\r\\n%s', rule);\n      return false;\n    }\n\n    if (refRule === rule) {\n      (0, _warning2.default)(false, '[JSS] Cyclic composition detected. \\r\\n%s', rule);\n      return false;\n    }\n\n    parent.classes[rule.key] += ' ' + parent.classes[refRule.key];\n\n    return true;\n  }\n\n  rule.options.parent.classes[rule.key] += ' ' + className;\n\n  return true;\n}\n\n/**\n * Convert compose property to additional class, remove property from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssCompose() {\n  function onProcessStyle(style, rule) {\n    if (!style.composes) return style;\n    registerClass(rule, style.composes);\n    // Remove composes property to prevent infinite loop.\n    delete style.composes;\n    return style;\n  }\n  return { onProcessStyle: onProcessStyle };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = jssExtend;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar isObject = function isObject(obj) {\n  return obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && !Array.isArray(obj);\n};\nvar valueNs = 'extendCurrValue' + Date.now();\n\nfunction mergeExtend(style, rule, sheet, newStyle) {\n  var extendType = _typeof(style.extend);\n  // Extend using a rule name.\n  if (extendType === 'string') {\n    if (!sheet) return;\n    var refRule = sheet.getRule(style.extend);\n    if (!refRule) return;\n    if (refRule === rule) {\n      (0, _warning2['default'])(false, '[JSS] A rule tries to extend itself \\r\\n%s', rule);\n      return;\n    }\n    var parent = refRule.options.parent;\n\n    if (parent) {\n      var originalStyle = parent.rules.raw[style.extend];\n      extend(originalStyle, rule, sheet, newStyle);\n    }\n    return;\n  }\n\n  // Extend using an array of objects.\n  if (Array.isArray(style.extend)) {\n    for (var index = 0; index < style.extend.length; index++) {\n      extend(style.extend[index], rule, sheet, newStyle);\n    }\n    return;\n  }\n\n  // Extend is a style object.\n  for (var prop in style.extend) {\n    if (prop === 'extend') {\n      extend(style.extend.extend, rule, sheet, newStyle);\n      continue;\n    }\n    if (isObject(style.extend[prop])) {\n      if (!(prop in newStyle)) newStyle[prop] = {};\n      extend(style.extend[prop], rule, sheet, newStyle[prop]);\n      continue;\n    }\n    newStyle[prop] = style.extend[prop];\n  }\n}\n\nfunction mergeRest(style, rule, sheet, newStyle) {\n  // Copy base style.\n  for (var prop in style) {\n    if (prop === 'extend') continue;\n    if (isObject(newStyle[prop]) && isObject(style[prop])) {\n      extend(style[prop], rule, sheet, newStyle[prop]);\n      continue;\n    }\n\n    if (isObject(style[prop])) {\n      newStyle[prop] = extend(style[prop], rule, sheet);\n      continue;\n    }\n\n    newStyle[prop] = style[prop];\n  }\n}\n\n/**\n * Recursively extend styles.\n */\nfunction extend(style, rule, sheet) {\n  var newStyle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n  mergeExtend(style, rule, sheet, newStyle);\n  mergeRest(style, rule, sheet, newStyle);\n  return newStyle;\n}\n\n/**\n * Handle `extend` property.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssExtend() {\n  function onProcessStyle(style, rule, sheet) {\n    if ('extend' in style) return extend(style, rule, sheet);\n    return style;\n  }\n\n  function onChangeValue(value, prop, rule) {\n    if (prop !== 'extend') return value;\n\n    // Value is empty, remove properties set previously.\n    if (value == null || value === false) {\n      for (var key in rule[valueNs]) {\n        rule.prop(key, null);\n      }\n      rule[valueNs] = null;\n      return null;\n    }\n\n    for (var _key in value) {\n      rule.prop(_key, value[_key]);\n    }\n    rule[valueNs] = value;\n\n    // Make sure we don't set the value in the core.\n    return null;\n  }\n\n  return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v10zM18 4h-2.5l-.71-.71c-.18-.18-.44-.29-.7-.29H9.91c-.26 0-.52.11-.7.29L8.5 4H6c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\"\n}), 'DeleteRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z\"\n}), 'WbSunny');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M22 11h-4.17l3.24-3.24-1.41-1.42L15 11h-2V9l4.66-4.66-1.42-1.41L13 6.17V2h-2v4.17L7.76 2.93 6.34 4.34 11 9v2H9L4.34 6.34 2.93 7.76 6.17 11H2v2h4.17l-3.24 3.24 1.41 1.42L9 13h2v2l-4.66 4.66 1.42 1.41L11 17.83V22h2v-4.17l3.24 3.24 1.42-1.41L13 15v-2h2l4.66 4.66 1.41-1.42L17.83 13H22z\"\n}), 'AcUnit');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M11.67 3.87L9.9 2.1 0 12l9.9 9.9 1.77-1.77L3.54 12z\"\n}), 'ArrowBackIos');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Typography,\n} from '@material-ui/core';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Button,\n  Theme\n} from '@material-ui/core';\nimport {\n  Link\n} from 'react-router-dom';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../../components/FieldTextField';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  required,\n  isValidEmailAddress\n} from '../../../validators';\nimport {\n  IAction,\n  IConfig,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Map,\n} from 'immutable';\nimport {\n  LOGIN_PATH,\n} from '../../../constants';\nimport { UserForgotPasswordAction, CheckEmailAlreadyExistsAction } from '../../../modules/AtsModule/actions';\nimport { makeSelectConfig } from '../../../modules/AtsModule/selectors';\nimport Image from '../../../components/Image';\nimport { createStructuredSelector } from 'reselect';\nimport SideDiv from '../shared/SideDiv';\nimport classnames from 'classnames';\nimport { atsAppLogoLookUp } from '../LoginPage';\nimport { makeSelectLocale } from '../../../modules/LanguageModule/selectors';\nimport { emailCheckFailedFieldError, preventUnhandledSubmitRejection } from '../../../utils/reduxForm';\n\ninterface IForgotPasswordProps {\n  config: IMap<IConfig>;\n  locale: string;\n  submitValues: (values: string) => void;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(8),\n  },\n  logoItem: {\n    marginBottom: theme.spacing(4),\n  },\n  contentItem: {\n    padding: theme.spacing(4),\n  },\n  icon: {\n    minWidth: 0,\n    padding: theme.spacing(2),\n  },\n  fullHeight: {\n    height: '100%',\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  links: {\n    fontSize: theme.typography.button.fontSize,\n    color: theme.palette.primary.main,\n    display: 'flex',\n    paddingRight: theme.spacing(5),\n    textDecoration: 'none',\n    '&:hover': {\n      color: theme.palette.primary.light,\n    }\n  },\n});\n\nexport const FORM_NAME = '__forgotPassword_form__';\n\nconst asyncValidate = (values, dispatch) => {\n  const email = values.get('email');\n\n  return new Promise((resolve, reject) => {\n    return dispatch(new CheckEmailAlreadyExistsAction({\n      email,\n      resolve,\n      reject,\n    }));\n  }).then(({emailIsUnique, verified}) => {\n    if (emailIsUnique) {\n      throw({ email: `Email address doesn't exist in our system.` });\n    }\n  }, () => {\n    // The email check itself failed (e.g. network or server error). Surface it as a field\n    // error so redux-form shows it instead of leaking an unhandled promise rejection.\n    throw emailCheckFailedFieldError();\n  });\n};\n\ntype ForgotPasswordType = WithTranslation & IForgotPasswordProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass ForgotPassword extends React.Component<ForgotPasswordType, {}> {\n  public onSubmit = (values) => {\n    const {\n      submitValues,\n    } = this.props;\n    submitValues(values);\n  }\n\n  public render() {\n    const {\n      handleSubmit,\n      t,\n      classes,\n      config,\n      locale,\n    } = this.props;\n\n    const logoPropsConfig = (config.get(`loginLogoProps${locale === 'fr' ? '_fr' : ''}`) || config.get('loginLogoProps') || config.get('logoProps') || Map<string, any>()).toJS();\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    return (\n        <Grid\n          classes={{\n            container: classes.fullHeight\n          }}\n          container={true}\n        >\n          <SideDiv />\n          <Grid\n            classes={{\n              container: classes.container\n            }}\n            md={9}\n            xs={12}\n            container={true}\n            item={true}\n          >\n            <Grid\n              item={true}\n              container={true}\n              alignItems='center'\n              direction='column'\n              wrap='nowrap'\n            >\n              <Grid\n                container={true}\n                item={true}\n                classes={{\n                  item: classes.logoItem\n                }}\n              >\n                <div>\n                  <Image\n                    src={atsAppLogoLookUp[apiKey]?.logo || ''}\n                    width={atsAppLogoLookUp[apiKey]?.width || '230px'}\n                    aspectRatio='31.76%'\n                    backgroundStyle={atsAppLogoLookUp[apiKey]?.backgroundStyle}\n                    {...logoPropsConfig}\n                  />\n                </div>\n              </Grid>\n              <Grid\n                classes={{\n                  item: classes.contentItem\n                }}\n                direction='column'\n                wrap='nowrap'\n                container={true}\n                item={true}\n                spacing={4}\n              >\n                <Grid\n                  container={true}\n                  direction='column'\n                  item={true}\n                  spacing={4}\n                >\n                  <Grid\n                    item={true}\n                  >\n                    <Typography\n                      variant='h4'\n                    >\n                      {t('forgetPasswordPage.title')}\n                    </Typography>\n                  </Grid>\n                  <Grid\n                    item={true}\n                  >\n                    <Typography\n                      variant='body2'\n                    >\n                      {t('forgetPasswordPage.subtitle')}\n                    </Typography>\n                  </Grid>\n                  <Grid\n                    container={true}\n                    item={true}\n                  >\n                    <form\n                      className={classnames(classes.fullHeight, classes.fullWidth)}\n                      onSubmit={preventUnhandledSubmitRejection(handleSubmit(this.onSubmit))}\n                    >\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name='email'\n                        props={{\n                          label: t('forgetPasswordPage.emailLabel'),\n                          require: true,\n                          formControlProps: {\n                            fullWidth: true,\n                          },\n                        }}\n                        validate={[\n                          required,\n                          isValidEmailAddress\n                        ]}\n                        component={FieldTextField}\n                      />\n                      <Grid\n                        item={true}\n                        container={true}\n                        alignItems='center'\n                      >\n                        <Link\n                          className={classes.links}\n                          to={LOGIN_PATH}\n                        >\n                          {t('forgetPasswordPage.backButton')}\n                        </Link>\n                        <Button\n                          type='submit'\n                          variant='contained'\n                          color='primary'\n                        >\n                          {t('forgetPasswordPage.resetButton')}\n                        </Button>\n                      </Grid>\n                    </form>\n                  </Grid>\n                </Grid>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({\n  submitValues: (values: any) => {\n    const {email} = values.toJS();\n    dispatch(new UserForgotPasswordAction({email}));\n  }\n});\n\nconst mapStateToProps = createStructuredSelector({\n  config: makeSelectConfig(),\n  locale: makeSelectLocale(),\n});\n\nexport default compose<React.ComponentClass<IForgotPasswordProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  reduxForm({\n    form: FORM_NAME,\n    asyncValidate,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ForgotPassword);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import React, { useState, useEffect } from 'react';\nimport {Button, Dialog, DialogActions, Typography} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {makeSelectExpireTime, makeSelectIssuedTime} from '../../modules/AtsModule/selectors';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport moment from 'moment';\nimport {RefreshTokenAction, UserLoggedOutAction} from '../../modules/AtsModule/actions';\nimport {useTranslation} from 'react-i18next';\nimport { DEFAULT_SERVER } from '../../constants';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    dialog: {\n        paddingTop: theme.spacing(2),\n        paddingBottom: theme.spacing(2),\n        paddingLeft: theme.spacing(3),\n        paddingRight: theme.spacing(3),\n    },\n    warningIcon: {\n        color: theme.palette.warning.main,\n        fontSize: '32px',\n    },\n}));\nconst TokenExpireModal = () => {\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const [open, setOpen] = useState(false);\n    const [isExpired, setIsExpired] = useState(false);\n    const [refreshTimeout, setRefreshTimeout] = useState<any>(null);\n    const [expiredTimeout, setExpiredTimeout] = useState<any>(null);\n    const classes = useStyles();\n    const issuedTime = useSelector(makeSelectIssuedTime());\n    const expireTime = useSelector(makeSelectExpireTime());\n\n    useEffect(() => {\n        if (expireTime) {\n            const duration = (expireTime - issuedTime) * 1000;\n            const useRatioedTriggerRemainderTime = duration < 3600000; // less than 1 hour\n            const ratioedTriggerRemainderTime = Math.floor(duration / 2);\n\n            const currentTime = new Date().getTime();\n            const timeLeftInMilliseconds = (expireTime * 1000) - currentTime;\n            const thirtyMinutesInMilliseconds = 1000 * 60 * 30;\n\n            const triggerRemainderTime = useRatioedTriggerRemainderTime ? ratioedTriggerRemainderTime : thirtyMinutesInMilliseconds;\n            if (timeLeftInMilliseconds < triggerRemainderTime) {\n                setOpen(true);\n            } else {\n                clearTimeout(refreshTimeout);\n                const newRefreshTimeout = setTimeout(() => {\n                    setOpen(true);\n                }, timeLeftInMilliseconds - triggerRemainderTime);\n                setRefreshTimeout(newRefreshTimeout);\n            }\n        } else {\n            clearTimeout(refreshTimeout);\n            setRefreshTimeout(null);\n            setOpen(false);\n        }\n        return () => {\n            if (refreshTimeout) {\n                clearTimeout(refreshTimeout);\n                setRefreshTimeout(null);\n            }\n        };\n    }, [expireTime]);\n\n    useEffect(() => {\n        if (expireTime) {\n            const currentTime = new Date().getTime();\n            const timeLeftInMilliseconds = (expireTime * 1000) - currentTime;\n            if (timeLeftInMilliseconds < 0) {\n                setOpen(true);\n                setIsExpired(true);\n            } else {\n                clearTimeout(expiredTimeout);\n                const newExpiredTimeout = setTimeout(() => {\n                    setOpen(true);\n                    setIsExpired(true);\n                }, timeLeftInMilliseconds);\n                setExpiredTimeout(newExpiredTimeout);\n            }\n        } else {\n            clearTimeout(expiredTimeout);\n            setIsExpired(false);\n            setExpiredTimeout(null);\n            setOpen(false);\n        }\n        return () => {\n            if (expiredTimeout) {\n                clearTimeout(expiredTimeout);\n                setIsExpired(false);\n                setExpiredTimeout(null);\n            }\n        };\n    }, [expireTime]);\n\n    const date = new Date(expireTime * 1000);\n    const dateStr = moment(date).format('YYYY-MM-DD HH:mm');\n\n    const handleRefresh = () => {\n        dispatch(new RefreshTokenAction({}));\n        setOpen(false);\n    };\n\n    const handleRedirect = () => {\n        setOpen(false);\n        setIsExpired(false);\n        dispatch(new UserLoggedOutAction({ server: DEFAULT_SERVER }));\n    };\n\n    return (\n        <Dialog\n            open={open}\n            PaperProps={{\n                className: classes.dialog,\n            }}\n        >\n            <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '10px' }}>\n               <WarningIcon className={classes.warningIcon} />\n               <Typography variant='body2' color='textPrimary'>{t('tokenExpireModal.sessionTimeOut')}</Typography>\n            </div>\n            {\n                isExpired\n                    ? <>\n                        <div style={{ marginBottom: '16px', width: 400 }}>\n                            <Typography style={{ color: '#000', fontSize: '1.3rem'}}>{t('tokenExpireModal.tokenHasExpiredMessage')}</Typography>\n                        </div>\n                        <div style={{ marginBottom: '16px' }}>\n                            <Typography variant='body2'>{t('tokenExpireModal.tokenHasExpiredPrompt')}</Typography>\n                        </div>\n                        <DialogActions>\n                            <Button color='primary' onClick={handleRedirect}>\n                                {t('nav.login')}\n                            </Button>\n                        </DialogActions>\n                    </>\n                    : <>\n                        <div style={{ marginBottom: '16px' }}>\n                            <Typography variant='body2'>{t('tokenExpireModal.sessionTimeOutMessage')}</Typography>\n                        </div>\n                        <div style={{ marginBottom: '16px', textAlign: 'center'}}>\n                            <Typography style={{ color: '#000', fontSize: '1.5rem'}}>{dateStr}</Typography>\n                        </div>\n                        <div style={{ marginBottom: '16px' }}>\n                            <Typography variant='body2'>{t('tokenExpireModal.question')}</Typography>\n                        </div>\n                        <DialogActions>\n                            <Button color='primary' onClick={() => setOpen(false)}>{t('tokenExpireModal.cancel')}</Button>\n                            <Button color='primary' onClick={handleRefresh}>\n                                {t('tokenExpireModal.refreshSession')}\n                            </Button>\n                        </DialogActions>\n                    </>\n            }\n\n        </Dialog>\n    );\n};\n\nexport default TokenExpireModal;","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  TogglePath,\n} from '../../components';\nimport {\n  CREATE_NEW_SPEC_PATH,\n} from '../../constants';\nconst ToggleButton = ({t}: WithTranslation) => {\n\n  return (\n    <TogglePath pathName={CREATE_NEW_SPEC_PATH} label={t('createNewSpec.Title')}/>\n  );\n};\n\nexport default withTranslation('translations')(ToggleButton);","import * as React from 'react';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  TogglePath,\n} from '../../components';\nimport {\n  CREATE_NEW_PROJECT_PATH,\n} from '../../constants';\nconst ToggleButton = ({t}: WithTranslation) => {\n\n  return (\n    <TogglePath pathName={CREATE_NEW_PROJECT_PATH} label={t('createNewProject.Title')}/>\n  );\n};\n\nexport default withTranslation('translations')(ToggleButton);","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z\"\n}), 'SwapVert');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M21.65 7.65l-2.79-2.79c-.32-.32-.86-.1-.86.35V7H4c-.55 0-1 .45-1 1s.45 1 1 1h14v1.79c0 .45.54.67.85.35l2.79-2.79c.2-.19.2-.51.01-.7zM2.35 16.35l2.79 2.79c.32.32.86.1.86-.35V17h14c.55 0 1-.45 1-1s-.45-1-1-1H6v-1.79c0-.45-.54-.67-.85-.35l-2.79 2.79c-.2.19-.2.51-.01.7z\"\n}), 'SyncAltRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14 4l2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3z\"\n}), 'CallSplit');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import Lodable from '@loadable/component';\n\nexport default (Lodable as any)(() => import('./Component'));\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\n\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\n// material-ui\nimport {\n  withStyles,\n  WithStyles,\n  StyleRules,\n} from '@material-ui/core/styles';\n\nimport {\n  Grid,\n  Typography,\n  Theme,\n  List,\n  ListItem,\n  Switch,\n  Button,\n  Checkbox,\n  Paper,\n  Collapse,\n  ListItemText\n} from '@material-ui/core';\n\nimport {\n  Field,\n  reduxForm,\n  BaseFieldProps,\n} from 'redux-form';\n\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\n\nimport classnames from 'classnames';\n\nimport {\n  GetPartnershipsAction,\n  SetPartnershipsAction,\n  SetPartnershipsSucceededAction,\n  GetOfficeByIdAction,\n  GetPreferencesAction\n} from '../../modules/AccountModule/actions';\n\nimport { Map, List as ImmutableList } from 'immutable';\nimport { OpportunityGroup, Partnership } from '../../models';\nimport ExpandLess from '@material-ui/icons/ExpandLess';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport { PreferenceType } from '../../models/Preferences';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport { push } from 'connected-react-router';\nimport { NOT_FOUND_PATH, SiteName } from '../../constants';\nimport {  makeSelectSite } from '../../modules/AtsModule/selectors';\n\n// STYLES\nconst styles = (theme: Theme): StyleRules => ({\n  paper: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    background: theme.palette.common.white,\n    margin: `${theme.spacing() * 2}px`,\n  },\n  contentContainer: {\n    flexGrow: 1,\n    flexWrap: 'nowrap'\n  },\n  container: {\n    display: 'flex',\n  },\n  leftContainer: {\n    minWidth: '25%',\n    background: theme.palette.common.white,\n    borderTop: `1px solid ${theme.palette.primary.dark}`,\n    flexShrink: 0\n  },\n  rightContainer: {\n    flexGrow: 1,\n    background: theme.palette.grey[300]\n  },\n  section: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  settingsContainer: {\n    background: theme.palette.common.white,\n  },\n  form: {\n    flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column'\n  },\n  input: {\n    padding: `${theme.spacing(2)}px ${theme.spacing() * 2}px 0`\n  },\n  opportunityListItem: {\n    // flexDirection: 'column'\n    flexWrap: 'wrap'\n  },\n  noPadding: {\n    padding: 0\n  },\n  rootList: {\n    width: '100%'\n  },\n  groupTitle: {\n    flexGrow: 0,\n    paddingRight: theme.spacing() * 2\n  },\n  labelsToDisplay: {\n    fontSize: theme.typography.fontSize * 0.9\n  },\n  arrow: {\n    opacity: 0\n  },\n  leftSection: {\n    margin: theme.spacing(2)\n  },\n  leftContainerTitle: {\n    width: 'auto',\n    paddingBottom: theme.spacing(2)\n  },\n  pageHeader: {\n    padding: theme.spacing(2),\n    paddingBottom: theme.spacing(0.5)\n  }\n});\n\n// INTERFACES\ninterface ICollaboratorPermissionComponentProps {\n}\n\ninterface ICollaboratorPermissionProps {\n  dispatch: (s: IAction) => void;\n  state: Map<string, any>;\n  searchTerm: string;\n  partnerships: Map<number, IMap<Partnership>>;\n  office: Map<string, any>;\n  opportunityGroups: ImmutableList<IMap<OpportunityGroup>>;\n  site: SiteName;\n}\n\ntype ICollaboratorPermission = ICollaboratorPermissionProps & ICollaboratorPermissionComponentProps & WithStyles<keyof ReturnType<typeof styles>> & WithTranslation;\n\n// ENUMS\nenum DisplayType {\n  CRUD = 'CRUD',\n  BOOLEAN = 'boolean',\n  OPPORTUNITY = 'opportunity'\n}\n\n// CONSTANTS\nconst defaultPartnership: { [key: string]: any } = {\n  contacts: {\n    permission: {\n      value: false\n    }\n  },\n  opportunity: {\n    permission: {\n      value: false\n    }\n  },\n  task: {\n    permission: {\n      values: {\n        c: true,\n        r: false,\n        u: true,\n        d: true\n      }\n    }\n  },\n  note: {\n    permission: {\n      values: {\n        c: true,\n        r: false,\n        u: true,\n        d: true\n      }\n    }\n  },\n  file: {\n    permission: {\n      values: {\n        c: true,\n        r: false,\n        u: true,\n        d: true\n      }\n    }\n  },\n};\n\nclass CollaboratorPermission extends React.Component<ICollaboratorPermission> { // eslint-disable-line react/prefer-stateless-function\n\n  // STATE\n  public state = {\n    selectedPartnership: null,\n    specifics: null\n  };\n\n  // LIFECYCLE\n  public componentDidMount() {\n    this.props.dispatch(new GetPartnershipsAction());\n    this.props.dispatch(new GetPreferencesAction({userType: 'user', preference: PreferenceType.OpportunityGroups}));\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      site,\n    } = this.props;\n    const {\n      selectedPartnership\n    } = this.state;\n    const path = [selectedPartnership, 'config'];\n    const current = this.props.partnerships.getIn(path);\n    const previous = prevProps.partnerships.getIn(path);\n    if ((prevState.selectedPartnership !== selectedPartnership) || (current && !current.equals(previous))) {\n      const specifics = selectedPartnership\n        && this.props.partnerships.getIn([selectedPartnership, 'config', 'opportunity', 'specifics'], Map({}))\n            .reduce((acc, x, index) => acc.set(x.get('id'), x.updateIn(['index'], () => index)) , Map({}));\n      this.setState({specifics});\n    }\n\n    if (site && site === SiteName.pim) {\n      this.props.dispatch(push(NOT_FOUND_PATH));\n    }\n  }\n\n  // FUNCTIONS\n  public setToDefault = (partnerships: Map<number, IMap<Partnership>>) => {\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const config = partnerships.getIn([selectedPartnership, 'config']).mergeDeep(defaultPartnership);\n\n    const data = {\n      partnershipId: selectedPartnership,\n      config\n    };\n\n    this.props.dispatch(new SetPartnershipsSucceededAction(data));\n    this.props.dispatch(new SetPartnershipsAction(data));\n  }\n\n  public togglePermission = (key: string, value: boolean) => {\n    const {\n      partnerships,\n      dispatch\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const config = partnerships.getIn([selectedPartnership, 'config']);\n    const permission = config.get(key);\n    const permissionKey = permission.get('permission').has('value') ? 'value' : 'values';\n    const updatedConfig = config.updateIn([key, 'permission', permissionKey], () => value);\n\n    const data = {\n      partnershipId: selectedPartnership,\n      config: updatedConfig\n    };\n\n    dispatch(new SetPartnershipsSucceededAction(data));\n    dispatch(new SetPartnershipsAction(data));\n  }\n\n  public toggleSpecifics = (uuid: string) => {\n    const {\n      partnerships,\n      dispatch\n    } = this.props;\n\n    const {\n      selectedPartnership,\n      specifics\n    } = this.state;\n\n    const config = partnerships.getIn([selectedPartnership, 'config']);\n    const path = ['opportunity', 'specifics', specifics.getIn([uuid, 'index']) >= 0\n      ? specifics.getIn([uuid, 'index'])\n      : config.getIn(['opportunity', 'specifics'], ImmutableList()).count()];\n    const updatedConfig = config.updateIn(path, value => {\n      return Map({\n        id: uuid,\n        permission: Map({\n          type: 'boolean',\n          value: value && value.getIn(['permission', 'value']) ? false : true\n        })\n      });\n    }\n    );\n\n    const data = {\n      partnershipId: selectedPartnership,\n      config: updatedConfig\n    };\n\n    dispatch(new SetPartnershipsSucceededAction(data));\n    dispatch(new SetPartnershipsAction(data));\n  }\n\n  // RENDERERS\n  public booleanRenderer = (objectKey: string) => {\n    const {\n      partnerships\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const partnership: IMap<Partnership> = partnerships.get(selectedPartnership);\n    const setting = partnership.getIn(['config', objectKey]);\n    const title = setting.get('title');\n    const description = setting.get('description');\n    const value = setting.getIn(['permission', 'value']);\n\n    return (\n      <ListItem divider={true} key={`Partnership${title}`}>\n        <Grid container={true} direction='column'>\n          <Typography variant='subtitle2'>{title}</Typography>\n          <Typography variant='caption'>{description}</Typography>\n        </Grid>\n        <Switch\n          checked={value}\n          onClick={() => this.togglePermission(objectKey, !value)}\n        />\n      </ListItem>\n    );\n  }\n\n  public crudRenderer = (objectKey: string) => {\n    const {\n      partnerships,\n      t,\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const partnership: IMap<Partnership> = partnerships.get(selectedPartnership);\n    const setting = partnership.getIn(['config', objectKey]);\n    const title = setting.get('title');\n    const description = setting.get('description');\n    const values = setting.getIn(['permission', 'values',]);\n    const C = values.get('c'); /* Wanted to use an ENUM for the CRUD values here but there was an issue with MaterialUI typing and passing ENUMs in as checked value */\n    const R = values.get('r');\n    const U = values.get('u');\n    const D = values.get('d');\n    const toggledAssignToValues = values.map((value: boolean, index: string) => index === 'r' ? R : !C);\n    const toggledViewValue = values.update('r', value => !value);\n\n    return (\n      <ListItem divider={true} key={`Partnership${title}`}>\n        <Grid container={true} direction='column'>\n          <Typography variant='subtitle2'>{title}</Typography>\n          <Typography variant='caption'>{description}</Typography>\n        </Grid>\n        <Grid container={true} alignItems='center' justify='space-between' wrap='nowrap'>\n          <Grid container={true} alignItems='center' justify='flex-end'>\n            <Typography variant='caption' noWrap={true}>{t('collaboratorPermission.assignTo')}</Typography>\n            <Checkbox\n              checked={C && U && D}\n              onClick={() => this.togglePermission(objectKey, toggledAssignToValues)}\n            />\n          </Grid>\n          <Grid container={true} alignItems='center' justify='flex-end'>\n            <Typography variant='caption' noWrap={true}>{t('collaboratorPermission.viewOur')}{title}</Typography>\n            <Checkbox\n              checked={R}\n              onClick={() => this.togglePermission(objectKey, toggledViewValue)}\n            />\n          </Grid>\n        </Grid>\n      </ListItem>\n    );\n  }\n\n  public searchRender = (partnership: IMap<Partnership>) => {\n    const {\n      partnerships,\n      office = Map()\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const name: string = partnership.getIn(['config', 'partner', 'name']);\n    const id: number = partnership.get('id');\n    return (\n      <ListItem\n        button={true}\n        divider={true}\n        key={`Partnership${id}`}\n        selected={id === selectedPartnership}\n        onClick={() => {\n          this.setState({ selectedPartnership: id });\n          if (!office.get(partnerships.getIn([id, 'config', 'partner', 'id']))) {\n            this.props.dispatch(new GetOfficeByIdAction({ officeId: partnerships.getIn([id, 'config', 'partner', 'id']) }));\n          }\n        }}>\n        <Typography variant='subtitle2'>{name}</Typography>\n      </ListItem>\n    );\n  }\n\n  public opportunityRenderer = (objectKey: any) => {\n    const {\n      partnerships,\n      classes\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const partnership: IMap<Partnership> = partnerships.get(selectedPartnership);\n    const setting = partnership.getIn(['config', objectKey]);\n    const title = setting.get('title');\n    const description = setting.get('description');\n    const value = setting.getIn(['permission', 'value']);\n\n    return (\n      <ListItem divider={true} key={`Partnership${title}`} classes={{root: this.props.classes.opportunityListItem}}>\n        <Grid container={true} direction='row' wrap='nowrap'>\n          <Grid container={true} direction='column'>\n            <Typography variant='subtitle2'>{title}</Typography>\n            <Typography variant='caption'>{description}</Typography>\n          </Grid>\n          <Switch\n            checked={value}\n            onClick={() => this.togglePermission(objectKey, !value)}\n          />\n        </Grid>\n        <Collapse in={value} classes={{container: classes.rootList}}>\n          <List classes={{root: classnames(classes.noPadding, classes.rootList)}}>\n            {\n              // setting.get('specifics').count() > 0 && this.props.opportunityGroups && value &&\n              this.props.opportunityGroups.map((group) => {\n                const uuid = group.get('uuid');\n                const groupTitle = group.get('title');\n                const openState = this.state[uuid];\n                const labelsToDisplay = group.get('labels')\n                  .filter(label2 => this.state.specifics && this.state.specifics.getIn([label2.get('uuid'), 'permission', 'value']))\n                    .map(x => x.get('title'))\n                      .join(', ');\n                const filtersExist = group.get('labels') && group.get('labels').count() > 0;\n\n                return (\n                  <React.Fragment key={uuid}>\n                    <ListItem button={true} onClick={() => this.setState({[uuid]: !openState})} classes={{root: classes.noPadding}}>\n                      {openState\n                      ? <ExpandLess\n                          className={\n                              classnames({\n                                [classes.arrow]: !filtersExist\n                              })\n                          }\n                        />\n                      : <ExpandMore\n                          className={\n                            classnames({\n                              [classes.arrow]: !filtersExist\n                            })\n                          }\n                        />\n                      }\n                      <Checkbox\n                        onClick={e => e.stopPropagation()}\n                        checked={this.state.specifics && this.state.specifics.getIn([uuid, 'permission', 'value']) || false}\n                        onChange={() => this.toggleSpecifics(uuid)}\n                      />\n                      <ListItemText primary={groupTitle} classes={{ root: classnames(classes.noPadding, classes.groupTitle) }}/>\n                      <ListItemText primary={labelsToDisplay && `[${labelsToDisplay}]`} classes={{ root: classnames(classes.noPadding, classes.labelsToDisplay) }}/>\n                    </ListItem>\n                    <Collapse in={openState}>\n                      <List classes={{root: classes.noPadding}}>\n                        {group.get('labels').count() > 0 && group.get('labels').map((label) => {\n                          return (\n                            <ListItem classes={{root: classes.noPadding}} key={label.get('uuid')}>\n                              <Checkbox\n                                checked={this.state.specifics && this.state.specifics.getIn([label.get('uuid'), 'permission', 'value']) || false}\n                                onChange={() => this.toggleSpecifics(label.get('uuid'))}\n                              />\n                              <ListItemText classes={{root: classes.noPadding}} primary={label.get('title')} />\n                            </ListItem>\n                          );\n                        })}\n                      </List>\n                    </Collapse>\n                  </React.Fragment>\n                );\n              })\n            }\n          </List>\n        </Collapse>\n      </ListItem>\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      searchTerm = '',\n      partnerships,\n      office = Map(),\n      t,\n    } = this.props;\n\n    const {\n      selectedPartnership\n    } = this.state;\n\n    const filteredBySearchTerm = partnerships.filter((partnership: IMap<Partnership>) => {\n      const matchCount = partnership.getIn(['config', 'partner', 'name'], '')\n        .split(' ')\n          .filter(name => name.toLowerCase().startsWith(searchTerm.toLowerCase())).length;\n      return matchCount > 0;\n    });\n\n    return (\n      <Paper className={classes.paper}>\n        <form className={classes.form} onSubmit={e => e.preventDefault()}>\n          <Grid className={classes.pageHeader}>\n            <Typography variant='h5'>{t('collaboratorPermission.title')}</Typography>\n            <Typography className={classes.titleDescription} variant='caption'>{t('collaboratorPermission.description')}</Typography>\n          </Grid>\n          <Grid container={true} justify='space-between' className={classes.contentContainer}>\n            <Grid item={true} className={classnames(classes.leftContainer, classes.container)} >\n              <div className={classes.section}>\n                <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                  component={FieldTextField}\n                  name='searchTerm'\n                  props={{\n                    inputProps: {\n                      value: searchTerm || '',\n                      placeholder: t('collaboratorPermission.searchPlaceholder'),\n                    },\n                    formControlProps: {\n                      className: classes.input\n                    }\n                  }}\n                />\n                <List disablePadding={true}>\n                  {\n                    !searchTerm\n                      ? partnerships.map((partnership: IMap<Partnership>) => this.searchRender(partnership)).valueSeq().toArray()\n                      : filteredBySearchTerm.count() > 0\n                        ? filteredBySearchTerm.map((partnership: IMap<Partnership>) => this.searchRender(partnership)).valueSeq().toArray()\n                        : <ListItem>\n                          <Typography variant='subtitle2'>{t('collaboratorPermission.noMatches')}</Typography>\n                        </ListItem>\n                  }\n                </List>\n              </div>\n            </Grid>\n            <Grid item={true} className={classnames(classes.rightContainer, classes.container)}>\n              <div className={classnames(classes.leftSection, classes.section)}>\n                {selectedPartnership &&\n                  <Grid container={true} justify='space-between' alignItems='center' className={classes.leftContainerTitle}>\n                    <Grid container={true} direction='column' style={{width: 'auto'}}>\n                      <Typography variant='subtitle2'>{partnerships.getIn([selectedPartnership, 'config', 'partner', 'name'])}</Typography>\n                      {office.has(partnerships.getIn([selectedPartnership, 'config', 'partner', 'id'])) && <Typography variant='caption'>{office.getIn([partnerships.getIn([selectedPartnership, 'config', 'partner', 'id']), 'address1'])}</Typography>}\n                    </Grid>\n                    <Button\n                      color='primary'\n                      onClick={() => this.setToDefault(partnerships)}\n                    >\n                      {t('collaboratorPermission.setDefault')}\n                  </Button>\n                  </Grid>\n                }\n                <List disablePadding={true} className={classes.settingsContainer} >\n                  {partnerships.getIn([selectedPartnership, 'config'], Map<string, any>()).map((partnership: IMap<Partnership>, objectKey: string) => {\n                    const renderType = objectKey === DisplayType.OPPORTUNITY ? DisplayType.OPPORTUNITY : partnership.getIn(['permission', 'type']) ;\n                    switch (renderType) {\n                      case DisplayType.BOOLEAN:\n                        return this.booleanRenderer(objectKey);\n                      case DisplayType.CRUD:\n                        return this.crudRenderer(objectKey);\n                      case DisplayType.OPPORTUNITY:\n                        return this.opportunityRenderer(objectKey);\n                      default:\n                        return null;\n                    }\n                  }).valueSeq().toArray()\n                  }\n                </List>\n              </div>\n            </Grid>\n          </Grid>\n        </form>\n      </Paper>\n    );\n  }\n}\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n  return Object.assign({}, ownProps, stateProps, dispatchProps, {\n    form: 'collaboratorPermission',\n    searchTerm: stateProps.state.getIn(['form', 'collaboratorPermission', 'values', 'searchTerm']),\n    partnerships: stateProps.state.getIn(['account', 'partnerships']),\n    office: stateProps.state.getIn(['account', 'partnershipOffice']),\n    opportunityGroups: stateProps.state.getIn(['account', 'preferences', PreferenceType.OpportunityGroups])\n  });\n};\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = createStructuredSelector({\n  state: (state: any) => state,\n  site: makeSelectSite(),\n});\n\nexport default compose<React.ComponentClass<ICollaboratorPermissionComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  reduxForm({}),\n  withTranslation('translations'),\n)(CollaboratorPermission);\n","import * as React from 'react';\nimport { compose, Dispatch } from 'redux';\nimport {\n  Theme,\n  Grid,\n  Typography,\n  IconButton,\n  Button,\n  Paper,\n  Divider,\n  RadioGroup,\n  Radio,\n  FormControlLabel,\n  FormControl,\n  Snackbar,\n} from '@material-ui/core';\nimport { StyleRules, withStyles, WithStyles } from '@material-ui/core/styles';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { Map, getIn } from 'immutable';\nimport { InjectedFormProps, BaseFieldProps, change } from 'redux-form';\nimport { Field, reduxForm, getFormValues } from 'redux-form/immutable';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport Xhr from '../../utils/Xhr';\nimport Api from 'ats-api/src';\nimport { withAtsApi } from '../../contexts';\nimport FieldDropzone, { IFieldDropzoneComponentProps } from '../../components/FieldDropzone';\nimport { createStructuredSelector } from 'reselect';\nimport { uploadFileValidation } from '../../components/TeamManagementUserEditDrawer/Component';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\nimport { FieldRadio, PaddedMessage } from '../../components';\nimport { IFieldRadioComponentProps } from '../../components/FieldRadio';\nimport { makeSelectUserId, makeSelectIdentityObject, makeSelectIsAtsSpecTool, makeSelectIsUsingLogInAs } from '../../modules/AtsModule/selectors';\nimport { GetUserByIdAction, UpdateUserByIdAction, GetUserByIdSucceededAction } from '../../modules/AccountModule/actions';\nimport { makeSelectUserById, makeSelectUserLoading, makeSelectUsersLoading, makeSelectUserUpdateSucceeded } from '../../modules/AccountModule/selectors';\nimport { NoPhotoPreviewAction, FieldDropzoneStateResetAction } from '../../modules/ApplicationModule/actions';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { isNotEmptyStringRequired, isValidEmailAddress } from '../../validators';\nimport { User } from '../../models';\nimport { asyncValidate } from '../../components/TeamManagementUserEditDrawer/Component';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { preventUnhandledSubmitRejection } from '../../utils/reduxForm';\n\nexport const USER_PROFILE_FORM = 'UserProfile';\n\nconst styles = (theme: Theme): StyleRules => ({\n  contentDirection: {\n    [theme.breakpoints.down(1042)]: {\n      flexDirection: 'column-reverse'\n    }\n  },\n  contentContainer: {\n    width: '50%',\n    [theme.breakpoints.down(1042)]: {\n      width: '100%'\n    }\n  },\n  avatarContainer: {\n    minWidth: '42%',\n    width: `calc(50% - ${theme.spacing(10)}px)`,\n    [theme.breakpoints.down(1042)]: {\n      width: '100%'\n    }\n  },\n  avatarTitleContainer: {\n    width: theme.spacing(25)\n  },\n  overallContainer: {\n    margin: theme.spacing(2),\n    maxWidth: '1800px',\n    minHeight: '650px',\n    position: 'relative'\n  },\n  sectionContainer: {\n    padding: theme.spacing(2)\n  },\n  uploadPhoto: {\n    display: 'flex',\n    height: theme.spacing(25),\n    width: theme.spacing(25)\n  },\n  loading: {\n    position: 'absolute',\n    top: '50%',\n    transform: 'translateY(-50%)'\n  },\n  warningIcon: {\n    color: theme.palette.warning.main\n  },\n  updateButton: {\n    marginTop: theme.spacing(2)\n  },\n  successIcon: {\n    color: theme.palette.success.main\n  },\n  failIcon: {\n    color: theme.palette.error.main\n  },\n  closeIcon: {\n    cursor: 'pointer'\n  },\n  resultMessage: {\n    margin: theme.spacing(0, 1.5)\n  }\n});\n\ninterface IUserProfileComponentProps {\n}\n\ninterface IUserProfileProps extends IUserProfileComponentProps {\n  id: number;\n  dispatch: Dispatch<IAction>;\n  formValues: Map<string, any>;\n  initialValues: Map<string, any>;\n  atsApi: Api;\n  usersLoading: boolean;\n  userLoading: boolean;\n  userUpdateSucceeded: boolean;\n  isAtsSpecTool: boolean;\n  isUsingLoggedInAs: boolean;\n}\n\ninterface IUserProfileState {\n  imageId: string;\n  openSnackbar: boolean;\n}\n\nexport type UserProfileProps = IUserProfileProps & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass UserProfile extends React.Component<UserProfileProps, IUserProfileState> {\n  public state = {\n    imageId: '',\n    openSnackbar: false\n  };\n\n  public componentDidMount = () => {\n    const {\n      dispatch,\n      id\n    } = this.props;\n\n    if (id) {\n      dispatch(new GetUserByIdAction({ id }));\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      dispatch,\n      id,\n      formValues,\n      userLoading\n    } = this.props;\n    const {\n      imageId\n    } = this.state;\n\n    if (id && id !== prevProps.id) {\n      dispatch(new GetUserByIdAction({ id }));\n    }\n\n    if (!prevState.imageId && formValues && formValues.get('imageId')) {\n      this.setState({ imageId: formValues.get('imageId') });\n    }\n\n    if (imageId !== prevState.imageId) {\n      dispatch(change(USER_PROFILE_FORM, 'imageId', imageId));\n    }\n\n    if (!userLoading && prevProps.userLoading) {\n      this.setState({ openSnackbar: true });\n    }\n  }\n\n  public componentWillUnmount = () => {\n    const {\n      dispatch\n    } = this.props;\n    dispatch(new GetUserByIdSucceededAction(Map() as IMap<User>));\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      handleSubmit,\n      usersLoading,\n      userUpdateSucceeded,\n      formValues,\n      isAtsSpecTool,\n      isUsingLoggedInAs,\n    } = this.props;\n    const {\n      openSnackbar\n    } = this.state;\n\n    return (\n      <Paper\n        className={classes.overallContainer}\n      >\n        <Snackbar\n          open={openSnackbar}\n          onClose={() => this.setOpen(false)}\n          transitionDuration={{\n            enter: 1500\n          }}\n          message={\n            <Grid\n              container={true}\n              justify='center'\n              wrap='nowrap'\n            >\n              {\n                userUpdateSucceeded\n                  ? <CheckCircleIcon className={classes.successIcon} />\n                  : <CancelIcon className={classes.failIcon} />\n              }\n              <span className={classes.resultMessage}>\n                {\n                  userUpdateSucceeded\n                    ? t('UserProfile.successfulUpdate')\n                    : t('UserProfile.failedUpdate')\n                }\n              </span>\n              <CloseIcon className={classes.closeIcon} onClick={() => this.setOpen(false)}/>\n            </Grid>\n          }\n        />\n        <Grid\n          className={classes.sectionContainer}\n        >\n          <Typography variant={'h5'}>\n            {t('UserProfile.title')}\n          </Typography>\n          <Typography variant={'caption'}>\n            {t('UserProfile.subtitle')}\n          </Typography>\n        </Grid>\n        <Divider />\n        {\n          usersLoading\n          ? <Grid\n              container={true}\n              justify='center'\n              alignItems='center'\n              className={classes.loading}\n            >\n              <PaddedMessage loading={true}>{t('generalLoading.loading')}</PaddedMessage>\n            </Grid>\n          : <form\n              onSubmit={preventUnhandledSubmitRejection(handleSubmit(this.handleSubmit))}\n            >\n              <Grid\n                className={classnames(classes.sectionContainer, classes.contentDirection)}\n                container={true}\n                spacing={2}\n                justify='space-between'\n              >\n                <Grid\n                  item={true}\n                  className={classes.contentContainer}\n                >\n                  <Typography variant='h6'>\n                    {t('UserProfile.yourInfo')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    wrap='nowrap'\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name='firstName'\n                        props={{\n                          label: t('UserProfile.firstName'),\n                          require: true,\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                        validate={[isNotEmptyStringRequired]}\n                        component={FieldTextField}\n                      />\n                    </Grid>\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name='lastName'\n                        props={{\n                          label: t('UserProfile.lastName'),\n                          require: true,\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                        validate={[isNotEmptyStringRequired]}\n                        component={FieldTextField}\n                      />\n                    </Grid>\n                  </Grid>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='jobTitle'\n                    props={{\n                      label: t('UserProfile.jobTitle'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[isNotEmptyStringRequired]}\n                    component={FieldTextField}\n                  />\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='email'\n                    props={{\n                      label: t('login.username'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    validate={[isNotEmptyStringRequired, isValidEmailAddress]}\n                    component={FieldTextField}\n                  />\n                  <Grid\n                    container={true}\n                    justify='space-between'\n                    wrap='nowrap'\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name='officePhone'\n                        props={{\n                          label: t('UserProfile.officePhone'),\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                        component={FieldTextField}\n                      />\n                    </Grid>\n                    <Grid\n                      item={true}\n                      xs={6}\n                    >\n                      <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                        name='extension'\n                        props={{\n                          label: t('UserProfile.extension'),\n                          formControlProps: {\n                            fullWidth: true\n                          }\n                        }}\n                        component={FieldTextField}\n                      />\n                    </Grid>\n                  </Grid>\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='mobilePhone'\n                    props={{\n                      label: t('UserProfile.mobile'),\n                      formControlProps: {\n                        fullWidth: true\n                      }\n                    }}\n                    component={FieldTextField}\n                  />\n\n                  {/* Data & privacy consent - spec tool only */}\n                  {\n                    isAtsSpecTool &&\n                    <>\n                      <Typography color='textPrimary'>\n                        {t('UserProfile.consent')}\n                      </Typography>\n                      <Grid\n                        container={true}\n                        wrap='nowrap'\n                        spacing={2}\n                      >\n                        {\n                          [\n                            { label: t('UserProfile.yes'), checkedValue: true, disabled: isUsingLoggedInAs },\n                            { label: t('UserProfile.no'), checkedValue: false, disabled: isUsingLoggedInAs },\n                          ].map((option) => (\n                            <Grid\n                              item={true}\n                              key={String(option.checkedValue)}\n                            >\n                              <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                                name='consent'\n                                component={FieldRadio}\n                                props={{\n                                  ...option,\n                                  color: 'primary',\n                                  helperText: false,\n                                  formControlLabelProps: {\n                                    labelPlacement: 'start'\n                                  }\n                                }}\n                              />\n                            </Grid>\n                          ))\n                        }\n                      </Grid>\n                    </>\n                  }\n\n                  {/* Email Subscription */}\n                  {/* <Typography variant='h6'>\n                    {t('UserProfile.emailSubscriptions')}\n                  </Typography>\n                  <Typography>\n                    {t('UserProfile.eCommunication')}\n                  </Typography>\n                  <Grid\n                    container={true}\n                    wrap='nowrap'\n                    spacing={2}\n                  >\n                    <Grid\n                      item={true}\n                    >\n                      <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                        name='eCommunication'\n                        component={FieldRadio}\n                        props={{\n                          label: t('UserProfile.yes'),\n                          color: 'primary',\n                          checkedValue: true,\n                          helperText: false\n                        }}\n                      />\n                    </Grid>\n                    <Grid\n                      item={true}\n                    >\n                      <Field<BaseFieldProps<IFieldRadioComponentProps>>\n                        name='eCommunication'\n                        component={FieldRadio}\n                        props={{\n                          label: t('UserProfile.no'),\n                          color: 'primary',\n                          checkedValue: false,\n                          helperText: false\n                        }}\n                      />\n                    </Grid>\n                  </Grid>\n                  {\n                    formValues && formValues.get('eCommunication') === false &&\n                      <Grid\n                      container={true}\n                      alignItems='center'\n                      spacing={2}\n                      wrap='nowrap'\n                    >\n                      <Grid\n                        item={true}\n                      >\n                        <WarningIcon className={classes.warningIcon} />\n                      </Grid>\n                      <Grid\n                        item={true}\n                      >\n                        <Typography>\n                          {t('UserProfile.warning')}\n                        </Typography>\n                      </Grid>\n                    </Grid>\n                  } */}\n\n                  {/* Update */}\n                  <Button\n                    color='primary'\n                    type='submit'\n                    variant='contained'\n                    className={classes.updateButton}\n                  >\n                    {t('UserProfile.updateButton')}\n                  </Button>\n                </Grid>\n\n                {/* Avatar */}\n                <Grid\n                  item={true}\n                  className={classes.avatarContainer}\n                >\n                  {this.uploadPhoto()}\n                </Grid>\n              </Grid>\n            </form>\n        }\n      </Paper>\n    );\n  }\n\n  private uploadPhoto = (): JSX.Element => {\n    const { imageId } = this.state;\n    const {\n      classes,\n      t,\n      formValues\n    } = this.props;\n\n    return (\n      <Grid\n        container={true}\n        item={true}\n        direction='column'\n        justify='center'\n      >\n        <Grid container={true} justify='space-between' className={classes.avatarTitleContainer}>\n          <Typography variant='h6'>\n            {t('UserProfile.yourAvatar')}\n          </Typography>\n          {\n            (imageId || (formValues && formValues.get('dropzone'))) &&\n            <IconButton onClick={this.removePhoto} size='small'>\n              <DeleteIcon fontSize='small' />\n            </IconButton>\n          }\n        </Grid>\n        <Grid\n          className={classes.uploadPhoto}\n        >\n          <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n            component={FieldDropzone}\n            name='dropzone'\n            props={{ initialImage: imageId }}\n            validate={uploadFileValidation}\n          />\n        </Grid>\n      </Grid>\n    );\n  }\n\n  private removePhoto = (): void => {\n    const { dispatch, form } = this.props;\n    dispatch(new NoPhotoPreviewAction());\n    dispatch(change(form, 'imageId', ''));\n    dispatch(change(form, 'dropzone', ''));\n    this.setState({ imageId: '' });\n  }\n\n  private setOpen = (openSnackbar: boolean) => {\n    this.setState({ openSnackbar });\n  }\n\n  private handleSubmit = async (values: Map<string, any>) => {\n    const {\n      dispatch,\n      atsApi,\n      id,\n      isAtsSpecTool,\n      isUsingLoggedInAs,\n    } = this.props;\n\n    const editableKeys = ['officeId', 'jobTitle', 'firstName', 'lastName', 'email',\n      'officePhone', 'extension', 'mobilePhone', 'imageId',\n      ...((isAtsSpecTool && !isUsingLoggedInAs) ? ['consent'] : [])];\n\n    const imageArray = await Xhr({ atsApi, files: values.get('dropzone') });\n    const imageId = getIn(imageArray, [0, 'id'], '');\n    const submitValues = values.filter((value, key) => (\n      editableKeys.includes(key)\n    )).set('imageId', imageId ? imageId : values.get('imageId'));\n\n    dispatch(new UpdateUserByIdAction({ id, user: submitValues, refreshToken: true }));\n    dispatch(new FieldDropzoneStateResetAction());\n  }\n}\n\nconst mapStateToProps = (state, ownProps) => {\n  const identityObj = makeSelectIdentityObject()(state);\n  const id = makeSelectUserId()(state) || (identityObj && identityObj.get('uid', null));\n  return {\n    id,\n    ...createStructuredSelector({\n      initialValues: makeSelectUserById(),\n      formValues: getFormValues(USER_PROFILE_FORM),\n      userLoading: makeSelectUserLoading(),\n      usersLoading: makeSelectUsersLoading(),\n      userUpdateSucceeded: makeSelectUserUpdateSucceeded(),\n      isAtsSpecTool: makeSelectIsAtsSpecTool(),\n      isUsingLoggedInAs: makeSelectIsUsingLogInAs(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<IUserProfileComponentProps>>(\n  withAtsApi(),\n  withStyles(styles),\n  withTranslation(['translations']),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: USER_PROFILE_FORM }),\n  reduxForm({\n    form: USER_PROFILE_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true,\n    asyncValidate,\n    asyncBlurFields: ['email']\n  })\n)(UserProfile);","import * as React from 'react';\nimport { compose, Dispatch } from 'redux';\nimport {\n  Theme,\n  Grid,\n  Typography,\n  Button,\n  Paper,\n  Divider,\n  Snackbar,\n  CircularProgress\n} from '@material-ui/core';\nimport { StyleRules, withStyles, WithStyles } from '@material-ui/core/styles';\nimport { IAction } from 'ats-utils/src';\nimport { Map } from 'immutable';\nimport { InjectedFormProps, BaseFieldProps } from 'redux-form';\nimport { Field, reduxForm } from 'redux-form/immutable';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport Api from 'ats-api/src';\nimport { createStructuredSelector } from 'reselect';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\nimport { makeSelectSettingPassword, makeSelectSetPasswordSuccess } from '../../modules/AccountModule/selectors';\nimport {\n  required, isValidPassword\n} from '../../validators';\nimport i18next from 'i18next';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { SetPasswordAction, VerifyPasswordAction } from '../../modules/AccountModule/actions';\nimport withReduxFormValidationTranslation from '../../hoc/withReduxFormValidationTranslation';\nimport { preventUnhandledSubmitRejection } from '../../utils/reduxForm';\n\nexport const CHANGE_PASSWORD_FORM = 'ChangeUserPassword';\n\nexport const asyncValidate = (values, dispatch) => {\n  const password = values.get('password');\n\n  return new Promise<{ passwordCorrect: boolean }>((resolve, reject) => {\n    dispatch(new VerifyPasswordAction({\n      password,\n      resolve,\n      reject,\n    }));\n  }).then(\n    ({ passwordCorrect }) => {\n      if (!passwordCorrect) {\n        throw { password: i18next.t(['translations:ChangeUserPassword.incorrectPassword', 'Password entered is incorrect.']) };\n      }\n    },\n    () => {\n      // The verify request itself failed (e.g. the auth service returned 500). redux-form expects\n      // a field-error object from asyncValidate; rejecting with anything else leaves the user with\n      // no feedback and ends up as an unhandled promise rejection.\n      throw { password: i18next.t(['translations:ChangeUserPassword.verifyFailed', 'Unable to verify your current password. Please try again.']) };\n    }\n  );\n};\n\nconst newPasswordsMustMatch = (value: any, allValues: any) => {\n  const selecter = allValues.toJS();\n  const newPassword = selecter['newPassword'];\n  const confirmPassword = selecter['retype'];\n  return (newPassword === confirmPassword) ? undefined : i18next.t(['translations:errors.matchPassword', 'The new password and confirmation password do not match.']);\n};\n\nconst styles = (theme: Theme): StyleRules => ({\n  overallContainer: {\n    margin: theme.spacing(2),\n    maxWidth: '1800px',\n    minHeight: '650px',\n    position: 'relative'\n  },\n  sectionContainer: {\n    padding: theme.spacing(2),\n    maxWidth: '405px'\n  },\n  loading: {\n    position: 'absolute',\n    top: '50%',\n    transform: 'translateY(-50%)'\n  },\n  inputGroup: {\n    margin: theme.spacing(2, 0)\n  },\n  successIcon: {\n    color: theme.palette.success.main\n  },\n  failIcon: {\n    color: theme.palette.error.main\n  },\n  resultMessage: {\n    margin: theme.spacing(0, 1.5)\n  }\n});\n\ninterface IChangeUserPasswordComponentProps {\n}\n\ninterface IChangeUserPasswordProps extends IChangeUserPasswordComponentProps {\n  dispatch: Dispatch<IAction>;\n  atsApi: Api;\n  settingPassword: boolean;\n  setPasswordSuccess: boolean;\n}\n\ninterface IChangeUserPasswordState {\n  openSnackbar: boolean;\n}\n\ntype ChangeUserPasswordProps = IChangeUserPasswordProps & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ChangeUserPassword extends React.Component<ChangeUserPasswordProps, IChangeUserPasswordState> {\n  public state = {\n    openSnackbar: false\n  };\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const {\n      settingPassword\n    } = this.props;\n\n    if (!settingPassword && prevProps.settingPassword) {\n      this.setState({ openSnackbar: true });\n    }\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      handleSubmit,\n      settingPassword,\n      setPasswordSuccess\n    } = this.props;\n    const {\n      openSnackbar\n    } = this.state;\n\n    return (\n      <Paper\n        className={classes.overallContainer}\n      >\n        <Grid\n          className={classes.sectionContainer}\n        >\n          <Typography variant={'h5'}>\n            {t('ChangeUserPassword.title')}\n          </Typography>\n          <Typography variant={'caption'}>\n            {t('ChangeUserPassword.subtitle')}\n          </Typography>\n        </Grid>\n        <Divider />\n          <form\n            onSubmit={preventUnhandledSubmitRejection(handleSubmit(this.handleSubmit))}\n            className={classes.sectionContainer}\n          >\n            <Typography>\n              {t('ChangeUserPassword.description')}\n            </Typography>\n            <Grid\n              container={true}\n              direction='column'\n              wrap='nowrap'\n            >\n              <Grid\n                className={classes.inputGroup}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='password'\n                    props={{\n                      label: t('ChangeUserPassword.currentPassword'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      inputProps: {\n                        type: 'password'\n                      }\n                    }}\n                    validate={[\n                      required\n                    ]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='newPassword'\n                    props={{\n                      label: t('ChangeUserPassword.newPassword'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      inputProps: {\n                        type: 'password'\n                      }\n                    }}\n                    validate={[\n                      required,\n                      isValidPassword,\n                    ]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                    name='retype'\n                    props={{\n                      label: t('ChangeUserPassword.retype'),\n                      require: true,\n                      formControlProps: {\n                        fullWidth: true\n                      },\n                      inputProps: {\n                        type: 'password'\n                      }\n                    }}\n                    validate={[\n                      required,\n                      isValidPassword,\n                      newPasswordsMustMatch\n                    ]}\n                    component={FieldTextField}\n                  />\n                </Grid>\n              </Grid>\n\n              {/* Update */}\n              <Grid\n                container={true}\n                alignItems='center'\n                spacing={4}\n              >\n                <Grid\n                  item={true}\n                >\n                  <Button\n                    color='primary'\n                    type='submit'\n                    variant='contained'\n                    disabled={settingPassword}\n                  >\n                    {t('ChangeUserPassword.updateButton')}\n                  </Button>\n                </Grid>\n                {\n                  settingPassword\n                    && <Grid\n                        item={true}\n                      >\n                        <CircularProgress />\n                      </Grid>\n                }\n              </Grid>\n            </Grid>\n          </form>\n        <Snackbar\n          open={openSnackbar}\n          onClose={() => this.setOpen(false)}\n          transitionDuration={{\n            enter: 1500\n          }}\n          message={\n            <Grid\n              container={true}\n              justify='center'\n              wrap='nowrap'\n            >\n              {\n                setPasswordSuccess\n                  ? <CheckCircleIcon className={classes.successIcon} />\n                  : <CancelIcon className={classes.failIcon} />\n              }\n              <span className={classes.resultMessage}>\n                {\n                  setPasswordSuccess\n                    ? t('ChangeUserPassword.success')\n                    : t('ChangeUserPassword.fail')\n                }\n              </span>\n              <CloseIcon className={classes.closeIcon} onClick={() => this.setOpen(false)}/>\n            </Grid>\n          }\n        />\n      </Paper>\n    );\n  }\n\n  private handleSubmit = async (values: Map<string, any>) => {\n    const {\n      dispatch,\n      reset\n    } = this.props;\n\n    dispatch(new SetPasswordAction({\n      password: values.get('password'),\n      passwordNew: values.get('newPassword')\n    }));\n    reset();\n  }\n\n  private setOpen = (openSnackbar: boolean) => {\n    this.setState({ openSnackbar });\n  }\n}\n\nconst mapStateToProps = (state, ownProps) => createStructuredSelector({\n  settingPassword: makeSelectSettingPassword(),\n  setPasswordSuccess: makeSelectSetPasswordSuccess()\n})(state);\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nexport default compose<React.ComponentClass<IChangeUserPasswordComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withReduxFormValidationTranslation({ formName: CHANGE_PASSWORD_FORM }),\n  reduxForm({\n    asyncValidate,\n    asyncBlurFields: ['password'],\n    form: CHANGE_PASSWORD_FORM,\n    enableReinitialize: true,\n    destroyOnUnmount: true\n  })\n)(ChangeUserPassword);\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));","import React, { useState, useEffect } from 'react';\nimport {Button, CircularProgress, Dialog, DialogActions, Typography} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectSession} from '../../modules/ApplicationModule/selectors';\nimport {push} from 'connected-react-router';\nimport {APPLICATION_BASE_PATH, getLocalePrefix} from '../../constants';\nimport {GetSessionAction} from '../../modules/ApplicationModule/actions';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    dialog: {\n        padding: theme.spacing(3),\n        maxWidth: '648px'\n    },\n    warningIcon: {\n        color: theme.palette.warning.main,\n        fontSize: '32px',\n    },\n}));\nconst GuestSpecExpireModal = () => {\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const [open, setOpen] = useState(false);\n    const [expiredTimeout, setExpiredTimeout] = useState<any>(null);\n    const classes = useStyles();\n    const session = useSelector(makeSelectSession());\n    const expireTime = session?.get('expireTime');\n    const [isLoading, setIsLoading] = useState(false);\n    useEffect(() => {\n        if (expireTime) {\n            const currentTime = new Date().getTime();\n            const timeLeftInMilliseconds = expireTime - currentTime;\n            if (timeLeftInMilliseconds < 0) {\n                setOpen(true);\n            } else {\n                clearTimeout(expiredTimeout);\n                const newExpiredTimeout = setTimeout(() => {\n                    setOpen(true);\n                }, timeLeftInMilliseconds);\n                setExpiredTimeout(newExpiredTimeout);\n            }\n        } else {\n            clearTimeout(expiredTimeout);\n            setExpiredTimeout(null);\n            setOpen(false);\n        }\n        return () => {\n            if (expiredTimeout) {\n                clearTimeout(expiredTimeout);\n                setExpiredTimeout(null);\n            }\n        };\n    }, [expireTime]);\n\n    return (\n        <Dialog\n            open={open}\n            PaperProps={{\n                className: classes.dialog,\n            }}\n        >\n            <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '16px' }}>\n                <WarningIcon className={classes.warningIcon} />\n                <Typography variant='body2' color='textPrimary'>{t('GuestSpecExpireModal.title')}</Typography>\n            </div>\n            <div>\n                <Typography variant='body2'>{t('GuestSpecExpireModal.description1')}</Typography>\n            </div>\n            <DialogActions>\n                <Button\n                    disabled={isLoading}\n                    color='primary'\n                    onClick={() => {\n                        setIsLoading(true);\n                        dispatch(new GetSessionAction({\n                            forceRefresh: true,\n                            onSuccess: () => {\n                                setOpen(false);\n                                setIsLoading(false);\n                                window.location.href = window.location.origin + `${getLocalePrefix()}${APPLICATION_BASE_PATH}`;\n                            }\n                        }));\n                    }}\n                    endIcon={isLoading ? <CircularProgress size='16px' /> : null}\n                >{t('GuestSpecExpireModal.confirm')}</Button>\n            </DialogActions>\n        </Dialog>\n    );\n};\n\nexport default GuestSpecExpireModal;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4 13h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1zm0 8h6c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm10 0h6c.55 0 1-.45 1-1v-8c0-.55-.45-1-1-1h-6c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1zM13 4v4c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1h-6c-.55 0-1 .45-1 1z\"\n}), 'DashboardRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M14 9.5h3c.55 0 1-.45 1-1s-.45-1-1-1h-3c-.55 0-1 .45-1 1s.45 1 1 1zm0 7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3c-.55 0-1 .45-1 1s.45 1 1 1zm5 4.5H5c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v14c0 1.1-.9 2-2 2zM7 11h3c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1zm0-4h3v3H7V7zm0 11h3c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1zm0-4h3v3H7v-3z\"\n}), 'BallotRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92c-.5.51-.86.97-1.04 1.69-.08.32-.13.68-.13 1.14h-2v-.5c0-.46.08-.9.22-1.31.2-.58.53-1.1.95-1.52l1.24-1.26c.46-.44.68-1.1.55-1.8-.13-.72-.69-1.33-1.39-1.53-1.11-.31-2.14.32-2.47 1.27-.12.37-.43.65-.82.65h-.3C8.4 9 8 8.44 8.16 7.88c.43-1.47 1.68-2.59 3.23-2.83 1.52-.24 2.97.55 3.87 1.8 1.18 1.63.83 3.38-.19 4.4z\"\n}), 'HelpRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M4 11.5v4c0 .83.67 1.5 1.5 1.5S7 16.33 7 15.5v-4c0-.83-.67-1.5-1.5-1.5S4 10.67 4 11.5zm6 0v4c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5zM3.5 22h16c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5h-16c-.83 0-1.5.67-1.5 1.5S2.67 22 3.5 22zM16 11.5v4c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5zM10.57 1.49l-7.9 4.16c-.41.21-.67.64-.67 1.1C2 7.44 2.56 8 3.25 8h16.51C20.44 8 21 7.44 21 6.75c0-.46-.26-.89-.67-1.1l-7.9-4.16c-.58-.31-1.28-.31-1.86 0z\"\n}), 'AccountBalanceRounded');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15.73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z\"\n}), 'Report');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z\"\n}), 'Inbox');\n\nexports.default = _default;","import * as React from 'react';\nimport {\n  Typography,\n  Hidden,\n} from '@material-ui/core';\nimport {\n  Link\n} from 'react-router-dom';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Theme\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  WithTheme,\n} from '@material-ui/core/styles';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IConfig,\n  IMap,\n} from 'ats-utils/src/Interfaces';\n\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\nimport Image from '../../components/Image';\n\nimport portalGraphic from '../../images/login/ats_portal_graphic.svg';\nimport { createStructuredSelector } from 'reselect';\nimport classnames from 'classnames';\nimport { withRouter, RouteComponentProps, RouteProps } from 'react-router';\nimport { Map as ImmuMap } from 'immutable';\nimport { atsAppLogoLookUp } from '../../pages/AuthPages/LoginPage';\nimport { AOSMITH_SPEC_ID, FIAT_SPEC_ID, PRIER_SPEC_ID } from '../../constants';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\n\ninterface IPageSubmitPropsComponentProps {\n}\n\ninterface IPageSubmitProps extends IPageSubmitPropsComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  config: IMap<IConfig>;\n  site: string;\n  envLoaded: boolean;\n  locale: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(8),\n  },\n  logoItem: {\n    marginBottom: theme.spacing(4),\n  },\n  contentItem: {\n    padding: theme.spacing(4),\n  },\n  icon: {\n    minWidth: 0,\n    padding: theme.spacing(2),\n  },\n  fullHeight: {\n    height: '100%',\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  fiatPrierGreyBackground: {\n    backgroundColor: '#4B4B4E'\n  },\n  projectPad: {\n    backgroundColor: theme.palette.primary.main\n  },\n  title: {\n    fontSize: '.75rem',\n    marginBottom: theme.spacing(),\n    color: theme.palette.text.primary,\n  },\n  links: {\n    fontSize: 12,\n    color: '#0077AD',\n    display: 'flex',\n    paddingTop: theme.spacing(2)\n  },\n});\n\ninterface IProps extends RouteComponentProps<any> {\n  pageTitle: string;\n  pageContent: string;\n  linkTitle: string;\n  link: string;\n}\n\ntype PageSubmitType = WithTranslation & IPageSubmitProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & IProps & RouteProps & WithAtsApi & WithTheme;\nclass PageSubmit extends React.Component<PageSubmitType, {}> {\n\n  public render() {\n    const {\n      location,\n      classes,\n      config,\n      atsApi,\n      envLoaded,\n      theme,\n      locale,\n    } = this.props;\n\n    const logoPropsConfig = (config.get(`loginLogoProps${locale === 'fr' ? '_fr' : ''}`) || config.get('loginLogoProps') || config.get('logoProps') || ImmuMap<string, any>()).toJS();\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    const customPortalGraphic = config.getIn(['portalGraphicProps', 'src']);\n    const customPortalGraphicSize = config.getIn(['portalGraphicProps', 'size']) || 'cover';\n    const customPortalGraphicURL: string = customPortalGraphic && envLoaded ? atsApi.callApi(customPortalGraphic, {\n      service: 'image',\n      endpoint: 'getImageFile',\n      urlOnly: true,\n      suppressErrors: true\n    }) as string : '';\n    // prevent flicker at the beginning\n    const defaultPortalGraphic = envLoaded ? {\n      backgroundImage: `url(${portalGraphic})`,\n      backgroundColor: theme.palette.secondary[800],\n    } : {};\n\n    const defaultProps = {\n      className: classnames(classes.fullHeight, classes.fullWidth),\n      style: customPortalGraphic ? {\n        backgroundImage: `url(${customPortalGraphicURL})`,\n        backgroundSize: customPortalGraphicSize,\n        backgroundPosition: 'center',\n      } : defaultPortalGraphic\n    };\n\n    const propsMap = new Map([\n      [AOSMITH_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n        ),\n        style: {\n          backgroundColor: theme.palette.primary.main\n        }\n      }],\n      [FIAT_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n            classes.fiatPrierGreyBackground,\n        ),\n        style: customPortalGraphic ? {\n          backgroundImage: `url(${customPortalGraphicURL})`,\n          backgroundSize: customPortalGraphicSize,\n          backgroundPosition: 'center',\n        } : defaultPortalGraphic\n      }],\n      [PRIER_SPEC_ID, {\n        className: classnames(\n            classes.fullHeight,\n            classes.fullWidth,\n            classes.fiatPrierGreyBackground,\n        ),\n        style: customPortalGraphic ? {\n          backgroundImage: `url(${customPortalGraphicURL})`,\n          backgroundSize: customPortalGraphicSize,\n          backgroundPosition: 'center',\n        } : defaultPortalGraphic\n      }]\n    ]);\n\n  return (\n      <Grid\n        classes={{\n          container: classes.fullHeight\n        }}\n        container={true}\n      >\n        <Hidden\n          smDown={true}\n        >\n          <Grid\n            md={3}\n            xs='auto'\n            container={true}\n            item={true}\n          >\n          <div {...propsMap.get(apiKey) ?? defaultProps} />\n          </Grid>\n        </Hidden>\n        <Grid\n          classes={{\n            container: classes.container\n          }}\n          md={9}\n          xs={12}\n          container={true}\n          item={true}\n        >\n          <Grid\n            item={true}\n            container={true}\n            alignItems='center'\n            direction='column'\n            wrap='nowrap'\n          >\n            <Grid\n              container={true}\n              item={true}\n              classes={{\n                item: classes.logoItem\n              }}\n            >\n              <div>\n                <Image\n                  src={atsAppLogoLookUp[apiKey]?.logo || ''}\n                  width={atsAppLogoLookUp[apiKey]?.width || '230px'}\n                  aspectRatio='31.76%'\n                  backgroundStyle={atsAppLogoLookUp[apiKey]?.backgroundStyle}\n                  {...logoPropsConfig}\n                />\n              </div>\n            </Grid>\n            <Grid\n              classes={{\n                item: classes.contentItem\n              }}\n              direction='column'\n              wrap='nowrap'\n              container={true}\n              item={true}\n              spacing={4}\n            >\n              <Grid\n                container={true}\n                direction='column'\n                item={true}\n                spacing={4}\n              >\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='h4'\n                  >\n                    {(location.state as any)?.state?.pageTitle}\n                  </Typography>\n                </Grid>\n                <Grid\n                  item={true}\n                >\n                  <Typography\n                    variant='body2'\n                  >\n                    {(location.state as any)?.state?.pageContent}\n                  </Typography>\n                </Grid>\n                <Grid\n                  item={true}\n                  container={true}\n                  direction='column'\n                >\n                  <Link\n                        className={classes.links}\n                        to={(location.state as any)?.state?.link || ''}\n                      >\n                      {(location.state as any)?.state?.linkTitle}\n                  </Link>\n                </Grid>\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  config: makeSelectConfig(),\n  envLoaded: makeSelectAtsApiState('envLoaded'),\n  locale: makeSelectLocale(),\n});\n\nexport default compose<React.ComponentClass<IPageSubmitPropsComponentProps>> (\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAtsApi(),\n  connect(mapStateToProps),\n  withRouter,\n)(PageSubmit);","import * as React from 'react';\nimport {\n  Typography,\n  Hidden,\n  Tooltip,\n} from '@material-ui/core';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  InjectedFormProps,\n  BaseFieldProps,\n} from 'redux-form';\nimport {\n  Grid,\n  withStyles,\n  WithStyles,\n  Button,\n  Theme\n} from '@material-ui/core';\nimport {\n  StyleRules,\n  WithTheme,\n} from '@material-ui/core/styles';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../../components/FieldTextField';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\n\nimport {\n  required,\n  isValidPassword,\n  passwordsMustMatch\n} from '../../validators';\nimport {\n  IAction, IMap, IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Map,\n  getIn,\n} from 'immutable';\nimport {\n  FIAT_SPEC_ID,\n  LOGIN_PATH,\n  PRIER_SPEC_ID,\n} from '../../constants';\nimport {\n  RouteComponentProps,\n} from 'react-router-dom';\nimport { UserResetPasswordAction, UserResetPasswordSucceededAction } from '../../modules/AtsModule/actions';\n\nimport { makeSelectConfig, makeSelectSite, makeSelectError, makeSelectResetPasswordStatus } from '../../modules/AtsModule/selectors';\nimport Image from '../../components/Image';\n\nimport portalGraphic from '../../images/login/ats_portal_graphic.svg';\nimport { createStructuredSelector } from 'reselect';\nimport classnames from 'classnames';\nimport { push } from 'connected-react-router';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffRoundedIcon from '@material-ui/icons/VisibilityOffRounded';\nimport VpnKeyRoundedIcon from '@material-ui/icons/VpnKeyRounded';\nimport { atsAppLogoLookUp } from '../../pages/AuthPages/LoginPage';\nimport { withAtsApi } from '../../contexts';\nimport { WithAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectAtsApiState } from '../../modules/ApplicationModule/selectors';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\n\ninterface IResetPasswordPropsComponentProps {\n}\n\ninterface IResetPasswordProps extends IResetPasswordPropsComponentProps {\n  dispatch: React.Dispatch<IAction>;\n  config: IMap<IConfig>;\n  site: string;\n  onSubmit: () => any;\n  formValues: Map<string, any>;\n  submitValues: (values: string) => void;\n  resetPasswordStatus: boolean;\n  toLogin: () => void;\n  envLoaded: boolean;\n  locale: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: theme.spacing(8),\n  },\n  logoItem: {\n    marginBottom: theme.spacing(4),\n  },\n  contentItem: {\n    padding: theme.spacing(4),\n  },\n  fullHeight: {\n    height: '100%',\n    overflow: 'auto'\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  fiatPrierGreyBackground: {\n    backgroundColor: '#4B4B4E'\n  },\n  icon: {\n    minWidth: 0,\n    padding: theme.spacing(1),\n  },\n  error: {\n    fontSize: 12,\n    display: 'flex',\n    justifyContent: 'center',\n    color: '#f00',\n    wordWrap: 'break-word' as 'break-word'\n  },\n  title: {\n    fontSize: '.75rem',\n    marginBottom: theme.spacing(),\n    color: theme.palette.text.primary,\n  },\n});\n\ninterface IState {\n  passwordTypeEnabled: boolean;\n  hideConfirmPassword: boolean;\n}\nexport const FORM_NAME = '__resetPassword_form__';\n\ntype ResetPasswordType = WithTranslation & IResetPasswordProps & InjectedFormProps & WithStyles<keyof ReturnType<typeof styles>> & WithTheme & WithAtsApi;\nclass ResetPassword extends React.Component<ResetPasswordType, IState> {\n  public state = {\n    passwordTypeEnabled: true,\n    hideConfirmPassword: true,\n  };\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new UserResetPasswordSucceededAction(false));\n  }\n\n  public onSubmit = (values) => {\n    const {\n      submitValues,\n    } = this.props;\n\n    submitValues(values);\n  }\n\n  public togglePasswordVisible = () => {\n    const { passwordTypeEnabled } = this.state;\n    this.setState({\n      passwordTypeEnabled: !passwordTypeEnabled,\n    });\n  }\n  public toggleConfirmPasswordVisible = () => {\n    const { hideConfirmPassword } = this.state;\n    this.setState({\n      hideConfirmPassword: !hideConfirmPassword,\n    });\n  }\n\n  public render() {\n    const {\n      passwordTypeEnabled,\n      hideConfirmPassword,\n    } = this.state;\n    const {\n      handleSubmit,\n      t,\n      error,\n      classes,\n      config,\n      resetPasswordStatus,\n      toLogin,\n      atsApi,\n      envLoaded,\n      theme,\n      locale,\n    } = this.props;\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    const logoPropsConfig = (config.get(`loginLogoProps${locale === 'fr' ? '_fr' : ''}`) || config.get('loginLogoProps') || config.get('logoProps') || Map<string, any>()).toJS();\n\n    const isFIATOrPRIERSpecSite = apiKey === FIAT_SPEC_ID || apiKey === PRIER_SPEC_ID;\n\n    const customPortalGraphic = config.getIn(['portalGraphicProps', 'src']);\n    const customPortalGraphicSize = config.getIn(['portalGraphicProps', 'size']) || 'cover';\n    const customPortalGraphicURL: string = customPortalGraphic && envLoaded ? atsApi.callApi(customPortalGraphic, {\n      service: 'image',\n      endpoint: 'getImageFile',\n      urlOnly: true,\n      suppressErrors: true\n    }) as string : '';\n    // prevent flicker at the beginning\n    const defaultPortalGraphic = envLoaded ? {\n      backgroundImage: `url(${portalGraphic})`,\n      backgroundColor: theme.palette.secondary[800],\n    } : {};\n\n    return (\n      <form\n        className={classes.fullHeight}\n        onSubmit={handleSubmit(this.onSubmit)}\n      >\n        <Grid\n          classes={{\n            container: classes.fullHeight\n          }}\n          container={true}\n        >\n          <Hidden\n            smDown={true}\n          >\n            <Grid\n              md={3}\n              xs='auto'\n              container={true}\n              item={true}\n            >\n              <div\n                className={\n                  classnames(\n                    classes.fullHeight,\n                    classes.fullWidth,\n                    {\n                      [classes.fiatPrierGreyBackground]: isFIATOrPRIERSpecSite\n                    }\n                  )\n                }\n                style={customPortalGraphic ? {\n                  backgroundImage: `url(${customPortalGraphicURL})`,\n                  backgroundSize: customPortalGraphicSize,\n                  backgroundPosition: 'center',\n                } : defaultPortalGraphic}\n              />\n            </Grid>\n          </Hidden>\n          <Grid\n            classes={{\n              container: classes.container\n            }}\n            md={9}\n            xs={12}\n            container={true}\n            item={true}\n          >\n            <Grid\n              item={true}\n              container={true}\n              alignItems='center'\n              direction='column'\n              wrap='nowrap'\n            >\n              <Grid\n                container={true}\n                item={true}\n                classes={{\n                  item: classes.logoItem\n                }}\n              >\n                <div>\n                  <Image\n                    src={atsAppLogoLookUp[apiKey]?.logo || ''}\n                    width={atsAppLogoLookUp[apiKey]?.width || '230px'}\n                    aspectRatio='31.76%'\n                    backgroundStyle={atsAppLogoLookUp[apiKey]?.backgroundStyle}\n                    {...logoPropsConfig}\n                  />\n                </div>\n              </Grid>\n              <Grid\n                classes={{\n                  item: classes.contentItem\n                }}\n                direction='column'\n                wrap='nowrap'\n                container={true}\n                item={true}\n                spacing={4}\n              >\n                {\n                  resetPasswordStatus\n                    ? <Grid\n                        container={true}\n                        item={true}\n                        spacing={4}\n                        direction='column'\n                      >\n                        <Grid\n                          item={true}\n                        >\n                          <Typography\n                            variant='h4'\n                          >\n                            Password reset successfully\n                          </Typography>\n                        </Grid>\n                        <Grid\n                          item={true}\n                        >\n                          <Typography\n                            variant='body2'\n                          >\n                            Your password has been reset. You can now log in using your new password.\n                          </Typography>\n                        </Grid>\n                        <Grid\n                          item={true}\n                        >\n                          <Button\n                            color='primary'\n                            style={{textTransform: 'uppercase'}}\n                            onClick={toLogin}\n                          >\n                            log in\n                          </Button>\n                        </Grid>\n                      </Grid>\n                    : <Grid\n                        container={true}\n                        item={true}\n                        spacing={4}\n                        direction='column'\n                      >\n                        <Grid\n                          item={true}\n                        >\n                          <Typography\n                            variant='h4'\n                          >\n                            Reset your password\n                          </Typography>\n                        </Grid>\n                        <Grid\n                          item={true}\n                        >\n                          <Typography\n                            variant='body2'\n                          >\n                            Valid passwords more than 9 characters long and should contain at least 1 letter and number.\n                          </Typography>\n                        </Grid>\n                        <Grid\n                          container={true}\n                          item={true}\n                        >\n                          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='password'\n                            props={{\n                              label: 'Password:',\n                              formControlProps: {\n                                fullWidth: true,\n                              },\n                              inputProps: {\n                                type: passwordTypeEnabled ? 'password' : 'text',\n                                InputProps: {\n                                  endAdornment: (\n                                    <Tooltip\n                                      title={t('toggle.password')}\n                                      placement='top'\n                                    >\n                                      <Button\n                                        className={classes.icon}\n                                        onClick={this.togglePasswordVisible}\n                                      >\n                                        {\n                                          passwordTypeEnabled === true ?\n                                            <VisibilityIcon /> : <VisibilityOffRoundedIcon />\n                                        }\n                                      </Button>\n                                    </Tooltip>\n                                  )\n                                }\n                              },\n                            }}\n                            validate={[\n                              required,\n                              isValidPassword,\n                            ]}\n                            component={FieldTextField}\n                          />\n                        </Grid>\n                        <Grid\n                          container={true}\n                          item={true}\n                        >\n                          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n                            name='confirmPassword'\n                            props={{\n                              label: 'Confirm Password:',\n                              formControlProps: {\n                                fullWidth: true,\n                              },\n                              inputProps: {\n                                type: hideConfirmPassword ? 'password' : 'text',\n                                InputProps: {\n                                  endAdornment: (\n                                    <Tooltip\n                                      title={t('toggle.password')}\n                                      placement='top'\n                                    >\n                                      <Button\n                                        className={classes.icon}\n                                        onClick={this.toggleConfirmPasswordVisible}\n                                      >\n                                        {\n                                          hideConfirmPassword === true ?\n                                            <VisibilityIcon /> : <VisibilityOffRoundedIcon />\n                                        }\n                                      </Button>\n                                    </Tooltip>\n                                  )\n                                }\n                              },\n                            }}\n                            validate={[\n                              required,\n                              passwordsMustMatch,\n                            ]}\n                            component={FieldTextField}\n                          />\n                        </Grid>\n                        <Grid\n                          container={true}\n                          item={true}\n                        />\n                        <Grid\n                          container={true}\n                          item={true}\n                        >\n                          {\n                            error\n                            ? <div\n                                className={classes.error}\n                              >\n                                Please try again.\n                              </div>\n                            : ''\n                          }\n                        </Grid>\n                        <Grid\n                          item={true}\n                        >\n                          <Button\n                            type='submit'\n                            variant='contained'\n                            color='primary'\n                          >\n                            Save\n                          </Button>\n                        </Grid>\n                      </Grid>\n                }\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n      </form>\n    );\n  }\n}\n\nexport type ComponentProps = {\n  email?: string;\n  key?: string;\n} & Partial<RouteComponentProps>;\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, props: ComponentProps) => {\n  const {\n    match,\n  } = props;\n  return {\n    dispatch,\n    submitValues: (values: any) => {\n  const key = getIn(match, ['params', 'key'], undefined); // from path / router\n      const { password } = values.toJS();\n      dispatch(new UserResetPasswordAction({password,key}));\n    },\n    toLogin: () => {\n      dispatch(push(LOGIN_PATH));\n    }\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  config: makeSelectConfig(),\n  site: makeSelectSite(),\n  error: makeSelectError(),\n  resetPasswordStatus: makeSelectResetPasswordStatus(),\n  envLoaded: makeSelectAtsApiState('envLoaded'),\n  locale: makeSelectLocale(),\n});\n\nexport default compose<React.ComponentClass<IResetPasswordPropsComponentProps>> (\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  withAtsApi(),\n  reduxForm({\n    form: FORM_NAME,\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ResetPassword);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)(_react.default.createElement(\"path\", {\n  d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'ReportProblem');\n\nexports.default = _default;","import Lodable from '@loadable/component';\n\nexport default Lodable(() => import('./Component'));\n","export default __webpack_public_path__ + \"static/media/ATS_full_logo.14cca6af.svg\";","import {\n  fromJS,\n  Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DashboardActionTypes,\n  DashboardDeleteWidgetAction,\n  DashboardLoadedAction,\n  DashboardUpdateLayoutAction,\n  DashboardWidgetCreatedAction,\n  SetIsFetchingWidgetDataByWidgetIdAction,\n  SetAllowBatchWidgetsDataFetchAction,\n  WidgetAdminsLoadedAction,\n  WidgetDataUpdatedAction,\n  WidgetLayoutUpdated,\n  WidgetLoadedOnceAction,\n} from './actions';\nimport { AtsActionTypes, } from '../AtsModule/actions';\nimport {\n  Dashboard,\n  WidgetAdmin\n} from '../../models';\n\nexport interface IDashboardReducerState {\n  dashboard: IMap<Dashboard>;\n  widgets: Map<number, any>;\n  widgetAdmins: IMap<Record<number, WidgetAdmin>>;\n  allowBatchedWidgetsDataFetch: boolean;\n}\n\n\nconst INITIAL_STATE = fromJS({\n  dashboard: {},\n  widgets: {},\n  widgetAdmins: {}, // widget template data for creation of new widget\n  allowBatchedWidgetsDataFetch: false,\n});\n\nexport const reducer = (state: IMapNonRecursive<IDashboardReducerState> = INITIAL_STATE, action: IAction): IMapNonRecursive<IDashboardReducerState> => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case DashboardActionTypes.DASHBOARD_LOADED: {\n      const {\n        payload,\n      } = action as DashboardLoadedAction;\n      const {\n        dashboard,\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        // convert widgets array to a widgets map\n        const newDashboard = dashboard.withMutations((dashboardContext) => {\n          const widgetsMap = dashboard.getIn(['config', 'widgets']).reduce((acc, widget) => {\n            return acc.set(widget.get('i'), widget);\n          }, fromJS({}));\n          dashboardContext.setIn(['config', 'widgets'], widgetsMap);\n        });\n        ctx.set('dashboard', newDashboard);\n      });\n    }\n    case DashboardActionTypes.WIDGET_ADMINS_LOADED: {\n      const {\n        payload,\n      } = action as WidgetAdminsLoadedAction;\n      const {\n        widgetAdmins,\n      } = payload;\n      return state.withMutations((ctx) => {\n        const widgetAdminImmutableLookup: IMap<Record<number, WidgetAdmin>> =\n          fromJS({})\n            .withMutations((lookup) => {\n              widgetAdmins.forEach((admin: IMap<WidgetAdmin>) => {\n                lookup.set(admin.get('id'), admin);\n              });\n            });\n        ctx.set('widgetAdmins', widgetAdminImmutableLookup);\n      });\n    }\n    case DashboardActionTypes.DASHBOARD_UPDATE_LAYOUT: {\n      const {\n        payload,\n      } = action as DashboardUpdateLayoutAction;\n      const {\n        layout,\n      } = payload;\n      return state.withMutations((ctx) => {\n        const layoutImmutableLookup = layout.reduce((acc, layoutItem) => {\n          return acc.set(layoutItem.get('i'), layoutItem);\n        }, fromJS({}));\n\n        ctx.updateIn(\n          ['dashboard', 'config', 'widgets'],\n          (widgets) => widgets.mergeDeep(layoutImmutableLookup)\n        );\n      });\n    }\n    case DashboardActionTypes.DASHBOARD_WIDGET_CREATED: {\n      const {\n        payload,\n      } = action as DashboardWidgetCreatedAction;\n      const {\n        key,\n        widget,\n      } = payload;\n      return state.updateIn(\n        ['dashboard', 'config', 'widgets'],\n        (widgets) => widgets.withMutations((ctx) => {\n          const userWidgetId = widget.get('userWidgetId');\n          const updatedWidget = widgets.get(key).mergeDeep(widget).delete('createNewWidgetParams');\n\n          if (key !== userWidgetId) {\n            ctx.delete(key);\n          }\n          ctx.set(userWidgetId, updatedWidget);\n        })\n      );\n    }\n    case DashboardActionTypes.DASHBOARD_DELETE_WIDGET: {\n      const {\n        payload,\n      } = action as DashboardDeleteWidgetAction;\n\n      const {\n        key,\n      } = payload;\n\n      return state.deleteIn(\n        ['dashboard', 'config', 'widgets', key]\n      );\n    }\n\n    case DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED:\n    case DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED_LOCAL: {\n      const {\n        payload,\n      } = action as WidgetLayoutUpdated;\n\n      const {\n        userWidgetId,\n        widgetLayoutData,\n      } = payload;\n      // we check for null instead of falsey so we can set the value to false, in order to check whether the api call has been sent or not. Null -> initial state, False -> api call sent, anything else -> data\n      return state.updateIn(['widgets', userWidgetId, 'widgetLayoutData'], (data) => {\n        return widgetLayoutData != null\n          ? widgetLayoutData\n          : (data || Map());\n      });\n    }\n    case DashboardActionTypes.WIDGET_DATA_UPDATED: {\n      const {\n        payload,\n      } = action as WidgetDataUpdatedAction;\n\n      const {\n        userWidgetId,\n        count,\n        hasNextPage,\n        widgetData,\n      } = payload;\n\n      return state.withMutations(mutable => {\n        mutable\n          .setIn(['widgets', userWidgetId, 'count'], count)\n          .setIn(['widgets', userWidgetId, 'hasNextPage'], hasNextPage)\n          .updateIn(['widgets', userWidgetId, 'widgetData'], (data) => widgetData != null ? widgetData : (data || Map()));\n      });\n    }\n    case DashboardActionTypes.WIDGET_LOADED_ONCE: {\n      const {\n        payload,\n      } = action as WidgetLoadedOnceAction;\n\n      const {\n        userWidgetId\n      } = payload;\n      return state.setIn(['widgets', userWidgetId, 'widgetLoadedOnce'], true);\n    }\n    case DashboardActionTypes.SET_IS_FETCHING_WIDGET_DATA_BY_WIDGET_ID: {\n      const {\n        payload,\n      } = action as SetIsFetchingWidgetDataByWidgetIdAction;\n\n      const {\n        userWidgetId,\n        isFetching\n      } = payload;\n      return state.setIn(['widgets', userWidgetId, 'isFetchingWidgetData'], isFetching);\n    }\n    case DashboardActionTypes.SET_ALLOW_BATCH_WIDGETS_DATA_FETCH: {\n      const {\n        payload: allow\n      } = action as SetAllowBatchWidgetsDataFetchAction;\n      return state.set('allowBatchedWidgetsDataFetch', allow);\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import {\n  apiCallWaitingAction,\n  taggedDelay\n} from '../../AtsModule/saga';\nimport { makeSelectDashboard } from '../selectors';\nimport { IMap } from 'ats-utils/src';\nimport {\n  IDashboardWidgetConfig,\n  Widget\n} from '../../../models';\nimport { call, all, select, spawn, put } from 'redux-saga/effects';\nimport { DashboardWidgetCreatedAction } from '../actions';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { fromJS } from 'immutable';\n\nexport default function * createWidgetIfRequired(action) {\n  yield call(taggedDelay, 103);\n  const dashboard = yield select(makeSelectDashboard());\n\n  yield all(\n    dashboard.getIn(['config', 'widgets'])\n      .filter((widget) => widget.get('userWidgetId') == null && widget.get('createNewWidgetParams') != null)\n      .map((widget: IMap<IDashboardWidgetConfig>) => spawn(createWidget, action, widget))\n      .valueSeq()\n      .toArray()\n  );\n}\n\nfunction * createWidget(action, widget: IMap<IDashboardWidgetConfig>) {\n  try {\n    const widgetCreated = yield call(widgetCreateCall, widget.get('createNewWidgetParams'));\n    const userWidgetId = `${widgetCreated.id}`;\n\n    // we need userWidgetId as a string\n    // replace widget to be created with created widget\n    yield put(new DashboardWidgetCreatedAction({\n      key: widget.get('i'),\n      widget: fromJS({\n        ...widget.toJS(),\n        userWidgetId,\n        i: userWidgetId,\n      }),\n    }));\n  } catch (err) {\n    console.error('FIX CREATE WIDGET API!!!', err); // tslint:disable-line\n  }\n}\n\nexport function * widgetCreateCall(createNewWidgetParams: IMap<Partial<Widget>>) {\n  const hasTitle = createNewWidgetParams?.getIn(['config', 'title']);\n  const updatedWidgetConfig = hasTitle ? createNewWidgetParams.setIn(['config', 'title'], '') : createNewWidgetParams;\n  const { data, err } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      {\n        service: 'dashboard',\n        endpoint: 'addWidget',\n        body: updatedWidgetConfig.toJS(),\n      },\n    ],\n  }));\n  if (err) {\n    throw err;\n  }\n  return data.payload.dashboard.widget;\n}\n","import {\n  SetIsFetchingWidgetDataByWidgetIdAction,\n  WidgetDataUpdateByUserWidgetIdAction,\n  WidgetDataUpdatedAction\n} from '../actions';\nimport { fromJS } from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport { WidgetData } from '../../../models';\nimport { call, put, select } from 'redux-saga/effects';\nimport { apiCallWaitingAction } from '../../AtsModule/saga';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { AddErrorAction } from '../../ErrorModule/actions';\nimport { makeSelectAmplitudeData } from '../../AtsModule/selectors';\nimport { AMPLITUDE_EVENT, TIME_OUT_LIMIT } from '../../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\n\nexport default function * fetchWidgetDataWithOptions({payload}: WidgetDataUpdateByUserWidgetIdAction) {\n  const {\n    userWidgetId,\n    options\n  } = payload;\n\n  yield put(new SetIsFetchingWidgetDataByWidgetIdAction({userWidgetId, isFetching: true}));\n  const {data, err} = yield call(fetchWidgetDataCall, userWidgetId, options);\n  if (!err) {\n    const immutableResponse = fromJS(data);\n    const widget: IMap<WidgetData> = immutableResponse.getIn(['payload', 'dashboard']);\n    const widgetData: IMap<WidgetData> = widget.get('data');\n    const count: number = widget.get('count');\n    const hasNextPage: boolean = widget.get('hasNextPage');\n\n    yield put(new WidgetDataUpdatedAction({userWidgetId, count, hasNextPage, widgetData}));\n  } else {\n    yield put(new WidgetDataUpdatedAction({userWidgetId, widgetData: undefined}));\n  }\n  yield put(new SetIsFetchingWidgetDataByWidgetIdAction({userWidgetId, isFetching: false}));\n}\n\n\nfunction * fetchWidgetDataCall(userWidgetId, options = {\n  limit: 4,\n  offset: 0\n}) {\n  const start = Date.now();\n  const apiResp = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      userWidgetId,\n      {\n        service: 'dashboard',\n        endpoint: 'getWidgetData',\n        body: {\n          options\n        },\n        withTimezoneOffset: true,\n        withTimezone: true,\n      },\n    ],\n  }));\n  const end = Date.now();\n  const requestResultTime = end - start;\n\n  const data = apiResp.data;\n  const err = apiResp.err;\n\n  if (err) {\n    yield put(new AddErrorAction({\n      message: 'widget data fetch error',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err\n      }\n    }));\n  }\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (requestResultTime > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const widgetName = data?.payload?.dashboard?.widgetName || null;\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.dashboardWidgetDataFetch, {\n    widgetName,\n    errorCode,\n    errorMessage,\n    render,\n    requestResultTime,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData\n  });\n\n  return apiResp;\n}\n","import { taggedDelay } from '../../AtsModule/saga';\nimport {\n  makeSelectDashboard,\n  makeSelectWidgets\n} from '../selectors';\nimport {\n  SetIsFetchingWidgetDataByWidgetIdAction,\n  WidgetDataUpdateByUserWidgetIdAction,\n  WidgetDataUpdatedAction\n} from '../actions';\nimport fetchWidgetDataWithOptions from './fetchWidgetDataWithOptions';\nimport { select, call, put } from 'redux-saga/effects';\n\nexport default function * fetchWidgetData({userWidgetId, force = false, delay = 0}) {\n  yield put(new SetIsFetchingWidgetDataByWidgetIdAction({userWidgetId, isFetching: true}));\n  yield call(taggedDelay, delay);\n  const widgetsData = yield select(makeSelectWidgets());\n\n  if (force || widgetsData.getIn([userWidgetId, 'widgetData']) == null) {\n\n    // force is used for forced data reload (as opposed to natural, initial data load)\n    // setting widgetData to false will let the app know the data is loading, but hasn't returned yet (different from null - which means it hasn't started loading yet)\n    // DASHBOARD-88 we should clear the old data so that the loading wheel shows up again for forced data fetches (i.e. settings edited)\n    // if (!force) {\n    //   yield put(widgetDataUpdated({userWidgetId, widgetData: false}));\n    // }\n\n    yield put(new WidgetDataUpdatedAction({userWidgetId, widgetData: false}));\n    yield put(new SetIsFetchingWidgetDataByWidgetIdAction({userWidgetId, isFetching: false}));\n\n    if (userWidgetId != null) {\n      const dashboard = yield select(makeSelectDashboard());\n      const height = dashboard.getIn(['config', 'widgets', userWidgetId, 'h'], 1);\n      const adjustedRow = Math.min((height - 1) * 4, 15);\n      const options = {\n        limit: adjustedRow,\n        offset: 0\n      };\n\n      const payload = {\n        userWidgetId,\n        options\n      };\n\n      yield call(fetchWidgetDataWithOptions, {payload} as WidgetDataUpdateByUserWidgetIdAction);\n    }\n  }\n}\n","import { taggedDelay } from '../../AtsModule/saga';\nimport {\n  makeSelectDashboard,\n} from '../selectors';\nimport { select, call, spawn, all } from 'redux-saga/effects';\nimport fetchWidgetData from './fetchWidgetData';\n\nexport default function * fetchWidgetsData() {\n  yield call(taggedDelay, 102);\n\n  const activeDashboard = yield select(makeSelectDashboard());\n\n  const dashboardWidgets = activeDashboard.getIn(['config', 'widgets']);\n\n  // get all widgets that have userWidgetId\n  const fetchWidgetDataActions = dashboardWidgets.map((widget) => {\n    const userWidgetId = widget.get('userWidgetId');\n    const delay = widget.get('y', 0) * 250 + 6;\n\n    return spawn(fetchWidgetData, {userWidgetId, force: true, delay});\n  }).valueSeq().toArray();\n  yield all(fetchWidgetDataActions);\n}\n","import { apiCallWaitingAction } from '../../AtsModule/saga';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { AddErrorAction } from '../../ErrorModule/actions';\nimport { makeSelectWidgets } from '../selectors';\nimport { WidgetLayoutDataUpdatedAction } from '../actions';\nimport { WidgetLayoutData } from '../../../models';\nimport { call, put, select } from 'redux-saga/effects';\n\n\nexport default function * fetchWidgetLayoutData({ widget }) {\n  const userWidgetId = widget.get('userWidgetId');\n  const widgetData = yield select(makeSelectWidgets());\n\n  if (widgetData.getIn([userWidgetId, 'widgetLayoutData']) == null) {\n\n    // set loading status\n    yield put(new WidgetLayoutDataUpdatedAction({ userWidgetId, widgetLayoutData: false }));\n    if (userWidgetId != null) {\n      const {data, err} = yield call(fetchWidgetLayoutDataCall, userWidgetId);\n\n      if (!err) {\n        const widgetLayoutData = new WidgetLayoutData({\n          ...data.payload.dashboard.widget,\n          config: {\n            ...data.payload.dashboard.widget.config,\n          }\n        }).toImmutable();\n\n        yield put(new WidgetLayoutDataUpdatedAction({ userWidgetId, widgetLayoutData }));\n      } else {\n        yield put(new WidgetLayoutDataUpdatedAction({ userWidgetId, widgetLayoutData: undefined }));\n      }\n    }\n  }\n}\nexport function * fetchWidgetLayoutDataCall(userWidgetId) {\n  const apiResp = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      userWidgetId,\n      {\n        service: 'dashboard',\n        endpoint: 'getWidget',\n      },\n    ],\n  }));\n  const err = apiResp.err;\n\n  if (err) {\n    yield put(new AddErrorAction({\n      message: 'widget layout fetch error',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err\n      }\n    }));\n  }\n  return apiResp;\n}\n","import { taggedDelay } from '../../AtsModule/saga';\nimport {\n  makeSelectDashboard,\n  makeSelectWidgets\n} from '../selectors';\nimport { select, call, spawn, all } from 'redux-saga/effects';\nimport fetchWidgetData from './fetchWidgetData';\nimport fetchWidgetLayoutData from './fetchWidgetLayoutData';\n\nexport default function * fetchWidgetDataIfRequired() {\n  yield call(taggedDelay, 102);\n\n  const activeDashboard = yield select(makeSelectDashboard());\n  const widgetData = yield select(makeSelectWidgets());\n\n  const dashboardWidgets = activeDashboard.getIn(['config', 'widgets']);\n  // get all widgets that have userWidgetId but no widgetLayoutData\n\n  // NOTE: if you do not do valueSeq(), it will still work but it will throw a warning about\n  // > [...effects] has been deprecated in favor of all([...effects]), please update your code\n\n  // fetch widget layout data before fetch widget data if widget layout data is missing\n  const fetchWidgetLayoutDataActions = dashboardWidgets.filter((widget) => {\n    const userWidgetId = widget.get('userWidgetId');\n\n    return userWidgetId != null &&\n      widgetData.getIn([userWidgetId, 'widgetLayoutData']) == null;\n  }).map((widget) => {\n    return spawn(fetchWidgetLayoutData, { widget });\n  }).valueSeq().toArray();\n\n  yield all(fetchWidgetLayoutDataActions);\n\n  // get all widgets that have userWidgetId but no widgetData\n  const fetchWidgetDataActions = dashboardWidgets.filter((widget) => {\n    const userWidgetId = widget.get('userWidgetId');\n\n    return userWidgetId != null &&\n      widgetData.getIn([userWidgetId, 'widgetData']) == null;\n  }).map((widget) => {\n    const userWidgetId = widget.get('userWidgetId');\n    const delay = widget.get('y', 0) * 250 + 6;\n\n    return spawn(fetchWidgetData, {userWidgetId, delay});\n  }).valueSeq().toArray();\n  yield all(fetchWidgetDataActions);\n}\n","import { all, call, select, put } from 'redux-saga/effects';\nimport { makeSelectAppId, makeSelectIsAutoquote, makeSelectIsRestrictedOutsideSalesRep, makeSelectSite } from '../../AtsModule/selectors';\nimport { apiCallWaitingAction } from '../../AtsModule/saga';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { fromJS } from 'immutable';\nimport {\n  DashboardLoadedAction,\n  WidgetAdminsLoadedAction\n} from '../actions';\nimport { IMap } from 'ats-utils/src';\nimport { WidgetAdmin } from '../../../models';\n\nexport const ALLOWED_WIDGETS_FOR_RESTRICTED_OUTSIDE_SALES_REP = {\n  1: true, // tracked project list widget\n  4: true, // task list widget\n  17: true, // quote list widget\n  21: true, // quote count widget\n  22: true, // quote line widget\n  23: true, // quote value widget\n};\n\nexport default function * loadDashboard() {\n  yield all([\n    call(getDashboard),\n    call(getWidgetAdmin)\n  ]);\n}\n\nfunction * getDashboard() {\n  const appId = yield select(makeSelectAppId());\n  const {\n    data,\n    err,\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      appId,\n      {\n        service: 'dashboard',\n        endpoint: 'getDashboardsByType',\n      },\n    ],\n  }));\n\n  if (!err) {\n    const immutableResponse = fromJS(data);\n    const dashboard = immutableResponse.getIn(['payload', 'dashboard', 'dashboards']).first();\n\n    // const isAq = yield select(makeSelectIsAutoquote());\n    // const isRestrictedOutsideSalesRep = yield select(makeSelectIsRestrictedOutsideSalesRep());\n    // if (isRestrictedOutsideSalesRep && isAq) {\n    //   const filteredWidgets = dashboard.getIn(['config', 'widgets']).filter((widget: IMap<any>) => {\n    //     return ALLOWED_WIDGETS_FOR_RESTRICTED_OUTSIDE_SALES_REP[Number(widget.get('widgetId'))];\n    //   });\n    //   dashboard = dashboard.setIn(['config', 'widgets'], filteredWidgets);\n    // }\n\n    yield put(new DashboardLoadedAction({dashboard}));\n  }\n}\n\nfunction * getWidgetAdmin() {\n  const appId = yield select(makeSelectAppId());\n  const {\n    data,\n    err,\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      appId,\n      {\n        service: 'dashboard',\n        endpoint: 'getWidgetAdminListByType',\n      },\n    ],\n  }));\n  if (!err) {\n    const immutableResponse = fromJS(data);\n    let widgetAdmins: IMap<WidgetAdmin[]> = immutableResponse.getIn(['payload', 'dashboard', 'widgetAdmin']);\n\n    const isAq = yield select(makeSelectIsAutoquote());\n    const isRestrictedOutsideSalesRep = yield select(makeSelectIsRestrictedOutsideSalesRep());\n    if (isRestrictedOutsideSalesRep && isAq) {\n      widgetAdmins = widgetAdmins.filter((widget: IMap<WidgetAdmin>) => {\n        return ALLOWED_WIDGETS_FOR_RESTRICTED_OUTSIDE_SALES_REP[widget.get('id')];\n      });\n    }\n\n    yield put(new WidgetAdminsLoadedAction({ widgetAdmins }));\n  }\n}\n","import { makeSelectDashboard } from '../selectors';\nimport { apiCallWaitingAction } from '../../AtsModule/saga';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { AddErrorAction } from '../../ErrorModule/actions';\nimport { fork, select, call, put } from 'redux-saga/effects';\nimport { makeSelectAppId } from '../../AtsModule/selectors';\n\nexport default function * updateLayout(action) {\n  const dashboard = yield select(makeSelectDashboard());\n  return yield fork(dashboardUpdateCall, action, dashboard.getIn(['config']).toJS());\n}\n\nfunction * dashboardUpdateCall(action, dashboardParams) {\n  const appId = yield select(makeSelectAppId());\n  const dashboard = yield select(makeSelectDashboard());\n  const bodyObj = {\n    config: {\n      ...dashboardParams\n    },\n    dashboardId: dashboard.get('id')\n  };\n\n  const apiResp = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      appId,\n      {\n        service: 'dashboard',\n        endpoint: 'replaceDashboardByType',\n        body: bodyObj,\n      },\n    ],\n  }));\n  const err = apiResp.err;\n\n  if (err) {\n\n    yield put(new AddErrorAction({\n      message: 'dashboard update error',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err\n      }\n    }));\n  }\n  return apiResp;\n}\n","import {\n  apiCallWaitingAction,\n  taggedDelay\n} from '../../AtsModule/saga';\nimport { ApiCallAction } from '../../AtsModule/actions';\nimport { AddErrorAction } from '../../ErrorModule/actions';\nimport fetchWidgetData from './fetchWidgetData';\nimport { call, put } from 'redux-saga/effects';\n\nexport default function * updateWidgetData(params) {\n  const { timeout = 5001 } = params.payload;\n\n  yield call(taggedDelay, timeout);\n  const { userWidgetId, widgetLayoutData, refreshData } = params.payload;\n\n  if (userWidgetId != null) {\n    const {err} = yield call(widgetUpdateCall, userWidgetId, widgetLayoutData);\n\n    if (!err && refreshData) {\n      yield call(fetchWidgetData, {userWidgetId, force: true});\n    }\n  }\n}\n\nfunction * widgetUpdateCall(userWidgetId, widgetLayoutData) {\n  const bodyObj = {\n    widgetId: widgetLayoutData.get('widgetId'),\n    config: widgetLayoutData.get('config'),\n  } as any;\n  const apiResp = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      userWidgetId,\n      {\n        service: 'dashboard',\n        endpoint: 'updateWidget',\n        body: bodyObj,\n      },\n    ],\n  }));\n  const err = apiResp.err;\n  if (err) {\n    yield put(new AddErrorAction({\n      message: 'widget update error',\n      suppressGlobalErrorNotification: false,\n      meta: {\n        error: err\n      }\n    }));\n  }\n  return apiResp;\n}\n\n\n","import {\n  takeEvery,\n  takeLatest,\n} from 'redux-saga/effects';\nimport {\n  DashboardActionTypes,\n} from './actions';\nimport {\n  AtsActionTypes,\n} from '../AtsModule/actions';\nimport {\n  createWidgetIfRequired,\n  updateLayout,\n  fetchWidgetDataIfRequired,\n  fetchWidgetDataWithOptions,\n  loadDashboard,\n  updateWidgetData,\n  fetchWidgetsData,\n} from './sagas';\n\nconst LAYOUT_CHANGE_ACTIONS = [\n  DashboardActionTypes.DASHBOARD_UPDATE_LAYOUT,\n  DashboardActionTypes.DASHBOARD_DELETE_WIDGET,\n  DashboardActionTypes.DASHBOARD_WIDGET_CREATED,\n];\n\nconst WIDGET_CHANGED_ACTIONS = [\n  DashboardActionTypes.DASHBOARD_LOADED,\n  DashboardActionTypes.DASHBOARD_UPDATE_LAYOUT,\n  DashboardActionTypes.DASHBOARD_WIDGET_CREATED,\n];\n\nexport default function * defaultSaga() {\n\n  // dashboard stuff\n  yield takeLatest(DashboardActionTypes.LOAD_DASHBOARD, loadDashboard);\n\n  yield takeLatest(DashboardActionTypes.DASHBOARD_UPDATE_LAYOUT, createWidgetIfRequired);\n  yield takeLatest(LAYOUT_CHANGE_ACTIONS, updateLayout);\n  yield takeLatest(WIDGET_CHANGED_ACTIONS, fetchWidgetDataIfRequired);\n  yield takeLatest(DashboardActionTypes.FETCH_WIDGETS_DATA, fetchWidgetsData);\n  // yield takeLatest(DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED, fetchWidgetConfigIfRequired);\n  yield takeLatest(DashboardActionTypes.WIDGET_LAYOUT_DATA_UPDATED_LOCAL, updateWidgetData);\n  yield takeEvery(DashboardActionTypes.WIDGET_DATA_UPDATE_BY_WIDGET_ID, fetchWidgetDataWithOptions);\n}\n\n","/*\n * DashboardModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IDashboardReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\ninterface IDashboardModuleComponentProps {\n\n}\n\ninterface IDashboardModuleProps extends IDashboardModuleComponentProps {\n  reducerState: IMapNonRecursive<IDashboardReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype DashboardModuleProps = IDashboardModuleProps;\n\nclass DashboardModule extends React.Component<DashboardModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IDashboardModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IDashboardModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(DashboardModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './DashboardModule';\nexport default Module;","import {Grid} from '@material-ui/core';\nimport * as React from 'react';\nimport {utcToLocal} from 'ats-utils/src';\nimport {useTranslation} from 'react-i18next';\n\nfunction TooltipInfo({\n    spec\n}) {\n    const { t } = useTranslation('translations');\n    return <Grid\n        container={true}\n        direction='column'\n    >\n        <Grid>{t('SpecDetail.createdTooltip')}: {utcToLocal(spec.get('createdDate'), true)}</Grid>\n        <Grid>{t('SpecDetail.creatorTooltip')}: {spec.getIn(['createdBy', 'user', 'name'])}</Grid>\n    </Grid>;\n}\n\nexport default TooltipInfo;","import React from 'react';\nimport {Grid, Tooltip, Typography} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport TooltipInfo from './TooltipInfo';\nimport {utcToLocal} from 'ats-utils/src';\nimport {useTranslation} from 'react-i18next';\nimport {Spec} from '../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\n\ninterface IProps {\n    spec: IMap<Spec>;\n}\nfunction Title({\n    spec,\n}: IProps) {\n    const { t } = useTranslation('translations');\n    return (\n        <Grid item={true} style={{ maxWidth: '50%' }}>\n            <Grid\n                container={true}\n                direction='row'\n                alignItems='center'\n                spacing={1}\n                wrap='nowrap'\n            >\n                <Tooltip title={spec.get('name')}>\n                    <Typography variant='h6' style={{ textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap'}}>\n                        {spec.get('name')}\n                    </Typography>\n                </Tooltip>\n                <Grid item={true}>\n                    <Tooltip\n                        placement='right'\n                        title={<TooltipInfo spec={spec} />}\n                    >\n                        <div style={{display: 'flex'}}>\n                            <InfoIcon style={{ color: '#757575' }} />\n                        </div>\n                    </Tooltip>\n                </Grid>\n            </Grid>\n            <Typography variant='caption'>\n                {\n                    `${spec.get('drawings').size === 1 ? t('SpecDetail.singularDrawing', { amount: 1 }) : t('SpecDetail.pluralDrawing', { amount: spec.get('drawings').size })} | ${t('SpecDetail.lastUpdate')}: ${utcToLocal(spec.get('modifiedDate')) || t('SpecDetail.na')}`\n                }\n            </Typography>\n        </Grid>\n    );\n}\n\nexport default Title;","import * as React from 'react';\nimport {Map} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Spec} from '../../models';\nimport DownloadView from '../../components/DownloadView';\nimport { useDownloadView } from '../../components/DownloadView/hooks';\nimport {WATTS_CSI_MASTER_SPEC} from '../../components/DownloadView/constant';\nimport {hasFormatSelection} from '../../components/DownloadView/selection';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useState} from 'react';\nimport {makeSelectBulkDownloadStatus} from '../../modules/PrintModule/selectors';\nimport {makeSelectIdentityObject} from '../../modules/AtsModule/selectors';\nimport {AMPLITUDE_EVENT} from '../../constants';\nimport {useTranslation} from 'react-i18next';\nimport {Button} from '@material-ui/core';\nimport {BulkDownloadAction, ResetBulkDownloadStatusAction} from '../../modules/PrintModule/actions';\nimport {BreadcrumbProjectSpecBar} from '../../components/BreadcrumbProjectSpecBar';\nimport {\n    SetOverlayComponentPropsAction,\n    SetTimerStartAction,\n    ToggleOverlayComponentAction\n} from '../../modules/ApplicationModule/actions';\nimport * as uuid from 'uuid/v1';\nimport Title from './Title';\nimport {checkIsSpecSelected, getSelectedDrawings, getSelectedSpecs} from '../ProjectSpecDetail/DownloadView/helpers';\nimport {GUEST_EMAIL_SUBMISSION_MODAL} from '../../components/GuestEmailSubmissionModal';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {useAmplitudeData} from '../../hoc/withAmplitudeData';\nimport {GUEST_LOGIN_MODAL} from '../../components/GuestLoginModal';\nimport {LogGuestUserDownloadSpecAction} from '../../modules/SpecModule/actions';\n\ninterface IDownloadComponentProps {\n    title: React.ReactElement;\n    sourceName: string;\n    projectSpecDetailConfig: Map<number,any>;\n    onCancel: React.MouseEventHandler<HTMLButtonElement>;\n    spec: IMap<Spec>;\n}\nconst Download: React.FC<IDownloadComponentProps> = ({ spec, sourceName, projectSpecDetailConfig, onCancel }) => {\n    const downloadViewProps = useDownloadView({ isQuickSpec: true });\n    const dispatch = useDispatch();\n    const [hash, setHash] = useState(null);\n    const downloadStatus = useSelector(makeSelectBulkDownloadStatus(hash));\n    const [isLoading, setIsLoading] = useState(false);\n    const { formats, data } = downloadViewProps;\n    const { t } = useTranslation('translations');\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n    const amplitudeData = useAmplitudeData();\n    const hasSelectedAtLeastOneFormat = formats.some((format) => hasFormatSelection(format, data));\n    let actions;\n    if (downloadStatus && downloadStatus.get('jobs').every((job) => job.get('status') !== 'loading')) {\n        actions = <>\n            <Button\n                color='primary'\n                onClick={() => {\n                    dispatch(new ResetBulkDownloadStatusAction());\n                    setIsLoading(false);\n                }}\n            >\n                {t('downloadView.backToPrintFormats')}\n            </Button>\n            <Button color='primary' onClick={onCancel}>{t('downloadView.backToSpecification')}</Button>\n        </>;\n    } else {\n        actions = <Button color='primary' onClick={onCancel}>{t('downloadView.cancel')}</Button>;\n    }\n    return (\n        <>\n            <BreadcrumbProjectSpecBar\n                breadcrumbs={[\n                    {\n                        label: t('downloadView.title'),\n                        linkProps: {\n                            component: 'div',\n                            underline: 'none'\n                        }\n                    },\n                ]}\n                buttons={isLoading ? [] : [\n                    {\n                        label: t('downloadView.back'),\n                        onClick: onCancel,\n                        buttonProps: {variant: 'text'},\n                    },\n                    {\n                        label: t('downloadView.generateDocuments'),\n                        onClick: () => {\n                            const selectedFormats = downloadViewProps.formats.filter((format) => format.selected && format.key !== WATTS_CSI_MASTER_SPEC);\n                            const download = () => {\n                                setIsLoading(true);\n                                // set timer start here, for amplitude stuff to track time when series is fully loaded\n                                dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.printGenerateTime}));\n                                const specsArr = [];\n                                if (checkIsSpecSelected(projectSpecDetailConfig, spec)) {\n                                    const selectedDrawings = getSelectedDrawings(projectSpecDetailConfig, spec);\n                                    specsArr.push({\n                                        name: spec.get('name'),\n                                        drawings: selectedDrawings,\n                                        specId: spec.get('id'),\n                                        isMaster: spec.get('isMaster')\n                                    });\n                                }\n                                const newHash = uuid();\n                                dispatch(new BulkDownloadAction({\n                                    hash: newHash,\n                                    type: 'spec',\n                                    sourceName,\n                                    specs: specsArr,\n                                    specId: spec.get('id'),\n                                    isMaster: spec.get('isMaster'),\n                                    formatDetails: selectedFormats.map((selectedFormat) => ({\n                                        key: selectedFormat.key,\n                                        label: selectedFormat.label,\n                                        data: downloadViewProps.data[selectedFormat.key]\n                                    })),\n                                    bobrickCSIPrivada: downloadViewProps.data.bobrickCSIMasterSpec?.get('privadaPartition'),\n                                    bobrickCSIEvolve: downloadViewProps.data.bobrickCSIMasterSpec?.get('evolvePartition'),\n                                    bobrickCSITrad: downloadViewProps.data.bobrickCSIMasterSpec?.get('traditionalSeriesPartition'),\n                                    bobrickPlanningGuide: downloadViewProps.data.bobrickPlanningGuide?.get('planningGuide'),\n                                }));\n                                setHash(newHash);\n                            };\n                            if (isGuestUser) {\n                                const closeModal = (modalKey: string) => {\n                                    dispatch(new ToggleOverlayComponentAction({\n                                        id: modalKey,\n                                        open: false\n                                    }));\n                                    dispatch(new SetOverlayComponentPropsAction({\n                                        id: modalKey,\n                                        props: {}\n                                    }));\n                                };\n                                dispatch(new ToggleOverlayComponentAction({\n                                    id: GUEST_EMAIL_SUBMISSION_MODAL,\n                                    open: true\n                                }));\n                                dispatch(new SetOverlayComponentPropsAction({\n                                    id: GUEST_EMAIL_SUBMISSION_MODAL,\n                                    props: {\n                                        onSubmit: ({ email }) => {\n                                            amplitude.logEvent(AMPLITUDE_EVENT.ungatedDownload, amplitudeData({\n                                                guestEmail: email,\n                                                specId: spec.get('id'),\n                                                formats: selectedFormats?.map((format) => format.label)?.join(', ') ?? '',\n                                            }));\n                                            download();\n                                            dispatch(new LogGuestUserDownloadSpecAction({\n                                                guestEmail: email,\n                                                specId: spec.get('id'),\n                                            }));\n                                            closeModal(GUEST_EMAIL_SUBMISSION_MODAL);\n                                        },\n                                        onSignup: () => {\n                                            closeModal(GUEST_EMAIL_SUBMISSION_MODAL);\n                                            dispatch(new ToggleOverlayComponentAction({\n                                                id: GUEST_LOGIN_MODAL,\n                                                open: true\n                                            }));\n                                            dispatch(new SetOverlayComponentPropsAction({\n                                                id: GUEST_LOGIN_MODAL,\n                                                props: {\n                                                    text: t('guestLoginModal.continueDownload'),\n                                                    onClickContinue: () => {\n                                                        closeModal(GUEST_LOGIN_MODAL);\n                                                        download();\n                                                    },\n                                                    withContinueButton: true,\n                                                }\n                                            }));\n                                        },\n                                    }\n                                }));\n                            } else {\n                                download();\n                            }\n                        },\n                        buttonProps: {variant: isGuestUser ? 'outlined' : 'contained', disabled: !hasSelectedAtLeastOneFormat}\n                    }\n                ]}\n            />\n            <DownloadView hash={hash} title={<Title spec={spec} />} actions={actions} {...downloadViewProps} />\n        </>\n    );\n};\nexport default Download;","import React from 'react';\nimport {CancelBulkSpecCronJobAction} from '../../modules/PrintModule/actions';\nimport Download from './Download';\nimport {makeSelectProjectSpecConfig} from '../../modules/ProjectModule/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Title from './Title';\n\nfunction DownloadView({\n  spec,\n  onViewChange,\n}) {\n    const dispatch = useDispatch();\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const specName = spec.get('name');\n    return (\n        <Download\n            spec={spec}\n            title={<Title spec={spec} />}\n            sourceName={specName}\n            projectSpecDetailConfig={projectSpecDetailConfig}\n            onCancel={() => {\n                onViewChange('default');\n                dispatch(new CancelBulkSpecCronJobAction());\n            }}\n        />\n    );\n}\n\nexport default DownloadView;","import React from 'react';\nimport {CancelDownloadLixirSpecBookletAction} from '../../modules/PrintModule/actions';\nimport LixirSpecBooklet from '../../components/LixirBooklet';\nimport {useDispatch} from 'react-redux';\n\nfunction LixirSpecBookletView({ spec, onViewChange }) {\n    const dispatch = useDispatch();\n    const specId = spec.get('id');\n    const isMaster = spec.get('isMaster');\n    return (\n        <LixirSpecBooklet\n            onCancel={() => {\n                onViewChange('default');\n                dispatch(new CancelDownloadLixirSpecBookletAction());\n            }}\n            specId={specId}\n            isMaster={isMaster}\n        />\n    );\n}\n\nexport default LixirSpecBookletView;","import React from 'react';\nimport EditRoundedIcon from '@material-ui/icons/EditRounded';\nimport {push} from 'connected-react-router';\nimport {EDIT_SPEC_PATH, SPEC_TOOL_ID} from '../../constants';\nimport ArrowForwardRoundedIcon from '@material-ui/icons/ArrowForwardRounded';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {makeStyles} from '@material-ui/styles';\nimport {Menu, MenuItem, Theme, Tooltip} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {makeSelectConfig, makeSelectIdentityObject} from '../../modules/AtsModule/selectors';\nimport {makeSelectSpec} from '../../modules/SpecModule/selectors';\nimport {useTranslation} from 'react-i18next';\nimport { useViewContext } from '../../components/detailPageComponents/context/viewContext';\nimport {AtsActionBlock} from '../../components/AtsSvg/AtsActionBlock';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {GUEST_LOGIN_MODAL} from '../../components/GuestLoginModal';\n\ninterface IProps {\n    onClose: () => void;\n    open: boolean;\n    anchorEl: null | HTMLElement;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    menuItemIcon: {\n        marginRight: theme.spacing(2),\n    },\n    displayByContainer: {\n        position: 'absolute',\n        top: theme.spacing(3),\n        right: theme.spacing(2),\n    },\n}));\nfunction ActionMenu({\n    anchorEl,\n    onClose,\n    open\n}: IProps) {\n    const { setIsDialogOpen, setIsDeleteModalOpen } = useViewContext();\n    const classes = useStyles();\n    const config = useSelector(makeSelectConfig());\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n    const dispatch = useDispatch();\n    const isRegisteredUser = useSelector(makeSelectIdentityObject());\n    const spec = useSelector(makeSelectSpec());\n    const specId = spec?.get('id');\n    const isAi = spec?.get('isAi');\n    const { t } = useTranslation('translations');\n    const handleEditSpec =  () => {\n        dispatch(push({ pathname: `${EDIT_SPEC_PATH}/${specId}`, state: { source: 'jokes' }}));\n    };\n    const handleOpenInVsb = () => {\n        setIsDialogOpen(prev => !prev);\n        onClose();\n    };\n    const handleDeleteSpec = () => {\n        if (isRegisteredUser) {\n            setIsDeleteModalOpen(prev => !prev);\n        } else {\n            dispatch(new ToggleOverlayComponentAction({\n                id: GUEST_LOGIN_MODAL,\n                open: true,\n            }));\n        }\n    };\n    return (\n        <div className={classes.displayByContainer}>\n            <Menu anchorEl={anchorEl} open={open} onClose={onClose}>\n                <MenuItem\n                    onClick={handleEditSpec}\n                    value='edit'\n                >\n                    <EditRoundedIcon className={classes.menuItemIcon} fontSize='small'/>\n                    {t('SpecDetail.editSpecMenuItem')}\n                </MenuItem>\n                {\n                    (apiKey === SPEC_TOOL_ID && isRegisteredUser)\n                        ? isAi\n                            ? <Tooltip title={t('generalTooltip.disabledForAiSpec')}>\n                                <span>\n                                    <MenuItem onClick={handleOpenInVsb} disabled={true}>\n                                        <ArrowForwardRoundedIcon className={classes.menuItemIcon} fontSize='small' />\n                                        {t('SpecDetail.openVSBMenuItem')}\n                                    </MenuItem>\n                                </span>\n                             </Tooltip>\n                            : <MenuItem onClick={handleOpenInVsb}>\n                                <ArrowForwardRoundedIcon className={classes.menuItemIcon} fontSize='small' />\n                                {t('SpecDetail.openVSBMenuItem')}\n                            </MenuItem>\n                        : null\n                }\n                <MenuItem onClick={handleDeleteSpec}>\n                    <DeleteIcon className={classes.menuItemIcon} fontSize='small' />\n                    {t('SpecDetail.deleteSpecMenuItem')}\n                    {isRegisteredUser ? null : <AtsActionBlock style={{ color: 'inherit', marginLeft: 18.5 }} />}\n                </MenuItem>\n            </Menu>\n        </div>\n    );\n}\n\nexport default ActionMenu;","import {makeStyles} from '@material-ui/styles';\nimport {Button, Collapse, Grid, Theme, Tooltip, Typography} from '@material-ui/core';\nimport React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport useToggle from '../../hooks/useToggle';\nimport {utcToLocal} from 'ats-utils/src/index';\nimport clsx from 'clsx';\nimport {KeyboardArrowDown, KeyboardArrowUp} from '@material-ui/icons';\nimport MoreVertButton from '../../components/detailPageComponents/MoreVertButton';\nimport ActionMenu from './ActionMenu';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Spec} from '../../models';\ninterface IProps {\n    spec: IMap<Spec>;\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    header: {\n        display: 'flex',\n        alignItems: 'center',\n        padding: `0px ${theme.spacing(3)}px`,\n        backgroundColor: '#f5f5f5',\n        gap: theme.spacing(1),\n    },\n    basicInfoButton: {\n        textTransform: 'none',\n        fontSize: '0.58rem',\n        padding: 0,\n        marginLeft: theme.spacing(3),\n        '&:hover': {\n            backgroundColor: 'transparent',\n        }\n    },\n    projectInfoPanel: {\n        display: 'grid',\n        gridTemplateColumns: '1fr 1fr 1fr 1fr',\n        padding: `${theme.spacing(1.75)}px ${theme.spacing(3)}px`,\n        backgroundColor: '#E0E0E0',\n        gap: theme.spacing(2),\n    },\n    captionColor: {\n        color: 'rgba(0, 0, 0, 0.87)',\n    }\n}));\nconst Header: React.FC<IProps> = ({\n  spec,\n  children\n}) => {\n    const isAi = spec.get('isAi');\n    const classes = useStyles();\n    const { on, toggle } = useToggle(false);\n    const { t } = useTranslation('translations');\n    return (\n        <>\n            <header className={classes.header}>\n                <Tooltip title={spec.get('name')}>\n                    <Typography variant='h6' component='span' style={{ textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', maxWidth: '30%'}}>\n                        {spec.get('name')}\n                    </Typography>\n                </Tooltip>\n                <Button\n                    className={clsx(classes.basicInfoButton, classes.captionColor)}\n                    disableRipple={true}\n                    disableFocusRipple={true}\n                    variant='text'\n                    endIcon={on ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\n                    onClick={toggle}\n                >\n                    {t('projectDetailPage.basicInfo')}\n                </Button>\n                <MoreVertButton disabled={isAi} tooltipText={isAi ? t('generalTooltip.disabledForAiSpec') : ''}>\n                    {(props) => <ActionMenu {...props} />}\n                </MoreVertButton>\n                <div style={{ marginLeft: 'auto' }}>\n                    {children}\n                </div>\n            </header>\n            <Collapse in={on}>\n                <section className={classes.projectInfoPanel}>\n                    {\n                        [\n                            { label: t('SpecDetail.createdTooltip'), value: utcToLocal(spec.get('createdDate'), true) ?? '' },\n                            { label: t('SpecDetail.creatorTooltip'), value: spec.getIn(['createdBy', 'user', 'name']) },\n                        ].map((item, index) => <Typography key={index} variant='caption' color='textPrimary'>\n                            <span style={{ fontWeight: 'bold' }}>{item.label}</span> : <span>{item.value}</span>\n                        </Typography>)\n                    }\n                </section>\n            </Collapse>\n        </>\n    );\n};\n\nexport default Header;","import React from 'react';\nimport {makeSelectSession} from '../../modules/ApplicationModule/selectors';\nimport {useSelector} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport moment from 'moment';\n\nconst ExpiringCountDown = (props) => {\n  const session = useSelector(makeSelectSession());\n  const expireTime = new Date(session.get('expireTime'));\n  const currentTime = new Date();\n  const a = moment([expireTime.getFullYear(), expireTime.getMonth(), expireTime.getDate()]);\n  const b = moment([currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()]);\n  const timeLeft = a.diff(b, 'days') >= 0 ? a.diff(b, 'days') : 0;\n  const { t } = useTranslation('translations');\n  return (\n      <div {...props}>\n        {t('expiringCountDown', {timeLeft})}\n      </div>\n  );\n};\n\nexport default ExpiringCountDown;","// tslint:disable:no-shadowed-variable\nimport React from 'react';\nimport {Spec} from '../../../models';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport Breadcrumbs from '../../../components/detailPageComponents/Breadcrumbs';\nimport {Button, Grid, MenuItem, Toolbar, Tooltip} from '@material-ui/core';\nimport TopBar from '../../../components/detailPageComponents/TopBar';\nimport {PRODUCT_CATEGORY_PATH, SPECIFICATION_LIST_PATH} from '../../../constants';\nimport {useTranslation} from 'react-i18next';\nimport {push} from 'connected-react-router';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Header from '../Header';\nimport {ViewTypes} from '../SpecDetail';\nimport {\n    makeSelectIdentityObject,\n    makeSelectUserCanDownloadSpecBooklet\n} from '../../../modules/AtsModule/selectors';\nimport DownloadSpecBookletButton\n    from '../../../components/detailPageComponents/DownloadSpecBookletButton';\nimport ProductGroupContent\n    from '../../../components/detailPageComponents/ProductGroupContent';\nimport WarningIcon from '@material-ui/icons/Error';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\nimport InsertDriveFileIcon from '@material-ui/icons/InsertDriveFile';\nimport LayersIcon from '@material-ui/icons/Layers';\nimport {useViewContext} from '../../../components/detailPageComponents/context/viewContext';\nimport {DeleteDrawingAction, SelectDrawingAndRedirectAction} from '../../../modules/SpecModule/actions';\nimport EmptySpec from '../../../components/detailPageComponents/EmptySpec';\nimport Loading from '../../../components/detailPageComponents/Loading';\nimport {UpdateProjectSpecDetailConfigAction} from '../../../modules/ProjectModule/actions';\nimport AlternativesDropDown from '../../../components/AlternativeDropDown';\nimport AlternativesModal from '../../../containers/AlternativesModal';\nimport AddDrawingButton from '../../../components/detailPageComponents/ProductGroupContent/AddDrawingButton';\nimport ActionMenu from '../../../components/detailPageComponents/ProductGroupContent/ActionMenu';\nimport {ToggleOverlayComponentAction} from '../../../modules/ApplicationModule/actions';\nimport {GUEST_LOGIN_MODAL} from '../../../components/GuestLoginModal';\nimport {AtsActionBlock} from '../../../components/AtsSvg/AtsActionBlock';\nimport ExpiringCountDown from '../../../components/ExpiringCountDown';\nimport AddIcon from '@material-ui/icons/Add';\nimport ActionBar from '../../../components/detailPageComponents/ActionBar';\n\ninterface IProps {\n    spec: IMap<Spec>;\n    isLoading?: boolean;\n    onViewChange: (view: ViewTypes) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    menuIcon: {\n        marginRight: theme.spacing(2)\n    },\n    breadcrumbsWarningIcon: {\n        color: theme.palette.warning.main,\n        marginLeft: theme.spacing(1)\n    },\n    actionBarButtonIcon: {\n        marginLeft: 0,\n        marginRight: 0\n    },\n    expiredContainer: {\n      backgroundColor: 'rgba(235, 219, 217, 1)',\n      textTransform: 'uppercase',\n      padding: '12px 32px 12px 32px',\n      color: 'rgba(255, 0, 0, 1)',\n      borderRadius: '8px',\n      marginLeft: 'auto',\n    }\n}));\nfunction NewDefaultView({\n    spec,\n    isLoading,\n    onViewChange,\n}: IProps) {\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n    const { setMasterTemplateDrawerState } = useViewContext();\n    const classes = useStyles();\n    const specId = spec.get('id');\n    const isAi = spec.get('isAi');\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n\n    const canDownloadSpecBooklet = useSelector(makeSelectUserCanDownloadSpecBooklet());\n    const goto = (path) => {\n        dispatch(push(path));\n    };\n    const breadcrumbs = [\n        {label: t('SpecDetail.specListBreadCrumb'), onClick: () => goto(SPECIFICATION_LIST_PATH)},\n        {label: spec.get('name') || '' }\n    ];\n    const handleAddDrawing = () => {\n        dispatch(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH + '/' + specId }));\n    };\n    const handleDeleteDrawing = (specId: number, drawingId: number) => {\n        dispatch(new DeleteDrawingAction({\n            drawingId,\n            onDeleteSuccess: () => dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }))\n        }));\n    };\n    return (\n        <>\n            <TopBar>\n                <Toolbar variant='dense'>\n                    <Breadcrumbs breadcrumbs={breadcrumbs} />\n                    <Tooltip title={t('listPageToolbar.ruleWarning')}>\n                        <WarningIcon className={classes.breadcrumbsWarningIcon} fontSize='small'/>\n                    </Tooltip>\n                    {isGuestUser ? <ExpiringCountDown className={classes.expiredContainer} /> : null}\n                </Toolbar>\n                <Header spec={spec}>\n                    <DownloadSpecBookletButton\n                        hidden={!canDownloadSpecBooklet}\n                        onClick={() => {\n                            onViewChange('lixir_spec_booklet');\n                        }}\n                    />\n                </Header>\n            </TopBar>\n            {\n                (isLoading || !spec)\n                    ?   <Grid container={true} justify='center'><Loading /></Grid>\n                    :   <ProductGroupContent\n                            spec={spec}\n                            renderAddDrawingButton={({ fullMode = true, isReal = true}) => {\n                                return (\n                                  <Grid container={true} wrap='nowrap' alignItems='center' justify='flex-end'>\n                                    <Tooltip\n                                      title={\n                                        (isAi && isReal)\n                                          ? t('generalTooltip.disabledForAiSpec')\n                                          : !fullMode\n                                            ? t('projectDetailPage.useMastersOrTemplatesButton')\n                                            : ''\n                                      }\n                                    >\n                                      <Button\n                                          variant='outlined'\n                                          color='primary'\n                                          startIcon={\n                                            (isGuestUser && !fullMode)\n                                              ? <AtsActionBlock style={{ color: 'inherit' }} />\n                                              : <LayersIcon fontSize='small' />\n                                          }\n                                          style={{ marginRight: 8, whiteSpace: 'nowrap' }}\n                                          classes={{ startIcon: classes.actionBarButtonIcon }}\n                                          disabled={isAi}\n                                          onClick={isReal ? () => {\n                                              if (isGuestUser) {\n                                                  dispatch(new ToggleOverlayComponentAction({\n                                                      id: GUEST_LOGIN_MODAL,\n                                                      open: true,\n                                                  }));\n                                                  return;\n                                              } else {\n                                                  setMasterTemplateDrawerState({\n                                                      open: true,\n                                                      tabValue: 1,\n                                                  });\n                                              }\n                                          } : null}\n                                      >\n                                        {fullMode ? t('projectDetailPage.useMastersOrTemplatesButton') : ''}\n                                        {(isGuestUser && fullMode) ? <AtsActionBlock style={{ color: 'inherit', marginLeft: 18.5 }} /> : null}\n                                      </Button>\n                                    </Tooltip>\n                                    <Tooltip\n                                      title={\n                                        (isAi && isReal)\n                                          ? t('generalTooltip.disabledForAiSpec')\n                                          : !fullMode\n                                            ? t('projectDetailPage.addProduct')\n                                            : ''\n                                      }\n                                    >\n                                      <Button\n                                          variant='contained'\n                                          color='primary'\n                                          startIcon={<AddIcon fontSize='small' />}\n                                          style={{ whiteSpace: 'nowrap' }}\n                                          classes={{ startIcon: classes.actionBarButtonIcon }}\n                                          disabled={isAi}\n                                          onClick={isReal ? handleAddDrawing : null}\n                                      >\n                                        {fullMode ? t('projectDetailPage.addProduct') : ''}\n                                      </Button>\n                                    </Tooltip>\n                                  </Grid>\n                                );\n                            }}\n                            renderEmptySpecView={() => {\n                                return <EmptySpec spec={spec} onButtonClicked={handleAddDrawing} emptyviewNotFound={t('SpecDetail.emptyviewQuickSpecTitle')}/>;\n                            }}\n                            onDeleteDrawing={handleDeleteDrawing}\n                        />\n            }\n            <ActionBar\n              type={'spec'}\n              selectedSpec={spec}\n              onViewChange={onViewChange}\n            />\n            <AlternativesDropDown />\n            <AlternativesModal />\n        </>\n      );\n}\n\n\nexport default NewDefaultView;","// tslint:disable:no-shadowed-variable\nimport NewDefaultView from './NewDefaultView';\nimport * as React from 'react';\nimport ViewContainer from '../layout/ViewContainer';\nimport SpecContext from '../../../components/ProjectDetail/SpecContext';\nimport MasterAndTemplateDrawer from '../../../components/ProjectDetail/MasterAndTemplateDrawer/index.jsx';\nimport ImportSelectedDrawingsContext from '../../../components/ProjectDetail/MasterAndTemplateDrawer/ImportSelectedDrawingsContext';\nimport DrawerBusyContext from '../../../components/ProjectDetail/MasterAndTemplateDrawer/DrawerBusyContext';\nimport {IconButton} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport {useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {makeSelectLoggedInUserOfficeLocation} from '../../../modules/AccountModule/selectors';\nimport {\n    isDraggableIdForDragAllSelectedPinnedDrawing, isDraggableIdForDragSelectedDrawing, isDraggableListItem,\n    isDraggableMasterDrawingId, isDraggableTemplateDrawingId, isDroppableShortSpecListId,\n    isDroppableSpecListId, parseDraggableIdForDragAllSelectedPinnedDrawing, parseDraggableIdForDragSelectedDrawing,\n    parseDraggableMasterDrawingId, parseDraggableTemplateDrawingId,\n} from '../../../components/ProjectDetail/helpers';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport {fromJS, List} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Drawing, Spec} from '../../../models';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport {AMPLITUDE_EVENT, SPECIFICATION_LIST_PATH} from '../../../constants';\nimport {\n    CopyAction,\n    DeleteSpecAction,\n    ICopyActionPayloadForOne,\n    GetSpecsAction\n} from '../../../modules/SpecModule/actions';\nimport {makeSelectSearchingSpecs} from '../../../modules/SpecModule/selectors';\nimport {buildSpecsDictionaryFromDrawingIds, getSourceSpecs, importSelectedDrawingsViaDrop} from '../helpers';\nimport {DragDropContext} from 'react-beautiful-dnd';\nimport {useAmplitudeData} from '../../../hoc/withAmplitudeData';\nimport CopyModal from '../../../containers/CopyModal';\nimport {DeleteModal, VsbRedirectDialog} from '../../../components';\nimport {makeSelectEnv, makeSelectToken} from '../../../modules/AtsModule/selectors';\nimport {useTranslation} from 'react-i18next';\nimport {ViewContext} from '../../../components/detailPageComponents/context/viewContext';\nimport AlternativesDropDown from '../../../components/AlternativeDropDown';\nimport {\n    SetOverlayComponentPropsAction,\n    SetSnackbarOpenAction,\n    ToggleOverlayComponentAction\n} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport {useAtsApi} from '../../../contexts/AtsApiContext';\n\ninterface IMasterTemplateDrawerState {\n    open: boolean;\n    tabValue: number;\n}\n\nfunction DefaultView(props) {\n    const [masterTemplateDrawerState, setMasterTemplateDrawerState] = useState<IMasterTemplateDrawerState>({\n        open: false,\n        tabValue: 1,\n    });\n    const [productSearchTerm, setProductSearchTerm] = useState('');\n    const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false);\n    const [isDeleteModalOpen, setIsDeleteModalOpen] = useState<boolean>(false);\n    const [isCopying, setIsCopying] = useState(false);\n    const token = useSelector(makeSelectToken());\n    const env = useSelector(makeSelectEnv());\n    const loginUserOfficeLocation = useSelector(makeSelectLoggedInUserOfficeLocation());\n    const isSearchingSpecs: boolean = useSelector(makeSelectSearchingSpecs());\n    const dispatch = useDispatch();\n    const amplitudeData = useAmplitudeData();\n    const { t } = useTranslation('translations');\n    const spec = props.spec;\n    const specId = spec?.get('id');\n    const specName = spec.get('name');\n    const atsApi = useAtsApi();\n    const onDragEnd = (result) => {\n        if (!result.destination) {\n            return;\n        }\n        const onFailed = () => setIsCopying(false);\n        if (isDroppableSpecListId(result.destination.droppableId) || isDroppableShortSpecListId(result.destination.droppableId)) {\n            const destinationType = 'Spec';\n            const destinationId = spec?.get('id');\n            const destinationName = spec?.get('name');\n            const calculateDrawingInsetPoint = () => {\n                if (result.destination.index === 0) {\n                    return 0;\n                }\n                const drawingsDisplayed = filterSpecDrawingsByProductName(spec, productSearchTerm);\n                return drawingsDisplayed.get(result.destination.index - 1).get('order') + 1;\n            };\n            if (isDraggableMasterDrawingId(result.draggableId)) {\n                const { specId: sourceSpecId, drawingId, masterId, originListType, masterName } = parseDraggableMasterDrawingId(result.draggableId);\n                // const { specId } = parseDroppableSpecListId(result.destination.droppableId);\n                const onSuccess = (specs: List<IMap<Spec>>) => {\n                    const trackedData = {\n                        originListType,\n                        sourceType: 'Master',\n                        sourceId: masterId,\n                        sourceName: masterName,\n                        destinationType,\n                        destinationId,\n                        destinationName,\n                    };\n                    amplitude.logEvent(AMPLITUDE_EVENT.quickAccessCopyTo, amplitudeData(trackedData));\n                    dispatch(new GetSpecsAction({specId}));\n                    setIsCopying(false);\n                };\n                setIsCopying(true);\n                dispatch(new CopyAction({\n                    destinationType: 'standard',\n                    destinationSpecId: specId,\n                    sourceType: 'master',\n                    sourceSpecs: [\n                        {\n                            id: sourceSpecId,\n                            drawings: [\n                                {\n                                    id: drawingId,\n                                }\n                            ]\n                        }\n                    ],\n                    drawingInsertPoint: calculateDrawingInsetPoint(),\n                    onSuccess,\n                    onFailed,\n                }));\n            }\n            if (isDraggableTemplateDrawingId(result.draggableId)) {\n                const { specId: sourceSpecId, drawingId, templateId, originListType, templateName } = parseDraggableTemplateDrawingId(result.draggableId);\n                // const { specId } = parseDroppableSpecListId(result.destination.droppableId);\n                const onSuccess = (specs: List<IMap<Spec>>) => {\n                    const trackedData = {\n                        originListType,\n                        sourceType: 'Template',\n                        sourceId: templateId,\n                        sourceName: templateName,\n                        destinationType,\n                        destinationId,\n                        destinationName,\n                    };\n                    amplitude.logEvent(AMPLITUDE_EVENT.quickAccessCopyTo, amplitudeData(trackedData));\n                    dispatch(new GetSpecsAction({specId}));\n                    setIsCopying(false);\n                };\n                setIsCopying(true);\n                dispatch(new CopyAction({\n                    destinationType: 'standard',\n                    destinationSpecId: specId,\n                    sourceType: 'master_template',\n                    sourceSpecs: [\n                        {\n                            id: sourceSpecId,\n                            drawings: [\n                                {\n                                    id: drawingId,\n                                }\n                            ]\n                        }\n                    ],\n                    drawingInsertPoint: calculateDrawingInsetPoint(),\n                    onSuccess,\n                    onFailed,\n                }));\n            }\n            if (isDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId)) {\n                const drawingIds = parseDraggableIdForDragAllSelectedPinnedDrawing(result.draggableId);\n                const specsDictionary = buildSpecsDictionaryFromDrawingIds(drawingIds);\n                const copyMasterSpecs = (props: Partial<ICopyActionPayloadForOne>) => {\n                    dispatch(new CopyAction({\n                        destinationSpecId: spec?.get('id'),\n                        destinationType: 'standard',\n                        sourceType: 'master',\n                        ...props,\n                    }));\n                };\n                const copyTemplateSpecs = (props: Partial<ICopyActionPayloadForOne>) => {\n                    dispatch(new CopyAction({\n                        destinationSpecId: spec?.get('id'),\n                        destinationType: 'standard',\n                        sourceType: 'master_template',\n                        ...props,\n                    }));\n                };\n                if (specsDictionary.master) {\n                    setIsCopying(true);\n                    copyMasterSpecs({\n                        sourceSpecs: getSourceSpecs(specsDictionary.master),\n                        drawingInsertPoint: calculateDrawingInsetPoint(),\n                        onSuccess: (_specs: List<IMap<Spec>>) => {\n                            const _spec: IMap<Spec> = _specs?.first();\n                            const lastDrawing: IMap<Drawing> = _spec?.get('drawings')?.last();\n                            if (specsDictionary.template) {\n                                copyTemplateSpecs({\n                                    sourceSpecs: getSourceSpecs(specsDictionary.template),\n                                    drawingInsertPoint: lastDrawing.get('order') + 1,\n                                    onSuccess: () => {\n                                        dispatch(new GetSpecsAction({specId: spec?.get('id')}));\n                                        setIsCopying(false);\n                                    },\n                                });\n                            } else {\n                                dispatch(new GetSpecsAction({specId: spec?.get('id')}));\n                                setIsCopying(false);\n                            }\n                        },\n                        onFailed,\n                    });\n                } else if (specsDictionary.template) {\n                    setIsCopying(true);\n                    copyTemplateSpecs({\n                        sourceSpecs: getSourceSpecs(specsDictionary.template),\n                        drawingInsertPoint: calculateDrawingInsetPoint(),\n                        onSuccess: () => {\n                            dispatch(new GetSpecsAction({specId: spec?.get('id')}));\n                            setIsCopying(false);\n                        },\n                        onFailed,\n                    });\n                }\n                return;\n            }\n            if (isDraggableIdForDragSelectedDrawing(result.draggableId)) {\n                const { drawingIds, originListType, specId: sourceSpecId } = parseDraggableIdForDragSelectedDrawing(result.draggableId);\n                let sourceType;\n                if (originListType === 'Masters List') {\n                    sourceType = 'master';\n                }\n                if (originListType === 'Templates List') {\n                    sourceType = 'master_template';\n                }\n                if (!sourceType) {\n                    return;\n                }\n                setIsCopying(true);\n                dispatch(new CopyAction({\n                    destinationSpecId: spec?.get('id'),\n                    destinationType: 'standard' as const,\n                    sourceType,\n                    sourceSpecs: [\n                        {\n                            id: sourceSpecId,\n                            drawings: drawingIds.map(drawingId => ({ id: drawingId })),\n                        }\n                    ],\n                    drawingInsertPoint: calculateDrawingInsetPoint(),\n                    onSuccess: () => {\n                        dispatch(new GetSpecsAction({specId: spec?.get('id')}));\n                        setIsCopying(false);\n                    },\n                    onFailed,\n                }));\n            }\n        }\n        if (isDroppableShortSpecListId(result.destination.droppableId) && isDraggableListItem(result.draggableId) && productSearchTerm === '') {\n            const allDrawings = spec?.get('drawings') ?? List();\n            const filteredDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n            const destinationIndex = result.destination.index;\n            const sourceIndex = result.source.index;\n            if (destinationIndex === sourceIndex) {\n                return;\n            }\n            const sourceDrawing = filteredDrawings.get(sourceIndex);\n            const sourceDrawingId = sourceDrawing.get('id');\n            const destinationDrawing = filteredDrawings.get(destinationIndex);\n            const destinationDrawingId = destinationDrawing.get('id');\n            const sourceDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === sourceDrawingId);\n            const destinationDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === destinationDrawingId);\n            const newDrawings = allDrawings.delete(sourceDrawingIndexInOriginalList).insert(destinationDrawingIndexInOriginalList, sourceDrawing);\n            dispatch(new SetOverlayComponentPropsAction({\n                id: LOADING_MODAL_ID,\n                props: {\n                    action: t('specDetail.movingSections')\n                }\n            }));\n            dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: true\n            }));\n            (atsApi.callApi({\n                service: 'spec',\n                endpoint: 'updateSpec',\n                body: {\n                    drawings: newDrawings.toArray(),\n                },\n                params: {\n                    specId\n                }\n            }) as any).then(res => {\n                const updatedSpecFromRes = fromJS(res?.payload?.spec?.spec?.[0]);\n                if (updatedSpecFromRes == null) {\n                    console.error('Invalid response', res); // tslint:disable-line\n                } else {\n                    dispatch(new GetSpecsAction({\n                        specId: updatedSpecFromRes.get('id'),\n                        onSuccess: () => {\n                            dispatch(new ToggleOverlayComponentAction({\n                                id: LOADING_MODAL_ID,\n                                open: false\n                            }));\n                            dispatch(new SetSnackbarOpenAction({\n                                message: t('specDetail.moveSectionsSuccess'),\n                                severity: 'success'\n                            }));\n                        }\n                    }));\n                }\n            }).catch((error) => {\n                console.error('move drawings failed', { error }); // tslint:disable-line\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false\n                }));\n                dispatch(new SetSnackbarOpenAction({\n                    message: t('specDetail.moveSectionsFailed'),\n                    severity: 'error'\n                }));\n            });\n        }\n    };\n    const onImportSelectedDrawings = (draggableId: string) =>\n        importSelectedDrawingsViaDrop({ spec, productSearchTerm, draggableId, onDragEnd });\n    const toggleDialog = () => {\n        setIsDialogOpen(prev => !prev);\n    };\n    const toggleDeleteModal = () => {\n        setIsDeleteModalOpen(prev => !prev);\n    };\n    const viewContextValue = useMemo(() => ({\n        productSearchTerm,\n        setProductSearchTerm,\n        masterTemplateDrawerState,\n        setMasterTemplateDrawerState,\n        isDialogOpen,\n        setIsDialogOpen,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen\n    }), [\n        productSearchTerm,\n        setProductSearchTerm,\n        masterTemplateDrawerState,\n        setMasterTemplateDrawerState,\n        isDialogOpen,\n        setIsDialogOpen,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen\n    ]);\n\n    return (\n        <ViewContext.Provider value={viewContextValue}>\n            <ViewContainer>\n                <DragDropContext onDragEnd={onDragEnd}>\n                    {\n                        masterTemplateDrawerState.open ?\n                            <SpecContext value={spec}>\n                                <ImportSelectedDrawingsContext.Provider value={onImportSelectedDrawings}>\n                                    {/* the copy's success callback starts the spec reload before clearing isCopying, so this stays true until the reload lands */}\n                                    <DrawerBusyContext.Provider value={isCopying || isSearchingSpecs}>\n                                        <MasterAndTemplateDrawer\n                                            countryId={Number(loginUserOfficeLocation.getIn(['country', 'id']))}\n                                            tabValue={masterTemplateDrawerState.tabValue}\n                                            CloseButtonComponent={\n                                                <IconButton\n                                                    onClick={() => setMasterTemplateDrawerState({\n                                                        open: false,\n                                                        tabValue: 1,\n                                                    })}\n                                                    color='inherit'\n                                                >\n                                                    <CloseIcon />\n                                                </IconButton>\n                                            }\n                                        />\n                                    </DrawerBusyContext.Provider>\n                                </ImportSelectedDrawingsContext.Provider>\n                            </SpecContext> : null\n                    }\n                    <NewDefaultView\n                      isLoading={isCopying}\n                      {...props}\n                    />\n                </DragDropContext>\n                <CopyModal defaultDestinationType='specification' />\n                <VsbRedirectDialog\n                    open={isDialogOpen}\n                    toggleDialog={toggleDialog}\n                    appHref={`visualspecbuilder://load?specId=${specId}&token=${token}`}\n                    webHref={`${env.get('ENDPOINT_UI_VSB')}?specId=${specId}&token=${token}`}\n                />\n                <DeleteModal\n                    open={isDeleteModalOpen}\n                    toggleDeleteModal={toggleDeleteModal}\n                    itemName={specName ?? t('SpecDetail.unnamedSpec')}\n                    handleDelete={() => {\n                        dispatch(new DeleteSpecAction({\n                            specId,\n                            specName,\n                            redirectPath: SPECIFICATION_LIST_PATH\n                        }));\n                        toggleDeleteModal();\n                    }}\n                />\n                <AlternativesDropDown />\n            </ViewContainer>\n        </ViewContext.Provider>\n    );\n}\n\nexport default DefaultView;","import * as React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {\n  NOT_FOUND_PATH,\n  Mode,\n} from '../../constants';\nimport {SetModeAction} from '../../modules/SpecModule/actions';\nimport {makeSelectMode, makeSelectSpec} from '../../modules/SpecModule/selectors';\nimport {\n  SelectAllDrawingsInSpecAction,\n  UpdateProjectSpecDetailConfigAction\n} from '../../modules/ProjectModule/actions';\nimport {Spec} from '../../models';\nimport {push} from 'connected-react-router';\nimport { ResetErrorAction } from '../../modules/ErrorModule/actions';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {useEffect, useLayoutEffect, useState} from 'react';\nimport DownloadView from './DownloadView';\nimport {withSpecId} from '../../hoc';\nimport LixirSpecBookletView from './LixirSpecBookletView';\nimport DefaultView from './DefaultView';\nimport ViewContainer from './layout/ViewContainer';\nimport {makeSelectIdentityObject} from '../../modules/AtsModule/selectors';\nimport InfoBar from '../../components/InfoBar';\n\nexport type ViewTypes = 'default' | 'download' | 'lixir_spec_booklet';\nconst Loader = ({\n    specId\n}) => {\n  const spec = useSelector(makeSelectSpec({\n    specId,\n  }));\n  const dispatch = useDispatch();\n  const isFirstLoad = React.useRef(false);\n  useEffect(() => {\n      isFirstLoad.current = true;\n  }, [specId]);\n  useEffect(() => {\n    if (isFirstLoad.current && spec) {\n        isFirstLoad.current = false;\n        dispatch(new SelectAllDrawingsInSpecAction({\n            spec,\n        }));\n    }\n  }, [spec]);\n  if (spec == null) {\n    return null;\n  }\n  return (\n       <SpecDetail spec={spec} />\n  );\n};\nconst SpecDetail = ({\n    spec\n}: {\n  spec: IMap<Spec>\n}) => {\n  const { t } = useTranslation('translations');\n  const isGuestUser = !useSelector(makeSelectIdentityObject());\n  const [view, setView] = useState<ViewTypes>('default');\n  const dispatch = useDispatch();\n  const handleViewChange = (newView: ViewTypes) => {\n    setView(newView);\n  };\n  useEffect(() => {\n    dispatch(new ResetErrorAction({}));\n    dispatch(new SetModeAction(Mode.spec));\n    return () => {\n      dispatch(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      dispatch(new UpdateProjectSpecDetailConfigAction({}));\n    };\n  }, []);\n  useLayoutEffect(() => {\n    const title = document.getElementById('pageTitle');\n    if (view === 'default') {\n      title.innerHTML = t('pageTitle.specDetailPage');\n    } else {\n      title.innerHTML = t('pageTitle.downloadSpecPage');\n    }\n  }, [view]);\n  const viewProps = {\n    spec,\n    onViewChange: handleViewChange\n  };\n  const componentMap = new Map([\n      ['default', DefaultView],\n      ['download', DownloadView],\n      ['lixir_spec_booklet', LixirSpecBookletView]\n  ]);\n  const ViewComponent = componentMap.get(view);\n  return <ViewContainer>\n    {isGuestUser ? <InfoBar>{t('infoBar.text2')}</InfoBar> : null}\n    <ViewComponent {...viewProps}/>\n  </ViewContainer>;\n};\n\nconst WithSpecId = withSpecId({redirectToControlled: true, onGetSpecFailed: ({ dispatch, error }) => dispatch(push(NOT_FOUND_PATH))})(Loader);\n\nconst WithMode = (props) => {\n    const dispatch = useDispatch();\n    const mode = useSelector(makeSelectMode());\n    useEffect(() => {\n      dispatch(new SetModeAction(Mode.spec));\n    }, []);\n    if (mode !== Mode.spec) {\n      return null;\n    }\n    return <WithSpecId {...props} />;\n};\n\nexport default WithMode;","import SpecDetail from './SpecDetail';\n\nexport default SpecDetail;","import {\n  fromJS, List, Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { Product, FirmProduct, Series, Filter, Option, PureAttribute, PureAttributeOption, Attribute, PimIntegrationMap, Manufacturer, Category } from '../../models';\nimport RecommendedAttribute from '../../models/RecommendedAttribute';\n\nimport {\n  PimActionTypes,\n  QuickSearchPimProductsPackagesSucceeded,\n  QuickSearchPimProductsSucceeded,\n  DeleteFirmProductSucceeded,\n  SearchPimProductsSucceeded,\n  SearchFirmProductsSucceeded,\n  QuickSearchFirmProductsSucceeded,\n  SearchSeriesSucceededAction,\n  GetSeriesFromPimServiceSucceededAction,\n  ResetPimStateAction,\n  UpdatePIMSeriesSucceededAction,\n  UpdatePIMProductSucceededAction,\n  SearchingPimProductsPackagesAction,\n  SearchAttributesSucceededAction,\n  SearchAttributeOptionsSucceededAction,\n  SetSelectedAttributeIdAction,\n  SetSelectedPimProductIdAction,\n  SearchRecommendedAttributesSuccessAction,\n  AddPimProductSucceededAction,\n  GetFirmSeriesSucceededAction,\n  SetSelectedFirmSeriesIdAction,\n  GetFirmSeriesByIdSucceededAction,\n  SearchFirmSeriesSucceededAction,\n  SetSearchBodyAndSearchPimProductsAction,\n  SetIsPublishingAction,\n  GetProductByIdSucceededAction,\n  QuickSearchPimProductsLoadingAction,\n  SetIsAddingPimSeriesDraftAction,\n  SetIsFetchingAttributeOptionsAction,\n  SearchAllAttributesSucceededAction,\n  SetIsSearchingAllAttributesAction,\n  SetIsSearchingAllAttributeOptionsAction,\n  SearchAllAttributeOptionsSucceededAction,\n  SearchAllAttributesSucceededSecondaryAction,\n  SetIsSearchingAllAttributesSecondaryAction,\n  SetSelectedPureAttributeAction,\n  SetSelectedPureAttributeOptionAction,\n  SearchAttributeOptionsSucceededSecondaryAction,\n  SetIsSearchingAttributeOptionsSecondaryAction,\n  AddATSLibraryProductSucceededAction,\n  MatchingProductCheckingAction,\n  GetPimMatchingProductSucceededAction,\n  SetIsCreatingAttributeAction,\n  GetMatchingAttributesSucceededAction,\n  SearchSharedProductsSucceeded,\n  GetSeriesDuplicateProductsByIdSucceededAction,\n  SetIsGettingSeriesDuplicateProductsByIdAction,\n  SearchPimCategoriesSucceededAction,\n  SetIsSearchingPimCategoriesAction,\n  GetBulkExportProductsConfigSucceededAction,\n  GetBulkExportProductsConfigLoadingAction,\n  BulkExportProductsLoadingAction,\n  SetBulkImportProductsProgressAction,\n  BulkImportProductsLoadingAction,\n  SaveBulkExportProductsConfigSucceededAction,\n  SetPrimaryMergeProductAction,\n  SetIsMergingProductsAction,\n  UpdateFirmSeriesSucceededAction,\n  SearchPimIntegrationSeriesSucceededAction,\n  SetIsSearchingPimIntegrationSeriesAction,\n  MapPimIntegrationSucceededAction,\n  SetIsMappingPimIntegrationAction,\n  EditFirmProductOrPackageSucceededAction,\n  SetIsGettingFirmProductByIdAction,\n  SetIsGettingPackageByIdAction,\n  SkipAttributeAction,\n  RestoreAttributeAction,\n  GetFirmProductCategoriesUpdateAction,\n  GetFirmProductManufacturersUpdateAction,\n  GetFirmProductCustomDataListSucceededAction,\n  GetManufacturerPriceInvisibilitySucceededAction,\n  UpdateStoreFirmProductAction,\n  SetIsProductConfigurableAction,\n  SetIsProductConfigurableCheckingAction,\n  SearchingParentSharedFirmProductsAction,\n  SearchParentSharedFirmProductsSucceeded,\n  FirmProductCreatedPendingIndexAction,\n} from './actions';\nimport PimAttribute from '../../models/PimAttribute';\nimport PimAttributeOption from '../../models/PimAttributeOption';\nimport MandatoryRecommendedAttributes from '../../models/MandatoryRecommendedAttributes';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nexport interface IPimReducerState {\n  product: IMap<Product>;\n  isFetchingProduct: boolean;\n  pimProducts: List<IMap<Product>>;\n  pimProductsPackages: any;\n  searchingPimProductsPackages: boolean;\n  parentSharedFirmProducts: List<IMap<FirmProduct>>;\n  searchingParentSharedFirmProducts: boolean;\n  selectedPimProductId: number;\n  pimProductsList: List<IMap<Product>>;\n  pimProductsListHasNextPage: boolean;\n  pimProductsListSearchFilters: Filter;\n  pimProductsListSearchOptions: Option<Product>;\n  firmProductsList: List<IMap<FirmProduct>>;\n  /**\n   * Products created but not yet visible in a search result. Entries carry the\n   * creation timestamp so a row that never shows up (it may not match the\n   * current filters at all) cannot linger forever.\n   */\n  pendingCreatedFirmProducts: List<IMap<any>>;\n  firmProductsListCount: number;\n  firmProductsListHasNextPage: boolean;\n  sharedProductsList: List<IMap<FirmProduct>>;\n  quickSearchFirmProductsList: List<IMap<FirmProduct>>;\n  isLoadingQuickSearchFirmProducts: boolean;\n  quickSearchFirmProductsListCount: number;\n  quickSearchFirmProductsListHasNextPage: boolean;\n  isFetchingSharedProducts: boolean;\n  isFetchingFirmProducts: boolean;\n  isInactiveProduct: boolean;\n  searchedSeries: List<IMap<Series>>;\n  seriesHasNextPage: boolean;\n  searchingSeries: boolean;\n  selectedPimSeries: IMap<Series>;\n  mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>;\n  pimAttributes: List<IMap<PimAttribute>>;\n  pimAttributeOptions: Map<number, List<IMap<PimAttributeOption>>>;\n  isFetchingPimAttributeOptions: boolean;\n  selectedAttributeId: number;\n  firmSeries: List<IMap<Series>>;\n  firmSeriesCount: number;\n  firmSeriesHasNextPage: boolean;\n  searchingFirmSeries: boolean;\n  selectedFirmSeriesId: number;\n  selectedFirmConfigSeriesId: number;\n  selectedFirmSeries: IMap<Series>;\n  isPublishing: boolean;\n  quickSearchPimProductsLoading: boolean;\n  isAddingDraft: boolean;\n  pureAttributes: List<IMap<PureAttribute>>;\n  pureAttributesCount: number;\n  isSearchingPureAttributes: boolean;\n  pureAttributesSecondary: List<IMap<PureAttribute>>;\n  isSearchingPureAttributesSecondary: boolean;\n  selectedPureAttribute: IMap<PureAttribute>;\n  selectedPureAttributeOption: IMap<PureAttributeOption>;\n  pureAttributeOptions: List<IMap<PureAttributeOption>>;\n  pureAttributeOptionsCount: number;\n  isSearchingPureAttributeOptions: boolean;\n  pureAttributeOptionsSecondary: List<IMap<PureAttributeOption>>;\n  isSearchingPureAttributeOptionsSecondary: boolean;\n  matchingProductChecking: boolean;\n  isProductConfigurable: boolean;\n  isProductConfigurableChecking: boolean;\n  pimMatchingProduct: List<IMap<Product>>;\n  isCreatingAttribute: boolean;\n  pimMatchingAttributes: Map<string, IMap<Attribute>>;\n  configuratbleProductsCheck: IMap<{\n    seriesDuplicateProducts: List<List<IMap<Product>>>;\n    hasUnconfigurableProducts: boolean;\n  }>;\n  isGettingSeriesDuplicateProducts: boolean;\n  isSearchingPimCategories: boolean;\n  pimCategories: List<Map<string, any>>;\n  isExportingProducts: boolean;\n  firmExportFieldsConfig: List<string>;\n  importProductsProgress: { percent: number, status: string, details?: any };\n  isImportingProducts: boolean;\n  isDownloadingTemplate: boolean;\n  isDownloadTemplateSuccess: boolean;\n  primaryMergeProduct: Partial<IMap<Product>>;\n  isMergingProducts: boolean;\n  pimIntegrationSeries: List<Map<string, any>>;\n  isSearchingPimIntegrationSeries: boolean;\n  pimIntegrationMap: IMap<PimIntegrationMap>;\n  isMappingPimIntegration: boolean;\n  isFetchingFirmProduct: boolean;\n  isFetchingPackage: boolean;\n  firmProductManufacturers: List<IMap<Manufacturer>>;\n  firmProductCategories: List<IMap<Category>>;\n  isFetchingFirmProductCategories: boolean;\n  firmProductCustomDataList: List<IMap<any>>;\n  brandsToHidePrice: Map<number, number> | null;\n}\n\n/**\n * How long a created-but-unindexed product stays pinned to the list.\n *\n * The index refresh interval is 1s and the push uses `refresh: 'wait_for'`, so\n * a successful push lands well inside this. The window only has to cover that;\n * once a push has failed, the row should disappear rather than misrepresent the\n * library while the scheduled delta catches up on its own cadence.\n */\nexport const PENDING_CREATED_TTL_MS = 30_000;\n\nconst INITIAL_STATE = fromJS({\n  product: {},\n  isFetchingProduct: false,\n  pimProducts: [],\n  pimProductsPackages: [],\n  parentSharedFirmProducts: [],\n  selectedPimProductId: -1,\n  pimProductsList: [],\n  pimProductsListHasNextPage: 0,\n  pimProductsListSearchFilters: {},\n  pimProductsListSearchOptions: {},\n  firmProductsList: [],\n  pendingCreatedFirmProducts: [],\n  firmProductsListCount: 0,\n  firmProductsListHasNextPage: false,\n  sharedProductsList: [],\n  isFetchingSharedProducts: false,\n  quickSearchFirmProductsList: [],\n  quickSearchFirmProductsListCount: 0,\n  quickSearchFirmProductsListHasNextPage: false,\n  isFetchingFirmProducts: false,\n  isInactiveProduct: false,\n  searchedSeries: [],\n  seriesHasNextPage: false,\n  searchingSeries: false,\n  selectedPimSeries: {},\n  searchingPimProductsPackages: false,\n  searchingParentSharedFirmProducts: false,\n  isLoadingQuickSearchFirmProducts: false,\n  mandatoryRecommendedAttributes: {},\n  pimAttributes: [],\n  pimAttributeOptions: {},\n  isFetchingPimAttributeOptions: false,\n  selectedAttributeId: -1,\n  firmSeries: [],\n  firmSeriesCount: 0,\n  selectedFirmSeriesId: -1,\n  firmSeriesHasNextPage: false,\n  searchingFirmSeries: false,\n  selectedFirmConfigSeriesId: -1,\n  selectedFirmSeries: {},\n  isPublishing: false,\n  quickSearchPimProductsLoading: false,\n  isAddingDraft: false,\n  pureAttributes: [],\n  pureAttributesCount: 0,\n  isSearchingPureAttributes: false,\n  pureAttributesSecondary: [],\n  isSearchingPureAttributesSecondary: false,\n  selectedPureAttribute: {},\n  selectedPureAttributeOption: {},\n  pureAttributeOptions: [],\n  pureAttributeOptionsCount: 0,\n  pureAttributeOptionsSecondary: [],\n  isSearchingPureAttributeOptionsSecondary: false,\n  isSearchingPureAttributeOptions: false,\n  matchingProductChecking: false,\n  pimMatchingProduct: null,\n  isCreatingAttribute: false,\n  pimMatchingAttributes: null,\n  configuratbleProductsCheck: {\n    seriesDuplicateProducts: [],\n    hasUnconfigurableProducts: false\n  },\n  isGettingSeriesDuplicateProducts: false,\n  isSearchingPimCategories: false,\n  pimCategories: [],\n  isExportingProducts: false,\n  firmExportFieldsConfig: [],\n  isImportingProducts: false,\n  importProductsProgress: {\n    percent: 0,\n    status: 'pending',\n    details: []\n  },\n  isDownloadingTemplate: false,\n  isDownloadTemplateSuccess: false,\n  primaryMergeProduct: {},\n  isMergingProducts: false,\n  pimIntegrationSeries: [],\n  isSearchingPimIntegrationSeries: false,\n  pimIntegrationMap: {},\n  isMappingPimIntegration: false,\n  isFetchingFirmProduct: false,\n  isFetchingPackage: false,\n  firmProductManufacturers: [],\n  firmProductCategories: [],\n  isFetchingFirmProductCategories: false,\n  firmProductCustomDataList: null,\n  brandsToHidePrice: null, // null means not fetched yet\n});\n\nexport const reducer = (state: IMapNonRecursive<IPimReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case PimActionTypes.SET_IS_PRODUCT_CONFIGURABLE: {\n      const {\n        payload\n      } = action as SetIsProductConfigurableAction;\n      return state.set('isProductConfigurable', payload);\n    }\n    case PimActionTypes.SET_IS_PRODUCT_CONFIGURABLE_CHECKING: {\n      const {\n        payload\n      } = action as SetIsProductConfigurableCheckingAction;\n      return state.set('isProductConfigurableChecking', payload);\n    }\n    case PimActionTypes.GET_MANUFACTURER_PRICE_INVISIBILITY_SUCCEEDED: {\n      const {\n        payload: { brandsToHidePrice }\n      } = action as GetManufacturerPriceInvisibilitySucceededAction;\n\n      return state.set('brandsToHidePrice', brandsToHidePrice);\n    }\n    case PimActionTypes.GET_FIRM_PRODUCT_CUSTOM_DATA_LIST_SUCCEEDED: {\n      const {\n        payload: { firmProductCustomDataList }\n      } = action as GetFirmProductCustomDataListSucceededAction;\n\n      return state.set('firmProductCustomDataList', firmProductCustomDataList);\n    }\n    case PimActionTypes.GET_FIRM_PRODUCT_MANUFACTURERS_UPDATE: {\n      const {\n        payload: { firmProductManufacturers }\n      } = action as GetFirmProductManufacturersUpdateAction;\n\n      return state.set('firmProductManufacturers', firmProductManufacturers);\n    }\n    case PimActionTypes.GET_FIRM_PRODUCT_CATEGORIES_UPDATE: {\n      const {\n        payload: { firmProductCategories }\n      } = action as GetFirmProductCategoriesUpdateAction;\n\n      return state.set('firmProductCategories', firmProductCategories);\n    }\n    case PimActionTypes.SKIP_ATTRIBUTE: {\n      const {\n        payload\n      } = action as SkipAttributeAction;\n      const {\n        attributeId\n      } = payload;\n      const indexToSkip = state.getIn(['mandatoryRecommendedAttributes', 'required'])?.findIndex((attribute: IMap<RecommendedAttribute>) => attribute.get('attributeId') === attributeId);\n      return indexToSkip !== -1 ? state.setIn(['mandatoryRecommendedAttributes', 'required', indexToSkip, 'skip'], true) : state;\n    }\n    case PimActionTypes.SKIP_ALL_ATTRIBUTES: {\n      return state.updateIn(['mandatoryRecommendedAttributes', 'required'], (attributes: List<IMap<RecommendedAttribute>>) => attributes.map((attribute: IMap<RecommendedAttribute>) => attribute.set('skip', true)));\n    }\n    case PimActionTypes.RESTORE_ATTRIBUTE: {\n      const {\n        payload\n      } = action as RestoreAttributeAction;\n      const {\n        attributeId\n      } = payload;\n      const indexToRestore = state.getIn(['mandatoryRecommendedAttributes', 'required'])?.findIndex((attribute: IMap<RecommendedAttribute>) => attribute.get('attributeId') === attributeId);\n      return indexToRestore !== -1 ? state.setIn(['mandatoryRecommendedAttributes', 'required', indexToRestore, 'skip'], false) : state;\n    }\n    case PimActionTypes.SEARCH_PIM_INTEGRATION_SERIES_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchPimIntegrationSeriesSucceededAction;\n      const { integrationSeries } = payload;\n      return state.set('pimIntegrationSeries', integrationSeries);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_PIM_INTEGRATION_SERIES: {\n      const {\n        payload\n      } = action as SetIsSearchingPimIntegrationSeriesAction;\n      return state.set('isSearchingPimIntegrationSeries', payload);\n    }\n    case PimActionTypes.MAP_PIM_INTEGRATION_SUCCEEDED: {\n      const {\n        payload\n      } = action as MapPimIntegrationSucceededAction;\n      const { integrationMap } = payload;\n      return state.set('pimIntegrationMap', integrationMap);\n    }\n    case PimActionTypes.SET_IS_MAPPING_PIM_INTEGRATION: {\n      const {\n        payload\n      } = action as SetIsMappingPimIntegrationAction;\n      return state.set('isMappingPimIntegration', payload);\n    }\n    case PimActionTypes.SET_IS_MERGING_PRODUCTS: {\n      const {\n        payload\n      } = action as SetIsMergingProductsAction;\n      return state.set('isMergingProducts', payload);\n    }\n    case PimActionTypes.SET_PRIMARY_MERGE_PRODUCT: {\n      const {\n        payload\n      } = action as SetPrimaryMergeProductAction;\n      return state.set('primaryMergeProduct', payload.product);\n    }\n    case PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_FAILED: {\n      return state.set('configuratbleProductsCheck', fromJS(INITIAL_STATE.configuratbleProductsCheck)); // if null then get request failed\n    }\n    case PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetSeriesDuplicateProductsByIdSucceededAction;\n      const { seriesDuplicateProducts, hasUnconfigurableProducts } = payload;\n      return state.set('configuratbleProductsCheck', fromJS({ seriesDuplicateProducts, hasUnconfigurableProducts }));\n    }\n    case PimActionTypes.SET_IS_CREATING_ATTRIBUTE: {\n      const {\n        payload\n      } = action as SetIsCreatingAttributeAction;\n      return state.set('isCreatingAttribute', payload.isCreating);\n    }\n    case PimActionTypes.SET_IS_GETTING_SERIES_DUPLICATE_PRODUCTS_BY_ID: {\n      const {\n        payload\n      } = action as SetIsGettingSeriesDuplicateProductsByIdAction;\n      return state.set('isGettingSeriesDuplicateProducts', payload);\n    }\n    case PimActionTypes.SET_SELECTED_PURE_ATTRIBUTE_OPTION: {\n      const {\n        payload\n      } = action as SetSelectedPureAttributeOptionAction;\n      return state.set('selectedPureAttributeOption', payload.pureAttributeOption);\n    }\n    case PimActionTypes.SET_SELECTED_PURE_ATTRIBUTE: {\n      const {\n        payload\n      } = action as SetSelectedPureAttributeAction;\n      return state.set('selectedPureAttribute', payload.pureAttribute);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS_SECONDARY: {\n      const {\n        payload\n      } = action as SetIsSearchingAttributeOptionsSecondaryAction;\n      return state.set('isSearchingPureAttributeOptionsSecondary', payload.isSearching);\n    }\n    case PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED_SECONDARY: {\n      const {\n        payload\n      } = action as SearchAttributeOptionsSucceededSecondaryAction;\n      return state\n        .set('pureAttributeOptionsSecondary', payload.attributeOptions);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS: {\n      const {\n        payload\n      } = action as SetIsSearchingAllAttributeOptionsAction;\n      return state.set('isSearchingPureAttributeOptions', payload.isSearching);\n    }\n    case PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchAllAttributeOptionsSucceededAction;\n      return state\n        .set('pureAttributeOptions', payload.attributeOptions)\n        .set('pureAttributeOptionsCount', payload.count);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTES_SECONDARY: {\n      const {\n        payload\n      } = action as SetIsSearchingAllAttributesSecondaryAction;\n      return state.set('isSearchingPureAttributesSecondary', payload.isSearching);\n    }\n    case PimActionTypes.SEARCH_ALL_ATTRIBUTES_SUCCEEDED_SECONDARY: {\n      const {\n        payload\n      } = action as SearchAllAttributesSucceededSecondaryAction;\n      return state\n        .set('pureAttributesSecondary', payload.attributes);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_ALL_ATTRIBUTES: {\n      const {\n        payload\n      } = action as SetIsSearchingAllAttributesAction;\n      return state.set('isSearchingPureAttributes', payload.isSearching);\n    }\n    case PimActionTypes.SEARCH_ALL_ATTRIBUTES_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchAllAttributesSucceededAction;\n      return state\n        .set('pureAttributes', payload.attributes)\n        .set('pureAttributesCount', payload.count);\n    }\n    case PimActionTypes.SET_IS_FETCHING_ATTRIBUTE_OPTIONS: {\n      const {\n        payload\n      } = action as SetIsFetchingAttributeOptionsAction;\n      return state.set('isFetchingPimAttributeOptions', payload);\n    }\n    case PimActionTypes.SET_IS_ADDING_PIM_SERIES_DRAFT: {\n      const {\n        payload\n      } = action as SetIsAddingPimSeriesDraftAction;\n      return state.set('isAddingDraft', payload.isAdding);\n    }\n    case PimActionTypes.GET_PRODUCT_BY_ID: {\n      return state.withMutations(ctx => {\n        ctx\n          .set('isFetchingProduct', true)\n          .set('product', Map() as IMap<Product>);\n      });\n    }\n    case PimActionTypes.GET_PRODUCT_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetProductByIdSucceededAction;\n      const {\n        product\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx\n          .set('isFetchingProduct', false)\n          .set('product', product);\n      });\n    }\n    case PimActionTypes.GET_PRODUCT_BY_ID_FAILED: {\n      return state.set('isFetchingProduct', false);\n    }\n    case PimActionTypes.RESET_PRODUCT: {\n      return state.set('product', Map() as IMap<Product>);\n    }\n    case PimActionTypes.SET_IS_PUBLISHING: {\n      const {\n        payload\n      } = action as SetIsPublishingAction;\n      const {\n        isPublishing\n      } = payload;\n      return state.set('isPublishing', isPublishing);\n    }\n    case PimActionTypes.SEARCH_FIRM_SERIES_FAILED: {\n      return state.set('searchingFirmSeries', false);\n    }\n    case PimActionTypes.SEARCH_FIRM_SERIES_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchFirmSeriesSucceededAction;\n      const {\n        firmSeries,\n        hasNextPage,\n        firmSeriesCount = 0,\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx.set('firmSeries', firmSeries);\n        ctx.set('firmSeriesCount', firmSeriesCount);\n        ctx.set('firmSeriesHasNextPage', hasNextPage);\n        ctx.set('searchingFirmSeries', false);\n      });\n    }\n    case PimActionTypes.SEARCH_FIRM_SERIES:\n    case PimActionTypes.DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES: {\n      return state.set('searchingFirmSeries', true);\n    }\n    case PimActionTypes.GET_FIRM_SERIES_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFirmSeriesByIdSucceededAction;\n\n      const {\n        firmSeries,\n      } = payload;\n\n      return state.set('selectedFirmSeries', firmSeries);\n    }\n    case PimActionTypes.SET_SELECTED_FIRM_SERIES_ID: {\n      const {\n        payload\n      } = action as SetSelectedFirmSeriesIdAction;\n\n      return state.set('selectedFirmSeriesId', payload);\n    }\n    case PimActionTypes.GET_FIRM_SERIES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFirmSeriesSucceededAction;\n\n      const {\n        firmSeries,\n      } = payload;\n\n      return state.set('firmSeries', firmSeries);\n    }\n    case PimActionTypes.SET_SELECTED_ATTRIBUTE_ID: {\n      const {\n        payload\n      } = action as SetSelectedAttributeIdAction;\n\n      return state.set('selectedAttributeId', payload);\n    }\n    case PimActionTypes.SEARCH_ATTRIBUTE_OPTIONS_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchAttributeOptionsSucceededAction;\n\n      const {\n        attributeId,\n        pimAttributeOptions\n      } = payload;\n\n      return state.setIn(['pimAttributeOptions', attributeId], pimAttributeOptions);\n    }\n    case PimActionTypes.SEARCH_ATTRIBUTES_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchAttributesSucceededAction;\n      return state.set('pimAttributes', payload);\n    }\n    case PimActionTypes.SET_SELECTED_PIM_PRODUCT_ID: {\n      const {\n        payload\n      } = action as SetSelectedPimProductIdAction;\n      return state.set('selectedPimProductId', payload.selectedPimProductId);\n    }\n    case PimActionTypes.UPDATE_PIM_SERIES_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdatePIMSeriesSucceededAction;\n      return state.withMutations(ctx => {\n        const selectedPimSeries = state.get('selectedPimSeries');\n        if (selectedPimSeries.size && selectedPimSeries.get('id') === payload.get('id')) {\n          ctx.set('selectedPimSeries', payload);\n        }\n        ctx.update(\n          'searchedSeries',\n          (stateSeries) => stateSeries.map(series => {\n            return payload.get('id') === series.get('id') ? payload : series;\n          })\n        );\n      });\n    }\n    case PimActionTypes.SEARCH_RECOMMENDED_ATTRIBUTES_SUCCESS: {\n      const {\n        payload\n      } = action as SearchRecommendedAttributesSuccessAction;\n      return state.set('mandatoryRecommendedAttributes', payload);\n    }\n    case PimActionTypes.UPDATE_PIM_PRODUCT_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdatePIMProductSucceededAction;\n      return state.update('pimProductsList', (stateProducts) => stateProducts.map(product => {\n        return payload.get('id') === product.get('id') ? payload : product;\n      })\n      );\n    }\n    case PimActionTypes.EDIT_FIRM_PRODUCT_OR_PACKAGE_SUCCEEDED: {\n      const {\n        payload\n      } = action as EditFirmProductOrPackageSucceededAction;\n      let newState = state.update('pimProductsPackages', (products) => products.map(product => {\n        if (product.get('flag') === 'package') {\n          return payload.get('id') === product.get('id') ? payload : product.set('products', product.get('products').map((packageProduct) => {\n            return packageProduct.get('id') === payload.get('id') ? payload : packageProduct;\n          }));\n        }\n        return payload.get('id') === product.get('id') ? payload : product;\n      }));\n      if (newState.get('parentSharedFirmProducts')?.size && payload.get('flag') !== 'package') {\n        newState = newState.update('parentSharedFirmProducts', (products) => products.map(product => {\n          return payload.get('id') === product.get('id') ? payload as IMap<FirmProduct> : product;\n        }));\n      }\n      return newState;\n    }\n    case PimActionTypes.ADD_PIM_PRODUCT_SUCCEEDED: {\n      const {\n        payload\n      } = action as AddPimProductSucceededAction;\n      return state.set('pimProductsList', state.get('pimProductsList').push(payload.product));\n    }\n    case PimActionTypes.ADD_ATS_LIBRARY_PRODUCT_SUCCEEDED: {\n      const {\n        payload\n      } = action as AddATSLibraryProductSucceededAction;\n      return state.set('pimProductsList', state.get('pimProductsList').push(payload.product));\n    }\n    case PimActionTypes.SEARCH_SERIES: {\n      return state.set('searchingSeries', true);\n    }\n    case PimActionTypes.LOADING_SERIES: {\n      return state.set('searchingSeries', true);\n    }\n    case PimActionTypes.SEARCH_SERIES_SUCCEEDED: {\n      const { payload } = action as SearchSeriesSucceededAction;\n      const {\n        series,\n        seriesHasNextPage\n      } = payload;\n      return state.withMutations(mutableState => {\n        mutableState\n          .set('searchedSeries', series)\n          .set('seriesHasNextPage', seriesHasNextPage)\n          .set('searchingSeries', false);\n      });\n    }\n    case PimActionTypes.SEARCH_SERIES_FAILED: {\n      return state.set('searchingSeries', false);\n    }\n    case PimActionTypes.LOADING_SERIES_FINISHED: {\n      return state.set('searchingSeries', false);\n    }\n    // temp FE solution for BE issue\n    case PimActionTypes.IS_ACTIVE_PRODUCT: {\n      return state.set('isInactiveProduct', false);\n    }\n    case PimActionTypes.IS_INACTIVE_PRODUCT: {\n      return state.set('isInactiveProduct', true);\n    }\n    case PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_PACKAGES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as QuickSearchPimProductsPackagesSucceeded;\n      const {\n        results\n      } = payload;\n      return state.set('pimProductsPackages', results);\n    }\n    case PimActionTypes.SEARCHING_PIM_PRODUCTS_PACKAGES: {\n      const {\n        payload\n      } = action as SearchingPimProductsPackagesAction;\n      return state.set('searchingPimProductsPackages', payload);\n    }\n    case PimActionTypes.SEARCH_PARENT_SHARED_FIRM_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchParentSharedFirmProductsSucceeded;\n      const {\n        results\n      } = payload;\n      return state.set('parentSharedFirmProducts', results);\n    }\n    case PimActionTypes.SEARCHING_PARENT_SHARED_FIRM_PRODUCTS: {\n      const {\n        payload\n      } = action as SearchingParentSharedFirmProductsAction;\n      return state.set('searchingParentSharedFirmProducts', payload);\n    }\n    case PimActionTypes.RESET_QUOTE_SEARCH_PRODUCTS: {\n      return state.set('pimProductsPackages', List()).set('parentSharedFirmProducts', List());\n    }\n    case PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as QuickSearchPimProductsSucceeded;\n      const {\n        results\n      } = payload;\n      return state.set('pimProducts', results);\n    }\n    case PimActionTypes.DELETE_FIRM_PRODUCT_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteFirmProductSucceeded;\n      const productId = payload.productId;\n      const pimProductsPackages = state.get('pimProductsPackages');\n      const index = pimProductsPackages.findIndex(i => i.get('id') === productId);\n      return state.deleteIn(['pimProductsPackages', String(index)]);\n    }\n    case PimActionTypes.SEARCH_PIM_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchPimProductsSucceeded;\n      const {\n        results,\n        hasNextPage\n      } = payload;\n      return state.set('pimProductsList', results).set('pimProductsListHasNextPage', hasNextPage);\n    }\n    case PimActionTypes.SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS: {\n      const {\n        payload,\n      } = action as SetSearchBodyAndSearchPimProductsAction;\n      const {\n        filters,\n        options\n      } = payload;\n      return state.withMutations(ctx => {\n        filters && ctx.set('pimProductsListSearchFilters', filters); // tslint:disable-line\n        options && ctx.set('pimProductsListSearchOptions', options); // tslint:disable-line\n      });\n    }\n    case PimActionTypes.RESET_SEARCH_PIM_PRODUCTS_SEARCH_BODY: {\n      return state.set('pimProductsListSearchFilters', {}).set('pimProductsListSearchOptions', {});\n    }\n    case PimActionTypes.UPDATE_STORE_FIRM_PRODUCT: {\n      const {\n        payload,\n      } = action as UpdateStoreFirmProductAction;\n      const {\n        firmProduct\n      } = payload;\n      return state.withMutations(ctx => {\n        const index = ctx.get('firmProductsList').findIndex((product: IMap<FirmProduct>) => product.get('id') === firmProduct.get('id'));\n        if (index !== -1) {\n          ctx.setIn(['firmProductsList', index], firmProduct);\n        }\n      });\n    }\n    case PimActionTypes.FIRM_PRODUCT_CREATED_PENDING_INDEX: {\n      const {\n        payload,\n      } = action as FirmProductCreatedPendingIndexAction;\n      const { firmProduct, at } = payload;\n      if (firmProduct == null || firmProduct.get('id') == null) {\n        return state;\n      }\n      return state.withMutations(ctx => {\n        const id = firmProduct.get('id');\n        const kept = (ctx.get('pendingCreatedFirmProducts') as List<IMap<any>>)\n          .filter((p: IMap<any>) => p.getIn(['firmProduct', 'id']) !== id);\n        ctx.set(\n          'pendingCreatedFirmProducts',\n          kept.unshift(Map({ firmProduct, at }) as IMap<any>) as List<IMap<any>>,\n        );\n      });\n    }\n    case PimActionTypes.SEARCH_FIRM_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchFirmProductsSucceeded;\n      const {\n        results,\n        hasNextPage,\n        count = 0,\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx.set('firmProductsList', results);\n        ctx.set('firmProductsListHasNextPage', hasNextPage);\n        ctx.set('firmProductsListCount', count);\n        ctx.set('isFetchingFirmProducts', false);\n\n        // Drop a pending row the moment the index catches up, and drop a stale\n        // one regardless. Both conditions matter: without the first the row\n        // renders twice, and without the second a product that does not match\n        // the current filters stays pinned to the list forever.\n        const returned = (results as List<IMap<any>>)\n          ?.map((r: IMap<any>) => r.get('id'))\n          ?.toSet();\n        const cutoff = Date.now() - PENDING_CREATED_TTL_MS;\n        ctx.set(\n          'pendingCreatedFirmProducts',\n          (ctx.get('pendingCreatedFirmProducts') as List<IMap<any>>).filter(\n            (pending: IMap<any>) =>\n              pending.get('at') > cutoff &&\n              !returned?.has(pending.getIn(['firmProduct', 'id'])),\n          ) as List<IMap<any>>,\n        );\n      });\n    }\n    case PimActionTypes.QUICK_SEARCH_FIRM_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as QuickSearchFirmProductsSucceeded;\n      const {\n        results,\n        hasNextPage,\n        count\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx.set('quickSearchFirmProductsList', results);\n        ctx.set('quickSearchFirmProductsListHasNextPage', hasNextPage);\n        ctx.set('quickSearchFirmProductsListCount', count);\n        ctx.set('isLoadingQuickSearchFirmProducts', false);\n      });\n    }\n    case PimActionTypes.SEARCH_SHARED_PRODUCTS: {\n      return state.set('isFetchingSharedProducts', true);\n    }\n    case PimActionTypes.SEARCH_SHARED_PRODUCTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchSharedProductsSucceeded;\n      const {\n        results\n      } = payload;\n      return state.withMutations(ctx => {\n        ctx.set('sharedProductsList', results);\n        ctx.set('isFetchingSharedProducts', false);\n      });\n    }\n    case PimActionTypes.SEARCH_SHARED_PRODUCTS_FAILED: {\n      return state.set('isFetchingSharedProducts', false);\n    }\n    case PimActionTypes.RESET_PRODUCT_LIBRARY_RESULTS: {\n      return state.withMutations((ctx) => {\n        ctx.set('pimProducts', INITIAL_STATE.get('pimProducts'));\n        ctx.set('sharedProductsList', INITIAL_STATE.get('sharedProductsList'));\n      });\n    }\n    case PimActionTypes.GET_SERIES_FROM_PIM_SERVICE_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetSeriesFromPimServiceSucceededAction;\n      return state.set('selectedPimSeries', payload);\n    }\n    case PimActionTypes.RESET_PIM_STATE: {\n      const {\n        payload\n      } = action as ResetPimStateAction;\n      return state.set(payload, INITIAL_STATE.get(payload));\n    }\n    case PimActionTypes.SEARCH_FIRM_PRODUCTS:\n    case PimActionTypes.FETCHING_FIRM_PRODUCTS: {\n      return state.set('isFetchingFirmProducts', true);\n    }\n    case PimActionTypes.QUICK_SEARCH_FIRM_PRODUCTS: {\n      return state.set('isLoadingQuickSearchFirmProducts', true);\n    }\n    case PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_LOADING: {\n      const {\n        payload\n      } = action as QuickSearchPimProductsLoadingAction;\n      return state.set('quickSearchPimProductsLoading', payload);\n    }\n    case PimActionTypes.MATCHING_PRODUCT_CHECKING: {\n      const {\n        payload\n      } = action as MatchingProductCheckingAction;\n      return state.set('matchingProductChecking', payload);\n    }\n    case PimActionTypes.GET_PIM_MATCHING_PRODUCT_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetPimMatchingProductSucceededAction;\n      const {\n        matchingProduct\n      } = payload;\n      return state.set('pimMatchingProduct', matchingProduct);\n    }\n    case PimActionTypes.GET_MATCHING_ATTRIBUTES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetMatchingAttributesSucceededAction;\n      const {\n        matchingAttributes\n      } = payload;\n      return state.set('pimMatchingAttributes', matchingAttributes);\n    }\n    case PimActionTypes.SET_IS_SEARCHING_PIM_CATEGORIES: {\n      const {\n        payload\n      } = action as SetIsSearchingPimCategoriesAction;\n      return state.set('isSearchingPimCategories', payload);\n    }\n    case PimActionTypes.SEARCH_PIM_CATEGORIES_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchPimCategoriesSucceededAction;\n      return state.set('pimCategories', payload.pimCategories);\n    }\n    case PimActionTypes.BULK_EXPORT_PRODUCTS_LOADING: {\n      const {\n        payload\n      } = action as BulkExportProductsLoadingAction;\n      return state.set('isExportingProducts', payload);\n    }\n    // case PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG_LOADING: {\n    //   const {\n    //     payload\n    //   } = action as GetBulkExportProductsConfigLoadingAction;\n    //   return state.set('isExportingProducts', payload);\n    // }\n    case PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS: {\n      const {\n        payload\n      } = action as GetBulkExportProductsConfigSucceededAction;\n      return state.set('firmExportFieldsConfig', payload.firmConfig);\n    }\n    case PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS: {\n      const {\n        payload\n      } = action as SaveBulkExportProductsConfigSucceededAction;\n      return state.set('firmExportFieldsConfig', payload.firmConfig);\n    }\n    case PimActionTypes.BULK_IMPORT_PRODUCTS_LOADING: {\n      const {\n        payload\n      } = action as BulkImportProductsLoadingAction;\n      return state.set('isImportingProducts', payload);\n    }\n    case PimActionTypes.SET_BULK_IMPORT_PRODUCTS_PROGRESS: {\n      const {\n        payload\n      } = action as SetBulkImportProductsProgressAction;\n      return state.set('importProductsProgress', payload);\n    }\n    case PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_LOADING: {\n      const {\n        payload\n      } = action as BulkImportProductsLoadingAction;\n      return state.set('isDownloadingTemplate', payload);\n    }\n    case PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_SUCCESS: {\n      const {\n        payload\n      } = action as BulkImportProductsLoadingAction;\n      return state.set('isDownloadTemplateSuccess', payload);\n    }\n    case PimActionTypes.SET_IS_GETTING_FIRM_PRODUCT_BY_ID: {\n      const {\n        payload\n      } = action as SetIsGettingFirmProductByIdAction;\n      return state.set('isFetchingFirmProduct', payload.isFetchingFirmProduct);\n    }\n    case PimActionTypes.SET_IS_GETTING_PACKAGE_BY_ID: {\n      const {\n        payload\n      } = action as SetIsGettingPackageByIdAction;\n      return state.set('isFetchingPackage', payload.isFetchingPackage);\n    }\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport SavedSuccessfully from '../SuccessDrawer/SavedSuccessfully';\nimport {Grid} from '@material-ui/core';\ninterface IProps {\n    toggleDrawer: () => void;\n}\n\nconst SuccessDrawer: React.FC<IProps> = ({ toggleDrawer }) => {\n    const { t } = useTranslation('translations');\n    return (\n        <Grid>\n            <DrawerEditHeader\n                title={t('atsLibraryProductDrawer.createLibraryProduct')}\n                handleClose={toggleDrawer}\n            />\n            <SavedSuccessfully\n                caption={t('atsLibraryProductDrawer.productSavedMessage')}\n            />\n        </Grid>\n    );\n};\n\nexport default SuccessDrawer;","import { Box, createStyles, Grid, IconButton, InputLabel, LinearProgress, makeStyles, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { SeriesProductFile } from '../../models';\nimport useFileUpload, { ERROR_TYPE } from '../../hooks/useFileUpload';\nimport { IProductFile } from '../../models/File';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport {FORM_NAME} from './DrawerView';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n    hiddenInput: {\n        display: 'none',\n    },\n    icon: {\n        marginRight: theme.spacing(1),\n        width: 14,\n        height: 14\n    },\n    fileName: {\n        cursor: 'pointer',\n        color: theme.palette.primary[700],\n        textOverflow: 'ellipsis',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap'\n    },\n    mediaLabel: {\n        marginBottom: theme.spacing(),\n        fontSize: theme.typography.body2.fontSize,\n    },\n    deleteMessageContainer: {\n        backgroundColor: theme.palette.secondary[50],\n        padding: theme.spacing(.5),\n        marginTop: theme.spacing()\n    },\n    checkIcon: {\n        margin: theme.spacing(.5, .5, .5, .25),\n        width: 14,\n        height: 14\n    }\n}));\n\ninterface ISpecSheetUploadComponentProps {\n    mediaKey: string;\n    tooltip: string;\n    accept: string;\n    label: string;\n    atsMediaTooltip: string;\n    mediaDeleteMessage: string;\n}\n\ninterface ISpecSheetUploadProps extends ISpecSheetUploadComponentProps {\n    dispatch: React.Dispatch<IAction>;\n    formValues: any;\n}\n\nconst SpecSheetUpload: React.FC<ISpecSheetUploadProps & WithTranslation> = ({\n                                                                                mediaKey,\n                                                                                accept,\n                                                                                tooltip,\n                                                                                formValues,\n                                                                                label,\n                                                                                mediaDeleteMessage,\n                                                                                dispatch,\n                                                                                t,\n                                                                            }) => {\n\n    const [displayMediaDeleteMessage, setDisplayMediaDeleteMessage] = React.useState(false);\n\n    const classes = useStyles();\n    const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n    const fileName = formFile.getIn(['media', 'en', mediaKey, 'filename']);\n    const isOverride = formFile.getIn(['media', 'en', mediaKey, 'isOverride']);\n    const fileId = formFile.getIn(['media', 'en', mediaKey, 'fileId']);\n    const hasValidFile = fileId && isOverride;\n    const {\n        fileState: {\n            uploadedFile,\n            loadingPercentage,\n            isUploading,\n            uploadErr,\n        },\n        setUploadErr,\n        setFile\n    } = useFileUpload(['PDF']);\n\n    const usePrevious = <T extends unknown>(value: T): T | undefined => {\n        const ref = React.useRef<T>();\n        React.useEffect(() => {\n            ref.current = value;\n        });\n        return ref.current;\n    };\n    const prevIsOverride = usePrevious(isOverride);\n\n    React.useEffect(() => {\n        if (prevIsOverride && !isOverride) {\n            setDisplayMediaDeleteMessage(true);\n        } else {\n            setDisplayMediaDeleteMessage(false);\n        }\n    }, [isOverride]);\n\n    React.useEffect(() => {\n        if (!uploadedFile) {\n            return;\n        }\n\n        const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n            ctx.updateIn(['media', 'en', mediaKey], (val: IMap<IProductFile>) => {\n                return (val || Map() as IMap<IProductFile>).merge(fromJS({\n                    fileId: uploadedFile.get('id'),\n                    filename: uploadedFile.get('origFileName'),\n                    mimeType: uploadedFile.get('mediaType'),\n                    size: uploadedFile.get('size'),\n                    isOverride: true\n                }));\n            });\n        });\n        dispatch(change(FORM_NAME, 'file', transformedFile));\n    }, [uploadedFile]);\n\n    return (\n        <Grid\n            container={true}\n            alignItems='center'\n            justify='space-between'\n        >\n            <InputLabel className={classes.mediaLabel} shrink={true}>{label}</InputLabel>\n            <Grid\n                item={true}\n                xs={12}\n                wrap='nowrap'\n                alignItems='center'\n                container={true}\n            >\n                {\n                    isUploading\n                        ? (\n                            <Box width='100%'>\n                                <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='secondary' style={{ flexGrow: 1 }} />\n                                <Typography>{loadingPercentage}%</Typography>\n                            </Box>\n                        )\n                        : uploadErr\n                            ? (\n                                <>\n                                    <WarningRoundedIcon color='error' fontSize='small' className={classes.icon} />\n                                    <Typography color='error' variant='body2'>\n                                        {\n                                            uploadErr === ERROR_TYPE.size\n                                                ? t('productDrawer.overLimitMessage')\n                                                : uploadErr === ERROR_TYPE.type\n                                                    ? t('shopDrawingPrint.notPDF')\n                                                    : t('productDrawer.notUploaded')\n                                        }\n                                    </Typography>\n                                </>\n                            )\n                            : hasValidFile ?\n                                    <Tooltip title={fileName}>\n                                        <label htmlFor={mediaKey} style={{ overflow: 'hidden' }}>\n                                            <Typography className={classes.fileName}>\n                                                { fileName }\n                                            </Typography>\n                                        </label>\n                                    </Tooltip>\n                                : null\n                }\n            </Grid>\n            {\n                displayMediaDeleteMessage && (\n                    <Grid container={true} wrap='nowrap' className={classes.deleteMessageContainer}>\n                        <CheckCircleIcon color='secondary' className={classes.checkIcon} />\n                        <Typography color='secondary' variant='body2'>\n                            {mediaDeleteMessage}\n                        </Typography>\n                    </Grid>\n                )\n            }\n            <Grid\n                item={true}\n                xs={12}\n                container={true}\n                alignContent='center'\n                justify='flex-end'\n            >\n                <input\n                    className={classes.hiddenInput}\n                    type='file'\n                    name='file'\n                    onChange={(e) => {\n                        setFile(e.target.files[0]);\n                        e.target.value = null;\n                    }}\n                    accept={accept}\n                    id={mediaKey}\n                />\n                <Grid\n                    container={true}\n                    justify='flex-end'\n                >\n                    <span>\n                      <IconButton\n                          disabled={!isOverride}\n                          onClick={() => {\n                              dispatch(change(FORM_NAME, `file`, formFile.deleteIn(['media', 'en', mediaKey]).deleteIn(['media', mediaKey])));\n                          }}\n                      >\n                        <DeleteIcon />\n                      </IconButton>\n                    </span>\n                    <label htmlFor={mediaKey}>\n                        <Tooltip title={tooltip}>\n                         <span>\n                            <IconButton\n                                disabled={isUploading}\n                                component='span'\n                            >\n                              <CloudUploadIcon />\n                            </IconButton>\n                          </span>\n                        </Tooltip>\n                    </label>\n                </Grid>\n            </Grid>\n        </Grid>\n    );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n    formValues: getFormValues(FORM_NAME),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<ISpecSheetUploadComponentProps>>(\n    withTranslation('translations'),\n    connect(mapStateToProps, mapDispatchToProps),\n)(SpecSheetUpload);","import { Box, Button, createStyles, Dialog, DialogContent, DialogActions, FormControl, Grid, IconButton, InputLabel, LinearProgress, makeStyles, TextField, Theme, Tooltip, Typography } from '@material-ui/core';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { fromJS, List, Map } from 'immutable';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { compose } from 'redux';\nimport { change } from 'redux-form';\nimport { getFormValues } from 'redux-form/immutable';\nimport { createStructuredSelector } from 'reselect';\nimport { WithTranslation, withTranslation } from 'react-i18next';\nimport WarningRoundedIcon from '@material-ui/icons/WarningRounded';\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\nimport { SeriesProductFile } from '../../models';\nimport useFileUpload, { ERROR_TYPE } from '../../hooks/useFileUpload';\nimport { IProductFile } from '../../models/File';\nimport { FORM_NAME } from './DrawerView';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { IMediaFiles } from '../../models/SeriesProductFile';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport HttpIcon from '@material-ui/icons/Http';\nimport { isURL } from '../../pages/SeriesEditPage/Attachments/EditLink';\nimport { truncate } from 'lodash';\n\nconst useStyles = makeStyles((theme: Theme) => createStyles({\n    hiddenInput: {\n        display: 'none',\n    },\n    icon: {\n        marginRight: theme.spacing(1),\n        width: 14,\n        height: 14\n    },\n    fileName: {\n        cursor: 'pointer',\n        color: theme.palette.primary[700],\n        textOverflow: 'ellipsis',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap'\n    },\n    mediaLabel: {\n        marginBottom: theme.spacing(),\n        fontSize: theme.typography.body2.fontSize,\n    },\n    deleteMessageContainer: {\n        backgroundColor: theme.palette.secondary[50],\n        padding: theme.spacing(.5),\n        marginTop: theme.spacing()\n    },\n    checkIcon: {\n        margin: theme.spacing(.5, .5, .5, .25),\n        width: 14,\n        height: 14\n    },\n    url: {\n        cursor: 'pointer',\n        color: theme.palette.primary[700],\n        textOverflow: 'ellipsis',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap'\n    },\n    input: {\n        padding: theme.spacing(0.5, 1.75),\n        fontSize: theme.typography.body1.fontSize\n    },\n    noMargin: {\n        marginLeft: 0,\n        marginRight: 0,\n    },\n    linkDialog: {\n        width: 325\n    }\n}));\n\ninterface IMediaRowComponentProps {\n    mediaKey: string;\n    uploadTooltip: string;\n    openLinkTooltip: string;\n    accept: string;\n    label: string;\n    mediaDeleteMessage: string;\n    linkLabel: string;\n    linkPlaceholder: string;\n}\n\ninterface IMediaRowProps extends IMediaRowComponentProps {\n    dispatch: React.Dispatch<IAction>;\n    formValues: any;\n}\n\n\nconst MediaRow: React.FC<IMediaRowProps & WithTranslation> = ({\n                                                                  mediaKey,\n                                                                  accept,\n                                                                  uploadTooltip,\n                                                                  openLinkTooltip,\n                                                                  formValues,\n                                                                  label,\n                                                                  mediaDeleteMessage,\n                                                                  linkLabel,\n                                                                  linkPlaceholder,\n                                                                  dispatch,\n                                                                  t,\n                                                              }) => {\n    const classes = useStyles();\n    const formFile: IMap<SeriesProductFile> = formValues && formValues.get('file') || Map();\n    const isOverride = formFile.getIn(['media', 'en', mediaKey, 'isOverride']);\n    const fileName = formFile.getIn(['media', 'en', mediaKey, 'filename']);\n    const fileId = formFile.getIn(['media', 'en', mediaKey, 'fileId']);\n    const formURL = formFile.getIn(['media', 'en', mediaKey, 'url']) || '';\n    const [isAttached, setIsAttached] = React.useState(Boolean(formURL));\n    const [open, setOpen] = React.useState(false);\n    const [url, setURL] = React.useState('');\n    const [errorText, setErrorText] = React.useState('');\n    const [displayMediaDeleteMessage, setDisplayMediaDeleteMessage] = React.useState(false);\n\n\n    // this also updates the url field when linking url from ATS library not just from typing in input\n    React.useEffect(() => {\n        setIsAttached(Boolean(formURL));\n    }, [formURL]);\n\n    const {\n        fileState: {\n            uploadedFile,\n            loadingPercentage,\n            isUploading,\n            uploadErr,\n        },\n        setUploadErr,\n        setFile\n    } = useFileUpload(['PDF']);\n\n    const usePrevious = <T extends unknown>(value: T): T | undefined => {\n        const ref = React.useRef<T>();\n        React.useEffect(() => {\n            ref.current = value;\n        });\n        return ref.current;\n    };\n    const prevIsOverride = usePrevious(isOverride);\n\n    React.useEffect(() => {\n        if (prevIsOverride && !isOverride) {\n            setDisplayMediaDeleteMessage(true);\n        } else {\n            setDisplayMediaDeleteMessage(false);\n        }\n    }, [isOverride]);\n\n\n    React.useEffect(() => {\n        if (!uploadedFile) {\n            return;\n        }\n\n        const transformedFile = (List.isList(formFile) ? Map() : formFile).withMutations((ctx) => {\n            ctx.updateIn(['media', 'en', mediaKey], (val: IMap<IProductFile>) => {\n                return (val || Map() as IMap<IProductFile>).merge(fromJS({\n                    fileId: uploadedFile.get('id'),\n                    filename: uploadedFile.get('origFileName'),\n                    mimeType: uploadedFile.get('mediaType'),\n                    size: uploadedFile.get('size'),\n                    isOverride: true\n                }));\n            });\n        });\n        dispatch(change(FORM_NAME, 'file', transformedFile));\n        setURL('');\n    }, [uploadedFile]);\n\n    const handleOpen = () => {\n        setOpen(true);\n    };\n\n    const handleClose = () => {\n        setOpen(false);\n        setErrorText('');\n        if (formURL && url) {\n            setURL('');\n        }\n    };\n\n    return (\n        <Grid\n            container={true}\n            alignItems='center'\n            justify='space-between'\n        >\n            <InputLabel className={classes.mediaLabel} shrink={true}>{label}</InputLabel>\n            <Grid\n                item={true}\n                xs={12}\n                wrap='nowrap'\n                alignItems='center'\n                container={true}\n            >\n                {\n                    isUploading\n                        ? (\n                            <Box width='100%'>\n                                <LinearProgress variant='determinate' value={Number(loadingPercentage)} color='secondary' style={{ flexGrow: 1 }} />\n                                <Typography>{loadingPercentage}%</Typography>\n                            </Box>\n                        )\n                        : uploadErr\n                            ? (\n                                <>\n                                    <WarningRoundedIcon color='error' fontSize='small' className={classes.icon} />\n                                    <Typography color='error' variant='body2'>\n                                        {\n                                            uploadErr === ERROR_TYPE.size\n                                                ? t('productDrawer.overLimitMessage')\n                                                : uploadErr === ERROR_TYPE.type\n                                                    ? t('shopDrawingPrint.notPDF')\n                                                    : t('productDrawer.notUploaded')\n                                        }\n                                    </Typography>\n                                </>\n                            )\n                            : fileName\n                                ? <>\n                                    <Tooltip title={fileName || ''}>\n                                        <label htmlFor={mediaKey} style={{ overflow: 'hidden' }}>\n                                            <Typography className={classes.fileName}>\n                                                { fileName }\n                                            </Typography>\n                                        </label>\n                                    </Tooltip>\n                                </>\n                                : isAttached\n                                    ? <>\n                                        <Tooltip title={formURL || ''}>\n                                            <Typography className={classes.url}>\n                                                { formURL }\n                                            </Typography>\n                                        </Tooltip>\n                                    </>\n                                    : null\n                }\n            </Grid>\n            {\n                displayMediaDeleteMessage && (\n                    <Grid container={true} wrap='nowrap' className={classes.deleteMessageContainer}>\n                        <CheckCircleIcon color='secondary' className={classes.checkIcon} />\n                        <Typography color='secondary' variant='body2'>\n                            {mediaDeleteMessage}\n                        </Typography>\n                    </Grid>\n                )\n            }\n            <Grid\n                item={true}\n                xs={12}\n                container={true}\n                alignContent='center'\n                justify='flex-end'\n            >\n                <input\n                    className={classes.hiddenInput}\n                    type='file'\n                    name='file'\n                    onChange={(e) => {\n                        setFile(e.target.files[0]);\n                        e.target.value = null;\n                    }}\n                    accept={accept}\n                    id={mediaKey}\n                />\n                <Grid container={true} justify='flex-end'>\n                    <span>\n                      <IconButton\n                          disabled={!isOverride}\n                          onClick={() => {\n                              dispatch(change(FORM_NAME, `file`, formFile.deleteIn(['media', 'en', mediaKey]).deleteIn(['media', mediaKey])));\n                              setIsAttached(false);\n                          }}\n                      >\n                        <DeleteIcon />\n                      </IconButton>\n                    </span>\n                    <label htmlFor={mediaKey}>\n                        <Tooltip title={uploadTooltip}>\n                          <span>\n                            <IconButton\n                                disabled={isUploading}\n                                component='span'\n                            >\n                              <CloudUploadIcon />\n                            </IconButton>\n                          </span>\n                        </Tooltip>\n                    </label>\n                    <Tooltip title={openLinkTooltip}>\n                        <span>\n                          <IconButton\n                              // disabled={isUploading}\n                              component='span'\n                              onClick={handleOpen}\n                          >\n                            <HttpIcon />\n                          </IconButton>\n                        </span>\n                    </Tooltip>\n                </Grid>\n            </Grid>\n\n            <Dialog open={open} onClose={handleClose} aria-labelledby='form-dialog-title'>\n                <DialogContent className={classes.linkDialog}>\n                    <FormControl\n                        fullWidth={true}\n                    >\n                        <TextField\n                            type='text'\n                            label={linkLabel}\n                            placeholder={linkPlaceholder}\n                            value={url}\n                            onChange={(event) => setURL(event.target.value)}\n                            InputProps={{\n                                classes: {\n                                    input: classes.input,\n                                }\n                            }}\n                            FormHelperTextProps={{\n                                margin: 'dense',\n                                classes: {\n                                    contained: classes.noMargin,\n                                }\n                            }}\n                            error={Boolean(errorText)}\n                            helperText={errorText}\n                        />\n                    </FormControl>\n                </DialogContent>\n                <DialogActions>\n                    <Button onClick={handleClose} color='primary'>\n                        {t('formButtons.cancel')}\n                    </Button>\n                    <Button\n                        variant='text'\n                        color='primary'\n                        component='span'\n                        // endIcon={<AttachFileIcon color='action' />}\n                        onClick={() => {\n                            if (url && isURL(url)) {\n                                const updated = (List.isList(formFile) ? Map() : formFile)\n                                    .setIn(['media', 'en', mediaKey], Map({\n                                        url,\n                                        isOverride: truncate\n                                    }));\n                                dispatch(change(FORM_NAME, 'file', updated));\n                                setIsAttached(true);\n                                handleClose();\n                            } else {\n                                setErrorText(t('productDrawer.urlValidation'));\n                            }\n                        }}\n                    >\n                        {t('formButtons.attach')}\n                    </Button>\n                </DialogActions>\n            </Dialog>\n        </Grid>\n    );\n};\n\nconst mapStateToProps = (state) => createStructuredSelector({\n    formValues: getFormValues(FORM_NAME),\n})(state);\n\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({ dispatch });\n\nexport default compose<React.FC<IMediaRowComponentProps>>(\n    withTranslation('translations'),\n    connect(mapStateToProps, mapDispatchToProps),\n)(MediaRow);","import * as React from 'react';\nimport {\n    Grid,\n    Theme,\n    Typography,\n    WithStyles,\n    withStyles,\n    Tooltip,\n    Link, TableCell, IconButton,\n} from '@material-ui/core';\nimport { StyleRules } from '@material-ui/core/styles';\nimport { compose, Dispatch } from 'redux';\nimport {\n    withTranslation,\n    WithTranslation,\n} from 'react-i18next';\nimport {Manufacturer, Category, Product} from '../../models';\nimport { IMap, IAction } from 'ats-utils/src/Interfaces';\nimport { connect } from 'react-redux';\nimport { makeSelectOverlayComponentProps } from '../../modules/ApplicationModule/selectors';\nimport { createStructuredSelector } from 'reselect';\nimport {getIn, List, Map} from 'immutable';\nimport { withAtsApi, WithAtsApi } from '../../contexts/AtsApiContext';\nimport DrawerRow from '../DrawerRow';\nimport DrawerEditHeader from '../DrawerEditHeader';\nimport {BaseFieldProps, change, InjectedFormProps, } from 'redux-form';\nimport FieldDropzone, {IFieldDropzoneComponentProps} from '../FieldDropzone';\nimport {uploadFileValidation} from '../TeamManagementUserEditDrawer/Component';\nimport {Field, getFormValues, reduxForm, isInvalid} from 'redux-form/immutable';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {FieldDropzoneStateResetAction, NoPhotoPreviewAction} from '../../modules/ApplicationModule/actions';\nimport DrawerTextFieldRow from '../DrawerTextFieldRow';\nimport {isEmptyOrContent, isNotEmptyStringRequired, maxStringLength, required} from '../../validators';\nimport FieldAutocomplete, {IFieldAutocompleteComponentProps} from '../FieldAutocomplete';\nimport {makeSelectCategory} from '../../modules/AccountModule/selectors';\nimport {GetCategoriesAction} from '../../modules/AccountModule/actions';\nimport SpecSheetUpload from './SpecSheetUpload';\nimport MediaRow from './MediaRow';\nimport DrawerEditCTA from '../DrawerEditCTA';\nimport {AddATSLibraryProductAction} from '../../modules/PimModule/actions';\nimport Api from 'ats-api/src';\nimport Xhr from '../../utils/Xhr';\nimport { GetAllManufacturersAction } from '../../modules/ListModule/actions';\nimport { makeSelectAllManufacturers } from '../../modules/ListModule/selectors';\n\ninterface IProductDrawerViewComponentProps {\n    toggleDrawer: () => void;\n}\n\ninterface IProductDrawerViewProps extends IProductDrawerViewComponentProps {\n    dispatch: Dispatch<IAction>;\n    propsFromRedux: any;\n    formValues: Map<string, any>;\n    manufacturers: List<IMap<Manufacturer>>;\n    categories: List<IMap<Category>>;\n    isInvalid: boolean;\n    atsApi: Api;\n    getManufacturers(): void;\n    getCategories(): void;\n    createProduct(product: IMap<Partial<Product>>, onValidationFailed: () => void): void;\n}\n\ntype ProductDrawerViewType = IProductDrawerViewProps & WithTranslation & WithAtsApi & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps;\n\nclass ProductDrawerView extends React.Component<ProductDrawerViewType, {}> {\n    public componentExist = true;\n    public state = {\n        files: [],\n        imageId: '',\n        validationError: '',\n    };\n    public _maxStringLength = (value) => maxStringLength(32)(value);\n    public removePhoto = () => {\n        const {\n            dispatch\n        } = this.props;\n\n        dispatch(new NoPhotoPreviewAction());\n        dispatch(change(this.props.form, 'imageId', ''));\n        dispatch(change(this.props.form, 'dropzone', ''));\n        this.setState({\n            imageId: ''\n        });\n    }\n    public componentWillUnmount() {\n        this.componentExist = false;\n    }\n\n    public componentDidMount() {\n        const { getCategories, getManufacturers } = this.props;\n        getManufacturers();\n        getCategories();\n    }\n    public onSubmit = async (val) => {\n        // submit form\n        const {\n            atsApi,\n            createProduct,\n            dispatch,\n            t\n        } = this.props;\n\n        const imageArray = await Xhr({ atsApi, files: val.get('dropzone') });\n        const imageId = getIn(imageArray, [0, 'id'], '') || this.state.imageId;\n\n        const brand = val.getIn(['brand', 'value']);\n        const brandId = val.getIn(['brand', 'id']);\n        const categoryName = val.getIn(['categoryName', 'value']);\n        const category = Number(val.getIn(['categoryName', 'id']));\n        const name = val.get('productNumber');\n        const file = val.get('file') || Map();\n        const description = val.get('description');\n        const upc = val.get('upc');\n\n        const transformedValues: any = Map<string, any>().withMutations(ctx => {\n            if (file) {\n                ctx.set('file', file);\n            }\n            if (imageId) {\n                ctx.setIn(['file', 'images', 'main', 'fileId'], imageId);\n                ctx.delete('dropzone');\n                dispatch(new FieldDropzoneStateResetAction());\n            } else {\n                ctx.deleteIn(['file', 'images', 'main']);\n            }\n            if (description && description.trim()) {\n                ctx.set('description', description);\n            }\n            ctx.set('name', name);\n            ctx.set('productNumber', name);\n            ctx.set('brand', brand);\n            ctx.set('brandId', brandId);\n            ctx.set('isCompetitor', true);\n            ctx.set('categoryName', categoryName);\n            ctx.set('category', category);\n            ctx.set('upc', upc);\n        });\n        createProduct(transformedValues, () => {\n            if (this.componentExist) {\n                this.setState({\n                    validationError: t('atsLibraryProductDrawer.alreadyExist'),\n                });\n            }\n        });\n    }\n    public render() {\n        const { imageId } = this.state;\n        const {\n            toggleDrawer,\n            t,\n            classes,\n            formValues,\n            manufacturers,\n            categories,\n            handleSubmit,\n            // tslint:disable-next-line:no-shadowed-variable\n            isInvalid\n        } = this.props;\n\n        const filteredManufacturers = manufacturers?.filter(option => option.get('value') !== 'Generic');\n\n        return (\n            <Grid\n                container={true}\n                direction='column'\n                wrap='nowrap'\n            >\n                {/* header */}\n                <DrawerEditHeader\n                    title={t('atsLibraryProductDrawer.createLibraryProduct')}\n                    handleClose={toggleDrawer}\n                />\n                <form onSubmit={handleSubmit(this.onSubmit)}>\n                    <Grid\n                        container={true}\n                        direction='column'\n                        wrap='nowrap'\n                        className={classes.body}\n                    >\n                        <Grid item={true}>\n                            <Typography variant='body2' color='textPrimary'>{t('libraryProductDrawer.newProduct')}</Typography>\n                        </Grid>\n                        <Grid container={true} direction='column' justify='center' className={classes.uploadPhoto}>\n                            <Grid container={true} justify='space-between'>\n                                {\n                                    (imageId || (formValues && formValues.get('dropzone'))) &&\n                                    <IconButton onClick={this.removePhoto} size='small' className={classes.bottonMargin}>\n                                        <FontAwesomeIcon icon='trash-alt' size='sm' />\n                                    </IconButton>\n                                }\n                            </Grid>\n                            <Field<BaseFieldProps<IFieldDropzoneComponentProps>>\n                                component={FieldDropzone}\n                                name='dropzone'\n                                validate={uploadFileValidation}\n                                props={{\n                                    initialImage: imageId,\n                                    renderSuggestText: () => (\n                                        <Grid container={true} item={true} justify='center'>\n                                            <Typography variant='body2' className={classes.suggestion}>{t('libraryProductDrawer.suggest')}</Typography>\n                                            <Typography variant='body2' className={classes.suggestion}>{t('libraryProductDrawer.suggestFormat')}</Typography>\n                                        </Grid>\n                                    )\n                                }}\n                            />\n                        </Grid>\n                        <Grid container={true} direction='column' justify='center'>\n                            <DrawerTextFieldRow\n                                name='productNumber'\n                                props={{\n                                    label: t('libraryProductDrawer.productNumber'),\n                                    require: true\n                                }}\n                                onChange={() => {\n                                    this.setState({\n                                        validationError: '',\n                                    });\n                                }}\n                                removeIconSpace={true}\n                                justify='flex-start'\n                                multiLine={10}\n                                validate={isNotEmptyStringRequired}\n                            />\n                            {/*<DrawerTextFieldRow*/}\n                            {/*    name='manufacturer'*/}\n                            {/*    props={{*/}\n                            {/*        label: t('libraryProductDrawer.manufacturerName'),*/}\n                            {/*        require: true*/}\n                            {/*    }}*/}\n                            {/*    removeIconSpace={true}*/}\n                            {/*    justify='flex-start'*/}\n                            {/*    multiLine={10}*/}\n                            {/*    validate={isNotEmptyStringRequired}*/}\n                            {/*/>*/}\n                            <DrawerRow drawerView={false} childWidth='100%' justify='flex-end'>\n                                <Tooltip\n                                    title={formValues?.getIn(['brand', 'value']) || ''}\n                                    classes={{ popper: classes.tooltipPlacement }}\n                                >\n                                    <div style={{ width: '100%' }}>\n                                        {/* empty div is for tooltip to work properly */}\n                                        <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                            name='brand'\n                                            component={FieldAutocomplete}\n                                            validate={[required]}\n                                            onChange={() => {\n                                                this.setState({\n                                                    validationError: '',\n                                                });\n                                            }}\n                                            props={{\n                                                require: true,\n                                                inputProps: {\n                                                    options: filteredManufacturers.toJS(),\n                                                    label: t('libraryProductDrawer.manufacturerName'),\n                                                    getOptionLabel: option => option ? option.value : null,\n                                                    renderOption: option => option && <Typography>{option.value}</Typography>\n                                                },\n                                                formControlProps: {\n                                                    fullWidth: true\n                                                }\n                                            }}\n                                        />\n                                    </div>\n                                </Tooltip>\n                                <Tooltip\n                                    title={formValues?.getIn(['categoryName', 'value']) || ''}\n                                    classes={{ popper: classes.tooltipPlacement }}\n                                >\n                                    <div style={{ width: '100%' }}>\n                                        {/* empty div is for tooltip to work properly */}\n                                        <Field<BaseFieldProps<IFieldAutocompleteComponentProps>>\n                                            name='categoryName'\n                                            onChange={() => {\n                                                this.setState({\n                                                    validationError: '',\n                                                });\n                                            }}\n                                            component={FieldAutocomplete}\n                                            validate={[required]}\n                                            props={{\n                                                require: true,\n                                                inputProps: {\n                                                    options: categories.toJS(),\n                                                    label: t('libraryProductDrawer.category'),\n                                                    getOptionLabel: option => option ? (option.label || option.value) : null,\n                                                    renderOption: option => option && <Typography>{option.label || option.value}</Typography>\n                                                },\n                                                formControlProps: {\n                                                    fullWidth: true\n                                                }\n                                            }}\n                                        />\n                                    </div>\n                                </Tooltip>\n                            </DrawerRow>\n                            <DrawerTextFieldRow\n                                name='description'\n                                props={{\n                                    label: t('libraryProductDrawer.description'),\n                                }}\n                                removeIconSpace={true}\n                                justify='flex-start'\n                                multiLine={10}\n                            />\n                            <DrawerTextFieldRow\n                                name='upc'\n                                props={{\n                                    label: t('libraryProductDrawer.upc'),\n                                }}\n                                removeIconSpace={true}\n                                justify='flex-start'\n                                validate={[isEmptyOrContent, this._maxStringLength]}\n                            />\n                            <DrawerRow drawerView={false} childWidth='100%' justify='flex-end'>\n                                <SpecSheetUpload\n                                    mediaKey={'shop_drawing'}\n                                    accept={'.pdf'}\n                                    tooltip={t('productDrawer.pdfUploadTooltip')}\n                                    label={t('productDrawer.shopDrawingLabel')}\n                                    atsMediaTooltip={t('productDrawer.atsShopDrawingTooltip')}\n                                    mediaDeleteMessage={t('productDrawer.shopDrawingDeleteMessage')}\n                                />\n                            </DrawerRow>\n                            <DrawerRow drawerView={false} childWidth='100%' justify='flex-end'>\n                                <MediaRow\n                                    mediaKey={'manufacturer_cutsheet'}\n                                    accept={'.pdf'}\n                                    uploadTooltip={t('productDrawer.pdfUploadTooltip')}\n                                    openLinkTooltip={t('productDrawer.attachLinkTooltip')}\n                                    label={t('productDrawer.manufacturerCutsheetLabel')}\n                                    linkLabel={t('productDrawer.manufacturerCutsheetLinkLabel')}\n                                    linkPlaceholder={t('productDrawer.manufacturerCutsheetLinkPlaceholder')}\n                                    mediaDeleteMessage={t('productDrawer.manufacturerCutsheetDeleteMessage')}\n                                />\n                            </DrawerRow>\n                            <DrawerEditCTA\n                                handleClose={toggleDrawer}\n                                disableSubmit={isInvalid}\n                                warningText={this.state.validationError ? <Typography color='error'>{this.state.validationError}</Typography> : null}\n                            />\n                        </Grid>\n                    </Grid>\n                </form>\n            </Grid>\n        );\n    }\n}\n\n\nconst styles = (theme: Theme): StyleRules => ({\n    body: {\n        padding: theme.spacing(3),\n        color: theme.palette.text.primary,\n        lineHeight: '1rem',\n        '& a': {\n            color: theme.palette.primary.main,\n            textDecoration: 'none',\n        },\n    },\n    icon: {\n        marginRight: theme.spacing(1),\n        width: 14,\n        height: 14\n    },\n    uploadPhoto: {\n        height: theme.spacing(24),\n        marginBottom: theme.spacing()\n    },\n    title: {\n        marginBottom: theme.spacing(),\n    },\n    bottonMargin: {\n        marginBottom: theme.spacing(),\n    },\n    suggestion: {\n        color: 'rgba(0,0,0,0.6)',\n    }\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch<IAction>) => {\n    return {\n        getManufacturers: () => {\n            dispatch(new GetAllManufacturersAction());\n        },\n        getCategories: () => {\n            dispatch(new GetCategoriesAction());\n        },\n        createProduct: (product: IMap<Partial<Product>>, onValidationFailed) => {\n            dispatch(new AddATSLibraryProductAction({ product, onValidationFailed }));\n        },\n        dispatch\n    };\n};\n\nconst mapStateToProps = (state, ownProps) => {\n    return createStructuredSelector({\n        manufacturers: makeSelectAllManufacturers(),\n        categories: makeSelectCategory(),\n        propsFromRedux: makeSelectOverlayComponentProps(),\n        formValues: getFormValues(ownProps.form),\n        isInvalid: isInvalid(ownProps.form),\n    })(state);\n};\n\nexport const FORM_NAME = 'libraryProductDrawer';\nexport default compose<React.ComponentClass<IProductDrawerViewComponentProps>>(\n    withStyles(styles),\n    withTranslation('translations'),\n    withAtsApi(),\n    reduxForm({\n        form: FORM_NAME,\n        destroyOnUnmount: true\n    }),\n    connect(mapStateToProps, mapDispatchToProps)\n)(ProductDrawerView);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n    Theme,\n    withStyles,\n    WithStyles,\n    Grid,\n} from '@material-ui/core';\nimport {\n    StyleRules\n} from '@material-ui/core/styles';\nimport {\n    compose,\n} from 'redux';\nimport {\n    withTranslation,\n    WithTranslation,\n} from 'react-i18next';\nimport {\n    connect\n} from 'react-redux';\nimport {\n    IAction,\n    IMap,\n} from 'ats-utils/src/Interfaces';\nimport { createStructuredSelector } from 'reselect';\nimport { FirmProduct } from '../../models';\nimport { makeSelectOverlayComponentContent, makeSelectOverlayComponentProp } from '../../modules/ApplicationModule/selectors';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport SuccessDrawer from './SuccessDrawer';\nimport DrawerView from './DrawerView';\n\nexport const SUCCESS_DRAWER = 'SuccessDrawer';\n\ninterface ILibraryProductDrawerContentProps {\n    product?: IMap<FirmProduct>\n    editAction?: () => void;\n    copyAction?: () => void;\n    deleteAction?: () => void;\n}\n\nexport interface IModalProps {\n}\n\ninterface IProductDrawerProps extends ILibraryProductDrawerContentProps {\n    content: string;\n    dispatch: React.Dispatch<IAction>;\n    modalProps: IModalProps;\n}\n\nexport const LIBRARY_PRODUCT_DRAWER_ID = 'LibraryProductDrawer';\nexport const LIBRARY_PRODUCT_CONTENT_EDIT_KEY = '__LibraryProductDrawerEdit__';\ntype LibraryProductDrawerType = WithTranslation & IProductDrawerProps & WithStyles<keyof ReturnType<typeof styles>>;\nclass LibraryProductDrawer extends React.Component<LibraryProductDrawerType, {}> {\n\n    public componentDidMount = () => {\n    }\n\n    public componentWillUnmount(): void {\n        const { dispatch } = this.props;\n        dispatch(new ToggleOverlayComponentAction({\n            id: LIBRARY_PRODUCT_DRAWER_ID,\n            open: false\n        }))\n    }\n\n    public componentDidUpdate = (prevProps, prevState) => {\n        const { product } = this.props;\n        if (prevProps.product && !product) {\n            this.toggleDrawer();\n        }\n    }\n\n    public toggleDrawer = () => {\n        const {\n            dispatch\n        } = this.props;\n\n        dispatch(new ToggleOverlayComponentAction({\n            id: LIBRARY_PRODUCT_DRAWER_ID\n        }))\n    };\n\n\n    public render() {\n        const {\n            content: _contentString,\n        } = this.props;\n\n        const content = (() => {\n            switch (_contentString) {\n                case SUCCESS_DRAWER: {\n                    return <SuccessDrawer toggleDrawer={this.toggleDrawer}/>\n                }\n                default: {\n                    return <DrawerView toggleDrawer={this.toggleDrawer} />\n                }\n            }\n        })();\n\n        return <Grid>\n            {\n                content\n            }\n        </Grid>\n    }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n    root: {\n        display: 'flex',\n    }\n});\n\nconst mapStateToProps = (state, props: ILibraryProductDrawerContentProps) => {\n    return createStructuredSelector({\n        modalProps: makeSelectOverlayComponentProp(LIBRARY_PRODUCT_DRAWER_ID),\n        content: makeSelectOverlayComponentContent(LIBRARY_PRODUCT_DRAWER_ID),\n    })(state);\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n    return {\n        dispatch,\n    };\n};\n\nexport default compose<React.ComponentClass<ILibraryProductDrawerContentProps>> (\n    withStyles(styles),\n    withTranslation('translations'),\n    connect(mapStateToProps, mapDispatchToProps),\n)(LibraryProductDrawer);\n","export const formatSelectedAttributesForApi = ({ seriesAttributes, selectedAttributesValues }) => {\n  let selectedAttributes = seriesAttributes.withMutations(ctx => {\n    selectedAttributesValues.entrySeq().forEach(entry => {\n      const attributeKey = entry[0];\n      const attributeValue = entry[1];\n      const attributeIsOption = seriesAttributes.getIn([attributeKey, 'isOption']);\n      const seriesAttributeValues = ctx.getIn([attributeKey, 'values']);\n      let filteredValue;\n      if (attributeIsOption) { // checkbox, attributeValue is an array of id\n        filteredValue = seriesAttributeValues.filter(value => attributeValue.includes(value.get('id')));\n      } else { // radio, attributeValue is an id\n        filteredValue = seriesAttributeValues.filter(value => value.get('id') === attributeValue);\n      }\n      ctx.setIn([attributeKey, 'values'], filteredValue);\n    });\n  });\n\n  selectedAttributes = selectedAttributes\n    .map((attr) => attr.set('values', attr.get('values').filter((value) => value.get('status') !== 'deleted')))\n    .filter((attr) => attr.get('values').count());\n\n  return selectedAttributes;\n};","import {\n  call,\n  takeLatest,\n  takeEvery,\n  put,\n  select,\n  all,\n  race,\n  take,\n} from 'redux-saga/effects';\n\nimport {\n  PimActionTypes,\n  AddFirmProductAction,\n  GetProductsOfPackageAction,\n  QuickSearchPimProductsPackagesSucceeded,\n  QuickSearchPimProductsPackages,\n  QuickSearchPimProducts,\n  QuickSearchPimProductsLoadingAction,\n  QuickSearchPimProductsSucceeded,\n  DeleteFirmProductAction,\n  DeleteFirmProductSucceeded,\n  EditFirmProductAction,\n  SearchPimProductsAction,\n  SearchPimProductsSucceeded,\n  SearchFirmProductsAction,\n  SearchFirmProductsSucceeded,\n  DeleteFirmProductAndSearchFirmProductsAction,\n  QuickSearchFirmProductsAction,\n  QuickSearchFirmProductsSucceeded,\n  AddFirmProductFileAction,\n  DeleteFirmProductFileAction,\n  AddFirmProductFileAndGetMediaAction,\n  DeleteFirmProductFileAndGetMediaAction,\n  IsInactiveProductAction,\n  GetSeriesFromPimServiceAction,\n  SearchSeriesSucceededAction,\n  SearchSeriesAction,\n  SearchSeriesFailedAction,\n  UpdatePIMSeriesSucceededAction,\n  DeleteSeriesByIdAction,\n  DeleteSeriesByIdSucceededAction,\n  DeleteSeriesByIdAndSearchSeriesAction,\n  LoadingSeriesFinishedAction,\n  GetSeriesFromPimServiceSucceededAction,\n  UpdatePIMProductSucceededAction,\n  DeleteSeriesProductByIdAction,\n  DeleteSeriesProductByIdSucceededAction,\n  SearchingPimProductsPackagesAction,\n  AddPimProductOrSeriesAction,\n  DeleteSeriesByIdAndSearchXrefAction,\n  DeleteSeriesProductByIdAndSearchXrefAction,\n  AddPimProductSucceededAction,\n  SearchAttributesAction,\n  SearchAttributesSucceededAction,\n  SearchAttributeOptionsSucceededAction,\n  SearchRecommendedAttributesAction,\n  SearchRecommendedAttributesSuccessAction,\n  SearchAttributeOptionsAction,\n  SearchCategoriesAction,\n  GetFirmSeriesAction,\n  GetFirmSeriesSucceededAction,\n  GetFirmSeriesByIdSucceededAction,\n  SearchFirmSeriesAction,\n  SearchFirmSeriesFailedAction,\n  SearchFirmSeriesSucceededAction,\n  AddFirmSeriesAction,\n  AddFirmSeriesSucceededAction,\n  UpdateFirmSeriesAction,\n  DeleteFirmSeriesAction,\n  DeleteFirmSeriesThenSearchFirmSeriesAction,\n  DuplicateSeriesAction,\n  GetPimSeriesdDraftAction,\n  GetPimSeriesdDraftByParentIdAction,\n  AddPimSeriesDraftRawAction,\n  AddPimSeriesDraftAction,\n  AddPimSeriesDraftForDeleteAction,\n  UpdatePimSeriesDraftAction,\n  DeleteSeriesDraftByIdAction,\n  AddPimProductDraftAction,\n  UpdatePIMProductDraftAction,\n  PublishSeriesDraftAction,\n  SetSearchBodyAndSearchPimProductsAction,\n  DeleteSeriesProductByIdThenSearchSeriesProductsAction,\n  AddPimProductAction,\n  AddPimProductThenSearchPimProductsAction,\n  AddPimProductDraftThenSearchPimProductsAction,\n  UpdatePimSeriesDraftForDeleteAction,\n  UpdatePimSeriesDraftRawAction,\n  SetIsPublishingAction,\n  UpdateFirmSeriesAndRedirectAction,\n  AddFirmSeriesAndRedirectAction,\n  GetProductByIdAction,\n  GetProductByIdSucceededAction,\n  SetIsAddingPimSeriesDraftAction,\n  GetProductByIdFailedAction,\n  SetIsFetchingAttributeOptionsAction,\n  SearchAllAttributesAction,\n  SearchAllAttributesSucceededAction,\n  SetIsSearchingAllAttributesAction,\n  SearchAllAttributeOptionsAction,\n  SetIsSearchingAllAttributeOptionsAction,\n  SearchAllAttributeOptionsSucceededAction,\n  CreatePureAttributeAction,\n  ValidateAttributeExistsAction,\n  CreatePureAttributeThenSearchPureAttributesAction,\n  CreatePureAttributeOptionAction,\n  CreatePureAttributeOptionThenSearchPureAttributeOptionsAction,\n  ValidateAttributeOptionExistsAction,\n  DeleteAttributeByIdAction,\n  DeleteAttributeByIdThenSearchAttributesAction,\n  SearchAllAttributesSecondaryAction,\n  SetIsSearchingAllAttributesSecondaryAction,\n  SearchAllAttributesSucceededSecondaryAction,\n  UpdateAttributeAction,\n  UpdateAttributeThenSearchAttributesAction,\n  DeleteAttributeOptionByIdAction,\n  DeleteAttributeOptionByIdThenSearchAttributeOptionsAction,\n  UpdateAttributeOptionAction,\n  UpdateAttributeOptionThenSearchAttributeOptionsAction,\n  SetIsSearchingAttributeOptionsSecondaryAction,\n  SearchAttributeOptionsSucceededSecondaryAction,\n  SearchAttributeOptionsSecondaryAction,\n  AddATSLibraryProductAction,\n  GetSeriesDetailsAction,\n  CheckAdvanceConfigMatchingProductAction,\n  MatchingProductCheckingAction,\n  GetPimMatchingProductSucceededAction,\n  SetIsCreatingAttributeAction,\n  GetMatchingAttributesSucceededAction,\n  SearchSharedProductsAction,\n  SearchSharedProductsSucceeded,\n  SearchSharedProductsFailedAction,\n  GetSeriesDuplicateProductsByIdAction,\n  SetIsGettingSeriesDuplicateProductsByIdAction,\n  GetSeriesDuplicateProductsByIdSucceededAction,\n  GetSeriesDuplicateProductsByIdFailedAction,\n  SearchPimCategoriesAction,\n  SearchPimCategoriesSucceededAction,\n  SetIsSearchingPimCategoriesAction,\n  UpdatePimCategoryAction,\n  UpdatePIMProductDraftRawAction,\n  MergeProductsAction,\n  BulkExportProductsLoadingAction,\n  BulkExportProductsAction,\n  GetBulkExportProductsConfigLoadingAction,\n  GetBulkExportProductsConfigSucceededAction,\n  BulkImportProductsAction,\n  BulkImportProductsLoadingAction,\n  SetBulkImportProductsProgressAction,\n  DownloadBulkImportTemplateFileAction,\n  DownloadBulkImportTemplateFileLoadingAction,\n  SaveBulkExportProductsConfigLoadingAction,\n  SaveBulkExportProductsConfigAction,\n  SaveBulkExportProductsConfigSucceededAction,\n  SetIsMergingProductsAction,\n  SearchPimIntegrationSeriesAction,\n  SearchPimIntegrationSeriesSucceededAction,\n  SetIsSearchingPimIntegrationSeriesAction,\n  MapPimIntegrationSucceededAction,\n  MapPimIntegrationAction,\n  SetIsMappingPimIntegrationAction,\n  SavePimIntegrationMapAction,\n  UnmapPimIntegrationAction,\n  EditFirmProductOrPackageSucceededAction,\n  GetFirmProductByIdAction,\n  SetIsGettingFirmProductByIdAction,\n  SetIsGettingPackageByIdAction,\n  GetPackageByIdAction,\n  UpdateQuoteRowWithProductAction,\n  AddFirmProductAndAddToQuoteAction,\n  EditFirmProductAndAddToQuoteAction,\n  SaveSkipAttributesAction,\n  GetSeriesSpecificMandatoryAttributesAction,\n  CreatePimIntegrationSeriesDraftAction,\n  CancelCreatePimIntegrationSeriesDraftPollingAction,\n  GetFirmProductManufacturersAction,\n  GetFirmProductManufacturersUpdateAction,\n  GetFirmProductCategoriesAction,\n  GetFirmProductCategoriesUpdateAction,\n  IsFetchingFirmProductCategoriesAction,\n  GetFirmProductCustomDataListAction,\n  GetFirmProductCustomDataListSucceededAction,\n  CanProductBeConfiguredAction,\n  SetIsProductConfigurableAction,\n  SetIsProductConfigurableCheckingAction,\n  SearchParentSharedFirmProductsAction,\n  SearchingParentSharedFirmProductsAction,\n  SearchParentSharedFirmProductsSucceeded,\n  ResetQuoteSearchProducts,\n  FirmProductCreatedPendingIndexAction,\n} from './actions';\nimport {\n  atsApiCallWaitingAction,\n  taggedDelay,\n  apiCallWaitingAction,\n  directApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  AtsApiCallAction,\n  DirectApiCallAction,\n} from '../AtsModule/actions';\nimport { fromJS, is, List, Map } from 'immutable';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport {\n  Product, FirmProduct, Series, HasId, Category, Filter, AclRoles, PureAttribute, PureAttributeOption,\n  Package,\n  ProductCategory,\n  Manufacturer,\n} from '../../models';\nimport { SetOverlayComponentContentAction, ToggleOverlayComponentAction, SetOverlayComponentPropsAction, SetSnackbarOpenAction, SetSnackbarClosedAction } from '../ApplicationModule/actions';\nimport { PRODUCT_DRAWER_ID } from '../../components/ProductDrawer';\nimport { SUCCESS_DRAWER } from '../../components/SuccessDrawer';\nimport { GetProductMediaAction, UpdateSpecToQuoteLinkedListRecommendationsAction } from '../QuoteModule/actions';\nimport { getProductMedia } from '../QuoteModule/saga';\nimport {\n  push\n} from 'connected-react-router/immutable';\nimport { PIM_CROSS_REFERENCE_DRAWER_TYPE } from '../../components/PimCrossReferenceProductDrawer/constants';\nimport { SearchXrefCompetitorAction, SearchXrefSponsorAction } from '../CrossRefModule/actions';\nimport i18next from 'i18next';\nimport RecommendedAttribute from '../../models/RecommendedAttribute';\nimport PimAttribute from '../../models/PimAttribute';\nimport PimAttributeOption from '../../models/PimAttributeOption';\nimport { GetBrandRepSucceededAction, GetCategoriesSucceededAction } from '../AccountModule/actions';\nimport { AMPLITUDE_EVENT, BULK_IMPORT_EXPORT_TYPE, CONFIGURATOR_PATH, PIM_DRAFT_DETAIL_PATH, PIM_DRAFT_LIST_PATH, PIM_SERIES_DETAIL_PATH, PIM_SERIES_OPERATION_TYPE, PRODUCTS_PATH, SiteName, TIME_OUT_LIMIT } from '../../constants';\nimport { IMPORT_PRODUCTS_FILE_FORM, PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES } from '../../components/ProductAndPackageList/Component';\nimport { makeSelectImportProductFile, makeSelectIsCreatingAttribute, makeSelectPimProductsListSearchFilters, makeSelectPimProductsListSearchOptions, makeSelectSearchedPimProductsPackages, selectReducerState } from './selectors';\nimport { PUBLISH_DIALOG_ID } from '../../containers/PimSeriesListPage/PublishDialog';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { makeSelectAmplitudeData, makeSelectAppId, makeSelectEnv, makeSelectSite, makeSelectUserHasNewSearchRole, makeSelectUserRole, makeSelectUseUnavailabilityPurchasabilityQuery } from '../AtsModule/selectors';\nimport ProductSearchServiceApi, { firmRestrictionFilters } from './ProductSearchServiceApi';\nimport ProductSearchGatewayApi, { toLegacyProductList } from '../ProductModule/ProductSearchGatewayApi';\nimport { isEmpty, isObjectLike } from 'lodash';\nimport { parseFiltersAndOptions } from '../../utils/parseFiltersAndOptions';\nimport { mapNewSearchFirmProducts } from './mapNewSearchFirmProducts';\nimport { makeSelectLocationForSeriesSearchFilter, selectSearchMode } from '../AccountModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { LIBRARY_PRODUCT_DRAWER_ID } from '../../components/LibraryProductDrawer';\nimport AttributeTag from '../../models/AttributeTag';\nimport { checkProductAndAttributes } from '../ProductModule/saga';\nimport { callNewSearch } from '../ProductModule/callNewSearch';\nimport { makeSelectSeriesAttributes } from '../ProductModule/selectors';\nimport { PollPrintAction } from '../PrintModule/actions';\nimport { pollPrint } from '../PrintModule/saga';\nimport { getFormValues } from 'redux-form/immutable';\nimport Xhr from '../../utils/Xhr';\nimport Api from 'ats-api/src';\nimport FileServiceFile from '../../models/FileServiceFile';\nimport { eventChannel } from 'redux-saga';\nimport store from '../../store';\nimport MandatoryRecommendedAttributes from '../../models/MandatoryRecommendedAttributes';\nimport { IIntegrationMappingFields } from '../../models/PimIntegrationMap';\nimport { makeSelectProductRowOnFocus, quoteFormSelector } from '../QuoteEditModule/selectors';\nimport { AddProductOrPackageToQuoteAction, ApplyFeedbackAction, SetPresentationalLabelColumnAction } from '../QuoteEditModule/actions';\nimport { change } from 'redux-form';\nimport { QUOTE_FORM_NAME } from '../../constants/quote';\nimport { makeSelectIsSpecToQuote } from '../QuoteModule/selectors';\nimport { CONFIG_PAGE_ROUTE_TYPES } from '../../pages/ProductConfiguratorPage/Component';\nimport { PimIntegrationType } from '../../containers/PimSeriesListPage/PimIntegrationDialog';\nimport { formatSelectedAttributesForApi } from './helpers';\nimport { readUploadResponse } from '../../utils/uploadResponse';\n\nexport default function* defaultSaga() {\n  yield takeLatest(PimActionTypes.DELETE_SERIES_BY_ID_AND_SEARCH_SERIES, deleteSeriesByIdAndSearchSeries);\n  yield takeLatest(PimActionTypes.DELETE_SERIES_BY_ID_AND_SEARCH_XREF, deleteSeriesByIdAndSearchXref);\n  yield takeLatest(PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID_AND_SEARCH_XREF, deleteSeriesProductByIdAndSearchXref);\n  yield takeLatest(PimActionTypes.DELETE_SERIES_BY_ID, deleteSeriesById);\n  yield takeLatest(PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID, deleteSeriesProductById);\n  yield takeLatest(PimActionTypes.DELETE_SERIES_PRODUCT_BY_ID_THEN_SEARCH_SERIES_PRODUCTS, deleteSeriesProductByIdThenSearchSeriesProducts);\n  yield takeLatest(PimActionTypes.SEARCH_SERIES, searchSeries);\n  yield takeLatest(PimActionTypes.SEARCH_RECOMMENDED_ATTRIBUTES, searchRecommendedAttributes);\n  yield takeLatest(PimActionTypes.GET_SERIES_SPECIFIC_MANDATORY_ATTRIBUTES, getSeriesSpecificMandatoryAttributes);\n  yield takeLatest(PimActionTypes.SAVE_SKIP_ATTRIBUTES, saveSkipAttributes);\n  yield takeLatest(PimActionTypes.ADD_PIM_PRODUCT_OR_SERIES, addPimProductOrSeries);\n  yield takeLatest(PimActionTypes.ADD_ATS_LIBRARY_PRODUCT, addATSLibraryProduct);\n  yield takeLatest(PimActionTypes.ADD_PIM_PRODUCT, addPimProduct);\n  yield takeLatest(PimActionTypes.ADD_PIM_PRODUCT_THEN_SEARCH_PIM_PRODUCTS, addPimProductThenSearchPimProducts);\n  yield takeLatest(PimActionTypes.GET_FIRM_PRODUCT_BY_ID, getFirmProductById);\n  yield takeLatest(PimActionTypes.GET_PACKAGE_BY_ID, getPackageById);\n  yield takeLatest(PimActionTypes.ADD_FIRM_PRODUCT, addFirmProduct);\n  yield takeLatest(PimActionTypes.ADD_FIRM_PRODUCT_AND_ADD_TO_QUOTE, addFirmProductAndAddToQuote);\n  yield takeLatest(PimActionTypes.EDIT_FIRM_PRODUCT, editFirmProduct);\n  yield takeLatest(PimActionTypes.EDIT_FIRM_PRODUCT_AND_ADD_TO_QUOTE, editFirmProductAndAddToQuote);\n  yield takeEvery(PimActionTypes.UPDATE_QUOTE_ROW_WITH_PRODUCT, updateQuoteRowWithProduct);\n  yield takeLatest(PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS, quickSearchPimProducts);\n  yield takeLatest(PimActionTypes.QUICK_SEARCH_PIM_PRODUCTS_PACKAGES, quickSearchPimProductsPackages);\n  yield takeLatest(PimActionTypes.SEARCH_PARENT_SHARED_FIRM_PRODUCTS, searchParentSharedFirmProducts);\n  // yield takeLatest(PimActionTypes.GET_PRODUCTS_OF_PACKAGE, getProductsOfPackage);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_PRODUCT, deleteFirmProduct);\n  yield takeLatest(PimActionTypes.SEARCH_PIM_PRODUCTS, searchPimProducts);\n  yield takeLatest(PimActionTypes.SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS, setSearchBodyAndSearchPimProducts);\n  yield takeLatest(PimActionTypes.SEARCH_FIRM_PRODUCTS, searchFirmProducts);\n  // yield takeLatest(PimActionTypes.QUICK_SEARCH_FIRM_PRODUCTS, quickSearchFirmProducts);\n  yield takeLatest(PimActionTypes.SEARCH_SHARED_PRODUCTS, searchSharedProducts);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_PRODUCT_AND_SEARCH_FIRM_PRODUCTS, deleteFirmProductAndSearchFirmProducts);\n  yield takeLatest(PimActionTypes.ADD_FIRM_PRODUCT_FILE, addFirmProductFile);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_PRODUCT_FILE, deleteFirmProductFile);\n  yield takeLatest(PimActionTypes.ADD_FIRM_PRODUCT_FILE_AND_GET_MEDIA, addFirmProductFileAndGetMedia);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_PRODUCT_FILE_AND_GET_MEDIA, deleteFirmProductFileAndGetMedia);\n  yield takeLatest(PimActionTypes.GET_SERIES_FROM_PIM_SERVICE, getPimSeries);\n  yield takeLatest(PimActionTypes.GET_PIM_SERIES_DRAFT, getPimSeriesDraft);\n  yield takeLatest(PimActionTypes.GET_PIM_SERIES_DRAFT_BY_PARENT_ID, getPimSeriesDraftByParentId);\n  yield takeLatest(PimActionTypes.SEARCH_ATTRIBUTES, searchAttributes);\n  yield takeLatest(PimActionTypes.SEARCH_ATTRIBUTE_OPTIONS, searchAttributeOptions);\n  yield takeLatest(PimActionTypes.SEARCH_CATEGORIES, searchCategories);\n  yield takeLatest(PimActionTypes.GET_FIRM_SERIES, getFirmSeries);\n  yield takeLatest(PimActionTypes.ADD_FIRM_SERIES, addFirmSeries);\n  yield takeLatest(PimActionTypes.UPDATE_FIRM_SERIES, updateFirmSeries);\n  yield takeLatest(PimActionTypes.ADD_FIRM_SERIES_AND_REDIRECT, addFirmSeriesActionAndRedirect);\n  yield takeLatest(PimActionTypes.UPDATE_FIRM_SERIES_AND_REDIRECT, updateFirmSeriesAndRedirect);\n  yield takeLatest(PimActionTypes.SEARCH_FIRM_SERIES, searchFirmSeries);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_SERIES_BY_ID, deleteFirmSeriesById);\n  yield takeLatest(PimActionTypes.DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES, deleteFirmSeriesThenSearchFirmSeries);\n  yield takeLatest(PimActionTypes.DUPLICATE_SERIES, duplicateSeries);\n  yield takeLatest(PimActionTypes.ADD_PIM_SERIES_DRAFT, addPimSeriesDraft);\n  yield takeLatest(PimActionTypes.UPDATE_PIM_SERIES_DRAFT, updatePimSeriesDraft);\n  yield takeLatest(PimActionTypes.UPDATE_PIM_SERIES_DRAFT_FOR_DELETE, updatePimSeriesDraftForDelete);\n  yield takeLatest(PimActionTypes.DELETE_PIM_SERIES_DRAFT_BY_ID, deleteSeriesDraftById);\n  yield takeLatest(PimActionTypes.ADD_PIM_PRODUCT_DRAFT, addPimProductDraft);\n  yield takeLatest(PimActionTypes.ADD_PIM_SERIES_DRAFT_FOR_DELETE, addPimSeriesDraftForDelete);\n  yield takeLatest(PimActionTypes.ADD_PIM_PRODUCT_DRAFT_THEN_SEARCH_PIM_PRODUCTS, addPimProductDraftThenSearchPimProducts);\n  yield takeLatest(PimActionTypes.UPDATE_PIM_PRODUCT_DRAFT, updatePimProductDraft);\n  yield takeLatest(PimActionTypes.PUBLISH_SERIES_DRAFT, publishSeriesDraftContent);\n  yield takeLatest(PimActionTypes.GET_PRODUCT_BY_ID, getProductById);\n  yield takeLatest(PimActionTypes.SEARCH_ALL_ATTRIBUTES, searchAllAttributes);\n  yield takeLatest(PimActionTypes.SEARCH_ALL_ATTRIBUTES_SECONDARY, searchAllAttributesSecondary);\n  yield takeLatest(PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS, searchAllAttributeOptions);\n  yield takeLatest(PimActionTypes.SEARCH_ALL_ATTRIBUTE_OPTIONS_SECONDARY, searchAttributeOptionsSecondary);\n  yield takeLatest(PimActionTypes.VALIDATE_ATTRIBUTE_EXISTS, validateAttributeExists);\n  yield takeLatest(PimActionTypes.CREATE_ATTRIBUTE, createPureAttribute);\n  yield takeLatest(PimActionTypes.CREATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES, createPureAttributeThenSearchPureAttributes);\n  yield takeLatest(PimActionTypes.DELETE_ATTRIBUTE_BY_ID, deleteAttributeById);\n  yield takeLatest(PimActionTypes.DELETE_ATTRIBUTE_BY_ID_THEN_SEARCH_ATTRIBUTES, deleteAttributeByIdThenSearchAttributes);\n  yield takeLatest(PimActionTypes.UPDATE_ATTRIBUTE, updateAttribute);\n  yield takeLatest(PimActionTypes.UPDATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES, updateAttributeThenSearchAttributes);\n  yield takeLatest(PimActionTypes.VALIDATE_ATTRIBUTE_OPTION_EXISTS, validateAttributeOptionExists);\n  yield takeLatest(PimActionTypes.CREATE_ATTRIBUTE_OPTION, createPureAttributeOption);\n  yield takeLatest(PimActionTypes.CREATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS, createPureAttributeOptionThenSearchPureAttributeOptions);\n  yield takeLatest(PimActionTypes.DELETE_ATTRIBUTE_OPTION_BY_ID, deleteAttributeOptionById);\n  yield takeLatest(PimActionTypes.DELETE_ATTRIBUTE_OPTION_BY_ID_THEN_SEARCH_ATTRIBUTE_OPTIONS, deleteAttributeOptionByIdThenSearchAttributeOptions);\n  yield takeLatest(PimActionTypes.UPDATE_ATTRIBUTE_OPTION, updateAttributeOption);\n  yield takeLatest(PimActionTypes.UPDATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS, updateAttributeOptionThenSearchAttributeOptions);\n  yield takeEvery(PimActionTypes.GET_SERIES_DETAILS, getSeriesDetail);\n  yield takeLatest(PimActionTypes.CHECK_ADVANCE_CONFIG_MATCHING_PRODUCT, checkAdvanceConfigMatchingProduct);\n  yield takeLatest(PimActionTypes.CAN_PRODUCT_BE_CONFIGURED, canProductBeConfigured);\n  yield takeLatest(PimActionTypes.GET_SERIES_DUPLICATE_PRODUCTS_BY_ID, getSeriesDuplicateProductsById);\n  yield takeLatest(PimActionTypes.SEARCH_PIM_CATEGORIES, searchPimCategories);\n  yield takeLatest(PimActionTypes.UPDATE_PIM_CATEGORY, updatePimCategory);\n  yield takeLatest(PimActionTypes.MERGE_PRODUCTS, mergeProducts);\n  yield takeLatest(PimActionTypes.GET_FIRM_PRODUCT_CUSTOM_DATA_LIST, getFirmProductCustomDataList);\n\n  // bulk export/import products\n  yield takeLatest(PimActionTypes.DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE, downloadBulkImportTemplateFile);\n  yield takeLatest(PimActionTypes.BULK_EXPORT_PRODUCTS, bulkExportProducts);\n  yield takeLatest(PimActionTypes.BULK_IMPORT_PRODUCTS, bulkImportProducts);\n  yield takeLatest(PimActionTypes.GET_BULK_EXPORT_PRODUCTS_CONFIG, getBulkExportProductsConfig);\n  yield takeLatest(PimActionTypes.SAVE_BULK_EXPORT_PRODUCTS_CONFIG, saveBulkExportProductsConfig);\n\n  // pim integration\n  yield takeLatest(PimActionTypes.SEARCH_PIM_INTEGRATION_SERIES, searchPimIntegrationSeries);\n  yield takeLatest(PimActionTypes.MAP_PIM_INTEGRATION, mapPimIntegration);\n  yield takeLatest(PimActionTypes.SAVE_PIM_INTEGRATION_MAP, savePimIntegrationMap);\n  yield takeEvery(PimActionTypes.UNMAP_PIM_INTEGRATION, unmapPimIntegration); // batches from different rows must not cancel each other\n  yield takeLatest(PimActionTypes.CREATE_PIM_INTEGRATION_SERIES_DRAFT, createPimIntegrationSeriesDraft);\n\n  // get firm product manufacturers and categories\n  yield takeLatest(PimActionTypes.GET_FIRM_PRODUCT_MANUFACTURERS, getFirmProductManufacturers);\n  yield takeLatest(PimActionTypes.GET_FIRM_PRODUCT_CATEGORIES, getFirmProductCategories);\n}\n\n// recursively remove all 'brand' keys from filters\nconst removeBrandFilters = (filters: Filter) => {\n  for (const [key, value] of Object.entries(filters)) {\n    if (key === 'manufacturerId') {\n      delete filters[key];\n    } else if (isObjectLike(value)) {\n      removeBrandFilters(value);\n    }\n  }\n  return filters;\n};\n\n// recursively remove any empty object/arrays in the filters object\nconst removeEmptyFilters = filters => {\n  const newFilters = Array.isArray(filters) ? [] : {};\n\n  for (const [key, value] of Object.entries(filters)) {\n    if (isObjectLike(value)) {\n      if (Object.keys(value).length > 0) {\n        const newValue = removeEmptyFilters(value);\n        if (Object.keys(newValue).length) {\n          Array.isArray(newFilters)\n            ? newFilters.push(newValue)\n            : newFilters[key] = newValue;\n        }\n      }\n    } else {\n      Array.isArray(newFilters)\n        ? newFilters.push(value)\n        : newFilters[key] = value;\n    }\n  }\n  return newFilters;\n};\n\nexport function* getFirmProductCustomDataList(\n  action: GetFirmProductCustomDataListAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getFirmProductCustomDataList',\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProductCustomDataList: List<IMap<any>> = immutableData.getIn(['payload', 'pim', 'customDataList']) || List();\n    yield put(new GetFirmProductCustomDataListSucceededAction({ firmProductCustomDataList }));\n  } else {\n    console.error('getFirmProductCustomDataList failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getFirmProductManufacturers(\n  action: GetFirmProductManufacturersAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getFirmProductManufacturers',\n      body: {\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProductManufacturers: List<IMap<Manufacturer>> = immutableData.getIn(['payload', 'pim', 'manufacturer']);\n    if (firmProductManufacturers == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetFirmProductManufacturersUpdateAction({ firmProductManufacturers }));\n    }\n  } else {\n    console.error('getFirmProductManufacturers failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getFirmProductCategories(\n  action: GetFirmProductCategoriesAction\n) {\n  const {\n    manufacturerIds = '',\n  } = action.payload;\n\n  yield put(new IsFetchingFirmProductCategoriesAction({ isFetchingFirmProductCategories: true }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getFirmProductCategories',\n      body: {\n      },\n      queries: {\n        manufacturerIds\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProductCategories: List<IMap<Manufacturer>> = immutableData.getIn(['payload', 'pim', 'category']);\n    if (firmProductCategories == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetFirmProductCategoriesUpdateAction({ firmProductCategories }));\n    }\n  } else {\n    console.error('getFirmProductCategories failed', err); // tslint:disable-line\n  }\n\n  yield put(new IsFetchingFirmProductCategoriesAction({ isFetchingFirmProductCategories: false }));\n}\n\nexport function* getSeriesDuplicateProductsById(\n  action: GetSeriesDuplicateProductsByIdAction\n) {\n  yield race({\n    printReport: call(getSeriesDuplicateProductsByIdContent, action),\n    cancellation: call(cancelGetSeriesDuplicateProductsByIdPolling)\n  });\n}\n\nfunction* cancelGetSeriesDuplicateProductsByIdPolling() {\n  yield take(PimActionTypes.CANCEL_GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_POLLING);\n}\n\nfunction* getSeriesDuplicateProductsByIdContent(\n  action: GetSeriesDuplicateProductsByIdAction\n) {\n  yield put(new SetIsGettingSeriesDuplicateProductsByIdAction(true));\n\n  const {\n    seriesId,\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getDuplicateProductsInSeriesAsync',\n      params: {\n        seriesId\n      },\n      queries: {\n        async: 1\n      }\n    }\n  }));\n\n  const dispatch = store.store.store.dispatch;\n\n  const onSuccessCb = (result) => {\n    const immutableResult = fromJS(result);\n    const seriesDuplicateProducts: List<List<IMap<Product>>> = immutableResult?.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'product']);\n    const hasUnconfigurableProducts: boolean = immutableResult?.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'displayAsAttributeProducts'])?.size > 0;\n\n    if (seriesDuplicateProducts) {\n      dispatch(new GetSeriesDuplicateProductsByIdSucceededAction({ seriesDuplicateProducts, hasUnconfigurableProducts }));\n    }\n    dispatch(new SetIsGettingSeriesDuplicateProductsByIdAction(false));\n  };\n\n  const onFailCb = (result) => {\n    const details = fromJS(result).getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details']);\n\n    console.error('getSeriesDuplicateProductsById failed', { error: details }); // tslint:disable-line\n    dispatch(new GetSeriesDuplicateProductsByIdFailedAction());\n    dispatch(new SetIsGettingSeriesDuplicateProductsByIdAction(false));\n  };\n\n  if (data) {\n    const printId = fromJS(data).getIn(['payload', 'pim', 'pim', 0, 'id']);\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type: PIM_SERIES_OPERATION_TYPE.publishDraft,\n      onSuccessCb,\n      onFailCb,\n    }));\n  } else {\n    console.error('getSeriesDuplicateProductsById failed', err); // tslint:disable-line\n    yield put(new GetSeriesDuplicateProductsByIdFailedAction());\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* searchAttributeOptionsSecondary(\n  action: SearchAttributeOptionsSecondaryAction\n) {\n  yield put(new SetIsSearchingAttributeOptionsSecondaryAction({ isSearching: true }));\n\n  const {\n    attributeId,\n    value\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchAttributeOption',\n      params: {\n        attributeId\n      },\n      body: {\n        filters: {\n          'and': [\n            {\n              'value': {\n                'like': value\n              }\n            }\n          ]\n        }\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const attributeOptions: List<IMap<PureAttributeOption>> = immutableResponse.getIn(['payload', 'pim', 'option']);\n    // const count: number = immutableResponse.getIn(['payload', 'pim', 'count']) || 0;\n    if (attributeOptions == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchAttributeOptionsSucceededSecondaryAction({\n        attributeOptions,\n        // count\n      }));\n    }\n  } else {\n    console.error('searchAttributeOptionsSecondary failed', err); // tslint:disable-line\n  }\n  yield put(new SetIsSearchingAttributeOptionsSecondaryAction({ isSearching: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateAttributeOptionThenSearchAttributeOptions(\n  action: UpdateAttributeOptionThenSearchAttributeOptionsAction\n) {\n  const {\n    attributeId,\n    optionId,\n    attributeOption,\n    filters,\n    options,\n    successCB,\n    failedCB,\n    sendAmplitude\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updateAttributeOption, new UpdateAttributeOptionAction({ attributeId, optionId, attributeOption, successCB, failedCB, sendAmplitude }));\n\n  // need new attributeId from deleted due to possible cloning\n  const newAttributeId = data?.payload?.pim?.option?.attributeId;\n\n  // fetch attribute to get most updated tags that's use in description list filter\n  yield put(new SearchAllAttributesAction({\n    options: { limit: 1 },\n    filters: { and: [{ attributeId: { eq: newAttributeId } }] }\n  }));\n\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchAllAttributeOptions, new SearchAllAttributeOptionsAction({\n    attributeId: newAttributeId,\n    options,\n    filters,\n  }));\n}\n\nfunction* updateAttributeOption(\n  action: UpdateAttributeOptionAction,\n) {\n  const {\n    attributeId,\n    optionId,\n    attributeOption,\n    successCB,\n    failedCB,\n    sendAmplitude\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateAttributeOption',\n      params: {\n        attributeId,\n        optionId,\n      },\n      body: {\n        ...attributeOption.toJS()\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const pureAttributeOption: IMap<PureAttributeOption> = immuData.getIn(['payload', 'pim', 'option']);\n    if (pureAttributeOption == null) {\n      if (failedCB) {\n        failedCB();\n      }\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (successCB) {\n        successCB(pureAttributeOption);\n      }\n      if (sendAmplitude) {\n        sendAmplitude(pureAttributeOption);\n      }\n    }\n  } else {\n    if (failedCB) {\n      failedCB();\n    }\n    console.error('updateAttributeOption error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteAttributeOptionByIdThenSearchAttributeOptions(\n  action: DeleteAttributeOptionByIdThenSearchAttributeOptionsAction\n) {\n  const {\n    attributeId,\n    optionId,\n    filters,\n    options,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteAttributeOptionById, new DeleteAttributeOptionByIdAction({ attributeId, optionId }));\n\n  // need new attributeId from deleted due to possible cloning\n  const newAttributeId = data?.payload?.pim?.attributeId;\n\n  // fetch attribute to get most updated tags that's use in description list filter\n  yield put(new SearchAllAttributesAction({\n    options: { limit: 1 },\n    filters: { and: [{ attributeId: { eq: newAttributeId } }] }\n  }));\n\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchAllAttributeOptions, new SearchAllAttributeOptionsAction({\n    attributeId: newAttributeId,\n    options,\n    filters,\n  }));\n}\n\nfunction* deleteAttributeOptionById(\n  action: DeleteAttributeOptionByIdAction,\n) {\n  const {\n    attributeId,\n    optionId,\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteAttributeOption',\n      params: {\n        attributeId,\n        optionId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const deletedOptionId: number = immuData.getIn(['payload', 'pim', 'optionId']);\n    const isDeleted: boolean = immuData.getIn(['payload', 'pim', 'delete']);\n    if (deletedOptionId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('deleteAttributeOptionById error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updateAttributeThenSearchAttributes(\n  action: UpdateAttributeThenSearchAttributesAction\n) {\n  const {\n    id,\n    name,\n    filters,\n    options,\n    sendAmplitude\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updateAttribute, new UpdateAttributeAction({ id, name, sendAmplitude }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchAllAttributes, new SearchAllAttributesAction({\n    options,\n    filters,\n  }));\n}\n\nfunction* updateAttribute(\n  action: UpdateAttributeAction,\n) {\n  const {\n    id,\n    name,\n    successCB,\n    sendAmplitude\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateAttribute',\n      params: {\n        attributeId: id\n      },\n      body: {\n        name\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const pureAttribute: IMap<PureAttribute> = immuData.getIn(['payload', 'pim', 'attribute']);\n    if (pureAttribute == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (successCB) {\n        successCB(pureAttribute);\n      }\n      if (sendAmplitude) {\n        sendAmplitude(pureAttribute);\n      }\n    }\n  } else {\n    console.error('updateAttribute error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteAttributeByIdThenSearchAttributes(\n  action: DeleteAttributeByIdThenSearchAttributesAction\n) {\n  const {\n    attributeId,\n    filters,\n    options,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteAttributeById, new DeleteAttributeByIdAction({ attributeId }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchAllAttributes, new SearchAllAttributesAction({\n    options,\n    filters,\n  }));\n}\n\nfunction* deleteAttributeById(\n  action: DeleteAttributeByIdAction,\n) {\n  const {\n    attributeId\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteAttribute',\n      params: {\n        attributeId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const deletedAttributeId: number = immuData.getIn(['payload', 'pim', 'attributeId']);\n    const isDeleted: boolean = immuData.getIn(['payload', 'pim', 'delete']);\n    if (deletedAttributeId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('deleteAttributeById error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* validateAttributeOptionExists({\n  payload,\n}: ValidateAttributeOptionExistsAction) {\n  const {\n    value,\n    resolve,\n    reject,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'validateAttributeOptionExists',\n      body: {\n        value\n      }\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const exists: boolean = immutableData.getIn(['payload', 'pim', 'exists']);\n\n    return resolve({ exists });\n  } else {\n    console.error('error validateAttributeOptionExists', err); // tslint:disable-line\n  }\n  reject('error');\n}\n\nexport function* createPureAttributeOptionThenSearchPureAttributeOptions(\n  action: CreatePureAttributeOptionThenSearchPureAttributeOptionsAction\n) {\n\n  const {\n    pureAttributeOption,\n    attributeId,\n    filters,\n    options,\n    sendAmplitude\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(createPureAttributeOption, new CreatePureAttributeOptionAction({ pureAttributeOption, attributeId, sendAmplitude }));\n\n  if (data) {\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield put(new SearchAllAttributeOptionsAction({ attributeId, filters, options }));\n\n    // fetch attribute to get most updated tags that's use in description list filter\n    yield put(new SearchAllAttributesAction({\n      options: { limit: 1 },\n      filters: { and: [{ attributeId: { eq: attributeId } }] }\n    }));\n  }\n}\n\nexport function* createPureAttributeOption(\n  action: CreatePureAttributeOptionAction\n) {\n\n  const {\n    pureAttributeOption,\n    attributeId,\n    successCB,\n    setLoading = false,\n    sendAmplitude\n  } = action.payload;\n\n  if (setLoading) {\n    yield put(new SetIsCreatingAttributeAction({ isCreating: true }));\n  }\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'createAttributeOption',\n      body: {\n        ...pureAttributeOption.toJS()\n      },\n      params: {\n        attributeId\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const newPureAttributeOption: IMap<PureAttributeOption> = immutableResponse.getIn(['payload', 'pim', 'option']);\n    if (newPureAttributeOption == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (successCB) {\n        successCB(newPureAttributeOption);\n      }\n      if (sendAmplitude) {\n        sendAmplitude(newPureAttributeOption);\n      }\n    }\n  } else {\n    console.error('pimv1 createPureAttributeOption failed', err); // tslint:disable-line\n  }\n  const isCreatingAttribute = yield select(makeSelectIsCreatingAttribute());\n  if (isCreatingAttribute) {\n    yield put(new SetIsCreatingAttributeAction({ isCreating: false }));\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* validateAttributeExists({\n  payload,\n}: ValidateAttributeExistsAction) {\n  const {\n    name,\n    resolve,\n    reject,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'validateAttributeExists',\n      body: {\n        name\n      }\n    },\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const exists: boolean = immutableData.getIn(['payload', 'pim', 'exists']);\n\n    return resolve({ exists });\n  } else {\n    console.error('error validateAttributeExists', err); // tslint:disable-line\n  }\n  reject('error');\n}\n\nexport function* createPureAttributeThenSearchPureAttributes(\n  action: CreatePureAttributeThenSearchPureAttributesAction\n) {\n\n  const {\n    pureAttribute,\n    filters,\n    options,\n    displaySuccessMessage,\n    sendAmplitude\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(createPureAttribute, new CreatePureAttributeAction({ pureAttribute, displaySuccessMessage, sendAmplitude }));\n\n  if (data) {\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield put(new SearchAllAttributesAction({ filters, options }));\n  }\n}\n\nexport function* createPureAttribute(\n  action: CreatePureAttributeAction\n) {\n  const {\n    pureAttribute,\n    displaySuccessMessage,\n    successCB,\n    sendAmplitude\n  } = action.payload;\n\n  yield put(new SetIsCreatingAttributeAction({ isCreating: true }));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'createAttribute',\n      body: {\n        ...pureAttribute.toJS()\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const newPureAttribute: IMap<PureAttribute> = immutableResponse.getIn(['payload', 'pim', 'attribute']);\n    if (newPureAttribute == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (displaySuccessMessage) {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:pimAttributesList.createOverrideSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n      if (successCB) {\n        successCB(newPureAttribute);\n      }\n      if (sendAmplitude) {\n        sendAmplitude(newPureAttribute);\n      }\n    }\n  } else {\n    console.error('pimv1 createPureAttribute failed', err); // tslint:disable-line\n  }\n  yield put(new SetIsCreatingAttributeAction({ isCreating: false }));\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* searchAllAttributeOptions(\n  action: SearchAllAttributeOptionsAction\n) {\n  yield put(new SetIsSearchingAllAttributeOptionsAction({ isSearching: true }));\n\n  const {\n    filters,\n    options,\n    attributeId,\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchAttributeOption',\n      body: {\n        filters,\n        options\n      },\n      params: {\n        attributeId\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const attributeOptions: List<IMap<PureAttributeOption>> = immutableResponse.getIn(['payload', 'pim', 'option']);\n    const count: number = immutableResponse.getIn(['payload', 'pim', 'count']) || 0;\n    if (attributeOptions == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchAllAttributeOptionsSucceededAction({\n        attributeOptions,\n        count\n      }));\n    }\n  } else {\n    console.error('pimv1 searchAllAttributeOptions failed', err); // tslint:disable-line\n  }\n  yield put(new SetIsSearchingAllAttributeOptionsAction({ isSearching: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* searchAllAttributesSecondary(\n  action: SearchAllAttributesSecondaryAction\n) {\n  yield put(new SetIsSearchingAllAttributesSecondaryAction({ isSearching: true }));\n\n  const {\n    name\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchAllAttributes',\n      body: {\n        filters: {\n          'and': [\n            {\n              'attribute.name': {\n                'like': name\n              }\n            }\n          ]\n        }\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const attributes: List<IMap<PureAttribute>> = immutableResponse.getIn(['payload', 'pim', 'attribute']);\n    // const count: number = immutableResponse.getIn(['payload', 'pim', 'count']) || 0;\n    if (attributes == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchAllAttributesSucceededSecondaryAction({\n        attributes,\n        // count\n      }));\n    }\n  } else {\n    console.error('searchAllAttributesSecondary failed', err); // tslint:disable-line\n  }\n  yield put(new SetIsSearchingAllAttributesSecondaryAction({ isSearching: false }));\n  return {\n    data,\n    err,\n  };\n}\n\ninterface IResponse {\n  data: any;\n  err: Error;\n}\nexport function* searchAllAttributes(\n  action: SearchAllAttributesAction\n) {\n  const {\n    filters,\n    options\n  } = action.payload;\n  yield put(new SetIsSearchingAllAttributesAction({ isSearching: true }));\n  const attributesResponse: IResponse = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchAllAttributes',\n      body: {\n        filters,\n        options\n      }\n    }\n  }));\n  if (attributesResponse?.data) {\n    const immutableAttributeResponse = fromJS(attributesResponse.data);\n    const attributes: List<IMap<PureAttribute>> = immutableAttributeResponse.getIn(['payload', 'pim', 'attribute']);\n    const count: number = immutableAttributeResponse.getIn(['payload', 'pim', 'count']) || 0;\n    if (attributes == null) {\n      console.error('Invalid response', attributesResponse?.data); // tslint:disable-line\n    } else {\n      yield put(new SearchAllAttributesSucceededAction({\n        attributes,\n        count\n      }));\n    }\n  } else {\n    if (attributesResponse?.err) {\n      console.error('pimv1 searchAllAttributes failed', attributesResponse.err); // tslint:disable-line\n    }\n  }\n  yield put(new SetIsSearchingAllAttributesAction({ isSearching: false }));\n  return attributesResponse;\n}\n\nexport function* getProductById(\n  {\n    payload,\n  }: GetProductByIdAction,\n) {\n\n  const {\n    productId\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getProduct',\n      params: {\n        productId\n      },\n      queries: {\n        isCompetitor: null\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const product: IMap<Product> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n\n    if (product == null) {\n      console.error('Invalid resposne', data); // tslint:disable-line\n      yield put(new GetProductByIdFailedAction());\n    } else {\n      yield put(new GetProductByIdSucceededAction({ product }));\n    }\n\n  } else {\n    console.error('getProductById', { err }); // tslint:disable-line\n    yield put(new GetProductByIdFailedAction());\n  }\n}\n\nfunction* cancelPublishDraftPolling() {\n  yield take(PimActionTypes.CANCEL_PUBLISH_SERIES_DRAFT_POLLING);\n}\n\n// export function* publishSeriesDraft(\n//   action: PublishSeriesDraftAction\n// ) {\n//   yield race({\n//     printReport: call(publishSeriesDraftContent, action),\n//     cancellation: call(cancelPublishDraftPolling)\n//   });\n// }\n\n// function* publishSeriesDraft(\n// function* publishSeriesDraftContent(\n//   action: PublishSeriesDraftAction,\n// ) {\n\n//   yield put(new SetIsPublishingAction({ isPublishing: true }));\n\n//   const {\n//     seriesId,\n//     dispatch,\n//     redirectToDetail = true,\n//     filters,\n//     options\n//   } = action.payload;\n//   const {\n//     data,\n//     err,\n//   }: {\n//     data: any,\n//     err: Error\n//   } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n//     payload: {\n//       service: 'pim',\n//       endpoint: 'publishSeriesDraft',\n//       params: {\n//         seriesId\n//       },\n//       queries: {\n//         async: 1\n//       }\n//     }\n//   }));\n\n//   const onSuccessCb = (result) => {\n//     const successData = fromJS(result).getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'series']);\n//     const isDeleted = successData?.get('status') === 'deleted';\n//     const series: IMap<Series> = successData?.get(0);\n//     const newSeriesId = series?.get('id');\n//     const status = series?.get('status');\n//     const isStillDraft = series?.get('pimStatus') === 'Draft';\n\n//     if (series == null) {\n//       console.error('Invalid response', successData); // tslint:disable-line\n//     } else {\n//       if (isStillDraft) { // https://atsinc.atlassian.net/browse/PIM-421\n//         if (redirectToDetail) {\n//           dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${newSeriesId}`));\n//         }\n//         dispatch(new SetSnackbarOpenAction({\n//           message: i18next.t('translations:publishSeriesDraftDialog.stillDraftAfterPublish'),\n//           severity: 'info'\n//         }));\n//       } else {\n//         if (isDeleted || status === 'deleted') {\n//           dispatch(push(PIM_DRAFT_LIST_PATH));\n//           if (filters || options) {\n//             dispatch(new SearchSeriesAction({\n//               options,\n//               filters,\n//               draft: true,\n//             }));\n//           }\n//           dispatch(new SetSnackbarOpenAction({\n//             message: i18next.t('translations:publishSeriesDraftDialog.publishedDeletedSuccessMessage'),\n//             severity: 'success'\n//           }));\n//         } else {\n//           if (redirectToDetail) {\n//             dispatch(push(`${PIM_SERIES_DETAIL_PATH}/${series.get('id')}`));\n//           }\n//           if (filters || options) {\n//             dispatch(new SearchSeriesAction({\n//               options,\n//               filters,\n//               draft: true,\n//             }));\n//           }\n//           dispatch(new SetSnackbarOpenAction({\n//             message: i18next.t('translations:publishSeriesDraftDialog.publishedSuccessMessage'),\n//             severity: 'success'\n//           }));\n//         }\n//       }\n//     }\n\n//     dispatch(new ToggleOverlayComponentAction({\n//       id: PUBLISH_DIALOG_ID,\n//       open: false\n//     }));\n//     dispatch(new SetIsPublishingAction({ isPublishing: false }));\n//   };\n\n//   const onFailCb = (result) => {\n//     const immuResult = fromJS(result);\n//     const message = immuResult.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'message']);\n//     const errorCode = immuResult.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'message', 'code']);\n//     // const errorMessage = immutableResult.getIn(['payload', 'error', 'error']);\n//     // const isBlockedFromNoActiveProducts = errorCode === 406 && errorMessage === 'Cannot publish basic series with no active products';\n//     const isBlockedFromNoActiveProducts = errorCode === 406;\n//     if (isBlockedFromNoActiveProducts) {\n//       dispatch(new SetSnackbarOpenAction({\n//         message: i18next.t('translations:publishSeriesDraftDialog.publishFailedNoActiveProducts'),\n//         severity: 'error'\n//       }));\n//     } else {\n//       dispatch(new SetSnackbarOpenAction({\n//         message: 'Draft failed to be published, please try again later.',\n//         severity: 'error'\n//       }));\n//     }\n\n//     dispatch(new ToggleOverlayComponentAction({\n//       id: PUBLISH_DIALOG_ID,\n//       open: false\n//     }));\n//     dispatch(new SetIsPublishingAction({ isPublishing: false }));\n\n//     console.error('publishSeriesDraft', { error: message }); // tslint:disable-line\n//   };\n\n//   if (data) {\n//     const printId = fromJS(data).getIn(['payload', 'pim', 'pim', 0, 'id']);\n//     yield call(pollPrint, new PollPrintAction({\n//       printId,\n//       type: PIM_SERIES_OPERATION_TYPE.publishDraft,\n//       onSuccessCb,\n//       onFailCb,\n//     }));\n//   } else {\n//     dispatch(new SetSnackbarOpenAction({\n//       message: 'Draft failed to be published, please try again later.',\n//       severity: 'error'\n//     }));\n//     dispatch(new ToggleOverlayComponentAction({\n//       id: PUBLISH_DIALOG_ID,\n//       open: false\n//     }));\n//     dispatch(new SetIsPublishingAction({ isPublishing: false }));\n//     console.error('publishSeriesDraft', { err }); // tslint:disable-line\n//   }\n\n//   return {\n//     data,\n//     err,\n//   };\n// }\n\nexport function* publishSeriesDraftContent(\n  action: PublishSeriesDraftAction,\n) {\n\n  yield put(new SetIsPublishingAction({ isPublishing: true }));\n\n  const {\n    series: draftSeries,\n    dispatch,\n    redirectToDetail = true,\n    filters,\n    options\n  } = action.payload;\n\n  // get source series skip attributes, use for when making duplicates or new draft from existing series\n  const sourceSeriesMandatoryAttributes: List<IMap<RecommendedAttribute>> = yield call(getSeriesSpecificMandatoryAttributes, new GetSeriesSpecificMandatoryAttributesAction({ series: draftSeries }));\n\n  let sourceSeriesSkipAttributeIds = List();\n  let sourceSeriesRemainingMandatoryAttributeKeys = List();\n  sourceSeriesMandatoryAttributes?.forEach((attr: IMap<RecommendedAttribute>) => {\n    if (attr.get('skip')) {\n      sourceSeriesSkipAttributeIds = sourceSeriesSkipAttributeIds.push(attr.get('attributeId'));\n    } else {\n      sourceSeriesRemainingMandatoryAttributeKeys = sourceSeriesRemainingMandatoryAttributeKeys.push(attr.get('attributeKey'));\n    }\n  });\n\n  // check if draft has added or skip all mandatory attributes\n  const seriesAttributes = draftSeries.get('attributes');\n  const seriesHasMissingMandatoryAttributes = sourceSeriesRemainingMandatoryAttributeKeys.some((key) => {\n    const attribute = seriesAttributes.get(key);\n    return !(attribute && attribute.get('status') !== 'deleted');\n  });\n\n  if (seriesHasMissingMandatoryAttributes) {\n    yield put(new SetIsPublishingAction({ isPublishing: false }));\n    yield put(new ToggleOverlayComponentAction({\n      id: PUBLISH_DIALOG_ID,\n      open: false\n    }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:publishSeriesDraftDialog.publishedFailedMessageDueToMissingMandatoryAttributes'),\n      severity: 'info',\n      actionProps: {\n        label: i18next.t('translations:publishSeriesDraftDialog.editDraft'),\n        autoHideDuration: null,\n        onclick: () => {\n          if (draftSeries.get('isConfigurator')) {\n            dispatch(push(`${CONFIGURATOR_PATH}/${CONFIG_PAGE_ROUTE_TYPES.EDIT}/${draftSeries.get('id')}`));\n          } else {\n            dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${draftSeries.get('id')}/edit`));\n          }\n          dispatch(new SetSnackbarClosedAction());\n        }\n      }\n    }));\n    return;\n  }\n\n  // check if the series has deleted status products\n  const {\n    data: data2,\n    err: err2\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchProducts',\n      body: {\n        filters: {\n          and: [\n            { series: { eq: draftSeries.get('id') } },\n            { status: { eq: 'deleted' } }\n          ]\n        },\n        options: { limit: 1 }\n      },\n      queries: {\n        draft: true\n      }\n    }\n  }));\n  if (data2) {\n    const immuData = fromJS(data2);\n    const hasDeleteProduct = immuData.getIn(['payload', 'pim', 'product', 0, 'status']) === 'deleted';\n    if (hasDeleteProduct) {\n      yield put(new SetIsPublishingAction({ isPublishing: false }));\n      yield put(new ToggleOverlayComponentAction({\n        id: PUBLISH_DIALOG_ID,\n        open: false\n      }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:publishSeriesDraftDialog.publishedFailedMessageDueToDeletedStatusProducts'),\n        severity: 'info',\n      }));\n      return;\n    }\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'publishSeriesDraft',\n      params: {\n        seriesId: draftSeries.get('id')\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const isDeleted = immuData.getIn(['payload', 'pim', 'series', 'status']) === 'deleted';\n    const series: IMap<Series> = immuData.getIn(['payload', 'pim', 'series', 0]);\n    const newSeriesId = series?.get('id');\n    const status = series?.get('status');\n    const isStillDraft = series?.get('pimStatus') === 'Draft';\n\n    if (immuData.getIn(['payload', 'pim']) == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (isStillDraft) { // https://atsinc.atlassian.net/browse/PIM-421\n        if (redirectToDetail) {\n          yield put(push(`${PIM_DRAFT_DETAIL_PATH}/${newSeriesId}`));\n        }\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:publishSeriesDraftDialog.stillDraftAfterPublish'),\n          severity: 'info'\n        }));\n      } else {\n        // skip attributes for the resulting duplicated series\n        if (sourceSeriesSkipAttributeIds?.size) {\n          yield call(saveSkipAttributes, new SaveSkipAttributesAction({\n            seriesId: newSeriesId,\n            attributes: sourceSeriesSkipAttributeIds.toJS()\n          }));\n        }\n\n        if (isDeleted || status === 'deleted') {\n          yield put(push(PIM_DRAFT_LIST_PATH));\n          if (filters || options) {\n            yield call(searchSeries, new SearchSeriesAction({\n              options,\n              filters,\n              draft: true,\n            }));\n          }\n          yield put(new SetSnackbarOpenAction({\n            message: i18next.t('translations:publishSeriesDraftDialog.publishedDeletedSuccessMessage'),\n            severity: 'success'\n          }));\n        } else {\n          // send amplitude upon successful publishing\n          const amplitudeData = yield select(makeSelectAmplitudeData());\n          amplitude.logEvent(AMPLITUDE_EVENT.seriesPublished, {\n            seriesName: series.get('name'),\n            seriesId: newSeriesId,\n            manufacturerName: series.get('brand'),\n            categoryName: series.get('categoryName'),\n            numberOfOptions: series.get('attributes').filter(attr => !attr.get('isAttribute') && attr.get('status') !== 'deleted').size,\n            seriesType: series.get('isConfigurator') ? 'Advance' : 'Basic',\n            ...amplitudeData,\n          });\n\n          if (redirectToDetail) {\n            yield put(push(`${PIM_SERIES_DETAIL_PATH}/${series.get('id')}`));\n          }\n          if (filters || options) {\n            yield call(searchSeries, new SearchSeriesAction({\n              options,\n              filters,\n              draft: true,\n            }));\n          }\n          yield put(new SetSnackbarOpenAction({\n            message: i18next.t('translations:publishSeriesDraftDialog.publishedSuccessMessage'),\n            severity: 'success'\n          }));\n        }\n      }\n    }\n  } else {\n    const immutableErr = fromJS(err);\n    const errorCode = immutableErr.getIn(['payload', 'error', 'code']);\n    const errorMessage = immutableErr.getIn(['payload', 'error', 'error']);\n    const isBlockedFromNoActiveProducts = errorCode === 406 && errorMessage === 'Cannot publish basic series with no active products';\n    if (isBlockedFromNoActiveProducts) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:publishSeriesDraftDialog.publishFailedNoActiveProducts'),\n        severity: 'error'\n      }));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: 'Draft failed to be published, please try again later.',\n        severity: 'error'\n      }));\n    }\n    console.error('publishSeriesDraft', { err }); // tslint:disable-line\n  }\n\n  yield put(new ToggleOverlayComponentAction({\n    id: PUBLISH_DIALOG_ID,\n    open: false\n  }));\n  yield put(new SetIsPublishingAction({ isPublishing: false }));\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* updatePimProductDraftRaw(\n  action: UpdatePIMProductDraftRawAction,\n) {\n  const {\n    productId,\n    productInfo\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateProductDraft',\n      body: {\n        ...productInfo,\n      },\n      params: {\n        productId\n      }\n    }\n  }));\n  return { data, err };\n}\n\nexport function* updatePimProductDraft(\n  action: UpdatePIMProductDraftAction,\n) {\n  const { productId, productInfo, onSuccess } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updatePimProductDraftRaw, new UpdatePIMProductDraftRawAction({ productId, productInfo }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productData: IMap<Product> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n    const seriesId = productData.get('series');\n    if (productData == null) {\n      console.error('Invalid response', productData); // tslint:disable-line\n    } else {\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new UpdatePIMProductSucceededAction(productData));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.updateSuccessMessage'),\n        severity: 'success'\n      }));\n      // after update product, we get series again so the series info is also up to date\n      yield call(getPimSeriesDraft, new GetPimSeriesdDraftAction({ seriesId }));\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:pimProductDrawer.updateFailMessage'),\n      severity: 'error'\n    }));\n    console.error('updateProductDraft error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* mergeProducts(\n  action: MergeProductsAction,\n) {\n  const {\n    productId,\n    productInfo,\n    duplicateProductIds,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsMergingProductsAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updatePimProductDraftRaw, new UpdatePIMProductDraftRawAction({ productId, productInfo }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const productData: IMap<Product> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n    const seriesId = productData.get('series');\n    if (productData == null) {\n      console.error('Invalid response', productData); // tslint:disable-line\n    } else {\n      // yield put(new UpdatePIMProductSucceededAction(productData));\n\n      const {\n        data: data2,\n        err: err2,\n      }: {\n        data: any,\n        err: Error\n      } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'pim',\n          endpoint: 'updateDuplicateProductReferences',\n          body: {\n            duplicateProductIds,\n          },\n          params: {\n            productId\n          },\n          queries: {\n            draft: null\n          }\n        }\n      }));\n      if (data2) {\n        yield put(new SetSearchBodyAndSearchPimProductsAction({\n          filters: {\n            and: [\n              {\n                series: {\n                  eq: seriesId,\n                }\n              }\n            ]\n          },\n          options: {\n            limit: 10,\n            offset: 0,\n            orderBy: {\n              id: -1\n            }\n          },\n          draft: true\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: 'Duplicates merged successfully',\n          severity: 'success'\n        }));\n        if (onSuccess) {\n          onSuccess();\n        }\n        yield put(new SetIsMergingProductsAction(false));\n      } else {\n        console.error('MergeProductsAction - updateDuplicateProductReferences error', { err2 }); // tslint:disable-line\n        yield put(new SetSnackbarOpenAction({\n          message: 'Duplicates failed to be merged',\n          severity: 'error'\n        }));\n      }\n      // after update product, we get series again so the series info is also up to date\n      yield call(getPimSeriesDraft, new GetPimSeriesdDraftAction({ seriesId }));\n    }\n  } else {\n    console.error('MergeProductsAction - updatePimProductDraftRaw error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Duplicates failed to be merged',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsMergingProductsAction(false));\n}\n\nfunction* addPimProductDraftThenSearchPimProducts(\n  action: AddPimProductDraftThenSearchPimProductsAction\n) {\n  const {\n    product,\n    onSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(addPimProductDraft, new AddPimProductDraftAction({ product, onSuccess }));\n\n  if (data) {\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield put(new SetSearchBodyAndSearchPimProductsAction({ draft: true }));\n  }\n}\n\nexport function* addPimProductDraft(\n  action: AddPimProductDraftAction,\n) {\n  const {\n    product,\n    onSuccess\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addProductDraft',\n      body: {\n        ...product.toJS(),\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productData: IMap<Product> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n\n    if (productData == null) {\n      console.error('Invalid response', productData); // tslint:disable-line\n    } else {\n      if (onSuccess) {\n        onSuccess(productData);\n      }\n      yield put(new AddPimProductSucceededAction({ product: productData }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.createSuccessMessage'),\n        severity: 'success'\n      }));\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:pimProductDrawer.createFailMessage'),\n      severity: 'error'\n    }));\n    console.error('addProductDraft error', { err }); // tslint:disable-line\n  }\n  return { data, err };\n}\n\nexport function* deleteSeriesDraftById(\n  action: DeleteSeriesDraftByIdAction,\n) {\n  const {\n    seriesId,\n    redirectPath,\n    sendAmplitude = null\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteSeriesDraft',\n      params: {\n        seriesId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const seriesIds: List<IMap<HasId>> = immuData.getIn(['payload', 'pim', 'series']); // only ids\n    if (seriesIds == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n      if (sendAmplitude) {\n        sendAmplitude();\n      }\n    }\n  } else {\n    console.error('deleteSeriesDraft', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* updatePimSeriesDraftRaw(\n  action: UpdatePimSeriesDraftRawAction\n) {\n  const {\n    seriesId,\n    seriesInfo,\n    cascade = false,\n    forceCascade = false\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateSeriesDraft',\n      body: seriesInfo,\n      params: {\n        seriesId\n      },\n      queries: {\n        cascade,\n        forceCascade\n      }\n    }\n  }));\n  return { data, err };\n}\n\nexport function* updatePimSeriesDraft(\n  action: UpdatePimSeriesDraftAction\n) {\n  const {\n    seriesId,\n    seriesInfo,\n    cascade = false,\n    redirectPath,\n    skipAttributes,\n    onSuccess,\n    onFinally,\n  } = action.payload;\n\n  yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: i18next.t('translations:generalLoading.updating') } }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updatePimSeriesDraftRaw, new UpdatePimSeriesDraftRawAction({\n    seriesId,\n    seriesInfo,\n    cascade\n  }));\n\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const series: IMap<Series> = immutableResponse.getIn(['payload', 'pim', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n\n      // skip attributes if needed\n      if (skipAttributes) {\n        yield call(saveSkipAttributes, new SaveSkipAttributesAction({\n          seriesId: series.get('id'),\n          attributes: skipAttributes\n        }));\n      }\n\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:draftSnackbarMessage.updateSeriesDraftSuccessMessage'),\n        severity: 'success'\n      }));\n      if (cascade) {\n        yield put(new SearchPimProductsAction({\n          filters: new Filter({\n            'and': [\n              {\n                'series': {\n                  'eq': seriesId,\n                }\n              }\n            ]\n          }).toImmutable(),\n          draft: true\n        }));\n      }\n      yield put(new UpdatePIMSeriesSucceededAction(series));\n\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n      if (onSuccess) {\n        onSuccess(series);\n      }\n    }\n  } else {\n    console.error('pimv1 updateSeriesDraft failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.updateSeriesDraftFailMessage'),\n      severity: 'error'\n    }));\n  }\n\n  onFinally?.();\n}\n\nexport function* updatePimSeriesDraftForDelete(\n  action: UpdatePimSeriesDraftForDeleteAction\n) {\n  const {\n    seriesId,\n    seriesInfo,\n  } = action.payload;\n\n  yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: i18next.t('translations:generalLoading.updating') } }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(updatePimSeriesDraftRaw, new UpdatePimSeriesDraftRawAction({\n    seriesId,\n    seriesInfo,\n    cascade: true,\n    forceCascade: true\n  }));\n\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const series: IMap<Series> = immutableResponse.getIn(['payload', 'pim', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      amplitude.logEvent(AMPLITUDE_EVENT.seriesDeleted, {\n        seriesName: series.get('name'),\n        seriesId: series.get('id'),\n        manufacturerName: series.get('brand'),\n        categoryName: series.get('categoryName'),\n        ...amplitudeData,\n      });\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:draftSnackbarMessage.updateSeriesDraftForDeleteSuccessMessage'),\n        severity: 'success'\n      }));\n      yield put(new UpdatePIMSeriesSucceededAction(series));\n    }\n  } else {\n    console.error('pimv1 updateSeriesDraftForDelete failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.updateSeriesDraftForDeleteFailMessage'),\n      severity: 'error'\n    }));\n  }\n}\n\nfunction* addPimSeriesDraftRaw(\n  action: AddPimSeriesDraftRawAction,\n) {\n  const {\n    series,\n    cascade\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addSeriesDraft',\n      body: {\n        ...series.toJS(),\n      },\n      queries: {\n        cascade\n      }\n    }\n  }));\n  return { data, err };\n}\n\nfunction* addPimSeriesDraft(\n  action: AddPimSeriesDraftAction,\n) {\n\n  yield put(new SetIsAddingPimSeriesDraftAction({ isAdding: true }));\n\n  const {\n    series,\n    skipAttributes,\n    useSourceSeriesSkipAttributes,\n    redirectOnSuccess = true,\n    onSuccess,\n    onFinally,\n  } = action.payload;\n\n  // get source series skip attributes, use for when making duplicates or new draft from existing series\n  const sourceSeriesSkipAttributes = useSourceSeriesSkipAttributes ? yield call(getSeriesSpecificMandatoryAttributes, new GetSeriesSpecificMandatoryAttributesAction({ series, skipOnly: true, idOnly: true })) : null;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(addPimSeriesDraftRaw, new AddPimSeriesDraftRawAction({\n    series,\n    cascade: false\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const seriesDraftData: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n\n    if (seriesDraftData == null) {\n      console.error('Invalid response', seriesDraftData); // tslint:disable-line\n    } else {\n      const dispatch = store.store.store.dispatch;\n      const seriesDraftId = seriesDraftData.get('id');\n      // send amplitude upon successful adding\n      if (onSuccess) {\n        onSuccess(seriesDraftData);\n      }\n\n      // skip attributes if needed\n      if (skipAttributes || sourceSeriesSkipAttributes?.size) {\n        yield call(saveSkipAttributes, new SaveSkipAttributesAction({\n          seriesId: seriesDraftId,\n          attributes: skipAttributes || sourceSeriesSkipAttributes.toJS()\n        }));\n      }\n\n      if (redirectOnSuccess) {\n        yield put(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesDraftId}`));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftSuccessMessage'),\n          severity: 'success',\n        }));\n      } else {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftSuccessMessage'),\n          severity: 'success',\n          actionProps: {\n            label: i18next.t('translations:draftSnackbarMessage.viewSeriesDraftActionLabel'),\n            autoHideDuration: null,\n            onclick: () => {\n              dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesDraftId}`));\n              dispatch(new SetSnackbarClosedAction());\n            }\n          }\n        }));\n      }\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n      severity: 'error'\n    }));\n    console.error('addSeriesDraft error', { err }); // tslint:disable-line\n  }\n\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n  yield put(new SetIsAddingPimSeriesDraftAction({ isAdding: false }));\n  onFinally?.();\n}\n\nfunction* addPimSeriesDraftForDelete(\n  action: AddPimSeriesDraftForDeleteAction,\n) {\n  const {\n    series,\n    dispatch,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(addPimSeriesDraftRaw, new AddPimSeriesDraftRawAction({\n    series,\n    cascade: true\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const seriesDraftData: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n\n    if (seriesDraftData == null) {\n      console.error('Invalid response', seriesDraftData); // tslint:disable-line\n    } else {\n      const seriesDraftId = seriesDraftData.get('id');\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      amplitude.logEvent(AMPLITUDE_EVENT.seriesDeleted, {\n        seriesName: seriesDraftData.get('name'),\n        seriesId: seriesDraftId,\n        manufacturerName: seriesDraftData.get('brand'),\n        categoryName: seriesDraftData.get('categoryName'),\n        ...amplitudeData,\n      });\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftForDeleteSuccessMessage'),\n        severity: 'success',\n        actionProps: {\n          label: i18next.t('translations:draftSnackbarMessage.viewSeriesDraftActionLabel'),\n          autoHideDuration: null,\n          onclick: () => {\n            dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesDraftId}`));\n            dispatch(new SetSnackbarClosedAction());\n          }\n        }\n      }));\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftForDeleteFailMessage'),\n      severity: 'error'\n    }));\n    console.error('addSeriesDraftForDelete error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteFirmSeriesThenSearchFirmSeries(\n  action: DeleteFirmSeriesThenSearchFirmSeriesAction\n) {\n  const {\n    firmSeriesId,\n    filters,\n    options,\n    isConfigurator\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteFirmSeriesById, new DeleteFirmSeriesAction({ firmSeriesId }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchFirmSeries, new SearchFirmSeriesAction({\n    options,\n    filters,\n    isConfigurator\n  }));\n}\n\nexport function* deleteFirmSeriesById(\n  action: DeleteFirmSeriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    firmSeriesId,\n    redirectPath,\n    redirectState\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteFirmSeries',\n      params: {\n        firmSeriesId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const deletedId: number = immutableData.getIn(['payload', 'pim', 'series', 'id']);\n    if (deletedId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (redirectPath) {\n        yield put(push(redirectPath, redirectState));\n      }\n    }\n  } else {\n    console.error('deleteFirmSeries failed', err); // tslint:disable-line\n  }\n  return {\n    data,\n    err\n  };\n}\n\n// refer to https://atsinc.atlassian.net/browse/PT-1919:\n// searchFirmSeries with `isConfigurator=true` returns `firmId = <user firm> OR brandRep'd series`\n// searchFirmSeries with `isConfigurator=false` only returns `firmId = <user firm>`\nexport function* searchFirmSeries(\n  action: SearchFirmSeriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    filters,\n    options,\n    isConfigurator,\n    location\n  } = payload;\n\n  const { filters: newFilters, isConfigurator: extractedIsConfigurator } = extractIsConfiguratorFromFilters(filters);\n\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchFirmSeries',\n      body: {\n        filters: newFilters,\n        options,\n        location\n      },\n      queries: {\n        isConfigurator: isConfigurator ?? extractedIsConfigurator,\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmSeries: List<IMap<Series>> = immutableData.getIn(['payload', 'pim', 'firmSeries']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'pim', 'hasNextPage']);\n    const count: number = immutableData.getIn(['payload', 'pim', 'count']);\n    if (firmSeries == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchFirmSeriesSucceededAction({ firmSeries, hasNextPage, firmSeriesCount: count }));\n    }\n\n  } else {\n    console.error('getSearchFirmSeries failed', err); // tslint:disable-line\n    yield put(new SearchFirmSeriesFailedAction());\n  }\n  return {\n    data,\n    err\n  };\n}\n\nexport function* updateFirmSeriesAndRedirect(\n  action: UpdateFirmSeriesAndRedirectAction\n) {\n  const { data, err } = yield call(updateFirmSeries, action);\n\n  action.payload?.onFinally?.();\n\n  const id = data?.payload?.pim?.firmSeries?.[0]?.id;\n  if (id) {\n    yield put(push(`${PIM_SERIES_DETAIL_PATH}/${id}`));\n  }\n}\n\nexport function* addFirmSeriesActionAndRedirect(\n  action: AddFirmSeriesAndRedirectAction\n) {\n  const { data, err } = yield call(addFirmSeries, action);\n\n  action.payload?.onFinally?.();\n\n  const id = data?.payload?.pim?.firmSeries?.[0]?.id;\n  if (id) {\n    yield put(push(`${PIM_SERIES_DETAIL_PATH}/${id}`));\n  }\n}\n\nexport function* updateFirmSeries(\n  action: UpdateFirmSeriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    firmSeries,\n    firmSeriesId,\n  } = payload;\n\n  yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: i18next.t('translations:generalLoading.updating') } }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateFirmSeries',\n      body: {\n        ...firmSeries.toJS()\n      },\n      params: {\n        firmSeriesId,\n      }\n    }\n  }));\n\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: false\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmSeriesResponse: List<IMap<Series>> = immutableData.getIn(['payload', 'pim', 'firmSeries']);\n    if (firmSeriesResponse == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetFirmSeriesByIdSucceededAction({ firmSeries: firmSeriesResponse.get(0) }));\n    }\n  } else {\n    console.error('UpdateFirmSeriesAction failed', err); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err\n  };\n}\n\nexport function* addFirmSeries(\n  action: AddFirmSeriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    firmSeries,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addFirmSeries',\n      body: {\n        ...firmSeries.toJS()\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmSeriesResponse: List<IMap<Series>> = immutableData.getIn(['payload', 'pim', 'firmSeries']);\n    if (firmSeriesResponse == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  } else {\n    console.error('AddFirmSeriesAction failed', err); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\n\nexport function* getFirmSeries(\n  action: GetFirmSeriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    seriesId,\n    isConfigurator = false,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getFirmSeries',\n      body: {\n        firmSeriesId: seriesId,\n      },\n      queries: {\n        isConfigurator\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmSeries: List<IMap<Series>> = immutableData.getIn(['payload', 'pim', 'firmSeries']);\n    if (firmSeries == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetFirmSeriesByIdSucceededAction({ firmSeries: firmSeries.get(0) }));\n    }\n\n  } else {\n    console.error('getFirmSeries failed', err); // tslint:disable-line\n  }\n}\n\nexport function* searchCategories(\n  action: SearchCategoriesAction\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    filters,\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchCategories',\n      body: {\n        filters,\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categoryList: List<IMap<Category>> = immutableData.getIn(['payload', 'pim', 'categories']);\n    if (categoryList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCategoriesSucceededAction({ categoryList }));\n    }\n\n  } else {\n    console.error('searchCategories list API failed', err); // tslint:disable-line\n  }\n}\n\nfunction* searchAttributeOptions(\n  {\n    payload,\n  }: SearchAttributeOptionsAction\n) {\n\n  yield put(new SetIsFetchingAttributeOptionsAction(true));\n\n  const {\n    categoryId,\n    attributeId,\n    filters,\n  } = payload;\n\n  const userRoles = yield select(makeSelectUserRole());\n  const hasDatabaseAdminRole = userRoles.includes(AclRoles.DATABASE_ADMIN);\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'searchOptions',\n        body: removeEmptyFilters({\n          filters: hasDatabaseAdminRole ? removeBrandFilters(filters) : filters\n        }),\n        params: {\n          categoryId,\n          attributeId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const pimAttributeOptions: List<IMap<PimAttributeOption>> = immutableData.getIn(['payload', 'pim', 'option', 0]);\n    if (pimAttributeOptions == null) {\n      console.error('Invalid response', pimAttributeOptions); // tslint:disable-line\n    } else {\n      yield put(new SearchAttributeOptionsSucceededAction({\n        pimAttributeOptions,\n        attributeId,\n      }));\n    }\n  } else {\n    console.error('SearchAttributeOptionsAction error', { err }); // tslint:disable-line\n  }\n  yield put(new SetIsFetchingAttributeOptionsAction(false));\n}\n\nfunction* searchAttributes(\n  {\n    payload,\n  }: SearchAttributesAction\n) {\n  const {\n    categoryId,\n    filters,\n  } = payload;\n\n  const userRoles = yield select(makeSelectUserRole());\n  const hasDatabaseAdminRole = userRoles.includes(AclRoles.DATABASE_ADMIN);\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'searchAttributes',\n        body: removeEmptyFilters({\n          filters: hasDatabaseAdminRole ? removeBrandFilters(filters) : filters\n        }),\n        params: {\n          categoryId,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const pimAttributes: List<IMap<PimAttribute>> = immutableData.getIn(['payload', 'pim', 'attribute', 0]);\n    if (pimAttributes == null) {\n      console.error('Invalid response', pimAttributes); // tslint:disable-line\n    } else {\n      yield put(new SearchAttributesSucceededAction(pimAttributes));\n    }\n  } else {\n    console.error('searchAttributes error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* getPimSeries(\n  {\n    payload,\n  }: GetSeriesFromPimServiceAction\n) {\n  const {\n    seriesId,\n    onSuccess,\n    onFail,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'getSeries',\n        body: {\n        },\n        params: {\n          seriesId,\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const series: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', series); // tslint:disable-line\n    } else {\n      yield put(new GetSeriesFromPimServiceSucceededAction(series));\n      onSuccess?.(series);\n    }\n  } else {\n    console.error('getPimSeries error', { err }); // tslint:disable-line\n    onFail?.();\n  }\n}\n\nfunction* getPimSeriesDraft(\n  {\n    payload,\n  }: GetPimSeriesdDraftAction\n) {\n  const {\n    seriesId,\n    onSuccess,\n    onFail,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'getSeriesDraft',\n        body: {\n        },\n        params: {\n          seriesId,\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const series: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', series); // tslint:disable-line\n    } else {\n      yield put(new GetSeriesFromPimServiceSucceededAction(series));\n      onSuccess?.(series);\n    }\n  } else {\n    console.error('getSeriesDraft error', { err }); // tslint:disable-line\n    onFail?.();\n  }\n}\n\nfunction* getPimSeriesDraftByParentId(\n  {\n    payload,\n  }: GetPimSeriesdDraftByParentIdAction\n) {\n  const {\n    seriesId,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'getSeriesDraftByParentId',\n        body: {\n        },\n        params: {\n          seriesId,\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const series: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', series); // tslint:disable-line\n    } else {\n      yield put(new GetSeriesFromPimServiceSucceededAction(series));\n    }\n  } else {\n    console.error('getSeriesDraftByParentId error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteSeriesByIdAndSearchSeries(\n  action: DeleteSeriesByIdAndSearchSeriesAction\n) {\n  const {\n    seriesId,\n    filters,\n    options,\n    draft,\n    sendAmplitude = null\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = draft\n      ? yield call(deleteSeriesDraftById, new DeleteSeriesDraftByIdAction({ seriesId, sendAmplitude }))\n      : yield call(deleteSeriesById, new DeleteSeriesByIdAction({ seriesId, sendAmplitude }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchSeries, new SearchSeriesAction({\n    options,\n    filters,\n    draft,\n  }));\n}\n\nfunction* deleteSeriesByIdAndSearchXref(\n  action: DeleteSeriesByIdAndSearchXrefAction\n) {\n  const {\n    seriesId,\n    filters,\n    options,\n    competitorOrSponsor,\n  } = action.payload;\n\n  const searchXrefAction = competitorOrSponsor === 'competitor'\n    ? SearchXrefCompetitorAction\n    : SearchXrefSponsorAction;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteSeriesById, new DeleteSeriesByIdAction({ seriesId }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield put(new searchXrefAction({\n    type: 'series',\n    filters,\n    options\n  }));\n}\n\nfunction* deleteSeriesProductByIdAndSearchXref(\n  action: DeleteSeriesProductByIdAndSearchXrefAction\n) {\n  const {\n    productId,\n    filters,\n    options,\n    competitorOrSponsor,\n  } = action.payload;\n\n  const searchXrefAction = competitorOrSponsor === 'competitor'\n    ? SearchXrefCompetitorAction\n    : SearchXrefSponsorAction;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteSeriesProductById, new DeleteSeriesProductByIdAction({ productId }));\n  const {\n    data: data2,\n    err: err2,\n  }: {\n    data: any,\n    err: Error\n  } = yield put(new searchXrefAction({\n    type: 'product',\n    filters,\n    options\n  }));\n}\n\nfunction* deleteSeriesById(\n  action: DeleteSeriesByIdAction,\n) {\n  const {\n    seriesId,\n    redirectPath,\n    sendAmplitude = null\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteSeries',\n      params: {\n        seriesId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const seriesIds: List<IMap<HasId>> = immuData.getIn(['payload', 'pim', 'series']); // only ids\n    if (seriesIds == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // yield put(new DeleteSeriesByIdSucceededAction({ seriesIds }));\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n      if (sendAmplitude) {\n        sendAmplitude();\n      }\n    }\n  } else {\n    console.error('project no data', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteSeriesProductById(\n  action: DeleteSeriesProductByIdAction,\n) {\n  const {\n    productId,\n    toggleSnackbar = false\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'deleteProduct',\n      params: {\n        productId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const deletedProductId: number = Number(immuData.getIn(['payload', 'pim', 'product', 'id']));\n    if (deletedProductId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new DeleteSeriesProductByIdSucceededAction({ deletedProductId }));\n      if (toggleSnackbar) {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:pimProductDrawer.deleteSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n    }\n  } else {\n    if (toggleSnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.deleteFailMessage'),\n        severity: 'error'\n      }));\n    }\n    console.error('deleteProduct error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* deleteSeriesProductByIdThenSearchSeriesProducts(\n  action: DeleteSeriesProductByIdThenSearchSeriesProductsAction\n) {\n  const {\n    productId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteSeriesProductById, new DeleteSeriesProductByIdAction({ productId, toggleSnackbar: true }));\n\n  if (data) {\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield put(new SetSearchBodyAndSearchPimProductsAction({}));\n  }\n}\n\nexport function sanitizeRecommendedAttributes(recommendedAttributes: List<IMap<RecommendedAttribute>>): List<IMap<RecommendedAttribute>> {\n  if (!recommendedAttributes) {\n    return recommendedAttributes;\n  }\n\n  let attributeIdsMap = Map();\n  return recommendedAttributes?.reduce((acc, attr) => {\n    const attributeId = attr.get('attributeId');\n    if (!attributeIdsMap.has(attributeId)) {\n      attributeIdsMap = attributeIdsMap.set(attributeId, true);\n      return acc.push(attr);\n    }\n    return acc;\n  }, List());\n}\n\nexport function sanitizeMandatoryRecommendedAttributes(mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes>): IMap<MandatoryRecommendedAttributes> {\n  return mandatoryRecommendedAttributes.reduce((acc: IMap<MandatoryRecommendedAttributes>, attributes: List<IMap<RecommendedAttribute>>, key: string) => {\n    return acc.set(key, sanitizeRecommendedAttributes(attributes));\n  }, Map() as IMap<MandatoryRecommendedAttributes>);\n}\n\nexport function* searchRecommendedAttributes(\n  action: SearchRecommendedAttributesAction\n) {\n  const {\n    brandId,\n    categoryId,\n    seriesId,\n    filters = {},\n    onSuccess,\n  } = action.payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'searchRecommendedAttributes',\n      body: {\n        filters\n      },\n      params: {\n        categoryId,\n        brandId,\n      },\n      queries: {\n        ...seriesId ? { series: seriesId } : []\n      },\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const mandatoryRecommendedAttributes: IMap<MandatoryRecommendedAttributes> = immutableResponse.getIn(['payload', 'pim', 'attribute']);\n    if (mandatoryRecommendedAttributes == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchRecommendedAttributesSuccessAction(sanitizeMandatoryRecommendedAttributes(mandatoryRecommendedAttributes)));\n      if (onSuccess) {\n        onSuccess(mandatoryRecommendedAttributes);\n      }\n    }\n  } else {\n    console.error('pimv1 searchRecommendedAttributes failed', err); // tslint:disable-line\n  }\n\n  return { data, err };\n}\n\nexport function* getSeriesSpecificMandatoryAttributes(\n  action: GetSeriesSpecificMandatoryAttributesAction\n) {\n  const {\n    series,\n    skipOnly,\n    idOnly,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(searchRecommendedAttributes, new SearchRecommendedAttributesAction({\n    seriesId: series.get('id'),\n    brandId: series.get('brandId'),\n    categoryId: series.get('category')\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    let mandatoryAttributes = immutableResponse?.getIn(['payload', 'pim', 'attribute', 'required']);\n\n    if (skipOnly) {\n      mandatoryAttributes = mandatoryAttributes?.filter((attr: IMap<RecommendedAttribute>) => attr.get('skip'));\n    }\n    if (idOnly) {\n      mandatoryAttributes = mandatoryAttributes?.map((attr: IMap<RecommendedAttribute>) => attr.get('attributeId'));\n    }\n\n    return mandatoryAttributes;\n  }\n  return;\n}\n\nexport function* saveSkipAttributes(\n  action: SaveSkipAttributesAction\n) {\n  const {\n    seriesId,\n    attributes,\n  } = action.payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'skipAttribute',\n      body: {\n        attributes\n      },\n      params: {\n        seriesId\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const success: boolean = immutableResponse.getIn(['payload', 'pim', 'success']);\n    if (!success) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Failed to skip mandatory attributes',\n        severity: 'error'\n      }));\n    }\n  } else {\n    console.error('pimv1 skipAttributes failed', err); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Failed to skip mandatory attributes',\n      severity: 'error'\n    }));\n  }\n}\n\n// making the assumption that isConfigurator exist in the first level of and/or;\nexport function extractIsConfiguratorFromFilters(filters: Filter) {\n  const isAndFilters = filters?.and as any;\n  const isOrFilters = filters?.or as any;\n  let isConfigurator = null;\n  if (isAndFilters || isOrFilters) {\n    const newFilterArray = (isAndFilters || isOrFilters).filter((filter: any) => {\n      if (filter.hasOwnProperty('isConfigurator')) {\n        isConfigurator = filter?.isConfigurator?.eq;\n      }\n      return filter.isConfigurator === undefined;\n    });\n    const newFilters = newFilterArray?.length\n      ? isAndFilters ? { and: newFilterArray } : { or: newFilterArray }\n      : null;\n    return { filters: newFilters, isConfigurator };\n  } else {\n    return { filters, isConfigurator };\n  }\n}\n\nexport function* searchSeries(\n  action: SearchSeriesAction\n) {\n  const {\n    filters,\n    options,\n    draft = false,\n    isCompetitor\n  } = action.payload;\n\n  const { filters: newFilters, isConfigurator } = extractIsConfiguratorFromFilters(filters);\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(directApiCallWaitingAction, new DirectApiCallAction({\n    payload: {\n      service: 'mspim',\n      endpoint: '/series.search',\n      method: 'post',\n      body: {\n        filters: newFilters,\n        options,\n        draft,\n        ...(isCompetitor !== undefined ? { isCompetitor } : {}),\n        isConfigurator\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const series: List<IMap<Series>> = immutableResponse.getIn(['payload', 'mspim', 'series']);\n    const seriesHasNextPage: boolean = immutableResponse.getIn(['payload', 'mspim', 'hasNextPage']);\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new LoadingSeriesFinishedAction());\n    } else {\n      yield put(new SearchSeriesSucceededAction({\n        series,\n        seriesHasNextPage\n      }));\n    }\n  } else {\n    console.error('pimv1 getSearchSeries failed', err); // tslint:disable-line\n    yield put(new SearchSeriesFailedAction());\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* getSeriesDetail(\n  action: GetSeriesDetailsAction\n) {\n  const {\n    xrefProduct,\n    onSuccess,\n    onFailed,\n  } = action.payload;\n\n  const start = Date.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchSeries',\n      body: {\n        filters: { 'and': [{ id: { eq: xrefProduct.get('id') } }] }\n      },\n      queries: {\n        isCompetitor: 'null'\n      }\n    }\n  }));\n  const end = Date.now();\n\n  let seriesData;\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const series: List<IMap<Series>> = immutableResponse.getIn(['payload', 'pim', 'series']);\n    const seriesHasNextPage: boolean = immutableResponse.getIn(['payload', 'pim', 'hasNextPage']);\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new LoadingSeriesFinishedAction());\n    } else {\n      yield put(new SearchSeriesSucceededAction({\n        series,\n        seriesHasNextPage\n      }));\n      seriesData = series?.get(0);\n      onSuccess?.(seriesData);\n    }\n  } else {\n    console.error('pimv1 getSeriesDetail failed', err); // tslint:disable-line\n    yield put(new SearchSeriesFailedAction());\n    onFailed?.();\n  }\n\n  const trackingData = {\n    type: 'series',\n    seriesId: xrefProduct.get('id'),\n    productNumber: seriesData?.get('productNumber') || null,\n    manufacturer: seriesData?.get('brand') || null,\n    categoryName: seriesData?.get('categoryName') || null,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefSponsorProductDetailSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* addFirmProductFile(\n  {\n    payload,\n  }: AddFirmProductFileAction\n) {\n  const {\n    firmProductId,\n    fileId,\n    fileType,\n    languageCode = 'en',\n    onSuccess,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'addFirmProductFile',\n        body: {\n          fileId,\n          fileType,\n          languageCode,\n        },\n        params: {\n          firmProductId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    // success\n    const immutableData = fromJS(data);\n    const updatedFirmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n    if (updatedFirmProduct) {\n      onSuccess?.(updatedFirmProduct);\n    }\n  } else {\n    // temp FE solution for BE issue\n    if ((err as any).payload.error.code === 404) {\n      yield put(new IsInactiveProductAction());\n    }\n    console.error('addFirmProductFile error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* addFirmProductFileAndGetMedia(\n  {\n    payload,\n  }: AddFirmProductFileAndGetMediaAction\n) {\n  const {\n    firmProductId,\n    fileId,\n    quoteId,\n    fileType,\n    languageCode = 'en',\n  } = payload;\n\n  yield call(addFirmProductFile, new AddFirmProductFileAction({\n    firmProductId,\n    fileId,\n    fileType,\n    languageCode\n  }));\n  yield call(getProductMedia, new GetProductMediaAction({ quoteId }));\n}\n\nfunction* deleteFirmProductFileAndGetMedia(\n  {\n    payload,\n  }: DeleteFirmProductFileAndGetMediaAction\n) {\n  const {\n    firmProductId,\n    quoteId,\n    fileType,\n    languageCode,\n  } = payload;\n\n  yield call(deleteFirmProductFile, new DeleteFirmProductFileAction({\n    firmProductId,\n    fileType,\n    languageCode,\n  }));\n  yield call(getProductMedia, new GetProductMediaAction({ quoteId }));\n}\n\nfunction* deleteFirmProductFile(\n  {\n    payload,\n  }: DeleteFirmProductFileAction\n) {\n  const {\n    firmProductId,\n    fileType,\n    languageCode = 'en',\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'removeFirmProductFile',\n        body: {\n          fileType,\n          languageCode,\n        },\n        params: {\n          firmProductId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    // success\n  } else {\n    console.error('deleteFirmProductFile error', { err }); // tslint:disable-line\n  }\n}\n\nfunction* deleteFirmProduct(\n  {\n    payload,\n  }: DeleteFirmProductAction\n) {\n  const { productId } = payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'pim',\n        endpoint: 'deleteFirmProduct',\n        body: {\n\n        },\n        params: {\n          firmProductId: productId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct']);\n    if (firmProduct == null) {\n      console.error('Invalid response', firmProduct); // tslint:disable-line\n    } else {\n      yield put(new DeleteFirmProductSucceeded({\n        productId\n      }));\n    }\n  } else {\n    console.error('delete product error', { err }); // tslint:disable-line\n  }\n}\n\nfunction createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action, quoteRelevance, addToQuote, amplitudeData }) {\n  amplitude.logEvent(AMPLITUDE_EVENT.createOrUpdateFirmProduct, {\n    action,\n    firmProductId: firmProduct.get('id'),\n    brand: firmProduct.getIn(['firmProduct', 'brand']),\n    brandId: firmProduct.getIn(['firmProduct', 'brandId']),\n    category: firmProduct.getIn(['firmProduct', 'categoryName']),\n    categoryId: firmProduct.getIn(['firmProduct', 'category']),\n    quoteRelevance,\n    addToQuote,\n    ...amplitudeData,\n  });\n}\n\nfunction* updateQuoteRowWithProduct(\n  {\n    payload,\n  }: UpdateQuoteRowWithProductAction\n) {\n  const {\n    productId,\n    firmProduct,\n    isNewProduct,\n  } = payload;\n\n  const dispatch = store.store.store.dispatch;\n  const pimProductsPackagesList = yield select(makeSelectSearchedPimProductsPackages());\n  const productRowOnFocus = yield select(makeSelectProductRowOnFocus());\n  const isSpecToQuote = yield select(makeSelectIsSpecToQuote());\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  const rowId = productRowOnFocus.get('rowId');\n  let sectionIndex = productRowOnFocus.get('sectionIndex');\n  let productIndex = productRowOnFocus.get('productIndex');\n\n  const quoteSections = yield select(quoteFormSelector(['sections']));\n  const currentIndexRowId = quoteSections?.getIn([sectionIndex, 'products', productIndex, 'rowId']);\n\n  if (isNewProduct) { // for adding a new firm product\n    const addAsNewRow = rowId === '-1'; // add as a new product row, so basically the very last row\n    if (addAsNewRow) { // on a new row\n      productIndex = quoteSections.getIn([sectionIndex, 'products']).size;\n      yield put(new AddProductOrPackageToQuoteAction({\n        section: sectionIndex,\n        row: productIndex,\n        product: firmProduct,\n        callback: () => {\n          dispatch(new SetPresentationalLabelColumnAction({ section: sectionIndex, labelColumn: '' }));\n          dispatch(new ResetQuoteSearchProducts());\n          // dispatch(new SetSnackbarOpenAction({\n          //   message: i18next.t('translations:productDrawer.addProductToQuoteSuccessMessage'),\n          //   severity: 'success'\n          // }));\n          if (isSpecToQuote) {\n            dispatch(new ApplyFeedbackAction({ value: firmProduct, sectionIndex, productIndex }));\n          }\n          createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'create', quoteRelevance: true, addToQuote: true, amplitudeData });\n        }\n      }));\n    } else { // on an existing row\n      let targetRowExists = currentIndexRowId === rowId;\n      if (!targetRowExists) {\n        // find currentIndexRowId if it exist and then use the sectionIndex and productIndex from that\n        targetRowExists = quoteSections?.some((section, _sectionIndex) => {\n          return section?.get('products')?.some((product, _productIndex) => {\n            if (product.get('rowId') === rowId) {\n              sectionIndex = _sectionIndex;\n              productIndex = _productIndex;\n              return true;\n            }\n            return false;\n          });\n        });\n      }\n      if (targetRowExists) {\n        yield put(new AddProductOrPackageToQuoteAction({\n          section: sectionIndex,\n          row: productIndex,\n          product: firmProduct,\n          callback: () => {\n            dispatch(change(QUOTE_FORM_NAME, `sections[${sectionIndex}].uiData.products[${productIndex}].labelColumn`, ''));\n            dispatch(new ResetQuoteSearchProducts());\n            // dispatch(new SetSnackbarOpenAction({\n            //   message: i18next.t('translations:productDrawer.addProductToQuoteSuccessMessage'),\n            //   severity: 'success'\n            // }));\n            if (isSpecToQuote) {\n              dispatch(new ApplyFeedbackAction({ value: firmProduct, sectionIndex, productIndex }));\n            }\n            createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'create', quoteRelevance: true, addToQuote: true, amplitudeData });\n          }\n        }));\n      }\n    }\n  } else { // for editting an existing firm product\n    let targetRowExists = currentIndexRowId === rowId;\n    if (!targetRowExists) {\n      // find currentIndexRowId if it exist and then use the sectionIndex and productIndex from that\n      targetRowExists = quoteSections?.some((section, _sectionIndex) => {\n        return section?.get('products')?.some((product, _productIndex) => {\n          if (product.get('rowId') === rowId) {\n            sectionIndex = _sectionIndex;\n            productIndex = _productIndex;\n            return true;\n          }\n          return false;\n        });\n      });\n    }\n\n    if (pimProductsPackagesList && pimProductsPackagesList.size > 0) {\n      yield put(new EditFirmProductOrPackageSucceededAction(firmProduct));\n    }\n\n    if (targetRowExists) {\n      // update recommendations if it is s2q\n      if (isSpecToQuote) {\n        const specId = yield select(quoteFormSelector(['createdFromSpecId']));\n        yield put(new UpdateSpecToQuoteLinkedListRecommendationsAction({ specId, productOrPackageId: productId, productOrPackage: firmProduct }));\n      }\n\n      const exsitingProduct = yield select(quoteFormSelector(['sections', sectionIndex, 'products', productIndex]));\n      // add most updated package to quote if the product is already in the quote\n      if (exsitingProduct && !exsitingProduct.get('uniquePackageId') && exsitingProduct.get('firmProductId') === productId) {\n        yield put(new AddProductOrPackageToQuoteAction({\n          section: sectionIndex,\n          row: productIndex,\n          product: firmProduct,\n          callback: () => {\n            // dispatch(new SetSnackbarOpenAction({\n            //   message: i18next.t('translations:productDrawer.addProductToQuoteSuccessMessage'),\n            //   severity: 'success'\n            // }));\n            createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'edit', quoteRelevance: true, addToQuote: true, amplitudeData });\n          }\n        }));\n      } else {\n        createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'edit', quoteRelevance: true, addToQuote: false, amplitudeData });\n      }\n    } else {\n      createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'edit', quoteRelevance: true, addToQuote: false, amplitudeData });\n    }\n  }\n}\n\n/**\n * The firmProductId an edit must be applied to, or null when the row cannot be\n * edited at all.\n *\n * A row that ms-pim could not hydrate carries no `deltas` (see\n * firmRowFromDocOnly), so there is no record to apply an edit to — and the\n * drawer would otherwise build a payload of form values only, which the PHP\n * update writes column-for-column and would use to NULL every field the form\n * does not carry (ean, source, series, and the whole media tree). Refusing is\n * the safe outcome; reporting it plainly is the difference between this and the\n * obscure \"Missing parameters (firmProductId)\" the API layer raises.\n */\nfunction* requireFirmProductId(product: any, context: string) {\n  const firmProductId = product?.getIn(['deltas', 'firmProductId']);\n  if (!firmProductId) {\n    console.error(`${context}: row has no deltas.firmProductId`, { product }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - product details are unavailable, please refresh the list and try again',\n      severity: 'error',\n    }));\n    return null;\n  }\n  return firmProductId;\n}\n\nfunction* editFirmProduct(\n  {\n    payload,\n  }: EditFirmProductAction,\n) {\n\n  const {\n    product,\n    closeDrawer,\n    sharedProduct = null,\n    productSharedWithMe,\n    callbackWithProduct\n  } = payload;\n\n  const productId = yield* requireFirmProductId(product, 'editFirmProduct');\n  if (!productId) {\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateFirmProduct',\n      body: {\n        firmProductId: productId,\n        ...product.toJS(),\n      },\n      queries: {\n        sharedProduct,\n        ...(productSharedWithMe !== undefined) ? { productSharedWithMe } : {}\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n\n    if (!firmProduct) {\n      console.error('Invalid response', firmProduct); // tslint:disable-line\n    } else {\n      yield put(new SetOverlayComponentContentAction({\n        id: PRODUCT_DRAWER_ID,\n        content: SUCCESS_DRAWER,\n      }));\n      if (closeDrawer) {\n        yield put(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: false,\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:productDrawer.updateSuccessMessage'),\n          severity: 'success',\n        }));\n      }\n      if (callbackWithProduct) {\n        callbackWithProduct(firmProduct);\n      }\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'edit', quoteRelevance: false, addToQuote: false, amplitudeData });\n    }\n  } else {\n    console.error('edit firm product by product id', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:productDrawer.updateFailMessage'),\n      severity: 'error',\n    }));\n  }\n}\n\nfunction* editFirmProductAndAddToQuote(\n  {\n    payload,\n  }: EditFirmProductAndAddToQuoteAction,\n) {\n\n  const {\n    product,\n    closeDrawer,\n    sharedProduct = null,\n    productSharedWithMe,\n    updateQuoteProductRow,\n    addToQuote,\n    callbackWithProduct\n  } = payload;\n\n  const productId = yield* requireFirmProductId(product, 'editFirmProductAndAddToQuote');\n  if (!productId) {\n    return;\n  }\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'updateFirmProduct',\n      body: {\n        firmProductId: productId,\n        ...product.toJS(),\n      },\n      queries: {\n        sharedProduct,\n        ...(productSharedWithMe !== undefined) ? { productSharedWithMe } : {}\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n\n    if (!firmProduct) {\n      console.error('Invalid response', firmProduct); // tslint:disable-line\n    } else {\n      if (updateQuoteProductRow || addToQuote) {\n        yield put(new UpdateQuoteRowWithProductAction({ productId, firmProduct, isNewProduct: Boolean(addToQuote) }));\n      }\n\n      if (closeDrawer) {\n        yield put(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: false,\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:productDrawer.updateSuccessMessage'),\n          severity: 'success',\n        }));\n      } else {\n        yield put(new SetOverlayComponentContentAction({\n          id: PRODUCT_DRAWER_ID,\n          content: SUCCESS_DRAWER,\n        }));\n      }\n\n      if (callbackWithProduct) {\n        callbackWithProduct(firmProduct);\n      }\n    }\n  } else {\n    console.error('editFirmProductAndAddToQuote', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:productDrawer.updateFailMessage'),\n      severity: 'error',\n    }));\n  }\n}\n\nfunction* addPimProductOrSeries(\n  {\n    payload: {\n      productOrSeries,\n      type = 'product',\n      toggleSnackbar = false,\n      redirectPath,\n    }\n  }: AddPimProductOrSeriesAction,\n) {\n\n  const endpoint = type === 'product' ? 'addProduct' : 'addSeries';\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint,\n      body: {\n        ...productOrSeries.toJS(),\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productSeriesData: IMap<Product | Series> = immutableData.getIn(['payload', 'pim', type, 0]);\n\n    if (productSeriesData == null) {\n      console.error('Invalid response', productSeriesData); // tslint:disable-line\n    } else {\n      if (type === 'product') {\n        yield put(new AddPimProductSucceededAction({ product: productSeriesData }));\n        if (toggleSnackbar) {\n          yield put(new SetSnackbarOpenAction({\n            message: i18next.t('translations:pimProductDrawer.createSuccessMessage'),\n            severity: 'success'\n          }));\n        }\n      } else if (type === 'series') {\n        const seriesId = productSeriesData.get('id');\n        if (redirectPath) {\n          yield put(push(`${redirectPath}/${seriesId}`));\n        }\n      }\n\n      yield put(new SetOverlayComponentPropsAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n        props: {\n          title: i18next.t('translations:pimCrossReferenceProductDrawer.addEditCompetitorProduct'),\n          caption: i18next.t('translations:pimCrossReferenceProductDrawer.productOrSeriesSavedMessage'),\n        }\n      }));\n      yield put(new SetOverlayComponentContentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        content: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n      }));\n    }\n\n  } else {\n    if (toggleSnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.createFailMessage'),\n        severity: 'error'\n      }));\n    }\n    console.error('add pim product error', { err }); // tslint:disable-line\n  }\n}\nfunction* addATSLibraryProduct(\n  {\n    payload: {\n      product,\n      onValidationFailed\n    }\n  }: AddATSLibraryProductAction,\n) {\n  const response = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchProducts',\n      body: {\n        filters: {\n          'and': [\n            {\n              'productNumber': {\n                'eq': product.get('productNumber'),\n              },\n            },\n            {\n              'categoryName': {\n                'eq': product.get('categoryName'),\n              },\n            },\n            {\n              'brand': {\n                'eq': product.get('brand')\n              }\n            },\n          ]\n        },\n      },\n      queries: {\n        isCompetitor: null,\n      }\n    }\n  }));\n  if (response.err) {\n    console.error('get pim product failed', { err: response.err }); // tslint:disable-line\n  } else if (response?.data?.payload?.pim?.count === 0) {\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'pim',\n        endpoint: 'addProduct',\n        body: {\n          ...product.toJS(),\n        },\n      }\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const productData: IMap<Product | Series> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n\n      if (productData == null) {\n        console.error('Invalid response', productData); // tslint:disable-line\n      } else {\n        yield put(new AddPimProductSucceededAction({ product: productData }));\n        yield put(new SetOverlayComponentPropsAction({\n          id: LIBRARY_PRODUCT_DRAWER_ID,\n          // props: {\n          //   title: i18next.t('translations:pimCrossReferenceProductDrawer.addEditCompetitorProduct'),\n          //   caption: i18next.t('translations:pimCrossReferenceProductDrawer.productOrSeriesSavedMessage'),\n          // }\n        }));\n        yield put(new SetOverlayComponentContentAction({\n          id: LIBRARY_PRODUCT_DRAWER_ID,\n          content: SUCCESS_DRAWER,\n        }));\n      }\n    } else {\n      console.error('add pim product error', { err }); // tslint:disable-line\n    }\n  } else {\n    onValidationFailed?.();\n  }\n}\nfunction* addPimProduct(\n  action: AddPimProductAction,\n) {\n  const {\n    product,\n    toggleSnackbar = false\n  } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addProduct',\n      body: {\n        ...product.toJS()\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productData: IMap<Product> = immutableData.getIn(['payload', 'pim', 'product', 0]);\n\n    if (productData == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (toggleSnackbar) {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:pimProductDrawer.createSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n    }\n  } else {\n    if (toggleSnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.createFailMessage'),\n        severity: 'error'\n      }));\n    }\n    console.error('addProduct error', { err }); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nfunction* addPimProductThenSearchPimProducts(\n  action: AddPimProductThenSearchPimProductsAction\n) {\n  const {\n    product\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(addPimProduct, new AddPimProductAction({ product, toggleSnackbar: true }));\n\n  if (data) {\n    const {\n      data: data2,\n      err: err2,\n    }: {\n      data: any,\n      err: Error\n    } = yield put(new SetSearchBodyAndSearchPimProductsAction({}));\n  }\n}\n\nfunction* addFirmProduct(\n  {\n    payload,\n  }: AddFirmProductAction,\n) {\n\n  const {\n    deltas,\n    closeDrawer,\n    callbackWithProduct\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addFirmProduct',\n      body: {\n        ...deltas.toJS(),\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n\n    if (firmProduct == null) {\n      console.error('Invalid response', firmProduct); // tslint:disable-line\n    } else {\n      yield put(new SetOverlayComponentContentAction({\n        id: PRODUCT_DRAWER_ID,\n        content: SUCCESS_DRAWER,\n      }));\n      if (closeDrawer) {\n        yield put(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: false,\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:productDrawer.createSuccessMessage'),\n          severity: 'success',\n        }));\n      }\n      if (callbackWithProduct) {\n        callbackWithProduct(firmProduct);\n      }\n      // The /products list refetches as soon as the drawer reports success,\n      // which races the search index: the push is fire-and-forget on both hops\n      // and the index refresh interval is 1s, so the product is routinely not\n      // searchable yet. Hold it so the list can show it during that window;\n      // the reducer drops it the moment a search result contains it.\n      yield put(new FirmProductCreatedPendingIndexAction({\n        firmProduct,\n        at: Date.now(),\n      }));\n    }\n    const amplitudeData = yield select(makeSelectAmplitudeData());\n    createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'create', quoteRelevance: false, addToQuote: false, amplitudeData });\n  } else {\n    console.error('addFirmProduct', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:productDrawer.createFailMessage'),\n      severity: 'error',\n    }));\n  }\n}\n\nfunction* addFirmProductAndAddToQuote(\n  {\n    payload,\n  }: AddFirmProductAndAddToQuoteAction,\n) {\n\n  const {\n    deltas,\n    addToQuote,\n    closeDrawer,\n    callbackWithProduct\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'addFirmProduct',\n      body: {\n        ...deltas.toJS(),\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n\n    if (firmProduct == null) {\n      console.error('Invalid response', firmProduct); // tslint:disable-line\n    } else {\n      if (addToQuote) {\n        yield put(new UpdateQuoteRowWithProductAction({\n          productId: firmProduct.get('id'),\n          firmProduct,\n          isNewProduct: true,\n        }));\n      } else {\n        const amplitudeData = yield select(makeSelectAmplitudeData());\n        createOrUpdateFirmProductAmplitudeTracking({ firmProduct, action: 'create', quoteRelevance: true, addToQuote: false, amplitudeData });\n      }\n      if (closeDrawer) {\n        yield put(new ToggleOverlayComponentAction({\n          id: PRODUCT_DRAWER_ID,\n          open: false,\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:productDrawer.createSuccessMessage'),\n          severity: 'success',\n        }));\n      } else {\n        yield put(new SetOverlayComponentContentAction({\n          id: PRODUCT_DRAWER_ID,\n          content: SUCCESS_DRAWER,\n        }));\n      }\n      if (callbackWithProduct) {\n        callbackWithProduct(firmProduct);\n      }\n    }\n  } else {\n    console.error('addFirmProductAndAddToQuote', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:productDrawer.createFailMessage'),\n      severity: 'error',\n    }));\n  }\n}\n\nexport function* fetchFirmProductPackages({\n  searchTerm,\n  isQuoteConnect,\n  queries,\n  isParentSharedSearch,\n}: {\n  searchTerm: string,\n  isQuoteConnect?: boolean,\n  queries: any,\n  isParentSharedSearch: boolean,\n}) {\n  let options = {\n    limit: 100,\n    offset: 0,\n    orderBy: {\n      rank: -1,\n      type: -1,\n      productNumber: 1,\n    }\n  };\n\n  let filters = !isQuoteConnect ? {\n    'and': [\n      { 'productSearch': { 'match': searchTerm } },\n      { 'status': { 'neq': 'archived' } },\n    ]\n  } : {\n    'or': [\n      { 'productNumber': { 'like': searchTerm } },\n      { 'brand': { 'like': searchTerm } },\n      { 'description': { 'like': searchTerm } },\n    ]\n  };\n\n  const searchSetting = yield select(selectSearchMode);\n  ({ options, filters } = parseFiltersAndOptions({ options, filters, searchSetting, isQCSearch: isQuoteConnect }));\n\n  // ── New Search (OpenSearch) branch — gated by the 'New Search' feature-flag\n  // role. The legacy merged endpoint reads product_dump for its product half,\n  // which New Search must never touch, so we assemble the hybrid ourselves:\n  // products from the New Search firm surface + packages from the legacy\n  // package-service, interleaved by ranking. Callers without the role fall\n  // through to the legacy merged PIM endpoint untouched.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  if (hasNewSearch) {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    const sharedProduct = queries?.sharedProduct;\n\n    // Products (New Search firm surface). rankContext orders them by the\n    // product_ranking group rank for this app — the common key the merge uses.\n    // geoname/building are intentionally omitted so the product rank stays\n    // comparable with the package rank below: the package endpoint ranks at the\n    // app level only on this path (it isn't sent a location/building), so\n    // applying those dimensions to only the product half would skew the merge.\n    const productBody: any = {\n      query: searchTerm,\n      size: 100,\n      from: 0,\n      rankContext: { appId },\n    };\n    if (typeof sharedProduct === 'boolean') {\n      productBody.sharedProduct = sharedProduct;\n    }\n    // e.g. `status: {neq: 'archived'}`. The firm surface's own typed-search\n    // status set includes archived, so without this New Search showed archived\n    // products on quote line items that the legacy query hides.\n    const productRestrictions = firmRestrictionFilters(filters);\n    if (productRestrictions) {\n      productBody.filters = productRestrictions;\n    }\n    const { data: productData, err: productErr } = yield* callNewSearch('quote line items', 'items', () => ProductSearchServiceApi.searchFirmProducts(env, appId, productBody));\n\n    // Packages (legacy package-service). NOTE: the package-service field mapper\n    // only understands productSearch / productNumber / productSimpleSearch — it\n    // cannot apply the product-shaped filters (e.g. status:{neq:'archived'})\n    // built above. The legacy merged endpoint got away with reusing them only\n    // because pim-service added `packageFlag=1`, which strips non-package\n    // clauses server-side; this direct call gets no such stripping and 500s if\n    // we forward them. So we send only the search term, in the form the package\n    // search understands, plus an orderBy over mapped fields.\n    const packageFilters = isQuoteConnect\n      ? { or: [{ productNumber: { like: searchTerm } }] }\n      : { and: [{ productSearch: { match: searchTerm } }] };\n    const packageOptions = {\n      limit: 100,\n      offset: 0,\n      orderBy: { rank: -1, type: -1, productNumber: 1 },\n    };\n    const { data: pkgData, err: pkgErr } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'package',\n        endpoint: 'searchFirmPackages',\n        body: {\n          filters: packageFilters,\n          options: packageOptions,\n          populate: true,\n        },\n        queries: { sharedProduct: sharedProduct ?? null },\n      }\n    }));\n\n    if (productErr) {\n      // Products are the required half; a failure here is the operation failure.\n      return { data: null, err: productErr, productList: null };\n    }\n    if (!pkgData) {\n      // Packages are supplementary; log and continue with products only.\n      console.error('New Search firm-product-packages: packages search failed', pkgErr); // tslint:disable-line\n    }\n    const products = fromJS(mapNewSearchFirmProducts(productData.payload.mssearch.items));\n    const packages: List<any> = pkgData\n      ? (fromJS(pkgData).getIn(['payload', 'package', 'package']) ?? List())\n      : List();\n    const mergedList = mergeFirmProductPackagesByRank(products, packages);\n    return { data: { merged: true }, err: undefined, productList: mergedList };\n  }\n\n  const start = Date.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchFirmProductPackages',\n      body: {\n        filters,\n        options,\n        populate: true\n      },\n      queries\n    }\n  }));\n  const end = Date.now();\n\n  const productList = data ? fromJS(data).getIn(['payload', 'pim', 'firmProduct']) : null;\n\n  const filterData = {\n    productSearch_match: searchTerm || null,\n    itemNumber_startsWith: searchTerm || null,\n    optionsLimit: 100,\n    orderBy_productSearchRelevance: -1,\n    orderBy_rank: -1,\n    orderBy_type: -1,\n    orderBy_productNumber: 1,\n    orderByPropertyOrder: ['productSearchRelevance', 'rank', 'type', 'productNumber'],\n    populate: true,\n    parentSharedFirmProductSearch: isParentSharedSearch,\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.firmProductPackageSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return { data, err, productList };\n}\n\nexport function* quickSearchPimProductsPackages(\n  {\n    payload,\n  }: QuickSearchPimProductsPackages,\n) {\n  const {\n    searchTerm,\n    sharedProduct = null,\n    isQuoteConnect\n  } = payload;\n\n  if (!searchTerm) {\n    yield put(new QuickSearchPimProductsPackagesSucceeded({ results: List() }));\n    return;\n  }\n\n  yield put(new SearchingPimProductsPackagesAction(true));\n  yield call(taggedDelay, 1000);\n\n  const { data, err, productList } = yield call(fetchFirmProductPackages, {\n    searchTerm,\n    isQuoteConnect,\n    queries: { sharedProduct },\n    isParentSharedSearch: false,\n  });\n\n  if (data) {\n    if (productList == null) {\n      console.error('Invalid resposne', productList); // tslint:disable-line\n    } else {\n      yield put(new QuickSearchPimProductsPackagesSucceeded({ results: productList }));\n      yield put(new SearchingPimProductsPackagesAction(false));\n    }\n  } else {\n    console.error('search pim products error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* searchParentSharedFirmProducts(\n  {\n    payload,\n  }: SearchParentSharedFirmProductsAction,\n) {\n  const {\n    searchTerm,\n    isQuoteConnect\n  } = payload;\n  yield call(taggedDelay, 1000);\n\n  if (!searchTerm) {\n    yield put(new SearchParentSharedFirmProductsSucceeded({ results: List() }));\n    return;\n  }\n\n  yield put(new SearchingParentSharedFirmProductsAction(true));\n\n  const { data, err, productList } = yield call(fetchFirmProductPackages, {\n    searchTerm,\n    isQuoteConnect,\n    queries: {\n      sharedProduct: true,\n      productSharedWithMe: null,\n    },\n    isParentSharedSearch: true,\n  });\n\n  if (data) {\n    if (productList == null) {\n      console.error('Invalid response', productList); // tslint:disable-line\n      yield put(new SearchParentSharedFirmProductsSucceeded({ results: List() }));\n    } else {\n      yield put(new SearchParentSharedFirmProductsSucceeded({ results: productList }));\n    }\n  } else {\n    console.error('searchParentSharedFirmProducts error', { err }); // tslint:disable-line\n    yield put(new SearchParentSharedFirmProductsSucceeded({ results: List() }));\n  }\n  yield put(new SearchingParentSharedFirmProductsAction(false));\n}\n\nfunction* quickSearchPimProducts(\n  action: QuickSearchPimProducts\n) {\n  yield race({\n    printReport: call(quickSearchPimProductsCONTENT, action),\n    cancellation: call(cancelQuickSearchPimProducts)\n  });\n}\n\nfunction* cancelQuickSearchPimProducts() {\n  yield take(PimActionTypes.CANCEL_QUICK_SEARCH_PIM_PRODUCTS);\n  yield put(new QuickSearchPimProductsLoadingAction(false));\n  // yield put(new QuickSearchPimProductsSucceeded({ results: List() }));\n}\n\nexport function* quickSearchPimProductsCONTENT(\n  {\n    payload,\n  }: QuickSearchPimProducts,\n) {\n  // start loading\n  yield put(new QuickSearchPimProductsLoadingAction(true));\n\n  const {\n    searchTerm,\n    searchFilters\n  } = payload;\n  // if (searchTerm.length < 2) {\n  //   return;\n  // }\n  yield call(taggedDelay, 500);\n\n  // const filters = (searchTerm && searchTerm !== '') ? {\n  //   'and': [\n  //     {\n  //       'productNumber': {\n  //         'like': searchTerm\n  //       }\n  //     }\n  //   ]} : {};\n\n  // const options = {\n  //     limit: 100,\n  //     offset: 0,\n  //     orderBy: {\n  //       id: -1\n  //     }\n  //   };\n\n  // NEW FILTERS ON HOLD PT-2585/PT-2607\n  const filters = searchFilters ? searchFilters : {\n    'and': [\n      {\n        'productSearch': {\n          'match': searchTerm\n        }\n      },\n      {\n        'statusId': {\n          'in': [\n            1,\n            2,\n          ]\n        }\n      }\n    ]\n  };\n\n  const options = {\n    limit: 100,\n    offset: 0,\n    orderBy: {\n      isCompetitor: 1,\n      ...(searchTerm) ? {\n        productSearchRelevance: {\n          [searchTerm]: -1\n        }\n      } : {},\n      id: -1\n    }\n  };\n\n  // ({ options, filters } = parseFiltersAndOptions({ options, filters }));\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(specOrOfficeLocationForFilter));\n\n  const start = Date.now();\n\n  // ── New Search (OpenSearch) branch — the 'New Search' role routes the\n  // add-product drawer's catalog search through the api-gateway /mssearch lane.\n  // Non-role users fall through to the legacy PIM path untouched. Remove this\n  // branch when the new search becomes default.\n  //\n  // The surface is `quick`, NOT `autoquote`. Both legacy paths are called\n  // `getSearchProducts`, but they are different services and different queries:\n  //\n  //   service 'pim'     -> ProductHandler::searchProducts, which forces\n  //                        `product.firmId IS NULL` (\"Only return\n  //                        non-firm-products\") — the global ATS catalog. This\n  //                        drawer adds a catalog product to the firm's library,\n  //                        so the catalog is exactly what it must search.\n  //   service 'product' -> the AutoQuote query, scoped to `firmId = caller`.\n  //\n  // `products.search.autoquote` reproduces the SECOND one, so it filtered this\n  // drawer down to products the firm ALREADY owns — a set disjoint from the\n  // catalog, i.e. it could never return anything the legacy path returned.\n  // `products.search.quick` reproduces ProductHandler::searchProducts, catalog\n  // scoping included (`must_not exists firmId`), which is why it is used here.\n  // ProductModule's catalog search keeps `autoquote`: it mirrors service\n  // 'product' and is correctly firm-scoped.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  let data: any;\n  let err: Error | undefined;\n  if (hasNewSearch) {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    // `quick` returns the clean `{ items }` contract rather than the legacy\n    // envelope, so the result is reshaped into the `payload.pim.product` the\n    // caller below already reads — same approach as ProductModule's typeahead.\n    const { data: quickData, err: quickErr } = yield* callNewSearch('add-product search', 'items', () => ProductSearchGatewayApi.quickSearch(env, appId, {\n      query: searchTerm,\n      filters,\n      // quickSearch defaults to 25 (a SpecTool typeahead); the legacy PIM call\n      // this replaces sent optionsLimit: 100, so keep the same page.\n      size: 100,\n      location: specOrOfficeLocationForFilter,\n      // legacy query-string flags, forwarded in the body (the gateway drops\n      // POST query params on the mono lane).\n      ...useUnavailabilityPurchasabilityQuery,\n      // Mirrors `queries.isCompetitor: null` on the legacy branch below. The\n      // drawer DOES want competitor products: null means \"no isCompetitor\n      // clause\", whereas omitting it means `false` (PimFilterFlags' default)\n      // and excludes them. Without this, a term whose matches are all\n      // competitor rows returns nothing — \"fd-100\" returned 0 against legacy's\n      // 100.\n      isCompetitor: null,\n      // The drawer renders a flat product row and does not navigate by series,\n      // so series-less SimpleProducts are valid results here. The SpecTool\n      // dropdown DOES navigate by series and keeps the default (true).\n      // Legacy, called the way this drawer calls it, returns rows that are\n      // 100% series-less.\n      requireSeries: false,\n    }));\n    err = quickErr;\n    data = quickData\n      ? { payload: { pim: { product: toLegacyProductList(quickData.payload.mssearch.items) } } }\n      : undefined;\n  } else {\n    ({ data, err } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'pim',\n        endpoint: 'getSearchProducts',\n        body: {\n          filters,\n          options,\n          location: specOrOfficeLocationForFilter\n        },\n        queries: {\n          isCompetitor: null,\n          ...useUnavailabilityPurchasabilityQuery,\n        }\n      }\n    })));\n  }\n  const end = Date.now();\n  // Both paths now deliver `payload.pim.product`: the legacy call natively, the\n  // New Search call because the branch above reshapes `{ items }` into it. One\n  // read path means the consumer below cannot drift from either producer.\n  if (data) {\n    const immutableData = fromJS(data);\n    const productList: List<IMap<Product>> = immutableData.getIn(['payload', 'pim', 'product']);\n    if (productList == null) {\n      console.error('quickSearchPimProducts Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new QuickSearchPimProductsSucceeded({ results: productList }));\n    }\n  } else {\n    console.error('quickSearchPimProducts error', { err }); // tslint:disable-line\n  }\n  yield put(new QuickSearchPimProductsLoadingAction(false));\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    productSearch_match: immutableFilters.getIn(['productSearch', 'match']) || null,\n    productSimpleSearch_match: immutableFilters.getIn(['productSimpleSearch', 'match']) || null,\n    status: immutableFilters.getIn(['status', 'in'])?.toJS() || null,\n    statusId: immutableFilters.getIn(['statusId', 'in'])?.toJS() || null,\n    isCompetitor: 'null',\n    country: specOrOfficeLocationForFilter?.getIn(['country', 'value']) || null,\n    province_state: specOrOfficeLocationForFilter?.getIn(['province', 'value']) || null,\n    city: specOrOfficeLocationForFilter?.getIn(['city', 'value']) || null,\n    optionsLimit: 100,\n    orderBy_productSearchRelevance: -1,\n    orderBy_id: -1,\n    orderBy_isCompetitor: 1,\n    orderByPropertyOrder: ['isCompetitor', searchTerm ? 'productSearchRelevance' : null, 'createdDate'].filter(x => x),\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.atsProductSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* searchPimProducts(\n  {\n    payload,\n  }: SearchPimProductsAction,\n) {\n\n  const {\n    options = {},\n    filters = {},\n    draft = false\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchProducts',\n      body: {\n        filters,\n        options\n      },\n      queries: {\n        draft\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productList: List<IMap<Product>> = immutableData.getIn(['payload', 'pim', 'product']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'pim', 'hasNextPage']);\n\n    if (productList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchPimProductsSucceeded({ results: productList, hasNextPage }));\n    }\n\n  } else {\n    console.error('search pim products error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* setSearchBodyAndSearchPimProducts(\n  {\n    payload,\n  }: SetSearchBodyAndSearchPimProductsAction,\n) {\n\n  const {\n    filters = yield select(makeSelectPimProductsListSearchFilters()),\n    options = yield select(makeSelectPimProductsListSearchOptions()),\n    draft = false\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchProducts',\n      body: {\n        filters,\n        options\n      },\n      queries: {\n        draft\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productList: List<IMap<Product>> = immutableData.getIn(['payload', 'pim', 'product']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'pim', 'hasNextPage']);\n\n    if (productList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchPimProductsSucceeded({ results: productList, hasNextPage }));\n    }\n\n  } else {\n    console.error('search pim products error', { err }); // tslint:disable-line\n  }\n}\n\n/**\n * Interleave New Search firm products with legacy package-service packages into\n * one list, reproducing the legacy `mergeFirmProductPackages` ordering minus the\n * one key that can't cross the engine boundary. The legacy orderBy is\n * productSearchRelevance → rank → type → productNumber; relevance is a MySQL\n * FULLTEXT score with no OpenSearch equivalent, so the merge falls back to the\n * remaining keys: group `rank` desc (product_ranking for products,\n * package_ranking for packages — both scoped to the same app/geoname/building\n * -type dimension server-side, so directly comparable), then packages before\n * products on a tie (legacy `type` desc: packages=1, products=0), then\n * productNumber asc, then id for a fully deterministic order. Products carry a\n * top-level `rank` (see mapNewSearchFirmProducts); packages carry `rank`,\n * `flag: 'package'` and `number` verbatim from `/search/firmPackages`.\n */\nfunction mergeFirmProductPackagesByRank(\n  products: List<any>,\n  packages: List<any>,\n): List<any> {\n  const rankVal = (e: any): number | null => {\n    const r = e.get('rank');\n    return r === null || r === undefined ? null : Number(r);\n  };\n  const isPackage = (e: any): boolean => e.get('flag') === 'package';\n  const productNumberVal = (e: any): string =>\n    String(\n      (isPackage(e)\n        ? e.get('number')\n        : e.getIn(['firmProduct', 'productNumber'])) ?? '',\n    );\n  return products.concat(packages).sort((a: any, b: any) => {\n    const ra = rankVal(a);\n    const rb = rankVal(b);\n    if (ra !== rb) {\n      // rank desc, unranked (null) last.\n      if (ra === null) {\n        return 1;\n      }\n      if (rb === null) {\n        return -1;\n      }\n      return rb - ra;\n    }\n    const typeDiff = (isPackage(b) ? 1 : 0) - (isPackage(a) ? 1 : 0);\n    if (typeDiff !== 0) {\n      return typeDiff; // packages before products on a rank tie\n    }\n    const pnDiff = productNumberVal(a).localeCompare(productNumberVal(b));\n    if (pnDiff !== 0) {\n      return pnDiff; // productNumber asc\n    }\n    return String(a.get('id') ?? '').localeCompare(String(b.get('id') ?? ''));\n  }) as List<any>;\n}\n\nexport function* searchFirmProducts(\n  {\n    payload,\n  }: SearchFirmProductsAction,\n) {\n  const { sharedProduct = null, productSharedWithMe, isQuoteConnect, onSuccess } = payload;\n\n  const searchSetting = yield select(selectSearchMode);\n  // NEW FILTERS ON HOLD PT-2585/PT-2607\n  const { options, filters } = parseFiltersAndOptions({ options: payload.options, filters: payload.filters, searchSetting, isQCSearch: isQuoteConnect });\n\n  // ── New Search (OpenSearch) branch — gated by the 'New Search' feature-flag\n  // role. Sends the query (relevance), the shared selector, and every other\n  // filter as the legacy tree; firm scoping and price come from the server. An\n  // untranslatable filter comes back as a 400 and surfaces as an error.\n  // Callers without the role fall through to the legacy PIM path untouched.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  if (hasNewSearch) {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    const mergedFilters = Object.assign({}, ...(((filters as any)?.and) || []));\n    const query = mergedFilters?.productSearch?.match ?? mergedFilters?.productSimpleSearch?.match ?? '';\n    const limit = (options as any)?.limit ?? 100;\n    const offset = (options as any)?.offset ?? 0;\n    const body: any = { query, size: limit, from: offset };\n    if (typeof sharedProduct === 'boolean') {\n      body.sharedProduct = sharedProduct;\n    }\n    // Everything except the term. These used to be flattened away, so the\n    // page's advanced brand / category / date / status filters were silently\n    // ignored for New Search users.\n    const restrictions = firmRestrictionFilters(filters);\n    if (restrictions) {\n      body.filters = restrictions;\n    }\n    const { data: firmData } = yield* callNewSearch('firm products', 'items', () => ProductSearchServiceApi.searchFirmProducts(env, appId, body));\n    if (firmData) {\n      const items = firmData.payload.mssearch.items;\n      const results = fromJS(mapNewSearchFirmProducts(items));\n      // ms-search tracks the total on this surface, so drive the pager off it;\n      // fall back to a page-full heuristic if it's ever absent.\n      const total = firmData.payload.mssearch.total;\n      const count = typeof total === 'number' ? total : offset + items.length;\n      const hasNextPage = typeof total === 'number' ? offset + items.length < total : items.length >= limit;\n      yield put(new SearchFirmProductsSucceeded({ results, hasNextPage, count }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n    return;\n  }\n\n  const start = Date.now();\n  const queries: any = { sharedProduct };\n  if (productSharedWithMe !== undefined) {\n    queries.productSharedWithMe = productSharedWithMe;\n  }\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchFirmProducts',\n      body: {\n        filters,\n        options\n      },\n      queries,\n    }\n  }));\n  const end = Date.now();\n  if (data) {\n    const immutableData = fromJS(data);\n    const productList: List<IMap<FirmProduct>> = immutableData.getIn(['payload', 'pim', 'firmProduct']);\n    const hasNextPage: boolean = immutableData.getIn(['payload', 'pim', 'hasNextPage']);\n    const count: number = immutableData.getIn(['payload', 'pim', 'count']);\n\n    if (productList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchFirmProductsSucceeded({ results: productList, hasNextPage, count }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    }\n\n  } else {\n    console.error('search firm products error', { err }); // tslint:disable-line\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    productSearch: immutableFilters.getIn(['productSearch', 'match']) || null,\n    productSimpleSearch: immutableFilters.getIn(['productSimpleSearch', 'match']) || null,\n    // itemNumber: immutableFilters.getIn(['or', 1, 'itemNumber', 'like']) || null,\n    brand: immutableFilters.getIn(['brand', 'eq']) || immutableFilters.getIn(['brand', 'in'])?.join(', ') || null,\n    categoryName: immutableFilters.getIn(['categoryName', 'eq']) || immutableFilters.getIn(['categoryName', 'in'])?.join(', ') || null,\n    modifiedUserId: immutableFilters.getIn(['modifiedBy.user.id', 'eq']) || immutableFilters.getIn(['modifiedBy.user.id', 'in'])?.join(', ') || null,\n    status: immutableFilters.getIn(['status', 'eq']) || immutableFilters.getIn(['status', 'in'])?.join(', ') || null,\n    dateAddedGte: immutableFilters.getIn(['firmProduct.dateAdded', 'gte']) || null,\n    dateAddedLte: immutableFilters.getIn(['firmProduct.dateAdded', 'lte']) || null,\n    dateModifiedGte: immutableFilters.getIn(['firmProduct.dateModified', 'gte']) || null,\n    dateModifiedLte: immutableFilters.getIn(['firmProduct.dateModified', 'lte']) || null,\n    sharedProduct\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.firmProductSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* searchSharedProducts(\n  {\n    payload,\n  }: SearchSharedProductsAction,\n) {\n\n  let {\n    options = { limit: 100, offset: 0, id: -1 },\n    filters = {},\n  } = payload;\n\n  yield call(taggedDelay, 500);\n\n  ({ options, filters } = parseFiltersAndOptions({ options, filters }));\n\n  const start = Date.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getSearchFirmProducts',\n      body: {\n        filters,\n        options\n      },\n      queries: {\n        sharedProduct: true,\n        productSharedWithMe: false,\n      }\n    }\n  }));\n  const end = Date.now();\n  if (data) {\n    const immutableData = fromJS(data);\n    const productList: List<IMap<FirmProduct>> = immutableData.getIn(['payload', 'pim', 'firmProduct']);\n    const count: number = immutableData.getIn(['payload', 'pim', 'count']);\n\n    if (productList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SearchSharedProductsFailedAction());\n    } else {\n      yield put(new SearchSharedProductsSucceeded({ results: productList, count }));\n    }\n\n  } else {\n    console.error('search shared products error', { err }); // tslint:disable-line\n    yield put(new SearchSharedProductsFailedAction());\n  }\n\n  const filterObject = Object.assign({}, ...((filters as any)?.and || []));\n  const immutableFilters = fromJS(filterObject);\n  const filterData = {\n    productSearch: immutableFilters.getIn(['productSearch', 'match']) || null,\n    productSimpleSearch: immutableFilters.getIn(['productSimpleSearch', 'match']) || null,\n    // itemNumber: immutableFilters.getIn(['or', 1, 'itemNumber', 'like']) || null,\n    brand: immutableFilters.getIn(['brand', 'eq']) || immutableFilters.getIn(['brand', 'in'])?.join(', ') || null,\n    categoryName: immutableFilters.getIn(['categoryName', 'eq']) || immutableFilters.getIn(['categoryName', 'in'])?.join(', ') || null,\n    modifiedUserId: immutableFilters.getIn(['modifiedBy.user.id', 'eq']) || immutableFilters.getIn(['modifiedBy.user.id', 'in'])?.join(', ') || null,\n    status: immutableFilters.getIn(['status', 'eq']) || immutableFilters.getIn(['status', 'in'])?.join(', ') || null,\n    dateAddedGte: immutableFilters.getIn(['firmProduct.dateAdded', 'gte']) || null,\n    dateAddedLte: immutableFilters.getIn(['firmProduct.dateAdded', 'lte']) || null,\n    dateModifiedGte: immutableFilters.getIn(['firmProduct.dateModified', 'gte']) || null,\n    dateModifiedLte: immutableFilters.getIn(['firmProduct.dateModified', 'lte']) || null,\n    sharedProduct: true\n  };\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.firmProductSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...filterData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* deleteFirmProductAndSearchFirmProducts(\n  {\n    payload,\n  }: DeleteFirmProductAndSearchFirmProductsAction,\n) {\n  const {\n    productId,\n    filters,\n    options,\n    sharedProduct\n  } = payload;\n\n  yield call(deleteFirmProduct, new DeleteFirmProductAction({ productId }));\n  yield put(new SearchFirmProductsAction({ filters, options, sharedProduct }));\n}\n\nexport function* duplicateSeries(\n  {\n    payload\n  }: DuplicateSeriesAction,\n) {\n  const {\n    series: sourceSeries,\n    draft = false,\n    duplicateProducts = true,\n    searchAfter,\n    dispatch,\n    filters,\n    options\n  } = payload;\n\n  // get source series skip attributes, use for when making duplicates or new draft from existing series\n  const sourceSeriesSkipAttributes = yield call(getSeriesSpecificMandatoryAttributes, new GetSeriesSpecificMandatoryAttributesAction({ series: sourceSeries, skipOnly: true, idOnly: true }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'duplicateSeries',\n      params: {\n        seriesId: sourceSeries.get('id')\n      },\n      queries: {\n        draft,\n        duplicateProducts\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const series: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series', 0]);\n    const duplicateSeriesId = series.get('id');\n\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      // skip attributes for the resulting duplicated series\n      if (sourceSeriesSkipAttributes?.size) {\n        yield call(saveSkipAttributes, new SaveSkipAttributesAction({\n          seriesId: duplicateSeriesId,\n          attributes: sourceSeriesSkipAttributes.toJS()\n        }));\n      }\n\n      if (draft) {\n        if (searchAfter) {\n          yield call(searchSeries, new SearchSeriesAction({\n            options,\n            filters,\n            draft: true,\n          }));\n        }\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:draftSnackbarMessage.duplicateSeriesDraftSuccessMessage'),\n          severity: 'success',\n          actionProps: {\n            label: i18next.t('translations:draftSnackbarMessage.viewSeriesDraftActionLabel'),\n            autoHideDuration: null,\n            onclick: () => {\n              dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${duplicateSeriesId}`));\n              dispatch(new SetSnackbarClosedAction());\n            }\n          }\n        }));\n      } else {\n        yield put(push(`${PIM_SERIES_DETAIL_PATH}/${duplicateSeriesId}/edit`));\n      }\n    }\n  } else {\n    console.error('duplicate series error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: draft ? i18next.t('translations:draftSnackbarMessage.duplicateSeriesDraftFailMessage') : i18next.t('translations:SeriesDetailPage.duplicateError'),\n      severity: 'error'\n    }));\n  }\n}\n\nexport function* checkAdvanceConfigMatchingProduct(\n  action: CheckAdvanceConfigMatchingProductAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    series,\n    selectedAttributesValues\n  } = payload;\n\n  yield put(new MatchingProductCheckingAction(true));\n\n  const seriesId = series.get('id');\n  const seriesAttributes = series.get('attributes');\n  const selectedAttributes = formatSelectedAttributesForApi({ seriesAttributes, selectedAttributesValues });\n\n  // The endpoint is also triggered on price combo on AQ, this is for when checking config on AQ site\n  const site = yield select(makeSelectSite());\n  const isAQ = site === SiteName.pt;\n\n  const {\n    data,\n    err\n  }: {\n    data,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: isAQ ? 'getMatchingFirmProducts' : 'getMatchingProducts',\n      body: {\n        seriesId,\n        attributes: selectedAttributes,\n      },\n      ['queries' as any]: {\n        create: false\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const productObjectKey = isAQ ? 'firmProduct' : 'product';\n    const matchingProduct: List<IMap<Product>> = immutableData.getIn(['payload', 'product', productObjectKey]);\n    const matchingAttributes = immutableData.getIn(['payload', 'product', 'attribute']);\n    if (matchingProduct == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetPimMatchingProductSucceededAction({ matchingProduct }));\n      yield put(new GetMatchingAttributesSucceededAction({ matchingAttributes }));\n      yield put(new MatchingProductCheckingAction(false));\n    }\n  } else {\n    console.error('getMatchingProducts error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* canProductBeConfigured(\n  action: CanProductBeConfiguredAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    series,\n    selectedAttributesValues,\n    productId,\n    purchasability\n  } = payload;\n\n  yield put(new SetIsProductConfigurableCheckingAction(true));\n\n  const seriesId = series.get('id');\n  const seriesAttributes = series.get('attributes');\n  const selectedAttributes = formatSelectedAttributesForApi({ seriesAttributes, selectedAttributesValues });\n\n  const {\n    data,\n    err\n  }: {\n    data,\n    err: Error\n  } = yield call(directApiCallWaitingAction, new DirectApiCallAction({\n    payload: {\n      service: 'mspim',\n      endpoint: '/series.product.validate',\n      method: 'post',\n      body: {\n        seriesId,\n        productId,\n        attributes: selectedAttributes,\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const displayAsAttributeProducts = immutableData?.getIn(['payload', 'mspim', 'displayAsAttributeProducts']);\n    if (displayAsAttributeProducts != null) {\n      const configurable = displayAsAttributeProducts.size === 0;\n      yield put(new SetIsProductConfigurableAction(configurable));\n    } else {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetIsProductConfigurableAction(false));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:pimProductDrawer.configurableCheckError'),\n        severity: 'error'\n      }));\n    }\n  } else {\n    console.error('/series.product.validate error', { err }); // tslint:disable-line\n    yield put(new SetIsProductConfigurableAction(false));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:pimProductDrawer.configurableCheckError'),\n      severity: 'error'\n    }));\n  }\n\n  yield put(new SetIsProductConfigurableCheckingAction(false));\n}\n\nexport function* searchPimCategories(\n  action: SearchPimCategoriesAction\n) {\n  const {\n    andFilterArray = [],\n    orFilterArray = []\n  } = action.payload;\n  yield put(new SetIsSearchingPimCategoriesAction(true));\n  const validAndFilter = !isEmpty(andFilterArray);\n  const validOrFilter = !isEmpty(orFilterArray);\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'searchCategories',\n      body: {\n        'filters': {\n          ...((validAndFilter || validOrFilter)\n            ? {\n              'and': [\n                ...(validAndFilter ? andFilterArray : []),\n                ...(validOrFilter\n                  ? [{ 'or': orFilterArray }]\n                  : []\n                )\n              ]\n            }\n            : {}\n          )\n        }\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const pimCategories = immutableData.getIn(['payload', 'account', 'category']);\n    if (pimCategories == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SetIsSearchingPimCategoriesAction(false));\n      yield put(new SearchPimCategoriesSucceededAction({ pimCategories }));\n    }\n  } else {\n    console.error('search categories failed', err); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* updatePimCategory(\n  action: UpdatePimCategoryAction\n) {\n  const {\n    categoryId,\n    updatedCategory,\n    filters: {\n      andFilterArray,\n      orFilterArray\n    }\n  } = action.payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'updateCategoryById',\n      params: {\n        categoryId\n      },\n      body: updatedCategory\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const newCategory = immutableData.getIn(['payload', 'account', 'category', 0]);\n    if (newCategory == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (newCategory.get('isLocked')) {\n        const amplitudeData = yield select(makeSelectAmplitudeData());\n        amplitude.logEvent(AMPLITUDE_EVENT.categoryFrozen, {\n          categoryName: newCategory.get('categoryName'),\n          ...amplitudeData\n        });\n      }\n      yield put(new SearchPimCategoriesAction({ andFilterArray, orFilterArray }));\n    }\n  } else {\n    console.error('search categories failed', err); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* downloadBulkImportTemplateFile(\n  action: DownloadBulkImportTemplateFileAction,\n) {\n  yield put(new DownloadBulkImportTemplateFileLoadingAction(true));\n  const {\n    exportFields,\n    fileType,\n    isQuoteConnect,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'printBulkExport',\n      params: {\n        // type: 'xlsx',\n        type: fileType,\n      },\n      body: {\n        exportFields,\n        filters: {\n          and: [\n            {\n              'firmProduct.id': {\n                'eq': -1\n              }\n            }\n          ]\n        },\n        isQuoteConnect\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const exportData = immutableData.getIn(['payload', 'pim', 'bulkExport', 0]);\n    const printId: string = exportData.get('id');\n    const type: BULK_IMPORT_EXPORT_TYPE = exportData.get('type');\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type\n    }));\n  } else {\n    console.error('bulkExportProducts error', { err }); // tslint:disable-line\n    yield put(new DownloadBulkImportTemplateFileLoadingAction(false));\n  }\n\n  const trackingData = {\n    type: 'downloadTemplate'\n  };\n\n  const errorCode = (err as any)?.payload?.error?.code || null;\n  const errorMessage = (err as any)?.payload?.error?.error || null;\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.exportPricing, {\n    errorCode,\n    errorMessage,\n    render,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* bulkExportProducts(\n  action: BulkExportProductsAction,\n) {\n  yield put(new BulkExportProductsLoadingAction(true));\n  const payload = action.payload;\n  const { fileType, exportFields, successCB, isQuoteConnect, currency } = action.payload;\n  let defaultCurrency = currency;\n  if (isQuoteConnect && !currency) {\n    defaultCurrency = 'USD';\n  }\n  const { filters } = parseFiltersAndOptions({ options: {}, filters: payload.filters, isQCSearch: isQuoteConnect });\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'printBulkExport',\n      params: {\n        type: fileType,\n      },\n      body: {\n        exportFields,\n        filters,\n        isQuoteConnect,\n        currency: defaultCurrency,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const exportData = immutableData.getIn(['payload', 'pim', 'bulkExport', 0]);\n    const printId: string = exportData.get('id');\n    const type: BULK_IMPORT_EXPORT_TYPE = exportData.get('type');\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type,\n      onSuccessCb: successCB\n    }));\n    yield put(new BulkExportProductsLoadingAction(false));\n  } else {\n    console.error('bulkExportProducts error', { err }); // tslint:disable-line\n    yield put(new BulkExportProductsLoadingAction(false));\n  }\n\n  const trackingData = {\n    type: 'exportPricing'\n  };\n\n  const errorCode = (err as any)?.payload?.error?.code || null;\n  const errorMessage = (err as any)?.payload?.error?.error || null;\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.exportPricing, {\n    errorCode,\n    errorMessage,\n    render,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n}\n\nexport function* bulkImportProducts(\n  action: BulkImportProductsAction,\n) {\n\n  const {\n    type,\n    conflicts\n  } = action.payload;\n\n  // const file = formValueSelector(IMPORT_PRODUCTS_FILE_FORM)\n  // const storeState = yield select(selectReducerState());\n  // const selector = formValueSelector(IMPORT_PRODUCTS_FILE_FORM)\n  const formValue = yield select(getFormValues(IMPORT_PRODUCTS_FILE_FORM));\n  const file: File = formValue.getIn(['importFile', 0]);\n\n  const fileUploadUrl = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'file',\n        endpoint: 'uploadFile',\n        urlOnly: true,\n        withToken: true,\n        withAppId: true\n      }\n    ]\n  }));\n\n  if (file) {\n    const uploadedFile: IMap<FileServiceFile> = yield call(uploadFile, fileUploadUrl.data, file);\n    const body: any = {\n      fileId: uploadedFile.get('id')\n    };\n    if (conflicts && conflicts.length > 0) {\n      body.conflicts = conflicts;\n    }\n    if (formValue?.get('isQuoteConnect')) {\n      body.isQuoteConnect = formValue.get('isQuoteConnect');\n      if (formValue?.get('currency')) {\n        body.currency = formValue.get('currency');\n      } else {\n        body.currency = 'USD';\n      }\n    }\n    const {\n      data,\n      err,\n    }: {\n      data: any,\n      err: Error\n    } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: {\n        service: 'pim',\n        endpoint: 'printBulkImport',\n        params: {\n          type\n        },\n        body\n      }\n    }));\n\n    if (data) {\n      const immutableData = fromJS(data);\n      const importData = immutableData.getIn(['payload', 'pim', 'bulkImport', 0]);\n      const printId: string = importData.get('id');\n      yield put(new SetBulkImportProductsProgressAction({\n        percent: 75,\n        status: 'processing'\n      }));\n      yield call(pollPrint, new PollPrintAction({\n        printId,\n        type: importData.get('type')\n      }));\n    } else {\n      yield put(new SetBulkImportProductsProgressAction({\n        percent: 100,\n        status: 'failed'\n      }));\n      console.error('bulkExportProducts error', { err }); // tslint:disable-line\n    }\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:importPricing.fileNotFoundError'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'center',\n        vertical: 'bottom'\n      }\n    }));\n  }\n}\n\nfunction uploadFile(url: string, file: File): Promise<FileServiceFile> {\n  const {\n    dispatch\n  } = store.get('store');\n\n  return url && file && new Promise((resolve, reject) => {\n    const req = new XMLHttpRequest();\n    const data = new FormData();\n\n    data.append('file', file);\n    data.append('type', 'file');\n\n    req.open('POST', url);\n\n    req.onloadstart = (e) => {\n      dispatch(new BulkImportProductsLoadingAction(true));\n      dispatch(new SetBulkImportProductsProgressAction({\n        percent: 0,\n        status: 'start'\n      }));\n    };\n\n    req.upload.addEventListener('progress', (event) => {\n      const percent = Math.round((event.loaded / event.total) * 100) / 4;\n      dispatch(new SetBulkImportProductsProgressAction({\n        percent,\n        status: 'scanning'\n      }));\n    });\n\n    req.addEventListener('loadend', (e) => {\n      const { payload, error } = readUploadResponse(req);\n      if (error) {\n        console.error('error uploading file', error); //tslint:disable-line\n        reject(error);\n        dispatch(new SetBulkImportProductsProgressAction({\n          percent: 100,\n          status: 'failed'\n        }));\n        dispatch(new BulkImportProductsLoadingAction(false));\n      } else {\n        resolve(fromJS(payload.file.files[0]));\n        dispatch(new SetBulkImportProductsProgressAction({\n          percent: 50,\n          status: 'uploaded'\n        }));\n      }\n    });\n    req.send(data);\n  });\n}\n\nexport function* getBulkExportProductsConfig() {\n  yield put(new GetBulkExportProductsConfigLoadingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getBulkExportConfig'\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmConfig = immutableData.getIn(['payload', 'pim', 'firmConfig']);\n    yield put(new GetBulkExportProductsConfigSucceededAction({ firmConfig }));\n  } else {\n    console.error('bulkExportProducts config error', { err }); // tslint:disable-line\n    yield put(new GetBulkExportProductsConfigLoadingAction(false));\n  }\n}\n\nexport function* saveBulkExportProductsConfig(\n  action: SaveBulkExportProductsConfigAction,\n) {\n  yield put(new SaveBulkExportProductsConfigLoadingAction(true));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'saveBulkExportConfig',\n      body: {\n        firmConfig: action.payload\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmConfig = immutableData.getIn(['payload', 'pim', 'firmConfig']);\n    yield put(new SaveBulkExportProductsConfigSucceededAction({ firmConfig }));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:exportConfig.saveFirmConfigSuccessfulMessage'),\n      severity: 'success',\n      anchorOrigin: {\n        horizontal: 'center',\n        vertical: 'bottom'\n      }\n    }));\n  } else {\n    console.error('bulkExportProducts config error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:exportConfig.saveFirmConfigFailedMessage'),\n      severity: 'error',\n      anchorOrigin: {\n        horizontal: 'center',\n        vertical: 'bottom'\n      }\n    }));\n    yield put(new GetBulkExportProductsConfigLoadingAction(false));\n  }\n}\n\nexport function* getFirmProductById(\n  {\n    payload,\n  }: GetFirmProductByIdAction,\n) {\n  yield put(new SetIsGettingFirmProductByIdAction({ isFetchingFirmProduct: true }));\n  const {\n    firmProductId,\n    onSuccess\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'getFirmProduct',\n      params: {\n        firmProductId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const firmProduct: IMap<FirmProduct> = immutableData.getIn(['payload', 'pim', 'firmProduct', 0]);\n\n    if (firmProduct != null && onSuccess) {\n      onSuccess(firmProduct);\n    }\n  } else {\n    console.error('getProductById', { err }); // tslint:disable-line\n    const errorCode = (err as any)?.payload?.error?.code || null;\n    yield put(new SetSnackbarOpenAction({\n      message: errorCode === 404 ? 'Error - This product no longer exist' : 'Error - unable to retrieve product, please try again later',\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingFirmProductByIdAction({ isFetchingFirmProduct: false }));\n}\n\n// export function* getPackageById(\n//   {\n//     payload,\n//   }: GetPackageByIdAction,\n// ) {\n//   yield put(new SetIsGettingPackageByIdAction({ isFetchingPackage: true }));\n//   const {\n//     packageId,\n//     onSuccess\n//   } = payload;\n//   const {\n//     data,\n//     err\n//   }: {\n//     data: any,\n//     err: Error\n//   } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n//     payload: {\n//       service: 'pim',\n//       endpoint: 'getPackageById',\n//       params: {\n//         packageId\n//       }\n//     }\n//   }));\n//   if (data) {\n//     const immutableData = fromJS(data);\n//     const packageData: IMap<Package> = immutableData.getIn(['payload', 'pim', 'package', 0]);\n\n//     if (packageData != null && onSuccess) {\n//       onSuccess(packageData);\n//     }\n//   } else {\n//     console.error('getPackageById', { err }); // tslint:disable-line\n//     const errorCode = (err as any)?.payload?.error?.code || null;\n//     yield put(new SetSnackbarOpenAction({\n//       message: errorCode === 404 ? 'Error - This package no longer exist' : 'Error - unable to retrieve package, please try again later',\n//       severity: 'error',\n//     }));\n//   }\n//   yield put(new SetIsGettingPackageByIdAction({ isFetchingPackage: false }));\n// }\n\n\n\n// using searchFirmPackages instead of getPackageById because currently only searchFirmPackages returns the populated products\nexport function* getPackageById(\n  {\n    payload,\n  }: GetPackageByIdAction,\n) {\n  yield put(new SetIsGettingPackageByIdAction({ isFetchingPackage: true }));\n  const {\n    packageId,\n    onSuccess\n  } = payload;\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'package',\n      endpoint: 'searchFirmPackages',\n      body: {\n        filters: {\n          'id': {\n            'eq': packageId\n          }\n        },\n        options: {\n          limit: 1,\n          offset: 0,\n        },\n        populate: true,\n      },\n      queries: {\n        sharedProduct: null\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const packageData: IMap<Package> = immutableData.getIn(['payload', 'package', 'package', 0]);\n\n    if (packageData != null && onSuccess) {\n      onSuccess(packageData);\n    }\n  } else {\n    console.error('getPackageById', { err }); // tslint:disable-line\n    const errorCode = (err as any)?.payload?.error?.code || null;\n    yield put(new SetSnackbarOpenAction({\n      message: errorCode === 404 ? 'Error - This package no longer exist' : 'Error - unable to retrieve package, please try again later',\n      severity: 'error',\n    }));\n  }\n  yield put(new SetIsGettingPackageByIdAction({ isFetchingPackage: false }));\n}\n\nexport function* searchPimIntegrationSeries(\n  action: SearchPimIntegrationSeriesAction\n) {\n  const { integrationType, searchTerm } = action.payload;\n\n  yield put(new SetIsSearchingPimIntegrationSeriesAction(true));\n\n  let filters = {};\n  switch (integrationType) {\n    case PimIntegrationType.WATTS_ODS:\n      filters = {\n        seriesIds: [searchTerm]\n      };\n    break;\n    case PimIntegrationType.WATTS_SALSIFY:\n      filters = {\n        series: [searchTerm]\n      };\n    break;\n    default:\n      filters = {\n        seriesIds: [searchTerm]\n      };\n  }\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'integrationSearchSeries',\n      params: {\n        type: integrationType\n      },\n      queries: {\n        populate: false // can set to false if we dont need manufacturer and category, it'll be faster\n      },\n      body: {\n        filters\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const searchedSeriesResult = immutableData.getIn(['payload', 'pim', 'series']);\n    if (searchedSeriesResult == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SearchPimIntegrationSeriesSucceededAction({ integrationSeries: List() }));\n    } else {\n      yield put(new SearchPimIntegrationSeriesSucceededAction({ integrationSeries: searchedSeriesResult }));\n    }\n  } else {\n    console.error('searchPimIntegrationSeries error', { err }); // tslint:disable-line\n    yield put(new SearchPimIntegrationSeriesSucceededAction({ integrationSeries: List() }));\n  }\n  yield put(new SetIsSearchingPimIntegrationSeriesAction(false));\n}\n\n// export function* mapPimIntegration (\n//   action: MapPimIntegrationAction\n// ) {\n//   const { integrationType, seriesId } = action.payload;\n\n//   yield put(new SetIsMappingPimIntegrationAction(true));\n\n//   const {\n//     data,\n//     err\n//   }: {\n//     data: any,\n//     err: Error\n//   } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n//     payload: {\n//       service: 'pim',\n//       endpoint: 'integrationMapSeries',\n//       params: {\n//         type: integrationType,\n//         seriesId\n//       },\n//     }\n//   }));\n\n//   if (data) {\n//     const immutableData = fromJS(data);\n//     const integrationMap = immutableData.getIn(['payload', 'pim']);\n//     if (integrationMap == null) {\n//       console.error('Invalid response', data); // tslint:disable-line\n//     } else {\n//       yield put(new MapPimIntegrationSucceededAction({ integrationMap }));\n//     }\n//   } else {\n//     console.error('searchPimIntegrationSeries error', { err }); // tslint:disable-line\n//   }\n//   yield put(new SetIsMappingPimIntegrationAction(false));\n// }\n\nexport function* mapPimIntegration(\n  action: MapPimIntegrationAction\n) {\n  yield race({\n    printReport: call(mapPimIntegrationContent, action),\n    cancellation: call(cancelMapPimIntegrationPolling)\n  });\n}\n\nfunction* cancelMapPimIntegrationPolling() {\n  yield take(PimActionTypes.CANCEL_MAP_PIM_INTEGRATION_POLLING);\n}\n\nexport function* mapPimIntegrationContent(\n  action: MapPimIntegrationAction\n) {\n  const { integrationType, seriesId } = action.payload;\n  const dispatch = store.store.store.dispatch;\n\n  yield put(new SetIsMappingPimIntegrationAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'integrationMapSeries',\n      params: {\n        type: integrationType,\n        seriesId\n      },\n      queries: {\n        async: true\n      }\n    }\n  }));\n\n  const onSuccessCb = (result) => {\n    const integrationMap = fromJS(result).getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details']);\n\n    if (integrationMap == null) {\n      dispatch(new SetSnackbarOpenAction({\n        message: i18next.t('translations:seriesMappingEntriesWidget.getMapError'),\n        severity: 'error',\n        actionProps: {\n          autoHideDuration: null,\n        }\n      }));\n      console.error('Invalid response', result); // tslint:disable-line\n    } else {\n      dispatch(new MapPimIntegrationSucceededAction({ integrationMap }));\n    }\n    dispatch(new SetIsMappingPimIntegrationAction(false));\n  };\n\n  const onFailCb = (result) => {\n    dispatch(new SetSnackbarOpenAction({\n      message: i18next.t('translations:seriesMappingEntriesWidget.getMapError'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null,\n      }\n    }));\n    console.error('mapPimIntegrationContent error', { err }); // tslint:disable-line\n    dispatch(new SetIsMappingPimIntegrationAction(false));\n  };\n\n  if (data) {\n    const printId = fromJS(data).getIn(['payload', 'pim', 'pimIntegrationMap', 0, 'id']);\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type: PIM_SERIES_OPERATION_TYPE.mapIntegration,\n      onSuccessCb,\n      onFailCb,\n    }));\n  } else {\n    console.error('mapPimIntegrationContent error', { err }); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:seriesMappingEntriesWidget.getMapError'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null,\n      }\n    }));\n    yield put(new SetIsMappingPimIntegrationAction(false));\n  }\n}\n\nexport function* savePimIntegrationMap(\n  action: SavePimIntegrationMapAction\n) {\n  const { integrationType, integrationMapList, displaySnackbar = true, onSuccess } = action.payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'integrationCreateMapping',\n      params: {\n        type: integrationType\n      },\n      body: integrationMapList.toJS()\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const savedMapList: List<IMap<IIntegrationMappingFields>> = immutableData.getIn(['payload', 'pim', 'mapping']);\n    if (savedMapList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (displaySnackbar) {\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t('translations:seriesMappingEntriesWidget.mapSuccessMessage'),\n          severity: 'success'\n        }));\n      }\n      if (onSuccess) {\n        onSuccess(savedMapList);\n      }\n    }\n  } else {\n    if (displaySnackbar) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:seriesMappingEntriesWidget.mapFailedMessage'),\n        severity: 'error'\n      }));\n    }\n    console.error('savePimIntegrationMap error', { err }); // tslint:disable-line\n  }\n}\n\nexport function* unmapPimIntegration(\n  action: UnmapPimIntegrationAction\n) {\n  const { integrationType, mappingIds, displaySnackbar = true, onSuccess, onFailure } = action.payload;\n\n  // the endpoint deletes a single mapping, so a batch is one call per mapping id, all sent together\n  const results: Array<{ data: any, err: Error }> = yield all(mappingIds.map((mappingId) => call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'integrationDeleteMapping',\n      params: {\n        type: integrationType,\n        mappingId\n      }\n    }\n  }))));\n\n  const deletedMappingIds: number[] = [];\n  const failedMappingIds: number[] = [];\n  results.forEach(({ data, err }, index) => {\n    const mappingId = mappingIds[index];\n    const deletedMappingId = data ? fromJS(data).getIn(['payload', 'pim', 'mapping', 0, 'id']) : null;\n    if (deletedMappingId == null) {\n      console.error('unmapPimIntegration error', { mappingId, data, err }); // tslint:disable-line\n      failedMappingIds.push(mappingId);\n    } else {\n      deletedMappingIds.push(mappingId);\n    }\n  });\n\n  if (deletedMappingIds.length > 0) {\n    onSuccess(deletedMappingIds);\n    yield put(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: {} }));\n    yield put(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    if (displaySnackbar && failedMappingIds.length === 0) {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:seriesMappingEntriesWidget.unmapSuccessMessage'),\n        severity: 'success'\n      }));\n    }\n  }\n  if (failedMappingIds.length > 0) {\n    if (onFailure) {\n      onFailure(failedMappingIds);\n    }\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:seriesMappingEntriesWidget.unmapFailedMessage'),\n      severity: 'error'\n    }));\n  }\n}\n\n// export function* createPimIntegrationSeriesDraft (\n//   action: CreatePimIntegrationSeriesDraftAction\n// ) {\n//   const { integrationType, integrationSeriesId, integrationMapList } = action.payload;\n//   yield put(new SetOverlayComponentPropsAction({\n//     id: LOADING_MODAL_ID,\n//     props: { action: i18next.t('translations:seriesMappingEntriesWidget.creatingSeriesDraft') }\n//   }));\n//   yield put(new ToggleOverlayComponentAction({\n//     id: LOADING_MODAL_ID,\n//     open: true\n//   }));\n\n//   const {\n//     data,\n//     err\n//   }: {\n//     data: any,\n//     err: Error\n//   } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n//     payload: {\n//       service: 'pim',\n//       endpoint: 'integrationCreateSeries',\n//       params: {\n//         type: integrationType,\n//         seriesId: integrationSeriesId\n//       },\n//       body: integrationMapList.toJS()\n//     }\n//   }));\n\n//   yield put(new ToggleOverlayComponentAction({\n//     id: LOADING_MODAL_ID,\n//     open: false\n//   }));\n\n//   if (data) {\n//     const immutableData = fromJS(data);\n//     const seriesDraft: IMap<Series> = immutableData.getIn(['payload', 'pim', 'series']);\n//     if (seriesDraft == null) {\n//       yield put(new SetSnackbarOpenAction({\n//         message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n//         severity: 'error'\n//       }));\n//       console.error('Invalid response', data); // tslint:disable-line\n//     } else {\n//       // redirect to series draft detail page\n//       const seriesDraftId = seriesDraft.get('id');\n//       yield put(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesDraftId}`));\n//       yield put(new SetSnackbarOpenAction({\n//         message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftSuccessMessage'),\n//         severity: 'success',\n//       }));\n//     }\n//   } else {\n//     yield put(new SetSnackbarOpenAction({\n//       message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n//       severity: 'error'\n//     }));\n//     console.error('savePimIntegrationMap error', { err }); // tslint:disable-line\n//   }\n// }\n\nexport function* createPimIntegrationSeriesDraft(\n  action: CreatePimIntegrationSeriesDraftAction\n) {\n  yield race({\n    printReport: call(createPimIntegrationSeriesDraftContent, action),\n    cancellation: call(cancelCreatePimIntegrationSeriesDraftPolling)\n  });\n}\n\nfunction* cancelCreatePimIntegrationSeriesDraftPolling() {\n  yield take(PimActionTypes.CANCEL_CREATE_PIM_INTEGRATION_SERIES_DRAFT_POLLING);\n}\n\nexport function* createPimIntegrationSeriesDraftContent(\n  action: CreatePimIntegrationSeriesDraftAction\n) {\n  const {\n    integrationType,\n    integrationSeriesId,\n    integrationMapList,\n  } = action.payload;\n\n  const dispatch = store.store.store.dispatch;\n\n  yield put(new SetOverlayComponentPropsAction({\n    id: LOADING_MODAL_ID,\n    props: {\n      action: i18next.t('translations:seriesMappingEntriesWidget.creatingSeriesDraft'),\n      onClose: () => dispatch(new CancelCreatePimIntegrationSeriesDraftPollingAction())\n    }\n  }));\n  yield put(new ToggleOverlayComponentAction({\n    id: LOADING_MODAL_ID,\n    open: true\n  }));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'pim',\n      endpoint: 'integrationCreateSeries',\n      params: {\n        type: integrationType,\n        seriesId: integrationSeriesId,\n      },\n      body: integrationMapList.toJS(),\n      queries: {\n        async: true\n      }\n    }\n  }));\n\n  const onSuccessCb = (result) => {\n    const seriesId = fromJS(result).getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'seriesId']);\n\n    if (seriesId == null) {\n      dispatch(new SetSnackbarOpenAction({\n        message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n        severity: 'error',\n        actionProps: {\n          autoHideDuration: null,\n        }\n      }));\n      console.error('Invalid response', result); // tslint:disable-line\n    } else {\n      // redirect to series draft detail page\n      dispatch(push(`${PIM_DRAFT_DETAIL_PATH}/${seriesId}`));\n      dispatch(new SetSnackbarOpenAction({\n        message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftSuccessMessage'),\n        severity: 'success',\n      }));\n    }\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n  };\n\n  const onFailCb = (result) => {\n    // const immuResult = fromJS(result);\n    // const message = immuResult.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'message']);\n    // const errorCode = immuResult.getIn(['result', 'data', 'payload', 'print', 'printJob', 0, 'details', 'message', 'code']);\n\n    dispatch(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null,\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    console.error('savePimIntegrationMap error', { err }); // tslint:disable-line\n  };\n\n  if (data) {\n    const printId = fromJS(data).getIn(['payload', 'pim', 'pimIntegrationCreate', 0, 'id']);\n    yield call(pollPrint, new PollPrintAction({\n      printId,\n      type: PIM_SERIES_OPERATION_TYPE.createIntegratedSeries,\n      onSuccessCb,\n      onFailCb,\n    }));\n  } else {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:draftSnackbarMessage.addSeriesDraftFailMessage'),\n      severity: 'error',\n      actionProps: {\n        autoHideDuration: null,\n      }\n    }));\n    yield put(new ToggleOverlayComponentAction({\n      id: LOADING_MODAL_ID,\n      open: false\n    }));\n    console.error('savePimIntegrationMap error', { err }); // tslint:disable-line\n  }\n}","/*\n * PimModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IPimReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IPimModuleComponentProps {\n\n}\n\ninterface IPimModuleProps extends IPimModuleComponentProps {\n  reducerState: IMapNonRecursive<IPimReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype PimModuleProps = IPimModuleProps;\n\nclass PimModule extends React.Component<PimModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IPimModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IPimModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(PimModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './PimModule';\nexport default Module;","import {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport { NotificationTypes } from './actions';\nimport Notification from '../../models/Notification';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nexport enum LIST_ITEM_STATUS {\n  LOADED = 'LOADED',\n  LOADING = 'LOADING',\n}\n\nexport interface INotificationState {\n  notifications: Map<number, IMap<Notification>>;\n  notificationsItemStatusList: List<IMap<{ id?: number, status: LIST_ITEM_STATUS }>>;\n  count: number;\n  readCount: number;\n  unreadCount: number;\n  isDropDownOpen: boolean;\n  scollToTop: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  notifications: Map({}),\n  notificationsItemStatusList: List(), // used for react-virtualized InfiniteLoader\n  count: 0,\n  readCount: 0,\n  unreadCount: 0,\n  isDropDownOpen: false,\n  scollToTop: false\n});\n\nexport const reducer = (state: IMapNonRecursive<INotificationState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case NotificationTypes.GET_NOTIFICATION_SUCCESS: {\n      const { notifications, count, readCount, unreadCount } = action.payload;\n      const mappedList: Map<number, IMap<Notification>> = Map(notifications.map(n => [n.get('id'), n]));\n\n      const diff = count - state.get('count');\n      let updatedStatusList = state.get('notificationsItemStatusList');\n      // check any new rows\n      // only insert the new rows\n      if (diff > 0) {\n        const newNotifications = notifications.filter((n, index) => index < diff).map(n => fromJS({\n          id: n.get('id'),\n          status: LIST_ITEM_STATUS.LOADED\n        }));\n        updatedStatusList = newNotifications.concat(updatedStatusList);\n      }\n\n      return state\n        .set('notifications', state.get('notifications').merge(mappedList))\n        .set('readCount', readCount)\n        .set('unreadCount', unreadCount)\n        .set('count', count)\n        .set('notificationsItemStatusList', updatedStatusList);\n    }\n\n    case NotificationTypes.MARK_NOTIFICATION_READ_OR_UNREAD_SUCCESS: {\n      const { notification } = action.payload;\n\n      const updatedNotifications = state.get('notifications').set(notification.get('id'), notification);\n      const updatedReadCount = updatedNotifications.filter(n => n.get('isRead')).count();\n      const updatedUnreadCount = updatedNotifications.filter(n => !n.get('isRead')).count();\n\n      return state\n        .set('notifications', updatedNotifications)\n        .set('readCount', updatedReadCount)\n        .set('unreadCount', updatedUnreadCount);\n    }\n\n    case NotificationTypes.MARK_ALL_NOTIFICATIONS_READ_SUCCESS: {\n      const { notifications, count, readCount, unreadCount } = action.payload;\n      const mappedList: Map<number, IMap<Notification>> = Map(notifications.map(n => [n.get('id'), n]));\n\n      // reset statusList\n      let statusList = List();\n\n      const newNotifications = notifications.map(n => fromJS({\n        id: n.get('id'),\n        status: LIST_ITEM_STATUS.LOADED\n      }));\n\n      statusList = newNotifications.concat(statusList);\n\n      return state\n        .set('notifications', mappedList)\n        .set('readCount', readCount)\n        .set('unreadCount', unreadCount)\n        .set('count', count)\n        .set('scollToTop', true)\n        .set('notificationsItemStatusList', statusList);\n    }\n\n    case NotificationTypes.SET_NOTIFICATIONS_LISTITEM_STATUS_LOADING: {\n      const { id, index } = action.payload;\n      return state.setIn(['notificationsItemStatusList', index], Map({ id, status: LIST_ITEM_STATUS.LOADING }));\n    }\n\n    case NotificationTypes.SET_NOTIFICATIONS_LISTITEM_STATUS_LOADED: {\n      const { id, index } = action.payload;\n      return state.setIn(['notificationsItemStatusList', index], Map({ id, status: LIST_ITEM_STATUS.LOADED }));\n    }\n\n    case NotificationTypes.OPEN_NOTIFICATION_DROP_DOWN: return state.set('isDropDownOpen', true);\n    case NotificationTypes.CLOSE_NOTIFICATION_DROP_DOWN: return state.set('isDropDownOpen', false);\n\n    case NotificationTypes.RESET_NOTIFICATION: return state = INITIAL_STATE;\n\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","// Cross-window fan-out for the new-notification alert. The check endpoint\n// consumes the flag it reads, so when several windows race only one learns a\n// notification is new; that winner rebroadcasts the confirmed result so every\n// window of the same session raises the alert.\n\nexport const NOTIFICATION_BROADCAST_EVENT = 'notification.broadcast';\n\nexport const NOTIFICATION_BROADCAST_CHANNEL_NAME = 'ats.notification.broadcast';\n\nexport interface INewNotificationBroadcast {\n  // Same-origin windows may hold different sessions (re-login as someone\n  // else), so a receiver only honours a message for its own user and app.\n  userId: number | null | undefined;\n  appId: string;\n}\n\ntype BroadcastHandler = (message: INewNotificationBroadcast) => void;\n\n// A single channel instance serves both send and receive: a BroadcastChannel\n// never delivers a message back to the instance that posted it, which is what\n// keeps the broadcasting window from alerting twice.\nlet channel: BroadcastChannel | null = null;\nconst subscribers = new Set<BroadcastHandler>();\n\nfunction isSupported(): boolean {\n  return typeof BroadcastChannel !== 'undefined';\n}\n\nfunction getChannel(): BroadcastChannel {\n  if (!channel) {\n    channel = new BroadcastChannel(NOTIFICATION_BROADCAST_CHANNEL_NAME);\n    channel.onmessage = event => {\n      const message = (event.data || {}) as INewNotificationBroadcast;\n      subscribers.forEach(handler => handler(message));\n    };\n  }\n  return channel;\n}\n\nfunction releaseChannelIfIdle(): void {\n  if (subscribers.size === 0 && channel) {\n    channel.close();\n    channel = null;\n  }\n}\n\n// In a browser without BroadcastChannel both functions no-op, degrading to the\n// single-window behaviour instead of failing.\nexport function broadcastNewNotification(message: INewNotificationBroadcast): void {\n  if (!isSupported()) {\n    return;\n  }\n  getChannel().postMessage(message);\n  releaseChannelIfIdle();\n}\n\nexport function subscribeNewNotificationBroadcast(handler: BroadcastHandler): () => void {\n  if (!isSupported()) {\n    return () => undefined;\n  }\n  subscribers.add(handler);\n  getChannel();\n  return () => {\n    subscribers.delete(handler);\n    releaseChannelIfIdle();\n  };\n}\n","import { eventChannel } from 'redux-saga';\nimport { sseClient, SSE_RECONNECTED_EVENT } from '../../services/sse/sseClient';\nimport {\n  INewNotificationBroadcast,\n  NOTIFICATION_BROADCAST_EVENT,\n  subscribeNewNotificationBroadcast,\n} from './notificationBroadcast';\n\n// Pushed by ms-notification once a notification is stored. It is a signal, not\n// content: the frame names the notification but carries no body, so a consumer\n// always re-reads from the API.\nexport const NOTIFICATION_NEW_EVENT = 'notification.new';\n\nexport interface INotificationChannelEvent {\n  type: string;\n  // Present only on a cross-window broadcast.\n  message?: INewNotificationBroadcast;\n  // The kind of notification the frame announced. Absent on a reconnect, which\n  // stands for whatever was missed while the stream was down.\n  notificationType?: string;\n}\n\n// A new-notification frame and a reconnect mean the same thing here — ask the\n// server what changed. Reconnect covers the gap the stream was down for, since\n// missed frames are never replayed. A cross-window broadcast is different: it\n// is an already-confirmed check result from a sibling window and must not be\n// checked again, so it keeps its own event type.\nexport function createNotificationEventChannel(appId: string) {\n  return eventChannel<INotificationChannelEvent>(emitter => {\n    const unsubscribeNew = sseClient.onSseEvent(NOTIFICATION_NEW_EVENT, frame => {\n      // One stream serves the whole session, and a notification addressed to a\n      // firm, an office or everyone reaches it whatever app it was raised for.\n      const data = (frame.data || {}) as { appId?: string; notificationType?: string };\n      if (data.appId === appId) {\n        emitter({ type: NOTIFICATION_NEW_EVENT, notificationType: data.notificationType });\n      }\n    });\n\n    const unsubscribeReconnect = sseClient.onSseEvent(\n      SSE_RECONNECTED_EVENT,\n      () => emitter({ type: SSE_RECONNECTED_EVENT }),\n    );\n\n    // Forwarded unfiltered: whether a broadcast belongs to this session is\n    // decided by the consumer against current state, because a window can open\n    // this channel before its login has completed.\n    const unsubscribeBroadcast = subscribeNewNotificationBroadcast(message => {\n      emitter({ type: NOTIFICATION_BROADCAST_EVENT, message });\n    });\n\n    return () => {\n      unsubscribeNew();\n      unsubscribeReconnect();\n      unsubscribeBroadcast();\n    };\n  });\n}\n","export default __webpack_public_path__ + \"static/media/campaignIcon.e51ef3db.svg\";","import {\n  OFFICE_LIST_DETAIL_PATH,\n  PROJECT_LIST_DETAIL_PATH,\n  USER_DETAILS_PATH,\n} from '../../constants';\nimport { NOTIFICATION_TYPE } from '../../models/Notification';\n\nexport interface INoteContext {\n  type: string;\n  typeId: number;\n}\n\n// The three pages that show a notes widget: the path they live at, the note\n// type they mount the widget with, and the notification raised when a note of\n// that subject is shared. A note reaches its assignee through the page it was\n// written on, so the subject is named twice over and the two names line up.\nconst NOTE_PAGES: Array<{\n  path: string;\n  type: string;\n  notificationType: NOTIFICATION_TYPE;\n}> = [\n  {\n    path: PROJECT_LIST_DETAIL_PATH,\n    type: 'project',\n    notificationType: NOTIFICATION_TYPE.assignedNote,\n  },\n  {\n    path: OFFICE_LIST_DETAIL_PATH,\n    type: 'office',\n    notificationType: NOTIFICATION_TYPE.assignedOfficeNote,\n  },\n  {\n    path: USER_DETAILS_PATH,\n    type: 'user',\n    notificationType: NOTIFICATION_TYPE.assignedUserNote,\n  },\n];\n\n// All three detail routes declare their id optional, so the segment can be\n// absent or a word; Number('') is 0, which would pass for an entity and ask\n// the endpoint for the notes of one that does not exist.\nconst ENTITY_ID = /^\\d+$/;\n\n/**\n * The note list currently on screen, or null when the page shows none. The id\n * is the last path segment, which is how all three pages carry their subject.\n */\nexport function getNoteContextFromPathname(pathname: string): INoteContext | null {\n  for (const page of NOTE_PAGES) {\n    if (!pathname.startsWith(`${page.path}/`)) {\n      continue;\n    }\n\n    const id = pathname.slice(page.path.length + 1).split('/')[0];\n\n    return ENTITY_ID.test(id) ? { type: page.type, typeId: Number(id) } : null;\n  }\n\n  return null;\n}\n\n/**\n * Whether any of the notifications a check stands for can have changed this\n * list. A note shared on another subject cannot: the page showing it is a\n * different one. An empty list means nothing named itself — a reconnect, a\n * login and a sibling window's result all arrive that way, and those are\n * exactly the cases where something was missed.\n */\nexport function shouldRefreshNotes(\n  noteContext: INoteContext,\n  notificationTypes?: string[]\n): boolean {\n  if (!notificationTypes || notificationTypes.length === 0) {\n    return true;\n  }\n\n  const page = NOTE_PAGES.find(({ type }) => type === noteContext.type);\n\n  return page !== undefined && notificationTypes.includes(page.notificationType);\n}\n","import {\n  takeEvery,\n  call,\n  put,\n  select,\n  takeLatest,\n  takeLeading,\n  take,\n  race,\n  delay,\n  fork,\n} from 'redux-saga/effects';\nimport {\n  CheckNotification,\n  ConnectNotificationSse,\n  GetNewNotificationAction,\n  CreateNotification,\n  GetNotification,\n  GetNotificationSuccess,\n  MarkAllNotificationsRead,\n  MarkAllNotificationsReadSuccess,\n  MarkNotificationReadOrUnread,\n  MarkNotificationReadOrUnreadSuccess,\n  NotificationTypes,\n  OpenNotificationDropDown,\n  ResetNotification,\n} from './actions';\nimport {\n  fromJS,\n} from 'immutable';\nimport {\n  atsApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  AtsActionTypes,\n  AtsApiCallAction,\n} from '../AtsModule/actions';\nimport { SetSnackbarClosedAction, SetSnackbarOpenAction } from '../ApplicationModule/actions';\nimport { makeSelectAppId, makeSelectUserId } from '../AtsModule/selectors';\nimport { createNotificationEventChannel } from './notificationEventChannel';\nimport {\n  NOTIFICATION_BROADCAST_EVENT,\n  broadcastNewNotification,\n} from './notificationBroadcast';\nimport CampaignIcon from '../../images/campaignIcon.svg';\nimport i18next from 'i18next';\nimport store from '../../store';\nimport { PROJECT_LIST_DETAIL_PATH, PROJECT_TRACKER_ID, getLocalePrefix } from '../../constants';\nimport { PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX } from '../../components/TakeoffList/Component';\nimport { GetProjectByIdAndFetchMissingSpecsAction } from '../ProjectModule/actions';\nimport { GetNotesAction } from '../NoteModule/actions';\nimport { getNoteContextFromPathname, shouldRefreshNotes } from './noteRefreshTarget';\n\n// Long enough to coalesce the frames of one create: a notification addressed to\n// several audiences reaches the same user more than once, and the takeoff list\n// asks for a check of its own on completion. The endpoint consumes the flag it\n// reads, so a second call in the same breath would return false and lose the\n// alert.\nexport const CHECK_DEBOUNCE_INTERVAL = 500;\n\nexport default function* notificationSaga() {\n  // Leading, not latest: the watcher lives until logout, so a repeat request\n  // while it runs is already satisfied. Restarting would drop the subscription\n  // and tear the shared stream down before taking it straight back up.\n  yield takeLeading(NotificationTypes.CONNECT_NOTIFICATION_SSE, watchNotificationSse);\n  yield fork(watchCheckNotification);\n  yield takeLatest(NotificationTypes.GET_NEW_NOTIFICATION, getNewNotification);\n  yield takeEvery([NotificationTypes.GET_NOTIFICATION], getNotification);\n  yield takeEvery(NotificationTypes.CREATE_NOTIFICATION, createNotification);\n  yield takeLatest(NotificationTypes.MARK_NOTIFICATION_READ_OR_UNREAD, markNotificationReadOrUnread);\n  yield takeLatest(NotificationTypes.MARK_ALL_NOTIFICATIONS_READ, markAllNotificationsRead);\n\n  yield takeEvery(AtsActionTypes.USER_LOGGED_IN, resetStateAndGetNotification);\n}\n\n// redux-saga's own debounce hands the worker the last action of a burst alone,\n// and a burst is where the types differ: a shared note followed inside the\n// window by a takeoff completion would be forgotten because the completion\n// landed last. Collect what the window saw instead. A check that names nothing\n// stands for whatever was missed, so it widens the whole burst back to that.\nexport function* watchCheckNotification() {\n  while (true) {\n    let action: CheckNotification = yield take(NotificationTypes.CHECK_NOTIFICATION);\n    let notificationTypes: string[] | undefined = [];\n\n    while (true) {\n      const notificationType = action.payload?.notificationType;\n      if (notificationType == null || notificationType === '') {\n        notificationTypes = undefined;\n      } else if (notificationTypes && !notificationTypes.includes(notificationType)) {\n        notificationTypes.push(notificationType);\n      }\n\n      const { next } = yield race({\n        next: take(NotificationTypes.CHECK_NOTIFICATION),\n        quiet: delay(CHECK_DEBOUNCE_INTERVAL),\n      });\n      if (!next) {\n        break;\n      }\n\n      action = next;\n    }\n\n    // Forked, not called: the endpoint round-trip must not hold up the next\n    // burst, which is how the built-in debounce behaved too.\n    yield fork(checkNotification, notificationTypes);\n  }\n}\n\nexport function* resetStateAndGetNotification() {\n  const isAutoquote = (yield select(makeSelectAppId())) === PROJECT_TRACKER_ID;\n  if (isAutoquote) {\n    yield put(new ResetNotification());\n    yield put(new ConnectNotificationSse());\n    // The stream only announces what happens from now on and stays silent on its\n    // first open, so this is the read that recovers whatever arrived while the\n    // session was away.\n    yield put(new CheckNotification());\n  }\n}\n\n// Only AutoQuote shows the bell, and a check is not app-scoped: it clears the\n// pending flag for every app the user has. Any other app must leave the stream\n// and the endpoint alone.\nexport function* watchNotificationSse() {\n  const appId = yield select(makeSelectAppId());\n  if (appId !== PROJECT_TRACKER_ID) {\n    return;\n  }\n\n  const channel = createNotificationEventChannel(appId);\n  try {\n    yield race({\n      events: call(consumeNotificationEvents, channel),\n      loggedOut: take(AtsActionTypes.USER_LOGGED_OUT),\n    });\n  } finally {\n    // Releases the last subscriber, which is what closes the shared stream when\n    // nothing else is listening.\n    channel.close();\n  }\n}\n\nexport function* consumeNotificationEvents(channel: any) {\n  while (true) {\n    const event = yield take(channel);\n    if (event.type === NOTIFICATION_BROADCAST_EVENT) {\n      // Read now, not when the channel opened: this watcher can start before\n      // the login round-trip lands, and it is never restarted afterwards, so a\n      // value captured up front would stay empty for the whole session. A\n      // window with no user yet matches nothing.\n      const appId = yield select(makeSelectAppId());\n      const userId = yield select(makeSelectUserId());\n      const message = event.message || {};\n      const isOwnSession = userId != null && message.userId === userId && message.appId === appId;\n      if (isOwnSession) {\n        // A sibling window already won the consumable flag and confirmed the\n        // notification; asking the endpoint again would only answer false.\n        yield put(new GetNewNotificationAction({ hasNewNotification: true }));\n      }\n    } else {\n      yield put(new CheckNotification({ notificationType: event.notificationType }));\n    }\n  }\n}\n\nexport function* getNewNotification(action: GetNewNotificationAction) {\n  const { hasNewNotification, notificationTypes } = action.payload;\n\n  yield put(new GetNotification({}));\n  if (hasNewNotification) {\n    // Both refreshes go out before the translation load below, which is the\n    // point a following check can cancel this run at.\n    const pathname = window.location.pathname.replace(getLocalePrefix(), '');\n\n    // The alert alone leaves whatever the notification is about untouched on\n    // screen. A shared note is the case the user is looking straight at it:\n    // re-read the list the page is showing so the note appears where it was\n    // added, not only in the bell.\n    const noteContext = getNoteContextFromPathname(pathname);\n    if (noteContext && shouldRefreshNotes(noteContext, notificationTypes)) {\n      yield put(new GetNotesAction(noteContext));\n    }\n\n    if (PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX.test(pathname)) {\n      const projectId = Number(pathname.split(`${PROJECT_LIST_DETAIL_PATH}/`)[1]);\n      if (!isNaN(projectId)) {\n        yield put(new GetProjectByIdAndFetchMissingSpecsAction({projectId}));\n      }\n    }\n\n    yield call(() => i18next.loadNamespaces('translations'));\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:notification.newNotification'),\n      severity: 'success',\n      anchorOrigin: {\n        vertical: 'top',\n        horizontal: 'right'\n      },\n      iconProps: {\n        src: CampaignIcon,\n      },\n      actionProps: {\n        label: i18next.t('translations:notification.viewNotification'),\n        autoHideDuration: null,\n        onclick: () => {\n          store.store.store.dispatch(new OpenNotificationDropDown());\n          store.store.store.dispatch(new SetSnackbarClosedAction());\n        },\n        buttonStyle: {\n          color: 'white',\n        }\n      }\n    }));\n  }\n}\n\nexport function* checkNotification(notificationTypes?: string[]) {\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'notification',\n      endpoint: 'checkNotification',\n    },\n  }));\n\n  if (data) {\n    const immutableData: any = fromJS(data);\n    const hasNewNotification: boolean = Boolean(\n      immutableData.getIn(['payload', 'notification', 'hasNewNotification'])\n    );\n    if (hasNewNotification) {\n      // This window won the consumable flag; sibling windows of the same\n      // session got (or will get) false, so hand them the confirmed result.\n      // Receivers alert without re-checking, so nothing loops back.\n      const appId = yield select(makeSelectAppId());\n      const userId = yield select(makeSelectUserId());\n      yield call(broadcastNewNotification, { userId, appId });\n    }\n    // Dispatched on every check, false included: the list and the unread count\n    // are refreshed either way, and only a true raises the alert. Tabs that lose\n    // the race for the flag still need their bell brought up to date.\n    yield put(new GetNewNotificationAction({\n      hasNewNotification,\n      notificationTypes,\n    }));\n  } else if (error) {\n    yield put(new SetSnackbarOpenAction({\n      message: error.message,\n      severity: 'error'\n    }));\n  }\n}\n\nexport function* getNotification(action: GetNotification) {\n  const { isRead, limit = 10, offset = 0, promise } = action.payload;\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'notification',\n      endpoint: 'searchNotificationDetails',\n      body: {\n        options: {\n          limit,\n          offset,\n          orderBy: {\n            id: -1\n          }\n        },\n      }\n    },\n  }));\n\n  if (data) {\n    const immutableData: any = fromJS(data);\n    const resp = immutableData.getIn(['payload', 'notification']);\n\n    const notifications = resp.get('notifications');\n    const ids = notifications.map(n => n.get('id'));\n\n    yield put(new GetNotificationSuccess({\n      notifications: resp.get('notifications'),\n      count: resp.get('count'),\n      readCount: resp.get('readCount'),\n      unreadCount: resp.get('unreadCount'),\n      options: resp.get('options')\n    }));\n\n    // used for loadMoreRows callback\n    if (promise) {\n      promise(ids);\n    }\n  } else if (error) {\n    yield put(new SetSnackbarOpenAction({\n      message: error.message,\n      severity: 'error'\n    }));\n  }\n\n}\n\nexport function* createNotification(action: CreateNotification) {\n\n  const targetAppId = yield select(makeSelectAppId());\n\n  // testing payload\n  const payload = {\n    'userIds': [10011186], // User ids to receive new notification\n    'firmIds': [], // Firms to be tagged to the notification\n    'officeIds': [], // Office to be tagged to the notification\n    'targetAppId': targetAppId,\n    'type': 'assignedTask',\n    'expiryDate': null,\n    'linkParams': {\n      ':projectId': 9068707\n    },\n    'templateParams': {\n      ':userName': 'Duncan Poon'\n    }\n  };\n\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'notification',\n      endpoint: 'newNotification',\n      body: {\n        ...payload\n      }\n    },\n  }));\n}\n\nexport function* markNotificationReadOrUnread(action: MarkNotificationReadOrUnread) {\n  const { notificationId, isRead } = action.payload;\n\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'notification',\n      endpoint: 'updateUserNotification',\n      params: {\n        notificationId,\n        type: isRead ? 'unread' : 'read'\n      },\n    }\n  }));\n\n  if (data) {\n    const immutableData: any = fromJS(data);\n    const resp = immutableData.getIn(['payload', 'notification', 'notification', 0]);\n    yield put(new MarkNotificationReadOrUnreadSuccess({ notification: resp }));\n  } else if (error) {\n    yield put(new SetSnackbarOpenAction({\n      message: error.message,\n      severity: 'error'\n    }));\n  }\n\n}\n\nexport function* markAllNotificationsRead(action: MarkAllNotificationsRead) {\n  const {\n    data,\n    error,\n  }: {\n    data: any,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'notification',\n      endpoint: 'notificationReadAll',\n      body: {\n        options: {\n          limit: 10,\n          offset: 0,\n          orderBy: {\n            id: -1\n          }\n        }\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData: any = fromJS(data);\n    const resp = immutableData.getIn(['payload', 'notification']);\n\n    yield put(new MarkAllNotificationsReadSuccess({\n      notifications: resp.get('notifications'),\n      count: resp.get('count'),\n      readCount: resp.get('readCount'),\n      unreadCount: resp.get('unreadCount'),\n      options: resp.get('options')\n    }));\n\n  } else if (error) {\n    yield put(new SetSnackbarOpenAction({\n      message: error.message,\n      severity: 'error'\n    }));\n  }\n}\n","/*\n * NotificationModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport reducer, { INotificationState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\nimport {\n  Debug\n} from '../../containers';\nimport {\n  Hide\n} from '../../components';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { ConnectNotificationSse } from './actions';\nimport { makeSelectAppId } from '../AtsModule/selectors';\nimport { PROJECT_TRACKER_ID } from '../../constants';\n\ninterface INotificationModuleComponentProps {\n\n}\n\ninterface INotificationModuleProps extends INotificationModuleComponentProps {\n  reducerState: IMapNonRecursive<INotificationState>;\n  appId: string;\n  dispatch: Dispatch<IAction>;\n  connectNotificationSse: () => void;\n}\n\ntype NotificationModuleProps = INotificationModuleProps;\n\nclass NotificationModule extends React.Component<NotificationModuleProps> {\n\n  public componentDidUpdate(prevProps: NotificationModuleProps): void {\n    const { appId } = this.props;\n    const enteredNotificationApp = appId === PROJECT_TRACKER_ID && prevProps.appId !== PROJECT_TRACKER_ID;\n    if (enteredNotificationApp) {\n      this.props.connectNotificationSse();\n    }\n  }\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{ display: 'none' }}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: Dispatch<IAction>) {\n  return {\n    dispatch,\n    connectNotificationSse: () => dispatch(new ConnectNotificationSse())\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: INotificationModuleProps) => createStructuredSelector({\n  reducerState: selectReducerState(),\n  appId: makeSelectAppId(),\n})(originalState);\n\nexport default compose<React.ComponentClass<INotificationModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(NotificationModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './NotificationModule';\nexport default Module;\n","import * as React from 'react';\nimport DownloadView from '../../../components/DownloadView';\nimport { useDownloadView } from '../../../components/DownloadView/hooks';\nimport {WATTS_CSI_MASTER_SPEC} from '../../../components/DownloadView/constant';\nimport {hasFormatSelection} from '../../../components/DownloadView/selection';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useState} from 'react';\nimport {makeSelectBulkDownloadStatus} from '../../../modules/PrintModule/selectors';\nimport {AMPLITUDE_EVENT} from '../../../constants';\nimport {useTranslation} from 'react-i18next';\nimport {Button} from '@material-ui/core';\nimport {BulkDownloadAction, ResetBulkDownloadStatusAction} from '../../../modules/PrintModule/actions';\nimport {BreadcrumbProjectSpecBar} from '../../../components/BreadcrumbProjectSpecBar';\nimport {SetTimerStartAction} from '../../../modules/ApplicationModule/actions';\nimport {Map} from 'immutable';\nimport {IMap} from 'ats-utils/src/Interfaces/index';\nimport {Spec} from '../../../models';\nimport * as uuid from 'uuid/v1';\nimport {getSelectedDrawings, getSelectedSpecs} from './helpers';\nimport { QUOTE_PRINT_FORMAT_FORM_NAME } from '../../../components/QuotePrintFormat';\nimport { setSubmitFailed } from 'redux-form';\n\ninterface IDownloadComponentProps {\n    title: React.ReactElement;\n    sourceName: string;\n    projectSpecDetailConfig: Map<number,any>;\n    onCancel: React.MouseEventHandler<HTMLButtonElement>;\n    projectId: number;\n    specs: Map<number, IMap<Spec>>;\n    isMaster: boolean;\n}\n\nconst Download: React.FC<IDownloadComponentProps> = ({ isMaster, specs, title, sourceName, projectSpecDetailConfig, projectId, onCancel, }) => {\n    const downloadViewProps = useDownloadView({});\n    const { formats, setFormats, data } = downloadViewProps;\n    const dispatch = useDispatch();\n    const [hash, setHash] = useState(null);\n    const downloadStatus = useSelector(makeSelectBulkDownloadStatus(hash));\n    const [isLoading, setIsLoading] = useState(false);\n    const { t } = useTranslation('translations');\n    const hasSelectedAtLeastOneFormat = formats.some((format) => hasFormatSelection(format, data));\n    let actions;\n    if (downloadStatus && downloadStatus.get('jobs').every((job) => job.get('status') !== 'loading')) {\n        actions = <>\n            <Button\n                color='primary'\n                onClick={() => {\n                    dispatch(new ResetBulkDownloadStatusAction());\n                    setIsLoading(false);\n                }}\n            >\n                {t('downloadView.backToPrintFormats')}\n            </Button>\n            <Button color='primary' onClick={onCancel}>{t('downloadView.backToProject')}</Button>\n        </>;\n    } else {\n        actions = <Button color='primary' onClick={onCancel}>{t('downloadView.cancel')}</Button>;\n    }\n    return (\n        <>\n            <BreadcrumbProjectSpecBar\n                breadcrumbs={[\n                    {\n                        label: t('downloadView.title'),\n                        linkProps: {\n                            component: 'div',\n                            underline: 'none'\n                        }\n                    },\n                ]}\n                buttons={isLoading ? [] : [\n                    {\n                        label: t('downloadView.back'),\n                        onClick: onCancel,\n                        buttonProps: {variant: 'text'},\n                    },\n                    {\n                        label: t('downloadView.generateDocuments'),\n                        onClick: () => {\n                            // go to the first selected format with missing required fields\n                            const formatsWithRequiredFields = formats.filter((format) => format.selected && format.requiredFields);\n                            const firstFormatWithMissingRequiredFields = formatsWithRequiredFields?.find((format) => {\n                                const formValues = data[format.key];\n                                const hasMissingRequiredField = format.requiredFields.some((field) => !formValues.getIn(field.split('.')));\n                                return hasMissingRequiredField;\n                            });\n                            if (firstFormatWithMissingRequiredFields) {\n                                setFormats((prevFormats) => prevFormats.map((format) => {\n                                    return {\n                                        ...format,\n                                        isActive: format.key === firstFormatWithMissingRequiredFields.key,\n                                    };\n                                }));\n                                dispatch(setSubmitFailed(firstFormatWithMissingRequiredFields.formName, ...firstFormatWithMissingRequiredFields.requiredFields));\n                                return;\n                            }\n\n                            setIsLoading(true);\n                            // set timer start here, for amplitude stuff to track time when series is fully loaded\n                            dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.printGenerateTime}));\n                            const selectedSpecs = getSelectedSpecs(projectSpecDetailConfig, specs);\n                            const specsArr = selectedSpecs.map((spec) => {\n                                const selectedDrawings = getSelectedDrawings(projectSpecDetailConfig, spec);\n                                return ({\n                                    name: spec.get('name'),\n                                    drawings: selectedDrawings,\n                                    specId: Number(spec.get('id')),\n                                    isMaster: spec.get('isMaster'),\n                                });\n                            }).toArray();\n                            const selectedFormats = downloadViewProps.formats.filter((format) => !format.isProjectLevel && format.selected && format.key !== WATTS_CSI_MASTER_SPEC);\n                            const projectLevelFormatDetails = downloadViewProps.formats.filter((format) => format.isProjectLevel && format.selected);\n                            const newHash = uuid();\n                            dispatch(new BulkDownloadAction({\n                                hash: newHash,\n                                type: 'project',\n                                sourceName,\n                                projectId,\n                                specs: specsArr,\n                                formatDetails: selectedFormats.map((selectedFormat) => ({\n                                    key: selectedFormat.key,\n                                    label: selectedFormat.label,\n                                    projectId,\n                                    projectTitle: sourceName,\n                                    data: downloadViewProps.data[selectedFormat.key]\n                                })),\n                                projectLevelFormatDetails: projectLevelFormatDetails.map((selectedFormat) => ({\n                                    key: selectedFormat.key,\n                                    label: selectedFormat.label,\n                                    projectId,\n                                    projectTitle: sourceName,\n                                    data: downloadViewProps.data[selectedFormat.key]\n                                })),\n                                isMaster,\n                                bobrickCSIPrivada: downloadViewProps.data.bobrickCSIMasterSpec?.get('privadaPartition'),\n                                bobrickCSIEvolve: downloadViewProps.data.bobrickCSIMasterSpec?.get('evolvePartition'),\n                                bobrickCSITrad: downloadViewProps.data.bobrickCSIMasterSpec?.get('traditionalSeriesPartition'),\n                                bobrickPlanningGuide: downloadViewProps.data.bobrickPlanningGuide?.get('planningGuide'),\n                            }));\n                            setHash(newHash);\n                        },\n                        buttonProps: {variant: 'contained', disabled: !hasSelectedAtLeastOneFormat}\n                    }\n                ]}\n            />\n            <DownloadView hash={hash} title={title} actions={actions} {...downloadViewProps} />\n        </>\n    );\n};\n\nexport default Download;","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {utcToLocal} from 'ats-utils/src';\nimport {makeStyles} from '@material-ui/styles';\n\nconst useStyles = makeStyles((theme) => ({\n    buildingTypesTooltip: {\n        display: 'inline-flex',\n        flexDirection: 'column'\n    },\n}));\nconst ProjectTooltipInfo = ({ project }) => {\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const buildingClasses = project.getIn(['building', 'buildingClasses']);\n    const internalNum = project.get('internalNo');\n    const createDate = utcToLocal(project.get('createdDate'), true);\n    const tenderDate = utcToLocal(project.get('bidDate'));\n    const area = project.get('area');\n    const city = project.getIn(['location', 'city', 'value']);\n    const province = project.getIn(['location', 'province', 'value']);\n    const country = project.getIn(['location', 'country', 'value']);\n    const address = `${project.get('address') ? project.get('address') + ', ' : ''}${city}, ${province}, ${country}`;\n    const creator = project.getIn(['createdBy', 'user', 'name']);\n    const buildingTypesTooltip =\n        buildingClasses\n            ? <span className={classes.buildingTypesTooltip}>\n            {\n                buildingClasses.map((data, index) => {\n                    if (!data.get('buildingTypes').size) {\n                        return <span key={index + ',' + data.get('value')}>\n                    {data.get('value')}\n                  </span>;\n                    }\n                    return data.get('buildingTypes').map((data2, i) => {\n                        return (\n                            <span key={index + ',' + i}>\n                      {[data.get('value'), data2.get('value')].join(' - ')}\n                    </span>\n                        );\n                    });\n                }).flatten()\n            }\n          </span>\n            : t('ProjectDetail.na');\n    return (\n        <ul style={{listStyle: 'none', padding: 0}}>\n            <li>{t('ProjectDetail.internalNoTooltip')}: {internalNum}</li>\n            <li>{t('ProjectDetail.createdTooltip')}: {createDate}</li>\n            <li>{t('ProjectDetail.tenderDateTooltip')}: {tenderDate}</li>\n            <li>{t('ProjectDetail.areaTooltip')}: {area}</li>\n            <li>{t('ProjectDetail.addressTooltip')}: {address}</li>\n            <li>{t('ProjectDetail.creatorTooltip')}: {creator}</li>\n            <li>{t('ProjectDetail.buildingTypeTooltip')}: {buildingTypesTooltip}</li>\n        </ul>\n    );\n};\n\nexport default ProjectTooltipInfo;","import {Grid, Tooltip, Typography} from '@material-ui/core';\nimport PeopleRoundedIcon from '@material-ui/icons/PeopleRounded';\nimport InfoIcon from '@material-ui/icons/Info';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport Debug from '../../../containers/Debug';\nimport * as React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {useTranslation} from 'react-i18next';\nimport {Theme} from '@material-ui/core/';\nimport ProjectTooltipInfo from '../TooltipInfo/ProjectTooltipInfo';\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    collaboratorIcon: {\n        color: theme.palette.primary.main\n    },\n    warningIcon: {\n        color: theme.palette.warning.main,\n    },\n}));\nconst Title = ({\n    project,\n    children\n}) => {\n    const { t } = useTranslation('translations');\n    const classes = useStyles();\n    return (\n        <Grid\n            container={true}\n            wrap='nowrap'\n            alignItems='center'\n            spacing={1}\n        >\n            <Grid item={true}>\n                <Grid container={true} alignItems='center'>\n                    {\n                        project.get('isCollaborated') ? <Tooltip title={t('ProjectDetail.collaboratedIconTooltip')}>\n                            <PeopleRoundedIcon color='primary' className={classes.collaboratorIcon} />\n                        </Tooltip> : <Tooltip title={t('ProjectDetail.nonCollaboratedIconTooltip')}>\n                            <PersonRoundedIcon color='primary' className={classes.collaboratorIcon} />\n                        </Tooltip>\n                    }\n                </Grid>\n            </Grid>\n            <Grid item={true}>\n                <Typography variant='h6'>\n                    {project.get('name')}\n                </Typography>\n            </Grid>\n            <Grid item={true}>\n                <div style={{ display: 'flex' }}>\n                    <Tooltip title={<ProjectTooltipInfo project={project} />}>\n                        <InfoIcon style={{ color: '#757575' }} />\n                    </Tooltip>\n                </div>\n            </Grid>\n            {children}\n        </Grid>\n    );\n};\n\nexport default Title;","import Download from './Download';\nimport {makeSelectSpec, makeSelectSpecs} from '../../../modules/SpecModule/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport Title from '../../../components/ProjectDetail/Title';\nimport {checkHasSelectedDrawingsWithDraftProduct} from '../DefaultView';\nimport {makeSelectProjectSpecConfig} from '../../../modules/ProjectModule/selectors';\nimport {Grid, Tooltip} from '@material-ui/core';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport * as React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {Theme} from '@material-ui/core/';\nimport {useTranslation} from 'react-i18next';\nimport {CancelBulkSpecCronJobAction} from '../../../modules/PrintModule/actions';\nimport {IDownloadViewProps} from '../types';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    warningIcon: {\n        color: theme.palette.warning.main,\n    }\n}));\nconst DownloadView: React.FC<IDownloadViewProps> = ({\n    project,\n    onViewChange\n}) => {\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const classes = useStyles();\n    const spec = useSelector(makeSelectSpec());\n    const specs = useSelector(makeSelectSpecs());\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const hasSelectedDrawingsWithDraftProduct = checkHasSelectedDrawingsWithDraftProduct(project, projectSpecDetailConfig, specs);\n    const projectName = project.get('name');\n    const projectId = project.get('id');\n    const isMaster = spec.get('isMaster');\n    return (\n        <Download\n            specs={specs}\n            title={<Title project={project}>\n                {\n                    hasSelectedDrawingsWithDraftProduct ? <Grid item={true} >\n                        <div style={{ display: 'flex' }}>\n                            <Tooltip title={t('ProjectDetail.hasDraftProductWarning')}>\n                                <WarningIcon className={classes.warningIcon} />\n                            </Tooltip>\n                        </div>\n                    </Grid> : null\n                }\n            </Title>}\n            sourceName={projectName}\n            projectSpecDetailConfig={projectSpecDetailConfig}\n            onCancel={() => {\n                onViewChange('default');\n                dispatch(new CancelBulkSpecCronJobAction());\n            }}\n            projectId={projectId}\n            isMaster={isMaster}\n         />\n    );\n};\n\nexport default DownloadView;","import React from 'react';\nimport { CancelDownloadLixirSpecBookletAction } from '../../../modules/PrintModule/actions';\nimport LixirSpecBooklet from '../../../components/LixirBooklet';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {IViewProps} from '../types';\nimport {makeSelectSpec} from '../../../modules/SpecModule/selectors';\n\nconst LixirSpecBookletView: React.FC<IViewProps> = ({ onViewChange }) => {\n    const dispatch = useDispatch();\n    const spec = useSelector(makeSelectSpec());\n    const specId = spec.get('id');\n    const isMaster = spec.get('isMaster');\n    return (\n        <LixirSpecBooklet\n            onCancel={() => {\n                onViewChange('default');\n                dispatch(new CancelDownloadLixirSpecBookletAction());\n            }}\n            specId={specId}\n            isMaster={isMaster}\n        />\n    );\n};\n\nexport default LixirSpecBookletView;","import React, {useEffect} from 'react';\nimport {SelectAllDrawingsAction, SelectAllDrawingsInSpecAction} from '../../modules/ProjectModule/actions';\nimport {useDispatch} from 'react-redux';\nimport {Project, Spec} from '../../models';\nimport {IMap} from 'ats-utils/src';\nimport { Map } from 'immutable';\n\nconst findSpecsInProject = (project: IMap<Project>, specs: Map<number, IMap<Spec>>) => {\n    return specs.filter((spec) => {\n        return project.get('specs').some((projectSpec) => {\n            return projectSpec.get('id') === spec.get('id');\n        });\n    });\n};\nconst checkIsEverySpecInProjectLoaded = (project: IMap<Project>, specs: Map<number, IMap<Spec>>) => {\n    return project?.get('specs').every((projectSpec) => {\n        const specMatched = specs.find((spec) => {\n            return projectSpec.get('id') === spec.get('id');\n        });\n        return Boolean(specMatched);\n    });\n};\nfunction useSelectAllDrawingsEffect({\n    isLoadingProject,\n    project,\n    specs,\n    enabled,\n    optional,\n}: {\n    isLoadingProject: boolean;\n    project: IMap<Project>;\n    specs: Map<number, IMap<Spec>>;\n    enabled: React.MutableRefObject<boolean>;\n    optional?: {\n        selectedSpecId?: number;\n    }\n}) {\n    const dispatch = useDispatch();\n    const selectedSpecId = optional?.selectedSpecId;\n    useEffect(() => {\n        if (enabled.current) {\n            if (isLoadingProject || project == null) {\n                return;\n            }\n            const isEverySpecsLoaded = checkIsEverySpecInProjectLoaded(project, specs);\n            if (isEverySpecsLoaded) {\n              if (optional) {\n                if (selectedSpecId && specs.getIn([selectedSpecId, 'projectId']) === project.get('id')) {\n                  enabled.current = false;\n                  dispatch(new SelectAllDrawingsInSpecAction({\n                    spec: specs.get(selectedSpecId),\n                  }));\n                }\n              } else {\n                enabled.current = false;\n                dispatch(new SelectAllDrawingsAction({\n                  project,\n                  specs: findSpecsInProject(project, specs),\n                }));\n              }\n            }\n        }\n    }, [project, specs, isLoadingProject, enabled, selectedSpecId]);\n}\n\nexport default useSelectAllDrawingsEffect;","/* tslint:disable */\nimport * as React from 'react';\nimport {useTranslation,} from 'react-i18next';\nimport {\n    ProjectSelector,\n    Debug,\n} from '../../containers';\nimport {\n    Mode,\n    NOT_FOUND_PATH,\n} from '../../constants';\nimport {withProjectId} from '../../hoc';\nimport {useEffect, useLayoutEffect, useMemo, useState} from 'react';\nimport {ResetErrorAction} from '../../modules/ErrorModule/actions';\nimport {ToggleOverlayComponentAction} from '../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../components/LoadingModal/Component';\nimport {UpdateProjectSpecDetailConfigAction} from '../../modules/ProjectModule/actions';\nimport {SetModeAction} from '../../modules/SpecModule/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n    makeSelectIsGettingProjects,\n    makeSelectProject,\n} from '../../modules/ProjectModule/selectors';\nimport {IMap} from 'ats-utils/src/Interfaces';\nimport {Project} from '../../models';\nimport {push} from 'connected-react-router';\nimport {selectErrors} from '../../modules/ErrorModule/selectors';\nimport DefaultView from './DefaultView';\nimport DownloadView from './DownloadView';\nimport LixirSpecBookletView from './LixirSpecBookletView';\nimport { ViewTypes } from './types';\nimport ViewContainer from '../SpecDetail/layout/ViewContainer';\nimport {makeSelectSpec, makeSelectSpecs} from '../../modules/SpecModule/selectors';\nimport useSelectAllDrawingsEffect from '../../containers/CopyModal/useSelectAllDrawingsEffect';\n\ninterface IProjectSpecDetailProps {\n    project: IMap<Project>;\n}\n\nconst Index = ({\n    projectId\n}) => {\n    return <Loader key={projectId} projectId={projectId} />;\n}\nconst Loader = ({\n     projectId\n}) => {\n    const projectSelector = useMemo(() => makeSelectProject({projectId}), [projectId]);\n    const project = useSelector(projectSelector);\n    const isLoadingProject = useSelector(makeSelectIsGettingProjects());\n    const dispatch = useDispatch();\n    const errors = useSelector(selectErrors());\n    const has404Error = errors.size && errors.getIn([`${errors.size - 1}`, 'meta', 'error', 'payload', 'error', 'code']) === 404\n    const enableSelectAllDrawings = React.useRef(false);\n    const specs = useSelector(makeSelectSpecs());\n    const selectedSpec = useSelector(makeSelectSpec());\n    useEffect(() => {\n        enableSelectAllDrawings.current = true;\n    }, [projectId]);\n    useSelectAllDrawingsEffect({\n        project,\n        specs,\n        isLoadingProject,\n        enabled: enableSelectAllDrawings,\n        optional: {\n          selectedSpecId: selectedSpec?.get('id')\n        },\n    })\n    if (project == null) {\n        if (has404Error) {\n            dispatch(push(NOT_FOUND_PATH));\n        }\n        return null;\n    }\n    return <ProjectSpecDetail project={project} />\n}\nconst ProjectSpecDetail: React.FC<IProjectSpecDetailProps> = ({ project }) => {\n    const {t} = useTranslation('translations');\n    const dispatch = useDispatch();\n    const [view, setView] = useState<ViewTypes>('default');\n    const projectId = project.get('id');\n    const isTestProject = project.get('status') === 'test';\n    const handleViewChange = (newView: ViewTypes) => {\n        setView(newView);\n    };\n    useEffect(() => {\n        dispatch(new ResetErrorAction({}));\n        dispatch(new SetModeAction(isTestProject ? Mode.testProject : Mode.project));\n        return () => {\n            dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: false\n            }));\n            dispatch(new UpdateProjectSpecDetailConfigAction({}));\n        };\n    }, []);\n    useLayoutEffect(() => {\n        const title = document.getElementById('pageTitle');\n        title.innerHTML = t('pageTitle.projectDetailPage');\n        if (view === 'default') {\n            title.innerHTML = t('pageTitle.projectDetailPage');\n        } else {\n            title.innerHTML = t('pageTitle.downloadSpecPage');\n        }\n\n    }, [view]);\n    const viewProps = {\n        project,\n        onViewChange: handleViewChange\n    };\n    const componentMap = new Map([\n        ['default', DefaultView],\n        ['download', DownloadView],\n        ['lixir_spec_booklet', LixirSpecBookletView]\n    ]);\n    const ViewComponent = componentMap.get(view);\n    return (\n        <>\n            <Debug\n                debugLevel={1}\n                delayedRender={() => {\n                    return <React.Fragment>\n                        selected project: {projectId}\n                        <ProjectSelector projectId={projectId}/>\n                    </React.Fragment>;\n                }}\n            />\n            <ViewContainer>\n                <ViewComponent {...viewProps} />\n            </ViewContainer>\n        </>\n\n    );\n};\n\nexport default withProjectId({redirectToControlled: true})(Loader);\n","import ProjectSpecDetail from './ProjectSpecDetail';\n\nexport default ProjectSpecDetail;","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  withStyles,\n  WithStyles,\n  FormGroup,\n  Typography,\n  Theme,\n  Grid,\n  TextField,\n} from '@material-ui/core';\nimport {\n  fromJS,\n} from 'immutable';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport {\n  FlatPanel,\n} from '../../components';\n\nimport {\n  UpdateDrawingAction,\n} from '../../modules/SpecModule/actions';\n\nimport {\n  makeSelectDrawing,\n  makeSelectSpec,\n} from '../../modules/SpecModule/selectors';\nimport {\n  makeSelectProject,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Drawing,\n  Project,\n  Spec,\n} from '../../models';\nimport { debounce } from 'lodash';\nimport { WithTranslation, withTranslation } from 'react-i18next';\n\ninterface IProductSelectionGroup {\n  dispatch: React.Dispatch<IAction>;\n  drawing: IMap<Drawing>;\n  selectedProject: IMap<Project>;\n  selectedSpec: IMap<Spec>;\n  // isMaster: boolean;\n}\n\ninterface IProductSelectionGroupState {\n  [key: string]: any;\n}\n\nconst styles = (theme: Theme) => ({\n  drawingDetailTitleContainer: {\n    margin: `${theme.spacing()}px 0`,\n  },\n});\n\ntype ProductSelectGroupProps = IProductSelectionGroup\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ProductSelectionGroup extends React.Component<ProductSelectGroupProps, IProductSelectionGroupState> {\n  public state = {\n    name: '',\n    note: '',\n    order: 0,\n    externalUpdate: true\n  }\n\n  public componentDidMount = () => {\n    const { drawing } = this.props;\n    this.setState({\n      name: drawing ? drawing.get('name', '') : '',\n      note: drawing ? drawing.get('note', '') : '',\n      order: drawing ? drawing.get('order', 0) : 0\n    });\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { drawing } = this.props;\n    if (this.state.externalUpdate && drawing && !drawing.equals(prevProps.drawing)) {\n      this.setState({\n        name: drawing.get('name', ''),\n        note: drawing.get('note', ''),\n        order: drawing.get('order', 0)\n      });\n    }\n  }\n\n  public debouncedChange = debounce((name: keyof Drawing, value: string) => {\n    const {\n      dispatch,\n      drawing,\n    } = this.props;\n\n    this.setState({ externalUpdate: false});\n    dispatch(new UpdateDrawingAction({\n      drawingId: drawing.get('id'),\n      drawing: drawing.set(name, value),\n      openSnackbar: true,\n      getSeries: false\n    }));\n  }, 500);\n\n  public handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n    const {\n      target: {\n        name,\n        value\n      }\n    } = e;\n\n    this.setState({[name]: value});\n\n    if (!(name === 'order' && value === '')) {\n      this.debouncedChange(name as keyof Drawing, value);\n    }\n  }\n\n  public render () {\n    const {\n      drawing,\n      classes,\n      selectedProject,\n      selectedSpec,\n      t\n    } = this.props;\n    const {\n      name,\n      note,\n      order\n    } = this.state;\n\n    const projectName = selectedProject ? selectedProject.get('name', undefined) : undefined;\n    const specName = selectedSpec ? selectedSpec.get('name', undefined) : undefined;\n\n    if (drawing == null) {\n      return <div style={{ marginLeft: 24 }}>\n        {t('ProductSelectionGroupDrawingSettings.noDrawingSelected')}\n      </div>\n    }\n    return <FlatPanel\n      title={t('ProductSelectionGroupDrawingSettings.title')}\n      key='_drawing_settings_'\n    >\n      <Grid\n        container={true}\n        direction='column'\n      >\n        <Grid\n          className={classes.drawingDetailTitleContainer}\n        >\n          <Typography\n            variant='subtitle1'\n            color='textPrimary'\n          >\n            {\n              [projectName, specName].filter((name) => name != null).join(' - ')\n            }\n          </Typography>\n        </Grid>\n        <FormGroup>\n          <Grid\n            container={true}\n            direction='row'\n            wrap='nowrap'\n            spacing={1}\n          >\n            <Grid\n              item={true}\n            >\n              <TextField\n                name='name'\n                placeholder={t('ProductSelectionGroupDrawingSettings.namePlaceholder')}\n                label={t('ProductSelectionGroupDrawingSettings.nameLabel')}\n                value={name}\n                onChange={this.handleChange}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <TextField\n                name='order'\n                placeholder={t('ProductSelectionGroupDrawingSettings.sequencePlaceholder')}\n                label={t('ProductSelectionGroupDrawingSettings.sequenceLabel')}\n                value={order}\n                type='number'\n                onChange={this.handleChange}\n              />\n            </Grid>\n          </Grid>\n          <Grid>\n            <TextField\n              name='note'\n              placeholder={t('ProductSelectionGroupDrawingSettings.notePlaceholder')}\n              label={t('ProductSelectionGroupDrawingSettings.noteLabel')}\n              value={note}\n              onChange={this.handleChange}\n            />\n          </Grid>\n        </FormGroup>\n      </Grid>\n    </FlatPanel>\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  drawing: makeSelectDrawing(),\n  selectedProject: makeSelectProject(),\n  selectedSpec: makeSelectSpec()\n});\n\nexport default compose<React.ComponentClass<{}>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductSelectionGroup);","import * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport {\n  Slider,\n  Grid,\n  Typography,\n  Tooltip,\n  TextField,\n  Button\n} from '@material-ui/core';\nimport { compose } from 'redux';\nimport {\n  connect,\n} from 'react-redux';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport { makeSelectLoggedInUserOfficeLocation } from '../../modules/AccountModule/selectors';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { Address } from '../../models';\nimport { GEOLOCATION_ID } from '../../constants';\nimport { List, Map } from 'immutable';\nimport { useTranslation } from 'react-i18next';\n\ninterface IRangeSliderComponentProps {\n  width?: number;\n  rangeFilterValues: List<Map<string, any>>;\n  appliedFilterValue: any;\n  color?: 'primary' | 'secondary';\n  handleChangeCommitted: (value: number | number[]) => void;\n  disabled?: boolean;\n}\n\ninterface IRangeSliderProps extends IRangeSliderComponentProps {\n  loginUserOfficeLocation: IMap<Address>;\n}\n\ntype RangeSliderProps = IRangeSliderProps;\n\nconst useStyles = makeStyles((theme) => ({\n  valueLabel: {\n    '& *': {\n      background: 'transparent'\n    }\n  },\n  thumb: {\n    '&[data-index=\"0\"]': {\n      '& span:nth-child(1)': {\n        top: 30\n      }\n    },\n    '&[data-index=\"1\"]': {\n      '& span:nth-child(1)': {\n        top: -30\n      }\n    }\n  },\n  thumbEmpty: {\n    color: 'white',\n    border: `2px ${theme.palette.primary.main} solid`,\n    '&[data-index=\"0\"]': {\n      '& span:nth-child(1)': {\n        top: 30\n      }\n    },\n    '&[data-index=\"1\"]': {\n      '& span:nth-child(1)': {\n        top: -30\n      }\n    }\n  }\n}));\n\nconst valuetext = (value: number) => {\n  return `${value}`;\n};\n\nconst RangeSlider: React.FC<RangeSliderProps> = ({\n  width = '100%',\n  rangeFilterValues,\n  appliedFilterValue,\n  color = 'primary',\n  handleChangeCommitted,\n  disabled = false,\n  loginUserOfficeLocation\n}) => {\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const metricMin = rangeFilterValues.getIn([0, 'value', 0]);\n  const metricMax = rangeFilterValues.getIn([0, 'value', 1]);\n  const metricUnit = rangeFilterValues.getIn([0, 'meta', 'unit']);\n  const impMin = rangeFilterValues.getIn([1, 'value', 0]);\n  const impMax = rangeFilterValues.getIn([1, 'value', 1]);\n  const impUnit = rangeFilterValues.getIn([1, 'meta', 'unit']);\n  const isIntRange = rangeFilterValues.getIn([0, 'meta', 'optionType']) === 'intRange';\n  const isQuantizedRange = rangeFilterValues.getIn([0, 'meta', 'isQuantizedRange']);\n  const isUSLocation = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.usa;\n  const min = isQuantizedRange ? metricMin : isUSLocation ? impMin : metricMin;\n  const max = isQuantizedRange ? metricMax : isUSLocation ? impMax : metricMax;\n  const isRangeFilterInUse = appliedFilterValue && appliedFilterValue.size === 2;\n  const [valueRange, setValueRange] = useState<number[]>([null, null]);\n  const [displayWarning, setDisplayWarning] = useState<boolean>(false);\n  const stepProps = isIntRange ? { step: 1 } : null;\n\n  const primaryUnit = isQuantizedRange\n  ? null\n  : isUSLocation\n      ? impUnit\n      : metricUnit;\n\n  const secondaryUnit = isQuantizedRange\n  ? null\n  : isUSLocation\n      ? metricUnit\n      : impUnit;\n\n  const handleInputChange = (event, range: 'lowRange' | 'highRange') => {\n    const updatedValue = event.target.value === '' ? null : Number(event.target.value);\n    let newValueRange;\n    if (range === 'lowRange') {\n      newValueRange = [updatedValue, valueRange[1]];\n    } else if (range === 'highRange') {\n      newValueRange = [valueRange[0], updatedValue];\n    }\n    setValueRange(newValueRange);\n  };\n\n  // const labelFormat = (value: number) => {\n  //   const imperialValue = ((value - min) / (max - min) * (impMax - impMin)) + impMin ;\n  //   const noValidImperialValue = (!impMin && impMin !== 0) || (!impMax && impMax !== 0) || (!imperialValue && imperialValue !== 0);\n  //   return (\n  //     disabled\n  //     ? null\n  //     : isQuantizedRange || noValidImperialValue\n  //       ? <Grid container={true} direction='column' alignItems='center' style={{width: 'max-content'}}>\n  //           <Typography color='textPrimary' variant='subtitle2'>{value} {isQuantizedRange ? null : metricUnit}</Typography>\n  //         </Grid>\n  //       : isUSLocation\n  //         ? <Grid container={true} direction='column' alignItems='center' style={{width: 'max-content'}}>\n  //             <Typography color='textPrimary' variant='subtitle2'>\n  //               {Number.isInteger(imperialValue) ? imperialValue : imperialValue.toFixed(2)} {impUnit}\n  //             </Typography>\n  //             <Typography color='textPrimary' variant='subtitle1'>({value} {metricUnit})</Typography>\n  //           </Grid>\n  //         : <Grid container={true} direction='column' alignItems='center' style={{width: 80}}>\n  //             <Typography color='textPrimary' variant='subtitle2'>{value} {metricUnit}</Typography>\n  //             <Typography color='textPrimary' variant='subtitle1'>\n  //               ({Number.isInteger(imperialValue) ? imperialValue : imperialValue.toFixed(2)} {impUnit})\n  //             </Typography>\n  //           </Grid>\n  //   );\n  // };\n\n  const getImperialValue = (metricValue) => {\n    const imperialValue = metricValue ? ((metricValue - metricMin) / (metricMax - metricMin) * (impMax - impMin)) + impMin : '';\n    return imperialValue;\n  };\n\n  const getMetricValue = (imperialValue) => {\n    const metricValue = imperialValue ? ((imperialValue - impMin) / (impMax - impMin) * (metricMax - metricMin)) + metricMin : '';\n    return metricValue;\n  };\n\n  const getSecondaryValue = (appliedValue) => {\n    if (isUSLocation) {\n      return appliedValue && getMetricValue(appliedValue).toFixed(2);\n    } else {\n      return appliedValue && getImperialValue(appliedValue).toFixed(2);\n    }\n  };\n\n  const handleChange = (event, newValue: number | number[]) => {\n    if (!Array.isArray(newValue)) {\n      return;\n    }\n    setValueRange(newValue);\n  };\n\n  useEffect(() => {\n    if (!appliedFilterValue || appliedFilterValue.size !== 2) {\n      setValueRange([min,max]);\n    } else {\n      setValueRange(appliedFilterValue.toJS());\n    }\n  },[appliedFilterValue]);\n\n  return (\n    <Tooltip title={disabled ? t('ProductSelection.filterNotAvailable') : ''} placement='top'>\n      <>\n      <Grid\n        container={true}\n        direction='row'\n        alignItems='baseline'\n        wrap='nowrap'\n        style={{width}}\n      >\n        <Grid style={{marginRight: 12, position: 'relative', top: -24}}>\n          <Grid container={true} wrap='nowrap' alignItems='baseline'>\n            <TextField\n              value={valueRange[0] ?? ''}\n              onChange={(e) => {\n                setDisplayWarning(false);\n                // only allow numbers and decimal\n                const regex = /^[0-9.]*$/;\n                if (e.target.value === '' || regex.test(e.target.value)) {\n                  handleInputChange(e, 'lowRange');\n                }\n              }}\n              inputProps={{\n                placeholder: t('ProductSelection.min'),\n                disabled,\n                min,\n                max,\n                type: 'text',\n                'aria-labelledby': 'input-slider',\n                maxLength: 7,\n                style: {\n                  maxWidth: 60,\n                  minWidth: 40\n                },\n                ...stepProps\n              }}\n            />\n            <Typography>{primaryUnit}</Typography>\n          </Grid>\n          {getSecondaryValue(valueRange[0]) !== null && !isQuantizedRange &&\n            <Typography color='textSecondary' variant='body1' style={{position: 'relative', top: 12}}>({getSecondaryValue(valueRange[0])} {secondaryUnit})</Typography>\n          }\n        </Grid>\n        <Slider\n          classes={{\n            valueLabel: classes.valueLabel,\n            thumb: isRangeFilterInUse ? classes.thumb : !disabled ? classes.thumbEmpty : null\n          }}\n          min={min}\n          max={max}\n          color={color}\n          getAriaLabel={() => 'Range slider filter'}\n          value={valueRange}\n          onChange={handleChange}\n          onChangeCommitted={(e, value: number[]) => setValueRange(value)}\n          getAriaValueText={valuetext}\n          disabled={disabled}\n          {...stepProps}\n        />\n        <Grid style={{marginLeft: 12, position: 'relative', top: -24}}>\n          <Grid container={true} wrap='nowrap' alignItems='baseline'>\n            <TextField\n              value={valueRange[1] ?? ''}\n              onChange={(e) => {\n                setDisplayWarning(false);\n                // only allow numbers and decimal\n                const regex = /^[0-9.]*$/;\n                if (e.target.value === '' || regex.test(e.target.value)) {\n                  handleInputChange(e, 'highRange');\n                }\n              }}\n              inputProps={{\n                placeholder: t('ProductSelection.max'),\n                disabled,\n                min,\n                max,\n                type: 'text',\n                'aria-labelledby': 'input-slider',\n                maxLength: 7,\n                style: {\n                  maxWidth: 60,\n                  minWidth: 40\n                },\n                ...stepProps\n              }}\n            />\n            <Typography>{primaryUnit}</Typography>\n          </Grid>\n          {getSecondaryValue(valueRange[1]) !== null && !isQuantizedRange &&\n            <Typography color='textSecondary' variant='body1' style={{position: 'relative', top: 12}}>({getSecondaryValue(valueRange[1])} {secondaryUnit})</Typography>\n          }\n        </Grid>\n      </Grid>\n      <Grid container={true}>\n        {displayWarning &&\n          <Typography color='error' variant='caption' style={{marginBottom: 8}}>\n            {t('ProductSelection.maxLessThanMinWarning')}\n          </Typography>\n        }\n        <Button\n          color='primary'\n          variant='outlined'\n          size='small'\n          style={{marginLeft: 'auto'}}\n          onClick={() => {\n            if (valueRange[0] > valueRange[1]) {\n              setDisplayWarning(true);\n              return;\n            } else {\n              setDisplayWarning(false);\n              const minValueToSubmit = valueRange[0] < min\n                                        ? min\n                                        : valueRange[0] > max\n                                          ? max\n                                          : valueRange[0];\n              const maxValueToSubmit = valueRange[1] > max\n                                        ? max\n                                        : valueRange[1] < min\n                                          ? min\n                                          : valueRange[1];\n              const valueRangeToSubmit = [minValueToSubmit, maxValueToSubmit];\n              setValueRange(valueRangeToSubmit);\n              handleChangeCommitted(valueRangeToSubmit);\n            }\n          }}\n          disabled={disabled}\n        >\n          {t('ProductSelection.applyRange')}\n        </Button>\n      </Grid>\n      </>\n    </Tooltip>\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch\n  };\n};\n\nconst makeMapStateToProps = () => {\n  const selectLoggedInUserOfficeLocation = makeSelectLoggedInUserOfficeLocation();\n  const mapStateToProps = (state) => ({\n    loginUserOfficeLocation: selectLoggedInUserOfficeLocation(state)\n  });\n\n  return mapStateToProps;\n};\n\nexport default compose<React.ComponentClass<IRangeSliderComponentProps>>(\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(RangeSlider);\n\n","import * as React from 'react';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  reduxForm,\n} from 'redux-form/immutable';\nimport {\n  PRODUCT_SELECTION_GROUP_FORM,\n} from '../../modules/ProductModule/constants';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n} from 'redux';\nimport {\n  FormControl,\n  FormControlLabel,\n  Checkbox,\n  Radio,\n  withStyles,\n  WithStyles,\n  FormGroup,\n  ExpansionPanel,\n  ExpansionPanelDetails,\n  ExpansionPanelSummary,\n  Typography,\n  Theme,\n  Grid,\n  TextField,\n  IconButton,\n  WithTheme, Button\n} from '@material-ui/core';\nimport {\n  Map,\n  Set,\n  OrderedSet,\n  List,\n  fromJS,\n  is,\n} from 'immutable';\n\nimport { createStructuredSelector } from 'reselect';\n\nimport {\n  selectSeriesFilters,\n  selectCategorySeries,\n  selectFilteredSeriesFilterAttibutes,\n  IAttributeAndValueMap,\n  makeSelectSeriesFilterInput,\n  makeSelectAttributeWhitelistMapWithSelectedCategoryId,\n  makeSelectAttributeOptions,\n  makeSelectProductCategoryId,\n  makeSelectSkipRuleEngine,\n  makeSelectProductCategory,\n  makeSelectProductCategories,\n  makeSelectEditingProductIndex,\n  makeSelectSeriesSearchOptions,\n  makeSelectCategoryManfacturers\n} from '../../modules/ProductModule/selectors';\n\nimport {\n  FlatPanel,\n} from '../../components';\n\nimport {\n  SeriesFilterAddAction,\n  SeriesFilterRemoveAction,\n  UpdateSeriesFilterInputAction,\n  SeriesFilterToggleAction,\n  GetAttributeOptionsOrderAction,\n  UseActionAndSearchWithFilterAction,\n  SeriesLoadingAction,\n  ProductFilterAddAction,\n  ProductFilterToggleAction,\n  ProductFilterRemoveAction,\n  SetSortSeriesByAction,\n  SetSeriesSearchOptionsAction,\n  GetManufacturersByCategoryIdAction,\n  GetAttributeOrderAction,\n  SearchSeriesWithFilterAction\n} from '../../modules/ProductModule/actions';\n\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ValueLabel, MissingRule, ProductCategory, Filter, Product, AttributeValue, ProductCategoryGroup, Series, Drawing, Manufacturer\n} from '../../models';\nimport withWidth, { isWidthDown, WithWidth } from '@material-ui/core/withWidth';\nimport ProductSelectionGroupDrawingSettings from '../ProductSelectionGroupDrawingSettings';\nimport SearchIcon from '@material-ui/icons/Search';\nimport KeyboardArrowDownRoundedIcon from '@material-ui/icons/KeyboardArrowDownRounded';\nimport AttributeOptions from '../../models/AttributeOptions';\nimport { ValidateDrawingAction } from '../../modules/SpecModule/actions';\nimport { SetOverlayComponentPropsAction, SetTimerStartAction, ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { AtsApiCallAction, SetAppLoadingStatusAction } from '../../modules/AtsModule/actions';\nimport { IModalProps, MODAL_ID } from '../CrossReferenceModal';\nimport ShuffleIcon from '@material-ui/icons/Shuffle';\nimport SpecToolXrefButton from '../../components/SpecToolXrefButton';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { makeSelectDrawing, makeSelectMode, makeSelectSpecOrMasterSpecId } from '../../modules/SpecModule/selectors';\nimport RangeSlider from '../../components/RangeSlider';\nimport { AMPLITUDE_EVENT, Mode } from '../../constants';\nimport { makeSelectLocationForSeriesSearchFilter } from '../../modules/AccountModule/selectors';\nimport {makeSelectIdentityObject} from '../../modules/AtsModule/selectors';\n\ninterface IProductSelectionGroup {\n  filteredSeriesAttributes: Map<string, IMap<IAttributeAndValueMap>>;\n  rawSeries: any;\n  checkedArray: any;\n  dispatch: React.Dispatch<IAction>;\n  seriesFilters: Map<string, Set<any>>;\n  theme: Theme;\n  seriesFilterInput: string;\n  selectedCategoryIdWhiteList:  OrderedSet<string>;\n  getAttributeOptionOrder: (categoryId: number) => void;\n  getAttributeOrderedWhiteList: (categoryId: number) => void;\n  getManufacturersByCategoryId: ({ categoryId, location }: { categoryId: number, location?: Map<string, any> }) => void;\n  attributeOptions: List<IMap<AttributeOptions>>;\n  productCategoryId: number;\n  skipRules: boolean;\n  productCategory: IMap<ProductCategory>;\n  allCategories: List<IMap<ProductCategoryGroup>>;\n  editProductIndex: number;\n  drawing: IMap<Drawing>;\n  selectedSpecId: number;\n  seriesSearchOptions: Map<string, any>;\n  manufacturersByCategory: List<IMap<Manufacturer>>;\n  mode: Mode;\n  searchFilterLocation: any;\n  isGuestUser: boolean;\n}\n\nconst styles = (theme: Theme) => ({\n  drawingSearchContainer: {\n    padding: `0 ${theme.spacing() * 3}px`,\n  },\n  drawingSearchIcon: {\n    marginRight: `${theme.spacing()}px`,\n    color: '#757575',\n  },\n  fullWidth: {\n    width: '100%',\n  },\n  xrefIcon: {\n    fontSize: 24\n  }\n});\n\ntype ProductSelectGroupProps = IProductSelectionGroup\n  & InjectedFormProps\n  & WithStyles<keyof ReturnType<typeof styles>>\n  & WithWidth\n  & WithTheme\n  & WithTranslation;\n\nclass ProductSelectionGroup extends React.Component<ProductSelectGroupProps, {}> {\n\n  public componentDidMount() {\n    const {\n      getAttributeOptionOrder,\n      getAttributeOrderedWhiteList,\n      getManufacturersByCategoryId,\n      productCategoryId,\n      searchFilterLocation,\n      isGuestUser,\n    } = this.props;\n\n    if (productCategoryId !== -1) {\n      getAttributeOptionOrder(productCategoryId);\n      getAttributeOrderedWhiteList(productCategoryId);\n      getManufacturersByCategoryId({ categoryId: productCategoryId, location: isGuestUser ? undefined : searchFilterLocation });\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const {\n      productCategoryId,\n      getManufacturersByCategoryId,\n      getAttributeOptionOrder,\n      getAttributeOrderedWhiteList,\n      seriesFilters,\n      searchFilterLocation,\n      isGuestUser,\n      dispatch\n    } = this.props;\n    if (prevProps.productCategoryId !== productCategoryId && productCategoryId !== -1) {\n      getAttributeOptionOrder(productCategoryId);\n      getAttributeOrderedWhiteList(productCategoryId);\n      getManufacturersByCategoryId({ categoryId: productCategoryId, location: isGuestUser ? undefined : searchFilterLocation });\n    }\n\n    // set timerTracker for amplitude\n    if (seriesFilters !== prevProps.seriesFilters) {\n      const filtersList = seriesFilters.reduce((acc: List<any>, filterSet: Set<IMap<ValueLabel>>) => {\n        return filterSet ? acc.concat(\n          filterSet.map((filterValueLabel: IMap<ValueLabel>) => filterValueLabel.get('label'))\n        ) : acc;\n      }, List());\n      // only triggers when filters applied and also helps prevent from intercepting the page load timer that already triggered\n      if (filtersList.size > 0) {\n        dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageFilter}));\n      }\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new UpdateSeriesFilterInputAction());\n    dispatch(new SetSortSeriesByAction('recommended'));\n  }\n\n  public checked = (key: string, value: any, multi: boolean, label: string) => (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      skipRules,\n    } = this.props;\n\n    const isSelected = (e.target as HTMLInputElement).checked;\n    const attributeOptions = [{key, value, multi, label}];\n\n    dispatch(new SeriesLoadingAction());\n\n    // if its not 'selected', it will add or remove\n    // if its 'selected' and if its 'multi', then it will either 'add' or 'toggle' (toggle adds one filter and removes the other that's there already like Radios)\n    isSelected\n    ? multi\n      ? dispatch(new UseActionAndSearchWithFilterAction({\n          passedAction: {\n            seriesAction: SeriesFilterAddAction,\n            productAction: ProductFilterAddAction\n          },\n          attributeOptions,\n          skipRules,\n        }))\n      : dispatch(new UseActionAndSearchWithFilterAction({\n          passedAction: {\n            seriesAction: SeriesFilterToggleAction,\n            productAction: ProductFilterToggleAction\n          },\n          attributeOptions,\n          skipRules,\n        }))\n    : dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: SeriesFilterRemoveAction,\n          productAction: ProductFilterRemoveAction\n        },\n        attributeOptions,\n        skipRules\n      }));\n\n  }\n\n  public handleCommitRangeSlider = (key: string, label: string, value: any) => {\n    const {\n      dispatch,\n      skipRules,\n    } = this.props;\n    const attributeOptions = [{key, value, multi: false, label }];\n\n    dispatch(new SeriesLoadingAction());\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: SeriesFilterAddAction,\n        productAction: ProductFilterAddAction\n      },\n      attributeOptions,\n      skipRules,\n    }));\n  }\n\n  public onSubmit = (values: any) => {\n    // console.error('submit', { // tslint:disable-line\n    //   values,\n    // });\n  }\n\n  public searchDrawing = () => {\n    const {\n      dispatch,\n      editProductIndex,\n      drawing,\n      selectedSpecId,\n      productCategoryId,\n      seriesSearchOptions,\n      mode\n    } = this.props;\n    // when trigger input search, always reset to first page\n    const newOption = fromJS({limit: seriesSearchOptions.get('limit'), offset: 0});\n    dispatch(new SetSeriesSearchOptionsAction({option: newOption}));\n\n    dispatch(new SeriesLoadingAction());\n    // set timerTracker for amplitude\n    dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageFilter}));\n\n    // if on browsing mode, no need to validate, just search with filter\n    if (mode === Mode.productCatalogue) {\n      dispatch(new SearchSeriesWithFilterAction());\n    } else {\n      const products = drawing && drawing.get('products');\n      const useAccessibilityStandard = drawing && drawing.get('useAccessibilityStandard');\n\n      const productsBeforeCurrent = editProductIndex !== -1 ? products.slice(0, editProductIndex) : products;\n      const currentProduct = editProductIndex !== -1 ? products.get(editProductIndex) : null;\n\n      // if there's no 'currentProduct' than that means the user is on a drawing with no selected products\n      // so we need to pass a fake 'wantCategory' map which contains the categoryId that will be used by the rules\n      // in ValidateDrawingAction\n      const category = currentProduct\n        ? Product.getCategoryFromProduct(currentProduct)\n        : fromJS({\n          id: productCategoryId,\n          name: 'wantCategory'\n        });\n\n      dispatch(new ValidateDrawingAction({\n        specId: selectedSpecId,\n        products: productsBeforeCurrent,\n        useAccessibilityStandard,\n        category,\n      }));\n    }\n  }\n\n  public render () {\n    const {\n      rawSeries,\n      seriesFilters,\n      width,\n      classes,\n      handleSubmit,\n      dispatch,\n      seriesFilterInput,\n      attributeOptions,\n      theme,\n      allCategories,\n      manufacturersByCategory,\n      t,\n      isGuestUser\n    } = this.props;\n\n    const staticManufacturersNameList = manufacturersByCategory.reduce((acc, manufacturer) => {\n      return manufacturer.get('value') ? acc.push(manufacturer.get('value')) : acc;\n    }, List());\n\n    // sort brand alphabetically\n    const brand = staticManufacturersNameList.sort((a, b) => {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    }) || List();\n\n    // const orderedWhitelist = selectedCategoryIdWhiteList != null && !selectedCategoryIdWhiteList.isEmpty()\n    // ? selectedCategoryIdWhiteList\n    // : filteredSeriesAttributes != null\n    //   ? filteredSeriesAttributes.keySeq().toOrderedSet()\n    //   : null;\n\n    // filter out 'use' attribute, we already have them as switch button\n    const filteredAttributesOptions = attributeOptions?.filter(attributeOption => attributeOption.get('value') !== 'use');\n\n    const filterCollapsePanels = <form\n      onSubmit={handleSubmit(this.onSubmit)}\n      className={classes.fullWidth}\n    >\n      <FormControl\n        fullWidth={true}\n      >\n        { isGuestUser ? null : <ProductSelectionGroupDrawingSettings />}\n        <Grid\n          container={true}\n          direction='row'\n          wrap='nowrap'\n          alignItems='flex-end'\n          className={classes.drawingSearchContainer}\n        >\n          <TextField\n            name='seriesInputSearch'\n            label={t('placeholders.SeriesInputSearch')}\n            InputProps={{\n              style: {\n                marginTop: theme.spacing(2.25), // pixel pushing to stop textfield line from cutting into label at certain breakpoints... -_-\n              }\n            }}\n            value={seriesFilterInput}\n            onKeyDown={(e) => {\n              if (e.key === 'Enter') {\n                this.searchDrawing();\n              }\n            }}\n            onChange={(e) => {\n              dispatch(new UpdateSeriesFilterInputAction(e.target.value));\n            }}\n          />\n          <Grid\n            className={classes.drawingSearchIcon}\n            item={true}\n          >\n            <IconButton\n              size='small'\n              onClick={this.searchDrawing}\n            >\n              <SearchIcon fontSize='small' />\n            </IconButton>\n          </Grid>\n          {\n            isGuestUser ? null : <SpecToolXrefButton\n                searchTerm={seriesFilterInput}\n                allCategories={allCategories}\n            >\n              {\n                <IconButton\n                    size='small'\n                >\n                  <ShuffleIcon className={classes.xrefIcon} />\n                </IconButton>\n              }\n            </SpecToolXrefButton>\n          }\n        </Grid>\n        <FlatPanel\n          title={t('ProductStep.manufacturer')}\n          key='_manufacturer_'\n          defaultExpanded={true}\n        >\n          <FormGroup>\n            {\n              brand && brand.map((brandName: any) => {\n                const key = 'manufacturer';\n                const value = brandName;\n                const seriesFiltersManufacturer: List<IMap<ValueLabel>> = seriesFilters.get('manufacturer', Set()).toList();\n                const selectedManufacturerValuesList = seriesFiltersManufacturer.reduce((acc: List<string>, manufacturerFilterValue: IMap<ValueLabel>) => {\n                  const manufacturerInFilterValue = manufacturerFilterValue.get('value', '');\n                  return acc.push(manufacturerInFilterValue);\n                }, List());\n                const checked = selectedManufacturerValuesList.includes(value);\n\n                const controlProps = {\n                  color: 'primary' as 'primary',\n                  value,\n                  onClick: this.checked(key, value, true, value),\n                  checked,\n                };\n                return <FormControlLabel\n                  key={value}\n                  control={\n                    <Checkbox\n                      {...controlProps}\n                    />\n                  }\n                  label={value}\n                />;\n              })\n            }\n          </FormGroup>\n        </FlatPanel>\n        {\n          filteredAttributesOptions != null\n          ? filteredAttributesOptions.map(\n            (attributeOption: IMap<AttributeOptions>, index: number) => {\n              const optionTitleLabel = attributeOption.get('label');\n              const values = attributeOption.get('values');\n              const key = attributeOption.get('value');\n\n              // for range slider filter\n              const valuesWithoutPlaceholder = values.filter(x => x.get('label') !== 'placeholder');\n              const rangeFilterValues = valuesWithoutPlaceholder.filter(x => x.getIn(['meta','isRange']));\n              const radioButtonFilterValues = valuesWithoutPlaceholder.filter(x => !x.getIn(['meta','isRange']));\n              const appliedFilterValues = seriesFilters.reduce((acc, filter, filterKey) => {\n                // filters on the left are SUPPOSE to be either radio or range and only accept 1 in the set. if it ever changes, then we can't use first()\n                // if business requirements change, FE logic need to change a bit as well\n                const valueMap = filter?.first();\n                if (!valueMap) {\n                  return acc;\n                }\n                const valueInFilter = valueMap.get('value');\n                return acc.set(filterKey, valueInFilter);\n              }, Map({}));\n              const appliedKeyFilterValue = appliedFilterValues.get(key);\n              const lowerBoundFilter = rangeFilterValues.getIn([0, 'value', 0]);\n              const upperBoundFilter = rangeFilterValues.getIn([0, 'value', 1]);\n              const isRangeFilterDisabled = (!lowerBoundFilter && lowerBoundFilter !== 0) || (!upperBoundFilter && upperBoundFilter !== 0);\n\n              return (\n\n                <FlatPanel\n                  key={index + optionTitleLabel}\n                  title={optionTitleLabel}\n                >\n                  <Grid container={true} direction='column'>\n                  { rangeFilterValues.size > 0 &&\n                    <Grid style={{marginTop: theme.spacing(3), marginBottom: theme.spacing(5), width: '100%'}}>\n                      <RangeSlider\n                        rangeFilterValues={rangeFilterValues}\n                        appliedFilterValue={appliedKeyFilterValue}\n                        handleChangeCommitted={(val) => this.handleCommitRangeSlider(key, optionTitleLabel, val)}\n                        disabled={isRangeFilterDisabled}\n                        />\n                    </Grid>\n                  }\n                  { radioButtonFilterValues.size > 0 &&\n                    <FormGroup>\n                      {\n                        radioButtonFilterValues.map((valueObject: IMap<ValueLabel>, valueObjectIndex: number) => {\n                          // const multi = attribute.get('isOption');\n                          const value = valueObject.get('value');\n                          const label = valueObject.get('label');\n\n                          const checked = appliedKeyFilterValue === value;\n                          // const ControlComponent = multi ? Checkbox : Radio;\n                          const controlProps = {\n                            color: 'primary' as 'primary',\n                            value,\n                            onClick: this.checked(key, value, false, label),\n                            checked,\n                          };\n\n                          return <FormControlLabel\n                          control={\n                            // SHOULD be all radios from now on. might need to change because filters are still being worked on by Data and BE. and then will need to go by the business\n                            <Radio\n                              {...controlProps}\n                            />\n                          }\n                          key={valueObjectIndex + valueObject.get('value')  + valueObject.get('label')}\n                          label={label}\n                          />;\n                        }).valueSeq()\n                      }\n                    </FormGroup>\n                  }\n                  </Grid>\n                </FlatPanel>\n              );\n            }\n          ).valueSeq().filter((el) => el != null)\n          : null\n        }\n      </FormControl>\n    </form>;\n\n    return (\n      <>\n        {\n          isWidthDown('md', width)\n          ? <ExpansionPanel className={classes.fullWidth}>\n              <ExpansionPanelSummary expandIcon={<KeyboardArrowDownRoundedIcon />} >\n                <Typography>{t('ProductSelection.seriesFilters')}</Typography>\n              </ExpansionPanelSummary>\n              <ExpansionPanelDetails>\n                  {filterCollapsePanels}\n              </ExpansionPanelDetails>\n            </ExpansionPanel>\n          : filterCollapsePanels\n        }\n      </>\n\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getAttributeOptionOrder: (categoryId: number) => {\n      dispatch(new GetAttributeOptionsOrderAction({categoryId}));\n    },\n    getAttributeOrderedWhiteList: (categoryId: number) => {\n      dispatch(new GetAttributeOrderAction({categoryId}));\n    },\n    getManufacturersByCategoryId: ({ categoryId, location }: { categoryId: number, location?: Map<string, any> }) => {\n      dispatch(new GetManufacturersByCategoryIdAction({\n        categoryId,\n        considerAppId: true,\n        location,\n      }));\n    }\n  };\n};\nconst mapStateToProps = (state) => {\n  const isGuestUser = !makeSelectIdentityObject()(state);\n  return ({\n    isGuestUser,\n    ...createStructuredSelector({\n      filteredSeriesAttributes: selectFilteredSeriesFilterAttibutes(),\n      rawSeries: selectCategorySeries(),\n      seriesFilters: selectSeriesFilters(),\n      seriesFilterInput: makeSelectSeriesFilterInput(),\n      selectedCategoryIdWhiteList: makeSelectAttributeWhitelistMapWithSelectedCategoryId(),\n      attributeOptions: makeSelectAttributeOptions(),\n      productCategoryId: makeSelectProductCategoryId(),\n      skipRules: makeSelectSkipRuleEngine(),\n      productCategory: makeSelectProductCategory(),\n      allCategories: makeSelectProductCategories(),\n      editProductIndex: makeSelectEditingProductIndex(),\n      drawing: makeSelectDrawing(),\n      selectedSpecId: makeSelectSpecOrMasterSpecId(),\n      seriesSearchOptions: makeSelectSeriesSearchOptions(),\n      manufacturersByCategory: makeSelectCategoryManfacturers(),\n      mode: makeSelectMode(),\n      searchFilterLocation: makeSelectLocationForSeriesSearchFilter(),\n    })(state)\n  });\n};\n\nexport default compose<React.ComponentClass<{}>>(\n  withStyles(styles, { withTheme: true }),\n  withWidth(),\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: PRODUCT_SELECTION_GROUP_FORM,\n  }),\n  withTranslation('translations'),\n)(ProductSelectionGroup);","import React, {\n  useMemo\n} from 'react';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport SeriesPanel from '../Expansion/SeriesPanel';\nimport {\n  makeStyles,\n  ThemeProvider\n} from '@material-ui/core/styles';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Paper from '@material-ui/core/Paper';\nimport {\n  createMuiTheme,\n  createStyles,\n  IconButton,\n  Theme,\n  useTheme,\n} from '@material-ui/core';\nimport {\n  connect,\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  makeSelectSelectedSeriesId,\n  makeSelectSeriesListHasNextPage,\n  makeSelectSeriesSearchOptions,\n  selectFilteredSeries\n} from '../../modules/ProductModule/selectors';\nimport useDidMountEffect from '../../hooks/useDidMountEffect';\nimport {\n  KeyboardArrowLeft,\n  KeyboardArrowRight\n} from '@material-ui/icons';\nimport { TablePaginationActionsProps } from '@material-ui/core/TablePagination/TablePaginationActions';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { SeriesLoadingAction, SetSeriesSearchOptionsAction, UseActionAndSearchWithFilterAction } from '../../modules/ProductModule/actions';\nimport { fromJS, List } from 'immutable';\nimport { compose } from 'redux';\nimport { IAction, IMap } from 'ats-utils/src';\nimport { Series } from '../../models';\nimport { makeSelectIsSpecTool } from '../../modules/AtsModule/selectors';\nimport { useAtsApi } from '../../contexts/AtsApiContext';\nimport { makeSelectBrandsToHidePrice } from '../../modules/PimModule/selectors';\nimport { GetManufacturerPriceInvisibilitySucceededAction } from '../../modules/PimModule/actions';\n\ninterface IProductViewComponentProps {\n  specType: string;\n  skipRules: boolean;\n}\n\ninterface IProductViewProps extends IProductViewComponentProps {\n  selectedSeriesId: number;\n  seriesHasNextPage: boolean;\n  seriesSearchOptions: Map<string, any>;\n  filteredSeries: List<IMap<Series>>;\n  dispatch: React.Dispatch<IAction>;\n  updateOptionAndSearch: (newOption) => void;\n}\n\ntype ProductViewProps = IProductViewProps & WithTranslation;\n\nconst tableTheme = createMuiTheme({\n  overrides: {\n    MuiTablePagination: {\n      spacer: {\n        flex: 'none'\n      }\n    }\n  }\n});\n\nconst useStyles1 = makeStyles((theme: Theme) =>\n  createStyles({\n    root: {\n      flexShrink: 0,\n      marginLeft: theme.spacing(2.5),\n    },\n  }),\n);\nfunction TablePaginationActions(props: TablePaginationActionsProps) {\n  const classes = useStyles1();\n  const theme = useTheme();\n  const { count, page, rowsPerPage, onChangePage } = props;\n\n  const handleBackButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    onChangePage(event, page - 1);\n  };\n\n  const handleNextButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    onChangePage(event, page + 1);\n  };\n\n  return (\n    <div className={classes.root}>\n      <IconButton onClick={handleBackButtonClick} disabled={page === 0} aria-label='previous page'>\n        {theme.direction === 'rtl' ? <KeyboardArrowRight /> : <KeyboardArrowLeft />}\n      </IconButton>\n      <IconButton\n        onClick={handleNextButtonClick}\n        disabled={page >= Math.ceil(count / rowsPerPage) - 1}\n        aria-label='next page'\n      >\n        {theme.direction === 'rtl' ? <KeyboardArrowLeft /> : <KeyboardArrowRight />}\n      </IconButton>\n    </div>\n  );\n}\nconst ProductView: React.FC<ProductViewProps> = ({ specType, selectedSeriesId, seriesHasNextPage, seriesSearchOptions, filteredSeries, updateOptionAndSearch, t }) => {\n  const atsApi = useAtsApi();\n  const dispatch = useDispatch();\n  const isSpecTool = useSelector(makeSelectIsSpecTool());\n  const brandsToHidePrice = useSelector(makeSelectBrandsToHidePrice());\n\n  React.useEffect(() => {\n    if (brandsToHidePrice === null && isSpecTool) {\n      (atsApi.callApi({\n        service: 'pim',\n        endpoint: 'getManufacturerPriceInvisibility',\n      }) as any).then(res => {\n        const manufacturers = res?.payload?.pim?.manufacturer;\n        if (manufacturers) {\n          dispatch(new GetManufacturerPriceInvisibilitySucceededAction({\n            brandsToHidePrice: manufacturers.reduce((acc, brand) => {\n              return acc.set(brand.id, 1);\n            }, fromJS({}))\n          }));\n        }\n      }).catch((err) => {\n        // prices simply stay visible; do not surface an unhandled rejection\n        console.warn('Unable to load the manufacturer price visibility.', err); // tslint:disable-line\n      });\n    }\n  }, []);\n\n  const selectedSeriesIndex: number = filteredSeries.map(serie => serie.get('id')).indexOf(selectedSeriesId);\n  const rowsPerPage = seriesSearchOptions.get('limit');\n  const page = seriesSearchOptions.get('offset') / rowsPerPage;\n\n  const handleChangePage = (event: unknown, newPage: number) => {\n    const newOption = seriesSearchOptions.set('offset', newPage * rowsPerPage);\n    updateOptionAndSearch(newOption);\n  };\n\n  const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n    const newOption = fromJS({limit: +event.target.value, offset: 0 });\n    updateOptionAndSearch(newOption);\n  };\n  return (\n    <Paper>\n      <TableContainer style={{overflowX: 'hidden'}}>\n        <Table style={{display: 'block'}}>\n          <TableBody style={{display: 'block'}}>\n            {filteredSeries && filteredSeries.map((serie,index) => {\n              return (\n                <tr key={index} style={{display: 'block'}}>\n                  <td style={{padding: '1px 0px 0px', display: 'block'}}>\n                    <SeriesPanel\n                      key={serie.get('id')}\n                      specType={specType}\n                      series={serie}\n                      expanded={serie.get('id') === selectedSeriesId}\n                    />\n                  </td>\n                </tr>\n                );\n            })}\n          </TableBody>\n        </Table>\n      </TableContainer>\n      <ThemeProvider theme={tableTheme}>\n        <TablePagination\n          labelRowsPerPage={t('Pagination.rowsPerPage')}\n          labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n          rowsPerPageOptions={[10, 25, 100]}\n          component='div'\n          count={seriesHasNextPage ? seriesSearchOptions.get('offset') + rowsPerPage + 1 : seriesSearchOptions.get('offset') + filteredSeries?.size}\n          rowsPerPage={rowsPerPage}\n          page={page}\n          onChangePage={handleChangePage}\n          onChangeRowsPerPage={handleChangeRowsPerPage}\n          ActionsComponent={TablePaginationActions}\n        />\n      </ThemeProvider>\n    </Paper>\n  );\n};\n\nconst makeMapStateToProps = () => {\n  const selectedSeriesIdSelector = makeSelectSelectedSeriesId();\n  const seriesHasNextPageSelector = makeSelectSeriesListHasNextPage();\n  const seriesSearchOptionsSelector = makeSelectSeriesSearchOptions();\n  const filteredSeriesSelector = selectFilteredSeries();\n  return (state) => {\n    return {\n      selectedSeriesId: selectedSeriesIdSelector(state),\n      seriesHasNextPage: seriesHasNextPageSelector(state),\n      seriesSearchOptions: seriesSearchOptionsSelector(state),\n      filteredSeries: filteredSeriesSelector(state)\n    };\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>, ownProps) => {\n  const {skipRules} = ownProps;\n  return {\n    dispatch,\n    updateOptionAndSearch: (newOption) => {\n      dispatch(new SetSeriesSearchOptionsAction({option: newOption}));\n      dispatch(new SeriesLoadingAction());\n      dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: null,\n          productAction: null\n        },\n        skipRules,\n      }));\n    }\n  };\n};\nexport default compose<React.FC<IProductViewComponentProps>>(\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps),\n)(ProductView);\n","import React, {\n  useMemo\n} from 'react';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  makeSelectSearchTerm,\n  makeSelectSeriesLoading,\n  makeSelectSkipRuleEngine,\n  makeSelectSortSeriesBy,\n  selectFilteredSeries,\n} from '../../modules/ProductModule/selectors';\nimport {\n  createMuiTheme,\n  LinearProgress,\n  Theme,\n  Typography,\n  useTheme,\n  Grid,\n  WithStyles,\n  withStyles,\n  MenuItem,\n  FormControl,\n  InputLabel,\n  Select,\n  Link,\n} from '@material-ui/core';\nimport {\n  makeSelectDrawingRules,\n  makeSelectUpdatingRules\n} from '../../modules/SpecModule/selectors';\nimport { ReactComponent as LoadingFile } from '../../images/expansion/loadingFile.svg';\nimport NotFound from '../../components/NotFound';\nimport { Trans, useTranslation } from 'react-i18next';\nimport EmptyView from '../../components/EmptyView';\nimport {\n  AtsSvgDrawingCompleted,\n  AtsSvgEmptyProductList\n} from '../../components/AtsSvg';\nimport { push } from 'connected-react-router';\nimport { PRODUCT_CATEGORY_PATH } from '../../constants';\nimport { AutoSetDrawingNameAction, SelectDrawingAndRedirectAction } from '../../modules/SpecModule/actions';\nimport ProductView from './ProductView';\nimport { ProductFilterAddAction, SearchSeriesWithFilterAction, SeriesFilterAddAction, SeriesLoadingAction, SetSortSeriesByAction, UseActionAndSearchWithFilterAction } from '../../modules/ProductModule/actions';\nimport { makeSelectIdentityObject } from '../../modules/AtsModule/selectors';\nimport { ToggleOverlayComponentAction } from '../../modules/ApplicationModule/actions';\nimport { GUEST_LOGIN_MODAL } from '../../components/GuestLoginModal';\n\ninterface IProps {\n  specType: string;\n}\n\nconst overRideTheme = createMuiTheme();\nconst overRideLoadingStyles = (theme: Theme) => ({\n  imageContainer: {\n    margin: 0\n  },\n  noGrow: true\n});\n\nconst overRideEmptyStyles = (theme: Theme) => ({\n  logo: {\n    width: '100%',\n    margin: 0,\n  },\n  noGrow: true,\n});\n\nconst styles = (theme: Theme) => ({\n  root: {\n    padding: `0 ${theme.spacing()}px 0`\n  },\n  paddingLeft: {\n    paddingLeft: theme.spacing(2),\n  }\n});\n\ntype CollapsibleTableProps = IProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst CollapsibleTable: React.FC<CollapsibleTableProps> = ({\n  specType,\n  classes,\n}) => {\n  const dispatch = useDispatch();\n  const theme = useTheme();\n\n  const seriesLoadingSelector = useMemo(makeSelectSeriesLoading, []);\n  const updatingRulesSelector = useMemo(makeSelectUpdatingRules, []);\n  const searchTermSelector = useMemo(makeSelectSearchTerm, []);\n  const drawingRulesSelector = useMemo(makeSelectDrawingRules, []);\n  const filteredSeriesSelector = useMemo(selectFilteredSeries, []);\n  const sortSeriesBySelector = useMemo(makeSelectSortSeriesBy, []);\n  const skipRulesEngineSelector = useMemo(makeSelectSkipRuleEngine, []);\n  const isRegisteredUserSelector = useMemo(makeSelectIdentityObject, []);\n\n  const { t } = useTranslation('translations');\n  const seriesLoading = useSelector(seriesLoadingSelector);\n  const updatingRules = useSelector(updatingRulesSelector);\n  const searchTerm = useSelector(searchTermSelector);\n  const drawingRules = useSelector(drawingRulesSelector);\n  const filteredSeries = useSelector(filteredSeriesSelector);\n  const sortSeriesBy = useSelector(sortSeriesBySelector);\n  const skipRules = useSelector(skipRulesEngineSelector);\n  const isGuestUser = !useSelector(isRegisteredUserSelector);\n\n  const loadingContent = seriesLoading || updatingRules;\n\n  React.useEffect(() => {\n    dispatch(new SetSortSeriesByAction('recommended'));\n  }, []);\n\n  const goToCategory = () => {\n    dispatch(push(PRODUCT_CATEGORY_PATH));\n  };\n\n  const goToNewDrawing = () => {\n    dispatch(new AutoSetDrawingNameAction({ setAndStartNewDrawing: true }));\n  };\n\n  const handleSortingSelect = (e) => {\n    const sortType = e.target.value;\n    dispatch(new SetSortSeriesByAction(sortType));\n    dispatch(new SeriesLoadingAction());\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: null,\n        productAction: null\n      },\n      skipRules,\n    }));\n  };\n\n  const openSignUpDialog = (e) => {\n    e.preventDefault();\n    dispatch(new ToggleOverlayComponentAction({\n      open: true,\n      id: GUEST_LOGIN_MODAL\n    }));\n  };\n\n  const seriesCountDisplay = () => {\n    return loadingContent\n      ? <Typography className={classes.paddingLeft}>{t('generalLoading.loading')}</Typography>\n      : (\n        <Grid\n          container={true}\n          justify={isGuestUser ? 'space-between' : 'flex-end'}\n          alignItems='center'\n          wrap='nowrap'\n          style={{ marginBottom: theme.spacing() }}\n        >\n          {\n            isGuestUser && (\n              <Typography\n                variant='body1'\n                style={{ padding: theme.spacing(0, 5, 0 , 2) }}\n              >\n                <Trans\n                  t={t}\n                  i18nKey={'ProductCategorySelection.availableCategoriesSubText'}\n                  components={[\n                      <Link key={'signUp'} variant='body2' component='button' style={{ textDecoration: 'underline' }} onClick={openSignUpDialog} />\n                  ]}\n              />\n              </Typography>\n            )\n          }\n          <Grid>\n            <FormControl style={{flexDirection: 'row', alignItems: 'center'}} size='small'>\n              <Typography noWrap={true}>{t('ProductSelection.sortBy')}:</Typography>\n              <Select\n                onChange={handleSortingSelect}\n                value={sortSeriesBy}\n                variant='outlined'\n                inputProps={{\n                  name: 'sortBy'\n                }}\n                SelectDisplayProps={{\n                  style: {\n                    paddingTop: '4px',\n                    paddingBottom: '4px'\n                  }\n                }}\n                style={{\n                  marginLeft: 8\n                }}\n              >\n                <MenuItem value='recommended'>{t('ProductSelection.recommended')}</MenuItem>\n                <MenuItem value='mostSpecified'>{t('ProductSelection.mostSpecified')}</MenuItem>\n                <MenuItem value='mostRecent'>{t('ProductSelection.mostRecent')}</MenuItem>\n                <MenuItem value='priceHighToLow'>{t('ProductSelection.seriesPriceHighToLow')}</MenuItem>\n                <MenuItem value='priceLowToHigh'>{t('ProductSelection.seriesPriceLowToHigh')}</MenuItem>\n              </Select>\n            </FormControl>\n          </Grid>\n        </Grid>\n      );\n  };\n\n  const userSearch = searchTerm ? `for \"${searchTerm}\"` : '';\n  const labels = {\n    emptyviewSubtitle: `${t('Expansion.emptyviewSubtitle')} ${userSearch}`,\n    emptyviewAddButton: t('Expansion.emptyviewAddButton'),\n    emptyviewAlt: t('Expansion.emptyviewAlt'),\n    emptyviewNotFound: t('Expansion.emptyviewNotFound')\n  };\n\n  const completeLabels = {\n    completeviewSubtitle: `${t('Expansion.completeviewSubtitle')}`,\n    completeviewAddButton: t('Expansion.completeviewAddButton'),\n    completeviewAlt: t('Expansion.completeviewAlt'),\n    completeviewNotFound: t('Expansion.completeviewNotFound')\n  };\n\n  if (loadingContent) {\n    return (\n      <NotFound\n        firstRow={<LinearProgress color='secondary' />}\n        secondRow={<Typography variant='h4'>{t('generalLoading.loading')}</Typography>}\n        paperContainer={true}\n        svgIcon={<LoadingFile />}\n        overRideStyles={overRideLoadingStyles(overRideTheme)}\n      />\n    );\n  }\n   if (drawingRules && drawingRules.get('missing').size === 0 && drawingRules.get('scores').size !== 0) {\n      return(\n        <EmptyView\n          svg={\n            <AtsSvgDrawingCompleted\n              color={{\n                backgroundColor: theme.palette.primary[200],\n                clip: theme.palette.primary[100],\n                board: theme.palette.primary[800],\n                content: theme.palette.primary[600],\n                checkMark: theme.palette.primary[700]\n              }}\n            />\n          }\n          onButtonClicked={goToNewDrawing}\n          emptyviewSubtitle={completeLabels.completeviewSubtitle}\n          emptyviewAddButton={completeLabels.completeviewAddButton}\n          emptyviewAddButtonProps={{ variant: isGuestUser ? 'outlined' : 'contained' }}\n          emptyviewAlt={completeLabels.completeviewAlt}\n          emptyviewNotFound={completeLabels.completeviewNotFound}\n          overRideStyles={overRideEmptyStyles(overRideTheme)}\n        />\n        );\n    }\n  if (filteredSeries.count() === 0 || drawingRules && drawingRules.get('missing').size === 0) {\n    return (\n      <EmptyView\n        svg={\n          <AtsSvgEmptyProductList\n            color={{\n              surfaceA: theme.palette.primary[400],\n              surfaceB: theme.palette.primary[600],\n              surfaceC: theme.palette.primary[800],\n              surfaceD: theme.palette.primary[900],\n            }}\n          />\n        }\n        onButtonClicked={goToCategory}\n        emptyviewSubtitle={labels.emptyviewSubtitle}\n        emptyviewAddButton={labels.emptyviewAddButton}\n        emptyviewAlt={labels.emptyviewAlt}\n        emptyviewNotFound={labels.emptyviewNotFound}\n        overRideStyles={overRideEmptyStyles(overRideTheme)}\n      />\n    );\n  }\n\n  return (\n    <Grid\n      className={classes.root}\n    >\n      {seriesCountDisplay()}\n      <ProductView specType={specType} skipRules={skipRules}/>\n    </Grid>\n  );\n};\n\nexport default withStyles(styles)(CollapsibleTable);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  WithStyles,\n  withStyles,\n  Grid,\n  Typography,\n  Button,\n  Chip,\n  Divider,\n  Theme, Checkbox,\n} from '@material-ui/core';\nimport {\n  CATEGORY_SPECIFIC_SERIES_FILTER_LABEL_KEYS,\n  CategorySpecificSeriesFilterKey,\n  PRODUCT_SELECTION_GROUP_FORM,\n} from '../../modules/ProductModule/constants';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  compose,\n} from 'redux';\nimport {\n  IAction,\n  IMap,\n  IMatch,\n} from 'ats-utils/src/Interfaces';\nimport ProductSelectionGroup from '../../containers/ProductSelectionGroup';\nimport {\n  InjectedFormProps,\n} from 'redux-form';\nimport {\n  getFormValues,\n} from 'redux-form/immutable';\nimport {\n  Map,\n  List,\n  Set,\n  getIn,\n  fromJS,\n} from 'immutable';\nimport {\n  reduxForm,\n} from 'redux-form/immutable';;\nimport {\n  makeSelectSpec,\n  makeSelectSelectedSpecId,\n  makeSelectDrawingRules, makeSelectMode, makeSelectSelectedMasterSpecId, makeSelectSelectedTemplateSpecId,\n  makeSelectTemplateProjectSpec,\n  makeSelectMasterProjectspec,\n} from '../../modules/SpecModule/selectors';\nimport {\n  selectSeriesFilters,\n  makeSelectSkipRuleEngine,\n  makeSelectProductCategory,\n  makeSelectHideDiscontinuedSeries,\n  makeSelectSeriesSearchOptions,\n  makeSelectShowDraftSeriesOnly,\n  makeSelectCategorySpecificSeriesFilters\n} from '../../modules/ProductModule/selectors';\nimport {\n  SelectDrawingAction,\n  DeleteDrawingAction,\n  UpdateSpecAction,\n  ClearDrawingRulesAction,\n  SetModeAction,\n  SetSelectedSpecIdAction,\n} from '../../modules/SpecModule/actions';\nimport {\n  SeriesFilterClearAction,\n  UseActionAndSearchWithFilterAction,\n  SeriesFilterRemoveAction,\n  SeriesLoadingAction,\n  ProductFilterClearAction,\n  ProductFilterRemoveAction,\n  SeriesSpecificFilterClearAllAction,\n  SelectSeriesAction,\n  GetAttributeOrderAction,\n  SetHideDiscontinuedSeriesAction,\n  SetSeriesSearchOptionsAction,\n  SetShowDraftSeriesOnlyAction,\n  ResetMatchingProductsAction,\n  SelectCategoryAction,\n  SelectNewCategoryAction,\n  SkipRuleEngineAction,\n  GetSeriesAndAddSeriesSpecificFiltersAction,\n  GetProductCategoriesAction,\n  SeriesLoadingFinishedAction,\n  SelectProductForConfiguratorAction,\n  RemoveCategorySpecificSeriesFilterAction,\n  SetCategorySpecificSeriesFiltersAction,\n  SetSeriesSpecificInitSelectionsAction,\n  ResetSeriesSpecificInitDisabledSelectionsAction,\n} from '../../modules/ProductModule/actions';\nimport styled from 'styled-components';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  Spec,\n  Drawing,\n  ValueLabel,\n  ProductCategory,\n  MissingRule,\n  Address,\n} from '../../models';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport ProductSelectionControl from '../../containers/ProductSelectionControl';\n\nimport {\n  SPEC_DETAIL_PATH,\n  PRODUCT_CATEGORY_PATH,\n  PROJECT_DETAIL_PATH, Mode,\n  GUEST_USER_LOCATION_FILTER,\n  AMPLITUDE_EVENT,\n  ATS_EVENT,\n} from '../../constants';\nimport {\n  makeSelectLocationPathname,\n} from '../../modules/RouterModule/selectors';\nimport { push } from 'connected-react-router';\n\nimport {\n  withSpecId,\n  WithSpecId,\n} from '../../hoc';\nimport {makeSelectSelectedProjectId, makeSelectSelectedTemplateProjectId} from '../../modules/ProjectModule/selectors';\nimport ProductTable from './ProductTable';\nimport { makeSelectScrollNode } from '../../modules/ApplicationModule/selectors';\nimport AlternativesModal from '../AlternativesModal';\nimport AddProductToDrawingModal from '../AddProductToDrawingModal';\nimport { makeSelectIdentityObject, makeSelectUserHasMasterTemplate, makeSelectUserIsAtsUser, makeSelectUseUnavailabilityPurchasabilityQuery } from '../../modules/AtsModule/selectors';\nimport { IWithAtsApi, withAtsApi } from '../../contexts/AtsApiContext';\nimport { SetTimerStartAction } from '../../modules/ApplicationModule/actions';\nimport { parseQueryString } from 'ats-utils/src';\nimport { makeSelectLocationForSeriesSearchFilter } from '../../modules/AccountModule/selectors';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { CreateAnalyticsEventsAction } from '../../modules/PrintModule/actions';\n\ninterface IProductSelection {\n  dispatch: (action: any) => void;\n  getAttributeOrderedWhiteList: (categoryId: number) => void;\n  updateHideDiscontinuedAndSearchSeries: (checked: boolean, seriesSearchOptions: Map<string, any>, skipRules: boolean) => void;\n  updateShowDraftOnlyAndSearchSeries: (checked: boolean, seriesSearchOptions: Map<string, any>, skipRules: boolean) => void;\n  classes: any;\n  allowMulti: boolean;\n  makeSelectSpecDrawing: IMap<Drawing>;\n  selectedSpec: IMap<Spec>;\n  seriesFilters: Map<string, Set<IMap<ValueLabel>>>;\n  categorySpecificSeriesFilters: Map<string, any>;\n  searchedValue: any;\n  selectedSpecId: number;\n  selectedProjectId: number;\n  drawingRule: any;\n  missing: List<any>;\n  skipRules: boolean;\n  specType: string;\n  productCategory: IMap<ProductCategory>;\n  scrollNode: React.RefObject<any>;\n  isHideDiscontinuedSeries: boolean;\n  seriesSearchOptions: Map<string, any>;\n  mode: Mode;\n  isShowDraftSeriesOnly: boolean;\n  hasMasterTemplateRole: boolean;\n  userIsAtsUser: boolean;\n  isGuestUser: boolean;\n  pathname: string;\n  match: IMatch;\n  specOrOfficeLocationForFilter: IMap<Address>;\n  useUnavailabilityPurchasabilityQuery: any;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  spaceContainer: {\n    display: 'flex',\n    flexGrow: 1\n  },\n  innerContainer: {\n    flexGrow: 1,\n  },\n  dividerMargin: {\n    margin: `${theme.spacing() * 1.}px 0`,\n  },\n  specificationIcon: {\n    margin: `0 ${theme.spacing()}px`,\n  },\n  specificationBtn: {\n    margin: `0 ${theme.spacing()}px`,\n  },\n  specificationBtnColor: {\n    margin: `0 ${theme.spacing()}px`,\n    color: theme.palette.primary.main,\n  },\n  resetButton: {\n\n  },\n  sortBySelect: {\n    width: '100px',\n  },\n  buttonText: {\n    fontSize: 15\n  },\n  chip: {\n    borderRadius: theme.shape.borderRadius,\n    margin: theme.spacing(),\n    height: 'auto',\n    padding: `${theme.spacing(.5)}px 0`,\n    whiteSpace: 'normal',\n  },\n  chipWrap: {\n    whiteSpace: 'normal',\n  },\n  paddingLeft: {\n    paddingLeft: theme.spacing(3),\n  }\n});\n\nconst ReactBeautifulDndAnchor = styled.div`\n  position: absolute;\n  pointer-events: none;\n  height: 100%;\n  width: 100%;\n`;\nconst DRAGGABLE_ANCHOR_ID = '__DRAGGABLE_ANCHOR_ID__';\ntype ProductSelectionProps = WithSpecId & IProductSelection & IWithAtsApi & WithTranslation & WithAmplitudeData & WithStyles<keyof ReturnType<typeof styles>> & InjectedFormProps<{}, {}>;\nclass ProductSelection extends React.Component<ProductSelectionProps, {}> {\n  public state = {\n    drawingNameFilter: '',\n    productSelectionControlGroup: true,\n    haveInitializedWithInitData: false,\n  };\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      getAttributeOrderedWhiteList,\n      productCategory,\n      scrollNode,\n      selectedSpec,\n      isGuestUser,\n      specOrOfficeLocationForFilter,\n    } = this.props;\n\n    if (!this.state.haveInitializedWithInitData && (isGuestUser || specOrOfficeLocationForFilter.size)) {\n      this.setState({ haveInitializedWithInitData: true });\n      this.initWithData();\n    }\n\n    // redirect AI specs to spec detail page as AI specs shouldn't should access to product selection page\n    if (selectedSpec?.get('isAi')) {\n      dispatch(push(`${SPEC_DETAIL_PATH}/${selectedSpec.get('id')}`));\n    }\n\n    this.modeCheck();\n\n    const productCategoryId = productCategory && productCategory.get('id');\n\n    if (scrollNode && scrollNode.current) {\n      scrollNode.current.scrollTop = 0;\n    }\n    if (productCategoryId) {\n      getAttributeOrderedWhiteList(productCategoryId);\n    }\n\n    dispatch(new ClearDrawingRulesAction());\n  }\n\n  public componentDidUpdate(prevProps) {\n    const {\n      productCategory,\n      getAttributeOrderedWhiteList,\n      dispatch,\n      selectedSpec,\n      isGuestUser,\n      specOrOfficeLocationForFilter,\n    } = this.props;\n\n    // redirect AI specs to spec detail page as AI specs shouldn't should access to product selection page\n    if (selectedSpec?.get('isAi')) {\n      dispatch(push(`${SPEC_DETAIL_PATH}/${selectedSpec.get('id')}`));\n    }\n\n    const productCategoryId = productCategory && productCategory.get('id');\n    const prevProductCategoryId = prevProps.productCategory && prevProps.productCategory.get('id')\n\n    if ((productCategoryId !== prevProductCategoryId) && productCategoryId) {\n      getAttributeOrderedWhiteList(productCategoryId);\n    }\n\n    if (!this.state.haveInitializedWithInitData && (isGuestUser || specOrOfficeLocationForFilter.size)) {\n      this.setState({ haveInitializedWithInitData: true });\n      this.initWithData();\n    }\n  }\n\n  public componentWillUnmount() {\n    const {\n      dispatch,\n    } = this.props;\n\n    dispatch(new SeriesFilterClearAction({}));\n    dispatch(new ProductFilterClearAction({}));\n    dispatch(new SeriesSpecificFilterClearAllAction());\n    dispatch(new SelectSeriesAction(-1));\n    dispatch(new SetHideDiscontinuedSeriesAction(false));\n    dispatch(new SetSeriesSearchOptionsAction({option: Map({limit: 10, offset: 0 })}));\n    dispatch(new SetShowDraftSeriesOnlyAction(false));\n    dispatch(new ResetMatchingProductsAction());\n  }\n\n  public basePageWithDataSetup = ({\n    categoryId,\n    categoryName,\n    seriesId,\n    productAttributes,\n  }: {\n    categoryId: number,\n    categoryName: string,\n    seriesId: number,\n    productAttributes?: IMap<any>\n  }) => {\n    const {\n      dispatch\n    } = this.props;\n\n    dispatch(new SelectProductForConfiguratorAction({\n      categoryId,\n      categoryName,\n      seriesId,\n      productAttributes,\n    }));\n  }\n\n  public initWithData = () => {\n    const {\n      dispatch,\n      atsApi,\n      isGuestUser,\n      specOrOfficeLocationForFilter,\n      useUnavailabilityPurchasabilityQuery,\n    } = this.props;\n\n    const queries = parseQueryString();\n    const productId = queries.productId;\n    const seriesId = queries.seriesId;\n    if (productId != null && !isNaN(productId)) {\n      dispatch(new SeriesLoadingAction());\n      (atsApi.callApi({\n        service: 'product',\n        endpoint: 'getSearchProducts',\n        body: {\n          filters : {\n            'and': [\n              {\n                'id': {\n                  'eq': Number(productId)\n                }\n              },\n              {\n                'statusId': {\n                  'nin': [3, 4]\n                }\n              },\n              ...isGuestUser ? [GUEST_USER_LOCATION_FILTER] : [],\n            ]\n          },\n          location: isGuestUser ? undefined : specOrOfficeLocationForFilter,\n          options: {\n            limit: 1,\n          }\n        },\n        queries: {\n          draft: false,\n          ...useUnavailabilityPurchasabilityQuery,\n          usePurchasability: !Boolean(isGuestUser)\n        },\n      }) as any).then(res => {\n        const product = fromJS(res?.payload?.product?.product?.[0]);\n        this.fireStartOnSeriesOrProductEvent({ product: product || undefined, fetchedSuccessfully: !!product, queries });\n        if (product) {\n          this.basePageWithDataSetup({\n            categoryId: product.get('category'),\n            categoryName: product.get('categoryName'),\n            seriesId: product.get('series'),\n            productAttributes: product.get('attributes'),\n          });\n        } else {\n          dispatch(new SeriesLoadingFinishedAction());\n        }\n      }).catch(() => {\n        this.fireStartOnSeriesOrProductEvent({ fetchedSuccessfully: false, queries });\n        dispatch(new SeriesLoadingFinishedAction());\n      });\n    } else if (seriesId != null && !isNaN(seriesId)) {\n      dispatch(new SeriesLoadingAction());\n      (atsApi.callApi({\n        service: 'product',\n        endpoint: 'getSearchSeries',\n        body: {\n          filters : {\n            'and': [\n              {\n                'id': {\n                  'eq': Number(seriesId)\n                }\n              },\n              {\n                'status': {\n                  'nin': ['deleted', 'inactive']\n                }\n              },\n              ...isGuestUser ? [GUEST_USER_LOCATION_FILTER] : [],\n            ]\n          },\n          location: isGuestUser ? undefined : specOrOfficeLocationForFilter,\n          options: {\n            limit: 1,\n          }\n        },\n        queries: {\n          draft: false,\n          ...useUnavailabilityPurchasabilityQuery,\n          usePurchasability: !Boolean(isGuestUser)\n        },\n      }) as any).then(res => {\n        const series = fromJS(res?.payload?.product?.series?.[0]);\n        this.fireStartOnSeriesOrProductEvent({ series: series || undefined, fetchedSuccessfully: !!series, queries });\n        if (series) {\n          this.basePageWithDataSetup({\n            categoryId: series.get('category'),\n            categoryName: series.get('categoryName'),\n            seriesId: series.get('id')\n          });\n        } else {\n          dispatch(new SeriesLoadingFinishedAction());\n        }\n      }).catch(() => {\n        this.fireStartOnSeriesOrProductEvent({ fetchedSuccessfully: false, queries });\n        dispatch(new SeriesLoadingFinishedAction());\n      });\n    }\n  }\n\n  private fireStartOnSeriesOrProductEvent = ({\n    product,\n    series,\n    fetchedSuccessfully,\n    queries,\n  }: {\n    product?: IMap<any>,\n    series?: IMap<any>,\n    fetchedSuccessfully: boolean,\n    queries: { productId?: any, seriesId?: any, utm_source?: any, utm_medium?: any, utm_campaign?: any, utm_content?: any, utm_content_type?: any },\n  }) => {\n    const { dispatch, amplitudeData } = this.props;\n    const hasProductId = queries.productId != null && !isNaN(queries.productId);\n    const entity = series || product;\n    const customData = {\n      seriesId: hasProductId ? null : (queries.seriesId != null && !isNaN(queries.seriesId) ? Number(queries.seriesId) : null),\n      seriesName: series ? series.get('name') : null,\n      productId: hasProductId ? Number(queries.productId) : null,\n      productNumber: product ? product.get('productNumber') : null,\n      fetchedSuccessfully,\n      brandId: entity ? entity.get('brandId') : null,\n      brandName: entity ? entity.get('brand') : null,\n      categoryId: entity ? entity.get('category') : null,\n      categoryName: entity ? entity.get('categoryName') : null,\n      utm_source: queries.utm_source || null,\n      utm_medium: queries.utm_medium || null,\n      utm_campaign: queries.utm_campaign || null,\n      utm_content: queries.utm_content || null,\n      utm_content_type: queries.utm_content_type || null,\n    };\n\n    amplitude.logEvent(AMPLITUDE_EVENT.startOnSeriesOrProduct, amplitudeData(customData));\n\n    dispatch(new CreateAnalyticsEventsAction({\n      trackingData: {\n        eventType: ATS_EVENT.startOnSeriesOrProduct,\n        defaultData: amplitudeData(),\n        customData,\n      },\n    }));\n  }\n\n  public modeCheck = () => {\n    const {\n      selectedSpec,\n      mode,\n      isGuestUser,\n      hasMasterTemplateRole,\n      userIsAtsUser,\n      dispatch,\n    } = this.props;\n\n    const resetMode = () => {\n      dispatch(new SetModeAction(Mode.productCatalogue));\n      dispatch(new SetSelectedSpecIdAction(-1));\n    };\n\n    if (selectedSpec?.get('id')) {\n      const isQuickSpec = selectedSpec?.get('projectId') === null;\n      const isMasterSpec = selectedSpec?.get('isMaster');\n      const isTemplateSpec = selectedSpec?.get('isMasterTemplate');\n      const isTestSpec = selectedSpec?.get('status') === 'test';\n      const isProjectSpec = selectedSpec?.get('projectId') && !isMasterSpec && !isTemplateSpec && !isTestSpec;\n  \n      if (isGuestUser) {\n        if (mode !== Mode.spec) {\n          resetMode();\n        }\n      } else {\n        if (\n          (isQuickSpec && mode !== Mode.spec)\n          || (isMasterSpec && mode !== Mode.master)\n          || (isTemplateSpec && mode !== Mode.masterTemplate)\n          || (isTestSpec && mode !== Mode.testProject)\n          || (isProjectSpec && mode !== Mode.project)\n        ) {\n          resetMode();\n        } else if ((isTemplateSpec || mode === Mode.masterTemplate) && !(userIsAtsUser || hasMasterTemplateRole)) {\n          resetMode();\n        }\n      }\n    } else {\n      resetMode();\n    }\n  }\n\n  public paginationRefPrevious: any = React.createRef();\n  public paginationRefNext: any = React.createRef();\n\n  public removeFilter = ({\n    key,\n    value,\n    multi,\n    label,\n  }: {\n    key: string,\n    value: any,\n    multi: boolean,\n    label: string,\n  }) => (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      skipRules,\n    } = this.props;\n\n    const attributeOptions = [{key, value, multi, label}]\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: SeriesFilterRemoveAction,\n        productAction: ProductFilterRemoveAction\n      },\n      attributeOptions,\n      skipRules\n    }));\n    dispatch(new SeriesLoadingAction());\n  }\n\n  public removeCategorySpecificSeriesFilter = (filterKey: CategorySpecificSeriesFilterKey) => (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      skipRules,\n      categorySpecificSeriesFilters,\n    } = this.props;\n\n    const isLastFilter = categorySpecificSeriesFilters.delete(filterKey).isEmpty();\n\n    if (isLastFilter) {\n      dispatch(new SetSeriesSpecificInitSelectionsAction({\n        seriesSpecificInitSelections: fromJS({}),\n      }));\n      dispatch(new ResetSeriesSpecificInitDisabledSelectionsAction());\n    }\n    dispatch(new RemoveCategorySpecificSeriesFilterAction({\n      filterKey,\n    }));\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: null,\n        productAction: null\n      },\n      skipRules,\n    }));\n    dispatch(new SeriesLoadingAction());\n  }\n\n  public clearFilters = (e: React.MouseEvent<HTMLElement>) => {\n    const {\n      dispatch,\n      skipRules,\n    } = this.props;\n\n    // clears both the 'series' and the 'product' level filters\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: SeriesFilterClearAction,\n        productAction: ProductFilterClearAction,\n      },\n      customArgs: {},\n      skipRules\n    }));\n    dispatch(new SeriesLoadingAction());\n    this.props.reset();\n  }\n\n  public render() {\n    const {\n      classes,\n      seriesFilters,\n      categorySpecificSeriesFilters,\n      t,\n      searchedValue,\n      selectedSpecId,\n      selectedProjectId,\n      drawingRule,\n      specType,\n      isHideDiscontinuedSeries,\n      updateHideDiscontinuedAndSearchSeries,\n      updateShowDraftOnlyAndSearchSeries,\n      skipRules,\n      seriesSearchOptions,\n      mode,\n      isShowDraftSeriesOnly,\n    } = this.props;\n\n    const isComplete = drawingRule && !drawingRule.get('scores', Map()).isEmpty() && !drawingRule.get('missing').size;\n\n    const specPath = selectedSpecId !== -1 ? `${SPEC_DETAIL_PATH}/${selectedSpecId}` : SPEC_DETAIL_PATH;\n    const projectpath = `${PROJECT_DETAIL_PATH}/${selectedProjectId}`;\n\n    const completePath = selectedProjectId !== -1 ? projectpath : specPath;\n\n    // Reset button for filters. Toggle on seriesFilter being a thing || searched form value is a thing\n    const searchedValueValue = searchedValue && searchedValue.get('drawingSearch');\n    const onlyEmptyUseFilter = seriesFilters.count() === 1 && seriesFilters.get('use') && seriesFilters.get('use').size === 0;\n    const resetButtonToggle = ((seriesFilters.count() !== 0 && !onlyEmptyUseFilter) || searchedValueValue || !categorySpecificSeriesFilters.isEmpty()) ?\n      <Button\n        onClick={this.clearFilters}\n        className={classes.resetButton}\n        color='primary'\n      >\n        {t('formButtons.reset')}\n      </Button> : null;\n\n    const toggleProductSelectionControl = this.state.productSelectionControlGroup\n    ? <ProductSelectionControl\n        ProductCategoryPath={PRODUCT_CATEGORY_PATH}\n        DrawingCompletionPath={completePath}\n        specType={specType}\n      />\n    : null;\n\n    return (\n      <div\n        className={classes.spaceContainer}\n      >\n        <ReactBeautifulDndAnchor id={DRAGGABLE_ANCHOR_ID}></ReactBeautifulDndAnchor>\n        <Grid\n          container={true}\n          direction='column'\n        >\n          <Grid\n            container={true}\n            className={classes.innerContainer}\n            direction='column'\n          >\n            {toggleProductSelectionControl}\n            <Grid\n              container={true}\n            >\n              <Grid\n                item={true}\n                lg={3}\n                md={12}\n                sm={12}\n                xs={12}\n                style={{\n                  display: isComplete ? 'none' : 'flex'\n                }}\n              >\n                <ProductSelectionGroup />\n              </Grid>\n              <Grid\n                item={true}\n                lg={isComplete ? 12 : 9}\n                md={12}\n                sm={12}\n                xs={12}\n              >\n                <Grid\n                  container={true}\n                  justify='space-between'\n                  alignItems='center'\n                >\n                  <Grid container={true} justify='flex-end' alignItems='center'>\n                    {mode === Mode.testProject &&\n                      <Grid style={{padding: '0px 16px'}}>\n                        <Checkbox\n                          style={{transform : 'scale(0.75)'}}\n                          color='primary'\n                          checked={isShowDraftSeriesOnly}\n                          onChange={(_, checked) => updateShowDraftOnlyAndSearchSeries(checked, seriesSearchOptions, skipRules)}\n                          />\n                        <Typography variant='caption'>{t('ProductCategorySelection.showDraftSeriesOnly')}</Typography>\n                      </Grid>\n                    }\n                    <Grid style={{padding: '0px 16px'}}>\n                      <Checkbox\n                        style={{transform : 'scale(0.75)'}}\n                        color='primary'\n                        checked={isHideDiscontinuedSeries}\n                        onChange={(_, checked) => updateHideDiscontinuedAndSearchSeries(checked, seriesSearchOptions, skipRules)}\n                        />\n                      <Typography variant='caption'>{t('ProductCategorySelection.disableDiscontinuedSeries')}</Typography>\n                    </Grid>\n                  </Grid>\n                  <Grid\n                    container={true}\n                    alignItems='baseline'\n                  >\n                    <Grid container={true} style={{width: 'auto'}} alignItems='center'>\n                      <Typography className={classes.paddingLeft}>\n                        {t('ProductSelection.appliedFilter')}\n                      </Typography>\n                    </Grid>\n                    <Grid container={true} style={{flex: '1 0 0px'}}>\n                      {\n                        categorySpecificSeriesFilters.keySeq().map((filterKey: CategorySpecificSeriesFilterKey) => (\n                          <Grid item={true} key={`categorySpecificSeriesFilters${filterKey}`}>\n                            <Chip\n                              className={classes.chip}\n                              label={t(CATEGORY_SPECIFIC_SERIES_FILTER_LABEL_KEYS[filterKey] || filterKey)}\n                              onDelete={this.removeCategorySpecificSeriesFilter(filterKey)}\n                              classes={{\n                                label: classes.chipWrap\n                              }}\n                            />\n                          </Grid>\n                        )).toArray()\n                      }\n                      {\n                        seriesFilters.reduce((acc: List<any>, filterSet: Set<IMap<ValueLabel>>, filterKey: string) => {\n                          return filterSet ? acc.concat(\n                            filterSet.map((filterValueLabel: IMap<ValueLabel>) => {\n                              const value = filterValueLabel.get('value');\n                              const label = filterValueLabel.get('label');\n\n                              return (\n                                <Grid item={true} key={`${filterKey}${value}`}>\n                                  <Chip\n                                    className={classes.chip}\n                                    label={label}\n                                    onDelete={this.removeFilter({\n                                      key: filterKey,\n                                      value: value,\n                                      multi: true,\n                                      label: label\n                                    })}\n\n                                    classes={{\n                                      label: classes.chipWrap\n                                    }}\n                                  />\n                                </Grid>\n                              )\n                            })\n                          ) : acc\n                        }, List())\n                      }\n                    </Grid>\n                    <Grid container={true} style={{width: 'auto', marginRight: 8}}>\n                      {resetButtonToggle}\n                    </Grid>\n                  </Grid>\n                </Grid>\n                <Divider className={classes.dividerMargin} light />\n                <ProductTable specType={specType} />\n              </Grid>\n            </Grid>\n          </Grid>\n        </Grid>\n        <AlternativesModal />\n        <AddProductToDrawingModal />\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const isGuestUser = !makeSelectIdentityObject()(state);\n  const mode = makeSelectMode()(state);\n  let selectedSpecId;\n  let selectedSpec;\n  switch (mode) {\n    case Mode.masterTemplate: {\n      selectedSpecId = makeSelectSelectedTemplateSpecId()(state);\n      selectedSpec = makeSelectTemplateProjectSpec()(state);\n      break;\n    }\n    case Mode.master: {\n      selectedSpecId = makeSelectSelectedMasterSpecId()(state);\n      selectedSpec = makeSelectMasterProjectspec()(state);\n      break;\n    }\n    default: {\n      selectedSpecId = makeSelectSelectedSpecId()(state);\n      selectedSpec = makeSelectSpec()(state);\n    }\n  }\n\n  return {\n    mode,\n    selectedSpecId,\n    selectedSpec,\n    isGuestUser,\n    ...createStructuredSelector({\n      seriesFilters: selectSeriesFilters(),\n      categorySpecificSeriesFilters: makeSelectCategorySpecificSeriesFilters(),\n      searchedValue: getFormValues(PRODUCT_SELECTION_GROUP_FORM),\n      pathname: makeSelectLocationPathname(),\n      selectedProjectId: makeSelectSelectedProjectId(),\n      drawingRule: makeSelectDrawingRules(),\n      skipRules: makeSelectSkipRuleEngine(),\n      productCategory: makeSelectProductCategory(),\n      scrollNode: makeSelectScrollNode(),\n      isHideDiscontinuedSeries: makeSelectHideDiscontinuedSeries(),\n      seriesSearchOptions: makeSelectSeriesSearchOptions(),\n      isShowDraftSeriesOnly: makeSelectShowDraftSeriesOnly(),\n      hasMasterTemplateRole: makeSelectUserHasMasterTemplate(),\n      userIsAtsUser: makeSelectUserIsAtsUser(),\n      specOrOfficeLocationForFilter: makeSelectLocationForSeriesSearchFilter(),\n      useUnavailabilityPurchasabilityQuery: makeSelectUseUnavailabilityPurchasabilityQuery(),\n    })(state)\n  }\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    getAttributeOrderedWhiteList: (categoryId: number) => {\n      dispatch(new GetAttributeOrderAction({categoryId}));\n    },\n    updateHideDiscontinuedAndSearchSeries: (checked: boolean, seriesSearchOptions: Map<string, any>, skipRules: boolean) => {\n      dispatch(new SetHideDiscontinuedSeriesAction(checked));\n      // when toggle hide discontinued on/off, we need to reset to first page\n      const newOption = seriesSearchOptions.set('offset', 0);\n      dispatch(new SetSeriesSearchOptionsAction({option: newOption}));\n      dispatch(new SeriesLoadingAction());\n      dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: null,\n          productAction: null\n        },\n        skipRules,\n      }));\n    },\n    updateShowDraftOnlyAndSearchSeries: (checked: boolean, seriesSearchOptions: Map<string, any>, skipRules: boolean) => {\n      dispatch(new SetShowDraftSeriesOnlyAction(checked))\n      // when toggle on/off, we need to reset to first page\n      const newOption = seriesSearchOptions.set('offset', 0);\n      dispatch(new SetSeriesSearchOptionsAction({option: newOption}));\n      dispatch(new SeriesLoadingAction());\n      dispatch(new UseActionAndSearchWithFilterAction({\n        passedAction: {\n          seriesAction: null,\n          productAction: null\n        },\n        skipRules,\n      }));\n    }\n  };\n};\n\nexport default compose (\n  withSpecId({redirectToControlled: true}),\n  withStyles(styles),\n  withTranslation('translations'),\n  withAtsApi(),\n  withAmplitudeData,\n  connect(mapStateToProps, mapDispatchToProps),\n  reduxForm({\n    form: PRODUCT_SELECTION_GROUP_FORM,\n  }),\n)(ProductSelection);\n","import {\n  IAction,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport enum CreateNewMasterFromStepperActionTypes {\n  CLEAR_FORM_VALUES = 'CLEAR_FORM_VALUES',\n  SET_FORM_VALUES = 'SET_FORM_VALUES',\n}\n\nexport class ClearFormValuesAction implements IAction {\n  public readonly type = CreateNewMasterFromStepperActionTypes.CLEAR_FORM_VALUES;\n}\n\nexport class SetFormValuesAction implements IAction {\n  public readonly type = CreateNewMasterFromStepperActionTypes.SET_FORM_VALUES;\n  constructor(\n    public payload: Map<string, any>\n  ) {}\n}","export const DEFAULT_MOUNT_POINT: string = 'newTemplateForm';\n\nexport default {\n  DEFAULT_MOUNT_POINT,\n};\n","/*\n * Reducer\n *\n * The reducer takes care of our data. Using actions, we can change our\n * application state.\n * To add a new action, add it to the switch statement in the reducer function\n *\n * Example:\n * case YOUR_ACTION_CONSTANT:\n *   return state.set('yourStateVariable', true);\n */\nimport { fromJS } from 'immutable';\nimport {\n  IAction,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  CreateNewMasterFromStepperActionTypes, SetFormValuesAction,\n} from './actions';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport interface IFormStepperReducerState {\n  formValues: Map<string, any>;\n}\n\n// The initial state of the App\nconst INITIAL_STATE = fromJS({\n  formValues: {}\n});\n\nfunction Reducer(state: IMapNonRecursive<IFormStepperReducerState> = INITIAL_STATE, action: IAction) {\n  switch (action.type) {\n    case CreateNewMasterFromStepperActionTypes.SET_FORM_VALUES: {\n      const {\n        payload,\n      } = action as SetFormValuesAction;\n      return state.set('formValues', payload);\n      // return state.withMutations((ctx: any) => {\n      //   const payload: Map<string, any> = action.payload;\n      //   ctx.update('formValues', Map<string, any>(), (formValues: Map<string, any>) => {\n      //     return formValues.merge(payload);\n      //   });\n      // });\n    }\n    case CreateNewMasterFromStepperActionTypes.CLEAR_FORM_VALUES:\n      return state.set('formValues', Map<string, any>());\n    default:\n      return state;\n  }\n}\n\nexport default Reducer;\n","import { createSelector } from 'reselect';\nimport {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  IFormStepperReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added CreateNewProjectFormStepper to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectFormValues = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IFormStepperReducerState>) => state.get('formValues') || Map<string, any>(),\n);\n\nexport default {\n  selectReducerState,\n};","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Stepper,\n  Step,\n  StepLabel,\n  StepContent,\n  Button,\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  CircularProgress,\n  Typography,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport NewTemplateModalForm from '../Forms/NewTemplateModalForm';\nimport NewProjectBuildingSelectionForm from '../Forms/NewProjectBuildingSelectionForm';\nimport {\n  SetProjectMasterSavingAllowAction,\n  UpdateTemplateProjectAndRedirectAction, CreateTemplateProjectAction,\n} from '../../modules/ProjectModule/actions';\nimport Debug from '../Debug';\nimport {\n  injectReducer,\n} from '../../utils';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport reducer from './reducer';\nimport {\n  ClearFormValuesAction,\n  SetFormValuesAction,\n} from '../CreateNewMasterFormStepper/actions';\nimport {\n  Map,\n  List,\n  Set,\n} from 'immutable';\nimport {\n  Project,\n} from '../../models';\nimport {\n  makeSelectSpec,\n} from '../../modules/SpecModule/selectors';\nimport { makeSelectFormValues } from './selectors';\nimport { AMPLITUDE_EVENT } from '../../constants';\nimport {\n  makeSelectProjectFormActiveStep,\n  makeSelectProjectMasterSavingAllow,\n} from '../../modules/ProjectModule/selectors';\nimport { CreateTemplateProjectFormVariant } from '../CreateNewTemplateModal/constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { buildingAmplitudeData } from '../../modules/ProjectModule/saga';\nimport { makeSelectTemplateTranslationObject } from '../../modules/AtsModule/selectors';\n\ninterface IFormStepperState {\n  activeStep: number;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    width: '90%',\n    margin: '0 auto'\n  },\n  button: {\n    margin: theme.spacing(),\n  },\n  buttons : {\n    marginTop: theme.spacing() * 2,\n  },\n  resetContainer: {\n    padding: theme.spacing() * 3,\n  },\n  circularProgress: {\n    marginLeft: theme.spacing(3.5),\n    width: `calc(1em + ${theme.typography.button.fontSize}) !important`,\n    height: `calc(1em + ${theme.typography.button.fontSize}) !important`\n  }\n});\n\ninterface ICreateNewTemplateFromStepperProps {\n  variantSet: Set<CreateTemplateProjectFormVariant>,\n  project?: IMap<Project>,\n  projectId: number,\n}\n\ninterface IFormStepperProps extends ICreateNewTemplateFromStepperProps {\n  dispatch: React.Dispatch<IAction>;\n  createTemplateProject: (obj: IMap<Partial<Project>>) => void;\n  handleSubmit: (options: {\n    transform?: (values: Map<string, any>) => Map<string, any>,\n    callback?: (values?: Map<string, any>) => void\n  }) => boolean;\n  formValues: Map<string, any>;\n  activeStep: number;\n  editMode: boolean;\n  updateTemplateProject: (projectId: number, obj: IMap<Partial<Project>>) => void;\n  savingAllow: boolean;\n  templateTranslationObject: object;\n  setProjectMasterSavingAllow: () => void;\n}\n\ntype StepperPropsWithStyles = IFormStepperProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nclass CreateNewTemplateFromStepper extends React.Component<StepperPropsWithStyles, IFormStepperState> {\n  public state = {\n    activeStep: this.props.activeStep,\n  };\n\n\n  public componentWillUnmount(): void {\n    const { dispatch } = this.props;\n    dispatch(new ClearFormValuesAction());\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      setProjectMasterSavingAllow\n    } = this.props;\n    dispatch(new ClearFormValuesAction());\n    setProjectMasterSavingAllow();\n  }\n\n  public handleSubmit = (\n    {\n      transform,\n      callback,\n    }:\n    {\n      transform?: (values: Map<string, any>) => Map<string, any>,\n      callback?: (values?: Map<string, any>) => void\n    }\n  ) => (values: Map<string, any>) => {\n    const {\n      dispatch,\n      formValues,\n    } = this.props;\n    const {\n      activeStep\n    } = this.state;\n\n    const transformedValues = transform != null\n    ? transform(values)\n    : values;\n\n    const mergedValues = formValues.merge(transformedValues);\n\n    if (activeStep === 0) {\n      dispatch(new ClearFormValuesAction());\n    }\n    dispatch(new SetFormValuesAction(mergedValues));\n    if(callback != null){\n      callback(mergedValues);\n    }\n    return true;\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      variantSet,\n      project,\n      editMode,\n      savingAllow,\n      templateTranslationObject,\n    } = this.props;\n    const {\n      activeStep: _activeStep,\n    } = this.state;\n\n    const activeStep = editMode && project == null\n    ? -1\n    : _activeStep\n\n    return (\n      <div\n        className={classes.root}\n      >\n        <Stepper\n          activeStep={activeStep}\n          orientation='vertical'\n        >\n          <Step key={0}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createTemplateSteps.step${0}`, templateTranslationObject)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewTemplateModalForm\n                    variantSet={variantSet}\n                    data={project}\n                    onSubmit={this.handleSubmit({\n                      callback: this.changeStep(1)\n                    })}\n                  >\n                    <Button\n                      variant='contained'\n                      color='primary'\n                      type='submit'\n                      className={classes.button}\n                    >\n                      {t('formButtons.next')}\n                    </Button>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={this.changeStep(1)}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewTemplateModalForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={1}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createTemplateSteps.step${1}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewProjectBuildingSelectionForm\n                    onSubmit={this.handleSubmit({\n                      callback: this.submitForm\n                    })}\n                    data={project}\n                    variantSet={variantSet}\n                    isOptional={true}\n                  >\n                    <Grid\n                      container={true}\n                      className={classes.buttons}\n                      alignItems='center'\n                    >\n                      <Button\n                        color='primary'\n                        onClick={this.changeStep(-1)}\n                        className={classes.button}\n                      >\n                        {t('formButtons.back')}\n                      </Button>\n                      <Button\n                        variant='contained'\n                        color='primary'\n                        type='submit'\n                        className={classes.button}\n                      >\n                        {t('formButtons.finish')}\n                      </Button>\n                      {\n                        !savingAllow ? <CircularProgress color='primary' className={classes.circularProgress} /> : null\n                      }\n                    </Grid>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={() => this.submitForm()}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewProjectBuildingSelectionForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n        </Stepper>\n      </div>\n    );\n  }\n  private changeStep = (index: number, absolute: boolean = false) => () => {\n    this.setState({\n      activeStep: absolute ? index : (this.state.activeStep + index)\n    });\n  };\n\n  private submitForm = (projectValues?: Map<string, any>) => {\n    const {\n      dispatch,\n      editMode,\n      projectId,\n      createTemplateProject,\n      updateTemplateProject,\n      amplitudeData\n    } = this.props;\n    // for Amplitude tracking\n    const projectName = projectValues && projectValues.get('name');\n    const country = projectValues && projectValues.getIn(['location', 'country', 'value']);\n    const province = projectValues && projectValues.getIn(['location', 'province', 'value'])\n                      ? projectValues.getIn(['location', 'province', 'value'])\n                      : '-';\n    const city = projectValues && projectValues.getIn(['location', 'city', 'value'])\n                  ? projectValues.getIn(['location', 'city', 'value'])\n                  : '-';\n    const buildingClasses = projectValues && projectValues.getIn(['building', 'buildingClasses']);\n    const buildingClassesString = buildingClasses.size === 0 ? '-' : buildingClasses.map( x => x.get('value')).join();\n    const buildingTypes = buildingClasses.reduce((acc, buildingClass) => {\n      const types = buildingClass.get('buildingTypes').map((buildingType) => {\n        return buildingType.get('value');\n      });\n      return acc.push(types).flatten(Infinity);\n    },List());\n    const buildingTypesString = buildingTypes.size === 0 ? '-' : buildingTypes.join();\n    \n    const analyticTracking = () => {\n      amplitude.logEvent(AMPLITUDE_EVENT.projectCreated,\n      amplitudeData({\n        projectName,\n        projectType : 'Template',\n        country,\n        province,\n        city,\n        bidDate: '-',\n        area: '-',\n        buildingClassesCount: `${buildingClasses.size}`,\n        buildingClasses: buildingClassesString,\n        buildingTypesCount: `${buildingTypes.size}`,\n        buildingTypes: buildingTypesString,\n        ...buildingAmplitudeData(buildingClasses).toJS()\n      }))\n    }\n    \n    editMode\n      ? updateTemplateProject(projectId, projectValues)\n      : (\n          createTemplateProject(projectValues),\n          analyticTracking()\n        );\n  }\n}\n\nconst mapStateToProps = (state: any, props: ICreateNewTemplateFromStepperProps) => {\n  const editMode = props.variantSet.has(CreateTemplateProjectFormVariant.WITH_EDIT_MODE);\n  const project = editMode ? props.project : undefined;\n\n  return {\n    ...createStructuredSelector({\n      formValues: makeSelectFormValues(),\n      selectedSpec: makeSelectSpec(),\n      activeStep: makeSelectProjectFormActiveStep(),\n      savingAllow: makeSelectProjectMasterSavingAllow(),\n      templateTranslationObject: makeSelectTemplateTranslationObject(),\n    })(state),\n    project,\n    editMode,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    createTemplateProject: (obj: IMap<Partial<Project>>) => {\n      dispatch(new CreateTemplateProjectAction(obj));\n    },\n    updateTemplateProject: (projectId: number, obj: IMap<Project>) => {\n      dispatch(new UpdateTemplateProjectAndRedirectAction({projectId, project: obj}));\n    },\n    setProjectMasterSavingAllow: () => {\n      dispatch(new SetProjectMasterSavingAllowAction({ allow: true }));\n    },\n    dispatch,\n  };\n};\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n\n  const project = stateProps.formValues.count() ? stateProps.formValues : stateProps.project\n\n  return {\n    ...stateProps,\n    ...dispatchProps,\n    ...ownProps,\n    project\n  }\n}\n\nexport default compose<React.ComponentClass<ICreateNewTemplateFromStepperProps>>(\n  withStyles(styles, { withTheme: true }),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  withTranslation('translations'),\n  withAmplitudeData\n)(CreateNewTemplateFromStepper);\n","import * as React from 'react';\nimport {compose,} from 'redux';\nimport {connect} from 'react-redux';\nimport {withTranslation, WithTranslation,} from 'react-i18next';\nimport {\n  AppBar,\n  Button,\n  Dialog,\n  Grid,\n  IconButton,\n  PropTypes,\n  Slide,\n  Theme,\n  Toolbar,\n  Typography,\n  withStyles,\n  WithStyles,\n  WithTheme,\n} from '@material-ui/core';\nimport {StyleRules,} from '@material-ui/core/styles';\n\nimport CloseIcon from '@material-ui/icons/Close';\n\nimport {TransitionProps} from '@material-ui/core/transitions/transition';\n\nimport {CreateTemplateProjectFormVariant} from './constants';\nimport {Set} from 'immutable';\nimport withProjectId, {ComponentProps as WithProjectIdComponentProps, WithProjectId,} from '../../hoc/withProjectId';\nimport {IAction, singleOrArray} from 'ats-utils/src';\nimport {createStructuredSelector} from 'reselect';\nimport {push} from 'connected-react-router';\nimport {NOT_FOUND_PATH} from '../../constants';\nimport DeleteModalDialog from '../../components/DeleteModalDialog';\nimport {AtsSvgMaster} from '../../components/AtsSvg';\nimport {\n  makeSelectProjectMasterSavingAllow,\n} from '../../modules/ProjectModule/selectors';\nimport {makeSelectConfigAtsSvgProps, makeSelectTemplateTranslationObject, makeSelectIsAtsSpecTool, makeSelectConfigUiOverridesAppBarColor} from '../../modules/AtsModule/selectors';\nimport CreateNewTemplateFormStepper from '../CreateNewTemplateFormStepper';\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n  return <Slide direction='up' ref={ref} {...props} />;\n});\n\n\nconst styles = (theme: Theme): StyleRules => {\n  return {\n    appBar: {\n      position: 'relative',\n    },\n    subtitle: {\n      flex: 1,\n      color: theme.palette.common.white\n    },\n    title: {\n      flex: 1\n    },\n    icon: {\n      margin: theme.spacing() * 2,\n      fontSize: theme.spacing() * 6,\n      width: 72,\n      height: 72\n    },\n    titleContainer: {\n      margin: `${theme.spacing() * 2.5}px 0`\n    },\n    iconContainer: {\n      margin: `0 ${theme.spacing() * 2.5}px 0 0`\n    }\n  };\n};\n\ntype IToggleFunction = () => void;\n\ninterface ITemplateModalComponentCommonProps {\n  variantSet?: Set<CreateTemplateProjectFormVariant>;\n}\n\ninterface ITemplateModalProps  {\n  dispatch: React.Dispatch<IAction>;\n  savingAllow: boolean;\n  isAtsSpecTool: boolean;\n  configAtsSvgProps: object;\n  templateTranslationObject: object;\n  appBarColor: PropTypes.Color;\n}\n\ninterface IModal {\n  isOpen: boolean;\n  toggleOpenCreateMasterModal: (arg: boolean) => void;\n}\n\ninterface IUncontrolledModal {\n  open?: never;\n  toggle?: never;\n}\n\ninterface IControlledModal {\n  open: boolean;\n  toggle: (o: boolean) => IToggleFunction;\n}\n\ntype TemplateModalComponentProps =  ITemplateModalComponentCommonProps & (IUncontrolledModal | IControlledModal);\n\ntype TemplateModalProps = ITemplateModalProps & WithProjectId & TemplateModalComponentProps & IModal & WithTranslation & WithTheme & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface ITemplateModalState {\n  open: boolean;\n  discardModalOpen: boolean;\n}\n\nclass CreateNewTemplateModal extends React.Component<\n  TemplateModalProps,\n  ITemplateModalState\n> {\n  public state = {\n    open: false,\n    discardModalOpen: false\n  };\n\n  public componentDidUpdate = (prevProps) => {\n    const {\n      dispatch,\n      projectId,\n      selectedId,\n    } = this.props;\n    // added a check to make sure that 'prevProps.selectedId !== selectedId' to prevent a race condition with reduxw where a comparison would be made before the Redux store was updated\n    if (projectId !== -1 && Number(selectedId) !== -1 && String(projectId) !== String(selectedId) && String(prevProps.selectedId) !== String(selectedId)) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n  }\n\n  public openDiscardModal = () => this.setState({discardModalOpen: true});\n\n  public render() {\n    const {\n      classes,\n      t,\n      open: controlledOpen,\n      toggle = this.toggleDialog,\n      variantSet = Set(),\n      project,\n      projectId,\n      theme,\n      savingAllow,\n      isAtsSpecTool,\n      configAtsSvgProps,\n      templateTranslationObject,\n      appBarColor,\n    } = this.props;\n\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n\n    const controlled = controlledOpen != null;\n    const open = controlled ? controlledOpen : uncontrolledOpen;\n    const editMode = variantSet.has(CreateTemplateProjectFormVariant.WITH_EDIT_MODE);\n\n    return (\n      <div>\n        { !controlled &&\n          <Button\n            onClick={this.toggleDialog(true)}\n          >\n            {\n              editMode\n                ? t('createNewTemplateProject.Edit', templateTranslationObject)\n                : t('createNewTemplateProject.Title', templateTranslationObject)\n            }\n          </Button>\n        }\n\n        <Dialog\n          fullScreen={true}\n          open={open || false}\n          onClose={this.openDiscardModal}\n          TransitionComponent={Transition}\n        >\n          <AppBar\n            className={classes.appBar}\n            color={appBarColor ? appBarColor : 'primary'}\n          >\n            <Toolbar>\n              <IconButton\n                color='inherit'\n                onClick={this.openDiscardModal}\n                aria-label='Close'\n                disabled={!savingAllow}\n              >\n                <CloseIcon />\n              </IconButton>\n              <Typography\n                variant='h6'\n                className={classes.subtitle}\n              >\n                {\n                  editMode\n                    ? t('createNewTemplateProject.Edit', templateTranslationObject)\n                    : t('createNewTemplateProject.Title', templateTranslationObject)\n                }\n              </Typography>\n            </Toolbar>\n          </AppBar>\n          <Grid\n            container={true}\n            justify='center'\n            alignItems='center'\n            className={classes.titleContainer}\n          >\n            <Grid\n              item={true}\n              className={classes.iconContainer}\n            >\n              <AtsSvgMaster\n                width='72'\n                height='72'\n                color={{\n                  backgroundColor: isAtsSpecTool ? theme.palette.secondary[200] : theme.palette.primary[200],\n                  shadowColor: isAtsSpecTool ? theme.palette.secondary.main : theme.palette.primary.main\n                }}\n                {...configAtsSvgProps}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Typography\n                variant='h4'\n                className={classes.title}\n              >\n                {\n                  editMode\n                    ? t('createNewTemplateProject.Edit', templateTranslationObject)\n                    : t('createNewTemplateProject.Title', templateTranslationObject)\n                }\n              </Typography>\n            </Grid>\n          </Grid>\n          <CreateNewTemplateFormStepper\n            variantSet={variantSet}\n            project={editMode ? project : undefined}\n            projectId={editMode ? projectId : -1}\n          />\n        </Dialog>\n        <DeleteModalDialog\n          open={this.state.discardModalOpen}\n          contentText={'Discard unsaved changes?'}\n          dialogProps={{\n            maxWidth: 'xs',\n            fullWidth: true\n          }}\n          buttonOk='Discard'\n          toggleDeleteModal={() => this.setState({discardModalOpen: false})}\n          handleDelete={() => {this.setState({discardModalOpen: false}); toggle(false)();}}\n          withLoading={false}\n        />\n      </div>\n    );\n  }\n\n  private toggleDialog = (open: boolean) => () => {\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    this.setState({\n      open: open != null ? open : !uncontrolledOpen\n    });\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  savingAllow:  makeSelectProjectMasterSavingAllow(),\n  isAtsSpecTool: makeSelectIsAtsSpecTool(),\n  configAtsSvgProps: makeSelectConfigAtsSvgProps(),\n  templateTranslationObject: makeSelectTemplateTranslationObject(),\n  appBarColor: makeSelectConfigUiOverridesAppBarColor(),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<TemplateModalComponentProps & WithProjectIdComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withProjectId({withProject: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CreateNewTemplateModal);\n","/* tslint:disable */\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  fromJS,\n  List,\n  Map,\n  Set,\n} from 'immutable';\nimport {\n  Product,\n  XrefData,\n  XrefProduct,\n  XrefManufacturer,\n  XrefCategory,\n  Series,\n} from '../../models';\nimport {\n  XrefActionTypes,\n  GetExactSearchXrefAction,\n  GetQuickSearchXrefSucceededAction,\n  GetExactSearchXrefSucceededAction,\n  GetProductDetailsSucceededAction,\n  GetXrefManufacturersSucceededAction,\n  GetXrefCategoriesSucceededAction,\n  SetSelectedManufacturerValueAction,\n  SetSelectedCategoryIdAction,\n  SetSearchTermAction,\n  SearchXrefsSucceededAction,\n  SearchXrefCompetitorProductSuccessAction,\n  SearchXrefSponsorProductSuccessAction,\n  SearchXrefCompetitorSeriesSuccessAction,\n  SearchXrefSponsorSeriesSuccessAction,\n  UpdateXrefSuccessAction,\n  AddXrefSuccessAction,\n  SearchXrefSponsorLoadingAction,\n  SearchXrefCompetitorLoadingAction,\n  ResetXrefStateAction,\n  GetCompetitorProductsLoadingAction,\n  GetXrefManufacturersLoadingAction,\n  GetXrefCategoriesLoadingAction,\n  CheckDuplicateXrefLoadingAction,\n  GetAlternativesXrefAction,\n} from '../../modules/CrossRefModule/actions';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nexport interface ICrossRefReducerState {\n  // searchResults: List<IMap<XrefData>>;\n  searchResultsCompetitorIds: List<number | string>;\n  searchTerm: string;\n  xrefData: Map<number | string, List<IMap<XrefData>>>;\n  cachedXrefProducts: Map<number | string, IMap<XrefProduct>>;\n  selectedCompetitorProductId: number | string;\n  productDetail: IMap<Product>;\n  manufacturersList: List<IMap<XrefManufacturer>>;\n  categoriesList: List<IMap<XrefCategory>>;\n  selectedManufacturerValue?: string;\n  selectedCategoryId?: number;\n  xrefs: List<IMap<XrefData>>;\n  searchingXrefs: boolean;\n  xrefCompetitorProducts: List<IMap<Product | Series>>,\n  xrefCompetitorSeries: List<IMap<Product | Series>>,\n  xrefSponsorProducts: List<IMap<Product | Series>>,\n  xrefSponsorSeries: List<IMap<Product | Series>>,\n  searchXrefSponsorLoading: boolean;\n  searchXrefCompetitorLoading: boolean;\n  getCompetitorProductsLoading: boolean;\n  getXrefManufacturersLoading: boolean;\n  getXrefCategoriesLoading: boolean;\n  checkingXrefDuplicate: boolean;\n  createSponsorProduct: {\n    loading: boolean;\n    error: string;\n    result: {\n      type: 'product' | 'series',\n      product: IMap<Product | Series>,\n      from: 'sponsor' | 'competitor'\n    }\n  }\n}\n\nconst INITIAL_STATE = fromJS({\n  searchResultsCompetitorIds: [],\n  searchTerm: '',\n  xrefData: {},\n  selectedCompetitorProductId: -1,\n  productDetail: {},\n  cachedXrefProducts: {},\n  manufacturersList: [],\n  categoriesList: [],\n  selectedManufacturerValue: undefined,\n  selectedCategoryId: undefined,\n  xrefs: [],\n  searchingXrefs: false,\n  xrefCompetitorProducts: [],\n  xrefCompetitorSeries: [],\n  xrefSponsorProducts: [],\n  xrefSponsorSeries: [],\n  searchXrefSponsorLoading: false,\n  searchXrefCompetitorLoading: false,\n  getCompetitorProductsLoading: false,\n  getXrefManufacturersLoading: false,\n  getXrefCategoriesLoading: false,\n  checkingXrefDuplicate: false,\n  createSponsorProduct: {\n    loading: false,\n    error: '',\n    result: {}\n  }\n});\n\nexport const reducer = (state: IMapNonRecursive<ICrossRefReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case XrefActionTypes.DELETE_XREF_BY_ID_AND_SEARCH_XREFS:\n    case XrefActionTypes.SEARCH_XREFS: {\n      return state.set('searchingXrefs', true);\n    }\n    case XrefActionTypes.SEARCH_XREFS_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchXrefsSucceededAction;\n      const {\n        xrefs\n      } = payload;\n      return state.set('xrefs', xrefs);\n    }\n    case XrefActionTypes.SEARCH_XREF_SPONSOR_SERIES_SUCCESS: {\n      const {\n        payload\n      } = action as SearchXrefSponsorSeriesSuccessAction;\n\n      return state.set('xrefSponsorSeries', payload);\n    }\n    case XrefActionTypes.SEARCH_XREF_SPONSOR_PRODUCT_SUCCESS: {\n      const {\n        payload\n      } = action as SearchXrefSponsorProductSuccessAction;\n\n      return state.set('xrefSponsorProducts', payload);\n    }\n    case XrefActionTypes.SEARCH_XREF_COMPETITOR_SERIES_SUCCESS: {\n      const {\n        payload\n      } = action as SearchXrefCompetitorSeriesSuccessAction;\n\n      return state.set('xrefCompetitorSeries', payload);\n    }\n    case XrefActionTypes.SEARCH_XREF_COMPETITOR_PRODUCT_SUCCESS: {\n      const {\n        payload\n      } = action as SearchXrefCompetitorProductSuccessAction;\n\n      return state.set('xrefCompetitorProducts', payload);\n    }\n    case XrefActionTypes.SEARCH_XREF_SPONSOR_LOADING: {\n      const {\n        payload\n      } = action as SearchXrefSponsorLoadingAction;\n\n      return state.set('searchXrefSponsorLoading', payload);\n    }\n    case XrefActionTypes.SEARCH_XREF_COMPETITOR_LOADING: {\n      const {\n        payload\n      } = action as SearchXrefCompetitorLoadingAction;\n\n      return state.set('searchXrefCompetitorLoading', payload);\n    }\n    case XrefActionTypes.SEARCH_XREFS_FINISHED: {\n      return state.set('searchingXrefs', false);\n    }\n    case XrefActionTypes.SET_SELECTED_CATEGORY_ID: {\n      const {\n        payload,\n      } = action as SetSelectedCategoryIdAction;\n\n      const {\n        selectedCategoryId\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('selectedCategoryId', selectedCategoryId)\n      });\n    }\n    case XrefActionTypes.SET_SELECTED_MANUFACTURER_VALUE: {\n      const {\n        payload,\n      } = action as SetSelectedManufacturerValueAction;\n\n      const {\n        selectedManufacturerValue\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('selectedManufacturerValue', selectedManufacturerValue)\n      });\n    }\n    case XrefActionTypes.GET_XREF_CATEGORIES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetXrefCategoriesSucceededAction;\n\n      const {\n        categoryList\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('categoriesList', categoryList)\n      });\n    }\n    case XrefActionTypes.GET_XREF_CATEGORIES_LOADING: {\n      const {\n        payload\n      } = action as GetXrefCategoriesLoadingAction;\n\n      return state.set('getXrefCategoriesLoading', payload);\n    }\n    case XrefActionTypes.RESET_MANUFACTURERS_LIST: {\n      return state.set('manufacturersList', INITIAL_STATE.get('manufacturersList'));\n    }\n    case XrefActionTypes.GET_XREF_MANUFACTURERS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetXrefManufacturersSucceededAction;\n\n      const {\n        manufacturerList\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('manufacturersList', manufacturerList)\n      });\n    }\n    case XrefActionTypes.GET_XREF_MANUFACTURERS_LOADING: {\n      const {\n        payload,\n      } = action as GetXrefManufacturersLoadingAction;\n\n      return state.set('getXrefManufacturersLoading', payload);\n    }\n    case XrefActionTypes.GET_COMPETITOR_PRODUCTS_LOADING: {\n      const {\n        payload\n      } = action as GetCompetitorProductsLoadingAction;\n\n      return state.set('getCompetitorProductsLoading', payload);\n    }\n    case XrefActionTypes.GET_QUICK_SEARCH_XREF_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetQuickSearchXrefSucceededAction;\n\n      const {\n        xrefSearchResults\n      } = payload;\n      return state.withMutations((ctx) => {\n        // ctx.set('searchResults', xrefSearchResults)\n        let orderedCompetitoredProductIds = List();\n        let competitorIds = Set<number | string>().withMutations((competitorIdCtx) => {\n          ctx.update('cachedXrefProducts', (stateCachedProducts: Map<number | string, IMap<XrefProduct>>) => {\n            return stateCachedProducts.withMutations((stateCachedProductsCtx) => {\n              // the same product could exist as a competitor and sponsor product in the same or different xrefs\n              xrefSearchResults.forEach((xrefData: IMap<XrefData>) => {\n                const sponsorProduct = xrefData.get('sponsorProduct').withMutations((sponsorProductCtx) => {\n                                          sponsorProductCtx\n                                            .set('competitorProductType', xrefData.get('competitorProductType'))\n                                            .set('sponsorProductType', xrefData.get('sponsorProductType'))\n                                            .set('crossTypes', xrefData.get('types') || List());\n                                        });\n                stateCachedProductsCtx.set(sponsorProduct.get('id'), sponsorProduct);\n                const competitorProduct = xrefData.get('competitorProduct').withMutations((competitorProductCtx) => {\n                                            competitorProductCtx\n                                              .set('competitorProductType', xrefData.get('competitorProductType'))\n                                              .set('sponsorProductType', xrefData.get('sponsorProductType'))\n                                              .set('crossTypes', xrefData.get('types') || List());\n                                          });\n                const competitorProductId = competitorProduct.get('id');\n                stateCachedProductsCtx.set(competitorProductId, competitorProduct);\n                competitorIdCtx.add(competitorProductId);\n                orderedCompetitoredProductIds = orderedCompetitoredProductIds.push(competitorProductId);\n              });\n            });\n          });\n        });\n        orderedCompetitoredProductIds = orderedCompetitoredProductIds.filter((id) => {\n          if (competitorIds.has(id)) {\n            competitorIds = competitorIds.delete(id);\n            return true;\n          }\n          return false;\n        });\n        // ctx.set('searchResultsCompetitorIds', competitorIds.toList());\n        ctx.set('searchResultsCompetitorIds', orderedCompetitoredProductIds);\n      });\n    }\n    case XrefActionTypes.RESET_SEARCH_RESULTS: {\n      return state.withMutations((ctx) => {\n        // ctx.set('searchResults', List<IMap<XrefData>>())\n        ctx.set('searchResultsCompetitorIds', List<number>())\n        ctx.set('selectedManufacturerValue', undefined)\n        ctx.set('categoriesList', List())\n        ctx.set('selectedCategoryId', undefined)\n      });\n    }\n    case XrefActionTypes.SET_SEARCH_TERM: {\n      const {\n        payload,\n      } = action as SetSearchTermAction;\n      const {\n        searchTerm,\n      } = payload;\n     return state.set('searchTerm', searchTerm);\n    }\n    case XrefActionTypes.GET_EXACT_SEARCH_XREF_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetExactSearchXrefSucceededAction;\n      const {\n        id,\n        xrefs,\n      } = payload;\n      return state.withMutations((ctx) => {\n        ctx.update('cachedXrefProducts', (stateCachedProducts: Map<number | string, IMap<XrefProduct>>) => {\n          return stateCachedProducts.withMutations((stateCachedProductsCtx) => {\n            xrefs.forEach((xrefData: IMap<XrefData>) => {\n              const sponsorProduct = xrefData.get('sponsorProduct').withMutations((sponsorProductCtx) => {\n                                        sponsorProductCtx\n                                          .set('competitorProductType', xrefData.get('competitorProductType'))\n                                          .set('sponsorProductType', xrefData.get('sponsorProductType'))\n                                          .set('crossTypes', xrefData.get('types') || List());\n                                      });\n              stateCachedProductsCtx.set(sponsorProduct.get('id'), sponsorProduct);\n              const competitorProduct = xrefData.get('competitorProduct').withMutations((competitorProductCtx) => {\n                                          competitorProductCtx\n                                            .set('competitorProductType', xrefData.get('competitorProductType'))\n                                            .set('sponsorProductType', xrefData.get('sponsorProductType'))\n                                            .set('crossTypes', xrefData.get('types') || List());\n                                        });\n              const competitorProductId = competitorProduct.get('id');\n              stateCachedProductsCtx.set(competitorProductId, competitorProduct);\n            });\n          });\n        });\n        ctx.setIn(['xrefData', id], xrefs);\n        ctx.set('searchingXrefs', false);\n      });\n    }\n    case XrefActionTypes.GET_ALTERNATIVES_XREF: {\n      {\n        const {\n          payload,\n        } = action as GetAlternativesXrefAction;\n  \n        const {\n          competitorProductId,\n        } = payload;\n        return state.set('selectedCompetitorProductId', competitorProductId != null ? competitorProductId : -1).set('searchingXrefs', true);\n      }\n    }\n    case XrefActionTypes.SET_ALTERNATIVES_XREF_LOADING: {\n      {\n        return state.set('searchingXrefs', true);\n      }\n    }\n    case XrefActionTypes.GET_EXACT_SEARCH_XREF: {\n      const {\n        payload,\n      } = action as GetExactSearchXrefAction;\n\n      const {\n        competitorProduct,\n      } = payload;\n      const competitorProductId = competitorProduct.get('id');\n      return state.set('selectedCompetitorProductId', competitorProductId != null ? competitorProductId : -1).set('searchingXrefs', true);\n    }\n    case XrefActionTypes.GET_PRODUCT_DETAILS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetProductDetailsSucceededAction;\n\n      const {\n        productData,\n      } = payload;\n      return state.withMutations((ctx: any) => {\n        ctx.set('productDetail', productData)\n      });\n    }\n    case XrefActionTypes.UPDATE_XREF_SUCCESS: {\n      const {\n        payload: {\n          xref,\n          xrefId\n        }\n      } = action as UpdateXrefSuccessAction;\n\n      return state.update('xrefs', (stateXrefs) => stateXrefs.map(stateXref => {\n          return stateXref.get('id') === xrefId ? xref : stateXref;\n        })\n      )\n    }\n    case XrefActionTypes.ADD_XREF_SUCCESS: {\n      const {\n        payload\n      } = action as AddXrefSuccessAction;\n\n      return state.update('xrefs', (stateXrefs) => {\n        return stateXrefs.unshift(payload);\n      })\n    }\n    case XrefActionTypes.RESET_XREF_STATE: {\n      const {\n        payload\n      } = action as ResetXrefStateAction;\n\n      return state.withMutations(ctx => {\n        payload.forEach(xrefStateKey => {\n          ctx.set(xrefStateKey, INITIAL_STATE.get(xrefStateKey));\n        });\n      })\n    }\n    case XrefActionTypes.CHECK_DUPLICATE_XREF_LOADING: {\n      const {\n        payload\n      } = action as CheckDuplicateXrefLoadingAction;\n      return state.set('checkingXrefDuplicate', payload);\n    }\n    case XrefActionTypes.CREATE_SPONSOR_PRODUCT: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['createSponsorProduct', 'loading'], true);\n        ctx.setIn(['createSponsorProduct', 'error'], '');\n        ctx.setIn(['createSponsorProduct', 'result'], fromJS({}));\n      });\n    }\n    case XrefActionTypes.CREATE_SPONSOR_PRODUCT_FAILED: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['createSponsorProduct', 'loading'], false);\n        ctx.setIn(['createSponsorProduct', 'error'], action.payload.error ?? '')\n      })\n    }\n    case XrefActionTypes.CLEAR_CREATE_SPONSOR_PRODUCT_ERROR: {\n      return state.setIn(['createSponsorProduct', 'error'], '');\n    }\n    case XrefActionTypes.CREATE_SPONSOR_PRODUCT_SUCCEED: {\n      const { payload } = action;\n      return state.withMutations(ctx => {\n        ctx.setIn(['createSponsorProduct', 'error'], '');\n        ctx.setIn(['createSponsorProduct', 'loading'], false);\n        ctx.setIn(['createSponsorProduct', 'result'], payload);\n      })\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import { IMap } from 'ats-utils/src';\nimport { List } from 'immutable';\nimport { XrefData } from '../../models';\n\nexport const filterForValidXrefs = (xrefs: List<IMap<XrefData>>) => {\n  return xrefs?.filter((xref) => xref.getIn(['competitorProduct', 'id']) && xref.getIn(['sponsorProduct', 'id'])) || xrefs;\n};","/* tslint:disable */\nimport {\n  call,\n  takeLatest,\n  put,\n  select,\n  take,\n  race,\n  takeEvery,\n} from 'redux-saga/effects';\nimport {\n  XrefActionTypes,\n  GetCompetitorProductsAction,\n  GetQuickSearchXrefSucceededAction,\n  GetExactSearchXrefAction,\n  GetExactSearchXrefSucceededAction,\n  GetProductDetailsAction,\n  GetProductDetailsSucceededAction,\n  GetXrefManufacturersAction,\n  GetXrefManufacturersSucceededAction,\n  GetXrefCategoriesAction,\n  GetXrefCategoriesSucceededAction,\n  GetXrefProductByManufacturerAction,\n  GetXrefProductsByCategoryAction,\n  SetSelectedManufacturerValueAction,\n  SetSelectedCategoryIdAction,\n  SendXrefFeedbackAction,\n  GetProductDetailsFailedAction,\n  RequestXrefAction,\n  SearchXrefsFinishedAction,\n  SearchXrefsAction,\n  SearchXrefsSucceededAction,\n  DeleteXrefByIdAction,\n  DeleteXrefByIdAndSearchXrefsAction,\n  AddXrefAction,\n  SearchXrefCompetitorSeriesSuccessAction,\n  SearchXrefCompetitorProductSuccessAction,\n  SearchXrefSponsorSeriesSuccessAction,\n  SearchXrefSponsorProductSuccessAction,\n  SearchXrefSponsorAction,\n  SearchXrefCompetitorAction,\n  UpdateXrefAction,\n  UpdateXrefSuccessAction,\n  AddXrefSuccessAction,\n  SearchXrefCompetitorLoadingAction,\n  SearchXrefSponsorLoadingAction,\n  GetCompetitorProductsLoadingAction,\n  GetXrefManufacturersLoadingAction,\n  GetXrefCategoriesLoadingAction,\n  CheckDuplicateXrefLoadingAction,\n  GetAlternativesXrefAction,\n  CreateSponsorProductAction,\n  CreateSponsorProductFailedAction,\n  CreateSponsorProductSucceedAction\n} from './actions';\nimport {\n  taggedDelay,\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  ApiCallAction, AtsApiCallAction,\n} from '../AtsModule/actions';\nimport {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Product,\n  XrefData,\n  XrefManufacturer,\n  XrefCategory,\n  Series,\n  XrefType,\n} from '../../../src/models';\nimport { makeSelectXrefSelectedManufacturerValue } from './selectors';\nimport { push } from 'connected-react-router';\nimport { PIM_CROSS_REFERENCE_DRAWER_TYPE } from '../../components/PimCrossReferenceProductDrawer/constants';\nimport { SetOverlayComponentContentAction, SetOverlayComponentPropsAction, SetSnackbarOpenAction, ToggleOverlayComponentAction } from '../ApplicationModule/actions';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { AMPLITUDE_EVENT, ATS_EVENT, SiteName, TIME_OUT_LIMIT } from '../../constants';\nimport { makeSelectAmplitudeData, makeSelectDomain, makeSelectIsSpecTool, makeSelectSite, makeSelectUseUnavailabilityPurchasabilityQuery } from '../AtsModule/selectors';\nimport i18next from 'i18next';\nimport { makeSelectLocationForSeriesSearchFilter, makeSelectPTXrefLocation } from '../AccountModule/selectors';\nimport { makeSelectSelectedRegion } from '../LocationModule/selectors';\nimport { isEmpty } from 'lodash';\nimport { number } from 'prop-types';\nimport {AddPimProductSucceededAction} from '../PimModule/actions';\nimport { LOADING_MODAL_ID } from '../../components/LoadingModal/Component';\nimport { CreateAnalyticsEventsAction } from '../PrintModule/actions';\nimport { trimmedXrefSearchResults } from './constants';\nimport { filterForValidXrefs } from './helper';\n\nexport default function* productSaga() {\n  yield takeLatest(XrefActionTypes.GET_COMPETITOR_PRODUCTS, getProducts);\n  yield takeLatest(XrefActionTypes.GET_EXACT_SEARCH_XREF, getExactProducts);\n  yield takeLatest(XrefActionTypes.GET_ALTERNATIVES_XREF, getAlternativesXref);\n  yield takeEvery(XrefActionTypes.GET_PRODUCT_DETAILS, getProductDetails);\n  yield takeLatest(XrefActionTypes.GET_XREF_MANUFACTURERS, getXrefManufacturers);\n  yield takeLatest(XrefActionTypes.GET_XREF_CATEGORIES, getXrefCategories);\n  yield takeLatest(XrefActionTypes.GET_XREF_PRODUCT_BY_MANUFACTURER, getXrefProductByManufacturer);\n  yield takeLatest(XrefActionTypes.GET_XREF_PRODUCT_BY_CATEGORY, getXrefProductByCategory);\n  yield takeLatest(XrefActionTypes.SEND_XREF_FEEDBACK, SendXrefFeedback);\n  yield takeLatest(XrefActionTypes.REQUEST_XREF, RequestXref);\n  yield takeLatest(XrefActionTypes.SEARCH_XREFS, searchXrefs);\n  yield takeLatest(XrefActionTypes.SEARCH_XREF_SPONSOR, searchXrefSponsor);\n  yield takeLatest(XrefActionTypes.SEARCH_XREF_COMPETITOR, searchXrefCompetitor);\n  yield takeLatest(XrefActionTypes.DELETE_XREF_BY_ID, deleteXrefById);\n  yield takeLatest(XrefActionTypes.DELETE_XREF_BY_ID_AND_SEARCH_XREFS, deleteXrefByIdAndSearchXrefs);\n  yield takeLatest(XrefActionTypes.ADD_XREF, AddXref);\n  yield takeLatest(XrefActionTypes.UPDATE_XREF, UpdateXref);\n  yield takeLatest(XrefActionTypes.CREATE_SPONSOR_PRODUCT, CreateSponsorProduct);\n}\n\nfunction* resolveXrefLocation(isDuplicateCheck?: boolean) {\n  const site = yield select(makeSelectSite());\n  const selectedRegion = yield select(makeSelectSelectedRegion());\n  if (isDuplicateCheck) {\n    return null;\n  } else if (selectedRegion.size) {\n    return selectedRegion;\n  } else if (site === SiteName.pt) {\n    return yield select(makeSelectPTXrefLocation());\n  } else if (site === SiteName.spec) {\n    return yield select(makeSelectLocationForSeriesSearchFilter({useXrefLogic: true}));\n  } else {\n    return null;\n  }\n}\n\nfunction* deleteXrefByIdAndSearchXrefs(\n  action: DeleteXrefByIdAndSearchXrefsAction\n) {\n  const {\n    xrefId,\n    andFilterArray,\n    orFilterArray,\n    location\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(deleteXrefById, new DeleteXrefByIdAction({ xrefId }));\n  const {\n    data2,\n    err2,\n  }: {\n    data2: any,\n    err2: Error\n  } = yield call(searchXrefs, new SearchXrefsAction({\n    andFilterArray,\n    orFilterArray,\n    location\n  }));\n}\n\nfunction* deleteXrefById(\n  action: DeleteXrefByIdAction,\n) {\n  const {\n    xrefId,\n    redirectPath\n   } = action.payload;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'deleteXref',\n      params: {\n        xrefId\n      }\n    }\n  }));\n  if (data) {\n    const immuData = fromJS(data);\n    const xrefId: number = immuData.getIn(['payload', 'xref', 'xref', 'id']);\n    if (xrefId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (redirectPath) {\n        yield put(push(redirectPath));\n      }\n    }\n  } else {\n    console.error('deleteXref API failed', {err}); // tslint:disable-line\n  }\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* searchXrefs(\n  action: SearchXrefsAction\n) {\n  const {\n    andFilterArray = [],\n    orFilterArray = [],\n    location = {},\n  } = action.payload;\n\n  const validAndFilter = !isEmpty(andFilterArray);\n  const validOrFilter = !isEmpty(orFilterArray);\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        'filters': {\n          ...((validAndFilter || validOrFilter)\n            ? {\n                'and' : [\n                  ...(validAndFilter ? andFilterArray : []),\n                  ...(validOrFilter\n                    ? [{ 'or': orFilterArray }]\n                    : []\n                  )\n                ]\n              }\n            : {}\n          )\n        },\n        options: {\n          orderBy: {\n            id: -1\n          }\n        },\n        location\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const xrefs: List<IMap<XrefData>> = immutableData.getIn(['payload', 'xref', 'xref']);\n    if (xrefs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchXrefsSucceededAction({ xrefs }));\n    };\n  } else {\n    console.error('getCrosses API failed', err); // tslint:disable-line\n  }\n  yield put(new SearchXrefsFinishedAction());\n  return {\n    data,\n    err,\n  };\n}\n\nexport function* searchXrefSponsor(\n  action: SearchXrefSponsorAction\n) {\n  const {\n    payload: {\n      type = 'product',\n      filters,\n      options,\n      location,\n    }\n  } = action;\n\n  yield put(new SearchXrefSponsorLoadingAction(true));\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'searchXrefSponsor',\n      params: {\n        type\n      },\n      body: {\n        filters,\n        options,\n        location,\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const typeKey = type === 'product' ? 'products' : 'series';\n    const xrefs: List<IMap<Series | Product>> = immutableData.getIn(['payload', 'xref', typeKey]);\n\n    if (xrefs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n\n    } else {\n      switch(type) {\n        case 'product':\n          yield put(new SearchXrefSponsorProductSuccessAction(xrefs));\n          break;\n        default:\n          yield put(new SearchXrefSponsorSeriesSuccessAction(xrefs));\n      }\n    };\n  } else {\n    console.error('searchXrefSponsor failed', err); // tslint:disable-line\n  }\n  yield put(new SearchXrefSponsorLoadingAction(false));\n}\n\nexport function* searchXrefCompetitor(\n  action: SearchXrefCompetitorAction\n) {\n  const {\n    payload: {\n      type = 'product',\n      filters,\n      options,\n      location,\n    }\n  } = action;\n\n  yield put(new SearchXrefCompetitorLoadingAction(true))\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'searchXrefCompetitor',\n      params: {\n        type\n      },\n      body: {\n        filters,\n        options,\n        location,\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const typeKey = type === 'product' ? 'products' : 'series';\n    const xrefs: List<IMap<Series | Product>> = immutableData.getIn(['payload', 'xref', typeKey]);\n\n    if (xrefs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n\n    } else {\n      switch(type) {\n        case 'product':\n          yield put(new SearchXrefCompetitorProductSuccessAction(xrefs));\n          break;\n        default:\n          yield put(new SearchXrefCompetitorSeriesSuccessAction(xrefs));\n      }\n    };\n  } else {\n    console.error('searchXrefCompetitor failed', err); // tslint:disable-line\n  }\n  yield put(new SearchXrefCompetitorLoadingAction(false))\n}\n\nexport function* getXrefProductByCategory(\n  action: GetXrefProductsByCategoryAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    category,\n  } = payload;\n\n  yield put(new GetCompetitorProductsLoadingAction(true));\n\n  const categoryValue = category.get('value');\n  const categoryId = category.get('id'); // because backend can't figure out if their ids are supposed to be strings or numbers, so our model accomodates both. Except now we have to cast it to whatever we need it as =_=\n\n  const isSpecTool = yield select(makeSelectIsSpecTool());\n\n  const location = yield call(resolveXrefLocation);\n\n  const selectedManufacturerValue = yield select(makeSelectXrefSelectedManufacturerValue());\n\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const start = performance.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        filters : {\n          'and': [\n            {\n              'competitorProduct.brand': {\n                'eq': selectedManufacturerValue\n              }\n            },\n            {\n              'competitorProduct.category': {\n                'eq': categoryId\n              }\n            },\n            ...isSpecTool ? [{\n              'sponsorProduct.isCompetitor': {\n                'eq': false\n              }\n            }] : []\n          ],\n        },\n        location,\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let xrefSearchResults: List<IMap<XrefData>>;\n  if (data) {\n    const immutableData = fromJS(data);\n\n    xrefSearchResults = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    if (xrefSearchResults == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetQuickSearchXrefSucceededAction({xrefSearchResults}));\n      yield put(new SetSelectedCategoryIdAction({selectedCategoryId: categoryId}));\n    };\n  } else {\n    console.error('xref products by manufacturer API failed', err); // tslint:disable-line\n  }\n  yield put(new GetCompetitorProductsLoadingAction(false));\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  let competitorProductIdSet = new Set<number>();\n  const searchResults = xrefSearchResults?.filter((xrefData, index) => {\n    const competitorProductId = xrefData.getIn(['competitorProduct', 'id']);\n    if (competitorProductIdSet.has(competitorProductId)) {\n      return false; // already exists, skip\n    } else {\n      competitorProductIdSet.add(competitorProductId);\n      return true;\n    }\n  })\n  const resultSize = searchResults ? (searchResults.size || 0) : null;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefCompetitorCategorySearch, {\n    searchTerm: categoryValue,\n    searchCategoryId: categoryId,\n    searchResults: resultSize,\n    errorCode,\n    errorMessage,\n    render,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  const performanceData = {\n    backendDuration: render,\n    frontendDuration: end - start,\n    errorCode: errorCode || undefined,\n    errorMessage: errorMessage || undefined,\n  };\n\n  const { trimmedResults, resultsKeyRef } = trimmedXrefSearchResults(searchResults, 'competitorProduct');\n\n  const customData = {\n    searchByCategoryName: categoryValue,\n    searchByCategoryId: categoryId,\n    resultsCount: resultSize,\n    results: trimmedResults?.toJS() ?? null,\n    resultsKeyRef,\n  };\n\n  const trackingData = { \n    eventType: ATS_EVENT.xref_stepOne_categorySearch,\n    defaultData: amplitudeData,\n    performanceData,\n    customData,\n  };\n\n  // console.log(trackingData);\n\n  yield put(new CreateAnalyticsEventsAction({\n    trackingData\n  }));\n}\n\nexport function* getXrefProductByManufacturer(\n  action: GetXrefProductByManufacturerAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    manufacturer,\n  } = payload;\n\n  // const manufacturerId = manufacturer.get('id');\n  const manufacturerValue = manufacturer.get('value');\n\n  yield put(new GetCompetitorProductsLoadingAction(true));\n\n  const isSpecTool = yield select(makeSelectIsSpecTool());\n  const location = yield call(resolveXrefLocation);\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const start = performance.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        filters : {\n          'and': [\n            {\n              'competitorProduct.brand': {\n                'eq': manufacturerValue\n              }\n            },\n            ...isSpecTool ? [{\n              'sponsorProduct.isCompetitor': {\n                'eq': false\n              }\n            }] : []\n          ],\n        },\n        location,\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let xrefSearchResults: List<IMap<XrefData>>;\n  if (data) {\n    const immutableData = fromJS(data);\n    xrefSearchResults = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    if (xrefSearchResults == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetQuickSearchXrefSucceededAction({xrefSearchResults}));\n      yield put(new SetSelectedManufacturerValueAction({selectedManufacturerValue: manufacturerValue}));\n    };\n  } else {\n    console.error('xref products by manufacturer API failed', err); // tslint:disable-line\n  }\n  yield put(new GetCompetitorProductsLoadingAction(false));\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  let competitorProductIdSet = new Set<number>();\n  const searchResults = xrefSearchResults?.filter((xrefData, index) => {\n    const competitorProductId = xrefData.getIn(['competitorProduct', 'id']);\n    if (competitorProductIdSet.has(competitorProductId)) {\n      return false; // already exists, skip\n    } else {\n      competitorProductIdSet.add(competitorProductId);\n      return true;\n    }\n  })\n  const resultSize = searchResults ? (searchResults.size || 0) : null;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefCompetitorManufacturerSearch, {\n    searchTerm: manufacturerValue,\n    searchResults: resultSize,\n    errorCode,\n    errorMessage,\n    render,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData\n  });\n\n  const performanceData = {\n    backendDuration: render,\n    frontendDuration: end - start,\n    errorCode: errorCode || undefined,\n    errorMessage: errorMessage || undefined,\n  };\n\n  const { trimmedResults, resultsKeyRef } = trimmedXrefSearchResults(searchResults, 'competitorProduct');\n\n  const customData = {\n    searchByManufacturerName: manufacturer.get('value'),\n    searchByManufacturerId: manufacturer.get('id'),\n    resultsCount: resultSize,\n    results: trimmedResults?.toJS() ?? null,\n    resultsKeyRef,\n  };\n\n  const trackingData = { \n    eventType: ATS_EVENT.xref_stepOne_manufacturerSearch,\n    defaultData: amplitudeData,\n    performanceData,\n    customData,\n  };\n\n  // console.log(trackingData);\n\n  yield put(new CreateAnalyticsEventsAction({\n    trackingData\n  }));\n}\n\nexport function* getXrefCategories(\n  action: GetXrefCategoriesAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    manufacturer\n  } = payload;\n\n  yield put(new GetXrefCategoriesLoadingAction(true));\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getXrefCategories',\n      body: {\n        manufacturer: manufacturer && manufacturer.get('value')\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categoryList: List<IMap<XrefCategory>> = immutableData.getIn(['payload', 'xref', 'category']);\n    if (categoryList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetXrefCategoriesSucceededAction({categoryList}));\n    };\n    \n  } else {\n    console.error('xref categories list API failed', err); // tslint:disable-line\n  }\n  yield put(new GetXrefCategoriesLoadingAction(false));\n}\n\nexport function* getXrefManufacturers(\n  action: GetXrefManufacturersAction\n) {\n  const {\n    categoryId\n  } = action;\n\n  yield put(new GetXrefManufacturersLoadingAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getXrefManufacturers',\n      body: {\n        ...categoryId ? { categoryId } : {},\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturerList: List<IMap<XrefManufacturer>> = immutableData.getIn(['payload', 'xref', 'manufacturer']);\n    if (manufacturerList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetXrefManufacturersSucceededAction({manufacturerList}))\n    };\n    \n  } else {\n    console.error('xref manufacturer list API failed', err); // tslint:disable-line\n  }\n  yield put(new GetXrefManufacturersLoadingAction(false));\n}\n\nexport function* getProductDetails(\n  action: GetProductDetailsAction\n) {\n  const {\n    productId,\n    onSuccess,\n    onFailed,\n  } = action.payload;\n\n  const start = performance.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getProduct',\n      body: {\n        productId,\n        isCompetitor: 'null'\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let productData: IMap<Product>;\n  if (data) {\n    const immutableData = fromJS(data);\n    productData = immutableData.getIn(['payload', 'product', 'product', 0]);\n    if (productData == null) {\n      yield put(new GetProductDetailsFailedAction());\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProductDetailsSucceededAction({productData}));\n    };\n    onSuccess?.(productData);\n  } else {\n    yield put(new GetProductDetailsFailedAction());\n    console.error('xref products API failed', err); // tslint:disable-line\n    onFailed?.();\n  }\n\n  const trackingData = {\n    type: 'product',\n    productId,\n    productNumber: productData?.get('productNumber') || null,\n    manufacturer: productData?.get('brand') || null,\n    categoryName: productData?.get('categoryName') || null,\n  }\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefSponsorProductDetailSearch, {\n    errorCode,\n    errorMessage,\n    render,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n\n  return {\n    data: productData,\n    err,\n  };\n}\n\nexport function* getProducts(\n  action: GetCompetitorProductsAction\n) {\n  yield race({\n    task: call(getSearchXrefs, action),\n    cancel: take(XrefActionTypes.CANCEL_XREF_SEARCH)\n  })\n}\n\nexport function* getSearchXrefs(\n  action: GetCompetitorProductsAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    searchTerm,\n  } = payload;\n\n  yield put(new GetCompetitorProductsLoadingAction(true));\n\n  if (searchTerm === '') {\n    return yield put(new GetCompetitorProductsLoadingAction(false));\n  }\n\n  yield call(taggedDelay, 500);\n\n  const isSpecTool = yield select(makeSelectIsSpecTool());\n  const location = yield call(resolveXrefLocation);\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const start = performance.now();\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        filters : {\n          'and': [\n            {\n              'competitorProduct.productNumber': {\n                'like': searchTerm\n              }\n            },\n            ...isSpecTool ? [{\n              'sponsorProduct.isCompetitor': {\n                'eq': false\n              }\n            }] : []\n          ],\n        },\n        location,\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let xrefSearchResults: List<IMap<XrefData>>;\n  if (data) {\n    const immutableData = fromJS(data);\n    xrefSearchResults = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    if (xrefSearchResults == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetQuickSearchXrefSucceededAction({xrefSearchResults}));\n    };\n  } else {\n    console.error('xref products API failed', err); // tslint:disable-line\n  }\n  yield put(new GetCompetitorProductsLoadingAction(false));\n\n  let competitorProductIdSet = new Set<number>();\n  const searchResults = xrefSearchResults?.filter((xrefData, index) => {\n    const competitorProductId = xrefData.getIn(['competitorProduct', 'id']);\n    if (competitorProductIdSet.has(competitorProductId)) {\n      return false; // already exists, skip\n    } else {\n      competitorProductIdSet.add(competitorProductId);\n      return true;\n    }\n  })\n  const resultSize = searchResults ? (searchResults.size || 0) : null;\n\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefCompetitorProductSearch, {\n    searchTerm,\n    searchResults: resultSize,\n    errorCode,\n    errorMessage,\n    render,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData\n  });\n\n  const performanceData = {\n    backendDuration: render,\n    frontendDuration: end - start,\n    errorCode: errorCode || undefined,\n    errorMessage: errorMessage || undefined,\n  };\n\n  const { trimmedResults, resultsKeyRef } = trimmedXrefSearchResults(searchResults, 'competitorProduct');\n\n  const customData = {\n    searchTerm,\n    resultsCount: resultSize,\n    results: trimmedResults?.toJS() ?? null,\n    resultsKeyRef,\n  };\n\n  const trackingData = { \n    eventType: ATS_EVENT.xref_stepOne_numberSearch,\n    defaultData: amplitudeData,\n    performanceData,\n    customData,\n  };\n\n  // console.log(trackingData);\n\n  yield put(new CreateAnalyticsEventsAction({\n    trackingData\n  }));\n}\n\nexport function* getAlternativesXref(\n  action: GetAlternativesXrefAction\n) {\n  const {\n    payload: {\n      competitorProductId,\n      competitorProductType = 'product',\n      sponsorProductType = 'product',\n      competitorProductProductNumber,\n      competitorProductSeriesName,\n      competitorProductBrand,\n      competitorProductBrandId,\n      competitorProductCategoryName,\n      competitorProductCategoryId,\n      options = {},\n    }\n  } = action;\n\n  yield call(taggedDelay, 500);\n\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(specOrOfficeLocationForFilter));\n\n  const start = performance.now();\n  const {\n    data, \n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefAlternatives',\n      body: {\n        filters : {\n          'or': [\n            {\n              'and': [\n                {\n                  'competitorProduct.productNumber': {\n                    eq: competitorProductProductNumber\n                  }\n                },\n                {\n                  'competitorProduct.brand': {\n                    eq: competitorProductBrand\n                  }\n                },\n                {\n                  'competitorProduct.category': {\n                    eq: competitorProductCategoryId\n                  }\n                },\n                {\n                  competitorProductType: {\n                    eq: competitorProductType\n                  }\n                },\n                {\n                  sponsorProductType: {\n                    neq: 'package'\n                  }\n                }\n              ],\n            },\n            {\n              'and': [\n                {\n                  'competitorProduct.productNumber': {\n                    eq: competitorProductSeriesName\n                  }\n                },\n                {\n                  'competitorProduct.brand': {\n                    eq: competitorProductBrand\n                  }\n                },\n                {\n                  'competitorProduct.category': {\n                    eq: competitorProductCategoryId\n                  }\n                },\n                {\n                  competitorProductType: {\n                    eq: 'series'\n                  }\n                },\n                {\n                  sponsorProductType: {\n                    neq: 'package'\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        location: specOrOfficeLocationForFilter,\n        options\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let xrefs: List<IMap<XrefData>> = List();\n  let defaultResults = 0;\n  let sponsorResults = 0;\n  let productSponsorProductResults = 0;\n  let seriesSponsorProductResults = 0;\n  let packageSponsorProductResults = 0;\n  let sponsorBrandData = Map<string, number>();\n  if (data) {\n    const immutableData = fromJS(data);\n    xrefs = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    if (xrefs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      xrefs.forEach((xref: IMap<XrefData>, key) => {\n        if (xref.get('sponsorProductType') === 'product') {\n          productSponsorProductResults++;\n        } else if (xref.get('sponsorProductType') === 'series') {\n          seriesSponsorProductResults++;\n        } else {\n          packageSponsorProductResults++;\n        }\n        if (xref.get('isAlternativeSponsor')) {\n          sponsorResults++;\n        } else {\n          defaultResults++;\n        }\n\n        const sponsorBrand = xref.getIn(['sponsorProduct', 'brand']);\n        if (sponsorBrandData.has(sponsorBrand)) {\n          sponsorBrandData = sponsorBrandData.set(sponsorBrand, sponsorBrandData.get(sponsorBrand) + 1);\n        } else {\n          sponsorBrandData = sponsorBrandData.set(sponsorBrand, 1);\n        }\n      });\n\n      yield put(new GetExactSearchXrefSucceededAction({id: competitorProductId, xrefs}));\n    };\n    \n  } else {\n    console.error('getAlternativesXref failed', err); // tslint:disable-line\n  }\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  let sponsorBrands = '';\n  let sponsorBrandOccurrences = '';\n  sponsorBrandData.forEach((value, key) => {\n    sponsorBrands += (sponsorBrands ? ', ' : '') + key;\n    sponsorBrandOccurrences += (sponsorBrandOccurrences ? ', ' : '') + value;\n  });\n  \n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefSponsorProductResults, {\n    competitorProductId: competitorProductId,\n    competitorProductSeriesName,\n    competitorProductProductNumber,\n    competitorProductBrand,\n    competitorProductBrandId,\n    competitorProductCategoryName,\n    competitorProductCategoryId,\n    totalResults: xrefs?.count() || 0,\n    defaultResults,\n    sponsorResults,\n    productSponsorProductResults,\n    seriesSponsorProductResults,\n    packageSponsorProductResults,\n    sponsorBrands,\n    sponsorBrandOccurrences,\n    isAlternativeFlow: true,\n    errorCode,\n    errorMessage,\n    render,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData\n  })\n}\n\nexport function* getExactProducts(\n  action: GetExactSearchXrefAction\n) {\n  const {\n    payload: {\n      competitorProduct,\n      competitorProductType,\n      options = {},\n    }\n  } = action;\n\n  yield call(taggedDelay, 500);\n  \n  const isSpecTool = yield select(makeSelectIsSpecTool());\n  const location = yield call(resolveXrefLocation);\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const competitorProductId = competitorProduct.get('id');\n\n  const start = performance.now();\n  const {\n    data, \n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        filters : {\n          'and': [\n            {\n              'competitorProductId': {\n                'eq': competitorProductId\n              }\n            },\n            {\n              competitorProductType: {\n                eq: competitorProductType\n              }\n            },\n            ...isSpecTool ? [{\n              'sponsorProduct.isCompetitor': {\n                'eq': false\n              }\n            }] : []\n          ],\n        },\n        location,\n        options\n      },\n      queries: {\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  const end = performance.now();\n\n  let xrefs: List<IMap<XrefData>> = List();\n  let defaultResults = 0;\n  let sponsorResults = 0;\n  let productSponsorProductResults = 0;\n  let seriesSponsorProductResults = 0;\n  let packageSponsorProductResults = 0;\n  let sponsorBrandData = Map<string, number>();\n  if (data) {\n    const immutableData = fromJS(data);\n    xrefs = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    if (xrefs == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n\n      xrefs.forEach((xref: IMap<XrefData>, key) => {\n        if (xref.get('sponsorProductType') === 'product') {\n          productSponsorProductResults++;\n        } else if (xref.get('sponsorProductType') === 'series') {\n          seriesSponsorProductResults++;\n        } else {\n          packageSponsorProductResults++;\n        }\n        if (xref.get('isAlternativeSponsor')) {\n          sponsorResults++;\n        } else {\n          defaultResults++;\n        }\n\n        const sponsorBrand = xref.getIn(['sponsorProduct', 'brand']);\n        if (sponsorBrandData.has(sponsorBrand)) {\n          sponsorBrandData = sponsorBrandData.set(sponsorBrand, sponsorBrandData.get(sponsorBrand) + 1);\n        } else {\n          sponsorBrandData = sponsorBrandData.set(sponsorBrand, 1);\n        }\n      });\n\n      yield put(new GetExactSearchXrefSucceededAction({id: competitorProductId, xrefs}));\n    };\n    \n  } else {\n    console.error('xref exact products API failed', err); // tslint:disable-line\n  }\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  let sponsorBrands = '';\n  let sponsorBrandOccurrences = '';\n  sponsorBrandData.forEach((value, key) => {\n    sponsorBrands += (sponsorBrands ? ', ' : '') + key;\n    sponsorBrandOccurrences += (sponsorBrandOccurrences ? ', ' : '') + value;\n  });\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefSponsorProductResults, {\n    competitorProductId: competitorProductId,\n    competitorProductProductNumber: competitorProduct.get('productNumber'),\n    competitorProductBrand: competitorProduct.get('brand'),\n    competitorProductCategoryName: competitorProduct.get('categoryName'),\n    competitorProductCategoryId: competitorProduct.get('category'),\n    totalResults: xrefs?.count() || 0,\n    defaultResults,\n    sponsorResults,\n    productSponsorProductResults,\n    seriesSponsorProductResults,\n    packageSponsorProductResults,\n    sponsorBrands,\n    sponsorBrandOccurrences,\n    isAlternativeFlow: false,\n    errorCode,\n    errorMessage,\n    render,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData\n  })\n\n  const performanceData = {\n    backendDuration: render,\n    frontendDuration: end - start,\n    errorCode: errorCode || undefined,\n    errorMessage: errorMessage || undefined,\n  };\n\n  const { trimmedResults, resultsKeyRef } = trimmedXrefSearchResults(xrefs, 'sponsorProduct');\n\n  const customData = {\n    SearchByCompetitorProductId: competitorProductId,\n    SearchByCompetitorProductType: competitorProductType,\n    resultsCount: xrefs?.count() || 0,\n    results: trimmedResults?.toJS() ?? null,\n    resultsKeyRef,\n  };\n\n  const trackingData = { \n    eventType: ATS_EVENT.xref_stepTwo_search,\n    defaultData: amplitudeData,\n    performanceData,\n    customData,\n  };\n\n  // console.log(trackingData);\n\n  yield put(new CreateAnalyticsEventsAction({\n    trackingData\n  }));\n}\n\nexport function* SendXrefFeedback(\n  action: SendXrefFeedbackAction\n) {\n  const {\n    xrefId,\n    body\n  } = action.payload;\n\n  const {\n    data, \n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'addXrefFeedback',\n      body,\n      params: {\n        xrefId\n      }\n    }\n  }));\n\n  if (!data) {\n    console.error('Xref Feedback Error', err); // tslint:disable-line\n  }\n}\n\nexport function* RequestXref(\n  action: RequestXrefAction\n) {\n  const {\n    payload\n  } = action;\n\n  const start = performance.now();\n  const {\n    data, \n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'addXrefRequest',\n      body: payload,\n    }\n  }));\n  const end = performance.now();\n\n  if (!data) {\n    console.error('Xref Feedback Error', err); // tslint:disable-line\n  }\n\n  const trackingData = {\n    productNumber: payload.productNumber,\n    manufacuturer: payload.manufacturer,\n    categoryName: payload.categoryName,\n    email: payload.email,\n  }\n\n  let errorCode = (err as any)?.payload?.error?.code || null;\n  let errorMessage = (err as any)?.payload?.error?.error || null;\n\n  if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n    if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n      errorCode = 504;\n      errorMessage = 'Likely timeout';\n    } else {\n      errorCode = 503;\n      errorMessage = 'Likely CORS error';\n    }\n  }\n\n  const meta = (data || err as any)?.meta || {};\n  const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n  const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n  delete meta.versionNumbers;\n  delete meta.render;\n\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n\n  amplitude.logEvent(AMPLITUDE_EVENT.xrefRequestCrossReference, {\n    errorCode,\n    errorMessage,\n    render,\n    ...trackingData,\n    ...meta,\n    ...versionNumbers,\n    ...amplitudeData,\n  });\n}\n\nexport function* AddXref(\n  action: AddXrefAction\n) {\n  const {\n    xrefData,\n    onSuccess\n  } = action.payload;\n\n  const site = yield select(makeSelectSite());\n  let isXrefsDuplicate: boolean = yield call(CheckXrefDuplicate, xrefData.get('competitorProductId'), xrefData.get('sponsorProductId')) || false;\n\n  if (isXrefsDuplicate) {\n    if (site === SiteName.pt) {\n      // AQ\n      yield put(new ToggleOverlayComponentAction({\n        id: LOADING_MODAL_ID,\n        open: false\n      }));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t(['translations:specToQuotePage.duplicateCrossReference']),\n        severity: 'error'\n      }));\n    } else {\n      // PIM Tool\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t(['translations:pimCrossReferenceProductDrawer.duplicateCrossReference']),\n        anchorOrigin: {\n          vertical: 'bottom',\n          horizontal: 'right'\n        }\n      }));\n    }\n    return;\n  }\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n\n    payload: {\n      service: 'xref',\n      endpoint: 'addXref',\n      body: {\n        ...xrefData.toJS()\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const xref: IMap<XrefData> = immutableData.getIn(['payload', 'xref', 'xref', 0]);\n    if (xref == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new AddXrefSuccessAction(xref));\n      if (onSuccess) {\n        onSuccess();\n      }\n\n      if (site === SiteName.pt) {\n        // AQ\n        yield put(new ToggleOverlayComponentAction({\n          id: LOADING_MODAL_ID,\n          open: false\n        }));\n        yield put(new SetSnackbarOpenAction({\n          message: i18next.t(['translations:specToQuotePage.createCrossReferenceSuccess']),\n          severity: 'success'\n        }));\n      } else {\n        // PIM Tool\n        yield put(new SetOverlayComponentPropsAction({\n          id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n          props: {\n            title: i18next.t(['translations:pimSuccessDrawer.addCrossReference']),\n            caption: i18next.t(['tranlations:pimSuccessDrawer.caption']),\n            withNewCrossButton: true,\n            withActionButtons: false\n          }\n        }));\n        yield put(new SetOverlayComponentContentAction({\n          id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n          content: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n        }));\n      }\n    };\n\n  } else {\n    const immutableErr = fromJS(err);\n    const code = immutableErr.getIn(['payload', 'error', 'code']);\n    const error = immutableErr.getIn(['payload', 'error', 'error']);\n\n    if (code === 400) {\n      yield put(new SetSnackbarOpenAction({\n        message: error,\n      }));\n      yield put(new ToggleOverlayComponentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        open: false,\n      }));\n      yield put(new SetOverlayComponentContentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        content: '',\n      }));\n    }\n    console.error('addXref failed', err); // tslint:disable-line\n  }\n}\n\nexport function* UpdateXref(\n  action: UpdateXrefAction\n) {\n  const {\n    payload: {\n      xrefId,\n      xref,\n      skipDuplicateCheck,\n      onSuccess\n    }\n  } = action;\n\n  let isXrefsDuplicate: boolean = skipDuplicateCheck ? false : yield call(CheckXrefDuplicate, xref.get('competitorProductId'), xref.get('sponsorProductId')) || false;\n\n  if (isXrefsDuplicate) {\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t(['translations:pimCrossReferenceProductDrawer.duplicateCrossReference']),\n      anchorOrigin: {\n        vertical: 'bottom',\n        horizontal: 'right'\n      }\n    }));\n    return;\n  }\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n\n    payload: {\n      service: 'xref',\n      endpoint: 'updateXref',\n      params: {\n        xrefId\n      },\n      body: {\n        ...xref.toJS()\n      },\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const xref: IMap<XrefData> = immutableData.getIn(['payload', 'xref', 'xref', 0]);\n    if (xref == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new UpdateXrefSuccessAction({ xrefId, xref }));\n\n      yield put(new SetOverlayComponentPropsAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n        props: {\n          title: i18next.t(['translations:pimSuccessDrawer.editCrossReference']),\n          caption: i18next.t(['tranlations:pimSuccessDrawer.caption']),\n          withActionButtons: false\n        }\n      }));\n      yield put(new SetOverlayComponentContentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        content: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n      }));\n    };\n    \n  } else {\n    const immutableErr = fromJS(err);\n    const code = immutableErr.getIn(['payload', 'error', 'code']);\n    const error = immutableErr.getIn(['payload', 'error', 'error']);\n\n    if (code === 400) {\n      yield put(new SetSnackbarOpenAction({\n        message: error,\n      }));\n      yield put(new ToggleOverlayComponentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        open: false,\n      }));\n      yield put(new SetOverlayComponentContentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        content: '',\n      }));\n    }\n\n    console.error('updateXref failed', err); // tslint:disable-line\n  }\n}\n\nfunction* CheckXrefDuplicate (\n  competitorProductId: string,\n  sponsorProductId: string,\n  types?: List<IMap<XrefType>>\n) {\n  yield put(new CheckDuplicateXrefLoadingAction(true));\n  const {\n    data, \n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'getSearchXrefs',\n      body: {\n        filters : {\n          'and': [\n            {\n              'competitorProductId': {\n                'eq': competitorProductId\n              }\n            },\n            {\n              'sponsorProductId': {\n                eq: sponsorProductId\n              }\n            }\n          ],\n        },\n        location: yield call(resolveXrefLocation,true),\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const xrefs = filterForValidXrefs(immutableData.getIn(['payload', 'xref', 'xref']));\n    yield put(new CheckDuplicateXrefLoadingAction(false));\n    return xrefs?.size > 0;\n  } else {\n    const immutableErr = fromJS(err);\n    const code = immutableErr.getIn(['payload', 'error', 'code']);\n    const error = immutableErr.getIn(['payload', 'error', 'error']);\n\n    if (code === 400) {\n      yield put(new SetSnackbarOpenAction({\n        message: error,\n      }));\n      yield put(new ToggleOverlayComponentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        open: false,\n      }));\n      yield put(new SetOverlayComponentContentAction({\n        id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n        content: '',\n      }));\n    }\n    console.error('checkXrefDuplicate failed', err); // tslint:disable-line\n    yield put(new CheckDuplicateXrefLoadingAction(false));\n  }\n}\n\nfunction* CreateSponsorProduct(\n    action: CreateSponsorProductAction\n) {\n  const {\n    payload: {\n      product,\n      type = 'product',\n      from,\n      filters,\n    }\n  } = action;\n  // check duplication\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'xref',\n      endpoint: 'searchXrefSponsor',\n      params: {\n        type\n      },\n      body: {\n        filters,\n        options: {\n          limit: 1\n        },\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const count: number = immutableData.getIn(['payload', 'xref', 'count']);\n    if (count > 0) {\n      // when there is a duplicate, stop creation\n      yield put(new CreateSponsorProductFailedAction({\n        error: 'duplicate',\n      }))\n    } else {\n      // when there is no duplicate, continue creating product\n      const {\n        data,\n        err,\n      }: {\n        data: any,\n        err: Error\n      } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'pim',\n          endpoint: type === 'product' ? 'addProduct' : 'addSeries',\n          body: {\n            ...product.toJS(),\n          },\n        }\n      }));\n      if (data) {\n        const immutableData = fromJS(data);\n        const productSeriesData: IMap<Product | Series> = immutableData.getIn(['payload', 'pim', type, 0]);\n        yield put(new CreateSponsorProductSucceedAction({ product: productSeriesData, type, from }));\n        yield put(new SetOverlayComponentPropsAction({\n          id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n          props: {\n            title: i18next.t('translations:pimCrossReferenceProductDrawer.addEditCompetitorProduct'),\n            caption: i18next.t('translations:pimCrossReferenceProductDrawer.productOrSeriesSavedMessage'),\n          }\n        }));\n        yield put(new SetOverlayComponentContentAction({\n          id: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceProductDrawer,\n          content: PIM_CROSS_REFERENCE_DRAWER_TYPE.PimCrossReferenceSuccessDrawer,\n        }));\n      } else {\n        console.error('add sponsor product error', { err }); // tslint:disable-line\n      }\n    }\n  } else {\n    console.error('searchXrefSponsor failed', err); // tslint:disable-line\n  }\n}","/*\n * CrossRefModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { ICrossRefReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface ICrossRefModuleComponentProps {\n}\n\ninterface ICrossRefModuleProps extends ICrossRefModuleComponentProps {\n  reducerState: IMapNonRecursive<ICrossRefReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype CrossRefModuleProps = ICrossRefModuleProps;\n\nclass CrossRefModule extends React.Component<CrossRefModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ICrossRefModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<ICrossRefModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(CrossRefModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './CrossRefModule';\nexport default Module;","import React, { useCallback, useState } from 'react';\nimport {Button, CircularProgress, Grid, IconButton, LinearProgress, Tooltip, Typography} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { AMPLITUDE_EVENT, CREATE_NEW_QUOTE_FROM_SPEC_PATH, NOT_FOUND_PATH, PROJECT_LIST_DETAIL_PATH } from '../../constants';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { SetTimerStartAction, ToggleOverlayComponentAction, ToggleTakeoffListAction } from '../../modules/ApplicationModule/actions';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { push } from 'connected-react-router/immutable';\nimport { TAKEOFF_DRAWER_ID } from '../TakeoffDrawer';\nimport classnames from 'classnames';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport PrintServiceApi from '../../modules/MsNotificationService/PrintServiceApi';\nimport { makeSelectAppId, makeSelectEnv, makeSelectUserIsAiQuotiUser } from '../../modules/AtsModule/selectors';\nimport AiServiceApi from '../../modules/MsAiService/AiService';\n\nexport enum TAKEOFF_PENDING_STATUS {\n  pending = 'pending',\n  processing = 'pending',\n  postprocessing = 'pending',\n  complete = 'complete',\n  completed = 'complete',\n  failed = 'failed',\n}\n\ninterface IJobItemProps {\n  status: string;\n  projectName: string;\n  projectId: number;\n  specId: number;\n  id?: string;\n  errorMessage?: string;\n  createdDate?: string;\n  getJobs: () => Promise<void>;\n  progress?: number;\n  stepName?: string;\n  pageInfo?: {\n    completed: number;\n    total: number;\n  };\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  progressContainer: {\n    marginTop: 2,\n    marginBottom: 6,\n  },\n  errorIcon: {\n    color: theme.palette.error.main,\n  },\n  linearProgressRoot: {\n    height: 10,\n    borderRadius: 8,\n    backgroundColor: '#f1f1f1',\n  },\n  linearProgressBar: {\n    backgroundColor: theme.palette.secondary[400],\n  },\n  button: {\n    marginLeft: 8,\n    marginRight: 8,\n    paddingLeft: 16,\n    paddingRight: 16,\n  },\n  outlinedButton: {\n    backgroundColor: theme.palette.common.white,\n  },\n  successJobContainer: {\n    cusror: 'pointer',\n    '&:hover': {\n      backgroundColor: '#ebf4ed',\n    },\n  },\n  failedJobContainer: {\n    cusror: 'pointer',\n    '&:hover': {\n      backgroundColor: '#fae1e1',\n    },\n  }\n}));\n\nconst JobItem = (props: IJobItemProps) => {\n  const { status, projectName, projectId, specId, id, errorMessage: message, createdDate, getJobs, progress: apiProgress, stepName, pageInfo } = props;\n\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const amplitudeData = useAmplitudeData();\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const isAiQuotiUser = useSelector(makeSelectUserIsAiQuotiUser());\n\n  const [expanded, setExpanded] = useState(false);\n\n  const isComplete = TAKEOFF_PENDING_STATUS[status] === 'complete';\n  const isPending = TAKEOFF_PENDING_STATUS[status] === 'pending';\n  const isFailed = TAKEOFF_PENDING_STATUS[status] === 'failed';\n  const progress = isComplete ? 100 : (apiProgress ?? (isPending ? 10 : 0));\n  const errorMessage = isFailed ? message || t('takeoffList.unknownError') : '';\n\n  // Get step display name based on stepName\n  const getStepLabel = () => {\n    if (!stepName || isComplete || isFailed) {\n      return '';\n    }\n\n    const stepKey = `takeoffList.steps.${stepName}`;\n    return t(stepKey);\n  };\n\n  // Get page progress text if available\n  const getPageProgressText = () => {\n    if (pageInfo && stepName === 'PROCESSING_OCR') {\n      return t('takeoffList.pageProgress', { completed: pageInfo.completed, total: pageInfo.total });\n    }\n    return '';\n  };\n\n  const stepLabel = getStepLabel();\n  const pageProgressText = getPageProgressText();\n\n  const toggleExpanded = () => {\n    if (!isPending) {\n      setExpanded(!expanded);\n    }\n  };\n\n  const handleConvertToQuote = (e) => {\n    e.stopPropagation();\n\n    amplitude.logEvent(AMPLITUDE_EVENT.specToQuoteOpened, amplitudeData({specIdToConvert: specId}));\n    dispatch(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.s2qLoadingTime}));\n    dispatch(push(`${CREATE_NEW_QUOTE_FROM_SPEC_PATH}/${specId}`, { refreshKey: new Date().getTime() }));\n  };\n\n  const handleViewTakeoff = (e) => {\n    e.stopPropagation();\n\n    dispatch(push(`/spec/${specId}`));\n  };\n\n  const handleTryAgain = (e) => {\n    e.stopPropagation();\n\n    dispatch(push(`${PROJECT_LIST_DETAIL_PATH}/${projectId}`));\n\n    dispatch(new ToggleOverlayComponentAction({\n      id: TAKEOFF_DRAWER_ID,\n      open: true,\n    }));\n    amplitude.logEvent(AMPLITUDE_EVENT.aiTakeoff, amplitudeData({createAITakeoff: 'Create AI Takeoff'}));\n\n    dispatch(new ToggleTakeoffListAction({ forceState: false }));\n  };\n\n  const handleHideJob = useCallback(async (e) => {\n    e.stopPropagation();\n    const request = isAiQuotiUser ? AiServiceApi.hidePrintJob : PrintServiceApi.hidePrintJob;\n    const hideJobPromise = request(env, appId, id);\n    hideJobPromise\n      .then(() => {\n        getJobs();\n      })\n      .catch((error) => {\n        console.error('Error hiding print job:', error); // tslint:disable-line\n      });\n  }, [id]);\n\n  return (\n    <Grid\n      style={{\n        ...expanded ? {backgroundColor: isComplete ? '#ebf4ed' : isPending ? '#fff' : '#fae1e1'} : {},\n        margin: 8,\n        padding: 8,\n        borderRadius: 5,\n      }}\n      className={\n        isComplete\n          ? classes.successJobContainer\n          : isFailed\n            ? classes.failedJobContainer\n            : null\n      }\n      onClick={toggleExpanded}\n    >\n      <Grid container={true} alignItems='center' justify='space-between' wrap='nowrap'>\n        <Typography color='textPrimary' style={{ wordBreak: 'break-word' }}>{projectName ?? '[N/A]'}</Typography>\n        <IconButton size='small' onClick={handleHideJob}>\n          <DeleteIcon />\n        </IconButton>\n      </Grid>\n      {stepLabel && (\n        <Typography variant='caption' color='textSecondary' style={{ marginLeft: 4 }}>\n          {stepLabel}\n          {pageProgressText && ` (${pageProgressText})`}\n        </Typography>\n      )}\n      <Grid container={true} alignItems='center' justify='space-between' wrap='nowrap' className={classes.progressContainer}>\n        <DescriptionIcon color='action' />\n        <Grid item={true} xs={10}>\n          <LinearProgress variant='determinate' value={progress} classes={{ root: classes.linearProgressRoot, bar: classes.linearProgressBar }} />\n        </Grid>\n        <div style={{ marginRight: 2 }}>\n          {\n            isComplete\n              ? <CheckCircleIcon color='secondary' />\n              : isPending\n                ? <CircularProgress color='secondary' size={24} />\n                : <Tooltip title={errorMessage}>\n                    <WarningIcon className={classes.errorIcon} />\n                  </Tooltip>\n          }\n        </div>\n      </Grid>\n      {\n        expanded\n          ? isComplete\n            ? <Grid container={true} alignItems='center' justify='center' wrap='nowrap'>\n                <Button variant='contained' color='primary' size='small' className={classes.button} onClick={handleConvertToQuote}>\n                  {t('takeoffList.convertToQuote')}\n                </Button>\n                <Button variant='outlined' color='primary' size='small' className={classnames(classes.button, classes.outlinedButton)} onClick={handleViewTakeoff}>\n                  {t('takeoffList.viewTakeoff')}\n                </Button>\n              </Grid>\n            : isFailed\n              ? <Grid container={true} alignItems='center' justify='center' wrap='nowrap'>\n                  <Button variant='outlined' color='primary' size='small' className={classnames(classes.button, classes.outlinedButton)} onClick={handleTryAgain}>\n                    {t('takeoffList.tryAgain')}\n                  </Button>\n                </Grid>\n              : null\n          : null\n        }\n    </Grid>\n  );\n};\n\nexport default React.memo(JobItem);","import _ from 'lodash';\nimport ApiClient from '../../utils/apiClient';\nconst apiEndPoint = 'ENDPOINT_APIGATEWAY';\n\ninterface IPrintServiceApiGetPrintJobsFilterParam {\n  projectId?: number;\n  offset?: number;\n  limit?: number;\n}\n\nconst PrintServiceApi = {\n  async getPrintJobs(env: any, appId: string, filterParam?: IPrintServiceApiGetPrintJobsFilterParam): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      let endpoint = `/msnotification/printJob.find`;\n      if (filterParam) {\n        endpoint += `?filter=${JSON.stringify(filterParam)}`;\n      }\n      const response = await apiClient.fetchData(endpoint);\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error PrintServiceApi.getPrintJobs:', error);\n      throw error;\n    }\n  },\n\n  async hidePrintJob(env: any, appId: string, id?: string): Promise<any> {\n    try {\n      const baseURL = env.get(apiEndPoint);\n      const apiClient = new ApiClient(baseURL, appId);\n      const response = await apiClient.post('/msnotification/printJob.hide', { id });\n      return response;\n    } catch (error) {\n      // tslint:disable-next-line:no-console\n      console.error('Error PrintServiceApi.hidePrintJob:', error);\n      throw error;\n    }\n  },\n};\n\nexport default PrintServiceApi;\n","// Pure helpers for merging `ai.operation.progress` SSE frames into the takeoff job\n// list. Kept out of the component so the merge rules are unit-testable. The progress\n// high-water mark is owned by the caller (Component.tsx): shouldApplyProgress decides\n// whether an incoming frame advances the bar, the caller commits the new mark outside\n// the React state updater, so mergeProgressFrame stays a pure function.\n\nexport interface IMergeableJob {\n  id: number | string; // backend ids arrive as either; matched via Number() coercion\n  progress?: number;\n  status?: string;\n  stepName?: string;\n  pageInfo?: { completed: number; total: number };\n  // rows carry many other fields (projectName, createdDate, ...) the merge passes through\n  [key: string]: unknown;\n}\n\nexport interface IProgressFrameData {\n  operationId: number | string; // the stream may deliver either; coerced on match\n  progress?: number;\n  stepName?: string;\n  status?: string;\n  pageInfo?: { completed: number; total: number };\n  // projectId scopes the terminal-frame refetch; the merge ignores it (full row state via getJobs)\n  projectId?: number | null;\n}\n\nexport function isTerminalStatus(status: unknown): boolean {\n  const normalized = String(status || '').toLowerCase();\n  // keep these terminal buckets in sync with TAKEOFF_PENDING_STATUS in JobItem.tsx\n  return normalized === 'complete' || normalized === 'completed' || normalized === 'failed';\n}\n\n// Decides whether an incoming progress value advances the bar: it must be a number\n// strictly above the highest value already seen for that operation. Out-of-order frames\n// (below the mark) and duplicates (equal to the mark) are dropped, so an equal-progress\n// frame does not trigger a needless array rebuild / re-render. Pure, so the caller can\n// read the high-water mark and commit the new one outside the React state updater.\nexport function shouldApplyProgress(progress: unknown, seen: number): boolean {\n  return typeof progress === 'number' && progress > seen;\n}\n\n// Whether a frame belongs to the currently open popup. Global popup (undefined): every frame.\n// Project popup: only frames whose projectId matches; missing/null never matches (guards\n// Number(null) === 0). Used both to scope the watermark and to gate the terminal-frame refetch.\nexport function isFrameInScope(\n  data: IProgressFrameData,\n  projectId: number | undefined,\n): boolean {\n  if (projectId === undefined) {\n    return true;\n  }\n  return data.projectId != null && Number(data.projectId) === projectId;\n}\n\n// Merges a progress frame into the existing rows and returns the next array — or the\n// same reference when nothing changed (no rows yet, an unknown operationId, or a\n// below-watermark frame with no other fields), so React can bail out of a re-render.\n// `applyProgress` is decided by the caller (shouldApplyProgress against the high-water\n// mark) and kept out so this stays pure; status / stepName / pageInfo always apply when\n// present, even for a below-watermark frame (e.g. a late terminal frame carrying stale\n// progress).\nexport function mergeProgressFrame(\n  prev: IMergeableJob[] | null,\n  data: IProgressFrameData,\n  applyProgress: boolean,\n): IMergeableJob[] | null {\n  if (!prev) {\n    return prev;\n  }\n  const opId = Number(data.operationId); // coerce so a string/number id pair still matches\n  const idx = prev.findIndex(job => Number(job.id) === opId);\n  if (idx < 0) {\n    return prev; // unknown id -> unchanged\n  }\n  // A row that already reached a terminal state is frozen: an out-of-order / duplicate /\n  // server-lag frame must not resurrect it. The caller routes terminal frames through a\n  // refetch rather than this merge, so every frame reaching here is non-terminal; a\n  // terminal row therefore stays frozen for progress, status, stepName and pageInfo alike.\n  if (isTerminalStatus(prev[idx].status)) {\n    return prev;\n  }\n  const hasOtherFields =\n    data.stepName !== undefined || data.status !== undefined || data.pageInfo !== undefined;\n  if (!applyProgress && !hasOtherFields) {\n    return prev; // nothing to apply\n  }\n  const next = [...prev];\n  next[idx] = {\n    ...next[idx],\n    ...(applyProgress ? { progress: data.progress } : {}),\n    ...(data.stepName !== undefined ? { stepName: data.stepName } : {}),\n    ...(data.status !== undefined ? { status: data.status } : {}),\n    ...(data.pageInfo !== undefined ? { pageInfo: data.pageInfo } : {}),\n  };\n  return next;\n}\n\n// Re-baselines the SSE watermarks against a freshly fetched job set (the periodic\n// refetch): rows that vanished lose their mark, and each surviving row's watermark and\n// displayed progress take the MAX of the server value and the highest already streamed,\n// so a refetch that lags the stream never rolls a progress bar backwards.\nexport function rebaselineHighWater(\n  newJobs: IMergeableJob[],\n  prevHighWater: Map<number, number>,\n): { jobs: IMergeableJob[]; highWater: Map<number, number> } {\n  const highWater = new Map<number, number>();\n  const jobs = newJobs.map(job => {\n    const id = Number(job.id);\n    const serverProgress = typeof job.progress === 'number' ? job.progress : undefined;\n    const streamed = prevHighWater.get(id);\n    if (serverProgress === undefined && streamed === undefined) {\n      return job;\n    }\n    const merged = Math.max(\n      serverProgress ?? Number.NEGATIVE_INFINITY,\n      streamed ?? Number.NEGATIVE_INFINITY,\n    );\n    highWater.set(id, merged);\n    return merged === serverProgress ? job : { ...job, progress: merged };\n  });\n  return { jobs, highWater };\n}\n","import { useRef } from 'react';\n\nfunction useLatest<T>(value: T) {\n  const ref = useRef(value);\n  ref.current = value;\n\n  return ref;\n}\n\nexport default useLatest;\n","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport {Button, CircularProgress, Grid, IconButton, Typography} from '@material-ui/core';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {makeSelectAppId, makeSelectEnv, makeSelectUserIsAiQuotiUser} from '../../modules/AtsModule/selectors';\nimport {Theme} from '@material-ui/core/';\nimport {makeStyles} from '@material-ui/core/styles';\nimport {useTranslation} from 'react-i18next';\nimport { PROJECT_LIST_DETAIL_PATH, getLocalePrefix } from '../../constants';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { makeSelectTakeoffListOpen } from '../../modules/ApplicationModule/selectors';\nimport { ToggleTakeoffListAction } from '../../modules/ApplicationModule/actions';\nimport PrintServiceApi from '../../modules/MsNotificationService/PrintServiceApi';\nimport JobItem, { TAKEOFF_PENDING_STATUS } from './JobItem';\nimport { CheckNotification } from '../../modules/NotificationModule/actions';\nimport { NOTIFICATION_TYPE } from '../../models/Notification';\nimport AiServiceApi from '../../modules/MsAiService/AiService';\nimport { sseClient, SSE_RECONNECTED_EVENT } from '../../services/sse/sseClient';\nimport { mergeProgressFrame, isTerminalStatus, shouldApplyProgress, rebaselineHighWater, isFrameInScope, IProgressFrameData, IMergeableJob } from './progressMerge';\nimport useLatest from '../../hooks/useLatest';\nimport { debounce } from 'lodash';\n\n// export const PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX = /^\\/projectList\\/detail\\/\\d+$/;\nexport const PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX = new RegExp(`^${PROJECT_LIST_DETAIL_PATH}/\\\\d+$`);\nconst INITIAL_LIMIT = 4;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  container: {\n    position: 'relative',\n    width: 480,\n    boxShadow: '4px 4px 6px 4px #0000001A',\n    border: '1px solid #0000001A',\n  },\n  title: {\n    textAlign: 'center',\n    paddingTop: 8,\n    paddingBottom: 4,\n    fontWeight: 'bold',\n  },\n  clearAllButton: {\n    position: 'absolute',\n    right: 42,\n    top: 4,\n  },\n  closeIcon: {\n    position: 'absolute',\n    right: 4,\n    top: 4,\n    color: theme.palette.grey[500],\n  },\n  jobsContainer: {\n    maxHeight: 292,\n    overflowY: 'auto',\n  },\n}));\n\nconst TakeOffList = () => {\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const env = useSelector(makeSelectEnv());\n  const appId = useSelector(makeSelectAppId());\n  const takeoffListOpen = useSelector(makeSelectTakeoffListOpen());\n  const isAiQuotiUser = useSelector(makeSelectUserIsAiQuotiUser());\n\n  const [jobs, setJobs] = useState(null);\n  const [limit, setLimit] = useState(INITIAL_LIMIT);\n  const [hasMore, setHasMore] = useState(true);\n\n  const loaderRef = useRef(null);\n  const listRef = useRef(null);\n  const path = useRef(window.location.pathname);\n  const hasPendingJob = useRef(false);\n  // operationId -> max progress shown via SSE; re-baselined by getJobs (max of server\n  // vs streamed) so a refetch never rolls a progress bar backwards\n  const highWaterRef = useRef(new Map<number, number>());\n  // request id: only the fetch that started last may commit (drops out-of-order stale responses)\n  const fetchSeqRef = useRef(0);\n\n  const pathname = window.location.pathname;\n\n  // projectId derived from the current path while open; null = closed (skips fetch/SSE).\n  // pathname is a dep so navigation re-derives it (no stale scope while the list stays open).\n  const projectId = useMemo<number|null|undefined>(() => {\n    if (!takeoffListOpen) {\n      return null;\n    }\n    const pathnameWithoutLocale = pathname.replace(getLocalePrefix(), '');\n    if (PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX.test(pathnameWithoutLocale)) {\n      const _projectId = Number(pathnameWithoutLocale.split(`${PROJECT_LIST_DETAIL_PATH}/`)[1]);\n      return isNaN(_projectId) ? null : _projectId;\n    }\n    return undefined;\n  }, [takeoffListOpen, pathname]);\n\n  const getJobs = useCallback(async () => {\n    const seq = ++fetchSeqRef.current; // before await\n    const request = isAiQuotiUser ? AiServiceApi.getPrintJobs : PrintServiceApi.getPrintJobs;\n    try {\n      const printJobs = await request(env, appId, { projectId, limit, offset: 0 });\n      if (seq !== fetchSeqRef.current) {\n        return; // superseded by a newer fetch; drop stale response before any side effect\n      }\n      const newJobs = (isAiQuotiUser ? printJobs?.payload?.msai : printJobs?.payload?.msnotification) || [];\n      const jobLength = newJobs?.length;\n\n      // reconcile fetched rows against the live SSE watermarks (see rebaselineHighWater)\n      const { jobs: reconciledJobs, highWater } = rebaselineHighWater(newJobs as IMergeableJob[], highWaterRef.current);\n      highWaterRef.current = highWater;\n\n      setJobs(reconciledJobs); // BE needs to return latest job first\n      setHasMore(Boolean(jobLength) && jobLength === limit);\n\n      // check if any job fetched has went from pending to complete/failed\n      const newHasPendingJob = newJobs.some(job => TAKEOFF_PENDING_STATUS[job.status] === 'pending');\n      if (!newHasPendingJob && hasPendingJob.current) {\n        dispatch(new CheckNotification({ notificationType: NOTIFICATION_TYPE.takeoffFinished }));\n      }\n      hasPendingJob.current = newHasPendingJob;\n    } catch (error) {\n      // SSE-triggered refetches are fire-and-forget; swallow gateway 5xx/timeout so a failed\n      // poll surfaces as a log line, not an unhandled rejection. State is left intact.\n      console.error('Error fetching takeoff jobs:', error); // tslint:disable-line\n    }\n  }, [projectId, limit, isAiQuotiUser, env, appId, dispatch]);\n\n  // read the latest getJobs without re-subscribing (its identity changes as `limit` grows)\n  const getJobsLatest = useLatest(getJobs);\n\n  // stable identity for JobItem: keeps React.memo effective, and lets a row's hide handler\n  // (frozen on [id]) refetch with the current limit instead of its first-render closure\n  const refetchJobs = useCallback(() => getJobsLatest.current(), []);\n\n  const handleClearAll = useCallback(async () => {\n    const request = isAiQuotiUser ? AiServiceApi.hidePrintJob : PrintServiceApi.hidePrintJob;\n    const hideJobPromise = request(env, appId);\n    hideJobPromise\n      .then(() => {\n        getJobsLatest.current(); // current projectId/limit, not the first-render closure\n      })\n      .catch((error) => {\n        console.error('Error clear all jobs:', error); // tslint:disable-line\n      });\n  }, [isAiQuotiUser, env, appId]);\n\n  // refresh the red dot on open; reset transient state on close\n  useEffect(() => {\n    if (takeoffListOpen) {\n      dispatch(new CheckNotification());\n    } else {\n      fetchSeqRef.current++; // invalidate any in-flight getJobs so it can't write back after close\n      setJobs(null);\n      setHasMore(true);\n      setLimit(INITIAL_LIMIT);\n      hasPendingJob.current = false;\n    }\n  }, [takeoffListOpen]);\n\n  // fetch on open, on load-more (limit), and on scope change (projectId); via ref to keep deps minimal\n  useEffect(() => {\n    if (takeoffListOpen && projectId !== null) {\n      getJobsLatest.current();\n    }\n  }, [limit, projectId, takeoffListOpen]);\n\n  // observe the loader element to trigger loading more jobs\n  useEffect(() => {\n    if (!loaderRef.current || !hasMore) {\n      return ;\n    }\n\n    const observer = new IntersectionObserver(entries => {\n      if (entries[0].isIntersecting) {\n        setLimit(prev => prev + INITIAL_LIMIT);\n      }\n    }, {\n      rootMargin: '20px',\n      threshold: 0,\n    });\n\n    observer.observe(loaderRef.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [hasMore, takeoffListOpen]);\n\n  // live in-row progress via SSE: the stream advances progress on existing rows; the full row set\n  // (new/removed rows, specId, errorMessage) comes from getJobs. Refetch (debounced to coalesce\n  // bursts) on each in-scope terminal frame and on reconnect; getJobs is read via ref.\n  useEffect(() => {\n    if (!takeoffListOpen || projectId === null) {\n      return;\n    }\n\n    const debouncedRefetch = debounce(() => getJobsLatest.current(), 500);\n\n    const unsubscribeProgress = sseClient.onSseEvent('ai.operation.progress', (frame) => {\n      const data = (frame.data || frame) as IProgressFrameData;\n      // commit the high-water mark outside the state updater so the updater stays pure;\n      // frames arrive one at a time, so the synchronous write stays correctly sequenced\n      const opId = Number(data.operationId);\n      const applyProgress = shouldApplyProgress(data.progress, highWaterRef.current.get(opId) ?? -1);\n      // only track the watermark for a frame in this popup's scope: an out-of-scope op's mark\n      // would never be read (merge no-ops on unknown ids) nor pruned (rebaselineHighWater rebuilds\n      // from in-scope rows), so it would leak one entry per foreign completion. An in-scope op that\n      // isn't currently displayed is bounded per project and harmless.\n      if (applyProgress && isFrameInScope(data, projectId)) {\n        highWaterRef.current.set(opId, data.progress as number);\n      }\n      if (isTerminalStatus(data.status)) {\n        // red dot on every completion; named so a check it lands in alongside\n        // an unrelated notification isn't taken for one about something else\n        dispatch(new CheckNotification({ notificationType: NOTIFICATION_TYPE.takeoffFinished }));\n        // refetch to converge final state + new/removed rows, but only for in-scope completions\n        if (isFrameInScope(data, projectId)) {\n          debouncedRefetch();\n        }\n      } else {\n        // unknown operationId is a no-op (mergeProgressFrame returns prev)\n        setJobs(prev => mergeProgressFrame(prev, data, applyProgress));\n      }\n    });\n\n    const unsubscribeReconnect = sseClient.onSseEvent(SSE_RECONNECTED_EVENT, () => debouncedRefetch());\n\n    return () => {\n      unsubscribeProgress();\n      unsubscribeReconnect();\n      debouncedRefetch.cancel(); // drop pending refetch on teardown\n    };\n  }, [takeoffListOpen, projectId]);\n\n  // grow the limit until the rows overflow the container (so the loader becomes scrollable).\n  // keyed on row COUNT, not the `jobs` reference: an SSE progress frame replaces the array\n  // without changing the row set, so re-measuring on every frame would be wasted work.\n  useEffect(() => {\n    const container = listRef.current;\n    if (takeoffListOpen && container.scrollHeight < container.clientHeight && hasMore) {\n      setLimit(prev => prev + INITIAL_LIMIT); // keep loading more until scroll is needed\n    }\n  }, [jobs?.length, hasMore, takeoffListOpen]);\n\n  // close the list on navigation; update path so it holds even if the component is long-lived\n  useEffect(() => {\n    if (pathname !== path.current) {\n      path.current = pathname;\n      handleClose();\n    }\n  }, [pathname]);\n\n  const handleClose = () => {\n    dispatch(new ToggleTakeoffListAction({ forceState: false }));\n  };\n\n  return (\n    <div className={classes.container}>\n      <Grid container={true} alignItems='center' justify='center' wrap='nowrap'>\n        <Typography variant='subtitle1' color='textPrimary' className={classes.title}>\n          {t('takeoffList.title')}\n        </Typography>\n        {\n          jobs?.length > 0 && (\n            <Button\n              color='primary'\n              size='small'\n              className={classes.clearAllButton}\n              onClick={handleClearAll}\n            >\n              {t('takeoffList.clearAll')}\n            </Button>\n            )\n        }\n        <IconButton size='small' className={classes.closeIcon} onClick={handleClose}>\n          <CloseIcon />\n        </IconButton>\n      </Grid>\n      <div ref={listRef} className={classes.jobsContainer}>\n        {\n          (!jobs)\n            ? <CircularProgress color='secondary' style={{ margin: '16px auto', display: 'block' }} />\n            : jobs.length\n                ?  jobs.map((job, index) => {\n                      const status = job?.status;\n                      const projectName = job.details?.projectName;\n                      const _projectId = job.referenceId || job.projectId;\n                      const specId = job.details?.specId;\n                      const id = job.drawingHash || String(job.id);\n                      const createdDate = job.createdDate || job.createdAt;\n                      const errorMessage = job.details?.message || job.errorData?.message;\n                      const progress = job?.progress;\n                      const stepName = job?.stepName;\n                      const pageInfo = job?.pageInfo;\n                      return (\n                        <JobItem\n                          key={id}\n                          status={status}\n                          projectName={projectName}\n                          projectId={_projectId}\n                          specId={specId}\n                          id={id}\n                          createdDate={createdDate}\n                          errorMessage={errorMessage}\n                          getJobs={refetchJobs}\n                          progress={progress}\n                          stepName={stepName}\n                          pageInfo={pageInfo}\n                        />\n                      );\n                    })\n                : (\n                  <Typography variant='subtitle2' color='textSecondary' style={{ textAlign: 'center', padding: 16 }}>\n                    {t('takeoffList.emptyMessage')}\n                  </Typography>\n                )\n          }\n        {hasMore ? <div ref={loaderRef} style={{ height: '1px' }} /> : null}\n      </div>\n    </div>\n  );\n};\n\nexport default TakeOffList;","export const DEFAULT_MOUNT_POINT: string = 'newMasterForm';\n\nexport default {\n  DEFAULT_MOUNT_POINT,\n};\n","/*\n * Reducer\n *\n * The reducer takes care of our data. Using actions, we can change our\n * application state.\n * To add a new action, add it to the switch statement in the reducer function\n *\n * Example:\n * case YOUR_ACTION_CONSTANT:\n *   return state.set('yourStateVariable', true);\n */\nimport { fromJS } from 'immutable';\nimport {\n  IAction,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  CreateNewMasterFromStepperActionTypes, SetFormValuesAction,\n} from './actions';\n\nimport {\n  Map,\n} from 'immutable';\n\nexport interface IFormStepperReducerState {\n  formValues: Map<string, any>;\n}\n\n// The initial state of the App\nconst INITIAL_STATE = fromJS({\n  formValues: {}\n});\n\nfunction Reducer(state: IMapNonRecursive<IFormStepperReducerState> = INITIAL_STATE, action: IAction) {\n  switch (action.type) {\n    case CreateNewMasterFromStepperActionTypes.SET_FORM_VALUES: {\n      const {\n        payload,\n      } = action as SetFormValuesAction;\n      return state.set('formValues', payload);\n      // return state.withMutations((ctx: any) => {\n      //   const payload: Map<string, any> = action.payload;\n      //   ctx.update('formValues', Map<string, any>(), (formValues: Map<string, any>) => {\n      //     return formValues.merge(payload);\n      //   });\n      // });\n    }\n    case CreateNewMasterFromStepperActionTypes.CLEAR_FORM_VALUES:\n      return state.set('formValues', Map<string, any>());\n    default:\n      return state;\n  }\n}\n\nexport default Reducer;\n","import { createSelector } from 'reselect';\nimport {\n  List,\n  Map,\n} from 'immutable';\n\nimport {\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\n\nimport {\n  IFormStepperReducerState,\n} from './reducer';\n\nlet initTime;\n\nexport const selectReducerState = () => (state: any) => {\n  const reducerState = state.get(DEFAULT_MOUNT_POINT);\n  if (reducerState != null) {\n    return reducerState;\n  }\n  const now = Date.now();\n  if (initTime == null) {\n    initTime = now;\n  }\n\n  if (now - initTime > 5000) {\n    console.warn(`Missing Reducer State: ${DEFAULT_MOUNT_POINT}, have you added CreateNewProjectFormStepper to your application?`, { // tslint:disable-line\n      state,\n    });\n  }\n  return Map();\n};\n\nexport const makeSelectFormValues = () => createSelector(\n  selectReducerState(),\n  (state: IMapNonRecursive<IFormStepperReducerState>) => state.get('formValues') || Map<string, any>(),\n);\n\nexport default {\n  selectReducerState,\n};","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  Stepper,\n  Step,\n  StepLabel,\n  StepContent,\n  Button,\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  CircularProgress,\n  Typography,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport NewMasterModalForm from '../Forms/NewMasterModalForm';\nimport NewProjectBuildingSelectionForm from '../Forms/NewProjectBuildingSelectionForm';\nimport {\n  UpdateProjectAndThenRedirectAction, CreateMasterProjectAction, UpdateMasterProjectAndRedirectAction, SetProjectMasterSavingAllowAction,\n} from '../../modules/ProjectModule/actions';\nimport Debug from '../Debug';\nimport {\n  injectReducer,\n} from '../../utils';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport reducer from './reducer';\nimport {\n  ClearFormValuesAction,\n  SetFormValuesAction,\n} from '../CreateNewMasterFormStepper/actions';\nimport {\n  Map,\n  List,\n  Set,\n} from 'immutable';\nimport {\n  Project,\n} from '../../models';\nimport {\n  makeSelectCollaborators,\n} from '../../modules/AccountModule/selectors';\nimport {\n  makeSelectSpec,\n} from '../../modules/SpecModule/selectors';\nimport { makeSelectFormValues } from './selectors';\nimport NewProjectKeyContactsForm from '../Forms/NewProjectKeyContactsForm';\nimport Collaborator, {\n  CollaboratorPermissionObject,\n} from '../../models/Collaborator';\nimport { PROJECT_LIST_DETAIL_PATH, PROJECT_DETAIL_PATH, AMPLITUDE_EVENT } from '../../constants';\nimport { makeSelectProjectFormActiveStep, makeSelectProjectMasterSavingAllow } from '../../modules/ProjectModule/selectors';\nimport { CreateMasterProjectFormVariant } from '../CreateNewMasterModal/constants';\nimport NewMasterCollaboratorsForm from '../Forms/NewMasterCollaboratorsForm';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { buildingAmplitudeData } from '../../modules/ProjectModule/saga';\n\ninterface IFormStepperState {\n  activeStep: number;\n}\n\nconst styles = (theme: Theme) => ({\n  root: {\n    width: '90%',\n    margin: '0 auto'\n  },\n  button: {\n    margin: theme.spacing(),\n  },\n  buttons : {\n    marginTop: theme.spacing() * 2,\n  },\n  resetContainer: {\n    padding: theme.spacing() * 3,\n  },\n  circularProgress: {\n    marginLeft: theme.spacing(3.5),\n    width: `calc(1em + ${theme.typography.button.fontSize}) !important`,\n    height: `calc(1em + ${theme.typography.button.fontSize}) !important`\n  }\n});\n\ninterface ICreateNewMasterFromStepperProps {\n  variantSet: Set<CreateMasterProjectFormVariant>,\n  project?: IMap<Project>,\n  projectId: number,\n}\n\ninterface IFormStepperProps extends ICreateNewMasterFromStepperProps {\n  dispatch: React.Dispatch<IAction>;\n  createMasterProject: (obj: IMap<Partial<Project>>) => void;\n  handleSubmit: (options: {\n    transform?: (values: Map<string, any>) => Map<string, any>,\n    callback?: (values?: Map<string, any>) => void\n  }) => boolean;\n  formValues: Map<string, any>;\n  collaborators: Map<number, IMap<Collaborator>>;\n  activeStep: number;\n  editMode: boolean;\n  updateProject: (projectId: number, obj: IMap<Partial<Project>>, forProjectTracker?: boolean) => void;\n  updateMasterProject: (projectId: number, obj: IMap<Partial<Project>>) => void;\n  savingAllow: boolean;\n  setProjectMasterSavingAllow: () => void;\n}\n\ntype StepperPropsWithStyles = IFormStepperProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & WithAmplitudeData;\n\nclass CreateNewMasterFromStepper extends React.Component<StepperPropsWithStyles, IFormStepperState> {\n  public state = {\n    activeStep: this.props.activeStep,\n  };\n\n\n  public componentWillUnmount(): void {\n    const { dispatch } = this.props;\n    dispatch(new ClearFormValuesAction());\n  }\n\n  public componentDidMount() {\n    const {\n      dispatch,\n      setProjectMasterSavingAllow\n    } = this.props;\n    dispatch(new ClearFormValuesAction());\n    setProjectMasterSavingAllow();\n  }\n\n  public handleSubmit = (\n    {\n      transform,\n      callback,\n    }:\n    {\n      transform?: (values: Map<string, any>) => Map<string, any>,\n      callback?: (values?: Map<string, any>) => void\n    }\n  ) => (values: Map<string, any>) => {\n    const {\n      dispatch,\n      formValues,\n    } = this.props;\n    const {\n      activeStep\n    } = this.state;\n\n    const transformedValues = transform != null\n    ? transform(values)\n    : values;\n\n    const mergedValues = formValues.merge(transformedValues);\n    if (activeStep === 0) {\n      dispatch(new ClearFormValuesAction());\n    }\n    dispatch(new SetFormValuesAction(mergedValues));\n    if(callback != null){\n      callback(mergedValues);\n    }\n    return true;\n  }\n\n  public render() {\n    const {\n      t,\n      classes,\n      variantSet,\n      project,\n      editMode,\n      savingAllow,\n      formValues\n    } = this.props;\n    const {\n      activeStep: _activeStep,\n    } = this.state;\n\n    const activeStep = editMode && project == null\n    ? -1\n    : _activeStep\n    return (\n      <div\n        className={classes.root}\n      >\n        <Stepper\n          activeStep={activeStep}\n          orientation='vertical'\n        >\n          <Step key={0}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterSteps.step${0}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewMasterModalForm\n                    variantSet={variantSet}\n                    data={project}\n                    onSubmit={this.handleSubmit({\n                      callback: this.changeStep(1)\n                    })}\n                  >\n                    <Button\n                      variant='contained'\n                      color='primary'\n                      type='submit'\n                      className={classes.button}\n                    >\n                      {t('formButtons.next')}\n                    </Button>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={this.changeStep(1)}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewMasterModalForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={1}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterSteps.step${1}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewProjectBuildingSelectionForm\n                    onSubmit={this.handleSubmit({\n                      callback: this.changeStep(1)\n                    })}\n                    data={project}\n                    variantSet={variantSet}\n                    isOptional={true}\n                  >\n                    <Grid\n                      className={classes.buttons}\n                    >\n                      <Button\n                        color='primary'\n                        onClick={this.changeStep(-1)}\n                        className={classes.button}\n                      >\n                        {t('formButtons.back')}\n                      </Button>\n                      <Button\n                        variant='contained'\n                        color='primary'\n                        type='submit'\n                        className={classes.button}\n                      >\n                        {t('formButtons.next')}\n                      </Button>\n                    </Grid>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={() => this.submitForm()}\n                            className={classes.button}\n                          >\n                            {t('formButtons.next')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewProjectBuildingSelectionForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={2}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t(`formStepping.createMasterSteps.step${2}`)}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <NewMasterCollaboratorsForm\n                    formValues={formValues}\n                    onSubmit={this.handleSubmit({\n                      callback: this.submitForm\n                    })}\n                  >\n                    <Grid container={true} alignItems='center'>\n                      <Button\n                        color='primary'\n                        onClick={this.changeStep(-1)}\n                        disabled={!savingAllow}\n                        className={classes.button}\n                      >\n                        {t('formButtons.back')}\n                      </Button>\n                      <Button\n                        variant='contained'\n                        color='primary'\n                        type='submit'\n                        disabled={!savingAllow}\n                        className={classes.button}\n                      >\n                        {t('formButtons.finish')}\n                      </Button>\n                      {\n                        savingAllow\n                          ? null\n                          : <CircularProgress color='primary' className={classes.circularProgress} />\n                      }\n                    </Grid>\n                    <Debug\n                      debugLevel={1}\n                      delayedRender={() => {\n                        return <React.Fragment>\n                          <Button\n                            variant='contained'\n                            color='primary'\n                            onClick={() => this.submitForm()}\n                            className={classes.button}\n                          >\n                            {t('formButtons.finish')}\n                          </Button>\n                        </React.Fragment>;\n                      }}\n                    />\n                  </NewMasterCollaboratorsForm>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n        </Stepper>\n      </div>\n    );\n  }\n  private changeStep = (index: number, absolute: boolean = false) => () => {\n    this.setState({\n      activeStep: absolute ? index : (this.state.activeStep + index)\n    });\n  };\n\n  private submitForm = (projectValues?: Map<string, any>) => {\n    const {\n      dispatch,\n      editMode,\n      projectId,\n      createMasterProject,\n      updateMasterProject,\n      amplitudeData\n    } = this.props;\n    // for Amplitude tracking\n    const projectName = projectValues && projectValues.get('name');\n    const country = projectValues && projectValues.getIn(['location', 'country', 'value']);\n    const province = projectValues && projectValues.getIn(['location', 'province', 'value'])\n                      ? projectValues.getIn(['location', 'province', 'value'])\n                      : '-';\n    const city = projectValues && projectValues.getIn(['location', 'city', 'value'])\n                  ? projectValues.getIn(['location', 'city', 'value'])\n                  : '-';\n    const buildingClasses = projectValues && projectValues.getIn(['building', 'buildingClasses']);\n    const buildingClassesString = buildingClasses.size === 0 ? '-' : buildingClasses.map( x => x.get('value')).join();\n    const buildingTypes = buildingClasses.reduce((acc, buildingClass) => {\n      const types = buildingClass.get('buildingTypes').map((buildingType) => {\n        return buildingType.get('value');\n      });\n      return acc.push(types).flatten(Infinity);\n    },List());\n    const buildingTypesString = buildingTypes.size === 0 ? '-' : buildingTypes.join();\n    \n    const analyticTracking = () => {\n      amplitude.logEvent(AMPLITUDE_EVENT.projectCreated,\n      amplitudeData({\n        projectName,\n        projectType : 'Master',\n        country,\n        province,\n        city,\n        bidDate: '-',\n        area: '-',\n        buildingClassesCount: `${buildingClasses.size}`,\n        buildingClasses: buildingClassesString,\n        buildingTypesCount: `${buildingTypes.size}`,\n        buildingTypes: buildingTypesString,\n        ...buildingAmplitudeData(buildingClasses).toJS()\n      }))\n    }\n    \n    editMode\n      ? updateMasterProject(projectId, projectValues)\n      : (\n          createMasterProject(projectValues),\n          analyticTracking()\n        );\n  }\n}\n\nconst mapStateToProps = (state: any, props: ICreateNewMasterFromStepperProps) => {\n  const editMode = props.variantSet.has(CreateMasterProjectFormVariant.WITH_EDIT_MODE);\n  const project = editMode ? props.project : undefined;\n\n  return {\n    ...createStructuredSelector({\n      formValues: makeSelectFormValues(),\n      selectedSpec: makeSelectSpec(),\n      activeStep: makeSelectProjectFormActiveStep(),\n      savingAllow: makeSelectProjectMasterSavingAllow(),\n    })(state),\n    project,\n    editMode,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    createMasterProject: (obj: IMap<Partial<Project>>) => {\n      dispatch(new CreateMasterProjectAction({\n        master: obj.toJS()\n      }));\n    },\n    updateMasterProject: (projectId: number, obj: IMap<Project>) => {\n      dispatch(new UpdateMasterProjectAndRedirectAction({projectId, project: obj}));\n    },\n    updateProject: (projectId: number, obj: IMap<Project>, forProjectTracker?: boolean) => {\n      const redirect = forProjectTracker ? `${PROJECT_LIST_DETAIL_PATH}/${projectId}` : `${PROJECT_DETAIL_PATH}/${projectId}`;\n      dispatch(new UpdateProjectAndThenRedirectAction({projectId, project: obj, redirect}));\n    },\n    setProjectMasterSavingAllow: () => {\n      dispatch(new SetProjectMasterSavingAllowAction({ allow: true }));\n    },\n    dispatch,\n  };\n};\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n\n  const project = stateProps.formValues.count() ? stateProps.formValues : stateProps.project\n\n  return {\n    ...stateProps,\n    ...dispatchProps,\n    ...ownProps,\n    project\n  }\n}\n\nexport default compose<React.ComponentClass<ICreateNewMasterFromStepperProps>>(\n  withStyles(styles, { withTheme: true }),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  connect(mapStateToProps, mapDispatchToProps, mergeProps),\n  withTranslation('translations'),\n  withAmplitudeData\n)(CreateNewMasterFromStepper);\n","import * as React from 'react';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  PropTypes,\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  Button,\n  Dialog,\n  Grid,\n  Toolbar,\n  AppBar,\n  IconButton,\n  Typography,\n  Slide,\n  Theme,\n  WithTheme\n} from '@material-ui/core';\n\nimport CloseIcon from '@material-ui/icons/Close';\n\nimport {\n  TransitionProps\n} from '@material-ui/core/transitions/transition';\n\nimport {\n  CreateMasterProjectFormVariant\n} from './constants';\nimport { Set } from 'immutable';\nimport withProjectId, {\n  WithProjectId,\n  ComponentProps as WithProjectIdComponentProps,\n} from '../../hoc/withProjectId';\nimport { singleOrArray, IAction } from 'ats-utils/src';\nimport { createStructuredSelector } from 'reselect';\nimport { push } from 'connected-react-router';\nimport { NOT_FOUND_PATH } from '../../constants';\nimport DeleteModalDialog from '../../components/DeleteModalDialog';\nimport CreateNewMasterFormStepper from '../CreateNewMasterFormStepper';\nimport { AtsSvgMaster } from '../../components/AtsSvg/AtsSvgMaster';\nimport { makeSelectProjectMasterSavingAllow } from '../../modules/ProjectModule/selectors';\nimport { makeSelectConfigAtsSvgProps, makeSelectConfigUiOverridesAppBarColor, makeSelectIsAtsSpecTool } from '../../modules/AtsModule/selectors';\n\nconst Transition = React.forwardRef<{}, TransitionProps>(function BareTransition(props, ref) {\n  return <Slide direction='up' ref={ref} {...props} />;\n});\n\n\nconst styles = (theme: Theme): StyleRules => {\n  return {\n    appBar: {\n      position: 'relative',\n    },\n    subtitle: {\n      flex: 1,\n      color: theme.palette.common.white\n    },\n    title: {\n      flex: 1\n    },\n    icon: {\n      margin: theme.spacing() * 2,\n      fontSize: theme.spacing() * 6,\n      width: 72,\n      height: 72\n    },\n    titleContainer: {\n      margin: `${theme.spacing() * 2.5}px 0`\n    },\n    iconContainer: {\n      margin: `0 ${theme.spacing() * 2.5}px 0 0`\n    }\n  };\n};\n\ntype IToggleFunction = () => void;\n\ninterface IMasterModalComponentCommonProps {\n  variantSet?: Set<CreateMasterProjectFormVariant>;\n}\n\ninterface IMasterModalProps  {\n  dispatch: React.Dispatch<IAction>;\n  savingAllow: boolean;\n  isAtsSpecTool: boolean;\n  configAtsSvgProps: object;\n  appBarColor: PropTypes.Color;\n}\n\ninterface IModal {\n  isOpen: boolean;\n  toggleOpenCreateMasterModal: (arg: boolean) => void;\n}\n\ninterface IUncontrolledModal {\n  open?: never;\n  toggle?: never;\n}\n\ninterface IControlledModal {\n  open: boolean;\n  toggle: (o: boolean) => IToggleFunction;\n}\n\ntype MasterModalComponentProps =  IMasterModalComponentCommonProps & (IUncontrolledModal | IControlledModal);\n\ntype MasterModalProps = IMasterModalProps & WithProjectId & MasterModalComponentProps & IModal & WithTranslation & WithTheme & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IMasterModalState {\n  open: boolean;\n  discardModalOpen: boolean;\n}\n\nclass CreateNewMasterModal extends React.Component<\n  MasterModalProps,\n  IMasterModalState\n> {\n  public state = {\n    open: false,\n    discardModalOpen: false\n  };\n\n  public componentDidUpdate = (prevProps) => {\n    const {\n      dispatch,\n      projectId,\n      selectedId,\n    } = this.props;\n    // added a check to make sure that 'prevProps.selectedId !== selectedId' to prevent a race condition with reduxw where a comparison would be made before the Redux store was updated\n    if (projectId !== -1 && Number(selectedId) !== -1 && String(projectId) !== String(selectedId) && String(prevProps.selectedId) !== String(selectedId)) {\n      dispatch(push(NOT_FOUND_PATH));\n    }\n  }\n\n  public openDiscardModal = () => this.setState({discardModalOpen: true});\n\n  public render() {\n    const {\n      classes,\n      t,\n      open: controlledOpen,\n      toggle = this.toggleDialog,\n      variantSet = Set(),\n      project,\n      projectId,\n      theme,\n      savingAllow,\n      isAtsSpecTool,\n      configAtsSvgProps,\n      appBarColor,\n    } = this.props;\n\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    const controlled = controlledOpen != null;\n    const open = controlled ? controlledOpen : uncontrolledOpen;\n    const editMode = variantSet.has(CreateMasterProjectFormVariant.WITH_EDIT_MODE);\n\n    return (\n      <div>\n        { !controlled &&\n          <Button\n            onClick={this.toggleDialog(true)}\n          >\n            {\n              editMode\n                ? t('createNewMasterProject.Edit')\n                : t('createNewMasterProject.Title')\n            }\n          </Button>\n        }\n\n        <Dialog\n          fullScreen={true}\n          open={open || false}\n          onClose={this.openDiscardModal}\n          TransitionComponent={Transition}\n        >\n          <AppBar\n            className={classes.appBar}\n            color={appBarColor ? appBarColor : 'primary'}\n          >\n            <Toolbar>\n              <IconButton\n                color='inherit'\n                onClick={this.openDiscardModal}\n                aria-label='Close'\n                disabled={!savingAllow}\n              >\n                <CloseIcon />\n              </IconButton>\n              <Typography\n                variant='h6'\n                className={classes.subtitle}\n              >\n                {\n                  editMode\n                    ? t('createNewMasterProject.Edit')\n                    : t('createNewMasterProject.Title')\n                }\n              </Typography>\n            </Toolbar>\n          </AppBar>\n          <Grid\n            container={true}\n            justify='center'\n            alignItems='center'\n            className={classes.titleContainer}\n          >\n            <Grid\n              item={true}\n              className={classes.iconContainer}\n            >\n              <AtsSvgMaster\n                width='72'\n                height='72'\n                color={{\n                  backgroundColor: isAtsSpecTool ? theme.palette.secondary[200] : theme.palette.primary[200],\n                  shadowColor: isAtsSpecTool ? theme.palette.secondary.main : theme.palette.primary.main\n                }}\n                {...configAtsSvgProps}\n              />\n            </Grid>\n            <Grid\n              item={true}\n            >\n              <Typography\n                variant='h4'\n                className={classes.title}\n              >\n                {\n                  editMode\n                    ? t('createNewMasterProject.Edit')\n                    : t('createNewMasterProject.Title')\n                }\n              </Typography>\n            </Grid>\n          </Grid>\n          <CreateNewMasterFormStepper\n            variantSet={variantSet}\n            project={editMode ? project : undefined}\n            projectId={editMode ? projectId : -1}\n          />\n        </Dialog>\n        <DeleteModalDialog\n          open={this.state.discardModalOpen}\n          contentText={'Discard unsaved changes?'}\n          dialogProps={{\n            maxWidth: 'xs',\n            fullWidth: true\n          }}\n          buttonOk='Discard'\n          toggleDeleteModal={() => this.setState({discardModalOpen: false})}\n          handleDelete={() => {this.setState({discardModalOpen: false}); toggle(false)();}}\n          withLoading={false}\n        />\n      </div>\n    );\n  }\n\n  private toggleDialog = (open: boolean) => () => {\n    const {\n      open: uncontrolledOpen,\n    } = this.state;\n    this.setState({\n      open: open != null ? open : !uncontrolledOpen\n    });\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  savingAllow: makeSelectProjectMasterSavingAllow(),\n  isAtsSpecTool: makeSelectIsAtsSpecTool(),\n  configAtsSvgProps: makeSelectConfigAtsSvgProps(),\n  appBarColor: makeSelectConfigUiOverridesAppBarColor(),\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<MasterModalComponentProps & WithProjectIdComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withProjectId({withProject: true}),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(CreateNewMasterModal);\n","var prefix = \"far\";\nvar faAddressBook = {\n  prefix: 'far',\n  iconName: 'address-book',\n  icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faAddressCard = {\n  prefix: 'far',\n  iconName: 'address-card',\n  icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z\"]\n};\nvar faAngry = {\n  prefix: 'far',\n  iconName: 'angry',\n  icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z\"]\n};\nvar faArrowAltCircleDown = {\n  prefix: 'far',\n  iconName: 'arrow-alt-circle-down',\n  icon: [512, 512, [], \"f358\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n  prefix: 'far',\n  iconName: 'arrow-alt-circle-left',\n  icon: [512, 512, [], \"f359\", \"M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z\"]\n};\nvar faArrowAltCircleRight = {\n  prefix: 'far',\n  iconName: 'arrow-alt-circle-right',\n  icon: [512, 512, [], \"f35a\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"]\n};\nvar faArrowAltCircleUp = {\n  prefix: 'far',\n  iconName: 'arrow-alt-circle-up',\n  icon: [512, 512, [], \"f35b\", \"M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z\"]\n};\nvar faBell = {\n  prefix: 'far',\n  iconName: 'bell',\n  icon: [448, 512, [], \"f0f3\", \"M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBellSlash = {\n  prefix: 'far',\n  iconName: 'bell-slash',\n  icon: [640, 512, [], \"f1f6\", \"M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBookmark = {\n  prefix: 'far',\n  iconName: 'bookmark',\n  icon: [384, 512, [], \"f02e\", \"M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z\"]\n};\nvar faBuilding = {\n  prefix: 'far',\n  iconName: 'building',\n  icon: [448, 512, [], \"f1ad\", \"M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z\"]\n};\nvar faCalendar = {\n  prefix: 'far',\n  iconName: 'calendar',\n  icon: [448, 512, [], \"f133\", \"M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z\"]\n};\nvar faCalendarAlt = {\n  prefix: 'far',\n  iconName: 'calendar-alt',\n  icon: [448, 512, [], \"f073\", \"M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarCheck = {\n  prefix: 'far',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z\"]\n};\nvar faCalendarMinus = {\n  prefix: 'far',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarPlus = {\n  prefix: 'far',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarTimes = {\n  prefix: 'far',\n  iconName: 'calendar-times',\n  icon: [448, 512, [], \"f273\", \"M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareDown = {\n  prefix: 'far',\n  iconName: 'caret-square-down',\n  icon: [448, 512, [], \"f150\", \"M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareLeft = {\n  prefix: 'far',\n  iconName: 'caret-square-left',\n  icon: [448, 512, [], \"f191\", \"M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareRight = {\n  prefix: 'far',\n  iconName: 'caret-square-right',\n  icon: [448, 512, [], \"f152\", \"M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareUp = {\n  prefix: 'far',\n  iconName: 'caret-square-up',\n  icon: [448, 512, [], \"f151\", \"M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faChartBar = {\n  prefix: 'far',\n  iconName: 'chart-bar',\n  icon: [512, 512, [], \"f080\", \"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\"]\n};\nvar faCheckCircle = {\n  prefix: 'far',\n  iconName: 'check-circle',\n  icon: [512, 512, [], \"f058\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"]\n};\nvar faCheckSquare = {\n  prefix: 'far',\n  iconName: 'check-square',\n  icon: [448, 512, [], \"f14a\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z\"]\n};\nvar faCircle = {\n  prefix: 'far',\n  iconName: 'circle',\n  icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z\"]\n};\nvar faClipboard = {\n  prefix: 'far',\n  iconName: 'clipboard',\n  icon: [384, 512, [], \"f328\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z\"]\n};\nvar faClock = {\n  prefix: 'far',\n  iconName: 'clock',\n  icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n  prefix: 'far',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z\"]\n};\nvar faClosedCaptioning = {\n  prefix: 'far',\n  iconName: 'closed-captioning',\n  icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z\"]\n};\nvar faComment = {\n  prefix: 'far',\n  iconName: 'comment',\n  icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faCommentAlt = {\n  prefix: 'far',\n  iconName: 'comment-alt',\n  icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z\"]\n};\nvar faCommentDots = {\n  prefix: 'far',\n  iconName: 'comment-dots',\n  icon: [512, 512, [], \"f4ad\", \"M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faComments = {\n  prefix: 'far',\n  iconName: 'comments',\n  icon: [576, 512, [], \"f086\", \"M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z\"]\n};\nvar faCompass = {\n  prefix: 'far',\n  iconName: 'compass',\n  icon: [496, 512, [], \"f14e\", \"M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faCopy = {\n  prefix: 'far',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"]\n};\nvar faCopyright = {\n  prefix: 'far',\n  iconName: 'copyright',\n  icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z\"]\n};\nvar faCreditCard = {\n  prefix: 'far',\n  iconName: 'credit-card',\n  icon: [576, 512, [], \"f09d\", \"M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z\"]\n};\nvar faDizzy = {\n  prefix: 'far',\n  iconName: 'dizzy',\n  icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z\"]\n};\nvar faDotCircle = {\n  prefix: 'far',\n  iconName: 'dot-circle',\n  icon: [512, 512, [], \"f192\", \"M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\"]\n};\nvar faEdit = {\n  prefix: 'far',\n  iconName: 'edit',\n  icon: [576, 512, [], \"f044\", \"M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z\"]\n};\nvar faEnvelope = {\n  prefix: 'far',\n  iconName: 'envelope',\n  icon: [512, 512, [], \"f0e0\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z\"]\n};\nvar faEnvelopeOpen = {\n  prefix: 'far',\n  iconName: 'envelope-open',\n  icon: [512, 512, [], \"f2b6\", \"M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z\"]\n};\nvar faEye = {\n  prefix: 'far',\n  iconName: 'eye',\n  icon: [576, 512, [], \"f06e\", \"M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z\"]\n};\nvar faEyeSlash = {\n  prefix: 'far',\n  iconName: 'eye-slash',\n  icon: [640, 512, [], \"f070\", \"M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z\"]\n};\nvar faFile = {\n  prefix: 'far',\n  iconName: 'file',\n  icon: [384, 512, [], \"f15b\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"]\n};\nvar faFileAlt = {\n  prefix: 'far',\n  iconName: 'file-alt',\n  icon: [384, 512, [], \"f15c\", \"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z\"]\n};\nvar faFileArchive = {\n  prefix: 'far',\n  iconName: 'file-archive',\n  icon: [384, 512, [], \"f1c6\", \"M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z\"]\n};\nvar faFileAudio = {\n  prefix: 'far',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z\"]\n};\nvar faFileCode = {\n  prefix: 'far',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z\"]\n};\nvar faFileExcel = {\n  prefix: 'far',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z\"]\n};\nvar faFileImage = {\n  prefix: 'far',\n  iconName: 'file-image',\n  icon: [384, 512, [], \"f1c5\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z\"]\n};\nvar faFilePdf = {\n  prefix: 'far',\n  iconName: 'file-pdf',\n  icon: [384, 512, [], \"f1c1\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z\"]\n};\nvar faFilePowerpoint = {\n  prefix: 'far',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z\"]\n};\nvar faFileVideo = {\n  prefix: 'far',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z\"]\n};\nvar faFileWord = {\n  prefix: 'far',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z\"]\n};\nvar faFlag = {\n  prefix: 'far',\n  iconName: 'flag',\n  icon: [512, 512, [], \"f024\", \"M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z\"]\n};\nvar faFlushed = {\n  prefix: 'far',\n  iconName: 'flushed',\n  icon: [496, 512, [], \"f579\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faFolder = {\n  prefix: 'far',\n  iconName: 'folder',\n  icon: [512, 512, [], \"f07b\", \"M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z\"]\n};\nvar faFolderOpen = {\n  prefix: 'far',\n  iconName: 'folder-open',\n  icon: [576, 512, [], \"f07c\", \"M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z\"]\n};\nvar faFontAwesomeLogoFull = {\n  prefix: 'far',\n  iconName: 'font-awesome-logo-full',\n  icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFrown = {\n  prefix: 'far',\n  iconName: 'frown',\n  icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z\"]\n};\nvar faFrownOpen = {\n  prefix: 'far',\n  iconName: 'frown-open',\n  icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z\"]\n};\nvar faFutbol = {\n  prefix: 'far',\n  iconName: 'futbol',\n  icon: [496, 512, [], \"f1e3\", \"M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z\"]\n};\nvar faGem = {\n  prefix: 'far',\n  iconName: 'gem',\n  icon: [576, 512, [], \"f3a5\", \"M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z\"]\n};\nvar faGrimace = {\n  prefix: 'far',\n  iconName: 'grimace',\n  icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z\"]\n};\nvar faGrin = {\n  prefix: 'far',\n  iconName: 'grin',\n  icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faGrinAlt = {\n  prefix: 'far',\n  iconName: 'grin-alt',\n  icon: [496, 512, [], \"f581\", \"M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z\"]\n};\nvar faGrinBeam = {\n  prefix: 'far',\n  iconName: 'grin-beam',\n  icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z\"]\n};\nvar faGrinBeamSweat = {\n  prefix: 'far',\n  iconName: 'grin-beam-sweat',\n  icon: [496, 512, [], \"f583\", \"M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinHearts = {\n  prefix: 'far',\n  iconName: 'grin-hearts',\n  icon: [496, 512, [], \"f584\", \"M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z\"]\n};\nvar faGrinSquint = {\n  prefix: 'far',\n  iconName: 'grin-squint',\n  icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z\"]\n};\nvar faGrinSquintTears = {\n  prefix: 'far',\n  iconName: 'grin-squint-tears',\n  icon: [512, 512, [], \"f586\", \"M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z\"]\n};\nvar faGrinStars = {\n  prefix: 'far',\n  iconName: 'grin-stars',\n  icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z\"]\n};\nvar faGrinTears = {\n  prefix: 'far',\n  iconName: 'grin-tears',\n  icon: [640, 512, [], \"f588\", \"M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinTongue = {\n  prefix: 'far',\n  iconName: 'grin-tongue',\n  icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faGrinTongueSquint = {\n  prefix: 'far',\n  iconName: 'grin-tongue-squint',\n  icon: [496, 512, [], \"f58a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z\"]\n};\nvar faGrinTongueWink = {\n  prefix: 'far',\n  iconName: 'grin-tongue-wink',\n  icon: [496, 512, [], \"f58b\", \"M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z\"]\n};\nvar faGrinWink = {\n  prefix: 'far',\n  iconName: 'grin-wink',\n  icon: [496, 512, [], \"f58c\", \"M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faHandLizard = {\n  prefix: 'far',\n  iconName: 'hand-lizard',\n  icon: [576, 512, [], \"f258\", \"M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z\"]\n};\nvar faHandPaper = {\n  prefix: 'far',\n  iconName: 'hand-paper',\n  icon: [448, 512, [], \"f256\", \"M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z\"]\n};\nvar faHandPeace = {\n  prefix: 'far',\n  iconName: 'hand-peace',\n  icon: [448, 512, [], \"f25b\", \"M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z\"]\n};\nvar faHandPointDown = {\n  prefix: 'far',\n  iconName: 'hand-point-down',\n  icon: [448, 512, [], \"f0a7\", \"M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z\"]\n};\nvar faHandPointLeft = {\n  prefix: 'far',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointRight = {\n  prefix: 'far',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faHandPointUp = {\n  prefix: 'far',\n  iconName: 'hand-point-up',\n  icon: [448, 512, [], \"f0a6\", \"M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointer = {\n  prefix: 'far',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z\"]\n};\nvar faHandRock = {\n  prefix: 'far',\n  iconName: 'hand-rock',\n  icon: [512, 512, [], \"f255\", \"M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z\"]\n};\nvar faHandScissors = {\n  prefix: 'far',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z\"]\n};\nvar faHandSpock = {\n  prefix: 'far',\n  iconName: 'hand-spock',\n  icon: [512, 512, [], \"f259\", \"M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z\"]\n};\nvar faHandshake = {\n  prefix: 'far',\n  iconName: 'handshake',\n  icon: [640, 512, [], \"f2b5\", \"M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z\"]\n};\nvar faHdd = {\n  prefix: 'far',\n  iconName: 'hdd',\n  icon: [576, 512, [], \"f0a0\", \"M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z\"]\n};\nvar faHeart = {\n  prefix: 'far',\n  iconName: 'heart',\n  icon: [512, 512, [], \"f004\", \"M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z\"]\n};\nvar faHospital = {\n  prefix: 'far',\n  iconName: 'hospital',\n  icon: [448, 512, [], \"f0f8\", \"M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z\"]\n};\nvar faHourglass = {\n  prefix: 'far',\n  iconName: 'hourglass',\n  icon: [384, 512, [], \"f254\", \"M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z\"]\n};\nvar faIdBadge = {\n  prefix: 'far',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faIdCard = {\n  prefix: 'far',\n  iconName: 'id-card',\n  icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faImage = {\n  prefix: 'far',\n  iconName: 'image',\n  icon: [512, 512, [], \"f03e\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z\"]\n};\nvar faImages = {\n  prefix: 'far',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z\"]\n};\nvar faKeyboard = {\n  prefix: 'far',\n  iconName: 'keyboard',\n  icon: [576, 512, [], \"f11c\", \"M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z\"]\n};\nvar faKiss = {\n  prefix: 'far',\n  iconName: 'kiss',\n  icon: [496, 512, [], \"f596\", \"M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faKissBeam = {\n  prefix: 'far',\n  iconName: 'kiss-beam',\n  icon: [496, 512, [], \"f597\", \"M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z\"]\n};\nvar faKissWinkHeart = {\n  prefix: 'far',\n  iconName: 'kiss-wink-heart',\n  icon: [504, 512, [], \"f598\", \"M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z\"]\n};\nvar faLaugh = {\n  prefix: 'far',\n  iconName: 'laugh',\n  icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughBeam = {\n  prefix: 'far',\n  iconName: 'laugh-beam',\n  icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughSquint = {\n  prefix: 'far',\n  iconName: 'laugh-squint',\n  icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughWink = {\n  prefix: 'far',\n  iconName: 'laugh-wink',\n  icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLemon = {\n  prefix: 'far',\n  iconName: 'lemon',\n  icon: [512, 512, [], \"f094\", \"M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z\"]\n};\nvar faLifeRing = {\n  prefix: 'far',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z\"]\n};\nvar faLightbulb = {\n  prefix: 'far',\n  iconName: 'lightbulb',\n  icon: [352, 512, [], \"f0eb\", \"M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z\"]\n};\nvar faListAlt = {\n  prefix: 'far',\n  iconName: 'list-alt',\n  icon: [512, 512, [], \"f022\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z\"]\n};\nvar faMap = {\n  prefix: 'far',\n  iconName: 'map',\n  icon: [576, 512, [], \"f279\", \"M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z\"]\n};\nvar faMeh = {\n  prefix: 'far',\n  iconName: 'meh',\n  icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMehBlank = {\n  prefix: 'far',\n  iconName: 'meh-blank',\n  icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faMehRollingEyes = {\n  prefix: 'far',\n  iconName: 'meh-rolling-eyes',\n  icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMinusSquare = {\n  prefix: 'far',\n  iconName: 'minus-square',\n  icon: [448, 512, [], \"f146\", \"M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faMoneyBillAlt = {\n  prefix: 'far',\n  iconName: 'money-bill-alt',\n  icon: [640, 512, [], \"f3d1\", \"M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z\"]\n};\nvar faMoon = {\n  prefix: 'far',\n  iconName: 'moon',\n  icon: [512, 512, [], \"f186\", \"M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z\"]\n};\nvar faNewspaper = {\n  prefix: 'far',\n  iconName: 'newspaper',\n  icon: [576, 512, [], \"f1ea\", \"M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z\"]\n};\nvar faObjectGroup = {\n  prefix: 'far',\n  iconName: 'object-group',\n  icon: [512, 512, [], \"f247\", \"M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z\"]\n};\nvar faObjectUngroup = {\n  prefix: 'far',\n  iconName: 'object-ungroup',\n  icon: [576, 512, [], \"f248\", \"M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z\"]\n};\nvar faPaperPlane = {\n  prefix: 'far',\n  iconName: 'paper-plane',\n  icon: [512, 512, [], \"f1d8\", \"M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z\"]\n};\nvar faPauseCircle = {\n  prefix: 'far',\n  iconName: 'pause-circle',\n  icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z\"]\n};\nvar faPlayCircle = {\n  prefix: 'far',\n  iconName: 'play-circle',\n  icon: [512, 512, [], \"f144\", \"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"]\n};\nvar faPlusSquare = {\n  prefix: 'far',\n  iconName: 'plus-square',\n  icon: [448, 512, [], \"f0fe\", \"M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faQuestionCircle = {\n  prefix: 'far',\n  iconName: 'question-circle',\n  icon: [512, 512, [], \"f059\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"]\n};\nvar faRegistered = {\n  prefix: 'far',\n  iconName: 'registered',\n  icon: [512, 512, [], \"f25d\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z\"]\n};\nvar faSadCry = {\n  prefix: 'far',\n  iconName: 'sad-cry',\n  icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z\"]\n};\nvar faSadTear = {\n  prefix: 'far',\n  iconName: 'sad-tear',\n  icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z\"]\n};\nvar faSave = {\n  prefix: 'far',\n  iconName: 'save',\n  icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z\"]\n};\nvar faShareSquare = {\n  prefix: 'far',\n  iconName: 'share-square',\n  icon: [576, 512, [], \"f14d\", \"M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z\"]\n};\nvar faSmile = {\n  prefix: 'far',\n  iconName: 'smile',\n  icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z\"]\n};\nvar faSmileBeam = {\n  prefix: 'far',\n  iconName: 'smile-beam',\n  icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z\"]\n};\nvar faSmileWink = {\n  prefix: 'far',\n  iconName: 'smile-wink',\n  icon: [496, 512, [], \"f4da\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z\"]\n};\nvar faSnowflake = {\n  prefix: 'far',\n  iconName: 'snowflake',\n  icon: [448, 512, [], \"f2dc\", \"M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z\"]\n};\nvar faSquare = {\n  prefix: 'far',\n  iconName: 'square',\n  icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"]\n};\nvar faStar = {\n  prefix: 'far',\n  iconName: 'star',\n  icon: [576, 512, [], \"f005\", \"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z\"]\n};\nvar faStarHalf = {\n  prefix: 'far',\n  iconName: 'star-half',\n  icon: [576, 512, [], \"f089\", \"M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z\"]\n};\nvar faStickyNote = {\n  prefix: 'far',\n  iconName: 'sticky-note',\n  icon: [448, 512, [], \"f249\", \"M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z\"]\n};\nvar faStopCircle = {\n  prefix: 'far',\n  iconName: 'stop-circle',\n  icon: [512, 512, [], \"f28d\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z\"]\n};\nvar faSun = {\n  prefix: 'far',\n  iconName: 'sun',\n  icon: [512, 512, [], \"f185\", \"M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z\"]\n};\nvar faSurprise = {\n  prefix: 'far',\n  iconName: 'surprise',\n  icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faThumbsDown = {\n  prefix: 'far',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [], \"f165\", \"M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z\"]\n};\nvar faThumbsUp = {\n  prefix: 'far',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [], \"f164\", \"M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faTimesCircle = {\n  prefix: 'far',\n  iconName: 'times-circle',\n  icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z\"]\n};\nvar faTired = {\n  prefix: 'far',\n  iconName: 'tired',\n  icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z\"]\n};\nvar faTrashAlt = {\n  prefix: 'far',\n  iconName: 'trash-alt',\n  icon: [448, 512, [], \"f2ed\", \"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"]\n};\nvar faUser = {\n  prefix: 'far',\n  iconName: 'user',\n  icon: [448, 512, [], \"f007\", \"M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z\"]\n};\nvar faUserCircle = {\n  prefix: 'far',\n  iconName: 'user-circle',\n  icon: [496, 512, [], \"f2bd\", \"M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z\"]\n};\nvar faWindowClose = {\n  prefix: 'far',\n  iconName: 'window-close',\n  icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z\"]\n};\nvar faWindowMaximize = {\n  prefix: 'far',\n  iconName: 'window-maximize',\n  icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z\"]\n};\nvar faWindowMinimize = {\n  prefix: 'far',\n  iconName: 'window-minimize',\n  icon: [512, 512, [], \"f2d1\", \"M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nvar faWindowRestore = {\n  prefix: 'far',\n  iconName: 'window-restore',\n  icon: [512, 512, [], \"f2d2\", \"M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z\"]\n};\nvar _iconsCache = {\n  faAddressBook: faAddressBook,\n  faAddressCard: faAddressCard,\n  faAngry: faAngry,\n  faArrowAltCircleDown: faArrowAltCircleDown,\n  faArrowAltCircleLeft: faArrowAltCircleLeft,\n  faArrowAltCircleRight: faArrowAltCircleRight,\n  faArrowAltCircleUp: faArrowAltCircleUp,\n  faBell: faBell,\n  faBellSlash: faBellSlash,\n  faBookmark: faBookmark,\n  faBuilding: faBuilding,\n  faCalendar: faCalendar,\n  faCalendarAlt: faCalendarAlt,\n  faCalendarCheck: faCalendarCheck,\n  faCalendarMinus: faCalendarMinus,\n  faCalendarPlus: faCalendarPlus,\n  faCalendarTimes: faCalendarTimes,\n  faCaretSquareDown: faCaretSquareDown,\n  faCaretSquareLeft: faCaretSquareLeft,\n  faCaretSquareRight: faCaretSquareRight,\n  faCaretSquareUp: faCaretSquareUp,\n  faChartBar: faChartBar,\n  faCheckCircle: faCheckCircle,\n  faCheckSquare: faCheckSquare,\n  faCircle: faCircle,\n  faClipboard: faClipboard,\n  faClock: faClock,\n  faClone: faClone,\n  faClosedCaptioning: faClosedCaptioning,\n  faComment: faComment,\n  faCommentAlt: faCommentAlt,\n  faCommentDots: faCommentDots,\n  faComments: faComments,\n  faCompass: faCompass,\n  faCopy: faCopy,\n  faCopyright: faCopyright,\n  faCreditCard: faCreditCard,\n  faDizzy: faDizzy,\n  faDotCircle: faDotCircle,\n  faEdit: faEdit,\n  faEnvelope: faEnvelope,\n  faEnvelopeOpen: faEnvelopeOpen,\n  faEye: faEye,\n  faEyeSlash: faEyeSlash,\n  faFile: faFile,\n  faFileAlt: faFileAlt,\n  faFileArchive: faFileArchive,\n  faFileAudio: faFileAudio,\n  faFileCode: faFileCode,\n  faFileExcel: faFileExcel,\n  faFileImage: faFileImage,\n  faFilePdf: faFilePdf,\n  faFilePowerpoint: faFilePowerpoint,\n  faFileVideo: faFileVideo,\n  faFileWord: faFileWord,\n  faFlag: faFlag,\n  faFlushed: faFlushed,\n  faFolder: faFolder,\n  faFolderOpen: faFolderOpen,\n  faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n  faFrown: faFrown,\n  faFrownOpen: faFrownOpen,\n  faFutbol: faFutbol,\n  faGem: faGem,\n  faGrimace: faGrimace,\n  faGrin: faGrin,\n  faGrinAlt: faGrinAlt,\n  faGrinBeam: faGrinBeam,\n  faGrinBeamSweat: faGrinBeamSweat,\n  faGrinHearts: faGrinHearts,\n  faGrinSquint: faGrinSquint,\n  faGrinSquintTears: faGrinSquintTears,\n  faGrinStars: faGrinStars,\n  faGrinTears: faGrinTears,\n  faGrinTongue: faGrinTongue,\n  faGrinTongueSquint: faGrinTongueSquint,\n  faGrinTongueWink: faGrinTongueWink,\n  faGrinWink: faGrinWink,\n  faHandLizard: faHandLizard,\n  faHandPaper: faHandPaper,\n  faHandPeace: faHandPeace,\n  faHandPointDown: faHandPointDown,\n  faHandPointLeft: faHandPointLeft,\n  faHandPointRight: faHandPointRight,\n  faHandPointUp: faHandPointUp,\n  faHandPointer: faHandPointer,\n  faHandRock: faHandRock,\n  faHandScissors: faHandScissors,\n  faHandSpock: faHandSpock,\n  faHandshake: faHandshake,\n  faHdd: faHdd,\n  faHeart: faHeart,\n  faHospital: faHospital,\n  faHourglass: faHourglass,\n  faIdBadge: faIdBadge,\n  faIdCard: faIdCard,\n  faImage: faImage,\n  faImages: faImages,\n  faKeyboard: faKeyboard,\n  faKiss: faKiss,\n  faKissBeam: faKissBeam,\n  faKissWinkHeart: faKissWinkHeart,\n  faLaugh: faLaugh,\n  faLaughBeam: faLaughBeam,\n  faLaughSquint: faLaughSquint,\n  faLaughWink: faLaughWink,\n  faLemon: faLemon,\n  faLifeRing: faLifeRing,\n  faLightbulb: faLightbulb,\n  faListAlt: faListAlt,\n  faMap: faMap,\n  faMeh: faMeh,\n  faMehBlank: faMehBlank,\n  faMehRollingEyes: faMehRollingEyes,\n  faMinusSquare: faMinusSquare,\n  faMoneyBillAlt: faMoneyBillAlt,\n  faMoon: faMoon,\n  faNewspaper: faNewspaper,\n  faObjectGroup: faObjectGroup,\n  faObjectUngroup: faObjectUngroup,\n  faPaperPlane: faPaperPlane,\n  faPauseCircle: faPauseCircle,\n  faPlayCircle: faPlayCircle,\n  faPlusSquare: faPlusSquare,\n  faQuestionCircle: faQuestionCircle,\n  faRegistered: faRegistered,\n  faSadCry: faSadCry,\n  faSadTear: faSadTear,\n  faSave: faSave,\n  faShareSquare: faShareSquare,\n  faSmile: faSmile,\n  faSmileBeam: faSmileBeam,\n  faSmileWink: faSmileWink,\n  faSnowflake: faSnowflake,\n  faSquare: faSquare,\n  faStar: faStar,\n  faStarHalf: faStarHalf,\n  faStickyNote: faStickyNote,\n  faStopCircle: faStopCircle,\n  faSun: faSun,\n  faSurprise: faSurprise,\n  faThumbsDown: faThumbsDown,\n  faThumbsUp: faThumbsUp,\n  faTimesCircle: faTimesCircle,\n  faTired: faTired,\n  faTrashAlt: faTrashAlt,\n  faUser: faUser,\n  faUserCircle: faUserCircle,\n  faWindowClose: faWindowClose,\n  faWindowMaximize: faWindowMaximize,\n  faWindowMinimize: faWindowMinimize,\n  faWindowRestore: faWindowRestore\n};\n\nexport { _iconsCache as far, prefix, faAddressBook, faAddressCard, faAngry, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faBell, faBellSlash, faBookmark, faBuilding, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faChartBar, faCheckCircle, faCheckSquare, faCircle, faClipboard, faClock, faClone, faClosedCaptioning, faComment, faCommentAlt, faCommentDots, faComments, faCompass, faCopy, faCopyright, faCreditCard, faDizzy, faDotCircle, faEdit, faEnvelope, faEnvelopeOpen, faEye, faEyeSlash, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileExcel, faFileImage, faFilePdf, faFilePowerpoint, faFileVideo, faFileWord, faFlag, faFlushed, faFolder, faFolderOpen, faFontAwesomeLogoFull, faFrown, faFrownOpen, faFutbol, faGem, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faHandLizard, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHandshake, faHdd, faHeart, faHospital, faHourglass, faIdBadge, faIdCard, faImage, faImages, faKeyboard, faKiss, faKissBeam, faKissWinkHeart, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLemon, faLifeRing, faLightbulb, faListAlt, faMap, faMeh, faMehBlank, faMehRollingEyes, faMinusSquare, faMoneyBillAlt, faMoon, faNewspaper, faObjectGroup, faObjectUngroup, faPaperPlane, faPauseCircle, faPlayCircle, faPlusSquare, faQuestionCircle, faRegistered, faSadCry, faSadTear, faSave, faShareSquare, faSmile, faSmileBeam, faSmileWink, faSnowflake, faSquare, faStar, faStarHalf, faStickyNote, faStopCircle, faSun, faSurprise, faThumbsDown, faThumbsUp, faTimesCircle, faTired, faTrashAlt, faUser, faUserCircle, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore };\n","var prefix = \"fas\";\nvar faAd = {\n  prefix: 'fas',\n  iconName: 'ad',\n  icon: [512, 512, [], \"f641\", \"M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z\"]\n};\nvar faAddressBook = {\n  prefix: 'fas',\n  iconName: 'address-book',\n  icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faAddressCard = {\n  prefix: 'fas',\n  iconName: 'address-card',\n  icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faAdjust = {\n  prefix: 'fas',\n  iconName: 'adjust',\n  icon: [512, 512, [], \"f042\", \"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"]\n};\nvar faAirFreshener = {\n  prefix: 'fas',\n  iconName: 'air-freshener',\n  icon: [384, 512, [], \"f5d0\", \"M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z\"]\n};\nvar faAlignCenter = {\n  prefix: 'fas',\n  iconName: 'align-center',\n  icon: [448, 512, [], \"f037\", \"M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"]\n};\nvar faAlignJustify = {\n  prefix: 'fas',\n  iconName: 'align-justify',\n  icon: [448, 512, [], \"f039\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faAlignLeft = {\n  prefix: 'fas',\n  iconName: 'align-left',\n  icon: [448, 512, [], \"f036\", \"M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z\"]\n};\nvar faAlignRight = {\n  prefix: 'fas',\n  iconName: 'align-right',\n  icon: [448, 512, [], \"f038\", \"M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faAllergies = {\n  prefix: 'fas',\n  iconName: 'allergies',\n  icon: [448, 512, [], \"f461\", \"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faAmbulance = {\n  prefix: 'fas',\n  iconName: 'ambulance',\n  icon: [640, 512, [], \"f0f9\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faAmericanSignLanguageInterpreting = {\n  prefix: 'fas',\n  iconName: 'american-sign-language-interpreting',\n  icon: [640, 512, [], \"f2a3\", \"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"]\n};\nvar faAnchor = {\n  prefix: 'fas',\n  iconName: 'anchor',\n  icon: [576, 512, [], \"f13d\", \"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"]\n};\nvar faAngleDoubleDown = {\n  prefix: 'fas',\n  iconName: 'angle-double-down',\n  icon: [320, 512, [], \"f103\", \"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"]\n};\nvar faAngleDoubleLeft = {\n  prefix: 'fas',\n  iconName: 'angle-double-left',\n  icon: [448, 512, [], \"f100\", \"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"]\n};\nvar faAngleDoubleRight = {\n  prefix: 'fas',\n  iconName: 'angle-double-right',\n  icon: [448, 512, [], \"f101\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"]\n};\nvar faAngleDoubleUp = {\n  prefix: 'fas',\n  iconName: 'angle-double-up',\n  icon: [320, 512, [], \"f102\", \"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"]\n};\nvar faAngleDown = {\n  prefix: 'fas',\n  iconName: 'angle-down',\n  icon: [320, 512, [], \"f107\", \"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"]\n};\nvar faAngleLeft = {\n  prefix: 'fas',\n  iconName: 'angle-left',\n  icon: [256, 512, [], \"f104\", \"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"]\n};\nvar faAngleRight = {\n  prefix: 'fas',\n  iconName: 'angle-right',\n  icon: [256, 512, [], \"f105\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"]\n};\nvar faAngleUp = {\n  prefix: 'fas',\n  iconName: 'angle-up',\n  icon: [320, 512, [], \"f106\", \"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"]\n};\nvar faAngry = {\n  prefix: 'fas',\n  iconName: 'angry',\n  icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"]\n};\nvar faAnkh = {\n  prefix: 'fas',\n  iconName: 'ankh',\n  icon: [320, 512, [], \"f644\", \"M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z\"]\n};\nvar faAppleAlt = {\n  prefix: 'fas',\n  iconName: 'apple-alt',\n  icon: [448, 512, [], \"f5d1\", \"M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z\"]\n};\nvar faArchive = {\n  prefix: 'fas',\n  iconName: 'archive',\n  icon: [512, 512, [], \"f187\", \"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"]\n};\nvar faArchway = {\n  prefix: 'fas',\n  iconName: 'archway',\n  icon: [576, 512, [], \"f557\", \"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faArrowAltCircleDown = {\n  prefix: 'fas',\n  iconName: 'arrow-alt-circle-down',\n  icon: [512, 512, [], \"f358\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-alt-circle-left',\n  icon: [512, 512, [], \"f359\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"]\n};\nvar faArrowAltCircleRight = {\n  prefix: 'fas',\n  iconName: 'arrow-alt-circle-right',\n  icon: [512, 512, [], \"f35a\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"]\n};\nvar faArrowAltCircleUp = {\n  prefix: 'fas',\n  iconName: 'arrow-alt-circle-up',\n  icon: [512, 512, [], \"f35b\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"]\n};\nvar faArrowCircleDown = {\n  prefix: 'fas',\n  iconName: 'arrow-circle-down',\n  icon: [512, 512, [], \"f0ab\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"]\n};\nvar faArrowCircleLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-circle-left',\n  icon: [512, 512, [], \"f0a8\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"]\n};\nvar faArrowCircleRight = {\n  prefix: 'fas',\n  iconName: 'arrow-circle-right',\n  icon: [512, 512, [], \"f0a9\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"]\n};\nvar faArrowCircleUp = {\n  prefix: 'fas',\n  iconName: 'arrow-circle-up',\n  icon: [512, 512, [], \"f0aa\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"]\n};\nvar faArrowDown = {\n  prefix: 'fas',\n  iconName: 'arrow-down',\n  icon: [448, 512, [], \"f063\", \"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"]\n};\nvar faArrowLeft = {\n  prefix: 'fas',\n  iconName: 'arrow-left',\n  icon: [448, 512, [], \"f060\", \"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"]\n};\nvar faArrowRight = {\n  prefix: 'fas',\n  iconName: 'arrow-right',\n  icon: [448, 512, [], \"f061\", \"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"]\n};\nvar faArrowUp = {\n  prefix: 'fas',\n  iconName: 'arrow-up',\n  icon: [448, 512, [], \"f062\", \"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"]\n};\nvar faArrowsAlt = {\n  prefix: 'fas',\n  iconName: 'arrows-alt',\n  icon: [512, 512, [], \"f0b2\", \"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"]\n};\nvar faArrowsAltH = {\n  prefix: 'fas',\n  iconName: 'arrows-alt-h',\n  icon: [512, 512, [], \"f337\", \"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"]\n};\nvar faArrowsAltV = {\n  prefix: 'fas',\n  iconName: 'arrows-alt-v',\n  icon: [256, 512, [], \"f338\", \"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"]\n};\nvar faAssistiveListeningSystems = {\n  prefix: 'fas',\n  iconName: 'assistive-listening-systems',\n  icon: [512, 512, [], \"f2a2\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"]\n};\nvar faAsterisk = {\n  prefix: 'fas',\n  iconName: 'asterisk',\n  icon: [512, 512, [], \"f069\", \"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"]\n};\nvar faAt = {\n  prefix: 'fas',\n  iconName: 'at',\n  icon: [512, 512, [], \"f1fa\", \"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"]\n};\nvar faAtlas = {\n  prefix: 'fas',\n  iconName: 'atlas',\n  icon: [448, 512, [], \"f558\", \"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"]\n};\nvar faAtom = {\n  prefix: 'fas',\n  iconName: 'atom',\n  icon: [448, 512, [], \"f5d2\", \"M413.03 256c40.13-54.89 41.51-98.62 25.14-128-10.91-19.52-40.54-50.73-116.33-41.88C300.36 34.89 267.64 0 224 0s-76.36 34.89-97.84 86.12C50.43 77.34 20.73 108.48 9.83 128c-16.38 29.4-15 73.09 25.14 128-40.13 54.89-41.51 98.62-25.14 128 29.21 52.34 101.68 43.58 116.33 41.88C147.63 477.1 180.36 512 224 512s76.37-34.9 97.84-86.12c14.64 1.7 87.11 10.46 116.33-41.88 16.38-29.4 15-73.09-25.14-128zM63.38 352c-4.03-7.21-.19-24.8 14.95-48.29 6.96 6.53 14.2 12.89 21.87 19.18 1.71 13.71 4 27.08 6.76 40.08-24.56.89-39.89-4.37-43.58-10.97zm36.82-162.88c-7.66 6.29-14.9 12.65-21.87 19.18-15.13-23.5-18.97-41.09-14.95-48.3 3.41-6.14 16.39-11.47 37.92-11.47 1.71 0 3.87.3 5.69.37a472.191 472.191 0 0 0-6.79 40.22zM224 64c9.47 0 22.2 13.52 33.86 37.26-11.19 3.7-22.44 8-33.86 12.86-11.42-4.86-22.67-9.16-33.86-12.86C201.8 77.52 214.53 64 224 64zm0 384c-9.47 0-22.2-13.52-33.86-37.26 11.19-3.7 22.44-8 33.86-12.86 11.42 4.86 22.67 9.16 33.86 12.86C246.2 434.48 233.47 448 224 448zm62.5-157.33c-26.7 19.08-46.14 29.33-62.5 37.48-16.35-8.14-35.8-18.41-62.5-37.48-1.99-27.79-1.99-41.54 0-69.33 26.67-19.05 46.13-29.32 62.5-37.48 16.39 8.17 35.86 18.44 62.5 37.48 1.98 27.78 1.99 41.53 0 69.33zM384.62 352c-3.67 6.62-19 11.82-43.58 10.95 2.76-13 5.05-26.37 6.76-40.06 7.66-6.29 14.9-12.65 21.87-19.18 15.13 23.49 18.97 41.08 14.95 48.29zm-14.95-143.71c-6.96-6.53-14.2-12.89-21.87-19.18a473.535 473.535 0 0 0-6.79-40.22c1.82-.07 3.97-.37 5.69-.37 21.52 0 34.51 5.34 37.92 11.47 4.02 7.22.18 24.81-14.95 48.3zM224 224c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faAudioDescription = {\n  prefix: 'fas',\n  iconName: 'audio-description',\n  icon: [512, 512, [], \"f29e\", \"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"]\n};\nvar faAward = {\n  prefix: 'fas',\n  iconName: 'award',\n  icon: [384, 512, [], \"f559\", \"M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"]\n};\nvar faBaby = {\n  prefix: 'fas',\n  iconName: 'baby',\n  icon: [384, 512, [], \"f77c\", \"M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z\"]\n};\nvar faBabyCarriage = {\n  prefix: 'fas',\n  iconName: 'baby-carriage',\n  icon: [512, 512, [], \"f77d\", \"M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z\"]\n};\nvar faBackspace = {\n  prefix: 'fas',\n  iconName: 'backspace',\n  icon: [640, 512, [], \"f55a\", \"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"]\n};\nvar faBackward = {\n  prefix: 'fas',\n  iconName: 'backward',\n  icon: [512, 512, [], \"f04a\", \"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"]\n};\nvar faBacon = {\n  prefix: 'fas',\n  iconName: 'bacon',\n  icon: [576, 512, [], \"f7e5\", \"M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z\"]\n};\nvar faBalanceScale = {\n  prefix: 'fas',\n  iconName: 'balance-scale',\n  icon: [640, 512, [], \"f24e\", \"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faBan = {\n  prefix: 'fas',\n  iconName: 'ban',\n  icon: [512, 512, [], \"f05e\", \"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"]\n};\nvar faBandAid = {\n  prefix: 'fas',\n  iconName: 'band-aid',\n  icon: [640, 512, [], \"f462\", \"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faBarcode = {\n  prefix: 'fas',\n  iconName: 'barcode',\n  icon: [512, 512, [], \"f02a\", \"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"]\n};\nvar faBars = {\n  prefix: 'fas',\n  iconName: 'bars',\n  icon: [448, 512, [], \"f0c9\", \"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faBaseballBall = {\n  prefix: 'fas',\n  iconName: 'baseball-ball',\n  icon: [496, 512, [], \"f433\", \"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"]\n};\nvar faBasketballBall = {\n  prefix: 'fas',\n  iconName: 'basketball-ball',\n  icon: [496, 512, [], \"f434\", \"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"]\n};\nvar faBath = {\n  prefix: 'fas',\n  iconName: 'bath',\n  icon: [512, 512, [], \"f2cd\", \"M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faBatteryEmpty = {\n  prefix: 'fas',\n  iconName: 'battery-empty',\n  icon: [640, 512, [], \"f244\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"]\n};\nvar faBatteryFull = {\n  prefix: 'fas',\n  iconName: 'battery-full',\n  icon: [640, 512, [], \"f240\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"]\n};\nvar faBatteryHalf = {\n  prefix: 'fas',\n  iconName: 'battery-half',\n  icon: [640, 512, [], \"f242\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"]\n};\nvar faBatteryQuarter = {\n  prefix: 'fas',\n  iconName: 'battery-quarter',\n  icon: [640, 512, [], \"f243\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"]\n};\nvar faBatteryThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'battery-three-quarters',\n  icon: [640, 512, [], \"f241\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"]\n};\nvar faBed = {\n  prefix: 'fas',\n  iconName: 'bed',\n  icon: [640, 512, [], \"f236\", \"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"]\n};\nvar faBeer = {\n  prefix: 'fas',\n  iconName: 'beer',\n  icon: [448, 512, [], \"f0fc\", \"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"]\n};\nvar faBell = {\n  prefix: 'fas',\n  iconName: 'bell',\n  icon: [448, 512, [], \"f0f3\", \"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z\"]\n};\nvar faBellSlash = {\n  prefix: 'fas',\n  iconName: 'bell-slash',\n  icon: [640, 512, [], \"f1f6\", \"M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBezierCurve = {\n  prefix: 'fas',\n  iconName: 'bezier-curve',\n  icon: [640, 512, [], \"f55b\", \"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faBible = {\n  prefix: 'fas',\n  iconName: 'bible',\n  icon: [448, 512, [], \"f647\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faBicycle = {\n  prefix: 'fas',\n  iconName: 'bicycle',\n  icon: [640, 512, [], \"f206\", \"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"]\n};\nvar faBinoculars = {\n  prefix: 'fas',\n  iconName: 'binoculars',\n  icon: [512, 512, [], \"f1e5\", \"M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z\"]\n};\nvar faBiohazard = {\n  prefix: 'fas',\n  iconName: 'biohazard',\n  icon: [576, 512, [], \"f780\", \"M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faBirthdayCake = {\n  prefix: 'fas',\n  iconName: 'birthday-cake',\n  icon: [448, 512, [], \"f1fd\", \"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"]\n};\nvar faBlender = {\n  prefix: 'fas',\n  iconName: 'blender',\n  icon: [512, 512, [], \"f517\", \"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"]\n};\nvar faBlenderPhone = {\n  prefix: 'fas',\n  iconName: 'blender-phone',\n  icon: [576, 512, [], \"f6b6\", \"M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBlind = {\n  prefix: 'fas',\n  iconName: 'blind',\n  icon: [384, 512, [], \"f29d\", \"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"]\n};\nvar faBlog = {\n  prefix: 'fas',\n  iconName: 'blog',\n  icon: [512, 512, [], \"f781\", \"M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faBold = {\n  prefix: 'fas',\n  iconName: 'bold',\n  icon: [384, 512, [], \"f032\", \"M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z\"]\n};\nvar faBolt = {\n  prefix: 'fas',\n  iconName: 'bolt',\n  icon: [320, 512, [], \"f0e7\", \"M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z\"]\n};\nvar faBomb = {\n  prefix: 'fas',\n  iconName: 'bomb',\n  icon: [512, 512, [], \"f1e2\", \"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nvar faBone = {\n  prefix: 'fas',\n  iconName: 'bone',\n  icon: [640, 512, [], \"f5d7\", \"M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z\"]\n};\nvar faBong = {\n  prefix: 'fas',\n  iconName: 'bong',\n  icon: [448, 512, [], \"f55c\", \"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"]\n};\nvar faBook = {\n  prefix: 'fas',\n  iconName: 'book',\n  icon: [448, 512, [], \"f02d\", \"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"]\n};\nvar faBookDead = {\n  prefix: 'fas',\n  iconName: 'book-dead',\n  icon: [448, 512, [], \"f6b7\", \"M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z\"]\n};\nvar faBookMedical = {\n  prefix: 'fas',\n  iconName: 'book-medical',\n  icon: [448, 512, [], \"f7e6\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z\"]\n};\nvar faBookOpen = {\n  prefix: 'fas',\n  iconName: 'book-open',\n  icon: [576, 512, [], \"f518\", \"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"]\n};\nvar faBookReader = {\n  prefix: 'fas',\n  iconName: 'book-reader',\n  icon: [512, 512, [], \"f5da\", \"M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z\"]\n};\nvar faBookmark = {\n  prefix: 'fas',\n  iconName: 'bookmark',\n  icon: [384, 512, [], \"f02e\", \"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"]\n};\nvar faBowlingBall = {\n  prefix: 'fas',\n  iconName: 'bowling-ball',\n  icon: [496, 512, [], \"f436\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faBox = {\n  prefix: 'fas',\n  iconName: 'box',\n  icon: [512, 512, [], \"f466\", \"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"]\n};\nvar faBoxOpen = {\n  prefix: 'fas',\n  iconName: 'box-open',\n  icon: [640, 512, [], \"f49e\", \"M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z\"]\n};\nvar faBoxes = {\n  prefix: 'fas',\n  iconName: 'boxes',\n  icon: [576, 512, [], \"f468\", \"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"]\n};\nvar faBraille = {\n  prefix: 'fas',\n  iconName: 'braille',\n  icon: [640, 512, [], \"f2a1\", \"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faBrain = {\n  prefix: 'fas',\n  iconName: 'brain',\n  icon: [576, 512, [], \"f5dc\", \"M208 0c-29.87 0-54.74 20.55-61.8 48.22-.75-.02-1.45-.22-2.2-.22-35.34 0-64 28.65-64 64 0 4.84.64 9.51 1.66 14.04C52.54 138 32 166.57 32 200c0 12.58 3.16 24.32 8.34 34.91C16.34 248.72 0 274.33 0 304c0 33.34 20.42 61.88 49.42 73.89-.9 4.57-1.42 9.28-1.42 14.11 0 39.76 32.23 72 72 72 4.12 0 8.1-.55 12.03-1.21C141.61 491.31 168.25 512 200 512c39.77 0 72-32.24 72-72V205.45c-10.91 8.98-23.98 15.45-38.36 18.39-4.97 1.02-9.64-2.82-9.64-7.89v-16.18c0-3.57 2.35-6.78 5.8-7.66 24.2-6.16 42.2-27.95 42.2-54.04V64c0-35.35-28.66-64-64-64zm368 304c0-29.67-16.34-55.28-40.34-69.09 5.17-10.59 8.34-22.33 8.34-34.91 0-33.43-20.54-62-49.66-73.96 1.02-4.53 1.66-9.2 1.66-14.04 0-35.35-28.66-64-64-64-.75 0-1.45.2-2.2.22C422.74 20.55 397.87 0 368 0c-35.34 0-64 28.65-64 64v74.07c0 26.09 17.99 47.88 42.2 54.04 3.46.88 5.8 4.09 5.8 7.66v16.18c0 5.07-4.68 8.91-9.64 7.89-14.38-2.94-27.44-9.41-38.36-18.39V440c0 39.76 32.23 72 72 72 31.75 0 58.39-20.69 67.97-49.21 3.93.67 7.91 1.21 12.03 1.21 39.77 0 72-32.24 72-72 0-4.83-.52-9.54-1.42-14.11 29-12.01 49.42-40.55 49.42-73.89z\"]\n};\nvar faBreadSlice = {\n  prefix: 'fas',\n  iconName: 'bread-slice',\n  icon: [576, 512, [], \"f7ec\", \"M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z\"]\n};\nvar faBriefcase = {\n  prefix: 'fas',\n  iconName: 'briefcase',\n  icon: [512, 512, [], \"f0b1\", \"M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z\"]\n};\nvar faBriefcaseMedical = {\n  prefix: 'fas',\n  iconName: 'briefcase-medical',\n  icon: [512, 512, [], \"f469\", \"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"]\n};\nvar faBroadcastTower = {\n  prefix: 'fas',\n  iconName: 'broadcast-tower',\n  icon: [640, 512, [], \"f519\", \"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"]\n};\nvar faBroom = {\n  prefix: 'fas',\n  iconName: 'broom',\n  icon: [640, 512, [], \"f51a\", \"M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z\"]\n};\nvar faBrush = {\n  prefix: 'fas',\n  iconName: 'brush',\n  icon: [384, 512, [], \"f55d\", \"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"]\n};\nvar faBug = {\n  prefix: 'fas',\n  iconName: 'bug',\n  icon: [512, 512, [], \"f188\", \"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"]\n};\nvar faBuilding = {\n  prefix: 'fas',\n  iconName: 'building',\n  icon: [448, 512, [], \"f1ad\", \"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"]\n};\nvar faBullhorn = {\n  prefix: 'fas',\n  iconName: 'bullhorn',\n  icon: [576, 512, [], \"f0a1\", \"M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z\"]\n};\nvar faBullseye = {\n  prefix: 'fas',\n  iconName: 'bullseye',\n  icon: [496, 512, [], \"f140\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"]\n};\nvar faBurn = {\n  prefix: 'fas',\n  iconName: 'burn',\n  icon: [384, 512, [], \"f46a\", \"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"]\n};\nvar faBus = {\n  prefix: 'fas',\n  iconName: 'bus',\n  icon: [512, 512, [], \"f207\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusAlt = {\n  prefix: 'fas',\n  iconName: 'bus-alt',\n  icon: [512, 512, [], \"f55e\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusinessTime = {\n  prefix: 'fas',\n  iconName: 'business-time',\n  icon: [640, 512, [], \"f64a\", \"M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z\"]\n};\nvar faCalculator = {\n  prefix: 'fas',\n  iconName: 'calculator',\n  icon: [448, 512, [], \"f1ec\", \"M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z\"]\n};\nvar faCalendar = {\n  prefix: 'fas',\n  iconName: 'calendar',\n  icon: [448, 512, [], \"f133\", \"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"]\n};\nvar faCalendarAlt = {\n  prefix: 'fas',\n  iconName: 'calendar-alt',\n  icon: [448, 512, [], \"f073\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarCheck = {\n  prefix: 'fas',\n  iconName: 'calendar-check',\n  icon: [448, 512, [], \"f274\", \"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"]\n};\nvar faCalendarDay = {\n  prefix: 'fas',\n  iconName: 'calendar-day',\n  icon: [448, 512, [], \"f783\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarMinus = {\n  prefix: 'fas',\n  iconName: 'calendar-minus',\n  icon: [448, 512, [], \"f272\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"]\n};\nvar faCalendarPlus = {\n  prefix: 'fas',\n  iconName: 'calendar-plus',\n  icon: [448, 512, [], \"f271\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"]\n};\nvar faCalendarTimes = {\n  prefix: 'fas',\n  iconName: 'calendar-times',\n  icon: [448, 512, [], \"f273\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"]\n};\nvar faCalendarWeek = {\n  prefix: 'fas',\n  iconName: 'calendar-week',\n  icon: [448, 512, [], \"f784\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCamera = {\n  prefix: 'fas',\n  iconName: 'camera',\n  icon: [512, 512, [], \"f030\", \"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"]\n};\nvar faCameraRetro = {\n  prefix: 'fas',\n  iconName: 'camera-retro',\n  icon: [512, 512, [], \"f083\", \"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"]\n};\nvar faCampground = {\n  prefix: 'fas',\n  iconName: 'campground',\n  icon: [640, 512, [], \"f6bb\", \"M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z\"]\n};\nvar faCandyCane = {\n  prefix: 'fas',\n  iconName: 'candy-cane',\n  icon: [512, 512, [], \"f786\", \"M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z\"]\n};\nvar faCannabis = {\n  prefix: 'fas',\n  iconName: 'cannabis',\n  icon: [512, 512, [], \"f55f\", \"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"]\n};\nvar faCapsules = {\n  prefix: 'fas',\n  iconName: 'capsules',\n  icon: [576, 512, [], \"f46b\", \"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"]\n};\nvar faCar = {\n  prefix: 'fas',\n  iconName: 'car',\n  icon: [512, 512, [], \"f1b9\", \"M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarAlt = {\n  prefix: 'fas',\n  iconName: 'car-alt',\n  icon: [480, 512, [], \"f5de\", \"M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarBattery = {\n  prefix: 'fas',\n  iconName: 'car-battery',\n  icon: [512, 512, [], \"f5df\", \"M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faCarCrash = {\n  prefix: 'fas',\n  iconName: 'car-crash',\n  icon: [640, 512, [], \"f5e1\", \"M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z\"]\n};\nvar faCarSide = {\n  prefix: 'fas',\n  iconName: 'car-side',\n  icon: [640, 512, [], \"f5e4\", \"M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faCaretDown = {\n  prefix: 'fas',\n  iconName: 'caret-down',\n  icon: [320, 512, [], \"f0d7\", \"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"]\n};\nvar faCaretLeft = {\n  prefix: 'fas',\n  iconName: 'caret-left',\n  icon: [192, 512, [], \"f0d9\", \"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"]\n};\nvar faCaretRight = {\n  prefix: 'fas',\n  iconName: 'caret-right',\n  icon: [192, 512, [], \"f0da\", \"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"]\n};\nvar faCaretSquareDown = {\n  prefix: 'fas',\n  iconName: 'caret-square-down',\n  icon: [448, 512, [], \"f150\", \"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"]\n};\nvar faCaretSquareLeft = {\n  prefix: 'fas',\n  iconName: 'caret-square-left',\n  icon: [448, 512, [], \"f191\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"]\n};\nvar faCaretSquareRight = {\n  prefix: 'fas',\n  iconName: 'caret-square-right',\n  icon: [448, 512, [], \"f152\", \"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"]\n};\nvar faCaretSquareUp = {\n  prefix: 'fas',\n  iconName: 'caret-square-up',\n  icon: [448, 512, [], \"f151\", \"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"]\n};\nvar faCaretUp = {\n  prefix: 'fas',\n  iconName: 'caret-up',\n  icon: [320, 512, [], \"f0d8\", \"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"]\n};\nvar faCarrot = {\n  prefix: 'fas',\n  iconName: 'carrot',\n  icon: [512, 512, [], \"f787\", \"M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z\"]\n};\nvar faCartArrowDown = {\n  prefix: 'fas',\n  iconName: 'cart-arrow-down',\n  icon: [576, 512, [], \"f218\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"]\n};\nvar faCartPlus = {\n  prefix: 'fas',\n  iconName: 'cart-plus',\n  icon: [576, 512, [], \"f217\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"]\n};\nvar faCashRegister = {\n  prefix: 'fas',\n  iconName: 'cash-register',\n  icon: [512, 512, [], \"f788\", \"M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z\"]\n};\nvar faCat = {\n  prefix: 'fas',\n  iconName: 'cat',\n  icon: [512, 512, [], \"f6be\", \"M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faCertificate = {\n  prefix: 'fas',\n  iconName: 'certificate',\n  icon: [512, 512, [], \"f0a3\", \"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"]\n};\nvar faChair = {\n  prefix: 'fas',\n  iconName: 'chair',\n  icon: [448, 512, [], \"f6c0\", \"M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z\"]\n};\nvar faChalkboard = {\n  prefix: 'fas',\n  iconName: 'chalkboard',\n  icon: [640, 512, [], \"f51b\", \"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChalkboardTeacher = {\n  prefix: 'fas',\n  iconName: 'chalkboard-teacher',\n  icon: [640, 512, [], \"f51c\", \"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"]\n};\nvar faChargingStation = {\n  prefix: 'fas',\n  iconName: 'charging-station',\n  icon: [576, 512, [], \"f5e7\", \"M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z\"]\n};\nvar faChartArea = {\n  prefix: 'fas',\n  iconName: 'chart-area',\n  icon: [512, 512, [], \"f1fe\", \"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"]\n};\nvar faChartBar = {\n  prefix: 'fas',\n  iconName: 'chart-bar',\n  icon: [512, 512, [], \"f080\", \"M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChartLine = {\n  prefix: 'fas',\n  iconName: 'chart-line',\n  icon: [512, 512, [], \"f201\", \"M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z\"]\n};\nvar faChartPie = {\n  prefix: 'fas',\n  iconName: 'chart-pie',\n  icon: [544, 512, [], \"f200\", \"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"]\n};\nvar faCheck = {\n  prefix: 'fas',\n  iconName: 'check',\n  icon: [512, 512, [], \"f00c\", \"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"]\n};\nvar faCheckCircle = {\n  prefix: 'fas',\n  iconName: 'check-circle',\n  icon: [512, 512, [], \"f058\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"]\n};\nvar faCheckDouble = {\n  prefix: 'fas',\n  iconName: 'check-double',\n  icon: [512, 512, [], \"f560\", \"M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z\"]\n};\nvar faCheckSquare = {\n  prefix: 'fas',\n  iconName: 'check-square',\n  icon: [448, 512, [], \"f14a\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"]\n};\nvar faCheese = {\n  prefix: 'fas',\n  iconName: 'cheese',\n  icon: [512, 512, [], \"f7ef\", \"M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z\"]\n};\nvar faChess = {\n  prefix: 'fas',\n  iconName: 'chess',\n  icon: [512, 512, [], \"f439\", \"M76.1 210.2h103.7l34.6-95.1c2.8-7.8-3-16.1-11.3-16.1H152V68.8h21.6c3.3 0 6-2.7 6-6V40.4c0-3.3-2.7-6-6-6h-28.4V6c0-3.3-2.7-6-6-6h-22.4c-3.3 0-6 2.7-6 6v28.4H82.4c-3.3 0-6 2.7-6 6v22.4c0 3.3 2.7 6 6 6H104V99H52.8c-8.3 0-14.1 8.3-11.3 16.1zm237.2 90.7l24.9 17c.1 18.1-.2 63.9-11.9 114.5h147.5c-11.7-50.5-12-96.3-11.9-114.5l24.9-16.9c1.1-.7 1.7-1.9 1.7-3.2v-69.9c0-2.1-1.7-3.9-3.9-3.9h-27.7c-2.1 0-3.9 1.7-3.9 3.9v31.5h-22.7v-31.5c0-2.1-1.7-3.9-3.9-3.9h-52.9c-2.1 0-3.9 1.7-3.9 3.9v31.5h-22.7v-31.5c0-2.1-1.7-3.9-3.9-3.9h-27.7c-2.1 0-3.9 1.7-3.9 3.9v69.9c.2 1.2.8 2.4 1.9 3.1zm71.5 52c0-8.4 6.8-15.2 15.2-15.2s15.2 6.8 15.2 15.2v30.3h-30.3v-30.3zm119.8 117.2L491 459.4v-15.6c0-2.1-1.7-3.9-3.9-3.9H312.9c-2.1 0-3.9 1.7-3.9 3.9v15.6L295.3 470c-.9.7-1.5 1.9-1.5 3v35c0 2.1 1.7 3.9 3.9 3.9h204.5c2.1 0 3.9-1.7 3.9-3.9v-35c0-1.1-.5-2.2-1.5-2.9zm-259.8-10.8l-22.1-14.2V417c0-3.3-2.7-6-6-6H39.3c-3.3 0-6 2.7-6 6v28.1l-22.1 14.2c-1.7 1.1-2.8 3-2.8 5.1V506c0 3.3 2.7 6 6 6h227.2c3.3 0 6-2.7 6-6v-41.6c0-2.1-1-4-2.8-5.1zm-45-208.9c3.3 0 6-2.7 6-6v-20.8c0-3.3-2.7-6-6-6H56.2c-3.3 0-6 2.7-6 6v20.8c0 3.3 2.7 6 6 6H82c0 28.8 2.5 95.1-17.4 153.2h126.8c-19.6-57-17.4-121.5-17.4-153.2z\"]\n};\nvar faChessBishop = {\n  prefix: 'fas',\n  iconName: 'chess-bishop',\n  icon: [320, 512, [], \"f43a\", \"M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z\"]\n};\nvar faChessBoard = {\n  prefix: 'fas',\n  iconName: 'chess-board',\n  icon: [512, 512, [], \"f43c\", \"M192 256v64h64v-64zm320 64v-64h-64v64zM0 192v64h64v-64zm512 0v-64h-64v64zm0 256v-64h-64v64zM256 256h64v-64h-64zM0 512h64v-64H0zm128 0h64v-64h-64zM384 0h-64v64h64zM128 0H64v64h64zm128 512h64v-64h-64zM0 64v64h64V64zm0 256v64h64v-64zM256 0h-64v64h64zm128 512h64v-64h-64zM64 384v64h64v-64zm256 0v64h64v-64zm-64-192v-64h-64v64zm128 192h64v-64h-64zM128 256H64v64h64zm256 0h64v-64h-64zM512 0h-64v64h64zM128 128H64v64h64zm256-64v64h64V64zM192 384v64h64v-64zm-64-64v64h64v-64zm128 0v64h64v-64zm-64-128h-64v64h64zm128-64V64h-64v64zm-128 0V64h-64v64zm128 64h64v-64h-64zm0 128h64v-64h-64z\"]\n};\nvar faChessKing = {\n  prefix: 'fas',\n  iconName: 'chess-king',\n  icon: [448, 512, [], \"f43f\", \"M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z\"]\n};\nvar faChessKnight = {\n  prefix: 'fas',\n  iconName: 'chess-knight',\n  icon: [384, 512, [], \"f441\", \"M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faChessPawn = {\n  prefix: 'fas',\n  iconName: 'chess-pawn',\n  icon: [320, 512, [], \"f443\", \"M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z\"]\n};\nvar faChessQueen = {\n  prefix: 'fas',\n  iconName: 'chess-queen',\n  icon: [512, 512, [], \"f445\", \"M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z\"]\n};\nvar faChessRook = {\n  prefix: 'fas',\n  iconName: 'chess-rook',\n  icon: [384, 512, [], \"f447\", \"M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z\"]\n};\nvar faChevronCircleDown = {\n  prefix: 'fas',\n  iconName: 'chevron-circle-down',\n  icon: [512, 512, [], \"f13a\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"]\n};\nvar faChevronCircleLeft = {\n  prefix: 'fas',\n  iconName: 'chevron-circle-left',\n  icon: [512, 512, [], \"f137\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"]\n};\nvar faChevronCircleRight = {\n  prefix: 'fas',\n  iconName: 'chevron-circle-right',\n  icon: [512, 512, [], \"f138\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"]\n};\nvar faChevronCircleUp = {\n  prefix: 'fas',\n  iconName: 'chevron-circle-up',\n  icon: [512, 512, [], \"f139\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"]\n};\nvar faChevronDown = {\n  prefix: 'fas',\n  iconName: 'chevron-down',\n  icon: [448, 512, [], \"f078\", \"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"]\n};\nvar faChevronLeft = {\n  prefix: 'fas',\n  iconName: 'chevron-left',\n  icon: [320, 512, [], \"f053\", \"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"]\n};\nvar faChevronRight = {\n  prefix: 'fas',\n  iconName: 'chevron-right',\n  icon: [320, 512, [], \"f054\", \"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"]\n};\nvar faChevronUp = {\n  prefix: 'fas',\n  iconName: 'chevron-up',\n  icon: [448, 512, [], \"f077\", \"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"]\n};\nvar faChild = {\n  prefix: 'fas',\n  iconName: 'child',\n  icon: [384, 512, [], \"f1ae\", \"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"]\n};\nvar faChurch = {\n  prefix: 'fas',\n  iconName: 'church',\n  icon: [640, 512, [], \"f51d\", \"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"]\n};\nvar faCircle = {\n  prefix: 'fas',\n  iconName: 'circle',\n  icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"]\n};\nvar faCircleNotch = {\n  prefix: 'fas',\n  iconName: 'circle-notch',\n  icon: [512, 512, [], \"f1ce\", \"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"]\n};\nvar faCity = {\n  prefix: 'fas',\n  iconName: 'city',\n  icon: [640, 512, [], \"f64f\", \"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"]\n};\nvar faClinicMedical = {\n  prefix: 'fas',\n  iconName: 'clinic-medical',\n  icon: [576, 512, [], \"f7f2\", \"M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z\"]\n};\nvar faClipboard = {\n  prefix: 'fas',\n  iconName: 'clipboard',\n  icon: [384, 512, [], \"f328\", \"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"]\n};\nvar faClipboardCheck = {\n  prefix: 'fas',\n  iconName: 'clipboard-check',\n  icon: [384, 512, [], \"f46c\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"]\n};\nvar faClipboardList = {\n  prefix: 'fas',\n  iconName: 'clipboard-list',\n  icon: [384, 512, [], \"f46d\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faClock = {\n  prefix: 'fas',\n  iconName: 'clock',\n  icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n  prefix: 'fas',\n  iconName: 'clone',\n  icon: [512, 512, [], \"f24d\", \"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"]\n};\nvar faClosedCaptioning = {\n  prefix: 'fas',\n  iconName: 'closed-captioning',\n  icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"]\n};\nvar faCloud = {\n  prefix: 'fas',\n  iconName: 'cloud',\n  icon: [640, 512, [], \"f0c2\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"]\n};\nvar faCloudDownloadAlt = {\n  prefix: 'fas',\n  iconName: 'cloud-download-alt',\n  icon: [640, 512, [], \"f381\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"]\n};\nvar faCloudMeatball = {\n  prefix: 'fas',\n  iconName: 'cloud-meatball',\n  icon: [512, 512, [], \"f73b\", \"M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z\"]\n};\nvar faCloudMoon = {\n  prefix: 'fas',\n  iconName: 'cloud-moon',\n  icon: [576, 512, [], \"f6c3\", \"M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z\"]\n};\nvar faCloudMoonRain = {\n  prefix: 'fas',\n  iconName: 'cloud-moon-rain',\n  icon: [576, 512, [], \"f73c\", \"M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudRain = {\n  prefix: 'fas',\n  iconName: 'cloud-rain',\n  icon: [512, 512, [], \"f73d\", \"M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z\"]\n};\nvar faCloudShowersHeavy = {\n  prefix: 'fas',\n  iconName: 'cloud-showers-heavy',\n  icon: [512, 512, [], \"f740\", \"M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z\"]\n};\nvar faCloudSun = {\n  prefix: 'fas',\n  iconName: 'cloud-sun',\n  icon: [640, 512, [], \"f6c4\", \"M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z\"]\n};\nvar faCloudSunRain = {\n  prefix: 'fas',\n  iconName: 'cloud-sun-rain',\n  icon: [576, 512, [], \"f743\", \"M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudUploadAlt = {\n  prefix: 'fas',\n  iconName: 'cloud-upload-alt',\n  icon: [640, 512, [], \"f382\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"]\n};\nvar faCocktail = {\n  prefix: 'fas',\n  iconName: 'cocktail',\n  icon: [576, 512, [], \"f561\", \"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"]\n};\nvar faCode = {\n  prefix: 'fas',\n  iconName: 'code',\n  icon: [640, 512, [], \"f121\", \"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"]\n};\nvar faCodeBranch = {\n  prefix: 'fas',\n  iconName: 'code-branch',\n  icon: [384, 512, [], \"f126\", \"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"]\n};\nvar faCoffee = {\n  prefix: 'fas',\n  iconName: 'coffee',\n  icon: [640, 512, [], \"f0f4\", \"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"]\n};\nvar faCog = {\n  prefix: 'fas',\n  iconName: 'cog',\n  icon: [512, 512, [], \"f013\", \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faCogs = {\n  prefix: 'fas',\n  iconName: 'cogs',\n  icon: [640, 512, [], \"f085\", \"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"]\n};\nvar faCoins = {\n  prefix: 'fas',\n  iconName: 'coins',\n  icon: [512, 512, [], \"f51e\", \"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"]\n};\nvar faColumns = {\n  prefix: 'fas',\n  iconName: 'columns',\n  icon: [512, 512, [], \"f0db\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"]\n};\nvar faComment = {\n  prefix: 'fas',\n  iconName: 'comment',\n  icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"]\n};\nvar faCommentAlt = {\n  prefix: 'fas',\n  iconName: 'comment-alt',\n  icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"]\n};\nvar faCommentDollar = {\n  prefix: 'fas',\n  iconName: 'comment-dollar',\n  icon: [512, 512, [], \"f651\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z\"]\n};\nvar faCommentDots = {\n  prefix: 'fas',\n  iconName: 'comment-dots',\n  icon: [512, 512, [], \"f4ad\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faCommentMedical = {\n  prefix: 'fas',\n  iconName: 'comment-medical',\n  icon: [512, 512, [], \"f7f5\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z\"]\n};\nvar faCommentSlash = {\n  prefix: 'fas',\n  iconName: 'comment-slash',\n  icon: [640, 512, [], \"f4b3\", \"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faComments = {\n  prefix: 'fas',\n  iconName: 'comments',\n  icon: [576, 512, [], \"f086\", \"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"]\n};\nvar faCommentsDollar = {\n  prefix: 'fas',\n  iconName: 'comments-dollar',\n  icon: [576, 512, [], \"f653\", \"M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z\"]\n};\nvar faCompactDisc = {\n  prefix: 'fas',\n  iconName: 'compact-disc',\n  icon: [496, 512, [], \"f51f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faCompass = {\n  prefix: 'fas',\n  iconName: 'compass',\n  icon: [496, 512, [], \"f14e\", \"M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z\"]\n};\nvar faCompress = {\n  prefix: 'fas',\n  iconName: 'compress',\n  icon: [448, 512, [], \"f066\", \"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faCompressArrowsAlt = {\n  prefix: 'fas',\n  iconName: 'compress-arrows-alt',\n  icon: [512, 512, [], \"f78c\", \"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"]\n};\nvar faConciergeBell = {\n  prefix: 'fas',\n  iconName: 'concierge-bell',\n  icon: [512, 512, [], \"f562\", \"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faCookie = {\n  prefix: 'fas',\n  iconName: 'cookie',\n  icon: [512, 512, [], \"f563\", \"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCookieBite = {\n  prefix: 'fas',\n  iconName: 'cookie-bite',\n  icon: [512, 512, [], \"f564\", \"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCopy = {\n  prefix: 'fas',\n  iconName: 'copy',\n  icon: [448, 512, [], \"f0c5\", \"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"]\n};\nvar faCopyright = {\n  prefix: 'fas',\n  iconName: 'copyright',\n  icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"]\n};\nvar faCouch = {\n  prefix: 'fas',\n  iconName: 'couch',\n  icon: [640, 512, [], \"f4b8\", \"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"]\n};\nvar faCreditCard = {\n  prefix: 'fas',\n  iconName: 'credit-card',\n  icon: [576, 512, [], \"f09d\", \"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"]\n};\nvar faCrop = {\n  prefix: 'fas',\n  iconName: 'crop',\n  icon: [512, 512, [], \"f125\", \"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faCropAlt = {\n  prefix: 'fas',\n  iconName: 'crop-alt',\n  icon: [512, 512, [], \"f565\", \"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"]\n};\nvar faCross = {\n  prefix: 'fas',\n  iconName: 'cross',\n  icon: [384, 512, [], \"f654\", \"M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faCrosshairs = {\n  prefix: 'fas',\n  iconName: 'crosshairs',\n  icon: [512, 512, [], \"f05b\", \"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"]\n};\nvar faCrow = {\n  prefix: 'fas',\n  iconName: 'crow',\n  icon: [640, 512, [], \"f520\", \"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faCrown = {\n  prefix: 'fas',\n  iconName: 'crown',\n  icon: [640, 512, [], \"f521\", \"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faCrutch = {\n  prefix: 'fas',\n  iconName: 'crutch',\n  icon: [512, 512, [], \"f7f7\", \"M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z\"]\n};\nvar faCube = {\n  prefix: 'fas',\n  iconName: 'cube',\n  icon: [512, 512, [], \"f1b2\", \"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"]\n};\nvar faCubes = {\n  prefix: 'fas',\n  iconName: 'cubes',\n  icon: [512, 512, [], \"f1b3\", \"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"]\n};\nvar faCut = {\n  prefix: 'fas',\n  iconName: 'cut',\n  icon: [448, 512, [], \"f0c4\", \"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faDatabase = {\n  prefix: 'fas',\n  iconName: 'database',\n  icon: [448, 512, [], \"f1c0\", \"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"]\n};\nvar faDeaf = {\n  prefix: 'fas',\n  iconName: 'deaf',\n  icon: [512, 512, [], \"f2a4\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"]\n};\nvar faDemocrat = {\n  prefix: 'fas',\n  iconName: 'democrat',\n  icon: [640, 512, [], \"f747\", \"M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z\"]\n};\nvar faDesktop = {\n  prefix: 'fas',\n  iconName: 'desktop',\n  icon: [576, 512, [], \"f108\", \"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"]\n};\nvar faDharmachakra = {\n  prefix: 'fas',\n  iconName: 'dharmachakra',\n  icon: [512, 512, [], \"f655\", \"M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z\"]\n};\nvar faDiagnoses = {\n  prefix: 'fas',\n  iconName: 'diagnoses',\n  icon: [640, 512, [], \"f470\", \"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDice = {\n  prefix: 'fas',\n  iconName: 'dice',\n  icon: [640, 512, [], \"f522\", \"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faDiceD20 = {\n  prefix: 'fas',\n  iconName: 'dice-d20',\n  icon: [480, 512, [], \"f6cf\", \"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"]\n};\nvar faDiceD6 = {\n  prefix: 'fas',\n  iconName: 'dice-d6',\n  icon: [448, 512, [], \"f6d1\", \"M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z\"]\n};\nvar faDiceFive = {\n  prefix: 'fas',\n  iconName: 'dice-five',\n  icon: [448, 512, [], \"f523\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceFour = {\n  prefix: 'fas',\n  iconName: 'dice-four',\n  icon: [448, 512, [], \"f524\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceOne = {\n  prefix: 'fas',\n  iconName: 'dice-one',\n  icon: [448, 512, [], \"f525\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceSix = {\n  prefix: 'fas',\n  iconName: 'dice-six',\n  icon: [448, 512, [], \"f526\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceThree = {\n  prefix: 'fas',\n  iconName: 'dice-three',\n  icon: [448, 512, [], \"f527\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceTwo = {\n  prefix: 'fas',\n  iconName: 'dice-two',\n  icon: [448, 512, [], \"f528\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDigitalTachograph = {\n  prefix: 'fas',\n  iconName: 'digital-tachograph',\n  icon: [640, 512, [], \"f566\", \"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"]\n};\nvar faDirections = {\n  prefix: 'fas',\n  iconName: 'directions',\n  icon: [512, 512, [], \"f5eb\", \"M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z\"]\n};\nvar faDivide = {\n  prefix: 'fas',\n  iconName: 'divide',\n  icon: [448, 512, [], \"f529\", \"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faDizzy = {\n  prefix: 'fas',\n  iconName: 'dizzy',\n  icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"]\n};\nvar faDna = {\n  prefix: 'fas',\n  iconName: 'dna',\n  icon: [448, 512, [], \"f471\", \"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"]\n};\nvar faDog = {\n  prefix: 'fas',\n  iconName: 'dog',\n  icon: [512, 512, [], \"f6d3\", \"M496 96h-64l-7.16-14.31A32 32 0 0 0 396.22 64H342.6l-27.28-27.28C305.23 26.64 288 33.78 288 48.03v149.84l128 45.71V208h32c35.35 0 64-28.65 64-64v-32c0-8.84-7.16-16-16-16zm-112 48c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM96 224c-17.64 0-32-14.36-32-32 0-17.67-14.33-32-32-32S0 174.33 0 192c0 41.66 26.83 76.85 64 90.1V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V384h160v112c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V277.55L266.05 224H96z\"]\n};\nvar faDollarSign = {\n  prefix: 'fas',\n  iconName: 'dollar-sign',\n  icon: [288, 512, [], \"f155\", \"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"]\n};\nvar faDolly = {\n  prefix: 'fas',\n  iconName: 'dolly',\n  icon: [576, 512, [], \"f472\", \"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faDollyFlatbed = {\n  prefix: 'fas',\n  iconName: 'dolly-flatbed',\n  icon: [640, 512, [], \"f474\", \"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDonate = {\n  prefix: 'fas',\n  iconName: 'donate',\n  icon: [512, 512, [], \"f4b9\", \"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faDoorClosed = {\n  prefix: 'fas',\n  iconName: 'door-closed',\n  icon: [640, 512, [], \"f52a\", \"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"]\n};\nvar faDoorOpen = {\n  prefix: 'fas',\n  iconName: 'door-open',\n  icon: [640, 512, [], \"f52b\", \"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"]\n};\nvar faDotCircle = {\n  prefix: 'fas',\n  iconName: 'dot-circle',\n  icon: [512, 512, [], \"f192\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"]\n};\nvar faDove = {\n  prefix: 'fas',\n  iconName: 'dove',\n  icon: [512, 512, [], \"f4ba\", \"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faDownload = {\n  prefix: 'fas',\n  iconName: 'download',\n  icon: [512, 512, [], \"f019\", \"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faDraftingCompass = {\n  prefix: 'fas',\n  iconName: 'drafting-compass',\n  icon: [512, 512, [], \"f568\", \"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"]\n};\nvar faDragon = {\n  prefix: 'fas',\n  iconName: 'dragon',\n  icon: [640, 512, [], \"f6d5\", \"M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z\"]\n};\nvar faDrawPolygon = {\n  prefix: 'fas',\n  iconName: 'draw-polygon',\n  icon: [448, 512, [], \"f5ee\", \"M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z\"]\n};\nvar faDrum = {\n  prefix: 'fas',\n  iconName: 'drum',\n  icon: [576, 512, [], \"f569\", \"M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z\"]\n};\nvar faDrumSteelpan = {\n  prefix: 'fas',\n  iconName: 'drum-steelpan',\n  icon: [576, 512, [], \"f56a\", \"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"]\n};\nvar faDrumstickBite = {\n  prefix: 'fas',\n  iconName: 'drumstick-bite',\n  icon: [512, 512, [], \"f6d7\", \"M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z\"]\n};\nvar faDumbbell = {\n  prefix: 'fas',\n  iconName: 'dumbbell',\n  icon: [640, 512, [], \"f44b\", \"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"]\n};\nvar faDumpster = {\n  prefix: 'fas',\n  iconName: 'dumpster',\n  icon: [576, 512, [], \"f793\", \"M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDumpsterFire = {\n  prefix: 'fas',\n  iconName: 'dumpster-fire',\n  icon: [640, 512, [], \"f794\", \"M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z\"]\n};\nvar faDungeon = {\n  prefix: 'fas',\n  iconName: 'dungeon',\n  icon: [512, 512, [], \"f6d9\", \"M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z\"]\n};\nvar faEdit = {\n  prefix: 'fas',\n  iconName: 'edit',\n  icon: [576, 512, [], \"f044\", \"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"]\n};\nvar faEgg = {\n  prefix: 'fas',\n  iconName: 'egg',\n  icon: [384, 512, [], \"f7fb\", \"M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z\"]\n};\nvar faEject = {\n  prefix: 'fas',\n  iconName: 'eject',\n  icon: [448, 512, [], \"f052\", \"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"]\n};\nvar faEllipsisH = {\n  prefix: 'fas',\n  iconName: 'ellipsis-h',\n  icon: [512, 512, [], \"f141\", \"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"]\n};\nvar faEllipsisV = {\n  prefix: 'fas',\n  iconName: 'ellipsis-v',\n  icon: [192, 512, [], \"f142\", \"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"]\n};\nvar faEnvelope = {\n  prefix: 'fas',\n  iconName: 'envelope',\n  icon: [512, 512, [], \"f0e0\", \"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"]\n};\nvar faEnvelopeOpen = {\n  prefix: 'fas',\n  iconName: 'envelope-open',\n  icon: [512, 512, [], \"f2b6\", \"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"]\n};\nvar faEnvelopeOpenText = {\n  prefix: 'fas',\n  iconName: 'envelope-open-text',\n  icon: [512, 512, [], \"f658\", \"M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z\"]\n};\nvar faEnvelopeSquare = {\n  prefix: 'fas',\n  iconName: 'envelope-square',\n  icon: [448, 512, [], \"f199\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"]\n};\nvar faEquals = {\n  prefix: 'fas',\n  iconName: 'equals',\n  icon: [448, 512, [], \"f52c\", \"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faEraser = {\n  prefix: 'fas',\n  iconName: 'eraser',\n  icon: [512, 512, [], \"f12d\", \"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"]\n};\nvar faEthernet = {\n  prefix: 'fas',\n  iconName: 'ethernet',\n  icon: [512, 512, [], \"f796\", \"M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"]\n};\nvar faEuroSign = {\n  prefix: 'fas',\n  iconName: 'euro-sign',\n  icon: [320, 512, [], \"f153\", \"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"]\n};\nvar faExchangeAlt = {\n  prefix: 'fas',\n  iconName: 'exchange-alt',\n  icon: [512, 512, [], \"f362\", \"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faExclamation = {\n  prefix: 'fas',\n  iconName: 'exclamation',\n  icon: [192, 512, [], \"f12a\", \"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"]\n};\nvar faExclamationCircle = {\n  prefix: 'fas',\n  iconName: 'exclamation-circle',\n  icon: [512, 512, [], \"f06a\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExclamationTriangle = {\n  prefix: 'fas',\n  iconName: 'exclamation-triangle',\n  icon: [576, 512, [], \"f071\", \"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExpand = {\n  prefix: 'fas',\n  iconName: 'expand',\n  icon: [448, 512, [], \"f065\", \"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"]\n};\nvar faExpandArrowsAlt = {\n  prefix: 'fas',\n  iconName: 'expand-arrows-alt',\n  icon: [448, 512, [], \"f31e\", \"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z\"]\n};\nvar faExternalLinkAlt = {\n  prefix: 'fas',\n  iconName: 'external-link-alt',\n  icon: [576, 512, [], \"f35d\", \"M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z\"]\n};\nvar faExternalLinkSquareAlt = {\n  prefix: 'fas',\n  iconName: 'external-link-square-alt',\n  icon: [448, 512, [], \"f360\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"]\n};\nvar faEye = {\n  prefix: 'fas',\n  iconName: 'eye',\n  icon: [576, 512, [], \"f06e\", \"M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z\"]\n};\nvar faEyeDropper = {\n  prefix: 'fas',\n  iconName: 'eye-dropper',\n  icon: [512, 512, [], \"f1fb\", \"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"]\n};\nvar faEyeSlash = {\n  prefix: 'fas',\n  iconName: 'eye-slash',\n  icon: [640, 512, [], \"f070\", \"M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z\"]\n};\nvar faFastBackward = {\n  prefix: 'fas',\n  iconName: 'fast-backward',\n  icon: [512, 512, [], \"f049\", \"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"]\n};\nvar faFastForward = {\n  prefix: 'fas',\n  iconName: 'fast-forward',\n  icon: [512, 512, [], \"f050\", \"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"]\n};\nvar faFax = {\n  prefix: 'fas',\n  iconName: 'fax',\n  icon: [512, 512, [], \"f1ac\", \"M64 128H32c-17.67 0-32 14.33-32 32v320c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zm416 32V77.25c0-8.49-3.37-16.62-9.37-22.63L425.37 9.37c-6-6-14.14-9.37-22.63-9.37H160c-17.67 0-32 14.33-32 32v448c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zM288 432c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm128 128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm16-112H176V48h208v32c0 8.84 7.16 16 16 16h32v96z\"]\n};\nvar faFeather = {\n  prefix: 'fas',\n  iconName: 'feather',\n  icon: [512, 512, [], \"f52d\", \"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"]\n};\nvar faFeatherAlt = {\n  prefix: 'fas',\n  iconName: 'feather-alt',\n  icon: [512, 512, [], \"f56b\", \"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"]\n};\nvar faFemale = {\n  prefix: 'fas',\n  iconName: 'female',\n  icon: [256, 512, [], \"f182\", \"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"]\n};\nvar faFighterJet = {\n  prefix: 'fas',\n  iconName: 'fighter-jet',\n  icon: [640, 512, [], \"f0fb\", \"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"]\n};\nvar faFile = {\n  prefix: 'fas',\n  iconName: 'file',\n  icon: [384, 512, [], \"f15b\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileAlt = {\n  prefix: 'fas',\n  iconName: 'file-alt',\n  icon: [384, 512, [], \"f15c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileArchive = {\n  prefix: 'fas',\n  iconName: 'file-archive',\n  icon: [384, 512, [], \"f1c6\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z\"]\n};\nvar faFileAudio = {\n  prefix: 'fas',\n  iconName: 'file-audio',\n  icon: [384, 512, [], \"f1c7\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileCode = {\n  prefix: 'fas',\n  iconName: 'file-code',\n  icon: [384, 512, [], \"f1c9\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"]\n};\nvar faFileContract = {\n  prefix: 'fas',\n  iconName: 'file-contract',\n  icon: [384, 512, [], \"f56c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileCsv = {\n  prefix: 'fas',\n  iconName: 'file-csv',\n  icon: [384, 512, [], \"f6dd\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileDownload = {\n  prefix: 'fas',\n  iconName: 'file-download',\n  icon: [384, 512, [], \"f56d\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileExcel = {\n  prefix: 'fas',\n  iconName: 'file-excel',\n  icon: [384, 512, [], \"f1c3\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileExport = {\n  prefix: 'fas',\n  iconName: 'file-export',\n  icon: [576, 512, [], \"f56e\", \"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z\"]\n};\nvar faFileImage = {\n  prefix: 'fas',\n  iconName: 'file-image',\n  icon: [384, 512, [], \"f1c5\", \"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"]\n};\nvar faFileImport = {\n  prefix: 'fas',\n  iconName: 'file-import',\n  icon: [512, 512, [], \"f56f\", \"M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z\"]\n};\nvar faFileInvoice = {\n  prefix: 'fas',\n  iconName: 'file-invoice',\n  icon: [384, 512, [], \"f570\", \"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"]\n};\nvar faFileInvoiceDollar = {\n  prefix: 'fas',\n  iconName: 'file-invoice-dollar',\n  icon: [384, 512, [], \"f571\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"]\n};\nvar faFileMedical = {\n  prefix: 'fas',\n  iconName: 'file-medical',\n  icon: [384, 512, [], \"f477\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"]\n};\nvar faFileMedicalAlt = {\n  prefix: 'fas',\n  iconName: 'file-medical-alt',\n  icon: [448, 512, [], \"f478\", \"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFilePdf = {\n  prefix: 'fas',\n  iconName: 'file-pdf',\n  icon: [384, 512, [], \"f1c1\", \"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"]\n};\nvar faFilePowerpoint = {\n  prefix: 'fas',\n  iconName: 'file-powerpoint',\n  icon: [384, 512, [], \"f1c4\", \"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"]\n};\nvar faFilePrescription = {\n  prefix: 'fas',\n  iconName: 'file-prescription',\n  icon: [384, 512, [], \"f572\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileSignature = {\n  prefix: 'fas',\n  iconName: 'file-signature',\n  icon: [576, 512, [], \"f573\", \"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"]\n};\nvar faFileUpload = {\n  prefix: 'fas',\n  iconName: 'file-upload',\n  icon: [384, 512, [], \"f574\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileVideo = {\n  prefix: 'fas',\n  iconName: 'file-video',\n  icon: [384, 512, [], \"f1c8\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"]\n};\nvar faFileWord = {\n  prefix: 'fas',\n  iconName: 'file-word',\n  icon: [384, 512, [], \"f1c2\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFill = {\n  prefix: 'fas',\n  iconName: 'fill',\n  icon: [512, 512, [], \"f575\", \"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"]\n};\nvar faFillDrip = {\n  prefix: 'fas',\n  iconName: 'fill-drip',\n  icon: [576, 512, [], \"f576\", \"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"]\n};\nvar faFilm = {\n  prefix: 'fas',\n  iconName: 'film',\n  icon: [512, 512, [], \"f008\", \"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faFilter = {\n  prefix: 'fas',\n  iconName: 'filter',\n  icon: [512, 512, [], \"f0b0\", \"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"]\n};\nvar faFingerprint = {\n  prefix: 'fas',\n  iconName: 'fingerprint',\n  icon: [512, 512, [], \"f577\", \"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"]\n};\nvar faFire = {\n  prefix: 'fas',\n  iconName: 'fire',\n  icon: [384, 512, [], \"f06d\", \"M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z\"]\n};\nvar faFireAlt = {\n  prefix: 'fas',\n  iconName: 'fire-alt',\n  icon: [448, 512, [], \"f7e4\", \"M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z\"]\n};\nvar faFireExtinguisher = {\n  prefix: 'fas',\n  iconName: 'fire-extinguisher',\n  icon: [448, 512, [], \"f134\", \"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"]\n};\nvar faFirstAid = {\n  prefix: 'fas',\n  iconName: 'first-aid',\n  icon: [576, 512, [], \"f479\", \"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faFish = {\n  prefix: 'fas',\n  iconName: 'fish',\n  icon: [576, 512, [], \"f578\", \"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFistRaised = {\n  prefix: 'fas',\n  iconName: 'fist-raised',\n  icon: [384, 512, [], \"f6de\", \"M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z\"]\n};\nvar faFlag = {\n  prefix: 'fas',\n  iconName: 'flag',\n  icon: [512, 512, [], \"f024\", \"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"]\n};\nvar faFlagCheckered = {\n  prefix: 'fas',\n  iconName: 'flag-checkered',\n  icon: [512, 512, [], \"f11e\", \"M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z\"]\n};\nvar faFlagUsa = {\n  prefix: 'fas',\n  iconName: 'flag-usa',\n  icon: [512, 512, [], \"f74d\", \"M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z\"]\n};\nvar faFlask = {\n  prefix: 'fas',\n  iconName: 'flask',\n  icon: [448, 512, [], \"f0c3\", \"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"]\n};\nvar faFlushed = {\n  prefix: 'fas',\n  iconName: 'flushed',\n  icon: [496, 512, [], \"f579\", \"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"]\n};\nvar faFolder = {\n  prefix: 'fas',\n  iconName: 'folder',\n  icon: [512, 512, [], \"f07b\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"]\n};\nvar faFolderMinus = {\n  prefix: 'fas',\n  iconName: 'folder-minus',\n  icon: [512, 512, [], \"f65d\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFolderOpen = {\n  prefix: 'fas',\n  iconName: 'folder-open',\n  icon: [576, 512, [], \"f07c\", \"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"]\n};\nvar faFolderPlus = {\n  prefix: 'fas',\n  iconName: 'folder-plus',\n  icon: [512, 512, [], \"f65e\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16h-72v72c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-72h-72c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h72v-72c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v72h72c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFont = {\n  prefix: 'fas',\n  iconName: 'font',\n  icon: [448, 512, [], \"f031\", \"M432 416h-26.7L275.5 42.7c-2.2-6.4-8.3-10.7-15.1-10.7h-72.8c-6.8 0-12.9 4.3-15.1 10.7L42.7 416H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h136c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-24l26.6-80.8h138.2l26.6 80.8H296c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h136c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM174.4 268.3l42-124.1c4.3-15.2 6.6-28.2 7.6-34.6.8 6.5 2.9 19.5 7.7 34.7l41.3 124z\"]\n};\nvar faFontAwesomeLogoFull = {\n  prefix: 'fas',\n  iconName: 'font-awesome-logo-full',\n  icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFootballBall = {\n  prefix: 'fas',\n  iconName: 'football-ball',\n  icon: [496, 512, [], \"f44e\", \"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"]\n};\nvar faForward = {\n  prefix: 'fas',\n  iconName: 'forward',\n  icon: [512, 512, [], \"f04e\", \"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"]\n};\nvar faFrog = {\n  prefix: 'fas',\n  iconName: 'frog',\n  icon: [576, 512, [], \"f52e\", \"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFrown = {\n  prefix: 'fas',\n  iconName: 'frown',\n  icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"]\n};\nvar faFrownOpen = {\n  prefix: 'fas',\n  iconName: 'frown-open',\n  icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faFunnelDollar = {\n  prefix: 'fas',\n  iconName: 'funnel-dollar',\n  icon: [640, 512, [], \"f662\", \"M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z\"]\n};\nvar faFutbol = {\n  prefix: 'fas',\n  iconName: 'futbol',\n  icon: [512, 512, [], \"f1e3\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"]\n};\nvar faGamepad = {\n  prefix: 'fas',\n  iconName: 'gamepad',\n  icon: [640, 512, [], \"f11b\", \"M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faGasPump = {\n  prefix: 'fas',\n  iconName: 'gas-pump',\n  icon: [512, 512, [], \"f52f\", \"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"]\n};\nvar faGavel = {\n  prefix: 'fas',\n  iconName: 'gavel',\n  icon: [512, 512, [], \"f0e3\", \"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"]\n};\nvar faGem = {\n  prefix: 'fas',\n  iconName: 'gem',\n  icon: [576, 512, [], \"f3a5\", \"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"]\n};\nvar faGenderless = {\n  prefix: 'fas',\n  iconName: 'genderless',\n  icon: [288, 512, [], \"f22d\", \"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"]\n};\nvar faGhost = {\n  prefix: 'fas',\n  iconName: 'ghost',\n  icon: [384, 512, [], \"f6e2\", \"M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faGift = {\n  prefix: 'fas',\n  iconName: 'gift',\n  icon: [512, 512, [], \"f06b\", \"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z\"]\n};\nvar faGifts = {\n  prefix: 'fas',\n  iconName: 'gifts',\n  icon: [640, 512, [], \"f79c\", \"M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z\"]\n};\nvar faGlassCheers = {\n  prefix: 'fas',\n  iconName: 'glass-cheers',\n  icon: [640, 512, [], \"f79f\", \"M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z\"]\n};\nvar faGlassMartini = {\n  prefix: 'fas',\n  iconName: 'glass-martini',\n  icon: [512, 512, [], \"f000\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"]\n};\nvar faGlassMartiniAlt = {\n  prefix: 'fas',\n  iconName: 'glass-martini-alt',\n  icon: [512, 512, [], \"f57b\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"]\n};\nvar faGlassWhiskey = {\n  prefix: 'fas',\n  iconName: 'glass-whiskey',\n  icon: [512, 512, [], \"f7a0\", \"M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z\"]\n};\nvar faGlasses = {\n  prefix: 'fas',\n  iconName: 'glasses',\n  icon: [576, 512, [], \"f530\", \"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"]\n};\nvar faGlobe = {\n  prefix: 'fas',\n  iconName: 'globe',\n  icon: [496, 512, [], \"f0ac\", \"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"]\n};\nvar faGlobeAfrica = {\n  prefix: 'fas',\n  iconName: 'globe-africa',\n  icon: [496, 512, [], \"f57c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"]\n};\nvar faGlobeAmericas = {\n  prefix: 'fas',\n  iconName: 'globe-americas',\n  icon: [496, 512, [], \"f57d\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"]\n};\nvar faGlobeAsia = {\n  prefix: 'fas',\n  iconName: 'globe-asia',\n  icon: [496, 512, [], \"f57e\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"]\n};\nvar faGlobeEurope = {\n  prefix: 'fas',\n  iconName: 'globe-europe',\n  icon: [496, 512, [], \"f7a2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z\"]\n};\nvar faGolfBall = {\n  prefix: 'fas',\n  iconName: 'golf-ball',\n  icon: [416, 512, [], \"f450\", \"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"]\n};\nvar faGopuram = {\n  prefix: 'fas',\n  iconName: 'gopuram',\n  icon: [512, 512, [], \"f664\", \"M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"]\n};\nvar faGraduationCap = {\n  prefix: 'fas',\n  iconName: 'graduation-cap',\n  icon: [640, 512, [], \"f19d\", \"M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z\"]\n};\nvar faGreaterThan = {\n  prefix: 'fas',\n  iconName: 'greater-than',\n  icon: [384, 512, [], \"f531\", \"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"]\n};\nvar faGreaterThanEqual = {\n  prefix: 'fas',\n  iconName: 'greater-than-equal',\n  icon: [448, 512, [], \"f532\", \"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faGrimace = {\n  prefix: 'fas',\n  iconName: 'grimace',\n  icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"]\n};\nvar faGrin = {\n  prefix: 'fas',\n  iconName: 'grin',\n  icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinAlt = {\n  prefix: 'fas',\n  iconName: 'grin-alt',\n  icon: [496, 512, [], \"f581\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeam = {\n  prefix: 'fas',\n  iconName: 'grin-beam',\n  icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeamSweat = {\n  prefix: 'fas',\n  iconName: 'grin-beam-sweat',\n  icon: [504, 512, [], \"f583\", \"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinHearts = {\n  prefix: 'fas',\n  iconName: 'grin-hearts',\n  icon: [496, 512, [], \"f584\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"]\n};\nvar faGrinSquint = {\n  prefix: 'fas',\n  iconName: 'grin-squint',\n  icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinSquintTears = {\n  prefix: 'fas',\n  iconName: 'grin-squint-tears',\n  icon: [512, 512, [], \"f586\", \"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"]\n};\nvar faGrinStars = {\n  prefix: 'fas',\n  iconName: 'grin-stars',\n  icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"]\n};\nvar faGrinTears = {\n  prefix: 'fas',\n  iconName: 'grin-tears',\n  icon: [640, 512, [], \"f588\", \"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinTongue = {\n  prefix: 'fas',\n  iconName: 'grin-tongue',\n  icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinTongueSquint = {\n  prefix: 'fas',\n  iconName: 'grin-tongue-squint',\n  icon: [496, 512, [], \"f58a\", \"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"]\n};\nvar faGrinTongueWink = {\n  prefix: 'fas',\n  iconName: 'grin-tongue-wink',\n  icon: [496, 512, [], \"f58b\", \"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinWink = {\n  prefix: 'fas',\n  iconName: 'grin-wink',\n  icon: [496, 512, [], \"f58c\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"]\n};\nvar faGripHorizontal = {\n  prefix: 'fas',\n  iconName: 'grip-horizontal',\n  icon: [448, 512, [], \"f58d\", \"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGripLines = {\n  prefix: 'fas',\n  iconName: 'grip-lines',\n  icon: [512, 512, [], \"f7a4\", \"M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faGripLinesVertical = {\n  prefix: 'fas',\n  iconName: 'grip-lines-vertical',\n  icon: [256, 512, [], \"f7a5\", \"M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z\"]\n};\nvar faGripVertical = {\n  prefix: 'fas',\n  iconName: 'grip-vertical',\n  icon: [320, 512, [], \"f58e\", \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGuitar = {\n  prefix: 'fas',\n  iconName: 'guitar',\n  icon: [512, 512, [], \"f7a6\", \"M502.6 54.6L457.4 9.4c-12.5-12.5-32.8-12.5-45.3 0l-67.9 67.9c-12.5 12.5-12.5 32.8 0 45.3L290 176.7c-45.4-29-100.4-28.9-133.5 4.2-9.7 9.7-16.4 21.2-20.5 33.9-6.1 18.8-23.5 33.1-42.7 34.9-24 2.3-46.3 11.6-63.4 28.8C-16.3 324.6-8 407.6 48.2 463.8c56.2 56.2 139.2 64.4 185.3 18.3 17.2-17.1 26.5-39.4 28.8-63.5 1.8-19.1 16.1-36.6 34.9-42.7 12.7-4.1 24.2-10.8 33.9-20.5 33.1-33.1 33.1-88.1 4.2-133.5l54.2-54.2c12.5 12.5 32.8 12.5 45.3 0l67.9-67.9c12.4-12.4 12.4-32.7-.1-45.2zM208 352c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faHSquare = {\n  prefix: 'fas',\n  iconName: 'h-square',\n  icon: [448, 512, [], \"f0fd\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"]\n};\nvar faHamburger = {\n  prefix: 'fas',\n  iconName: 'hamburger',\n  icon: [512, 512, [], \"f805\", \"M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z\"]\n};\nvar faHammer = {\n  prefix: 'fas',\n  iconName: 'hammer',\n  icon: [576, 512, [], \"f6e3\", \"M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z\"]\n};\nvar faHamsa = {\n  prefix: 'fas',\n  iconName: 'hamsa',\n  icon: [512, 512, [], \"f665\", \"M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faHandHolding = {\n  prefix: 'fas',\n  iconName: 'hand-holding',\n  icon: [576, 512, [], \"f4bd\", \"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingHeart = {\n  prefix: 'fas',\n  iconName: 'hand-holding-heart',\n  icon: [576, 512, [], \"f4be\", \"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingUsd = {\n  prefix: 'fas',\n  iconName: 'hand-holding-usd',\n  icon: [544, 512, [], \"f4c0\", \"M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-17.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z\"]\n};\nvar faHandLizard = {\n  prefix: 'fas',\n  iconName: 'hand-lizard',\n  icon: [576, 512, [], \"f258\", \"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"]\n};\nvar faHandMiddleFinger = {\n  prefix: 'fas',\n  iconName: 'hand-middle-finger',\n  icon: [512, 512, [], \"f806\", \"M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z\"]\n};\nvar faHandPaper = {\n  prefix: 'fas',\n  iconName: 'hand-paper',\n  icon: [448, 512, [], \"f256\", \"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"]\n};\nvar faHandPeace = {\n  prefix: 'fas',\n  iconName: 'hand-peace',\n  icon: [448, 512, [], \"f25b\", \"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"]\n};\nvar faHandPointDown = {\n  prefix: 'fas',\n  iconName: 'hand-point-down',\n  icon: [384, 512, [], \"f0a7\", \"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointLeft = {\n  prefix: 'fas',\n  iconName: 'hand-point-left',\n  icon: [512, 512, [], \"f0a5\", \"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"]\n};\nvar faHandPointRight = {\n  prefix: 'fas',\n  iconName: 'hand-point-right',\n  icon: [512, 512, [], \"f0a4\", \"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointUp = {\n  prefix: 'fas',\n  iconName: 'hand-point-up',\n  icon: [384, 512, [], \"f0a6\", \"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faHandPointer = {\n  prefix: 'fas',\n  iconName: 'hand-pointer',\n  icon: [448, 512, [], \"f25a\", \"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"]\n};\nvar faHandRock = {\n  prefix: 'fas',\n  iconName: 'hand-rock',\n  icon: [512, 512, [], \"f255\", \"M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z\"]\n};\nvar faHandScissors = {\n  prefix: 'fas',\n  iconName: 'hand-scissors',\n  icon: [512, 512, [], \"f257\", \"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"]\n};\nvar faHandSpock = {\n  prefix: 'fas',\n  iconName: 'hand-spock',\n  icon: [512, 512, [], \"f259\", \"M481.3 97.1c-21.5-5.1-43.1 8.2-48.2 29.6L402.3 256h-11.1l43.6-174.3c5.4-21.4-7.7-43.1-29.1-48.5s-43.1 7.7-48.5 29.1L308.8 256h-15.1L242 31.1c-5-21.6-26.4-35-48-30.1-21.5 4.9-35 26.4-30 47.9l47.6 207h-9.8L167 103.1c-4.9-21.5-26.3-35-47.9-30.1-21.5 4.9-35 26.3-30.1 47.9l39 171.6v79.4l-60.6-57c-16.1-15.1-41.4-14.4-56.5 1.7s-14.4 41.4 1.7 56.5L146.3 499c8.9 8.4 20.7 13 32.9 13h216.7c21.3 0 40-14 46-34.4l26.2-88.3c2.6-8.9 4-18 4-27.3v-42c0-7.5.9-15 2.6-22.2L511 145.3c5-21.5-8.3-43.1-29.7-48.2z\"]\n};\nvar faHands = {\n  prefix: 'fas',\n  iconName: 'hands',\n  icon: [640, 512, [], \"f4c2\", \"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"]\n};\nvar faHandsHelping = {\n  prefix: 'fas',\n  iconName: 'hands-helping',\n  icon: [640, 512, [], \"f4c4\", \"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"]\n};\nvar faHandshake = {\n  prefix: 'fas',\n  iconName: 'handshake',\n  icon: [640, 512, [], \"f2b5\", \"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"]\n};\nvar faHanukiah = {\n  prefix: 'fas',\n  iconName: 'hanukiah',\n  icon: [640, 512, [], \"f6e6\", \"M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z\"]\n};\nvar faHardHat = {\n  prefix: 'fas',\n  iconName: 'hard-hat',\n  icon: [512, 512, [], \"f807\", \"M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faHashtag = {\n  prefix: 'fas',\n  iconName: 'hashtag',\n  icon: [448, 512, [], \"f292\", \"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"]\n};\nvar faHatWizard = {\n  prefix: 'fas',\n  iconName: 'hat-wizard',\n  icon: [512, 512, [], \"f6e8\", \"M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z\"]\n};\nvar faHaykal = {\n  prefix: 'fas',\n  iconName: 'haykal',\n  icon: [512, 512, [], \"f666\", \"M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z\"]\n};\nvar faHdd = {\n  prefix: 'fas',\n  iconName: 'hdd',\n  icon: [576, 512, [], \"f0a0\", \"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faHeading = {\n  prefix: 'fas',\n  iconName: 'heading',\n  icon: [512, 512, [], \"f1dc\", \"M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z\"]\n};\nvar faHeadphones = {\n  prefix: 'fas',\n  iconName: 'headphones',\n  icon: [512, 512, [], \"f025\", \"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"]\n};\nvar faHeadphonesAlt = {\n  prefix: 'fas',\n  iconName: 'headphones-alt',\n  icon: [512, 512, [], \"f58f\", \"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"]\n};\nvar faHeadset = {\n  prefix: 'fas',\n  iconName: 'headset',\n  icon: [512, 512, [], \"f590\", \"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"]\n};\nvar faHeart = {\n  prefix: 'fas',\n  iconName: 'heart',\n  icon: [512, 512, [], \"f004\", \"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"]\n};\nvar faHeartBroken = {\n  prefix: 'fas',\n  iconName: 'heart-broken',\n  icon: [512, 512, [], \"f7a9\", \"M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHeartbeat = {\n  prefix: 'fas',\n  iconName: 'heartbeat',\n  icon: [512, 512, [], \"f21e\", \"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHelicopter = {\n  prefix: 'fas',\n  iconName: 'helicopter',\n  icon: [640, 512, [], \"f533\", \"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"]\n};\nvar faHighlighter = {\n  prefix: 'fas',\n  iconName: 'highlighter',\n  icon: [544, 512, [], \"f591\", \"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"]\n};\nvar faHiking = {\n  prefix: 'fas',\n  iconName: 'hiking',\n  icon: [384, 512, [], \"f6ec\", \"M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z\"]\n};\nvar faHippo = {\n  prefix: 'fas',\n  iconName: 'hippo',\n  icon: [640, 512, [], \"f6ed\", \"M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHistory = {\n  prefix: 'fas',\n  iconName: 'history',\n  icon: [512, 512, [], \"f1da\", \"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"]\n};\nvar faHockeyPuck = {\n  prefix: 'fas',\n  iconName: 'hockey-puck',\n  icon: [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"]\n};\nvar faHollyBerry = {\n  prefix: 'fas',\n  iconName: 'holly-berry',\n  icon: [448, 512, [], \"f7aa\", \"M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z\"]\n};\nvar faHome = {\n  prefix: 'fas',\n  iconName: 'home',\n  icon: [576, 512, [], \"f015\", \"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"]\n};\nvar faHorse = {\n  prefix: 'fas',\n  iconName: 'horse',\n  icon: [576, 512, [], \"f6f0\", \"M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHorseHead = {\n  prefix: 'fas',\n  iconName: 'horse-head',\n  icon: [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z\"]\n};\nvar faHospital = {\n  prefix: 'fas',\n  iconName: 'hospital',\n  icon: [448, 512, [], \"f0f8\", \"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"]\n};\nvar faHospitalAlt = {\n  prefix: 'fas',\n  iconName: 'hospital-alt',\n  icon: [576, 512, [], \"f47d\", \"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faHospitalSymbol = {\n  prefix: 'fas',\n  iconName: 'hospital-symbol',\n  icon: [512, 512, [], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"]\n};\nvar faHotTub = {\n  prefix: 'fas',\n  iconName: 'hot-tub',\n  icon: [512, 512, [], \"f593\", \"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"]\n};\nvar faHotdog = {\n  prefix: 'fas',\n  iconName: 'hotdog',\n  icon: [512, 512, [], \"f80f\", \"M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z\"]\n};\nvar faHotel = {\n  prefix: 'fas',\n  iconName: 'hotel',\n  icon: [576, 512, [], \"f594\", \"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faHourglass = {\n  prefix: 'fas',\n  iconName: 'hourglass',\n  icon: [384, 512, [], \"f254\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"]\n};\nvar faHourglassEnd = {\n  prefix: 'fas',\n  iconName: 'hourglass-end',\n  icon: [384, 512, [], \"f253\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"]\n};\nvar faHourglassHalf = {\n  prefix: 'fas',\n  iconName: 'hourglass-half',\n  icon: [384, 512, [], \"f252\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"]\n};\nvar faHourglassStart = {\n  prefix: 'fas',\n  iconName: 'hourglass-start',\n  icon: [384, 512, [], \"f251\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"]\n};\nvar faHouseDamage = {\n  prefix: 'fas',\n  iconName: 'house-damage',\n  icon: [576, 512, [], \"f6f1\", \"M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z\"]\n};\nvar faHryvnia = {\n  prefix: 'fas',\n  iconName: 'hryvnia',\n  icon: [384, 512, [], \"f6f2\", \"M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z\"]\n};\nvar faICursor = {\n  prefix: 'fas',\n  iconName: 'i-cursor',\n  icon: [256, 512, [], \"f246\", \"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"]\n};\nvar faIceCream = {\n  prefix: 'fas',\n  iconName: 'ice-cream',\n  icon: [448, 512, [], \"f810\", \"M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z\"]\n};\nvar faIcicles = {\n  prefix: 'fas',\n  iconName: 'icicles',\n  icon: [512, 512, [], \"f7ad\", \"M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z\"]\n};\nvar faIdBadge = {\n  prefix: 'fas',\n  iconName: 'id-badge',\n  icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faIdCard = {\n  prefix: 'fas',\n  iconName: 'id-card',\n  icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"]\n};\nvar faIdCardAlt = {\n  prefix: 'fas',\n  iconName: 'id-card-alt',\n  icon: [576, 512, [], \"f47f\", \"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"]\n};\nvar faIgloo = {\n  prefix: 'fas',\n  iconName: 'igloo',\n  icon: [576, 512, [], \"f7ae\", \"M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z\"]\n};\nvar faImage = {\n  prefix: 'fas',\n  iconName: 'image',\n  icon: [512, 512, [], \"f03e\", \"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"]\n};\nvar faImages = {\n  prefix: 'fas',\n  iconName: 'images',\n  icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"]\n};\nvar faInbox = {\n  prefix: 'fas',\n  iconName: 'inbox',\n  icon: [576, 512, [], \"f01c\", \"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"]\n};\nvar faIndent = {\n  prefix: 'fas',\n  iconName: 'indent',\n  icon: [448, 512, [], \"f03c\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z\"]\n};\nvar faIndustry = {\n  prefix: 'fas',\n  iconName: 'industry',\n  icon: [512, 512, [], \"f275\", \"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"]\n};\nvar faInfinity = {\n  prefix: 'fas',\n  iconName: 'infinity',\n  icon: [640, 512, [], \"f534\", \"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"]\n};\nvar faInfo = {\n  prefix: 'fas',\n  iconName: 'info',\n  icon: [192, 512, [], \"f129\", \"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"]\n};\nvar faInfoCircle = {\n  prefix: 'fas',\n  iconName: 'info-circle',\n  icon: [512, 512, [], \"f05a\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"]\n};\nvar faItalic = {\n  prefix: 'fas',\n  iconName: 'italic',\n  icon: [320, 512, [], \"f033\", \"M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z\"]\n};\nvar faJedi = {\n  prefix: 'fas',\n  iconName: 'jedi',\n  icon: [544, 512, [], \"f669\", \"M479.99 352l58.88-58.87c3.29-16.8 5.13-34.12 5.13-51.86 0-5.81-.68-11.51-1.05-17.27H496l41.25-41.24c-14.5-64.79-52.43-123.05-107.91-162.27-2.77-1.96-5.97-2.99-9.25-2.99-5.37 0-10.41 2.71-13.49 7.24-3.05 4.49-3.64 9.99-1.61 15.09 6.55 16.46 9.86 33.73 9.86 51.31 0 45.12-21.03 86.57-57.69 113.73-4.02 2.98-6.46 7.5-6.7 12.4-.24 4.92 1.76 9.66 5.49 13.03 32.93 29.75 47.35 73.51 38.57 117.07-9.74 48.35-48.84 87.1-97.31 96.5l-2.5-65.34L321.88 397c2.98 2.06 7.39 1.69 10.02-.8a8.002 8.002 0 0 0 1.34-9.92l-20.11-33.73 42.07-8.72c3.7-.75 6.38-4.05 6.38-7.83 0-3.77-2.69-7.06-6.38-7.83l-42.07-8.73 20.13-33.77c1.92-3.23 1.34-7.31-1.38-9.91-2.7-2.55-6.97-2.89-10-.8l-30.39 20.67L279.96 7.7a7.964 7.964 0 0 0-8-7.7c-4.33 0-7.84 3.38-8 7.67l-11.52 287.97-30.39-20.66c-3.14-2.12-7.27-1.83-10 .78-2.72 2.59-3.3 6.67-1.36 9.94l20.11 33.73-42.07 8.73c-3.7.75-6.38 4.05-6.38 7.83s2.67 7.08 6.38 7.83l42.07 8.72-20.13 33.77c-1.92 3.23-1.34 7.33 1.39 9.94 2.59 2.45 7.03 2.75 10 .75l27.16-18.48-2.5 65.26c-56.94-11.64-99.89-61.89-99.89-121.92 0-35.08 14.62-67.6 41.17-91.58 3.72-3.36 5.72-8.11 5.48-13.01-.24-4.9-2.68-9.41-6.69-12.38-36.67-27.16-57.71-68.62-57.71-113.74 0-17.56 3.31-34.81 9.84-51.26 2.02-5.09 1.43-10.59-1.62-15.09-3.08-4.54-8.13-7.25-13.51-7.25-3.3 0-6.5 1.04-9.27 3-55.87 39.52-93.6 97.37-107.97 162.07L47.93 224H.72c-.63 9.92-.97 19.91-.5 29.99.62 13.43 2.54 26.53 5.11 39.41l58.6 58.6H24.02c41.25 90.23 131.13 154.94 235.1 159.71 4.3.2 8.59.29 12.85.29 110.34 0 205.35-65.83 247.98-160h-39.96z\"]\n};\nvar faJoint = {\n  prefix: 'fas',\n  iconName: 'joint',\n  icon: [640, 512, [], \"f595\", \"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"]\n};\nvar faJournalWhills = {\n  prefix: 'fas',\n  iconName: 'journal-whills',\n  icon: [448, 512, [], \"f66a\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM133.08 144.39l21.26 21.26c1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34c3.12-3.12 3.12-8.19 0-11.31l-26.42-26.42c10-20.9 26.24-37.97 46.37-49.26C179.62 88.4 176 99.74 176 112c0 19.96 9.33 37.57 23.66 49.31C190.01 171.37 184 184.96 184 200c0 26.94 19.04 49.4 44.38 54.76l1.36-32.71-10.37 7.04c-.69.45-1.47.69-2.25.69-1 0-1.98-.38-2.75-1.09a4.006 4.006 0 0 1-.69-4.95l8.54-14.31-17.91-3.72c-1.86-.39-3.19-2.03-3.19-3.92s1.33-3.53 3.19-3.92l17.91-3.72-8.54-14.31c-.95-1.61-.67-3.67.69-4.95 1.36-1.3 3.44-1.44 5-.41l12.01 8.16L236 71.83c.09-2.14 1.86-3.83 4-3.83s3.91 1.69 4 3.83l4.68 112.29 14.2-9.65a4.067 4.067 0 0 1 5 .41 4.006 4.006 0 0 1 .69 4.95l-8.54 14.31 17.91 3.72c1.86.39 3.19 2.03 3.19 3.92s-1.33 3.53-3.19 3.92l-17.91 3.72 8.54 14.31c.95 1.61.67 3.67-.69 4.95-.77.72-1.77 1.09-2.75 1.09-.78 0-1.56-.23-2.25-.69l-12.68-8.62 1.43 34.28C276.96 249.4 296 226.94 296 200c0-15.04-6.01-28.63-15.66-38.69C294.67 149.57 304 131.96 304 112c0-12.26-3.62-23.6-9.6-33.33 20.13 11.28 36.37 28.36 46.37 49.26l-26.42 26.42c-3.12 3.12-3.12 8.19 0 11.31 1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34l21.26-21.26c2.97 10.08 5.07 20.55 5.07 31.6 0 .52-.14.99-.15 1.51l-37.11 32.47a7.975 7.975 0 0 0-.75 11.28 7.97 7.97 0 0 0 6.02 2.73c1.88 0 3.75-.66 5.27-1.98l23.59-20.64C337.32 250.96 293.09 288 240 288s-97.32-37.04-108.86-86.62l23.59 20.64A7.957 7.957 0 0 0 160 224c2.22 0 4.44-.92 6.02-2.73 2.92-3.33 2.58-8.38-.75-11.28l-37.11-32.47c-.01-.52-.15-.99-.15-1.51-.01-11.06 2.09-21.53 5.07-31.62zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faKaaba = {\n  prefix: 'fas',\n  iconName: 'kaaba',\n  icon: [576, 512, [], \"f66b\", \"M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z\"]\n};\nvar faKey = {\n  prefix: 'fas',\n  iconName: 'key',\n  icon: [512, 512, [], \"f084\", \"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"]\n};\nvar faKeyboard = {\n  prefix: 'fas',\n  iconName: 'keyboard',\n  icon: [576, 512, [], \"f11c\", \"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faKhanda = {\n  prefix: 'fas',\n  iconName: 'khanda',\n  icon: [512, 512, [], \"f66d\", \"M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z\"]\n};\nvar faKiss = {\n  prefix: 'fas',\n  iconName: 'kiss',\n  icon: [496, 512, [], \"f596\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faKissBeam = {\n  prefix: 'fas',\n  iconName: 'kiss-beam',\n  icon: [496, 512, [], \"f597\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"]\n};\nvar faKissWinkHeart = {\n  prefix: 'fas',\n  iconName: 'kiss-wink-heart',\n  icon: [504, 512, [], \"f598\", \"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"]\n};\nvar faKiwiBird = {\n  prefix: 'fas',\n  iconName: 'kiwi-bird',\n  icon: [576, 512, [], \"f535\", \"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"]\n};\nvar faLandmark = {\n  prefix: 'fas',\n  iconName: 'landmark',\n  icon: [512, 512, [], \"f66f\", \"M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faLanguage = {\n  prefix: 'fas',\n  iconName: 'language',\n  icon: [640, 512, [], \"f1ab\", \"M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z\"]\n};\nvar faLaptop = {\n  prefix: 'fas',\n  iconName: 'laptop',\n  icon: [640, 512, [], \"f109\", \"M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopCode = {\n  prefix: 'fas',\n  iconName: 'laptop-code',\n  icon: [640, 512, [], \"f5fc\", \"M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopMedical = {\n  prefix: 'fas',\n  iconName: 'laptop-medical',\n  icon: [640, 512, [], \"f812\", \"M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z\"]\n};\nvar faLaugh = {\n  prefix: 'fas',\n  iconName: 'laugh',\n  icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"]\n};\nvar faLaughBeam = {\n  prefix: 'fas',\n  iconName: 'laugh-beam',\n  icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughSquint = {\n  prefix: 'fas',\n  iconName: 'laugh-squint',\n  icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughWink = {\n  prefix: 'fas',\n  iconName: 'laugh-wink',\n  icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLayerGroup = {\n  prefix: 'fas',\n  iconName: 'layer-group',\n  icon: [512, 512, [], \"f5fd\", \"M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z\"]\n};\nvar faLeaf = {\n  prefix: 'fas',\n  iconName: 'leaf',\n  icon: [576, 512, [], \"f06c\", \"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"]\n};\nvar faLemon = {\n  prefix: 'fas',\n  iconName: 'lemon',\n  icon: [512, 512, [], \"f094\", \"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"]\n};\nvar faLessThan = {\n  prefix: 'fas',\n  iconName: 'less-than',\n  icon: [384, 512, [], \"f536\", \"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"]\n};\nvar faLessThanEqual = {\n  prefix: 'fas',\n  iconName: 'less-than-equal',\n  icon: [448, 512, [], \"f537\", \"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faLevelDownAlt = {\n  prefix: 'fas',\n  iconName: 'level-down-alt',\n  icon: [320, 512, [], \"f3be\", \"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"]\n};\nvar faLevelUpAlt = {\n  prefix: 'fas',\n  iconName: 'level-up-alt',\n  icon: [320, 512, [], \"f3bf\", \"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"]\n};\nvar faLifeRing = {\n  prefix: 'fas',\n  iconName: 'life-ring',\n  icon: [512, 512, [], \"f1cd\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"]\n};\nvar faLightbulb = {\n  prefix: 'fas',\n  iconName: 'lightbulb',\n  icon: [352, 512, [], \"f0eb\", \"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faLink = {\n  prefix: 'fas',\n  iconName: 'link',\n  icon: [512, 512, [], \"f0c1\", \"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"]\n};\nvar faLiraSign = {\n  prefix: 'fas',\n  iconName: 'lira-sign',\n  icon: [384, 512, [], \"f195\", \"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"]\n};\nvar faList = {\n  prefix: 'fas',\n  iconName: 'list',\n  icon: [512, 512, [], \"f03a\", \"M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z\"]\n};\nvar faListAlt = {\n  prefix: 'fas',\n  iconName: 'list-alt',\n  icon: [512, 512, [], \"f022\", \"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"]\n};\nvar faListOl = {\n  prefix: 'fas',\n  iconName: 'list-ol',\n  icon: [512, 512, [], \"f0cb\", \"M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faListUl = {\n  prefix: 'fas',\n  iconName: 'list-ul',\n  icon: [512, 512, [], \"f0ca\", \"M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faLocationArrow = {\n  prefix: 'fas',\n  iconName: 'location-arrow',\n  icon: [512, 512, [], \"f124\", \"M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z\"]\n};\nvar faLock = {\n  prefix: 'fas',\n  iconName: 'lock',\n  icon: [448, 512, [], \"f023\", \"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"]\n};\nvar faLockOpen = {\n  prefix: 'fas',\n  iconName: 'lock-open',\n  icon: [576, 512, [], \"f3c1\", \"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"]\n};\nvar faLongArrowAltDown = {\n  prefix: 'fas',\n  iconName: 'long-arrow-alt-down',\n  icon: [256, 512, [], \"f309\", \"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"]\n};\nvar faLongArrowAltLeft = {\n  prefix: 'fas',\n  iconName: 'long-arrow-alt-left',\n  icon: [448, 512, [], \"f30a\", \"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"]\n};\nvar faLongArrowAltRight = {\n  prefix: 'fas',\n  iconName: 'long-arrow-alt-right',\n  icon: [448, 512, [], \"f30b\", \"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"]\n};\nvar faLongArrowAltUp = {\n  prefix: 'fas',\n  iconName: 'long-arrow-alt-up',\n  icon: [256, 512, [], \"f30c\", \"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"]\n};\nvar faLowVision = {\n  prefix: 'fas',\n  iconName: 'low-vision',\n  icon: [576, 512, [], \"f2a8\", \"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"]\n};\nvar faLuggageCart = {\n  prefix: 'fas',\n  iconName: 'luggage-cart',\n  icon: [640, 512, [], \"f59d\", \"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"]\n};\nvar faMagic = {\n  prefix: 'fas',\n  iconName: 'magic',\n  icon: [512, 512, [], \"f0d0\", \"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"]\n};\nvar faMagnet = {\n  prefix: 'fas',\n  iconName: 'magnet',\n  icon: [512, 512, [], \"f076\", \"M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z\"]\n};\nvar faMailBulk = {\n  prefix: 'fas',\n  iconName: 'mail-bulk',\n  icon: [576, 512, [], \"f674\", \"M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z\"]\n};\nvar faMale = {\n  prefix: 'fas',\n  iconName: 'male',\n  icon: [192, 512, [], \"f183\", \"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"]\n};\nvar faMap = {\n  prefix: 'fas',\n  iconName: 'map',\n  icon: [576, 512, [], \"f279\", \"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarked = {\n  prefix: 'fas',\n  iconName: 'map-marked',\n  icon: [576, 512, [], \"f59f\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarkedAlt = {\n  prefix: 'fas',\n  iconName: 'map-marked-alt',\n  icon: [576, 512, [], \"f5a0\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarker = {\n  prefix: 'fas',\n  iconName: 'map-marker',\n  icon: [384, 512, [], \"f041\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"]\n};\nvar faMapMarkerAlt = {\n  prefix: 'fas',\n  iconName: 'map-marker-alt',\n  icon: [384, 512, [], \"f3c5\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"]\n};\nvar faMapPin = {\n  prefix: 'fas',\n  iconName: 'map-pin',\n  icon: [288, 512, [], \"f276\", \"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"]\n};\nvar faMapSigns = {\n  prefix: 'fas',\n  iconName: 'map-signs',\n  icon: [512, 512, [], \"f277\", \"M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z\"]\n};\nvar faMarker = {\n  prefix: 'fas',\n  iconName: 'marker',\n  icon: [512, 512, [], \"f5a1\", \"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"]\n};\nvar faMars = {\n  prefix: 'fas',\n  iconName: 'mars',\n  icon: [384, 512, [], \"f222\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsDouble = {\n  prefix: 'fas',\n  iconName: 'mars-double',\n  icon: [512, 512, [], \"f227\", \"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"]\n};\nvar faMarsStroke = {\n  prefix: 'fas',\n  iconName: 'mars-stroke',\n  icon: [384, 512, [], \"f229\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsStrokeH = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-h',\n  icon: [480, 512, [], \"f22b\", \"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMarsStrokeV = {\n  prefix: 'fas',\n  iconName: 'mars-stroke-v',\n  icon: [288, 512, [], \"f22a\", \"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMask = {\n  prefix: 'fas',\n  iconName: 'mask',\n  icon: [640, 512, [], \"f6fa\", \"M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z\"]\n};\nvar faMedal = {\n  prefix: 'fas',\n  iconName: 'medal',\n  icon: [512, 512, [], \"f5a2\", \"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"]\n};\nvar faMedkit = {\n  prefix: 'fas',\n  iconName: 'medkit',\n  icon: [512, 512, [], \"f0fa\", \"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"]\n};\nvar faMeh = {\n  prefix: 'fas',\n  iconName: 'meh',\n  icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehBlank = {\n  prefix: 'fas',\n  iconName: 'meh-blank',\n  icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehRollingEyes = {\n  prefix: 'fas',\n  iconName: 'meh-rolling-eyes',\n  icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"]\n};\nvar faMemory = {\n  prefix: 'fas',\n  iconName: 'memory',\n  icon: [640, 512, [], \"f538\", \"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"]\n};\nvar faMenorah = {\n  prefix: 'fas',\n  iconName: 'menorah',\n  icon: [640, 512, [], \"f676\", \"M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z\"]\n};\nvar faMercury = {\n  prefix: 'fas',\n  iconName: 'mercury',\n  icon: [288, 512, [], \"f223\", \"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faMeteor = {\n  prefix: 'fas',\n  iconName: 'meteor',\n  icon: [512, 512, [], \"f753\", \"M491.2.7C452.5 12.3 379.4 35 303.5 62c-2.1-7-4-13.5-5.6-18.6-3-9.7-13.9-14.2-22.9-9.5C232.6 56 122.2 116.5 60.6 176.4c-1.1 1-2.5 2-3.5 3C19 217.4 0 267.3 0 317.2 0 367 19 416.9 57 455c38 38 87.9 57.1 137.8 57 49.9 0 99.8-19 137.9-57.1 1-1 2-2.4 3-3.5 59.8-61.6 120.4-172.1 142.5-214.4 4.7-9 .2-19.9-9.5-22.9-5.2-1.6-11.6-3.5-18.6-5.6 27-76 49.7-149 61.3-187.7C515 8.4 503.6-3 491.2.7zM192 448c-70.7 0-128-57.3-128-128s57.3-128 128-128 128 57.3 128 128-57.3 128-128 128zm-32-192c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm48 96c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16z\"]\n};\nvar faMicrochip = {\n  prefix: 'fas',\n  iconName: 'microchip',\n  icon: [512, 512, [], \"f2db\", \"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"]\n};\nvar faMicrophone = {\n  prefix: 'fas',\n  iconName: 'microphone',\n  icon: [352, 512, [], \"f130\", \"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneAlt = {\n  prefix: 'fas',\n  iconName: 'microphone-alt',\n  icon: [352, 512, [], \"f3c9\", \"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"]\n};\nvar faMicrophoneAltSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-alt-slash',\n  icon: [640, 512, [], \"f539\", \"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneSlash = {\n  prefix: 'fas',\n  iconName: 'microphone-slash',\n  icon: [640, 512, [], \"f131\", \"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicroscope = {\n  prefix: 'fas',\n  iconName: 'microscope',\n  icon: [512, 512, [], \"f610\", \"M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z\"]\n};\nvar faMinus = {\n  prefix: 'fas',\n  iconName: 'minus',\n  icon: [448, 512, [], \"f068\", \"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faMinusCircle = {\n  prefix: 'fas',\n  iconName: 'minus-circle',\n  icon: [512, 512, [], \"f056\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"]\n};\nvar faMinusSquare = {\n  prefix: 'fas',\n  iconName: 'minus-square',\n  icon: [448, 512, [], \"f146\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"]\n};\nvar faMitten = {\n  prefix: 'fas',\n  iconName: 'mitten',\n  icon: [448, 512, [], \"f7b5\", \"M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z\"]\n};\nvar faMobile = {\n  prefix: 'fas',\n  iconName: 'mobile',\n  icon: [320, 512, [], \"f10b\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMobileAlt = {\n  prefix: 'fas',\n  iconName: 'mobile-alt',\n  icon: [320, 512, [], \"f3cd\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faMoneyBill = {\n  prefix: 'fas',\n  iconName: 'money-bill',\n  icon: [640, 512, [], \"f0d6\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillAlt = {\n  prefix: 'fas',\n  iconName: 'money-bill-alt',\n  icon: [640, 512, [], \"f3d1\", \"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillWave = {\n  prefix: 'fas',\n  iconName: 'money-bill-wave',\n  icon: [640, 512, [], \"f53a\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"]\n};\nvar faMoneyBillWaveAlt = {\n  prefix: 'fas',\n  iconName: 'money-bill-wave-alt',\n  icon: [640, 512, [], \"f53b\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"]\n};\nvar faMoneyCheck = {\n  prefix: 'fas',\n  iconName: 'money-check',\n  icon: [640, 512, [], \"f53c\", \"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMoneyCheckAlt = {\n  prefix: 'fas',\n  iconName: 'money-check-alt',\n  icon: [640, 512, [], \"f53d\", \"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faMonument = {\n  prefix: 'fas',\n  iconName: 'monument',\n  icon: [384, 512, [], \"f5a6\", \"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faMoon = {\n  prefix: 'fas',\n  iconName: 'moon',\n  icon: [512, 512, [], \"f186\", \"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"]\n};\nvar faMortarPestle = {\n  prefix: 'fas',\n  iconName: 'mortar-pestle',\n  icon: [512, 512, [], \"f5a7\", \"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faMosque = {\n  prefix: 'fas',\n  iconName: 'mosque',\n  icon: [640, 512, [], \"f678\", \"M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z\"]\n};\nvar faMotorcycle = {\n  prefix: 'fas',\n  iconName: 'motorcycle',\n  icon: [640, 512, [], \"f21c\", \"M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z\"]\n};\nvar faMountain = {\n  prefix: 'fas',\n  iconName: 'mountain',\n  icon: [640, 512, [], \"f6fc\", \"M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z\"]\n};\nvar faMousePointer = {\n  prefix: 'fas',\n  iconName: 'mouse-pointer',\n  icon: [320, 512, [], \"f245\", \"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"]\n};\nvar faMugHot = {\n  prefix: 'fas',\n  iconName: 'mug-hot',\n  icon: [512, 512, [], \"f7b6\", \"M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faMusic = {\n  prefix: 'fas',\n  iconName: 'music',\n  icon: [512, 512, [], \"f001\", \"M511.99 32.01c0-21.71-21.1-37.01-41.6-30.51L150.4 96c-13.3 4.2-22.4 16.5-22.4 30.5v261.42c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64V214.31l256-75.02v184.63c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64l-.01-351.99z\"]\n};\nvar faNetworkWired = {\n  prefix: 'fas',\n  iconName: 'network-wired',\n  icon: [640, 512, [], \"f6ff\", \"M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z\"]\n};\nvar faNeuter = {\n  prefix: 'fas',\n  iconName: 'neuter',\n  icon: [288, 512, [], \"f22c\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faNewspaper = {\n  prefix: 'fas',\n  iconName: 'newspaper',\n  icon: [576, 512, [], \"f1ea\", \"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"]\n};\nvar faNotEqual = {\n  prefix: 'fas',\n  iconName: 'not-equal',\n  icon: [448, 512, [], \"f53e\", \"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"]\n};\nvar faNotesMedical = {\n  prefix: 'fas',\n  iconName: 'notes-medical',\n  icon: [384, 512, [], \"f481\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faObjectGroup = {\n  prefix: 'fas',\n  iconName: 'object-group',\n  icon: [512, 512, [], \"f247\", \"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"]\n};\nvar faObjectUngroup = {\n  prefix: 'fas',\n  iconName: 'object-ungroup',\n  icon: [576, 512, [], \"f248\", \"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"]\n};\nvar faOilCan = {\n  prefix: 'fas',\n  iconName: 'oil-can',\n  icon: [640, 512, [], \"f613\", \"M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z\"]\n};\nvar faOm = {\n  prefix: 'fas',\n  iconName: 'om',\n  icon: [512, 512, [], \"f679\", \"M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z\"]\n};\nvar faOtter = {\n  prefix: 'fas',\n  iconName: 'otter',\n  icon: [640, 512, [], \"f700\", \"M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z\"]\n};\nvar faOutdent = {\n  prefix: 'fas',\n  iconName: 'outdent',\n  icon: [448, 512, [], \"f03b\", \"M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z\"]\n};\nvar faPager = {\n  prefix: 'fas',\n  iconName: 'pager',\n  icon: [512, 512, [], \"f815\", \"M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z\"]\n};\nvar faPaintBrush = {\n  prefix: 'fas',\n  iconName: 'paint-brush',\n  icon: [512, 512, [], \"f1fc\", \"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"]\n};\nvar faPaintRoller = {\n  prefix: 'fas',\n  iconName: 'paint-roller',\n  icon: [512, 512, [], \"f5aa\", \"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"]\n};\nvar faPalette = {\n  prefix: 'fas',\n  iconName: 'palette',\n  icon: [512, 512, [], \"f53f\", \"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPallet = {\n  prefix: 'fas',\n  iconName: 'pallet',\n  icon: [640, 512, [], \"f482\", \"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"]\n};\nvar faPaperPlane = {\n  prefix: 'fas',\n  iconName: 'paper-plane',\n  icon: [512, 512, [], \"f1d8\", \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"]\n};\nvar faPaperclip = {\n  prefix: 'fas',\n  iconName: 'paperclip',\n  icon: [448, 512, [], \"f0c6\", \"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"]\n};\nvar faParachuteBox = {\n  prefix: 'fas',\n  iconName: 'parachute-box',\n  icon: [512, 512, [], \"f4cd\", \"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"]\n};\nvar faParagraph = {\n  prefix: 'fas',\n  iconName: 'paragraph',\n  icon: [448, 512, [], \"f1dd\", \"M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z\"]\n};\nvar faParking = {\n  prefix: 'fas',\n  iconName: 'parking',\n  icon: [448, 512, [], \"f540\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"]\n};\nvar faPassport = {\n  prefix: 'fas',\n  iconName: 'passport',\n  icon: [448, 512, [], \"f5ab\", \"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"]\n};\nvar faPastafarianism = {\n  prefix: 'fas',\n  iconName: 'pastafarianism',\n  icon: [640, 512, [], \"f67b\", \"M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z\"]\n};\nvar faPaste = {\n  prefix: 'fas',\n  iconName: 'paste',\n  icon: [448, 512, [], \"f0ea\", \"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"]\n};\nvar faPause = {\n  prefix: 'fas',\n  iconName: 'pause',\n  icon: [448, 512, [], \"f04c\", \"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"]\n};\nvar faPauseCircle = {\n  prefix: 'fas',\n  iconName: 'pause-circle',\n  icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faPaw = {\n  prefix: 'fas',\n  iconName: 'paw',\n  icon: [512, 512, [], \"f1b0\", \"M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z\"]\n};\nvar faPeace = {\n  prefix: 'fas',\n  iconName: 'peace',\n  icon: [496, 512, [], \"f67c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z\"]\n};\nvar faPen = {\n  prefix: 'fas',\n  iconName: 'pen',\n  icon: [512, 512, [], \"f304\", \"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"]\n};\nvar faPenAlt = {\n  prefix: 'fas',\n  iconName: 'pen-alt',\n  icon: [512, 512, [], \"f305\", \"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"]\n};\nvar faPenFancy = {\n  prefix: 'fas',\n  iconName: 'pen-fancy',\n  icon: [512, 512, [], \"f5ac\", \"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"]\n};\nvar faPenNib = {\n  prefix: 'fas',\n  iconName: 'pen-nib',\n  icon: [512, 512, [], \"f5ad\", \"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"]\n};\nvar faPenSquare = {\n  prefix: 'fas',\n  iconName: 'pen-square',\n  icon: [448, 512, [], \"f14b\", \"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"]\n};\nvar faPencilAlt = {\n  prefix: 'fas',\n  iconName: 'pencil-alt',\n  icon: [512, 512, [], \"f303\", \"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"]\n};\nvar faPencilRuler = {\n  prefix: 'fas',\n  iconName: 'pencil-ruler',\n  icon: [512, 512, [], \"f5ae\", \"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"]\n};\nvar faPeopleCarry = {\n  prefix: 'fas',\n  iconName: 'people-carry',\n  icon: [640, 512, [], \"f4ce\", \"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"]\n};\nvar faPepperHot = {\n  prefix: 'fas',\n  iconName: 'pepper-hot',\n  icon: [512, 512, [], \"f816\", \"M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z\"]\n};\nvar faPercent = {\n  prefix: 'fas',\n  iconName: 'percent',\n  icon: [448, 512, [], \"f295\", \"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"]\n};\nvar faPercentage = {\n  prefix: 'fas',\n  iconName: 'percentage',\n  icon: [384, 512, [], \"f541\", \"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"]\n};\nvar faPersonBooth = {\n  prefix: 'fas',\n  iconName: 'person-booth',\n  icon: [576, 512, [], \"f756\", \"M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z\"]\n};\nvar faPhone = {\n  prefix: 'fas',\n  iconName: 'phone',\n  icon: [512, 512, [], \"f095\", \"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"]\n};\nvar faPhoneSlash = {\n  prefix: 'fas',\n  iconName: 'phone-slash',\n  icon: [640, 512, [], \"f3dd\", \"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faPhoneSquare = {\n  prefix: 'fas',\n  iconName: 'phone-square',\n  icon: [448, 512, [], \"f098\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"]\n};\nvar faPhoneVolume = {\n  prefix: 'fas',\n  iconName: 'phone-volume',\n  icon: [384, 512, [], \"f2a0\", \"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"]\n};\nvar faPiggyBank = {\n  prefix: 'fas',\n  iconName: 'piggy-bank',\n  icon: [576, 512, [], \"f4d3\", \"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"]\n};\nvar faPills = {\n  prefix: 'fas',\n  iconName: 'pills',\n  icon: [576, 512, [], \"f484\", \"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"]\n};\nvar faPizzaSlice = {\n  prefix: 'fas',\n  iconName: 'pizza-slice',\n  icon: [512, 512, [], \"f818\", \"M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faPlaceOfWorship = {\n  prefix: 'fas',\n  iconName: 'place-of-worship',\n  icon: [640, 512, [], \"f67f\", \"M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z\"]\n};\nvar faPlane = {\n  prefix: 'fas',\n  iconName: 'plane',\n  icon: [576, 512, [], \"f072\", \"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"]\n};\nvar faPlaneArrival = {\n  prefix: 'fas',\n  iconName: 'plane-arrival',\n  icon: [640, 512, [], \"f5af\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"]\n};\nvar faPlaneDeparture = {\n  prefix: 'fas',\n  iconName: 'plane-departure',\n  icon: [640, 512, [], \"f5b0\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"]\n};\nvar faPlay = {\n  prefix: 'fas',\n  iconName: 'play',\n  icon: [448, 512, [], \"f04b\", \"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"]\n};\nvar faPlayCircle = {\n  prefix: 'fas',\n  iconName: 'play-circle',\n  icon: [512, 512, [], \"f144\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"]\n};\nvar faPlug = {\n  prefix: 'fas',\n  iconName: 'plug',\n  icon: [384, 512, [], \"f1e6\", \"M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z\"]\n};\nvar faPlus = {\n  prefix: 'fas',\n  iconName: 'plus',\n  icon: [448, 512, [], \"f067\", \"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPlusCircle = {\n  prefix: 'fas',\n  iconName: 'plus-circle',\n  icon: [512, 512, [], \"f055\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPlusSquare = {\n  prefix: 'fas',\n  iconName: 'plus-square',\n  icon: [448, 512, [], \"f0fe\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPodcast = {\n  prefix: 'fas',\n  iconName: 'podcast',\n  icon: [448, 512, [], \"f2ce\", \"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"]\n};\nvar faPoll = {\n  prefix: 'fas',\n  iconName: 'poll',\n  icon: [448, 512, [], \"f681\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"]\n};\nvar faPollH = {\n  prefix: 'fas',\n  iconName: 'poll-h',\n  icon: [448, 512, [], \"f682\", \"M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z\"]\n};\nvar faPoo = {\n  prefix: 'fas',\n  iconName: 'poo',\n  icon: [512, 512, [], \"f2fe\", \"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPooStorm = {\n  prefix: 'fas',\n  iconName: 'poo-storm',\n  icon: [448, 512, [], \"f75a\", \"M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z\"]\n};\nvar faPoop = {\n  prefix: 'fas',\n  iconName: 'poop',\n  icon: [512, 512, [], \"f619\", \"M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z\"]\n};\nvar faPortrait = {\n  prefix: 'fas',\n  iconName: 'portrait',\n  icon: [384, 512, [], \"f3e0\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faPoundSign = {\n  prefix: 'fas',\n  iconName: 'pound-sign',\n  icon: [320, 512, [], \"f154\", \"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"]\n};\nvar faPowerOff = {\n  prefix: 'fas',\n  iconName: 'power-off',\n  icon: [512, 512, [], \"f011\", \"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"]\n};\nvar faPray = {\n  prefix: 'fas',\n  iconName: 'pray',\n  icon: [384, 512, [], \"f683\", \"M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z\"]\n};\nvar faPrayingHands = {\n  prefix: 'fas',\n  iconName: 'praying-hands',\n  icon: [640, 512, [], \"f684\", \"M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z\"]\n};\nvar faPrescription = {\n  prefix: 'fas',\n  iconName: 'prescription',\n  icon: [384, 512, [], \"f5b1\", \"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"]\n};\nvar faPrescriptionBottle = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle',\n  icon: [384, 512, [], \"f485\", \"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"]\n};\nvar faPrescriptionBottleAlt = {\n  prefix: 'fas',\n  iconName: 'prescription-bottle-alt',\n  icon: [384, 512, [], \"f486\", \"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"]\n};\nvar faPrint = {\n  prefix: 'fas',\n  iconName: 'print',\n  icon: [512, 512, [], \"f02f\", \"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faProcedures = {\n  prefix: 'fas',\n  iconName: 'procedures',\n  icon: [640, 512, [], \"f487\", \"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faProjectDiagram = {\n  prefix: 'fas',\n  iconName: 'project-diagram',\n  icon: [640, 512, [], \"f542\", \"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPuzzlePiece = {\n  prefix: 'fas',\n  iconName: 'puzzle-piece',\n  icon: [576, 512, [], \"f12e\", \"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"]\n};\nvar faQrcode = {\n  prefix: 'fas',\n  iconName: 'qrcode',\n  icon: [448, 512, [], \"f029\", \"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"]\n};\nvar faQuestion = {\n  prefix: 'fas',\n  iconName: 'question',\n  icon: [384, 512, [], \"f128\", \"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"]\n};\nvar faQuestionCircle = {\n  prefix: 'fas',\n  iconName: 'question-circle',\n  icon: [512, 512, [], \"f059\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"]\n};\nvar faQuidditch = {\n  prefix: 'fas',\n  iconName: 'quidditch',\n  icon: [640, 512, [], \"f458\", \"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"]\n};\nvar faQuoteLeft = {\n  prefix: 'fas',\n  iconName: 'quote-left',\n  icon: [512, 512, [], \"f10d\", \"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuoteRight = {\n  prefix: 'fas',\n  iconName: 'quote-right',\n  icon: [512, 512, [], \"f10e\", \"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuran = {\n  prefix: 'fas',\n  iconName: 'quran',\n  icon: [448, 512, [], \"f687\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faRadiation = {\n  prefix: 'fas',\n  iconName: 'radiation',\n  icon: [496, 512, [], \"f7b9\", \"M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z\"]\n};\nvar faRadiationAlt = {\n  prefix: 'fas',\n  iconName: 'radiation-alt',\n  icon: [496, 512, [], \"f7ba\", \"M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faRainbow = {\n  prefix: 'fas',\n  iconName: 'rainbow',\n  icon: [576, 512, [], \"f75b\", \"M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z\"]\n};\nvar faRandom = {\n  prefix: 'fas',\n  iconName: 'random',\n  icon: [512, 512, [], \"f074\", \"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"]\n};\nvar faReceipt = {\n  prefix: 'fas',\n  iconName: 'receipt',\n  icon: [384, 512, [], \"f543\", \"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faRecycle = {\n  prefix: 'fas',\n  iconName: 'recycle',\n  icon: [512, 512, [], \"f1b8\", \"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"]\n};\nvar faRedo = {\n  prefix: 'fas',\n  iconName: 'redo',\n  icon: [512, 512, [], \"f01e\", \"M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z\"]\n};\nvar faRedoAlt = {\n  prefix: 'fas',\n  iconName: 'redo-alt',\n  icon: [512, 512, [], \"f2f9\", \"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"]\n};\nvar faRegistered = {\n  prefix: 'fas',\n  iconName: 'registered',\n  icon: [512, 512, [], \"f25d\", \"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"]\n};\nvar faReply = {\n  prefix: 'fas',\n  iconName: 'reply',\n  icon: [512, 512, [], \"f3e5\", \"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"]\n};\nvar faReplyAll = {\n  prefix: 'fas',\n  iconName: 'reply-all',\n  icon: [576, 512, [], \"f122\", \"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"]\n};\nvar faRepublican = {\n  prefix: 'fas',\n  iconName: 'republican',\n  icon: [640, 512, [], \"f75e\", \"M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faRestroom = {\n  prefix: 'fas',\n  iconName: 'restroom',\n  icon: [640, 512, [], \"f7bd\", \"M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z\"]\n};\nvar faRetweet = {\n  prefix: 'fas',\n  iconName: 'retweet',\n  icon: [640, 512, [], \"f079\", \"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"]\n};\nvar faRibbon = {\n  prefix: 'fas',\n  iconName: 'ribbon',\n  icon: [448, 512, [], \"f4d6\", \"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"]\n};\nvar faRing = {\n  prefix: 'fas',\n  iconName: 'ring',\n  icon: [512, 512, [], \"f70b\", \"M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z\"]\n};\nvar faRoad = {\n  prefix: 'fas',\n  iconName: 'road',\n  icon: [576, 512, [], \"f018\", \"M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z\"]\n};\nvar faRobot = {\n  prefix: 'fas',\n  iconName: 'robot',\n  icon: [640, 512, [], \"f544\", \"M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z\"]\n};\nvar faRocket = {\n  prefix: 'fas',\n  iconName: 'rocket',\n  icon: [512, 512, [], \"f135\", \"M505.05 19.1a15.89 15.89 0 0 0-12.2-12.2C460.65 0 435.46 0 410.36 0c-103.2 0-165.1 55.2-211.29 128H94.87A48 48 0 0 0 52 154.49l-49.42 98.8A24 24 0 0 0 24.07 288h103.77l-22.47 22.47a32 32 0 0 0 0 45.25l50.9 50.91a32 32 0 0 0 45.26 0L224 384.16V488a24 24 0 0 0 34.7 21.49l98.7-49.39a47.91 47.91 0 0 0 26.5-42.9V312.79c72.59-46.3 128-108.4 128-211.09.1-25.2.1-50.4-6.85-82.6zM384 168a40 40 0 1 1 40-40 40 40 0 0 1-40 40z\"]\n};\nvar faRoute = {\n  prefix: 'fas',\n  iconName: 'route',\n  icon: [512, 512, [], \"f4d7\", \"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faRss = {\n  prefix: 'fas',\n  iconName: 'rss',\n  icon: [448, 512, [], \"f09e\", \"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"]\n};\nvar faRssSquare = {\n  prefix: 'fas',\n  iconName: 'rss-square',\n  icon: [448, 512, [], \"f143\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"]\n};\nvar faRubleSign = {\n  prefix: 'fas',\n  iconName: 'ruble-sign',\n  icon: [384, 512, [], \"f158\", \"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"]\n};\nvar faRuler = {\n  prefix: 'fas',\n  iconName: 'ruler',\n  icon: [640, 512, [], \"f545\", \"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"]\n};\nvar faRulerCombined = {\n  prefix: 'fas',\n  iconName: 'ruler-combined',\n  icon: [512, 512, [], \"f546\", \"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerHorizontal = {\n  prefix: 'fas',\n  iconName: 'ruler-horizontal',\n  icon: [576, 512, [], \"f547\", \"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerVertical = {\n  prefix: 'fas',\n  iconName: 'ruler-vertical',\n  icon: [256, 512, [], \"f548\", \"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"]\n};\nvar faRunning = {\n  prefix: 'fas',\n  iconName: 'running',\n  icon: [416, 512, [], \"f70c\", \"M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z\"]\n};\nvar faRupeeSign = {\n  prefix: 'fas',\n  iconName: 'rupee-sign',\n  icon: [320, 512, [], \"f156\", \"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"]\n};\nvar faSadCry = {\n  prefix: 'fas',\n  iconName: 'sad-cry',\n  icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"]\n};\nvar faSadTear = {\n  prefix: 'fas',\n  iconName: 'sad-tear',\n  icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"]\n};\nvar faSatellite = {\n  prefix: 'fas',\n  iconName: 'satellite',\n  icon: [512, 512, [], \"f7bf\", \"M502.7 265l-80.3-80.4 47.8-47.9c13.1-13.1 13.1-34.4 0-47.5l-47.5-47.5c-13.1-13.1-34.4-13.1-47.5 0l-47.8 47.9-80.3-80.3C240.8 3.1 232.7 0 224.5 0S208.2 3.1 202 9.3L105.3 106c-12.4 12.4-12.4 32.6 0 45.1l80.3 80.4-9.8 9.8C122.1 217 59.6 218.6 7.3 246.7c-8.5 4.6-9.6 16.4-2.8 23.2L112 377.4l-17.8 17.8c-2.6-.7-5-1.6-7.8-1.6-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32c0-2.8-.9-5.2-1.6-7.8l17.8-17.8 107.5 107.5c6.8 6.8 18.7 5.7 23.2-2.8 28.1-52.3 29.7-114.8 5.4-168.5l9.9-9.9 80.3 80.4c6.2 6.2 14.4 9.3 22.5 9.3s16.3-3.1 22.5-9.3l96.7-96.7c12.5-12.4 12.5-32.6.1-45zm-352-136.5l73.8-73.8 68.9 68.9-73.8 73.8-68.9-68.9zm232.8 232.8l-68.9-68.9 73.8-73.8 68.9 68.9-73.8 73.8z\"]\n};\nvar faSatelliteDish = {\n  prefix: 'fas',\n  iconName: 'satellite-dish',\n  icon: [512, 512, [], \"f7c0\", \"M188.8 345.9l27.4-27.4c2.6.7 5 1.6 7.8 1.6 17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32c0 2.8.9 5.2 1.6 7.8l-27.4 27.4L49.4 206.5c-7.3-7.3-20.1-6.1-25 3-41.8 77.8-29.9 176.7 35.7 242.3 65.6 65.6 164.6 77.5 242.3 35.7 9.2-4.9 10.4-17.7 3-25L188.8 345.9zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faSave = {\n  prefix: 'fas',\n  iconName: 'save',\n  icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"]\n};\nvar faSchool = {\n  prefix: 'fas',\n  iconName: 'school',\n  icon: [640, 512, [], \"f549\", \"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"]\n};\nvar faScrewdriver = {\n  prefix: 'fas',\n  iconName: 'screwdriver',\n  icon: [512, 512, [], \"f54a\", \"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"]\n};\nvar faScroll = {\n  prefix: 'fas',\n  iconName: 'scroll',\n  icon: [640, 512, [], \"f70e\", \"M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z\"]\n};\nvar faSdCard = {\n  prefix: 'fas',\n  iconName: 'sd-card',\n  icon: [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z\"]\n};\nvar faSearch = {\n  prefix: 'fas',\n  iconName: 'search',\n  icon: [512, 512, [], \"f002\", \"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"]\n};\nvar faSearchDollar = {\n  prefix: 'fas',\n  iconName: 'search-dollar',\n  icon: [512, 512, [], \"f688\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z\"]\n};\nvar faSearchLocation = {\n  prefix: 'fas',\n  iconName: 'search-location',\n  icon: [512, 512, [], \"f689\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faSearchMinus = {\n  prefix: 'fas',\n  iconName: 'search-minus',\n  icon: [512, 512, [], \"f010\", \"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSearchPlus = {\n  prefix: 'fas',\n  iconName: 'search-plus',\n  icon: [512, 512, [], \"f00e\", \"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSeedling = {\n  prefix: 'fas',\n  iconName: 'seedling',\n  icon: [512, 512, [], \"f4d8\", \"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"]\n};\nvar faServer = {\n  prefix: 'fas',\n  iconName: 'server',\n  icon: [512, 512, [], \"f233\", \"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"]\n};\nvar faShapes = {\n  prefix: 'fas',\n  iconName: 'shapes',\n  icon: [512, 512, [], \"f61f\", \"M512 320v160c0 17.67-14.33 32-32 32H320c-17.67 0-32-14.33-32-32V320c0-17.67 14.33-32 32-32h160c17.67 0 32 14.33 32 32zm-384-64C57.31 256 0 313.31 0 384s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm351.03-32c25.34 0 41.18-26.67 28.51-48L412.51 16c-12.67-21.33-44.35-21.33-57.02 0l-95.03 160c-12.67 21.33 3.17 48 28.51 48h190.06z\"]\n};\nvar faShare = {\n  prefix: 'fas',\n  iconName: 'share',\n  icon: [512, 512, [], \"f064\", \"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"]\n};\nvar faShareAlt = {\n  prefix: 'fas',\n  iconName: 'share-alt',\n  icon: [448, 512, [], \"f1e0\", \"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"]\n};\nvar faShareAltSquare = {\n  prefix: 'fas',\n  iconName: 'share-alt-square',\n  icon: [448, 512, [], \"f1e1\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"]\n};\nvar faShareSquare = {\n  prefix: 'fas',\n  iconName: 'share-square',\n  icon: [576, 512, [], \"f14d\", \"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"]\n};\nvar faShekelSign = {\n  prefix: 'fas',\n  iconName: 'shekel-sign',\n  icon: [448, 512, [], \"f20b\", \"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faShieldAlt = {\n  prefix: 'fas',\n  iconName: 'shield-alt',\n  icon: [512, 512, [], \"f3ed\", \"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"]\n};\nvar faShip = {\n  prefix: 'fas',\n  iconName: 'ship',\n  icon: [640, 512, [], \"f21a\", \"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"]\n};\nvar faShippingFast = {\n  prefix: 'fas',\n  iconName: 'shipping-fast',\n  icon: [640, 512, [], \"f48b\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faShoePrints = {\n  prefix: 'fas',\n  iconName: 'shoe-prints',\n  icon: [640, 512, [], \"f54b\", \"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"]\n};\nvar faShoppingBag = {\n  prefix: 'fas',\n  iconName: 'shopping-bag',\n  icon: [448, 512, [], \"f290\", \"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"]\n};\nvar faShoppingBasket = {\n  prefix: 'fas',\n  iconName: 'shopping-basket',\n  icon: [576, 512, [], \"f291\", \"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"]\n};\nvar faShoppingCart = {\n  prefix: 'fas',\n  iconName: 'shopping-cart',\n  icon: [576, 512, [], \"f07a\", \"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"]\n};\nvar faShower = {\n  prefix: 'fas',\n  iconName: 'shower',\n  icon: [512, 512, [], \"f2cc\", \"M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z\"]\n};\nvar faShuttleVan = {\n  prefix: 'fas',\n  iconName: 'shuttle-van',\n  icon: [640, 512, [], \"f5b6\", \"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"]\n};\nvar faSign = {\n  prefix: 'fas',\n  iconName: 'sign',\n  icon: [512, 512, [], \"f4d9\", \"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"]\n};\nvar faSignInAlt = {\n  prefix: 'fas',\n  iconName: 'sign-in-alt',\n  icon: [512, 512, [], \"f2f6\", \"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"]\n};\nvar faSignLanguage = {\n  prefix: 'fas',\n  iconName: 'sign-language',\n  icon: [448, 512, [], \"f2a7\", \"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"]\n};\nvar faSignOutAlt = {\n  prefix: 'fas',\n  iconName: 'sign-out-alt',\n  icon: [512, 512, [], \"f2f5\", \"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"]\n};\nvar faSignal = {\n  prefix: 'fas',\n  iconName: 'signal',\n  icon: [640, 512, [], \"f012\", \"M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faSignature = {\n  prefix: 'fas',\n  iconName: 'signature',\n  icon: [640, 512, [], \"f5b7\", \"M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z\"]\n};\nvar faSimCard = {\n  prefix: 'fas',\n  iconName: 'sim-card',\n  icon: [384, 512, [], \"f7c4\", \"M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z\"]\n};\nvar faSitemap = {\n  prefix: 'fas',\n  iconName: 'sitemap',\n  icon: [640, 512, [], \"f0e8\", \"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faSkating = {\n  prefix: 'fas',\n  iconName: 'skating',\n  icon: [448, 512, [], \"f7c5\", \"M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSkiing = {\n  prefix: 'fas',\n  iconName: 'skiing',\n  icon: [512, 512, [], \"f7c9\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z\"]\n};\nvar faSkiingNordic = {\n  prefix: 'fas',\n  iconName: 'skiing-nordic',\n  icon: [576, 512, [], \"f7ca\", \"M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z\"]\n};\nvar faSkull = {\n  prefix: 'fas',\n  iconName: 'skull',\n  icon: [512, 512, [], \"f54c\", \"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"]\n};\nvar faSkullCrossbones = {\n  prefix: 'fas',\n  iconName: 'skull-crossbones',\n  icon: [448, 512, [], \"f714\", \"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"]\n};\nvar faSlash = {\n  prefix: 'fas',\n  iconName: 'slash',\n  icon: [640, 512, [], \"f715\", \"M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z\"]\n};\nvar faSleigh = {\n  prefix: 'fas',\n  iconName: 'sleigh',\n  icon: [640, 512, [], \"f7cc\", \"M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z\"]\n};\nvar faSlidersH = {\n  prefix: 'fas',\n  iconName: 'sliders-h',\n  icon: [512, 512, [], \"f1de\", \"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"]\n};\nvar faSmile = {\n  prefix: 'fas',\n  iconName: 'smile',\n  icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"]\n};\nvar faSmileBeam = {\n  prefix: 'fas',\n  iconName: 'smile-beam',\n  icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"]\n};\nvar faSmileWink = {\n  prefix: 'fas',\n  iconName: 'smile-wink',\n  icon: [496, 512, [], \"f4da\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"]\n};\nvar faSmog = {\n  prefix: 'fas',\n  iconName: 'smog',\n  icon: [640, 512, [], \"f75f\", \"M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z\"]\n};\nvar faSmoking = {\n  prefix: 'fas',\n  iconName: 'smoking',\n  icon: [640, 512, [], \"f48d\", \"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"]\n};\nvar faSmokingBan = {\n  prefix: 'fas',\n  iconName: 'smoking-ban',\n  icon: [512, 512, [], \"f54d\", \"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"]\n};\nvar faSms = {\n  prefix: 'fas',\n  iconName: 'sms',\n  icon: [512, 512, [], \"f7cd\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z\"]\n};\nvar faSnowboarding = {\n  prefix: 'fas',\n  iconName: 'snowboarding',\n  icon: [512, 512, [], \"f7ce\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z\"]\n};\nvar faSnowflake = {\n  prefix: 'fas',\n  iconName: 'snowflake',\n  icon: [448, 512, [], \"f2dc\", \"M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z\"]\n};\nvar faSnowman = {\n  prefix: 'fas',\n  iconName: 'snowman',\n  icon: [512, 512, [], \"f7d0\", \"M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faSnowplow = {\n  prefix: 'fas',\n  iconName: 'snowplow',\n  icon: [640, 512, [], \"f7d2\", \"M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faSocks = {\n  prefix: 'fas',\n  iconName: 'socks',\n  icon: [512, 512, [], \"f696\", \"M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z\"]\n};\nvar faSolarPanel = {\n  prefix: 'fas',\n  iconName: 'solar-panel',\n  icon: [640, 512, [], \"f5ba\", \"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"]\n};\nvar faSort = {\n  prefix: 'fas',\n  iconName: 'sort',\n  icon: [320, 512, [], \"f0dc\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"]\n};\nvar faSortAlphaDown = {\n  prefix: 'fas',\n  iconName: 'sort-alpha-down',\n  icon: [448, 512, [], \"f15d\", \"M400.7 427.1h-61.1c.7-1 1.5-2 2.3-3.1l67.5-95.7c1.4-2 2.2-4.4 2.2-6.9V300c0-6.6-5.4-12-12-12H274.5c-6.6 0-12 5.4-12 12v28.9c0 6.6 5.4 12 12 12H331c-.7 1-1.5 2-2.3 3.1l-67.2 95.2c-1.4 2-2.2 4.4-2.2 6.9V468c0 6.6 5.4 12 12 12h129.4c6.6 0 12-5.4 12-12v-28.9c0-6.7-5.4-12-12-12zM176 368h-48V48c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v320H16c-14.2 0-21.4 17.2-11.3 27.3l80 80c6.2 6.2 16.4 6.2 22.6 0l80-80c10-10 2.9-27.3-11.3-27.3zm248.2-159.9l-57.1-168c-1.7-4.9-6.2-8.1-11.4-8.1h-39.6c-5.1 0-9.7 3.3-11.4 8.1l-57.1 168c-2.6 7.8 3.1 15.9 11.4 15.9h35.7c5.4 0 10.1-3.5 11.5-8.7l8.1-28.2h42.9l8.3 28.3A12 12 0 0 0 377 224h35.7c8.4 0 14.2-8.1 11.5-15.9zm-95-71.5l6.8-22.9 6.6 22.9z\"]\n};\nvar faSortAlphaUp = {\n  prefix: 'fas',\n  iconName: 'sort-alpha-up',\n  icon: [448, 512, [], \"f15e\", \"M107.3 36.7c-6.2-6.2-16.4-6.2-22.6 0l-80 80c-10 10-2.9 27.3 11.3 27.3h48v320c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V144h48c14.2 0 21.4-17.2 11.3-27.3zm293.4 390.4h-61.1c.7-1 1.5-2 2.3-3.1l67.5-95.7c1.4-2 2.2-4.4 2.2-6.9V300c0-6.6-5.4-12-12-12H274.5c-6.6 0-12 5.4-12 12v28.9c0 6.6 5.4 12 12 12H331c-.7 1-1.5 2-2.3 3.1l-67.2 95.2c-1.4 2-2.2 4.4-2.2 6.9V468c0 6.6 5.4 12 12 12h129.4c6.6 0 12-5.4 12-12v-28.9c0-6.7-5.4-12-12-12zm23.5-219l-57.1-168c-1.7-4.9-6.2-8.1-11.4-8.1h-39.6c-5.1 0-9.7 3.3-11.4 8.1l-57.1 168c-2.6 7.8 3.1 15.9 11.4 15.9h35.7c5.4 0 10.1-3.5 11.5-8.7l8.1-28.2h42.9l8.3 28.3A12 12 0 0 0 377 224h35.7c8.4 0 14.2-8.1 11.5-15.9zm-95-71.5l6.8-22.9 6.6 22.9z\"]\n};\nvar faSortAmountDown = {\n  prefix: 'fas',\n  iconName: 'sort-amount-down',\n  icon: [512, 512, [], \"f160\", \"M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"]\n};\nvar faSortAmountUp = {\n  prefix: 'fas',\n  iconName: 'sort-amount-up',\n  icon: [512, 512, [], \"f161\", \"M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z\"]\n};\nvar faSortDown = {\n  prefix: 'fas',\n  iconName: 'sort-down',\n  icon: [320, 512, [], \"f0dd\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"]\n};\nvar faSortNumericDown = {\n  prefix: 'fas',\n  iconName: 'sort-numeric-down',\n  icon: [448, 512, [], \"f162\", \"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z\"]\n};\nvar faSortNumericUp = {\n  prefix: 'fas',\n  iconName: 'sort-numeric-up',\n  icon: [448, 512, [], \"f163\", \"M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z\"]\n};\nvar faSortUp = {\n  prefix: 'fas',\n  iconName: 'sort-up',\n  icon: [320, 512, [], \"f0de\", \"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"]\n};\nvar faSpa = {\n  prefix: 'fas',\n  iconName: 'spa',\n  icon: [576, 512, [], \"f5bb\", \"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"]\n};\nvar faSpaceShuttle = {\n  prefix: 'fas',\n  iconName: 'space-shuttle',\n  icon: [640, 512, [], \"f197\", \"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"]\n};\nvar faSpider = {\n  prefix: 'fas',\n  iconName: 'spider',\n  icon: [576, 512, [], \"f717\", \"M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z\"]\n};\nvar faSpinner = {\n  prefix: 'fas',\n  iconName: 'spinner',\n  icon: [512, 512, [], \"f110\", \"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"]\n};\nvar faSplotch = {\n  prefix: 'fas',\n  iconName: 'splotch',\n  icon: [512, 512, [], \"f5bc\", \"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"]\n};\nvar faSprayCan = {\n  prefix: 'fas',\n  iconName: 'spray-can',\n  icon: [512, 512, [], \"f5bd\", \"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faSquare = {\n  prefix: 'fas',\n  iconName: 'square',\n  icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faSquareFull = {\n  prefix: 'fas',\n  iconName: 'square-full',\n  icon: [512, 512, [], \"f45c\", \"M512 512H0V0h512v512z\"]\n};\nvar faSquareRootAlt = {\n  prefix: 'fas',\n  iconName: 'square-root-alt',\n  icon: [576, 512, [], \"f698\", \"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z\"]\n};\nvar faStamp = {\n  prefix: 'fas',\n  iconName: 'stamp',\n  icon: [512, 512, [], \"f5bf\", \"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"]\n};\nvar faStar = {\n  prefix: 'fas',\n  iconName: 'star',\n  icon: [576, 512, [], \"f005\", \"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"]\n};\nvar faStarAndCrescent = {\n  prefix: 'fas',\n  iconName: 'star-and-crescent',\n  icon: [512, 512, [], \"f699\", \"M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z\"]\n};\nvar faStarHalf = {\n  prefix: 'fas',\n  iconName: 'star-half',\n  icon: [576, 512, [], \"f089\", \"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"]\n};\nvar faStarHalfAlt = {\n  prefix: 'fas',\n  iconName: 'star-half-alt',\n  icon: [536, 512, [], \"f5c0\", \"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"]\n};\nvar faStarOfDavid = {\n  prefix: 'fas',\n  iconName: 'star-of-david',\n  icon: [464, 512, [], \"f69a\", \"M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z\"]\n};\nvar faStarOfLife = {\n  prefix: 'fas',\n  iconName: 'star-of-life',\n  icon: [480, 512, [], \"f621\", \"M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z\"]\n};\nvar faStepBackward = {\n  prefix: 'fas',\n  iconName: 'step-backward',\n  icon: [448, 512, [], \"f048\", \"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"]\n};\nvar faStepForward = {\n  prefix: 'fas',\n  iconName: 'step-forward',\n  icon: [448, 512, [], \"f051\", \"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"]\n};\nvar faStethoscope = {\n  prefix: 'fas',\n  iconName: 'stethoscope',\n  icon: [512, 512, [], \"f0f1\", \"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faStickyNote = {\n  prefix: 'fas',\n  iconName: 'sticky-note',\n  icon: [448, 512, [], \"f249\", \"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"]\n};\nvar faStop = {\n  prefix: 'fas',\n  iconName: 'stop',\n  icon: [448, 512, [], \"f04d\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faStopCircle = {\n  prefix: 'fas',\n  iconName: 'stop-circle',\n  icon: [512, 512, [], \"f28d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faStopwatch = {\n  prefix: 'fas',\n  iconName: 'stopwatch',\n  icon: [448, 512, [], \"f2f2\", \"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faStore = {\n  prefix: 'fas',\n  iconName: 'store',\n  icon: [616, 512, [], \"f54e\", \"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"]\n};\nvar faStoreAlt = {\n  prefix: 'fas',\n  iconName: 'store-alt',\n  icon: [640, 512, [], \"f54f\", \"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"]\n};\nvar faStream = {\n  prefix: 'fas',\n  iconName: 'stream',\n  icon: [512, 512, [], \"f550\", \"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"]\n};\nvar faStreetView = {\n  prefix: 'fas',\n  iconName: 'street-view',\n  icon: [512, 512, [], \"f21d\", \"M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z\"]\n};\nvar faStrikethrough = {\n  prefix: 'fas',\n  iconName: 'strikethrough',\n  icon: [512, 512, [], \"f0cc\", \"M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z\"]\n};\nvar faStroopwafel = {\n  prefix: 'fas',\n  iconName: 'stroopwafel',\n  icon: [512, 512, [], \"f551\", \"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"]\n};\nvar faSubscript = {\n  prefix: 'fas',\n  iconName: 'subscript',\n  icon: [512, 512, [], \"f12c\", \"M272 32h-67.8c-5.5 0-10.7 2.9-13.6 7.6l-40.3 65c-2.3 3.6-4.5 7.3-6.2 10.5-1.7-3.2-3.7-6.8-5.7-10.4L98.5 39.6c-2.9-4.7-8.1-7.6-13.6-7.6H16C7.2 32 0 39.2 0 48v32c0 8.8 7.2 16 16 16h30.1l52.8 77.3L42.3 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64c5.5 0 10.7-2.9 13.6-7.6l44.7-72.1c2.2-3.6 4.2-7.3 5.9-10.6 1.8 3.2 3.9 6.9 6.2 10.2l45.7 72.6c2.9 4.7 8 7.5 13.5 7.5H272c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-22l-58.6-84.3L244 96h28c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16zm224 384H395.2c3.5-10.5 18.8-21.3 36.3-32.4 16.6-10.6 35.5-22.6 50.3-38.9 17.5-19.1 25.9-40.2 25.9-64.6 0-60.6-50.7-88.1-97.8-88.1-42.5 0-76.4 22-94.4 50.4-4.7 7.3-2.6 17 4.6 21.9l30.3 20.3c7 4.7 16.5 3.1 21.6-3.6 8-10.4 18.8-18.2 31.7-18.2 19.4 0 26.3 12.9 26.3 23.9 0 36.2-119.4 57-119.4 160 0 6.7.6 13 1.4 19.3 1.1 8 7.8 13.9 15.9 13.9H496c8.8 0 16-7.2 16-16v-32c0-8.7-7.2-15.9-16-15.9z\"]\n};\nvar faSubway = {\n  prefix: 'fas',\n  iconName: 'subway',\n  icon: [448, 512, [], \"f239\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faSuitcase = {\n  prefix: 'fas',\n  iconName: 'suitcase',\n  icon: [512, 512, [], \"f0f2\", \"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"]\n};\nvar faSuitcaseRolling = {\n  prefix: 'fas',\n  iconName: 'suitcase-rolling',\n  icon: [384, 512, [], \"f5c1\", \"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"]\n};\nvar faSun = {\n  prefix: 'fas',\n  iconName: 'sun',\n  icon: [512, 512, [], \"f185\", \"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z\"]\n};\nvar faSuperscript = {\n  prefix: 'fas',\n  iconName: 'superscript',\n  icon: [512, 512, [], \"f12b\", \"M272 192h-67.8c-5.5 0-10.7 2.9-13.6 7.6l-40.3 65c-2.3 3.6-4.5 7.3-6.2 10.5-1.7-3.2-3.7-6.8-5.7-10.4l-39.9-65.1c-2.9-4.7-8.1-7.6-13.6-7.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h30.1l52.8 77.3L42.3 416H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64c5.5 0 10.7-2.9 13.6-7.6l44.7-72.1c2.2-3.6 4.2-7.3 5.9-10.6 1.8 3.2 3.9 6.9 6.2 10.2l45.7 72.6c2.9 4.7 8 7.5 13.5 7.5H272c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-22l-58.6-84.3L244 256h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm224 64H395.2c3.5-10.5 18.8-21.3 36.3-32.4 16.6-10.6 35.5-22.6 50.3-38.9 17.5-19.1 25.9-40.2 25.9-64.6 0-60.6-50.7-88.1-97.8-88.1-42.5 0-76.4 22-94.4 50.4-4.7 7.3-2.6 17 4.6 21.9l30.3 20.3c7 4.7 16.5 3.1 21.6-3.6 8-10.4 18.8-18.2 31.7-18.2 19.4 0 26.3 12.9 26.3 23.9 0 36.2-119.4 57-119.4 160 0 6.7.6 13 1.4 19.3 1.1 8 7.8 13.9 15.9 13.9H496c8.8 0 16-7.2 16-16v-32c0-8.7-7.2-15.9-16-15.9z\"]\n};\nvar faSurprise = {\n  prefix: 'fas',\n  iconName: 'surprise',\n  icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faSwatchbook = {\n  prefix: 'fas',\n  iconName: 'swatchbook',\n  icon: [511, 512, [], \"f5c3\", \"M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z\"]\n};\nvar faSwimmer = {\n  prefix: 'fas',\n  iconName: 'swimmer',\n  icon: [640, 512, [], \"f5c4\", \"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"]\n};\nvar faSwimmingPool = {\n  prefix: 'fas',\n  iconName: 'swimming-pool',\n  icon: [640, 512, [], \"f5c5\", \"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"]\n};\nvar faSynagogue = {\n  prefix: 'fas',\n  iconName: 'synagogue',\n  icon: [640, 512, [], \"f69b\", \"M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z\"]\n};\nvar faSync = {\n  prefix: 'fas',\n  iconName: 'sync',\n  icon: [512, 512, [], \"f021\", \"M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z\"]\n};\nvar faSyncAlt = {\n  prefix: 'fas',\n  iconName: 'sync-alt',\n  icon: [512, 512, [], \"f2f1\", \"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"]\n};\nvar faSyringe = {\n  prefix: 'fas',\n  iconName: 'syringe',\n  icon: [512, 512, [], \"f48e\", \"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"]\n};\nvar faTable = {\n  prefix: 'fas',\n  iconName: 'table',\n  icon: [512, 512, [], \"f0ce\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"]\n};\nvar faTableTennis = {\n  prefix: 'fas',\n  iconName: 'table-tennis',\n  icon: [512, 512, [], \"f45d\", \"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"]\n};\nvar faTablet = {\n  prefix: 'fas',\n  iconName: 'tablet',\n  icon: [448, 512, [], \"f10a\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faTabletAlt = {\n  prefix: 'fas',\n  iconName: 'tablet-alt',\n  icon: [448, 512, [], \"f3fa\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faTablets = {\n  prefix: 'fas',\n  iconName: 'tablets',\n  icon: [640, 512, [], \"f490\", \"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"]\n};\nvar faTachometerAlt = {\n  prefix: 'fas',\n  iconName: 'tachometer-alt',\n  icon: [576, 512, [], \"f3fd\", \"M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTag = {\n  prefix: 'fas',\n  iconName: 'tag',\n  icon: [512, 512, [], \"f02b\", \"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faTags = {\n  prefix: 'fas',\n  iconName: 'tags',\n  icon: [640, 512, [], \"f02c\", \"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"]\n};\nvar faTape = {\n  prefix: 'fas',\n  iconName: 'tape',\n  icon: [640, 512, [], \"f4db\", \"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"]\n};\nvar faTasks = {\n  prefix: 'fas',\n  iconName: 'tasks',\n  icon: [512, 512, [], \"f0ae\", \"M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z\"]\n};\nvar faTaxi = {\n  prefix: 'fas',\n  iconName: 'taxi',\n  icon: [512, 512, [], \"f1ba\", \"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTeeth = {\n  prefix: 'fas',\n  iconName: 'teeth',\n  icon: [640, 512, [], \"f62e\", \"M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z\"]\n};\nvar faTeethOpen = {\n  prefix: 'fas',\n  iconName: 'teeth-open',\n  icon: [640, 512, [], \"f62f\", \"M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z\"]\n};\nvar faTemperatureHigh = {\n  prefix: 'fas',\n  iconName: 'temperature-high',\n  icon: [512, 512, [], \"f769\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTemperatureLow = {\n  prefix: 'fas',\n  iconName: 'temperature-low',\n  icon: [512, 512, [], \"f76b\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTenge = {\n  prefix: 'fas',\n  iconName: 'tenge',\n  icon: [384, 512, [], \"f7d7\", \"M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z\"]\n};\nvar faTerminal = {\n  prefix: 'fas',\n  iconName: 'terminal',\n  icon: [640, 512, [], \"f120\", \"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"]\n};\nvar faTextHeight = {\n  prefix: 'fas',\n  iconName: 'text-height',\n  icon: [576, 512, [], \"f034\", \"M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z\"]\n};\nvar faTextWidth = {\n  prefix: 'fas',\n  iconName: 'text-width',\n  icon: [448, 512, [], \"f035\", \"M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z\"]\n};\nvar faTh = {\n  prefix: 'fas',\n  iconName: 'th',\n  icon: [512, 512, [], \"f00a\", \"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"]\n};\nvar faThLarge = {\n  prefix: 'fas',\n  iconName: 'th-large',\n  icon: [512, 512, [], \"f009\", \"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"]\n};\nvar faThList = {\n  prefix: 'fas',\n  iconName: 'th-list',\n  icon: [512, 512, [], \"f00b\", \"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"]\n};\nvar faTheaterMasks = {\n  prefix: 'fas',\n  iconName: 'theater-masks',\n  icon: [640, 512, [], \"f630\", \"M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z\"]\n};\nvar faThermometer = {\n  prefix: 'fas',\n  iconName: 'thermometer',\n  icon: [512, 512, [], \"f491\", \"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"]\n};\nvar faThermometerEmpty = {\n  prefix: 'fas',\n  iconName: 'thermometer-empty',\n  icon: [256, 512, [], \"f2cb\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerFull = {\n  prefix: 'fas',\n  iconName: 'thermometer-full',\n  icon: [256, 512, [], \"f2c7\", \"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"]\n};\nvar faThermometerHalf = {\n  prefix: 'fas',\n  iconName: 'thermometer-half',\n  icon: [256, 512, [], \"f2c9\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerQuarter = {\n  prefix: 'fas',\n  iconName: 'thermometer-quarter',\n  icon: [256, 512, [], \"f2ca\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerThreeQuarters = {\n  prefix: 'fas',\n  iconName: 'thermometer-three-quarters',\n  icon: [256, 512, [], \"f2c8\", \"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThumbsDown = {\n  prefix: 'fas',\n  iconName: 'thumbs-down',\n  icon: [512, 512, [], \"f165\", \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"]\n};\nvar faThumbsUp = {\n  prefix: 'fas',\n  iconName: 'thumbs-up',\n  icon: [512, 512, [], \"f164\", \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"]\n};\nvar faThumbtack = {\n  prefix: 'fas',\n  iconName: 'thumbtack',\n  icon: [384, 512, [], \"f08d\", \"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"]\n};\nvar faTicketAlt = {\n  prefix: 'fas',\n  iconName: 'ticket-alt',\n  icon: [576, 512, [], \"f3ff\", \"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"]\n};\nvar faTimes = {\n  prefix: 'fas',\n  iconName: 'times',\n  icon: [352, 512, [], \"f00d\", \"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"]\n};\nvar faTimesCircle = {\n  prefix: 'fas',\n  iconName: 'times-circle',\n  icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"]\n};\nvar faTint = {\n  prefix: 'fas',\n  iconName: 'tint',\n  icon: [352, 512, [], \"f043\", \"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faTintSlash = {\n  prefix: 'fas',\n  iconName: 'tint-slash',\n  icon: [640, 512, [], \"f5c7\", \"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"]\n};\nvar faTired = {\n  prefix: 'fas',\n  iconName: 'tired',\n  icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"]\n};\nvar faToggleOff = {\n  prefix: 'fas',\n  iconName: 'toggle-off',\n  icon: [576, 512, [], \"f204\", \"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"]\n};\nvar faToggleOn = {\n  prefix: 'fas',\n  iconName: 'toggle-on',\n  icon: [576, 512, [], \"f205\", \"M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z\"]\n};\nvar faToilet = {\n  prefix: 'fas',\n  iconName: 'toilet',\n  icon: [384, 512, [], \"f7d8\", \"M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z\"]\n};\nvar faToiletPaper = {\n  prefix: 'fas',\n  iconName: 'toilet-paper',\n  icon: [576, 512, [], \"f71e\", \"M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z\"]\n};\nvar faToolbox = {\n  prefix: 'fas',\n  iconName: 'toolbox',\n  icon: [512, 512, [], \"f552\", \"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"]\n};\nvar faTools = {\n  prefix: 'fas',\n  iconName: 'tools',\n  icon: [512, 512, [], \"f7d9\", \"M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z\"]\n};\nvar faTooth = {\n  prefix: 'fas',\n  iconName: 'tooth',\n  icon: [448, 512, [], \"f5c9\", \"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"]\n};\nvar faTorah = {\n  prefix: 'fas',\n  iconName: 'torah',\n  icon: [640, 512, [], \"f6a0\", \"M48 0A48.05 48.05 0 0 0 0 48v64a16 16 0 0 0 16 16h80V48A48.05 48.05 0 0 0 48 0zm347.14 228.56h34.91l-17.47-29.17zm-59.09 52.07l16.78-28.07h-33.58zM242 228.56h34.9l-17.48-29.19zm188-105.12h-34.9l17.48 29.19zM256 412.57V352h288V96a96.1 96.1 0 0 0-96-96H111.59A79.24 79.24 0 0 1 128 48v368a64 64 0 0 0 74.75 63.12C234.22 474 256 444.46 256 412.57zm-38.59-303a20.11 20.11 0 0 1 17.5-10.15h56.3L318.8 53.3a20 20 0 0 1 17.25-9.82 19.66 19.66 0 0 1 17 9.68l27.7 46.28h56.36a20 20 0 0 1 17.14 30.29L426.57 176l27.79 46.43a19.6 19.6 0 0 1 .23 20 20.11 20.11 0 0 1-17.5 10.15h-56.3L353.2 298.7a20 20 0 0 1-17.2 9.82 19.66 19.66 0 0 1-17-9.68l-27.7-46.28h-56.39a20 20 0 0 1-17.14-30.29L245.43 176l-27.79-46.43a19.6 19.6 0 0 1-.23-19.98zM624 384H288v32a96.11 96.11 0 0 1-96 96h336a112 112 0 0 0 112-112 16 16 0 0 0-16-16zM276.86 123.44H242l17.47 29.17zM336 71.38l-16.83 28.06h33.58zm-31.12 157.18h62.3L398.59 176l-31.47-52.58h-62.3L273.41 176z\"]\n};\nvar faToriiGate = {\n  prefix: 'fas',\n  iconName: 'torii-gate',\n  icon: [512, 512, [], \"f6a1\", \"M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z\"]\n};\nvar faTractor = {\n  prefix: 'fas',\n  iconName: 'tractor',\n  icon: [640, 512, [], \"f722\", \"M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z\"]\n};\nvar faTrademark = {\n  prefix: 'fas',\n  iconName: 'trademark',\n  icon: [640, 512, [], \"f25c\", \"M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z\"]\n};\nvar faTrafficLight = {\n  prefix: 'fas',\n  iconName: 'traffic-light',\n  icon: [384, 512, [], \"f637\", \"M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTrain = {\n  prefix: 'fas',\n  iconName: 'train',\n  icon: [448, 512, [], \"f238\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"]\n};\nvar faTram = {\n  prefix: 'fas',\n  iconName: 'tram',\n  icon: [512, 512, [], \"f7da\", \"M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faTransgender = {\n  prefix: 'fas',\n  iconName: 'transgender',\n  icon: [384, 512, [], \"f224\", \"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTransgenderAlt = {\n  prefix: 'fas',\n  iconName: 'transgender-alt',\n  icon: [480, 512, [], \"f225\", \"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTrash = {\n  prefix: 'fas',\n  iconName: 'trash',\n  icon: [448, 512, [], \"f1f8\", \"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z\"]\n};\nvar faTrashAlt = {\n  prefix: 'fas',\n  iconName: 'trash-alt',\n  icon: [448, 512, [], \"f2ed\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestore = {\n  prefix: 'fas',\n  iconName: 'trash-restore',\n  icon: [448, 512, [], \"f829\", \"M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestoreAlt = {\n  prefix: 'fas',\n  iconName: 'trash-restore-alt',\n  icon: [448, 512, [], \"f82a\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTree = {\n  prefix: 'fas',\n  iconName: 'tree',\n  icon: [384, 512, [], \"f1bb\", \"M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z\"]\n};\nvar faTrophy = {\n  prefix: 'fas',\n  iconName: 'trophy',\n  icon: [576, 512, [], \"f091\", \"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"]\n};\nvar faTruck = {\n  prefix: 'fas',\n  iconName: 'truck',\n  icon: [640, 512, [], \"f0d1\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faTruckLoading = {\n  prefix: 'fas',\n  iconName: 'truck-loading',\n  icon: [640, 512, [], \"f4de\", \"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faTruckMonster = {\n  prefix: 'fas',\n  iconName: 'truck-monster',\n  icon: [640, 512, [], \"f63b\", \"M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTruckMoving = {\n  prefix: 'fas',\n  iconName: 'truck-moving',\n  icon: [640, 512, [], \"f4df\", \"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"]\n};\nvar faTruckPickup = {\n  prefix: 'fas',\n  iconName: 'truck-pickup',\n  icon: [640, 512, [], \"f63c\", \"M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faTshirt = {\n  prefix: 'fas',\n  iconName: 'tshirt',\n  icon: [640, 512, [], \"f553\", \"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"]\n};\nvar faTty = {\n  prefix: 'fas',\n  iconName: 'tty',\n  icon: [512, 512, [], \"f1e4\", \"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faTv = {\n  prefix: 'fas',\n  iconName: 'tv',\n  icon: [640, 512, [], \"f26c\", \"M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z\"]\n};\nvar faUmbrella = {\n  prefix: 'fas',\n  iconName: 'umbrella',\n  icon: [576, 512, [], \"f0e9\", \"M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z\"]\n};\nvar faUmbrellaBeach = {\n  prefix: 'fas',\n  iconName: 'umbrella-beach',\n  icon: [640, 512, [], \"f5ca\", \"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"]\n};\nvar faUnderline = {\n  prefix: 'fas',\n  iconName: 'underline',\n  icon: [448, 512, [], \"f0cd\", \"M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z\"]\n};\nvar faUndo = {\n  prefix: 'fas',\n  iconName: 'undo',\n  icon: [512, 512, [], \"f0e2\", \"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"]\n};\nvar faUndoAlt = {\n  prefix: 'fas',\n  iconName: 'undo-alt',\n  icon: [512, 512, [], \"f2ea\", \"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"]\n};\nvar faUniversalAccess = {\n  prefix: 'fas',\n  iconName: 'universal-access',\n  icon: [512, 512, [], \"f29a\", \"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"]\n};\nvar faUniversity = {\n  prefix: 'fas',\n  iconName: 'university',\n  icon: [512, 512, [], \"f19c\", \"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"]\n};\nvar faUnlink = {\n  prefix: 'fas',\n  iconName: 'unlink',\n  icon: [512, 512, [], \"f127\", \"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"]\n};\nvar faUnlock = {\n  prefix: 'fas',\n  iconName: 'unlock',\n  icon: [448, 512, [], \"f09c\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faUnlockAlt = {\n  prefix: 'fas',\n  iconName: 'unlock-alt',\n  icon: [448, 512, [], \"f13e\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"]\n};\nvar faUpload = {\n  prefix: 'fas',\n  iconName: 'upload',\n  icon: [512, 512, [], \"f093\", \"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faUser = {\n  prefix: 'fas',\n  iconName: 'user',\n  icon: [448, 512, [], \"f007\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserAlt = {\n  prefix: 'fas',\n  iconName: 'user-alt',\n  icon: [512, 512, [], \"f406\", \"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"]\n};\nvar faUserAltSlash = {\n  prefix: 'fas',\n  iconName: 'user-alt-slash',\n  icon: [640, 512, [], \"f4fa\", \"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"]\n};\nvar faUserAstronaut = {\n  prefix: 'fas',\n  iconName: 'user-astronaut',\n  icon: [448, 512, [], \"f4fb\", \"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faUserCheck = {\n  prefix: 'fas',\n  iconName: 'user-check',\n  icon: [640, 512, [], \"f4fc\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"]\n};\nvar faUserCircle = {\n  prefix: 'fas',\n  iconName: 'user-circle',\n  icon: [496, 512, [], \"f2bd\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"]\n};\nvar faUserClock = {\n  prefix: 'fas',\n  iconName: 'user-clock',\n  icon: [640, 512, [], \"f4fd\", \"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"]\n};\nvar faUserCog = {\n  prefix: 'fas',\n  iconName: 'user-cog',\n  icon: [640, 512, [], \"f4fe\", \"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"]\n};\nvar faUserEdit = {\n  prefix: 'fas',\n  iconName: 'user-edit',\n  icon: [640, 512, [], \"f4ff\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"]\n};\nvar faUserFriends = {\n  prefix: 'fas',\n  iconName: 'user-friends',\n  icon: [640, 512, [], \"f500\", \"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"]\n};\nvar faUserGraduate = {\n  prefix: 'fas',\n  iconName: 'user-graduate',\n  icon: [448, 512, [], \"f501\", \"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"]\n};\nvar faUserInjured = {\n  prefix: 'fas',\n  iconName: 'user-injured',\n  icon: [448, 512, [], \"f728\", \"M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z\"]\n};\nvar faUserLock = {\n  prefix: 'fas',\n  iconName: 'user-lock',\n  icon: [640, 512, [], \"f502\", \"M320 320c0-11.1 3.1-21.4 8.1-30.5-4.8-.5-9.5-1.5-14.5-1.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h280.9c-5.5-9.5-8.9-20.3-8.9-32V320zm-96-64c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm384 32h-32v-48c0-44.2-35.8-80-80-80s-80 35.8-80 80v48h-32c-17.7 0-32 14.3-32 32v160c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32zm-80 0h-64v-48c0-17.6 14.4-32 32-32s32 14.4 32 32v48z\"]\n};\nvar faUserMd = {\n  prefix: 'fas',\n  iconName: 'user-md',\n  icon: [448, 512, [], \"f0f0\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"]\n};\nvar faUserMinus = {\n  prefix: 'fas',\n  iconName: 'user-minus',\n  icon: [640, 512, [], \"f503\", \"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserNinja = {\n  prefix: 'fas',\n  iconName: 'user-ninja',\n  icon: [448, 512, [], \"f504\", \"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"]\n};\nvar faUserNurse = {\n  prefix: 'fas',\n  iconName: 'user-nurse',\n  icon: [448, 512, [], \"f82f\", \"M57.78 288h82.36c22.51 19.68 51.62 32 83.86 32s61.35-12.32 83.86-32h82.36a16 16 0 0 0 14.28-23.18c-15.23-29.85-31.28-62.23-42.15-95.54C354.78 146.09 352 121.59 352 97.2V48L224 0 96 48v49.2c0 24.39-2.75 48.89-10.33 72.08C74.78 202.59 58.73 235 43.5 264.82A16 16 0 0 0 57.78 288zM184 71.67a5 5 0 0 1 5-5h21.67V45a5 5 0 0 1 5-5h16.66a5 5 0 0 1 5 5v21.67H259a5 5 0 0 1 5 5v16.66a5 5 0 0 1-5 5h-21.67V115a5 5 0 0 1-5 5h-16.66a5 5 0 0 1-5-5V93.33H189a5 5 0 0 1-5-5zM144 160h160v32a80 80 0 0 1-160 0zm175.41 160L224 415.39 128.59 320C57.1 323.1 0 381.6 0 453.79A58.21 58.21 0 0 0 58.21 512h331.58A58.21 58.21 0 0 0 448 453.79C448 381.6 390.9 323.1 319.41 320z\"]\n};\nvar faUserPlus = {\n  prefix: 'fas',\n  iconName: 'user-plus',\n  icon: [640, 512, [], \"f234\", \"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserSecret = {\n  prefix: 'fas',\n  iconName: 'user-secret',\n  icon: [448, 512, [], \"f21b\", \"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"]\n};\nvar faUserShield = {\n  prefix: 'fas',\n  iconName: 'user-shield',\n  icon: [640, 512, [], \"f505\", \"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"]\n};\nvar faUserSlash = {\n  prefix: 'fas',\n  iconName: 'user-slash',\n  icon: [640, 512, [], \"f506\", \"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"]\n};\nvar faUserTag = {\n  prefix: 'fas',\n  iconName: 'user-tag',\n  icon: [640, 512, [], \"f507\", \"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"]\n};\nvar faUserTie = {\n  prefix: 'fas',\n  iconName: 'user-tie',\n  icon: [448, 512, [], \"f508\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"]\n};\nvar faUserTimes = {\n  prefix: 'fas',\n  iconName: 'user-times',\n  icon: [640, 512, [], \"f235\", \"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUsers = {\n  prefix: 'fas',\n  iconName: 'users',\n  icon: [640, 512, [], \"f0c0\", \"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersCog = {\n  prefix: 'fas',\n  iconName: 'users-cog',\n  icon: [640, 512, [], \"f509\", \"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUtensilSpoon = {\n  prefix: 'fas',\n  iconName: 'utensil-spoon',\n  icon: [512, 512, [], \"f2e5\", \"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"]\n};\nvar faUtensils = {\n  prefix: 'fas',\n  iconName: 'utensils',\n  icon: [416, 512, [], \"f2e7\", \"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"]\n};\nvar faVectorSquare = {\n  prefix: 'fas',\n  iconName: 'vector-square',\n  icon: [512, 512, [], \"f5cb\", \"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"]\n};\nvar faVenus = {\n  prefix: 'fas',\n  iconName: 'venus',\n  icon: [288, 512, [], \"f221\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faVenusDouble = {\n  prefix: 'fas',\n  iconName: 'venus-double',\n  icon: [512, 512, [], \"f226\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"]\n};\nvar faVenusMars = {\n  prefix: 'fas',\n  iconName: 'venus-mars',\n  icon: [576, 512, [], \"f228\", \"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faVial = {\n  prefix: 'fas',\n  iconName: 'vial',\n  icon: [480, 512, [], \"f492\", \"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"]\n};\nvar faVials = {\n  prefix: 'fas',\n  iconName: 'vials',\n  icon: [640, 512, [], \"f493\", \"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"]\n};\nvar faVideo = {\n  prefix: 'fas',\n  iconName: 'video',\n  icon: [576, 512, [], \"f03d\", \"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"]\n};\nvar faVideoSlash = {\n  prefix: 'fas',\n  iconName: 'video-slash',\n  icon: [640, 512, [], \"f4e2\", \"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"]\n};\nvar faVihara = {\n  prefix: 'fas',\n  iconName: 'vihara',\n  icon: [640, 512, [], \"f6a7\", \"M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z\"]\n};\nvar faVolleyballBall = {\n  prefix: 'fas',\n  iconName: 'volleyball-ball',\n  icon: [512, 512, [], \"f45f\", \"M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"]\n};\nvar faVolumeDown = {\n  prefix: 'fas',\n  iconName: 'volume-down',\n  icon: [384, 512, [], \"f027\", \"M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z\"]\n};\nvar faVolumeMute = {\n  prefix: 'fas',\n  iconName: 'volume-mute',\n  icon: [512, 512, [], \"f6a9\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z\"]\n};\nvar faVolumeOff = {\n  prefix: 'fas',\n  iconName: 'volume-off',\n  icon: [256, 512, [], \"f026\", \"M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z\"]\n};\nvar faVolumeUp = {\n  prefix: 'fas',\n  iconName: 'volume-up',\n  icon: [576, 512, [], \"f028\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z\"]\n};\nvar faVoteYea = {\n  prefix: 'fas',\n  iconName: 'vote-yea',\n  icon: [640, 512, [], \"f772\", \"M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z\"]\n};\nvar faVrCardboard = {\n  prefix: 'fas',\n  iconName: 'vr-cardboard',\n  icon: [640, 512, [], \"f729\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"]\n};\nvar faWalking = {\n  prefix: 'fas',\n  iconName: 'walking',\n  icon: [320, 512, [], \"f554\", \"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"]\n};\nvar faWallet = {\n  prefix: 'fas',\n  iconName: 'wallet',\n  icon: [512, 512, [], \"f555\", \"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faWarehouse = {\n  prefix: 'fas',\n  iconName: 'warehouse',\n  icon: [640, 512, [], \"f494\", \"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"]\n};\nvar faWater = {\n  prefix: 'fas',\n  iconName: 'water',\n  icon: [576, 512, [], \"f773\", \"M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z\"]\n};\nvar faWaveSquare = {\n  prefix: 'fas',\n  iconName: 'wave-square',\n  icon: [640, 512, [], \"f83e\", \"M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z\"]\n};\nvar faWeight = {\n  prefix: 'fas',\n  iconName: 'weight',\n  icon: [512, 512, [], \"f496\", \"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"]\n};\nvar faWeightHanging = {\n  prefix: 'fas',\n  iconName: 'weight-hanging',\n  icon: [512, 512, [], \"f5cd\", \"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faWheelchair = {\n  prefix: 'fas',\n  iconName: 'wheelchair',\n  icon: [512, 512, [], \"f193\", \"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"]\n};\nvar faWifi = {\n  prefix: 'fas',\n  iconName: 'wifi',\n  icon: [640, 512, [], \"f1eb\", \"M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z\"]\n};\nvar faWind = {\n  prefix: 'fas',\n  iconName: 'wind',\n  icon: [512, 512, [], \"f72e\", \"M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z\"]\n};\nvar faWindowClose = {\n  prefix: 'fas',\n  iconName: 'window-close',\n  icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"]\n};\nvar faWindowMaximize = {\n  prefix: 'fas',\n  iconName: 'window-maximize',\n  icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"]\n};\nvar faWindowMinimize = {\n  prefix: 'fas',\n  iconName: 'window-minimize',\n  icon: [512, 512, [], \"f2d1\", \"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"]\n};\nvar faWindowRestore = {\n  prefix: 'fas',\n  iconName: 'window-restore',\n  icon: [512, 512, [], \"f2d2\", \"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"]\n};\nvar faWineBottle = {\n  prefix: 'fas',\n  iconName: 'wine-bottle',\n  icon: [512, 512, [], \"f72f\", \"M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z\"]\n};\nvar faWineGlass = {\n  prefix: 'fas',\n  iconName: 'wine-glass',\n  icon: [288, 512, [], \"f4e3\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"]\n};\nvar faWineGlassAlt = {\n  prefix: 'fas',\n  iconName: 'wine-glass-alt',\n  icon: [288, 512, [], \"f5ce\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"]\n};\nvar faWonSign = {\n  prefix: 'fas',\n  iconName: 'won-sign',\n  icon: [576, 512, [], \"f159\", \"M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z\"]\n};\nvar faWrench = {\n  prefix: 'fas',\n  iconName: 'wrench',\n  icon: [512, 512, [], \"f0ad\", \"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faXRay = {\n  prefix: 'fas',\n  iconName: 'x-ray',\n  icon: [640, 512, [], \"f497\", \"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faYenSign = {\n  prefix: 'fas',\n  iconName: 'yen-sign',\n  icon: [384, 512, [], \"f157\", \"M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z\"]\n};\nvar faYinYang = {\n  prefix: 'fas',\n  iconName: 'yin-yang',\n  icon: [496, 512, [], \"f6ad\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar _iconsCache = {\n  faAd: faAd,\n  faAddressBook: faAddressBook,\n  faAddressCard: faAddressCard,\n  faAdjust: faAdjust,\n  faAirFreshener: faAirFreshener,\n  faAlignCenter: faAlignCenter,\n  faAlignJustify: faAlignJustify,\n  faAlignLeft: faAlignLeft,\n  faAlignRight: faAlignRight,\n  faAllergies: faAllergies,\n  faAmbulance: faAmbulance,\n  faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n  faAnchor: faAnchor,\n  faAngleDoubleDown: faAngleDoubleDown,\n  faAngleDoubleLeft: faAngleDoubleLeft,\n  faAngleDoubleRight: faAngleDoubleRight,\n  faAngleDoubleUp: faAngleDoubleUp,\n  faAngleDown: faAngleDown,\n  faAngleLeft: faAngleLeft,\n  faAngleRight: faAngleRight,\n  faAngleUp: faAngleUp,\n  faAngry: faAngry,\n  faAnkh: faAnkh,\n  faAppleAlt: faAppleAlt,\n  faArchive: faArchive,\n  faArchway: faArchway,\n  faArrowAltCircleDown: faArrowAltCircleDown,\n  faArrowAltCircleLeft: faArrowAltCircleLeft,\n  faArrowAltCircleRight: faArrowAltCircleRight,\n  faArrowAltCircleUp: faArrowAltCircleUp,\n  faArrowCircleDown: faArrowCircleDown,\n  faArrowCircleLeft: faArrowCircleLeft,\n  faArrowCircleRight: faArrowCircleRight,\n  faArrowCircleUp: faArrowCircleUp,\n  faArrowDown: faArrowDown,\n  faArrowLeft: faArrowLeft,\n  faArrowRight: faArrowRight,\n  faArrowUp: faArrowUp,\n  faArrowsAlt: faArrowsAlt,\n  faArrowsAltH: faArrowsAltH,\n  faArrowsAltV: faArrowsAltV,\n  faAssistiveListeningSystems: faAssistiveListeningSystems,\n  faAsterisk: faAsterisk,\n  faAt: faAt,\n  faAtlas: faAtlas,\n  faAtom: faAtom,\n  faAudioDescription: faAudioDescription,\n  faAward: faAward,\n  faBaby: faBaby,\n  faBabyCarriage: faBabyCarriage,\n  faBackspace: faBackspace,\n  faBackward: faBackward,\n  faBacon: faBacon,\n  faBalanceScale: faBalanceScale,\n  faBan: faBan,\n  faBandAid: faBandAid,\n  faBarcode: faBarcode,\n  faBars: faBars,\n  faBaseballBall: faBaseballBall,\n  faBasketballBall: faBasketballBall,\n  faBath: faBath,\n  faBatteryEmpty: faBatteryEmpty,\n  faBatteryFull: faBatteryFull,\n  faBatteryHalf: faBatteryHalf,\n  faBatteryQuarter: faBatteryQuarter,\n  faBatteryThreeQuarters: faBatteryThreeQuarters,\n  faBed: faBed,\n  faBeer: faBeer,\n  faBell: faBell,\n  faBellSlash: faBellSlash,\n  faBezierCurve: faBezierCurve,\n  faBible: faBible,\n  faBicycle: faBicycle,\n  faBinoculars: faBinoculars,\n  faBiohazard: faBiohazard,\n  faBirthdayCake: faBirthdayCake,\n  faBlender: faBlender,\n  faBlenderPhone: faBlenderPhone,\n  faBlind: faBlind,\n  faBlog: faBlog,\n  faBold: faBold,\n  faBolt: faBolt,\n  faBomb: faBomb,\n  faBone: faBone,\n  faBong: faBong,\n  faBook: faBook,\n  faBookDead: faBookDead,\n  faBookMedical: faBookMedical,\n  faBookOpen: faBookOpen,\n  faBookReader: faBookReader,\n  faBookmark: faBookmark,\n  faBowlingBall: faBowlingBall,\n  faBox: faBox,\n  faBoxOpen: faBoxOpen,\n  faBoxes: faBoxes,\n  faBraille: faBraille,\n  faBrain: faBrain,\n  faBreadSlice: faBreadSlice,\n  faBriefcase: faBriefcase,\n  faBriefcaseMedical: faBriefcaseMedical,\n  faBroadcastTower: faBroadcastTower,\n  faBroom: faBroom,\n  faBrush: faBrush,\n  faBug: faBug,\n  faBuilding: faBuilding,\n  faBullhorn: faBullhorn,\n  faBullseye: faBullseye,\n  faBurn: faBurn,\n  faBus: faBus,\n  faBusAlt: faBusAlt,\n  faBusinessTime: faBusinessTime,\n  faCalculator: faCalculator,\n  faCalendar: faCalendar,\n  faCalendarAlt: faCalendarAlt,\n  faCalendarCheck: faCalendarCheck,\n  faCalendarDay: faCalendarDay,\n  faCalendarMinus: faCalendarMinus,\n  faCalendarPlus: faCalendarPlus,\n  faCalendarTimes: faCalendarTimes,\n  faCalendarWeek: faCalendarWeek,\n  faCamera: faCamera,\n  faCameraRetro: faCameraRetro,\n  faCampground: faCampground,\n  faCandyCane: faCandyCane,\n  faCannabis: faCannabis,\n  faCapsules: faCapsules,\n  faCar: faCar,\n  faCarAlt: faCarAlt,\n  faCarBattery: faCarBattery,\n  faCarCrash: faCarCrash,\n  faCarSide: faCarSide,\n  faCaretDown: faCaretDown,\n  faCaretLeft: faCaretLeft,\n  faCaretRight: faCaretRight,\n  faCaretSquareDown: faCaretSquareDown,\n  faCaretSquareLeft: faCaretSquareLeft,\n  faCaretSquareRight: faCaretSquareRight,\n  faCaretSquareUp: faCaretSquareUp,\n  faCaretUp: faCaretUp,\n  faCarrot: faCarrot,\n  faCartArrowDown: faCartArrowDown,\n  faCartPlus: faCartPlus,\n  faCashRegister: faCashRegister,\n  faCat: faCat,\n  faCertificate: faCertificate,\n  faChair: faChair,\n  faChalkboard: faChalkboard,\n  faChalkboardTeacher: faChalkboardTeacher,\n  faChargingStation: faChargingStation,\n  faChartArea: faChartArea,\n  faChartBar: faChartBar,\n  faChartLine: faChartLine,\n  faChartPie: faChartPie,\n  faCheck: faCheck,\n  faCheckCircle: faCheckCircle,\n  faCheckDouble: faCheckDouble,\n  faCheckSquare: faCheckSquare,\n  faCheese: faCheese,\n  faChess: faChess,\n  faChessBishop: faChessBishop,\n  faChessBoard: faChessBoard,\n  faChessKing: faChessKing,\n  faChessKnight: faChessKnight,\n  faChessPawn: faChessPawn,\n  faChessQueen: faChessQueen,\n  faChessRook: faChessRook,\n  faChevronCircleDown: faChevronCircleDown,\n  faChevronCircleLeft: faChevronCircleLeft,\n  faChevronCircleRight: faChevronCircleRight,\n  faChevronCircleUp: faChevronCircleUp,\n  faChevronDown: faChevronDown,\n  faChevronLeft: faChevronLeft,\n  faChevronRight: faChevronRight,\n  faChevronUp: faChevronUp,\n  faChild: faChild,\n  faChurch: faChurch,\n  faCircle: faCircle,\n  faCircleNotch: faCircleNotch,\n  faCity: faCity,\n  faClinicMedical: faClinicMedical,\n  faClipboard: faClipboard,\n  faClipboardCheck: faClipboardCheck,\n  faClipboardList: faClipboardList,\n  faClock: faClock,\n  faClone: faClone,\n  faClosedCaptioning: faClosedCaptioning,\n  faCloud: faCloud,\n  faCloudDownloadAlt: faCloudDownloadAlt,\n  faCloudMeatball: faCloudMeatball,\n  faCloudMoon: faCloudMoon,\n  faCloudMoonRain: faCloudMoonRain,\n  faCloudRain: faCloudRain,\n  faCloudShowersHeavy: faCloudShowersHeavy,\n  faCloudSun: faCloudSun,\n  faCloudSunRain: faCloudSunRain,\n  faCloudUploadAlt: faCloudUploadAlt,\n  faCocktail: faCocktail,\n  faCode: faCode,\n  faCodeBranch: faCodeBranch,\n  faCoffee: faCoffee,\n  faCog: faCog,\n  faCogs: faCogs,\n  faCoins: faCoins,\n  faColumns: faColumns,\n  faComment: faComment,\n  faCommentAlt: faCommentAlt,\n  faCommentDollar: faCommentDollar,\n  faCommentDots: faCommentDots,\n  faCommentMedical: faCommentMedical,\n  faCommentSlash: faCommentSlash,\n  faComments: faComments,\n  faCommentsDollar: faCommentsDollar,\n  faCompactDisc: faCompactDisc,\n  faCompass: faCompass,\n  faCompress: faCompress,\n  faCompressArrowsAlt: faCompressArrowsAlt,\n  faConciergeBell: faConciergeBell,\n  faCookie: faCookie,\n  faCookieBite: faCookieBite,\n  faCopy: faCopy,\n  faCopyright: faCopyright,\n  faCouch: faCouch,\n  faCreditCard: faCreditCard,\n  faCrop: faCrop,\n  faCropAlt: faCropAlt,\n  faCross: faCross,\n  faCrosshairs: faCrosshairs,\n  faCrow: faCrow,\n  faCrown: faCrown,\n  faCrutch: faCrutch,\n  faCube: faCube,\n  faCubes: faCubes,\n  faCut: faCut,\n  faDatabase: faDatabase,\n  faDeaf: faDeaf,\n  faDemocrat: faDemocrat,\n  faDesktop: faDesktop,\n  faDharmachakra: faDharmachakra,\n  faDiagnoses: faDiagnoses,\n  faDice: faDice,\n  faDiceD20: faDiceD20,\n  faDiceD6: faDiceD6,\n  faDiceFive: faDiceFive,\n  faDiceFour: faDiceFour,\n  faDiceOne: faDiceOne,\n  faDiceSix: faDiceSix,\n  faDiceThree: faDiceThree,\n  faDiceTwo: faDiceTwo,\n  faDigitalTachograph: faDigitalTachograph,\n  faDirections: faDirections,\n  faDivide: faDivide,\n  faDizzy: faDizzy,\n  faDna: faDna,\n  faDog: faDog,\n  faDollarSign: faDollarSign,\n  faDolly: faDolly,\n  faDollyFlatbed: faDollyFlatbed,\n  faDonate: faDonate,\n  faDoorClosed: faDoorClosed,\n  faDoorOpen: faDoorOpen,\n  faDotCircle: faDotCircle,\n  faDove: faDove,\n  faDownload: faDownload,\n  faDraftingCompass: faDraftingCompass,\n  faDragon: faDragon,\n  faDrawPolygon: faDrawPolygon,\n  faDrum: faDrum,\n  faDrumSteelpan: faDrumSteelpan,\n  faDrumstickBite: faDrumstickBite,\n  faDumbbell: faDumbbell,\n  faDumpster: faDumpster,\n  faDumpsterFire: faDumpsterFire,\n  faDungeon: faDungeon,\n  faEdit: faEdit,\n  faEgg: faEgg,\n  faEject: faEject,\n  faEllipsisH: faEllipsisH,\n  faEllipsisV: faEllipsisV,\n  faEnvelope: faEnvelope,\n  faEnvelopeOpen: faEnvelopeOpen,\n  faEnvelopeOpenText: faEnvelopeOpenText,\n  faEnvelopeSquare: faEnvelopeSquare,\n  faEquals: faEquals,\n  faEraser: faEraser,\n  faEthernet: faEthernet,\n  faEuroSign: faEuroSign,\n  faExchangeAlt: faExchangeAlt,\n  faExclamation: faExclamation,\n  faExclamationCircle: faExclamationCircle,\n  faExclamationTriangle: faExclamationTriangle,\n  faExpand: faExpand,\n  faExpandArrowsAlt: faExpandArrowsAlt,\n  faExternalLinkAlt: faExternalLinkAlt,\n  faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n  faEye: faEye,\n  faEyeDropper: faEyeDropper,\n  faEyeSlash: faEyeSlash,\n  faFastBackward: faFastBackward,\n  faFastForward: faFastForward,\n  faFax: faFax,\n  faFeather: faFeather,\n  faFeatherAlt: faFeatherAlt,\n  faFemale: faFemale,\n  faFighterJet: faFighterJet,\n  faFile: faFile,\n  faFileAlt: faFileAlt,\n  faFileArchive: faFileArchive,\n  faFileAudio: faFileAudio,\n  faFileCode: faFileCode,\n  faFileContract: faFileContract,\n  faFileCsv: faFileCsv,\n  faFileDownload: faFileDownload,\n  faFileExcel: faFileExcel,\n  faFileExport: faFileExport,\n  faFileImage: faFileImage,\n  faFileImport: faFileImport,\n  faFileInvoice: faFileInvoice,\n  faFileInvoiceDollar: faFileInvoiceDollar,\n  faFileMedical: faFileMedical,\n  faFileMedicalAlt: faFileMedicalAlt,\n  faFilePdf: faFilePdf,\n  faFilePowerpoint: faFilePowerpoint,\n  faFilePrescription: faFilePrescription,\n  faFileSignature: faFileSignature,\n  faFileUpload: faFileUpload,\n  faFileVideo: faFileVideo,\n  faFileWord: faFileWord,\n  faFill: faFill,\n  faFillDrip: faFillDrip,\n  faFilm: faFilm,\n  faFilter: faFilter,\n  faFingerprint: faFingerprint,\n  faFire: faFire,\n  faFireAlt: faFireAlt,\n  faFireExtinguisher: faFireExtinguisher,\n  faFirstAid: faFirstAid,\n  faFish: faFish,\n  faFistRaised: faFistRaised,\n  faFlag: faFlag,\n  faFlagCheckered: faFlagCheckered,\n  faFlagUsa: faFlagUsa,\n  faFlask: faFlask,\n  faFlushed: faFlushed,\n  faFolder: faFolder,\n  faFolderMinus: faFolderMinus,\n  faFolderOpen: faFolderOpen,\n  faFolderPlus: faFolderPlus,\n  faFont: faFont,\n  faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n  faFootballBall: faFootballBall,\n  faForward: faForward,\n  faFrog: faFrog,\n  faFrown: faFrown,\n  faFrownOpen: faFrownOpen,\n  faFunnelDollar: faFunnelDollar,\n  faFutbol: faFutbol,\n  faGamepad: faGamepad,\n  faGasPump: faGasPump,\n  faGavel: faGavel,\n  faGem: faGem,\n  faGenderless: faGenderless,\n  faGhost: faGhost,\n  faGift: faGift,\n  faGifts: faGifts,\n  faGlassCheers: faGlassCheers,\n  faGlassMartini: faGlassMartini,\n  faGlassMartiniAlt: faGlassMartiniAlt,\n  faGlassWhiskey: faGlassWhiskey,\n  faGlasses: faGlasses,\n  faGlobe: faGlobe,\n  faGlobeAfrica: faGlobeAfrica,\n  faGlobeAmericas: faGlobeAmericas,\n  faGlobeAsia: faGlobeAsia,\n  faGlobeEurope: faGlobeEurope,\n  faGolfBall: faGolfBall,\n  faGopuram: faGopuram,\n  faGraduationCap: faGraduationCap,\n  faGreaterThan: faGreaterThan,\n  faGreaterThanEqual: faGreaterThanEqual,\n  faGrimace: faGrimace,\n  faGrin: faGrin,\n  faGrinAlt: faGrinAlt,\n  faGrinBeam: faGrinBeam,\n  faGrinBeamSweat: faGrinBeamSweat,\n  faGrinHearts: faGrinHearts,\n  faGrinSquint: faGrinSquint,\n  faGrinSquintTears: faGrinSquintTears,\n  faGrinStars: faGrinStars,\n  faGrinTears: faGrinTears,\n  faGrinTongue: faGrinTongue,\n  faGrinTongueSquint: faGrinTongueSquint,\n  faGrinTongueWink: faGrinTongueWink,\n  faGrinWink: faGrinWink,\n  faGripHorizontal: faGripHorizontal,\n  faGripLines: faGripLines,\n  faGripLinesVertical: faGripLinesVertical,\n  faGripVertical: faGripVertical,\n  faGuitar: faGuitar,\n  faHSquare: faHSquare,\n  faHamburger: faHamburger,\n  faHammer: faHammer,\n  faHamsa: faHamsa,\n  faHandHolding: faHandHolding,\n  faHandHoldingHeart: faHandHoldingHeart,\n  faHandHoldingUsd: faHandHoldingUsd,\n  faHandLizard: faHandLizard,\n  faHandMiddleFinger: faHandMiddleFinger,\n  faHandPaper: faHandPaper,\n  faHandPeace: faHandPeace,\n  faHandPointDown: faHandPointDown,\n  faHandPointLeft: faHandPointLeft,\n  faHandPointRight: faHandPointRight,\n  faHandPointUp: faHandPointUp,\n  faHandPointer: faHandPointer,\n  faHandRock: faHandRock,\n  faHandScissors: faHandScissors,\n  faHandSpock: faHandSpock,\n  faHands: faHands,\n  faHandsHelping: faHandsHelping,\n  faHandshake: faHandshake,\n  faHanukiah: faHanukiah,\n  faHardHat: faHardHat,\n  faHashtag: faHashtag,\n  faHatWizard: faHatWizard,\n  faHaykal: faHaykal,\n  faHdd: faHdd,\n  faHeading: faHeading,\n  faHeadphones: faHeadphones,\n  faHeadphonesAlt: faHeadphonesAlt,\n  faHeadset: faHeadset,\n  faHeart: faHeart,\n  faHeartBroken: faHeartBroken,\n  faHeartbeat: faHeartbeat,\n  faHelicopter: faHelicopter,\n  faHighlighter: faHighlighter,\n  faHiking: faHiking,\n  faHippo: faHippo,\n  faHistory: faHistory,\n  faHockeyPuck: faHockeyPuck,\n  faHollyBerry: faHollyBerry,\n  faHome: faHome,\n  faHorse: faHorse,\n  faHorseHead: faHorseHead,\n  faHospital: faHospital,\n  faHospitalAlt: faHospitalAlt,\n  faHospitalSymbol: faHospitalSymbol,\n  faHotTub: faHotTub,\n  faHotdog: faHotdog,\n  faHotel: faHotel,\n  faHourglass: faHourglass,\n  faHourglassEnd: faHourglassEnd,\n  faHourglassHalf: faHourglassHalf,\n  faHourglassStart: faHourglassStart,\n  faHouseDamage: faHouseDamage,\n  faHryvnia: faHryvnia,\n  faICursor: faICursor,\n  faIceCream: faIceCream,\n  faIcicles: faIcicles,\n  faIdBadge: faIdBadge,\n  faIdCard: faIdCard,\n  faIdCardAlt: faIdCardAlt,\n  faIgloo: faIgloo,\n  faImage: faImage,\n  faImages: faImages,\n  faInbox: faInbox,\n  faIndent: faIndent,\n  faIndustry: faIndustry,\n  faInfinity: faInfinity,\n  faInfo: faInfo,\n  faInfoCircle: faInfoCircle,\n  faItalic: faItalic,\n  faJedi: faJedi,\n  faJoint: faJoint,\n  faJournalWhills: faJournalWhills,\n  faKaaba: faKaaba,\n  faKey: faKey,\n  faKeyboard: faKeyboard,\n  faKhanda: faKhanda,\n  faKiss: faKiss,\n  faKissBeam: faKissBeam,\n  faKissWinkHeart: faKissWinkHeart,\n  faKiwiBird: faKiwiBird,\n  faLandmark: faLandmark,\n  faLanguage: faLanguage,\n  faLaptop: faLaptop,\n  faLaptopCode: faLaptopCode,\n  faLaptopMedical: faLaptopMedical,\n  faLaugh: faLaugh,\n  faLaughBeam: faLaughBeam,\n  faLaughSquint: faLaughSquint,\n  faLaughWink: faLaughWink,\n  faLayerGroup: faLayerGroup,\n  faLeaf: faLeaf,\n  faLemon: faLemon,\n  faLessThan: faLessThan,\n  faLessThanEqual: faLessThanEqual,\n  faLevelDownAlt: faLevelDownAlt,\n  faLevelUpAlt: faLevelUpAlt,\n  faLifeRing: faLifeRing,\n  faLightbulb: faLightbulb,\n  faLink: faLink,\n  faLiraSign: faLiraSign,\n  faList: faList,\n  faListAlt: faListAlt,\n  faListOl: faListOl,\n  faListUl: faListUl,\n  faLocationArrow: faLocationArrow,\n  faLock: faLock,\n  faLockOpen: faLockOpen,\n  faLongArrowAltDown: faLongArrowAltDown,\n  faLongArrowAltLeft: faLongArrowAltLeft,\n  faLongArrowAltRight: faLongArrowAltRight,\n  faLongArrowAltUp: faLongArrowAltUp,\n  faLowVision: faLowVision,\n  faLuggageCart: faLuggageCart,\n  faMagic: faMagic,\n  faMagnet: faMagnet,\n  faMailBulk: faMailBulk,\n  faMale: faMale,\n  faMap: faMap,\n  faMapMarked: faMapMarked,\n  faMapMarkedAlt: faMapMarkedAlt,\n  faMapMarker: faMapMarker,\n  faMapMarkerAlt: faMapMarkerAlt,\n  faMapPin: faMapPin,\n  faMapSigns: faMapSigns,\n  faMarker: faMarker,\n  faMars: faMars,\n  faMarsDouble: faMarsDouble,\n  faMarsStroke: faMarsStroke,\n  faMarsStrokeH: faMarsStrokeH,\n  faMarsStrokeV: faMarsStrokeV,\n  faMask: faMask,\n  faMedal: faMedal,\n  faMedkit: faMedkit,\n  faMeh: faMeh,\n  faMehBlank: faMehBlank,\n  faMehRollingEyes: faMehRollingEyes,\n  faMemory: faMemory,\n  faMenorah: faMenorah,\n  faMercury: faMercury,\n  faMeteor: faMeteor,\n  faMicrochip: faMicrochip,\n  faMicrophone: faMicrophone,\n  faMicrophoneAlt: faMicrophoneAlt,\n  faMicrophoneAltSlash: faMicrophoneAltSlash,\n  faMicrophoneSlash: faMicrophoneSlash,\n  faMicroscope: faMicroscope,\n  faMinus: faMinus,\n  faMinusCircle: faMinusCircle,\n  faMinusSquare: faMinusSquare,\n  faMitten: faMitten,\n  faMobile: faMobile,\n  faMobileAlt: faMobileAlt,\n  faMoneyBill: faMoneyBill,\n  faMoneyBillAlt: faMoneyBillAlt,\n  faMoneyBillWave: faMoneyBillWave,\n  faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n  faMoneyCheck: faMoneyCheck,\n  faMoneyCheckAlt: faMoneyCheckAlt,\n  faMonument: faMonument,\n  faMoon: faMoon,\n  faMortarPestle: faMortarPestle,\n  faMosque: faMosque,\n  faMotorcycle: faMotorcycle,\n  faMountain: faMountain,\n  faMousePointer: faMousePointer,\n  faMugHot: faMugHot,\n  faMusic: faMusic,\n  faNetworkWired: faNetworkWired,\n  faNeuter: faNeuter,\n  faNewspaper: faNewspaper,\n  faNotEqual: faNotEqual,\n  faNotesMedical: faNotesMedical,\n  faObjectGroup: faObjectGroup,\n  faObjectUngroup: faObjectUngroup,\n  faOilCan: faOilCan,\n  faOm: faOm,\n  faOtter: faOtter,\n  faOutdent: faOutdent,\n  faPager: faPager,\n  faPaintBrush: faPaintBrush,\n  faPaintRoller: faPaintRoller,\n  faPalette: faPalette,\n  faPallet: faPallet,\n  faPaperPlane: faPaperPlane,\n  faPaperclip: faPaperclip,\n  faParachuteBox: faParachuteBox,\n  faParagraph: faParagraph,\n  faParking: faParking,\n  faPassport: faPassport,\n  faPastafarianism: faPastafarianism,\n  faPaste: faPaste,\n  faPause: faPause,\n  faPauseCircle: faPauseCircle,\n  faPaw: faPaw,\n  faPeace: faPeace,\n  faPen: faPen,\n  faPenAlt: faPenAlt,\n  faPenFancy: faPenFancy,\n  faPenNib: faPenNib,\n  faPenSquare: faPenSquare,\n  faPencilAlt: faPencilAlt,\n  faPencilRuler: faPencilRuler,\n  faPeopleCarry: faPeopleCarry,\n  faPepperHot: faPepperHot,\n  faPercent: faPercent,\n  faPercentage: faPercentage,\n  faPersonBooth: faPersonBooth,\n  faPhone: faPhone,\n  faPhoneSlash: faPhoneSlash,\n  faPhoneSquare: faPhoneSquare,\n  faPhoneVolume: faPhoneVolume,\n  faPiggyBank: faPiggyBank,\n  faPills: faPills,\n  faPizzaSlice: faPizzaSlice,\n  faPlaceOfWorship: faPlaceOfWorship,\n  faPlane: faPlane,\n  faPlaneArrival: faPlaneArrival,\n  faPlaneDeparture: faPlaneDeparture,\n  faPlay: faPlay,\n  faPlayCircle: faPlayCircle,\n  faPlug: faPlug,\n  faPlus: faPlus,\n  faPlusCircle: faPlusCircle,\n  faPlusSquare: faPlusSquare,\n  faPodcast: faPodcast,\n  faPoll: faPoll,\n  faPollH: faPollH,\n  faPoo: faPoo,\n  faPooStorm: faPooStorm,\n  faPoop: faPoop,\n  faPortrait: faPortrait,\n  faPoundSign: faPoundSign,\n  faPowerOff: faPowerOff,\n  faPray: faPray,\n  faPrayingHands: faPrayingHands,\n  faPrescription: faPrescription,\n  faPrescriptionBottle: faPrescriptionBottle,\n  faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n  faPrint: faPrint,\n  faProcedures: faProcedures,\n  faProjectDiagram: faProjectDiagram,\n  faPuzzlePiece: faPuzzlePiece,\n  faQrcode: faQrcode,\n  faQuestion: faQuestion,\n  faQuestionCircle: faQuestionCircle,\n  faQuidditch: faQuidditch,\n  faQuoteLeft: faQuoteLeft,\n  faQuoteRight: faQuoteRight,\n  faQuran: faQuran,\n  faRadiation: faRadiation,\n  faRadiationAlt: faRadiationAlt,\n  faRainbow: faRainbow,\n  faRandom: faRandom,\n  faReceipt: faReceipt,\n  faRecycle: faRecycle,\n  faRedo: faRedo,\n  faRedoAlt: faRedoAlt,\n  faRegistered: faRegistered,\n  faReply: faReply,\n  faReplyAll: faReplyAll,\n  faRepublican: faRepublican,\n  faRestroom: faRestroom,\n  faRetweet: faRetweet,\n  faRibbon: faRibbon,\n  faRing: faRing,\n  faRoad: faRoad,\n  faRobot: faRobot,\n  faRocket: faRocket,\n  faRoute: faRoute,\n  faRss: faRss,\n  faRssSquare: faRssSquare,\n  faRubleSign: faRubleSign,\n  faRuler: faRuler,\n  faRulerCombined: faRulerCombined,\n  faRulerHorizontal: faRulerHorizontal,\n  faRulerVertical: faRulerVertical,\n  faRunning: faRunning,\n  faRupeeSign: faRupeeSign,\n  faSadCry: faSadCry,\n  faSadTear: faSadTear,\n  faSatellite: faSatellite,\n  faSatelliteDish: faSatelliteDish,\n  faSave: faSave,\n  faSchool: faSchool,\n  faScrewdriver: faScrewdriver,\n  faScroll: faScroll,\n  faSdCard: faSdCard,\n  faSearch: faSearch,\n  faSearchDollar: faSearchDollar,\n  faSearchLocation: faSearchLocation,\n  faSearchMinus: faSearchMinus,\n  faSearchPlus: faSearchPlus,\n  faSeedling: faSeedling,\n  faServer: faServer,\n  faShapes: faShapes,\n  faShare: faShare,\n  faShareAlt: faShareAlt,\n  faShareAltSquare: faShareAltSquare,\n  faShareSquare: faShareSquare,\n  faShekelSign: faShekelSign,\n  faShieldAlt: faShieldAlt,\n  faShip: faShip,\n  faShippingFast: faShippingFast,\n  faShoePrints: faShoePrints,\n  faShoppingBag: faShoppingBag,\n  faShoppingBasket: faShoppingBasket,\n  faShoppingCart: faShoppingCart,\n  faShower: faShower,\n  faShuttleVan: faShuttleVan,\n  faSign: faSign,\n  faSignInAlt: faSignInAlt,\n  faSignLanguage: faSignLanguage,\n  faSignOutAlt: faSignOutAlt,\n  faSignal: faSignal,\n  faSignature: faSignature,\n  faSimCard: faSimCard,\n  faSitemap: faSitemap,\n  faSkating: faSkating,\n  faSkiing: faSkiing,\n  faSkiingNordic: faSkiingNordic,\n  faSkull: faSkull,\n  faSkullCrossbones: faSkullCrossbones,\n  faSlash: faSlash,\n  faSleigh: faSleigh,\n  faSlidersH: faSlidersH,\n  faSmile: faSmile,\n  faSmileBeam: faSmileBeam,\n  faSmileWink: faSmileWink,\n  faSmog: faSmog,\n  faSmoking: faSmoking,\n  faSmokingBan: faSmokingBan,\n  faSms: faSms,\n  faSnowboarding: faSnowboarding,\n  faSnowflake: faSnowflake,\n  faSnowman: faSnowman,\n  faSnowplow: faSnowplow,\n  faSocks: faSocks,\n  faSolarPanel: faSolarPanel,\n  faSort: faSort,\n  faSortAlphaDown: faSortAlphaDown,\n  faSortAlphaUp: faSortAlphaUp,\n  faSortAmountDown: faSortAmountDown,\n  faSortAmountUp: faSortAmountUp,\n  faSortDown: faSortDown,\n  faSortNumericDown: faSortNumericDown,\n  faSortNumericUp: faSortNumericUp,\n  faSortUp: faSortUp,\n  faSpa: faSpa,\n  faSpaceShuttle: faSpaceShuttle,\n  faSpider: faSpider,\n  faSpinner: faSpinner,\n  faSplotch: faSplotch,\n  faSprayCan: faSprayCan,\n  faSquare: faSquare,\n  faSquareFull: faSquareFull,\n  faSquareRootAlt: faSquareRootAlt,\n  faStamp: faStamp,\n  faStar: faStar,\n  faStarAndCrescent: faStarAndCrescent,\n  faStarHalf: faStarHalf,\n  faStarHalfAlt: faStarHalfAlt,\n  faStarOfDavid: faStarOfDavid,\n  faStarOfLife: faStarOfLife,\n  faStepBackward: faStepBackward,\n  faStepForward: faStepForward,\n  faStethoscope: faStethoscope,\n  faStickyNote: faStickyNote,\n  faStop: faStop,\n  faStopCircle: faStopCircle,\n  faStopwatch: faStopwatch,\n  faStore: faStore,\n  faStoreAlt: faStoreAlt,\n  faStream: faStream,\n  faStreetView: faStreetView,\n  faStrikethrough: faStrikethrough,\n  faStroopwafel: faStroopwafel,\n  faSubscript: faSubscript,\n  faSubway: faSubway,\n  faSuitcase: faSuitcase,\n  faSuitcaseRolling: faSuitcaseRolling,\n  faSun: faSun,\n  faSuperscript: faSuperscript,\n  faSurprise: faSurprise,\n  faSwatchbook: faSwatchbook,\n  faSwimmer: faSwimmer,\n  faSwimmingPool: faSwimmingPool,\n  faSynagogue: faSynagogue,\n  faSync: faSync,\n  faSyncAlt: faSyncAlt,\n  faSyringe: faSyringe,\n  faTable: faTable,\n  faTableTennis: faTableTennis,\n  faTablet: faTablet,\n  faTabletAlt: faTabletAlt,\n  faTablets: faTablets,\n  faTachometerAlt: faTachometerAlt,\n  faTag: faTag,\n  faTags: faTags,\n  faTape: faTape,\n  faTasks: faTasks,\n  faTaxi: faTaxi,\n  faTeeth: faTeeth,\n  faTeethOpen: faTeethOpen,\n  faTemperatureHigh: faTemperatureHigh,\n  faTemperatureLow: faTemperatureLow,\n  faTenge: faTenge,\n  faTerminal: faTerminal,\n  faTextHeight: faTextHeight,\n  faTextWidth: faTextWidth,\n  faTh: faTh,\n  faThLarge: faThLarge,\n  faThList: faThList,\n  faTheaterMasks: faTheaterMasks,\n  faThermometer: faThermometer,\n  faThermometerEmpty: faThermometerEmpty,\n  faThermometerFull: faThermometerFull,\n  faThermometerHalf: faThermometerHalf,\n  faThermometerQuarter: faThermometerQuarter,\n  faThermometerThreeQuarters: faThermometerThreeQuarters,\n  faThumbsDown: faThumbsDown,\n  faThumbsUp: faThumbsUp,\n  faThumbtack: faThumbtack,\n  faTicketAlt: faTicketAlt,\n  faTimes: faTimes,\n  faTimesCircle: faTimesCircle,\n  faTint: faTint,\n  faTintSlash: faTintSlash,\n  faTired: faTired,\n  faToggleOff: faToggleOff,\n  faToggleOn: faToggleOn,\n  faToilet: faToilet,\n  faToiletPaper: faToiletPaper,\n  faToolbox: faToolbox,\n  faTools: faTools,\n  faTooth: faTooth,\n  faTorah: faTorah,\n  faToriiGate: faToriiGate,\n  faTractor: faTractor,\n  faTrademark: faTrademark,\n  faTrafficLight: faTrafficLight,\n  faTrain: faTrain,\n  faTram: faTram,\n  faTransgender: faTransgender,\n  faTransgenderAlt: faTransgenderAlt,\n  faTrash: faTrash,\n  faTrashAlt: faTrashAlt,\n  faTrashRestore: faTrashRestore,\n  faTrashRestoreAlt: faTrashRestoreAlt,\n  faTree: faTree,\n  faTrophy: faTrophy,\n  faTruck: faTruck,\n  faTruckLoading: faTruckLoading,\n  faTruckMonster: faTruckMonster,\n  faTruckMoving: faTruckMoving,\n  faTruckPickup: faTruckPickup,\n  faTshirt: faTshirt,\n  faTty: faTty,\n  faTv: faTv,\n  faUmbrella: faUmbrella,\n  faUmbrellaBeach: faUmbrellaBeach,\n  faUnderline: faUnderline,\n  faUndo: faUndo,\n  faUndoAlt: faUndoAlt,\n  faUniversalAccess: faUniversalAccess,\n  faUniversity: faUniversity,\n  faUnlink: faUnlink,\n  faUnlock: faUnlock,\n  faUnlockAlt: faUnlockAlt,\n  faUpload: faUpload,\n  faUser: faUser,\n  faUserAlt: faUserAlt,\n  faUserAltSlash: faUserAltSlash,\n  faUserAstronaut: faUserAstronaut,\n  faUserCheck: faUserCheck,\n  faUserCircle: faUserCircle,\n  faUserClock: faUserClock,\n  faUserCog: faUserCog,\n  faUserEdit: faUserEdit,\n  faUserFriends: faUserFriends,\n  faUserGraduate: faUserGraduate,\n  faUserInjured: faUserInjured,\n  faUserLock: faUserLock,\n  faUserMd: faUserMd,\n  faUserMinus: faUserMinus,\n  faUserNinja: faUserNinja,\n  faUserNurse: faUserNurse,\n  faUserPlus: faUserPlus,\n  faUserSecret: faUserSecret,\n  faUserShield: faUserShield,\n  faUserSlash: faUserSlash,\n  faUserTag: faUserTag,\n  faUserTie: faUserTie,\n  faUserTimes: faUserTimes,\n  faUsers: faUsers,\n  faUsersCog: faUsersCog,\n  faUtensilSpoon: faUtensilSpoon,\n  faUtensils: faUtensils,\n  faVectorSquare: faVectorSquare,\n  faVenus: faVenus,\n  faVenusDouble: faVenusDouble,\n  faVenusMars: faVenusMars,\n  faVial: faVial,\n  faVials: faVials,\n  faVideo: faVideo,\n  faVideoSlash: faVideoSlash,\n  faVihara: faVihara,\n  faVolleyballBall: faVolleyballBall,\n  faVolumeDown: faVolumeDown,\n  faVolumeMute: faVolumeMute,\n  faVolumeOff: faVolumeOff,\n  faVolumeUp: faVolumeUp,\n  faVoteYea: faVoteYea,\n  faVrCardboard: faVrCardboard,\n  faWalking: faWalking,\n  faWallet: faWallet,\n  faWarehouse: faWarehouse,\n  faWater: faWater,\n  faWaveSquare: faWaveSquare,\n  faWeight: faWeight,\n  faWeightHanging: faWeightHanging,\n  faWheelchair: faWheelchair,\n  faWifi: faWifi,\n  faWind: faWind,\n  faWindowClose: faWindowClose,\n  faWindowMaximize: faWindowMaximize,\n  faWindowMinimize: faWindowMinimize,\n  faWindowRestore: faWindowRestore,\n  faWineBottle: faWineBottle,\n  faWineGlass: faWineGlass,\n  faWineGlassAlt: faWineGlassAlt,\n  faWonSign: faWonSign,\n  faWrench: faWrench,\n  faXRay: faXRay,\n  faYenSign: faYenSign,\n  faYinYang: faYinYang\n};\n\nexport { _iconsCache as fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBalanceScale, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBowlingBall, faBox, faBoxOpen, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFastBackward, faFastForward, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingUsd, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHands, faHandsHelping, faHandshake, faHanukiah, faHardHat, faHashtag, faHatWizard, faHaykal, faHdd, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHryvnia, faICursor, faIceCream, faIcicles, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneSlash, faPhoneSquare, faPhoneVolume, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecycle, faRedo, faRedoAlt, faRegistered, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaUp, faSortAmountDown, faSortAmountUp, faSortDown, faSortNumericDown, faSortNumericUp, faSortUp, faSpa, faSpaceShuttle, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStore, faStoreAlt, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVial, faVials, faVideo, faVideoSlash, faVihara, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWaveSquare, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang };\n","var prefix = \"fab\";\nvar fa500px = {\n  prefix: 'fab',\n  iconName: '500px',\n  icon: [448, 512, [], \"f26e\", \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"]\n};\nvar faAccessibleIcon = {\n  prefix: 'fab',\n  iconName: 'accessible-icon',\n  icon: [448, 512, [], \"f368\", \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"]\n};\nvar faAccusoft = {\n  prefix: 'fab',\n  iconName: 'accusoft',\n  icon: [640, 512, [], \"f369\", \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"]\n};\nvar faAcquisitionsIncorporated = {\n  prefix: 'fab',\n  iconName: 'acquisitions-incorporated',\n  icon: [384, 512, [], \"f6af\", \"M357.45 468.2c-1.2-7.7-1.3-7.6-9.6-7.6-99.8.2-111.8-2.4-112.7-2.6-12.3-1.7-20.6-10.5-21-23.1-.1-1.6-.2-71.6-1-129.1-.1-4.7 1.6-6.4 5.9-7.5 12.5-3 24.9-6.1 37.3-9.7 4.3-1.3 6.8-.2 8.4 3.5 4.5 10.3 8.8 20.6 13.2 30.9 1.6 3.7.1 4.4-3.4 4.4-10-.2-20-.1-30.4-.1v27h116c-1.4-9.5-2.7-18.1-4-27.5-7 0-13.8.4-20.4-.1-22.6-1.6-18.3-4.4-84-158.6-8.8-20.1-27.9-62.1-36.5-89.2-4.4-14 5.5-25.4 18.9-26.6 18.6-1.7 37.5-1.6 56.2-2 20.6-.4 41.2-.4 61.8-.5 3.1 0 4-1.4 4.3-4.3 1.2-9.8 2.7-19.5 4-29.2.8-5.3 1.6-10.7 2.4-16.1L23.75 0c-3.6 0-5.3 1.1-4.6 5.3 2.2 13.2-.8.8 6.4 45.3 63.4 0 71.8.9 101.8.5 12.3-.2 37 3.5 37.7 22.1.4 11.4-1.1 11.3-32.6 87.4-53.8 129.8-50.7 120.3-67.3 161-1.7 4.1-3.6 5.2-7.6 5.2-8.5-.2-17-.3-25.4.1-1.9.1-5.2 1.8-5.5 3.2-1.5 8.1-2.2 16.3-3.2 24.9h114.3v-27.6c-6.9 0-33.5.4-35.3-2.9 5.3-12.3 10.4-24.4 15.7-36.7 16.3 4 31.9 7.8 47.6 11.7 3.4.9 4.6 3 4.6 6.8-.1 42.9.1 85.9.2 128.8 0 10.2-5.5 19.1-14.9 23.1-6.5 2.7-3.3 3.4-121.4 2.4-5.3 0-7.1 2-7.6 6.8-1.5 12.9-2.9 25.9-5 38.8-.8 5 1.3 5.7 5.3 5.7 183.2.6-30.7 0 337.1 0-2.5-15-4.4-29.4-6.6-43.7zm-174.9-205.7c-13.3-4.2-26.6-8.2-39.9-12.5a44.53 44.53 0 0 1-5.8-2.9c17.2-44.3 34.2-88.1 51.3-132.1 7.5 2.4 7.9-.8 9.4 0 9.3 22.5 18.1 60.1 27 82.8 6.6 16.7 13 33.5 19.7 50.9a35.78 35.78 0 0 1-3.9 2.1c-13.1 3.9-26.4 7.5-39.4 11.7a27.66 27.66 0 0 1-18.4 0z\"]\n};\nvar faAdn = {\n  prefix: 'fab',\n  iconName: 'adn',\n  icon: [496, 512, [], \"f170\", \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"]\n};\nvar faAdobe = {\n  prefix: 'fab',\n  iconName: 'adobe',\n  icon: [512, 512, [], \"f778\", \"M315.5 64h170.9v384L315.5 64zm-119 0H25.6v384L196.5 64zM256 206.1L363.5 448h-73l-30.7-76.8h-78.7L256 206.1z\"]\n};\nvar faAdversal = {\n  prefix: 'fab',\n  iconName: 'adversal',\n  icon: [512, 512, [], \"f36a\", \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"]\n};\nvar faAffiliatetheme = {\n  prefix: 'fab',\n  iconName: 'affiliatetheme',\n  icon: [512, 512, [], \"f36b\", \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"]\n};\nvar faAirbnb = {\n  prefix: 'fab',\n  iconName: 'airbnb',\n  icon: [448, 512, [], \"f834\", \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"]\n};\nvar faAlgolia = {\n  prefix: 'fab',\n  iconName: 'algolia',\n  icon: [448, 512, [], \"f36c\", \"M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z\"]\n};\nvar faAlipay = {\n  prefix: 'fab',\n  iconName: 'alipay',\n  icon: [448, 512, [], \"f642\", \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"]\n};\nvar faAmazon = {\n  prefix: 'fab',\n  iconName: 'amazon',\n  icon: [448, 512, [], \"f270\", \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"]\n};\nvar faAmazonPay = {\n  prefix: 'fab',\n  iconName: 'amazon-pay',\n  icon: [640, 512, [], \"f42c\", \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"]\n};\nvar faAmilia = {\n  prefix: 'fab',\n  iconName: 'amilia',\n  icon: [448, 512, [], \"f36d\", \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"]\n};\nvar faAndroid = {\n  prefix: 'fab',\n  iconName: 'android',\n  icon: [448, 512, [], \"f17b\", \"M89.6 204.5v115.8c0 15.4-12.1 27.7-27.5 27.7-15.3 0-30.1-12.4-30.1-27.7V204.5c0-15.1 14.8-27.5 30.1-27.5 15.1 0 27.5 12.4 27.5 27.5zm10.8 157c0 16.4 13.2 29.6 29.6 29.6h19.9l.3 61.1c0 36.9 55.2 36.6 55.2 0v-61.1h37.2v61.1c0 36.7 55.5 36.8 55.5 0v-61.1h20.2c16.2 0 29.4-13.2 29.4-29.6V182.1H100.4v179.4zm248-189.1H99.3c0-42.8 25.6-80 63.6-99.4l-19.1-35.3c-2.8-4.9 4.3-8 6.7-3.8l19.4 35.6c34.9-15.5 75-14.7 108.3 0L297.5 34c2.5-4.3 9.5-1.1 6.7 3.8L285.1 73c37.7 19.4 63.3 56.6 63.3 99.4zm-170.7-55.5c0-5.7-4.6-10.5-10.5-10.5-5.7 0-10.2 4.8-10.2 10.5s4.6 10.5 10.2 10.5c5.9 0 10.5-4.8 10.5-10.5zm113.4 0c0-5.7-4.6-10.5-10.2-10.5-5.9 0-10.5 4.8-10.5 10.5s4.6 10.5 10.5 10.5c5.6 0 10.2-4.8 10.2-10.5zm94.8 60.1c-15.1 0-27.5 12.1-27.5 27.5v115.8c0 15.4 12.4 27.7 27.5 27.7 15.4 0 30.1-12.4 30.1-27.7V204.5c0-15.4-14.8-27.5-30.1-27.5z\"]\n};\nvar faAngellist = {\n  prefix: 'fab',\n  iconName: 'angellist',\n  icon: [448, 512, [], \"f209\", \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"]\n};\nvar faAngrycreative = {\n  prefix: 'fab',\n  iconName: 'angrycreative',\n  icon: [640, 512, [], \"f36e\", \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"]\n};\nvar faAngular = {\n  prefix: 'fab',\n  iconName: 'angular',\n  icon: [448, 512, [], \"f420\", \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"]\n};\nvar faAppStore = {\n  prefix: 'fab',\n  iconName: 'app-store',\n  icon: [512, 512, [], \"f36f\", \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"]\n};\nvar faAppStoreIos = {\n  prefix: 'fab',\n  iconName: 'app-store-ios',\n  icon: [448, 512, [], \"f370\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"]\n};\nvar faApper = {\n  prefix: 'fab',\n  iconName: 'apper',\n  icon: [640, 512, [], \"f371\", \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"]\n};\nvar faApple = {\n  prefix: 'fab',\n  iconName: 'apple',\n  icon: [384, 512, [], \"f179\", \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"]\n};\nvar faApplePay = {\n  prefix: 'fab',\n  iconName: 'apple-pay',\n  icon: [640, 512, [], \"f415\", \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"]\n};\nvar faArtstation = {\n  prefix: 'fab',\n  iconName: 'artstation',\n  icon: [512, 512, [], \"f77a\", \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"]\n};\nvar faAsymmetrik = {\n  prefix: 'fab',\n  iconName: 'asymmetrik',\n  icon: [576, 512, [], \"f372\", \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"]\n};\nvar faAtlassian = {\n  prefix: 'fab',\n  iconName: 'atlassian',\n  icon: [512, 512, [], \"f77b\", \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"]\n};\nvar faAudible = {\n  prefix: 'fab',\n  iconName: 'audible',\n  icon: [640, 512, [], \"f373\", \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"]\n};\nvar faAutoprefixer = {\n  prefix: 'fab',\n  iconName: 'autoprefixer',\n  icon: [640, 512, [], \"f41c\", \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"]\n};\nvar faAvianex = {\n  prefix: 'fab',\n  iconName: 'avianex',\n  icon: [512, 512, [], \"f374\", \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"]\n};\nvar faAviato = {\n  prefix: 'fab',\n  iconName: 'aviato',\n  icon: [640, 512, [], \"f421\", \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"]\n};\nvar faAws = {\n  prefix: 'fab',\n  iconName: 'aws',\n  icon: [640, 512, [], \"f375\", \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"]\n};\nvar faBandcamp = {\n  prefix: 'fab',\n  iconName: 'bandcamp',\n  icon: [496, 512, [], \"f2d5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z\"]\n};\nvar faBattleNet = {\n  prefix: 'fab',\n  iconName: 'battle-net',\n  icon: [512, 512, [], \"f835\", \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"]\n};\nvar faBehance = {\n  prefix: 'fab',\n  iconName: 'behance',\n  icon: [576, 512, [], \"f1b4\", \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"]\n};\nvar faBehanceSquare = {\n  prefix: 'fab',\n  iconName: 'behance-square',\n  icon: [448, 512, [], \"f1b5\", \"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z\"]\n};\nvar faBimobject = {\n  prefix: 'fab',\n  iconName: 'bimobject',\n  icon: [448, 512, [], \"f378\", \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"]\n};\nvar faBitbucket = {\n  prefix: 'fab',\n  iconName: 'bitbucket',\n  icon: [512, 512, [], \"f171\", \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"]\n};\nvar faBitcoin = {\n  prefix: 'fab',\n  iconName: 'bitcoin',\n  icon: [512, 512, [], \"f379\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"]\n};\nvar faBity = {\n  prefix: 'fab',\n  iconName: 'bity',\n  icon: [496, 512, [], \"f37a\", \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"]\n};\nvar faBlackTie = {\n  prefix: 'fab',\n  iconName: 'black-tie',\n  icon: [448, 512, [], \"f27e\", \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"]\n};\nvar faBlackberry = {\n  prefix: 'fab',\n  iconName: 'blackberry',\n  icon: [512, 512, [], \"f37b\", \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"]\n};\nvar faBlogger = {\n  prefix: 'fab',\n  iconName: 'blogger',\n  icon: [448, 512, [], \"f37c\", \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"]\n};\nvar faBloggerB = {\n  prefix: 'fab',\n  iconName: 'blogger-b',\n  icon: [448, 512, [], \"f37d\", \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"]\n};\nvar faBluetooth = {\n  prefix: 'fab',\n  iconName: 'bluetooth',\n  icon: [448, 512, [], \"f293\", \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"]\n};\nvar faBluetoothB = {\n  prefix: 'fab',\n  iconName: 'bluetooth-b',\n  icon: [320, 512, [], \"f294\", \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"]\n};\nvar faBootstrap = {\n  prefix: 'fab',\n  iconName: 'bootstrap',\n  icon: [448, 512, [], \"f836\", \"M292.3 311.93c0 42.41-39.72 41.43-43.92 41.43h-80.89v-81.69h80.89c42.56 0 43.92 31.9 43.92 40.26zm-50.15-73.13c.67 0 38.44 1 38.44-36.31 0-15.52-3.51-35.87-38.44-35.87h-74.66v72.18h74.66zM448 106.67v298.66A74.89 74.89 0 0 1 373.33 480H74.67A74.89 74.89 0 0 1 0 405.33V106.67A74.89 74.89 0 0 1 74.67 32h298.66A74.89 74.89 0 0 1 448 106.67zM338.05 317.86c0-21.57-6.65-58.29-49.05-67.35v-.73c22.91-9.78 37.34-28.25 37.34-55.64 0-7 2-64.78-77.6-64.78h-127v261.33c128.23 0 139.87 1.68 163.6-5.71 14.21-4.42 52.71-17.98 52.71-67.12z\"]\n};\nvar faBtc = {\n  prefix: 'fab',\n  iconName: 'btc',\n  icon: [384, 512, [], \"f15a\", \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"]\n};\nvar faBuffer = {\n  prefix: 'fab',\n  iconName: 'buffer',\n  icon: [448, 512, [], \"f837\", \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"]\n};\nvar faBuromobelexperte = {\n  prefix: 'fab',\n  iconName: 'buromobelexperte',\n  icon: [448, 512, [], \"f37f\", \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"]\n};\nvar faBuysellads = {\n  prefix: 'fab',\n  iconName: 'buysellads',\n  icon: [448, 512, [], \"f20d\", \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"]\n};\nvar faCanadianMapleLeaf = {\n  prefix: 'fab',\n  iconName: 'canadian-maple-leaf',\n  icon: [512, 512, [], \"f785\", \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"]\n};\nvar faCcAmazonPay = {\n  prefix: 'fab',\n  iconName: 'cc-amazon-pay',\n  icon: [576, 512, [], \"f42d\", \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"]\n};\nvar faCcAmex = {\n  prefix: 'fab',\n  iconName: 'cc-amex',\n  icon: [576, 512, [], \"f1f3\", \"M325.1 167.8c0-16.4-14.1-18.4-27.4-18.4l-39.1-.3v69.3H275v-25.1h18c18.4 0 14.5 10.3 14.8 25.1h16.6v-13.5c0-9.2-1.5-15.1-11-18.4 7.4-3 11.8-10.7 11.7-18.7zm-29.4 11.3H275v-15.3h21c5.1 0 10.7 1 10.7 7.4 0 6.6-5.3 7.9-11 7.9zM279 268.6h-52.7l-21 22.8-20.5-22.8h-66.5l-.1 69.3h65.4l21.3-23 20.4 23h32.2l.1-23.3c18.9 0 49.3 4.6 49.3-23.3 0-17.3-12.3-22.7-27.9-22.7zm-103.8 54.7h-40.6v-13.8h36.3v-14.1h-36.3v-12.5h41.7l17.9 20.2zm65.8 8.2l-25.3-28.1L241 276zm37.8-31h-21.2v-17.6h21.5c5.6 0 10.2 2.3 10.2 8.4 0 6.4-4.6 9.2-10.5 9.2zm-31.6-136.7v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5zM576 255.4h-.2zm-194.6 31.9c0-16.4-14.1-18.7-27.1-18.7h-39.4l-.1 69.3h16.6l.1-25.3h17.6c11 0 14.8 2 14.8 13.8l-.1 11.5h16.6l.1-13.8c0-8.9-1.8-15.1-11-18.4 7.7-3.1 11.8-10.8 11.9-18.4zm-29.2 11.2h-20.7v-15.6h21c5.1 0 10.7 1 10.7 7.4 0 6.9-5.4 8.2-11 8.2zm-172.8-80v-69.3h-27.6l-19.7 47-21.7-47H83.3v65.7l-28.1-65.7H30.7L1 218.5h17.9l6.4-15.3h34.5l6.4 15.3H100v-54.2l24 54.2h14.6l24-54.2v54.2zM31.2 188.8l11.2-27.6 11.5 27.6zm477.4 158.9v-4.5c-10.8 5.6-3.9 4.5-156.7 4.5 0-25.2.1-23.9 0-25.2-1.7-.1-3.2-.1-9.4-.1 0 17.9-.1 6.8-.1 25.3h-39.6c0-12.1.1-15.3.1-29.2-10 6-22.8 6.4-34.3 6.2 0 14.7-.1 8.3-.1 23h-48.9c-5.1-5.7-2.7-3.1-15.4-17.4-3.2 3.5-12.8 13.9-16.1 17.4h-82v-92.3h83.1c5 5.6 2.8 3.1 15.5 17.2 3.2-3.5 12.2-13.4 15.7-17.2h58c9.8 0 18 1.9 24.3 5.6v-5.6c54.3 0 64.3-1.4 75.7 5.1v-5.1h78.2v5.2c11.4-6.9 19.6-5.2 64.9-5.2v5c10.3-5.9 16.6-5.2 54.3-5V80c0-26.5-21.5-48-48-48h-480c-26.5 0-48 21.5-48 48v109.8c9.4-21.9 19.7-46 23.1-53.9h39.7c4.3 10.1 1.6 3.7 9 21.1v-21.1h46c2.9 6.2 11.1 24 13.9 30 5.8-13.6 10.1-23.9 12.6-30h103c0-.1 11.5 0 11.6 0 43.7.2 53.6-.8 64.4 5.3v-5.3H363v9.3c7.6-6.1 17.9-9.3 30.7-9.3h27.6c0 .5 1.9.3 2.3.3H456c4.2 9.8 2.6 6 8.8 20.6v-20.6h43.3c4.9 8-1-1.8 11.2 18.4v-18.4h39.9v92h-41.6c-5.4-9-1.4-2.2-13.2-21.9v21.9h-52.8c-6.4-14.8-.1-.3-6.6-15.3h-19c-4.2 10-2.2 5.2-6.4 15.3h-26.8c-12.3 0-22.3-3-29.7-8.9v8.9h-66.5c-.3-13.9-.1-24.8-.1-24.8-1.8-.3-3.4-.2-9.8-.2v25.1H151.2v-11.4c-2.5 5.6-2.7 5.9-5.1 11.4h-29.5c-4-8.9-2.9-6.4-5.1-11.4v11.4H58.6c-4.2-10.1-2.2-5.3-6.4-15.3H33c-4.2 10-2.2 5.2-6.4 15.3H0V432c0 26.5 21.5 48 48 48h480.1c26.5 0 48-21.5 48-48v-90.4c-12.7 8.3-32.7 6.1-67.5 6.1zm36.3-64.5H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-57 39.8h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-42.2-40.1v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5zm-56.3-108.1c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm20.4-10.5h-.1zm-16.2-15.2c-23.5 0-34 12-34 35.3 0 22.2 10.2 34 33 34h19.2l6.4-15.3h34.3l6.6 15.3h33.7v-51.9l31.2 51.9h23.6v-69h-16.9v48.1l-29.1-48.1h-25.3v65.4l-27.9-65.4h-24.8l-23.5 54.5h-7.4c-13.3 0-16.1-8.1-16.1-19.9 0-23.8 15.7-20 33.1-19.7v-15.2zm42.1 12.1l11.2 27.6h-22.8zm-101.1-12v69.3h16.9v-69.3z\"]\n};\nvar faCcApplePay = {\n  prefix: 'fab',\n  iconName: 'cc-apple-pay',\n  icon: [576, 512, [], \"f416\", \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"]\n};\nvar faCcDinersClub = {\n  prefix: 'fab',\n  iconName: 'cc-diners-club',\n  icon: [576, 512, [], \"f24c\", \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"]\n};\nvar faCcDiscover = {\n  prefix: 'fab',\n  iconName: 'cc-discover',\n  icon: [576, 512, [], \"f1f2\", \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"]\n};\nvar faCcJcb = {\n  prefix: 'fab',\n  iconName: 'cc-jcb',\n  icon: [576, 512, [], \"f24b\", \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"]\n};\nvar faCcMastercard = {\n  prefix: 'fab',\n  iconName: 'cc-mastercard',\n  icon: [576, 512, [], \"f1f1\", \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"]\n};\nvar faCcPaypal = {\n  prefix: 'fab',\n  iconName: 'cc-paypal',\n  icon: [576, 512, [], \"f1f4\", \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"]\n};\nvar faCcStripe = {\n  prefix: 'fab',\n  iconName: 'cc-stripe',\n  icon: [576, 512, [], \"f1f5\", \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"]\n};\nvar faCcVisa = {\n  prefix: 'fab',\n  iconName: 'cc-visa',\n  icon: [576, 512, [], \"f1f0\", \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"]\n};\nvar faCentercode = {\n  prefix: 'fab',\n  iconName: 'centercode',\n  icon: [512, 512, [], \"f380\", \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"]\n};\nvar faCentos = {\n  prefix: 'fab',\n  iconName: 'centos',\n  icon: [448, 512, [], \"f789\", \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"]\n};\nvar faChrome = {\n  prefix: 'fab',\n  iconName: 'chrome',\n  icon: [496, 512, [], \"f268\", \"M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z\"]\n};\nvar faChromecast = {\n  prefix: 'fab',\n  iconName: 'chromecast',\n  icon: [512, 512, [], \"f838\", \"M447.83 64H64a42.72 42.72 0 0 0-42.72 42.72v63.92H64v-63.92h383.83v298.56H298.64V448H448a42.72 42.72 0 0 0 42.72-42.72V106.72A42.72 42.72 0 0 0 448 64zM21.28 383.58v63.92h63.91a63.91 63.91 0 0 0-63.91-63.92zm0-85.28V341a106.63 106.63 0 0 1 106.64 106.66v.34h42.72a149.19 149.19 0 0 0-149-149.36h-.33zm0-85.27v42.72c106-.1 192 85.75 192.08 191.75v.5h42.72c-.46-129.46-105.34-234.27-234.8-234.64z\"]\n};\nvar faCloudscale = {\n  prefix: 'fab',\n  iconName: 'cloudscale',\n  icon: [448, 512, [], \"f383\", \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"]\n};\nvar faCloudsmith = {\n  prefix: 'fab',\n  iconName: 'cloudsmith',\n  icon: [332, 512, [], \"f384\", \"M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z\"]\n};\nvar faCloudversify = {\n  prefix: 'fab',\n  iconName: 'cloudversify',\n  icon: [616, 512, [], \"f385\", \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"]\n};\nvar faCodepen = {\n  prefix: 'fab',\n  iconName: 'codepen',\n  icon: [512, 512, [], \"f1cb\", \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"]\n};\nvar faCodiepie = {\n  prefix: 'fab',\n  iconName: 'codiepie',\n  icon: [472, 512, [], \"f284\", \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"]\n};\nvar faConfluence = {\n  prefix: 'fab',\n  iconName: 'confluence',\n  icon: [512, 512, [], \"f78d\", \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"]\n};\nvar faConnectdevelop = {\n  prefix: 'fab',\n  iconName: 'connectdevelop',\n  icon: [576, 512, [], \"f20e\", \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"]\n};\nvar faContao = {\n  prefix: 'fab',\n  iconName: 'contao',\n  icon: [512, 512, [], \"f26d\", \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"]\n};\nvar faCpanel = {\n  prefix: 'fab',\n  iconName: 'cpanel',\n  icon: [640, 512, [], \"f388\", \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"]\n};\nvar faCreativeCommons = {\n  prefix: 'fab',\n  iconName: 'creative-commons',\n  icon: [496, 512, [], \"f25e\", \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"]\n};\nvar faCreativeCommonsBy = {\n  prefix: 'fab',\n  iconName: 'creative-commons-by',\n  icon: [496, 512, [], \"f4e7\", \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"]\n};\nvar faCreativeCommonsNc = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc',\n  icon: [496, 512, [], \"f4e8\", \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"]\n};\nvar faCreativeCommonsNcEu = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-eu',\n  icon: [496, 512, [], \"f4e9\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"]\n};\nvar faCreativeCommonsNcJp = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nc-jp',\n  icon: [496, 512, [], \"f4ea\", \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"]\n};\nvar faCreativeCommonsNd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-nd',\n  icon: [496, 512, [], \"f4eb\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"]\n};\nvar faCreativeCommonsPd = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd',\n  icon: [496, 512, [], \"f4ec\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"]\n};\nvar faCreativeCommonsPdAlt = {\n  prefix: 'fab',\n  iconName: 'creative-commons-pd-alt',\n  icon: [496, 512, [], \"f4ed\", \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"]\n};\nvar faCreativeCommonsRemix = {\n  prefix: 'fab',\n  iconName: 'creative-commons-remix',\n  icon: [496, 512, [], \"f4ee\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"]\n};\nvar faCreativeCommonsSa = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sa',\n  icon: [496, 512, [], \"f4ef\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"]\n};\nvar faCreativeCommonsSampling = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling',\n  icon: [496, 512, [], \"f4f0\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"]\n};\nvar faCreativeCommonsSamplingPlus = {\n  prefix: 'fab',\n  iconName: 'creative-commons-sampling-plus',\n  icon: [496, 512, [], \"f4f1\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"]\n};\nvar faCreativeCommonsShare = {\n  prefix: 'fab',\n  iconName: 'creative-commons-share',\n  icon: [496, 512, [], \"f4f2\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"]\n};\nvar faCreativeCommonsZero = {\n  prefix: 'fab',\n  iconName: 'creative-commons-zero',\n  icon: [496, 512, [], \"f4f3\", \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"]\n};\nvar faCriticalRole = {\n  prefix: 'fab',\n  iconName: 'critical-role',\n  icon: [448, 512, [], \"f6c9\", \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"]\n};\nvar faCss3 = {\n  prefix: 'fab',\n  iconName: 'css3',\n  icon: [512, 512, [], \"f13c\", \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"]\n};\nvar faCss3Alt = {\n  prefix: 'fab',\n  iconName: 'css3-alt',\n  icon: [384, 512, [], \"f38b\", \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"]\n};\nvar faCuttlefish = {\n  prefix: 'fab',\n  iconName: 'cuttlefish',\n  icon: [440, 512, [], \"f38c\", \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"]\n};\nvar faDAndD = {\n  prefix: 'fab',\n  iconName: 'd-and-d',\n  icon: [576, 512, [], \"f38d\", \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"]\n};\nvar faDAndDBeyond = {\n  prefix: 'fab',\n  iconName: 'd-and-d-beyond',\n  icon: [640, 512, [], \"f6ca\", \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"]\n};\nvar faDashcube = {\n  prefix: 'fab',\n  iconName: 'dashcube',\n  icon: [448, 512, [], \"f210\", \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"]\n};\nvar faDelicious = {\n  prefix: 'fab',\n  iconName: 'delicious',\n  icon: [448, 512, [], \"f1a5\", \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"]\n};\nvar faDeploydog = {\n  prefix: 'fab',\n  iconName: 'deploydog',\n  icon: [512, 512, [], \"f38e\", \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"]\n};\nvar faDeskpro = {\n  prefix: 'fab',\n  iconName: 'deskpro',\n  icon: [480, 512, [], \"f38f\", \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"]\n};\nvar faDev = {\n  prefix: 'fab',\n  iconName: 'dev',\n  icon: [448, 512, [], \"f6cc\", \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"]\n};\nvar faDeviantart = {\n  prefix: 'fab',\n  iconName: 'deviantart',\n  icon: [320, 512, [], \"f1bd\", \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"]\n};\nvar faDhl = {\n  prefix: 'fab',\n  iconName: 'dhl',\n  icon: [640, 512, [], \"f790\", \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"]\n};\nvar faDiaspora = {\n  prefix: 'fab',\n  iconName: 'diaspora',\n  icon: [512, 512, [], \"f791\", \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"]\n};\nvar faDigg = {\n  prefix: 'fab',\n  iconName: 'digg',\n  icon: [512, 512, [], \"f1a6\", \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"]\n};\nvar faDigitalOcean = {\n  prefix: 'fab',\n  iconName: 'digital-ocean',\n  icon: [512, 512, [], \"f391\", \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"]\n};\nvar faDiscord = {\n  prefix: 'fab',\n  iconName: 'discord',\n  icon: [448, 512, [], \"f392\", \"M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z\"]\n};\nvar faDiscourse = {\n  prefix: 'fab',\n  iconName: 'discourse',\n  icon: [448, 512, [], \"f393\", \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"]\n};\nvar faDochub = {\n  prefix: 'fab',\n  iconName: 'dochub',\n  icon: [416, 512, [], \"f394\", \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"]\n};\nvar faDocker = {\n  prefix: 'fab',\n  iconName: 'docker',\n  icon: [640, 512, [], \"f395\", \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"]\n};\nvar faDraft2digital = {\n  prefix: 'fab',\n  iconName: 'draft2digital',\n  icon: [480, 512, [], \"f396\", \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"]\n};\nvar faDribbble = {\n  prefix: 'fab',\n  iconName: 'dribbble',\n  icon: [512, 512, [], \"f17d\", \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"]\n};\nvar faDribbbleSquare = {\n  prefix: 'fab',\n  iconName: 'dribbble-square',\n  icon: [448, 512, [], \"f397\", \"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"]\n};\nvar faDropbox = {\n  prefix: 'fab',\n  iconName: 'dropbox',\n  icon: [528, 512, [], \"f16b\", \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"]\n};\nvar faDrupal = {\n  prefix: 'fab',\n  iconName: 'drupal',\n  icon: [448, 512, [], \"f1a9\", \"M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z\"]\n};\nvar faDyalog = {\n  prefix: 'fab',\n  iconName: 'dyalog',\n  icon: [416, 512, [], \"f399\", \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"]\n};\nvar faEarlybirds = {\n  prefix: 'fab',\n  iconName: 'earlybirds',\n  icon: [480, 512, [], \"f39a\", \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"]\n};\nvar faEbay = {\n  prefix: 'fab',\n  iconName: 'ebay',\n  icon: [640, 512, [], \"f4f4\", \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"]\n};\nvar faEdge = {\n  prefix: 'fab',\n  iconName: 'edge',\n  icon: [512, 512, [], \"f282\", \"M25.714 228.163c.111-.162.23-.323.342-.485-.021.162-.045.323-.065.485h-.277zm460.572 15.508c0-44.032-7.754-84.465-28.801-122.405C416.498 47.879 343.912 8.001 258.893 8.001 118.962 7.724 40.617 113.214 26.056 227.679c42.429-61.312 117.073-121.376 220.375-124.966 0 0 109.666 0 99.419 104.957H169.997c6.369-37.386 18.554-58.986 34.339-78.926-75.048 34.893-121.85 96.096-120.742 188.315.83 71.448 50.124 144.836 120.743 171.976 83.357 31.847 192.776 7.2 240.132-21.324V363.307c-80.864 56.494-270.871 60.925-272.255-67.572h314.073v-52.064z\"]\n};\nvar faElementor = {\n  prefix: 'fab',\n  iconName: 'elementor',\n  icon: [448, 512, [], \"f430\", \"M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z\"]\n};\nvar faEllo = {\n  prefix: 'fab',\n  iconName: 'ello',\n  icon: [496, 512, [], \"f5f1\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"]\n};\nvar faEmber = {\n  prefix: 'fab',\n  iconName: 'ember',\n  icon: [640, 512, [], \"f423\", \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"]\n};\nvar faEmpire = {\n  prefix: 'fab',\n  iconName: 'empire',\n  icon: [496, 512, [], \"f1d1\", \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"]\n};\nvar faEnvira = {\n  prefix: 'fab',\n  iconName: 'envira',\n  icon: [448, 512, [], \"f299\", \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"]\n};\nvar faErlang = {\n  prefix: 'fab',\n  iconName: 'erlang',\n  icon: [640, 512, [], \"f39d\", \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"]\n};\nvar faEthereum = {\n  prefix: 'fab',\n  iconName: 'ethereum',\n  icon: [320, 512, [], \"f42e\", \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"]\n};\nvar faEtsy = {\n  prefix: 'fab',\n  iconName: 'etsy',\n  icon: [384, 512, [], \"f2d7\", \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"]\n};\nvar faEvernote = {\n  prefix: 'fab',\n  iconName: 'evernote',\n  icon: [384, 512, [], \"f839\", \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"]\n};\nvar faExpeditedssl = {\n  prefix: 'fab',\n  iconName: 'expeditedssl',\n  icon: [496, 512, [], \"f23e\", \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"]\n};\nvar faFacebook = {\n  prefix: 'fab',\n  iconName: 'facebook',\n  icon: [512, 512, [], \"f09a\", \"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"]\n};\nvar faFacebookF = {\n  prefix: 'fab',\n  iconName: 'facebook-f',\n  icon: [320, 512, [], \"f39e\", \"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\"]\n};\nvar faFacebookMessenger = {\n  prefix: 'fab',\n  iconName: 'facebook-messenger',\n  icon: [448, 512, [], \"f39f\", \"M224.5 32C98 32 0 124.44 0 249.29 0 314.6 26.83 371 70.51 410c7.55 6.78 6 10.71 7.27 52.6A18 18 0 0 0 103 478.47c47.8-21 48.41-22.71 56.51-20.5C297.93 496.08 448 407.47 448 249.29 448 124.44 351 32 224.5 32zm134.79 167.21l-66 104.39a33.75 33.75 0 0 1-48.69 9l-52.4-39.29a13.49 13.49 0 0 0-16.21.05L105.16 327c-9.44 7.17-21.82-4.15-15.45-14.15l66-104.39a33.76 33.76 0 0 1 48.69-9l52.45 39.26a13.51 13.51 0 0 0 16.22 0l70.82-53.64c9.39-7.19 21.77 4.13 15.4 14.13z\"]\n};\nvar faFacebookSquare = {\n  prefix: 'fab',\n  iconName: 'facebook-square',\n  icon: [448, 512, [], \"f082\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z\"]\n};\nvar faFantasyFlightGames = {\n  prefix: 'fab',\n  iconName: 'fantasy-flight-games',\n  icon: [512, 512, [], \"f6dc\", \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99a42569.01 42569.01 0 0 1-41.13-40.72zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"]\n};\nvar faFedex = {\n  prefix: 'fab',\n  iconName: 'fedex',\n  icon: [640, 512, [], \"f797\", \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"]\n};\nvar faFedora = {\n  prefix: 'fab',\n  iconName: 'fedora',\n  icon: [448, 512, [], \"f798\", \"M225 32C101.3 31.7.8 131.7.4 255.4L0 425.7a53.6 53.6 0 0 0 53.6 53.9l170.2.4c123.7.3 224.3-99.7 224.6-223.4S348.7 32.3 225 32zm169.8 157.2L333 126.6c2.3-4.7 3.8-9.2 3.8-14.3v-1.6l55.2 56.1a101 101 0 0 1 2.8 22.4zM331 94.3a106.06 106.06 0 0 1 58.5 63.8l-54.3-54.6a26.48 26.48 0 0 0-4.2-9.2zM118.1 247.2a49.66 49.66 0 0 0-7.7 11.4l-8.5-8.5a85.78 85.78 0 0 1 16.2-2.9zM97 251.4l11.8 11.9-.9 8a34.74 34.74 0 0 0 2.4 12.5l-27-27.2a80.6 80.6 0 0 1 13.7-5.2zm-18.2 7.4l38.2 38.4a53.17 53.17 0 0 0-14.1 4.7L67.6 266a107 107 0 0 1 11.2-7.2zm-15.2 9.8l35.3 35.5a67.25 67.25 0 0 0-10.5 8.5L53.5 278a64.33 64.33 0 0 1 10.1-9.4zm-13.3 12.3l34.9 35a56.84 56.84 0 0 0-7.7 11.4l-35.8-35.9c2.8-3.8 5.7-7.2 8.6-10.5zm-11 14.3l36.4 36.6a48.29 48.29 0 0 0-3.6 15.2l-39.5-39.8a99.81 99.81 0 0 1 6.7-12zm-8.8 16.3l41.3 41.8a63.47 63.47 0 0 0 6.7 26.2L25.8 326c1.4-4.9 2.9-9.6 4.7-14.5zm-7.9 43l61.9 62.2a31.24 31.24 0 0 0-3.6 14.3v1.1l-55.4-55.7a88.27 88.27 0 0 1-2.9-21.9zm5.3 30.7l54.3 54.6a28.44 28.44 0 0 0 4.2 9.2 106.32 106.32 0 0 1-58.5-63.8zm-5.3-37a80.69 80.69 0 0 1 2.1-17l72.2 72.5a37.59 37.59 0 0 0-9.9 8.7zm253.3-51.8l-42.6-.1-.1 56c-.2 69.3-64.4 115.8-125.7 102.9-5.7 0-19.9-8.7-19.9-24.2a24.89 24.89 0 0 1 24.5-24.6c6.3 0 6.3 1.6 15.7 1.6a55.91 55.91 0 0 0 56.1-55.9l.1-47c0-4.5-4.5-9-8.9-9l-33.6-.1c-32.6-.1-32.5-49.4.1-49.3l42.6.1.1-56a105.18 105.18 0 0 1 105.6-105 86.35 86.35 0 0 1 20.2 2.3c11.2 1.8 19.9 11.9 19.9 24 0 15.5-14.9 27.8-30.3 23.9-27.4-5.9-65.9 14.4-66 54.9l-.1 47a8.94 8.94 0 0 0 8.9 9l33.6.1c32.5.2 32.4 49.5-.2 49.4zm23.5-.3a35.58 35.58 0 0 0 7.6-11.4l8.5 8.5a102 102 0 0 1-16.1 2.9zm21-4.2L308.6 280l.9-8.1a34.74 34.74 0 0 0-2.4-12.5l27 27.2a74.89 74.89 0 0 1-13.7 5.3zm18-7.4l-38-38.4c4.9-1.1 9.6-2.4 13.7-4.7l36.2 35.9c-3.8 2.5-7.9 5-11.9 7.2zm15.5-9.8l-35.3-35.5a61.06 61.06 0 0 0 10.5-8.5l34.9 35a124.56 124.56 0 0 1-10.1 9zm13.2-12.3l-34.9-35a63.18 63.18 0 0 0 7.7-11.4l35.8 35.9a130.28 130.28 0 0 1-8.6 10.5zm11-14.3l-36.4-36.6a48.29 48.29 0 0 0 3.6-15.2l39.5 39.8a87.72 87.72 0 0 1-6.7 12zm13.5-30.9a140.63 140.63 0 0 1-4.7 14.3L345.6 190a58.19 58.19 0 0 0-7.1-26.2zm1-5.6l-71.9-72.1a32 32 0 0 0 9.9-9.2l64.3 64.7a90.93 90.93 0 0 1-2.3 16.6z\"]\n};\nvar faFigma = {\n  prefix: 'fab',\n  iconName: 'figma',\n  icon: [384, 512, [], \"f799\", \"M277 170.7A85.35 85.35 0 0 0 277 0H106.3a85.3 85.3 0 0 0 0 170.6 85.35 85.35 0 0 0 0 170.7 85.35 85.35 0 1 0 85.3 85.4v-256zm0 0a85.3 85.3 0 1 0 85.3 85.3 85.31 85.31 0 0 0-85.3-85.3z\"]\n};\nvar faFirefox = {\n  prefix: 'fab',\n  iconName: 'firefox',\n  icon: [480, 512, [], \"f269\", \"M478.1 235.3c-.7-4.5-1.4-7.1-1.4-7.1s-1.8 2-4.7 5.9c-.9-10.7-2.8-21.2-5.8-31.6-3.7-12.9-8.5-25.4-14.5-37.4-3.8-8-8.2-15.6-13.3-22.8-1.8-2.7-3.7-5.4-5.6-7.9-8.8-14.4-19-23.3-30.7-40-7.6-12.8-12.9-26.9-15.4-41.6-3.2 8.9-5.7 18-7.4 27.3-12.1-12.2-22.5-20.8-28.9-26.7C319.4 24.2 323 9.1 323 9.1S264.7 74.2 289.9 142c8.7 23 23.8 43.1 43.4 57.9 24.4 20.2 50.8 36 64.7 76.6-11.2-21.3-28.1-39.2-48.8-51.5 6.2 14.7 9.4 30.6 9.3 46.5 0 61-49.6 110.5-110.6 110.4-8.3 0-16.5-.9-24.5-2.8-9.5-1.8-18.7-4.9-27.4-9.3-12.9-7.8-24-18.1-32.8-30.3l-.2-.3 2 .7c4.6 1.6 9.2 2.8 14 3.7 18.7 4 38.3 1.7 55.6-6.6 17.5-9.7 28-16.9 36.6-14h.2c8.4 2.7 15-5.5 9-14-10.4-13.4-27.4-20-44.2-17-17.5 2.5-33.5 15-56.4 2.9-1.5-.8-2.9-1.6-4.3-2.5-1.6-.9 4.9 1.3 3.4.3-5-2.5-9.8-5.4-14.4-8.6-.3-.3 3.5 1.1 3.1.8-5.9-4-11-9.2-15-15.2-4.1-7.4-4.5-16.4-1-24.1 2.1-3.8 5.4-6.9 9.3-8.7 3 1.5 4.8 2.6 4.8 2.6s-1.3-2.5-2.1-3.8c.3-.1.5 0 .8-.2 2.6 1.1 8.3 4 11.4 5.8 2.1 1.1 3.8 2.7 5.2 4.7 0 0 1-.5.3-2.7-1.1-2.7-2.9-5-5.4-6.6h.2c2.3 1.2 4.5 2.6 6.6 4.1 1.9-4.4 2.8-9.2 2.6-14 .2-2.6-.2-5.3-1.1-7.8-.8-1.6.5-2.2 1.9-.5-.2-1.3-.7-2.5-1.2-3.7v-.1s.8-1.1 1.2-1.5c1-1 2.1-1.9 3.4-2.7 7.2-4.5 14.8-8.4 22.7-11.6 6.4-2.8 11.7-4.9 12.8-5.6 1.6-1 3.1-2.2 4.5-3.5 5.3-4.5 9-10.8 10.2-17.7.1-.9.2-1.8.3-2.8v-1.5c-.9-3.5-6.9-6.1-38.4-9.1-11.1-1.8-20-10.1-22.5-21.1v-.1c6-15.7 16.8-29.1 30.8-38.3.8-.7-3.2.2-2.4-.5 2.7-1.3 5.4-2.5 8.2-3.5 1.4-.6-6-3.4-12.6-2.7-4 .2-8 1.2-11.7 2.8 1.6-1.3 6.2-3.1 5.1-3.1-8.4 1.6-16.5 4.7-23.9 9 0-.8.1-1.5.5-2.2-5.9 2.5-11 6.5-15 11.5.1-.9.2-1.8.2-2.7-2.7 2-5.2 4.3-7.3 6.9l-.1.1c-17.4-6.7-36.3-8.3-54.6-4.7l-.2-.1h.2c-3.8-3.1-7.1-6.7-9.7-10.9l-.2.1-.4-.2c-1.2-1.8-2.4-3.8-3.7-6-.9-1.6-1.8-3.4-2.7-5.2 0-.1-.1-.2-.2-.2-.4 0-.6 1.7-.9 1.3v-.1c-3.2-8.3-4.7-17.2-4.4-26.2l-.2.1c-5.1 3.5-9 8.6-11.1 14.5-.9 2.1-1.6 3.3-2.2 4.5v-.5c.1-1.1.6-3.3.5-3.1s-.2.3-.3.4c-1.5 1.7-2.9 3.7-3.9 5.8-.9 1.9-1.7 3.9-2.3 5.9-.1.3 0-.3 0-1s.1-2 0-1.7l-.3.7c-6.7 14.9-10.9 30.8-12.4 47.1-.4 2.8-.6 5.6-.5 8.3v.2c-4.8 5.2-9 11-12.7 17.1-12.1 20.4-21.1 42.5-26.8 65.6 4-8.8 8.8-17.2 14.3-25.1C5.5 228.5 0 257.4 0 286.6c1.8-8.6 4.2-17 7-25.3-1.7 34.5 4.9 68.9 19.4 100.3 19.4 43.5 51.6 80 92.3 104.7 16.6 11.2 34.7 19.9 53.8 25.8 2.5.9 5.1 1.8 7.7 2.7-.8-.3-1.6-.7-2.4-1 22.6 6.8 46.2 10.3 69.8 10.3 83.7 0 111.3-31.9 113.8-35 4.1-3.7 7.5-8.2 9.9-13.3 1.6-.7 3.2-1.4 4.9-2.1l1-.5 1.9-.9c12.6-5.9 24.5-13.4 35.3-22.1 16.3-11.7 27.9-28.7 32.9-48.1 3-7.1 3.1-15 .4-22.2.9-1.4 1.7-2.8 2.7-4.3 18-28.9 28.2-61.9 29.6-95.9v-2.8c0-7.3-.6-14.5-1.9-21.6zm-299-97.6c-.4 1.1-.9 2.3-1.3 3.5.4-1.2.8-2.3 1.3-3.5z\"]\n};\nvar faFirstOrder = {\n  prefix: 'fab',\n  iconName: 'first-order',\n  icon: [448, 512, [], \"f2b0\", \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"]\n};\nvar faFirstOrderAlt = {\n  prefix: 'fab',\n  iconName: 'first-order-alt',\n  icon: [496, 512, [], \"f50a\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"]\n};\nvar faFirstdraft = {\n  prefix: 'fab',\n  iconName: 'firstdraft',\n  icon: [384, 512, [], \"f3a1\", \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"]\n};\nvar faFlickr = {\n  prefix: 'fab',\n  iconName: 'flickr',\n  icon: [448, 512, [], \"f16e\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"]\n};\nvar faFlipboard = {\n  prefix: 'fab',\n  iconName: 'flipboard',\n  icon: [448, 512, [], \"f44d\", \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"]\n};\nvar faFly = {\n  prefix: 'fab',\n  iconName: 'fly',\n  icon: [384, 512, [], \"f417\", \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"]\n};\nvar faFontAwesome = {\n  prefix: 'fab',\n  iconName: 'font-awesome',\n  icon: [448, 512, [], \"f2b4\", \"M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z\"]\n};\nvar faFontAwesomeAlt = {\n  prefix: 'fab',\n  iconName: 'font-awesome-alt',\n  icon: [448, 512, [], \"f35c\", \"M339.3 171.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1zM397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm14.3 397.7c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6v-.1c7.8 0 14.3 6.6 14.3 14.3z\"]\n};\nvar faFontAwesomeFlag = {\n  prefix: 'fab',\n  iconName: 'font-awesome-flag',\n  icon: [448, 512, [], \"f425\", \"M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z\"]\n};\nvar faFontAwesomeLogoFull = {\n  prefix: 'fab',\n  iconName: 'font-awesome-logo-full',\n  icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFonticons = {\n  prefix: 'fab',\n  iconName: 'fonticons',\n  icon: [448, 512, [], \"f280\", \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"]\n};\nvar faFonticonsFi = {\n  prefix: 'fab',\n  iconName: 'fonticons-fi',\n  icon: [384, 512, [], \"f3a2\", \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"]\n};\nvar faFortAwesome = {\n  prefix: 'fab',\n  iconName: 'fort-awesome',\n  icon: [512, 512, [], \"f286\", \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"]\n};\nvar faFortAwesomeAlt = {\n  prefix: 'fab',\n  iconName: 'fort-awesome-alt',\n  icon: [512, 512, [], \"f3a3\", \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"]\n};\nvar faForumbee = {\n  prefix: 'fab',\n  iconName: 'forumbee',\n  icon: [448, 512, [], \"f211\", \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"]\n};\nvar faFoursquare = {\n  prefix: 'fab',\n  iconName: 'foursquare',\n  icon: [368, 512, [], \"f180\", \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"]\n};\nvar faFreeCodeCamp = {\n  prefix: 'fab',\n  iconName: 'free-code-camp',\n  icon: [576, 512, [], \"f2c5\", \"M69.3 144.5c-41 68.5-36.4 163 1 227C92.5 409.7 120 423.9 120 438c0 6.8-6 13-12.8 13C87.7 451 8 375.5 8 253.2c0-111.5 78-186 97.1-186 6 0 14.9 4.8 14.9 11.1 0 12.7-28.3 28.6-50.7 66.2zm195.8 213.8c4.5 1.8 12.3 5.2 12.3-1.2 0-2.7-2.2-2.9-4.3-3.6-8.5-3.4-14-7.7-19.1-15.2-8.2-12.1-10.1-24.2-10.1-38.6 0-32.1 44.2-37.9 44.2-70 0-12.3-7.7-15.9-7.7-19.3 0-2.2.7-2.2 2.9-2.2 8 0 19.1 13.3 22.5 19.8 2.2 4.6 2.4 6 2.4 11.1 0 7-.7 14.2-.7 21.3 0 27 31.9 19.8 31.9 6.8 0-6-3.6-11.6-3.6-17.4 0-.7 0-1.2.7-1.2 3.4 0 9.4 7.7 11.1 10.1 5.8 8.9 8.5 20.8 8.5 31.4 0 32.4-29.5 49-29.5 56 0 1 2.9 7.7 12.1 1.9 29.7-15.1 53.1-47.6 53.1-89.8 0-33.6-8.7-57.7-32.1-82.6-3.9-4.1-16.4-16.9-22.5-16.9-8.2 0 7.2 18.6 7.2 31.2 0 7.2-4.8 12.3-12.3 12.3-11.6 0-14.5-25.4-15.9-33.3-5.8-33.8-12.8-58.2-46.4-74.1-10.4-5-36.5-11.8-36.5-2.2 0 2.4 2.7 4.1 4.6 5.1 9.2 5.6 19.6 21.4 19.6 38.2 0 46.1-57.7 88.2-57.7 136.2-.2 40.3 28.1 72.6 65.3 86.2zM470.4 67c-6 0-14.4 6.5-14.4 12.6 0 8.7 12.1 19.6 17.6 25.4 81.6 85.1 78.6 214.3 17.6 291-7 8.9-35.3 35.3-35.3 43.5 0 5.1 8.2 11.4 13.2 11.4 25.4 0 98.8-80.8 98.8-185.7C568 145.9 491.8 67 470.4 67zm-42.3 323.1H167c-9.4 0-15.5 7.5-15.5 16.4 0 8.5 7 15.5 15.5 15.5h261.1c9.4 0 11.9-7.5 11.9-16.4 0-8.5-3.5-15.5-11.9-15.5z\"]\n};\nvar faFreebsd = {\n  prefix: 'fab',\n  iconName: 'freebsd',\n  icon: [448, 512, [], \"f3a4\", \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"]\n};\nvar faFulcrum = {\n  prefix: 'fab',\n  iconName: 'fulcrum',\n  icon: [320, 512, [], \"f50b\", \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"]\n};\nvar faGalacticRepublic = {\n  prefix: 'fab',\n  iconName: 'galactic-republic',\n  icon: [496, 512, [], \"f50c\", \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"]\n};\nvar faGalacticSenate = {\n  prefix: 'fab',\n  iconName: 'galactic-senate',\n  icon: [512, 512, [], \"f50d\", \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"]\n};\nvar faGetPocket = {\n  prefix: 'fab',\n  iconName: 'get-pocket',\n  icon: [448, 512, [], \"f265\", \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"]\n};\nvar faGg = {\n  prefix: 'fab',\n  iconName: 'gg',\n  icon: [512, 512, [], \"f260\", \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"]\n};\nvar faGgCircle = {\n  prefix: 'fab',\n  iconName: 'gg-circle',\n  icon: [512, 512, [], \"f261\", \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"]\n};\nvar faGit = {\n  prefix: 'fab',\n  iconName: 'git',\n  icon: [512, 512, [], \"f1d3\", \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"]\n};\nvar faGitAlt = {\n  prefix: 'fab',\n  iconName: 'git-alt',\n  icon: [448, 512, [], \"f841\", \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"]\n};\nvar faGitSquare = {\n  prefix: 'fab',\n  iconName: 'git-square',\n  icon: [448, 512, [], \"f1d2\", \"M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\"]\n};\nvar faGithub = {\n  prefix: 'fab',\n  iconName: 'github',\n  icon: [496, 512, [], \"f09b\", \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"]\n};\nvar faGithubAlt = {\n  prefix: 'fab',\n  iconName: 'github-alt',\n  icon: [480, 512, [], \"f113\", \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"]\n};\nvar faGithubSquare = {\n  prefix: 'fab',\n  iconName: 'github-square',\n  icon: [448, 512, [], \"f092\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z\"]\n};\nvar faGitkraken = {\n  prefix: 'fab',\n  iconName: 'gitkraken',\n  icon: [592, 512, [], \"f3a6\", \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"]\n};\nvar faGitlab = {\n  prefix: 'fab',\n  iconName: 'gitlab',\n  icon: [512, 512, [], \"f296\", \"M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z\"]\n};\nvar faGitter = {\n  prefix: 'fab',\n  iconName: 'gitter',\n  icon: [384, 512, [], \"f426\", \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"]\n};\nvar faGlide = {\n  prefix: 'fab',\n  iconName: 'glide',\n  icon: [448, 512, [], \"f2a5\", \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"]\n};\nvar faGlideG = {\n  prefix: 'fab',\n  iconName: 'glide-g',\n  icon: [448, 512, [], \"f2a6\", \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"]\n};\nvar faGofore = {\n  prefix: 'fab',\n  iconName: 'gofore',\n  icon: [400, 512, [], \"f3a7\", \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"]\n};\nvar faGoodreads = {\n  prefix: 'fab',\n  iconName: 'goodreads',\n  icon: [448, 512, [], \"f3a8\", \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"]\n};\nvar faGoodreadsG = {\n  prefix: 'fab',\n  iconName: 'goodreads-g',\n  icon: [384, 512, [], \"f3a9\", \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"]\n};\nvar faGoogle = {\n  prefix: 'fab',\n  iconName: 'google',\n  icon: [488, 512, [], \"f1a0\", \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"]\n};\nvar faGoogleDrive = {\n  prefix: 'fab',\n  iconName: 'google-drive',\n  icon: [512, 512, [], \"f3aa\", \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"]\n};\nvar faGooglePlay = {\n  prefix: 'fab',\n  iconName: 'google-play',\n  icon: [512, 512, [], \"f3ab\", \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"]\n};\nvar faGooglePlus = {\n  prefix: 'fab',\n  iconName: 'google-plus',\n  icon: [496, 512, [], \"f2b3\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z\"]\n};\nvar faGooglePlusG = {\n  prefix: 'fab',\n  iconName: 'google-plus-g',\n  icon: [640, 512, [], \"f0d5\", \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"]\n};\nvar faGooglePlusSquare = {\n  prefix: 'fab',\n  iconName: 'google-plus-square',\n  icon: [448, 512, [], \"f0d4\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"]\n};\nvar faGoogleWallet = {\n  prefix: 'fab',\n  iconName: 'google-wallet',\n  icon: [448, 512, [], \"f1ee\", \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"]\n};\nvar faGratipay = {\n  prefix: 'fab',\n  iconName: 'gratipay',\n  icon: [496, 512, [], \"f184\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"]\n};\nvar faGrav = {\n  prefix: 'fab',\n  iconName: 'grav',\n  icon: [512, 512, [], \"f2d6\", \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"]\n};\nvar faGripfire = {\n  prefix: 'fab',\n  iconName: 'gripfire',\n  icon: [384, 512, [], \"f3ac\", \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"]\n};\nvar faGrunt = {\n  prefix: 'fab',\n  iconName: 'grunt',\n  icon: [384, 512, [], \"f3ad\", \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"]\n};\nvar faGulp = {\n  prefix: 'fab',\n  iconName: 'gulp',\n  icon: [256, 512, [], \"f3ae\", \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"]\n};\nvar faHackerNews = {\n  prefix: 'fab',\n  iconName: 'hacker-news',\n  icon: [448, 512, [], \"f1d4\", \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n};\nvar faHackerNewsSquare = {\n  prefix: 'fab',\n  iconName: 'hacker-news-square',\n  icon: [448, 512, [], \"f3af\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"]\n};\nvar faHackerrank = {\n  prefix: 'fab',\n  iconName: 'hackerrank',\n  icon: [512, 512, [], \"f5f7\", \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"]\n};\nvar faHips = {\n  prefix: 'fab',\n  iconName: 'hips',\n  icon: [640, 512, [], \"f452\", \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"]\n};\nvar faHireAHelper = {\n  prefix: 'fab',\n  iconName: 'hire-a-helper',\n  icon: [512, 512, [], \"f3b0\", \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"]\n};\nvar faHooli = {\n  prefix: 'fab',\n  iconName: 'hooli',\n  icon: [640, 512, [], \"f427\", \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"]\n};\nvar faHornbill = {\n  prefix: 'fab',\n  iconName: 'hornbill',\n  icon: [512, 512, [], \"f592\", \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"]\n};\nvar faHotjar = {\n  prefix: 'fab',\n  iconName: 'hotjar',\n  icon: [448, 512, [], \"f3b1\", \"M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z\"]\n};\nvar faHouzz = {\n  prefix: 'fab',\n  iconName: 'houzz',\n  icon: [448, 512, [], \"f27c\", \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"]\n};\nvar faHtml5 = {\n  prefix: 'fab',\n  iconName: 'html5',\n  icon: [384, 512, [], \"f13b\", \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"]\n};\nvar faHubspot = {\n  prefix: 'fab',\n  iconName: 'hubspot',\n  icon: [512, 512, [], \"f3b2\", \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"]\n};\nvar faImdb = {\n  prefix: 'fab',\n  iconName: 'imdb',\n  icon: [448, 512, [], \"f2d8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.3 229.2H21c.1-.1.2-.3.3-.4zM97 319.8H64V192h33zm113.2 0h-28.7v-86.4l-11.6 86.4h-20.6l-12.2-84.5v84.5h-29V192h42.8c3.3 19.8 6 39.9 8.7 59.9l7.6-59.9h43zm11.4 0V192h24.6c17.6 0 44.7-1.6 49 20.9 1.7 7.6 1.4 16.3 1.4 24.4 0 88.5 11.1 82.6-75 82.5zm160.9-29.2c0 15.7-2.4 30.9-22.2 30.9-9 0-15.2-3-20.9-9.8l-1.9 8.1h-29.8V192h31.7v41.7c6-6.5 12-9.2 20.9-9.2 21.4 0 22.2 12.8 22.2 30.1zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4zm85.5 26.1c0-5.4 1.1-12.7-6.2-12.7-6 0-4.9 8.9-4.9 12.7 0 .6-1.1 39.6 1.1 44.7.8 1.6 2.2 2.4 3.8 2.4 7.8 0 6.2-9 6.2-14.4z\"]\n};\nvar faInstagram = {\n  prefix: 'fab',\n  iconName: 'instagram',\n  icon: [448, 512, [], \"f16d\", \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"]\n};\nvar faIntercom = {\n  prefix: 'fab',\n  iconName: 'intercom',\n  icon: [448, 512, [], \"f7af\", \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"]\n};\nvar faInternetExplorer = {\n  prefix: 'fab',\n  iconName: 'internet-explorer',\n  icon: [512, 512, [], \"f26b\", \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"]\n};\nvar faInvision = {\n  prefix: 'fab',\n  iconName: 'invision',\n  icon: [448, 512, [], \"f7b0\", \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"]\n};\nvar faIoxhost = {\n  prefix: 'fab',\n  iconName: 'ioxhost',\n  icon: [640, 512, [], \"f208\", \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"]\n};\nvar faItchIo = {\n  prefix: 'fab',\n  iconName: 'itch-io',\n  icon: [512, 512, [], \"f83a\", \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"]\n};\nvar faItunes = {\n  prefix: 'fab',\n  iconName: 'itunes',\n  icon: [448, 512, [], \"f3b4\", \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"]\n};\nvar faItunesNote = {\n  prefix: 'fab',\n  iconName: 'itunes-note',\n  icon: [384, 512, [], \"f3b5\", \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"]\n};\nvar faJava = {\n  prefix: 'fab',\n  iconName: 'java',\n  icon: [384, 512, [], \"f4e4\", \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"]\n};\nvar faJediOrder = {\n  prefix: 'fab',\n  iconName: 'jedi-order',\n  icon: [448, 512, [], \"f50e\", \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"]\n};\nvar faJenkins = {\n  prefix: 'fab',\n  iconName: 'jenkins',\n  icon: [512, 512, [], \"f3b6\", \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"]\n};\nvar faJira = {\n  prefix: 'fab',\n  iconName: 'jira',\n  icon: [496, 512, [], \"f7b1\", \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"]\n};\nvar faJoget = {\n  prefix: 'fab',\n  iconName: 'joget',\n  icon: [496, 512, [], \"f3b7\", \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"]\n};\nvar faJoomla = {\n  prefix: 'fab',\n  iconName: 'joomla',\n  icon: [448, 512, [], \"f1aa\", \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"]\n};\nvar faJs = {\n  prefix: 'fab',\n  iconName: 'js',\n  icon: [448, 512, [], \"f3b8\", \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n};\nvar faJsSquare = {\n  prefix: 'fab',\n  iconName: 'js-square',\n  icon: [448, 512, [], \"f3b9\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"]\n};\nvar faJsfiddle = {\n  prefix: 'fab',\n  iconName: 'jsfiddle',\n  icon: [576, 512, [], \"f1cc\", \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"]\n};\nvar faKaggle = {\n  prefix: 'fab',\n  iconName: 'kaggle',\n  icon: [320, 512, [], \"f5fa\", \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"]\n};\nvar faKeybase = {\n  prefix: 'fab',\n  iconName: 'keybase',\n  icon: [448, 512, [], \"f4f5\", \"M195.21 430.7a17.8 17.8 0 1 1-17.8-17.8 17.84 17.84 0 0 1 17.8 17.8zM288 412.8a17.8 17.8 0 1 0 17.8 17.8 17.84 17.84 0 0 0-17.8-17.8zm142.3-36c0 38.9-7.6 73.9-22.2 103h-27.3c23.5-38.7 30.5-94.8 22.4-134.3-16.1 29.5-52.1 38.6-85.9 28.8-127.8-37.5-192.5 19.7-234.6 50.3l18.9-59.3-39.9 42.3a173.31 173.31 0 0 0 31.2 72.3H64.11a197.27 197.27 0 0 1-22.2-51.3l-23.8 25.2c0-74.9-5.5-147.6 61.5-215.2a210.67 210.67 0 0 1 69.1-46.7c-6.8-13.5-9.5-29.2-7.8-46L121 144.7a32.68 32.68 0 0 1-30.6-34.4v-.1L92 84a32.75 32.75 0 0 1 32.5-30.6c1.3 0-.3-.1 28.2 1.7a32 32 0 0 1 22.8 11.4C182.61 56.1 190 46 200.11 32l20.6 12.1c-13.6 29-9.1 36.2-9 36.3 3.9 0 13.9-.5 32.4 5.7a76.19 76.19 0 0 1 46.1 102.3c19 6.1 51.3 19.9 82.4 51.8 36.6 37.6 57.7 87.4 57.7 136.6zM146 122.1a162.36 162.36 0 0 1 13.1-29.4c.1-2 2.2-13.1-7.8-13.8-28.5-1.8-26.3-1.6-26.7-1.6a8.57 8.57 0 0 0-8.6 8.1l-1.6 26.2a8.68 8.68 0 0 0 8.1 9.1zm25.8 61.8a52.3 52.3 0 0 0 22.3 20c0-21.2 28.5-41.9 52.8-17.5l8.4 10.3c20.8-18.8 19.4-45.3 12.1-60.9-13.8-29.1-46.9-32-54.3-31.7a24.24 24.24 0 0 1-23.7-15.3c-13.69 21.2-37.19 62.5-17.59 95.1zm82.9 68.4L235 268.4a4.46 4.46 0 0 0-.6 6.3l8.9 10.9a4.48 4.48 0 0 0 6.3.6l19.6-16 5.5 6.8c4.9 6 13.8-1.4 9-7.3-63.6-78.3-41.5-51.1-55.3-68.1-4.7-6-13.9 1.4-9 7.3 1.9 2.3 18.4 22.6 19.8 24.3l-9.6 7.9c-4.6 3.8 2.6 13.3 7.4 9.4l9.7-8 8 9.8zM373.11 278c-16.9-23.7-42.6-46.7-73.4-60.4a213.21 213.21 0 0 0-22.9-8.6 62.47 62.47 0 0 1-6.4 6.2l31.9 39.2a29.81 29.81 0 0 1-4.2 41.9c-1.3 1.1-13.1 10.7-29 4.9-2.9 2.3-10.1 9.9-22.2 9.9a28.42 28.42 0 0 1-22.1-10.5l-8.9-10.9a28.52 28.52 0 0 1-5-26.8 28.56 28.56 0 0 1-4.6-30c-7.2-1.3-26.7-6.2-42.7-21.4-55.8 20.7-88 64.4-101.3 91.2-14.9 30.2-18.8 60.9-19.9 90.2 8.2-8.7-3.9 4.1 114-120.9l-29.9 93.6c57.8-31.1 124-36 197.4-14.4 23.6 6.9 45.1 1.6 56-13.9 11.1-15.6 8.5-37.7-6.8-59.3zm-244.5-170.9l15.6 1 1-15.6-15.6-1z\"]\n};\nvar faKeycdn = {\n  prefix: 'fab',\n  iconName: 'keycdn',\n  icon: [512, 512, [], \"f3ba\", \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"]\n};\nvar faKickstarter = {\n  prefix: 'fab',\n  iconName: 'kickstarter',\n  icon: [448, 512, [], \"f3bb\", \"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"]\n};\nvar faKickstarterK = {\n  prefix: 'fab',\n  iconName: 'kickstarter-k',\n  icon: [384, 512, [], \"f3bc\", \"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"]\n};\nvar faKorvue = {\n  prefix: 'fab',\n  iconName: 'korvue',\n  icon: [446, 512, [], \"f42f\", \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"]\n};\nvar faLaravel = {\n  prefix: 'fab',\n  iconName: 'laravel',\n  icon: [640, 512, [], \"f3bd\", \"M637.5 241.6c-4.2-4.8-62.8-78.1-73.1-90.5-10.3-12.4-15.4-10.2-21.7-9.3-6.4.9-80.5 13.4-89.1 14.8-8.6 1.5-14 4.9-8.7 12.3 4.7 6.6 53.4 75.7 64.2 90.9l-193.7 46.4L161.2 48.7c-6.1-9.1-7.4-12.3-21.4-11.6-14 .6-120.9 9.5-128.5 10.2-7.6.6-16 4-8.4 22s129 279.6 132.4 287.2c3.4 7.6 12.2 20 32.8 15 21.1-5.1 94.3-24.2 134.3-34.7 21.1 38.3 64.2 115.9 72.2 127 10.6 14.9 18 12.4 34.3 7.4 12.8-3.9 199.6-71.1 208-74.5 8.4-3.5 13.6-5.9 7.9-14.4-4.2-6.2-53.5-72.2-79.3-106.8 17.7-4.7 80.6-21.4 87.3-23.3 7.9-2 9-5.8 4.7-10.6zm-352.2 72c-2.3.5-110.8 26.5-116.6 27.8-5.8 1.3-5.8.7-6.5-1.3-.7-2-129-266.7-130.8-270-1.8-3.3-1.7-5.9 0-5.9s102.5-9 106-9.2c3.6-.2 3.2.6 4.5 2.8 0 0 142.2 245.4 144.6 249.7 2.6 4.3 1.1 5.6-1.2 6.1zm306 57.4c1.7 2.7 3.5 4.5-2 6.4-5.4 2-183.7 62.1-187.1 63.6-3.5 1.5-6.2 2-10.6-4.5s-62.4-106.8-62.4-106.8L518 280.6c4.7-1.5 6.2-2.5 9.2 2.2 2.9 4.8 62.4 85.5 64.1 88.2zm12.1-134.1c-4.2.9-73.6 18.1-73.6 18.1l-56.7-77.8c-1.6-2.3-2.9-4.5 1.1-5s68.4-12.2 71.3-12.8c2.9-.7 5.4-1.5 9 3.4 3.6 4.9 52.6 67 54.5 69.4 1.8 2.3-1.4 3.7-5.6 4.7z\"]\n};\nvar faLastfm = {\n  prefix: 'fab',\n  iconName: 'lastfm',\n  icon: [512, 512, [], \"f202\", \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"]\n};\nvar faLastfmSquare = {\n  prefix: 'fab',\n  iconName: 'lastfm-square',\n  icon: [448, 512, [], \"f203\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z\"]\n};\nvar faLeanpub = {\n  prefix: 'fab',\n  iconName: 'leanpub',\n  icon: [576, 512, [], \"f212\", \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"]\n};\nvar faLess = {\n  prefix: 'fab',\n  iconName: 'less',\n  icon: [640, 512, [], \"f41d\", \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"]\n};\nvar faLine = {\n  prefix: 'fab',\n  iconName: 'line',\n  icon: [448, 512, [], \"f3c0\", \"M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z\"]\n};\nvar faLinkedin = {\n  prefix: 'fab',\n  iconName: 'linkedin',\n  icon: [448, 512, [], \"f08c\", \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"]\n};\nvar faLinkedinIn = {\n  prefix: 'fab',\n  iconName: 'linkedin-in',\n  icon: [448, 512, [], \"f0e1\", \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"]\n};\nvar faLinode = {\n  prefix: 'fab',\n  iconName: 'linode',\n  icon: [448, 512, [], \"f2b8\", \"M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z\"]\n};\nvar faLinux = {\n  prefix: 'fab',\n  iconName: 'linux',\n  icon: [448, 512, [], \"f17c\", \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"]\n};\nvar faLyft = {\n  prefix: 'fab',\n  iconName: 'lyft',\n  icon: [512, 512, [], \"f3c3\", \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"]\n};\nvar faMagento = {\n  prefix: 'fab',\n  iconName: 'magento',\n  icon: [448, 512, [], \"f3c4\", \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"]\n};\nvar faMailchimp = {\n  prefix: 'fab',\n  iconName: 'mailchimp',\n  icon: [448, 512, [], \"f59e\", \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"]\n};\nvar faMandalorian = {\n  prefix: 'fab',\n  iconName: 'mandalorian',\n  icon: [448, 512, [], \"f50f\", \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"]\n};\nvar faMarkdown = {\n  prefix: 'fab',\n  iconName: 'markdown',\n  icon: [640, 512, [], \"f60f\", \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"]\n};\nvar faMastodon = {\n  prefix: 'fab',\n  iconName: 'mastodon',\n  icon: [448, 512, [], \"f4f6\", \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"]\n};\nvar faMaxcdn = {\n  prefix: 'fab',\n  iconName: 'maxcdn',\n  icon: [512, 512, [], \"f136\", \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"]\n};\nvar faMedapps = {\n  prefix: 'fab',\n  iconName: 'medapps',\n  icon: [320, 512, [], \"f3c6\", \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"]\n};\nvar faMedium = {\n  prefix: 'fab',\n  iconName: 'medium',\n  icon: [448, 512, [], \"f23a\", \"M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z\"]\n};\nvar faMediumM = {\n  prefix: 'fab',\n  iconName: 'medium-m',\n  icon: [512, 512, [], \"f3c7\", \"M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z\"]\n};\nvar faMedrt = {\n  prefix: 'fab',\n  iconName: 'medrt',\n  icon: [544, 512, [], \"f3c8\", \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"]\n};\nvar faMeetup = {\n  prefix: 'fab',\n  iconName: 'meetup',\n  icon: [512, 512, [], \"f2e0\", \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"]\n};\nvar faMegaport = {\n  prefix: 'fab',\n  iconName: 'megaport',\n  icon: [496, 512, [], \"f5a3\", \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"]\n};\nvar faMendeley = {\n  prefix: 'fab',\n  iconName: 'mendeley',\n  icon: [640, 512, [], \"f7b3\", \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"]\n};\nvar faMicrosoft = {\n  prefix: 'fab',\n  iconName: 'microsoft',\n  icon: [448, 512, [], \"f3ca\", \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"]\n};\nvar faMix = {\n  prefix: 'fab',\n  iconName: 'mix',\n  icon: [448, 512, [], \"f3cb\", \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"]\n};\nvar faMixcloud = {\n  prefix: 'fab',\n  iconName: 'mixcloud',\n  icon: [640, 512, [], \"f289\", \"M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z\"]\n};\nvar faMizuni = {\n  prefix: 'fab',\n  iconName: 'mizuni',\n  icon: [496, 512, [], \"f3cc\", \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"]\n};\nvar faModx = {\n  prefix: 'fab',\n  iconName: 'modx',\n  icon: [448, 512, [], \"f285\", \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"]\n};\nvar faMonero = {\n  prefix: 'fab',\n  iconName: 'monero',\n  icon: [496, 512, [], \"f3d0\", \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"]\n};\nvar faNapster = {\n  prefix: 'fab',\n  iconName: 'napster',\n  icon: [496, 512, [], \"f3d2\", \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"]\n};\nvar faNeos = {\n  prefix: 'fab',\n  iconName: 'neos',\n  icon: [512, 512, [], \"f612\", \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"]\n};\nvar faNimblr = {\n  prefix: 'fab',\n  iconName: 'nimblr',\n  icon: [384, 512, [], \"f5a8\", \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"]\n};\nvar faNintendoSwitch = {\n  prefix: 'fab',\n  iconName: 'nintendo-switch',\n  icon: [448, 512, [], \"f418\", \"M95.9 33.5c-44.6 8-80.5 41-91.8 84.4C0 133.6-.3 142.8.2 264.4.4 376 .5 378.6 2.4 387.3c10.3 46.5 43.3 79.6 90.3 90.5 6.1 1.4 13.9 1.7 64.1 1.9 51.9.4 57.3.3 58.7-1.1 1.4-1.4 1.5-19.3 1.5-222.2 0-150.5-.3-221.3-.9-222.6-.9-1.7-2.5-1.8-56.9-1.7-44.2.1-57.5.4-63.3 1.4zm83.9 222.6V444l-37.8-.5c-34.8-.4-38.5-.6-45.5-2.3-29.9-7.7-52-30.7-58.3-60.7-2-9.4-2-240.1-.1-249.3 5.6-26.1 23.7-47.7 48-57.4 12.2-4.9 17.9-5.5 57.6-5.6l35.9-.1v188zm-75.9-131.2c-5.8 1.1-14.7 5.6-19.5 9.7-9.7 8.4-14.6 20.4-13.8 34.5.4 7.3.8 9.3 3.8 15.2 4.4 9 10.9 15.6 19.9 20 6.2 3.1 7.8 3.4 15.9 3.7 7.3.3 9.9 0 14.8-1.7 20.1-6.8 32.3-26.3 28.8-46.4-3.9-23.7-26.6-39.7-49.9-35zm158.2-92.3c-.4.3-.6 100.8-.6 223.5 0 202.3.1 222.8 1.5 223.4 2.5.9 74.5.6 83.4-.4 37.7-4.3 71-27.2 89-61.2 2.3-4.4 5.4-11.7 7-16.2 5.8-17.4 5.7-12.8 5.7-146.1 0-106.4-.2-122.3-1.5-129-9.2-48.3-46.1-84.8-94.5-93.1-6.5-1.1-16.5-1.4-48.8-1.4-22.4-.1-40.9.2-41.2.5zm99.1 202.1c14.5 3.8 26.3 14.8 31.2 28.9 3.1 8.7 3 21.5-.1 29.5-5.7 14.7-16.8 25-31.1 28.8-23.2 6-47.9-8-54.6-31-2-7-1.9-18.9.4-26.2 6.9-22.7 31-36.1 54.2-30z\"]\n};\nvar faNode = {\n  prefix: 'fab',\n  iconName: 'node',\n  icon: [640, 512, [], \"f419\", \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"]\n};\nvar faNodeJs = {\n  prefix: 'fab',\n  iconName: 'node-js',\n  icon: [448, 512, [], \"f3d3\", \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"]\n};\nvar faNpm = {\n  prefix: 'fab',\n  iconName: 'npm',\n  icon: [576, 512, [], \"f3d4\", \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"]\n};\nvar faNs8 = {\n  prefix: 'fab',\n  iconName: 'ns8',\n  icon: [640, 512, [], \"f3d5\", \"M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z\"]\n};\nvar faNutritionix = {\n  prefix: 'fab',\n  iconName: 'nutritionix',\n  icon: [400, 512, [], \"f3d6\", \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"]\n};\nvar faOdnoklassniki = {\n  prefix: 'fab',\n  iconName: 'odnoklassniki',\n  icon: [320, 512, [], \"f263\", \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"]\n};\nvar faOdnoklassnikiSquare = {\n  prefix: 'fab',\n  iconName: 'odnoklassniki-square',\n  icon: [448, 512, [], \"f264\", \"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"]\n};\nvar faOldRepublic = {\n  prefix: 'fab',\n  iconName: 'old-republic',\n  icon: [496, 512, [], \"f510\", \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"]\n};\nvar faOpencart = {\n  prefix: 'fab',\n  iconName: 'opencart',\n  icon: [640, 512, [], \"f23d\", \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"]\n};\nvar faOpenid = {\n  prefix: 'fab',\n  iconName: 'openid',\n  icon: [448, 512, [], \"f19b\", \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"]\n};\nvar faOpera = {\n  prefix: 'fab',\n  iconName: 'opera',\n  icon: [496, 512, [], \"f26a\", \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"]\n};\nvar faOptinMonster = {\n  prefix: 'fab',\n  iconName: 'optin-monster',\n  icon: [576, 512, [], \"f23c\", \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"]\n};\nvar faOsi = {\n  prefix: 'fab',\n  iconName: 'osi',\n  icon: [512, 512, [], \"f41a\", \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"]\n};\nvar faPage4 = {\n  prefix: 'fab',\n  iconName: 'page4',\n  icon: [496, 512, [], \"f3d7\", \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"]\n};\nvar faPagelines = {\n  prefix: 'fab',\n  iconName: 'pagelines',\n  icon: [384, 512, [], \"f18c\", \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"]\n};\nvar faPalfed = {\n  prefix: 'fab',\n  iconName: 'palfed',\n  icon: [576, 512, [], \"f3d8\", \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"]\n};\nvar faPatreon = {\n  prefix: 'fab',\n  iconName: 'patreon',\n  icon: [512, 512, [], \"f3d9\", \"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"]\n};\nvar faPaypal = {\n  prefix: 'fab',\n  iconName: 'paypal',\n  icon: [384, 512, [], \"f1ed\", \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"]\n};\nvar faPennyArcade = {\n  prefix: 'fab',\n  iconName: 'penny-arcade',\n  icon: [640, 512, [], \"f704\", \"M421.91 164.27c-4.49 19.45-1.4 6.06-15.1 65.29l39.73-10.61c-22.34-49.61-17.29-38.41-24.63-54.68zm-206.09 51.11c-20.19 5.4-11.31 3.03-39.63 10.58l4.46 46.19c28.17-7.59 20.62-5.57 34.82-9.34 42.3-9.79 32.85-56.42.35-47.43zm326.16-26.19l-45.47-99.2c-5.69-12.37-19.46-18.84-32.62-15.33-70.27 18.75-38.72 10.32-135.59 36.23a27.618 27.618 0 0 0-18.89 17.41C144.26 113.27 0 153.75 0 226.67c0 33.5 30.67 67.11 80.9 95.37l1.74 17.88a27.891 27.891 0 0 0-17.77 28.67l4.3 44.48c1.39 14.31 13.43 25.21 27.8 25.2 5.18-.01-3.01 1.78 122.53-31.76 12.57-3.37 21.12-15.02 20.58-28.02 216.59 45.5 401.99-5.98 399.89-84.83.01-28.15-22.19-66.56-97.99-104.47zM255.14 298.3l-21.91 5.88-48.44 12.91 2.46 23.55 20.53-5.51 4.51 44.51-115.31 30.78-4.3-44.52 20.02-5.35-11.11-114.64-20.12 5.39-4.35-44.5c178.15-47.54 170.18-46.42 186.22-46.65 56.66-1.13 64.15 71.84 42.55 104.43a86.7 86.7 0 0 1-50.75 33.72zm199.18 16.62l-3.89-39.49 14.9-3.98-6.61-14.68-57.76 15.42-4.1 17.54 19.2-5.12 4.05 39.54-112.85 30.07-4.46-44.43 20.99-5.59 33.08-126.47-17.15 4.56-4.2-44.48c93.36-24.99 65.01-17.41 135.59-36.24l66.67 145.47 20.79-5.56 4.3 44.48-108.55 28.96z\"]\n};\nvar faPeriscope = {\n  prefix: 'fab',\n  iconName: 'periscope',\n  icon: [448, 512, [], \"f3da\", \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"]\n};\nvar faPhabricator = {\n  prefix: 'fab',\n  iconName: 'phabricator',\n  icon: [496, 512, [], \"f3db\", \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"]\n};\nvar faPhoenixFramework = {\n  prefix: 'fab',\n  iconName: 'phoenix-framework',\n  icon: [640, 512, [], \"f3dc\", \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"]\n};\nvar faPhoenixSquadron = {\n  prefix: 'fab',\n  iconName: 'phoenix-squadron',\n  icon: [512, 512, [], \"f511\", \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"]\n};\nvar faPhp = {\n  prefix: 'fab',\n  iconName: 'php',\n  icon: [640, 512, [], \"f457\", \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"]\n};\nvar faPiedPiper = {\n  prefix: 'fab',\n  iconName: 'pied-piper',\n  icon: [448, 512, [], \"f2ae\", \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"]\n};\nvar faPiedPiperAlt = {\n  prefix: 'fab',\n  iconName: 'pied-piper-alt',\n  icon: [576, 512, [], \"f1a8\", \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"]\n};\nvar faPiedPiperHat = {\n  prefix: 'fab',\n  iconName: 'pied-piper-hat',\n  icon: [640, 512, [], \"f4e5\", \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"]\n};\nvar faPiedPiperPp = {\n  prefix: 'fab',\n  iconName: 'pied-piper-pp',\n  icon: [448, 512, [], \"f1a7\", \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"]\n};\nvar faPinterest = {\n  prefix: 'fab',\n  iconName: 'pinterest',\n  icon: [496, 512, [], \"f0d2\", \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"]\n};\nvar faPinterestP = {\n  prefix: 'fab',\n  iconName: 'pinterest-p',\n  icon: [384, 512, [], \"f231\", \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"]\n};\nvar faPinterestSquare = {\n  prefix: 'fab',\n  iconName: 'pinterest-square',\n  icon: [448, 512, [], \"f0d3\", \"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"]\n};\nvar faPlaystation = {\n  prefix: 'fab',\n  iconName: 'playstation',\n  icon: [576, 512, [], \"f3df\", \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"]\n};\nvar faProductHunt = {\n  prefix: 'fab',\n  iconName: 'product-hunt',\n  icon: [512, 512, [], \"f288\", \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"]\n};\nvar faPushed = {\n  prefix: 'fab',\n  iconName: 'pushed',\n  icon: [432, 512, [], \"f3e1\", \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"]\n};\nvar faPython = {\n  prefix: 'fab',\n  iconName: 'python',\n  icon: [448, 512, [], \"f3e2\", \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"]\n};\nvar faQq = {\n  prefix: 'fab',\n  iconName: 'qq',\n  icon: [448, 512, [], \"f1d6\", \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"]\n};\nvar faQuinscape = {\n  prefix: 'fab',\n  iconName: 'quinscape',\n  icon: [512, 512, [], \"f459\", \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"]\n};\nvar faQuora = {\n  prefix: 'fab',\n  iconName: 'quora',\n  icon: [448, 512, [], \"f2c4\", \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"]\n};\nvar faRProject = {\n  prefix: 'fab',\n  iconName: 'r-project',\n  icon: [581, 512, [], \"f4f7\", \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"]\n};\nvar faRaspberryPi = {\n  prefix: 'fab',\n  iconName: 'raspberry-pi',\n  icon: [407, 512, [], \"f7bb\", \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"]\n};\nvar faRavelry = {\n  prefix: 'fab',\n  iconName: 'ravelry',\n  icon: [512, 512, [], \"f2d9\", \"M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z\"]\n};\nvar faReact = {\n  prefix: 'fab',\n  iconName: 'react',\n  icon: [512, 512, [], \"f41b\", \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"]\n};\nvar faReacteurope = {\n  prefix: 'fab',\n  iconName: 'reacteurope',\n  icon: [576, 512, [], \"f75d\", \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"]\n};\nvar faReadme = {\n  prefix: 'fab',\n  iconName: 'readme',\n  icon: [576, 512, [], \"f4d5\", \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"]\n};\nvar faRebel = {\n  prefix: 'fab',\n  iconName: 'rebel',\n  icon: [512, 512, [], \"f1d0\", \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"]\n};\nvar faRedRiver = {\n  prefix: 'fab',\n  iconName: 'red-river',\n  icon: [448, 512, [], \"f3e3\", \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"]\n};\nvar faReddit = {\n  prefix: 'fab',\n  iconName: 'reddit',\n  icon: [512, 512, [], \"f1a1\", \"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"]\n};\nvar faRedditAlien = {\n  prefix: 'fab',\n  iconName: 'reddit-alien',\n  icon: [512, 512, [], \"f281\", \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"]\n};\nvar faRedditSquare = {\n  prefix: 'fab',\n  iconName: 'reddit-square',\n  icon: [448, 512, [], \"f1a2\", \"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"]\n};\nvar faRedhat = {\n  prefix: 'fab',\n  iconName: 'redhat',\n  icon: [512, 512, [], \"f7bc\", \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"]\n};\nvar faRenren = {\n  prefix: 'fab',\n  iconName: 'renren',\n  icon: [512, 512, [], \"f18b\", \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"]\n};\nvar faReplyd = {\n  prefix: 'fab',\n  iconName: 'replyd',\n  icon: [448, 512, [], \"f3e6\", \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"]\n};\nvar faResearchgate = {\n  prefix: 'fab',\n  iconName: 'researchgate',\n  icon: [448, 512, [], \"f4f8\", \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"]\n};\nvar faResolving = {\n  prefix: 'fab',\n  iconName: 'resolving',\n  icon: [496, 512, [], \"f3e7\", \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"]\n};\nvar faRev = {\n  prefix: 'fab',\n  iconName: 'rev',\n  icon: [448, 512, [], \"f5b2\", \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"]\n};\nvar faRocketchat = {\n  prefix: 'fab',\n  iconName: 'rocketchat',\n  icon: [576, 512, [], \"f3e8\", \"M486.41 107.57c-76.93-50.83-179.18-62.4-264.12-47.07C127.26-31.16 20.77 11 0 23.12c0 0 73.08 62.1 61.21 116.49-86.52 88.2-45.39 186.4 0 232.77C73.08 426.77 0 488.87 0 488.87c20.57 12.16 126.77 54.19 222.29-37 84.75 15.23 187 3.76 264.12-47.16 119.26-76.14 119.65-220.61 0-297.15zM294.18 404.22a339.53 339.53 0 0 1-88.11-11.37l-19.77 19.09a179.74 179.74 0 0 1-36.59 27.39A143.14 143.14 0 0 1 98 454.06c1-1.78 1.88-3.56 2.77-5.24q29.67-55 16-98.69c-32.53-25.61-52-58.34-52-94.13 0-82 102.74-148.43 229.41-148.43S523.59 174 523.59 256 420.85 404.22 294.18 404.22zM184.12 291.3a34.32 34.32 0 0 1-34.8-33.72c-.7-45.39 67.83-46.38 68.52-1.09v.51a34 34 0 0 1-33.72 34.32zm73.77-33.72c-.79-45.39 67.74-46.48 68.53-1.19v.61c.39 45.08-67.74 45.57-68.53.58zm143.38 33.72a34.33 34.33 0 0 1-34.81-33.72c-.69-45.39 67.84-46.38 68.53-1.09v.51a33.89 33.89 0 0 1-33.72 34.32z\"]\n};\nvar faRockrms = {\n  prefix: 'fab',\n  iconName: 'rockrms',\n  icon: [496, 512, [], \"f3e9\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"]\n};\nvar faSafari = {\n  prefix: 'fab',\n  iconName: 'safari',\n  icon: [512, 512, [], \"f267\", \"M236.9 256.8c0-9.1 6.6-17.7 16.3-17.7 8.9 0 17.4 6.4 17.4 16.1 0 9.1-6.4 17.7-16.1 17.7-9 0-17.6-6.7-17.6-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-26.6 0c0-122.3-99.1-221.4-221.4-221.4S34.6 133.7 34.6 256 133.7 477.4 256 477.4 477.4 378.3 477.4 256zm-72.5 96.6c0 3.6 13 10.2 16.3 12.2-27.4 41.5-69.8 71.4-117.9 83.3l-4.4-18.5c-.3-2.5-1.9-2.8-4.2-2.8-1.9 0-3 2.8-2.8 4.2l4.4 18.8c-13.3 2.8-26.8 4.2-40.4 4.2-36.3 0-72-10.2-103-29.1 1.7-2.8 12.2-18 12.2-20.2 0-1.9-1.7-3.6-3.6-3.6-3.9 0-12.2 16.6-14.7 19.9-41.8-27.7-72-70.6-83.6-119.6l19.1-4.2c2.2-.6 2.8-2.2 2.8-4.2 0-1.9-2.8-3-4.4-2.8L62 294.5c-2.5-12.7-3.9-25.5-3.9-38.5 0-37.1 10.5-73.6 30.2-104.9 2.8 1.7 16.1 10.8 18.3 10.8 1.9 0 3.6-1.4 3.6-3.3 0-3.9-14.7-11.3-18-13.6 28.2-41.2 71.1-70.9 119.8-81.9l4.2 18.5c.6 2.2 2.2 2.8 4.2 2.8s3-2.8 2.8-4.4L219 61.7c12.2-2.2 24.6-3.6 37.1-3.6 37.1 0 73.3 10.5 104.9 30.2-1.9 2.8-10.8 15.8-10.8 18 0 1.9 1.4 3.6 3.3 3.6 3.9 0 11.3-14.4 13.3-17.7 41 27.7 70.3 70 81.7 118.2l-15.5 3.3c-2.5.6-2.8 2.2-2.8 4.4 0 1.9 2.8 3 4.2 2.8l15.8-3.6c2.5 12.7 3.9 25.7 3.9 38.7 0 36.3-10 72-28.8 102.7-2.8-1.4-14.4-9.7-16.6-9.7-2.1 0-3.8 1.7-3.8 3.6zm-33.2-242.2c-13 12.2-134.2 123.7-137.6 129.5l-96.6 160.5c12.7-11.9 134.2-124 137.3-129.3l96.9-160.7z\"]\n};\nvar faSalesforce = {\n  prefix: 'fab',\n  iconName: 'salesforce',\n  icon: [640, 512, [], \"f83b\", \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"]\n};\nvar faSass = {\n  prefix: 'fab',\n  iconName: 'sass',\n  icon: [640, 512, [], \"f41e\", \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"]\n};\nvar faSchlix = {\n  prefix: 'fab',\n  iconName: 'schlix',\n  icon: [448, 512, [], \"f3ea\", \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"]\n};\nvar faScribd = {\n  prefix: 'fab',\n  iconName: 'scribd',\n  icon: [384, 512, [], \"f28a\", \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"]\n};\nvar faSearchengin = {\n  prefix: 'fab',\n  iconName: 'searchengin',\n  icon: [460, 512, [], \"f3eb\", \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"]\n};\nvar faSellcast = {\n  prefix: 'fab',\n  iconName: 'sellcast',\n  icon: [448, 512, [], \"f2da\", \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"]\n};\nvar faSellsy = {\n  prefix: 'fab',\n  iconName: 'sellsy',\n  icon: [640, 512, [], \"f213\", \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"]\n};\nvar faServicestack = {\n  prefix: 'fab',\n  iconName: 'servicestack',\n  icon: [496, 512, [], \"f3ec\", \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"]\n};\nvar faShirtsinbulk = {\n  prefix: 'fab',\n  iconName: 'shirtsinbulk',\n  icon: [448, 512, [], \"f214\", \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"]\n};\nvar faShopware = {\n  prefix: 'fab',\n  iconName: 'shopware',\n  icon: [512, 512, [], \"f5b5\", \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"]\n};\nvar faSimplybuilt = {\n  prefix: 'fab',\n  iconName: 'simplybuilt',\n  icon: [512, 512, [], \"f215\", \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"]\n};\nvar faSistrix = {\n  prefix: 'fab',\n  iconName: 'sistrix',\n  icon: [448, 512, [], \"f3ee\", \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"]\n};\nvar faSith = {\n  prefix: 'fab',\n  iconName: 'sith',\n  icon: [448, 512, [], \"f512\", \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"]\n};\nvar faSketch = {\n  prefix: 'fab',\n  iconName: 'sketch',\n  icon: [512, 512, [], \"f7c6\", \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"]\n};\nvar faSkyatlas = {\n  prefix: 'fab',\n  iconName: 'skyatlas',\n  icon: [640, 512, [], \"f216\", \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"]\n};\nvar faSkype = {\n  prefix: 'fab',\n  iconName: 'skype',\n  icon: [448, 512, [], \"f17e\", \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"]\n};\nvar faSlack = {\n  prefix: 'fab',\n  iconName: 'slack',\n  icon: [448, 512, [], \"f198\", \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"]\n};\nvar faSlackHash = {\n  prefix: 'fab',\n  iconName: 'slack-hash',\n  icon: [448, 512, [], \"f3ef\", \"M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z\"]\n};\nvar faSlideshare = {\n  prefix: 'fab',\n  iconName: 'slideshare',\n  icon: [512, 512, [], \"f1e7\", \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"]\n};\nvar faSnapchat = {\n  prefix: 'fab',\n  iconName: 'snapchat',\n  icon: [496, 512, [], \"f2ab\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z\"]\n};\nvar faSnapchatGhost = {\n  prefix: 'fab',\n  iconName: 'snapchat-ghost',\n  icon: [512, 512, [], \"f2ac\", \"M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z\"]\n};\nvar faSnapchatSquare = {\n  prefix: 'fab',\n  iconName: 'snapchat-square',\n  icon: [448, 512, [], \"f2ad\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z\"]\n};\nvar faSoundcloud = {\n  prefix: 'fab',\n  iconName: 'soundcloud',\n  icon: [640, 512, [], \"f1be\", \"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"]\n};\nvar faSourcetree = {\n  prefix: 'fab',\n  iconName: 'sourcetree',\n  icon: [448, 512, [], \"f7d3\", \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"]\n};\nvar faSpeakap = {\n  prefix: 'fab',\n  iconName: 'speakap',\n  icon: [448, 512, [], \"f3f3\", \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"]\n};\nvar faSpeakerDeck = {\n  prefix: 'fab',\n  iconName: 'speaker-deck',\n  icon: [512, 512, [], \"f83c\", \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"]\n};\nvar faSpotify = {\n  prefix: 'fab',\n  iconName: 'spotify',\n  icon: [496, 512, [], \"f1bc\", \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"]\n};\nvar faSquarespace = {\n  prefix: 'fab',\n  iconName: 'squarespace',\n  icon: [512, 512, [], \"f5be\", \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"]\n};\nvar faStackExchange = {\n  prefix: 'fab',\n  iconName: 'stack-exchange',\n  icon: [448, 512, [], \"f18d\", \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"]\n};\nvar faStackOverflow = {\n  prefix: 'fab',\n  iconName: 'stack-overflow',\n  icon: [384, 512, [], \"f16c\", \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"]\n};\nvar faStackpath = {\n  prefix: 'fab',\n  iconName: 'stackpath',\n  icon: [448, 512, [], \"f842\", \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"]\n};\nvar faStaylinked = {\n  prefix: 'fab',\n  iconName: 'staylinked',\n  icon: [440, 512, [], \"f3f5\", \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"]\n};\nvar faSteam = {\n  prefix: 'fab',\n  iconName: 'steam',\n  icon: [496, 512, [], \"f1b6\", \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"]\n};\nvar faSteamSquare = {\n  prefix: 'fab',\n  iconName: 'steam-square',\n  icon: [448, 512, [], \"f1b7\", \"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"]\n};\nvar faSteamSymbol = {\n  prefix: 'fab',\n  iconName: 'steam-symbol',\n  icon: [448, 512, [], \"f3f6\", \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"]\n};\nvar faStickerMule = {\n  prefix: 'fab',\n  iconName: 'sticker-mule',\n  icon: [576, 512, [], \"f3f7\", \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"]\n};\nvar faStrava = {\n  prefix: 'fab',\n  iconName: 'strava',\n  icon: [384, 512, [], \"f428\", \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"]\n};\nvar faStripe = {\n  prefix: 'fab',\n  iconName: 'stripe',\n  icon: [640, 512, [], \"f429\", \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"]\n};\nvar faStripeS = {\n  prefix: 'fab',\n  iconName: 'stripe-s',\n  icon: [384, 512, [], \"f42a\", \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"]\n};\nvar faStudiovinari = {\n  prefix: 'fab',\n  iconName: 'studiovinari',\n  icon: [512, 512, [], \"f3f8\", \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"]\n};\nvar faStumbleupon = {\n  prefix: 'fab',\n  iconName: 'stumbleupon',\n  icon: [512, 512, [], \"f1a4\", \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"]\n};\nvar faStumbleuponCircle = {\n  prefix: 'fab',\n  iconName: 'stumbleupon-circle',\n  icon: [496, 512, [], \"f1a3\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"]\n};\nvar faSuperpowers = {\n  prefix: 'fab',\n  iconName: 'superpowers',\n  icon: [448, 512, [], \"f2dd\", \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"]\n};\nvar faSupple = {\n  prefix: 'fab',\n  iconName: 'supple',\n  icon: [640, 512, [], \"f3f9\", \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"]\n};\nvar faSuse = {\n  prefix: 'fab',\n  iconName: 'suse',\n  icon: [640, 512, [], \"f7d6\", \"M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\"]\n};\nvar faSymfony = {\n  prefix: 'fab',\n  iconName: 'symfony',\n  icon: [512, 512, [], \"f83d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"]\n};\nvar faTeamspeak = {\n  prefix: 'fab',\n  iconName: 'teamspeak',\n  icon: [512, 512, [], \"f4f9\", \"M244.2 346.79c2.4-12.3-12-30-32.4-48.7-20.9-19.2-48.2-39.1-63.4-46.6-21.7-12-41.7-1.8-46.3 22.7-5 26.2 0 51.4 14.5 73.9 10.2 15.5 25.4 22.7 43.4 24 11.6.6 52.5 2.2 61.7-1 11.9-4.3 20.1-11.8 22.5-24.3zm205 20.8a5.22 5.22 0 0 0-8.3 2.4c-8 25.4-44.7 112.5-172.1 121.5-149.7 10.5 80.3 43.6 145.4-6.4 22.7-17.4 47.6-35 46.6-85.4-.4-10.1-4.9-26.69-11.6-32.1zm62-122.4c-.3-18.9-8.6-33.4-26-42.2-2.9-1.3-5-2.7-5.9-6.4A222.64 222.64 0 0 0 438.9 103c-1.1-1.5-3.5-3.2-2.2-5 8.5-11.5-.3-18-7-24.4Q321.4-31.11 177.4 13.09c-40.1 12.3-73.9 35.6-102 67.4-4 4.3-6.7 9.1-3 14.5 3 4 1.3 6.2-1 9.3C51.6 132 38.2 162.59 32.1 196c-.7 4.3-2.9 6-6.4 7.8-14.2 7-22.5 18.5-24.9 34L0 264.29v20.9c0 30.8 21 50.4 51.8 49 7.7-.3 11.7-4.3 12-11.5 2-77.5-2.4-95.4 3.7-125.8C92.1 72.39 234.3 5 345.3 65.39 411.4 102 445.7 159 447.6 234.79c.8 28.2 0 56.5 0 84.6 0 7 2.2 12.5 9.4 14.2 24.1 5 49.2-12 53.2-36.7 2.9-17.1 1-34.5 1-51.7zm-159.6 131.5c36.5 2.8 59.3-28.5 58.4-60.5-2.1-45.2-66.2-16.5-87.8-8-73.2 28.1-45 54.9-22.2 60.8z\"]\n};\nvar faTelegram = {\n  prefix: 'fab',\n  iconName: 'telegram',\n  icon: [496, 512, [], \"f2c6\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z\"]\n};\nvar faTelegramPlane = {\n  prefix: 'fab',\n  iconName: 'telegram-plane',\n  icon: [448, 512, [], \"f3fe\", \"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"]\n};\nvar faTencentWeibo = {\n  prefix: 'fab',\n  iconName: 'tencent-weibo',\n  icon: [384, 512, [], \"f1d5\", \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"]\n};\nvar faTheRedYeti = {\n  prefix: 'fab',\n  iconName: 'the-red-yeti',\n  icon: [512, 512, [], \"f69d\", \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"]\n};\nvar faThemeco = {\n  prefix: 'fab',\n  iconName: 'themeco',\n  icon: [448, 512, [], \"f5c6\", \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"]\n};\nvar faThemeisle = {\n  prefix: 'fab',\n  iconName: 'themeisle',\n  icon: [512, 512, [], \"f2b2\", \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"]\n};\nvar faThinkPeaks = {\n  prefix: 'fab',\n  iconName: 'think-peaks',\n  icon: [576, 512, [], \"f731\", \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"]\n};\nvar faTradeFederation = {\n  prefix: 'fab',\n  iconName: 'trade-federation',\n  icon: [496, 512, [], \"f513\", \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"]\n};\nvar faTrello = {\n  prefix: 'fab',\n  iconName: 'trello',\n  icon: [448, 512, [], \"f181\", \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"]\n};\nvar faTripadvisor = {\n  prefix: 'fab',\n  iconName: 'tripadvisor',\n  icon: [576, 512, [], \"f262\", \"M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z\"]\n};\nvar faTumblr = {\n  prefix: 'fab',\n  iconName: 'tumblr',\n  icon: [320, 512, [], \"f173\", \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"]\n};\nvar faTumblrSquare = {\n  prefix: 'fab',\n  iconName: 'tumblr-square',\n  icon: [448, 512, [], \"f174\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"]\n};\nvar faTwitch = {\n  prefix: 'fab',\n  iconName: 'twitch',\n  icon: [448, 512, [], \"f1e8\", \"M40.1 32L10 108.9v314.3h107V480h60.2l56.8-56.8h87l117-117V32H40.1zm357.8 254.1L331 353H224l-56.8 56.8V353H76.9V72.1h321v214zM331 149v116.9h-40.1V149H331zm-107 0v116.9h-40.1V149H224z\"]\n};\nvar faTwitter = {\n  prefix: 'fab',\n  iconName: 'twitter',\n  icon: [512, 512, [], \"f099\", \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"]\n};\nvar faTwitterSquare = {\n  prefix: 'fab',\n  iconName: 'twitter-square',\n  icon: [448, 512, [], \"f081\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z\"]\n};\nvar faTypo3 = {\n  prefix: 'fab',\n  iconName: 'typo3',\n  icon: [448, 512, [], \"f42b\", \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"]\n};\nvar faUber = {\n  prefix: 'fab',\n  iconName: 'uber',\n  icon: [448, 512, [], \"f402\", \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"]\n};\nvar faUbuntu = {\n  prefix: 'fab',\n  iconName: 'ubuntu',\n  icon: [496, 512, [], \"f7df\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\"]\n};\nvar faUikit = {\n  prefix: 'fab',\n  iconName: 'uikit',\n  icon: [448, 512, [], \"f403\", \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"]\n};\nvar faUniregistry = {\n  prefix: 'fab',\n  iconName: 'uniregistry',\n  icon: [384, 512, [], \"f404\", \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"]\n};\nvar faUntappd = {\n  prefix: 'fab',\n  iconName: 'untappd',\n  icon: [640, 512, [], \"f405\", \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"]\n};\nvar faUps = {\n  prefix: 'fab',\n  iconName: 'ups',\n  icon: [384, 512, [], \"f7e0\", \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"]\n};\nvar faUsb = {\n  prefix: 'fab',\n  iconName: 'usb',\n  icon: [640, 512, [], \"f287\", \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"]\n};\nvar faUsps = {\n  prefix: 'fab',\n  iconName: 'usps',\n  icon: [576, 512, [], \"f7e1\", \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"]\n};\nvar faUssunnah = {\n  prefix: 'fab',\n  iconName: 'ussunnah',\n  icon: [512, 512, [], \"f407\", \"M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4 15 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z\"]\n};\nvar faVaadin = {\n  prefix: 'fab',\n  iconName: 'vaadin',\n  icon: [448, 512, [], \"f408\", \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"]\n};\nvar faViacoin = {\n  prefix: 'fab',\n  iconName: 'viacoin',\n  icon: [384, 512, [], \"f237\", \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"]\n};\nvar faViadeo = {\n  prefix: 'fab',\n  iconName: 'viadeo',\n  icon: [448, 512, [], \"f2a9\", \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"]\n};\nvar faViadeoSquare = {\n  prefix: 'fab',\n  iconName: 'viadeo-square',\n  icon: [448, 512, [], \"f2aa\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"]\n};\nvar faViber = {\n  prefix: 'fab',\n  iconName: 'viber',\n  icon: [512, 512, [], \"f409\", \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"]\n};\nvar faVimeo = {\n  prefix: 'fab',\n  iconName: 'vimeo',\n  icon: [448, 512, [], \"f40a\", \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"]\n};\nvar faVimeoSquare = {\n  prefix: 'fab',\n  iconName: 'vimeo-square',\n  icon: [448, 512, [], \"f194\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"]\n};\nvar faVimeoV = {\n  prefix: 'fab',\n  iconName: 'vimeo-v',\n  icon: [448, 512, [], \"f27d\", \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"]\n};\nvar faVine = {\n  prefix: 'fab',\n  iconName: 'vine',\n  icon: [384, 512, [], \"f1ca\", \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"]\n};\nvar faVk = {\n  prefix: 'fab',\n  iconName: 'vk',\n  icon: [576, 512, [], \"f189\", \"M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z\"]\n};\nvar faVnv = {\n  prefix: 'fab',\n  iconName: 'vnv',\n  icon: [640, 512, [], \"f40b\", \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"]\n};\nvar faVuejs = {\n  prefix: 'fab',\n  iconName: 'vuejs',\n  icon: [448, 512, [], \"f41f\", \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"]\n};\nvar faWaze = {\n  prefix: 'fab',\n  iconName: 'waze',\n  icon: [512, 512, [], \"f83f\", \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"]\n};\nvar faWeebly = {\n  prefix: 'fab',\n  iconName: 'weebly',\n  icon: [512, 512, [], \"f5cc\", \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"]\n};\nvar faWeibo = {\n  prefix: 'fab',\n  iconName: 'weibo',\n  icon: [512, 512, [], \"f18a\", \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"]\n};\nvar faWeixin = {\n  prefix: 'fab',\n  iconName: 'weixin',\n  icon: [576, 512, [], \"f1d7\", \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"]\n};\nvar faWhatsapp = {\n  prefix: 'fab',\n  iconName: 'whatsapp',\n  icon: [448, 512, [], \"f232\", \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"]\n};\nvar faWhatsappSquare = {\n  prefix: 'fab',\n  iconName: 'whatsapp-square',\n  icon: [448, 512, [], \"f40c\", \"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"]\n};\nvar faWhmcs = {\n  prefix: 'fab',\n  iconName: 'whmcs',\n  icon: [448, 512, [], \"f40d\", \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"]\n};\nvar faWikipediaW = {\n  prefix: 'fab',\n  iconName: 'wikipedia-w',\n  icon: [640, 512, [], \"f266\", \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"]\n};\nvar faWindows = {\n  prefix: 'fab',\n  iconName: 'windows',\n  icon: [448, 512, [], \"f17a\", \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"]\n};\nvar faWix = {\n  prefix: 'fab',\n  iconName: 'wix',\n  icon: [640, 512, [], \"f5cf\", \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"]\n};\nvar faWizardsOfTheCoast = {\n  prefix: 'fab',\n  iconName: 'wizards-of-the-coast',\n  icon: [640, 512, [], \"f730\", \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"]\n};\nvar faWolfPackBattalion = {\n  prefix: 'fab',\n  iconName: 'wolf-pack-battalion',\n  icon: [512, 512, [], \"f514\", \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"]\n};\nvar faWordpress = {\n  prefix: 'fab',\n  iconName: 'wordpress',\n  icon: [512, 512, [], \"f19a\", \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"]\n};\nvar faWordpressSimple = {\n  prefix: 'fab',\n  iconName: 'wordpress-simple',\n  icon: [512, 512, [], \"f411\", \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"]\n};\nvar faWpbeginner = {\n  prefix: 'fab',\n  iconName: 'wpbeginner',\n  icon: [512, 512, [], \"f297\", \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"]\n};\nvar faWpexplorer = {\n  prefix: 'fab',\n  iconName: 'wpexplorer',\n  icon: [512, 512, [], \"f2de\", \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"]\n};\nvar faWpforms = {\n  prefix: 'fab',\n  iconName: 'wpforms',\n  icon: [448, 512, [], \"f298\", \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"]\n};\nvar faWpressr = {\n  prefix: 'fab',\n  iconName: 'wpressr',\n  icon: [496, 512, [], \"f3e4\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"]\n};\nvar faXbox = {\n  prefix: 'fab',\n  iconName: 'xbox',\n  icon: [512, 512, [], \"f412\", \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"]\n};\nvar faXing = {\n  prefix: 'fab',\n  iconName: 'xing',\n  icon: [384, 512, [], \"f168\", \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"]\n};\nvar faXingSquare = {\n  prefix: 'fab',\n  iconName: 'xing-square',\n  icon: [448, 512, [], \"f169\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"]\n};\nvar faYCombinator = {\n  prefix: 'fab',\n  iconName: 'y-combinator',\n  icon: [448, 512, [], \"f23b\", \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"]\n};\nvar faYahoo = {\n  prefix: 'fab',\n  iconName: 'yahoo',\n  icon: [448, 512, [], \"f19e\", \"M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z\"]\n};\nvar faYammer = {\n  prefix: 'fab',\n  iconName: 'yammer',\n  icon: [512, 512, [], \"f840\", \"M421.78 152.17A23.06 23.06 0 0 0 400.9 112c-.83.43-1.71.9-2.63 1.4-15.25 8.4-118.33 80.62-106.69 88.77s82.04-23.61 130.2-50zm0 217.17c-48.16-26.38-118.64-58.1-130.2-50s91.42 80.35 106.69 88.74c.92.51 1.8 1 2.63 1.41a23.07 23.07 0 0 0 20.88-40.15zM464.21 237c-.95 0-1.95-.06-3-.06-17.4 0-142.52 13.76-136.24 26.51s83.3 18.74 138.21 18.76a23 23 0 0 0 1-45.21zM31 96.65a24.88 24.88 0 0 1 46.14-18.4l81 205.06h1.21l77-203.53a23.52 23.52 0 0 1 44.45 15.27L171.2 368.44C152.65 415.66 134.08 448 77.91 448a139.67 139.67 0 0 1-23.81-1.95 21.31 21.31 0 0 1 6.9-41.77c.66.06 10.91.66 13.86.66 30.47 0 43.74-18.94 58.07-59.41z\"]\n};\nvar faYandex = {\n  prefix: 'fab',\n  iconName: 'yandex',\n  icon: [256, 512, [], \"f413\", \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"]\n};\nvar faYandexInternational = {\n  prefix: 'fab',\n  iconName: 'yandex-international',\n  icon: [320, 512, [], \"f414\", \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"]\n};\nvar faYarn = {\n  prefix: 'fab',\n  iconName: 'yarn',\n  icon: [496, 512, [], \"f7e3\", \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"]\n};\nvar faYelp = {\n  prefix: 'fab',\n  iconName: 'yelp',\n  icon: [384, 512, [], \"f1e9\", \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"]\n};\nvar faYoast = {\n  prefix: 'fab',\n  iconName: 'yoast',\n  icon: [448, 512, [], \"f2b1\", \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"]\n};\nvar faYoutube = {\n  prefix: 'fab',\n  iconName: 'youtube',\n  icon: [576, 512, [], \"f167\", \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"]\n};\nvar faYoutubeSquare = {\n  prefix: 'fab',\n  iconName: 'youtube-square',\n  icon: [448, 512, [], \"f431\", \"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"]\n};\nvar faZhihu = {\n  prefix: 'fab',\n  iconName: 'zhihu',\n  icon: [640, 512, [], \"f63f\", \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"]\n};\nvar _iconsCache = {\n  fa500px: fa500px,\n  faAccessibleIcon: faAccessibleIcon,\n  faAccusoft: faAccusoft,\n  faAcquisitionsIncorporated: faAcquisitionsIncorporated,\n  faAdn: faAdn,\n  faAdobe: faAdobe,\n  faAdversal: faAdversal,\n  faAffiliatetheme: faAffiliatetheme,\n  faAirbnb: faAirbnb,\n  faAlgolia: faAlgolia,\n  faAlipay: faAlipay,\n  faAmazon: faAmazon,\n  faAmazonPay: faAmazonPay,\n  faAmilia: faAmilia,\n  faAndroid: faAndroid,\n  faAngellist: faAngellist,\n  faAngrycreative: faAngrycreative,\n  faAngular: faAngular,\n  faAppStore: faAppStore,\n  faAppStoreIos: faAppStoreIos,\n  faApper: faApper,\n  faApple: faApple,\n  faApplePay: faApplePay,\n  faArtstation: faArtstation,\n  faAsymmetrik: faAsymmetrik,\n  faAtlassian: faAtlassian,\n  faAudible: faAudible,\n  faAutoprefixer: faAutoprefixer,\n  faAvianex: faAvianex,\n  faAviato: faAviato,\n  faAws: faAws,\n  faBandcamp: faBandcamp,\n  faBattleNet: faBattleNet,\n  faBehance: faBehance,\n  faBehanceSquare: faBehanceSquare,\n  faBimobject: faBimobject,\n  faBitbucket: faBitbucket,\n  faBitcoin: faBitcoin,\n  faBity: faBity,\n  faBlackTie: faBlackTie,\n  faBlackberry: faBlackberry,\n  faBlogger: faBlogger,\n  faBloggerB: faBloggerB,\n  faBluetooth: faBluetooth,\n  faBluetoothB: faBluetoothB,\n  faBootstrap: faBootstrap,\n  faBtc: faBtc,\n  faBuffer: faBuffer,\n  faBuromobelexperte: faBuromobelexperte,\n  faBuysellads: faBuysellads,\n  faCanadianMapleLeaf: faCanadianMapleLeaf,\n  faCcAmazonPay: faCcAmazonPay,\n  faCcAmex: faCcAmex,\n  faCcApplePay: faCcApplePay,\n  faCcDinersClub: faCcDinersClub,\n  faCcDiscover: faCcDiscover,\n  faCcJcb: faCcJcb,\n  faCcMastercard: faCcMastercard,\n  faCcPaypal: faCcPaypal,\n  faCcStripe: faCcStripe,\n  faCcVisa: faCcVisa,\n  faCentercode: faCentercode,\n  faCentos: faCentos,\n  faChrome: faChrome,\n  faChromecast: faChromecast,\n  faCloudscale: faCloudscale,\n  faCloudsmith: faCloudsmith,\n  faCloudversify: faCloudversify,\n  faCodepen: faCodepen,\n  faCodiepie: faCodiepie,\n  faConfluence: faConfluence,\n  faConnectdevelop: faConnectdevelop,\n  faContao: faContao,\n  faCpanel: faCpanel,\n  faCreativeCommons: faCreativeCommons,\n  faCreativeCommonsBy: faCreativeCommonsBy,\n  faCreativeCommonsNc: faCreativeCommonsNc,\n  faCreativeCommonsNcEu: faCreativeCommonsNcEu,\n  faCreativeCommonsNcJp: faCreativeCommonsNcJp,\n  faCreativeCommonsNd: faCreativeCommonsNd,\n  faCreativeCommonsPd: faCreativeCommonsPd,\n  faCreativeCommonsPdAlt: faCreativeCommonsPdAlt,\n  faCreativeCommonsRemix: faCreativeCommonsRemix,\n  faCreativeCommonsSa: faCreativeCommonsSa,\n  faCreativeCommonsSampling: faCreativeCommonsSampling,\n  faCreativeCommonsSamplingPlus: faCreativeCommonsSamplingPlus,\n  faCreativeCommonsShare: faCreativeCommonsShare,\n  faCreativeCommonsZero: faCreativeCommonsZero,\n  faCriticalRole: faCriticalRole,\n  faCss3: faCss3,\n  faCss3Alt: faCss3Alt,\n  faCuttlefish: faCuttlefish,\n  faDAndD: faDAndD,\n  faDAndDBeyond: faDAndDBeyond,\n  faDashcube: faDashcube,\n  faDelicious: faDelicious,\n  faDeploydog: faDeploydog,\n  faDeskpro: faDeskpro,\n  faDev: faDev,\n  faDeviantart: faDeviantart,\n  faDhl: faDhl,\n  faDiaspora: faDiaspora,\n  faDigg: faDigg,\n  faDigitalOcean: faDigitalOcean,\n  faDiscord: faDiscord,\n  faDiscourse: faDiscourse,\n  faDochub: faDochub,\n  faDocker: faDocker,\n  faDraft2digital: faDraft2digital,\n  faDribbble: faDribbble,\n  faDribbbleSquare: faDribbbleSquare,\n  faDropbox: faDropbox,\n  faDrupal: faDrupal,\n  faDyalog: faDyalog,\n  faEarlybirds: faEarlybirds,\n  faEbay: faEbay,\n  faEdge: faEdge,\n  faElementor: faElementor,\n  faEllo: faEllo,\n  faEmber: faEmber,\n  faEmpire: faEmpire,\n  faEnvira: faEnvira,\n  faErlang: faErlang,\n  faEthereum: faEthereum,\n  faEtsy: faEtsy,\n  faEvernote: faEvernote,\n  faExpeditedssl: faExpeditedssl,\n  faFacebook: faFacebook,\n  faFacebookF: faFacebookF,\n  faFacebookMessenger: faFacebookMessenger,\n  faFacebookSquare: faFacebookSquare,\n  faFantasyFlightGames: faFantasyFlightGames,\n  faFedex: faFedex,\n  faFedora: faFedora,\n  faFigma: faFigma,\n  faFirefox: faFirefox,\n  faFirstOrder: faFirstOrder,\n  faFirstOrderAlt: faFirstOrderAlt,\n  faFirstdraft: faFirstdraft,\n  faFlickr: faFlickr,\n  faFlipboard: faFlipboard,\n  faFly: faFly,\n  faFontAwesome: faFontAwesome,\n  faFontAwesomeAlt: faFontAwesomeAlt,\n  faFontAwesomeFlag: faFontAwesomeFlag,\n  faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n  faFonticons: faFonticons,\n  faFonticonsFi: faFonticonsFi,\n  faFortAwesome: faFortAwesome,\n  faFortAwesomeAlt: faFortAwesomeAlt,\n  faForumbee: faForumbee,\n  faFoursquare: faFoursquare,\n  faFreeCodeCamp: faFreeCodeCamp,\n  faFreebsd: faFreebsd,\n  faFulcrum: faFulcrum,\n  faGalacticRepublic: faGalacticRepublic,\n  faGalacticSenate: faGalacticSenate,\n  faGetPocket: faGetPocket,\n  faGg: faGg,\n  faGgCircle: faGgCircle,\n  faGit: faGit,\n  faGitAlt: faGitAlt,\n  faGitSquare: faGitSquare,\n  faGithub: faGithub,\n  faGithubAlt: faGithubAlt,\n  faGithubSquare: faGithubSquare,\n  faGitkraken: faGitkraken,\n  faGitlab: faGitlab,\n  faGitter: faGitter,\n  faGlide: faGlide,\n  faGlideG: faGlideG,\n  faGofore: faGofore,\n  faGoodreads: faGoodreads,\n  faGoodreadsG: faGoodreadsG,\n  faGoogle: faGoogle,\n  faGoogleDrive: faGoogleDrive,\n  faGooglePlay: faGooglePlay,\n  faGooglePlus: faGooglePlus,\n  faGooglePlusG: faGooglePlusG,\n  faGooglePlusSquare: faGooglePlusSquare,\n  faGoogleWallet: faGoogleWallet,\n  faGratipay: faGratipay,\n  faGrav: faGrav,\n  faGripfire: faGripfire,\n  faGrunt: faGrunt,\n  faGulp: faGulp,\n  faHackerNews: faHackerNews,\n  faHackerNewsSquare: faHackerNewsSquare,\n  faHackerrank: faHackerrank,\n  faHips: faHips,\n  faHireAHelper: faHireAHelper,\n  faHooli: faHooli,\n  faHornbill: faHornbill,\n  faHotjar: faHotjar,\n  faHouzz: faHouzz,\n  faHtml5: faHtml5,\n  faHubspot: faHubspot,\n  faImdb: faImdb,\n  faInstagram: faInstagram,\n  faIntercom: faIntercom,\n  faInternetExplorer: faInternetExplorer,\n  faInvision: faInvision,\n  faIoxhost: faIoxhost,\n  faItchIo: faItchIo,\n  faItunes: faItunes,\n  faItunesNote: faItunesNote,\n  faJava: faJava,\n  faJediOrder: faJediOrder,\n  faJenkins: faJenkins,\n  faJira: faJira,\n  faJoget: faJoget,\n  faJoomla: faJoomla,\n  faJs: faJs,\n  faJsSquare: faJsSquare,\n  faJsfiddle: faJsfiddle,\n  faKaggle: faKaggle,\n  faKeybase: faKeybase,\n  faKeycdn: faKeycdn,\n  faKickstarter: faKickstarter,\n  faKickstarterK: faKickstarterK,\n  faKorvue: faKorvue,\n  faLaravel: faLaravel,\n  faLastfm: faLastfm,\n  faLastfmSquare: faLastfmSquare,\n  faLeanpub: faLeanpub,\n  faLess: faLess,\n  faLine: faLine,\n  faLinkedin: faLinkedin,\n  faLinkedinIn: faLinkedinIn,\n  faLinode: faLinode,\n  faLinux: faLinux,\n  faLyft: faLyft,\n  faMagento: faMagento,\n  faMailchimp: faMailchimp,\n  faMandalorian: faMandalorian,\n  faMarkdown: faMarkdown,\n  faMastodon: faMastodon,\n  faMaxcdn: faMaxcdn,\n  faMedapps: faMedapps,\n  faMedium: faMedium,\n  faMediumM: faMediumM,\n  faMedrt: faMedrt,\n  faMeetup: faMeetup,\n  faMegaport: faMegaport,\n  faMendeley: faMendeley,\n  faMicrosoft: faMicrosoft,\n  faMix: faMix,\n  faMixcloud: faMixcloud,\n  faMizuni: faMizuni,\n  faModx: faModx,\n  faMonero: faMonero,\n  faNapster: faNapster,\n  faNeos: faNeos,\n  faNimblr: faNimblr,\n  faNintendoSwitch: faNintendoSwitch,\n  faNode: faNode,\n  faNodeJs: faNodeJs,\n  faNpm: faNpm,\n  faNs8: faNs8,\n  faNutritionix: faNutritionix,\n  faOdnoklassniki: faOdnoklassniki,\n  faOdnoklassnikiSquare: faOdnoklassnikiSquare,\n  faOldRepublic: faOldRepublic,\n  faOpencart: faOpencart,\n  faOpenid: faOpenid,\n  faOpera: faOpera,\n  faOptinMonster: faOptinMonster,\n  faOsi: faOsi,\n  faPage4: faPage4,\n  faPagelines: faPagelines,\n  faPalfed: faPalfed,\n  faPatreon: faPatreon,\n  faPaypal: faPaypal,\n  faPennyArcade: faPennyArcade,\n  faPeriscope: faPeriscope,\n  faPhabricator: faPhabricator,\n  faPhoenixFramework: faPhoenixFramework,\n  faPhoenixSquadron: faPhoenixSquadron,\n  faPhp: faPhp,\n  faPiedPiper: faPiedPiper,\n  faPiedPiperAlt: faPiedPiperAlt,\n  faPiedPiperHat: faPiedPiperHat,\n  faPiedPiperPp: faPiedPiperPp,\n  faPinterest: faPinterest,\n  faPinterestP: faPinterestP,\n  faPinterestSquare: faPinterestSquare,\n  faPlaystation: faPlaystation,\n  faProductHunt: faProductHunt,\n  faPushed: faPushed,\n  faPython: faPython,\n  faQq: faQq,\n  faQuinscape: faQuinscape,\n  faQuora: faQuora,\n  faRProject: faRProject,\n  faRaspberryPi: faRaspberryPi,\n  faRavelry: faRavelry,\n  faReact: faReact,\n  faReacteurope: faReacteurope,\n  faReadme: faReadme,\n  faRebel: faRebel,\n  faRedRiver: faRedRiver,\n  faReddit: faReddit,\n  faRedditAlien: faRedditAlien,\n  faRedditSquare: faRedditSquare,\n  faRedhat: faRedhat,\n  faRenren: faRenren,\n  faReplyd: faReplyd,\n  faResearchgate: faResearchgate,\n  faResolving: faResolving,\n  faRev: faRev,\n  faRocketchat: faRocketchat,\n  faRockrms: faRockrms,\n  faSafari: faSafari,\n  faSalesforce: faSalesforce,\n  faSass: faSass,\n  faSchlix: faSchlix,\n  faScribd: faScribd,\n  faSearchengin: faSearchengin,\n  faSellcast: faSellcast,\n  faSellsy: faSellsy,\n  faServicestack: faServicestack,\n  faShirtsinbulk: faShirtsinbulk,\n  faShopware: faShopware,\n  faSimplybuilt: faSimplybuilt,\n  faSistrix: faSistrix,\n  faSith: faSith,\n  faSketch: faSketch,\n  faSkyatlas: faSkyatlas,\n  faSkype: faSkype,\n  faSlack: faSlack,\n  faSlackHash: faSlackHash,\n  faSlideshare: faSlideshare,\n  faSnapchat: faSnapchat,\n  faSnapchatGhost: faSnapchatGhost,\n  faSnapchatSquare: faSnapchatSquare,\n  faSoundcloud: faSoundcloud,\n  faSourcetree: faSourcetree,\n  faSpeakap: faSpeakap,\n  faSpeakerDeck: faSpeakerDeck,\n  faSpotify: faSpotify,\n  faSquarespace: faSquarespace,\n  faStackExchange: faStackExchange,\n  faStackOverflow: faStackOverflow,\n  faStackpath: faStackpath,\n  faStaylinked: faStaylinked,\n  faSteam: faSteam,\n  faSteamSquare: faSteamSquare,\n  faSteamSymbol: faSteamSymbol,\n  faStickerMule: faStickerMule,\n  faStrava: faStrava,\n  faStripe: faStripe,\n  faStripeS: faStripeS,\n  faStudiovinari: faStudiovinari,\n  faStumbleupon: faStumbleupon,\n  faStumbleuponCircle: faStumbleuponCircle,\n  faSuperpowers: faSuperpowers,\n  faSupple: faSupple,\n  faSuse: faSuse,\n  faSymfony: faSymfony,\n  faTeamspeak: faTeamspeak,\n  faTelegram: faTelegram,\n  faTelegramPlane: faTelegramPlane,\n  faTencentWeibo: faTencentWeibo,\n  faTheRedYeti: faTheRedYeti,\n  faThemeco: faThemeco,\n  faThemeisle: faThemeisle,\n  faThinkPeaks: faThinkPeaks,\n  faTradeFederation: faTradeFederation,\n  faTrello: faTrello,\n  faTripadvisor: faTripadvisor,\n  faTumblr: faTumblr,\n  faTumblrSquare: faTumblrSquare,\n  faTwitch: faTwitch,\n  faTwitter: faTwitter,\n  faTwitterSquare: faTwitterSquare,\n  faTypo3: faTypo3,\n  faUber: faUber,\n  faUbuntu: faUbuntu,\n  faUikit: faUikit,\n  faUniregistry: faUniregistry,\n  faUntappd: faUntappd,\n  faUps: faUps,\n  faUsb: faUsb,\n  faUsps: faUsps,\n  faUssunnah: faUssunnah,\n  faVaadin: faVaadin,\n  faViacoin: faViacoin,\n  faViadeo: faViadeo,\n  faViadeoSquare: faViadeoSquare,\n  faViber: faViber,\n  faVimeo: faVimeo,\n  faVimeoSquare: faVimeoSquare,\n  faVimeoV: faVimeoV,\n  faVine: faVine,\n  faVk: faVk,\n  faVnv: faVnv,\n  faVuejs: faVuejs,\n  faWaze: faWaze,\n  faWeebly: faWeebly,\n  faWeibo: faWeibo,\n  faWeixin: faWeixin,\n  faWhatsapp: faWhatsapp,\n  faWhatsappSquare: faWhatsappSquare,\n  faWhmcs: faWhmcs,\n  faWikipediaW: faWikipediaW,\n  faWindows: faWindows,\n  faWix: faWix,\n  faWizardsOfTheCoast: faWizardsOfTheCoast,\n  faWolfPackBattalion: faWolfPackBattalion,\n  faWordpress: faWordpress,\n  faWordpressSimple: faWordpressSimple,\n  faWpbeginner: faWpbeginner,\n  faWpexplorer: faWpexplorer,\n  faWpforms: faWpforms,\n  faWpressr: faWpressr,\n  faXbox: faXbox,\n  faXing: faXing,\n  faXingSquare: faXingSquare,\n  faYCombinator: faYCombinator,\n  faYahoo: faYahoo,\n  faYammer: faYammer,\n  faYandex: faYandex,\n  faYandexInternational: faYandexInternational,\n  faYarn: faYarn,\n  faYelp: faYelp,\n  faYoast: faYoast,\n  faYoutube: faYoutube,\n  faYoutubeSquare: faYoutubeSquare,\n  faZhihu: faZhihu\n};\n\nexport { _iconsCache as fab, prefix, fa500px, faAccessibleIcon, faAccusoft, faAcquisitionsIncorporated, faAdn, faAdobe, faAdversal, faAffiliatetheme, faAirbnb, faAlgolia, faAlipay, faAmazon, faAmazonPay, faAmilia, faAndroid, faAngellist, faAngrycreative, faAngular, faAppStore, faAppStoreIos, faApper, faApple, faApplePay, faArtstation, faAsymmetrik, faAtlassian, faAudible, faAutoprefixer, faAvianex, faAviato, faAws, faBandcamp, faBattleNet, faBehance, faBehanceSquare, faBimobject, faBitbucket, faBitcoin, faBity, faBlackTie, faBlackberry, faBlogger, faBloggerB, faBluetooth, faBluetoothB, faBootstrap, faBtc, faBuffer, faBuromobelexperte, faBuysellads, faCanadianMapleLeaf, faCcAmazonPay, faCcAmex, faCcApplePay, faCcDinersClub, faCcDiscover, faCcJcb, faCcMastercard, faCcPaypal, faCcStripe, faCcVisa, faCentercode, faCentos, faChrome, faChromecast, faCloudscale, faCloudsmith, faCloudversify, faCodepen, faCodiepie, faConfluence, faConnectdevelop, faContao, faCpanel, faCreativeCommons, faCreativeCommonsBy, faCreativeCommonsNc, faCreativeCommonsNcEu, faCreativeCommonsNcJp, faCreativeCommonsNd, faCreativeCommonsPd, faCreativeCommonsPdAlt, faCreativeCommonsRemix, faCreativeCommonsSa, faCreativeCommonsSampling, faCreativeCommonsSamplingPlus, faCreativeCommonsShare, faCreativeCommonsZero, faCriticalRole, faCss3, faCss3Alt, faCuttlefish, faDAndD, faDAndDBeyond, faDashcube, faDelicious, faDeploydog, faDeskpro, faDev, faDeviantart, faDhl, faDiaspora, faDigg, faDigitalOcean, faDiscord, faDiscourse, faDochub, faDocker, faDraft2digital, faDribbble, faDribbbleSquare, faDropbox, faDrupal, faDyalog, faEarlybirds, faEbay, faEdge, faElementor, faEllo, faEmber, faEmpire, faEnvira, faErlang, faEthereum, faEtsy, faEvernote, faExpeditedssl, faFacebook, faFacebookF, faFacebookMessenger, faFacebookSquare, faFantasyFlightGames, faFedex, faFedora, faFigma, faFirefox, faFirstOrder, faFirstOrderAlt, faFirstdraft, faFlickr, faFlipboard, faFly, faFontAwesome, faFontAwesomeAlt, faFontAwesomeFlag, faFontAwesomeLogoFull, faFonticons, faFonticonsFi, faFortAwesome, faFortAwesomeAlt, faForumbee, faFoursquare, faFreeCodeCamp, faFreebsd, faFulcrum, faGalacticRepublic, faGalacticSenate, faGetPocket, faGg, faGgCircle, faGit, faGitAlt, faGitSquare, faGithub, faGithubAlt, faGithubSquare, faGitkraken, faGitlab, faGitter, faGlide, faGlideG, faGofore, faGoodreads, faGoodreadsG, faGoogle, faGoogleDrive, faGooglePlay, faGooglePlus, faGooglePlusG, faGooglePlusSquare, faGoogleWallet, faGratipay, faGrav, faGripfire, faGrunt, faGulp, faHackerNews, faHackerNewsSquare, faHackerrank, faHips, faHireAHelper, faHooli, faHornbill, faHotjar, faHouzz, faHtml5, faHubspot, faImdb, faInstagram, faIntercom, faInternetExplorer, faInvision, faIoxhost, faItchIo, faItunes, faItunesNote, faJava, faJediOrder, faJenkins, faJira, faJoget, faJoomla, faJs, faJsSquare, faJsfiddle, faKaggle, faKeybase, faKeycdn, faKickstarter, faKickstarterK, faKorvue, faLaravel, faLastfm, faLastfmSquare, faLeanpub, faLess, faLine, faLinkedin, faLinkedinIn, faLinode, faLinux, faLyft, faMagento, faMailchimp, faMandalorian, faMarkdown, faMastodon, faMaxcdn, faMedapps, faMedium, faMediumM, faMedrt, faMeetup, faMegaport, faMendeley, faMicrosoft, faMix, faMixcloud, faMizuni, faModx, faMonero, faNapster, faNeos, faNimblr, faNintendoSwitch, faNode, faNodeJs, faNpm, faNs8, faNutritionix, faOdnoklassniki, faOdnoklassnikiSquare, faOldRepublic, faOpencart, faOpenid, faOpera, faOptinMonster, faOsi, faPage4, faPagelines, faPalfed, faPatreon, faPaypal, faPennyArcade, faPeriscope, faPhabricator, faPhoenixFramework, faPhoenixSquadron, faPhp, faPiedPiper, faPiedPiperAlt, faPiedPiperHat, faPiedPiperPp, faPinterest, faPinterestP, faPinterestSquare, faPlaystation, faProductHunt, faPushed, faPython, faQq, faQuinscape, faQuora, faRProject, faRaspberryPi, faRavelry, faReact, faReacteurope, faReadme, faRebel, faRedRiver, faReddit, faRedditAlien, faRedditSquare, faRedhat, faRenren, faReplyd, faResearchgate, faResolving, faRev, faRocketchat, faRockrms, faSafari, faSalesforce, faSass, faSchlix, faScribd, faSearchengin, faSellcast, faSellsy, faServicestack, faShirtsinbulk, faShopware, faSimplybuilt, faSistrix, faSith, faSketch, faSkyatlas, faSkype, faSlack, faSlackHash, faSlideshare, faSnapchat, faSnapchatGhost, faSnapchatSquare, faSoundcloud, faSourcetree, faSpeakap, faSpeakerDeck, faSpotify, faSquarespace, faStackExchange, faStackOverflow, faStackpath, faStaylinked, faSteam, faSteamSquare, faSteamSymbol, faStickerMule, faStrava, faStripe, faStripeS, faStudiovinari, faStumbleupon, faStumbleuponCircle, faSuperpowers, faSupple, faSuse, faSymfony, faTeamspeak, faTelegram, faTelegramPlane, faTencentWeibo, faTheRedYeti, faThemeco, faThemeisle, faThinkPeaks, faTradeFederation, faTrello, faTripadvisor, faTumblr, faTumblrSquare, faTwitch, faTwitter, faTwitterSquare, faTypo3, faUber, faUbuntu, faUikit, faUniregistry, faUntappd, faUps, faUsb, faUsps, faUssunnah, faVaadin, faViacoin, faViadeo, faViadeoSquare, faViber, faVimeo, faVimeoSquare, faVimeoV, faVine, faVk, faVnv, faVuejs, faWaze, faWeebly, faWeibo, faWeixin, faWhatsapp, faWhatsappSquare, faWhmcs, faWikipediaW, faWindows, faWix, faWizardsOfTheCoast, faWolfPackBattalion, faWordpress, faWordpressSimple, faWpbeginner, faWpexplorer, faWpforms, faWpressr, faXbox, faXing, faXingSquare, faYCombinator, faYahoo, faYammer, faYandex, faYandexInternational, faYarn, faYelp, faYoast, faYoutube, faYoutubeSquare, faZhihu };\n","import { library, dom } from '@fortawesome/fontawesome-svg-core';\nimport { far } from '@fortawesome/free-regular-svg-icons';\nimport { fas } from '@fortawesome/free-solid-svg-icons';\nimport { fab } from '@fortawesome/free-brands-svg-icons';\n\n\nexport const init = () => {\n  library.add(far);\n  library.add(fas);\n  library.add(fab);\n  dom.watch();\n};\n\nexport default init;\n","\nimport {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  BuildingClassTypes,\n  GetBuildingClassesSucceededAction,\n  GetBuildingTypesSucceededAction,\n} from './actions';\nimport {\n  singleOrArray,\n} from 'ats-utils/src';\nimport {\n  BuildingClassListItem,\n  ListItem,\n} from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nexport interface IBuildingReducerState {\n  isMulti: boolean;\n  requestSent: boolean;\n  buildings: object[];\n  multiBuildings: object[];\n  multiBuildingTypes: object[];\n  buildingTypes: Map<string|number, List<IMap<ListItem<string, string>>>>; // @@TODO STRING ID HACK\n  selectedBuildingClasses: any[];\n  buildingType: string;\n  buildingClass: string;\n  error: string;\n\n  buildingClasses: Map<number | string, IMap<BuildingClassListItem>>;\n}\n\nconst INITIAL_STATE = fromJS({\n  isMulti: false,\n  requestSent: false,\n  buildings: [],\n  multiBuildings: [],\n  multiBuildingTypes: [],\n  buildingType: '',\n  buildingClass: '',\n  selectedBuildingClasses: [],\n  error: '',\n\n  buildingClasses: {},\n  buildingTypes: {},\n});\nexport const reducer = (state: IMapNonRecursive<IBuildingReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case BuildingClassTypes.GET_BUILDING_CLASSES_SUCCEEDED:\n      // console.error('getBuildingClassesScuceeded', { // tslint:disable-line\n      //   action,\n      // });\n      const {\n        payload: buildingClassesSucceededPayload\n       } = action as GetBuildingClassesSucceededAction;\n      const {\n        isSingle,\n        isMulti,\n        list: buildingClassesList,\n      } = buildingClassesSucceededPayload;\n      return state.update(\n        'buildingClasses',\n        (stateList: Map<string|number, IMap<BuildingClassListItem>>) => {\n          return buildingClassesList.reduce(\n            (acc: Map<string|number, IMap<BuildingClassListItem>>, listItem: IMap<BuildingClassListItem>) => {\n              const buildingClassListItem = listItem.withMutations((listItemCtx) => {\n                listItemCtx.set('isMulti', isMulti != null ? isMulti : false);\n                listItemCtx.set('isSingle', isSingle != null ? isSingle : false);\n              });\n              return acc.set(\n                listItem.get('id'),\n                acc.get(listItem.get('id'), buildingClassListItem).withMutations((listItemCtx) => {\n                  if (isMulti != null) {\n                    listItemCtx.set('isMulti', isMulti);\n                  }\n                  if (isSingle != null) {\n                    listItemCtx.set('isSingle', isSingle);\n                  }\n                }),\n              );\n            },\n            stateList\n          ).toOrderedMap().sort((buildingClassA: IMap<BuildingClassListItem>, buildingClassB: IMap<BuildingClassListItem>) => {\n            const buildingClassAName = buildingClassA.get('value');\n            const buildingClassBName = buildingClassB.get('value');\n            if (buildingClassAName === buildingClassBName) {\n              return 0;\n            } else if (buildingClassAName < buildingClassBName) {\n              return -1;\n            }\n            return 1;\n          });\n        }\n      );\n      case BuildingClassTypes.GET_BUILDING_TYPES_SUCCEEDED:\n        // console.error('getBuildingTypesSucceeded', { // tslint:disable-line\n        //   action,\n        // });\n        const {\n          payload: buildingTypesSucceededPayload\n         } = action as GetBuildingTypesSucceededAction;\n        const {\n          id: buildingClassId,\n          list: buildingTypesList,\n        } = buildingTypesSucceededPayload;\n        return state.update(\n          'buildingTypes',\n          (stateList: Map<string|number, List<IMap<ListItem<string, string>>>>) => {\n            return stateList.set(buildingClassId, buildingTypesList);\n          }\n        );\n    case BuildingClassTypes.GET_BUILDING_CLASS:\n      return state.withMutations((ctx) => {\n        ctx.set('isMulti', false);\n        ctx.set('requestSent', true);\n      });\n    case BuildingClassTypes.GET_BUILDING_SUCCEEDED:\n      return state.withMutations((ctx) => {\n        ctx.set('requestSent', false);\n        ctx.setIn(singleOrArray(action.payload.path), action.payload.list);\n      });\n    case BuildingClassTypes.GET_BUILDING_FAILED:\n      return state.set('error', action.payload);\n    case BuildingClassTypes.GET_MULTI_BUILDING:\n      return state.withMutations((ctx) => {\n        ctx.set('isMulti', action.payload);\n        ctx.set('requestSent', true);\n      });\n    case BuildingClassTypes.GET_MULTIPLE_BUILDING_TYPES:\n      return state.withMutations((ctx) => {\n        if (ctx.get('multiBuildingTypes', [])) {\n          ctx.set('requestSent', true);\n          ctx.updateIn(['multiBuildingTypes'], (types: any) => {\n            return types.concat(ctx.get('multiBuildingTypes'));\n          });\n        }\n      });\n    case BuildingClassTypes.SELECT_BUILDING_TYPE:\n      return state.set('buildingType', action.payload);\n    case BuildingClassTypes.SELECT_BUILDING_TYPES:\n      return state.withMutations((ctx) => {\n        if (ctx.get('selectedBuildingClasses', [])) {\n          ctx.set('requestSent', true);\n          ctx.updateIn(['selectedBuildingClasses'], (types: any) => {\n            return types.concat(action.payload);\n          });\n        }\n      });\n    case BuildingClassTypes.SELECT_BUILDING_CLASS:\n      return state.set('buildingClass', action.payload);\n    case BuildingClassTypes.GET_BUILDING_TYPES:\n      return state.set('requestSent', true);\n    default:\n      return state;\n  }\n};\n\nexport default reducer;","import {\n  takeEvery,\n  call,\n  put,\n  fork,\n  select,\n} from 'redux-saga/effects';\nimport {\n  BuildingClassTypes,\n  GetBuildingFailedAction,\n  GetBuildingTypesAction,\n  GetBuildingClassesSucceededAction,\n  GetBuildingTypesSucceededAction,\n} from './actions';\nimport {\n  fromJS,\n  List,\n  Map\n} from 'immutable';\nimport {\n  BuildingClassListItem,\n  ListItem\n} from '../../models';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectBuildingTypes\n} from './selectors';\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport { AtsApiCallAction } from '../AtsModule/actions';\n\nexport default function* buildingSaga() {\n  yield takeEvery(BuildingClassTypes.GET_BUILDING_TYPES, getBuildingTypes);\n  yield takeEvery(BuildingClassTypes.GET_BUILDING_CLASSES, getBuildingClasses);\n}\n\ninterface IBuildingResponse {\n  payload: {\n    list: any,\n    payload?: any\n  };\n  meta: object;\n}\n\nfunction* getBuildingClasses(\n) {\n  yield fork(getBuildingClassesSingle);\n  yield fork(getBuildingClassesMulti);\n}\n\nfunction* getBuildingClassesSingle(\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: IBuildingResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getBuildingClass',\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<BuildingClassListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (list == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetBuildingClassesSucceededAction({\n        isSingle: true,\n        list\n      }));\n    }\n  } else {\n    yield put(new GetBuildingFailedAction({err}));\n  }\n}\n\nfunction* getBuildingClassesMulti(\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: IBuildingResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getBuildingClass',\n      body: {\n        isMulti: true\n      },\n    },\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<BuildingClassListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (list == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetBuildingClassesSucceededAction({\n        isMulti: true,\n        list\n      }));\n    }\n  } else {\n    yield put(new GetBuildingFailedAction({err}));\n  }\n}\n\nfunction* getBuildingTypes(\n  getBuildingTypesAction: GetBuildingTypesAction\n) {\n  const  {\n    payload: id,\n  } = getBuildingTypesAction;\n\n  const buildingTypes: Map<string|number, List<IMap<ListItem>>> = yield select(makeSelectBuildingTypes());\n  if (!buildingTypes.keySeq().includes(id)) {\n    const {\n      data,\n      err,\n    }: {\n      data: IBuildingResponse,\n      err: Error\n    } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n      payload: [\n        id,\n        {\n          service: 'list',\n          endpoint: 'getBuildingType',\n          body: {\n            isMulti: true\n          },\n        }\n      ],\n    }));\n    if (data) {\n      const immutableData = fromJS(data);\n      const list: List<IMap<ListItem<string, string>>> = immutableData.getIn(['payload', 'list', 'listItems']);\n      if (list == null) {\n        console.error('Invalid response', data); // tslint:disable-line\n      } else {\n        yield put(new GetBuildingTypesSucceededAction({id, list}));\n      }\n    } else {\n      yield put(new GetBuildingFailedAction({err}));\n    }\n  }\n}","/*\n * BuildingModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IBuildingReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IBuildingModuleComponentProps {\n}\n\ninterface IBuildingModuleProps extends IBuildingModuleComponentProps {\n  reducerState: IMapNonRecursive<IBuildingReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype BuildingModuleProps = IBuildingModuleProps;\n\nclass BuildingModule extends React.Component<BuildingModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={\n            () => {\n              return <Hide\n                show={true}\n                title={'debug'}\n              >\n                {/* {safeStringify(reducerState && reducerState.toJS())} */}\n              </Hide>;\n            }\n          }\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IBuildingModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IBuildingModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(BuildingModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './BuildingModule';\nexport default Module;","import {\n  fromJS,\n  List,\n  Map,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  ErrorActionTypes,\n  ResetErrorAction,\n  AddErrorAction,\n  ToggleErrorMenuAction,\n} from './actions';\n\nimport {\n  Error,\n} from '../../models';\n\nexport interface IErrorReducerState {\n  errors: List<IMap<Error>>;\n  errorMenuOpen: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  errors: [],\n  errorMenuOpen: false,\n});\n\nexport const reducer = (state: IMapNonRecursive<IErrorReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ErrorActionTypes.ERROR: {\n      const {\n        payload\n      } = action as AddErrorAction;\n\n      const {\n        message,\n        id,\n        meta: _meta,\n        suppressGlobalErrorNotification,\n      } = payload;\n\n      if (!payload) {\n        return state;\n      }\n\n      if (suppressGlobalErrorNotification) {\n        return state;\n      }\n\n      const meta = fromJS({\n        id,\n        ..._meta\n      }) as Map<string, any>;\n\n      const error = new Error({\n        message,\n        meta,\n      }).toImmutable();\n      // Restrict errors to 20 most recent after pushing new error\n      // open error menu if not open\n      return state.withMutations((ctx) => {\n        ctx.set('errors', state.get('errors').push(error).slice(-20));\n        ctx.set('errorMenuOpen', true);\n      });\n    }\n\n    case ErrorActionTypes.RESET_ERROR: {\n      const {\n        payload,\n      } = action as ResetErrorAction;\n\n      const {\n        index,\n        id,\n        meta: _meta,\n      } = payload;\n\n      const meta = fromJS({\n        id,\n        ..._meta\n      }) as Map<string, any>;\n\n      if (index != null) {\n        return state.set('errors', state.get('errors').splice(index, 1));\n      } else if (_meta != null || id != null) {\n        return state.set('errors', state.get('errors').filterNot((error) => (error.get('meta') || Map<string, any>()).equals(meta)));\n      }\n      return state.set('errors', fromJS([]));\n    }\n\n    case ErrorActionTypes.TOGGLE_ERROR_MENU: {\n      const {\n        payload: open,\n      } = action as ToggleErrorMenuAction;\n      if (open == null) {\n        return state.set('errorMenuOpen', !(state.get('errorMenuOpen') || false));\n      }\n      return state.set('errorMenuOpen', open);\n    }\n\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","import {\n  call,\n} from 'redux-saga/effects';\n\nimport {\n  atsApiRequire,\n  getAtsApiState,\n} from '../AtsModule/saga';\n\nexport default function * defaultSaga() {\n\n  yield call(atsApiRequire, getAtsApiState('init'));\n  yield call(atsApiRequire, getAtsApiState('token'));\n  yield call(atsApiRequire, getAtsApiState('identity'));\n  // console.debug('Application Loaded');\n}","/*\n * ErrorModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IErrorReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IErrorModuleComponentProps {\n\n}\n\ninterface IErrorModuleProps extends IErrorModuleComponentProps {\n  reducerState: IMapNonRecursive<IErrorReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ErrorModuleProps = IErrorModuleProps;\n\nclass ErrorModule extends React.Component<ErrorModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IErrorModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IErrorModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ErrorModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './ErrorModule';\nexport default Module;\n","/* tslint:disable */\nimport {\n  fromJS, List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ProjectLocationTypes,\n  GetCountryAdminDivisionSucceededAction,\n  GetCountriesSucceededAction,\n  GetProvinceSucceededAction,\n  GetCitySucceededAction,\n} from './actions';\nimport { ListItem } from '../../models';\n\nexport interface IProjectLocationReducerState {\n  adminDivisions: Map<number, string>;\n  countries: List<IMap<ListItem>>;\n  provinces: List<IMap<ListItem>>;\n  cities: List<IMap<ListItem>>;\n  countryName: string;\n  provinceName: string;\n  cityName: string;\n  error: string;\n  divisionName?: string;\n}\nconst INITIAL_STATE = fromJS({\n  adminDivisions: {},\n  countries: [],\n  provinces: [],\n  cities: [],\n  error: ''\n});\nexport const reducer = (state: IMapNonRecursive<IProjectLocationReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ProjectLocationTypes.GET_COUNTRY_ADMIN_DIVISION_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetCountryAdminDivisionSucceededAction;\n      const {\n        countryId,\n        adminDivision,\n      } = payload;\n      return state.setIn(['adminDivisions', countryId], adminDivision);\n    }\n    case ProjectLocationTypes.GET_COUNTRIES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetCountriesSucceededAction;\n      const {\n        list,\n      } = payload;\n      return state.set('countries', list);\n    }\n    case ProjectLocationTypes.GET_COUNTRIES_FAILED:\n      return state.withMutations((ctx) => {\n        ctx.set('countries', List<IMap<ListItem>>());\n        ctx.set('error', action.payload);\n      });\n    case ProjectLocationTypes.GET_PROVINCE_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetProvinceSucceededAction;\n      const {\n        list,\n      } = payload;\n      return state.set('provinces', list);\n    }\n    case ProjectLocationTypes.GET_PROVINCE_FAILED: {\n      return state.set('error', action.payload);\n    }\n    case ProjectLocationTypes.GET_CITY_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetCitySucceededAction;\n      const {\n        list,\n      } = payload;\n      return state.set('cities', list);\n    }\n    case ProjectLocationTypes.GET_CITY_FAILED: {\n      return state.set('error', action.payload);\n    }\n    case ProjectLocationTypes.CLEAR_LOCATION_INFO: {\n      return INITIAL_STATE;\n    }\n    case ProjectLocationTypes.CLEAR_PROVINCE_LIST: {\n      return state.set('provinces', fromJS([]));\n    }\n    case ProjectLocationTypes.CLEAR_CITY_LIST: {\n      return state.set('cities', fromJS([]));\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/* tslint:disable */\nimport {\n  takeEvery,\n  takeLatest,\n  put,\n  call,\n  select\n} from 'redux-saga/effects';\nimport {\n  fromJS, List,\n} from 'immutable';\nimport {\n  ProjectLocationTypes,\n  GetCountriesAction,\n  GetCountriesSucceededAction,\n  GetCountriesFailedAction,\n  GetProvinceAction,\n  GetProvinceSucceededAction,\n  GetProvincesFailedAction,\n  GetCityAction,\n  GetCitySucceededAction,\n  GetCityFailedAction,\n  GetCountryAdminDivisionAction,\n  GetCountryAdminDivisionSucceededAction,\n  ClearLocationInfo,\n  ClearCityList,\n  ClearProvinceList,\n} from './actions';\n\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport { ListItem } from '../../models';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport {\n  AtsApiCallAction, ApiCallAction,\n} from '../AtsModule/actions';\nimport { makeSelectCountries } from './selectors';\nimport  * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectAmplitudeData } from '../AtsModule/selectors';\n\nexport default function* projectLocationSaga() {\n  yield takeEvery(ProjectLocationTypes.GET_COUNTRY_ADMIN_DIVISION, getCountryAdminDivision);\n  yield takeEvery(ProjectLocationTypes.GET_COUNTRIES, getCountries);\n  yield takeEvery(ProjectLocationTypes.GET_PROVINCE, getProvinces);\n  yield takeEvery(ProjectLocationTypes.GET_CITY, getCities);\n}\n\n\nfunction* getCountryAdminDivision(\n  {\n    payload: {\n      countryId,\n    }\n  }: GetCountryAdminDivisionAction\n) {\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      countryId,\n      {\n        service: 'location',\n        endpoint: 'getAdminDivision',\n      }\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    // sample 06/03/2019\n    // {\"meta\":{\"render\":\"41.74 ms\",\"apiVersion\":\"2.1.1\",\"serviceName\":\"location\",\"serviceVersion\":\"V2\",\"requestTime\":\"2019-03-06T22:06:19+00:00\",\"requestMethod\":\"GET\",\"requestPath\":\"/adminDivision/6252001\",\"requestHost\":\"staging.atsspec.local\",\"requestQueryString\":null,\"versionNumbers\":{\"service\":\"2.1.1\",\"ats-framework\":\"1.1.2\",\"ats-framework-ext\":\"2.2.4\",\"transmission-layer\":\"1.5.2\"},\"cacheInfo\":null},\"payload\":{\"location\":{\"adminDivision\":[{\"id\":\"2\",\"countryId\":6252001,\"firmId\":null,\"value\":\"state\"}]}}}\n    const adminDivision: string = immutableData.getIn(['payload', 'location', 'adminDivision', 0, 'value']);\n    if (adminDivision == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCountryAdminDivisionSucceededAction({\n        countryId,\n        adminDivision,\n      }));\n    };\n  } else {\n    console.debug('no admin division', {err});\n  }\n}\ninterface IProjectLocationResponse {\n  payload: any;\n  meta: object;\n}\n\nfunction* getCountries(\n  countryAction: GetCountriesAction\n) {\n  // console.error('getCountries', {\n  //   apiCallWaitingAction,\n  // });\n  const {\n    data,\n    err\n  }: {\n    data: IProjectLocationResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      {\n        service: 'list',\n        endpoint: 'getCountries',\n      },\n    ],\n  }));\n  // console.error('getCountries', {\n  //   data,\n  //   err,\n  // });\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<ListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (list == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCountriesSucceededAction({list}));\n    };\n  } else {\n    yield put(new GetCountriesFailedAction({err}));\n  }\n}\n\nfunction* getProvinces(\n  provinceAction: GetProvinceAction\n) {\n  const  {\n    payload\n  } = provinceAction;\n\n  yield put(new ClearProvinceList());\n  yield put(new ClearCityList());\n\n  // console.error('getProvinces', { // tslint:disable-line\n  //   payload,\n  //   provinceAction\n  // });\n\n  if (isNaN(Number(payload))) {\n    const countries = yield select(makeSelectCountries());\n    const amplitudeData= yield select(makeSelectAmplitudeData());\n    amplitude.logEvent('NaN Province Search', {\n      countryId: payload,\n      type: typeof payload,\n      source: 'Location Saga',\n      data: countries?.toJS(),\n      ...amplitudeData\n    });\n  }\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectLocationResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      payload,\n      {\n        service: 'list',\n        endpoint: 'getStates',\n      },\n    ],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<ListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (list == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProvinceSucceededAction({list}));\n    };\n  } else {\n    yield put(new GetProvincesFailedAction({err}));\n  }\n}\n\nfunction* getCities(\n  cityAction: GetCityAction\n) {\n  const {\n    payload\n  } = cityAction;\n\n  yield put(new ClearCityList());\n\n  const {\n    data,\n    err\n  }: {\n    data: IProjectLocationResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      payload,\n      {\n        service: 'list',\n        endpoint: 'getCities',\n      },\n    ],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<ListItem>> = immutableData.getIn(['payload', 'list', 'listItems']);\n    if (list == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetCitySucceededAction({list}));\n    };\n  } else {\n    yield put(new GetCityFailedAction({err}));\n  }\n}\n\n","/*\n * ProjectLocationModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IProjectLocationReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IProjectLocationModuleComponentProps {\n}\n\ninterface IProjectLocationModuleProps extends IProjectLocationModuleComponentProps {\n  reducerState: IMapNonRecursive<IProjectLocationReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ProjectLocationModuleProps = IProjectLocationModuleProps;\n\nclass ProjectLocationModule extends React.Component<ProjectLocationModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IProjectLocationModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IProjectLocationModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ProjectLocationModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\n\nimport Module from './ProjectLocation';\nexport default Module;\n","/* tslint:disable */\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Set,\n  Map,\n  fromJS,\n  List,\n  OrderedSet\n} from 'immutable';\nimport {\n  ProductActionTypes,\n  ISeriesFilterPayload,\n  GetProductCategoriesSucceededAction,\n  MatchingProductsSucceededAction,\n  UpdateSeriesAction,\n  SelectSeriesAction,\n  SeriesFilterAddAction,\n  SeriesFilterRemoveAction,\n  QuickSearchAction,\n  CategorySearchTypeAction,\n  GetSearchResultsSucceededAction,\n  GetProductsFailedAction,\n  FilterProductCategoriesAction,\n  SelectNewCategoryAction,\n  SelectCategoryAction,\n  ProductCategorySelectionAction,\n  UpdateSeriesFilterInputAction,\n  GetAttributeOrderSucceededAction,\n  SetCategoryIdAction,\n  ClearSearchResultsWithCategoryNameAction,\n  SetEditingProductIndexAction,\n  GetAttributeOptionsOrderSucceededAction,\n  ProductFilterRemoveAction,\n  ProductFilterAddAction,\n  SeriesSpecificFilterAddAction,\n  SeriesSpecificFilterRemoveAction,\n  SeriesSpecificFilterClearAction,\n  SkipRuleEngineAction,\n  SeriesSpecificFilterClearThenCheckProductAndAttributesAction,\n  QuickSearchFirmLoadingAction,\n  SearchProductsWithFilterSucceededAction,\n  SearchProductsWithFilterLoadingAction,\n  CategoryLoadingAction,\n  GetManufacturersByCategoryIdSucceededAction,\n  SetSortSeriesByAction,\n  SetRecommendedSpecProductAction,\n  SetIsRecommendedSpecProductLoadingAction,\n  SaveFirmCategoryLoadingAction,\n  ProductFilterClearAction,\n  SeriesFilterClearAction,\n  GetMatchingPriceSummarySucceededAction,\n  SetSeriesSearchOptionsAction,\n  SetHideDiscontinuedSeriesAction,\n  SetShowDraftSeriesOnlyAction,\n  SetIsGettingBrandVariationsAction,\n  GetBrandVariationsSucceededAction,\n  SetIsUpdatinggBrandVariationAction,\n  UpdateBrandVariationByIdSucceededAction,\n  SetIsGettingAiExclusionAction,\n  SetIsAddingAiExclusionAction,\n  SetIsUpdatingAiExclusionAction,\n  SetIsDeletingAiExclusionAction,\n  GetAiExclusionSucceededAction,\n  SearchDalSeriesWithFilterLoadingAction,\n  SearchDalSeriesWithFilterSucceededAction,\n  RemoveCategorySpecificSeriesFilterAction,\n  SetCategorySpecificSeriesFiltersAction,\n  SetSeriesSpecificInitSelectionsAction,\n  ConvertInitSelectionsToSeriesSpecificFiltersAction,\n  SetSelectedSeriesSpecificInitDisabledSelectionsAction,\n  DeleteSelectedSeriesSpecificInitDisabledSelectionsAction,\n} from './actions';\n\n// import {\n//   LOCATION_CHANGE,\n// } from 'connected-react-router/immutable';\nimport {\n  Series,\n  ProductCategoryGroup,\n  MatchingProduct,\n  Attribute,\n  Product,\n  ProductCategory,\n  ListItem,\n  Manufacturer,\n  BrandVariation,\n  AiExclusion,\n} from '../../models';\nimport {\n  CategoryDisplayType,\n  QuickSearchType\n} from './constants';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport CategoryDisplayTypeListItem from '../../models/CategoryDisplayTypeListItem';\nimport AttributeOption from '../../models/AttributeOptions';\nimport { init } from '../..';\n\nexport type SortSeriesBy = 'mostRecent' | 'mostSpecified' | 'recommended' | 'priceHighToLow' | 'priceLowToHigh';\nexport interface IProductReducerState {\n  productCategoryId: number;\n  productCategory: -1,\n  searchResults: Map<string, List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>>;\n  requestSent: boolean;\n  productCategories: Map<string, IMap<ProductCategoryGroup>>;\n  productTypeToProductCategoryReverseMap: Map<number, List<IMap<ProductCategoryGroup>>>;\n  productCategoryFilters: IMap<CategoryDisplayTypeListItem>;\n  searchTerm: string;\n  categorySearchType: QuickSearchType;\n  seriesFilters: Map<string, Set<any>>;\n  categorySpecificSeriesFilters: Map<string, any>;\n  productFilters: Map<string, Set<any>>;\n  seriesSpecificInitSelections: Map<string, Map<string, string>>;\n  seriesSpecificInitDisabledSelections: Map<string, Map<string, Set<string | number>>>;\n  seriesSpecificFilters: Map<number, Map<string, Set<any>>>;\n  selectedSeriesId: number;\n  matchingProducts: Map<number, Map<string, IMap<MatchingProduct>>>;\n  lastMatchingProducts: Map<number, IMap<MatchingProduct>>;\n  matchingProductPriceSummary: Map<number, any>;\n  series: Map<number, IMap<Series>>;\n  lastFetchedSeriesIds: OrderedSet<number>;\n  error?: Error;\n  productCategorySelect: CategoryDisplayType;\n  seriesFilterInput: string;\n  attributeWhiteList: OrderedSet<string>;\n  categoryToAttributeWhitelistMap: Map<number, OrderedSet<string>>;\n  packageProducts: any;\n  seriesList: List<IMap<Series>>;\n  seriesLoading: boolean;\n  isLoadingQuickSearchResults: boolean;\n  editProductIndex: number;\n  attributeOptions: List<IMap<AttributeOption>>;\n  checkProductsAndAttributesLoading: boolean;\n  skipRuleEngine: boolean;\n  selectingCategory: boolean;\n  quickSearchFirmLoading: boolean;\n  products: List<IMap<Product>>;\n  productsHasNextPage: boolean;\n  productsLoading: boolean;\n  categoryLoading: boolean;\n  categoryManfacturers: List<IMap<Manufacturer>>;\n  sortSeriesBy: SortSeriesBy;\n  recommendedSpecProducts: Map<number, Map<string, IMap<Product>>>;\n  isRecommendedSpecProductLoading: boolean;\n  isSaveFirmCategoryLoading: boolean;\n  seriesListHasNextPage: boolean;\n  seriesSearchOptions: Map<string, any>;\n  hideDiscontinuedSeries: boolean;\n  showDraftSeriesOnly: boolean;\n  // brand variations\n  isGettingBrandVariations: boolean;\n  brandVariations: List<IMap<BrandVariation>>;\n  isUpdatingBrandVariation: boolean;\n  // ai exclusions\n  aiExclusion: IMap<AiExclusion>;\n  isGettingAiExclusion: boolean;\n  isAddingAiExclusion: boolean;\n  isUpdatingAiExclusion: boolean;\n  isDeletingAiExclusion: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  searchResults: {},\n  requestSent: false,\n  productCategories: {},\n  productCategoryId: -1,\n  productTypeToProductCategoryReverseMap: {},\n  productCategoryFilters: {},\n  seriesLoading: false,\n  searchTerm: '',\n  categorySearchType: QuickSearchType.CATEGORY,\n  seriesFilters: {},\n  categorySpecificSeriesFilters: {},\n  productFilters: {},\n  seriesSpecificInitSelections: {},\n  seriesSpecificInitDisabledSelections: {},\n  seriesSpecificFilters: {},\n  selectedSeriesId: -1,\n  matchingProducts: {},\n  lastMatchingProducts: {},\n  matchingProductPriceSummary: null,\n  series: {},\n  lastFetchedSeriesIds: OrderedSet<number>(),\n  productCategorySelect: CategoryDisplayType.DISPLAY_BY_DIVISION,\n  seriesFilterInput: '',\n  attributeWhiteList: OrderedSet<string>(),\n  categoryToAttributeWhitelistMap: {},\n  packageProducts: [],\n  editProductIndex: -1,\n  attributeOptions: [],\n  checkProductsAndAttributesLoading: false,\n  skipRuleEngine: false,\n  isLoadingQuickSearchResults: false,\n  selectingCategory: false,\n  quickSearchFirmLoading: false,\n  products: [],\n  productsHasNextPage: false,\n  productsLoading: true,\n  categoryLoading: false,\n  categoryManfacturers: [],\n  sortSeriesBy: 'mostRecent',\n  recommendedSpecProducts: {},\n  isRecommendedSpecProductLoading: false,\n  isSaveFirmCategoryLoading: false,\n  seriesListHasNextPage: false,\n  seriesSearchOptions: { limit: 10, offset: 0},\n  hideDiscontinuedSeries: false,\n  showDraftSeriesOnly: false,\n  isGettingBrandVariations: false,\n  brandVariations: [],\n  isUpdatingBrandVariation: false,\n  aiExclusion: {},\n  isGettingAiExclusion: false,\n  isAddingAiExclusion: false,\n  isUpdatingAiExclusion: false,\n  isDeletingAiExclusion: false,\n});\n\nexport const reducer = (state: IMapNonRecursive<IProductReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ProductActionTypes.SET_SERIES_SPECIFIC_INIT_SELECTIONS: {\n      const { payload } = action as SetSeriesSpecificInitSelectionsAction;\n      return state.set('seriesSpecificInitSelections', payload.seriesSpecificInitSelections);\n    }\n    case ProductActionTypes.SET_CATEGORY_SPECIFIC_SERIES_FILTERS: {\n      const { payload } = action as SetCategorySpecificSeriesFiltersAction;\n      return payload.filterKey != null\n        ? state.setIn(['categorySpecificSeriesFilters', payload.filterKey], payload.categorySpecificSeriesFilters)\n        : state.set('categorySpecificSeriesFilters', payload.categorySpecificSeriesFilters);\n    }\n    case ProductActionTypes.REMOVE_CATEGORY_SPECIFIC_SERIES_FILTER: {\n      const { payload } = action as RemoveCategorySpecificSeriesFilterAction;\n      return state.deleteIn(['categorySpecificSeriesFilters', payload.filterKey]);\n    }\n    case ProductActionTypes.GET_AI_EXCLUSION_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAiExclusionSucceededAction\n      return state.set('aiExclusion', payload.aiExclusion);\n    }\n    case ProductActionTypes.SET_IS_GETTING_AI_EXCLUSION: {\n      const {\n        payload\n      } = action as SetIsGettingAiExclusionAction\n      return state.set('isGettingAiExclusion', payload);\n    }\n    case ProductActionTypes.SET_IS_ADDING_AI_EXCLUSIONS: {\n      const {\n        payload\n      } = action as SetIsAddingAiExclusionAction\n      return state.set('isAddingAiExclusion', payload);\n    }\n    case ProductActionTypes.SET_IS_UPDATING_AI_EXCLUSION: {\n      const {\n        payload\n      } = action as SetIsUpdatingAiExclusionAction\n      return state.set('isUpdatingAiExclusion', payload);\n    }\n    case ProductActionTypes.SET_IS_DELETING_AI_EXCLUSION: {\n      const {\n        payload\n      } = action as SetIsDeletingAiExclusionAction\n      return state.set('isDeletingAiExclusion', payload);\n    }\n    case ProductActionTypes.SET_IS_GETTING_BRAND_VARIATIONS: {\n      const {\n        payload\n      } = action as SetIsGettingBrandVariationsAction\n      return state.set('isGettingBrandVariations', payload);\n    }\n    case ProductActionTypes.GET_BRAND_VARIATIONS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetBrandVariationsSucceededAction\n      return state.set('brandVariations', payload.brandVariations);\n    }\n    case ProductActionTypes.SET_IS_UPDATING_BRAND_VARIATION: {\n      const {\n        payload\n      } = action as SetIsUpdatinggBrandVariationAction\n      return state.set('isUpdatingBrandVariation', payload);\n    }\n    case ProductActionTypes.UPDATE_BRAND_VARIATION_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateBrandVariationByIdSucceededAction\n      return state.set('brandVariations', payload.brandVariations);\n    }\n    case ProductActionTypes.SET_SORT_SERIES_BY: {\n      const { payload\n      } = action as SetSortSeriesByAction\n      return state.set('sortSeriesBy', payload).setIn(['seriesSearchOptions', 'offset'], 0); // when sort by changes, it will trigger search so always set to first page\n    }\n    case ProductActionTypes.SET_SERIES_SEARCH_OPTIONS: {\n      const { payload\n      } = action as SetSeriesSearchOptionsAction\n      return state.set('seriesSearchOptions', payload.option);\n    }\n    case ProductActionTypes.SET_HIDE_DISCONTINUED_SERIES: {\n      const { payload\n      } = action as SetHideDiscontinuedSeriesAction\n      return state.set('hideDiscontinuedSeries', payload);\n    }\n    case ProductActionTypes.SET_SHOW_DRAFT_SERIES_ONLY: {\n      const { payload\n      } = action as SetShowDraftSeriesOnlyAction\n      return state.set('showDraftSeriesOnly', payload);\n    }\n    case ProductActionTypes.SET_IS_RECOMMENDED_SPEC_PRODUCT_LOADING_ACTION: {\n      const { payload } = action as SetIsRecommendedSpecProductLoadingAction;\n      return state.set('isRecommendedSpecProductLoading', payload);\n    }\n    case ProductActionTypes.SET_RECOMMENDED_SPEC_PRODUCT_ACTION: {\n      const {\n        payload\n      } = action as SetRecommendedSpecProductAction;\n      const {\n        seriesId,\n        product\n      } = payload;\n      return state.setIn(['recommendedSpecProducts', seriesId, 'product'], product);\n    }\n    case ProductActionTypes.RESET_CATEGORY_MANUFACTURERS: {\n      return state.set('categoryManfacturers', INITIAL_STATE.get('categoryManfacturers'));\n    }\n    case ProductActionTypes.GET_MANUFACTURERS_BY_CATEGORY_ID_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetManufacturersByCategoryIdSucceededAction;\n      return state.set('categoryManfacturers', payload);\n    }\n    case ProductActionTypes.RESET_PRODUCTS: {\n      return state.set('products', List()).set('productsHasNextPage', false);\n    }\n    case ProductActionTypes.CATEGORY_LOADING: {\n      const {\n        payload,\n      } = action as CategoryLoadingAction;\n      return state.set('categoryLoading', payload);\n    }\n    case ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER_LOADING: {\n      const {\n        payload,\n      } = action as SearchDalSeriesWithFilterLoadingAction;\n      return state.set('seriesLoading', payload);\n    }\n    case ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchDalSeriesWithFilterSucceededAction;\n      return state.set('seriesList', payload.seriesList).set('seriesListHasNextPage', payload.seriesListHasNextPage);\n    }\n    case ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER_LOADING: {\n      const {\n        payload,\n      } = action as SearchProductsWithFilterLoadingAction;\n      return state.set('productsLoading', payload);\n    }\n    case ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchProductsWithFilterSucceededAction;\n      return state.set('products', payload.products).set('productsHasNextPage', payload.productsHasNextPage);\n    }\n    case ProductActionTypes.SKIP_RULE_ENGINE: {\n      const {\n        payload,\n      } = action as SkipRuleEngineAction;\n      return state.set('skipRuleEngine', payload);\n    }\n    case ProductActionTypes.RESET_ATTRIBUTE_OPTIONS: {\n      return state.set('attributeOptions', List())\n    }\n    case ProductActionTypes. GET_ATTRIBUTE_OPTIONS_ORDER_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAttributeOptionsOrderSucceededAction;\n      const {\n        attributeOptions,\n      } = payload;\n\n      return state.set('attributeOptions', attributeOptions)\n    }\n    case ProductActionTypes.RESET_EDITING_PRODUCT_INDEX: {\n      return state.set('editProductIndex', -1);\n    }\n    case ProductActionTypes.EDITING_PRODUCT_INDEX: {\n      const {\n        payload,\n      } = action as SetEditingProductIndexAction;\n      const {\n        editProductIndex,\n      } = payload;\n      return state.set('editProductIndex', editProductIndex);\n    }\n    case ProductActionTypes.GET_ATTRIBUTE_ORDER_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAttributeOrderSucceededAction;\n      const {\n        categoryId,\n        attributeList\n      } = payload;\n\n      return state.setIn(['categoryToAttributeWhitelistMap', categoryId], attributeList)\n    }\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case ProductActionTypes.SELECT_NEW_CATEGORY: {\n      const {\n        payload,\n      } = action as SelectNewCategoryAction;\n      const {\n        missingRule\n      } = payload;\n      return state.set('productCategoryId', missingRule.get('category').get('id'));\n    }\n    case ProductActionTypes.SERIES_LOADING: {\n      return state.set('seriesLoading', true);\n    }\n    case ProductActionTypes.SERIES_LOADING_FINISHED: {\n      return state.set('seriesLoading', false);\n    }\n    case ProductActionTypes.UPDATE_SERIES_FILTER_INPUT: {\n      const {\n        payload,\n      } = action as UpdateSeriesFilterInputAction;\n\n      return state.set('seriesFilterInput', payload || '');\n    }\n\n    case ProductActionTypes.SELECT_CATEGORY: {\n      const {\n        payload,\n      } = action as SelectCategoryAction;\n      const {\n        productCategoryId\n      } = payload;\n      return state\n        .set('productCategoryId', productCategoryId)\n        .set('selectingCategory', true);\n    }\n\n    case ProductActionTypes.SELECT_CATEGORY_AND_GET_SPECS: {\n      return state.set('selectingCategory', true);\n    }\n\n    case ProductActionTypes.SELECT_CATEGORY_FINISHED: {\n      return state.set('selectingCategory', false);\n    }\n\n    case ProductActionTypes.SET_CATEGORY_ID: {\n      const {\n        payload,\n      } = action as SetCategoryIdAction;\n      const {\n        productCategoryId\n      } = payload;\n      return state.set('productCategoryId', Number(productCategoryId));\n    }\n\n    case ProductActionTypes.UPDATE_SERIES:\n      const {\n        payload: updateSeriesPayload,\n      } = action as UpdateSeriesAction;\n      const { seriesList, hasNextPage} = updateSeriesPayload;\n      const updatedSeries = seriesList.reduce((acc, series) => (acc.set(series.get('id'), series)), Map<number, IMap<Series>>());\n      const lastFetchedSeriesIds = seriesList.reduce((acc, series) => (acc.add(series.get('id'))), OrderedSet<number>());\n\n      return state.withMutations((ctx) => {\n        ctx.set('lastFetchedSeriesIds', lastFetchedSeriesIds);\n        ctx.set('series', updatedSeries);\n        ctx.set('seriesListHasNextPage', hasNextPage);\n      });\n\n    case ProductActionTypes.MATCHING_PRODUCTS_SUCCEEDED:\n      const {\n        payload: matchingProductsSucceededPayload,\n      } = action as MatchingProductsSucceededAction;\n      const attributes: Map<string, IMap<Attribute>> = matchingProductsSucceededPayload.get('attributes');\n      const seriesId = matchingProductsSucceededPayload.get('seriesId');\n      const matchingProduct: IMap<MatchingProduct> = matchingProductsSucceededPayload.get('data');\n      return state.withMutations((mutableState) => {\n        mutableState.setIn(['lastMatchingProducts', seriesId], matchingProduct);\n        mutableState.setIn(['matchingProducts', seriesId, Attribute.getAttributesIdentifierString(attributes)], matchingProduct);\n      });\n\n    case ProductActionTypes.RESET_MATCHING_PRODUCTS:\n      return state.withMutations((mutableState) => {\n        mutableState.set('matchingProducts', INITIAL_STATE.get('matchingProducts'));\n        mutableState.set('lastMatchingProducts', INITIAL_STATE.get('lastMatchingProducts'));\n      });\n\n    case ProductActionTypes.GET_MATCHING_PRICE_SUMMARY_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetMatchingPriceSummarySucceededAction;\n      const {\n        priceSummary\n      } = payload;\n      return state.set('matchingProductPriceSummary', priceSummary);\n    }\n\n    case ProductActionTypes.SELECT_SERIES:\n      const {\n        payload: selectSeriesPayload,\n      } = action as SelectSeriesAction;\n      return state.set('selectedSeriesId', selectSeriesPayload);\n\n    case ProductActionTypes.SERIES_FILTER_TOGGLE:\n      const {\n        payload: seriesFilterTogglePayload,\n      } = action as SeriesFilterAddAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        seriesFilterTogglePayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            value: seriesFilterPayload.value,\n            label: seriesFilterPayload.label\n          })\n\n          if (ctx.getIn(['seriesFilters', seriesFilterPayload.key, filterValueLabel]) != null) {\n            if (seriesFilterPayload.multi) {\n              const existingSet = ctx.getIn(['seriesFilters', seriesFilterPayload.key], Set())\n              ctx.setIn(['seriesFilters', seriesFilterPayload.key], existingSet.delete(filterValueLabel));\n            } else {\n              ctx.deleteIn(['seriesFilters', seriesFilterPayload.key]);\n            }\n          } else {\n            if (seriesFilterPayload.multi) {\n              const existingSet = ctx.getIn(['seriesFilters', seriesFilterPayload.key], Set())\n              ctx.setIn(['seriesFilters', seriesFilterPayload.key], existingSet.add(filterValueLabel));\n            } else {\n              ctx.setIn(['seriesFilters', seriesFilterPayload.key], Set([filterValueLabel]));\n            }\n\n          }\n        })\n        // when series filter changes, it will trigger search so always set to first page\n        ctx.setIn(['seriesSearchOptions', 'offset'], 0);\n      });\n\n    case ProductActionTypes.SERIES_FILTER_ADD:\n      const {\n        payload: seriesFilterAddPayload,\n      } = action as SeriesFilterAddAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        seriesFilterAddPayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            value: seriesFilterPayload.value,\n            label: seriesFilterPayload.label\n          })\n          if (seriesFilterPayload.multi) {\n            const existingSet = ctx.getIn(['seriesFilters', seriesFilterPayload.key], Set())\n            ctx.setIn(['seriesFilters', seriesFilterPayload.key], existingSet.add(filterValueLabel));\n          } else {\n            ctx.setIn(['seriesFilters', seriesFilterPayload.key], Set([filterValueLabel]));\n          }\n\n        })\n        // when series filter changes, it will trigger search so always set to first page\n        ctx.setIn(['seriesSearchOptions', 'offset'], 0);\n      });\n\n    case ProductActionTypes.SERIES_FILTER_REMOVE:\n      const {\n        payload: seriesFilterRemovePayload,\n      } = action as SeriesFilterRemoveAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        seriesFilterRemovePayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            value: seriesFilterPayload.value,\n            label: seriesFilterPayload.label\n          })\n\n          if (seriesFilterPayload.multi) {\n            const existingSet = ctx.getIn(['seriesFilters', seriesFilterPayload.key], Set()) || Set();\n            ctx.setIn(['seriesFilters', seriesFilterPayload.key], existingSet.delete(filterValueLabel));\n\n          } else {\n            ctx.deleteIn(['seriesFilters', seriesFilterPayload.key]);\n          }\n        })\n        // when series filter changes, it will trigger search so always set to first page\n        ctx.setIn(['seriesSearchOptions', 'offset'], 0);\n      });\n    // don't clear filters... we sometimes do location changes after preloading filters so we'll just need to do this manually\n    // case LOCATION_CHANGE:\n    case ProductActionTypes.SERIES_FILTER_CLEAR:{\n      const {\n        payload: seriesFilterClearPayload,\n      } = action as SeriesFilterClearAction;\n      const {\n        clearUseFilter = true\n      } =  seriesFilterClearPayload;\n      return state.withMutations((newState) => {\n        newState.set('seriesFilters', Map());\n        if (clearUseFilter) {\n          newState.setIn(['seriesSearchOptions', 'offset'], 0); // when series filter changes, it will trigger search so always set to first page\n        } else {\n          const useFilter = state.getIn(['seriesFilters', 'use']);\n          newState.setIn(['seriesFilters', 'use'], useFilter).setIn(['seriesSearchOptions', 'offset'], 0); // when series filter changes, it will trigger search so always set to first page\n        }\n        newState.set('categorySpecificSeriesFilters', Map());\n        newState.set('seriesSpecificInitSelections', INITIAL_STATE.get('seriesSpecificInitSelections'));\n        newState.set('seriesSpecificInitDisabledSelections', INITIAL_STATE.get('seriesSpecificInitDisabledSelections'));\n      });\n    }\n\n    case ProductActionTypes.PRODUCT_FILTER_TOGGLE:\n      const {\n        payload: productFilterTogglePayload,\n      } = action as ProductFilterAddAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        productFilterTogglePayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            key: seriesFilterPayload.key,\n            value: seriesFilterPayload.value,\n            label: seriesFilterPayload.label,\n            multi: seriesFilterPayload.multi\n          })\n\n          if (ctx.getIn(['productFilters', seriesFilterPayload.key, filterValueLabel]) != null) {\n            if (seriesFilterPayload.multi) {\n              const existingSet = ctx.getIn(['productFilters', seriesFilterPayload.key], Set())\n              ctx.setIn(['productFilters', seriesFilterPayload.key], existingSet.delete(filterValueLabel));\n            } else {\n              ctx.deleteIn(['productFilters', seriesFilterPayload.key]);\n            }\n          } else {\n            if (seriesFilterPayload.multi) {\n              const existingSet = ctx.getIn(['productFilters', seriesFilterPayload.key], Set())\n              ctx.setIn(['productFilters', seriesFilterPayload.key], existingSet.add(filterValueLabel));\n            } else {\n              ctx.setIn(['productFilters', seriesFilterPayload.key], Set([filterValueLabel]));\n            }\n          }\n\n          // toggle filter from seriesSpecificFilters, to all existing series\n          const seriesSpecificFilters = state.get('seriesSpecificFilters');\n          seriesSpecificFilters.forEach((series, seriesId) => {\n            const isFeatures = ctx.getIn(['series', seriesId, 'attributes', seriesFilterPayload.key, 'isAttribute']); // check if it's features then no need to toggle\n            if (isFeatures || isFeatures === undefined) {\n              return;\n            }\n            const optionValueId = ctx.getIn(['series', seriesId, 'attributes', seriesFilterPayload.key, 'values'])?.find(optionValue => optionValue.get('value') === seriesFilterPayload.value)?.get('id');\n            const specificFilterValueLabel = fromJS({\n              value: seriesFilterPayload.value,\n              label: seriesFilterPayload.label,\n              optionValueId\n            });\n            const currentFilter = ctx.getIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], Set()) || Set();\n            if (state.getIn(['productFilters', seriesFilterPayload.key, filterValueLabel]) != null) {\n              if (seriesFilterPayload.multi) {\n                ctx.setIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], currentFilter.delete(specificFilterValueLabel));\n              } else {\n                // only delete if current value match\n                if (seriesFilterPayload.value === currentFilter.first()?.get('value')) {\n                  ctx.deleteIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key]);\n                }\n              }\n            } else {\n              if (seriesFilterPayload.multi) {\n                optionValueId &&\n                ctx.setIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], currentFilter.add(specificFilterValueLabel));\n              } else {\n                optionValueId\n                ? ctx.setIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], Set([specificFilterValueLabel]))\n                : ctx.deleteIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key]);\n              }\n            }\n          });\n        })\n      });\n\n    case ProductActionTypes.PRODUCT_FILTER_ADD:\n      const {\n        payload: productFilterAddPayload,\n      } = action as ProductFilterAddAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        productFilterAddPayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            key: seriesFilterPayload.key,\n            value: seriesFilterPayload.value,\n            label: seriesFilterPayload.label,\n            multi: seriesFilterPayload.multi\n          })\n          if (seriesFilterPayload.multi) {\n            const existingSet = ctx.getIn(['productFilters', seriesFilterPayload.key], Set())\n            ctx.setIn(['productFilters', seriesFilterPayload.key], existingSet.add(filterValueLabel));\n          } else {\n            ctx.setIn(['productFilters', seriesFilterPayload.key], Set([filterValueLabel]));\n          }\n\n          // add filter from seriesSpecificFilters, all existing series\n          const seriesSpecificFilters = state.get('seriesSpecificFilters');\n          seriesSpecificFilters.forEach((series, seriesId) => {\n            const isFeatures = ctx.getIn(['series', seriesId, 'attributes', seriesFilterPayload.key, 'isAttribute']); // check if it's features then no need to add\n            if (isFeatures || isFeatures === undefined) {\n              return;\n            }\n            const optionValueId = ctx.getIn(['series', seriesId, 'attributes', seriesFilterPayload.key, 'values'])?.find(optionValue => optionValue.get('value') === seriesFilterPayload.value)?.get('id');\n            const specificFilterValueLabel = fromJS({\n              value: seriesFilterPayload.value,\n              label: seriesFilterPayload.label,\n              optionValueId\n            });\n            const currentSeriesSpecificFilters = ctx.getIn(['seriesSpecificFilters', seriesId], Map());\n            const currentFilter = currentSeriesSpecificFilters.get(seriesFilterPayload.key);\n            const newSeriesSpecificFilters = currentSeriesSpecificFilters.setIn([seriesFilterPayload.key],\n              currentFilter\n                ? seriesFilterPayload.multi\n                  ? currentFilter.add(specificFilterValueLabel)\n                  : Set([specificFilterValueLabel])\n                : Set([specificFilterValueLabel])\n              );\n            ctx.setIn(['seriesSpecificFilters', seriesId], newSeriesSpecificFilters);\n          });\n        })\n      });\n\n    case ProductActionTypes.PRODUCT_FILTER_REMOVE:\n      const {\n        payload: productFilterRemovePayload,\n      } = action as ProductFilterRemoveAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        productFilterRemovePayload.forEach((seriesFilterPayload: ISeriesFilterPayload) => {\n          const filterValueLabel = ctx.getIn(['productFilters', seriesFilterPayload.key])?.find(filterValue => filterValue.get('value') === seriesFilterPayload.value);\n\n          if (seriesFilterPayload.multi) {\n            const existingSet = ctx.getIn(['productFilters', seriesFilterPayload.key], Set()) || Set();\n            ctx.setIn(['productFilters', seriesFilterPayload.key], existingSet.delete(filterValueLabel));\n          } else {\n            ctx.deleteIn(['productFilters', seriesFilterPayload.key]);\n          }\n\n          // remove filter from seriesSpecificFilters, all existing series\n          const seriesSpecificFilters = state.get('seriesSpecificFilters');\n          seriesSpecificFilters.forEach((series, seriesId) => {\n            const isFeatures = ctx.getIn(['series', seriesId, 'attributes', seriesFilterPayload.key, 'isAttribute']); // check if it's features then no need to remove\n            if (isFeatures || isFeatures === undefined) {\n              return;\n            }\n            // if not multi then we can remove the whole filter, if multi then only remove only that value\n            if (!seriesFilterPayload.multi) {\n              ctx.deleteIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key]);\n            } else {\n              const specificFilterValueLabel = ctx.getIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key])?.find(filterValue => filterValue.get('value') === seriesFilterPayload.value);\n              const currentFilter = ctx.getIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], Set()) || Set();\n              ctx.setIn(['seriesSpecificFilters', seriesId, seriesFilterPayload.key], currentFilter.delete(specificFilterValueLabel));\n            }\n          });\n        })\n      });\n\n    // don't clear filters... we sometimes do location changes after preloading filters so we'll just need to do this manually\n    // case LOCATION_CHANGE:\n    case ProductActionTypes.PRODUCT_FILTER_CLEAR: {\n      const {\n        payload: productFilterClearPayload,\n      } = action as ProductFilterClearAction;\n      const {\n        clearUseFilter = true\n      } =  productFilterClearPayload;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        // clear each filter value from series specific filters, all existing series\n        const currentProductFilters = state.get('productFilters');\n        currentProductFilters.forEach((productFilter, productFilterKey) => {\n          const isMulti = productFilter?.first()?.get('multi');\n          const seriesSpecificFilters = state.get('seriesSpecificFilters');\n          seriesSpecificFilters.forEach((series, seriesId) => {\n            const isFeatures = ctx.getIn(['series', seriesId, 'attributes', productFilterKey, 'isAttribute']); // check if it's features then no need to remove\n            if (isFeatures || isFeatures === undefined) {\n              return;\n            }\n            // if not multi then we can remove the whole filter, if multi then only remove only that value\n            if (!isMulti) {\n              ctx.deleteIn(['seriesSpecificFilters', seriesId, productFilterKey]);\n            } else {\n              productFilter.forEach((productFilterValue) => {\n                const specificFilterValueLabel = ctx.getIn(['seriesSpecificFilters', seriesId, productFilterKey])?.find(filterValue => filterValue.get('value') === productFilterValue.get('value'));\n                const existingSet = ctx.getIn(['seriesSpecificFilters', seriesId, productFilterKey], Set()) || Set();\n                ctx.setIn(['seriesSpecificFilters', seriesId, productFilterKey], existingSet.delete(specificFilterValueLabel));\n              });\n            }\n          });\n        })\n\n        // clear product filters\n        if (clearUseFilter) {\n          ctx.set('productFilters', Map());\n        }\n\n        const useFilter = state.getIn(['productFilters', 'use']);\n        if (useFilter) {\n          ctx.setIn(['productFilters', 'use'], useFilter);\n        }\n      });\n    }\n\n    case ProductActionTypes.PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES:\n      return state.set('productFilters', Map());\n\n    case ProductActionTypes.CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS: {\n      const {\n        payload,\n      } = action as ConvertInitSelectionsToSeriesSpecificFiltersAction;\n      const {\n        series,\n      } = payload;\n\n      if (!series) {\n        return state;\n      }\n\n      const seriesId = series.get('id');\n      const attributes = series.get('attributes', Map());\n      const selectedSeriesSpecificInitSelections = state.get('seriesSpecificInitSelections').get(String(series.get('id')));\n\n      if (!selectedSeriesSpecificInitSelections) {\n        return state;\n      }\n\n      const newFilters = () => {\n        const newStuff = selectedSeriesSpecificInitSelections.reduce((acc, value, key) => {\n          const isMulti = attributes.getIn([key, 'isOption']);\n          const option = attributes.getIn([key, 'values'])?.find((option) => option.get('value') === value);\n\n          if (!option) {\n            return acc;\n          }\n\n          const filterValueLabel = fromJS({\n            value: option.get('value'),\n            label: option.get('label'),\n            optionValueId: option.get('optionValueId'),\n          });\n          const prevFilter = acc.get(key);\n\n          return acc.setIn([key],\n            prevFilter\n              ? isMulti\n                ? prevFilter.add(filterValueLabel)\n                : Set([filterValueLabel])\n              : Set([filterValueLabel])\n            );\n        }, fromJS({}));\n\n        return newStuff;\n      }\n\n      const newSelections = newFilters();\n\n      if (newSelections.isEmpty()) {\n        return state;\n      }\n\n      return state.withMutations((newState) => {\n        newState.setIn(['seriesSpecificFilters', seriesId], newSelections);\n        newState.deleteIn(['seriesSpecificInitSelections', String(seriesId)]);\n      });\n    }\n\n    case ProductActionTypes.SET_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS: {\n      const {\n        payload,\n      } = action as SetSelectedSeriesSpecificInitDisabledSelectionsAction;\n\n      const {\n        series,\n        selectedSeriesSpecificInitSelections,\n      } = payload;\n\n      if (!series) {\n        return state;\n      }\n\n      const seriesId = series.get('id');\n      const attributes = series.get('attributes', Map());\n      const attributesForDisabled = ['supplymotor', 'exhaustmotor'];\n\n      const newSelectedSeriesSpecificInitDisabledSelections = attributesForDisabled.reduce((acc, key) => {\n        const attributeOptions = attributes.getIn([key, 'values'], List());\n        const valueToCompare = Number(selectedSeriesSpecificInitSelections.get(key));\n\n        const valuesToDisable = attributeOptions.reduce((valuesAcc, attributeOption) => {\n          const optionValue = Number(attributeOption.get('value'));\n          if (!isNaN(optionValue) && optionValue < valueToCompare) {\n            valuesAcc = valuesAcc.add(attributeOption.get('value'));\n          }\n          return valuesAcc;\n        }, Set());\n\n        if (valuesToDisable.isEmpty()) {\n          return acc;\n        }\n        return acc.set(key, valuesToDisable);\n      }, fromJS({}));\n\n      return state.setIn(['seriesSpecificInitDisabledSelections', String(seriesId)], newSelectedSeriesSpecificInitDisabledSelections);\n    }\n\n    case ProductActionTypes.DELETE_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS: {\n      const {\n        payload,\n      } = action as DeleteSelectedSeriesSpecificInitDisabledSelectionsAction;\n\n      const {\n        seriesId,\n      } = payload;\n\n      return state.deleteIn(['seriesSpecificInitDisabledSelections', String(seriesId)]);\n    }\n\n    case ProductActionTypes.RESET_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS: {\n      return state.set('seriesSpecificInitDisabledSelections', INITIAL_STATE.get('seriesSpecificInitDisabledSelections'));\n    }\n\n    case ProductActionTypes.SERIES_SPECIFIC_FILTER_ADD: {\n      const {\n        payload: seriesSpecificFilterAddPayload,\n      } = action as SeriesSpecificFilterAddAction;\n\n      const {\n        seriesId,\n        filters,\n      } = seriesSpecificFilterAddPayload;\n\n      const newFilters = () => {\n        // rebuilds the 'seriesSpecificFilters' based on if the filter is 'multi'\n        const newStuff = filters.reduce((acc, filter: ISeriesFilterPayload) => {\n          const filterValueLabel = fromJS({\n            value: filter.value,\n            label: filter.label,\n            optionValueId: filter.optionValueId,\n          });\n          const prevFilter = acc.get(filter.key);\n\n          return acc.setIn([filter.key],\n            prevFilter\n              ? filter.multi\n                // single 'filterValueLabel' is for radios\n                // .add(filterValueLabel) is for options aka checkboxes\n                ? prevFilter.add(filterValueLabel)\n                : Set([filterValueLabel])\n              : Set([filterValueLabel])\n            );\n        }, state.getIn(['seriesSpecificFilters', seriesId], Map()));\n\n        return newStuff;\n      }\n\n      return state.setIn(['seriesSpecificFilters', seriesId], newFilters())\n    }\n\n    case ProductActionTypes.SERIES_SPECIFIC_FILTER_REMOVE: {\n      const {\n        payload: seriesSpecificFilterRemovePayload,\n      } = action as SeriesSpecificFilterRemoveAction;\n\n      const {\n        seriesId,\n        filters,\n      } = seriesSpecificFilterRemovePayload;\n\n\n      const newFilters = () => {\n        const newFiltersValue = state.getIn(['seriesSpecificFilters', seriesId], Map()).withMutations((ctx) => {\n          filters.forEach((filter: ISeriesFilterPayload) => {\n            const filterValueLabel = fromJS({\n              value: filter.value,\n              label: filter.label,\n              optionValueId: filter.optionValueId,\n            })\n\n            if (filter.multi) {\n              const existingSet = state.getIn(['seriesSpecificFilters', seriesId, filter.key], Set());\n\n              ctx.setIn([filter.key], existingSet.delete(filterValueLabel));\n\n            } else {\n              ctx.deleteIn([filter.key]);\n            }\n          })\n        });\n\n        return newFiltersValue;\n      }\n\n      return state.setIn(['seriesSpecificFilters', seriesId], newFilters());\n    }\n\n    case ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR: {\n      const {\n        payload,\n      } = action as SeriesSpecificFilterClearAction;\n\n      const {\n        seriesId,\n      } = payload;\n      return state.deleteIn(['seriesSpecificFilters', seriesId]);\n    }\n\n    case ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES: {\n      const {\n        payload,\n      } = action as SeriesSpecificFilterClearThenCheckProductAndAttributesAction;\n\n      const {\n        seriesId,\n      } = payload;\n      return state.deleteIn(['seriesSpecificFilters', seriesId]);\n    }\n\n    case ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR_ALL: {\n      return state.set('seriesSpecificFilters', Map());\n    }\n\n    case ProductActionTypes.CLEAR_SEARCH_RESULTS_WITH_CATEGORY:\n      const {\n        payload\n      } = action as ClearSearchResultsWithCategoryNameAction;\n      return state.setIn(['searchResults', payload], Map());\n\n    case ProductActionTypes.CLEAR_ALL_SEARCH_RESULTS:\n      return state.setIn(['searchResults'], Map());\n    case ProductActionTypes.QUICK_SEARCH:\n      const {\n        payload: quickSearchPayload\n      } = action as QuickSearchAction;\n      return state.withMutations(ctx => {\n        ctx.set('searchTerm', quickSearchPayload);\n        ctx.set('isLoadingQuickSearchResults', true);\n      })\n\n    case ProductActionTypes.CLEAR_QUICK_SEARCH:\n      return state.set('searchTerm', '');\n\n    case ProductActionTypes.CATEGORY_SEARCH_TYPE:\n      const {\n        payload: categorySearchTypePayload\n      } = action as CategorySearchTypeAction;\n      return state.set('categorySearchType', categorySearchTypePayload);\n\n    case ProductActionTypes.GET_SEARCH_RESULTS_SUCCEEDED:\n      const {\n        payload: getSearchResultsSucceededPayload,\n      } = action as GetSearchResultsSucceededAction;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        ctx.set('requestSent', false);\n        const categoryName: string = getSearchResultsSucceededPayload.categoryName || 'null';\n        const results: List<IMap<Product> | IMap<Series> | IMap<ProductCategory>> = getSearchResultsSucceededPayload.results;\n        ctx.setIn(['searchResults', categoryName], results);\n        ctx.set('isLoadingQuickSearchResults', false);\n      });\n\n    case ProductActionTypes.GET_PRODUCTS_FAILED:\n      const {\n        payload: getProductsFailedPayload,\n      } = action as GetProductsFailedAction;\n\n      const {\n        err,\n      } = getProductsFailedPayload;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        ctx.set('requestSent', false);\n        ctx.set('error', err);\n      });\n\n    case ProductActionTypes.GET_PRODUCT_CATEGORIES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetProductCategoriesSucceededAction;\n      const {\n        response: productCategoryGroupList\n      } = payload;\n      return state.withMutations((ctx: IMapNonRecursive<IProductReducerState>) => {\n        ctx.set('requestSent', false);\n        ctx.set('error', undefined);\n        // ctx.set('productCategories', productCategoryGroupList);\n        productCategoryGroupList.forEach((productCategoryGroup: IMap<ProductCategoryGroup>) => {\n          const _productCategoryGroup = ctx.getIn(['productCategories', productCategoryGroup.get('categoryType')]) !== productCategoryGroup\n                                        ? productCategoryGroup\n                                        : ctx.getIn(['productCategories', productCategoryGroup.get('categoryType')]);\n          // ctx.setIn(['productCategories', productCategoryGroup.get('categoryType')], _productCategoryGroup.update('productTypes', (productTypes: List<IMap<ProductCategory>>) => {\n          //   return productTypes.concat(productCategoryGroup.get('productTypes'))\n          // })); // TODO: concatenate and remove duplicates\n          ctx.setIn(['productCategories', productCategoryGroup.get('categoryType')], _productCategoryGroup);\n        });\n      });\n    }\n\n    case ProductActionTypes.FILTER_PRODUCT_CATEGORIES:\n      const {\n        payload: filterProductCategoriesPayload,\n      } = action as FilterProductCategoriesAction;\n      return state.set('productCategoryFilters', filterProductCategoriesPayload);\n\n    case ProductActionTypes.PRODUCT_CATEGORY_SELECTION:\n      const {\n        payload: ProductCategorySelectionPayload\n      } = action as ProductCategorySelectionAction;\n    return state.set('productCategorySelect', ProductCategorySelectionPayload);\n\n    case ProductActionTypes.CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING:\n      return state.set('checkProductsAndAttributesLoading', true);\n    case ProductActionTypes.CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING_DONE:\n      return state.set('checkProductsAndAttributesLoading', false);\n\n    case ProductActionTypes.QUICK_SEARCH_FIRM_LOADING:\n      const {\n        payload: QuickSearchFirmLoadingPayload\n      } = action as QuickSearchFirmLoadingAction;\n      return state.set('quickSearchFirmLoading', QuickSearchFirmLoadingPayload);\n\n    case ProductActionTypes.SAVE_FIRM_CATEGORY_LOADING:\n      const {\n        payload: SaveFirmCategoryLoadingPayload\n      } = action as SaveFirmCategoryLoadingAction;\n      return state.set('isSaveFirmCategoryLoading', SaveFirmCategoryLoadingPayload);\n\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/* tslint:disable */\nimport {\n  take,\n  takeEvery,\n  call,\n  put,\n  select,\n  takeLatest,\n  fork,\n  join,\n  cancelled,\n} from 'redux-saga/effects';\nimport {\n  ProductActionTypes,\n  GetSearchResultsSucceededAction,\n  GetProductsFailedAction,\n  GetProductCategoriesAction,\n  GetProductCategoriesSucceededAction,\n  MatchingProductsSucceededAction,\n  GetSeriesAction,\n  UpdateSeriesAction,\n  QuickSearchAction,\n  QuickSearchFirmAction,\n  QuickSearchFirmLoadingAction,\n  SelectNewCategoryAction,\n  SeriesFilterClearAction,\n  GetAttributeOrderAction,\n  GetAttributeOrderSucceededAction,\n  ClearSearchResultsAction,\n  ClearSearchResultsWithCategoryNameAction,\n  GetAttributeOptionsOrderAction,\n  GetAttributeOptionsOrderSucceededAction,\n  SearchSeriesWithFilterAction,\n  CheckProductAndAttributesLoadingAction,\n  CheckProductAndAttributesLoadingDoneAction,\n  UseActionAndSearchWithFilterAction,\n  SeriesLoadingAction,\n  SeriesLoadingFinishedAction,\n  GetSeriesByIdAction,\n  GetSeriesAndAddSeriesSpecificFiltersAction,\n  SeriesSpecificFilterAddAction,\n  GetBrandRepProductCategoriesAction,\n  CreateMatchingProductThenUpdateDrawingAction,\n  ProductFilterClearAction,\n  SearchProductsWithFilterAction,\n  SearchProductsWithFilterSucceededAction,\n  SearchProductsWithFilterLoadingAction,\n  CategoryLoadingAction,\n  GetManufacturersByCategoryIdAction,\n  GetManufacturersByCategoryIdSucceededAction,\n  CreateProductMediaRequestAction,\n  GetRecommendedSpecProductAction,\n  SetIsRecommendedSpecProductLoadingAction,\n  SetRecommendedSpecProductAction,\n  SaveFirmCategoryAction,\n  SaveFirmCategorySucceededAction,\n  SaveFirmCategoryFailedAction,\n  SaveFirmCategoryLoadingAction,\n  GetMatchingPriceSummarySucceededAction,\n  GetBrandVariationsAction,\n  GetBrandVariationsSucceededAction,\n  UpdateBrandVariationByIdAction,\n  UpdateBrandVariationByIdSucceededAction,\n  SetIsGettingBrandVariationsAction,\n  SetIsUpdatinggBrandVariationAction,\n  GetAiExclusionAction,\n  SetIsGettingAiExclusionAction,\n  GetAiExclusionSucceededAction,\n  AddAiExclusionsAction,\n  SetIsAddingAiExclusionAction,\n  AddAiExclusionsSucceededAction,\n  UpdateAiExclusionByIdAction,\n  SetIsUpdatingAiExclusionAction,\n  UpdateAiExclusionByIdSucceededAction,\n  DeleteAiExclusionByIdAction,\n  DeleteAiExclusionByIdSucceededAction,\n  SetIsDeletingAiExclusionAction,\n  SearchDalSeriesWithFilterAction,\n  SearchDalSeriesWithFilterLoadingAction,\n  SearchDalSeriesWithFilterSucceededAction,\n  SelectProductForConfiguratorAction,\n  SkipRuleEngineAction,\n  SelectSeriesAction,\n  SelectCategoryAction,\n  UpdateCategoryPopularityAction,\n} from './actions';\n\nimport {\n  selectSeriesFilters,\n  makeSelectCategorySpecificSeriesFilters,\n  makeSelectSeries,\n  makeSelectSeriesAttributes,\n  selectSearchProductSelectionGroupFormCategorySelect,\n  makeSelectSelectedSeriesId,\n  makeSelectProductCategoryId,\n  selectProductFilters,\n  makeSelectSelectedSeriesSpecificFilters,\n  makeSelectSeriesFilterInput,\n  selectFilteredSeries,\n  makeSelectDirectSeriesAttributes,\n  makeSelectAttributeOptions,\n  makeSelectSeriesSearchOptions,\n  makeSelectHideDiscontinuedSeries,\n  makeSelectShowDraftSeriesOnly,\n  makeSelectProductTypeIdToProductTypeMap,\n  makeSelectSeriesSearchOrderBy\n} from './selectors';\n\nimport {\n  PaginationActions,\n} from '../../actions';\n\nimport {\n  Map,\n  fromJS,\n  List,\n  OrderedSet,\n  Set\n} from 'immutable';\n\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  Series,\n  MatchingProduct,\n  Attribute,\n  ProductCategoryGroup,\n  Product,\n  ProductCategory,\n  AttributeValue,\n  Manufacturer,\n  ListItem,\n  ValueLabel,\n  BrandVariation,\n  AiExclusion,\n  AiExclusionItem,\n  MissingRule,\n} from '../../models';\nimport {\n  QuickSearchType,\n} from './constants';\n\nimport {\n  taggedDelay,\n  atsApiCallWaitingAction,\n  apiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  AtsApiCallAction, ApiCallAction,\n} from '../AtsModule/actions';\nimport { makeSelectDrawingRules, makeSelectSelectedSpecLocation, makeSelectSelectedMasterSpecLocation, makeSelectMode, makeSelectTestSpecMode, makeSelectNewDrawingId } from '../SpecModule/selectors';\nimport { GetSeriesWithCombinedFiltersAction, SetModeAction, SetSelectedSpecIdAction, UpdateDrawingAction } from '../SpecModule/actions';\nimport {\n  makeSelectLoggedInUserOfficeLocation,\n  makeSelectLocationForSeriesSearchFilter,\n  makeSelectBuildingForSeriesSearchFilter,\n  selectSearchMode\n} from '../AccountModule/selectors';\nimport { makeSelectAmplitudeData, makeSelectIdentityObject, makeSelectSite, makeSelectUserHasAnyPimRole, makeSelectUseUnavailabilityPurchasabilityQuery, makeSelectUserHasNewSearchRole, makeSelectEnv, makeSelectAppId } from '../AtsModule/selectors';\nimport ProductSearchGatewayApi, { toLegacyProductList } from './ProductSearchGatewayApi';\nimport { callNewSearch } from './callNewSearch';\nimport { AMPLITUDE_EVENT, GEOLOCATION_ID, GUEST_USER_LOCATION_FILTER, Mode, SiteName, TIME_OUT_LIMIT } from '../../constants';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { updateDrawing } from '../SpecModule/saga';\nimport { parseFiltersAndOptions } from '../../utils/parseFiltersAndOptions';\nimport { mapNewSearchFirmProductsFlat } from '../PimModule/mapNewSearchFirmProducts';\nimport ProductSearchServiceApi from '../PimModule/ProductSearchServiceApi';\nimport { makeSelectSelectedRegion } from '../LocationModule/selectors';\nimport { useAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { SetSnackbarOpenAction, SetTimerStartAction } from '../ApplicationModule/actions';\nimport i18next from 'i18next';\nimport { GetCategoriesAction } from '../AccountModule/actions';\nimport { BARIATRIC_COMPATIBLE_CATEGORY_IDS, CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS } from '../../containers/ProductSelectionControl';\nimport { makeSelectTimerTracker } from '../ApplicationModule/selectors';\nimport {SortSeriesBy} from './reducer';\n\ninterface IProductCategoryResponse {\n  payload: {\n    product: object;\n  };\n  meta: object;\n}\n\ninterface IProductResponse {\n  payload: {\n    product: {\n      series: List<IMap<Series>>,\n    };\n  };\n  meta: object;\n}\n\nexport default function* productSaga() {\n  yield takeLatest([\n    ProductActionTypes.SELECT_SERIES,\n    ProductActionTypes.SERIES_FILTER_ADD,\n    ProductActionTypes.SERIES_FILTER_REMOVE,\n    ProductActionTypes.SERIES_FILTER_TOGGLE,\n    ProductActionTypes.PRODUCT_FILTER_ADD,\n    ProductActionTypes.PRODUCT_FILTER_REMOVE,\n    ProductActionTypes.PRODUCT_FILTER_TOGGLE,\n    ProductActionTypes.PRODUCT_FILTER_CLEAR,\n    ProductActionTypes.PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES,\n    ProductActionTypes.SERIES_SPECIFIC_FILTER_ADD,\n    ProductActionTypes.SERIES_SPECIFIC_FILTER_REMOVE,\n    ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR,\n    ProductActionTypes.SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES,\n    ProductActionTypes.CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS,\n  ], checkProductAndAttributes);\n  yield takeLatest(ProductActionTypes.CREATE_MATCHING_PRODUCT_THEN_UPDATE_DRAWING, createMatchingProductThenUpdateDrawing);\n  yield takeLatest(ProductActionTypes.GET_BRAND_REP_PRODUCT_CATEGORIES, getBrandRepProductCategories);\n  yield takeLatest(ProductActionTypes.GET_PRODUCT_CATEGORIES, getProductCategories);\n  yield takeLatest(ProductActionTypes.QUICK_SEARCH, quickSearch);\n  yield takeLatest(ProductActionTypes.QUICK_SEARCH_FIRM, quickSearchFirm);\n  yield takeLatest(ProductActionTypes.GET_SERIES, getSeries);\n  yield takeLatest(ProductActionTypes.SELECT_NEW_CATEGORY, selectNewCategory);\n  yield takeLatest(ProductActionTypes.GET_ATTRIBUTE_ORDER, getAttributeOrder);\n  yield takeLatest(ProductActionTypes.CLEAR_SEARCH_RESULTS, clearSearchResults);\n  yield takeLatest(ProductActionTypes.GET_ATTRIBUTE_OPTIONS_ORDER, getAttributeOptionOrder);\n  yield takeLatest(ProductActionTypes.SEARCH_SERIES_WITH_FILTER, searchSeriesWithFilter);\n  yield takeLatest(ProductActionTypes.USE_ACTION_AND_SEARCH_WITH_FILTER, useActionAndSearchWithFilterAction);\n  yield takeLatest(ProductActionTypes.GET_SERIES_BY_ID, getSeriesById);\n  yield takeLatest(ProductActionTypes.GET_SERIES_AND_ADD_SERIES_SPECIFIC_FILTERS, getSeriesAndAddSeriesSpecificFilters);\n  yield takeLatest(ProductActionTypes.SEARCH_PRODUCTS_WITH_FILTER, searchProductsWithFilters);\n  yield takeLatest(ProductActionTypes.SEARCH_DAL_SERIES_WITH_FILTER, searchDalSeriesWithFilters);\n  yield takeLatest(ProductActionTypes.GET_MANUFACTURERS_BY_CATEGORY_ID, getManufacturersByCategoryId);\n  yield takeLatest(ProductActionTypes.CREATE_PRODUCT_MEDIA_REQUEST, createProductMediaRequest);\n  yield takeLatest(ProductActionTypes.GET_RECOMMENDED_SPEC_PRODUCT_ACTION, getRecommendedSpecProduct);\n  yield takeLatest(ProductActionTypes.SAVE_FIRM_CATEGORY, saveFirmCategory);\n  yield takeLatest(ProductActionTypes.GET_BRAND_VARIATIONS, getBrandVariations);\n  yield takeLatest(ProductActionTypes.UPDATE_BRAND_VARIATION_BY_ID, updateBrandVariationById);\n  yield takeLatest(ProductActionTypes.GET_AI_EXCLUSION, getAiExclusion);\n  yield takeLatest(ProductActionTypes.ADD_AI_EXCLUSIONS, addAiExclusions);\n  yield takeLatest(ProductActionTypes.UPDATE_AI_EXCLUSION_BY_ID, updateAiExclusionById);\n  yield takeLatest(ProductActionTypes.DELETE_AI_EXCLUSION_BY_ID, deleteAiExclusionById);\n  yield takeLatest(ProductActionTypes.SELECT_PRODUCT_FOR_CONFIGURATOR, selectProductForConfigurator);\n  yield takeLatest(ProductActionTypes.UPDATE_CATEGORY_POPULARITY, updateCategoryPopularity);\n}\n\nexport function* updateCategoryPopularity(\n  action: UpdateCategoryPopularityAction,\n) {\n  const {\n    categoryId\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'updateCategoryPopularity',\n        params: {\n          categoryId\n        },\n      }\n    ]\n  }));\n  if (!data) {\n    console.error('updateCategoryPopularity', {err}); // tslint:disable-line\n  }\n}\n\nexport function* selectProductForConfigurator(\n  action: SelectProductForConfiguratorAction,\n) {\n  const {\n    categoryId,\n    categoryName,\n    seriesId,\n    productAttributes,\n  } = action.payload;\n\n  yield put(new SetTimerStartAction({startTime: Date.now(), action: AMPLITUDE_EVENT.productSelectionPageLoad}));\n\n  const productCategory = new ProductCategory({ id: categoryId, name: categoryName }).toImmutable();\n  yield put(new SetSelectedSpecIdAction(-1));\n  yield put(new SetModeAction(Mode.productCatalogue));\n\n  yield put(new GetProductCategoriesAction({ applyUnavailabilityFilter: true }));\n  yield put(new SelectCategoryAction({ productCategoryId: categoryId, selectDrawing: false }));\n  yield put(new SelectNewCategoryAction({\n    missingRule: new MissingRule({\n      category: productCategory,\n      filters: fromJS({\n        and: [\n          {\n            category: {\n              eq: categoryId,\n            }\n          },\n          {\n            id: {\n              eq: seriesId,\n            }\n          }\n        ]\n      }),\n    }).toImmutable(),\n    skipRules: true\n  }));\n  yield put(new SkipRuleEngineAction(true));\n  yield put(new SelectSeriesAction(seriesId));\n\n  if (productAttributes) {\n    yield put(new GetSeriesAndAddSeriesSpecificFiltersAction({\n      seriesId,\n      productAttributes: productAttributes,\n    }));\n  }\n}\n\nexport function* getAiExclusion(\n  action: GetAiExclusionAction,\n) {\n  const {\n    onSuccess,\n  } = action.payload || {};\n\n  yield put(new SetIsGettingAiExclusionAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getAiExclusion',\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const aiExclusion: IMap<AiExclusion> = immutableData.getIn(['payload', 'product', 'aiExclusion']);\n    if (aiExclusion == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Error - Failed to retrieve A.I. Exclusions, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new GetAiExclusionSucceededAction({ aiExclusion: Map.isMap(aiExclusion) ? aiExclusion : Map() as IMap<AiExclusion> }));\n      if (onSuccess) {\n        onSuccess();\n      }\n    };\n  } else {\n    console.error('getAiExclusions', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - Failed to retrieve A.I. Exclusions, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsGettingAiExclusionAction(false));\n}\n\nexport function* addAiExclusions(\n  action: AddAiExclusionsAction,\n) {\n  const {\n    aiExclusionItems,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsAddingAiExclusionAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'addAiExclusion',\n        body: aiExclusionItems.toJS()\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const aiExclusion: IMap<AiExclusion> = immutableData.getIn(['payload', 'product', 'aiExclusion']);\n    if (aiExclusion == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Error - New A.I. exclusions failed to be added, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new GetAiExclusionAction());\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new SetSnackbarOpenAction({\n        message: 'New A.I. exclusions added successfully',\n        severity: 'success'\n      }));\n    };\n  } else {\n    console.error('addAiExclusions', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - New A.I. exclusions failed to be added, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsAddingAiExclusionAction(false));\n}\n\nexport function* updateAiExclusionById(\n  action: UpdateAiExclusionByIdAction,\n) {\n  const {\n    id,\n    aiExclusionItem,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsUpdatingAiExclusionAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'updateAiExclusion',\n        params: {\n          exclusionId: id,\n        },\n        body: aiExclusionItem.toJS(),\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const aiExclusion: IMap<AiExclusion> = immutableData.getIn(['payload', 'product', 'aiExclusion']);\n    if (aiExclusion == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Error - A.I. exclusion failed to be updated, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new GetAiExclusionAction());\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new SetSnackbarOpenAction({\n        message: 'A.I. exclusion updated successfully',\n        severity: 'success'\n      }));\n    };\n  } else {\n    console.error('updateAiExclusionById', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - A.I. exclusions failed to be updated, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsUpdatingAiExclusionAction(false));\n}\n\nexport function* deleteAiExclusionById(\n  action: DeleteAiExclusionByIdAction,\n) {\n  const {\n    id,\n    onSuccess,\n  } = action.payload;\n\n  yield put(new SetIsDeletingAiExclusionAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'deleteAiExclusion',\n        params: {\n          exclusionId: id\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const aiExclusion: IMap<AiExclusion> = immutableData.getIn(['payload', 'product', 'aiExclusion']);\n    if (aiExclusion == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Error - A.I. exclusions failed to be deleted, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new GetAiExclusionAction());\n      if (onSuccess) {\n        onSuccess();\n      }\n      yield put(new SetSnackbarOpenAction({\n        message: 'A.I. exclusion deleted successfully',\n        severity: 'success'\n      }));\n    };\n  } else {\n    console.error('deleteAiExclusionById', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Error - A.I. exclusions failed to be deleted, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsDeletingAiExclusionAction(false));\n}\n\nexport function* getRecommendedSpecProduct(\n  action: GetRecommendedSpecProductAction,\n) {\n  const {\n    series,\n    useDirectMatchProduct = false,\n  } = action.payload;\n\n  const seriesId = series.get('id');\n  const defaultAmplitudeData = yield select(makeSelectAmplitudeData());\n  const trackedSeriesData = {\n    id: series.get('id'),\n    productNumber: series.get('productNumber'),\n    brandId: series.get('brandId'),\n    brand: series.get('brand'),\n    category: series.get('category'),\n    categoryName: series.get('categoryName'),\n    draft: series.get('draft'),\n    isConfigurator: series.get('isConfigurator'),\n    status: series.get('status'),\n    pimStatus: series.get('pimStatus') || '-'\n  };\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getSeriesMostSpecifiedProduct',\n        params: {\n          seriesId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const recommendedProduct = immutableData.getIn(['payload', 'product', 'product', 0]);\n    if (recommendedProduct == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      // send amplitude 'No Recommended Product Retrieved'\n      amplitude.logEvent(AMPLITUDE_EVENT.noRecommendedProductRetrieved, {\n        ...trackedSeriesData,\n        ...defaultAmplitudeData\n      });\n      yield put(new SetIsRecommendedSpecProductLoadingAction(false));\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:Expansion.noMostPopularMessage'),\n        severity: 'error'\n      }));\n    } else {\n      yield put(new SetRecommendedSpecProductAction({seriesId, product: recommendedProduct}));\n      const trackedProductData = {\n        id: recommendedProduct.get('id'),\n        productNumber: recommendedProduct.get('productNumber'),\n        itemNumber: recommendedProduct.get('itemNumber') || '-',\n        upc: recommendedProduct.get('upc') || '-',\n        customProductNumber: recommendedProduct.get('customProductNumber'),\n        brandId: recommendedProduct.get('brandId'),\n        brand: recommendedProduct.get('brand'),\n        category: recommendedProduct.get('category'),\n        categoryName: recommendedProduct.get('categoryName'),\n        series: recommendedProduct.get('series'),\n        draft: recommendedProduct.get('draft'),\n        isConfigurator: recommendedProduct.get('isConfigurator'),\n        status: recommendedProduct.get('status'),\n        pimStatus: recommendedProduct.get('pimStatus') || '-',\n        testStatus: recommendedProduct.get('testStatus'),\n      };\n      // send amplitude 'Recommended Product Retrieved'\n      amplitude.logEvent(AMPLITUDE_EVENT.recommendedProductRetrieved, {\n        ...trackedProductData,\n        ...defaultAmplitudeData\n      });\n      const seriesAttributes = series.get('attributes');\n      const seriesCheckboxAttributes = seriesAttributes.filter((attribute: IMap<AttributeValue>) => {\n        return attribute.get('isOption') === true;\n      });\n      const productAttributes = recommendedProduct.get('attributes');\n      yield put(new SeriesSpecificFilterAddAction({\n        filters: productAttributes.map((productAttribute: IMap<AttributeValue>, productAttributeKey: string) =>\n        (\n          {\n            // 'attribute' is different on series and product obj\n            // since product doesn't have options. only attributes\n            // an option on series is the same as an attribute on product\n            // because of that we have to find the unique idenifier 'key' in product attribute\n            // and check on series attribute's values for a matching obj with the same keyname\n            // that's how we determine if it should be 'multi'\n            multi: seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) ? true : false,\n            key: seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) ? seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) : productAttributeKey,\n            value: productAttribute.get('value'),\n            label: productAttribute.get('description'),\n            optionValueId: productAttribute.get('optionId')\n          }\n        )).valueSeq().toJS(),\n        seriesId\n      }, useDirectMatchProduct ? series : null));\n      yield put(new SetIsRecommendedSpecProductLoadingAction(false));\n    };\n  } else {\n    console.error('GetRecommendedSpecProductAction', {err}); // tslint:disable-line\n  }\n}\n\nexport function* createProductMediaRequest(\n  action: CreateProductMediaRequestAction,\n) {\n  const {\n    requestData\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'createProductMediaRequest',\n        params: {\n          seriesId: requestData.seriesId\n        },\n        body: {\n          ...requestData,\n        }\n      }\n    ]\n  }));\n  if (!data) {\n    console.error('createProductMediaRequest', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getManufacturersByCategoryId(\n  action: GetManufacturersByCategoryIdAction,\n) {\n  const {\n    categoryId,\n    considerAppId = false,\n    filters,\n    location = null,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getCategoryManufacturers',\n        params: {\n          categoryId\n        },\n        body: {\n          filters,\n          location,\n        },\n        queries: {\n          considerAppId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categoryManfacturers: List<IMap<Manufacturer>> = immutableData.getIn(['payload', 'product', 'manufacturer']);\n    if (categoryManfacturers == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetManufacturersByCategoryIdSucceededAction(categoryManfacturers));\n    };\n  } else {\n    console.error('GetManufacturersByCategoryIdAction', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getBrandVariations(\n  action: GetBrandVariationsAction,\n) {\n  yield put(new SetIsGettingBrandVariationsAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getManufacturerAlternativeNames',\n        body: {\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const brandVariations: List<IMap<BrandVariation>> = immutableData.getIn(['payload', 'product', 'manufacturerAlternativeName']);\n    if (brandVariations == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetBrandVariationsSucceededAction({ brandVariations }));\n    };\n  } else {\n    console.error('GetBrandVariationsAction', {err}); // tslint:disable-line\n  }\n  yield put(new SetIsGettingBrandVariationsAction(false));\n}\n\nexport function* updateBrandVariationById(\n  action: UpdateBrandVariationByIdAction,\n) {\n  const {\n    id,\n    altNames,\n    onSuccess = () => null,\n  } = action.payload;\n\n  yield put(new SetIsUpdatinggBrandVariationAction(true));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'updateManufacturerAltNames',\n        params: {\n          manufacturerId: id\n        },\n        body: {\n          altNames\n        },\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const brandVariations: List<IMap<BrandVariation>> = immutableData.getIn(['payload', 'product', 'manufacturerAlternativeName']);\n    if (brandVariations == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SetSnackbarOpenAction({\n        message: 'Brand variation failed to be updated, please try again later.',\n        severity: 'error'\n      }));\n    } else {\n      yield put(new UpdateBrandVariationByIdSucceededAction({ brandVariations }));\n      yield put(new SetSnackbarOpenAction({\n        message: 'Brand variation updated successfully',\n        severity: 'success'\n      }));\n      onSuccess();\n    };\n  } else {\n    console.error('UpdateBrandVariationByIdAction', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: 'Brand variation failed to be updated, please try again later.',\n      severity: 'error'\n    }));\n  }\n  yield put(new SetIsUpdatinggBrandVariationAction(false));\n}\n\nexport function* searchDalSeriesWithFilters(\n  action: SearchDalSeriesWithFilterAction,\n) {\n  yield put(new SearchDalSeriesWithFilterLoadingAction(true));\n  const selectedRegion = yield select(makeSelectSelectedRegion());\n  const id = selectedRegion.getIn(['country', 'id']);\n  const location = id ? { country: { id } } : null;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    payload\n  } = action;\n\n  const {\n    filters,\n    options,\n    amplitudeData\n  } = payload;\n\n  const start = Date.now();\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getSearchSeries',\n        body: {\n          filters: filters.toJS(),\n          options,\n          location,\n        },\n        queries: {\n          draft: false,\n          ...useUnavailabilityPurchasabilityQuery,\n        }\n      }\n    ]\n  }));\n  const end = Date.now();\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const seriesList: List<IMap<Series>> = immutableData.getIn(['payload', 'product', 'series']);\n    const seriesListHasNextPage: boolean = immutableData.getIn(['payload', 'product', 'hasNextPage']);\n    if (seriesList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchDalSeriesWithFilterSucceededAction({ seriesList, seriesListHasNextPage }));\n    };\n  } else {\n    console.error('SearchDalSeriesWithFilterAction', {err}); // tslint:disable-line\n  }\n  yield put(new SearchDalSeriesWithFilterLoadingAction(false));\n\n  if (amplitudeData) {\n    let errorCode = (err as any)?.payload?.error?.code || null;\n    let errorMessage = (err as any)?.payload?.error?.error || null;\n  \n    if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n      if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n        errorCode = 504;\n        errorMessage = 'Likely timeout';\n      } else {\n        errorCode = 503;\n        errorMessage = 'Likely CORS error';\n      }\n    }\n  \n    const meta = (data || err as any)?.meta || {};\n    const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n    const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n    delete meta.versionNumbers;\n    delete meta.render;\n  \n    const defaultAmplitudeData = yield select(makeSelectAmplitudeData());\n    amplitude.logEvent(AMPLITUDE_EVENT.bimSeriesSearch, {\n      errorCode,\n      errorMessage,\n      render,\n      ...meta,\n      ...versionNumbers,\n      ...amplitudeData,\n      ...defaultAmplitudeData\n    });\n  }\n}\n\nexport function* searchProductsWithFilters(\n  action: SearchProductsWithFilterAction,\n) {\n  yield put(new SearchProductsWithFilterLoadingAction(true));\n  const selectedRegion = yield select(makeSelectSelectedRegion());\n  const id = selectedRegion.getIn(['country', 'id']);\n  const location = id ? { country: { id } } : null;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    payload\n  } = action;\n\n  const {\n    filters,\n    options,\n    amplitudeData\n  } = payload;\n\n  const start = Date.now();\n  // Feature flag: the 'New Search' role routes catalog search to the\n  // OpenSearch-backed endpoint through the api-gateway (/mssearch). The BE\n  // compat adapter accepts the same legacy body and returns the legacy shape\n  // under payload.mssearch, so the only difference here is the transport and\n  // the envelope key. Remove this branch when the new search becomes default.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  let data: any;\n  let err: any;\n  if (hasNewSearch) {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    ({ data, err } = yield* callNewSearch('catalog search', 'product', () => ProductSearchGatewayApi.autoquoteSearch(env, appId, {\n      filters: filters.toJS(),\n      options,\n      location,\n      // legacy query-string flags, forwarded in the body (gateway drops POST\n      // query params on the mono lane).\n      ...useUnavailabilityPurchasabilityQuery,\n    })));\n  } else {\n    ({ data, err } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n      payload: [\n        {\n          service: 'product',\n          endpoint: 'getSearchProducts',\n          body: {\n            filters: filters.toJS(),\n            options,\n            location,\n          },\n          queries: {\n            draft: false,\n            ...useUnavailabilityPurchasabilityQuery,\n          }\n        }\n      ]\n    })));\n  }\n  const end = Date.now();\n\n  const serviceKey = hasNewSearch ? 'mssearch' : 'product';\n  if (data) {\n    const immutableData = fromJS(data);\n    const products: List<IMap<Product>> = immutableData.getIn(['payload', serviceKey, 'product']);\n    const productsHasNextPage: boolean = immutableData.getIn(['payload', serviceKey, 'hasNextPage']);\n    if (products == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new SearchProductsWithFilterSucceededAction({ products, productsHasNextPage }));\n    };\n  } else {\n    console.error('SearchProductsWithFilterAction', {err}); // tslint:disable-line\n  }\n  yield put(new SearchProductsWithFilterLoadingAction(false));\n\n  if (amplitudeData) {\n    let errorCode = (err as any)?.payload?.error?.code || null;\n    let errorMessage = (err as any)?.payload?.error?.error || null;\n  \n    if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n      if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n        errorCode = 504;\n        errorMessage = 'Likely timeout';\n      } else {\n        errorCode = 503;\n        errorMessage = 'Likely CORS error';\n      }\n    }\n  \n    const meta = (data || err as any)?.meta || {};\n    const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n    const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n    delete meta.versionNumbers;\n    delete meta.render;\n  \n    const defaultAmplitudeData = yield select(makeSelectAmplitudeData());\n    amplitude.logEvent(AMPLITUDE_EVENT.bimProductSearch, {\n      errorCode,\n      errorMessage,\n      render,\n      ...meta,\n      ...versionNumbers,\n      ...amplitudeData,\n      ...defaultAmplitudeData\n    });\n  }\n}\n\nexport function* getSeriesAndAddSeriesSpecificFilters(\n  action: GetSeriesAndAddSeriesSpecificFiltersAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    seriesId,\n    productAttributes,\n  } = payload;\n\n  const task = yield fork(getSeriesById, new GetSeriesByIdAction(seriesId));\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield join(task);\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const series: IMap<Series> = immutableData.getIn(['payload', 'product', 'series', 0]);\n    if (series == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else if (productAttributes) {\n      // New Search (OpenSearch) quick-search items carry no attributes tree,\n      // so there is nothing to seed here — the product-selection page fetches\n      // full product/series data itself. Guard on the data, not the ACL role:\n      // the true precondition is \"have attributes to map\", and this shared\n      // handler must stay agnostic of which search backend produced the item.\n      const seriesAttributes = series.get('attributes');\n      const seriesCheckboxAttributes = seriesAttributes.filter((attribute: IMap<AttributeValue>) => {\n        return attribute.get('isOption') === true;\n      });\n\n      yield put(new SeriesSpecificFilterAddAction({\n        filters: productAttributes.map((productAttribute: IMap<AttributeValue>, productAttributeKey: string) => \n        (\n          {\n            // 'attribute' is different on series and product obj\n            // since product doesn't have options. only attributes\n            // an option on series is the same as an attribute on product\n            // because of that we have to find the unique idenifier 'key' in product attribute\n            // and check on series attribute's values for a matching obj with the same keyname\n            // that's how we determine if it should be 'multi'\n            multi: seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) ? true : false,\n            key: seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) ? seriesCheckboxAttributes.findKey(x => x.get('values').find(y => y.get('key') === productAttributeKey)) : productAttributeKey,\n            value: productAttribute.get('value'),\n            label: productAttribute.get('description'),\n            optionValueId: productAttribute.get('optionId')\n          }\n        )).valueSeq().toJS(),\n        seriesId\n      }));\n    };\n  } else {\n    console.error('GetSeriesAndAddSeriesSpecificFiltersAction error', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getSeriesById(\n  action: GetSeriesByIdAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const testSpecMode = yield select(makeSelectTestSpecMode());\n\n  // draft = true will search ONLY drafts\n  // draft = false will search ONLY non-draft\n  // draft = null will search BOTH \n  // draft = false (default if nothing is passed) will search only non-draft\n  const testQuery = testSpecMode ? null : false;\n\n  return yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getSeries',\n        body: {\n        },\n        params: {\n          seriesId: payload\n        },\n        queries: {\n          draft: testQuery,\n        }\n      }\n    ]\n  }));\n}\n\nexport function* useActionAndSearchWithFilterAction(\n  action: UseActionAndSearchWithFilterAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    passedAction,\n    attributeOptions,\n    customArgs,\n    skipRules,\n  } = payload;\n\n  passedAction.seriesAction ? yield put(new passedAction.seriesAction(customArgs ?? attributeOptions)) : null;\n  passedAction.productAction ? yield put(new passedAction.productAction(customArgs ?? attributeOptions)) : null;\n  \n  // temp fix to skip the rules for some 'edit' actions\n  // rule engine currently can not support all the features we need\n  if (skipRules) {\n    yield put (new SearchSeriesWithFilterAction());\n    return;\n  }\n  yield put (new GetSeriesWithCombinedFiltersAction());\n}\n\nexport function* searchSeriesWithFilter(\n  action: SearchSeriesWithFilterAction,\n) {\n  const additionalSingleUsedFilters = action.payload?.additionalSingleUsedFilters || null;\n\n  const productCategoryId = yield select(makeSelectProductCategoryId());\n  const seriesFilters = yield select(selectSeriesFilters());\n  const categorySpecificSeriesFilters = yield select(makeSelectCategorySpecificSeriesFilters());\n  const drawingRules = yield select(makeSelectDrawingRules());\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const specBuildingForFilter = yield select(makeSelectBuildingForSeriesSearchFilter());\n  const seriesFilterInput = yield select(makeSelectSeriesFilterInput());\n  const testSpecMode = yield select(makeSelectTestSpecMode());\n  const attributeFiltersList = yield select(makeSelectAttributeOptions());\n  const loginUserOfficeLocation = yield select(makeSelectLoggedInUserOfficeLocation());\n  const seriesSearchOptions = yield select(makeSelectSeriesSearchOptions());\n  const hideDiscontinuedSeries = yield select(makeSelectHideDiscontinuedSeries());\n  const showDraftSeriesOnly = yield select(makeSelectShowDraftSeriesOnly());\n  const mode = yield select(makeSelectMode());\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const site = yield select(makeSelectSite());\n\n  // draft = true will search ONLY drafts\n  // draft = false will search ONLY non-draft\n  // draft = null will search BOTH \n  // draft = false (default if nothing is passed) will search only non-draft\n  const testQuery = testSpecMode ? showDraftSeriesOnly ? true : null : false;\n\n  const seriesFilterInputFilterValue = List(\n    [\n      {\n        'or': [\n          {\n            productNumber: {\n              'like': seriesFilterInput\n            }\n          },\n          {\n            name: {\n              'like': seriesFilterInput\n            }\n          },\n          {\n            description: {\n              'like': seriesFilterInput\n            }\n          }\n        ]\n      },\n    ]\n  );\n\n  // builds the filter that need to get passed to the endpoint\n  const valueFilters = seriesFilters.reduce((acc, filter, key) => {\n    if (!filter || filter?.size === 0) {\n      return acc;\n    }\n\n    if (key === 'manufacturer') {\n      if (filter.size === 0) {\n        return acc;\n      } else {\n        const manufacturerList = filter.map((manufacturer) => {\n          const manufacturerValue = manufacturer.get('value');\n          return fromJS({\n            brand: {\n              'like': manufacturerValue\n            }\n          });\n        });\n        const manufacturerFilter = fromJS({\n          or: manufacturerList\n        });\n        return acc.push(manufacturerFilter);\n      }\n    }\n\n    const attriValuePath = `attributes.${key}.values.value`;\n\n    // bariatric and child is multi selected\n    if (key === 'use') {\n      // remove bariatric or child filter if category is not compatible with it;\n      // https://atsinc.atlassian.net/browse/SPEC-3437\n      const useList = filter\n        .filter((use) => {\n          if (\n              (use.get('value') === 'child' && CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS.includes(productCategoryId))\n              || (use.get('value') === 'bariatric' && BARIATRIC_COMPATIBLE_CATEGORY_IDS.includes(productCategoryId))\n            ) {\n            return use;\n          }\n        })\n        .map((use) => {\n          const useValue = use.get('value');\n          return fromJS({\n            [attriValuePath]: {\n              'eq': useValue\n            }\n          });\n        });\n      \n      if (useList.count()) {\n        const useFilter = fromJS({\n          and: useList\n        });\n        return acc.push(useFilter);\n      }\n    }\n\n    // SHOULD only be radios or a set of range so only 1 value set. If it ever changes, then we can't use first()\n    const value = filter.first().get('value');\n    const isRangeValue = List.isList(value);\n    let lowerRangeValue = isRangeValue && value.get(0);\n    let upperRangeValue = isRangeValue && value.get(1);\n    // if range filter is used in imperial, we need to convert to metric for the filter to work\n    if (isRangeValue) {\n      const attributeFilterInfo = attributeFiltersList.find(attribute => attribute.get('value') === key);\n      const isQuantizedRange = attributeFilterInfo.getIn(['values', 0, 'meta', 'isQuantizedRange']);\n      const metricMin = attributeFilterInfo.getIn(['values', 0, 'value', 0]);\n      const metricMax = attributeFilterInfo.getIn(['values', 0, 'value', 1]);\n      const imperialMin = attributeFilterInfo.getIn(['values', 1, 'value', 0]);\n      const imperialMax = attributeFilterInfo.getIn(['values', 1, 'value', 1]);\n      const isUSLocation = loginUserOfficeLocation.getIn(['country', 'id']) === GEOLOCATION_ID.usa;\n      const currentFilterValueIsImperial = !isQuantizedRange && isUSLocation;\n      if (currentFilterValueIsImperial) {\n        lowerRangeValue = lowerRangeValue ? ((lowerRangeValue - imperialMin) / (imperialMax - imperialMin) * (metricMax - metricMin)) + metricMin : '';\n        upperRangeValue = upperRangeValue ? ((upperRangeValue - imperialMin) / (imperialMax - imperialMin) * (metricMax - metricMin)) + metricMin : '';\n      }\n    }\n    // filter has a primitive value or range value which need to be build different way\n    const valueFilter = !isRangeValue\n      ? fromJS({\n          [attriValuePath]: {\n            'eq': value\n          }\n        })\n      : fromJS({\n          [attriValuePath]: {\n            'le': upperRangeValue,\n            'ge': lowerRangeValue\n          }\n        });\n\n    return acc.push(valueFilter);\n  }, List());\n\n  // if productCategoryId is -1 then we can assume that the user is going through the normal selection process\n  // meaning the next steps that are provided by the rule engine\n  // if productCategoryId is not -1 then we can assume that the user clicked on a missing category but it may not be the next one in line\n\n  // example\n  // missing category from rules: basin => basin pedestal => faucet => mixing valve\n  // basin is already added to drawing\n  // productCategoryId would be -1 in this case and we would take the next one in the missing list which would be basin pedestal\n  // BUT if the user clicks on faucet, then the productCategoryId would be 2 and in this case we need to select the filter from rules that are specific to that categoryId\n\n  // came logic used on getSeriesWithCombinedFilters in spec sagas\n  const filterFromRules = drawingRules ? drawingRules.get('missing', List()) : List();\n  const filterRuleByCategoryId = productCategoryId !== -1\n    ? filterFromRules.reduce((acc, rule) => {\n        const categoryIdFromRule = rule.getIn(['category', 'id']);\n        return Number(categoryIdFromRule) === Number(productCategoryId) ? rule : acc;\n      }, Map())\n      .getIn(['filters', 'and'], List())\n    : drawingRules.getIn(['missing', 0, 'filters', 'and'], List());\n\n  // on test project, deleted series are return and we want to filter non active series out\n  const filterOutNonActiveSeries =  {\n    'status': {\n      'nin': ['deleted', 'inactive', ...hideDiscontinuedSeries ? ['discontinued'] : []]\n    }\n  }\n\n  const mergedFilters = (() => {\n    let andFilters = filterRuleByCategoryId.push(filterOutNonActiveSeries).push(...valueFilters);\n\n    if (seriesFilterInput) {\n      andFilters = andFilters.push(...seriesFilterInputFilterValue);\n    }\n    if (productCategoryId !== -1) {\n      andFilters = andFilters.push({\n        'category': {\n          'eq': productCategoryId\n        }\n      });\n    }\n    if (!isRegisteredUser) {\n      andFilters = andFilters.push(GUEST_USER_LOCATION_FILTER);\n    }\n    if (categorySpecificSeriesFilters && !categorySpecificSeriesFilters.isEmpty()) {\n      // the filters of every applied tool stack together\n      andFilters = categorySpecificSeriesFilters.reduce(\n        (filters, categorySpecificSeriesFilter) => (\n          categorySpecificSeriesFilter?.get('and')\n            ? filters.concat(categorySpecificSeriesFilter.get('and'))\n            : filters\n        ),\n        andFilters,\n      );\n    }\n\n    if (additionalSingleUsedFilters) {\n      andFilters = andFilters.push(...additionalSingleUsedFilters);\n    }\n\n    return andFilters;\n  })();\n\n  const filters = fromJS({\n  'and': mergedFilters\n  });\n\n  if (mergedFilters.size === 0 && productCategoryId === -1) {\n    yield put(new SeriesLoadingFinishedAction());\n    yield put(new SetTimerStartAction({startTime: 0, action: ''})); // reset timer\n    yield put(new CheckProductAndAttributesLoadingDoneAction());\n    return;\n  }\n  \n  yield put(new CheckProductAndAttributesLoadingAction());\n\n  const orderBy = yield select(makeSelectSeriesSearchOrderBy());\n  const location = isRegisteredUser ? specOrOfficeLocationForFilter : undefined;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getSearchSeries',\n        body: {\n          filters,\n          building: specBuildingForFilter,\n          location,\n          options: {\n            ...seriesSearchOptions.toJS(),\n            orderBy,\n          }\n        },\n        queries: {\n          draft: testQuery,\n          ...useUnavailabilityPurchasabilityQuery,\n        }\n      }\n    ]\n  }));\n  const timerTracker = yield select(makeSelectTimerTracker());\n  if (data) {\n    const immutableData = fromJS(data);\n    const seriesList = immutableData.getIn(['payload', 'product', 'series']);\n    if (seriesList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const hasNextPage = immutableData.getIn(['payload', 'product', 'hasNextPage']);\n      yield put(new UpdateSeriesAction({seriesList, hasNextPage}));\n      yield put(new CheckProductAndAttributesLoadingDoneAction());\n      yield put(new SeriesLoadingFinishedAction());\n      // only send amplitude when we have timerStart\n      const startTime = timerTracker.get('startTime');\n      if (startTime !== 0) {\n        const timerAction = timerTracker.get('action');\n        const isNewDrawingCreated = yield select(makeSelectNewDrawingId());\n        const productCategoryId = yield select(makeSelectProductCategoryId());\n        const productCategoriesList = yield select(makeSelectProductTypeIdToProductTypeMap());\n        const amplitudeData = yield select(makeSelectAmplitudeData());\n        switch (timerAction) {\n          case AMPLITUDE_EVENT.productSelectionPageLoad: {\n            amplitude.logEvent(AMPLITUDE_EVENT.productSelectionPageLoad, {\n              renderTime: Date.now() - startTime,\n              newDrawingCreated: isNewDrawingCreated !== -1 ? true : false,\n              categoryId: productCategoryId,\n              categoryName: productCategoriesList.getIn([productCategoryId, 'name']),\n              ...amplitudeData\n            });\n            break;\n          }\n          case AMPLITUDE_EVENT.productSelectionPageFilter: {\n            const filtersList = seriesFilters.reduce((acc: List<any>, filterSet: Set<IMap<ValueLabel>>) => {\n              return filterSet ? acc.concat(\n                filterSet.map((filterValueLabel: IMap<ValueLabel>) => filterValueLabel.get('label'))\n              ) : acc;\n            }, List());\n            if (filtersList.size || seriesFilterInput) {\n              amplitude.logEvent(AMPLITUDE_EVENT.productSelectionPageFilter, {\n                renderTime: Date.now() - startTime,\n                searchTerm: seriesFilterInput,\n                filters: filtersList.join(', '),\n                categoryId: productCategoryId,\n                categoryName: productCategoriesList.getIn([productCategoryId, 'name']),\n                ...amplitudeData\n              });\n            }\n            break;\n          }\n          default: break;\n        }\n      }\n    };\n  } else {\n    console.error('get series error', {err}); // tslint:disable-line\n  }\n  // reset timer\n  // TODO: make reset timer more specific for each amplitude\n  if (timerTracker.get('action') !== AMPLITUDE_EVENT.s2qLoadingTime) {\n    yield put(new SetTimerStartAction({startTime: 0, action: ''}));\n  }\n}\n\nexport function* getAttributeOptionOrder(\n  action: GetAttributeOptionsOrderAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    categoryId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'getAttributeOptionOrder',\n        body: {\n        },\n        params: {\n          categoryId: categoryId,\n\n          // hardcoded for now. BE to impliment more 'sources'. w/e tf that is\n          source: 'specProductFilters'\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const attributeOptions = immutableData.getIn(['payload', 'product', 'attributes']);\n    if (attributeOptions == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAttributeOptionsOrderSucceededAction({attributeOptions}));\n    };\n  } else {\n    console.error('get attribute options order error', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getAttributeOrder(\n  action: GetAttributeOrderAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    categoryName,\n    categoryId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: [\n      {\n        service: 'product',\n\n        // lol idk man. ask nate. hardcoded for now\n        endpoint: 'getAttributeOrder',\n        body: {\n        },\n        params: {\n          categoryId: categoryId,\n          source: 'specProductDetails'\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const whiteList = immutableData.getIn(['payload', 'product', 'attributes']);\n    if (whiteList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAttributeOrderSucceededAction({categoryId, attributeList: OrderedSet(whiteList)}));\n    };\n  } else {\n    console.error('get attribute whitelist error', {err}); // tslint:disable-line\n  }\n}\n\nexport function* selectNewCategory(\n  action: SelectNewCategoryAction\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    missingRule,\n    skipRules,\n  } = payload;\n\n  yield put(new SeriesFilterClearAction({}));\n  yield put(new SeriesLoadingAction());\n  \n  if (skipRules) {\n    yield put(new GetSeriesAction({\n      missingRule\n    }));\n    return;\n  }\n  yield put(new GetSeriesWithCombinedFiltersAction());\n}\n\nexport function* createMatchingProductThenUpdateDrawing(\n  action: CreateMatchingProductThenUpdateDrawingAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    spec,\n    drawingId,\n    selectedDrawing,\n    editProductIndex = -1\n  } = payload;\n\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(checkProductAndAttributes, { create: true });\n  if (data) {\n    const product: IMap<Product> = fromJS(data).getIn(['payload', 'product', 'product', 0]);\n    if (product) {\n      // check if theres an index in the store for editing product. if index exists then that product with the index needs to be replaced with another product\n      // else it will default to adding a product at the end of the products array in the drawing\n      if (editProductIndex !== -1) {\n        const alternativeProducts = selectedDrawing.getIn(['products', editProductIndex, 'alternativeProducts']);\n        yield call(updateDrawing, new UpdateDrawingAction({\n          drawingId,\n          drawing: selectedDrawing.update('products', List(), (productList: List<IMap<Product>>) => productList.set(editProductIndex, product)),\n          resetEditProductIndex: true,\n          editProductIndex,\n          alternativeProducts,\n          updateAccessible: true, // update the drawing's accessible flag when adding/deleting products\n          clearFilters: true,\n          useSpecAssist: true,\n        }));\n\n      } else {\n        yield call(updateDrawing, new UpdateDrawingAction({\n          drawingId,\n          drawing: selectedDrawing.update('products', List(), (productList: List<IMap<Product>>) => productList.push(product)),\n          updateAccessible: true, // update the drawing's accessible flag when adding/deleting products\n          clearFilters: true,\n          useSpecAssist: true,\n        }));\n      }\n\n      const amplitudeData = yield select(makeSelectAmplitudeData());\n      const isFirstConfiguredProduct = selectedDrawing.get('products').size === 0;\n      amplitude.logEvent(AMPLITUDE_EVENT.productSpecified, {\n        category: product.get('categoryName'),\n        manufacturer: product.get('brand'),\n        productNumber: product.get('productNumber'),\n        productId: product.get('id'),\n        configurator: product.get('isConfigurator') ? 'Advance' : 'Basic',\n        projectType: spec.get('isMaster')\n                      ? 'Master'\n                      : spec.get('status') === 'test'\n                        ? 'Test Project'\n                        : spec.get('projectId') !== null\n                          ? 'Project'\n                          : 'Spec',\n        country: spec.getIn(['address','country']) ? spec.getIn(['address', 'country', 'value']) : '-',\n        province: spec.getIn(['address','province']) ? spec.getIn(['address', 'province', 'value']) : '-',\n        city: spec.getIn(['address','city']) ? spec.getIn(['address', 'city', 'value']) : '-',\n        isFirstConfiguredProduct,\n        ...amplitudeData\n      });\n    }\n  }\n}\n\nexport function* checkProductAndAttributes(\n  action\n) {\n\n  const {payload, series, create = false} = action;\n  const seriesFilters = yield select(selectSeriesFilters());\n  const productFilters = yield select(selectProductFilters());\n  const seriesSpecificProductFilters = yield select(makeSelectSelectedSeriesSpecificFilters());\n  let selectedSeries = series ? series : yield select(makeSelectSeries());\n  // there's nothing on the series that indicates if it's a firm series or not, and we know we only user firm match product\n  // endpoint in aq, so we just check aq, not clean, but works.\n  const site = yield select(makeSelectSite());\n  const isAQ = site === SiteName.pt;\n\n  // const isFirmSeries = Boolean(Map.isMap(series) ? series?.get('firmId') : series?.firmId);\n\n  // occasionally, series might not be available yet\n  // e.g. in the QuickSearchInput clicking on product, there is no series data yet\n  // we get the series data after click, and then asynchronously 'select series' which triggers this\n  // this way, if no series is found (and we need it) we will block until any UPDATE_SERIES call is made\n  // at which point we can check to see if we have the series yet.\n  \n  while (selectedSeries == null) {\n    console.debug('Series not found, waiting for series response if any');\n    yield take(ProductActionTypes.UPDATE_SERIES);\n    selectedSeries = yield select(makeSelectSeries());\n  }\n\n  const selectedSeriesAttributes = series ? yield select(makeSelectDirectSeriesAttributes(series)) : yield select(makeSelectSeriesAttributes());\n\n  // TODO: hacky or not? find series on page\n  yield fork(expansionFindSelectedSeries);\n\n  const seriesId: number = selectedSeries.get('id');\n  const attributes = selectedSeriesAttributes.toJS();\n\n  const body = {\n    seriesId,\n    attributes,\n  };\n  yield put(new CheckProductAndAttributesLoadingAction());\n  const {\n    data,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: isAQ ? 'getMatchingFirmProducts' : 'getMatchingProducts',\n      body,\n      ['queries' as any]: {\n        // create: !Boolean(series) || Boolean(series && create),\n        create\n      }\n    }\n  }));\n  // yield put(new CheckProductAndAttributesLoadingDoneAction());\n  if (data) {\n    if (fromJS(data).getIn(['payload', 'product']) == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const matchingProducts = isAQ ? fromJS(data).getIn(['payload', 'product']).mapKeys(k => k === 'firmProduct' ? 'product' : k) : fromJS(data).getIn(['payload', 'product']) as IMap<MatchingProduct>\n      const matchingPriceSummary = fromJS(data).getIn(['payload', 'product', 'priceSummary']);\n\n      const hasNoProducts = matchingProducts?.get('product').size === 0;\n      const availableAttributes = matchingProducts.get('attribute');\n      if (hasNoProducts && availableAttributes.size) {\n        const remainingSeriesRequiredSingleSelectionAttributes = selectedSeries.get('attributes').filter((attribute: IMap<AttributeValue>, key: string) => {\n          return !selectedSeriesAttributes.has(key) // attribute hasn't been selected\n                    && attribute.get('require') // is a required attribute\n                    && availableAttributes.has(key) // is an available attribute\n                    && availableAttributes.getIn([key, 'values']).size === 1 // only has one value to select\n                    && availableAttributes.getIn([key, 'values', 0, 'status']) === 'active'; // the value is active\n        });\n\n        // not products and only one remaining attribute value to select so we can auto select it\n        const onlyOneAvailabelAttributeValue = availableAttributes.size === 1 && availableAttributes.first().get('values')?.size === 1;\n\n        if (remainingSeriesRequiredSingleSelectionAttributes.size) {\n          yield put(new SeriesSpecificFilterAddAction({\n            seriesId,\n            filters: remainingSeriesRequiredSingleSelectionAttributes.map((attribute: IMap<AttributeValue>, key: string) => \n            (\n              {\n                multi: attribute.get('isOption'),\n                key,\n                value: availableAttributes.getIn([key, 'values', 0, 'value']),\n                label: availableAttributes.getIn([key, 'values', 0, 'description']),\n                optionValueId: availableAttributes.getIn([key, 'values', 0, 'optionId'])\n              }\n            )).valueSeq().toJS()\n          }, series));\n          return;\n        } else if (onlyOneAvailabelAttributeValue) {\n          const remainingValidAttribute = availableAttributes.first().getIn(['values', 0]);\n          yield put(new SeriesSpecificFilterAddAction({\n            seriesId,\n            filters: [{\n              multi: selectedSeries.getIn(['attributes', remainingValidAttribute.get('attributeKey'), 'isOption']),\n              key: remainingValidAttribute.get('attributeKey'),\n              value: remainingValidAttribute.get('value'),\n              label: remainingValidAttribute.get('description'),\n              optionValueId: remainingValidAttribute.get('optionId')\n            }]\n          }, series));\n          return;\n        }\n      }\n\n      const payload = fromJS({\n        data: matchingProducts,\n        attributes: Series.getAttributesWithFilters(selectedSeries, seriesFilters, true),\n        seriesId,\n      }) as IMap<{\n        data: IMap<MatchingProduct>;\n        attributes: Map<string, IMap<Attribute>>;\n        seriesId: number;\n      }>;\n      yield put(new MatchingProductsSucceededAction(payload));\n      if (matchingPriceSummary) {\n        yield put(new GetMatchingPriceSummarySucceededAction({ priceSummary: matchingPriceSummary }));\n      }\n      yield put(new CheckProductAndAttributesLoadingDoneAction());\n    };\n  } else {\n    console.error('ERROR getMatchingProductsData', {\n      err\n    })\n  }\n  yield put(new CheckProductAndAttributesLoadingDoneAction());\n  return { data, err };\n}\n\nexport function* expansionFindSelectedSeries() {\n  const productCategoryId = yield select(makeSelectProductCategoryId());\n  const selectedSeriesId = yield select(makeSelectSelectedSeriesId());\n  const series = yield select(selectFilteredSeries());\n\n  const expansionPaginationLocalKey = `ExpansionPagination-category${productCategoryId}`;\n\n  const selectedSeriesIndex: number = series.findIndex(x => x.get('id') === selectedSeriesId);\n  const paginationKey = `framework-containers-pagination-${expansionPaginationLocalKey || ''}`;\n  const paginationAction = PaginationActions.$findRecord(paginationKey)({ index: selectedSeriesIndex });\n  yield put(paginationAction);\n}\n\nexport function* quickSearch(\n  action: QuickSearchAction,\n) {\n  yield call(taggedDelay, 500);\n  const searchTerm: string = action.payload;\n  const categoryName: QuickSearchType | any = yield select(selectSearchProductSelectionGroupFormCategorySelect());\n  const amplitudeData = yield select(makeSelectAmplitudeData());\n  // console.error('quicksearch', {\n  //   searchTerm,\n  //   categoryName,\n  // });\n\n  // if (!searchTerm || searchTerm.length < 3) {\n  //   return;\n  // }\n\n  const searchFunction = (() => {\n    switch(categoryName) {\n      case QuickSearchType.PRODUCT:\n        return quickSearchProduct;\n      case QuickSearchType.CATEGORY:\n        return quickSearchCategory;\n      case QuickSearchType.SERIES:\n        return quickSearchSeries;\n      default:\n        return quickSearchProduct;\n    }\n  })();\n  const start = Date.now();\n  const {\n    data,\n    err\n  }: {\n    // data: List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>,\n    data: any,\n    err: Error,\n  } = yield call(searchFunction, searchTerm)\n  const end = Date.now();\n  if (data) {\n    const immutableData = fromJS(data);\n    let dataContent;\n    switch(categoryName) {\n      case QuickSearchType.PRODUCT:\n        dataContent = immutableData.getIn(['payload', 'product', 'product']);\n        break;\n      case QuickSearchType.SERIES:\n        dataContent = immutableData.getIn(['payload', 'product', 'series']);\n        break;\n      case QuickSearchType.CATEGORY:\n        const productCategoryGroups: List<IMap<ProductCategoryGroup>> = immutableData.getIn(['payload', 'product', 'productCategories']);\n        dataContent = productCategoryGroups.reduce((productCategoryList: List<IMap<ProductCategory>>, productCategoryGroup: IMap<ProductCategoryGroup>) => {\n          return productCategoryList.concat(productCategoryGroup.get('productTypes'));\n        }, List())\n    }\n\n    yield put(new GetSearchResultsSucceededAction({results: dataContent, categoryName}));\n  } else {\n    yield put(new GetProductsFailedAction({err}));\n  }\n\n  if (searchTerm.length > 1) { //only track if there are at least 2 char\n    let errorCode = (err as any)?.payload?.error?.code || null;\n    let errorMessage = (err as any)?.payload?.error?.error || null;\n  \n    if (!errorCode && !data) { // no data means an error, no errorCode means it's likely a server error (>500)\n      if (end - start > TIME_OUT_LIMIT) { // likely 504 from timeout\n        errorCode = 504;\n        errorMessage = 'Likely timeout';\n      } else {\n        errorCode = 503;\n        errorMessage = 'Likely CORS error';\n      }\n    }\n\n    const meta = (data || err as any)?.meta || {};\n    const render = Number(meta.render?.split(' ')[0]) || null; // convert render to number\n    const versionNumbers = meta.versionNumbers ? { ...meta.versionNumbers } : {};\n    delete meta.versionNumbers;\n    delete meta.render;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.productSelectionQuickSearch, {\n      searchTerm,\n      searchType: categoryName.replace(/productmodule|quicksearchtype|\\W/gi, ''),\n      resultCount: data?.payload?.product ? data?.payload?.product?.count : null,\n      errorCode,\n      errorMessage,\n      render,\n      ...meta,\n      ...versionNumbers,\n      ...amplitudeData\n    });\n  }\n}\n\nexport function* quickSearchFirm(\n  action: QuickSearchFirmAction,\n) {\n  yield call(taggedDelay, 500);\n  const searchTerm: string = action.payload;\n  const categoryName: QuickSearchType | any = yield select(selectSearchProductSelectionGroupFormCategorySelect());\n  yield put(new QuickSearchFirmLoadingAction(true));\n  const {\n    data,\n    err\n  }: {\n    data: List<IMap<Product> | IMap<Series> | IMap<ProductCategory>>,\n    err: Error,\n  } = yield call(quickSearchFirmProduct, searchTerm);\n\n  if (data) {\n    yield put(new QuickSearchFirmLoadingAction(false));\n    yield put(new GetSearchResultsSucceededAction({results: data, categoryName}));\n  } else {\n    yield put(new QuickSearchFirmLoadingAction(false));\n    yield put(new GetProductsFailedAction({err}));\n  }\n}\n\nexport function* clearSearchResults(\n  action: ClearSearchResultsAction,\n) {\n  const categoryName: QuickSearchType | any = yield select(selectSearchProductSelectionGroupFormCategorySelect());\n\n  yield put(new ClearSearchResultsWithCategoryNameAction(categoryName));\n}\n\n/** Immutable or plain → plain JS, for an HTTP body. */\nconst toPlain = (value: any) => (value && typeof value.toJS === 'function' ? value.toJS() : value);\n\n/**\n * Inputs both quick-search paths share, selected once so New Search sends\n * exactly the restrictions the legacy query applies. The New Search branch used\n * to send only `{ query, size }`, silently dropping hide-discontinued, the\n * discontinued-series filter, the guest region filter, the draft mode and the\n * location — so its results were not the legacy result set.\n *\n * `restrictions` never contains the search term: the legacy branch adds its own\n * `or` of LIKEs, and New Search sends the term separately as `query`.\n */\nfunction* selectQuickSearchContext(): any {\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const specBuildingForFilter = yield select(makeSelectBuildingForSeriesSearchFilter());\n\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n\n  // pim series\n  // pim users\n  const hasAnyPimRole = yield select(makeSelectUserHasAnyPimRole());\n  const testSpecMode = yield select(makeSelectTestSpecMode());\n\n  // draft = true will search ONLY drafts\n  // draft = false will search ONLY non-draft\n  // draft = null will search BOTH\n  // draft = false (default if nothing is passed) will search only non-draft\n  const testQuery = testSpecMode && hasAnyPimRole ? null : false;\n  const hideDiscontinued = yield select(makeSelectHideDiscontinuedSeries());\n  const location = isRegisteredUser ? specOrOfficeLocationForFilter : undefined;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  const restrictions = [\n    {\n      'statusId': {\n        'nin': [3, 4, ...hideDiscontinued ? [2] : []]\n      }\n    },\n    ...hideDiscontinued ? [{ 'seriesStatusId': { 'neq': 2 } }] : [],\n    ...isRegisteredUser ? [] : [GUEST_USER_LOCATION_FILTER],\n  ];\n\n  return { restrictions, testQuery, location, specBuildingForFilter, useUnavailabilityPurchasabilityQuery };\n}\n\nexport function* quickSearchProduct(\n  searchTerm: string\n) {\n  // 'New Search' role → OpenSearch quick surface (multi-field, fuzzy,\n  // exact-first: `fd-100` returns FD-100 first). Reshaped to the legacy\n  // payload.product.product envelope so the quickSearch saga's extraction is\n  // unchanged. Guarded by role — non-role users get the legacy path below.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  if (hasNewSearch) {\n    // Debounce: this saga is wired via takeLatest, so a keystroke within 250ms\n    // cancels it during the delay — the request never fires.\n    yield call(taggedDelay, 250);\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    const {\n      restrictions,\n      testQuery,\n      location,\n      specBuildingForFilter,\n      useUnavailabilityPurchasabilityQuery,\n    } = yield* selectQuickSearchContext();\n    const controller = new AbortController();\n    try {\n      // The same restrictions the legacy branch sends; the term stays in\n      // `query`. A 400 for an untranslatable filter surfaces as an error on\n      // purpose — never a silent fall-through to the legacy path.\n      const { data, err } = yield* callNewSearch('quick search', 'items', () => ProductSearchGatewayApi.quickSearch(env, appId, {\n        query: searchTerm,\n        filters: { and: restrictions },\n        draft: testQuery,\n        location: toPlain(location),\n        building: toPlain(specBuildingForFilter),\n        ...useUnavailabilityPurchasabilityQuery,\n      }, controller.signal));\n      if (err) {\n        return { data: undefined, err };\n      }\n      return { data: { payload: { product: { product: toLegacyProductList(data.payload.mssearch.items) } } }, err: undefined };\n    } finally {\n      // Cancelled by a newer keystroke (takeLatest) → abort the in-flight\n      // request so we don't leave stale fetches running.\n      if (yield cancelled()) {\n        controller.abort();\n      }\n    }\n  }\n\n  // console.error('quicksearchcategory256', {\n  //   searchTerm,\n  // });\n  const {\n    restrictions,\n    testQuery,\n    location,\n    specBuildingForFilter,\n    useUnavailabilityPurchasabilityQuery,\n  } = yield* selectQuickSearchContext();\n  const mode = yield select(makeSelectMode());\n\n  const {\n    data: apiData,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getSearchProducts',\n      body: {\n        filters : {\n          'and': [\n            ...restrictions,\n            {\n              'or': [\n                {\n                  'productNumber': {\n                    'like': searchTerm\n                  }\n                },\n                {\n                  'brand': {\n                    'like': searchTerm\n                  }\n                },\n                {\n                  'itemNumber': {\n                    'like': searchTerm\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        building: specBuildingForFilter,\n        location,\n        options: {\n          orderBy: {\n            productNumberSimilarity: {\n              [searchTerm]: 1\n            },\n            statusId: 1\n          }\n        }\n      },\n      queries: {\n        draft: testQuery,\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  if (apiData) {\n    const iApiData = fromJS(apiData);\n    const data: List<IMap<Product>> = iApiData.getIn(['payload', 'product', 'product']);\n    if (data == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    }\n  }\n  return {\n    data: apiData,\n    err\n  };\n}\n\n/**\n * Bound for the package drawer's product typeahead. The field fires at 3\n * characters, so a small term can match a large slice of a firm library; the\n * dropdown shows a handful of rows either way.\n */\nconst QUICK_SEARCH_FIRM_PRODUCT_SIZE = 50;\n\nexport function* quickSearchFirmProduct(\n  searchTerm: string\n) {\n  // ── New Search (OpenSearch) branch — the package drawer's \"Add by product\n  // number\" typeahead, gated by the 'New Search' role like every other\n  // surface. Non-role users fall through to the legacy product-service path\n  // untouched.\n  //\n  // products.search.firm, NOT products.search.quick: this typeahead picks from\n  // the caller's FIRM LIBRARY, which is what the legacy\n  // product/getSearchFirmProducts returns. `quick` is the shared-catalogue\n  // SpecTool surface and would offer products the firm does not own.\n  //\n  // The hits carry ms-pim's hydrated `firmRow`, so mapNewSearchFirmProducts is\n  // a pass-through to the same row shape the drawer reads\n  // (firmProduct.name / .description / .file.images.main.fileId /\n  // .firmProductId). Hand-picking fields out of the search doc instead is the\n  // documented mistake that shipped eight defects on the /products grid.\n  //\n  // ORDERING DIVERGES FROM LEGACY, BY DECISION (2026-10-13). Legacy sends\n  // `orderBy: {productSearchRelevance: -1, 'firmProduct.productNumber': 1}`;\n  // this surface sorts discontinued-last, then relevance, then id desc. Both\n  // differences were measured and accepted:\n  //   - DISCONTINUED LAST is kept deliberately. Legacy offers discontinued\n  //     products interleaved with live ones in a picker used to BUILD a\n  //     package, which is a defect, not a contract.\n  //   - The TIEBREAK (id desc, not productNumber asc) is accepted as-is. It\n  //     only reorders products of equal relevance in a dropdown.\n  // Do not \"restore parity\" here — the packages browse ordering was made\n  // legacy-exact precisely because it was user-visible paging; this is not.\n  const hasNewSearch = yield select(makeSelectUserHasNewSearchRole());\n  if (hasNewSearch) {\n    const env = yield select(makeSelectEnv());\n    const appId = yield select(makeSelectAppId());\n    const { data: nsData } = yield* callNewSearch('package drawer product search', 'items', () =>\n      ProductSearchServiceApi.searchFirmProducts(env, appId, {\n        query: searchTerm,\n        // The legacy call sends no limit and takes product-service's default.\n        // A typeahead only renders a short list, so this is a bound, not a\n        // page: it exists so a 3-character term cannot ask for the whole\n        // library.\n        size: QUICK_SEARCH_FIRM_PRODUCT_SIZE,\n      }),\n    );\n    if (!nsData) {\n      // callNewSearch already reported it. A New Search failure is a parity gap\n      // to fix, never something to silently fall back from.\n      return { err: new Error('New Search package drawer product search failed') };\n    }\n    // FLAT rows, not the wrapper: this typeahead's getOptionLabel and option\n    // renderer read option.get('productNumber') / .get('description') at the\n    // top level, exactly as legacy's product/getSearchFirmProducts returns\n    // them. The wrapper resolves the label to '' and renders blank lines.\n    return {\n      data: fromJS(mapNewSearchFirmProductsFlat(nsData.payload.mssearch.items)),\n    };\n  }\n\n  const searchSetting = yield select(selectSearchMode);\n  const { options, filters } = parseFiltersAndOptions({\n    options: {\n      orderBy: {\n        'firmProduct.productNumber': 1\n      }\n    },\n    filters: {\n      'and': [\n        {\n          'productSearch': {\n            'match': searchTerm\n          }\n        },\n      ]\n    },\n    searchSetting\n  });\n\n  const {\n    data: apiData,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getSearchFirmProducts',\n      body: {\n        options,\n        filters\n      }\n    }\n  }));\n  if (apiData) {\n    const iApiData = fromJS(apiData);\n    const data: List<IMap<Product>> = iApiData.getIn(['payload', 'product', 'firmProduct']);\n    if (data == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      return {\n        data,\n      };\n    };\n  }\n  return {\n    err\n  };\n}\n\nexport function* quickSearchCategory(\n  searchTerm: string\n) {\n  // console.error('quicksearchcategory', {\n  //   searchTerm,\n  // });\n  const {\n    data: apiData,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(rawGetProductCategories, new GetProductCategoriesAction({\n    body: {\n      name: searchTerm\n    }\n  }));\n  // console.error('quicksearchcategory2', {\n  //   apiData,\n  // });\n  if (apiData) {\n    const iApiData = fromJS(apiData);\n    const productCategoryGroups: List<IMap<ProductCategoryGroup>> = iApiData.getIn(['payload', 'product', 'productCategories']);\n    if (productCategoryGroups == null) {\n      console.error('Invalid response', apiData); // tslint:disable-line\n    } else {\n      // TODO: at some point in the future\n      // yield put(new GetProductCategoriesSucceededAction({response: productCategoryGroups}));\n    };\n  }\n  return {\n    data: apiData,\n    err\n  };\n}\n\nexport function* quickSearchSeries(\n  searchTerm: string\n) {\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const specBuildingForFilter = yield select(makeSelectBuildingForSeriesSearchFilter());\n  const testSpecMode = yield select(makeSelectTestSpecMode());\n  const hideDiscontinued = yield select(makeSelectHideDiscontinuedSeries());\n  const mode = yield select(makeSelectMode());\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const location = isRegisteredUser ? specOrOfficeLocationForFilter : undefined;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  // draft = true will search ONLY drafts\n  // draft = false will search ONLY non-draft\n  // draft = null will search BOTH \n  // draft = false (default if nothing is passed) will search only non-draft\n  const testQuery = testSpecMode ? null : false;\n  const orderBy = yield select(makeSelectSeriesSearchOrderBy());\n  const {\n    data: apiData,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getSearchSeries',\n      body: {\n        filters : {\n          'and': [\n            {\n              'status': {\n                'nin': ['deleted', 'inactive', ...hideDiscontinued ? ['discontinued'] : []]\n              }\n            },\n            {\n              'or': [\n                {\n                  'name': {\n                    'like': searchTerm\n                  }\n                },\n                {\n                  'brand': {\n                    'like': searchTerm\n                  }\n                },\n                {\n                  'description': {\n                    'like': searchTerm\n                  }\n                }\n              ]\n            },\n            ...isRegisteredUser ? [] : [GUEST_USER_LOCATION_FILTER]\n          ]\n        },\n        building: specBuildingForFilter,\n        location,\n\n        // It's BE pagination, but since it's a quick search, we want to get all results we can\n        options: {\n          'limit': 500,\n          'offset': 0,\n          orderBy\n        }\n      },\n      queries: {\n        draft: testQuery,\n        ...useUnavailabilityPurchasabilityQuery,\n      },\n    }\n  }));\n  if (apiData) {\n    const iApiData = fromJS(apiData);\n    const seriesList: List<IMap<Series>> = iApiData.getIn(['payload', 'product', 'series']);\n    if (seriesList == null) {\n      console.error('Invalid response', seriesList); // tslint:disable-line\n    } else {\n      const hasNextPage = iApiData.getIn(['payload', 'product', 'hasNextPage']);\n      yield put(new UpdateSeriesAction({seriesList, hasNextPage}));\n    };\n  }\n  return {\n    data: apiData,\n    err\n  };\n}\n\nexport function* getSeries(\n  action: GetSeriesAction\n) {\n  const {\n    payload\n  } = action;\n  const {\n    missingRule,\n    seriesIdToOrderBy,\n  } = payload;\n\n  const specOrOfficeLocationForFilter = yield select(makeSelectLocationForSeriesSearchFilter());\n  const specBuildingForFilter = yield select(makeSelectBuildingForSeriesSearchFilter());\n  const testSpecMode = yield select(makeSelectTestSpecMode());\n  const seriesSearchOptions = yield select(makeSelectSeriesSearchOptions());\n  const showDraftSeriesOnly = yield select(makeSelectShowDraftSeriesOnly());\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const location = isRegisteredUser ? specOrOfficeLocationForFilter : undefined;\n  const useUnavailabilityPurchasabilityQuery = yield select(makeSelectUseUnavailabilityPurchasabilityQuery(location));\n\n  // draft = true will search ONLY drafts\n  // draft = false will search ONLY non-draft\n  // draft = null will search BOTH \n  // draft = false (default if nothing is passed) will search only non-draft\n  const testQuery = testSpecMode ? showDraftSeriesOnly ? true : null : false;\n  const orderBy = yield select(makeSelectSeriesSearchOrderBy());\n\n  const filtersAnd = missingRule.getIn(['filters', 'and']);\n  const adjustedMissingRule = isRegisteredUser ? missingRule : missingRule.setIn(['filters', 'and'], (filtersAnd || List()).push(GUEST_USER_LOCATION_FILTER));\n\n  const {\n    data,\n    err\n  }: {\n    data: IProductResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getSearchSeries',\n      body: {\n        location,\n        building: specBuildingForFilter,\n        options: {\n          ...seriesSearchOptions.toJS(),\n          'orderBy': {\n            ...(Boolean(seriesIdToOrderBy) && { [`(series.id = ${seriesIdToOrderBy})`]: -1 }),\n            ...orderBy,\n          },\n        },\n        ...adjustedMissingRule.toJS()\n      },\n      queries: {\n        draft: testQuery,\n        ...useUnavailabilityPurchasabilityQuery,\n      }\n    }\n  }));\n  if (data) {\n    const immutableResponse = fromJS(data);\n    const seriesList = immutableResponse.getIn(['payload', 'product', 'series']);\n    if (seriesList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      const hasNextPage = immutableResponse.getIn(['payload', 'product', 'hasNextPage']);\n      yield put(new UpdateSeriesAction({seriesList, hasNextPage}));\n    };\n  } else {\n    console.error('getSeries API failed', err); // tslint:disable-line\n  }\n  yield put(new SeriesLoadingFinishedAction());\n  // only send amplitude when we have timerStart\n  const timerTracker = yield select(makeSelectTimerTracker());\n  const startTime = timerTracker.get('startTime');\n  if (startTime !== 0) {\n    const timerAction = timerTracker.get('action');\n    const isNewDrawingCreated = yield select(makeSelectNewDrawingId());\n    const productCategoryId = yield select(makeSelectProductCategoryId());\n    const productCategoriesList = yield select(makeSelectProductTypeIdToProductTypeMap());\n    const amplitudeData = yield select(makeSelectAmplitudeData());\n    switch (timerAction) {\n      case AMPLITUDE_EVENT.productSelectionPageLoad: {\n        amplitude.logEvent(AMPLITUDE_EVENT.productSelectionPageLoad, {\n          renderTime: Date.now() - startTime,\n          newDrawingCreated: isNewDrawingCreated !== -1 ? true : false,\n          categoryId: productCategoryId,\n          categoryName: productCategoriesList.getIn([productCategoryId, 'name']),\n          ...amplitudeData\n        });\n        break;\n      }\n      case AMPLITUDE_EVENT.productSelectionPageFilter: {\n        const seriesFilters = yield select(selectSeriesFilters());\n        const seriesFilterInput = yield select(makeSelectSeriesFilterInput());\n        const filtersList = seriesFilters.reduce((acc: List<any>, filterSet: Set<IMap<ValueLabel>>) => {\n          return filterSet ? acc.concat(\n            filterSet.map((filterValueLabel: IMap<ValueLabel>) => filterValueLabel.get('label'))\n          ) : acc;\n        }, List());\n        if (filtersList.size || seriesFilterInput) {\n          amplitude.logEvent(AMPLITUDE_EVENT.productSelectionPageFilter, {\n            renderTime: Date.now() - startTime,\n            searchTerm: seriesFilterInput,\n            filters: filtersList.join(', '),\n            categoryId: productCategoryId,\n            categoryName: productCategoriesList.getIn([productCategoryId, 'name']),\n            ...amplitudeData\n          });\n        }\n        break;\n      }\n      default: break;\n    }\n  }\n  // reset timer\n  yield put(new SetTimerStartAction({startTime: 0, action: ''}));\n}\nexport function* rawGetProductCategories (\n  productCategoryAction: GetProductCategoriesAction\n) {\n  yield call(taggedDelay, 101, 'rawGetProductCategories');\n\n  const isRegisteredUser = yield select(makeSelectIdentityObject());\n  const location = yield select(makeSelectLocationForSeriesSearchFilter());\n  const countryId = location?.getIn(['country', 'id']);\n  const provinceId = location?.getIn(['province', 'id']);\n  const cityId = location?.getIn(['city', 'id']);\n\n  const {\n    body,\n    queries = {},\n    applyUnavailabilityFilter,\n  } = productCategoryAction.payload;\n  const {\n    data,\n    err\n  }: {\n    data: IProductCategoryResponse,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getProductCategories',\n      body,\n      queries: {\n        ...queries,\n        ...(applyUnavailabilityFilter && isRegisteredUser) ? {\n          filterUnavailability: true,\n          countryId,\n          provinceId,\n          cityId,\n        } : {},\n      }\n    }\n  }));\n  return {\n    data,\n    err,\n  }\n}\n\nexport function* getProductCategories (\n  productCategoryAction: GetProductCategoriesAction\n) {\n  yield put(new CategoryLoadingAction(true));\n  yield call(taggedDelay, 101, 'getProductCategories');\n  const {\n    data,\n    err\n  }: {\n    data: IProductCategoryResponse,\n    err: Error\n  } = yield call(rawGetProductCategories, productCategoryAction);\n  if (data) {\n    yield put(new CategoryLoadingAction(false));\n    const immutableData = fromJS(data);\n    const response: List<IMap<ProductCategoryGroup>> = immutableData.getIn(['payload', 'product', 'productCategories']);\n    if (response == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProductCategoriesSucceededAction({response}));\n    };\n  } else {\n    yield put(new GetProductsFailedAction({err}));\n  }\n}\n\nexport function* getBrandRepProductCategories(\n  action: GetBrandRepProductCategoriesAction\n) {\n  const {\n    data,\n    err\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'product',\n      endpoint: 'getBrandRepProductCategories',\n      body: {\n      },\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const response: List<IMap<ProductCategoryGroup>> = immutableData.getIn(['payload', 'product', 'productCategories']);\n\n    if (response == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetProductCategoriesSucceededAction({ response }));\n    }\n  } else {\n    console.error('getBrandRepProductCategories API failed', err); // tslint:disable-line\n    yield put(new GetProductsFailedAction({ err }));\n  }\n}\n\nexport function* saveFirmCategory(\n  action: SaveFirmCategoryAction,\n) {\n  yield put(new SaveFirmCategoryLoadingAction(true));\n  const {\n    name,\n    onSuccess,\n  } = action.payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'product',\n        endpoint: 'saveFirmCategory',\n        body: {\n          name,\n        }\n      }\n    ]\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const newCategory: IMap<any> = immutableData.getIn(['payload', 'product', 'category', 0]);\n    if (newCategory == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n      yield put(new SaveFirmCategoryLoadingAction(false));\n    } else {\n      yield put(new SetSnackbarOpenAction({\n        message: i18next.t('translations:productDrawerSnackbar.saveFirmCategorySuccessfulMessage'),\n        severity: 'success',\n        anchorOrigin:{\n          horizontal: 'right',\n          vertical: 'bottom'\n        }\n      }));\n      yield put(new SaveFirmCategoryLoadingAction(false));\n      yield put(new GetCategoriesAction());\n      if (onSuccess) {\n        onSuccess(Map({ id: newCategory.get('id'), value: newCategory.get('categoryName') }));\n      }\n    }\n  } else {\n    console.error('saveFirmCategory error', {err}); // tslint:disable-line\n    yield put(new SetSnackbarOpenAction({\n      message: i18next.t('translations:productDrawerSnackbar.saveFirmCategoryFailedMessage'),\n      severity: 'error',\n      anchorOrigin:{\n        horizontal: 'right',\n        vertical: 'bottom'\n      }\n    }));\n    yield put(new SaveFirmCategoryLoadingAction(false));\n  }\n}","/*\n * ProductModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IProductReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IProductModuleComponentProps {\n}\n\ninterface IProductModuleProps extends IProductModuleComponentProps {\n  reducerState: IMapNonRecursive<IProductReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ProductModuleProps = IProductModuleProps;\n\nclass ProductModule extends React.Component<ProductModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IProductModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IProductModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ProductModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './ProductModule';\nexport default Module;","import {\n  fromJS,\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  TaskActionTypes,\n  GetTasksSucceededAction,\n  SelectTaskIdAction,\n  EditTaskSucceededAction,\n  DeleteTaskAction,\n  UpdateCriteriaStatusSucceededAction,\n  EditCriteriaSucceededAction,\n  DeleteCriteriaSuccceededAction,\n  AddCriteriaSucceededAction,\n} from './actions';\nimport {\n  Task, Criteria,\n} from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\nexport interface ITaskReducerState {\n  tasks: Map<number, IMap<Task>>;\n  selectedTaskId: number;\n}\n\nconst INITIAL_STATE = fromJS({\n  tasks: {},\n  selectedTaskId: -1,\n});\n\nexport const reducer = (state: IMapNonRecursive<ITaskReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case TaskActionTypes.GET_TASKS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetTasksSucceededAction;\n      const {\n        tasks\n      } = payload;\n\n      return state.update(\n        'tasks',\n        (tasksData: Map<number, IMap<Task>>) => {\n          return tasks.reduce(\n            (acc: Map<number, IMap<Task>>, task: IMap<Task>) => {\n              return acc.set(task.get('id'), task);\n            },\n            tasksData\n          );\n        }\n      );\n    }\n\n    case TaskActionTypes.SELECT_TASK_ID: {\n      const {\n        payload,\n      } = action as SelectTaskIdAction;\n      const {\n        taskId\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('selectedTaskId', taskId);\n      });\n    }\n\n    case TaskActionTypes.EDIT_TASK_SUCCEEDED: {\n      const {\n        payload,\n      } = action as EditTaskSucceededAction;\n\n      const taskData = payload.getIn(['payload', 'task', 'task', 0]);\n      const taskId = taskData.get('id');\n\n      return state.withMutations((ctx) => {\n        ctx.setIn(['tasks', taskId], taskData);\n      });\n    }\n\n    case TaskActionTypes.DELETE_TASK: {\n      const {\n        payload,\n      } = action as DeleteTaskAction;\n\n      const selectedTaskId = payload.selectedTaskId;\n\n      return state.withMutations((ctx) => {\n        ctx.deleteIn(['tasks', selectedTaskId]);\n      });\n    }\n\n    case TaskActionTypes.UPDATE_CRITERIA_STATUS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as UpdateCriteriaStatusSucceededAction;\n\n      const updatedCriteriaData = payload.criteriaData.getIn(['payload', 'task', 'criteria', 0], Map());\n      const updatedCriteriaId = updatedCriteriaData.get('id');\n      const taskId = payload.taskId;\n\n      return state.withMutations((ctx) => {\n        const criterias = ctx.getIn(['tasks', Number(taskId), 'criteria']);\n        const updatedCriterias = criterias.map((criteria) => {\n          if (criteria.get('id') === updatedCriteriaId) {\n            return updatedCriteriaData;\n          } else {\n            return criteria;\n          }\n        });\n\n        ctx.setIn(['tasks', Number(taskId), 'criteria'], updatedCriterias);\n      });\n    }\n\n    case TaskActionTypes.EDIT_CRITERIA_SUCCEEDED : {\n      const {\n        payload,\n      } = action as EditCriteriaSucceededAction;\n\n      const {\n        newCriteriaData,\n        taskId\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        const criterias = ctx.getIn(['tasks', Number(taskId), 'criteria']);\n        const updatedCriteriaId = newCriteriaData.get('id');\n\n        const updatedCriterias = criterias.map((criteria) => {\n          if (criteria.get('id') === updatedCriteriaId) {\n            return newCriteriaData;\n          } else {\n            return criteria;\n          }\n        });\n\n        ctx.setIn(['tasks', Number(taskId), 'criteria'], updatedCriterias);\n      });\n    }\n\n\n    case TaskActionTypes.DELETE_CRITERIA_SUCCEEDED : {\n      const {\n        payload,\n      } = action as DeleteCriteriaSuccceededAction;\n\n      const {\n        deletedCriteriaId\n      } = payload;\n\n      return state.withMutations((ctx) => {\n        const selectedTaskId = ctx.get('selectedTaskId');\n        const criterias = ctx.getIn(['tasks', Number(selectedTaskId), 'criteria']);\n        const updatedCriterias = criterias.filter((criteria) => {\n          return Number(criteria.get('id')) !== deletedCriteriaId;\n        });\n\n        ctx.setIn(['tasks', Number(selectedTaskId), 'criteria'], updatedCriterias);\n      });\n    }\n\n    case TaskActionTypes.ADD_CRITERIA_SUCCEEDED : {\n      const {\n        payload,\n      } = action as AddCriteriaSucceededAction;\n\n      const {\n        criteria\n      } = payload;\n\n      const selectedTaskId = state.get('selectedTaskId');\n      const oldCriteria: List<IMap<Criteria>> = state.getIn(['tasks', Number(selectedTaskId), 'criteria']);\n      if (oldCriteria != null) {\n        const criteriaMap = Map<number, IMap<Criteria>>().withMutations((mutableCriteriaMap) => {\n          criteria.forEach((criterion) => {\n            const id = criterion.get('id');\n            mutableCriteriaMap.set(id, criterion);\n          });\n        });\n        const updatedOldCriteria = oldCriteria.map((existingCriterion) => {\n          const id = existingCriterion.get('id');\n          if (criteriaMap.has(id)) {\n            return criteriaMap.get(id);\n          }\n          return existingCriterion;\n        });\n\n        const oldCriteriaIdSet = updatedOldCriteria.map((existingCriterion) => {\n          const id = existingCriterion.get('id');\n          return id;\n        }).toSet();\n\n        const newCriteria = updatedOldCriteria.concat(criteria.filter((criterion) => {\n          const id = criterion.get('id');\n          return !oldCriteriaIdSet.has(id);\n        }));\n        return state.setIn(['tasks', Number(selectedTaskId), 'criteria'], newCriteria);\n      }\n      return state.setIn(['tasks', Number(selectedTaskId), 'criteria'], criteria);\n    }\n\n    case TaskActionTypes.RESET_TASKS: return INITIAL_STATE;\n\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","import {\n  all,\n  call,\n  takeLatest,\n  takeEvery,\n  put,\n  select,\n} from 'redux-saga/effects';\nimport {\n  TaskActionTypes,\n  GetTasksAction,\n  GetTasksSucceededAction,\n  AddTaskAction,\n  EditTaskAction,\n  EditTaskSucceededAction,\n  DeleteTaskAction,\n  TagEntityAction,\n  AddCriteriaAction,\n  UpdateCriteriaStatusAction,\n  UpdateCriteriaStatusSucceededAction,\n  EditCriteriaAction,\n  DeleteCriteriaAction,\n  UnTagEntityAction,\n  SelectTaskIdAction,\n  CreateOrUpdateTaskAction,\n  EditCriteriaSucceededAction,\n  DeleteCriteriaSuccceededAction,\n  AddCriteriaSucceededAction,\n  GetTaskByIdAction,\n  UpdateCriteriaStatusesAndGetTaskAction,\n  UpdateCriterionAndGetTaskAction,\n  ResetTasksAction,\n} from './actions';\nimport {\n  makeSelectTasks,\n} from './selectors';\nimport {\n  atsApiCallWaitingAction,\n} from '../AtsModule/saga';\nimport {\n  AtsActionTypes,\n  AtsApiCallAction,\n} from '../AtsModule/actions';\nimport {\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport Task, {\n  TagEntityType,\n} from '../../models/Task';\nimport { Criteria } from '../../models';\nimport { removeTZ } from '../../components/FieldDatePickerV2';\n\nexport default function * defaultSaga() {\n\n  yield takeEvery(TaskActionTypes.CREATE_OR_UPDATE_TASK, createOrUpdateTask);\n  yield takeEvery(TaskActionTypes.ADD_TASK, addTask);\n  yield takeEvery(TaskActionTypes.GET_TASKS, getTasks);\n  yield takeEvery(TaskActionTypes.EDIT_TASK, editTask);\n  yield takeEvery(TaskActionTypes.DELETE_TASK, deleteTask);\n  yield takeEvery(TaskActionTypes.TAG_ENTITY, tagEntity);\n  yield takeEvery(TaskActionTypes.UNTAG_ENTITY, unTagEntity);\n  yield takeEvery(TaskActionTypes.ADD_CRITERIA, addCriteria);\n  yield takeEvery(TaskActionTypes.UPDATE_CRITERIA_STATUS, updateCriteria);\n  yield takeEvery(TaskActionTypes.EDIT_CRITERIA, editCriteria);\n  yield takeEvery(TaskActionTypes.DELETE_CRITERIA, deleteCriteria);\n  yield takeEvery(TaskActionTypes.GET_TASK_BY_ID, getTaskById);\n  yield takeEvery(TaskActionTypes.UPDATE_CRITERIA_STATUSES_AND_GET_TASK, updateCriteriaStatusesAndGetTask);\n  yield takeEvery(TaskActionTypes.UPDATE_CRITERION_STATUS_AND_GET_TASK, updateCriterionAndGetTask);\n\n  yield takeEvery(AtsActionTypes.USER_LOGGED_IN, resetTasks);\n}\n\nfunction* resetTasks() {\n  yield put(new ResetTasksAction());\n}\n\nfunction* getTaskById(\n  action: GetTaskByIdAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    taskId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'getTask',\n        body: {\n        },\n        params: {\n          taskId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const taskList = immutableData.getIn(['payload', 'task', 'task']);\n    if (taskList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put (new GetTasksSucceededAction({tasks: taskList}));\n    }\n  } else {\n    console.error('get task error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* updateCriteriaStatusesAndGetTask(\n  action: UpdateCriteriaStatusesAndGetTaskAction,\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    task,\n    newStatus,\n  } = payload;\n\n  const taskId = task.get('id');\n  const criteria = task.get('criteria');\n  const batchActions = [];\n\n  if (taskId != null) {\n\n    if (criteria != null) {\n      const updateCriteriaAction = criteria.map((criterion) => {\n        const criterionId = criterion.get('id');\n        return call(updateCriteria, new UpdateCriteriaStatusAction({\n          taskId,\n          criteriaId: criterionId,\n          status: newStatus\n        }));\n      });\n      batchActions.push(...updateCriteriaAction.toArray());\n    }\n    yield all(batchActions);\n    yield put(new GetTaskByIdAction({taskId}));\n  } else {\n    console.error('error creating updating criteria and get task task', { // tslint:disable-line\n      action,\n    });\n  }\n}\n\nfunction* createOrUpdateTask(\n  action: CreateOrUpdateTaskAction,\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    // userId,\n    task,\n    // originalTask,\n    criteria,\n    assignedUsers,\n    deletedUserIds,\n    editedCriteriaIds,\n    deletedCriteriaIds,\n  } = payload;\n\n  let taskId = task.get('id');\n  const completionDueDate = removeTZ(task.get('completionDueDate'));\n  const batchActions = [];\n  if (taskId == null) {\n    const {\n      data,\n      err,\n    } = yield call(addTask, new AddTaskAction({\n      task: task.set('completionDueDate', completionDueDate)\n    }));\n\n    if (data != null) {\n\n      const immutableData = fromJS(data);\n      taskId = immutableData.getIn(['payload', 'task', 'task', 0, 'id']);\n    }\n  }\n  if (taskId != null) {\n    batchActions.push(call(editTask, new EditTaskAction({task: fromJS({\n      id: taskId,\n      completionDueDate,\n      task: task.get('task')\n    })})));\n    if (assignedUsers != null) {\n      const assignUserActions = assignedUsers.map((assignedUser) => {\n        return call(tagEntity, new TagEntityAction({\n          taskId,\n          type: TagEntityType.USER,\n          typeId: assignedUser.get('id'),\n        }));\n      });\n      // yield all(assignUserActions.toArray());\n      batchActions.push(...assignUserActions.toArray());\n    }\n    if (deletedUserIds != null) {\n      const deleteUserActions = deletedUserIds.map((deletedUserId) => {\n        return call(unTagEntity, new UnTagEntityAction({\n          taskId,\n          type: TagEntityType.USER,\n          typeId: deletedUserId,\n        }));\n      });\n      // yield all(fromJS(deleteUserActions).toArray());\n      batchActions.push(...deleteUserActions.toArray());\n    }\n\n    if (deletedCriteriaIds != null) {\n      const deleteCriterionActions = deletedCriteriaIds.map((criterionId) => {\n        return call(deleteCriteria, new DeleteCriteriaAction({\n          taskId,\n          criteriaId: criterionId,\n        }));\n      });\n      // yield all(deleteCriterionActions.toArray());\n      batchActions.push(...deleteCriterionActions.toArray());\n    }\n    if (criteria != null) {\n      const criteriaJS = criteria.toJS();\n      const newCriteria: Array<Partial<Criteria>> = [];\n      const editedCriteria: Array<Partial<Criteria>> = [];\n      criteriaJS.forEach(criterion => {\n        if (criterion.id && editedCriteriaIds.get(criterion.id)) {\n          editedCriteria.push(criterion);\n        } else if (!criterion.id) {\n          newCriteria.push(criterion);\n        }\n      });\n\n      if (newCriteria.length) {\n        batchActions.push(\n          call(addCriteria, new AddCriteriaAction({\n            taskId,\n            criteria: newCriteria.map(criterion => ({ criteria: criterion.criteria }))\n          }))\n        );\n      }\n      if (editedCriteria.length) {\n        batchActions.push(\n          call(editCriteria, new EditCriteriaAction({\n            taskId,\n            criteria: editedCriteria.map(criterion => ({\n              id: criterion.id,\n              params: {\n                criteria: criterion.criteria,\n                status: criterion.status\n              }\n            }))\n          }))\n        );\n      }\n    }\n    return yield all(batchActions);\n  } else {\n    console.error('error creating new task', { // tslint:disable-line\n      action,\n    });\n  }\n}\n\nfunction* deleteCriteria(\n  action: DeleteCriteriaAction,\n) {\n  const taskId = action.payload.taskId;\n  const criteriaId = action.payload.criteriaId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'deleteCriteria',\n        body: {\n        },\n        params: {\n          taskId,\n          criteriaId,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const deletedCriteriaId = immutableData.getIn(['payload', 'task', 'criteria', 0, 'id']);\n    if (deletedCriteriaId == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put (new DeleteCriteriaSuccceededAction({deletedCriteriaId}));\n    }\n  } else {\n    console.error('delete criteria error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* editCriteria(\n  action: EditCriteriaAction,\n) {\n  const taskId = action.payload.taskId;\n  const criteria = action.payload.criteria;\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'updateCriteria',\n        body: [\n          ...criteria\n        ],\n        params: {\n          taskId,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const criteriaList: IMap<Criteria> = immutableData.getIn(['payload', 'task', 'criteria']);\n    if (criteria == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put (new EditCriteriaSucceededAction({newCriteriaData: criteriaList, taskId}));\n    }\n  } else {\n    console.error('edit criteria error', {err}); // tslint:disable-line\n  }\n}\n\n\nfunction* updateCriterionAndGetTask(\n  action: UpdateCriterionAndGetTaskAction,\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    taskId,\n    criteriaId,\n    status,\n  } = payload;\n\n  const batchActions = [];\n  if (taskId != null) {\n    batchActions.push(call(updateCriteria, new UpdateCriteriaStatusAction({taskId, criteriaId, status})));\n    batchActions.push(call(getTaskById, new GetTaskByIdAction({taskId})));\n\n    yield all(batchActions);\n    yield put(new GetTaskByIdAction({taskId}));\n  } else {\n    console.error('error creating new task', { // tslint:disable-line\n      action,\n    });\n  }\n}\n\nfunction* updateCriteria(\n  action: UpdateCriteriaStatusAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    taskId,\n    criteriaId,\n    status,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'updateCriteriaStatus',\n        body: {\n          status\n        },\n        params: {\n          taskId,\n          criteriaId,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    if (immutableData == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put (new UpdateCriteriaStatusSucceededAction({criteriaData: immutableData, taskId}));\n    }\n  } else {\n    console.error('update criteria error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* addCriteria(\n  action: AddCriteriaAction,\n) {\n  const {\n    payload,\n  } = action;\n\n  const {\n    taskId,\n    criteria,\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'addCriteria',\n        body: [\n          ...criteria,\n        ],\n        params: {\n          taskId,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const criteriaList: List<IMap<Criteria>> = immutableData.getIn(['payload', 'task', 'criteria']);\n    if (criteriaList == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put (new AddCriteriaSucceededAction({criteria: criteriaList}));\n    }\n\n  } else {\n    console.error('add criteria error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* tagEntity(\n  action: TagEntityAction,\n) {\n  const {\n    payload: tagEntityData,\n  } = action;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'tagEntityByType',\n        body: {\n        },\n        params: {\n          ...tagEntityData,\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const tasks: List<IMap<Task>> = immutableData.getIn(['payload', 'task', 'task']);\n    if (tasks != null) {\n      yield put(new GetTasksSucceededAction({ tasks }));\n    } else {\n      console.error('task api error', { // tslint:disable-line\n        data,\n      });\n    }\n  } else {\n    console.error('add entity error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* unTagEntity(\n  action: UnTagEntityAction,\n) {\n  const {\n    payload: tagEntityData,\n  } = action;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'unTagEntityByType',\n        body: {\n        },\n        params: {\n          ...tagEntityData\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const tasks: List<IMap<Task>> = immutableData.getIn(['payload', 'task', 'task']);\n    if (tasks != null) {\n      yield put(new GetTasksSucceededAction({ tasks }));\n    } else {\n      console.error('task api error', { // tslint:disable-line\n        data,\n      });\n    }\n\n  } else {\n    console.error('delete entity error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* deleteTask(\n  action: DeleteTaskAction,\n) {\n  const selectedTaskId = action.payload.selectedTaskId;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'task',\n        endpoint: 'deleteTask',\n        body: {\n        },\n        params: {\n          taskId: selectedTaskId\n        }\n      }\n    ]\n  }));\n  if (data) {\n    // do nothing yet\n    // tslnit:disable-line\n  } else {\n    console.error('delete task error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* editTask(\n  action: EditTaskAction,\n) {\n  const {\n    payload,\n  } = action;\n  const {\n    task,\n  } = payload;\n\n  const taskId = task.get('id');\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      taskId,\n      {\n        service: 'task',\n        endpoint: 'updateTask',\n        body: {\n          ...task.toJS(),\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    yield put(new EditTaskSucceededAction(immutableData));\n    yield put(new GetTaskByIdAction({taskId}));\n  } else {\n    console.error('edit task error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* getTasks(\n  action: GetTasksAction,\n) {\n  const {\n    payload\n  } = action;\n\n  const {\n    type,\n    typeId\n  } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      type,\n      typeId,\n      {\n        service: 'task',\n        endpoint: 'getFullTasksByType',\n        body: {\n          full: 1\n        }\n      }\n    ]\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const tasks: List<IMap<Task>> = immutableData.getIn(['payload', 'task', 'task']);\n    if (tasks == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetTasksSucceededAction({ tasks }));\n    }\n\n\n  } else {\n    console.error('get tasks error', {err}); // tslint:disable-line\n  }\n}\n\nfunction* addTask(\n  action: AddTaskAction,\n  ) {\n\n    const {\n      payload,\n    } = action;\n\n    const {\n      task,\n    } = payload;\n\n  const {\n    data,\n    err,\n  }: {\n    data: any,\n    err: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'task',\n      endpoint: 'addTask',\n      body: {\n        ...(task.toJS())\n      }\n    }\n  }));\n  if (data) {\n    console.debug('add task succeeded: ', task);\n    const immutableData = fromJS(data);\n    const tasks: List<IMap<Task>> = immutableData.getIn(['payload', 'task', 'task']);\n    if (tasks == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      if (tasks != null) {\n        yield put(new GetTasksSucceededAction({ tasks }));\n        const taskId = tasks.getIn([0, 'id']);\n        if (taskId != null) {\n          yield put(new SelectTaskIdAction({ taskId }));\n        }\n      } else {\n        console.error('invalid task response', { // tslint:disable-line\n          data,\n        });\n      }\n    }\n\n  } else {\n    console.error('add task error', {err}); // tslint:disable-line\n  }\n\n  return {\n    data,\n    err,\n  };\n}\n","/*\n * TaskModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport reducer, { ITaskReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface ITaskModuleComponentProps {\n\n}\n\ninterface ITaskModuleProps extends ITaskModuleComponentProps {\n  reducerState: IMapNonRecursive<ITaskReducerState>;\n  dispatch: Dispatch<IAction>;\n}\n\ntype TaskModuleProps = ITaskModuleProps;\n\nclass TaskModule extends React.Component<TaskModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ITaskModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<ITaskModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(TaskModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './TaskModule';\nexport default Module;\n","import {\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\nimport {\n  LocationTypes,\n} from './actions';\nimport { RegionsList } from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\n\n// import {\n//   Settings,\n// } from '../../models';\n\nexport interface ILocationState {\n  countries: List<any>;\n  regions: IMap<any>;\n  error: string;\n  regionsList: List<IMap<RegionsList>>;\n  selectedRegion: IMap<RegionsList>;\n}\n\nconst INITIAL_STATE = fromJS({\n  countries: [],\n  regions: {},\n  error: '',\n  regionsList: [],\n  selectedRegion: {}\n});\n\nexport const reducer = (state: IMapNonRecursive<ILocationState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case LocationTypes.GET_COUNTRIES_SUCCEEDED:\n      return state.set('countries', action.payload.list);\n    case LocationTypes.GET_REGIONS_SUCCEEDED:\n      return state.setIn(['regions', action.payload.type, action.payload.regionType], action.payload.list);\n    case LocationTypes.GET_COUNTRIES_FAILED:\n      return state.withMutations((ctx) => {\n        ctx.set('countries', List());\n        ctx.set('error', action.payload);\n      });\n    case LocationTypes.GET_PROVINCES_SUCCEEDED:\n      return state.set(action.payload.storeKey, action.payload.list);\n    case LocationTypes.GET_PROVINCES_FAILED:\n      return state.withMutations((ctx) => {\n        ctx.set(action.payload.storeKey, List());\n        ctx.set('error', action.payload);\n      });\n    case LocationTypes.GET_CITIES_SUCCEEDED:\n      return state.set(action.payload.storeKey, action.payload.list);\n    case LocationTypes.GET_CITIES_FAILED:\n      return state.withMutations((ctx) => {\n        ctx.set(action.payload.storeKey, List());\n        ctx.set('error', action.payload);\n      });\n    case LocationTypes.SAVE_COUNTRY_NAME:\n      return state.withMutations((ctx) => {\n        ctx.set(action.payload.storeKey, action.payload.country);\n        ctx.delete(action.payload.provinceKey);\n        ctx.delete(action.payload.cityKey);\n      });\n    case LocationTypes.SAVE_PROVINCE_NAME:\n      return state.withMutations((ctx) => {\n        ctx.set(action.payload.storeKey, action.payload.province);\n        ctx.delete(action.payload.cityKey);\n      });\n    case LocationTypes.SAVE_CITY_NAME:\n      return state.set(action.payload.storeKey, action.payload.city);\n    case LocationTypes.GET_REGIONS_LIST_SUCCEEDED:\n      return state.set('regionsList', action.payload.regionsList);\n    case LocationTypes.SET_SELECTED_REGION:\n      return state.set('selectedRegion', action.payload.region);\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import {\n  takeEvery,\n  call,\n  put\n} from 'redux-saga/effects';\nimport {\n  LocationTypes,\n  GetCountriesAction,\n  GetCountriesSucceededAction,\n  GetCountriesFailedAction,\n  GetProvincesAction,\n  GetProvincesSucceededAction,\n  GetProvincesFailedAction,\n  GetCitiesAction,\n  GetCitiesSucceededAction,\n  GetCitiesFailedAction,\n  GetRegionsAction,\n  GetRegionsSucceededAction,\n  GetRegionsListAction,\n  GetRegionsListSucceededAction,\n} from './actions';\nimport {\n  fromJS,\n  List\n} from 'immutable';\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n} from '../../modules/AtsModule/saga';\nimport {\n  ApiCallAction,\n  AtsApiCallAction,\n} from '../../modules/AtsModule/actions';\nimport {\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport { RegionsList } from '../../models';\n\nexport default function* locationSaga() {\n  yield takeEvery(LocationTypes.GET_COUNTRIES, getCountries);\n  yield takeEvery(LocationTypes.GET_REGIONS, getRegions);\n  yield takeEvery(LocationTypes.GET_REGIONS_LIST, getRegionsList);\n  yield takeEvery(LocationTypes.GET_PROVINCES, getProvinces);\n  yield takeEvery(LocationTypes.GET_CITIES, getCities);\n}\n\ninterface ILocationResponse {\n  payload: {\n    list: any\n  };\n  meta: object;\n}\n\nexport function* getRegions(\n  payload: GetRegionsAction\n) {\n  const {\n    payload: {\n      type,\n      regionType\n    }\n  } = payload;\n\n  const {\n    data,\n    error\n  }: {\n    data: ILocationResponse,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'account',\n      endpoint: 'getRegions',\n      params: {\n        type,\n        regionType\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<any>> = immutableData.getIn(['payload', 'account', 'regions'], []).map((region) => region.set('label', region.get('value')));\n    yield put(new GetRegionsSucceededAction({ list, type, regionType }));\n  } else {\n    // yield put(new GetCountriesFailedAction({ error }));\n    console.error('failed GetRegionsAction', { error }); // tslint:disable-line\n  }\n}\n\nexport function* getCountries(\n  countryAction: GetCountriesAction\n) {\n  const {\n    data,\n    error\n  }: {\n    data: ILocationResponse,\n    error: Error\n  } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getCountries'\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<any>> = immutableData.getIn(['payload', 'list', 'listItems'], []);\n    yield put(new GetCountriesSucceededAction({ list }));\n  } else {\n    yield put(new GetCountriesFailedAction({ error }));\n  }\n}\n\nexport function* getProvinces(\n  provinceAction: GetProvincesAction\n) {\n  const  {\n    payload\n  } = provinceAction;\n  const {\n    data,\n    error\n  }: {\n    data: ILocationResponse,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getStates',\n      params: {\n        countryId: payload.countryId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<any>> = immutableData.getIn(['payload', 'list', 'listItems'], []);\n    yield put(new GetProvincesSucceededAction({ list, storeKey: payload.storeKey }));\n  } else {\n    yield put(new GetProvincesFailedAction({ error, storeKey: payload.storeKey }));\n  }\n}\n\nexport function* getCities(\n  cityAction: GetCitiesAction\n) {\n  const {\n    payload\n  } = cityAction;\n  const {\n    data,\n    error\n  }: {\n    data: ILocationResponse,\n    error: Error\n  } = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getCities',\n      params: {\n        stateId: payload.provinceId\n      }\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const list: List<IMap<any>> = immutableData.getIn(['payload', 'list', 'listItems'], []);\n    yield put(new GetCitiesSucceededAction({ list, storeKey: payload.storeKey }));\n  } else {\n    yield put(new GetCitiesFailedAction({ error, storeKey: payload.storeKey }));\n  }\n}\n\nexport function* getRegionsList(\n  payload: GetRegionsListAction\n) {\n  const {\n      url\n  } = payload;\n\n  const {\n    data,\n    error\n  }: {\n    data: ILocationResponse,\n    error: Error\n  } = yield call(apiCallWaitingAction, new ApiCallAction({\n    payload: {\n      service: 'auth',\n      endpoint: 'getRegionsByAppId',\n      queries: {\n        ...url ? {url} : {},\n      }\n    }\n  }));\n\n  if (data) {\n    const immutableData = fromJS(data);\n    const regionsList: List<IMap<RegionsList>> = immutableData.getIn(['payload', 'auth', 'region']) || List();\n    yield put(new GetRegionsListSucceededAction({regionsList}));\n  } else {\n    console.error('failed GetRegionsListAction', { error }); // tslint:disable-line\n  }\n}\n","/*\n * ContactModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport reducer, { ILocationState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\nimport {\n  Debug\n} from '../../containers';\nimport {\n  Hide\n} from '../../components';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface ILocationModuleComponentProps {\n\n}\n\ninterface ILocationModuleProps extends ILocationModuleComponentProps {\n  reducerState: IMapNonRecursive<ILocationState>;\n  dispatch: Dispatch<IAction>;\n}\n\ntype LocationModuleProps = ILocationModuleProps;\n\nclass LocationModule extends React.Component<LocationModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ILocationModuleProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<ILocationModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(LocationModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './LocationModule';\nexport default Module;\n","import React from 'react';\nimport {Menu, MenuItem, Theme, Tooltip} from '@material-ui/core';\nimport {togglePath} from '../../../../components/TogglePath/utils';\nimport {EDIT_MASTER_PATH} from '../../../../constants';\nimport CreateIcon from '@material-ui/icons/Create';\nimport {DuplicateMasterAction} from '../../../../modules/ProjectModule/actions';\nimport {\n    SetOverlayComponentPropsAction,\n    ToggleOverlayComponentAction\n} from '../../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../../components/LoadingModal/Component';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {makeStyles} from '@material-ui/styles';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectLocation} from '../../../../modules/RouterModule/selectors';\nimport {useViewContext} from '../../../../components/detailPageComponents/context/viewContext';\nimport { makeSelectUserCanManageMasters } from '../../../../modules/AtsModule/selectors';\nconst useStyles = makeStyles((theme: Theme) => ({\n    specsInProject: {\n        padding: theme.spacing(3),\n    },\n    specSelectorIndicatorText: {\n        marginRight: theme.spacing(1),\n        whiteSpace: 'nowrap' as 'nowrap'\n    },\n    specSelectorContainer: {\n        padding: theme.spacing(0, 3, 3, 3)\n    },\n    menuItemIcon: {\n        marginRight: theme.spacing(2),\n    },\n}));\nconst DropdownMenu = ({\n    anchorEl,\n    onClose: handleClose,\n    project,\n}) => {\n    const { setIsDeleteModalOpen } = useViewContext();\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const location = useSelector(makeSelectLocation());\n    const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n    return (\n        <Menu\n            anchorEl={anchorEl}\n            open={Boolean(anchorEl)}\n            onClose={handleClose}\n        >\n          <Tooltip title={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}>\n            <span>\n              <MenuItem disabled={!userCanManageMasters} onClick={() => {\n                  togglePath({\n                      pathName: `${EDIT_MASTER_PATH}/${project.get('id')}`,\n                      dispatch,\n                      location\n                  })()();\n                  handleClose();\n              }}>\n                  <CreateIcon fontSize='small' className={classes.menuItemIcon} />\n                  {t('masterDetail.editMasterMenuItem')}\n              </MenuItem>\n            </span>\n          </Tooltip>\n          <Tooltip title={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}>\n            <span>\n              <MenuItem disabled={!userCanManageMasters} onClick={() => {\n                  handleClose();\n                  const projectId = project.get('id');\n                  const projectName = project.get('name');\n                  dispatch(new DuplicateMasterAction({ masterId: projectId }));\n                dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: projectName } }));\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: true\n                }));\n              }}>\n                <FileCopyIcon fontSize='small' className={classes.menuItemIcon} />\n                {t('masterDetail.duplicateMasterMenuItem')}\n              </MenuItem>\n            </span>\n          </Tooltip>\n          <Tooltip title={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}>\n              <span>\n                <MenuItem disabled={!userCanManageMasters} onClick={() => {\n                    setIsDeleteModalOpen(true);\n                    handleClose();\n                    }}\n                >\n                    <DeleteIcon fontSize='small' className={classes.menuItemIcon} />\n                    {t('masterDetail.deleteMasterMenuItem')}\n                </MenuItem>\n              </span>\n          </Tooltip>\n        </Menu>\n    );\n};\n\nexport default DropdownMenu;","import React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n    Theme,\n    Typography,\n    useTheme,\n    Toolbar,\n    Grid,\n    Button,\n    Tooltip\n} from '@material-ui/core';\nimport {IDefaultViewProps} from '../../ProjectSpecDetail/types';\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {List, Map} from 'immutable';\nimport {makeSelectLocation} from '../../../modules/RouterModule/selectors';\nimport {makeSelectProjectSpecConfig} from '../../../modules/ProjectModule/selectors';\nimport {\n    makeSelectMasterProjectspecs, makeSelectSelectedMasterSpecId,\n} from '../../../modules/SpecModule/selectors';\nimport {push} from 'connected-react-router';\nimport {\n    CREATE_NEW_MASTER_SPEC_PATH, EDIT_MASTER_SPEC_PATH, MASTER_LIST_PATH, PRODUCT_CATEGORY_PATH,\n} from '../../../constants';\nimport {togglePath} from '../../../components/TogglePath/utils';\nimport TopBar from '../../../components/detailPageComponents/TopBar';\nimport Breadcrumbs from '../../../components/detailPageComponents/Breadcrumbs';\nimport Header from '../../../components/detailPageComponents/Header';\nimport {getSpecsInProject} from '../../../components/ProjectDetail/common/helpers';\nimport ProductGroupTabs from '../../../components/detailPageComponents/ProductGroupTabs';\nimport ProductGroupContent from '../../../components/detailPageComponents/ProductGroupContent';\nimport {\n    DeleteMasterDrawingAndGetMasterSpecAction,\n    DeleteMasterSpecAndGetMasterProjectByIdAction,\n    SelectDrawingAndRedirectAction,\n    SelectMasterSpecAction,\n} from '../../../modules/SpecModule/actions';\nimport EmptySpec from '../../../components/detailPageComponents/EmptySpec';\nimport {getSelectedDrawings} from '../../../components/detailPageComponents/helpers';\nimport DropdownMenu from './DropdownMenu';\nimport Loading from '../../../components/detailPageComponents/Loading';\nimport {ToggleOverlayComponentAction} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport EmptyView from '../../ProjectSpecDetail/DefaultView/EmptyView';\nimport { UpdateProjectSpecDetailConfigAction } from '../../../modules/ProjectModule/actions';\nimport ActionBar from '../../../components/detailPageComponents/ActionBar';\nimport AddIcon from '@material-ui/icons/Add';\nimport { makeSelectUserCanManageMasters } from '../../../modules/AtsModule/selectors';\n\ninterface INewDefaultViewProps extends IDefaultViewProps {\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    container: {\n        padding: theme.spacing(0, 3, 1),\n        backgroundColor: '#F5F5F5'\n    },\n    stickyHeader: {\n        position: 'sticky',\n        top: 0,\n    },\n    actionBarButtonIcon: {\n        marginLeft: 0,\n        marginRight: 0\n    },\n}));\nconst NewDefaultView: React.FC<INewDefaultViewProps> = ({\n    project\n}) => {\n    const theme = useTheme();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const projectId = project.get('id');\n    const projectSpecs = project.get('specs') ?? List();\n    const location = useSelector(makeSelectLocation());\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const projectName = project.get('name') || '';\n    const specs = useSelector(makeSelectMasterProjectspecs());\n    const selectedSpecId = useSelector(makeSelectSelectedMasterSpecId());\n    const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n\n    const selectedSpec = specs?.find(spec => spec.get('id') === selectedSpecId);\n    const isAi = selectedSpec?.get('isAi');\n    const hasSelectedDrawing = getSelectedDrawings(projectSpecDetailConfig).length > 0;\n    const goto = (path) => {\n        dispatch(push(path));\n    };\n    const breadcrumbs = [\n        {\n            label: t('masterDetail.masterListBreadCrumb'),\n            onClick: () => goto(MASTER_LIST_PATH)\n        },\n        {\n            label: projectName\n        }\n    ];\n    const createSpec = () => {\n        // dispatch(new SetProjectIdForCreatingSpec({ projectId }));\n        togglePath({\n            pathName: CREATE_NEW_MASTER_SPEC_PATH,\n            dispatch,\n            location,\n        })()();\n    };\n    const tabs = projectSpecs.map((spec) => ({\n        name: spec.get('name'),\n        id: spec.get('id'),\n        projectId\n    })).toArray();\n    const handleAddDrawing = () => {\n        dispatch(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH + '/' + selectedSpec.get('id') }));\n    };\n    const handleDeleteSpec = ({ id: specId }) => {\n        dispatch(new DeleteMasterSpecAndGetMasterProjectByIdAction({ deleteId: specId }));\n    };\n    const handleEditSpec = ({ id: specId }) => {\n        togglePath({\n            pathName: `${EDIT_MASTER_SPEC_PATH}/${specId}` ,\n            dispatch,\n            location\n        })()();\n    };\n    const handleDeleteDrawing = (specId: number, drawingId: number) => {\n        dispatch(new DeleteMasterDrawingAndGetMasterSpecAction({\n            drawingId,\n            drawingSpecId: specId,\n            specIdToGet: specId,\n            onDeleteSuccess: () => {\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false,\n                }));\n                dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }));\n            }\n        }));\n    };\n    const handleSelectTab = (newSelectedTab) => dispatch(new SelectMasterSpecAction(newSelectedTab.id));\n    const selectedSpecIndex = projectSpecs.findIndex(spec => spec?.get('id') === selectedSpecId);\n    return (\n        <>\n            <TopBar>\n                <Toolbar variant='dense'>\n                    <Breadcrumbs breadcrumbs={breadcrumbs} />\n                </Toolbar>\n                <Header project={project} ActionMenu={DropdownMenu} />\n            </TopBar>\n            <ProductGroupTabs\n                specs={getSpecsInProject(project, specs)}\n                selectedSpecId={selectedSpec?.get('id')}\n                projectSpecDetailConfig={projectSpecDetailConfig}\n                activeTabIndex={selectedSpecIndex >= 0 ? selectedSpecIndex : false}\n                tabs={tabs}\n                key={projectId}\n                onSelectTab={handleSelectTab}\n                disabledSort={!userCanManageMasters}\n                disabledSortTooltip={!userCanManageMasters ? t('generalTooltip.disabledForNoPermission') : ''}\n                onEdit={userCanManageMasters ? handleEditSpec : undefined}\n                onDelete={userCanManageMasters ? handleDeleteSpec : undefined}\n                onCreate={userCanManageMasters ? createSpec : undefined}\n            />\n            {projectSpecs?.count() === 0\n                ?   <Grid\n                        container={true}\n                        alignContent='flex-start'\n                    >\n                        <EmptyView\n                            onButtonClicked={createSpec}\n                            disabledAdd={!userCanManageMasters}\n                            disabledAddTooltip={!userCanManageMasters ? t('generalTooltip.disabledForNoPermission') : ''}\n                        />\n                    </Grid>\n                :   selectedSpec\n                    ?   <ProductGroupContent\n                            spec={selectedSpec}\n                            key={selectedSpec.get('id')}\n                            isDragDisabled={!userCanManageMasters}\n                            disableDraggableListItem={!userCanManageMasters}\n                            disabledEdit={!userCanManageMasters}\n                            disabledEditTooltip={!userCanManageMasters ? t('generalTooltip.disabledForNoPermission') : ''}\n                            renderAddDrawingButton={({ fullMode = true, isReal = true}) => {\n                              return (\n                                  <Grid container={true} wrap='nowrap' alignItems='center' justify='flex-end'>\n                                    <Tooltip\n                                      title={\n                                        !userCanManageMasters\n                                          ? t('generalTooltip.disabledForNoPermission')\n                                           :  (isAi && isReal)\n                                              ? t('generalTooltip.disabledForAiSpec')\n                                              : !fullMode\n                                                ? t('projectDetailPage.addProduct')\n                                                : ''\n                                      }\n                                    >\n                                      <span>\n                                        <Button\n                                            variant='contained'\n                                            color='primary'\n                                            startIcon={<AddIcon fontSize='small' />}\n                                            disabled={isAi || !userCanManageMasters}\n                                            style={{ whiteSpace: 'nowrap' }}\n                                            classes={{ startIcon: classes.actionBarButtonIcon }}\n                                            onClick={isReal ? handleAddDrawing : null}\n                                        >\n                                          {fullMode ? t('projectDetailPage.addProduct') : ''}\n                                        </Button>\n                                      </span>\n                                    </Tooltip>\n                                  </Grid>\n                              );\n                            }}\n                            renderEmptySpecView={() => {\n                                return <EmptySpec spec={selectedSpec} onButtonClicked={handleAddDrawing} disabledAdd={!userCanManageMasters} disabledAddTooltip={!userCanManageMasters ? t('generalTooltip.disabledForNoPermission') : ''} />;\n                            }}\n                            onDeleteDrawing={handleDeleteDrawing}\n                        />\n                    : <Grid container={true} justify='center'><Loading /></Grid>\n            }\n            <ActionBar\n              type={'master'}\n              selectedSpec={selectedSpec}\n              project={project}\n              specs={specs}\n            />\n        </>\n    );\n};\nexport default NewDefaultView;","// tslint:disable:no-shadowed-variable\nimport React, {useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {AMPLITUDE_EVENT, MASTER_LIST_PATH} from '../../../constants';\nimport {DeleteMasterAction} from '../../../modules/ProjectModule/actions';\nimport CopyModal from '../../../containers/CopyModal';\nimport {DeleteModal} from '../../../components';\nimport AlternativesModal from '../../../containers/AlternativesModal';\nimport NewView from './NewView';\nimport {ViewContext} from '../../../components/detailPageComponents/context/viewContext';\nimport {DragDropContext} from 'react-beautiful-dnd';\nimport {fromJS, List} from 'immutable';\nimport {GetSpecsAction} from '../../../modules/SpecModule/actions';\nimport ViewContainer from '../../SpecDetail/layout/ViewContainer';\nimport {makeSelectGetMasterProjectLoading} from '../../../modules/ProjectModule/selectors';\nimport SortProductGroupsModal from '../../../components/detailPageComponents/SortProductGroupsModal';\nimport AlternativesDropDown from '../../../components/AlternativeDropDown';\nimport {isDraggableListItem, isDroppableShortSpecListId} from '../../../components/ProjectDetail/helpers';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport {\n    SetOverlayComponentPropsAction,\n    SetSnackbarOpenAction,\n    ToggleOverlayComponentAction\n} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport {useAtsApi} from '../../../contexts/AtsApiContext';\nimport {\n    makeSelectMasterProjectspecs,\n    makeSelectSelectedMasterSpecId,\n} from '../../../modules/SpecModule/selectors';\nimport {useTranslation} from 'react-i18next';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport { makeSelectUserCanManageMasters } from '../../../modules/AtsModule/selectors';\n\nconst DefaultView = (props) => {\n    const { project } = props;\n    const amplitudeData = useAmplitudeData();\n    const isLoadingProject = useSelector(makeSelectGetMasterProjectLoading());\n    const specs = project.get('specs') ?? List();\n    const masterSpecs = useSelector(makeSelectMasterProjectspecs());\n    const specId = useSelector(makeSelectSelectedMasterSpecId());\n    const userCanManageMasters = useSelector(makeSelectUserCanManageMasters());\n\n    const spec = masterSpecs?.find(spec => spec.get('id') === specId);\n    const [sortProductGroupsModalOpen, setSortProductGroupsModalOpen] = useState<boolean>(false);\n    const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n    const [productSearchTerm, setProductSearchTerm] = useState('');\n    const dispatch = useDispatch();\n    const atsApi = useAtsApi();\n    const { t } = useTranslation('translations');\n\n    const handleDelete = (project) => {\n        dispatch(new DeleteMasterAction({\n            masterId: project.get('id'),\n            redirectPath: MASTER_LIST_PATH,\n            masterName: project.get('name') ?? '',\n            specIds: project.get('specs')?.map((spec) => spec.get('id')).join(',') ?? ''\n        }));\n    };\n    const viewContextValue = useMemo(() => ({\n        productSearchTerm,\n        setProductSearchTerm,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen\n    }), [\n        productSearchTerm,\n        setProductSearchTerm,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen\n    ]);\n    const onDragEnd = (result: any, specsList: any) => {\n        // dropped outside the list or dropped to the same position\n        if (!result.destination || result.destination.index === result.source.index) {\n            return;\n        }\n        if (isDroppableShortSpecListId(result.destination.droppableId) && isDraggableListItem(result.draggableId) && productSearchTerm === '') {\n            const allDrawings = spec?.get('drawings') ?? List();\n            const filteredDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n            const destinationIndex = result.destination.index;\n            const sourceIndex = result.source.index;\n            if (destinationIndex === sourceIndex) {\n                return;\n            }\n            const sourceDrawing = filteredDrawings.get(sourceIndex);\n            const sourceDrawingId = sourceDrawing.get('id');\n            const destinationDrawing = filteredDrawings.get(destinationIndex);\n            const destinationDrawingId = destinationDrawing.get('id');\n            const sourceDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === sourceDrawingId);\n            const destinationDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === destinationDrawingId);\n            const newDrawings = allDrawings.delete(sourceDrawingIndexInOriginalList).insert(destinationDrawingIndexInOriginalList, sourceDrawing);\n            dispatch(new SetOverlayComponentPropsAction({\n                id: LOADING_MODAL_ID,\n                props: {\n                    action: t('specDetail.movingSections')\n                }\n            }));\n            dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: true\n            }));\n            (atsApi.callApi({\n                service: 'spec',\n                endpoint: 'updateMasterSpec',\n                body: {\n                    drawings: newDrawings.toArray(),\n                },\n                params: {\n                    specId\n                }\n            }) as any).then(res => {\n                const updatedSpecFromRes = fromJS(res?.payload?.spec?.spec?.[0]);\n                if (updatedSpecFromRes == null) {\n                    console.error('Invalid response', res); // tslint:disable-line\n                } else {\n                    dispatch(new GetSpecsAction({\n                        specId: updatedSpecFromRes.get('id'),\n                        onSuccess: () => {\n                            dispatch(new ToggleOverlayComponentAction({\n                                id: LOADING_MODAL_ID,\n                                open: false\n                            }));\n                            dispatch(new SetSnackbarOpenAction({\n                                message: t('specDetail.moveSectionsSuccess'),\n                                severity: 'success'\n                            }));\n                        }\n                    }));\n                }\n            }).catch((error) => {\n                console.error('move drawings failed', { error }); // tslint:disable-line\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false\n                }));\n                dispatch(new SetSnackbarOpenAction({\n                    message: t('specDetail.moveSectionsFailed'),\n                    severity: 'error'\n                }));\n            });\n            return;\n        }\n    };\n    return (\n        <ViewContext.Provider value={viewContextValue}>\n            <DragDropContext onDragEnd={(e) => onDragEnd(e, specs)}>\n                <ViewContainer>\n                    <CopyModal defaultDestinationType='master' />\n                    <DeleteModal\n                        open={isDeleteModalOpen}\n                        itemName={project?.get('name') ?? 'this Master'}\n                        toggleDeleteModal={() => setIsDeleteModalOpen(false)}\n                        handleDelete={() => handleDelete(project)}\n                        withLoading={false}\n                    />\n                    <AlternativesModal />\n                    <AlternativesDropDown\n                      readonly={!userCanManageMasters}\n                    />\n                    <SortProductGroupsModal\n                        isLoading={isLoadingProject}\n                        project={project}\n                        open={sortProductGroupsModalOpen}\n                        onClose={() => setSortProductGroupsModalOpen(false)}\n                    />\n                    <NewView\n                        {...props}\n                    />\n                </ViewContainer>\n            </DragDropContext>\n        </ViewContext.Provider>\n    );\n};\n\nexport default DefaultView;","import React, { useEffect } from 'react';\nimport {\n    GetMasterProjectByIdAction,\n    SelectMasterProjectAction,\n    UpdateProjectSpecDetailConfigAction,\n} from '../../modules/ProjectModule/actions';\nimport {\n    GetMasterSpecsAction,\n    SelectMasterSpecAction,\n    SetModeAction\n} from '../../modules/SpecModule/actions';\nimport { Mode, NOT_FOUND_PATH } from '../../constants';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {push} from 'connected-react-router';\nimport {\n    makeSelectMasterProjectspecs,\n    makeSelectSelectedMasterSpecId,\n} from '../../modules/SpecModule/selectors';\nimport {\n    makeSelectMaster, makeSelectSearchingMasters,\n} from '../../modules/ProjectModule/selectors';\nimport DefaultView from './DefaultView';\n\nconst Loader = ({ match }) => {\n    const projectId = parseInt(match.params.masterId, 10);\n    const project = useSelector(makeSelectMaster({ projectId }));\n    const projectSpecs = project?.get('specs');\n    const specs = useSelector(makeSelectMasterProjectspecs());\n    const selectedSpecId = useSelector(makeSelectSelectedMasterSpecId());\n    const dispatch = useDispatch();\n    const isSearchingMasters = useSelector(makeSelectSearchingMasters());\n    useEffect(() => {\n        dispatch(new UpdateProjectSpecDetailConfigAction({}));\n        dispatch(new GetMasterProjectByIdAction({id: projectId, redirectIfNotfound: true}));\n        dispatch(new SelectMasterProjectAction({ projectId }));\n    }, [projectId]);\n    useEffect(() => {\n        dispatch(new SetModeAction(Mode.master));\n        return () => {\n            dispatch(new UpdateProjectSpecDetailConfigAction({}));\n        };\n    },[]);\n    useEffect(() => {\n        if (projectSpecs?.size > 0) {\n            // get all specs in project\n            projectSpecs.forEach(spec => {\n                const specId = spec.get('id');\n                dispatch(new GetMasterSpecsAction({specId}));\n            });\n        }\n    }, [projectSpecs]);\n\n    useEffect(() => {\n        if (projectSpecs == null || projectSpecs?.size === 0) {\n            return;\n        }\n        const hasSelectedSpecs = projectSpecs?.some(spec => spec.get('id') === selectedSpecId);\n        if (hasSelectedSpecs) {\n            return;\n        } else {\n            dispatch(new SelectMasterSpecAction(projectSpecs.getIn([0, 'id'])));\n        }\n    }, [projectSpecs]);\n\n    if (projectId == null) {\n        dispatch(push(NOT_FOUND_PATH));\n        return null;\n    }\n    if (project == null) {\n        return null;\n    }\n    return <DefaultView project={project} />;\n};\n\n\nexport default Loader;","import React from 'react';\nimport {Menu, MenuItem, Theme} from '@material-ui/core';\nimport {togglePath} from '../../../../components/TogglePath/utils';\nimport {EDIT_TEMPLATE_PATH} from '../../../../constants';\nimport CreateIcon from '@material-ui/icons/Create';\nimport {DuplicateTemplateAction} from '../../../../modules/ProjectModule/actions';\nimport {\n    SetOverlayComponentPropsAction,\n    ToggleOverlayComponentAction\n} from '../../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../../components/LoadingModal/Component';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport {useViewContext} from '../../../../components/detailPageComponents/context/viewContext';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useTranslation} from 'react-i18next';\nimport {makeSelectLocation} from '../../../../modules/RouterModule/selectors';\nimport {makeStyles} from '@material-ui/styles';\nimport {\n    makeSelectIdentityObject,\n    makeSelectTemplateTranslationObject,\n    makeSelectUserHasMasterTemplate\n} from '../../../../modules/AtsModule/selectors';\nimport {AtsActionBlock} from '../../../../components/AtsSvg/AtsActionBlock';\nimport {GUEST_LOGIN_MODAL} from '../../../../components/GuestLoginModal';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n    specsInProject: {\n        padding: theme.spacing(3),\n    },\n    specSelectorIndicatorText: {\n        marginRight: theme.spacing(1),\n        whiteSpace: 'nowrap' as 'nowrap'\n    },\n    menuItemIcon: {\n        marginRight: theme.spacing(2),\n    },\n}));\nconst DropdownMenu = ({\n    anchorEl,\n    onClose: handleClose,\n    project,\n}) => {\n    const { setIsDeleteModalOpen } = useViewContext();\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const { t } = useTranslation('translations');\n    const location = useSelector(makeSelectLocation());\n    const templateTranslationObject = useSelector(makeSelectTemplateTranslationObject());\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n    return (\n        <Menu\n            anchorEl={anchorEl}\n            open={Boolean(anchorEl)}\n            onClose={handleClose}\n        >\n            <MenuItem onClick={() => {\n                handleClose();\n                if (isGuestUser) {\n                    dispatch(new ToggleOverlayComponentAction({\n                        id: GUEST_LOGIN_MODAL,\n                        open: true\n                    }));\n                    return;\n                }\n                togglePath({\n                    pathName: `${EDIT_TEMPLATE_PATH}/${project.get('id')}`,\n                    dispatch,\n                    location\n                })()();\n            }}>\n                <CreateIcon fontSize='small' className={classes.menuItemIcon} />\n                <span style={{ marginRight: 8 }}>{t('masterDetail.editTemplateMenuItem', templateTranslationObject)}</span>\n                {\n                    isGuestUser ? <AtsActionBlock style={{ color: 'inherit', marginLeft: 'auto' }}/> : null\n                }\n            </MenuItem>\n            <MenuItem onClick={() => {\n                handleClose();\n                if (isGuestUser) {\n                    dispatch(new ToggleOverlayComponentAction({\n                        id: GUEST_LOGIN_MODAL,\n                        open: true\n                    }));\n                    return;\n                }\n                const projectId = project.get('id');\n                const projectName = project.get('name');\n                dispatch(new DuplicateTemplateAction({ templateId: projectId }));\n                dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: projectName } }));\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: true\n                }));\n            }}>\n                <FileCopyIcon fontSize='small' className={classes.menuItemIcon} />\n                <span style={{ marginRight: 8 }}>{t('masterDetail.duplicateTemplateMenuItem', templateTranslationObject)}</span>\n                {\n                    isGuestUser ? <AtsActionBlock style={{ color: 'inherit', marginLeft: 'auto' }}/> : null\n                }\n            </MenuItem>\n            <MenuItem\n                onClick={() => {\n                    handleClose();\n                    if (isGuestUser) {\n                        dispatch(new ToggleOverlayComponentAction({\n                            id: GUEST_LOGIN_MODAL,\n                            open: true\n                        }));\n                        return;\n                    }\n                    setIsDeleteModalOpen(true);\n                }}\n            >\n                <DeleteIcon fontSize='small' className={classes.menuItemIcon} />\n                <span style={{ marginRight: 8 }}>{t('masterDetail.deleteTemplateMenuItem', templateTranslationObject)}</span>\n                {\n                    isGuestUser ? <AtsActionBlock style={{ color: 'inherit', marginLeft: 'auto' }}/> : null\n                }\n            </MenuItem>\n        </Menu>\n    );\n};\n\n\nexport default DropdownMenu;","import React from 'react';\nimport {makeStyles} from '@material-ui/styles';\nimport {Button, Grid, Theme, Toolbar, Tooltip, Typography, useTheme} from '@material-ui/core';\nimport {IDefaultViewProps} from '../../ProjectSpecDetail/types';\nimport {useTranslation} from 'react-i18next';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {List} from 'immutable';\nimport {makeSelectLocation} from '../../../modules/RouterModule/selectors';\nimport {\n    makeSelectProjectSpecConfig\n} from '../../../modules/ProjectModule/selectors';\nimport {\n    makeSelectSelectedTemplateSpecId,\n    makeSelectTemplateSpecs\n} from '../../../modules/SpecModule/selectors';\nimport {push} from 'connected-react-router';\nimport {\n    CREATE_NEW_TEMPLATE_SPEC_PATH, EDIT_TEMPLATE_SPEC_PATH, PRODUCT_CATEGORY_PATH,\n    TEMPLATE_LIST_PATH,\n} from '../../../constants';\nimport {togglePath} from '../../../components/TogglePath/utils';\nimport TopBar from '../../../components/detailPageComponents/TopBar';\nimport Breadcrumbs from '../../../components/detailPageComponents/Breadcrumbs';\nimport Header from '../../../components/detailPageComponents/Header';\nimport {getSpecsInProject} from '../../../components/ProjectDetail/common/helpers';\nimport ProductGroupTabs from '../../../components/detailPageComponents/ProductGroupTabs';\nimport ProductGroupContent from '../../../components/detailPageComponents/ProductGroupContent';\nimport {\n    DeleteTemplateDrawingAndGetTemplateSpecAction,\n    DeleteTemplateSpecAndGetTemplateProjectByIdAction,\n    SelectDrawingAndRedirectAction,\n    SelectTemplateSpecAction\n} from '../../../modules/SpecModule/actions';\nimport EmptySpec from '../../../components/detailPageComponents/EmptySpec';\nimport {getSelectedDrawings} from '../../../components/detailPageComponents/helpers';\nimport DropdownMenu from './DropdownMenu';\nimport Loading from '../../../components/detailPageComponents/Loading';\nimport {ToggleOverlayComponentAction} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport {makeSelectIdentityObject, makeSelectTemplateTranslationObject, makeSelectUserHasMasterTemplate, makeSelectUserIsAtsUser} from '../../../modules/AtsModule/selectors';\nimport EmptyView from '../../ProjectSpecDetail/DefaultView/EmptyView';\nimport { UpdateProjectSpecDetailConfigAction } from '../../../modules/ProjectModule/actions';\nimport ActionBar from '../../../components/detailPageComponents/ActionBar';\nimport AddIcon from '@material-ui/icons/Add';\n\ninterface INewDefaultViewProps extends IDefaultViewProps {\n}\nconst useStyles = makeStyles((theme: Theme) => ({\n    container: {\n        padding: theme.spacing(0, 3, 1),\n        backgroundColor: '#F5F5F5'\n    },\n    actionBarButtonIcon: {\n        marginLeft: 0,\n        marginRight: 0\n    },\n}));\nconst NewDefaultView: React.FC<INewDefaultViewProps> = ({\n    project\n}) => {\n    const theme = useTheme();\n    const classes = useStyles();\n    const { t } = useTranslation('translations');\n    const dispatch = useDispatch();\n    const projectId = project.get('id');\n    const projectSpecs = project.get('specs') ?? List();\n    const location = useSelector(makeSelectLocation());\n    const projectSpecDetailConfig = useSelector(makeSelectProjectSpecConfig({}));\n    const projectName = project.get('name') || '';\n    const specs = useSelector(makeSelectTemplateSpecs());\n    const selectedSpecId = useSelector(makeSelectSelectedTemplateSpecId());\n    const templateTranslationObject = useSelector(makeSelectTemplateTranslationObject());\n    const hasMasterTemplateRole: boolean = useSelector(makeSelectUserHasMasterTemplate());\n    const userIsAtsUser: boolean = useSelector(makeSelectUserIsAtsUser());\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n\n    const allowEditProductGroups = hasMasterTemplateRole || userIsAtsUser;\n    const selectedSpec = specs?.find(spec => spec.get('id') === selectedSpecId);\n    const isAi = selectedSpec?.get('isAi');\n    const hasSelectedDrawing = getSelectedDrawings(projectSpecDetailConfig).length > 0;\n    const goto = (path) => {\n        dispatch(push(path));\n    };\n    const breadcrumbs = [\n        {\n            label: t('masterDetail.templateListBreadCrumb', templateTranslationObject),\n            onClick: () => goto(TEMPLATE_LIST_PATH)\n        },\n        {\n            label: projectName\n        }\n    ];\n    const createSpec = () => {\n        togglePath({\n            pathName: CREATE_NEW_TEMPLATE_SPEC_PATH,\n            dispatch,\n            location\n        })()();\n    };\n    const tabs = projectSpecs.map((spec) => ({\n        name: spec.get('name'),\n        id: spec.get('id'),\n        projectId\n    })).toArray();\n    const handleAddDrawing = () => {\n        dispatch(new SelectDrawingAndRedirectAction({ drawingId: -1, path: PRODUCT_CATEGORY_PATH + '/' + selectedSpec.get('id') }));\n    };\n    const handleSelectTab = (newSelectedTab) => dispatch(new SelectTemplateSpecAction(newSelectedTab.id));\n    const selectedSpecIndex = projectSpecs.findIndex(spec => spec?.get('id') === selectedSpecId);\n    const handleDeleteSpec = ({ id: specId }) => {\n        dispatch(new DeleteTemplateSpecAndGetTemplateProjectByIdAction({ deleteId: specId }));\n    };\n    const handleEditSpec = ({ id: specId }) => {\n        togglePath({\n            pathName: `${EDIT_TEMPLATE_SPEC_PATH}/${specId}` ,\n            dispatch,\n            location\n        })()();\n    };\n    const handleDeleteDrawing = (specId: number, drawingId: number) => {\n        dispatch (new DeleteTemplateDrawingAndGetTemplateSpecAction({\n            drawingId,\n            drawingSpecId: specId,\n            specIdToGet: specId,\n            onDeleteSuccess: () => {\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false,\n                }));\n                dispatch(new UpdateProjectSpecDetailConfigAction({ specId, drawingId, deleteDrawing: true }));\n            }\n        }));\n    };\n    return (\n        <>\n            <TopBar>\n                <Toolbar variant='dense'>\n                    <Breadcrumbs breadcrumbs={breadcrumbs} />\n                </Toolbar>\n                <Header project={project} ActionMenu={allowEditProductGroups ? DropdownMenu : null} />\n            </TopBar>\n            <ProductGroupTabs\n                specs={getSpecsInProject(project, specs)}\n                selectedSpecId={selectedSpec?.get('id')}\n                projectSpecDetailConfig={projectSpecDetailConfig}\n                activeTabIndex={selectedSpecIndex >= 0 ? selectedSpecIndex : false}\n                tabs={tabs}\n                key={projectId}\n                displaySort={allowEditProductGroups}\n                onSelectTab={handleSelectTab}\n                onEdit={allowEditProductGroups ? handleEditSpec : null}\n                onDelete={allowEditProductGroups ? handleDeleteSpec : null}\n                onCreate={allowEditProductGroups ? createSpec : null}\n            />\n            {\n                projectSpecs?.count() === 0\n                    ?   <Grid\n                            container={true}\n                            alignContent='flex-start'\n                        >\n                            <EmptyView\n                                onButtonClicked={() => togglePath({\n                                    pathName: CREATE_NEW_TEMPLATE_SPEC_PATH,\n                                    dispatch,\n                                    location\n                                })()()}\n                                disabledAdd={!allowEditProductGroups}\n                            />\n                        </Grid>\n                    :   selectedSpec\n                        ?   <ProductGroupContent\n                                spec={selectedSpec}\n                                key={selectedSpec.get('id')}\n                                disabledEdit={!allowEditProductGroups}\n                                renderAddDrawingButton={allowEditProductGroups ? ({ fullMode = true, isReal = true}) => {\n                                  return (\n                                      <Grid container={true} wrap='nowrap' alignItems='center' justify='flex-end'>\n                                        <Tooltip\n                                          title={\n                                            (isAi && isReal)\n                                              ? t('generalTooltip.disabledForAiSpec')\n                                              : !fullMode\n                                                ? t('projectDetailPage.addProduct')\n                                                : ''\n                                          }\n                                        >\n                                          <Button\n                                              variant='contained'\n                                              color='primary'\n                                              startIcon={<AddIcon fontSize='small' />}\n                                              disabled={isAi}\n                                              style={{ whiteSpace: 'nowrap' }}\n                                              classes={{ startIcon: classes.actionBarButtonIcon }}\n                                              onClick={isReal ? handleAddDrawing : null}\n                                          >\n                                            {fullMode ? t('projectDetailPage.addProduct') : ''}\n                                          </Button>\n                                        </Tooltip>\n                                      </Grid>\n                                  );\n                                } : null}\n                                renderEmptySpecView={() => {\n                                    return <EmptySpec spec={selectedSpec} onButtonClicked={handleAddDrawing} disabledAdd={!allowEditProductGroups} disabledAddTooltip={''} />;\n                                }}\n                                onDeleteDrawing={handleDeleteDrawing}\n                                disableDraggableListItem={true}\n                                lockDraggableListItem={false}\n                                hideDrawingEndorsement={true}\n                            />\n                        :   <Grid container={true} justify='center'><Loading /></Grid>\n            }\n            <ActionBar\n              type={'template'}\n              selectedSpec={selectedSpec}\n              project={project}\n              specs={specs}\n            />\n        </>\n    );\n};\nexport default NewDefaultView;","// tslint:disable:no-shadowed-variable\nimport React, {useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {AMPLITUDE_EVENT, TEMPLATE_LIST_PATH} from '../../../constants';\nimport {\n    makeSelectChildOrParentIsAtsUser,\n    makeSelectIdentityObject,\n    makeSelectUserHasMasterTemplate\n} from '../../../modules/AtsModule/selectors';\nimport {\n    DeleteTemplateAction,\n    GetTemplateProjectsSucceededAction\n} from '../../../modules/ProjectModule/actions';\nimport CopyModal from '../../../containers/CopyModal';\nimport {DeleteModal, AlternativesDropDown} from '../../../components';\nimport AlternativesModal from '../../../containers/AlternativesModal';\nimport NewView from './NewView';\nimport {ViewContext} from '../../../components/detailPageComponents/context/viewContext';\nimport {DragDropContext} from 'react-beautiful-dnd';\nimport {IMap} from 'ats-utils/src/index';\nimport {Project, Spec} from '../../../models';\nimport {fromJS, List} from 'immutable';\nimport {GetSpecsAction, ReorderSpecsAndGetProjectAction} from '../../../modules/SpecModule/actions';\nimport ViewContainer from '../../SpecDetail/layout/ViewContainer';\nimport SortProductGroupsModal from '../../../components/detailPageComponents/SortProductGroupsModal';\nimport {makeSelectGetMasterTemplateLoading} from '../../../modules/ProjectModule/selectors';\nimport InfoBar from '../../../components/InfoBar';\nimport {useTranslation} from 'react-i18next';\nimport {isDraggableListItem, isDroppableShortSpecListId} from '../../../components/ProjectDetail/helpers';\nimport filterSpecDrawingsByProductName from '../../../utils/filterSpecDrawingsByProductName';\nimport {\n    SetOverlayComponentPropsAction,\n    SetSnackbarOpenAction,\n    ToggleOverlayComponentAction\n} from '../../../modules/ApplicationModule/actions';\nimport {LOADING_MODAL_ID} from '../../../components/LoadingModal/Component';\nimport {useAtsApi} from '../../../contexts/AtsApiContext';\nimport {makeSelectSelectedTemplateSpecId, makeSelectTemplateSpecs} from '../../../modules/SpecModule/selectors';\nimport { useAmplitudeData } from '../../../hoc/withAmplitudeData';\nimport * as amplitude from '@amplitude/analytics-browser';\n\nconst DefaultView = (props) => {\n    const { project } = props;\n    const { t } = useTranslation('translations');\n    const amplitudeData = useAmplitudeData();\n    const isLoadingProject = useSelector(makeSelectGetMasterTemplateLoading());\n    const specs = project.get('specs') ?? List();\n    const templateSpecs = useSelector(makeSelectTemplateSpecs());\n    const specId = useSelector(makeSelectSelectedTemplateSpecId());\n    const spec = templateSpecs?.find(spec => spec.get('id') === specId);\n    const [sortProductGroupsModalOpen, setSortProductGroupsModalOpen] = useState<boolean>(false);\n    const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n    const [productSearchTerm, setProductSearchTerm] = useState('');\n    const dispatch = useDispatch();\n    const atsApi = useAtsApi();\n    const hasMasterTemplateRole = useSelector(makeSelectUserHasMasterTemplate());\n    const handleDeleteProject = (project) => {\n        dispatch(new DeleteTemplateAction({\n            templateId: project.get('id'),\n            redirectPath: TEMPLATE_LIST_PATH,\n            templateName: project.get('name') ?? '',\n            specIds: project.get('specs')?.map((spec) => spec.get('id')).join(',') ?? ''\n        }));\n    };\n    const viewContextValue = useMemo(() => ({\n        productSearchTerm,\n        setProductSearchTerm,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen,\n    }), [\n        productSearchTerm,\n        setProductSearchTerm,\n        isDeleteModalOpen,\n        setIsDeleteModalOpen,\n        sortProductGroupsModalOpen,\n        setSortProductGroupsModalOpen,\n    ]);\n    const onDragEnd = (result: any, specsList: any) => {\n        // dropped outside the list or dropped to the same position\n        if (!result.destination || result.destination.index === result.source.index) {\n            return;\n        }\n        if (isDroppableShortSpecListId(result.destination.droppableId) && isDraggableListItem(result.draggableId) && productSearchTerm === '') {\n            const allDrawings = spec?.get('drawings') ?? List();\n            const filteredDrawings = filterSpecDrawingsByProductName(spec, productSearchTerm);\n            const destinationIndex = result.destination.index;\n            const sourceIndex = result.source.index;\n            if (destinationIndex === sourceIndex) {\n                return;\n            }\n            const sourceDrawing = filteredDrawings.get(sourceIndex);\n            const sourceDrawingId = sourceDrawing.get('id');\n            const destinationDrawing = filteredDrawings.get(destinationIndex);\n            const destinationDrawingId = destinationDrawing.get('id');\n            const sourceDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === sourceDrawingId);\n            const destinationDrawingIndexInOriginalList = allDrawings.findIndex(drawing => drawing.get('id') === destinationDrawingId);\n            const newDrawings = allDrawings.delete(sourceDrawingIndexInOriginalList).insert(destinationDrawingIndexInOriginalList, sourceDrawing);\n            dispatch(new SetOverlayComponentPropsAction({\n                id: LOADING_MODAL_ID,\n                props: {\n                    action: t('specDetail.movingSections')\n                }\n            }));\n            dispatch(new ToggleOverlayComponentAction({\n                id: LOADING_MODAL_ID,\n                open: true\n            }));\n            (atsApi.callApi({\n                service: 'spec',\n                endpoint: 'updateMasterTemplateSpec',\n                body: {\n                    drawings: newDrawings.toArray(),\n                },\n                params: {\n                    masterTemplateSpecId: specId\n                }\n            }) as any).then(res => {\n                const updatedSpecFromRes = fromJS(res?.payload?.spec?.spec?.[0]);\n                if (updatedSpecFromRes == null) {\n                    console.error('Invalid response', res); // tslint:disable-line\n                } else {\n                    dispatch(new GetSpecsAction({\n                        specId: updatedSpecFromRes.get('id'),\n                        onSuccess: () => {\n                            dispatch(new ToggleOverlayComponentAction({\n                                id: LOADING_MODAL_ID,\n                                open: false\n                            }));\n                            dispatch(new SetSnackbarOpenAction({\n                                message: t('specDetail.moveSectionsSuccess'),\n                                severity: 'success'\n                            }));\n                        }\n                    }));\n                }\n            }).catch((error) => {\n                console.error('move drawings failed', { error }); // tslint:disable-line\n                dispatch(new ToggleOverlayComponentAction({\n                    id: LOADING_MODAL_ID,\n                    open: false\n                }));\n                dispatch(new SetSnackbarOpenAction({\n                    message: t('specDetail.moveSectionsFailed'),\n                    severity: 'error'\n                }));\n            });\n            return;\n        }\n    };\n    const isGuestUser = !useSelector(makeSelectIdentityObject());\n    return (\n        <ViewContext.Provider value={viewContextValue}>\n            <DragDropContext onDragEnd={(e) => onDragEnd(e, specs)}>\n                <ViewContainer>\n                    {isGuestUser ? <InfoBar>\n                        {t('infoBar.text1')}\n                    </InfoBar> : null}\n                    <CopyModal defaultDestinationType='master' />\n                    <DeleteModal\n                        open={isDeleteModalOpen}\n                        itemName={project.get('name') ?? 'this Template'}\n                        toggleDeleteModal={() => setIsDeleteModalOpen(false)}\n                        handleDelete={() => handleDeleteProject(project)}\n                        withLoading={false}\n                    />\n                    <AlternativesDropDown readonly={!hasMasterTemplateRole}/>\n                    <AlternativesModal />\n                    <SortProductGroupsModal\n                        isLoading={isLoadingProject}\n                        project={project}\n                        open={sortProductGroupsModalOpen}\n                        onClose={() => setSortProductGroupsModalOpen(false)}\n                    />\n                    <NewView\n                        {...props}\n                    />\n                </ViewContainer>\n            </DragDropContext>\n        </ViewContext.Provider>\n    );\n};\n\n\nexport default DefaultView;","import {useEffect} from 'react';\nimport {\n    GetTemplateProjectByIdAction,\n    SelectTemplateProjectAction,\n    UpdateProjectSpecDetailConfigAction,\n} from '../../modules/ProjectModule/actions';\nimport {GetTemplateSpecsAction, SelectTemplateSpecAction, SetModeAction} from '../../modules/SpecModule/actions';\nimport { Mode, NOT_FOUND_PATH } from '../../constants';\nimport {useDispatch, useSelector} from 'react-redux';\nimport * as React from 'react';\nimport {push} from 'connected-react-router';\nimport {makeSelectSelectedTemplateSpecId, makeSelectTemplateSpecs} from '../../modules/SpecModule/selectors';\nimport {makeSelectSearchingProjects, makeSelectTemplate} from '../../modules/ProjectModule/selectors';\nimport DefaultView from './DefaultView';\n\nconst Loader = ({ match }) => {\n    const projectId = parseInt(match.params.templateId, 10);\n    const project = useSelector(makeSelectTemplate({ projectId }));\n    const isLoadingProject = useSelector(makeSelectSearchingProjects());\n    const specs = useSelector(makeSelectTemplateSpecs());\n    const projectSpecs = project?.get('specs');\n    const selectedSpecId = useSelector(makeSelectSelectedTemplateSpecId());\n    const dispatch = useDispatch();\n    useEffect(() => {\n        const getProject = () => {\n            dispatch(new GetTemplateProjectByIdAction({id: projectId, redirectIfNotfound: true}));\n        };\n        const setSelectedProject = () => {\n            dispatch(new SelectTemplateProjectAction({ projectId }));\n        };\n        getProject();\n        setSelectedProject();\n    }, [projectId]);\n    useEffect(() => {\n        const setMode = () => {\n            dispatch(new SetModeAction(Mode.masterTemplate));\n        };\n        const clearConfig = () => {\n            dispatch(new UpdateProjectSpecDetailConfigAction({}));\n        };\n        setMode();\n        return () => {\n            clearConfig();\n        };\n    },[]);\n    useEffect(() => {\n        if (projectSpecs?.size > 0) {\n            // get all specs in project\n            projectSpecs.forEach(spec => {\n                const specId = spec.get('id');\n                dispatch(new GetTemplateSpecsAction(specId));\n            });\n        }\n    }, [projectSpecs]);\n\n    useEffect(() => {\n        if (projectSpecs == null || projectSpecs?.size === 0) {\n            return;\n        }\n        const hasSelectedSpecs = projectSpecs?.some(spec => spec.get('id') === selectedSpecId);\n        if (hasSelectedSpecs) {\n            return;\n        } else {\n            dispatch(new SelectTemplateSpecAction(projectSpecs.getIn([0, 'id'])));\n        }\n    }, [projectSpecs]);\n\n    if (projectId == null) {\n        dispatch(push(NOT_FOUND_PATH));\n        return null;\n    }\n    if (project == null) {\n        return null;\n    }\n    return <DefaultView project={project} />;\n};\n\n\nexport default Loader;","import {\n  fromJS,\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ProjectActionTypes,\n  SelectProjectAction,\n  GetProjectsSucceededAction,\n  DeleteProjectSucceededAction,\n  GetTrackedProjectsSucceededAction,\n  SearchProjectsSucceededAction,\n  SelectProjectOpportunityGroupUuidAction,\n  AddProjectPhaseChangeSucceededAction,\n  GetProjectFilesSucceededAction,\n  UpdateProjectAssignedToSucceededAction,\n  UpdateProjectOpportunitySucceededAction,\n  SetProjectIdForCreatingSpec,\n  DeleteProjectSpecAction,\n  SetProjectFormActiveStepAction,\n  GetMasterProjectsSucceededAction,\n  SelectMasterProjectAction,\n  SearchMastersSucceededAction,\n  SetProjectMasterSavingAllowAction,\n  TrackProjectAction,\n  UntrackProjectAction,\n  CheckOpportunityStatusUpToDateSucceededAction,\n  CheckOpportunityStatusUpToDateFetchingAction,\n  UpdateOpportunityAutomationSucceededAction,\n  UpdateOpportunityAutomationFetchingAction,\n  CheckOpportunityExistsFetchingAction,\n  CheckOpportunityExistsSucceededAction,\n  SetIsTrackingOrUntrackingProjectAction,\n  UpdateProjectSpecDetailConfigAction,\n  SelectTemplateProjectAction,\n  SearchTemplatesSucceededAction,\n  GetTemplateProjectsSucceededAction,\n  SetIsApplyingFolderTemplateToProjectAttachmentAction,\n  GetProjectByIdAndSelectProjectSucceededAction,\n  PatchKeyContactsSucceededAction, SelectAllDrawingsAction, SelectAllDrawingsInSpecAction, DeleteMasterSucceededAction,\n  DeleteSpecFromProjectSpecDetailConfigAction,\n  MassUpdateProjectSpecDetailConfigAction,\n  UpdateProjectContactAction,\n} from './actions';\nimport { Project, ProjectTrackStatus, Opportunity, HasId } from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport {getSpecsInProject} from '../../components/ProjectDetail/common/helpers';\n\nexport type DetailConfig = Map<number, Map<number, IMap<{ checked?: boolean, expanded?: boolean }>>>;\nexport interface IProjectReducerState {\n  error: string;\n  projects: Map<number, IMap<Project>>;\n  isGettingProjects: boolean;\n  selectedProjectId: number;\n  selectedProjectOpportunityGroupUuid?: string;\n  trackedProjectStatuses: List<IMap<ProjectTrackStatus>>;\n  searchedProjects: List<IMap<Project>>;\n  searchedProjectsCount: number;\n  searchedProjectsHasNextPage: boolean;\n  selectedProjectFiles: List<any>;\n  searchingProjects: boolean;\n  projectIdForCreatingSpec: number;\n  activeStep: number;\n  masters: Map<number, IMap<Project>>;\n  templates: Map<number, IMap<Project>>;\n  selectedMasterId: number;\n  selectedTemplateId: number;\n  searchedMasters: List<IMap<Project>>;\n  searchedMastersCount: number;\n  searchedMastersHasNextPage: boolean;\n  searchingMasters: boolean;\n  searchedMastersInCopyModal: List<IMap<Project>>;\n  searchedMastersCountInCopyModal: number;\n  searchedMastersHasNextPageInCopyModal: boolean;\n  searchingMastersInCopyModal: boolean;\n  searchingGetMasterProjectById: boolean;\n  searchingGetTemplateProjectById: boolean;\n  projectMasterSavingAllow: boolean;\n  opportunityStatus: {\n    upToDate: boolean | null;\n    upToDateFetching: boolean;\n    opportunities: List<Opportunity> | null;\n    opportunitiesFetching: boolean;\n    opportunityExists: boolean;\n    opportunityExistsFetching: boolean;\n  };\n  isTrackingOrUntrackingProject: boolean;\n  projectSpecDetailConfig: DetailConfig;\n  searchedTemplates: List<IMap<Project>>;\n  searchingTemplates: boolean;\n  searchedTemplatesCount: number;\n  searchedTemplatesHasNextPage: boolean;\n  isApplyingTemplateToProjectAttachment: boolean;\n}\n\nconst INITIAL_STATE = fromJS({\n  error: '',\n  projects: {},\n  isGettingProjects: false,\n  selectedProjectId: -1,\n  selectedProjectOpportunityGroupUuid: null,\n  trackedProjectStatuses: [],\n  searchedProjects: [],\n  searchedProjectsCount: null,\n  searchedProjectsHasNextPage: false,\n  selectedProjectFiles: [],\n  searchingProjects: false,\n  projectIdForCreatingSpec: -1,\n  activeStep: 0,\n  masters: {},\n  templates: {},\n  selectedMasterId: -1,\n  selectedTemplateId: -1,\n  searchedMasters: [],\n  searchedMastersCount: null,\n  searchedMastersHasNextPage: false,\n  searchingMasters: false,\n  searchedMastersInCopyModal: [],\n  searchedMastersCountInCopyModal: null,\n  searchedMastersHasNextPageInCopyModal: false,\n  searchingMastersInCopyModal: false,\n  searchedTemplates: [],\n  searchingTemplates: false,\n  searchedTemplatesCount: null,\n  searchedTemplatesHasNextPage: false,\n  searchingGetMasterProjectById: false,\n  searchingGetTemplateProjectById: false,\n  projectMasterSavingAllow: true,\n  opportunityStatus: {\n    upToDate: null,\n    upToDateFetching: false,\n    opportunities: null,\n    opportunitiesFetching: false,\n    opportunityExists: false,\n    opportunityExistsFetching: false,\n  },\n  isTrackingOrUntrackingProject: false,\n  projectSpecDetailConfig: {},\n  isApplyingTemplateToProjectAttachment: false,\n});\n\nexport const reducer = (state: IMapNonRecursive<IProjectReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ProjectActionTypes.DELETE_SPEC_FROM_PROJECT_SPEC_DETAIL_CONFIG: {\n      const {\n        payload\n      } = action as DeleteSpecFromProjectSpecDetailConfigAction;\n      const {\n        specId,\n      } = payload;\n      return state.deleteIn(['projectSpecDetailConfig', specId]);\n    }\n    case ProjectActionTypes.MASS_UPDATE_PROJECT_SPEC_DETAIL_CONFIG: {\n      const {\n        payload\n      } = action as MassUpdateProjectSpecDetailConfigAction;\n      const {\n        specsDrawingIds,\n        checked,\n        expanded,\n      } = payload;\n\n      if (typeof checked === 'boolean') {\n        const updatedProjectSpecDetailConfig = specsDrawingIds.reduce((acc, specDrawingIds, specId) => {\n          return specDrawingIds.reduce((_acc, drawingId) => {\n            return _acc.setIn([specId, drawingId, 'checked'], checked);\n          }, acc);\n        }, state.get('projectSpecDetailConfig'));\n        return state.set('projectSpecDetailConfig', updatedProjectSpecDetailConfig);\n      }\n\n      if (typeof expanded === 'boolean') {\n        const updatedProjectSpecDetailConfig = specsDrawingIds.reduce((acc, specDrawingIds, specId) => {\n          return specDrawingIds.reduce((_acc, drawingId) => {\n            return _acc.setIn([specId, drawingId, 'expanded'], expanded);\n          }, acc);\n        }, state.get('projectSpecDetailConfig'));\n        return state.set('projectSpecDetailConfig', updatedProjectSpecDetailConfig);\n      }\n\n      return state;\n    }\n    case ProjectActionTypes.UPDATE_PROJECT_SPEC_DETAIL_CONFIG: {\n      const {\n        payload\n      } = action as UpdateProjectSpecDetailConfigAction;\n\n      if (!Object.keys(payload).length) {\n        return state.set('projectSpecDetailConfig', Map());\n      }\n\n      const {\n        specId,\n        drawingId,\n        checked,\n        expanded,\n        deleteDrawing,\n      } = payload as {\n        specId: number;\n        drawingId: number;\n        checked: boolean;\n        expanded: boolean;\n        deleteDrawing: boolean;\n      };\n      if (deleteDrawing) {\n        return state.deleteIn(['projectSpecDetailConfig', specId, drawingId]);\n      }\n\n      if (typeof checked === 'boolean') {\n        state = state.setIn(['projectSpecDetailConfig', specId, drawingId, 'checked'] ,checked);\n      }\n      if (typeof expanded === 'boolean') {\n        state = state.setIn(['projectSpecDetailConfig', specId, drawingId, 'expanded'], expanded);\n      }\n      return state;\n    }\n    case ProjectActionTypes.SET_IS_TRACKING_OR_UNTRACKING_PROJECT: {\n      const {\n        payload: isTrackingOrUntrackingProject\n      } = action as SetIsTrackingOrUntrackingProjectAction;\n      return state.set('isTrackingOrUntrackingProject', isTrackingOrUntrackingProject);\n    }\n    case ProjectActionTypes.SET_PROJECT_FORM_ACTIVE_STEP: {\n      const {\n        payload,\n      } = action as SetProjectFormActiveStepAction;\n      const {\n        activeStep\n      } = payload;\n      return state.set('activeStep', activeStep);\n    }\n    case ProjectActionTypes.SET_PROJECT_ID_FOR_CREATING_SPEC: {\n      const {\n        payload,\n      } = action as SetProjectIdForCreatingSpec;\n\n      const {\n        projectId\n      } = payload;\n\n      return state.set('projectIdForCreatingSpec', projectId);\n    }\n    case ProjectActionTypes.TRACK_PROJECT: {\n      const {\n        payload,\n      } = action as TrackProjectAction;\n\n      return state.withMutations((ctx) => {\n        ctx.set('trackedProjectStatuses', ctx.get('trackedProjectStatuses').push(Map({projectId: payload.projectId }) as unknown as IMap<ProjectTrackStatus>));\n      });\n    }\n    case ProjectActionTypes.UNTRACK_PROJECT: {\n      const {\n        payload,\n      } = action as UntrackProjectAction;\n      return state.withMutations((ctx) => {\n        ctx.set('trackedProjectStatuses', ctx.get('trackedProjectStatuses').filter(x => Number(x.get('projectId')) !== payload.projectId));\n      });\n    }\n    case ProjectActionTypes.GET_TRACKED_PROJECTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetTrackedProjectsSucceededAction;\n\n      const trackedProjectStatuses: List<IMap<ProjectTrackStatus>> = payload;\n\n      return state.withMutations((ctx) => {\n        ctx.set('trackedProjectStatuses', trackedProjectStatuses);\n      });\n    }\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case ProjectActionTypes.CREATE_PROJECT_FAILED:\n      return state.set('error', action.payload);\n    case ProjectActionTypes.DELETE_PROJECT_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteProjectSucceededAction;\n      const {\n        projects,\n      } = payload;\n      return state.withMutations((stateCtx) => {\n        projects.forEach((hasId) => {\n          stateCtx.deleteIn(['projects', hasId.get('id')]);\n        });\n      });\n    }\n    case ProjectActionTypes.DELETE_MASTER_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteMasterSucceededAction;\n      const {\n        masters,\n      } = payload;\n      return state.withMutations((stateCtx) => {\n        masters.forEach((hasId) => {\n          stateCtx.deleteIn(['masters', hasId.get('id')]);\n        });\n      });\n    }\n    case ProjectActionTypes.GET_PROJECTS: {\n        return state.set('isGettingProjects', true);\n    }\n    case ProjectActionTypes.GET_PROJECTS_SUCCEEDED: {\n      const {\n        payload: projectsResponse,\n      } = action as GetProjectsSucceededAction;\n      return state.set('isGettingProjects', false).update(\n        'projects',\n        (stateProjects: Map<number, IMap<Project>>) => {\n          return projectsResponse.reduce(\n            (acc: Map<number, IMap<Project>>, projectResponse: IMap<Project>) => {\n              return acc.set(projectResponse.get('id'), projectResponse);\n            },\n            stateProjects\n          );\n        }\n      );\n    }\n    case ProjectActionTypes.GET_PROJECT_BY_ID_AND_SELECT_PROJECT: {\n      return state.set('isGettingProjects', true);\n    }\n    case ProjectActionTypes.GET_PROJECT_BY_ID_AND_SELECT_PROJECT_SUCCEEDED: {\n      const {\n        payload: projectsResponse,\n      } = action as GetProjectByIdAndSelectProjectSucceededAction;\n      return state.withMutations((ctx) => {\n        ctx\n          .set('isGettingProjects', false)\n          .set('selectedProjectId', projectsResponse.getIn([0, 'id']))\n          .update(\n            'projects',\n            (stateProjects: Map<number, IMap<Project>>) => {\n              return projectsResponse.reduce(\n                (acc: Map<number, IMap<Project>>, projectResponse: IMap<Project>) => {\n                  return acc.set(projectResponse.get('id'), projectResponse);\n                },\n                stateProjects\n              );\n            }\n          );\n      });\n    }\n    case ProjectActionTypes.DELETE_PROJECT_SPEC: {\n      const {\n        payload\n      } = action as DeleteProjectSpecAction;\n      const {\n        projectId,\n        specId,\n      } = payload;\n\n      const projectSpecs: List<IMap<HasId>> = state.getIn(['projects', projectId, 'specs']);\n      const deleteKey = projectSpecs.findKey((spec) => spec.get('id') === specId);\n      return state.deleteIn(['projects', projectId, 'specs', deleteKey]);\n    }\n    case ProjectActionTypes.UPDATE_PROJECT_OPPORTUNITY_SUCCEEDED: {\n      const {\n        payload,\n      } = action as UpdateProjectOpportunitySucceededAction;\n      const {\n        projectId,\n        opportunities,\n      } = payload;\n\n      const projectOpportunities: List<IMap<Opportunity>> = state.getIn(['projects', projectId, 'opportunities']);\n      const opportunitiesMap = Map<string, IMap<Opportunity>>().withMutations((mutableOpportunityMap) => {\n        opportunities.forEach((opportunity) => {\n          const labelId = opportunity.getIn(['label', 'id']);\n          mutableOpportunityMap.set(labelId, opportunity);\n        });\n      });\n      if (projectOpportunities != null) {\n        const updatedOldOpportunities = projectOpportunities.map((existingOpportunity) => {\n          const labelId = existingOpportunity.getIn(['label', 'id']);\n          if (opportunitiesMap.has(labelId)) {\n            return opportunitiesMap.get(labelId);\n          }\n          return existingOpportunity;\n        });\n\n        const oldOpportunityLabelIdSet = updatedOldOpportunities.map((existingOpportunity) => {\n          const labelId = existingOpportunity.getIn(['label', 'id']);\n          return labelId;\n        }).toSet();\n\n        const newProjectOpportunities = updatedOldOpportunities.concat(opportunities.filter((opportunity) => {\n          const labelId = opportunity.getIn(['label', 'id']);\n          return !oldOpportunityLabelIdSet.has(labelId);\n        }));\n        return state.updateIn(\n          ['projects', projectId],\n          (project: IMap<Project>) => {\n            return project.set('opportunities', newProjectOpportunities);\n          }\n        );\n      }\n      return state.updateIn(\n        ['projects', projectId],\n        (project: IMap<Project>) => {\n          return project.set('opportunities', opportunities);\n        }\n      );\n    }\n    case ProjectActionTypes.UPDATE_PROJECT_ASSIGNED_TO_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateProjectAssignedToSucceededAction;\n\n      return state.withMutations((ctx) => {\n        ctx.setIn(['projects', payload.projectId, 'assignedTo'], fromJS(payload.assignedTo));\n\n        const projectIndex = state.get('searchedProjects').findIndex((project) => project.get('id') === payload.projectId);\n        if (projectIndex > -1) {\n          ctx.setIn(['searchedProjects', projectIndex, 'assignedTo'], fromJS(payload.assignedTo));\n        }\n      });\n    }\n    case ProjectActionTypes.SELECT_PROJECT: {\n      const {\n        payload,\n      } = action as SelectProjectAction;\n\n      const {\n        projectId: selectedProjectId,\n      } = payload;\n      // The projects map is keyed by number. An id that arrives as a string (sliced out of a URL, for\n      // instance) would make every lookup of the selected project miss (Sentry issue 7721703926).\n      return state.set('selectedProjectId', selectedProjectId == null ? selectedProjectId : Number(selectedProjectId));\n    }\n    case ProjectActionTypes.SELECT_PROJECT_OPPORTUNITY_GROUP_UUID: {\n      const {\n        payload,\n      } = action as SelectProjectOpportunityGroupUuidAction;\n\n      const {\n        uuid,\n      } = payload;\n      return state.set('selectedProjectOpportunityGroupUuid', uuid);\n    }\n    case ProjectActionTypes.LOADING_SEARCHED_PROJECT: {\n      return state.set('searchingProjects', true);\n    }\n    case ProjectActionTypes.SEARCH_PROJECTS_SUCCEEDED: {\n      const { payload } = action as SearchProjectsSucceededAction;\n      const {\n        projects,\n        count,\n        hasNextPage,\n      } = payload;\n      // return state.set('searchedProjects', payload);\n      return state.withMutations((mutableState) => {\n        mutableState.set('searchingProjects', false);\n        mutableState.set('searchedProjects', projects);\n        mutableState.set('searchedProjectsHasNextPage', hasNextPage);\n        if (count != null) {\n          mutableState.set('searchedProjectsCount', count);\n        }\n       });\n    }\n    case ProjectActionTypes.SEARCH_PROJECTS_FAILED: {\n      return state.set('searchingProjects', false);\n    }\n    case ProjectActionTypes.ADD_PROJECT_PHASE_CHANGE_SUCCEEDED: {\n      const {\n        payload\n      } = action as AddProjectPhaseChangeSucceededAction;\n      const selectedProjectId = state.get('selectedProjectId');\n      return state.setIn(['projects', selectedProjectId, 'phase'], payload);\n    }\n    case ProjectActionTypes.GET_PROJECT_FILES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetProjectFilesSucceededAction;\n\n      return state.set('selectedProjectFiles', payload);\n    }\n    case ProjectActionTypes.LOADING_SEARCHED_MASTERS_IN_COPY_MODAL: {\n      return state.set('searchingMastersInCopyModal', true);\n    }\n    case ProjectActionTypes.LOADING_SEARCHED_MASTERS: {\n      return state.set('searchingMasters', true);\n    }\n    case ProjectActionTypes.LOADING_SEARCHED_TEMPLATES: {\n      return state.set('searchingTemplates', true);\n    }\n    case ProjectActionTypes.SEARCH_MASTERS_SUCCEEDED: {\n      const { payload } = action as SearchMastersSucceededAction;\n      const {\n        masters,\n        count,\n        hasNextPage,\n      } = payload;\n      return state.withMutations((mutableState) => {\n        mutableState.set('searchingMasters', false);\n        mutableState.set('searchedMasters', masters);\n        mutableState.set('searchedMastersHasNextPage', hasNextPage);\n        if (count != null) {\n          mutableState.set('searchedMastersCount', count);\n        }\n       });\n    }\n    case ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL_SUCCEEDED: {\n      const { payload } = action as SearchMastersSucceededAction;\n      const {\n        masters,\n        count,\n        hasNextPage,\n      } = payload;\n      return state.withMutations((mutableState) => {\n        mutableState.set('searchingMastersInCopyModal', false);\n        mutableState.set('searchedMastersInCopyModal', masters);\n        mutableState.set('searchedMastersHasNextPageInCopyModal', hasNextPage);\n        if (count != null) {\n          mutableState.set('searchedMastersCountInCopyModal', count);\n        }\n      });\n    }\n    case ProjectActionTypes.SEARCH_MASTERS_FAILED: {\n      return state.set('searchingMasters', false);\n    }\n    case ProjectActionTypes.SEARCH_MASTERS_IN_COPY_MODAL_FAILED: {\n      return state.set('searchingMastersInCopyModal', false);\n    }\n    case ProjectActionTypes.SELECT_MASTER_PROJECT: {\n      const {\n        payload,\n      } = action as SelectMasterProjectAction;\n\n      const {\n        projectId: selectedMasterId,\n      } = payload;\n      return state.set('selectedMasterId', selectedMasterId);\n    }\n    case ProjectActionTypes.SEARCH_TEMPLATES_SUCCEEDED: {\n      const { payload } = action as SearchTemplatesSucceededAction;\n      const {\n        templates,\n        count,\n        hasNextPage,\n      } = payload;\n      return state.withMutations((mutableState) => {\n        mutableState.set('searchingTemplates', false);\n        mutableState.set('searchedTemplates', templates);\n        mutableState.set('searchedTemplatesHasNextPage', hasNextPage);\n        if (count != null) {\n          mutableState.set('searchedTemplatesCount', count);\n        }\n      });\n    }\n    case ProjectActionTypes.SEARCH_TEMPLATES_FAILED: {\n      return state.set('searchingTemplates', false);\n    }\n    case ProjectActionTypes.SELECT_TEMPLATE_PROJECT: {\n      const {\n        payload,\n      } = action as SelectTemplateProjectAction;\n\n      const {\n        projectId: selectedTemplateId,\n      } = payload;\n      return state.set('selectedTemplateId', selectedTemplateId);\n    }\n    case ProjectActionTypes.GET_MASTER_PROJECTS_SUCCEEDED: {\n      const {\n        payload: projectsResponse,\n      } = action as GetMasterProjectsSucceededAction;\n      return state.update(\n        'masters',\n        (stateProjects: Map<number, IMap<Project>>) => {\n          return projectsResponse.reduce(\n            (acc: Map<number, IMap<Project>>, projectResponse: IMap<Project>) => {\n              return acc.set(projectResponse.get('id'), projectResponse);\n            },\n            stateProjects\n          );\n        }\n      ).set('searchingGetMasterProjectById', false);\n    }\n    case ProjectActionTypes.GET_TEMPLATE_PROJECTS_SUCCEEDED: {\n      const {\n        payload: projectsResponse,\n      } = action as GetTemplateProjectsSucceededAction;\n      return state.update(\n          'templates',\n          (stateProjects: Map<number, IMap<Project>>) => {\n            return projectsResponse.reduce(\n                (acc: Map<number, IMap<Project>>, projectResponse: IMap<Project>) => {\n                  return acc.set(projectResponse.get('id'), projectResponse);\n                },\n                stateProjects\n            );\n          }\n      ).set('searchingGetTemplateProjectById', false);\n    }\n    case ProjectActionTypes.GET_MASTER_PROJECTS_FAILED: {\n      return state.set('searchingGetMasterProjectById', false);\n    }\n    case ProjectActionTypes.GET_TEMPLATE_PROJECTS_FAILED: {\n      return state.set('searchingGetMasterProjectById', false);\n    }\n    case ProjectActionTypes.GET_MASTER_PROJECT_BY_ID: {\n      return state.set('searchingGetMasterProjectById', true);\n    }\n    case ProjectActionTypes.GET_TEMPLATE_PROJECT_BY_ID: {\n      return state.set('searchingGetTemplateProjectById', true);\n    }\n    case ProjectActionTypes.CREATE_PROJECT:\n    case ProjectActionTypes.CREATE_PROJECT_FROM_TEMPLATE:\n    case ProjectActionTypes.CREATE_PT_PROJECT:\n    case ProjectActionTypes.CREATE_PT_PROJECT_FROM_TEMPLATE:\n    case ProjectActionTypes.CREATE_TEMPLATE_PROJECT:\n    case ProjectActionTypes.UPDATE_PROJECT_AND_THEN_REDIRECT:\n    case ProjectActionTypes.UPDATE_TEMPLATE_PROJECT_AND_REDIRECT:\n    case ProjectActionTypes.UPDATE_MASTER_PROJECT_AND_REDIRECT: {\n      return state.set('projectMasterSavingAllow', false);\n    }\n    case ProjectActionTypes.SET_PROJECT_MASTER_SAVING_ALLOW: {\n      const {\n        payload\n      } = action as SetProjectMasterSavingAllowAction;\n      return state.set('projectMasterSavingAllow', payload.allow);\n    }\n    case ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_SUCCEEDED: {\n      const { upToDate } = action as CheckOpportunityStatusUpToDateSucceededAction;\n      return state.setIn(['opportunityStatus', 'upToDate'], upToDate);\n    }\n    case ProjectActionTypes.CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_FETCHING: {\n      const { fetching } = action as CheckOpportunityStatusUpToDateFetchingAction;\n      return state.setIn(['opportunityStatus', 'upToDateFetching'], fetching);\n    }\n    case ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION_SUCCEEDED: {\n      const { opportunities } = action as UpdateOpportunityAutomationSucceededAction;\n      return state.setIn(['opportunityStatus', 'opportunities'], opportunities);\n    }\n    case ProjectActionTypes.UPDATE_OPPORTUNITY_AUTOMATION_FETCHING: {\n      const { fetching } = action as UpdateOpportunityAutomationFetchingAction;\n      return state.setIn(['opportunityStatus', 'opportunitiesFetching'], fetching);\n    }\n    case ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS_SUCCEEDED: {\n      const { exists } = action as CheckOpportunityExistsSucceededAction;\n      return state.setIn(['opportunityStatus', 'opportunityExists'], exists);\n    }\n    case ProjectActionTypes.CHECK_OPPORTUNITY_EXISTS_FETCHING: {\n      const { fetching } = action as CheckOpportunityExistsFetchingAction;\n      return state.setIn(['opportunityStatus', 'opportunityExistsFetching'], fetching);\n    }\n    case ProjectActionTypes.SET_IS_APPLYING_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT: {\n      const { payload } = action as SetIsApplyingFolderTemplateToProjectAttachmentAction;\n      return state.set('isApplyingTemplateToProjectAttachment', payload);\n    }\n    case ProjectActionTypes.PATCH_KEY_CONTACTS_SUCCEEDED: {\n      const { payload } = action as PatchKeyContactsSucceededAction;\n      const { projectId, keyContacts } = payload;\n      return state.setIn(['projects', projectId, 'keyContacts'], keyContacts);\n    }\n    case ProjectActionTypes.UPDATE_PROJECT_CONTACT: {\n      const { payload } = action as UpdateProjectContactAction;\n      const { projectId, contact } = payload;\n      const projectKeyContacts = state.getIn(['projects', projectId, 'keyContacts']);\n      const updatedKeyContacts = projectKeyContacts.map((keyContact) => {\n        if (keyContact.get('id') === contact.get('id')) {\n          return keyContact.set('contact', contact);\n        }\n        return keyContact;\n      });\n      return state.setIn(['projects', projectId, 'keyContacts'], updatedKeyContacts);\n    }\n    case ProjectActionTypes.SELECT_ALL_DRAWINGS: {\n        const { payload } = action as SelectAllDrawingsAction;\n        const { project, specs } = payload;\n        const projectSpecs = getSpecsInProject(project, specs);\n        projectSpecs.forEach((spec) => {\n          if (spec) {\n            const specId = spec.get('id');\n            spec?.get('drawings')?.forEach((drawing) => {\n              if (drawing.get('products').size > 0) {\n                const drawingId = drawing.get('id');\n                state = state.setIn(['projectSpecDetailConfig', specId, drawingId, 'checked'] ,true);\n              }\n            });\n          }\n        });\n        return state;\n    }\n    case ProjectActionTypes.SELECT_ALL_DRAWINGS_IN_SPEC: {\n      const { payload } = action as SelectAllDrawingsInSpecAction;\n      const { spec } = payload;\n      const specId = spec.get('id');\n      spec?.get('drawings')?.forEach((drawing) => {\n        if (drawing.get('products').size > 0) {\n          const drawingId = drawing.get('id');\n          state = state.setIn(['projectSpecDetailConfig', specId, drawingId, 'checked'] ,true);\n        }\n      });\n      return state;\n    }\n\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/*\n * ProjectModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IProjectReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IProjectModuleComponentProps {\n}\n\ninterface IProjectModuleProps extends IProjectModuleComponentProps {\n  reducerState: IMapNonRecursive<IProjectReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ProjectModuleProps = IProjectModuleProps;\n\nclass ProjectModule extends React.Component<ProjectModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IProjectModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IProjectModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ProjectModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './ProjectModule';\nexport default Module;","import {\n  call,\n  put,\n  takeLatest,\n  takeLeading,\n  select,\n} from 'redux-saga/effects';\n\nimport {\n  apiCallWaitingAction,\n  atsApiCallWaitingAction,\n  atsApiRequire,\n  getAtsApiState,\n} from '../AtsModule/saga';\n\nimport {\n  SpecActionTypes,\n} from '../SpecModule/actions';\n\nimport {\n  ProductActionTypes, SelectCategoryFinishedAction,\n} from '../ProductModule/actions';\n\nimport {\n  ProjectActionTypes,\n} from '../ProjectModule/actions';\n\nimport {\n  push\n} from 'connected-react-router/immutable';\nimport {\n  reset,\n} from 'redux-form';\n\nimport {\n  BUILDING_SELECTION_FORM,\n} from '../BuildingModule/constants';\n\nimport {\n  FORM_NAME as NEW_PROJECT_CONTRIBUTORS_FORM,\n} from '../../containers/Forms/NewProjectCollaboratorsForm';\n\nimport {\n  FORM_NAME as NEW_MASTER_COLLABORATORS_FORM,\n} from '../../containers/Forms/NewMasterCollaboratorsForm';\nimport {\n  FORM_NAME as NEW_PROJECT_MODAL_FORM,\n} from '../../containers/Forms/NewProjectModalForm';\n\nimport {\n  FORM_NAME as NEW_MASTER_PROJECT_MODAL_FORM,\n} from '../../containers/Forms/NewMasterModalForm';\n\nimport {\n  FORM_NAME as CREATE_NEW_SPEC_MODAL_FORM,\n} from '../../containers/CreateNewSpecModal';\nimport {\n  PRODUCT_CATEGORY_PATH,\n  PRODUCT_SELECTION_PATH,\n  PROJECT_LIST_DETAIL_PATH, SESSION_EXPIRE_TIME_IN_MILLISECONDS,\n} from '../../constants';\nimport {\n  routerActions,\n} from 'connected-react-router/immutable';\nimport {ApplicationActionTypes, GetSessionAction, GetVsbEnvSucceededAction, SetSessionAction} from './actions';\nimport {makeSelectAppToken, makeSelectEnv} from '../AtsModule/selectors';\nimport {fromJS, List, Map} from 'immutable';\nimport { IMap } from 'ats-utils/src';\nimport VsbEnv from '../../models/VsbEnv';\nimport { FORM_NAME as NEW_TEMPLATE_MODAL_FORM } from '../../containers/Forms/NewTemplateModalForm';\nimport * as uuid from 'uuid/v1';\nimport {AtsApiCallAction} from '../AtsModule/actions';\nimport {Spec} from '../../models';\nimport { safeLocalStorage } from '../../utils/safeStorage';\n\nexport default function * defaultSaga() {\n\n  // yield call(atsApiRequire, getAtsApiState('init'));\n  // yield call(atsApiRequire, getAtsApiState('token'));\n  // yield call(atsApiRequire, getAtsApiState('identity'));\n  // console.debug('Application Loaded');\n\n  yield takeLatest(ProjectActionTypes.CREATE_PROJECT_SUCCEEDED, createProjectSucceeded);\n  yield takeLatest(ProjectActionTypes.CREATE_MASTER_PROJECT_SUCCEEDED, createMasterProjectSucceeded);\n  yield takeLatest(ProjectActionTypes.CREATE_MASTER_PROJECT_FROM_TEMPLATE_SUCCEEDED, createMasterProjectFromTemplateSucceeded);\n  yield takeLatest(ProjectActionTypes.CREATE_TEMPLATE_PROJECT_SUCCEEDED, createTemplateProjectSucceeded);\n  yield takeLatest(ProjectActionTypes.CREATE_PT_PROJECT_SUCCEEDED, createPTProjectSucceeded);\n  yield takeLatest(ProductActionTypes.SELECT_CATEGORY, categorySelected);\n  yield takeLatest(SpecActionTypes.CREATE_SPEC_SUCCEEDED, createSpecSucceeded);\n  yield takeLatest(ApplicationActionTypes.GET_VSB_ENV, getVsbEnv);\n  yield takeLatest(ApplicationActionTypes.GET_SESSION_ACTION, getSession);\n}\nfunction* getSession(action: GetSessionAction) {\n  const { forceRefresh, onSuccess } = action.payload;\n  const session = safeLocalStorage.getItem('session');\n  const token = yield select(makeSelectAppToken());\n  // if session doesn't exist or has expired, create a new session\n  if (!session || JSON.parse(session).expireTime < (new Date()).valueOf() || forceRefresh) {\n    const newSessionId = uuid();\n    while (true) {\n      const { data, err } = yield call(apiCallWaitingAction, new AtsApiCallAction({\n        payload: {\n          service: 'spec',\n          endpoint: 'createSpec',\n          body: {\n            name: 'Unregistered Quick Spec',\n          },\n          sessionId: newSessionId,\n          token,\n        } as any,\n      }));\n      if (data) {\n        const immutableSpecCreateData = fromJS(data);\n        const spec: List<IMap<Spec>> = immutableSpecCreateData.getIn(['payload', 'spec', 'spec']);\n        const newSession = {\n          session: newSessionId,\n          expireTime: (new Date()).valueOf() +  SESSION_EXPIRE_TIME_IN_MILLISECONDS,\n          guestSpecId: spec.getIn([0, 'id'])\n        };\n        safeLocalStorage.setItem('session', JSON.stringify(newSession));\n        yield put(new SetSessionAction({\n          session: fromJS(newSession)\n        }));\n        onSuccess?.();\n        break;\n      } else {\n        // console.error(err);\n      }\n    }\n  } else {\n    // if session exists,\n    yield put(new SetSessionAction({\n      session: fromJS(JSON.parse(session))\n    }));\n  }\n}\n\nfunction* createTemplateProjectSucceeded(\n) {\n  yield put(reset(BUILDING_SELECTION_FORM));\n  yield put(reset(NEW_TEMPLATE_MODAL_FORM));\n}\n\nfunction* createMasterProjectSucceeded(\n  ) {\n    yield put(reset(BUILDING_SELECTION_FORM));\n    yield put(reset(NEW_MASTER_PROJECT_MODAL_FORM));\n    yield put(reset(NEW_MASTER_COLLABORATORS_FORM));\n  }\nfunction* createMasterProjectFromTemplateSucceeded() {\n  yield put(reset(BUILDING_SELECTION_FORM));\n  yield put(reset(NEW_MASTER_PROJECT_MODAL_FORM));\n  yield put(reset(NEW_MASTER_COLLABORATORS_FORM));\n}\nfunction* categorySelected(\n) {\n  const pathname = yield select((state: any) => state.getIn(['router', 'location', 'pathname']));\n  if (pathname !== PRODUCT_SELECTION_PATH) {\n    yield put(routerActions.push(PRODUCT_SELECTION_PATH));\n  }\n  yield put(new SelectCategoryFinishedAction());\n}\n\nfunction* createSpecSucceeded(\n) {\n  yield put(push(`${PRODUCT_CATEGORY_PATH}`));\n  yield put(reset(CREATE_NEW_SPEC_MODAL_FORM));\n}\n\nfunction* createProjectSucceeded(\n) {\n  yield put(reset(BUILDING_SELECTION_FORM));\n  yield put(reset(NEW_PROJECT_MODAL_FORM));\n  yield put(reset(NEW_PROJECT_CONTRIBUTORS_FORM));\n}\n\nfunction* createPTProjectSucceeded(\n  ) {\n    yield put(push(PROJECT_LIST_DETAIL_PATH));\n    yield put(reset(BUILDING_SELECTION_FORM));\n    yield put(reset(NEW_PROJECT_MODAL_FORM));\n    yield put(reset(NEW_PROJECT_CONTRIBUTORS_FORM));\n  }\n\nfunction* getVsbEnv() {\n\n  const env = yield select(makeSelectEnv());\n  const vsbEnvUrl = env.get('VSB_ENV');\n\n  const json: IMap<VsbEnv> = yield call(async () => {\n    try {\n      const response = await window.fetch(vsbEnvUrl);\n      const data = await response.json();\n      return fromJS(data);\n    } catch (err) {\n      console.error('Error fetching Vsb Env', err); /* tslint:disable-line */\n    }\n  });\n\n  if (json) {\n    yield put(new GetVsbEnvSucceededAction(json));\n  }\n}","/*\n * ApplicationModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n} from 'redux';\nimport reducer, { IApplicationReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\nimport {\n  IAction,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n\ninterface IApplicationModuleProps {\n  reducerState: IMapNonRecursive<IApplicationReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ApplicationModuleProps = IApplicationModuleProps;\n\nclass ApplicationModule extends React.Component<ApplicationModuleProps> {\n\n  public render() {\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide show={true} title={'debug'} />;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nconst makeMapStateToProps = () => {\n  const reducerStateSelector = selectReducerState();\n\n  return (originalState) => ({\n    reducerState: reducerStateSelector(originalState)\n  });\n};\n\nexport default compose<React.ComponentClass>(\n  connect(makeMapStateToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ApplicationModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './ApplicationModule';\nexport default Module;","import {\n  fromJS,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  ChangeLocaleAction,\n  LanguageActionTypes\n} from './actions';\nimport {\n  DEFAULT_LOCALE,\n} from './constants';\nimport { AtsActionTypes, GetDomainSucceededAction } from '../AtsModule/actions';\n\nexport interface ILanguageReducerState {\n  locale: string;\n}\n\nconst INITIAL_STATE = fromJS({\n  locale: DEFAULT_LOCALE,\n});\n\nexport const reducer = (state: IMapNonRecursive<ILanguageReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case LanguageActionTypes.CHANGE_LOCALE: {\n      const {\n        payload: locale,\n      } = action as ChangeLocaleAction;\n      return state.set('locale', locale);\n    }\n\n    case AtsActionTypes.GET_DOMAIN_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetDomainSucceededAction;\n\n      if (payload.includes('aosmith-xref-fr')) {\n        return state.set('locale', 'fr');\n      }\n      return state;\n    }\n\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","/*\n * LanguageModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { ILanguageReducerState } from './reducer';\nimport {\n  injectReducer,\n} from '../../utils';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface ILanguageModuleComponentProps {\n\n}\n\ninterface ILanguageModuleProps extends ILanguageModuleComponentProps {\n  reducerState: IMapNonRecursive<ILanguageReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype LanguageModuleProps = ILanguageModuleProps;\n\nclass LanguageModule extends React.Component<LanguageModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ILanguageModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<ILanguageModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n)(LanguageModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './LanguageModule';\nexport default Module;\n","import {\n  fromJS,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  DebugActionTypes,\n} from './actions';\n\nexport interface IDebugReducerState {\n  debug: number;\n}\n\nconst INITIAL_STATE = fromJS({\n  debug: 0,\n});\n\nexport const reducer = (state: IMapNonRecursive<IDebugReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case DebugActionTypes.DEBUG: {\n      const debugMode = (action.payload == null) ? true : action.payload;\n\n      return state.set('debug', debugMode);\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/*\n * DebugModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IDebugReducerState } from './reducer';\nimport {\n  injectReducer,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\n\ninterface IDebugModuleComponentProps {\n}\n\ninterface IDebugModuleProps extends IDebugModuleComponentProps {\n  reducerState: IMapNonRecursive<IDebugReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype DebugModuleProps = IDebugModuleProps;\n\nclass DebugModule extends React.Component<DebugModuleProps> {\n  public render() {\n    return (\n      <div style={{display: 'none'}} />\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IDebugModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IDebugModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n)(DebugModule);\n","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './DebugModule';\nexport default Module;\n","import {\n  fromJS,\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport {\n  SpecActionTypes,\n  UpdateRulesAction,\n  UpdateRulesMissing,\n  UpdateSpecAction,\n  DeleteDrawingAction,\n  GetSpecsSucceededAction,\n  SelectSpecAction,\n  SelectDrawingAction,\n  UpdateDrawingAction,\n  SearchSpecsSucceededAction,\n  SelectDrawingWithoutRulesAction,\n  GetMasterSpecsSucceededAction,\n  SelectMasterSpecAction,\n  SetModeAction,\n  SetSelectedSpecIdAction,\n  SetSelectedMasterSpecIdAction,\n  GetMasterSpecsAction,\n  SetRedirectPathAction,\n  SetTestSpecModeAction,\n  GetSpecFilesSucceededAction,\n  UpdateSelfFailedRulesAction,\n  ClearSelfRulesAction,\n  UpdateSelfFailedRulesLoadingAction,\n  GetSpecPrintConfigSucceededAction,\n  SetLixilPrintGroupsInConfigBySelectedSpecIdAction,\n  SetIsSavingAlternativeProductsAction,\n  SetIsDeletingAlternativeProductAction,\n  DeleteAlternativeProductSucceededAction,\n  GetTemplateSpecsSucceededAction,\n  IsUpdatingSpecFilesAction,\n  SetIsLinkingOrUnlinkGenericProductAction,\n  SetPTSpecDndMenuAction,\n  SetNewDrawingIdAction,\n  SetIsUpdatingDrawingAction,\n  GetMasterDrawerDataAction,\n  GetMasterDrawerDataSucceededAction,\n  MasterDrawerSelectSpecAction,\n  MasterDrawerLoadSpecAction,\n  MasterDrawerLoadSpecSucceededAction,\n  MasterDrawerUpdateDrawer,\n  GetPinnedDrawingSucceededAction,\n  GetPinnedDrawingAction,\n  MasterDrawerToggleExpandAction,\n  SetMasterDrawerUpdatingAction, SelectMasterDrawerDrawingAction, SelectPinnedDrawingAction,\n  GetTemplateSpecsAction,\n} from './actions';\nimport {\n  Spec,\n  PageData,\n  DrawingRules,\n  Drawing,\n  Rule, Project, ProjectSpec,\n} from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport File from '../../models/File';\nimport {Mode} from '../../constants';\nimport { GetSpecToQuoteDraftSucceededAction, QuoteTypes } from '../QuoteModule/actions';\n\ninterface IMasterSpecDrawingMasters {\n  data: IMap<Project>;\n  currentSpec: IMap<{ id: number, name: string, selectedDrawingIds: number[] }>;\n  isExpanded: boolean;\n  isLoadingSpecData: boolean;\n  currentSpecData: IMap<Spec>;\n  selectedDrawingIds: number[];\n}\ninterface IMasterSpecDrawingTemplates {\n  data: IMap<Project>;\n  currentSpec: IMap<{ id: number, name: string, selectedDrawingIds: number[] }>;\n  isExpanded: boolean;\n  isLoadingSpecData: boolean;\n  currentSpecData: IMap<Spec>;\n}\nexport interface ICopyStatus {\n  isLoading: boolean;\n  error: string;\n}\nexport interface ILoadingStatus {\n  isLoading: boolean;\n  withInfinityScroll: boolean;\n}\nexport interface ISpecReducerState {\n  error: string;\n  specs: Map<number, IMap<Spec>>;\n  masterSpecs: Map<number, IMap<Spec>>;\n  templateSpecs: Map<number, IMap<Spec>>;\n  selectedSpecId: number;\n  selectedMasterSpecId: number;\n  selectedTemplateSpecId: number;\n  selectedDrawingId: number;\n  drawingRules: Map<number, IMap<DrawingRules>>;\n  failedSelfDrawingRules: Map<string, IMap<Rule>>;\n  failedSelfDrawingRulesLoading: boolean;\n  updatingRules: boolean;\n  printFormats: Map<string, IMap<PageData>>;\n  searchedSpecs: List<IMap<Spec>>;\n  searchedSpecsCount: number;\n  searchedSpecsHasNextPage: boolean;\n  searchingSpecs: boolean;\n   mode: Mode;\n  searchingGetMasterSpecById: boolean;\n  searchingGetTemplateSpecById: boolean;\n  redirectPath: string;\n  testSpecMode: boolean;\n  currentSpecFiles: null | Map<string, List<IMap<File>>>;\n  specPrintConfigs: Map<number, Map<string, any>>;\n  isSavingAlternativeProducts: boolean;\n  isDeletingAlternativeProduct: boolean;\n  isUpdatingSpecFiles: boolean;\n  copyStatus: IMap<ICopyStatus>;\n  isLinkingOrUnlinkingGenericProduct: boolean;\n  ptSpecDndMenu: IMap<{\n    index: number;\n    anchorEl: Element;\n  }>;\n  isUpdatingDrawing: boolean;\n  newDrawingId: number;\n  masterSpecDrawingState: IMap<{\n    masters: List<IMap<IMasterSpecDrawingMasters>>;\n    masterHasNextPage: boolean;\n    masterCount: number;\n    mastersLoadingStatus: ILoadingStatus;\n    templates: List<IMap<IMasterSpecDrawingTemplates>>,\n    templateHasNextPage: boolean,\n    templateCount: number,\n    templatesLoadingStatus: ILoadingStatus,\n    specs: List<IMap<Spec>>,\n    specHasNextPage: boolean,\n    masterSpecsCount: number,\n    templateSpecsCount: number,\n    masterSpecsOffset: number,\n    templateSpecsOffset: number,\n    specsLoadingStatus: ILoadingStatus,\n    drawingIdsUpdating: List<number>,\n    selectedPinnedDrawingIds: List<[number, number, number]>,\n  }>;\n}\n\nconst INITIAL_STATE = fromJS({\n  error: '',\n  specs: {},\n  masterSpecs: {},\n  templateSpecs: {},\n  selectedSpecId: -1,\n  selectedMasterSpecId: -1,\n  selectedTemplateSpecId: -1,\n  selectedDrawingId: -1,\n  drawingRules: {},\n  failedSelfDrawingRules: {},\n  failedSelfDrawingRulesLoading: false,\n  updatingRules: false,\n  printFormats: null,\n  searchedSpecs: [],\n  searchedSpecsCount: null,\n  searchedSpecsHasNextPage: false,\n  searchingSpecs: false,\n  mode: Mode.productCatalogue,\n  searchingGetMasterSpecById: false,\n  searchingGetTemplateSpecById: false,\n  redirectPath: null,\n  testSpecMode: false,\n  currentSpecFiles: null,\n  specPrintConfigs: {},\n  isSavingAlternativeProducts: false,\n  isDeletingAlternativeProduct: false,\n  isUpdatingSpecFiles: false,\n  copyStatus: {\n    isLoading: false,\n    error: '',\n  },\n  isLinkingOrUnlinkingGenericProduct: false,\n  ptSpecDndMenu: {\n    index: 0,\n    anchorEl: null\n  },\n  isUpdatingDrawing: false,\n  newDrawingId: -1,\n  masterSpecDrawingState: {\n    masters: [],\n    masterHasNextPage: false,\n    masterCount: null,\n    mastersLoadingStatus: {\n      isLoading: false,\n      withInfiniteScroll: false,\n    },\n    templates: [],\n    templateHasNextPage: false,\n    templateCount: null,\n    templatesLoadingStatus: {\n      isLoading: false,\n      withInfiniteScroll: false,\n    },\n    specs: [],\n    specHasNextPage: false,\n    masterSpecsCount: null,\n    templateSpecsCount: null,\n    templateSpecOffset: 0,\n    masterSpecOffset: 0,\n    specsLoadingStatus: {\n      isLoading: false,\n      withInfiniteScroll: false,\n    },\n    drawingIdsUpdating: [],\n    selectedPinnedDrawingIds: []\n  }\n});\n\nexport const reducer = (state: IMapNonRecursive<ISpecReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case SpecActionTypes.RESET_SPECS: {\n      return state.set('specs', INITIAL_STATE.get('specs'));\n    }\n    case SpecActionTypes.SET_IS_UPDATING_DRAWING: {\n      const {\n        payload\n      } = action as SetIsUpdatingDrawingAction;\n      return state.set('isUpdatingDrawing', payload);\n    }\n    case SpecActionTypes.SET_NEW_DRAWING_ID: {\n      const {\n        payload\n      } = action as SetNewDrawingIdAction;\n      return state.set('newDrawingId', payload);\n    }\n    case SpecActionTypes.DELETE_ALTERNATIVE_PRODUCT_SUCCEEDED: {\n      const {\n        payload\n      } = action as DeleteAlternativeProductSucceededAction;\n      const {\n        specId,\n        drawingId,\n        productId, // specProductId\n        alternativeId,\n        mode,\n      } = payload;\n      let specType;\n      switch (mode) {\n        case Mode.master: {\n          specType = 'masterSpecs';\n          break;\n        }\n        case Mode.masterTemplate: {\n          specType = 'templateSpecs';\n          break;\n        }\n        default: {\n          specType = 'specs';\n        }\n      }\n      const drawingIndex = state\n        .getIn([specType, specId, 'drawings'])\n        ?.findIndex((drawing, index) => drawing.get('id') === drawingId);\n      const productIndex = state\n        .getIn([specType, specId, 'drawings', drawingIndex, 'products'])\n        ?.findIndex((product, index) => product.get('specProductId') === productId);\n      const alternativeIndex = state\n        .getIn([specType, specId, 'drawings', drawingIndex, 'products', productIndex, 'alternativeProducts'])\n        ?.findIndex((alternativeProduct, index) => alternativeProduct.get('id') === alternativeId);\n      return state.deleteIn([specType, specId, 'drawings', drawingIndex, 'products', productIndex, 'alternativeProducts', alternativeIndex]);\n    }\n    case SpecActionTypes.SET_IS_DELETING_ALTERNATIVE_PRODUCT: {\n      const {\n        payload\n      } = action as SetIsDeletingAlternativeProductAction;\n      return state.set('isDeletingAlternativeProduct', payload.isDeletingAlternativeProduct);\n    }\n    case SpecActionTypes.SET_IS_SAVING_ALTERNATIVE_PRODUCTS: {\n      const {\n        payload\n      } = action as SetIsSavingAlternativeProductsAction;\n      return state.set('isSavingAlternativeProducts', payload.isSavingAlternativeProducts);\n    }\n    case SpecActionTypes.SET_LIXIL_PRINT_GROUPS_IN_CONFIG_BY_SELECTED_SPEC_ID: {\n      const {\n        payload\n      } = action as SetLixilPrintGroupsInConfigBySelectedSpecIdAction;\n\n      const specId = state.get('selectedSpecId');\n\n      return state.setIn(['specPrintConfigs', specId, 'productGroups'], payload);\n    }\n    case SpecActionTypes.GET_SPEC_PRINT_CONFIG_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetSpecPrintConfigSucceededAction;\n\n      const {\n        specId,\n        config,\n      } = payload;\n\n      return state.setIn(['specPrintConfigs', specId], config);\n    }\n    case SpecActionTypes.UPDATE_FAILED_SELF_RULES_LOADING: {\n      const {\n        payload\n      } = action as UpdateSelfFailedRulesLoadingAction;\n\n      return state.set('failedSelfDrawingRulesLoading', payload);\n    }\n    case SpecActionTypes.UPDATE_FAILED_SELF_RULES: {\n      const {\n        payload\n      } = action as UpdateSelfFailedRulesAction;\n      const {\n        rules\n      } = payload;\n\n      return state.set('failedSelfDrawingRules', rules);\n    }\n    case SpecActionTypes.CLEAR_SELF_RULES: {\n      return state.set('failedSelfDrawingRules', Map());\n    }\n    case SpecActionTypes.SET_TEST_SPEC_MODE: {\n      const {\n        payload\n      } = action as SetTestSpecModeAction;\n      return state.set('testSpecMode', payload);\n    }\n    case SpecActionTypes.SET_SELECTED_SPEC_ID: {\n      const {\n        payload,\n      } = action as SetSelectedSpecIdAction;\n      return state.withMutations((ctx) => {\n        ctx.set('selectedSpecId', payload);\n      });\n    }\n    case SpecActionTypes.SET_SELECTED_MASTER_SPEC_ID: {\n      const {\n        payload,\n      } = action as SetSelectedMasterSpecIdAction;\n      return state.withMutations((ctx) => {\n        ctx.set('selectedMasterSpecId', payload);\n      });\n    }\n    case SpecActionTypes.SET_MODE: {\n      const {\n        payload,\n      } = action as SetModeAction;\n      return state.withMutations((ctx) => {\n        ctx.set('mode', payload);\n      });\n    }\n    case SpecActionTypes.GET_MASTER_SPECS_SUCCEEDED: {\n      const {\n        payload: specsResponse,\n      } = action as GetMasterSpecsSucceededAction;\n      return state.withMutations(mutableState => {\n        mutableState.set('searchingSpecs', false);\n        mutableState.update(\n          'masterSpecs',\n          (stateSpecs: Map<number, IMap<Spec>>) => {\n            return specsResponse.reduce(\n              (acc: Map<number, IMap<Spec>>, specResponse: IMap<Spec>) => {\n                return acc.set(specResponse.get('id'), specResponse);\n              },\n              stateSpecs\n            );\n          }\n        );\n      }).set('searchingGetMasterSpecById', false);\n    }\n    case SpecActionTypes.GET_TEMPLATE_SPECS_SUCCEEDED: {\n      const {\n        payload: specsResponse,\n      } = action as GetTemplateSpecsSucceededAction;\n      return state.withMutations(mutableState => {\n        mutableState.set('searchingSpecs', false);\n        mutableState.update(\n            'templateSpecs',\n            (stateSpecs: Map<number, IMap<Spec>>) => {\n              return specsResponse.reduce(\n                  (acc: Map<number, IMap<Spec>>, specResponse: IMap<Spec>) => {\n                    return acc.set(specResponse.get('id'), specResponse);\n                  },\n                  stateSpecs\n              );\n            }\n        );\n      }).set('searchingGetTemplateSpecById', false);\n    }\n    case SpecActionTypes.SELECT_MASTER_SPEC: {\n      const {\n        payload: specId,\n      } = action as SelectMasterSpecAction;\n      return state.withMutations((ctx) => {\n        ctx.set('selectedMasterSpecId', specId);\n        ctx.set('mode', Mode.master);\n      });\n    }\n    case SpecActionTypes.SELECT_TEMPLATE_SPEC: {\n      const {\n        payload: specId,\n      } = action as SelectMasterSpecAction;\n      return state.withMutations((ctx) => {\n        ctx.set('selectedTemplateSpecId', specId);\n        ctx.set('mode', Mode.masterTemplate);\n      });\n    }\n    case SpecActionTypes.SELECT_DRAWING: {\n      const {\n        payload: selectedDrawingId,\n      } = action as SelectDrawingAction;\n      return state.set('selectedDrawingId', selectedDrawingId);\n    }\n    case SpecActionTypes.GET_MASTER_SPEC_BY_ID: {\n      const {\n        payload\n      } = action as GetMasterSpecsAction;\n      const {\n        withLoading\n      } = payload;\n      return state.set('searchingGetMasterSpecById', withLoading);\n    }\n    case SpecActionTypes.GET_TEMPLATE_SPEC_BY_ID: {\n      const {\n        options: {\n          withLoading\n        } = {\n          withLoading: true\n        }\n      } = action as GetTemplateSpecsAction;\n      return state.set('searchingGetTemplateSpecById', withLoading);\n    }\n    case SpecActionTypes.SELECT_DRAWING_WITHOUT_RULES: {\n      const {\n        payload: selectedDrawingId,\n      } = action as SelectDrawingWithoutRulesAction;\n      return state.set('selectedDrawingId', selectedDrawingId);\n    }\n    case SpecActionTypes.UPDATE_SPEC: {\n      const {\n        payload,\n      } = action as UpdateSpecAction;\n      const {\n        spec: updatedSpec,\n        specId,\n      } = payload;\n      return state.updateIn(['specs', specId], (spec: IMap<Spec>) => spec.merge(updatedSpec));\n    }\n    case SpecActionTypes.DELETE_DRAWING: {\n      const {\n        payload: currentDrawingId,\n      } = action as DeleteDrawingAction;\n      const drawingsPath = ['specs', state.get('selectedSpecId'), 'drawings'];\n      const index = state.getIn(drawingsPath, List()).findIndex((i: any) => i.get('id') === currentDrawingId);\n      return state.deleteIn([...drawingsPath, index]);\n    }\n    case SpecActionTypes.GET_SPECS_TAKE_EVERY:\n    case SpecActionTypes.GET_SPECS: {\n      return state.set('searchingSpecs', true);\n    }\n    case SpecActionTypes.GET_SPECS_SUCCEEDED: {\n      const {\n        payload: specsResponse,\n      } = action as GetSpecsSucceededAction;\n      return state.withMutations(mutableState => {\n        mutableState.set('searchingSpecs', false);\n        mutableState.update(\n          'specs',\n          (stateSpecs: Map<number, IMap<Spec>>) => {\n            return specsResponse.reduce(\n              (acc: Map<number, IMap<Spec>>, specResponse: IMap<Spec>) => {\n                return acc.set(specResponse.get('id'), specResponse);\n              },\n              stateSpecs\n            );\n          }\n        );\n      });\n    }\n    case SpecActionTypes.GET_SPECS_FAILED: {\n      return state.set('searchingSpecs', false).set('searchingGetMasterSpecById', false).set('searchingGetTemplateSpecById', false);\n    }\n    // trim ?\n    case QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE: {\n      const { payload } = action as GetSpecToQuoteDraftSucceededAction;\n      const { quoteId, draft } = payload;\n      // const _specId = parseInt(specId, 10);\n      const spec = draft.get('spec');\n      const specId = spec?.get('id');\n      if (!specId) {\n        return state;\n      }\n      return state.withMutations((ctx) => {\n        ctx.setIn(['specs', specId], spec);\n        ctx.set('selectedSpecId', specId);\n      });\n    }\n    case QuoteTypes.PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE: {\n      const { payload } = action as GetSpecToQuoteDraftSucceededAction;\n      const { quoteId, draft } = payload;\n      // const _specId = parseInt(specId, 10);\n      const spec = draft.get('spec');\n      const specId = spec?.get('id');\n      if (!specId) {\n        return state;\n      }\n      return state.withMutations((ctx) => {\n        ctx.setIn(['specs', specId], spec);\n        ctx.set('selectedSpecId', specId);\n      });\n    }\n    case SpecActionTypes.SELECT_SPEC: {\n      const {\n        payload: specId,\n      } = action as SelectSpecAction;\n      return state.withMutations((ctx) => {\n        ctx.set('selectedSpecId', specId);\n        // ctx.set('mode', Mode.project);\n      });\n    }\n    case SpecActionTypes.UPDATE_DRAWING_SUCCEEDED:\n    case SpecActionTypes.UPDATE_DRAWING:\n    case SpecActionTypes.UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC:\n    case SpecActionTypes.UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC: {\n      const {\n        payload,\n      } = action as UpdateDrawingAction;\n      const {\n        drawingId,\n        drawing: updatedDrawing,\n        instantUpdateDrawingInStore = true\n      } = payload;\n\n      if (!instantUpdateDrawingInStore) {\n        return state;\n      }\n\n      const mode = state.get('mode');\n      let drawingsPath;\n      switch (mode) {\n        case Mode.master: {\n          drawingsPath = ['masterSpecs', state.get('selectedMasterSpecId'), 'drawings'];\n          break;\n        }\n        case Mode.masterTemplate: {\n          drawingsPath = ['templateSpecs', state.get('selectedTemplateSpecId'), 'drawings'];\n          break;\n        }\n        default: {\n          drawingsPath = ['specs', state.get('selectedSpecId'), 'drawings'];\n        }\n      }\n      return state.updateIn(drawingsPath, (drawingList: List<IMap<Drawing>>) => {\n        const existingDrawingIndex = drawingList.findIndex(\n          (drawing: IMap<Drawing>) => drawing.get('id') === drawingId\n        );\n        const updatedDrawingList = drawingList.update(\n          existingDrawingIndex,\n          (drawing: IMap<Drawing>) => {\n            return drawing.merge(updatedDrawing);\n          },\n        );\n        return updatedDrawingList;\n      });\n    }\n    case SpecActionTypes.UPDATE_RULES: {\n      const {\n        payload,\n      } = action as UpdateRulesAction;\n      const {\n        drawingId,\n        rules,\n      } = payload;\n      return state.setIn(['drawingRules', drawingId], rules);\n    }\n    case SpecActionTypes.CLEAR_DRAWING_RULES: {\n      return state.set('drawingRules', Map());\n    }\n    case SpecActionTypes.UPDATE_RULES_MISSING: {\n      const {\n        payload,\n      } = action as UpdateRulesMissing;\n      const {\n        drawingId,\n        missing,\n      } = payload;\n      return state.setIn(['drawingRules', drawingId, 'missing'], missing);\n    }\n    case SpecActionTypes.UPDATING_RULES: {\n      return state.set('updatingRules', true);\n    }\n    case SpecActionTypes.UPDATE_RULES_SUCCESS: {\n      return state.set('updatingRules', false);\n    }\n    case SpecActionTypes.UPDATE_RULES_FAIL: {\n      return state.set('updatingRules', false);\n    }\n    case SpecActionTypes.SEARCH_SPECS:\n    case SpecActionTypes.LOADING_SEARCHED_SPEC: {\n      return state.set('searchingSpecs', true);\n    }\n    case SpecActionTypes.SEARCH_SPECS_SUCCEEDED: {\n      const { payload } = action as SearchSpecsSucceededAction;\n      const {\n        specs,\n        count,\n        hasNextPage,\n      } = payload;\n      return state.withMutations((mutableState) => {\n        mutableState.set('searchingSpecs', false);\n        mutableState.set('searchedSpecs', specs);\n        mutableState.set('searchedSpecsHasNextPage', hasNextPage);\n        if (count != null) {\n          mutableState.set('searchedSpecsCount', count);\n        }\n       });\n    }\n    case SpecActionTypes.SEARCH_SPECS_FAILED: {\n      return state.set('searchingSpecs', false);\n    }\n    case SpecActionTypes.GET_PRINT_FORMATS_SUCCEEDED:\n      const printFormats: Map<string, IMap<PageData>> = action.payload;\n      return state.set('printFormats', printFormats);\n    case SpecActionTypes.SPEC_FAILED:\n      return state.set('error', action.payload);\n    // case SpecActionTypes.DELETE_SPEC:\n    //   return state.update(\n    //     'specs',\n    //     (stateSpecs: Map<number, IMap<Spec>>) => stateSpecs.delete(action.payload.specId),\n    //   );\n    case SpecActionTypes.SET_REDIRECT_PATH:\n      const { payload: path = null } = action as SetRedirectPathAction;\n      return state.set('redirectPath', path);\n    case SpecActionTypes.GET_SPEC_FILES_SUCCEEDED: {\n      const { files } = action as GetSpecFilesSucceededAction;\n      return state.set('currentSpecFiles', files);\n    }\n    case SpecActionTypes.COPY_ACTION: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['copyStatus', 'isLoading'], true);\n        ctx.setIn(['copyStatus', 'error'], '');\n      });\n    }\n    case SpecActionTypes.COPY_SUCCEED_ACTION: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['copyStatus', 'isLoading'], false);\n        ctx.setIn(['copyStatus', 'error'], '');\n      });\n    }\n    case SpecActionTypes.COPY_FAILED_ACTION: {\n      return state.withMutations(ctx => {\n        ctx.setIn(['copyStatus', 'isLoading'], false);\n        ctx.setIn(['copyStatus', 'error'], action.payload);\n      });\n    }\n    case SpecActionTypes.IS_UPDATING_SPEC_FILES: {\n      const { payload } = action as IsUpdatingSpecFilesAction;\n      return state.set('isUpdatingSpecFiles', payload);\n    }\n    case SpecActionTypes.SET_IS_LINKING_OR_UNLINKING_GENERIC_PRODUCT: {\n      const {\n        payload\n      } = action as SetIsLinkingOrUnlinkGenericProductAction;\n      return state.set('isLinkingOrUnlinkingGenericProduct', payload);\n    }\n    case SpecActionTypes.SET_PT_SPEC_DND_MENU: {\n      const {\n        payload\n      } = action as SetPTSpecDndMenuAction;\n      return state.set('ptSpecDndMenu', payload);\n    }\n    case SpecActionTypes.GET_MASTER_DRAWER_DATA: {\n      const {\n        payload\n      } = action as GetMasterDrawerDataAction;\n      const { type, withInfiniteScroll } = payload;\n      if (type === 'master') {\n        return state.withMutations(mutableState => {\n            mutableState.setIn(['masterSpecDrawingState', 'mastersLoadingStatus', 'isLoading'], true);\n            mutableState.setIn(['masterSpecDrawingState', 'mastersLoadingStatus', 'withInfiniteScroll'], withInfiniteScroll);\n        });\n      }\n      if (type === 'template') {\n        return state.withMutations(mutableState => {\n          mutableState.setIn(['masterSpecDrawingState', 'templatesLoadingStatus', 'isLoading'], true);\n          mutableState.setIn(['masterSpecDrawingState', 'templatesLoadingStatus', 'withInfiniteScroll'], withInfiniteScroll);\n        });\n      }\n      return state;\n    }\n    case SpecActionTypes.GET_MATER_DRAWER_DATA_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetMasterDrawerDataSucceededAction;\n      const { type, hasNextPage, data, count, withInfiniteScroll } = payload;\n        if (type === 'master') {\n            return state.withMutations(mutableState => {\n                mutableState.setIn(['masterSpecDrawingState', 'mastersLoadingStatus', 'isLoading'], false);\n                mutableState.setIn(['masterSpecDrawingState', 'mastersLoadingStatus', 'withInfiniteScroll'], false);\n                mutableState.setIn(['masterSpecDrawingState', 'mastersHasNextPage'], hasNextPage);\n                mutableState.setIn(['masterSpecDrawingState', 'mastersCount'], count);\n                mutableState.updateIn(\n                    ['masterSpecDrawingState', 'masters'],\n                    (context: List<IMasterSpecDrawingMasters>) => {\n                      return data.reduce(\n                          (acc: List<IMasterSpecDrawingMasters>, master) => {\n                            const defaultSpec: IMap<ProjectSpec> = master.get('specs')?.first();\n                            let currentSpec;\n                            if (defaultSpec) {\n                              currentSpec = {\n                                id: defaultSpec.get('id'),\n                                name: defaultSpec.get('name')\n                              };\n                            }\n                            return acc.push(fromJS({\n                              data: master,\n                              currentSpec,\n                              isExpanded: false,\n                              isLoadingSpecData: false,\n                            }));\n                          },\n                          withInfiniteScroll ? context : List()\n                      );\n                    }\n                );\n            });\n        }\n        if (type === 'template') {\n            return state.withMutations(mutableState => {\n              mutableState.setIn(['masterSpecDrawingState', 'templatesLoadingStatus', 'isLoading'], false);\n              mutableState.setIn(['masterSpecDrawingState', 'templatesLoadingStatus', 'withInfiniteScroll'], false);\n              mutableState.setIn(['masterSpecDrawingState', 'templatesHasNextPage'], hasNextPage);\n              mutableState.setIn(['masterSpecDrawingState', 'templatesCount'], count);\n              mutableState.updateIn(\n                  ['masterSpecDrawingState', 'templates'],\n                  (context: List<IMasterSpecDrawingTemplates>) => {\n                    return data.reduce(\n                        (acc: List<IMasterSpecDrawingTemplates>, template) => {\n                          const defaultSpec: IMap<ProjectSpec> = template.get('specs')?.first();\n                          let currentSpec;\n                          if (defaultSpec) {\n                            currentSpec = {\n                              id: defaultSpec.get('id'),\n                              name: defaultSpec.get('name'),\n                              selectedDrawingIds: [],\n                            };\n                          }\n                          return acc.push(fromJS({\n                            data: template,\n                            currentSpec,\n                            isExpanded: false,\n                            isLoadingSpecData: false,\n                          }));\n                        },\n                        withInfiniteScroll ? context : List()\n                    );\n                  }\n              );\n            });\n        }\n        return state;\n    }\n    case SpecActionTypes.MASTER_DRAWER_SELECT_SPEC: {\n      const { payload } = action as MasterDrawerSelectSpecAction;\n      const { type, projectId, spec } = payload;\n      if (type === 'master') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'masters']).findIndex((master: Map<string, any>) => {\n          return master.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.setIn(['masterSpecDrawingState', 'masters', targetIndex, 'currentSpec'], spec.set('selectedDrawingIds', List()));\n      }\n      if (type === 'template') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'templates']).findIndex((template: Map<string, any>) => {\n          return template.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.setIn(['masterSpecDrawingState', 'templates', targetIndex, 'currentSpec'], spec.set('selectedDrawingIds', List()));\n      }\n      return state;\n    }\n    case SpecActionTypes.MASTER_DRAWER_LOAD_SPEC: {\n      const { payload } = action as MasterDrawerLoadSpecAction;\n      const { type, projectId, specId } = payload;\n      if (type === 'master') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'masters']).findIndex((master: Map<string, any>) => {\n          return master.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.setIn(['masterSpecDrawingState', 'masters', targetIndex, 'isLoadingSpecData'], true);\n      }\n      if (type === 'template') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'templates']).findIndex((template: Map<string, any>) => {\n          return template.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.setIn(['masterSpecDrawingState', 'templates', targetIndex, 'isLoadingSpecData'], true);\n      }\n      return state;\n    }\n    case SpecActionTypes.MASTER_DRAWER_LOAD_SPEC_SUCCEEDED: {\n      const { payload } = action as MasterDrawerLoadSpecSucceededAction;\n      const { type, projectId, specData } = payload;\n      if (type === 'master') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'masters']).findIndex((master: Map<string, any>) => {\n          return master.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.withMutations((ctx) => {\n          ctx.setIn(['masterSpecDrawingState', 'masters', targetIndex, 'isLoadingSpecData'], false);\n          ctx.setIn(['masterSpecDrawingState', 'masters', targetIndex, 'currentSpecData'], specData);\n        });\n      }\n      if (type === 'template') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'templates']).findIndex((template: Map<string, any>) => {\n          return template.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.withMutations((ctx) => {\n          ctx.setIn(['masterSpecDrawingState', 'templates', targetIndex, 'isLoadingSpecData'], false);\n          ctx.setIn(['masterSpecDrawingState', 'templates', targetIndex, 'currentSpecData'], specData);\n        });\n      }\n      return state;\n    }\n    case SpecActionTypes.MASTER_DRAWER_UPDATE_DRAWING: {\n      const { payload } = action as MasterDrawerUpdateDrawer;\n      const { projectId, type, drawingId, drawing } = payload;\n      let pathname = '';\n      if (type === 'master') {\n        pathname = 'masters';\n      }\n      if (type === 'template') {\n        pathname = 'templates';\n      }\n      if (pathname === '') {\n        return state;\n      }\n      const targetProjectIndex = state.getIn(['masterSpecDrawingState', pathname]).findIndex((master: Map<string, any>) => {\n        return master.getIn(['data', 'id']) === projectId;\n      });\n      const targetDrawingIndex = state.getIn(['masterSpecDrawingState', pathname, targetProjectIndex, 'currentSpecData', 'drawings']).findIndex((d: Map<string, any>) => {\n        return d.get('id') === drawingId;\n      });\n      if (targetProjectIndex === -1) {\n        return state;\n      }\n      return state.updateIn(['masterSpecDrawingState', pathname, targetProjectIndex, 'currentSpecData', 'drawings', targetDrawingIndex], (d) => d.merge(drawing));\n    }\n    case SpecActionTypes.GET_PINNED_DRAWING: {\n      const { payload } = action as GetPinnedDrawingAction;\n      const { withInfiniteScroll } = payload;\n      return state.withMutations(mutableState => {\n        mutableState.setIn(['masterSpecDrawingState', 'specsLoadingStatus', 'isLoading'], true);\n        mutableState.setIn(['masterSpecDrawingState', 'specsLoadingStatus', 'withInfiniteScroll'], withInfiniteScroll);\n        if (!withInfiniteScroll) {\n          mutableState.setIn(['masterSpecDrawingState', 'selectedPinnedDrawingIds'], List());\n        }\n      });\n    }\n    case SpecActionTypes.GET_PINNED_DRAWING_SUCCEEDED: {\n      const {payload} = action as GetPinnedDrawingSucceededAction;\n      const {masterSpecsCount, templateSpecsCount, data, hasNextPage, masterSpecsOffset, templateSpecsOffset, withInfiniteScroll} = payload;\n      return state.withMutations(mutableState => {\n        mutableState.setIn(['masterSpecDrawingState', 'specsLoadingStatus', 'isLoading'], false);\n        mutableState.setIn(['masterSpecDrawingState', 'specsLoadingStatus', 'withInfiniteScroll'], false);\n        mutableState.setIn(['masterSpecDrawingState', 'specsHasNextPage'], hasNextPage);\n        mutableState.updateIn(['masterSpecDrawingState', 'specs'], (specs) => withInfiniteScroll ? specs.concat(data) : data);\n        if (masterSpecsCount != null) {\n          mutableState.setIn(['masterSpecDrawingState', 'masterSpecsCount'], masterSpecsCount);\n        }\n        if (templateSpecsCount != null) {\n          mutableState.setIn(['masterSpecDrawingState', 'templatesSpecsCount'], templateSpecsCount);\n        }\n        if (masterSpecsOffset != null) {\n            mutableState.setIn(['masterSpecDrawingState', 'masterSpecsOffset'], masterSpecsOffset);\n        }\n        if (templateSpecsOffset != null) {\n            mutableState.setIn(['masterSpecDrawingState', 'templateSpecsOffset'], templateSpecsOffset);\n        }\n      });\n    }\n    case SpecActionTypes.MASTER_DRAWER_TOGGLE_EXPAND: {\n      const { payload } = action as MasterDrawerToggleExpandAction;\n      const { type, projectId, value } = payload;\n      // tslint:disable-next-line:no-shadowed-variable\n      let path = '';\n      if (type === 'master') {\n        path = 'masters';\n      }\n      if (type === 'template') {\n        path = 'templates';\n      }\n      if (path === '') {\n        return state;\n      }\n      const targetIndex = state.getIn(['masterSpecDrawingState', path]).findIndex((project: Map<string, any>) => {\n        return project.getIn(['data', 'id']) === projectId;\n      });\n      if (targetIndex === -1) {\n        return state;\n      }\n      return state.updateIn(['masterSpecDrawingState', path, targetIndex], (project) => project.set('isExpanded', value != null ? value : !project.get('isExpanded')));\n    }\n    case SpecActionTypes.SET_MASTER_DRAWER_UPDATING: {\n      const { payload } = action as SetMasterDrawerUpdatingAction;\n      const { drawingId, value } = payload;\n      if (value && !state.getIn(['masterSpecDrawingState', 'drawingIdsUpdating']).contains(drawingId)) {\n        return state.setIn(['masterSpecDrawingState', 'drawingIdsUpdating'], state.getIn(['masterSpecDrawingState', 'drawingIdsUpdating']).push(drawingId));\n      }\n      if (!value && state.getIn(['masterSpecDrawingState', 'drawingIdsUpdating']).contains(drawingId)) {\n        return state.setIn(['masterSpecDrawingState', 'drawingIdsUpdating'], state.getIn(['masterSpecDrawingState', 'drawingIdsUpdating']).filter((id) => id !== drawingId));\n      }\n      return state;\n    }\n    case SpecActionTypes.SELECT_MASTER_DRAWER_DRAWING: {\n      const { payload } = action as SelectMasterDrawerDrawingAction;\n      const { projectId, drawingIds, value, type } = payload;\n      if (type === 'master') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'masters']).findIndex((master: Map<string, any>) => {\n          return master.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.updateIn(['masterSpecDrawingState', 'masters', targetIndex], (master) => {\n          let selectedDrawingIds = master.getIn(['currentSpec', 'selectedDrawingIds']) ?? List();\n          drawingIds.forEach((drawingId) => {\n            if (value === true && !selectedDrawingIds.contains(drawingId)) {\n              selectedDrawingIds = selectedDrawingIds.push(drawingId);\n            }\n            if (value === false && selectedDrawingIds.contains(drawingId)) {\n              selectedDrawingIds = selectedDrawingIds.filter((id) => id !== drawingId);\n            }\n          });\n          return master.setIn(['currentSpec', 'selectedDrawingIds'], selectedDrawingIds);\n        });\n      }\n      if (type === 'template') {\n        const targetIndex = state.getIn(['masterSpecDrawingState', 'templates']).findIndex((template: Map<string, any>) => {\n          return template.getIn(['data', 'id']) === projectId;\n        });\n        if (targetIndex === -1) {\n          return state;\n        }\n        return state.updateIn(['masterSpecDrawingState', 'templates', targetIndex], (template) => {\n          let selectedDrawingIds = template.getIn(['currentSpec', 'selectedDrawingIds']) ?? List();\n          drawingIds.forEach((drawingId) => {\n            if (value === true && !selectedDrawingIds.contains(drawingId)) {\n              selectedDrawingIds = selectedDrawingIds.push(drawingId);\n            }\n            if (value === false && selectedDrawingIds.contains(drawingId)) {\n              selectedDrawingIds = selectedDrawingIds.filter((id) => id !== drawingId);\n            }\n          });\n          return template.setIn(['currentSpec', 'selectedDrawingIds'], selectedDrawingIds);\n        });\n      }\n      return state;\n    }\n    case SpecActionTypes.SELECT_PINNED_DRAWING: {\n      const {payload} = action as SelectPinnedDrawingAction;\n      const {value, data} = payload;\n      let selectedPinnedDrawingIds = state.getIn(['masterSpecDrawingState', 'selectedPinnedDrawingIds']) ?? List();\n      data.forEach(([projectId, specId, drawingId, sourceType]) => {\n        if (value === true && !selectedPinnedDrawingIds.find(([pId, sId, dId, sType]) => pId === projectId && sId === specId && dId === drawingId && sourceType === sType)) {\n          selectedPinnedDrawingIds = selectedPinnedDrawingIds.push([projectId, specId, drawingId, sourceType]);\n        }\n        if (value === false && selectedPinnedDrawingIds.find(([pId, sId, dId, sType]) => pId === projectId && sId === specId && dId === drawingId && sourceType === sType)) {\n          selectedPinnedDrawingIds = selectedPinnedDrawingIds.filter(([pId, sId, dId, sType]) => pId !== projectId || sId !== specId || dId !== drawingId || sourceType !== sType);\n        }\n      });\n      return state.setIn(['masterSpecDrawingState', 'selectedPinnedDrawingIds'], selectedPinnedDrawingIds);\n    }\n    case AtsActionTypes.USER_LOGGED_IN: {\n      return state.set('specs', Map()); // remove cached specs -> ungated user and logged in user should not able to see each other's spec\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","/*\n * SpecModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { ISpecReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\n\ninterface ISpecModuleComponentProps {\n\n}\n\ninterface ISpecModuleProps extends ISpecModuleComponentProps {\n  reducerState: IMapNonRecursive<ISpecReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype SpecModuleProps = ISpecModuleProps;\n\nclass SpecModule extends React.Component<SpecModuleProps> {\n\n  public render() {\n    const {\n      reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={\n            () => {\n              return <Hide\n                show={true}\n                title={'debug'}\n              >\n                {safeStringify(reducerState && reducerState.toJS())}\n              </Hide>;\n            }\n          }\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: ISpecModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<ISpecModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(SpecModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './SpecModule';\nexport default Module;","import { fromJS, List, Map, OrderedSet, Set } from 'immutable';\nimport { IAction, IMap, IMapNonRecursive, } from 'ats-utils/src/Interfaces';\n\nimport {\n  AccountActionTypes,\n  CreateFilterSucceededAction,\n  CreateManufacturerPreferenceSucceededAction,\n  CreateManufacturerRankingAction,\n  CreateManufacturerRankingSucceededAction,\n  DeleteContactAction,\n  DeleteContactsByIdSucceededAction,\n  DeleteFilterByIdSucceededAction,\n  DeleteManufacturerPreferenceSucceededAction,\n  DeleteOfficeByIdSucceededAction,\n  DeleteUserByIdSucceededAction,\n  GetBrandRepSucceededAction,\n  GetCategoriesSucceededAction,\n  GetCollaboratorsOfficeSucceededAction,\n  GetCollaboratorsSucceededAction,\n  GetContactsSucceededAction,\n  GetDiscountsForCustomerIdSucceeded,\n  GetFiltersByTypeSucceededAction,\n  GetFirmByIdSucceededAction,\n  GetFirmCollaboratorsSucceededAction,\n  GetFirmsSucceededAction,\n  GetLogInAsUsersSucceededAction,\n  GetManufacturerPreferenceSucceededAction,\n  GetManufacturersSucceededAction,\n  GetNonFirmCollaboratorsSucceededAction,\n  GetNoteCreatorsSucceededAction,\n  GetOfficeByIdSucceededAction,\n  GetOfficesByFirmIdSucceededAction,\n  GetOfficesSucceededAction,\n  GetOpportunityGroupsActionSucceeded,\n  GetOpportunityLabelsSucceededAction,\n  GetOpportunityStatusesSucceededAction,\n  GetPartnershipsSucceededAction,\n  GetPreferencesSucceededAction,\n  GetQuoteOfficesByFirmSucceededAction,\n  GetRTypeRegionsSucceededAction,\n  GetUserByIdMultiSucceededAction,\n  GetUserByIdSucceededAction,\n  GetUserPreferenceOverTakeOffSuccess,\n  GetUsersSucceededAction,\n  GetVisibilityListSucceededAction,\n  PatchUpdateFirmByIdSucceededAction,\n  ResetPreferenceSucceededAction,\n  SearchContactsBySearchTermSucceededAction,\n  SearchContactsFindIndexSucceededAction,\n  SearchContactsSucceededAction,\n  SearchDivisionsSuccessAction,\n  SearchManufacturersSuccessAction,\n  SearchProductCategoriesSuccessAction,\n  SearchUsersByOfficeIdFinishedAction,\n  SearchUsersbyUserIdFinishedAction,\n  SearchUsersFinishedAction,\n  SelectContactAction,\n  SetSelectedFirmId,\n  SelectOfficeAction,\n  SelectTeamOrganizationDrawerOfficeAction,\n  SelectTeamOrganizationOfficeAction,\n  SelectTeamOrganizationUserAction,\n  SelectUserAction,\n  SetContactsLoadingAction,\n  SetLoggedInUserOfficeIdAction,\n  SetLogInAsUsersAction,\n  SetLogInAsUsersIsSearchingAction,\n  SetPartnershipsSucceededAction,\n  SetSelectedCategoryIdAction,\n  SetSelectedManufacturerIdAction,\n  SetUpdateFirmByIdLoadingAction,\n  UpdateFilterByIdSucceededAction,\n  UpdateManufacturerPreferenceSucceededAction,\n  UpdateUserPreferenceActionSuccess,\n  GetManufacturerRankingsSucceededAction,\n  UpdateManufacturerRankingSucceededAction,\n  GetSearchModeSucceed,\n  DeleteManufacturerRankingSucceededAction,\n  GetAttachmentFolderTemplatesSucceededAction,\n  GetAttachmentFolderTemplateWithFoldersSucceededAction,\n  SetSelectedAttachmentFolderTemplateIdAction,\n  SetIsSearchingFolderTemplatesAction,\n  GetDefaultAttachmentFolderTemplateSucceededAction,\n  SetIsSearchingAllUsersAction,\n  SearchingAllUsersSucceededAction,\n  SetIsSearchingAllFirmsAction,\n  SearchingAllFirmsSucceededAction,\n  IsFetchingFirmByIdAction,\n  GetUserFirmSucceededAction,\n  SelectTeamOrganizationFirmAction,\n  GetFirmsForSuperFirmFirmAdminSucceededAction,\n  GetDefaultCustomEmailSucceed,\n  GetDefaultCustomEmailFailed,\n  SetIsGettingAppsAction,\n  GetAppsSucceededAction,\n  SetIsGettingAclRolesAction,\n  GetAclRolesSucceededAction,\n  AddAclRoleSucceededAction,\n  SetIsAddingAclRoleAction,\n  DeleteAclRoleSucceededAction,\n  SetIsDeletingAclRoleAction,\n  SetIsGettingFirmBrandTagsAction,\n  GetFirmBrandTagsSucceededAction,\n  GetOfficeBrandTagsSucceededAction,\n  DeleteOfficeFromFirmBrandTagsAction,\n  GetMasterFormatRootsSucceededAction,\n  SetUploadUsersProgress,\n  SetIsGettingAutoTrackingProjectSettingAction,\n  GetAutoTrackingProjectSettingSucceededAction,\n  GetCustomerDiscountVisibilitySettingSucceededAction,\n  SetIsGettingCustomerDiscountVisibilitySettingAction,\n  GetQuoteExcelColumnPreferencesSucceededAction,\n  SetIsUpdatingQuoteExcelColumnPreferencesAction,\n  GetVendorQuotationAutoTakeoffSettingSucceededAction,\n  SetIsGettingVendorQuotationAutoTakeoffSettingAction,\n  GetVendorQuotationNotificationsSucceededAction,\n  SetIsGettingVendorQuotationNotificationsAction,\n  GetVendorQuotationMyLogoSucceededAction,\n  SetIsGettingVendorQuotationMyLogoAction,\n  GetVendorQuotationBidEmailSucceededAction,\n  SetIsGettingVendorQuotationBidEmailAction,\n  SetIsSearchingManufacturerDiscountsAction,\n  SearchManufacturerDiscountsSucceededAction,\n  GetDiscountPrioritySucceededAction,\n  GetQuoteDiscountListSucceededAction,\n  GetShopDrawingColorSucceededAction,\n  GetDefaultProjectVisibilitySucceededAction,\n  GetFirmEmailSettingSucceededAction,\n  GetLoggedInUserDataSucceededAction,\n  GetQuoteAutoSavePreferenceSucceededAction,\n} from './actions';\nimport {\n  AclItem,\n  BrandTag,\n  Collaborator,\n  Contact,\n  Firm,\n  ListItem,\n  MasterFormatRoot,\n  Office,\n  OpportunityGroup,\n  OpportunityLabel,\n  OpportunityStatus,\n  Partnership,\n  Preferences,\n  ProjectPhase,\n  SavedFilter,\n  User,\n  VisibilityListItem,\n} from '../../models';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport Manufacturer from '../../models/Manufacturer';\nimport Category from '../../models/Category';\nimport { PreferenceType } from '../../models/Preferences';\nimport Discount from '../../models/Discount';\nimport { CustomerDiscount } from '../../components/UserContactDrawerDetailsContactEdit';\nimport Region from '../../models/Region';\nimport AttributeTag from '../../models/AttributeTag';\nimport ManufacturerPreference from '../../models/ManufacturerPreference';\nimport ManufacturerRanking from '../../models/ManufacturerRanking';\nimport { IExcelColumn } from '../../containers/QuoteExcelColumnPreference/Component';\nimport { ProjectVisibility } from './constants';\nimport { IQuoteAutoSavePreference, IQuoteDiscountListItem } from './types';\n\nexport type SearchSetting = 'complex' | 'simple';\nexport interface IAccountReducerState {\n  contacts: Map<number, IMap<Contact>>;\n  contactsLoading: boolean;\n  collaborators: Map<number, IMap<Collaborator>>;\n  firmCollaborators: Set<number>;\n  nonFirmCollaborators: Set<number>;\n  selectedContactId: number;\n  partnershipOffice: Map<number, IMap<Office>>;\n  partnerships: Map<number, IMap<Partnership>>;\n  logInAsUsers: Map<number, IMap<User>>;\n  logInAsUsersIsSearching: boolean;\n  searchedUsers: IMap<{\n    result: OrderedSet<number>;\n    isSearching: boolean;\n  }>;\n  userById: IMap<User>;\n  usersById: Map<number, IMap<User>>;\n  isFetchingFirmById: boolean;\n  selectedFirm: IMap<Firm>;\n  userFirm: IMap<Firm>;\n  opportunityGroups: List<IMap<OpportunityGroup>>;\n  collaboratorsOffice: List<Collaborator>;\n  isSearchingAllUsers: boolean;\n  allUsers: List<IMap<User>>;\n  allUsersCount: number;\n  users: Map<number, IMap<User>>;\n  offices: Map<number, IMap<Office>>;\n  isSearchingAllFirms: boolean;\n  allFirms: List<IMap<Firm>>;\n  allFirmsCount: number;\n  firms: Map<number, IMap<Firm>>;\n  firmOffices: Map<number, OrderedSet<number>>;\n  usersPerOffice: Map<number, OrderedSet<number>>;\n  selectedUserId: number;\n  selectedFirmId: number;\n  selectedOfficeId: number;\n  teamOrganization: IMap<{\n    selectedFirmId: number,\n    selectedOfficeId: number,\n    drawerOfficeId: number,\n    selectedUserId: number,\n    superFirmAndChildFirms: List<IMap<Firm>>;\n  }>;\n  manufacturersList: List<IMap<Manufacturer>>;\n  categoriesList: List<IMap<Category>>;\n  preferences: IMap<Preferences>;\n  selectedManufacturerId?: number;\n  selectedCategoryId?: number;\n  customerDiscounts: List<IMap<CustomerDiscount>>;\n  officeDiscounts: List<IMap<Discount>>;\n  opportunityLabels: List<IMap<OpportunityLabel>>;\n  opportunityStatuses: List<IMap<OpportunityStatus>>;\n  searchedContacts: List<IMap<Contact>>;\n  searchedContactsHasNextPage: boolean;\n  searchedContactsBySearchTerm: List<IMap<Contact>>;\n  totalSearchedContactsCount: number;\n  totalQuickSearchedContactsCount: number;\n  officeLoading: boolean;\n  usersLoading: boolean;\n  userLoading: boolean;\n  userUpdateSucceeded: boolean;\n  usersTrackingProject: List<IMap<User>>;\n  searchedContactsFindIndex: number;\n  noteCreators: List<IMap<User>>;\n  visibilityList: List<IMap<VisibilityListItem>>;\n  setPasswordSuccess: boolean;\n  settingPassword: boolean;\n  regions: List<IMap<Region>>;\n  loggedInUserOfficeId: number;\n  quickSearchContactsLoading: boolean;\n  savedFilters: Map<string, List<IMap<SavedFilter>>>;\n  gettingFilterList: boolean;\n  categories: IMap<{\n    isLoading: boolean,\n    data: List<IMap<Category>>;\n  }>;\n  divisions: IMap<{\n    isLoading: boolean;\n    data: List<IMap<ListItem>>;\n  }>;\n  manufacturers: IMap<{\n    isLoading: boolean;\n    data: List<IMap<ListItem>>;\n  }>;\n  userPreference: IMap<{\n    isLoading: boolean;\n    data: IMap<{\n      manufacturerIds: string[],\n      divisionIds: string[],\n      productCategoryIds: number[],\n    }>\n  }>;\n  quoteOfficesByFirm: List<IMap<Office>>;\n  brandRep: List<IMap<AttributeTag>>;\n  brandRepCategoryByManufacturer: { [index: string]: null | number[] };\n  brandRepManufacturerByCategory: { [index: string]: null | number[] };\n  isLoadingBrandRep: boolean;\n  manufacturerPreferences: List<IMap<ManufacturerPreference>>;\n  manufacturerRankings: List<IMap<ManufacturerRanking>>;\n  searchMode: SearchSetting;\n  isSearchingFolderTemplates: boolean;\n  attachmentFolderTemplates: List<Map<string, any>>;\n  currentAttachmentFolderTemplateFolders: List<Map<string, any>>;\n  currentAttachmentFolderTemplateId: number;\n  defaultAttachmentFolderTemplate: IMap<{\n    user: Map<string, any>,\n    firm: Map<string, any>\n  }>;\n  defaultCustomEmail: IMap<{\n    isLoading: boolean;\n    error: any;\n    data: {\n      defaultCustomEmail: string;\n      useDefaultCustomEmail: boolean;\n    };\n  }>;\n  loggedInUserData: IMap<User>;\n  // acl related\n  isGettingApps: boolean;\n  apps: List<IMap<ListItem>>;\n  isGettingAclRoles: boolean;\n  aclRoles: List<IMap<AclItem>>;\n  isAddingAclRole: boolean;\n  isDeletingAclRole: boolean;\n  // brand tag related\n  firmBrandTags: Map<string, List<IMap<BrandTag>>>;\n  firmBrandTagsKeyed: Map<string, Map<string, IMap<BrandTag>>>;\n  isGettingFirmBrandTags: boolean;\n  masterFormatRoots: List<IMap<MasterFormatRoot>>;\n  // upload users\n  uploadUsersProgress: IMap<{percentage: number, status: string, details?: any}>;\n  // auto track project setting\n  isGettingAutoTrackProjectSetting: boolean;\n  autoTrackProjects: boolean;\n  // customer discounts setting\n  isGettingCustomerVisibilitySetting: boolean;\n  displayAllBrands: boolean;\n  // quote excel column preferences setting\n  isGettingQuoteExcelColumnPreferences: boolean;\n  isUpdatingQuoteExcelColumnPreferences: boolean;\n  quoteExcelColumnPreferences: Map<number, List<IMap<IExcelColumn>>>;\n  // vendor quotation auto take-off project setting\n  isGettingVendorQuotationAutoTakeoffSetting: boolean;\n  vendorQuotationAutoTakeoff: boolean;\n  isGettingVendorQuotationNotifications: boolean;\n  vendorQuotationNotifications: List<Map<string, boolean>>;\n  isGettingVendorQuotationMyLogo: boolean;\n  vendorQuotationMyLogo: object;\n  isGettingVendorQuotationBidEmail: boolean;\n  vendorQuotationBidEmail: object;\n  // manufacturer discounts\n  discountPriority: 'customer' | 'manufacturer';\n  // default quote charge/discount/tax list setting (null until fetched)\n  quoteDiscountList: List<IMap<IQuoteDiscountListItem>>;\n  hasAlreadyFetchedManufacturerDiscounts: boolean;\n  isSearchingManufacturerDiscounts: boolean;\n  manufacturerDiscounts: List<IMap<any>>;\n  manufacturerDiscountsIndexMap: Map<number, number>;\n  // project visibility setting\n  defaultProjectVisibility: ProjectVisibility;\n  // shop drawing color setting\n  shopDrawingColor: string;\n  // firm email setting\n  firmEmailSetting: any;\n  // quote auto save preference\n  quoteAutoSavePreference: IMap<IQuoteAutoSavePreference>;\n}\n\nconst INITIAL_STATE = fromJS({\n  contacts: {},\n  contactsLoading: false,\n  collaborators: {},\n  firmCollaborators: [],\n  nonFirmCollaborators: [],\n  selectedContactId: -1,\n  partnerships: {},\n  logInAsUsers: {},\n  logInAsUsersIsSearching: false,\n  searchedUsers: {\n    result: OrderedSet<number>(),\n    isSearching: false\n  },\n  userById: {},\n  usersById: {},\n  isFetchingFirmById: false,\n  selectedFirm: {},\n  userFirm: {},\n  opportunityGroups: [],\n  collaboratorsOffice: [],\n  isSearchingAllUsers: false,\n  allUsers: [],\n  allUsersCount: 0,\n  users: {},\n  offices: {},\n  isSearchingAllFirms: false,\n  allFirms: [],\n  allFirmsCount: 0,\n  firms: {\n    isLoading: false,\n  },\n  firmOffices: {},\n  usersPerOffice: {},\n  selectedUserId: -1,\n  selectedFirmId: -1,\n  selectedOfficeId: -1,\n  teamOrganization: {\n    drawerOfficeId: -1,\n    selectedFirmId: -1,\n    selectedOfficeId: -1,\n    selectedUserId: -1,\n    superFirmAndChildFirms: {}\n  },\n  manufacturersList: [],\n  categoriesList: [],\n  preferences: {},\n  selectedManufacturerId: undefined,\n  selectedCategoryId: undefined,\n  customerDiscounts: [],\n  officeDiscounts: [],\n  opportunityLabels: [],\n  opportunityStatuses: [],\n  searchedContacts: [],\n  searchedContactsHasNextPage: false,\n  searchedContactsBySearchTerm: [],\n  totalSearchedContactsCount: 0,\n  totalQuickSearchedContactsCount: 0,\n  officeLoading: false,\n  usersLoading: false,\n  userLoading: false,\n  userUpdateSucceeded: false,\n  usersTrackingProject: [],\n  searchedContactsFindIndex: -1,\n  noteCreators: [],\n  visibilityList: [],\n  currentPasswordCorrect: false,\n  setPasswordSuccess: false,\n  settingPassword: false,\n  regions: [],\n  loggedInUserOfficeId: -1,\n  quickSearchContactsLoading: false,\n  savedFilters: {},\n  gettingFilterList: false,\n  categories: {\n    data: [],\n    isLoading: false,\n  },\n  divisions: {\n    data: [],\n    isLoading: false,\n  },\n  manufacturers: {\n    data: [],\n    isLoading: false,\n  },\n  userPreference: {\n    isLoading: false,\n    data: {\n      manufacturerIds: [],\n      divisionIds: [],\n      productCategoryIds: []\n    }\n  },\n  loggedInUserData: null,\n  quoteOfficesByFirm: [],\n  brandRep: [],\n  brandRepCategoryByManufacturer: {},\n  brandRepManufacturerByCategory: {},\n  isLoadingBrandRep: false,\n  manufacturerPreferences: [],\n  manufacturerRankings: [],\n  searchMode: 'complex',\n  isSearchingFolderTemplates: false,\n  attachmentFolderTemplates: [],\n  currentAttachmentFolderTemplateFolders: [],\n  currentAttachmentFolderTemplateId: -1,\n  defaultAttachmentFolderTemplate: {\n    user: {},\n    firm: {}\n  },\n  defaultCustomEmail: {\n    isLoading: false,\n    data: null,\n    error: null\n  },\n  // acl related\n  isGettingApps: false,\n  apps: [],\n  isGettingAclRoles: false,\n  aclRoles: [],\n  isAddingAclRole: false,\n  isDeletingAclRole: false,\n  // brand tag related\n  firmBrandTags: {},\n  firmBrandTagsKeyed: {},\n  isGettingFirmBrandTags: false,\n  masterFormatRoots: [],\n  // upload users\n  uploadUsersProgress: {\n    percentage: 0,\n    status: 'pending',\n    details: null\n  },\n  // auto track project setting\n  isGettingAutoTrackProjectSetting: false,\n  autoTrackProjects: false,\n  // customer discounts setting\n  isGettingCustomerVisibilitySetting: false,\n  displayAllBrands: false,\n  // quote excel column preferences setting\n  isGettingQuoteExcelColumnPreferences: false,\n  isUpdatingQuoteExcelColumnPreferences: false,\n  quoteExcelColumnPreferences: {},\n  // vendor quotation auto take-off project setting\n  isGettingVendorQuotationAutoTakeoffSetting: false,\n  vendorQuotationAutoTakeoff: undefined,\n  // vendor quotation notifications\n  isGettingVendorQuotationNotifications: false,\n  vendorQuotationNotifications: [],\n  isGettingVendorQuotationMyLogo: false,\n  vendorQuotationMyLogo: null,\n  isGettingVendorQuotationBidEmail: false,\n  vendorQuotationBidEmail: null,\n  // discount priority setting\n  discountPriority: null,\n  // default quote charge/discount/tax list setting\n  quoteDiscountList: null,\n  // manufacturer discounts\n  hasAlreadyFetchedManufacturerDiscounts: false,\n  isSearchingManufacturerDiscounts: false,\n  manufacturerDiscounts: [],\n  manufacturerDiscountsIndexMap: {},\n  // project visibility setting\n  defaultProjectVisibility: null,\n  // shop drawing color setting\n  shopDrawingColor: null,\n  // firm email setting\n  firmEmailSetting: null,\n  // quote auto save preference\n  quoteAutoSavePreference: null,\n});\nexport const reducer = (state: IMapNonRecursive<IAccountReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AccountActionTypes.GET_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED:\n    case AccountActionTypes.UPDATE_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetQuoteAutoSavePreferenceSucceededAction;\n      const {\n        quoteAutoSavePreference\n      } = payload;\n      return state.set('quoteAutoSavePreference', quoteAutoSavePreference);\n    }\n    case AccountActionTypes.GET_DISCOUNT_PRIORITY_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetDiscountPrioritySucceededAction;\n      const {\n        discountPriority\n      } = payload;\n      return state.set('discountPriority', discountPriority);\n    }\n    case AccountActionTypes.GET_QUOTE_DISCOUNT_LIST_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetQuoteDiscountListSucceededAction;\n      const {\n        quoteDiscountList\n      } = payload;\n      return state.set('quoteDiscountList', quoteDiscountList);\n    }\n    case AccountActionTypes.GET_SHOP_DRAWING_COLOR_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetShopDrawingColorSucceededAction;\n      const {\n        shopDrawingColor\n      } = payload;\n      return state.set('shopDrawingColor', shopDrawingColor);\n    }\n    case AccountActionTypes.GET_DEFAULT_PROJECT_VISIBILITY_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetDefaultProjectVisibilitySucceededAction;\n      const {\n        defaultProjectVisibility\n      } = payload;\n      return state.set('defaultProjectVisibility', defaultProjectVisibility);\n    }\n    case AccountActionTypes.SET_IS_UPDATING_QUOTE_EXCEL_COLUMN_PREFERENCES: {\n      const {\n        payload,\n      } = action as SetIsUpdatingQuoteExcelColumnPreferencesAction;\n      const {\n        isUpdatingQuoteExcelColumnPreferences\n      } = payload;\n      return state.set('isUpdatingQuoteExcelColumnPreferences', isUpdatingQuoteExcelColumnPreferences);\n    }\n    case AccountActionTypes.SET_IS_GETTING_CUSTOMER_DISCOUNT_VISIBILITY_SETTING: {\n      const {\n        payload,\n      } = action as SetIsGettingCustomerDiscountVisibilitySettingAction;\n      const {\n        isGettingCustomerVisibilitySetting\n      } = payload;\n      return state.set('isGettingCustomerVisibilitySetting', isGettingCustomerVisibilitySetting);\n    }\n    case AccountActionTypes.UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED:\n    case AccountActionTypes.GET_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetQuoteExcelColumnPreferencesSucceededAction;\n      const {\n        quoteExcelColumnPreferences\n      } = payload;\n      return state.set('quoteExcelColumnPreferences', quoteExcelColumnPreferences?.mapKeys((officeId) => Number(officeId)));\n    }\n    case AccountActionTypes.GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetCustomerDiscountVisibilitySettingSucceededAction;\n      const {\n        displayAllBrands\n      } = payload;\n      return state.set('displayAllBrands', displayAllBrands);\n    }\n    case AccountActionTypes.SET_IS_GETTING_AUTO_TRACK_PROJECT_SETTING: {\n      const {\n        payload,\n      } = action as SetIsGettingAutoTrackingProjectSettingAction;\n      const {\n        isGettingAutoTrackProjectSetting\n      } = payload;\n      return state.set('isGettingAutoTrackProjectSetting', isGettingAutoTrackProjectSetting);\n    }\n    case AccountActionTypes.GET_AUTO_TRACK_PROJECT_SETTING_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetAutoTrackingProjectSettingSucceededAction;\n      const {\n        autoTrackProjects\n      } = payload;\n      return state.set('autoTrackProjects', autoTrackProjects);\n    }\n    case AccountActionTypes.GET_MASTER_FORMAT_ROOTS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetMasterFormatRootsSucceededAction;\n      return state.set('masterFormatRoots', payload.masterFormatRoots);\n    }\n    case AccountActionTypes.DELETE_OFFICE_FROM_FIRM_BRAND_TAGS: {\n      const {\n        payload\n      } = action as DeleteOfficeFromFirmBrandTagsAction;\n      return state\n        .deleteIn(['firmBrandTags', String(payload.officeId)])\n        .deleteIn(['firmBrandTagsKeyed', String(payload.officeId)]);\n    }\n    case AccountActionTypes.GET_OFFICE_BRAND_TAGS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetOfficeBrandTagsSucceededAction;\n      return state\n        .setIn(['firmBrandTags', String(payload.officeId)], payload.officeBrandTags)\n        .setIn(['firmBrandTagsKeyed', String(payload.officeId)], payload.officeBrandTagsKeyed);\n    }\n    case AccountActionTypes.GET_FIRM_BRAND_TAGS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFirmBrandTagsSucceededAction;\n      return state.set('firmBrandTags', payload.firmBrandTags).set('firmBrandTagsKeyed', payload.firmBrandTagsKeyed);\n    }\n    case AccountActionTypes.SET_IS_GETTING_FIRM_BRAND_TAGS: {\n      const {\n        payload\n      } = action as SetIsGettingFirmBrandTagsAction;\n      return state.set('isGettingFirmBrandTags', payload);\n    }\n    case AccountActionTypes.DELETE_ACL_ROLE_SUCCEEDED: {\n      const {\n        payload\n      } = action as DeleteAclRoleSucceededAction;\n      return state.set('userById', payload.user);\n    }\n    case AccountActionTypes.SET_IS_DELETING_ACL_ROLE: {\n      const {\n        payload\n      } = action as SetIsDeletingAclRoleAction;\n      return state.set('isDeletingAclRole', payload);\n    }\n    case AccountActionTypes.ADD_ACL_ROLE_SUCCEEDED: {\n      const {\n        payload\n      } = action as AddAclRoleSucceededAction;\n      return state.set('userById', payload.user);\n    }\n    case AccountActionTypes.SET_IS_ADDING_ACL_ROLE: {\n      const {\n        payload\n      } = action as SetIsAddingAclRoleAction;\n      return state.set('isAddingAclRole', payload);\n    }\n    case AccountActionTypes.GET_ACL_ROLES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAclRolesSucceededAction;\n      return state.set('aclRoles', payload.aclRoles);\n    }\n    case AccountActionTypes.SET_IS_GETTING_ACL_ROLES: {\n      const {\n        payload\n      } = action as SetIsGettingAclRolesAction;\n      return state.set('isGettingAclRoles', payload);\n    }\n    case AccountActionTypes.GET_APPS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAppsSucceededAction;\n      return state.set('apps', payload.apps);\n    }\n    case AccountActionTypes.SET_IS_GETTING_APPS: {\n      const {\n        payload\n      } = action as SetIsGettingAppsAction;\n      return state.set('isGettingApps', payload);\n    }\n    case AccountActionTypes.SET_IS_SEARCHING_ALL_FIRMS: {\n      const {\n        payload\n      } = action as SetIsSearchingAllFirmsAction;\n      return state.set('isSearchingAllFirms', payload);\n    }\n    case AccountActionTypes.SEARCH_ALL_FIRMS_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchingAllFirmsSucceededAction;\n      return state.withMutations((ctx) => {\n        ctx\n          .set('allFirms', payload.firms)\n          .set('allFirmsCount', payload.firmsCount);\n      });\n    }\n    case AccountActionTypes.SET_IS_SEARCHING_ALL_USERS: {\n      const {\n        payload\n      } = action as SetIsSearchingAllUsersAction;\n      return state.set('isSearchingAllUsers', payload);\n    }\n    case AccountActionTypes.SEARCH_ALL_USERS_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchingAllUsersSucceededAction;\n      return state.withMutations((ctx) => {\n        ctx\n          .set('allUsers', payload.users)\n          .set('allUsersCount', payload.usersCount);\n      });\n    }\n    case AccountActionTypes.RESET_FILTERS_AND_COLUMNS: {\n      return state.set('savedFilters', INITIAL_STATE.get('savedFilters'));\n    }\n    case AccountActionTypes.UPDATE_FILTER_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateFilterByIdSucceededAction;\n      if (payload.index) {\n        return state.setIn(['savedFilters', payload.filterType, payload.index], payload.savedFilter);\n      } else {\n        const filterList = state.getIn(['savedFilters', payload.filterType], List());\n        const indexToUpdate = filterList.findIndex((filter: IMap<SavedFilter>) => filter.get('id') === payload.filterId);\n        return indexToUpdate !== -1 ? state.setIn(['savedFilters', payload.filterType, indexToUpdate], payload.savedFilter) : state;\n      }\n    }\n    case AccountActionTypes.DELETE_FILTER_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as DeleteFilterByIdSucceededAction;\n      const filterList = state.getIn(['savedFilters', payload.filterType], List());\n      const indexToDelete = filterList.findIndex((filter: IMap<SavedFilter>) => filter.get('id') === payload.id);\n      return indexToDelete !== -1 ? state.setIn(['savedFilters', payload.filterType], filterList.delete(indexToDelete)) : state;\n    }\n    case AccountActionTypes.GET_FILTERS_BY_TYPE: {\n      return state.set('gettingFilterList', true);\n    }\n    case AccountActionTypes.GET_FILTERS_BY_TYPE_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFiltersByTypeSucceededAction;\n      return state\n        .setIn(['savedFilters', payload.filterType], payload.filterList)\n        .set('gettingFilterList', false);\n    }\n    case AccountActionTypes.CREATE_FILTER_SUCCEEDED: {\n      const {\n        payload\n      } = action as CreateFilterSucceededAction;\n      return state.setIn(['savedFilters', payload.filterType], state.getIn(['savedFilters', payload.filterType], List()).push(payload.savedFilter));\n    }\n    case AccountActionTypes.SET_LOGGED_IN_USER_OFFICE_ID: {\n      const {\n        payload: officeId\n      } = action as SetLoggedInUserOfficeIdAction;\n      return state.set('loggedInUserOfficeId', officeId);\n    }\n    case AccountActionTypes.GET_R_TYPE_REGIONS_SUCCEEDED: {\n      const {\n        payload: regions\n      } = action as GetRTypeRegionsSucceededAction;\n      return state.set('regions', regions);\n    }\n    case AccountActionTypes.SET_PASSWORD_FAIL: {\n      return state\n        .set('settingPassword', false)\n        .set('setPasswordSuccess', false);\n    }\n    case AccountActionTypes.SET_PASSWORD_SUCCESS: {\n      return state\n        .set('settingPassword', false)\n        .set('setPasswordSuccess', true);\n    }\n    case AccountActionTypes.SET_PASSWORD: {\n      return state\n        .set('settingPassword', true)\n        .set('setPasswordSuccess', false);\n    }\n    case AccountActionTypes.GET_OPPORTUNITY_LABELS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetOpportunityLabelsSucceededAction;\n\n      const {\n        opportunityLabels\n      } = payload;\n\n      return state.set('opportunityLabels', opportunityLabels);\n    }\n    case AccountActionTypes.GET_OPPORTUNITY_STATUSES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetOpportunityStatusesSucceededAction;\n\n      const {\n        opportunityStatuses\n      } = payload;\n\n      return state.set('opportunityStatuses', opportunityStatuses);\n    }\n    case AccountActionTypes.GET_VISIBILITY_LIST_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetVisibilityListSucceededAction;\n\n      const {\n        visibilityListItems\n      } = payload;\n\n      return state.set('visibilityList', visibilityListItems);\n    }\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case AccountActionTypes.SELECT_USER: {\n      const {\n        payload,\n      } = action as SelectUserAction;\n\n      return state.set('selectedUserId', payload);\n    }\n    case AccountActionTypes.DELETE_CONTACT_BY_ID_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteContactsByIdSucceededAction;\n\n      const {\n        contactId\n      } = payload;\n\n      return state.deleteIn(['contacts', contactId]);\n    }\n    case AccountActionTypes.DELETE_USER_BY_ID_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteUserByIdSucceededAction;\n\n      const {\n        userId\n      } = payload;\n\n      return state.deleteIn(['users', userId]);\n    }\n    case AccountActionTypes.DELETE_OFFICE_BY_ID_SUCCEEDED: {\n      const {\n        payload,\n      } = action as DeleteOfficeByIdSucceededAction;\n\n      const {\n        officeId\n      } = payload;\n\n      return state.deleteIn(['offices', officeId]);\n    }\n    case AccountActionTypes.GET_CONTACTS: {\n      return state.set('contactsLoading', true);\n    }\n    case AccountActionTypes.GET_CONTACTS_FAIL: {\n      return state.set('contactsLoading', false);\n    }\n\n    case AccountActionTypes.SET_CONTACTS_LOADING: {\n      const {\n        payload\n      } = action as SetContactsLoadingAction;\n      return state.set('contactsLoading', payload);\n    }\n\n    case AccountActionTypes.GET_CONTACTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetContactsSucceededAction;\n\n      const {\n        contacts\n      } = payload;\n      return state.withMutations(mutableState => {\n        mutableState.set('contactsLoading', false);\n        mutableState.update(\n          'contacts',\n          (stateContacts: Map<number, IMap<Contact>>) => {\n            return contacts.reduce(\n              (acc: Map<number, IMap<Contact>>, contact: IMap<Contact>) => {\n                return acc.set(contact.get('id'), contact);\n              },\n              stateContacts\n            );\n          });\n      });\n    }\n    case AccountActionTypes.GET_COLLABORATORS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetCollaboratorsSucceededAction;\n\n      const {\n        collaborators\n      } = payload;\n      return state.set(\n        'collaborators',\n        state.get('collaborators').withMutations((stateCollaborators) => {\n          collaborators.forEach((collaborator) => {\n            stateCollaborators.set(collaborator.get('id'), collaborator);\n          });\n        }),\n      );\n    }\n    case AccountActionTypes.GET_NON_FIRM_COLLABORATORS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetNonFirmCollaboratorsSucceededAction;\n\n      const {\n        collaborators\n      } = payload;\n\n      const newCollaboratorIds = collaborators.map((collaborator) => collaborator.get('id')).toSet();\n      return state.withMutations((stateCtx) => {\n        stateCtx.set(\n          'nonFirmCollaborators',\n          newCollaboratorIds.merge(state.get('nonFirmCollaborators'))\n        );\n        stateCtx.set(\n          'collaborators',\n          state.get('collaborators').withMutations((stateCollaborators) => {\n            collaborators.forEach((collaborator) => {\n              stateCollaborators.set(collaborator.get('id'), collaborator);\n            });\n          }),\n        );\n      });\n    }\n    case AccountActionTypes.GET_FIRM_COLLABORATORS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetFirmCollaboratorsSucceededAction;\n\n      const {\n        collaborators\n      } = payload;\n\n      const newCollaboratorIds = collaborators.map((collaborator) => collaborator.get('id')).toSet();\n      return state.withMutations((stateCtx) => {\n        stateCtx.set(\n          'firmCollaborators',\n          newCollaboratorIds.merge(state.get('firmCollaborators'))\n        );\n        stateCtx.set(\n          'collaborators',\n          state.get('collaborators').withMutations((stateCollaborators) => {\n            collaborators.forEach((collaborator) => {\n              stateCollaborators.set(collaborator.get('id'), collaborator);\n            });\n          }),\n        );\n      });\n    }\n    case AccountActionTypes.SELECT_ACCOUNT_CONTACT: {\n      const {\n        payload: selectedContactId,\n      } = action as SelectContactAction;\n      return state.set('selectedContactId', selectedContactId);\n    }\n\n    case AccountActionTypes.DELETE_CONTACT: {\n      const {\n        payload: DeleteContactId,\n      } = action as DeleteContactAction;\n      return state.deleteIn(['contacts', DeleteContactId]);\n    }\n\n    case AccountActionTypes.GET_LOG_IN_AS_USERS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetLogInAsUsersSucceededAction;\n\n      const {\n        users\n      } = payload;\n\n      return state.set(\n        'logInAsUsers',\n        users.reduce(\n          (acc: Map<number, IMap<User>>, user: IMap<User>) => {\n            return acc.set(user.get('id'), user);\n          }, Map<number, IMap<User>>()\n        )\n      );\n    }\n\n    case AccountActionTypes.GET_PARTNERSHIPS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetPartnershipsSucceededAction;\n\n      const {\n        partnerships\n      } = payload;\n      return state.update(\n        'partnerships',\n        (statePartnerships) => {\n          return partnerships.reduce(\n            (acc, partnership) => {\n              return acc.set(partnership.get('id'), partnership);\n            },\n            statePartnerships\n          );\n        }\n      );\n    }\n\n    case AccountActionTypes.SET_PARTNERSHIPS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SetPartnershipsSucceededAction;\n\n      const {\n        partnershipId,\n        config\n      } = payload;\n      return state.updateIn([\n        'partnerships', partnershipId, 'config'],\n        () => {\n          return config;\n        }\n      );\n    }\n\n    case AccountActionTypes.GET_OFFICE_BY_ID:\n    case AccountActionTypes.GET_OFFICES: {\n      return state.set('officeLoading', true);\n    }\n\n    case AccountActionTypes.GET_OFFICE_BY_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetOfficeByIdSucceededAction;\n\n      const firstOffice = payload.get(0);\n\n      return firstOffice\n        ? state.updateIn(['partnershipOffice', firstOffice.get('id')], x => firstOffice).set('officeLoading', false)\n        : state.set('officeLoading', false);\n    }\n\n    case AccountActionTypes.GET_OFFICES_BY_FIRM_ID_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetOfficesByFirmIdSucceededAction;\n      const {\n        firmId,\n        officeList,\n      } = payload;\n      return state.update('firmOffices', (firmOfficeMap) => {\n        return firmOfficeMap.set(firmId, officeList.map((office) => office.get('id')).toOrderedSet());\n      });\n    }\n\n    case AccountActionTypes.GET_QUOTE_OFFICES_BY_FIRM_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetQuoteOfficesByFirmSucceededAction;\n      const {\n        officeList,\n      } = payload;\n      return state.set('quoteOfficesByFirm', officeList);\n    }\n\n    case AccountActionTypes.GET_OPPORTUNITY_GROUPS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetOpportunityGroupsActionSucceeded;\n\n      // return state.updateIn(['opportunityGroups'], (stateOpportunityGroups: any) => {\n      //   return payload.reduce(\n      //     (acc: Map<number, any>, opportunityGroup: any) => {\n      //       return acc.set(opportunityGroup.get('uuid'), opportunityGroup);\n      //     },\n      //     stateOpportunityGroups\n      //   );\n      // });\n\n      return state.set(PreferenceType.OpportunityGroups, payload);\n    }\n\n    case AccountActionTypes.SET_LOG_IN_AS_USERS_IS_SEARCHING: {\n      const {\n        payload\n      } = action as SetLogInAsUsersIsSearchingAction;\n      return state.set('logInAsUsersIsSearching', payload);\n    }\n\n    case AccountActionTypes.SET_LOG_IN_AS_USERS: {\n      const {\n        payload\n      } = action as SetLogInAsUsersAction;\n      return state.set('logInAsUsers', payload);\n    }\n\n    // case AccountActionTypes.SEARCH_USERS_BY_OFFICE_ID:\n    case AccountActionTypes.SEARCH_USERS_QUICK:\n    case AccountActionTypes.SEARCH_USERS: {\n      return state.setIn(['searchedUsers', 'isSearching'], true);\n    }\n\n    case AccountActionTypes.UPDATE_USER_BY_ID: {\n      return state\n        .set('usersLoading', true)\n        .set('userLoading', true)\n        .set('userUpdateSucceeded', false);\n    }\n    case AccountActionTypes.UPDATE_USER_BY_ID_SUCCEEDED: {\n      return state\n        .set('userLoading', false)\n        .set('userUpdateSucceeded', true);\n    }\n    case AccountActionTypes.UPDATE_USER_BY_ID_FAILED: {\n      return state\n        .set('userLoading', false)\n        .set('userUpdateSucceeded', false);\n    }\n    case AccountActionTypes.GET_USERS_SUCCEEDED: {\n      const { payload } = action as GetUsersSucceededAction;\n\n      return state.update(\n        'users',\n        (stateUsers: Map<number, IMap<User>>) => {\n          return payload.reduce(\n            (acc: Map<number, IMap<User>>, user: IMap<User>) => {\n              return acc.set(user.get('id'), user);\n            },\n            stateUsers\n          );\n        }\n      ).set('usersLoading', false);\n    }\n\n    case AccountActionTypes.CLEAR_USERS: {\n      return state.set('users', Map());\n    }\n\n    case AccountActionTypes.SEARCH_USERS_FINISHED: {\n      const { payload } = action as SearchUsersFinishedAction;\n\n      return state.withMutations(ctx => {\n        ctx.setIn(['searchedUsers', 'result'], payload);\n        ctx.setIn(['searchedUsers', 'isSearching'], false);\n      });\n    }\n\n    case AccountActionTypes.SEARCH_USERS_BY_OFFICE_ID_FINISHED: {\n      const { payload } = action as SearchUsersByOfficeIdFinishedAction;\n\n      const {\n        officeId,\n        userIdList,\n      } = payload;\n\n      return state.withMutations(ctx => {\n        ctx.setIn(['usersPerOffice', officeId], userIdList);\n      });\n    }\n\n    case AccountActionTypes.SEARCH_USERS_BY_USER_ID_FINISHED: {\n      const { payload } = action as SearchUsersbyUserIdFinishedAction;\n      return state.set('usersTrackingProject', payload);\n    }\n\n    case AccountActionTypes.GET_NOTE_CREATORS_SUCCEEDED: {\n      const { payload } = action as GetNoteCreatorsSucceededAction;\n      return state.set('noteCreators', payload);\n    }\n\n    case AccountActionTypes.GET_USER_BY_ID: {\n      return state.set('usersLoading', true);\n    }\n\n    case AccountActionTypes.GET_USER_BY_ID_SUCCEEDED: {\n      const { payload } = action as GetUserByIdSucceededAction;\n\n      return state.withMutations((immutableState) => {\n        immutableState.set('userById', payload);\n        immutableState.set('usersLoading', false);\n      });\n    }\n\n    case AccountActionTypes.GET_USER_BY_ID_MULTI_SUCCEEDED: {\n      const { payload } = action as GetUserByIdMultiSucceededAction;\n\n      return state.setIn(['usersById', payload.get('id')], payload).set('usersLoading', false);\n    }\n\n    case AccountActionTypes.GET_LOGGED_IN_USER_DATA_SUCCEEDED: {\n      const { payload } = action as GetLoggedInUserDataSucceededAction;\n\n      return state.withMutations((immutableState) => {\n        immutableState.set('loggedInUserData', payload.user);\n      });\n    }\n\n    case AccountActionTypes.IS_FETCHING_FIRM_BY_ID: {\n      const { payload } = action as IsFetchingFirmByIdAction;\n\n      return state.set('isFetchingFirmById', payload);\n    }\n\n    case AccountActionTypes.GET_FIRM_BY_ID_SUCCEEDED: {\n      const { payload } = action as GetFirmByIdSucceededAction;\n\n      return state.set('selectedFirm', payload);\n    }\n\n    case AccountActionTypes.GET_USER_FIRM_SUCCEEDED: {\n      const { payload } = action as GetUserFirmSucceededAction;\n\n      return state.set('userFirm', payload);\n    }\n\n    case AccountActionTypes.GET_COLLABORATORS_OFFICE_SUCCEEDED: {\n      const { payload } = action as GetCollaboratorsOfficeSucceededAction;\n\n      return state.set('collaboratorsOffice', payload);\n    }\n\n    case AccountActionTypes.GET_FIRMS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFirmsSucceededAction;\n\n      return state.update(\n        'firms',\n        (stateFirms: Map<number, IMap<Firm>>) => {\n          return payload.reduce(\n            (acc, firm) => {\n              return acc.set(firm.get('id'), firm);\n            },\n            stateFirms\n          );\n        }\n      );\n    }\n    case AccountActionTypes.SET_SELECTED_FIRM_ID: {\n      const {\n        payload\n      } = action as SetSelectedFirmId;\n\n      const {\n        firmId\n      } = payload;\n      return state.set('selectedFirmId', firmId);\n    }\n\n    case AccountActionTypes.GET_OFFICES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetOfficesSucceededAction;\n      return state.withMutations((mutableState) => {\n        mutableState.set('officeLoading', false);\n        mutableState.update(\n          'offices',\n          (stateOffices: Map<number, IMap<Office>>) => {\n            return payload.reduce(\n              (acc: Map<number, IMap<Office>>, office: IMap<Office>) => {\n                return acc.set(office.get('id'), office);\n              },\n              stateOffices\n            );\n          }\n        );\n      });\n    }\n    case AccountActionTypes.SELECT_OFFICE: {\n      const {\n        payload\n      } = action as SelectOfficeAction;\n\n      const {\n        officeId\n      } = payload;\n      return state.set('selectedOfficeId', officeId);\n    }\n\n    case AccountActionTypes.SELECT_TEAM_ORGANIZATION_FIRM: {\n      const {\n        payload\n      } = action as SelectTeamOrganizationFirmAction;\n\n      const {\n        firmId\n      } = payload;\n      return state.setIn(['teamOrganization', 'selectedFirmId'], firmId);\n    }\n\n    case AccountActionTypes.SELECT_TEAM_ORGANIZATION_OFFICE: {\n      const {\n        payload\n      } = action as SelectTeamOrganizationOfficeAction;\n\n      const {\n        officeId\n      } = payload;\n      return state.setIn(['teamOrganization', 'selectedOfficeId'], officeId);\n    }\n\n    case AccountActionTypes.SELECT_TEAM_ORGANIZATION_DRAWER_OFFICE: {\n      const {\n        payload\n      } = action as SelectTeamOrganizationDrawerOfficeAction;\n\n      const {\n        officeId\n      } = payload;\n      return state.setIn(['teamOrganization', 'drawerOfficeId'], officeId);\n    }\n\n    case AccountActionTypes.SELECT_TEAM_ORGANIZATION_USER: {\n      const {\n        payload\n      } = action as SelectTeamOrganizationUserAction;\n\n      const {\n        userId\n      } = payload;\n      return state.setIn(['teamOrganization', 'selectedUserId'], userId);\n    }\n\n    case AccountActionTypes.GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetFirmsForSuperFirmFirmAdminSucceededAction;\n\n      const {\n        firmList\n      } = payload;\n      return state.setIn(['teamOrganization', 'superFirmAndChildFirms'], firmList);\n    }\n\n    case AccountActionTypes.GET_PREFERENCES_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetPreferencesSucceededAction;\n      const {\n        preference,\n        preferences,\n      } = payload;\n\n      if (preference != null) {\n        return state.withMutations((ctx) => {\n          return ctx.setIn(['preferences', preference], preferences.get(preference));\n        });\n      }\n      return state.set('preferences', state.get('preferences').merge(preferences));\n    }\n\n    case AccountActionTypes.GET_MANUFACTURERS_SUCCEEDED: {\n      const {\n        payload: { manufacturerList }\n      } = action as GetManufacturersSucceededAction;\n\n      return state.set('manufacturersList', manufacturerList);\n    }\n\n    case AccountActionTypes.GET_CATEGORIES_SUCCEEDED: {\n      const {\n        payload: { categoryList }\n      } = action as GetCategoriesSucceededAction;\n\n      return state.set('categoriesList', categoryList);\n    }\n\n    case AccountActionTypes.SET_SELECTED_CATEGORY_ID: {\n      const {\n        payload: { selectedCategoryId }\n      } = action as SetSelectedCategoryIdAction;\n\n      return state.set('selectedCategoryId', selectedCategoryId);\n    }\n\n    case AccountActionTypes.SET_SELECTED_MANUFACTURER_ID: {\n      const {\n        payload: { selectedManufacturerId }\n      } = action as SetSelectedManufacturerIdAction;\n\n      return state.set('selectedManufacturerId', selectedManufacturerId);\n    }\n\n    case AccountActionTypes.GET_DISCOUNTS_FOR_CUSTOMER_ID: {\n      return state.set('customerDiscounts', List());\n    }\n\n    case AccountActionTypes.GET_DISCOUNTS_FOR_CUSTOMER_ID_SUCCEEDED: {\n      const {\n        payload: { discounts }\n      } = action as GetDiscountsForCustomerIdSucceeded;\n\n      return state.set('customerDiscounts', discounts);\n    }\n\n    case AccountActionTypes.GET_DISCOUNTS_FOR_OFFICE_ID_SUCCEEDED: {\n      const {\n        payload: { discounts }\n      } = action as GetDiscountsForCustomerIdSucceeded;\n\n      return state.set('officeDiscounts', discounts);\n    }\n\n    case AccountActionTypes.RESET_PREFERENCE_SUCCEEDED: {\n      const {\n        payload\n      } = action as ResetPreferenceSucceededAction;\n\n      const projectPhases: List<IMap<ProjectPhase>> = payload;\n\n      return state.setIn(['preferences', 'projectPhase'], projectPhases);\n    }\n\n    case AccountActionTypes.SEARCH_CONTACTS_SUCCEEDED: {\n      const {\n        payload,\n      } = action as SearchContactsSucceededAction;\n      const {\n        contacts,\n        count,\n        hasNextPage,\n      } = payload;\n\n      return state.withMutations(stateWithMutations => {\n        stateWithMutations\n          .set('searchedContacts', contacts)\n          .set('totalSearchedContactsCount', count)\n          .set('searchedContactsHasNextPage', hasNextPage);\n      });\n    }\n\n    case AccountActionTypes.SEARCH_CONTACTS_BY_SEARCH_TERM_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchContactsBySearchTermSucceededAction;\n\n      const { contacts } = payload;\n\n      return state.withMutations(stateWithMutations => {\n        stateWithMutations.set('searchedContactsBySearchTerm', contacts);\n      });\n    }\n\n    case AccountActionTypes.RESET_SEARCH_CONTACTS_BY_SEARCH_TERM: {\n      return state.set('searchedContactsBySearchTerm', List());\n    }\n\n    case AccountActionTypes.SEARCH_CONTACTS_FIND_INDEX_SUCCEEDED: {\n      const {\n        payload\n      } = action as SearchContactsFindIndexSucceededAction;\n\n      const searchedContactsFindIndex = payload;\n\n      return state.set('searchedContactsFindIndex', searchedContactsFindIndex);\n    }\n\n    case AccountActionTypes.SEARCH_CATEGORIES: {\n      return state.setIn(['categories', 'isLoading'], false);\n    }\n    case AccountActionTypes.SEARCH_PRODUCT_CATEGORIES_SUCCESS: {\n      const {\n        payload\n      } = action as SearchProductCategoriesSuccessAction;\n      return state.setIn(['categories', 'data'], payload.categories)\n        .setIn(['categories', 'isLoading'], false);\n    }\n    case AccountActionTypes.SEARCH_DIVISIONS: {\n      return state.setIn(['divisions', 'isLoading'], true);\n    }\n    case AccountActionTypes.SEARCH_DIVISIONS_SUCCESS: {\n      const {\n        payload\n      } = action as SearchDivisionsSuccessAction;\n      return state.setIn(['divisions', 'data'], payload.divisions)\n        .setIn(['divisions', 'isLoading'], false);\n    }\n    case AccountActionTypes.SEARCH_MANUFACTURER: {\n      return state.setIn(['manufacturers', 'isLoading'], true);\n    }\n    case AccountActionTypes.SEARCH_MANUFACTURERS_SUCCESS: {\n      const {\n        payload\n      } = action as SearchManufacturersSuccessAction;\n      return state.setIn(['manufacturers', 'data'], payload.manufacturers)\n        .setIn(['manufacturers', 'isLoading'], false);\n    }\n    case AccountActionTypes.GET_USER_PREFERENCE_OVER_TAKE_OFF:\n    case AccountActionTypes.UPDATE_USER_PREFERENCE: {\n      return state.setIn(['userPreference', 'isLoading'], true);\n    }\n    case AccountActionTypes.GET_USER_PREFERENCE_OVER_TAKE_OFF_SUCCESS: {\n      const {\n        payload\n      } = action as GetUserPreferenceOverTakeOffSuccess;\n      return state.setIn(['userPreference', 'isLoading'], false)\n        .setIn(['userPreference', 'data'], payload);\n    }\n    case AccountActionTypes.UPDATE_USER_PREFERENCE_SUCCESS: {\n      const {\n        payload\n      } = action as UpdateUserPreferenceActionSuccess;\n      return state.setIn(['userPreference', 'isLoading'], false)\n        .setIn(['userPreference', 'data'], payload);\n    }\n    case AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID_LOADING: {\n      const {\n        payload\n      } = action as SetUpdateFirmByIdLoadingAction;\n      return state.setIn(['firms', 'isLoading'], payload);\n    }\n    case AccountActionTypes.PATCH_UPDATE_FIRM_BY_ID_SUCCESS: {\n      const {\n        payload\n      } = action as PatchUpdateFirmByIdSucceededAction;\n      return state.set('selectedFirm', payload);\n    }\n    case AccountActionTypes.GET_BRAND_REP: {\n      return state.set('isLoadingBrandRep', true);\n    }\n    case AccountActionTypes.GET_BRAND_REP_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetBrandRepSucceededAction;\n      const getCategoryByManufacturer = (brandRep) => {\n        return brandRep.reduce((acc, br) => {\n          const _manufacturerId = br.getIn(['manufacturer', 'id']);\n          const _categoryId = br.getIn(['category', 'id']);\n          if (_manufacturerId === null || _manufacturerId === undefined) {\n            return acc;\n          }\n          if (acc[_manufacturerId] === undefined && _categoryId === undefined) {\n            acc[_manufacturerId] = null;\n            return acc;\n          }\n          if (acc[_manufacturerId] === undefined && _categoryId !== undefined) {\n            acc[_manufacturerId] = [_categoryId];\n            return acc;\n          }\n          if (acc[_manufacturerId] === null) {\n            return acc;\n          }\n          if (Array.isArray(acc[_manufacturerId]) && _categoryId === undefined) {\n            acc[_manufacturerId] = null;\n            return acc;\n          }\n          if (Array.isArray(acc[_manufacturerId]) && _categoryId !== undefined) {\n            acc[_manufacturerId].push(_categoryId);\n            return acc;\n          }\n          return acc;\n        }, {});\n      };\n      const getManufacturerByCategory = (brandRep) => {\n        return brandRep.reduce((acc, br) => {\n          const _manufacturerId = br.getIn(['manufacturer', 'id']);\n          const _categoryId = br.getIn(['category', 'id']);\n          if (_categoryId === null || _categoryId === undefined) {\n            return acc;\n          }\n          if (acc[_categoryId] === undefined && _manufacturerId === undefined) {\n            acc[_categoryId] = null;\n            return acc;\n          }\n          if (acc[_categoryId] === undefined && _manufacturerId !== undefined) {\n            acc[_categoryId] = [_manufacturerId];\n            return acc;\n          }\n          if (acc[_categoryId] === null) {\n            return acc;\n          }\n          if (Array.isArray(acc[_categoryId]) && _manufacturerId === undefined) {\n            acc[_categoryId] = null;\n            return acc;\n          }\n          if (Array.isArray(acc[_categoryId]) && _manufacturerId !== undefined) {\n            acc[_categoryId].push(_manufacturerId);\n            return acc;\n          }\n          return acc;\n        }, {});\n      };\n      return state.set('brandRep', payload.brandRep)\n        .set('isLoadingBrandRep', false)\n        .set('brandRepCategoryByManufacturer', getCategoryByManufacturer(payload.brandRep))\n        .set('brandRepManufacturerByCategory', getManufacturerByCategory(payload.brandRep))\n        ;\n    }\n    case AccountActionTypes.GET_BRAND_REP_FAILED: {\n      return state.set('isLoadingBrandRep', false);\n    }\n    case AccountActionTypes.GET_MANUFACTURER_PREFERENCES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetManufacturerPreferenceSucceededAction;\n      return state.set('manufacturerPreferences', payload.manufacturerPreferences);\n    }\n    case AccountActionTypes.CREATE_MANUFACTURER_PREFERENCE_SUCCEEDED: {\n      const {\n        payload\n      } = action as CreateManufacturerPreferenceSucceededAction;\n      return state.set('manufacturerPreferences', payload.manufacturerPreferences);\n    }\n    case AccountActionTypes.UPDATE_MANUFACTURER_PREFERENCE_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateManufacturerPreferenceSucceededAction;\n      const { manufacturerPreference } = payload;\n      let manufacturerPreferences = state.get('manufacturerPreferences');\n      manufacturerPreferences = manufacturerPreferences.set(\n        manufacturerPreferences.findIndex((item => item.get('id') === manufacturerPreference.get('id'))), // index\n        manufacturerPreference\n      );\n      return state.set('manufacturerPreferences', manufacturerPreferences);\n    }\n    case AccountActionTypes.DELETE_MANUFACTURER_PREFERENCE_SUCCEEDED: {\n      const {\n        payload\n      } = action as DeleteManufacturerPreferenceSucceededAction;\n      const { preferenceId } = payload;\n      let manufacturerPreferences = state.get('manufacturerPreferences');\n      manufacturerPreferences = manufacturerPreferences.delete(\n        manufacturerPreferences.findIndex((item => item.get('id') === preferenceId)) // index\n      );\n      return state.set('manufacturerPreferences', manufacturerPreferences);\n    }\n    case AccountActionTypes.GET_MANUFACTURER_RANKINGS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetManufacturerRankingsSucceededAction;\n      return state.set('manufacturerRankings', payload.rankings);\n    }\n    case AccountActionTypes.CREATE_MANUFACTURER_RANKING_SUCCEEDED: {\n      const {\n        payload\n      } = action as CreateManufacturerRankingSucceededAction;\n      return state.set('manufacturerRankings', payload.rankings);\n    }\n    case AccountActionTypes.UPDATE_MANUFACTURER_RANKING_SUCCEEDED: {\n      const {\n        payload\n      } = action as UpdateManufacturerRankingSucceededAction;\n      return state.set('manufacturerRankings', payload.rankings);\n    }\n    case AccountActionTypes.DELETE_MANUFACTURER_RANKING_SUCCEEDED: {\n      const {\n        payload\n      } = action as DeleteManufacturerRankingSucceededAction;\n      return state.set('manufacturerRankings', payload.rankings);\n    }\n    case AccountActionTypes.SET_SEARCH_MODE_SUCCEED:\n    case AccountActionTypes.GET_SEARCH_MODE_SUCCEED: {\n      const {\n        payload\n      } = action as GetSearchModeSucceed;\n      return state.set('searchMode', payload.searchMode);\n    }\n    case AccountActionTypes.SET_IS_SEARCHING_FOLDER_TEMPLATES: {\n      const {\n        payload\n      } = action as SetIsSearchingFolderTemplatesAction;\n      return state.set('isSearchingFolderTemplates', payload);\n    }\n    case AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATES_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAttachmentFolderTemplatesSucceededAction;\n      return state.set('attachmentFolderTemplates', payload.templates);\n    }\n    case AccountActionTypes.GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetAttachmentFolderTemplateWithFoldersSucceededAction;\n      return state.set('currentAttachmentFolderTemplateFolders', payload.templateFolders);\n    }\n    case AccountActionTypes.SET_SELECTED_ATTACHMENT_FOLDER_TEMPLATE_ID: {\n      const {\n        payload\n      } = action as SetSelectedAttachmentFolderTemplateIdAction;\n      return state.set('currentAttachmentFolderTemplateId', payload);\n    }\n    case AccountActionTypes.GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE_SUCCEEDED: {\n      const {\n        payload\n      } = action as GetDefaultAttachmentFolderTemplateSucceededAction;\n      const { visibilityLevel, defaultTemplate } = payload;\n      return state.setIn(['defaultAttachmentFolderTemplate', visibilityLevel], defaultTemplate);\n    }\n    case AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL: {\n      return state.setIn(['defaultCustomEmail', 'isLoading'], true);\n    }\n    case AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL_SUCCEED: {\n      const {\n        payload\n      } = action as GetDefaultCustomEmailSucceed;\n      return state.withMutations((ctx) => {\n        ctx.setIn(['defaultCustomEmail', 'isLoading'], false);\n        ctx.setIn(['defaultCustomEmail', 'data'], payload);\n        ctx.setIn(['defaultCustomEmail', 'error'], null);\n      });\n    }\n    case AccountActionTypes.GET_DEFAULT_CUSTOM_EMAIL_FAILED: {\n      const {\n        payload\n      } = action as GetDefaultCustomEmailFailed;\n      return state.withMutations((ctx) => {\n        ctx.setIn(['defaultCustomEmail', 'isLoading'], false);\n        ctx.setIn(['defaultCustomEmail', 'data'], null);\n        ctx.setIn(['defaultCustomEmail', 'error'], payload);\n      });\n    }\n    case AccountActionTypes.SET_UPLOAD_USERS_PROGRESS: {\n      const {\n        payload\n      } = action as SetUploadUsersProgress;\n\n      return state.set('uploadUsersProgress', fromJS(payload));\n    }\n    case AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING: {\n      const {\n        payload,\n      } = action as SetIsGettingVendorQuotationAutoTakeoffSettingAction;\n      const {\n        isGettingVendorQuotationAutoTakeoffSetting\n      } = payload;\n      return state.set('isGettingVendorQuotationAutoTakeoffSetting', isGettingVendorQuotationAutoTakeoffSetting);\n    }\n    case AccountActionTypes.GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING_SUCCEEDED: {\n      const {\n        payload,\n      } = action as GetVendorQuotationAutoTakeoffSettingSucceededAction;\n      const {\n        vendorQuotationAutoTakeoff\n      } = payload;\n      return state.set('vendorQuotationAutoTakeoff', vendorQuotationAutoTakeoff);\n    }\n    case AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_NOTIFICATIONS: {\n      const {\n        payload,\n      } = action as SetIsGettingVendorQuotationNotificationsAction;\n      const {\n        isGettingVendorQuotationNotifications\n      } = payload;\n      return state.set('isGettingVendorQuotationNotifications', isGettingVendorQuotationNotifications);\n    }\n    case AccountActionTypes.GET_VENDOR_QUOTATION_NOTIFICATIONS_SUCCEEDED: {\n      const {\n        payload: { vendorQuotationNotifications }\n      } = action as GetVendorQuotationNotificationsSucceededAction;\n\n      return state.set('vendorQuotationNotifications', vendorQuotationNotifications);\n    }\n    case AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_MY_LOGO: {\n      const {\n        payload,\n      } = action as SetIsGettingVendorQuotationMyLogoAction;\n      const {\n        isGettingVendorQuotationMyLogo\n      } = payload;\n      return state.set('isGettingVendorQuotationMyLogo', isGettingVendorQuotationMyLogo);\n    }\n    case AccountActionTypes.GET_VENDOR_QUOTATION_MY_LOGO_SUCCEEDED: {\n      const {\n        payload: { vendorQuotationMyLogo }\n      } = action as GetVendorQuotationMyLogoSucceededAction;\n\n      return state.set('vendorQuotationMyLogo', vendorQuotationMyLogo);\n    }\n    case AccountActionTypes.SET_IS_GETTING_VENDOR_QUOTATION_BID_EMAIL: {\n      const {\n        payload,\n      } = action as SetIsGettingVendorQuotationBidEmailAction;\n      const {\n        isGettingVendorQuotationBidEmail\n      } = payload;\n      return state.set('isGettingVendorQuotationBidEmail', isGettingVendorQuotationBidEmail);\n    }\n    case AccountActionTypes.GET_VENDOR_QUOTATION_BID_EMAIL_SUCCEEDED: {\n      const {\n        payload: { vendorQuotationBidEmail }\n      } = action as GetVendorQuotationBidEmailSucceededAction;\n\n      return state.set('vendorQuotationBidEmail', vendorQuotationBidEmail);\n    }\n    case AccountActionTypes.SET_IS_SEARCHING_MANUFACTURER_DISCOUNTS: {\n      const {\n        payload,\n      } = action as SetIsSearchingManufacturerDiscountsAction;\n      const {\n        isSearchingManufacturerDiscounts\n      } = payload;\n      return state.set('isSearchingManufacturerDiscounts', isSearchingManufacturerDiscounts);\n    }\n    case AccountActionTypes.SEARCH_MANUFACTURER_DISCOUNTS_SUCCEEDED: {\n      const {\n        payload: { manufacturerDiscounts }\n      } = action as SearchManufacturerDiscountsSucceededAction;\n\n      return state.withMutations((ctx) => {\n        ctx\n          .set('hasAlreadyFetchedManufacturerDiscounts', true)\n          .set('manufacturerDiscounts', manufacturerDiscounts)\n          .set('manufacturerDiscountsIndexMap', manufacturerDiscounts?.reduce((acc, discount, index) => {\n            return acc.set(discount.getIn(['manufacturer', 'id']), index);\n          }, Map<number, number>()));\n      });\n    }\n    case AccountActionTypes.GET_FIRM_EMAIL_SETTING_SUCCEEDED: {\n      const { payload } = action as GetFirmEmailSettingSucceededAction;\n      return state.set('firmEmailSetting', fromJS(payload));\n    }\n    default: {\n      return state;\n    }\n  }\n};\n\nexport default reducer;\n","/*\n * AccountModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IAccountReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\n// import {\n//   safeStringify,\n// } from 'ats-utils/src';\n\ninterface IAccountModuleComponentProps {\n\n}\n\ninterface IAccountModuleProps extends IAccountModuleComponentProps {\n  reducerState: IMapNonRecursive<IAccountReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype AccountModuleProps = IAccountModuleProps;\n\nclass AccountModule extends React.Component<AccountModuleProps> {\n\n  public render() {\n    const {\n      // reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            >\n              {/* {safeStringify(reducerState && reducerState.toJS())} */}\n            </Hide>;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IAccountModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IAccountModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(AccountModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './AccountModule';\nexport default Module;","import {\n  fromJS,\n  Map,\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { AtsActionTypes } from '../AtsModule/actions';\nimport {\n  PrintActionTypes,\n  PrintSpecCompletedAction,\n  ICoverImage,\n  GetCoverImagesSucceededAction,\n  GetPrintHistorySuccessAction,\n  IPrintObj,\n  GenericSpecPrintErrorAction,\n  SetPrintTypeAction,\n  ShouldDisablePrintContinueAction,\n  BulkDownloadAction, PrintJobFailed, BulkDownloadSucceed, PrintJobSucceed\n} from './actions';\nimport {\n  BOBRICK_CSI_EVOLVE_FILE_ID,\n  BOBRICK_CSI_PRIVADA_FILE_ID, BOBRICK_CSI_TRAD_FILE_ID, BOBRICK_PLANNIN_GUIDE_FILE_ID,\n  SPEC_PRINT_TYPE\n} from '../../constants';\nimport {DownloadFormat, DownloadStatus} from '../../components/DownloadView/types';\n\nexport interface IBulkDownloadStatus {\n  zipFileId: string;\n  isMaster: boolean;\n  jobs: List<IMap<{\n    type: DownloadFormat;\n    status: DownloadStatus;\n    name: string;\n    specId?: number;\n    id: string;\n    fileId: string;\n  }>>;\n}\nexport interface IPrintReducerState {\n  printFailToggle: boolean;\n  coverImages: Map<SPEC_PRINT_TYPE, List<IMap<ICoverImage>>>;\n  printHistoryLoading: boolean;\n  downloadHistory: List<IMap<IPrintObj>>;\n  specPrintError: Map<string, any>;\n  selectedPrintType: SPEC_PRINT_TYPE;\n  shouldDisableContinueForPrint: boolean;\n  bulkDownloadStatus: Map<string, IBulkDownloadStatus>;\n}\n\nconst INITIAL_STATE = fromJS({\n  printFailToggle: false, // value is meaning alone, but it helps to toggle fail print state base on prev and current value\n  coverImages: {},\n  printHistoryLoading: false,\n  downloadHistory: [],\n  specPrintError: Map(),\n  selectedPrintType: '',\n  shouldDisableContinueForPrint: false,\n  bulkDownloadStatus: Map(),\n});\n\nexport const reducer = (state: IMapNonRecursive<IPrintReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case AtsActionTypes.USER_LOGGED_OUT: {\n      return INITIAL_STATE;\n    }\n    case PrintActionTypes.SHOULD_DISABLE_PRINT_CONTINUE: {\n      const {\n        payload\n      } = action as ShouldDisablePrintContinueAction;\n      return state.set('shouldDisableContinueForPrint', payload);\n    }\n    case PrintActionTypes.PRINT_FAIL_TOGGLE: {\n      const currentValue = state.get('printFailToggle');\n      return state.set('printFailToggle', !currentValue);\n    }\n    case PrintActionTypes.GET_COVER_IMAGES_SUCCEEDED: {\n      const {\n        payload: {\n          data,\n          type,\n        },\n      } = action as GetCoverImagesSucceededAction;\n      return state.setIn(['coverImages', type], data);\n    }\n    case PrintActionTypes.GET_PRINT_HISTORY_BY_FORMAT: {\n      return state.set('printHistoryLoading', true);\n    }\n    case PrintActionTypes.GET_PRINT_HISTORY_SUCCESS: {\n      const {\n        payload: downloadHistory\n      } = action as GetPrintHistorySuccessAction;\n      return state.withMutations(mutable => {\n        mutable.set('printHistoryLoading', false);\n        mutable.set('downloadHistory', downloadHistory);\n      });\n    }\n    case PrintActionTypes.GET_PRINT_HISTORY_FAIL: {\n      return state.set('printHistoryLoading', false);\n    }\n    case PrintActionTypes.GENERIC_SPEC_PRINT_ERROR: {\n      const {\n        payload\n      } = action as GenericSpecPrintErrorAction;\n      const immutableErr = fromJS(payload);\n      return state.set('specPrintError', immutableErr);\n    }\n    case PrintActionTypes.GENERIC_SPEC_PRINT_RESET_ERROR: {\n      return state.set('specPrintError', Map());\n    }\n    case PrintActionTypes.SET_PRINT_TYPE: {\n      const {\n        payload\n      } = action as SetPrintTypeAction;\n      return state.set('selectedPrintType', payload);\n    }\n    case PrintActionTypes.BULK_DOWNLOAD: {\n      const {\n        payload,\n      } = action as BulkDownloadAction;\n      const { formatDetails, projectLevelFormatDetails, hash, specs, bobrickCSIPrivada, bobrickCSIEvolve, bobrickCSITrad, bobrickPlanningGuide, isMaster } = payload;\n      const jobs = [];\n      if (bobrickCSIPrivada) {\n        jobs.push({\n          type: SPEC_PRINT_TYPE.bobrickCSIPrivada,\n          status: 'succeed',\n          name: 'Bobrick',\n          specId: -1,\n          id: `-1spec`,\n          fileId: BOBRICK_CSI_PRIVADA_FILE_ID\n        });\n      }\n      if (bobrickCSIEvolve) {\n        jobs.push({\n          type: SPEC_PRINT_TYPE.bobrickCSIEvolve,\n          status: 'succeed',\n          name: 'Bobrick',\n          specId: -1,\n          id: `-1spec`,\n          fileId: BOBRICK_CSI_EVOLVE_FILE_ID\n        });\n      }\n      if (bobrickCSITrad) {\n        jobs.push({\n          type: SPEC_PRINT_TYPE.bobrickCSITrad,\n          status: 'succeed',\n          name: 'Bobrick',\n          specId: -1,\n          id: `-1spec`,\n          fileId: BOBRICK_CSI_TRAD_FILE_ID\n        });\n      }\n      if (bobrickPlanningGuide) {\n        jobs.push({\n          type: SPEC_PRINT_TYPE.bobrickPlanningGuide,\n          status: 'succeed',\n          name: 'Bobrick',\n          specId: -1,\n          id: `-1spec`,\n          fileId: BOBRICK_PLANNIN_GUIDE_FILE_ID\n        });\n      }\n      for (const spec of specs) {\n        for (const { key, data } of formatDetails) {\n          jobs.push({\n            type: key,\n            status: 'loading',\n            name: spec.name,\n            specId: spec.specId,\n            id: `${spec.specId}spec`,\n            isMaster: spec.isMaster,\n          });\n        }\n      }\n      if (projectLevelFormatDetails && projectLevelFormatDetails.length > 0) {\n        for (const { key, projectTitle, projectId } of projectLevelFormatDetails) {\n          jobs.push({\n            type: key,\n            status: 'loading',\n            name: projectTitle,\n            projectId,\n            id: `${projectId}project`,\n            isMaster: false,\n          });\n        }\n      }\n      return state.setIn(['bulkDownloadStatus', hash], fromJS({\n        zipFileId: null,\n        jobs,\n        isMaster\n      }));\n    }\n    case PrintActionTypes.PRINT_JOB_FAILED: {\n      const {\n        payload,\n      } = action as PrintJobFailed;\n      const { hash, type, id } = payload;\n      const bulkDownloadJobs = state.getIn(['bulkDownloadStatus', hash, 'jobs']);\n      const jobIndex = bulkDownloadJobs.findIndex((childJob) => childJob.get('id') === id && childJob.get('type') === type);\n      if (jobIndex < 0) {\n        // a negative index would wrap around and overwrite the last job\n        return state;\n      }\n      return state.setIn(['bulkDownloadStatus', hash, 'jobs', jobIndex, 'status'], 'failed');\n    }\n    case PrintActionTypes.PRINT_JOB_SUCCEED: {\n      const {\n        payload,\n      } = action as PrintJobSucceed;\n      const { hash, type, id, fileId } = payload;\n      const bulkDownloadJobs = state.getIn(['bulkDownloadStatus', hash, 'jobs']);\n      const jobIndex = bulkDownloadJobs.findIndex((childJob) => childJob.get('id') === id && childJob.get('type') === type);\n      if (jobIndex < 0) {\n        // a negative index would wrap around and overwrite the last job\n        return state;\n      }\n      return state.withMutations(ctx => {\n        ctx.setIn(['bulkDownloadStatus', hash, 'jobs', jobIndex, 'status'], 'succeed');\n        ctx.setIn(['bulkDownloadStatus', hash, 'jobs', jobIndex, 'fileId'], fileId);\n      });\n    }\n    case PrintActionTypes.BULK_DOWNLOAD_SUCCEED: {\n      const { payload } = action as BulkDownloadSucceed;\n      const { zipFileId, hash } = payload;\n      return state.setIn(['bulkDownloadStatus', hash, 'zipFileId'], zipFileId);\n    }\n    case PrintActionTypes.RESET_BULK_DOWNLOAD_STATUS: {\n      return state.set('bulkDownloadStatus', INITIAL_STATE.get('bulkDownloadStatus'));\n    }\n    default:\n      return state;\n  }\n};\n\nexport default reducer;","/*\n * PrintModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  selectReducerState,\n} from './selectors';\nimport {\n  DEFAULT_MOUNT_POINT,\n} from './constants';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose\n} from 'redux';\nimport reducer, { IPrintReducerState } from './reducer';\nimport saga from './saga';\nimport {\n  injectReducer,\n  injectSaga,\n} from '../../utils';\n\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\nimport {\n  safeStringify,\n} from 'ats-utils/src';\n\ninterface IPrintModuleComponentProps {\n\n}\n\ninterface IPrintModuleProps extends IPrintModuleComponentProps {\n  reducerState: IMapNonRecursive<IPrintReducerState>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype PrintModuleProps = IPrintModuleProps;\n\nclass PrintModule extends React.Component<PrintModuleProps> {\n\n  public render() {\n    const {\n      reducerState,\n    } = this.props;\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={\n            () => {\n              return <Hide\n                show={true}\n                title={'debug'}\n              >\n                {safeStringify(reducerState && reducerState.toJS())}\n              </Hide>;\n            }\n          }\n        />\n      </div>\n    );\n  }\n}\n\nexport function mapDispatchToProps(dispatch: React.Dispatch<IAction>) {\n  return {\n    dispatch,\n  };\n}\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IPrintModuleComponentProps) => {\n  return createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n};\n\nexport default compose<React.ComponentClass<IPrintModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(PrintModule);","export {\n  default as actions,\n} from './actions';\nexport {\n  default as constants,\n} from './constants';\nexport {\n  default as reducer,\n} from './reducer';\nexport {\n  default as saga,\n} from './saga';\nexport {\n  default as selectors,\n} from './selectors';\nimport Module from './PrintModule';\nexport default Module;","import * as React from 'react';\n\ninterface IAtsSvgCheckmarkProps {\n  /**\n   * The width of the component.\n   * Default: '120'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '120'\n   */\n  height?: string;\n  /**\n   * The fill Default: '#83D3EE'. The original shade of blue #80BBCE could not be found in ST's theme palette, it has been replaced with the closest shade in the palette #83d3ee which is primary[200] in the signup success page\n   */\n  fill?: string;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} fill - The fill colors.\n */\n\nconst AtsSvgCheckmark = ({\n  width = '120',\n  height = '120',\n  fill = '#83D3EE',\n}: IAtsSvgCheckmarkProps) => {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 120 120'\n      version='1.1'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n        <title>Success</title>\n        <desc>Created with Sketch.</desc>\n        <defs>\n            <linearGradient x1='76.3981729%' y1='80.26342%' x2='21.5971047%' y2='27.6426885%' id='linearGradient-1'>\n                <stop stop-color='#000000' stop-opacity='0' offset='0%'/>\n                <stop stop-color='#504F4F' offset='100%'/>\n            </linearGradient>\n        </defs>\n        <g id='Log-in-&amp;-Registration' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'>\n            <g id='Success'>\n                <g id='Oval-3' fill={fill}>\n                    <g id='path-1-link'>\n                        <ellipse id='path-1' cx='59.8874842' cy='60' rx='59.8874842' ry='60'/>\n                    </g>\n                </g>\n                <path d='M100,40.3938787 L120,66.2587665 C117.031601,90.0657007 92.5959758,117.274661 67.8724188,120 L38.3333333,83.7805625 L100,40.3938787 Z' id='Combined-Shape' fill='url(#linearGradient-1)' fill-rule='nonzero' opacity='0.181102808'/>\n                <path d='M47.17155,90.4882687 L21.1715245,64.3387517 C19.6094918,62.7677377 19.6094918,60.220517 21.1715245,58.649346 L26.8282488,52.9599402 C28.3902817,51.3887692 30.9230967,51.3887692 32.4851293,52.9599402 L50,70.5753487 L87.5148707,32.8449272 C89.0769033,31.2739132 91.6097183,31.2739132 93.1717512,32.8449272 L98.8284755,38.5343328 C100.390508,40.1053468 100.390508,42.6525675 98.8284755,44.2237387 L52.8284305,90.4884258 C51.2662415,92.0594398 48.7335827,92.0594398 47.17155,90.4882687 L47.17155,90.4882687 Z' id='Path' fill='#FFFFFF' fill-rule='nonzero'/>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgCheckmark };\n","import * as React from 'react';\n\ninterface IAtsSvgSignupFooterProps {\n  /**\n   * The width of the component.\n   * Default: '1054'\n   */\n  width?: string;\n  /**\n   * The height of the component.\n   * Default: '291'\n   */\n  height?: string;\n  /**\n   * The fill Default: '#0077AD' or primary.main[800] based on spec tools theme palette\n   */\n  fill?: string;\n}\n\n/**\n * Props:\n * @prop {string} width - The width of the element.\n * @prop {string} height - The height of the element.\n * @prop {string} fill - The fill colors.\n */\n\nconst AtsSvgSignupFooter = ({\n  width = '1054',\n  height = '291',\n  fill = '#0077AD',\n}: IAtsSvgSignupFooterProps) => {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox='0 0 1054 291'\n      version='1.1'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n        <title>82D898FE-9C57-486D-9EC0-8D112867B91B</title>\n        <desc>Created with sketchtool.</desc>\n        <defs>\n            <linearGradient x1='50.0023444%' y1='100%' x2='50.0023444%' y2='0%' id='linearGradient-1'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50.0013729%' y1='100%' x2='50.0013729%' y2='0%' id='linearGradient-2'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50.0000023%' y1='99.9748282%' x2='50.0000023%' y2='0.0362986911%' id='linearGradient-3'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50%' y1='99.965035%' x2='50%' y2='0%' id='linearGradient-4'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='-1.74833372%' y1='37.5747427%' x2='101.748334%' y2='62.4233584%' id='linearGradient-5'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='0%' y1='49.9839641%' x2='100%' y2='49.9839641%' id='linearGradient-6'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50%' y1='100.004921%' x2='50%' y2='0.00492125984%' id='linearGradient-7'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50%' y1='99.9950787%' x2='50%' y2='-0.00492125984%' id='linearGradient-8'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n            <linearGradient x1='50%' y1='100%' x2='50%' y2='-2.79741235e-14%' id='linearGradient-9'>\n                <stop stop-color='#808080' stop-opacity='0.25' offset='0%'/>\n                <stop stop-color='#808080' stop-opacity='0.12' offset='54%'/>\n                <stop stop-color='#808080' stop-opacity='0.1' offset='100%'/>\n            </linearGradient>\n        </defs>\n        <g id='Registration' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'>\n            <g id='Spec-Tool-2.0_Registration_Signup_Step-3' transform='translate(-183.000000, -733.000000)' fill-rule='nonzero'>\n                <g id='Group-5' transform='translate(183.000000, 733.000000)'>\n                    <path d='M984.971773,260.796407 C983.96845,261.491314 982.96801,262.176956 981.970452,262.853332 C980.413571,263.904032 978.876872,264.934348 977.360355,265.944279 C976.685706,266.3918 976.011058,266.830981 975.353708,267.270162 C967.915276,272.15397 960.969857,276.473513 955.071007,280.025878 C944.16855,286.582052 923.00959,290.706069 899.879573,290.783042 L768.712344,291.24168 L767.328449,291.24168 L756.084308,291.280595 L746.466243,291.313951 L716.971996,291.416797 L715.778387,291.416797 L700.763134,291.46961 L700.304719,291.46961 L607.756789,291.792047 L525.14695,292.07001 L515.537534,292.103365 L455.857093,292.311837 L455.787899,292.311837 L417.082105,292.44526 L416.666937,292.44526 L294.278787,292.870543 L257.666134,292.998406 C254.548625,293.009845 251.431874,292.959717 248.333496,292.848306 C247.278277,292.809391 246.223058,292.764917 245.176488,292.712104 C228.100951,291.865023 136.130011,278.106291 124.5,274 C108.749553,268.432404 23.8015782,247.412459 16.1036663,240.363321 C14.9907847,239.345977 13.9528639,238.315661 12.9899042,237.272374 C-13.6587101,208.32254 0.265420982,193.356289 58.7349544,168.361868 C61.1856005,167.316727 272.776529,155.459597 294.252839,151.24568 C332.309931,143.765699 374.47546,141.65874 415.949042,147.937922 C451.039411,153.252572 483.803108,155.751458 515.563482,156.429687 C518.772387,156.496399 521.981292,156.546432 525.172898,156.577008 C598.026283,157.313609 666.304167,148.877436 746.483542,143.432144 C749.675148,143.215333 752.875403,143.001301 756.101607,142.798388 C813.299687,139.140397 876.75124,137.211335 952.208076,141.266813 C960.047476,141.678382 967.78316,142.272943 975.353708,143.045775 C978.68082,143.390449 981.886842,143.761066 984.971773,144.157627 C1020.98762,148.866318 1040.63027,157.566556 1048.97688,168.468259 C1049.76686,169.480044 1050.45015,170.509433 1051.02678,171.556427 C1065.8258,197.779444 1022.48396,234.976436 984.971773,260.796407 Z' id='Path' fill='#F2F2F2'/>\n                    <path d='M640.478975,265 C640.375722,266.009088 640.215783,267.010844 640,268 L664,268 L664,265 L640.478975,265 Z M621,281 L624,280.977564 L624,274.12963 C622.971197,274.087251 621.969397,274.044872 621,274 L621,281 Z M561,265 L561,268 L612,268 L612,265 L561,265 Z M778.395385,178.596345 L759.517098,178.596345 L759.517098,156.25871 C758.607199,155.889352 757.661584,155.54893 756.680253,155.237444 L756.680253,178.596345 L691.999163,178.596345 L691.999163,155 C691.047595,155.186381 690.103681,155.382975 689.162317,155.582121 L689.162317,178.596345 L623.886816,178.596345 L623.886816,167.656036 C622.945453,167.627951 621.998987,167.581994 621.052522,167.520718 L621.052522,178.596345 L555.77702,178.596345 L555.77702,162.766726 C549.44259,166.637323 543.49593,172.08067 538.192152,178.596345 L538.174294,178.596345 L538.174294,178.616771 C537.425966,179.53591 536.691243,180.47207 535.970127,181.425251 L538.174294,181.425251 L538.174294,265.281383 L517,265.281383 C517.282324,266.239671 517.588458,267.186044 517.918403,268.120502 L538.171743,268.120502 L538.171743,292.023227 C539.190766,292.335139 540.230912,292.573199 541.284109,292.73556 C541.592795,292.78407 541.904031,292.82492 542.215268,292.860665 L542.215268,292.860665 C543.129133,292.962999 544.048418,293.009043 544.967926,292.998536 L555.766816,292.88109 L555.766816,268.115395 L621.052522,268.115395 L621.052522,292.168757 L623.886816,292.138119 L623.886816,268.120502 L689.162317,268.120502 L689.162317,291.446212 L691.999163,291.415574 L691.999163,268.120502 L756.667498,268.120502 L756.667498,269.338361 C756.861383,268.934961 757.06037,268.531561 757.259357,268.120502 C757.706654,267.192852 758.159903,266.246479 758.619104,265.281383 C758.913333,264.661815 759.208413,264.032034 759.504343,263.392041 L759.504343,181.435464 L779,181.435464 C778.828225,180.466964 778.626686,179.520591 778.395385,178.596345 Z M556,265 L556,181 L621,181 L621,265 L556,265 Z M624,265 L624,181 L689,181 L689,265 L624,265 Z M757,265 L692,265 L692,181 L756.994872,181 L757,265 Z' id='Shape' fill='#000000' opacity='0.1'/>\n                    <polygon id='Path' fill='#65617D' points='978 283.752577 978 289.113402 913.178124 289.690722 912.486896 289.703093 887.850145 289.921649 887.261321 289.929897 879.773012 289.991753 879.551136 289.991753 833.904452 290.4 758.974425 291.072165 758.910423 291.072165 739.85897 291.245361 739.654161 291.249485 655 292 655 285.814433 674.904822 274.268041 714.84247 273.946392 715.695839 273.942268 715.97745 273.938144 716.830819 273.925773 736.006011 273.773196 736.863646 273.769072 737.136724 273.764948 737.990092 273.760825 744.138613 273.71134 744.300753 273.707216 759.469379 273.583505 759.593118 273.583505 877.955337 272.618557 880.852523 272.597938 881.142668 272.597938 883.352893 272.57732 899.417556 272.449485 900.270925 272.437113 901.060291 272.428866 901.469908 272.428866 906.46638 272.391753 907.456288 272.379381 908.783276 272.371134 912.943448 272.334021 919.544254 272.280412 920.397622 272.272165 921.882483 272.263918 922.159828 272.263918 954.037411 272'/>\n                    <polygon id='Path' fill='#000000' opacity='0.2' points='978 283.752577 978 289.113402 913.178124 289.690722 912.486896 289.703093 887.850145 289.921649 887.261321 289.929897 879.773012 289.991753 879.551136 289.991753 833.904452 290.4 758.974425 291.072165 758.910423 291.072165 739.85897 291.245361 739.654161 291.249485 655 292 655 285.814433 674.904822 274.268041 714.84247 273.946392 715.695839 273.942268 715.97745 273.938144 716.830819 273.925773 736.006011 273.773196 736.863646 273.769072 737.136724 273.764948 737.990092 273.760825 744.138613 273.71134 744.300753 273.707216 759.469379 273.583505 759.593118 273.583505 877.955337 272.618557 880.852523 272.597938 881.142668 272.597938 883.352893 272.57732 899.417556 272.449485 900.270925 272.437113 901.060291 272.428866 901.469908 272.428866 906.46638 272.391753 907.456288 272.379381 908.783276 272.371134 912.943448 272.334021 919.544254 272.280412 920.397622 272.272165 921.882483 272.263918 922.159828 272.263918 954.037411 272'/>\n                    <path d='M736,263 L736,273.928949 C736.000467,274.985528 735.422785,275.947928 734.516006,276.401239 C734.185206,276.570055 733.823573,276.661405 733.45601,276.668996 L718.658471,276.99923 C718.263278,277.009206 717.871314,276.922113 717.513675,276.744861 C716.590425,276.299471 715.998914,275.328121 716.000001,274.259183 L716,263 L736,263 Z' id='Path' fill='#3F3D56'/>\n                    <path d='M736,263 L736,273.928949 C736.000467,274.985528 735.422785,275.947928 734.516006,276.401239 C734.185206,276.570055 733.823573,276.661405 733.45601,276.668996 L718.658471,276.99923 C718.263278,277.009206 717.871314,276.922113 717.513675,276.744861 C716.590425,276.299471 715.998914,275.328121 716.000001,274.259183 L716,263 L736,263 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <path d='M737,263 L737,273.928949 C737.000467,274.985528 736.422785,275.947928 735.516006,276.401239 C735.185206,276.570055 734.823573,276.661405 734.45601,276.668996 L719.658471,276.99923 C719.263278,277.009206 718.871314,276.922113 718.513675,276.744861 C717.590425,276.299471 716.998914,275.328121 717.000001,274.259183 L717,263 L737,263 Z' id='Path' fill='#3F3D56'/>\n                    <rect id='Rectangle' fill='#3F3D56' x='901' y='263' width='20' height='14'/>\n                    <rect id='Rectangle' fill='#000000' opacity='0.1' x='901' y='263' width='20' height='14'/>\n                    <rect id='Rectangle' fill='#3F3D56' x='900' y='263' width='20' height='14'/>\n                    <polygon id='Path' fill='#000000' opacity='0.1' points='737 263 737 264.595506 717 265 717 263'/>\n                    <path d='M773,188.700331 L773,261.104305 C772.989153,262.022252 772.259027,262.770274 771.340351,262.804636 L688.724311,265 L688.702757,265 C687.767207,264.988393 687.011623,264.233886 687,263.299669 L687,188.700331 C687.011623,187.766114 687.767207,187.011607 688.702757,187 L771.297243,187 C772.232793,187.011607 772.988377,187.766114 773,188.700331 Z' id='Path' fill='#65617D'/>\n                    <path d='M689,187 L689,265 L688.975,265 C687.889871,264.988393 687.013481,264.233886 687,263.299669 L687,188.700331 C687.013481,187.766114 687.889871,187.011607 688.975,187 L689,187 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <polygon id='Path' fill={fill} points='693 192 768 192 768 255.292282 693 257'/>\n                    <polygon id='Path' fill='#000000' opacity='0.1' points='920 263 920 266 900 265.410296 900 263'/>\n                    <path d='M947,188.700331 L947,263.299669 C946.988203,264.242207 946.219802,265.000074 945.276035,265 L945.276035,265 L862.659316,262.804636 C861.740824,262.770274 861.010845,262.022252 861,261.104305 L861,188.700331 C861.011621,187.766114 861.767053,187.011607 862.702416,187 L945.280345,187 C946.222433,187.002279 946.988227,187.759467 947,188.700331 Z' id='Path' fill='#65617D'/>\n                    <path d='M946,188.700331 L946,263.299669 C945.986314,264.242207 945.09488,265.000074 944,265 L944,265 L944,187 L944,187 C945.09488,186.999926 945.986314,187.757793 946,188.700331 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <polygon id='Path' fill={fill} points='940 192 865 192 865 255.292282 940 257'/>\n                    <path d='M859,188.700331 L859,261.104305 C858.989153,262.022252 858.259027,262.770274 857.340351,262.804636 L774.724311,265 L774.724311,265 C773.780354,265.000074 773.011799,264.242207 773,263.299669 L773,188.700331 C773.011623,187.766114 773.767207,187.011607 774.702757,187 L857.297243,187 C858.232793,187.011607 858.988377,187.766114 859,188.700331 Z' id='Path' fill='#65617D'/>\n                    <polygon id='Path' fill={fill} points='779 192 854 192 854 255.292282 779 257'/>\n                    <polygon id='Path' fill='#000000' opacity='0.1' points='978 284 978 289.2 913.178124 289.76 912.486896 289.772 887.850145 289.984 887.261321 289.992 879.773012 290.052 879.551136 290.052 833.904452 290.448 758.974425 291.1 758.910423 291.1 739.85897 291.268 739.654161 291.272 655 292 655 286 741.407834 285.468 741.612642 285.468 759.102431 285.356 759.183501 285.356 879.969287 284.608 880.093025 284.608 880.165561 284.604 880.366103 284.604 882.409921 284.592 883.03288 284.592 914.816592 284.392 916.694003 284.384 917.112153 284.38'/>\n                    <circle id='Oval' fill='#FBBEBE' cx='818' cy='184' r='22'/>\n                    <path d='M840,217.688425 C840,217.688425 797.187502,222.889469 801.275127,217.688425 C802.755278,215.807381 803.16404,210.233596 803.082288,203.883988 C803.056471,201.955268 802.987627,199.9572 802.888663,197.967801 C802.415359,188.432554 801.275127,179.114017 801.275127,179.114017 C801.275127,179.114017 838.709171,161.343785 834.406407,175.429945 C832.685302,181.120753 833.248964,189.113024 834.557004,196.615529 C834.93995,198.804302 835.383135,200.949733 835.847833,202.986808 C836.981931,207.955507 838.3678,212.862468 840,217.688425 L840,217.688425 Z' id='Path' fill='#FBBEBE'/>\n                    <path d='M825.272046,215.024448 C830.227715,214.106345 835.47616,212.438242 840.139053,214.360655 C841.36613,214.864965 842.49418,215.602034 843.751395,216.024447 C845.008611,216.446861 846.386382,216.550309 847.695264,216.847723 C852.293574,217.890826 856.022166,221.395135 858.416042,225.468409 C860.809919,229.541683 862.049912,234.14944 863.264073,238.709783 L866.234891,249.843399 C868.818211,259.520119 871.401531,269.278736 872,279.283042 C836.034425,281.343959 799.986709,281.549691 764,279.899421 C766.34221,275.442526 768.736087,270.71408 768.538032,265.675289 C768.339978,260.636498 765.442354,255.666672 766.488598,250.701157 C767.155956,247.537365 769.317334,244.929608 770.639133,241.985643 C774.406474,233.571854 771.474406,222.248583 778.096316,215.843413 C781.075745,212.964104 785.415723,211.873587 789.561952,212.011518 C794.849147,212.188242 800.261202,213.839103 805.492425,214.645138 C812.191835,215.662379 818.52097,216.265827 825.272046,215.024448 Z' id='Path' fill='#FF6584'/>\n                    <path d='M880.98841,262.951892 L880.945965,263.560341 L880.945965,263.602889 L880.873807,264.581513 L880.309282,272.457308 L879.625909,281.945704 L879.43066,284.617772 L879.006205,290.336339 L879.006205,290.408673 L833.589504,290.834161 L759.059424,291.64259 L759.059424,292 L759,292 L759,291.64259 L759,291.523453 L759.191005,285.413436 L759.556036,273.474225 L759.870133,263.351851 L759.899845,262.343443 C759.937375,261.113366 760.47799,259.952919 761.394803,259.134469 C762.311617,258.31602 763.523901,257.911633 764.747123,258.016224 C766.750551,258.186419 769.352461,258.394909 772.463717,258.616163 L773.737083,258.70977 C791.704269,259.960707 824.909396,261.577564 858.415885,259.560747 C859.120481,259.522454 859.829321,259.479905 860.538161,259.428846 C865.733492,259.10122 870.924579,258.679986 876.064731,258.15238 C877.380127,258.014225 878.689017,258.467164 879.639266,259.389344 C880.589516,260.311523 881.083533,261.608233 880.98841,262.930617 L880.98841,262.951892 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <path d='M759,291.982613 L759,291.617481 L833.573861,290.78724 L879.009478,290.35256 L879.136867,290.35256 L879.136867,290.278664 L879.561499,284.436554 L879.744091,281.828469 L880.440487,272.000335 L880.988263,264.219548 L880.988263,264.028289 C881.013582,263.669761 880.997906,263.309432 880.941553,262.954627 C880.943929,262.94024 880.943929,262.925547 880.941553,262.911159 C880.824904,262.177559 880.53319,261.484769 880.092289,260.89424 C879.141723,259.646451 877.629452,258.989101 876.092256,259.155517 C870.949964,259.694521 865.756715,260.124855 860.55922,260.459559 C859.850085,260.511721 859.14095,260.555189 858.436061,260.59431 C824.915615,262.632963 791.696659,260.981176 773.721989,259.724949 L772.448093,259.629319 C769.335541,259.403285 766.732548,259.194638 764.728285,259.016419 C762.444612,258.819155 760.384355,260.419678 759.955422,262.724246 C759.912547,262.959578 759.886997,263.197874 759.878988,263.437123 L759.590238,273.06965 L759.195331,285.271141 L759.008493,291.513157 L759.008493,291.634868 L759.008493,292 L759,291.982613 Z' id='Path' fill='#3F3D56'/>\n                    <path d='M880.993171,266.049922 L880.471361,272.634078 L879.69501,282.448035 L879.499862,284.904745 L879.075626,290.406574 L879.050172,290.681451 L879.050172,290.754465 L879.050172,290.754465 L878.986537,291.390117 L879.033202,290.754465 L878.910174,290.754465 L833.516972,291.18396 L759,292 L759,291.879741 L759.207875,285.712196 L759.632111,273.660571 L759.903622,265.650492 C759.930748,264.724666 760.41944,263.875829 761.201782,263.395644 C761.682174,263.097573 762.243866,262.962179 762.805393,263.009099 C763.696287,263.082113 764.790815,263.168012 766.067764,263.262501 C768.142276,263.417119 770.700416,263.597507 773.67855,263.786484 C779.193611,264.13867 786.112893,264.516625 794.041855,264.825862 C816.102103,265.684851 845.883438,265.972613 874.171463,263.464363 C875.44417,263.352694 876.7593,263.228141 878.044734,263.103587 C878.55354,263.052217 879.066177,263.150647 879.521073,263.387054 C879.649924,263.452031 879.77213,263.529716 879.885916,263.618981 C880.255225,263.889895 880.547802,264.254227 880.734387,264.675539 C880.777668,264.75936 880.813173,264.847067 880.840446,264.93753 C880.967887,265.293371 881.019923,265.672383 880.993171,266.049922 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <path d='M737,272 L737,273.343158 C737.000467,274.34005 736.422785,275.248085 735.516006,275.675789 L718.513675,276 C717.590425,275.57977 716.998914,274.663291 717.000001,273.654737 L717.000001,272.391579 L737,272 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <polygon id='Path' fill='#3F3D56' points='737 276.58635 715 277 715 273.41365 737 273'/>\n                    <polygon id='Path' fill='#000000' opacity='0.1' points='737 276.58635 715 277 715 273.41365 737 273'/>\n                    <polygon id='Path' fill='#3F3D56' points='738 276.58635 716 277 716 273.41365 738 273'/>\n                    <path d='M900,273 L900,274.343158 C899.999533,275.34005 900.577215,276.248085 901.483994,276.675789 L918.486325,277 C919.409575,276.57977 920.001086,275.663291 919.999999,274.654737 L919.999999,273.391579 L900,273 Z' id='Path' fill='#000000' opacity='0.1'/>\n                    <polygon id='Path' fill='#000000' opacity='0.1' points='900 277.58635 922 278 922 274.41365 900 274'/>\n                    <polygon id='Path' fill='#3F3D56' points='898 277.58635 920 278 920 274.41365 898 274'/>\n                    <path d='M803.422159,190.750976 C803.455649,193.716168 802.099302,196.511921 800.948083,199.252606 C796.756572,209.236086 794.941218,220.076246 795.648285,230.899677 C795.953882,235.559265 796.728339,240.218853 795.953882,244.83608 C795.179425,249.453308 792.42487,254.057828 788,255.383692 C795.338503,259.8103 805.272483,259.344342 812.179801,254.256919 C815.859518,251.545886 818.601514,247.763149 821.284903,244.04395 C820.966193,250.724968 819.05449,257.22873 815.712999,263 C827.927699,261.905653 839.111,255.621803 846.48615,245.708694 C848.290426,243.247585 849.860271,240.545024 850.555189,237.562888 C851.848741,232.056102 850.044466,226.333282 848.667188,220.830732 C847.516259,216.23081 846.653569,211.561931 846.08427,206.851969 C845.904261,205.343957 845.757742,203.793586 846.126132,202.319461 C846.544758,200.595414 847.662488,199.138234 848.48718,197.566682 C850.831482,193.10195 850.885903,187.696828 849.684448,182.791553 C848.482993,177.886278 846.130319,173.362243 843.798575,168.893274 C841.931506,165.309628 839.905359,161.560778 836.489376,159.455492 C834.354387,158.142335 831.884497,157.595892 829.42298,157.066394 L818.802455,154.766252 C816.479084,154.262169 814.088733,153.758087 811.740245,154.126618 C807.775862,154.753544 804.983631,157.65096 802.530487,160.624624 C800.608996,162.937474 795.912019,167.279363 795.581305,170.308095 C795.279895,173.099611 797.716295,177.776143 798.130734,180.720155 C798.674947,184.532545 799.060082,183.261748 801.186699,185.600014 C802.530487,187.048722 803.397041,188.721938 803.422159,190.750976 Z' id='Path' fill='#3F3D56'/>\n                    <path d='M736.791252,198 L695.208748,198 C695.093459,198 695,197.776142 695,197.5 C695,197.223858 695.093459,197 695.208748,197 L736.791252,197 C736.906541,197 737,197.223858 737,197.5 C737,197.776142 736.906541,198 736.791252,198 Z' id='Path' fill='#F2F2F2'/>\n                    <path d='M736.791252,202 L695.208748,202 C695.093459,202 695,201.776142 695,201.5 C695,201.223858 695.093459,201 695.208748,201 L736.791252,201 C736.906541,201 737,201.223858 737,201.5 C737,201.776142 736.906541,202 736.791252,202 Z' id='Path' fill='#F2F2F2'/>\n                    <path d='M736.791252,207 L695.208748,207 C695.093459,207 695,206.776142 695,206.5 C695,206.223858 695.093459,206 695.208748,206 L736.791252,206 C736.906541,206 737,206.223858 737,206.5 C737,206.776142 736.906541,207 736.791252,207 Z' id='Path' fill='#F2F2F2'/>\n                    <path d='M292.924767,55.8610454 L350.826331,55.8936199 C358.245002,55.8964693 364.258314,61.9097769 364.261168,69.3284487 L364.318627,164.976756 C364.321483,172.399462 358.306505,178.41907 350.883798,178.421925 C350.880354,178.421926 350.87691,178.421926 350.873466,178.421925 L292.971907,178.379022 C285.553235,178.376173 279.539924,172.362865 279.53707,164.944194 L279.47961,69.2958864 C279.476755,61.8731799 285.491732,55.8535726 292.914439,55.8507171 C292.917883,55.8507158 292.921327,55.8507158 292.924771,55.8507171 Z' id='Rectangle' fill='url(#linearGradient-1)' transform='translate(321.899119, 117.136321) rotate(-12.750000) translate(-321.899119, -117.136321) '/>\n                    <path d='M293.592081,57.4327851 L349.386727,57.4645505 C356.805399,57.4673998 362.81871,63.4807074 362.821564,70.8993792 L362.877999,163.884545 C362.880855,171.307252 356.865877,177.326859 349.443171,177.329714 C349.439726,177.329716 349.436282,177.329716 349.432838,177.329714 L293.638196,177.287621 C286.219524,177.284771 280.206213,171.271464 280.203359,163.852792 L280.146924,70.8676261 C280.144069,63.4449197 286.159046,57.4253123 293.581753,57.4224569 C293.585197,57.4224556 293.588641,57.4224556 293.592085,57.4224569 Z' id='Rectangle' fill={fill} transform='translate(321.512462, 117.376086) rotate(-12.750000) translate(-321.512462, -117.376086) '/>\n                    <polygon id='Rectangle' fill='url(#linearGradient-2)' transform='translate(166.748691, 153.684741) rotate(-20.670000) translate(-166.748691, -153.684741) ' points='94.3182052 65.9171882 239.075636 66.0025019 239.179177 241.452294 94.4217464 241.36698'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(166.632152, 153.379928) rotate(-20.670000) translate(-166.632152, -153.379928) ' points='95.5182876 67.2565036 237.644416 67.3402665 237.746017 239.503352 95.6198891 239.419589'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(160.330334, 186.866907) rotate(-20.670000) translate(-160.330334, -186.866907) ' points='128.416068 185.53421 192.243049 185.571827 192.2446 188.199604 128.417619 188.161987'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(184.993791, 194.429533) rotate(-20.670000) translate(-184.993791, -194.429533) ' points='132.682953 193.084815 237.303078 193.146474 237.304629 195.774251 132.684504 195.712593'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(215.749321, 165.998230) rotate(-20.670000) translate(-215.749321, -165.998230) ' points='202.260137 164.676391 229.236954 164.69229 229.238504 167.320068 202.261688 167.304169'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(145.871918, 200.739646) rotate(-20.670000) translate(-145.871918, -200.739646) ' points='132.382734 199.417808 159.359551 199.433707 159.361102 202.061484 132.384285 202.045585'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(182.207957, 187.056107) rotate(-20.670000) translate(-182.207957, -187.056107) ' points='168.718774 185.734269 195.69559 185.750168 195.697141 188.377945 168.720325 188.362046'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(218.540277, 173.373968) rotate(-20.670000) translate(-218.540277, -173.373968) ' points='205.051094 172.05213 232.02791 172.068029 232.029461 174.695806 205.052644 174.679907'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(155.865175, 125.319527) rotate(-20.670000) translate(-155.865175, -125.319527) ' points='116.377163 110.839514 195.336124 110.886049 195.353187 139.79954 116.394227 139.753005'/>\n                    <path d='M441.419443,244.098364 C441.512839,243.554897 441.56022,243.004271 441.561066,242.452553 C441.563467,238.030148 438.551357,234.197963 434.312101,233.229993 C430.072846,232.262023 425.741251,234.417383 423.887658,238.417096 C422.034065,242.416809 423.15466,247.190193 426.584492,249.904752 C426.488,250.44786 426.439289,250.998645 426.438935,251.550563 C426.437966,255.971947 429.449955,259.802522 433.68827,260.770093 C437.926585,261.737663 442.257222,259.583346 444.111362,255.585024 C445.965501,251.586703 444.84705,246.814169 441.419443,244.098364 Z' id='Path' fill='url(#linearGradient-3)'/>\n                    <circle id='Oval' fill={fill} cx='436.5' cy='251.5' r='8.5'/>\n                    <circle id='Oval' fill='url(#linearGradient-4)' cx='447.5' cy='271.5' r='5.5'/>\n                    <circle id='Oval' fill={fill} cx='448.5' cy='270.5' r='5.5'/>\n                    <circle id='Oval' fill={fill} cx='433.5' cy='243.5' r='8.5'/>\n                    <g id='Group' opacity='0.5' transform='translate(471.000000, 0.000000)' fill='#47E6B1'>\n                        <rect id='Rectangle' x='0.882352941' y='0' width='1.23529412' height='7'/>\n                        <polygon id='Rectangle' transform='translate(68.676634, 29.574857) rotate(90.000000) translate(-68.676634, -29.574857) ' points='68.0589867 26.074857 69.2942809 26.074857 69.2942809 33.074857 68.0589867 33.074857'/>\n                    </g>\n                    <g id='Group' opacity='0.5' transform='translate(272.000000, 53.000000)' fill='#47E6B1'>\n                        <rect id='Rectangle' x='2.88235294' y='0' width='1.23529412' height='7'/>\n                        <polygon id='Rectangle' transform='translate(3.500000, 3.500000) rotate(90.000000) translate(-3.500000, -3.500000) ' points='2.88235294 3.20588001e-12 4.11764706 3.20588001e-12 4.11764706 7 2.88235294 7'/>\n                    </g>\n                    <g id='Group' opacity='0.5' transform='translate(363.000000, 284.000000)' fill='#47E6B1'>\n                        <rect id='Rectangle' x='2.88235294' y='0' width='1.23529412' height='7'/>\n                        <polygon id='Rectangle' transform='translate(3.500000, 3.500000) rotate(90.000000) translate(-3.500000, -3.500000) ' points='2.88235294 -3.61261021e-12 4.11764706 -3.61261021e-12 4.11764706 7 2.88235294 7'/>\n                    </g>\n                    <path d='M520.589697,232.548846 C519.949712,232.270807 519.620138,231.555448 519.824035,230.886933 C519.839356,230.838252 519.849374,230.788053 519.853915,230.737211 L519.853915,230.737211 C519.875369,230.432278 519.693694,230.149663 519.40777,230.043182 C519.121845,229.936701 518.800101,230.03184 518.617651,230.276817 L518.617651,230.276817 C518.587713,230.320068 518.56266,230.366517 518.542952,230.415309 C518.257312,231.049916 517.544085,231.371163 516.880905,231.163919 C516.832424,231.1482 516.782292,231.138152 516.731508,231.133974 L516.731508,231.133974 C516.427958,231.114354 516.147651,231.297052 516.042454,231.583082 C515.937257,231.869112 516.032201,232.19042 516.275845,232.372923 L516.275845,232.372923 C516.3171,232.404817 516.362294,232.431236 516.410303,232.451527 C517.049023,232.730862 517.378056,233.445048 517.175965,234.113439 C517.15674,234.162337 517.146613,234.21435 517.146085,234.266904 L517.146085,234.266904 C517.126508,234.571113 517.308809,234.852028 517.59422,234.957454 C517.879631,235.062879 518.200242,234.967729 518.382349,234.723556 L518.382349,234.723556 C518.410862,234.680748 518.435844,234.635682 518.457048,234.588806 C518.741227,233.95475 519.453212,233.633339 520.11536,233.840197 C520.16512,233.855909 520.216488,233.865954 520.268492,233.870141 L520.268492,233.870141 C520.572042,233.889761 520.852349,233.707064 520.957546,233.421033 C521.062743,233.135003 520.967799,232.813696 520.724155,232.631193 L520.724155,232.631193 C520.681635,232.600139 520.636668,232.572599 520.589697,232.548846 Z' id='Path' fill='#4D8AF0' opacity='0.5'/>\n                    <path d='M489.589697,273.548846 C488.949712,273.270807 488.620138,272.555448 488.824035,271.886933 C488.839356,271.838252 488.849374,271.788053 488.853915,271.737211 L488.853915,271.737211 C488.875369,271.432278 488.693694,271.149663 488.40777,271.043182 C488.121845,270.936701 487.800101,271.03184 487.617651,271.276817 L487.617651,271.276817 C487.587713,271.320068 487.56266,271.366517 487.542952,271.415309 C487.257312,272.049916 486.544085,272.371163 485.880905,272.163919 C485.832424,272.1482 485.782292,272.138152 485.731508,272.133974 L485.731508,272.133974 C485.427958,272.114354 485.147651,272.297052 485.042454,272.583082 C484.937257,272.869112 485.032201,273.19042 485.275845,273.372923 L485.275845,273.372923 C485.3171,273.404817 485.362294,273.431236 485.410303,273.451527 C486.049023,273.730862 486.378056,274.445048 486.175965,275.113439 C486.15674,275.162337 486.146613,275.21435 486.146085,275.266904 L486.146085,275.266904 C486.126508,275.571113 486.308809,275.852028 486.59422,275.957454 C486.879631,276.062879 487.200242,275.967729 487.382349,275.723556 L487.382349,275.723556 C487.410862,275.680748 487.435844,275.635682 487.457048,275.588806 C487.741227,274.95475 488.453212,274.633339 489.11536,274.840197 C489.16512,274.855909 489.216488,274.865954 489.268492,274.870141 L489.268492,274.870141 C489.572042,274.889761 489.852349,274.707064 489.957546,274.421033 C490.062743,274.135003 489.967799,273.813696 489.724155,273.631193 L489.724155,273.631193 C489.681635,273.600139 489.636668,273.572599 489.589697,273.548846 Z' id='Path' fill='#4D8AF0' opacity='0.5'/>\n                    <path d='M245.606904,254.548846 C244.964519,254.270807 244.63371,253.555448 244.838371,252.886933 C244.853749,252.838252 244.863805,252.788053 244.868363,252.737211 L244.868363,252.737211 C244.889897,252.432278 244.707542,252.149663 244.420545,252.043182 C244.133549,251.936701 243.810598,252.03184 243.627464,252.276817 L243.627464,252.276817 C243.597415,252.320068 243.572268,252.366517 243.552485,252.415309 C243.265775,253.049916 242.549874,253.371163 241.884207,253.163919 C241.835544,253.1482 241.785225,253.138152 241.73425,253.133974 L241.73425,253.133974 C241.429562,253.114354 241.148204,253.297052 241.042613,253.583082 C240.937022,253.869112 241.032322,254.19042 241.276879,254.372923 L241.276879,254.372923 C241.318289,254.404817 241.363652,254.431236 241.411841,254.451527 C242.045629,254.737586 242.367024,255.449963 242.161629,256.113439 C242.142332,256.162337 242.132167,256.21435 242.131637,256.266904 L242.131637,256.266904 C242.111987,256.571113 242.294971,256.852028 242.581452,256.957454 C242.867933,257.062879 243.189746,256.967729 243.372536,256.723556 L243.372536,256.723556 C243.401155,256.680748 243.426231,256.635682 243.447515,256.588806 C243.732759,255.95475 244.447414,255.633339 245.112044,255.840197 C245.16199,255.855909 245.213551,255.865954 245.26575,255.870141 L245.26575,255.870141 C245.570438,255.889761 245.851796,255.707064 245.957387,255.421033 C246.062978,255.135003 245.967678,254.813696 245.723121,254.631193 L245.723121,254.631193 C245.686446,254.600949 245.647603,254.573427 245.606904,254.548846 L245.606904,254.548846 Z' id='Path' fill='#4D8AF0' opacity='0.5'/>\n                    <circle id='Oval' fill='#F55F44' opacity='0.5' cx='403' cy='21' r='2'/>\n                    <circle id='Oval' fill='#4D8AF0' opacity='0.5' cx='209' cy='28' r='2'/>\n                    <circle id='Oval' fill='#47E6B1' opacity='0.5' cx='542' cy='163' r='2'/>\n                    <circle id='Oval' fill='#F55F44' opacity='0.5' cx='230' cy='119' r='2'/>\n                    <g id='Group' opacity='0.5' transform='translate(479.000000, 25.000000)' fill='url(#linearGradient-5)'>\n                        <path d='M-13.7000732,30.8046546 L99.3214886,30.9965618 C100.694294,30.9988928 101.809062,32.124022 101.811393,33.5096083 L101.914003,94.5031923 C101.91633,95.8865757 100.807108,97.0061428 99.4364849,97.0038156 L-13.5850769,96.8119084 C-14.9578823,96.8095774 -16.0726505,95.6844482 -16.0749815,94.2988619 L-16.1775848,33.3092665 C-16.1799157,31.9236803 -15.0689267,30.8023304 -13.6961214,30.8046613 L-13.7000732,30.8046546 Z' id='Path' transform='translate(42.868209, 63.904237) rotate(-79.980000) translate(-42.868209, -63.904237) '/>\n                    </g>\n                    <path d='M503.643786,31.5048351 L540.37643,31.4852618 C547.909593,31.4829589 554.018296,37.5879278 554.020599,45.1210914 C554.0206,45.1238736 554.0206,45.1266558 554.020599,45.129438 L553.976938,133.198151 C553.974632,140.728055 547.871012,146.831671 540.341108,146.833973 L503.608467,146.861895 C496.075304,146.864198 489.966601,140.75923 489.964298,133.226066 C489.964297,133.223284 489.964297,133.220502 489.964298,133.217719 L490.007959,45.1490068 C490.010265,37.6191025 496.113885,31.5154861 503.643789,31.5131842 Z' id='Rectangle' fill='#FFFFFF' transform='translate(521.992448, 89.173579) rotate(10.020000) translate(-521.992448, -89.173579) '/>\n                    <path d='M546.492954,37.7800237 C545.684458,40.2139871 543.220392,41.6856738 540.702781,41.2382582 L518.9817,37.3900271 C516.474704,36.9306103 514.673275,34.709452 514.734251,32.1529308 L503.233223,30.1114184 C502.597664,29.9995733 501.943898,30.146712 501.416826,30.5202228 C500.889753,30.8937336 500.532909,31.4627649 500.425385,32.1011966 L482.214101,135.474155 C481.981046,136.796971 482.859373,138.05936 484.177208,138.29566 L539.124364,148.037615 C539.760527,148.150628 540.415324,148.004043 540.943296,147.630423 C541.471267,147.256803 541.828691,146.687087 541.936167,146.047836 L560.139519,42.6549803 C560.252144,42.0166225 560.106064,41.3595653 559.733728,40.8297721 C559.361393,40.2999789 558.793636,39.9413215 558.156583,39.8334748 L546.492954,37.7800237 Z' id='Path' fill='#E0E0E0'/>\n                    <path d='M523.962934,36.4993918 L537.337943,36.4955861 C537.583294,36.4955163 537.782246,36.694356 537.782316,36.939707 C537.782316,36.9397913 537.782316,36.9398757 537.782316,36.93996 L537.782316,36.93996 C537.782246,37.1854918 537.583221,37.3845171 537.337689,37.3845869 L523.962681,37.3883927 C523.71733,37.3884625 523.518377,37.1896228 523.518307,36.9442718 C523.518307,36.9441874 523.518307,36.9441031 523.518307,36.9440187 L523.518307,36.9440187 C523.518377,36.698487 523.717403,36.4994617 523.962934,36.4993918 Z' id='Rectangle' fill='#DBDBDB' transform='translate(530.650312, 36.941989) rotate(9.300000) translate(-530.650312, -36.941989) '/>\n                    <circle id='Oval' fill='#DBDBDB' cx='474' cy='12' r='1'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(511.903891, 59.053504) rotate(8.800000) translate(-511.903891, -59.053504) ' points='503.159838 51.5152677 520.652019 51.5105493 520.647944 66.5917405 503.155763 66.5964589'/>\n                    <polygon id='Rectangle' fill={fill} opacity='0.3' transform='translate(508.558108, 80.619528) rotate(8.800000) translate(-508.558108, -80.619528) ' points='499.814056 73.0812912 517.306236 73.0765729 517.302161 88.1577641 499.809981 88.1624825'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(505.216254, 102.190127) rotate(8.800000) translate(-505.216254, -102.190127) ' points='496.472202 94.6518905 513.964382 94.6471721 513.960307 109.728363 496.468127 109.733082'/>\n                    <polygon id='Rectangle' fill='#3AD29F' opacity='0.3' transform='translate(501.870471, 123.760119) rotate(8.800000) translate(-501.870471, -123.760119) ' points='493.126419 116.221883 510.618599 116.217164 510.614524 131.298355 493.122344 131.303074'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(536.752792, 59.677766) rotate(8.800000) translate(-536.752792, -59.677766) ' points='525.224069 58.8871291 548.281943 58.8809094 548.281515 60.4684032 525.22364 60.4746229'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(536.024152, 64.384050) rotate(8.800000) translate(-536.024152, -64.384050) ' points='524.495429 63.5934127 547.553303 63.587193 547.552874 65.1746868 524.495 65.1809065'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(533.465913, 80.856650) rotate(8.800000) translate(-533.465913, -80.856650) ' points='521.93719 80.0660124 544.995064 80.0597928 544.994635 81.6472866 521.936761 81.6535062'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(533.679960, 84.576479) rotate(8.615648) translate(-533.679960, -84.576479) ' points='522.136235 83.7847525 545.224105 83.7786512 545.223684 85.3682047 522.135814 85.374306'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(530.183570, 102.036187) rotate(8.800000) translate(-530.183570, -102.036187) ' points='518.654848 101.24555 541.712722 101.23933 541.712293 102.826824 518.654419 102.833043'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(529.454930, 106.742470) rotate(8.800000) translate(-529.454930, -106.742470) ' points='517.926208 105.951833 540.984082 105.945614 540.983653 107.533107 517.925779 107.539327'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(448.651706, 126.551273) rotate(8.800000) translate(-448.651706, -126.551273) ' points='437.122983 125.760636 460.180857 125.754417 460.180428 127.34191 437.122554 127.34813'/>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(447.923066, 131.257557) rotate(8.800000) translate(-447.923066, -131.257557) ' points='436.394343 130.46692 459.452217 130.4607 459.451788 132.048194 436.393914 132.054414'/>\n                    <g id='Group' opacity='0.5' transform='translate(435.000000, 124.000000)' fill='url(#linearGradient-6)'>\n                        <polygon id='Rectangle' transform='translate(12.872472, 41.130949) rotate(-89.440000) translate(-12.872472, -41.130949) ' points='-27.720213 28.8520117 53.467668 28.8438014 53.4651577 53.4098865 -27.7227232 53.4180968'/>\n                    </g>\n                    <polygon id='Rectangle' fill='#E0E0E0' transform='translate(447.480901, 164.964648) rotate(0.560000) translate(-447.480901, -164.964648) ' points='435.695752 125.035095 459.267445 125.034684 459.26605 204.894202 435.694357 204.894613'/>\n                    <polygon id='Rectangle' fill='#4D8AF0' transform='translate(447.801684, 134.637470) rotate(0.560000) translate(-447.801684, -134.637470) ' points='439.470832 126.321478 456.132827 126.321188 456.132536 142.953461 439.470541 142.953752'/>\n                    <polygon id='Rectangle' fill='#4D8AF0' opacity='0.5' transform='translate(447.601102, 154.719496) rotate(0.560000) translate(-447.601102, -154.719496) ' points='439.27025 146.403505 455.932245 146.403214 455.931954 163.035488 439.269959 163.035778'/>\n                    <polygon id='Rectangle' fill='#4D8AF0' opacity='0.3' transform='translate(447.404496, 174.797555) rotate(0.560000) translate(-447.404496, -174.797555) ' points='439.073644 166.481563 455.735638 166.481273 455.735348 183.113546 439.073353 183.113837'/>\n                    <g id='Group' opacity='0.5' transform='translate(408.000000, 127.000000)' fill='url(#linearGradient-7)'>\n                        <polygon id='Rectangle' transform='translate(25.390677, 42.965011) rotate(-18.072322) translate(-25.390677, -42.965011) ' points='12.8754939 2.67375354 37.7338138 2.72655255 37.9058593 83.256269 13.0475394 83.20347'/>\n                    </g>\n                    <polygon id='Rectangle' fill='#F5F5F5' transform='translate(434.459644, 171.167623) rotate(-17.780000) translate(-434.459644, -171.167623) ' points='422.655082 131.375933 446.222858 131.388162 446.264205 210.959314 422.696429 210.947085'/>\n                    <polygon id='Rectangle' fill='#FF5252' transform='translate(425.241382, 142.427422) rotate(-17.780000) translate(-425.241382, -142.427422) ' points='416.907447 134.105578 433.566673 134.114222 433.575316 150.749265 416.916091 150.740621'/>\n                    <polygon id='Rectangle' fill='#FF5252' opacity='0.5' transform='translate(431.390541, 161.550899) rotate(-17.780000) translate(-431.390541, -161.550899) ' points='423.056606 153.229056 439.715832 153.2377 439.724476 169.872743 423.06525 169.864099'/>\n                    <polygon id='Rectangle' fill='#FF5252' opacity='0.3' transform='translate(437.530725, 180.671810) rotate(-17.780000) translate(-437.530725, -180.671810) ' points='429.19679 172.349967 445.856015 172.358611 445.864659 188.993653 429.205434 188.985009'/>\n                    <g id='Group' opacity='0.5' transform='translate(397.000000, 134.000000)' fill='url(#linearGradient-8)'>\n                        <polygon id='Rectangle' transform='translate(30.958035, 41.976009) rotate(-29.480000) translate(-30.958035, -41.976009) ' points='18.605461 1.72191626 43.3121698 1.72143738 43.3106094 82.2301024 18.6039006 82.2305813'/>\n                    </g>\n                    <polygon id='Rectangle' fill='#F5F5F5' transform='translate(428.341571, 175.641558) rotate(-29.480000) translate(-428.341571, -175.641558) ' points='416.530356 135.836385 440.091869 135.854402 440.152785 215.446732 416.591273 215.428715'/>\n                    <polygon id='Rectangle' fill='#69F0AE' transform='translate(413.468748, 149.366687) rotate(-29.480000) translate(-413.468748, -149.366687) ' points='405.134981 141.040584 421.789779 141.053319 421.802514 157.692789 405.147716 157.680054'/>\n                    <polygon id='Rectangle' fill='#69F0AE' opacity='0.5' transform='translate(423.367719, 166.848890) rotate(-29.480000) translate(-423.367719, -166.848890) ' points='415.033953 158.522788 431.688751 158.535523 431.701486 175.174993 415.046688 175.162258'/>\n                    <polygon id='Rectangle' fill='#69F0AE' opacity='0.3' transform='translate(433.268711, 184.331608) rotate(-29.480000) translate(-433.268711, -184.331608) ' points='424.934944 176.005506 441.589742 176.018241 441.602477 192.657711 424.947679 192.644976'/>\n                    <g id='Group' opacity='0.5' transform='translate(390.000000, 141.000000)' fill='url(#linearGradient-9)'>\n                        <polygon id='Rectangle' transform='translate(34.428549, 40.169325) rotate(-36.680000) translate(-34.428549, -40.169325) ' points='21.7954214 -0.505612271 46.7855157 -0.420861377 47.0616764 80.8442627 22.0715821 80.7595118'/>\n                    </g>\n                    <polygon id='Rectangle' fill='#FFFFFF' transform='translate(424.764847, 180.266107) rotate(-36.680000) translate(-424.764847, -180.266107) ' points='412.952442 140.451718 436.509133 140.471865 436.577252 220.080496 413.020561 220.060349'/>\n                    <polygon id='Rectangle' fill={fill} transform='translate(406.700940, 156.059576) rotate(-36.680000) translate(-406.700940, -156.059576) ' points='398.368125 147.731017 415.019515 147.745258 415.033756 164.388136 398.382366 164.373895'/>\n                    <polygon id='Rectangle' fill={fill} opacity='0.5' transform='translate(418.723431, 172.169898) rotate(-36.680000) translate(-418.723431, -172.169898) ' points='410.390615 163.841339 427.042005 163.855579 427.056246 180.498457 410.404856 180.484216'/>\n                    <polygon id='Rectangle' fill={fill} opacity='0.3' transform='translate(430.739570, 188.273068) rotate(-36.680000) translate(-430.739570, -188.273068) ' points='422.406755 179.944509 439.058145 179.95875 439.072386 196.601628 422.420996 196.587387'/>\n                    <circle id='Oval' fill='#FFFFFF' opacity='0.2' cx='494.5' cy='208.5' r='1.5'/>\n                </g>\n            </g>\n        </g>\n    </svg>\n  );\n};\n\nexport { AtsSvgSignupFooter };\n","import * as React from 'react';\nimport {\n  Stepper,\n  Step,\n  StepLabel,\n  StepContent,\n  Button,\n  Theme,\n  withStyles,\n  WithStyles,\n  Grid,\n  TextField,\n  CardContent,\n  Typography,\n  Card,\n  Link,\n  FormHelperText, FormControlLabel, Checkbox,\n} from '@material-ui/core';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  IAction,\n  IMap,\n  IConfig,\n} from 'ats-utils/src/Interfaces';\nimport {\n  compose,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  Map,\n  List,\n  fromJS,\n} from 'immutable';\nimport {\n  User,\n} from '../../models';\nimport {\n  makeSelectCollaborators,\n} from '../../modules/AccountModule/selectors';\nimport {\n  makeSelectSpec,\n} from '../../modules/SpecModule/selectors';\nimport Collaborator from '../../models/Collaborator';\nimport {\n  SPEC_TOOL_ID,\n  LOGIN_PATH,\n  WATTS_SPEC_ID,\n  BOBRICK_SPEC_ID,\n  LIXIL_SPEC_ID,\n  ACUDOR_SPEC_ID,\n  AOSMITH_SPEC_ID,\n  ZOELLER_SPEC_ID,\n  LOCHINVAR_SPEC_ID,\n  THANK_YOU,\n  AMPLITUDE_EVENT,\n  STERN_WILLIAMS_SPEC_ID,\n  FIAT_SPEC_ID,\n  PRIER_SPEC_ID,\n  FRANKE_SPEC_ID,\n  MISSION_RUBBER_SPEC_ID,\n  MORRIS_LEE_SPEC_ID,\n  SPECTRUM_SPEC_ID,\n  WILLIAMS_BROTHERS_SPEC_ID,\n  DELTA_COMMERCIAL_SPEC_ID,\n  SIGNUP_PATH,\n  PPP_SPEC_ID,\n  NU_AIR_SPEC_ID,\n  CRANE_SPEC_ID\n} from '../../constants';\nimport SignUpOrganizationForm, { SIGN_UP_ORG_FORM_NAME as signUpOrganizationFormName } from '../Forms/SignUpOrganizationForm';\nimport { Image, AppStyle } from '../../components';\nimport {\n  getFormValues,\n} from 'redux-form/immutable';\nimport { FORM_NAME as sighUpFirstStepFormName } from '../SignUpFirstStep';\nimport { RegisterUserAction, ResetRegisterUserAction } from '../../modules/AtsModule/actions';\nimport { StyleRules, WithTheme } from '@material-ui/core/styles';\nimport { makeSelectConfig, makeSelectRegisteredUser } from '../../modules/AtsModule/selectors';\nimport { push } from 'connected-react-router';\nimport classNames from 'classnames';\nimport CheckCircleRoundedIcon from '@material-ui/icons/CheckCircleRounded';\nimport { matchPath, RouteProps } from 'react-router';\nimport * as amplitude from '@amplitude/analytics-browser';\nimport withAmplitudeData, { WithAmplitudeData } from '../../hoc/withAmplitudeData';\nimport { AtsSvgCheckmark } from '../../components/AtsSvg/AtsSvgCheckmark';\nimport { AtsSvgSignupFooter } from '../../components/AtsSvg/AtsSvgSignupFooter';\nimport { atsAppLogoLookUp } from '../../pages/AuthPages/LoginPage';\nimport {makeSelectSession} from '../../modules/ApplicationModule/selectors';\nimport {ISession} from '../../modules/ApplicationModule/reducer';\nimport { makeSelectLocale } from '../../modules/LanguageModule/selectors';\n\ninterface IFormStepperState {\n  activeStep: number;\n  selectedRowTypeId: number;\n  roleName: string;\n  hasNoRole: boolean;\n  submitting: boolean;\n  saveDefaultSpec: boolean;\n  quickSpecTitle: string;\n}\n\ninterface IRoleType {\n  id: number;\n  value: string;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    background: theme.palette.common.white,\n    flexGrow: 1,\n  },\n  button: {\n    margin: theme.spacing(),\n  },\n  backButton: {\n    margin: theme.spacing(),\n  },\n  roleCard: {\n    width: 300,\n    textAlign: 'center',\n    margin: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`\n  },\n  selectedCheckIcon: {\n    color: theme.palette.primary.main,\n    position: 'absolute',\n    top: theme.spacing(1.5),\n    right: theme.spacing(1.5),\n  },\n  card: {\n    cursor: 'pointer',\n  },\n  cardContent: {\n    position: 'relative',\n  },\n  cardSelected: {\n    backgroundColor: theme.palette.primary[700] + '14',\n  },\n  roleInput: {\n    width: '100%',\n  },\n  stepperContainer: {\n    margin: '0 auto',\n  },\n  title: {\n    margin: `0 0 10px 50px`,\n  },\n  imageContainer: {\n    padding: '40px 50px',\n  },\n  stepContent: {\n    paddingLeft: theme.spacing(4),\n  },\n  signUpButtonContainer: {\n    margin: `${theme.spacing(4)}px 0`\n  },\n  returnLoginPage: {\n    textTransform: 'uppercase',\n    cursor: 'pointer',\n    marginTop: theme.spacing(4),\n  },\n  thanksTitle: {\n    margin: `${theme.spacing(3)}px 0 ${theme.spacing(2)}px 0`,\n  },\n  thanksBody: {\n    fontSize: '1em',\n    lineHeight: 2\n  },\n  thanksTextContainer: {\n    width: 750,\n    textAlign: 'center',\n  },\n  clickTheLink: {\n    color: 'rgba(0,0,0,0.87)',\n    fontWeight: 1000\n  }\n});\n\ninterface ISignUpSecondStepProps {\n\n}\n\ninterface IFormStepperProps extends ISignUpSecondStepProps {\n  dispatch: React.Dispatch<IAction>;\n  signUpOrganizationValues: Map<string, any>;\n  signUpFirstStepValues: Map<string, any>;\n  collaborators: Map<number, IMap<Collaborator>>;\n  config: IMap<IConfig>;\n  registeredUser: IMap<User>;\n  session: IMap<ISession>;\n  locale: string;\n}\n\ntype StepperPropsWithStyles = IFormStepperProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>> & RouteProps & WithAmplitudeData & WithTheme;\n\nexport const getTerms = ({\n    apiKey,\n    t\n}) => {\n  switch (apiKey) {\n    case SPEC_TOOL_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} ATS’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case WATTS_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Watts’ <Link href='https://www.watts.com/terms-of-use' target='_blank'>{t('signUp.termsOfService')}</Link> {t('signUp.and')} <Link href='https://www.watts.com/privacy-policy' target='_blank'>{t('signUp.privacyPolicy')}</Link></div>;\n    case BOBRICK_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Bobrick’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case LIXIL_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Lixil’s <Link href='https://www.lixil.com/en/terms_use/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case ACUDOR_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Acudor’s {t('signUp.termsOfService')}</div>;\n    case AOSMITH_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} A. O. Smith’s {t('signUp.termsOfService')}</div>;\n    case ZOELLER_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Zoeller’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case LOCHINVAR_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Lochinvar’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case STERN_WILLIAMS_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Stern Williams’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case FIAT_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} FIAT’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case PRIER_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} PRIER’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case FRANKE_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Franke’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case MISSION_RUBBER_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Mission Rubber’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case LOCHINVAR_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Lochinvar’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case MORRIS_LEE_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Morris Lee’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case SPECTRUM_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Spectrum’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case WILLIAMS_BROTHERS_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Williams Brothers’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case DELTA_COMMERCIAL_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Delta Commercial’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case PPP_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} PPP’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case NU_AIR_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Nu-Air’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    case CRANE_SPEC_ID:\n      return <div>{t('signUp.bySigningUpYouAgreeTo')} Crane Supply’s <Link href='https://www.atssoftware.com/terms-conditions/' target='_blank'>{t('signUp.termsOfService')}</Link></div>;\n    default:\n      return '';\n  }\n};\nclass SignUpSecondStep extends React.Component<StepperPropsWithStyles, IFormStepperState> {\n  public state = {\n    activeStep: 0,\n    selectedRowTypeId: -1,\n    roleName: '',\n    hasNoRole: false,\n    submitting: false,\n    saveDefaultSpec: false,\n    quickSpecTitle: '',\n  };\n\n  private roleTypes: List<IMap<IRoleType>> = fromJS([\n    {\n      id: 1,\n      value: this.props.t('signUp.ownerPartner'),\n    },\n    {\n      id: 2,\n      value: this.props.t('signUp.designerArchitectSpecifier'),\n    },\n    {\n      id: 3,\n      value: this.props.t('signUp.generalManager'),\n    },\n    {\n      id: 4,\n      value: this.props.t('signUp.projectManager'),\n    },\n    {\n      id: 5,\n      value: this.props.t('signUp.purchasing')\n    },\n    {\n      id: 6,\n      value: this.props.t('signUp.businessDevelopmentMarketing')\n    },\n    {\n      id: 7,\n      value: this.props.t('signUp.internApprentice')\n    },\n  ]);\n\n\n  // public componentDidMount() {\n  //   const {\n  //     signUpFirstStepValues,\n  //     dispatch,\n  //   } = this.props;\n  //\n  //   // redirect to 'sign up page' if first step stuff is empty. not suppose to jump straight to the registration stepper\n  //   if (!signUpFirstStepValues) {\n  //     dispatch(push(SIGNUP_PATH));\n  //   }\n  // }\n\n  public componentDidMount() {\n    // a user registered earlier in this tab stays in the store (only the thank you page's login link clears it),\n    // so clear it when the stepper opens or the next sign up would never reach the thank you page\n    if (!matchPath(this.props.location.pathname, THANK_YOU)) {\n      this.props.dispatch(new ResetRegisterUserAction());\n    }\n  }\n\n  public componentDidUpdate(prevProps, prevState) {\n    const { registeredUser } = this.props;\n    // every successful sign up stores a new user map, so compare by reference to redirect on each one\n    // (the stepper stays mounted when going back from the thank you page, so a stale user can still be there)\n    if (registeredUser !== prevProps.registeredUser && registeredUser && registeredUser.size) {\n      this.props.dispatch(push(THANK_YOU));\n    }\n\n    if (this.state.hasNoRole && this.state.roleName) {\n      this.setState({ hasNoRole: false });\n    }\n  }\n\n  public handleClickNextButtonInStep2 = () => {\n    const { selectedRowTypeId, roleName } = this.state;\n    if (selectedRowTypeId !== -1 && (selectedRowTypeId !== 0 || roleName)) {\n      this.changeStep(1)();\n    } else {\n      this.setState({ hasNoRole: true });\n    }\n  }\n  public handleSignUp = async () => {\n    const {\n      roleName,\n      saveDefaultSpec,\n      quickSpecTitle\n    } = this.state;\n\n    const {\n      dispatch,\n      signUpOrganizationValues,\n      signUpFirstStepValues = Map(),\n      amplitudeData,\n      session,\n    } = this.props;\n\n    amplitude.logEvent(AMPLITUDE_EVENT.step3Final, amplitudeData());\n\n    this.setState({ submitting: true });\n\n    const valuesWithOrganization = roleName ? signUpOrganizationValues.set('jobTitle', roleName) : signUpOrganizationValues;\n\n    const mergedFormValues = signUpFirstStepValues.merge(valuesWithOrganization);\n\n    new Promise((resolve, reject) => (\n      dispatch(new RegisterUserAction({\n        user: mergedFormValues,\n        resolve,\n        reject,\n        moveSessionSpec: saveDefaultSpec,\n        guestSpecId: session.get('guestSpecId'),\n        guestSpecName: quickSpecTitle,\n      }))\n    ))\n    .then(() => this.setState({ submitting: false }))\n    .catch(() => this.setState({ submitting: false}));\n  }\n\n  public selectRoleType = (id: number, value?: string) => {\n\n    // 0 is other. so if 0 is selected, clear the custom role name field\n    if (id !== 0) {\n      this.setState({\n        roleName: ''\n      });\n    }\n    this.setState({\n      selectedRowTypeId: id,\n      roleName: value,\n    });\n  }\n\n  public handleCustomeRole = (event: React.ChangeEvent<HTMLInputElement>) => {\n    event.persist();\n    const value = event.target.value;\n    this.setState({\n      roleName: value\n    });\n  }\n\n  public SelectableCard = (selected: boolean, label: string) => {\n    const {\n      classes,\n    } = this.props;\n\n    // const roleTypeId = roleType.get('id');\n    // const roleTypeValue = roleType.get('value');\n    // const isSelected = this.state.selectedRowTypeId === roleTypeId ? true : false;\n\n    return (\n      <Card\n        className={classes.card}\n      >\n        <CardContent\n          className={classNames(selected ? [classes.cardContent, classes.cardSelected] : classes.cardContent)}\n          // className={classes.cardContent}\n        >\n          {\n            selected\n            ? <CheckCircleRoundedIcon\n                className={classes.selectedCheckIcon}\n              />\n            : undefined\n          }\n          {\n            <Typography\n              className={classes.labelTypography}\n            >\n              {label}\n            </Typography>\n          }\n        </CardContent>\n      </Card>\n    );\n  }\n\n  public toLoginPage = () => {\n    const {\n      dispatch\n    } = this.props;\n\n    // clears the store of the registered user so the registered success page will go away lol\n    dispatch(new ResetRegisterUserAction());\n    dispatch(push(LOGIN_PATH));\n  }\n\n  public StepperComponent = () => {\n    const {\n      t,\n      classes,\n      config,\n      amplitudeData,\n      dispatch\n    } = this.props;\n    const {\n      activeStep,\n      submitting,\n      roleName,\n      hasNoRole,\n      saveDefaultSpec,\n      quickSpecTitle\n    } = this.state;\n    const otherSelected = this.state.selectedRowTypeId === 0 ? true : false;\n\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    const hasInvalidCustomRole = hasNoRole && !(roleName && roleName.trim() !== '');\n\n    const terms = getTerms({\n      apiKey,\n      t\n    });\n    return (\n      <Grid\n        container={true}\n        className={classes.stepperContainer}\n      >\n        <Grid>\n          <Typography\n            className={classes.title}\n            variant='h5'\n          >\n            {t('signUp.tellUsAboutYourOrganization')}\n          </Typography>\n        </Grid>\n        <Stepper\n          activeStep={activeStep}\n          orientation='vertical'\n        >\n          <Step key={0}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t('signUp.basicOrganizationDetails')}</Typography>\n            </StepLabel>\n            <StepContent\n              className={classes.stepContent}\n            >\n              <Grid\n                container={true}\n              >\n                <Grid\n                  item={true}\n                  xs={12}\n                >\n                  <SignUpOrganizationForm\n                    nextStep={this.changeStep(1)}\n                    renderActionButtons={() => {\n                      return (\n                          <>\n                            <Button\n                                color='primary'\n                                onClick={() => dispatch(push(SIGNUP_PATH))}\n                            >\n                              {t('formButtons.back')}\n                            </Button>\n                            <Button\n                                variant='contained'\n                                type='submit'\n                                className={classes.button}\n                                color='primary'\n                            >\n                              {t('formButtons.next')}\n                            </Button>\n                          </>\n                      );\n                    }}\n                  />\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={1}>\n            <StepLabel>\n              <Typography variant='subtitle1' style={{ color: 'inherit' }}>{t('signUp.whatsYourRole')}</Typography>\n            </StepLabel>\n            <StepContent>\n              <Grid\n                container={true}\n                item={true}\n                direction='column'\n                xs={12}\n              >\n                <Grid\n                  container={true}\n                  justify='center'\n                  alignItems='center'\n                >\n                  <Grid\n                    container={true}\n                  >\n                    {\n                      this.roleTypes.map((roleType: IMap<IRoleType>) => {\n                        const roleTypeId = roleType.get('id');\n                        const roleTypeValue = roleType.get('value');\n                        const isSelected = this.state.selectedRowTypeId === roleTypeId ? true : false;\n\n                        return <Grid\n                            key={roleTypeId}\n                            className={classes.roleCard}\n                            onClick={() => {\n                              this.selectRoleType(roleTypeId, roleTypeValue);\n                              amplitude.logEvent(AMPLITUDE_EVENT.step3Role, amplitudeData());\n                            }}\n                          >\n                            {this.SelectableCard(isSelected, roleTypeValue)}\n                          </Grid>;\n                      }).push(\n                        <Grid\n                          key='other'\n                          className={classes.roleCard}\n                          onClick={() => this.selectRoleType(0)}\n                        >\n                          {this.SelectableCard(otherSelected, 'Other')}\n                        </Grid>\n                      )\n                    }\n                    {\n                      otherSelected && <Grid\n                        className={classes.roleCard}\n                      >\n                        <TextField\n                          className={classes.roleInput}\n                          id='customeRole'\n                          label={t('signUp.yourRole')}\n                          value={roleName}\n                          onChange={this.handleCustomeRole}\n                          autoComplete='no'\n                          type='text'\n                          name={Date.now().toString()}\n                          required={true}\n                          error={hasInvalidCustomRole}\n                          helperText={hasInvalidCustomRole ? t('errors.isNotEmptyString') : ''}\n                        />\n                      </Grid>\n                    }\n                  </Grid>\n                </Grid>\n                { hasNoRole && <FormHelperText id='helper-text' error={hasNoRole} style={{ marginLeft: 16 }}>{t('signUp.pleaseSelectARole')}</FormHelperText> }\n                <Grid\n                  container={true}\n                  className={classes.signUpButtonContainer}\n                >\n                  <Button\n                    onClick={this.changeStep(-1)}\n                    color='primary'\n                    className={classes.backButton}\n                  >\n                    {t('formButtons.back')}\n                  </Button>\n                  <Button\n                    onClick={this.handleClickNextButtonInStep2}\n                    variant='contained'\n                    className={classes.button}\n                    color='primary'\n                    disabled={submitting}\n                  >\n                    {t('formButtons.next')}\n                  </Button>\n                </Grid>\n              </Grid>\n            </StepContent>\n          </Step>\n          <Step key={2}>\n            <StepLabel>\n              {t('guestLoginModal.signUpStep2SaveDefaultSpecs')}\n            </StepLabel>\n            <StepContent>\n              <div>\n                <Typography variant='body2' style={{ color: 'rgba(0, 0, 0, 0.87)', fontSize: '14.6px', marginTop: '8px', marginBottom: '8px' }}>{t('guestLoginModal.signUpStep2SaveDefaultSpecsDescription')}</Typography>\n                <FormControlLabel\n                    control={<Checkbox color='primary' checked={saveDefaultSpec} onChange={(event) => this.setState({ saveDefaultSpec: event.target.checked })} />}\n                    label={t('guestLoginModal.signUpStep2SaveDefaultSpecsCheckBox')}\n                />\n                {saveDefaultSpec ? <TextField\n                    className={classes.roleInput}\n                    label={t('guestLoginModal.quickSpecTitle')}\n                    value={quickSpecTitle}\n                    onChange={(event) => this.setState({\n                      quickSpecTitle: event.target.value\n                    })}\n                    autoComplete='no'\n                    required={true}\n                /> : null}\n                <div>\n                  <Button\n                      onClick={this.changeStep(-1)}\n                      color='primary'\n                      className={classes.backButton}\n                  >\n                    {t('formButtons.back')}\n                  </Button>\n                  <Button\n                      onClick={this.handleSignUp}\n                      variant='contained'\n                      className={classes.button}\n                      color='primary'\n                      disabled={submitting || (saveDefaultSpec && !quickSpecTitle)}\n                  >\n                    {t('signUp.signUp')}\n                  </Button>\n                </div>\n                <div style={{ marginTop: '32px' }}>\n                    {terms}\n                </div>\n              </div>\n            </StepContent>\n          </Step>\n        </Stepper>\n      </Grid>\n    );\n  }\n\n  public RegisterSuccess = () => {\n    const {\n      registeredUser,\n      classes,\n      t,\n      theme,\n    } = this.props;\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        wrap='nowrap'\n        alignItems='center'\n      >\n        <Grid\n          container={true}\n          justify='center'\n        >\n          <AtsSvgCheckmark\n            fill={theme.palette.primary[200]}\n          />\n        </Grid>\n        <Grid\n          container={true}\n          direction='column'\n          wrap='nowrap'\n          alignContent='center'\n          className={classes.thanksTextContainer}\n        >\n          <Typography\n            className={classes.thanksTitle}\n            variant='h2'\n          >\n            {t('signUp.checkYourEmail')}\n          </Typography>\n          <Typography\n            className={classes.thanksBody}\n            variant='body2'\n          >\n            {t('signUp.thanksForSigningUp')}. {t('signUp.confirmationEmail')} {registeredUser && registeredUser.get('email') ? registeredUser.get('email') : t('signUp.you')}.\n          </Typography>\n          <Typography\n            className={classes.thanksBody}\n            variant='body2'\n          >\n            {t('signUp.completeSignup.makeSure')} <span className={classes.clickTheLink}>{t('signUp.completeSignup.clickTheLink')}</span> {t('signUp.completeSignup.andComplete')}.\n          </Typography>\n          <Link\n            className={classes.returnLoginPage}\n            onClick={this.toLoginPage}\n          >\n            {t('signUp.returnToLoginPage')}\n          </Link>\n        </Grid>\n      </Grid>\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n      config,\n      t,\n      theme,\n      locale,\n    } = this.props;\n\n    const logoPropsConfig = (config.get(`loginLogoProps${locale === 'fr' ? '_fr' : ''}`) || config.get('loginLogoProps') || config.get('logoProps') || Map<string, any>()).toJS();\n    const apiKey = config.getIn(['atsApiOptions', 'apiKey'], '');\n\n    const urlMatches = matchPath(this.props.location.pathname, THANK_YOU);\n\n    return (\n      <AppStyle\n        style={{\n          overflowY: 'scroll',\n        }}\n      >\n        <Grid\n          className={classes.root}\n          container={true}\n          direction='column'\n          justify='space-between'\n        >\n          <Grid\n            container={true}\n            className={classes.imageContainer}\n          >\n            <div>\n              <Image\n                src={atsAppLogoLookUp[apiKey]?.logo || ''}\n                width={atsAppLogoLookUp[apiKey]?.width || '230px'}\n                aspectRatio='31.76%'\n                backgroundStyle={atsAppLogoLookUp[apiKey]?.backgroundStyle}\n                {...logoPropsConfig}\n              />\n            </div>\n          </Grid>\n          {\n            urlMatches\n            ? <this.RegisterSuccess/>\n            : <this.StepperComponent/>\n          }\n          {/* Footer image */}\n          <Grid\n            container={true}\n            justify='center'\n          >\n            <AtsSvgSignupFooter fill={theme.palette.primary[800]}/>\n          </Grid>\n        </Grid>\n      </AppStyle>\n    );\n  }\n  private changeStep = (index: number, absolute: boolean = false) => () => {\n    this.setState({\n      activeStep: absolute ? index : (this.state.activeStep + index)\n    });\n  }\n}\n\nconst mapStateToProps = (state: any, props: ISignUpSecondStepProps) => {\n\n  return {\n    ...createStructuredSelector({\n      signUpOrganizationValues: getFormValues(signUpOrganizationFormName),\n      signUpFirstStepValues: getFormValues(sighUpFirstStepFormName),\n      collaborators: makeSelectCollaborators(),\n      selectedSpec: makeSelectSpec(),\n      config: makeSelectConfig(),\n      registeredUser: makeSelectRegisteredUser(),\n      session: makeSelectSession(),\n      locale: makeSelectLocale(),\n    })(state)\n  };\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\n\nexport default compose<React.ComponentClass<ISignUpSecondStepProps>> (\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n  withAmplitudeData,\n)(SignUpSecondStep);\n","import {\n  fromJS,\n  List,\n} from 'immutable';\nimport {\n  GetAllCategoriesSucceededAction,\n  GetAllManufacturersSucceededAction,\n  GetLeadSourcesSucceededAction,\n  GetPimStatusesSucceededAction,\n  GetTestStatusesSucceededAction,\n  GetXrefTypesSucceededAction,\n  ListActionTypes,\n  UpdateDetailedManufacturerMapAction,\n} from './actions';\nimport {\n  IAction,\n  IMap,\n  IMapNonRecursive,\n} from 'ats-utils/src/Interfaces';\nimport { Category, ListItem, Manufacturer, Status } from '../../models';\n\nexport interface ILeadSource {\n  id: number;\n  value: string;\n}\n\nexport interface IDetailedManufacturer {\n  name: string;\n  logoId: string;\n}\n\nexport interface IListReducerState {\n  leadSources: List<IMap<ILeadSource>>;\n  manufacturers: List<IMap<Manufacturer>>;\n  detailedManufacturerMap: Map<string, IMap<IDetailedManufacturer>>;\n  testStatuses: List<IMap<Status>>;\n  pimStatuses: List<IMap<Status>>;\n  xrefTypes: List<IMap<ListItem>>;\n  categories: List<IMap<Category>>;\n}\n\nconst INITIAL_STATE = fromJS({\n  leadSources: List<IMap<ILeadSource>>(),\n  manufacturers: List<IMap<Manufacturer>>(),\n  detailedManufacturerMap: {},\n  testStatuses: null,\n  pimStatuses: null,\n  xrefTypes: [],\n  categories: List<IMap<Category>>(),\n});\n\nexport const reducer = (state: IMapNonRecursive<IListReducerState> = INITIAL_STATE, action: IAction) => {\n  switch (action.type) {\n    case ListActionTypes.GET_PIM_STATUSES_SUCCEEDED: {\n      const {pimStatuses} = action as GetPimStatusesSucceededAction;\n      return state.set('pimStatuses', pimStatuses);\n    }\n    case ListActionTypes.GET_TEST_STATUSES_SUCCEEDED: {\n      const {testStatuses} = action as GetTestStatusesSucceededAction;\n      return state.set('testStatuses', testStatuses);\n    }\n    case ListActionTypes.GET_LEAD_SOURCES_SUCCEEDED: {\n      const {leadSources} = action as GetLeadSourcesSucceededAction;\n      return state.withMutations((ctx: IMapNonRecursive<IListReducerState>) => {\n        ctx.set('leadSources', leadSources);\n      });\n    }\n    case ListActionTypes.GET_ALL_MANUFACTURERS_SUCCEEDED: {\n      const {manufacturers} = action as GetAllManufacturersSucceededAction;\n      return state.set('manufacturers', manufacturers);\n    }\n    case ListActionTypes.GET_XREF_TYPES_SUCCEEDED: {\n      const {xrefTypes} = action as GetXrefTypesSucceededAction;\n      return state.set('xrefTypes', xrefTypes);\n    }\n    case ListActionTypes.UPDATE_DETAILED_MANUFACTURER_MAP: {\n      const {payload} = action as UpdateDetailedManufacturerMapAction;\n      return state.setIn(['detailedManufacturerMap', payload.manufacturer], payload.detailedManufacturer);\n    }\n    case ListActionTypes.GET_ALL_CATEGORIES_SUCCEEDED: {\n      const {categories} = action as GetAllCategoriesSucceededAction;\n      return state.set('categories', categories);\n    }\n\n    default:\n      return state;\n  }\n};\n\nexport default reducer;\n","import {\n  call,\n  put,\n  takeLatest,\n} from 'redux-saga/effects';\nimport {\n  GetAllCategoriesSucceededAction,\n  GetAllManufacturersSucceededAction,\n  GetLeadSourcesSucceededAction,\n  GetPimStatusesSucceededAction,\n  GetTestStatusesSucceededAction,\n  GetXrefTypesSucceededAction,\n  ListActionTypes,\n} from './actions';\nimport { apiCallWaitingAction, atsApiCallWaitingAction } from '../AtsModule/saga';\nimport { AtsApiCallAction } from '../AtsModule/actions';\nimport {\n  fromJS,\n  List\n} from 'immutable';\nimport { ILeadSource } from './reducer';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport { Category, ListItem, Manufacturer, Status } from '../../models';\n\ninterface IResponse {\n  data: any;\n  err: Error;\n}\n\nexport function* getPimStatuses() {\n  const {data, err}: IResponse = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getPimStatuses',\n      body: {}\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const pimStatuses: List<IMap<Status>> = immutableData.getIn(['payload', 'list', 'pimStatus']);\n    if (pimStatuses == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetPimStatusesSucceededAction(pimStatuses));\n    }\n  } else {\n    console.error('list getPimStatuses API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getTestStatuses() {\n  const {data, err}: IResponse = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getTestStatuses',\n      body: {}\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const testStatuses: List<IMap<Status>> = immutableData.getIn(['payload', 'list', 'testStatus']);\n    if (testStatuses == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetTestStatusesSucceededAction(testStatuses));\n    }\n  } else {\n    console.error('list getTestStatuses API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getLeadSources() {\n  const {data, err}: IResponse = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: [\n      {\n        service: 'list',\n        endpoint: 'getLeadSources', // operationId\n      },\n    ],\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const leadSources: List<IMap<ILeadSource>> = immutableData.getIn(['payload', 'list', 'leadSource']);\n    if (!leadSources) {\n      console.error('getLeadSources: No response', immutableData); // tslint:disable-line\n    } else {\n      yield put(new GetLeadSourcesSucceededAction(leadSources));\n    }\n  } else {\n    console.error('failed to getLeadSources', {err}); // tslint:disable-line\n  }\n}\n\nexport function* getAllManufacturers() {\n  const {data, err}: IResponse = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getManufacturers',\n      body: {}\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const manufacturers: List<IMap<Manufacturer>> = immutableData.getIn(['payload', 'list', 'manufacturers']);\n    if (manufacturers == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAllManufacturersSucceededAction(manufacturers));\n    }\n\n  } else {\n    console.error('list getManufacturers API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getXrefTypes() {\n  const {data, err}: IResponse = yield call(apiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getXrefTypes',\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const xrefTypes: List<IMap<ListItem>> = immutableData.getIn(['payload', 'list', 'xrefTypes']);\n    if (xrefTypes == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetXrefTypesSucceededAction(xrefTypes));\n    }\n\n  } else {\n    console.error('list getXrefTypes API failed', err); // tslint:disable-line\n  }\n}\n\nexport function* getAllCategories() {\n  const {data, err}: IResponse = yield call(atsApiCallWaitingAction, new AtsApiCallAction({\n    payload: {\n      service: 'list',\n      endpoint: 'getProductCategories',\n      body: {}\n    }\n  }));\n  if (data) {\n    const immutableData = fromJS(data);\n    const categories: List<IMap<Category>> = immutableData.getIn(['payload', 'list', 'productCategories']);\n    if (categories == null) {\n      console.error('Invalid response', data); // tslint:disable-line\n    } else {\n      yield put(new GetAllCategoriesSucceededAction(categories));\n    }\n\n  } else {\n    console.error('list getCategories API failed', err); // tslint:disable-line\n  }\n}\n\nexport default function* listSaga() {\n  yield takeLatest(ListActionTypes.GET_PIM_STATUSES, getPimStatuses);\n  yield takeLatest(ListActionTypes.GET_TEST_STATUSES, getTestStatuses);\n  yield takeLatest(ListActionTypes.GET_LEAD_SOURCES, getLeadSources);\n  yield takeLatest(ListActionTypes.GET_ALL_MANUFACTURERS, getAllManufacturers);\n  yield takeLatest(ListActionTypes.GET_XREF_TYPES, getXrefTypes);\n  yield takeLatest(ListActionTypes.GET_ALL_CATEGORIES, getAllCategories);\n}\n","/*\n * ListModule\n * Put this component somewhere in your tree to include project reducer / sagas\n *\n */\n\nimport React from 'react';\nimport Debug from '../../containers/Debug';\nimport Hide from '../../components/Hide';\nimport { IAction } from 'ats-utils/src/Interfaces/index';\nimport { createStructuredSelector } from 'reselect';\nimport { selectReducerState } from './selectors';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { injectReducer, injectSaga } from '../../utils';\nimport { DEFAULT_MOUNT_POINT } from './constants';\nimport reducer from './reducer';\nimport saga from './saga';\n\ninterface IListModuleComponentProps {\n}\ninterface IListModuleProps extends IListModuleComponentProps {\n  reducerState;\n}\nclass ListModule extends React.Component<IListModuleProps, any> {\n  public render() {\n    return (\n      <div style={{display: 'none'}}>\n        <Debug\n          delayedRender={() => {\n            return <Hide\n              show={true}\n              title={'debug'}\n            />;\n          }}\n        />\n      </div>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => ({\n  dispatch\n});\n\nconst mapStateToProps = (originalState: any) => createStructuredSelector({\n    reducerState: selectReducerState(),\n  })(originalState);\n\nexport default compose<React.ComponentClass<IListModuleComponentProps>>(\n  connect(mapStateToProps, mapDispatchToProps),\n  injectReducer({ key: DEFAULT_MOUNT_POINT, reducer }),\n  injectSaga({ key: DEFAULT_MOUNT_POINT, saga }),\n)(ListModule);","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  Card,\n  CardContent,\n  Typography,\n  MenuItem,\n  IconButton,\n} from '@material-ui/core';\nimport {\n  withStyles,\n  WithStyles,\n} from '@material-ui/core';\nimport {\n  StyleRules,\n} from '@material-ui/core/styles';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  makeSelectDrawing,\n} from '../../modules/SpecModule/selectors';\nimport {\n  Product,\n  Drawing,\n} from '../../models';\nimport {\n  Image,\n} from '../../components';\nimport FieldTextField, { IFieldTextFieldComponentProps } from '../FieldTextField';\nimport FieldSelect, { IFieldSelectComponentProps } from '../FieldSelect';\nimport {\n  BaseFieldProps\n} from 'redux-form';\nimport {\n  Field,\n  reduxForm,\n} from 'redux-form/immutable';\nimport { makeSelectLocationPathname, makeSelectLocationSearch, makeSelectLocationHash } from '../../modules/RouterModule/selectors';\n\ninterface IProductBrochureSpecDrawingProductComponentProps {\n  product: IMap<Product>;\n  drawingId: number;\n  inPage?: boolean;\n  dragHandleProps?: any;\n}\n\ninterface IProductBrochureSpecDrawingProductProps extends IProductBrochureSpecDrawingProductComponentProps {\n  drawing: IMap<Drawing>;\n  dispatch: React.Dispatch<IAction>;\n}\n\ntype ProjectDetailSpecProps = IProductBrochureSpecDrawingProductProps & WithStyles<keyof ReturnType<typeof styles>>;\n\nclass ProductBrochureSpecDrawingProduct extends React.Component<ProjectDetailSpecProps, {}> {\n\n  public render() {\n    const {\n      product,\n      classes,\n      inPage,\n      dragHandleProps,\n    } = this.props;\n\n    if (product == null) {\n      return <div>\n        no product given\n      </div>;\n    }\n\n    const imgSize = 80;\n    const media = product.getIn(['file', 'images', 'main', 'fileId']) + `|resize:${imgSize},${imgSize}`;\n\n    const productContentFunction = !inPage\n      ? <Grid\n          item={true}\n        >\n          <Field<BaseFieldProps<IFieldSelectComponentProps>>\n            name='printPage'\n            component={FieldSelect}\n            props={{\n              inputProps: {\n                label: 'Page #'\n              },\n              formControlProps: {\n                classes: {\n                  root: classes.drawingDisplaySelect\n                },\n              }\n            }}\n          >\n            <MenuItem\n              value='page1'\n            >\n              Page 1\n            </MenuItem>\n            <MenuItem\n              value='page2'\n            >\n              Page 2\n            </MenuItem>\n          </Field> ;\n        </Grid>\n      : <Grid\n          container={true}\n          direction='row'\n          wrap='nowrap'\n          spacing={2}\n        >\n          {/* TODO need to pass a unique key into name. maybe from the page number index */}\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            component={FieldTextField}\n            name={`productBudgetPrice`}\n            props={{\n              inputProps: {\n                style: {height: '30px', minWidth: '65px'}\n              },\n              label: 'Budget Price',\n            }}\n          />\n          <Field<BaseFieldProps<IFieldTextFieldComponentProps>>\n            component={FieldTextField}\n            name={`productQuantity`}\n            props={{\n              inputProps: {\n                style: {height: '30px', minWidth: '65px'}\n              },\n              label: 'Quantity',\n            }}\n          />\n        </Grid>;\n\n    const productDeleteButton = inPage ? <IconButton>\n        <FontAwesomeIcon\n          icon='trash-alt'\n        />\n      </IconButton> : null;\n\n    return (\n      <div className={classes.productContainer}>\n        <Card\n          className={classes.cardContainer}\n          {...dragHandleProps}\n        >\n          <Grid\n            container={true}\n            direction='row'\n            justify='flex-start'\n            wrap='nowrap'\n            className={classes.cardContent}\n          >\n            <CardContent className={classes.imageContainer}>\n              <div\n                className={classes.stepName}\n              >\n                {product.get('categoryName')}\n              </div>\n              {\n                <Image\n                  src={media || ''}\n                  width={`${imgSize}px`}\n                  aspectRatio={'100%'}\n                  fromService={true}\n                />\n              }\n            </CardContent>\n\n            <CardContent className={classes.detailsContainer}>\n              <Grid // delete button\n                xs={12}\n                item={true}\n                className={classes.productActionButtonsContainer}\n              >\n                {\n                  productDeleteButton\n                }\n              </Grid>\n              <Grid // title\n                xs={12}\n                item={true}\n                className={classes.productName}\n              >\n                {product.get('productNumber')}\n              </Grid>\n\n              <Grid // specs go here\n                xs={12}\n                item={true}\n                container={true}\n                direction='column'\n                className={classes.productNumber}\n              >\n                <Grid\n                  item={true}\n                >\n                  <Typography>\n                    {product.get('productNumber')}\n                  </Typography>\n                </Grid>\n                {\n                  productContentFunction\n                }\n              </Grid>\n            </CardContent>\n          </Grid>\n        </Card>\n      </div>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    padding: 20,\n  },\n  iconButton: {\n    fontSize: '12px',\n  },\n  cardContent: {\n    position: 'relative',\n  },\n  cardActionContainer: {\n    position: 'absolute',\n    right: 0,\n  },\n  imageContainer: {\n    padding: `${theme.spacing() * 1}px ${theme.spacing() * 1}px ${theme.spacing() * 4}px ${theme.spacing() * 3.5}px`,\n  },\n  detailsContainer: {\n    padding: theme.spacing() * 1,\n    flexWrap: 'nowrap',\n    width: '100%',\n  },\n  stepName: {\n    borderRadius: 15,\n    backgroundColor: theme.palette.primary[400],\n    color: theme.palette.common.white,\n    padding: 5,\n    textAlign: 'center',\n    display: 'block',\n    marginBottom: 10,\n    marginTop: 20,\n  },\n  productName: {\n    marginBottom: theme.spacing() * 2,\n  },\n  productNumber: {\n    fontSize: '14px',\n  },\n  productActionButtonsContainer: {\n    alignSelf: 'flex-start',\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'flex-end',\n  },\n  productContainer: {\n    margin: 10,\n    minWidth: 390,\n    width: 390,\n    maxWidth: 390,\n    '&:first-child': {\n      marginLeft: 1,\n    },\n    '&:last-child': {\n      marginRight: 0,\n    },\n  },\n  cardContainer: {\n    margin: '10px',\n  },\n  drawingDisplaySelect: {\n    minWidth: theme.spacing() * 12,\n  },\n});\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nconst mapStateToProps = (state: any, props: IProductBrochureSpecDrawingProductComponentProps) => {\n  const drawingId = props.drawingId;\n  return createStructuredSelector({\n    drawing: makeSelectDrawing({drawingId}),\n    pathname: makeSelectLocationPathname(),\n    search: makeSelectLocationSearch(),\n    hash: makeSelectLocationHash(),\n  })(state);\n};\n\nexport default compose<React.ComponentClass<IProductBrochureSpecDrawingProductComponentProps>>(\n  withStyles(styles),\n  reduxForm({\n    form: 'yoloForm',\n  }),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductBrochureSpecDrawingProduct);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n  Grid,\n  Paper,\n  Typography,\n  FormControl,\n  FormControlLabel,\n  FormLabel,\n  Radio,\n  RadioGroup,\n} from '@material-ui/core';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\n// import {\n//   FontAwesomeIcon\n// } from '@fortawesome/react-fontawesome';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  makeSelectDrawing,\n} from '../../modules/SpecModule/selectors';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  UpdateDrawingAction,\n} from '../../modules/SpecModule/actions';\nimport {\n\tProduct,\n\tDrawing,\n\tMissingRule\n} from '../../models';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n//  Field,\n \treduxForm,\n//  formValueSelector,\n} from 'redux-form/immutable';\nimport {\n  List\n} from 'immutable';\nimport {\n \tInjectedFormProps,\n} from 'redux-form';\nimport {\n  Droppable,\n\tDragDropContext,\n  Draggable,\n} from 'react-beautiful-dnd';\nimport ProductBrochureSpecDrawingProduct from '../ProductBrochureSpecDrawingProduct';\n\nconst styles = (theme: Theme) => ({\n  ProductStepBox: {\n    height: theme.spacing() * 6,\n    width: theme.spacing() * 6,\n    borderRadius: theme.shape.borderRadius,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    fontSize: '0.8rem',\n    border: '1px solid lightgrey',\n  },\n  stepName: {\n    margin: `${theme.spacing()}px 0`,\n  },\n  formControl: {\n    margin: theme.spacing() * 3,\n  },\n  group: {\n    margin: `${theme.spacing()}px 0`,\n  },\n  radioContainer: {\n  },\n  dropContainer: {\n    width: '100%',\n    height: '100%',\n  },\n});\n\ninterface IProductBrochurePages {\n  product?: IMap<Product>;\n  step?: IMap<MissingRule>;\n  lastStep?: IMap<MissingRule>;\n  onClick?: () => void;\n  dispatch: React.Dispatch<IAction>;\n  selectedDrawing: IMap<Drawing>;\n}\n\ninterface IProductBrochurePagesState {\n  value: string;\n\titems: Array<Product>;\n}\n\ntype ProductBrochurePagesProps = IProductBrochurePages & InjectedFormProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\n\n\nclass ProductBrochurePages extends React.Component<ProductBrochurePagesProps, IProductBrochurePagesState> {\n  public state = {\n    value: '1',\n\t\titems: []\n  };\n\n  public handleChange = (event: any) => {\n    this.setState({ value: event.target.value });\n  }\n\n\tpublic updateProductOrder = (newItems: any) => {\n    const {\n      dispatch,\n      selectedDrawing,\n    } = this.props;\n\n    dispatch(new UpdateDrawingAction({\n      drawingId: selectedDrawing.get('id'),\n      drawing: selectedDrawing.update('products', List(),\n        (productList: List<IMap<Product>>) =>\n          productList = newItems\n        )\n    }));\n  }\n\n  public reorder = (list: any, startIndex: any, endIndex: any) => {\n    const result = Array.from(list);\n    const [removed] = result.splice(startIndex, 1);\n    result.splice(endIndex, 0, removed);\n\n    return result;\n  }\n\n  public onDragEnd = (result: any, newItemOrder: any) => {\n    if (!result.destination) {\n      return;\n    };\n\n\t\tconst newItems: any = this.reorder(\n      newItemOrder,\n      result.source.index,\n      result.destination.index\n    );\n\n    this.setState({ items: newItems });\n\n\t\tthis.updateProductOrder(newItems);\n  }\n\n\tpublic getItemStyle = (isDragging: boolean, draggableStyle: object) => ({\n    // some basic styles to make the items look a bit nicer\n    userSelect: 'none',\n    margin: `0 0px 0 0`,\n\n    // change background colour if dragging\n    background: isDragging ? 'lightgreen' : 'white',\n\n    // styles we need to apply on draggables\n    ...draggableStyle,\n  })\n\n\tpublic getListStyle = (isDraggingOver: any) => ({\n\t\tbackground: isDraggingOver ? 'rgba(0,255,0,0.5)' : 'none',\n\t\tdisplay: 'flex',\n\t\tpadding: 0,\n\t\toverflow: 'auto',\n\t})\n\n\tpublic generateProductElements = (items: any) => {\n    const {\n      selectedDrawing,\n    } = this.props;\n\n    return items.map(\n      (product: IMap<Product>, index: number) => (\n        <Draggable\n          key={`${product.get('id')}-${index}`}\n          draggableId={`${product.get('id')}-${index}`}\n          index={index}\n        >\n          {(provided: any, snapshot: any) => (\n            <div\n              ref={provided.innerRef}\n              {...provided.draggableProps}\n              style={this.getItemStyle(\n                snapshot.isDragging,\n                provided.draggableProps.style\n              )}\n            >\n              <ProductBrochureSpecDrawingProduct\n                product={product}\n                drawingId={selectedDrawing.get('id')}\n                dragHandleProps={provided.dragHandleProps}\n                inPage={true}\n              />\n            </div>\n          )}\n        </Draggable>\n      )\n    );\n  }\n\n  public render() {\n    const {\n      classes,\n\t\t\tselectedDrawing,\n    } = this.props;\n    // const media = product ? `${product.getIn(['media', 'images', 'main'])}|resize:100,100` : '';\n\n\n    // TODO switch 'selectedDrawing' to the new stuff in the store after a product is dragged in\n\t\tconst items = this.state.items.length > 0\n      ? this.state.items\n      : selectedDrawing.get('products');\n\n    return (\n      <Paper>\n        <Grid\n          container={true}\n          direction='column'\n        >\n          <Grid\n            container={true}\n            wrap='nowrap'\n            justify='space-between'\n          >\n            <Typography>Pages</Typography>\n            <Grid\n              item={true}\n              className={classes.radioContainer}\n            >\n              <FormControl className={classes.formControl}>\n                <FormLabel>Items per page</FormLabel>\n                <RadioGroup\n                  aria-label='Items per page'\n                  name='itemsPerpage'\n                  className={classes.group}\n                  value={this.state.value}\n                  style={{flexDirection: 'row'}}\n                  onChange={this.handleChange}\n                >\n                  <FormControlLabel value='1' control={<Radio />} label='1' />\n                  <FormControlLabel value='2' control={<Radio />} label='2' />\n                  <FormControlLabel value='4' control={<Radio />} label='4' />\n                  <FormControlLabel value='6' control={<Radio />} label='6' />\n                </RadioGroup>\n              </FormControl>\n\n            </Grid>\n          </Grid>\n          <Grid\n            container={true}\n            justify='center'\n          >\n            <Grid item={true} className={classes.ProductStepBox} style={{margin: '7px 0px 0px 0px'}}>\n              <Droppable\n                droppableId={'printPages'}\n              >\n                {(provided, snapshot) => (\n                  <div\n                    ref={provided.innerRef}\n                    style={this.getListStyle(snapshot.isDraggingOver)}\n                    className={classes.dropContainer}\n                  >\n                    <Typography>Page 1 0/4</Typography>\n                  </div>\n                )}\n              </Droppable>\n            </Grid>\n          </Grid>\n\n          <Grid\n            container={true}\n          >\n            <DragDropContext\n              onDragEnd={(e) => this.onDragEnd(e, items)}\n            >\n              <Droppable\n                droppableId={'printPages'}\n                direction={'horizontal'}\n              >\n                {(provided: any, snapshot: any) => (\n                  <div\n                    ref={provided.innerRef}\n                    style={this.getListStyle(snapshot.isDraggingOver)}\n                  >\n                    {this.generateProductElements(items)}\n                  </div>\n                )}\n              </Droppable>\n            </DragDropContext>\n          </Grid>\n        </Grid>\n      </Paper>\n    );\n  }\n}\n\nconst mapStateToProps = createStructuredSelector({\n  selectedDrawing: makeSelectDrawing(),\n});\n\nexport default compose<React.ComponentClass<{}>>(\n  withStyles(styles),\n  connect(mapStateToProps),\n  withTranslation('translations'),\n  reduxForm({\n    form: 'productBrochure',\n    destroyOnUnmount: false,\n    initialValues: {}\n  }),\n)(ProductBrochurePages);\n","/* tslint:disable */\nimport * as React from 'react';\nimport {\n  AppBar,\n  Tabs,\n  Tab,\n  Theme,\n  WithStyles,\n  withStyles,\n  Grid,\n  Button,\n  Typography,\n  Paper,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  FontAwesomeIcon\n} from '@fortawesome/react-fontawesome';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  compose,\n  Dispatch,\n  AnyAction,\n} from 'redux';\nimport {\n  connect\n} from 'react-redux';\nimport {\n  List,\n} from 'immutable';\nimport {\n  IAction,\n  IMap,\n} from 'ats-utils/src/Interfaces';\nimport {\n  withTranslation,\n  WithTranslation,\n} from 'react-i18next';\nimport {\n  makeSelectSelectedSpecId,\n  makeSelectDrawings,\n} from '../../modules/SpecModule/selectors';\nimport {\n  makeSelectProject,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  Drawing,\n  Project,\n  Product,\n} from '../../models';\nimport ProductBrochurePages from '../../components/ProductBrochurePages';\nimport {\n  DragDropContext,\n  Droppable,\n  Draggable,\n  DropResult,\n  DraggingStyle,\n  NotDraggingStyle,\n} from 'react-beautiful-dnd';\n// import { List } from 'immutable';\nimport ProductBrochureSpecDrawingProduct from '../../components/ProductBrochureSpecDrawingProduct';\n\nimport {\n  PROJECT_DOWNLOAD_PATH,\n} from '../../constants';\nimport {\n  makeSelectLocationPathname,\n  makeSelectLocationSearch,\n  makeSelectLocationHash,\n} from '../../modules/RouterModule/selectors';\nimport { push } from 'connected-react-router';\n\ninterface IProductBrochureComponentProps {\n  projectId: number;\n}\n\ninterface IProductBrochureConnectProps {\n  project?: IMap<Project>;\n  selectedSpecId: number;\n  drawings?: any;\n  pathname: string;\n  hash: string;\n  search: string;\n}\n\ninterface IProductBrochureProps extends IProductBrochureComponentProps {\n  dispatch: React.Dispatch<IAction>;\n}\ntype ProductBrochureProps = IProductBrochureProps\n  & IProductBrochureConnectProps\n  & WithTranslation\n  & WithStyles<keyof ReturnType<typeof styles>>;\n\n  // fake data generator\n  const getItems = (count: number, offset = 0) =>\n    Array.from({ length: count }, (v, k) => k).map(k => ({\n        id: `item-${k + offset}`,\n        content: `item ${k + offset}`\n    }));\n\n  // a little function to help us with reordering the result\n  // const reorder = (list: any, startIndex: any, endIndex: any) => {\n  //   const result = Array.from(list);\n  //   const [removed] = result.splice(startIndex, 1);\n  //   result.splice(endIndex, 0, removed);\n\n  //   return result;\n  // };\n\n  /**\n   * Moves an item from one list to another list.\n   */\n  // const move = (source: any, destination: any, droppableSource: any, droppableDestination: any) => {\n  //   const sourceClone = Array.from(source);\n  //   const destClone = Array.from(destination);\n  //   const [removed] = sourceClone.splice(droppableSource.index, 1);\n\n  //   destClone.splice(droppableDestination.index, 0, removed);\n\n  //   const result = {};\n  //   result[droppableSource.droppableId] = sourceClone;\n  //   result[droppableDestination.droppableId] = destClone;\n\n  //   return result;\n  // };\n\n  const getItemStyle = (isDragging: boolean, draggableStyle: DraggingStyle | NotDraggingStyle | undefined) => ({\n    // some basic styles to make the items look a bit nicer\n    userSelect: 'none' as 'none',\n\n    // change background colour if dragging\n    background: isDragging ? 'lightgreen' : 'none',\n    opacity: isDragging ? 0.2 : 1,\n\n    // styles we need to apply on draggables\n    ...draggableStyle\n  });\n\n  const getListStyle = (isDraggingOver: boolean) => ({\n    display: 'flex',\n\t\tpadding: 0,\n\t\toverflow: 'auto',\n  });\n\nclass ProductBrochure extends React.Component<ProductBrochureProps, {}> {\n  public state = {\n    value: 0,\n    items: getItems(10),\n    selected: getItems(5, 10)\n  };\n\n  public handleChange = (event: object, value: number) => {\n    this.setState({ value });\n  }\n\n  id2List = {\n    droppable: 'items',\n    droppable2: 'selected'\n  };\n\n  // NOTE: (PB) looks like this isn't being used \n  // public getList = (id: any) => this.state[this.id2List[id]];\n\n  public onDragEnd = (result: DropResult) => {\n    if (!result.destination) {\n      return;\n    }\n    else if (result.destination.droppableId !== 'printPages') {\n      return;\n    };\n    // console.debug(result)\n\n    const data = result.draggableId;\n\n    // filters out everything after the unqueKey\n    const productData = data.substring(0, data.indexOf('+uniqueKey'));\n\n    // actual JSON object of the product data\n    const productDataParsed = JSON.parse(productData);\n    console.debug(productDataParsed);\n    console.debug('drag ended');\n  };\n\n  public handleContinue = () => {\n    // console.debug('save & continueeeeeeeeeeeeueee')\n  }\n\n  public handleBack = () => {\n    const {\n      dispatch,\n    } = this.props;\n    dispatch(push(PROJECT_DOWNLOAD_PATH));\n  }\n\n  public render() {\n    const {\n      classes,\n      project,\n      drawings,\n    } = this.props;\n\n    const {\n      value,\n    } = this.state;\n\n    return (\n      <div className={classes.root}>\n        <DragDropContext onDragEnd={this.onDragEnd}>\n\n        {/* pages component */}\n        <ProductBrochurePages />\n        <AppBar position='static' color='inherit'>\n          <Tabs\n            value={value}\n            onChange={this.handleChange}\n            variant='scrollable'\n            scrollButtons='on'\n            indicatorColor='primary'\n            textColor='primary'\n          >\n            <Tab label='GENERAL ROOM' />\n            <Tab label='ROOM NAME' />\n            <Tab label='ROOM NAME' />\n          </Tabs>\n        </AppBar>\n        {\n          value === 0 && \n            project && project.get('id') !== undefined ? <div>\n            {\n              drawings.map((drawing: IMap<Drawing>, index: number) => {\n                return (\n                  <Droppable\n                    droppableId={`${drawing.get('id')}`}\n                    key={index}\n                    direction={'horizontal'}\n                    isDropDisabled={true}\n                  >\n                    {(provided, snapshot) => (\n                      <div\n                        ref={provided.innerRef}\n                        style={getListStyle(snapshot.isDraggingOver)}\n                      >\n                        {\n                          drawing.get('products').map((product: IMap<Product>, index: number) => {\n                            const productJS = JSON.stringify(product.toJS());\n\n                            return <Draggable\n                              key={`${product.get('id')}${index}`}\n                              draggableId={`${productJS}+uniqueKey${drawing.get('id')}${product.get('id')}${index}`}\n                              index={index}\n                            >\n                              {(provided, snapshot) => (\n                                <div\n                                  ref={provided.innerRef}\n                                  {...provided.draggableProps}\n                                  {...provided.dragHandleProps}\n                                  style={getItemStyle(\n                                      snapshot.isDragging,\n                                      provided.draggableProps.style\n                                  )}\n                                >\n                                  {\n                                    <ProductBrochureSpecDrawingProduct\n                                      product={product}\n                                      drawingId={drawing.get('id')}\n                                    />\n                                  }\n                                </div>\n                              )}\n                            </Draggable>\n                          })\n                        }\n                        {provided.placeholder}\n                      </div>\n                    )}\n                  </Droppable>\n                );\n              })\n            }\n          </div> : <p>no project selected</p>\n        }\n        {value === 1 && <Grid>Item Two</Grid>}\n        {value === 2 && <Grid>Item Three</Grid>}\n        <Paper className={classes.controlsBar}>\n            <Grid\n              container={true}\n              item={true}\n              lg={3}\n              md={4}\n              direction='row'\n              wrap='wrap'\n              alignItems='center'\n              justify='space-around'\n            >\n              <div style={{display: 'flex', alignItems: 'center'}}>\n                <span className={classes.itemCount}>\n                  <FontAwesomeIcon\n                    icon='book'\n                    size='lg'\n                  />\n                  <p style={{margin: '10px'}}>0</p>\n                </span> \n                <Typography>\n                  Items in Product Brochure\n                </Typography>\n              </div>\n            </Grid>\n            {\n              <React.Fragment>\n                <Grid\n                  container={true}\n                  item={true}\n                  lg={6}\n                  justify='space-around'\n                >\n                  <Button\n                    className={classes.button}\n                    onClick={this.handleBack}\n                  >\n                    BACK\n                  </Button>\n                  <Button \n                    variant='contained'\n                    color='primary'\n                    className={classes.button}\n                    onClick={this.handleContinue}\n                  >\n                    SAVE & CONTINUE\n                  </Button>\n                </Grid>\n                {\n                <Grid\n                  container={true}\n                  item={true}\n                  lg={3}\n                  md={4}\n                  justify='space-around'\n                >\n                  <span>\n                    <Typography>\n                      Drag product to add onto individual pages above\n                    </Typography>\n                  </span>\n                </Grid>\n                }\n              </React.Fragment>\n            }\n          </Paper>\n        </DragDropContext>\n      </div>\n    );\n  }\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  root: {\n    flexGrow: 1,\n    width: '100%',\n    backgroundColor: theme.palette.background.paper,\n  },\n  button: {\n    margin: `${theme.spacing() * 3}px ${theme.spacing()}px`,\n    padding: '0 35px',\n  },\n  controlsBar: {\n    position: 'sticky',\n    bottom: 0,\n    width: '100%',\n    display: 'flex',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    zIndex: 100,\n  },\n  itemCount: {\n    color: theme.palette.primary.main,\n    display: 'flex',\n    flexFlow: 'row nowrap',\n    alignItems: 'center',\n  },\n});\n\nconst mapStateToProps = (originalState: any, originalOwnProps: IProductBrochureComponentProps) => {\n  const projectId = originalOwnProps.projectId;\n  const selectProjectById = makeSelectProject({projectId});\n\n  return createStructuredSelector<any, IProductBrochureConnectProps>({\n    project: selectProjectById,\n    selectedSpecId: makeSelectSelectedSpecId(),\n    drawings: makeSelectDrawings(),\n    pathname: makeSelectLocationPathname(),\n    search: makeSelectLocationSearch(),\n    hash: makeSelectLocationHash(),\n  })(originalState);\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n  };\n};\n\nexport default compose<React.ComponentClass<IProductBrochureComponentProps>>(\n  withStyles(styles),\n  withTranslation('translations'),\n  connect(mapStateToProps, mapDispatchToProps),\n)(ProductBrochure);\n","import {\n  FormControl,\n  TextField,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  Button,\n  makeStyles,\n  createStyles,\n  Theme,\n  FormHelperText,\n  InputLabel\n} from '@material-ui/core';\nimport { IMap } from 'ats-utils/src/Interfaces';\nimport React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ManufacturerPreference from '../../models/ManufacturerPreference';\nimport { makeSelectCategory, makeSelectManufacturerPreferences, makeSelectManufacturerRankings } from '../../modules/AccountModule/selectors';\nimport { makeSelectAllManufacturers } from '../../modules/ListModule/selectors';\nimport { Map } from 'immutable';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useTranslation } from 'react-i18next';\nimport ManufacturerRanking from '../../models/ManufacturerRanking';\nimport { ListItem } from '../../models';\nimport { makeSelectAppId } from '../../modules/AtsModule/selectors';\n\nexport enum Action {\n  ADD_MANUFACTURER = 'ADD_MANUFACTURER',\n  EDIT_MANUFACTURER = 'EDIT_MANUFACTURER',\n  ADD_PREFERENCE = 'ADD_PREFERENCE',\n  EDIT_PREFERENCE = 'EDIT_PREFERENCE',\n}\n\n// Alt regions are saved as blacklist, so Canada shows on UI while the US geonameId is saved and vice versa.\nexport const ALTERNATES_REGIONS_MAP = {\n  null: 'region.canada&us',\n  6251999: 'region.UnitedStates',\n  6252001: 'region.canada',\n};\n\nexport const ALTERNATES_REGIONS = [\n  {\n    targetGeonameId: null,\n    labelPath: 'region.canada&us',\n  },\n  {\n    targetGeonameId: 6251999,\n    labelPath: 'region.UnitedStates',\n  },\n  {\n    targetGeonameId: 6252001,\n    labelPath: 'region.canada',\n  },\n];\n\ninterface IEditModalProps {\n  open: boolean;\n  action: Action;\n  onClose: () => void;\n  onSave: (value: IMap<ManufacturerPreference> | IMap<ManufacturerRanking>) => void;\n  onExited: () => void;\n  selectedManufacturer: ListItem;\n  selectedPreference: string | number;\n  editManufacturer: string | number;\n}\n\ntype EditModalProps = IEditModalProps; // & IWithUserPermissions;\n\nconst useStyles = makeStyles((theme: Theme) =>\n  createStyles({\n    formControl: {\n      marginBottom: theme.spacing(4),\n    },\n    selectEmpty: {\n      marginTop: theme.spacing(2),\n    },\n    content: {\n      width: '400px'\n    }\n  }),\n);\n\nconst getTitle: (Action) => string = (action: Action) => {\n  const { t } = useTranslation('translations');\n  switch (action) {\n    case Action.ADD_MANUFACTURER: return t('alternativePreferencesSettings.addManufacturerTitle');\n    case Action.EDIT_MANUFACTURER: return t('alternativePreferencesSettings.editManufacturerTitle');\n    case Action.ADD_PREFERENCE: return t('alternativePreferencesSettings.addPreferenceTitle');\n    case Action.EDIT_PREFERENCE: return t('alternativePreferencesSettings.editPreferenceTitle');\n  }\n};\n\ninterface IValue {\n  targetManufacturerId?: number;\n  ranking?: number;\n  competitorBrand?: number;\n  sponsorCategory?: number;\n  targetGeonameId?: number;\n}\n\nconst ManufacturerEditView = (props) => {\n  const {\n    t,\n    classes,\n    errors,\n    manufacturers,\n    categoriesList,\n    targetedManufacturer,\n    editManufacturer,\n    value,\n    setValue,\n    data\n  } = props;\n\n  return (\n    <DialogContent className={classes.content}>\n      <FormControl className={classes.formControl} fullWidth={true} error={errors.duplicateManufacturer}>\n        <Autocomplete\n          id='select-manufacturer'\n          disableClearable={true}\n          value={manufacturers.toJS().find(m => m.id === (value.targetManufacturerId || targetedManufacturer.get('id')))}\n          // value={manufacturers.toJS().find(m => m.id === (value.competitorBrand))}\n          onChange={(event: any, newValue: any | null) => {\n            setValue({ ...value, targetManufacturerId: newValue ? newValue.id : null });\n          }}\n          options={manufacturers.toJS()}\n          getOptionLabel={(option) => option.value}\n          renderInput={(params) => <TextField {...params} fullWidth={true} label={t('alternativePreferencesSettings.selectManufacturerLabel')} required={true} error={errors.duplicateManufacturer} />}\n          disabled={!!editManufacturer}\n        />\n        {errors.duplicateManufacturer ? <FormHelperText>{t('alternativePreferencesSettings.duplicateManufacturer')}</FormHelperText> : null}\n      </FormControl>\n\n      <FormControl className={classes.formControl} fullWidth={true}>\n        <Autocomplete\n          id='select-region'\n          disableClearable={true}\n          value={ALTERNATES_REGIONS.find(r => r.targetGeonameId === (value.targetGeonameId)) ?? ALTERNATES_REGIONS[0]}\n          onChange={(event: any, newValue: any | null) => {\n            setValue({ ...value, targetGeonameId: newValue ? newValue.targetGeonameId : null });\n          }}\n          options={ALTERNATES_REGIONS}\n          getOptionLabel={(option) => t(option.labelPath)}\n          renderInput={(params) => <TextField {...params} fullWidth={true} label={t('alternativePreferencesSettings.selectRegion')} required={true} />}\n        />\n      </FormControl>\n\n      <InputLabel shrink={true} error={errors.rankingOutOfRange}>{t('alternativePreferencesSettings.setRankingLabel')}</InputLabel>\n      <TextField\n        error={errors.rankingOutOfRange}\n        onChange={(event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n          setValue({ ...value, ranking: Number(event.target.value) });\n        }}\n        value={value.ranking || 0}\n        fullWidth={true}\n        type='number'\n        inputProps={{\n          min: 0,\n          max: 100,\n        }}\n      />\n      {errors.rankingOutOfRange ? <FormHelperText error={true}>{t('alternativePreferencesSettings.rankingOutOfRange')}</FormHelperText> : null}\n    </DialogContent>\n  );\n};\n\nconst PreferenceEditView = (props) => {\n  const {\n    t,\n    classes,\n    errors,\n    manufacturers,\n    categoriesList,\n    value,\n    setValue,\n    data,\n    targetedBrand,\n    targetedCategory\n  } = props;\n  return (\n    <DialogContent className={classes.content}>\n      <FormControl className={classes.formControl} fullWidth={true} error={errors.duplicateCombination}>\n        <Autocomplete\n          id='select-basis-of-design'\n          disableClearable={true}\n          value={manufacturers.toJS().find(m => m.id === (value.competitorBrand || targetedBrand.get('id')))}\n          // value={manufacturers.toJS().find(m => m.id === (value.competitorBrand))}\n          onChange={(event: any, newValue: any | null) => {\n            setValue({ ...value, competitorBrand: newValue ? newValue.id : null });\n          }}\n          options={manufacturers.toJS()}\n          getOptionLabel={(option) => option.value}\n          renderInput={(params) => <TextField {...params} fullWidth={true} label={t('alternativePreferencesSettings.selectBasisOfDesignLabel')} error={errors.duplicateCombination} />}\n        />\n      </FormControl>\n\n      <FormControl className={classes.formControl} fullWidth={true} error={errors.duplicateCombination}>\n        <Autocomplete\n          id='select-category'\n          disableClearable={true}\n          value={categoriesList.toJS().find(m => m.id === (value.sponsorCategory || targetedCategory.get('id')))}\n          // value={manufacturers.toJS().find(m => m.id === (value.sponsorCategory))}\n          onChange={(event: any, newValue: any | null) => {\n            setValue({ ...value, sponsorCategory: newValue ? newValue.id : null });\n          }}\n          options={categoriesList.toJS()}\n          getOptionLabel={(option) => option.label || option.value}\n          renderInput={(params) => <TextField {...params} fullWidth={true} label={t('alternativePreferencesSettings.selectCategoryLabel')} error={errors.duplicateCombination} />}\n        />\n        {errors.duplicateCombination ? <FormHelperText>{t('alternativePreferencesSettings.duplicateCombination')}</FormHelperText> : null}\n      </FormControl>\n    </DialogContent >\n  );\n};\n\nconst ContentView = (props) => {\n  const { action } = props;\n  switch (action) {\n    case Action.ADD_MANUFACTURER:\n    case Action.EDIT_MANUFACTURER: return <ManufacturerEditView {...props} />;\n    case Action.ADD_PREFERENCE:\n    case Action.EDIT_PREFERENCE: return <PreferenceEditView {...props} />;\n  }\n};\n\nconst EditModal: React.FC<EditModalProps> = (props) => {\n  const { open, action, onClose, onSave, onExited, selectedManufacturer, selectedPreference, editManufacturer } = props;\n  const classes = useStyles();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const manufacturers = useSelector(makeSelectAllManufacturers());\n  const manufacturerRankings = useSelector(makeSelectManufacturerRankings());\n  const manufacturerPrefereneces = useSelector(makeSelectManufacturerPreferences());\n  const categoriesList = useSelector(makeSelectCategory());\n  const appId = useSelector(makeSelectAppId());\n  const [value, setValue] = useState<IValue>({});\n  const [errors, setErrors] = useState({\n    duplicateManufacturer: false,\n    duplicateCombination: false,\n    rankingOutOfRange: false\n  });\n\n  useEffect(() => {\n    switch (action) {\n      case Action.ADD_MANUFACTURER:\n        let duplicateManufacturer = false;\n        let rankingOutOfRange = false;\n        if (manufacturerRankings.find((mr) => mr.get('targetManufacturerId') === value.targetManufacturerId)) {\n          duplicateManufacturer = true;\n        }\n        if (value.ranking < 0 || value.ranking > 100) {\n          rankingOutOfRange = true;\n        }\n        setErrors({ ...errors, duplicateManufacturer, rankingOutOfRange });\n        break;\n      case Action.EDIT_MANUFACTURER:\n        if (value.ranking < 0 || value.ranking > 100) {\n          setErrors({ ...errors, rankingOutOfRange: true });\n        } else {\n          setErrors({ ...errors, rankingOutOfRange: false });\n        }\n        break;\n      case Action.ADD_PREFERENCE:\n      case Action.EDIT_PREFERENCE:\n        if (\n              manufacturerPrefereneces.find((mp) =>\n                mp.get('sponsorBrand') === selectedManufacturer.id\n                && mp.get('competitorBrand') === (value.competitorBrand || null)\n                && mp.get('sponsorCategory') === (value.sponsorCategory || null)\n                && selectedPreference !== mp.get('id')\n              )\n          ) {\n          setErrors({ ...errors, duplicateCombination: true });\n        } else {\n          setErrors({ ...errors, duplicateCombination: false });\n        }\n        break;\n    }\n  }, [action, value]);\n\n  useEffect(() => {\n    if (selectedPreference) {\n      setValue({\n        ...value,\n        competitorBrand: targetedBrand.get('id'),\n        sponsorCategory: targetedCategory.get('id')\n      });\n    }\n\n    if (editManufacturer) {\n      setValue({\n        ...value,\n        targetManufacturerId: targetedManufacturer.get('id'),\n        ranking: data.get('rank'),\n        targetGeonameId: data.get('targetGeonameId') || null,\n      });\n    }\n  }, [editManufacturer, selectedPreference, manufacturerRankings, manufacturerPrefereneces]);\n\n  const targetSelectedManufacturer = manufacturers.find((m) => m.get('value') === selectedManufacturer?.value) || Map();\n  const targetedManufacturer = manufacturers.find((m) => m.get('value') === editManufacturer) || Map();\n\n  const data: IMap<any> = selectedPreference\n    ? manufacturerPrefereneces.find((mp) => mp.get('id') === selectedPreference)\n    : manufacturerRankings.find((mp) => mp.get('targetManufacturerId') === targetedManufacturer.get('id')) || Map() as IMap<any>;\n\n  const targetedBrand = manufacturers.find((m) => m.get('id') === data.get('competitorBrand')) || Map();\n  const targetedCategory = categoriesList.find((c) => c.get('id') === data.get('sponsorCategory')) || Map();\n\n  const handleOnClose = () => {\n    onClose();\n  };\n\n  const handleOnSave = () => {\n    const { targetManufacturerId, targetGeonameId, ranking, competitorBrand, sponsorCategory } = value;\n    const valueToSubmit: IMap<ManufacturerPreference> | IMap<ManufacturerRanking> = data.withMutations((el) => {\n      if (targetManufacturerId) {\n        el.set('targetManufacturerId', targetManufacturerId);\n      }\n      if (competitorBrand) {\n        el.set('competitorBrand', competitorBrand);\n      }\n      if (sponsorCategory) {\n        el.set('sponsorCategory', sponsorCategory);\n      }\n      if (selectedManufacturer) {\n        el.set('sponsorBrand', targetSelectedManufacturer.get('id'));\n      }\n      if (action === Action.ADD_MANUFACTURER) {\n        el.withMutations((ctx) => {\n          ctx\n            .set('type', 'xrefSponsor')\n            .set('targetAppId', appId)\n            .set('targetGeonameId', targetGeonameId ?? null)\n            .set('rank', ranking ?? 0);\n        });\n      } else if (action === Action.EDIT_MANUFACTURER) {\n        el.withMutations((ctx) => {\n          ctx\n            .set('targetAppId', appId)\n            .set('targetGeonameId', targetGeonameId ?? null)\n            .set('rank', ranking ?? 0);\n        });\n      } else if (action === Action.ADD_PREFERENCE || action === Action.EDIT_PREFERENCE) {\n        el.set('app_id', appId);\n      }\n    });\n    onSave(valueToSubmit);\n  };\n\n  const handleOnExit = () => {\n    onExited();\n    setValue({});\n    setErrors({\n      duplicateManufacturer: false,\n      duplicateCombination: false,\n      rankingOutOfRange: false\n    });\n  };\n\n  const getDisabledStatus = () => {\n    switch (action) {\n      case Action.ADD_MANUFACTURER:\n      case Action.EDIT_MANUFACTURER:\n        return !value.targetManufacturerId || errors.duplicateManufacturer || errors.rankingOutOfRange;\n      case Action.ADD_PREFERENCE:\n      case Action.EDIT_PREFERENCE:\n        return errors.duplicateCombination;\n    }\n  };\n\n  return (\n    <Dialog\n      open={open}\n      TransitionProps={{\n        onExited: handleOnExit\n      }}>\n      <DialogTitle>{getTitle(action)}</DialogTitle>\n      <ContentView\n        t={t}\n        action={action}\n        classes={classes}\n        errors={errors}\n        manufacturers={manufacturers}\n        targetedManufacturer={targetedManufacturer}\n        targetedBrand={targetedBrand}\n        targetedCategory={targetedCategory}\n        editManufacturer={editManufacturer}\n        categoriesList={categoriesList}\n        value={value}\n        setValue={setValue}\n        data={data}\n      />\n      <DialogActions>\n        <Button onClick={handleOnClose} color='primary'>\n          Cancel\n        </Button>\n        <Button\n          onClick={handleOnSave}\n          color='primary'\n          disabled={getDisabledStatus()}>\n          Save\n        </Button>\n      </DialogActions>\n    </Dialog >\n  );\n};\n\nexport default EditModal;","import React from 'react';\nimport clsx from 'clsx';\nimport { createStyles, lighten, makeStyles, Theme, useTheme } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport Paper from '@material-ui/core/Paper';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Switch from '@material-ui/core/Switch';\nimport AddIcon from '@material-ui/icons/Add';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { TablePaginationActions } from '../../components';\nimport { useTranslation } from 'react-i18next';\nimport Input from '@material-ui/core/Input';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { makeSelectAllManufacturers } from '../../modules/ListModule/selectors';\nimport { Button, Dialog, DialogActions, DialogTitle, Grid } from '@material-ui/core';\nimport { fromJS, List, Map } from 'immutable';\nimport { Action, ALTERNATES_REGIONS_MAP } from './EditModal';\nimport { makeSelectCategory, makeSelectManufacturerPreferences, makeSelectManufacturerRankings } from '../../modules/AccountModule/selectors';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport { AtsSvgTag } from '../../components/AtsSvg';\nimport { ListItem } from '../../models';\n\ninterface IRanking {\n  altManuf?: string;\n  targetGeonameId?: number;\n  ranking?: number;\n}\n\ninterface IPreference {\n  id?: number;\n  competitorBrand?: string;\n  sponsorCategory?: string;\n}\n\n// function createSecData(\n// \tcompetitorBrand: string,\n// \tsponsorCategory: string,\n\n// ): IPreference {\n// \treturn { competitorBrand, sponsorCategory };\n// }\n\n// const otherRows = [\n// \tcreateSecData('Lixil', 'Basin'),\n// \tcreateSecData('Amarican Standard', 'Toilet'),\n// ];\n\ntype Order = 'asc' | 'desc';\n\nfunction descendingComparator<T>(a: T, b: T, orderBy: keyof T) {\n  if (b[orderBy] < a[orderBy]) {\n    return -1;\n  }\n  if (b[orderBy] > a[orderBy]) {\n    return 1;\n  }\n  return 0;\n}\n\nfunction getComparator<Key extends keyof any>(\n  order: Order,\n  orderBy?: Key,\n): (a: { [key in Key]?: number | string }, b: { [key in Key]?: number | string }) => number {\n  return order === 'desc'\n    ? (a, b) => descendingComparator(a, b, orderBy)\n    : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\nfunction stableSort<T>(array: T[], comparator: (a: T, b: T) => number) {\n  const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);\n  stabilizedThis.sort((a, b) => {\n    const order = comparator(a[0], b[0]);\n    if (order !== 0) {\n      return order;\n    }\n    return a[1] - b[1];\n  });\n  return stabilizedThis.map((el) => el[0]);\n}\n\ninterface IHeadCell {\n  id: keyof IRanking | keyof IPreference;\n  label: string;\n  align?: 'inherit' | 'left' | 'center' | 'right' | 'justify';\n}\n\ninterface IEnhancedTableProps {\n  classes: ReturnType<typeof useStyles>;\n  onRequestSort: (event: React.MouseEvent<unknown>, property: keyof IRanking | keyof IPreference) => void;\n  order: Order;\n  orderBy: string;\n  selectedPreference: string | number;\n  selectedManufacturerValue: string;\n}\n\nfunction EnhancedTableHead(props: IEnhancedTableProps) {\n  const { t } = useTranslation('translations');\n  const { classes, order, orderBy, onRequestSort, selectedPreference, selectedManufacturerValue } = props;\n  const createSortHandler = (property: keyof IRanking | keyof IPreference) => (event: React.MouseEvent<unknown>) => {\n    onRequestSort(event, property);\n  };\n\n  const headCells: IHeadCell[] = selectedManufacturerValue ? [\n    { id: 'competitorBrand', label: t('alternativePreferencesSettings.basisOfDesign'), align: 'left' },\n    { id: 'sponsorCategory', label: t('alternativePreferencesSettings.category'), align: 'left' },\n  ] : [\n    { id: 'altManuf', label: t('alternativePreferencesSettings.alternativeManufacturer'), align: 'left' },\n    { id: 'targetGeonameId', label: t('alternativePreferencesSettings.region'), align: 'left' },\n    { id: 'ranking', label: t('alternativePreferencesSettings.ranking'), align: 'center' },\n  ];\n\n  return (\n    <TableHead>\n      <TableRow>\n        {headCells.map((headCell) => (\n          <TableCell\n            key={headCell.id}\n            align={headCell.align ?? 'inherit'}\n            sortDirection={orderBy === headCell.id ? order : false}\n          >\n            {\n              headCell.id === 'altManuf' || headCell.id === 'targetGeonameId' || headCell.id === 'ranking' || headCell.id === 'competitorBrand' || headCell.id === 'sponsorCategory' ?\n                <TableSortLabel\n                  active={orderBy === headCell.id}\n                  direction={orderBy === headCell.id ? order : 'asc'}\n                  onClick={createSortHandler(headCell.id)}\n                >\n                  {headCell.label}\n                  {orderBy === headCell.id ? (\n                    <span className={classes.visuallyHidden}>\n                      {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n                    </span>\n                  ) : null}\n                </TableSortLabel>\n                :\n                headCell.label\n            }\n          </TableCell>\n        ))}\n        {!selectedManufacturerValue ? <TableCell key={'visibilityPreferences'} align={'center'}>{t('alternativePreferencesSettings.visibilityPreferences')}</TableCell> : null}\n        <TableCell key={'action'} align={'center'}>Action</TableCell>\n      </TableRow>\n    </TableHead>\n  );\n}\n\n\nconst useToolbarStyles = makeStyles((theme: Theme) =>\n  createStyles({\n    root: {\n      paddingLeft: theme.spacing(2),\n      paddingRight: theme.spacing(1),\n    },\n    title: {\n      flex: '1 1 100%',\n    },\n    searchBar: {\n      minWidth: 250,\n    },\n    searchIcon: {\n      color: '#757575',\n    },\n    backBtn: {\n      marginRight: theme.spacing(4)\n    }\n  }),\n);\n\ninterface IEnhancedTableToolbarProps {\n  // numSelected: number;\n  selectedPreference: string | number;\n  selectedManufacturerValue: string;\n  // setEdittingPreferenceId: (arg0: string) => void;\n  onBack: () => void;\n  openModal: (arg0: Action) => void;\n  searchTerms: string;\n  onSearchChange: (value: string) => void;\n}\n\nconst EnhancedTableToolbar = (props: IEnhancedTableToolbarProps) => {\n  const classes = useToolbarStyles();\n  const { t } = useTranslation('translations');\n  const { selectedPreference, selectedManufacturerValue, openModal, onBack, searchTerms, onSearchChange } = props;\n\n  return (\n    <Toolbar className={classes.root}>\n      <Typography className={classes.title} variant='h6' id='tableTitle' component='div'>\n        {selectedManufacturerValue ? selectedManufacturerValue : t('alternativePreferencesSettings.allAlternativeManufacturers')}\n      </Typography>\n\n      {selectedManufacturerValue ? <Button color='primary' className={classes.backBtn} onClick={onBack}>Back</Button> : null}\n\n      <Input\n        className={classes.searchBar}\n        placeholder={t('listPageToolbar.searchPlaceholder')}\n        onChange={(e) => onSearchChange(e.target.value)}\n        value={searchTerms || ''}\n        endAdornment={\n          <InputAdornment position='end'>\n            <SearchIcon fontSize='small' className={classes.searchIcon} />\n          </InputAdornment>\n        }\n      />\n      <IconButton onClick={() => openModal(selectedManufacturerValue ? Action.ADD_PREFERENCE : Action.ADD_MANUFACTURER)}>\n        <AddIcon />\n      </IconButton>\n    </Toolbar>\n  );\n};\n\nconst useStyles = makeStyles((theme: Theme) =>\n  createStyles({\n    root: {\n      width: '100%',\n      backgroundColor: theme.palette.grey[200],\n      padding: theme.spacing(),\n      marginTop: theme.spacing(2)\n    },\n    paper: {\n      width: '100%',\n      marginBottom: theme.spacing(2),\n    },\n    table: {\n      minWidth: 750,\n      backgroundColor: theme.palette.common.white\n    },\n    visuallyHidden: {\n      border: 0,\n      clip: 'rect(0 0 0 0)',\n      height: 1,\n      margin: -1,\n      overflow: 'hidden',\n      padding: 0,\n      position: 'absolute',\n      top: 20,\n      width: 1,\n    },\n    pagingation: {\n      backgroundColor: theme.palette.common.white\n    }\n  }),\n);\n\nexport default function EnhancedTable(props) {\n  const { onOpenEditModal, onDelete, selectedManufacturer, selectedPreference, onSelectManufacturer, onBack, editManufacturer } = props;\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const dispatch = useDispatch();\n  const [order, setOrder] = React.useState<Order>('asc');\n  const [orderBy, setOrderBy] = React.useState<keyof IPreference | keyof IRanking>('altManuf');\n  const [selected, setSelected] = React.useState<string[]>([]);\n  const [page, setPage] = React.useState(0);\n  const [dense, setDense] = React.useState(false);\n  const [rowsPerPage, setRowsPerPage] = React.useState(10);\n  const [alertOpen, setAlertOpen] = React.useState(false);\n  const [deleteInfo, setDeleteInfo] = React.useState(null);\n  const [searchTerms, setSearchTerms] = React.useState<string>('');\n\n  const manufacturers = useSelector(makeSelectAllManufacturers());\n  const categoriesList = useSelector(makeSelectCategory());\n\n  const manufacturerPrefereneces = useSelector(makeSelectManufacturerPreferences());\n  const manufacturerRankings = useSelector(makeSelectManufacturerRankings());\n\n  const selectedManufacturerValue = selectedManufacturer?.value;\n\n  React.useEffect(() => {\n    setPage(0);\n  }, [selectedManufacturerValue]);\n\n  const handleRequestSort = (event: React.MouseEvent<unknown>, property: keyof IPreference | keyof IRanking) => {\n    const isAsc = orderBy === property && order === 'asc';\n    setOrder(isAsc ? 'desc' : 'asc');\n    setOrderBy(property);\n  };\n\n  const handleChangePage = (event: unknown, newPage: number) => {\n    setPage(newPage);\n  };\n\n  const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n    setRowsPerPage(parseInt(event.target.value, 10));\n    setPage(0);\n  };\n\n  const handleOnDeleteClick = (id, type) => () => {\n    setDeleteInfo({ id, type });\n    setAlertOpen(true);\n  };\n\n  const handleOnDelete = () => {\n    setAlertOpen(false);\n    onDelete(deleteInfo.id, deleteInfo.type);\n    setDeleteInfo(null);\n  };\n\n  const handleOnEditClick = (id, action) => () => {\n    if (action === Action.EDIT_PREFERENCE) {\n      onOpenEditModal(action, id);\n    } else if (action === Action.EDIT_MANUFACTURER) {\n      onOpenEditModal(action, id);\n    }\n  };\n\n  const handleOnViewAllClick = (manufacturer: ListItem) => () => {\n    onSelectManufacturer(manufacturer);\n  };\n\n  const handleOnAlertClose = () => {\n    setAlertOpen(false);\n  };\n\n  const handleOnSearchChange = (value) => {\n    setSearchTerms(value);\n  };\n\n  const mappedPreferences = () => {\n    const array = [];\n    for (const [index, preference] of manufacturerPrefereneces.entries()) {\n      if (categoriesList.size && manufacturers.size) {\n        const targetSelectedManufacturer = manufacturers.find((m) => m.get('id') === preference.get('sponsorBrand')) || Map();\n        const targetedCategory = categoriesList.find((c) => c.get('id') === preference.get('sponsorCategory')) || Map();\n        const targetedManufacturer = manufacturers.find((m) => m.get('id') === preference.get('competitorBrand')) || Map();\n\n        if (targetSelectedManufacturer.get('value') === selectedManufacturerValue) {\n          array.push({\n            id: preference.get('id'),\n            competitorBrand: targetedManufacturer.get('value') ?? '-',\n            sponsorCategory: (targetedCategory.get('label') || targetedCategory.get('value')) ?? '-'\n          });\n        }\n      }\n    }\n    return array;\n  };\n\n  const mappedRankings = () => {\n    const array = [];\n    for (const [index, rank] of manufacturerRankings.entries()) {\n      if (manufacturers.size) {\n        const targetedManufacturer = manufacturers.find((m) => m.get('id') === rank.get('targetManufacturerId'));\n        if (targetedManufacturer) {\n          array.push({\n            targetedManufacturerId: targetedManufacturer.get('id'),\n            altManuf: targetedManufacturer.get('value'),\n            targetGeonameId: rank.get('targetGeonameId'),\n            ranking: rank.get('rank')\n          });\n        }\n      }\n    }\n    return array;\n  };\n\n  const mappedList = selectedManufacturer ? mappedPreferences() : mappedRankings();\n  const emptyRows = rowsPerPage - Math.min(rowsPerPage, mappedList.length - page * rowsPerPage);\n\n  return (\n    <div className={classes.root}>\n      <EnhancedTableToolbar\n        onBack={onBack}\n        selectedManufacturerValue={selectedManufacturerValue}\n        selectedPreference={selectedPreference}\n        openModal={onOpenEditModal}\n        searchTerms={searchTerms}\n        onSearchChange={handleOnSearchChange}\n      />\n      <TableContainer>\n        <Table\n          className={classes.table}\n          size={dense ? 'small' : 'medium'}\n          // component={mappedList.length ? 'table' : 'div'}\n        >\n          <EnhancedTableHead\n            classes={classes}\n            order={order}\n            orderBy={orderBy}\n            onRequestSort={handleRequestSort}\n            selectedManufacturerValue={selectedManufacturerValue}\n            selectedPreference={selectedPreference}\n          />\n          <TableBody style={{ alignItems: 'center' }}>\n            {mappedList.length ? stableSort(mappedList, getComparator(order, orderBy))\n              .filter((item) => {\n                if (mappedList.length && item) {\n                  if (selectedManufacturer) {\n                    return item?.competitorBrand?.toLowerCase().includes(searchTerms.toLowerCase()) || item?.sponsorCategory?.toLowerCase().includes(searchTerms.toLowerCase());\n                  } else {\n                    return item?.altManuf?.toLowerCase().includes(searchTerms.toLowerCase()) || item?.ranking?.toString().toLowerCase().includes(searchTerms.toLowerCase());\n                  }\n                }\n                return true;\n              })\n              .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n              .map((row, index) => {\n                return selectedManufacturer ?\n                  <TableRow\n                    hover={true}\n                    tabIndex={-1}\n                    key={row.id}\n                  >\n                    <TableCell align='left' component='th' scope='row'>\n                      {row.competitorBrand || '-'}\n                    </TableCell>\n                    <TableCell align='left'>{row.sponsorCategory || '-'}</TableCell>\n                    <TableCell align='center'>\n                      <IconButton onClick={handleOnEditClick(row.id, Action.EDIT_PREFERENCE)}>\n                        <EditIcon />\n                      </IconButton>\n                      <IconButton onClick={handleOnDeleteClick(row.id, 'preference')}>\n                        <DeleteIcon />\n                      </IconButton>\n                    </TableCell>\n                  </TableRow>\n                  :\n                  <TableRow\n                    hover={true}\n                    tabIndex={-1}\n                    key={row.altManuf + row.ranking}\n                  >\n                    <TableCell align='left' component='th' scope='row'>\n                      {row.altManuf}\n                    </TableCell>\n                    <TableCell align='left'>{t(ALTERNATES_REGIONS_MAP[row.targetGeonameId])}</TableCell>\n                    <TableCell align='center'>{row.ranking}</TableCell>\n                    <TableCell align='center'>\n                      <Button color='primary' onClick={handleOnViewAllClick({ id: row.targetedManufacturerId, value: row.altManuf })}>{t('alternativePreferencesSettings.viewAll')}</Button>\n                    </TableCell>\n                    <TableCell align='center'>\n                      <IconButton onClick={handleOnEditClick(row.altManuf, Action.EDIT_MANUFACTURER)}>\n                        <EditIcon />\n                      </IconButton>\n                      <IconButton onClick={handleOnDeleteClick(row.targetedManufacturerId, 'manufacturer')}>\n                        <DeleteIcon />\n                      </IconButton>\n                    </TableCell>\n                  </TableRow>\n                  ;\n              })\n              :\n              <TableRow>\n                <TableCell colSpan={6}>\n                  <Box\n                    display='grid'\n                    justifyContent='center'\n                    alignItems='center'\n                  >\n                    <Box\n                      display='grid'\n                      justifyContent='center'\n                      alignItems='center'>\n                      <AtsSvgTag\n                        width='131'\n                        height='131'\n                        color={{\n                          backgroundColor: theme.palette.primary[200],\n                          shadowColor: theme.palette.primary.main\n                        }}\n                        margin={String(theme.spacing(3))}\n                      />\n                    </Box>\n                    {\n                      manufacturerRankings.size === 0\n                        ? <>\n                          <Typography variant='h5' align='center'>{t('alternativePreferencesSettings.noRankingData')}</Typography>\n                          <Typography>{t('alternativePreferencesSettings.noRankingSuggestion')}</Typography>\n                          <Button color='primary' onClick={() => onOpenEditModal(Action.ADD_MANUFACTURER)}>{t('alternativePreferencesSettings.addNewManufacturerButton')}</Button>\n                        </>\n                        : <>\n                          <Typography variant='h5' align='center'>{t('alternativePreferencesSettings.noPreferenceData')}</Typography>\n                          <Typography>{t('alternativePreferencesSettings.noPreferenceSuggestion')}</Typography>\n                          <Button color='primary' onClick={() => onOpenEditModal(Action.ADD_PREFERENCE)}>{t('alternativePreferencesSettings.addNewPreferenceButton')}</Button>\n                        </>\n                    }\n                  </Box>\n                </TableCell>\n              </TableRow>\n            }\n            {\n              emptyRows > 0 ?\n                manufacturerRankings.size && !selectedManufacturer ?\n                  <TableRow style={{ height: (dense ? 33 : 53) * emptyRows }}>\n                    <TableCell colSpan={6} />\n                  </TableRow>\n                  :\n                  manufacturerPrefereneces.size ?\n                    <TableRow style={{ height: (dense ? 33 : 53) * emptyRows }}>\n                      <TableCell colSpan={6} />\n                    </TableRow>\n                    :\n                    null\n                :\n                null\n            }\n          </TableBody>\n\n\n        </Table>\n      </TableContainer>\n      <TablePagination\n        className={classes.pagingation}\n        labelRowsPerPage={t('Pagination.rowsPerPage')}\n        labelDisplayedRows={({ from, to, count }) => t('Pagination.labelFormat', {from, to, count, defaultValue: `${from}-${to} of ${count}`})}\n        rowsPerPageOptions={[5, 10, 25, 50]}\n        component='div'\n        count={mappedList.length}\n        rowsPerPage={rowsPerPage}\n        page={page}\n        onChangePage={handleChangePage}\n        onChangeRowsPerPage={handleChangeRowsPerPage}\n        ActionsComponent={TablePaginationActions}\n      />\n\n      <Dialog\n        open={alertOpen}\n        onClose={handleOnAlertClose}\n      >\n        <DialogTitle>{selectedManufacturer ? t('alternativePreferencesSettings.deleteVisibilityPreference') : t('alternativePreferencesSettings.deleteManufacturer')}</DialogTitle>\n        <DialogActions>\n          <Button onClick={handleOnAlertClose} color='primary'>\n            Cancel\n          </Button>\n          <Button onClick={handleOnDelete} color='primary'>\n            Delete\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n  connect,\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  Paper,\n  Typography,\n  FormControl,\n  FormControlLabel,\n  Switch,\n  Box,\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  Button,\n} from '@material-ui/core';\nimport {\n  makeStyles, useTheme\n} from '@material-ui/core/styles';\nimport { useTranslation } from 'react-i18next';\nimport {\n  compose\n} from 'redux';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport {\n  IAction, IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  CreateManufacturerPreferenceAction,\n  DeleteManufacturerPreferenceAction,\n  GetCategoriesAction,\n  GetManufacturerPreferenceAction,\n  UpdateManufacturerPreferenceAction,\n  GetManufacturerRankingsAction,\n  CreateManufacturerRankingAction,\n  UpdateManufacturerRankingAction,\n  DeleteManufacturerRankingAction\n} from '../../modules/AccountModule/actions';\nimport { makeSelectUserFirmId } from '../../modules/AtsModule/selectors';\nimport { makeSelectCategory, makeSelectFirm, makeSelectManufacturerPreferences, makeSelectManufacturerRankings, makeSelectUserFirm, makeSelectUpdateFirmloading } from '../../modules/AccountModule/selectors';\nimport { Firm, ListItem } from '../../models';\nimport withUserPermissions, { IWithUserPermissions } from '../../hoc/withUserPermissions';\nimport { push } from 'connected-react-router';\nimport { NOT_FOUND_PATH } from '../../constants';\nimport EditModal, { Action } from './EditModal';\nimport TableView from './TableView';\nimport { GetAllManufacturersAction } from '../../modules/ListModule/actions';\nimport ManufacturerPreference from '../../models/ManufacturerPreference';\nimport { List } from 'immutable';\nimport ManufacturerRanking from '../../models/ManufacturerRanking';\nimport { AtsSvgTag } from '../../components/AtsSvg';\n\nconst useStyles = makeStyles((theme) => ({\n  paper: {\n    // flexGrow: 1,\n    display: 'flex',\n    flexDirection: 'column',\n    background: theme.palette.common.white,\n    margin: `${theme.spacing() * 2}px`,\n    maxWidth: '1800px',\n    minHeight: '650px',\n    position: 'relative',\n    padding: theme.spacing(2),\n    justifyItems: 'center',\n    alignContent: 'center'\n  },\n  switchContainer: {\n    // display: 'flex',\n    // flexDirection: 'column'\n    // margin: 0\n    marginTop: theme.spacing(4),\n    maxWidth: '350px',\n  },\n  switch: {\n    display: 'flex',\n    justifyContent: 'space-between',\n    margin: 0\n  },\n  circularProgress: {\n    marginLeft: theme.spacing(4)\n  }\n}));\n\ninterface IAlternativeVisibilityPreferencesProps {\n\n}\n\ntype AlternativeVisibilityPreferencesProps = IAlternativeVisibilityPreferencesProps & IWithUserPermissions;\n\nconst AlternativeVisibilityPreferences: React.FC<AlternativeVisibilityPreferencesProps> = (props) => {\n\n  const classes = useStyles();\n  const theme = useTheme();\n  const dispatch = useDispatch();\n  const { t } = useTranslation('translations');\n\n  const [open, setOpen] = useState(false);\n  const [action, setAction] = useState<Action>(null);\n  const [selectedManufacturer, setSelectedManufacturer] = React.useState<ListItem>(null);\n  const [editManufacturer, setEditManufacturer] = React.useState<string | number>(null);\n  const [selectedPreference, setSelectedPreference] = React.useState<string | number>(null);\n\n  const manufacturerPrefereneces = useSelector(makeSelectManufacturerPreferences());\n  const manufacturerRankings = useSelector(makeSelectManufacturerRankings());\n\n  const { } = props;\n\n  useEffect(() => {\n    dispatch(new GetAllManufacturersAction());\n    dispatch(new GetCategoriesAction());\n    dispatch(new GetManufacturerPreferenceAction());\n    dispatch(new GetManufacturerRankingsAction());\n  }, []);\n\n  const handleOpen = (_action: Action, id?: number | string) => {\n    if (id) {\n      switch (_action) {\n        case Action.ADD_MANUFACTURER:\n        case Action.EDIT_MANUFACTURER:\n          setEditManufacturer(id);\n          break;\n        case Action.ADD_PREFERENCE:\n        case Action.EDIT_PREFERENCE:\n          setSelectedPreference(id);\n          break;\n      }\n    }\n    setAction(_action);\n    setOpen(true);\n  };\n\n  const handleOnSelectManufacturer = (manufacturer: ListItem) => {\n    if (manufacturer) {\n      setSelectedManufacturer(manufacturer);\n    }\n  };\n\n\n  const handleOnClose = () => {\n    setOpen(false);\n    // setTimeout(() => setAction(null), 500);\n  };\n\n  const handleOnSave = (value: IMap<ManufacturerPreference> | IMap<ManufacturerRanking>) => {\n    switch (action) {\n      case Action.ADD_MANUFACTURER:\n        dispatch(new CreateManufacturerRankingAction({ ranking: value as IMap<ManufacturerRanking> }));\n        break;\n      case Action.EDIT_MANUFACTURER:\n        dispatch(new UpdateManufacturerRankingAction({ ranking: value as IMap<ManufacturerRanking> }));\n        break;\n      case Action.ADD_PREFERENCE:\n        dispatch(new CreateManufacturerPreferenceAction({ manufacturerPreferences: manufacturerPrefereneces.push(value as IMap<ManufacturerPreference>) }));\n        break;\n      case Action.EDIT_PREFERENCE:\n        dispatch(new UpdateManufacturerPreferenceAction({ manufacturerPreference: value as IMap<ManufacturerPreference> }));\n        break;\n    }\n\n    setOpen(false);\n  };\n\n  const handleOnExited = () => {\n    setAction(null);\n    setEditManufacturer(null);\n    setSelectedPreference(null);\n  };\n\n  const handleOnDelete = (id, type) => {\n    switch (type) {\n      case 'manufacturer':\n        const ranking = manufacturerRankings.find((mr) => mr.get('targetManufacturerId') === id);\n        dispatch(new DeleteManufacturerRankingAction({\n          ranking: ranking as IMap<ManufacturerRanking>,\n          manufacturerPreferences: manufacturerPrefereneces\n        }));\n        break;\n      case 'preference':\n        dispatch(new DeleteManufacturerPreferenceAction({ preferenceId: id }));\n        break;\n    }\n  };\n\n  const handleOnBack = () => {\n    setSelectedManufacturer(null);\n    setSelectedPreference(null);\n  };\n\n  return (\n    <Paper className={classes.paper}>\n\n      <Typography variant='h5'>{t('alternativePreferencesSettings.label')}</Typography>\n      <Typography variant='caption'>{t('alternativePreferencesSettings.discription')}</Typography>\n\n      <TableView\n        selectedManufacturer={selectedManufacturer}\n        selectedPreference={selectedPreference}\n        onSelectManufacturer={handleOnSelectManufacturer}\n        onOpenEditModal={handleOpen}\n        onDelete={handleOnDelete}\n        onBack={handleOnBack}\n      />\n\n      <EditModal\n        open={open}\n        onSave={handleOnSave}\n        onClose={handleOnClose}\n        action={action}\n        onExited={handleOnExited}\n        selectedManufacturer={selectedManufacturer}\n        selectedPreference={selectedPreference}\n        editManufacturer={editManufacturer}\n      />\n\n    </Paper>\n  );\n};\n\nconst mapStateToProps = createStructuredSelector({\n  userFirmId: makeSelectUserFirmId(),\n  firm: makeSelectUserFirm(),\n  isLoading: makeSelectUpdateFirmloading(),\n});\n\nexport default compose<React.ComponentClass<IAlternativeVisibilityPreferencesProps>>(\n  connect(mapStateToProps),\n  withUserPermissions,\n)(AlternativeVisibilityPreferences);","/**\n * Created By Tianxiao Deng 2020/4/6\n * A network condition detector which sync window.navigator.online\n * Render props design pattern is used.\n */\n\nimport React, {\n  ReactElement,\n  useEffect,\n  useState\n} from 'react';\n\ninterface IDetectorProps {\n  onChange(): void;\n  render(params: { online: boolean }): ReactElement;\n}\n\nconst Detector = (props: IDetectorProps) => {\n\n  const { onChange, render } = props;\n  const [isOnline, setIsOnline] = useState(window.navigator.onLine);\n\n  useEffect(() => {\n    const onlineEventListener: EventListener = () => {\n      setIsOnline(true);\n      onChange();\n    };\n    window.addEventListener('online', onlineEventListener);\n    return () => window.removeEventListener('online', onlineEventListener);\n  });\n\n  useEffect(() => {\n    const offlineEventListener: EventListener = () => {\n      setIsOnline(false);\n      onChange();\n    };\n    window.addEventListener('offline', offlineEventListener);\n    return () => window.removeEventListener('offline', offlineEventListener);\n  });\n\n  return (\n    <>\n      {render({\n        online: isOnline\n      })}\n    </>\n  );\n};\n\nexport default Detector;\n","/**\n * Created by Tianxiao Deng 2020-02-27\n * This is component is responsible for popping up a network disconnecting error modal\n */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport ReportProblemIcon from '@material-ui/icons/ReportProblem';\nimport Detector from './Detector';\nimport {\n  withStyles,\n  StyleRules,\n  WithStyles,\n  IconButton,\n  SnackbarContent,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { compose } from 'redux';\nimport { withTranslation, WithTranslation } from 'react-i18next';\n\nconst styles = (): StyleRules => ({\n  root: {\n    position: 'fixed',\n    top: '64px',\n    right: '0',\n    color: 'white',\n  },\n  iconButton: {\n    backgroundColor: '#B00020',\n  },\n  message: {\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  reportProblemIcon: {\n    marginRight: '10px'\n  }\n});\n\ninterface IOfflineErrorModalProps extends WithStyles, WithTranslation {\n\n}\ninterface IOfflineErrorModalState {\n  show: boolean;\n}\nclass OfflineErrorModal extends React.Component<IOfflineErrorModalProps, IOfflineErrorModalState> {\n  private readonly root: HTMLDivElement;\n  constructor(props) {\n    super(props);\n    this.root = document.createElement('div');\n    this.state = {\n      show: true\n    };\n  }\n\n  public componentDidMount() {\n    document.body.appendChild(this.root);\n  }\n\n  public componentWillUnmount() {\n    document.body.removeChild(this.root);\n  }\n\n  public render() {\n    const { classes, t } = this.props;\n      return ReactDOM.createPortal(\n        <Detector\n          onChange={this.networkConditionChangeHandler}\n          render={({ online }) => {\n            if (!online && this.state.show) {\n              return (\n                    <Snackbar\n                      anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n                      className={classes.root}\n                      open={true}\n                      autoHideDuration={6000}\n                    >\n                      <SnackbarContent\n                        message={\n                          <div className={classes.message}>\n                            <ReportProblemIcon className={classes.reportProblemIcon}/>\n                            {t('offlineErrorModal.warning')}\n                          </div>\n                        }\n                        className={classes.iconButton}\n                        action={\n                          <IconButton size='small' aria-label='close' color='inherit' onClick={this.handleClose}>\n                            <CloseIcon fontSize='small' />\n                          </IconButton>\n                        }\n                      />\n                    </Snackbar>\n              );\n            }\n            return null;\n          }\n        } />, this.root);\n  }\n  private networkConditionChangeHandler = () => this.setState({ show: true });\n  private handleClose = () => this.setState({ show: false });\n}\n\nexport default compose(\n  withStyles(styles),\n  withTranslation('translations'),\n)(OfflineErrorModal);\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { createStructuredSelector } from 'reselect';\nimport {\n  compose,\n  Dispatch,\n} from 'redux';\nimport { connect } from 'react-redux';\nimport { PaddedMessage } from '../../components';\nimport {\n  LoadDashboardAction,\n} from '../../modules/DashboardModule/actions';\nimport { makeSelectDashboard } from '../../modules/DashboardModule/selectors';\nimport { Dashboard } from '../../containers';\nimport {\n  Dashboard as DashboardModel,\n  IDashboardWidgetConfig\n} from '../../models';\nimport { IMap } from 'ats-utils/src';\nimport {\n  DashboardState\n} from '../../modules/DashboardModule/types';\nimport { fromJS } from 'immutable';\nimport { makeSelectConfig } from '../../modules/AtsModule/selectors';\n\ninterface IStateProps {\n  dashboard: IMap<DashboardModel>;\n  config: IMap<any>;\n}\ninterface IDispatchProps {\n  loadDashboard: () => void;\n}\nconst useStyles = makeStyles(() => ({\n  root: {\n    width: '100%',\n  },\n}));\nconst DashboardPage: React.FC<IStateProps & IDispatchProps> = ({ loadDashboard, dashboard, config }) => {\n  const classes = useStyles();\n  // useEffect(() => loadDashboard(), []);\n  const site = config.get('site');\n  useEffect(() => {\n    if (site) { loadDashboard(); }\n  }, [site]);\n  const dashboardWidgetConfigs: IMap<IDashboardWidgetConfig[]> = dashboard\n    .getIn(['config', 'widgets'], fromJS({}))\n    .map((dashboardWidgetConfig: IMap<IDashboardWidgetConfig>) => dashboardWidgetConfig);\n  return (\n    <div className={classes.root}>\n      {\n        dashboard.isEmpty() ?\n          <PaddedMessage loading={true}>Loading Dashboards </PaddedMessage>\n          :\n          <Dashboard\n            localComponentId= {`Dashboard-${dashboard.get('id')}`}\n            dashboardWidgetConfigs={dashboardWidgetConfigs}\n          />\n      }\n    </div>\n  );\n};\nconst mapStateToProps = createStructuredSelector<DashboardState, IStateProps>({\n  dashboard: makeSelectDashboard(),\n  config: makeSelectConfig(),\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n  loadDashboard: () => void dispatch(new LoadDashboardAction())\n});\n\nexport default compose<React.ComponentClass<{}>>(\n  connect(mapStateToProps, mapDispatchToProps),\n)(DashboardPage);\n","import DashboardPage from './Component';\n\nexport default DashboardPage;","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  withStyles,\n  WithStyles,\n  Theme,\n} from '@material-ui/core';\nimport {\n  DeleteMasterAndSearchMastersAction,\n  LoadingSearchedMastersAction,\n  DuplicateMasterAction,\n  SelectMasterProjectAction\n} from '../../../modules/ProjectModule/actions';\nimport {\n  createStructuredSelector\n} from 'reselect';\nimport Project from '../../../models/Project';\nimport { togglePath } from '../../../components/TogglePath/utils';\nimport { EDIT_MASTER_PATH } from '../../../constants';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../../modules/RouterModule/selectors';\nimport { StyleRules } from '@material-ui/core/styles';\nimport {\n  withTranslation,\n  WithTranslation\n} from 'react-i18next';\nimport { Filter, Option } from '../../../models';\nimport ActionButton from '../../../components/_CellRenderers/ActionButton';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { LOADING_MODAL_ID } from '../../../components/LoadingModal/Component';\nimport {COPY_MODAL} from '../../CopyModal';\nimport { Map } from 'immutable';\n\ninterface ICustomActionButtonComponentProps {\n  master: IMap<Project>;\n  options: Option<Project>;\n  filters: Filter;\n  searchTerm: string;\n  userCanManageMasters: boolean;\n}\n\nexport interface ICustomActionButtonProps extends ICustomActionButtonComponentProps {\n  dispatch: (s: IAction) => void;\n  location: IMap<IRouterReducerLocation>;\n  duplicateMaster: (masterId: number) => void;\n  selectMasterId: (masterId: number) => void;\n}\n\ntype CustomActionButtonProps = ICustomActionButtonProps & WithTranslation & WithStyles<keyof ReturnType<typeof styles>>;\n\nconst styles = (theme: Theme): StyleRules => ({\n});\n\nconst CustomActionButton: React.FC<CustomActionButtonProps> = (props) => {\n  const {\n    dispatch,\n    master,\n    location,\n    options,\n    searchTerm,\n    filters,\n    t,\n    duplicateMaster,\n    selectMasterId,\n    userCanManageMasters,\n  } = props;\n\n  const masterId = master.get('id');\n\n  const handleDelete = () => {\n    const mutableFilters: any = {\n      'and': []\n    };\n    if (searchTerm) {\n      mutableFilters.and.push({\n        'name': {\n          'like': searchTerm\n        }\n      });\n    }\n    filters && mutableFilters.and.push(...(filters as any).and); // tslint:disable-line\n    if (mutableFilters.and.length === 0) {\n      delete mutableFilters.and;\n    }\n    dispatch(new LoadingSearchedMastersAction());\n    dispatch(new DeleteMasterAndSearchMastersAction({\n        id: masterId,\n        specIds: master?.get('specs').map((spec: any) => spec.get('id')).join(',') ?? '',\n        masterName: master?.get('name') ?? '',\n        options,\n        filters: mutableFilters\n      })\n    );\n  };\n\n  const handleCopyToProject = () => {\n    selectMasterId(masterId);\n    dispatch(new SetOverlayComponentPropsAction({\n      id: COPY_MODAL,\n      props: {\n        sourceType: 'master',\n        sourceProjectId: masterId,\n        amplitudeSourceData: {\n          sourceType: 'Master',\n          sourceId: masterId,\n          sourceName: master.get('name'),\n          totalDrawings: null,\n          totalProducts: null,\n        }\n      }\n    }));\n    dispatch(new ToggleOverlayComponentAction({\n      id: COPY_MODAL,\n      open: true\n    }));\n  };\n\n  const handleEditMaster = () => {\n    selectMasterId(masterId);\n    togglePath({\n      pathName: `${EDIT_MASTER_PATH}/${masterId}`,\n      dispatch,\n      location,\n    })()();\n  };\n\n  const menuItems = [\n    {\n      key: '__copyToProject',\n      caption: t('MasterActions.copyTo'),\n      onClick: () => handleCopyToProject()\n    },\n    {\n      key: '__editMaster',\n      caption: t('MasterActions.editMaster'),\n      disabled: !userCanManageMasters,\n      disabledTooltip: t('generalTooltip.disabledForNoPermission'),\n      onClick: () => handleEditMaster()\n    },\n    {\n      key: '__duplicateMaster',\n      caption: t('MasterActions.duplicateMaster'),\n      disabled: !userCanManageMasters,\n      disabledTooltip: t('generalTooltip.disabledForNoPermission'),\n      onClick: () => {\n        duplicateMaster(master.get('id'));\n        dispatch(new SetOverlayComponentPropsAction({ id: LOADING_MODAL_ID, props: { action: t('generalLoading.duplicating'), actionOnItem: master.get('name') } }));\n        dispatch(new ToggleOverlayComponentAction({\n          id: LOADING_MODAL_ID,\n          open: true\n        }));\n      }\n    }\n  ];\n\n  const deleteMenuItem = {\n    key: '__deletemaster',\n    caption: t('MasterActions.deleteMaster'),\n    disabled: !userCanManageMasters,\n    disabledTooltip: t('generalTooltip.disabledForNoPermission'),\n  };\n\n  return (\n    <ActionButton\n      id={masterId}\n      name={master.get('name')}\n      menuItems={menuItems}\n      deleteMenuItem={deleteMenuItem}\n      deleteItem={handleDelete}\n      withLoading={false}\n    />\n  );\n};\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    duplicateMaster: (masterId: number) => dispatch(new DuplicateMasterAction({ masterId })),\n    selectMasterId: (masterId: number) => dispatch(new SelectMasterProjectAction({ projectId: masterId }))\n  };\n};\n\nconst mapStateToProps = createStructuredSelector({\n  location: makeSelectLocation(),\n});\n\n\nexport default compose<React.ComponentClass<ICustomActionButtonComponentProps>>(\n  withTranslation('translations'),\n  withStyles(styles),\n  connect(mapStateToProps, mapDispatchToProps)\n)(CustomActionButton);\n","import * as React from 'react';\nimport {\n  connect,\n} from 'react-redux';\nimport {\n  compose\n} from 'redux';\nimport {\n  IAction,\n  IMap\n} from 'ats-utils/src/Interfaces';\nimport {\n  Theme,\n  WithStyles,\n  withStyles,\n  Paper,\n  Typography,\n  Table,\n  TableHead,\n  TableBody,\n  TableRow,\n  TableCell,\n  TablePagination,\n  Grid,\n  LinearProgress,\n} from '@material-ui/core';\nimport {\n  StyleRules\n} from '@material-ui/core/styles';\nimport {\n  Map,\n  List as ImmutableList,\n  List\n} from 'immutable';\nimport {\n  makeSelectSearchedMasters,\n  makeSelectSearchingMasters,\n  makeSelectSearchedMastersCount,\n  makeSelectSearchedMastersHasNextPage,\n} from '../../modules/ProjectModule/selectors';\nimport {\n  SearchMastersAction,\n  LoadingSearchedMastersAction,\n} from '../../modules/ProjectModule/actions';\nimport {\n  debounce\n} from 'lodash';\nimport {\n  makeSelectConfigAtsSvgProps,\n  makeSelectUserFirmId,\n  makeSelectUserCanManageMasters,\n} from '../../modules/AtsModule/selectors';\nimport {\n  COLUMN_TYPES,\n  CREATE_NEW_MASTER_FROM_TEMPLATE_PATH,\n  MASTER_DETAIL_PATH,\n} from '../../constants';\nimport { togglePath } from '../../components/TogglePath/utils';\nimport { makeSelectLocation, IRouterReducerLocation } from '../../modules/RouterModule/selectors';\nimport NotFound from '../../components/NotFound';\nimport { ReactComponent as LoadingImage } from '../../images/loadingCart.svg';\n\nimport MasterListFilter, { FORM_NAME as MASTER_LIST_FILTER_FORM} from './MasterListFilter';\nimport { Project, Option, TableColumn, SearchArgs, SavedFilter} from '../../models';\nimport {TablePaginationActions} from '../../components';\nimport EmptyView from '../../components/EmptyView';\nimport { withTranslation } from 'react-i18next';\nimport { utcToLocal } from 'ats-utils/src/utcToLocal';\nimport ToolBar from '../../components/ToolBar';\nimport ColumnSelector from '../../components/ColumnsSelector';\nimport {\n  CollaborationIconCell,\n  LinkCell,\n  ListCell,\n  TextCell\n} from '../../components/_CellRenderers';\nimport CustomActionButton from './_CustomCellRenderers/CustomActionButton';\nimport { AtsSvgMaster } from '../../components/AtsSvg';\nimport { SelectMasterSpecAction } from '../../modules/SpecModule/actions';\nimport CopyModal from '../CopyModal';\nimport { makeSelectFilterList } from '../../modules/AccountModule/selectors';\nimport { GetFiltersByType, GetOfficesByFirmIdAction } from '../../modules/AccountModule/actions';\nimport FilterChipsBar from '../../components/FilterChipsBar';\nimport { buildingType } from '../ProjectList';\n\nconst defaultLimit = 10;\n\nexport const defaultOptions: Option<Project> = {\n  limit: defaultLimit,\n  offset: 0,\n  orderBy: {\n    id: -1\n  }\n};\n\n// INTERFACES\n\ninterface IMasterListComponentProps {\n}\n\ninterface IMasterListProps extends IMasterListComponentProps {\n  dispatch: (s: IAction) => void;\n  searchMasters: (options: Option<Project>, filters?: object) => void;\n  setSelectedMasterSpec: (id: number) => void;\n  searchedMasters: Map<number, IMap<Project>>;\n  searchedMastersHasNextPage: boolean;\n  searchingMasters: boolean;\n  theme: Theme;\n  location: IMap<IRouterReducerLocation>;\n  t: (key: string) => string;\n  masterColumnsList: List<IMap<SavedFilter>>;\n  templateColumnsList: List<IMap<SavedFilter>>;\n  configAtsSvgProps: object;\n  firmId: number;\n  userCanManageMasters: boolean;\n}\n\nconst styles = (theme: Theme): StyleRules => ({\n  container: {\n    display: 'flex',\n    height: '100%',\n    alignContent: 'flex-start',\n    backgroundColor: theme.palette.grey[100],\n    width: '100%',\n    flexGrow: 1,\n    flexDirection: 'column',\n  },\n  contentItemContainer: {\n    overflow: 'auto',\n    height: '100%',\n    boxShadow: theme.shadows[1],\n    borderRadius: theme.shape.borderRadius\n  },\n  contentContainer: {\n    width: '100%',\n    height: '0px',\n    flexGrow: 1,\n    flexBasis: 'auto',\n    padding: '20px',\n  },\n  tableContainer: {\n    overflowX: 'auto',\n    display: 'flex',\n    flexGrow: 1,\n    flexDirection: 'column',\n    justifyContent: 'center',\n    height: '100%'\n  },\n  tableHead: {\n    background: theme.palette.common.white,\n    // position: 'sticky',\n    // top: 0,\n    // zIndex: 9001 /* It's over 9000!!!!! */\n  },\n  headerCell: {\n    whiteSpace: 'nowrap',\n    '&::after': {\n      content: '\"\"',\n      position: 'absolute',\n      left: 0,\n      bottom: 0,\n      width: '100%',\n      borderBottom: '1px solid lightgrey' /* lightgrey is used here to match the default styling applied by materialUI */\n    }\n  },\n  pagination: {\n    display: 'flex',\n    padding: 0,\n    borderBottom: 'none',\n    overflow: 'initial'\n  },\n  paginationToolbar: {\n    overflow: 'auto'\n  },\n});\n\ntype IMasterList = IMasterListProps & WithStyles<keyof ReturnType<typeof styles>>;\n\ninterface IState {\n  columnsToDisplay: TableColumn[];\n  page: number;\n  searchTerm: string;\n  openFilterDrawer: boolean;\n  openColumnsDrawer: boolean;\n  options: Option<Project>;\n  filters: object;\n  masterListFilterUniqueKey: any;\n}\n\nconst locationContent = (x: any) => [x.getIn(['city', 'value'], null), x.getIn(['province', 'value'], null), x.getIn(['country', 'value'], null)].filter((y) => y).join(', ');\n\nclass MasterList extends React.Component<IMasterList, IState> {\n\n  public masterColumns = [\n    { id: 'Type', label: 'specAndProjectList.typeColumn', path: ['isCollaborated'], display: true, sortable: false },\n    { id: 'Master Title', label: 'MasterListPage.masterTitleColumn', path: ['name'], display: true, sortable: true },\n    { id: 'Specifications', label: 'MasterListPage.specificationsColumn', display: true, sortable: true },\n    { id: 'Location', label: 'MasterListPage.locationColumn', path: ['location'], display: true, sortable: true },\n    { id: 'Building Type', label: 'MasterListPage.buildingTypeColumn', path: ['building'], display: true, sortable: true },\n    { id: 'Creator', label: 'MasterListPage.creatorColumn', path: ['createdBy', 'user', 'name'], display: true, sortable: true },\n    { id: 'Created Date', label: 'MasterListPage.createdDateColumn', path: ['createdDate'], display: true, sortable: true },\n    { id: 'Updated Date', label: 'MasterListPage.updatedDateColumn', path: ['modifiedDate'], display: true, sortable: true },\n    { id: 'Actions', label: 'MasterListPage.actionsColumn', display: true, sortable: true },\n  ];\n\n  public handleSubmit = debounce((searchTerm: string) => {\n    const {\n      options\n    } = this.state;\n\n    this.setSearchArgsAndSearch({\n      options: {\n        ...options,\n        offset: 0\n      },\n      searchTerm,\n      page: 0\n    });\n  }, 500);\n\n  public constructor(props) {\n    super(props);\n    this.state = {\n      // someone mixed concept 'columnsToDisplay' with 'columnsToSort', make sure unsortable columns appear before sortable columns or you have to do refactor to seperate concerns, 2020-03-11 https://atsinc.atlassian.net/browse/PT-1261\n      columnsToDisplay: this.masterColumns,\n      openFilterDrawer: false,\n      openColumnsDrawer: false,\n      page: 0,\n      searchTerm: '',\n      filters: null,\n      options: defaultOptions,\n      masterListFilterUniqueKey: ''\n    };\n  }\n\n  public toggleFilterDrawer = () => {\n    this.setState(prevState => ({\n      openFilterDrawer: !prevState.openFilterDrawer,\n      openColumnsDrawer: false\n    }));\n  }\n\n  public toggleColumnsDrawer = () => {\n    this.setState(prevState => ({\n      openColumnsDrawer: !prevState.openColumnsDrawer,\n      openFilterDrawer: false\n    }));\n  }\n\n  public setSearchArgsAndSearch = (args: SearchArgs<Project>) => {\n    const {\n      dispatch,\n      searchMasters,\n    } = this.props;\n    const {\n      options: currentOptions,\n      searchTerm: currentSearchTerm,\n      filters: currentFilters,\n      page: currentPage,\n    } = this.state;\n    const {\n      options: newOptions,\n      searchTerm: newSearchTerm,\n      filters: newFilters,\n      page: newPage\n    } = args;\n\n    this.setState(\n      {\n        options: newOptions || currentOptions,\n        searchTerm: newSearchTerm !== undefined ? newSearchTerm : currentSearchTerm,\n        filters: newFilters !== undefined ? newFilters : currentFilters,\n        page: newPage !== undefined ? newPage : currentPage\n      }, () => {\n        let filters = {\n          and: []\n        };\n        if (this.state.searchTerm) {\n           filters = {\n            'and': [\n              {\n                'name': {\n                  'like': this.state.searchTerm\n                }\n              }\n            ]\n          };\n        }\n        this.state.filters && filters.and.push(...(this.state.filters as any).and); // tslint:disable-line\n        if (filters.and.length === 0) {\n          delete filters.and;\n        }\n        dispatch(new LoadingSearchedMastersAction());\n        searchMasters(\n            this.state.options,\n            filters\n        );\n      }\n    );\n  }\n\n  public componentDidMount() {\n    const { dispatch, masterColumnsList, firmId } = this.props;\n\n    this.setSearchArgsAndSearch({});\n\n    if (!masterColumnsList) {\n      dispatch(new GetFiltersByType({ filterType: COLUMN_TYPES.SPEC_MASTER_LIST_COLUMNS }));\n    }\n\n    if (firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n  }\n\n  public componentDidUpdate = (prevProps, prevState) => {\n    const { dispatch, searchedMasters, firmId } = this.props;\n    const { options, page } = this.state;\n\n    // this is for the case where the count is not the most updated and leading to offset > count\n    // which will result in no projects returned\n    if (prevProps.searchedMasters.size && searchedMasters.size === 0 && options.offset) {\n      this.setSearchArgsAndSearch({\n        options: {\n          ...options,\n          offset: options.offset - options.limit\n        },\n        page: page - 1\n      });\n    }\n\n    if (prevProps.firmId !== firmId && firmId !== -1) {\n      dispatch(new GetOfficesByFirmIdAction({}));\n    }\n  }\n\n  public handleColumnsChange = (newColumnsToDisplay: TableColumn[]) => this.setState({ columnsToDisplay: newColumnsToDisplay });\n\n  public handlePageChange = (e, newPage) => {\n    const {\n      options,\n    } = this.state;\n\n    const { limit } = options;\n    const newOptions = {\n      ...options,\n      offset: newPage * limit\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: newPage});\n  }\n\n  public handleChangeRowsPerPage = (e: any) => {\n    const {\n      options,\n      page,\n    } = this.state;\n\n    const newRow = Number(e.target.value);\n    const adjustedPage = Math.ceil((((page) * options.limit) + 1) / newRow) - 1;\n\n    const newOptions = {\n      ...options,\n      limit: newRow,\n      offset: newRow * adjustedPage\n    };\n\n    this.setSearchArgsAndSearch({options: newOptions, page: adjustedPage});\n  }\n\n  public handleAddMaster = () => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: CREATE_NEW_MASTER_FROM_TEMPLATE_PATH,\n      dispatch,\n      location,\n    })()();\n  }\n\n  public handleAdd = (path: string) => {\n    const {\n      dispatch,\n      location\n    } = this.props;\n\n    togglePath({\n      pathName: path,\n      dispatch,\n      location,\n    })()();\n  }\n\n  public render() {\n    const {\n      theme,\n      classes,\n      searchedMasters,\n      searchingMasters,\n      searchedMastersHasNextPage,\n      setSelectedMasterSpec,\n      t,\n      configAtsSvgProps,\n      userCanManageMasters,\n    } = this.props;\n    const {\n      options,\n      searchTerm,\n      filters,\n      page,\n      openFilterDrawer,\n      openColumnsDrawer,\n      columnsToDisplay,\n    } = this.state;\n\n    const filteredColumnsToDisplay = columnsToDisplay.filter((column) => column.display);\n\n    const labels = {\n      emptyviewSubtitle: t('MasterListPage.emptyviewSubtitle'),\n      emptyviewAddButton: t('MasterListPage.emptyviewAddButton'),\n      emptyviewAlt: t('MasterListPage.emptyviewAlt'),\n      emptyviewNotFound: t('MasterListPage.emptyviewNotFound'),\n    };\n\n    return (\n      <Grid\n        container={true}\n        direction='column'\n        className={classes.container}\n      >\n        <CopyModal defaultDestinationType='master' />\n        <ToolBar\n          onClickColumnButton={this.toggleColumnsDrawer}\n          onClickFilterButton={this.toggleFilterDrawer}\n          searchTooltip={t('MasterListPage.masterSearchTooltip')}\n          searchTerm={searchTerm}\n          onClickFab={() => this.handleAdd(CREATE_NEW_MASTER_FROM_TEMPLATE_PATH)}\n          disabledFab={!userCanManageMasters}\n          fabTooltip={userCanManageMasters ? '' : t('generalTooltip.disabledForNoPermission')}\n          handleSubmit={this.handleSubmit}\n        />\n        <FilterChipsBar\n          filtersFormId={MASTER_LIST_FILTER_FORM}\n          setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n          options={options}\n          setUniqueKey={(key) => this.setState({ masterListFilterUniqueKey: key})}\n        />\n        <Grid\n          container={true}\n          className={classes.contentContainer}\n          wrap='nowrap'\n        >\n          <Grid\n            item={true}\n            xs={12}\n            className={classes.contentItemContainer}\n          >\n            {\n              searchingMasters\n                ? <NotFound\n                    svgIcon={<LoadingImage />}\n                    firstRow={<LinearProgress color='secondary'/>}\n                    secondRow={<Typography variant='h4'>{t('MasterListPage.loading')}</Typography>}\n                    paperContainer={true}\n                  />\n                : <Paper\n                    className={classes.tableContainer}\n                  >\n                    {\n                      searchedMasters.size !== 0\n                        ? <>\n                            <div style={{ overflow: 'auto', flexGrow: 1 }}>\n                              <Table>\n                                <TableHead classes={{ root: classes.tableHead }}>\n                                  <TableRow>\n                                    {filteredColumnsToDisplay.map((header, index) => (\n                                        <TableCell key={index} classes={{ root: classes.headerCell }} style={header.style}>\n                                          {t(header.label)}\n                                        </TableCell>\n                                    ))}\n                                  </TableRow>\n                                </TableHead>\n                                <TableBody>\n                                  {searchedMasters && searchedMasters.map((master: IMap<Project>, index: number) => (\n                                      <TableRow id={`${index}`} key={index} hover={true}>\n                                        {master && filteredColumnsToDisplay.map((column: TableColumn) => {\n                                          switch (column.id) {\n                                            case 'Type': return <CollaborationIconCell key={column.label} isCollaborated={master.getIn(column.path)} />;\n                                            case 'Master Title': return <LinkCell key={column.label} name={master.getIn(column.path)} refresh={false} linkPath={`${MASTER_DETAIL_PATH}/${master.get('id')}`} />;\n                                            case 'Specifications': return <ListCell\n                                                key={column.label}\n                                                data={master.get('specs').map(spec => ({\n                                                  name: spec.get('name'),\n                                                  action: () => setSelectedMasterSpec(spec.get('id'))\n                                                }))}\n                                                overridePath={`${MASTER_DETAIL_PATH}/${master.get('id')}`}\n                                            />;\n                                            case 'Location': return <TextCell key={column.label} text={locationContent(master.getIn(column.path))} />;\n                                            case 'Building Type': return <TextCell key={column.label} text={buildingType(master.getIn(column.path))} />;\n                                            case 'Creator': return <TextCell key={column.label} text={master.getIn(column.path)} />;\n                                            case 'Created Date':\n                                            case 'Updated Date': return <TextCell key={column.label} text={utcToLocal(master.getIn(column.path))} />;\n                                            case 'Actions': return <CustomActionButton key={column.label} userCanManageMasters={userCanManageMasters} master={master} options={options} filters={filters} searchTerm={searchTerm}/>;\n                                          }\n                                        })}\n                                      </TableRow>\n                                  ))}\n                                </TableBody>\n                              </Table>\n                            </div>\n                            <TablePagination\n                              className={classes.pagination}\n                              component='div'\n                              labelRowsPerPage={t('Pagination.rowsPerPage')}\n                              onChangePage={this.handlePageChange}\n                              rowsPerPageOptions={[5, 10, 25, 50]}\n                              onChangeRowsPerPage={this.handleChangeRowsPerPage}\n                              count={searchedMastersHasNextPage ? options.offset + options.limit + 1 : options.offset + searchedMasters?.size}\n                              labelDisplayedRows={({ from, to }) => `${from}-${to}`}\n                              rowsPerPage={options.limit}\n                              page={page}\n                              ActionsComponent={(paginationProps) => <TablePaginationActions onlyPrevAndNext={true} {...paginationProps} />}\n                              classes={{\n                                toolbar: classes.paginationToolbar\n                              }}\n                            />\n                          </>\n                        : <EmptyView\n                            svg={<AtsSvgMaster color={{ backgroundColor: theme.palette.primary[200], shadowColor: theme.palette.primary[900] }} {...configAtsSvgProps} />}\n                            onButtonClicked={this.handleAddMaster}\n                            emptyviewSubtitle={labels.emptyviewSubtitle}\n                            emptyviewAddButton={labels.emptyviewAddButton}\n                            emptyviewAlt={labels.emptyviewAlt}\n                            emptyviewNotFound={labels.emptyviewNotFound}\n                          />\n                    }\n                  </Paper>\n            }\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openFilterDrawer ? '370px' : 0,\n            }}\n          >\n            <MasterListFilter\n              toggleDrawer={this.toggleFilterDrawer}\n              open={this.state.openFilterDrawer}\n              options={options}\n              setSearchArgsAndSearch={this.setSearchArgsAndSearch}\n              uniqueKey={this.state.masterListFilterUniqueKey}\n              setUniqueKey={(key) => this.setState({ masterListFilterUniqueKey: key})}\n            />\n          </Grid>\n          <Grid\n            item={true}\n            className={classes.contentItemContainer}\n            style={{\n              minWidth: openColumnsDrawer ? '370px' : 0,\n            }}\n          >\n            <ColumnSelector\n              columnType={COLUMN_TYPES.SPEC_MASTER_LIST_COLUMNS}\n              defaultColumns={this.masterColumns}\n              columnsToDisplay={columnsToDisplay}\n              disabledColumns={['Master Title']}\n              isOpen={openColumnsDrawer}\n              onClose={this.toggleColumnsDrawer}\n              handleColumnsChange={this.handleColumnsChange}\n            />\n          </Grid>\n        </Grid>\n      </Grid>\n    );\n  }\n}\n\nconst mapDispatchToProps = (dispatch: React.Dispatch<IAction>) => {\n  return {\n    dispatch,\n    searchMasters: (options: Option<Project>, filters?: object) => {\n      dispatch(new SearchMastersAction({\n        options,\n        filters\n      }));\n    },\n    setSelectedMasterSpec: (id: number) => dispatch(new SelectMasterSpecAction(id)),\n  };\n};\n\nconst makeMapStateToProps = () => {\n  const searchedMastersSelect = makeSelectSearchedMasters();\n  const searchedMastersHasNextPageSelect = makeSelectSearchedMastersHasNextPage();\n  const searchingMastersSelect =  makeSelectSearchingMasters();\n  const locationSelect = makeSelectLocation();\n  const masterColumnsListSelect = makeSelectFilterList(COLUMN_TYPES.SPEC_MASTER_LIST_COLUMNS);\n  const configAtsSvgPropsSelect = makeSelectConfigAtsSvgProps();\n  const userFirmIdSelect = makeSelectUserFirmId();\n  const userCanManageMastersSelect = makeSelectUserCanManageMasters();\n\n  return (state) => ({\n    searchedMasters: searchedMastersSelect(state),\n    searchedMastersHasNextPage: searchedMastersHasNextPageSelect(state),\n    searchingMasters: searchingMastersSelect(state),\n    location: locationSelect(state),\n    masterColumnsList: masterColumnsListSelect(state),\n    configAtsSvgProps: configAtsSvgPropsSelect(state),\n    firmId: userFirmIdSelect(state),\n    userCanManageMasters: userCanManageMastersSelect(state),\n  });\n};\n\nexport default compose<React.ComponentClass<IMasterListComponentProps>>(\n  withStyles(styles, { withTheme: true }),\n  withTranslation('translations'),\n  connect(makeMapStateToProps, mapDispatchToProps)\n)(MasterList);\n","import { fromJS } from 'immutable';\n\n////////////////////////////////////////////////////////////////\n// whitelist\n////////////////////////////////////////////////////////////////\n\nexport const RAW_ALL_PIPES_WHITELIST = {\n  'nsfansi61': 1,\n  'nsfansican372': 1,\n  'astme84': 1,\n};\n\nexport const RAW_ALL_PLASTIC_PIPES_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  'astme438': 1,\n  'nsfstandard14': 1,\n  'astmd4396': 1,\n  'astmf1488': 1,\n  'astmd1784': 1,\n};\n\nexport const PVC_WHITELIST = {\n  'astmd1785': 1,\n  'astmd2665': 1,\n  'astmd2241': 1,\n  'astmf480': 1,\n  'astmd3034': 1,\n  'astmd2729': 1,\n  'astmf891': 1,\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n};\n\nexport const CPVC_WHITELIST = {\n  'astmf441': 1,\n  'astmd2846d2846m': 1,\n  'astmf2618': 1,\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n};\n\nexport const ABS_WHITELIST = {\n  'csab181_1': 1,\n  'astmd2661': 1,\n  'astmd3965': 1,\n  'astmf628': 1,\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n};\n\nexport const PEX_WHITELIST = {\n  'astmf876': 1,\n  'astmf877': 1,\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n};\n\nexport const PPPE_WHITELIST = {\n  'astmf1412': 1,\n  'astmd4101': 1,\n  'astmd2447': 1,\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n};\n\nexport const ALL_PLASTIC_PIPES_WHITELIST = {\n  ...RAW_ALL_PLASTIC_PIPES_WHITELIST,\n  ...PVC_WHITELIST,\n  ...CPVC_WHITELIST,\n  ...ABS_WHITELIST,\n  ...PEX_WHITELIST,\n  ...PPPE_WHITELIST,\n};\n\nexport const COPPER_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  'astmb88': 1,\n  'astmb306': 1,\n  'astmb819': 1,\n};\n\nexport const CAST_IRON_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  'csab70': 1,\n  'astma74': 1,\n  'astma888': 1,\n  'cispi301': 1,\n};\n\nexport const STAINLESS_STEEL_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  'asmea112_3_1': 1,\n  'astma312': 1,\n  'astma790': 1,\n};\n\nexport const GLASS_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  'astmc1053': 1,\n};\n\nexport const ALL_PIPES_WHITELIST = {\n  ...RAW_ALL_PIPES_WHITELIST,\n  ...ALL_PLASTIC_PIPES_WHITELIST,\n  ...COPPER_WHITELIST,\n  ...CAST_IRON_WHITELIST,\n  ...STAINLESS_STEEL_WHITELIST,\n  ...GLASS_WHITELIST,\n};\n\n\n\n\n////////////////////////////////////////////////////////////////\n// whitelist rank and mapping\n////////////////////////////////////////////////////////////////\n\nexport const STANDARD_WHITELIST = fromJS({\n  'nsfansi61': {\n    rank: 0,\n    whitelist: ALL_PIPES_WHITELIST,\n  },\n  'nsfansican372': {\n    rank: 0,\n    whitelist: ALL_PIPES_WHITELIST,\n  },\n  'astme84': {\n    rank: 0,\n    whitelist: ALL_PIPES_WHITELIST,\n  },\n  'astme438': {\n    rank: 1,\n    whitelist: ALL_PLASTIC_PIPES_WHITELIST,\n  },\n  'nsfstandard14': {\n    rank: 1,\n    whitelist: ALL_PLASTIC_PIPES_WHITELIST,\n  },\n  'astmd4396': {\n    rank: 1,\n    whitelist: ALL_PLASTIC_PIPES_WHITELIST,\n  },\n  'astmf1488': {\n    rank: 1,\n    whitelist: ALL_PLASTIC_PIPES_WHITELIST,\n  },\n  'astmd1784': {\n    rank: 1,\n    whitelist: ALL_PLASTIC_PIPES_WHITELIST,\n  },\n  'astmd1785': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmd2665': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmd2241': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmf480': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmd3034': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmd2729': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmf891': {\n    rank: 2,\n    whitelist: PVC_WHITELIST,\n  },\n  'astmf441': {\n    rank: 2,\n    whitelist: CPVC_WHITELIST,\n  },\n  'astmd2846d2846m': {\n    rank: 2,\n    whitelist: CPVC_WHITELIST,\n  },\n  'astmf2618': {\n    rank: 2,\n    whitelist: CPVC_WHITELIST,\n  },\n  'csab181_1': {\n    rank: 2,\n    whitelist: ABS_WHITELIST,\n  },\n  'astmd2661': {\n    rank: 2,\n    whitelist: ABS_WHITELIST,\n  },\n  'astmd3965': {\n    rank: 2,\n    whitelist: ABS_WHITELIST,\n  },\n  'astmf628': {\n    rank: 2,\n    whitelist: ABS_WHITELIST,\n  },\n  'astmf876': {\n    rank: 2,\n    whitelist: PEX_WHITELIST,\n  },\n  'astmf877': {\n    rank: 2,\n    whitelist: PEX_WHITELIST,\n  },\n  'astmf1412': {\n    rank: 2,\n    whitelist: PPPE_WHITELIST,\n  },\n  'astmd4101': {\n    rank: 2,\n    whitelist: PPPE_WHITELIST,\n  },\n  'astmd2447': {\n    rank: 2,\n    whitelist: PPPE_WHITELIST,\n  },\n  'astmb88': {\n    rank: 2,\n    whitelist: COPPER_WHITELIST,\n  },\n  'astmb306': {\n    rank: 2,\n    whitelist: COPPER_WHITELIST,\n  },\n  'astmb819': {\n    rank: 2,\n    whitelist: COPPER_WHITELIST,\n  },\n  'csab70': {\n    rank: 2,\n    whitelist: CAST_IRON_WHITELIST,\n  },\n  'astma74': {\n    rank: 2,\n    whitelist: CAST_IRON_WHITELIST,\n  },\n  'astma888': {\n    rank: 2,\n    whitelist: CAST_IRON_WHITELIST,\n  },\n  'cispi301': {\n    rank: 2,\n    whitelist: CAST_IRON_WHITELIST,\n  },\n  'asmea112_3_1': {\n    rank: 2,\n    whitelist: STAINLESS_STEEL_WHITELIST,\n  },\n  'astma312': {\n    rank: 2,\n    whitelist: STAINLESS_STEEL_WHITELIST,\n  },\n  'astma790': {\n    rank: 2,\n    whitelist: STAINLESS_STEEL_WHITELIST,\n  },\n  'astmc1053': {\n    rank: 2,\n    whitelist: GLASS_WHITELIST,\n  },\n});\n\n\n\n////////////////////////////////////////////////////////////////\n// standard details\n////////////////////////////////////////////////////////////////\n\nexport const DEFAULT_PIPE_FILTER_LIST = fromJS([\n  {\n    groupTitle: 'pipeStandardsModal.allPipesGroupTitle',\n    groupCaption: 'pipeStandardsModal.allPipesCaption',\n    materials: [\n      {\n        materialLabel: '',\n        standards: [\n          {\n            key: 'nsfansi61',\n            value: 'nsf ansi 61 compliant',\n            checkboxLabel: 'NSF/ANSI 61',\n          },\n          {\n            key: 'nsfansican372',\n            value: 'nsf ansi can 372 compliant',\n            checkboxLabel: 'NSF/ANSI/CAN 372',\n          },\n          {\n            key: 'astme84',\n            value: 'astm e 84 compliant',\n            checkboxLabel: 'ASTM E 84',\n          }\n        ]\n      }\n    ],\n  },\n  { // Plastic Pipes\n    groupTitle: 'pipeStandardsModal.plasticPipesGroupTitle',\n    materials: [\n      { // All Plastic Pipes\n        materialLabel: 'pipeStandardsModal.allPlasticPipesMaterialLabel',\n        standards: [\n          {\n            key: 'astme438',\n            value: 'astm e 438 compliant',\n            checkboxLabel: 'ASTM E 438',\n          },\n          {\n            key: 'nsfstandard14',\n            value: 'nsf standard 14 compliant',\n            checkboxLabel: 'NSF Standard 14',\n          },\n          {\n            key: 'astmd4396',\n            value: 'astm d 4396 compliant',\n            checkboxLabel: 'ASTM D 4396',\n          },\n          {\n            key: 'astmf1488',\n            value: 'astm f 1488 compliant',\n            checkboxLabel: 'ASTM F 1488',\n          },\n          {\n            key: 'astmd1784',\n            value: 'astm d 1784 compliant',\n            checkboxLabel: 'ASTM D 1784',\n          },\n        ]\n      },\n      { // PVC\n        materialLabel: 'pipeStandardsModal.pvcMaterialLabel',\n        standards: [\n          {\n            key: 'astmd1785',\n            value: 'astm d 1785 compliant',\n            checkboxLabel: 'ASTM D 1785',\n          },\n          {\n            key: 'astmd2665',\n            value: 'astm d 2665 compliant',\n            checkboxLabel: 'ASTM D 2665',\n          },\n          {\n            key: 'astmd2241',\n            value: 'astm d 2241 compliant',\n            checkboxLabel: 'ASTM D 2241',\n          },\n          {\n            key: 'astmf480',\n            value: 'astm f 480 compliant',\n            checkboxLabel: 'ASTM F 480',\n          },\n          {\n            key: 'astmd3034',\n            value: 'astm d 3034 compliant',\n            checkboxLabel: 'ASTM D 3034',\n          },\n          {\n            key: 'astmd2729',\n            value: 'astm d 2729 compliant',\n            checkboxLabel: 'ASTM D 2729',\n          },\n          {\n            key: 'astmf891',\n            value: 'astm f 891 compliant',\n            checkboxLabel: 'ASTM F 891',\n          },\n        ]\n      },\n      { // CPVC\n        materialLabel: 'pipeStandardsModal.cpvcMaterialLabel',\n        standards: [\n          {\n            key: 'astmf441',\n            value: 'astm f 441 compliant',\n            checkboxLabel: 'ASTM F 441',\n          },\n          {\n            key: 'astmd2846d2846m',\n            value: 'astm d 2846 d 2846m compliant',\n            checkboxLabel: 'ASTM D 2846/D 2846M',\n          },\n          {\n            key: 'astmf2618',\n            value: 'astm f 2618 compliant',\n            checkboxLabel: 'ASTM F 2618',\n          },\n        ]\n      },\n      { // ABS\n        materialLabel: 'pipeStandardsModal.absMaterialLabel',\n        standards: [\n          {\n            key: 'csab181_1',\n            value: 'csa b 181_1 compliant',\n            checkboxLabel: 'CSA B 181.1',\n          },\n          {\n            key: 'astmd2661',\n            value: 'astm d 2661 compliant',\n            checkboxLabel: 'ASTM D 2661',\n          },\n          {\n            key: 'astmd3965',\n            value: 'astm d 3965 compliant',\n            checkboxLabel: 'ASTM D 3965',\n          },\n          {\n            key: 'astmf628',\n            value: 'astm f 628 compliant',\n            checkboxLabel: 'ASTM F 628',\n          },\n        ]\n      },\n      { // PEX\n        materialLabel: 'pipeStandardsModal.pexMaterialLabel',\n        standards: [\n          {\n            key: 'astmf876',\n            value: 'astm f 876 compliant',\n            checkboxLabel: 'ASTM F 876',\n          },\n          {\n            key: 'astmf877',\n            value: 'astm f 877 compliant',\n            checkboxLabel: 'ASTM F 877',\n          },\n        ]\n      },\n      { // PPPE\n        materialLabel: 'pipeStandardsModal.pppeMaterialLabel',\n        standards: [\n          {\n            key: 'astmf1412',\n            value: 'astm f 1412 compliant',\n            checkboxLabel: 'ASTM F 1412',\n          },\n          {\n            key: 'astmd4101',\n            value: 'astm d 4101 compliant',\n            checkboxLabel: 'ASTM D 4101',\n          },\n          {\n            key: 'astmd2447',\n            value: 'astm d 2447 compliant',\n            checkboxLabel: 'ASTM D 2447',\n          },\n        ]\n      }\n    ]\n  },\n  { // Metal Pipes\n    groupTitle: 'pipeStandardsModal.metalPipesGroupTitle',\n    materials: [\n      { // Copper\n        materialLabel: 'pipeStandardsModal.copperMaterialLabel',\n        standards: [\n          {\n            key: 'astmb88',\n            value: 'astm b 88 compliant',\n            checkboxLabel: 'ASTM B 88',\n          },\n          {\n            key: 'astmb306',\n            value: 'astm b 306 compliant',\n            checkboxLabel: 'ASTM B 306',\n          },\n          {\n            key: 'astmb819',\n            value: 'astm b 819 compliant',\n            checkboxLabel: 'ASTM B 819',\n          },\n        ]\n      },\n      { // Cast Iron\n        materialLabel: 'pipeStandardsModal.castIronMaterialLabel',\n        standards: [\n          {\n            key: 'csab70',\n            value: 'csa b 70 compliant',\n            checkboxLabel: 'CSA B 70',\n            whitelist: CAST_IRON_WHITELIST,\n          },\n          {\n            key: 'astma74',\n            value: 'astm a 74 compliant',\n            checkboxLabel: 'ASTM A 74',\n            whitelist: CAST_IRON_WHITELIST,\n          },\n          {\n            key: 'astma888',\n            value: 'astm a 888 compliant',\n            checkboxLabel: 'ASTM A 888',\n            whitelist: CAST_IRON_WHITELIST,\n          },\n          {\n            key: 'cispi301',\n            value: 'cispi 301 compliant',\n            checkboxLabel: 'CISPI 301',\n            whitelist: CAST_IRON_WHITELIST,\n          },\n        ]\n      },\n      { // Stainless Steel\n        materialLabel: 'pipeStandardsModal.stainlessSteelMaterialLabel',\n        standards: [\n          {\n            key: 'asmea112_3_1',\n            value: 'asme a 112_3_1 compliant',\n            checkboxLabel: 'ASME A 112.3.1',\n            whitelist: COPPER_WHITELIST,\n          },\n          {\n            key: 'astma312',\n            value: 'astm a 312 compliant',\n            checkboxLabel: 'ASTM A 312',\n            whitelist: COPPER_WHITELIST,\n          },\n          {\n            key: 'astma790',\n            value: 'astm a 790 compliant',\n            checkboxLabel: 'ASTM A 790',\n            whitelist: COPPER_WHITELIST,\n          },\n        ]\n      },\n    ],\n  },\n  { // Glass Pipes\n    groupTitle: 'pipeStandardsModal.glassPipesGroupTitle',\n    materials: [\n      { // Glass\n        materialLabel: 'pipeStandardsModal.glassMaterialLabel',\n        standards: [\n          {\n            key: 'astmc1053',\n            value: 'astm c 1053 compliant',\n            checkboxLabel: 'ASTM C 1053',\n          },\n        ]\n      }\n    ],\n  }\n]);","import * as React from 'react';\nimport {\n  Grid,\n  Theme,\n  DialogContent,\n  DialogContentText,\n  IconButton,\n  useTheme,\n  Typography,\n  DialogActions,\n  Button,\n  Checkbox,\n  FormControlLabel\n} from '@material-ui/core';\nimport {\n  useDispatch,\n  useSelector\n} from 'react-redux';\nimport {\n  useTranslation,\n} from 'react-i18next';\nimport { makeStyles } from '@material-ui/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ControlledModal } from '../../../components';\nimport { SetOverlayComponentPropsAction, ToggleOverlayComponentAction } from '../../../modules/ApplicationModule/actions';\nimport { makeSelectOverlayComponent } from '../../../modules/ApplicationModule/selectors';\nimport { fromJS } from 'immutable';\nimport { DEFAULT_PIPE_FILTER_LIST, STANDARD_WHITELIST } from './constants';\nimport { ProductFilterRemoveAction, ProductFilterToggleAction, SeriesFilterRemoveAction, SeriesFilterToggleAction, SeriesLoadingAction, UseActionAndSearchWithFilterAction } from '../../../modules/ProductModule/actions';\nimport { makeSelectSkipRuleEngine, selectSeriesFilters } from '../../../modules/ProductModule/selectors';\n\ninterface IPipeFilterModalComponentProps {\n}\n\ninterface IPipeFilterModalProps extends IPipeFilterModalComponentProps {\n}\n\ntype PipeFilterModalProps= IPipeFilterModalProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n  paper: {\n    width: 1040,\n    maxWidth: '80%',\n    padding: 16,\n    height: '85%',\n    overflow: 'hidden',\n  },\n  closeIcon: {\n    position: 'absolute',\n    right: theme.spacing(0.5),\n    top: theme.spacing(0.5)\n  },\n  checkbox: {\n    padding: theme.spacing(0.5),\n    marginLeft: theme.spacing(2),\n  },\n  ctaContainer: {\n    padding: 0,\n    marginTop: theme.spacing(2),\n  },\n  cta: {\n    padding: theme.spacing(0.75, 3),\n  }\n}));\n\nexport const PIPE_FILTER_MODAL = 'PIPE_FILTER_MODAL';\n\nconst PipeFilterModal: React.FC<PipeFilterModalProps> = () =>  {\n  const dispatch = useDispatch();\n  const classes = useStyles();\n  const theme = useTheme();\n  const { t } = useTranslation('translations');\n  const open = useSelector(makeSelectOverlayComponent(PIPE_FILTER_MODAL));\n  const skipRules = useSelector(makeSelectSkipRuleEngine());\n  const seriesFilters = useSelector(selectSeriesFilters());\n  const [selectedStandards, setSelectedStandards] = React.useState(fromJS({}));\n  const [whitelist, setWhitelist] = React.useState(fromJS({}));\n\n  const clearProps = () => {\n    dispatch(new SetOverlayComponentPropsAction({\n      id: PIPE_FILTER_MODAL,\n      props: {}\n    }));\n  };\n\n  const closeModal = () => {\n    dispatch(new ToggleOverlayComponentAction({open: false, id: PIPE_FILTER_MODAL}));\n  };\n\n  const onOpen = () => {\n    // initialize state from seriesFilters\n    const standards = seriesFilters.reduce((acc, filter, key) => {\n      if (STANDARD_WHITELIST.has(key) && filter?.size) {\n        acc = acc.set(key, true);\n      }\n      return acc;\n    }, fromJS({}));\n\n    setSelectedStandards(standards);\n    updateWhitelist(standards);\n  };\n\n  React.useEffect(() => {\n    if (open) {\n      onOpen();\n    }\n    if (!open) {\n      setTimeout(clearProps, 200);\n    }\n  }, [open]);\n\n  const updateWhitelist = (standards) => {\n    let highestRank = 0;\n    let newWhitelistStandardKey = null;\n\n    standards.some((checked, key) => {\n      const rank = STANDARD_WHITELIST.getIn([key, 'rank']);\n      if (rank === 2) {\n        newWhitelistStandardKey = key;\n        return true;\n      }\n      if (rank > highestRank) {\n        highestRank = rank;\n        newWhitelistStandardKey = key;\n      }\n    });\n\n    if (!newWhitelistStandardKey) {\n      setWhitelist(fromJS({}));\n    } else {\n      setWhitelist(STANDARD_WHITELIST.getIn([newWhitelistStandardKey, 'whitelist']));\n    }\n  };\n\n  const handleChecked = (e) => {\n    const { checked, name } = e.target;\n\n    const newStandards = checked ? selectedStandards.set(name, checked) : selectedStandards.delete(name);\n    setSelectedStandards(newStandards);\n\n    if (checked && STANDARD_WHITELIST.getIn([name, 'rank']) === 2) { // 2 is the highest rank atm, so if it's 2 then we can just set the new whitelist\n      setWhitelist(STANDARD_WHITELIST.getIn([name, 'whitelist']));\n    } else {\n      updateWhitelist(newStandards);\n    }\n  };\n\n  const handleReset = () => {\n    setSelectedStandards(fromJS({}));\n    setWhitelist(fromJS({}));\n  };\n\n  const applyFilter = () => {\n    const standardsMap = DEFAULT_PIPE_FILTER_LIST.reduce((acc, group) => {\n      const materials = group.get('materials');\n      materials.forEach((material) => {\n        const standards = material.get('standards');\n        standards.forEach((standard) => {\n          const key = standard.get('key');\n          const label = [t(group.get('groupTitle')), t(material.get('materialLabel')), standard.get('checkboxLabel')].filter(x => x).join(' - ');\n          acc = acc.set(key, standard.set('label', label));\n        });\n      });\n      return acc;\n    }, fromJS({}));\n\n    dispatch(new SeriesLoadingAction());\n\n    // reset pipe filters\n    const standardsArray = standardsMap.toList().toJS();\n    dispatch(new SeriesFilterRemoveAction(standardsArray));\n    dispatch(new ProductFilterRemoveAction(standardsArray));\n\n    // construct attributeOptions\n    const attributeOptions = selectedStandards.reduce((acc, selectedStandard, key) => {\n      return acc.push({\n        key,\n        value: standardsMap.getIn([key, 'value']),\n        multi: false,\n        label: standardsMap.getIn([key, 'label']),\n      });\n    }, fromJS([]));\n\n    // add filters and search\n    dispatch(new UseActionAndSearchWithFilterAction({\n      passedAction: {\n        seriesAction: SeriesFilterToggleAction,\n        productAction: ProductFilterToggleAction\n      },\n      attributeOptions: attributeOptions.toJS(),\n      skipRules,\n    }));\n\n    closeModal();\n  };\n\n  return (\n    <>\n      <ControlledModal\n        localKey={PIPE_FILTER_MODAL}\n        scroll='body'\n        PaperProps={{\n          className: classes.paper,\n        }}\n      >\n        <div style={{  display: 'flex', flexDirection: 'column', height: '100%' }}>\n          <Grid container={true} justify='space-between' style={{ marginBottom: theme.spacing(3) }}>\n            <Grid>\n              <Typography\n                variant='h6'\n                color='textPrimary'\n              >\n                {t('pipeStandardsModal.title')}\n              </Typography>\n              <Typography\n                variant='caption'\n              >\n                {t('pipeStandardsModal.subtitle')}\n              </Typography>\n            </Grid>\n            <IconButton\n              onClick={closeModal}\n              className={classes.closeIcon}\n            >\n              <CloseIcon />\n            </IconButton>\n          </Grid>\n\n          <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n            <div style={{ display: 'flex', flexDirection: 'column', overflowY: 'auto', overflowX: 'hidden', flexGrow: 1, height: 0 }}>\n              {\n                DEFAULT_PIPE_FILTER_LIST.map((group, groupIndex) => {\n                  const materials = group.get('materials');\n                  return (\n                    <div key={groupIndex} style={{ marginBottom: theme.spacing(2) }}>\n                      <Typography variant='subtitle1' color='textPrimary' style={{ fontWeight: 'bold' }}>\n                        {t(group.get('groupTitle'))}\n                      </Typography>\n                      <Typography variant='caption'>\n                        {t(group.get('groupCaption'))}\n                      </Typography>\n                      <Grid container={true} direction='row' spacing={1}>\n                        {\n                          materials.map((material, materialIndex) => {\n                            const standards = material.get('standards');\n                            return (\n                              <Grid container={true} item={true} xs={3} key={materialIndex} direction='column' style={{ marginTop: theme.spacing(1) }}>\n                                <Typography color='textPrimary'>\n                                  {t(material.get('materialLabel'))}\n                                </Typography>\n                                {\n                                  standards.map((standard, standardIndex) => {\n                                    const key = standard.get('key');\n                                    const isEnabled = whitelist.get(key) || whitelist.isEmpty();\n                                    return (\n                                      <FormControlLabel\n                                        control={\n                                          <Checkbox\n                                            color='primary'\n                                            classes={{\n                                              root: classes.checkbox,\n                                            }}\n                                            disabled={!isEnabled}\n                                            checked={selectedStandards.get(key) ?? false}\n                                            onChange={handleChecked}\n                                          />\n                                        }\n                                        name={key}\n                                        label={standard.get('checkboxLabel')}\n                                        key={standardIndex}\n                                      />\n                                    );\n                                  })\n                                }\n                              </Grid>\n                            );\n                          })\n                        }\n                      </Grid>\n                    </div>\n                  );\n                })\n              }\n            </div>\n          </div>\n\n          <DialogActions className={classes.ctaContainer}>\n            <Button\n              onClick={handleReset}\n              color='primary'\n              className={classes.cta}\n            >\n              { t('formButtons.reset') }\n            </Button>\n\n            <Button\n              onClick={applyFilter}\n              variant='contained'\n              color='primary'\n              className={classes.cta}\n            >\n              { t('pipeStandardsModal.applyButton') }\n            </Button>\n          </DialogActions>\n        </div>\n      </ControlledModal>\n    </>\n  );\n};\n\nexport default PipeFilterModal;","import nested from '../ThemeProvider/nested';\n/**\n * This is the list of the style rule name we use as drop in replacement for the built-in\n * pseudo classes (:checked, :disabled, :focused, etc.).\n *\n * Why do they exist in the first place?\n * These classes are used at a specificity of 2.\n * It allows them to override previously definied styles as well as\n * being untouched by simple user overrides.\n */\n\nvar pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected']; // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\nexport default function createGenerateClassName() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _options$disableGloba = options.disableGlobal,\n      disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba,\n      _options$productionPr = options.productionPrefix,\n      productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n      _options$seed = options.seed,\n      seed = _options$seed === void 0 ? '' : _options$seed;\n  var seedPrefix = seed === '' ? '' : \"\".concat(seed, \"-\");\n  var ruleCounter = 0;\n  return function (rule, styleSheet) {\n    ruleCounter += 1;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (ruleCounter >= 1e10) {\n        console.warn(['Material-UI: you might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join(''));\n      }\n    }\n\n    var name = styleSheet.options.name; // Is a global static MUI style?\n\n    if (name && name.indexOf('Mui') === 0 && !styleSheet.options.link && !disableGlobal) {\n      // We can use a shorthand class name, we never use the keys to style the components.\n      if (pseudoClasses.indexOf(rule.key) !== -1) {\n        return \"Mui-\".concat(rule.key);\n      }\n\n      var prefix = \"\".concat(seedPrefix).concat(name, \"-\").concat(rule.key);\n\n      if (!styleSheet.options.theme[nested] || seed !== '') {\n        return prefix;\n      }\n\n      return \"\".concat(prefix, \"-\").concat(ruleCounter);\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return \"\".concat(seedPrefix).concat(productionPrefix).concat(ruleCounter);\n    }\n\n    var suffix = \"\".concat(rule.key, \"-\").concat(ruleCounter); // Help with debuggability.\n\n    if (styleSheet.options.classNamePrefix) {\n      return \"\".concat(seedPrefix).concat(styleSheet.options.classNamePrefix, \"-\").concat(suffix);\n    }\n\n    return \"\".concat(seedPrefix).concat(suffix);\n  };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport { getThemeProps, useTheme } from '@material-ui/styles';\n\nfunction useMediaQuery(queryInput) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var theme = useTheme();\n  var props = getThemeProps({\n    theme: theme,\n    name: 'MuiUseMediaQuery',\n    props: {}\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof queryInput === 'function' && theme === null) {\n      console.error(['Material-UI: the `query` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n    }\n  }\n\n  var query = typeof queryInput === 'function' ? queryInput(theme) : queryInput;\n  query = query.replace(/^@media( ?)/m, ''); // Wait for jsdom to support the match media feature.\n  // All the browsers Material-UI support have this built-in.\n  // This defensive check is here for simplicity.\n  // Most of the time, the match media logic isn't central to people tests.\n\n  var supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n\n  var _props$options = _extends({}, props, {}, options),\n      _props$options$defaul = _props$options.defaultMatches,\n      defaultMatches = _props$options$defaul === void 0 ? false : _props$options$defaul,\n      _props$options$matchM = _props$options.matchMedia,\n      matchMedia = _props$options$matchM === void 0 ? supportMatchMedia ? window.matchMedia : null : _props$options$matchM,\n      _props$options$noSsr = _props$options.noSsr,\n      noSsr = _props$options$noSsr === void 0 ? false : _props$options$noSsr,\n      _props$options$ssrMat = _props$options.ssrMatchMedia,\n      ssrMatchMedia = _props$options$ssrMat === void 0 ? null : _props$options$ssrMat;\n\n  var _React$useState = React.useState(function () {\n    if (noSsr && supportMatchMedia) {\n      return matchMedia(query).matches;\n    }\n\n    if (ssrMatchMedia) {\n      return ssrMatchMedia(query).matches;\n    } // Once the component is mounted, we rely on the\n    // event listeners to return the correct matches value.\n\n\n    return defaultMatches;\n  }),\n      match = _React$useState[0],\n      setMatch = _React$useState[1];\n\n  React.useEffect(function () {\n    var active = true;\n\n    if (!supportMatchMedia) {\n      return undefined;\n    }\n\n    var queryList = matchMedia(query);\n\n    var updateMatch = function updateMatch() {\n      // Workaround Safari wrong implementation of matchMedia\n      // TODO can we remove it?\n      // https://github.com/mui-org/material-ui/pull/17315#issuecomment-528286677\n      if (active) {\n        setMatch(queryList.matches);\n      }\n    };\n\n    updateMatch();\n    queryList.addListener(updateMatch);\n    return function () {\n      active = false;\n      queryList.removeListener(updateMatch);\n    };\n  }, [query, matchMedia, supportMatchMedia]);\n  return match;\n}\n\nexport default useMediaQuery;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport debounce from '../utils/debounce';\nimport { Transition } from 'react-transition-group';\nimport { elementAcceptingRef } from '@material-ui/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useTheme from '../styles/useTheme';\nimport { duration } from '../styles/transitions';\nimport { reflow, getTransitionProps } from '../transitions/utils'; // Translate the node so he can't be seen on the screen.\n// Later, we gonna translate back the node to his original location\n// with `none`.`\n\nfunction getTranslateValue(direction, node) {\n  var rect = node.getBoundingClientRect();\n  var transform;\n\n  if (node.fakeTransform) {\n    transform = node.fakeTransform;\n  } else {\n    var computedStyle = window.getComputedStyle(node);\n    transform = computedStyle.getPropertyValue('-webkit-transform') || computedStyle.getPropertyValue('transform');\n  }\n\n  var offsetX = 0;\n  var offsetY = 0;\n\n  if (transform && transform !== 'none' && typeof transform === 'string') {\n    var transformValues = transform.split('(')[1].split(')')[0].split(',');\n    offsetX = parseInt(transformValues[4], 10);\n    offsetY = parseInt(transformValues[5], 10);\n  }\n\n  if (direction === 'left') {\n    return \"translateX(\".concat(window.innerWidth, \"px) translateX(-\").concat(rect.left - offsetX, \"px)\");\n  }\n\n  if (direction === 'right') {\n    return \"translateX(-\".concat(rect.left + rect.width - offsetX, \"px)\");\n  }\n\n  if (direction === 'up') {\n    return \"translateY(\".concat(window.innerHeight, \"px) translateY(-\").concat(rect.top - offsetY, \"px)\");\n  } // direction === 'down'\n\n\n  return \"translateY(-\".concat(rect.top + rect.height - offsetY, \"px)\");\n}\n\nexport function setTranslateValue(direction, node) {\n  var transform = getTranslateValue(direction, node);\n\n  if (transform) {\n    node.style.webkitTransform = transform;\n    node.style.transform = transform;\n  }\n}\nvar defaultTimeout = {\n  enter: duration.enteringScreen,\n  exit: duration.leavingScreen\n};\n/**\n * The Slide transition is used by the [Drawer](/components/drawers/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Slide = React.forwardRef(function Slide(props, ref) {\n  var children = props.children,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'down' : _props$direction,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n      other = _objectWithoutProperties(props, [\"children\", \"direction\", \"in\", \"onEnter\", \"onEntering\", \"onExit\", \"onExited\", \"style\", \"timeout\"]);\n\n  var theme = useTheme();\n  var childrenRef = React.useRef(null);\n  /**\n   * used in cloneElement(children, { ref: handleRef })\n   */\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    childrenRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRefIntermediary = useForkRef(children.ref, handleOwnRef);\n  var handleRef = useForkRef(handleRefIntermediary, ref);\n\n  var handleEnter = function handleEnter(_, isAppearing) {\n    var node = childrenRef.current;\n    setTranslateValue(direction, node);\n    reflow(node);\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n\n  var handleEntering = function handleEntering(_, isAppearing) {\n    var node = childrenRef.current;\n    var transitionProps = getTransitionProps({\n      timeout: timeout,\n      style: style\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps, {\n      easing: theme.transitions.easing.easeOut\n    }));\n    node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps, {\n      easing: theme.transitions.easing.easeOut\n    }));\n    node.style.webkitTransform = 'none';\n    node.style.transform = 'none';\n\n    if (onEntering) {\n      onEntering(node, isAppearing);\n    }\n  };\n\n  var handleExit = function handleExit() {\n    var node = childrenRef.current;\n    var transitionProps = getTransitionProps({\n      timeout: timeout,\n      style: style\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps, {\n      easing: theme.transitions.easing.sharp\n    }));\n    node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps, {\n      easing: theme.transitions.easing.sharp\n    }));\n    setTranslateValue(direction, node);\n\n    if (onExit) {\n      onExit(node);\n    }\n  };\n\n  var handleExited = function handleExited() {\n    var node = childrenRef.current; // No need for transitions when the component is hidden\n\n    node.style.webkitTransition = '';\n    node.style.transition = '';\n\n    if (onExited) {\n      onExited(node);\n    }\n  };\n\n  var updatePosition = React.useCallback(function () {\n    if (childrenRef.current) {\n      setTranslateValue(direction, childrenRef.current);\n    }\n  }, [direction]);\n  React.useEffect(function () {\n    // Skip configuration where the position is screen size invariant.\n    if (inProp || direction === 'down' || direction === 'right') {\n      return undefined;\n    }\n\n    var handleResize = debounce(function () {\n      if (childrenRef.current) {\n        setTranslateValue(direction, childrenRef.current);\n      }\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [direction, inProp]);\n  React.useEffect(function () {\n    if (!inProp) {\n      // We need to update the position of the drawer when the direction change and\n      // when it's hidden.\n      updatePosition();\n    }\n  }, [inProp, updatePosition]);\n  return React.createElement(Transition, _extends({\n    onEnter: handleEnter,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    appear: true,\n    in: inProp,\n    timeout: timeout\n  }, other), function (state, childProps) {\n    return React.cloneElement(children, _extends({\n      ref: handleRef,\n      style: _extends({\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, style, {}, children.props.style)\n    }, childProps));\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Slide.propTypes = {\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef,\n\n  /**\n   * Direction the child node will enter from.\n   */\n  direction: PropTypes.oneOf(['left', 'right', 'up', 'down']),\n\n  /**\n   * If `true`, show the component; triggers the enter or exit animation.\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Slide;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport TableContext from './TableContext';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'table',\n      width: '100%',\n      borderCollapse: 'collapse',\n      borderSpacing: 0,\n      '& caption': _extends({}, theme.typography.body2, {\n        padding: theme.spacing(2),\n        color: theme.palette.text.secondary,\n        textAlign: 'left',\n        captionSide: 'bottom'\n      })\n    },\n\n    /* Styles applied to the root element if `stickyHeader={true}`. */\n    stickyHeader: {\n      borderCollapse: 'separate'\n    }\n  };\n};\nvar Table = React.forwardRef(function Table(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'table' : _props$component,\n      _props$padding = props.padding,\n      padding = _props$padding === void 0 ? 'default' : _props$padding,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      _props$stickyHeader = props.stickyHeader,\n      stickyHeader = _props$stickyHeader === void 0 ? false : _props$stickyHeader,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"padding\", \"size\", \"stickyHeader\"]);\n\n  var table = React.useMemo(function () {\n    return {\n      padding: padding,\n      size: size,\n      stickyHeader: stickyHeader\n    };\n  }, [padding, size, stickyHeader]);\n  return React.createElement(TableContext.Provider, {\n    value: table\n  }, React.createElement(Component, _extends({\n    ref: ref,\n    className: clsx(classes.root, className, stickyHeader && classes.stickyHeader)\n  }, other)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Table.propTypes = {\n  /**\n   * The content of the table, normally `TableHead` and `TableBody`.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Allows TableCells to inherit padding of the Table.\n   */\n  padding: PropTypes.oneOf(['default', 'checkbox', 'none']),\n\n  /**\n   * Allows TableCells to inherit size of the Table.\n   */\n  size: PropTypes.oneOf(['small', 'medium']),\n\n  /**\n   * Set the header sticky.\n   *\n   * ⚠️ It doesn't work with IE 11.\n   */\n  stickyHeader: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTable'\n})(Table);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'table-header-group'\n  }\n};\nvar tablelvl2 = {\n  variant: 'head'\n};\nvar TableHead = React.forwardRef(function TableHead(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'thead' : _props$component,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n  return React.createElement(Tablelvl2Context.Provider, {\n    value: tablelvl2\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other)));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableHead.propTypes = {\n  /**\n   * The content of the component, normally `TableRow`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableHead'\n})(TableHead);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'table-row-group'\n  }\n};\nvar tablelvl2 = {\n  variant: 'body'\n};\nvar TableBody = React.forwardRef(function TableBody(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'tbody' : _props$component,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n  return React.createElement(Tablelvl2Context.Provider, {\n    value: tablelvl2\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other)));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableBody.propTypes = {\n  /**\n   * The content of the component, normally `TableRow`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableBody'\n})(TableBody);","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { exactProp, refType } from '@material-ui/utils';\nimport setRef from '../utils/setRef';\n/**\n * ⚠️⚠️⚠️\n * If you want the DOM element of a Material-UI component check out\n * [FAQ: How can I access the DOM element?](/getting-started/faq/#how-can-i-access-the-dom-element)\n * first.\n *\n * This component uses `findDOMNode` which is deprecated in React.StrictMode.\n *\n * Helper component to allow attaching a ref to a\n * wrapped element to access the underlying DOM element.\n *\n * It's highly inspired by https://github.com/facebook/react/issues/11401#issuecomment-340543801.\n * For example:\n * ```jsx\n * import React from 'react';\n * import RootRef from '@material-ui/core/RootRef';\n *\n * function MyComponent() {\n *   const domRef = React.useRef();\n *\n *   React.useEffect(() => {\n *     console.log(domRef.current); // DOM node\n *   }, []);\n *\n *   return (\n *     <RootRef rootRef={domRef}>\n *       <SomeChildComponent />\n *     </RootRef>\n *   );\n * }\n * ```\n */\n\nvar RootRef =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(RootRef, _React$Component);\n\n  function RootRef() {\n    _classCallCheck(this, RootRef);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(RootRef).apply(this, arguments));\n  }\n\n  _createClass(RootRef, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.ref = ReactDOM.findDOMNode(this);\n      setRef(this.props.rootRef, this.ref);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var ref = ReactDOM.findDOMNode(this);\n\n      if (prevProps.rootRef !== this.props.rootRef || this.ref !== ref) {\n        if (prevProps.rootRef !== this.props.rootRef) {\n          setRef(prevProps.rootRef, null);\n        }\n\n        this.ref = ref;\n        setRef(this.props.rootRef, this.ref);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.ref = null;\n      setRef(this.props.rootRef, null);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return RootRef;\n}(React.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? RootRef.propTypes = {\n  /**\n   * The wrapped element.\n   */\n  children: PropTypes.element.isRequired,\n\n  /**\n   * A ref that points to the first DOM node of the wrapped element.\n   */\n  rootRef: refType.isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? RootRef.propTypes = exactProp(RootRef.propTypes) : void 0;\n}\n\nexport default RootRef;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport ThemeContext from '../useTheme/ThemeContext';\nimport useTheme from '../useTheme';\nimport nested from './nested'; // To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n  if (typeof localTheme === 'function') {\n    var mergedTheme = localTheme(outerTheme);\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!mergedTheme) {\n        console.error(['Material-UI: you should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\\n'));\n      }\n    }\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, {}, localTheme);\n}\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\n\n\nfunction ThemeProvider(props) {\n  var children = props.children,\n      localTheme = props.theme;\n  var outerTheme = useTheme();\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (outerTheme === null && typeof localTheme === 'function') {\n      console.error(['Material-UI: you are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n\n  var theme = React.useMemo(function () {\n    var output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n\n    if (output != null) {\n      output[nested] = outerTheme !== null;\n    }\n\n    return output;\n  }, [localTheme, outerTheme]);\n  return React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0;\n}\n\nexport default ThemeProvider;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport ownerDocument from '../utils/ownerDocument';\nimport useForkRef from '../utils/useForkRef';\nimport setRef from '../utils/setRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport { elementAcceptingRef, exactProp } from '@material-ui/utils';\n\nfunction mapEventPropToEvent(eventProp) {\n  return eventProp.substring(2).toLowerCase();\n}\n/**\n * Listen for click events that occur somewhere in the document, outside of the element itself.\n * For instance, if you need to hide a menu when people click anywhere else on your page.\n */\n\n\nvar ClickAwayListener = React.forwardRef(function ClickAwayListener(props, ref) {\n  var children = props.children,\n      _props$mouseEvent = props.mouseEvent,\n      mouseEvent = _props$mouseEvent === void 0 ? 'onClick' : _props$mouseEvent,\n      _props$touchEvent = props.touchEvent,\n      touchEvent = _props$touchEvent === void 0 ? 'onTouchEnd' : _props$touchEvent,\n      onClickAway = props.onClickAway;\n  var movedRef = React.useRef(false);\n  var nodeRef = React.useRef(null);\n  var mountedRef = React.useRef(false);\n  React.useEffect(function () {\n    mountedRef.current = true;\n    return function () {\n      mountedRef.current = false;\n    };\n  }, []);\n  var handleNodeRef = useForkRef(nodeRef, ref); // can be removed once we drop support for non ref forwarding class components\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    setRef(handleNodeRef, ReactDOM.findDOMNode(instance));\n  }, [handleNodeRef]);\n  var handleRef = useForkRef(children.ref, handleOwnRef);\n  var handleClickAway = useEventCallback(function (event) {\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviours like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    // IE 11 support, which trigger the handleClickAway even after the unbind\n    if (!mountedRef.current) {\n      return;\n    } // Do not act if user performed touchmove\n\n\n    if (movedRef.current) {\n      movedRef.current = false;\n      return;\n    } // The child might render null.\n\n\n    if (!nodeRef.current) {\n      return;\n    } // Multi window support\n\n\n    var doc = ownerDocument(nodeRef.current);\n\n    if (doc.documentElement && doc.documentElement.contains(event.target) && !nodeRef.current.contains(event.target)) {\n      onClickAway(event);\n    }\n  });\n  var handleTouchMove = React.useCallback(function () {\n    movedRef.current = true;\n  }, []);\n  React.useEffect(function () {\n    if (touchEvent !== false) {\n      var mappedTouchEvent = mapEventPropToEvent(touchEvent);\n      var doc = ownerDocument(nodeRef.current);\n      doc.addEventListener(mappedTouchEvent, handleClickAway);\n      doc.addEventListener('touchmove', handleTouchMove);\n      return function () {\n        doc.removeEventListener(mappedTouchEvent, handleClickAway);\n        doc.removeEventListener('touchmove', handleTouchMove);\n      };\n    }\n\n    return undefined;\n  }, [handleClickAway, handleTouchMove, touchEvent]);\n  React.useEffect(function () {\n    if (mouseEvent !== false) {\n      var mappedMouseEvent = mapEventPropToEvent(mouseEvent);\n      var doc = ownerDocument(nodeRef.current);\n      doc.addEventListener(mappedMouseEvent, handleClickAway);\n      return function () {\n        doc.removeEventListener(mappedMouseEvent, handleClickAway);\n      };\n    }\n\n    return undefined;\n  }, [handleClickAway, mouseEvent]);\n  return React.createElement(React.Fragment, null, React.cloneElement(children, {\n    ref: handleRef\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? ClickAwayListener.propTypes = {\n  /**\n   * The wrapped element.\n   */\n  children: elementAcceptingRef.isRequired,\n\n  /**\n   * The mouse event to listen to. You can disable the listener by providing `false`.\n   */\n  mouseEvent: PropTypes.oneOf(['onClick', 'onMouseDown', 'onMouseUp', false]),\n\n  /**\n   * Callback fired when a \"click away\" event is detected.\n   */\n  onClickAway: PropTypes.func.isRequired,\n\n  /**\n   * The touch event to listen to. You can disable the listener by providing `false`.\n   */\n  touchEvent: PropTypes.oneOf(['onTouchStart', 'onTouchEnd', false])\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  ClickAwayListener['propTypes' + ''] = exactProp(ClickAwayListener.propTypes);\n}\n\nexport default ClickAwayListener;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    position: 'absolute',\n    right: 16,\n    top: '50%',\n    transform: 'translateY(-50%)'\n  }\n};\n/**\n * Must be used as the last child of ListItem to function properly.\n */\n\nvar ListItemSecondaryAction = React.forwardRef(function ListItemSecondaryAction(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemSecondaryAction.propTypes = {\n  /**\n   * The content of the component, normally an `IconButton` or selection control.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nListItemSecondaryAction.muiName = 'ListItemSecondaryAction';\nexport default withStyles(styles, {\n  name: 'MuiListItemSecondaryAction'\n})(ListItemSecondaryAction);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {},\n\n  /* Styles applied to the root element if `orientation=\"horizontal\"`. */\n  horizontal: {\n    paddingLeft: 8,\n    paddingRight: 8\n  },\n\n  /* Styles applied to the root element if `orientation=\"vertical\"`. */\n  vertical: {},\n\n  /* Styles applied to the root element if `alternativeLabel={true}`. */\n  alternativeLabel: {\n    flex: 1,\n    position: 'relative'\n  },\n\n  /* Pseudo-class applied to the root element if `completed={true}`. */\n  completed: {}\n};\nvar Step = React.forwardRef(function Step(props, ref) {\n  var _props$active = props.active,\n      active = _props$active === void 0 ? false : _props$active,\n      alternativeLabel = props.alternativeLabel,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$completed = props.completed,\n      completed = _props$completed === void 0 ? false : _props$completed,\n      connector = props.connector,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$expanded = props.expanded,\n      expanded = _props$expanded === void 0 ? false : _props$expanded,\n      index = props.index,\n      last = props.last,\n      orientation = props.orientation,\n      other = _objectWithoutProperties(props, [\"active\", \"alternativeLabel\", \"children\", \"classes\", \"className\", \"completed\", \"connector\", \"disabled\", \"expanded\", \"index\", \"last\", \"orientation\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[orientation], className, alternativeLabel && classes.alternativeLabel, completed && classes.completed),\n    ref: ref\n  }, other), connector && alternativeLabel && index !== 0 && React.cloneElement(connector, {\n    orientation: orientation,\n    alternativeLabel: alternativeLabel,\n    index: index,\n    active: active,\n    completed: completed,\n    disabled: disabled\n  }), React.Children.map(children, function (child) {\n    if (!React.isValidElement(child)) {\n      return null;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Step component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    return React.cloneElement(child, _extends({\n      active: active,\n      alternativeLabel: alternativeLabel,\n      completed: completed,\n      disabled: disabled,\n      expanded: expanded,\n      last: last,\n      icon: index + 1,\n      orientation: orientation\n    }, child.props));\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Step.propTypes = {\n  /**\n   * Sets the step as active. Is passed to child components.\n   */\n  active: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Set internally by Stepper when it's supplied with the alternativeLabel property.\n   */\n  alternativeLabel: PropTypes.bool,\n\n  /**\n   * Should be `Step` sub-components such as `StepLabel`, `StepContent`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Mark the step as completed. Is passed to child components.\n   */\n  completed: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Passed down from Stepper if alternativeLabel is also set.\n   */\n  connector: PropTypes.element,\n\n  /**\n   * Mark the step as disabled, will also disable the button if\n   * `StepButton` is a child of `Step`. Is passed to child components.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Expand the step.\n   */\n  expanded: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Used internally for numbering.\n   */\n  index: PropTypes.number,\n\n  /**\n   * @ignore\n   */\n  last: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiStep'\n})(Step);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport { duration } from '../styles/transitions';\nimport ClickAwayListener from '../ClickAwayListener';\nimport useEventCallback from '../utils/useEventCallback';\nimport capitalize from '../utils/capitalize';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport Grow from '../Grow';\nimport SnackbarContent from '../SnackbarContent';\nexport var styles = function styles(theme) {\n  var top1 = {\n    top: 8\n  };\n  var bottom1 = {\n    bottom: 8\n  };\n  var right = {\n    justifyContent: 'flex-end'\n  };\n  var left = {\n    justifyContent: 'flex-start'\n  };\n  var top3 = {\n    top: 24\n  };\n  var bottom3 = {\n    bottom: 24\n  };\n  var right3 = {\n    right: 24\n  };\n  var left3 = {\n    left: 24\n  };\n  var center = {\n    left: '50%',\n    right: 'auto',\n    transform: 'translateX(-50%)'\n  };\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      zIndex: theme.zIndex.snackbar,\n      position: 'fixed',\n      display: 'flex',\n      left: 8,\n      right: 8,\n      justifyContent: 'center',\n      alignItems: 'center'\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'center' }}`. */\n    anchorOriginTopCenter: _extends({}, top1, _defineProperty({}, theme.breakpoints.up('sm'), _extends({}, top3, {}, center))),\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'center' }}`. */\n    anchorOriginBottomCenter: _extends({}, bottom1, _defineProperty({}, theme.breakpoints.up('sm'), _extends({}, bottom3, {}, center))),\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }}`. */\n    anchorOriginTopRight: _extends({}, top1, {}, right, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n      left: 'auto'\n    }, top3, {}, right3))),\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }}`. */\n    anchorOriginBottomRight: _extends({}, bottom1, {}, right, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n      left: 'auto'\n    }, bottom3, {}, right3))),\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }}`. */\n    anchorOriginTopLeft: _extends({}, top1, {}, left, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n      right: 'auto'\n    }, top3, {}, left3))),\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }}`. */\n    anchorOriginBottomLeft: _extends({}, bottom1, {}, left, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n      right: 'auto'\n    }, bottom3, {}, left3)))\n  };\n};\nvar Snackbar = React.forwardRef(function Snackbar(props, ref) {\n  var action = props.action,\n      _props$anchorOrigin = props.anchorOrigin;\n  _props$anchorOrigin = _props$anchorOrigin === void 0 ? {\n    vertical: 'bottom',\n    horizontal: 'center'\n  } : _props$anchorOrigin;\n\n  var vertical = _props$anchorOrigin.vertical,\n      horizontal = _props$anchorOrigin.horizontal,\n      _props$autoHideDurati = props.autoHideDuration,\n      autoHideDuration = _props$autoHideDurati === void 0 ? null : _props$autoHideDurati,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      ClickAwayListenerProps = props.ClickAwayListenerProps,\n      ContentProps = props.ContentProps,\n      _props$disableWindowB = props.disableWindowBlurListener,\n      disableWindowBlurListener = _props$disableWindowB === void 0 ? false : _props$disableWindowB,\n      message = props.message,\n      onClose = props.onClose,\n      onEnter = props.onEnter,\n      onEntered = props.onEntered,\n      onEntering = props.onEntering,\n      onExit = props.onExit,\n      onExited = props.onExited,\n      onExiting = props.onExiting,\n      onMouseEnter = props.onMouseEnter,\n      onMouseLeave = props.onMouseLeave,\n      open = props.open,\n      resumeHideDuration = props.resumeHideDuration,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? {\n    enter: duration.enteringScreen,\n    exit: duration.leavingScreen\n  } : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      other = _objectWithoutProperties(props, [\"action\", \"anchorOrigin\", \"autoHideDuration\", \"children\", \"classes\", \"className\", \"ClickAwayListenerProps\", \"ContentProps\", \"disableWindowBlurListener\", \"message\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"onMouseEnter\", \"onMouseLeave\", \"open\", \"resumeHideDuration\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  var timerAutoHide = React.useRef();\n\n  var _React$useState = React.useState(true),\n      exited = _React$useState[0],\n      setExited = _React$useState[1];\n\n  var handleClose = useEventCallback(function () {\n    if (onClose) {\n      onClose.apply(void 0, arguments);\n    }\n  });\n  var setAutoHideTimer = useEventCallback(function (autoHideDurationParam) {\n    if (!onClose || autoHideDurationParam == null) {\n      return;\n    }\n\n    clearTimeout(timerAutoHide.current);\n    timerAutoHide.current = setTimeout(function () {\n      handleClose(null, 'timeout');\n    }, autoHideDurationParam);\n  });\n  React.useEffect(function () {\n    if (open) {\n      setAutoHideTimer(autoHideDuration);\n    }\n\n    return function () {\n      clearTimeout(timerAutoHide.current);\n    };\n  }, [open, autoHideDuration, setAutoHideTimer]); // Pause the timer when the user is interacting with the Snackbar\n  // or when the user hide the window.\n\n  var handlePause = function handlePause() {\n    clearTimeout(timerAutoHide.current);\n  }; // Restart the timer when the user is no longer interacting with the Snackbar\n  // or when the window is shown back.\n\n\n  var handleResume = React.useCallback(function () {\n    if (autoHideDuration != null) {\n      setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);\n    }\n  }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);\n\n  var handleMouseEnter = function handleMouseEnter(event) {\n    if (onMouseEnter) {\n      onMouseEnter(event);\n    }\n\n    handlePause();\n  };\n\n  var handleMouseLeave = function handleMouseLeave(event) {\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n\n    handleResume();\n  };\n\n  var handleClickAway = function handleClickAway(event) {\n    if (onClose) {\n      onClose(event, 'clickaway');\n    }\n  };\n\n  var handleExited = function handleExited() {\n    setExited(true);\n  };\n\n  var handleEnter = function handleEnter() {\n    setExited(false);\n  };\n\n  React.useEffect(function () {\n    if (!disableWindowBlurListener && open) {\n      window.addEventListener('focus', handleResume);\n      window.addEventListener('blur', handlePause);\n      return function () {\n        window.removeEventListener('focus', handleResume);\n        window.removeEventListener('blur', handlePause);\n      };\n    }\n\n    return undefined;\n  }, [disableWindowBlurListener, handleResume, open]); // So we only render active snackbars.\n\n  if (!open && exited) {\n    return null;\n  }\n\n  return React.createElement(ClickAwayListener, _extends({\n    onClickAway: handleClickAway\n  }, ClickAwayListenerProps), React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[\"anchorOrigin\".concat(capitalize(vertical)).concat(capitalize(horizontal))], className),\n    onMouseEnter: handleMouseEnter,\n    onMouseLeave: handleMouseLeave,\n    ref: ref\n  }, other), React.createElement(TransitionComponent, _extends({\n    appear: true,\n    in: open,\n    onEnter: createChainedFunction(handleEnter, onEnter),\n    onEntered: onEntered,\n    onEntering: onEntering,\n    onExit: onExit,\n    onExited: createChainedFunction(handleExited, onExited),\n    onExiting: onExiting,\n    timeout: transitionDuration,\n    direction: vertical === 'top' ? 'down' : 'up'\n  }, TransitionProps), children || React.createElement(SnackbarContent, _extends({\n    message: message,\n    action: action\n  }, ContentProps)))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Snackbar.propTypes = {\n  /**\n   * The action to display. It renders after the message, at the end of the snackbar.\n   */\n  action: PropTypes.node,\n\n  /**\n   * The anchor of the `Snackbar`.\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOf(['left', 'center', 'right']).isRequired,\n    vertical: PropTypes.oneOf(['top', 'bottom']).isRequired\n  }),\n\n  /**\n   * The number of milliseconds to wait before automatically calling the\n   * `onClose` function. `onClose` should then set the state of the `open`\n   * prop to hide the Snackbar. This behavior is disabled by default with\n   * the `null` value.\n   */\n  autoHideDuration: PropTypes.number,\n\n  /**\n   * Replace the `SnackbarContent` component.\n   */\n  children: PropTypes.element,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Props applied to the `ClickAwayListener` element.\n   */\n  ClickAwayListenerProps: PropTypes.object,\n\n  /**\n   * Props applied to the [`SnackbarContent`](/api/snackbar-content/) element.\n   */\n  ContentProps: PropTypes.object,\n\n  /**\n   * If `true`, the `autoHideDuration` timer will expire even if the window is not focused.\n   */\n  disableWindowBlurListener: PropTypes.bool,\n\n  /**\n   * When displaying multiple consecutive Snackbars from a parent rendering a single\n   * <Snackbar/>, add the key prop to ensure independent treatment of each message.\n   * e.g. <Snackbar key={message} />, otherwise, the message may update-in-place and\n   * features such as autoHideDuration may be canceled.\n   */\n  key: PropTypes.any,\n\n  /**\n   * The message to display.\n   */\n  message: PropTypes.node,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Typically `onClose` is used to set state in the parent component,\n   * which is used to control the `Snackbar` `open` prop.\n   * The `reason` parameter can optionally be used to control the response to `onClose`,\n   * for example ignoring `clickaway`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"timeout\"` (`autoHideDuration` expired), `\"clickaway\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired before the transition is entering.\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired when the transition has entered.\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired when the transition is entering.\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired before the transition is exiting.\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired when the transition has exited.\n   */\n  onExited: PropTypes.func,\n\n  /**\n   * Callback fired when the transition is exiting.\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n\n  /**\n   * If `true`, `Snackbar` is open.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * The number of milliseconds to wait before dismissing after user interaction.\n   * If `autoHideDuration` prop isn't specified, it does nothing.\n   * If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,\n   * we default to `autoHideDuration / 2` ms.\n   */\n  resumeHideDuration: PropTypes.number,\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  flip: false,\n  name: 'MuiSnackbar'\n})(Snackbar);","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 0a12 12 0 1 0 0 24 12 12 0 0 0 0-24zm-2 17l-5-5 1.4-1.4 3.6 3.6 7.6-7.6L19 8l-9 9z\"\n}), 'CheckCircle');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CheckCircle from '../internal/svg-icons/CheckCircle';\nimport Warning from '../internal/svg-icons/Warning';\nimport withStyles from '../styles/withStyles';\nimport SvgIcon from '../SvgIcon';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'block',\n      color: theme.palette.text.disabled,\n      '&$completed': {\n        color: theme.palette.primary.main\n      },\n      '&$active': {\n        color: theme.palette.primary.main\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    },\n\n    /* Styles applied to the SVG text element. */\n    text: {\n      fill: theme.palette.primary.contrastText,\n      fontSize: theme.typography.caption.fontSize,\n      fontFamily: theme.typography.fontFamily\n    },\n\n    /* Pseudo-class applied to the root element if `active={true}`. */\n    active: {},\n\n    /* Pseudo-class applied to the root element if `completed={true}`. */\n    completed: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {}\n  };\n};\n\nvar _ref = React.createElement(\"circle\", {\n  cx: \"12\",\n  cy: \"12\",\n  r: \"12\"\n});\n\nvar StepIcon = React.forwardRef(function StepIcon(props, ref) {\n  var _props$completed = props.completed,\n      completed = _props$completed === void 0 ? false : _props$completed,\n      icon = props.icon,\n      _props$active = props.active,\n      active = _props$active === void 0 ? false : _props$active,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      classes = props.classes;\n\n  if (typeof icon === 'number' || typeof icon === 'string') {\n    var className = clsx(classes.root, active && classes.active, error && classes.error, completed && classes.completed);\n\n    if (error) {\n      return React.createElement(Warning, {\n        className: className,\n        ref: ref\n      });\n    }\n\n    if (completed) {\n      return React.createElement(CheckCircle, {\n        className: className,\n        ref: ref\n      });\n    }\n\n    return React.createElement(SvgIcon, {\n      className: className,\n      ref: ref\n    }, _ref, React.createElement(\"text\", {\n      className: classes.text,\n      x: \"12\",\n      y: \"16\",\n      textAnchor: \"middle\"\n    }, icon));\n  }\n\n  return icon;\n});\nprocess.env.NODE_ENV !== \"production\" ? StepIcon.propTypes = {\n  /**\n   * Whether this step is active.\n   */\n  active: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * Mark the step as completed. Is passed to child components.\n   */\n  completed: PropTypes.bool,\n\n  /**\n   * Mark the step as failed.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * The label displayed in the step icon.\n   */\n  icon: PropTypes.node.isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiStepIcon'\n})(StepIcon);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nimport StepIcon from '../StepIcon';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'flex',\n      alignItems: 'center',\n      '&$alternativeLabel': {\n        flexDirection: 'column'\n      },\n      '&$disabled': {\n        cursor: 'default'\n      }\n    },\n\n    /* Styles applied to the root element if `orientation=\"horizontal\". */\n    horizontal: {},\n\n    /* Styles applied to the root element if `orientation=\"vertical\". */\n    vertical: {},\n\n    /* Styles applied to the `Typography` component which wraps `children`. */\n    label: {\n      color: theme.palette.text.secondary,\n      '&$active': {\n        color: theme.palette.text.primary,\n        fontWeight: 500\n      },\n      '&$completed': {\n        color: theme.palette.text.primary,\n        fontWeight: 500\n      },\n      '&$alternativeLabel': {\n        textAlign: 'center',\n        marginTop: 16\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    },\n\n    /* Pseudo-class applied to the `Typography` component if `active={true}`. */\n    active: {},\n\n    /* Pseudo-class applied to the `Typography` component if `completed={true}`. */\n    completed: {},\n\n    /* Pseudo-class applied to the root element and `Typography` component if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element and `Typography` component if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the `icon` container element. */\n    iconContainer: {\n      flexShrink: 0,\n      // Fix IE 11 issue\n      display: 'flex',\n      paddingRight: 8,\n      '&$alternativeLabel': {\n        paddingRight: 0\n      }\n    },\n\n    /* Pseudo-class applied to the root and icon container and `Typography` if `alternativeLabel={true}`. */\n    alternativeLabel: {},\n\n    /* Styles applied to the container element which wraps `Typography` and `optional`. */\n    labelContainer: {\n      width: '100%'\n    }\n  };\n};\nvar StepLabel = React.forwardRef(function StepLabel(props, ref) {\n  var _props$active = props.active,\n      active = _props$active === void 0 ? false : _props$active,\n      _props$alternativeLab = props.alternativeLabel,\n      alternativeLabel = _props$alternativeLab === void 0 ? false : _props$alternativeLab,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$completed = props.completed,\n      completed = _props$completed === void 0 ? false : _props$completed,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$error = props.error,\n      error = _props$error === void 0 ? false : _props$error,\n      expanded = props.expanded,\n      icon = props.icon,\n      last = props.last,\n      optional = props.optional,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      StepIconComponentProp = props.StepIconComponent,\n      StepIconProps = props.StepIconProps,\n      other = _objectWithoutProperties(props, [\"active\", \"alternativeLabel\", \"children\", \"classes\", \"className\", \"completed\", \"disabled\", \"error\", \"expanded\", \"icon\", \"last\", \"optional\", \"orientation\", \"StepIconComponent\", \"StepIconProps\"]);\n\n  var StepIconComponent = StepIconComponentProp;\n\n  if (icon && !StepIconComponent) {\n    StepIconComponent = StepIcon;\n  }\n\n  return React.createElement(\"span\", _extends({\n    className: clsx(classes.root, classes[orientation], className, disabled && classes.disabled, alternativeLabel && classes.alternativeLabel, error && classes.error),\n    ref: ref\n  }, other), icon || StepIconComponent ? React.createElement(\"span\", {\n    className: clsx(classes.iconContainer, alternativeLabel && classes.alternativeLabel)\n  }, React.createElement(StepIconComponent, _extends({\n    completed: completed,\n    active: active,\n    error: error,\n    icon: icon\n  }, StepIconProps))) : null, React.createElement(\"span\", {\n    className: classes.labelContainer\n  }, React.createElement(Typography, {\n    variant: \"body2\",\n    component: \"span\",\n    className: clsx(classes.label, alternativeLabel && classes.alternativeLabel, completed && classes.completed, active && classes.active, error && classes.error),\n    display: \"block\"\n  }, children), optional));\n});\nprocess.env.NODE_ENV !== \"production\" ? StepLabel.propTypes = {\n  /**\n   * @ignore\n   */\n  active: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  alternativeLabel: PropTypes.bool,\n\n  /**\n   * In most cases will simply be a string containing a title for the label.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  completed: PropTypes.bool,\n\n  /**\n   * Mark the step as disabled, will also disable the button if\n   * `StepLabelButton` is a child of `StepLabel`. Is passed to child components.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Mark the step as failed.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  expanded: PropTypes.bool,\n\n  /**\n   * Override the default label of the step icon.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  last: PropTypes.bool,\n\n  /**\n   * The optional node to display.\n   */\n  optional: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\n   * The component to render in place of the [`StepIcon`](/api/step-icon/).\n   */\n  StepIconComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the [`StepIcon`](/api/step-icon/) element.\n   */\n  StepIconProps: PropTypes.object\n} : void 0;\nStepLabel.muiName = 'StepLabel';\nexport default withStyles(styles, {\n  name: 'MuiStepLabel'\n})(StepLabel);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nimport useForkRef from '../utils/useForkRef';\n\nfunction getStyleValue(computedStyle, property) {\n  return parseInt(computedStyle[property], 10) || 0;\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar styles = {\n  /* Styles applied to the shadow textarea element. */\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nvar TextareaAutosize = React.forwardRef(function TextareaAutosize(props, ref) {\n  var onChange = props.onChange,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      _props$rowsMin = props.rowsMin,\n      rowsMinProp = _props$rowsMin === void 0 ? 1 : _props$rowsMin,\n      style = props.style,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"onChange\", \"rows\", \"rowsMax\", \"rowsMin\", \"style\", \"value\"]);\n\n  var rowsMin = rows || rowsMinProp;\n\n  var _React$useRef = React.useRef(value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = React.useRef(null);\n  var handleRef = useForkRef(ref, inputRef);\n  var shadowRef = React.useRef(null);\n\n  var _React$useState = React.useState({}),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var syncHeight = React.useCallback(function () {\n    var input = inputRef.current;\n    var computedStyle = window.getComputedStyle(input);\n    var inputShallow = shadowRef.current;\n    inputShallow.style.width = computedStyle.width;\n    inputShallow.value = input.value || props.placeholder || 'x';\n    var boxSizing = computedStyle['box-sizing'];\n    var padding = getStyleValue(computedStyle, 'padding-bottom') + getStyleValue(computedStyle, 'padding-top');\n    var border = getStyleValue(computedStyle, 'border-bottom-width') + getStyleValue(computedStyle, 'border-top-width'); // The height of the inner content\n\n    var innerHeight = inputShallow.scrollHeight - padding; // Measure height of a textarea with a single row\n\n    inputShallow.value = 'x';\n    var singleRowHeight = inputShallow.scrollHeight - padding; // The height of the outer content\n\n    var outerHeight = innerHeight;\n\n    if (rowsMin) {\n      outerHeight = Math.max(Number(rowsMin) * singleRowHeight, outerHeight);\n    }\n\n    if (rowsMax) {\n      outerHeight = Math.min(Number(rowsMax) * singleRowHeight, outerHeight);\n    }\n\n    outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n    var outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    var overflow = Math.abs(outerHeight - innerHeight) <= 1;\n    setState(function (prevState) {\n      // Need a large enough different to update the height.\n      // This prevents infinite rendering loop.\n      if (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow) {\n        return {\n          overflow: overflow,\n          outerHeightStyle: outerHeightStyle\n        };\n      }\n\n      return prevState;\n    });\n  }, [rowsMax, rowsMin, props.placeholder]);\n  React.useEffect(function () {\n    var handleResize = debounce(function () {\n      syncHeight();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [syncHeight]);\n  useEnhancedEffect(function () {\n    syncHeight();\n  });\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      syncHeight();\n    }\n\n    if (onChange) {\n      onChange(event);\n    }\n  };\n\n  return React.createElement(React.Fragment, null, React.createElement(\"textarea\", _extends({\n    value: value,\n    onChange: handleChange,\n    ref: handleRef // Apply the rows prop to get a \"correct\" first SSR paint\n    ,\n    rows: rowsMin,\n    style: _extends({\n      height: state.outerHeightStyle,\n      // Need a large enough different to allow scrolling.\n      // This prevents infinite rendering loop.\n      overflow: state.overflow ? 'hidden' : null\n    }, style)\n  }, other)), React.createElement(\"textarea\", {\n    \"aria-hidden\": true,\n    className: props.className,\n    readOnly: true,\n    ref: shadowRef,\n    tabIndex: -1,\n    style: _extends({}, styles.shadow, {}, style)\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TextareaAutosize.propTypes = {\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * Use `rowsMin` instead. The prop will be removed in v5.\n   *\n   * @deprecated\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Minimum number of rows to display.\n   */\n  rowsMin: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  value: PropTypes.any\n} : void 0;\nexport default TextareaAutosize;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n\n/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport formControlState from '../FormControl/formControlState';\nimport FormControlContext, { useFormControl } from '../FormControl/FormControlContext';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport useForkRef from '../utils/useForkRef';\nimport TextareaAutosize from '../TextareaAutosize';\nimport { isFilled } from './utils';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var placeholder = {\n    color: 'currentColor',\n    opacity: light ? 0.42 : 0.5,\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  var placeholderHidden = {\n    opacity: '0 !important'\n  };\n  var placeholderVisible = {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      // Mimics the default input display property used by browsers for an input.\n      fontFamily: theme.typography.fontFamily,\n      color: theme.palette.text.primary,\n      fontSize: theme.typography.pxToRem(16),\n      lineHeight: '1.1875em',\n      // Reset (19px), match the native input line-height\n      boxSizing: 'border-box',\n      // Prevent padding issue with fullWidth.\n      position: 'relative',\n      cursor: 'text',\n      display: 'inline-flex',\n      alignItems: 'center',\n      '&$disabled': {\n        color: theme.palette.text.disabled,\n        cursor: 'default'\n      }\n    },\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {},\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {},\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {},\n\n    /* Styles applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      '&$marginDense': {\n        paddingTop: 4 - 1\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      font: 'inherit',\n      color: 'currentColor',\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      border: 0,\n      boxSizing: 'content-box',\n      background: 'none',\n      height: '1.1875em',\n      // Reset (19px), match the native input line-height\n      margin: 0,\n      // Reset for Safari\n      WebkitTapHighlightColor: 'transparent',\n      display: 'block',\n      // Make the flex item shrink with Firefox\n      minWidth: 0,\n      width: '100%',\n      // Fix IE 11 width issue\n      animationName: '$auto-fill-cancel',\n      '&::-webkit-input-placeholder': placeholder,\n      '&::-moz-placeholder': placeholder,\n      // Firefox 19+\n      '&:-ms-input-placeholder': placeholder,\n      // IE 11\n      '&::-ms-input-placeholder': placeholder,\n      // Edge\n      '&:focus': {\n        outline: 0\n      },\n      // Reset Firefox invalid required input style\n      '&:invalid': {\n        boxShadow: 'none'\n      },\n      '&::-webkit-search-decoration': {\n        // Remove the padding when type=search.\n        '-webkit-appearance': 'none'\n      },\n      // Show and hide the placeholder logic\n      'label[data-shrink=false] + $formControl &': {\n        '&::-webkit-input-placeholder': placeholderHidden,\n        '&::-moz-placeholder': placeholderHidden,\n        // Firefox 19+\n        '&:-ms-input-placeholder': placeholderHidden,\n        // IE 11\n        '&::-ms-input-placeholder': placeholderHidden,\n        // Edge\n        '&:focus::-webkit-input-placeholder': placeholderVisible,\n        '&:focus::-moz-placeholder': placeholderVisible,\n        // Firefox 19+\n        '&:focus:-ms-input-placeholder': placeholderVisible,\n        // IE 11\n        '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n\n      },\n      '&$disabled': {\n        opacity: 1 // Reset iOS opacity\n\n      },\n      '&:-webkit-autofill': {\n        animationDuration: '5000s',\n        animationName: '$auto-fill'\n      }\n    },\n    '@keyframes auto-fill': {\n      from: {}\n    },\n    '@keyframes auto-fill-cancel': {\n      from: {}\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 4 - 1\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      height: 'auto',\n      resize: 'none',\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {\n      // Improve type search style.\n      '-moz-appearance': 'textfield',\n      '-webkit-appearance': 'textfield'\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {},\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {},\n\n    /* Styles applied to the `input` element if `hiddenLabel={true}`. */\n    inputHiddenLabel: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\n\nvar InputBase = React.forwardRef(function InputBase(props, ref) {\n  var ariaDescribedby = props['aria-describedby'],\n      autoComplete = props.autoComplete,\n      autoFocus = props.autoFocus,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      endAdornment = props.endAdornment,\n      error = props.error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      id = props.id,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$inputProps = props.inputProps,\n      inputPropsProp = _props$inputProps === void 0 ? {} : _props$inputProps,\n      inputRefProp = props.inputRef,\n      margin = props.margin,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      placeholder = props.placeholder,\n      readOnly = props.readOnly,\n      renderSuffix = props.renderSuffix,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      rowsMin = props.rowsMin,\n      startAdornment = props.startAdornment,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      valueProp = props.value,\n      other = _objectWithoutProperties(props, [\"aria-describedby\", \"autoComplete\", \"autoFocus\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"endAdornment\", \"error\", \"fullWidth\", \"id\", \"inputComponent\", \"inputProps\", \"inputRef\", \"margin\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onClick\", \"onFocus\", \"onKeyDown\", \"onKeyUp\", \"placeholder\", \"readOnly\", \"renderSuffix\", \"rows\", \"rowsMax\", \"rowsMin\", \"startAdornment\", \"type\", \"value\"]);\n\n  var value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n\n  var _React$useRef = React.useRef(value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = React.useRef();\n  var handleInputRefWarning = React.useCallback(function (instance) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (instance && !(instance instanceof HTMLInputElement) && !instance.focus) {\n        console.error(['Material-UI: you have provided a `inputComponent` to the input component', 'that does not correctly handle the `inputRef` prop.', 'Make sure the `inputRef` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  var handleInputPropsRefProp = useForkRef(inputPropsProp.ref, handleInputRefWarning);\n  var handleInputRefProp = useForkRef(inputRefProp, handleInputPropsRefProp);\n  var handleInputRef = useForkRef(inputRef, handleInputRefProp);\n\n  var _React$useState = React.useState(false),\n      focused = _React$useState[0],\n      setFocused = _React$useState[1];\n\n  var muiFormControl = useFormControl();\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(function () {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n\n      return undefined;\n    }, [muiFormControl]);\n  }\n\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'margin', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused; // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n\n  React.useEffect(function () {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  var onFilled = muiFormControl && muiFormControl.onFilled;\n  var onEmpty = muiFormControl && muiFormControl.onEmpty;\n  var checkDirty = React.useCallback(function (obj) {\n    if (isFilled(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(function () {\n    if (isControlled) {\n      checkDirty({\n        value: value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n\n  var handleFocus = function handleFocus(event) {\n    // Fix a bug with IE 11 where the focus/blur events are triggered\n    // while the input is disabled.\n    if (fcs.disabled) {\n      event.stopPropagation();\n      return;\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      var element = event.target || inputRef.current;\n\n      if (element == null) {\n        throw new TypeError('Material-UI: Expected valid input target. ' + 'Did you use a custom `inputComponent` and forget to forward refs? ' + 'See https://material-ui.com/r/input-component-ref-interface for more info.');\n      }\n\n      checkDirty({\n        value: element.value\n      });\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange.apply(inputPropsProp, [event].concat(args));\n    } // Perform in the willUpdate\n\n\n    if (onChange) {\n      onChange.apply(void 0, [event].concat(args));\n    }\n  }; // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n\n\n  React.useEffect(function () {\n    checkDirty(inputRef.current);\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  var handleClick = function handleClick(event) {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  var InputComponent = inputComponent;\n\n  var inputProps = _extends({}, inputPropsProp, {\n    ref: handleInputRef\n  });\n\n  if (typeof InputComponent !== 'string') {\n    inputProps = _extends({\n      // Rename ref to inputRef as we don't know the\n      // provided `inputComponent` structure.\n      inputRef: handleInputRef,\n      type: type\n    }, inputProps, {\n      ref: null\n    });\n  } else if (multiline) {\n    if (rows && !rowsMax && !rowsMin) {\n      InputComponent = 'textarea';\n    } else {\n      inputProps = _extends({\n        rows: rows,\n        rowsMax: rowsMax\n      }, inputProps);\n      InputComponent = TextareaAutosize;\n    }\n  } else {\n    inputProps = _extends({\n      type: type\n    }, inputProps);\n  }\n\n  var handleAutoFill = function handleAutoFill(event) {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName.indexOf('auto-fill-cancel') !== -1 ? inputRef.current : {\n      value: 'x'\n    });\n  };\n\n  React.useEffect(function () {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fullWidth && classes.fullWidth, fcs.focused && classes.focused, muiFormControl && classes.formControl, multiline && classes.multiline, startAdornment && classes.adornedStart, endAdornment && classes.adornedEnd, {\n      dense: classes.marginDense\n    }[fcs.margin]),\n    onClick: handleClick,\n    ref: ref\n  }, other), startAdornment, React.createElement(FormControlContext.Provider, {\n    value: null\n  }, React.createElement(InputComponent, _extends({\n    \"aria-invalid\": fcs.error,\n    \"aria-describedby\": ariaDescribedby,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    disabled: fcs.disabled,\n    id: id,\n    onAnimationStart: handleAutoFill,\n    name: name,\n    placeholder: placeholder,\n    readOnly: readOnly,\n    required: fcs.required,\n    rows: rows,\n    value: value,\n    onKeyDown: onKeyDown,\n    onKeyUp: onKeyUp\n  }, inputProps, {\n    className: clsx(classes.input, inputPropsProp.className, fcs.disabled && classes.disabled, multiline && classes.inputMultiline, fcs.hiddenLabel && classes.inputHiddenLabel, startAdornment && classes.inputAdornedStart, endAdornment && classes.inputAdornedEnd, {\n      search: classes.inputTypeSearch\n    }[type], {\n      dense: classes.inputMarginDense\n    }[fcs.margin]),\n    onBlur: handleBlur,\n    onChange: handleChange,\n    onFocus: handleFocus\n  }))), endAdornment, renderSuffix ? renderSuffix(_extends({}, fcs, {\n    startAdornment: startAdornment\n  })) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? InputBase.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the wrapper element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a DOM element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the input is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  renderSuffix: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  rowsMin: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiInputBase'\n})(InputBase);","export default __webpack_public_path__ + \"static/media/empty-project.fc8b5968.svg\";","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _styles = require(\"@material-ui/styles\");\n\nvar _defaultTheme = _interopRequireDefault(require(\"./defaultTheme\"));\n\nfunction withStyles(stylesOrCreator, options) {\n  return (0, _styles.withStyles)(stylesOrCreator, (0, _extends2.default)({\n    defaultTheme: _defaultTheme.default\n  }, options));\n}\n\nvar _default = withStyles;\nexports.default = _default;","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = GeneratorFunctionPrototype;\n  defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n  defineProperty(\n    GeneratorFunctionPrototype,\n    \"constructor\",\n    { value: GeneratorFunction, configurable: true }\n  );\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    defineProperty(this, \"_invoke\", { value: enqueue });\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  });\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var methodName = context.method;\n    var method = delegate.iterator[methodName];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method, or a missing .next mehtod, always terminate the\n      // yield* loop.\n      context.delegate = null;\n\n      // Note: [\"return\"] must be used for ES3 parsing compatibility.\n      if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n        // If the delegate iterator has a return method, give it a\n        // chance to clean up.\n        context.method = \"return\";\n        context.arg = undefined;\n        maybeInvokeDelegate(delegate, context);\n\n        if (context.method === \"throw\") {\n          // If maybeInvokeDelegate(context) changed context.method from\n          // \"return\" to \"throw\", let that override the TypeError below.\n          return ContinueSentinel;\n        }\n      }\n      if (methodName !== \"return\") {\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a '\" + methodName + \"' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  define(Gp, iteratorSymbol, function() {\n    return this;\n  });\n\n  define(Gp, \"toString\", function() {\n    return \"[object Generator]\";\n  });\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(val) {\n    var object = Object(val);\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, in modern engines\n  // we can explicitly access globalThis. In older engines we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.14.0\";\n","/** @license React v16.14.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n    in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.14.0\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.14.0\";\n","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):D=0<a?Math.floor(1E3/a):5};var F=new MessageChannel,G=F.port2;F.port1.onmessage=function(){if(null!==B){var a=exports.unstable_now();E=a+D;try{B(!0,a)?G.postMessage(null):(A=!1,B=null)}catch(b){throw G.postMessage(null),b;}}else A=!1};f=function(a){B=a;A||(A=!0,G.postMessage(null))};g=function(a,b){C=\nx(function(){a(exports.unstable_now())},b)};h=function(){y(C);C=-1}}function H(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<I(e,b))a[d]=b,a[c]=e,c=d;else break a}}function J(a){a=a[0];return void 0===a?null:a}\nfunction K(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:N++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _utils = require('./utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _cookie = require('./browserLookups/cookie.js');\n\nvar _cookie2 = _interopRequireDefault(_cookie);\n\nvar _querystring = require('./browserLookups/querystring.js');\n\nvar _querystring2 = _interopRequireDefault(_querystring);\n\nvar _localStorage = require('./browserLookups/localStorage.js');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nvar _navigator = require('./browserLookups/navigator.js');\n\nvar _navigator2 = _interopRequireDefault(_navigator);\n\nvar _htmlTag = require('./browserLookups/htmlTag.js');\n\nvar _htmlTag2 = _interopRequireDefault(_htmlTag);\n\nvar _path = require('./browserLookups/path.js');\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _subdomain = require('./browserLookups/subdomain.js');\n\nvar _subdomain2 = _interopRequireDefault(_subdomain);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getDefaults() {\n  return {\n    order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],\n    lookupQuerystring: 'lng',\n    lookupCookie: 'i18next',\n    lookupLocalStorage: 'i18nextLng',\n\n    // cache user language\n    caches: ['localStorage'],\n    excludeCacheFor: ['cimode']\n    //cookieMinutes: 10,\n    //cookieDomain: 'myDomain'\n  };\n}\n\nvar Browser = function () {\n  function Browser(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Browser);\n\n    this.type = 'languageDetector';\n    this.detectors = {};\n\n    this.init(services, options);\n  }\n\n  _createClass(Browser, [{\n    key: 'init',\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.services = services;\n      this.options = utils.defaults(options, this.options || {}, getDefaults());\n\n      // backwards compatibility\n      if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n\n      this.i18nOptions = i18nOptions;\n\n      this.addDetector(_cookie2.default);\n      this.addDetector(_querystring2.default);\n      this.addDetector(_localStorage2.default);\n      this.addDetector(_navigator2.default);\n      this.addDetector(_htmlTag2.default);\n      this.addDetector(_path2.default);\n      this.addDetector(_subdomain2.default);\n    }\n  }, {\n    key: 'addDetector',\n    value: function addDetector(detector) {\n      this.detectors[detector.name] = detector;\n    }\n  }, {\n    key: 'detect',\n    value: function detect(detectionOrder) {\n      var _this = this;\n\n      if (!detectionOrder) detectionOrder = this.options.order;\n\n      var detected = [];\n      detectionOrder.forEach(function (detectorName) {\n        if (_this.detectors[detectorName]) {\n          var lookup = _this.detectors[detectorName].lookup(_this.options);\n          if (lookup && typeof lookup === 'string') lookup = [lookup];\n          if (lookup) detected = detected.concat(lookup);\n        }\n      });\n\n      var found = void 0;\n      detected.forEach(function (lng) {\n        if (found) return;\n        var cleanedLng = _this.services.languageUtils.formatLanguageCode(lng);\n        if (_this.services.languageUtils.isWhitelisted(cleanedLng)) found = cleanedLng;\n      });\n\n      if (!found) {\n        var fallbacks = this.i18nOptions.fallbackLng;\n        if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n        if (!fallbacks) fallbacks = [];\n\n        if (Object.prototype.toString.apply(fallbacks) === '[object Array]') {\n          found = fallbacks[0];\n        } else {\n          found = fallbacks[0] || fallbacks.default && fallbacks.default[0];\n        }\n      };\n\n      return found;\n    }\n  }, {\n    key: 'cacheUserLanguage',\n    value: function cacheUserLanguage(lng, caches) {\n      var _this2 = this;\n\n      if (!caches) caches = this.options.caches;\n      if (!caches) return;\n      if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n      caches.forEach(function (cacheName) {\n        if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n      });\n    }\n  }]);\n\n  return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\nexports.default = Browser;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaults = defaults;\nexports.extend = extend;\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction extend(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar cookie = {\n  create: function create(name, value, minutes, domain) {\n    var expires = void 0;\n    if (minutes) {\n      var date = new Date();\n      date.setTime(date.getTime() + minutes * 60 * 1000);\n      expires = '; expires=' + date.toGMTString();\n    } else expires = '';\n    domain = domain ? 'domain=' + domain + ';' : '';\n    document.cookie = name + '=' + value + expires + ';' + domain + 'path=/';\n  },\n\n  read: function read(name) {\n    var nameEQ = name + '=';\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n    }\n    return null;\n  },\n\n  remove: function remove(name) {\n    this.create(name, '', -1);\n  }\n};\n\nexports.default = {\n  name: 'cookie',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      var c = cookie.read(options.lookupCookie);\n      if (c) found = c;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'querystring',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (typeof window !== 'undefined') {\n      var query = window.location.search.substring(1);\n      var params = query.split('&');\n      for (var i = 0; i < params.length; i++) {\n        var pos = params[i].indexOf('=');\n        if (pos > 0) {\n          var key = params[i].substring(0, pos);\n          if (key === options.lookupQuerystring) {\n            found = params[i].substring(pos + 1);\n          }\n        }\n      }\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar hasLocalStorageSupport = void 0;\ntry {\n  hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n  var testKey = 'i18next.translate.boo';\n  window.localStorage.setItem(testKey, 'foo');\n  window.localStorage.removeItem(testKey);\n} catch (e) {\n  hasLocalStorageSupport = false;\n}\n\nexports.default = {\n  name: 'localStorage',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      var lng = window.localStorage.getItem(options.lookupLocalStorage);\n      if (lng) found = lng;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      window.localStorage.setItem(options.lookupLocalStorage, lng);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'navigator',\n\n  lookup: function lookup(options) {\n    var found = [];\n\n    if (typeof navigator !== 'undefined') {\n      if (navigator.languages) {\n        // chrome only; not an array, so can't use .push.apply instead of iterating\n        for (var i = 0; i < navigator.languages.length; i++) {\n          found.push(navigator.languages[i]);\n        }\n      }\n      if (navigator.userLanguage) {\n        found.push(navigator.userLanguage);\n      }\n      if (navigator.language) {\n        found.push(navigator.language);\n      }\n    }\n\n    return found.length > 0 ? found : undefined;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'htmlTag',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n\n    if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n      found = htmlTag.getAttribute('lang');\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'path',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromPathIndex === 'number') {\n          if (typeof language[options.lookupFromPathIndex] !== 'string') {\n            return undefined;\n          }\n          found = language[options.lookupFromPathIndex].replace('/', '');\n        } else {\n          found = language[0].replace('/', '');\n        }\n      }\n    }\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'subdomain',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.href.match(/(?:http[s]*\\:\\/\\/)*(.*?)\\.(?=[^\\/]*\\..{2,5})/gi);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromSubdomainIndex === 'number') {\n          found = language[options.lookupFromSubdomainIndex].replace('http://', '').replace('https://', '').replace('.', '');\n        } else {\n          found = language[0].replace('http://', '').replace('https://', '').replace('.', '');\n        }\n      }\n    }\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _utils = require('./utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _ajax = require('./ajax.js');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getDefaults() {\n  return {\n    loadPath: '/locales/{{lng}}/{{ns}}.json',\n    addPath: '/locales/add/{{lng}}/{{ns}}',\n    allowMultiLoading: false,\n    parse: JSON.parse,\n    crossDomain: false,\n    ajax: _ajax2.default\n  };\n}\n\nvar Backend = function () {\n  function Backend(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Backend);\n\n    this.init(services, options);\n\n    this.type = 'backend';\n  }\n\n  _createClass(Backend, [{\n    key: 'init',\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      this.services = services;\n      this.options = utils.defaults(options, this.options || {}, getDefaults());\n    }\n  }, {\n    key: 'readMulti',\n    value: function readMulti(languages, namespaces, callback) {\n      var loadPath = this.options.loadPath;\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath(languages, namespaces);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, { lng: languages.join('+'), ns: namespaces.join('+') });\n\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: 'read',\n    value: function read(language, namespace, callback) {\n      var loadPath = this.options.loadPath;\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath([language], [namespace]);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace });\n\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: 'loadUrl',\n    value: function loadUrl(url, callback) {\n      var _this = this;\n\n      this.options.ajax(url, this.options, function (data, xhr) {\n        if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true /* retry */);\n        if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false /* no retry */);\n\n        var ret = void 0,\n            err = void 0;\n        try {\n          ret = _this.options.parse(data, url);\n        } catch (e) {\n          err = 'failed parsing ' + url + ' to json';\n        }\n        if (err) return callback(err, false);\n        callback(null, ret);\n      });\n    }\n  }, {\n    key: 'create',\n    value: function create(languages, namespace, key, fallbackValue) {\n      var _this2 = this;\n\n      if (typeof languages === 'string') languages = [languages];\n\n      var payload = {};\n      payload[key] = fallbackValue || '';\n\n      languages.forEach(function (lng) {\n        var url = _this2.services.interpolator.interpolate(_this2.options.addPath, { lng: lng, ns: namespace });\n\n        _this2.options.ajax(url, _this2.options, function (data, xhr) {\n          //const statusCode = xhr.status.toString();\n          // TODO: if statusCode === 4xx do log\n        }, payload);\n      });\n    }\n  }]);\n\n  return Backend;\n}();\n\nBackend.type = 'backend';\n\nexports.default = Backend;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaults = defaults;\nexports.extend = extend;\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction extend(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction addQueryString(url, params) {\n  if (params && (typeof params === 'undefined' ? 'undefined' : _typeof(params)) === 'object') {\n    var queryString = '',\n        e = encodeURIComponent;\n\n    // Must encode data\n    for (var paramName in params) {\n      queryString += '&' + e(paramName) + '=' + e(params[paramName]);\n    }\n\n    if (!queryString) {\n      return url;\n    }\n\n    url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n  }\n\n  return url;\n}\n\n// https://gist.github.com/Xeoncross/7663273\nfunction ajax(url, options, callback, data, cache) {\n\n  if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n    if (!cache) {\n      data['_t'] = new Date();\n    }\n    // URL encoded form data must be in querystring format\n    data = addQueryString('', data).slice(1);\n  }\n\n  if (options.queryStringParams) {\n    url = addQueryString(url, options.queryStringParams);\n  }\n\n  try {\n    var x;\n    if (XMLHttpRequest) {\n      x = new XMLHttpRequest();\n    } else {\n      x = new ActiveXObject('MSXML2.XMLHTTP.3.0');\n    }\n    x.open(data ? 'POST' : 'GET', url, 1);\n    if (!options.crossDomain) {\n      x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n    }\n    x.withCredentials = !!options.withCredentials;\n    if (data) {\n      x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n    }\n    if (x.overrideMimeType) {\n      x.overrideMimeType(\"application/json\");\n    }\n    var h = options.customHeaders;\n    if (h) {\n      for (var i in h) {\n        x.setRequestHeader(i, h[i]);\n      }\n    }\n    x.onreadystatechange = function () {\n      x.readyState > 3 && callback && callback(x.responseText, x);\n    };\n    x.send(data);\n  } catch (e) {\n    console && console.log(e);\n  }\n}\n\nexports.default = ajax;","/*jshint -W030 */\nvar tagRE = /(?:<!--[\\S\\s]*?-->|<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>)/g;\nvar parseTag = require('./parse-tag');\n// re-used obj for quick lookups of components\nvar empty = Object.create ? Object.create(null) : {};\n// common logic for pushing a child node onto a list\nfunction pushTextNode(list, html, level, start, ignoreWhitespace) {\n    // calculate correct end of the content slice in case there's\n    // no tag after the text node.\n    var end = html.indexOf('<', start);\n    var content = html.slice(start, end === -1 ? undefined : end);\n    // if a node is nothing but whitespace, collapse it as the spec states:\n    // https://www.w3.org/TR/html4/struct/text.html#h-9.1\n    if (/^\\s*$/.test(content)) {\n        content = ' ';\n    }\n    // don't add whitespace-only text nodes if they would be trailing text nodes\n    // or if they would be leading whitespace-only text nodes:\n    //  * end > -1 indicates this is not a trailing text node\n    //  * leading node is when level is -1 and list has length 0\n    if ((!ignoreWhitespace && end > -1 && level + list.length >= 0) || content !== ' ') {\n        list.push({\n            type: 'text',\n            content: content\n        });\n    }\n}\n\nmodule.exports = function parse(html, options) {\n    options || (options = {});\n    options.components || (options.components = empty);\n    var result = [];\n    var current;\n    var level = -1;\n    var arr = [];\n    var byTag = {};\n    var inComponent = false;\n\n    html.replace(tagRE, function (tag, index) {\n        if (inComponent) {\n            if (tag !== ('</' + current.name + '>')) {\n                return;\n            } else {\n                inComponent = false;\n            }\n        }\n\n        var isOpen = tag.charAt(1) !== '/';\n        var isComment = tag.indexOf('<!--') === 0;\n        var start = index + tag.length;\n        var nextChar = html.charAt(start);\n        var parent;\n\n        if (isOpen && !isComment) {\n            level++;\n\n            current = parseTag(tag);\n            if (current.type === 'tag' && options.components[current.name]) {\n                current.type = 'component';\n                inComponent = true;\n            }\n\n            if (!current.voidElement && !inComponent && nextChar && nextChar !== '<') {\n                pushTextNode(current.children, html, level, start, options.ignoreWhitespace);\n            }\n\n            byTag[current.tagName] = current;\n\n            // if we're at root, push new base node\n            if (level === 0) {\n                result.push(current);\n            }\n\n            parent = arr[level - 1];\n\n            if (parent) {\n                parent.children.push(current);\n            }\n\n            arr[level] = current;\n        }\n\n        if (isComment || !isOpen || current.voidElement) {\n            if (!isComment) {\n                level--;\n            }\n            if (!inComponent && nextChar !== '<' && nextChar) {\n                // trailing text node\n                // if we're at the root, push a base text node. otherwise add as\n                // a child to the current node.\n                parent = level === -1 ? result : arr[level].children;\n                pushTextNode(parent, html, level, start, options.ignoreWhitespace);\n            }\n        }\n    });\n\n    // If the \"html\" passed isn't actually html, add it as a text node.\n    if (!result.length && html.length) {\n        pushTextNode(result, html, 0, 0, options.ignoreWhitespace);\n    }\n\n    return result;\n};\n","var attrRE = /([\\w-]+)|=|(['\"])([.\\s\\S]*?)\\2/g;\nvar voidElements = require('void-elements');\n\nmodule.exports = function (tag) {\n    var i = 0;\n    var key;\n    var expectingValueAfterEquals = true;\n    var res = {\n        type: 'tag',\n        name: '',\n        voidElement: false,\n        attrs: {},\n        children: []\n    };\n\n    tag.replace(attrRE, function (match) {\n        if (match === '=') {\n            expectingValueAfterEquals = true;\n            i++;\n            return;\n        }\n\n        if (!expectingValueAfterEquals) {\n            if (key) {\n                res.attrs[key] = key; // boolean attribute\n            }\n            key=match;\n        } else {\n            if (i === 0) {\n                if (voidElements[match] || tag.charAt(tag.length - 2) === '/') {\n                    res.voidElement = true;\n                }\n                res.name = match;\n            } else {\n                res.attrs[key] = match.replace(/^['\"]|['\"]$/g, '');\n                key=undefined;\n            }\n        }\n        i++;\n        expectingValueAfterEquals = false;\n    });\n\n    return res;\n};\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n  \"area\": true,\n  \"base\": true,\n  \"br\": true,\n  \"col\": true,\n  \"embed\": true,\n  \"hr\": true,\n  \"img\": true,\n  \"input\": true,\n  \"keygen\": true,\n  \"link\": true,\n  \"menuitem\": true,\n  \"meta\": true,\n  \"param\": true,\n  \"source\": true,\n  \"track\": true,\n  \"wbr\": true\n};\n","function attrString(attrs) {\n    var buff = [];\n    for (var key in attrs) {\n        buff.push(key + '=\"' + attrs[key] + '\"');\n    }\n    if (!buff.length) {\n        return '';\n    }\n    return ' ' + buff.join(' ');\n}\n\nfunction stringify(buff, doc) {\n    switch (doc.type) {\n    case 'text':\n        return buff + doc.content;\n    case 'tag':\n        buff += '<' + doc.name + (doc.attrs ? attrString(doc.attrs) : '') + (doc.voidElement ? '/>' : '>');\n        if (doc.voidElement) {\n            return buff;\n        }\n        return buff + doc.children.reduce(stringify, '') + '</' + doc.name + '>';\n    }\n}\n\nmodule.exports = function (doc) {\n    return doc.reduce(function (token, rootEl) {\n        return token + stringify('', rootEl);\n    }, '');\n};\n","/**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\nfunction baseConformsTo(object, source, props) {\n  var length = props.length;\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (length--) {\n    var key = props[length],\n        predicate = source[key],\n        value = object[key];\n\n    if ((value === undefined && !(key in object)) || !predicate(value)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseConformsTo;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar split = String.prototype.split;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    formatter,\n    encodeValuesOnly,\n    charset\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = obj.join(',');\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset);\n            if (generateArrayPrefix === 'comma' && encodeValuesOnly) {\n                var valuesArray = split.call(String(obj), ',');\n                var valuesJoined = '';\n                for (var i = 0; i < valuesArray.length; ++i) {\n                    valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset));\n                }\n                return [formatter(keyValue) + '=' + valuesJoined];\n            }\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix\n            : prefix + (allowDots ? '.' + key : '[' + key + ']');\n\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            formatter,\n            encodeValuesOnly,\n            charset\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if (opts && 'indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('✓')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset);\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset);\n            val = maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset);\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (has.call(obj, key)) {\n            obj[key] = utils.combine(obj[key], val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    return {\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.updateSyncErrors = exports.updateSyncWarnings = exports.untouch = exports.unregisterField = exports.touch = exports.submit = exports.stopSubmit = exports.stopAsyncValidation = exports.startSubmit = exports.startAsyncValidation = exports.setSubmitSucceeded = exports.setSubmitFailed = exports.resetSection = exports.reset = exports.registerField = exports.initialize = exports.focus = exports.destroy = exports.clearFields = exports.clearSubmitErrors = exports.change = exports.blur = exports.autofill = exports.arrayUnshift = exports.arraySwap = exports.arraySplice = exports.arrayShift = exports.arrayRemoveAll = exports.arrayRemove = exports.arrayPush = exports.arrayPop = exports.arrayMove = exports.arrayInsert = exports.actionTypes = exports.formPropTypes = exports.fieldArrayPropTypes = exports.fieldArrayMetaPropTypes = exports.fieldArrayFieldsPropTypes = exports.fieldPropTypes = exports.fieldMetaPropTypes = exports.fieldInputPropTypes = exports.values = exports.reducer = exports.reduxForm = exports.hasSubmitFailed = exports.hasSubmitSucceeded = exports.isSubmitting = exports.isValid = exports.isPristine = exports.isInvalid = exports.isDirty = exports.isAsyncValidating = exports.getFormSubmitErrors = exports.getFormSyncWarnings = exports.getFormAsyncErrors = exports.getFormMeta = exports.getFormSyncErrors = exports.getFormInitialValues = exports.getFormValues = exports.getFormNames = exports.getFormError = exports.formValues = exports.formValueSelector = exports.FieldArray = exports.Fields = exports.Field = exports.propTypes = exports.SubmissionError = exports.FormSection = exports.FormName = exports.Form = exports.defaultShouldWarn = exports.defaultShouldError = exports.defaultShouldValidate = exports.defaultShouldAsyncValidate = void 0;\n\nvar _actions = _interopRequireDefault(require(\"./actions\"));\n\nvar _actionTypes = _interopRequireWildcard(require(\"./actionTypes\"));\n\nvar _defaultShouldAsyncValidate = _interopRequireDefault(require(\"./defaultShouldAsyncValidate\"));\n\nexports.defaultShouldAsyncValidate = _defaultShouldAsyncValidate[\"default\"];\n\nvar _defaultShouldValidate = _interopRequireDefault(require(\"./defaultShouldValidate\"));\n\nexports.defaultShouldValidate = _defaultShouldValidate[\"default\"];\n\nvar _defaultShouldError = _interopRequireDefault(require(\"./defaultShouldError\"));\n\nexports.defaultShouldError = _defaultShouldError[\"default\"];\n\nvar _defaultShouldWarn = _interopRequireDefault(require(\"./defaultShouldWarn\"));\n\nexports.defaultShouldWarn = _defaultShouldWarn[\"default\"];\n\nvar _Form = _interopRequireDefault(require(\"./Form\"));\n\nexports.Form = _Form[\"default\"];\n\nvar _FormName = _interopRequireDefault(require(\"./FormName\"));\n\nexports.FormName = _FormName[\"default\"];\n\nvar _FormSection = _interopRequireDefault(require(\"./FormSection\"));\n\nexports.FormSection = _FormSection[\"default\"];\n\nvar _SubmissionError = _interopRequireDefault(require(\"./SubmissionError\"));\n\nexports.SubmissionError = _SubmissionError[\"default\"];\n\nvar _propTypes = _interopRequireWildcard(require(\"./propTypes\"));\n\nexports.propTypes = _propTypes[\"default\"];\nexports.fieldInputPropTypes = _propTypes.fieldInputPropTypes;\nexports.fieldMetaPropTypes = _propTypes.fieldMetaPropTypes;\nexports.fieldPropTypes = _propTypes.fieldPropTypes;\nexports.fieldArrayFieldsPropTypes = _propTypes.fieldArrayFieldsPropTypes;\nexports.fieldArrayMetaPropTypes = _propTypes.fieldArrayMetaPropTypes;\nexports.fieldArrayPropTypes = _propTypes.fieldArrayPropTypes;\nexports.formPropTypes = _propTypes.formPropTypes;\n\nvar _Field = _interopRequireDefault(require(\"./immutable/Field\"));\n\nexports.Field = _Field[\"default\"];\n\nvar _Fields = _interopRequireDefault(require(\"./immutable/Fields\"));\n\nexports.Fields = _Fields[\"default\"];\n\nvar _FieldArray = _interopRequireDefault(require(\"./immutable/FieldArray\"));\n\nexports.FieldArray = _FieldArray[\"default\"];\n\nvar _formValueSelector = _interopRequireDefault(require(\"./immutable/formValueSelector\"));\n\nexports.formValueSelector = _formValueSelector[\"default\"];\n\nvar _formValues = _interopRequireDefault(require(\"./immutable/formValues\"));\n\nexports.formValues = _formValues[\"default\"];\n\nvar _getFormError = _interopRequireDefault(require(\"./immutable/getFormError\"));\n\nexports.getFormError = _getFormError[\"default\"];\n\nvar _getFormNames = _interopRequireDefault(require(\"./immutable/getFormNames\"));\n\nexports.getFormNames = _getFormNames[\"default\"];\n\nvar _getFormValues = _interopRequireDefault(require(\"./immutable/getFormValues\"));\n\nexports.getFormValues = _getFormValues[\"default\"];\n\nvar _getFormInitialValues = _interopRequireDefault(require(\"./immutable/getFormInitialValues\"));\n\nexports.getFormInitialValues = _getFormInitialValues[\"default\"];\n\nvar _getFormSyncErrors = _interopRequireDefault(require(\"./immutable/getFormSyncErrors\"));\n\nexports.getFormSyncErrors = _getFormSyncErrors[\"default\"];\n\nvar _getFormMeta = _interopRequireDefault(require(\"./immutable/getFormMeta\"));\n\nexports.getFormMeta = _getFormMeta[\"default\"];\n\nvar _getFormAsyncErrors = _interopRequireDefault(require(\"./immutable/getFormAsyncErrors\"));\n\nexports.getFormAsyncErrors = _getFormAsyncErrors[\"default\"];\n\nvar _getFormSyncWarnings = _interopRequireDefault(require(\"./immutable/getFormSyncWarnings\"));\n\nexports.getFormSyncWarnings = _getFormSyncWarnings[\"default\"];\n\nvar _getFormSubmitErrors = _interopRequireDefault(require(\"./immutable/getFormSubmitErrors\"));\n\nexports.getFormSubmitErrors = _getFormSubmitErrors[\"default\"];\n\nvar _isAsyncValidating = _interopRequireDefault(require(\"./immutable/isAsyncValidating\"));\n\nexports.isAsyncValidating = _isAsyncValidating[\"default\"];\n\nvar _isDirty = _interopRequireDefault(require(\"./immutable/isDirty\"));\n\nexports.isDirty = _isDirty[\"default\"];\n\nvar _isInvalid = _interopRequireDefault(require(\"./immutable/isInvalid\"));\n\nexports.isInvalid = _isInvalid[\"default\"];\n\nvar _isPristine = _interopRequireDefault(require(\"./immutable/isPristine\"));\n\nexports.isPristine = _isPristine[\"default\"];\n\nvar _isValid = _interopRequireDefault(require(\"./immutable/isValid\"));\n\nexports.isValid = _isValid[\"default\"];\n\nvar _isSubmitting = _interopRequireDefault(require(\"./immutable/isSubmitting\"));\n\nexports.isSubmitting = _isSubmitting[\"default\"];\n\nvar _hasSubmitSucceeded = _interopRequireDefault(require(\"./immutable/hasSubmitSucceeded\"));\n\nexports.hasSubmitSucceeded = _hasSubmitSucceeded[\"default\"];\n\nvar _hasSubmitFailed = _interopRequireDefault(require(\"./immutable/hasSubmitFailed\"));\n\nexports.hasSubmitFailed = _hasSubmitFailed[\"default\"];\n\nvar _reduxForm = _interopRequireDefault(require(\"./immutable/reduxForm\"));\n\nexports.reduxForm = _reduxForm[\"default\"];\n\nvar _reducer = _interopRequireDefault(require(\"./immutable/reducer\"));\n\nexports.reducer = _reducer[\"default\"];\n\nvar _values = _interopRequireDefault(require(\"./immutable/values\"));\n\nexports.values = _values[\"default\"];\n// alias for propTypes\nvar actionTypes = _actionTypes;\nexports.actionTypes = actionTypes;\nvar arrayInsert = _actions[\"default\"].arrayInsert;\nexports.arrayInsert = arrayInsert;\nvar arrayMove = _actions[\"default\"].arrayMove;\nexports.arrayMove = arrayMove;\nvar arrayPop = _actions[\"default\"].arrayPop;\nexports.arrayPop = arrayPop;\nvar arrayPush = _actions[\"default\"].arrayPush;\nexports.arrayPush = arrayPush;\nvar arrayRemove = _actions[\"default\"].arrayRemove;\nexports.arrayRemove = arrayRemove;\nvar arrayRemoveAll = _actions[\"default\"].arrayRemoveAll;\nexports.arrayRemoveAll = arrayRemoveAll;\nvar arrayShift = _actions[\"default\"].arrayShift;\nexports.arrayShift = arrayShift;\nvar arraySplice = _actions[\"default\"].arraySplice;\nexports.arraySplice = arraySplice;\nvar arraySwap = _actions[\"default\"].arraySwap;\nexports.arraySwap = arraySwap;\nvar arrayUnshift = _actions[\"default\"].arrayUnshift;\nexports.arrayUnshift = arrayUnshift;\nvar autofill = _actions[\"default\"].autofill;\nexports.autofill = autofill;\nvar blur = _actions[\"default\"].blur;\nexports.blur = blur;\nvar change = _actions[\"default\"].change;\nexports.change = change;\nvar clearSubmitErrors = _actions[\"default\"].clearSubmitErrors;\nexports.clearSubmitErrors = clearSubmitErrors;\nvar clearFields = _actions[\"default\"].clearFields;\nexports.clearFields = clearFields;\nvar destroy = _actions[\"default\"].destroy;\nexports.destroy = destroy;\nvar focus = _actions[\"default\"].focus;\nexports.focus = focus;\nvar initialize = _actions[\"default\"].initialize;\nexports.initialize = initialize;\nvar registerField = _actions[\"default\"].registerField;\nexports.registerField = registerField;\nvar reset = _actions[\"default\"].reset;\nexports.reset = reset;\nvar resetSection = _actions[\"default\"].resetSection;\nexports.resetSection = resetSection;\nvar setSubmitFailed = _actions[\"default\"].setSubmitFailed;\nexports.setSubmitFailed = setSubmitFailed;\nvar setSubmitSucceeded = _actions[\"default\"].setSubmitSucceeded;\nexports.setSubmitSucceeded = setSubmitSucceeded;\nvar startAsyncValidation = _actions[\"default\"].startAsyncValidation;\nexports.startAsyncValidation = startAsyncValidation;\nvar startSubmit = _actions[\"default\"].startSubmit;\nexports.startSubmit = startSubmit;\nvar stopAsyncValidation = _actions[\"default\"].stopAsyncValidation;\nexports.stopAsyncValidation = stopAsyncValidation;\nvar stopSubmit = _actions[\"default\"].stopSubmit;\nexports.stopSubmit = stopSubmit;\nvar submit = _actions[\"default\"].submit;\nexports.submit = submit;\nvar touch = _actions[\"default\"].touch;\nexports.touch = touch;\nvar unregisterField = _actions[\"default\"].unregisterField;\nexports.unregisterField = unregisterField;\nvar untouch = _actions[\"default\"].untouch;\nexports.untouch = untouch;\nvar updateSyncWarnings = _actions[\"default\"].updateSyncWarnings;\nexports.updateSyncWarnings = updateSyncWarnings;\nvar updateSyncErrors = _actions[\"default\"].updateSyncErrors;\nexports.updateSyncErrors = updateSyncErrors;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar Form =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inheritsLoose2[\"default\"])(Form, _Component);\n\n  function Form(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n\n    if (!props._reduxForm) {\n      throw new Error('Form must be inside a component decorated with reduxForm()');\n    }\n\n    return _this;\n  }\n\n  var _proto = Form.prototype;\n\n  _proto.componentWillMount = function componentWillMount() {\n    this.props._reduxForm.registerInnerOnSubmit(this.props.onSubmit);\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _reduxForm = _this$props._reduxForm,\n        rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props, [\"_reduxForm\"]);\n    return _react[\"default\"].createElement(\"form\", rest);\n  };\n\n  return Form;\n}(_react.Component);\n\nForm.propTypes = {\n  onSubmit: _propTypes[\"default\"].func.isRequired,\n  _reduxForm: _propTypes[\"default\"].object\n};\n(0, _reactLifecyclesCompat.polyfill)(Form);\n\nvar _default = (0, _ReduxFormContext.withReduxForm)(Form);\n\nexports[\"default\"] = _default;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar FormName = function FormName(_ref) {\n  var children = _ref.children,\n      _reduxForm = _ref._reduxForm;\n  return children({\n    form: _reduxForm && _reduxForm.form,\n    sectionPrefix: _reduxForm && _reduxForm.sectionPrefix\n  });\n};\n\nvar _default = (0, _ReduxFormContext.withReduxForm)(FormName);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _prefixName = _interopRequireDefault(require(\"./util/prefixName\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar FormSection =\n/*#__PURE__*/\nfunction (_Component) {\n  (0, _inheritsLoose2[\"default\"])(FormSection, _Component);\n\n  function FormSection(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n\n    if (!props._reduxForm) {\n      throw new Error('FormSection must be inside a component decorated with reduxForm()');\n    }\n\n    return _this;\n  }\n\n  var _proto = FormSection.prototype;\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _reduxForm = _this$props._reduxForm,\n        children = _this$props.children,\n        name = _this$props.name,\n        component = _this$props.component,\n        rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props, [\"_reduxForm\", \"children\", \"name\", \"component\"]);\n\n    if (_react[\"default\"].isValidElement(children)) {\n      return (0, _react.createElement)(_ReduxFormContext.ReduxFormContext.Provider, {\n        value: (0, _extends2[\"default\"])({}, this.props._reduxForm, {\n          sectionPrefix: (0, _prefixName[\"default\"])(this.props, name)\n        }),\n        children: children\n      });\n    }\n\n    return (0, _react.createElement)(_ReduxFormContext.ReduxFormContext.Provider, {\n      value: (0, _extends2[\"default\"])({}, this.props._reduxForm, {\n        sectionPrefix: (0, _prefixName[\"default\"])(this.props, name)\n      }),\n      children: (0, _react.createElement)(component, (0, _extends2[\"default\"])({}, rest, {\n        children: children\n      }))\n    });\n  };\n\n  return FormSection;\n}(_react.Component);\n\nFormSection.propTypes = {\n  name: _propTypes[\"default\"].string.isRequired,\n  component: _validateComponentProp[\"default\"]\n};\nFormSection.defaultProps = {\n  component: 'div'\n};\n\nvar _default = (0, _ReduxFormContext.withReduxForm)(FormSection);\n\nexports[\"default\"] = _default;","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = exports.fieldArrayPropTypes = exports.fieldPropTypes = exports.fieldArrayFieldsPropTypes = exports.fieldArrayMetaPropTypes = exports.fieldMetaPropTypes = exports.fieldInputPropTypes = exports.formPropTypes = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar any = _propTypes[\"default\"].any,\n    bool = _propTypes[\"default\"].bool,\n    func = _propTypes[\"default\"].func,\n    shape = _propTypes[\"default\"].shape,\n    string = _propTypes[\"default\"].string,\n    oneOfType = _propTypes[\"default\"].oneOfType,\n    object = _propTypes[\"default\"].object,\n    number = _propTypes[\"default\"].number;\nvar formPropTypes = {\n  // State:\n  anyTouched: bool.isRequired,\n  // true if any of the fields have been marked as touched\n  asyncValidating: oneOfType([bool, string]).isRequired,\n  // true if async validation is running, a string if a field triggered async validation\n  dirty: bool.isRequired,\n  // true if any values are different from initialValues\n  error: any,\n  // form-wide error from '_error' key in validation result\n  form: string.isRequired,\n  // the name of the form\n  invalid: bool.isRequired,\n  // true if there are any validation errors\n  initialized: bool.isRequired,\n  // true if the form has been initialized\n  initialValues: object,\n  // the initialValues object passed to reduxForm\n  pristine: bool.isRequired,\n  // true if the values are the same as initialValues\n  pure: bool.isRequired,\n  // if true, implements shouldComponentUpdate\n  submitting: bool.isRequired,\n  // true if the form is in the process of being submitted\n  submitAsSideEffect: bool.isRequired,\n  // true if onSubmit result will be dispatched\n  submitFailed: bool.isRequired,\n  // true if the form was submitted and failed for any reason\n  submitSucceeded: bool.isRequired,\n  // true if the form was successfully submitted\n  valid: bool.isRequired,\n  // true if there are no validation errors\n  warning: any,\n  // form-wide warning from '_warning' key in validation result\n  // Actions:\n  array: shape({\n    insert: func.isRequired,\n    // function to insert a value into an array field\n    move: func.isRequired,\n    // function to move a value within an array field\n    pop: func.isRequired,\n    // function to pop a value off of an array field\n    push: func.isRequired,\n    // function to push a value onto an array field\n    remove: func.isRequired,\n    // function to remove a value from an array field\n    removeAll: func.isRequired,\n    // function to remove all the values from an array field\n    shift: func.isRequired,\n    // function to shift a value out of an array field\n    splice: func.isRequired,\n    // function to splice a value into an array field\n    swap: func.isRequired,\n    // function to swap values in an array field\n    unshift: func.isRequired // function to unshift a value into an array field\n\n  }),\n  asyncValidate: func.isRequired,\n  // function to trigger async validation\n  autofill: func.isRequired,\n  // action to set a value of a field and mark it as autofilled\n  blur: func.isRequired,\n  // action to mark a field as blurred\n  change: func.isRequired,\n  // action to change the value of a field\n  clearAsyncError: func.isRequired,\n  // action to clear the async error of a field\n  clearFields: func.isRequired,\n  // action to clean fields values for all fields\n  clearSubmitErrors: func.isRequired,\n  // action to remove submitErrors and error\n  destroy: func.isRequired,\n  // action to destroy the form's data in Redux\n  dispatch: func.isRequired,\n  // the Redux dispatch action\n  handleSubmit: func.isRequired,\n  // function to submit the form\n  initialize: func.isRequired,\n  // action to initialize form data\n  reset: func.isRequired,\n  // action to reset the form data to previously initialized values\n  resetSection: func.isRequired,\n  // action to reset the form sections data to previously initialized values\n  touch: func.isRequired,\n  // action to mark fields as touched\n  submit: func.isRequired,\n  // action to trigger a submission of the specified form\n  untouch: func.isRequired,\n  // action to mark fields as untouched\n  // triggerSubmit\n  triggerSubmit: bool,\n  // if true, submits the form on componentWillReceiveProps\n  clearSubmit: func.isRequired // called before a triggered submit, by default clears triggerSubmit\n\n};\nexports.formPropTypes = formPropTypes;\nvar fieldInputPropTypes = {\n  checked: bool,\n  name: string.isRequired,\n  onBlur: func.isRequired,\n  onChange: func.isRequired,\n  onDragStart: func.isRequired,\n  onDrop: func.isRequired,\n  onFocus: func.isRequired,\n  value: any\n};\nexports.fieldInputPropTypes = fieldInputPropTypes;\nvar fieldMetaPropTypes = {\n  active: bool.isRequired,\n  asyncValidating: bool.isRequired,\n  autofilled: bool.isRequired,\n  dirty: bool.isRequired,\n  dispatch: func.isRequired,\n  error: any,\n  form: string.isRequired,\n  invalid: bool.isRequired,\n  pristine: bool.isRequired,\n  submitting: bool.isRequired,\n  submitFailed: bool.isRequired,\n  touched: bool.isRequired,\n  valid: bool.isRequired,\n  visited: bool.isRequired,\n  warning: string\n};\nexports.fieldMetaPropTypes = fieldMetaPropTypes;\nvar fieldArrayMetaPropTypes = {\n  dirty: bool.isRequired,\n  error: any,\n  form: string.isRequired,\n  invalid: bool.isRequired,\n  pristine: bool.isRequired,\n  submitFailed: bool,\n  submitting: bool,\n  valid: bool.isRequired,\n  warning: string\n};\nexports.fieldArrayMetaPropTypes = fieldArrayMetaPropTypes;\nvar fieldArrayFieldsPropTypes = {\n  name: string.isRequired,\n  forEach: func.isRequired,\n  get: func.isRequired,\n  getAll: func.isRequired,\n  insert: func.isRequired,\n  length: number.isRequired,\n  map: func.isRequired,\n  move: func.isRequired,\n  pop: func.isRequired,\n  push: func.isRequired,\n  reduce: func.isRequired,\n  remove: func.isRequired,\n  removeAll: func.isRequired,\n  shift: func.isRequired,\n  swap: func.isRequired,\n  unshift: func.isRequired\n};\nexports.fieldArrayFieldsPropTypes = fieldArrayFieldsPropTypes;\nvar fieldPropTypes = {\n  input: shape(fieldInputPropTypes).isRequired,\n  meta: shape(fieldMetaPropTypes).isRequired\n};\nexports.fieldPropTypes = fieldPropTypes;\nvar fieldArrayPropTypes = {\n  fields: shape(fieldArrayFieldsPropTypes).isRequired,\n  meta: shape(fieldArrayMetaPropTypes).isRequired\n};\nexports.fieldArrayPropTypes = fieldArrayPropTypes;\nvar _default = formPropTypes;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createField = _interopRequireDefault(require(\"../createField\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createField[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _ConnectedField = _interopRequireDefault(require(\"./ConnectedField\"));\n\nvar _shallowCompare = _interopRequireDefault(require(\"./util/shallowCompare\"));\n\nvar _prefixName = _interopRequireDefault(require(\"./util/prefixName\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar createField = function createField(structure) {\n  var ConnectedField = (0, _ConnectedField[\"default\"])(structure);\n  var setIn = structure.setIn;\n\n  var Field =\n  /*#__PURE__*/\n  function (_Component) {\n    (0, _inheritsLoose2[\"default\"])(Field, _Component);\n\n    function Field(props) {\n      var _this;\n\n      _this = _Component.call(this, props) || this;\n      _this.ref = _react[\"default\"].createRef();\n      _this.ref = _react[\"default\"].createRef();\n\n      _this.normalize = function (name, value) {\n        var normalize = _this.props.normalize;\n\n        if (!normalize) {\n          return value;\n        }\n\n        var previousValues = _this.props._reduxForm.getValues();\n\n        var previousValue = _this.value;\n        var nextValues = setIn(previousValues, name, value);\n        return normalize(value, previousValue, nextValues, previousValues, name);\n      };\n\n      if (!props._reduxForm) {\n        throw new Error('Field must be inside a component decorated with reduxForm()');\n      }\n\n      return _this;\n    }\n\n    var _proto = Field.prototype;\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this2 = this;\n\n      this.props._reduxForm.register(this.name, 'Field', function () {\n        return _this2.props.validate;\n      }, function () {\n        return _this2.props.warn;\n      });\n    };\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n      return (0, _shallowCompare[\"default\"])(this, nextProps, nextState);\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var oldName = (0, _prefixName[\"default\"])(this.props, this.props.name);\n      var newName = (0, _prefixName[\"default\"])(nextProps, nextProps.name);\n\n      if (oldName !== newName || // use deepEqual here because they could be a function or an array of functions\n      !_plain[\"default\"].deepEqual(this.props.validate, nextProps.validate) || !_plain[\"default\"].deepEqual(this.props.warn, nextProps.warn)) {\n        // unregister old name\n        this.props._reduxForm.unregister(oldName); // register new name\n\n\n        this.props._reduxForm.register(newName, 'Field', function () {\n          return nextProps.validate;\n        }, function () {\n          return nextProps.warn;\n        });\n      }\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      this.props._reduxForm.unregister(this.name);\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      (0, _invariant[\"default\"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to Field');\n      return this.ref.current ? this.ref.current.getRenderedComponent() : undefined;\n    };\n\n    _proto.render = function render() {\n      return (0, _react.createElement)(ConnectedField, (0, _extends2[\"default\"])({}, this.props, {\n        name: this.name,\n        normalize: this.normalize,\n        ref: this.ref\n      }));\n    };\n\n    (0, _createClass2[\"default\"])(Field, [{\n      key: \"name\",\n      get: function get() {\n        return (0, _prefixName[\"default\"])(this.props, this.props.name);\n      }\n    }, {\n      key: \"dirty\",\n      get: function get() {\n        return !this.pristine;\n      }\n    }, {\n      key: \"pristine\",\n      get: function get() {\n        return !!(this.ref.current && this.ref.current.isPristine());\n      }\n    }, {\n      key: \"value\",\n      get: function get() {\n        return this.ref.current && this.ref.current.getValue();\n      }\n    }]);\n    return Field;\n  }(_react.Component);\n\n  Field.propTypes = {\n    name: _propTypes[\"default\"].string.isRequired,\n    component: _validateComponentProp[\"default\"],\n    format: _propTypes[\"default\"].func,\n    normalize: _propTypes[\"default\"].func,\n    onBlur: _propTypes[\"default\"].func,\n    onChange: _propTypes[\"default\"].func,\n    onFocus: _propTypes[\"default\"].func,\n    onDragStart: _propTypes[\"default\"].func,\n    onDrop: _propTypes[\"default\"].func,\n    parse: _propTypes[\"default\"].func,\n    props: _propTypes[\"default\"].object,\n    validate: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func)]),\n    warn: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func)]),\n    forwardRef: _propTypes[\"default\"].bool,\n    immutableProps: _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].string),\n    _reduxForm: _propTypes[\"default\"].object\n  };\n  (0, _reactLifecyclesCompat.polyfill)(Field);\n  return (0, _ReduxFormContext.withReduxForm)(Field);\n};\n\nvar _default = createField;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _createFieldProps2 = _interopRequireDefault(require(\"./createFieldProps\"));\n\nvar _onChangeValue = _interopRequireDefault(require(\"./events/onChangeValue\"));\n\nvar _eventConsts = require(\"./util/eventConsts\");\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _isReactNative = _interopRequireDefault(require(\"./isReactNative\"));\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar _isEvent = _interopRequireDefault(require(\"./events/isEvent\"));\n\nvar propsToNotUpdateFor = ['_reduxForm'];\n\nvar isObject = function isObject(entity) {\n  return entity && typeof entity === 'object';\n};\n\nvar isFunction = function isFunction(entity) {\n  return entity && typeof entity === 'function';\n};\n\nvar eventPreventDefault = function eventPreventDefault(event) {\n  if (isObject(event) && isFunction(event.preventDefault)) {\n    event.preventDefault();\n  }\n};\n\nvar eventDataTransferGetData = function eventDataTransferGetData(event, key) {\n  if (isObject(event) && isObject(event.dataTransfer) && isFunction(event.dataTransfer.getData)) {\n    return event.dataTransfer.getData(key);\n  }\n};\n\nvar eventDataTransferSetData = function eventDataTransferSetData(event, key, value) {\n  if (isObject(event) && isObject(event.dataTransfer) && isFunction(event.dataTransfer.setData)) {\n    event.dataTransfer.setData(key, value);\n  }\n};\n\nvar createConnectedField = function createConnectedField(structure) {\n  var deepEqual = structure.deepEqual,\n      getIn = structure.getIn;\n\n  var getSyncError = function getSyncError(syncErrors, name) {\n    var error = _plain[\"default\"].getIn(syncErrors, name); // Because the error for this field might not be at a level in the error structure where\n    // it can be set directly, it might need to be unwrapped from the _error property\n\n\n    return error && error._error ? error._error : error;\n  };\n\n  var getSyncWarning = function getSyncWarning(syncWarnings, name) {\n    var warning = getIn(syncWarnings, name); // Because the warning for this field might not be at a level in the warning structure where\n    // it can be set directly, it might need to be unwrapped from the _warning property\n\n    return warning && warning._warning ? warning._warning : warning;\n  };\n\n  var ConnectedField =\n  /*#__PURE__*/\n  function (_Component) {\n    (0, _inheritsLoose2[\"default\"])(ConnectedField, _Component);\n\n    function ConnectedField() {\n      var _this;\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n      _this.ref = _react[\"default\"].createRef();\n\n      _this.isPristine = function () {\n        return _this.props.pristine;\n      };\n\n      _this.getValue = function () {\n        return _this.props.value;\n      };\n\n      _this.handleChange = function (event) {\n        var _this$props = _this.props,\n            name = _this$props.name,\n            dispatch = _this$props.dispatch,\n            parse = _this$props.parse,\n            normalize = _this$props.normalize,\n            onChange = _this$props.onChange,\n            _reduxForm = _this$props._reduxForm,\n            previousValue = _this$props.value;\n        var newValue = (0, _onChangeValue[\"default\"])(event, {\n          name: name,\n          parse: parse,\n          normalize: normalize\n        });\n        var defaultPrevented = false;\n\n        if (onChange) {\n          // Can't seem to find a way to extend Event in React Native,\n          // thus I simply avoid adding preventDefault() in a RN environment\n          // to prevent the following error:\n          // `One of the sources for assign has an enumerable key on the prototype chain`\n          // Reference: https://github.com/facebook/react-native/issues/5507\n          if (!_isReactNative[\"default\"] && (0, _isEvent[\"default\"])(event)) {\n            onChange((0, _extends2[\"default\"])({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), newValue, previousValue, name);\n          } else {\n            defaultPrevented = onChange(event, newValue, previousValue, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          // dispatch change action\n          dispatch(_reduxForm.change(name, newValue)); // call post-change callback\n\n          if (_reduxForm.asyncValidate) {\n            _reduxForm.asyncValidate(name, newValue, 'change');\n          }\n        }\n      };\n\n      _this.handleFocus = function (event) {\n        var _this$props2 = _this.props,\n            name = _this$props2.name,\n            dispatch = _this$props2.dispatch,\n            onFocus = _this$props2.onFocus,\n            _reduxForm = _this$props2._reduxForm;\n        var defaultPrevented = false;\n\n        if (onFocus) {\n          if (!_isReactNative[\"default\"]) {\n            onFocus((0, _extends2[\"default\"])({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), name);\n          } else {\n            defaultPrevented = onFocus(event, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          dispatch(_reduxForm.focus(name));\n        }\n      };\n\n      _this.handleBlur = function (event) {\n        var _this$props3 = _this.props,\n            name = _this$props3.name,\n            dispatch = _this$props3.dispatch,\n            parse = _this$props3.parse,\n            normalize = _this$props3.normalize,\n            onBlur = _this$props3.onBlur,\n            _reduxForm = _this$props3._reduxForm,\n            _value = _this$props3._value,\n            previousValue = _this$props3.value;\n        var newValue = (0, _onChangeValue[\"default\"])(event, {\n          name: name,\n          parse: parse,\n          normalize: normalize\n        }); // for checkbox and radio, if the value property of checkbox or radio equals\n        // the value passed by blur event, then fire blur action with previousValue.\n\n        if (newValue === _value && _value !== undefined) {\n          newValue = previousValue;\n        }\n\n        var defaultPrevented = false;\n\n        if (onBlur) {\n          if (!_isReactNative[\"default\"]) {\n            onBlur((0, _extends2[\"default\"])({}, event, {\n              preventDefault: function preventDefault() {\n                defaultPrevented = true;\n                return eventPreventDefault(event);\n              }\n            }), newValue, previousValue, name);\n          } else {\n            defaultPrevented = onBlur(event, newValue, previousValue, name);\n          }\n        }\n\n        if (!defaultPrevented) {\n          // dispatch blur action\n          dispatch(_reduxForm.blur(name, newValue)); // call post-blur callback\n\n          if (_reduxForm.asyncValidate) {\n            _reduxForm.asyncValidate(name, newValue, 'blur');\n          }\n        }\n      };\n\n      _this.handleDragStart = function (event) {\n        var _this$props4 = _this.props,\n            name = _this$props4.name,\n            onDragStart = _this$props4.onDragStart,\n            value = _this$props4.value;\n        eventDataTransferSetData(event, _eventConsts.dataKey, value == null ? '' : value);\n\n        if (onDragStart) {\n          onDragStart(event, name);\n        }\n      };\n\n      _this.handleDrop = function (event) {\n        var _this$props5 = _this.props,\n            name = _this$props5.name,\n            dispatch = _this$props5.dispatch,\n            onDrop = _this$props5.onDrop,\n            _reduxForm = _this$props5._reduxForm,\n            previousValue = _this$props5.value;\n        var newValue = eventDataTransferGetData(event, _eventConsts.dataKey);\n        var defaultPrevented = false;\n\n        if (onDrop) {\n          onDrop((0, _extends2[\"default\"])({}, event, {\n            preventDefault: function preventDefault() {\n              defaultPrevented = true;\n              return eventPreventDefault(event);\n            }\n          }), newValue, previousValue, name);\n        }\n\n        if (!defaultPrevented) {\n          // dispatch change action\n          dispatch(_reduxForm.change(name, newValue));\n          eventPreventDefault(event);\n        }\n      };\n\n      return _this;\n    }\n\n    var _proto = ConnectedField.prototype;\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      var _this2 = this;\n\n      var nextPropsKeys = Object.keys(nextProps);\n      var thisPropsKeys = Object.keys(this.props); // if we have children, we MUST update in React 16\n      // https://twitter.com/erikras/status/915866544558788608\n\n      return !!(this.props.children || nextProps.children || nextPropsKeys.length !== thisPropsKeys.length || nextPropsKeys.some(function (prop) {\n        if (~(nextProps.immutableProps || []).indexOf(prop)) {\n          return _this2.props[prop] !== nextProps[prop];\n        }\n\n        return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this2.props[prop], nextProps[prop]);\n      }));\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      return this.ref.current;\n    };\n\n    _proto.render = function render() {\n      var _this$props6 = this.props,\n          component = _this$props6.component,\n          forwardRef = _this$props6.forwardRef,\n          name = _this$props6.name,\n          _reduxForm = _this$props6._reduxForm,\n          normalize = _this$props6.normalize,\n          onBlur = _this$props6.onBlur,\n          onChange = _this$props6.onChange,\n          onFocus = _this$props6.onFocus,\n          onDragStart = _this$props6.onDragStart,\n          onDrop = _this$props6.onDrop,\n          immutableProps = _this$props6.immutableProps,\n          rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props6, [\"component\", \"forwardRef\", \"name\", \"_reduxForm\", \"normalize\", \"onBlur\", \"onChange\", \"onFocus\", \"onDragStart\", \"onDrop\", \"immutableProps\"]);\n\n      var _createFieldProps = (0, _createFieldProps2[\"default\"])(structure, name, (0, _extends2[\"default\"])({}, rest, {\n        form: _reduxForm.form,\n        onBlur: this.handleBlur,\n        onChange: this.handleChange,\n        onDrop: this.handleDrop,\n        onDragStart: this.handleDragStart,\n        onFocus: this.handleFocus\n      })),\n          custom = _createFieldProps.custom,\n          props = (0, _objectWithoutPropertiesLoose2[\"default\"])(_createFieldProps, [\"custom\"]);\n\n      if (forwardRef) {\n        custom.ref = this.ref;\n      }\n\n      if (typeof component === 'string') {\n        var input = props.input,\n            meta = props.meta; // eslint-disable-line no-unused-vars\n        // flatten input into other props\n\n        return (0, _react.createElement)(component, (0, _extends2[\"default\"])({}, input, custom));\n      } else {\n        return (0, _react.createElement)(component, (0, _extends2[\"default\"])({}, props, custom));\n      }\n    };\n\n    return ConnectedField;\n  }(_react.Component);\n\n  ConnectedField.propTypes = {\n    component: _validateComponentProp[\"default\"],\n    props: _propTypes[\"default\"].object\n  };\n  var connector = (0, _reactRedux.connect)(function (state, ownProps) {\n    var name = ownProps.name,\n        _ownProps$_reduxForm = ownProps._reduxForm,\n        initialValues = _ownProps$_reduxForm.initialValues,\n        getFormState = _ownProps$_reduxForm.getFormState;\n    var formState = getFormState(state);\n    var initialState = getIn(formState, \"initial.\" + name);\n    var initial = initialState !== undefined ? initialState : initialValues && getIn(initialValues, name);\n    var value = getIn(formState, \"values.\" + name);\n    var submitting = getIn(formState, 'submitting');\n    var syncError = getSyncError(getIn(formState, 'syncErrors'), name);\n    var syncWarning = getSyncWarning(getIn(formState, 'syncWarnings'), name);\n    var pristine = deepEqual(value, initial);\n    return {\n      asyncError: getIn(formState, \"asyncErrors.\" + name),\n      asyncValidating: getIn(formState, 'asyncValidating') === name,\n      dirty: !pristine,\n      pristine: pristine,\n      state: getIn(formState, \"fields.\" + name),\n      submitError: getIn(formState, \"submitErrors.\" + name),\n      submitFailed: getIn(formState, 'submitFailed'),\n      submitting: submitting,\n      syncError: syncError,\n      syncWarning: syncWarning,\n      initial: initial,\n      value: value,\n      _value: ownProps.value // save value passed in (for radios)\n\n    };\n  }, undefined, undefined, {\n    forwardRef: true\n  });\n  return connector(ConnectedField);\n};\n\nvar _default = createConnectedField;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isEvent = _interopRequireDefault(require(\"./isEvent\"));\n\nvar getSelectedValues = function getSelectedValues(options) {\n  var result = [];\n\n  if (options) {\n    for (var index = 0; index < options.length; index++) {\n      var option = options[index];\n\n      if (option.selected) {\n        result.push(option.value);\n      }\n    }\n  }\n\n  return result;\n};\n\nvar getValue = function getValue(event, isReactNative) {\n  if ((0, _isEvent[\"default\"])(event)) {\n    if (!isReactNative && event.nativeEvent && event.nativeEvent.text !== undefined) {\n      return event.nativeEvent.text;\n    }\n\n    if (isReactNative && event.nativeEvent !== undefined) {\n      return event.nativeEvent.text;\n    }\n\n    var detypedEvent = event;\n    var _detypedEvent$target = detypedEvent.target,\n        type = _detypedEvent$target.type,\n        value = _detypedEvent$target.value,\n        checked = _detypedEvent$target.checked,\n        files = _detypedEvent$target.files,\n        dataTransfer = detypedEvent.dataTransfer;\n\n    if (type === 'checkbox') {\n      return !!checked;\n    }\n\n    if (type === 'file') {\n      return files || dataTransfer && dataTransfer.files;\n    }\n\n    if (type === 'select-multiple') {\n      return getSelectedValues(event.target.options);\n    }\n\n    return value;\n  }\n\n  return event;\n};\n\nvar _default = getValue;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.dataKey = void 0;\nvar dataKey = 'text';\nexports.dataKey = dataKey;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar splice = function splice(array, index, removeNum, value) {\n  array = array || [];\n\n  if (index < array.length) {\n    if (value === undefined && !removeNum) {\n      // inserting undefined\n      var _copy2 = [].concat(array);\n\n      _copy2.splice(index, 0, true); // temporary placeholder\n\n\n      _copy2[index] = undefined; // set to undefined\n\n      return _copy2;\n    }\n\n    if (value != null) {\n      var _copy3 = [].concat(array);\n\n      _copy3.splice(index, removeNum, value); // removing and adding\n\n\n      return _copy3;\n    }\n\n    var _copy = [].concat(array);\n\n    _copy.splice(index, removeNum); // removing\n\n\n    return _copy;\n  }\n\n  if (removeNum) {\n    // trying to remove non-existant item: return original array\n    return array;\n  } // trying to add outside of range: just set value\n\n\n  var copy = [].concat(array);\n  copy[index] = value;\n  return copy;\n};\n\nvar _default = splice;\nexports[\"default\"] = _default;","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nvar setInWithPath = function setInWithPath(state, value, path, pathIndex) {\n  var _extends2;\n\n  if (pathIndex >= path.length) {\n    return value;\n  }\n\n  var first = path[pathIndex];\n  var firstState = state && (Array.isArray(state) ? state[Number(first)] : state[first]);\n  var next = setInWithPath(firstState, value, path, pathIndex + 1);\n\n  if (!state) {\n    if (isNaN(first)) {\n      var _ref;\n\n      return _ref = {}, _ref[first] = next, _ref;\n    }\n\n    var initialized = [];\n    initialized[parseInt(first, 10)] = next;\n    return initialized;\n  }\n\n  if (Array.isArray(state)) {\n    var copy = [].concat(state);\n    copy[parseInt(first, 10)] = next;\n    return copy;\n  }\n\n  return (0, _extends3[\"default\"])({}, state, (_extends2 = {}, _extends2[first] = next, _extends2));\n};\n\nvar setIn = function setIn(state, field, value) {\n  return setInWithPath(state, value, (0, _toPath2[\"default\"])(field), 0);\n};\n\nvar _default = setIn;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isNil2 = _interopRequireDefault(require(\"lodash/isNil\"));\n\nvar _isEqualWith2 = _interopRequireDefault(require(\"lodash/isEqualWith\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar isEmpty = function isEmpty(obj) {\n  return (0, _isNil2[\"default\"])(obj) || obj === '' || isNaN(obj);\n};\n\nvar customizer = function customizer(obj, other) {\n  if (obj === other) return true;\n\n  if (!obj && !other) {\n    return isEmpty(obj) === isEmpty(other);\n  }\n\n  if (obj && other && obj._error !== other._error) return false;\n  if (obj && other && obj._warning !== other._warning) return false;\n  if (_react[\"default\"].isValidElement(obj) || _react[\"default\"].isValidElement(other)) return false;\n};\n\nvar deepEqual = function deepEqual(a, b) {\n  return (0, _isEqualWith2[\"default\"])(a, b, customizer);\n};\n\nvar _default = deepEqual;\nexports[\"default\"] = _default;","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nfunction deleteInWithPath(state, first) {\n  if (state === undefined || state === null || first === undefined || first === null) {\n    return state;\n  }\n\n  for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    rest[_key - 2] = arguments[_key];\n  }\n\n  if (rest.length) {\n    if (Array.isArray(state)) {\n      if (isNaN(first)) {\n        throw new Error(\"Must access array elements with a number, not \\\"\" + String(first) + \"\\\".\");\n      }\n\n      var firstIndex = Number(first);\n\n      if (firstIndex < state.length) {\n        var result = deleteInWithPath.apply(void 0, [state && state[firstIndex]].concat(rest));\n\n        if (result !== state[firstIndex]) {\n          var copy = [].concat(state);\n          copy[firstIndex] = result;\n          return copy;\n        }\n      }\n\n      return state;\n    }\n\n    if (first in state) {\n      var _extends2;\n\n      var _result = deleteInWithPath.apply(void 0, [state && state[first]].concat(rest));\n\n      return state[first] === _result ? state : (0, _extends3[\"default\"])({}, state, (_extends2 = {}, _extends2[first] = _result, _extends2));\n    }\n\n    return state;\n  }\n\n  if (Array.isArray(state)) {\n    if (isNaN(first)) {\n      throw new Error(\"Cannot delete non-numerical index from an array. Given: \\\"\" + String(first));\n    }\n\n    var _firstIndex = Number(first);\n\n    if (_firstIndex < state.length) {\n      var _copy = [].concat(state);\n\n      _copy.splice(_firstIndex, 1);\n\n      return _copy;\n    }\n\n    return state;\n  }\n\n  if (first in state) {\n    var _copy2 = (0, _extends3[\"default\"])({}, state);\n\n    delete _copy2[first];\n    return _copy2;\n  }\n\n  return state;\n}\n\nvar deleteIn = function deleteIn(state, field) {\n  return deleteInWithPath.apply(void 0, [state].concat((0, _toPath2[\"default\"])(field)));\n};\n\nvar _default = deleteIn;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isNil2 = _interopRequireDefault(require(\"lodash/isNil\"));\n\nvar _isEqualWith2 = _interopRequireDefault(require(\"lodash/isEqualWith\"));\n\nvar _immutable = require(\"immutable\");\n\nvar isEmpty = function isEmpty(obj) {\n  return (0, _isNil2[\"default\"])(obj) || obj === '' || isNaN(obj);\n};\n\nvar customizer = function customizer(obj, other) {\n  if (obj === other) return true;\n\n  if (!obj && !other) {\n    return isEmpty(obj) === isEmpty(other);\n  }\n\n  if (_immutable.Iterable.isIterable(obj) && _immutable.Iterable.isIterable(other)) {\n    return obj.count() === other.count() && obj.every(function (value, key) {\n      return other.has(key) && (0, _isEqualWith2[\"default\"])(value, other.get(key), customizer);\n    });\n  }\n\n  return void 0;\n};\n\nvar deepEqual = function deepEqual(a, b) {\n  return (0, _isEqualWith2[\"default\"])(a, b, customizer);\n};\n\nvar _default = deepEqual;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _immutable = require(\"immutable\");\n\nvar _keys = _interopRequireDefault(require(\"../plain/keys\"));\n\nvar empty = (0, _immutable.List)();\n\nvar keys = function keys(value) {\n  if (_immutable.List.isList(value)) {\n    return value.map(function (i) {\n      return i.name;\n    });\n  }\n\n  if (_immutable.Iterable.isIterable(value)) {\n    return value.keySeq();\n  }\n\n  return value ? (0, _immutable.List)((0, _keys[\"default\"])(value)) : empty;\n};\n\nvar _default = keys;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = setIn;\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nvar _immutable = require(\"immutable\");\n\nvar arrayPattern = /\\[(\\d+)\\]/;\n\nvar undefinedArrayMerge = function undefinedArrayMerge(previous, next) {\n  return next !== undefined ? next : previous;\n};\n\nvar mergeLists = function mergeLists(originalList, value) {\n  if (originalList && _immutable.List.isList(originalList)) {\n    return originalList.map(function (originalListValue, index) {\n      return undefinedArrayMerge(value.get(index), originalListValue);\n    }).concat(value.slice(originalList.size));\n  }\n\n  return value;\n};\n\nvar assureComplexProps = function assureComplexProps(state, path) {\n  for (var pathPart = 1; pathPart < path.length; ++pathPart) {\n    var nextPart = path.slice(0, pathPart);\n\n    if (state.getIn(nextPart) == null) {\n      return state.setIn(nextPart, new _immutable.Map());\n    }\n  }\n\n  return state;\n};\n/*\n * ImmutableJS' setIn function doesn't support array (List) creation\n * so we must pre-insert all arrays in the path ahead of time.\n * \n * Additionally we must also pre-set a dummy Map at the location\n * of an array index if there's parts that come afterwards because \n * the setIn function uses `{}` to mark an unset value instead of \n * undefined (which is the case for list / arrays).\n */\n\n\nfunction setIn(state, field, value) {\n  var path = (0, _toPath2[\"default\"])(field);\n\n  if (!field || typeof field !== 'string' || !arrayPattern.test(field)) {\n    var newState = assureComplexProps(state, path);\n    return newState.setIn(path, value);\n  }\n\n  return state.withMutations(function (mutable) {\n    var _loop = function _loop(pathIndex) {\n      var nextPart = path[pathIndex + 1];\n\n      if (isNaN(nextPart)) {\n        return \"continue\";\n      }\n\n      mutable = mutable.updateIn(path.slice(0, pathIndex + 1), function (value) {\n        return mergeLists(value, new _immutable.List().set(parseInt(nextPart, 10), new _immutable.Map()));\n      });\n    };\n\n    for (var pathIndex = 0; pathIndex < path.length - 1; ++pathIndex) {\n      var _ret = _loop(pathIndex);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return mutable.setIn(path, value);\n  });\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _immutable = require(\"immutable\");\n\nvar _default = function _default(list, index, removeNum, value) {\n  list = _immutable.List.isList(list) ? list : (0, _immutable.List)();\n\n  if (index < list.count()) {\n    if (value === undefined && !removeNum) {\n      // inserting undefined\n      // first insert true and then re-set it to undefined\n      return list.splice(index, 0, true) // placeholder\n      .set(index, undefined);\n    }\n\n    if (value != null) {\n      return list.splice(index, removeNum, value); // removing and adding\n    } else {\n      return list.splice(index, removeNum); // removing\n    }\n  }\n\n  if (removeNum) {\n    // trying to remove non-existant item: return original array\n    return list;\n  } // trying to add outside of range: just set value\n\n\n  return list.set(index, value);\n};\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createFields = _interopRequireDefault(require(\"../createFields\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createFields[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = require(\"react\");\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _get = _interopRequireDefault(require(\"lodash/get\"));\n\nvar _ConnectedFields = _interopRequireDefault(require(\"./ConnectedFields\"));\n\nvar _shallowCompare = _interopRequireDefault(require(\"./util/shallowCompare\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _prefixName = _interopRequireDefault(require(\"./util/prefixName\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar validateNameProp = function validateNameProp(prop) {\n  if (!prop) {\n    return new Error('No \"names\" prop was specified <Fields/>');\n  }\n\n  if (!Array.isArray(prop) && !prop._isFieldArray) {\n    return new Error('Invalid prop \"names\" supplied to <Fields/>. Must be either an array of strings or the fields array generated by FieldArray.');\n  }\n};\n\nvar warnAndValidatePropType = _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func), _propTypes[\"default\"].objectOf(_propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func)]))]);\n\nvar fieldsPropTypes = {\n  component: _validateComponentProp[\"default\"],\n  format: _propTypes[\"default\"].func,\n  parse: _propTypes[\"default\"].func,\n  props: _propTypes[\"default\"].object,\n  forwardRef: _propTypes[\"default\"].bool,\n  validate: warnAndValidatePropType,\n  warn: warnAndValidatePropType\n};\n\nvar getFieldWarnAndValidate = function getFieldWarnAndValidate(prop, name) {\n  return Array.isArray(prop) || typeof prop === 'function' ? prop : (0, _get[\"default\"])(prop, name, undefined);\n};\n\nvar createFields = function createFields(structure) {\n  var ConnectedFields = (0, _ConnectedFields[\"default\"])(structure);\n\n  var Fields =\n  /*#__PURE__*/\n  function (_Component) {\n    (0, _inheritsLoose2[\"default\"])(Fields, _Component);\n\n    function Fields(props) {\n      var _this;\n\n      _this = _Component.call(this, props) || this;\n\n      if (!props._reduxForm) {\n        throw new Error('Fields must be inside a component decorated with reduxForm()');\n      }\n\n      var error = validateNameProp(props.names);\n\n      if (error) {\n        throw error;\n      }\n\n      return _this;\n    }\n\n    var _proto = Fields.prototype;\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      return (0, _shallowCompare[\"default\"])(this, nextProps);\n    };\n\n    _proto.componentDidMount = function componentDidMount() {\n      this.registerFields(this.props.names);\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (!_plain[\"default\"].deepEqual(this.props.names, nextProps.names)) {\n        var props = this.props;\n        var unregister = props._reduxForm.unregister; // unregister old name\n\n        this.props.names.forEach(function (name) {\n          return unregister((0, _prefixName[\"default\"])(props, name));\n        }); // register new name\n\n        this.registerFields(nextProps.names);\n      }\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      var props = this.props;\n      var unregister = props._reduxForm.unregister;\n      this.props.names.forEach(function (name) {\n        return unregister((0, _prefixName[\"default\"])(props, name));\n      });\n    };\n\n    _proto.registerFields = function registerFields(names) {\n      var _this2 = this;\n\n      var props = this.props;\n      var register = props._reduxForm.register;\n      names.forEach(function (name) {\n        return register((0, _prefixName[\"default\"])(props, name), 'Field', function () {\n          return getFieldWarnAndValidate(_this2.props.validate, name);\n        }, function () {\n          return getFieldWarnAndValidate(_this2.props.warn, name);\n        });\n      });\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      (0, _invariant[\"default\"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to Fields');\n      return this.refs.connected.getRenderedComponent();\n    };\n\n    _proto.render = function render() {\n      var props = this.props;\n      return (0, _react.createElement)(ConnectedFields, (0, _extends2[\"default\"])({}, this.props, {\n        names: this.props.names.map(function (name) {\n          return (0, _prefixName[\"default\"])(props, name);\n        }),\n        ref: 'connected'\n      }));\n    };\n\n    (0, _createClass2[\"default\"])(Fields, [{\n      key: \"names\",\n      get: function get() {\n        var props = this.props;\n        return this.props.names.map(function (name) {\n          return (0, _prefixName[\"default\"])(props, name);\n        });\n      }\n    }, {\n      key: \"dirty\",\n      get: function get() {\n        return this.refs.connected.isDirty();\n      }\n    }, {\n      key: \"pristine\",\n      get: function get() {\n        return !this.dirty;\n      }\n    }, {\n      key: \"values\",\n      get: function get() {\n        return this.refs.connected && this.refs.connected.getValues();\n      }\n    }]);\n    return Fields;\n  }(_react.Component);\n\n  Fields.propTypes = (0, _extends2[\"default\"])({\n    names: function names(props, propName) {\n      return validateNameProp(props[propName]);\n    }\n  }, fieldsPropTypes);\n  (0, _reactLifecyclesCompat.polyfill)(Fields);\n  return (0, _ReduxFormContext.withReduxForm)(Fields);\n};\n\nvar _default = createFields;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _createFieldProps2 = _interopRequireDefault(require(\"./createFieldProps\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _onChangeValue = _interopRequireDefault(require(\"./events/onChangeValue\"));\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar propsToNotUpdateFor = ['_reduxForm'];\n\nvar createConnectedFields = function createConnectedFields(structure) {\n  var deepEqual = structure.deepEqual,\n      getIn = structure.getIn,\n      size = structure.size;\n\n  var getSyncError = function getSyncError(syncErrors, name) {\n    // Because the error for this field might not be at a level in the error structure where\n    // it can be set directly, it might need to be unwrapped from the _error property\n    return _plain[\"default\"].getIn(syncErrors, name + \"._error\") || _plain[\"default\"].getIn(syncErrors, name);\n  };\n\n  var getSyncWarning = function getSyncWarning(syncWarnings, name) {\n    var warning = getIn(syncWarnings, name); // Because the warning for this field might not be at a level in the warning structure where\n    // it can be set directly, it might need to be unwrapped from the _warning property\n\n    return warning && warning._warning ? warning._warning : warning;\n  };\n\n  var ConnectedFields =\n  /*#__PURE__*/\n  function (_React$Component) {\n    (0, _inheritsLoose2[\"default\"])(ConnectedFields, _React$Component);\n\n    function ConnectedFields(props) {\n      var _this;\n\n      _this = _React$Component.call(this, props) || this;\n      _this.onChangeFns = {};\n      _this.onFocusFns = {};\n      _this.onBlurFns = {};\n      _this.ref = _react[\"default\"].createRef();\n\n      _this.prepareEventHandlers = function (_ref) {\n        var names = _ref.names;\n        return names.forEach(function (name) {\n          _this.onChangeFns[name] = function (event) {\n            return _this.handleChange(name, event);\n          };\n\n          _this.onFocusFns[name] = function () {\n            return _this.handleFocus(name);\n          };\n\n          _this.onBlurFns[name] = function (event) {\n            return _this.handleBlur(name, event);\n          };\n        });\n      };\n\n      _this.handleChange = function (name, event) {\n        var _this$props = _this.props,\n            dispatch = _this$props.dispatch,\n            parse = _this$props.parse,\n            _reduxForm = _this$props._reduxForm;\n        var value = (0, _onChangeValue[\"default\"])(event, {\n          name: name,\n          parse: parse\n        });\n        dispatch(_reduxForm.change(name, value)); // call post-change callback\n\n        if (_reduxForm.asyncValidate) {\n          _reduxForm.asyncValidate(name, value, 'change');\n        }\n      };\n\n      _this.handleFocus = function (name) {\n        var _this$props2 = _this.props,\n            dispatch = _this$props2.dispatch,\n            _reduxForm = _this$props2._reduxForm;\n        dispatch(_reduxForm.focus(name));\n      };\n\n      _this.handleBlur = function (name, event) {\n        var _this$props3 = _this.props,\n            dispatch = _this$props3.dispatch,\n            parse = _this$props3.parse,\n            _reduxForm = _this$props3._reduxForm;\n        var value = (0, _onChangeValue[\"default\"])(event, {\n          name: name,\n          parse: parse\n        }); // dispatch blur action\n\n        dispatch(_reduxForm.blur(name, value)); // call post-blur callback\n\n        if (_reduxForm.asyncValidate) {\n          _reduxForm.asyncValidate(name, value, 'blur');\n        }\n      };\n\n      _this.prepareEventHandlers(props);\n\n      return _this;\n    }\n\n    var _proto = ConnectedFields.prototype;\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var _this2 = this;\n\n      if (this.props.names !== nextProps.names && (size(this.props.names) !== size(nextProps.names) || nextProps.names.some(function (nextName) {\n        return !_this2.props._fields[nextName];\n      }))) {\n        // names has changed. The cached event handlers need to be updated\n        this.prepareEventHandlers(nextProps);\n      }\n    };\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      var _this3 = this;\n\n      var nextPropsKeys = Object.keys(nextProps);\n      var thisPropsKeys = Object.keys(this.props); // if we have children, we MUST update in React 16\n      // https://twitter.com/erikras/status/915866544558788608\n\n      return !!(this.props.children || nextProps.children || nextPropsKeys.length !== thisPropsKeys.length || nextPropsKeys.some(function (prop) {\n        return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this3.props[prop], nextProps[prop]);\n      }));\n    };\n\n    _proto.isDirty = function isDirty() {\n      var _fields = this.props._fields;\n      return Object.keys(_fields).some(function (name) {\n        return _fields[name].dirty;\n      });\n    };\n\n    _proto.getValues = function getValues() {\n      var _fields = this.props._fields;\n      return Object.keys(_fields).reduce(function (accumulator, name) {\n        return _plain[\"default\"].setIn(accumulator, name, _fields[name].value);\n      }, {});\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      return this.ref.current;\n    };\n\n    _proto.render = function render() {\n      var _this4 = this;\n\n      var _this$props4 = this.props,\n          component = _this$props4.component,\n          forwardRef = _this$props4.forwardRef,\n          _fields = _this$props4._fields,\n          _reduxForm = _this$props4._reduxForm,\n          rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props4, [\"component\", \"forwardRef\", \"_fields\", \"_reduxForm\"]);\n      var sectionPrefix = _reduxForm.sectionPrefix,\n          form = _reduxForm.form;\n\n      var _Object$keys$reduce = Object.keys(_fields).reduce(function (accumulator, name) {\n        var connectedProps = _fields[name];\n\n        var _createFieldProps = (0, _createFieldProps2[\"default\"])(structure, name, (0, _extends2[\"default\"])({}, connectedProps, rest, {\n          form: form,\n          onBlur: _this4.onBlurFns[name],\n          onChange: _this4.onChangeFns[name],\n          onFocus: _this4.onFocusFns[name]\n        })),\n            custom = _createFieldProps.custom,\n            fieldProps = (0, _objectWithoutPropertiesLoose2[\"default\"])(_createFieldProps, [\"custom\"]);\n\n        accumulator.custom = custom;\n        var fieldName = sectionPrefix ? name.replace(sectionPrefix + \".\", '') : name;\n        return _plain[\"default\"].setIn(accumulator, fieldName, fieldProps);\n      }, {}),\n          custom = _Object$keys$reduce.custom,\n          props = (0, _objectWithoutPropertiesLoose2[\"default\"])(_Object$keys$reduce, [\"custom\"]);\n\n      if (forwardRef) {\n        props.ref = this.ref;\n      }\n\n      return _react[\"default\"].createElement(component, (0, _extends2[\"default\"])({}, props, custom));\n    };\n\n    return ConnectedFields;\n  }(_react[\"default\"].Component);\n\n  ConnectedFields.propTypes = {\n    component: _validateComponentProp[\"default\"],\n    _fields: _propTypes[\"default\"].object.isRequired,\n    props: _propTypes[\"default\"].object\n  };\n  var connector = (0, _reactRedux.connect)(function (state, ownProps) {\n    var names = ownProps.names,\n        _ownProps$_reduxForm = ownProps._reduxForm,\n        initialValues = _ownProps$_reduxForm.initialValues,\n        getFormState = _ownProps$_reduxForm.getFormState;\n    var formState = getFormState(state);\n    return {\n      _fields: names.reduce(function (accumulator, name) {\n        var initialState = getIn(formState, \"initial.\" + name);\n        var initial = initialState !== undefined ? initialState : initialValues && getIn(initialValues, name);\n        var value = getIn(formState, \"values.\" + name);\n        var syncError = getSyncError(getIn(formState, 'syncErrors'), name);\n        var syncWarning = getSyncWarning(getIn(formState, 'syncWarnings'), name);\n        var submitting = getIn(formState, 'submitting');\n        var pristine = value === initial;\n        accumulator[name] = {\n          asyncError: getIn(formState, \"asyncErrors.\" + name),\n          asyncValidating: getIn(formState, 'asyncValidating') === name,\n          dirty: !pristine,\n          initial: initial,\n          pristine: pristine,\n          state: getIn(formState, \"fields.\" + name),\n          submitError: getIn(formState, \"submitErrors.\" + name),\n          submitFailed: getIn(formState, 'submitFailed'),\n          submitting: submitting,\n          syncError: syncError,\n          syncWarning: syncWarning,\n          value: value,\n          _value: ownProps.value // save value passed in (for radios)\n\n        };\n        return accumulator;\n      }, {})\n    };\n  }, undefined, undefined, {\n    forwardRef: true\n  });\n  return connector(ConnectedFields);\n};\n\nvar _default = createConnectedFields;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createFieldArray = _interopRequireDefault(require(\"../createFieldArray\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createFieldArray[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _ConnectedFieldArray = _interopRequireDefault(require(\"./ConnectedFieldArray\"));\n\nvar _prefixName = _interopRequireDefault(require(\"./util/prefixName\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar toArray = function toArray(value) {\n  return Array.isArray(value) ? value : [value];\n};\n\nvar wrapError = function wrapError(fn, key) {\n  return fn && function () {\n    var validators = toArray(fn);\n\n    for (var i = 0; i < validators.length; i++) {\n      var result = validators[i].apply(validators, arguments);\n\n      if (result) {\n        var _ref;\n\n        return _ref = {}, _ref[key] = result, _ref;\n      }\n    }\n  };\n};\n\nvar createFieldArray = function createFieldArray(structure) {\n  var ConnectedFieldArray = (0, _ConnectedFieldArray[\"default\"])(structure);\n\n  var FieldArray =\n  /*#__PURE__*/\n  function (_Component) {\n    (0, _inheritsLoose2[\"default\"])(FieldArray, _Component);\n\n    function FieldArray(props) {\n      var _this;\n\n      _this = _Component.call(this, props) || this;\n      _this.ref = _react[\"default\"].createRef();\n\n      if (!props._reduxForm) {\n        throw new Error('FieldArray must be inside a component decorated with reduxForm()');\n      }\n\n      return _this;\n    }\n\n    var _proto = FieldArray.prototype;\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this2 = this;\n\n      this.props._reduxForm.register(this.name, 'FieldArray', function () {\n        return wrapError(_this2.props.validate, '_error');\n      }, function () {\n        return wrapError(_this2.props.warn, '_warning');\n      });\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var oldName = (0, _prefixName[\"default\"])(this.props, this.props.name);\n      var newName = (0, _prefixName[\"default\"])(nextProps, nextProps.name);\n\n      if (oldName !== newName) {\n        // unregister old name\n        this.props._reduxForm.unregister(oldName); // register new name\n\n\n        this.props._reduxForm.register(newName, 'FieldArray');\n      }\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      this.props._reduxForm.unregister(this.name);\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      (0, _invariant[\"default\"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to FieldArray');\n      return this.ref && this.ref.current.getRenderedComponent();\n    };\n\n    _proto.render = function render() {\n      return (0, _react.createElement)(ConnectedFieldArray, (0, _extends2[\"default\"])({}, this.props, {\n        name: this.name,\n        ref: this.ref\n      }));\n    };\n\n    (0, _createClass2[\"default\"])(FieldArray, [{\n      key: \"name\",\n      get: function get() {\n        return (0, _prefixName[\"default\"])(this.props, this.props.name);\n      }\n    }, {\n      key: \"dirty\",\n      get: function get() {\n        return !this.ref || this.ref.current.dirty;\n      }\n    }, {\n      key: \"pristine\",\n      get: function get() {\n        return !!(this.ref && this.ref.current.pristine);\n      }\n    }, {\n      key: \"value\",\n      get: function get() {\n        return this.ref ? this.ref.current.value : undefined;\n      }\n    }]);\n    return FieldArray;\n  }(_react.Component);\n\n  FieldArray.propTypes = {\n    name: _propTypes[\"default\"].string.isRequired,\n    component: _validateComponentProp[\"default\"],\n    props: _propTypes[\"default\"].object,\n    validate: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func)]),\n    warn: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].func, _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].func)]),\n    forwardRef: _propTypes[\"default\"].bool,\n    _reduxForm: _propTypes[\"default\"].object\n  };\n  (0, _reactLifecyclesCompat.polyfill)(FieldArray);\n  return (0, _ReduxFormContext.withReduxForm)(FieldArray);\n};\n\nvar _default = createFieldArray;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _mapValues2 = _interopRequireDefault(require(\"lodash/mapValues\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _redux = require(\"redux\");\n\nvar _createFieldArrayProps = _interopRequireDefault(require(\"./createFieldArrayProps\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _validateComponentProp = _interopRequireDefault(require(\"./util/validateComponentProp\"));\n\nvar propsToNotUpdateFor = ['_reduxForm', 'value'];\n\nvar createConnectedFieldArray = function createConnectedFieldArray(structure) {\n  var deepEqual = structure.deepEqual,\n      getIn = structure.getIn,\n      size = structure.size,\n      equals = structure.equals,\n      orderChanged = structure.orderChanged;\n\n  var getSyncError = function getSyncError(syncErrors, name) {\n    // For an array, the error can _ONLY_ be under _error.\n    // This is why this getSyncError is not the same as the\n    // one in Field.\n    return _plain[\"default\"].getIn(syncErrors, name + \"._error\");\n  };\n\n  var getSyncWarning = function getSyncWarning(syncWarnings, name) {\n    // For an array, the warning can _ONLY_ be under _warning.\n    // This is why this getSyncError is not the same as the\n    // one in Field.\n    return getIn(syncWarnings, name + \"._warning\");\n  };\n\n  var ConnectedFieldArray =\n  /*#__PURE__*/\n  function (_Component) {\n    (0, _inheritsLoose2[\"default\"])(ConnectedFieldArray, _Component);\n\n    function ConnectedFieldArray() {\n      var _this;\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n      _this.ref = _react[\"default\"].createRef();\n\n      _this.getValue = function (index) {\n        return _this.props.value && getIn(_this.props.value, String(index));\n      };\n\n      return _this;\n    }\n\n    var _proto = ConnectedFieldArray.prototype;\n\n    _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      var _this2 = this;\n\n      // Update if the elements of the value array was updated.\n      var thisValue = this.props.value;\n      var nextValue = nextProps.value;\n\n      if (thisValue && nextValue) {\n        var nextValueItemsSame = equals(nextValue, thisValue); //.every(val => ~thisValue.indexOf(val))\n\n        var nextValueItemsOrderChanged = orderChanged(thisValue, nextValue);\n        var thisValueLength = thisValue.length || thisValue.size;\n        var nextValueLength = nextValue.length || nextValue.size;\n\n        if (thisValueLength !== nextValueLength || nextValueItemsSame && nextValueItemsOrderChanged || nextProps.rerenderOnEveryChange && thisValue.some(function (val, index) {\n          return !deepEqual(val, nextValue[index]);\n        })) {\n          return true;\n        }\n      }\n\n      var nextPropsKeys = Object.keys(nextProps);\n      var thisPropsKeys = Object.keys(this.props); // if we have children, we MUST update in React 16\n      // https://twitter.com/erikras/status/915866544558788608\n\n      return !!(this.props.children || nextProps.children || nextPropsKeys.length !== thisPropsKeys.length || nextPropsKeys.some(function (prop) {\n        // useful to debug rerenders\n        // if (!plain.deepEqual(this.props[ prop ], nextProps[ prop ])) {\n        //   console.info(prop, 'changed', this.props[ prop ], '==>', nextProps[ prop ])\n        // }\n        return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this2.props[prop], nextProps[prop]);\n      }));\n    };\n\n    _proto.getRenderedComponent = function getRenderedComponent() {\n      return this.ref.current;\n    };\n\n    _proto.render = function render() {\n      var _this$props = this.props,\n          component = _this$props.component,\n          forwardRef = _this$props.forwardRef,\n          name = _this$props.name,\n          _reduxForm = _this$props._reduxForm,\n          validate = _this$props.validate,\n          warn = _this$props.warn,\n          rerenderOnEveryChange = _this$props.rerenderOnEveryChange,\n          rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props, [\"component\", \"forwardRef\", \"name\", \"_reduxForm\", \"validate\", \"warn\", \"rerenderOnEveryChange\"]);\n      var props = (0, _createFieldArrayProps[\"default\"])(structure, name, _reduxForm.form, _reduxForm.sectionPrefix, this.getValue, rest);\n\n      if (forwardRef) {\n        props.ref = this.ref;\n      }\n\n      return (0, _react.createElement)(component, props);\n    };\n\n    (0, _createClass2[\"default\"])(ConnectedFieldArray, [{\n      key: \"dirty\",\n      get: function get() {\n        return this.props.dirty;\n      }\n    }, {\n      key: \"pristine\",\n      get: function get() {\n        return this.props.pristine;\n      }\n    }, {\n      key: \"value\",\n      get: function get() {\n        return this.props.value;\n      }\n    }]);\n    return ConnectedFieldArray;\n  }(_react.Component);\n\n  ConnectedFieldArray.propTypes = {\n    component: _validateComponentProp[\"default\"],\n    props: _propTypes[\"default\"].object,\n    rerenderOnEveryChange: _propTypes[\"default\"].bool\n  };\n  ConnectedFieldArray.defaultProps = {\n    rerenderOnEveryChange: false\n  };\n  var connector = (0, _reactRedux.connect)(function (state, ownProps) {\n    var name = ownProps.name,\n        _ownProps$_reduxForm = ownProps._reduxForm,\n        initialValues = _ownProps$_reduxForm.initialValues,\n        getFormState = _ownProps$_reduxForm.getFormState;\n    var formState = getFormState(state);\n    var initial = getIn(formState, \"initial.\" + name) || initialValues && getIn(initialValues, name);\n    var value = getIn(formState, \"values.\" + name);\n    var submitting = getIn(formState, 'submitting');\n    var syncError = getSyncError(getIn(formState, 'syncErrors'), name);\n    var syncWarning = getSyncWarning(getIn(formState, 'syncWarnings'), name);\n    var pristine = deepEqual(value, initial);\n    return {\n      asyncError: getIn(formState, \"asyncErrors.\" + name + \"._error\"),\n      dirty: !pristine,\n      pristine: pristine,\n      state: getIn(formState, \"fields.\" + name),\n      submitError: getIn(formState, \"submitErrors.\" + name + \"._error\"),\n      submitFailed: getIn(formState, 'submitFailed'),\n      submitting: submitting,\n      syncError: syncError,\n      syncWarning: syncWarning,\n      value: value,\n      length: size(value)\n    };\n  }, function (dispatch, ownProps) {\n    var name = ownProps.name,\n        _reduxForm = ownProps._reduxForm;\n    var arrayInsert = _reduxForm.arrayInsert,\n        arrayMove = _reduxForm.arrayMove,\n        arrayPop = _reduxForm.arrayPop,\n        arrayPush = _reduxForm.arrayPush,\n        arrayRemove = _reduxForm.arrayRemove,\n        arrayRemoveAll = _reduxForm.arrayRemoveAll,\n        arrayShift = _reduxForm.arrayShift,\n        arraySplice = _reduxForm.arraySplice,\n        arraySwap = _reduxForm.arraySwap,\n        arrayUnshift = _reduxForm.arrayUnshift;\n    return (0, _mapValues2[\"default\"])({\n      arrayInsert: arrayInsert,\n      arrayMove: arrayMove,\n      arrayPop: arrayPop,\n      arrayPush: arrayPush,\n      arrayRemove: arrayRemove,\n      arrayRemoveAll: arrayRemoveAll,\n      arrayShift: arrayShift,\n      arraySplice: arraySplice,\n      arraySwap: arraySwap,\n      arrayUnshift: arrayUnshift\n    }, function (actionCreator) {\n      return (0, _redux.bindActionCreators)(actionCreator.bind(null, name), dispatch);\n    });\n  }, undefined, {\n    forwardRef: true\n  });\n  return connector(ConnectedFieldArray);\n};\n\nvar _default = createConnectedFieldArray;\nexports[\"default\"] = _default;","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar createFieldArrayProps = function createFieldArrayProps(_ref, name, form, sectionPrefix, getValue, _ref2) {\n  var getIn = _ref.getIn;\n  var arrayInsert = _ref2.arrayInsert,\n      arrayMove = _ref2.arrayMove,\n      arrayPop = _ref2.arrayPop,\n      arrayPush = _ref2.arrayPush,\n      arrayRemove = _ref2.arrayRemove,\n      arrayRemoveAll = _ref2.arrayRemoveAll,\n      arrayShift = _ref2.arrayShift,\n      arraySplice = _ref2.arraySplice,\n      arraySwap = _ref2.arraySwap,\n      arrayUnshift = _ref2.arrayUnshift,\n      asyncError = _ref2.asyncError,\n      dirty = _ref2.dirty,\n      length = _ref2.length,\n      pristine = _ref2.pristine,\n      submitError = _ref2.submitError,\n      state = _ref2.state,\n      submitFailed = _ref2.submitFailed,\n      submitting = _ref2.submitting,\n      syncError = _ref2.syncError,\n      syncWarning = _ref2.syncWarning,\n      value = _ref2.value,\n      props = _ref2.props,\n      rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_ref2, [\"arrayInsert\", \"arrayMove\", \"arrayPop\", \"arrayPush\", \"arrayRemove\", \"arrayRemoveAll\", \"arrayShift\", \"arraySplice\", \"arraySwap\", \"arrayUnshift\", \"asyncError\", \"dirty\", \"length\", \"pristine\", \"submitError\", \"state\", \"submitFailed\", \"submitting\", \"syncError\", \"syncWarning\", \"value\", \"props\"]);\n  var error = syncError || asyncError || submitError;\n  var warning = syncWarning;\n  var fieldName = sectionPrefix ? name.replace(sectionPrefix + \".\", '') : name;\n  var finalProps = (0, _extends2[\"default\"])({\n    fields: {\n      _isFieldArray: true,\n      forEach: function forEach(callback) {\n        return (value || []).forEach(function (item, index) {\n          return callback(fieldName + \"[\" + index + \"]\", index, finalProps.fields);\n        });\n      },\n      get: getValue,\n      getAll: function getAll() {\n        return value;\n      },\n      insert: arrayInsert,\n      length: length,\n      map: function map(callback) {\n        return (value || []).map(function (item, index) {\n          return callback(fieldName + \"[\" + index + \"]\", index, finalProps.fields);\n        });\n      },\n      move: arrayMove,\n      name: name,\n      pop: function pop() {\n        arrayPop();\n        return getIn(value, String(length - 1));\n      },\n      push: arrayPush,\n      reduce: function reduce(callback, initial) {\n        return (value || []).reduce(function (accumulator, item, index) {\n          return callback(accumulator, fieldName + \"[\" + index + \"]\", index, finalProps.fields);\n        }, initial);\n      },\n      remove: arrayRemove,\n      removeAll: arrayRemoveAll,\n      shift: function shift() {\n        arrayShift();\n        return getIn(value, '0');\n      },\n      splice: arraySplice,\n      swap: arraySwap,\n      unshift: arrayUnshift\n    },\n    meta: {\n      dirty: dirty,\n      error: error,\n      form: form,\n      warning: warning,\n      invalid: !!error,\n      pristine: pristine,\n      submitting: submitting,\n      submitFailed: submitFailed,\n      valid: !error\n    }\n  }, props, rest);\n  return finalProps;\n};\n\nvar _default = createFieldArrayProps;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createFormValueSelector = _interopRequireDefault(require(\"../createFormValueSelector\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createFormValueSelector[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar createFormValueSelector = function createFormValueSelector(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    (0, _invariant[\"default\"])(form, 'Form value must be specified');\n\n    var nonNullGetFormState = getFormState || function (state) {\n      return getIn(state, 'form');\n    };\n\n    return function (state) {\n      for (var _len = arguments.length, fields = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        fields[_key - 1] = arguments[_key];\n      }\n\n      (0, _invariant[\"default\"])(fields.length, 'No fields specified');\n      return fields.length === 1 ? // only selecting one field, so return its value\n      getIn(nonNullGetFormState(state), form + \".values.\" + fields[0]) : // selecting many fields, so return an object of field values\n      fields.reduce(function (accumulator, field) {\n        var value = getIn(nonNullGetFormState(state), form + \".values.\" + field);\n        return value === undefined ? accumulator : _plain[\"default\"].setIn(accumulator, field, value);\n      }, {});\n    };\n  };\n};\n\nvar _default = createFormValueSelector;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createFormValues = _interopRequireDefault(require(\"../createFormValues\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createFormValues[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _mapValues2 = _interopRequireDefault(require(\"lodash/mapValues\"));\n\nvar _isEqual2 = _interopRequireDefault(require(\"lodash/isEqual\"));\n\nvar _isEmpty2 = _interopRequireDefault(require(\"lodash/isEmpty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _prefixName = _interopRequireDefault(require(\"./util/prefixName\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar createValues = function createValues(_ref) {\n  var getIn = _ref.getIn;\n  return function (firstArg) {\n    for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    // create a class that reads current form name and creates a selector\n    // return\n    return function (Component) {\n      var FormValues =\n      /*#__PURE__*/\n      function (_React$Component) {\n        (0, _inheritsLoose2[\"default\"])(FormValues, _React$Component);\n\n        function FormValues(props) {\n          var _this;\n\n          _this = _React$Component.call(this, props) || this;\n\n          if (!props._reduxForm) {\n            throw new Error('formValues() must be used inside a React tree decorated with reduxForm()');\n          }\n\n          _this.updateComponent(props);\n\n          return _this;\n        }\n\n        var _proto = FormValues.prototype;\n\n        _proto.componentWillReceiveProps = function componentWillReceiveProps(props) {\n          if (typeof firstArg === 'function') {\n            this.updateComponent(props);\n          }\n        };\n\n        _proto.render = function render() {\n          var Component = this.Component;\n          return _react[\"default\"].createElement(Component // so that the connected component updates props when sectionPrefix has changed\n          , (0, _extends2[\"default\"])({\n            sectionPrefix: this.props._reduxForm.sectionPrefix\n          }, this.props));\n        };\n\n        _proto.updateComponent = function updateComponent(props) {\n          var valuesMap;\n          var resolvedFirstArg = typeof firstArg === 'function' ? firstArg(props) : firstArg;\n\n          if (typeof resolvedFirstArg === 'string') {\n            var _rest$reduce;\n\n            valuesMap = rest.reduce(function (result, k) {\n              result[k] = k;\n              return result;\n            }, (_rest$reduce = {}, _rest$reduce[resolvedFirstArg] = resolvedFirstArg, _rest$reduce));\n          } else {\n            valuesMap = resolvedFirstArg;\n          }\n\n          if ((0, _isEmpty2[\"default\"])(valuesMap)) {\n            // maybe that empty valuesMap is ok if firstArg is a function?\n            // if this is the case, we probably should set this.Component = Component\n            throw new Error('formValues(): You must specify values to get as formValues(name1, name2, ...) or formValues({propName1: propPath1, ...}) or formValues((props) => name) or formValues((props) => ({propName1: propPath1, ...}))');\n          }\n\n          if ((0, _isEqual2[\"default\"])(valuesMap, this._valuesMap)) {\n            // no change in valuesMap\n            return;\n          }\n\n          this._valuesMap = valuesMap;\n          this.setComponent();\n        };\n\n        _proto.setComponent = function setComponent() {\n          var _this2 = this;\n\n          var formValuesSelector = function formValuesSelector(_, _ref2) {\n            var sectionPrefix = _ref2.sectionPrefix;\n            // Yes, we're only using connect() for listening to updates.\n            // The second argument needs to be there so that connect calls\n            // the selector when props change\n            var getValues = _this2.props._reduxForm.getValues;\n            var values = getValues();\n            return (0, _mapValues2[\"default\"])(_this2._valuesMap, function (path) {\n              return getIn(values, (0, _prefixName[\"default\"])(_this2.props, path));\n            });\n          };\n\n          this.Component = (0, _reactRedux.connect)(formValuesSelector, function () {\n            return {};\n          } // ignore dispatch\n          )(function (_ref3) {\n            var sectionPrefix = _ref3.sectionPrefix,\n                otherProps = (0, _objectWithoutPropertiesLoose2[\"default\"])(_ref3, [\"sectionPrefix\"]);\n            return _react[\"default\"].createElement(Component, otherProps);\n          });\n        };\n\n        return FormValues;\n      }(_react[\"default\"].Component);\n\n      return (0, _ReduxFormContext.withReduxForm)(FormValues);\n    };\n  };\n};\n\nvar _default = createValues;\nexports[\"default\"] = _default;","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormError = _interopRequireDefault(require(\"../selectors/getFormError\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormError[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormError = function createGetFormError(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".error\");\n    };\n  };\n};\n\nvar _default = createGetFormError;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormNames = _interopRequireDefault(require(\"../selectors/getFormNames\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormNames[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nfunction createGetFormNames(_ref) {\n  var getIn = _ref.getIn,\n      keys = _ref.keys;\n  return function (getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return keys(nonNullGetFormState(state));\n    };\n  };\n}\n\nvar _default = createGetFormNames;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormValues = _interopRequireDefault(require(\"../selectors/getFormValues\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormValues[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormValues = function createGetFormValues(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".values\");\n    };\n  };\n};\n\nvar _default = createGetFormValues;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormInitialValues = _interopRequireDefault(require(\"../selectors/getFormInitialValues\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormInitialValues[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormInitialValues = function createGetFormInitialValues(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".initial\");\n    };\n  };\n};\n\nvar _default = createGetFormInitialValues;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormSyncErrors = _interopRequireDefault(require(\"../selectors/getFormSyncErrors\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormSyncErrors[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormSyncErrors = function createGetFormSyncErrors(_ref) {\n  var getIn = _ref.getIn,\n      empty = _ref.empty;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".syncErrors\") || empty;\n    };\n  };\n};\n\nvar _default = createGetFormSyncErrors;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormMeta = _interopRequireDefault(require(\"../selectors/getFormMeta\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormMeta[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormMeta = function createGetFormMeta(_ref) {\n  var getIn = _ref.getIn,\n      empty = _ref.empty;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".fields\") || empty;\n    };\n  };\n};\n\nvar _default = createGetFormMeta;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormAsyncErrors = _interopRequireDefault(require(\"../selectors/getFormAsyncErrors\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormAsyncErrors[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormAsyncErrors = function createGetFormAsyncErrors(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".asyncErrors\");\n    };\n  };\n};\n\nvar _default = createGetFormAsyncErrors;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormSyncWarnings = _interopRequireDefault(require(\"../selectors/getFormSyncWarnings\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormSyncWarnings[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormSyncWarnings = function createGetFormSyncWarnings(_ref) {\n  var getIn = _ref.getIn,\n      empty = _ref.empty;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".syncWarnings\") || empty;\n    };\n  };\n};\n\nvar _default = createGetFormSyncWarnings;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _getFormSubmitErrors = _interopRequireDefault(require(\"../selectors/getFormSubmitErrors\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _getFormSubmitErrors[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createGetFormSubmitErrors = function createGetFormSubmitErrors(_ref) {\n  var getIn = _ref.getIn,\n      empty = _ref.empty;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return getIn(nonNullGetFormState(state), form + \".submitErrors\") || empty;\n    };\n  };\n};\n\nvar _default = createGetFormSubmitErrors;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isAsyncValidating = _interopRequireDefault(require(\"../selectors/isAsyncValidating\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isAsyncValidating[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createIsAsyncValidating = function createIsAsyncValidating(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return !!getIn(nonNullGetFormState(state), form + \".asyncValidating\");\n    };\n  };\n};\n\nvar _default = createIsAsyncValidating;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isDirty = _interopRequireDefault(require(\"../selectors/isDirty\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isDirty[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isPristine = _interopRequireDefault(require(\"./isPristine\"));\n\nvar createIsDirty = function createIsDirty(structure) {\n  return function (form, getFormState) {\n    var isPristine = (0, _isPristine[\"default\"])(structure)(form, getFormState);\n    return function (state) {\n      for (var _len = arguments.length, fields = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        fields[_key - 1] = arguments[_key];\n      }\n\n      return !isPristine.apply(void 0, [state].concat(fields));\n    };\n  };\n};\n\nvar _default = createIsDirty;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isInvalid = _interopRequireDefault(require(\"../selectors/isInvalid\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isInvalid[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isValid = _interopRequireDefault(require(\"./isValid\"));\n\nvar createIsInvalid = function createIsInvalid(structure) {\n  return function (form, getFormState) {\n    var isValid = (0, _isValid[\"default\"])(structure)(form, getFormState);\n    return function (state) {\n      return !isValid(state);\n    };\n  };\n};\n\nvar _default = createIsInvalid;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar getErrorKeys = function getErrorKeys(name, type) {\n  switch (type) {\n    case 'Field':\n      return [name, name + \"._error\"];\n\n    case 'FieldArray':\n      return [name + \"._error\"];\n\n    default:\n      throw new Error('Unknown field type');\n  }\n};\n\nvar createHasError = function createHasError(_ref) {\n  var getIn = _ref.getIn;\n\n  var hasError = function hasError(field, syncErrors, asyncErrors, submitErrors) {\n    if (!syncErrors && !asyncErrors && !submitErrors) {\n      return false;\n    }\n\n    var name = getIn(field, 'name');\n    var type = getIn(field, 'type');\n    return getErrorKeys(name, type).some(function (key) {\n      return getIn(syncErrors, key) || getIn(asyncErrors, key) || getIn(submitErrors, key);\n    });\n  };\n\n  return hasError;\n};\n\nvar _default = createHasError;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isPristine = _interopRequireDefault(require(\"../selectors/isPristine\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isPristine[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isValid = _interopRequireDefault(require(\"../selectors/isValid\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isValid[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isSubmitting = _interopRequireDefault(require(\"../selectors/isSubmitting\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _isSubmitting[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createIsSubmitting = function createIsSubmitting(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return !!getIn(nonNullGetFormState(state), form + \".submitting\");\n    };\n  };\n};\n\nvar _default = createIsSubmitting;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _hasSubmitSucceeded = _interopRequireDefault(require(\"../selectors/hasSubmitSucceeded\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _hasSubmitSucceeded[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createHasSubmitSucceeded = function createHasSubmitSucceeded(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return !!getIn(nonNullGetFormState(state), form + \".submitSucceeded\");\n    };\n  };\n};\n\nvar _default = createHasSubmitSucceeded;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _hasSubmitFailed = _interopRequireDefault(require(\"../selectors/hasSubmitFailed\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _hasSubmitFailed[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar createHasSubmitFailed = function createHasSubmitFailed(_ref) {\n  var getIn = _ref.getIn;\n  return function (form, getFormState) {\n    return function (state) {\n      var nonNullGetFormState = getFormState || function (state) {\n        return getIn(state, 'form');\n      };\n\n      return !!getIn(nonNullGetFormState(state), form + \".submitFailed\");\n    };\n  };\n};\n\nvar _default = createHasSubmitFailed;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createReduxForm = _interopRequireDefault(require(\"../createReduxForm\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createReduxForm[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _merge4 = _interopRequireDefault(require(\"lodash/merge\"));\n\nvar _mapValues2 = _interopRequireDefault(require(\"lodash/mapValues\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _hoistNonReactStatics = _interopRequireDefault(require(\"hoist-non-react-statics\"));\n\nvar _invariant = _interopRequireDefault(require(\"invariant\"));\n\nvar _isPromise = _interopRequireDefault(require(\"is-promise\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _redux = require(\"redux\");\n\nvar _actions = _interopRequireDefault(require(\"./actions\"));\n\nvar _asyncValidation = _interopRequireDefault(require(\"./asyncValidation\"));\n\nvar _defaultShouldAsyncValidate = _interopRequireDefault(require(\"./defaultShouldAsyncValidate\"));\n\nvar _defaultShouldValidate = _interopRequireDefault(require(\"./defaultShouldValidate\"));\n\nvar _defaultShouldError = _interopRequireDefault(require(\"./defaultShouldError\"));\n\nvar _defaultShouldWarn = _interopRequireDefault(require(\"./defaultShouldWarn\"));\n\nvar _silenceEvent = _interopRequireDefault(require(\"./events/silenceEvent\"));\n\nvar _silenceEvents = _interopRequireDefault(require(\"./events/silenceEvents\"));\n\nvar _generateValidator = _interopRequireDefault(require(\"./generateValidator\"));\n\nvar _handleSubmit = _interopRequireDefault(require(\"./handleSubmit\"));\n\nvar _isValid = _interopRequireDefault(require(\"./selectors/isValid\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar _getDisplayName = _interopRequireDefault(require(\"./util/getDisplayName\"));\n\nvar _isHotReloading = _interopRequireDefault(require(\"./util/isHotReloading\"));\n\nvar _ReduxFormContext = require(\"./ReduxFormContext\");\n\nvar isClassComponent = function isClassComponent(Component) {\n  return Boolean(Component && Component.prototype && typeof Component.prototype.isReactComponent === 'object');\n}; // extract field-specific actions\n\n\nvar arrayInsert = _actions[\"default\"].arrayInsert,\n    arrayMove = _actions[\"default\"].arrayMove,\n    arrayPop = _actions[\"default\"].arrayPop,\n    arrayPush = _actions[\"default\"].arrayPush,\n    arrayRemove = _actions[\"default\"].arrayRemove,\n    arrayRemoveAll = _actions[\"default\"].arrayRemoveAll,\n    arrayShift = _actions[\"default\"].arrayShift,\n    arraySplice = _actions[\"default\"].arraySplice,\n    arraySwap = _actions[\"default\"].arraySwap,\n    arrayUnshift = _actions[\"default\"].arrayUnshift,\n    blur = _actions[\"default\"].blur,\n    change = _actions[\"default\"].change,\n    focus = _actions[\"default\"].focus,\n    formActions = (0, _objectWithoutPropertiesLoose2[\"default\"])(_actions[\"default\"], [\"arrayInsert\", \"arrayMove\", \"arrayPop\", \"arrayPush\", \"arrayRemove\", \"arrayRemoveAll\", \"arrayShift\", \"arraySplice\", \"arraySwap\", \"arrayUnshift\", \"blur\", \"change\", \"focus\"]);\nvar arrayActions = {\n  arrayInsert: arrayInsert,\n  arrayMove: arrayMove,\n  arrayPop: arrayPop,\n  arrayPush: arrayPush,\n  arrayRemove: arrayRemove,\n  arrayRemoveAll: arrayRemoveAll,\n  arrayShift: arrayShift,\n  arraySplice: arraySplice,\n  arraySwap: arraySwap,\n  arrayUnshift: arrayUnshift\n};\nvar propsToNotUpdateFor = [].concat(Object.keys(_actions[\"default\"]), ['array', 'asyncErrors', 'initialValues', 'syncErrors', 'syncWarnings', 'values', 'registeredFields']);\n\nvar checkSubmit = function checkSubmit(submit) {\n  if (!submit || typeof submit !== 'function') {\n    throw new Error('You must either pass handleSubmit() an onSubmit function or pass onSubmit as a prop');\n  }\n\n  return submit;\n};\n\n/**\n * The decorator that is the main API to redux-form\n */\nvar createReduxForm = function createReduxForm(structure) {\n  var deepEqual = structure.deepEqual,\n      empty = structure.empty,\n      getIn = structure.getIn,\n      setIn = structure.setIn,\n      keys = structure.keys,\n      fromJS = structure.fromJS;\n  var isValid = (0, _isValid[\"default\"])(structure);\n  return function (initialConfig) {\n    var config = (0, _extends2[\"default\"])({\n      touchOnBlur: true,\n      touchOnChange: false,\n      persistentSubmitErrors: false,\n      destroyOnUnmount: true,\n      shouldAsyncValidate: _defaultShouldAsyncValidate[\"default\"],\n      shouldValidate: _defaultShouldValidate[\"default\"],\n      shouldError: _defaultShouldError[\"default\"],\n      shouldWarn: _defaultShouldWarn[\"default\"],\n      enableReinitialize: false,\n      keepDirtyOnReinitialize: false,\n      updateUnregisteredFields: false,\n      getFormState: function getFormState(state) {\n        return getIn(state, 'form');\n      },\n      pure: true,\n      forceUnregisterOnUnmount: false,\n      submitAsSideEffect: false\n    }, initialConfig);\n    return function (WrappedComponent) {\n      var Form =\n      /*#__PURE__*/\n      function (_React$Component) {\n        (0, _inheritsLoose2[\"default\"])(Form, _React$Component);\n\n        function Form() {\n          var _this;\n\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n          _this.wrapped = _react[\"default\"].createRef();\n          _this.destroyed = false;\n          _this.fieldCounts = {};\n          _this.fieldValidators = {};\n          _this.lastFieldValidatorKeys = [];\n          _this.fieldWarners = {};\n          _this.lastFieldWarnerKeys = [];\n          _this.innerOnSubmit = undefined;\n          _this.submitPromise = undefined;\n\n          _this.getValues = function () {\n            return _this.props.values;\n          };\n\n          _this.isValid = function () {\n            return _this.props.valid;\n          };\n\n          _this.isPristine = function () {\n            return _this.props.pristine;\n          };\n\n          _this.register = function (name, type, getValidator, getWarner) {\n            var lastCount = _this.fieldCounts[name];\n            var nextCount = (lastCount || 0) + 1;\n            _this.fieldCounts[name] = nextCount;\n\n            _this.props.registerField(name, type);\n\n            if (getValidator) {\n              _this.fieldValidators[name] = getValidator;\n            }\n\n            if (getWarner) {\n              _this.fieldWarners[name] = getWarner;\n            }\n          };\n\n          _this.unregister = function (name) {\n            var lastCount = _this.fieldCounts[name];\n            if (lastCount === 1) delete _this.fieldCounts[name];else if (lastCount != null) _this.fieldCounts[name] = lastCount - 1;\n\n            if (!_this.destroyed) {\n              var _this$props = _this.props,\n                  _destroyOnUnmount = _this$props.destroyOnUnmount,\n                  forceUnregisterOnUnmount = _this$props.forceUnregisterOnUnmount,\n                  unregisterField = _this$props.unregisterField;\n\n              if (_destroyOnUnmount || forceUnregisterOnUnmount) {\n                unregisterField(name, _destroyOnUnmount);\n\n                if (!_this.fieldCounts[name]) {\n                  delete _this.fieldValidators[name];\n                  delete _this.fieldWarners[name];\n                  _this.lastFieldValidatorKeys = _this.lastFieldValidatorKeys.filter(function (key) {\n                    return key !== name;\n                  });\n                }\n              } else {\n                unregisterField(name, false);\n              }\n            }\n          };\n\n          _this.getFieldList = function (options) {\n            var registeredFields = _this.props.registeredFields;\n            var list = [];\n\n            if (!registeredFields) {\n              return list;\n            }\n\n            var keySeq = keys(registeredFields);\n\n            if (options) {\n              if (options.excludeFieldArray) {\n                keySeq = keySeq.filter(function (name) {\n                  return getIn(registeredFields, \"['\" + name + \"'].type\") !== 'FieldArray';\n                });\n              }\n\n              if (options.excludeUnregistered) {\n                keySeq = keySeq.filter(function (name) {\n                  return getIn(registeredFields, \"['\" + name + \"'].count\") !== 0;\n                });\n              }\n            }\n\n            return fromJS(keySeq.reduce(function (acc, key) {\n              acc.push(key);\n              return acc;\n            }, list));\n          };\n\n          _this.getValidators = function () {\n            var validators = {};\n            Object.keys(_this.fieldValidators).forEach(function (name) {\n              var validator = _this.fieldValidators[name]();\n\n              if (validator) {\n                validators[name] = validator;\n              }\n            });\n            return validators;\n          };\n\n          _this.generateValidator = function () {\n            var validators = _this.getValidators();\n\n            return Object.keys(validators).length ? (0, _generateValidator[\"default\"])(validators, structure) : undefined;\n          };\n\n          _this.getWarners = function () {\n            var warners = {};\n            Object.keys(_this.fieldWarners).forEach(function (name) {\n              var warner = _this.fieldWarners[name]();\n\n              if (warner) {\n                warners[name] = warner;\n              }\n            });\n            return warners;\n          };\n\n          _this.generateWarner = function () {\n            var warners = _this.getWarners();\n\n            return Object.keys(warners).length ? (0, _generateValidator[\"default\"])(warners, structure) : undefined;\n          };\n\n          _this.asyncValidate = function (name, value, trigger) {\n            var _this$props2 = _this.props,\n                asyncBlurFields = _this$props2.asyncBlurFields,\n                asyncChangeFields = _this$props2.asyncChangeFields,\n                asyncErrors = _this$props2.asyncErrors,\n                asyncValidate = _this$props2.asyncValidate,\n                dispatch = _this$props2.dispatch,\n                initialized = _this$props2.initialized,\n                pristine = _this$props2.pristine,\n                shouldAsyncValidate = _this$props2.shouldAsyncValidate,\n                startAsyncValidation = _this$props2.startAsyncValidation,\n                stopAsyncValidation = _this$props2.stopAsyncValidation,\n                syncErrors = _this$props2.syncErrors,\n                values = _this$props2.values;\n            var submitting = !name;\n\n            var fieldNeedsValidation = function fieldNeedsValidation() {\n              var fieldNeedsValidationForBlur = asyncBlurFields && name && ~asyncBlurFields.indexOf(name.replace(/\\[[0-9]+\\]/g, '[]'));\n              var fieldNeedsValidationForChange = asyncChangeFields && name && ~asyncChangeFields.indexOf(name.replace(/\\[[0-9]+\\]/g, '[]'));\n              var asyncValidateByDefault = !(asyncBlurFields || asyncChangeFields);\n              return submitting || asyncValidateByDefault || (trigger === 'blur' ? fieldNeedsValidationForBlur : fieldNeedsValidationForChange);\n            };\n\n            if (asyncValidate) {\n              var valuesToValidate = submitting ? values : setIn(values, name, value);\n              var syncValidationPasses = submitting || !getIn(syncErrors, name);\n\n              if (fieldNeedsValidation() && shouldAsyncValidate({\n                asyncErrors: asyncErrors,\n                initialized: initialized,\n                trigger: submitting ? 'submit' : trigger,\n                blurredField: name,\n                pristine: pristine,\n                syncValidationPasses: syncValidationPasses\n              })) {\n                return (0, _asyncValidation[\"default\"])(function () {\n                  return asyncValidate(valuesToValidate, dispatch, _this.props, name);\n                }, startAsyncValidation, stopAsyncValidation, name);\n              }\n            }\n          };\n\n          _this.submitCompleted = function (result) {\n            delete _this.submitPromise;\n            return result;\n          };\n\n          _this.submitFailed = function (error) {\n            delete _this.submitPromise;\n            throw error;\n          };\n\n          _this.listenToSubmit = function (promise) {\n            if (!(0, _isPromise[\"default\"])(promise)) {\n              return promise;\n            }\n\n            _this.submitPromise = promise;\n            return promise.then(_this.submitCompleted, _this.submitFailed);\n          };\n\n          _this.submit = function (submitOrEvent) {\n            var _this$props3 = _this.props,\n                onSubmit = _this$props3.onSubmit,\n                blur = _this$props3.blur,\n                change = _this$props3.change,\n                dispatch = _this$props3.dispatch;\n\n            if (!submitOrEvent || (0, _silenceEvent[\"default\"])(submitOrEvent)) {\n              // submitOrEvent is an event: fire submit if not already submitting\n              if (!_this.submitPromise) {\n                // avoid recursive stack trace if use Form with onSubmit as handleSubmit\n                if (_this.innerOnSubmit && _this.innerOnSubmit !== _this.submit) {\n                  // will call \"submitOrEvent is the submit function\" block below\n                  return _this.innerOnSubmit();\n                } else {\n                  return _this.listenToSubmit((0, _handleSubmit[\"default\"])(checkSubmit(onSubmit), (0, _extends2[\"default\"])({}, _this.props, (0, _redux.bindActionCreators)({\n                    blur: blur,\n                    change: change\n                  }, dispatch)), _this.props.validExceptSubmit, _this.asyncValidate, _this.getFieldList({\n                    excludeFieldArray: true,\n                    excludeUnregistered: true\n                  })));\n                }\n              }\n            } else {\n              // submitOrEvent is the submit function: return deferred submit thunk\n              return (0, _silenceEvents[\"default\"])(function () {\n                return !_this.submitPromise && _this.listenToSubmit((0, _handleSubmit[\"default\"])(checkSubmit(submitOrEvent), (0, _extends2[\"default\"])({}, _this.props, (0, _redux.bindActionCreators)({\n                  blur: blur,\n                  change: change\n                }, dispatch)), _this.props.validExceptSubmit, _this.asyncValidate, _this.getFieldList({\n                  excludeFieldArray: true,\n                  excludeUnregistered: true\n                })));\n              });\n            }\n          };\n\n          _this.reset = function () {\n            return _this.props.reset();\n          };\n\n          return _this;\n        }\n\n        var _proto = Form.prototype;\n\n        _proto.initIfNeeded = function initIfNeeded(nextProps) {\n          var enableReinitialize = this.props.enableReinitialize;\n\n          if (nextProps) {\n            if ((enableReinitialize || !nextProps.initialized) && !deepEqual(this.props.initialValues, nextProps.initialValues)) {\n              var _keepDirty = nextProps.initialized && this.props.keepDirtyOnReinitialize;\n\n              this.props.initialize(nextProps.initialValues, _keepDirty, {\n                keepValues: nextProps.keepValues,\n                lastInitialValues: this.props.initialValues,\n                updateUnregisteredFields: nextProps.updateUnregisteredFields\n              });\n            }\n          } else if (this.props.initialValues && (!this.props.initialized || enableReinitialize)) {\n            this.props.initialize(this.props.initialValues, this.props.keepDirtyOnReinitialize, {\n              keepValues: this.props.keepValues,\n              updateUnregisteredFields: this.props.updateUnregisteredFields\n            });\n          }\n        };\n\n        _proto.updateSyncErrorsIfNeeded = function updateSyncErrorsIfNeeded(nextSyncErrors, nextError, lastSyncErrors) {\n          var _this$props4 = this.props,\n              error = _this$props4.error,\n              updateSyncErrors = _this$props4.updateSyncErrors;\n          var noErrors = (!lastSyncErrors || !Object.keys(lastSyncErrors).length) && !error;\n          var nextNoErrors = (!nextSyncErrors || !Object.keys(nextSyncErrors).length) && !nextError;\n\n          if (!(noErrors && nextNoErrors) && (!_plain[\"default\"].deepEqual(lastSyncErrors, nextSyncErrors) || !_plain[\"default\"].deepEqual(error, nextError))) {\n            updateSyncErrors(nextSyncErrors, nextError);\n          }\n        };\n\n        _proto.clearSubmitPromiseIfNeeded = function clearSubmitPromiseIfNeeded(nextProps) {\n          var submitting = this.props.submitting;\n\n          if (this.submitPromise && submitting && !nextProps.submitting) {\n            delete this.submitPromise;\n          }\n        };\n\n        _proto.submitIfNeeded = function submitIfNeeded(nextProps) {\n          var _this$props5 = this.props,\n              clearSubmit = _this$props5.clearSubmit,\n              triggerSubmit = _this$props5.triggerSubmit;\n\n          if (!triggerSubmit && nextProps.triggerSubmit) {\n            clearSubmit();\n            this.submit();\n          }\n        };\n\n        _proto.shouldErrorFunction = function shouldErrorFunction() {\n          var _this$props6 = this.props,\n              shouldValidate = _this$props6.shouldValidate,\n              shouldError = _this$props6.shouldError;\n          var shouldValidateOverridden = shouldValidate !== _defaultShouldValidate[\"default\"];\n          var shouldErrorOverridden = shouldError !== _defaultShouldError[\"default\"];\n          return shouldValidateOverridden && !shouldErrorOverridden ? shouldValidate : shouldError;\n        };\n\n        _proto.validateIfNeeded = function validateIfNeeded(nextProps) {\n          var _this$props7 = this.props,\n              validate = _this$props7.validate,\n              values = _this$props7.values;\n          var shouldError = this.shouldErrorFunction();\n          var fieldLevelValidate = this.generateValidator();\n\n          if (validate || fieldLevelValidate) {\n            var initialRender = nextProps === undefined;\n            var fieldValidatorKeys = Object.keys(this.getValidators());\n            var validateParams = {\n              values: values,\n              nextProps: nextProps,\n              props: this.props,\n              initialRender: initialRender,\n              lastFieldValidatorKeys: this.lastFieldValidatorKeys,\n              fieldValidatorKeys: fieldValidatorKeys,\n              structure: structure\n            };\n\n            if (shouldError(validateParams)) {\n              var propsToValidate = initialRender || !nextProps ? this.props : nextProps;\n\n              var _merge2 = (0, _merge4[\"default\"])(validate ? validate(propsToValidate.values, propsToValidate) || {} : {}, fieldLevelValidate ? fieldLevelValidate(propsToValidate.values, propsToValidate) || {} : {}),\n                  _error = _merge2._error,\n                  nextSyncErrors = (0, _objectWithoutPropertiesLoose2[\"default\"])(_merge2, [\"_error\"]);\n\n              this.lastFieldValidatorKeys = fieldValidatorKeys;\n              this.updateSyncErrorsIfNeeded(nextSyncErrors, _error, propsToValidate.syncErrors);\n            }\n          } else {\n            this.lastFieldValidatorKeys = [];\n          }\n        };\n\n        _proto.updateSyncWarningsIfNeeded = function updateSyncWarningsIfNeeded(nextSyncWarnings, nextWarning, lastSyncWarnings) {\n          var _this$props8 = this.props,\n              warning = _this$props8.warning,\n              syncWarnings = _this$props8.syncWarnings,\n              updateSyncWarnings = _this$props8.updateSyncWarnings;\n          var noWarnings = (!syncWarnings || !Object.keys(syncWarnings).length) && !warning;\n          var nextNoWarnings = (!nextSyncWarnings || !Object.keys(nextSyncWarnings).length) && !nextWarning;\n\n          if (!(noWarnings && nextNoWarnings) && (!_plain[\"default\"].deepEqual(lastSyncWarnings, nextSyncWarnings) || !_plain[\"default\"].deepEqual(warning, nextWarning))) {\n            updateSyncWarnings(nextSyncWarnings, nextWarning);\n          }\n        };\n\n        _proto.shouldWarnFunction = function shouldWarnFunction() {\n          var _this$props9 = this.props,\n              shouldValidate = _this$props9.shouldValidate,\n              shouldWarn = _this$props9.shouldWarn;\n          var shouldValidateOverridden = shouldValidate !== _defaultShouldValidate[\"default\"];\n          var shouldWarnOverridden = shouldWarn !== _defaultShouldWarn[\"default\"];\n          return shouldValidateOverridden && !shouldWarnOverridden ? shouldValidate : shouldWarn;\n        };\n\n        _proto.warnIfNeeded = function warnIfNeeded(nextProps) {\n          var _this$props10 = this.props,\n              warn = _this$props10.warn,\n              values = _this$props10.values;\n          var shouldWarn = this.shouldWarnFunction();\n          var fieldLevelWarn = this.generateWarner();\n\n          if (warn || fieldLevelWarn) {\n            var initialRender = nextProps === undefined;\n            var fieldWarnerKeys = Object.keys(this.getWarners());\n            var validateParams = {\n              values: values,\n              nextProps: nextProps,\n              props: this.props,\n              initialRender: initialRender,\n              lastFieldValidatorKeys: this.lastFieldWarnerKeys,\n              fieldValidatorKeys: fieldWarnerKeys,\n              structure: structure\n            };\n\n            if (shouldWarn(validateParams)) {\n              var propsToWarn = initialRender || !nextProps ? this.props : nextProps;\n\n              var _merge3 = (0, _merge4[\"default\"])(warn ? warn(propsToWarn.values, propsToWarn) : {}, fieldLevelWarn ? fieldLevelWarn(propsToWarn.values, propsToWarn) : {}),\n                  _warning = _merge3._warning,\n                  nextSyncWarnings = (0, _objectWithoutPropertiesLoose2[\"default\"])(_merge3, [\"_warning\"]);\n\n              this.lastFieldWarnerKeys = fieldWarnerKeys;\n              this.updateSyncWarningsIfNeeded(nextSyncWarnings, _warning, propsToWarn.syncWarnings);\n            }\n          }\n        };\n\n        _proto.componentWillMount = function componentWillMount() {\n          if (!(0, _isHotReloading[\"default\"])()) {\n            this.initIfNeeded();\n            this.validateIfNeeded();\n            this.warnIfNeeded();\n          }\n\n          (0, _invariant[\"default\"])(this.props.shouldValidate, 'shouldValidate() is deprecated and will be removed in v9.0.0. Use shouldWarn() or shouldError() instead.');\n        };\n\n        _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n          this.initIfNeeded(nextProps);\n          this.validateIfNeeded(nextProps);\n          this.warnIfNeeded(nextProps);\n          this.clearSubmitPromiseIfNeeded(nextProps);\n          this.submitIfNeeded(nextProps);\n          var onChange = nextProps.onChange,\n              values = nextProps.values,\n              dispatch = nextProps.dispatch;\n\n          if (onChange && !deepEqual(values, this.props.values)) {\n            onChange(values, dispatch, nextProps, this.props.values);\n          }\n        };\n\n        _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n          var _this2 = this;\n\n          if (!this.props.pure) return true;\n          var _config$immutableProp = config.immutableProps,\n              immutableProps = _config$immutableProp === void 0 ? [] : _config$immutableProp; // if we have children, we MUST update in React 16\n          // https://twitter.com/erikras/status/915866544558788608\n\n          return !!(this.props.children || nextProps.children || Object.keys(nextProps).some(function (prop) {\n            // useful to debug rerenders\n            // if (!plain.deepEqual(this.props[ prop ], nextProps[ prop ])) {\n            //   console.info(prop, 'changed', this.props[ prop ], '==>', nextProps[ prop ])\n            // }\n            if (~immutableProps.indexOf(prop)) {\n              return _this2.props[prop] !== nextProps[prop];\n            }\n\n            return !~propsToNotUpdateFor.indexOf(prop) && !deepEqual(_this2.props[prop], nextProps[prop]);\n          }));\n        };\n\n        _proto.componentDidMount = function componentDidMount() {\n          if (!(0, _isHotReloading[\"default\"])()) {\n            this.initIfNeeded(this.props);\n            this.validateIfNeeded();\n            this.warnIfNeeded();\n          }\n\n          (0, _invariant[\"default\"])(this.props.shouldValidate, 'shouldValidate() is deprecated and will be removed in v9.0.0. Use shouldWarn() or shouldError() instead.');\n        };\n\n        _proto.componentWillUnmount = function componentWillUnmount() {\n          var _this$props11 = this.props,\n              destroyOnUnmount = _this$props11.destroyOnUnmount,\n              destroy = _this$props11.destroy;\n\n          if (destroyOnUnmount && !(0, _isHotReloading[\"default\"])()) {\n            this.destroyed = true;\n            destroy();\n          }\n        };\n\n        _proto.render = function render() {\n          var _ref,\n              _this3 = this;\n\n          // remove some redux-form config-only props\n\n          /* eslint-disable no-unused-vars */\n          var _this$props12 = this.props,\n              anyTouched = _this$props12.anyTouched,\n              array = _this$props12.array,\n              arrayInsert = _this$props12.arrayInsert,\n              arrayMove = _this$props12.arrayMove,\n              arrayPop = _this$props12.arrayPop,\n              arrayPush = _this$props12.arrayPush,\n              arrayRemove = _this$props12.arrayRemove,\n              arrayRemoveAll = _this$props12.arrayRemoveAll,\n              arrayShift = _this$props12.arrayShift,\n              arraySplice = _this$props12.arraySplice,\n              arraySwap = _this$props12.arraySwap,\n              arrayUnshift = _this$props12.arrayUnshift,\n              asyncErrors = _this$props12.asyncErrors,\n              asyncValidate = _this$props12.asyncValidate,\n              asyncValidating = _this$props12.asyncValidating,\n              blur = _this$props12.blur,\n              change = _this$props12.change,\n              clearSubmit = _this$props12.clearSubmit,\n              destroy = _this$props12.destroy,\n              destroyOnUnmount = _this$props12.destroyOnUnmount,\n              forceUnregisterOnUnmount = _this$props12.forceUnregisterOnUnmount,\n              dirty = _this$props12.dirty,\n              dispatch = _this$props12.dispatch,\n              enableReinitialize = _this$props12.enableReinitialize,\n              error = _this$props12.error,\n              focus = _this$props12.focus,\n              form = _this$props12.form,\n              getFormState = _this$props12.getFormState,\n              immutableProps = _this$props12.immutableProps,\n              initialize = _this$props12.initialize,\n              initialized = _this$props12.initialized,\n              initialValues = _this$props12.initialValues,\n              invalid = _this$props12.invalid,\n              keepDirtyOnReinitialize = _this$props12.keepDirtyOnReinitialize,\n              keepValues = _this$props12.keepValues,\n              updateUnregisteredFields = _this$props12.updateUnregisteredFields,\n              pristine = _this$props12.pristine,\n              propNamespace = _this$props12.propNamespace,\n              registeredFields = _this$props12.registeredFields,\n              registerField = _this$props12.registerField,\n              reset = _this$props12.reset,\n              resetSection = _this$props12.resetSection,\n              setSubmitFailed = _this$props12.setSubmitFailed,\n              setSubmitSucceeded = _this$props12.setSubmitSucceeded,\n              shouldAsyncValidate = _this$props12.shouldAsyncValidate,\n              shouldValidate = _this$props12.shouldValidate,\n              shouldError = _this$props12.shouldError,\n              shouldWarn = _this$props12.shouldWarn,\n              startAsyncValidation = _this$props12.startAsyncValidation,\n              startSubmit = _this$props12.startSubmit,\n              stopAsyncValidation = _this$props12.stopAsyncValidation,\n              stopSubmit = _this$props12.stopSubmit,\n              submitAsSideEffect = _this$props12.submitAsSideEffect,\n              submitting = _this$props12.submitting,\n              submitFailed = _this$props12.submitFailed,\n              submitSucceeded = _this$props12.submitSucceeded,\n              touch = _this$props12.touch,\n              touchOnBlur = _this$props12.touchOnBlur,\n              touchOnChange = _this$props12.touchOnChange,\n              persistentSubmitErrors = _this$props12.persistentSubmitErrors,\n              syncErrors = _this$props12.syncErrors,\n              syncWarnings = _this$props12.syncWarnings,\n              unregisterField = _this$props12.unregisterField,\n              untouch = _this$props12.untouch,\n              updateSyncErrors = _this$props12.updateSyncErrors,\n              updateSyncWarnings = _this$props12.updateSyncWarnings,\n              valid = _this$props12.valid,\n              validExceptSubmit = _this$props12.validExceptSubmit,\n              values = _this$props12.values,\n              warning = _this$props12.warning,\n              rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props12, [\"anyTouched\", \"array\", \"arrayInsert\", \"arrayMove\", \"arrayPop\", \"arrayPush\", \"arrayRemove\", \"arrayRemoveAll\", \"arrayShift\", \"arraySplice\", \"arraySwap\", \"arrayUnshift\", \"asyncErrors\", \"asyncValidate\", \"asyncValidating\", \"blur\", \"change\", \"clearSubmit\", \"destroy\", \"destroyOnUnmount\", \"forceUnregisterOnUnmount\", \"dirty\", \"dispatch\", \"enableReinitialize\", \"error\", \"focus\", \"form\", \"getFormState\", \"immutableProps\", \"initialize\", \"initialized\", \"initialValues\", \"invalid\", \"keepDirtyOnReinitialize\", \"keepValues\", \"updateUnregisteredFields\", \"pristine\", \"propNamespace\", \"registeredFields\", \"registerField\", \"reset\", \"resetSection\", \"setSubmitFailed\", \"setSubmitSucceeded\", \"shouldAsyncValidate\", \"shouldValidate\", \"shouldError\", \"shouldWarn\", \"startAsyncValidation\", \"startSubmit\", \"stopAsyncValidation\", \"stopSubmit\", \"submitAsSideEffect\", \"submitting\", \"submitFailed\", \"submitSucceeded\", \"touch\", \"touchOnBlur\", \"touchOnChange\", \"persistentSubmitErrors\", \"syncErrors\", \"syncWarnings\", \"unregisterField\", \"untouch\", \"updateSyncErrors\", \"updateSyncWarnings\", \"valid\", \"validExceptSubmit\", \"values\", \"warning\"]);\n          /* eslint-enable no-unused-vars */\n\n          var reduxFormProps = (0, _extends2[\"default\"])({\n            array: array,\n            anyTouched: anyTouched,\n            asyncValidate: this.asyncValidate,\n            asyncValidating: asyncValidating\n          }, (0, _redux.bindActionCreators)({\n            blur: blur,\n            change: change\n          }, dispatch), {\n            clearSubmit: clearSubmit,\n            destroy: destroy,\n            dirty: dirty,\n            dispatch: dispatch,\n            error: error,\n            form: form,\n            handleSubmit: this.submit,\n            initialize: initialize,\n            initialized: initialized,\n            initialValues: initialValues,\n            invalid: invalid,\n            pristine: pristine,\n            reset: reset,\n            resetSection: resetSection,\n            submitting: submitting,\n            submitAsSideEffect: submitAsSideEffect,\n            submitFailed: submitFailed,\n            submitSucceeded: submitSucceeded,\n            touch: touch,\n            untouch: untouch,\n            valid: valid,\n            warning: warning\n          });\n          var propsToPass = (0, _extends2[\"default\"])({}, propNamespace ? (_ref = {}, _ref[propNamespace] = reduxFormProps, _ref) : reduxFormProps, rest);\n\n          if (isClassComponent(WrappedComponent)) {\n            ;\n            propsToPass.ref = this.wrapped;\n          }\n\n          var _reduxForm = (0, _extends2[\"default\"])({}, this.props, {\n            getFormState: function getFormState(state) {\n              return getIn(_this3.props.getFormState(state), _this3.props.form);\n            },\n            asyncValidate: this.asyncValidate,\n            getValues: this.getValues,\n            sectionPrefix: undefined,\n            register: this.register,\n            unregister: this.unregister,\n            registerInnerOnSubmit: function registerInnerOnSubmit(innerOnSubmit) {\n              return _this3.innerOnSubmit = innerOnSubmit;\n            }\n          });\n\n          return (0, _react.createElement)(_ReduxFormContext.ReduxFormContext.Provider, {\n            value: _reduxForm,\n            children: (0, _react.createElement)(WrappedComponent, propsToPass)\n          });\n        };\n\n        return Form;\n      }(_react[\"default\"].Component);\n\n      Form.displayName = \"Form(\" + (0, _getDisplayName[\"default\"])(WrappedComponent) + \")\";\n      Form.WrappedComponent = WrappedComponent;\n      Form.propTypes = {\n        destroyOnUnmount: _propTypes[\"default\"].bool,\n        forceUnregisterOnUnmount: _propTypes[\"default\"].bool,\n        form: _propTypes[\"default\"].string.isRequired,\n        immutableProps: _propTypes[\"default\"].arrayOf(_propTypes[\"default\"].string),\n        initialValues: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].array, _propTypes[\"default\"].object]),\n        getFormState: _propTypes[\"default\"].func,\n        onSubmitFail: _propTypes[\"default\"].func,\n        onSubmitSuccess: _propTypes[\"default\"].func,\n        propNamespace: _propTypes[\"default\"].string,\n        validate: _propTypes[\"default\"].func,\n        warn: _propTypes[\"default\"].func,\n        touchOnBlur: _propTypes[\"default\"].bool,\n        touchOnChange: _propTypes[\"default\"].bool,\n        triggerSubmit: _propTypes[\"default\"].bool,\n        persistentSubmitErrors: _propTypes[\"default\"].bool,\n        registeredFields: _propTypes[\"default\"].any\n      };\n      var connector = (0, _reactRedux.connect)(function (state, props) {\n        var form = props.form,\n            getFormState = props.getFormState,\n            initialValues = props.initialValues,\n            enableReinitialize = props.enableReinitialize,\n            keepDirtyOnReinitialize = props.keepDirtyOnReinitialize;\n        var formState = getIn(getFormState(state) || empty, form) || empty;\n        var stateInitial = getIn(formState, 'initial');\n        var initialized = !!stateInitial;\n        var shouldUpdateInitialValues = enableReinitialize && initialized && !deepEqual(initialValues, stateInitial);\n        var shouldResetValues = shouldUpdateInitialValues && !keepDirtyOnReinitialize;\n        var initial = initialValues || stateInitial || empty;\n\n        if (!shouldUpdateInitialValues) {\n          initial = stateInitial || empty;\n        }\n\n        var values = getIn(formState, 'values') || initial;\n\n        if (shouldResetValues) {\n          values = initial;\n        }\n\n        var pristine = shouldResetValues || deepEqual(initial, values);\n        var asyncErrors = getIn(formState, 'asyncErrors');\n\n        var syncErrors = getIn(formState, 'syncErrors') || _plain[\"default\"].empty;\n\n        var syncWarnings = getIn(formState, 'syncWarnings') || _plain[\"default\"].empty;\n\n        var registeredFields = getIn(formState, 'registeredFields');\n        var valid = isValid(form, getFormState, false)(state);\n        var validExceptSubmit = isValid(form, getFormState, true)(state);\n        var anyTouched = !!getIn(formState, 'anyTouched');\n        var submitting = !!getIn(formState, 'submitting');\n        var submitFailed = !!getIn(formState, 'submitFailed');\n        var submitSucceeded = !!getIn(formState, 'submitSucceeded');\n        var error = getIn(formState, 'error');\n        var warning = getIn(formState, 'warning');\n        var triggerSubmit = getIn(formState, 'triggerSubmit');\n        return {\n          anyTouched: anyTouched,\n          asyncErrors: asyncErrors,\n          asyncValidating: getIn(formState, 'asyncValidating') || false,\n          dirty: !pristine,\n          error: error,\n          initialized: initialized,\n          invalid: !valid,\n          pristine: pristine,\n          registeredFields: registeredFields,\n          submitting: submitting,\n          submitFailed: submitFailed,\n          submitSucceeded: submitSucceeded,\n          syncErrors: syncErrors,\n          syncWarnings: syncWarnings,\n          triggerSubmit: triggerSubmit,\n          values: values,\n          valid: valid,\n          validExceptSubmit: validExceptSubmit,\n          warning: warning\n        };\n      }, function (dispatch, initialProps) {\n        var bindForm = function bindForm(actionCreator) {\n          return actionCreator.bind(null, initialProps.form);\n        }; // Bind the first parameter on `props.form`\n\n\n        var boundFormACs = (0, _mapValues2[\"default\"])(formActions, bindForm);\n        var boundArrayACs = (0, _mapValues2[\"default\"])(arrayActions, bindForm);\n\n        var boundBlur = function boundBlur(field, value) {\n          return blur(initialProps.form, field, value, !!initialProps.touchOnBlur);\n        };\n\n        var boundChange = function boundChange(field, value) {\n          return change(initialProps.form, field, value, !!initialProps.touchOnChange, !!initialProps.persistentSubmitErrors);\n        };\n\n        var boundFocus = bindForm(focus); // Wrap action creators with `dispatch`\n\n        var connectedFormACs = (0, _redux.bindActionCreators)(boundFormACs, dispatch);\n        var connectedArrayACs = {\n          insert: (0, _redux.bindActionCreators)(boundArrayACs.arrayInsert, dispatch),\n          move: (0, _redux.bindActionCreators)(boundArrayACs.arrayMove, dispatch),\n          pop: (0, _redux.bindActionCreators)(boundArrayACs.arrayPop, dispatch),\n          push: (0, _redux.bindActionCreators)(boundArrayACs.arrayPush, dispatch),\n          remove: (0, _redux.bindActionCreators)(boundArrayACs.arrayRemove, dispatch),\n          removeAll: (0, _redux.bindActionCreators)(boundArrayACs.arrayRemoveAll, dispatch),\n          shift: (0, _redux.bindActionCreators)(boundArrayACs.arrayShift, dispatch),\n          splice: (0, _redux.bindActionCreators)(boundArrayACs.arraySplice, dispatch),\n          swap: (0, _redux.bindActionCreators)(boundArrayACs.arraySwap, dispatch),\n          unshift: (0, _redux.bindActionCreators)(boundArrayACs.arrayUnshift, dispatch)\n        };\n        var computedActions = (0, _extends2[\"default\"])({}, connectedFormACs, boundArrayACs, {\n          blur: boundBlur,\n          change: boundChange,\n          array: connectedArrayACs,\n          focus: boundFocus,\n          dispatch: dispatch\n        });\n        return function () {\n          return computedActions;\n        };\n      }, undefined, {\n        forwardRef: true\n      });\n      var ConnectedForm = (0, _hoistNonReactStatics[\"default\"])(connector(Form), WrappedComponent);\n      ConnectedForm.defaultProps = config; // build outer component to expose instance api\n\n      var ReduxForm =\n      /*#__PURE__*/\n      function (_React$Component2) {\n        (0, _inheritsLoose2[\"default\"])(ReduxForm, _React$Component2);\n\n        function ReduxForm() {\n          var _this4;\n\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n\n          _this4 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;\n          _this4.ref = _react[\"default\"].createRef();\n          return _this4;\n        }\n\n        var _proto2 = ReduxForm.prototype;\n\n        _proto2.submit = function submit() {\n          return this.ref.current && this.ref.current.submit();\n        };\n\n        _proto2.reset = function reset() {\n          if (this.ref) {\n            this.ref.current.reset();\n          }\n        };\n\n        _proto2.render = function render() {\n          var _this$props13 = this.props,\n              initialValues = _this$props13.initialValues,\n              rest = (0, _objectWithoutPropertiesLoose2[\"default\"])(_this$props13, [\"initialValues\"]);\n          return (0, _react.createElement)(ConnectedForm, (0, _extends2[\"default\"])({}, rest, {\n            ref: this.ref,\n            // convert initialValues if need to\n            initialValues: fromJS(initialValues)\n          }));\n        };\n\n        (0, _createClass2[\"default\"])(ReduxForm, [{\n          key: \"valid\",\n          get: function get() {\n            return !!(this.ref.current && this.ref.current.isValid());\n          }\n        }, {\n          key: \"invalid\",\n          get: function get() {\n            return !this.valid;\n          }\n        }, {\n          key: \"pristine\",\n          get: function get() {\n            return !!(this.ref.current && this.ref.current.isPristine());\n          }\n        }, {\n          key: \"dirty\",\n          get: function get() {\n            return !this.pristine;\n          }\n        }, {\n          key: \"values\",\n          get: function get() {\n            return this.ref.current ? this.ref.current.getValues() : empty;\n          }\n        }, {\n          key: \"fieldList\",\n          get: function get() {\n            // mainly provided for testing\n            return this.ref.current ? this.ref.current.getFieldList() : [];\n          }\n        }, {\n          key: \"wrappedInstance\",\n          get: function get() {\n            // for testing\n            return this.ref.current && this.ref.current.wrapped.current;\n          }\n        }]);\n        return ReduxForm;\n      }(_react[\"default\"].Component);\n\n      (0, _reactLifecyclesCompat.polyfill)(ReduxForm);\n      var WithContext = (0, _hoistNonReactStatics[\"default\"])((0, _ReduxFormContext.withReduxForm)(ReduxForm), WrappedComponent);\n      WithContext.defaultProps = config;\n      return WithContext;\n    };\n  };\n};\n\nvar _default = createReduxForm;\nexports[\"default\"] = _default;","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _isPromise = _interopRequireDefault(require(\"is-promise\"));\n\nvar asyncValidation = function asyncValidation(fn, start, stop, field) {\n  start(field);\n  var promise = fn();\n\n  if (!(0, _isPromise[\"default\"])(promise)) {\n    throw new Error('asyncValidate function passed to reduxForm must return a promise');\n  }\n\n  var handleErrors = function handleErrors(rejected) {\n    return function (errors) {\n      if (rejected) {\n        if (errors && Object.keys(errors).length) {\n          stop(errors);\n          return errors;\n        } else {\n          stop();\n          throw new Error('Asynchronous validation promise was rejected without errors.');\n        }\n      }\n\n      stop();\n      return Promise.resolve();\n    };\n  };\n\n  return promise.then(handleErrors(false), handleErrors(true));\n};\n\nvar _default = asyncValidation;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _silenceEvent = _interopRequireDefault(require(\"./silenceEvent\"));\n\nvar silenceEvents = function silenceEvents(fn) {\n  return function (event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return (0, _silenceEvent[\"default\"])(event) ? fn.apply(void 0, args) : fn.apply(void 0, [event].concat(args));\n  };\n};\n\nvar _default = silenceEvents;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar toArray = function toArray(value) {\n  return Array.isArray(value) ? value : [value];\n};\n\nvar getError = function getError(value, values, props, validators, name) {\n  var array = toArray(validators);\n\n  for (var i = 0; i < array.length; i++) {\n    var error = array[i](value, values, props, name);\n\n    if (error) {\n      return error;\n    }\n  }\n};\n\nvar generateValidator = function generateValidator(validators, _ref) {\n  var getIn = _ref.getIn;\n  return function (values, props) {\n    var errors = {};\n    Object.keys(validators).forEach(function (name) {\n      var value = getIn(values, name);\n      var error = getError(value, values, props, validators[name], name);\n\n      if (error) {\n        errors = _plain[\"default\"].setIn(errors, name, error);\n      }\n    });\n    return errors;\n  };\n};\n\nvar _default = generateValidator;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _isPromise = _interopRequireDefault(require(\"is-promise\"));\n\nvar _SubmissionError = _interopRequireDefault(require(\"./SubmissionError\"));\n\nvar isSubmissionError = function isSubmissionError(error) {\n  return error && error.name === _SubmissionError[\"default\"].name;\n};\n\nvar mergeErrors = function mergeErrors(_ref) {\n  var asyncErrors = _ref.asyncErrors,\n      syncErrors = _ref.syncErrors;\n  return asyncErrors && typeof asyncErrors.merge === 'function' ? asyncErrors.merge(syncErrors).toJS() : (0, _extends2[\"default\"])({}, asyncErrors, syncErrors);\n};\n\nvar isImmutableList;\n\ntry {\n  // ImmutableJS isList implementation if available\n  // eslint-disable-next-line import/no-extraneous-dependencies\n  var _require = require('immutable'),\n      List = _require.List;\n\n  isImmutableList = List.isList;\n} catch (err) {\n  isImmutableList = function isImmutableList(maybeList) {\n    return false;\n  };\n} // fields may be an Immutable List which cannot be spread\n// convert the fields to an array if necessary\n\n\nvar makeFieldsArray = function makeFieldsArray(fields) {\n  return isImmutableList(fields) ? fields.toArray() : fields;\n};\n\nvar executeSubmit = function executeSubmit(submit, fields, props) {\n  var dispatch = props.dispatch,\n      submitAsSideEffect = props.submitAsSideEffect,\n      onSubmitFail = props.onSubmitFail,\n      onSubmitSuccess = props.onSubmitSuccess,\n      startSubmit = props.startSubmit,\n      stopSubmit = props.stopSubmit,\n      setSubmitFailed = props.setSubmitFailed,\n      setSubmitSucceeded = props.setSubmitSucceeded,\n      values = props.values;\n  fields = makeFieldsArray(fields);\n  var result;\n\n  try {\n    result = submit(values, dispatch, props);\n  } catch (submitError) {\n    var error = isSubmissionError(submitError) ? submitError.errors : undefined;\n    stopSubmit(error);\n    setSubmitFailed.apply(void 0, fields);\n\n    if (onSubmitFail) {\n      onSubmitFail(error, dispatch, submitError, props);\n    }\n\n    if (error || onSubmitFail) {\n      // if you've provided an onSubmitFail callback, don't re-throw the error\n      return error;\n    } else {\n      throw submitError;\n    }\n  }\n\n  if (submitAsSideEffect) {\n    if (result) {\n      dispatch(result);\n    }\n  } else {\n    if ((0, _isPromise[\"default\"])(result)) {\n      startSubmit();\n      return result.then(function (submitResult) {\n        stopSubmit();\n        setSubmitSucceeded();\n\n        if (onSubmitSuccess) {\n          onSubmitSuccess(submitResult, dispatch, props);\n        }\n\n        return submitResult;\n      }, function (submitError) {\n        var error = isSubmissionError(submitError) ? submitError.errors : undefined;\n        stopSubmit(error);\n        setSubmitFailed.apply(void 0, fields);\n\n        if (onSubmitFail) {\n          onSubmitFail(error, dispatch, submitError, props);\n        }\n\n        if (error || onSubmitFail) {\n          // if you've provided an onSubmitFail callback, don't re-throw the error\n          return error;\n        } else {\n          throw submitError;\n        }\n      });\n    } else {\n      setSubmitSucceeded();\n\n      if (onSubmitSuccess) {\n        onSubmitSuccess(result, dispatch, props);\n      }\n    }\n  }\n\n  return result;\n};\n\nvar handleSubmit = function handleSubmit(submit, props, valid, asyncValidate, fields) {\n  var dispatch = props.dispatch,\n      onSubmitFail = props.onSubmitFail,\n      setSubmitFailed = props.setSubmitFailed,\n      syncErrors = props.syncErrors,\n      asyncErrors = props.asyncErrors,\n      touch = props.touch,\n      persistentSubmitErrors = props.persistentSubmitErrors;\n  fields = makeFieldsArray(fields);\n  touch.apply(void 0, fields); // mark all fields as touched\n\n  if (valid || persistentSubmitErrors) {\n    var asyncValidateResult = asyncValidate && asyncValidate();\n\n    if (asyncValidateResult) {\n      return asyncValidateResult.then(function (asyncErrors) {\n        if (asyncErrors) {\n          throw asyncErrors;\n        }\n\n        return executeSubmit(submit, fields, props);\n      })[\"catch\"](function (asyncErrors) {\n        setSubmitFailed.apply(void 0, fields);\n\n        if (onSubmitFail) {\n          onSubmitFail(asyncErrors, dispatch, null, props);\n        }\n\n        return Promise.reject(asyncErrors);\n      });\n    } else {\n      return executeSubmit(submit, fields, props);\n    }\n  } else {\n    setSubmitFailed.apply(void 0, fields);\n    var errors = mergeErrors({\n      asyncErrors: asyncErrors,\n      syncErrors: syncErrors\n    });\n\n    if (onSubmitFail) {\n      onSubmitFail(errors, dispatch, null, props);\n    }\n\n    return errors;\n  }\n};\n\nvar _default = handleSubmit;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar getDisplayName = function getDisplayName(Comp) {\n  return Comp.displayName || Comp.name || 'Component';\n};\n\nvar _default = getDisplayName;\nexports[\"default\"] = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar isHotReloading = function isHotReloading() {\n  var castModule = module;\n  return !!(typeof castModule !== 'undefined' && castModule.hot && typeof castModule.hot.status === 'function' && castModule.hot.status() === 'apply');\n};\n\nvar _default = isHotReloading;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createReducer = _interopRequireDefault(require(\"../createReducer\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createReducer[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _isFunction2 = _interopRequireDefault(require(\"lodash/isFunction\"));\n\nvar _actionTypes = require(\"./actionTypes\");\n\nvar _deleteInWithCleanUp = _interopRequireDefault(require(\"./deleteInWithCleanUp\"));\n\nvar _plain = _interopRequireDefault(require(\"./structure/plain\"));\n\nvar shouldDelete = function shouldDelete(_ref) {\n  var getIn = _ref.getIn;\n  return function (state, path) {\n    var initialValuesPath = null;\n\n    if (/^values/.test(path)) {\n      initialValuesPath = path.replace('values', 'initial');\n    }\n\n    var initialValueComparison = initialValuesPath ? getIn(state, initialValuesPath) === undefined : true;\n    return getIn(state, path) !== undefined && initialValueComparison;\n  };\n};\n\nvar isReduxFormAction = function isReduxFormAction(action) {\n  return action && action.type && action.type.length > _actionTypes.prefix.length && action.type.substring(0, _actionTypes.prefix.length) === _actionTypes.prefix;\n};\n\nfunction createReducer(structure) {\n  var _behaviors;\n\n  var deepEqual = structure.deepEqual,\n      empty = structure.empty,\n      forEach = structure.forEach,\n      getIn = structure.getIn,\n      setIn = structure.setIn,\n      deleteIn = structure.deleteIn,\n      fromJS = structure.fromJS,\n      keys = structure.keys,\n      size = structure.size,\n      some = structure.some,\n      splice = structure.splice;\n  var deleteInWithCleanUp = (0, _deleteInWithCleanUp[\"default\"])(structure)(shouldDelete);\n  var plainDeleteInWithCleanUp = (0, _deleteInWithCleanUp[\"default\"])(_plain[\"default\"])(shouldDelete);\n\n  var doSplice = function doSplice(state, key, field, index, removeNum, value, force) {\n    var existing = getIn(state, key + \".\" + field);\n    return existing || force ? setIn(state, key + \".\" + field, splice(existing, index, removeNum, value)) : state;\n  };\n\n  var doPlainSplice = function doPlainSplice(state, key, field, index, removeNum, value, force) {\n    var slice = getIn(state, key);\n\n    var existing = _plain[\"default\"].getIn(slice, field);\n\n    return existing || force ? setIn(state, key, _plain[\"default\"].setIn(slice, field, _plain[\"default\"].splice(existing, index, removeNum, value))) : state;\n  };\n\n  var rootKeys = ['values', 'fields', 'submitErrors', 'asyncErrors'];\n\n  var arraySplice = function arraySplice(state, field, index, removeNum, value) {\n    var result = state;\n    var nonValuesValue = value != null ? empty : undefined;\n    result = doSplice(result, 'values', field, index, removeNum, value, true);\n    result = doSplice(result, 'fields', field, index, removeNum, nonValuesValue);\n    result = doPlainSplice(result, 'syncErrors', field, index, removeNum, undefined);\n    result = doPlainSplice(result, 'syncWarnings', field, index, removeNum, undefined);\n    result = doSplice(result, 'submitErrors', field, index, removeNum, undefined);\n    result = doSplice(result, 'asyncErrors', field, index, removeNum, undefined);\n    return result;\n  };\n\n  var behaviors = (_behaviors = {}, _behaviors[_actionTypes.ARRAY_INSERT] = function (state, _ref2) {\n    var _ref2$meta = _ref2.meta,\n        field = _ref2$meta.field,\n        index = _ref2$meta.index,\n        payload = _ref2.payload;\n    return arraySplice(state, field, index, 0, payload);\n  }, _behaviors[_actionTypes.ARRAY_MOVE] = function (state, _ref3) {\n    var _ref3$meta = _ref3.meta,\n        field = _ref3$meta.field,\n        from = _ref3$meta.from,\n        to = _ref3$meta.to;\n    var array = getIn(state, \"values.\" + field);\n    var length = array ? size(array) : 0;\n    var result = state;\n\n    if (length) {\n      rootKeys.forEach(function (key) {\n        var path = key + \".\" + field;\n\n        if (getIn(result, path)) {\n          var value = getIn(result, path + \"[\" + from + \"]\");\n          result = setIn(result, path, splice(getIn(result, path), from, 1)); // remove\n\n          result = setIn(result, path, splice(getIn(result, path), to, 0, value)); // insert\n        }\n      });\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.ARRAY_POP] = function (state, _ref4) {\n    var field = _ref4.meta.field;\n    var array = getIn(state, \"values.\" + field);\n    var length = array ? size(array) : 0;\n    return length ? arraySplice(state, field, length - 1, 1) : state;\n  }, _behaviors[_actionTypes.ARRAY_PUSH] = function (state, _ref5) {\n    var field = _ref5.meta.field,\n        payload = _ref5.payload;\n    var array = getIn(state, \"values.\" + field);\n    var length = array ? size(array) : 0;\n    return arraySplice(state, field, length, 0, payload);\n  }, _behaviors[_actionTypes.ARRAY_REMOVE] = function (state, _ref6) {\n    var _ref6$meta = _ref6.meta,\n        field = _ref6$meta.field,\n        index = _ref6$meta.index;\n    return arraySplice(state, field, index, 1);\n  }, _behaviors[_actionTypes.ARRAY_REMOVE_ALL] = function (state, _ref7) {\n    var field = _ref7.meta.field;\n    var array = getIn(state, \"values.\" + field);\n    var length = array ? size(array) : 0;\n    return length ? arraySplice(state, field, 0, length) : state;\n  }, _behaviors[_actionTypes.ARRAY_SHIFT] = function (state, _ref8) {\n    var field = _ref8.meta.field;\n    return arraySplice(state, field, 0, 1);\n  }, _behaviors[_actionTypes.ARRAY_SPLICE] = function (state, _ref9) {\n    var _ref9$meta = _ref9.meta,\n        field = _ref9$meta.field,\n        index = _ref9$meta.index,\n        removeNum = _ref9$meta.removeNum,\n        payload = _ref9.payload;\n    return arraySplice(state, field, index, removeNum, payload);\n  }, _behaviors[_actionTypes.ARRAY_SWAP] = function (state, _ref10) {\n    var _ref10$meta = _ref10.meta,\n        field = _ref10$meta.field,\n        indexA = _ref10$meta.indexA,\n        indexB = _ref10$meta.indexB;\n    var result = state;\n    rootKeys.forEach(function (key) {\n      var valueA = getIn(result, key + \".\" + field + \"[\" + indexA + \"]\");\n      var valueB = getIn(result, key + \".\" + field + \"[\" + indexB + \"]\");\n\n      if (valueA !== undefined || valueB !== undefined) {\n        result = setIn(result, key + \".\" + field + \"[\" + indexA + \"]\", valueB);\n        result = setIn(result, key + \".\" + field + \"[\" + indexB + \"]\", valueA);\n      }\n    });\n    return result;\n  }, _behaviors[_actionTypes.ARRAY_UNSHIFT] = function (state, _ref11) {\n    var field = _ref11.meta.field,\n        payload = _ref11.payload;\n    return arraySplice(state, field, 0, 0, payload);\n  }, _behaviors[_actionTypes.AUTOFILL] = function (state, _ref12) {\n    var field = _ref12.meta.field,\n        payload = _ref12.payload;\n    var result = state;\n    result = deleteInWithCleanUp(result, \"asyncErrors.\" + field);\n    result = deleteInWithCleanUp(result, \"submitErrors.\" + field);\n    result = setIn(result, \"fields.\" + field + \".autofilled\", true);\n    result = setIn(result, \"values.\" + field, payload);\n    return result;\n  }, _behaviors[_actionTypes.BLUR] = function (state, _ref13) {\n    var _ref13$meta = _ref13.meta,\n        field = _ref13$meta.field,\n        touch = _ref13$meta.touch,\n        payload = _ref13.payload;\n    var result = state;\n    var initial = getIn(result, \"initial.\" + field);\n\n    if (initial === undefined && payload === '') {\n      result = deleteInWithCleanUp(result, \"values.\" + field);\n    } else if (payload !== undefined) {\n      result = setIn(result, \"values.\" + field, payload);\n    }\n\n    if (field === getIn(result, 'active')) {\n      result = deleteIn(result, 'active');\n    }\n\n    result = deleteIn(result, \"fields.\" + field + \".active\");\n\n    if (touch) {\n      result = setIn(result, \"fields.\" + field + \".touched\", true);\n      result = setIn(result, 'anyTouched', true);\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.CHANGE] = function (state, _ref14) {\n    var _ref14$meta = _ref14.meta,\n        field = _ref14$meta.field,\n        touch = _ref14$meta.touch,\n        persistentSubmitErrors = _ref14$meta.persistentSubmitErrors,\n        payload = _ref14.payload;\n    var result = state;\n    var initial = getIn(result, \"initial.\" + field);\n\n    if (initial === undefined && payload === '') {\n      result = deleteInWithCleanUp(result, \"values.\" + field);\n    } else if ((0, _isFunction2[\"default\"])(payload)) {\n      var fieldCurrentValue = getIn(state, \"values.\" + field);\n      result = setIn(result, \"values.\" + field, payload(fieldCurrentValue, state.values));\n    } else if (payload !== undefined) {\n      result = setIn(result, \"values.\" + field, payload);\n    }\n\n    result = deleteInWithCleanUp(result, \"asyncErrors.\" + field);\n\n    if (!persistentSubmitErrors) {\n      result = deleteInWithCleanUp(result, \"submitErrors.\" + field);\n    }\n\n    result = deleteInWithCleanUp(result, \"fields.\" + field + \".autofilled\");\n\n    if (touch) {\n      result = setIn(result, \"fields.\" + field + \".touched\", true);\n      result = setIn(result, 'anyTouched', true);\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.CLEAR_SUBMIT] = function (state) {\n    return deleteIn(state, 'triggerSubmit');\n  }, _behaviors[_actionTypes.CLEAR_SUBMIT_ERRORS] = function (state) {\n    var result = state;\n    result = deleteInWithCleanUp(result, 'submitErrors');\n    result = deleteIn(result, 'error');\n    return result;\n  }, _behaviors[_actionTypes.CLEAR_ASYNC_ERROR] = function (state, _ref15) {\n    var field = _ref15.meta.field;\n    return deleteIn(state, \"asyncErrors.\" + field);\n  }, _behaviors[_actionTypes.CLEAR_FIELDS] = function (state, _ref16) {\n    var _ref16$meta = _ref16.meta,\n        keepTouched = _ref16$meta.keepTouched,\n        persistentSubmitErrors = _ref16$meta.persistentSubmitErrors,\n        fields = _ref16$meta.fields;\n    var result = state;\n    fields.forEach(function (field) {\n      result = deleteInWithCleanUp(result, \"values.\" + field);\n      result = deleteInWithCleanUp(result, \"asyncErrors.\" + field);\n\n      if (!persistentSubmitErrors) {\n        result = deleteInWithCleanUp(result, \"submitErrors.\" + field);\n      }\n\n      result = deleteInWithCleanUp(result, \"fields.\" + field + \".autofilled\");\n\n      if (!keepTouched) {\n        result = deleteIn(result, \"fields.\" + field + \".touched\");\n      }\n    });\n    var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {\n      return getIn(result, \"fields.\" + key + \".touched\");\n    });\n    result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');\n    return result;\n  }, _behaviors[_actionTypes.FOCUS] = function (state, _ref17) {\n    var field = _ref17.meta.field;\n    var result = state;\n    var previouslyActive = getIn(state, 'active');\n    result = deleteIn(result, \"fields.\" + previouslyActive + \".active\");\n    result = setIn(result, \"fields.\" + field + \".visited\", true);\n    result = setIn(result, \"fields.\" + field + \".active\", true);\n    result = setIn(result, 'active', field);\n    return result;\n  }, _behaviors[_actionTypes.INITIALIZE] = function (state, _ref18) {\n    var payload = _ref18.payload,\n        _ref18$meta = _ref18.meta,\n        keepDirty = _ref18$meta.keepDirty,\n        keepSubmitSucceeded = _ref18$meta.keepSubmitSucceeded,\n        updateUnregisteredFields = _ref18$meta.updateUnregisteredFields,\n        keepValues = _ref18$meta.keepValues;\n    var mapData = fromJS(payload);\n    var result = empty; // clean all field state\n    // persist old warnings, they will get recalculated if the new form values are different from the old values\n\n    var warning = getIn(state, 'warning');\n\n    if (warning) {\n      result = setIn(result, 'warning', warning);\n    }\n\n    var syncWarnings = getIn(state, 'syncWarnings');\n\n    if (syncWarnings) {\n      result = setIn(result, 'syncWarnings', syncWarnings);\n    } // persist old errors, they will get recalculated if the new form values are different from the old values\n\n\n    var error = getIn(state, 'error');\n\n    if (error) {\n      result = setIn(result, 'error', error);\n    }\n\n    var syncErrors = getIn(state, 'syncErrors');\n\n    if (syncErrors) {\n      result = setIn(result, 'syncErrors', syncErrors);\n    }\n\n    var registeredFields = getIn(state, 'registeredFields');\n\n    if (registeredFields) {\n      result = setIn(result, 'registeredFields', registeredFields);\n    }\n\n    var previousValues = getIn(state, 'values');\n    var previousInitialValues = getIn(state, 'initial');\n    var newInitialValues = mapData;\n    var newValues = previousValues;\n\n    if (keepDirty && registeredFields) {\n      if (!deepEqual(newInitialValues, previousInitialValues)) {\n        //\n        // Keep the value of dirty fields while updating the value of\n        // pristine fields. This way, apps can reinitialize forms while\n        // avoiding stomping on user edits.\n        //\n        // Note 1: The initialize action replaces all initial values\n        // regardless of keepDirty.\n        //\n        // Note 2: When a field is dirty, keepDirty is enabled, and the field\n        // value is the same as the new initial value for the field, the\n        // initialize action causes the field to become pristine. That effect\n        // is what we want.\n        //\n        var overwritePristineValue = function overwritePristineValue(name) {\n          var previousInitialValue = getIn(previousInitialValues, name);\n          var previousValue = getIn(previousValues, name);\n\n          if (deepEqual(previousValue, previousInitialValue)) {\n            // Overwrite the old pristine value with the new pristine value\n            var newInitialValue = getIn(newInitialValues, name); // This check prevents any 'setIn' call that would create useless\n            // nested objects, since the path to the new field value would\n            // evaluate to the same (especially for undefined values)\n\n            if (getIn(newValues, name) !== newInitialValue) {\n              newValues = setIn(newValues, name, newInitialValue);\n            }\n          }\n        };\n\n        if (!updateUnregisteredFields) {\n          forEach(keys(registeredFields), function (name) {\n            return overwritePristineValue(name);\n          });\n        }\n\n        forEach(keys(newInitialValues), function (name) {\n          var previousInitialValue = getIn(previousInitialValues, name);\n\n          if (typeof previousInitialValue === 'undefined') {\n            // Add new values at the root level.\n            var newInitialValue = getIn(newInitialValues, name);\n            newValues = setIn(newValues, name, newInitialValue);\n          }\n\n          if (updateUnregisteredFields) {\n            overwritePristineValue(name);\n          }\n        });\n      }\n    } else {\n      newValues = newInitialValues;\n    }\n\n    if (keepValues) {\n      forEach(keys(previousValues), function (name) {\n        var previousValue = getIn(previousValues, name);\n        newValues = setIn(newValues, name, previousValue);\n      });\n      forEach(keys(previousInitialValues), function (name) {\n        var previousInitialValue = getIn(previousInitialValues, name);\n        newInitialValues = setIn(newInitialValues, name, previousInitialValue);\n      });\n    }\n\n    if (keepSubmitSucceeded && getIn(state, 'submitSucceeded')) {\n      result = setIn(result, 'submitSucceeded', true);\n    }\n\n    result = setIn(result, 'values', newValues);\n    result = setIn(result, 'initial', newInitialValues);\n    return result;\n  }, _behaviors[_actionTypes.REGISTER_FIELD] = function (state, _ref19) {\n    var _ref19$payload = _ref19.payload,\n        name = _ref19$payload.name,\n        type = _ref19$payload.type;\n    var key = \"registeredFields['\" + name + \"']\";\n    var field = getIn(state, key);\n\n    if (field) {\n      var count = getIn(field, 'count') + 1;\n      field = setIn(field, 'count', count);\n    } else {\n      field = fromJS({\n        name: name,\n        type: type,\n        count: 1\n      });\n    }\n\n    return setIn(state, key, field);\n  }, _behaviors[_actionTypes.RESET] = function (state) {\n    var result = empty;\n    var registeredFields = getIn(state, 'registeredFields');\n\n    if (registeredFields) {\n      result = setIn(result, 'registeredFields', registeredFields);\n    }\n\n    var values = getIn(state, 'initial');\n\n    if (values) {\n      result = setIn(result, 'values', values);\n      result = setIn(result, 'initial', values);\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.RESET_SECTION] = function (state, _ref20) {\n    var sections = _ref20.meta.sections;\n    var result = state;\n    sections.forEach(function (section) {\n      result = deleteInWithCleanUp(result, \"asyncErrors.\" + section);\n      result = deleteInWithCleanUp(result, \"submitErrors.\" + section);\n      result = deleteInWithCleanUp(result, \"fields.\" + section);\n      var values = getIn(state, \"initial.\" + section);\n      result = values ? setIn(result, \"values.\" + section, values) : deleteInWithCleanUp(result, \"values.\" + section);\n    });\n    var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {\n      return getIn(result, \"fields.\" + key + \".touched\");\n    });\n    result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');\n    return result;\n  }, _behaviors[_actionTypes.SUBMIT] = function (state) {\n    return setIn(state, 'triggerSubmit', true);\n  }, _behaviors[_actionTypes.START_ASYNC_VALIDATION] = function (state, _ref21) {\n    var field = _ref21.meta.field;\n    return setIn(state, 'asyncValidating', field || true);\n  }, _behaviors[_actionTypes.START_SUBMIT] = function (state) {\n    return setIn(state, 'submitting', true);\n  }, _behaviors[_actionTypes.STOP_ASYNC_VALIDATION] = function (state, _ref22) {\n    var payload = _ref22.payload;\n    var result = state;\n    result = deleteIn(result, 'asyncValidating');\n\n    if (payload && Object.keys(payload).length) {\n      var _error = payload._error,\n          fieldErrors = (0, _objectWithoutPropertiesLoose2[\"default\"])(payload, [\"_error\"]);\n\n      if (_error) {\n        result = setIn(result, 'error', _error);\n      }\n\n      if (Object.keys(fieldErrors).length) {\n        result = setIn(result, 'asyncErrors', fromJS(fieldErrors));\n      }\n    } else {\n      result = deleteIn(result, 'error');\n      result = deleteIn(result, 'asyncErrors');\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.STOP_SUBMIT] = function (state, _ref23) {\n    var payload = _ref23.payload;\n    var result = state;\n    result = deleteIn(result, 'submitting');\n    result = deleteIn(result, 'submitFailed');\n    result = deleteIn(result, 'submitSucceeded');\n\n    if (payload && Object.keys(payload).length) {\n      var _error = payload._error,\n          fieldErrors = (0, _objectWithoutPropertiesLoose2[\"default\"])(payload, [\"_error\"]);\n\n      if (_error) {\n        result = setIn(result, 'error', _error);\n      } else {\n        result = deleteIn(result, 'error');\n      }\n\n      if (Object.keys(fieldErrors).length) {\n        result = setIn(result, 'submitErrors', fromJS(fieldErrors));\n      } else {\n        result = deleteIn(result, 'submitErrors');\n      }\n\n      result = setIn(result, 'submitFailed', true);\n    } else {\n      result = deleteIn(result, 'error');\n      result = deleteIn(result, 'submitErrors');\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.SET_SUBMIT_FAILED] = function (state, _ref24) {\n    var fields = _ref24.meta.fields;\n    var result = state;\n    result = setIn(result, 'submitFailed', true);\n    result = deleteIn(result, 'submitSucceeded');\n    result = deleteIn(result, 'submitting');\n    fields.forEach(function (field) {\n      return result = setIn(result, \"fields.\" + field + \".touched\", true);\n    });\n\n    if (fields.length) {\n      result = setIn(result, 'anyTouched', true);\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.SET_SUBMIT_SUCCEEDED] = function (state) {\n    var result = state;\n    result = deleteIn(result, 'submitFailed');\n    result = setIn(result, 'submitSucceeded', true);\n    return result;\n  }, _behaviors[_actionTypes.TOUCH] = function (state, _ref25) {\n    var fields = _ref25.meta.fields;\n    var result = state;\n    fields.forEach(function (field) {\n      return result = setIn(result, \"fields.\" + field + \".touched\", true);\n    });\n    result = setIn(result, 'anyTouched', true);\n    return result;\n  }, _behaviors[_actionTypes.UNREGISTER_FIELD] = function (state, _ref26) {\n    var _ref26$payload = _ref26.payload,\n        name = _ref26$payload.name,\n        destroyOnUnmount = _ref26$payload.destroyOnUnmount;\n    var result = state;\n    var key = \"registeredFields['\" + name + \"']\";\n    var field = getIn(result, key);\n\n    if (!field) {\n      return result;\n    }\n\n    var count = getIn(field, 'count') - 1;\n\n    if (count <= 0 && destroyOnUnmount) {\n      // Note: Cannot use deleteWithCleanUp here because of the flat nature of registeredFields\n      result = deleteIn(result, key);\n\n      if (deepEqual(getIn(result, 'registeredFields'), empty)) {\n        result = deleteIn(result, 'registeredFields');\n      }\n\n      var syncErrors = getIn(result, 'syncErrors');\n\n      if (syncErrors) {\n        syncErrors = plainDeleteInWithCleanUp(syncErrors, name);\n\n        if (_plain[\"default\"].deepEqual(syncErrors, _plain[\"default\"].empty)) {\n          result = deleteIn(result, 'syncErrors');\n        } else {\n          result = setIn(result, 'syncErrors', syncErrors);\n        }\n      }\n\n      var syncWarnings = getIn(result, 'syncWarnings');\n\n      if (syncWarnings) {\n        syncWarnings = plainDeleteInWithCleanUp(syncWarnings, name);\n\n        if (_plain[\"default\"].deepEqual(syncWarnings, _plain[\"default\"].empty)) {\n          result = deleteIn(result, 'syncWarnings');\n        } else {\n          result = setIn(result, 'syncWarnings', syncWarnings);\n        }\n      }\n\n      result = deleteInWithCleanUp(result, \"submitErrors.\" + name);\n      result = deleteInWithCleanUp(result, \"asyncErrors.\" + name);\n    } else {\n      field = setIn(field, 'count', count);\n      result = setIn(result, key, field);\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.UNTOUCH] = function (state, _ref27) {\n    var fields = _ref27.meta.fields;\n    var result = state;\n    fields.forEach(function (field) {\n      return result = deleteIn(result, \"fields.\" + field + \".touched\");\n    });\n    var anyTouched = some(keys(getIn(result, 'registeredFields')), function (key) {\n      return getIn(result, \"fields.\" + key + \".touched\");\n    });\n    result = anyTouched ? setIn(result, 'anyTouched', true) : deleteIn(result, 'anyTouched');\n    return result;\n  }, _behaviors[_actionTypes.UPDATE_SYNC_ERRORS] = function (state, _ref28) {\n    var _ref28$payload = _ref28.payload,\n        syncErrors = _ref28$payload.syncErrors,\n        error = _ref28$payload.error;\n    var result = state;\n\n    if (error) {\n      result = setIn(result, 'error', error);\n      result = setIn(result, 'syncError', true);\n    } else {\n      result = deleteIn(result, 'error');\n      result = deleteIn(result, 'syncError');\n    }\n\n    if (Object.keys(syncErrors).length) {\n      result = setIn(result, 'syncErrors', syncErrors);\n    } else {\n      result = deleteIn(result, 'syncErrors');\n    }\n\n    return result;\n  }, _behaviors[_actionTypes.UPDATE_SYNC_WARNINGS] = function (state, _ref29) {\n    var _ref29$payload = _ref29.payload,\n        syncWarnings = _ref29$payload.syncWarnings,\n        warning = _ref29$payload.warning;\n    var result = state;\n\n    if (warning) {\n      result = setIn(result, 'warning', warning);\n    } else {\n      result = deleteIn(result, 'warning');\n    }\n\n    if (Object.keys(syncWarnings).length) {\n      result = setIn(result, 'syncWarnings', syncWarnings);\n    } else {\n      result = deleteIn(result, 'syncWarnings');\n    }\n\n    return result;\n  }, _behaviors);\n\n  var reducer = function reducer(state, action) {\n    if (state === void 0) {\n      state = empty;\n    }\n\n    var behavior = behaviors[action.type];\n    return behavior ? behavior(state, action) : state;\n  };\n\n  var byForm = function byForm(reducer) {\n    return function (state, action) {\n      if (state === void 0) {\n        state = empty;\n      }\n\n      if (action === void 0) {\n        action = {\n          type: 'NONE'\n        };\n      }\n\n      var form = action && action.meta && action.meta.form;\n\n      if (!form || !isReduxFormAction(action)) {\n        return state;\n      }\n\n      if (action.type === _actionTypes.DESTROY && action.meta && action.meta.form) {\n        return action.meta.form.reduce(function (result, form) {\n          return deleteInWithCleanUp(result, form);\n        }, state);\n      }\n\n      var formState = getIn(state, form);\n      var result = reducer(formState, action);\n      return result === formState ? state : setIn(state, form, result);\n    };\n  };\n  /**\n   * Adds additional functionality to the reducer\n   */\n\n\n  function decorate(target) {\n    target.plugin = function (reducers, config) {\n      var _this = this;\n\n      if (config === void 0) {\n        config = {};\n      }\n\n      // use 'function' keyword to enable 'this'\n      return decorate(function (state, action) {\n        if (state === void 0) {\n          state = empty;\n        }\n\n        if (action === void 0) {\n          action = {\n            type: 'NONE'\n          };\n        }\n\n        var callPlugin = function callPlugin(processed, key) {\n          var previousState = getIn(processed, key);\n          var nextState = reducers[key](previousState, action, getIn(state, key));\n          return nextState !== previousState ? setIn(processed, key, nextState) : processed;\n        };\n\n        var processed = _this(state, action); // run through redux-form reducer\n\n\n        var form = action && action.meta && action.meta.form;\n\n        if (form && !config.receiveAllFormActions) {\n          // this is an action aimed at forms, so only give it to the specified form's plugin\n          return reducers[form] ? callPlugin(processed, form) : processed;\n        } else {\n          // this is not a form-specific action, so send it to all the plugins\n          return Object.keys(reducers).reduce(callPlugin, processed);\n        }\n      });\n    };\n\n    return target;\n  }\n\n  return decorate(byForm(reducer));\n}\n\nvar _default = createReducer;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _toPath2 = _interopRequireDefault(require(\"lodash/toPath\"));\n\nfunction createDeleteInWithCleanUp(structure) {\n  var shouldDeleteDefault = function shouldDeleteDefault(structure) {\n    return function (state, path) {\n      return structure.getIn(state, path) !== undefined;\n    };\n  };\n\n  var deepEqual = structure.deepEqual,\n      empty = structure.empty,\n      getIn = structure.getIn,\n      deleteIn = structure.deleteIn,\n      setIn = structure.setIn;\n  return function (shouldDelete) {\n    if (shouldDelete === void 0) {\n      shouldDelete = shouldDeleteDefault;\n    }\n\n    var deleteInWithCleanUp = function deleteInWithCleanUp(state, path) {\n      if (path[path.length - 1] === ']') {\n        // array path\n        var pathTokens = (0, _toPath2[\"default\"])(path);\n        pathTokens.pop();\n        var parent = getIn(state, pathTokens.join('.'));\n        return parent ? setIn(state, path) : state;\n      }\n\n      var result = state;\n\n      if (shouldDelete(structure)(state, path)) {\n        result = deleteIn(state, path);\n      }\n\n      var dotIndex = path.lastIndexOf('.');\n\n      if (dotIndex > 0) {\n        var parentPath = path.substring(0, dotIndex);\n\n        if (parentPath[parentPath.length - 1] !== ']') {\n          var _parent = getIn(result, parentPath);\n\n          if (deepEqual(_parent, empty)) {\n            return deleteInWithCleanUp(result, parentPath);\n          }\n        }\n      }\n\n      return result;\n    };\n\n    return deleteInWithCleanUp;\n  };\n}\n\nvar _default = createDeleteInWithCleanUp;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _createValues = _interopRequireDefault(require(\"../createValues\"));\n\nvar _immutable = _interopRequireDefault(require(\"../structure/immutable\"));\n\nvar _default = (0, _createValues[\"default\"])(_immutable[\"default\"]);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar createValues = function createValues(_ref) {\n  var getIn = _ref.getIn;\n  return function (config) {\n    var _prop$getFormState$co = (0, _extends2[\"default\"])({\n      prop: 'values',\n      getFormState: function getFormState(state) {\n        return getIn(state, 'form');\n      }\n    }, config),\n        form = _prop$getFormState$co.form,\n        prop = _prop$getFormState$co.prop,\n        getFormState = _prop$getFormState$co.getFormState;\n\n    return (0, _reactRedux.connect)(function (state) {\n      var _ref2;\n\n      return _ref2 = {}, _ref2[prop] = getIn(getFormState(state), form + \".values\"), _ref2;\n    } // ignore dispatch\n    );\n  };\n};\n\nvar _default = createValues;\nexports[\"default\"] = _default;","/** @license React v16.14.0\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","import Immutable from 'immutable';\nimport {\n  getUnexpectedInvocationParameterMessage,\n  validateNextState\n} from './utilities';\n\nexport default (reducers: Object, getDefaultState: ?Function = Immutable.Map): Function => {\n  const reducerKeys = Object.keys(reducers);\n\n  // eslint-disable-next-line space-infix-ops\n  return (inputState: ?Function = getDefaultState(), action: Object): Immutable.Map => {\n    // eslint-disable-next-line no-process-env\n    if (process.env.NODE_ENV !== 'production') {\n      const warningMessage = getUnexpectedInvocationParameterMessage(inputState, reducers, action);\n\n      if (warningMessage) {\n        // eslint-disable-next-line no-console\n        console.error(warningMessage);\n      }\n    }\n\n    return inputState\n      .withMutations((temporaryState) => {\n        reducerKeys.forEach((reducerName) => {\n          const reducer = reducers[reducerName];\n          const currentDomainState = temporaryState.get(reducerName);\n          const nextDomainState = reducer(currentDomainState, action);\n\n          validateNextState(nextDomainState, reducerName, action);\n\n          temporaryState.set(reducerName, nextDomainState);\n        });\n      });\n  };\n};\n","export getStateName from './getStateName';\nexport getUnexpectedInvocationParameterMessage from './getUnexpectedInvocationParameterMessage';\nexport validateNextState from './validateNextState';\n","import Immutable from 'immutable';\nimport getStateName from './getStateName';\n\nexport default (state: Object, reducers: Object, action: Object) => {\n  const reducerNames = Object.keys(reducers);\n\n  if (!reducerNames.length) {\n    return 'Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.';\n  }\n\n  const stateName = getStateName(action);\n\n  if (Immutable.isImmutable ? !Immutable.isImmutable(state) : !Immutable.Iterable.isIterable(state)) {\n    return 'The ' + stateName + ' is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: \"' + reducerNames.join('\", \"') + '\".';\n  }\n\n  const unexpectedStatePropertyNames = state.toSeq().keySeq().toArray().filter((name) => {\n    return !reducers.hasOwnProperty(name);\n  });\n\n  if (unexpectedStatePropertyNames.length > 0) {\n    return 'Unexpected ' + (unexpectedStatePropertyNames.length === 1 ? 'property' : 'properties') + ' \"' + unexpectedStatePropertyNames.join('\", \"') + '\" found in ' + stateName + '. Expected to find one of the known reducer property names instead: \"' + reducerNames.join('\", \"') + '\". Unexpected properties will be ignored.';\n  }\n\n  return null;\n};\n","export default (nextState, reducerName: string, action: Object): void => {\n  // eslint-disable-next-line no-undefined\n  if (nextState === undefined) {\n    throw new Error('Reducer \"' + reducerName + '\" returned undefined when handling \"' + action.type + '\" action. To ignore an action, you must explicitly return the previous state.');\n  }\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = local;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _actions = require('./actions');\n\nvar Actions = _interopRequireWildcard(_actions);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar isBrowserLike = typeof navigator !== 'undefined';\n\nfunction whenUndefined(o, orElse) {\n  return o === undefined ? orElse : o;\n}\n\nvar has = {}.hasOwnProperty;\n\n// modified from gaearon/react-pure-render\nfunction shallowEqual(objA, objB) {\n  if (objA === objB) {\n    return true;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  for (var i = 0; i < keysA.length; i++) {\n    if (!has.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction getId(props) {\n  if (typeof props.ident === 'string') {\n    return props.ident;\n  }\n  return props.ident(props);\n}\n\nfunction getInitial(props) {\n  if (typeof props.initial !== 'function') {\n    return props.initial;\n  }\n  return props.initial(props);\n}\n\nfunction local(_ref) {\n  var config = _objectWithoutProperties(_ref, []);\n\n  var mapProps = function mapProps(_ref2) {\n    var props = _objectWithoutProperties(_ref2, []);\n\n    var _props$config = _extends({}, props, config),\n        ident = _props$config.ident,\n        _props$config$initial = _props$config.initial,\n        initial = _props$config$initial === undefined ? {} : _props$config$initial,\n        _props$config$reducer = _props$config.reducer,\n        reducer = _props$config$reducer === undefined ? function (x) {\n      return x;\n    } : _props$config$reducer,\n        _props$config$persist = _props$config.persist,\n        persist = _props$config$persist === undefined ? true : _props$config$persist,\n        rest = _objectWithoutProperties(_props$config, ['ident', 'initial', 'reducer', 'persist']);\n\n    if (!ident) {\n      throw new Error('cannot annotate with @local without an ident');\n    }\n\n    return _extends({\n      ident: ident,\n      initial: initial,\n      reducer: reducer,\n      persist: persist\n    }, rest);\n  };\n  return function (Target) {\n    var _class, _temp2;\n\n    return _temp2 = _class = function (_Component) {\n      _inherits(ReduxReactLocal, _Component);\n\n      function ReduxReactLocal() {\n        var _temp, _this, _ret;\n\n        _classCallCheck(this, ReduxReactLocal);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.mappedProps = mapProps(_this.props), _this.store = _this.context.store, _this.state = function () {\n          var id = getId(_this.mappedProps),\n              storeState = _this.store.getState();\n\n          if (!storeState.get('local')) {\n            throw new Error('did you forget to include the `local` reducer?');\n          }\n          return {\n            id: id,\n            value: whenUndefined(storeState.get('local').$get(id), getInitial(_this.mappedProps))\n          };\n        }(), _this.$ = Actions.$(_this.state.id), _this._setState = function (state) {\n          _this.store.dispatch(Actions.setState(_this.state.id)(state));\n        }, _temp), _possibleConstructorReturn(_this, _ret);\n      }\n\n      ReduxReactLocal.prototype.componentWillMount = function componentWillMount() {\n        var _this2 = this;\n\n        this.store.dispatch(Actions.register(this.state.id, this.state.value, this.mappedProps.reducer, this.mappedProps.persist)());\n        if (isBrowserLike) {\n          this.dispose = this.context.$$local(this.state.id, function (value) {\n            _this2.setState({ value: value });\n          });\n        }\n      };\n\n      ReduxReactLocal.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n        return !shallowEqual(this.props, nextProps) || this.state.id !== nextState.id || this.state.value !== nextState.value;\n      };\n\n      ReduxReactLocal.prototype.componentWillReceiveProps = function componentWillReceiveProps(next) {\n        var nextProps = mapProps(next);\n        var id = getId(nextProps);\n\n        if (id !== this.state.id) {\n          var init = getInitial(nextProps);\n          this.store.dispatch(Actions.swap(this.state.id, this.mappedProps.reducer, this.mappedProps.persist, id, init)());\n\n          this.setState({\n            id: id,\n            value: whenUndefined(this.store.getState().get('local').$get(id), init)\n          });\n        }\n      };\n\n      ReduxReactLocal.prototype.componentWillUnmount = function componentWillUnmount() {\n        this.store.dispatch(Actions.unmount(this.state.id, this.mappedProps.persist)());\n        if (this.dispose) {\n          this.dispose();\n        }\n      };\n\n      ReduxReactLocal.prototype.render = function render() {\n        return _react2.default.createElement(\n          Target,\n          _extends({}, this.props, {\n            $: this.$,\n            ident: this.state.id,\n            dispatch: this.store.dispatch,\n            state: this.state.value,\n            setState: this._setState }),\n          this.props.children\n        );\n      };\n\n      return ReduxReactLocal;\n    }(_react.Component), _class.contextTypes = {\n      store: _propTypes2.default.shape({\n        subscribe: _propTypes2.default.func.isRequired,\n        dispatch: _propTypes2.default.func.isRequired,\n        getState: _propTypes2.default.func.isRequired\n      }),\n      $$local: _propTypes2.default.func\n    }, _class.displayName = 'local:' + (Target.displayName || Target.name), _temp2;\n  };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = localReducer;\n\nvar _tree = require('./tree');\n\nvar T = _interopRequireWildcard(_tree);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar identity = function identity(x) {\n  return x;\n};\n\n\nfunction $get(key) {\n  var tree = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.$$tree;\n\n  // todo - cache on an 'instance'\n  return T.get(tree, key);\n}\n\nfunction localReducer() {\n  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    $$tree: T.make(),\n    $$fns: T.make(),\n    $$changed: T.make()\n  };\n  var action = arguments[1];\n\n  // ack!\n  state.$get = state.$get || $get;\n  state.$$tree = state.$$tree || T.make();\n  state.$$fns = state.$$fns || T.make();\n  state.$$changed = state.$$changed || T.make();\n\n  switch (action.type) {\n    case '$$local.flushed':\n      return flush(state, action);\n    case '$$local.setState':\n      return setState(state, action);\n    case '$$local.register':\n      return register(state, action);\n    case '$$local.swap':\n      return swap(state, action);\n    case '$$local.unmount':\n      return unmount(state, action);\n    default:\n      return reduceAll(state, action);\n  }\n}\n\nfunction flush(state) {\n  return {\n    $get: state.$get,\n    $$tree: state.$$tree,\n    $$fns: state.$$fns,\n    $$changed: T.make()\n  };\n}\n\nfunction setState(state, _ref) {\n  var payload = _ref.payload;\n\n  if (payload.state === undefined) {\n    throw new Error('cannot set undefined as local state');\n  }\n\n  return {\n    $get: state.$get,\n    $$fns: state.$$fns,\n    $$tree: T.set(state.$$tree, payload.ident, payload.state),\n    $$changed: T.set(state.$$changed, payload.ident, payload.state)\n  };\n}\n\nfunction register(state, action) {\n  var _action$payload = action.payload,\n      ident = _action$payload.ident,\n      initial = _action$payload.initial,\n      reducer = _action$payload.reducer,\n      fn = T.get(state.$$fns, ident);\n\n\n  if (fn && fn !== identity && fn !== reducer) {\n    throw new Error('local key ' + ident + ' already exists');\n  }\n  // this way we can 'persist' across unmounts\n  // also makes preloading data simple\n  var prevState = T.get(state.$$tree, ident);\n  return {\n    $get: state.$get,\n    $$tree: prevState !== undefined ? state.$$tree : T.set(state.$$tree, ident, initial),\n    $$fns: fn === reducer ? state.$$fns : T.set(state.$$fns, ident, reducer),\n    $$changed: !prevState ? state.$$changed : T.set(state.$$changed, ident, prevState !== undefined ? prevState : initial)\n  };\n}\n\nfunction swap(state, action) {\n  var payload = action.payload;\n\n  return register(unmount(state, action), _extends({}, action, {\n    payload: _extends({}, payload, {\n      ident: payload.next\n    })\n  }));\n}\n\nfunction unmount(state, action) {\n  var _action$payload2 = action.payload,\n      persist = _action$payload2.persist,\n      ident = _action$payload2.ident;\n\n  if (persist) {\n    return {\n      $get: state.$get,\n      $$tree: state.$$tree,\n      $$changed: state.$$changed,\n      $$fns: T.set(state.$$fns, ident, identity) // we use this as a signal that it's been unmounted\n    };\n  } else {\n    return {\n      $get: state.$get,\n      $$changed: state.$$changed,\n      $$tree: T.del(state.$$tree, ident),\n      $$fns: T.del(state.$$fns, ident)\n    };\n  }\n}\n\nfunction reduceAll(state, action) {\n  // update all local keys\n  var _action$meta = action.meta;\n  _action$meta = _action$meta === undefined ? {} : _action$meta;\n  var ident = _action$meta.ident,\n      local = _action$meta.local,\n      $$fns = state.$$fns,\n      changed = [],\n      reducers = T.toObject($$fns),\n      t = state.$$tree,\n      entries = local ? [[ident, T.get(t, ident)]] : // localized actions trigger only the relevant reducer\n  T.entries(state.$$tree);\n\n\n  for (var i = 0; i < entries.length; i++) {\n    var _entries$i = _slicedToArray(entries[i], 2),\n        key = _entries$i[0],\n        value = _entries$i[1];\n\n    var $action = action;\n    // if this originated from the same key, then add me: true\n    if (key === ident && local) {\n      $action = _extends({}, $action, { me: true });\n    }\n\n    // reduce\n    var computed = reducers[key] ? reducers[key](value, $action) : value;\n\n    if (computed === undefined && value !== undefined) {\n      console.error('reduce', {\n        reducers: reducers,\n        key: key,\n        value: value,\n        $action: $action\n      });\n      throw new Error('did you forget to return state from the ' + key + ' reducer?'); // eslint-disable-line no-console\n    }\n\n    if (computed !== value) {\n      t = T.set(t, key, computed);\n      changed.push([key, computed]);\n    }\n  }\n\n  return changed.length > 0 ? {\n    $get: state.$get,\n    $$fns: state.$$fns,\n    $$tree: t,\n    $$changed: changed.reduce(function (c, _ref2) {\n      var _ref3 = _slicedToArray(_ref2, 2),\n          key = _ref3[0],\n          value = _ref3[1];\n\n      return T.set(c, key, value);\n    }, state.$$changed)\n  } : state;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = doHash;\n// murmurhash2 via https://gist.github.com/raycmorgan/588423\n\nfunction doHash(str, seed) {\n  var m = 0x5bd1e995;\n  var r = 24;\n  var h = seed ^ str.length;\n  var length = str.length;\n  var currentIndex = 0;\n\n  while (length >= 4) {\n    var k = UInt32(str, currentIndex);\n\n    k = Umul32(k, m);\n    k ^= k >>> r;\n    k = Umul32(k, m);\n\n    h = Umul32(h, m);\n    h ^= k;\n\n    currentIndex += 4;\n    length -= 4;\n  }\n\n  switch (length) {\n    case 3:\n      h ^= UInt16(str, currentIndex);\n      h ^= str.charCodeAt(currentIndex + 2) << 16;\n      h = Umul32(h, m);\n      break;\n\n    case 2:\n      h ^= UInt16(str, currentIndex);\n      h = Umul32(h, m);\n      break;\n\n    case 1:\n      h ^= str.charCodeAt(currentIndex);\n      h = Umul32(h, m);\n      break;\n  }\n\n  h ^= h >>> 13;\n  h = Umul32(h, m);\n  h ^= h >>> 15;\n\n  return h >>> 0;\n}\n\nfunction UInt32(str, pos) {\n  return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8) + (str.charCodeAt(pos++) << 16) + (str.charCodeAt(pos) << 24);\n}\n\nfunction UInt16(str, pos) {\n  return str.charCodeAt(pos++) + (str.charCodeAt(pos++) << 8);\n}\n\nfunction Umul32(n, m) {\n  n = n | 0;\n  m = m | 0;\n  var nlo = n & 0xffff;\n  var nhi = n >>> 16;\n  var res = nlo * m + ((nhi * m & 0xffff) << 16) | 0;\n  return res;\n}\n\nfunction getBucket(str, buckets) {\n  var hash = doHash(str, str.length);\n  var bucket = hash % buckets;\n  return bucket;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.stringifySafe = stringifySafe;\n\nvar _tree = require('./tree');\n\nvar has = {}.hasOwnProperty;\n\nfunction stringifySafe(state) {\n  if (!has.call(state, 'local')) {\n    return state;\n  }\n\n  return _extends({}, state, {\n    local: {\n      $$tree: (0, _tree.compressedTree)(state.get('local').$$tree),\n      get: undefined,\n      $$changed: undefined,\n      $$fns: undefined\n    }\n  });\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _class, _temp2;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _tree = require('./tree');\n\nvar T = _interopRequireWildcard(_tree);\n\nvar _utils = require('./utils');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar isBrowserLike = typeof navigator !== 'undefined';\n\nvar Root = (_temp2 = _class = function (_Component) {\n  _inherits(Root, _Component);\n\n  function Root() {\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Root);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.fns = {}, _this._local = function (ident, fn) {\n      _this.fns[ident] = [].concat(_toConsumableArray(_this.fns[ident] || []), [fn]);\n      return function () {\n        return _this.fns[ident] = _this.fns[ident].filter(function (x) {\n          return x !== fn;\n        });\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  Root.prototype.getChildContext = function getChildContext() {\n    return {\n      $$local: this._local,\n      store: this.props.store\n    };\n  };\n\n  Root.prototype.componentDidMount = function componentDidMount() {\n    var _this2 = this;\n\n    if (isBrowserLike) {\n      this.dispose = this.props.store.subscribe(function () {\n        var state = (0, _utils.getLocalState)(_this2.props.store.getState()),\n            changed = false;\n        T.entries(state.$$changed).forEach(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 2),\n              key = _ref2[0],\n              value = _ref2[1];\n\n          changed = true;\n          (_this2.fns[key] || []).forEach(function (fn) {\n            return fn(value);\n          });\n        });\n        if (changed) {\n          _this2.props.store.dispatch({ type: '$$local.flushed' });\n        }\n      });\n    }\n  };\n\n  Root.prototype.componentWillUnmount = function componentWillUnmount() {\n    if (this.dispose) {\n      this.dispose();\n    }\n  };\n\n  Root.prototype.render = function render() {\n    return this.props.children;\n  };\n\n  return Root;\n}(_react.Component), _class.propTypes = {\n  store: _propTypes2.default.object.isRequired\n}, _class.childContextTypes = {\n  $$local: _propTypes2.default.func,\n  store: _propTypes2.default.shape({\n    subscribe: _propTypes2.default.func.isRequired,\n    dispatch: _propTypes2.default.func.isRequired,\n    getState: _propTypes2.default.func.isRequired\n  })\n}, _temp2);\nexports.default = Root;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLocalState = getLocalState;\nfunction getLocalState(state) {\n  if (typeof state.get === 'function') {\n    return state.get('local');\n  }\n  return state.local;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"LOCATION_CHANGE\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.LOCATION_CHANGE;\n  }\n});\nObject.defineProperty(exports, \"CALL_HISTORY_METHOD\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.CALL_HISTORY_METHOD;\n  }\n});\nObject.defineProperty(exports, \"onLocationChanged\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.onLocationChanged;\n  }\n});\nObject.defineProperty(exports, \"push\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.push;\n  }\n});\nObject.defineProperty(exports, \"replace\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.replace;\n  }\n});\nObject.defineProperty(exports, \"go\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.go;\n  }\n});\nObject.defineProperty(exports, \"goBack\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.goBack;\n  }\n});\nObject.defineProperty(exports, \"goForward\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.goForward;\n  }\n});\nObject.defineProperty(exports, \"routerActions\", {\n  enumerable: true,\n  get: function get() {\n    return _actions.routerActions;\n  }\n});\nObject.defineProperty(exports, \"routerMiddleware\", {\n  enumerable: true,\n  get: function get() {\n    return _middleware.default;\n  }\n});\nexports.createMatchSelector = exports.getSearch = exports.getHash = exports.getAction = exports.getLocation = exports.connectRouter = exports.ConnectedRouter = void 0;\n\nvar _ConnectedRouter = _interopRequireDefault(require(\"./ConnectedRouter\"));\n\nvar _reducer = _interopRequireDefault(require(\"./reducer\"));\n\nvar _selectors = _interopRequireDefault(require(\"./selectors\"));\n\nvar _immutable = _interopRequireDefault(require(\"./structure/immutable\"));\n\nvar _actions = require(\"./actions\");\n\nvar _middleware = _interopRequireDefault(require(\"./middleware\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ConnectedRouter =\n/*#__PURE__*/\n(0, _ConnectedRouter.default)(_immutable.default);\nexports.ConnectedRouter = ConnectedRouter;\nvar connectRouter =\n/*#__PURE__*/\n(0, _reducer.default)(_immutable.default);\nexports.connectRouter = connectRouter;\n\nvar _createSelectors =\n/*#__PURE__*/\n(0, _selectors.default)(_immutable.default),\n    getLocation = _createSelectors.getLocation,\n    getAction = _createSelectors.getAction,\n    getHash = _createSelectors.getHash,\n    getSearch = _createSelectors.getSearch,\n    createMatchSelector = _createSelectors.createMatchSelector;\n\nexports.createMatchSelector = createMatchSelector;\nexports.getSearch = getSearch;\nexports.getHash = getHash;\nexports.getAction = getAction;\nexports.getLocation = getLocation;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactRedux = require(\"react-redux\");\n\nvar _reactRouter = require(\"react-router\");\n\nvar _actions = require(\"./actions\");\n\nvar _selectors = _interopRequireDefault(require(\"./selectors\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar createConnectedRouter = function createConnectedRouter(structure) {\n  var _createSelectors = (0, _selectors.default)(structure),\n      getLocation = _createSelectors.getLocation;\n  /*\n   * ConnectedRouter listens to a history object passed from props.\n   * When history is changed, it dispatches action to redux store.\n   * Then, store will pass props to component to render.\n   * This creates uni-directional flow from history->store->router->components.\n   */\n\n\n  var ConnectedRouter =\n  /*#__PURE__*/\n  function (_PureComponent) {\n    _inherits(ConnectedRouter, _PureComponent);\n\n    function ConnectedRouter(props) {\n      var _this;\n\n      _classCallCheck(this, ConnectedRouter);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedRouter).call(this, props));\n      var store = props.store,\n          history = props.history,\n          onLocationChanged = props.onLocationChanged;\n      _this.inTimeTravelling = false; // Subscribe to store changes to check if we are in time travelling\n\n      _this.unsubscribe = store.subscribe(function () {\n        // Extract store's location\n        var _getLocation = getLocation(store.getState()),\n            pathnameInStore = _getLocation.pathname,\n            searchInStore = _getLocation.search,\n            hashInStore = _getLocation.hash; // Extract history's location\n\n\n        var _history$location = history.location,\n            pathnameInHistory = _history$location.pathname,\n            searchInHistory = _history$location.search,\n            hashInHistory = _history$location.hash; // If we do time travelling, the location in store is changed but location in history is not changed\n\n        if (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore) {\n          _this.inTimeTravelling = true; // Update history's location to match store's location\n\n          history.push({\n            pathname: pathnameInStore,\n            search: searchInStore,\n            hash: hashInStore\n          });\n        }\n      });\n\n      var handleLocationChange = function handleLocationChange(location, action) {\n        var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n        // Dispatch onLocationChanged except when we're in time travelling\n        if (!_this.inTimeTravelling) {\n          onLocationChanged(location, action, isFirstRendering);\n        } else {\n          _this.inTimeTravelling = false;\n        }\n      }; // Listen to history changes\n\n\n      _this.unlisten = history.listen(handleLocationChange); // Dispatch a location change action for the initial location.\n      // This makes it backward-compatible with react-router-redux.\n      // But, we add `isFirstRendering` to `true` to prevent double-rendering.\n\n      handleLocationChange(history.location, history.action, true);\n      return _this;\n    }\n\n    _createClass(ConnectedRouter, [{\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.unlisten();\n        this.unsubscribe();\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            history = _this$props.history,\n            children = _this$props.children;\n        return _react.default.createElement(_reactRouter.Router, {\n          history: history\n        }, children);\n      }\n    }]);\n\n    return ConnectedRouter;\n  }(_react.PureComponent);\n\n  ConnectedRouter.propTypes = {\n    store: _propTypes.default.shape({\n      getState: _propTypes.default.func.isRequired,\n      subscribe: _propTypes.default.func.isRequired\n    }).isRequired,\n    history: _propTypes.default.shape({\n      action: _propTypes.default.string.isRequired,\n      listen: _propTypes.default.func.isRequired,\n      location: _propTypes.default.object.isRequired,\n      push: _propTypes.default.func.isRequired\n    }).isRequired,\n    basename: _propTypes.default.string,\n    children: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),\n    onLocationChanged: _propTypes.default.func.isRequired\n  };\n\n  var mapDispatchToProps = function mapDispatchToProps(dispatch) {\n    return {\n      onLocationChanged: function onLocationChanged(location, action, isFirstRendering) {\n        return dispatch((0, _actions.onLocationChanged)(location, action, isFirstRendering));\n      }\n    };\n  };\n\n  var ConnectedRouterWithContext = function ConnectedRouterWithContext(props) {\n    var Context = props.context || _reactRedux.ReactReduxContext;\n\n    if (Context == null) {\n      throw 'Please upgrade to react-redux v6';\n    }\n\n    return _react.default.createElement(Context.Consumer, null, function (_ref) {\n      var store = _ref.store;\n      return _react.default.createElement(ConnectedRouter, _extends({\n        store: store\n      }, props));\n    });\n  };\n\n  ConnectedRouterWithContext.propTypes = {\n    context: _propTypes.default.object\n  };\n  return (0, _reactRedux.connect)(null, mapDispatchToProps)(ConnectedRouterWithContext);\n};\n\nvar _default = createConnectedRouter;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _actions = require(\"./actions\");\n\nvar createConnectRouter = function createConnectRouter(structure) {\n  var fromJS = structure.fromJS,\n      merge = structure.merge;\n\n  var createRouterReducer = function createRouterReducer(history) {\n    var initialRouterState = fromJS({\n      location: history.location,\n      action: history.action\n    });\n    /*\n    * This reducer will update the state with the most recent location history\n    * has transitioned to.\n    */\n\n    return function () {\n      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialRouterState;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          type = _ref.type,\n          payload = _ref.payload;\n\n      if (type === _actions.LOCATION_CHANGE) {\n        var location = payload.location,\n            action = payload.action,\n            isFirstRendering = payload.isFirstRendering; // Don't update the state ref for the first rendering\n        // to prevent the double-rendering issue on initilization\n\n        return isFirstRendering ? state : merge(state, {\n          location: fromJS(location),\n          action: action\n        });\n      }\n\n      return state;\n    };\n  };\n\n  return createRouterReducer;\n};\n\nvar _default = createConnectRouter;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _immutable = require(\"immutable\");\n\nvar _getIn = _interopRequireDefault(require(\"./getIn\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar structure = {\n  fromJS: function fromJS(jsValue) {\n    return (0, _immutable.fromJS)(jsValue, function (key, value) {\n      return _immutable.Iterable.isIndexed(value) ? value.toList() : value.toMap();\n    });\n  },\n  getIn: _getIn.default,\n  merge: function merge(state, payload) {\n    return state.merge(payload);\n  },\n  toJS: function toJS(value) {\n    return _immutable.Iterable.isIterable(value) ? value.toJS() : value;\n  }\n};\nvar _default = structure;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _immutable = require(\"immutable\");\n\nvar _getIn = _interopRequireDefault(require(\"../plain/getIn\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n  return _immutable.Iterable.isIterable(state) ? state.getIn(path) : (0, _getIn.default)(state, path);\n};\n\nvar _default = getIn;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\n/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n  if (!state) {\n    return state;\n  }\n\n  var length = path.length;\n\n  if (!length) {\n    return undefined;\n  }\n\n  var result = state;\n\n  for (var i = 0; i < length && !!result; ++i) {\n    result = result[path[i]];\n  }\n\n  return result;\n};\n\nvar _default = getIn;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _actions = require(\"./actions\");\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\nvar routerMiddleware = function routerMiddleware(history) {\n  return function (store) {\n    return function (next) {\n      return function (action) {\n        // eslint-disable-line no-unused-vars\n        if (action.type !== _actions.CALL_HISTORY_METHOD) {\n          return next(action);\n        }\n\n        var _action$payload = action.payload,\n            method = _action$payload.method,\n            args = _action$payload.args;\n        history[method].apply(history, _toConsumableArray(args));\n      };\n    };\n  };\n};\n\nvar _default = routerMiddleware;\nexports.default = _default;","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","//! moment-timezone.js\n//! version : 0.5.28\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory);                 // AMD\n\t} else {\n\t\tfactory(root.moment);                        // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.28\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils  = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname       : data[0],\n\t\t\tabbrs      : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets    : mapIndices(offsets, indices),\n\t\t\tuntils     : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name       = unpacked.name;\n\t\t\tthis.abbrs      = unpacked.abbrs;\n\t\t\tthis.untils     = unpacked.untils;\n\t\t\tthis.offsets    = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target  = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils  = this.untils,\n\t\t\t\tmax     = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset     = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (台北標準時間)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout  = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version      = VERSION;\n\ttz.dataVersion  = '';\n\ttz._zones       = zones;\n\ttz._links       = links;\n\ttz._names       = names;\n\ttz._countries\t= countries;\n\ttz.add          = addZone;\n\ttz.link         = addLink;\n\ttz.load         = loadData;\n\ttz.zone         = getZone;\n\ttz.zoneExists   = zoneExists; // deprecated in 0.1.0\n\ttz.guess        = guess;\n\ttz.names        = getNames;\n\ttz.Zone         = Zone;\n\ttz.unpack       = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset  = needsOffset;\n\ttz.moveInvalidForward   = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries    = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName  = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr  = abbrWrap(fn.zoneAbbr);\n\tfn.utc       = resetZoneWrap(fn.utc);\n\tfn.local     = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _arrays = require('shallow-equal/arrays');\n\nvar _arrays2 = _interopRequireDefault(_arrays);\n\nvar _reactAutowhatever = require('react-autowhatever');\n\nvar _reactAutowhatever2 = _interopRequireDefault(_reactAutowhatever);\n\nvar _theme = require('./theme');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar alwaysTrue = function alwaysTrue() {\n  return true;\n};\nvar defaultShouldRenderSuggestions = function defaultShouldRenderSuggestions(value) {\n  return value.trim().length > 0;\n};\nvar defaultRenderSuggestionsContainer = function defaultRenderSuggestionsContainer(_ref) {\n  var containerProps = _ref.containerProps,\n      children = _ref.children;\n  return _react2.default.createElement(\n    'div',\n    containerProps,\n    children\n  );\n};\n\nvar Autosuggest = function (_Component) {\n  _inherits(Autosuggest, _Component);\n\n  function Autosuggest(_ref2) {\n    var alwaysRenderSuggestions = _ref2.alwaysRenderSuggestions;\n\n    _classCallCheck(this, Autosuggest);\n\n    var _this = _possibleConstructorReturn(this, (Autosuggest.__proto__ || Object.getPrototypeOf(Autosuggest)).call(this));\n\n    _initialiseProps.call(_this);\n\n    _this.state = {\n      isFocused: false,\n      isCollapsed: !alwaysRenderSuggestions,\n      highlightedSectionIndex: null,\n      highlightedSuggestionIndex: null,\n      highlightedSuggestion: null,\n      valueBeforeUpDown: null\n    };\n\n    _this.justPressedUpDown = false;\n    _this.justMouseEntered = false;\n\n    _this.pressedSuggestion = null;\n    return _this;\n  }\n\n  _createClass(Autosuggest, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      document.addEventListener('mousedown', this.onDocumentMouseDown);\n      document.addEventListener('mouseup', this.onDocumentMouseUp);\n\n      this.input = this.autowhatever.input;\n      this.suggestionsContainer = this.autowhatever.itemsContainer;\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      if ((0, _arrays2.default)(nextProps.suggestions, this.props.suggestions)) {\n        if (nextProps.highlightFirstSuggestion && nextProps.suggestions.length > 0 && this.justPressedUpDown === false && this.justMouseEntered === false) {\n          this.highlightFirstSuggestion();\n        }\n      } else {\n        if (this.willRenderSuggestions(nextProps)) {\n          if (this.state.isCollapsed && !this.justSelectedSuggestion) {\n            this.revealSuggestions();\n          }\n        } else {\n          this.resetHighlightedSuggestion();\n        }\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _props = this.props,\n          suggestions = _props.suggestions,\n          onSuggestionHighlighted = _props.onSuggestionHighlighted,\n          highlightFirstSuggestion = _props.highlightFirstSuggestion;\n\n\n      if (!(0, _arrays2.default)(suggestions, prevProps.suggestions) && suggestions.length > 0 && highlightFirstSuggestion) {\n        this.highlightFirstSuggestion();\n        return;\n      }\n\n      if (onSuggestionHighlighted) {\n        var highlightedSuggestion = this.getHighlightedSuggestion();\n        var prevHighlightedSuggestion = prevState.highlightedSuggestion;\n\n        if (highlightedSuggestion != prevHighlightedSuggestion) {\n          onSuggestionHighlighted({\n            suggestion: highlightedSuggestion\n          });\n        }\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      document.removeEventListener('mousedown', this.onDocumentMouseDown);\n      document.removeEventListener('mouseup', this.onDocumentMouseUp);\n    }\n  }, {\n    key: 'updateHighlightedSuggestion',\n    value: function updateHighlightedSuggestion(sectionIndex, suggestionIndex, prevValue) {\n      var _this2 = this;\n\n      this.setState(function (state) {\n        var valueBeforeUpDown = state.valueBeforeUpDown;\n\n\n        if (suggestionIndex === null) {\n          valueBeforeUpDown = null;\n        } else if (valueBeforeUpDown === null && typeof prevValue !== 'undefined') {\n          valueBeforeUpDown = prevValue;\n        }\n\n        return {\n          highlightedSectionIndex: sectionIndex,\n          highlightedSuggestionIndex: suggestionIndex,\n          highlightedSuggestion: suggestionIndex === null ? null : _this2.getSuggestion(sectionIndex, suggestionIndex),\n          valueBeforeUpDown: valueBeforeUpDown\n        };\n      });\n    }\n  }, {\n    key: 'resetHighlightedSuggestion',\n    value: function resetHighlightedSuggestion() {\n      var shouldResetValueBeforeUpDown = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.setState(function (state) {\n        var valueBeforeUpDown = state.valueBeforeUpDown;\n\n\n        return {\n          highlightedSectionIndex: null,\n          highlightedSuggestionIndex: null,\n          highlightedSuggestion: null,\n          valueBeforeUpDown: shouldResetValueBeforeUpDown ? null : valueBeforeUpDown\n        };\n      });\n    }\n  }, {\n    key: 'revealSuggestions',\n    value: function revealSuggestions() {\n      this.setState({\n        isCollapsed: false\n      });\n    }\n  }, {\n    key: 'closeSuggestions',\n    value: function closeSuggestions() {\n      this.setState({\n        highlightedSectionIndex: null,\n        highlightedSuggestionIndex: null,\n        highlightedSuggestion: null,\n        valueBeforeUpDown: null,\n        isCollapsed: true\n      });\n    }\n  }, {\n    key: 'getSuggestion',\n    value: function getSuggestion(sectionIndex, suggestionIndex) {\n      var _props2 = this.props,\n          suggestions = _props2.suggestions,\n          multiSection = _props2.multiSection,\n          getSectionSuggestions = _props2.getSectionSuggestions;\n\n\n      if (multiSection) {\n        return getSectionSuggestions(suggestions[sectionIndex])[suggestionIndex];\n      }\n\n      return suggestions[suggestionIndex];\n    }\n  }, {\n    key: 'getHighlightedSuggestion',\n    value: function getHighlightedSuggestion() {\n      var _state = this.state,\n          highlightedSectionIndex = _state.highlightedSectionIndex,\n          highlightedSuggestionIndex = _state.highlightedSuggestionIndex;\n\n\n      if (highlightedSuggestionIndex === null) {\n        return null;\n      }\n\n      return this.getSuggestion(highlightedSectionIndex, highlightedSuggestionIndex);\n    }\n  }, {\n    key: 'getSuggestionValueByIndex',\n    value: function getSuggestionValueByIndex(sectionIndex, suggestionIndex) {\n      var getSuggestionValue = this.props.getSuggestionValue;\n\n\n      return getSuggestionValue(this.getSuggestion(sectionIndex, suggestionIndex));\n    }\n  }, {\n    key: 'getSuggestionIndices',\n    value: function getSuggestionIndices(suggestionElement) {\n      var sectionIndex = suggestionElement.getAttribute('data-section-index');\n      var suggestionIndex = suggestionElement.getAttribute('data-suggestion-index');\n\n      return {\n        sectionIndex: typeof sectionIndex === 'string' ? parseInt(sectionIndex, 10) : null,\n        suggestionIndex: parseInt(suggestionIndex, 10)\n      };\n    }\n  }, {\n    key: 'findSuggestionElement',\n    value: function findSuggestionElement(startNode) {\n      var node = startNode;\n\n      do {\n        if (node.getAttribute('data-suggestion-index') !== null) {\n          return node;\n        }\n\n        node = node.parentNode;\n      } while (node !== null);\n\n      console.error('Clicked element:', startNode); // eslint-disable-line no-console\n      throw new Error(\"Couldn't find suggestion element\");\n    }\n  }, {\n    key: 'maybeCallOnChange',\n    value: function maybeCallOnChange(event, newValue, method) {\n      var _props$inputProps = this.props.inputProps,\n          value = _props$inputProps.value,\n          onChange = _props$inputProps.onChange;\n\n\n      if (newValue !== value) {\n        onChange(event, { newValue: newValue, method: method });\n      }\n    }\n  }, {\n    key: 'willRenderSuggestions',\n    value: function willRenderSuggestions(props) {\n      var suggestions = props.suggestions,\n          inputProps = props.inputProps,\n          shouldRenderSuggestions = props.shouldRenderSuggestions;\n      var value = inputProps.value;\n\n\n      return suggestions.length > 0 && shouldRenderSuggestions(value);\n    }\n  }, {\n    key: 'getQuery',\n    value: function getQuery() {\n      var inputProps = this.props.inputProps;\n      var value = inputProps.value;\n      var valueBeforeUpDown = this.state.valueBeforeUpDown;\n\n\n      return (valueBeforeUpDown === null ? value : valueBeforeUpDown).trim();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      var _props3 = this.props,\n          suggestions = _props3.suggestions,\n          renderInputComponent = _props3.renderInputComponent,\n          onSuggestionsFetchRequested = _props3.onSuggestionsFetchRequested,\n          renderSuggestion = _props3.renderSuggestion,\n          inputProps = _props3.inputProps,\n          multiSection = _props3.multiSection,\n          renderSectionTitle = _props3.renderSectionTitle,\n          id = _props3.id,\n          getSectionSuggestions = _props3.getSectionSuggestions,\n          theme = _props3.theme,\n          getSuggestionValue = _props3.getSuggestionValue,\n          alwaysRenderSuggestions = _props3.alwaysRenderSuggestions,\n          highlightFirstSuggestion = _props3.highlightFirstSuggestion;\n      var _state2 = this.state,\n          isFocused = _state2.isFocused,\n          isCollapsed = _state2.isCollapsed,\n          highlightedSectionIndex = _state2.highlightedSectionIndex,\n          highlightedSuggestionIndex = _state2.highlightedSuggestionIndex,\n          valueBeforeUpDown = _state2.valueBeforeUpDown;\n\n      var shouldRenderSuggestions = alwaysRenderSuggestions ? alwaysTrue : this.props.shouldRenderSuggestions;\n      var value = inputProps.value,\n          _onFocus = inputProps.onFocus,\n          _onKeyDown = inputProps.onKeyDown;\n\n      var willRenderSuggestions = this.willRenderSuggestions(this.props);\n      var isOpen = alwaysRenderSuggestions || isFocused && !isCollapsed && willRenderSuggestions;\n      var items = isOpen ? suggestions : [];\n      var autowhateverInputProps = _extends({}, inputProps, {\n        onFocus: function onFocus(event) {\n          if (!_this3.justSelectedSuggestion && !_this3.justClickedOnSuggestionsContainer) {\n            var shouldRender = shouldRenderSuggestions(value);\n\n            _this3.setState({\n              isFocused: true,\n              isCollapsed: !shouldRender\n            });\n\n            _onFocus && _onFocus(event);\n\n            if (shouldRender) {\n              onSuggestionsFetchRequested({ value: value, reason: 'input-focused' });\n            }\n          }\n        },\n        onBlur: function onBlur(event) {\n          if (_this3.justClickedOnSuggestionsContainer) {\n            _this3.input.focus();\n            return;\n          }\n\n          _this3.blurEvent = event;\n\n          if (!_this3.justSelectedSuggestion) {\n            _this3.onBlur();\n            _this3.onSuggestionsClearRequested();\n          }\n        },\n        onChange: function onChange(event) {\n          var value = event.target.value;\n\n          var shouldRender = shouldRenderSuggestions(value);\n\n          _this3.maybeCallOnChange(event, value, 'type');\n\n          if (_this3.suggestionsContainer) {\n            _this3.suggestionsContainer.scrollTop = 0;\n          }\n\n          _this3.setState(_extends({}, highlightFirstSuggestion ? {} : {\n            highlightedSectionIndex: null,\n            highlightedSuggestionIndex: null,\n            highlightedSuggestion: null\n          }, {\n            valueBeforeUpDown: null,\n            isCollapsed: !shouldRender\n          }));\n\n          if (shouldRender) {\n            onSuggestionsFetchRequested({ value: value, reason: 'input-changed' });\n          } else {\n            _this3.onSuggestionsClearRequested();\n          }\n        },\n        onKeyDown: function onKeyDown(event, data) {\n          var keyCode = event.keyCode;\n\n\n          switch (keyCode) {\n            case 40: // ArrowDown\n            case 38:\n              // ArrowUp\n              if (isCollapsed) {\n                if (shouldRenderSuggestions(value)) {\n                  onSuggestionsFetchRequested({\n                    value: value,\n                    reason: 'suggestions-revealed'\n                  });\n                  _this3.revealSuggestions();\n                }\n              } else if (suggestions.length > 0) {\n                var newHighlightedSectionIndex = data.newHighlightedSectionIndex,\n                    newHighlightedItemIndex = data.newHighlightedItemIndex;\n\n\n                var newValue = void 0;\n\n                if (newHighlightedItemIndex === null) {\n                  // valueBeforeUpDown can be null if, for example, user\n                  // hovers on the first suggestion and then pressed Up.\n                  // If that happens, use the original input value.\n                  newValue = valueBeforeUpDown === null ? value : valueBeforeUpDown;\n                } else {\n                  newValue = _this3.getSuggestionValueByIndex(newHighlightedSectionIndex, newHighlightedItemIndex);\n                }\n\n                _this3.updateHighlightedSuggestion(newHighlightedSectionIndex, newHighlightedItemIndex, value);\n                _this3.maybeCallOnChange(event, newValue, keyCode === 40 ? 'down' : 'up');\n              }\n\n              event.preventDefault(); // Prevents the cursor from moving\n\n              _this3.justPressedUpDown = true;\n\n              setTimeout(function () {\n                _this3.justPressedUpDown = false;\n              });\n\n              break;\n\n            // Enter\n            case 13:\n              {\n                // See #388\n                if (event.keyCode === 229) {\n                  break;\n                }\n\n                var highlightedSuggestion = _this3.getHighlightedSuggestion();\n\n                if (isOpen && !alwaysRenderSuggestions) {\n                  _this3.closeSuggestions();\n                }\n\n                if (highlightedSuggestion != null) {\n                  var _newValue = getSuggestionValue(highlightedSuggestion);\n\n                  _this3.maybeCallOnChange(event, _newValue, 'enter');\n\n                  _this3.onSuggestionSelected(event, {\n                    suggestion: highlightedSuggestion,\n                    suggestionValue: _newValue,\n                    suggestionIndex: highlightedSuggestionIndex,\n                    sectionIndex: highlightedSectionIndex,\n                    method: 'enter'\n                  });\n\n                  _this3.justSelectedSuggestion = true;\n\n                  setTimeout(function () {\n                    _this3.justSelectedSuggestion = false;\n                  });\n                }\n\n                break;\n              }\n\n            // Escape\n            case 27:\n              {\n                if (isOpen) {\n                  // If input.type === 'search', the browser clears the input\n                  // when Escape is pressed. We want to disable this default\n                  // behaviour so that, when suggestions are shown, we just hide\n                  // them, without clearing the input.\n                  event.preventDefault();\n                }\n\n                var willCloseSuggestions = isOpen && !alwaysRenderSuggestions;\n\n                if (valueBeforeUpDown === null) {\n                  // Didn't interact with Up/Down\n                  if (!willCloseSuggestions) {\n                    var _newValue2 = '';\n\n                    _this3.maybeCallOnChange(event, _newValue2, 'escape');\n\n                    if (shouldRenderSuggestions(_newValue2)) {\n                      onSuggestionsFetchRequested({\n                        value: _newValue2,\n                        reason: 'escape-pressed'\n                      });\n                    } else {\n                      _this3.onSuggestionsClearRequested();\n                    }\n                  }\n                } else {\n                  // Interacted with Up/Down\n                  _this3.maybeCallOnChange(event, valueBeforeUpDown, 'escape');\n                }\n\n                if (willCloseSuggestions) {\n                  _this3.onSuggestionsClearRequested();\n                  _this3.closeSuggestions();\n                } else {\n                  _this3.resetHighlightedSuggestion();\n                }\n\n                break;\n              }\n          }\n\n          _onKeyDown && _onKeyDown(event);\n        }\n      });\n      var renderSuggestionData = {\n        query: this.getQuery()\n      };\n\n      return _react2.default.createElement(_reactAutowhatever2.default, {\n        multiSection: multiSection,\n        items: items,\n        renderInputComponent: renderInputComponent,\n        renderItemsContainer: this.renderSuggestionsContainer,\n        renderItem: renderSuggestion,\n        renderItemData: renderSuggestionData,\n        renderSectionTitle: renderSectionTitle,\n        getSectionItems: getSectionSuggestions,\n        highlightedSectionIndex: highlightedSectionIndex,\n        highlightedItemIndex: highlightedSuggestionIndex,\n        inputProps: autowhateverInputProps,\n        itemProps: this.itemProps,\n        theme: (0, _theme.mapToAutowhateverTheme)(theme),\n        id: id,\n        ref: this.storeAutowhateverRef\n      });\n    }\n  }]);\n\n  return Autosuggest;\n}(_react.Component);\n\nAutosuggest.propTypes = {\n  suggestions: _propTypes2.default.array.isRequired,\n  onSuggestionsFetchRequested: function onSuggestionsFetchRequested(props, propName) {\n    var onSuggestionsFetchRequested = props[propName];\n\n    if (typeof onSuggestionsFetchRequested !== 'function') {\n      throw new Error(\"'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp\");\n    }\n  },\n  onSuggestionsClearRequested: function onSuggestionsClearRequested(props, propName) {\n    var onSuggestionsClearRequested = props[propName];\n\n    if (props.alwaysRenderSuggestions === false && typeof onSuggestionsClearRequested !== 'function') {\n      throw new Error(\"'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp\");\n    }\n  },\n  onSuggestionSelected: _propTypes2.default.func,\n  onSuggestionHighlighted: _propTypes2.default.func,\n  renderInputComponent: _propTypes2.default.func,\n  renderSuggestionsContainer: _propTypes2.default.func,\n  getSuggestionValue: _propTypes2.default.func.isRequired,\n  renderSuggestion: _propTypes2.default.func.isRequired,\n  inputProps: function inputProps(props, propName) {\n    var inputProps = props[propName];\n\n    if (!inputProps.hasOwnProperty('value')) {\n      throw new Error(\"'inputProps' must have 'value'.\");\n    }\n\n    if (!inputProps.hasOwnProperty('onChange')) {\n      throw new Error(\"'inputProps' must have 'onChange'.\");\n    }\n  },\n  shouldRenderSuggestions: _propTypes2.default.func,\n  alwaysRenderSuggestions: _propTypes2.default.bool,\n  multiSection: _propTypes2.default.bool,\n  renderSectionTitle: function renderSectionTitle(props, propName) {\n    var renderSectionTitle = props[propName];\n\n    if (props.multiSection === true && typeof renderSectionTitle !== 'function') {\n      throw new Error(\"'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp\");\n    }\n  },\n  getSectionSuggestions: function getSectionSuggestions(props, propName) {\n    var getSectionSuggestions = props[propName];\n\n    if (props.multiSection === true && typeof getSectionSuggestions !== 'function') {\n      throw new Error(\"'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp\");\n    }\n  },\n  focusInputOnSuggestionClick: _propTypes2.default.bool,\n  highlightFirstSuggestion: _propTypes2.default.bool,\n  theme: _propTypes2.default.object,\n  id: _propTypes2.default.string\n};\nAutosuggest.defaultProps = {\n  renderSuggestionsContainer: defaultRenderSuggestionsContainer,\n  shouldRenderSuggestions: defaultShouldRenderSuggestions,\n  alwaysRenderSuggestions: false,\n  multiSection: false,\n  focusInputOnSuggestionClick: true,\n  highlightFirstSuggestion: false,\n  theme: _theme.defaultTheme,\n  id: '1'\n};\n\nvar _initialiseProps = function _initialiseProps() {\n  var _this4 = this;\n\n  this.onDocumentMouseDown = function (event) {\n    _this4.justClickedOnSuggestionsContainer = false;\n\n    var node = event.detail && event.detail.target || // This is for testing only. Please show me a better way to emulate this.\n    event.target;\n\n    while (node !== null && node !== document) {\n      if (node.getAttribute('data-suggestion-index') !== null) {\n        // Suggestion was clicked\n        return;\n      }\n\n      if (node === _this4.suggestionsContainer) {\n        // Something else inside suggestions container was clicked\n        _this4.justClickedOnSuggestionsContainer = true;\n        return;\n      }\n\n      node = node.parentNode;\n    }\n  };\n\n  this.storeAutowhateverRef = function (autowhatever) {\n    if (autowhatever !== null) {\n      _this4.autowhatever = autowhatever;\n    }\n  };\n\n  this.onSuggestionMouseEnter = function (event, _ref3) {\n    var sectionIndex = _ref3.sectionIndex,\n        itemIndex = _ref3.itemIndex;\n\n    _this4.updateHighlightedSuggestion(sectionIndex, itemIndex);\n\n    if (event.target === _this4.pressedSuggestion) {\n      _this4.justSelectedSuggestion = true;\n    }\n\n    _this4.justMouseEntered = true;\n\n    setTimeout(function () {\n      _this4.justMouseEntered = false;\n    });\n  };\n\n  this.highlightFirstSuggestion = function () {\n    _this4.updateHighlightedSuggestion(_this4.props.multiSection ? 0 : null, 0);\n  };\n\n  this.onDocumentMouseUp = function () {\n    if (_this4.pressedSuggestion && !_this4.justSelectedSuggestion) {\n      _this4.input.focus();\n    }\n    _this4.pressedSuggestion = null;\n  };\n\n  this.onSuggestionMouseDown = function (event) {\n    // Checking if this.justSelectedSuggestion is already true to not duplicate touch events in chrome\n    // See: https://github.com/facebook/react/issues/9809#issuecomment-413978405\n    if (!_this4.justSelectedSuggestion) {\n      _this4.justSelectedSuggestion = true;\n      _this4.pressedSuggestion = event.target;\n    }\n  };\n\n  this.onSuggestionsClearRequested = function () {\n    var onSuggestionsClearRequested = _this4.props.onSuggestionsClearRequested;\n\n\n    onSuggestionsClearRequested && onSuggestionsClearRequested();\n  };\n\n  this.onSuggestionSelected = function (event, data) {\n    var _props4 = _this4.props,\n        alwaysRenderSuggestions = _props4.alwaysRenderSuggestions,\n        onSuggestionSelected = _props4.onSuggestionSelected,\n        onSuggestionsFetchRequested = _props4.onSuggestionsFetchRequested;\n\n\n    onSuggestionSelected && onSuggestionSelected(event, data);\n\n    if (alwaysRenderSuggestions) {\n      onSuggestionsFetchRequested({\n        value: data.suggestionValue,\n        reason: 'suggestion-selected'\n      });\n    } else {\n      _this4.onSuggestionsClearRequested();\n    }\n\n    _this4.resetHighlightedSuggestion();\n  };\n\n  this.onSuggestionClick = function (event) {\n    var _props5 = _this4.props,\n        alwaysRenderSuggestions = _props5.alwaysRenderSuggestions,\n        focusInputOnSuggestionClick = _props5.focusInputOnSuggestionClick;\n\n    var _getSuggestionIndices = _this4.getSuggestionIndices(_this4.findSuggestionElement(event.target)),\n        sectionIndex = _getSuggestionIndices.sectionIndex,\n        suggestionIndex = _getSuggestionIndices.suggestionIndex;\n\n    var clickedSuggestion = _this4.getSuggestion(sectionIndex, suggestionIndex);\n    var clickedSuggestionValue = _this4.props.getSuggestionValue(clickedSuggestion);\n\n    _this4.maybeCallOnChange(event, clickedSuggestionValue, 'click');\n    _this4.onSuggestionSelected(event, {\n      suggestion: clickedSuggestion,\n      suggestionValue: clickedSuggestionValue,\n      suggestionIndex: suggestionIndex,\n      sectionIndex: sectionIndex,\n      method: 'click'\n    });\n\n    if (!alwaysRenderSuggestions) {\n      _this4.closeSuggestions();\n    }\n\n    if (focusInputOnSuggestionClick === true) {\n      _this4.input.focus();\n    } else {\n      _this4.onBlur();\n    }\n\n    setTimeout(function () {\n      _this4.justSelectedSuggestion = false;\n    });\n  };\n\n  this.onBlur = function () {\n    var _props6 = _this4.props,\n        inputProps = _props6.inputProps,\n        shouldRenderSuggestions = _props6.shouldRenderSuggestions;\n    var value = inputProps.value,\n        onBlur = inputProps.onBlur;\n\n    var highlightedSuggestion = _this4.getHighlightedSuggestion();\n    var shouldRender = shouldRenderSuggestions(value);\n\n    _this4.setState({\n      isFocused: false,\n      highlightedSectionIndex: null,\n      highlightedSuggestionIndex: null,\n      highlightedSuggestion: null,\n      valueBeforeUpDown: null,\n      isCollapsed: !shouldRender\n    });\n\n    onBlur && onBlur(_this4.blurEvent, { highlightedSuggestion: highlightedSuggestion });\n  };\n\n  this.onSuggestionMouseLeave = function (event) {\n    _this4.resetHighlightedSuggestion(false); // shouldResetValueBeforeUpDown\n\n    if (_this4.justSelectedSuggestion && event.target === _this4.pressedSuggestion) {\n      _this4.justSelectedSuggestion = false;\n    }\n  };\n\n  this.onSuggestionTouchStart = function () {\n    _this4.justSelectedSuggestion = true;\n    // todo: event.preventDefault when https://github.com/facebook/react/issues/2043\n    // todo: gets released so onSuggestionMouseDown won't fire in chrome\n  };\n\n  this.onSuggestionTouchMove = function () {\n    _this4.justSelectedSuggestion = false;\n    _this4.pressedSuggestion = null;\n    _this4.input.focus();\n  };\n\n  this.itemProps = function (_ref4) {\n    var sectionIndex = _ref4.sectionIndex,\n        itemIndex = _ref4.itemIndex;\n\n    return {\n      'data-section-index': sectionIndex,\n      'data-suggestion-index': itemIndex,\n      onMouseEnter: _this4.onSuggestionMouseEnter,\n      onMouseLeave: _this4.onSuggestionMouseLeave,\n      onMouseDown: _this4.onSuggestionMouseDown,\n      onTouchStart: _this4.onSuggestionTouchStart,\n      onTouchMove: _this4.onSuggestionTouchMove,\n      onClick: _this4.onSuggestionClick\n    };\n  };\n\n  this.renderSuggestionsContainer = function (_ref5) {\n    var containerProps = _ref5.containerProps,\n        children = _ref5.children;\n    var renderSuggestionsContainer = _this4.props.renderSuggestionsContainer;\n\n\n    return renderSuggestionsContainer({\n      containerProps: containerProps,\n      children: children,\n      query: _this4.getQuery()\n    });\n  };\n};\n\nexports.default = Autosuggest;","'use strict';\n\nfunction shallowEqualArrays(arrA, arrB) {\n  if (arrA === arrB) {\n    return true;\n  }\n\n  if (!arrA || !arrB) {\n    return false;\n  }\n\n  var len = arrA.length;\n\n  if (arrB.length !== len) {\n    return false;\n  }\n\n  for (var i = 0; i < len; i++) {\n    if (arrA[i] !== arrB[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqualArrays;\n","'use strict';\n\nmodule.exports = require('./Autowhatever').default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _sectionIterator = require('section-iterator');\n\nvar _sectionIterator2 = _interopRequireDefault(_sectionIterator);\n\nvar _reactThemeable = require('react-themeable');\n\nvar _reactThemeable2 = _interopRequireDefault(_reactThemeable);\n\nvar _SectionTitle = require('./SectionTitle');\n\nvar _SectionTitle2 = _interopRequireDefault(_SectionTitle);\n\nvar _ItemsList = require('./ItemsList');\n\nvar _ItemsList2 = _interopRequireDefault(_ItemsList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar emptyObject = {};\nvar defaultRenderInputComponent = function defaultRenderInputComponent(props) {\n  return _react2.default.createElement('input', props);\n};\nvar defaultRenderItemsContainer = function defaultRenderItemsContainer(_ref) {\n  var containerProps = _ref.containerProps,\n      children = _ref.children;\n  return _react2.default.createElement(\n    'div',\n    containerProps,\n    children\n  );\n};\nvar defaultTheme = {\n  container: 'react-autowhatever__container',\n  containerOpen: 'react-autowhatever__container--open',\n  input: 'react-autowhatever__input',\n  inputOpen: 'react-autowhatever__input--open',\n  inputFocused: 'react-autowhatever__input--focused',\n  itemsContainer: 'react-autowhatever__items-container',\n  itemsContainerOpen: 'react-autowhatever__items-container--open',\n  itemsList: 'react-autowhatever__items-list',\n  item: 'react-autowhatever__item',\n  itemFirst: 'react-autowhatever__item--first',\n  itemHighlighted: 'react-autowhatever__item--highlighted',\n  sectionContainer: 'react-autowhatever__section-container',\n  sectionContainerFirst: 'react-autowhatever__section-container--first',\n  sectionTitle: 'react-autowhatever__section-title'\n};\n\nvar Autowhatever = function (_Component) {\n  _inherits(Autowhatever, _Component);\n\n  function Autowhatever(props) {\n    _classCallCheck(this, Autowhatever);\n\n    var _this = _possibleConstructorReturn(this, (Autowhatever.__proto__ || Object.getPrototypeOf(Autowhatever)).call(this, props));\n\n    _this.storeInputReference = function (input) {\n      if (input !== null) {\n        _this.input = input;\n      }\n    };\n\n    _this.storeItemsContainerReference = function (itemsContainer) {\n      if (itemsContainer !== null) {\n        _this.itemsContainer = itemsContainer;\n      }\n    };\n\n    _this.onHighlightedItemChange = function (highlightedItem) {\n      _this.highlightedItem = highlightedItem;\n    };\n\n    _this.getItemId = function (sectionIndex, itemIndex) {\n      if (itemIndex === null) {\n        return null;\n      }\n\n      var id = _this.props.id;\n\n      var section = sectionIndex === null ? '' : 'section-' + sectionIndex;\n\n      return 'react-autowhatever-' + id + '-' + section + '-item-' + itemIndex;\n    };\n\n    _this.onFocus = function (event) {\n      var inputProps = _this.props.inputProps;\n\n\n      _this.setState({\n        isInputFocused: true\n      });\n\n      inputProps.onFocus && inputProps.onFocus(event);\n    };\n\n    _this.onBlur = function (event) {\n      var inputProps = _this.props.inputProps;\n\n\n      _this.setState({\n        isInputFocused: false\n      });\n\n      inputProps.onBlur && inputProps.onBlur(event);\n    };\n\n    _this.onKeyDown = function (event) {\n      var _this$props = _this.props,\n          inputProps = _this$props.inputProps,\n          highlightedSectionIndex = _this$props.highlightedSectionIndex,\n          highlightedItemIndex = _this$props.highlightedItemIndex;\n\n\n      switch (event.key) {\n        case 'ArrowDown':\n        case 'ArrowUp':\n          {\n            var nextPrev = event.key === 'ArrowDown' ? 'next' : 'prev';\n\n            var _this$sectionIterator = _this.sectionIterator[nextPrev]([highlightedSectionIndex, highlightedItemIndex]),\n                _this$sectionIterator2 = _slicedToArray(_this$sectionIterator, 2),\n                newHighlightedSectionIndex = _this$sectionIterator2[0],\n                newHighlightedItemIndex = _this$sectionIterator2[1];\n\n            inputProps.onKeyDown(event, { newHighlightedSectionIndex: newHighlightedSectionIndex, newHighlightedItemIndex: newHighlightedItemIndex });\n            break;\n          }\n\n        default:\n          inputProps.onKeyDown(event, { highlightedSectionIndex: highlightedSectionIndex, highlightedItemIndex: highlightedItemIndex });\n      }\n    };\n\n    _this.highlightedItem = null;\n\n    _this.state = {\n      isInputFocused: false\n    };\n\n    _this.setSectionsItems(props);\n    _this.setSectionIterator(props);\n    _this.setTheme(props);\n    return _this;\n  }\n\n  _createClass(Autowhatever, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.ensureHighlightedItemIsVisible();\n    }\n\n    // eslint-disable-next-line camelcase, react/sort-comp\n\n  }, {\n    key: 'UNSAFE_componentWillReceiveProps',\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      if (nextProps.items !== this.props.items) {\n        this.setSectionsItems(nextProps);\n      }\n\n      if (nextProps.items !== this.props.items || nextProps.multiSection !== this.props.multiSection) {\n        this.setSectionIterator(nextProps);\n      }\n\n      if (nextProps.theme !== this.props.theme) {\n        this.setTheme(nextProps);\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this.ensureHighlightedItemIsVisible();\n    }\n  }, {\n    key: 'setSectionsItems',\n    value: function setSectionsItems(props) {\n      if (props.multiSection) {\n        this.sectionsItems = props.items.map(function (section) {\n          return props.getSectionItems(section);\n        });\n        this.sectionsLengths = this.sectionsItems.map(function (items) {\n          return items.length;\n        });\n        this.allSectionsAreEmpty = this.sectionsLengths.every(function (itemsCount) {\n          return itemsCount === 0;\n        });\n      }\n    }\n  }, {\n    key: 'setSectionIterator',\n    value: function setSectionIterator(props) {\n      this.sectionIterator = (0, _sectionIterator2.default)({\n        multiSection: props.multiSection,\n        data: props.multiSection ? this.sectionsLengths : props.items.length\n      });\n    }\n  }, {\n    key: 'setTheme',\n    value: function setTheme(props) {\n      this.theme = (0, _reactThemeable2.default)(props.theme);\n    }\n  }, {\n    key: 'renderSections',\n    value: function renderSections() {\n      var _this2 = this;\n\n      if (this.allSectionsAreEmpty) {\n        return null;\n      }\n\n      var theme = this.theme;\n      var _props = this.props,\n          id = _props.id,\n          items = _props.items,\n          renderItem = _props.renderItem,\n          renderItemData = _props.renderItemData,\n          renderSectionTitle = _props.renderSectionTitle,\n          highlightedSectionIndex = _props.highlightedSectionIndex,\n          highlightedItemIndex = _props.highlightedItemIndex,\n          itemProps = _props.itemProps;\n\n\n      return items.map(function (section, sectionIndex) {\n        var keyPrefix = 'react-autowhatever-' + id + '-';\n        var sectionKeyPrefix = keyPrefix + 'section-' + sectionIndex + '-';\n        var isFirstSection = sectionIndex === 0;\n\n        // `key` is provided by theme()\n        /* eslint-disable react/jsx-key */\n        return _react2.default.createElement(\n          'div',\n          theme(sectionKeyPrefix + 'container', 'sectionContainer', isFirstSection && 'sectionContainerFirst'),\n          _react2.default.createElement(_SectionTitle2.default, {\n            section: section,\n            renderSectionTitle: renderSectionTitle,\n            theme: theme,\n            sectionKeyPrefix: sectionKeyPrefix\n          }),\n          _react2.default.createElement(_ItemsList2.default, {\n            items: _this2.sectionsItems[sectionIndex],\n            itemProps: itemProps,\n            renderItem: renderItem,\n            renderItemData: renderItemData,\n            sectionIndex: sectionIndex,\n            highlightedItemIndex: highlightedSectionIndex === sectionIndex ? highlightedItemIndex : null,\n            onHighlightedItemChange: _this2.onHighlightedItemChange,\n            getItemId: _this2.getItemId,\n            theme: theme,\n            keyPrefix: keyPrefix,\n            ref: _this2.storeItemsListReference\n          })\n        );\n        /* eslint-enable react/jsx-key */\n      });\n    }\n  }, {\n    key: 'renderItems',\n    value: function renderItems() {\n      var items = this.props.items;\n\n\n      if (items.length === 0) {\n        return null;\n      }\n\n      var theme = this.theme;\n      var _props2 = this.props,\n          id = _props2.id,\n          renderItem = _props2.renderItem,\n          renderItemData = _props2.renderItemData,\n          highlightedSectionIndex = _props2.highlightedSectionIndex,\n          highlightedItemIndex = _props2.highlightedItemIndex,\n          itemProps = _props2.itemProps;\n\n\n      return _react2.default.createElement(_ItemsList2.default, {\n        items: items,\n        itemProps: itemProps,\n        renderItem: renderItem,\n        renderItemData: renderItemData,\n        highlightedItemIndex: highlightedSectionIndex === null ? highlightedItemIndex : null,\n        onHighlightedItemChange: this.onHighlightedItemChange,\n        getItemId: this.getItemId,\n        theme: theme,\n        keyPrefix: 'react-autowhatever-' + id + '-'\n      });\n    }\n  }, {\n    key: 'ensureHighlightedItemIsVisible',\n    value: function ensureHighlightedItemIsVisible() {\n      var highlightedItem = this.highlightedItem;\n\n\n      if (!highlightedItem) {\n        return;\n      }\n\n      var itemsContainer = this.itemsContainer;\n\n      var itemOffsetRelativeToContainer = highlightedItem.offsetParent === itemsContainer ? highlightedItem.offsetTop : highlightedItem.offsetTop - itemsContainer.offsetTop;\n\n      var scrollTop = itemsContainer.scrollTop; // Top of the visible area\n\n      if (itemOffsetRelativeToContainer < scrollTop) {\n        // Item is off the top of the visible area\n        scrollTop = itemOffsetRelativeToContainer;\n      } else if (itemOffsetRelativeToContainer + highlightedItem.offsetHeight > scrollTop + itemsContainer.offsetHeight) {\n        // Item is off the bottom of the visible area\n        scrollTop = itemOffsetRelativeToContainer + highlightedItem.offsetHeight - itemsContainer.offsetHeight;\n      }\n\n      if (scrollTop !== itemsContainer.scrollTop) {\n        itemsContainer.scrollTop = scrollTop;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var theme = this.theme;\n      var _props3 = this.props,\n          id = _props3.id,\n          multiSection = _props3.multiSection,\n          renderInputComponent = _props3.renderInputComponent,\n          renderItemsContainer = _props3.renderItemsContainer,\n          highlightedSectionIndex = _props3.highlightedSectionIndex,\n          highlightedItemIndex = _props3.highlightedItemIndex;\n      var isInputFocused = this.state.isInputFocused;\n\n      var renderedItems = multiSection ? this.renderSections() : this.renderItems();\n      var isOpen = renderedItems !== null;\n      var ariaActivedescendant = this.getItemId(highlightedSectionIndex, highlightedItemIndex);\n      var itemsContainerId = 'react-autowhatever-' + id;\n      var containerProps = _extends({\n        role: 'combobox',\n        'aria-haspopup': 'listbox',\n        'aria-owns': itemsContainerId,\n        'aria-expanded': isOpen\n      }, theme('react-autowhatever-' + id + '-container', 'container', isOpen && 'containerOpen'), this.props.containerProps);\n      var inputComponent = renderInputComponent(_extends({\n        type: 'text',\n        value: '',\n        autoComplete: 'off',\n        'aria-autocomplete': 'list',\n        'aria-controls': itemsContainerId,\n        'aria-activedescendant': ariaActivedescendant\n      }, theme('react-autowhatever-' + id + '-input', 'input', isOpen && 'inputOpen', isInputFocused && 'inputFocused'), this.props.inputProps, {\n        onFocus: this.onFocus,\n        onBlur: this.onBlur,\n        onKeyDown: this.props.inputProps.onKeyDown && this.onKeyDown,\n        ref: this.storeInputReference\n      }));\n      var itemsContainer = renderItemsContainer({\n        containerProps: _extends({\n          id: itemsContainerId,\n          role: 'listbox'\n        }, theme('react-autowhatever-' + id + '-items-container', 'itemsContainer', isOpen && 'itemsContainerOpen'), {\n          ref: this.storeItemsContainerReference\n        }),\n        children: renderedItems\n      });\n\n      return _react2.default.createElement(\n        'div',\n        containerProps,\n        inputComponent,\n        itemsContainer\n      );\n    }\n  }]);\n\n  return Autowhatever;\n}(_react.Component);\n\nAutowhatever.propTypes = {\n  id: _propTypes2.default.string, // Used in aria-* attributes. If multiple Autowhatever's are rendered on a page, they must have unique ids.\n  multiSection: _propTypes2.default.bool, // Indicates whether a multi section layout should be rendered.\n  renderInputComponent: _propTypes2.default.func, // When specified, it is used to render the input element.\n  renderItemsContainer: _propTypes2.default.func, // Renders the items container.\n  items: _propTypes2.default.array.isRequired, // Array of items or sections to render.\n  renderItem: _propTypes2.default.func, // This function renders a single item.\n  renderItemData: _propTypes2.default.object, // Arbitrary data that will be passed to renderItem()\n  renderSectionTitle: _propTypes2.default.func, // This function gets a section and renders its title.\n  getSectionItems: _propTypes2.default.func, // This function gets a section and returns its items, which will be passed into `renderItem` for rendering.\n  containerProps: _propTypes2.default.object, // Arbitrary container props\n  inputProps: _propTypes2.default.object, // Arbitrary input props\n  itemProps: _propTypes2.default.oneOfType([// Arbitrary item props\n  _propTypes2.default.object, _propTypes2.default.func]),\n  highlightedSectionIndex: _propTypes2.default.number, // Section index of the highlighted item\n  highlightedItemIndex: _propTypes2.default.number, // Highlighted item index (within a section)\n  theme: _propTypes2.default.oneOfType([// Styles. See: https://github.com/markdalgleish/react-themeable\n  _propTypes2.default.object, _propTypes2.default.array])\n};\nAutowhatever.defaultProps = {\n  id: '1',\n  multiSection: false,\n  renderInputComponent: defaultRenderInputComponent,\n  renderItemsContainer: defaultRenderItemsContainer,\n  renderItem: function renderItem() {\n    throw new Error('`renderItem` must be provided');\n  },\n  renderItemData: emptyObject,\n  renderSectionTitle: function renderSectionTitle() {\n    throw new Error('`renderSectionTitle` must be provided');\n  },\n  getSectionItems: function getSectionItems() {\n    throw new Error('`getSectionItems` must be provided');\n  },\n  containerProps: emptyObject,\n  inputProps: emptyObject,\n  itemProps: emptyObject,\n  highlightedSectionIndex: null,\n  highlightedItemIndex: null,\n  theme: defaultTheme\n};\nexports.default = Autowhatever;","\"use strict\";\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = function (_ref) {\n  var data = _ref.data;\n  var multiSection = _ref.multiSection;\n\n  function nextNonEmptySectionIndex(sectionIndex) {\n    if (sectionIndex === null) {\n      sectionIndex = 0;\n    } else {\n      sectionIndex++;\n    }\n\n    while (sectionIndex < data.length && data[sectionIndex] === 0) {\n      sectionIndex++;\n    }\n\n    return sectionIndex === data.length ? null : sectionIndex;\n  }\n\n  function prevNonEmptySectionIndex(sectionIndex) {\n    if (sectionIndex === null) {\n      sectionIndex = data.length - 1;\n    } else {\n      sectionIndex--;\n    }\n\n    while (sectionIndex >= 0 && data[sectionIndex] === 0) {\n      sectionIndex--;\n    }\n\n    return sectionIndex === -1 ? null : sectionIndex;\n  }\n\n  function next(position) {\n    var _position = _slicedToArray(position, 2);\n\n    var sectionIndex = _position[0];\n    var itemIndex = _position[1];\n\n\n    if (multiSection) {\n      if (itemIndex === null || itemIndex === data[sectionIndex] - 1) {\n        sectionIndex = nextNonEmptySectionIndex(sectionIndex);\n\n        if (sectionIndex === null) {\n          return [null, null];\n        }\n\n        return [sectionIndex, 0];\n      }\n\n      return [sectionIndex, itemIndex + 1];\n    }\n\n    if (data === 0 || itemIndex === data - 1) {\n      return [null, null];\n    }\n\n    if (itemIndex === null) {\n      return [null, 0];\n    }\n\n    return [null, itemIndex + 1];\n  }\n\n  function prev(position) {\n    var _position2 = _slicedToArray(position, 2);\n\n    var sectionIndex = _position2[0];\n    var itemIndex = _position2[1];\n\n\n    if (multiSection) {\n      if (itemIndex === null || itemIndex === 0) {\n        sectionIndex = prevNonEmptySectionIndex(sectionIndex);\n\n        if (sectionIndex === null) {\n          return [null, null];\n        }\n\n        return [sectionIndex, data[sectionIndex] - 1];\n      }\n\n      return [sectionIndex, itemIndex - 1];\n    }\n\n    if (data === 0 || itemIndex === 0) {\n      return [null, null];\n    }\n\n    if (itemIndex === null) {\n      return [null, data - 1];\n    }\n\n    return [null, itemIndex - 1];\n  }\n\n  function isLast(position) {\n    return next(position)[1] === null;\n  }\n\n  return {\n    next: next,\n    prev: prev,\n    isLast: isLast\n  };\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nvar _objectAssign = require('object-assign');\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar truthy = function truthy(x) {\n  return x;\n};\n\nexports['default'] = function (input) {\n  var _ref = Array.isArray(input) && input.length === 2 ? input : [input, null];\n\n  var _ref2 = _slicedToArray(_ref, 2);\n\n  var theme = _ref2[0];\n  var classNameDecorator = _ref2[1];\n\n  return function (key) {\n    for (var _len = arguments.length, names = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      names[_key - 1] = arguments[_key];\n    }\n\n    var styles = names.map(function (name) {\n      return theme[name];\n    }).filter(truthy);\n\n    return typeof styles[0] === 'string' || typeof classNameDecorator === 'function' ? { key: key, className: classNameDecorator ? classNameDecorator.apply(undefined, _toConsumableArray(styles)) : styles.join(' ') } : { key: key, style: _objectAssign2['default'].apply(undefined, [{}].concat(_toConsumableArray(styles))) };\n  };\n};\n\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _compareObjects = require('./compareObjects');\n\nvar _compareObjects2 = _interopRequireDefault(_compareObjects);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SectionTitle = function (_Component) {\n  _inherits(SectionTitle, _Component);\n\n  function SectionTitle() {\n    _classCallCheck(this, SectionTitle);\n\n    return _possibleConstructorReturn(this, (SectionTitle.__proto__ || Object.getPrototypeOf(SectionTitle)).apply(this, arguments));\n  }\n\n  _createClass(SectionTitle, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects2.default)(nextProps, this.props);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          section = _props.section,\n          renderSectionTitle = _props.renderSectionTitle,\n          theme = _props.theme,\n          sectionKeyPrefix = _props.sectionKeyPrefix;\n\n      var sectionTitle = renderSectionTitle(section);\n\n      if (!sectionTitle) {\n        return null;\n      }\n\n      return _react2.default.createElement(\n        'div',\n        theme(sectionKeyPrefix + 'title', 'sectionTitle'),\n        sectionTitle\n      );\n    }\n  }]);\n\n  return SectionTitle;\n}(_react.Component);\n\nSectionTitle.propTypes = {\n  section: _propTypes2.default.any.isRequired,\n  renderSectionTitle: _propTypes2.default.func.isRequired,\n  theme: _propTypes2.default.func.isRequired,\n  sectionKeyPrefix: _propTypes2.default.string.isRequired\n};\nexports.default = SectionTitle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _Item = require('./Item');\n\nvar _Item2 = _interopRequireDefault(_Item);\n\nvar _compareObjects = require('./compareObjects');\n\nvar _compareObjects2 = _interopRequireDefault(_compareObjects);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ItemsList = function (_Component) {\n  _inherits(ItemsList, _Component);\n\n  function ItemsList() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ItemsList);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ItemsList.__proto__ || Object.getPrototypeOf(ItemsList)).call.apply(_ref, [this].concat(args))), _this), _this.storeHighlightedItemReference = function (highlightedItem) {\n      _this.props.onHighlightedItemChange(highlightedItem === null ? null : highlightedItem.item);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(ItemsList, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects2.default)(nextProps, this.props, ['itemProps']);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props = this.props,\n          items = _props.items,\n          itemProps = _props.itemProps,\n          renderItem = _props.renderItem,\n          renderItemData = _props.renderItemData,\n          sectionIndex = _props.sectionIndex,\n          highlightedItemIndex = _props.highlightedItemIndex,\n          getItemId = _props.getItemId,\n          theme = _props.theme,\n          keyPrefix = _props.keyPrefix;\n\n      var sectionPrefix = sectionIndex === null ? keyPrefix : keyPrefix + 'section-' + sectionIndex + '-';\n      var isItemPropsFunction = typeof itemProps === 'function';\n\n      return _react2.default.createElement(\n        'ul',\n        _extends({ role: 'listbox' }, theme(sectionPrefix + 'items-list', 'itemsList')),\n        items.map(function (item, itemIndex) {\n          var isFirst = itemIndex === 0;\n          var isHighlighted = itemIndex === highlightedItemIndex;\n          var itemKey = sectionPrefix + 'item-' + itemIndex;\n          var itemPropsObj = isItemPropsFunction ? itemProps({ sectionIndex: sectionIndex, itemIndex: itemIndex }) : itemProps;\n          var allItemProps = _extends({\n            id: getItemId(sectionIndex, itemIndex),\n            'aria-selected': isHighlighted\n          }, theme(itemKey, 'item', isFirst && 'itemFirst', isHighlighted && 'itemHighlighted'), itemPropsObj);\n\n          if (isHighlighted) {\n            allItemProps.ref = _this2.storeHighlightedItemReference;\n          }\n\n          // `key` is provided by theme()\n          /* eslint-disable react/jsx-key */\n          return _react2.default.createElement(_Item2.default, _extends({}, allItemProps, {\n            sectionIndex: sectionIndex,\n            isHighlighted: isHighlighted,\n            itemIndex: itemIndex,\n            item: item,\n            renderItem: renderItem,\n            renderItemData: renderItemData\n          }));\n          /* eslint-enable react/jsx-key */\n        })\n      );\n    }\n  }]);\n\n  return ItemsList;\n}(_react.Component);\n\nItemsList.propTypes = {\n  items: _propTypes2.default.array.isRequired,\n  itemProps: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]),\n  renderItem: _propTypes2.default.func.isRequired,\n  renderItemData: _propTypes2.default.object.isRequired,\n  sectionIndex: _propTypes2.default.number,\n  highlightedItemIndex: _propTypes2.default.number,\n  onHighlightedItemChange: _propTypes2.default.func.isRequired,\n  getItemId: _propTypes2.default.func.isRequired,\n  theme: _propTypes2.default.func.isRequired,\n  keyPrefix: _propTypes2.default.string.isRequired\n};\nItemsList.defaultProps = {\n  sectionIndex: null\n};\nexports.default = ItemsList;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _compareObjects = require('./compareObjects');\n\nvar _compareObjects2 = _interopRequireDefault(_compareObjects);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Item = function (_Component) {\n  _inherits(Item, _Component);\n\n  function Item() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Item);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Item.__proto__ || Object.getPrototypeOf(Item)).call.apply(_ref, [this].concat(args))), _this), _this.storeItemReference = function (item) {\n      if (item !== null) {\n        _this.item = item;\n      }\n    }, _this.onMouseEnter = function (event) {\n      var _this$props = _this.props,\n          sectionIndex = _this$props.sectionIndex,\n          itemIndex = _this$props.itemIndex;\n\n\n      _this.props.onMouseEnter(event, { sectionIndex: sectionIndex, itemIndex: itemIndex });\n    }, _this.onMouseLeave = function (event) {\n      var _this$props2 = _this.props,\n          sectionIndex = _this$props2.sectionIndex,\n          itemIndex = _this$props2.itemIndex;\n\n\n      _this.props.onMouseLeave(event, { sectionIndex: sectionIndex, itemIndex: itemIndex });\n    }, _this.onMouseDown = function (event) {\n      var _this$props3 = _this.props,\n          sectionIndex = _this$props3.sectionIndex,\n          itemIndex = _this$props3.itemIndex;\n\n\n      _this.props.onMouseDown(event, { sectionIndex: sectionIndex, itemIndex: itemIndex });\n    }, _this.onClick = function (event) {\n      var _this$props4 = _this.props,\n          sectionIndex = _this$props4.sectionIndex,\n          itemIndex = _this$props4.itemIndex;\n\n\n      _this.props.onClick(event, { sectionIndex: sectionIndex, itemIndex: itemIndex });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Item, [{\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps) {\n      return (0, _compareObjects2.default)(nextProps, this.props, ['renderItemData']);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          isHighlighted = _props.isHighlighted,\n          item = _props.item,\n          renderItem = _props.renderItem,\n          renderItemData = _props.renderItemData,\n          restProps = _objectWithoutProperties(_props, ['isHighlighted', 'item', 'renderItem', 'renderItemData']);\n\n      delete restProps.sectionIndex;\n      delete restProps.itemIndex;\n\n      if (typeof restProps.onMouseEnter === 'function') {\n        restProps.onMouseEnter = this.onMouseEnter;\n      }\n\n      if (typeof restProps.onMouseLeave === 'function') {\n        restProps.onMouseLeave = this.onMouseLeave;\n      }\n\n      if (typeof restProps.onMouseDown === 'function') {\n        restProps.onMouseDown = this.onMouseDown;\n      }\n\n      if (typeof restProps.onClick === 'function') {\n        restProps.onClick = this.onClick;\n      }\n\n      return _react2.default.createElement(\n        'li',\n        _extends({ role: 'option' }, restProps, { ref: this.storeItemReference }),\n        renderItem(item, _extends({ isHighlighted: isHighlighted }, renderItemData))\n      );\n    }\n  }]);\n\n  return Item;\n}(_react.Component);\n\nItem.propTypes = {\n  sectionIndex: _propTypes2.default.number,\n  isHighlighted: _propTypes2.default.bool.isRequired,\n  itemIndex: _propTypes2.default.number.isRequired,\n  item: _propTypes2.default.any.isRequired,\n  renderItem: _propTypes2.default.func.isRequired,\n  renderItemData: _propTypes2.default.object.isRequired,\n  onMouseEnter: _propTypes2.default.func,\n  onMouseLeave: _propTypes2.default.func,\n  onMouseDown: _propTypes2.default.func,\n  onClick: _propTypes2.default.func\n};\nexports.default = Item;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar defaultTheme = exports.defaultTheme = {\n  container: 'react-autosuggest__container',\n  containerOpen: 'react-autosuggest__container--open',\n  input: 'react-autosuggest__input',\n  inputOpen: 'react-autosuggest__input--open',\n  inputFocused: 'react-autosuggest__input--focused',\n  suggestionsContainer: 'react-autosuggest__suggestions-container',\n  suggestionsContainerOpen: 'react-autosuggest__suggestions-container--open',\n  suggestionsList: 'react-autosuggest__suggestions-list',\n  suggestion: 'react-autosuggest__suggestion',\n  suggestionFirst: 'react-autosuggest__suggestion--first',\n  suggestionHighlighted: 'react-autosuggest__suggestion--highlighted',\n  sectionContainer: 'react-autosuggest__section-container',\n  sectionContainerFirst: 'react-autosuggest__section-container--first',\n  sectionTitle: 'react-autosuggest__section-title'\n};\n\nvar mapToAutowhateverTheme = exports.mapToAutowhateverTheme = function mapToAutowhateverTheme(theme) {\n  var result = {};\n\n  for (var key in theme) {\n    switch (key) {\n      case 'suggestionsContainer':\n        result['itemsContainer'] = theme[key];\n        break;\n\n      case 'suggestionsContainerOpen':\n        result['itemsContainerOpen'] = theme[key];\n        break;\n\n      case 'suggestion':\n        result['item'] = theme[key];\n        break;\n\n      case 'suggestionFirst':\n        result['itemFirst'] = theme[key];\n        break;\n\n      case 'suggestionHighlighted':\n        result['itemHighlighted'] = theme[key];\n        break;\n\n      case 'suggestionsList':\n        result['itemsList'] = theme[key];\n        break;\n\n      default:\n        result[key] = theme[key];\n    }\n  }\n\n  return result;\n};","// Diacritics.js\n// \n// Started as something to be an equivalent of the Google Java Library diacritics library for JavaScript.\n// Found this: http://jsperf.com/diacritics/6 and converted it into a reusable module.\n// \n// @author Nijiko Yonskai\n// @license MIT\n// @copyright Nijikokun 2013 <nijikokun@gmail.com>\n(function (name, definition) {\n  if (typeof module != 'undefined' && module.exports) module.exports = definition()\n  else if (typeof define == 'function' && define.amd) define(definition)\n  else this[name] = definition()\n})('Diacritics', function () {\n  // Create public object\n  var output = {\n    map: {}\n  };\n\n  // Create private reference map.\n  var reference = [\n    {'base':' ',    'letters':'\\u00A0'},\n    {'base':'A',    'letters':'\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'},\n    {'base':'AA',   'letters':'\\uA732'},\n    {'base':'AE',   'letters':'\\u00C6\\u01FC\\u01E2'},\n    {'base':'AO',   'letters':'\\uA734'},\n    {'base':'AU',   'letters':'\\uA736'},\n    {'base':'AV',   'letters':'\\uA738\\uA73A'},\n    {'base':'AY',   'letters':'\\uA73C'},\n    {'base':'B',    'letters':'\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'},\n    {'base':'C',    'letters':'\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'},\n    {'base':'D',    'letters':'\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'},\n    {'base':'DZ',   'letters':'\\u01F1\\u01C4'},\n    {'base':'Dz',   'letters':'\\u01F2\\u01C5'},\n    {'base':'E',    'letters':'\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'},\n    {'base':'F',    'letters':'\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'},\n    {'base':'G',    'letters':'\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'},\n    {'base':'H',    'letters':'\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'},\n    {'base':'I',    'letters':'\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'},\n    {'base':'J',    'letters':'\\u004A\\u24BF\\uFF2A\\u0134\\u0248'},\n    {'base':'K',    'letters':'\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'},\n    {'base':'L',    'letters':'\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'},\n    {'base':'LJ',   'letters':'\\u01C7'},\n    {'base':'Lj',   'letters':'\\u01C8'},\n    {'base':'M',    'letters':'\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'},\n    {'base':'N',    'letters':'\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'},\n    {'base':'NJ',   'letters':'\\u01CA'},\n    {'base':'Nj',   'letters':'\\u01CB'},\n    {'base':'O',    'letters':'\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'},\n    {'base':'OI',   'letters':'\\u01A2'},\n    {'base':'OO',   'letters':'\\uA74E'},\n    {'base':'OU',   'letters':'\\u0222'},\n    {'base':'P',    'letters':'\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'},\n    {'base':'Q',    'letters':'\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'},\n    {'base':'R',    'letters':'\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'},\n    {'base':'S',    'letters':'\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'},\n    {'base':'T',    'letters':'\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'},\n    {'base':'Th',   'letters':'\\u00DE'},\n    {'base':'TZ',   'letters':'\\uA728'},\n    {'base':'U',    'letters':'\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'},\n    {'base':'V',    'letters':'\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'},\n    {'base':'VY',   'letters':'\\uA760'},\n    {'base':'W',    'letters':'\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'},\n    {'base':'X',    'letters':'\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'},\n    {'base':'Y',    'letters':'\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'},\n    {'base':'Z',    'letters':'\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'},\n    {'base':'a',    'letters':'\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251'},\n    {'base':'aa',   'letters':'\\uA733'},\n    {'base':'ae',   'letters':'\\u00E6\\u01FD\\u01E3'},\n    {'base':'ao',   'letters':'\\uA735'},\n    {'base':'au',   'letters':'\\uA737'},\n    {'base':'av',   'letters':'\\uA739\\uA73B'},\n    {'base':'ay',   'letters':'\\uA73D'},\n    {'base':'b',    'letters':'\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'},\n    {'base':'c',    'letters':'\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'},\n    {'base':'d',    'letters':'\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'},\n    {'base':'dz',   'letters':'\\u01F3\\u01C6'},\n    {'base':'e',    'letters':'\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'},\n    {'base':'f',    'letters':'\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'},\n    {'base':'ff',   'letters':'\\uFB00'},\n    {'base':'fi',   'letters':'\\uFB01'},\n    {'base':'fl',   'letters':'\\uFB02'},\n    {'base':'ffi',  'letters':'\\uFB03'},\n    {'base':'ffl',  'letters':'\\uFB04'},\n    {'base':'g',    'letters':'\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'},\n    {'base':'h',    'letters':'\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'},\n    {'base':'hv',   'letters':'\\u0195'},\n    {'base':'i',    'letters':'\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'},\n    {'base':'j',    'letters':'\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'},\n    {'base':'k',    'letters':'\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'},\n    {'base':'l',    'letters':'\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'},\n    {'base':'lj',   'letters':'\\u01C9'},\n    {'base':'m',    'letters':'\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'},\n    {'base':'n',    'letters':'\\x6E\\xF1\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509'},\n    {'base':'nj',   'letters':'\\u01CC'},\n    {'base':'o',    'letters':'\\u07C0\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'},\n    {'base':'oe',   'letters':'\\u0152\\u0153'},\n    {'base':'oi',   'letters':'\\u01A3'},\n    {'base':'ou',   'letters':'\\u0223'},\n    {'base':'oo',   'letters':'\\uA74F'},\n    {'base':'p',    'letters':'\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'},\n    {'base':'q',    'letters':'\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'},\n    {'base':'r',    'letters':'\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'},\n    {'base':'s',    'letters':'\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'},\n    {'base':'ss',   'letters':'\\xDF'},\n    {'base':'t',    'letters':'\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'},\n    {'base':'th',   'letters':'\\u00FE'},\n    {'base':'tz',   'letters':'\\uA729'},\n    {'base':'u',    'letters': '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'},\n    {'base':'v',    'letters':'\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'},\n    {'base':'vy',   'letters':'\\uA761'},\n    {'base':'w',    'letters':'\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'},\n    {'base':'x',    'letters':'\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'},\n    {'base':'y',    'letters':'\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'},\n    {'base':'z',    'letters':'\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'}\n  ];\n\n  // Generate reference mapping\n  for (var i = 0, refLength = reference.length; i < refLength; i++){\n    var letters = reference[i].letters.split(\"\");\n\n    for (var j = 0, letLength = letters.length; j < letLength; j++){\n      output.map[letters[j]] = reference[i].base;\n    }\n  }\n\n  /**\n   * Clean accents (diacritics) from string.\n   * \n   * @param  {String} input String to be cleaned of diacritics.\n   * @return {String}\n   */\n  output.clean = function (input) {\n    if (!input || !input.length || input.length < 1) {\n      return \"\";\n    }\n\n    var string = \"\";\n    var letters = input.split(\"\");\n    var index = 0;\n    var length = letters.length;\n    var letter;\n\n    for (; index < length; index++) {\n      letter = letters[index];\n      string += letter in output.map ? output.map[letter] : letter;\n    }\n\n    return string;\n  };\n\n  return output;\n});","// Generated by CoffeeScript 1.12.2\n(function() {\n  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n  if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n    module.exports = function() {\n      return performance.now();\n    };\n  } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n    module.exports = function() {\n      return (getNanoSeconds() - nodeLoadTime) / 1e6;\n    };\n    hrtime = process.hrtime;\n    getNanoSeconds = function() {\n      var hr;\n      hr = hrtime();\n      return hr[0] * 1e9 + hr[1];\n    };\n    moduleLoadTime = getNanoSeconds();\n    upTime = process.uptime() * 1e9;\n    nodeLoadTime = moduleLoadTime - upTime;\n  } else if (Date.now) {\n    module.exports = function() {\n      return Date.now() - loadTime;\n    };\n    loadTime = Date.now();\n  } else {\n    module.exports = function() {\n      return new Date().getTime() - loadTime;\n    };\n    loadTime = new Date().getTime();\n  }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var basePickBy = require('./_basePickBy'),\n    hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","(function(root,factory){\n    if (typeof define === 'function' && define.amd) {\n        define(factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory();\n    } else {\n        root.eventListener = factory();\n  }\n}(this, function () {\n\tfunction wrap(standard, fallback) {\n\t\treturn function (el, evtName, listener, useCapture) {\n\t\t\tif (el[standard]) {\n\t\t\t\tel[standard](evtName, listener, useCapture);\n\t\t\t} else if (el[fallback]) {\n\t\t\t\tel[fallback]('on' + evtName, listener);\n\t\t\t}\n\t\t}\n\t}\n\n    return {\n\t\tadd: wrap('addEventListener', 'attachEvent'),\n\t\tremove: wrap('removeEventListener', 'detachEvent')\n\t};\n}));","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar style = function style(element, prop) {\n  return typeof getComputedStyle !== 'undefined' ? getComputedStyle(element, null).getPropertyValue(prop) : element.style[prop];\n};\n\nvar overflow = function overflow(element) {\n  return style(element, 'overflow') + style(element, 'overflow-y') + style(element, 'overflow-x');\n};\n\nvar scrollParent = function scrollParent(element) {\n  if (!(element instanceof HTMLElement)) {\n    return window;\n  }\n\n  var parent = element;\n\n  while (parent) {\n    if (parent === document.body || parent === document.documentElement) {\n      break;\n    }\n\n    if (!parent.parentNode) {\n      break;\n    }\n\n    if (/(scroll|auto)/.test(overflow(parent))) {\n      return parent;\n    }\n\n    parent = parent.parentNode;\n  }\n\n  return window;\n};\n\nexports.default = scrollParent;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = inViewport;\n\nvar _getElementPosition = require('./getElementPosition');\n\nvar _getElementPosition2 = _interopRequireDefault(_getElementPosition);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isHidden = function isHidden(element) {\n  return element.offsetParent === null;\n};\n\nfunction inViewport(element, container, customOffset) {\n  if (isHidden(element)) {\n    return false;\n  }\n\n  var top = void 0;\n  var bottom = void 0;\n  var left = void 0;\n  var right = void 0;\n\n  if (typeof container === 'undefined' || container === window) {\n    top = window.pageYOffset;\n    left = window.pageXOffset;\n    bottom = top + window.innerHeight;\n    right = left + window.innerWidth;\n  } else {\n    var containerPosition = (0, _getElementPosition2.default)(container);\n\n    top = containerPosition.top;\n    left = containerPosition.left;\n    bottom = top + container.offsetHeight;\n    right = left + container.offsetWidth;\n  }\n\n  var elementPosition = (0, _getElementPosition2.default)(element);\n\n  return top <= elementPosition.top + element.offsetHeight + customOffset.top && bottom >= elementPosition.top - customOffset.bottom && left <= elementPosition.left + element.offsetWidth + customOffset.left && right >= elementPosition.left - customOffset.right;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getElementPosition;\n/*\n* Finds element's position relative to the whole document,\n* rather than to the viewport as it is the case with .getBoundingClientRect().\n*/\nfunction getElementPosition(element) {\n  var rect = element.getBoundingClientRect();\n\n  return {\n    top: rect.top + window.pageYOffset,\n    left: rect.left + window.pageXOffset\n  };\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _createMuiTheme = _interopRequireDefault(require(\"./createMuiTheme\"));\n\nvar defaultTheme = (0, _createMuiTheme.default)();\nvar _default = defaultTheme;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _createBreakpoints = _interopRequireDefault(require(\"./createBreakpoints\"));\n\nvar _createMixins = _interopRequireDefault(require(\"./createMixins\"));\n\nvar _createPalette = _interopRequireDefault(require(\"./createPalette\"));\n\nvar _createTypography = _interopRequireDefault(require(\"./createTypography\"));\n\nvar _shadows = _interopRequireDefault(require(\"./shadows\"));\n\nvar _shape = _interopRequireDefault(require(\"./shape\"));\n\nvar _createSpacing = _interopRequireDefault(require(\"./createSpacing\"));\n\nvar _transitions = _interopRequireDefault(require(\"./transitions\"));\n\nvar _zIndex = _interopRequireDefault(require(\"./zIndex\"));\n\nfunction createMuiTheme() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _options$breakpoints = options.breakpoints,\n      breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n      _options$mixins = options.mixins,\n      mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n      _options$palette = options.palette,\n      paletteInput = _options$palette === void 0 ? {} : _options$palette,\n      spacingInput = options.spacing,\n      _options$typography = options.typography,\n      typographyInput = _options$typography === void 0 ? {} : _options$typography,\n      other = (0, _objectWithoutProperties2.default)(options, [\"breakpoints\", \"mixins\", \"palette\", \"spacing\", \"typography\"]);\n  var palette = (0, _createPalette.default)(paletteInput);\n  var breakpoints = (0, _createBreakpoints.default)(breakpointsInput);\n  var spacing = (0, _createSpacing.default)(spacingInput);\n  var muiTheme = (0, _utils.deepmerge)({\n    breakpoints: breakpoints,\n    direction: 'ltr',\n    mixins: (0, _createMixins.default)(breakpoints, spacing, mixinsInput),\n    overrides: {},\n    // Inject custom styles\n    palette: palette,\n    props: {},\n    // Provide default props\n    shadows: _shadows.default,\n    typography: (0, _createTypography.default)(palette, typographyInput),\n    spacing: spacing,\n    shape: _shape.default,\n    transitions: _transitions.default,\n    zIndex: _zIndex.default\n  }, other);\n\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  muiTheme = args.reduce(function (acc, argument) {\n    return (0, _utils.deepmerge)(acc, argument);\n  }, muiTheme);\n\n  if (process.env.NODE_ENV !== 'production') {\n    var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected'];\n\n    var traverse = function traverse(node, parentKey) {\n      var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n      for (key in node) {\n        var child = node[key];\n\n        if (depth === 1) {\n          if (key.indexOf('Mui') === 0 && child) {\n            traverse(child, key, depth + 1);\n          }\n        } else if (pseudoClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            console.error([\"Material-UI: the `\".concat(parentKey, \"` component increases \") + \"the CSS specificity of the `\".concat(key, \"` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify({\n              root: (0, _defineProperty2.default)({}, \"&$\".concat(key), child)\n            }, null, 2), '', 'https://material-ui.com/r/pseudo-classes-guide'].join('\\n'));\n          } // Remove the style to prevent global conflicts.\n\n\n          node[key] = {};\n        }\n      }\n    };\n\n    traverse(muiTheme.overrides);\n  }\n\n  return muiTheme;\n}\n\nvar _default = createMuiTheme;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createBreakpoints;\nexports.keys = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nvar keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nexports.keys = keys;\n\nfunction createBreakpoints(breakpoints) {\n  var _breakpoints$values = breakpoints.values,\n      values = _breakpoints$values === void 0 ? {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920\n  } : _breakpoints$values,\n      _breakpoints$unit = breakpoints.unit,\n      unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n      _breakpoints$step = breakpoints.step,\n      step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n      other = (0, _objectWithoutProperties2.default)(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n  function up(key) {\n    var value = typeof values[key] === 'number' ? values[key] : key;\n    return \"@media (min-width:\".concat(value).concat(unit, \")\");\n  }\n\n  function down(key) {\n    var endIndex = keys.indexOf(key) + 1;\n    var upperbound = values[keys[endIndex]];\n\n    if (endIndex === keys.length) {\n      // xl down applies to all sizes\n      return up('xs');\n    }\n\n    var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n    return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n  }\n\n  function between(start, end) {\n    var endIndex = keys.indexOf(end);\n\n    if (endIndex === keys.length - 1) {\n      return up(start);\n    }\n\n    return \"@media (min-width:\".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, \") and \") + \"(max-width:\".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, \")\");\n  }\n\n  function only(key) {\n    return between(key, key);\n  }\n\n  function width(key) {\n    return values[key];\n  }\n\n  return (0, _extends2.default)({\n    keys: keys,\n    values: values,\n    up: up,\n    down: down,\n    between: between,\n    only: only,\n    width: width\n  }, other);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createMixins;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nfunction createMixins(breakpoints, spacing, mixins) {\n  var _toolbar;\n\n  return (0, _extends3.default)({\n    gutters: function gutters() {\n      var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      // To deprecate in v4.1\n      //       warning(\n      //         false,\n      //         [\n      //           'Material-UI: theme.mixins.gutters() is deprecated.',\n      //           'You can use the source of the mixin directly:',\n      //           `\n      // paddingLeft: theme.spacing(2),\n      // paddingRight: theme.spacing(2),\n      // [theme.breakpoints.up('sm')]: {\n      //   paddingLeft: theme.spacing(3),\n      //   paddingRight: theme.spacing(3),\n      // },\n      // `,\n      //         ].join('\\n'),\n      //       );\n      return (0, _extends3.default)({\n        paddingLeft: spacing(2),\n        paddingRight: spacing(2)\n      }, styles, (0, _defineProperty2.default)({}, breakpoints.up('sm'), (0, _extends3.default)({\n        paddingLeft: spacing(3),\n        paddingRight: spacing(3)\n      }, styles[breakpoints.up('sm')])));\n    },\n    toolbar: (_toolbar = {\n      minHeight: 56\n    }, (0, _defineProperty2.default)(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n      minHeight: 48\n    }), (0, _defineProperty2.default)(_toolbar, breakpoints.up('sm'), {\n      minHeight: 64\n    }), _toolbar)\n  }, mixins);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createPalette;\nexports.dark = exports.light = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _common = _interopRequireDefault(require(\"../colors/common\"));\n\nvar _grey = _interopRequireDefault(require(\"../colors/grey\"));\n\nvar _indigo = _interopRequireDefault(require(\"../colors/indigo\"));\n\nvar _pink = _interopRequireDefault(require(\"../colors/pink\"));\n\nvar _red = _interopRequireDefault(require(\"../colors/red\"));\n\nvar _orange = _interopRequireDefault(require(\"../colors/orange\"));\n\nvar _blue = _interopRequireDefault(require(\"../colors/blue\"));\n\nvar _green = _interopRequireDefault(require(\"../colors/green\"));\n\nvar _colorManipulator = require(\"./colorManipulator\");\n\nvar light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.54)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    // Text hints.\n    hint: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: _common.default.white,\n    default: _grey.default[50]\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)'\n  }\n};\nexports.light = light;\nvar dark = {\n  text: {\n    primary: _common.default.white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    hint: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: _grey.default[800],\n    default: '#303030'\n  },\n  action: {\n    active: _common.default.white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)'\n  }\n};\nexports.dark = dark;\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = (0, _colorManipulator.lighten)(intent.main, tonalOffset);\n    } else if (direction === 'dark') {\n      intent.dark = (0, _colorManipulator.darken)(intent.main, tonalOffset * 1.5);\n    }\n  }\n}\n\nfunction createPalette(palette) {\n  var _palette$primary = palette.primary,\n      primary = _palette$primary === void 0 ? {\n    light: _indigo.default[300],\n    main: _indigo.default[500],\n    dark: _indigo.default[700]\n  } : _palette$primary,\n      _palette$secondary = palette.secondary,\n      secondary = _palette$secondary === void 0 ? {\n    light: _pink.default.A200,\n    main: _pink.default.A400,\n    dark: _pink.default.A700\n  } : _palette$secondary,\n      _palette$error = palette.error,\n      error = _palette$error === void 0 ? {\n    light: _red.default[300],\n    main: _red.default[500],\n    dark: _red.default[700]\n  } : _palette$error,\n      _palette$warning = palette.warning,\n      warning = _palette$warning === void 0 ? {\n    light: _orange.default[300],\n    main: _orange.default[500],\n    dark: _orange.default[700]\n  } : _palette$warning,\n      _palette$info = palette.info,\n      info = _palette$info === void 0 ? {\n    light: _blue.default[300],\n    main: _blue.default[500],\n    dark: _blue.default[700]\n  } : _palette$info,\n      _palette$success = palette.success,\n      success = _palette$success === void 0 ? {\n    light: _green.default[300],\n    main: _green.default[500],\n    dark: _green.default[700]\n  } : _palette$success,\n      _palette$type = palette.type,\n      type = _palette$type === void 0 ? 'light' : _palette$type,\n      _palette$contrastThre = palette.contrastThreshold,\n      contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n      _palette$tonalOffset = palette.tonalOffset,\n      tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n      other = (0, _objectWithoutProperties2.default)(palette, [\"primary\", \"secondary\", \"error\", \"warning\", \"info\", \"success\", \"type\", \"contrastThreshold\", \"tonalOffset\"]); // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n  function getContrastText(background) {\n    if (!background) {\n      throw new TypeError(\"Material-UI: missing background argument in getContrastText(\".concat(background, \").\"));\n    }\n\n    var contrastText = (0, _colorManipulator.getContrastRatio)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n    if (process.env.NODE_ENV !== 'production') {\n      var contrast = (0, _colorManipulator.getContrastRatio)(background, contrastText);\n\n      if (contrast < 3) {\n        console.error([\"Material-UI: the contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n\n    return contrastText;\n  }\n\n  function augmentColor(color) {\n    var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n    var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n    var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n    color = (0, _extends2.default)({}, color);\n\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!color.main) {\n        throw new Error(['Material-UI: the color provided to augmentColor(color) is invalid.', \"The color object needs to have a `main` property or a `\".concat(mainShade, \"` property.\")].join('\\n'));\n      }\n    }\n\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n\n    return color;\n  }\n\n  var types = {\n    dark: dark,\n    light: light\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (!types[type]) {\n      console.error(\"Material-UI: the palette type `\".concat(type, \"` is not supported.\"));\n    }\n  }\n\n  var paletteOutput = (0, _utils.deepmerge)((0, _extends2.default)({\n    // A collection of common colors.\n    common: _common.default,\n    // The palette type, can be light or dark.\n    type: type,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor(primary),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor(error),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor(warning),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor(info),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor(success),\n    // The grey colors.\n    grey: _grey.default,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold: contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText: getContrastText,\n    // Generate a rich color object.\n    augmentColor: augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset: tonalOffset\n  }, types[type]), other);\n  return paletteOutput;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar common = {\n  black: '#000',\n  white: '#fff'\n};\nvar _default = common;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#d5d5d5',\n  A200: '#aaaaaa',\n  A400: '#303030',\n  A700: '#616161'\n};\nvar _default = grey;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar indigo = {\n  50: '#e8eaf6',\n  100: '#c5cae9',\n  200: '#9fa8da',\n  300: '#7986cb',\n  400: '#5c6bc0',\n  500: '#3f51b5',\n  600: '#3949ab',\n  700: '#303f9f',\n  800: '#283593',\n  900: '#1a237e',\n  A100: '#8c9eff',\n  A200: '#536dfe',\n  A400: '#3d5afe',\n  A700: '#304ffe'\n};\nvar _default = indigo;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar pink = {\n  50: '#fce4ec',\n  100: '#f8bbd0',\n  200: '#f48fb1',\n  300: '#f06292',\n  400: '#ec407a',\n  500: '#e91e63',\n  600: '#d81b60',\n  700: '#c2185b',\n  800: '#ad1457',\n  900: '#880e4f',\n  A100: '#ff80ab',\n  A200: '#ff4081',\n  A400: '#f50057',\n  A700: '#c51162'\n};\nvar _default = pink;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nvar _default = red;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nvar _default = orange;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nvar _default = blue;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nvar _default = green;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.hexToRgb = hexToRgb;\nexports.rgbToHex = rgbToHex;\nexports.hslToRgb = hslToRgb;\nexports.decomposeColor = decomposeColor;\nexports.recomposeColor = recomposeColor;\nexports.getContrastRatio = getContrastRatio;\nexports.getLuminance = getLuminance;\nexports.emphasize = emphasize;\nexports.fade = fade;\nexports.darken = darken;\nexports.lighten = lighten;\n\n/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(\"Material-UI: the value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\"));\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nfunction hexToRgb(color) {\n  color = color.substr(1);\n  var re = new RegExp(\".{1,\".concat(color.length / 3, \"}\"), 'g');\n  var colors = color.match(re);\n\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(function (n) {\n      return n + n;\n    });\n  }\n\n  return colors ? \"rgb(\".concat(colors.map(function (n) {\n    return parseInt(n, 16);\n  }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n  var hex = int.toString(16);\n  return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nfunction rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  var _decomposeColor = decomposeColor(color),\n      values = _decomposeColor.values;\n\n  return \"#\".concat(values.map(function (n) {\n    return intToHex(n);\n  }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\n\nfunction hslToRgb(color) {\n  color = decomposeColor(color);\n  var _color = color,\n      values = _color.values;\n  var h = values[0];\n  var s = values[1] / 100;\n  var l = values[2] / 100;\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  var type = 'rgb';\n  var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({\n    type: type,\n    values: rgb\n  });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\n\nfunction decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  var marker = color.indexOf('(');\n  var type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n    throw new Error([\"Material-UI: unsupported `\".concat(color, \"` color.\"), 'We support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().'].join('\\n'));\n  }\n\n  var values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map(function (value) {\n    return parseFloat(value);\n  });\n  return {\n    type: type,\n    values: values\n  };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\n\nfunction recomposeColor(color) {\n  var type = color.type;\n  var values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map(function (n, i) {\n      return i < 3 ? parseInt(n, 10) : n;\n    });\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = \"\".concat(values[1], \"%\");\n    values[2] = \"\".concat(values[2], \"%\");\n  }\n\n  return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\n\nfunction getContrastRatio(foreground, background) {\n  var lumA = getLuminance(foreground);\n  var lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\n\nfunction getLuminance(color) {\n  color = decomposeColor(color);\n  var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(function (val) {\n    val /= 255; // normalized\n\n    return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n  }); // Truncate at 3 digits\n\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\n\nfunction emphasize(color) {\n  var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\n\nfunction fade(color, value) {\n  color = decomposeColor(color);\n  value = clamp(value);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n\n  color.values[3] = value;\n  return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\n\nfunction darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\n\nfunction lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createTypography;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n  textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nfunction createTypography(palette, typography) {\n  var _ref = typeof typography === 'function' ? typography(palette) : typography,\n      _ref$fontFamily = _ref.fontFamily,\n      fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n      _ref$fontSize = _ref.fontSize,\n      fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n      _ref$fontWeightLight = _ref.fontWeightLight,\n      fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n      _ref$fontWeightRegula = _ref.fontWeightRegular,\n      fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n      _ref$fontWeightMedium = _ref.fontWeightMedium,\n      fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n      _ref$fontWeightBold = _ref.fontWeightBold,\n      fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n      _ref$htmlFontSize = _ref.htmlFontSize,\n      htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n      allVariants = _ref.allVariants,\n      pxToRem2 = _ref.pxToRem,\n      other = (0, _objectWithoutProperties2.default)(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('Material-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Material-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  var coef = fontSize / 14;\n\n  var pxToRem = pxToRem2 || function (size) {\n    return \"\".concat(size / htmlFontSize * coef, \"rem\");\n  };\n\n  var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n    return (0, _extends2.default)({\n      fontFamily: fontFamily,\n      fontWeight: fontWeight,\n      fontSize: pxToRem(size),\n      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n      lineHeight: lineHeight\n    }, fontFamily === defaultFontFamily ? {\n      letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n    } : {}, {}, casing, {}, allVariants);\n  };\n\n  var variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n  };\n  return (0, _utils.deepmerge)((0, _extends2.default)({\n    htmlFontSize: htmlFontSize,\n    pxToRem: pxToRem,\n    round: round,\n    // TODO To remove in v5?\n    fontFamily: fontFamily,\n    fontSize: fontSize,\n    fontWeightLight: fontWeightLight,\n    fontWeightRegular: fontWeightRegular,\n    fontWeightMedium: fontWeightMedium,\n    fontWeightBold: fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n\n  });\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n  return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nvar _default = shadows;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar shape = {\n  borderRadius: 4\n};\nvar _default = shape;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createSpacing;\nvar warnOnce;\n\nfunction createSpacing() {\n  var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  } // All components align to an 8dp square baseline grid for mobile, tablet, and desktop.\n  // https://material.io/design/layout/understanding-layout.html#pixel-density\n\n\n  var transform;\n\n  if (typeof spacingInput === 'function') {\n    transform = spacingInput;\n  } else {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof spacingInput !== 'number') {\n        console.error([\"Material-UI: the `theme.spacing` value (\".concat(spacingInput, \") is invalid.\"), 'It should be a number or a function.'].join('\\n'));\n      }\n    }\n\n    transform = function transform(factor) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof factor !== 'number') {\n          console.error(\"Expected spacing argument to be a number, got \".concat(factor));\n        }\n      }\n\n      return spacingInput * factor;\n    };\n  }\n\n  var spacing = function spacing() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(args.length <= 4)) {\n        console.error(\"Material-UI: Too many arguments provided, expected between 0 and 4, got \".concat(args.length));\n      }\n    }\n\n    if (args.length === 0) {\n      return transform(1);\n    }\n\n    if (args.length === 1) {\n      return transform(args[0]);\n    }\n\n    return args.map(function (factor) {\n      var output = transform(factor);\n      return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n    }).join(' ');\n  }; // Backward compatibility, to remove in v5.\n\n\n  Object.defineProperty(spacing, 'unit', {\n    get: function get() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!warnOnce || process.env.NODE_ENV === 'test') {\n          console.error(['Material-UI: theme.spacing.unit usage has been deprecated.', 'It will be removed in v5.', 'You can replace `theme.spacing.unit * y` with `theme.spacing(y)`.', '', 'You can use the `https://github.com/mui-org/material-ui/tree/master/packages/material-ui-codemod/README.md#theme-spacing-api` migration helper to make the process smoother.'].join('\\n'));\n        }\n\n        warnOnce = true;\n      }\n\n      return spacingInput;\n    }\n  });\n  spacing.mui = true;\n  return spacing;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.duration = exports.easing = void 0;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nexports.easing = easing;\nvar duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\nexports.duration = duration;\n\nfunction formatMs(milliseconds) {\n  return \"\".concat(Math.round(milliseconds), \"ms\");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\nvar _default = {\n  easing: easing,\n  duration: duration,\n  create: function create() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _options$duration = options.duration,\n        durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n        _options$easing = options.easing,\n        easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n        _options$delay = options.delay,\n        delay = _options$delay === void 0 ? 0 : _options$delay,\n        other = (0, _objectWithoutProperties2.default)(options, [\"duration\", \"easing\", \"delay\"]);\n\n    if (process.env.NODE_ENV !== 'production') {\n      var isString = function isString(value) {\n        return typeof value === 'string';\n      };\n\n      var isNumber = function isNumber(value) {\n        return !isNaN(parseFloat(value));\n      };\n\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('Material-UI: argument \"props\" must be a string or Array.');\n      }\n\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(\"Material-UI: argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\"));\n      }\n\n      if (!isString(easingOption)) {\n        console.error('Material-UI: argument \"easing\" must be a string.');\n      }\n\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('Material-UI: argument \"delay\" must be a number or a string.');\n      }\n\n      if (Object.keys(other).length !== 0) {\n        console.error(\"Material-UI: unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"]\"));\n      }\n    }\n\n    return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n      return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n    }).join(',');\n  },\n  getAutoHeightDuration: function getAutoHeightDuration(height) {\n    if (!height) {\n      return 0;\n    }\n\n    var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n    return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n  }\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n  mobileStepper: 1000,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nvar _default = zIndex;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = capitalize;\n\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof string !== 'string') {\n      throw new Error('Material-UI: capitalize(string) expects a string argument.');\n    }\n  }\n\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || isEnum.call(O, key)) {\n        result.push(isEntries ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","require('../../modules/es6.date.now');\nmodule.exports = require('../../modules/_core').Date.now;\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","require('../../modules/es6.number.is-integer');\nmodule.exports = require('../../modules/_core').Number.isInteger;\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _default = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n  return $Object.getOwnPropertyDescriptor(it, key);\n};\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    // eslint-disable-next-line no-prototype-builtins\n    || Iterators.hasOwnProperty(classof(O));\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n  var iterFn = get(it);\n  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"DraggableCore\", {\n  enumerable: true,\n  get: function () {\n    return _DraggableCore.default;\n  }\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _DraggableCore = _interopRequireDefault(require(\"./DraggableCore\"));\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); } /*:: import type {ControlPosition, PositionOffsetControlPosition, DraggableCoreProps, DraggableCoreDefaultProps} from './DraggableCore';*/\n/*:: import type {Bounds, DraggableEventHandler} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n/*:: type DraggableState = {\n  dragging: boolean,\n  dragged: boolean,\n  x: number, y: number,\n  slackX: number, slackY: number,\n  isElementSVG: boolean,\n  prevPropsPosition: ?ControlPosition,\n};*/\n/*:: export type DraggableDefaultProps = {\n  ...DraggableCoreDefaultProps,\n  axis: 'both' | 'x' | 'y' | 'none',\n  bounds: Bounds | string | false,\n  defaultClassName: string,\n  defaultClassNameDragging: string,\n  defaultClassNameDragged: string,\n  defaultPosition: ControlPosition,\n  scale: number,\n};*/\n/*:: export type DraggableProps = {\n  ...DraggableCoreProps,\n  ...DraggableDefaultProps,\n  positionOffset: PositionOffsetControlPosition,\n  position: ControlPosition,\n};*/\n//\n// Define <Draggable>\n//\nclass Draggable extends React.Component /*:: <DraggableProps, DraggableState>*/{\n  // React 16.3+\n  // Arity (props, state)\n  static getDerivedStateFromProps(_ref /*:: */, _ref2 /*:: */) /*: ?Partial<DraggableState>*/{\n    let {\n      position\n    } /*: DraggableProps*/ = _ref /*: DraggableProps*/;\n    let {\n      prevPropsPosition\n    } /*: DraggableState*/ = _ref2 /*: DraggableState*/;\n    // Set x/y if a new position is provided in props that is different than the previous.\n    if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n      (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n        position,\n        prevPropsPosition\n      });\n      return {\n        x: position.x,\n        y: position.y,\n        prevPropsPosition: {\n          ...position\n        }\n      };\n    }\n    return null;\n  }\n  constructor(props /*: DraggableProps*/) {\n    super(props);\n    _defineProperty(this, \"onDragStart\", (e, coreData) => {\n      (0, _log.default)('Draggable: onDragStart: %j', coreData);\n\n      // Short-circuit if user's callback killed it.\n      const shouldStart = this.props.onStart(e, (0, _positionFns.createDraggableData)(this, coreData));\n      // Kills start event on core as well, so move handlers are never bound.\n      if (shouldStart === false) return false;\n      this.setState({\n        dragging: true,\n        dragged: true\n      });\n    });\n    _defineProperty(this, \"onDrag\", (e, coreData) => {\n      if (!this.state.dragging) return false;\n      (0, _log.default)('Draggable: onDrag: %j', coreData);\n      const uiData = (0, _positionFns.createDraggableData)(this, coreData);\n      const newState = {\n        x: uiData.x,\n        y: uiData.y,\n        slackX: 0,\n        slackY: 0\n      };\n\n      // Keep within bounds.\n      if (this.props.bounds) {\n        // Save original x and y.\n        const {\n          x,\n          y\n        } = newState;\n\n        // Add slack to the values used to calculate bound position. This will ensure that if\n        // we start removing slack, the element won't react to it right away until it's been\n        // completely removed.\n        newState.x += this.state.slackX;\n        newState.y += this.state.slackY;\n\n        // Get bound position. This will ceil/floor the x and y within the boundaries.\n        const [newStateX, newStateY] = (0, _positionFns.getBoundPosition)(this, newState.x, newState.y);\n        newState.x = newStateX;\n        newState.y = newStateY;\n\n        // Recalculate slack by noting how much was shaved by the boundPosition handler.\n        newState.slackX = this.state.slackX + (x - newState.x);\n        newState.slackY = this.state.slackY + (y - newState.y);\n\n        // Update the event we fire to reflect what really happened after bounds took effect.\n        uiData.x = newState.x;\n        uiData.y = newState.y;\n        uiData.deltaX = newState.x - this.state.x;\n        uiData.deltaY = newState.y - this.state.y;\n      }\n\n      // Short-circuit if user's callback killed it.\n      const shouldUpdate = this.props.onDrag(e, uiData);\n      if (shouldUpdate === false) return false;\n      this.setState(newState);\n    });\n    _defineProperty(this, \"onDragStop\", (e, coreData) => {\n      if (!this.state.dragging) return false;\n\n      // Short-circuit if user's callback killed it.\n      const shouldContinue = this.props.onStop(e, (0, _positionFns.createDraggableData)(this, coreData));\n      if (shouldContinue === false) return false;\n      (0, _log.default)('Draggable: onDragStop: %j', coreData);\n      const newState /*: Partial<DraggableState>*/ = {\n        dragging: false,\n        slackX: 0,\n        slackY: 0\n      };\n\n      // If this is a controlled component, the result of this operation will be to\n      // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n      const controlled = Boolean(this.props.position);\n      if (controlled) {\n        const {\n          x,\n          y\n        } = this.props.position;\n        newState.x = x;\n        newState.y = y;\n      }\n      this.setState(newState);\n    });\n    this.state = {\n      // Whether or not we are currently dragging.\n      dragging: false,\n      // Whether or not we have been dragged before.\n      dragged: false,\n      // Current transform x and y.\n      x: props.position ? props.position.x : props.defaultPosition.x,\n      y: props.position ? props.position.y : props.defaultPosition.y,\n      prevPropsPosition: {\n        ...props.position\n      },\n      // Used for compensating for out-of-bounds drags\n      slackX: 0,\n      slackY: 0,\n      // Can only determine if SVG after mounting\n      isElementSVG: false\n    };\n    if (props.position && !(props.onDrag || props.onStop)) {\n      // eslint-disable-next-line no-console\n      console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n    }\n  }\n  componentDidMount() {\n    // Check to see if the element passed is an instanceof SVGElement\n    if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n      this.setState({\n        isElementSVG: true\n      });\n    }\n  }\n  componentWillUnmount() {\n    this.setState({\n      dragging: false\n    }); // prevents invariant if unmounted while dragging\n  }\n\n  // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n  // the underlying DOM node ourselves. See the README for more information.\n  findDOMNode() /*: ?HTMLElement*/{\n    var _this$props$nodeRef$c, _this$props;\n    return (_this$props$nodeRef$c = (_this$props = this.props) === null || _this$props === void 0 || (_this$props = _this$props.nodeRef) === null || _this$props === void 0 ? void 0 : _this$props.current) !== null && _this$props$nodeRef$c !== void 0 ? _this$props$nodeRef$c : _reactDom.default.findDOMNode(this);\n  }\n  render() /*: ReactElement<any>*/{\n    const {\n      axis,\n      bounds,\n      children,\n      defaultPosition,\n      defaultClassName,\n      defaultClassNameDragging,\n      defaultClassNameDragged,\n      position,\n      positionOffset,\n      scale,\n      ...draggableCoreProps\n    } = this.props;\n    let style = {};\n    let svgTransform = null;\n\n    // If this is controlled, we don't want to move it - unless it's dragging.\n    const controlled = Boolean(position);\n    const draggable = !controlled || this.state.dragging;\n    const validPosition = position || defaultPosition;\n    const transformOpts = {\n      // Set left if horizontal drag is enabled\n      x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n      // Set top if vertical drag is enabled\n      y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n    };\n\n    // If this element was SVG, we use the `transform` attribute.\n    if (this.state.isElementSVG) {\n      svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n    } else {\n      // Add a CSS transform to move the element around. This allows us to move the element around\n      // without worrying about whether or not it is relatively or absolutely positioned.\n      // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n      // has a clean slate.\n      style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n    }\n\n    // Mark with class while dragging\n    const className = (0, _clsx.default)(children.props.className || '', defaultClassName, {\n      [defaultClassNameDragging]: this.state.dragging,\n      [defaultClassNameDragged]: this.state.dragged\n    });\n\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n      onStart: this.onDragStart,\n      onDrag: this.onDrag,\n      onStop: this.onDragStop\n    }), /*#__PURE__*/React.cloneElement(React.Children.only(children), {\n      className: className,\n      style: {\n        ...children.props.style,\n        ...style\n      },\n      transform: svgTransform\n    }));\n  }\n}\nexports.default = Draggable;\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n_defineProperty(Draggable, \"propTypes\", {\n  // Accepts all props <DraggableCore> accepts.\n  ..._DraggableCore.default.propTypes,\n  /**\n   * `axis` determines which axis the draggable can move.\n   *\n   *  Note that all callbacks will still return data as normal. This only\n   *  controls flushing to the DOM.\n   *\n   * 'both' allows movement horizontally and vertically.\n   * 'x' limits movement to horizontal axis.\n   * 'y' limits movement to vertical axis.\n   * 'none' limits all movement.\n   *\n   * Defaults to 'both'.\n   */\n  axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n  /**\n   * `bounds` determines the range of movement available to the element.\n   * Available values are:\n   *\n   * 'parent' restricts movement within the Draggable's parent node.\n   *\n   * Alternatively, pass an object with the following properties, all of which are optional:\n   *\n   * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n   *\n   * All values are in px.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *         return (\n   *            <Draggable bounds={{right: 300, bottom: 300}}>\n   *              <div>Content</div>\n   *           </Draggable>\n   *         );\n   *       }\n   *   });\n   * ```\n   */\n  bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n    left: _propTypes.default.number,\n    right: _propTypes.default.number,\n    top: _propTypes.default.number,\n    bottom: _propTypes.default.number\n  }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n  defaultClassName: _propTypes.default.string,\n  defaultClassNameDragging: _propTypes.default.string,\n  defaultClassNameDragged: _propTypes.default.string,\n  /**\n   * `defaultPosition` specifies the x and y that the dragged item should start at\n   *\n   * Example:\n   *\n   * ```jsx\n   *      let App = React.createClass({\n   *          render: function () {\n   *              return (\n   *                  <Draggable defaultPosition={{x: 25, y: 25}}>\n   *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n   *                  </Draggable>\n   *              );\n   *          }\n   *      });\n   * ```\n   */\n  defaultPosition: _propTypes.default.shape({\n    x: _propTypes.default.number,\n    y: _propTypes.default.number\n  }),\n  positionOffset: _propTypes.default.shape({\n    x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n    y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n  }),\n  /**\n   * `position`, if present, defines the current position of the element.\n   *\n   *  This is similar to how form elements in React work - if no `position` is supplied, the component\n   *  is uncontrolled.\n   *\n   * Example:\n   *\n   * ```jsx\n   *      let App = React.createClass({\n   *          render: function () {\n   *              return (\n   *                  <Draggable position={{x: 25, y: 25}}>\n   *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n   *                  </Draggable>\n   *              );\n   *          }\n   *      });\n   * ```\n   */\n  position: _propTypes.default.shape({\n    x: _propTypes.default.number,\n    y: _propTypes.default.number\n  }),\n  /**\n   * These properties should be defined on the child, not here.\n   */\n  className: _shims.dontSetMe,\n  style: _shims.dontSetMe,\n  transform: _shims.dontSetMe\n});\n_defineProperty(Draggable, \"defaultProps\", {\n  ..._DraggableCore.default.defaultProps,\n  axis: 'both',\n  bounds: false,\n  defaultClassName: 'react-draggable',\n  defaultClassNameDragging: 'react-draggable-dragging',\n  defaultClassNameDragged: 'react-draggable-dragged',\n  defaultPosition: {\n    x: 0,\n    y: 0\n  },\n  scale: 1\n});","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nmodule.exports = _isNativeReflectConstruct;","var _typeof = require(\"@babel/runtime/helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nexports.getPrefix = getPrefix;\nconst prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nfunction getPrefix() /*: string*/{\n  var _window$document;\n  let prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n  // Ensure we're running in an environment where there is actually a global\n  // `window` obj\n  if (typeof window === 'undefined') return '';\n\n  // If we're in a pseudo-browser server-side environment, this access\n  // path may not exist, so bail out if it doesn't.\n  const style = (_window$document = window.document) === null || _window$document === void 0 || (_window$document = _window$document.documentElement) === null || _window$document === void 0 ? void 0 : _window$document.style;\n  if (!style) return '';\n  if (prop in style) return '';\n  for (let i = 0; i < prefixes.length; i++) {\n    if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n  }\n  return '';\n}\nfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/{\n  return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\nfunction browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*: string*/{\n  return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\nfunction kebabToTitleCase(str /*: string*/) /*: string*/{\n  let out = '';\n  let shouldCapitalize = true;\n  for (let i = 0; i < str.length; i++) {\n    if (shouldCapitalize) {\n      out += str[i].toUpperCase();\n      shouldCapitalize = false;\n    } else if (str[i] === '-') {\n      shouldCapitalize = true;\n    } else {\n      out += str[i];\n    }\n  }\n  return out;\n}\n\n// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\nvar _default = exports.default = (getPrefix() /*: string*/);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n// Simple abstraction for dragging events names.\nconst eventsFor = {\n  touch: {\n    start: 'touchstart',\n    move: 'touchmove',\n    stop: 'touchend'\n  },\n  mouse: {\n    start: 'mousedown',\n    move: 'mousemove',\n    stop: 'mouseup'\n  }\n};\n\n// Default to mouse events.\nlet dragEventFor = eventsFor.mouse;\n/*:: export type DraggableData = {\n  node: HTMLElement,\n  x: number, y: number,\n  deltaX: number, deltaY: number,\n  lastX: number, lastY: number,\n};*/\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void | false;*/\n/*:: export type ControlPosition = {x: number, y: number};*/\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n/*:: export type DraggableCoreDefaultProps = {\n  allowAnyClick: boolean,\n  disabled: boolean,\n  enableUserSelectHack: boolean,\n  onStart: DraggableEventHandler,\n  onDrag: DraggableEventHandler,\n  onStop: DraggableEventHandler,\n  onMouseDown: (e: MouseEvent) => void,\n  scale: number,\n};*/\n/*:: export type DraggableCoreProps = {\n  ...DraggableCoreDefaultProps,\n  cancel: string,\n  children: ReactElement<any>,\n  offsetParent: HTMLElement,\n  grid: [number, number],\n  handle: string,\n  nodeRef?: ?React.ElementRef<any>,\n};*/\n//\n// Define <DraggableCore>.\n//\n// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\nclass DraggableCore extends React.Component /*:: <DraggableCoreProps>*/{\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"dragging\", false);\n    // Used while dragging to determine deltas.\n    _defineProperty(this, \"lastX\", NaN);\n    _defineProperty(this, \"lastY\", NaN);\n    _defineProperty(this, \"touchIdentifier\", null);\n    _defineProperty(this, \"mounted\", false);\n    _defineProperty(this, \"handleDragStart\", e => {\n      // Make it possible to attach event handlers on top of this one.\n      this.props.onMouseDown(e);\n\n      // Only accept left-clicks.\n      if (!this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n      // Get nodes. Be sure to grab relative document (could be iframed)\n      const thisNode = this.findDOMNode();\n      if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n        throw new Error('<DraggableCore> not mounted on DragStart!');\n      }\n      const {\n        ownerDocument\n      } = thisNode;\n\n      // Short circuit if handle or cancel prop was provided and selector doesn't match.\n      if (this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.handle, thisNode) || this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.cancel, thisNode)) {\n        return;\n      }\n\n      // Prevent scrolling on mobile devices, like ipad/iphone.\n      // Important that this is after handle/cancel.\n      if (e.type === 'touchstart') e.preventDefault();\n\n      // Set touch identifier in component state if this is a touch event. This allows us to\n      // distinguish between individual touches on multitouch screens by identifying which\n      // touchpoint was set to this element.\n      const touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n      this.touchIdentifier = touchIdentifier;\n\n      // Get the current drag point from the event. This is used as the offset.\n      const position = (0, _positionFns.getControlPosition)(e, touchIdentifier, this);\n      if (position == null) return; // not possible but satisfies flow\n      const {\n        x,\n        y\n      } = position;\n\n      // Create an event object with all the data parents need to make a decision here.\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n      (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent);\n\n      // Call event handler. If it returns explicit false, cancel.\n      (0, _log.default)('calling', this.props.onStart);\n      const shouldUpdate = this.props.onStart(e, coreEvent);\n      if (shouldUpdate === false || this.mounted === false) return;\n\n      // Add a style to the body to disable user-select. This prevents text from\n      // being selected all over the page.\n      if (this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument);\n\n      // Initiate dragging. Set the current x and y as offsets\n      // so we know how much we've moved during the drag. This allows us\n      // to drag elements around even if they have been moved, without issue.\n      this.dragging = true;\n      this.lastX = x;\n      this.lastY = y;\n\n      // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n      // this element. We use different events depending on whether or not we have detected that this\n      // is a touch-capable device.\n      (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, this.handleDrag);\n      (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, this.handleDragStop);\n    });\n    _defineProperty(this, \"handleDrag\", e => {\n      // Get the current drag point from the event. This is used as the offset.\n      const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n      if (position == null) return;\n      let {\n        x,\n        y\n      } = position;\n\n      // Snap to grid if prop has been provided\n      if (Array.isArray(this.props.grid)) {\n        let deltaX = x - this.lastX,\n          deltaY = y - this.lastY;\n        [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n        if (!deltaX && !deltaY) return; // skip useless drag\n        x = this.lastX + deltaX, y = this.lastY + deltaY;\n      }\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n      (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent);\n\n      // Call event handler. If it returns explicit false, trigger end.\n      const shouldUpdate = this.props.onDrag(e, coreEvent);\n      if (shouldUpdate === false || this.mounted === false) {\n        try {\n          // $FlowIgnore\n          this.handleDragStop(new MouseEvent('mouseup'));\n        } catch (err) {\n          // Old browsers\n          const event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n          // I see why this insanity was deprecated\n          // $FlowIgnore\n          event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n          this.handleDragStop(event);\n        }\n        return;\n      }\n      this.lastX = x;\n      this.lastY = y;\n    });\n    _defineProperty(this, \"handleDragStop\", e => {\n      if (!this.dragging) return;\n      const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n      if (position == null) return;\n      let {\n        x,\n        y\n      } = position;\n\n      // Snap to grid if prop has been provided\n      if (Array.isArray(this.props.grid)) {\n        let deltaX = x - this.lastX || 0;\n        let deltaY = y - this.lastY || 0;\n        [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n        x = this.lastX + deltaX, y = this.lastY + deltaY;\n      }\n      const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n\n      // Call event handler\n      const shouldContinue = this.props.onStop(e, coreEvent);\n      if (shouldContinue === false || this.mounted === false) return false;\n      const thisNode = this.findDOMNode();\n      if (thisNode) {\n        // Remove user-select hack\n        if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n      }\n      (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent);\n\n      // Reset the el.\n      this.dragging = false;\n      this.lastX = NaN;\n      this.lastY = NaN;\n      if (thisNode) {\n        // Remove event handlers\n        (0, _log.default)('DraggableCore: Removing handlers');\n        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, this.handleDrag);\n        (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, this.handleDragStop);\n      }\n    });\n    _defineProperty(this, \"onMouseDown\", e => {\n      dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n      return this.handleDragStart(e);\n    });\n    _defineProperty(this, \"onMouseUp\", e => {\n      dragEventFor = eventsFor.mouse;\n      return this.handleDragStop(e);\n    });\n    // Same as onMouseDown (start drag), but now consider this a touch device.\n    _defineProperty(this, \"onTouchStart\", e => {\n      // We're on a touch device now, so change the event handlers\n      dragEventFor = eventsFor.touch;\n      return this.handleDragStart(e);\n    });\n    _defineProperty(this, \"onTouchEnd\", e => {\n      // We're on a touch device now, so change the event handlers\n      dragEventFor = eventsFor.touch;\n      return this.handleDragStop(e);\n    });\n  }\n  componentDidMount() {\n    this.mounted = true;\n    // Touch handlers must be added with {passive: false} to be cancelable.\n    // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n        passive: false\n      });\n    }\n  }\n  componentWillUnmount() {\n    this.mounted = false;\n    // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n    // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      const {\n        ownerDocument\n      } = thisNode;\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n      (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n      (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n        passive: false\n      });\n      if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n    }\n  }\n\n  // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n  // the underlying DOM node ourselves. See the README for more information.\n  findDOMNode() /*: ?HTMLElement*/{\n    var _this$props, _this$props2;\n    return (_this$props = this.props) !== null && _this$props !== void 0 && _this$props.nodeRef ? (_this$props2 = this.props) === null || _this$props2 === void 0 || (_this$props2 = _this$props2.nodeRef) === null || _this$props2 === void 0 ? void 0 : _this$props2.current : _reactDom.default.findDOMNode(this);\n  }\n  render() /*: React.Element<any>*/{\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    return /*#__PURE__*/React.cloneElement(React.Children.only(this.props.children), {\n      // Note: mouseMove handler is attached to document so it will still function\n      // when the user drags quickly and leaves the bounds of the element.\n      onMouseDown: this.onMouseDown,\n      onMouseUp: this.onMouseUp,\n      // onTouchStart is added on `componentDidMount` so they can be added with\n      // {passive: false}, which allows it to cancel. See\n      // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n      onTouchEnd: this.onTouchEnd\n    });\n  }\n}\nexports.default = DraggableCore;\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n_defineProperty(DraggableCore, \"propTypes\", {\n  /**\n   * `allowAnyClick` allows dragging using any mouse button.\n   * By default, we only accept the left button.\n   *\n   * Defaults to `false`.\n   */\n  allowAnyClick: _propTypes.default.bool,\n  children: _propTypes.default.node.isRequired,\n  /**\n   * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n   * with the exception of `onMouseDown`, will not fire.\n   */\n  disabled: _propTypes.default.bool,\n  /**\n   * By default, we add 'user-select:none' attributes to the document body\n   * to prevent ugly text selection during drag. If this is causing problems\n   * for your app, set this to `false`.\n   */\n  enableUserSelectHack: _propTypes.default.bool,\n  /**\n   * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n   * instead of using the parent node.\n   */\n  offsetParent: function (props /*: DraggableCoreProps*/, propName /*: $Keys<DraggableCoreProps>*/) {\n    if (props[propName] && props[propName].nodeType !== 1) {\n      throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n    }\n  },\n  /**\n   * `grid` specifies the x and y that dragging should snap to.\n   */\n  grid: _propTypes.default.arrayOf(_propTypes.default.number),\n  /**\n   * `handle` specifies a selector to be used as the handle that initiates drag.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *         return (\n   *            <Draggable handle=\".handle\">\n   *              <div>\n   *                  <div className=\"handle\">Click me to drag</div>\n   *                  <div>This is some other content</div>\n   *              </div>\n   *           </Draggable>\n   *         );\n   *       }\n   *   });\n   * ```\n   */\n  handle: _propTypes.default.string,\n  /**\n   * `cancel` specifies a selector to be used to prevent drag initialization.\n   *\n   * Example:\n   *\n   * ```jsx\n   *   let App = React.createClass({\n   *       render: function () {\n   *           return(\n   *               <Draggable cancel=\".cancel\">\n   *                   <div>\n   *                     <div className=\"cancel\">You can't drag from here</div>\n   *                     <div>Dragging here works fine</div>\n   *                   </div>\n   *               </Draggable>\n   *           );\n   *       }\n   *   });\n   * ```\n   */\n  cancel: _propTypes.default.string,\n  /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n   * Unfortunately, in order for <Draggable> to work properly, we need raw access\n   * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n   * as in this example:\n   *\n   * function MyComponent() {\n   *   const nodeRef = React.useRef(null);\n   *   return (\n   *     <Draggable nodeRef={nodeRef}>\n   *       <div ref={nodeRef}>Example Target</div>\n   *     </Draggable>\n   *   );\n   * }\n   *\n   * This can be used for arbitrarily nested components, so long as the ref ends up\n   * pointing to the actual child DOM node and not a custom component.\n   */\n  nodeRef: _propTypes.default.object,\n  /**\n   * Called when dragging starts.\n   * If this function returns the boolean false, dragging will be canceled.\n   */\n  onStart: _propTypes.default.func,\n  /**\n   * Called while dragging.\n   * If this function returns the boolean false, dragging will be canceled.\n   */\n  onDrag: _propTypes.default.func,\n  /**\n   * Called when dragging stops.\n   * If this function returns the boolean false, the drag will remain active.\n   */\n  onStop: _propTypes.default.func,\n  /**\n   * A workaround option which can be passed if onMouseDown needs to be accessed,\n   * since it'll always be blocked (as there is internal use of onMouseDown)\n   */\n  onMouseDown: _propTypes.default.func,\n  /**\n   * `scale`, if set, applies scaling while dragging an element\n   */\n  scale: _propTypes.default.number,\n  /**\n   * These properties should be defined on the child, not here.\n   */\n  className: _shims.dontSetMe,\n  style: _shims.dontSetMe,\n  transform: _shims.dontSetMe\n});\n_defineProperty(DraggableCore, \"defaultProps\", {\n  allowAnyClick: false,\n  // by default only accept left click\n  disabled: false,\n  enableUserSelectHack: true,\n  onStart: function () {},\n  onDrag: function () {},\n  onStop: function () {},\n  onMouseDown: function () {},\n  scale: 1\n});","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlphaPicker = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nvar _AlphaPointer = require('./AlphaPointer');\n\nvar _AlphaPointer2 = _interopRequireDefault(_AlphaPointer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AlphaPicker = exports.AlphaPicker = function AlphaPicker(_ref) {\n  var rgb = _ref.rgb,\n      hsl = _ref.hsl,\n      width = _ref.width,\n      height = _ref.height,\n      onChange = _ref.onChange,\n      direction = _ref.direction,\n      style = _ref.style,\n      renderers = _ref.renderers,\n      pointer = _ref.pointer,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        position: 'relative',\n        width: width,\n        height: height\n      },\n      alpha: {\n        radius: '2px',\n        style: style\n      }\n    }\n  });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.picker, className: 'alpha-picker ' + className },\n    _react2.default.createElement(_common.Alpha, _extends({}, styles.alpha, {\n      rgb: rgb,\n      hsl: hsl,\n      pointer: pointer,\n      renderers: renderers,\n      onChange: onChange,\n      direction: direction\n    }))\n  );\n};\n\nAlphaPicker.defaultProps = {\n  width: '316px',\n  height: '16px',\n  direction: 'horizontal',\n  pointer: _AlphaPointer2.default\n};\n\nexports.default = (0, _common.ColorWrap)(AlphaPicker);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.flattenNames = undefined;\n\nvar _isString2 = require('lodash/isString');\n\nvar _isString3 = _interopRequireDefault(_isString2);\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _isPlainObject2 = require('lodash/isPlainObject');\n\nvar _isPlainObject3 = _interopRequireDefault(_isPlainObject2);\n\nvar _map2 = require('lodash/map');\n\nvar _map3 = _interopRequireDefault(_map2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar flattenNames = exports.flattenNames = function flattenNames() {\n  var things = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n  var names = [];\n\n  (0, _map3.default)(things, function (thing) {\n    if (Array.isArray(thing)) {\n      flattenNames(thing).map(function (name) {\n        return names.push(name);\n      });\n    } else if ((0, _isPlainObject3.default)(thing)) {\n      (0, _forOwn3.default)(thing, function (value, key) {\n        value === true && names.push(key);\n        names.push(key + '-' + value);\n      });\n    } else if ((0, _isString3.default)(thing)) {\n      names.push(thing);\n    }\n  });\n\n  return names;\n};\n\nexports.default = flattenNames;","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mergeClasses = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _cloneDeep2 = require('lodash/cloneDeep');\n\nvar _cloneDeep3 = _interopRequireDefault(_cloneDeep2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mergeClasses = exports.mergeClasses = function mergeClasses(classes) {\n  var activeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  var styles = classes.default && (0, _cloneDeep3.default)(classes.default) || {};\n  activeNames.map(function (name) {\n    var toMerge = classes[name];\n    if (toMerge) {\n      (0, _forOwn3.default)(toMerge, function (value, key) {\n        if (!styles[key]) {\n          styles[key] = {};\n        }\n\n        styles[key] = _extends({}, styles[key], toMerge[key]);\n      });\n    }\n\n    return name;\n  });\n  return styles;\n};\n\nexports.default = mergeClasses;","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.autoprefix = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar transforms = {\n  borderRadius: function borderRadius(value) {\n    return {\n      msBorderRadius: value,\n      MozBorderRadius: value,\n      OBorderRadius: value,\n      WebkitBorderRadius: value,\n      borderRadius: value\n    };\n  },\n  boxShadow: function boxShadow(value) {\n    return {\n      msBoxShadow: value,\n      MozBoxShadow: value,\n      OBoxShadow: value,\n      WebkitBoxShadow: value,\n      boxShadow: value\n    };\n  },\n  userSelect: function userSelect(value) {\n    return {\n      WebkitTouchCallout: value,\n      KhtmlUserSelect: value,\n      MozUserSelect: value,\n      msUserSelect: value,\n      WebkitUserSelect: value,\n      userSelect: value\n    };\n  },\n\n  flex: function flex(value) {\n    return {\n      WebkitBoxFlex: value,\n      MozBoxFlex: value,\n      WebkitFlex: value,\n      msFlex: value,\n      flex: value\n    };\n  },\n  flexBasis: function flexBasis(value) {\n    return {\n      WebkitFlexBasis: value,\n      flexBasis: value\n    };\n  },\n  justifyContent: function justifyContent(value) {\n    return {\n      WebkitJustifyContent: value,\n      justifyContent: value\n    };\n  },\n\n  transition: function transition(value) {\n    return {\n      msTransition: value,\n      MozTransition: value,\n      OTransition: value,\n      WebkitTransition: value,\n      transition: value\n    };\n  },\n\n  transform: function transform(value) {\n    return {\n      msTransform: value,\n      MozTransform: value,\n      OTransform: value,\n      WebkitTransform: value,\n      transform: value\n    };\n  },\n  absolute: function absolute(value) {\n    var direction = value && value.split(' ');\n    return {\n      position: 'absolute',\n      top: direction && direction[0],\n      right: direction && direction[1],\n      bottom: direction && direction[2],\n      left: direction && direction[3]\n    };\n  },\n  extend: function extend(name, otherElementStyles) {\n    var otherStyle = otherElementStyles[name];\n    if (otherStyle) {\n      return otherStyle;\n    }\n    return {\n      'extend': name\n    };\n  }\n};\n\nvar autoprefix = exports.autoprefix = function autoprefix(elements) {\n  var prefixed = {};\n  (0, _forOwn3.default)(elements, function (styles, element) {\n    var expanded = {};\n    (0, _forOwn3.default)(styles, function (value, key) {\n      var transform = transforms[key];\n      if (transform) {\n        expanded = _extends({}, expanded, transform(value));\n      } else {\n        expanded[key] = value;\n      }\n    });\n    prefixed[element] = expanded;\n  });\n  return prefixed;\n};\n\nexports.default = autoprefix;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.hover = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar hover = exports.hover = function hover(Component) {\n  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n  return function (_React$Component) {\n    _inherits(Hover, _React$Component);\n\n    function Hover() {\n      var _ref;\n\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, Hover);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Hover.__proto__ || Object.getPrototypeOf(Hover)).call.apply(_ref, [this].concat(args))), _this), _this.state = { hover: false }, _this.handleMouseOver = function () {\n        return _this.setState({ hover: true });\n      }, _this.handleMouseOut = function () {\n        return _this.setState({ hover: false });\n      }, _this.render = function () {\n        return _react2.default.createElement(\n          Span,\n          { onMouseOver: _this.handleMouseOver, onMouseOut: _this.handleMouseOut },\n          _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n        );\n      }, _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    return Hover;\n  }(_react2.default.Component);\n};\n\nexports.default = hover;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.active = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar active = exports.active = function active(Component) {\n  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n  return function (_React$Component) {\n    _inherits(Active, _React$Component);\n\n    function Active() {\n      var _ref;\n\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, Active);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Active.__proto__ || Object.getPrototypeOf(Active)).call.apply(_ref, [this].concat(args))), _this), _this.state = { active: false }, _this.handleMouseDown = function () {\n        return _this.setState({ active: true });\n      }, _this.handleMouseUp = function () {\n        return _this.setState({ active: false });\n      }, _this.render = function () {\n        return _react2.default.createElement(\n          Span,\n          { onMouseDown: _this.handleMouseDown, onMouseUp: _this.handleMouseUp },\n          _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n        );\n      }, _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    return Active;\n  }(_react2.default.Component);\n};\n\nexports.default = active;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar loopable = function loopable(i, length) {\n  var props = {};\n  var setProp = function setProp(name) {\n    var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    props[name] = value;\n  };\n\n  i === 0 && setProp('first-child');\n  i === length - 1 && setProp('last-child');\n  (i === 0 || i % 2 === 0) && setProp('even');\n  Math.abs(i % 2) === 1 && setProp('odd');\n  setProp('nth-child', i);\n\n  return props;\n};\n\nexports.default = loopable;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Alpha = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _alpha = require('../../helpers/alpha');\n\nvar alpha = _interopRequireWildcard(_alpha);\n\nvar _Checkboard = require('./Checkboard');\n\nvar _Checkboard2 = _interopRequireDefault(_Checkboard);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Alpha = exports.Alpha = function (_ref) {\n  _inherits(Alpha, _ref);\n\n  function Alpha() {\n    var _ref2;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Alpha);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Alpha.__proto__ || Object.getPrototypeOf(Alpha)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e) {\n      var change = alpha.calculateChange(e, _this.props.hsl, _this.props.direction, _this.props.a, _this.container);\n      change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n    }, _this.handleMouseDown = function (e) {\n      _this.handleChange(e);\n      window.addEventListener('mousemove', _this.handleChange);\n      window.addEventListener('mouseup', _this.handleMouseUp);\n    }, _this.handleMouseUp = function () {\n      _this.unbindEventListeners();\n    }, _this.unbindEventListeners = function () {\n      window.removeEventListener('mousemove', _this.handleChange);\n      window.removeEventListener('mouseup', _this.handleMouseUp);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Alpha, [{\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.unbindEventListeners();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var rgb = this.props.rgb;\n      var styles = (0, _reactcss2.default)({\n        'default': {\n          alpha: {\n            absolute: '0px 0px 0px 0px',\n            borderRadius: this.props.radius\n          },\n          checkboard: {\n            absolute: '0px 0px 0px 0px',\n            overflow: 'hidden',\n            borderRadius: this.props.radius\n          },\n          gradient: {\n            absolute: '0px 0px 0px 0px',\n            background: 'linear-gradient(to right, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\\n           rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)',\n            boxShadow: this.props.shadow,\n            borderRadius: this.props.radius\n          },\n          container: {\n            position: 'relative',\n            height: '100%',\n            margin: '0 3px'\n          },\n          pointer: {\n            position: 'absolute',\n            left: rgb.a * 100 + '%'\n          },\n          slider: {\n            width: '4px',\n            borderRadius: '1px',\n            height: '8px',\n            boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n            background: '#fff',\n            marginTop: '1px',\n            transform: 'translateX(-2px)'\n          }\n        },\n        'vertical': {\n          gradient: {\n            background: 'linear-gradient(to bottom, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\\n           rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)'\n          },\n          pointer: {\n            left: 0,\n            top: rgb.a * 100 + '%'\n          }\n        },\n        'overwrite': _extends({}, this.props.style)\n      }, {\n        vertical: this.props.direction === 'vertical',\n        overwrite: true\n      });\n\n      return _react2.default.createElement(\n        'div',\n        { style: styles.alpha },\n        _react2.default.createElement(\n          'div',\n          { style: styles.checkboard },\n          _react2.default.createElement(_Checkboard2.default, { renderers: this.props.renderers })\n        ),\n        _react2.default.createElement('div', { style: styles.gradient }),\n        _react2.default.createElement(\n          'div',\n          {\n            style: styles.container,\n            ref: function ref(container) {\n              return _this2.container = container;\n            },\n            onMouseDown: this.handleMouseDown,\n            onTouchMove: this.handleChange,\n            onTouchStart: this.handleChange\n          },\n          _react2.default.createElement(\n            'div',\n            { style: styles.pointer },\n            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })\n          )\n        )\n      );\n    }\n  }]);\n\n  return Alpha;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Alpha;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, hsl, direction, initialA, container) {\n  var containerWidth = container.clientWidth;\n  var containerHeight = container.clientHeight;\n  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n  if (direction === 'vertical') {\n    var a = void 0;\n    if (top < 0) {\n      a = 0;\n    } else if (top > containerHeight) {\n      a = 1;\n    } else {\n      a = Math.round(top * 100 / containerHeight) / 100;\n    }\n\n    if (hsl.a !== a) {\n      return {\n        h: hsl.h,\n        s: hsl.s,\n        l: hsl.l,\n        a: a,\n        source: 'rgb'\n      };\n    }\n  } else {\n    var _a = void 0;\n    if (left < 0) {\n      _a = 0;\n    } else if (left > containerWidth) {\n      _a = 1;\n    } else {\n      _a = Math.round(left * 100 / containerWidth) / 100;\n    }\n\n    if (initialA !== _a) {\n      return {\n        h: hsl.h,\n        s: hsl.s,\n        l: hsl.l,\n        a: _a,\n        source: 'rgb'\n      };\n    }\n  }\n  return null;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar checkboardCache = {};\n\nvar render = exports.render = function render(c1, c2, size, serverCanvas) {\n  if (typeof document === 'undefined' && !serverCanvas) {\n    return null;\n  }\n  var canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas');\n  canvas.width = size * 2;\n  canvas.height = size * 2;\n  var ctx = canvas.getContext('2d');\n  if (!ctx) {\n    return null;\n  } // If no context can be found, return early.\n  ctx.fillStyle = c1;\n  ctx.fillRect(0, 0, canvas.width, canvas.height);\n  ctx.fillStyle = c2;\n  ctx.fillRect(0, 0, size, size);\n  ctx.translate(size, size);\n  ctx.fillRect(0, 0, size, size);\n  return canvas.toDataURL();\n};\n\nvar get = exports.get = function get(c1, c2, size, serverCanvas) {\n  var key = c1 + '-' + c2 + '-' + size + (serverCanvas ? '-server' : '');\n\n  if (checkboardCache[key]) {\n    return checkboardCache[key];\n  }\n\n  var checkboard = render(c1, c2, size, serverCanvas);\n  checkboardCache[key] = checkboard;\n  return checkboard;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.EditableInput = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DEFAULT_ARROW_OFFSET = 1;\n\nvar UP_KEY_CODE = 38;\nvar DOWN_KEY_CODE = 40;\nvar VALID_KEY_CODES = [UP_KEY_CODE, DOWN_KEY_CODE];\nvar isValidKeyCode = function isValidKeyCode(keyCode) {\n  return VALID_KEY_CODES.indexOf(keyCode) > -1;\n};\n\nvar getFormattedPercentage = function getFormattedPercentage(number) {\n  return number + '%';\n};\nvar getNumberValue = function getNumberValue(value) {\n  return Number(String(value).replace(/%/g, ''));\n};\nvar getIsPercentage = function getIsPercentage(value) {\n  return String(value).indexOf('%') > -1;\n};\n\nvar EditableInput = exports.EditableInput = function (_ref) {\n  _inherits(EditableInput, _ref);\n\n  function EditableInput(props) {\n    _classCallCheck(this, EditableInput);\n\n    var _this = _possibleConstructorReturn(this, (EditableInput.__proto__ || Object.getPrototypeOf(EditableInput)).call(this));\n\n    _this.handleBlur = function () {\n      if (_this.state.blurValue) {\n        _this.setState({ value: _this.state.blurValue, blurValue: null });\n      }\n    };\n\n    _this.handleChange = function (e) {\n      _this.setUpdatedValue(e.target.value, e);\n    };\n\n    _this.handleKeyDown = function (e) {\n      // In case `e.target.value` is a percentage remove the `%` character\n      // and update accordingly with a percentage\n      // https://github.com/casesandberg/react-color/issues/383\n      var value = getNumberValue(e.target.value);\n      if (!isNaN(value) && isValidKeyCode(e.keyCode)) {\n        var offset = _this.getArrowOffset();\n        var updatedValue = e.keyCode === UP_KEY_CODE ? value + offset : value - offset;\n\n        _this.setUpdatedValue(updatedValue, e);\n      }\n    };\n\n    _this.handleDrag = function (e) {\n      if (_this.props.dragLabel) {\n        var newValue = Math.round(_this.props.value + e.movementX);\n        if (newValue >= 0 && newValue <= _this.props.dragMax) {\n          _this.props.onChange && _this.props.onChange(_this.getValueObjectWithLabel(newValue), e);\n        }\n      }\n    };\n\n    _this.handleMouseDown = function (e) {\n      if (_this.props.dragLabel) {\n        e.preventDefault();\n        _this.handleDrag(e);\n        window.addEventListener('mousemove', _this.handleDrag);\n        window.addEventListener('mouseup', _this.handleMouseUp);\n      }\n    };\n\n    _this.handleMouseUp = function () {\n      _this.unbindEventListeners();\n    };\n\n    _this.unbindEventListeners = function () {\n      window.removeEventListener('mousemove', _this.handleDrag);\n      window.removeEventListener('mouseup', _this.handleMouseUp);\n    };\n\n    _this.state = {\n      value: String(props.value).toUpperCase(),\n      blurValue: String(props.value).toUpperCase()\n    };\n    return _this;\n  }\n\n  _createClass(EditableInput, [{\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      var input = this.input;\n      if (nextProps.value !== this.state.value) {\n        if (input === document.activeElement) {\n          this.setState({ blurValue: String(nextProps.value).toUpperCase() });\n        } else {\n          this.setState({ value: String(nextProps.value).toUpperCase(), blurValue: !this.state.blurValue && String(nextProps.value).toUpperCase() });\n        }\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.unbindEventListeners();\n    }\n  }, {\n    key: 'getValueObjectWithLabel',\n    value: function getValueObjectWithLabel(value) {\n      return _defineProperty({}, this.props.label, value);\n    }\n  }, {\n    key: 'getArrowOffset',\n    value: function getArrowOffset() {\n      return this.props.arrowOffset || DEFAULT_ARROW_OFFSET;\n    }\n  }, {\n    key: 'setUpdatedValue',\n    value: function setUpdatedValue(value, e) {\n      var onChangeValue = this.props.label !== null ? this.getValueObjectWithLabel(value) : value;\n      this.props.onChange && this.props.onChange(onChangeValue, e);\n\n      var isPercentage = getIsPercentage(e.target.value);\n      this.setState({\n        value: isPercentage ? getFormattedPercentage(value) : value\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var styles = (0, _reactcss2.default)({\n        'default': {\n          wrap: {\n            position: 'relative'\n          }\n        },\n        'user-override': {\n          wrap: this.props.style && this.props.style.wrap ? this.props.style.wrap : {},\n          input: this.props.style && this.props.style.input ? this.props.style.input : {},\n          label: this.props.style && this.props.style.label ? this.props.style.label : {}\n        },\n        'dragLabel-true': {\n          label: {\n            cursor: 'ew-resize'\n          }\n        }\n      }, {\n        'user-override': true\n      }, this.props);\n\n      return _react2.default.createElement(\n        'div',\n        { style: styles.wrap },\n        _react2.default.createElement('input', {\n          style: styles.input,\n          ref: function ref(input) {\n            return _this2.input = input;\n          },\n          value: this.state.value,\n          onKeyDown: this.handleKeyDown,\n          onChange: this.handleChange,\n          onBlur: this.handleBlur,\n          placeholder: this.props.placeholder,\n          spellCheck: 'false'\n        }),\n        this.props.label && !this.props.hideLabel ? _react2.default.createElement(\n          'span',\n          { style: styles.label, onMouseDown: this.handleMouseDown },\n          this.props.label\n        ) : null\n      );\n    }\n  }]);\n\n  return EditableInput;\n}(_react.PureComponent || _react.Component);\n\nexports.default = EditableInput;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Hue = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _hue = require('../../helpers/hue');\n\nvar hue = _interopRequireWildcard(_hue);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Hue = exports.Hue = function (_ref) {\n  _inherits(Hue, _ref);\n\n  function Hue() {\n    var _ref2;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Hue);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Hue.__proto__ || Object.getPrototypeOf(Hue)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e) {\n      var change = hue.calculateChange(e, _this.props.direction, _this.props.hsl, _this.container);\n      change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n    }, _this.handleMouseDown = function (e) {\n      _this.handleChange(e);\n      window.addEventListener('mousemove', _this.handleChange);\n      window.addEventListener('mouseup', _this.handleMouseUp);\n    }, _this.handleMouseUp = function () {\n      _this.unbindEventListeners();\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Hue, [{\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.unbindEventListeners();\n    }\n  }, {\n    key: 'unbindEventListeners',\n    value: function unbindEventListeners() {\n      window.removeEventListener('mousemove', this.handleChange);\n      window.removeEventListener('mouseup', this.handleMouseUp);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _props$direction = this.props.direction,\n          direction = _props$direction === undefined ? 'horizontal' : _props$direction;\n\n\n      var styles = (0, _reactcss2.default)({\n        'default': {\n          hue: {\n            absolute: '0px 0px 0px 0px',\n            borderRadius: this.props.radius,\n            boxShadow: this.props.shadow\n          },\n          container: {\n            padding: '0 2px',\n            position: 'relative',\n            height: '100%',\n            borderRadius: this.props.radius\n          },\n          pointer: {\n            position: 'absolute',\n            left: this.props.hsl.h * 100 / 360 + '%'\n          },\n          slider: {\n            marginTop: '1px',\n            width: '4px',\n            borderRadius: '1px',\n            height: '8px',\n            boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n            background: '#fff',\n            transform: 'translateX(-2px)'\n          }\n        },\n        'vertical': {\n          pointer: {\n            left: '0px',\n            top: -(this.props.hsl.h * 100 / 360) + 100 + '%'\n          }\n        }\n      }, { vertical: direction === 'vertical' });\n\n      return _react2.default.createElement(\n        'div',\n        { style: styles.hue },\n        _react2.default.createElement(\n          'div',\n          {\n            className: 'hue-' + direction,\n            style: styles.container,\n            ref: function ref(container) {\n              return _this2.container = container;\n            },\n            onMouseDown: this.handleMouseDown,\n            onTouchMove: this.handleChange,\n            onTouchStart: this.handleChange\n          },\n          _react2.default.createElement(\n            'style',\n            null,\n            '\\n            .hue-horizontal {\\n              background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\\n                33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n              background: -webkit-linear-gradient(to right, #f00 0%, #ff0\\n                17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n            }\\n\\n            .hue-vertical {\\n              background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\\n                #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n              background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\\n                #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n            }\\n          '\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.pointer },\n            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })\n          )\n        )\n      );\n    }\n  }]);\n\n  return Hue;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Hue;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, direction, hsl, container) {\n  var containerWidth = container.clientWidth;\n  var containerHeight = container.clientHeight;\n  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n  if (direction === 'vertical') {\n    var h = void 0;\n    if (top < 0) {\n      h = 359;\n    } else if (top > containerHeight) {\n      h = 0;\n    } else {\n      var percent = -(top * 100 / containerHeight) + 100;\n      h = 360 * percent / 100;\n    }\n\n    if (hsl.h !== h) {\n      return {\n        h: h,\n        s: hsl.s,\n        l: hsl.l,\n        a: hsl.a,\n        source: 'rgb'\n      };\n    }\n  } else {\n    var _h = void 0;\n    if (left < 0) {\n      _h = 0;\n    } else if (left > containerWidth) {\n      _h = 359;\n    } else {\n      var _percent = left * 100 / containerWidth;\n      _h = 360 * _percent / 100;\n    }\n\n    if (hsl.h !== _h) {\n      return {\n        h: _h,\n        s: hsl.s,\n        l: hsl.l,\n        a: hsl.a,\n        source: 'rgb'\n      };\n    }\n  }\n  return null;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Raised = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Raised = exports.Raised = function Raised(_ref) {\n  var zDepth = _ref.zDepth,\n      radius = _ref.radius,\n      background = _ref.background,\n      children = _ref.children,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      wrap: {\n        position: 'relative',\n        display: 'inline-block'\n      },\n      content: {\n        position: 'relative'\n      },\n      bg: {\n        absolute: '0px 0px 0px 0px',\n        boxShadow: '0 ' + zDepth + 'px ' + zDepth * 4 + 'px rgba(0,0,0,.24)',\n        borderRadius: radius,\n        background: background\n      }\n    },\n    'zDepth-0': {\n      bg: {\n        boxShadow: 'none'\n      }\n    },\n\n    'zDepth-1': {\n      bg: {\n        boxShadow: '0 2px 10px rgba(0,0,0,.12), 0 2px 5px rgba(0,0,0,.16)'\n      }\n    },\n    'zDepth-2': {\n      bg: {\n        boxShadow: '0 6px 20px rgba(0,0,0,.19), 0 8px 17px rgba(0,0,0,.2)'\n      }\n    },\n    'zDepth-3': {\n      bg: {\n        boxShadow: '0 17px 50px rgba(0,0,0,.19), 0 12px 15px rgba(0,0,0,.24)'\n      }\n    },\n    'zDepth-4': {\n      bg: {\n        boxShadow: '0 25px 55px rgba(0,0,0,.21), 0 16px 28px rgba(0,0,0,.22)'\n      }\n    },\n    'zDepth-5': {\n      bg: {\n        boxShadow: '0 40px 77px rgba(0,0,0,.22), 0 27px 24px rgba(0,0,0,.2)'\n      }\n    },\n    'square': {\n      bg: {\n        borderRadius: '0'\n      }\n    },\n    'circle': {\n      bg: {\n        borderRadius: '50%'\n      }\n    }\n  }, passedStyles), { 'zDepth-1': zDepth === 1 });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.wrap },\n    _react2.default.createElement('div', { style: styles.bg }),\n    _react2.default.createElement(\n      'div',\n      { style: styles.content },\n      children\n    )\n  );\n};\n\nRaised.propTypes = {\n  background: _propTypes2.default.string,\n  zDepth: _propTypes2.default.oneOf([0, 1, 2, 3, 4, 5]),\n  radius: _propTypes2.default.number,\n  styles: _propTypes2.default.object\n};\n\nRaised.defaultProps = {\n  background: '#fff',\n  zDepth: 1,\n  radius: 2,\n  styles: {}\n};\n\nexports.default = Raised;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Saturation = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _throttle = require('lodash/throttle');\n\nvar _throttle2 = _interopRequireDefault(_throttle);\n\nvar _saturation = require('../../helpers/saturation');\n\nvar saturation = _interopRequireWildcard(_saturation);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Saturation = exports.Saturation = function (_ref) {\n  _inherits(Saturation, _ref);\n\n  function Saturation(props) {\n    _classCallCheck(this, Saturation);\n\n    var _this = _possibleConstructorReturn(this, (Saturation.__proto__ || Object.getPrototypeOf(Saturation)).call(this, props));\n\n    _this.handleChange = function (e) {\n      typeof _this.props.onChange === 'function' && _this.throttle(_this.props.onChange, saturation.calculateChange(e, _this.props.hsl, _this.container), e);\n    };\n\n    _this.handleMouseDown = function (e) {\n      _this.handleChange(e);\n      window.addEventListener('mousemove', _this.handleChange);\n      window.addEventListener('mouseup', _this.handleMouseUp);\n    };\n\n    _this.handleMouseUp = function () {\n      _this.unbindEventListeners();\n    };\n\n    _this.throttle = (0, _throttle2.default)(function (fn, data, e) {\n      fn(data, e);\n    }, 50);\n    return _this;\n  }\n\n  _createClass(Saturation, [{\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.throttle.cancel();\n      this.unbindEventListeners();\n    }\n  }, {\n    key: 'unbindEventListeners',\n    value: function unbindEventListeners() {\n      window.removeEventListener('mousemove', this.handleChange);\n      window.removeEventListener('mouseup', this.handleMouseUp);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var _ref2 = this.props.style || {},\n          color = _ref2.color,\n          white = _ref2.white,\n          black = _ref2.black,\n          pointer = _ref2.pointer,\n          circle = _ref2.circle;\n\n      var styles = (0, _reactcss2.default)({\n        'default': {\n          color: {\n            absolute: '0px 0px 0px 0px',\n            background: 'hsl(' + this.props.hsl.h + ',100%, 50%)',\n            borderRadius: this.props.radius\n          },\n          white: {\n            absolute: '0px 0px 0px 0px',\n            borderRadius: this.props.radius\n          },\n          black: {\n            absolute: '0px 0px 0px 0px',\n            boxShadow: this.props.shadow,\n            borderRadius: this.props.radius\n          },\n          pointer: {\n            position: 'absolute',\n            top: -(this.props.hsv.v * 100) + 100 + '%',\n            left: this.props.hsv.s * 100 + '%',\n            cursor: 'default'\n          },\n          circle: {\n            width: '4px',\n            height: '4px',\n            boxShadow: '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\\n            0 0 1px 2px rgba(0,0,0,.4)',\n            borderRadius: '50%',\n            cursor: 'hand',\n            transform: 'translate(-2px, -2px)'\n          }\n        },\n        'custom': {\n          color: color,\n          white: white,\n          black: black,\n          pointer: pointer,\n          circle: circle\n        }\n      }, { 'custom': !!this.props.style });\n\n      return _react2.default.createElement(\n        'div',\n        {\n          style: styles.color,\n          ref: function ref(container) {\n            return _this2.container = container;\n          },\n          onMouseDown: this.handleMouseDown,\n          onTouchMove: this.handleChange,\n          onTouchStart: this.handleChange\n        },\n        _react2.default.createElement(\n          'style',\n          null,\n          '\\n          .saturation-white {\\n            background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\\n            background: linear-gradient(to right, #fff, rgba(255,255,255,0));\\n          }\\n          .saturation-black {\\n            background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\\n            background: linear-gradient(to top, #000, rgba(0,0,0,0));\\n          }\\n        '\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.white, className: 'saturation-white' },\n          _react2.default.createElement('div', { style: styles.black, className: 'saturation-black' }),\n          _react2.default.createElement(\n            'div',\n            { style: styles.pointer },\n            this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.circle })\n          )\n        )\n      );\n    }\n  }]);\n\n  return Saturation;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Saturation;","var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, hsl, container) {\n  var _container$getBoundin = container.getBoundingClientRect(),\n      containerWidth = _container$getBoundin.width,\n      containerHeight = _container$getBoundin.height;\n\n  var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n  var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n  var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n  var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n  if (left < 0) {\n    left = 0;\n  } else if (left > containerWidth) {\n    left = containerWidth;\n  } else if (top < 0) {\n    top = 0;\n  } else if (top > containerHeight) {\n    top = containerHeight;\n  }\n\n  var saturation = left * 100 / containerWidth;\n  var bright = -(top * 100 / containerHeight) + 100;\n\n  return {\n    h: hsl.h,\n    s: saturation,\n    v: bright,\n    a: hsl.a,\n    source: 'rgb'\n  };\n};","module.exports = require('./forEach');\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","// This file is autogenerated. It's used to publish CJS to npm.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinycolor = factory());\n})(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  // https://github.com/bgrins/TinyColor\n  // Brian Grinstead, MIT License\n\n  var trimLeft = /^\\s+/;\n  var trimRight = /\\s+$/;\n  function tinycolor(color, opts) {\n    color = color ? color : \"\";\n    opts = opts || {};\n\n    // If input is already a tinycolor, return itself\n    if (color instanceof tinycolor) {\n      return color;\n    }\n    // If we are called as a function, call using new instead\n    if (!(this instanceof tinycolor)) {\n      return new tinycolor(color, opts);\n    }\n    var rgb = inputToRGB(color);\n    this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n    this._gradientType = opts.gradientType;\n\n    // Don't let the range of [0,255] come back in [0,1].\n    // Potentially lose a little bit of precision here, but will fix issues where\n    // .5 gets interpreted as half of the total, instead of half of 1\n    // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n    if (this._r < 1) this._r = Math.round(this._r);\n    if (this._g < 1) this._g = Math.round(this._g);\n    if (this._b < 1) this._b = Math.round(this._b);\n    this._ok = rgb.ok;\n  }\n  tinycolor.prototype = {\n    isDark: function isDark() {\n      return this.getBrightness() < 128;\n    },\n    isLight: function isLight() {\n      return !this.isDark();\n    },\n    isValid: function isValid() {\n      return this._ok;\n    },\n    getOriginalInput: function getOriginalInput() {\n      return this._originalInput;\n    },\n    getFormat: function getFormat() {\n      return this._format;\n    },\n    getAlpha: function getAlpha() {\n      return this._a;\n    },\n    getBrightness: function getBrightness() {\n      //http://www.w3.org/TR/AERT#color-contrast\n      var rgb = this.toRgb();\n      return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n    },\n    getLuminance: function getLuminance() {\n      //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n      var rgb = this.toRgb();\n      var RsRGB, GsRGB, BsRGB, R, G, B;\n      RsRGB = rgb.r / 255;\n      GsRGB = rgb.g / 255;\n      BsRGB = rgb.b / 255;\n      if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n      if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n      if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n      return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n    },\n    setAlpha: function setAlpha(value) {\n      this._a = boundAlpha(value);\n      this._roundA = Math.round(100 * this._a) / 100;\n      return this;\n    },\n    toHsv: function toHsv() {\n      var hsv = rgbToHsv(this._r, this._g, this._b);\n      return {\n        h: hsv.h * 360,\n        s: hsv.s,\n        v: hsv.v,\n        a: this._a\n      };\n    },\n    toHsvString: function toHsvString() {\n      var hsv = rgbToHsv(this._r, this._g, this._b);\n      var h = Math.round(hsv.h * 360),\n        s = Math.round(hsv.s * 100),\n        v = Math.round(hsv.v * 100);\n      return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n    },\n    toHsl: function toHsl() {\n      var hsl = rgbToHsl(this._r, this._g, this._b);\n      return {\n        h: hsl.h * 360,\n        s: hsl.s,\n        l: hsl.l,\n        a: this._a\n      };\n    },\n    toHslString: function toHslString() {\n      var hsl = rgbToHsl(this._r, this._g, this._b);\n      var h = Math.round(hsl.h * 360),\n        s = Math.round(hsl.s * 100),\n        l = Math.round(hsl.l * 100);\n      return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n    },\n    toHex: function toHex(allow3Char) {\n      return rgbToHex(this._r, this._g, this._b, allow3Char);\n    },\n    toHexString: function toHexString(allow3Char) {\n      return \"#\" + this.toHex(allow3Char);\n    },\n    toHex8: function toHex8(allow4Char) {\n      return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n    },\n    toHex8String: function toHex8String(allow4Char) {\n      return \"#\" + this.toHex8(allow4Char);\n    },\n    toRgb: function toRgb() {\n      return {\n        r: Math.round(this._r),\n        g: Math.round(this._g),\n        b: Math.round(this._b),\n        a: this._a\n      };\n    },\n    toRgbString: function toRgbString() {\n      return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n    },\n    toPercentageRgb: function toPercentageRgb() {\n      return {\n        r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n        g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n        b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n        a: this._a\n      };\n    },\n    toPercentageRgbString: function toPercentageRgbString() {\n      return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n    },\n    toName: function toName() {\n      if (this._a === 0) {\n        return \"transparent\";\n      }\n      if (this._a < 1) {\n        return false;\n      }\n      return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n    },\n    toFilter: function toFilter(secondColor) {\n      var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n      var secondHex8String = hex8String;\n      var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n      if (secondColor) {\n        var s = tinycolor(secondColor);\n        secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n      }\n      return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n    },\n    toString: function toString(format) {\n      var formatSet = !!format;\n      format = format || this._format;\n      var formattedString = false;\n      var hasAlpha = this._a < 1 && this._a >= 0;\n      var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n      if (needsAlphaFormat) {\n        // Special case for \"transparent\", all other non-alpha formats\n        // will return rgba when there is transparency.\n        if (format === \"name\" && this._a === 0) {\n          return this.toName();\n        }\n        return this.toRgbString();\n      }\n      if (format === \"rgb\") {\n        formattedString = this.toRgbString();\n      }\n      if (format === \"prgb\") {\n        formattedString = this.toPercentageRgbString();\n      }\n      if (format === \"hex\" || format === \"hex6\") {\n        formattedString = this.toHexString();\n      }\n      if (format === \"hex3\") {\n        formattedString = this.toHexString(true);\n      }\n      if (format === \"hex4\") {\n        formattedString = this.toHex8String(true);\n      }\n      if (format === \"hex8\") {\n        formattedString = this.toHex8String();\n      }\n      if (format === \"name\") {\n        formattedString = this.toName();\n      }\n      if (format === \"hsl\") {\n        formattedString = this.toHslString();\n      }\n      if (format === \"hsv\") {\n        formattedString = this.toHsvString();\n      }\n      return formattedString || this.toHexString();\n    },\n    clone: function clone() {\n      return tinycolor(this.toString());\n    },\n    _applyModification: function _applyModification(fn, args) {\n      var color = fn.apply(null, [this].concat([].slice.call(args)));\n      this._r = color._r;\n      this._g = color._g;\n      this._b = color._b;\n      this.setAlpha(color._a);\n      return this;\n    },\n    lighten: function lighten() {\n      return this._applyModification(_lighten, arguments);\n    },\n    brighten: function brighten() {\n      return this._applyModification(_brighten, arguments);\n    },\n    darken: function darken() {\n      return this._applyModification(_darken, arguments);\n    },\n    desaturate: function desaturate() {\n      return this._applyModification(_desaturate, arguments);\n    },\n    saturate: function saturate() {\n      return this._applyModification(_saturate, arguments);\n    },\n    greyscale: function greyscale() {\n      return this._applyModification(_greyscale, arguments);\n    },\n    spin: function spin() {\n      return this._applyModification(_spin, arguments);\n    },\n    _applyCombination: function _applyCombination(fn, args) {\n      return fn.apply(null, [this].concat([].slice.call(args)));\n    },\n    analogous: function analogous() {\n      return this._applyCombination(_analogous, arguments);\n    },\n    complement: function complement() {\n      return this._applyCombination(_complement, arguments);\n    },\n    monochromatic: function monochromatic() {\n      return this._applyCombination(_monochromatic, arguments);\n    },\n    splitcomplement: function splitcomplement() {\n      return this._applyCombination(_splitcomplement, arguments);\n    },\n    // Disabled until https://github.com/bgrins/TinyColor/issues/254\n    // polyad: function (number) {\n    //   return this._applyCombination(polyad, [number]);\n    // },\n    triad: function triad() {\n      return this._applyCombination(polyad, [3]);\n    },\n    tetrad: function tetrad() {\n      return this._applyCombination(polyad, [4]);\n    }\n  };\n\n  // If input is an object, force 1 into \"1.0\" to handle ratios properly\n  // String input requires \"1.0\" as input, so 1 will be treated as 1\n  tinycolor.fromRatio = function (color, opts) {\n    if (_typeof(color) == \"object\") {\n      var newColor = {};\n      for (var i in color) {\n        if (color.hasOwnProperty(i)) {\n          if (i === \"a\") {\n            newColor[i] = color[i];\n          } else {\n            newColor[i] = convertToPercentage(color[i]);\n          }\n        }\n      }\n      color = newColor;\n    }\n    return tinycolor(color, opts);\n  };\n\n  // Given a string or object, convert that input to RGB\n  // Possible string inputs:\n  //\n  //     \"red\"\n  //     \"#f00\" or \"f00\"\n  //     \"#ff0000\" or \"ff0000\"\n  //     \"#ff000000\" or \"ff000000\"\n  //     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n  //     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n  //     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n  //     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n  //     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n  //     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n  //     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n  //\n  function inputToRGB(color) {\n    var rgb = {\n      r: 0,\n      g: 0,\n      b: 0\n    };\n    var a = 1;\n    var s = null;\n    var v = null;\n    var l = null;\n    var ok = false;\n    var format = false;\n    if (typeof color == \"string\") {\n      color = stringInputToObject(color);\n    }\n    if (_typeof(color) == \"object\") {\n      if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n        rgb = rgbToRgb(color.r, color.g, color.b);\n        ok = true;\n        format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n      } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n        s = convertToPercentage(color.s);\n        v = convertToPercentage(color.v);\n        rgb = hsvToRgb(color.h, s, v);\n        ok = true;\n        format = \"hsv\";\n      } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n        s = convertToPercentage(color.s);\n        l = convertToPercentage(color.l);\n        rgb = hslToRgb(color.h, s, l);\n        ok = true;\n        format = \"hsl\";\n      }\n      if (color.hasOwnProperty(\"a\")) {\n        a = color.a;\n      }\n    }\n    a = boundAlpha(a);\n    return {\n      ok: ok,\n      format: color.format || format,\n      r: Math.min(255, Math.max(rgb.r, 0)),\n      g: Math.min(255, Math.max(rgb.g, 0)),\n      b: Math.min(255, Math.max(rgb.b, 0)),\n      a: a\n    };\n  }\n\n  // Conversion Functions\n  // --------------------\n\n  // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n  // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n  // `rgbToRgb`\n  // Handle bounds / percentage checking to conform to CSS color spec\n  // <http://www.w3.org/TR/css3-color/>\n  // *Assumes:* r, g, b in [0, 255] or [0, 1]\n  // *Returns:* { r, g, b } in [0, 255]\n  function rgbToRgb(r, g, b) {\n    return {\n      r: bound01(r, 255) * 255,\n      g: bound01(g, 255) * 255,\n      b: bound01(b, 255) * 255\n    };\n  }\n\n  // `rgbToHsl`\n  // Converts an RGB color value to HSL.\n  // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n  // *Returns:* { h, s, l } in [0,1]\n  function rgbToHsl(r, g, b) {\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n    var max = Math.max(r, g, b),\n      min = Math.min(r, g, b);\n    var h,\n      s,\n      l = (max + min) / 2;\n    if (max == min) {\n      h = s = 0; // achromatic\n    } else {\n      var d = max - min;\n      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n      switch (max) {\n        case r:\n          h = (g - b) / d + (g < b ? 6 : 0);\n          break;\n        case g:\n          h = (b - r) / d + 2;\n          break;\n        case b:\n          h = (r - g) / d + 4;\n          break;\n      }\n      h /= 6;\n    }\n    return {\n      h: h,\n      s: s,\n      l: l\n    };\n  }\n\n  // `hslToRgb`\n  // Converts an HSL color value to RGB.\n  // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n  // *Returns:* { r, g, b } in the set [0, 255]\n  function hslToRgb(h, s, l) {\n    var r, g, b;\n    h = bound01(h, 360);\n    s = bound01(s, 100);\n    l = bound01(l, 100);\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n    if (s === 0) {\n      r = g = b = l; // achromatic\n    } else {\n      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      var p = 2 * l - q;\n      r = hue2rgb(p, q, h + 1 / 3);\n      g = hue2rgb(p, q, h);\n      b = hue2rgb(p, q, h - 1 / 3);\n    }\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255\n    };\n  }\n\n  // `rgbToHsv`\n  // Converts an RGB color value to HSV\n  // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n  // *Returns:* { h, s, v } in [0,1]\n  function rgbToHsv(r, g, b) {\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n    var max = Math.max(r, g, b),\n      min = Math.min(r, g, b);\n    var h,\n      s,\n      v = max;\n    var d = max - min;\n    s = max === 0 ? 0 : d / max;\n    if (max == min) {\n      h = 0; // achromatic\n    } else {\n      switch (max) {\n        case r:\n          h = (g - b) / d + (g < b ? 6 : 0);\n          break;\n        case g:\n          h = (b - r) / d + 2;\n          break;\n        case b:\n          h = (r - g) / d + 4;\n          break;\n      }\n      h /= 6;\n    }\n    return {\n      h: h,\n      s: s,\n      v: v\n    };\n  }\n\n  // `hsvToRgb`\n  // Converts an HSV color value to RGB.\n  // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n  // *Returns:* { r, g, b } in the set [0, 255]\n  function hsvToRgb(h, s, v) {\n    h = bound01(h, 360) * 6;\n    s = bound01(s, 100);\n    v = bound01(v, 100);\n    var i = Math.floor(h),\n      f = h - i,\n      p = v * (1 - s),\n      q = v * (1 - f * s),\n      t = v * (1 - (1 - f) * s),\n      mod = i % 6,\n      r = [v, q, p, p, t, v][mod],\n      g = [t, v, v, q, p, p][mod],\n      b = [p, p, t, v, v, q][mod];\n    return {\n      r: r * 255,\n      g: g * 255,\n      b: b * 255\n    };\n  }\n\n  // `rgbToHex`\n  // Converts an RGB color to hex\n  // Assumes r, g, and b are contained in the set [0, 255]\n  // Returns a 3 or 6 character hex\n  function rgbToHex(r, g, b, allow3Char) {\n    var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n    // Return a 3 character hex if possible\n    if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n      return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n    }\n    return hex.join(\"\");\n  }\n\n  // `rgbaToHex`\n  // Converts an RGBA color plus alpha transparency to hex\n  // Assumes r, g, b are contained in the set [0, 255] and\n  // a in [0, 1]. Returns a 4 or 8 character rgba hex\n  function rgbaToHex(r, g, b, a, allow4Char) {\n    var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n    // Return a 4 character hex if possible\n    if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n      return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n    }\n    return hex.join(\"\");\n  }\n\n  // `rgbaToArgbHex`\n  // Converts an RGBA color to an ARGB Hex8 string\n  // Rarely used, but required for \"toFilter()\"\n  function rgbaToArgbHex(r, g, b, a) {\n    var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n    return hex.join(\"\");\n  }\n\n  // `equals`\n  // Can be called with any tinycolor input\n  tinycolor.equals = function (color1, color2) {\n    if (!color1 || !color2) return false;\n    return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n  };\n  tinycolor.random = function () {\n    return tinycolor.fromRatio({\n      r: Math.random(),\n      g: Math.random(),\n      b: Math.random()\n    });\n  };\n\n  // Modification Functions\n  // ----------------------\n  // Thanks to less.js for some of the basics here\n  // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n  function _desaturate(color, amount) {\n    amount = amount === 0 ? 0 : amount || 10;\n    var hsl = tinycolor(color).toHsl();\n    hsl.s -= amount / 100;\n    hsl.s = clamp01(hsl.s);\n    return tinycolor(hsl);\n  }\n  function _saturate(color, amount) {\n    amount = amount === 0 ? 0 : amount || 10;\n    var hsl = tinycolor(color).toHsl();\n    hsl.s += amount / 100;\n    hsl.s = clamp01(hsl.s);\n    return tinycolor(hsl);\n  }\n  function _greyscale(color) {\n    return tinycolor(color).desaturate(100);\n  }\n  function _lighten(color, amount) {\n    amount = amount === 0 ? 0 : amount || 10;\n    var hsl = tinycolor(color).toHsl();\n    hsl.l += amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n  }\n  function _brighten(color, amount) {\n    amount = amount === 0 ? 0 : amount || 10;\n    var rgb = tinycolor(color).toRgb();\n    rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n    rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n    rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n    return tinycolor(rgb);\n  }\n  function _darken(color, amount) {\n    amount = amount === 0 ? 0 : amount || 10;\n    var hsl = tinycolor(color).toHsl();\n    hsl.l -= amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n  }\n\n  // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n  // Values outside of this range will be wrapped into this range.\n  function _spin(color, amount) {\n    var hsl = tinycolor(color).toHsl();\n    var hue = (hsl.h + amount) % 360;\n    hsl.h = hue < 0 ? 360 + hue : hue;\n    return tinycolor(hsl);\n  }\n\n  // Combination Functions\n  // ---------------------\n  // Thanks to jQuery xColor for some of the ideas behind these\n  // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n  function _complement(color) {\n    var hsl = tinycolor(color).toHsl();\n    hsl.h = (hsl.h + 180) % 360;\n    return tinycolor(hsl);\n  }\n  function polyad(color, number) {\n    if (isNaN(number) || number <= 0) {\n      throw new Error(\"Argument to polyad must be a positive number\");\n    }\n    var hsl = tinycolor(color).toHsl();\n    var result = [tinycolor(color)];\n    var step = 360 / number;\n    for (var i = 1; i < number; i++) {\n      result.push(tinycolor({\n        h: (hsl.h + i * step) % 360,\n        s: hsl.s,\n        l: hsl.l\n      }));\n    }\n    return result;\n  }\n  function _splitcomplement(color) {\n    var hsl = tinycolor(color).toHsl();\n    var h = hsl.h;\n    return [tinycolor(color), tinycolor({\n      h: (h + 72) % 360,\n      s: hsl.s,\n      l: hsl.l\n    }), tinycolor({\n      h: (h + 216) % 360,\n      s: hsl.s,\n      l: hsl.l\n    })];\n  }\n  function _analogous(color, results, slices) {\n    results = results || 6;\n    slices = slices || 30;\n    var hsl = tinycolor(color).toHsl();\n    var part = 360 / slices;\n    var ret = [tinycolor(color)];\n    for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n      hsl.h = (hsl.h + part) % 360;\n      ret.push(tinycolor(hsl));\n    }\n    return ret;\n  }\n  function _monochromatic(color, results) {\n    results = results || 6;\n    var hsv = tinycolor(color).toHsv();\n    var h = hsv.h,\n      s = hsv.s,\n      v = hsv.v;\n    var ret = [];\n    var modification = 1 / results;\n    while (results--) {\n      ret.push(tinycolor({\n        h: h,\n        s: s,\n        v: v\n      }));\n      v = (v + modification) % 1;\n    }\n    return ret;\n  }\n\n  // Utility Functions\n  // ---------------------\n\n  tinycolor.mix = function (color1, color2, amount) {\n    amount = amount === 0 ? 0 : amount || 50;\n    var rgb1 = tinycolor(color1).toRgb();\n    var rgb2 = tinycolor(color2).toRgb();\n    var p = amount / 100;\n    var rgba = {\n      r: (rgb2.r - rgb1.r) * p + rgb1.r,\n      g: (rgb2.g - rgb1.g) * p + rgb1.g,\n      b: (rgb2.b - rgb1.b) * p + rgb1.b,\n      a: (rgb2.a - rgb1.a) * p + rgb1.a\n    };\n    return tinycolor(rgba);\n  };\n\n  // Readability Functions\n  // ---------------------\n  // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n  // `contrast`\n  // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n  tinycolor.readability = function (color1, color2) {\n    var c1 = tinycolor(color1);\n    var c2 = tinycolor(color2);\n    return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n  };\n\n  // `isReadable`\n  // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n  // The third argument is an optional Object.\n  //      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n  //      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n  // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n  // *Example*\n  //    tinycolor.isReadable(\"#000\", \"#111\") => false\n  //    tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n  tinycolor.isReadable = function (color1, color2, wcag2) {\n    var readability = tinycolor.readability(color1, color2);\n    var wcag2Parms, out;\n    out = false;\n    wcag2Parms = validateWCAG2Parms(wcag2);\n    switch (wcag2Parms.level + wcag2Parms.size) {\n      case \"AAsmall\":\n      case \"AAAlarge\":\n        out = readability >= 4.5;\n        break;\n      case \"AAlarge\":\n        out = readability >= 3;\n        break;\n      case \"AAAsmall\":\n        out = readability >= 7;\n        break;\n    }\n    return out;\n  };\n\n  // `mostReadable`\n  // Given a base color and a list of possible foreground or background\n  // colors for that base, returns the most readable color.\n  // Optionally returns Black or White if the most readable color is unreadable.\n  // *Example*\n  //    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n  //    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString();  // \"#ffffff\"\n  //    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n  //    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n  tinycolor.mostReadable = function (baseColor, colorList, args) {\n    var bestColor = null;\n    var bestScore = 0;\n    var readability;\n    var includeFallbackColors, level, size;\n    args = args || {};\n    includeFallbackColors = args.includeFallbackColors;\n    level = args.level;\n    size = args.size;\n    for (var i = 0; i < colorList.length; i++) {\n      readability = tinycolor.readability(baseColor, colorList[i]);\n      if (readability > bestScore) {\n        bestScore = readability;\n        bestColor = tinycolor(colorList[i]);\n      }\n    }\n    if (tinycolor.isReadable(baseColor, bestColor, {\n      level: level,\n      size: size\n    }) || !includeFallbackColors) {\n      return bestColor;\n    } else {\n      args.includeFallbackColors = false;\n      return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n    }\n  };\n\n  // Big List of Colors\n  // ------------------\n  // <https://www.w3.org/TR/css-color-4/#named-colors>\n  var names = tinycolor.names = {\n    aliceblue: \"f0f8ff\",\n    antiquewhite: \"faebd7\",\n    aqua: \"0ff\",\n    aquamarine: \"7fffd4\",\n    azure: \"f0ffff\",\n    beige: \"f5f5dc\",\n    bisque: \"ffe4c4\",\n    black: \"000\",\n    blanchedalmond: \"ffebcd\",\n    blue: \"00f\",\n    blueviolet: \"8a2be2\",\n    brown: \"a52a2a\",\n    burlywood: \"deb887\",\n    burntsienna: \"ea7e5d\",\n    cadetblue: \"5f9ea0\",\n    chartreuse: \"7fff00\",\n    chocolate: \"d2691e\",\n    coral: \"ff7f50\",\n    cornflowerblue: \"6495ed\",\n    cornsilk: \"fff8dc\",\n    crimson: \"dc143c\",\n    cyan: \"0ff\",\n    darkblue: \"00008b\",\n    darkcyan: \"008b8b\",\n    darkgoldenrod: \"b8860b\",\n    darkgray: \"a9a9a9\",\n    darkgreen: \"006400\",\n    darkgrey: \"a9a9a9\",\n    darkkhaki: \"bdb76b\",\n    darkmagenta: \"8b008b\",\n    darkolivegreen: \"556b2f\",\n    darkorange: \"ff8c00\",\n    darkorchid: \"9932cc\",\n    darkred: \"8b0000\",\n    darksalmon: \"e9967a\",\n    darkseagreen: \"8fbc8f\",\n    darkslateblue: \"483d8b\",\n    darkslategray: \"2f4f4f\",\n    darkslategrey: \"2f4f4f\",\n    darkturquoise: \"00ced1\",\n    darkviolet: \"9400d3\",\n    deeppink: \"ff1493\",\n    deepskyblue: \"00bfff\",\n    dimgray: \"696969\",\n    dimgrey: \"696969\",\n    dodgerblue: \"1e90ff\",\n    firebrick: \"b22222\",\n    floralwhite: \"fffaf0\",\n    forestgreen: \"228b22\",\n    fuchsia: \"f0f\",\n    gainsboro: \"dcdcdc\",\n    ghostwhite: \"f8f8ff\",\n    gold: \"ffd700\",\n    goldenrod: \"daa520\",\n    gray: \"808080\",\n    green: \"008000\",\n    greenyellow: \"adff2f\",\n    grey: \"808080\",\n    honeydew: \"f0fff0\",\n    hotpink: \"ff69b4\",\n    indianred: \"cd5c5c\",\n    indigo: \"4b0082\",\n    ivory: \"fffff0\",\n    khaki: \"f0e68c\",\n    lavender: \"e6e6fa\",\n    lavenderblush: \"fff0f5\",\n    lawngreen: \"7cfc00\",\n    lemonchiffon: \"fffacd\",\n    lightblue: \"add8e6\",\n    lightcoral: \"f08080\",\n    lightcyan: \"e0ffff\",\n    lightgoldenrodyellow: \"fafad2\",\n    lightgray: \"d3d3d3\",\n    lightgreen: \"90ee90\",\n    lightgrey: \"d3d3d3\",\n    lightpink: \"ffb6c1\",\n    lightsalmon: \"ffa07a\",\n    lightseagreen: \"20b2aa\",\n    lightskyblue: \"87cefa\",\n    lightslategray: \"789\",\n    lightslategrey: \"789\",\n    lightsteelblue: \"b0c4de\",\n    lightyellow: \"ffffe0\",\n    lime: \"0f0\",\n    limegreen: \"32cd32\",\n    linen: \"faf0e6\",\n    magenta: \"f0f\",\n    maroon: \"800000\",\n    mediumaquamarine: \"66cdaa\",\n    mediumblue: \"0000cd\",\n    mediumorchid: \"ba55d3\",\n    mediumpurple: \"9370db\",\n    mediumseagreen: \"3cb371\",\n    mediumslateblue: \"7b68ee\",\n    mediumspringgreen: \"00fa9a\",\n    mediumturquoise: \"48d1cc\",\n    mediumvioletred: \"c71585\",\n    midnightblue: \"191970\",\n    mintcream: \"f5fffa\",\n    mistyrose: \"ffe4e1\",\n    moccasin: \"ffe4b5\",\n    navajowhite: \"ffdead\",\n    navy: \"000080\",\n    oldlace: \"fdf5e6\",\n    olive: \"808000\",\n    olivedrab: \"6b8e23\",\n    orange: \"ffa500\",\n    orangered: \"ff4500\",\n    orchid: \"da70d6\",\n    palegoldenrod: \"eee8aa\",\n    palegreen: \"98fb98\",\n    paleturquoise: \"afeeee\",\n    palevioletred: \"db7093\",\n    papayawhip: \"ffefd5\",\n    peachpuff: \"ffdab9\",\n    peru: \"cd853f\",\n    pink: \"ffc0cb\",\n    plum: \"dda0dd\",\n    powderblue: \"b0e0e6\",\n    purple: \"800080\",\n    rebeccapurple: \"663399\",\n    red: \"f00\",\n    rosybrown: \"bc8f8f\",\n    royalblue: \"4169e1\",\n    saddlebrown: \"8b4513\",\n    salmon: \"fa8072\",\n    sandybrown: \"f4a460\",\n    seagreen: \"2e8b57\",\n    seashell: \"fff5ee\",\n    sienna: \"a0522d\",\n    silver: \"c0c0c0\",\n    skyblue: \"87ceeb\",\n    slateblue: \"6a5acd\",\n    slategray: \"708090\",\n    slategrey: \"708090\",\n    snow: \"fffafa\",\n    springgreen: \"00ff7f\",\n    steelblue: \"4682b4\",\n    tan: \"d2b48c\",\n    teal: \"008080\",\n    thistle: \"d8bfd8\",\n    tomato: \"ff6347\",\n    turquoise: \"40e0d0\",\n    violet: \"ee82ee\",\n    wheat: \"f5deb3\",\n    white: \"fff\",\n    whitesmoke: \"f5f5f5\",\n    yellow: \"ff0\",\n    yellowgreen: \"9acd32\"\n  };\n\n  // Make it easy to access colors via `hexNames[hex]`\n  var hexNames = tinycolor.hexNames = flip(names);\n\n  // Utilities\n  // ---------\n\n  // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n  function flip(o) {\n    var flipped = {};\n    for (var i in o) {\n      if (o.hasOwnProperty(i)) {\n        flipped[o[i]] = i;\n      }\n    }\n    return flipped;\n  }\n\n  // Return a valid alpha value [0,1] with all invalid values being set to 1\n  function boundAlpha(a) {\n    a = parseFloat(a);\n    if (isNaN(a) || a < 0 || a > 1) {\n      a = 1;\n    }\n    return a;\n  }\n\n  // Take input from [0, n] and return it as [0, 1]\n  function bound01(n, max) {\n    if (isOnePointZero(n)) n = \"100%\";\n    var processPercent = isPercentage(n);\n    n = Math.min(max, Math.max(0, parseFloat(n)));\n\n    // Automatically convert percentage into number\n    if (processPercent) {\n      n = parseInt(n * max, 10) / 100;\n    }\n\n    // Handle floating point rounding errors\n    if (Math.abs(n - max) < 0.000001) {\n      return 1;\n    }\n\n    // Convert into [0, 1] range if it isn't already\n    return n % max / parseFloat(max);\n  }\n\n  // Force a number between 0 and 1\n  function clamp01(val) {\n    return Math.min(1, Math.max(0, val));\n  }\n\n  // Parse a base-16 hex value into a base-10 integer\n  function parseIntFromHex(val) {\n    return parseInt(val, 16);\n  }\n\n  // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n  // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n  function isOnePointZero(n) {\n    return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n  }\n\n  // Check to see if string passed in is a percentage\n  function isPercentage(n) {\n    return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n  }\n\n  // Force a hex value to have 2 characters\n  function pad2(c) {\n    return c.length == 1 ? \"0\" + c : \"\" + c;\n  }\n\n  // Replace a decimal with it's percentage value\n  function convertToPercentage(n) {\n    if (n <= 1) {\n      n = n * 100 + \"%\";\n    }\n    return n;\n  }\n\n  // Converts a decimal to a hex value\n  function convertDecimalToHex(d) {\n    return Math.round(parseFloat(d) * 255).toString(16);\n  }\n  // Converts a hex value to a decimal\n  function convertHexToDecimal(h) {\n    return parseIntFromHex(h) / 255;\n  }\n  var matchers = function () {\n    // <http://www.w3.org/TR/css3-values/#integers>\n    var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n    // <http://www.w3.org/TR/css3-values/#number-value>\n    var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n    // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n    var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n    // Actual matching.\n    // Parentheses and commas are optional, but not required.\n    // Whitespace can take the place of commas or opening paren\n    var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n    var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n    return {\n      CSS_UNIT: new RegExp(CSS_UNIT),\n      rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n      rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n      hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n      hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n      hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n      hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n      hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n      hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n    };\n  }();\n\n  // `isValidCSSUnit`\n  // Take in a single string / number and check to see if it looks like a CSS unit\n  // (see `matchers` above for definition).\n  function isValidCSSUnit(color) {\n    return !!matchers.CSS_UNIT.exec(color);\n  }\n\n  // `stringInputToObject`\n  // Permissive string parsing.  Take in a number of formats, and output an object\n  // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n  function stringInputToObject(color) {\n    color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n    var named = false;\n    if (names[color]) {\n      color = names[color];\n      named = true;\n    } else if (color == \"transparent\") {\n      return {\n        r: 0,\n        g: 0,\n        b: 0,\n        a: 0,\n        format: \"name\"\n      };\n    }\n\n    // Try to match string input using regular expressions.\n    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n    // Just return an object and let the conversion functions handle that.\n    // This way the result will be the same whether the tinycolor is initialized with string or object.\n    var match;\n    if (match = matchers.rgb.exec(color)) {\n      return {\n        r: match[1],\n        g: match[2],\n        b: match[3]\n      };\n    }\n    if (match = matchers.rgba.exec(color)) {\n      return {\n        r: match[1],\n        g: match[2],\n        b: match[3],\n        a: match[4]\n      };\n    }\n    if (match = matchers.hsl.exec(color)) {\n      return {\n        h: match[1],\n        s: match[2],\n        l: match[3]\n      };\n    }\n    if (match = matchers.hsla.exec(color)) {\n      return {\n        h: match[1],\n        s: match[2],\n        l: match[3],\n        a: match[4]\n      };\n    }\n    if (match = matchers.hsv.exec(color)) {\n      return {\n        h: match[1],\n        s: match[2],\n        v: match[3]\n      };\n    }\n    if (match = matchers.hsva.exec(color)) {\n      return {\n        h: match[1],\n        s: match[2],\n        v: match[3],\n        a: match[4]\n      };\n    }\n    if (match = matchers.hex8.exec(color)) {\n      return {\n        r: parseIntFromHex(match[1]),\n        g: parseIntFromHex(match[2]),\n        b: parseIntFromHex(match[3]),\n        a: convertHexToDecimal(match[4]),\n        format: named ? \"name\" : \"hex8\"\n      };\n    }\n    if (match = matchers.hex6.exec(color)) {\n      return {\n        r: parseIntFromHex(match[1]),\n        g: parseIntFromHex(match[2]),\n        b: parseIntFromHex(match[3]),\n        format: named ? \"name\" : \"hex\"\n      };\n    }\n    if (match = matchers.hex4.exec(color)) {\n      return {\n        r: parseIntFromHex(match[1] + \"\" + match[1]),\n        g: parseIntFromHex(match[2] + \"\" + match[2]),\n        b: parseIntFromHex(match[3] + \"\" + match[3]),\n        a: convertHexToDecimal(match[4] + \"\" + match[4]),\n        format: named ? \"name\" : \"hex8\"\n      };\n    }\n    if (match = matchers.hex3.exec(color)) {\n      return {\n        r: parseIntFromHex(match[1] + \"\" + match[1]),\n        g: parseIntFromHex(match[2] + \"\" + match[2]),\n        b: parseIntFromHex(match[3] + \"\" + match[3]),\n        format: named ? \"name\" : \"hex\"\n      };\n    }\n    return false;\n  }\n  function validateWCAG2Parms(parms) {\n    // return valid WCAG2 parms for isReadable.\n    // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n    var level, size;\n    parms = parms || {\n      level: \"AA\",\n      size: \"small\"\n    };\n    level = (parms.level || \"AA\").toUpperCase();\n    size = (parms.size || \"small\").toLowerCase();\n    if (level !== \"AA\" && level !== \"AAA\") {\n      level = \"AA\";\n    }\n    if (size !== \"small\" && size !== \"large\") {\n      size = \"small\";\n    }\n    return {\n      level: level,\n      size: size\n    };\n  }\n\n  return tinycolor;\n\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Swatch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _interaction = require('../../helpers/interaction');\n\nvar _Checkboard = require('./Checkboard');\n\nvar _Checkboard2 = _interopRequireDefault(_Checkboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ENTER = 13;\n\nvar Swatch = exports.Swatch = function Swatch(_ref) {\n  var color = _ref.color,\n      style = _ref.style,\n      _ref$onClick = _ref.onClick,\n      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n      onHover = _ref.onHover,\n      _ref$title = _ref.title,\n      title = _ref$title === undefined ? color : _ref$title,\n      children = _ref.children,\n      focus = _ref.focus,\n      _ref$focusStyle = _ref.focusStyle,\n      focusStyle = _ref$focusStyle === undefined ? {} : _ref$focusStyle;\n\n  var transparent = color === 'transparent';\n  var styles = (0, _reactcss2.default)({\n    default: {\n      swatch: _extends({\n        background: color,\n        height: '100%',\n        width: '100%',\n        cursor: 'pointer',\n        position: 'relative',\n        outline: 'none'\n      }, style, focus ? focusStyle : {})\n    }\n  });\n\n  var handleClick = function handleClick(e) {\n    return onClick(color, e);\n  };\n  var handleKeyDown = function handleKeyDown(e) {\n    return e.keyCode === ENTER && onClick(color, e);\n  };\n  var handleHover = function handleHover(e) {\n    return onHover(color, e);\n  };\n\n  var optionalEvents = {};\n  if (onHover) {\n    optionalEvents.onMouseOver = handleHover;\n  }\n\n  return _react2.default.createElement(\n    'div',\n    _extends({\n      style: styles.swatch,\n      onClick: handleClick,\n      title: title,\n      tabIndex: 0,\n      onKeyDown: handleKeyDown\n    }, optionalEvents),\n    children,\n    transparent && _react2.default.createElement(_Checkboard2.default, {\n      borderRadius: styles.swatch.borderRadius,\n      boxShadow: 'inset 0 0 0 1px rgba(0,0,0,0.1)'\n    })\n  );\n};\n\nexports.default = (0, _interaction.handleFocus)(Swatch);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.handleFocus = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable no-invalid-this */\n\n\nvar handleFocus = exports.handleFocus = function handleFocus(Component) {\n  var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n  return function (_React$Component) {\n    _inherits(Focus, _React$Component);\n\n    function Focus() {\n      var _ref;\n\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, Focus);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Focus.__proto__ || Object.getPrototypeOf(Focus)).call.apply(_ref, [this].concat(args))), _this), _this.state = { focus: false }, _this.handleFocus = function () {\n        return _this.setState({ focus: true });\n      }, _this.handleBlur = function () {\n        return _this.setState({ focus: false });\n      }, _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    _createClass(Focus, [{\n      key: 'render',\n      value: function render() {\n        return _react2.default.createElement(\n          Span,\n          { onFocus: this.handleFocus, onBlur: this.handleBlur },\n          _react2.default.createElement(Component, _extends({}, this.props, this.state))\n        );\n      }\n    }]);\n\n    return Focus;\n  }(_react2.default.Component);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlphaPointer = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AlphaPointer = exports.AlphaPointer = function AlphaPointer(_ref) {\n  var direction = _ref.direction;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '18px',\n        height: '18px',\n        borderRadius: '50%',\n        transform: 'translate(-9px, -1px)',\n        backgroundColor: 'rgb(248, 248, 248)',\n        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'\n      }\n    },\n    'vertical': {\n      picker: {\n        transform: 'translate(-3px, -9px)'\n      }\n    }\n  }, { vertical: direction === 'vertical' });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = AlphaPointer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Block = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nvar _BlockSwatches = require('./BlockSwatches');\n\nvar _BlockSwatches2 = _interopRequireDefault(_BlockSwatches);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Block = exports.Block = function Block(_ref) {\n  var onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      hex = _ref.hex,\n      colors = _ref.colors,\n      width = _ref.width,\n      triangle = _ref.triangle,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var transparent = hex === 'transparent';\n  var handleChange = function handleChange(hexCode, e) {\n    _color2.default.isValidHex(hexCode) && onChange({\n      hex: hexCode,\n      source: 'hex'\n    }, e);\n  };\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      card: {\n        width: width,\n        background: '#fff',\n        boxShadow: '0 1px rgba(0,0,0,.1)',\n        borderRadius: '6px',\n        position: 'relative'\n      },\n      head: {\n        height: '110px',\n        background: hex,\n        borderRadius: '6px 6px 0 0',\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center',\n        position: 'relative'\n      },\n      body: {\n        padding: '10px'\n      },\n      label: {\n        fontSize: '18px',\n        color: _color2.default.getContrastingColor(hex),\n        position: 'relative'\n      },\n      triangle: {\n        width: '0px',\n        height: '0px',\n        borderStyle: 'solid',\n        borderWidth: '0 10px 10px 10px',\n        borderColor: 'transparent transparent ' + hex + ' transparent',\n        position: 'absolute',\n        top: '-10px',\n        left: '50%',\n        marginLeft: '-10px'\n      },\n      input: {\n        width: '100%',\n        fontSize: '12px',\n        color: '#666',\n        border: '0px',\n        outline: 'none',\n        height: '22px',\n        boxShadow: 'inset 0 0 0 1px #ddd',\n        borderRadius: '4px',\n        padding: '0 7px',\n        boxSizing: 'border-box'\n      }\n    },\n    'hide-triangle': {\n      triangle: {\n        display: 'none'\n      }\n    }\n  }, passedStyles), { 'hide-triangle': triangle === 'hide' });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.card, className: 'block-picker ' + className },\n    _react2.default.createElement('div', { style: styles.triangle }),\n    _react2.default.createElement(\n      'div',\n      { style: styles.head },\n      transparent && _react2.default.createElement(_common.Checkboard, { borderRadius: '6px 6px 0 0' }),\n      _react2.default.createElement(\n        'div',\n        { style: styles.label },\n        hex\n      )\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.body },\n      _react2.default.createElement(_BlockSwatches2.default, { colors: colors, onClick: handleChange, onSwatchHover: onSwatchHover }),\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input },\n        value: hex,\n        onChange: handleChange\n      })\n    )\n  );\n};\n\nBlock.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),\n  triangle: _propTypes2.default.oneOf(['top', 'hide']),\n  styles: _propTypes2.default.object\n};\n\nBlock.defaultProps = {\n  width: 170,\n  colors: ['#D9E3F0', '#F47373', '#697689', '#37D67A', '#2CCCE4', '#555555', '#dce775', '#ff8a65', '#ba68c8'],\n  triangle: 'top',\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Block);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BlockSwatches = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BlockSwatches = exports.BlockSwatches = function BlockSwatches(_ref) {\n  var colors = _ref.colors,\n      onClick = _ref.onClick,\n      onSwatchHover = _ref.onSwatchHover;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatches: {\n        marginRight: '-10px'\n      },\n      swatch: {\n        width: '22px',\n        height: '22px',\n        float: 'left',\n        marginRight: '10px',\n        marginBottom: '10px',\n        borderRadius: '4px'\n      },\n      clear: {\n        clear: 'both'\n      }\n    }\n  });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.swatches },\n    (0, _map2.default)(colors, function (c) {\n      return _react2.default.createElement(_common.Swatch, {\n        key: c,\n        color: c,\n        style: styles.swatch,\n        onClick: onClick,\n        onHover: onSwatchHover,\n        focusStyle: {\n          boxShadow: '0 0 4px ' + c\n        }\n      });\n    }),\n    _react2.default.createElement('div', { style: styles.clear })\n  );\n};\n\nexports.default = BlockSwatches;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Circle = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _materialColors = require('material-colors');\n\nvar material = _interopRequireWildcard(_materialColors);\n\nvar _common = require('../common');\n\nvar _CircleSwatch = require('./CircleSwatch');\n\nvar _CircleSwatch2 = _interopRequireDefault(_CircleSwatch);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Circle = exports.Circle = function Circle(_ref) {\n  var width = _ref.width,\n      onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      colors = _ref.colors,\n      hex = _ref.hex,\n      circleSize = _ref.circleSize,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      circleSpacing = _ref.circleSpacing,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      card: {\n        width: width,\n        display: 'flex',\n        flexWrap: 'wrap',\n        marginRight: -circleSpacing,\n        marginBottom: -circleSpacing\n      }\n    }\n  }, passedStyles));\n\n  var handleChange = function handleChange(hexCode, e) {\n    return onChange({ hex: hexCode, source: 'hex' }, e);\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.card, className: 'circle-picker ' + className },\n    (0, _map2.default)(colors, function (c) {\n      return _react2.default.createElement(_CircleSwatch2.default, {\n        key: c,\n        color: c,\n        onClick: handleChange,\n        onSwatchHover: onSwatchHover,\n        active: hex === c.toLowerCase(),\n        circleSize: circleSize,\n        circleSpacing: circleSpacing\n      });\n    })\n  );\n};\n\nCircle.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  circleSize: _propTypes2.default.number,\n  circleSpacing: _propTypes2.default.number,\n  styles: _propTypes2.default.object\n};\n\nCircle.defaultProps = {\n  width: 252,\n  circleSize: 28,\n  circleSpacing: 14,\n  colors: [material.red['500'], material.pink['500'], material.purple['500'], material.deepPurple['500'], material.indigo['500'], material.blue['500'], material.lightBlue['500'], material.cyan['500'], material.teal['500'], material.green['500'], material.lightGreen['500'], material.lime['500'], material.yellow['500'], material.amber['500'], material.orange['500'], material.deepOrange['500'], material.brown['500'], material.blueGrey['500']],\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Circle);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CircleSwatch = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CircleSwatch = exports.CircleSwatch = function CircleSwatch(_ref) {\n  var color = _ref.color,\n      onClick = _ref.onClick,\n      onSwatchHover = _ref.onSwatchHover,\n      hover = _ref.hover,\n      active = _ref.active,\n      circleSize = _ref.circleSize,\n      circleSpacing = _ref.circleSpacing;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatch: {\n        width: circleSize,\n        height: circleSize,\n        marginRight: circleSpacing,\n        marginBottom: circleSpacing,\n        transform: 'scale(1)',\n        transition: '100ms transform ease'\n      },\n      Swatch: {\n        borderRadius: '50%',\n        background: 'transparent',\n        boxShadow: 'inset 0 0 0 ' + circleSize / 2 + 'px ' + color,\n        transition: '100ms box-shadow ease'\n      }\n    },\n    'hover': {\n      swatch: {\n        transform: 'scale(1.2)'\n      }\n    },\n    'active': {\n      Swatch: {\n        boxShadow: 'inset 0 0 0 3px ' + color\n      }\n    }\n  }, { hover: hover, active: active });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.swatch },\n    _react2.default.createElement(_common.Swatch, {\n      style: styles.Swatch,\n      color: color,\n      onClick: onClick,\n      onHover: onSwatchHover,\n      focusStyle: { boxShadow: styles.Swatch.boxShadow + ', 0 0 5px ' + color }\n    })\n  );\n};\n\nCircleSwatch.defaultProps = {\n  circleSize: 28,\n  circleSpacing: 14\n};\n\nexports.default = (0, _reactcss.handleHover)(CircleSwatch);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Chrome = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _ChromeFields = require('./ChromeFields');\n\nvar _ChromeFields2 = _interopRequireDefault(_ChromeFields);\n\nvar _ChromePointer = require('./ChromePointer');\n\nvar _ChromePointer2 = _interopRequireDefault(_ChromePointer);\n\nvar _ChromePointerCircle = require('./ChromePointerCircle');\n\nvar _ChromePointerCircle2 = _interopRequireDefault(_ChromePointerCircle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Chrome = exports.Chrome = function Chrome(_ref) {\n  var width = _ref.width,\n      onChange = _ref.onChange,\n      disableAlpha = _ref.disableAlpha,\n      rgb = _ref.rgb,\n      hsl = _ref.hsl,\n      hsv = _ref.hsv,\n      hex = _ref.hex,\n      renderers = _ref.renderers,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      picker: {\n        width: width,\n        background: '#fff',\n        borderRadius: '2px',\n        boxShadow: '0 0 2px rgba(0,0,0,.3), 0 4px 8px rgba(0,0,0,.3)',\n        boxSizing: 'initial',\n        fontFamily: 'Menlo'\n      },\n      saturation: {\n        width: '100%',\n        paddingBottom: '55%',\n        position: 'relative',\n        borderRadius: '2px 2px 0 0',\n        overflow: 'hidden'\n      },\n      Saturation: {\n        radius: '2px 2px 0 0'\n      },\n      body: {\n        padding: '16px 16px 12px'\n      },\n      controls: {\n        display: 'flex'\n      },\n      color: {\n        width: '32px'\n      },\n      swatch: {\n        marginTop: '6px',\n        width: '16px',\n        height: '16px',\n        borderRadius: '8px',\n        position: 'relative',\n        overflow: 'hidden'\n      },\n      active: {\n        absolute: '0px 0px 0px 0px',\n        borderRadius: '8px',\n        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.1)',\n        background: 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + rgb.a + ')',\n        zIndex: '2'\n      },\n      toggles: {\n        flex: '1'\n      },\n      hue: {\n        height: '10px',\n        position: 'relative',\n        marginBottom: '8px'\n      },\n      Hue: {\n        radius: '2px'\n      },\n      alpha: {\n        height: '10px',\n        position: 'relative'\n      },\n      Alpha: {\n        radius: '2px'\n      }\n    },\n    'disableAlpha': {\n      color: {\n        width: '22px'\n      },\n      alpha: {\n        display: 'none'\n      },\n      hue: {\n        marginBottom: '0px'\n      },\n      swatch: {\n        width: '10px',\n        height: '10px',\n        marginTop: '0px'\n      }\n    }\n  }, passedStyles), { disableAlpha: disableAlpha });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.picker, className: 'chrome-picker ' + className },\n    _react2.default.createElement(\n      'div',\n      { style: styles.saturation },\n      _react2.default.createElement(_common.Saturation, {\n        style: styles.Saturation,\n        hsl: hsl,\n        hsv: hsv,\n        pointer: _ChromePointerCircle2.default,\n        onChange: onChange\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.body },\n      _react2.default.createElement(\n        'div',\n        { style: styles.controls, className: 'flexbox-fix' },\n        _react2.default.createElement(\n          'div',\n          { style: styles.color },\n          _react2.default.createElement(\n            'div',\n            { style: styles.swatch },\n            _react2.default.createElement('div', { style: styles.active }),\n            _react2.default.createElement(_common.Checkboard, { renderers: renderers })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.toggles },\n          _react2.default.createElement(\n            'div',\n            { style: styles.hue },\n            _react2.default.createElement(_common.Hue, {\n              style: styles.Hue,\n              hsl: hsl,\n              pointer: _ChromePointer2.default,\n              onChange: onChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.alpha },\n            _react2.default.createElement(_common.Alpha, {\n              style: styles.Alpha,\n              rgb: rgb,\n              hsl: hsl,\n              pointer: _ChromePointer2.default,\n              renderers: renderers,\n              onChange: onChange\n            })\n          )\n        )\n      ),\n      _react2.default.createElement(_ChromeFields2.default, {\n        rgb: rgb,\n        hsl: hsl,\n        hex: hex,\n        onChange: onChange,\n        disableAlpha: disableAlpha\n      })\n    )\n  );\n};\n\nChrome.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  disableAlpha: _propTypes2.default.bool,\n  styles: _propTypes2.default.object\n};\n\nChrome.defaultProps = {\n  width: 225,\n  disableAlpha: false,\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Chrome);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChromeFields = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nvar _UnfoldMoreHorizontalIcon = require('@icons/material/UnfoldMoreHorizontalIcon');\n\nvar _UnfoldMoreHorizontalIcon2 = _interopRequireDefault(_UnfoldMoreHorizontalIcon);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable react/no-did-mount-set-state, no-param-reassign */\n\nvar ChromeFields = exports.ChromeFields = function (_React$Component) {\n  _inherits(ChromeFields, _React$Component);\n\n  function ChromeFields() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, ChromeFields);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ChromeFields.__proto__ || Object.getPrototypeOf(ChromeFields)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      view: ''\n    }, _this.toggleViews = function () {\n      if (_this.state.view === 'hex') {\n        _this.setState({ view: 'rgb' });\n      } else if (_this.state.view === 'rgb') {\n        _this.setState({ view: 'hsl' });\n      } else if (_this.state.view === 'hsl') {\n        if (_this.props.hsl.a === 1) {\n          _this.setState({ view: 'hex' });\n        } else {\n          _this.setState({ view: 'rgb' });\n        }\n      }\n    }, _this.handleChange = function (data, e) {\n      if (data.hex) {\n        _color2.default.isValidHex(data.hex) && _this.props.onChange({\n          hex: data.hex,\n          source: 'hex'\n        }, e);\n      } else if (data.r || data.g || data.b) {\n        _this.props.onChange({\n          r: data.r || _this.props.rgb.r,\n          g: data.g || _this.props.rgb.g,\n          b: data.b || _this.props.rgb.b,\n          source: 'rgb'\n        }, e);\n      } else if (data.a) {\n        if (data.a < 0) {\n          data.a = 0;\n        } else if (data.a > 1) {\n          data.a = 1;\n        }\n\n        _this.props.onChange({\n          h: _this.props.hsl.h,\n          s: _this.props.hsl.s,\n          l: _this.props.hsl.l,\n          a: Math.round(data.a * 100) / 100,\n          source: 'rgb'\n        }, e);\n      } else if (data.h || data.s || data.l) {\n        // Remove any occurances of '%'.\n        if (typeof data.s === 'string' && data.s.includes('%')) {\n          data.s = data.s.replace('%', '');\n        }\n        if (typeof data.l === 'string' && data.l.includes('%')) {\n          data.l = data.l.replace('%', '');\n        }\n\n        _this.props.onChange({\n          h: data.h || _this.props.hsl.h,\n          s: Number(data.s && data.s || _this.props.hsl.s),\n          l: Number(data.l && data.l || _this.props.hsl.l),\n          source: 'hsl'\n        }, e);\n      }\n    }, _this.showHighlight = function (e) {\n      e.currentTarget.style.background = '#eee';\n    }, _this.hideHighlight = function (e) {\n      e.currentTarget.style.background = 'transparent';\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(ChromeFields, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (this.props.hsl.a === 1 && this.state.view !== 'hex') {\n        this.setState({ view: 'hex' });\n      } else if (this.state.view !== 'rgb' && this.state.view !== 'hsl') {\n        this.setState({ view: 'rgb' });\n      }\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      if (nextProps.hsl.a !== 1 && this.state.view === 'hex') {\n        this.setState({ view: 'rgb' });\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var styles = (0, _reactcss2.default)({\n        'default': {\n          wrap: {\n            paddingTop: '16px',\n            display: 'flex'\n          },\n          fields: {\n            flex: '1',\n            display: 'flex',\n            marginLeft: '-6px'\n          },\n          field: {\n            paddingLeft: '6px',\n            width: '100%'\n          },\n          alpha: {\n            paddingLeft: '6px',\n            width: '100%'\n          },\n          toggle: {\n            width: '32px',\n            textAlign: 'right',\n            position: 'relative'\n          },\n          icon: {\n            marginRight: '-4px',\n            marginTop: '12px',\n            cursor: 'pointer',\n            position: 'relative'\n          },\n          iconHighlight: {\n            position: 'absolute',\n            width: '24px',\n            height: '28px',\n            background: '#eee',\n            borderRadius: '4px',\n            top: '10px',\n            left: '12px',\n            display: 'none'\n          },\n          input: {\n            fontSize: '11px',\n            color: '#333',\n            width: '100%',\n            borderRadius: '2px',\n            border: 'none',\n            boxShadow: 'inset 0 0 0 1px #dadada',\n            height: '21px',\n            textAlign: 'center'\n          },\n          label: {\n            textTransform: 'uppercase',\n            fontSize: '11px',\n            lineHeight: '11px',\n            color: '#969696',\n            textAlign: 'center',\n            display: 'block',\n            marginTop: '12px'\n          },\n          svg: {\n            fill: '#333',\n            width: '24px',\n            height: '24px',\n            border: '1px transparent solid',\n            borderRadius: '5px'\n          }\n        },\n        'disableAlpha': {\n          alpha: {\n            display: 'none'\n          }\n        }\n      }, this.props, this.state);\n\n      var fields = void 0;\n      if (this.state.view === 'hex') {\n        fields = _react2.default.createElement(\n          'div',\n          { style: styles.fields, className: 'flexbox-fix' },\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'hex', value: this.props.hex,\n              onChange: this.handleChange\n            })\n          )\n        );\n      } else if (this.state.view === 'rgb') {\n        fields = _react2.default.createElement(\n          'div',\n          { style: styles.fields, className: 'flexbox-fix' },\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'r',\n              value: this.props.rgb.r,\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'g',\n              value: this.props.rgb.g,\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'b',\n              value: this.props.rgb.b,\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.alpha },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'a',\n              value: this.props.rgb.a,\n              arrowOffset: 0.01,\n              onChange: this.handleChange\n            })\n          )\n        );\n      } else if (this.state.view === 'hsl') {\n        fields = _react2.default.createElement(\n          'div',\n          { style: styles.fields, className: 'flexbox-fix' },\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'h',\n              value: Math.round(this.props.hsl.h),\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 's',\n              value: Math.round(this.props.hsl.s * 100) + '%',\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.field },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'l',\n              value: Math.round(this.props.hsl.l * 100) + '%',\n              onChange: this.handleChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.alpha },\n            _react2.default.createElement(_common.EditableInput, {\n              style: { input: styles.input, label: styles.label },\n              label: 'a',\n              value: this.props.hsl.a,\n              arrowOffset: 0.01,\n              onChange: this.handleChange\n            })\n          )\n        );\n      }\n\n      return _react2.default.createElement(\n        'div',\n        { style: styles.wrap, className: 'flexbox-fix' },\n        fields,\n        _react2.default.createElement(\n          'div',\n          { style: styles.toggle },\n          _react2.default.createElement(\n            'div',\n            { style: styles.icon, onClick: this.toggleViews, ref: function ref(icon) {\n                return _this2.icon = icon;\n              } },\n            _react2.default.createElement(_UnfoldMoreHorizontalIcon2.default, {\n              style: styles.svg,\n              onMouseOver: this.showHighlight,\n              onMouseEnter: this.showHighlight,\n              onMouseOut: this.hideHighlight\n            })\n          )\n        )\n      );\n    }\n  }]);\n\n  return ChromeFields;\n}(_react2.default.Component);\n\nexports.default = ChromeFields;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar DEFAULT_SIZE = 24;\n\nexports.default = function (_ref) {\n  var _ref$fill = _ref.fill,\n      fill = _ref$fill === undefined ? 'currentColor' : _ref$fill,\n      _ref$width = _ref.width,\n      width = _ref$width === undefined ? DEFAULT_SIZE : _ref$width,\n      _ref$height = _ref.height,\n      height = _ref$height === undefined ? DEFAULT_SIZE : _ref$height,\n      _ref$style = _ref.style,\n      style = _ref$style === undefined ? {} : _ref$style,\n      props = _objectWithoutProperties(_ref, ['fill', 'width', 'height', 'style']);\n\n  return _react2.default.createElement(\n    'svg',\n    _extends({\n      viewBox: '0 0 ' + DEFAULT_SIZE + ' ' + DEFAULT_SIZE,\n      style: _extends({ fill: fill, width: width, height: height }, style)\n    }, props),\n    _react2.default.createElement('path', { d: 'M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z' })\n  );\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChromePointer = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ChromePointer = exports.ChromePointer = function ChromePointer() {\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '12px',\n        height: '12px',\n        borderRadius: '6px',\n        transform: 'translate(-6px, -1px)',\n        backgroundColor: 'rgb(248, 248, 248)',\n        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'\n      }\n    }\n  });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = ChromePointer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChromePointerCircle = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ChromePointerCircle = exports.ChromePointerCircle = function ChromePointerCircle() {\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '12px',\n        height: '12px',\n        borderRadius: '6px',\n        boxShadow: 'inset 0 0 0 1px #fff',\n        transform: 'translate(-6px, -6px)'\n      }\n    }\n  });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = ChromePointerCircle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Compact = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nvar _CompactColor = require('./CompactColor');\n\nvar _CompactColor2 = _interopRequireDefault(_CompactColor);\n\nvar _CompactFields = require('./CompactFields');\n\nvar _CompactFields2 = _interopRequireDefault(_CompactFields);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Compact = exports.Compact = function Compact(_ref) {\n  var onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      colors = _ref.colors,\n      hex = _ref.hex,\n      rgb = _ref.rgb,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      Compact: {\n        background: '#f6f6f6',\n        radius: '4px'\n      },\n      compact: {\n        paddingTop: '5px',\n        paddingLeft: '5px',\n        boxSizing: 'initial',\n        width: '240px'\n      },\n      clear: {\n        clear: 'both'\n      }\n    }\n  }, passedStyles));\n\n  var handleChange = function handleChange(data, e) {\n    if (data.hex) {\n      _color2.default.isValidHex(data.hex) && onChange({\n        hex: data.hex,\n        source: 'hex'\n      }, e);\n    } else {\n      onChange(data, e);\n    }\n  };\n\n  return _react2.default.createElement(\n    _common.Raised,\n    { style: styles.Compact, styles: passedStyles },\n    _react2.default.createElement(\n      'div',\n      { style: styles.compact, className: 'compact-picker ' + className },\n      _react2.default.createElement(\n        'div',\n        null,\n        (0, _map2.default)(colors, function (c) {\n          return _react2.default.createElement(_CompactColor2.default, {\n            key: c,\n            color: c,\n            active: c.toLowerCase() === hex,\n            onClick: handleChange,\n            onSwatchHover: onSwatchHover\n          });\n        }),\n        _react2.default.createElement('div', { style: styles.clear })\n      ),\n      _react2.default.createElement(_CompactFields2.default, { hex: hex, rgb: rgb, onChange: handleChange })\n    )\n  );\n};\n\nCompact.propTypes = {\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),\n  styles: _propTypes2.default.object\n};\n\nCompact.defaultProps = {\n  colors: ['#4D4D4D', '#999999', '#FFFFFF', '#F44E3B', '#FE9200', '#FCDC00', '#DBDF00', '#A4DD00', '#68CCCA', '#73D8FF', '#AEA1FF', '#FDA1FF', '#333333', '#808080', '#cccccc', '#D33115', '#E27300', '#FCC400', '#B0BC00', '#68BC00', '#16A5A5', '#009CE0', '#7B64FF', '#FA28FF', '#000000', '#666666', '#B3B3B3', '#9F0500', '#C45100', '#FB9E00', '#808900', '#194D33', '#0C797D', '#0062B1', '#653294', '#AB149E'],\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Compact);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactColor = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CompactColor = exports.CompactColor = function CompactColor(_ref) {\n  var color = _ref.color,\n      _ref$onClick = _ref.onClick,\n      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n      onSwatchHover = _ref.onSwatchHover,\n      active = _ref.active;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      color: {\n        background: color,\n        width: '15px',\n        height: '15px',\n        float: 'left',\n        marginRight: '5px',\n        marginBottom: '5px',\n        position: 'relative',\n        cursor: 'pointer'\n      },\n      dot: {\n        absolute: '5px 5px 5px 5px',\n        background: _color2.default.getContrastingColor(color),\n        borderRadius: '50%',\n        opacity: '0'\n      }\n    },\n    'active': {\n      dot: {\n        opacity: '1'\n      }\n    },\n    'color-#FFFFFF': {\n      color: {\n        boxShadow: 'inset 0 0 0 1px #ddd'\n      },\n      dot: {\n        background: '#000'\n      }\n    },\n    'transparent': {\n      dot: {\n        background: '#000'\n      }\n    }\n  }, { active: active, 'color-#FFFFFF': color === '#FFFFFF', 'transparent': color === 'transparent' });\n\n  return _react2.default.createElement(\n    _common.Swatch,\n    {\n      style: styles.color,\n      color: color,\n      onClick: onClick,\n      onHover: onSwatchHover,\n      focusStyle: { boxShadow: '0 0 4px ' + color }\n    },\n    _react2.default.createElement('div', { style: styles.dot })\n  );\n};\n\nexports.default = CompactColor;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactFields = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CompactFields = exports.CompactFields = function CompactFields(_ref) {\n  var hex = _ref.hex,\n      rgb = _ref.rgb,\n      onChange = _ref.onChange;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      fields: {\n        display: 'flex',\n        paddingBottom: '6px',\n        paddingRight: '5px',\n        position: 'relative'\n      },\n      active: {\n        position: 'absolute',\n        top: '6px',\n        left: '5px',\n        height: '9px',\n        width: '9px',\n        background: hex\n      },\n      HEXwrap: {\n        flex: '6',\n        position: 'relative'\n      },\n      HEXinput: {\n        width: '80%',\n        padding: '0px',\n        paddingLeft: '20%',\n        border: 'none',\n        outline: 'none',\n        background: 'none',\n        fontSize: '12px',\n        color: '#333',\n        height: '16px'\n      },\n      HEXlabel: {\n        display: 'none'\n      },\n      RGBwrap: {\n        flex: '3',\n        position: 'relative'\n      },\n      RGBinput: {\n        width: '70%',\n        padding: '0px',\n        paddingLeft: '30%',\n        border: 'none',\n        outline: 'none',\n        background: 'none',\n        fontSize: '12px',\n        color: '#333',\n        height: '16px'\n      },\n      RGBlabel: {\n        position: 'absolute',\n        top: '3px',\n        left: '0px',\n        lineHeight: '16px',\n        textTransform: 'uppercase',\n        fontSize: '12px',\n        color: '#999'\n      }\n    }\n  });\n\n  var handleChange = function handleChange(data, e) {\n    if (data.r || data.g || data.b) {\n      onChange({\n        r: data.r || rgb.r,\n        g: data.g || rgb.g,\n        b: data.b || rgb.b,\n        source: 'rgb'\n      }, e);\n    } else {\n      onChange({\n        hex: data.hex,\n        source: 'hex'\n      }, e);\n    }\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.fields, className: 'flexbox-fix' },\n    _react2.default.createElement('div', { style: styles.active }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },\n      label: 'hex',\n      value: hex,\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'r',\n      value: rgb.r,\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'g',\n      value: rgb.g,\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'b',\n      value: rgb.b,\n      onChange: handleChange\n    })\n  );\n};\n\nexports.default = CompactFields;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Github = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _GithubSwatch = require('./GithubSwatch');\n\nvar _GithubSwatch2 = _interopRequireDefault(_GithubSwatch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Github = exports.Github = function Github(_ref) {\n  var width = _ref.width,\n      colors = _ref.colors,\n      onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      triangle = _ref.triangle,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      card: {\n        width: width,\n        background: '#fff',\n        border: '1px solid rgba(0,0,0,0.2)',\n        boxShadow: '0 3px 12px rgba(0,0,0,0.15)',\n        borderRadius: '4px',\n        position: 'relative',\n        padding: '5px',\n        display: 'flex',\n        flexWrap: 'wrap'\n      },\n      triangle: {\n        position: 'absolute',\n        border: '7px solid transparent',\n        borderBottomColor: '#fff'\n      },\n      triangleShadow: {\n        position: 'absolute',\n        border: '8px solid transparent',\n        borderBottomColor: 'rgba(0,0,0,0.15)'\n      }\n    },\n    'hide-triangle': {\n      triangle: {\n        display: 'none'\n      },\n      triangleShadow: {\n        display: 'none'\n      }\n    },\n    'top-left-triangle': {\n      triangle: {\n        top: '-14px',\n        left: '10px'\n      },\n      triangleShadow: {\n        top: '-16px',\n        left: '9px'\n      }\n    },\n    'top-right-triangle': {\n      triangle: {\n        top: '-14px',\n        right: '10px'\n      },\n      triangleShadow: {\n        top: '-16px',\n        right: '9px'\n      }\n    },\n    'bottom-left-triangle': {\n      triangle: {\n        top: '35px',\n        left: '10px',\n        transform: 'rotate(180deg)'\n      },\n      triangleShadow: {\n        top: '37px',\n        left: '9px',\n        transform: 'rotate(180deg)'\n      }\n    },\n    'bottom-right-triangle': {\n      triangle: {\n        top: '35px',\n        right: '10px',\n        transform: 'rotate(180deg)'\n      },\n      triangleShadow: {\n        top: '37px',\n        right: '9px',\n        transform: 'rotate(180deg)'\n      }\n    }\n  }, passedStyles), {\n    'hide-triangle': triangle === 'hide',\n    'top-left-triangle': triangle === 'top-left',\n    'top-right-triangle': triangle === 'top-right',\n    'bottom-left-triangle': triangle === 'bottom-left',\n    'bottom-right-triangle': triangle === 'bottom-right'\n  });\n\n  var handleChange = function handleChange(hex, e) {\n    return onChange({ hex: hex, source: 'hex' }, e);\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.card, className: 'github-picker ' + className },\n    _react2.default.createElement('div', { style: styles.triangleShadow }),\n    _react2.default.createElement('div', { style: styles.triangle }),\n    (0, _map2.default)(colors, function (c) {\n      return _react2.default.createElement(_GithubSwatch2.default, {\n        color: c,\n        key: c,\n        onClick: handleChange,\n        onSwatchHover: onSwatchHover\n      });\n    })\n  );\n};\n\nGithub.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),\n  triangle: _propTypes2.default.oneOf(['hide', 'top-left', 'top-right', 'bottom-left', 'bottom-right']),\n  styles: _propTypes2.default.object\n};\n\nGithub.defaultProps = {\n  width: 200,\n  colors: ['#B80000', '#DB3E00', '#FCCB00', '#008B02', '#006B76', '#1273DE', '#004DCF', '#5300EB', '#EB9694', '#FAD0C3', '#FEF3BD', '#C1E1C5', '#BEDADC', '#C4DEF6', '#BED3F3', '#D4C4FB'],\n  triangle: 'top-left',\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Github);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.GithubSwatch = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar GithubSwatch = exports.GithubSwatch = function GithubSwatch(_ref) {\n  var hover = _ref.hover,\n      color = _ref.color,\n      onClick = _ref.onClick,\n      onSwatchHover = _ref.onSwatchHover;\n\n  var hoverSwatch = {\n    position: 'relative',\n    zIndex: '2',\n    outline: '2px solid #fff',\n    boxShadow: '0 0 5px 2px rgba(0,0,0,0.25)'\n  };\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatch: {\n        width: '25px',\n        height: '25px',\n        fontSize: '0'\n      }\n    },\n    'hover': {\n      swatch: hoverSwatch\n    }\n  }, { hover: hover });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.swatch },\n    _react2.default.createElement(_common.Swatch, {\n      color: color,\n      onClick: onClick,\n      onHover: onSwatchHover,\n      focusStyle: hoverSwatch\n    })\n  );\n};\n\nexports.default = (0, _reactcss.handleHover)(GithubSwatch);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.HuePicker = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _HuePointer = require('./HuePointer');\n\nvar _HuePointer2 = _interopRequireDefault(_HuePointer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HuePicker = exports.HuePicker = function HuePicker(_ref) {\n  var width = _ref.width,\n      height = _ref.height,\n      onChange = _ref.onChange,\n      hsl = _ref.hsl,\n      direction = _ref.direction,\n      pointer = _ref.pointer,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      picker: {\n        position: 'relative',\n        width: width,\n        height: height\n      },\n      hue: {\n        radius: '2px'\n      }\n    }\n  }, passedStyles));\n\n  // Overwrite to provide pure hue color\n  var handleChange = function handleChange(data) {\n    return onChange({ a: 1, h: data.h, l: 0.5, s: 1 });\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.picker, className: 'hue-picker ' + className },\n    _react2.default.createElement(_common.Hue, _extends({}, styles.hue, {\n      hsl: hsl,\n      pointer: pointer,\n      onChange: handleChange,\n      direction: direction\n    }))\n  );\n};\n\nHuePicker.propTypes = {\n  styles: _propTypes2.default.object\n};\nHuePicker.defaultProps = {\n  width: '316px',\n  height: '16px',\n  direction: 'horizontal',\n  pointer: _HuePointer2.default,\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(HuePicker);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SliderPointer = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SliderPointer = exports.SliderPointer = function SliderPointer(_ref) {\n  var direction = _ref.direction;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '18px',\n        height: '18px',\n        borderRadius: '50%',\n        transform: 'translate(-9px, -1px)',\n        backgroundColor: 'rgb(248, 248, 248)',\n        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'\n      }\n    },\n    'vertical': {\n      picker: {\n        transform: 'translate(-3px, -9px)'\n      }\n    }\n  }, { vertical: direction === 'vertical' });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = SliderPointer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Material = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Material = exports.Material = function Material(_ref) {\n  var onChange = _ref.onChange,\n      hex = _ref.hex,\n      rgb = _ref.rgb,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      material: {\n        width: '98px',\n        height: '98px',\n        padding: '16px',\n        fontFamily: 'Roboto'\n      },\n      HEXwrap: {\n        position: 'relative'\n      },\n      HEXinput: {\n        width: '100%',\n        marginTop: '12px',\n        fontSize: '15px',\n        color: '#333',\n        padding: '0px',\n        border: '0px',\n        borderBottom: '2px solid ' + hex,\n        outline: 'none',\n        height: '30px'\n      },\n      HEXlabel: {\n        position: 'absolute',\n        top: '0px',\n        left: '0px',\n        fontSize: '11px',\n        color: '#999999',\n        textTransform: 'capitalize'\n      },\n      Hex: {\n        style: {}\n      },\n      RGBwrap: {\n        position: 'relative'\n      },\n      RGBinput: {\n        width: '100%',\n        marginTop: '12px',\n        fontSize: '15px',\n        color: '#333',\n        padding: '0px',\n        border: '0px',\n        borderBottom: '1px solid #eee',\n        outline: 'none',\n        height: '30px'\n      },\n      RGBlabel: {\n        position: 'absolute',\n        top: '0px',\n        left: '0px',\n        fontSize: '11px',\n        color: '#999999',\n        textTransform: 'capitalize'\n      },\n      split: {\n        display: 'flex',\n        marginRight: '-10px',\n        paddingTop: '11px'\n      },\n      third: {\n        flex: '1',\n        paddingRight: '10px'\n      }\n    }\n  }, passedStyles));\n\n  var handleChange = function handleChange(data, e) {\n    if (data.hex) {\n      _color2.default.isValidHex(data.hex) && onChange({\n        hex: data.hex,\n        source: 'hex'\n      }, e);\n    } else if (data.r || data.g || data.b) {\n      onChange({\n        r: data.r || rgb.r,\n        g: data.g || rgb.g,\n        b: data.b || rgb.b,\n        source: 'rgb'\n      }, e);\n    }\n  };\n\n  return _react2.default.createElement(\n    _common.Raised,\n    { styles: passedStyles },\n    _react2.default.createElement(\n      'div',\n      { style: styles.material, className: 'material-picker ' + className },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },\n        label: 'hex',\n        value: hex,\n        onChange: handleChange\n      }),\n      _react2.default.createElement(\n        'div',\n        { style: styles.split, className: 'flexbox-fix' },\n        _react2.default.createElement(\n          'div',\n          { style: styles.third },\n          _react2.default.createElement(_common.EditableInput, {\n            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n            label: 'r', value: rgb.r,\n            onChange: handleChange\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.third },\n          _react2.default.createElement(_common.EditableInput, {\n            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n            label: 'g',\n            value: rgb.g,\n            onChange: handleChange\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.third },\n          _react2.default.createElement(_common.EditableInput, {\n            style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n            label: 'b',\n            value: rgb.b,\n            onChange: handleChange\n          })\n        )\n      )\n    )\n  );\n};\n\nexports.default = (0, _common.ColorWrap)(Material);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Photoshop = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _PhotoshopFields = require('./PhotoshopFields');\n\nvar _PhotoshopFields2 = _interopRequireDefault(_PhotoshopFields);\n\nvar _PhotoshopPointerCircle = require('./PhotoshopPointerCircle');\n\nvar _PhotoshopPointerCircle2 = _interopRequireDefault(_PhotoshopPointerCircle);\n\nvar _PhotoshopPointer = require('./PhotoshopPointer');\n\nvar _PhotoshopPointer2 = _interopRequireDefault(_PhotoshopPointer);\n\nvar _PhotoshopButton = require('./PhotoshopButton');\n\nvar _PhotoshopButton2 = _interopRequireDefault(_PhotoshopButton);\n\nvar _PhotoshopPreviews = require('./PhotoshopPreviews');\n\nvar _PhotoshopPreviews2 = _interopRequireDefault(_PhotoshopPreviews);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Photoshop = exports.Photoshop = function (_React$Component) {\n  _inherits(Photoshop, _React$Component);\n\n  function Photoshop(props) {\n    _classCallCheck(this, Photoshop);\n\n    var _this = _possibleConstructorReturn(this, (Photoshop.__proto__ || Object.getPrototypeOf(Photoshop)).call(this));\n\n    _this.state = {\n      currentColor: props.hex\n    };\n    return _this;\n  }\n\n  _createClass(Photoshop, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          _props$styles = _props.styles,\n          passedStyles = _props$styles === undefined ? {} : _props$styles,\n          _props$className = _props.className,\n          className = _props$className === undefined ? '' : _props$className;\n\n      var styles = (0, _reactcss2.default)((0, _merge2.default)({\n        'default': {\n          picker: {\n            background: '#DCDCDC',\n            borderRadius: '4px',\n            boxShadow: '0 0 0 1px rgba(0,0,0,.25), 0 8px 16px rgba(0,0,0,.15)',\n            boxSizing: 'initial',\n            width: '513px'\n          },\n          head: {\n            backgroundImage: 'linear-gradient(-180deg, #F0F0F0 0%, #D4D4D4 100%)',\n            borderBottom: '1px solid #B1B1B1',\n            boxShadow: 'inset 0 1px 0 0 rgba(255,255,255,.2), inset 0 -1px 0 0 rgba(0,0,0,.02)',\n            height: '23px',\n            lineHeight: '24px',\n            borderRadius: '4px 4px 0 0',\n            fontSize: '13px',\n            color: '#4D4D4D',\n            textAlign: 'center'\n          },\n          body: {\n            padding: '15px 15px 0',\n            display: 'flex'\n          },\n          saturation: {\n            width: '256px',\n            height: '256px',\n            position: 'relative',\n            border: '2px solid #B3B3B3',\n            borderBottom: '2px solid #F0F0F0',\n            overflow: 'hidden'\n          },\n          hue: {\n            position: 'relative',\n            height: '256px',\n            width: '19px',\n            marginLeft: '10px',\n            border: '2px solid #B3B3B3',\n            borderBottom: '2px solid #F0F0F0'\n          },\n          controls: {\n            width: '180px',\n            marginLeft: '10px'\n          },\n          top: {\n            display: 'flex'\n          },\n          previews: {\n            width: '60px'\n          },\n          actions: {\n            flex: '1',\n            marginLeft: '20px'\n          }\n        }\n      }, passedStyles));\n\n      return _react2.default.createElement(\n        'div',\n        { style: styles.picker, className: 'photoshop-picker ' + className },\n        _react2.default.createElement(\n          'div',\n          { style: styles.head },\n          this.props.header\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.body, className: 'flexbox-fix' },\n          _react2.default.createElement(\n            'div',\n            { style: styles.saturation },\n            _react2.default.createElement(_common.Saturation, {\n              hsl: this.props.hsl,\n              hsv: this.props.hsv,\n              pointer: _PhotoshopPointerCircle2.default,\n              onChange: this.props.onChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.hue },\n            _react2.default.createElement(_common.Hue, {\n              direction: 'vertical',\n              hsl: this.props.hsl,\n              pointer: _PhotoshopPointer2.default,\n              onChange: this.props.onChange\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { style: styles.controls },\n            _react2.default.createElement(\n              'div',\n              { style: styles.top, className: 'flexbox-fix' },\n              _react2.default.createElement(\n                'div',\n                { style: styles.previews },\n                _react2.default.createElement(_PhotoshopPreviews2.default, {\n                  rgb: this.props.rgb,\n                  currentColor: this.state.currentColor\n                })\n              ),\n              _react2.default.createElement(\n                'div',\n                { style: styles.actions },\n                _react2.default.createElement(_PhotoshopButton2.default, { label: 'OK', onClick: this.props.onAccept, active: true }),\n                _react2.default.createElement(_PhotoshopButton2.default, { label: 'Cancel', onClick: this.props.onCancel }),\n                _react2.default.createElement(_PhotoshopFields2.default, {\n                  onChange: this.props.onChange,\n                  rgb: this.props.rgb,\n                  hsv: this.props.hsv,\n                  hex: this.props.hex\n                })\n              )\n            )\n          )\n        )\n      );\n    }\n  }]);\n\n  return Photoshop;\n}(_react2.default.Component);\n\nPhotoshop.propTypes = {\n  header: _propTypes2.default.string,\n  styles: _propTypes2.default.object\n};\n\nPhotoshop.defaultProps = {\n  header: 'Color Picker',\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Photoshop);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PhotoshopPicker = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PhotoshopPicker = exports.PhotoshopPicker = function PhotoshopPicker(_ref) {\n  var onChange = _ref.onChange,\n      rgb = _ref.rgb,\n      hsv = _ref.hsv,\n      hex = _ref.hex;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      fields: {\n        paddingTop: '5px',\n        paddingBottom: '9px',\n        width: '80px',\n        position: 'relative'\n      },\n      divider: {\n        height: '5px'\n      },\n      RGBwrap: {\n        position: 'relative'\n      },\n      RGBinput: {\n        marginLeft: '40%',\n        width: '40%',\n        height: '18px',\n        border: '1px solid #888888',\n        boxShadow: 'inset 0 1px 1px rgba(0,0,0,.1), 0 1px 0 0 #ECECEC',\n        marginBottom: '5px',\n        fontSize: '13px',\n        paddingLeft: '3px',\n        marginRight: '10px'\n      },\n      RGBlabel: {\n        left: '0px',\n        width: '34px',\n        textTransform: 'uppercase',\n        fontSize: '13px',\n        height: '18px',\n        lineHeight: '22px',\n        position: 'absolute'\n      },\n      HEXwrap: {\n        position: 'relative'\n      },\n      HEXinput: {\n        marginLeft: '20%',\n        width: '80%',\n        height: '18px',\n        border: '1px solid #888888',\n        boxShadow: 'inset 0 1px 1px rgba(0,0,0,.1), 0 1px 0 0 #ECECEC',\n        marginBottom: '6px',\n        fontSize: '13px',\n        paddingLeft: '3px'\n      },\n      HEXlabel: {\n        position: 'absolute',\n        top: '0px',\n        left: '0px',\n        width: '14px',\n        textTransform: 'uppercase',\n        fontSize: '13px',\n        height: '18px',\n        lineHeight: '22px'\n      },\n      fieldSymbols: {\n        position: 'absolute',\n        top: '5px',\n        right: '-7px',\n        fontSize: '13px'\n      },\n      symbol: {\n        height: '20px',\n        lineHeight: '22px',\n        paddingBottom: '7px'\n      }\n    }\n  });\n\n  var handleChange = function handleChange(data, e) {\n    if (data['#']) {\n      _color2.default.isValidHex(data['#']) && onChange({\n        hex: data['#'],\n        source: 'hex'\n      }, e);\n    } else if (data.r || data.g || data.b) {\n      onChange({\n        r: data.r || rgb.r,\n        g: data.g || rgb.g,\n        b: data.b || rgb.b,\n        source: 'rgb'\n      }, e);\n    } else if (data.h || data.s || data.v) {\n      onChange({\n        h: data.h || hsv.h,\n        s: data.s || hsv.s,\n        v: data.v || hsv.v,\n        source: 'hsv'\n      }, e);\n    }\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.fields },\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'h',\n      value: Math.round(hsv.h),\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 's',\n      value: Math.round(hsv.s * 100),\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'v',\n      value: Math.round(hsv.v * 100),\n      onChange: handleChange\n    }),\n    _react2.default.createElement('div', { style: styles.divider }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'r',\n      value: rgb.r,\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'g',\n      value: rgb.g,\n      onChange: handleChange\n    }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.RGBwrap, input: styles.RGBinput, label: styles.RGBlabel },\n      label: 'b',\n      value: rgb.b,\n      onChange: handleChange\n    }),\n    _react2.default.createElement('div', { style: styles.divider }),\n    _react2.default.createElement(_common.EditableInput, {\n      style: { wrap: styles.HEXwrap, input: styles.HEXinput, label: styles.HEXlabel },\n      label: '#',\n      value: hex.replace('#', ''),\n      onChange: handleChange\n    }),\n    _react2.default.createElement(\n      'div',\n      { style: styles.fieldSymbols },\n      _react2.default.createElement(\n        'div',\n        { style: styles.symbol },\n        '\\xB0'\n      ),\n      _react2.default.createElement(\n        'div',\n        { style: styles.symbol },\n        '%'\n      ),\n      _react2.default.createElement(\n        'div',\n        { style: styles.symbol },\n        '%'\n      )\n    )\n  );\n};\n\nexports.default = PhotoshopPicker;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PhotoshopPointerCircle = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PhotoshopPointerCircle = exports.PhotoshopPointerCircle = function PhotoshopPointerCircle(_ref) {\n  var hsl = _ref.hsl;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '12px',\n        height: '12px',\n        borderRadius: '6px',\n        boxShadow: 'inset 0 0 0 1px #fff',\n        transform: 'translate(-6px, -6px)'\n      }\n    },\n    'black-outline': {\n      picker: {\n        boxShadow: 'inset 0 0 0 1px #000'\n      }\n    }\n  }, { 'black-outline': hsl.l > 0.5 });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = PhotoshopPointerCircle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PhotoshopPointerCircle = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PhotoshopPointerCircle = exports.PhotoshopPointerCircle = function PhotoshopPointerCircle() {\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      triangle: {\n        width: 0,\n        height: 0,\n        borderStyle: 'solid',\n        borderWidth: '4px 0 4px 6px',\n        borderColor: 'transparent transparent transparent #fff',\n        position: 'absolute',\n        top: '1px',\n        left: '1px'\n      },\n      triangleBorder: {\n        width: 0,\n        height: 0,\n        borderStyle: 'solid',\n        borderWidth: '5px 0 5px 8px',\n        borderColor: 'transparent transparent transparent #555'\n      },\n\n      left: {\n        Extend: 'triangleBorder',\n        transform: 'translate(-13px, -4px)'\n      },\n      leftInside: {\n        Extend: 'triangle',\n        transform: 'translate(-8px, -5px)'\n      },\n\n      right: {\n        Extend: 'triangleBorder',\n        transform: 'translate(20px, -14px) rotate(180deg)'\n      },\n      rightInside: {\n        Extend: 'triangle',\n        transform: 'translate(-8px, -5px)'\n      }\n    }\n  });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.pointer },\n    _react2.default.createElement(\n      'div',\n      { style: styles.left },\n      _react2.default.createElement('div', { style: styles.leftInside })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.right },\n      _react2.default.createElement('div', { style: styles.rightInside })\n    )\n  );\n};\n\nexports.default = PhotoshopPointerCircle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PhotoshopButton = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PhotoshopButton = exports.PhotoshopButton = function PhotoshopButton(_ref) {\n  var onClick = _ref.onClick,\n      label = _ref.label,\n      children = _ref.children,\n      active = _ref.active;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      button: {\n        backgroundImage: 'linear-gradient(-180deg, #FFFFFF 0%, #E6E6E6 100%)',\n        border: '1px solid #878787',\n        borderRadius: '2px',\n        height: '20px',\n        boxShadow: '0 1px 0 0 #EAEAEA',\n        fontSize: '14px',\n        color: '#000',\n        lineHeight: '20px',\n        textAlign: 'center',\n        marginBottom: '10px',\n        cursor: 'pointer'\n      }\n    },\n    'active': {\n      button: {\n        boxShadow: '0 0 0 1px #878787'\n      }\n    }\n  }, { active: active });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.button, onClick: onClick },\n    label || children\n  );\n};\n\nexports.default = PhotoshopButton;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PhotoshopPreviews = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PhotoshopPreviews = exports.PhotoshopPreviews = function PhotoshopPreviews(_ref) {\n  var rgb = _ref.rgb,\n      currentColor = _ref.currentColor;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatches: {\n        border: '1px solid #B3B3B3',\n        borderBottom: '1px solid #F0F0F0',\n        marginBottom: '2px',\n        marginTop: '1px'\n      },\n      new: {\n        height: '34px',\n        background: 'rgb(' + rgb.r + ',' + rgb.g + ', ' + rgb.b + ')',\n        boxShadow: 'inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 1px 0 #000'\n      },\n      current: {\n        height: '34px',\n        background: currentColor,\n        boxShadow: 'inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 -1px 0 #000'\n      },\n      label: {\n        fontSize: '14px',\n        color: '#000',\n        textAlign: 'center'\n      }\n    }\n  });\n\n  return _react2.default.createElement(\n    'div',\n    null,\n    _react2.default.createElement(\n      'div',\n      { style: styles.label },\n      'new'\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatches },\n      _react2.default.createElement('div', { style: styles.new }),\n      _react2.default.createElement('div', { style: styles.current })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.label },\n      'current'\n    )\n  );\n};\n\nexports.default = PhotoshopPreviews;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Sketch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _SketchFields = require('./SketchFields');\n\nvar _SketchFields2 = _interopRequireDefault(_SketchFields);\n\nvar _SketchPresetColors = require('./SketchPresetColors');\n\nvar _SketchPresetColors2 = _interopRequireDefault(_SketchPresetColors);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Sketch = exports.Sketch = function Sketch(_ref) {\n  var width = _ref.width,\n      rgb = _ref.rgb,\n      hex = _ref.hex,\n      hsv = _ref.hsv,\n      hsl = _ref.hsl,\n      onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      disableAlpha = _ref.disableAlpha,\n      presetColors = _ref.presetColors,\n      renderers = _ref.renderers,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': _extends({\n      picker: {\n        width: width,\n        padding: '10px 10px 0',\n        boxSizing: 'initial',\n        background: '#fff',\n        borderRadius: '4px',\n        boxShadow: '0 0 0 1px rgba(0,0,0,.15), 0 8px 16px rgba(0,0,0,.15)'\n      },\n      saturation: {\n        width: '100%',\n        paddingBottom: '75%',\n        position: 'relative',\n        overflow: 'hidden'\n      },\n      Saturation: {\n        radius: '3px',\n        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n      },\n      controls: {\n        display: 'flex'\n      },\n      sliders: {\n        padding: '4px 0',\n        flex: '1'\n      },\n      color: {\n        width: '24px',\n        height: '24px',\n        position: 'relative',\n        marginTop: '4px',\n        marginLeft: '4px',\n        borderRadius: '3px'\n      },\n      activeColor: {\n        absolute: '0px 0px 0px 0px',\n        borderRadius: '2px',\n        background: 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')',\n        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n      },\n      hue: {\n        position: 'relative',\n        height: '10px',\n        overflow: 'hidden'\n      },\n      Hue: {\n        radius: '2px',\n        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n      },\n\n      alpha: {\n        position: 'relative',\n        height: '10px',\n        marginTop: '4px',\n        overflow: 'hidden'\n      },\n      Alpha: {\n        radius: '2px',\n        shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n      }\n    }, passedStyles),\n    'disableAlpha': {\n      color: {\n        height: '10px'\n      },\n      hue: {\n        height: '10px'\n      },\n      alpha: {\n        display: 'none'\n      }\n    }\n  }, passedStyles), { disableAlpha: disableAlpha });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.picker, className: 'sketch-picker ' + className },\n    _react2.default.createElement(\n      'div',\n      { style: styles.saturation },\n      _react2.default.createElement(_common.Saturation, {\n        style: styles.Saturation,\n        hsl: hsl,\n        hsv: hsv,\n        onChange: onChange\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.controls, className: 'flexbox-fix' },\n      _react2.default.createElement(\n        'div',\n        { style: styles.sliders },\n        _react2.default.createElement(\n          'div',\n          { style: styles.hue },\n          _react2.default.createElement(_common.Hue, {\n            style: styles.Hue,\n            hsl: hsl,\n            onChange: onChange\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { style: styles.alpha },\n          _react2.default.createElement(_common.Alpha, {\n            style: styles.Alpha,\n            rgb: rgb,\n            hsl: hsl,\n            renderers: renderers,\n            onChange: onChange\n          })\n        )\n      ),\n      _react2.default.createElement(\n        'div',\n        { style: styles.color },\n        _react2.default.createElement(_common.Checkboard, null),\n        _react2.default.createElement('div', { style: styles.activeColor })\n      )\n    ),\n    _react2.default.createElement(_SketchFields2.default, {\n      rgb: rgb,\n      hsl: hsl,\n      hex: hex,\n      onChange: onChange,\n      disableAlpha: disableAlpha\n    }),\n    _react2.default.createElement(_SketchPresetColors2.default, {\n      colors: presetColors,\n      onClick: onChange,\n      onSwatchHover: onSwatchHover\n    })\n  );\n};\n\nSketch.propTypes = {\n  disableAlpha: _propTypes2.default.bool,\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  styles: _propTypes2.default.object\n};\n\nSketch.defaultProps = {\n  disableAlpha: false,\n  width: 200,\n  styles: {},\n  presetColors: ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF']\n};\n\nexports.default = (0, _common.ColorWrap)(Sketch);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SketchFields = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable no-param-reassign */\n\nvar SketchFields = exports.SketchFields = function SketchFields(_ref) {\n  var onChange = _ref.onChange,\n      rgb = _ref.rgb,\n      hsl = _ref.hsl,\n      hex = _ref.hex,\n      disableAlpha = _ref.disableAlpha;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      fields: {\n        display: 'flex',\n        paddingTop: '4px'\n      },\n      single: {\n        flex: '1',\n        paddingLeft: '6px'\n      },\n      alpha: {\n        flex: '1',\n        paddingLeft: '6px'\n      },\n      double: {\n        flex: '2'\n      },\n      input: {\n        width: '80%',\n        padding: '4px 10% 3px',\n        border: 'none',\n        boxShadow: 'inset 0 0 0 1px #ccc',\n        fontSize: '11px'\n      },\n      label: {\n        display: 'block',\n        textAlign: 'center',\n        fontSize: '11px',\n        color: '#222',\n        paddingTop: '3px',\n        paddingBottom: '4px',\n        textTransform: 'capitalize'\n      }\n    },\n    'disableAlpha': {\n      alpha: {\n        display: 'none'\n      }\n    }\n  }, { disableAlpha: disableAlpha });\n\n  var handleChange = function handleChange(data, e) {\n    if (data.hex) {\n      _color2.default.isValidHex(data.hex) && onChange({\n        hex: data.hex,\n        source: 'hex'\n      }, e);\n    } else if (data.r || data.g || data.b) {\n      onChange({\n        r: data.r || rgb.r,\n        g: data.g || rgb.g,\n        b: data.b || rgb.b,\n        a: rgb.a,\n        source: 'rgb'\n      }, e);\n    } else if (data.a) {\n      if (data.a < 0) {\n        data.a = 0;\n      } else if (data.a > 100) {\n        data.a = 100;\n      }\n\n      data.a /= 100;\n      onChange({\n        h: hsl.h,\n        s: hsl.s,\n        l: hsl.l,\n        a: data.a,\n        source: 'rgb'\n      }, e);\n    }\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.fields, className: 'flexbox-fix' },\n    _react2.default.createElement(\n      'div',\n      { style: styles.double },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input, label: styles.label },\n        label: 'hex',\n        value: hex.replace('#', ''),\n        onChange: handleChange\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.single },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input, label: styles.label },\n        label: 'r',\n        value: rgb.r,\n        onChange: handleChange,\n        dragLabel: 'true',\n        dragMax: '255'\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.single },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input, label: styles.label },\n        label: 'g',\n        value: rgb.g,\n        onChange: handleChange,\n        dragLabel: 'true',\n        dragMax: '255'\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.single },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input, label: styles.label },\n        label: 'b',\n        value: rgb.b,\n        onChange: handleChange,\n        dragLabel: 'true',\n        dragMax: '255'\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.alpha },\n      _react2.default.createElement(_common.EditableInput, {\n        style: { input: styles.input, label: styles.label },\n        label: 'a',\n        value: Math.round(rgb.a * 100),\n        onChange: handleChange,\n        dragLabel: 'true',\n        dragMax: '100'\n      })\n    )\n  );\n};\n\nexports.default = SketchFields;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SketchPresetColors = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SketchPresetColors = exports.SketchPresetColors = function SketchPresetColors(_ref) {\n  var colors = _ref.colors,\n      _ref$onClick = _ref.onClick,\n      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n      onSwatchHover = _ref.onSwatchHover;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      colors: {\n        margin: '0 -10px',\n        padding: '10px 0 0 10px',\n        borderTop: '1px solid #eee',\n        display: 'flex',\n        flexWrap: 'wrap',\n        position: 'relative'\n      },\n      swatchWrap: {\n        width: '16px',\n        height: '16px',\n        margin: '0 10px 10px 0'\n      },\n      swatch: {\n        borderRadius: '3px',\n        boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)'\n      }\n    },\n    'no-presets': {\n      colors: {\n        display: 'none'\n      }\n    }\n  }, {\n    'no-presets': !colors || !colors.length\n  });\n\n  var handleClick = function handleClick(hex, e) {\n    onClick({\n      hex: hex,\n      source: 'hex'\n    }, e);\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.colors, className: 'flexbox-fix' },\n    colors.map(function (colorObjOrString) {\n      var c = typeof colorObjOrString === 'string' ? { color: colorObjOrString } : colorObjOrString;\n      var key = '' + c.color + (c.title || '');\n      return _react2.default.createElement(\n        'div',\n        { key: key, style: styles.swatchWrap },\n        _react2.default.createElement(_common.Swatch, _extends({}, c, {\n          style: styles.swatch,\n          onClick: handleClick,\n          onHover: onSwatchHover,\n          focusStyle: {\n            boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), 0 0 4px ' + c.color\n          }\n        }))\n      );\n    })\n  );\n};\n\nSketchPresetColors.propTypes = {\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n    color: _propTypes2.default.string,\n    title: _propTypes2.default.string\n  })])).isRequired\n};\n\nexports.default = SketchPresetColors;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Slider = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _SliderSwatches = require('./SliderSwatches');\n\nvar _SliderSwatches2 = _interopRequireDefault(_SliderSwatches);\n\nvar _SliderPointer = require('./SliderPointer');\n\nvar _SliderPointer2 = _interopRequireDefault(_SliderPointer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Slider = exports.Slider = function Slider(_ref) {\n  var hsl = _ref.hsl,\n      onChange = _ref.onChange,\n      pointer = _ref.pointer,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      hue: {\n        height: '12px',\n        position: 'relative'\n      },\n      Hue: {\n        radius: '2px'\n      }\n    }\n  }, passedStyles));\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.wrap || {}, className: 'slider-picker ' + className },\n    _react2.default.createElement(\n      'div',\n      { style: styles.hue },\n      _react2.default.createElement(_common.Hue, {\n        style: styles.Hue,\n        hsl: hsl,\n        pointer: pointer,\n        onChange: onChange\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatches },\n      _react2.default.createElement(_SliderSwatches2.default, { hsl: hsl, onClick: onChange })\n    )\n  );\n};\n\nSlider.propTypes = {\n  styles: _propTypes2.default.object\n};\nSlider.defaultProps = {\n  pointer: _SliderPointer2.default,\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Slider);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SliderSwatches = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _SliderSwatch = require('./SliderSwatch');\n\nvar _SliderSwatch2 = _interopRequireDefault(_SliderSwatch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SliderSwatches = exports.SliderSwatches = function SliderSwatches(_ref) {\n  var onClick = _ref.onClick,\n      hsl = _ref.hsl;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatches: {\n        marginTop: '20px'\n      },\n      swatch: {\n        boxSizing: 'border-box',\n        width: '20%',\n        paddingRight: '1px',\n        float: 'left'\n      },\n      clear: {\n        clear: 'both'\n      }\n    }\n  });\n\n  // Acceptible difference in floating point equality\n  var epsilon = 0.1;\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.swatches },\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatch },\n      _react2.default.createElement(_SliderSwatch2.default, {\n        hsl: hsl,\n        offset: '.80',\n        active: Math.abs(hsl.l - 0.80) < epsilon && Math.abs(hsl.s - 0.50) < epsilon,\n        onClick: onClick,\n        first: true\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatch },\n      _react2.default.createElement(_SliderSwatch2.default, {\n        hsl: hsl,\n        offset: '.65',\n        active: Math.abs(hsl.l - 0.65) < epsilon && Math.abs(hsl.s - 0.50) < epsilon,\n        onClick: onClick\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatch },\n      _react2.default.createElement(_SliderSwatch2.default, {\n        hsl: hsl,\n        offset: '.50',\n        active: Math.abs(hsl.l - 0.50) < epsilon && Math.abs(hsl.s - 0.50) < epsilon,\n        onClick: onClick\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatch },\n      _react2.default.createElement(_SliderSwatch2.default, {\n        hsl: hsl,\n        offset: '.35',\n        active: Math.abs(hsl.l - 0.35) < epsilon && Math.abs(hsl.s - 0.50) < epsilon,\n        onClick: onClick\n      })\n    ),\n    _react2.default.createElement(\n      'div',\n      { style: styles.swatch },\n      _react2.default.createElement(_SliderSwatch2.default, {\n        hsl: hsl,\n        offset: '.20',\n        active: Math.abs(hsl.l - 0.20) < epsilon && Math.abs(hsl.s - 0.50) < epsilon,\n        onClick: onClick,\n        last: true\n      })\n    ),\n    _react2.default.createElement('div', { style: styles.clear })\n  );\n};\n\nexports.default = SliderSwatches;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SliderSwatch = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SliderSwatch = exports.SliderSwatch = function SliderSwatch(_ref) {\n  var hsl = _ref.hsl,\n      offset = _ref.offset,\n      _ref$onClick = _ref.onClick,\n      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n      active = _ref.active,\n      first = _ref.first,\n      last = _ref.last;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      swatch: {\n        height: '12px',\n        background: 'hsl(' + hsl.h + ', 50%, ' + offset * 100 + '%)',\n        cursor: 'pointer'\n      }\n    },\n    'first': {\n      swatch: {\n        borderRadius: '2px 0 0 2px'\n      }\n    },\n    'last': {\n      swatch: {\n        borderRadius: '0 2px 2px 0'\n      }\n    },\n    'active': {\n      swatch: {\n        transform: 'scaleY(1.8)',\n        borderRadius: '3.6px/2px'\n      }\n    }\n  }, { active: active, first: first, last: last });\n\n  var handleClick = function handleClick(e) {\n    return onClick({\n      h: hsl.h,\n      s: 0.5,\n      l: offset,\n      source: 'hsl'\n    }, e);\n  };\n\n  return _react2.default.createElement('div', { style: styles.swatch, onClick: handleClick });\n};\n\nexports.default = SliderSwatch;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SliderPointer = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SliderPointer = exports.SliderPointer = function SliderPointer() {\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      picker: {\n        width: '14px',\n        height: '14px',\n        borderRadius: '6px',\n        transform: 'translate(-7px, -1px)',\n        backgroundColor: 'rgb(248, 248, 248)',\n        boxShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.37)'\n      }\n    }\n  });\n\n  return _react2.default.createElement('div', { style: styles.picker });\n};\n\nexports.default = SliderPointer;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Swatches = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _materialColors = require('material-colors');\n\nvar material = _interopRequireWildcard(_materialColors);\n\nvar _common = require('../common');\n\nvar _SwatchesGroup = require('./SwatchesGroup');\n\nvar _SwatchesGroup2 = _interopRequireDefault(_SwatchesGroup);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Swatches = exports.Swatches = function Swatches(_ref) {\n  var width = _ref.width,\n      height = _ref.height,\n      onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      colors = _ref.colors,\n      hex = _ref.hex,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      picker: {\n        width: width,\n        height: height\n      },\n      overflow: {\n        height: height,\n        overflowY: 'scroll'\n      },\n      body: {\n        padding: '16px 0 6px 16px'\n      },\n      clear: {\n        clear: 'both'\n      }\n    }\n  }, passedStyles));\n\n  var handleChange = function handleChange(data, e) {\n    _color2.default.isValidHex(data) && onChange({\n      hex: data,\n      source: 'hex'\n    }, e);\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.picker, className: 'swatches-picker ' + className },\n    _react2.default.createElement(\n      _common.Raised,\n      null,\n      _react2.default.createElement(\n        'div',\n        { style: styles.overflow },\n        _react2.default.createElement(\n          'div',\n          { style: styles.body },\n          (0, _map2.default)(colors, function (group) {\n            return _react2.default.createElement(_SwatchesGroup2.default, {\n              key: group.toString(),\n              group: group,\n              active: hex,\n              onClick: handleChange,\n              onSwatchHover: onSwatchHover\n            });\n          }),\n          _react2.default.createElement('div', { style: styles.clear })\n        )\n      )\n    )\n  );\n};\n\nSwatches.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.arrayOf(_propTypes2.default.string)),\n  styles: _propTypes2.default.object\n\n  /* eslint-disable max-len */\n};Swatches.defaultProps = {\n  width: 320,\n  height: 240,\n  colors: [[material.red['900'], material.red['700'], material.red['500'], material.red['300'], material.red['100']], [material.pink['900'], material.pink['700'], material.pink['500'], material.pink['300'], material.pink['100']], [material.purple['900'], material.purple['700'], material.purple['500'], material.purple['300'], material.purple['100']], [material.deepPurple['900'], material.deepPurple['700'], material.deepPurple['500'], material.deepPurple['300'], material.deepPurple['100']], [material.indigo['900'], material.indigo['700'], material.indigo['500'], material.indigo['300'], material.indigo['100']], [material.blue['900'], material.blue['700'], material.blue['500'], material.blue['300'], material.blue['100']], [material.lightBlue['900'], material.lightBlue['700'], material.lightBlue['500'], material.lightBlue['300'], material.lightBlue['100']], [material.cyan['900'], material.cyan['700'], material.cyan['500'], material.cyan['300'], material.cyan['100']], [material.teal['900'], material.teal['700'], material.teal['500'], material.teal['300'], material.teal['100']], ['#194D33', material.green['700'], material.green['500'], material.green['300'], material.green['100']], [material.lightGreen['900'], material.lightGreen['700'], material.lightGreen['500'], material.lightGreen['300'], material.lightGreen['100']], [material.lime['900'], material.lime['700'], material.lime['500'], material.lime['300'], material.lime['100']], [material.yellow['900'], material.yellow['700'], material.yellow['500'], material.yellow['300'], material.yellow['100']], [material.amber['900'], material.amber['700'], material.amber['500'], material.amber['300'], material.amber['100']], [material.orange['900'], material.orange['700'], material.orange['500'], material.orange['300'], material.orange['100']], [material.deepOrange['900'], material.deepOrange['700'], material.deepOrange['500'], material.deepOrange['300'], material.deepOrange['100']], [material.brown['900'], material.brown['700'], material.brown['500'], material.brown['300'], material.brown['100']], [material.blueGrey['900'], material.blueGrey['700'], material.blueGrey['500'], material.blueGrey['300'], material.blueGrey['100']], ['#000000', '#525252', '#969696', '#D9D9D9', '#FFFFFF']],\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Swatches);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SwatchesGroup = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _SwatchesColor = require('./SwatchesColor');\n\nvar _SwatchesColor2 = _interopRequireDefault(_SwatchesColor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SwatchesGroup = exports.SwatchesGroup = function SwatchesGroup(_ref) {\n  var onClick = _ref.onClick,\n      onSwatchHover = _ref.onSwatchHover,\n      group = _ref.group,\n      active = _ref.active;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      group: {\n        paddingBottom: '10px',\n        width: '40px',\n        float: 'left',\n        marginRight: '10px'\n      }\n    }\n  });\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.group },\n    (0, _map2.default)(group, function (color, i) {\n      return _react2.default.createElement(_SwatchesColor2.default, {\n        key: color,\n        color: color,\n        active: color.toLowerCase() === active,\n        first: i === 0,\n        last: i === group.length - 1,\n        onClick: onClick,\n        onSwatchHover: onSwatchHover\n      });\n    })\n  );\n};\n\nexports.default = SwatchesGroup;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SwatchesColor = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nvar _CheckIcon = require('@icons/material/CheckIcon');\n\nvar _CheckIcon2 = _interopRequireDefault(_CheckIcon);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SwatchesColor = exports.SwatchesColor = function SwatchesColor(_ref) {\n  var color = _ref.color,\n      _ref$onClick = _ref.onClick,\n      onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n      onSwatchHover = _ref.onSwatchHover,\n      first = _ref.first,\n      last = _ref.last,\n      active = _ref.active;\n\n  var styles = (0, _reactcss2.default)({\n    'default': {\n      color: {\n        width: '40px',\n        height: '24px',\n        cursor: 'pointer',\n        background: color,\n        marginBottom: '1px'\n      },\n      check: {\n        color: _color2.default.getContrastingColor(color),\n        marginLeft: '8px',\n        display: 'none'\n      }\n    },\n    'first': {\n      color: {\n        overflow: 'hidden',\n        borderRadius: '2px 2px 0 0'\n      }\n    },\n    'last': {\n      color: {\n        overflow: 'hidden',\n        borderRadius: '0 0 2px 2px'\n      }\n    },\n    'active': {\n      check: {\n        display: 'block'\n      }\n    },\n    'color-#FFFFFF': {\n      color: {\n        boxShadow: 'inset 0 0 0 1px #ddd'\n      },\n      check: {\n        color: '#333'\n      }\n    },\n    'transparent': {\n      check: {\n        color: '#333'\n      }\n    }\n  }, {\n    first: first,\n    last: last,\n    active: active,\n    'color-#FFFFFF': color === '#FFFFFF',\n    'transparent': color === 'transparent'\n  });\n\n  return _react2.default.createElement(\n    _common.Swatch,\n    {\n      color: color,\n      style: styles.color,\n      onClick: onClick,\n      onHover: onSwatchHover,\n      focusStyle: { boxShadow: '0 0 4px ' + color }\n    },\n    _react2.default.createElement(\n      'div',\n      { style: styles.check },\n      _react2.default.createElement(_CheckIcon2.default, null)\n    )\n  );\n};\n\nexports.default = SwatchesColor;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar DEFAULT_SIZE = 24;\n\nexports.default = function (_ref) {\n  var _ref$fill = _ref.fill,\n      fill = _ref$fill === undefined ? 'currentColor' : _ref$fill,\n      _ref$width = _ref.width,\n      width = _ref$width === undefined ? DEFAULT_SIZE : _ref$width,\n      _ref$height = _ref.height,\n      height = _ref$height === undefined ? DEFAULT_SIZE : _ref$height,\n      _ref$style = _ref.style,\n      style = _ref$style === undefined ? {} : _ref$style,\n      props = _objectWithoutProperties(_ref, ['fill', 'width', 'height', 'style']);\n\n  return _react2.default.createElement(\n    'svg',\n    _extends({\n      viewBox: '0 0 ' + DEFAULT_SIZE + ' ' + DEFAULT_SIZE,\n      style: _extends({ fill: fill, width: width, height: height }, style)\n    }, props),\n    _react2.default.createElement('path', { d: 'M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z' })\n  );\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Twitter = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _map = require('lodash/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Twitter = exports.Twitter = function Twitter(_ref) {\n  var onChange = _ref.onChange,\n      onSwatchHover = _ref.onSwatchHover,\n      hex = _ref.hex,\n      colors = _ref.colors,\n      width = _ref.width,\n      triangle = _ref.triangle,\n      _ref$styles = _ref.styles,\n      passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n      _ref$className = _ref.className,\n      className = _ref$className === undefined ? '' : _ref$className;\n\n  var styles = (0, _reactcss2.default)((0, _merge2.default)({\n    'default': {\n      card: {\n        width: width,\n        background: '#fff',\n        border: '0 solid rgba(0,0,0,0.25)',\n        boxShadow: '0 1px 4px rgba(0,0,0,0.25)',\n        borderRadius: '4px',\n        position: 'relative'\n      },\n      body: {\n        padding: '15px 9px 9px 15px'\n      },\n      label: {\n        fontSize: '18px',\n        color: '#fff'\n      },\n      triangle: {\n        width: '0px',\n        height: '0px',\n        borderStyle: 'solid',\n        borderWidth: '0 9px 10px 9px',\n        borderColor: 'transparent transparent #fff transparent',\n        position: 'absolute'\n      },\n      triangleShadow: {\n        width: '0px',\n        height: '0px',\n        borderStyle: 'solid',\n        borderWidth: '0 9px 10px 9px',\n        borderColor: 'transparent transparent rgba(0,0,0,.1) transparent',\n        position: 'absolute'\n      },\n      hash: {\n        background: '#F0F0F0',\n        height: '30px',\n        width: '30px',\n        borderRadius: '4px 0 0 4px',\n        float: 'left',\n        color: '#98A1A4',\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center'\n      },\n      input: {\n        width: '100px',\n        fontSize: '14px',\n        color: '#666',\n        border: '0px',\n        outline: 'none',\n        height: '28px',\n        boxShadow: 'inset 0 0 0 1px #F0F0F0',\n        boxSizing: 'content-box',\n        borderRadius: '0 4px 4px 0',\n        float: 'left',\n        paddingLeft: '8px'\n      },\n      swatch: {\n        width: '30px',\n        height: '30px',\n        float: 'left',\n        borderRadius: '4px',\n        margin: '0 6px 6px 0'\n      },\n      clear: {\n        clear: 'both'\n      }\n    },\n    'hide-triangle': {\n      triangle: {\n        display: 'none'\n      },\n      triangleShadow: {\n        display: 'none'\n      }\n    },\n    'top-left-triangle': {\n      triangle: {\n        top: '-10px',\n        left: '12px'\n      },\n      triangleShadow: {\n        top: '-11px',\n        left: '12px'\n      }\n    },\n    'top-right-triangle': {\n      triangle: {\n        top: '-10px',\n        right: '12px'\n      },\n      triangleShadow: {\n        top: '-11px',\n        right: '12px'\n      }\n    }\n  }, passedStyles), {\n    'hide-triangle': triangle === 'hide',\n    'top-left-triangle': triangle === 'top-left',\n    'top-right-triangle': triangle === 'top-right'\n  });\n\n  var handleChange = function handleChange(hexcode, e) {\n    _color2.default.isValidHex(hexcode) && onChange({\n      hex: hexcode,\n      source: 'hex'\n    }, e);\n  };\n\n  return _react2.default.createElement(\n    'div',\n    { style: styles.card, className: 'twitter-picker ' + className },\n    _react2.default.createElement('div', { style: styles.triangleShadow }),\n    _react2.default.createElement('div', { style: styles.triangle }),\n    _react2.default.createElement(\n      'div',\n      { style: styles.body },\n      (0, _map2.default)(colors, function (c, i) {\n        return _react2.default.createElement(_common.Swatch, {\n          key: i,\n          color: c,\n          hex: c,\n          style: styles.swatch,\n          onClick: handleChange,\n          onHover: onSwatchHover,\n          focusStyle: {\n            boxShadow: '0 0 4px ' + c\n          }\n        });\n      }),\n      _react2.default.createElement(\n        'div',\n        { style: styles.hash },\n        '#'\n      ),\n      _react2.default.createElement(_common.EditableInput, {\n        label: null,\n        style: { input: styles.input },\n        value: hex.replace('#', ''),\n        onChange: handleChange\n      }),\n      _react2.default.createElement('div', { style: styles.clear })\n    )\n  );\n};\n\nTwitter.propTypes = {\n  width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n  triangle: _propTypes2.default.oneOf(['hide', 'top-left', 'top-right']),\n  colors: _propTypes2.default.arrayOf(_propTypes2.default.string),\n  styles: _propTypes2.default.object\n};\n\nTwitter.defaultProps = {\n  width: 276,\n  colors: ['#FF6900', '#FCB900', '#7BDCB5', '#00D084', '#8ED1FC', '#0693E3', '#ABB8C3', '#EB144C', '#F78DA7', '#9900EF'],\n  triangle: 'top-left',\n  styles: {}\n};\n\nexports.default = (0, _common.ColorWrap)(Twitter);","\"use strict\";\n\nvar forEach                 = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker       = require(\"./element-utils\");\nvar listenerHandlerMaker    = require(\"./listener-handler\");\nvar idGeneratorMaker        = require(\"./id-generator\");\nvar idHandlerMaker          = require(\"./id-handler\");\nvar reporterMaker           = require(\"./reporter\");\nvar browserDetector         = require(\"./browser-detector\");\nvar batchProcessorMaker     = require(\"batch-processor\");\nvar stateHandler            = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker     = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker     = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n    return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n    if (!Array.isArray(collection)) {\n        var array = [];\n        forEach(collection, function (obj) {\n            array.push(obj);\n        });\n        return array;\n    } else {\n        return collection;\n    }\n}\n\nfunction isElement(obj) {\n    return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd    Determines if listeners should be called when they are getting added.\n                                    Default is true. If true, the listener is guaranteed to be called when it has been added.\n                                    If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler  A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n                                    If not provided, a default id handler will be used.\n * @property {reporter} reporter    A custom reporter that handles reporting logs, warnings and errors.\n                                    If not provided, a default id handler will be used.\n                                    If set to false, then nothing will be reported.\n * @property {boolean} debug        If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n    options = options || {};\n\n    //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var idHandler;\n\n    if (options.idHandler) {\n        // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n        // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n        idHandler = {\n            get: function (element) { return options.idHandler.get(element, true); },\n            set: options.idHandler.set\n        };\n    } else {\n        var idGenerator = idGeneratorMaker();\n        var defaultIdHandler = idHandlerMaker({\n            idGenerator: idGenerator,\n            stateHandler: stateHandler\n        });\n        idHandler = defaultIdHandler;\n    }\n\n    //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var reporter = options.reporter;\n\n    if(!reporter) {\n        //If options.reporter is false, then the reporter should be quiet.\n        var quiet = reporter === false;\n        reporter = reporterMaker(quiet);\n    }\n\n    //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n    //Options to be used as default for the listenTo function.\n    var globalOptions = {};\n    globalOptions.callOnAdd     = !!getOption(options, \"callOnAdd\", true);\n    globalOptions.debug         = !!getOption(options, \"debug\", false);\n\n    var eventListenerHandler    = listenerHandlerMaker(idHandler);\n    var elementUtils            = elementUtilsMaker({\n        stateHandler: stateHandler\n    });\n\n    //The detection strategy to be used.\n    var detectionStrategy;\n    var desiredStrategy = getOption(options, \"strategy\", \"object\");\n    var importantCssRules = getOption(options, \"important\", false);\n    var strategyOptions = {\n        reporter: reporter,\n        batchProcessor: batchProcessor,\n        stateHandler: stateHandler,\n        idHandler: idHandler,\n        important: importantCssRules\n    };\n\n    if(desiredStrategy === \"scroll\") {\n        if (browserDetector.isLegacyOpera()) {\n            reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n            desiredStrategy = \"object\";\n        } else if (browserDetector.isIE(9)) {\n            reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n            desiredStrategy = \"object\";\n        }\n    }\n\n    if(desiredStrategy === \"scroll\") {\n        detectionStrategy = scrollStrategyMaker(strategyOptions);\n    } else if(desiredStrategy === \"object\") {\n        detectionStrategy = objectStrategyMaker(strategyOptions);\n    } else {\n        throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n    }\n\n    //Calls can be made to listenTo with elements that are still being installed.\n    //Also, same elements can occur in the elements list in the listenTo function.\n    //With this map, the ready callbacks can be synchronized between the calls\n    //so that the ready callback can always be called when an element is ready - even if\n    //it wasn't installed from the function itself.\n    var onReadyCallbacks = {};\n\n    /**\n     * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n     * @public\n     * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n     * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n     * @param {function} listener The callback to be executed for each resize event for each element.\n     */\n    function listenTo(options, elements, listener) {\n        function onResizeCallback(element) {\n            var listeners = eventListenerHandler.get(element);\n            forEach(listeners, function callListenerProxy(listener) {\n                listener(element);\n            });\n        }\n\n        function addListener(callOnAdd, element, listener) {\n            eventListenerHandler.add(element, listener);\n\n            if(callOnAdd) {\n                listener(element);\n            }\n        }\n\n        //Options object may be omitted.\n        if(!listener) {\n            listener = elements;\n            elements = options;\n            options = {};\n        }\n\n        if(!elements) {\n            throw new Error(\"At least one element required.\");\n        }\n\n        if(!listener) {\n            throw new Error(\"Listener required.\");\n        }\n\n        if (isElement(elements)) {\n            // A single element has been passed in.\n            elements = [elements];\n        } else if (isCollection(elements)) {\n            // Convert collection to array for plugins.\n            // TODO: May want to check so that all the elements in the collection are valid elements.\n            elements = toArray(elements);\n        } else {\n            return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n        }\n\n        var elementsReady = 0;\n\n        var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n        var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n        var debug = getOption(options, \"debug\", globalOptions.debug);\n\n        forEach(elements, function attachListenerToElement(element) {\n            if (!stateHandler.getState(element)) {\n                stateHandler.initState(element);\n                idHandler.set(element);\n            }\n\n            var id = idHandler.get(element);\n\n            debug && reporter.log(\"Attaching listener to element\", id, element);\n\n            if(!elementUtils.isDetectable(element)) {\n                debug && reporter.log(id, \"Not detectable.\");\n                if(elementUtils.isBusy(element)) {\n                    debug && reporter.log(id, \"System busy making it detectable\");\n\n                    //The element is being prepared to be detectable. Do not make it detectable.\n                    //Just add the listener, because the element will soon be detectable.\n                    addListener(callOnAdd, element, listener);\n                    onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n                    onReadyCallbacks[id].push(function onReady() {\n                        elementsReady++;\n\n                        if(elementsReady === elements.length) {\n                            onReadyCallback();\n                        }\n                    });\n                    return;\n                }\n\n                debug && reporter.log(id, \"Making detectable...\");\n                //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n                elementUtils.markBusy(element, true);\n                return detectionStrategy.makeDetectable({ debug: debug, important: importantCssRules }, element, function onElementDetectable(element) {\n                    debug && reporter.log(id, \"onElementDetectable\");\n\n                    if (stateHandler.getState(element)) {\n                        elementUtils.markAsDetectable(element);\n                        elementUtils.markBusy(element, false);\n                        detectionStrategy.addListener(element, onResizeCallback);\n                        addListener(callOnAdd, element, listener);\n\n                        // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n                        // so that a resize event may be emitted.\n                        // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n                        // Also, check the state existance before since the element may have been uninstalled in the installation process.\n                        var state = stateHandler.getState(element);\n                        if (state && state.startSize) {\n                            var width = element.offsetWidth;\n                            var height = element.offsetHeight;\n                            if (state.startSize.width !== width || state.startSize.height !== height) {\n                                onResizeCallback(element);\n                            }\n                        }\n\n                        if(onReadyCallbacks[id]) {\n                            forEach(onReadyCallbacks[id], function(callback) {\n                                callback();\n                            });\n                        }\n                    } else {\n                        // The element has been unisntalled before being detectable.\n                        debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n                    }\n\n                    delete onReadyCallbacks[id];\n\n                    elementsReady++;\n                    if(elementsReady === elements.length) {\n                        onReadyCallback();\n                    }\n                });\n            }\n\n            debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n            //The element has been prepared to be detectable and is ready to be listened to.\n            addListener(callOnAdd, element, listener);\n            elementsReady++;\n        });\n\n        if(elementsReady === elements.length) {\n            onReadyCallback();\n        }\n    }\n\n    function uninstall(elements) {\n        if(!elements) {\n            return reporter.error(\"At least one element is required.\");\n        }\n\n        if (isElement(elements)) {\n            // A single element has been passed in.\n            elements = [elements];\n        } else if (isCollection(elements)) {\n            // Convert collection to array for plugins.\n            // TODO: May want to check so that all the elements in the collection are valid elements.\n            elements = toArray(elements);\n        } else {\n            return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n        }\n\n        forEach(elements, function (element) {\n            eventListenerHandler.removeAllListeners(element);\n            detectionStrategy.uninstall(element);\n            stateHandler.cleanState(element);\n        });\n    }\n\n    function initDocument(targetDocument) {\n        detectionStrategy.initDocument && detectionStrategy.initDocument(targetDocument);\n    }\n\n    return {\n        listenTo: listenTo,\n        removeListener: eventListenerHandler.removeListener,\n        removeAllListeners: eventListenerHandler.removeAllListeners,\n        uninstall: uninstall,\n        initDocument: initDocument\n    };\n};\n\nfunction getOption(options, name, defaultValue) {\n    var value = options[name];\n\n    if((value === undefined || value === null) && defaultValue !== undefined) {\n        return defaultValue;\n    }\n\n    return value;\n}\n","\"use strict\";\n\nmodule.exports = function(options) {\n    var getState = options.stateHandler.getState;\n\n    /**\n     * Tells if the element has been made detectable and ready to be listened for resize events.\n     * @public\n     * @param {element} The element to check.\n     * @returns {boolean} True or false depending on if the element is detectable or not.\n     */\n    function isDetectable(element) {\n        var state = getState(element);\n        return state && !!state.isDetectable;\n    }\n\n    /**\n     * Marks the element that it has been made detectable and ready to be listened for resize events.\n     * @public\n     * @param {element} The element to mark.\n     */\n    function markAsDetectable(element) {\n        getState(element).isDetectable = true;\n    }\n\n    /**\n     * Tells if the element is busy or not.\n     * @public\n     * @param {element} The element to check.\n     * @returns {boolean} True or false depending on if the element is busy or not.\n     */\n    function isBusy(element) {\n        return !!getState(element).busy;\n    }\n\n    /**\n     * Marks the object is busy and should not be made detectable.\n     * @public\n     * @param {element} element The element to mark.\n     * @param {boolean} busy If the element is busy or not.\n     */\n    function markBusy(element, busy) {\n        getState(element).busy = !!busy;\n    }\n\n    return {\n        isDetectable: isDetectable,\n        markAsDetectable: markAsDetectable,\n        isBusy: isBusy,\n        markBusy: markBusy\n    };\n};\n","\"use strict\";\n\nmodule.exports = function(idHandler) {\n    var eventListeners = {};\n\n    /**\n     * Gets all listeners for the given element.\n     * @public\n     * @param {element} element The element to get all listeners for.\n     * @returns All listeners for the given element.\n     */\n    function getListeners(element) {\n        var id = idHandler.get(element);\n\n        if (id === undefined) {\n            return [];\n        }\n\n        return eventListeners[id] || [];\n    }\n\n    /**\n     * Stores the given listener for the given element. Will not actually add the listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The callback that the element has added.\n     */\n    function addListener(element, listener) {\n        var id = idHandler.get(element);\n\n        if(!eventListeners[id]) {\n            eventListeners[id] = [];\n        }\n\n        eventListeners[id].push(listener);\n    }\n\n    function removeListener(element, listener) {\n        var listeners = getListeners(element);\n        for (var i = 0, len = listeners.length; i < len; ++i) {\n            if (listeners[i] === listener) {\n              listeners.splice(i, 1);\n              break;\n            }\n        }\n    }\n\n    function removeAllListeners(element) {\n      var listeners = getListeners(element);\n      if (!listeners) { return; }\n      listeners.length = 0;\n    }\n\n    return {\n        get: getListeners,\n        add: addListener,\n        removeListener: removeListener,\n        removeAllListeners: removeAllListeners\n    };\n};\n","\"use strict\";\n\nmodule.exports = function() {\n    var idCount = 1;\n\n    /**\n     * Generates a new unique id in the context.\n     * @public\n     * @returns {number} A unique id in the context.\n     */\n    function generate() {\n        return idCount++;\n    }\n\n    return {\n        generate: generate\n    };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n    var idGenerator     = options.idGenerator;\n    var getState        = options.stateHandler.getState;\n\n    /**\n     * Gets the resize detector id of the element.\n     * @public\n     * @param {element} element The target element to get the id of.\n     * @returns {string|number|null} The id of the element. Null if it has no id.\n     */\n    function getId(element) {\n        var state = getState(element);\n\n        if (state && state.id !== undefined) {\n            return state.id;\n        }\n\n        return null;\n    }\n\n    /**\n     * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n     * @public\n     * @param {element} element The target element to set the id of.\n     * @returns {string|number|null} The id of the element.\n     */\n    function setId(element) {\n        var state = getState(element);\n\n        if (!state) {\n            throw new Error(\"setId required the element to have a resize detection state.\");\n        }\n\n        var id = idGenerator.generate();\n\n        state.id = id;\n\n        return id;\n    }\n\n    return {\n        get: getId,\n        set: setId\n    };\n};\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n    function noop() {\n        //Does nothing.\n    }\n\n    var reporter = {\n        log: noop,\n        warn: noop,\n        error: noop\n    };\n\n    if(!quiet && window.console) {\n        var attachFunction = function(reporter, name) {\n            //The proxy is needed to be able to call the method with the console context,\n            //since we cannot use bind.\n            reporter[name] = function reporterProxy() {\n                var f = console[name];\n                if (f.apply) { //IE9 does not support console.log.apply :)\n                    f.apply(console, arguments);\n                } else {\n                    for (var i = 0; i < arguments.length; i++) {\n                        f(arguments[i]);\n                    }\n                }\n            };\n        };\n\n        attachFunction(reporter, \"log\");\n        attachFunction(reporter, \"warn\");\n        attachFunction(reporter, \"error\");\n    }\n\n    return reporter;\n};","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var asyncProcess    = utils.getOption(options, \"async\", true);\n    var autoProcess     = utils.getOption(options, \"auto\", true);\n\n    if(autoProcess && !asyncProcess) {\n        reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n        asyncProcess = true;\n    }\n\n    var batch = Batch();\n    var asyncFrameHandler;\n    var isProcessing = false;\n\n    function addFunction(level, fn) {\n        if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n            // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n            // This needs to be done before, since we're checking the size of the batch to be 0.\n            processBatchAsync();\n        }\n\n        batch.add(level, fn);\n    }\n\n    function processBatch() {\n        // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n        // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n        isProcessing = true;\n        while (batch.size()) {\n            var processingBatch = batch;\n            batch = Batch();\n            processingBatch.process();\n        }\n        isProcessing = false;\n    }\n\n    function forceProcessBatch(localAsyncProcess) {\n        if (isProcessing) {\n            return;\n        }\n\n        if(localAsyncProcess === undefined) {\n            localAsyncProcess = asyncProcess;\n        }\n\n        if(asyncFrameHandler) {\n            cancelFrame(asyncFrameHandler);\n            asyncFrameHandler = null;\n        }\n\n        if(localAsyncProcess) {\n            processBatchAsync();\n        } else {\n            processBatch();\n        }\n    }\n\n    function processBatchAsync() {\n        asyncFrameHandler = requestFrame(processBatch);\n    }\n\n    function clearBatch() {\n        batch           = {};\n        batchSize       = 0;\n        topLevel        = 0;\n        bottomLevel     = 0;\n    }\n\n    function cancelFrame(listener) {\n        // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n        var cancel = clearTimeout;\n        return cancel(listener);\n    }\n\n    function requestFrame(callback) {\n        // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n        var raf = function(fn) { return setTimeout(fn, 0); };\n        return raf(callback);\n    }\n\n    return {\n        add: addFunction,\n        force: forceProcessBatch\n    };\n};\n\nfunction Batch() {\n    var batch       = {};\n    var size        = 0;\n    var topLevel    = 0;\n    var bottomLevel = 0;\n\n    function add(level, fn) {\n        if(!fn) {\n            fn = level;\n            level = 0;\n        }\n\n        if(level > topLevel) {\n            topLevel = level;\n        } else if(level < bottomLevel) {\n            bottomLevel = level;\n        }\n\n        if(!batch[level]) {\n            batch[level] = [];\n        }\n\n        batch[level].push(fn);\n        size++;\n    }\n\n    function process() {\n        for(var level = bottomLevel; level <= topLevel; level++) {\n            var fns = batch[level];\n\n            for(var i = 0; i < fns.length; i++) {\n                var fn = fns[i];\n                fn();\n            }\n        }\n    }\n\n    function getSize() {\n        return size;\n    }\n\n    return {\n        add: add,\n        process: process,\n        size: getSize\n    };\n}\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n    var value = options[name];\n\n    if((value === undefined || value === null) && defaultValue !== undefined) {\n        return defaultValue;\n    }\n\n    return value;\n}\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n    element[prop] = {};\n    return getState(element);\n}\n\nfunction getState(element) {\n    return element[prop];\n}\n\nfunction cleanState(element) {\n    delete element[prop];\n}\n\nmodule.exports = {\n    initState: initState,\n    getState: getState,\n    cleanState: cleanState\n};\n","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var batchProcessor  = options.batchProcessor;\n    var getState        = options.stateHandler.getState;\n\n    if(!reporter) {\n        throw new Error(\"Missing required dependency: reporter.\");\n    }\n\n    /**\n     * Adds a resize event listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n     */\n    function addListener(element, listener) {\n        function listenerProxy() {\n            listener(element);\n        }\n\n        if(browserDetector.isIE(8)) {\n            //IE 8 does not support object, but supports the resize event directly on elements.\n            getState(element).object = {\n                proxy: listenerProxy\n            };\n            element.attachEvent(\"onresize\", listenerProxy);\n        } else {\n            var object = getObject(element);\n\n            if(!object) {\n                throw new Error(\"Element is not detectable by this strategy.\");\n            }\n\n            object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n        }\n    }\n\n    function buildCssTextString(rules) {\n        var seperator = options.important ? \" !important; \" : \"; \";\n\n        return (rules.join(seperator) + seperator).trim();\n    }\n\n    /**\n     * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n     * @private\n     * @param {object} options Optional options object.\n     * @param {element} element The element to make detectable\n     * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n     */\n    function makeDetectable(options, element, callback) {\n        if (!callback) {\n            callback = element;\n            element = options;\n            options = null;\n        }\n\n        options = options || {};\n        var debug = options.debug;\n\n        function injectObject(element, callback) {\n            var OBJECT_STYLE = buildCssTextString([\"display: block\", \"position: absolute\", \"top: 0\", \"left: 0\", \"width: 100%\", \"height: 100%\", \"border: none\", \"padding: 0\", \"margin: 0\", \"opacity: 0\", \"z-index: -1000\", \"pointer-events: none\"]);\n\n            //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n            // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n            var positionCheckPerformed = false;\n\n            // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n            // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n            var style = window.getComputedStyle(element);\n            var width = element.offsetWidth;\n            var height = element.offsetHeight;\n\n            getState(element).startSize = {\n                width: width,\n                height: height\n            };\n\n            function mutateDom() {\n                function alterPositionStyles() {\n                    if(style.position === \"static\") {\n                        element.style.setProperty(\"position\", \"relative\", options.important ? \"important\" : \"\");\n\n                        var removeRelativeStyles = function(reporter, element, style, property) {\n                            function getNumericalValue(value) {\n                                return value.replace(/[^-\\d\\.]/g, \"\");\n                            }\n\n                            var value = style[property];\n\n                            if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n                                reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n                                element.style.setProperty(property, \"0\", options.important ? \"important\" : \"\");\n                            }\n                        };\n\n                        //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n                        //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n                        removeRelativeStyles(reporter, element, style, \"top\");\n                        removeRelativeStyles(reporter, element, style, \"right\");\n                        removeRelativeStyles(reporter, element, style, \"bottom\");\n                        removeRelativeStyles(reporter, element, style, \"left\");\n                    }\n                }\n\n                function onObjectLoad() {\n                    // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n                    if (!positionCheckPerformed) {\n                        alterPositionStyles();\n                    }\n\n                    /*jshint validthis: true */\n\n                    function getDocument(element, callback) {\n                        //Opera 12 seem to call the object.onload before the actual document has been created.\n                        //So if it is not present, poll it with an timeout until it is present.\n                        //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n                        if(!element.contentDocument) {\n                            var state = getState(element);\n                            if (state.checkForObjectDocumentTimeoutId) {\n                                window.clearTimeout(state.checkForObjectDocumentTimeoutId);\n                            }\n                            state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {\n                                state.checkForObjectDocumentTimeoutId = 0;\n                                getDocument(element, callback);\n                            }, 100);\n\n                            return;\n                        }\n\n                        callback(element.contentDocument);\n                    }\n\n                    //Mutating the object element here seems to fire another load event.\n                    //Mutating the inner document of the object element is fine though.\n                    var objectElement = this;\n\n                    //Create the style element to be added to the object.\n                    getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n                        //Notify that the element is ready to be listened to.\n                        callback(element);\n                    });\n                }\n\n                // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n                // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n                if (style.position !== \"\") {\n                    alterPositionStyles(style);\n                    positionCheckPerformed = true;\n                }\n\n                //Add an object element as a child to the target element that will be listened to for resize events.\n                var object = document.createElement(\"object\");\n                object.style.cssText = OBJECT_STYLE;\n                object.tabIndex = -1;\n                object.type = \"text/html\";\n                object.setAttribute(\"aria-hidden\", \"true\");\n                object.onload = onObjectLoad;\n\n                //Safari: This must occur before adding the object to the DOM.\n                //IE: Does not like that this happens before, even if it is also added after.\n                if(!browserDetector.isIE()) {\n                    object.data = \"about:blank\";\n                }\n\n                if (!getState(element)) {\n                    // The element has been uninstalled before the actual loading happened.\n                    return;\n                }\n\n                element.appendChild(object);\n                getState(element).object = object;\n\n                //IE: This must occur after adding the object to the DOM.\n                if(browserDetector.isIE()) {\n                    object.data = \"about:blank\";\n                }\n            }\n\n            if(batchProcessor) {\n                batchProcessor.add(mutateDom);\n            } else {\n                mutateDom();\n            }\n        }\n\n        if(browserDetector.isIE(8)) {\n            //IE 8 does not support objects properly. Luckily they do support the resize event.\n            //So do not inject the object and notify that the element is already ready to be listened to.\n            //The event handler for the resize event is attached in the utils.addListener instead.\n            callback(element);\n        } else {\n            injectObject(element, callback);\n        }\n    }\n\n    /**\n     * Returns the child object of the target element.\n     * @private\n     * @param {element} element The target element.\n     * @returns The object element of the target.\n     */\n    function getObject(element) {\n        return getState(element).object;\n    }\n\n    function uninstall(element) {\n        if (!getState(element)) {\n            return;\n        }\n\n        var object = getObject(element);\n\n        if (!object) {\n            return;\n        }\n\n        if (browserDetector.isIE(8)) {\n            element.detachEvent(\"onresize\", object.proxy);\n        } else {\n            element.removeChild(object);\n        }\n\n        if (getState(element).checkForObjectDocumentTimeoutId) {\n            window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);\n        }\n\n        delete getState(element).object;\n    }\n\n    return {\n        makeDetectable: makeDetectable,\n        addListener: addListener,\n        uninstall: uninstall\n    };\n};\n","/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var batchProcessor  = options.batchProcessor;\n    var getState        = options.stateHandler.getState;\n    var hasState        = options.stateHandler.hasState;\n    var idHandler       = options.idHandler;\n\n    if (!batchProcessor) {\n        throw new Error(\"Missing required dependency: batchProcessor\");\n    }\n\n    if (!reporter) {\n        throw new Error(\"Missing required dependency: reporter.\");\n    }\n\n    //TODO: Could this perhaps be done at installation time?\n    var scrollbarSizes = getScrollbarSizes();\n\n    var styleId = \"erd_scroll_detection_scrollbar_style\";\n    var detectionContainerClass = \"erd_scroll_detection_container\";\n\n    function initDocument(targetDocument) {\n        // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n        // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n        injectScrollStyle(targetDocument, styleId, detectionContainerClass);\n    }\n\n    initDocument(window.document);\n\n    function buildCssTextString(rules) {\n        var seperator = options.important ? \" !important; \" : \"; \";\n\n        return (rules.join(seperator) + seperator).trim();\n    }\n\n    function getScrollbarSizes() {\n        var width = 500;\n        var height = 500;\n\n        var child = document.createElement(\"div\");\n        child.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width*2 + \"px\", \"height: \" + height*2 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n        var container = document.createElement(\"div\");\n        container.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width + \"px\", \"height: \" + height + \"px\", \"overflow: scroll\", \"visibility: none\", \"top: \" + -width*3 + \"px\", \"left: \" + -height*3 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n        container.appendChild(child);\n\n        document.body.insertBefore(container, document.body.firstChild);\n\n        var widthSize = width - container.clientWidth;\n        var heightSize = height - container.clientHeight;\n\n        document.body.removeChild(container);\n\n        return {\n            width: widthSize,\n            height: heightSize\n        };\n    }\n\n    function injectScrollStyle(targetDocument, styleId, containerClass) {\n        function injectStyle(style, method) {\n            method = method || function (element) {\n                targetDocument.head.appendChild(element);\n            };\n\n            var styleElement = targetDocument.createElement(\"style\");\n            styleElement.innerHTML = style;\n            styleElement.id = styleId;\n            method(styleElement);\n            return styleElement;\n        }\n\n        if (!targetDocument.getElementById(styleId)) {\n            var containerAnimationClass = containerClass + \"_animation\";\n            var containerAnimationActiveClass = containerClass + \"_animation_active\";\n            var style = \"/* Created by the element-resize-detector library. */\\n\";\n            style += \".\" + containerClass + \" > div::-webkit-scrollbar { \" + buildCssTextString([\"display: none\"]) + \" }\\n\\n\";\n            style += \".\" + containerAnimationActiveClass + \" { \" + buildCssTextString([\"-webkit-animation-duration: 0.1s\", \"animation-duration: 0.1s\", \"-webkit-animation-name: \" + containerAnimationClass, \"animation-name: \" + containerAnimationClass]) + \" }\\n\";\n            style += \"@-webkit-keyframes \" + containerAnimationClass +  \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n            style += \"@keyframes \" + containerAnimationClass +          \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n            injectStyle(style);\n        }\n    }\n\n    function addAnimationClass(element) {\n        element.className += \" \" + detectionContainerClass + \"_animation_active\";\n    }\n\n    function addEvent(el, name, cb) {\n        if (el.addEventListener) {\n            el.addEventListener(name, cb);\n        } else if(el.attachEvent) {\n            el.attachEvent(\"on\" + name, cb);\n        } else {\n            return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n        }\n    }\n\n    function removeEvent(el, name, cb) {\n        if (el.removeEventListener) {\n            el.removeEventListener(name, cb);\n        } else if(el.detachEvent) {\n            el.detachEvent(\"on\" + name, cb);\n        } else {\n            return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n        }\n    }\n\n    function getExpandElement(element) {\n        return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n    }\n\n    function getShrinkElement(element) {\n        return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n    }\n\n    /**\n     * Adds a resize event listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n     */\n    function addListener(element, listener) {\n        var listeners = getState(element).listeners;\n\n        if (!listeners.push) {\n            throw new Error(\"Cannot add listener to an element that is not detectable.\");\n        }\n\n        getState(element).listeners.push(listener);\n    }\n\n    /**\n     * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n     * @private\n     * @param {object} options Optional options object.\n     * @param {element} element The element to make detectable\n     * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n     */\n    function makeDetectable(options, element, callback) {\n        if (!callback) {\n            callback = element;\n            element = options;\n            options = null;\n        }\n\n        options = options || {};\n\n        function debug() {\n            if (options.debug) {\n                var args = Array.prototype.slice.call(arguments);\n                args.unshift(idHandler.get(element), \"Scroll: \");\n                if (reporter.log.apply) {\n                    reporter.log.apply(null, args);\n                } else {\n                    for (var i = 0; i < args.length; i++) {\n                        reporter.log(args[i]);\n                    }\n                }\n            }\n        }\n\n        function isDetached(element) {\n            function isInDocument(element) {\n                var isInShadowRoot = element.getRootNode && element.getRootNode().contains(element);\n                return element === element.ownerDocument.body || element.ownerDocument.body.contains(element) || isInShadowRoot;\n            }\n\n            if (!isInDocument(element)) {\n                return true;\n            }\n\n            // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n            if (window.getComputedStyle(element) === null) {\n                return true;\n            }\n\n            return false;\n        }\n\n        function isUnrendered(element) {\n            // Check the absolute positioned container since the top level container is display: inline.\n            var container = getState(element).container.childNodes[0];\n            var style = window.getComputedStyle(container);\n            return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n        }\n\n        function getStyle() {\n            // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n            // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n            var elementStyle            = window.getComputedStyle(element);\n            var style                   = {};\n            style.position              = elementStyle.position;\n            style.width                 = element.offsetWidth;\n            style.height                = element.offsetHeight;\n            style.top                   = elementStyle.top;\n            style.right                 = elementStyle.right;\n            style.bottom                = elementStyle.bottom;\n            style.left                  = elementStyle.left;\n            style.widthCSS              = elementStyle.width;\n            style.heightCSS             = elementStyle.height;\n            return style;\n        }\n\n        function storeStartSize() {\n            var style = getStyle();\n            getState(element).startSize = {\n                width: style.width,\n                height: style.height\n            };\n            debug(\"Element start size\", getState(element).startSize);\n        }\n\n        function initListeners() {\n            getState(element).listeners = [];\n        }\n\n        function storeStyle() {\n            debug(\"storeStyle invoked.\");\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            var style = getStyle();\n            getState(element).style = style;\n        }\n\n        function storeCurrentSize(element, width, height) {\n            getState(element).lastWidth = width;\n            getState(element).lastHeight  = height;\n        }\n\n        function getExpandChildElement(element) {\n            return getExpandElement(element).childNodes[0];\n        }\n\n        function getWidthOffset() {\n            return 2 * scrollbarSizes.width + 1;\n        }\n\n        function getHeightOffset() {\n            return 2 * scrollbarSizes.height + 1;\n        }\n\n        function getExpandWidth(width) {\n            return width + 10 + getWidthOffset();\n        }\n\n        function getExpandHeight(height) {\n            return height + 10 + getHeightOffset();\n        }\n\n        function getShrinkWidth(width) {\n            return width * 2 + getWidthOffset();\n        }\n\n        function getShrinkHeight(height) {\n            return height * 2 + getHeightOffset();\n        }\n\n        function positionScrollbars(element, width, height) {\n            var expand          = getExpandElement(element);\n            var shrink          = getShrinkElement(element);\n            var expandWidth     = getExpandWidth(width);\n            var expandHeight    = getExpandHeight(height);\n            var shrinkWidth     = getShrinkWidth(width);\n            var shrinkHeight    = getShrinkHeight(height);\n            expand.scrollLeft   = expandWidth;\n            expand.scrollTop    = expandHeight;\n            shrink.scrollLeft   = shrinkWidth;\n            shrink.scrollTop    = shrinkHeight;\n        }\n\n        function injectContainerElement() {\n            var container = getState(element).container;\n\n            if (!container) {\n                container                   = document.createElement(\"div\");\n                container.className         = detectionContainerClass;\n                container.style.cssText     = buildCssTextString([\"visibility: hidden\", \"display: inline\", \"width: 0px\", \"height: 0px\", \"z-index: -1\", \"overflow: hidden\", \"margin: 0\", \"padding: 0\"]);\n                getState(element).container = container;\n                addAnimationClass(container);\n                element.appendChild(container);\n\n                var onAnimationStart = function () {\n                    getState(element).onRendered && getState(element).onRendered();\n                };\n\n                addEvent(container, \"animationstart\", onAnimationStart);\n\n                // Store the event handler here so that they may be removed when uninstall is called.\n                // See uninstall function for an explanation why it is needed.\n                getState(element).onAnimationStart = onAnimationStart;\n            }\n\n            return container;\n        }\n\n        function injectScrollElements() {\n            function alterPositionStyles() {\n                var style = getState(element).style;\n\n                if(style.position === \"static\") {\n                    element.style.setProperty(\"position\", \"relative\",options.important ? \"important\" : \"\");\n\n                    var removeRelativeStyles = function(reporter, element, style, property) {\n                        function getNumericalValue(value) {\n                            return value.replace(/[^-\\d\\.]/g, \"\");\n                        }\n\n                        var value = style[property];\n\n                        if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n                            reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n                            element.style[property] = 0;\n                        }\n                    };\n\n                    //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n                    //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n                    removeRelativeStyles(reporter, element, style, \"top\");\n                    removeRelativeStyles(reporter, element, style, \"right\");\n                    removeRelativeStyles(reporter, element, style, \"bottom\");\n                    removeRelativeStyles(reporter, element, style, \"left\");\n                }\n            }\n\n            function getLeftTopBottomRightCssText(left, top, bottom, right) {\n                left = (!left ? \"0\" : (left + \"px\"));\n                top = (!top ? \"0\" : (top + \"px\"));\n                bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n                right = (!right ? \"0\" : (right + \"px\"));\n\n                return [\"left: \" + left, \"top: \" + top, \"right: \" + right, \"bottom: \" + bottom];\n            }\n\n            debug(\"Injecting elements\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            alterPositionStyles();\n\n            var rootContainer = getState(element).container;\n\n            if (!rootContainer) {\n                rootContainer = injectContainerElement();\n            }\n\n            // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n            // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n            // the targeted element.\n            // When the bug is resolved, \"containerContainer\" may be removed.\n\n            // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n            // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n            var scrollbarWidth          = scrollbarSizes.width;\n            var scrollbarHeight         = scrollbarSizes.height;\n            var containerContainerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\", \"left: 0px\", \"top: 0px\"]);\n            var containerStyle          = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\"].concat(getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth)));\n            var expandStyle             = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n            var shrinkStyle             = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n            var expandChildStyle        = buildCssTextString([\"position: absolute\", \"left: 0\", \"top: 0\"]);\n            var shrinkChildStyle        = buildCssTextString([\"position: absolute\", \"width: 200%\", \"height: 200%\"]);\n\n            var containerContainer      = document.createElement(\"div\");\n            var container               = document.createElement(\"div\");\n            var expand                  = document.createElement(\"div\");\n            var expandChild             = document.createElement(\"div\");\n            var shrink                  = document.createElement(\"div\");\n            var shrinkChild             = document.createElement(\"div\");\n\n            // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n            // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n            containerContainer.dir              = \"ltr\";\n\n            containerContainer.style.cssText    = containerContainerStyle;\n            containerContainer.className        = detectionContainerClass;\n            container.className                 = detectionContainerClass;\n            container.style.cssText             = containerStyle;\n            expand.style.cssText                = expandStyle;\n            expandChild.style.cssText           = expandChildStyle;\n            shrink.style.cssText                = shrinkStyle;\n            shrinkChild.style.cssText           = shrinkChildStyle;\n\n            expand.appendChild(expandChild);\n            shrink.appendChild(shrinkChild);\n            container.appendChild(expand);\n            container.appendChild(shrink);\n            containerContainer.appendChild(container);\n            rootContainer.appendChild(containerContainer);\n\n            function onExpandScroll() {\n                getState(element).onExpand && getState(element).onExpand();\n            }\n\n            function onShrinkScroll() {\n                getState(element).onShrink && getState(element).onShrink();\n            }\n\n            addEvent(expand, \"scroll\", onExpandScroll);\n            addEvent(shrink, \"scroll\", onShrinkScroll);\n\n            // Store the event handlers here so that they may be removed when uninstall is called.\n            // See uninstall function for an explanation why it is needed.\n            getState(element).onExpandScroll = onExpandScroll;\n            getState(element).onShrinkScroll = onShrinkScroll;\n        }\n\n        function registerListenersAndPositionElements() {\n            function updateChildSizes(element, width, height) {\n                var expandChild             = getExpandChildElement(element);\n                var expandWidth             = getExpandWidth(width);\n                var expandHeight            = getExpandHeight(height);\n                expandChild.style.setProperty(\"width\", expandWidth + \"px\", options.important ? \"important\" : \"\");\n                expandChild.style.setProperty(\"height\", expandHeight + \"px\", options.important ? \"important\" : \"\");\n            }\n\n            function updateDetectorElements(done) {\n                var width           = element.offsetWidth;\n                var height          = element.offsetHeight;\n\n                // Check whether the size has actually changed since last time the algorithm ran. If not, some steps may be skipped.\n                var sizeChanged = width !== getState(element).lastWidth || height !== getState(element).lastHeight;\n\n                debug(\"Storing current size\", width, height);\n\n                // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n                // Otherwise the if-check in handleScroll is useless.\n                storeCurrentSize(element, width, height);\n\n                // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n                // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n                batchProcessor.add(0, function performUpdateChildSizes() {\n                    if (!sizeChanged) {\n                        return;\n                    }\n\n                    if (!getState(element)) {\n                        debug(\"Aborting because element has been uninstalled\");\n                        return;\n                    }\n\n                    if (!areElementsInjected()) {\n                        debug(\"Aborting because element container has not been initialized\");\n                        return;\n                    }\n\n                    if (options.debug) {\n                        var w = element.offsetWidth;\n                        var h = element.offsetHeight;\n\n                        if (w !== width || h !== height) {\n                            reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n                        }\n                    }\n\n                    updateChildSizes(element, width, height);\n                });\n\n                batchProcessor.add(1, function updateScrollbars() {\n                    // This function needs to be invoked event though the size is unchanged. The element could have been resized very quickly and then\n                    // been restored to the original size, which will have changed the scrollbar positions.\n\n                    if (!getState(element)) {\n                        debug(\"Aborting because element has been uninstalled\");\n                        return;\n                    }\n\n                    if (!areElementsInjected()) {\n                        debug(\"Aborting because element container has not been initialized\");\n                        return;\n                    }\n\n                    positionScrollbars(element, width, height);\n                });\n\n                if (sizeChanged && done) {\n                    batchProcessor.add(2, function () {\n                        if (!getState(element)) {\n                            debug(\"Aborting because element has been uninstalled\");\n                            return;\n                        }\n\n                        if (!areElementsInjected()) {\n                          debug(\"Aborting because element container has not been initialized\");\n                          return;\n                        }\n\n                        done();\n                    });\n                }\n            }\n\n            function areElementsInjected() {\n                return !!getState(element).container;\n            }\n\n            function notifyListenersIfNeeded() {\n                function isFirstNotify() {\n                    return getState(element).lastNotifiedWidth === undefined;\n                }\n\n                debug(\"notifyListenersIfNeeded invoked\");\n\n                var state = getState(element);\n\n                // Don't notify if the current size is the start size, and this is the first notification.\n                if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n                    return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n                }\n\n                // Don't notify if the size already has been notified.\n                if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n                    return debug(\"Not notifying: Size already notified\");\n                }\n\n\n                debug(\"Current size not notified, notifying...\");\n                state.lastNotifiedWidth = state.lastWidth;\n                state.lastNotifiedHeight = state.lastHeight;\n                forEach(getState(element).listeners, function (listener) {\n                    listener(element);\n                });\n            }\n\n            function handleRender() {\n                debug(\"startanimation triggered.\");\n\n                if (isUnrendered(element)) {\n                    debug(\"Ignoring since element is still unrendered...\");\n                    return;\n                }\n\n                debug(\"Element rendered.\");\n                var expand = getExpandElement(element);\n                var shrink = getShrinkElement(element);\n                if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n                    debug(\"Scrollbars out of sync. Updating detector elements...\");\n                    updateDetectorElements(notifyListenersIfNeeded);\n                }\n            }\n\n            function handleScroll() {\n                debug(\"Scroll detected.\");\n\n                if (isUnrendered(element)) {\n                    // Element is still unrendered. Skip this scroll event.\n                    debug(\"Scroll event fired while unrendered. Ignoring...\");\n                    return;\n                }\n\n                updateDetectorElements(notifyListenersIfNeeded);\n            }\n\n            debug(\"registerListenersAndPositionElements invoked.\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            getState(element).onRendered = handleRender;\n            getState(element).onExpand = handleScroll;\n            getState(element).onShrink = handleScroll;\n\n            var style = getState(element).style;\n            updateChildSizes(element, style.width, style.height);\n        }\n\n        function finalizeDomMutation() {\n            debug(\"finalizeDomMutation invoked.\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            var style = getState(element).style;\n            storeCurrentSize(element, style.width, style.height);\n            positionScrollbars(element, style.width, style.height);\n        }\n\n        function ready() {\n            callback(element);\n        }\n\n        function install() {\n            debug(\"Installing...\");\n            initListeners();\n            storeStartSize();\n\n            batchProcessor.add(0, storeStyle);\n            batchProcessor.add(1, injectScrollElements);\n            batchProcessor.add(2, registerListenersAndPositionElements);\n            batchProcessor.add(3, finalizeDomMutation);\n            batchProcessor.add(4, ready);\n        }\n\n        debug(\"Making detectable...\");\n\n        if (isDetached(element)) {\n            debug(\"Element is detached\");\n\n            injectContainerElement();\n\n            debug(\"Waiting until element is attached...\");\n\n            getState(element).onRendered = function () {\n                debug(\"Element is now attached\");\n                install();\n            };\n        } else {\n            install();\n        }\n    }\n\n    function uninstall(element) {\n        var state = getState(element);\n\n        if (!state) {\n            // Uninstall has been called on a non-erd element.\n            return;\n        }\n\n        // Uninstall may have been called in the following scenarios:\n        // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n        // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n        // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n        // So to be on the safe side, let's check for each thing before removing.\n\n        // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n        state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n        state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n        state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n        state.container && element.removeChild(state.container);\n    }\n\n    return {\n        makeDetectable: makeDetectable,\n        addListener: addListener,\n        uninstall: uninstall,\n        initDocument: initDocument\n    };\n};\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param  {number}    delay -          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {boolean}   [noTrailing] -   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n *                                    the internal counter is reset).\n * @param  {Function}  callback -       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param  {boolean}   [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n *                                    schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function}  A new, throttled, function.\n */\nexport default function(delay, noTrailing, callback, debounceMode) {\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel() {\n\t\tclearExistingTimeout();\n\t\tcancelled = true;\n\t}\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t/*\n\t\t\t * In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t * `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param  {number}   delay -         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  {boolean}  [atBegin] -     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param  {Function} callback -      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                  to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function(delay, atBegin, callback) {\n\treturn callback === undefined\n\t\t? throttle(delay, atBegin, false)\n\t\t: throttle(delay, callback, atBegin !== false);\n}\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\nvar decodeComponent = require('decode-uri-component');\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nfunction extract(str) {\n\tvar queryStart = str.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\treturn str.slice(queryStart + 1);\n}\n\nfunction parse(str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^[?#&]/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeComponent(val);\n\n\t\tformatter(decodeComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tif (opts.sort === false) {\n\t\topts.sort = function () {};\n\t}\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort(opts.sort).map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\nexports.parseUrl = function (str, opts) {\n\treturn {\n\t\turl: str.split('?')[0] || '',\n\t\tquery: parse(extract(str), opts)\n\t};\n};\n","'use strict';\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _reactRedux = require('react-redux');\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _authWrapper = require('../authWrapper');\n\nvar _authWrapper2 = _interopRequireDefault(_authWrapper);\n\nvar _redirect = require('../redirect');\n\nvar _redirect2 = _interopRequireDefault(_redirect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar connectedDefaults = {\n  authenticatingSelector: function authenticatingSelector() {\n    return false;\n  },\n  allowRedirectBack: true,\n  FailureComponent: _redirect2.default,\n  redirectQueryParamName: 'redirect'\n};\n\nexports.default = function (_ref) {\n  var locationHelperBuilder = _ref.locationHelperBuilder,\n      getRouterRedirect = _ref.getRouterRedirect;\n\n\n  var connectedRouterRedirect = function connectedRouterRedirect(args) {\n    var allArgs = _extends({}, connectedDefaults, args);\n    var FailureComponent = allArgs.FailureComponent,\n        redirectPath = allArgs.redirectPath,\n        authenticatedSelector = allArgs.authenticatedSelector,\n        authenticatingSelector = allArgs.authenticatingSelector,\n        allowRedirectBack = allArgs.allowRedirectBack,\n        redirectQueryParamName = allArgs.redirectQueryParamName;\n\n    var _locationHelperBuilde = locationHelperBuilder({\n      redirectQueryParamName: redirectQueryParamName\n    }),\n        createRedirectLoc = _locationHelperBuilde.createRedirectLoc;\n\n    var redirectPathSelector = void 0;\n    if (typeof redirectPath === 'string') {\n      redirectPathSelector = function redirectPathSelector() {\n        return redirectPath;\n      };\n    } else if (typeof redirectPath === 'function') {\n      redirectPathSelector = redirectPath;\n    } else {\n      (0, _invariant2.default)(false, 'redirectPath must be either a string or a function');\n    }\n\n    var allowRedirectBackFn = void 0;\n    if (typeof allowRedirectBack === 'boolean') {\n      allowRedirectBackFn = function allowRedirectBackFn() {\n        return allowRedirectBack;\n      };\n    } else if (typeof allowRedirectBack === 'function') {\n      allowRedirectBackFn = allowRedirectBack;\n    } else {\n      (0, _invariant2.default)(false, 'allowRedirectBack must be either a boolean or a function');\n    }\n\n    var redirect = function redirect(replace) {\n      return function (props, path) {\n        return replace(createRedirectLoc(allowRedirectBackFn(props, path))(props, path));\n      };\n    };\n\n    var ConnectedFailureComponent = (0, _reactRedux.connect)(function (state, ownProps) {\n      return {\n        redirect: redirect(getRouterRedirect(ownProps))\n      };\n    })(FailureComponent);\n\n    return function (DecoratedComponent) {\n      return (0, _reactRedux.connect)(function (state, ownProps) {\n        return {\n          redirectPath: redirectPathSelector(state, ownProps),\n          isAuthenticated: authenticatedSelector(state, ownProps),\n          isAuthenticating: authenticatingSelector(state, ownProps)\n        };\n      })((0, _authWrapper2.default)(_extends({}, allArgs, { FailureComponent: ConnectedFailureComponent }))(DecoratedComponent));\n    };\n  };\n\n  var connectedReduxRedirect = function connectedReduxRedirect(args) {\n    var allArgs = _extends({}, connectedDefaults, args);\n    var FailureComponent = allArgs.FailureComponent,\n        redirectPath = allArgs.redirectPath,\n        authenticatedSelector = allArgs.authenticatedSelector,\n        authenticatingSelector = allArgs.authenticatingSelector,\n        allowRedirectBack = allArgs.allowRedirectBack,\n        redirectAction = allArgs.redirectAction,\n        redirectQueryParamName = allArgs.redirectQueryParamName;\n\n    var _locationHelperBuilde2 = locationHelperBuilder({\n      redirectQueryParamName: redirectQueryParamName\n    }),\n        createRedirectLoc = _locationHelperBuilde2.createRedirectLoc;\n\n    var redirectPathSelector = void 0;\n    if (typeof redirectPath === 'string') {\n      redirectPathSelector = function redirectPathSelector() {\n        return redirectPath;\n      };\n    } else if (typeof redirectPath === 'function') {\n      redirectPathSelector = redirectPath;\n    } else {\n      (0, _invariant2.default)(false, 'redirectPath must be either a string or a function');\n    }\n\n    var allowRedirectBackFn = void 0;\n    if (typeof allowRedirectBack === 'boolean') {\n      allowRedirectBackFn = function allowRedirectBackFn() {\n        return allowRedirectBack;\n      };\n    } else if (typeof allowRedirectBack === 'function') {\n      allowRedirectBackFn = allowRedirectBack;\n    } else {\n      (0, _invariant2.default)(false, 'allowRedirectBack must be either a boolean or a function');\n    }\n\n    var createRedirect = function createRedirect(dispatch) {\n      return {\n        redirect: function redirect(props, path) {\n          return dispatch(redirectAction(createRedirectLoc(allowRedirectBackFn(props, path))(props, path)));\n        }\n      };\n    };\n\n    var ConnectedFailureComponent = (0, _reactRedux.connect)(null, createRedirect)(FailureComponent);\n\n    return function (DecoratedComponent) {\n      return (0, _reactRedux.connect)(function (state, ownProps) {\n        return {\n          redirectPath: redirectPathSelector(state, ownProps),\n          isAuthenticated: authenticatedSelector(state, ownProps),\n          isAuthenticating: authenticatingSelector(state, ownProps)\n        };\n      })((0, _authWrapper2.default)(_extends({}, allArgs, { FailureComponent: ConnectedFailureComponent }))(DecoratedComponent));\n    };\n  };\n\n  return {\n    connectedRouterRedirect: connectedRouterRedirect,\n    connectedReduxRedirect: connectedReduxRedirect\n  };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _hoistNonReactStatics = require('hoist-non-react-statics');\n\nvar _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar defaults = {\n  AuthenticatingComponent: function AuthenticatingComponent() {\n    return null;\n  }, // dont render anything while authenticating\n  FailureComponent: function FailureComponent() {\n    return null;\n  }, // dont render anything on failure of the predicate\n  wrapperDisplayName: 'AuthWrapper'\n};\n\nexports.default = function (args) {\n  var _defaults$args = _extends({}, defaults, args),\n      AuthenticatingComponent = _defaults$args.AuthenticatingComponent,\n      FailureComponent = _defaults$args.FailureComponent,\n      wrapperDisplayName = _defaults$args.wrapperDisplayName;\n\n  // Wraps the component that needs the auth enforcement\n\n\n  function wrapComponent(DecoratedComponent) {\n    var _class, _temp;\n\n    var displayName = DecoratedComponent.displayName || DecoratedComponent.name || 'Component';\n\n    var UserAuthWrapper = (_temp = _class = function (_Component) {\n      _inherits(UserAuthWrapper, _Component);\n\n      function UserAuthWrapper() {\n        _classCallCheck(this, UserAuthWrapper);\n\n        return _possibleConstructorReturn(this, (UserAuthWrapper.__proto__ || Object.getPrototypeOf(UserAuthWrapper)).apply(this, arguments));\n      }\n\n      _createClass(UserAuthWrapper, [{\n        key: 'render',\n        value: function render() {\n          var _props = this.props,\n              isAuthenticated = _props.isAuthenticated,\n              isAuthenticating = _props.isAuthenticating;\n\n          if (isAuthenticated) {\n            return _react2.default.createElement(DecoratedComponent, this.props);\n          } else if (isAuthenticating) {\n            return _react2.default.createElement(AuthenticatingComponent, this.props);\n          } else {\n            return _react2.default.createElement(FailureComponent, this.props);\n          }\n        }\n      }]);\n\n      return UserAuthWrapper;\n    }(_react.Component), _class.displayName = wrapperDisplayName + '(' + displayName + ')', _class.propTypes = {\n      isAuthenticated: _propTypes2.default.bool,\n      isAuthenticating: _propTypes2.default.bool\n    }, _class.defaultProps = {\n      isAuthenticating: false\n    }, _temp);\n\n\n    return (0, _hoistNonReactStatics2.default)(UserAuthWrapper, DecoratedComponent);\n  }\n\n  return wrapComponent;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _temp;\n\nvar _react = require('react');\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Redirect = (_temp = _class = function (_Component) {\n  _inherits(Redirect, _Component);\n\n  function Redirect() {\n    _classCallCheck(this, Redirect);\n\n    return _possibleConstructorReturn(this, (Redirect.__proto__ || Object.getPrototypeOf(Redirect)).apply(this, arguments));\n  }\n\n  _createClass(Redirect, [{\n    key: 'componentWillMount',\n    value: function componentWillMount() {\n      this.props.redirect(this.props, this.props.redirectPath);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      // Redirect should happen before this is rendered\n      return null;\n    }\n  }]);\n\n  return Redirect;\n}(_react.Component), _class.propTypes = {\n  redirectPath: _propTypes2.default.string.isRequired,\n  redirect: _propTypes2.default.func.isRequired\n}, _temp);\nexports.default = Redirect;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.GA4 = void 0;\nvar _gtag = _interopRequireDefault(require(\"./gtag\"));\nvar _format = _interopRequireDefault(require(\"./format\"));\nvar _excluded = [\"eventCategory\", \"eventAction\", \"eventLabel\", \"eventValue\", \"hitType\"],\n  _excluded2 = [\"title\", \"location\"],\n  _excluded3 = [\"page\", \"hitType\"];\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*\nLinks\nhttps://developers.google.com/gtagjs/reference/api\nhttps://developers.google.com/tag-platform/gtagjs/reference\n*/\n/**\n * @typedef GaOptions\n * @type {Object}\n * @property {boolean} [cookieUpdate=true]\n * @property {number} [cookieExpires=63072000] Default two years\n * @property {string} [cookieDomain=\"auto\"]\n * @property {string} [cookieFlags]\n * @property {string} [userId]\n * @property {string} [clientId]\n * @property {boolean} [anonymizeIp]\n * @property {string} [contentGroup1]\n * @property {string} [contentGroup2]\n * @property {string} [contentGroup3]\n * @property {string} [contentGroup4]\n * @property {string} [contentGroup5]\n * @property {boolean} [allowAdFeatures=true]\n * @property {boolean} [allowAdPersonalizationSignals]\n * @property {boolean} [nonInteraction]\n * @property {string} [page]\n */\n/**\n * @typedef UaEventOptions\n * @type {Object}\n * @property {string} action\n * @property {string} category\n * @property {string} [label]\n * @property {number} [value]\n * @property {boolean} [nonInteraction]\n * @property {('beacon'|'xhr'|'image')} [transport]\n */\n/**\n * @typedef InitOptions\n * @type {Object}\n * @property {string} trackingId\n * @property {GaOptions|any} [gaOptions]\n * @property {Object} [gtagOptions] New parameter\n */\nvar GA4 = /*#__PURE__*/function () {\n  function GA4() {\n    var _this = this;\n    _classCallCheck(this, GA4);\n    _defineProperty(this, \"reset\", function () {\n      _this.isInitialized = false;\n      _this._testMode = false;\n      _this._currentMeasurementId;\n      _this._hasLoadedGA = false;\n      _this._isQueuing = false;\n      _this._queueGtag = [];\n    });\n    _defineProperty(this, \"_gtag\", function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      if (!_this._testMode) {\n        if (_this._isQueuing) {\n          _this._queueGtag.push(args);\n        } else {\n          _gtag[\"default\"].apply(void 0, args);\n        }\n      } else {\n        _this._queueGtag.push(args);\n      }\n    });\n    _defineProperty(this, \"_loadGA\", function (GA_MEASUREMENT_ID, nonce) {\n      var gtagUrl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"https://www.googletagmanager.com/gtag/js\";\n      if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n        return;\n      }\n      if (!_this._hasLoadedGA) {\n        // Global Site Tag (gtag.js) - Google Analytics\n        var script = document.createElement(\"script\");\n        script.async = true;\n        script.src = \"\".concat(gtagUrl, \"?id=\").concat(GA_MEASUREMENT_ID);\n        if (nonce) {\n          script.setAttribute(\"nonce\", nonce);\n        }\n        document.body.appendChild(script);\n        window.dataLayer = window.dataLayer || [];\n        window.gtag = function gtag() {\n          window.dataLayer.push(arguments);\n        };\n        _this._hasLoadedGA = true;\n      }\n    });\n    _defineProperty(this, \"_toGtagOptions\", function (gaOptions) {\n      if (!gaOptions) {\n        return;\n      }\n      var mapFields = {\n        // Old https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#cookieUpdate\n        // New https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id#cookie_update\n        cookieUpdate: \"cookie_update\",\n        cookieExpires: \"cookie_expires\",\n        cookieDomain: \"cookie_domain\",\n        cookieFlags: \"cookie_flags\",\n        // must be in set method?\n        userId: \"user_id\",\n        clientId: \"client_id\",\n        anonymizeIp: \"anonymize_ip\",\n        // https://support.google.com/analytics/answer/2853546?hl=en#zippy=%2Cin-this-article\n        contentGroup1: \"content_group1\",\n        contentGroup2: \"content_group2\",\n        contentGroup3: \"content_group3\",\n        contentGroup4: \"content_group4\",\n        contentGroup5: \"content_group5\",\n        // https://support.google.com/analytics/answer/9050852?hl=en\n        allowAdFeatures: \"allow_google_signals\",\n        allowAdPersonalizationSignals: \"allow_ad_personalization_signals\",\n        nonInteraction: \"non_interaction\",\n        page: \"page_path\",\n        hitCallback: \"event_callback\"\n      };\n      var gtagOptions = Object.entries(gaOptions).reduce(function (prev, _ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          key = _ref2[0],\n          value = _ref2[1];\n        if (mapFields[key]) {\n          prev[mapFields[key]] = value;\n        } else {\n          prev[key] = value;\n        }\n        return prev;\n      }, {});\n      return gtagOptions;\n    });\n    _defineProperty(this, \"initialize\", function (GA_MEASUREMENT_ID) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (!GA_MEASUREMENT_ID) {\n        throw new Error(\"Require GA_MEASUREMENT_ID\");\n      }\n      var initConfigs = typeof GA_MEASUREMENT_ID === \"string\" ? [{\n        trackingId: GA_MEASUREMENT_ID\n      }] : GA_MEASUREMENT_ID;\n      _this._currentMeasurementId = initConfigs[0].trackingId;\n      var gaOptions = options.gaOptions,\n        gtagOptions = options.gtagOptions,\n        nonce = options.nonce,\n        _options$testMode = options.testMode,\n        testMode = _options$testMode === void 0 ? false : _options$testMode,\n        gtagUrl = options.gtagUrl;\n      _this._testMode = testMode;\n      if (!testMode) {\n        _this._loadGA(_this._currentMeasurementId, nonce, gtagUrl);\n      }\n      if (!_this.isInitialized) {\n        _this._gtag(\"js\", new Date());\n        initConfigs.forEach(function (config) {\n          var mergedGtagOptions = _objectSpread(_objectSpread(_objectSpread({}, _this._toGtagOptions(_objectSpread(_objectSpread({}, gaOptions), config.gaOptions))), gtagOptions), config.gtagOptions);\n          if (Object.keys(mergedGtagOptions).length) {\n            _this._gtag(\"config\", config.trackingId, mergedGtagOptions);\n          } else {\n            _this._gtag(\"config\", config.trackingId);\n          }\n        });\n      }\n      _this.isInitialized = true;\n      if (!testMode) {\n        var queues = _toConsumableArray(_this._queueGtag);\n        _this._queueGtag = [];\n        _this._isQueuing = false;\n        while (queues.length) {\n          var queue = queues.shift();\n          _this._gtag.apply(_this, _toConsumableArray(queue));\n          if (queue[0] === \"get\") {\n            _this._isQueuing = true;\n          }\n        }\n      }\n    });\n    _defineProperty(this, \"set\", function (fieldsObject) {\n      if (!fieldsObject) {\n        console.warn(\"`fieldsObject` is required in .set()\");\n        return;\n      }\n      if (_typeof(fieldsObject) !== \"object\") {\n        console.warn(\"Expected `fieldsObject` arg to be an Object\");\n        return;\n      }\n      if (Object.keys(fieldsObject).length === 0) {\n        console.warn(\"empty `fieldsObject` given to .set()\");\n      }\n      _this._gaCommand(\"set\", fieldsObject);\n    });\n    _defineProperty(this, \"_gaCommandSendEvent\", function (eventCategory, eventAction, eventLabel, eventValue, fieldsObject) {\n      _this._gtag(\"event\", eventAction, _objectSpread(_objectSpread({\n        event_category: eventCategory,\n        event_label: eventLabel,\n        value: eventValue\n      }, fieldsObject && {\n        non_interaction: fieldsObject.nonInteraction\n      }), _this._toGtagOptions(fieldsObject)));\n    });\n    _defineProperty(this, \"_gaCommandSendEventParameters\", function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendEvent.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$ = args[0],\n          eventCategory = _args$.eventCategory,\n          eventAction = _args$.eventAction,\n          eventLabel = _args$.eventLabel,\n          eventValue = _args$.eventValue,\n          hitType = _args$.hitType,\n          rest = _objectWithoutProperties(_args$, _excluded);\n        _this._gaCommandSendEvent(eventCategory, eventAction, eventLabel, eventValue, rest);\n      }\n    });\n    _defineProperty(this, \"_gaCommandSendTiming\", function (timingCategory, timingVar, timingValue, timingLabel) {\n      _this._gtag(\"event\", \"timing_complete\", {\n        name: timingVar,\n        value: timingValue,\n        event_category: timingCategory,\n        event_label: timingLabel\n      });\n    });\n    _defineProperty(this, \"_gaCommandSendPageview\", function (page, fieldsObject) {\n      if (fieldsObject && Object.keys(fieldsObject).length) {\n        var _this$_toGtagOptions = _this._toGtagOptions(fieldsObject),\n          title = _this$_toGtagOptions.title,\n          location = _this$_toGtagOptions.location,\n          rest = _objectWithoutProperties(_this$_toGtagOptions, _excluded2);\n        _this._gtag(\"event\", \"page_view\", _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, page && {\n          page_path: page\n        }), title && {\n          page_title: title\n        }), location && {\n          page_location: location\n        }), rest));\n      } else if (page) {\n        _this._gtag(\"event\", \"page_view\", {\n          page_path: page\n        });\n      } else {\n        _this._gtag(\"event\", \"page_view\");\n      }\n    });\n    _defineProperty(this, \"_gaCommandSendPageviewParameters\", function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendPageview.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$2 = args[0],\n          page = _args$2.page,\n          hitType = _args$2.hitType,\n          rest = _objectWithoutProperties(_args$2, _excluded3);\n        _this._gaCommandSendPageview(page, rest);\n      }\n    });\n    _defineProperty(this, \"_gaCommandSend\", function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n      var hitType = typeof args[0] === \"string\" ? args[0] : args[0].hitType;\n      switch (hitType) {\n        case \"event\":\n          _this._gaCommandSendEventParameters.apply(_this, args);\n          break;\n        case \"pageview\":\n          _this._gaCommandSendPageviewParameters.apply(_this, args);\n          break;\n        case \"timing\":\n          _this._gaCommandSendTiming.apply(_this, _toConsumableArray(args.slice(1)));\n          break;\n        case \"screenview\":\n        case \"transaction\":\n        case \"item\":\n        case \"social\":\n        case \"exception\":\n          console.warn(\"Unsupported send command: \".concat(hitType));\n          break;\n        default:\n          console.warn(\"Send command doesn't exist: \".concat(hitType));\n      }\n    });\n    _defineProperty(this, \"_gaCommandSet\", function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n      if (typeof args[0] === \"string\") {\n        args[0] = _defineProperty({}, args[0], args[1]);\n      }\n      _this._gtag(\"set\", _this._toGtagOptions(args[0]));\n    });\n    _defineProperty(this, \"_gaCommand\", function (command) {\n      for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n        args[_key6 - 1] = arguments[_key6];\n      }\n      switch (command) {\n        case \"send\":\n          _this._gaCommandSend.apply(_this, args);\n          break;\n        case \"set\":\n          _this._gaCommandSet.apply(_this, args);\n          break;\n        default:\n          console.warn(\"Command doesn't exist: \".concat(command));\n      }\n    });\n    _defineProperty(this, \"ga\", function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n      if (typeof args[0] === \"string\") {\n        _this._gaCommand.apply(_this, args);\n      } else {\n        var readyCallback = args[0];\n        _this._gtag(\"get\", _this._currentMeasurementId, \"client_id\", function (clientId) {\n          _this._isQueuing = false;\n          var queues = _this._queueGtag;\n          readyCallback({\n            get: function get(property) {\n              return property === \"clientId\" ? clientId : property === \"trackingId\" ? _this._currentMeasurementId : property === \"apiVersion\" ? \"1\" : undefined;\n            }\n          });\n          while (queues.length) {\n            var queue = queues.shift();\n            _this._gtag.apply(_this, _toConsumableArray(queue));\n          }\n        });\n        _this._isQueuing = true;\n      }\n      return _this.ga;\n    });\n    _defineProperty(this, \"event\", function (optionsOrName, params) {\n      if (typeof optionsOrName === \"string\") {\n        _this._gtag(\"event\", optionsOrName, _this._toGtagOptions(params));\n      } else {\n        var action = optionsOrName.action,\n          category = optionsOrName.category,\n          label = optionsOrName.label,\n          value = optionsOrName.value,\n          nonInteraction = optionsOrName.nonInteraction,\n          transport = optionsOrName.transport;\n        if (!category || !action) {\n          console.warn(\"args.category AND args.action are required in event()\");\n          return;\n        }\n\n        // Required Fields\n        var fieldObject = {\n          hitType: \"event\",\n          eventCategory: (0, _format[\"default\"])(category),\n          eventAction: (0, _format[\"default\"])(action)\n        };\n\n        // Optional Fields\n        if (label) {\n          fieldObject.eventLabel = (0, _format[\"default\"])(label);\n        }\n        if (typeof value !== \"undefined\") {\n          if (typeof value !== \"number\") {\n            console.warn(\"Expected `args.value` arg to be a Number.\");\n          } else {\n            fieldObject.eventValue = value;\n          }\n        }\n        if (typeof nonInteraction !== \"undefined\") {\n          if (typeof nonInteraction !== \"boolean\") {\n            console.warn(\"`args.nonInteraction` must be a boolean.\");\n          } else {\n            fieldObject.nonInteraction = nonInteraction;\n          }\n        }\n        if (typeof transport !== \"undefined\") {\n          if (typeof transport !== \"string\") {\n            console.warn(\"`args.transport` must be a string.\");\n          } else {\n            if ([\"beacon\", \"xhr\", \"image\"].indexOf(transport) === -1) {\n              console.warn(\"`args.transport` must be either one of these values: `beacon`, `xhr` or `image`\");\n            }\n            fieldObject.transport = transport;\n          }\n        }\n        _this._gaCommand(\"send\", fieldObject);\n      }\n    });\n    _defineProperty(this, \"send\", function (fieldObject) {\n      _this._gaCommand(\"send\", fieldObject);\n    });\n    this.reset();\n  }\n  _createClass(GA4, [{\n    key: \"gtag\",\n    value: function gtag() {\n      this._gtag.apply(this, arguments);\n    }\n  }]);\n  return GA4;\n}();\nexports.GA4 = GA4;\nvar _default = new GA4();\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\nvar gtag = function gtag() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  if (typeof window !== \"undefined\") {\n    var _window;\n    if (typeof window.gtag === \"undefined\") {\n      window.dataLayer = window.dataLayer || [];\n      window.gtag = function gtag() {\n        window.dataLayer.push(arguments);\n      };\n    }\n    (_window = window).gtag.apply(_window, args);\n  }\n};\nvar _default = gtag;\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = format;\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\nfunction toTitleCase(string) {\n  return string.toString().trim().replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n    if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== \":\" && (title.charAt(index + match.length) !== \"-\" || title.charAt(index - 1) === \"-\") && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n      return match.toLowerCase();\n    }\n    if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n      return match;\n    }\n    return match.charAt(0).toUpperCase() + match.substr(1);\n  });\n}\n\n// See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\nfunction mightBeEmail(s) {\n  // There's no point trying to validate rfc822 fully, just look for ...@...\n  return typeof s === \"string\" && s.indexOf(\"@\") !== -1;\n}\nvar redacted = \"REDACTED (Potential Email Address)\";\nfunction redactEmail(string) {\n  if (mightBeEmail(string)) {\n    console.warn(\"This arg looks like an email address, redacting.\");\n    return redacted;\n  }\n  return string;\n}\nfunction format() {\n  var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n  var titleCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var redactingEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n  var _str = s || \"\";\n  if (titleCase) {\n    _str = toTitleCase(s);\n  }\n  if (redactingEmail) {\n    _str = redactEmail(_str);\n  }\n  return _str;\n}","import type { PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create tracing context from incoming headers.\n *\n * @deprecated Use `propagationContextFromHeaders` instead.\n */\n// TODO(v8): Remove this function\nexport function tracingContextFromHeaders(\n  sentryTrace: Parameters<typeof extractTraceparentData>[0],\n  baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n  traceparentData: ReturnType<typeof extractTraceparentData>;\n  dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n  propagationContext: PropagationContext;\n} {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  if (!traceparentData) {\n    return {\n      traceparentData,\n      dynamicSamplingContext: undefined,\n      propagationContext: {\n        traceId: traceId || uuid4(),\n        spanId: uuid4().substring(16),\n      },\n    };\n  } else {\n    return {\n      traceparentData,\n      dynamicSamplingContext: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n      propagationContext: {\n        traceId: traceId || uuid4(),\n        parentSpanId: parentSpanId || uuid4().substring(16),\n        spanId: uuid4().substring(16),\n        sampled: parentSampled,\n        dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n      },\n    };\n  }\n}\n\n/**\n * Create a propagation context from incoming headers.\n */\nexport function propagationContextFromHeaders(\n  sentryTrace: string | undefined,\n  baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  if (!traceparentData) {\n    return {\n      traceId: traceId || uuid4(),\n      spanId: uuid4().substring(16),\n    };\n  } else {\n    return {\n      traceId: traceId || uuid4(),\n      parentSpanId: parentSpanId || uuid4().substring(16),\n      spanId: uuid4().substring(16),\n      sampled: parentSampled,\n      dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    };\n  }\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string = uuid4(),\n  spanId: string = uuid4().substring(16),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport setRef from '../utils/setRef';\nimport useForkRef from '../utils/useForkRef';\n\nfunction getContainer(container) {\n  container = typeof container === 'function' ? container() : container; // #StrictMode ready\n\n  return ReactDOM.findDOMNode(container);\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\nvar Portal = React.forwardRef(function Portal(props, ref) {\n  var children = props.children,\n      container = props.container,\n      _props$disablePortal = props.disablePortal,\n      disablePortal = _props$disablePortal === void 0 ? false : _props$disablePortal,\n      onRendered = props.onRendered;\n\n  var _React$useState = React.useState(null),\n      mountNode = _React$useState[0],\n      setMountNode = _React$useState[1];\n\n  var handleRef = useForkRef(React.isValidElement(children) ? children.ref : null, ref);\n  useEnhancedEffect(function () {\n    if (!disablePortal) {\n      setMountNode(getContainer(container) || document.body);\n    }\n  }, [container, disablePortal]);\n  useEnhancedEffect(function () {\n    if (mountNode && !disablePortal) {\n      setRef(ref, mountNode);\n      return function () {\n        setRef(ref, null);\n      };\n    }\n\n    return undefined;\n  }, [ref, mountNode, disablePortal]);\n  useEnhancedEffect(function () {\n    if (onRendered && (mountNode || disablePortal)) {\n      onRendered();\n    }\n  }, [onRendered, mountNode, disablePortal]);\n\n  if (disablePortal) {\n    if (React.isValidElement(children)) {\n      return React.cloneElement(children, {\n        ref: handleRef\n      });\n    }\n\n    return children;\n  }\n\n  return mountNode ? ReactDOM.createPortal(children, mountNode) : mountNode;\n});\nprocess.env.NODE_ENV !== \"production\" ? Portal.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The children to render into the `container`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * A node, component instance, or function that returns either.\n   * The `container` will have the portal children appended to it.\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes.oneOfType([PropTypes.func, PropTypes.instanceOf(React.Component), PropTypes.instanceOf(typeof Element === 'undefined' ? Object : Element)]),\n\n  /**\n   * Disable the portal behavior.\n   * The children stay within it's parent DOM hierarchy.\n   */\n  disablePortal: PropTypes.bool,\n\n  /**\n   * Callback fired once the children has been mounted into the `container`.\n   *\n   * This prop will be deprecated and removed in v5, the ref can be used instead.\n   */\n  onRendered: PropTypes.func\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  Portal['propTypes' + ''] = exactProp(Portal.propTypes);\n}\n\nexport default Portal;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport FormGroup from '../FormGroup';\nimport useForkRef from '../utils/useForkRef';\nimport useControlled from '../utils/useControlled';\nimport RadioGroupContext from './RadioGroupContext';\nvar RadioGroup = React.forwardRef(function RadioGroup(props, ref) {\n  var actions = props.actions,\n      children = props.children,\n      name = props.name,\n      valueProp = props.value,\n      onChange = props.onChange,\n      other = _objectWithoutProperties(props, [\"actions\", \"children\", \"name\", \"value\", \"onChange\"]);\n\n  var rootRef = React.useRef(null);\n\n  var _useControlled = useControlled({\n    controlled: valueProp,\n    default: props.defaultValue,\n    name: 'RadioGroup'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  React.useImperativeHandle(actions, function () {\n    return {\n      focus: function focus() {\n        var input = rootRef.current.querySelector('input:not(:disabled):checked');\n\n        if (!input) {\n          input = rootRef.current.querySelector('input:not(:disabled)');\n        }\n\n        if (input) {\n          input.focus();\n        }\n      }\n    };\n  }, []);\n  var handleRef = useForkRef(ref, rootRef);\n\n  var handleChange = function handleChange(event) {\n    setValue(event.target.value);\n\n    if (onChange) {\n      onChange(event, event.target.value);\n    }\n  };\n\n  return React.createElement(RadioGroupContext.Provider, {\n    value: {\n      name: name,\n      onChange: handleChange,\n      value: value\n    }\n  }, React.createElement(FormGroup, _extends({\n    role: \"radiogroup\",\n    ref: handleRef\n  }, other), children));\n});\nprocess.env.NODE_ENV !== \"production\" ? RadioGroup.propTypes = {\n  /**\n   * @ignore\n   */\n  actions: PropTypes.shape({\n    current: PropTypes.object\n  }),\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * The name used to reference the value of the control.\n   */\n  name: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when a radio button is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * Value of the selected radio button. The DOM API casts this to a string.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default RadioGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    flexDirection: 'column',\n    flexWrap: 'wrap'\n  },\n\n  /* Styles applied to the root element if `row={true}`. */\n  row: {\n    flexDirection: 'row'\n  }\n};\n/**\n * `FormGroup` wraps controls such as `Checkbox` and `Switch`.\n * It provides compact row layout.\n * For the `Radio`, you should be using the `RadioGroup` component instead of this one.\n */\n\nvar FormGroup = React.forwardRef(function FormGroup(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$row = props.row,\n      row = _props$row === void 0 ? false : _props$row,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"row\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, row && classes.row),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormGroup.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Display group of elements in a compact row.\n   */\n  row: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFormGroup'\n})(FormGroup);","export default function createStyles(styles) {\n  return styles;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  var backgroundColor = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      backgroundColor: backgroundColor,\n      borderTopLeftRadius: theme.shape.borderRadius,\n      borderTopRightRadius: theme.shape.borderRadius,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '&:hover': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: backgroundColor\n        }\n      },\n      '&$focused': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)'\n      },\n      '&$disabled': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)'\n      }\n    },\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:before': {\n        borderBottom: \"1px solid \".concat(theme.palette.text.primary)\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 12\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 12\n    },\n\n    /* Styles applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '27px 12px 10px',\n      '&$marginDense': {\n        paddingTop: 23,\n        paddingBottom: 6\n      }\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '27px 12px 10px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'dark' ? '0 0 0 100px #266798 inset' : null,\n        WebkitTextFillColor: theme.palette.type === 'dark' ? '#fff' : null,\n        borderTopLeftRadius: 'inherit',\n        borderTopRightRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 23,\n      paddingBottom: 6\n    },\n\n    /* Styles applied to the `input` if in `<FormControl hiddenLabel />`. */\n    inputHiddenLabel: {\n      paddingTop: 18,\n      paddingBottom: 19,\n      '&$inputMarginDense': {\n        paddingTop: 10,\n        paddingBottom: 11\n      }\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar FilledInput = React.forwardRef(function FilledInput(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return React.createElement(InputBase, _extends({\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? FilledInput.propTypes = {\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the wrapper element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the native input.\n   * Either a string to use a DOM element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nFilledInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiFilledInput'\n})(FilledInput);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({\n      color: theme.palette.text.secondary\n    }, theme.typography.body1, {\n      lineHeight: 1,\n      padding: 0,\n      '&$focused': {\n        color: theme.palette.primary.main\n      },\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      },\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }),\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused': {\n        color: theme.palette.secondary.main\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Pseudo-class applied to the root element if `filled={true}`. */\n    filled: {},\n\n    /* Pseudo-class applied to the root element if `required={true}`. */\n    required: {},\n\n    /* Styles applied to the asterisk element. */\n    asterisk: {\n      '&$error': {\n        color: theme.palette.error.main\n      }\n    }\n  };\n};\nvar FormLabel = React.forwardRef(function FormLabel(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'label' : _props$component,\n      disabled = props.disabled,\n      error = props.error,\n      filled = props.filled,\n      focused = props.focused,\n      required = props.required,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"required\"]);\n\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n  });\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fcs.filled && classes.filled, fcs.focused && classes.focused, fcs.required && classes.required),\n    ref: ref\n  }, other), children, fcs.required && React.createElement(\"span\", {\n    className: clsx(classes.asterisk, fcs.error && classes.error)\n  }, \"\\u2009\", '*'));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormLabel.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the label should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the label should be displayed in an error state.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the label should use filled classes key.\n   */\n  filled: PropTypes.bool,\n\n  /**\n   * If `true`, the input of this label is focused (used by `FormGroup` components).\n   */\n  focused: PropTypes.bool,\n\n  /**\n   * If `true`, the label will indicate that the input is required.\n   */\n  required: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFormLabel'\n})(FormLabel);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport ownerDocument from '../utils/ownerDocument';\nimport List from '../List';\nimport getScrollbarSize from '../utils/getScrollbarSize';\nimport useForkRef from '../utils/useForkRef';\n\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n\n  return disableListWrap ? null : list.firstChild;\n}\n\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n\n  return disableListWrap ? null : list.lastChild;\n}\n\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n\n  var text = nextFocus.innerText;\n\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n\n  text = text.trim().toLowerCase();\n\n  if (text.length === 0) {\n    return false;\n  }\n\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n\n  return text.indexOf(textCriteria.keys.join('')) === 0;\n}\n\nfunction moveFocus(list, currentFocus, disableListWrap, traversalFunction, textCriteria) {\n  var wrappedOnce = false;\n  var nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return false;\n      }\n\n      wrappedOnce = true;\n    } // Move to the next element.\n\n\n    if (!nextFocus.hasAttribute('tabindex') || nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true' || !textCriteriaMatches(nextFocus, textCriteria)) {\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * A permanently displayed menu following https://www.w3.org/TR/wai-aria-practices/#menubutton\n * It's exposed to help customization of the [`Menu`](/api/menu/) component. If you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\n\nvar MenuList = React.forwardRef(function MenuList(props, ref) {\n  var actions = props.actions,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$autoFocusItem = props.autoFocusItem,\n      autoFocusItem = _props$autoFocusItem === void 0 ? false : _props$autoFocusItem,\n      children = props.children,\n      className = props.className,\n      onKeyDown = props.onKeyDown,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = _objectWithoutProperties(props, [\"actions\", \"autoFocus\", \"autoFocusItem\", \"children\", \"className\", \"onKeyDown\", \"disableListWrap\", \"variant\"]);\n\n  var listRef = React.useRef(null);\n  var textCriteriaRef = React.useRef({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useImperativeHandle(actions, function () {\n    return {\n      adjustStyleForScrollbar: function adjustStyleForScrollbar(containerElement, theme) {\n        // Let's ignore that piece of logic if users are already overriding the width\n        // of the menu.\n        var noExplicitWidth = !listRef.current.style.width;\n\n        if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n          var scrollbarSize = \"\".concat(getScrollbarSize(true), \"px\");\n          listRef.current.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n          listRef.current.style.width = \"calc(100% + \".concat(scrollbarSize, \")\");\n        }\n\n        return listRef.current;\n      }\n    };\n  }, []);\n\n  var handleKeyDown = function handleKeyDown(event) {\n    var list = listRef.current;\n    var key = event.key;\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n\n    var currentFocus = ownerDocument(list).activeElement;\n\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, previousItem);\n    } else if (key.length === 1) {\n      var criteria = textCriteriaRef.current;\n      var lowerKey = key.toLowerCase();\n      var currTime = performance.now();\n\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      var keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    listRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRef = useForkRef(handleOwnRef, ref);\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  React.Children.forEach(children, function (child, index) {\n    if (!React.isValidElement(child)) {\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = React.Children.map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      var newChildProps = {};\n\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n\n      if (newChildProps !== null) {\n        return React.cloneElement(child, newChildProps);\n      }\n    }\n\n    return child;\n  });\n  return React.createElement(List, _extends({\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1\n  }, other), items);\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuList.propTypes = {\n  /**\n   * @ignore\n   */\n  actions: PropTypes.shape({\n    current: PropTypes.object\n  }),\n\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`\n   */\n  autoFocusItem: PropTypes.bool,\n\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the menu items will not wrap focus.\n   */\n  disableListWrap: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default MenuList;","import type {\n  Envelope,\n  EnvelopeItem,\n  EnvelopeItemType,\n  Event,\n  EventDropReason,\n  EventItem,\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n  SentryError,\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  isRateLimited,\n  logger,\n  makePromiseBuffer,\n  resolvedSyncPromise,\n  serializeEnvelope,\n  updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Typography from '../Typography';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    alignItems: 'center',\n    padding: 16\n  },\n\n  /* Styles applied to the avatar element. */\n  avatar: {\n    flex: '0 0 auto',\n    marginRight: 16\n  },\n\n  /* Styles applied to the action element. */\n  action: {\n    flex: '0 0 auto',\n    alignSelf: 'flex-start',\n    marginTop: -8,\n    marginRight: -8\n  },\n\n  /* Styles applied to the content wrapper element. */\n  content: {\n    flex: '1 1 auto'\n  },\n\n  /* Styles applied to the title Typography element. */\n  title: {},\n\n  /* Styles applied to the subheader Typography element. */\n  subheader: {}\n};\nvar CardHeader = React.forwardRef(function CardHeader(props, ref) {\n  var action = props.action,\n      avatar = props.avatar,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$disableTypogra = props.disableTypography,\n      disableTypography = _props$disableTypogra === void 0 ? false : _props$disableTypogra,\n      subheaderProp = props.subheader,\n      subheaderTypographyProps = props.subheaderTypographyProps,\n      titleProp = props.title,\n      titleTypographyProps = props.titleTypographyProps,\n      other = _objectWithoutProperties(props, [\"action\", \"avatar\", \"classes\", \"className\", \"component\", \"disableTypography\", \"subheader\", \"subheaderTypographyProps\", \"title\", \"titleTypographyProps\"]);\n\n  var title = titleProp;\n\n  if (title != null && title.type !== Typography && !disableTypography) {\n    title = React.createElement(Typography, _extends({\n      variant: avatar ? 'body2' : 'h5',\n      className: classes.title,\n      component: \"span\",\n      display: \"block\"\n    }, titleTypographyProps), title);\n  }\n\n  var subheader = subheaderProp;\n\n  if (subheader != null && subheader.type !== Typography && !disableTypography) {\n    subheader = React.createElement(Typography, _extends({\n      variant: avatar ? 'body2' : 'body1',\n      className: classes.subheader,\n      color: \"textSecondary\",\n      component: \"span\",\n      display: \"block\"\n    }, subheaderTypographyProps), subheader);\n  }\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), avatar && React.createElement(\"div\", {\n    className: classes.avatar\n  }, avatar), React.createElement(\"div\", {\n    className: classes.content\n  }, title, subheader), action && React.createElement(\"div\", {\n    className: classes.action\n  }, action));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardHeader.propTypes = {\n  /**\n   * The action to display in the card header.\n   */\n  action: PropTypes.node,\n\n  /**\n   * The Avatar for the Card Header.\n   */\n  avatar: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, `subheader` and `title` won't be wrapped by a Typography component.\n   * This can be useful to render an alternative Typography variant by wrapping\n   * the `title` text, and optional `subheader` text\n   * with the Typography component.\n   */\n  disableTypography: PropTypes.bool,\n\n  /**\n   * The content of the component.\n   */\n  subheader: PropTypes.node,\n\n  /**\n   * These props will be forwarded to the subheader\n   * (as long as disableTypography is not `true`).\n   */\n  subheaderTypographyProps: PropTypes.object,\n\n  /**\n   * The content of the Card Title.\n   */\n  title: PropTypes.node,\n\n  /**\n   * These props will be forwarded to the title\n   * (as long as disableTypography is not `true`).\n   */\n  titleTypographyProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCardHeader'\n})(CardHeader);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    padding: '8px 24px 24px'\n  }\n};\nvar ExpansionPanelDetails = React.forwardRef(function ExpansionPanelDetails(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ExpansionPanelDetails.propTypes = {\n  /**\n   * The content of the expansion panel details.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiExpansionPanelDetails'\n})(ExpansionPanelDetails);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n\n/* eslint-disable jsx-a11y/aria-role */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ButtonBase from '../ButtonBase';\nimport IconButton from '../IconButton';\nimport withStyles from '../styles/withStyles';\nimport ExpansionPanelContext from '../ExpansionPanel/ExpansionPanelContext';\nexport var styles = function styles(theme) {\n  var transition = {\n    duration: theme.transitions.duration.shortest\n  };\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'flex',\n      minHeight: 8 * 6,\n      transition: theme.transitions.create(['min-height', 'background-color'], transition),\n      padding: '0 24px 0 24px',\n      '&:hover:not($disabled)': {\n        cursor: 'pointer'\n      },\n      '&$expanded': {\n        minHeight: 64\n      },\n      '&$focused': {\n        backgroundColor: theme.palette.grey[300]\n      },\n      '&$disabled': {\n        opacity: 0.38\n      }\n    },\n\n    /* Pseudo-class applied to the root element, children wrapper element and `IconButton` component if `expanded={true}`. */\n    expanded: {},\n\n    /* Pseudo-class applied to the root element if `focused={true}`. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the children wrapper element. */\n    content: {\n      display: 'flex',\n      flexGrow: 1,\n      transition: theme.transitions.create(['margin'], transition),\n      margin: '12px 0',\n      '&$expanded': {\n        margin: '20px 0'\n      }\n    },\n\n    /* Styles applied to the `IconButton` component when `expandIcon` is supplied. */\n    expandIcon: {\n      transform: 'rotate(0deg)',\n      transition: theme.transitions.create('transform', transition),\n      '&:hover': {\n        // Disable the hover effect for the IconButton,\n        // because a hover effect should apply to the entire Expand button and\n        // not only to the IconButton.\n        backgroundColor: 'transparent'\n      },\n      '&$expanded': {\n        transform: 'rotate(180deg)'\n      }\n    }\n  };\n};\nvar ExpansionPanelSummary = React.forwardRef(function ExpansionPanelSummary(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      expandIcon = props.expandIcon,\n      IconButtonProps = props.IconButtonProps,\n      onBlur = props.onBlur,\n      onClick = props.onClick,\n      onFocusVisible = props.onFocusVisible,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"expandIcon\", \"IconButtonProps\", \"onBlur\", \"onClick\", \"onFocusVisible\"]);\n\n  var _React$useState = React.useState(false),\n      focusedState = _React$useState[0],\n      setFocusedState = _React$useState[1];\n\n  var handleFocusVisible = function handleFocusVisible(event) {\n    setFocusedState(true);\n\n    if (onFocusVisible) {\n      onFocusVisible(event);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    setFocusedState(false);\n\n    if (onBlur) {\n      onBlur(event);\n    }\n  };\n\n  var _React$useContext = React.useContext(ExpansionPanelContext),\n      _React$useContext$dis = _React$useContext.disabled,\n      disabled = _React$useContext$dis === void 0 ? false : _React$useContext$dis,\n      expanded = _React$useContext.expanded,\n      toggle = _React$useContext.toggle;\n\n  var handleChange = function handleChange(event) {\n    if (toggle) {\n      toggle(event);\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  return React.createElement(ButtonBase, _extends({\n    focusRipple: false,\n    disableRipple: true,\n    disabled: disabled,\n    component: \"div\",\n    \"aria-expanded\": expanded,\n    className: clsx(classes.root, className, disabled && classes.disabled, expanded && classes.expanded, focusedState && classes.focused),\n    onFocusVisible: handleFocusVisible,\n    onBlur: handleBlur,\n    onClick: handleChange,\n    ref: ref\n  }, other), React.createElement(\"div\", {\n    className: clsx(classes.content, expanded && classes.expanded)\n  }, children), expandIcon && React.createElement(IconButton, _extends({\n    className: clsx(classes.expandIcon, expanded && classes.expanded),\n    edge: \"end\",\n    component: \"div\",\n    tabIndex: null,\n    role: null,\n    \"aria-hidden\": true\n  }, IconButtonProps), expandIcon));\n});\nprocess.env.NODE_ENV !== \"production\" ? ExpansionPanelSummary.propTypes = {\n  /**\n   * The content of the expansion panel summary.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The icon to display as the expand indicator.\n   */\n  expandIcon: PropTypes.node,\n\n  /**\n   * Props applied to the `IconButton` element wrapping the expand icon.\n   */\n  IconButtonProps: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocusVisible: PropTypes.func\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiExpansionPanelSummary'\n})(ExpansionPanelSummary);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nimport unsupportedProp from '../utils/unsupportedProp';\nexport var styles = function styles(theme) {\n  var _extends2;\n\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.button, (_extends2 = {\n      maxWidth: 264,\n      minWidth: 72,\n      position: 'relative',\n      boxSizing: 'border-box',\n      minHeight: 48,\n      flexShrink: 0,\n      padding: '6px 12px'\n    }, _defineProperty(_extends2, theme.breakpoints.up('sm'), {\n      padding: '6px 24px'\n    }), _defineProperty(_extends2, \"overflow\", 'hidden'), _defineProperty(_extends2, \"whiteSpace\", 'normal'), _defineProperty(_extends2, \"textAlign\", 'center'), _defineProperty(_extends2, theme.breakpoints.up('sm'), {\n      minWidth: 160\n    }), _extends2)),\n\n    /* Styles applied to the root element if both `icon` and `label` are provided. */\n    labelIcon: {\n      minHeight: 72,\n      paddingTop: 9,\n      '& $wrapper > *:first-child': {\n        marginBottom: 6\n      }\n    },\n\n    /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"inherit\"`. */\n    textColorInherit: {\n      color: 'inherit',\n      opacity: 0.7,\n      '&$selected': {\n        opacity: 1\n      },\n      '&$disabled': {\n        opacity: 0.5\n      }\n    },\n\n    /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"primary\"`. */\n    textColorPrimary: {\n      color: theme.palette.text.secondary,\n      '&$selected': {\n        color: theme.palette.primary.main\n      },\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      }\n    },\n\n    /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"secondary\"`. */\n    textColorSecondary: {\n      color: theme.palette.text.secondary,\n      '&$selected': {\n        color: theme.palette.secondary.main\n      },\n      '&$disabled': {\n        color: theme.palette.text.disabled\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}` (controlled by the Tabs component). */\n    selected: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}` (controlled by the Tabs component). */\n    disabled: {},\n\n    /* Styles applied to the root element if `fullWidth={true}` (controlled by the Tabs component). */\n    fullWidth: {\n      flexShrink: 1,\n      flexGrow: 1,\n      flexBasis: 0,\n      maxWidth: 'none'\n    },\n\n    /* Styles applied to the root element if `wrapped={true}`. */\n    wrapped: {\n      fontSize: theme.typography.pxToRem(12),\n      lineHeight: 1.5\n    },\n\n    /* Styles applied to the `icon` and `label`'s wrapper element. */\n    wrapper: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      width: '100%',\n      flexDirection: 'column'\n    }\n  };\n};\nvar Tab = React.forwardRef(function Tab(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      fullWidth = props.fullWidth,\n      icon = props.icon,\n      indicator = props.indicator,\n      label = props.label,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      selected = props.selected,\n      _props$textColor = props.textColor,\n      textColor = _props$textColor === void 0 ? 'inherit' : _props$textColor,\n      value = props.value,\n      _props$wrapped = props.wrapped,\n      wrapped = _props$wrapped === void 0 ? false : _props$wrapped,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"disabled\", \"disableFocusRipple\", \"fullWidth\", \"icon\", \"indicator\", \"label\", \"onChange\", \"onClick\", \"selected\", \"textColor\", \"value\", \"wrapped\"]);\n\n  var handleChange = function handleChange(event) {\n    if (onChange) {\n      onChange(event, value);\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  return React.createElement(ButtonBase, _extends({\n    focusRipple: !disableFocusRipple,\n    className: clsx(classes.root, classes[\"textColor\".concat(capitalize(textColor))], className, disabled && classes.disabled, selected && classes.selected, label && icon && classes.labelIcon, fullWidth && classes.fullWidth, wrapped && classes.wrapped),\n    ref: ref,\n    role: \"tab\",\n    \"aria-selected\": selected,\n    disabled: disabled,\n    onClick: handleChange\n  }, other), React.createElement(\"span\", {\n    className: classes.wrapper\n  }, icon, label), indicator);\n});\nprocess.env.NODE_ENV !== \"production\" ? Tab.propTypes = {\n  /**\n   * This prop isn't supported.\n   * Use the `component` prop if you need to change the children structure.\n   */\n  children: unsupportedProp,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the tab will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   * `disableRipple` must also be true.\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The icon element.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * @ignore\n   * For server-side rendering consideration, we let the selected tab\n   * render the indicator.\n   */\n  indicator: PropTypes.node,\n\n  /**\n   * The label element.\n   */\n  label: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  selected: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  textColor: PropTypes.oneOf(['secondary', 'primary', 'inherit']),\n\n  /**\n   * You can provide your own value. Otherwise, we fallback to the child position index.\n   */\n  value: PropTypes.any,\n\n  /**\n   * Tab labels appear in a single row.\n   * They can use a second line if needed.\n   */\n  wrapped: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTab'\n})(Tab);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      minHeight: 36,\n      transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n        duration: theme.transitions.duration.short\n      }),\n      borderRadius: '50%',\n      padding: 0,\n      minWidth: 0,\n      width: 56,\n      height: 56,\n      boxShadow: theme.shadows[6],\n      '&:active': {\n        boxShadow: theme.shadows[12]\n      },\n      color: theme.palette.getContrastText(theme.palette.grey[300]),\n      backgroundColor: theme.palette.grey[300],\n      '&$focusVisible': {\n        boxShadow: theme.shadows[6]\n      },\n      '&:hover': {\n        backgroundColor: theme.palette.grey.A100,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.grey[300]\n        },\n        '&$disabled': {\n          backgroundColor: theme.palette.action.disabledBackground\n        },\n        textDecoration: 'none'\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled,\n        boxShadow: theme.shadows[0],\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    }),\n\n    /* Styles applied to the span element that wraps the children. */\n    label: {\n      width: '100%',\n      // assure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    primary: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.primary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    secondary: {\n      color: theme.palette.secondary.contrastText,\n      backgroundColor: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.secondary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.secondary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"extended\"`. */\n    extended: {\n      borderRadius: 48 / 2,\n      padding: '0 16px',\n      width: 'auto',\n      minHeight: 'auto',\n      minWidth: 48,\n      height: 48,\n      '&$sizeSmall': {\n        width: 'auto',\n        padding: '0 8px',\n        borderRadius: 34 / 2,\n        minWidth: 34,\n        height: 34\n      },\n      '&$sizeMedium': {\n        width: 'auto',\n        padding: '0 16px',\n        borderRadius: 40 / 2,\n        minWidth: 40,\n        height: 40\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n    focusVisible: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"``. */\n    sizeSmall: {\n      width: 40,\n      height: 40\n    },\n\n    /* Styles applied to the root element if `size=\"medium\"``. */\n    sizeMedium: {\n      width: 48,\n      height: 48\n    }\n  };\n};\nvar Fab = React.forwardRef(function Fab(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'large' : _props$size,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'round' : _props$variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"disableFocusRipple\", \"focusVisibleClassName\", \"size\", \"variant\"]);\n\n  return React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, className, variant !== \"round\" && classes.extended, size !== 'large' && classes[\"size\".concat(capitalize(size))], disabled && classes.disabled, {\n      primary: classes.primary,\n      secondary: classes.secondary,\n      inherit: classes.colorInherit\n    }[color]),\n    component: component,\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n    ref: ref\n  }, other), React.createElement(\"span\", {\n    className: classes.label\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Fab.propTypes = {\n  /**\n   * The content of the button.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   * `disableRipple` must also be true.\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: PropTypes.string,\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n  /**\n   * @ignore\n   */\n  type: PropTypes.string,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['round', 'extended'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiFab'\n})(Fab);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Paper from '../Paper';\nimport StepConnector from '../StepConnector';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'flex',\n    padding: 24\n  },\n\n  /* Styles applied to the root element if `orientation=\"horizontal\"`. */\n  horizontal: {\n    flexDirection: 'row',\n    alignItems: 'center'\n  },\n\n  /* Styles applied to the root element if `orientation=\"vertical\"`. */\n  vertical: {\n    flexDirection: 'column'\n  },\n\n  /* Styles applied to the root element if `alternativeLabel={true}`. */\n  alternativeLabel: {\n    alignItems: 'flex-start'\n  }\n};\nvar defaultConnector = React.createElement(StepConnector, null);\nvar Stepper = React.forwardRef(function Stepper(props, ref) {\n  var _props$activeStep = props.activeStep,\n      activeStep = _props$activeStep === void 0 ? 0 : _props$activeStep,\n      _props$alternativeLab = props.alternativeLabel,\n      alternativeLabel = _props$alternativeLab === void 0 ? false : _props$alternativeLab,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$connector = props.connector,\n      connectorProp = _props$connector === void 0 ? defaultConnector : _props$connector,\n      _props$nonLinear = props.nonLinear,\n      nonLinear = _props$nonLinear === void 0 ? false : _props$nonLinear,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      other = _objectWithoutProperties(props, [\"activeStep\", \"alternativeLabel\", \"children\", \"classes\", \"className\", \"connector\", \"nonLinear\", \"orientation\"]);\n\n  var connector = React.isValidElement(connectorProp) ? React.cloneElement(connectorProp, {\n    orientation: orientation\n  }) : null;\n  var childrenArray = React.Children.toArray(children);\n  var steps = childrenArray.map(function (step, index) {\n    var controlProps = {\n      alternativeLabel: alternativeLabel,\n      connector: connectorProp,\n      last: index + 1 === childrenArray.length,\n      orientation: orientation\n    };\n    var state = {\n      index: index,\n      active: false,\n      completed: false,\n      disabled: false\n    };\n\n    if (activeStep === index) {\n      state.active = true;\n    } else if (!nonLinear && activeStep > index) {\n      state.completed = true;\n    } else if (!nonLinear && activeStep < index) {\n      state.disabled = true;\n    }\n\n    return [!alternativeLabel && connector && index !== 0 && React.cloneElement(connector, _extends({\n      key: index\n    }, state)), React.cloneElement(step, _extends({}, controlProps, {}, state, {}, step.props))];\n  });\n  return React.createElement(Paper, _extends({\n    square: true,\n    elevation: 0,\n    className: clsx(classes.root, classes[orientation], className, alternativeLabel && classes.alternativeLabel),\n    ref: ref\n  }, other), steps);\n});\nprocess.env.NODE_ENV !== \"production\" ? Stepper.propTypes = {\n  /**\n   * Set the active step (zero based index).\n   * Set to -1 to disable all the steps.\n   */\n  activeStep: PropTypes.number,\n\n  /**\n   * If set to 'true' and orientation is horizontal,\n   * then the step label will be positioned under the icon.\n   */\n  alternativeLabel: PropTypes.bool,\n\n  /**\n   * Two or more `<Step />` components.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * An element to be placed between each step.\n   */\n  connector: PropTypes.element,\n\n  /**\n   * If set the `Stepper` will not assist in controlling steps for linear flow.\n   */\n  nonLinear: PropTypes.bool,\n\n  /**\n   * The stepper orientation (layout flow direction).\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiStepper'\n})(Stepper);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      flex: '1 1 auto'\n    },\n\n    /* Styles applied to the root element if `orientation=\"horizontal\"`. */\n    horizontal: {},\n\n    /* Styles applied to the root element if `orientation=\"vertical\"`. */\n    vertical: {\n      marginLeft: 12,\n      // half icon\n      padding: '0 0 8px'\n    },\n\n    /* Styles applied to the root element if `alternativeLabel={true}`. */\n    alternativeLabel: {\n      position: 'absolute',\n      top: 8 + 4,\n      left: 'calc(-50% + 20px)',\n      right: 'calc(50% + 20px)'\n    },\n\n    /* Pseudo-class applied to the root element if `active={true}`. */\n    active: {},\n\n    /* Pseudo-class applied to the root element if `completed={true}`. */\n    completed: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the line element. */\n    line: {\n      display: 'block',\n      borderColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n    },\n\n    /* Styles applied to the root element if `orientation=\"horizontal\"`. */\n    lineHorizontal: {\n      borderTopStyle: 'solid',\n      borderTopWidth: 1\n    },\n\n    /* Styles applied to the root element if `orientation=\"vertical\"`. */\n    lineVertical: {\n      borderLeftStyle: 'solid',\n      borderLeftWidth: 1,\n      minHeight: 24\n    }\n  };\n};\nvar StepConnector = React.forwardRef(function StepConnector(props, ref) {\n  var active = props.active,\n      _props$alternativeLab = props.alternativeLabel,\n      alternativeLabel = _props$alternativeLab === void 0 ? false : _props$alternativeLab,\n      classes = props.classes,\n      className = props.className,\n      completed = props.completed,\n      disabled = props.disabled,\n      index = props.index,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      other = _objectWithoutProperties(props, [\"active\", \"alternativeLabel\", \"classes\", \"className\", \"completed\", \"disabled\", \"index\", \"orientation\"]);\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[orientation], className, alternativeLabel && classes.alternativeLabel, active && classes.active, completed && classes.completed, disabled && classes.disabled),\n    ref: ref\n  }, other), React.createElement(\"span\", {\n    className: clsx(classes.line, orientation === 'vertical' ? classes.lineVertical : classes.lineHorizontal)\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? StepConnector.propTypes = {\n  /**\n   * @ignore\n   */\n  active: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Set internally by Step when it's supplied with the alternativeLabel property.\n   */\n  alternativeLabel: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  completed: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  index: PropTypes.number,\n\n  /**\n   * @ignore\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiStepConnector'\n})(StepConnector);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Collapse from '../Collapse';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      marginTop: 8,\n      marginLeft: 12,\n      // half icon\n      paddingLeft: 8 + 12,\n      // margin + half icon\n      paddingRight: 8,\n      borderLeft: \"1px solid \".concat(theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600])\n    },\n\n    /* Styles applied to the root element if `last={true}` (controlled by `Step`). */\n    last: {\n      borderLeft: 'none'\n    },\n\n    /* Styles applied to the Transition component. */\n    transition: {}\n  };\n};\nvar StepContent = React.forwardRef(function StepContent(props, ref) {\n  var active = props.active,\n      alternativeLabel = props.alternativeLabel,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      completed = props.completed,\n      expanded = props.expanded,\n      last = props.last,\n      optional = props.optional,\n      orientation = props.orientation,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Collapse : _props$TransitionComp,\n      _props$transitionDura = props.transitionDuration,\n      transitionDurationProp = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      TransitionProps = props.TransitionProps,\n      other = _objectWithoutProperties(props, [\"active\", \"alternativeLabel\", \"children\", \"classes\", \"className\", \"completed\", \"expanded\", \"last\", \"optional\", \"orientation\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (orientation !== 'vertical') {\n      console.error('Material-UI: <StepContent /> is only designed for use with the vertical stepper.');\n    }\n  }\n\n  var transitionDuration = transitionDurationProp;\n\n  if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {\n    transitionDuration = undefined;\n  }\n\n  return React.createElement(\"div\", _extends({\n    className: clsx(classes.root, className, last && classes.last),\n    ref: ref\n  }, other), React.createElement(TransitionComponent, _extends({\n    in: active || expanded,\n    className: classes.transition,\n    timeout: transitionDuration,\n    unmountOnExit: true\n  }, TransitionProps), children));\n});\nprocess.env.NODE_ENV !== \"production\" ? StepContent.propTypes = {\n  /**\n   * @ignore\n   * Expands the content.\n   */\n  active: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Set internally by Step when it's supplied with the alternativeLabel prop.\n   */\n  alternativeLabel: PropTypes.bool,\n\n  /**\n   * Step content.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  completed: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  expanded: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  last: PropTypes.bool,\n\n  /**\n   * @ignore\n   * Set internally by Step when it's supplied with the optional prop.\n   */\n  optional: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * Adjust the duration of the content expand transition.\n   * Passed as a prop to the transition component.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  }), PropTypes.oneOf(['auto'])]),\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiStepContent'\n})(StepContent);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nvar RADIUS_STANDARD = 10;\nvar RADIUS_DOT = 4;\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      display: 'inline-flex',\n      // For correct alignment with the text.\n      verticalAlign: 'middle',\n      flexShrink: 0\n    },\n\n    /* Styles applied to the badge `span` element. */\n    badge: {\n      display: 'flex',\n      flexDirection: 'row',\n      flexWrap: 'wrap',\n      justifyContent: 'center',\n      alignContent: 'center',\n      alignItems: 'center',\n      position: 'absolute',\n      boxSizing: 'border-box',\n      fontFamily: theme.typography.fontFamily,\n      fontWeight: theme.typography.fontWeightMedium,\n      fontSize: theme.typography.pxToRem(12),\n      minWidth: RADIUS_STANDARD * 2,\n      lineHeight: 1,\n      padding: '0 6px',\n      height: RADIUS_STANDARD * 2,\n      borderRadius: RADIUS_STANDARD,\n      zIndex: 1,\n      // Render the badge on top of potential ripples.\n      transition: theme.transitions.create('transform', {\n        easing: theme.transitions.easing.easeInOut,\n        duration: theme.transitions.duration.enteringScreen\n      })\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      backgroundColor: theme.palette.primary.main,\n      color: theme.palette.primary.contrastText\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      backgroundColor: theme.palette.secondary.main,\n      color: theme.palette.secondary.contrastText\n    },\n\n    /* Styles applied to the root element if `color=\"error\"`. */\n    colorError: {\n      backgroundColor: theme.palette.error.main,\n      color: theme.palette.error.contrastText\n    },\n\n    /* Styles applied to the root element if `variant=\"dot\"`. */\n    dot: {\n      borderRadius: RADIUS_DOT,\n      height: RADIUS_DOT * 2,\n      minWidth: RADIUS_DOT * 2,\n      padding: 0\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }} overlap=\"rectangle\"`. */\n    anchorOriginTopRightRectangle: {\n      top: 0,\n      right: 0,\n      transform: 'scale(1) translate(50%, -50%)',\n      transformOrigin: '100% 0%',\n      '&$invisible': {\n        transform: 'scale(0) translate(50%, -50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }} overlap=\"rectangle\"`. */\n    anchorOriginBottomRightRectangle: {\n      bottom: 0,\n      right: 0,\n      transform: 'scale(1) translate(50%, 50%)',\n      transformOrigin: '100% 100%',\n      '&$invisible': {\n        transform: 'scale(0) translate(50%, 50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }} overlap=\"rectangle\"`. */\n    anchorOriginTopLeftRectangle: {\n      top: 0,\n      left: 0,\n      transform: 'scale(1) translate(-50%, -50%)',\n      transformOrigin: '0% 0%',\n      '&$invisible': {\n        transform: 'scale(0) translate(-50%, -50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }} overlap=\"rectangle\"`. */\n    anchorOriginBottomLeftRectangle: {\n      bottom: 0,\n      left: 0,\n      transform: 'scale(1) translate(-50%, 50%)',\n      transformOrigin: '0% 100%',\n      '&$invisible': {\n        transform: 'scale(0) translate(-50%, 50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }} overlap=\"circle\"`. */\n    anchorOriginTopRightCircle: {\n      top: '14%',\n      right: '14%',\n      transform: 'scale(1) translate(50%, -50%)',\n      transformOrigin: '100% 0%',\n      '&$invisible': {\n        transform: 'scale(0) translate(50%, -50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }} overlap=\"circle\"`. */\n    anchorOriginBottomRightCircle: {\n      bottom: '14%',\n      right: '14%',\n      transform: 'scale(1) translate(50%, 50%)',\n      transformOrigin: '100% 100%',\n      '&$invisible': {\n        transform: 'scale(0) translate(50%, 50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }} overlap=\"circle\"`. */\n    anchorOriginTopLeftCircle: {\n      top: '14%',\n      left: '14%',\n      transform: 'scale(1) translate(-50%, -50%)',\n      transformOrigin: '0% 0%',\n      '&$invisible': {\n        transform: 'scale(0) translate(-50%, -50%)'\n      }\n    },\n\n    /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }} overlap=\"circle\"`. */\n    anchorOriginBottomLeftCircle: {\n      bottom: '14%',\n      left: '14%',\n      transform: 'scale(1) translate(-50%, 50%)',\n      transformOrigin: '0% 100%',\n      '&$invisible': {\n        transform: 'scale(0) translate(-50%, 50%)'\n      }\n    },\n\n    /* Pseudo-class to the badge `span` element if `invisible={true}`. */\n    invisible: {\n      transition: theme.transitions.create('transform', {\n        easing: theme.transitions.easing.easeInOut,\n        duration: theme.transitions.duration.leavingScreen\n      })\n    }\n  };\n};\nvar Badge = React.forwardRef(function Badge(props, ref) {\n  var _props$anchorOrigin = props.anchorOrigin,\n      anchorOrigin = _props$anchorOrigin === void 0 ? {\n    vertical: 'top',\n    horizontal: 'right'\n  } : _props$anchorOrigin,\n      badgeContent = props.badgeContent,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      ComponentProp = _props$component === void 0 ? 'span' : _props$component,\n      invisibleProp = props.invisible,\n      _props$max = props.max,\n      max = _props$max === void 0 ? 99 : _props$max,\n      _props$overlap = props.overlap,\n      overlap = _props$overlap === void 0 ? 'rectangle' : _props$overlap,\n      _props$showZero = props.showZero,\n      showZero = _props$showZero === void 0 ? false : _props$showZero,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"anchorOrigin\", \"badgeContent\", \"children\", \"classes\", \"className\", \"color\", \"component\", \"invisible\", \"max\", \"overlap\", \"showZero\", \"variant\"]);\n\n  var invisible = invisibleProp;\n\n  if (invisibleProp == null && (badgeContent === 0 && !showZero || badgeContent == null && variant !== 'dot')) {\n    invisible = true;\n  }\n\n  var displayValue = '';\n\n  if (variant !== 'dot') {\n    displayValue = badgeContent > max ? \"\".concat(max, \"+\") : badgeContent;\n  }\n\n  return React.createElement(ComponentProp, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), children, React.createElement(\"span\", {\n    className: clsx(classes.badge, classes[\"\".concat(anchorOrigin.horizontal).concat(capitalize(anchorOrigin.vertical), \"}\")], classes[\"anchorOrigin\".concat(capitalize(anchorOrigin.vertical)).concat(capitalize(anchorOrigin.horizontal)).concat(capitalize(overlap))], color !== 'default' && classes[\"color\".concat(capitalize(color))], invisible && classes.invisible, {\n      dot: classes.dot\n    }[variant])\n  }, displayValue));\n});\nprocess.env.NODE_ENV !== \"production\" ? Badge.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The anchor of the badge.\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOf(['left', 'right']).isRequired,\n    vertical: PropTypes.oneOf(['bottom', 'top']).isRequired\n  }),\n\n  /**\n   * The content rendered within the badge.\n   */\n  badgeContent: PropTypes.node,\n\n  /**\n   * The badge will be added relative to this node.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'error', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the badge will be invisible.\n   */\n  invisible: PropTypes.bool,\n\n  /**\n   * Max count to show.\n   */\n  max: PropTypes.number,\n\n  /**\n   * Wrapped shape the badge should overlap.\n   */\n  overlap: PropTypes.oneOf(['circle', 'rectangle']),\n\n  /**\n   * Controls whether the badge is hidden when `badgeContent` is zero.\n   */\n  showZero: PropTypes.bool,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['dot', 'standard'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiBadge'\n})(Badge);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Paper from '../Paper';\nimport { emphasize } from '../styles/colorManipulator';\nexport var styles = function styles(theme) {\n  var emphasis = theme.palette.type === 'light' ? 0.8 : 0.98;\n  var backgroundColor = emphasize(theme.palette.background.default, emphasis);\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body2, _defineProperty({\n      color: theme.palette.getContrastText(backgroundColor),\n      backgroundColor: backgroundColor,\n      display: 'flex',\n      alignItems: 'center',\n      flexWrap: 'wrap',\n      padding: '6px 16px',\n      borderRadius: theme.shape.borderRadius,\n      flexGrow: 1\n    }, theme.breakpoints.up('sm'), {\n      flexGrow: 'initial',\n      minWidth: 288\n    })),\n\n    /* Styles applied to the message wrapper element. */\n    message: {\n      padding: '8px 0'\n    },\n\n    /* Styles applied to the action wrapper element if `action` is provided. */\n    action: {\n      display: 'flex',\n      alignItems: 'center',\n      marginLeft: 'auto',\n      paddingLeft: 16,\n      marginRight: -8\n    }\n  };\n};\nvar SnackbarContent = React.forwardRef(function SnackbarContent(props, ref) {\n  var action = props.action,\n      classes = props.classes,\n      className = props.className,\n      message = props.message,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'alert' : _props$role,\n      other = _objectWithoutProperties(props, [\"action\", \"classes\", \"className\", \"message\", \"role\"]);\n\n  return React.createElement(Paper, _extends({\n    role: role,\n    square: true,\n    elevation: 6,\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), React.createElement(\"div\", {\n    className: classes.message\n  }, message), action ? React.createElement(\"div\", {\n    className: classes.action\n  }, action) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? SnackbarContent.propTypes = {\n  /**\n   * The action to display. It renders after the message, at the end of the snackbar.\n   */\n  action: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The message to display.\n   */\n  message: PropTypes.node,\n\n  /**\n   * The ARIA role attribute of the element.\n   */\n  role: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiSnackbarContent'\n})(SnackbarContent);","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"\n}), 'KeyboardArrowUp');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"\n}), 'KeyboardArrowDown');","import { deepmerge } from '@material-ui/utils';\n\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n\n  return deepmerge(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n\n  });\n}\n\nexport default merge;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@material-ui/utils';\nimport merge from './merge';\n\nfunction omit(input, fields) {\n  var output = {};\n  Object.keys(input).forEach(function (prop) {\n    if (fields.indexOf(prop) === -1) {\n      output[prop] = input[prop];\n    }\n  });\n  return output;\n}\n\nvar warnedOnce = false;\n\nfunction styleFunctionSx(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var output = styleFunction(props);\n\n    if (props.css) {\n      return _extends({}, merge(output, styleFunction(_extends({\n        theme: props.theme\n      }, props.css))), omit(props.css, [styleFunction.filterProps]));\n    }\n\n    if (props.sx) {\n      return _extends({}, merge(output, styleFunction(_extends({\n        theme: props.theme\n      }, props.sx))), omit(props.sx, [styleFunction.filterProps]));\n    }\n\n    return output;\n  };\n\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n    css: chainPropTypes(PropTypes.object, function (props) {\n      if (!warnedOnce && props.css !== undefined) {\n        warnedOnce = true;\n        return new Error('Material-UI: The `css` prop is deprecated, please use the `sx` prop instead.');\n      }\n\n      return null;\n    }),\n    sx: PropTypes.object\n  }) : {};\n  newStyleFunction.filterProps = ['css', 'sx'].concat(_toConsumableArray(styleFunction.filterProps));\n  return newStyleFunction;\n}\n/**\r\n *\r\n * @deprecated\r\n * The css style function is deprecated. Use the `styleFunctionSx` instead.\r\n */\n\n\nexport function css(styleFunction) {\n  if (process.env.NODE_ENV !== 'production') {\n    console.warn('Material-UI: The `css` function is deprecated. Use the `styleFunctionSx` instead.');\n  }\n\n  return styleFunctionSx(styleFunction);\n}\nexport default styleFunctionSx;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport merge from './merge';\n\nfunction compose() {\n  for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n    styles[_key] = arguments[_key];\n  }\n\n  var fn = function fn(props) {\n    return styles.reduce(function (acc, style) {\n      var output = style(props);\n\n      if (output) {\n        return merge(acc, output);\n      }\n\n      return acc;\n    }, {});\n  }; // Alternative approach that doesn't yield any performance gain.\n  // const handlers = styles.reduce((acc, style) => {\n  //   style.filterProps.forEach(prop => {\n  //     acc[prop] = style;\n  //   });\n  //   return acc;\n  // }, {});\n  // const fn = props => {\n  //   return Object.keys(props).reduce((acc, prop) => {\n  //     if (handlers[prop]) {\n  //       return merge(acc, handlers[prop](props));\n  //     }\n  //     return acc;\n  //   }, {});\n  // };\n\n\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce(function (acc, style) {\n    return _extends(acc, style.propTypes);\n  }, {}) : {};\n  fn.filterProps = styles.reduce(function (acc, style) {\n    return acc.concat(style.filterProps);\n  }, []);\n  return fn;\n}\n\nexport default compose;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport PropTypes from 'prop-types';\nimport merge from './merge'; // The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\n\nvar values = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920\n};\nvar defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: function up(key) {\n    return \"@media (min-width:\".concat(values[key], \"px)\");\n  }\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!props.theme) {\n      console.error('Material-UI: You are calling a style function without a theme value.');\n    }\n  }\n\n  if (Array.isArray(propValue)) {\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce(function (acc, item, index) {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n\n  if (_typeof(propValue) === 'object') {\n    var _themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n\n    return Object.keys(propValue).reduce(function (acc, breakpoint) {\n      acc[_themeBreakpoints.up(breakpoint)] = styleFromPropValue(propValue[breakpoint]);\n      return acc;\n    }, {});\n  }\n\n  var output = styleFromPropValue(propValue);\n  return output;\n}\n\nfunction breakpoints(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var base = styleFunction(props);\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    var extended = themeBreakpoints.keys.reduce(function (acc, key) {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction(_extends({\n          theme: props.theme\n        }, props[key]));\n      }\n\n      return acc;\n    }, null);\n    return merge(base, extended);\n  };\n\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n    xs: PropTypes.object,\n    sm: PropTypes.object,\n    md: PropTypes.object,\n    lg: PropTypes.object,\n    xl: PropTypes.object\n  }) : {};\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl'].concat(_toConsumableArray(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\nexport default breakpoints;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\n\nfunction getPath(obj, path) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  return path.split('.').reduce(function (acc, item) {\n    return acc && acc[item] ? acc[item] : null;\n  }, obj);\n}\n\nfunction style(options) {\n  var prop = options.prop,\n      _options$cssProperty = options.cssProperty,\n      cssProperty = _options$cssProperty === void 0 ? options.prop : _options$cssProperty,\n      themeKey = options.themeKey,\n      transform = options.transform;\n\n  var fn = function fn(props) {\n    if (props[prop] == null) {\n      return null;\n    }\n\n    var propValue = props[prop];\n    var theme = props.theme;\n    var themeMapping = getPath(theme, themeKey) || {};\n\n    var styleFromPropValue = function styleFromPropValue(propValueFinal) {\n      var value;\n\n      if (typeof themeMapping === 'function') {\n        value = themeMapping(propValueFinal);\n      } else if (Array.isArray(themeMapping)) {\n        value = themeMapping[propValueFinal] || propValueFinal;\n      } else {\n        value = getPath(themeMapping, propValueFinal) || propValueFinal;\n\n        if (transform) {\n          value = transform(value);\n        }\n      }\n\n      if (cssProperty === false) {\n        return value;\n      }\n\n      return _defineProperty({}, cssProperty, value);\n    };\n\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  };\n\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? _defineProperty({}, prop, responsivePropType) : {};\n  fn.filterProps = [prop];\n  return fn;\n}\n\nexport default style;","import style from './style';\nimport compose from './compose';\n\nfunction getBorder(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n\n  return \"\".concat(value, \"px solid\");\n}\n\nexport var border = style({\n  prop: 'border',\n  themeKey: 'borders',\n  transform: getBorder\n});\nexport var borderTop = style({\n  prop: 'borderTop',\n  themeKey: 'borders',\n  transform: getBorder\n});\nexport var borderRight = style({\n  prop: 'borderRight',\n  themeKey: 'borders',\n  transform: getBorder\n});\nexport var borderBottom = style({\n  prop: 'borderBottom',\n  themeKey: 'borders',\n  transform: getBorder\n});\nexport var borderLeft = style({\n  prop: 'borderLeft',\n  themeKey: 'borders',\n  transform: getBorder\n});\nexport var borderColor = style({\n  prop: 'borderColor',\n  themeKey: 'palette'\n});\nexport var borderRadius = style({\n  prop: 'borderRadius',\n  themeKey: 'shape'\n});\nvar borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderRadius);\nexport default borders;","import style from './style';\nimport compose from './compose';\nexport var displayPrint = style({\n  prop: 'displayPrint',\n  cssProperty: false,\n  transform: function transform(value) {\n    return {\n      '@media print': {\n        display: value\n      }\n    };\n  }\n});\nexport var displayRaw = style({\n  prop: 'display'\n});\nexport var overflow = style({\n  prop: 'overflow'\n});\nexport var textOverflow = style({\n  prop: 'textOverflow'\n});\nexport var visibility = style({\n  prop: 'visibility'\n});\nexport var whiteSpace = style({\n  prop: 'whiteSpace'\n});\nexport default compose(displayPrint, displayRaw, overflow, textOverflow, visibility, whiteSpace);","import style from './style';\nimport compose from './compose';\nexport var flexBasis = style({\n  prop: 'flexBasis'\n});\nexport var flexDirection = style({\n  prop: 'flexDirection'\n});\nexport var flexWrap = style({\n  prop: 'flexWrap'\n});\nexport var justifyContent = style({\n  prop: 'justifyContent'\n});\nexport var alignItems = style({\n  prop: 'alignItems'\n});\nexport var alignContent = style({\n  prop: 'alignContent'\n});\nexport var order = style({\n  prop: 'order'\n});\nexport var flex = style({\n  prop: 'flex'\n});\nexport var flexGrow = style({\n  prop: 'flexGrow'\n});\nexport var flexShrink = style({\n  prop: 'flexShrink'\n});\nexport var alignSelf = style({\n  prop: 'alignSelf'\n});\nexport var justifyItems = style({\n  prop: 'justifyItems'\n});\nexport var justifySelf = style({\n  prop: 'justifySelf'\n});\nvar flexbox = compose(flexBasis, flexDirection, flexWrap, justifyContent, alignItems, alignContent, order, flex, flexGrow, flexShrink, alignSelf, justifyItems, justifySelf);\nexport default flexbox;","import style from './style';\nimport compose from './compose';\nexport var position = style({\n  prop: 'position'\n});\nexport var zIndex = style({\n  prop: 'zIndex',\n  themeKey: 'zIndex'\n});\nexport var top = style({\n  prop: 'top'\n});\nexport var right = style({\n  prop: 'right'\n});\nexport var bottom = style({\n  prop: 'bottom'\n});\nexport var left = style({\n  prop: 'left'\n});\nexport default compose(position, zIndex, top, right, bottom, left);","import style from './style';\nimport compose from './compose';\nexport var color = style({\n  prop: 'color',\n  themeKey: 'palette'\n});\nexport var bgcolor = style({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette'\n});\nvar palette = compose(color, bgcolor);\nexport default palette;","import style from './style';\nvar boxShadow = style({\n  prop: 'boxShadow',\n  themeKey: 'shadows'\n});\nexport default boxShadow;","import style from './style';\nimport compose from './compose';\n\nfunction transform(value) {\n  return value <= 1 ? \"\".concat(value * 100, \"%\") : value;\n}\n\nexport var width = style({\n  prop: 'width',\n  transform: transform\n});\nexport var maxWidth = style({\n  prop: 'maxWidth',\n  transform: transform\n});\nexport var minWidth = style({\n  prop: 'minWidth',\n  transform: transform\n});\nexport var height = style({\n  prop: 'height',\n  transform: transform\n});\nexport var maxHeight = style({\n  prop: 'maxHeight',\n  transform: transform\n});\nexport var minHeight = style({\n  prop: 'minHeight',\n  transform: transform\n});\nexport var sizeWidth = style({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: transform\n});\nexport var sizeHeight = style({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: transform\n});\nexport var boxSizing = style({\n  prop: 'boxSizing'\n});\nvar sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nimport merge from './merge';\nimport memoize from './memoize';\nvar properties = {\n  m: 'margin',\n  p: 'padding'\n};\nvar directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nvar aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n}; // memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\n\nvar getCssProperties = memoize(function (prop) {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n\n  var _prop$split = prop.split(''),\n      _prop$split2 = _slicedToArray(_prop$split, 2),\n      a = _prop$split2[0],\n      b = _prop$split2[1];\n\n  var property = properties[a];\n  var direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(function (dir) {\n    return property + dir;\n  }) : [property + direction];\n});\nvar spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY'];\nexport function createUnarySpacing(theme) {\n  var themeSpacing = theme.spacing || 8;\n\n  if (typeof themeSpacing === 'number') {\n    return function (abs) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof abs !== 'number') {\n          console.error(\"Material-UI: Expected spacing argument to be a number, got \".concat(abs, \".\"));\n        }\n      }\n\n      return themeSpacing * abs;\n    };\n  }\n\n  if (Array.isArray(themeSpacing)) {\n    return function (abs) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (abs > themeSpacing.length - 1) {\n          console.error([\"Material-UI: The value provided (\".concat(abs, \") overflows.\"), \"The supported values are: \".concat(JSON.stringify(themeSpacing), \".\"), \"\".concat(abs, \" > \").concat(themeSpacing.length - 1, \", you need to add the missing values.\")].join('\\n'));\n        }\n      }\n\n      return themeSpacing[abs];\n    };\n  }\n\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    console.error([\"Material-UI: The `theme.spacing` value (\".concat(themeSpacing, \") is invalid.\"), 'It should be a number, an array or a function.'].join('\\n'));\n  }\n\n  return function () {\n    return undefined;\n  };\n}\n\nfunction getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n\n  var abs = Math.abs(propValue);\n  var transformed = transformer(abs);\n\n  if (propValue >= 0) {\n    return transformed;\n  }\n\n  if (typeof transformed === 'number') {\n    return -transformed;\n  }\n\n  return \"-\".concat(transformed);\n}\n\nfunction getStyleFromPropValue(cssProperties, transformer) {\n  return function (propValue) {\n    return cssProperties.reduce(function (acc, cssProperty) {\n      acc[cssProperty] = getValue(transformer, propValue);\n      return acc;\n    }, {});\n  };\n}\n\nfunction spacing(props) {\n  var theme = props.theme;\n  var transformer = createUnarySpacing(theme);\n  return Object.keys(props).map(function (prop) {\n    // Using a hash computation over an array iteration could be faster, but with only 28 items,\n    // it's doesn't worth the bundle size.\n    if (spacingKeys.indexOf(prop) === -1) {\n      return null;\n    }\n\n    var cssProperties = getCssProperties(prop);\n    var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n    var propValue = props[prop];\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  }).reduce(merge, {});\n}\n\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce(function (obj, key) {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n\n    return cache[arg];\n  };\n}","import style from './style';\nimport compose from './compose';\nexport var fontFamily = style({\n  prop: 'fontFamily',\n  themeKey: 'typography'\n});\nexport var fontSize = style({\n  prop: 'fontSize',\n  themeKey: 'typography'\n});\nexport var fontStyle = style({\n  prop: 'fontStyle',\n  themeKey: 'typography'\n});\nexport var fontWeight = style({\n  prop: 'fontWeight',\n  themeKey: 'typography'\n});\nexport var letterSpacing = style({\n  prop: 'letterSpacing'\n});\nexport var lineHeight = style({\n  prop: 'lineHeight'\n});\nexport var textAlign = style({\n  prop: 'textAlign'\n});\nvar typography = compose(fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign);\nexport default typography;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { styled as styledWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\n\nvar styled = function styled(Component) {\n  var componentCreator = styledWithoutDefault(Component);\n  return function (style, options) {\n    return componentCreator(style, _extends({\n      defaultTheme: defaultTheme\n    }, options));\n  };\n};\n\nexport default styled;","import { borders, compose, display, flexbox, palette, positions, shadows, sizing, spacing, typography, css } from '@material-ui/system';\nimport styled from '../styles/styled';\nexport var styleFunction = css(compose(borders, display, flexbox, positions, palette, shadows, sizing, spacing, typography));\n/**\n * @ignore - do not document.\n */\n\nvar Box = styled('div')(styleFunction, {\n  name: 'MuiBox'\n});\nexport default Box;","/** Use it instead of .includes method for IE support */\nexport function arrayIncludes<T>(array: T[], itemOrItems: T | T[]) {\n  if (Array.isArray(itemOrItems)) {\n    return itemOrItems.every(item => array.indexOf(item) !== -1);\n  }\n\n  return array.indexOf(itemOrItems) !== -1;\n}\n\nexport type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;\n","import * as React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { DIALOG_WIDTH } from '../constants/dimensions';\n\nconst useStyles = makeStyles(\n  theme => ({\n    staticWrapperRoot: {\n      overflow: 'hidden',\n      minWidth: DIALOG_WIDTH,\n      display: 'flex',\n      flexDirection: 'column',\n      backgroundColor: theme.palette.background.paper,\n    },\n  }),\n  { name: 'MuiPickersStaticWrapper' }\n);\n\nexport const StaticWrapper: React.FC = ({ children }) => {\n  const classes = useStyles();\n\n  return <div className={classes.staticWrapperRoot} children={children} />;\n};\n","export const DIALOG_WIDTH = 310;\n\nexport const DIALOG_WIDTH_WIDER = 325;\n\nexport const VIEW_HEIGHT = 305;\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Dialog, { DialogProps } from '@material-ui/core/Dialog';\nimport { DIALOG_WIDTH, DIALOG_WIDTH_WIDER } from '../constants/dimensions';\nimport { createStyles, WithStyles, withStyles } from '@material-ui/core/styles';\n\nexport interface ModalDialogProps extends DialogProps {\n  onAccept: () => void;\n  onDismiss: () => void;\n  onClear: () => void;\n  onSetToday: () => void;\n  okLabel?: React.ReactNode;\n  cancelLabel?: React.ReactNode;\n  clearLabel?: React.ReactNode;\n  todayLabel?: React.ReactNode;\n  clearable?: boolean;\n  showTodayButton?: boolean;\n  showTabs?: boolean;\n  wider?: boolean;\n}\n\nexport const ModalDialog: React.SFC<ModalDialogProps & WithStyles<typeof styles>> = ({\n  children,\n  classes,\n  onAccept,\n  onDismiss,\n  onClear,\n  onSetToday,\n  okLabel,\n  cancelLabel,\n  clearLabel,\n  todayLabel,\n  clearable,\n  showTodayButton,\n  showTabs,\n  wider,\n  ...other\n}) => (\n  <Dialog\n    role=\"dialog\"\n    onClose={onDismiss}\n    classes={{\n      paper: clsx(classes.dialogRoot, {\n        [classes.dialogRootWider]: wider,\n      }),\n    }}\n    {...other}\n  >\n    <DialogContent children={children} className={classes.dialog} />\n\n    <DialogActions\n      classes={{\n        root: clsx({\n          [classes.withAdditionalAction]: clearable || showTodayButton,\n        }),\n      }}\n    >\n      {clearable && (\n        <Button color=\"primary\" onClick={onClear}>\n          {clearLabel}\n        </Button>\n      )}\n\n      {showTodayButton && (\n        <Button color=\"primary\" onClick={onSetToday}>\n          {todayLabel}\n        </Button>\n      )}\n\n      {cancelLabel && (\n        <Button color=\"primary\" onClick={onDismiss}>\n          {cancelLabel}\n        </Button>\n      )}\n\n      {okLabel && (\n        <Button color=\"primary\" onClick={onAccept}>\n          {okLabel}\n        </Button>\n      )}\n    </DialogActions>\n  </Dialog>\n);\n\nModalDialog.displayName = 'ModalDialog';\n\nexport const styles = createStyles({\n  dialogRoot: {\n    minWidth: DIALOG_WIDTH,\n  },\n  dialogRootWider: {\n    minWidth: DIALOG_WIDTH_WIDER,\n  },\n  dialog: {\n    '&:first-child': {\n      padding: 0,\n    },\n  },\n  withAdditionalAction: {\n    // set justifyContent to default value to fix IE11 layout bug\n    // see https://github.com/dmtrKovalenko/material-ui-pickers/pull/267\n    justifyContent: 'flex-start',\n\n    '& > *:first-child': {\n      marginRight: 'auto',\n    },\n  },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersModal' })(ModalDialog);\n","import * as React from 'react';\n\nexport const useIsomorphicEffect =\n  typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n\ntype KeyHandlers = Record<KeyboardEvent['key'], () => void>;\n\nexport function runKeyHandler(e: KeyboardEvent, keyHandlers: KeyHandlers) {\n  const handler = keyHandlers[e.key];\n  if (handler) {\n    handler();\n    // if event was handled prevent other side effects (e.g. page scroll)\n    e.preventDefault();\n  }\n}\n\nexport function useKeyDown(active: boolean, keyHandlers: KeyHandlers) {\n  const keyHandlersRef = React.useRef(keyHandlers);\n  keyHandlersRef.current = keyHandlers;\n\n  useIsomorphicEffect(() => {\n    if (active) {\n      const handleKeyDown = (event: KeyboardEvent) => {\n        runKeyHandler(event, keyHandlersRef.current);\n      };\n      window.addEventListener('keydown', handleKeyDown);\n      return () => {\n        window.removeEventListener('keydown', handleKeyDown);\n      };\n    }\n  }, [active]);\n}\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport ModalDialog from '../_shared/ModalDialog';\nimport { WrapperProps } from './Wrapper';\nimport { Omit } from '../_helpers/utils';\nimport { useKeyDown } from '../_shared/hooks/useKeyDown';\nimport { DialogProps as MuiDialogProps } from '@material-ui/core/Dialog';\n\nexport interface ModalWrapperProps<T = {}> extends WrapperProps<T> {\n  /**\n   * \"OK\" label message\n   * @default \"OK\"\n   */\n  okLabel?: React.ReactNode;\n  /**\n   * \"CANCEL\" label message\n   * @default \"CANCEL\"\n   */\n  cancelLabel?: React.ReactNode;\n  /**\n   * \"CLEAR\" label message\n   * @default \"CLEAR\"\n   */\n  clearLabel?: React.ReactNode;\n  /**\n   * \"TODAY\" label message\n   * @default \"TODAY\"\n   */\n  todayLabel?: React.ReactNode;\n  /**\n   * If true today button will be displayed <b>Note*</b> that clear button has higher priority\n   * @default false\n   */\n  showTodayButton?: boolean;\n  /**\n   * Show clear action in picker dialog\n   * @default false\n   */\n  clearable?: boolean;\n  /**\n   * Props to be passed directly to material-ui Dialog\n   * @type {Partial<MuiDialogProps>}\n   */\n  DialogProps?: Partial<Omit<MuiDialogProps, 'classes'>>;\n}\n\nexport const ModalWrapper: React.FC<ModalWrapperProps<any>> = ({\n  open,\n  children,\n  okLabel,\n  cancelLabel,\n  clearLabel,\n  todayLabel,\n  showTodayButton,\n  clearable,\n  DialogProps,\n  showTabs,\n  wider,\n  InputComponent,\n  DateInputProps,\n  onClear,\n  onAccept,\n  onDismiss,\n  onSetToday,\n  ...other\n}) => {\n  useKeyDown(open, {\n    Enter: onAccept,\n  });\n\n  return (\n    <React.Fragment>\n      <InputComponent {...other} {...DateInputProps} />\n\n      <ModalDialog\n        wider={wider}\n        showTabs={showTabs}\n        open={open}\n        onClear={onClear}\n        onAccept={onAccept}\n        onDismiss={onDismiss}\n        onSetToday={onSetToday}\n        clearLabel={clearLabel}\n        todayLabel={todayLabel}\n        okLabel={okLabel}\n        cancelLabel={cancelLabel}\n        clearable={clearable}\n        showTodayButton={showTodayButton}\n        children={children}\n        {...DialogProps}\n      />\n    </React.Fragment>\n  );\n};\n\nModalWrapper.propTypes = {\n  okLabel: PropTypes.node,\n  cancelLabel: PropTypes.node,\n  clearLabel: PropTypes.node,\n  clearable: PropTypes.bool,\n  todayLabel: PropTypes.node,\n  showTodayButton: PropTypes.bool,\n  DialogProps: PropTypes.object,\n} as any;\n\nModalWrapper.defaultProps = {\n  okLabel: 'OK',\n  cancelLabel: 'Cancel',\n  clearLabel: 'Clear',\n  todayLabel: 'Today',\n  clearable: false,\n  showTodayButton: false,\n};\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport Popover, { PopoverProps as PopoverPropsType } from '@material-ui/core/Popover';\nimport { WrapperProps } from './Wrapper';\nimport { useKeyDown } from '../_shared/hooks/useKeyDown';\nimport { TextFieldProps } from '@material-ui/core/TextField';\n\nexport interface InlineWrapperProps<T = TextFieldProps> extends WrapperProps<T> {\n  /** Popover props passed to material-ui Popover (with variant=\"inline\") */\n  PopoverProps?: Partial<PopoverPropsType>;\n}\n\nexport const InlineWrapper: React.FC<InlineWrapperProps> = ({\n  open,\n  wider,\n  children,\n  PopoverProps,\n  onClear,\n  onDismiss,\n  onSetToday,\n  onAccept,\n  showTabs,\n  DateInputProps,\n  InputComponent,\n  ...other\n}) => {\n  const ref = React.useRef();\n\n  useKeyDown(open, {\n    Enter: onAccept,\n  });\n\n  return (\n    <React.Fragment>\n      <InputComponent {...other} {...DateInputProps} inputRef={ref} />\n\n      <Popover\n        open={open}\n        onClose={onDismiss}\n        anchorEl={ref.current}\n        anchorOrigin={{\n          vertical: 'bottom',\n          horizontal: 'center',\n        }}\n        transformOrigin={{\n          vertical: 'top',\n          horizontal: 'center',\n        }}\n        children={children}\n        {...PopoverProps}\n      />\n    </React.Fragment>\n  );\n};\n\nInlineWrapper.propTypes = {\n  onOpen: PropTypes.func,\n  onClose: PropTypes.func,\n  PopoverProps: PropTypes.object,\n} as any;\n","import * as React from 'react';\nimport { Omit } from '../_helpers/utils';\nimport { StaticWrapper } from './StaticWrapper';\nimport { ModalWrapper, ModalWrapperProps } from './ModalWrapper';\nimport { InlineWrapper, InlineWrapperProps } from './InlineWrapper';\nimport { KeyboardDateInputProps } from '../_shared/KeyboardDateInput';\nimport { PureDateInputProps, NotOverridableProps } from '../_shared/PureDateInput';\n\nexport type WrapperVariant = 'dialog' | 'inline' | 'static';\n\nexport interface WrapperProps<T> {\n  open: boolean;\n  onAccept: () => void;\n  onDismiss: () => void;\n  onClear: () => void;\n  onSetToday: () => void;\n  InputComponent: React.FC<T>;\n  DateInputProps: T;\n  wider?: boolean;\n  showTabs?: boolean;\n}\n\ntype OmitInnerWrapperProps<T extends WrapperProps<any>> = Omit<\n  T,\n  keyof WrapperProps<any> | 'showTabs'\n>;\n\nexport type ModalRoot = OmitInnerWrapperProps<ModalWrapperProps>;\n\nexport type InlineRoot = OmitInnerWrapperProps<InlineWrapperProps>;\n\n// prettier-ignore\nexport type ExtendWrapper<TInput extends PureDateInputProps | KeyboardDateInputProps> = {\n  /**\n   * Picker container option\n   * @default 'dialog'\n   */\n  variant?: WrapperVariant\n} & ModalRoot\n  & InlineRoot\n  & Omit<TInput, NotOverridableProps>\n\nexport function getWrapperFromVariant<T>(\n  variant?: WrapperVariant\n): React.ComponentType<InlineWrapperProps<T> | ModalWrapperProps<T>> {\n  switch (variant) {\n    case 'inline':\n      return InlineWrapper as any;\n\n    case 'static':\n      return StaticWrapper as any;\n\n    default:\n      return ModalWrapper as any;\n  }\n}\n\ntype Props<T> = {\n  variant?: WrapperVariant;\n  children?: React.ReactChild;\n} & (ModalWrapperProps<T> | InlineWrapperProps<T>);\n\nexport const VariantContext = React.createContext<WrapperVariant | null>(null);\n\nexport const Wrapper: <T extends KeyboardDateInputProps | PureDateInputProps>(\n  p: Props<T>\n) => React.ReactElement<Props<T>> = ({ variant, ...props }) => {\n  const Component = getWrapperFromVariant<typeof props.DateInputProps>(variant);\n\n  return (\n    <VariantContext.Provider value={variant || 'dialog'}>\n      <Component {...props} />\n    </VariantContext.Provider>\n  );\n};\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { Component } from 'react';\n\nvar Rifm =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Rifm, _React$Component);\n\n  function Rifm(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this._state = null;\n    _this._del = false;\n\n    _this._handleChange = function (evt) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (evt.target.type === 'number') {\n          console.error('Rifm does not support input type=number, use type=tel instead.');\n          return;\n        }\n      } // FUTURE: use evt.nativeEvent.inputType for del event, see comments at onkeydown\n\n\n      var stateValue = _this.state.value;\n      var value = evt.target.value;\n      var input = evt.target;\n      var op = value.length > stateValue.length;\n      var del = _this._del;\n\n      var noOp = stateValue === _this.props.format(value);\n\n      _this.setState({\n        value: value,\n        local: true\n      }, function () {\n        var selectionStart = input.selectionStart;\n        var refuse = _this.props.refuse || /[^\\d]+/g;\n        var before = value.substr(0, selectionStart).replace(refuse, '');\n        _this._state = {\n          input: input,\n          before: before,\n          op: op,\n          di: del && noOp,\n          del: del\n        };\n\n        if (_this.props.replace && _this.props.replace(stateValue) && op && !noOp) {\n          var start = -1;\n\n          for (var i = 0; i !== before.length; ++i) {\n            start = Math.max(start, value.toLowerCase().indexOf(before[i].toLowerCase(), start + 1));\n          }\n\n          var c = value.substr(start + 1).replace(refuse, '')[0];\n          start = value.indexOf(c, start + 1);\n          value = \"\" + value.substr(0, start) + value.substr(start + 1);\n        }\n\n        var fv = _this.props.format(value);\n\n        if (stateValue === fv) {\n          _this.setState({\n            value: value\n          });\n        } else {\n          _this.props.onChange(fv);\n        }\n      });\n    };\n\n    _this._hKD = function (evt) {\n      if (evt.code === 'Delete') {\n        _this._del = true;\n      }\n    };\n\n    _this._hKU = function (evt) {\n      if (evt.code === 'Delete') {\n        _this._del = false;\n      }\n    };\n\n    _this.state = {\n      value: props.value,\n      local: true\n    };\n    return _this;\n  }\n\n  Rifm.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    return {\n      value: state.local ? state.value : props.value,\n      local: false\n    };\n  };\n\n  var _proto = Rifm.prototype;\n\n  _proto.render = function render() {\n    var _handleChange = this._handleChange,\n        value = this.state.value,\n        children = this.props.children;\n    return children({\n      value: value,\n      onChange: _handleChange\n    });\n  } // delete when  https://developer.mozilla.org/en-US/docs/Web/API/InputEvent/inputType will be supported by all major browsers\n  ;\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    document.removeEventListener('keydown', this._hKD);\n    document.removeEventListener('keyup', this._hKU);\n  } // delete when  https://developer.mozilla.org/en-US/docs/Web/API/InputEvent/inputType will be supported by all major browsers\n  ;\n\n  _proto.componentDidMount = function componentDidMount() {\n    document.addEventListener('keydown', this._hKD);\n    document.addEventListener('keyup', this._hKU);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate() {\n    var _state = this._state;\n\n    if (_state) {\n      var value = this.state.value;\n      var start = -1;\n\n      for (var i = 0; i !== _state.before.length; ++i) {\n        start = Math.max(start, value.toLowerCase().indexOf(_state.before[i].toLowerCase(), start + 1));\n      } // format usually looks better without this\n\n\n      if (this.props.replace && (_state.op || _state.del && !_state.di)) {\n        while (value[start + 1] && (this.props.refuse || /[^\\d]+/).test(value[start + 1])) {\n          start += 1;\n        }\n      }\n\n      _state.input.selectionStart = _state.input.selectionEnd = start + 1 + (_state.di ? 1 : 0);\n    }\n\n    this._state = null;\n  };\n\n  return Rifm;\n}(Component);\n\nexport { Rifm };\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport IconButton from '@material-ui/core/IconButton';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(\n  theme => ({\n    day: {\n      width: 36,\n      height: 36,\n      fontSize: theme.typography.caption.fontSize,\n      margin: '0 2px',\n      color: theme.palette.text.primary,\n      fontWeight: theme.typography.fontWeightMedium,\n      padding: 0,\n    },\n    hidden: {\n      opacity: 0,\n      pointerEvents: 'none',\n    },\n    current: {\n      color: theme.palette.primary.main,\n      fontWeight: 600,\n    },\n    daySelected: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      fontWeight: theme.typography.fontWeightMedium,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.main,\n      },\n    },\n    dayDisabled: {\n      pointerEvents: 'none',\n      color: theme.palette.text.hint,\n    },\n  }),\n  { name: 'MuiPickersDay' }\n);\n\nexport interface DayProps {\n  /** Day text */\n  children: React.ReactNode;\n  /** Is today */\n  current?: boolean;\n  /** Disabled? */\n  disabled?: boolean;\n  /** Hidden? */\n  hidden?: boolean;\n  /** Selected? */\n  selected?: boolean;\n}\n\nexport const Day: React.FC<DayProps> = ({\n  children,\n  disabled,\n  hidden,\n  current,\n  selected,\n  ...other\n}) => {\n  const classes = useStyles();\n\n  const className = clsx(classes.day, {\n    [classes.hidden]: hidden,\n    [classes.current]: current,\n    [classes.daySelected]: selected,\n    [classes.dayDisabled]: disabled,\n  });\n\n  return (\n    <IconButton className={className} tabIndex={hidden || disabled ? -1 : 0} {...other}>\n      <Typography variant=\"body2\" color=\"inherit\">\n        {children}\n      </Typography>\n    </IconButton>\n  );\n};\n\nDay.displayName = 'Day';\n\nDay.propTypes = {\n  current: PropTypes.bool,\n  disabled: PropTypes.bool,\n  hidden: PropTypes.bool,\n  selected: PropTypes.bool,\n};\n\nDay.defaultProps = {\n  disabled: false,\n  hidden: false,\n  current: false,\n  selected: false,\n};\n\nexport default Day;\n","function replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n  if (element.classList) {\n    element.classList.remove(className);\n  } else if (typeof element.className === 'string') {\n    element.className = replaceClassName(element.className, className);\n  } else {\n    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n  }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\n\nvar _addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return addOneClass(node, c);\n  });\n};\n\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return removeOneClass(node, c);\n  });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n *         <div>\n *           {\"I'll receive my-node-* classes\"}\n *         </div>\n *       </CSSTransition>\n *       <button type=\"button\" onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n *   opacity: 0;\n * }\n * .my-node-enter-active {\n *   opacity: 1;\n *   transition: opacity 200ms;\n * }\n * .my-node-exit {\n *   opacity: 1;\n * }\n * .my-node-exit-active {\n *   opacity: 0;\n *   transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.appliedClasses = {\n      appear: {},\n      enter: {},\n      exit: {}\n    };\n\n    _this.onEnter = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument[0],\n          appearing = _this$resolveArgument[1];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntering = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument2[0],\n          appearing = _this$resolveArgument2[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.addClass(node, type, 'active');\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntered = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument3[0],\n          appearing = _this$resolveArgument3[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.removeClasses(node, type);\n\n      _this.addClass(node, type, 'done');\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onExit = function (maybeNode) {\n      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument4[0];\n\n      _this.removeClasses(node, 'appear');\n\n      _this.removeClasses(node, 'enter');\n\n      _this.addClass(node, 'exit', 'base');\n\n      if (_this.props.onExit) {\n        _this.props.onExit(maybeNode);\n      }\n    };\n\n    _this.onExiting = function (maybeNode) {\n      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument5[0];\n\n      _this.addClass(node, 'exit', 'active');\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(maybeNode);\n      }\n    };\n\n    _this.onExited = function (maybeNode) {\n      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument6[0];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, 'exit', 'done');\n\n      if (_this.props.onExited) {\n        _this.props.onExited(maybeNode);\n      }\n    };\n\n    _this.resolveArguments = function (maybeNode, maybeAppearing) {\n      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n      : [maybeNode, maybeAppearing];\n    };\n\n    _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n      var isStringClassNames = typeof classNames === 'string';\n      var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n      var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n      var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n      var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n      return {\n        baseClassName: baseClassName,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    };\n\n    return _this;\n  }\n\n  var _proto = CSSTransition.prototype;\n\n  _proto.addClass = function addClass(node, type, phase) {\n    var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n    var _this$getClassNames = this.getClassNames('enter'),\n        doneClassName = _this$getClassNames.doneClassName;\n\n    if (type === 'appear' && phase === 'done' && doneClassName) {\n      className += \" \" + doneClassName;\n    } // This is to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n\n\n    if (phase === 'active') {\n      /* eslint-disable no-unused-expressions */\n      node && node.scrollTop;\n    }\n\n    if (className) {\n      this.appliedClasses[type][phase] = className;\n\n      _addClass(node, className);\n    }\n  };\n\n  _proto.removeClasses = function removeClasses(node, type) {\n    var _this$appliedClasses$ = this.appliedClasses[type],\n        baseClassName = _this$appliedClasses$.base,\n        activeClassName = _this$appliedClasses$.active,\n        doneClassName = _this$appliedClasses$.done;\n    this.appliedClasses[type] = {};\n\n    if (baseClassName) {\n      removeClass(node, baseClassName);\n    }\n\n    if (activeClassName) {\n      removeClass(node, activeClassName);\n    }\n\n    if (doneClassName) {\n      removeClass(node, doneClassName);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _ = _this$props.classNames,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n    return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n  classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n  /**\n   * The animation classNames applied to the component as it appears, enters,\n   * exits or has finished the transition. A single name can be provided, which\n   * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n   *\n   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n   *\n   * A few details to note about how these classes are applied:\n   *\n   * 1. They are _joined_ with the ones that are already defined on the child\n   *    component, so if you want to add some base styles, you can use\n   *    `className` without worrying that it will be overridden.\n   *\n   * 2. If the transition component mounts with `in={false}`, no classes are\n   *    applied yet. You might be expecting `*-exit-done`, but if you think\n   *    about it, a component cannot finish exiting if it hasn't entered yet.\n   *\n   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n   *    allows you to define different behavior for when appearing is done and\n   *    when regular entering is done, using selectors like\n   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n   *    an epic entrance animation when element first appears in the DOM using\n   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n   *    simply use `fade-enter-done` for defining both cases.\n   *\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  appearDone: 'my-done-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply\n   * spread them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  appearDone?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: classNamesShape,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import { arrayIncludes } from './utils';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from '../typings/date';\nimport { DatePickerView } from '../DatePicker/DatePicker';\n\ninterface FindClosestDateParams {\n  date: MaterialUiPickersDate;\n  utils: IUtils<MaterialUiPickersDate>;\n  minDate: MaterialUiPickersDate;\n  maxDate: MaterialUiPickersDate;\n  disableFuture: boolean;\n  disablePast: boolean;\n  shouldDisableDate: (date: MaterialUiPickersDate) => boolean;\n}\n\nexport const findClosestEnabledDate = ({\n  date,\n  utils,\n  minDate,\n  maxDate,\n  disableFuture,\n  disablePast,\n  shouldDisableDate,\n}: FindClosestDateParams) => {\n  const today = utils.startOfDay(utils.date());\n\n  if (disablePast && utils.isBefore(minDate!, today)) {\n    minDate = today;\n  }\n\n  if (disableFuture && utils.isAfter(maxDate, today)) {\n    maxDate = today;\n  }\n\n  let forward = date;\n  let backward = date;\n  if (utils.isBefore(date, minDate)) {\n    forward = utils.date(minDate);\n    backward = null;\n  }\n\n  if (utils.isAfter(date, maxDate)) {\n    if (backward) {\n      backward = utils.date(maxDate);\n    }\n\n    forward = null;\n  }\n\n  while (forward || backward) {\n    if (forward && utils.isAfter(forward, maxDate)) {\n      forward = null;\n    }\n    if (backward && utils.isBefore(backward, minDate)) {\n      backward = null;\n    }\n\n    if (forward) {\n      if (!shouldDisableDate(forward)) {\n        return forward;\n      }\n      forward = utils.addDays(forward, 1);\n    }\n\n    if (backward) {\n      if (!shouldDisableDate(backward)) {\n        return backward;\n      }\n      backward = utils.addDays(backward, -1);\n    }\n  }\n\n  // fallback to today if no enabled days\n  return utils.date();\n};\n\nexport const isYearOnlyView = (views: DatePickerView[]) =>\n  views.length === 1 && views[0] === 'year';\n\nexport const isYearAndMonthViews = (views: DatePickerView[]) =>\n  views.length === 2 && arrayIncludes(views, 'month') && arrayIncludes(views, 'year');\n\nexport const getFormatByViews = (views: DatePickerView[], utils: IUtils<MaterialUiPickersDate>) => {\n  if (isYearOnlyView(views)) {\n    return utils.yearFormat;\n  }\n\n  if (isYearAndMonthViews(views)) {\n    return utils.yearMonthFormat;\n  }\n\n  return utils.dateFormat;\n};\n","import * as React from 'react';\n\nexport interface DayWrapperProps {\n  value: any;\n  children: React.ReactNode;\n  dayInCurrentMonth?: boolean;\n  disabled?: boolean;\n  onSelect: (value: any) => void;\n}\n\nconst DayWrapper: React.FC<DayWrapperProps> = ({\n  children,\n  value,\n  disabled,\n  onSelect,\n  dayInCurrentMonth,\n  ...other\n}) => {\n  const handleClick = React.useCallback(() => onSelect(value), [onSelect, value]);\n\n  return (\n    <div\n      role=\"presentation\"\n      onClick={dayInCurrentMonth && !disabled ? handleClick : undefined}\n      onKeyPress={dayInCurrentMonth && !disabled ? handleClick : undefined}\n      {...other}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default DayWrapper;\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\n\nexport type SlideDirection = 'right' | 'left';\ninterface SlideTransitionProps {\n  transKey: React.Key;\n  className?: string;\n  slideDirection: SlideDirection;\n  children: React.ReactChild;\n}\n\nconst animationDuration = 350;\nexport const useStyles = makeStyles(\n  theme => {\n    const slideTransition = theme.transitions.create('transform', {\n      duration: animationDuration,\n      easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',\n    });\n\n    return {\n      transitionContainer: {\n        display: 'block',\n        position: 'relative',\n        '& > *': {\n          position: 'absolute',\n          top: 0,\n          right: 0,\n          left: 0,\n        },\n      },\n      'slideEnter-left': {\n        willChange: 'transform',\n        transform: 'translate(100%)',\n      },\n      'slideEnter-right': {\n        willChange: 'transform',\n        transform: 'translate(-100%)',\n      },\n      slideEnterActive: {\n        transform: 'translate(0%)',\n        transition: slideTransition,\n      },\n      slideExit: {\n        transform: 'translate(0%)',\n      },\n      'slideExitActiveLeft-left': {\n        willChange: 'transform',\n        transform: 'translate(-200%)',\n        transition: slideTransition,\n      },\n      'slideExitActiveLeft-right': {\n        willChange: 'transform',\n        transform: 'translate(200%)',\n        transition: slideTransition,\n      },\n    };\n  },\n  { name: 'MuiPickersSlideTransition' }\n);\n\nconst SlideTransition: React.SFC<SlideTransitionProps> = ({\n  children,\n  transKey,\n  slideDirection,\n  className = null,\n}) => {\n  const classes = useStyles();\n  const transitionClasses = {\n    exit: classes.slideExit,\n    enterActive: classes.slideEnterActive,\n    // @ts-ignore\n    enter: classes['slideEnter-' + slideDirection],\n    // @ts-ignore\n    exitActive: classes['slideExitActiveLeft-' + slideDirection],\n  };\n\n  return (\n    <TransitionGroup\n      className={clsx(classes.transitionContainer, className)}\n      childFactory={element =>\n        React.cloneElement(element, {\n          classNames: transitionClasses,\n        })\n      }\n    >\n      <CSSTransition\n        mountOnEnter\n        unmountOnExit\n        key={transKey + slideDirection}\n        timeout={animationDuration}\n        classNames={transitionClasses}\n        children={children}\n      />\n    </TransitionGroup>\n  );\n};\n\nexport default SlideTransition;\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport SlideTransition, { SlideDirection } from './SlideTransition';\nimport IconButton, { IconButtonProps } from '@material-ui/core/IconButton';\nimport { DateType } from '@date-io/type';\nimport { useUtils } from '../../_shared/hooks/useUtils';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport { ArrowLeftIcon } from '../../_shared/icons/ArrowLeftIcon';\nimport { ArrowRightIcon } from '../../_shared/icons/ArrowRightIcon';\n\nexport interface CalendarHeaderProps {\n  currentMonth: DateType;\n  leftArrowIcon?: React.ReactNode;\n  rightArrowIcon?: React.ReactNode;\n  leftArrowButtonProps?: Partial<IconButtonProps>;\n  rightArrowButtonProps?: Partial<IconButtonProps>;\n  disablePrevMonth?: boolean;\n  disableNextMonth?: boolean;\n  slideDirection: SlideDirection;\n  onMonthChange: (date: MaterialUiPickersDate, direction: SlideDirection) => void | Promise<void>;\n}\n\nexport const useStyles = makeStyles(\n  theme => ({\n    switchHeader: {\n      display: 'flex',\n      justifyContent: 'space-between',\n      alignItems: 'center',\n      marginTop: theme.spacing(0.5),\n      marginBottom: theme.spacing(1),\n    },\n    transitionContainer: {\n      width: '100%',\n      overflow: 'hidden',\n      height: 23,\n    },\n    iconButton: {\n      zIndex: 1,\n      backgroundColor: theme.palette.background.paper,\n    },\n    daysHeader: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center',\n      maxHeight: 16,\n    },\n    dayLabel: {\n      width: 36,\n      margin: '0 2px',\n      textAlign: 'center',\n      color: theme.palette.text.hint,\n    },\n  }),\n  { name: 'MuiPickersCalendarHeader' }\n);\n\nexport const CalendarHeader: React.SFC<CalendarHeaderProps> = ({\n  currentMonth,\n  onMonthChange,\n  leftArrowIcon,\n  rightArrowIcon,\n  leftArrowButtonProps,\n  rightArrowButtonProps,\n  disablePrevMonth,\n  disableNextMonth,\n  slideDirection,\n}) => {\n  const utils = useUtils();\n  const classes = useStyles();\n  const theme = useTheme();\n  const rtl = theme.direction === 'rtl';\n\n  const selectNextMonth = () => onMonthChange(utils.getNextMonth(currentMonth), 'left');\n  const selectPreviousMonth = () => onMonthChange(utils.getPreviousMonth(currentMonth), 'right');\n\n  return (\n    <div>\n      <div className={classes.switchHeader}>\n        <IconButton\n          {...leftArrowButtonProps}\n          disabled={disablePrevMonth}\n          onClick={selectPreviousMonth}\n          className={classes.iconButton}\n        >\n          {rtl ? rightArrowIcon : leftArrowIcon}\n        </IconButton>\n\n        <SlideTransition\n          slideDirection={slideDirection}\n          transKey={currentMonth.toString()}\n          className={classes.transitionContainer}\n        >\n          <Typography align=\"center\" variant=\"body1\">\n            {utils.getCalendarHeaderText(currentMonth)}\n          </Typography>\n        </SlideTransition>\n\n        <IconButton\n          {...rightArrowButtonProps}\n          disabled={disableNextMonth}\n          onClick={selectNextMonth}\n          className={classes.iconButton}\n        >\n          {rtl ? leftArrowIcon : rightArrowIcon}\n        </IconButton>\n      </div>\n\n      <div className={classes.daysHeader}>\n        {utils.getWeekdays().map((day, index) => (\n          <Typography\n            key={index} // eslint-disable-line react/no-array-index-key\n            variant=\"caption\"\n            className={classes.dayLabel}\n          >\n            {day}\n          </Typography>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nCalendarHeader.displayName = 'CalendarHeader';\n\nCalendarHeader.propTypes = {\n  leftArrowIcon: PropTypes.node,\n  rightArrowIcon: PropTypes.node,\n  disablePrevMonth: PropTypes.bool,\n  disableNextMonth: PropTypes.bool,\n};\n\nCalendarHeader.defaultProps = {\n  leftArrowIcon: <ArrowLeftIcon />,\n  rightArrowIcon: <ArrowRightIcon />,\n  disablePrevMonth: false,\n  disableNextMonth: false,\n};\n\nexport default CalendarHeader;\n","import React from 'react';\nimport SvgIcon, { SvgIconProps } from '@material-ui/core/SvgIcon';\n\nexport const ArrowLeftIcon: React.SFC<SvgIconProps> = props => {\n  return (\n    <SvgIcon {...props}>\n      <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\" />\n      <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\n    </SvgIcon>\n  );\n};\n","import React from 'react';\nimport SvgIcon, { SvgIconProps } from '@material-ui/core/SvgIcon';\n\nexport const ArrowRightIcon: React.SFC<SvgIconProps> = props => {\n  return (\n    <SvgIcon {...props}>\n      <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\n      <path fill=\"none\" d=\"M0 0h24v24H0V0z\" />\n    </SvgIcon>\n  );\n};\n","import * as React from 'react';\nimport { Omit } from '../_helpers/utils';\nimport { useUtils } from './hooks/useUtils';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from '../typings/date';\n\nexport interface WithUtilsProps {\n  utils: IUtils<MaterialUiPickersDate>;\n}\n\nexport const withUtils = () => <P extends WithUtilsProps>(Component: React.ComponentType<P>) => {\n  const WithUtils: React.SFC<Omit<P, keyof WithUtilsProps>> = props => {\n    const utils = useUtils();\n    return <Component utils={utils} {...(props as any)} />;\n  };\n\n  WithUtils.displayName = `WithUtils(${Component.displayName || Component.name})`;\n  return WithUtils;\n};\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport Day from './Day';\nimport DayWrapper from './DayWrapper';\nimport CalendarHeader from './CalendarHeader';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport SlideTransition, { SlideDirection } from './SlideTransition';\nimport { Theme } from '@material-ui/core/styles';\nimport { VariantContext } from '../../wrappers/Wrapper';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { runKeyHandler } from '../../_shared/hooks/useKeyDown';\nimport { IconButtonProps } from '@material-ui/core/IconButton';\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\nimport { findClosestEnabledDate } from '../../_helpers/date-utils';\nimport { withUtils, WithUtilsProps } from '../../_shared/WithUtils';\n\nexport interface OutterCalendarProps {\n  /** Left arrow icon */\n  leftArrowIcon?: React.ReactNode;\n  /** Right arrow icon */\n  rightArrowIcon?: React.ReactNode;\n  /** Custom renderer for day @DateIOType */\n  renderDay?: (\n    day: MaterialUiPickersDate,\n    selectedDate: MaterialUiPickersDate,\n    dayInCurrentMonth: boolean,\n    dayComponent: JSX.Element\n  ) => JSX.Element;\n  /**\n   * Enables keyboard listener for moving between days in calendar\n   * @default true\n   */\n  allowKeyboardControl?: boolean;\n  /**\n   * Props to pass to left arrow button\n   * @type {Partial<IconButtonProps>}\n   */\n  leftArrowButtonProps?: Partial<IconButtonProps>;\n  /**\n   * Props to pass to right arrow button\n   * @type {Partial<IconButtonProps>}\n   */\n  rightArrowButtonProps?: Partial<IconButtonProps>;\n  /** Disable specific date @DateIOType */\n  shouldDisableDate?: (day: MaterialUiPickersDate) => boolean;\n  /** Callback firing on month change. Return promise to render spinner till it will not be resolved @DateIOType */\n  onMonthChange?: (date: MaterialUiPickersDate) => void | Promise<void>;\n  /** Custom loading indicator  */\n  loadingIndicator?: JSX.Element;\n}\n\nexport interface CalendarProps\n  extends OutterCalendarProps,\n    WithUtilsProps,\n    WithStyles<typeof styles, true> {\n  /** Calendar Date @DateIOType */\n  date: MaterialUiPickersDate;\n  /** Calendar onChange */\n  onChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n  /** Min date @DateIOType */\n  minDate?: MaterialUiPickersDate;\n  /** Max date @DateIOType */\n  maxDate?: MaterialUiPickersDate;\n  /** Disable past dates */\n  disablePast?: boolean;\n  /** Disable future dates */\n  disableFuture?: boolean;\n}\n\nexport interface CalendarState {\n  slideDirection: SlideDirection;\n  currentMonth: MaterialUiPickersDate;\n  lastDate?: MaterialUiPickersDate;\n  loadingQueue: number;\n}\n\nconst KeyDownListener = ({ onKeyDown }: { onKeyDown: (e: KeyboardEvent) => void }) => {\n  React.useEffect(() => {\n    window.addEventListener('keydown', onKeyDown);\n    return () => {\n      window.removeEventListener('keydown', onKeyDown);\n    };\n  }, [onKeyDown]);\n\n  return null;\n};\n\nexport class Calendar extends React.Component<CalendarProps, CalendarState> {\n  static contextType = VariantContext;\n  static propTypes: any = {\n    renderDay: PropTypes.func,\n    shouldDisableDate: PropTypes.func,\n    allowKeyboardControl: PropTypes.bool,\n  };\n\n  static defaultProps: Partial<CalendarProps> = {\n    minDate: new Date('1900-01-01'),\n    maxDate: new Date('2100-01-01'),\n    disablePast: false,\n    disableFuture: false,\n    allowKeyboardControl: true,\n  };\n\n  static getDerivedStateFromProps(nextProps: CalendarProps, state: CalendarState) {\n    const { utils, date: nextDate } = nextProps;\n\n    if (!utils.isEqual(nextDate, state.lastDate)) {\n      const nextMonth = utils.getMonth(nextDate);\n      const lastDate = state.lastDate || nextDate;\n      const lastMonth = utils.getMonth(lastDate);\n\n      return {\n        lastDate: nextDate,\n        currentMonth: nextProps.utils.startOfMonth(nextDate),\n        // prettier-ignore\n        slideDirection: nextMonth === lastMonth\n          ? state.slideDirection\n          : utils.isAfterDay(nextDate, lastDate)\n            ? 'left'\n            : 'right'\n      };\n    }\n\n    return null;\n  }\n\n  state: CalendarState = {\n    slideDirection: 'left',\n    currentMonth: this.props.utils.startOfMonth(this.props.date),\n    loadingQueue: 0,\n  };\n\n  componentDidMount() {\n    const { date, minDate, maxDate, utils, disablePast, disableFuture } = this.props;\n\n    if (this.shouldDisableDate(date)) {\n      const closestEnabledDate = findClosestEnabledDate({\n        date,\n        utils,\n        minDate: utils.date(minDate),\n        maxDate: utils.date(maxDate),\n        disablePast: Boolean(disablePast),\n        disableFuture: Boolean(disableFuture),\n        shouldDisableDate: this.shouldDisableDate,\n      });\n\n      this.handleDaySelect(closestEnabledDate, false);\n    }\n  }\n\n  private pushToLoadingQueue = () => {\n    const loadingQueue = this.state.loadingQueue + 1;\n    this.setState({ loadingQueue });\n  };\n\n  private popFromLoadingQueue = () => {\n    let loadingQueue = this.state.loadingQueue;\n    loadingQueue = loadingQueue <= 0 ? 0 : loadingQueue - 1;\n    this.setState({ loadingQueue });\n  };\n\n  handleChangeMonth = (newMonth: MaterialUiPickersDate, slideDirection: SlideDirection) => {\n    this.setState({ currentMonth: newMonth, slideDirection });\n\n    if (this.props.onMonthChange) {\n      const returnVal = this.props.onMonthChange(newMonth);\n      if (returnVal) {\n        this.pushToLoadingQueue();\n        returnVal.then(() => {\n          this.popFromLoadingQueue();\n        });\n      }\n    }\n  };\n\n  validateMinMaxDate = (day: MaterialUiPickersDate) => {\n    const { minDate, maxDate, utils, disableFuture, disablePast } = this.props;\n    const now = utils.date();\n\n    return Boolean(\n      (disableFuture && utils.isAfterDay(day, now)) ||\n        (disablePast && utils.isBeforeDay(day, now)) ||\n        (minDate && utils.isBeforeDay(day, utils.date(minDate))) ||\n        (maxDate && utils.isAfterDay(day, utils.date(maxDate)))\n    );\n  };\n\n  shouldDisablePrevMonth = () => {\n    const { utils, disablePast, minDate } = this.props;\n\n    const now = utils.date();\n    const firstEnabledMonth = utils.startOfMonth(\n      disablePast && utils.isAfter(now, utils.date(minDate)) ? now : utils.date(minDate)\n    );\n\n    return !utils.isBefore(firstEnabledMonth, this.state.currentMonth);\n  };\n\n  shouldDisableNextMonth = () => {\n    const { utils, disableFuture, maxDate } = this.props;\n\n    const now = utils.date();\n    const lastEnabledMonth = utils.startOfMonth(\n      disableFuture && utils.isBefore(now, utils.date(maxDate)) ? now : utils.date(maxDate)\n    );\n\n    return !utils.isAfter(lastEnabledMonth, this.state.currentMonth);\n  };\n\n  shouldDisableDate = (day: MaterialUiPickersDate) => {\n    const { shouldDisableDate } = this.props;\n\n    return this.validateMinMaxDate(day) || Boolean(shouldDisableDate && shouldDisableDate(day));\n  };\n\n  handleDaySelect = (day: MaterialUiPickersDate, isFinish = true) => {\n    const { date, utils } = this.props;\n\n    this.props.onChange(utils.mergeDateAndTime(day, date), isFinish);\n  };\n\n  moveToDay = (day: MaterialUiPickersDate) => {\n    const { utils } = this.props;\n\n    if (day && !this.shouldDisableDate(day)) {\n      if (utils.getMonth(day) !== utils.getMonth(this.state.currentMonth)) {\n        this.handleChangeMonth(utils.startOfMonth(day), 'left');\n      }\n\n      this.handleDaySelect(day, false);\n    }\n  };\n\n  handleKeyDown = (event: KeyboardEvent) => {\n    const { theme, date, utils } = this.props;\n\n    runKeyHandler(event, {\n      ArrowUp: () => this.moveToDay(utils.addDays(date, -7)),\n      ArrowDown: () => this.moveToDay(utils.addDays(date, 7)),\n      ArrowLeft: () => this.moveToDay(utils.addDays(date, theme.direction === 'ltr' ? -1 : 1)),\n      ArrowRight: () => this.moveToDay(utils.addDays(date, theme.direction === 'ltr' ? 1 : -1)),\n    });\n  };\n\n  private renderWeeks = () => {\n    const { utils, classes } = this.props;\n    const weeks = utils.getWeekArray(this.state.currentMonth);\n\n    return weeks.map(week => (\n      <div key={`week-${week[0]!.toString()}`} className={classes.week}>\n        {this.renderDays(week)}\n      </div>\n    ));\n  };\n\n  private renderDays = (week: MaterialUiPickersDate[]) => {\n    const { date, renderDay, utils } = this.props;\n\n    const now = utils.date();\n    const selectedDate = utils.startOfDay(date);\n    const currentMonthNumber = utils.getMonth(this.state.currentMonth);\n\n    return week.map(day => {\n      const disabled = this.shouldDisableDate(day);\n      const isDayInCurrentMonth = utils.getMonth(day) === currentMonthNumber;\n\n      let dayComponent = (\n        <Day\n          disabled={disabled}\n          current={utils.isSameDay(day, now)}\n          hidden={!isDayInCurrentMonth}\n          selected={utils.isSameDay(selectedDate, day)}\n        >\n          {utils.getDayText(day)}\n        </Day>\n      );\n\n      if (renderDay) {\n        dayComponent = renderDay(day, selectedDate, isDayInCurrentMonth, dayComponent);\n      }\n\n      return (\n        <DayWrapper\n          value={day}\n          key={day!.toString()}\n          disabled={disabled}\n          dayInCurrentMonth={isDayInCurrentMonth}\n          onSelect={this.handleDaySelect}\n        >\n          {dayComponent}\n        </DayWrapper>\n      );\n    });\n  };\n\n  render() {\n    const { currentMonth, slideDirection } = this.state;\n    const {\n      classes,\n      allowKeyboardControl,\n      leftArrowButtonProps,\n      leftArrowIcon,\n      rightArrowButtonProps,\n      rightArrowIcon,\n      loadingIndicator,\n    } = this.props;\n    const loadingElement = loadingIndicator ? loadingIndicator : <CircularProgress />;\n\n    return (\n      <React.Fragment>\n        {allowKeyboardControl && this.context !== 'static' && (\n          <KeyDownListener onKeyDown={this.handleKeyDown} />\n        )}\n\n        <CalendarHeader\n          currentMonth={currentMonth!}\n          slideDirection={slideDirection}\n          onMonthChange={this.handleChangeMonth}\n          leftArrowIcon={leftArrowIcon}\n          leftArrowButtonProps={leftArrowButtonProps}\n          rightArrowIcon={rightArrowIcon}\n          rightArrowButtonProps={rightArrowButtonProps}\n          disablePrevMonth={this.shouldDisablePrevMonth()}\n          disableNextMonth={this.shouldDisableNextMonth()}\n        />\n\n        <SlideTransition\n          slideDirection={slideDirection}\n          transKey={currentMonth!.toString()}\n          className={classes.transitionContainer}\n        >\n          <>\n            {(this.state.loadingQueue > 0 && (\n              <div className={classes.progressContainer}>{loadingElement}</div>\n            )) || <div>{this.renderWeeks()}</div>}\n          </>\n        </SlideTransition>\n      </React.Fragment>\n    );\n  }\n}\n\nexport const styles = (theme: Theme) => ({\n  transitionContainer: {\n    minHeight: 36 * 6,\n    marginTop: theme.spacing(1.5),\n  },\n  progressContainer: {\n    width: '100%',\n    height: '100%',\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  week: {\n    display: 'flex',\n    justifyContent: 'center',\n  },\n});\n\nexport default withStyles(styles, {\n  name: 'MuiPickersCalendar',\n  withTheme: true,\n})(withUtils()(Calendar));\n","enum ClockType {\n  HOURS = 'hours',\n\n  MINUTES = 'minutes',\n\n  SECONDS = 'seconds',\n}\n\nexport type ClockViewType = 'hours' | 'minutes' | 'seconds';\n\nexport default ClockType;\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport ClockType, { ClockViewType } from '../../constants/ClockType';\nimport { Theme } from '@material-ui/core/styles';\nimport { withStyles, createStyles, WithStyles } from '@material-ui/core/styles';\n\nexport interface ClockPointerProps extends WithStyles<typeof styles> {\n  value: number;\n  hasSelected: boolean;\n  isInner: boolean;\n  type: ClockViewType;\n}\n\nexport class ClockPointer extends React.Component<ClockPointerProps> {\n  public static getDerivedStateFromProps = (\n    nextProps: ClockPointerProps,\n    state: ClockPointer['state']\n  ) => {\n    if (nextProps.type !== state.previousType) {\n      return {\n        toAnimateTransform: true,\n        previousType: nextProps.type,\n      };\n    }\n\n    return {\n      toAnimateTransform: false,\n      previousType: nextProps.type,\n    };\n  };\n\n  public state = {\n    toAnimateTransform: false,\n    previousType: undefined,\n  };\n\n  public getAngleStyle = () => {\n    const { value, isInner, type } = this.props;\n\n    const max = type === ClockType.HOURS ? 12 : 60;\n    let angle = (360 / max) * value;\n\n    if (type === ClockType.HOURS && value > 12) {\n      angle -= 360; // round up angle to max 360 degrees\n    }\n\n    return {\n      height: isInner ? '26%' : '40%',\n      transform: `rotateZ(${angle}deg)`,\n    };\n  };\n\n  public render() {\n    const { classes, hasSelected } = this.props;\n\n    return (\n      <div\n        style={this.getAngleStyle()}\n        className={clsx(classes.pointer, {\n          [classes.animateTransform]: this.state.toAnimateTransform,\n        })}\n      >\n        <div\n          className={clsx(classes.thumb, {\n            [classes.noPoint]: hasSelected,\n          })}\n        />\n      </div>\n    );\n  }\n}\n\nexport const styles = (theme: Theme) =>\n  createStyles({\n    pointer: {\n      width: 2,\n      backgroundColor: theme.palette.primary.main,\n      position: 'absolute',\n      left: 'calc(50% - 1px)',\n      bottom: '50%',\n      transformOrigin: 'center bottom 0px',\n    },\n    animateTransform: {\n      transition: theme.transitions.create(['transform', 'height']),\n    },\n    thumb: {\n      width: 4,\n      height: 4,\n      backgroundColor: theme.palette.primary.contrastText,\n      borderRadius: '100%',\n      position: 'absolute',\n      top: -21,\n      left: -15,\n      border: `14px solid ${theme.palette.primary.main}`,\n      boxSizing: 'content-box',\n    },\n    noPoint: {\n      backgroundColor: theme.palette.primary.main,\n    },\n  });\n\nexport default withStyles(styles, {\n  name: 'MuiPickersClockPointer',\n})(ClockPointer as React.ComponentType<ClockPointerProps>);\n","import { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from '../typings/date';\n\nconst center = {\n  x: 260 / 2,\n  y: 260 / 2,\n};\n\nconst basePoint = {\n  x: center.x,\n  y: 0,\n};\n\nconst cx = basePoint.x - center.x;\nconst cy = basePoint.y - center.y;\n\nconst rad2deg = (rad: number) => rad * 57.29577951308232;\n\nconst getAngleValue = (step: number, offsetX: number, offsetY: number) => {\n  const x = offsetX - center.x;\n  const y = offsetY - center.y;\n\n  const atan = Math.atan2(cx, cy) - Math.atan2(x, y);\n\n  let deg = rad2deg(atan);\n  deg = Math.round(deg / step) * step;\n  deg %= 360;\n\n  const value = Math.floor(deg / step) || 0;\n  const delta = Math.pow(x, 2) + Math.pow(y, 2);\n  const distance = Math.sqrt(delta);\n\n  return { value, distance };\n};\n\nexport const getHours = (offsetX: number, offsetY: number, ampm: boolean) => {\n  let { value, distance } = getAngleValue(30, offsetX, offsetY);\n  value = value || 12;\n\n  if (!ampm) {\n    if (distance < 90) {\n      value += 12;\n      value %= 24;\n    }\n  } else {\n    value %= 12;\n  }\n\n  return value;\n};\n\nexport const getMinutes = (offsetX: number, offsetY: number, step = 1) => {\n  const angleStep = step * 6;\n  let { value } = getAngleValue(angleStep, offsetX, offsetY);\n  value = (value * step) % 60;\n\n  return value;\n};\n\nexport const getMeridiem = (\n  date: MaterialUiPickersDate,\n  utils: IUtils<MaterialUiPickersDate>\n): 'am' | 'pm' => {\n  return utils.getHours(date) >= 12 ? 'pm' : 'am';\n};\n\nexport const convertToMeridiem = (\n  time: MaterialUiPickersDate,\n  meridiem: 'am' | 'pm',\n  ampm: boolean,\n  utils: IUtils<MaterialUiPickersDate>\n) => {\n  if (ampm) {\n    const currentMeridiem = utils.getHours(time) >= 12 ? 'pm' : 'am';\n    if (currentMeridiem !== meridiem) {\n      const hours = meridiem === 'am' ? utils.getHours(time) - 12 : utils.getHours(time) + 12;\n\n      return utils.setHours(time, hours);\n    }\n  }\n\n  return time;\n};\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport ClockPointer from './ClockPointer';\nimport ClockType, { ClockViewType } from '../../constants/ClockType';\nimport { getHours, getMinutes } from '../../_helpers/time-utils';\nimport { withStyles, createStyles, WithStyles, Theme } from '@material-ui/core/styles';\n\nexport interface ClockProps extends WithStyles<typeof styles> {\n  type: ClockViewType;\n  value: number;\n  onChange: (value: number, isFinish?: boolean) => void;\n  ampm?: boolean;\n  minutesStep?: number;\n  children: React.ReactElement<any>[];\n}\n\nexport class Clock extends React.Component<ClockProps> {\n  public static propTypes: any = {\n    type: PropTypes.oneOf(\n      Object.keys(ClockType).map(key => ClockType[key as keyof typeof ClockType])\n    ).isRequired,\n    value: PropTypes.number.isRequired,\n    onChange: PropTypes.func.isRequired,\n    children: PropTypes.arrayOf(PropTypes.node).isRequired,\n    ampm: PropTypes.bool,\n    minutesStep: PropTypes.number,\n    innerRef: PropTypes.any,\n  };\n\n  public static defaultProps = {\n    ampm: false,\n    minutesStep: 1,\n  };\n\n  public isMoving = false;\n\n  public setTime(e: any, isFinish = false) {\n    let { offsetX, offsetY } = e;\n\n    if (typeof offsetX === 'undefined') {\n      const rect = e.target.getBoundingClientRect();\n\n      offsetX = e.changedTouches[0].clientX - rect.left;\n      offsetY = e.changedTouches[0].clientY - rect.top;\n    }\n\n    const value =\n      this.props.type === ClockType.SECONDS || this.props.type === ClockType.MINUTES\n        ? getMinutes(offsetX, offsetY, this.props.minutesStep)\n        : getHours(offsetX, offsetY, Boolean(this.props.ampm));\n\n    this.props.onChange(value, isFinish);\n  }\n\n  public handleTouchMove = (e: React.TouchEvent) => {\n    this.isMoving = true;\n    this.setTime(e);\n  };\n\n  public handleTouchEnd = (e: React.TouchEvent) => {\n    if (this.isMoving) {\n      this.setTime(e, true);\n      this.isMoving = false;\n    }\n  };\n\n  public handleMove = (e: React.MouseEvent<HTMLDivElement>) => {\n    e.preventDefault();\n    e.stopPropagation();\n    // MouseEvent.which is deprecated, but MouseEvent.buttons is not supported in Safari\n    const isButtonPressed =\n      typeof e.buttons === 'undefined' ? e.nativeEvent.which === 1 : e.buttons === 1;\n\n    if (isButtonPressed) {\n      this.setTime(e.nativeEvent, false);\n    }\n  };\n\n  public handleMouseUp = (e: React.MouseEvent) => {\n    if (this.isMoving) {\n      this.isMoving = false;\n    }\n\n    this.setTime(e.nativeEvent, true);\n  };\n\n  public hasSelected = () => {\n    const { type, value } = this.props;\n\n    if (type === ClockType.HOURS) {\n      return true;\n    }\n\n    return value % 5 === 0;\n  };\n\n  public render() {\n    const { classes, value, children, type, ampm } = this.props;\n\n    const isPointerInner = !ampm && type === ClockType.HOURS && (value < 1 || value > 12);\n\n    return (\n      <div className={classes.container}>\n        <div className={classes.clock}>\n          <div\n            role=\"menu\"\n            tabIndex={-1}\n            className={classes.squareMask}\n            onTouchMove={this.handleTouchMove}\n            onTouchEnd={this.handleTouchEnd}\n            onMouseUp={this.handleMouseUp}\n            onMouseMove={this.handleMove}\n          />\n\n          <div className={classes.pin} />\n\n          <ClockPointer\n            type={type}\n            value={value}\n            isInner={isPointerInner}\n            hasSelected={this.hasSelected()}\n          />\n\n          {children}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport const styles = (theme: Theme) =>\n  createStyles({\n    container: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'flex-end',\n      margin: `${theme.spacing(2)}px 0 ${theme.spacing(1)}px`,\n    },\n    clock: {\n      backgroundColor: 'rgba(0,0,0,.07)',\n      borderRadius: '50%',\n      height: 260,\n      width: 260,\n      position: 'relative',\n      pointerEvents: 'none',\n    },\n    squareMask: {\n      width: '100%',\n      height: '100%',\n      position: 'absolute',\n      pointerEvents: 'auto',\n      outline: 'none',\n      touchActions: 'none',\n      userSelect: 'none',\n      '&:active': {\n        cursor: 'move',\n      },\n    },\n    pin: {\n      width: 6,\n      height: 6,\n      borderRadius: '50%',\n      backgroundColor: theme.palette.primary.main,\n      position: 'absolute',\n      top: '50%',\n      left: '50%',\n      transform: 'translate(-50%, -50%)',\n    },\n  });\n\nexport default withStyles(styles, {\n  name: 'MuiPickersClock',\n})(Clock as React.ComponentType<ClockProps>);\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst positions: Record<number, [number, number]> = {\n  0: [0, 40],\n  1: [55, 19.6],\n  2: [94.4, 59.5],\n  3: [109, 114],\n  4: [94.4, 168.5],\n  5: [54.5, 208.4],\n  6: [0, 223],\n  7: [-54.5, 208.4],\n  8: [-94.4, 168.5],\n  9: [-109, 114],\n  10: [-94.4, 59.5],\n  11: [-54.5, 19.6],\n  12: [0, 5],\n  13: [36.9, 49.9],\n  14: [64, 77],\n  15: [74, 114],\n  16: [64, 151],\n  17: [37, 178],\n  18: [0, 188],\n  19: [-37, 178],\n  20: [-64, 151],\n  21: [-74, 114],\n  22: [-64, 77],\n  23: [-37, 50],\n};\n\nexport interface ClockNumberProps {\n  index: number;\n  label: string;\n  selected: boolean;\n  isInner?: boolean;\n}\n\nexport const useStyles = makeStyles(\n  theme => {\n    const size = theme.spacing(4);\n\n    return {\n      clockNumber: {\n        width: size,\n        height: 32,\n        userSelect: 'none',\n        position: 'absolute',\n        left: `calc((100% - ${typeof size === 'number' ? `${size}px` : size}) / 2)`,\n        display: 'inline-flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        borderRadius: '50%',\n        color:\n          theme.palette.type === 'light' ? theme.palette.text.primary : theme.palette.text.hint,\n      },\n      clockNumberSelected: {\n        color: theme.palette.primary.contrastText,\n      },\n    };\n  },\n  { name: 'MuiPickersClockNumber' }\n);\n\nexport const ClockNumber: React.FC<ClockNumberProps> = ({ selected, label, index, isInner }) => {\n  const classes = useStyles();\n  const className = clsx(classes.clockNumber, {\n    [classes.clockNumberSelected]: selected,\n  });\n\n  const transformStyle = React.useMemo(() => {\n    const position = positions[index];\n\n    return {\n      transform: `translate(${position[0]}px, ${position[1]}px`,\n    };\n  }, [index]);\n\n  return (\n    <Typography\n      component=\"span\"\n      className={className}\n      variant={isInner ? 'body2' : 'body1'}\n      style={transformStyle}\n      children={label}\n    />\n  );\n};\n\nexport default ClockNumber;\n","import * as React from 'react';\nimport ClockNumber from './ClockNumber';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { MaterialUiPickersDate } from '../../typings/date';\n\nexport const getHourNumbers = ({\n  ampm,\n  utils,\n  date,\n}: {\n  ampm: boolean;\n  utils: IUtils<MaterialUiPickersDate>;\n  date: MaterialUiPickersDate;\n}) => {\n  const currentHours = utils.getHours(date);\n\n  const hourNumbers: JSX.Element[] = [];\n  const startHour = ampm ? 1 : 0;\n  const endHour = ampm ? 12 : 23;\n\n  const isSelected = (hour: number) => {\n    if (ampm) {\n      if (hour === 12) {\n        return currentHours === 12 || currentHours === 0;\n      }\n\n      return currentHours === hour || currentHours - 12 === hour;\n    }\n\n    return currentHours === hour;\n  };\n\n  for (let hour = startHour; hour <= endHour; hour += 1) {\n    let label = hour.toString();\n\n    if (hour === 0) {\n      label = '00';\n    }\n\n    const props = {\n      index: hour,\n      label: utils.formatNumber(label),\n      selected: isSelected(hour),\n      isInner: !ampm && (hour === 0 || hour > 12),\n    };\n\n    hourNumbers.push(<ClockNumber key={hour} {...props} />);\n  }\n\n  return hourNumbers;\n};\n\nexport const getMinutesNumbers = ({\n  value,\n  utils,\n}: {\n  value: number;\n  utils: IUtils<MaterialUiPickersDate>;\n}) => {\n  const f = utils.formatNumber;\n\n  return [\n    <ClockNumber label={f('00')} selected={value === 0} index={12} key={12} />,\n    <ClockNumber label={f('05')} selected={value === 5} index={1} key={1} />,\n    <ClockNumber label={f('10')} selected={value === 10} index={2} key={2} />,\n    <ClockNumber label={f('15')} selected={value === 15} index={3} key={3} />,\n    <ClockNumber label={f('20')} selected={value === 20} index={4} key={4} />,\n    <ClockNumber label={f('25')} selected={value === 25} index={5} key={5} />,\n    <ClockNumber label={f('30')} selected={value === 30} index={6} key={6} />,\n    <ClockNumber label={f('35')} selected={value === 35} index={7} key={7} />,\n    <ClockNumber label={f('40')} selected={value === 40} index={8} key={8} />,\n    <ClockNumber label={f('45')} selected={value === 45} index={9} key={9} />,\n    <ClockNumber label={f('50')} selected={value === 50} index={10} key={10} />,\n    <ClockNumber label={f('55')} selected={value === 55} index={11} key={11} />,\n  ];\n};\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport Clock from './Clock';\nimport ClockType from '../../constants/ClockType';\nimport { useUtils } from '../../_shared/hooks/useUtils';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { getHourNumbers, getMinutesNumbers } from './ClockNumbers';\nimport { convertToMeridiem, getMeridiem } from '../../_helpers/time-utils';\n\nexport interface TimePickerViewProps {\n  /** TimePicker value */\n  date: MaterialUiPickersDate;\n  /** Clock type */\n  type: 'hours' | 'minutes' | 'seconds';\n  /** 12h/24h clock mode */\n  ampm?: boolean;\n  /** Minutes step */\n  minutesStep?: number;\n  /** On hour change */\n  onHourChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n  /** On minutes change */\n  onMinutesChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n  /** On seconds change */\n  onSecondsChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n}\n\nexport const ClockView: React.FC<TimePickerViewProps> = ({\n  type,\n  onHourChange,\n  onMinutesChange,\n  onSecondsChange,\n  ampm,\n  date,\n  minutesStep,\n}) => {\n  const utils = useUtils();\n  const viewProps = React.useMemo(() => {\n    switch (type) {\n      case ClockType.HOURS:\n        return {\n          value: utils.getHours(date),\n          children: getHourNumbers({ date, utils, ampm: Boolean(ampm) }),\n          onChange: (value: number, isFinish?: boolean) => {\n            const currentMeridiem = getMeridiem(date, utils);\n            const updatedTimeWithMeridiem = convertToMeridiem(\n              utils.setHours(date, value),\n              currentMeridiem,\n              Boolean(ampm),\n              utils\n            );\n\n            onHourChange(updatedTimeWithMeridiem, isFinish);\n          },\n        };\n\n      case ClockType.MINUTES:\n        const minutesValue = utils.getMinutes(date);\n        return {\n          value: minutesValue,\n          children: getMinutesNumbers({ value: minutesValue, utils }),\n          onChange: (value: number, isFinish?: boolean) => {\n            const updatedTime = utils.setMinutes(date, value);\n\n            onMinutesChange(updatedTime, isFinish);\n          },\n        };\n\n      case ClockType.SECONDS:\n        const secondsValue = utils.getSeconds(date);\n        return {\n          value: secondsValue,\n          children: getMinutesNumbers({ value: secondsValue, utils }),\n          onChange: (value: number, isFinish?: boolean) => {\n            const updatedTime = utils.setSeconds(date, value);\n\n            onSecondsChange(updatedTime, isFinish);\n          },\n        };\n\n      default:\n        throw new Error('You must provide the type for TimePickerView');\n    }\n  }, [ampm, date, onHourChange, onMinutesChange, onSecondsChange, type, utils]);\n\n  return <Clock type={type} ampm={ampm} minutesStep={minutesStep} {...viewProps} />;\n};\n\nClockView.displayName = 'TimePickerView';\n\nClockView.propTypes = {\n  date: PropTypes.object.isRequired,\n  onHourChange: PropTypes.func.isRequired,\n  onMinutesChange: PropTypes.func.isRequired,\n  onSecondsChange: PropTypes.func.isRequired,\n  ampm: PropTypes.bool,\n  minutesStep: PropTypes.number,\n  type: PropTypes.oneOf(Object.keys(ClockType).map(key => ClockType[key as keyof typeof ClockType]))\n    .isRequired,\n} as any;\n\nClockView.defaultProps = {\n  ampm: true,\n  minutesStep: 1,\n};\n\nexport default React.memo(ClockView);\n","import * as PropTypes from 'prop-types';\nimport { BaseTimePickerProps } from '../TimePicker/TimePicker';\nimport { BaseDatePickerProps } from '../DatePicker/DatePicker';\n\nconst date = PropTypes.oneOfType([\n  PropTypes.object,\n  PropTypes.string,\n  PropTypes.number,\n  PropTypes.instanceOf(Date),\n]);\n\nconst datePickerView = PropTypes.oneOf(['year', 'month', 'day']);\n\nexport type ParsableDate = object | string | number | Date | null | undefined;\n\nexport const DomainPropTypes = { date, datePickerView };\n\n/* eslint-disable @typescript-eslint/no-object-literal-type-assertion */\nexport const timePickerDefaultProps = {\n  ampm: true,\n  invalidDateMessage: 'Invalid Time Format',\n} as BaseTimePickerProps;\n\nexport const datePickerDefaultProps = {\n  minDate: new Date('1900-01-01'),\n  maxDate: new Date('2100-01-01'),\n  invalidDateMessage: 'Invalid Date Format',\n  minDateMessage: 'Date should not be before minimal date',\n  maxDateMessage: 'Date should not be after maximal date',\n  allowKeyboardControl: true,\n} as BaseDatePickerProps;\n\nexport const dateTimePickerDefaultProps = {\n  ...timePickerDefaultProps,\n  ...datePickerDefaultProps,\n  showTabs: true,\n} as BaseTimePickerProps & BaseDatePickerProps;\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nexport interface YearProps {\n  children: React.ReactNode;\n  disabled?: boolean;\n  onSelect: (value: any) => void;\n  selected?: boolean;\n  value: any;\n  forwardedRef?: React.Ref<HTMLDivElement>;\n}\n\nexport const useStyles = makeStyles(\n  theme => ({\n    root: {\n      height: 40,\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      cursor: 'pointer',\n      outline: 'none',\n      '&:focus': {\n        color: theme.palette.primary.main,\n        fontWeight: theme.typography.fontWeightMedium,\n      },\n    },\n    yearSelected: {\n      margin: '10px 0',\n      fontWeight: theme.typography.fontWeightMedium,\n    },\n    yearDisabled: {\n      pointerEvents: 'none',\n      color: theme.palette.text.hint,\n    },\n  }),\n  { name: 'MuiPickersYear' }\n);\n\nexport const Year: React.FC<YearProps> = ({\n  onSelect,\n  forwardedRef,\n  value,\n  selected,\n  disabled,\n  children,\n  ...other\n}) => {\n  const classes = useStyles();\n  const handleClick = React.useCallback(() => onSelect(value), [onSelect, value]);\n\n  return (\n    <Typography\n      role=\"button\"\n      component=\"div\"\n      tabIndex={disabled ? -1 : 0}\n      onClick={handleClick}\n      onKeyPress={handleClick}\n      color={selected ? 'primary' : undefined}\n      variant={selected ? 'h5' : 'subtitle1'}\n      children={children}\n      ref={forwardedRef}\n      className={clsx(classes.root, {\n        [classes.yearSelected]: selected,\n        [classes.yearDisabled]: disabled,\n      })}\n      {...other}\n    />\n  );\n};\n\nYear.displayName = 'Year';\n\nexport default React.forwardRef<HTMLDivElement, YearProps>((props, ref) => (\n  <Year {...props} forwardedRef={ref} />\n));\n","import * as React from 'react';\nimport Year from './Year';\nimport { DateType } from '@date-io/type';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useUtils } from '../../_shared/hooks/useUtils';\nimport { VariantContext } from '../../wrappers/Wrapper';\nimport { MaterialUiPickersDate } from '../../typings/date';\n\nexport interface YearSelectionProps {\n  date: MaterialUiPickersDate;\n  minDate: DateType;\n  maxDate: DateType;\n  onChange: (date: MaterialUiPickersDate, isFinish: boolean) => void;\n  disablePast?: boolean | null | undefined;\n  disableFuture?: boolean | null | undefined;\n  animateYearScrolling?: boolean | null | undefined;\n  onYearChange?: (date: MaterialUiPickersDate) => void;\n}\n\nexport const useStyles = makeStyles(\n  {\n    container: {\n      height: 300,\n      overflowY: 'auto',\n    },\n  },\n  { name: 'MuiPickersYearSelection' }\n);\n\nexport const YearSelection: React.FC<YearSelectionProps> = ({\n  date,\n  onChange,\n  onYearChange,\n  minDate,\n  maxDate,\n  disablePast,\n  disableFuture,\n  animateYearScrolling,\n}) => {\n  const utils = useUtils();\n  const classes = useStyles();\n  const currentVariant = React.useContext(VariantContext);\n  const selectedYearRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    if (selectedYearRef.current && selectedYearRef.current.scrollIntoView) {\n      try {\n        selectedYearRef.current.scrollIntoView({\n          block: currentVariant === 'static' ? 'nearest' : 'center',\n          behavior: animateYearScrolling ? 'smooth' : 'auto',\n        });\n      } catch (e) {\n        // call without arguments in case when scrollIntoView works improperly (e.g. Firefox 52-57)\n        selectedYearRef.current.scrollIntoView();\n      }\n    }\n  }, []); // eslint-disable-line\n\n  const currentYear = utils.getYear(date);\n  const onYearSelect = React.useCallback(\n    (year: number) => {\n      const newDate = utils.setYear(date, year);\n      if (onYearChange) {\n        onYearChange(newDate);\n      }\n\n      onChange(newDate, true);\n    },\n    [date, onChange, onYearChange, utils]\n  );\n\n  return (\n    <div className={classes.container}>\n      {utils.getYearRange(minDate, maxDate).map(year => {\n        const yearNumber = utils.getYear(year);\n        const selected = yearNumber === currentYear;\n\n        return (\n          <Year\n            key={utils.getYearText(year)}\n            selected={selected}\n            value={yearNumber}\n            onSelect={onYearSelect}\n            ref={selected ? selectedYearRef : undefined}\n            disabled={Boolean(\n              (disablePast && utils.isBeforeYear(year, utils.date())) ||\n                (disableFuture && utils.isAfterYear(year, utils.date()))\n            )}\n          >\n            {utils.getYearText(year)}\n          </Year>\n        );\n      })}\n    </div>\n  );\n};\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nexport interface MonthProps {\n  children: React.ReactNode;\n  disabled?: boolean;\n  onSelect: (value: any) => void;\n  selected?: boolean;\n  value: any;\n}\n\nexport const useStyles = makeStyles(\n  theme => ({\n    root: {\n      flex: '1 0 33.33%',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      cursor: 'pointer',\n      outline: 'none',\n      height: 75,\n      transition: theme.transitions.create('font-size', { duration: '100ms' }),\n      '&:focus': {\n        color: theme.palette.primary.main,\n        fontWeight: theme.typography.fontWeightMedium,\n      },\n    },\n    monthSelected: {\n      color: theme.palette.primary.main,\n      fontWeight: theme.typography.fontWeightMedium,\n    },\n    monthDisabled: {\n      pointerEvents: 'none',\n      color: theme.palette.text.hint,\n    },\n  }),\n  { name: 'MuiPickersMonth' }\n);\n\nexport const Month: React.FC<MonthProps> = ({\n  selected,\n  onSelect,\n  disabled,\n  value,\n  children,\n  ...other\n}) => {\n  const classes = useStyles();\n  const handleSelection = React.useCallback(() => {\n    onSelect(value);\n  }, [onSelect, value]);\n\n  return (\n    <Typography\n      role=\"button\"\n      component=\"div\"\n      className={clsx(classes.root, {\n        [classes.monthSelected]: selected,\n        [classes.monthDisabled]: disabled,\n      })}\n      tabIndex={disabled ? -1 : 0}\n      onClick={handleSelection}\n      onKeyPress={handleSelection}\n      color={selected ? 'primary' : undefined}\n      variant={selected ? 'h5' : 'subtitle1'}\n      children={children}\n      {...other}\n    />\n  );\n};\n\nMonth.displayName = 'Month';\n\nexport default Month;\n","import * as React from 'react';\nimport Month from './Month';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useUtils } from '../../_shared/hooks/useUtils';\nimport { ParsableDate } from '../../constants/prop-types';\nimport { MaterialUiPickersDate } from '../../typings/date';\n\nexport interface MonthSelectionProps {\n  date: MaterialUiPickersDate;\n  minDate?: ParsableDate;\n  maxDate?: ParsableDate;\n  onChange: (date: MaterialUiPickersDate, isFinish: boolean) => void;\n  disablePast?: boolean | null | undefined;\n  disableFuture?: boolean | null | undefined;\n  onMonthChange?: (date: MaterialUiPickersDate) => void | Promise<void>;\n}\n\nexport const useStyles = makeStyles(\n  {\n    container: {\n      width: 310,\n      display: 'flex',\n      flexWrap: 'wrap',\n      alignContent: 'stretch',\n    },\n  },\n  { name: 'MuiPickersMonthSelection' }\n);\n\nexport const MonthSelection: React.FC<MonthSelectionProps> = ({\n  disablePast,\n  disableFuture,\n  minDate,\n  maxDate,\n  date,\n  onMonthChange,\n  onChange,\n}) => {\n  const utils = useUtils();\n  const classes = useStyles();\n  const currentMonth = utils.getMonth(date);\n\n  const shouldDisableMonth = (month: MaterialUiPickersDate) => {\n    const now = utils.date();\n    const utilMinDate = utils.date(minDate);\n    const utilMaxDate = utils.date(maxDate);\n\n    const firstEnabledMonth = utils.startOfMonth(\n      disablePast && utils.isAfter(now, utilMinDate) ? now : utilMinDate\n    );\n\n    const lastEnabledMonth = utils.startOfMonth(\n      disableFuture && utils.isBefore(now, utilMaxDate) ? now : utilMaxDate\n    );\n\n    const isBeforeFirstEnabled = utils.isBefore(month, firstEnabledMonth);\n    const isAfterLastEnabled = utils.isAfter(month, lastEnabledMonth);\n\n    return isBeforeFirstEnabled || isAfterLastEnabled;\n  };\n\n  const onMonthSelect = React.useCallback(\n    (month: number) => {\n      const newDate = utils.setMonth(date, month);\n\n      onChange(newDate, true);\n      if (onMonthChange) {\n        onMonthChange(newDate);\n      }\n    },\n    [date, onChange, onMonthChange, utils]\n  );\n\n  return (\n    <div className={classes.container}>\n      {utils.getMonthArray(date).map(month => {\n        const monthNumber = utils.getMonth(month);\n        const monthText = utils.format(month, 'MMM');\n\n        return (\n          <Month\n            key={monthText}\n            value={monthNumber}\n            selected={monthNumber === currentMonth}\n            onSelect={onMonthSelect}\n            disabled={shouldDisableMonth(month)}\n          >\n            {monthText}\n          </Month>\n        );\n      })}\n    </div>\n  );\n};\n","import * as React from 'react';\nimport { useIsomorphicEffect } from './useKeyDown';\nimport { BasePickerProps } from '../../typings/BasePicker';\n\nconst getOrientation = () => {\n  if (typeof window === 'undefined') {\n    return 'portrait';\n  }\n\n  if (window.screen && window.screen.orientation && window.screen.orientation.angle) {\n    return Math.abs(window.screen.orientation.angle) === 90 ? 'landscape' : 'portrait';\n  }\n\n  // Support IOS safari\n  if (window.orientation) {\n    return Math.abs(Number(window.orientation)) === 90 ? 'landscape' : 'portrait';\n  }\n\n  return 'portrait';\n};\n\nexport function useIsLandscape(customOrientation?: BasePickerProps['orientation']) {\n  const [orientation, setOrientation] = React.useState<BasePickerProps['orientation']>(\n    getOrientation()\n  );\n\n  const eventHandler = React.useCallback(() => setOrientation(getOrientation()), []);\n\n  useIsomorphicEffect(() => {\n    window.addEventListener('orientationchange', eventHandler);\n    return () => window.removeEventListener('orientationchange', eventHandler);\n  }, [eventHandler]);\n\n  const orientationToUse = customOrientation || orientation;\n  return orientationToUse === 'landscape';\n}\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Calendar from '../views/Calendar/Calendar';\nimport { useUtils } from '../_shared/hooks/useUtils';\nimport { useViews } from '../_shared/hooks/useViews';\nimport { ClockView } from '../views/Clock/ClockView';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { YearSelection } from '../views/Year/YearView';\nimport { BasePickerProps } from '../typings/BasePicker';\nimport { MaterialUiPickersDate } from '../typings/date';\nimport { MonthSelection } from '../views/Month/MonthView';\nimport { BaseTimePickerProps } from '../TimePicker/TimePicker';\nimport { BaseDatePickerProps } from '../DatePicker/DatePicker';\nimport { useIsLandscape } from '../_shared/hooks/useIsLandscape';\nimport { datePickerDefaultProps } from '../constants/prop-types';\nimport { DIALOG_WIDTH_WIDER, DIALOG_WIDTH, VIEW_HEIGHT } from '../constants/dimensions';\n\nconst viewsMap = {\n  year: YearSelection,\n  month: MonthSelection,\n  date: Calendar,\n  hours: ClockView,\n  minutes: ClockView,\n  seconds: ClockView,\n};\n\nexport type PickerView = keyof typeof viewsMap;\n\nexport type ToolbarComponentProps = BaseDatePickerProps &\n  BaseTimePickerProps & {\n    views: PickerView[];\n    openView: PickerView;\n    date: MaterialUiPickersDate;\n    setOpenView: (view: PickerView) => void;\n    onChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n    // TODO move out, cause it is DateTimePickerOnly\n    hideTabs?: boolean;\n    dateRangeIcon?: React.ReactNode;\n    timeIcon?: React.ReactNode;\n    isLandscape: boolean;\n  };\n\nexport interface PickerViewProps extends BaseDatePickerProps, BaseTimePickerProps {\n  views: PickerView[];\n  openTo: PickerView;\n  disableToolbar?: boolean;\n  ToolbarComponent: React.ComponentType<ToolbarComponentProps>;\n  // TODO move out, cause it is DateTimePickerOnly\n  hideTabs?: boolean;\n  dateRangeIcon?: React.ReactNode;\n  timeIcon?: React.ReactNode;\n}\n\ninterface PickerProps extends PickerViewProps {\n  date: MaterialUiPickersDate;\n  orientation?: BasePickerProps['orientation'];\n  onChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void;\n}\n\nconst useStyles = makeStyles(\n  {\n    container: {\n      display: 'flex',\n      flexDirection: 'column',\n    },\n    containerLandscape: {\n      flexDirection: 'row',\n    },\n    pickerView: {\n      overflowX: 'hidden',\n      minHeight: VIEW_HEIGHT,\n      minWidth: DIALOG_WIDTH,\n      maxWidth: DIALOG_WIDTH_WIDER,\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent: 'center',\n    },\n    pickerViewLandscape: {\n      padding: '0 8px',\n    },\n  },\n  { name: 'MuiPickersBasePicker' }\n);\n\nexport const Picker: React.FunctionComponent<PickerProps> = ({\n  date,\n  views,\n  disableToolbar,\n  onChange,\n  openTo,\n  minDate: unparsedMinDate,\n  maxDate: unparsedMaxDate,\n  ToolbarComponent,\n  orientation,\n  ...rest\n}) => {\n  const utils = useUtils();\n  const classes = useStyles();\n  const isLandscape = useIsLandscape(orientation);\n  const { openView, setOpenView, handleChangeAndOpenNext } = useViews(views, openTo, onChange);\n\n  const minDate = React.useMemo(() => utils.date(unparsedMinDate)!, [unparsedMinDate, utils]);\n  const maxDate = React.useMemo(() => utils.date(unparsedMaxDate)!, [unparsedMaxDate, utils]);\n\n  return (\n    <div\n      className={clsx(classes.container, {\n        [classes.containerLandscape]: isLandscape,\n      })}\n    >\n      {!disableToolbar && (\n        <ToolbarComponent\n          {...rest}\n          views={views}\n          isLandscape={isLandscape}\n          date={date}\n          onChange={onChange}\n          setOpenView={setOpenView}\n          openView={openView}\n        />\n      )}\n\n      <div className={clsx(classes.pickerView, { [classes.pickerViewLandscape]: isLandscape })}>\n        {openView === 'year' && (\n          <YearSelection\n            {...rest}\n            date={date}\n            onChange={handleChangeAndOpenNext}\n            minDate={minDate}\n            maxDate={maxDate}\n          />\n        )}\n\n        {openView === 'month' && (\n          <MonthSelection\n            {...rest}\n            date={date}\n            onChange={handleChangeAndOpenNext}\n            minDate={minDate}\n            maxDate={maxDate}\n          />\n        )}\n\n        {openView === 'date' && (\n          <Calendar\n            {...rest}\n            date={date}\n            onChange={handleChangeAndOpenNext}\n            minDate={minDate}\n            maxDate={maxDate}\n          />\n        )}\n\n        {(openView === 'hours' || openView === 'minutes' || openView === 'seconds') && (\n          <ClockView\n            {...rest}\n            date={date}\n            type={openView}\n            onHourChange={handleChangeAndOpenNext}\n            onMinutesChange={handleChangeAndOpenNext}\n            onSecondsChange={handleChangeAndOpenNext}\n          />\n        )}\n      </div>\n    </div>\n  );\n};\n\nPicker.defaultProps = {\n  ...datePickerDefaultProps,\n  views: Object.keys(viewsMap),\n} as any;\n","import * as React from 'react';\nimport { PickerView } from '../../Picker/Picker';\nimport { arrayIncludes } from '../../_helpers/utils';\nimport { MaterialUiPickersDate } from '../../typings/date';\n\nexport function useViews(\n  views: PickerView[],\n  openTo: PickerView,\n  onChange: (date: MaterialUiPickersDate, isFinish?: boolean) => void\n) {\n  const [openView, setOpenView] = React.useState(\n    openTo && arrayIncludes(views, openTo) ? openTo : views[0]\n  );\n\n  const handleChangeAndOpenNext = React.useCallback(\n    (date: MaterialUiPickersDate, isFinish?: boolean) => {\n      const nextViewToOpen = views[views.indexOf(openView!) + 1];\n      if (isFinish && nextViewToOpen) {\n        // do not close picker if needs to show next view\n        onChange(date, false);\n        setOpenView(nextViewToOpen);\n        return;\n      }\n\n      onChange(date, Boolean(isFinish));\n    },\n    [onChange, openView, views]\n  );\n\n  return { handleChangeAndOpenNext, openView, setOpenView };\n}\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Typography, { TypographyProps } from '@material-ui/core/Typography';\nimport { ExtendMui } from '../typings/extendMui';\nimport { makeStyles, fade } from '@material-ui/core/styles';\n\nexport interface ToolbarTextProps extends ExtendMui<TypographyProps> {\n  selected?: boolean;\n  label: string;\n}\n\nexport const useStyles = makeStyles(\n  theme => {\n    const textColor =\n      theme.palette.type === 'light'\n        ? theme.palette.primary.contrastText\n        : theme.palette.getContrastText(theme.palette.background.default);\n\n    return {\n      toolbarTxt: {\n        color: fade(textColor, 0.54),\n      },\n      toolbarBtnSelected: {\n        color: textColor,\n      },\n    };\n  },\n  { name: 'MuiPickersToolbarText' }\n);\n\nconst ToolbarText: React.FunctionComponent<ToolbarTextProps> = ({\n  selected,\n  label,\n  className = null,\n  ...other\n}) => {\n  const classes = useStyles();\n  return (\n    <Typography\n      children={label}\n      className={clsx(classes.toolbarTxt, className, {\n        [classes.toolbarBtnSelected]: selected,\n      })}\n      {...other}\n    />\n  );\n};\n\nexport default ToolbarText;\n","import * as React from 'react';\nimport * as PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ToolbarText from './ToolbarText';\nimport Button, { ButtonProps } from '@material-ui/core/Button';\nimport { ExtendMui } from '../typings/extendMui';\nimport { TypographyProps } from '@material-ui/core/Typography';\nimport { createStyles, withStyles, WithStyles } from '@material-ui/core/styles';\n\nexport interface ToolbarButtonProps\n  extends ExtendMui<ButtonProps, 'variant'>,\n    WithStyles<typeof styles> {\n  variant: TypographyProps['variant'];\n  selected: boolean;\n  label: string;\n  align?: TypographyProps['align'];\n  typographyClassName?: string;\n}\n\nconst ToolbarButton: React.FunctionComponent<ToolbarButtonProps> = ({\n  classes,\n  className = null,\n  label,\n  selected,\n  variant,\n  align,\n  typographyClassName,\n  ...other\n}) => {\n  return (\n    <Button variant=\"text\" className={clsx(classes.toolbarBtn, className)} {...other}>\n      <ToolbarText\n        align={align}\n        className={typographyClassName}\n        variant={variant}\n        label={label}\n        selected={selected}\n      />\n    </Button>\n  );\n};\n\n(ToolbarButton as any).propTypes = {\n  selected: PropTypes.bool.isRequired,\n  label: PropTypes.string.isRequired,\n  classes: PropTypes.any.isRequired,\n  className: PropTypes.string,\n  innerRef: PropTypes.any,\n};\n\nToolbarButton.defaultProps = {\n  className: '',\n};\n\nexport const styles = createStyles({\n  toolbarBtn: {\n    padding: 0,\n    minWidth: '16px',\n    textTransform: 'none',\n  },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersToolbarButton' })(ToolbarButton);\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport Toolbar, { ToolbarProps } from '@material-ui/core/Toolbar';\nimport { ExtendMui } from '../typings/extendMui';\nimport { makeStyles } from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles(\n  theme => ({\n    toolbar: {\n      display: 'flex',\n      flexDirection: 'row',\n      alignItems: 'center',\n      justifyContent: 'center',\n      height: 100,\n      backgroundColor:\n        theme.palette.type === 'light'\n          ? theme.palette.primary.main\n          : theme.palette.background.default,\n    },\n    toolbarLandscape: {\n      height: 'auto',\n      maxWidth: 150,\n      padding: 8,\n      justifyContent: 'flex-start',\n    },\n  }),\n  { name: 'MuiPickersToolbar' }\n);\n\ninterface PickerToolbarProps extends ExtendMui<ToolbarProps> {\n  isLandscape: boolean;\n}\n\nconst PickerToolbar: React.SFC<PickerToolbarProps> = ({\n  children,\n  isLandscape,\n  className = null,\n  ...other\n}) => {\n  const classes = useStyles();\n\n  return (\n    <Toolbar\n      className={clsx(classes.toolbar, { [classes.toolbarLandscape]: isLandscape }, className)}\n      {...other}\n    >\n      {children}\n    </Toolbar>\n  );\n};\n\nexport default PickerToolbar;\n","import * as React from 'react';\nimport TextField, { BaseTextFieldProps, TextFieldProps } from '@material-ui/core/TextField';\nimport { ExtendMui } from '../typings/extendMui';\n\nexport type NotOverridableProps =\n  | 'openPicker'\n  | 'inputValue'\n  | 'onChange'\n  | 'format'\n  | 'validationError'\n  | 'format'\n  | 'forwardedRef';\n\nexport interface PureDateInputProps\n  extends ExtendMui<BaseTextFieldProps, 'variant' | 'onError' | 'value'> {\n  /** Pass material-ui text field variant down, bypass internal variant prop */\n  inputVariant?: TextFieldProps['variant'];\n  /** Override input component */\n  TextFieldComponent?: React.ComponentType<TextFieldProps>;\n  InputProps?: TextFieldProps['InputProps'];\n  inputProps?: TextFieldProps['inputProps'];\n  onBlur?: TextFieldProps['onBlur'];\n  onFocus?: TextFieldProps['onFocus'];\n  inputValue: string;\n  validationError?: React.ReactNode;\n  openPicker: () => void;\n}\n\nexport const PureDateInput: React.FC<PureDateInputProps> = ({\n  inputValue,\n  inputVariant,\n  validationError,\n  InputProps,\n  openPicker: onOpen,\n  TextFieldComponent = TextField,\n  ...other\n}) => {\n  const PureDateInputProps = React.useMemo(\n    () => ({\n      ...InputProps,\n      readOnly: true,\n    }),\n    [InputProps]\n  );\n\n  return (\n    <TextFieldComponent\n      error={Boolean(validationError)}\n      helperText={validationError}\n      {...other}\n      // do not overridable\n      onClick={onOpen}\n      value={inputValue}\n      variant={inputVariant as any}\n      InputProps={PureDateInputProps}\n      onKeyDown={e => {\n        // space\n        if (e.keyCode === 32) {\n          e.stopPropagation();\n          onOpen();\n        }\n      }}\n    />\n  );\n};\n\nPureDateInput.displayName = 'PureDateInput';\n","import React from 'react';\nimport SvgIcon, { SvgIconProps } from '@material-ui/core/SvgIcon';\n\nexport const KeyboardIcon: React.SFC<SvgIconProps> = props => {\n  return (\n    <SvgIcon {...props}>\n      <path d=\"M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z\" />\n      <path fill=\"none\" d=\"M0 0h24v24H0z\" />\n    </SvgIcon>\n  );\n};\n","import { Omit } from './utils';\nimport { DatePickerProps } from '..';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { ParsableDate } from '../constants/prop-types';\nimport { BasePickerProps } from '../typings/BasePicker';\n\nexport const getDisplayDate = (\n  value: ParsableDate,\n  format: string,\n  utils: IUtils<any>,\n  isEmpty: boolean,\n  { invalidLabel, emptyLabel, labelFunc }: Omit<BasePickerProps, 'value' | 'onChange'>\n) => {\n  const date = utils.date(value);\n  if (labelFunc) {\n    return labelFunc(isEmpty ? null : date, invalidLabel!);\n  }\n\n  if (isEmpty) {\n    return emptyLabel || '';\n  }\n\n  return utils.isValid(date) ? utils.format(date, format) : invalidLabel!;\n};\n\nexport interface BaseValidationProps {\n  /**\n   * Message, appearing when date cannot be parsed\n   * @default 'Invalid Date Format'\n   */\n  invalidDateMessage?: React.ReactNode;\n}\n\nexport interface DateValidationProps extends BaseValidationProps {\n  /**\n   * Error message, shown if date is less then minimal date\n   * @default 'Date should not be before minimal date'\n   */\n  minDateMessage?: React.ReactNode;\n  /**\n   * Error message, shown if date is more then maximal date\n   * @default 'Date should not be after maximal date'\n   */\n  maxDateMessage?: React.ReactNode;\n}\n\nconst getComparisonMaxDate = (utils: IUtils<any>, strictCompareDates: boolean, date: Date) => {\n  if (strictCompareDates) {\n    return date;\n  }\n\n  return utils.endOfDay(date);\n};\n\nconst getComparisonMinDate = (utils: IUtils<any>, strictCompareDates: boolean, date: Date) => {\n  if (strictCompareDates) {\n    return date;\n  }\n\n  return utils.startOfDay(date);\n};\n\nexport const validate = (\n  value: ParsableDate,\n  utils: IUtils<any>,\n  {\n    maxDate,\n    minDate,\n    disablePast,\n    disableFuture,\n    maxDateMessage,\n    minDateMessage,\n    invalidDateMessage,\n    strictCompareDates,\n  }: Omit<DatePickerProps, 'views' | 'openTo'> // DateTimePicker doesn't support\n): React.ReactNode => {\n  const parsedValue = utils.date(value);\n\n  // if null - do not show error\n  if (value === null) {\n    return '';\n  }\n\n  if (!utils.isValid(value)) {\n    return invalidDateMessage;\n  }\n\n  if (\n    maxDate &&\n    utils.isAfter(\n      parsedValue,\n      getComparisonMaxDate(utils, !!strictCompareDates, utils.date(maxDate))\n    )\n  ) {\n    return maxDateMessage;\n  }\n\n  if (\n    disableFuture &&\n    utils.isAfter(parsedValue, getComparisonMaxDate(utils, !!strictCompareDates, utils.date()))\n  ) {\n    return maxDateMessage;\n  }\n\n  if (\n    minDate &&\n    utils.isBefore(\n      parsedValue,\n      getComparisonMinDate(utils, !!strictCompareDates, utils.date(minDate))\n    )\n  ) {\n    return minDateMessage;\n  }\n  if (\n    disablePast &&\n    utils.isBefore(parsedValue, getComparisonMinDate(utils, !!strictCompareDates, utils.date()))\n  ) {\n    return minDateMessage;\n  }\n\n  return '';\n};\n\nexport function pick12hOr24hFormat(\n  userFormat: string | undefined,\n  ampm: boolean | undefined = true,\n  formats: { '12h': string; '24h': string }\n) {\n  if (userFormat) {\n    return userFormat;\n  }\n\n  return ampm ? formats['12h'] : formats['24h'];\n}\n\nexport function makeMaskFromFormat(format: string, numberMaskChar: string) {\n  return format.replace(/[a-z]/gi, numberMaskChar);\n}\n\nexport const maskedDateFormatter = (mask: string, numberMaskChar: string, refuse: RegExp) => (\n  value: string\n) => {\n  let result = '';\n  const parsed = value.replace(refuse, '');\n\n  if (parsed === '') {\n    return parsed;\n  }\n\n  let i = 0;\n  let n = 0;\n  while (i < mask.length) {\n    const maskChar = mask[i];\n    if (maskChar === numberMaskChar && n < parsed.length) {\n      const parsedChar = parsed[n];\n      result += parsedChar;\n      n += 1;\n    } else {\n      result += maskChar;\n    }\n    i += 1;\n  }\n\n  return result;\n};\n","import * as React from 'react';\nimport IconButton, { IconButtonProps } from '@material-ui/core/IconButton';\nimport InputAdornment, { InputAdornmentProps } from '@material-ui/core/InputAdornment';\nimport TextField, { BaseTextFieldProps, TextFieldProps } from '@material-ui/core/TextField';\nimport { Rifm } from 'rifm';\nimport { ExtendMui } from '../typings/extendMui';\nimport { KeyboardIcon } from './icons/KeyboardIcon';\nimport { makeMaskFromFormat, maskedDateFormatter } from '../_helpers/text-field-helper';\n\nexport interface KeyboardDateInputProps\n  extends ExtendMui<BaseTextFieldProps, 'variant' | 'onError' | 'value'> {\n  format: string;\n  onChange: (value: string | null) => void;\n  openPicker: () => void;\n  validationError?: React.ReactNode;\n  inputValue: string;\n  inputProps?: TextFieldProps['inputProps'];\n  InputProps?: TextFieldProps['InputProps'];\n  onBlur?: TextFieldProps['onBlur'];\n  onFocus?: TextFieldProps['onFocus'];\n  /** Override input component */\n  TextFieldComponent?: React.ComponentType<TextFieldProps>;\n  /** Icon displaying for open picker button */\n  keyboardIcon?: React.ReactNode;\n  /** Pass material-ui text field variant down, bypass internal variant prop */\n  inputVariant?: TextFieldProps['variant'];\n  /**\n   * Custom mask. Can be used to override generate from format. (e.g. __/__/____ __:__)\n   */\n  mask?: string;\n  /**\n   * Char string that will be replaced with number (for \"_\" mask will be \"__/__/____\")\n   * @default '_'\n   */\n  maskChar?: string;\n  /**\n   * Refuse values regexp\n   * @default /[^\\d]+/gi\n   */\n  refuse?: RegExp;\n  /**\n   * Props to pass to keyboard input adornment\n   * @type {Partial<InputAdornmentProps>}\n   */\n  InputAdornmentProps?: Partial<InputAdornmentProps>;\n  /**\n   * Props to pass to keyboard adornment button\n   * @type {Partial<IconButtonProps>}\n   */\n  KeyboardButtonProps?: Partial<IconButtonProps>;\n  /** Custom formatter to be passed into Rifm component */\n  rifmFormatter?: (str: string) => string;\n}\n\nexport const KeyboardDateInput: React.FunctionComponent<KeyboardDateInputProps> = ({\n  inputValue,\n  inputVariant,\n  validationError,\n  KeyboardButtonProps,\n  InputAdornmentProps,\n  openPicker: onOpen,\n  onChange,\n  InputProps,\n  mask,\n  maskChar = '_',\n  refuse = /[^\\d]+/gi,\n  format,\n  keyboardIcon,\n  disabled,\n  rifmFormatter,\n  TextFieldComponent = TextField,\n  ...other\n}) => {\n  const inputMask = mask || makeMaskFromFormat(format, maskChar);\n  // prettier-ignore\n  const formatter = React.useMemo(\n    () => maskedDateFormatter(inputMask, maskChar, refuse),\n    [inputMask, maskChar, refuse]\n  );\n\n  const position =\n    InputAdornmentProps && InputAdornmentProps.position ? InputAdornmentProps.position : 'end';\n\n  const handleChange = (text: string) => {\n    const finalString = text === '' || text === inputMask ? null : text;\n    onChange(finalString);\n  };\n\n  return (\n    <Rifm\n      key={inputMask}\n      value={inputValue}\n      onChange={handleChange}\n      refuse={refuse}\n      format={rifmFormatter || formatter}\n    >\n      {({ onChange, value }) => (\n        <TextFieldComponent\n          disabled={disabled}\n          error={Boolean(validationError)}\n          helperText={validationError}\n          {...other}\n          value={value}\n          onChange={onChange}\n          variant={inputVariant as any}\n          InputProps={{\n            ...InputProps,\n            [`${position}Adornment`]: (\n              <InputAdornment position={position} {...InputAdornmentProps}>\n                <IconButton disabled={disabled} {...KeyboardButtonProps} onClick={onOpen}>\n                  {keyboardIcon}\n                </IconButton>\n              </InputAdornment>\n            ),\n          }}\n        />\n      )}\n    </Rifm>\n  );\n};\n\nKeyboardDateInput.defaultProps = {\n  keyboardIcon: <KeyboardIcon />,\n};\n\nexport default KeyboardDateInput;\n","import { useUtils } from './useUtils';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { useOpenState } from './useOpenState';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { BasePickerProps } from '../../typings/BasePicker';\nimport { getDisplayDate, validate } from '../../_helpers/text-field-helper';\nimport { useCallback, useDebugValue, useEffect, useMemo, useState, useRef } from 'react';\n\nexport interface StateHookOptions {\n  getDefaultFormat: () => string;\n}\n\nconst useValueToDate = (\n  utils: IUtils<MaterialUiPickersDate>,\n  { value, initialFocusedDate }: BasePickerProps\n) => {\n  const nowRef = useRef(utils.date());\n  const date = utils.date(value || initialFocusedDate || nowRef.current);\n\n  return date && utils.isValid(date) ? date : nowRef.current;\n};\n\nfunction useDateValues(props: BasePickerProps, options: StateHookOptions) {\n  const utils = useUtils();\n  const date = useValueToDate(utils, props);\n  const format = props.format || options.getDefaultFormat();\n\n  return { date, format };\n}\n\nexport function usePickerState(props: BasePickerProps, options: StateHookOptions) {\n  const { autoOk, disabled, readOnly, onAccept, onChange, onError, value, variant } = props;\n\n  const utils = useUtils();\n  const { isOpen, setIsOpen } = useOpenState(props);\n  const { date, format } = useDateValues(props, options);\n  const [pickerDate, setPickerDate] = useState(date);\n\n  useEffect(() => {\n    // if value was changed in closed state - treat it as accepted\n    if (!isOpen && !utils.isEqual(pickerDate, date)) {\n      setPickerDate(date);\n    }\n  }, [date, isOpen, pickerDate, utils]);\n\n  const acceptDate = useCallback(\n    (acceptedDate: MaterialUiPickersDate) => {\n      onChange(acceptedDate);\n      if (onAccept) {\n        onAccept(acceptedDate);\n      }\n\n      setIsOpen(false);\n    },\n    [onAccept, onChange, setIsOpen]\n  );\n\n  const wrapperProps = useMemo(\n    () => ({\n      format,\n      open: isOpen,\n      onClear: () => acceptDate(null),\n      onAccept: () => acceptDate(pickerDate),\n      onSetToday: () => setPickerDate(utils.date()),\n      onDismiss: () => {\n        setIsOpen(false);\n      },\n    }),\n    [acceptDate, format, isOpen, pickerDate, setIsOpen, utils]\n  );\n\n  const pickerProps = useMemo(\n    () => ({\n      date: pickerDate,\n      onChange: (newDate: MaterialUiPickersDate, isFinish = true) => {\n        setPickerDate(newDate);\n\n        if (isFinish && autoOk) {\n          acceptDate(newDate);\n          return;\n        }\n\n        // simulate autoOk, but do not close the modal\n        if (variant === 'inline' || variant === 'static') {\n          onChange(newDate);\n          onAccept && onAccept(newDate);\n        }\n      },\n    }),\n    [acceptDate, autoOk, onAccept, onChange, pickerDate, variant]\n  );\n\n  const validationError = validate(value, utils, props);\n  useEffect(() => {\n    if (onError) {\n      onError(validationError, value);\n    }\n  }, [onError, validationError, value]);\n\n  const inputValue = getDisplayDate(date, format, utils, value === null, props);\n  const inputProps = useMemo(\n    () => ({\n      inputValue,\n      validationError,\n      openPicker: () => !readOnly && !disabled && setIsOpen(true),\n    }),\n    [disabled, inputValue, readOnly, setIsOpen, validationError]\n  );\n\n  const pickerState = { pickerProps, inputProps, wrapperProps };\n\n  useDebugValue(pickerState);\n  return pickerState;\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport { BasePickerProps } from '../../typings/BasePicker';\nimport { useCallback, useState, Dispatch, SetStateAction } from 'react';\n\nexport function useOpenState({ open, onOpen, onClose }: BasePickerProps) {\n  let setIsOpenState: null | Dispatch<SetStateAction<boolean>> = null;\n  if (open === undefined || open === null) {\n    // The component is uncontrolled, so we need to give it its own state.\n    [open, setIsOpenState] = useState<boolean>(false);\n  }\n\n  // prettier-ignore\n  const setIsOpen = useCallback((newIsOpen: boolean) => {\n    setIsOpenState && setIsOpenState(newIsOpen);\n\n    return newIsOpen\n      ? onOpen && onOpen()\n      : onClose && onClose();\n  }, [onOpen, onClose, setIsOpenState]);\n\n  return { isOpen: open, setIsOpen };\n}\n","import * as React from 'react';\nimport { BasePickerProps } from '../typings/BasePicker';\nimport { Picker, ToolbarComponentProps } from './Picker';\nimport { ExtendWrapper, Wrapper } from '../wrappers/Wrapper';\nimport { PureDateInputProps } from '../_shared/PureDateInput';\nimport { DateValidationProps } from '../_helpers/text-field-helper';\nimport { KeyboardDateInputProps } from '../_shared/KeyboardDateInput';\nimport { StateHookOptions, usePickerState } from '../_shared/hooks/usePickerState';\nimport {\n  BaseKeyboardPickerProps,\n  useKeyboardPickerState,\n} from '../_shared/hooks/useKeyboardPickerState';\n\nexport type WithKeyboardInputProps = DateValidationProps &\n  BaseKeyboardPickerProps &\n  ExtendWrapper<KeyboardDateInputProps>;\n\nexport type WithPureInputProps = DateValidationProps &\n  BasePickerProps &\n  ExtendWrapper<PureDateInputProps>;\n\nexport interface MakePickerOptions<T extends any> {\n  Input: any;\n  useState: typeof usePickerState | typeof useKeyboardPickerState;\n  useOptions: (props: any) => StateHookOptions;\n  getCustomProps?: (props: T) => Partial<T>;\n  DefaultToolbarComponent: React.ComponentType<ToolbarComponentProps>;\n}\n\nexport function makePickerWithState<T extends any>({\n  Input,\n  useState,\n  useOptions,\n  getCustomProps,\n  DefaultToolbarComponent,\n}: MakePickerOptions<T>): React.FC<T> {\n  function PickerWithState(props: T) {\n    const {\n      allowKeyboardControl,\n      ampm,\n      animateYearScrolling,\n      autoOk,\n      dateRangeIcon,\n      disableFuture,\n      disablePast,\n      disableToolbar,\n      emptyLabel,\n      format,\n      forwardedRef,\n      hideTabs,\n      initialFocusedDate,\n      invalidDateMessage,\n      invalidLabel,\n      labelFunc,\n      leftArrowButtonProps,\n      leftArrowIcon,\n      loadingIndicator,\n      maxDate,\n      maxDateMessage,\n      minDate,\n      minDateMessage,\n      minutesStep,\n      onAccept,\n      onChange,\n      onClose,\n      onMonthChange,\n      onOpen,\n      onYearChange,\n      openTo,\n      orientation,\n      renderDay,\n      rightArrowButtonProps,\n      rightArrowIcon,\n      shouldDisableDate,\n      strictCompareDates,\n      timeIcon,\n      ToolbarComponent = DefaultToolbarComponent,\n      value,\n      variant,\n      views,\n      ...other\n    } = props;\n\n    const injectedProps = getCustomProps ? getCustomProps(props) : {};\n\n    const options = useOptions(props);\n    const { pickerProps, inputProps, wrapperProps } = useState(props as any, options);\n\n    return (\n      <Wrapper\n        variant={variant}\n        InputComponent={Input}\n        DateInputProps={inputProps}\n        {...injectedProps}\n        {...wrapperProps}\n        {...other}\n      >\n        <Picker\n          {...pickerProps}\n          allowKeyboardControl={allowKeyboardControl}\n          ampm={ampm}\n          animateYearScrolling={animateYearScrolling}\n          dateRangeIcon={dateRangeIcon}\n          disableFuture={disableFuture}\n          disablePast={disablePast}\n          disableToolbar={disableToolbar}\n          hideTabs={hideTabs}\n          leftArrowButtonProps={leftArrowButtonProps}\n          leftArrowIcon={leftArrowIcon}\n          loadingIndicator={loadingIndicator}\n          maxDate={maxDate}\n          minDate={minDate}\n          minutesStep={minutesStep}\n          onMonthChange={onMonthChange}\n          onYearChange={onYearChange}\n          openTo={openTo}\n          orientation={orientation}\n          renderDay={renderDay}\n          rightArrowButtonProps={rightArrowButtonProps}\n          rightArrowIcon={rightArrowIcon}\n          shouldDisableDate={shouldDisableDate}\n          strictCompareDates={strictCompareDates}\n          timeIcon={timeIcon}\n          ToolbarComponent={ToolbarComponent}\n          views={views}\n        />\n      </Wrapper>\n    );\n  }\n\n  return PickerWithState;\n}\n","import * as React from 'react';\nimport clsx from 'clsx';\nimport ToolbarButton from '../_shared/ToolbarButton';\nimport PickerToolbar from '../_shared/PickerToolbar';\nimport { useUtils } from '../_shared/hooks/useUtils';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ToolbarComponentProps } from '../Picker/Picker';\nimport { isYearAndMonthViews, isYearOnlyView } from '../_helpers/date-utils';\n\nexport const useStyles = makeStyles(\n  {\n    toolbar: {\n      flexDirection: 'column',\n      alignItems: 'flex-start',\n    },\n    toolbarLandscape: {\n      padding: 16,\n    },\n    dateLandscape: {\n      marginRight: 16,\n    },\n  },\n  { name: 'MuiPickersDatePickerRoot' }\n);\n\nexport const DatePickerToolbar: React.FC<ToolbarComponentProps> = ({\n  date,\n  views,\n  setOpenView,\n  isLandscape,\n  openView,\n}) => {\n  const utils = useUtils();\n  const classes = useStyles();\n\n  const isYearOnly = React.useMemo(() => isYearOnlyView(views as any), [views]);\n  const isYearAndMonth = React.useMemo(() => isYearAndMonthViews(views as any), [views]);\n\n  return (\n    <PickerToolbar\n      isLandscape={isLandscape}\n      className={clsx({\n        [classes.toolbar]: !isYearOnly,\n        [classes.toolbarLandscape]: isLandscape,\n      })}\n    >\n      <ToolbarButton\n        variant={isYearOnly ? 'h3' : 'subtitle1'}\n        onClick={() => setOpenView('year')}\n        selected={openView === 'year'}\n        label={utils.getYearText(date)}\n      />\n\n      {!isYearOnly && !isYearAndMonth && (\n        <ToolbarButton\n          variant=\"h4\"\n          selected={openView === 'date'}\n          onClick={() => setOpenView('date')}\n          align={isLandscape ? 'left' : 'center'}\n          label={utils.getDatePickerHeaderText(date)}\n          className={clsx({ [classes.dateLandscape]: isLandscape })}\n        />\n      )}\n\n      {isYearAndMonth && (\n        <ToolbarButton\n          variant=\"h4\"\n          onClick={() => setOpenView('month')}\n          selected={openView === 'month'}\n          label={utils.getMonthText(date)}\n        />\n      )}\n    </PickerToolbar>\n  );\n};\n","import { useUtils } from '../_shared/hooks/useUtils';\nimport { MaterialUiPickersDate } from '../typings/date';\nimport { DatePickerToolbar } from './DatePickerToolbar';\nimport { PureDateInput } from '../_shared/PureDateInput';\nimport { getFormatByViews } from '../_helpers/date-utils';\nimport { KeyboardDateInput } from '../_shared/KeyboardDateInput';\nimport { OutterCalendarProps } from '../views/Calendar/Calendar';\nimport { usePickerState } from '../_shared/hooks/usePickerState';\nimport { datePickerDefaultProps, ParsableDate } from '../constants/prop-types';\nimport { useKeyboardPickerState } from '../_shared/hooks/useKeyboardPickerState';\nimport {\n  WithKeyboardInputProps,\n  WithPureInputProps,\n  makePickerWithState,\n} from '../Picker/makePickerWithState';\n\nexport type DatePickerView = 'year' | 'date' | 'month';\n\nexport interface BaseDatePickerProps extends OutterCalendarProps {\n  /**\n   * Min selectable date\n   * @default Date(1900-01-01)\n   */\n  minDate?: ParsableDate;\n  /**\n   * Max selectable date\n   * @default Date(2100-01-01)\n   */\n  maxDate?: ParsableDate;\n\n  /**\n   * Compare dates by the exact timestamp, instead of start/end of date\n   * @default false\n   */\n  strictCompareDates?: boolean;\n\n  /**\n   * Disable past dates\n   * @default false\n   */\n  disablePast?: boolean;\n  /**\n   * Disable future dates\n   * @default false\n   */\n  disableFuture?: boolean;\n  /**\n   * To animate scrolling to current year (using scrollIntoView)\n   * @default false\n   */\n  animateYearScrolling?: boolean;\n  /** Callback firing on year change @DateIOType */\n  onYearChange?: (date: MaterialUiPickersDate) => void;\n}\n\nexport interface DatePickerViewsProps extends BaseDatePickerProps {\n  /**\n   * Array of views to show\n   * @type {Array<\"year\" | \"date\" | \"month\">}\n   */\n  views?: DatePickerView[];\n  /** First view to show in DatePicker */\n  openTo?: DatePickerView;\n}\n\nexport type DatePickerProps = WithPureInputProps & DatePickerViewsProps;\n\nexport type KeyboardDatePickerProps = WithKeyboardInputProps & DatePickerViewsProps;\n\nconst defaultProps = {\n  ...datePickerDefaultProps,\n  openTo: 'date' as DatePickerView,\n  views: ['year', 'date'] as DatePickerView[],\n};\n\nfunction useOptions(props: DatePickerViewsProps) {\n  const utils = useUtils();\n\n  return {\n    getDefaultFormat: () => getFormatByViews(props.views!, utils),\n  };\n}\n\nexport const DatePicker = makePickerWithState<DatePickerProps>({\n  useOptions,\n  Input: PureDateInput,\n  useState: usePickerState,\n  DefaultToolbarComponent: DatePickerToolbar,\n});\n\nexport const KeyboardDatePicker = makePickerWithState<KeyboardDatePickerProps>({\n  useOptions,\n  Input: KeyboardDateInput,\n  useState: useKeyboardPickerState,\n  DefaultToolbarComponent: DatePickerToolbar,\n});\n\nDatePicker.defaultProps = defaultProps;\n\nKeyboardDatePicker.defaultProps = defaultProps;\n","import { useUtils } from './useUtils';\nimport { Omit } from '../../_helpers/utils';\nimport { IUtils } from '@date-io/core/IUtils';\nimport { BasePickerProps } from '../../typings/BasePicker';\nimport { MaterialUiPickersDate } from '../../typings/date';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { getDisplayDate } from '../../_helpers/text-field-helper';\nimport { StateHookOptions, usePickerState } from './usePickerState';\n\nexport interface BaseKeyboardPickerProps extends Omit<BasePickerProps, 'onChange'> {\n  /** String value for controlling value with pure input string. Overrides value prop */\n  inputValue?: string;\n  /** Keyboard onChange callback @DateIOType */\n  onChange: (date: MaterialUiPickersDate | null, value?: string | null) => void;\n}\n\nfunction parseInputString(value: string, utils: IUtils<any>, format: string) {\n  try {\n    return utils.parse(value, format);\n  } catch {\n    return null;\n  }\n}\n\nexport function useKeyboardPickerState(props: BaseKeyboardPickerProps, options: StateHookOptions) {\n  const { format = options.getDefaultFormat(), inputValue, onChange, value } = props;\n  const utils = useUtils();\n\n  const displayDate = getDisplayDate(value, format, utils, value === null, props);\n  const [innerInputValue, setInnerInputValue] = useState(displayDate);\n  const dateValue = inputValue ? parseInputString(inputValue, utils, format) : value;\n\n  useEffect(() => {\n    if (value === null || utils.isValid(value)) {\n      setInnerInputValue(displayDate);\n    }\n  }, [displayDate, setInnerInputValue, utils, value]);\n\n  const handleKeyboardChange = useCallback(\n    (date: MaterialUiPickersDate) => {\n      onChange(date, date === null ? null : utils.format(date, format));\n    },\n    [format, onChange, utils]\n  );\n\n  const { inputProps: innerInputProps, wrapperProps, pickerProps } = usePickerState(\n    // Extend props interface\n    { ...props, value: dateValue, onChange: handleKeyboardChange },\n    options\n  );\n\n  const inputProps = useMemo(\n    () => ({\n      ...innerInputProps, // reuse validation and open/close logic\n      format: wrapperProps.format,\n      inputValue: inputValue || innerInputValue,\n      onChange: (value: string | null) => {\n        setInnerInputValue(value || '');\n        const date = value === null ? null : utils.parse(value, wrapperProps.format);\n\n        onChange(date, value);\n      },\n    }),\n    [innerInputProps, innerInputValue, inputValue, onChange, utils, wrapperProps.format]\n  );\n\n  return {\n    inputProps,\n    wrapperProps,\n    pickerProps,\n  };\n}\n","// Based on https://github.com/react-bootstrap/dom-helpers/blob/master/src/util/inDOM.js\r\nvar inDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\r\nvar cachedType;\r\nexport function _setScrollType(type) {\r\n    cachedType = type;\r\n}\r\n// Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type\r\nexport function detectScrollType() {\r\n    if (cachedType) {\r\n        return cachedType;\r\n    }\r\n    if (!inDOM || !window.document.body) {\r\n        return 'indeterminate';\r\n    }\r\n    var dummy = window.document.createElement('div');\r\n    dummy.appendChild(document.createTextNode('ABCD'));\r\n    dummy.dir = 'rtl';\r\n    dummy.style.fontSize = '14px';\r\n    dummy.style.width = '4px';\r\n    dummy.style.height = '1px';\r\n    dummy.style.position = 'absolute';\r\n    dummy.style.top = '-1000px';\r\n    dummy.style.overflow = 'scroll';\r\n    document.body.appendChild(dummy);\r\n    cachedType = 'reverse';\r\n    if (dummy.scrollLeft > 0) {\r\n        cachedType = 'default';\r\n    }\r\n    else {\r\n        dummy.scrollLeft = 2;\r\n        if (dummy.scrollLeft < 2) {\r\n            cachedType = 'negative';\r\n        }\r\n    }\r\n    document.body.removeChild(dummy);\r\n    return cachedType;\r\n}\r\n// Based on https://stackoverflow.com/a/24394376\r\nexport function getNormalizedScrollLeft(element, direction) {\r\n    var scrollLeft = element.scrollLeft;\r\n    // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior\r\n    if (direction !== 'rtl') {\r\n        return scrollLeft;\r\n    }\r\n    var type = detectScrollType();\r\n    if (type === 'indeterminate') {\r\n        return Number.NaN;\r\n    }\r\n    switch (type) {\r\n        case 'negative':\r\n            return element.scrollWidth - element.clientWidth + scrollLeft;\r\n        case 'reverse':\r\n            return element.scrollWidth - element.clientWidth - scrollLeft;\r\n    }\r\n    return scrollLeft;\r\n}\r\nexport function setNormalizedScrollLeft(element, scrollLeft, direction) {\r\n    // Perform the calculations only when direction is rtl to avoid messing up the ltr behavior\r\n    if (direction !== 'rtl') {\r\n        element.scrollLeft = scrollLeft;\r\n        return;\r\n    }\r\n    var type = detectScrollType();\r\n    if (type === 'indeterminate') {\r\n        return;\r\n    }\r\n    switch (type) {\r\n        case 'negative':\r\n            element.scrollLeft = element.clientWidth - element.scrollWidth + scrollLeft;\r\n            break;\r\n        case 'reverse':\r\n            element.scrollLeft = element.scrollWidth - element.clientWidth - scrollLeft;\r\n            break;\r\n        default:\r\n            element.scrollLeft = scrollLeft;\r\n            break;\r\n    }\r\n}\r\n","function easeInOutSin(time) {\n  return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\n\nexport default function animate(property, element, to) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var cb = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {};\n  var _options$ease = options.ease,\n      ease = _options$ease === void 0 ? easeInOutSin : _options$ease,\n      _options$duration = options.duration,\n      duration = _options$duration === void 0 ? 300 : _options$duration;\n  var start = null;\n  var from = element[property];\n  var cancelled = false;\n\n  var cancel = function cancel() {\n    cancelled = true;\n  };\n\n  var step = function step(timestamp) {\n    if (cancelled) {\n      cb(new Error('Animation cancelled'));\n      return;\n    }\n\n    if (start === null) {\n      start = timestamp;\n    }\n\n    var time = Math.min(1, (timestamp - start) / duration);\n    element[property] = ease(time) * (to - from) + from;\n\n    if (time >= 1) {\n      requestAnimationFrame(function () {\n        cb(null);\n      });\n      return;\n    }\n\n    requestAnimationFrame(step);\n  };\n\n  if (from === to) {\n    cb(new Error('Element already at target position'));\n    return cancel;\n  }\n\n  requestAnimationFrame(step);\n  return cancel;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nvar styles = {\n  width: 99,\n  height: 99,\n  position: 'absolute',\n  top: -9999,\n  overflow: 'scroll'\n};\n/**\n * @ignore - internal component.\n * The component is originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\n\nexport default function ScrollbarSize(props) {\n  var onChange = props.onChange,\n      other = _objectWithoutProperties(props, [\"onChange\"]);\n\n  var scrollbarHeight = React.useRef();\n  var nodeRef = React.useRef(null);\n\n  var setMeasurements = function setMeasurements() {\n    scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n  };\n\n  React.useEffect(function () {\n    var handleResize = debounce(function () {\n      var prevHeight = scrollbarHeight.current;\n      setMeasurements();\n\n      if (prevHeight !== scrollbarHeight.current) {\n        onChange(scrollbarHeight.current);\n      }\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [onChange]);\n  React.useEffect(function () {\n    setMeasurements();\n    onChange(scrollbarHeight.current);\n  }, [onChange]);\n  return React.createElement(\"div\", _extends({\n    style: styles,\n    ref: nodeRef\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? ScrollbarSize.propTypes = {\n  onChange: PropTypes.func.isRequired\n} : void 0;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    root: {\n      position: 'absolute',\n      height: 2,\n      bottom: 0,\n      width: '100%',\n      transition: theme.transitions.create()\n    },\n    colorPrimary: {\n      backgroundColor: theme.palette.primary.main\n    },\n    colorSecondary: {\n      backgroundColor: theme.palette.secondary.main\n    },\n    vertical: {\n      height: '100%',\n      width: 2,\n      right: 0\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nvar TabIndicator = React.forwardRef(function TabIndicator(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      color = props.color,\n      orientation = props.orientation,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"orientation\"]);\n\n  return React.createElement(\"span\", _extends({\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(color))], className, {\n      vertical: classes.vertical\n    }[orientation]),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabIndicator.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   * The color of the tab indicator.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']).isRequired,\n\n  /**\n   * The tabs orientation (layout flow direction).\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateTabIndicator'\n})(TabIndicator);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n\n/* eslint-disable jsx-a11y/aria-role */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nexport var styles = {\n  root: {\n    width: 40,\n    flexShrink: 0\n  },\n  vertical: {\n    width: '100%',\n    height: 40,\n    '& svg': {\n      transform: 'rotate(90deg)'\n    }\n  }\n};\n/**\n * @ignore - internal component.\n */\n\nvar _ref = React.createElement(KeyboardArrowLeft, {\n  fontSize: \"small\"\n});\n\nvar _ref2 = React.createElement(KeyboardArrowRight, {\n  fontSize: \"small\"\n});\n\nvar TabScrollButton = React.forwardRef(function TabScrollButton(props, ref) {\n  var classes = props.classes,\n      classNameProp = props.className,\n      direction = props.direction,\n      orientation = props.orientation,\n      visible = props.visible,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"direction\", \"orientation\", \"visible\"]);\n\n  var className = clsx(classes.root, classNameProp, {\n    vertical: classes.vertical\n  }[orientation]);\n\n  if (!visible) {\n    return React.createElement(\"div\", {\n      className: className\n    });\n  }\n\n  return React.createElement(ButtonBase, _extends({\n    component: \"div\",\n    className: className,\n    ref: ref,\n    role: null,\n    tabIndex: null\n  }, other), direction === 'left' ? _ref : _ref2);\n});\nprocess.env.NODE_ENV !== \"production\" ? TabScrollButton.propTypes = {\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Which direction should the button indicate?\n   */\n  direction: PropTypes.oneOf(['left', 'right']).isRequired,\n\n  /**\n   * The tabs orientation (layout flow direction).\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired,\n\n  /**\n   * Should the button be present or just consume space.\n   */\n  visible: PropTypes.bool.isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateTabScrollButton'\n})(TabScrollButton);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport debounce from '../utils/debounce';\nimport ownerWindow from '../utils/ownerWindow';\nimport { getNormalizedScrollLeft, detectScrollType } from 'normalize-scroll-left';\nimport animate from '../internal/animate';\nimport ScrollbarSize from './ScrollbarSize';\nimport withStyles from '../styles/withStyles';\nimport TabIndicator from './TabIndicator';\nimport TabScrollButton from './TabScrollButton';\nimport useEventCallback from '../utils/useEventCallback';\nimport useTheme from '../styles/useTheme';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      overflow: 'hidden',\n      minHeight: 48,\n      WebkitOverflowScrolling: 'touch',\n      // Add iOS momentum scrolling.\n      display: 'flex'\n    },\n\n    /* Styles applied to the root element if `orientation=\"vertical\"`. */\n    vertical: {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the flex container element. */\n    flexContainer: {\n      display: 'flex'\n    },\n\n    /* Styles applied to the flex container element if `orientation=\"vertical\"`. */\n    flexContainerVertical: {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the flex container element if `centered={true}` & `!variant=\"scrollable\"`. */\n    centered: {\n      justifyContent: 'center'\n    },\n\n    /* Styles applied to the tablist element. */\n    scroller: {\n      position: 'relative',\n      display: 'inline-block',\n      flex: '1 1 auto',\n      whiteSpace: 'nowrap'\n    },\n\n    /* Styles applied to the tablist element if `!variant=\"scrollable\"`\b\b\b. */\n    fixed: {\n      overflowX: 'hidden',\n      width: '100%'\n    },\n\n    /* Styles applied to the tablist element if `variant=\"scrollable\"`. */\n    scrollable: {\n      overflowX: 'scroll',\n      // Hide dimensionless scrollbar on MacOS\n      scrollbarWidth: 'none',\n      // Firefox\n      '&::-webkit-scrollbar': {\n        display: 'none' // Safari + Chrome\n\n      }\n    },\n\n    /* Styles applied to the `ScrollButtonComponent` component. */\n    scrollButtons: {},\n\n    /* Styles applied to the `ScrollButtonComponent` component if `scrollButtons=\"auto\"` or scrollButtons=\"desktop\"`. */\n    scrollButtonsDesktop: _defineProperty({}, theme.breakpoints.down('xs'), {\n      display: 'none'\n    }),\n\n    /* Styles applied to the `TabIndicator` component. */\n    indicator: {}\n  };\n};\nvar Tabs = React.forwardRef(function Tabs(props, ref) {\n  var action = props.action,\n      _props$centered = props.centered,\n      centered = _props$centered === void 0 ? false : _props$centered,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      _props$indicatorColor = props.indicatorColor,\n      indicatorColor = _props$indicatorColor === void 0 ? 'secondary' : _props$indicatorColor,\n      onChange = props.onChange,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      _props$ScrollButtonCo = props.ScrollButtonComponent,\n      ScrollButtonComponent = _props$ScrollButtonCo === void 0 ? TabScrollButton : _props$ScrollButtonCo,\n      _props$scrollButtons = props.scrollButtons,\n      scrollButtons = _props$scrollButtons === void 0 ? 'auto' : _props$scrollButtons,\n      _props$TabIndicatorPr = props.TabIndicatorProps,\n      TabIndicatorProps = _props$TabIndicatorPr === void 0 ? {} : _props$TabIndicatorPr,\n      _props$textColor = props.textColor,\n      textColor = _props$textColor === void 0 ? 'inherit' : _props$textColor,\n      value = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"action\", \"centered\", \"children\", \"classes\", \"className\", \"component\", \"indicatorColor\", \"onChange\", \"orientation\", \"ScrollButtonComponent\", \"scrollButtons\", \"TabIndicatorProps\", \"textColor\", \"value\", \"variant\"]);\n\n  var theme = useTheme();\n  var scrollable = variant === 'scrollable';\n  var isRtl = theme.direction === 'rtl';\n  var vertical = orientation === 'vertical';\n  var scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n  var start = vertical ? 'top' : 'left';\n  var end = vertical ? 'bottom' : 'right';\n  var clientSize = vertical ? 'clientHeight' : 'clientWidth';\n  var size = vertical ? 'height' : 'width';\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (centered && scrollable) {\n      console.error('Material-UI: you can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n    }\n  }\n\n  var _React$useState = React.useState(false),\n      mounted = _React$useState[0],\n      setMounted = _React$useState[1];\n\n  var _React$useState2 = React.useState({}),\n      indicatorStyle = _React$useState2[0],\n      setIndicatorStyle = _React$useState2[1];\n\n  var _React$useState3 = React.useState({\n    start: false,\n    end: false\n  }),\n      displayScroll = _React$useState3[0],\n      setDisplayScroll = _React$useState3[1];\n\n  var _React$useState4 = React.useState({\n    overflow: 'hidden',\n    marginBottom: null\n  }),\n      scrollerStyle = _React$useState4[0],\n      setScrollerStyle = _React$useState4[1];\n\n  var valueToIndex = new Map();\n  var tabsRef = React.useRef(null);\n  var childrenWrapperRef = React.useRef(null);\n\n  var getTabsMeta = function getTabsMeta() {\n    var tabsNode = tabsRef.current;\n    var tabsMeta;\n\n    if (tabsNode) {\n      var rect = tabsNode.getBoundingClientRect(); // create a new object with ClientRect class props + scrollLeft\n\n      tabsMeta = {\n        clientWidth: tabsNode.clientWidth,\n        scrollLeft: tabsNode.scrollLeft,\n        scrollTop: tabsNode.scrollTop,\n        scrollLeftNormalized: getNormalizedScrollLeft(tabsNode, theme.direction),\n        scrollWidth: tabsNode.scrollWidth,\n        top: rect.top,\n        bottom: rect.bottom,\n        left: rect.left,\n        right: rect.right\n      };\n    }\n\n    var tabMeta;\n\n    if (tabsNode && value !== false) {\n      var _children = childrenWrapperRef.current.children;\n\n      if (_children.length > 0) {\n        var tab = _children[valueToIndex.get(value)];\n\n        if (process.env.NODE_ENV !== 'production') {\n          if (!tab) {\n            console.error([\"Material-UI: the value provided `\".concat(value, \"` to the Tabs component is invalid.\"), 'None of the Tabs children have this value.', valueToIndex.keys ? \"You can provide one of the following values: \".concat(Array.from(valueToIndex.keys()).join(', '), \".\") : null].join('\\n'));\n          }\n        }\n\n        tabMeta = tab ? tab.getBoundingClientRect() : null;\n      }\n    }\n\n    return {\n      tabsMeta: tabsMeta,\n      tabMeta: tabMeta\n    };\n  };\n\n  var updateIndicatorState = useEventCallback(function () {\n    var _newIndicatorStyle;\n\n    var _getTabsMeta = getTabsMeta(),\n        tabsMeta = _getTabsMeta.tabsMeta,\n        tabMeta = _getTabsMeta.tabMeta;\n\n    var startValue = 0;\n\n    if (tabMeta && tabsMeta) {\n      if (vertical) {\n        startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n      } else {\n        var correction = isRtl ? tabsMeta.scrollLeftNormalized + tabsMeta.clientWidth - tabsMeta.scrollWidth : tabsMeta.scrollLeft;\n        startValue = tabMeta.left - tabsMeta.left + correction;\n      }\n    }\n\n    var newIndicatorStyle = (_newIndicatorStyle = {}, _defineProperty(_newIndicatorStyle, start, startValue), _defineProperty(_newIndicatorStyle, size, tabMeta ? tabMeta[size] : 0), _newIndicatorStyle);\n\n    if (isNaN(indicatorStyle[start]) || isNaN(indicatorStyle[size])) {\n      setIndicatorStyle(newIndicatorStyle);\n    } else {\n      var dStart = Math.abs(indicatorStyle[start] - newIndicatorStyle[start]);\n      var dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n\n      if (dStart >= 1 || dSize >= 1) {\n        setIndicatorStyle(newIndicatorStyle);\n      }\n    }\n  });\n\n  var scroll = function scroll(scrollValue) {\n    animate(scrollStart, tabsRef.current, scrollValue);\n  };\n\n  var moveTabsScroll = function moveTabsScroll(delta) {\n    var scrollValue = tabsRef.current[scrollStart];\n\n    if (vertical) {\n      scrollValue += delta;\n    } else {\n      scrollValue += delta * (isRtl ? -1 : 1); // Fix for Edge\n\n      scrollValue *= isRtl && detectScrollType() === 'reverse' ? -1 : 1;\n    }\n\n    scroll(scrollValue);\n  };\n\n  var handleStartScrollClick = function handleStartScrollClick() {\n    moveTabsScroll(-tabsRef.current[clientSize]);\n  };\n\n  var handleEndScrollClick = function handleEndScrollClick() {\n    moveTabsScroll(tabsRef.current[clientSize]);\n  };\n\n  var handleScrollbarSizeChange = React.useCallback(function (scrollbarHeight) {\n    setScrollerStyle({\n      overflow: null,\n      marginBottom: -scrollbarHeight\n    });\n  }, []);\n\n  var getConditionalElements = function getConditionalElements() {\n    var conditionalElements = {};\n    conditionalElements.scrollbarSizeListener = scrollable ? React.createElement(ScrollbarSize, {\n      className: classes.scrollable,\n      onChange: handleScrollbarSizeChange\n    }) : null;\n    var scrollButtonsActive = displayScroll.start || displayScroll.end;\n    var showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === 'desktop' || scrollButtons === 'on');\n    conditionalElements.scrollButtonStart = showScrollButtons ? React.createElement(ScrollButtonComponent, {\n      orientation: orientation,\n      direction: isRtl ? 'right' : 'left',\n      onClick: handleStartScrollClick,\n      visible: displayScroll.start,\n      className: clsx(classes.scrollButtons, scrollButtons !== 'on' && classes.scrollButtonsDesktop)\n    }) : null;\n    conditionalElements.scrollButtonEnd = showScrollButtons ? React.createElement(ScrollButtonComponent, {\n      orientation: orientation,\n      direction: isRtl ? 'left' : 'right',\n      onClick: handleEndScrollClick,\n      visible: displayScroll.end,\n      className: clsx(classes.scrollButtons, scrollButtons !== 'on' && classes.scrollButtonsDesktop)\n    }) : null;\n    return conditionalElements;\n  };\n\n  var scrollSelectedIntoView = useEventCallback(function () {\n    var _getTabsMeta2 = getTabsMeta(),\n        tabsMeta = _getTabsMeta2.tabsMeta,\n        tabMeta = _getTabsMeta2.tabMeta;\n\n    if (!tabMeta || !tabsMeta) {\n      return;\n    }\n\n    if (tabMeta[start] < tabsMeta[start]) {\n      // left side of button is out of view\n      var nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n      scroll(nextScrollStart);\n    } else if (tabMeta[end] > tabsMeta[end]) {\n      // right side of button is out of view\n      var _nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n\n      scroll(_nextScrollStart);\n    }\n  });\n  var updateScrollButtonState = useEventCallback(function () {\n    if (scrollable && scrollButtons !== 'off') {\n      var _tabsRef$current = tabsRef.current,\n          scrollTop = _tabsRef$current.scrollTop,\n          scrollHeight = _tabsRef$current.scrollHeight,\n          clientHeight = _tabsRef$current.clientHeight,\n          scrollWidth = _tabsRef$current.scrollWidth,\n          clientWidth = _tabsRef$current.clientWidth;\n      var showStartScroll;\n      var showEndScroll;\n\n      if (vertical) {\n        showStartScroll = scrollTop > 1;\n        showEndScroll = scrollTop < scrollHeight - clientHeight - 1;\n      } else {\n        var scrollLeft = getNormalizedScrollLeft(tabsRef.current, theme.direction); // use 1 for the potential rounding error with browser zooms.\n\n        showStartScroll = isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n        showEndScroll = !isRtl ? scrollLeft < scrollWidth - clientWidth - 1 : scrollLeft > 1;\n      }\n\n      if (showStartScroll !== displayScroll.start || showEndScroll !== displayScroll.end) {\n        setDisplayScroll({\n          start: showStartScroll,\n          end: showEndScroll\n        });\n      }\n    }\n  });\n  React.useEffect(function () {\n    var handleResize = debounce(function () {\n      updateIndicatorState();\n      updateScrollButtonState();\n    });\n    var win = ownerWindow(tabsRef.current);\n    win.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      win.removeEventListener('resize', handleResize);\n    };\n  }, [updateIndicatorState, updateScrollButtonState]);\n  var handleTabsScroll = React.useCallback(debounce(function () {\n    updateScrollButtonState();\n  }));\n  React.useEffect(function () {\n    return function () {\n      handleTabsScroll.clear();\n    };\n  }, [handleTabsScroll]);\n  React.useEffect(function () {\n    setMounted(true);\n  }, []);\n  React.useEffect(function () {\n    updateIndicatorState();\n    updateScrollButtonState();\n  });\n  React.useEffect(function () {\n    scrollSelectedIntoView();\n  }, [scrollSelectedIntoView, indicatorStyle]);\n  React.useImperativeHandle(action, function () {\n    return {\n      updateIndicator: updateIndicatorState,\n      updateScrollButtons: updateScrollButtonState\n    };\n  }, [updateIndicatorState, updateScrollButtonState]);\n  var indicator = React.createElement(TabIndicator, _extends({\n    className: classes.indicator,\n    orientation: orientation,\n    color: indicatorColor\n  }, TabIndicatorProps, {\n    style: _extends({}, indicatorStyle, {}, TabIndicatorProps.style)\n  }));\n  var childIndex = 0;\n  var children = React.Children.map(childrenProp, function (child) {\n    if (!React.isValidElement(child)) {\n      return null;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: the Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    var childValue = child.props.value === undefined ? childIndex : child.props.value;\n    valueToIndex.set(childValue, childIndex);\n    var selected = childValue === value;\n    childIndex += 1;\n    return React.cloneElement(child, {\n      fullWidth: variant === 'fullWidth',\n      indicator: selected && !mounted && indicator,\n      selected: selected,\n      onChange: onChange,\n      textColor: textColor,\n      value: childValue\n    });\n  });\n  var conditionalElements = getConditionalElements();\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, vertical && classes.vertical),\n    ref: ref\n  }, other), conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, React.createElement(\"div\", {\n    className: clsx(classes.scroller, scrollable ? classes.scrollable : classes.fixed),\n    style: scrollerStyle,\n    ref: tabsRef,\n    onScroll: handleTabsScroll\n  }, React.createElement(\"div\", {\n    className: clsx(classes.flexContainer, vertical && classes.flexContainerVertical, centered && !scrollable && classes.centered),\n    ref: childrenWrapperRef,\n    role: \"tablist\"\n  }, children), mounted && indicator), conditionalElements.scrollButtonEnd);\n});\nprocess.env.NODE_ENV !== \"production\" ? Tabs.propTypes = {\n  /**\n   * Callback fired when the component mounts.\n   * This is useful when you want to trigger an action programmatically.\n   * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n   *\n   * @param {object} actions This object contains all possible actions\n   * that can be triggered programmatically.\n   */\n  action: refType,\n\n  /**\n   * If `true`, the tabs will be centered.\n   * This property is intended for large views.\n   */\n  centered: PropTypes.bool,\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * Determines the color of the indicator.\n   */\n  indicatorColor: PropTypes.oneOf(['secondary', 'primary']),\n\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {object} event The event source of the callback\n   * @param {any} value We default to the index of the child (number)\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The tabs orientation (layout flow direction).\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\n   * The component used to render the scroll buttons.\n   */\n  ScrollButtonComponent: PropTypes.elementType,\n\n  /**\n   * Determine behavior of scroll buttons when tabs are set to scroll:\n   *\n   * - `auto` will only present them when not all the items are visible.\n   * - `desktop` will only present them on medium and larger viewports.\n   * - `on` will always present them.\n   * - `off` will never present them.\n   */\n  scrollButtons: PropTypes.oneOf(['auto', 'desktop', 'on', 'off']),\n\n  /**\n   * Props applied to the tab indicator element.\n   */\n  TabIndicatorProps: PropTypes.object,\n\n  /**\n   * Determines the color of the `Tab`.\n   */\n  textColor: PropTypes.oneOf(['secondary', 'primary', 'inherit']),\n\n  /**\n   * The value of the currently selected `Tab`.\n   * If you don't want any selected `Tab`, you can set this property to `false`.\n   */\n  value: PropTypes.any,\n\n  /**\n   *  Determines additional display behavior of the tabs:\n   *\n   *  - `scrollable` will invoke scrolling properties and allow for horizontally\n   *  scrolling (or swiping) of the tab bar.\n   *  -`fullWidth` will make the tabs grow to use all the available space,\n   *  which should be used for small views, like on mobile.\n   *  - `standard` will render the default state.\n   */\n  variant: PropTypes.oneOf(['standard', 'scrollable', 'fullWidth'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTabs'\n})(Tabs);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport useTheme from '../styles/useTheme';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'absolute',\n      bottom: 0,\n      right: 0,\n      top: -5,\n      left: 0,\n      margin: 0,\n      padding: 0,\n      paddingLeft: 8,\n      pointerEvents: 'none',\n      borderRadius: 'inherit',\n      borderStyle: 'solid',\n      borderWidth: 1\n    },\n\n    /* Styles applied to the legend element when `labelWidth` is provided. */\n    legend: {\n      textAlign: 'left',\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the legend element. */\n    legendLabelled: {\n      textAlign: 'left',\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75rem',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '& span': {\n        paddingLeft: 5,\n        paddingRight: 5\n      }\n    },\n\n    /* Styles applied to the legend element is notched. */\n    legendNotched: {\n      maxWidth: 1000,\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nvar NotchedOutline = React.forwardRef(function NotchedOutline(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      label = props.label,\n      labelWidthProp = props.labelWidth,\n      notched = props.notched,\n      style = props.style,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"label\", \"labelWidth\", \"notched\", \"style\"]);\n\n  var theme = useTheme();\n  var align = theme.direction === 'rtl' ? 'right' : 'left';\n\n  if (label !== undefined) {\n    return React.createElement(\"fieldset\", _extends({\n      \"aria-hidden\": true,\n      className: clsx(classes.root, className),\n      ref: ref,\n      style: style\n    }, other), React.createElement(\"legend\", {\n      className: clsx(classes.legendLabelled, notched && classes.legendNotched)\n    }, label ? React.createElement(\"span\", null, label) : React.createElement(\"span\", {\n      dangerouslySetInnerHTML: {\n        __html: '&#8203;'\n      }\n    })));\n  }\n\n  var labelWidth = labelWidthProp > 0 ? labelWidthProp * 0.75 + 8 : 0.01;\n  return React.createElement(\"fieldset\", _extends({\n    \"aria-hidden\": true,\n    style: _extends(_defineProperty({}, \"padding\".concat(capitalize(align)), 8), style),\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), React.createElement(\"legend\", {\n    className: classes.legend,\n    style: {\n      // IE 11: fieldset with legend does not render\n      // a border radius. This maintains consistency\n      // by always having a legend rendered\n      width: notched ? labelWidth : 0.01\n    }\n  }, React.createElement(\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  })));\n});\nprocess.env.NODE_ENV !== \"production\" ? NotchedOutline.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The label.\n   */\n  label: PropTypes.node,\n\n  /**\n   * The width of the label.\n   */\n  labelWidth: PropTypes.number.isRequired,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateNotchedOutline'\n})(NotchedOutline);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport NotchedOutline from './NotchedOutline';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var borderColor = theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      borderRadius: theme.shape.borderRadius,\n      '&:hover $notchedOutline': {\n        borderColor: theme.palette.text.primary\n      },\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        '&:hover $notchedOutline': {\n          borderColor: borderColor\n        }\n      },\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.primary.main,\n        borderWidth: 2\n      },\n      '&$error $notchedOutline': {\n        borderColor: theme.palette.error.main\n      },\n      '&$disabled $notchedOutline': {\n        borderColor: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 14\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 14\n    },\n\n    /* Styles applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '18.5px 14px',\n      '&$marginDense': {\n        paddingTop: 10.5,\n        paddingBottom: 10.5\n      }\n    },\n\n    /* Styles applied to the `NotchedOutline` element. */\n    notchedOutline: {\n      borderColor: borderColor\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '18.5px 14px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'dark' ? '0 0 0 100px #266798 inset' : null,\n        WebkitTextFillColor: theme.palette.type === 'dark' ? '#fff' : null,\n        borderRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 10.5,\n      paddingBottom: 10.5\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar OutlinedInput = React.forwardRef(function OutlinedInput(props, ref) {\n  var classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      label = props.label,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      notched = props.notched,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"classes\", \"fullWidth\", \"inputComponent\", \"label\", \"labelWidth\", \"multiline\", \"notched\", \"type\"]);\n\n  return React.createElement(InputBase, _extends({\n    renderSuffix: function renderSuffix(state) {\n      return React.createElement(NotchedOutline, {\n        className: classes.notchedOutline,\n        label: label,\n        labelWidth: labelWidth,\n        notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n      });\n    },\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, classes.underline),\n      notchedOutline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? OutlinedInput.propTypes = {\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the wrapper element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the native input.\n   * Either a string to use a DOM element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * The label of the input. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`. If specified `labelWidth` is ignored.\n   */\n  label: PropTypes.node,\n\n  /**\n   * The width of the label. Is ignored if `label` is provided. Prefer `label`\n   * if the input label appears with a strike through.\n   */\n  labelWidth: PropTypes.number,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nOutlinedInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiOutlinedInput'\n})(OutlinedInput);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport Collapse from '../Collapse';\nimport Paper from '../Paper';\nimport withStyles from '../styles/withStyles';\nimport ExpansionPanelContext from './ExpansionPanelContext';\nimport useControlled from '../utils/useControlled';\nexport var styles = function styles(theme) {\n  var transition = {\n    duration: theme.transitions.duration.shortest\n  };\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      transition: theme.transitions.create(['margin'], transition),\n      '&:before': {\n        position: 'absolute',\n        left: 0,\n        top: -1,\n        right: 0,\n        height: 1,\n        content: '\"\"',\n        opacity: 1,\n        backgroundColor: theme.palette.divider,\n        transition: theme.transitions.create(['opacity', 'background-color'], transition)\n      },\n      '&:first-child': {\n        '&:before': {\n          display: 'none'\n        }\n      },\n      '&$expanded': {\n        margin: '16px 0',\n        '&:first-child': {\n          marginTop: 0\n        },\n        '&:last-child': {\n          marginBottom: 0\n        },\n        '&:before': {\n          opacity: 0\n        }\n      },\n      '&$expanded + &': {\n        '&:before': {\n          display: 'none'\n        }\n      },\n      '&$disabled': {\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    },\n\n    /* Styles applied to the root element if `square={false}`. */\n    rounded: {\n      borderRadius: 0,\n      '&:first-child': {\n        borderTopLeftRadius: theme.shape.borderRadius,\n        borderTopRightRadius: theme.shape.borderRadius\n      },\n      '&:last-child': {\n        borderBottomLeftRadius: theme.shape.borderRadius,\n        borderBottomRightRadius: theme.shape.borderRadius,\n        // Fix a rendering issue on Edge\n        '@supports (-ms-ime-align: auto)': {\n          borderBottomLeftRadius: 0,\n          borderBottomRightRadius: 0\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `expanded={true}`. */\n    expanded: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {}\n  };\n};\nvar ExpansionPanel = React.forwardRef(function ExpansionPanel(props, ref) {\n  var childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$defaultExpande = props.defaultExpanded,\n      defaultExpanded = _props$defaultExpande === void 0 ? false : _props$defaultExpande,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      expandedProp = props.expanded,\n      onChange = props.onChange,\n      _props$square = props.square,\n      square = _props$square === void 0 ? false : _props$square,\n      _props$TransitionComp = props.TransitionComponent,\n      TransitionComponent = _props$TransitionComp === void 0 ? Collapse : _props$TransitionComp,\n      TransitionProps = props.TransitionProps,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"defaultExpanded\", \"disabled\", \"expanded\", \"onChange\", \"square\", \"TransitionComponent\", \"TransitionProps\"]);\n\n  var _useControlled = useControlled({\n    controlled: expandedProp,\n    default: defaultExpanded,\n    name: 'ExpansionPanel'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      expanded = _useControlled2[0],\n      setExpandedState = _useControlled2[1];\n\n  var handleChange = React.useCallback(function (event) {\n    setExpandedState(!expanded);\n\n    if (onChange) {\n      onChange(event, !expanded);\n    }\n  }, [expanded, onChange, setExpandedState]);\n\n  var _React$Children$toArr = React.Children.toArray(childrenProp),\n      _React$Children$toArr2 = _toArray(_React$Children$toArr),\n      summary = _React$Children$toArr2[0],\n      children = _React$Children$toArr2.slice(1);\n\n  var contextValue = React.useMemo(function () {\n    return {\n      expanded: expanded,\n      disabled: disabled,\n      toggle: handleChange\n    };\n  }, [expanded, disabled, handleChange]);\n  return React.createElement(Paper, _extends({\n    className: clsx(classes.root, className, expanded && classes.expanded, disabled && classes.disabled, !square && classes.rounded),\n    ref: ref,\n    square: square\n  }, other), React.createElement(ExpansionPanelContext.Provider, {\n    value: contextValue\n  }, summary), React.createElement(TransitionComponent, _extends({\n    in: expanded,\n    timeout: \"auto\"\n  }, TransitionProps), React.createElement(\"div\", {\n    \"aria-labelledby\": summary.props.id,\n    id: summary.props['aria-controls'],\n    role: \"region\"\n  }, children)));\n});\nprocess.env.NODE_ENV !== \"production\" ? ExpansionPanel.propTypes = {\n  /**\n   * The content of the expansion panel.\n   */\n  children: chainPropTypes(PropTypes.node.isRequired, function (props) {\n    var summary = React.Children.toArray(props.children)[0];\n\n    if (isFragment(summary)) {\n      return new Error(\"Material-UI: the ExpansionPanel doesn't accept a Fragment as a child. \" + 'Consider providing an array instead.');\n    }\n\n    if (!React.isValidElement(summary)) {\n      return new Error('Material-UI: expected the first child of ExpansionPanel to be a valid element.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, expands the panel by default.\n   */\n  defaultExpanded: PropTypes.bool,\n\n  /**\n   * If `true`, the panel will be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, expands the panel, otherwise collapse it.\n   * Setting this prop enables control over the panel.\n   */\n  expanded: PropTypes.bool,\n\n  /**\n   * Callback fired when the expand/collapse state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {boolean} expanded The `expanded` state of the panel.\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  square: PropTypes.bool,\n\n  /**\n   * The component used for the collapse effect.\n   * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   */\n  TransitionComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiExpansionPanel'\n})(ExpansionPanel);","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n  return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataDom } from '@sentry/types';\n\nimport { uuid4 } from '../misc';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n  __sentry_instrumentation_handlers__?: {\n    [key in 'click' | 'keypress']?: {\n      handler?: Function;\n      /** The number of custom listeners attached to this element */\n      refCount: number;\n    };\n  };\n};\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target: string) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n      return function (\n        this: Element,\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ): AddEventListener {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this as InstrumentedElement;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n        return function (\n          this: Element,\n          type: string,\n          listener: EventListenerOrEventListenerObject,\n          options?: boolean | EventListenerOptions,\n        ): () => void {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this as InstrumentedElement;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler: (data: HandlerDataDom) => void,\n  globalListener: boolean = false,\n): (event: Event) => void {\n  return (event: Event & { _sentryCaptured?: true }): void => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData: HandlerDataDom = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n  try {\n    return event.target as SentryWrappedTarget | null;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { isString } from '../is';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW as any).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const startTimestamp = Date.now();\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler: () => void = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData: HandlerDataXhr = {\n            args: [method, url],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n          return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n        return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n          const [header, value] = setRequestHeaderArgs;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData: HandlerDataXhr = {\n        args: [sentryXhrData.method, sentryXhrData.url],\n        startTimestamp: Date.now(),\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url as URL).toString();\n  } catch {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch(): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n    return function (...args: any[]): void {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData: HandlerDataFetch = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response: Response) => {\n          const finishedHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          };\n\n          triggerHandlers('fetch', finishedHandlerData);\n          return response;\n        },\n        (error: Error) => {\n          const erroredHandlerData: HandlerDataFetch = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          };\n\n          triggerHandlers('fetch', erroredHandlerData);\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n  return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs as [FetchResource, object];\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg as FetchResource),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n","type PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg: string | object,\n    url?: string,\n    line?: number,\n    column?: number,\n    error?: Error,\n  ): boolean {\n    const handlerData: HandlerDataError = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n  handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n    const handlerData: HandlerDataUnhandledRejection = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","import type { DataCategory, TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = Date.now(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { getDisplayName } from '@material-ui/utils';\n\nfunction mergeClasses() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var baseClasses = options.baseClasses,\n      newClasses = options.newClasses,\n      Component = options.Component;\n\n  if (!newClasses) {\n    return baseClasses;\n  }\n\n  var nextClasses = _extends({}, baseClasses);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof newClasses === 'string') {\n      console.error([\"Material-UI: the value `\".concat(newClasses, \"` \") + \"provided to the classes prop of \".concat(getDisplayName(Component), \" is incorrect.\"), 'You might want to use the className prop instead.'].join('\\n'));\n      return baseClasses;\n    }\n  }\n\n  Object.keys(newClasses).forEach(function (key) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!baseClasses[key] && newClasses[key]) {\n        console.error([\"Material-UI: the key `\".concat(key, \"` \") + \"provided to the classes prop is not implemented in \".concat(getDisplayName(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n'));\n      }\n\n      if (newClasses[key] && typeof newClasses[key] !== 'string') {\n        console.error([\"Material-UI: the key `\".concat(key, \"` \") + \"provided to the classes prop is not valid for \".concat(getDisplayName(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n'));\n      }\n    }\n\n    if (newClasses[key]) {\n      nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n    }\n  });\n  return nextClasses;\n}\n\nexport default mergeClasses;","import { BaseTransport } from '@amplitude/analytics-core';\nimport { Payload, Response, Transport } from '@amplitude/analytics-types';\n\nexport class FetchTransport extends BaseTransport implements Transport {\n  async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    /* istanbul ignore if */\n    if (typeof fetch === 'undefined') {\n      throw new Error('FetchTransport is not supported');\n    }\n    const options: RequestInit = {\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: '*/*',\n      },\n      body: JSON.stringify(payload),\n      method: 'POST',\n    };\n    const response = await fetch(serverUrl, options);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const responsePayload: Record<string, any> = await response.json();\n    return this.buildResponse(responsePayload);\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { LogLevel, LogConfig, DebugContext } from '@amplitude/analytics-types';\nimport { AmplitudeCore } from '../core-client';\n\nexport const getStacktrace = (ignoreDepth = 0): string[] => {\n  const trace = new Error().stack || '';\n  return trace\n    .split('\\n')\n    .slice(2 + ignoreDepth)\n    .map((text) => text.trim());\n};\n\n// This hook makes sure we always get the latest logger and logLevel.\nexport const getClientLogConfig = (client: AmplitudeCore) => (): LogConfig => {\n  const { loggerProvider: logger, logLevel } = { ...client.config };\n  return {\n    logger,\n    logLevel,\n  };\n};\n\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport const getValueByStringPath = (obj: any, path: string): any => {\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n  path = path.replace(/^\\./, ''); // strip a leading dot\n  for (const attr of path.split('.')) {\n    if (attr in obj) {\n      obj = obj[attr];\n    } else {\n      return;\n    }\n  }\n  return obj;\n};\n\nexport const getClientStates = (client: AmplitudeCore, paths: Array<string>) => (): { [key: string]: any } => {\n  const res: { [key: string]: any } = {};\n  for (const path of paths) {\n    res[path] = getValueByStringPath(client, path);\n  }\n  return res;\n};\n\nexport const debugWrapper =\n  <T extends Array<any>, R>(\n    fn: (...args: T) => R,\n    fnName: string,\n    getLogConfig: () => LogConfig,\n    getStates?: () => { [key: string]: any },\n    fnContext: any = null,\n  ) =>\n  (...args: T): R => {\n    const { logger, logLevel } = getLogConfig();\n    // return early if possible to reduce overhead\n    if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n      return fn.apply(fnContext, args);\n    }\n    const debugContext: DebugContext = {\n      type: 'invoke public method',\n      name: fnName,\n      args,\n      stacktrace: getStacktrace(1),\n      time: {\n        start: new Date().toISOString(),\n      },\n      states: {},\n    };\n    if (getStates && debugContext.states) {\n      debugContext.states.before = getStates();\n    }\n    const result = fn.apply(fnContext, args);\n    if (result && (result as any).promise) {\n      // if result is a promise, add the callback\n      (result as any).promise.then(() => {\n        if (getStates && debugContext.states) {\n          debugContext.states.after = getStates();\n        }\n        if (debugContext.time) {\n          debugContext.time.end = new Date().toISOString();\n        }\n        logger.debug(JSON.stringify(debugContext, null, 2));\n      });\n    } else {\n      if (getStates && debugContext.states) {\n        debugContext.states.after = getStates();\n      }\n      if (debugContext.time) {\n        debugContext.time.end = new Date().toISOString();\n      }\n      logger.debug(JSON.stringify(debugContext, null, 2));\n    }\n    return result;\n  };\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/* eslint-disable no-constant-condition */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { setRef, useEventCallback, useControlled } from '@material-ui/core/utils'; // https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript\n// Give up on IE 11 support for this feature\n\nfunction stripDiacritics(string) {\n  return typeof string.normalize !== 'undefined' ? string.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : string;\n}\n\nfunction defaultStringify(value) {\n  if (value == null) {\n    return '';\n  }\n\n  if (typeof value === 'string') {\n    return value;\n  }\n\n  if (_typeof(value) === 'object') {\n    return Object.keys(value).map(function (key) {\n      return value[key];\n    }).join(' ');\n  }\n\n  return JSON.stringify(value);\n}\n\nexport function createFilterOptions() {\n  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _config$ignoreAccents = config.ignoreAccents,\n      ignoreAccents = _config$ignoreAccents === void 0 ? true : _config$ignoreAccents,\n      _config$ignoreCase = config.ignoreCase,\n      ignoreCase = _config$ignoreCase === void 0 ? true : _config$ignoreCase,\n      _config$matchFrom = config.matchFrom,\n      matchFrom = _config$matchFrom === void 0 ? 'any' : _config$matchFrom,\n      _config$stringify = config.stringify,\n      stringify = _config$stringify === void 0 ? defaultStringify : _config$stringify,\n      _config$trim = config.trim,\n      trim = _config$trim === void 0 ? false : _config$trim;\n  return function (options, _ref) {\n    var inputValue = _ref.inputValue;\n    var input = trim ? inputValue.trim() : inputValue;\n\n    if (ignoreCase) {\n      input = input.toLowerCase();\n    }\n\n    if (ignoreAccents) {\n      input = stripDiacritics(input);\n    }\n\n    return options.filter(function (option) {\n      var candidate = stringify(option);\n\n      if (ignoreCase) {\n        candidate = candidate.toLowerCase();\n      }\n\n      if (ignoreAccents) {\n        candidate = stripDiacritics(candidate);\n      }\n\n      return matchFrom === 'start' ? candidate.indexOf(input) === 0 : candidate.indexOf(input) > -1;\n    });\n  };\n} // To replace with .findIndex() once we stop IE 11 support.\n\nfunction findIndex(array, comp) {\n  for (var i = 0; i < array.length; i += 1) {\n    if (comp(array[i])) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nvar defaultFilterOptions = createFilterOptions(); // Number of options to jump in list box when pageup and pagedown keys are used.\n\nvar pageSize = 5;\nexport default function useAutocomplete(props) {\n  var _props$autoComplete = props.autoComplete,\n      autoComplete = _props$autoComplete === void 0 ? false : _props$autoComplete,\n      _props$autoHighlight = props.autoHighlight,\n      autoHighlight = _props$autoHighlight === void 0 ? false : _props$autoHighlight,\n      _props$autoSelect = props.autoSelect,\n      autoSelect = _props$autoSelect === void 0 ? false : _props$autoSelect,\n      _props$blurOnSelect = props.blurOnSelect,\n      blurOnSelect = _props$blurOnSelect === void 0 ? false : _props$blurOnSelect,\n      _props$clearOnEscape = props.clearOnEscape,\n      clearOnEscape = _props$clearOnEscape === void 0 ? false : _props$clearOnEscape,\n      _props$debug = props.debug,\n      debug = _props$debug === void 0 ? false : _props$debug,\n      defaultValue = props.defaultValue,\n      _props$disableClearab = props.disableClearable,\n      disableClearable = _props$disableClearab === void 0 ? false : _props$disableClearab,\n      _props$disableCloseOn = props.disableCloseOnSelect,\n      disableCloseOnSelect = _props$disableCloseOn === void 0 ? false : _props$disableCloseOn,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      _props$disableOpenOnF = props.disableOpenOnFocus,\n      disableOpenOnFocus = _props$disableOpenOnF === void 0 ? false : _props$disableOpenOnF,\n      _props$filterOptions = props.filterOptions,\n      filterOptions = _props$filterOptions === void 0 ? defaultFilterOptions : _props$filterOptions,\n      _props$filterSelected = props.filterSelectedOptions,\n      filterSelectedOptions = _props$filterSelected === void 0 ? false : _props$filterSelected,\n      _props$freeSolo = props.freeSolo,\n      freeSolo = _props$freeSolo === void 0 ? false : _props$freeSolo,\n      getOptionDisabled = props.getOptionDisabled,\n      _props$getOptionLabel = props.getOptionLabel,\n      getOptionLabel = _props$getOptionLabel === void 0 ? function (x) {\n    return x;\n  } : _props$getOptionLabel,\n      _props$getOptionSelec = props.getOptionSelected,\n      getOptionSelected = _props$getOptionSelec === void 0 ? function (option, value) {\n    return option === value;\n  } : _props$getOptionSelec,\n      groupBy = props.groupBy,\n      idProp = props.id,\n      _props$includeInputIn = props.includeInputInList,\n      includeInputInList = _props$includeInputIn === void 0 ? false : _props$includeInputIn,\n      inputValueProp = props.inputValue,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      onInputChange = props.onInputChange,\n      openProp = props.open,\n      _props$options = props.options,\n      options = _props$options === void 0 ? [] : _props$options,\n      _props$selectOnFocus = props.selectOnFocus,\n      selectOnFocus = _props$selectOnFocus === void 0 ? !props.freeSolo : _props$selectOnFocus,\n      valueProp = props.value,\n      _props$componentName = props.componentName,\n      componentName = _props$componentName === void 0 ? 'useAutocomplete' : _props$componentName;\n\n  var _React$useState = React.useState(),\n      defaultId = _React$useState[0],\n      setDefaultId = _React$useState[1];\n\n  var id = idProp || defaultId;\n  React.useEffect(function () {\n    // Fallback to this default id when possible.\n    // Use the random value for client-side rendering only.\n    // We can't use it server-side.\n    setDefaultId(\"mui-autocomplete-\".concat(Math.round(Math.random() * 1e5)));\n  }, []);\n  var ignoreFocus = React.useRef(false);\n  var firstFocus = React.useRef(true);\n  var inputRef = React.useRef(null);\n  var listboxRef = React.useRef(null);\n\n  var _React$useState2 = React.useState(null),\n      anchorEl = _React$useState2[0],\n      setAnchorEl = _React$useState2[1];\n\n  var _React$useState3 = React.useState(-1),\n      focusedTag = _React$useState3[0],\n      setFocusedTag = _React$useState3[1];\n\n  var defaultHighlighted = autoHighlight ? 0 : -1;\n  var highlightedIndexRef = React.useRef(defaultHighlighted);\n  var selectedIndexRef = React.useRef(-1);\n\n  function setHighlightedIndex(index) {\n    var mouse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    highlightedIndexRef.current = index; // does the index exist?\n\n    if (index === -1) {\n      inputRef.current.removeAttribute('aria-activedescendant');\n    } else {\n      inputRef.current.setAttribute('aria-activedescendant', \"\".concat(id, \"-option-\").concat(index));\n    }\n\n    if (!listboxRef.current) {\n      return;\n    }\n\n    var prev = listboxRef.current.querySelector('[data-focus]');\n\n    if (prev) {\n      prev.removeAttribute('data-focus');\n    }\n\n    var listboxNode = listboxRef.current.parentElement.querySelector('[role=\"listbox\"]'); // \"No results\"\n\n    if (!listboxNode) {\n      return;\n    }\n\n    if (index === -1) {\n      listboxNode.scrollTop = 0;\n      return;\n    }\n\n    var option = listboxRef.current.querySelector(\"[data-option-index=\\\"\".concat(index, \"\\\"]\"));\n\n    if (!option) {\n      return;\n    }\n\n    option.setAttribute('data-focus', 'true'); // Scroll active descendant into view.\n    // Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js\n    //\n    // Consider this API instead once it has a better browser support:\n    // .scrollIntoView({ scrollMode: 'if-needed', block: 'nearest' });\n\n    if (listboxNode.scrollHeight > listboxNode.clientHeight && !mouse) {\n      var element = option;\n      var scrollBottom = listboxNode.clientHeight + listboxNode.scrollTop;\n      var elementBottom = element.offsetTop + element.offsetHeight;\n\n      if (elementBottom > scrollBottom) {\n        listboxNode.scrollTop = elementBottom - listboxNode.clientHeight;\n      } else if (element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0) < listboxNode.scrollTop) {\n        listboxNode.scrollTop = element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0);\n      }\n    }\n  }\n\n  var _useControlled = useControlled({\n    controlled: valueProp,\n    default: defaultValue || (multiple ? [] : null),\n    name: componentName\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  var _React$useRef = React.useRef(inputValueProp != null),\n      isInputValueControlled = _React$useRef.current;\n\n  var _React$useState4 = React.useState(''),\n      inputValueState = _React$useState4[0],\n      setInputValue = _React$useState4[1];\n\n  var inputValue = isInputValueControlled ? inputValueProp : inputValueState;\n\n  var _React$useState5 = React.useState(false),\n      focused = _React$useState5[0],\n      setFocused = _React$useState5[1];\n\n  var resetInputValue = useEventCallback(function (event, newValue) {\n    var newInputValue;\n\n    if (multiple) {\n      newInputValue = '';\n    } else if (newValue == null) {\n      newInputValue = '';\n    } else {\n      var optionLabel = getOptionLabel(newValue);\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof optionLabel !== 'string') {\n          console.error(['Material-UI: the `getOptionLabel` method of useAutocomplete do not handle the options correctly.', \"The component expect a string but received \".concat(_typeof(optionLabel), \".\"), \"For the input option: \".concat(JSON.stringify(newValue), \", `getOptionLabel` returns: \").concat(optionLabel, \".\")].join('\\n'));\n        }\n      }\n\n      newInputValue = typeof optionLabel === 'string' ? optionLabel : '';\n    }\n\n    if (inputValue === newInputValue) {\n      return;\n    }\n\n    setInputValue(newInputValue);\n\n    if (onInputChange) {\n      onInputChange(event, newInputValue, 'reset');\n    }\n  });\n  React.useEffect(function () {\n    resetInputValue(null, value);\n  }, [value, resetInputValue]);\n\n  var _React$useRef2 = React.useRef(openProp != null),\n      isOpenControlled = _React$useRef2.current;\n\n  var _React$useState6 = React.useState(false),\n      openState = _React$useState6[0],\n      setOpenState = _React$useState6[1];\n\n  var open = isOpenControlled ? openProp : openState;\n  var inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);\n  var popupOpen = open;\n  var filteredOptions = popupOpen ? filterOptions(options.filter(function (option) {\n    if (filterSelectedOptions && (multiple ? value : [value]).some(function (value2) {\n      return value2 !== null && getOptionSelected(option, value2);\n    })) {\n      return false;\n    }\n\n    return true;\n  }), // we use the empty string to manipulate `filterOptions` to not filter any options\n  // i.e. the filter predicate always returns true\n  {\n    inputValue: inputValueIsSelectedValue ? '' : inputValue\n  }) : [];\n  popupOpen = freeSolo && filteredOptions.length === 0 ? false : popupOpen;\n  var focusTag = useEventCallback(function (tagToFocus) {\n    if (tagToFocus === -1) {\n      inputRef.current.focus();\n    } else {\n      anchorEl.querySelector(\"[data-tag-index=\\\"\".concat(tagToFocus, \"\\\"]\")).focus();\n    }\n  }); // Ensure the focusedTag is never inconsistent\n\n  React.useEffect(function () {\n    if (multiple && focusedTag > value.length - 1) {\n      setFocusedTag(-1);\n      focusTag(-1);\n    }\n  }, [value, multiple, focusedTag, focusTag]);\n\n  function validOptionIndex(index, direction) {\n    if (!listboxRef.current || index === -1) {\n      return -1;\n    }\n\n    var nextFocus = index;\n\n    while (true) {\n      // Out of range\n      if (direction === 'next' && nextFocus === filteredOptions.length || direction === 'previous' && nextFocus === -1) {\n        return -1;\n      }\n\n      var option = listboxRef.current.querySelector(\"[data-option-index=\\\"\".concat(nextFocus, \"\\\"]\")); // Same logic as MenuList.js\n\n      if (option && (!option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true')) {\n        nextFocus += direction === 'next' ? 1 : -1;\n      } else {\n        return nextFocus;\n      }\n    }\n  }\n\n  var changeHighlightedIndex = function changeHighlightedIndex(diff, direction) {\n    if (!popupOpen) {\n      return;\n    }\n\n    var getNextIndex = function getNextIndex() {\n      var maxIndex = filteredOptions.length - 1;\n\n      if (diff === 'reset') {\n        return defaultHighlighted;\n      }\n\n      if (diff === 'start') {\n        return 0;\n      }\n\n      if (diff === 'end') {\n        return maxIndex;\n      }\n\n      var newIndex = highlightedIndexRef.current + diff;\n\n      if (newIndex < 0) {\n        if (newIndex === -1 && includeInputInList) {\n          return -1;\n        }\n\n        if (disableListWrap && highlightedIndexRef.current !== -1 || Math.abs(diff) > 1) {\n          return 0;\n        }\n\n        return maxIndex;\n      }\n\n      if (newIndex > maxIndex) {\n        if (newIndex === maxIndex + 1 && includeInputInList) {\n          return -1;\n        }\n\n        if (disableListWrap || Math.abs(diff) > 1) {\n          return maxIndex;\n        }\n\n        return 0;\n      }\n\n      return newIndex;\n    };\n\n    var nextIndex = validOptionIndex(getNextIndex(), direction);\n    setHighlightedIndex(nextIndex);\n    selectedIndexRef.current = nextIndex;\n\n    if (autoComplete && diff !== 'reset') {\n      if (nextIndex === -1) {\n        inputRef.current.value = inputValue;\n      } else {\n        var option = getOptionLabel(filteredOptions[nextIndex]);\n        inputRef.current.value = option; // The portion of the selected suggestion that has not been typed by the user,\n        // a completion string, appears inline after the input cursor in the textbox.\n\n        var index = option.toLowerCase().indexOf(inputValue.toLowerCase());\n\n        if (index === 0 && inputValue.length > 0) {\n          inputRef.current.setSelectionRange(inputValue.length, option.length);\n        }\n      }\n    }\n  };\n\n  React.useEffect(function () {\n    changeHighlightedIndex('reset', 'next');\n  }, [inputValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n  var handleOpen = function handleOpen(event) {\n    if (open) {\n      return;\n    }\n\n    if (onOpen) {\n      onOpen(event);\n    }\n\n    if (!isOpenControlled) {\n      setOpenState(true);\n    }\n  };\n\n  var handleClose = function handleClose(event) {\n    if (!open) {\n      return;\n    }\n\n    if (onClose) {\n      onClose(event);\n    }\n\n    if (!isOpenControlled) {\n      setOpenState(false);\n    }\n  };\n\n  var handleValue = function handleValue(event, newValue) {\n    if (value === newValue) {\n      return;\n    }\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n\n    setValue(newValue);\n  };\n\n  var selectNewValue = function selectNewValue(event, newValue) {\n    var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'option';\n\n    if (multiple) {\n      var item = newValue;\n      newValue = Array.isArray(value) ? _toConsumableArray(value) : [];\n      var itemIndex = findIndex(newValue, function (valueItem) {\n        return getOptionSelected(item, valueItem);\n      });\n\n      if (itemIndex === -1) {\n        newValue.push(item);\n      } else if (origin !== 'freeSolo') {\n        newValue.splice(itemIndex, 1);\n      }\n    }\n\n    resetInputValue(event, newValue);\n    handleValue(event, newValue);\n\n    if (!disableCloseOnSelect) {\n      handleClose(event);\n    }\n\n    selectedIndexRef.current = -1;\n  };\n\n  function validTagIndex(index, direction) {\n    if (index === -1) {\n      return -1;\n    }\n\n    var nextFocus = index;\n\n    while (true) {\n      // Out of range\n      if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {\n        return -1;\n      }\n\n      var option = anchorEl.querySelector(\"[data-tag-index=\\\"\".concat(nextFocus, \"\\\"]\")); // Same logic as MenuList.js\n\n      if (option && (!option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true')) {\n        nextFocus += direction === 'next' ? 1 : -1;\n      } else {\n        return nextFocus;\n      }\n    }\n  }\n\n  var handleFocusTag = function handleFocusTag(event, direction) {\n    if (!multiple) {\n      return;\n    }\n\n    handleClose(event);\n    var nextTag = focusedTag;\n\n    if (focusedTag === -1) {\n      if (inputValue === '' && direction === 'previous') {\n        nextTag = value.length - 1;\n      }\n    } else {\n      nextTag += direction === 'next' ? 1 : -1;\n\n      if (nextTag < 0) {\n        nextTag = 0;\n      }\n\n      if (nextTag === value.length) {\n        nextTag = -1;\n      }\n    }\n\n    nextTag = validTagIndex(nextTag, direction);\n    setFocusedTag(nextTag);\n    focusTag(nextTag);\n  };\n\n  var handleClear = function handleClear(event) {\n    ignoreFocus.current = true;\n    setInputValue('');\n\n    if (onInputChange) {\n      onInputChange(event, '', 'clear');\n    }\n\n    handleValue(event, multiple ? [] : null);\n  };\n\n  var handleKeyDown = function handleKeyDown(other) {\n    return function (event) {\n      if (focusedTag !== -1 && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) === -1) {\n        setFocusedTag(-1);\n        focusTag(-1);\n      }\n\n      switch (event.key) {\n        case 'Home':\n          if (popupOpen) {\n            // Prevent scroll of the page\n            event.preventDefault();\n            changeHighlightedIndex('start', 'next');\n          }\n\n          break;\n\n        case 'End':\n          if (popupOpen) {\n            // Prevent scroll of the page\n            event.preventDefault();\n            changeHighlightedIndex('end', 'previous');\n          }\n\n          break;\n\n        case 'PageUp':\n          // Prevent scroll of the page\n          event.preventDefault();\n          changeHighlightedIndex(-pageSize, 'previous');\n          handleOpen(event);\n          break;\n\n        case 'PageDown':\n          // Prevent scroll of the page\n          event.preventDefault();\n          changeHighlightedIndex(pageSize, 'next');\n          handleOpen(event);\n          break;\n\n        case 'ArrowDown':\n          // Prevent cursor move\n          event.preventDefault();\n          changeHighlightedIndex(1, 'next');\n          handleOpen(event);\n          break;\n\n        case 'ArrowUp':\n          // Prevent cursor move\n          event.preventDefault();\n          changeHighlightedIndex(-1, 'previous');\n          handleOpen(event);\n          break;\n\n        case 'ArrowLeft':\n          handleFocusTag(event, 'previous');\n          break;\n\n        case 'ArrowRight':\n          handleFocusTag(event, 'next');\n          break;\n\n        case 'Enter':\n          if (highlightedIndexRef.current !== -1 && popupOpen) {\n            // We don't want to validate the form.\n            event.preventDefault();\n            selectNewValue(event, filteredOptions[highlightedIndexRef.current]); // Move the selection to the end.\n\n            if (autoComplete) {\n              inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);\n            }\n          } else if (freeSolo && inputValue !== '' && inputValueIsSelectedValue === false) {\n            if (multiple) {\n              // Allow people to add new values before they submit the form.\n              event.preventDefault();\n            }\n\n            selectNewValue(event, inputValue, 'freeSolo');\n          }\n\n          break;\n\n        case 'Escape':\n          if (popupOpen) {\n            // Avoid Opera to exit fullscreen mode.\n            event.preventDefault(); // Avoid the Modal to handle the event.\n\n            event.stopPropagation();\n            handleClose(event);\n          } else if (clearOnEscape && inputValue !== '') {\n            // Avoid Opera to exit fullscreen mode.\n            event.preventDefault(); // Avoid the Modal to handle the event.\n\n            event.stopPropagation();\n            handleClear(event);\n          }\n\n          break;\n\n        case 'Backspace':\n          if (multiple && inputValue === '' && value.length > 0) {\n            var index = focusedTag === -1 ? value.length - 1 : focusedTag;\n\n            var newValue = _toConsumableArray(value);\n\n            newValue.splice(index, 1);\n            handleValue(event, newValue);\n          }\n\n          break;\n\n        default:\n      }\n\n      if (other.onKeyDown) {\n        other.onKeyDown(event);\n      }\n    };\n  };\n\n  var handleFocus = function handleFocus(event) {\n    setFocused(true);\n\n    if (!disableOpenOnFocus && !ignoreFocus.current) {\n      handleOpen(event);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    setFocused(false);\n    firstFocus.current = true;\n    ignoreFocus.current = false;\n\n    if (debug && inputValue !== '') {\n      return;\n    }\n\n    if (autoSelect && selectedIndexRef.current !== -1) {\n      handleValue(event, filteredOptions[selectedIndexRef.current]);\n    } else if (!freeSolo) {\n      resetInputValue(event, value);\n    }\n\n    handleClose(event);\n  };\n\n  var handleInputChange = function handleInputChange(event) {\n    var newValue = event.target.value;\n\n    if (inputValue !== newValue) {\n      setInputValue(newValue);\n\n      if (onInputChange) {\n        onInputChange(event, newValue, 'input');\n      }\n    }\n\n    if (newValue === '') {\n      if (disableOpenOnFocus) {\n        handleClose(event);\n      }\n\n      if (!disableClearable && !multiple) {\n        handleValue(event, null);\n      }\n    } else {\n      handleOpen(event);\n    }\n  };\n\n  var handleOptionMouseOver = function handleOptionMouseOver(event) {\n    var index = Number(event.currentTarget.getAttribute('data-option-index'));\n    setHighlightedIndex(index, 'mouse');\n  };\n\n  var isTouch = React.useRef(false);\n\n  var handleOptionTouchStart = function handleOptionTouchStart() {\n    isTouch.current = true;\n  };\n\n  var handleOptionClick = function handleOptionClick(event) {\n    var index = Number(event.currentTarget.getAttribute('data-option-index'));\n    selectNewValue(event, filteredOptions[index]);\n\n    if (blurOnSelect === true || blurOnSelect === 'touch' && isTouch.current || blurOnSelect === 'mouse' && !isTouch.current) {\n      inputRef.current.blur();\n    }\n\n    isTouch.current = false;\n  };\n\n  var handleTagDelete = function handleTagDelete(index) {\n    return function (event) {\n      var newValue = _toConsumableArray(value);\n\n      newValue.splice(index, 1);\n      handleValue(event, newValue);\n    };\n  };\n\n  var handleListboxRef = useEventCallback(function (node) {\n    setRef(listboxRef, node);\n\n    if (!node) {\n      return;\n    } // Restore the focus to the correct option.\n\n\n    setHighlightedIndex(highlightedIndexRef.current);\n  });\n\n  var handlePopupIndicator = function handlePopupIndicator(event) {\n    if (open) {\n      handleClose(event);\n    } else {\n      handleOpen(event);\n    }\n  }; // Prevent input blur when interacting with the combobox\n\n\n  var handleMouseDown = function handleMouseDown(event) {\n    if (event.target.getAttribute('id') !== id) {\n      event.preventDefault();\n    }\n  }; // Focus the input when first interacting with the combobox\n\n\n  var handleClick = function handleClick() {\n    if (firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {\n      inputRef.current.focus();\n\n      if (selectOnFocus) {\n        inputRef.current.select();\n      }\n    }\n\n    firstFocus.current = false;\n  };\n\n  var handleInputMouseDown = function handleInputMouseDown(event) {\n    if (inputValue === '' && (!disableOpenOnFocus || inputRef.current === document.activeElement)) {\n      handlePopupIndicator(event);\n    }\n  };\n\n  var dirty = freeSolo && inputValue.length > 0;\n  dirty = dirty || (multiple ? value.length > 0 : value !== null);\n  var groupedOptions = filteredOptions;\n\n  if (groupBy) {\n    var result = []; // used to keep track of key and indexes in the result array\n\n    var indexByKey = new Map();\n    var currentResultIndex = 0;\n    filteredOptions.forEach(function (option) {\n      var key = groupBy(option);\n\n      if (indexByKey.get(key) === undefined) {\n        indexByKey.set(key, currentResultIndex);\n        result.push({\n          key: key,\n          options: []\n        });\n        currentResultIndex += 1;\n      }\n\n      result[indexByKey.get(key)].options.push(option);\n    }); // now we can add the `index` property based on the options length\n\n    var indexCounter = 0;\n    result.forEach(function (option) {\n      option.index = indexCounter;\n      indexCounter += option.options.length;\n    });\n    groupedOptions = result;\n  }\n\n  return {\n    getRootProps: function getRootProps() {\n      var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return _extends({\n        'aria-owns': popupOpen ? \"\".concat(id, \"-popup\") : null,\n        role: 'combobox',\n        'aria-expanded': popupOpen\n      }, other, {\n        onKeyDown: handleKeyDown(other),\n        onMouseDown: handleMouseDown,\n        onClick: handleClick\n      });\n    },\n    getInputLabelProps: function getInputLabelProps() {\n      return {\n        id: \"\".concat(id, \"-label\"),\n        htmlFor: id\n      };\n    },\n    getInputProps: function getInputProps() {\n      return {\n        id: id,\n        value: inputValue,\n        onBlur: handleBlur,\n        onFocus: handleFocus,\n        onChange: handleInputChange,\n        onMouseDown: handleInputMouseDown,\n        // if open then this is handled imperativeley so don't let react override\n        // only have an opinion about this when closed\n        'aria-activedescendant': popupOpen ? '' : null,\n        'aria-autocomplete': autoComplete ? 'both' : 'list',\n        'aria-controls': popupOpen ? \"\".concat(id, \"-popup\") : null,\n        // Disable browser's suggestion that might overlap with the popup.\n        // Handle autocomplete but not autofill.\n        autoComplete: 'off',\n        ref: inputRef,\n        autoCapitalize: 'none',\n        spellCheck: 'false'\n      };\n    },\n    getClearProps: function getClearProps() {\n      return {\n        tabIndex: -1,\n        onClick: handleClear\n      };\n    },\n    getPopupIndicatorProps: function getPopupIndicatorProps() {\n      return {\n        tabIndex: -1,\n        onClick: handlePopupIndicator\n      };\n    },\n    getTagProps: function getTagProps(_ref2) {\n      var index = _ref2.index;\n      return {\n        key: index,\n        'data-tag-index': index,\n        tabIndex: -1,\n        onDelete: handleTagDelete(index)\n      };\n    },\n    getListboxProps: function getListboxProps() {\n      return {\n        role: 'listbox',\n        id: \"\".concat(id, \"-popup\"),\n        'aria-labelledby': \"\".concat(id, \"-label\"),\n        ref: handleListboxRef,\n        onMouseDown: function onMouseDown(event) {\n          // Prevent blur\n          event.preventDefault();\n        }\n      };\n    },\n    getOptionProps: function getOptionProps(_ref3) {\n      var index = _ref3.index,\n          option = _ref3.option;\n      var selected = (multiple ? value : [value]).some(function (value2) {\n        return value2 != null && getOptionSelected(option, value2);\n      });\n      var disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n      return {\n        key: index,\n        tabIndex: -1,\n        role: 'option',\n        id: \"\".concat(id, \"-option-\").concat(index),\n        onMouseOver: handleOptionMouseOver,\n        onClick: handleOptionClick,\n        onTouchStart: handleOptionTouchStart,\n        'data-option-index': index,\n        'aria-disabled': disabled,\n        'aria-selected': selected\n      };\n    },\n    id: id,\n    inputValue: inputValue,\n    value: value,\n    dirty: dirty,\n    popupOpen: popupOpen,\n    focused: focused || focusedTag !== -1,\n    anchorEl: anchorEl,\n    setAnchorEl: setAnchorEl,\n    focusedTag: focusedTag,\n    groupedOptions: groupedOptions\n  };\n}\nuseAutocomplete.propTypes = {\n  /**\n   * If `true`, the portion of the selected suggestion that has not been typed by the user,\n   * known as the completion string, appears inline after the input cursor in the textbox.\n   * The inline completion string is visually highlighted and has a selected state.\n   */\n  autoComplete: PropTypes.bool,\n\n  /**\n   * If `true`, the first option is automatically highlighted.\n   */\n  autoHighlight: PropTypes.bool,\n\n  /**\n   * If `true`, the selected option becomes the value of the input\n   * when the Autocomplete loses focus unless the user chooses\n   * a different option or changes the character string in the input.\n   */\n  autoSelect: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, clear all values when the user presses escape and the popup is closed.\n   */\n  clearOnEscape: PropTypes.bool,\n\n  /**\n   * The component name that is using this hook. Used for warnings.\n   */\n  componentName: PropTypes.string,\n\n  /**\n   * If `true`, the popup will ignore the blur event if the input if filled.\n   * You can inspect the popup markup with your browser tools.\n   * Consider this option when you need to customize the component.\n   */\n  debug: PropTypes.bool,\n\n  /**\n   * The default input value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the input can't be cleared.\n   */\n  disableClearable: PropTypes.bool,\n\n  /**\n   * If `true`, the popup won't close when a value is selected.\n   */\n  disableCloseOnSelect: PropTypes.bool,\n\n  /**\n   * If `true`, the list box in the popup will not wrap focus.\n   */\n  disableListWrap: PropTypes.bool,\n\n  /**\n   * If `true`, the popup won't open on input focus.\n   */\n  disableOpenOnFocus: PropTypes.bool,\n\n  /**\n   * A filter function that determins the options that are eligible.\n   *\n   * @param {any} options The options to render.\n   * @param {object} state The state of the component.\n   * @returns {boolean}\n   */\n  filterOptions: PropTypes.func,\n\n  /**\n   * If `true`, hide the selected options from the list box.\n   */\n  filterSelectedOptions: PropTypes.bool,\n\n  /**\n   * If `true`, the Autocomplete is free solo, meaning that the user input is not bound to provided options.\n   */\n  freeSolo: PropTypes.bool,\n\n  /**\n   * Used to determine the disabled state for a given option.\n   */\n  getOptionDisabled: PropTypes.func,\n\n  /**\n   * Used to determine the string value for a given option.\n   * It's used to fill the input (and the list box options if `renderOption` is not provided).\n   */\n  getOptionLabel: PropTypes.func,\n\n  /**\n   * If provided, the options will be grouped under the returned string.\n   * The groupBy value is also used as the text for group headings when `renderGroup` is not provided.\n   *\n   * @param {any} options The option to group.\n   * @returns {string}\n   */\n  groupBy: PropTypes.func,\n\n  /**\n   * This prop is used to help implement the accessibility logic.\n   * If you don't provide this prop. It falls back to a randomly generated id.\n   */\n  id: PropTypes.string,\n\n  /**\n   * If `true`, the highlight can move to the input.\n   */\n  includeInputInList: PropTypes.bool,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {object} event The event source of the callback\n   * @param {any} value\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the popup requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the text input value changes.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} value The new value of the text input.\n   * @param {string} reason One of \"input\" (user input) or \"reset\" (programmatic change).\n   */\n  onInputChange: PropTypes.func,\n\n  /**\n   * Callback fired when the popup requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control the popup` open state.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Array of options.\n   */\n  options: PropTypes.array,\n\n  /**\n   * The input value.\n   */\n  value: PropTypes.any\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      boxSizing: 'border-box',\n      lineHeight: '48px',\n      listStyle: 'none',\n      color: theme.palette.text.secondary,\n      fontFamily: theme.typography.fontFamily,\n      fontWeight: theme.typography.fontWeightMedium,\n      fontSize: theme.typography.pxToRem(14)\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      color: theme.palette.primary.main\n    },\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit'\n    },\n\n    /* Styles applied to the inner `component` element if `disableGutters={false}`. */\n    gutters: {\n      paddingLeft: 16,\n      paddingRight: 16\n    },\n\n    /* Styles applied to the root element if `inset={true}`. */\n    inset: {\n      paddingLeft: 72\n    },\n\n    /* Styles applied to the root element if `disableSticky={false}`. */\n    sticky: {\n      position: 'sticky',\n      top: 0,\n      zIndex: 1,\n      backgroundColor: 'inherit'\n    }\n  };\n};\nvar ListSubheader = React.forwardRef(function ListSubheader(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'li' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$disableSticky = props.disableSticky,\n      disableSticky = _props$disableSticky === void 0 ? false : _props$disableSticky,\n      _props$inset = props.inset,\n      inset = _props$inset === void 0 ? false : _props$inset,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"component\", \"disableGutters\", \"disableSticky\", \"inset\"]);\n\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className, color !== 'default' && classes[\"color\".concat(capitalize(color))], inset && classes.inset, !disableSticky && classes.sticky, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListSubheader.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'primary', 'inherit']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * If `true`, the List Subheader will not have gutters.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * If `true`, the List Subheader will not stick to the top during scroll.\n   */\n  disableSticky: PropTypes.bool,\n\n  /**\n   * If `true`, the List Subheader will be indented.\n   */\n  inset: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiListSubheader'\n})(ListSubheader);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    width: '100%',\n    overflowX: 'auto'\n  }\n};\nvar TableContainer = React.forwardRef(function TableContainer(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'div' : _props$component,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n  return React.createElement(Component, _extends({\n    ref: ref,\n    className: clsx(classes.root, className)\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableContainer.propTypes = {\n  /**\n   * The table itself, normally `<Table />`\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableContainer'\n})(TableContainer);","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"\n}), 'KeyboardArrowRight');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n}), 'Edit');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"\n}), 'AttachFile');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"\n}), 'Info');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M13 6.99h3L12 3 8 6.99h3v10.02H8L12 21l4-3.99h-3z\"\n}), 'Height');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckCircle');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport { duration } from '../styles/transitions';\nimport useTheme from '../styles/useTheme';\nimport { reflow, getTransitionProps } from '../transitions/utils';\nimport useForkRef from '../utils/useForkRef';\nvar styles = {\n  entering: {\n    transform: 'none'\n  },\n  entered: {\n    transform: 'none'\n  }\n};\nvar defaultTimeout = {\n  enter: duration.enteringScreen,\n  exit: duration.leavingScreen\n};\n/**\n * The Zoom transition can be used for the floating variant of the\n * [Button](/components/buttons/#floating-action-buttons) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Zoom = React.forwardRef(function Zoom(props, ref) {\n  var children = props.children,\n      inProp = props.in,\n      onEnter = props.onEnter,\n      onExit = props.onExit,\n      style = props.style,\n      _props$timeout = props.timeout,\n      timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n      other = _objectWithoutProperties(props, [\"children\", \"in\", \"onEnter\", \"onExit\", \"style\", \"timeout\"]);\n\n  var theme = useTheme();\n  var handleRef = useForkRef(children.ref, ref);\n\n  var handleEnter = function handleEnter(node, isAppearing) {\n    reflow(node); // So the animation always start from the start.\n\n    var transitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('transform', transitionProps);\n    node.style.transition = theme.transitions.create('transform', transitionProps);\n\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n\n  var handleExit = function handleExit(node) {\n    var transitionProps = getTransitionProps({\n      style: style,\n      timeout: timeout\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('transform', transitionProps);\n    node.style.transition = theme.transitions.create('transform', transitionProps);\n\n    if (onExit) {\n      onExit(node);\n    }\n  };\n\n  return React.createElement(Transition, _extends({\n    appear: true,\n    in: inProp,\n    onEnter: handleEnter,\n    onExit: handleExit,\n    timeout: timeout\n  }, other), function (state, childProps) {\n    return React.cloneElement(children, _extends({\n      style: _extends({\n        transform: 'scale(0)',\n        visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n      }, styles[state], {}, style, {}, children.props.style),\n      ref: handleRef\n    }, childProps));\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Zoom.propTypes = {\n  /**\n   * A single child content element.\n   */\n  children: PropTypes.element,\n\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Zoom;","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M16.59 7.58L10 14.17l-3.59-3.58L5 12l5 5 8-8zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'CheckCircleOutline');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'ErrorOutline');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"\n}), 'Error');","import React from 'react';\nimport createSvgIcon from './utils/createSvgIcon';\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"\n}), 'KeyboardArrowLeft');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    display: 'table-footer-group'\n  }\n};\nvar tablelvl2 = {\n  variant: 'footer'\n};\nvar TableFooter = React.forwardRef(function TableFooter(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'tfoot' : _props$component,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n  return React.createElement(Tablelvl2Context.Provider, {\n    value: tablelvl2\n  }, React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other)));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableFooter.propTypes = {\n  /**\n   * The content of the component, normally `TableRow`.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableFooter'\n})(TableFooter);","/**\n * @deprecated use ServerZoneType instead\n */\nexport enum ServerZone {\n  US = 'US',\n  EU = 'EU',\n}\n\nexport type ServerZoneType = 'US' | 'EU';\n","var NodeType;\r\n(function (NodeType) {\r\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n    return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n    var host = n === null || n === void 0 ? void 0 : n.host;\r\n    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n    if (cssText.includes(' background-clip: text;') &&\r\n        !cssText.includes(' -webkit-background-clip: text;')) {\r\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n    }\r\n    return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n    var cssText = rule.cssText;\r\n    if (cssText.split('\"').length < 3)\r\n        return cssText;\r\n    var statement = ['@import', \"url(\".concat(JSON.stringify(rule.href), \")\")];\r\n    if (rule.layerName === '') {\r\n        statement.push(\"layer\");\r\n    }\r\n    else if (rule.layerName) {\r\n        statement.push(\"layer(\".concat(rule.layerName, \")\"));\r\n    }\r\n    if (rule.supportsText) {\r\n        statement.push(\"supports(\".concat(rule.supportsText, \")\"));\r\n    }\r\n    if (rule.media.length) {\r\n        statement.push(rule.media.mediaText);\r\n    }\r\n    return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n    try {\r\n        var rules = s.rules || s.cssRules;\r\n        return rules\r\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n            : null;\r\n    }\r\n    catch (error) {\r\n        return null;\r\n    }\r\n}\r\nfunction stringifyRule(rule) {\r\n    var importStringified;\r\n    if (isCSSImportRule(rule)) {\r\n        try {\r\n            importStringified =\r\n                stringifyStylesheet(rule.styleSheet) ||\r\n                    escapeImportStatement(rule);\r\n        }\r\n        catch (error) {\r\n        }\r\n    }\r\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n        return fixSafariColons(rule.cssText);\r\n    }\r\n    return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n    var regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n    return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n    return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n    return 'selectorText' in rule;\r\n}\r\nvar Mirror = (function () {\r\n    function Mirror() {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    }\r\n    Mirror.prototype.getId = function (n) {\r\n        var _a;\r\n        if (!n)\r\n            return -1;\r\n        var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n        return id !== null && id !== void 0 ? id : -1;\r\n    };\r\n    Mirror.prototype.getNode = function (id) {\r\n        return this.idNodeMap.get(id) || null;\r\n    };\r\n    Mirror.prototype.getIds = function () {\r\n        return Array.from(this.idNodeMap.keys());\r\n    };\r\n    Mirror.prototype.getMeta = function (n) {\r\n        return this.nodeMetaMap.get(n) || null;\r\n    };\r\n    Mirror.prototype.removeNodeFromMap = function (n) {\r\n        var _this = this;\r\n        var id = this.getId(n);\r\n        this.idNodeMap[\"delete\"](id);\r\n        if (n.childNodes) {\r\n            n.childNodes.forEach(function (childNode) {\r\n                return _this.removeNodeFromMap(childNode);\r\n            });\r\n        }\r\n    };\r\n    Mirror.prototype.has = function (id) {\r\n        return this.idNodeMap.has(id);\r\n    };\r\n    Mirror.prototype.hasNode = function (node) {\r\n        return this.nodeMetaMap.has(node);\r\n    };\r\n    Mirror.prototype.add = function (n, meta) {\r\n        var id = meta.id;\r\n        this.idNodeMap.set(id, n);\r\n        this.nodeMetaMap.set(n, meta);\r\n    };\r\n    Mirror.prototype.replace = function (id, n) {\r\n        var oldNode = this.getNode(id);\r\n        if (oldNode) {\r\n            var meta = this.nodeMetaMap.get(oldNode);\r\n            if (meta)\r\n                this.nodeMetaMap.set(n, meta);\r\n        }\r\n        this.idNodeMap.set(id, n);\r\n    };\r\n    Mirror.prototype.reset = function () {\r\n        this.idNodeMap = new Map();\r\n        this.nodeMetaMap = new WeakMap();\r\n    };\r\n    return Mirror;\r\n}());\r\nfunction createMirror() {\r\n    return new Mirror();\r\n}\r\nfunction maskInputValue(_a) {\r\n    var element = _a.element, maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\r\n    var text = value || '';\r\n    var actualType = type && toLowerCase(type);\r\n    if (maskInputOptions[tagName.toLowerCase()] ||\r\n        (actualType && maskInputOptions[actualType])) {\r\n        if (maskInputFn) {\r\n            text = maskInputFn(text, element);\r\n        }\r\n        else {\r\n            text = '*'.repeat(text.length);\r\n        }\r\n    }\r\n    return text;\r\n}\r\nfunction toLowerCase(str) {\r\n    return str.toLowerCase();\r\n}\r\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n    var ctx = canvas.getContext('2d');\r\n    if (!ctx)\r\n        return true;\r\n    var chunkSize = 50;\r\n    for (var x = 0; x < canvas.width; x += chunkSize) {\r\n        for (var y = 0; y < canvas.height; y += chunkSize) {\r\n            var getImageData = ctx.getImageData;\r\n            var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n                : getImageData;\r\n            var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n            if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n    if (!a || !b || a.type !== b.type)\r\n        return false;\r\n    if (a.type === NodeType.Document)\r\n        return a.compatMode === b.compatMode;\r\n    else if (a.type === NodeType.DocumentType)\r\n        return (a.name === b.name &&\r\n            a.publicId === b.publicId &&\r\n            a.systemId === b.systemId);\r\n    else if (a.type === NodeType.Comment ||\r\n        a.type === NodeType.Text ||\r\n        a.type === NodeType.CDATA)\r\n        return a.textContent === b.textContent;\r\n    else if (a.type === NodeType.Element)\r\n        return (a.tagName === b.tagName &&\r\n            JSON.stringify(a.attributes) ===\r\n                JSON.stringify(b.attributes) &&\r\n            a.isSVG === b.isSVG &&\r\n            a.needBlock === b.needBlock);\r\n    return false;\r\n}\r\nfunction getInputType(element) {\r\n    var type = element.type;\r\n    return element.hasAttribute('data-rr-is-password')\r\n        ? 'password'\r\n        : type\r\n            ?\r\n                toLowerCase(type)\r\n            : null;\r\n}\n\nvar _id = 1;\r\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nvar IGNORED_NODE = -2;\r\nfunction genId() {\r\n    return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n    if (element instanceof HTMLFormElement) {\r\n        return 'form';\r\n    }\r\n    var processedTagName = toLowerCase(element.tagName);\r\n    if (tagNameRegex.test(processedTagName)) {\r\n        return 'div';\r\n    }\r\n    return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n    var origin = '';\r\n    if (url.indexOf('//') > -1) {\r\n        origin = url.split('/').slice(0, 3).join('/');\r\n    }\r\n    else {\r\n        origin = url.split('/')[0];\r\n    }\r\n    origin = origin.split('?')[0];\r\n    return origin;\r\n}\r\nvar canvasService;\r\nvar canvasCtx;\r\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nvar URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nvar URL_WWW_MATCH = /^www\\..*/i;\r\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n    return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\r\n        var filePath = path1 || path2 || path3;\r\n        var maybeQuote = quote1 || quote2 || '';\r\n        if (!filePath) {\r\n            return origin;\r\n        }\r\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n            return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n        }\r\n        if (DATA_URI.test(filePath)) {\r\n            return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n        }\r\n        if (filePath[0] === '/') {\r\n            return \"url(\".concat(maybeQuote).concat(extractOrigin(href) + filePath).concat(maybeQuote, \")\");\r\n        }\r\n        var stack = href.split('/');\r\n        var parts = filePath.split('/');\r\n        stack.pop();\r\n        for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n            var part = parts_1[_i];\r\n            if (part === '.') {\r\n                continue;\r\n            }\r\n            else if (part === '..') {\r\n                stack.pop();\r\n            }\r\n            else {\r\n                stack.push(part);\r\n            }\r\n        }\r\n        return \"url(\".concat(maybeQuote).concat(stack.join('/')).concat(maybeQuote, \")\");\r\n    });\r\n}\r\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n    if (attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    var pos = 0;\r\n    function collectCharacters(regEx) {\r\n        var chars;\r\n        var match = regEx.exec(attributeValue.substring(pos));\r\n        if (match) {\r\n            chars = match[0];\r\n            pos += chars.length;\r\n            return chars;\r\n        }\r\n        return '';\r\n    }\r\n    var output = [];\r\n    while (true) {\r\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n        if (pos >= attributeValue.length) {\r\n            break;\r\n        }\r\n        var url = collectCharacters(SRCSET_NOT_SPACES);\r\n        if (url.slice(-1) === ',') {\r\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n            output.push(url);\r\n        }\r\n        else {\r\n            var descriptorsStr = '';\r\n            url = absoluteToDoc(doc, url);\r\n            var inParens = false;\r\n            while (true) {\r\n                var c = attributeValue.charAt(pos);\r\n                if (c === '') {\r\n                    output.push((url + descriptorsStr).trim());\r\n                    break;\r\n                }\r\n                else if (!inParens) {\r\n                    if (c === ',') {\r\n                        pos += 1;\r\n                        output.push((url + descriptorsStr).trim());\r\n                        break;\r\n                    }\r\n                    else if (c === '(') {\r\n                        inParens = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (c === ')') {\r\n                        inParens = false;\r\n                    }\r\n                }\r\n                descriptorsStr += c;\r\n                pos += 1;\r\n            }\r\n        }\r\n    }\r\n    return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n    if (!attributeValue || attributeValue.trim() === '') {\r\n        return attributeValue;\r\n    }\r\n    var a = doc.createElement('a');\r\n    a.href = attributeValue;\r\n    return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n    var a = document.createElement('a');\r\n    a.href = '';\r\n    return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n    if (!value) {\r\n        return value;\r\n    }\r\n    if (name === 'src' ||\r\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'xlink:href' && value[0] !== '#') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'background' &&\r\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    else if (name === 'srcset') {\r\n        return getAbsoluteSrcsetString(doc, value);\r\n    }\r\n    else if (name === 'style') {\r\n        return absoluteToStylesheet(value, getHref());\r\n    }\r\n    else if (tagName === 'object' && name === 'data') {\r\n        return absoluteToDoc(doc, value);\r\n    }\r\n    return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n    try {\r\n        if (typeof blockClass === 'string') {\r\n            if (element.classList.contains(blockClass)) {\r\n                return true;\r\n            }\r\n        }\r\n        else {\r\n            for (var eIndex = element.classList.length; eIndex--;) {\r\n                var className = element.classList[eIndex];\r\n                if (blockClass.test(className)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        if (blockSelector) {\r\n            return element.matches(blockSelector);\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n    if (!node)\r\n        return false;\r\n    if (node.nodeType !== node.ELEMENT_NODE) {\r\n        if (!checkAncestors)\r\n            return false;\r\n        return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n    }\r\n    for (var eIndex = node.classList.length; eIndex--;) {\r\n        var className = node.classList[eIndex];\r\n        if (regex.test(className)) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!checkAncestors)\r\n        return false;\r\n    return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\r\n    try {\r\n        var el = node.nodeType === node.ELEMENT_NODE\r\n            ? node\r\n            : node.parentElement;\r\n        if (el === null)\r\n            return false;\r\n        if (typeof maskTextClass === 'string') {\r\n            if (el.classList.contains(maskTextClass))\r\n                return true;\r\n            if (el.closest(\".\".concat(maskTextClass)))\r\n                return true;\r\n        }\r\n        else {\r\n            if (classMatchesRegex(el, maskTextClass, true))\r\n                return true;\r\n        }\r\n        if (maskTextSelector) {\r\n            if (el.matches(maskTextSelector))\r\n                return true;\r\n            if (el.closest(maskTextSelector))\r\n                return true;\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n    var win = iframeEl.contentWindow;\r\n    if (!win) {\r\n        return;\r\n    }\r\n    var fired = false;\r\n    var readyState;\r\n    try {\r\n        readyState = win.document.readyState;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (readyState !== 'complete') {\r\n        var timer_1 = setTimeout(function () {\r\n            if (!fired) {\r\n                listener();\r\n                fired = true;\r\n            }\r\n        }, iframeLoadTimeout);\r\n        iframeEl.addEventListener('load', function () {\r\n            clearTimeout(timer_1);\r\n            fired = true;\r\n            listener();\r\n        });\r\n        return;\r\n    }\r\n    var blankUrl = 'about:blank';\r\n    if (win.location.href !== blankUrl ||\r\n        iframeEl.src === blankUrl ||\r\n        iframeEl.src === '') {\r\n        setTimeout(listener, 0);\r\n        return iframeEl.addEventListener('load', listener);\r\n    }\r\n    iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n    var fired = false;\r\n    var styleSheetLoaded;\r\n    try {\r\n        styleSheetLoaded = link.sheet;\r\n    }\r\n    catch (error) {\r\n        return;\r\n    }\r\n    if (styleSheetLoaded)\r\n        return;\r\n    var timer = setTimeout(function () {\r\n        if (!fired) {\r\n            listener();\r\n            fired = true;\r\n        }\r\n    }, styleSheetLoadTimeout);\r\n    link.addEventListener('load', function () {\r\n        clearTimeout(timer);\r\n        fired = true;\r\n        listener();\r\n    });\r\n}\r\nfunction serializeNode(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c;\r\n    var rootId = getRootId(doc, mirror);\r\n    switch (n.nodeType) {\r\n        case n.DOCUMENT_NODE:\r\n            if (n.compatMode !== 'CSS1Compat') {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: [],\r\n                    compatMode: n.compatMode\r\n                };\r\n            }\r\n            else {\r\n                return {\r\n                    type: NodeType.Document,\r\n                    childNodes: []\r\n                };\r\n            }\r\n        case n.DOCUMENT_TYPE_NODE:\r\n            return {\r\n                type: NodeType.DocumentType,\r\n                name: n.name,\r\n                publicId: n.publicId,\r\n                systemId: n.systemId,\r\n                rootId: rootId\r\n            };\r\n        case n.ELEMENT_NODE:\r\n            return serializeElementNode(n, {\r\n                doc: doc,\r\n                blockClass: blockClass,\r\n                blockSelector: blockSelector,\r\n                inlineStylesheet: inlineStylesheet,\r\n                maskInputOptions: maskInputOptions,\r\n                maskInputFn: maskInputFn,\r\n                dataURLOptions: dataURLOptions,\r\n                inlineImages: inlineImages,\r\n                recordCanvas: recordCanvas,\r\n                keepIframeSrcFn: keepIframeSrcFn,\r\n                newlyAddedElement: newlyAddedElement,\r\n                rootId: rootId\r\n            });\r\n        case n.TEXT_NODE:\r\n            return serializeTextNode(n, {\r\n                maskTextClass: maskTextClass,\r\n                maskTextSelector: maskTextSelector,\r\n                maskTextFn: maskTextFn,\r\n                rootId: rootId\r\n            });\r\n        case n.CDATA_SECTION_NODE:\r\n            return {\r\n                type: NodeType.CDATA,\r\n                textContent: '',\r\n                rootId: rootId\r\n            };\r\n        case n.COMMENT_NODE:\r\n            return {\r\n                type: NodeType.Comment,\r\n                textContent: n.textContent || '',\r\n                rootId: rootId\r\n            };\r\n        default:\r\n            return false;\r\n    }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n    if (!mirror.hasNode(doc))\r\n        return undefined;\r\n    var docId = mirror.getId(doc);\r\n    return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n    var _a;\r\n    var maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, maskTextFn = options.maskTextFn, rootId = options.rootId;\r\n    var parentTagName = n.parentNode && n.parentNode.tagName;\r\n    var textContent = n.textContent;\r\n    var isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n    var isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n    if (isStyle && textContent) {\r\n        try {\r\n            if (n.nextSibling || n.previousSibling) {\r\n            }\r\n            else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n                textContent = stringifyStylesheet(n.parentNode.sheet);\r\n            }\r\n        }\r\n        catch (err) {\r\n            console.warn(\"Cannot get CSS styles from text's parentNode. Error: \".concat(err), n);\r\n        }\r\n        textContent = absoluteToStylesheet(textContent, getHref());\r\n    }\r\n    if (isScript) {\r\n        textContent = 'SCRIPT_PLACEHOLDER';\r\n    }\r\n    if (!isStyle &&\r\n        !isScript &&\r\n        textContent &&\r\n        needMaskingText(n, maskTextClass, maskTextSelector)) {\r\n        textContent = maskTextFn\r\n            ? maskTextFn(textContent, n.parentElement)\r\n            : textContent.replace(/[\\S]/g, '*');\r\n    }\r\n    return {\r\n        type: NodeType.Text,\r\n        textContent: textContent || '',\r\n        isStyle: isStyle,\r\n        rootId: rootId\r\n    };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n    var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, rootId = options.rootId;\r\n    var needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n    var tagName = getValidTagName(n);\r\n    var attributes = {};\r\n    var len = n.attributes.length;\r\n    for (var i = 0; i < len; i++) {\r\n        var attr = n.attributes[i];\r\n        if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value);\r\n        }\r\n    }\r\n    if (tagName === 'link' && inlineStylesheet) {\r\n        var stylesheet = Array.from(doc.styleSheets).find(function (s) {\r\n            return s.href === n.href;\r\n        });\r\n        var cssText = null;\r\n        if (stylesheet) {\r\n            cssText = stringifyStylesheet(stylesheet);\r\n        }\r\n        if (cssText) {\r\n            delete attributes.rel;\r\n            delete attributes.href;\r\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n        }\r\n    }\r\n    if (tagName === 'style' &&\r\n        n.sheet &&\r\n        !(n.innerText || n.textContent || '').trim().length) {\r\n        var cssText = stringifyStylesheet(n.sheet);\r\n        if (cssText) {\r\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n        }\r\n    }\r\n    if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n        var value = n.value;\r\n        var checked = n.checked;\r\n        if (attributes.type !== 'radio' &&\r\n            attributes.type !== 'checkbox' &&\r\n            attributes.type !== 'submit' &&\r\n            attributes.type !== 'button' &&\r\n            value) {\r\n            var type = getInputType(n);\r\n            attributes.value = maskInputValue({\r\n                element: n,\r\n                type: type,\r\n                tagName: tagName,\r\n                value: value,\r\n                maskInputOptions: maskInputOptions,\r\n                maskInputFn: maskInputFn\r\n            });\r\n        }\r\n        else if (checked) {\r\n            attributes.checked = checked;\r\n        }\r\n    }\r\n    if (tagName === 'option') {\r\n        if (n.selected && !maskInputOptions['select']) {\r\n            attributes.selected = true;\r\n        }\r\n        else {\r\n            delete attributes.selected;\r\n        }\r\n    }\r\n    if (tagName === 'canvas' && recordCanvas) {\r\n        if (n.__context === '2d') {\r\n            if (!is2DCanvasBlank(n)) {\r\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n        }\r\n        else if (!('__context' in n)) {\r\n            var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            var blankCanvas = document.createElement('canvas');\r\n            blankCanvas.width = n.width;\r\n            blankCanvas.height = n.height;\r\n            var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            if (canvasDataURL !== blankCanvasDataURL) {\r\n                attributes.rr_dataURL = canvasDataURL;\r\n            }\r\n        }\r\n    }\r\n    if (tagName === 'img' && inlineImages) {\r\n        if (!canvasService) {\r\n            canvasService = doc.createElement('canvas');\r\n            canvasCtx = canvasService.getContext('2d');\r\n        }\r\n        var image_1 = n;\r\n        var oldValue_1 = image_1.crossOrigin;\r\n        image_1.crossOrigin = 'anonymous';\r\n        var recordInlineImage_1 = function () {\r\n            image_1.removeEventListener('load', recordInlineImage_1);\r\n            try {\r\n                canvasService.width = image_1.naturalWidth;\r\n                canvasService.height = image_1.naturalHeight;\r\n                canvasCtx.drawImage(image_1, 0, 0);\r\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n            }\r\n            catch (err) {\r\n                console.warn(\"Cannot inline img src=\".concat(image_1.currentSrc, \"! Error: \").concat(err));\r\n            }\r\n            oldValue_1\r\n                ? (attributes.crossOrigin = oldValue_1)\r\n                : image_1.removeAttribute('crossorigin');\r\n        };\r\n        if (image_1.complete && image_1.naturalWidth !== 0)\r\n            recordInlineImage_1();\r\n        else\r\n            image_1.addEventListener('load', recordInlineImage_1);\r\n    }\r\n    if (tagName === 'audio' || tagName === 'video') {\r\n        attributes.rr_mediaState = n.paused\r\n            ? 'paused'\r\n            : 'played';\r\n        attributes.rr_mediaCurrentTime = n.currentTime;\r\n    }\r\n    if (!newlyAddedElement) {\r\n        if (n.scrollLeft) {\r\n            attributes.rr_scrollLeft = n.scrollLeft;\r\n        }\r\n        if (n.scrollTop) {\r\n            attributes.rr_scrollTop = n.scrollTop;\r\n        }\r\n    }\r\n    if (needBlock) {\r\n        var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\r\n        attributes = {\r\n            \"class\": attributes[\"class\"],\r\n            rr_width: \"\".concat(width, \"px\"),\r\n            rr_height: \"\".concat(height, \"px\")\r\n        };\r\n    }\r\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n        if (!n.contentDocument) {\r\n            attributes.rr_src = attributes.src;\r\n        }\r\n        delete attributes.src;\r\n    }\r\n    return {\r\n        type: NodeType.Element,\r\n        tagName: tagName,\r\n        attributes: attributes,\r\n        childNodes: [],\r\n        isSVG: isSVGElement(n) || undefined,\r\n        needBlock: needBlock,\r\n        rootId: rootId\r\n    };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n    if (maybeAttr === undefined || maybeAttr === null) {\r\n        return '';\r\n    }\r\n    else {\r\n        return maybeAttr.toLowerCase();\r\n    }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n    if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n        return true;\r\n    }\r\n    else if (sn.type === NodeType.Element) {\r\n        if (slimDOMOptions.script &&\r\n            (sn.tagName === 'script' ||\r\n                (sn.tagName === 'link' &&\r\n                    (sn.attributes.rel === 'preload' ||\r\n                        sn.attributes.rel === 'modulepreload') &&\r\n                    sn.attributes.as === 'script') ||\r\n                (sn.tagName === 'link' &&\r\n                    sn.attributes.rel === 'prefetch' &&\r\n                    typeof sn.attributes.href === 'string' &&\r\n                    sn.attributes.href.endsWith('.js')))) {\r\n            return true;\r\n        }\r\n        else if (slimDOMOptions.headFavicon &&\r\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n                (sn.tagName === 'meta' &&\r\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n            return true;\r\n        }\r\n        else if (sn.tagName === 'meta') {\r\n            if (slimDOMOptions.headMetaDescKeywords &&\r\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaSocial &&\r\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaRobots &&\r\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaHttpEquiv &&\r\n                sn.attributes['http-equiv'] !== undefined) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaAuthorship &&\r\n                (lowerIfExists(sn.attributes.name) === 'author' ||\r\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\r\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\r\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\r\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n                return true;\r\n            }\r\n            else if (slimDOMOptions.headMetaVerification &&\r\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\r\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, onStylesheetLoad = options.onStylesheetLoad, _h = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _h === void 0 ? 5000 : _h, _j = options.keepIframeSrcFn, keepIframeSrcFn = _j === void 0 ? function () { return false; } : _j, _k = options.newlyAddedElement, newlyAddedElement = _k === void 0 ? false : _k;\r\n    var _l = options.preserveWhiteSpace, preserveWhiteSpace = _l === void 0 ? true : _l;\r\n    var _serializedNode = serializeNode(n, {\r\n        doc: doc,\r\n        mirror: mirror,\r\n        blockClass: blockClass,\r\n        blockSelector: blockSelector,\r\n        maskTextClass: maskTextClass,\r\n        maskTextSelector: maskTextSelector,\r\n        inlineStylesheet: inlineStylesheet,\r\n        maskInputOptions: maskInputOptions,\r\n        maskTextFn: maskTextFn,\r\n        maskInputFn: maskInputFn,\r\n        dataURLOptions: dataURLOptions,\r\n        inlineImages: inlineImages,\r\n        recordCanvas: recordCanvas,\r\n        keepIframeSrcFn: keepIframeSrcFn,\r\n        newlyAddedElement: newlyAddedElement\r\n    });\r\n    if (!_serializedNode) {\r\n        console.warn(n, 'not serialized');\r\n        return null;\r\n    }\r\n    var id;\r\n    if (mirror.hasNode(n)) {\r\n        id = mirror.getId(n);\r\n    }\r\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n        (!preserveWhiteSpace &&\r\n            _serializedNode.type === NodeType.Text &&\r\n            !_serializedNode.isStyle &&\r\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n        id = IGNORED_NODE;\r\n    }\r\n    else {\r\n        id = genId();\r\n    }\r\n    var serializedNode = Object.assign(_serializedNode, { id: id });\r\n    mirror.add(n, serializedNode);\r\n    if (id === IGNORED_NODE) {\r\n        return null;\r\n    }\r\n    if (onSerialize) {\r\n        onSerialize(n);\r\n    }\r\n    var recordChild = !skipChild;\r\n    if (serializedNode.type === NodeType.Element) {\r\n        recordChild = recordChild && !serializedNode.needBlock;\r\n        delete serializedNode.needBlock;\r\n        var shadowRoot = n.shadowRoot;\r\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n            serializedNode.isShadowHost = true;\r\n    }\r\n    if ((serializedNode.type === NodeType.Document ||\r\n        serializedNode.type === NodeType.Element) &&\r\n        recordChild) {\r\n        if (slimDOMOptions.headWhitespace &&\r\n            serializedNode.type === NodeType.Element &&\r\n            serializedNode.tagName === 'head') {\r\n            preserveWhiteSpace = false;\r\n        }\r\n        var bypassOptions = {\r\n            doc: doc,\r\n            mirror: mirror,\r\n            blockClass: blockClass,\r\n            blockSelector: blockSelector,\r\n            maskTextClass: maskTextClass,\r\n            maskTextSelector: maskTextSelector,\r\n            skipChild: skipChild,\r\n            inlineStylesheet: inlineStylesheet,\r\n            maskInputOptions: maskInputOptions,\r\n            maskTextFn: maskTextFn,\r\n            maskInputFn: maskInputFn,\r\n            slimDOMOptions: slimDOMOptions,\r\n            dataURLOptions: dataURLOptions,\r\n            inlineImages: inlineImages,\r\n            recordCanvas: recordCanvas,\r\n            preserveWhiteSpace: preserveWhiteSpace,\r\n            onSerialize: onSerialize,\r\n            onIframeLoad: onIframeLoad,\r\n            iframeLoadTimeout: iframeLoadTimeout,\r\n            onStylesheetLoad: onStylesheetLoad,\r\n            stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n            keepIframeSrcFn: keepIframeSrcFn\r\n        };\r\n        for (var _i = 0, _m = Array.from(n.childNodes); _i < _m.length; _i++) {\r\n            var childN = _m[_i];\r\n            var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n            if (serializedChildNode) {\r\n                serializedNode.childNodes.push(serializedChildNode);\r\n            }\r\n        }\r\n        if (isElement(n) && n.shadowRoot) {\r\n            for (var _o = 0, _p = Array.from(n.shadowRoot.childNodes); _o < _p.length; _o++) {\r\n                var childN = _p[_o];\r\n                var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n                if (serializedChildNode) {\r\n                    isNativeShadowDom(n.shadowRoot) &&\r\n                        (serializedChildNode.isShadow = true);\r\n                    serializedNode.childNodes.push(serializedChildNode);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (n.parentNode &&\r\n        isShadowRoot(n.parentNode) &&\r\n        isNativeShadowDom(n.parentNode)) {\r\n        serializedNode.isShadow = true;\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'iframe') {\r\n        onceIframeLoaded(n, function () {\r\n            var iframeDoc = n.contentDocument;\r\n            if (iframeDoc && onIframeLoad) {\r\n                var serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n                    doc: iframeDoc,\r\n                    mirror: mirror,\r\n                    blockClass: blockClass,\r\n                    blockSelector: blockSelector,\r\n                    maskTextClass: maskTextClass,\r\n                    maskTextSelector: maskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet: inlineStylesheet,\r\n                    maskInputOptions: maskInputOptions,\r\n                    maskTextFn: maskTextFn,\r\n                    maskInputFn: maskInputFn,\r\n                    slimDOMOptions: slimDOMOptions,\r\n                    dataURLOptions: dataURLOptions,\r\n                    inlineImages: inlineImages,\r\n                    recordCanvas: recordCanvas,\r\n                    preserveWhiteSpace: preserveWhiteSpace,\r\n                    onSerialize: onSerialize,\r\n                    onIframeLoad: onIframeLoad,\r\n                    iframeLoadTimeout: iframeLoadTimeout,\r\n                    onStylesheetLoad: onStylesheetLoad,\r\n                    stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n                    keepIframeSrcFn: keepIframeSrcFn\r\n                });\r\n                if (serializedIframeNode) {\r\n                    onIframeLoad(n, serializedIframeNode);\r\n                }\r\n            }\r\n        }, iframeLoadTimeout);\r\n    }\r\n    if (serializedNode.type === NodeType.Element &&\r\n        serializedNode.tagName === 'link' &&\r\n        serializedNode.attributes.rel === 'stylesheet') {\r\n        onceStylesheetLoaded(n, function () {\r\n            if (onStylesheetLoad) {\r\n                var serializedLinkNode = serializeNodeWithId(n, {\r\n                    doc: doc,\r\n                    mirror: mirror,\r\n                    blockClass: blockClass,\r\n                    blockSelector: blockSelector,\r\n                    maskTextClass: maskTextClass,\r\n                    maskTextSelector: maskTextSelector,\r\n                    skipChild: false,\r\n                    inlineStylesheet: inlineStylesheet,\r\n                    maskInputOptions: maskInputOptions,\r\n                    maskTextFn: maskTextFn,\r\n                    maskInputFn: maskInputFn,\r\n                    slimDOMOptions: slimDOMOptions,\r\n                    dataURLOptions: dataURLOptions,\r\n                    inlineImages: inlineImages,\r\n                    recordCanvas: recordCanvas,\r\n                    preserveWhiteSpace: preserveWhiteSpace,\r\n                    onSerialize: onSerialize,\r\n                    onIframeLoad: onIframeLoad,\r\n                    iframeLoadTimeout: iframeLoadTimeout,\r\n                    onStylesheetLoad: onStylesheetLoad,\r\n                    stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n                    keepIframeSrcFn: keepIframeSrcFn\r\n                });\r\n                if (serializedLinkNode) {\r\n                    onStylesheetLoad(n, serializedLinkNode);\r\n                }\r\n            }\r\n        }, stylesheetLoadTimeout);\r\n    }\r\n    return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n    var _a = options || {}, _b = _a.mirror, mirror = _b === void 0 ? new Mirror() : _b, _c = _a.blockClass, blockClass = _c === void 0 ? 'rr-block' : _c, _d = _a.blockSelector, blockSelector = _d === void 0 ? null : _d, _e = _a.maskTextClass, maskTextClass = _e === void 0 ? 'rr-mask' : _e, _f = _a.maskTextSelector, maskTextSelector = _f === void 0 ? null : _f, _g = _a.inlineStylesheet, inlineStylesheet = _g === void 0 ? true : _g, _h = _a.inlineImages, inlineImages = _h === void 0 ? false : _h, _j = _a.recordCanvas, recordCanvas = _j === void 0 ? false : _j, _k = _a.maskAllInputs, maskAllInputs = _k === void 0 ? false : _k, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _l = _a.slimDOM, slimDOM = _l === void 0 ? false : _l, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, onStylesheetLoad = _a.onStylesheetLoad, stylesheetLoadTimeout = _a.stylesheetLoadTimeout, _m = _a.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m;\r\n    var maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            password: true\r\n        }\r\n        : maskAllInputs === false\r\n            ? {\r\n                password: true\r\n            }\r\n            : maskAllInputs;\r\n    var slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n        ?\r\n            {\r\n                script: true,\r\n                comment: true,\r\n                headFavicon: true,\r\n                headWhitespace: true,\r\n                headMetaDescKeywords: slimDOM === 'all',\r\n                headMetaSocial: true,\r\n                headMetaRobots: true,\r\n                headMetaHttpEquiv: true,\r\n                headMetaAuthorship: true,\r\n                headMetaVerification: true\r\n            }\r\n        : slimDOM === false\r\n            ? {}\r\n            : slimDOM;\r\n    return serializeNodeWithId(n, {\r\n        doc: n,\r\n        mirror: mirror,\r\n        blockClass: blockClass,\r\n        blockSelector: blockSelector,\r\n        maskTextClass: maskTextClass,\r\n        maskTextSelector: maskTextSelector,\r\n        skipChild: false,\r\n        inlineStylesheet: inlineStylesheet,\r\n        maskInputOptions: maskInputOptions,\r\n        maskTextFn: maskTextFn,\r\n        maskInputFn: maskInputFn,\r\n        slimDOMOptions: slimDOMOptions,\r\n        dataURLOptions: dataURLOptions,\r\n        inlineImages: inlineImages,\r\n        recordCanvas: recordCanvas,\r\n        preserveWhiteSpace: preserveWhiteSpace,\r\n        onSerialize: onSerialize,\r\n        onIframeLoad: onIframeLoad,\r\n        iframeLoadTimeout: iframeLoadTimeout,\r\n        onStylesheetLoad: onStylesheetLoad,\r\n        stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n        keepIframeSrcFn: keepIframeSrcFn,\r\n        newlyAddedElement: false\r\n    });\r\n}\r\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options) {\r\n    if (options === void 0) { options = {}; }\r\n    var lineno = 1;\r\n    var column = 1;\r\n    function updatePosition(str) {\r\n        var lines = str.match(/\\n/g);\r\n        if (lines) {\r\n            lineno += lines.length;\r\n        }\r\n        var i = str.lastIndexOf('\\n');\r\n        column = i === -1 ? column + str.length : str.length - i;\r\n    }\r\n    function position() {\r\n        var start = { line: lineno, column: column };\r\n        return function (node) {\r\n            node.position = new Position(start);\r\n            whitespace();\r\n            return node;\r\n        };\r\n    }\r\n    var Position = (function () {\r\n        function Position(start) {\r\n            this.start = start;\r\n            this.end = { line: lineno, column: column };\r\n            this.source = options.source;\r\n        }\r\n        return Position;\r\n    }());\r\n    Position.prototype.content = css;\r\n    var errorsList = [];\r\n    function error(msg) {\r\n        var err = new Error(\"\".concat(options.source || '', \":\").concat(lineno, \":\").concat(column, \": \").concat(msg));\r\n        err.reason = msg;\r\n        err.filename = options.source;\r\n        err.line = lineno;\r\n        err.column = column;\r\n        err.source = css;\r\n        if (options.silent) {\r\n            errorsList.push(err);\r\n        }\r\n        else {\r\n            throw err;\r\n        }\r\n    }\r\n    function stylesheet() {\r\n        var rulesList = rules();\r\n        return {\r\n            type: 'stylesheet',\r\n            stylesheet: {\r\n                source: options.source,\r\n                rules: rulesList,\r\n                parsingErrors: errorsList\r\n            }\r\n        };\r\n    }\r\n    function open() {\r\n        return match(/^{\\s*/);\r\n    }\r\n    function close() {\r\n        return match(/^}/);\r\n    }\r\n    function rules() {\r\n        var node;\r\n        var rules = [];\r\n        whitespace();\r\n        comments(rules);\r\n        while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n            if (node) {\r\n                rules.push(node);\r\n                comments(rules);\r\n            }\r\n        }\r\n        return rules;\r\n    }\r\n    function match(re) {\r\n        var m = re.exec(css);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var str = m[0];\r\n        updatePosition(str);\r\n        css = css.slice(str.length);\r\n        return m;\r\n    }\r\n    function whitespace() {\r\n        match(/^\\s*/);\r\n    }\r\n    function comments(rules) {\r\n        if (rules === void 0) { rules = []; }\r\n        var c;\r\n        while ((c = comment())) {\r\n            if (c) {\r\n                rules.push(c);\r\n            }\r\n            c = comment();\r\n        }\r\n        return rules;\r\n    }\r\n    function comment() {\r\n        var pos = position();\r\n        if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n            return;\r\n        }\r\n        var i = 2;\r\n        while ('' !== css.charAt(i) &&\r\n            ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n            ++i;\r\n        }\r\n        i += 2;\r\n        if ('' === css.charAt(i - 1)) {\r\n            return error('End of comment missing');\r\n        }\r\n        var str = css.slice(2, i - 2);\r\n        column += 2;\r\n        updatePosition(str);\r\n        css = css.slice(i);\r\n        column += 2;\r\n        return pos({\r\n            type: 'comment',\r\n            comment: str\r\n        });\r\n    }\r\n    function selector() {\r\n        var m = match(/^([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return trim(m[0])\r\n            .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n            .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\r\n            return m.replace(/,/g, '\\u200C');\r\n        })\r\n            .split(/\\s*(?![^(]*\\)),\\s*/)\r\n            .map(function (s) {\r\n            return s.replace(/\\u200C/g, ',');\r\n        });\r\n    }\r\n    function declaration() {\r\n        var pos = position();\r\n        var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n        if (!propMatch) {\r\n            return;\r\n        }\r\n        var prop = trim(propMatch[0]);\r\n        if (!match(/^:\\s*/)) {\r\n            return error(\"property missing ':'\");\r\n        }\r\n        var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n        var ret = pos({\r\n            type: 'declaration',\r\n            property: prop.replace(commentre, ''),\r\n            value: val ? trim(val[0]).replace(commentre, '') : ''\r\n        });\r\n        match(/^[;\\s]*/);\r\n        return ret;\r\n    }\r\n    function declarations() {\r\n        var decls = [];\r\n        if (!open()) {\r\n            return error(\"missing '{'\");\r\n        }\r\n        comments(decls);\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            if (decl !== false) {\r\n                decls.push(decl);\r\n                comments(decls);\r\n            }\r\n            decl = declaration();\r\n        }\r\n        if (!close()) {\r\n            return error(\"missing '}'\");\r\n        }\r\n        return decls;\r\n    }\r\n    function keyframe() {\r\n        var m;\r\n        var vals = [];\r\n        var pos = position();\r\n        while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n            vals.push(m[1]);\r\n            match(/^,\\s*/);\r\n        }\r\n        if (!vals.length) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'keyframe',\r\n            values: vals,\r\n            declarations: declarations()\r\n        });\r\n    }\r\n    function atkeyframes() {\r\n        var pos = position();\r\n        var m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var vendor = m[1];\r\n        m = match(/^([-\\w]+)\\s*/);\r\n        if (!m) {\r\n            return error('@keyframes missing name');\r\n        }\r\n        var name = m[1];\r\n        if (!open()) {\r\n            return error(\"@keyframes missing '{'\");\r\n        }\r\n        var frame;\r\n        var frames = comments();\r\n        while ((frame = keyframe())) {\r\n            frames.push(frame);\r\n            frames = frames.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@keyframes missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'keyframes',\r\n            name: name,\r\n            vendor: vendor,\r\n            keyframes: frames\r\n        });\r\n    }\r\n    function atsupports() {\r\n        var pos = position();\r\n        var m = match(/^@supports *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var supports = trim(m[1]);\r\n        if (!open()) {\r\n            return error(\"@supports missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@supports missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'supports',\r\n            supports: supports,\r\n            rules: style\r\n        });\r\n    }\r\n    function athost() {\r\n        var pos = position();\r\n        var m = match(/^@host\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(\"@host missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@host missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'host',\r\n            rules: style\r\n        });\r\n    }\r\n    function atmedia() {\r\n        var pos = position();\r\n        var m = match(/^@media *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var media = trim(m[1]);\r\n        if (!open()) {\r\n            return error(\"@media missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@media missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'media',\r\n            media: media,\r\n            rules: style\r\n        });\r\n    }\r\n    function atcustommedia() {\r\n        var pos = position();\r\n        var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        return pos({\r\n            type: 'custom-media',\r\n            name: trim(m[1]),\r\n            media: trim(m[2])\r\n        });\r\n    }\r\n    function atpage() {\r\n        var pos = position();\r\n        var m = match(/^@page */);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var sel = selector() || [];\r\n        if (!open()) {\r\n            return error(\"@page missing '{'\");\r\n        }\r\n        var decls = comments();\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@page missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'page',\r\n            selectors: sel,\r\n            declarations: decls\r\n        });\r\n    }\r\n    function atdocument() {\r\n        var pos = position();\r\n        var m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        var vendor = trim(m[1]);\r\n        var doc = trim(m[2]);\r\n        if (!open()) {\r\n            return error(\"@document missing '{'\");\r\n        }\r\n        var style = comments().concat(rules());\r\n        if (!close()) {\r\n            return error(\"@document missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'document',\r\n            document: doc,\r\n            vendor: vendor,\r\n            rules: style\r\n        });\r\n    }\r\n    function atfontface() {\r\n        var pos = position();\r\n        var m = match(/^@font-face\\s*/);\r\n        if (!m) {\r\n            return;\r\n        }\r\n        if (!open()) {\r\n            return error(\"@font-face missing '{'\");\r\n        }\r\n        var decls = comments();\r\n        var decl;\r\n        while ((decl = declaration())) {\r\n            decls.push(decl);\r\n            decls = decls.concat(comments());\r\n        }\r\n        if (!close()) {\r\n            return error(\"@font-face missing '}'\");\r\n        }\r\n        return pos({\r\n            type: 'font-face',\r\n            declarations: decls\r\n        });\r\n    }\r\n    var atimport = _compileAtrule('import');\r\n    var atcharset = _compileAtrule('charset');\r\n    var atnamespace = _compileAtrule('namespace');\r\n    function _compileAtrule(name) {\r\n        var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n        return function () {\r\n            var pos = position();\r\n            var m = match(re);\r\n            if (!m) {\r\n                return;\r\n            }\r\n            var ret = { type: name };\r\n            ret[name] = m[1].trim();\r\n            return pos(ret);\r\n        };\r\n    }\r\n    function atrule() {\r\n        if (css[0] !== '@') {\r\n            return;\r\n        }\r\n        return (atkeyframes() ||\r\n            atmedia() ||\r\n            atcustommedia() ||\r\n            atsupports() ||\r\n            atimport() ||\r\n            atcharset() ||\r\n            atnamespace() ||\r\n            atdocument() ||\r\n            atpage() ||\r\n            athost() ||\r\n            atfontface());\r\n    }\r\n    function rule() {\r\n        var pos = position();\r\n        var sel = selector();\r\n        if (!sel) {\r\n            return error('selector missing');\r\n        }\r\n        comments();\r\n        return pos({\r\n            type: 'rule',\r\n            selectors: sel,\r\n            declarations: declarations()\r\n        });\r\n    }\r\n    return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n    return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n    var isNode = obj && typeof obj.type === 'string';\r\n    var childParent = isNode ? obj : parent;\r\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\r\n        var k = _a[_i];\r\n        var value = obj[k];\r\n        if (Array.isArray(value)) {\r\n            value.forEach(function (v) {\r\n                addParent(v, childParent);\r\n            });\r\n        }\r\n        else if (value && typeof value === 'object') {\r\n            addParent(value, childParent);\r\n        }\r\n    }\r\n    if (isNode) {\r\n        Object.defineProperty(obj, 'parent', {\r\n            configurable: true,\r\n            writable: true,\r\n            enumerable: false,\r\n            value: parent || null\r\n        });\r\n    }\r\n    return obj;\r\n}\n\nvar tagMap = {\r\n    script: 'noscript',\r\n    altglyph: 'altGlyph',\r\n    altglyphdef: 'altGlyphDef',\r\n    altglyphitem: 'altGlyphItem',\r\n    animatecolor: 'animateColor',\r\n    animatemotion: 'animateMotion',\r\n    animatetransform: 'animateTransform',\r\n    clippath: 'clipPath',\r\n    feblend: 'feBlend',\r\n    fecolormatrix: 'feColorMatrix',\r\n    fecomponenttransfer: 'feComponentTransfer',\r\n    fecomposite: 'feComposite',\r\n    feconvolvematrix: 'feConvolveMatrix',\r\n    fediffuselighting: 'feDiffuseLighting',\r\n    fedisplacementmap: 'feDisplacementMap',\r\n    fedistantlight: 'feDistantLight',\r\n    fedropshadow: 'feDropShadow',\r\n    feflood: 'feFlood',\r\n    fefunca: 'feFuncA',\r\n    fefuncb: 'feFuncB',\r\n    fefuncg: 'feFuncG',\r\n    fefuncr: 'feFuncR',\r\n    fegaussianblur: 'feGaussianBlur',\r\n    feimage: 'feImage',\r\n    femerge: 'feMerge',\r\n    femergenode: 'feMergeNode',\r\n    femorphology: 'feMorphology',\r\n    feoffset: 'feOffset',\r\n    fepointlight: 'fePointLight',\r\n    fespecularlighting: 'feSpecularLighting',\r\n    fespotlight: 'feSpotLight',\r\n    fetile: 'feTile',\r\n    feturbulence: 'feTurbulence',\r\n    foreignobject: 'foreignObject',\r\n    glyphref: 'glyphRef',\r\n    lineargradient: 'linearGradient',\r\n    radialgradient: 'radialGradient'\r\n};\r\nfunction getTagName(n) {\r\n    var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n    if (tagName === 'link' && n.attributes._cssText) {\r\n        tagName = 'style';\r\n    }\r\n    return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\r\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n    var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n    if (cachedStyle)\r\n        return cachedStyle;\r\n    var ast = parse(cssText, {\r\n        silent: true\r\n    });\r\n    if (!ast.stylesheet) {\r\n        return cssText;\r\n    }\r\n    var selectors = [];\r\n    ast.stylesheet.rules.forEach(function (rule) {\r\n        if ('selectors' in rule) {\r\n            (rule.selectors || []).forEach(function (selector) {\r\n                if (HOVER_SELECTOR.test(selector)) {\r\n                    selectors.push(selector);\r\n                }\r\n            });\r\n        }\r\n    });\r\n    if (selectors.length === 0) {\r\n        return cssText;\r\n    }\r\n    var selectorMatcher = new RegExp(selectors\r\n        .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\r\n        .sort(function (a, b) { return b.length - a.length; })\r\n        .map(function (selector) {\r\n        return escapeRegExp(selector);\r\n    })\r\n        .join('|'), 'g');\r\n    var result = cssText.replace(selectorMatcher, function (selector) {\r\n        var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n        return \"\".concat(selector, \", \").concat(newSelector);\r\n    });\r\n    cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n    return result;\r\n}\r\nfunction createCache() {\r\n    var stylesWithHoverClass = new Map();\r\n    return {\r\n        stylesWithHoverClass: stylesWithHoverClass\r\n    };\r\n}\r\nfunction buildNode(n, options) {\r\n    var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\r\n    switch (n.type) {\r\n        case NodeType.Document:\r\n            return doc.implementation.createDocument(null, '', null);\r\n        case NodeType.DocumentType:\r\n            return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n        case NodeType.Element: {\r\n            var tagName = getTagName(n);\r\n            var node_1;\r\n            if (n.isSVG) {\r\n                node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n            }\r\n            else {\r\n                node_1 = doc.createElement(tagName);\r\n            }\r\n            var specialAttributes = {};\r\n            for (var name_1 in n.attributes) {\r\n                if (!Object.prototype.hasOwnProperty.call(n.attributes, name_1)) {\r\n                    continue;\r\n                }\r\n                var value = n.attributes[name_1];\r\n                if (tagName === 'option' &&\r\n                    name_1 === 'selected' &&\r\n                    value === false) {\r\n                    continue;\r\n                }\r\n                if (value === null) {\r\n                    continue;\r\n                }\r\n                if (value === true)\r\n                    value = '';\r\n                if (name_1.startsWith('rr_')) {\r\n                    specialAttributes[name_1] = value;\r\n                    continue;\r\n                }\r\n                var isTextarea = tagName === 'textarea' && name_1 === 'value';\r\n                var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\r\n                if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n                    value = addHoverClass(value, cache);\r\n                }\r\n                if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n                    var child = doc.createTextNode(value);\r\n                    for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\r\n                        var c = _a[_i];\r\n                        if (c.nodeType === node_1.TEXT_NODE) {\r\n                            node_1.removeChild(c);\r\n                        }\r\n                    }\r\n                    node_1.appendChild(child);\r\n                    continue;\r\n                }\r\n                try {\r\n                    if (n.isSVG && name_1 === 'xlink:href') {\r\n                        node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value.toString());\r\n                    }\r\n                    else if (name_1 === 'onload' ||\r\n                        name_1 === 'onclick' ||\r\n                        name_1.substring(0, 7) === 'onmouse') {\r\n                        node_1.setAttribute('_' + name_1, value.toString());\r\n                    }\r\n                    else if (tagName === 'meta' &&\r\n                        n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n                        name_1 === 'content') {\r\n                        node_1.setAttribute('csp-content', value.toString());\r\n                        continue;\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        (n.attributes.rel === 'preload' ||\r\n                            n.attributes.rel === 'modulepreload') &&\r\n                        n.attributes.as === 'script') {\r\n                    }\r\n                    else if (tagName === 'link' &&\r\n                        n.attributes.rel === 'prefetch' &&\r\n                        typeof n.attributes.href === 'string' &&\r\n                        n.attributes.href.endsWith('.js')) {\r\n                    }\r\n                    else if (tagName === 'img' &&\r\n                        n.attributes.srcset &&\r\n                        n.attributes.rr_dataURL) {\r\n                        node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n                    }\r\n                    else {\r\n                        node_1.setAttribute(name_1, value.toString());\r\n                    }\r\n                }\r\n                catch (error) {\r\n                }\r\n            }\r\n            var _loop_1 = function (name_2) {\r\n                var value = specialAttributes[name_2];\r\n                if (tagName === 'canvas' && name_2 === 'rr_dataURL') {\r\n                    var image_1 = document.createElement('img');\r\n                    image_1.onload = function () {\r\n                        var ctx = node_1.getContext('2d');\r\n                        if (ctx) {\r\n                            ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\r\n                        }\r\n                    };\r\n                    image_1.src = value.toString();\r\n                    if (node_1.RRNodeType)\r\n                        node_1.rr_dataURL = value.toString();\r\n                }\r\n                else if (tagName === 'img' && name_2 === 'rr_dataURL') {\r\n                    var image = node_1;\r\n                    if (!image.currentSrc.startsWith('data:')) {\r\n                        image.setAttribute('rrweb-original-src', n.attributes.src);\r\n                        image.src = value.toString();\r\n                    }\r\n                }\r\n                if (name_2 === 'rr_width') {\r\n                    node_1.style.width = value.toString();\r\n                }\r\n                else if (name_2 === 'rr_height') {\r\n                    node_1.style.height = value.toString();\r\n                }\r\n                else if (name_2 === 'rr_mediaCurrentTime' &&\r\n                    typeof value === 'number') {\r\n                    node_1.currentTime = value;\r\n                }\r\n                else if (name_2 === 'rr_mediaState') {\r\n                    switch (value) {\r\n                        case 'played':\r\n                            node_1\r\n                                .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\r\n                            break;\r\n                        case 'paused':\r\n                            node_1.pause();\r\n                            break;\r\n                    }\r\n                }\r\n            };\r\n            for (var name_2 in specialAttributes) {\r\n                _loop_1(name_2);\r\n            }\r\n            if (n.isShadowHost) {\r\n                if (!node_1.shadowRoot) {\r\n                    node_1.attachShadow({ mode: 'open' });\r\n                }\r\n                else {\r\n                    while (node_1.shadowRoot.firstChild) {\r\n                        node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\r\n                    }\r\n                }\r\n            }\r\n            return node_1;\r\n        }\r\n        case NodeType.Text:\r\n            return doc.createTextNode(n.isStyle && hackCss\r\n                ? addHoverClass(n.textContent, cache)\r\n                : n.textContent);\r\n        case NodeType.CDATA:\r\n            return doc.createCDATASection(n.textContent);\r\n        case NodeType.Comment:\r\n            return doc.createComment(n.textContent);\r\n        default:\r\n            return null;\r\n    }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n    var doc = options.doc, mirror = options.mirror, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\r\n    if (mirror.has(n.id)) {\r\n        var nodeInMirror = mirror.getNode(n.id);\r\n        var meta = mirror.getMeta(nodeInMirror);\r\n        if (isNodeMetaEqual(meta, n))\r\n            return mirror.getNode(n.id);\r\n    }\r\n    var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n        mirror.replace(n.rootId, doc);\r\n    }\r\n    if (n.type === NodeType.Document) {\r\n        doc.close();\r\n        doc.open();\r\n        if (n.compatMode === 'BackCompat' &&\r\n            n.childNodes &&\r\n            n.childNodes[0].type !== NodeType.DocumentType) {\r\n            if (n.childNodes[0].type === NodeType.Element &&\r\n                'xmlns' in n.childNodes[0].attributes &&\r\n                n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n            }\r\n            else {\r\n                doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n            }\r\n        }\r\n        node = doc;\r\n    }\r\n    mirror.add(node, n);\r\n    if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n        !skipChild) {\r\n        var _loop_2 = function (childN) {\r\n            var childNode = buildNodeWithSN(childN, {\r\n                doc: doc,\r\n                mirror: mirror,\r\n                skipChild: false,\r\n                hackCss: hackCss,\r\n                afterAppend: afterAppend,\r\n                cache: cache\r\n            });\r\n            if (!childNode) {\r\n                console.warn('Failed to rebuild', childN);\r\n                return \"continue\";\r\n            }\r\n            if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n                node.shadowRoot.appendChild(childNode);\r\n            }\r\n            else if (n.type === NodeType.Document &&\r\n                childN.type == NodeType.Element) {\r\n                var htmlElement = childNode;\r\n                var body_1 = null;\r\n                htmlElement.childNodes.forEach(function (child) {\r\n                    if (child.nodeName === 'BODY')\r\n                        body_1 = child;\r\n                });\r\n                if (body_1) {\r\n                    htmlElement.removeChild(body_1);\r\n                    node.appendChild(childNode);\r\n                    htmlElement.appendChild(body_1);\r\n                }\r\n                else {\r\n                    node.appendChild(childNode);\r\n                }\r\n            }\r\n            else {\r\n                node.appendChild(childNode);\r\n            }\r\n            if (afterAppend) {\r\n                afterAppend(childNode, childN.id);\r\n            }\r\n        };\r\n        for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\r\n            var childN = _c[_i];\r\n            _loop_2(childN);\r\n        }\r\n    }\r\n    return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n    function walk(node) {\r\n        onVisit(node);\r\n    }\r\n    for (var _i = 0, _a = mirror.getIds(); _i < _a.length; _i++) {\r\n        var id = _a[_i];\r\n        if (mirror.has(id)) {\r\n            walk(mirror.getNode(id));\r\n        }\r\n    }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n    var n = mirror.getMeta(node);\r\n    if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n        return;\r\n    }\r\n    var el = node;\r\n    for (var name_3 in n.attributes) {\r\n        if (!(Object.prototype.hasOwnProperty.call(n.attributes, name_3) &&\r\n            name_3.startsWith('rr_'))) {\r\n            continue;\r\n        }\r\n        var value = n.attributes[name_3];\r\n        if (name_3 === 'rr_scrollLeft') {\r\n            el.scrollLeft = value;\r\n        }\r\n        if (name_3 === 'rr_scrollTop') {\r\n            el.scrollTop = value;\r\n        }\r\n    }\r\n}\r\nfunction rebuild(n, options) {\r\n    var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache, _b = options.mirror, mirror = _b === void 0 ? new Mirror() : _b;\r\n    var node = buildNodeWithSN(n, {\r\n        doc: doc,\r\n        mirror: mirror,\r\n        skipChild: false,\r\n        hackCss: hackCss,\r\n        afterAppend: afterAppend,\r\n        cache: cache\r\n    });\r\n    visit(mirror, function (visitedNode) {\r\n        if (onVisit) {\r\n            onVisit(visitedNode);\r\n        }\r\n        handleScroll(visitedNode, mirror);\r\n    });\r\n    return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, createCache, createMirror, escapeImportStatement, fixSafariColons, genId, getInputType, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, transformAttribute };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n    const options = { capture: true, passive: true };\r\n    target.addEventListener(type, fn, options);\r\n    return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n    '\\r\\n' +\r\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n    '\\r\\n' +\r\n    'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n    map: {},\r\n    getId() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return -1;\r\n    },\r\n    getNode() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return null;\r\n    },\r\n    removeNodeFromMap() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n    has() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n        return false;\r\n    },\r\n    reset() {\r\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n    },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n    _mirror = new Proxy(_mirror, {\r\n        get(target, prop, receiver) {\r\n            if (prop === 'map') {\r\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n            }\r\n            return Reflect.get(target, prop, receiver);\r\n        },\r\n    });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n    let timeout = null;\r\n    let previous = 0;\r\n    return function (...args) {\r\n        const now = Date.now();\r\n        if (!previous && options.leading === false) {\r\n            previous = now;\r\n        }\r\n        const remaining = wait - (now - previous);\r\n        const context = this;\r\n        if (remaining <= 0 || remaining > wait) {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n            previous = now;\r\n            func.apply(context, args);\r\n        }\r\n        else if (!timeout && options.trailing !== false) {\r\n            timeout = setTimeout(() => {\r\n                previous = options.leading === false ? 0 : Date.now();\r\n                timeout = null;\r\n                func.apply(context, args);\r\n            }, remaining);\r\n        }\r\n    };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n    win.Object.defineProperty(target, key, isRevoked\r\n        ? d\r\n        : {\r\n            set(value) {\r\n                setTimeout(() => {\r\n                    d.set.call(this, value);\r\n                }, 0);\r\n                if (original && original.set) {\r\n                    original.set.call(this, value);\r\n                }\r\n            },\r\n        });\r\n    return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n    try {\r\n        if (!(name in source)) {\r\n            return () => {\r\n            };\r\n        }\r\n        const original = source[name];\r\n        const wrapped = replacement(original);\r\n        if (typeof wrapped === 'function') {\r\n            wrapped.prototype = wrapped.prototype || {};\r\n            Object.defineProperties(wrapped, {\r\n                __rrweb_original__: {\r\n                    enumerable: false,\r\n                    value: original,\r\n                },\r\n            });\r\n        }\r\n        source[name] = wrapped;\r\n        return () => {\r\n            source[name] = original;\r\n        };\r\n    }\r\n    catch (_a) {\r\n        return () => {\r\n        };\r\n    }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n    nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n    var _a, _b, _c, _d, _e, _f;\r\n    const doc = win.document;\r\n    return {\r\n        left: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollLeft\r\n            : win.pageXOffset !== undefined\r\n                ? win.pageXOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) ||\r\n                    ((_b = (_a = doc === null || doc === void 0 ? void 0 : doc.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n                    ((_c = doc === null || doc === void 0 ? void 0 : doc.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n                    0,\r\n        top: doc.scrollingElement\r\n            ? doc.scrollingElement.scrollTop\r\n            : win.pageYOffset !== undefined\r\n                ? win.pageYOffset\r\n                : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) ||\r\n                    ((_e = (_d = doc === null || doc === void 0 ? void 0 : doc.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n                    ((_f = doc === null || doc === void 0 ? void 0 : doc.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n                    0,\r\n    };\r\n}\r\nfunction getWindowHeight() {\r\n    return (window.innerHeight ||\r\n        (document.documentElement && document.documentElement.clientHeight) ||\r\n        (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n    return (window.innerWidth ||\r\n        (document.documentElement && document.documentElement.clientWidth) ||\r\n        (document.body && document.body.clientWidth));\r\n}\r\nfunction closestElementOfNode(node) {\r\n    if (!node) {\r\n        return null;\r\n    }\r\n    const el = node.nodeType === node.ELEMENT_NODE\r\n        ? node\r\n        : node.parentElement;\r\n    return el;\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n    if (!node) {\r\n        return false;\r\n    }\r\n    const el = closestElementOfNode(node);\r\n    if (!el) {\r\n        return false;\r\n    }\r\n    try {\r\n        if (typeof blockClass === 'string') {\r\n            if (el.classList.contains(blockClass))\r\n                return true;\r\n            if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n                return true;\r\n        }\r\n        else {\r\n            if (classMatchesRegex(el, blockClass, checkAncestors))\r\n                return true;\r\n        }\r\n    }\r\n    catch (e) {\r\n    }\r\n    if (blockSelector) {\r\n        if (el.matches(blockSelector))\r\n            return true;\r\n        if (checkAncestors && el.closest(blockSelector) !== null)\r\n            return true;\r\n    }\r\n    return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n    return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n    return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n    if (isShadowRoot(target)) {\r\n        return false;\r\n    }\r\n    const id = mirror.getId(target);\r\n    if (!mirror.has(id)) {\r\n        return true;\r\n    }\r\n    if (target.parentNode &&\r\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n        return false;\r\n    }\r\n    if (!target.parentNode) {\r\n        return true;\r\n    }\r\n    return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n    return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n        win.NodeList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n        win.DOMTokenList.prototype.forEach = Array.prototype\r\n            .forEach;\r\n    }\r\n    if (!Node.prototype.contains) {\r\n        Node.prototype.contains = (...args) => {\r\n            let node = args[0];\r\n            if (!(0 in args)) {\r\n                throw new TypeError('1 argument is required');\r\n            }\r\n            do {\r\n                if (this === node) {\r\n                    return true;\r\n                }\r\n            } while ((node = node && node.parentNode));\r\n            return false;\r\n        };\r\n    }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n    const queueNodeMap = {};\r\n    const putIntoMap = (m, parent) => {\r\n        const nodeInTree = {\r\n            value: m,\r\n            parent,\r\n            children: [],\r\n        };\r\n        queueNodeMap[m.node.id] = nodeInTree;\r\n        return nodeInTree;\r\n    };\r\n    const queueNodeTrees = [];\r\n    for (const mutation of queue) {\r\n        const { nextId, parentId } = mutation;\r\n        if (nextId && nextId in queueNodeMap) {\r\n            const nextInTree = queueNodeMap[nextId];\r\n            if (nextInTree.parent) {\r\n                const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n                nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n            }\r\n            else {\r\n                const idx = queueNodeTrees.indexOf(nextInTree);\r\n                queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n            }\r\n            continue;\r\n        }\r\n        if (parentId in queueNodeMap) {\r\n            const parentInTree = queueNodeMap[parentId];\r\n            parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n            continue;\r\n        }\r\n        queueNodeTrees.push(putIntoMap(mutation, null));\r\n    }\r\n    return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n    cb(tree.value);\r\n    for (let i = tree.children.length - 1; i >= 0; i--) {\r\n        iterateResolveTree(tree.children[i], cb);\r\n    }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n    return Boolean(n.nodeName === 'LINK' &&\r\n        n.nodeType === n.ELEMENT_NODE &&\r\n        n.getAttribute &&\r\n        n.getAttribute('rel') === 'stylesheet' &&\r\n        mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n    var _a, _b;\r\n    const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n    if (!frameElement || frameElement === rootIframe) {\r\n        return {\r\n            x: 0,\r\n            y: 0,\r\n            relativeScale: 1,\r\n            absoluteScale: 1,\r\n        };\r\n    }\r\n    const frameDimension = frameElement.getBoundingClientRect();\r\n    const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n    const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n    return {\r\n        x: frameDimension.x * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.x,\r\n        y: frameDimension.y * frameBaseDimension.relativeScale +\r\n            frameBaseDimension.y,\r\n        relativeScale,\r\n        absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n    };\r\n}\r\nfunction hasShadowRoot(n) {\r\n    return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n    const rule = rules[position[0]];\r\n    if (position.length === 1) {\r\n        return rule;\r\n    }\r\n    else {\r\n        return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n    }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n    const positions = [...nestedIndex];\r\n    const index = positions.pop();\r\n    return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n    const idSet = new Set();\r\n    const uniqueMutations = [];\r\n    for (let i = mutations.length; i--;) {\r\n        const mutation = mutations[i];\r\n        if (!idSet.has(mutation.id)) {\r\n            uniqueMutations.push(mutation);\r\n            idSet.add(mutation.id);\r\n        }\r\n    }\r\n    return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n    constructor() {\r\n        this.id = 1;\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n    }\r\n    getId(stylesheet) {\r\n        var _a;\r\n        return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n    }\r\n    has(stylesheet) {\r\n        return this.styleIDMap.has(stylesheet);\r\n    }\r\n    add(stylesheet, id) {\r\n        if (this.has(stylesheet))\r\n            return this.getId(stylesheet);\r\n        let newId;\r\n        if (id === undefined) {\r\n            newId = this.id++;\r\n        }\r\n        else\r\n            newId = id;\r\n        this.styleIDMap.set(stylesheet, newId);\r\n        this.idStyleMap.set(newId, stylesheet);\r\n        return newId;\r\n    }\r\n    getStyle(id) {\r\n        return this.idStyleMap.get(id) || null;\r\n    }\r\n    reset() {\r\n        this.styleIDMap = new WeakMap();\r\n        this.idStyleMap = new Map();\r\n        this.id = 1;\r\n    }\r\n    generateId() {\r\n        return this.id++;\r\n    }\r\n}\r\nfunction getShadowHost(n) {\r\n    var _a, _b;\r\n    let shadowHost = null;\r\n    if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n        n.getRootNode().host)\r\n        shadowHost = n.getRootNode().host;\r\n    return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n    let rootShadowHost = n;\r\n    let shadowHost;\r\n    while ((shadowHost = getShadowHost(rootShadowHost)))\r\n        rootShadowHost = shadowHost;\r\n    return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    const shadowHost = getRootShadowHost(n);\r\n    return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n    const doc = n.ownerDocument;\r\n    if (!doc)\r\n        return false;\r\n    return doc.contains(n) || shadowHostInDom(n);\r\n}\n\nexport { StyleSheetMirror, _mirror, closestElementOfNode, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n    errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n    errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n    if (!errorHandler) {\r\n        return cb;\r\n    }\r\n    const rrwebWrapped = ((...rest) => {\r\n        try {\r\n            return cb(...rest);\r\n        }\r\n        catch (error) {\r\n            if (errorHandler && errorHandler(error) === true) {\r\n                return;\r\n            }\r\n            throw error;\r\n        }\r\n    });\r\n    return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","class CrossOriginIframeMirror {\r\n    constructor(generateIdFn) {\r\n        this.generateIdFn = generateIdFn;\r\n        this.iframeIdToRemoteIdMap = new WeakMap();\r\n        this.iframeRemoteIdToIdMap = new WeakMap();\r\n    }\r\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n        let id = idToRemoteIdMap.get(remoteId);\r\n        if (!id) {\r\n            id = this.generateIdFn();\r\n            idToRemoteIdMap.set(remoteId, id);\r\n            remoteIdToIdMap.set(id, remoteId);\r\n        }\r\n        return id;\r\n    }\r\n    getIds(iframe, remoteId) {\r\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n    }\r\n    getRemoteId(iframe, id, map) {\r\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n        if (typeof id !== 'number')\r\n            return id;\r\n        const remoteId = remoteIdToIdMap.get(id);\r\n        if (!remoteId)\r\n            return -1;\r\n        return remoteId;\r\n    }\r\n    getRemoteIds(iframe, ids) {\r\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n    }\r\n    reset(iframe) {\r\n        if (!iframe) {\r\n            this.iframeIdToRemoteIdMap = new WeakMap();\r\n            this.iframeRemoteIdToIdMap = new WeakMap();\r\n            return;\r\n        }\r\n        this.iframeIdToRemoteIdMap.delete(iframe);\r\n        this.iframeRemoteIdToIdMap.delete(iframe);\r\n    }\r\n    getIdToRemoteIdMap(iframe) {\r\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n        if (!idToRemoteIdMap) {\r\n            idToRemoteIdMap = new Map();\r\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n        }\r\n        return idToRemoteIdMap;\r\n    }\r\n    getRemoteIdToIdMap(iframe) {\r\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n        if (!remoteIdToIdMap) {\r\n            remoteIdToIdMap = new Map();\r\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n        }\r\n        return remoteIdToIdMap;\r\n    }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\n\nclass IframeManager {\r\n    constructor(options) {\r\n        this.iframes = new WeakMap();\r\n        this.crossOriginIframeMap = new WeakMap();\r\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n        this.crossOriginIframeRootIdMap = new WeakMap();\r\n        this.mutationCb = options.mutationCb;\r\n        this.wrappedEmit = options.wrappedEmit;\r\n        this.stylesheetManager = options.stylesheetManager;\r\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n        this.mirror = options.mirror;\r\n        if (this.recordCrossOriginIframes) {\r\n            window.addEventListener('message', this.handleMessage.bind(this));\r\n        }\r\n    }\r\n    addIframe(iframeEl) {\r\n        this.iframes.set(iframeEl, true);\r\n        if (iframeEl.contentWindow)\r\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n    }\r\n    addLoadListener(cb) {\r\n        this.loadListener = cb;\r\n    }\r\n    attachIframe(iframeEl, childSn) {\r\n        var _a;\r\n        this.mutationCb({\r\n            adds: [\r\n                {\r\n                    parentId: this.mirror.getId(iframeEl),\r\n                    nextId: null,\r\n                    node: childSn,\r\n                },\r\n            ],\r\n            removes: [],\r\n            texts: [],\r\n            attributes: [],\r\n            isAttachIframe: true,\r\n        });\r\n        (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n        if (iframeEl.contentDocument &&\r\n            iframeEl.contentDocument.adoptedStyleSheets &&\r\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n    }\r\n    handleMessage(message) {\r\n        const crossOriginMessageEvent = message;\r\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n            return;\r\n        const iframeSourceWindow = message.source;\r\n        if (!iframeSourceWindow)\r\n            return;\r\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n        if (!iframeEl)\r\n            return;\r\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n        if (transformedEvent)\r\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n    }\r\n    transformCrossOriginEvent(iframeEl, e) {\r\n        var _a;\r\n        switch (e.type) {\r\n            case EventType.FullSnapshot: {\r\n                this.crossOriginIframeMirror.reset(iframeEl);\r\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n                this.replaceIdOnNode(e.data.node, iframeEl);\r\n                const rootId = e.data.node.id;\r\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n                this.patchRootIdOnNode(e.data.node, rootId);\r\n                return {\r\n                    timestamp: e.timestamp,\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source: IncrementalSource.Mutation,\r\n                        adds: [\r\n                            {\r\n                                parentId: this.mirror.getId(iframeEl),\r\n                                nextId: null,\r\n                                node: e.data.node,\r\n                            },\r\n                        ],\r\n                        removes: [],\r\n                        texts: [],\r\n                        attributes: [],\r\n                        isAttachIframe: true,\r\n                    },\r\n                };\r\n            }\r\n            case EventType.Meta:\r\n            case EventType.Load:\r\n            case EventType.DomContentLoaded: {\r\n                return false;\r\n            }\r\n            case EventType.Plugin: {\r\n                return e;\r\n            }\r\n            case EventType.Custom: {\r\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n                return e;\r\n            }\r\n            case EventType.IncrementalSnapshot: {\r\n                switch (e.data.source) {\r\n                    case IncrementalSource.Mutation: {\r\n                        e.data.adds.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, [\r\n                                'parentId',\r\n                                'nextId',\r\n                                'previousId',\r\n                            ]);\r\n                            this.replaceIdOnNode(n.node, iframeEl);\r\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\r\n                        });\r\n                        e.data.removes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n                        });\r\n                        e.data.attributes.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        e.data.texts.forEach((n) => {\r\n                            this.replaceIds(n, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Drag:\r\n                    case IncrementalSource.TouchMove:\r\n                    case IncrementalSource.MouseMove: {\r\n                        e.data.positions.forEach((p) => {\r\n                            this.replaceIds(p, iframeEl, ['id']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.ViewportResize: {\r\n                        return false;\r\n                    }\r\n                    case IncrementalSource.MediaInteraction:\r\n                    case IncrementalSource.MouseInteraction:\r\n                    case IncrementalSource.Scroll:\r\n                    case IncrementalSource.CanvasMutation:\r\n                    case IncrementalSource.Input: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.StyleSheetRule:\r\n                    case IncrementalSource.StyleDeclaration: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Font: {\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.Selection: {\r\n                        e.data.ranges.forEach((range) => {\r\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                    case IncrementalSource.AdoptedStyleSheet: {\r\n                        this.replaceIds(e.data, iframeEl, ['id']);\r\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n                        (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n                        });\r\n                        return e;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    replace(iframeMirror, obj, iframeEl, keys) {\r\n        for (const key of keys) {\r\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n                continue;\r\n            if (Array.isArray(obj[key])) {\r\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n            }\r\n            else {\r\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n    replaceIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceStyleIds(obj, iframeEl, keys) {\r\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n    }\r\n    replaceIdOnNode(node, iframeEl) {\r\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.replaceIdOnNode(child, iframeEl);\r\n            });\r\n        }\r\n    }\r\n    patchRootIdOnNode(node, rootId) {\r\n        if (node.type !== NodeType.Document && !node.rootId)\r\n            node.rootId = rootId;\r\n        if ('childNodes' in node) {\r\n            node.childNodes.forEach((child) => {\r\n                this.patchRootIdOnNode(child, rootId);\r\n            });\r\n        }\r\n    }\r\n}\n\nexport { IframeManager };\n","import { isShadowRoot, isNativeShadowDom, getInputType, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, closestElementOfNode, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n    return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n    constructor() {\r\n        this.length = 0;\r\n        this.head = null;\r\n        this.tail = null;\r\n    }\r\n    get(position) {\r\n        if (position >= this.length) {\r\n            throw new Error('Position outside of list range');\r\n        }\r\n        let current = this.head;\r\n        for (let index = 0; index < position; index++) {\r\n            current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n        }\r\n        return current;\r\n    }\r\n    addNode(n) {\r\n        const node = {\r\n            value: n,\r\n            previous: null,\r\n            next: null,\r\n        };\r\n        n.__ln = node;\r\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n            const current = n.previousSibling.__ln.next;\r\n            node.next = current;\r\n            node.previous = n.previousSibling.__ln;\r\n            n.previousSibling.__ln.next = node;\r\n            if (current) {\r\n                current.previous = node;\r\n            }\r\n        }\r\n        else if (n.nextSibling &&\r\n            isNodeInLinkedList(n.nextSibling) &&\r\n            n.nextSibling.__ln.previous) {\r\n            const current = n.nextSibling.__ln.previous;\r\n            node.previous = current;\r\n            node.next = n.nextSibling.__ln;\r\n            n.nextSibling.__ln.previous = node;\r\n            if (current) {\r\n                current.next = node;\r\n            }\r\n        }\r\n        else {\r\n            if (this.head) {\r\n                this.head.previous = node;\r\n            }\r\n            node.next = this.head;\r\n            this.head = node;\r\n        }\r\n        if (node.next === null) {\r\n            this.tail = node;\r\n        }\r\n        this.length++;\r\n    }\r\n    removeNode(n) {\r\n        const current = n.__ln;\r\n        if (!this.head) {\r\n            return;\r\n        }\r\n        if (!current.previous) {\r\n            this.head = current.next;\r\n            if (this.head) {\r\n                this.head.previous = null;\r\n            }\r\n            else {\r\n                this.tail = null;\r\n            }\r\n        }\r\n        else {\r\n            current.previous.next = current.next;\r\n            if (current.next) {\r\n                current.next.previous = current.previous;\r\n            }\r\n            else {\r\n                this.tail = current.previous;\r\n            }\r\n        }\r\n        if (n.__ln) {\r\n            delete n.__ln;\r\n        }\r\n        this.length--;\r\n    }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n    constructor() {\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.texts = [];\r\n        this.attributes = [];\r\n        this.removes = [];\r\n        this.mapRemoves = [];\r\n        this.movedMap = {};\r\n        this.addedSet = new Set();\r\n        this.movedSet = new Set();\r\n        this.droppedSet = new Set();\r\n        this.processMutations = (mutations) => {\r\n            mutations.forEach(this.processMutation);\r\n            this.emit();\r\n        };\r\n        this.emit = () => {\r\n            if (this.frozen || this.locked) {\r\n                return;\r\n            }\r\n            const adds = [];\r\n            const addedIds = new Set();\r\n            const addList = new DoubleLinkedList();\r\n            const getNextId = (n) => {\r\n                let ns = n;\r\n                let nextId = IGNORED_NODE;\r\n                while (nextId === IGNORED_NODE) {\r\n                    ns = ns && ns.nextSibling;\r\n                    nextId = ns && this.mirror.getId(ns);\r\n                }\r\n                return nextId;\r\n            };\r\n            const pushAdd = (n) => {\r\n                if (!n.parentNode || !inDom(n)) {\r\n                    return;\r\n                }\r\n                const parentId = isShadowRoot(n.parentNode)\r\n                    ? this.mirror.getId(getShadowHost(n))\r\n                    : this.mirror.getId(n.parentNode);\r\n                const nextId = getNextId(n);\r\n                if (parentId === -1 || nextId === -1) {\r\n                    return addList.addNode(n);\r\n                }\r\n                const sn = serializeNodeWithId(n, {\r\n                    doc: this.doc,\r\n                    mirror: this.mirror,\r\n                    blockClass: this.blockClass,\r\n                    blockSelector: this.blockSelector,\r\n                    maskTextClass: this.maskTextClass,\r\n                    maskTextSelector: this.maskTextSelector,\r\n                    skipChild: true,\r\n                    newlyAddedElement: true,\r\n                    inlineStylesheet: this.inlineStylesheet,\r\n                    maskInputOptions: this.maskInputOptions,\r\n                    maskTextFn: this.maskTextFn,\r\n                    maskInputFn: this.maskInputFn,\r\n                    slimDOMOptions: this.slimDOMOptions,\r\n                    dataURLOptions: this.dataURLOptions,\r\n                    recordCanvas: this.recordCanvas,\r\n                    inlineImages: this.inlineImages,\r\n                    onSerialize: (currentN) => {\r\n                        if (isSerializedIframe(currentN, this.mirror)) {\r\n                            this.iframeManager.addIframe(currentN);\r\n                        }\r\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\r\n                            this.stylesheetManager.trackLinkElement(currentN);\r\n                        }\r\n                        if (hasShadowRoot(n)) {\r\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n                        }\r\n                    },\r\n                    onIframeLoad: (iframe, childSn) => {\r\n                        this.iframeManager.attachIframe(iframe, childSn);\r\n                        this.shadowDomManager.observeAttachShadow(iframe);\r\n                    },\r\n                    onStylesheetLoad: (link, childSn) => {\r\n                        this.stylesheetManager.attachLinkElement(link, childSn);\r\n                    },\r\n                });\r\n                if (sn) {\r\n                    adds.push({\r\n                        parentId,\r\n                        nextId,\r\n                        node: sn,\r\n                    });\r\n                    addedIds.add(sn.id);\r\n                }\r\n            };\r\n            while (this.mapRemoves.length) {\r\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n            }\r\n            for (const n of this.movedSet) {\r\n                if (isParentRemoved(this.removes, n, this.mirror) &&\r\n                    !this.movedSet.has(n.parentNode)) {\r\n                    continue;\r\n                }\r\n                pushAdd(n);\r\n            }\r\n            for (const n of this.addedSet) {\r\n                if (!isAncestorInSet(this.droppedSet, n) &&\r\n                    !isParentRemoved(this.removes, n, this.mirror)) {\r\n                    pushAdd(n);\r\n                }\r\n                else if (isAncestorInSet(this.movedSet, n)) {\r\n                    pushAdd(n);\r\n                }\r\n                else {\r\n                    this.droppedSet.add(n);\r\n                }\r\n            }\r\n            let candidate = null;\r\n            while (addList.length) {\r\n                let node = null;\r\n                if (candidate) {\r\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\r\n                    const nextId = getNextId(candidate.value);\r\n                    if (parentId !== -1 && nextId !== -1) {\r\n                        node = candidate;\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    let tailNode = addList.tail;\r\n                    while (tailNode) {\r\n                        const _node = tailNode;\r\n                        tailNode = tailNode.previous;\r\n                        if (_node) {\r\n                            const parentId = this.mirror.getId(_node.value.parentNode);\r\n                            const nextId = getNextId(_node.value);\r\n                            if (nextId === -1)\r\n                                continue;\r\n                            else if (parentId !== -1) {\r\n                                node = _node;\r\n                                break;\r\n                            }\r\n                            else {\r\n                                const unhandledNode = _node.value;\r\n                                if (unhandledNode.parentNode &&\r\n                                    unhandledNode.parentNode.nodeType ===\r\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\r\n                                    const shadowHost = unhandledNode.parentNode\r\n                                        .host;\r\n                                    const parentId = this.mirror.getId(shadowHost);\r\n                                    if (parentId !== -1) {\r\n                                        node = _node;\r\n                                        break;\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                if (!node) {\r\n                    while (addList.head) {\r\n                        addList.removeNode(addList.head.value);\r\n                    }\r\n                    break;\r\n                }\r\n                candidate = node.previous;\r\n                addList.removeNode(node.value);\r\n                pushAdd(node.value);\r\n            }\r\n            const payload = {\r\n                texts: this.texts\r\n                    .map((text) => ({\r\n                    id: this.mirror.getId(text.node),\r\n                    value: text.value,\r\n                }))\r\n                    .filter((text) => !addedIds.has(text.id))\r\n                    .filter((text) => this.mirror.has(text.id)),\r\n                attributes: this.attributes\r\n                    .map((attribute) => {\r\n                    const { attributes } = attribute;\r\n                    if (typeof attributes.style === 'string') {\r\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n                        if (diffAsStr.length < attributes.style.length) {\r\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n                                attributes.style.split('var(').length) {\r\n                                attributes.style = attribute.styleDiff;\r\n                            }\r\n                        }\r\n                    }\r\n                    return {\r\n                        id: this.mirror.getId(attribute.node),\r\n                        attributes: attributes,\r\n                    };\r\n                })\r\n                    .filter((attribute) => !addedIds.has(attribute.id))\r\n                    .filter((attribute) => this.mirror.has(attribute.id)),\r\n                removes: this.removes,\r\n                adds,\r\n            };\r\n            if (!payload.texts.length &&\r\n                !payload.attributes.length &&\r\n                !payload.removes.length &&\r\n                !payload.adds.length) {\r\n                return;\r\n            }\r\n            this.texts = [];\r\n            this.attributes = [];\r\n            this.removes = [];\r\n            this.addedSet = new Set();\r\n            this.movedSet = new Set();\r\n            this.droppedSet = new Set();\r\n            this.movedMap = {};\r\n            this.mutationCb(payload);\r\n        };\r\n        this.processMutation = (m) => {\r\n            if (isIgnored(m.target, this.mirror)) {\r\n                return;\r\n            }\r\n            switch (m.type) {\r\n                case 'characterData': {\r\n                    const value = m.target.textContent;\r\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n                        value !== m.oldValue) {\r\n                        this.texts.push({\r\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector) && value\r\n                                ? this.maskTextFn\r\n                                    ? this.maskTextFn(value, closestElementOfNode(m.target))\r\n                                    : value.replace(/[\\S]/g, '*')\r\n                                : value,\r\n                            node: m.target,\r\n                        });\r\n                    }\r\n                    break;\r\n                }\r\n                case 'attributes': {\r\n                    const target = m.target;\r\n                    let attributeName = m.attributeName;\r\n                    let value = m.target.getAttribute(attributeName);\r\n                    if (attributeName === 'value') {\r\n                        const type = getInputType(target);\r\n                        value = maskInputValue({\r\n                            element: target,\r\n                            maskInputOptions: this.maskInputOptions,\r\n                            tagName: target.tagName,\r\n                            type,\r\n                            value,\r\n                            maskInputFn: this.maskInputFn,\r\n                        });\r\n                    }\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n                        value === m.oldValue) {\r\n                        return;\r\n                    }\r\n                    let item = this.attributes.find((a) => a.node === m.target);\r\n                    if (target.tagName === 'IFRAME' &&\r\n                        attributeName === 'src' &&\r\n                        !this.keepIframeSrcFn(value)) {\r\n                        if (!target.contentDocument) {\r\n                            attributeName = 'rr_src';\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    if (!item) {\r\n                        item = {\r\n                            node: m.target,\r\n                            attributes: {},\r\n                            styleDiff: {},\r\n                            _unchangedStyles: {},\r\n                        };\r\n                        this.attributes.push(item);\r\n                    }\r\n                    if (attributeName === 'type' &&\r\n                        target.tagName === 'INPUT' &&\r\n                        (m.oldValue || '').toLowerCase() === 'password') {\r\n                        target.setAttribute('data-rr-is-password', 'true');\r\n                    }\r\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\r\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value);\r\n                        if (attributeName === 'style') {\r\n                            let unattachedDoc;\r\n                            try {\r\n                                unattachedDoc = document.implementation.createHTMLDocument();\r\n                            }\r\n                            catch (e) {\r\n                                unattachedDoc = this.doc;\r\n                            }\r\n                            const old = unattachedDoc.createElement('span');\r\n                            if (m.oldValue) {\r\n                                old.setAttribute('style', m.oldValue);\r\n                            }\r\n                            for (const pname of Array.from(target.style)) {\r\n                                const newValue = target.style.getPropertyValue(pname);\r\n                                const newPriority = target.style.getPropertyPriority(pname);\r\n                                if (newValue !== old.style.getPropertyValue(pname) ||\r\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\r\n                                    if (newPriority === '') {\r\n                                        item.styleDiff[pname] = newValue;\r\n                                    }\r\n                                    else {\r\n                                        item.styleDiff[pname] = [newValue, newPriority];\r\n                                    }\r\n                                }\r\n                                else {\r\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\r\n                                }\r\n                            }\r\n                            for (const pname of Array.from(old.style)) {\r\n                                if (target.style.getPropertyValue(pname) === '') {\r\n                                    item.styleDiff[pname] = false;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n                case 'childList': {\r\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n                        return;\r\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n                    m.removedNodes.forEach((n) => {\r\n                        const nodeId = this.mirror.getId(n);\r\n                        const parentId = isShadowRoot(m.target)\r\n                            ? this.mirror.getId(m.target.host)\r\n                            : this.mirror.getId(m.target);\r\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n                            isIgnored(n, this.mirror) ||\r\n                            !isSerialized(n, this.mirror)) {\r\n                            return;\r\n                        }\r\n                        if (this.addedSet.has(n)) {\r\n                            deepDelete(this.addedSet, n);\r\n                            this.droppedSet.add(n);\r\n                        }\r\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n                        else if (this.movedSet.has(n) &&\r\n                            this.movedMap[moveKey(nodeId, parentId)]) {\r\n                            deepDelete(this.movedSet, n);\r\n                        }\r\n                        else {\r\n                            this.removes.push({\r\n                                parentId,\r\n                                id: nodeId,\r\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n                                    ? true\r\n                                    : undefined,\r\n                            });\r\n                        }\r\n                        this.mapRemoves.push(n);\r\n                    });\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n        this.genAdds = (n, target) => {\r\n            if (this.processedNodeManager.inOtherBuffer(n, this))\r\n                return;\r\n            if (this.addedSet.has(n) || this.movedSet.has(n))\r\n                return;\r\n            if (this.mirror.hasNode(n)) {\r\n                if (isIgnored(n, this.mirror)) {\r\n                    return;\r\n                }\r\n                this.movedSet.add(n);\r\n                let targetId = null;\r\n                if (target && this.mirror.hasNode(target)) {\r\n                    targetId = this.mirror.getId(target);\r\n                }\r\n                if (targetId && targetId !== -1) {\r\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n                }\r\n            }\r\n            else {\r\n                this.addedSet.add(n);\r\n                this.droppedSet.delete(n);\r\n            }\r\n            if (!isBlocked(n, this.blockClass, this.blockSelector, false)) {\r\n                n.childNodes.forEach((childN) => this.genAdds(childN));\r\n                if (hasShadowRoot(n)) {\r\n                    n.shadowRoot.childNodes.forEach((childN) => {\r\n                        this.processedNodeManager.add(childN, this);\r\n                        this.genAdds(childN, n);\r\n                    });\r\n                }\r\n            }\r\n        };\r\n    }\r\n    init(options) {\r\n        [\r\n            'mutationCb',\r\n            'blockClass',\r\n            'blockSelector',\r\n            'maskTextClass',\r\n            'maskTextSelector',\r\n            'inlineStylesheet',\r\n            'maskInputOptions',\r\n            'maskTextFn',\r\n            'maskInputFn',\r\n            'keepIframeSrcFn',\r\n            'recordCanvas',\r\n            'inlineImages',\r\n            'slimDOMOptions',\r\n            'dataURLOptions',\r\n            'doc',\r\n            'mirror',\r\n            'iframeManager',\r\n            'stylesheetManager',\r\n            'shadowDomManager',\r\n            'canvasManager',\r\n            'processedNodeManager',\r\n        ].forEach((key) => {\r\n            this[key] = options[key];\r\n        });\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n        this.canvasManager.freeze();\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n        this.canvasManager.unfreeze();\r\n        this.emit();\r\n    }\r\n    isFrozen() {\r\n        return this.frozen;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n        this.canvasManager.lock();\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n        this.canvasManager.unlock();\r\n        this.emit();\r\n    }\r\n    reset() {\r\n        this.shadowDomManager.reset();\r\n        this.canvasManager.reset();\r\n    }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n    addsSet.delete(n);\r\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n    if (removes.length === 0)\r\n        return false;\r\n    return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    const parentId = mirror.getId(parentNode);\r\n    if (removes.some((r) => r.id === parentId)) {\r\n        return true;\r\n    }\r\n    return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n    if (set.size === 0)\r\n        return false;\r\n    return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n    const { parentNode } = n;\r\n    if (!parentNode) {\r\n        return false;\r\n    }\r\n    if (set.has(parentNode)) {\r\n        return true;\r\n    }\r\n    return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","import { toLowerCase, getInputType, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport { on, throttle, isBlocked, getWindowScroll, getWindowHeight, getWindowWidth, hookSetter, patch, legacy_isTouchEvent, nowTimestamp } from '../utils.js';\nimport { callbackWrapper } from './error-handler.js';\nimport MutationBuffer from './mutation.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n    try {\r\n        if ('composedPath' in event) {\r\n            const path = event.composedPath();\r\n            if (path.length) {\r\n                return path[0];\r\n            }\r\n        }\r\n        else if ('path' in event && event.path.length) {\r\n            return event.path[0];\r\n        }\r\n    }\r\n    catch (_a) {\r\n    }\r\n    return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n    var _a, _b;\r\n    const mutationBuffer = new MutationBuffer();\r\n    mutationBuffers.push(mutationBuffer);\r\n    mutationBuffer.init(options);\r\n    let mutationObserverCtor = window.MutationObserver ||\r\n        window.__rrMutationObserver;\r\n    const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n    if (angularZoneSymbol &&\r\n        window[angularZoneSymbol]) {\r\n        mutationObserverCtor = window[angularZoneSymbol];\r\n    }\r\n    const observer = new mutationObserverCtor(callbackWrapper(mutationBuffer.processMutations.bind(mutationBuffer)));\r\n    observer.observe(rootEl, {\r\n        attributes: true,\r\n        attributeOldValue: true,\r\n        characterData: true,\r\n        characterDataOldValue: true,\r\n        childList: true,\r\n        subtree: true,\r\n    });\r\n    return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n    if (sampling.mousemove === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n        ? sampling.mousemoveCallback\r\n        : 500;\r\n    let positions = [];\r\n    let timeBaseline;\r\n    const wrappedCb = throttle(callbackWrapper((source) => {\r\n        const totalOffset = Date.now() - timeBaseline;\r\n        mousemoveCb(positions.map((p) => {\r\n            p.timeOffset -= totalOffset;\r\n            return p;\r\n        }), source);\r\n        positions = [];\r\n        timeBaseline = null;\r\n    }), callbackThreshold);\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n            ? evt.changedTouches[0]\r\n            : evt;\r\n        if (!timeBaseline) {\r\n            timeBaseline = nowTimestamp();\r\n        }\r\n        positions.push({\r\n            x: clientX,\r\n            y: clientY,\r\n            id: mirror.getId(target),\r\n            timeOffset: nowTimestamp() - timeBaseline,\r\n        });\r\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n            ? IncrementalSource.Drag\r\n            : evt instanceof MouseEvent\r\n                ? IncrementalSource.MouseMove\r\n                : IncrementalSource.TouchMove);\r\n    }), threshold, {\r\n        trailing: false,\r\n    }));\r\n    const handlers = [\r\n        on('mousemove', updatePosition, doc),\r\n        on('touchmove', updatePosition, doc),\r\n        on('drag', updatePosition, doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n    if (sampling.mouseInteraction === false) {\r\n        return () => {\r\n        };\r\n    }\r\n    const disableMap = sampling.mouseInteraction === true ||\r\n        sampling.mouseInteraction === undefined\r\n        ? {}\r\n        : sampling.mouseInteraction;\r\n    const handlers = [];\r\n    let currentPointerType = null;\r\n    const getHandler = (eventKey) => {\r\n        return (event) => {\r\n            const target = getEventTarget(event);\r\n            if (isBlocked(target, blockClass, blockSelector, true)) {\r\n                return;\r\n            }\r\n            let pointerType = null;\r\n            let thisEventKey = eventKey;\r\n            if ('pointerType' in event) {\r\n                switch (event.pointerType) {\r\n                    case 'mouse':\r\n                        pointerType = PointerTypes.Mouse;\r\n                        break;\r\n                    case 'touch':\r\n                        pointerType = PointerTypes.Touch;\r\n                        break;\r\n                    case 'pen':\r\n                        pointerType = PointerTypes.Pen;\r\n                        break;\r\n                }\r\n                if (pointerType === PointerTypes.Touch) {\r\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n                        thisEventKey = 'TouchStart';\r\n                    }\r\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n                        thisEventKey = 'TouchEnd';\r\n                    }\r\n                }\r\n                else if (pointerType === PointerTypes.Pen) ;\r\n            }\r\n            else if (legacy_isTouchEvent(event)) {\r\n                pointerType = PointerTypes.Touch;\r\n            }\r\n            if (pointerType !== null) {\r\n                currentPointerType = pointerType;\r\n                if ((thisEventKey.startsWith('Touch') &&\r\n                    pointerType === PointerTypes.Touch) ||\r\n                    (thisEventKey.startsWith('Mouse') &&\r\n                        pointerType === PointerTypes.Mouse)) {\r\n                    pointerType = null;\r\n                }\r\n            }\r\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n                pointerType = currentPointerType;\r\n                currentPointerType = null;\r\n            }\r\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n            if (!e) {\r\n                return;\r\n            }\r\n            const id = mirror.getId(target);\r\n            const { clientX, clientY } = e;\r\n            callbackWrapper(mouseInteractionCb)(Object.assign({ type: MouseInteractions[thisEventKey], id, x: clientX, y: clientY }, (pointerType !== null && { pointerType })));\r\n        };\r\n    };\r\n    Object.keys(MouseInteractions)\r\n        .filter((key) => Number.isNaN(Number(key)) &&\r\n        !key.endsWith('_Departed') &&\r\n        disableMap[key] !== false)\r\n        .forEach((eventKey) => {\r\n        let eventName = toLowerCase(eventKey);\r\n        const handler = getHandler(eventKey);\r\n        if (window.PointerEvent) {\r\n            switch (MouseInteractions[eventKey]) {\r\n                case MouseInteractions.MouseDown:\r\n                case MouseInteractions.MouseUp:\r\n                    eventName = eventName.replace('mouse', 'pointer');\r\n                    break;\r\n                case MouseInteractions.TouchStart:\r\n                case MouseInteractions.TouchEnd:\r\n                    return;\r\n            }\r\n        }\r\n        handlers.push(on(eventName, handler, doc));\r\n    });\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n    const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n        const target = getEventTarget(evt);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, true)) {\r\n            return;\r\n        }\r\n        const id = mirror.getId(target);\r\n        if (target === doc && doc.defaultView) {\r\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n            scrollCb({\r\n                id,\r\n                x: scrollLeftTop.left,\r\n                y: scrollLeftTop.top,\r\n            });\r\n        }\r\n        else {\r\n            scrollCb({\r\n                id,\r\n                x: target.scrollLeft,\r\n                y: target.scrollTop,\r\n            });\r\n        }\r\n    }), sampling.scroll || 100));\r\n    return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n    let lastH = -1;\r\n    let lastW = -1;\r\n    const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n        const height = getWindowHeight();\r\n        const width = getWindowWidth();\r\n        if (lastH !== height || lastW !== width) {\r\n            viewportResizeCb({\r\n                width: Number(width),\r\n                height: Number(height),\r\n            });\r\n            lastH = height;\r\n            lastW = width;\r\n        }\r\n    }), 200));\r\n    return on('resize', updateDimension, win);\r\n}\r\nfunction wrapEventWithUserTriggeredFlag(v, enable) {\r\n    const value = Object.assign({}, v);\r\n    if (!enable)\r\n        delete value.userTriggered;\r\n    return value;\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n    function eventHandler(event) {\r\n        let target = getEventTarget(event);\r\n        const userTriggered = event.isTrusted;\r\n        const tagName = target && target.tagName;\r\n        if (target && tagName === 'OPTION') {\r\n            target = target.parentElement;\r\n        }\r\n        if (!target ||\r\n            !tagName ||\r\n            INPUT_TAGS.indexOf(tagName) < 0 ||\r\n            isBlocked(target, blockClass, blockSelector, true)) {\r\n            return;\r\n        }\r\n        if (target.classList.contains(ignoreClass) ||\r\n            (ignoreSelector && target.matches(ignoreSelector))) {\r\n            return;\r\n        }\r\n        let text = target.value;\r\n        let isChecked = false;\r\n        const type = getInputType(target) || '';\r\n        if (type === 'radio' || type === 'checkbox') {\r\n            isChecked = target.checked;\r\n        }\r\n        else if (maskInputOptions[tagName.toLowerCase()] ||\r\n            maskInputOptions[type]) {\r\n            text = maskInputValue({\r\n                element: target,\r\n                maskInputOptions,\r\n                tagName,\r\n                type,\r\n                value: text,\r\n                maskInputFn,\r\n            });\r\n        }\r\n        cbWithDedup(target, callbackWrapper(wrapEventWithUserTriggeredFlag)({ text, isChecked, userTriggered }, userTriggeredOnInput));\r\n        const name = target.name;\r\n        if (type === 'radio' && name && isChecked) {\r\n            doc\r\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n                .forEach((el) => {\r\n                if (el !== target) {\r\n                    cbWithDedup(el, callbackWrapper(wrapEventWithUserTriggeredFlag)({\r\n                        text: el.value,\r\n                        isChecked: !isChecked,\r\n                        userTriggered: false,\r\n                    }, userTriggeredOnInput));\r\n                }\r\n            });\r\n        }\r\n    }\r\n    function cbWithDedup(target, v) {\r\n        const lastInputValue = lastInputValueMap.get(target);\r\n        if (!lastInputValue ||\r\n            lastInputValue.text !== v.text ||\r\n            lastInputValue.isChecked !== v.isChecked) {\r\n            lastInputValueMap.set(target, v);\r\n            const id = mirror.getId(target);\r\n            callbackWrapper(inputCb)(Object.assign(Object.assign({}, v), { id }));\r\n        }\r\n    }\r\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n    const currentWindow = doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n        };\r\n    }\r\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n    const hookProperties = [\r\n        [currentWindow.HTMLInputElement.prototype, 'value'],\r\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n    ];\r\n    if (propertyDescriptor && propertyDescriptor.set) {\r\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n            set() {\r\n                callbackWrapper(eventHandler)({\r\n                    target: this,\r\n                    isTrusted: false,\r\n                });\r\n            },\r\n        }, false, currentWindow)));\r\n    }\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n    const positions = [];\r\n    function recurse(childRule, pos) {\r\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n            childRule.parentRule instanceof CSSGroupingRule) ||\r\n            (hasNestedCSSRule('CSSMediaRule') &&\r\n                childRule.parentRule instanceof CSSMediaRule) ||\r\n            (hasNestedCSSRule('CSSSupportsRule') &&\r\n                childRule.parentRule instanceof CSSSupportsRule) ||\r\n            (hasNestedCSSRule('CSSConditionRule') &&\r\n                childRule.parentRule instanceof CSSConditionRule)) {\r\n            const rules = Array.from(childRule.parentRule.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        else if (childRule.parentStyleSheet) {\r\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n            const index = rules.indexOf(childRule);\r\n            pos.unshift(index);\r\n        }\r\n        return pos;\r\n    }\r\n    return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n    let id, styleId;\r\n    if (!sheet)\r\n        return {};\r\n    if (sheet.ownerNode)\r\n        id = mirror.getId(sheet.ownerNode);\r\n    else\r\n        styleId = styleMirror.getId(sheet);\r\n    return {\r\n        styleId,\r\n        id,\r\n    };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n        return () => {\r\n        };\r\n    }\r\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [rule, index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    adds: [{ rule, index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            const [index] = argumentsList;\r\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleSheetRuleCb({\r\n                    id,\r\n                    styleId,\r\n                    removes: [{ index }],\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    let replace;\r\n    if (win.CSSStyleSheet.prototype.replace) {\r\n        replace = win.CSSStyleSheet.prototype.replace;\r\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replace: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    let replaceSync;\r\n    if (win.CSSStyleSheet.prototype.replaceSync) {\r\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [text] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        replaceSync: text,\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    }\r\n    const supportedNestedCSSRuleTypes = {};\r\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n    }\r\n    else {\r\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n        }\r\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n        }\r\n    }\r\n    const unmodifiedFunctions = {};\r\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n        unmodifiedFunctions[typeKey] = {\r\n            insertRule: type.prototype.insertRule,\r\n            deleteRule: type.prototype.deleteRule,\r\n        };\r\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [rule, index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        adds: [\r\n                            {\r\n                                rule,\r\n                                index: [\r\n                                    ...getNestedCSSRulePositions(thisArg),\r\n                                    index || 0,\r\n                                ],\r\n                            },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n                const [index] = argumentsList;\r\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                    styleSheetRuleCb({\r\n                        id,\r\n                        styleId,\r\n                        removes: [\r\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n                        ],\r\n                    });\r\n                }\r\n                return target.apply(thisArg, argumentsList);\r\n            }),\r\n        });\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n        });\r\n    });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n    var _a, _b, _c;\r\n    let hostId = null;\r\n    if (host.nodeName === '#document')\r\n        hostId = mirror.getId(host);\r\n    else\r\n        hostId = mirror.getId(host.host);\r\n    const patchTarget = host.nodeName === '#document'\r\n        ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n        : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n    const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype)\r\n        ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets')\r\n        : undefined;\r\n    if (hostId === null ||\r\n        hostId === -1 ||\r\n        !patchTarget ||\r\n        !originalPropertyDescriptor)\r\n        return () => {\r\n        };\r\n    Object.defineProperty(host, 'adoptedStyleSheets', {\r\n        configurable: originalPropertyDescriptor.configurable,\r\n        enumerable: originalPropertyDescriptor.enumerable,\r\n        get() {\r\n            var _a;\r\n            return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n        },\r\n        set(sheets) {\r\n            var _a;\r\n            const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n            if (hostId !== null && hostId !== -1) {\r\n                try {\r\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n                }\r\n                catch (e) {\r\n                }\r\n            }\r\n            return result;\r\n        },\r\n    });\r\n    return callbackWrapper(() => {\r\n        Object.defineProperty(host, 'adoptedStyleSheets', {\r\n            configurable: originalPropertyDescriptor.configurable,\r\n            enumerable: originalPropertyDescriptor.enumerable,\r\n            get: originalPropertyDescriptor.get,\r\n            set: originalPropertyDescriptor.set,\r\n        });\r\n    });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property, value, priority] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return setProperty.apply(thisArg, [property, value, priority]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    set: {\r\n                        property,\r\n                        value,\r\n                        priority,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n            var _a;\r\n            const [property] = argumentsList;\r\n            if (ignoreCSSAttributes.has(property)) {\r\n                return removeProperty.apply(thisArg, [property]);\r\n            }\r\n            const { id, styleId } = getIdAndStyleId((_a = thisArg.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n                styleDeclarationCb({\r\n                    id,\r\n                    styleId,\r\n                    remove: {\r\n                        property,\r\n                    },\r\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\r\n                });\r\n            }\r\n            return target.apply(thisArg, argumentsList);\r\n        }),\r\n    });\r\n    return callbackWrapper(() => {\r\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n    });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, doc, }) {\r\n    const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n        const target = getEventTarget(event);\r\n        if (!target ||\r\n            isBlocked(target, blockClass, blockSelector, true)) {\r\n            return;\r\n        }\r\n        const { currentTime, volume, muted, playbackRate } = target;\r\n        mediaInteractionCb({\r\n            type,\r\n            id: mirror.getId(target),\r\n            currentTime,\r\n            volume,\r\n            muted,\r\n            playbackRate,\r\n        });\r\n    }), sampling.media || 500));\r\n    const handlers = [\r\n        on('play', handler(0), doc),\r\n        on('pause', handler(1), doc),\r\n        on('seeked', handler(2), doc),\r\n        on('volumechange', handler(3), doc),\r\n        on('ratechange', handler(4), doc),\r\n    ];\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n    const win = doc.defaultView;\r\n    if (!win) {\r\n        return () => {\r\n        };\r\n    }\r\n    const handlers = [];\r\n    const fontMap = new WeakMap();\r\n    const originalFontFace = win.FontFace;\r\n    win.FontFace = function FontFace(family, source, descriptors) {\r\n        const fontFace = new originalFontFace(family, source, descriptors);\r\n        fontMap.set(fontFace, {\r\n            family,\r\n            buffer: typeof source !== 'string',\r\n            descriptors,\r\n            fontSource: typeof source === 'string'\r\n                ? source\r\n                : JSON.stringify(Array.from(new Uint8Array(source))),\r\n        });\r\n        return fontFace;\r\n    };\r\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n        return function (fontFace) {\r\n            setTimeout(callbackWrapper(() => {\r\n                const p = fontMap.get(fontFace);\r\n                if (p) {\r\n                    fontCb(p);\r\n                    fontMap.delete(fontFace);\r\n                }\r\n            }), 0);\r\n            return original.apply(this, [fontFace]);\r\n        };\r\n    });\r\n    handlers.push(() => {\r\n        win.FontFace = originalFontFace;\r\n    });\r\n    handlers.push(restoreHandler);\r\n    return callbackWrapper(() => {\r\n        handlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction initSelectionObserver(param) {\r\n    const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n    let collapsed = true;\r\n    const updateSelection = callbackWrapper(() => {\r\n        const selection = doc.getSelection();\r\n        if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n            return;\r\n        collapsed = selection.isCollapsed || false;\r\n        const ranges = [];\r\n        const count = selection.rangeCount || 0;\r\n        for (let i = 0; i < count; i++) {\r\n            const range = selection.getRangeAt(i);\r\n            const { startContainer, startOffset, endContainer, endOffset } = range;\r\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n                isBlocked(endContainer, blockClass, blockSelector, true);\r\n            if (blocked)\r\n                continue;\r\n            ranges.push({\r\n                start: mirror.getId(startContainer),\r\n                startOffset,\r\n                end: mirror.getId(endContainer),\r\n                endOffset,\r\n            });\r\n        }\r\n        selectionCb({ ranges });\r\n    });\r\n    updateSelection();\r\n    return on('selectionchange', updateSelection);\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n    const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, } = o;\r\n    o.mutationCb = (...p) => {\r\n        if (hooks.mutation) {\r\n            hooks.mutation(...p);\r\n        }\r\n        mutationCb(...p);\r\n    };\r\n    o.mousemoveCb = (...p) => {\r\n        if (hooks.mousemove) {\r\n            hooks.mousemove(...p);\r\n        }\r\n        mousemoveCb(...p);\r\n    };\r\n    o.mouseInteractionCb = (...p) => {\r\n        if (hooks.mouseInteraction) {\r\n            hooks.mouseInteraction(...p);\r\n        }\r\n        mouseInteractionCb(...p);\r\n    };\r\n    o.scrollCb = (...p) => {\r\n        if (hooks.scroll) {\r\n            hooks.scroll(...p);\r\n        }\r\n        scrollCb(...p);\r\n    };\r\n    o.viewportResizeCb = (...p) => {\r\n        if (hooks.viewportResize) {\r\n            hooks.viewportResize(...p);\r\n        }\r\n        viewportResizeCb(...p);\r\n    };\r\n    o.inputCb = (...p) => {\r\n        if (hooks.input) {\r\n            hooks.input(...p);\r\n        }\r\n        inputCb(...p);\r\n    };\r\n    o.mediaInteractionCb = (...p) => {\r\n        if (hooks.mediaInteaction) {\r\n            hooks.mediaInteaction(...p);\r\n        }\r\n        mediaInteractionCb(...p);\r\n    };\r\n    o.styleSheetRuleCb = (...p) => {\r\n        if (hooks.styleSheetRule) {\r\n            hooks.styleSheetRule(...p);\r\n        }\r\n        styleSheetRuleCb(...p);\r\n    };\r\n    o.styleDeclarationCb = (...p) => {\r\n        if (hooks.styleDeclaration) {\r\n            hooks.styleDeclaration(...p);\r\n        }\r\n        styleDeclarationCb(...p);\r\n    };\r\n    o.canvasMutationCb = (...p) => {\r\n        if (hooks.canvasMutation) {\r\n            hooks.canvasMutation(...p);\r\n        }\r\n        canvasMutationCb(...p);\r\n    };\r\n    o.fontCb = (...p) => {\r\n        if (hooks.font) {\r\n            hooks.font(...p);\r\n        }\r\n        fontCb(...p);\r\n    };\r\n    o.selectionCb = (...p) => {\r\n        if (hooks.selection) {\r\n            hooks.selection(...p);\r\n        }\r\n        selectionCb(...p);\r\n    };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n    const currentWindow = o.doc.defaultView;\r\n    if (!currentWindow) {\r\n        return () => {\r\n        };\r\n    }\r\n    mergeHooks(o, hooks);\r\n    let mutationObserver;\r\n    if (o.recordDOM) {\r\n        mutationObserver = initMutationObserver(o, o.doc);\r\n    }\r\n    const mousemoveHandler = initMoveObserver(o);\r\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n    const scrollHandler = initScrollObserver(o);\r\n    const viewportResizeHandler = initViewportResizeObserver(o, {\r\n        win: currentWindow,\r\n    });\r\n    const inputHandler = initInputObserver(o);\r\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n    let styleSheetObserver = () => { };\r\n    let adoptedStyleSheetObserver = () => { };\r\n    let styleDeclarationObserver = () => { };\r\n    let fontObserver = () => { };\r\n    if (o.recordDOM) {\r\n        styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n        adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n        styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n            win: currentWindow,\r\n        });\r\n        if (o.collectFonts) {\r\n            fontObserver = initFontObserver(o);\r\n        }\r\n    }\r\n    const selectionObserver = initSelectionObserver(o);\r\n    const pluginHandlers = [];\r\n    for (const plugin of o.plugins) {\r\n        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n    }\r\n    return callbackWrapper(() => {\r\n        mutationBuffers.forEach((b) => b.reset());\r\n        mutationObserver === null || mutationObserver === void 0 ? void 0 : mutationObserver.disconnect();\r\n        mousemoveHandler();\r\n        mouseInteractionHandler();\r\n        scrollHandler();\r\n        viewportResizeHandler();\r\n        inputHandler();\r\n        mediaInteractionHandler();\r\n        styleSheetObserver();\r\n        adoptedStyleSheetObserver();\r\n        styleDeclarationObserver();\r\n        fontObserver();\r\n        selectionObserver();\r\n        pluginHandlers.forEach((h) => h());\r\n    });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n    return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n    return Boolean(typeof window[prop] !== 'undefined' &&\r\n        window[prop].prototype &&\r\n        'insertRule' in window[prop].prototype &&\r\n        'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nvar decode = function (base64) {\n    var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n\nexport { decode, encode };\n","import { createInlineWorkerFactory } from './_rollup-plugin-web-worker-loader__helper__browser__createInlineWorkerFactory.js';\n\nvar WorkerFactory = createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () {\n(function () {\n    '__worker_loader_strict__';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n\r\n    function __awaiter(thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    }\n\n    /*\n     * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n     * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i = 0; i < chars.length; i++) {\n        lookup[chars.charCodeAt(i)] = i;\n    }\n    var encode = function (arraybuffer) {\n        var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n        for (i = 0; i < len; i += 3) {\n            base64 += chars[bytes[i] >> 2];\n            base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n            base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n            base64 += chars[bytes[i + 2] & 63];\n        }\n        if (len % 3 === 2) {\n            base64 = base64.substring(0, base64.length - 1) + '=';\n        }\n        else if (len % 3 === 1) {\n            base64 = base64.substring(0, base64.length - 2) + '==';\n        }\n        return base64;\n    };\n\n    const lastBlobMap = new Map();\r\n    const transparentBlobMap = new Map();\r\n    function getTransparentBlobFor(width, height, dataURLOptions) {\r\n        return __awaiter(this, void 0, void 0, function* () {\r\n            const id = `${width}-${height}`;\r\n            if ('OffscreenCanvas' in globalThis) {\r\n                if (transparentBlobMap.has(id))\r\n                    return transparentBlobMap.get(id);\r\n                const offscreen = new OffscreenCanvas(width, height);\r\n                offscreen.getContext('2d');\r\n                const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n                const arrayBuffer = yield blob.arrayBuffer();\r\n                const base64 = encode(arrayBuffer);\r\n                transparentBlobMap.set(id, base64);\r\n                return base64;\r\n            }\r\n            else {\r\n                return '';\r\n            }\r\n        });\r\n    }\r\n    const worker = self;\r\n    worker.onmessage = function (e) {\r\n        return __awaiter(this, void 0, void 0, function* () {\r\n            if ('OffscreenCanvas' in globalThis) {\r\n                const { id, bitmap, width, height, dataURLOptions } = e.data;\r\n                const transparentBase64 = getTransparentBlobFor(width, height, dataURLOptions);\r\n                const offscreen = new OffscreenCanvas(width, height);\r\n                const ctx = offscreen.getContext('2d');\r\n                ctx.drawImage(bitmap, 0, 0);\r\n                bitmap.close();\r\n                const blob = yield offscreen.convertToBlob(dataURLOptions);\r\n                const type = blob.type;\r\n                const arrayBuffer = yield blob.arrayBuffer();\r\n                const base64 = encode(arrayBuffer);\r\n                if (!lastBlobMap.has(id) && (yield transparentBase64) === base64) {\r\n                    lastBlobMap.set(id, base64);\r\n                    return worker.postMessage({ id });\r\n                }\r\n                if (lastBlobMap.get(id) === base64)\r\n                    return worker.postMessage({ id });\r\n                worker.postMessage({\r\n                    id,\r\n                    type,\r\n                    base64,\r\n                    width,\r\n                    height,\r\n                });\r\n                lastBlobMap.set(id, base64);\r\n            }\r\n            else {\r\n                return worker.postMessage({ id: e.data.id });\r\n            }\r\n        });\r\n    };\n\n})();\n}, null);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { funcToSource } from './_rollup-plugin-web-worker-loader__helper__funcToSource.js';\n\nfunction createURL(fn, sourcemapArg) {\n    var lines = funcToSource(fn, sourcemapArg);\n    var blob = new Blob(lines, { type: 'application/javascript' });\n    return URL.createObjectURL(blob);\n}\n\nfunction createInlineWorkerFactory(fn, sourcemapArg) {\n    var url;\n    return function WorkerFactory(options) {\n        url = url || createURL(fn, sourcemapArg);\n        return new Worker(url, options);\n    };\n}\n\nexport { createInlineWorkerFactory };\n","function funcToSource(fn, sourcemapArg) {\n    var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n    var source = fn.toString();\n    var lines = source.split('\\n');\n    lines.pop();\n    lines.shift();\n    var blankPrefixLength = lines[0].search(/\\S/);\n    var regex = /(['\"])__worker_loader_strict__(['\"])/g;\n    for (var i = 0, n = lines.length; i < n; ++i) {\n        lines[i] = lines[i].substring(blankPrefixLength).replace(regex, '$1use strict$2') + '\\n';\n    }\n    if (sourcemap) {\n        lines.push('\\/\\/# sourceMappingURL=' + sourcemap + '\\n');\n    }\n    return lines;\n}\n\nexport { funcToSource };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n    let contextMap = canvasVarMap.get(ctx);\r\n    if (!contextMap) {\r\n        contextMap = new Map();\r\n        canvasVarMap.set(ctx, contextMap);\r\n    }\r\n    if (!contextMap.has(ctor)) {\r\n        contextMap.set(ctor, []);\r\n    }\r\n    return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n    if (!value ||\r\n        !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n        return;\r\n    const name = value.constructor.name;\r\n    const list = variableListFor(ctx, name);\r\n    let index = list.indexOf(value);\r\n    if (index === -1) {\r\n        index = list.length;\r\n        list.push(value);\r\n    }\r\n    return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n    if (value instanceof Array) {\r\n        return value.map((arg) => serializeArg(arg, win, ctx));\r\n    }\r\n    else if (value === null) {\r\n        return value;\r\n    }\r\n    else if (value instanceof Float32Array ||\r\n        value instanceof Float64Array ||\r\n        value instanceof Int32Array ||\r\n        value instanceof Uint32Array ||\r\n        value instanceof Uint8Array ||\r\n        value instanceof Uint16Array ||\r\n        value instanceof Int16Array ||\r\n        value instanceof Int8Array ||\r\n        value instanceof Uint8ClampedArray) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [Object.values(value)],\r\n        };\r\n    }\r\n    else if (value instanceof ArrayBuffer) {\r\n        const name = value.constructor.name;\r\n        const base64 = encode(value);\r\n        return {\r\n            rr_type: name,\r\n            base64,\r\n        };\r\n    }\r\n    else if (value instanceof DataView) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [\r\n                serializeArg(value.buffer, win, ctx),\r\n                value.byteOffset,\r\n                value.byteLength,\r\n            ],\r\n        };\r\n    }\r\n    else if (value instanceof HTMLImageElement) {\r\n        const name = value.constructor.name;\r\n        const { src } = value;\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof HTMLCanvasElement) {\r\n        const name = 'HTMLImageElement';\r\n        const src = value.toDataURL();\r\n        return {\r\n            rr_type: name,\r\n            src,\r\n        };\r\n    }\r\n    else if (value instanceof ImageData) {\r\n        const name = value.constructor.name;\r\n        return {\r\n            rr_type: name,\r\n            args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n        };\r\n    }\r\n    else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n        const name = value.constructor.name;\r\n        const index = saveWebGLVar(value, win, ctx);\r\n        return {\r\n            rr_type: name,\r\n            index: index,\r\n        };\r\n    }\r\n    return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n    return [...args].map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n    const webGLConstructorNames = [\r\n        'WebGLActiveInfo',\r\n        'WebGLBuffer',\r\n        'WebGLFramebuffer',\r\n        'WebGLProgram',\r\n        'WebGLRenderbuffer',\r\n        'WebGLShader',\r\n        'WebGLShaderPrecisionFormat',\r\n        'WebGLTexture',\r\n        'WebGLUniformLocation',\r\n        'WebGLVertexArrayObject',\r\n        'WebGLVertexArrayObjectOES',\r\n    ];\r\n    const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n    return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction getNormalizedContextName(contextType) {\r\n    return contextType === 'experimental-webgl' ? 'webgl' : contextType;\r\n}\r\nfunction initCanvasContextObserver(win, blockClass, blockSelector, setPreserveDrawingBufferToTrue) {\r\n    const handlers = [];\r\n    try {\r\n        const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n            return function (contextType, ...args) {\r\n                if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n                    const ctxName = getNormalizedContextName(contextType);\r\n                    if (!('__context' in this))\r\n                        this.__context = ctxName;\r\n                    if (setPreserveDrawingBufferToTrue &&\r\n                        ['webgl', 'webgl2'].includes(ctxName)) {\r\n                        if (args[0] && typeof args[0] === 'object') {\r\n                            const contextAttributes = args[0];\r\n                            if (!contextAttributes.preserveDrawingBuffer) {\r\n                                contextAttributes.preserveDrawingBuffer = true;\r\n                            }\r\n                        }\r\n                        else {\r\n                            args.splice(0, 1, {\r\n                                preserveDrawingBuffer: true,\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n                return original.apply(this, [contextType, ...args]);\r\n            };\r\n        });\r\n        handlers.push(restoreHandler);\r\n    }\r\n    catch (_a) {\r\n        console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n    const handlers = [];\r\n    const props = Object.getOwnPropertyNames(prototype);\r\n    for (const prop of props) {\r\n        if ([\r\n            'isContextLost',\r\n            'canvas',\r\n            'drawingBufferWidth',\r\n            'drawingBufferHeight',\r\n        ].includes(prop)) {\r\n            continue;\r\n        }\r\n        try {\r\n            if (typeof prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    const result = original.apply(this, args);\r\n                    saveWebGLVar(result, win, this);\r\n                    if ('tagName' in this.canvas &&\r\n                        !isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n                        const recordArgs = serializeArgs([...args], win, this);\r\n                        const mutation = {\r\n                            type,\r\n                            property: prop,\r\n                            args: recordArgs,\r\n                        };\r\n                        cb(this.canvas, mutation);\r\n                    }\r\n                    return result;\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch (_a) {\r\n            const hookHandler = hookSetter(prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type,\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n    const handlers = [];\r\n    handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n    if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n        handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { polyfill, nowTimestamp, on, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\n\nfunction wrapEvent(e) {\r\n    return Object.assign(Object.assign({}, e), { timestamp: nowTimestamp() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\r\n        ? options.recordAfter\r\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, } = options;\r\n    registerErrorHandler(errorHandler);\r\n    const inEmittingFrame = recordCrossOriginIframes\r\n        ? window.parent === window\r\n        : true;\r\n    let passEmitsToParent = false;\r\n    if (!inEmittingFrame) {\r\n        try {\r\n            if (window.parent.document) {\r\n                passEmitsToParent = false;\r\n            }\r\n        }\r\n        catch (e) {\r\n            passEmitsToParent = true;\r\n        }\r\n    }\r\n    if (inEmittingFrame && !emit) {\r\n        throw new Error('emit function is required');\r\n    }\r\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n        sampling.mousemove = mousemoveWait;\r\n    }\r\n    mirror.reset();\r\n    const maskInputOptions = maskAllInputs === true\r\n        ? {\r\n            color: true,\r\n            date: true,\r\n            'datetime-local': true,\r\n            email: true,\r\n            month: true,\r\n            number: true,\r\n            range: true,\r\n            search: true,\r\n            tel: true,\r\n            text: true,\r\n            time: true,\r\n            url: true,\r\n            week: true,\r\n            textarea: true,\r\n            select: true,\r\n            password: true,\r\n        }\r\n        : _maskInputOptions !== undefined\r\n            ? _maskInputOptions\r\n            : { password: true };\r\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n        ? {\r\n            script: true,\r\n            comment: true,\r\n            headFavicon: true,\r\n            headWhitespace: true,\r\n            headMetaSocial: true,\r\n            headMetaRobots: true,\r\n            headMetaHttpEquiv: true,\r\n            headMetaVerification: true,\r\n            headMetaAuthorship: _slimDOMOptions === 'all',\r\n            headMetaDescKeywords: _slimDOMOptions === 'all',\r\n        }\r\n        : _slimDOMOptions\r\n            ? _slimDOMOptions\r\n            : {};\r\n    polyfill();\r\n    let lastFullSnapshotEvent;\r\n    let incrementalSnapshotCount = 0;\r\n    const eventProcessor = (e) => {\r\n        for (const plugin of plugins || []) {\r\n            if (plugin.eventProcessor) {\r\n                e = plugin.eventProcessor(e);\r\n            }\r\n        }\r\n        if (packFn &&\r\n            !passEmitsToParent) {\r\n            e = packFn(e);\r\n        }\r\n        return e;\r\n    };\r\n    wrappedEmit = (e, isCheckout) => {\r\n        var _a;\r\n        if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n            e.type !== EventType.FullSnapshot &&\r\n            !(e.type === EventType.IncrementalSnapshot &&\r\n                e.data.source === IncrementalSource.Mutation)) {\r\n            mutationBuffers.forEach((buf) => buf.unfreeze());\r\n        }\r\n        if (inEmittingFrame) {\r\n            emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n        }\r\n        else if (passEmitsToParent) {\r\n            const message = {\r\n                type: 'rrweb',\r\n                event: eventProcessor(e),\r\n                origin: window.location.origin,\r\n                isCheckout,\r\n            };\r\n            window.parent.postMessage(message, '*');\r\n        }\r\n        if (e.type === EventType.FullSnapshot) {\r\n            lastFullSnapshotEvent = e;\r\n            incrementalSnapshotCount = 0;\r\n        }\r\n        else if (e.type === EventType.IncrementalSnapshot) {\r\n            if (e.data.source === IncrementalSource.Mutation &&\r\n                e.data.isAttachIframe) {\r\n                return;\r\n            }\r\n            incrementalSnapshotCount++;\r\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n            const exceedTime = checkoutEveryNms &&\r\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n            if (exceedCount || exceedTime) {\r\n                takeFullSnapshot(true);\r\n            }\r\n        }\r\n    };\r\n    const wrappedMutationEmit = (m) => {\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.IncrementalSnapshot,\r\n            data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n        }));\r\n    };\r\n    const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n    }));\r\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n    }));\r\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n        type: EventType.IncrementalSnapshot,\r\n        data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n    }));\r\n    const stylesheetManager = new StylesheetManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n    });\r\n    const iframeManager = new IframeManager({\r\n        mirror,\r\n        mutationCb: wrappedMutationEmit,\r\n        stylesheetManager: stylesheetManager,\r\n        recordCrossOriginIframes,\r\n        wrappedEmit,\r\n    });\r\n    for (const plugin of plugins || []) {\r\n        if (plugin.getMirror)\r\n            plugin.getMirror({\r\n                nodeMirror: mirror,\r\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n            });\r\n    }\r\n    const processedNodeManager = new ProcessedNodeManager();\r\n    canvasManager = new CanvasManager({\r\n        recordCanvas,\r\n        mutationCb: wrappedCanvasMutationEmit,\r\n        win: window,\r\n        blockClass,\r\n        blockSelector,\r\n        mirror,\r\n        sampling: sampling.canvas,\r\n        dataURLOptions,\r\n    });\r\n    const shadowDomManager = new ShadowDomManager({\r\n        mutationCb: wrappedMutationEmit,\r\n        scrollCb: wrappedScrollEmit,\r\n        bypassOptions: {\r\n            blockClass,\r\n            blockSelector,\r\n            maskTextClass,\r\n            maskTextSelector,\r\n            inlineStylesheet,\r\n            maskInputOptions,\r\n            dataURLOptions,\r\n            maskTextFn,\r\n            maskInputFn,\r\n            recordCanvas,\r\n            inlineImages,\r\n            sampling,\r\n            slimDOMOptions,\r\n            iframeManager,\r\n            stylesheetManager,\r\n            canvasManager,\r\n            keepIframeSrcFn,\r\n            processedNodeManager,\r\n        },\r\n        mirror,\r\n    });\r\n    takeFullSnapshot = (isCheckout = false) => {\r\n        if (!recordDOM) {\r\n            return;\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.Meta,\r\n            data: {\r\n                href: window.location.href,\r\n                width: getWindowWidth(),\r\n                height: getWindowHeight(),\r\n            },\r\n        }), isCheckout);\r\n        stylesheetManager.reset();\r\n        shadowDomManager.init();\r\n        mutationBuffers.forEach((buf) => buf.lock());\r\n        const node = snapshot(document, {\r\n            mirror,\r\n            blockClass,\r\n            blockSelector,\r\n            maskTextClass,\r\n            maskTextSelector,\r\n            inlineStylesheet,\r\n            maskAllInputs: maskInputOptions,\r\n            maskTextFn,\r\n            slimDOM: slimDOMOptions,\r\n            dataURLOptions,\r\n            recordCanvas,\r\n            inlineImages,\r\n            onSerialize: (n) => {\r\n                if (isSerializedIframe(n, mirror)) {\r\n                    iframeManager.addIframe(n);\r\n                }\r\n                if (isSerializedStylesheet(n, mirror)) {\r\n                    stylesheetManager.trackLinkElement(n);\r\n                }\r\n                if (hasShadowRoot(n)) {\r\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n                }\r\n            },\r\n            onIframeLoad: (iframe, childSn) => {\r\n                iframeManager.attachIframe(iframe, childSn);\r\n                shadowDomManager.observeAttachShadow(iframe);\r\n            },\r\n            onStylesheetLoad: (linkEl, childSn) => {\r\n                stylesheetManager.attachLinkElement(linkEl, childSn);\r\n            },\r\n            keepIframeSrcFn,\r\n        });\r\n        if (!node) {\r\n            return console.warn('Failed to snapshot the document');\r\n        }\r\n        wrappedEmit(wrapEvent({\r\n            type: EventType.FullSnapshot,\r\n            data: {\r\n                node,\r\n                initialOffset: getWindowScroll(window),\r\n            },\r\n        }), isCheckout);\r\n        mutationBuffers.forEach((buf) => buf.unlock());\r\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n    };\r\n    try {\r\n        const handlers = [];\r\n        const observe = (doc) => {\r\n            var _a;\r\n            return callbackWrapper(initObservers)({\r\n                mutationCb: wrappedMutationEmit,\r\n                mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: {\r\n                        source,\r\n                        positions,\r\n                    },\r\n                })),\r\n                mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n                })),\r\n                scrollCb: wrappedScrollEmit,\r\n                viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n                })),\r\n                inputCb: (v) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Input }, v),\r\n                })),\r\n                mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n                })),\r\n                styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n                })),\r\n                styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n                })),\r\n                canvasMutationCb: wrappedCanvasMutationEmit,\r\n                fontCb: (p) => wrappedEmit(wrapEvent({\r\n                    type: EventType.IncrementalSnapshot,\r\n                    data: Object.assign({ source: IncrementalSource.Font }, p),\r\n                })),\r\n                selectionCb: (p) => {\r\n                    wrappedEmit(wrapEvent({\r\n                        type: EventType.IncrementalSnapshot,\r\n                        data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n                    }));\r\n                },\r\n                blockClass,\r\n                ignoreClass,\r\n                ignoreSelector,\r\n                maskTextClass,\r\n                maskTextSelector,\r\n                maskInputOptions,\r\n                inlineStylesheet,\r\n                sampling,\r\n                recordDOM,\r\n                recordCanvas,\r\n                inlineImages,\r\n                userTriggeredOnInput,\r\n                collectFonts,\r\n                doc,\r\n                maskInputFn,\r\n                maskTextFn,\r\n                keepIframeSrcFn,\r\n                blockSelector,\r\n                slimDOMOptions,\r\n                dataURLOptions,\r\n                mirror,\r\n                iframeManager,\r\n                stylesheetManager,\r\n                shadowDomManager,\r\n                processedNodeManager,\r\n                canvasManager,\r\n                ignoreCSSAttributes,\r\n                plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n                    observer: p.observer,\r\n                    options: p.options,\r\n                    callback: (payload) => wrappedEmit(wrapEvent({\r\n                        type: EventType.Plugin,\r\n                        data: {\r\n                            plugin: p.name,\r\n                            payload,\r\n                        },\r\n                    })),\r\n                }))) || [],\r\n            }, hooks);\r\n        };\r\n        iframeManager.addLoadListener((iframeEl) => {\r\n            try {\r\n                handlers.push(observe(iframeEl.contentDocument));\r\n            }\r\n            catch (error) {\r\n                console.warn(error);\r\n            }\r\n        });\r\n        const init = () => {\r\n            takeFullSnapshot();\r\n            handlers.push(observe(document));\r\n            recording = true;\r\n        };\r\n        if (document.readyState === 'interactive' ||\r\n            document.readyState === 'complete') {\r\n            init();\r\n        }\r\n        else {\r\n            handlers.push(on('DOMContentLoaded', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.DomContentLoaded,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'DOMContentLoaded')\r\n                    init();\r\n            }));\r\n            handlers.push(on('load', () => {\r\n                wrappedEmit(wrapEvent({\r\n                    type: EventType.Load,\r\n                    data: {},\r\n                }));\r\n                if (recordAfter === 'load')\r\n                    init();\r\n            }, window));\r\n        }\r\n        return () => {\r\n            handlers.forEach((h) => h());\r\n            processedNodeManager.destroy();\r\n            recording = false;\r\n            unregisterErrorHandler();\r\n        };\r\n    }\r\n    catch (error) {\r\n        console.warn(error);\r\n    }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n    if (!recording) {\r\n        throw new Error('please add custom event after start recording');\r\n    }\r\n    wrappedEmit(wrapEvent({\r\n        type: EventType.Custom,\r\n        data: {\r\n            tag,\r\n            payload,\r\n        },\r\n    }));\r\n};\r\nrecord.freezePage = () => {\r\n    mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n    if (!recording) {\r\n        throw new Error('please take full snapshot after start recording');\r\n    }\r\n    takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\nimport { isBlocked } from '../../../utils.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\n\nclass CanvasManager {\r\n    reset() {\r\n        this.pendingCanvasMutations.clear();\r\n        this.resetObservers && this.resetObservers();\r\n    }\r\n    freeze() {\r\n        this.frozen = true;\r\n    }\r\n    unfreeze() {\r\n        this.frozen = false;\r\n    }\r\n    lock() {\r\n        this.locked = true;\r\n    }\r\n    unlock() {\r\n        this.locked = false;\r\n    }\r\n    constructor(options) {\r\n        this.pendingCanvasMutations = new Map();\r\n        this.rafStamps = { latestId: 0, invokeId: null };\r\n        this.frozen = false;\r\n        this.locked = false;\r\n        this.processMutation = (target, mutation) => {\r\n            const newFrame = this.rafStamps.invokeId &&\r\n                this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n            if (newFrame || !this.rafStamps.invokeId)\r\n                this.rafStamps.invokeId = this.rafStamps.latestId;\r\n            if (!this.pendingCanvasMutations.has(target)) {\r\n                this.pendingCanvasMutations.set(target, []);\r\n            }\r\n            this.pendingCanvasMutations.get(target).push(mutation);\r\n        };\r\n        const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n        this.mutationCb = options.mutationCb;\r\n        this.mirror = options.mirror;\r\n        if (recordCanvas && sampling === 'all')\r\n            this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n        if (recordCanvas && typeof sampling === 'number')\r\n            this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n                dataURLOptions,\r\n            });\r\n    }\r\n    initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, true);\r\n        const snapshotInProgressMap = new Map();\r\n        const worker = new WorkerFactory();\r\n        worker.onmessage = (e) => {\r\n            const { id } = e.data;\r\n            snapshotInProgressMap.set(id, false);\r\n            if (!('base64' in e.data))\r\n                return;\r\n            const { base64, type, width, height } = e.data;\r\n            this.mutationCb({\r\n                id,\r\n                type: CanvasContext['2D'],\r\n                commands: [\r\n                    {\r\n                        property: 'clearRect',\r\n                        args: [0, 0, width, height],\r\n                    },\r\n                    {\r\n                        property: 'drawImage',\r\n                        args: [\r\n                            {\r\n                                rr_type: 'ImageBitmap',\r\n                                args: [\r\n                                    {\r\n                                        rr_type: 'Blob',\r\n                                        data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n                                        type,\r\n                                    },\r\n                                ],\r\n                            },\r\n                            0,\r\n                            0,\r\n                        ],\r\n                    },\r\n                ],\r\n            });\r\n        };\r\n        const timeBetweenSnapshots = 1000 / fps;\r\n        let lastSnapshotTime = 0;\r\n        let rafId;\r\n        const getCanvas = () => {\r\n            const matchedCanvas = [];\r\n            win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n                if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n                    matchedCanvas.push(canvas);\r\n                }\r\n            });\r\n            return matchedCanvas;\r\n        };\r\n        const takeCanvasSnapshots = (timestamp) => {\r\n            if (lastSnapshotTime &&\r\n                timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n                rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n                return;\r\n            }\r\n            lastSnapshotTime = timestamp;\r\n            getCanvas()\r\n                .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n                var _a;\r\n                const id = this.mirror.getId(canvas);\r\n                if (snapshotInProgressMap.get(id))\r\n                    return;\r\n                snapshotInProgressMap.set(id, true);\r\n                if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n                    const context = canvas.getContext(canvas.__context);\r\n                    if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n                        context.clear(context.COLOR_BUFFER_BIT);\r\n                    }\r\n                }\r\n                const bitmap = yield createImageBitmap(canvas);\r\n                worker.postMessage({\r\n                    id,\r\n                    bitmap,\r\n                    width: canvas.width,\r\n                    height: canvas.height,\r\n                    dataURLOptions: options.dataURLOptions,\r\n                }, [bitmap]);\r\n            }));\r\n            rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        };\r\n        rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            cancelAnimationFrame(rafId);\r\n        };\r\n    }\r\n    initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n        this.startRAFTimestamping();\r\n        this.startPendingCanvasMutationFlusher();\r\n        const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, false);\r\n        const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n        const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n        this.resetObservers = () => {\r\n            canvasContextReset();\r\n            canvas2DReset();\r\n            canvasWebGL1and2Reset();\r\n        };\r\n    }\r\n    startPendingCanvasMutationFlusher() {\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    startRAFTimestamping() {\r\n        const setLatestRAFTimestamp = (timestamp) => {\r\n            this.rafStamps.latestId = timestamp;\r\n            requestAnimationFrame(setLatestRAFTimestamp);\r\n        };\r\n        requestAnimationFrame(setLatestRAFTimestamp);\r\n    }\r\n    flushPendingCanvasMutations() {\r\n        this.pendingCanvasMutations.forEach((values, canvas) => {\r\n            const id = this.mirror.getId(canvas);\r\n            this.flushPendingCanvasMutationFor(canvas, id);\r\n        });\r\n        requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n    }\r\n    flushPendingCanvasMutationFor(canvas, id) {\r\n        if (this.frozen || this.locked) {\r\n            return;\r\n        }\r\n        const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n        if (!valuesWithType || id === -1)\r\n            return;\r\n        const values = valuesWithType.map((value) => {\r\n            const rest = __rest(value, [\"type\"]);\r\n            return rest;\r\n        });\r\n        const { type } = valuesWithType[0];\r\n        this.mutationCb({ id, type, commands: values });\r\n        this.pendingCanvasMutations.delete(canvas);\r\n    }\r\n}\n\nexport { CanvasManager };\n","import { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n    const handlers = [];\r\n    const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n    for (const prop of props2D) {\r\n        try {\r\n            if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n                continue;\r\n            }\r\n            const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n                return function (...args) {\r\n                    if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n                        setTimeout(() => {\r\n                            const recordArgs = serializeArgs([...args], win, this);\r\n                            cb(this.canvas, {\r\n                                type: CanvasContext['2D'],\r\n                                property: prop,\r\n                                args: recordArgs,\r\n                            });\r\n                        }, 0);\r\n                    }\r\n                    return original.apply(this, args);\r\n                };\r\n            });\r\n            handlers.push(restoreHandler);\r\n        }\r\n        catch (_a) {\r\n            const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n                set(v) {\r\n                    cb(this.canvas, {\r\n                        type: CanvasContext['2D'],\r\n                        property: prop,\r\n                        args: [v],\r\n                        setter: true,\r\n                    });\r\n                },\r\n            });\r\n            handlers.push(hookHandler);\r\n        }\r\n    }\r\n    return () => {\r\n        handlers.forEach((h) => h());\r\n    };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","class ProcessedNodeManager {\r\n    constructor() {\r\n        this.nodeMap = new WeakMap();\r\n        this.loop = true;\r\n        this.periodicallyClear();\r\n    }\r\n    periodicallyClear() {\r\n        requestAnimationFrame(() => {\r\n            this.clear();\r\n            if (this.loop)\r\n                this.periodicallyClear();\r\n        });\r\n    }\r\n    inOtherBuffer(node, thisBuffer) {\r\n        const buffers = this.nodeMap.get(node);\r\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n    }\r\n    add(node, buffer) {\r\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n    }\r\n    clear() {\r\n        this.nodeMap = new WeakMap();\r\n    }\r\n    destroy() {\r\n        this.loop = false;\r\n    }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { patch, inDom } from '../utils.js';\nimport { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\n\nclass ShadowDomManager {\r\n    constructor(options) {\r\n        this.shadowDoms = new WeakSet();\r\n        this.restoreHandlers = [];\r\n        this.mutationCb = options.mutationCb;\r\n        this.scrollCb = options.scrollCb;\r\n        this.bypassOptions = options.bypassOptions;\r\n        this.mirror = options.mirror;\r\n        this.init();\r\n    }\r\n    init() {\r\n        this.reset();\r\n        this.patchAttachShadow(Element, document);\r\n    }\r\n    addShadowRoot(shadowRoot, doc) {\r\n        if (!isNativeShadowDom(shadowRoot))\r\n            return;\r\n        if (this.shadowDoms.has(shadowRoot))\r\n            return;\r\n        this.shadowDoms.add(shadowRoot);\r\n        const observer = initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n        this.restoreHandlers.push(() => observer.disconnect());\r\n        this.restoreHandlers.push(initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror })));\r\n        setTimeout(() => {\r\n            if (shadowRoot.adoptedStyleSheets &&\r\n                shadowRoot.adoptedStyleSheets.length > 0)\r\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n                mirror: this.mirror,\r\n                stylesheetManager: this.bypassOptions.stylesheetManager,\r\n            }, shadowRoot));\r\n        }, 0);\r\n    }\r\n    observeAttachShadow(iframeElement) {\r\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n            return;\r\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n    }\r\n    patchAttachShadow(element, doc) {\r\n        const manager = this;\r\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n            return function (option) {\r\n                const shadowRoot = original.call(this, option);\r\n                if (this.shadowRoot && inDom(this))\r\n                    manager.addShadowRoot(this.shadowRoot, doc);\r\n                return shadowRoot;\r\n            };\r\n        }));\r\n    }\r\n    reset() {\r\n        this.restoreHandlers.forEach((handler) => {\r\n            try {\r\n                handler();\r\n            }\r\n            catch (e) {\r\n            }\r\n        });\r\n        this.restoreHandlers = [];\r\n        this.shadowDoms = new WeakSet();\r\n    }\r\n}\n\nexport { ShadowDomManager };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n    constructor(options) {\r\n        this.trackedLinkElements = new WeakSet();\r\n        this.styleMirror = new StyleSheetMirror();\r\n        this.mutationCb = options.mutationCb;\r\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n    }\r\n    attachLinkElement(linkEl, childSn) {\r\n        if ('_cssText' in childSn.attributes)\r\n            this.mutationCb({\r\n                adds: [],\r\n                removes: [],\r\n                texts: [],\r\n                attributes: [\r\n                    {\r\n                        id: childSn.id,\r\n                        attributes: childSn\r\n                            .attributes,\r\n                    },\r\n                ],\r\n            });\r\n        this.trackLinkElement(linkEl);\r\n    }\r\n    trackLinkElement(linkEl) {\r\n        if (this.trackedLinkElements.has(linkEl))\r\n            return;\r\n        this.trackedLinkElements.add(linkEl);\r\n        this.trackStylesheetInLinkElement(linkEl);\r\n    }\r\n    adoptStyleSheets(sheets, hostId) {\r\n        if (sheets.length === 0)\r\n            return;\r\n        const adoptedStyleSheetData = {\r\n            id: hostId,\r\n            styleIds: [],\r\n        };\r\n        const styles = [];\r\n        for (const sheet of sheets) {\r\n            let styleId;\r\n            if (!this.styleMirror.has(sheet)) {\r\n                styleId = this.styleMirror.add(sheet);\r\n                styles.push({\r\n                    styleId,\r\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n                        rule: stringifyRule(r),\r\n                        index,\r\n                    })),\r\n                });\r\n            }\r\n            else\r\n                styleId = this.styleMirror.getId(sheet);\r\n            adoptedStyleSheetData.styleIds.push(styleId);\r\n        }\r\n        if (styles.length > 0)\r\n            adoptedStyleSheetData.styles = styles;\r\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n    }\r\n    reset() {\r\n        this.styleMirror.reset();\r\n        this.trackedLinkElements = new WeakSet();\r\n    }\r\n    trackStylesheetInLinkElement(linkEl) {\r\n    }\r\n}\n\nexport { StylesheetManager };\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i)\n        ++l[cd[i] - 1];\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i)\n            co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) >> 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            st.f = final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        throw 'unexpected EOF';\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                if (!noSt && pos + tl * (clb + 7) > tbts)\n                    break;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                throw 'invalid block type';\n            if (pos > tbts)\n                throw 'unexpected EOF';\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var mxa = lbt + dbt + 18;\n        while (noSt || pos + mxa < tbts) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts)\n                throw 'unexpected EOF';\n            if (!c)\n                throw 'invalid length/literal';\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    throw 'invalid distance';\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts)\n                    throw 'unexpected EOF';\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = pos, st.b = bt;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) >> 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [new u8(0), 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e < s) {\n                // write full block\n                pos = wfblk(w, pos, dat.subarray(i, e));\n            }\n            else {\n                // write final block\n                w[i] = lst;\n                pos = wfblk(w, pos, dat.subarray(i, s));\n            }\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768\n            var imod = i & 32767;\n            // previous index with this value\n            var pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst)\n            pos = wfblk(w, pos, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 5552, l);\n                for (; i < e; ++i)\n                    n += d[i], m += n;\n                n %= 65521, m %= 65521;\n            }\n            a = n, b = m;\n        },\n        d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n    };\n};\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        throw 'invalid zlib data';\n    if (d[1] & 32)\n        throw 'invalid zlib data: preset dictionaries not supported';\n};\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n    if (opts === void 0) { opts = {}; }\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n    var l = str.length;\n    if (!latin1 && typeof TextEncoder != 'undefined')\n        return new TextEncoder().encode(str);\n    var ar = new u8(str.length + (str.length >>> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >>> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n    var r = '';\n    if (!latin1 && typeof TextDecoder != 'undefined')\n        return new TextDecoder().decode(dat);\n    for (var i = 0; i < dat.length;) {\n        var c = dat[i++];\n        if (c < 128 || latin1)\n            r += String.fromCharCode(c);\n        else if (c < 224)\n            r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n        else if (c < 240)\n            r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n        else\n            c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n    }\n    return r;\n}\n\nexport { strFromU8, strToU8, unzlibSync, zlibSync };\n","const MARK = 'v1';\n\nexport { MARK };\n","import { AmplitudeReturn, Config, LogLevel, Logger, ServerZone } from '@amplitude/analytics-types';\n\nexport type Events = string[];\n\nexport interface SessionReplayDestination {\n  events: Events;\n  sequenceId: number;\n  sessionId: number;\n  flushMaxRetries?: number;\n  apiKey?: string;\n  deviceId?: string;\n  sampleRate: number;\n  serverZone?: keyof typeof ServerZone;\n  onComplete: (sessionId: number, sequenceId: number) => Promise<void>;\n}\n\nexport interface SessionReplayDestinationContext extends SessionReplayDestination {\n  attempts: number;\n  timeout: number;\n}\n\nexport enum RecordingStatus {\n  RECORDING = 'recording',\n  SENT = 'sent',\n}\n\nexport interface IDBStoreSequence {\n  events: Events;\n  status: RecordingStatus;\n}\n\nexport interface IDBStoreSession {\n  currentSequenceId: number;\n  sessionSequences: {\n    [sequenceId: number]: IDBStoreSequence;\n  };\n}\n\nexport interface IDBStore {\n  [sessionId: number]: IDBStoreSession;\n}\n\nexport interface SessionReplaySessionIDBStore {\n  getAllSessionDataFromStore(): Promise<IDBStore | undefined>;\n  storeEventsForSession(events: Events, sequenceId: number, sessionId: number): Promise<void>;\n  cleanUpSessionEventsStore(sessionId: number, sequenceId: number): Promise<void>;\n}\n\nexport interface SessionReplayPrivacyConfig {\n  blockSelector?: string | string[];\n}\n\nexport interface SessionReplayConfig extends Config {\n  apiKey: string;\n  loggerProvider: Logger;\n  logLevel: LogLevel;\n  flushMaxRetries: number;\n  sampleRate: number;\n  privacyConfig?: SessionReplayPrivacyConfig;\n  debugMode?: boolean;\n}\n\nexport interface SessionIdentifiers {\n  deviceId?: string;\n  sessionId?: number;\n  sessionReplayId?: string;\n}\n\nexport type SessionReplayOptions = Omit<Partial<SessionReplayConfig & SessionIdentifiers>, 'apiKey'>;\n\nexport interface AmplitudeSessionReplay {\n  init: (apiKey: string, options: SessionReplayOptions) => AmplitudeReturn<void>;\n  setSessionId: (sessionId: number, deviceId?: string) => void;\n  getSessionId: () => number | undefined;\n  getSessionReplayProperties: () => { [key: string]: boolean | string | null };\n  flush: (useRetry: boolean) => Promise<void>;\n  shutdown: () => void;\n}\n\nexport interface SessionReplayTrackDestination {\n  sendEventsList: (destinationData: SessionReplayDestination) => void;\n  flush: (useRetry: boolean) => Promise<void>;\n}\n\nexport interface SessionReplayEventsManager {\n  initialize({\n    sessionId,\n    shouldSendStoredEvents,\n    deviceId,\n  }: {\n    sessionId: number;\n    shouldSendStoredEvents: boolean;\n    deviceId: string;\n  }): Promise<void>;\n  addEvent({ sessionId, event, deviceId }: { sessionId: number; event: string; deviceId: string }): void;\n  sendEvents({ sessionId, deviceId }: { sessionId: number; deviceId: string }): void;\n  resetSequence(): void;\n  flush(useRetry?: boolean): Promise<void>;\n  events: Events;\n}\n","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction promisifyRequest(request) {\n  return new Promise(function (resolve, reject) {\n    // @ts-ignore - file size hacks\n    request.oncomplete = request.onsuccess = function () {\n      return resolve(request.result);\n    }; // @ts-ignore - file size hacks\n\n\n    request.onabort = request.onerror = function () {\n      return reject(request.error);\n    };\n  });\n}\n\nfunction createStore(dbName, storeName) {\n  var request = indexedDB.open(dbName);\n\n  request.onupgradeneeded = function () {\n    return request.result.createObjectStore(storeName);\n  };\n\n  var dbp = promisifyRequest(request);\n  return function (txMode, callback) {\n    return dbp.then(function (db) {\n      return callback(db.transaction(storeName, txMode).objectStore(storeName));\n    });\n  };\n}\n\nvar defaultGetStoreFunc;\n\nfunction defaultGetStore() {\n  if (!defaultGetStoreFunc) {\n    defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n  }\n\n  return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction get(key) {\n  var customStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetStore();\n  return customStore('readonly', function (store) {\n    return promisifyRequest(store.get(key));\n  });\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction set(key, value) {\n  var customStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    store.put(value, key);\n    return promisifyRequest(store.transaction);\n  });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction setMany(entries) {\n  var customStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    entries.forEach(function (entry) {\n      return store.put(entry[1], entry[0]);\n    });\n    return promisifyRequest(store.transaction);\n  });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction getMany(keys) {\n  var customStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetStore();\n  return customStore('readonly', function (store) {\n    return Promise.all(keys.map(function (key) {\n      return promisifyRequest(store.get(key));\n    }));\n  });\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction update(key, updater) {\n  var customStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    return (// Need to create the promise manually.\n      // If I try to chain promises, the transaction closes in browsers\n      // that use a promise polyfill (IE10/11).\n      new Promise(function (resolve, reject) {\n        store.get(key).onsuccess = function () {\n          try {\n            store.put(updater(this.result), key);\n            resolve(promisifyRequest(store.transaction));\n          } catch (err) {\n            reject(err);\n          }\n        };\n      })\n    );\n  });\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction del(key) {\n  var customStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    store.delete(key);\n    return promisifyRequest(store.transaction);\n  });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction delMany(keys) {\n  var customStore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    keys.forEach(function (key) {\n      return store.delete(key);\n    });\n    return promisifyRequest(store.transaction);\n  });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction clear() {\n  var customStore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetStore();\n  return customStore('readwrite', function (store) {\n    store.clear();\n    return promisifyRequest(store.transaction);\n  });\n}\n\nfunction eachCursor(store, callback) {\n  store.openCursor().onsuccess = function () {\n    if (!this.result) return;\n    callback(this.result);\n    this.result.continue();\n  };\n\n  return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction keys() {\n  var customStore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetStore();\n  return customStore('readonly', function (store) {\n    // Fast path for modern browsers\n    if (store.getAllKeys) {\n      return promisifyRequest(store.getAllKeys());\n    }\n\n    var items = [];\n    return eachCursor(store, function (cursor) {\n      return items.push(cursor.key);\n    }).then(function () {\n      return items;\n    });\n  });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction values() {\n  var customStore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetStore();\n  return customStore('readonly', function (store) {\n    // Fast path for modern browsers\n    if (store.getAll) {\n      return promisifyRequest(store.getAll());\n    }\n\n    var items = [];\n    return eachCursor(store, function (cursor) {\n      return items.push(cursor.value);\n    }).then(function () {\n      return items;\n    });\n  });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\n\n\nfunction entries() {\n  var customStore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetStore();\n  return customStore('readonly', function (store) {\n    // Fast path for modern browsers\n    // (although, hopefully we'll get a simpler path some day)\n    if (store.getAll && store.getAllKeys) {\n      return Promise.all([promisifyRequest(store.getAllKeys()), promisifyRequest(store.getAll())]).then(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            keys = _ref2[0],\n            values = _ref2[1];\n\n        return keys.map(function (key, i) {\n          return [key, values[i]];\n        });\n      });\n    }\n\n    var items = [];\n    return customStore('readonly', function (store) {\n      return eachCursor(store, function (cursor) {\n        return items.push([cursor.key, cursor.value]);\n      }).then(function () {\n        return items;\n      });\n    });\n  });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import { strFromU8, zlibSync, strToU8 } from './../../../../ext/fflate/esm/browser.js';\nimport { MARK } from './base.js';\n\nconst pack = (event) => {\r\n    const _e = Object.assign(Object.assign({}, event), { v: MARK });\r\n    return strFromU8(zlibSync(strToU8(JSON.stringify(_e))), true);\r\n};\n\nexport { pack };\n","import { Logger as ILogger } from '@amplitude/analytics-types';\nimport * as IDBKeyVal from 'idb-keyval';\nimport { MAX_IDB_STORAGE_LENGTH, STORAGE_PREFIX, defaultSessionStore } from './constants';\nimport { STORAGE_FAILURE } from './messages';\nimport {\n  SessionReplaySessionIDBStore as AmplitudeSessionReplaySessionIDBStore,\n  Events,\n  IDBStore,\n  IDBStoreSession,\n  RecordingStatus,\n} from './typings/session-replay';\n\nexport class SessionReplaySessionIDBStore implements AmplitudeSessionReplaySessionIDBStore {\n  apiKey: string | undefined;\n  storageKey = '';\n  loggerProvider: ILogger;\n  constructor({ apiKey, loggerProvider }: { apiKey: string; loggerProvider: ILogger }) {\n    this.loggerProvider = loggerProvider;\n    this.storageKey = `${STORAGE_PREFIX}_${apiKey.substring(0, 10)}`;\n  }\n\n  getAllSessionDataFromStore = async () => {\n    try {\n      const storedReplaySessionContexts: IDBStore | undefined = await IDBKeyVal.get(this.storageKey);\n\n      return storedReplaySessionContexts;\n    } catch (e) {\n      this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n    }\n    return undefined;\n  };\n\n  storeEventsForSession = async (events: Events, sequenceId: number, sessionId: number) => {\n    try {\n      await IDBKeyVal.update(this.storageKey, (sessionMap: IDBStore = {}): IDBStore => {\n        const session: IDBStoreSession = sessionMap[sessionId] || { ...defaultSessionStore };\n        session.currentSequenceId = sequenceId;\n\n        const currentSequence = (session.sessionSequences && session.sessionSequences[sequenceId]) || {};\n\n        currentSequence.events = events;\n        currentSequence.status = RecordingStatus.RECORDING;\n\n        return {\n          ...sessionMap,\n          [sessionId]: {\n            ...session,\n            sessionSequences: {\n              ...session.sessionSequences,\n              [sequenceId]: currentSequence,\n            },\n          },\n        };\n      });\n    } catch (e) {\n      this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n    }\n  };\n\n  cleanUpSessionEventsStore = async (sessionId: number, sequenceId: number) => {\n    try {\n      await IDBKeyVal.update(this.storageKey, (sessionMap: IDBStore = {}): IDBStore => {\n        const session: IDBStoreSession = sessionMap[sessionId];\n        const sequenceToUpdate = session?.sessionSequences && session.sessionSequences[sequenceId];\n        if (!sequenceToUpdate) {\n          return sessionMap;\n        }\n\n        sequenceToUpdate.events = [];\n        sequenceToUpdate.status = RecordingStatus.SENT;\n\n        // Delete sent sequences for current session\n        Object.entries(session.sessionSequences).forEach(([storedSeqId, sequence]) => {\n          const numericStoredSeqId = parseInt(storedSeqId, 10);\n          if (sequence.status === RecordingStatus.SENT && sequenceId !== numericStoredSeqId) {\n            delete session.sessionSequences[numericStoredSeqId];\n          }\n        });\n\n        // Delete any sessions that are older than 3 days\n        Object.keys(sessionMap).forEach((sessionId: string) => {\n          const numericSessionId = parseInt(sessionId, 10);\n          if (Date.now() - numericSessionId >= MAX_IDB_STORAGE_LENGTH) {\n            delete sessionMap[numericSessionId];\n          }\n        });\n\n        return sessionMap;\n      });\n    } catch (e) {\n      this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n    }\n  };\n}\n","import { BaseTransport } from '@amplitude/analytics-core';\nimport { Logger as ILogger, ServerZone, Status } from '@amplitude/analytics-types';\nimport {\n  SESSION_REPLAY_EU_URL as SESSION_REPLAY_EU_SERVER_URL,\n  SESSION_REPLAY_SERVER_URL,\n  SESSION_REPLAY_STAGING_URL as SESSION_REPLAY_STAGING_SERVER_URL,\n} from './constants';\nimport { getCurrentUrl } from './helpers';\nimport {\n  MAX_RETRIES_EXCEEDED_MESSAGE,\n  MISSING_API_KEY_MESSAGE,\n  MISSING_DEVICE_ID_MESSAGE,\n  UNEXPECTED_ERROR_MESSAGE,\n  UNEXPECTED_NETWORK_ERROR_MESSAGE,\n  getSuccessMessage,\n} from './messages';\nimport {\n  SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n  SessionReplayDestination,\n  SessionReplayDestinationContext,\n} from './typings/session-replay';\nimport { VERSION } from './version';\n\nexport class SessionReplayTrackDestination implements AmplitudeSessionReplayTrackDestination {\n  loggerProvider: ILogger;\n  storageKey = '';\n  retryTimeout = 1000;\n  private scheduled: ReturnType<typeof setTimeout> | null = null;\n  queue: SessionReplayDestinationContext[] = [];\n\n  constructor({ loggerProvider }: { loggerProvider: ILogger }) {\n    this.loggerProvider = loggerProvider;\n  }\n\n  sendEventsList(destinationData: SessionReplayDestination) {\n    this.addToQueue({\n      ...destinationData,\n      attempts: 0,\n      timeout: 0,\n    });\n  }\n\n  getServerUrl(serverZone?: keyof typeof ServerZone) {\n    if (serverZone === ServerZone.STAGING) {\n      return SESSION_REPLAY_STAGING_SERVER_URL;\n    }\n\n    if (serverZone === ServerZone.EU) {\n      return SESSION_REPLAY_EU_SERVER_URL;\n    }\n\n    return SESSION_REPLAY_SERVER_URL;\n  }\n\n  addToQueue(...list: SessionReplayDestinationContext[]) {\n    const tryable = list.filter((context) => {\n      if (context.attempts < (context.flushMaxRetries || 0)) {\n        context.attempts += 1;\n        return true;\n      }\n      this.completeRequest({\n        context,\n        err: `${MAX_RETRIES_EXCEEDED_MESSAGE}, batch sequence id, ${context.sequenceId}`,\n      });\n      return false;\n    });\n    tryable.forEach((context) => {\n      // Prevent duplicates from being added to the queue\n      if (this.queue.findIndex((qContext) => qContext.sequenceId === context.sequenceId) !== -1) {\n        return;\n      }\n      this.queue = this.queue.concat(context);\n      if (context.timeout === 0) {\n        this.schedule(0);\n        return;\n      }\n\n      setTimeout(() => {\n        context.timeout = 0;\n        this.schedule(0);\n      }, context.timeout);\n    });\n  }\n\n  schedule(timeout: number) {\n    if (this.scheduled) return;\n    this.scheduled = setTimeout(() => {\n      void this.flush(true).then(() => {\n        if (this.queue.length > 0) {\n          this.schedule(timeout);\n        }\n      });\n    }, timeout);\n  }\n\n  async flush(useRetry = false) {\n    const list: SessionReplayDestinationContext[] = [];\n    const later: SessionReplayDestinationContext[] = [];\n    this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n    this.queue = later;\n\n    if (this.scheduled) {\n      clearTimeout(this.scheduled);\n      this.scheduled = null;\n    }\n\n    await Promise.all(list.map((context) => this.send(context, useRetry)));\n  }\n\n  async send(context: SessionReplayDestinationContext, useRetry = true) {\n    const apiKey = context.apiKey;\n    if (!apiKey) {\n      return this.completeRequest({ context, err: MISSING_API_KEY_MESSAGE });\n    }\n    const deviceId = context.deviceId;\n    if (!deviceId) {\n      return this.completeRequest({ context, err: MISSING_DEVICE_ID_MESSAGE });\n    }\n    const url = getCurrentUrl();\n    const version = VERSION;\n    const sampleRate = context.sampleRate;\n    const urlParams = new URLSearchParams({\n      device_id: deviceId,\n      session_id: `${context.sessionId}`,\n      seq_number: `${context.sequenceId}`,\n    });\n\n    const payload = {\n      version: 1,\n      events: context.events,\n    };\n\n    try {\n      const options: RequestInit = {\n        headers: {\n          'Content-Type': 'application/json',\n          Accept: '*/*',\n          Authorization: `Bearer ${apiKey}`,\n          'X-Client-Version': version,\n          'X-Client-Url': url,\n          'X-Client-Sample-Rate': `${sampleRate}`,\n        },\n        body: JSON.stringify(payload),\n        method: 'POST',\n      };\n      const server_url = `${this.getServerUrl(context.serverZone)}?${urlParams.toString()}`;\n      const res = await fetch(server_url, options);\n      if (res === null) {\n        this.completeRequest({ context, err: UNEXPECTED_ERROR_MESSAGE });\n        return;\n      }\n      if (!useRetry) {\n        let responseBody = '';\n        try {\n          responseBody = JSON.stringify(res.body, null, 2);\n        } catch {\n          // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n        }\n        this.completeRequest({ context, success: `${res.status}: ${responseBody}` });\n      } else {\n        this.handleReponse(res.status, context);\n      }\n    } catch (e) {\n      this.completeRequest({ context, err: e as string });\n    }\n  }\n\n  handleReponse(status: number, context: SessionReplayDestinationContext) {\n    const parsedStatus = new BaseTransport().buildStatus(status);\n    switch (parsedStatus) {\n      case Status.Success:\n        this.handleSuccessResponse(context);\n        break;\n      case Status.Failed:\n        this.handleOtherResponse(context);\n        break;\n      default:\n        this.completeRequest({ context, err: UNEXPECTED_NETWORK_ERROR_MESSAGE });\n    }\n  }\n\n  handleSuccessResponse(context: SessionReplayDestinationContext) {\n    this.completeRequest({ context, success: getSuccessMessage(context.sessionId) });\n  }\n\n  handleOtherResponse(context: SessionReplayDestinationContext) {\n    this.addToQueue({\n      ...context,\n      timeout: context.attempts * this.retryTimeout,\n    });\n  }\n\n  completeRequest({\n    context,\n    err,\n    success,\n  }: {\n    context: SessionReplayDestinationContext;\n    err?: string;\n    success?: string;\n  }) {\n    void context.onComplete(context.sessionId, context.sequenceId);\n    if (err) {\n      this.loggerProvider.warn(err);\n    } else if (success) {\n      this.loggerProvider.log(success);\n    }\n  }\n}\n","import { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from './constants';\nimport {\n  SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n  SessionReplaySessionIDBStore as AmplitudeSessionReplayEventsStorage,\n  SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n  Events,\n  IDBStore,\n  RecordingStatus,\n  SessionReplayConfig,\n} from './typings/session-replay';\n\nimport { SessionReplaySessionIDBStore } from './session-idb-store';\nimport { SessionReplayTrackDestination } from './track-destination';\n\nexport class SessionReplayEventsManager implements AmplitudeSessionReplayEventsManager {\n  events: Events = [];\n  currentSequenceId = 0;\n  maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n  interval = MIN_INTERVAL;\n  timeAtLastSend: number | null = null;\n  sessionIDBStore: AmplitudeSessionReplayEventsStorage;\n  trackDestination: AmplitudeSessionReplayTrackDestination;\n  config: SessionReplayConfig;\n\n  constructor({ config }: { config: SessionReplayConfig }) {\n    this.config = config;\n    this.trackDestination = new SessionReplayTrackDestination({ loggerProvider: this.config.loggerProvider });\n    this.sessionIDBStore = new SessionReplaySessionIDBStore({\n      loggerProvider: this.config.loggerProvider,\n      apiKey: this.config.apiKey,\n    });\n  }\n\n  async initialize({\n    sessionId,\n    deviceId,\n    shouldSendStoredEvents = false,\n  }: {\n    sessionId: number;\n    deviceId: string;\n    shouldSendStoredEvents?: boolean;\n  }) {\n    this.timeAtLastSend = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n    const storedReplaySessions = await this.sessionIDBStore.getAllSessionDataFromStore();\n\n    const storedSequencesForSession = storedReplaySessions && storedReplaySessions[sessionId];\n    if (storedReplaySessions && storedSequencesForSession && storedSequencesForSession.sessionSequences) {\n      const storedSeqId = storedSequencesForSession.currentSequenceId;\n      const lastSequence = storedSequencesForSession.sessionSequences[storedSeqId];\n      if (lastSequence && lastSequence.status !== RecordingStatus.RECORDING) {\n        this.currentSequenceId = storedSeqId + 1;\n        this.events = [];\n      } else {\n        // Pick up recording where it was left off in another tab or window\n        this.currentSequenceId = storedSeqId;\n        this.events = lastSequence?.events || [];\n      }\n    }\n    if (shouldSendStoredEvents && storedReplaySessions) {\n      this.sendStoredEvents({ storedReplaySessions, deviceId, sessionId });\n    }\n  }\n\n  sendStoredEvents({\n    storedReplaySessions,\n    sessionId,\n    deviceId,\n  }: {\n    storedReplaySessions: IDBStore;\n    sessionId: number;\n    deviceId: string;\n  }) {\n    for (const storedSessionId in storedReplaySessions) {\n      const storedSequences = storedReplaySessions[storedSessionId].sessionSequences;\n      for (const storedSeqId in storedSequences) {\n        const seq = storedSequences[storedSeqId];\n        const numericSeqId = parseInt(storedSeqId, 10);\n        const numericSessionId = parseInt(storedSessionId, 10);\n        if (numericSessionId === sessionId && numericSeqId === this.currentSequenceId) {\n          continue;\n        }\n\n        if (seq.events && seq.events.length && seq.status === RecordingStatus.RECORDING) {\n          this.sendEventsList({\n            events: seq.events,\n            sequenceId: numericSeqId,\n            sessionId: numericSessionId,\n            deviceId,\n          });\n        }\n      }\n    }\n  }\n\n  resetSequence() {\n    this.events = [];\n    this.currentSequenceId = 0;\n  }\n\n  addEvent({ event, sessionId, deviceId }: { event: string; sessionId: number; deviceId: string }) {\n    const shouldSplit = this.shouldSplitEventsList(event);\n    if (shouldSplit) {\n      this.sendEventsList({\n        events: this.events,\n        sequenceId: this.currentSequenceId,\n        sessionId,\n        deviceId,\n      });\n      this.events = [];\n      this.currentSequenceId++;\n    }\n    this.events.push(event);\n    void this.sessionIDBStore.storeEventsForSession(this.events, this.currentSequenceId, sessionId);\n  }\n\n  /**\n   * Determines whether to send the events list to the backend and start a new\n   * empty events list, based on the size of the list as well as the last time sent\n   * @param nextEventString\n   * @returns boolean\n   */\n  shouldSplitEventsList = (nextEventString: string): boolean => {\n    const sizeOfNextEvent = new Blob([nextEventString]).size;\n    const sizeOfEventsList = new Blob(this.events).size;\n    if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n      return true;\n    }\n    if (this.timeAtLastSend !== null && Date.now() - this.timeAtLastSend > this.interval && this.events.length) {\n      this.interval = Math.min(MAX_INTERVAL, this.interval + MIN_INTERVAL);\n      this.timeAtLastSend = Date.now();\n      return true;\n    }\n    return false;\n  };\n\n  sendEvents({ sessionId, deviceId }: { sessionId: number; deviceId: string }) {\n    if (this.events.length && sessionId) {\n      this.sendEventsList({\n        events: this.events,\n        sequenceId: this.currentSequenceId,\n        sessionId,\n        deviceId,\n      });\n    }\n  }\n\n  sendEventsList({\n    events,\n    sequenceId,\n    sessionId,\n    deviceId,\n  }: {\n    events: string[];\n    sequenceId: number;\n    sessionId: number;\n    deviceId: string;\n  }) {\n    this.trackDestination.sendEventsList({\n      events: events,\n      sequenceId: sequenceId,\n      sessionId: sessionId,\n      flushMaxRetries: this.config.flushMaxRetries,\n      apiKey: this.config.apiKey,\n      deviceId: deviceId,\n      sampleRate: this.config.sampleRate,\n      serverZone: this.config.serverZone,\n      onComplete: this.sessionIDBStore.cleanUpSessionEventsStore.bind(this.sessionIDBStore),\n    });\n  }\n\n  async flush(useRetry = false) {\n    if (this.trackDestination) {\n      return this.trackDestination.flush(useRetry);\n    }\n  }\n}\n","import { Logger as ILogger } from '@amplitude/analytics-types';\nimport { generateSessionReplayId } from './helpers';\nimport { SessionIdentifiers as ISessionIdentifiers, SessionReplayOptions } from './typings/session-replay';\n\nexport class SessionIdentifiers implements ISessionIdentifiers {\n  deviceId?: string | undefined;\n  sessionId?: number | undefined;\n  sessionReplayId?: string | undefined;\n\n  constructor(options: SessionReplayOptions, loggerProvider: ILogger) {\n    this.deviceId = options.deviceId;\n    this.sessionId = options.sessionId;\n\n    if (options.sessionId && options.deviceId) {\n      this.sessionReplayId = generateSessionReplayId(options.sessionId, options.deviceId);\n    } else {\n      loggerProvider.error('Please provide both sessionId and deviceId.');\n    }\n  }\n}\n","import {\n  BrowserClient,\n  BrowserConfig,\n  DestinationPlugin,\n  EnrichmentPlugin,\n  Event,\n  Result,\n} from '@amplitude/analytics-types';\nimport * as sessionReplay from '@amplitude/session-replay-browser';\nimport { SessionReplayOptions } from './typings/session-replay';\nconst ENRICHMENT_PLUGIN_NAME = '@amplitude/plugin-session-replay-enrichment-browser';\n\nclass SessionReplayEnrichmentPlugin implements EnrichmentPlugin {\n  name = ENRICHMENT_PLUGIN_NAME;\n  type = 'enrichment' as const;\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n\n  async setup(_config: BrowserConfig, _client: BrowserClient) {\n    this.config = _config;\n  }\n\n  async execute(event: Event) {\n    // On event, synchronize the session id to the what's on the browserConfig (source of truth)\n    // Choosing not to read from event object here, concerned about offline/delayed events messing up the state stored\n    // in SR.\n    if (this.config.sessionId && this.config.sessionId !== sessionReplay.getSessionId()) {\n      sessionReplay.setSessionId(this.config.sessionId);\n    }\n\n    // Treating config.sessionId as source of truth, if the event's session id doesn't match, the\n    // event is not of the current session (offline/late events). In that case, don't tag the events\n    if (this.config.sessionId && this.config.sessionId === event.session_id) {\n      const sessionRecordingProperties = sessionReplay.getSessionReplayProperties();\n      event.event_properties = {\n        ...event.event_properties,\n        ...sessionRecordingProperties,\n      };\n    }\n    return Promise.resolve(event);\n  }\n}\n\nexport class SessionReplayPlugin implements DestinationPlugin {\n  name = '@amplitude/plugin-session-replay-browser';\n  type = 'destination' as const;\n  // this.client is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  client: BrowserClient;\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: BrowserConfig;\n  options: SessionReplayOptions;\n\n  constructor(options?: SessionReplayOptions) {\n    this.options = { ...options };\n    // The user did not explicitly configure forceSessionTracking to false, default to true.\n    if (this.options.forceSessionTracking !== false) {\n      this.options.forceSessionTracking = true;\n    }\n  }\n\n  async setup(config: BrowserConfig, client?: BrowserClient) {\n    if (!client) {\n      config.loggerProvider.error('SessionReplayPlugin requires v1.9.1+ of the Amplitude SDK.');\n      return;\n    }\n\n    config.loggerProvider.log('Installing @amplitude/plugin-session-replay.');\n\n    this.client = client;\n    this.config = config;\n\n    if (this.options.forceSessionTracking) {\n      if (typeof config.defaultTracking === 'boolean') {\n        if (config.defaultTracking === false) {\n          config.defaultTracking = {\n            pageViews: false,\n            formInteractions: false,\n            fileDownloads: false,\n            sessions: true,\n          };\n        }\n      } else {\n        config.defaultTracking = {\n          ...config.defaultTracking,\n          sessions: true,\n        };\n      }\n    }\n\n    await sessionReplay.init(config.apiKey, {\n      instanceName: this.config.instanceName,\n      deviceId: this.config.deviceId,\n      optOut: this.config.optOut,\n      sessionId: this.config.sessionId,\n      loggerProvider: this.config.loggerProvider,\n      logLevel: this.config.logLevel,\n      flushMaxRetries: this.config.flushMaxRetries,\n      serverZone: this.config.serverZone,\n      sampleRate: this.options.sampleRate,\n      privacyConfig: {\n        blockSelector: this.options.privacyConfig?.blockSelector,\n      },\n      debugMode: this.options.debugMode,\n    }).promise;\n\n    // add enrichment plugin to add session replay properties to events\n    await client.add(new SessionReplayEnrichmentPlugin()).promise;\n  }\n\n  async execute(event: Event): Promise<Result> {\n    return Promise.resolve({\n      event,\n      code: 200,\n      message: 'success',\n    });\n  }\n\n  async flush(): Promise<void> {\n    await sessionReplay.flush(false);\n  }\n\n  async teardown(): Promise<void> {\n    await this.client.remove(ENRICHMENT_PLUGIN_NAME).promise;\n    sessionReplay.shutdown();\n    // the following are initialized in setup() which will always be called first\n    // here we reset them to null to prevent memory leaks\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    this.config = null;\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    this.client = null;\n  }\n\n  getSessionReplayProperties() {\n    return sessionReplay.getSessionReplayProperties();\n  }\n}\n\nexport const sessionReplayPlugin: (options?: SessionReplayOptions) => DestinationPlugin = (\n  options?: SessionReplayOptions,\n) => {\n  return new SessionReplayPlugin(options);\n};\n","import { debugWrapper } from '@amplitude/analytics-core';\nimport { LogConfig } from '@amplitude/analytics-types';\nimport { getDefaultConfig } from './config';\nimport { SessionReplay } from './session-replay';\nimport { AmplitudeSessionReplay } from './typings/session-replay';\n\nexport const getLogConfig = (sessionReplay: SessionReplay) => (): LogConfig => {\n  const { config } = sessionReplay;\n  const { loggerProvider: logger, logLevel } = config || getDefaultConfig();\n  return {\n    logger,\n    logLevel,\n  };\n};\n\nconst createInstance: () => AmplitudeSessionReplay = () => {\n  const sessionReplay = new SessionReplay();\n  return {\n    init: debugWrapper(sessionReplay.init.bind(sessionReplay), 'init', getLogConfig(sessionReplay)),\n    setSessionId: debugWrapper(\n      sessionReplay.setSessionId.bind(sessionReplay),\n      'setSessionId',\n      getLogConfig(sessionReplay),\n    ),\n    getSessionId: debugWrapper(\n      sessionReplay.getSessionId.bind(sessionReplay),\n      'getSessionId',\n      getLogConfig(sessionReplay),\n    ),\n    getSessionReplayProperties: debugWrapper(\n      sessionReplay.getSessionReplayProperties.bind(sessionReplay),\n      'getSessionReplayProperties',\n      getLogConfig(sessionReplay),\n    ),\n    flush: debugWrapper(sessionReplay.flush.bind(sessionReplay), 'flush', getLogConfig(sessionReplay)),\n    shutdown: debugWrapper(sessionReplay.shutdown.bind(sessionReplay), 'shutdown', getLogConfig(sessionReplay)),\n  };\n};\n\nexport default createInstance();\n","import type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  /^Cannot redefine property: googletag$/,\n];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*\\/healthcheck$/,\n  /^.*\\/healthy$/,\n  /^.*\\/live$/,\n  /^.*\\/ready$/,\n  /^.*\\/heartbeat$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n  disableTransactionDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options: Partial<InboundFiltersOptions> = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const InboundFilters = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  inboundFiltersIntegration,\n) as IntegrationClass<Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }> & {\n  new (\n    options?: Partial<{\n      allowUrls: Array<string | RegExp>;\n      denyUrls: Array<string | RegExp>;\n      ignoreErrors: Array<string | RegExp>;\n      ignoreTransactions: Array<string | RegExp>;\n      ignoreInternal: boolean;\n      disableErrorDefaults: boolean;\n      disableTransactionDefaults: boolean;\n    }>,\n  ): Integration;\n};\n\nfunction _mergeOptions(\n  internalOptions: Partial<InboundFiltersOptions> = {},\n  clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (DEBUG_BUILD && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n","import type { Client, Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../exports';\nimport { convertIntegrationFnToClass, defineIntegration } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n          const originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const FunctionToString = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  functionToStringIntegration,\n) as IntegrationClass<Integration & { setupOnce: () => void }>;\n\n// eslint-disable-next-line deprecation/deprecation\nexport type FunctionToString = typeof FunctionToString;\n","import type { BrowserOptions } from '@sentry/browser';\nimport { init as browserInit } from '@sentry/browser';\nimport { applySdkMetadata } from '@sentry/core';\n\n/**\n * Inits the React SDK\n */\nexport function init(options: BrowserOptions): void {\n  const opts = {\n    ...options,\n  };\n\n  applySdkMetadata(opts, 'react');\n\n  browserInit(opts);\n}\n","import type { Options } from '@sentry/types';\nimport { SDK_VERSION } from '../version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { getClient } from '@sentry/core';\nimport type {\n  Event,\n  EventHint,\n  Exception,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  extractExceptionKeysForMessage,\n  isDOMError,\n  isDOMException,\n  isError,\n  isErrorEvent,\n  isEvent,\n  isParameterizedString,\n  isPlainObject,\n  normalizeToSize,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception: Exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n  stackParser: StackParser,\n  exception: Record<string, unknown>,\n  syntheticException?: Error,\n  isUnhandledRejection?: boolean,\n): Event {\n  const client = getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  const event: Event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        },\n      ],\n    },\n    extra: {\n      __serialized__: normalizeToSize(exception, normalizeDepth),\n    },\n  };\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n  stackParser: StackParser,\n  ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const popSize = getPopSize(ex);\n\n  try {\n    return stackParser(stacktrace, popSize);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n  if (ex) {\n    if (typeof ex.framesToPop === 'number') {\n      return ex.framesToPop;\n    }\n\n    if (reactMinifiedRegexp.test(ex.message)) {\n      return 1;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n  const message = ex && ex.message;\n  if (!message) {\n    return 'No error message';\n  }\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n  stackParser: StackParser,\n  exception: unknown,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n  isUnhandledRejection?: boolean,\n): Event {\n  let event: Event;\n\n  if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception as ErrorEvent;\n    return eventFromError(stackParser, errorEvent.error as Error);\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n    const domException = exception as DOMException;\n\n    if ('stack' in (exception as Error)) {\n      event = eventFromError(stackParser, exception as Error);\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception as Record<string, unknown>;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception: Record<string, unknown>,\n  { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: Prototype | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n","import type { browserTracingIntegration } from '@sentry-internal/tracing';\nimport { BrowserTracing } from '@sentry-internal/tracing';\nimport { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Integration, Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n  GLOBAL_OBJ,\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  addNonEnumerableProperty,\n  getOriginalFunction,\n  markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n  fn: WrappedFunction,\n  options: {\n    mechanism?: Mechanism;\n  } = {},\n  before?: WrappedFunction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      if (typeof wrapper === 'function') {\n        return wrapper;\n      } else {\n        // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n        // that something messed with it. In that case we want to return the originally passed function.\n        return fn;\n      }\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped: WrappedFunction = function (this: unknown): void {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get(): string {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n *\n * @deprecated This type will be removed in the next major version of the Sentry SDK. `showReportDialog` will still be around, however the `eventId` option will now be required.\n */\nexport interface ReportDialogOptions {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n  eventId?: string;\n  dsn?: DsnLike;\n  user?: {\n    email?: string;\n    name?: string;\n  };\n  lang?: string;\n  title?: string;\n  subtitle?: string;\n  subtitle2?: string;\n  labelName?: string;\n  labelEmail?: string;\n  labelComments?: string;\n  labelClose?: string;\n  labelSubmit?: string;\n  errorGeneric?: string;\n  errorFormEntry?: string;\n  successMessage?: string;\n  /** Callback after reportDialog showed up */\n  onLoad?(this: void): void;\n  /** Callback after reportDialog closed */\n  onClose?(this: void): void;\n}\n\n/**\n * This is a slim shim of `browserTracingIntegration` for the CDN bundles.\n * Since the actual functional integration uses a different code from `BrowserTracing`,\n * we want to avoid shipping both of them in the CDN bundles, as that would blow up the size.\n * Instead, we provide a functional integration with the same API, but the old implementation.\n * This means that it's not possible to register custom routing instrumentation, but that's OK for now.\n * We also don't expose the utilities for this anyhow in the CDN bundles.\n * For users that need custom routing in CDN bundles, they have to continue using `new BrowserTracing()` until v8.\n */\nexport function bundleBrowserTracingIntegration(\n  options: Parameters<typeof browserTracingIntegration>[0] = {},\n): Integration {\n  // Migrate some options from the old integration to the new one\n  // eslint-disable-next-line deprecation/deprecation\n  const opts: ConstructorParameters<typeof BrowserTracing>[0] = options;\n\n  if (typeof options.markBackgroundSpan === 'boolean') {\n    opts.markBackgroundTransactions = options.markBackgroundSpan;\n  }\n\n  if (typeof options.instrumentPageLoad === 'boolean') {\n    opts.startTransactionOnPageLoad = options.instrumentPageLoad;\n  }\n\n  if (typeof options.instrumentNavigation === 'boolean') {\n    opts.startTransactionOnLocationChange = options.instrumentNavigation;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return new BrowserTracing(opts);\n}\n","import type { Scope } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport { BaseClient } from '@sentry/core';\nimport type {\n  BrowserClientProfilingOptions,\n  BrowserClientReplayOptions,\n  ClientOptions,\n  Event,\n  EventHint,\n  Options,\n  ParameterizedString,\n  Severity,\n  SeverityLevel,\n  UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions<BrowserTransportOptions> &\n  BrowserClientReplayOptions &\n  BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient<BrowserClientOptions> {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: BrowserClientOptions) {\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(options, 'browser', ['browser'], sdkSource);\n\n    super(options);\n\n    if (options.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   */\n  public captureUserFeedback(feedback: UserFeedback): void {\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n  private _flushOutcomes(): void {\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n  feedback: UserFeedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }: {\n    metadata: SdkMetadata | undefined;\n    tunnel: string | undefined;\n    dsn: DsnComponents | undefined;\n  },\n): EventEnvelope {\n  const headers: EventEnvelope[0] = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n  const feedbackHeaders: UserFeedbackItem[0] = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        const handlerData: HandlerDataConsole = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n","/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n  return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","/* eslint-disable max-lines */\nimport { addBreadcrumb, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n  Client,\n  Event as SentryEvent,\n  HandlerDataConsole,\n  HandlerDataDom,\n  HandlerDataFetch,\n  HandlerDataHistory,\n  HandlerDataXhr,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n} from '@sentry/types';\nimport type {\n  Breadcrumb,\n  FetchBreadcrumbData,\n  FetchBreadcrumbHint,\n  XhrBreadcrumbData,\n  XhrBreadcrumbHint,\n} from '@sentry/types/build/types/breadcrumb';\nimport {\n  SENTRY_XHR_DATA_KEY,\n  addClickKeypressInstrumentationHandler,\n  addConsoleInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  getComponentName,\n  getEventDescription,\n  htmlTreeAsString,\n  logger,\n  parseUrl,\n  safeJoin,\n  severityLevelFromString,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n  console: boolean;\n  dom:\n    | boolean\n    | {\n        serializeAttribute?: string | string[];\n        maxStringLength?: number;\n      };\n  fetch: boolean;\n  history: boolean;\n  sentry: boolean;\n  xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry && client.on) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Default Breadcrumbs instrumentations\n *\n * @deprecated Use `breadcrumbsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration) as IntegrationClass<\n  Integration & { setup: (client: Client) => void }\n> & {\n  new (\n    options?: Partial<{\n      console: boolean;\n      dom:\n        | boolean\n        | {\n            serializeAttribute?: string | string[];\n            maxStringLength?: number;\n          };\n      fetch: boolean;\n      history: boolean;\n      sentry: boolean;\n      xhr: boolean;\n    }>,\n  ): Integration;\n};\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n  return function addSentryBreadcrumb(event: SentryEvent): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client: Client,\n  dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n  return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event as Event | Node;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb: Breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n  return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n  return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data: XhrBreadcrumbData = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint: XhrBreadcrumbHint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    addBreadcrumb(\n      {\n        category: 'xhr',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n  return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    if (handlerData.error) {\n      const data: FetchBreadcrumbData = handlerData.fetchData;\n      const hint: FetchBreadcrumbHint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          level: 'error',\n          type: 'http',\n        },\n        hint,\n      );\n    } else {\n      const response = handlerData.response as Response | undefined;\n      const data: FetchBreadcrumbData = {\n        ...handlerData.fetchData,\n        status_code: response && response.status,\n      };\n      const hint: FetchBreadcrumbHint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          type: 'http',\n        },\n        hint,\n      );\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n  return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from: string | undefined = handlerData.from;\n    let to: string | undefined = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom || !parsedFrom.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n  return !!event && !!(event as Record<string, unknown>).target;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Exception, Integration, IntegrationClass, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent: Event | undefined;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration) as IntegrationClass<\n  Integration & { processEvent: (event: Event) => Event }\n>;\n\nfunction _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { captureEvent, convertIntegrationFnToClass, defineIntegration, getClient } from '@sentry/core';\nimport type {\n  Client,\n  Event,\n  Integration,\n  IntegrationClass,\n  IntegrationFn,\n  Primitive,\n  StackParser,\n} from '@sentry/types';\nimport {\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  getLocationHref,\n  isErrorEvent,\n  isPrimitive,\n  isString,\n  logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial<GlobalHandlersIntegrations> = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\n/**\n * Global handlers.\n * @deprecated Use `globalHandlersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const GlobalHandlers = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  globalHandlersIntegration,\n) as IntegrationClass<Integration & { setup: (client: Client) => void }> & {\n  new (options?: Partial<GlobalHandlersIntegrations>): Integration;\n};\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event =\n      error === undefined && isString(msg)\n        ? _eventFromIncompleteOnError(msg, url, line, column)\n        : _enhanceEventWithInitialFrame(\n            eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n            url,\n            line,\n            column,\n          );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e as unknown);\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const e = error as any;\n\n  // dig the object of the rejection out of known event types\n  try {\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in e) {\n      return e.reason;\n    }\n\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    else if ('detail' in e && 'reason' in e.detail) {\n      return e.detail.reason;\n    }\n  } catch {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg: any, url: any, line: any, column: any): Event {\n  const ERROR_TYPES_RE =\n    /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n  // If 'message' is ErrorEvent, get real message from inside\n  let message = isErrorEvent(msg) ? msg.message : msg;\n  let name = 'Error';\n\n  const groups = message.match(ERROR_TYPES_RE);\n  if (groups) {\n    name = groups[1];\n    message = groups[2];\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: name,\n          value: message,\n        },\n      ],\n    },\n  };\n\n  return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: '?',\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n  const client = getClient<BrowserClient>();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Event, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\n\nimport { WINDOW } from '../helpers';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst _httpContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...(event.request && event.request.headers),\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = { ...event.request, ...(url && { url }), headers };\n\n      event.request = request;\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const httpContextIntegration = defineIntegration(_httpContextIntegration);\n\n/**\n * HttpContext integration collects information about HTTP request headers.\n * @deprecated Use `httpContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration) as IntegrationClass<\n  Integration & { preprocessEvent: (event: Event) => void }\n>;\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  maxValueLimit: number = 250,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException as ExtendedError,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Client, Event, EventHint, Integration, IntegrationClass, IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder';\n\ninterface LinkedErrorsOptions {\n  key?: string;\n  limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Aggregrate linked errors in an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration) as IntegrationClass<\n  Integration & { preprocessEvent: (event: Event, hint: EventHint, client: Client) => void }\n> & { new (options?: { key?: string; limit?: number }): Integration };\n","import { convertIntegrationFnToClass, defineIntegration } from '@sentry/core';\nimport type { Integration, IntegrationClass, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface TryCatchOptions {\n  setTimeout: boolean;\n  setInterval: boolean;\n  requestAnimationFrame: boolean;\n  XMLHttpRequest: boolean;\n  eventTarget: boolean | string[];\n}\n\nconst _browserApiErrorsIntegration = ((options: Partial<TryCatchOptions> = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n * @deprecated Use `browserApiErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport const TryCatch = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  browserApiErrorsIntegration,\n) as IntegrationClass<Integration> & {\n  new (options?: {\n    setTimeout: boolean;\n    setInterval: boolean;\n    requestAnimationFrame: boolean;\n    XMLHttpRequest: boolean;\n    eventTarget: boolean | string[];\n  }): Integration;\n};\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, ...args: any[]): number {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: any, callback: () => void): () => void {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function (this: XMLHttpRequest, ...args: any[]): void {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        fill(xhr, prop, function (original: WrappedFunction): () => any {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before TryCatch, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target: string): void {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW as { [key: string]: any };\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original: VoidFunction,): (\n    eventName: string,\n    fn: EventListenerObject,\n    options?: boolean | AddEventListenerOptions,\n  ) => void {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this: any,\n      eventName: string,\n      fn: EventListenerObject,\n      options?: boolean | AddEventListenerOptions,\n    ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn as any as WrappedFunction, {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener: () => void,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | EventListenerOptions,\n      ): () => void {\n        /**\n         * There are 2 possible scenarios here:\n         *\n         * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n         * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n         * as a pass-through, and call original `removeEventListener` with it.\n         *\n         * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n         * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n         * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n         * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n         * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n         *\n         * When someone adds a handler prior to initialization, and then do it again, but after,\n         * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n         * to get rid of the initial handler and it'd stick there forever.\n         */\n        const wrappedEventHandler = fn as unknown as WrappedFunction;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n      };\n    },\n  );\n}\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n  const frame: StackFrame = {\n    filename,\n    function: func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n  const parts = chromeRegex.exec(line);\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n  const parts = geckoREgex.exec(line);\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n  const parts = winjsRegex.exec(line);\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: Array<PromiseLike<T>>;\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n  const buffer: Array<PromiseLike<T>> = [];\n\n  function isReady(): boolean {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): PromiseLike<T> {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n","import { isNativeFetch, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\nlet cachedFetchImpl: FetchImpl | undefined = undefined;\n\nexport type FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nexport function getNativeFetchImplementation(): FetchImpl {\n  if (cachedFetchImpl) {\n    return cachedFetchImpl;\n  }\n\n  /* eslint-disable @typescript-eslint/unbound-method */\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFetch(WINDOW.fetch)) {\n    return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n  }\n\n  const document = WINDOW.document;\n  let fetchImpl = WINDOW.fetch;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow.fetch) {\n        fetchImpl = contentWindow.fetch;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n    }\n  }\n\n  return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n  /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nexport function clearCachedFetchImplementation(): void {\n  cachedFetchImpl = undefined;\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\nimport type { FetchImpl } from './utils';\nimport { clearCachedFetchImplementation, getNativeFetchImplementation } from './utils';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n  options: BrowserTransportOptions,\n  nativeFetch: FetchImpl = getNativeFetchImplementation(),\n): Transport {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions: RequestInit = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedFetchImplementation();\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nexport function makeXHRTransport(options: BrowserTransportOptions): Transport {\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    return new SyncPromise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      xhr.onerror = reject;\n\n      xhr.onreadystatechange = (): void => {\n        if (xhr.readyState === XHR_READYSTATE_DONE) {\n          resolve({\n            statusCode: xhr.status,\n            headers: {\n              'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n              'retry-after': xhr.getResponseHeader('Retry-After'),\n            },\n          });\n        }\n      };\n\n      xhr.open('POST', options.url);\n\n      for (const header in options.headers) {\n        if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n          xhr.setRequestHeader(header, options.headers[header]);\n        }\n      }\n\n      xhr.send(request.body);\n    });\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import type { Hub } from '@sentry/core';\nimport { functionToStringIntegration, inboundFiltersIntegration } from '@sentry/core';\nimport {\n  captureSession,\n  getClient,\n  getCurrentHub,\n  getIntegrationsToSetup,\n  getReportDialogEndpoint,\n  initAndBind,\n  startSession,\n} from '@sentry/core';\nimport type { Integration, Options, UserFeedback } from '@sentry/types';\nimport {\n  addHistoryInstrumentationHandler,\n  logger,\n  stackParserFromStackParserOptions,\n  supportsFetch,\n} from '@sentry/utils';\n\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { ReportDialogOptions } from './helpers';\nimport { WINDOW, wrap as internalWrap } from './helpers';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs';\nimport { dedupeIntegration } from './integrations/dedupe';\nimport { globalHandlersIntegration } from './integrations/globalhandlers';\nimport { httpContextIntegration } from './integrations/httpcontext';\nimport { linkedErrorsIntegration } from './integrations/linkederrors';\nimport { browserApiErrorsIntegration } from './integrations/trycatch';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nexport const defaultIntegrations = [\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  browserApiErrorsIntegration(),\n  breadcrumbsIntegration(),\n  globalHandlersIntegration(),\n  linkedErrorsIntegration(),\n  dedupeIntegration(),\n  httpContextIntegration(),\n];\n\n/** Get the default integrations for the browser SDK. */\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n  // We return a copy of the defaultIntegrations here to avoid mutating this\n  return [\n    // eslint-disable-next-line deprecation/deprecation\n    ...defaultIntegrations,\n  ];\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = getDefaultIntegrations(options);\n  }\n  if (options.release === undefined) {\n    // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n    if (typeof __SENTRY_RELEASE__ === 'string') {\n      options.release = __SENTRY_RELEASE__;\n    }\n\n    // This supports the variable that sentry-webpack-plugin injects\n    if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n      options.release = WINDOW.SENTRY_RELEASE.id;\n    }\n  }\n  if (options.autoSessionTracking === undefined) {\n    options.autoSessionTracking = true;\n  }\n  if (options.sendClientReports === undefined) {\n    options.sendClientReports = true;\n  }\n\n  const clientOptions: BrowserClientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n  };\n\n  initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n}\n\ntype NewReportDialogOptions = ReportDialogOptions & { eventId: string }; // eslint-disable-line\n\ninterface ShowReportDialogFunction {\n  /**\n   * Present the user with a report dialog.\n   *\n   * @param options Everything is optional, we try to fetch all info need from the global scope.\n   */\n  (options: NewReportDialogOptions): void;\n\n  /**\n   * Present the user with a report dialog.\n   *\n   * @param options Everything is optional, we try to fetch all info need from the global scope.\n   *\n   * @deprecated Please always pass an `options` argument with `eventId`. The `hub` argument will not be used in the next version of the SDK.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  (options?: ReportDialogOptions, hub?: Hub): void;\n}\n\nexport const showReportDialog: ShowReportDialogFunction = (\n  // eslint-disable-next-line deprecation/deprecation\n  options: ReportDialogOptions = {},\n  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub = getCurrentHub(),\n) => {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { client, scope } = hub.getStackTop();\n  const dsn = options.dsn || (client && client.getDsn());\n  if (!dsn) {\n    DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  if (!options.eventId) {\n    // eslint-disable-next-line deprecation/deprecation\n    options.eventId = hub.lastEventId();\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const { onClose } = options;\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event: MessageEvent): void => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n  callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n  return internalWrap(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n  if (typeof WINDOW.document === 'undefined') {\n    DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSession({ ignoreDuration: true });\n  captureSession();\n\n  // We want to create a session for every navigation as well\n  addHistoryInstrumentationHandler(({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (from !== undefined && from !== to) {\n      startSession({ ignoreDuration: true });\n      captureSession();\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n  const client = getClient<BrowserClient>();\n  if (client) {\n    client.captureUserFeedback(feedback);\n  }\n}\n","import type { Options } from '@sentry/types';\n\nimport { getClient } from '../exports';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(\n  maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,\n): boolean {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const client = getClient();\n  const options = maybeOptions || (client && client.getOptions());\n  return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n","import type { Scope, Span, SpanTimeInput, StartSpanOptions, TransactionContext } from '@sentry/types';\n\nimport { addNonEnumerableProperty, dropUndefinedKeys, logger, tracingContextFromHeaders } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '.';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getCurrentScope, withScope } from '../exports';\nimport type { Hub } from '../hub';\nimport { runWithAsyncContext } from '../hub';\nimport { getIsolationScope } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport type { Scope as ScopeClass } from '../scope';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n *\n * @deprecated Use `startSpan` instead.\n */\nexport function trace<T>(\n  context: TransactionContext,\n  callback: (span?: Span) => T,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onError: (error: unknown, span?: Span) => void = () => {},\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  afterFinish: () => void = () => {},\n): T {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const scope = getCurrentScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const parentSpan = scope.getSpan();\n\n  const spanContext = normalizeContext(context);\n  const activeSpan = createChildSpanOrTransaction(hub, {\n    parentSpan,\n    spanContext,\n    forceTransaction: false,\n    scope,\n  });\n\n  // eslint-disable-next-line deprecation/deprecation\n  scope.setSpan(activeSpan);\n\n  return handleCallbackErrors(\n    () => callback(activeSpan),\n    error => {\n      activeSpan && activeSpan.setStatus('internal_error');\n      onError(error, activeSpan);\n    },\n    () => {\n      activeSpan && activeSpan.end();\n      // eslint-disable-next-line deprecation/deprecation\n      scope.setSpan(parentSpan);\n      afterFinish();\n    },\n  );\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: StartSpanOptions, callback: (span: Span | undefined) => T): T {\n  const spanContext = normalizeContext(context);\n\n  return runWithAsyncContext(() => {\n    return withScope(context.scope, scope => {\n      // eslint-disable-next-line deprecation/deprecation\n      const hub = getCurrentHub();\n      // eslint-disable-next-line deprecation/deprecation\n      const parentSpan = scope.getSpan();\n\n      const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? undefined\n        : createChildSpanOrTransaction(hub, {\n            parentSpan,\n            spanContext,\n            forceTransaction: context.forceTransaction,\n            scope,\n          });\n\n      return handleCallbackErrors(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet\n          if (activeSpan) {\n            const { status } = spanToJSON(activeSpan);\n            if (!status || status === 'ok') {\n              activeSpan.setStatus('internal_error');\n            }\n          }\n        },\n        () => activeSpan && activeSpan.end(),\n      );\n    });\n  });\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n  context: StartSpanOptions,\n  callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n  const spanContext = normalizeContext(context);\n\n  return runWithAsyncContext(() => {\n    return withScope(context.scope, scope => {\n      // eslint-disable-next-line deprecation/deprecation\n      const hub = getCurrentHub();\n      // eslint-disable-next-line deprecation/deprecation\n      const parentSpan = scope.getSpan();\n\n      const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? undefined\n        : createChildSpanOrTransaction(hub, {\n            parentSpan,\n            spanContext,\n            forceTransaction: context.forceTransaction,\n            scope,\n          });\n\n      function finishAndSetSpan(): void {\n        activeSpan && activeSpan.end();\n      }\n\n      return handleCallbackErrors(\n        () => callback(activeSpan, finishAndSetSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          if (activeSpan && activeSpan.isRecording()) {\n            const { status } = spanToJSON(activeSpan);\n            if (!status || status === 'ok') {\n              activeSpan.setStatus('internal_error');\n            }\n          }\n        },\n      );\n    });\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: StartSpanOptions): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const spanContext = normalizeContext(context);\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  const parentSpan = context.scope\n    ? // eslint-disable-next-line deprecation/deprecation\n      context.scope.getSpan()\n    : getActiveSpan();\n\n  const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n\n  if (shouldSkipSpan) {\n    return undefined;\n  }\n\n  const scope = context.scope || getCurrentScope();\n\n  // Even though we don't actually want to make this span active on the current scope,\n  // we need to make it active on a temporary scope that we use for event processing\n  // as otherwise, it won't pick the correct span for the event when processing it\n  const temporaryScope = (scope as ScopeClass).clone();\n\n  return createChildSpanOrTransaction(hub, {\n    parentSpan,\n    spanContext,\n    forceTransaction: context.forceTransaction,\n    scope: temporaryScope,\n  });\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentScope().getSpan();\n}\n\ninterface ContinueTrace {\n  /**\n   * Continue a trace from `sentry-trace` and `baggage` values.\n   * These values can be obtained from incoming request headers,\n   * or in the browser from `<meta name=\"sentry-trace\">` and `<meta name=\"baggage\">` HTML tags.\n   *\n   * @deprecated Use the version of this function taking a callback as second parameter instead:\n   *\n   * ```\n   * Sentry.continueTrace(sentryTrace: '...', baggage: '...' }, () => {\n   *    // ...\n   * })\n   * ```\n   *\n   */\n  ({\n    sentryTrace,\n    baggage,\n  }: {\n    // eslint-disable-next-line deprecation/deprecation\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    // eslint-disable-next-line deprecation/deprecation\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  }): Partial<TransactionContext>;\n\n  /**\n   * Continue a trace from `sentry-trace` and `baggage` values.\n   * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n   * and `<meta name=\"baggage\">` HTML tags.\n   *\n   * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n   * be attached to the incoming trace.\n   *\n   * Deprecation notice: In the next major version of the SDK the provided callback will not receive a transaction\n   * context argument.\n   */\n  <V>(\n    {\n      sentryTrace,\n      baggage,\n    }: {\n      // eslint-disable-next-line deprecation/deprecation\n      sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n      // eslint-disable-next-line deprecation/deprecation\n      baggage: Parameters<typeof tracingContextFromHeaders>[1];\n    },\n    // TODO(v8): Remove parameter from this callback.\n    callback: (transactionContext: Partial<TransactionContext>) => V,\n  ): V;\n}\n\nexport const continueTrace: ContinueTrace = <V>(\n  {\n    sentryTrace,\n    baggage,\n  }: {\n    // eslint-disable-next-line deprecation/deprecation\n    sentryTrace: Parameters<typeof tracingContextFromHeaders>[0];\n    // eslint-disable-next-line deprecation/deprecation\n    baggage: Parameters<typeof tracingContextFromHeaders>[1];\n  },\n  callback?: (transactionContext: Partial<TransactionContext>) => V,\n): V | Partial<TransactionContext> => {\n  // TODO(v8): Change this function so it doesn't do anything besides setting the propagation context on the current scope:\n  /*\n    return withScope((scope) => {\n      const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n      scope.setPropagationContext(propagationContext);\n      return callback();\n    })\n  */\n\n  const currentScope = getCurrentScope();\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n    sentryTrace,\n    baggage,\n  );\n\n  currentScope.setPropagationContext(propagationContext);\n\n  if (DEBUG_BUILD && traceparentData) {\n    logger.log(`[Tracing] Continuing trace ${traceparentData.traceId}.`);\n  }\n\n  const transactionContext: Partial<TransactionContext> = {\n    ...traceparentData,\n    metadata: dropUndefinedKeys({\n      dynamicSamplingContext,\n    }),\n  };\n\n  if (!callback) {\n    return transactionContext;\n  }\n\n  return runWithAsyncContext(() => {\n    return callback(transactionContext);\n  });\n};\n\nfunction createChildSpanOrTransaction(\n  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub,\n  {\n    parentSpan,\n    spanContext,\n    forceTransaction,\n    scope,\n  }: {\n    parentSpan: Span | undefined;\n    spanContext: TransactionContext;\n    forceTransaction?: boolean;\n    scope: Scope;\n  },\n): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const isolationScope = getIsolationScope();\n\n  let span: Span | undefined;\n  if (parentSpan && !forceTransaction) {\n    // eslint-disable-next-line deprecation/deprecation\n    span = parentSpan.startChild(spanContext);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const sampled = spanIsSampled(parentSpan);\n\n    // eslint-disable-next-line deprecation/deprecation\n    span = hub.startTransaction({\n      traceId,\n      parentSpanId,\n      parentSampled: sampled,\n      ...spanContext,\n      metadata: {\n        dynamicSamplingContext: dsc,\n        // eslint-disable-next-line deprecation/deprecation\n        ...spanContext.metadata,\n      },\n    });\n  } else {\n    const { traceId, dsc, parentSpanId, sampled } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    // eslint-disable-next-line deprecation/deprecation\n    span = hub.startTransaction({\n      traceId,\n      parentSpanId,\n      parentSampled: sampled,\n      ...spanContext,\n      metadata: {\n        dynamicSamplingContext: dsc,\n        // eslint-disable-next-line deprecation/deprecation\n        ...spanContext.metadata,\n      },\n    });\n  }\n\n  // We always set this as active span on the scope\n  // In the case of this being an inactive span, we ensure to pass a detached scope in here in the first place\n  // But by having this here, we can ensure that the lookup through `getCapturedScopesOnSpan` results in the correct scope & span combo\n  // eslint-disable-next-line deprecation/deprecation\n  scope.setSpan(span);\n\n  setCapturedScopesOnSpan(span, scope, isolationScope);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to TransactionContext.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): TransactionContext {\n  if (context.startTime) {\n    const ctx: TransactionContext & { startTime?: SpanTimeInput } = { ...context };\n    ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return context;\n}\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n  [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n  [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: Scope;\n};\n\nfunction setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n  return {\n    scope: (span as SpanWithScopes)[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: (span as SpanWithScopes)[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n  };\n}\n","import type { MeasurementUnit, Span } from '@sentry/types';\nimport type { MetricSummary } from '@sentry/types';\nimport type { Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getActiveSpan } from '../tracing';\nimport type { MetricType } from './types';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\ntype MetricSummaryStorage = Map<string, [string, MetricSummary]>;\n\nlet SPAN_METRIC_SUMMARY: WeakMap<Span, MetricSummaryStorage> | undefined;\n\nfunction getMetricStorageForSpan(span: Span): MetricSummaryStorage | undefined {\n  return SPAN_METRIC_SUMMARY ? SPAN_METRIC_SUMMARY.get(span) : undefined;\n}\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nexport function getMetricSummaryJsonForSpan(span: Span): Record<string, Array<MetricSummary>> | undefined {\n  const storage = getMetricStorageForSpan(span);\n\n  if (!storage) {\n    return undefined;\n  }\n  const output: Record<string, Array<MetricSummary>> = {};\n\n  for (const [, [exportKey, summary]] of storage) {\n    if (!output[exportKey]) {\n      output[exportKey] = [];\n    }\n\n    output[exportKey].push(dropUndefinedKeys(summary));\n  }\n\n  return output;\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nexport function updateMetricSummaryOnActiveSpan(\n  metricType: MetricType,\n  sanitizedName: string,\n  value: number,\n  unit: MeasurementUnit,\n  tags: Record<string, Primitive>,\n  bucketKey: string,\n): void {\n  const span = getActiveSpan();\n  if (span) {\n    const storage = getMetricStorageForSpan(span) || new Map<string, [string, MetricSummary]>();\n\n    const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n    const bucketItem = storage.get(bucketKey);\n\n    if (bucketItem) {\n      const [, summary] = bucketItem;\n      storage.set(bucketKey, [\n        exportKey,\n        {\n          min: Math.min(summary.min, value),\n          max: Math.max(summary.max, value),\n          count: (summary.count += 1),\n          sum: (summary.sum += value),\n          tags: summary.tags,\n        },\n      ]);\n    } else {\n      storage.set(bucketKey, [\n        exportKey,\n        {\n          min: value,\n          max: value,\n          count: 1,\n          sum: value,\n          tags,\n        },\n      ]);\n    }\n\n    if (!SPAN_METRIC_SUMMARY) {\n      SPAN_METRIC_SUMMARY = new WeakMap();\n    }\n\n    SPAN_METRIC_SUMMARY.set(span, storage);\n  }\n}\n","import type { Span } from '@sentry/types';\n\n/** The status of an Span.\n *\n * @deprecated Use string literals - if you require type casting, cast to SpanStatusType type\n */\nexport enum SpanStatus {\n  /** The operation completed successfully. */\n  Ok = 'ok',\n  /** Deadline expired before operation could complete. */\n  DeadlineExceeded = 'deadline_exceeded',\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  Unauthenticated = 'unauthenticated',\n  /** 403 Forbidden */\n  PermissionDenied = 'permission_denied',\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  NotFound = 'not_found',\n  /** 429 Too Many Requests */\n  ResourceExhausted = 'resource_exhausted',\n  /** Client specified an invalid argument. 4xx. */\n  InvalidArgument = 'invalid_argument',\n  /** 501 Not Implemented */\n  Unimplemented = 'unimplemented',\n  /** 503 Service Unavailable */\n  Unavailable = 'unavailable',\n  /** Other/generic 5xx. */\n  InternalError = 'internal_error',\n  /** Unknown. Any non-standard HTTP status code. */\n  UnknownError = 'unknown_error',\n  /** The operation was cancelled (typically by the user). */\n  Cancelled = 'cancelled',\n  /** Already exists (409) */\n  AlreadyExists = 'already_exists',\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  FailedPrecondition = 'failed_precondition',\n  /** The operation was aborted, typically due to a concurrency issue. */\n  Aborted = 'aborted',\n  /** Operation was attempted past the valid range. */\n  OutOfRange = 'out_of_range',\n  /** Unrecoverable data loss or corruption */\n  DataLoss = 'data_loss',\n}\n\nexport type SpanStatusType =\n  /** The operation completed successfully. */\n  | 'ok'\n  /** Deadline expired before operation could complete. */\n  | 'deadline_exceeded'\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  | 'unauthenticated'\n  /** 403 Forbidden */\n  | 'permission_denied'\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  | 'not_found'\n  /** 429 Too Many Requests */\n  | 'resource_exhausted'\n  /** Client specified an invalid argument. 4xx. */\n  | 'invalid_argument'\n  /** 501 Not Implemented */\n  | 'unimplemented'\n  /** 503 Service Unavailable */\n  | 'unavailable'\n  /** Other/generic 5xx. */\n  | 'internal_error'\n  /** Unknown. Any non-standard HTTP status code. */\n  | 'unknown_error'\n  /** The operation was cancelled (typically by the user). */\n  | 'cancelled'\n  /** Already exists (409) */\n  | 'already_exists'\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  | 'failed_precondition'\n  /** The operation was aborted, typically due to a concurrency issue. */\n  | 'aborted'\n  /** Operation was attempted past the valid range. */\n  | 'out_of_range'\n  /** Unrecoverable data loss or corruption */\n  | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatusType {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return 'ok';\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return 'unauthenticated';\n      case 403:\n        return 'permission_denied';\n      case 404:\n        return 'not_found';\n      case 409:\n        return 'already_exists';\n      case 413:\n        return 'failed_precondition';\n      case 429:\n        return 'resource_exhausted';\n      default:\n        return 'invalid_argument';\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return 'unimplemented';\n      case 503:\n        return 'unavailable';\n      case 504:\n        return 'deadline_exceeded';\n      default:\n        return 'internal_error';\n    }\n  }\n\n  return 'unknown_error';\n}\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @deprecated Use {@link spanStatusFromHttpCode} instead.\n * This export will be removed in v8 as the signature contains a typo.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport const spanStatusfromHttpCode = getSpanStatusFromHttpCode;\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n  // TODO (v8): Remove these calls\n  // Relay does not require us to send the status code as a tag\n  // For now, just because users might expect it to land as a tag we keep sending it.\n  // Same with data.\n  // In v8, we replace both, simply with\n  // span.setAttribute('http.response.status_code', httpStatus);\n\n  // eslint-disable-next-line deprecation/deprecation\n  span.setTag('http.status_code', String(httpStatus));\n  // eslint-disable-next-line deprecation/deprecation\n  span.setData('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n","/* eslint-disable max-lines */\nimport type {\n  Instrumenter,\n  Measurements,\n  Primitive,\n  Span as SpanInterface,\n  SpanAttributeValue,\n  SpanAttributes,\n  SpanContext,\n  SpanContextData,\n  SpanJSON,\n  SpanOrigin,\n  SpanTimeInput,\n  TraceContext,\n  Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport {\n  SEMANTIC_ATTRIBUTE_PROFILE_ID,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n} from '../semanticAttributes';\nimport { getRootSpan } from '../utils/getRootSpan';\nimport {\n  TRACE_FLAG_NONE,\n  TRACE_FLAG_SAMPLED,\n  spanTimeInputToSeconds,\n  spanToJSON,\n  spanToTraceContext,\n  spanToTraceHeader,\n} from '../utils/spanUtils';\nimport type { SpanStatusType } from './spanstatus';\nimport { setHttpStatus } from './spanstatus';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n  public spans: Span[];\n\n  private readonly _maxlen: number;\n\n  public constructor(maxlen: number = 1000) {\n    this._maxlen = maxlen;\n    this.spans = [];\n  }\n\n  /**\n   * This is just so that we don't run out of memory while recording a lot\n   * of spans. At some point we just stop and flush out the start of the\n   * trace tree (i.e.the first n spans with the smallest\n   * start_timestamp).\n   */\n  public add(span: Span): void {\n    if (this.spans.length > this._maxlen) {\n      // eslint-disable-next-line deprecation/deprecation\n      span.spanRecorder = undefined;\n    } else {\n      this.spans.push(span);\n    }\n  }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n  /**\n   * Tags for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\n   */\n  public tags: { [key: string]: Primitive };\n\n  /**\n   * Data for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public data: { [key: string]: any };\n\n  /**\n   * List of spans that were finalized\n   *\n   * @deprecated This property will no longer be public. Span recording will be handled internally.\n   */\n  public spanRecorder?: SpanRecorder;\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `Sentry.getRootSpan()` instead\n   */\n  public transaction?: Transaction;\n\n  /**\n   * The instrumenter that created this span.\n   *\n   * TODO (v8): This can probably be replaced by an `instanceOf` check of the span class.\n   *            the instrumenter can only be sentry or otel so we can check the span instance\n   *            to verify which one it is and remove this field entirely.\n   *\n   * @deprecated This field will be removed.\n   */\n  public instrumenter: Instrumenter;\n\n  protected _traceId: string;\n  protected _spanId: string;\n  protected _parentSpanId?: string | undefined;\n  protected _sampled: boolean | undefined;\n  protected _name?: string | undefined;\n  protected _attributes: SpanAttributes;\n  /** Epoch timestamp in seconds when the span started. */\n  protected _startTime: number;\n  /** Epoch timestamp in seconds when the span ended. */\n  protected _endTime?: number | undefined;\n  /** Internal keeper of the status */\n  protected _status?: SpanStatusType | string | undefined;\n  protected _exclusiveTime?: number;\n\n  protected _measurements: Measurements;\n\n  private _logMessage?: string;\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startTransaction()`\n   * or call `startChild()` on an existing span.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(spanContext: SpanContext = {}) {\n    this._traceId = spanContext.traceId || uuid4();\n    this._spanId = spanContext.spanId || uuid4().substring(16);\n    this._startTime = spanContext.startTimestamp || timestampInSeconds();\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags ? { ...spanContext.tags } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data ? { ...spanContext.data } : {};\n    // eslint-disable-next-line deprecation/deprecation\n    this.instrumenter = spanContext.instrumenter || 'sentry';\n\n    this._attributes = {};\n    this.setAttributes({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanContext.origin || 'manual',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\n\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    if (spanContext.status) {\n      this._status = spanContext.status;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n    if (spanContext.exclusiveTime !== undefined) {\n      this._exclusiveTime = spanContext.exclusiveTime;\n    }\n    this._measurements = spanContext.measurements ? { ...spanContext.measurements } : {};\n  }\n\n  // This rule conflicts with another eslint rule :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * An alias for `description` of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name || '';\n  }\n\n  /**\n   * Update the name of the span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set name(name: string) {\n    this.updateName(name);\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get description(): string | undefined {\n    return this._name;\n  }\n\n  /**\n   * Get the description of the Span.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public set description(description: string | undefined) {\n    this._name = description;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated Use `spanContext().traceId` instead.\n   */\n  public get traceId(): string {\n    return this._traceId;\n  }\n\n  /**\n   * The ID of the trace.\n   * @deprecated You cannot update the traceId of a span after span creation.\n   */\n  public set traceId(traceId: string) {\n    this._traceId = traceId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated Use `spanContext().spanId` instead.\n   */\n  public get spanId(): string {\n    return this._spanId;\n  }\n\n  /**\n   * The ID of the span.\n   * @deprecated You cannot update the spanId of a span after span creation.\n   */\n  public set spanId(spanId: string) {\n    this._spanId = spanId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `startSpan` functions instead.\n   */\n  public set parentSpanId(string) {\n    this._parentSpanId = string;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).parent_span_id` instead.\n   */\n  public get parentSpanId(): string | undefined {\n    return this._parentSpanId;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated Use `isRecording()` instead.\n   */\n  public get sampled(): boolean | undefined {\n    return this._sampled;\n  }\n\n  /**\n   * Was this span chosen to be sent as part of the sample?\n   * @deprecated You cannot update the sampling decision of a span after span creation.\n   */\n  public set sampled(sampled: boolean | undefined) {\n    this._sampled = sampled;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `spanToJSON(span).atttributes` instead.\n   */\n  public get attributes(): SpanAttributes {\n    return this._attributes;\n  }\n\n  /**\n   * Attributes for the span.\n   * @deprecated Use `setAttributes()` instead.\n   */\n  public set attributes(attributes: SpanAttributes) {\n    this._attributes = attributes;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get startTimestamp(): number {\n    return this._startTime;\n  }\n\n  /**\n   * Timestamp in seconds (epoch time) indicating when the span started.\n   * @deprecated In v8, you will not be able to update the span start time after creation.\n   */\n  public set startTimestamp(startTime: number) {\n    this._startTime = startTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Use `spanToJSON()` instead.\n   */\n  public get endTimestamp(): number | undefined {\n    return this._endTime;\n  }\n\n  /**\n   * Timestamp in seconds when the span ended.\n   * @deprecated Set the end time via `span.end()` instead.\n   */\n  public set endTimestamp(endTime: number | undefined) {\n    this._endTime = endTime;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `spanToJSON().status` instead to get the status.\n   */\n  public get status(): SpanStatusType | string | undefined {\n    return this._status;\n  }\n\n  /**\n   * The status of the span.\n   *\n   * @deprecated Use `.setStatus()` instead to set or update the status.\n   */\n  public set status(status: SpanStatusType | string | undefined) {\n    this._status = status;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `spanToJSON().op` to read the op instead.\n   */\n  public get op(): string | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined;\n  }\n\n  /**\n   * Operation of the span\n   *\n   * @deprecated Use `startSpan()` functions to set or `span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'op')\n   *             to update the span instead.\n   */\n  public set op(op: string | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, op);\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `spanToJSON().origin` to read the origin instead.\n   */\n  public get origin(): SpanOrigin | undefined {\n    return this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined;\n  }\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   *\n   * @deprecated Use `startSpan()` functions to set the origin instead.\n   */\n  public set origin(origin: SpanOrigin | undefined) {\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /**\n   * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n   * Also the `sampled` decision will be inherited.\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n  public startChild(\n    spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n  ): SpanInterface {\n    const childSpan = new Span({\n      ...spanContext,\n      parentSpanId: this._spanId,\n      sampled: this._sampled,\n      traceId: this._traceId,\n    });\n\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.spanRecorder = this.spanRecorder;\n    // eslint-disable-next-line deprecation/deprecation\n    if (childSpan.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      childSpan.spanRecorder.add(childSpan);\n    }\n\n    const rootSpan = getRootSpan(this);\n    // TODO: still set span.transaction here until we have a more permanent solution\n    // Probably similarly to the weakmap we hold in node-experimental\n    // eslint-disable-next-line deprecation/deprecation\n    childSpan.transaction = rootSpan as Transaction;\n\n    if (DEBUG_BUILD && rootSpan) {\n      const opStr = (spanContext && spanContext.op) || '< unknown op >';\n      const nameStr = spanToJSON(childSpan).description || '< unknown name >';\n      const idStr = rootSpan.spanContext().spanId;\n\n      const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n      logger.log(logMessage);\n      this._logMessage = logMessage;\n    }\n\n    return childSpan;\n  }\n\n  /**\n   * Sets the tag attribute on the current span.\n   *\n   * Can also be used to unset a tag, by passing `undefined`.\n   *\n   * @param key Tag key\n   * @param value Tag value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  public setTag(key: string, value: Primitive): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = { ...this.tags, [key]: value };\n    return this;\n  }\n\n  /**\n   * Sets the data attribute on the current span\n   * @param key Data key\n   * @param value Data value\n   * @deprecated Use `setAttribute()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public setData(key: string, value: any): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = { ...this.data, [key]: value };\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n  }\n\n  /** @inheritdoc */\n  public setAttributes(attributes: SpanAttributes): void {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatusType): this {\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top-level `setHttpStatus()` instead.\n   */\n  public setHttpStatus(httpStatus: number): this {\n    setHttpStatus(this, httpStatus);\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @deprecated Use `.updateName()` instead.\n   */\n  public setName(name: string): void {\n    this.updateName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON(span).status === 'ok'` instead.\n   */\n  public isSuccess(): boolean {\n    return this._status === 'ok';\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `.end()` instead.\n   */\n  public finish(endTimestamp?: number): void {\n    return this.end(endTimestamp);\n  }\n\n  /** @inheritdoc */\n  public end(endTimestamp?: SpanTimeInput): void {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n    const rootSpan = getRootSpan(this);\n    if (\n      DEBUG_BUILD &&\n      // Don't call this for transactions\n      rootSpan &&\n      rootSpan.spanContext().spanId !== this._spanId\n    ) {\n      const logMessage = this._logMessage;\n      if (logMessage) {\n        logger.log((logMessage as string).replace('Starting', 'Finishing'));\n      }\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n  public toTraceparent(): string {\n    return spanToTraceHeader(this);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToJSON()` or access the fields directly instead.\n   */\n  public toContext(): SpanContext {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      endTimestamp: this._endTime,\n      // eslint-disable-next-line deprecation/deprecation\n      op: this.op,\n      parentSpanId: this._parentSpanId,\n      sampled: this._sampled,\n      spanId: this._spanId,\n      startTimestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      traceId: this._traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Update the fields directly instead.\n   */\n  public updateWithContext(spanContext: SpanContext): this {\n    // eslint-disable-next-line deprecation/deprecation\n    this.data = spanContext.data || {};\n    // eslint-disable-next-line deprecation/deprecation\n    this._name = spanContext.name || spanContext.description;\n    this._endTime = spanContext.endTimestamp;\n    // eslint-disable-next-line deprecation/deprecation\n    this.op = spanContext.op;\n    this._parentSpanId = spanContext.parentSpanId;\n    this._sampled = spanContext.sampled;\n    this._spanId = spanContext.spanId || this._spanId;\n    this._startTime = spanContext.startTimestamp || this._startTime;\n    this._status = spanContext.status;\n    // eslint-disable-next-line deprecation/deprecation\n    this.tags = spanContext.tags || {};\n    this._traceId = spanContext.traceId || this._traceId;\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `spanToTraceContext()` util function instead.\n   */\n  public getTraceContext(): TraceContext {\n    return spanToTraceContext(this);\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  public getSpanJSON(): SpanJSON {\n    return dropUndefinedKeys({\n      data: this._getData(),\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined,\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: this._status,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n      exclusive_time: this._exclusiveTime,\n      measurements: Object.keys(this._measurements).length > 0 ? this._measurements : undefined,\n    });\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * Convert the object to JSON.\n   * @deprecated Use `spanToJSON(span)` instead.\n   */\n  public toJSON(): SpanJSON {\n    return this.getSpanJSON();\n  }\n\n  /**\n   * Get the merged data for this span.\n   * For now, this combines `data` and `attributes` together,\n   * until eventually we can ingest `attributes` directly.\n   */\n  private _getData():\n    | {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        [key: string]: any;\n      }\n    | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const { data, _attributes: attributes } = this;\n\n    const hasData = Object.keys(data).length > 0;\n    const hasAttributes = Object.keys(attributes).length > 0;\n\n    if (!hasData && !hasAttributes) {\n      return undefined;\n    }\n\n    if (hasData && hasAttributes) {\n      return {\n        ...data,\n        ...attributes,\n      };\n    }\n\n    return hasData ? data : attributes;\n  }\n}\n","import type {\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  MeasurementUnit,\n  SpanTimeInput,\n  Transaction as TransactionInterface,\n  TransactionContext,\n  TransactionEvent,\n  TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { spanTimeInputToSeconds, spanToJSON, spanToTraceContext } from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\nimport { getCapturedScopesOnSpan } from './trace';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n  /**\n   * The reference to the current hub.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public _hub: Hub;\n\n  protected _name: string;\n\n  private _contexts: Contexts;\n\n  private _trimEnd?: boolean | undefined;\n\n  // DO NOT yet remove this property, it is used in a hack for v7 backwards compatibility.\n  private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n  private _metadata: Partial<TransactionMetadata>;\n\n  /**\n   * This constructor should never be called manually. Those instrumenting tracing should use\n   * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   *\n   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public constructor(transactionContext: TransactionContext, hub?: Hub) {\n    super(transactionContext);\n    this._contexts = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    this._hub = hub || getCurrentHub();\n\n    this._name = transactionContext.name || '';\n\n    this._metadata = {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.metadata,\n    };\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    // this is because transactions are also spans, and spans have a transaction pointer\n    // TODO (v8): Replace this with another way to set the root span\n    // eslint-disable-next-line deprecation/deprecation\n    this.transaction = this;\n\n    // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n    // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n    const incomingDynamicSamplingContext = this._metadata.dynamicSamplingContext;\n    if (incomingDynamicSamplingContext) {\n      // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n      this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n    }\n  }\n\n  // This sadly conflicts with the getter/setter ordering :(\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /**\n   * Getter for `name` property.\n   * @deprecated Use `spanToJSON(span).description` instead.\n   */\n  public get name(): string {\n    return this._name;\n  }\n\n  /**\n   * Setter for `name` property, which also sets `source` as custom.\n   * @deprecated Use `updateName()` and `setMetadata()` instead.\n   */\n  public set name(newName: string) {\n    // eslint-disable-next-line deprecation/deprecation\n    this.setName(newName);\n  }\n\n  /**\n   * Get the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public get metadata(): TransactionMetadata {\n    // We merge attributes in for backwards compatibility\n    return {\n      // Defaults\n      // eslint-disable-next-line deprecation/deprecation\n      source: 'custom',\n      spanMetadata: {},\n\n      // Legacy metadata\n      ...this._metadata,\n\n      // From attributes\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && {\n        source: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionMetadata['source'],\n      }),\n      ...(this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && {\n        sampleRate: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as TransactionMetadata['sampleRate'],\n      }),\n    };\n  }\n\n  /**\n   * Update the metadata for this transaction.\n   * @deprecated Use `spanGetMetadata(transaction)` instead.\n   */\n  public set metadata(metadata: TransactionMetadata) {\n    this._metadata = metadata;\n  }\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n\n  /**\n   * Setter for `name` property, which also sets `source` on the metadata.\n   *\n   * @deprecated Use `.updateName()` and `.setAttribute()` instead.\n   */\n  public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n    this._name = name;\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n  }\n\n  /** @inheritdoc */\n  public updateName(name: string): this {\n    this._name = name;\n    return this;\n  }\n\n  /**\n   * Attaches SpanRecorder to the span itself\n   * @param maxlen maximum number of spans that can be recorded\n   */\n  public initSpanRecorder(maxlen: number = 1000): void {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!this.spanRecorder) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new SpanRecorder(maxlen);\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Set the context of a transaction event.\n   * @deprecated Use either `.setAttribute()`, or set the context on the scope before creating the transaction.\n   */\n  public setContext(key: string, context: Context | null): void {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top-level `setMeasurement()` instead.\n   */\n  public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n    this._measurements[name] = { value, unit };\n  }\n\n  /**\n   * Store metadata on this transaction.\n   * @deprecated Use attributes or store data on the scope instead.\n   */\n  public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n    this._metadata = { ...this._metadata, ...newMetadata };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const timestampInS = spanTimeInputToSeconds(endTimestamp);\n    const transaction = this._finishTransaction(timestampInS);\n    if (!transaction) {\n      return undefined;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    return this._hub.captureEvent(transaction);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): TransactionContext {\n    // eslint-disable-next-line deprecation/deprecation\n    const spanContext = super.toContext();\n\n    return dropUndefinedKeys({\n      ...spanContext,\n      name: this._name,\n      trimEnd: this._trimEnd,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(transactionContext: TransactionContext): this {\n    // eslint-disable-next-line deprecation/deprecation\n    super.updateWithContext(transactionContext);\n\n    this._name = transactionContext.name || '';\n    this._trimEnd = transactionContext.trimEnd;\n\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @experimental\n   *\n   * @deprecated Use top-level `getDynamicSamplingContextFromSpan` instead.\n   */\n  public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n    return getDynamicSamplingContextFromSpan(this);\n  }\n\n  /**\n   * Override the current hub with a new one.\n   * Used if you want another hub to finish the transaction.\n   *\n   * @internal\n   */\n  // eslint-disable-next-line deprecation/deprecation\n  public setHub(hub: Hub): void {\n    this._hub = hub;\n  }\n\n  /**\n   * Get the profile id of the transaction.\n   */\n  public getProfileId(): string | undefined {\n    if (this._contexts !== undefined && this._contexts['profile'] !== undefined) {\n      return this._contexts['profile'].profile_id as string;\n    }\n    return undefined;\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  protected _finishTransaction(endTimestamp?: number): TransactionEvent | undefined {\n    // This transaction is already finished, so we should not flush it again.\n    if (this._endTime !== undefined) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    // just sets the end timestamp\n    super.end(endTimestamp);\n\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this._hub.getClient();\n    if (client && client.emit) {\n      client.emit('finishTransaction', this);\n    }\n\n    if (this._sampled !== true) {\n      // At this point if `sampled !== true` we want to discard the transaction.\n      DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n      if (client) {\n        client.recordDroppedEvent('sample_rate', 'transaction');\n      }\n\n      return undefined;\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    const finishedSpans = this.spanRecorder\n      ? // eslint-disable-next-line deprecation/deprecation\n        this.spanRecorder.spans.filter(span => span !== this && spanToJSON(span).timestamp)\n      : [];\n\n    if (this._trimEnd && finishedSpans.length > 0) {\n      const endTimes = finishedSpans.map(span => spanToJSON(span).timestamp).filter(Boolean) as number[];\n      this._endTime = endTimes.reduce((prev, current) => {\n        return prev > current ? prev : current;\n      });\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n    // eslint-disable-next-line deprecation/deprecation\n    const { metadata } = this;\n    // eslint-disable-next-line deprecation/deprecation\n    const { source } = metadata;\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        ...this._contexts,\n        // We don't want to override trace context\n        trace: spanToTraceContext(this),\n      },\n      // TODO: Pass spans serialized via `spanToJSON()` here instead in v8.\n      spans: finishedSpans,\n      start_timestamp: this._startTime,\n      // eslint-disable-next-line deprecation/deprecation\n      tags: this.tags,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        ...metadata,\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        ...dropUndefinedKeys({\n          dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        }),\n      },\n      _metrics_summary: getMetricSummaryJsonForSpan(this),\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n    if (hasMeasurements) {\n      DEBUG_BUILD &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction',\n          JSON.stringify(this._measurements, undefined, 2),\n        );\n      transaction.measurements = this._measurements;\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    DEBUG_BUILD && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`);\n\n    return transaction;\n  }\n}\n","/* eslint-disable max-lines */\nimport type { SpanTimeInput, TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n  'heartbeatFailed',\n  'idleTimeout',\n  'documentHidden',\n  'finalTimeout',\n  'externalFinish',\n  'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n  public constructor(\n    private readonly _pushActivity: (id: string) => void,\n    private readonly _popActivity: (id: string) => void,\n    public transactionSpanId: string,\n    maxlen?: number,\n  ) {\n    super(maxlen);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(span: Span): void {\n    // We should make sure we do not push and pop activities for\n    // the transaction that this span recorder belongs to.\n    if (span.spanContext().spanId !== this.transactionSpanId) {\n      // We patch span.end() to pop an activity after setting an endTimestamp.\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const originalEnd = span.end;\n      span.end = (...rest: unknown[]) => {\n        this._popActivity(span.spanContext().spanId);\n        return originalEnd.apply(span, rest);\n      };\n\n      // We should only push new activities if the span does not have an end timestamp.\n      if (spanToJSON(span).timestamp === undefined) {\n        this._pushActivity(span.spanContext().spanId);\n      }\n    }\n\n    super.add(span);\n  }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n  // Activities store a list of active spans\n  public activities: Record<string, boolean>;\n  // Track state of activities in previous heartbeat\n  private _prevHeartbeatString: string | undefined;\n\n  // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n  private _heartbeatCounter: number;\n\n  // We should not use heartbeat if we finished a transaction\n  private _finished: boolean;\n\n  // Idle timeout was canceled and we should finish the transaction with the last span end.\n  private _idleTimeoutCanceledPermanently: boolean;\n\n  private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n  /**\n   * Timer that tracks Transaction idleTimeout\n   */\n  private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n  private _autoFinishAllowed: boolean;\n\n  /**\n   * @deprecated Transactions will be removed in v8. Use spans instead.\n   */\n  public constructor(\n    transactionContext: TransactionContext,\n    // eslint-disable-next-line deprecation/deprecation\n    private readonly _idleHub: Hub,\n    /**\n     * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n     * there are no active spans on this transaction.\n     */\n    private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n    /**\n     * The final value in ms that a transaction cannot exceed\n     */\n    private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n    private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n    // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n    private readonly _onScope: boolean = false,\n    /**\n     * When set to `true`, will disable the idle timeout (`_idleTimeout` option) and heartbeat mechanisms (`_heartbeatInterval`\n     * option) until the `sendAutoFinishSignal()` method is called. The final timeout mechanism (`_finalTimeout` option)\n     * will not be affected by this option, meaning the transaction will definitely be finished when the final timeout is\n     * reached, no matter what this option is configured to.\n     *\n     * Defaults to `false`.\n     */\n    delayAutoFinishUntilSignal: boolean = false,\n  ) {\n    super(transactionContext, _idleHub);\n\n    this.activities = {};\n    this._heartbeatCounter = 0;\n    this._finished = false;\n    this._idleTimeoutCanceledPermanently = false;\n    this._beforeFinishCallbacks = [];\n    this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n    this._autoFinishAllowed = !delayAutoFinishUntilSignal;\n\n    if (_onScope) {\n      // We set the transaction here on the scope so error events pick up the trace\n      // context and attach it to the error.\n      DEBUG_BUILD && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`);\n      // eslint-disable-next-line deprecation/deprecation\n      _idleHub.getScope().setSpan(this);\n    }\n\n    if (!delayAutoFinishUntilSignal) {\n      this._restartIdleTimeout();\n    }\n\n    setTimeout(() => {\n      if (!this._finished) {\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n        this.end();\n      }\n    }, this._finalTimeout);\n  }\n\n  /** {@inheritDoc} */\n  public end(endTimestamp?: SpanTimeInput): string | undefined {\n    const endTimestampInS = spanTimeInputToSeconds(endTimestamp);\n\n    this._finished = true;\n    this.activities = {};\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.op === 'ui.action.click') {\n      this.setAttribute(FINISH_REASON_TAG, this._finishReason);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.spanRecorder) {\n      DEBUG_BUILD &&\n        // eslint-disable-next-line deprecation/deprecation\n        logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestampInS * 1000).toISOString(), this.op);\n\n      for (const callback of this._beforeFinishCallbacks) {\n        callback(this, endTimestampInS);\n      }\n\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n        // If we are dealing with the transaction itself, we just return it\n        if (span.spanContext().spanId === this.spanContext().spanId) {\n          return true;\n        }\n\n        // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n        if (!spanToJSON(span).timestamp) {\n          span.setStatus('cancelled');\n          span.end(endTimestampInS);\n          DEBUG_BUILD &&\n            logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n        }\n\n        const { start_timestamp: startTime, timestamp: endTime } = spanToJSON(span);\n        const spanStartedBeforeTransactionFinish = startTime && startTime < endTimestampInS;\n\n        // Add a delta with idle timeout so that we prevent false positives\n        const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n        const spanEndedBeforeFinalTimeout = endTime && startTime && endTime - startTime < timeoutWithMarginOfError;\n\n        if (DEBUG_BUILD) {\n          const stringifiedSpan = JSON.stringify(span, undefined, 2);\n          if (!spanStartedBeforeTransactionFinish) {\n            logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n          } else if (!spanEndedBeforeFinalTimeout) {\n            logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n          }\n        }\n\n        return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n      });\n\n      DEBUG_BUILD && logger.log('[Tracing] flushing IdleTransaction');\n    } else {\n      DEBUG_BUILD && logger.log('[Tracing] No active IdleTransaction');\n    }\n\n    // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n    if (this._onScope) {\n      // eslint-disable-next-line deprecation/deprecation\n      const scope = this._idleHub.getScope();\n      // eslint-disable-next-line deprecation/deprecation\n      if (scope.getTransaction() === this) {\n        // eslint-disable-next-line deprecation/deprecation\n        scope.setSpan(undefined);\n      }\n    }\n\n    return super.end(endTimestamp);\n  }\n\n  /**\n   * Register a callback function that gets executed before the transaction finishes.\n   * Useful for cleanup or if you want to add any additional spans based on current context.\n   *\n   * This is exposed because users have no other way of running something before an idle transaction\n   * finishes.\n   */\n  public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n    this._beforeFinishCallbacks.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public initSpanRecorder(maxlen?: number): void {\n    // eslint-disable-next-line deprecation/deprecation\n    if (!this.spanRecorder) {\n      const pushActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._pushActivity(id);\n      };\n      const popActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._popActivity(id);\n      };\n\n      // eslint-disable-next-line deprecation/deprecation\n      this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanContext().spanId, maxlen);\n\n      // Start heartbeat so that transactions do not run forever.\n      DEBUG_BUILD && logger.log('Starting heartbeat');\n      this._pingHeartbeat();\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   * @param restartOnChildSpanChange Default is `true`.\n   *                                 If set to false the transaction will end\n   *                                 with the last child span.\n   */\n  public cancelIdleTimeout(\n    endTimestamp?: Parameters<IdleTransaction['end']>[0],\n    {\n      restartOnChildSpanChange,\n    }: {\n      restartOnChildSpanChange?: boolean;\n    } = {\n      restartOnChildSpanChange: true,\n    },\n  ): void {\n    this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n    if (this._idleTimeoutID) {\n      clearTimeout(this._idleTimeoutID);\n      this._idleTimeoutID = undefined;\n\n      if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.end(endTimestamp);\n      }\n    }\n  }\n\n  /**\n   * Temporary method used to externally set the transaction's `finishReason`\n   *\n   * ** WARNING**\n   * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n   *\n   * @internal\n   *\n   */\n  public setFinishReason(reason: string): void {\n    this._finishReason = reason;\n  }\n\n  /**\n   * Permits the IdleTransaction to automatically end itself via the idle timeout and heartbeat mechanisms when the `delayAutoFinishUntilSignal` option was set to `true`.\n   */\n  public sendAutoFinishSignal(): void {\n    if (!this._autoFinishAllowed) {\n      DEBUG_BUILD && logger.log('[Tracing] Received finish signal for idle transaction.');\n      this._restartIdleTimeout();\n      this._autoFinishAllowed = true;\n    }\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['end']>[0]): void {\n    this.cancelIdleTimeout();\n    this._idleTimeoutID = setTimeout(() => {\n      if (!this._finished && Object.keys(this.activities).length === 0) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n        this.end(endTimestamp);\n      }\n    }, this._idleTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  private _pushActivity(spanId: string): void {\n    this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n    DEBUG_BUILD && logger.log(`[Tracing] pushActivity: ${spanId}`);\n    this.activities[spanId] = true;\n    DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  private _popActivity(spanId: string): void {\n    if (this.activities[spanId]) {\n      DEBUG_BUILD && logger.log(`[Tracing] popActivity ${spanId}`);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.activities[spanId];\n      DEBUG_BUILD && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n    }\n\n    if (Object.keys(this.activities).length === 0) {\n      const endTimestamp = timestampInSeconds();\n      if (this._idleTimeoutCanceledPermanently) {\n        if (this._autoFinishAllowed) {\n          this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n          this.end(endTimestamp);\n        }\n      } else {\n        // We need to add the timeout here to have the real endtimestamp of the transaction\n        // Remember timestampInSeconds is in seconds, timeout is in ms\n        this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n      }\n    }\n  }\n\n  /**\n   * Checks when entries of this.activities are not changing for 3 beats.\n   * If this occurs we finish the transaction.\n   */\n  private _beat(): void {\n    // We should not be running heartbeat if the idle transaction is finished.\n    if (this._finished) {\n      return;\n    }\n\n    const heartbeatString = Object.keys(this.activities).join('');\n\n    if (heartbeatString === this._prevHeartbeatString) {\n      this._heartbeatCounter++;\n    } else {\n      this._heartbeatCounter = 1;\n    }\n\n    this._prevHeartbeatString = heartbeatString;\n\n    if (this._heartbeatCounter >= 3) {\n      if (this._autoFinishAllowed) {\n        DEBUG_BUILD && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n        this.end();\n      }\n    } else {\n      this._pingHeartbeat();\n    }\n  }\n\n  /**\n   * Pings the heartbeat\n   */\n  private _pingHeartbeat(): void {\n    DEBUG_BUILD && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n    setTimeout(() => {\n      this._beat();\n    }, this._heartbeatInterval);\n  }\n}\n","import type { Transaction } from '@sentry/types';\nimport { extractTraceparentData as _extractTraceparentData } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * Grabs active transaction off scope.\n *\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = maybeHub || getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = hub.getScope();\n  // eslint-disable-next-line deprecation/deprecation\n  return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n *\n * @deprecated Import this function from `@sentry/utils` instead\n */\nexport const extractTraceparentData = _extractTraceparentData;\n","import {\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SpanStatusType } from './spanstatus';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const activeTransaction = getActiveTransaction();\n  if (activeTransaction) {\n    const status: SpanStatusType = 'internal_error';\n    DEBUG_BUILD && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n    activeTransaction.setStatus(status);\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { spanToJSON } from '../utils/spanUtils';\nimport type { Transaction } from './transaction';\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * This method muttes the given `transaction` and will set the `sampled` value on it.\n * It returns the same transaction, for convenience.\n */\nexport function sampleTransaction<T extends Transaction>(\n  transaction: T,\n  options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n  samplingContext: SamplingContext,\n): T {\n  // nothing to do if tracing is not enabled\n  if (!hasTracingEnabled(options)) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n  // eslint-disable-next-line deprecation/deprecation\n  if (transaction.sampled !== undefined) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(transaction.sampled));\n    return transaction;\n  }\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler(samplingContext);\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(sampleRate));\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n    transaction.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(sampleRate)) {\n    DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!sampleRate) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  // eslint-disable-next-line deprecation/deprecation\n  transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n  // if we're not going to keep it, we're done\n  // eslint-disable-next-line deprecation/deprecation\n  if (!transaction.sampled) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n    return transaction;\n  }\n\n  DEBUG_BUILD &&\n    // eslint-disable-next-line deprecation/deprecation\n    logger.log(`[Tracing] starting ${transaction.op} transaction - ${spanToJSON(transaction).description}`);\n  return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nexport function isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    DEBUG_BUILD &&\n      logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n","import type { ClientOptions, CustomSamplingContext, TransactionContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { spanToTraceHeader } from '../utils/spanUtils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { sampleTransaction } from './sampling';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\n// eslint-disable-next-line deprecation/deprecation\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n  // eslint-disable-next-line deprecation/deprecation\n  const scope = this.getScope();\n  // eslint-disable-next-line deprecation/deprecation\n  const span = scope.getSpan();\n\n  return span\n    ? {\n        'sentry-trace': spanToTraceHeader(span),\n      }\n    : {};\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n  // eslint-disable-next-line deprecation/deprecation\n  this: Hub,\n  transactionContext: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  // eslint-disable-next-line deprecation/deprecation\n  const client = this.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  const configInstrumenter = options.instrumenter || 'sentry';\n  const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n  if (configInstrumenter !== transactionInstrumenter) {\n    DEBUG_BUILD &&\n      logger.error(\n        `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n      );\n\n    // eslint-disable-next-line deprecation/deprecation\n    transactionContext.sampled = false;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new Transaction(transactionContext, this);\n  transaction = sampleTransaction(transaction, options, {\n    name: transactionContext.name,\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    attributes: {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.data,\n      ...transactionContext.attributes,\n    },\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n  // eslint-disable-next-line deprecation/deprecation\n  hub: Hub,\n  transactionContext: TransactionContext,\n  idleTimeout: number,\n  finalTimeout: number,\n  onScope?: boolean,\n  customSamplingContext?: CustomSamplingContext,\n  heartbeatInterval?: number,\n  delayAutoFinishUntilSignal: boolean = false,\n): IdleTransaction {\n  // eslint-disable-next-line deprecation/deprecation\n  const client = hub.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  // eslint-disable-next-line deprecation/deprecation\n  let transaction = new IdleTransaction(\n    transactionContext,\n    hub,\n    idleTimeout,\n    finalTimeout,\n    heartbeatInterval,\n    onScope,\n    delayAutoFinishUntilSignal,\n  );\n  transaction = sampleTransaction(transaction, options, {\n    name: transactionContext.name,\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    attributes: {\n      // eslint-disable-next-line deprecation/deprecation\n      ...transactionContext.data,\n      ...transactionContext.attributes,\n    },\n    ...customSamplingContext,\n  });\n  if (transaction.isRecording()) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n  const carrier = getMainCarrier();\n  if (!carrier.__SENTRY__) {\n    return;\n  }\n  carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n  if (!carrier.__SENTRY__.extensions.startTransaction) {\n    carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n  }\n  if (!carrier.__SENTRY__.extensions.traceHeaders) {\n    carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n  }\n\n  registerErrorInstrumentation();\n}\n","import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction, spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n  if (WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      // eslint-disable-next-line deprecation/deprecation\n      const activeTransaction = getActiveTransaction() as IdleTransaction;\n      if (WINDOW.document!.hidden && activeTransaction) {\n        const statusType: SpanStatusType = 'cancelled';\n\n        const { op, status } = spanToJSON(activeTransaction);\n\n        DEBUG_BUILD &&\n          logger.log(`[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${op}`);\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!status) {\n          activeTransaction.setStatus(statusType);\n        }\n        // TODO: Can we rewrite this to an attribute?\n        // eslint-disable-next-line deprecation/deprecation\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n","import type { DsnComponents, SpanEnvelope, SpanItem } from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from Span item.\n */\nexport function createSpanEnvelope(spans: Span[], dsn?: DsnComponents): SpanEnvelope {\n  const headers: SpanEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const items = spans.map(createSpanItem);\n  return createEnvelope<SpanEnvelope>(headers, items);\n}\n\nfunction createSpanItem(span: Span): SpanItem {\n  const spanHeaders: SpanItem[0] = {\n    type: 'span',\n  };\n  return [spanHeaders, span];\n}\n","import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n *\n * Note: this will not be possible anymore in v8,\n * unless we do some special handling for browser here...\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n  // eslint-disable-next-line deprecation/deprecation\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport {\n  Span,\n  getActiveTransaction,\n  getClient,\n  hasTracingEnabled,\n  isValidSampleRate,\n  setMeasurement,\n} from '@sentry/core';\nimport type { ClientOptions, Measurements, SpanContext, TransactionContext } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils';\n\nimport { spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../common/debug-build';\nimport {\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addInpInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n  addTtfbInstrumentationHandler,\n} from '../instrument';\nimport { WINDOW } from '../types';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport type {\n  InteractionRouteNameMapping,\n  NavigatorDeviceMemory,\n  NavigatorNetworkInformation,\n} from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\nimport { createSpanEnvelope } from '@sentry/core';\nimport { getNavigationEntry } from '../web-vitals/lib/getNavigationEntry';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n  return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCallback = _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n    const ttfbCallback = _trackTtfb();\n\n    return (): void => {\n      fidCallback();\n      clsCallback();\n      lcpCallback();\n      ttfbCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n      const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.startChild({\n        description: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: startTime,\n        endTimestamp: startTime + duration,\n      });\n    }\n  });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    for (const entry of entries) {\n      // eslint-disable-next-line deprecation/deprecation\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        const span: SpanContext = {\n          description: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          origin: 'auto.ui.browser.metrics',\n          startTimestamp: startTime,\n          endTimestamp: startTime + duration,\n        };\n\n        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          span.attributes = { 'ui.component_name': componentName };\n        }\n\n        // eslint-disable-next-line deprecation/deprecation\n        transaction.startChild(span);\n      }\n    }\n  });\n}\n\n/**\n * Start tracking INP webvital events.\n */\nexport function startTrackingINP(\n  interactionIdtoRouteNameMapping: InteractionRouteNameMapping,\n  interactionsSampleRate: number,\n): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    const inpCallback = _trackINP(interactionIdtoRouteNameMapping, interactionsSampleRate);\n\n    return (): void => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry as LayoutShift;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry as LargestContentfulPaint;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n    const startTime = msToSec(entry.startTime);\n    DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\nfunction _trackTtfb(): () => void {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\nconst INP_ENTRY_MAP: Record<string, 'click' | 'hover' | 'drag' | 'press'> = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(\n  interactionIdToRouteNameMapping: InteractionRouteNameMapping,\n  interactionsSampleRate: number,\n): () => void {\n  return addInpInstrumentationHandler(({ metric }) => {\n    if (metric.value === undefined) {\n      return;\n    }\n    const entry = metric.entries.find(\n      entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name] !== undefined,\n    );\n    const client = getClient();\n    if (!entry || !client) {\n      return;\n    }\n    const interactionType = INP_ENTRY_MAP[entry.name];\n    const options = client.getOptions();\n    /** Build the INP span, create an envelope from the span, and then send the envelope */\n    const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n    const duration = msToSec(metric.value);\n    const interaction =\n      entry.interactionId !== undefined ? interactionIdToRouteNameMapping[entry.interactionId] : undefined;\n    if (interaction === undefined) {\n      return;\n    }\n    const { routeName, parentContext, activeTransaction, user, replayId } = interaction;\n    const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n    // eslint-disable-next-line deprecation/deprecation\n    const profileId = activeTransaction !== undefined ? activeTransaction.getProfileId() : undefined;\n    const span = new Span({\n      startTimestamp: startTime,\n      endTimestamp: startTime + duration,\n      op: `ui.interaction.${interactionType}`,\n      name: htmlTreeAsString(entry.target),\n      attributes: {\n        release: options.release,\n        environment: options.environment,\n        transaction: routeName,\n        ...(userDisplay !== undefined && userDisplay !== '' ? { user: userDisplay } : {}),\n        ...(profileId !== undefined ? { profile_id: profileId } : {}),\n        ...(replayId !== undefined ? { replay_id: replayId } : {}),\n      },\n      exclusiveTime: metric.value,\n      measurements: {\n        inp: { value: metric.value, unit: 'millisecond' },\n      },\n    });\n\n    /** Check to see if the span should be sampled */\n    const sampleRate = getSampleRate(parentContext, options, interactionsSampleRate);\n\n    if (!sampleRate) {\n      return;\n    }\n\n    if (Math.random() < (sampleRate as number | boolean)) {\n      const envelope = span ? createSpanEnvelope([span], client.getDsn()) : undefined;\n      const transport = client && client.getTransport();\n      if (transport && envelope) {\n        transport.send(envelope).then(null, reason => {\n          DEBUG_BUILD && logger.error('Error while sending interaction:', reason);\n        });\n      }\n      return;\n    }\n  });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  const { op, start_timestamp: transactionStartTime } = spanToJSON(transaction);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(entry.duration);\n\n    // eslint-disable-next-line deprecation/deprecation\n    if (transaction.op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(transaction, entry, timeOrigin);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(transaction, entry, entry.name as string, startTime, duration, timeOrigin);\n        break;\n      }\n      default:\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(transaction);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\n        return;\n      }\n      // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n      // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n      // to be adjusted to be relative to transaction.startTimestamp.\n      const oldValue = _measurements[name].value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      _measurements[name].value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      _startChild(transaction, {\n        description: 'first input delay',\n        endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n        op: 'ui.action',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: fidMark.value,\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    if (!('fcp' in _measurements)) {\n      delete _measurements.cls;\n    }\n\n    Object.keys(_measurements).forEach(measurementName => {\n      setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\n    });\n\n    _tagMetricInfo(transaction);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): number {\n  const measureStartTimestamp = timeOrigin + startTime;\n  const measureEndTimestamp = measureStartTimestamp + duration;\n\n  _startChild(transaction, {\n    description: entry.name as string,\n    endTimestamp: measureEndTimestamp,\n    op: entry.entryType as string,\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp: measureStartTimestamp,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n    _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n  _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n  _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n  _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  event: string,\n  timeOrigin: number,\n  description?: string,\n  eventEnd?: string,\n): void {\n  const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n  const start = entry[`${event}Start`] as number | undefined;\n  if (!start || !end) {\n    return;\n  }\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: description || event,\n    startTimestamp: timeOrigin + msToSec(start),\n    endTimestamp: timeOrigin + msToSec(end),\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire transaction if it contained faulty spans.\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'request',\n      startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n    });\n\n    _startChild(transaction, {\n      op: 'browser',\n      origin: 'auto.browser.browser.metrics',\n      description: 'response',\n      startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n      endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n    });\n  }\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n  initiatorType?: string;\n  transferSize?: number;\n  encodedBodySize?: number;\n  decodedBodySize?: number;\n  renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n  transaction: Transaction,\n  entry: ResourceEntry,\n  resourceUrl: string,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  const parsedUrl = parseUrl(resourceUrl);\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: Record<string, any> = {};\n  setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n  if (parsedUrl.protocol) {\n    data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    data['server.address'] = parsedUrl.host;\n  }\n\n  data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceUrl.replace(WINDOW.location.origin, ''),\n    endTimestamp,\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp,\n    data,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n  const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n  if (_lcpEntry) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    // TODO: Can we rewrite this to an attribute?\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setTag('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      // TODO: Can we rewrite this to an attribute?\n      // eslint-disable-next-line deprecation/deprecation\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  data: Record<string, unknown>,\n  entry: ResourceEntry,\n  key: keyof Pick<ResourceEntry, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n  dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    data[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements: Measurements): void {\n  const navEntry = getNavigationEntry();\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n\n/** Taken from @sentry/core sampling.ts */\nfunction getSampleRate(\n  transactionContext: TransactionContext | undefined,\n  options: ClientOptions,\n  interactionsSampleRate: number,\n): number | boolean {\n  if (!hasTracingEnabled(options)) {\n    return false;\n  }\n  let sampleRate;\n  if (transactionContext !== undefined && typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      transactionContext,\n      name: transactionContext.name,\n      parentSampled: transactionContext.parentSampled,\n      attributes: {\n        // eslint-disable-next-line deprecation/deprecation\n        ...transactionContext.data,\n        ...transactionContext.attributes,\n      },\n      location: WINDOW.location,\n    });\n  } else if (transactionContext !== undefined && transactionContext.sampled !== undefined) {\n    sampleRate = transactionContext.sampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n  } else {\n    sampleRate = 1;\n  }\n  if (!isValidSampleRate(sampleRate)) {\n    DEBUG_BUILD && logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.');\n    return false;\n  }\n  if (sampleRate === true) {\n    return interactionsSampleRate;\n  } else if (sampleRate === false) {\n    return 0;\n  }\n  return sampleRate * interactionsSampleRate;\n}\n","import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n  // eslint-disable-next-line deprecation/deprecation\n  const transaction = getActiveTransaction();\n  if (transaction) {\n    // eslint-disable-next-line deprecation/deprecation\n    transaction.setMeasurement(name, value, unit);\n  }\n}\n","import {\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  hasTracingEnabled,\n  setHttpStatus,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  isInstanceOf,\n  parseUrl,\n} from '@sentry/utils';\n\ntype PolymorphicRequestHeaders =\n  | Record<string, string | undefined>\n  | Array<[string, string]>\n  // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n  | {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [key: string]: any;\n      append: (key: string, value: string) => void;\n      get: (key: string) => string | null | undefined;\n    };\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n  handlerData: HandlerDataFetch,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n  spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n  if (!hasTracingEnabled() || !handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      endSpan(span, handlerData);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  const { method, url } = handlerData.fetchData;\n\n  const fullUrl = getFullURL(url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${method} ${url}`,\n        onlyIfParent: true,\n        attributes: {\n          url,\n          type: 'fetch',\n          'http.method': method,\n          'http.url': fullUrl,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanContext().spanId;\n    spans[span.spanContext().spanId] = span;\n  }\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request: string | Request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options: { [key: string]: any } = handlerData.args[1];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n  request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n  client: Client,\n  scope: Scope,\n  options: {\n    headers?:\n      | {\n          [key: string]: string[] | string | undefined;\n        }\n      | PolymorphicRequestHeaders;\n  },\n  requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n  // eslint-disable-next-line deprecation/deprecation\n  const span = requestSpan || scope.getSpan();\n\n  const isolationScope = getIsolationScope();\n\n  const { traceId, spanId, sampled, dsc } = {\n    ...isolationScope.getPropagationContext(),\n    ...scope.getPropagationContext(),\n  };\n\n  const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n    dsc ||\n      (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n  );\n\n  const headers =\n    options.headers ||\n    (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : undefined);\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers as Headers);\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders: string[] = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers as Exclude<typeof headers, Headers>),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\nfunction getFullURL(url: string): string | undefined {\n  try {\n    const parsed = new URL(url);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction endSpan(span: Span, handlerData: HandlerDataFetch): void {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n\n    const contentLength =\n      handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus('internal_error');\n  }\n  span.end();\n}\n","/* eslint-disable max-lines */\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromClient,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  hasTracingEnabled,\n  setHttpStatus,\n  spanToJSON,\n  spanToTraceHeader,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n  BAGGAGE_HEADER_NAME,\n  SENTRY_XHR_DATA_KEY,\n  addFetchInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  parseUrl,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nimport { instrumentFetchRequest } from '../common/fetch';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport { WINDOW } from './types';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n  /**\n   * @deprecated Will be removed in v8.\n   * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n   * trace header attachment.\n   */\n  tracingOrigins: Array<string | RegExp>;\n\n  /**\n   * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n   * headers attached.\n   *\n   * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n   * This option will be removed in v8.\n   *\n   * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n   */\n  tracePropagationTargets: Array<string | RegExp>;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  // TODO (v8): Remove this property\n  tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n  tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n  const {\n    traceFetch,\n    traceXHR,\n    // eslint-disable-next-line deprecation/deprecation\n    tracePropagationTargets,\n    // eslint-disable-next-line deprecation/deprecation\n    tracingOrigins,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n  // TODO(v8) Remove tracingOrigins here\n  // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n  // and we don't want to break the API. We can remove it in v8.\n  const shouldAttachHeadersWithTargets = (url: string): boolean =>\n    shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n  const spans: Record<string, Span> = {};\n\n  if (traceFetch) {\n    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n      }\n\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n  const { url } = spanToJSON(span).data || {};\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/');\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData: [string, string | number][] = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n  return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n  handlerData: HandlerDataXhr,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      setHttpStatus(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const scope = getCurrentScope();\n  const isolationScope = getIsolationScope();\n\n  const fullUrl = getFullURL(sentryXhrData.url);\n  const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n  const span = shouldCreateSpanResult\n    ? startInactiveSpan({\n        name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n        onlyIfParent: true,\n        attributes: {\n          type: 'xhr',\n          'http.method': sentryXhrData.method,\n          'http.url': fullUrl,\n          url: sentryXhrData.url,\n          'server.address': host,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n        },\n        op: 'http.client',\n      })\n    : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  const client = getClient();\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n    const { traceId, spanId, sampled, dsc } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n    const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n      dsc ||\n        (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client, scope)),\n    );\n\n    setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr: SentryWrappedXMLHttpRequest,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n\nfunction getFullURL(url: string): string | undefined {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n","/* eslint-disable max-lines */\nimport type { IdleTransaction } from '@sentry/core';\nimport { getActiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { getCurrentHub } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  TRACING_DEFAULTS,\n  addTracingExtensions,\n  getActiveTransaction,\n  spanToJSON,\n  startIdleTransaction,\n} from '@sentry/core';\nimport type {\n  Client,\n  Integration,\n  IntegrationFn,\n  StartSpanOptions,\n  Transaction,\n  TransactionContext,\n  TransactionSource,\n} from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport {\n  addHistoryInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  getDomElement,\n  logger,\n  propagationContextFromHeaders,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../common/debug-build';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { addPerformanceInstrumentationHandler } from './instrument';\nimport {\n  addPerformanceEntries,\n  startTrackingINP,\n  startTrackingInteractions,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { WINDOW } from './types';\nimport type { InteractionRouteNameMapping } from './web-vitals/types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n  /**\n   * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n   * by a moment where there are no in-progress spans.\n   *\n   * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n   * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n   * Time is in ms.\n   *\n   * Default: 1000\n   */\n  idleTimeout: number;\n\n  /**\n   * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n   * will be finished.\n   * Time is in ms.\n   *\n   * Default: 30000\n   */\n  finalTimeout: number;\n\n  /**\n   * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n   * the transaction will be finished.\n   * Time is in ms.\n   *\n   * Default: 5000\n   */\n  heartbeatInterval: number;\n\n  /**\n   * If a span should be created on page load.\n   * If this is set to `false`, this integration will not start the default page load span.\n   * Default: true\n   */\n  instrumentPageLoad: boolean;\n\n  /**\n   * If a span should be created on navigation (history change).\n   * If this is set to `false`, this integration will not start the default navigation spans.\n   * Default: true\n   */\n  instrumentNavigation: boolean;\n\n  /**\n   * Flag spans where tabs moved to background with \"cancelled\". Browser background tab timing is\n   * not suited towards doing precise measurements of operations. By default, we recommend that this option\n   * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n   *\n   * Default: true\n   */\n  markBackgroundSpan: boolean;\n\n  /**\n   * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableLongTask: boolean;\n\n  /**\n   * If true, Sentry will capture INP web vitals as standalone spans .\n   *\n   * Default: false\n   */\n  enableInp: boolean;\n\n  /**\n   * Sample rate to determine interaction span sampling.\n   * interactionsSampleRate is applied on top of the global tracesSampleRate.\n   * ie a tracesSampleRate of 0.1 and interactionsSampleRate of 0.5 will result in a 0.05 sample rate for interactions.\n   *\n   * Default: 1\n   */\n  interactionsSampleRate: number;\n\n  /**\n   * _metricOptions allows the user to send options to change how metrics are collected.\n   *\n   * _metricOptions is currently experimental.\n   *\n   * Default: undefined\n   */\n  _metricOptions?: Partial<{\n    /**\n     * @deprecated This property no longer has any effect and will be removed in v8.\n     */\n    _reportAllChanges: boolean;\n  }>;\n\n  /**\n   * _experiments allows the user to send options to define how this integration works.\n   * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n   *\n   * TODO (v8): Remove enableLongTask\n   *\n   * Default: undefined\n   */\n  _experiments: Partial<{\n    enableInteractions: boolean;\n  }>;\n\n  /**\n   * A callback which is called before a span for a pageload or navigation is started.\n   * It receives the options passed to `startSpan`, and expects to return an updated options object.\n   */\n  beforeStartSpan?: (options: StartSpanOptions) => StartSpanOptions;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableInp: false,\n  interactionsSampleRate: 1,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nexport const browserTracingIntegration = ((_options: Partial<BrowserTracingOptions> = {}) => {\n  const _hasSetTracePropagationTargets = DEBUG_BUILD\n    ? !!(\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      )\n    : false;\n\n  addTracingExtensions();\n\n  // TODO (v8): remove this block after tracingOrigins is removed\n  // Set tracePropagationTargets to tracingOrigins if specified by the user\n  // In case both are specified, tracePropagationTargets takes precedence\n  // eslint-disable-next-line deprecation/deprecation\n  if (!_options.tracePropagationTargets && _options.tracingOrigins) {\n    // eslint-disable-next-line deprecation/deprecation\n    _options.tracePropagationTargets = _options.tracingOrigins;\n  }\n\n  const options = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ..._options,\n  };\n\n  const _collectWebVitals = startTrackingWebVitals();\n\n  /** Stores a mapping of interactionIds from PerformanceEventTimings to the origin interaction path */\n  const interactionIdToRouteNameMapping: InteractionRouteNameMapping = {};\n  if (options.enableInp) {\n    startTrackingINP(interactionIdToRouteNameMapping, options.interactionsSampleRate);\n  }\n\n  if (options.enableLongTask) {\n    startTrackingLongTasks();\n  }\n  if (options._experiments.enableInteractions) {\n    startTrackingInteractions();\n  }\n\n  const latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  } = {\n    name: undefined,\n    context: undefined,\n  };\n\n  /** Create routing idle transaction. */\n  function _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n    // eslint-disable-next-line deprecation/deprecation\n    const hub = getCurrentHub();\n\n    const { beforeStartSpan, idleTimeout, finalTimeout, heartbeatInterval } = options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    let expandedContext: TransactionContext;\n    if (isPageloadTransaction) {\n      const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n      const baggage = isPageloadTransaction ? getMetaContent('baggage') : undefined;\n      const { traceId, dsc, parentSpanId, sampled } = propagationContextFromHeaders(sentryTrace, baggage);\n      expandedContext = {\n        traceId,\n        parentSpanId,\n        parentSampled: sampled,\n        ...context,\n        metadata: {\n          // eslint-disable-next-line deprecation/deprecation\n          ...context.metadata,\n          dynamicSamplingContext: dsc,\n        },\n        trimEnd: true,\n      };\n    } else {\n      expandedContext = {\n        trimEnd: true,\n        ...context,\n      };\n    }\n\n    const finalContext = beforeStartSpan ? beforeStartSpan(expandedContext) : expandedContext;\n\n    // If `beforeStartSpan` set a custom name, record that fact\n    // eslint-disable-next-line deprecation/deprecation\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? // eslint-disable-next-line deprecation/deprecation\n          { ...finalContext.metadata, source: 'custom' }\n        : // eslint-disable-next-line deprecation/deprecation\n          finalContext.metadata;\n\n    latestRoute.name = finalContext.name;\n    latestRoute.context = finalContext;\n\n    if (finalContext.sampled === false) {\n      DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n    }\n\n    DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n    const { location } = WINDOW;\n\n    const idleTransaction = startIdleTransaction(\n      hub,\n      finalContext,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n      isPageloadTransaction, // should wait for finish signal if it's a pageload transaction\n    );\n\n    if (isPageloadTransaction && WINDOW.document) {\n      WINDOW.document.addEventListener('readystatechange', () => {\n        if (['interactive', 'complete'].includes(WINDOW.document!.readyState)) {\n          idleTransaction.sendAutoFinishSignal();\n        }\n      });\n\n      if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n        idleTransaction.sendAutoFinishSignal();\n      }\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      _collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction as Transaction;\n  }\n\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setupOnce: () => {},\n    afterAllSetup(client) {\n      const clientOptions = client.getOptions();\n\n      const { markBackgroundSpan, traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, _experiments } =\n        options;\n\n      const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n      // There are three ways to configure tracePropagationTargets:\n      // 1. via top level client option `tracePropagationTargets`\n      // 2. via BrowserTracing option `tracePropagationTargets`\n      // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n      //\n      // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n      // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n      // This is done as it minimizes bundle size (we don't have to have undefined checks).\n      //\n      // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n      // eslint-disable-next-line deprecation/deprecation\n      const tracePropagationTargets = clientOptionsTracePropagationTargets || options.tracePropagationTargets;\n      if (DEBUG_BUILD && _hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n        logger.warn(\n          '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n        );\n      }\n\n      let activeSpan: Span | undefined;\n      let startingUrl: string | undefined = WINDOW.location && WINDOW.location.href;\n\n      if (client.on) {\n        client.on('startNavigationSpan', (context: StartSpanOptions) => {\n          if (activeSpan) {\n            DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${spanToJSON(activeSpan).op}`);\n            // If there's an open transaction on the scope, we need to finish it before creating an new one.\n            activeSpan.end();\n          }\n          activeSpan = _createRouteTransaction({\n            op: 'navigation',\n            ...context,\n          });\n        });\n\n        client.on('startPageLoadSpan', (context: StartSpanOptions) => {\n          if (activeSpan) {\n            DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${spanToJSON(activeSpan).op}`);\n            // If there's an open transaction on the scope, we need to finish it before creating an new one.\n            activeSpan.end();\n          }\n          activeSpan = _createRouteTransaction({\n            op: 'pageload',\n            ...context,\n          });\n        });\n      }\n\n      if (options.instrumentPageLoad && client.emit && WINDOW.location) {\n        const context: StartSpanOptions = {\n          name: WINDOW.location.pathname,\n          // pageload should always start at timeOrigin (and needs to be in s, not ms)\n          startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n          origin: 'auto.pageload.browser',\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n          },\n        };\n        startBrowserTracingPageLoadSpan(client, context);\n      }\n\n      if (options.instrumentNavigation && client.emit && WINDOW.location) {\n        addHistoryInstrumentationHandler(({ to, from }) => {\n          /**\n           * This early return is there to account for some cases where a navigation transaction starts right after\n           * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n           * create an uneccessary navigation transaction.\n           *\n           * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n           * only be caused in certain development environments where the usage of a hot module reloader is causing\n           * errors.\n           */\n          if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n            startingUrl = undefined;\n            return;\n          }\n\n          if (from !== to) {\n            startingUrl = undefined;\n            const context: StartSpanOptions = {\n              name: WINDOW.location.pathname,\n              origin: 'auto.navigation.browser',\n              attributes: {\n                [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n              },\n            };\n\n            startBrowserTracingNavigationSpan(client, context);\n          }\n        });\n      }\n\n      if (markBackgroundSpan) {\n        registerBackgroundTabDetection();\n      }\n\n      if (_experiments.enableInteractions) {\n        registerInteractionListener(options, latestRoute);\n      }\n\n      if (options.enableInp) {\n        registerInpInteractionListener(interactionIdToRouteNameMapping, latestRoute);\n      }\n\n      instrumentOutgoingRequests({\n        traceFetch,\n        traceXHR,\n        tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n      });\n    },\n    // TODO v8: Remove this again\n    // This is private API that we use to fix converted BrowserTracing integrations in Next.js & SvelteKit\n    options,\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Manually start a page load span.\n * This will only do something if the BrowserTracing integration has been setup.\n */\nexport function startBrowserTracingPageLoadSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n  if (!client.emit) {\n    return;\n  }\n\n  client.emit('startPageLoadSpan', spanOptions);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if the BrowserTracing integration has been setup.\n */\nexport function startBrowserTracingNavigationSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n  if (!client.emit) {\n    return;\n  }\n\n  client.emit('startNavigationSpan', spanOptions);\n\n  const span = getActiveSpan();\n  const op = span && spanToJSON(span).op;\n  return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n  options: BrowserTracingOptions,\n  latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  },\n): void {\n  let inflightInteractionTransaction: IdleTransaction | undefined;\n  const registerInteractionTransaction = (): void => {\n    const { idleTimeout, finalTimeout, heartbeatInterval } = options;\n    const op = 'ui.action.click';\n\n    // eslint-disable-next-line deprecation/deprecation\n    const currentTransaction = getActiveTransaction();\n    if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n        );\n      return undefined;\n    }\n\n    if (inflightInteractionTransaction) {\n      inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n      inflightInteractionTransaction.end();\n      inflightInteractionTransaction = undefined;\n    }\n\n    if (!latestRoute.name) {\n      DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n      return undefined;\n    }\n\n    const { location } = WINDOW;\n\n    const context: TransactionContext = {\n      name: latestRoute.name,\n      op,\n      trimEnd: true,\n      data: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.context ? getSource(latestRoute.context) : undefined || 'url',\n      },\n    };\n\n    inflightInteractionTransaction = startIdleTransaction(\n      // eslint-disable-next-line deprecation/deprecation\n      getCurrentHub(),\n      context,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n    );\n  };\n\n  ['click'].forEach(type => {\n    if (WINDOW.document) {\n      addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n    }\n  });\n}\n\nfunction isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n  return 'duration' in entry;\n}\n\n/** We store up to 10 interaction candidates max to cap memory usage. This is the same cap as getINP from web-vitals */\nconst MAX_INTERACTIONS = 10;\n\n/** Creates a listener on interaction entries, and maps interactionIds to the origin path of the interaction */\nfunction registerInpInteractionListener(\n  interactionIdToRouteNameMapping: InteractionRouteNameMapping,\n  latestRoute: {\n    name: string | undefined;\n    context: TransactionContext | undefined;\n  },\n): void {\n  const handleEntries = ({ entries }: { entries: PerformanceEntry[] }): void => {\n    const client = getClient();\n    // We need to get the replay, user, and activeTransaction from the current scope\n    // so that we can associate replay id, profile id, and a user display to the span\n    const replay =\n      client !== undefined && client.getIntegrationByName !== undefined\n        ? (client.getIntegrationByName('Replay') as Integration & { getReplayId: () => string })\n        : undefined;\n    const replayId = replay !== undefined ? replay.getReplayId() : undefined;\n    // eslint-disable-next-line deprecation/deprecation\n    const activeTransaction = getActiveTransaction();\n    const currentScope = getCurrentScope();\n    const user = currentScope !== undefined ? currentScope.getUser() : undefined;\n    entries.forEach(entry => {\n      if (isPerformanceEventTiming(entry)) {\n        const interactionId = entry.interactionId;\n        if (interactionId === undefined) {\n          return;\n        }\n        const existingInteraction = interactionIdToRouteNameMapping[interactionId];\n        const duration = entry.duration;\n        const startTime = entry.startTime;\n        const keys = Object.keys(interactionIdToRouteNameMapping);\n        const minInteractionId =\n          keys.length > 0\n            ? keys.reduce((a, b) => {\n                return interactionIdToRouteNameMapping[a].duration < interactionIdToRouteNameMapping[b].duration\n                  ? a\n                  : b;\n              })\n            : undefined;\n        // For a first input event to be considered, we must check that an interaction event does not already exist with the same duration and start time.\n        // This is also checked in the web-vitals library.\n        if (entry.entryType === 'first-input') {\n          const matchingEntry = keys\n            .map(key => interactionIdToRouteNameMapping[key])\n            .some(interaction => {\n              return interaction.duration === duration && interaction.startTime === startTime;\n            });\n          if (matchingEntry) {\n            return;\n          }\n        }\n        // Interactions with an id of 0 and are not first-input are not valid.\n        if (!interactionId) {\n          return;\n        }\n        // If the interaction already exists, we want to use the duration of the longest entry, since that is what the INP metric uses.\n        if (existingInteraction) {\n          existingInteraction.duration = Math.max(existingInteraction.duration, duration);\n        } else if (\n          keys.length < MAX_INTERACTIONS ||\n          minInteractionId === undefined ||\n          duration > interactionIdToRouteNameMapping[minInteractionId].duration\n        ) {\n          // If the interaction does not exist, we want to add it to the mapping if there is space, or if the duration is longer than the shortest entry.\n          const routeName = latestRoute.name;\n          const parentContext = latestRoute.context;\n          if (routeName && parentContext) {\n            if (minInteractionId && Object.keys(interactionIdToRouteNameMapping).length >= MAX_INTERACTIONS) {\n              // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n              delete interactionIdToRouteNameMapping[minInteractionId];\n            }\n            interactionIdToRouteNameMapping[interactionId] = {\n              routeName,\n              duration,\n              parentContext,\n              user,\n              activeTransaction,\n              replayId,\n              startTime,\n            };\n          }\n        }\n      }\n    });\n  };\n  addPerformanceInstrumentationHandler('event', handleEntries);\n  addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nfunction getSource(context: TransactionContext): TransactionSource | undefined {\n  const sourceFromAttributes = context.attributes && context.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  // eslint-disable-next-line deprecation/deprecation\n  const sourceFromMetadata = context.metadata && context.metadata.source;\n\n  return sourceFromAttributes || sourceFromData || sourceFromMetadata;\n}\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport function _optionalChain(ops: unknown[]): unknown {\n  let lastAccessLHS: unknown = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] as string;\n    const fn = ops[i + 1] as (intermediateValue: unknown) => unknown;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n","import type { Client, DsnComponents, Hub } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n *\n * TODO(v8): Remove Hub fallback type\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {\n  const client =\n    hubOrClient && isHub(hubOrClient)\n      ? // eslint-disable-next-line deprecation/deprecation\n        hubOrClient.getClient()\n      : hubOrClient;\n  const dsn = client && client.getDsn();\n  const tunnel = client && client.getOptions().tunnel;\n\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {\n  // eslint-disable-next-line deprecation/deprecation\n  return (hubOrClient as Hub).getClient !== undefined;\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  return (\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n  );\n}\n","import { _nullishCoalesce, _optionalChain } from '@sentry/utils';\nimport { addBreadcrumb, getClient, isSentryRequestUrl, getCurrentScope, addEventProcessor, prepareEvent, getIsolationScope, setContext, captureException, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger, uuid4, SENTRY_XHR_DATA_KEY, dropUndefinedKeys, stringMatchesSomePattern, addFetchInstrumentationHandler, addXhrInstrumentationHandler, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, updateRateLimits, isRateLimited, consoleSandbox, isBrowser } from '@sentry/utils';\nimport { addPerformanceInstrumentationHandler, addLcpInstrumentationHandler } from '@sentry-internal/tracing';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$1;\n(function (NodeType) {\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n    return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n    const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n    return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n    return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n    if (cssText.includes(' background-clip: text;') &&\n        !cssText.includes(' -webkit-background-clip: text;')) {\n        cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n    }\n    return cssText;\n}\nfunction escapeImportStatement(rule) {\n    const { cssText } = rule;\n    if (cssText.split('\"').length < 3)\n        return cssText;\n    const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n    if (rule.layerName === '') {\n        statement.push(`layer`);\n    }\n    else if (rule.layerName) {\n        statement.push(`layer(${rule.layerName})`);\n    }\n    if (rule.supportsText) {\n        statement.push(`supports(${rule.supportsText})`);\n    }\n    if (rule.media.length) {\n        statement.push(rule.media.mediaText);\n    }\n    return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n    try {\n        const rules = s.rules || s.cssRules;\n        return rules\n            ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n            : null;\n    }\n    catch (error) {\n        return null;\n    }\n}\nfunction stringifyRule(rule) {\n    let importStringified;\n    if (isCSSImportRule(rule)) {\n        try {\n            importStringified =\n                stringifyStylesheet(rule.styleSheet) ||\n                    escapeImportStatement(rule);\n        }\n        catch (error) {\n        }\n    }\n    else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n        return fixSafariColons(rule.cssText);\n    }\n    return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n    const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n    return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n    return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n    return 'selectorText' in rule;\n}\nclass Mirror {\n    constructor() {\n        this.idNodeMap = new Map();\n        this.nodeMetaMap = new WeakMap();\n    }\n    getId(n) {\n        if (!n)\n            return -1;\n        const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n        return _nullishCoalesce$1(id, () => ( -1));\n    }\n    getNode(id) {\n        return this.idNodeMap.get(id) || null;\n    }\n    getIds() {\n        return Array.from(this.idNodeMap.keys());\n    }\n    getMeta(n) {\n        return this.nodeMetaMap.get(n) || null;\n    }\n    removeNodeFromMap(n) {\n        const id = this.getId(n);\n        this.idNodeMap.delete(id);\n        if (n.childNodes) {\n            n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n        }\n    }\n    has(id) {\n        return this.idNodeMap.has(id);\n    }\n    hasNode(node) {\n        return this.nodeMetaMap.has(node);\n    }\n    add(n, meta) {\n        const id = meta.id;\n        this.idNodeMap.set(id, n);\n        this.nodeMetaMap.set(n, meta);\n    }\n    replace(id, n) {\n        const oldNode = this.getNode(id);\n        if (oldNode) {\n            const meta = this.nodeMetaMap.get(oldNode);\n            if (meta)\n                this.nodeMetaMap.set(n, meta);\n        }\n        this.idNodeMap.set(id, n);\n    }\n    reset() {\n        this.idNodeMap = new Map();\n        this.nodeMetaMap = new WeakMap();\n    }\n}\nfunction createMirror() {\n    return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n    if (tagName === 'OPTION') {\n        tagName = 'SELECT';\n    }\n    return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n        (type && maskInputOptions[type]) ||\n        type === 'password' ||\n        (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n    let text = value || '';\n    if (!isMasked) {\n        return text;\n    }\n    if (maskInputFn) {\n        text = maskInputFn(text, element);\n    }\n    return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n    return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n    return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n    const ctx = canvas.getContext('2d');\n    if (!ctx)\n        return true;\n    const chunkSize = 50;\n    for (let x = 0; x < canvas.width; x += chunkSize) {\n        for (let y = 0; y < canvas.height; y += chunkSize) {\n            const getImageData = ctx.getImageData;\n            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n                ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n                : getImageData;\n            const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n            if (pixelBuffer.some((pixel) => pixel !== 0))\n                return false;\n        }\n    }\n    return true;\n}\nfunction getInputType(element) {\n    const type = element.type;\n    return element.hasAttribute('data-rr-is-password')\n        ? 'password'\n        : type\n            ?\n                toLowerCase(type)\n            : null;\n}\nfunction getInputValue(el, tagName, type) {\n    if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n        return el.getAttribute('value') || '';\n    }\n    return el.value;\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n    return _id++;\n}\nfunction getValidTagName(element) {\n    if (element instanceof HTMLFormElement) {\n        return 'form';\n    }\n    const processedTagName = toLowerCase(element.tagName);\n    if (tagNameRegex.test(processedTagName)) {\n        return 'div';\n    }\n    return processedTagName;\n}\nfunction extractOrigin(url) {\n    let origin = '';\n    if (url.indexOf('//') > -1) {\n        origin = url.split('/').slice(0, 3).join('/');\n    }\n    else {\n        origin = url.split('/')[0];\n    }\n    origin = origin.split('?')[0];\n    return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n    return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n        const filePath = path1 || path2 || path3;\n        const maybeQuote = quote1 || quote2 || '';\n        if (!filePath) {\n            return origin;\n        }\n        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\n        }\n        if (DATA_URI.test(filePath)) {\n            return `url(${maybeQuote}${filePath}${maybeQuote})`;\n        }\n        if (filePath[0] === '/') {\n            return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n        }\n        const stack = href.split('/');\n        const parts = filePath.split('/');\n        stack.pop();\n        for (const part of parts) {\n            if (part === '.') {\n                continue;\n            }\n            else if (part === '..') {\n                stack.pop();\n            }\n            else {\n                stack.push(part);\n            }\n        }\n        return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n    });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n    if (attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    let pos = 0;\n    function collectCharacters(regEx) {\n        let chars;\n        const match = regEx.exec(attributeValue.substring(pos));\n        if (match) {\n            chars = match[0];\n            pos += chars.length;\n            return chars;\n        }\n        return '';\n    }\n    const output = [];\n    while (true) {\n        collectCharacters(SRCSET_COMMAS_OR_SPACES);\n        if (pos >= attributeValue.length) {\n            break;\n        }\n        let url = collectCharacters(SRCSET_NOT_SPACES);\n        if (url.slice(-1) === ',') {\n            url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n            output.push(url);\n        }\n        else {\n            let descriptorsStr = '';\n            url = absoluteToDoc(doc, url);\n            let inParens = false;\n            while (true) {\n                const c = attributeValue.charAt(pos);\n                if (c === '') {\n                    output.push((url + descriptorsStr).trim());\n                    break;\n                }\n                else if (!inParens) {\n                    if (c === ',') {\n                        pos += 1;\n                        output.push((url + descriptorsStr).trim());\n                        break;\n                    }\n                    else if (c === '(') {\n                        inParens = true;\n                    }\n                }\n                else {\n                    if (c === ')') {\n                        inParens = false;\n                    }\n                }\n                descriptorsStr += c;\n                pos += 1;\n            }\n        }\n    }\n    return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n    if (!attributeValue || attributeValue.trim() === '') {\n        return attributeValue;\n    }\n    const a = doc.createElement('a');\n    a.href = attributeValue;\n    return a.href;\n}\nfunction isSVGElement(el) {\n    return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n    const a = document.createElement('a');\n    a.href = '';\n    return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n    if (!value) {\n        return value;\n    }\n    if (name === 'src' ||\n        (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'xlink:href' && value[0] !== '#') {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'background' &&\n        (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n        return absoluteToDoc(doc, value);\n    }\n    else if (name === 'srcset') {\n        return getAbsoluteSrcsetString(doc, value);\n    }\n    else if (name === 'style') {\n        return absoluteToStylesheet(value, getHref());\n    }\n    else if (tagName === 'object' && name === 'data') {\n        return absoluteToDoc(doc, value);\n    }\n    if (typeof maskAttributeFn === 'function') {\n        return maskAttributeFn(name, value, element);\n    }\n    return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n    return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n    try {\n        if (unblockSelector && element.matches(unblockSelector)) {\n            return false;\n        }\n        if (typeof blockClass === 'string') {\n            if (element.classList.contains(blockClass)) {\n                return true;\n            }\n        }\n        else {\n            for (let eIndex = element.classList.length; eIndex--;) {\n                const className = element.classList[eIndex];\n                if (blockClass.test(className)) {\n                    return true;\n                }\n            }\n        }\n        if (blockSelector) {\n            return element.matches(blockSelector);\n        }\n    }\n    catch (e) {\n    }\n    return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n    for (let eIndex = el.classList.length; eIndex--;) {\n        const className = el.classList[eIndex];\n        if (regex.test(className)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n    if (!node)\n        return -1;\n    if (node.nodeType !== node.ELEMENT_NODE)\n        return -1;\n    if (distance > limit)\n        return -1;\n    if (matchPredicate(node))\n        return distance;\n    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n    return (node) => {\n        const el = node;\n        if (el === null)\n            return false;\n        try {\n            if (className) {\n                if (typeof className === 'string') {\n                    if (el.matches(`.${className}`))\n                        return true;\n                }\n                else if (elementClassMatchesRegex(el, className)) {\n                    return true;\n                }\n            }\n            if (selector && el.matches(selector))\n                return true;\n            return false;\n        }\n        catch (e2) {\n            return false;\n        }\n    };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n    try {\n        const el = node.nodeType === node.ELEMENT_NODE\n            ? node\n            : node.parentElement;\n        if (el === null)\n            return false;\n        if (el.tagName === 'INPUT') {\n            const autocomplete = el.getAttribute('autocomplete');\n            const disallowedAutocompleteValues = [\n                'current-password',\n                'new-password',\n                'cc-number',\n                'cc-exp',\n                'cc-exp-month',\n                'cc-exp-year',\n                'cc-csc',\n            ];\n            if (disallowedAutocompleteValues.includes(autocomplete)) {\n                return true;\n            }\n        }\n        let maskDistance = -1;\n        let unmaskDistance = -1;\n        if (maskAllText) {\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n            if (unmaskDistance < 0) {\n                return true;\n            }\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n        }\n        else {\n            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n            if (maskDistance < 0) {\n                return false;\n            }\n            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n        }\n        return maskDistance >= 0\n            ? unmaskDistance >= 0\n                ? maskDistance <= unmaskDistance\n                : true\n            : unmaskDistance >= 0\n                ? false\n                : !!maskAllText;\n    }\n    catch (e) {\n    }\n    return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n    const win = iframeEl.contentWindow;\n    if (!win) {\n        return;\n    }\n    let fired = false;\n    let readyState;\n    try {\n        readyState = win.document.readyState;\n    }\n    catch (error) {\n        return;\n    }\n    if (readyState !== 'complete') {\n        const timer = setTimeout(() => {\n            if (!fired) {\n                listener();\n                fired = true;\n            }\n        }, iframeLoadTimeout);\n        iframeEl.addEventListener('load', () => {\n            clearTimeout(timer);\n            fired = true;\n            listener();\n        });\n        return;\n    }\n    const blankUrl = 'about:blank';\n    if (win.location.href !== blankUrl ||\n        iframeEl.src === blankUrl ||\n        iframeEl.src === '') {\n        setTimeout(listener, 0);\n        return iframeEl.addEventListener('load', listener);\n    }\n    iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n    let fired = false;\n    let styleSheetLoaded;\n    try {\n        styleSheetLoaded = link.sheet;\n    }\n    catch (error) {\n        return;\n    }\n    if (styleSheetLoaded)\n        return;\n    const timer = setTimeout(() => {\n        if (!fired) {\n            listener();\n            fired = true;\n        }\n    }, styleSheetLoadTimeout);\n    link.addEventListener('load', () => {\n        clearTimeout(timer);\n        fired = true;\n        listener();\n    });\n}\nfunction serializeNode(n, options) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n    const rootId = getRootId(doc, mirror);\n    switch (n.nodeType) {\n        case n.DOCUMENT_NODE:\n            if (n.compatMode !== 'CSS1Compat') {\n                return {\n                    type: NodeType$1.Document,\n                    childNodes: [],\n                    compatMode: n.compatMode,\n                };\n            }\n            else {\n                return {\n                    type: NodeType$1.Document,\n                    childNodes: [],\n                };\n            }\n        case n.DOCUMENT_TYPE_NODE:\n            return {\n                type: NodeType$1.DocumentType,\n                name: n.name,\n                publicId: n.publicId,\n                systemId: n.systemId,\n                rootId,\n            };\n        case n.ELEMENT_NODE:\n            return serializeElementNode(n, {\n                doc,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                inlineStylesheet,\n                maskAttributeFn,\n                maskInputOptions,\n                maskInputFn,\n                dataURLOptions,\n                inlineImages,\n                recordCanvas,\n                keepIframeSrcFn,\n                newlyAddedElement,\n                rootId,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n            });\n        case n.TEXT_NODE:\n            return serializeTextNode(n, {\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                maskTextFn,\n                maskInputOptions,\n                maskInputFn,\n                rootId,\n            });\n        case n.CDATA_SECTION_NODE:\n            return {\n                type: NodeType$1.CDATA,\n                textContent: '',\n                rootId,\n            };\n        case n.COMMENT_NODE:\n            return {\n                type: NodeType$1.Comment,\n                textContent: n.textContent || '',\n                rootId,\n            };\n        default:\n            return false;\n    }\n}\nfunction getRootId(doc, mirror) {\n    if (!mirror.hasNode(doc))\n        return undefined;\n    const docId = mirror.getId(doc);\n    return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n    const parentTagName = n.parentNode && n.parentNode.tagName;\n    let textContent = n.textContent;\n    const isStyle = parentTagName === 'STYLE' ? true : undefined;\n    const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n    const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n    if (isStyle && textContent) {\n        try {\n            if (n.nextSibling || n.previousSibling) {\n            }\n            else if (_optionalChain$5([n, 'access', _6 => _6.parentNode, 'access', _7 => _7.sheet, 'optionalAccess', _8 => _8.cssRules])) {\n                textContent = stringifyStylesheet(n.parentNode.sheet);\n            }\n        }\n        catch (err) {\n            console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n        }\n        textContent = absoluteToStylesheet(textContent, getHref());\n    }\n    if (isScript) {\n        textContent = 'SCRIPT_PLACEHOLDER';\n    }\n    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n        textContent = maskTextFn\n            ? maskTextFn(textContent, n.parentElement)\n            : textContent.replace(/[\\S]/g, '*');\n    }\n    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n        textContent = maskInputFn\n            ? maskInputFn(textContent, n.parentNode)\n            : textContent.replace(/[\\S]/g, '*');\n    }\n    if (parentTagName === 'OPTION' && textContent) {\n        const isInputMasked = shouldMaskInput({\n            type: null,\n            tagName: parentTagName,\n            maskInputOptions,\n        });\n        textContent = maskInputValue({\n            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n            element: n,\n            value: textContent,\n            maskInputFn,\n        });\n    }\n    return {\n        type: NodeType$1.Text,\n        textContent: textContent || '',\n        isStyle,\n        rootId,\n    };\n}\nfunction serializeElementNode(n, options) {\n    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n    const tagName = getValidTagName(n);\n    let attributes = {};\n    const len = n.attributes.length;\n    for (let i = 0; i < len; i++) {\n        const attr = n.attributes[i];\n        if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n            attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n        }\n    }\n    if (tagName === 'link' && inlineStylesheet) {\n        const stylesheet = Array.from(doc.styleSheets).find((s) => {\n            return s.href === n.href;\n        });\n        let cssText = null;\n        if (stylesheet) {\n            cssText = stringifyStylesheet(stylesheet);\n        }\n        if (cssText) {\n            delete attributes.rel;\n            delete attributes.href;\n            attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n        }\n    }\n    if (tagName === 'style' &&\n        n.sheet &&\n        !(n.innerText || n.textContent || '').trim().length) {\n        const cssText = stringifyStylesheet(n.sheet);\n        if (cssText) {\n            attributes._cssText = absoluteToStylesheet(cssText, getHref());\n        }\n    }\n    if (tagName === 'input' ||\n        tagName === 'textarea' ||\n        tagName === 'select' ||\n        tagName === 'option') {\n        const el = n;\n        const type = getInputType(el);\n        const value = getInputValue(el, toUpperCase(tagName), type);\n        const checked = el.checked;\n        if (type !== 'submit' && type !== 'button' && value) {\n            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n                type,\n                tagName: toUpperCase(tagName),\n                maskInputOptions,\n            }));\n            attributes.value = maskInputValue({\n                isMasked: forceMask,\n                element: el,\n                value,\n                maskInputFn,\n            });\n        }\n        if (checked) {\n            attributes.checked = checked;\n        }\n    }\n    if (tagName === 'option') {\n        if (n.selected && !maskInputOptions['select']) {\n            attributes.selected = true;\n        }\n        else {\n            delete attributes.selected;\n        }\n    }\n    if (tagName === 'canvas' && recordCanvas) {\n        if (n.__context === '2d') {\n            if (!is2DCanvasBlank(n)) {\n                attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            }\n        }\n        else if (!('__context' in n)) {\n            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            const blankCanvas = document.createElement('canvas');\n            blankCanvas.width = n.width;\n            blankCanvas.height = n.height;\n            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            if (canvasDataURL !== blankCanvasDataURL) {\n                attributes.rr_dataURL = canvasDataURL;\n            }\n        }\n    }\n    if (tagName === 'img' && inlineImages) {\n        if (!canvasService) {\n            canvasService = doc.createElement('canvas');\n            canvasCtx = canvasService.getContext('2d');\n        }\n        const image = n;\n        const oldValue = image.crossOrigin;\n        image.crossOrigin = 'anonymous';\n        const recordInlineImage = () => {\n            image.removeEventListener('load', recordInlineImage);\n            try {\n                canvasService.width = image.naturalWidth;\n                canvasService.height = image.naturalHeight;\n                canvasCtx.drawImage(image, 0, 0);\n                attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n            }\n            catch (err) {\n                console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n            }\n            oldValue\n                ? (attributes.crossOrigin = oldValue)\n                : image.removeAttribute('crossorigin');\n        };\n        if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n        else\n            image.addEventListener('load', recordInlineImage);\n    }\n    if (tagName === 'audio' || tagName === 'video') {\n        attributes.rr_mediaState = n.paused\n            ? 'paused'\n            : 'played';\n        attributes.rr_mediaCurrentTime = n.currentTime;\n    }\n    if (!newlyAddedElement) {\n        if (n.scrollLeft) {\n            attributes.rr_scrollLeft = n.scrollLeft;\n        }\n        if (n.scrollTop) {\n            attributes.rr_scrollTop = n.scrollTop;\n        }\n    }\n    if (needBlock) {\n        const { width, height } = n.getBoundingClientRect();\n        attributes = {\n            class: attributes.class,\n            rr_width: `${width}px`,\n            rr_height: `${height}px`,\n        };\n    }\n    if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n        if (!n.contentDocument) {\n            attributes.rr_src = attributes.src;\n        }\n        delete attributes.src;\n    }\n    let isCustomElement;\n    try {\n        if (customElements.get(tagName))\n            isCustomElement = true;\n    }\n    catch (e) {\n    }\n    return {\n        type: NodeType$1.Element,\n        tagName,\n        attributes,\n        childNodes: [],\n        isSVG: isSVGElement(n) || undefined,\n        needBlock,\n        rootId,\n        isCustom: isCustomElement,\n    };\n}\nfunction lowerIfExists(maybeAttr) {\n    if (maybeAttr === undefined || maybeAttr === null) {\n        return '';\n    }\n    else {\n        return maybeAttr.toLowerCase();\n    }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n    if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n        return true;\n    }\n    else if (sn.type === NodeType$1.Element) {\n        if (slimDOMOptions.script &&\n            (sn.tagName === 'script' ||\n                (sn.tagName === 'link' &&\n                    (sn.attributes.rel === 'preload' ||\n                        sn.attributes.rel === 'modulepreload') &&\n                    sn.attributes.as === 'script') ||\n                (sn.tagName === 'link' &&\n                    sn.attributes.rel === 'prefetch' &&\n                    typeof sn.attributes.href === 'string' &&\n                    sn.attributes.href.endsWith('.js')))) {\n            return true;\n        }\n        else if (slimDOMOptions.headFavicon &&\n            ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n                (sn.tagName === 'meta' &&\n                    (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n                        lowerIfExists(sn.attributes.name) === 'application-name' ||\n                        lowerIfExists(sn.attributes.rel) === 'icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n                        lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n            return true;\n        }\n        else if (sn.tagName === 'meta') {\n            if (slimDOMOptions.headMetaDescKeywords &&\n                lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaSocial &&\n                (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n                    lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n                    lowerIfExists(sn.attributes.name) === 'pinterest')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaRobots &&\n                (lowerIfExists(sn.attributes.name) === 'robots' ||\n                    lowerIfExists(sn.attributes.name) === 'googlebot' ||\n                    lowerIfExists(sn.attributes.name) === 'bingbot')) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaHttpEquiv &&\n                sn.attributes['http-equiv'] !== undefined) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaAuthorship &&\n                (lowerIfExists(sn.attributes.name) === 'author' ||\n                    lowerIfExists(sn.attributes.name) === 'generator' ||\n                    lowerIfExists(sn.attributes.name) === 'framework' ||\n                    lowerIfExists(sn.attributes.name) === 'publisher' ||\n                    lowerIfExists(sn.attributes.name) === 'progid' ||\n                    lowerIfExists(sn.attributes.property).match(/^article:/) ||\n                    lowerIfExists(sn.attributes.property).match(/^product:/))) {\n                return true;\n            }\n            else if (slimDOMOptions.headMetaVerification &&\n                (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n                    lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n                    lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n                    lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n                    lowerIfExists(sn.attributes.name) === 'verification' ||\n                    lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction serializeNodeWithId(n, options) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n    let { preserveWhiteSpace = true } = options;\n    const _serializedNode = serializeNode(n, {\n        doc,\n        mirror,\n        blockClass,\n        blockSelector,\n        maskAllText,\n        unblockSelector,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        inlineStylesheet,\n        maskInputOptions,\n        maskAttributeFn,\n        maskTextFn,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n    });\n    if (!_serializedNode) {\n        console.warn(n, 'not serialized');\n        return null;\n    }\n    let id;\n    if (mirror.hasNode(n)) {\n        id = mirror.getId(n);\n    }\n    else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n        (!preserveWhiteSpace &&\n            _serializedNode.type === NodeType$1.Text &&\n            !_serializedNode.isStyle &&\n            !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n        id = IGNORED_NODE;\n    }\n    else {\n        id = genId();\n    }\n    const serializedNode = Object.assign(_serializedNode, { id });\n    mirror.add(n, serializedNode);\n    if (id === IGNORED_NODE) {\n        return null;\n    }\n    if (onSerialize) {\n        onSerialize(n);\n    }\n    let recordChild = !skipChild;\n    if (serializedNode.type === NodeType$1.Element) {\n        recordChild = recordChild && !serializedNode.needBlock;\n        delete serializedNode.needBlock;\n        const shadowRoot = n.shadowRoot;\n        if (shadowRoot && isNativeShadowDom(shadowRoot))\n            serializedNode.isShadowHost = true;\n    }\n    if ((serializedNode.type === NodeType$1.Document ||\n        serializedNode.type === NodeType$1.Element) &&\n        recordChild) {\n        if (slimDOMOptions.headWhitespace &&\n            serializedNode.type === NodeType$1.Element &&\n            serializedNode.tagName === 'head') {\n            preserveWhiteSpace = false;\n        }\n        const bypassOptions = {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            maskAllText,\n            unblockSelector,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n        };\n        for (const childN of Array.from(n.childNodes)) {\n            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n            if (serializedChildNode) {\n                serializedNode.childNodes.push(serializedChildNode);\n            }\n        }\n        if (isElement$1(n) && n.shadowRoot) {\n            for (const childN of Array.from(n.shadowRoot.childNodes)) {\n                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n                if (serializedChildNode) {\n                    isNativeShadowDom(n.shadowRoot) &&\n                        (serializedChildNode.isShadow = true);\n                    serializedNode.childNodes.push(serializedChildNode);\n                }\n            }\n        }\n    }\n    if (n.parentNode &&\n        isShadowRoot(n.parentNode) &&\n        isNativeShadowDom(n.parentNode)) {\n        serializedNode.isShadow = true;\n    }\n    if (serializedNode.type === NodeType$1.Element &&\n        serializedNode.tagName === 'iframe') {\n        onceIframeLoaded(n, () => {\n            const iframeDoc = n.contentDocument;\n            if (iframeDoc && onIframeLoad) {\n                const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n                    doc: iframeDoc,\n                    mirror,\n                    blockClass,\n                    blockSelector,\n                    unblockSelector,\n                    maskAllText,\n                    maskTextClass,\n                    unmaskTextClass,\n                    maskTextSelector,\n                    unmaskTextSelector,\n                    skipChild: false,\n                    inlineStylesheet,\n                    maskInputOptions,\n                    maskAttributeFn,\n                    maskTextFn,\n                    maskInputFn,\n                    slimDOMOptions,\n                    dataURLOptions,\n                    inlineImages,\n                    recordCanvas,\n                    preserveWhiteSpace,\n                    onSerialize,\n                    onIframeLoad,\n                    iframeLoadTimeout,\n                    onStylesheetLoad,\n                    stylesheetLoadTimeout,\n                    keepIframeSrcFn,\n                });\n                if (serializedIframeNode) {\n                    onIframeLoad(n, serializedIframeNode);\n                }\n            }\n        }, iframeLoadTimeout);\n    }\n    if (serializedNode.type === NodeType$1.Element &&\n        serializedNode.tagName === 'link' &&\n        serializedNode.attributes.rel === 'stylesheet') {\n        onceStylesheetLoaded(n, () => {\n            if (onStylesheetLoad) {\n                const serializedLinkNode = serializeNodeWithId(n, {\n                    doc,\n                    mirror,\n                    blockClass,\n                    blockSelector,\n                    unblockSelector,\n                    maskAllText,\n                    maskTextClass,\n                    unmaskTextClass,\n                    maskTextSelector,\n                    unmaskTextSelector,\n                    skipChild: false,\n                    inlineStylesheet,\n                    maskInputOptions,\n                    maskAttributeFn,\n                    maskTextFn,\n                    maskInputFn,\n                    slimDOMOptions,\n                    dataURLOptions,\n                    inlineImages,\n                    recordCanvas,\n                    preserveWhiteSpace,\n                    onSerialize,\n                    onIframeLoad,\n                    iframeLoadTimeout,\n                    onStylesheetLoad,\n                    stylesheetLoadTimeout,\n                    keepIframeSrcFn,\n                });\n                if (serializedLinkNode) {\n                    onStylesheetLoad(n, serializedLinkNode);\n                }\n            }\n        }, stylesheetLoadTimeout);\n    }\n    return serializedNode;\n}\nfunction snapshot(n, options) {\n    const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n    const maskInputOptions = maskAllInputs === true\n        ? {\n            color: true,\n            date: true,\n            'datetime-local': true,\n            email: true,\n            month: true,\n            number: true,\n            range: true,\n            search: true,\n            tel: true,\n            text: true,\n            time: true,\n            url: true,\n            week: true,\n            textarea: true,\n            select: true,\n        }\n        : maskAllInputs === false\n            ? {}\n            : maskAllInputs;\n    const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n        ?\n            {\n                script: true,\n                comment: true,\n                headFavicon: true,\n                headWhitespace: true,\n                headMetaDescKeywords: slimDOM === 'all',\n                headMetaSocial: true,\n                headMetaRobots: true,\n                headMetaHttpEquiv: true,\n                headMetaAuthorship: true,\n                headMetaVerification: true,\n            }\n        : slimDOM === false\n            ? {}\n            : slimDOM;\n    return serializeNodeWithId(n, {\n        doc: n,\n        mirror,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        skipChild: false,\n        inlineStylesheet,\n        maskInputOptions,\n        maskAttributeFn,\n        maskTextFn,\n        maskInputFn,\n        slimDOMOptions,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        preserveWhiteSpace,\n        onSerialize,\n        onIframeLoad,\n        iframeLoadTimeout,\n        onStylesheetLoad,\n        stylesheetLoadTimeout,\n        keepIframeSrcFn,\n        newlyAddedElement: false,\n    });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n    const options = { capture: true, passive: true };\n    target.addEventListener(type, fn, options);\n    return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n    '\\r\\n' +\n    'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n    '\\r\\n' +\n    'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n    map: {},\n    getId() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return -1;\n    },\n    getNode() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return null;\n    },\n    removeNodeFromMap() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    },\n    has() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n        return false;\n    },\n    reset() {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n    _mirror = new Proxy(_mirror, {\n        get(target, prop, receiver) {\n            if (prop === 'map') {\n                console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n            }\n            return Reflect.get(target, prop, receiver);\n        },\n    });\n}\nfunction throttle$1(func, wait, options = {}) {\n    let timeout = null;\n    let previous = 0;\n    return function (...args) {\n        const now = Date.now();\n        if (!previous && options.leading === false) {\n            previous = now;\n        }\n        const remaining = wait - (now - previous);\n        const context = this;\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout$1(timeout);\n                timeout = null;\n            }\n            previous = now;\n            func.apply(context, args);\n        }\n        else if (!timeout && options.trailing !== false) {\n            timeout = setTimeout$1(() => {\n                previous = options.leading === false ? 0 : Date.now();\n                timeout = null;\n                func.apply(context, args);\n            }, remaining);\n        }\n    };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n    const original = win.Object.getOwnPropertyDescriptor(target, key);\n    win.Object.defineProperty(target, key, isRevoked\n        ? d\n        : {\n            set(value) {\n                setTimeout$1(() => {\n                    d.set.call(this, value);\n                }, 0);\n                if (original && original.set) {\n                    original.set.call(this, value);\n                }\n            },\n        });\n    return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n    try {\n        if (!(name in source)) {\n            return () => {\n            };\n        }\n        const original = source[name];\n        const wrapped = replacement(original);\n        if (typeof wrapped === 'function') {\n            wrapped.prototype = wrapped.prototype || {};\n            Object.defineProperties(wrapped, {\n                __rrweb_original__: {\n                    enumerable: false,\n                    value: original,\n                },\n            });\n        }\n        source[name] = wrapped;\n        return () => {\n            source[name] = original;\n        };\n    }\n    catch (e2) {\n        return () => {\n        };\n    }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n    nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n    const doc = win.document;\n    return {\n        left: doc.scrollingElement\n            ? doc.scrollingElement.scrollLeft\n            : win.pageXOffset !== undefined\n                ? win.pageXOffset\n                : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n                    0,\n        top: doc.scrollingElement\n            ? doc.scrollingElement.scrollTop\n            : win.pageYOffset !== undefined\n                ? win.pageYOffset\n                : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n                    _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n                    0,\n    };\n}\nfunction getWindowHeight() {\n    return (window.innerHeight ||\n        (document.documentElement && document.documentElement.clientHeight) ||\n        (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n    return (window.innerWidth ||\n        (document.documentElement && document.documentElement.clientWidth) ||\n        (document.body && document.body.clientWidth));\n}\nfunction closestElementOfNode(node) {\n    if (!node) {\n        return null;\n    }\n    const el = node.nodeType === node.ELEMENT_NODE\n        ? node\n        : node.parentElement;\n    return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n    if (!node) {\n        return false;\n    }\n    const el = closestElementOfNode(node);\n    if (!el) {\n        return false;\n    }\n    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n    if (!checkAncestors) {\n        const isUnblocked = unblockSelector && el.matches(unblockSelector);\n        return blockedPredicate(el) && !isUnblocked;\n    }\n    const blockDistance = distanceToMatch(el, blockedPredicate);\n    let unblockDistance = -1;\n    if (blockDistance < 0) {\n        return false;\n    }\n    if (unblockSelector) {\n        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n    }\n    if (blockDistance > -1 && unblockDistance < 0) {\n        return true;\n    }\n    return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n    return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n    return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n    if (isShadowRoot(target)) {\n        return false;\n    }\n    const id = mirror.getId(target);\n    if (!mirror.has(id)) {\n        return true;\n    }\n    if (target.parentNode &&\n        target.parentNode.nodeType === target.DOCUMENT_NODE) {\n        return false;\n    }\n    if (!target.parentNode) {\n        return true;\n    }\n    return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n    return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n    if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n        win.NodeList.prototype.forEach = Array.prototype\n            .forEach;\n    }\n    if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n        win.DOMTokenList.prototype.forEach = Array.prototype\n            .forEach;\n    }\n    if (!Node.prototype.contains) {\n        Node.prototype.contains = (...args) => {\n            let node = args[0];\n            if (!(0 in args)) {\n                throw new TypeError('1 argument is required');\n            }\n            do {\n                if (this === node) {\n                    return true;\n                }\n            } while ((node = node && node.parentNode));\n            return false;\n        };\n    }\n}\nfunction isSerializedIframe(n, mirror) {\n    return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n    return Boolean(n.nodeName === 'LINK' &&\n        n.nodeType === n.ELEMENT_NODE &&\n        n.getAttribute &&\n        n.getAttribute('rel') === 'stylesheet' &&\n        mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n    return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n    constructor() {\n        this.id = 1;\n        this.styleIDMap = new WeakMap();\n        this.idStyleMap = new Map();\n    }\n    getId(stylesheet) {\n        return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n    }\n    has(stylesheet) {\n        return this.styleIDMap.has(stylesheet);\n    }\n    add(stylesheet, id) {\n        if (this.has(stylesheet))\n            return this.getId(stylesheet);\n        let newId;\n        if (id === undefined) {\n            newId = this.id++;\n        }\n        else\n            newId = id;\n        this.styleIDMap.set(stylesheet, newId);\n        this.idStyleMap.set(newId, stylesheet);\n        return newId;\n    }\n    getStyle(id) {\n        return this.idStyleMap.get(id) || null;\n    }\n    reset() {\n        this.styleIDMap = new WeakMap();\n        this.idStyleMap = new Map();\n        this.id = 1;\n    }\n    generateId() {\n        return this.id++;\n    }\n}\nfunction getShadowHost(n) {\n    let shadowHost = null;\n    if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n        n.getRootNode().host)\n        shadowHost = n.getRootNode().host;\n    return shadowHost;\n}\nfunction getRootShadowHost(n) {\n    let rootShadowHost = n;\n    let shadowHost;\n    while ((shadowHost = getShadowHost(rootShadowHost)))\n        rootShadowHost = shadowHost;\n    return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n    const doc = n.ownerDocument;\n    if (!doc)\n        return false;\n    const shadowHost = getRootShadowHost(n);\n    return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n    const doc = n.ownerDocument;\n    if (!doc)\n        return false;\n    return doc.contains(n) || shadowHostInDom(n);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n    const cached = cachedImplementations[name];\n    if (cached) {\n        return cached;\n    }\n    const document = window.document;\n    let impl = window[name];\n    if (document && typeof document.createElement === 'function') {\n        try {\n            const sandbox = document.createElement('iframe');\n            sandbox.hidden = true;\n            document.head.appendChild(sandbox);\n            const contentWindow = sandbox.contentWindow;\n            if (contentWindow && contentWindow[name]) {\n                impl =\n                    contentWindow[name];\n            }\n            document.head.removeChild(sandbox);\n        }\n        catch (e) {\n        }\n    }\n    return (cachedImplementations[name] = impl.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n    return getImplementation('requestAnimationFrame')(...rest);\n}\nfunction setTimeout$1(...rest) {\n    return getImplementation('setTimeout')(...rest);\n}\nfunction clearTimeout$1(...rest) {\n    return getImplementation('clearTimeout')(...rest);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n    return '__ln' in n;\n}\nclass DoubleLinkedList {\n    constructor() {\n        this.length = 0;\n        this.head = null;\n        this.tail = null;\n    }\n    get(position) {\n        if (position >= this.length) {\n            throw new Error('Position outside of list range');\n        }\n        let current = this.head;\n        for (let index = 0; index < position; index++) {\n            current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n        }\n        return current;\n    }\n    addNode(n) {\n        const node = {\n            value: n,\n            previous: null,\n            next: null,\n        };\n        n.__ln = node;\n        if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n            const current = n.previousSibling.__ln.next;\n            node.next = current;\n            node.previous = n.previousSibling.__ln;\n            n.previousSibling.__ln.next = node;\n            if (current) {\n                current.previous = node;\n            }\n        }\n        else if (n.nextSibling &&\n            isNodeInLinkedList(n.nextSibling) &&\n            n.nextSibling.__ln.previous) {\n            const current = n.nextSibling.__ln.previous;\n            node.previous = current;\n            node.next = n.nextSibling.__ln;\n            n.nextSibling.__ln.previous = node;\n            if (current) {\n                current.next = node;\n            }\n        }\n        else {\n            if (this.head) {\n                this.head.previous = node;\n            }\n            node.next = this.head;\n            this.head = node;\n        }\n        if (node.next === null) {\n            this.tail = node;\n        }\n        this.length++;\n    }\n    removeNode(n) {\n        const current = n.__ln;\n        if (!this.head) {\n            return;\n        }\n        if (!current.previous) {\n            this.head = current.next;\n            if (this.head) {\n                this.head.previous = null;\n            }\n            else {\n                this.tail = null;\n            }\n        }\n        else {\n            current.previous.next = current.next;\n            if (current.next) {\n                current.next.previous = current.previous;\n            }\n            else {\n                this.tail = current.previous;\n            }\n        }\n        if (n.__ln) {\n            delete n.__ln;\n        }\n        this.length--;\n    }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n    constructor() {\n        this.frozen = false;\n        this.locked = false;\n        this.texts = [];\n        this.attributes = [];\n        this.attributeMap = new WeakMap();\n        this.removes = [];\n        this.mapRemoves = [];\n        this.movedMap = {};\n        this.addedSet = new Set();\n        this.movedSet = new Set();\n        this.droppedSet = new Set();\n        this.processMutations = (mutations) => {\n            mutations.forEach(this.processMutation);\n            this.emit();\n        };\n        this.emit = () => {\n            if (this.frozen || this.locked) {\n                return;\n            }\n            const adds = [];\n            const addedIds = new Set();\n            const addList = new DoubleLinkedList();\n            const getNextId = (n) => {\n                let ns = n;\n                let nextId = IGNORED_NODE;\n                while (nextId === IGNORED_NODE) {\n                    ns = ns && ns.nextSibling;\n                    nextId = ns && this.mirror.getId(ns);\n                }\n                return nextId;\n            };\n            const pushAdd = (n) => {\n                if (!n.parentNode || !inDom(n)) {\n                    return;\n                }\n                const parentId = isShadowRoot(n.parentNode)\n                    ? this.mirror.getId(getShadowHost(n))\n                    : this.mirror.getId(n.parentNode);\n                const nextId = getNextId(n);\n                if (parentId === -1 || nextId === -1) {\n                    return addList.addNode(n);\n                }\n                const sn = serializeNodeWithId(n, {\n                    doc: this.doc,\n                    mirror: this.mirror,\n                    blockClass: this.blockClass,\n                    blockSelector: this.blockSelector,\n                    maskAllText: this.maskAllText,\n                    unblockSelector: this.unblockSelector,\n                    maskTextClass: this.maskTextClass,\n                    unmaskTextClass: this.unmaskTextClass,\n                    maskTextSelector: this.maskTextSelector,\n                    unmaskTextSelector: this.unmaskTextSelector,\n                    skipChild: true,\n                    newlyAddedElement: true,\n                    inlineStylesheet: this.inlineStylesheet,\n                    maskInputOptions: this.maskInputOptions,\n                    maskAttributeFn: this.maskAttributeFn,\n                    maskTextFn: this.maskTextFn,\n                    maskInputFn: this.maskInputFn,\n                    slimDOMOptions: this.slimDOMOptions,\n                    dataURLOptions: this.dataURLOptions,\n                    recordCanvas: this.recordCanvas,\n                    inlineImages: this.inlineImages,\n                    onSerialize: (currentN) => {\n                        if (isSerializedIframe(currentN, this.mirror)) {\n                            this.iframeManager.addIframe(currentN);\n                        }\n                        if (isSerializedStylesheet(currentN, this.mirror)) {\n                            this.stylesheetManager.trackLinkElement(currentN);\n                        }\n                        if (hasShadowRoot(n)) {\n                            this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n                        }\n                    },\n                    onIframeLoad: (iframe, childSn) => {\n                        this.iframeManager.attachIframe(iframe, childSn);\n                        this.shadowDomManager.observeAttachShadow(iframe);\n                    },\n                    onStylesheetLoad: (link, childSn) => {\n                        this.stylesheetManager.attachLinkElement(link, childSn);\n                    },\n                });\n                if (sn) {\n                    adds.push({\n                        parentId,\n                        nextId,\n                        node: sn,\n                    });\n                    addedIds.add(sn.id);\n                }\n            };\n            while (this.mapRemoves.length) {\n                this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n            }\n            for (const n of this.movedSet) {\n                if (isParentRemoved(this.removes, n, this.mirror) &&\n                    !this.movedSet.has(n.parentNode)) {\n                    continue;\n                }\n                pushAdd(n);\n            }\n            for (const n of this.addedSet) {\n                if (!isAncestorInSet(this.droppedSet, n) &&\n                    !isParentRemoved(this.removes, n, this.mirror)) {\n                    pushAdd(n);\n                }\n                else if (isAncestorInSet(this.movedSet, n)) {\n                    pushAdd(n);\n                }\n                else {\n                    this.droppedSet.add(n);\n                }\n            }\n            let candidate = null;\n            while (addList.length) {\n                let node = null;\n                if (candidate) {\n                    const parentId = this.mirror.getId(candidate.value.parentNode);\n                    const nextId = getNextId(candidate.value);\n                    if (parentId !== -1 && nextId !== -1) {\n                        node = candidate;\n                    }\n                }\n                if (!node) {\n                    let tailNode = addList.tail;\n                    while (tailNode) {\n                        const _node = tailNode;\n                        tailNode = tailNode.previous;\n                        if (_node) {\n                            const parentId = this.mirror.getId(_node.value.parentNode);\n                            const nextId = getNextId(_node.value);\n                            if (nextId === -1)\n                                continue;\n                            else if (parentId !== -1) {\n                                node = _node;\n                                break;\n                            }\n                            else {\n                                const unhandledNode = _node.value;\n                                if (unhandledNode.parentNode &&\n                                    unhandledNode.parentNode.nodeType ===\n                                        Node.DOCUMENT_FRAGMENT_NODE) {\n                                    const shadowHost = unhandledNode.parentNode\n                                        .host;\n                                    const parentId = this.mirror.getId(shadowHost);\n                                    if (parentId !== -1) {\n                                        node = _node;\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                if (!node) {\n                    while (addList.head) {\n                        addList.removeNode(addList.head.value);\n                    }\n                    break;\n                }\n                candidate = node.previous;\n                addList.removeNode(node.value);\n                pushAdd(node.value);\n            }\n            const payload = {\n                texts: this.texts\n                    .map((text) => ({\n                    id: this.mirror.getId(text.node),\n                    value: text.value,\n                }))\n                    .filter((text) => !addedIds.has(text.id))\n                    .filter((text) => this.mirror.has(text.id)),\n                attributes: this.attributes\n                    .map((attribute) => {\n                    const { attributes } = attribute;\n                    if (typeof attributes.style === 'string') {\n                        const diffAsStr = JSON.stringify(attribute.styleDiff);\n                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n                        if (diffAsStr.length < attributes.style.length) {\n                            if ((diffAsStr + unchangedAsStr).split('var(').length ===\n                                attributes.style.split('var(').length) {\n                                attributes.style = attribute.styleDiff;\n                            }\n                        }\n                    }\n                    return {\n                        id: this.mirror.getId(attribute.node),\n                        attributes: attributes,\n                    };\n                })\n                    .filter((attribute) => !addedIds.has(attribute.id))\n                    .filter((attribute) => this.mirror.has(attribute.id)),\n                removes: this.removes,\n                adds,\n            };\n            if (!payload.texts.length &&\n                !payload.attributes.length &&\n                !payload.removes.length &&\n                !payload.adds.length) {\n                return;\n            }\n            this.texts = [];\n            this.attributes = [];\n            this.attributeMap = new WeakMap();\n            this.removes = [];\n            this.addedSet = new Set();\n            this.movedSet = new Set();\n            this.droppedSet = new Set();\n            this.movedMap = {};\n            this.mutationCb(payload);\n        };\n        this.processMutation = (m) => {\n            if (isIgnored(m.target, this.mirror)) {\n                return;\n            }\n            switch (m.type) {\n                case 'characterData': {\n                    const value = m.target.textContent;\n                    if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n                        value !== m.oldValue) {\n                        this.texts.push({\n                            value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n                                ? this.maskTextFn\n                                    ? this.maskTextFn(value, closestElementOfNode(m.target))\n                                    : value.replace(/[\\S]/g, '*')\n                                : value,\n                            node: m.target,\n                        });\n                    }\n                    break;\n                }\n                case 'attributes': {\n                    const target = m.target;\n                    let attributeName = m.attributeName;\n                    let value = m.target.getAttribute(attributeName);\n                    if (attributeName === 'value') {\n                        const type = getInputType(target);\n                        const tagName = target.tagName;\n                        value = getInputValue(target, tagName, type);\n                        const isInputMasked = shouldMaskInput({\n                            maskInputOptions: this.maskInputOptions,\n                            tagName,\n                            type,\n                        });\n                        const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n                        value = maskInputValue({\n                            isMasked: forceMask,\n                            element: target,\n                            value,\n                            maskInputFn: this.maskInputFn,\n                        });\n                    }\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n                        value === m.oldValue) {\n                        return;\n                    }\n                    let item = this.attributeMap.get(m.target);\n                    if (target.tagName === 'IFRAME' &&\n                        attributeName === 'src' &&\n                        !this.keepIframeSrcFn(value)) {\n                        if (!target.contentDocument) {\n                            attributeName = 'rr_src';\n                        }\n                        else {\n                            return;\n                        }\n                    }\n                    if (!item) {\n                        item = {\n                            node: m.target,\n                            attributes: {},\n                            styleDiff: {},\n                            _unchangedStyles: {},\n                        };\n                        this.attributes.push(item);\n                        this.attributeMap.set(m.target, item);\n                    }\n                    if (attributeName === 'type' &&\n                        target.tagName === 'INPUT' &&\n                        (m.oldValue || '').toLowerCase() === 'password') {\n                        target.setAttribute('data-rr-is-password', 'true');\n                    }\n                    if (!ignoreAttribute(target.tagName, attributeName)) {\n                        item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n                        if (attributeName === 'style') {\n                            if (!this.unattachedDoc) {\n                                try {\n                                    this.unattachedDoc =\n                                        document.implementation.createHTMLDocument();\n                                }\n                                catch (e) {\n                                    this.unattachedDoc = this.doc;\n                                }\n                            }\n                            const old = this.unattachedDoc.createElement('span');\n                            if (m.oldValue) {\n                                old.setAttribute('style', m.oldValue);\n                            }\n                            for (const pname of Array.from(target.style)) {\n                                const newValue = target.style.getPropertyValue(pname);\n                                const newPriority = target.style.getPropertyPriority(pname);\n                                if (newValue !== old.style.getPropertyValue(pname) ||\n                                    newPriority !== old.style.getPropertyPriority(pname)) {\n                                    if (newPriority === '') {\n                                        item.styleDiff[pname] = newValue;\n                                    }\n                                    else {\n                                        item.styleDiff[pname] = [newValue, newPriority];\n                                    }\n                                }\n                                else {\n                                    item._unchangedStyles[pname] = [newValue, newPriority];\n                                }\n                            }\n                            for (const pname of Array.from(old.style)) {\n                                if (target.style.getPropertyValue(pname) === '') {\n                                    item.styleDiff[pname] = false;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                }\n                case 'childList': {\n                    if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n                        return;\n                    }\n                    m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n                    m.removedNodes.forEach((n) => {\n                        const nodeId = this.mirror.getId(n);\n                        const parentId = isShadowRoot(m.target)\n                            ? this.mirror.getId(m.target.host)\n                            : this.mirror.getId(m.target);\n                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n                            isIgnored(n, this.mirror) ||\n                            !isSerialized(n, this.mirror)) {\n                            return;\n                        }\n                        if (this.addedSet.has(n)) {\n                            deepDelete(this.addedSet, n);\n                            this.droppedSet.add(n);\n                        }\n                        else if (this.addedSet.has(m.target) && nodeId === -1) ;\n                        else if (isAncestorRemoved(m.target, this.mirror)) ;\n                        else if (this.movedSet.has(n) &&\n                            this.movedMap[moveKey(nodeId, parentId)]) {\n                            deepDelete(this.movedSet, n);\n                        }\n                        else {\n                            this.removes.push({\n                                parentId,\n                                id: nodeId,\n                                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n                                    ? true\n                                    : undefined,\n                            });\n                        }\n                        this.mapRemoves.push(n);\n                    });\n                    break;\n                }\n            }\n        };\n        this.genAdds = (n, target) => {\n            if (this.processedNodeManager.inOtherBuffer(n, this))\n                return;\n            if (this.addedSet.has(n) || this.movedSet.has(n))\n                return;\n            if (this.mirror.hasNode(n)) {\n                if (isIgnored(n, this.mirror)) {\n                    return;\n                }\n                this.movedSet.add(n);\n                let targetId = null;\n                if (target && this.mirror.hasNode(target)) {\n                    targetId = this.mirror.getId(target);\n                }\n                if (targetId && targetId !== -1) {\n                    this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n                }\n            }\n            else {\n                this.addedSet.add(n);\n                this.droppedSet.delete(n);\n            }\n            if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n                n.childNodes.forEach((childN) => this.genAdds(childN));\n                if (hasShadowRoot(n)) {\n                    n.shadowRoot.childNodes.forEach((childN) => {\n                        this.processedNodeManager.add(childN, this);\n                        this.genAdds(childN, n);\n                    });\n                }\n            }\n        };\n    }\n    init(options) {\n        [\n            'mutationCb',\n            'blockClass',\n            'blockSelector',\n            'unblockSelector',\n            'maskAllText',\n            'maskTextClass',\n            'unmaskTextClass',\n            'maskTextSelector',\n            'unmaskTextSelector',\n            'inlineStylesheet',\n            'maskInputOptions',\n            'maskAttributeFn',\n            'maskTextFn',\n            'maskInputFn',\n            'keepIframeSrcFn',\n            'recordCanvas',\n            'inlineImages',\n            'slimDOMOptions',\n            'dataURLOptions',\n            'doc',\n            'mirror',\n            'iframeManager',\n            'stylesheetManager',\n            'shadowDomManager',\n            'canvasManager',\n            'processedNodeManager',\n        ].forEach((key) => {\n            this[key] = options[key];\n        });\n    }\n    freeze() {\n        this.frozen = true;\n        this.canvasManager.freeze();\n    }\n    unfreeze() {\n        this.frozen = false;\n        this.canvasManager.unfreeze();\n        this.emit();\n    }\n    isFrozen() {\n        return this.frozen;\n    }\n    lock() {\n        this.locked = true;\n        this.canvasManager.lock();\n    }\n    unlock() {\n        this.locked = false;\n        this.canvasManager.unlock();\n        this.emit();\n    }\n    reset() {\n        this.shadowDomManager.reset();\n        this.canvasManager.reset();\n    }\n}\nfunction deepDelete(addsSet, n) {\n    addsSet.delete(n);\n    n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n    if (removes.length === 0)\n        return false;\n    return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n    const { parentNode } = n;\n    if (!parentNode) {\n        return false;\n    }\n    const parentId = mirror.getId(parentNode);\n    if (removes.some((r) => r.id === parentId)) {\n        return true;\n    }\n    return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n    if (set.size === 0)\n        return false;\n    return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n    const { parentNode } = n;\n    if (!parentNode) {\n        return false;\n    }\n    if (set.has(parentNode)) {\n        return true;\n    }\n    return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n    errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n    errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n    if (!errorHandler) {\n        return cb;\n    }\n    const rrwebWrapped = ((...rest) => {\n        try {\n            return cb(...rest);\n        }\n        catch (error) {\n            if (errorHandler && errorHandler(error) === true) {\n                return () => {\n                };\n            }\n            throw error;\n        }\n    });\n    return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n    try {\n        if ('composedPath' in event) {\n            const path = event.composedPath();\n            if (path.length) {\n                return path[0];\n            }\n        }\n        else if ('path' in event && event.path.length) {\n            return event.path[0];\n        }\n    }\n    catch (e2) {\n    }\n    return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n    const mutationBuffer = new MutationBuffer();\n    mutationBuffers.push(mutationBuffer);\n    mutationBuffer.init(options);\n    let mutationObserverCtor = window.MutationObserver ||\n        window.__rrMutationObserver;\n    const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n    if (angularZoneSymbol &&\n        window[angularZoneSymbol]) {\n        mutationObserverCtor = window[angularZoneSymbol];\n    }\n    const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n        if (options.onMutation && options.onMutation(mutations) === false) {\n            return;\n        }\n        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n    }));\n    observer.observe(rootEl, {\n        attributes: true,\n        attributeOldValue: true,\n        characterData: true,\n        characterDataOldValue: true,\n        childList: true,\n        subtree: true,\n    });\n    return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n    if (sampling.mousemove === false) {\n        return () => {\n        };\n    }\n    const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n    const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n        ? sampling.mousemoveCallback\n        : 500;\n    let positions = [];\n    let timeBaseline;\n    const wrappedCb = throttle$1(callbackWrapper((source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n        }), source);\n        positions = [];\n        timeBaseline = null;\n    }), callbackThreshold);\n    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt)\n            ? evt.changedTouches[0]\n            : evt;\n        if (!timeBaseline) {\n            timeBaseline = nowTimestamp();\n        }\n        positions.push({\n            x: clientX,\n            y: clientY,\n            id: mirror.getId(target),\n            timeOffset: nowTimestamp() - timeBaseline,\n        });\n        wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n            ? IncrementalSource.Drag\n            : evt instanceof MouseEvent\n                ? IncrementalSource.MouseMove\n                : IncrementalSource.TouchMove);\n    }), threshold, {\n        trailing: false,\n    }));\n    const handlers = [\n        on('mousemove', updatePosition, doc),\n        on('touchmove', updatePosition, doc),\n        on('drag', updatePosition, doc),\n    ];\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n    if (sampling.mouseInteraction === false) {\n        return () => {\n        };\n    }\n    const disableMap = sampling.mouseInteraction === true ||\n        sampling.mouseInteraction === undefined\n        ? {}\n        : sampling.mouseInteraction;\n    const handlers = [];\n    let currentPointerType = null;\n    const getHandler = (eventKey) => {\n        return (event) => {\n            const target = getEventTarget(event);\n            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n                return;\n            }\n            let pointerType = null;\n            let thisEventKey = eventKey;\n            if ('pointerType' in event) {\n                switch (event.pointerType) {\n                    case 'mouse':\n                        pointerType = PointerTypes.Mouse;\n                        break;\n                    case 'touch':\n                        pointerType = PointerTypes.Touch;\n                        break;\n                    case 'pen':\n                        pointerType = PointerTypes.Pen;\n                        break;\n                }\n                if (pointerType === PointerTypes.Touch) {\n                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n                        thisEventKey = 'TouchStart';\n                    }\n                    else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n                        thisEventKey = 'TouchEnd';\n                    }\n                }\n                else if (pointerType === PointerTypes.Pen) ;\n            }\n            else if (legacy_isTouchEvent(event)) {\n                pointerType = PointerTypes.Touch;\n            }\n            if (pointerType !== null) {\n                currentPointerType = pointerType;\n                if ((thisEventKey.startsWith('Touch') &&\n                    pointerType === PointerTypes.Touch) ||\n                    (thisEventKey.startsWith('Mouse') &&\n                        pointerType === PointerTypes.Mouse)) {\n                    pointerType = null;\n                }\n            }\n            else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n                pointerType = currentPointerType;\n                currentPointerType = null;\n            }\n            const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n            if (!e) {\n                return;\n            }\n            const id = mirror.getId(target);\n            const { clientX, clientY } = e;\n            callbackWrapper(mouseInteractionCb)({\n                type: MouseInteractions[thisEventKey],\n                id,\n                x: clientX,\n                y: clientY,\n                ...(pointerType !== null && { pointerType }),\n            });\n        };\n    };\n    Object.keys(MouseInteractions)\n        .filter((key) => Number.isNaN(Number(key)) &&\n        !key.endsWith('_Departed') &&\n        disableMap[key] !== false)\n        .forEach((eventKey) => {\n        let eventName = toLowerCase(eventKey);\n        const handler = getHandler(eventKey);\n        if (window.PointerEvent) {\n            switch (MouseInteractions[eventKey]) {\n                case MouseInteractions.MouseDown:\n                case MouseInteractions.MouseUp:\n                    eventName = eventName.replace('mouse', 'pointer');\n                    break;\n                case MouseInteractions.TouchStart:\n                case MouseInteractions.TouchEnd:\n                    return;\n            }\n        }\n        handlers.push(on(eventName, handler, doc));\n    });\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const id = mirror.getId(target);\n        if (target === doc && doc.defaultView) {\n            const scrollLeftTop = getWindowScroll(doc.defaultView);\n            scrollCb({\n                id,\n                x: scrollLeftTop.left,\n                y: scrollLeftTop.top,\n            });\n        }\n        else {\n            scrollCb({\n                id,\n                x: target.scrollLeft,\n                y: target.scrollTop,\n            });\n        }\n    }), sampling.scroll || 100));\n    return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n    let lastH = -1;\n    let lastW = -1;\n    const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n            viewportResizeCb({\n                width: Number(width),\n                height: Number(height),\n            });\n            lastH = height;\n            lastW = width;\n        }\n    }), 200));\n    return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n    function eventHandler(event) {\n        let target = getEventTarget(event);\n        const userTriggered = event.isTrusted;\n        const tagName = target && toUpperCase(target.tagName);\n        if (tagName === 'OPTION')\n            target = target.parentElement;\n        if (!target ||\n            !tagName ||\n            INPUT_TAGS.indexOf(tagName) < 0 ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const el = target;\n        if (el.classList.contains(ignoreClass) ||\n            (ignoreSelector && el.matches(ignoreSelector))) {\n            return;\n        }\n        const type = getInputType(target);\n        let text = getInputValue(el, tagName, type);\n        let isChecked = false;\n        const isInputMasked = shouldMaskInput({\n            maskInputOptions,\n            tagName,\n            type,\n        });\n        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n        if (type === 'radio' || type === 'checkbox') {\n            isChecked = target.checked;\n        }\n        text = maskInputValue({\n            isMasked: forceMask,\n            element: target,\n            value: text,\n            maskInputFn,\n        });\n        cbWithDedup(target, userTriggeredOnInput\n            ? { text, isChecked, userTriggered }\n            : { text, isChecked });\n        const name = target.name;\n        if (type === 'radio' && name && isChecked) {\n            doc\n                .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n                .forEach((el) => {\n                if (el !== target) {\n                    const text = maskInputValue({\n                        isMasked: forceMask,\n                        element: el,\n                        value: getInputValue(el, tagName, type),\n                        maskInputFn,\n                    });\n                    cbWithDedup(el, userTriggeredOnInput\n                        ? { text, isChecked: !isChecked, userTriggered: false }\n                        : { text, isChecked: !isChecked });\n                }\n            });\n        }\n    }\n    function cbWithDedup(target, v) {\n        const lastInputValue = lastInputValueMap.get(target);\n        if (!lastInputValue ||\n            lastInputValue.text !== v.text ||\n            lastInputValue.isChecked !== v.isChecked) {\n            lastInputValueMap.set(target, v);\n            const id = mirror.getId(target);\n            callbackWrapper(inputCb)({\n                ...v,\n                id,\n            });\n        }\n    }\n    const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n    const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n    const currentWindow = doc.defaultView;\n    if (!currentWindow) {\n        return () => {\n            handlers.forEach((h) => h());\n        };\n    }\n    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n    const hookProperties = [\n        [currentWindow.HTMLInputElement.prototype, 'value'],\n        [currentWindow.HTMLInputElement.prototype, 'checked'],\n        [currentWindow.HTMLSelectElement.prototype, 'value'],\n        [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n        [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n        [currentWindow.HTMLOptionElement.prototype, 'selected'],\n    ];\n    if (propertyDescriptor && propertyDescriptor.set) {\n        handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n            set() {\n                callbackWrapper(eventHandler)({\n                    target: this,\n                    isTrusted: false,\n                });\n            },\n        }, false, currentWindow)));\n    }\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction getNestedCSSRulePositions(rule) {\n    const positions = [];\n    function recurse(childRule, pos) {\n        if ((hasNestedCSSRule('CSSGroupingRule') &&\n            childRule.parentRule instanceof CSSGroupingRule) ||\n            (hasNestedCSSRule('CSSMediaRule') &&\n                childRule.parentRule instanceof CSSMediaRule) ||\n            (hasNestedCSSRule('CSSSupportsRule') &&\n                childRule.parentRule instanceof CSSSupportsRule) ||\n            (hasNestedCSSRule('CSSConditionRule') &&\n                childRule.parentRule instanceof CSSConditionRule)) {\n            const rules = Array.from(childRule.parentRule.cssRules);\n            const index = rules.indexOf(childRule);\n            pos.unshift(index);\n        }\n        else if (childRule.parentStyleSheet) {\n            const rules = Array.from(childRule.parentStyleSheet.cssRules);\n            const index = rules.indexOf(childRule);\n            pos.unshift(index);\n        }\n        return pos;\n    }\n    return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n    let id, styleId;\n    if (!sheet)\n        return {};\n    if (sheet.ownerNode)\n        id = mirror.getId(sheet.ownerNode);\n    else\n        styleId = styleMirror.getId(sheet);\n    return {\n        styleId,\n        id,\n    };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n        return () => {\n        };\n    }\n    const insertRule = win.CSSStyleSheet.prototype.insertRule;\n    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [rule, index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleSheetRuleCb({\n                    id,\n                    styleId,\n                    adds: [{ rule, index }],\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleSheetRuleCb({\n                    id,\n                    styleId,\n                    removes: [{ index }],\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    let replace;\n    if (win.CSSStyleSheet.prototype.replace) {\n        replace = win.CSSStyleSheet.prototype.replace;\n        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [text] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        replace: text,\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    }\n    let replaceSync;\n    if (win.CSSStyleSheet.prototype.replaceSync) {\n        replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [text] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        replaceSync: text,\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    }\n    const supportedNestedCSSRuleTypes = {};\n    if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n    }\n    else {\n        if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n        }\n        if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n        }\n        if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n        }\n    }\n    const unmodifiedFunctions = {};\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n        unmodifiedFunctions[typeKey] = {\n            insertRule: type.prototype.insertRule,\n            deleteRule: type.prototype.deleteRule,\n        };\n        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [rule, index] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        adds: [\n                            {\n                                rule,\n                                index: [\n                                    ...getNestedCSSRulePositions(thisArg),\n                                    index || 0,\n                                ],\n                            },\n                        ],\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n            apply: callbackWrapper((target, thisArg, argumentsList) => {\n                const [index] = argumentsList;\n                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n                if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                    styleSheetRuleCb({\n                        id,\n                        styleId,\n                        removes: [\n                            { index: [...getNestedCSSRulePositions(thisArg), index] },\n                        ],\n                    });\n                }\n                return target.apply(thisArg, argumentsList);\n            }),\n        });\n    });\n    return callbackWrapper(() => {\n        win.CSSStyleSheet.prototype.insertRule = insertRule;\n        win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n        replace && (win.CSSStyleSheet.prototype.replace = replace);\n        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n        Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n        });\n    });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n    let hostId = null;\n    if (host.nodeName === '#document')\n        hostId = mirror.getId(host);\n    else\n        hostId = mirror.getId(host.host);\n    const patchTarget = host.nodeName === '#document'\n        ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n        : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n    const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n        ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n        : undefined;\n    if (hostId === null ||\n        hostId === -1 ||\n        !patchTarget ||\n        !originalPropertyDescriptor)\n        return () => {\n        };\n    Object.defineProperty(host, 'adoptedStyleSheets', {\n        configurable: originalPropertyDescriptor.configurable,\n        enumerable: originalPropertyDescriptor.enumerable,\n        get() {\n            return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n        },\n        set(sheets) {\n            const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n            if (hostId !== null && hostId !== -1) {\n                try {\n                    stylesheetManager.adoptStyleSheets(sheets, hostId);\n                }\n                catch (e) {\n                }\n            }\n            return result;\n        },\n    });\n    return callbackWrapper(() => {\n        Object.defineProperty(host, 'adoptedStyleSheets', {\n            configurable: originalPropertyDescriptor.configurable,\n            enumerable: originalPropertyDescriptor.enumerable,\n            get: originalPropertyDescriptor.get,\n            set: originalPropertyDescriptor.set,\n        });\n    });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [property, value, priority] = argumentsList;\n            if (ignoreCSSAttributes.has(property)) {\n                return setProperty.apply(thisArg, [property, value, priority]);\n            }\n            const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleDeclarationCb({\n                    id,\n                    styleId,\n                    set: {\n                        property,\n                        value,\n                        priority,\n                    },\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n        apply: callbackWrapper((target, thisArg, argumentsList) => {\n            const [property] = argumentsList;\n            if (ignoreCSSAttributes.has(property)) {\n                return removeProperty.apply(thisArg, [property]);\n            }\n            const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n            if ((id && id !== -1) || (styleId && styleId !== -1)) {\n                styleDeclarationCb({\n                    id,\n                    styleId,\n                    remove: {\n                        property,\n                    },\n                    index: getNestedCSSRulePositions(thisArg.parentRule),\n                });\n            }\n            return target.apply(thisArg, argumentsList);\n        }),\n    });\n    return callbackWrapper(() => {\n        win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n    });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n    const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target ||\n            isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n            return;\n        }\n        const { currentTime, volume, muted, playbackRate } = target;\n        mediaInteractionCb({\n            type,\n            id: mirror.getId(target),\n            currentTime,\n            volume,\n            muted,\n            playbackRate,\n        });\n    }), sampling.media || 500));\n    const handlers = [\n        on('play', handler(0), doc),\n        on('pause', handler(1), doc),\n        on('seeked', handler(2), doc),\n        on('volumechange', handler(3), doc),\n        on('ratechange', handler(4), doc),\n    ];\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initFontObserver({ fontCb, doc }) {\n    const win = doc.defaultView;\n    if (!win) {\n        return () => {\n        };\n    }\n    const handlers = [];\n    const fontMap = new WeakMap();\n    const originalFontFace = win.FontFace;\n    win.FontFace = function FontFace(family, source, descriptors) {\n        const fontFace = new originalFontFace(family, source, descriptors);\n        fontMap.set(fontFace, {\n            family,\n            buffer: typeof source !== 'string',\n            descriptors,\n            fontSource: typeof source === 'string'\n                ? source\n                : JSON.stringify(Array.from(new Uint8Array(source))),\n        });\n        return fontFace;\n    };\n    const restoreHandler = patch(doc.fonts, 'add', function (original) {\n        return function (fontFace) {\n            setTimeout$1(callbackWrapper(() => {\n                const p = fontMap.get(fontFace);\n                if (p) {\n                    fontCb(p);\n                    fontMap.delete(fontFace);\n                }\n            }), 0);\n            return original.apply(this, [fontFace]);\n        };\n    });\n    handlers.push(() => {\n        win.FontFace = originalFontFace;\n    });\n    handlers.push(restoreHandler);\n    return callbackWrapper(() => {\n        handlers.forEach((h) => h());\n    });\n}\nfunction initSelectionObserver(param) {\n    const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n    let collapsed = true;\n    const updateSelection = callbackWrapper(() => {\n        const selection = doc.getSelection();\n        if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n            return;\n        collapsed = selection.isCollapsed || false;\n        const ranges = [];\n        const count = selection.rangeCount || 0;\n        for (let i = 0; i < count; i++) {\n            const range = selection.getRangeAt(i);\n            const { startContainer, startOffset, endContainer, endOffset } = range;\n            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n                isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n            if (blocked)\n                continue;\n            ranges.push({\n                start: mirror.getId(startContainer),\n                startOffset,\n                end: mirror.getId(endContainer),\n                endOffset,\n            });\n        }\n        selectionCb({ ranges });\n    });\n    updateSelection();\n    return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n    const win = doc.defaultView;\n    if (!win || !win.customElements)\n        return () => { };\n    const restoreHandler = patch(win.customElements, 'define', function (original) {\n        return function (name, constructor, options) {\n            try {\n                customElementCb({\n                    define: {\n                        name,\n                    },\n                });\n            }\n            catch (e) {\n            }\n            return original.apply(this, [name, constructor, options]);\n        };\n    });\n    return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n    const currentWindow = o.doc.defaultView;\n    if (!currentWindow) {\n        return () => {\n        };\n    }\n    const mutationObserver = initMutationObserver(o, o.doc);\n    const mousemoveHandler = initMoveObserver(o);\n    const mouseInteractionHandler = initMouseInteractionObserver(o);\n    const scrollHandler = initScrollObserver(o);\n    const viewportResizeHandler = initViewportResizeObserver(o, {\n        win: currentWindow,\n    });\n    const inputHandler = initInputObserver(o);\n    const mediaInteractionHandler = initMediaInteractionObserver(o);\n    const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n    const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n    const styleDeclarationObserver = initStyleDeclarationObserver(o, {\n        win: currentWindow,\n    });\n    const fontObserver = o.collectFonts\n        ? initFontObserver(o)\n        : () => {\n        };\n    const selectionObserver = initSelectionObserver(o);\n    const customElementObserver = initCustomElementObserver(o);\n    const pluginHandlers = [];\n    for (const plugin of o.plugins) {\n        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n    }\n    return callbackWrapper(() => {\n        mutationBuffers.forEach((b) => b.reset());\n        mutationObserver.disconnect();\n        mousemoveHandler();\n        mouseInteractionHandler();\n        scrollHandler();\n        viewportResizeHandler();\n        inputHandler();\n        mediaInteractionHandler();\n        styleSheetObserver();\n        adoptedStyleSheetObserver();\n        styleDeclarationObserver();\n        fontObserver();\n        selectionObserver();\n        customElementObserver();\n        pluginHandlers.forEach((h) => h());\n    });\n}\nfunction hasNestedCSSRule(prop) {\n    return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n    return Boolean(typeof window[prop] !== 'undefined' &&\n        window[prop].prototype &&\n        'insertRule' in window[prop].prototype &&\n        'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n    constructor(generateIdFn) {\n        this.generateIdFn = generateIdFn;\n        this.iframeIdToRemoteIdMap = new WeakMap();\n        this.iframeRemoteIdToIdMap = new WeakMap();\n    }\n    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n        let id = idToRemoteIdMap.get(remoteId);\n        if (!id) {\n            id = this.generateIdFn();\n            idToRemoteIdMap.set(remoteId, id);\n            remoteIdToIdMap.set(id, remoteId);\n        }\n        return id;\n    }\n    getIds(iframe, remoteId) {\n        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n        return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n    }\n    getRemoteId(iframe, id, map) {\n        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n        if (typeof id !== 'number')\n            return id;\n        const remoteId = remoteIdToIdMap.get(id);\n        if (!remoteId)\n            return -1;\n        return remoteId;\n    }\n    getRemoteIds(iframe, ids) {\n        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n        return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n    }\n    reset(iframe) {\n        if (!iframe) {\n            this.iframeIdToRemoteIdMap = new WeakMap();\n            this.iframeRemoteIdToIdMap = new WeakMap();\n            return;\n        }\n        this.iframeIdToRemoteIdMap.delete(iframe);\n        this.iframeRemoteIdToIdMap.delete(iframe);\n    }\n    getIdToRemoteIdMap(iframe) {\n        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n        if (!idToRemoteIdMap) {\n            idToRemoteIdMap = new Map();\n            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n        }\n        return idToRemoteIdMap;\n    }\n    getRemoteIdToIdMap(iframe) {\n        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n        if (!remoteIdToIdMap) {\n            remoteIdToIdMap = new Map();\n            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n        }\n        return remoteIdToIdMap;\n    }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n    constructor() {\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n        this.crossOriginIframeRootIdMap = new WeakMap();\n    }\n    addIframe() {\n    }\n    addLoadListener() {\n    }\n    attachIframe() {\n    }\n}\nclass IframeManager {\n    constructor(options) {\n        this.iframes = new WeakMap();\n        this.crossOriginIframeMap = new WeakMap();\n        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n        this.crossOriginIframeRootIdMap = new WeakMap();\n        this.mutationCb = options.mutationCb;\n        this.wrappedEmit = options.wrappedEmit;\n        this.stylesheetManager = options.stylesheetManager;\n        this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n        this.mirror = options.mirror;\n        if (this.recordCrossOriginIframes) {\n            window.addEventListener('message', this.handleMessage.bind(this));\n        }\n    }\n    addIframe(iframeEl) {\n        this.iframes.set(iframeEl, true);\n        if (iframeEl.contentWindow)\n            this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n    }\n    addLoadListener(cb) {\n        this.loadListener = cb;\n    }\n    attachIframe(iframeEl, childSn) {\n        this.mutationCb({\n            adds: [\n                {\n                    parentId: this.mirror.getId(iframeEl),\n                    nextId: null,\n                    node: childSn,\n                },\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true,\n        });\n        _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n        if (iframeEl.contentDocument &&\n            iframeEl.contentDocument.adoptedStyleSheets &&\n            iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n            this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n    }\n    handleMessage(message) {\n        const crossOriginMessageEvent = message;\n        if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n            crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n            return;\n        const iframeSourceWindow = message.source;\n        if (!iframeSourceWindow)\n            return;\n        const iframeEl = this.crossOriginIframeMap.get(message.source);\n        if (!iframeEl)\n            return;\n        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n        if (transformedEvent)\n            this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n    }\n    transformCrossOriginEvent(iframeEl, e) {\n        switch (e.type) {\n            case EventType.FullSnapshot: {\n                this.crossOriginIframeMirror.reset(iframeEl);\n                this.crossOriginIframeStyleMirror.reset(iframeEl);\n                this.replaceIdOnNode(e.data.node, iframeEl);\n                const rootId = e.data.node.id;\n                this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n                this.patchRootIdOnNode(e.data.node, rootId);\n                return {\n                    timestamp: e.timestamp,\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Mutation,\n                        adds: [\n                            {\n                                parentId: this.mirror.getId(iframeEl),\n                                nextId: null,\n                                node: e.data.node,\n                            },\n                        ],\n                        removes: [],\n                        texts: [],\n                        attributes: [],\n                        isAttachIframe: true,\n                    },\n                };\n            }\n            case EventType.Meta:\n            case EventType.Load:\n            case EventType.DomContentLoaded: {\n                return false;\n            }\n            case EventType.Plugin: {\n                return e;\n            }\n            case EventType.Custom: {\n                this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n                return e;\n            }\n            case EventType.IncrementalSnapshot: {\n                switch (e.data.source) {\n                    case IncrementalSource.Mutation: {\n                        e.data.adds.forEach((n) => {\n                            this.replaceIds(n, iframeEl, [\n                                'parentId',\n                                'nextId',\n                                'previousId',\n                            ]);\n                            this.replaceIdOnNode(n.node, iframeEl);\n                            const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n                            rootId && this.patchRootIdOnNode(n.node, rootId);\n                        });\n                        e.data.removes.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['parentId', 'id']);\n                        });\n                        e.data.attributes.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['id']);\n                        });\n                        e.data.texts.forEach((n) => {\n                            this.replaceIds(n, iframeEl, ['id']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.Drag:\n                    case IncrementalSource.TouchMove:\n                    case IncrementalSource.MouseMove: {\n                        e.data.positions.forEach((p) => {\n                            this.replaceIds(p, iframeEl, ['id']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.ViewportResize: {\n                        return false;\n                    }\n                    case IncrementalSource.MediaInteraction:\n                    case IncrementalSource.MouseInteraction:\n                    case IncrementalSource.Scroll:\n                    case IncrementalSource.CanvasMutation:\n                    case IncrementalSource.Input: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        return e;\n                    }\n                    case IncrementalSource.StyleSheetRule:\n                    case IncrementalSource.StyleDeclaration: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n                        return e;\n                    }\n                    case IncrementalSource.Font: {\n                        return e;\n                    }\n                    case IncrementalSource.Selection: {\n                        e.data.ranges.forEach((range) => {\n                            this.replaceIds(range, iframeEl, ['start', 'end']);\n                        });\n                        return e;\n                    }\n                    case IncrementalSource.AdoptedStyleSheet: {\n                        this.replaceIds(e.data, iframeEl, ['id']);\n                        this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n                        _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n                            this.replaceStyleIds(style, iframeEl, ['styleId']);\n                        })]);\n                        return e;\n                    }\n                }\n            }\n        }\n        return false;\n    }\n    replace(iframeMirror, obj, iframeEl, keys) {\n        for (const key of keys) {\n            if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n                continue;\n            if (Array.isArray(obj[key])) {\n                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n            }\n            else {\n                obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n            }\n        }\n        return obj;\n    }\n    replaceIds(obj, iframeEl, keys) {\n        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n    }\n    replaceStyleIds(obj, iframeEl, keys) {\n        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n    }\n    replaceIdOnNode(node, iframeEl) {\n        this.replaceIds(node, iframeEl, ['id', 'rootId']);\n        if ('childNodes' in node) {\n            node.childNodes.forEach((child) => {\n                this.replaceIdOnNode(child, iframeEl);\n            });\n        }\n    }\n    patchRootIdOnNode(node, rootId) {\n        if (node.type !== NodeType$1.Document && !node.rootId)\n            node.rootId = rootId;\n        if ('childNodes' in node) {\n            node.childNodes.forEach((child) => {\n                this.patchRootIdOnNode(child, rootId);\n            });\n        }\n    }\n}\n\nclass ShadowDomManagerNoop {\n    init() {\n    }\n    addShadowRoot() {\n    }\n    observeAttachShadow() {\n    }\n    reset() {\n    }\n}\nclass ShadowDomManager {\n    constructor(options) {\n        this.shadowDoms = new WeakSet();\n        this.restoreHandlers = [];\n        this.mutationCb = options.mutationCb;\n        this.scrollCb = options.scrollCb;\n        this.bypassOptions = options.bypassOptions;\n        this.mirror = options.mirror;\n        this.init();\n    }\n    init() {\n        this.reset();\n        this.patchAttachShadow(Element, document);\n    }\n    addShadowRoot(shadowRoot, doc) {\n        if (!isNativeShadowDom(shadowRoot))\n            return;\n        if (this.shadowDoms.has(shadowRoot))\n            return;\n        this.shadowDoms.add(shadowRoot);\n        const observer = initMutationObserver({\n            ...this.bypassOptions,\n            doc,\n            mutationCb: this.mutationCb,\n            mirror: this.mirror,\n            shadowDomManager: this,\n        }, shadowRoot);\n        this.restoreHandlers.push(() => observer.disconnect());\n        this.restoreHandlers.push(initScrollObserver({\n            ...this.bypassOptions,\n            scrollCb: this.scrollCb,\n            doc: shadowRoot,\n            mirror: this.mirror,\n        }));\n        setTimeout$1(() => {\n            if (shadowRoot.adoptedStyleSheets &&\n                shadowRoot.adoptedStyleSheets.length > 0)\n                this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n            this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n                mirror: this.mirror,\n                stylesheetManager: this.bypassOptions.stylesheetManager,\n            }, shadowRoot));\n        }, 0);\n    }\n    observeAttachShadow(iframeElement) {\n        if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n            return;\n        this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n    }\n    patchAttachShadow(element, doc) {\n        const manager = this;\n        this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n            return function (option) {\n                const shadowRoot = original.call(this, option);\n                if (this.shadowRoot && inDom(this))\n                    manager.addShadowRoot(this.shadowRoot, doc);\n                return shadowRoot;\n            };\n        }));\n    }\n    reset() {\n        this.restoreHandlers.forEach((handler) => {\n            try {\n                handler();\n            }\n            catch (e) {\n            }\n        });\n        this.restoreHandlers = [];\n        this.shadowDoms = new WeakSet();\n    }\n}\n\nclass CanvasManagerNoop {\n    reset() {\n    }\n    freeze() {\n    }\n    unfreeze() {\n    }\n    lock() {\n    }\n    unlock() {\n    }\n    snapshot() {\n    }\n}\n\nclass StylesheetManager {\n    constructor(options) {\n        this.trackedLinkElements = new WeakSet();\n        this.styleMirror = new StyleSheetMirror();\n        this.mutationCb = options.mutationCb;\n        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n    }\n    attachLinkElement(linkEl, childSn) {\n        if ('_cssText' in childSn.attributes)\n            this.mutationCb({\n                adds: [],\n                removes: [],\n                texts: [],\n                attributes: [\n                    {\n                        id: childSn.id,\n                        attributes: childSn\n                            .attributes,\n                    },\n                ],\n            });\n        this.trackLinkElement(linkEl);\n    }\n    trackLinkElement(linkEl) {\n        if (this.trackedLinkElements.has(linkEl))\n            return;\n        this.trackedLinkElements.add(linkEl);\n        this.trackStylesheetInLinkElement(linkEl);\n    }\n    adoptStyleSheets(sheets, hostId) {\n        if (sheets.length === 0)\n            return;\n        const adoptedStyleSheetData = {\n            id: hostId,\n            styleIds: [],\n        };\n        const styles = [];\n        for (const sheet of sheets) {\n            let styleId;\n            if (!this.styleMirror.has(sheet)) {\n                styleId = this.styleMirror.add(sheet);\n                styles.push({\n                    styleId,\n                    rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n                        rule: stringifyRule(r),\n                        index,\n                    })),\n                });\n            }\n            else\n                styleId = this.styleMirror.getId(sheet);\n            adoptedStyleSheetData.styleIds.push(styleId);\n        }\n        if (styles.length > 0)\n            adoptedStyleSheetData.styles = styles;\n        this.adoptedStyleSheetCb(adoptedStyleSheetData);\n    }\n    reset() {\n        this.styleMirror.reset();\n        this.trackedLinkElements = new WeakSet();\n    }\n    trackStylesheetInLinkElement(linkEl) {\n    }\n}\n\nclass ProcessedNodeManager {\n    constructor() {\n        this.nodeMap = new WeakMap();\n        this.loop = true;\n        this.periodicallyClear();\n    }\n    periodicallyClear() {\n        onRequestAnimationFrame(() => {\n            this.clear();\n            if (this.loop)\n                this.periodicallyClear();\n        });\n    }\n    inOtherBuffer(node, thisBuffer) {\n        const buffers = this.nodeMap.get(node);\n        return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n    }\n    add(node, buffer) {\n        this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n    }\n    clear() {\n        this.nodeMap = new WeakMap();\n    }\n    destroy() {\n        this.loop = false;\n    }\n}\n\nlet wrappedEmit;\nlet _takeFullSnapshot;\nconst mirror = createMirror();\nfunction record(options = {}) {\n    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n        ? options.recordAfter\n        : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n    registerErrorHandler(errorHandler);\n    const inEmittingFrame = recordCrossOriginIframes\n        ? window.parent === window\n        : true;\n    let passEmitsToParent = false;\n    if (!inEmittingFrame) {\n        try {\n            if (window.parent.document) {\n                passEmitsToParent = false;\n            }\n        }\n        catch (e) {\n            passEmitsToParent = true;\n        }\n    }\n    if (inEmittingFrame && !emit) {\n        throw new Error('emit function is required');\n    }\n    if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n        sampling.mousemove = mousemoveWait;\n    }\n    mirror.reset();\n    const maskInputOptions = maskAllInputs === true\n        ? {\n            color: true,\n            date: true,\n            'datetime-local': true,\n            email: true,\n            month: true,\n            number: true,\n            range: true,\n            search: true,\n            tel: true,\n            text: true,\n            time: true,\n            url: true,\n            week: true,\n            textarea: true,\n            select: true,\n            radio: true,\n            checkbox: true,\n        }\n        : _maskInputOptions !== undefined\n            ? _maskInputOptions\n            : {};\n    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n        ? {\n            script: true,\n            comment: true,\n            headFavicon: true,\n            headWhitespace: true,\n            headMetaSocial: true,\n            headMetaRobots: true,\n            headMetaHttpEquiv: true,\n            headMetaVerification: true,\n            headMetaAuthorship: _slimDOMOptions === 'all',\n            headMetaDescKeywords: _slimDOMOptions === 'all',\n        }\n        : _slimDOMOptions\n            ? _slimDOMOptions\n            : {};\n    polyfill();\n    let lastFullSnapshotEvent;\n    let incrementalSnapshotCount = 0;\n    const eventProcessor = (e) => {\n        for (const plugin of plugins || []) {\n            if (plugin.eventProcessor) {\n                e = plugin.eventProcessor(e);\n            }\n        }\n        if (packFn &&\n            !passEmitsToParent) {\n            e = packFn(e);\n        }\n        return e;\n    };\n    wrappedEmit = (r, isCheckout) => {\n        const e = r;\n        e.timestamp = nowTimestamp();\n        if (_optionalChain([mutationBuffers, 'access', _ => _[0], 'optionalAccess', _2 => _2.isFrozen, 'call', _3 => _3()]) &&\n            e.type !== EventType.FullSnapshot &&\n            !(e.type === EventType.IncrementalSnapshot &&\n                e.data.source === IncrementalSource.Mutation)) {\n            mutationBuffers.forEach((buf) => buf.unfreeze());\n        }\n        if (inEmittingFrame) {\n            _optionalChain([emit, 'optionalCall', _4 => _4(eventProcessor(e), isCheckout)]);\n        }\n        else if (passEmitsToParent) {\n            const message = {\n                type: 'rrweb',\n                event: eventProcessor(e),\n                origin: window.location.origin,\n                isCheckout,\n            };\n            window.parent.postMessage(message, '*');\n        }\n        if (e.type === EventType.FullSnapshot) {\n            lastFullSnapshotEvent = e;\n            incrementalSnapshotCount = 0;\n        }\n        else if (e.type === EventType.IncrementalSnapshot) {\n            if (e.data.source === IncrementalSource.Mutation &&\n                e.data.isAttachIframe) {\n                return;\n            }\n            incrementalSnapshotCount++;\n            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n            const exceedTime = checkoutEveryNms &&\n                lastFullSnapshotEvent &&\n                e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n            if (exceedCount || exceedTime) {\n                takeFullSnapshot(true);\n            }\n        }\n    };\n    const wrappedMutationEmit = (m) => {\n        wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n                source: IncrementalSource.Mutation,\n                ...m,\n            },\n        });\n    };\n    const wrappedScrollEmit = (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.Scroll,\n            ...p,\n        },\n    });\n    const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.CanvasMutation,\n            ...p,\n        },\n    });\n    const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n            source: IncrementalSource.AdoptedStyleSheet,\n            ...a,\n        },\n    });\n    const stylesheetManager = new StylesheetManager({\n        mutationCb: wrappedMutationEmit,\n        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n    });\n    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n        ? new IframeManagerNoop()\n        : new IframeManager({\n            mirror,\n            mutationCb: wrappedMutationEmit,\n            stylesheetManager: stylesheetManager,\n            recordCrossOriginIframes,\n            wrappedEmit,\n        });\n    for (const plugin of plugins || []) {\n        if (plugin.getMirror)\n            plugin.getMirror({\n                nodeMirror: mirror,\n                crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n                crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n            });\n    }\n    const processedNodeManager = new ProcessedNodeManager();\n    const canvasManager = _getCanvasManager(getCanvasManager, {\n        mirror,\n        win: window,\n        mutationCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n                source: IncrementalSource.CanvasMutation,\n                ...p,\n            },\n        }),\n        recordCanvas,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        maxCanvasSize,\n        sampling: sampling['canvas'],\n        dataURLOptions,\n        errorHandler,\n    });\n    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n        __RRWEB_EXCLUDE_SHADOW_DOM__\n        ? new ShadowDomManagerNoop()\n        : new ShadowDomManager({\n            mutationCb: wrappedMutationEmit,\n            scrollCb: wrappedScrollEmit,\n            bypassOptions: {\n                onMutation,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                inlineStylesheet,\n                maskInputOptions,\n                dataURLOptions,\n                maskAttributeFn,\n                maskTextFn,\n                maskInputFn,\n                recordCanvas,\n                inlineImages,\n                sampling,\n                slimDOMOptions,\n                iframeManager,\n                stylesheetManager,\n                canvasManager,\n                keepIframeSrcFn,\n                processedNodeManager,\n            },\n            mirror,\n        });\n    const takeFullSnapshot = (isCheckout = false) => {\n        wrappedEmit({\n            type: EventType.Meta,\n            data: {\n                href: window.location.href,\n                width: getWindowWidth(),\n                height: getWindowHeight(),\n            },\n        }, isCheckout);\n        stylesheetManager.reset();\n        shadowDomManager.init();\n        mutationBuffers.forEach((buf) => buf.lock());\n        const node = snapshot(document, {\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            inlineStylesheet,\n            maskAllInputs: maskInputOptions,\n            maskAttributeFn,\n            maskInputFn,\n            maskTextFn,\n            slimDOM: slimDOMOptions,\n            dataURLOptions,\n            recordCanvas,\n            inlineImages,\n            onSerialize: (n) => {\n                if (isSerializedIframe(n, mirror)) {\n                    iframeManager.addIframe(n);\n                }\n                if (isSerializedStylesheet(n, mirror)) {\n                    stylesheetManager.trackLinkElement(n);\n                }\n                if (hasShadowRoot(n)) {\n                    shadowDomManager.addShadowRoot(n.shadowRoot, document);\n                }\n            },\n            onIframeLoad: (iframe, childSn) => {\n                iframeManager.attachIframe(iframe, childSn);\n                shadowDomManager.observeAttachShadow(iframe);\n            },\n            onStylesheetLoad: (linkEl, childSn) => {\n                stylesheetManager.attachLinkElement(linkEl, childSn);\n            },\n            keepIframeSrcFn,\n        });\n        if (!node) {\n            return console.warn('Failed to snapshot the document');\n        }\n        wrappedEmit({\n            type: EventType.FullSnapshot,\n            data: {\n                node,\n                initialOffset: getWindowScroll(window),\n            },\n        });\n        mutationBuffers.forEach((buf) => buf.unlock());\n        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n            stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n    };\n    _takeFullSnapshot = takeFullSnapshot;\n    try {\n        const handlers = [];\n        const observe = (doc) => {\n            return callbackWrapper(initObservers)({\n                onMutation,\n                mutationCb: wrappedMutationEmit,\n                mousemoveCb: (positions, source) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source,\n                        positions,\n                    },\n                }),\n                mouseInteractionCb: (d) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.MouseInteraction,\n                        ...d,\n                    },\n                }),\n                scrollCb: wrappedScrollEmit,\n                viewportResizeCb: (d) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.ViewportResize,\n                        ...d,\n                    },\n                }),\n                inputCb: (v) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Input,\n                        ...v,\n                    },\n                }),\n                mediaInteractionCb: (p) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.MediaInteraction,\n                        ...p,\n                    },\n                }),\n                styleSheetRuleCb: (r) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.StyleSheetRule,\n                        ...r,\n                    },\n                }),\n                styleDeclarationCb: (r) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.StyleDeclaration,\n                        ...r,\n                    },\n                }),\n                canvasMutationCb: wrappedCanvasMutationEmit,\n                fontCb: (p) => wrappedEmit({\n                    type: EventType.IncrementalSnapshot,\n                    data: {\n                        source: IncrementalSource.Font,\n                        ...p,\n                    },\n                }),\n                selectionCb: (p) => {\n                    wrappedEmit({\n                        type: EventType.IncrementalSnapshot,\n                        data: {\n                            source: IncrementalSource.Selection,\n                            ...p,\n                        },\n                    });\n                },\n                customElementCb: (c) => {\n                    wrappedEmit({\n                        type: EventType.IncrementalSnapshot,\n                        data: {\n                            source: IncrementalSource.CustomElement,\n                            ...c,\n                        },\n                    });\n                },\n                blockClass,\n                ignoreClass,\n                ignoreSelector,\n                maskAllText,\n                maskTextClass,\n                unmaskTextClass,\n                maskTextSelector,\n                unmaskTextSelector,\n                maskInputOptions,\n                inlineStylesheet,\n                sampling,\n                recordCanvas,\n                inlineImages,\n                userTriggeredOnInput,\n                collectFonts,\n                doc,\n                maskAttributeFn,\n                maskInputFn,\n                maskTextFn,\n                keepIframeSrcFn,\n                blockSelector,\n                unblockSelector,\n                slimDOMOptions,\n                dataURLOptions,\n                mirror,\n                iframeManager,\n                stylesheetManager,\n                shadowDomManager,\n                processedNodeManager,\n                canvasManager,\n                ignoreCSSAttributes,\n                plugins: _optionalChain([plugins\n, 'optionalAccess', _5 => _5.filter, 'call', _6 => _6((p) => p.observer)\n, 'optionalAccess', _7 => _7.map, 'call', _8 => _8((p) => ({\n                    observer: p.observer,\n                    options: p.options,\n                    callback: (payload) => wrappedEmit({\n                        type: EventType.Plugin,\n                        data: {\n                            plugin: p.name,\n                            payload,\n                        },\n                    }),\n                }))]) || [],\n            }, {});\n        };\n        iframeManager.addLoadListener((iframeEl) => {\n            try {\n                handlers.push(observe(iframeEl.contentDocument));\n            }\n            catch (error) {\n                console.warn(error);\n            }\n        });\n        const init = () => {\n            takeFullSnapshot();\n            handlers.push(observe(document));\n        };\n        if (document.readyState === 'interactive' ||\n            document.readyState === 'complete') {\n            init();\n        }\n        else {\n            handlers.push(on('DOMContentLoaded', () => {\n                wrappedEmit({\n                    type: EventType.DomContentLoaded,\n                    data: {},\n                });\n                if (recordAfter === 'DOMContentLoaded')\n                    init();\n            }));\n            handlers.push(on('load', () => {\n                wrappedEmit({\n                    type: EventType.Load,\n                    data: {},\n                });\n                if (recordAfter === 'load')\n                    init();\n            }, window));\n        }\n        return () => {\n            handlers.forEach((h) => h());\n            processedNodeManager.destroy();\n            _takeFullSnapshot = undefined;\n            unregisterErrorHandler();\n        };\n    }\n    catch (error) {\n        console.warn(error);\n    }\n}\nfunction takeFullSnapshot(isCheckout) {\n    if (!_takeFullSnapshot) {\n        throw new Error('please take full snapshot after start recording');\n    }\n    _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n    try {\n        return getCanvasManagerFn\n            ? getCanvasManagerFn(options)\n            : new CanvasManagerNoop();\n    }\n    catch (e2) {\n        console.warn('Unable to initialize CanvasManager');\n        return new CanvasManagerNoop();\n    }\n}\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n  if (isEventWithTarget(event)) {\n    return event.target ;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event) {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers ).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen() {\n  fill(WINDOW, 'open', function (originalWindowOpen) {\n    return function (...args) {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch (e) {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector  {\n  // protected for testing\n\n   constructor(\n    replay,\n    slowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n   addListeners() {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    this._teardown = () => {\n      cleanupWindowOpen();\n\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n   removeListeners() {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n   handleClick(breadcrumb, node) {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** @inheritDoc */\n   registerMutation(timestamp = Date.now()) {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerScroll(timestamp = Date.now()) {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerClick(element) {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node );\n  }\n\n  /** Count multiple clicks on elements. */\n   _handleMultiClick(node) {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n   _getClicks(node) {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n   _checkClicks() {\n    const timedOutClicks = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n   _generateBreadcrumbs(click) {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n   _scheduleCheckClicks() {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (source === IncrementalSource.Mutation) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch (e) {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event) {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event,\n) {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n  breadcrumb,\n) {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n\nvar NodeType;\n(function (NodeType) {\n    NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n    NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n    NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n    NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n    NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n    NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n  'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n  const obj = {};\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n\nconst handleDomListener = (\n  replay,\n) => {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick ? (handlerData.event ) : undefined;\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event &&\n      event.target &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result ,\n        getClickTargetNode(handlerData.event ) ,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text ).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData) {\n  const isClick = handlerData.name === 'click';\n\n  let message;\n  let target = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node) {\n  return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target ) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target) {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n  entries,\n) {\n  return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n  if (!ENTRY_TYPES[entry.entryType]) {\n    return null;\n  }\n\n  return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time) {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry) {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry,\n) {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nfunction getLargestContentfulPaint(metric\n\n) {\n  const entries = metric.entries;\n  const lastEntry = entries[entries.length - 1] ;\n  const element = lastEntry ? lastEntry.element : undefined;\n\n  const value = metric.value;\n\n  const end = getAbsoluteTime(value);\n\n  const data = {\n    type: 'largest-contentful-paint',\n    name: 'largest-contentful-paint',\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      nodeId: element ? record.mirror.getId(element) : undefined,\n    },\n  };\n\n  return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n  function addPerformanceEntry(entry) {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }) {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks = [];\n\n  (['navigation', 'paint', 'resource'] ).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(({ metric }) => {\n      replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n    }),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<<t[a-1];var s=new r(i[30]);for(a=1;a<30;++a)for(var o=i[a];o<i[a+1];++o)s[o]=o-i[a]<<5|a;return{b:i,r:s}},o=s(e,2),f=o.b,h=o.r;f[28]=258,h[258]=28;for(var l=s(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a<i;++a)t[a]&&++s[t[a]-1];var o,f=new n(r);for(a=1;a<r;++a)f[a]=f[a-1]+s[a-1]<<1;if(e){o=new n(1<<r);var h=15-r;for(a=0;a<i;++a)if(t[a])for(var l=a<<4|t[a],c=r-t[a],v=f[t[a]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>h]=l}else for(o=new n(i),a=0;a<i;++a)t[a]&&(o[a]=u[f[t[a]-1]++]>>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;a<r.length;++a)r[a]&&i.push({s:a,f:r[a]});var s=i.length,o=i.slice();if(!s)return{t:F,l:0};if(1==s){var f=new t(i[0].s+1);return f[i[0].s]=1,{t:f,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var h=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:h.f+l.f,l:h,r:l};c!=s-1;)h=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:h.f+l.f,l:h,r:l};var d=o[0].s;for(a=1;a<s;++a)o[a].s>d&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<<y;for(o.sort((function(t,n){return g[n.s]-g[t.s]||t.f-n.f}));a<s;++a){var b=o[a].s;if(!(g[b]>e))break;p+=m-(1<<w-g[b]),g[b]=e}for(p>>=y;p>0;){var M=o[a].s;g[M]<e?p-=1<<e-g[M]++-1:++a}for(;a>=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a<e;++a)t[i+a+4]=r[a];return 8*(i+4+e)},C=function(t,r,s,o,f,h,l,u,c,v,m){z(r,m++,s),++f[256];for(var b=_(f,15),M=b.t,E=b.l,x=_(h,15),C=x.t,U=x.l,F=D(M),I=F.c,S=F.n,L=D(C),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=_(q,7),H=G.t,J=G.l,K=19;K>4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(C,U,0),R=C;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[a[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B<u;++B){var rt=o[B];if(rt>255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s<o;++s)i+=e+=r[s];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<<o)-1,A=c.p||new n(32768),_=c.h||new n(z+1),x=Math.ceil(o/3),D=2*x,T=function(t){return(a[t]^a[t+1]<<x^a[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=_[H];if(A[J]=K,_[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$<Z&&a[j+$]==a[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-A[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=a[j],++I[a[j]];p=C(a,g,w,F,I,S,O,q,G,j-G,p),w||(c.r=7&p|g[p/8|0]<<3,p-=7,c.h=_,c.p=A,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+w;j+=65535){var st=j+65535;st>=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i<n.length;++i)e[i]=n.charCodeAt(i);return e}if(G)return G.encode(n);var a=n.length,s=new t(n.length+(n.length>>1)),o=0,f=function(t){s[o++]=t};for(i=0;i<a;++i){if(o+5>s.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r<e;r++)n+=t[r].length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nfunction logInfo(message, shouldAddBreadcrumb) {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    addLogBreadcrumb(message);\n  }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nfunction logInfoNextTick(message, shouldAddBreadcrumb) {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  logger.info(message);\n\n  if (shouldAddBreadcrumb) {\n    // Wait a tick here to avoid race conditions for some initial logs\n    // which may be added before replay is initialized\n    setTimeout(() => {\n      addLogBreadcrumb(message);\n    }, 0);\n  }\n}\n\nfunction addLogBreadcrumb(message) {\n  addBreadcrumb(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level: 'info',\n      message,\n    },\n    { level: 'info' },\n  );\n}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n   constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray  {\n  /** All the events that are buffered to be sent. */\n\n  /** @inheritdoc */\n\n   constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n   destroy() {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n   async addEvent(event) {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n   finish() {\n    return new Promise(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n   constructor(worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n   ensureReady() {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }) => {\n          if ((data ).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n   destroy() {\n    logInfo('[Replay] Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n   postMessage(method, arg) {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }) => {\n        const response = data ;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          DEBUG_BUILD && logger.error('[Replay]', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response );\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n   _getAndIncrementId() {\n    return this._id++;\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker  {\n  /** @inheritdoc */\n\n   constructor(worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occured.\n   */\n   ensureReady() {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n   destroy() {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfuly received and processed by worker.\n   */\n   addEvent(event) {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n   finish() {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    this._worker.postMessage('clear').then(null, e => {\n      DEBUG_BUILD && logger.warn('[Replay] Sending \"clear\" message to worker failed', e);\n    });\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n   _sendEventToWorker(data) {\n    return this._worker.postMessage('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n   async _finishRequest() {\n    const response = await this._worker.postMessage('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy  {\n\n   constructor(worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n   get hasEvents() {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n   get hasCheckout() {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n   set hasCheckout(value) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritDoc */\n   destroy() {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n   addEvent(event) {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n   async finish() {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n   ensureWorkerIsLoaded() {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n   async _ensureWorkerIsLoaded() {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n   async _switchToCompressionWorker() {\n    const { events, hasCheckout } = this._fallback;\n\n    const addEventPromises = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n    } catch (error) {\n      DEBUG_BUILD && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n    }\n  }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}) {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  logInfo('[Replay] Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    logInfo('[Replay] Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl() {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return e();\n  }\n\n  return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch (e) {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch (e) {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false },\n  { previousSessionId } = {},\n) {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession(traceInternals) {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n    logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n    return makeSession(sessionObj);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n  initialTime,\n  expiry,\n  targetTime = +new Date(),\n) {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n  session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  },\n) {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n  session,\n  { sessionIdleExpire, maxReplayDuration },\n) {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n  {\n    traceInternals,\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }\n\n,\n  sessionOptions,\n) {\n  const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    logInfoNextTick('[Replay] Creating new session', traceInternals);\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  // This should never reject\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  if (!replay.eventBuffer) {\n    return null;\n  }\n\n  try {\n    if (isCheckout && replay.recordingMode === 'buffer') {\n      replay.eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      replay.eventBuffer.hasCheckout = true;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n    DEBUG_BUILD && logger.error(error);\n    await replay.stop({ reason });\n\n    const client = getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    logInfo(\n      `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n      replay.getOptions()._experiments.traceInternals,\n    );\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event,\n  callback,\n) {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD &&\n      logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n    return null;\n  }\n\n  return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n  return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n  return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n  // Custom transports may still be returning `Promise<void>`, which means we cannot expect the status code to be available there\n  // TODO (v8): remove this check as it will no longer be necessary\n  const enforceStatusCode = isBaseTransportSend();\n\n  return (event, sendResponse) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse && sendResponse.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id );\n  }\n}\n\nfunction handleErrorEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  setTimeout(() => {\n    // Capture current event buffer as new replay\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.sendBufferedReplayOrFlush();\n  });\n}\n\nfunction isBaseTransportSend() {\n  const client = getClient();\n  if (!client) {\n    return false;\n  }\n\n  const transport = client.getTransport();\n  if (!transport) {\n    return false;\n  }\n\n  return (\n    (transport.send ).__sentry__baseTransport__ || false\n  );\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n  return (event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n\n    handleHydrationError(replay, event);\n  };\n}\n\nfunction handleHydrationError(replay, event) {\n  const exceptionValue = event.exception && event.exception.values && event.exception.values[0].value;\n  if (typeof exceptionValue !== 'string') {\n    return;\n  }\n\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    exceptionValue.match(/reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=(418|419|422|423|425)/) ||\n    // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: 'replay.hydrate-error',\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n  if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException && hint.originalException.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n      // Return true here so that we don't flush\n      return true;\n    }\n\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1000,\n      data: {\n        tag: 'breadcrumb',\n        payload: {\n          timestamp: event.timestamp,\n          type: 'default',\n          category: 'sentry.feedback',\n          data: {\n            feedbackId: event.event_id,\n          },\n        },\n      },\n    } );\n\n    return false;\n  });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(\n  replay,\n  includeAfterSendEventHandling = false,\n) {\n  const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n  return Object.assign(\n    (event, hint) => {\n      // Do nothing if replay has been disabled\n      if (!replay.isEnabled()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors, transactions, and feedbacks, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        return event;\n      }\n\n      if (isFeedbackEvent(event)) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        event.contexts.feedback.replay_id = replay.getSessionId();\n        // Add a replay breadcrumb for this piece of feedback\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && logger.log('[Replay] Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      // In cases where a custom client is used that does not support the new hooks (yet),\n      // we manually call this hook method here\n      if (afterSendHandler) {\n        // Pretend the error had a 200 response so we always capture it\n        afterSendHandler(event, { statusCode: 200 });\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n  replay,\n  entries,\n) {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n\nfunction handleHistory(handlerData) {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n  replay,\n  result,\n) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n\n/** only exported for tests */\nfunction handleFetch(handlerData) {\n  const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n  if (!endTimestamp) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url } = fetchData;\n\n  return {\n    type: 'resource.fetch',\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: {\n      method,\n      statusCode: response ? (response ).status : undefined,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nfunction handleFetchSpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleFetch(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n\n/** only exported for tests */\nfunction handleXhr(handlerData) {\n  const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n  const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n    return null;\n  }\n\n  // This is only used as a fallback, so we know the body sizes are never set here\n  const { method, url, status_code: statusCode } = sentryXhrData;\n\n  if (url === undefined) {\n    return null;\n  }\n\n  return {\n    type: 'resource.xhr',\n    name: url,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    data: {\n      method,\n      statusCode,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addXhrInstrumentationHandler(listener)`.\n */\nfunction handleXhrSpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleXhr(handlerData);\n\n    addNetworkBreadcrumb(replay, result);\n  };\n}\n\n/** Get the size of a body. */\nfunction getBodySize(\n  body,\n  textEncoder,\n) {\n  if (!body) {\n    return undefined;\n  }\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = _serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch (e) {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nfunction parseContentLengthHeader(header) {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n\n    if (body instanceof FormData) {\n      return [_serializeFormData(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (e2) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n  info,\n  warning,\n) {\n  if (!info) {\n    return {\n      headers: {},\n      size: undefined,\n      _meta: {\n        warnings: [warning],\n      },\n    };\n  }\n\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n\n  info._meta = newMeta;\n  return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n  type,\n  data,\n) {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: dropUndefinedKeys({\n      method,\n      statusCode,\n      request,\n      response,\n    }),\n  };\n\n  return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n  headers,\n  bodySize,\n  body,\n) {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings && warnings.length > 0) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n  return Object.keys(headers).reduce((filteredHeaders, key) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = headers[key];\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction _serializeFormData(formData) {\n  // This is a bit simplified, but gives us a decent estimate\n  // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: ['MAYBE_JSON_TRUNCATED'],\n      };\n    }\n\n    return {\n      body: `${truncatedBody}…`,\n      warnings: ['TEXT_TRUNCATED'],\n    };\n  }\n\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody,\n      };\n    } catch (e3) {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str) {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options\n\n,\n) {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const { input, response } = hint;\n\n  const body = input ? _getFetchRequestArgBody(input) : undefined;\n  const reqSize = getBodySize(body, options.textEncoder);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb,\n  hint,\n  options\n\n,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders },\n  input,\n  requestBodySize,\n) {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = _getFetchRequestArgBody(input);\n  const [bodyStr, warning] = getBodyString(requestBody);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n\n  return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n  captureDetails,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    networkResponseHeaders,\n  }\n\n,\n  response,\n  responseBodySize,\n) {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n  if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n    textEncoder,\n    responseBodySize,\n    captureDetails,\n    headers,\n  });\n\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n\n  return result;\n}\n\nfunction getResponseData(\n  bodyText,\n  {\n    networkCaptureBodies,\n    textEncoder,\n    responseBodySize,\n    captureDetails,\n    headers,\n  }\n\n,\n) {\n  try {\n    const size =\n      bodyText && bodyText.length && responseBodySize === undefined\n        ? getBodySize(bodyText, textEncoder)\n        : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch (error) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize response body', error);\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchResponseBody(response) {\n  const res = _tryCloneResponse(response);\n\n  if (!res) {\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to get text body from response', error);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n  // We only support getting the body from the fetch options\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n  const allHeaders = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) ;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input,\n  allowedHeaders,\n) {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n  try {\n    // We have to clone this, as the body can only be read once\n    return response.clone();\n  } catch (error) {\n    // this can throw if the response was already consumed before\n    DEBUG_BUILD && logger.warn('[Replay] Failed to clone response body', error);\n  }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n  return new Promise((resolve, reject) => {\n    const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n    _getResponseText(response)\n      .then(\n        txt => resolve(txt),\n        reason => reject(reason),\n      )\n      .finally(() => clearTimeout(timeout));\n  });\n}\n\nasync function _getResponseText(response) {\n  // Force this to be a promise, just to be safe\n  // eslint-disable-next-line no-return-await\n  return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options,\n) {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const { xhr, input } = hint;\n\n  if (!xhr) {\n    return;\n  }\n\n  const reqSize = getBodySize(input, options.textEncoder);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : _getBodySize(xhr.response, xhr.responseType, options.textEncoder);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response,\n  };\n}\n\nfunction getResponseHeaders(xhr) {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc, line) => {\n    const [key, value] = line.split(': ');\n    acc[key.toLowerCase()] = value;\n    return acc;\n  }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n  // We collect errors that happen, but only log them if we can't get any response body\n  const errors = [];\n\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n\n  // Try to manually parse the response body, if responseText fails\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n\n  DEBUG_BUILD && logger.warn('[Replay] Failed to get xhr response body', ...errors);\n\n  return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n  body,\n  responseType,\n) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n\n    if (responseType === 'json' && body && typeof body === 'object') {\n      return [JSON.stringify(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (e2) {\n    DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n  body,\n  responseType,\n  textEncoder,\n) {\n  try {\n    const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr, textEncoder);\n  } catch (e3) {\n    return undefined;\n  }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n  const client = getClient();\n\n  try {\n    const textEncoder = new TextEncoder();\n\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options = {\n      replay,\n      textEncoder,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client && client.on) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    } else {\n      // Fallback behavior\n      addFetchInstrumentationHandler(handleFetchSpanListener(replay));\n      addXhrInstrumentationHandler(handleXhrSpanListener(replay));\n    }\n  } catch (e2) {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n  options,\n  breadcrumb,\n  hint,\n) {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && logger.warn('Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n  return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n  return hint && hint.response;\n}\n\nlet _LAST_BREADCRUMB = null;\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n  return !!breadcrumb.category;\n}\n\nconst handleScopeListener =\n  (replay) =>\n  (scope) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleScope(scope);\n\n    if (!result) {\n      return;\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n\n/**\n * An event handler to handle scope changes.\n */\nfunction handleScope(scope) {\n  // TODO (v8): Remove this guard. This was put in place because we introduced\n  // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n  // For now, we'll just return null if the method doesn't exist but we should eventually\n  // get rid of this guard.\n  const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n  // Listener can be called when breadcrumbs have not changed, so we store the\n  // reference to the last crumb and only return a crumb if it has changed\n  if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n    return null;\n  }\n\n  _LAST_BREADCRUMB = newBreadcrumb;\n\n  if (\n    !isBreadcrumbWithCategory(newBreadcrumb) ||\n    ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n    newBreadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (newBreadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(newBreadcrumb);\n  }\n\n  return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n  breadcrumb,\n) {\n  const args = breadcrumb.data && breadcrumb.data.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          // We use the pretty printed JSON string here as a base\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n        }\n        return normalizedArg;\n      } catch (e) {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n  // Listeners from core SDK //\n  const scope = getCurrentScope();\n  const client = getClient();\n\n  scope.addScopeListener(handleScopeListener(replay));\n  addClickKeypressInstrumentationHandler(handleDomListener(replay));\n  addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n  if (client && client.addEventProcessor) {\n    client.addEventProcessor(eventProcessor);\n  } else {\n    addEventProcessor(eventProcessor);\n  }\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (hasHooks(client)) {\n    client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('startTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We may be missing the initial startTransaction due to timing issues,\n    // so we capture it on finish again.\n    client.on('finishTransaction', transaction => {\n      replay.lastTransaction = transaction;\n    });\n\n    // We want to flush replay\n    client.on('beforeSendFeedback', (feedbackEvent, options) => {\n      const replayId = replay.getSessionId();\n      if (options && options.includeReplay && replay.isEnabled() && replayId) {\n        // This should never reject\n        if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n          feedbackEvent.contexts.feedback.replay_id = replayId;\n        }\n      }\n    });\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client) {\n  return !!(client && client.on);\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch (error) {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n  let callbackReturnValue;\n\n  let timerId;\n  let maxTimerId;\n\n  const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc() {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers() {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush() {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced() {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n  let hadFirstEvent = false;\n\n  return (event, _isCheckout) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.warn('[Replay] Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time.\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (replay.session && replay.session.previousSessionId) {\n        return true;\n      }\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          logInfo(\n            `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n            replay.getOptions()._experiments.traceInternals,\n          );\n\n          replay.session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(replay.session);\n          }\n        }\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n  replayEvent,\n  recordingData,\n  dsn,\n  tunnel,\n) {\n  return createEnvelope(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n  recordingData,\n  headers,\n}\n\n) {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}\n\n) {\n  const integrations =\n    typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n      ? Object.keys(client._integrations)\n      : undefined;\n\n  const eventHint = { event_id, integrations };\n\n  if (client.emit) {\n    client.emit('preprocessEvent', event, eventHint);\n  }\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope(),\n  )) ;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata && client.getSdkMetadata();\n  const { name, version } = (metadata && metadata.sdk) || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}) {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const client = getClient();\n  const scope = getCurrentScope();\n  const transport = client && client.getTransport();\n  const dsn = client && client.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return;\n  }\n\n  const baseEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n    logInfo('An event processor returned `null`, will not send event.');\n    return;\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch (e) {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n  if (!response) {\n    return response;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n   constructor(statusCode) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n   constructor(rateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n  replayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n) {\n  const { recordingData, options } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n      captureException(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch (e) {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n  fn,\n  maxCount,\n  durationSeconds,\n) {\n  const counter = new Map();\n\n  const _cleanup = (now) => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = () => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest) => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer  {\n\n  /**\n   * Recording can happen in one of three modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n\n  /**\n   * The current or last active transcation.\n   * This is only available when performance is enabled.\n   */\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n\n  /**\n   * Is the integration currently active?\n   */\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n\n  /**\n   * Function to stop recording\n   */\n\n  /**\n   * Internal use for canvas recording options\n   */\n\n   constructor({\n    options,\n    recordingOptions,\n  }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } ;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event, isCheckout) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n  }\n\n  /** Get the event context. */\n   getContext() {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n   isEnabled() {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n   isPaused() {\n    return this._isPaused;\n  }\n\n  /**\n   * Determine if canvas recording is enabled\n   */\n   isRecordingCanvas() {\n    return Boolean(this._canvas);\n  }\n\n  /** Get the replay integration options. */\n   getOptions() {\n    return this._options;\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n   initializeSampling(previousSessionId) {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      this._handleException(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    logInfoNextTick(\n      `[Replay] Starting replay in ${this.recordingMode} mode`,\n      this._options._experiments.traceInternals,\n    );\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n    // Required as user activity is initially set in\n    // constructor, so if `start()` is called after\n    // session idle expiration, a replay will not be\n    // created due to an idle timeout.\n    this._updateUserActivity();\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n   startBuffering() {\n    if (this._isEnabled) {\n      throw new Error('Replay recording is already in progress');\n    }\n\n    logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n   startRecording() {\n    try {\n      const canvasOptions = this._canvas;\n\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n        emit: getHandleRecordingEmit(this),\n        onMutation: this._onMutationHandler,\n        ...(canvasOptions\n          ? {\n              recordCanvas: canvasOptions.recordCanvas,\n              getCanvasManager: canvasOptions.getCanvasManager,\n              sampling: canvasOptions.sampling,\n              dataURLOptions: canvasOptions.dataURLOptions,\n            }\n          : {}),\n      });\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n   stopRecording() {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this._handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   async stop({ forceFlush = false, reason } = {}) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      logInfo(\n        `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n        this._options._experiments.traceInternals,\n      );\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer && this.eventBuffer.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n   pause() {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n   resume() {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode ) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n   addUpdate(cb) {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer') {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n   triggerUserActivity() {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n   updateUserActivity() {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n   conditionalFlush() {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n   flush() {\n    return this._debouncedFlush() ;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of mulitple flushes happening closely together.\n   */\n   flushImmediate() {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() ;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n   cancelFlush() {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current sesion (=replay) ID */\n   getSessionId() {\n    return this.session && this.session.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n   checkAndHandleExpiredSession() {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n   setInitialState() {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n   throttledAddEvent(\n    event,\n    isCheckout,\n  ) {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n   getCurrentRoute() {\n    // eslint-disable-next-line deprecation/deprecation\n    const lastTransaction = this.lastTransaction || getCurrentScope().getTransaction();\n\n    const attributes = (lastTransaction && spanToJSON(lastTransaction).data) || {};\n    const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    if (!lastTransaction || !source || !['route', 'custom'].includes(source)) {\n      return undefined;\n    }\n\n    return spanToJSON(lastTransaction).description;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n   _initializeRecording() {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n   _handleException(error) {\n    DEBUG_BUILD && logger.error('[Replay]', error);\n\n    if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {\n      captureException(error);\n    }\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n   _initializeSessionForSampling(previousSessionId) {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        traceInternals: this._options._experiments.traceInternals,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n   _checkSession() {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n   async _refreshSession(session) {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n   _addListeners() {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n   _removeListeners() {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this._handleException(err);\n    }\n  }\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n   __init() {this._handleVisibilityChange = () => {\n    if (WINDOW.document.visibilityState === 'visible') {\n      this._doChangeToForegroundTasks();\n    } else {\n      this._doChangeToBackgroundTasks();\n    }\n  };}\n\n  /**\n   * Handle when page is blurred\n   */\n   __init2() {this._handleWindowBlur = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.blur',\n    });\n\n    // Do not count blur as a user action -- it's part of the process of them\n    // leaving the page\n    this._doChangeToBackgroundTasks(breadcrumb);\n  };}\n\n  /**\n   * Handle when page is focused\n   */\n   __init3() {this._handleWindowFocus = () => {\n    const breadcrumb = createBreadcrumb({\n      category: 'ui.focus',\n    });\n\n    // Do not count focus as a user action -- instead wait until they focus and\n    // interactive with page\n    this._doChangeToForegroundTasks(breadcrumb);\n  };}\n\n  /** Ensure page remains active when a key is pressed. */\n   __init4() {this._handleKeyboardEvent = (event) => {\n    handleKeyboardEvent(this, event);\n  };}\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n   _doChangeToBackgroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n   _doChangeToForegroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      logInfo('[Replay] Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n   _updateUserActivity(_lastActivity = Date.now()) {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n   _updateSessionActivity(_lastActivity = Date.now()) {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n   _createCustomBreadcrumb(breadcrumb) {\n    this.addUpdate(() => {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n   _addPerformanceEntries() {\n    const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n   _clearContext() {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n   _updateInitialTimestampFromEventBuffer() {\n    const { session, eventBuffer } = this;\n    if (!session || !eventBuffer) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n   _popEventContext() {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n   async _runFlush() {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && logger.error('[Replay] No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accomodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        options: this.getOptions(),\n        timestamp,\n      });\n    } catch (err) {\n      this._handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'sendReplay' });\n\n      const client = getClient();\n\n      if (client) {\n        client.recordDroppedEvent('send_error', 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n   __init5() {this._flush = async ({\n    force = false,\n  }\n\n = {}) => {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.error('[Replay] Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5000;\n    if (tooShort || tooLong) {\n      logInfo(\n        `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n          tooShort ? 'short' : 'long'\n        }, not sending replay.`,\n        this._options._experiments.traceInternals,\n      );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    // this._flushLock acts as a lock so that future calls to `_flush()`\n    // will be blocked until this promise resolves\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n      await this._flushLock;\n      this._flushLock = undefined;\n      return;\n    }\n\n    // Wait for previous flush to finish, then call the debounced `_flush()`.\n    // It's possible there are other flush requests queued and waiting for it\n    // to resolve. We want to reduce all outstanding requests (as well as any\n    // new flush requests that occur within a second of the locked flush\n    // completing) into a single flush.\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      DEBUG_BUILD && logger.error(err);\n    } finally {\n      this._debouncedFlush();\n    }\n  };}\n\n  /** Save the session, if it is sticky */\n   _maybeSaveSession() {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n   __init6() {this._onMutationHandler = (mutations) => {\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  };}\n}\n\nfunction getOption(\n  selectors,\n  defaultSelectors,\n  deprecatedClassOption,\n  deprecatedSelectorOption,\n) {\n  const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n  const allSelectors = [\n    ...selectors,\n    // @deprecated\n    ...deprecatedSelectors,\n\n    // sentry defaults\n    ...defaultSelectors,\n  ];\n\n  // @deprecated\n  if (typeof deprecatedClassOption !== 'undefined') {\n    // NOTE: No support for RegExp\n    if (typeof deprecatedClassOption === 'string') {\n      allSelectors.push(`.${deprecatedClassOption}`);\n    }\n\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n      );\n    });\n  }\n\n  return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({\n  mask,\n  unmask,\n  block,\n  unblock,\n  ignore,\n\n  // eslint-disable-next-line deprecation/deprecation\n  blockClass,\n  // eslint-disable-next-line deprecation/deprecation\n  blockSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextClass,\n  // eslint-disable-next-line deprecation/deprecation\n  maskTextSelector,\n  // eslint-disable-next-line deprecation/deprecation\n  ignoreClass,\n}) {\n  const defaultBlockedElements = ['base[href=\"/\"]'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n  const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n  const options = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(\n      block,\n      ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n      blockClass,\n      blockSelector,\n    ),\n    unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n  };\n\n  if (blockClass instanceof RegExp) {\n    options.blockClass = blockClass;\n  }\n\n  if (maskTextClass instanceof RegExp) {\n    options.maskTextClass = maskTextClass;\n  }\n\n  return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}) {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precendence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n\nconst MEDIA_SELECTORS =\n  'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\nconst replayIntegration$1 = ((options) => {\n  // eslint-disable-next-line deprecation/deprecation\n  return new Replay$1(options);\n}) ;\n\n/**\n * The main replay integration class, to be passed to `init({  integrations: [] })`.\n * @deprecated Use `replayIntegration()` instead.\n */\nclass Replay$1  {\n  /**\n   * @inheritDoc\n   */\n   static __initStatic() {this.id = 'Replay';}\n\n  /**\n   * @inheritDoc\n   */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Initial options passed to the replay integration, merged with default values.\n   * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n   * can only be finally set when setupOnce() is called.\n   *\n   * @private\n   */\n\n   constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    sessionSampleRate,\n    errorSampleRate,\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10000,\n\n    slowClickTimeout = 7000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n\n    // eslint-disable-next-line deprecation/deprecation\n    blockClass,\n    // eslint-disable-next-line deprecation/deprecation\n    blockSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    maskInputOptions,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextClass,\n    // eslint-disable-next-line deprecation/deprecation\n    maskTextSelector,\n    // eslint-disable-next-line deprecation/deprecation\n    ignoreClass,\n  } = {}) {\n    // eslint-disable-next-line deprecation/deprecation\n    this.name = Replay$1.id;\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n      blockClass,\n      blockSelector,\n      maskTextClass,\n      maskTextSelector,\n      ignoreClass,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { ...(maskInputOptions || {}), password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key, value, el) =>\n        maskAttribute({\n          maskAttributes,\n          maskAllText,\n          privacyOptions,\n          key,\n          value,\n          el,\n        }),\n\n      ...privacyOptions,\n\n      // Our defaults\n      slimDOMOptions: 'all',\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err) => {\n        try {\n          err.__rrweb__ = true;\n        } catch (error) {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      sessionSampleRate,\n      errorSampleRate,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n\n      _experiments,\n    };\n\n    if (typeof sessionSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n      );\n\n      this._initialOptions.sessionSampleRate = sessionSampleRate;\n    }\n\n    if (typeof errorSampleRate === 'number') {\n      // eslint-disable-next-line\n      console.warn(\n        `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n      );\n\n      this._initialOptions.errorSampleRate = errorSampleRate;\n    }\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && isBrowser()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n   get _isInitialized() {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n   set _isInitialized(value) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n   setupOnce() {\n    if (!isBrowser()) {\n      return;\n    }\n\n    this._setup();\n\n    // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n    // potentially create a transaction before some native SDK integrations have run\n    // and applied their own global event processor. An example is:\n    // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n    //\n    // So we call `this._initialize()` in next event loop as a workaround to wait for other\n    // global event processors to finish. This is no longer needed, but keeping it\n    // here to avoid any future issues.\n    setTimeout(() => this._initialize());\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will throw an error if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n   startBuffering() {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.startBuffering();\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   stop() {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   flush(options) {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n   getReplayId() {\n    if (!this._replay || !this._replay.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n\n  /**\n   * Initializes replay.\n   */\n   _initialize() {\n    if (!this._replay) {\n      return;\n    }\n\n    // We have to run this in _initialize, because this runs in setTimeout\n    // So when this runs all integrations have been added\n    // Before this, we cannot access integrations on the client,\n    // so we need to mutate the options here\n    this._maybeLoadFromReplayCanvasIntegration();\n\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n   _setup() {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n\n  /** Get canvas options from ReplayCanvas integration, if it is also added. */\n   _maybeLoadFromReplayCanvasIntegration() {\n    // To save bundle size, we skip checking for stuff here\n    // and instead just try-catch everything - as generally this should all be defined\n    /* eslint-disable @typescript-eslint/no-non-null-assertion */\n    try {\n      const client = getClient();\n      const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n      if (!canvasIntegration) {\n        return;\n      }\n\n      this._replay['_canvas'] = canvasIntegration.getOptions();\n    } catch (e) {\n      // ignore errors here\n    }\n    /* eslint-enable @typescript-eslint/no-non-null-assertion */\n  }\n}Replay$1.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions) {\n  const client = getClient();\n  const opt = client && (client.getOptions() );\n\n  const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n  if (!opt) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn('SDK client is not available.');\n    });\n    return finalOptions;\n  }\n\n  if (\n    initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n    initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n    opt.replaysSessionSampleRate == null &&\n    opt.replaysOnErrorSampleRate == null\n  ) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n      );\n    });\n  }\n\n  if (typeof opt.replaysSessionSampleRate === 'number') {\n    finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n  }\n\n  if (typeof opt.replaysOnErrorSampleRate === 'number') {\n    finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getReplay$1() {\n  const client = getClient();\n  return (\n    client && client.getIntegrationByName && client.getIntegrationByName('Replay')\n  );\n}\n\n// eslint-disable-next-line deprecation/deprecation\n\n/** @deprecated Use the export from `@sentry/replay` or from framework-specific SDKs like `@sentry/react` or `@sentry/vue` */\nconst getReplay = getReplay$1;\n\n/** @deprecated Use the export from `@sentry/replay` or from framework-specific SDKs like `@sentry/react` or `@sentry/vue` */\nconst replayIntegration = replayIntegration$1;\n\n/** @deprecated Use the export from `@sentry/replay` or from framework-specific SDKs like `@sentry/react` or `@sentry/vue` */\n// eslint-disable-next-line deprecation/deprecation\nclass Replay extends Replay$1 {}\n\nexport { Replay$1 as InternalReplay, Replay, getReplay, getReplay$1 as internalGetReplay, replayIntegration$1 as internalReplayIntegration, replayIntegration };\n//# sourceMappingURL=index.js.map\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport function _nullishCoalesce(lhs: unknown, rhsFn: () => unknown): unknown {\n  // by checking for loose equality to `null`, we catch both `null` and `undefined`\n  return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return rhsFn();\n//   }\n// }\n","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z\"\n}), 'SuccessOutlined');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z\"\n}), 'ReportProblemOutlined');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'ErrorOutline');","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z\"\n}), 'InfoOutlined');","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { withStyles, lighten, darken } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport SuccessOutlinedIcon from '../internal/svg-icons/SuccessOutlined';\nimport ReportProblemOutlinedIcon from '../internal/svg-icons/ReportProblemOutlined';\nimport ErrorOutlineIcon from '../internal/svg-icons/ErrorOutline';\nimport InfoOutlinedIcon from '../internal/svg-icons/InfoOutlined';\nimport CloseIcon from '../internal/svg-icons/Close';\nimport IconButton from '@material-ui/core/IconButton';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body2, {\n      borderRadius: theme.shape.borderRadius,\n      backgroundColor: 'transparent',\n      display: 'flex',\n      padding: '6px 16px'\n    }),\n\n    /* Styles applied to the root element if `variant=\"standard\"` and `color=\"success\"`. */\n    standardSuccess: {\n      color: darken(theme.palette.success.main, 0.6),\n      backgroundColor: lighten(theme.palette.success.main, 0.9),\n      '& $icon': {\n        color: theme.palette.success.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"standard\"` and `color=\"info\"`. */\n    standardInfo: {\n      color: darken(theme.palette.info.main, 0.6),\n      backgroundColor: lighten(theme.palette.info.main, 0.9),\n      '& $icon': {\n        color: theme.palette.info.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"standard\"` and `color=\"warning\"`. */\n    standardWarning: {\n      color: darken(theme.palette.warning.main, 0.6),\n      backgroundColor: lighten(theme.palette.warning.main, 0.9),\n      '& $icon': {\n        color: theme.palette.warning.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"standard\"` and `color=\"error\"`. */\n    standardError: {\n      color: darken(theme.palette.error.main, 0.6),\n      backgroundColor: lighten(theme.palette.error.main, 0.9),\n      '& $icon': {\n        color: theme.palette.error.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"success\"`. */\n    outlinedSuccess: {\n      color: theme.palette.type === 'light' ? darken(theme.palette.success.main, 0.6) : lighten(theme.palette.success.main, 0.6),\n      border: \"1px solid \".concat(theme.palette.success.main),\n      '& $icon': {\n        color: theme.palette.success.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"info\"`. */\n    outlinedInfo: {\n      color: theme.palette.type === 'light' ? darken(theme.palette.info.main, 0.6) : lighten(theme.palette.info.main, 0.6),\n      border: \"1px solid \".concat(theme.palette.info.main),\n      '& $icon': {\n        color: theme.palette.info.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"warning\"`. */\n    outlinedWarning: {\n      color: theme.palette.type === 'light' ? darken(theme.palette.warning.main, 0.6) : lighten(theme.palette.warning.main, 0.6),\n      border: \"1px solid \".concat(theme.palette.warning.main),\n      '& $icon': {\n        color: theme.palette.warning.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"error\"`. */\n    outlinedError: {\n      color: theme.palette.type === 'light' ? darken(theme.palette.error.main, 0.6) : lighten(theme.palette.error.main, 0.6),\n      border: \"1px solid \".concat(theme.palette.error.main),\n      '& $icon': {\n        color: theme.palette.error.main\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` and `color=\"success\"`. */\n    filledSuccess: {\n      color: '#fff',\n      fontWeight: theme.typography.fontWeightMedium,\n      backgroundColor: theme.palette.success.main\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` and `color=\"info\"`. */\n    filledInfo: {\n      color: '#fff',\n      fontWeight: theme.typography.fontWeightMedium,\n      backgroundColor: theme.palette.info.main\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` and `color=\"warning\"`. */\n    filledWarning: {\n      color: '#fff',\n      fontWeight: theme.typography.fontWeightMedium,\n      backgroundColor: theme.palette.warning.main\n    },\n\n    /* Styles applied to the root element if `variant=\"filled\"` and `color=\"error\"`. */\n    filledError: {\n      color: '#fff',\n      fontWeight: theme.typography.fontWeightMedium,\n      backgroundColor: theme.palette.error.main\n    },\n\n    /* Styles applied to the icon wrapper element. */\n    icon: {\n      marginRight: 12,\n      padding: '7px 0',\n      display: 'flex',\n      fontSize: 22,\n      opacity: 0.9\n    },\n\n    /* Styles applied to the message wrapper element. */\n    message: {\n      padding: '8px 0',\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent: 'center'\n    },\n\n    /* Styles applied to the action wrapper element if `action` is provided. */\n    action: {\n      display: 'flex',\n      alignItems: 'center',\n      marginLeft: 'auto',\n      paddingLeft: 16,\n      marginRight: -8\n    }\n  };\n};\nvar defaultIconMapping = {\n  success: React.createElement(SuccessOutlinedIcon, {\n    fontSize: \"inherit\"\n  }),\n  warning: React.createElement(ReportProblemOutlinedIcon, {\n    fontSize: \"inherit\"\n  }),\n  error: React.createElement(ErrorOutlineIcon, {\n    fontSize: \"inherit\"\n  }),\n  info: React.createElement(InfoOutlinedIcon, {\n    fontSize: \"inherit\"\n  })\n};\n\nvar _ref = React.createElement(CloseIcon, {\n  fontSize: \"small\"\n});\n\nvar Alert = React.forwardRef(function Alert(props, ref) {\n  var action = props.action,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$closeText = props.closeText,\n      closeText = _props$closeText === void 0 ? 'Close' : _props$closeText,\n      color = props.color,\n      icon = props.icon,\n      _props$iconMapping = props.iconMapping,\n      iconMapping = _props$iconMapping === void 0 ? defaultIconMapping : _props$iconMapping,\n      onClose = props.onClose,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'alert' : _props$role,\n      _props$severity = props.severity,\n      severity = _props$severity === void 0 ? 'success' : _props$severity,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"action\", \"children\", \"classes\", \"className\", \"closeText\", \"color\", \"icon\", \"iconMapping\", \"onClose\", \"role\", \"severity\", \"variant\"]);\n\n  return React.createElement(Paper, _extends({\n    role: role,\n    square: true,\n    elevation: 0,\n    className: clsx(classes.root, classes[\"\".concat(variant).concat(capitalize(color || severity))], className),\n    ref: ref\n  }, other), icon !== false ? React.createElement(\"div\", {\n    className: classes.icon\n  }, icon || iconMapping[severity] || defaultIconMapping[severity]) : null, React.createElement(\"div\", {\n    className: classes.message\n  }, children), action != null ? React.createElement(\"div\", {\n    className: classes.action\n  }, action) : null, action == null && onClose ? React.createElement(\"div\", {\n    className: classes.action\n  }, React.createElement(IconButton, {\n    size: \"small\",\n    \"aria-label\": closeText,\n    title: closeText,\n    color: \"inherit\",\n    onClick: onClose\n  }, _ref)) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? Alert.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The action to display. It renders after the message, at the end of the alert.\n   */\n  action: PropTypes.node,\n\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Override the default label for the *close popup* icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  closeText: PropTypes.string,\n\n  /**\n   * The main color for the alert. Unless provided, the value is taken from the `severity` prop.\n   */\n  color: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n\n  /**\n   * Override the icon displayed before the children.\n   * Unless provided, the icon is mapped to the value of the `severity` prop.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The component maps the `severity` prop to a range of different icons,\n   * for instance success to `<SuccessOutlined>`.\n   * If you wish to change this mapping, you can provide your own.\n   * Alternatively, you can use the `icon` prop to override the icon displayed.\n   */\n  iconMapping: PropTypes.shape({\n    error: PropTypes.node,\n    info: PropTypes.node,\n    success: PropTypes.node,\n    warning: PropTypes.node\n  }),\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * When provided and no `action` prop is set, a close icon button is displayed that triggers the callback when clicked.\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * The ARIA role attribute of the element.\n   */\n  role: PropTypes.string,\n\n  /**\n   * The severity of the alert. This defines the color and icon used.\n   */\n  severity: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiAlert'\n})(Alert);","import type { DsnComponents, MetricBucketItem, SdkMetadata, StatsdEnvelope, StatsdItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils';\n\n/**\n * Create envelope from a metric aggregate.\n */\nexport function createMetricEnvelope(\n  metricBucketItems: Array<MetricBucketItem>,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): StatsdEnvelope {\n  const headers: StatsdEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const item = createMetricEnvelopeItem(metricBucketItems);\n  return createEnvelope<StatsdEnvelope>(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems: MetricBucketItem[]): StatsdItem {\n  const payload = serializeMetricBuckets(metricBucketItems);\n  const metricHeaders: StatsdItem[0] = {\n    type: 'statsd',\n    length: payload.length,\n  };\n  return [metricHeaders, payload];\n}\n","import type { MeasurementUnit, MetricBucketItem, Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport type { MetricType } from './types';\n\n/**\n * Generate bucket key from metric properties.\n */\nexport function getBucketKey(\n  metricType: MetricType,\n  name: string,\n  unit: MeasurementUnit,\n  tags: Record<string, string>,\n): string {\n  const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n  return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nexport function simpleHash(s: string): number {\n  let rv = 0;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    rv = (rv << 5) - rv + c;\n    rv &= rv;\n  }\n  return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nexport function serializeMetricBuckets(metricBucketItems: MetricBucketItem[]): string {\n  let out = '';\n  for (const item of metricBucketItems) {\n    const tagEntries = Object.entries(item.tags);\n    const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n    out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n  }\n  return out;\n}\n\n/** Sanitizes units */\nexport function sanitizeUnit(unit: string): string {\n  return unit.replace(/[^\\w]+/gi, '_');\n}\n\n/** Sanitizes metric keys */\nexport function sanitizeMetricKey(key: string): string {\n  return key.replace(/[^\\w\\-.]+/gi, '_');\n}\n\nfunction sanitizeTagKey(key: string): string {\n  return key.replace(/[^\\w\\-./]+/gi, '');\n}\n\nconst tagValueReplacements: [string, string][] = [\n  ['\\n', '\\\\n'],\n  ['\\r', '\\\\r'],\n  ['\\t', '\\\\t'],\n  ['\\\\', '\\\\\\\\'],\n  ['|', '\\\\u{7c}'],\n  [',', '\\\\u{2c}'],\n];\n\nfunction getCharOrReplacement(input: string): string {\n  for (const [search, replacement] of tagValueReplacements) {\n    if (input === search) {\n      return replacement;\n    }\n  }\n\n  return input;\n}\n\nfunction sanitizeTagValue(value: string): string {\n  return [...value].reduce((acc, char) => acc + getCharOrReplacement(char), '');\n}\n\n/**\n * Sanitizes tags.\n */\nexport function sanitizeTags(unsanitizedTags: Record<string, Primitive>): Record<string, string> {\n  const tags: Record<string, string> = {};\n  for (const key in unsanitizedTags) {\n    if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n      const sanitizedKey = sanitizeTagKey(key);\n      tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key]));\n    }\n  }\n  return tags;\n}\n","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  ClientOptions,\n  DataCategory,\n  DsnComponents,\n  DynamicSamplingContext,\n  Envelope,\n  ErrorEvent,\n  Event,\n  EventDropReason,\n  EventHint,\n  EventProcessor,\n  FeedbackEvent,\n  Integration,\n  IntegrationClass,\n  MetricBucketItem,\n  MetricsAggregator,\n  Outcome,\n  ParameterizedString,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  Severity,\n  SeverityLevel,\n  StartSpanOptions,\n  Transaction,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n  SentryError,\n  SyncPromise,\n  addItemToEnvelope,\n  checkOrSetAlreadyCaught,\n  createAttachmentEnvelopeItem,\n  isParameterizedString,\n  isPlainObject,\n  isPrimitive,\n  isThenable,\n  logger,\n  makeDsn,\n  rejectedSyncPromise,\n  resolvedSyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport { getClient } from './exports';\nimport { getIsolationScope } from './hub';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport { createMetricEnvelope } from './metrics/envelope';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\n  /**\n   * A reference to a metrics aggregator\n   *\n   * @experimental Note this is alpha API. It may experience breaking changes in the future.\n   */\n  public metricsAggregator?: MetricsAggregator;\n\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Indicates whether this client's integrations have been set up. */\n  protected _integrationsInitialized: boolean;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  protected _eventProcessors: EventProcessor[];\n\n  /** Holds flushable  */\n  private _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private _hooks: Record<string, Function[]>;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this.eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(\n    message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n    scope?: Scope,\n  ): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hint)\n      : this.eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n\n    this._process(\n      this._captureEvent(event, hint, capturedSpanScope || scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureSession(session: Session): void {\n    if (!(typeof session.release === 'string')) {\n      DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n    if (transport) {\n      if (this.metricsAggregator) {\n        this.metricsAggregator.flush();\n      }\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      if (this.metricsAggregator) {\n        this.metricsAggregator.close();\n      }\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * This is an internal function to setup all integrations that should run on the client.\n   * @deprecated Use `client.init()` instead.\n   */\n  public setupIntegrations(forceInitialize?: boolean): void {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._setupIntegrations();\n    }\n  }\n\n  /** @inheritdoc */\n  public init(): void {\n    if (this._isEnabled()) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n  public getIntegrationById(integrationId: string): Integration | undefined {\n    return this.getIntegrationByName(integrationId);\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n    return this._integrations[integrationName] as T | undefined;\n  }\n\n  /**\n   * Returns the client's instance of the given integration class, it any.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    try {\n      return (this._integrations[integration.id] as T) || null;\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addIntegration(integration: Integration): void {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(\n        env,\n        createAttachmentEnvelopeItem(\n          attachment,\n          this._options.transportOptions && this._options.transportOptions.textEncoder,\n        ),\n      );\n    }\n\n    const promise = this._sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, eventOrCount?: Event | number): void {\n    if (this._options.sendClientReports) {\n      // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n      // If event is passed as third argument, we assume this is a count of 1\n      const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureAggregateMetrics(metricBucketItems: Array<MetricBucketItem>): void {\n    DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n    const metricsEnvelope = createMetricEnvelope(\n      metricBucketItems,\n      this._dsn,\n      this._options._metadata,\n      this._options.tunnel,\n    );\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(metricsEnvelope);\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n  public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'beforeSendFeedback',\n    callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'startPageLoadSpan', callback: (options: StartSpanOptions) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: string, callback: unknown): void {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n  public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'startPageLoadSpan', options: StartSpanOptions): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'startNavigationSpan', options: StartSpanOptions): void;\n\n  /** @inheritdoc */\n  public emit(hook: string, ...rest: unknown[]): void {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n  protected _setupIntegrations(): void {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n\n    // TODO v8: We don't need this flag anymore\n    this._integrationsInitialized = true;\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    scope?: Scope,\n    isolationScope = getIsolationScope(),\n  ): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      const propagationContext = {\n        ...isolationScope.getPropagationContext(),\n        ...(scope ? scope.getPropagationContext() : undefined),\n      };\n\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike<string | undefined> {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason as SentryError;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  protected _processEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event> {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    return this._prepareEvent(event, hint, scope, capturedSpanIsolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore =\n            (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n            0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(promise: PromiseLike<T>): void {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  protected _sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      DEBUG_BUILD && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * @inheritDoc\n   */\n  public abstract eventFromMessage(\n    _message: ParameterizedString,\n    // eslint-disable-next-line deprecation/deprecation\n    _level?: Severity | SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    if (event.spans) {\n      // We store the # of spans before processing in SDK metadata,\n      // so we can compare it afterwards to determine how many spans were dropped\n      const spanCountBefore = event.spans.length;\n      event.sdkProcessingMetadata = {\n        ...event.sdkProcessingMetadata,\n        spanCountBeforeProcessing: spanCountBefore,\n      };\n    }\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  const client = getClient();\n\n  if (!client || !client.addEventProcessor) {\n    return;\n  }\n\n  client.addEventProcessor(callback);\n}\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chromeVar = (WINDOW as any).chrome;\n  const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n","// TODO(v8): Move everything in this file into the browser package. Nothing here is generic and we run risk of leaking browser types into non-browser packages.\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { HandlerDataHistory } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsHistory } from '../supports';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory(): void {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    const handlerData: HandlerDataHistory = { from, to };\n    triggerHandlers('history', handlerData);\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n    return function (this: History, ...args: any[]): void {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        const handlerData: HandlerDataHistory = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport useTheme from '../styles/useTheme';\nimport IconButton from '../IconButton';\n/**\n * @ignore - internal component.\n */\n\nvar _ref = React.createElement(KeyboardArrowRight, null);\n\nvar _ref2 = React.createElement(KeyboardArrowLeft, null);\n\nvar _ref3 = React.createElement(KeyboardArrowLeft, null);\n\nvar _ref4 = React.createElement(KeyboardArrowRight, null);\n\nvar TablePaginationActions = React.forwardRef(function TablePaginationActions(props, ref) {\n  var backIconButtonProps = props.backIconButtonProps,\n      count = props.count,\n      nextIconButtonProps = props.nextIconButtonProps,\n      onChangePage = props.onChangePage,\n      page = props.page,\n      rowsPerPage = props.rowsPerPage,\n      other = _objectWithoutProperties(props, [\"backIconButtonProps\", \"count\", \"nextIconButtonProps\", \"onChangePage\", \"page\", \"rowsPerPage\"]);\n\n  var theme = useTheme();\n\n  var handleBackButtonClick = function handleBackButtonClick(event) {\n    onChangePage(event, page - 1);\n  };\n\n  var handleNextButtonClick = function handleNextButtonClick(event) {\n    onChangePage(event, page + 1);\n  };\n\n  return React.createElement(\"div\", _extends({\n    ref: ref\n  }, other), React.createElement(IconButton, _extends({\n    onClick: handleBackButtonClick,\n    disabled: page === 0,\n    color: \"inherit\"\n  }, backIconButtonProps), theme.direction === 'rtl' ? _ref : _ref2), React.createElement(IconButton, _extends({\n    onClick: handleNextButtonClick,\n    disabled: page >= Math.ceil(count / rowsPerPage) - 1,\n    color: \"inherit\"\n  }, nextIconButtonProps), theme.direction === 'rtl' ? _ref3 : _ref4));\n});\nprocess.env.NODE_ENV !== \"production\" ? TablePaginationActions.propTypes = {\n  /**\n   * Props applied to the back arrow [`IconButton`](/api/icon-button/) element.\n   */\n  backIconButtonProps: PropTypes.object,\n\n  /**\n   * The total number of rows.\n   */\n  count: PropTypes.number.isRequired,\n\n  /**\n   * Props applied to the next arrow [`IconButton`](/api/icon-button/) element.\n   */\n  nextIconButtonProps: PropTypes.object,\n\n  /**\n   * Callback fired when the page is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {number} page The page selected.\n   */\n  onChangePage: PropTypes.func.isRequired,\n\n  /**\n   * The zero-based index of the current page.\n   */\n  page: PropTypes.number.isRequired,\n\n  /**\n   * The number of rows per page.\n   */\n  rowsPerPage: PropTypes.number.isRequired\n} : void 0;\nexport default TablePaginationActions;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@material-ui/utils';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport InputBase from '../InputBase';\nimport MenuItem from '../MenuItem';\nimport Select from '../Select';\nimport TableCell from '../TableCell';\nimport Toolbar from '../Toolbar';\nimport Typography from '../Typography';\nimport TablePaginationActions from './TablePaginationActions';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.primary,\n      fontSize: theme.typography.pxToRem(14),\n      overflow: 'auto',\n      // Increase the specificity to override TableCell.\n      '&:last-child': {\n        padding: 0\n      }\n    },\n\n    /* Styles applied to the Toolbar component. */\n    toolbar: {\n      minHeight: 52,\n      paddingRight: 2\n    },\n\n    /* Styles applied to the spacer element. */\n    spacer: {\n      flex: '1 1 100%'\n    },\n\n    /* Styles applied to the caption Typography components if `variant=\"caption\"`. */\n    caption: {\n      flexShrink: 0\n    },\n\n    /* Styles applied to the Select component root element. */\n    selectRoot: {\n      // `.selectRoot` should be merged with `.input` in v5.\n      marginRight: 32,\n      marginLeft: 8\n    },\n\n    /* Styles applied to the Select component `select` class. */\n    select: {\n      paddingLeft: 8,\n      paddingRight: 24,\n      textAlign: 'right',\n      textAlignLast: 'right' // Align <select> on Chrome.\n\n    },\n\n    /* Styles applied to the Select component `icon` class. */\n    selectIcon: {\n      top: 1\n    },\n\n    /* Styles applied to the `InputBase` component. */\n    input: {\n      color: 'inherit',\n      fontSize: 'inherit',\n      flexShrink: 0\n    },\n\n    /* Styles applied to the MenuItem component. */\n    menuItem: {},\n\n    /* Styles applied to the internal `TablePaginationActions` component. */\n    actions: {\n      flexShrink: 0,\n      marginLeft: 20\n    }\n  };\n};\n\nvar defaultLabelDisplayedRows = function defaultLabelDisplayedRows(_ref) {\n  var from = _ref.from,\n      to = _ref.to,\n      count = _ref.count;\n  return \"\".concat(from, \"-\").concat(to === -1 ? count : to, \" of \").concat(count);\n};\n\nvar defaultRowsPerPageOptions = [10, 25, 50, 100];\n/**\n * A `TableCell` based component for placing inside `TableFooter` for pagination.\n */\n\nvar TablePagination = React.forwardRef(function TablePagination(props, ref) {\n  var _props$ActionsCompone = props.ActionsComponent,\n      ActionsComponent = _props$ActionsCompone === void 0 ? TablePaginationActions : _props$ActionsCompone,\n      backIconButtonProps = props.backIconButtonProps,\n      _props$backIconButton = props.backIconButtonText,\n      backIconButtonText = _props$backIconButton === void 0 ? 'Previous page' : _props$backIconButton,\n      classes = props.classes,\n      className = props.className,\n      colSpanProp = props.colSpan,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? TableCell : _props$component,\n      count = props.count,\n      _props$labelDisplayed = props.labelDisplayedRows,\n      labelDisplayedRows = _props$labelDisplayed === void 0 ? defaultLabelDisplayedRows : _props$labelDisplayed,\n      _props$labelRowsPerPa = props.labelRowsPerPage,\n      labelRowsPerPage = _props$labelRowsPerPa === void 0 ? 'Rows per page:' : _props$labelRowsPerPa,\n      nextIconButtonProps = props.nextIconButtonProps,\n      _props$nextIconButton = props.nextIconButtonText,\n      nextIconButtonText = _props$nextIconButton === void 0 ? 'Next page' : _props$nextIconButton,\n      onChangePage = props.onChangePage,\n      onChangeRowsPerPage = props.onChangeRowsPerPage,\n      page = props.page,\n      rowsPerPage = props.rowsPerPage,\n      _props$rowsPerPageOpt = props.rowsPerPageOptions,\n      rowsPerPageOptions = _props$rowsPerPageOpt === void 0 ? defaultRowsPerPageOptions : _props$rowsPerPageOpt,\n      _props$SelectProps = props.SelectProps,\n      SelectProps = _props$SelectProps === void 0 ? {} : _props$SelectProps,\n      other = _objectWithoutProperties(props, [\"ActionsComponent\", \"backIconButtonProps\", \"backIconButtonText\", \"classes\", \"className\", \"colSpan\", \"component\", \"count\", \"labelDisplayedRows\", \"labelRowsPerPage\", \"nextIconButtonProps\", \"nextIconButtonText\", \"onChangePage\", \"onChangeRowsPerPage\", \"page\", \"rowsPerPage\", \"rowsPerPageOptions\", \"SelectProps\"]);\n\n  var colSpan;\n\n  if (Component === TableCell || Component === 'td') {\n    colSpan = colSpanProp || 1000; // col-span over everything\n  }\n\n  var MenuItemComponent = SelectProps.native ? 'option' : MenuItem;\n  return React.createElement(Component, _extends({\n    className: clsx(classes.root, className),\n    colSpan: colSpan,\n    ref: ref\n  }, other), React.createElement(Toolbar, {\n    className: classes.toolbar\n  }, React.createElement(\"div\", {\n    className: classes.spacer\n  }), rowsPerPageOptions.length > 1 && React.createElement(Typography, {\n    color: \"inherit\",\n    variant: \"body2\",\n    className: classes.caption\n  }, labelRowsPerPage), rowsPerPageOptions.length > 1 && React.createElement(Select, _extends({\n    classes: {\n      select: classes.select,\n      icon: classes.selectIcon\n    },\n    input: React.createElement(InputBase, {\n      className: clsx(classes.input, classes.selectRoot)\n    }),\n    value: rowsPerPage,\n    onChange: onChangeRowsPerPage\n  }, SelectProps), rowsPerPageOptions.map(function (rowsPerPageOption) {\n    return React.createElement(MenuItemComponent, {\n      className: classes.menuItem,\n      key: rowsPerPageOption.value ? rowsPerPageOption.value : rowsPerPageOption,\n      value: rowsPerPageOption.value ? rowsPerPageOption.value : rowsPerPageOption\n    }, rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption);\n  })), React.createElement(Typography, {\n    color: \"inherit\",\n    variant: \"body2\",\n    className: classes.caption\n  }, labelDisplayedRows({\n    from: count === 0 ? 0 : page * rowsPerPage + 1,\n    to: Math.min(count, (page + 1) * rowsPerPage),\n    count: count,\n    page: page\n  })), React.createElement(ActionsComponent, {\n    className: classes.actions,\n    backIconButtonProps: _extends({\n      title: backIconButtonText,\n      'aria-label': backIconButtonText\n    }, backIconButtonProps),\n    count: count,\n    nextIconButtonProps: _extends({\n      title: nextIconButtonText,\n      'aria-label': nextIconButtonText\n    }, nextIconButtonProps),\n    onChangePage: onChangePage,\n    page: page,\n    rowsPerPage: rowsPerPage\n  })));\n});\nprocess.env.NODE_ENV !== \"production\" ? TablePagination.propTypes = {\n  /**\n   * The component used for displaying the actions.\n   * Either a string to use a DOM element or a component.\n   */\n  ActionsComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the back arrow [`IconButton`](/api/icon-button/) component.\n   */\n  backIconButtonProps: PropTypes.object,\n\n  /**\n   * Text label for the back arrow icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  backIconButtonText: PropTypes.string,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  colSpan: PropTypes.number,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * The total number of rows.\n   */\n  count: PropTypes.number.isRequired,\n\n  /**\n   * Customize the displayed rows label.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  labelDisplayedRows: PropTypes.func,\n\n  /**\n   * Customize the rows per page label. Invoked with a `{ from, to, count, page }`\n   * object.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  labelRowsPerPage: PropTypes.node,\n\n  /**\n   * Props applied to the next arrow [`IconButton`](/api/icon-button/) element.\n   */\n  nextIconButtonProps: PropTypes.object,\n\n  /**\n   * Text label for the next arrow icon button.\n   *\n   * For localization purposes, you can use the provided [translations](/guides/localization/).\n   */\n  nextIconButtonText: PropTypes.string,\n\n  /**\n   * Callback fired when the page is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {number} page The page selected.\n   */\n  onChangePage: PropTypes.func.isRequired,\n\n  /**\n   * Callback fired when the number of rows per page is changed.\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onChangeRowsPerPage: PropTypes.func,\n\n  /**\n   * The zero-based index of the current page.\n   */\n  page: chainPropTypes(PropTypes.number.isRequired, function (props) {\n    var count = props.count,\n        page = props.page,\n        rowsPerPage = props.rowsPerPage;\n    var newLastPage = Math.max(0, Math.ceil(count / rowsPerPage) - 1);\n\n    if (page < 0 || page > newLastPage) {\n      return new Error('Material-UI: the page prop of a TablePagination is out of range ' + \"(0 to \".concat(newLastPage, \", but page is \").concat(page, \").\"));\n    }\n\n    return null;\n  }),\n\n  /**\n   * The number of rows per page.\n   */\n  rowsPerPage: PropTypes.number.isRequired,\n\n  /**\n   * Customizes the options of the rows per page select field. If less than two options are\n   * available, no select field will be displayed.\n   */\n  rowsPerPageOptions: PropTypes.array,\n\n  /**\n   * Props applied to the rows per page [`Select`](/api/select/) element.\n   */\n  SelectProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTablePagination'\n})(TablePagination);","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon(React.createElement(\"path\", {\n  d: \"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\"\n}), 'ArrowDownward');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ArrowDownwardIcon from '../internal/svg-icons/ArrowDownward';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      cursor: 'pointer',\n      display: 'inline-flex',\n      justifyContent: 'flex-start',\n      flexDirection: 'inherit',\n      alignItems: 'center',\n      '&:focus': {\n        color: theme.palette.text.secondary\n      },\n      '&:hover': {\n        color: theme.palette.text.secondary,\n        '& $icon': {\n          opacity: 0.5\n        }\n      },\n      '&$active': {\n        color: theme.palette.text.primary,\n        // && instead of & is a workaround for https://github.com/cssinjs/jss/issues/1045\n        '&& $icon': {\n          opacity: 1,\n          color: theme.palette.text.secondary\n        }\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `active={true}`. */\n    active: {},\n\n    /* Styles applied to the icon component. */\n    icon: {\n      fontSize: 18,\n      marginRight: 4,\n      marginLeft: 4,\n      opacity: 0,\n      transition: theme.transitions.create(['opacity', 'transform'], {\n        duration: theme.transitions.duration.shorter\n      }),\n      userSelect: 'none'\n    },\n\n    /* Styles applied to the icon component if `direction=\"desc\"`. */\n    iconDirectionDesc: {\n      transform: 'rotate(0deg)'\n    },\n\n    /* Styles applied to the icon component if `direction=\"asc\"`. */\n    iconDirectionAsc: {\n      transform: 'rotate(180deg)'\n    }\n  };\n};\n/**\n * A button based label for placing inside `TableCell` for column sorting.\n */\n\nvar TableSortLabel = React.forwardRef(function TableSortLabel(props, ref) {\n  var _props$active = props.active,\n      active = _props$active === void 0 ? false : _props$active,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$direction = props.direction,\n      direction = _props$direction === void 0 ? 'asc' : _props$direction,\n      _props$hideSortIcon = props.hideSortIcon,\n      hideSortIcon = _props$hideSortIcon === void 0 ? false : _props$hideSortIcon,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? ArrowDownwardIcon : _props$IconComponent,\n      other = _objectWithoutProperties(props, [\"active\", \"children\", \"classes\", \"className\", \"direction\", \"hideSortIcon\", \"IconComponent\"]);\n\n  return React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, className, active && classes.active),\n    component: \"span\",\n    disableRipple: true,\n    ref: ref\n  }, other), children, hideSortIcon && !active ? null : React.createElement(IconComponent, {\n    className: clsx(classes.icon, classes[\"iconDirection\".concat(capitalize(direction))])\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableSortLabel.propTypes = {\n  /**\n   * If `true`, the label will have the active styling (should be true for the sorted column).\n   */\n  active: PropTypes.bool,\n\n  /**\n   * Label contents, the arrow will be appended automatically.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The current sort direction.\n   */\n  direction: PropTypes.oneOf(['asc', 'desc']),\n\n  /**\n   * Hide sort icon when active is false.\n   */\n  hideSortIcon: PropTypes.bool,\n\n  /**\n   * Sort icon to use.\n   */\n  IconComponent: PropTypes.elementType\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiTableSortLabel'\n})(TableSortLabel);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\n\nvar styles = function styles(theme) {\n  return {\n    thumb: {\n      '&$open': {\n        '& $offset': {\n          transform: 'scale(1) translateY(-10px)'\n        }\n      }\n    },\n    open: {},\n    offset: _extends({\n      zIndex: 1\n    }, theme.typography.body2, {\n      fontSize: theme.typography.pxToRem(12),\n      lineHeight: 1.2,\n      transition: theme.transitions.create(['transform'], {\n        duration: theme.transitions.duration.shortest\n      }),\n      top: -34,\n      transformOrigin: 'bottom center',\n      transform: 'scale(0)',\n      position: 'absolute'\n    }),\n    circle: {\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      width: 32,\n      height: 32,\n      borderRadius: '50% 50% 50% 0',\n      backgroundColor: 'currentColor',\n      transform: 'rotate(-45deg)'\n    },\n    label: {\n      color: theme.palette.primary.contrastText,\n      transform: 'rotate(45deg)'\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\n\nfunction ValueLabel(props) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      open = props.open,\n      value = props.value,\n      valueLabelDisplay = props.valueLabelDisplay;\n\n  if (valueLabelDisplay === 'off') {\n    return children;\n  }\n\n  return React.cloneElement(children, {\n    className: clsx(children.props.className, (open || valueLabelDisplay === 'on') && classes.open, classes.thumb)\n  }, React.createElement(\"span\", {\n    className: clsx(classes.offset, className)\n  }, React.createElement(\"span\", {\n    className: classes.circle\n  }, React.createElement(\"span\", {\n    className: classes.label\n  }, value))));\n}\n\nexport default withStyles(styles, {\n  name: 'PrivateValueLabel'\n})(ValueLabel);","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport useTheme from '../styles/useTheme';\nimport { fade, lighten, darken } from '../styles/colorManipulator';\nimport { useIsFocusVisible } from '../utils/focusVisible';\nimport ownerDocument from '../utils/ownerDocument';\nimport useEventCallback from '../utils/useEventCallback';\nimport useForkRef from '../utils/useForkRef';\nimport capitalize from '../utils/capitalize';\nimport useControlled from '../utils/useControlled';\nimport ValueLabel from './ValueLabel';\n\nfunction asc(a, b) {\n  return a - b;\n}\n\nfunction clamp(value, min, max) {\n  return Math.min(Math.max(min, value), max);\n}\n\nfunction findClosest(values, currentValue) {\n  var _values$reduce = values.reduce(function (acc, value, index) {\n    var distance = Math.abs(currentValue - value);\n\n    if (acc === null || distance < acc.distance || distance === acc.distance) {\n      return {\n        distance: distance,\n        index: index\n      };\n    }\n\n    return acc;\n  }, null),\n      closestIndex = _values$reduce.index;\n\n  return closestIndex;\n}\n\nfunction trackFinger(event, touchId) {\n  if (touchId.current !== undefined && event.changedTouches) {\n    for (var i = 0; i < event.changedTouches.length; i += 1) {\n      var touch = event.changedTouches[i];\n\n      if (touch.identifier === touchId.current) {\n        return {\n          x: touch.clientX,\n          y: touch.clientY\n        };\n      }\n    }\n\n    return false;\n  }\n\n  return {\n    x: event.clientX,\n    y: event.clientY\n  };\n}\n\nfunction valueToPercent(value, min, max) {\n  return (value - min) * 100 / (max - min);\n}\n\nfunction percentToValue(percent, min, max) {\n  return (max - min) * percent + min;\n}\n\nfunction getDecimalPrecision(num) {\n  // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.\n  // When num is bigger than 1 or less than -1 it won't get converted to this notation so it's fine.\n  if (Math.abs(num) < 1) {\n    var parts = num.toExponential().split('e-');\n    var matissaDecimalPart = parts[0].split('.')[1];\n    return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);\n  }\n\n  var decimalPart = num.toString().split('.')[1];\n  return decimalPart ? decimalPart.length : 0;\n}\n\nfunction roundValueToStep(value, step, min) {\n  var nearest = Math.round((value - min) / step) * step + min;\n  return Number(nearest.toFixed(getDecimalPrecision(step)));\n}\n\nfunction setValueIndex(_ref) {\n  var values = _ref.values,\n      source = _ref.source,\n      newValue = _ref.newValue,\n      index = _ref.index;\n\n  // Performance shortcut\n  if (values[index] === newValue) {\n    return source;\n  }\n\n  var output = _toConsumableArray(values);\n\n  output[index] = newValue;\n  return output;\n}\n\nfunction focusThumb(_ref2) {\n  var sliderRef = _ref2.sliderRef,\n      activeIndex = _ref2.activeIndex,\n      setActive = _ref2.setActive;\n\n  if (!sliderRef.current.contains(document.activeElement) || Number(document.activeElement.getAttribute('data-index')) !== activeIndex) {\n    sliderRef.current.querySelector(\"[data-index=\\\"\".concat(activeIndex, \"\\\"]\")).focus();\n  }\n\n  if (setActive) {\n    setActive(activeIndex);\n  }\n}\n\nvar axisProps = {\n  horizontal: {\n    offset: function offset(percent) {\n      return {\n        left: \"\".concat(percent, \"%\")\n      };\n    },\n    leap: function leap(percent) {\n      return {\n        width: \"\".concat(percent, \"%\")\n      };\n    }\n  },\n  'horizontal-reverse': {\n    offset: function offset(percent) {\n      return {\n        right: \"\".concat(percent, \"%\")\n      };\n    },\n    leap: function leap(percent) {\n      return {\n        width: \"\".concat(percent, \"%\")\n      };\n    }\n  },\n  vertical: {\n    offset: function offset(percent) {\n      return {\n        bottom: \"\".concat(percent, \"%\")\n      };\n    },\n    leap: function leap(percent) {\n      return {\n        height: \"\".concat(percent, \"%\")\n      };\n    }\n  }\n};\nvar defaultMarks = [];\n\nvar Identity = function Identity(x) {\n  return x;\n};\n\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      height: 2,\n      width: '100%',\n      boxSizing: 'content-box',\n      padding: '13px 0',\n      display: 'inline-block',\n      position: 'relative',\n      cursor: 'pointer',\n      touchAction: 'none',\n      color: theme.palette.primary.main,\n      WebkitTapHighlightColor: 'transparent',\n      '&$disabled': {\n        pointerEvents: 'none',\n        cursor: 'default',\n        color: theme.palette.grey[400]\n      },\n      '&$vertical': {\n        width: 2,\n        height: '100%',\n        padding: '0 13px'\n      },\n      // The primary input mechanism of the device includes a pointing device of limited accuracy.\n      '@media (pointer: coarse)': {\n        // Reach 42px touch target, about ~8mm on screen.\n        padding: '20px 0',\n        '&$vertical': {\n          padding: '0 20px'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {// TODO v5, move the style here\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      color: theme.palette.secondary.main\n    },\n\n    /* Styles applied to the root element if `marks` is provided with at least one label. */\n    marked: {\n      marginBottom: 20,\n      '&$vertical': {\n        marginBottom: 'auto',\n        marginRight: 20\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `orientation=\"vertical\"`. */\n    vertical: {},\n\n    /* Pseudo-class applied to the root and thumb element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the rail element. */\n    rail: {\n      display: 'block',\n      position: 'absolute',\n      width: '100%',\n      height: 2,\n      borderRadius: 1,\n      backgroundColor: 'currentColor',\n      opacity: 0.38,\n      '$vertical &': {\n        height: '100%',\n        width: 2\n      }\n    },\n\n    /* Styles applied to the track element. */\n    track: {\n      display: 'block',\n      position: 'absolute',\n      height: 2,\n      borderRadius: 1,\n      backgroundColor: 'currentColor',\n      '$vertical &': {\n        width: 2\n      }\n    },\n\n    /* Styles applied to the track element if `track={false}`. */\n    trackFalse: {\n      '& $track': {\n        display: 'none'\n      }\n    },\n\n    /* Styles applied to the track element if `track=\"inverted\"`. */\n    trackInverted: {\n      '& $track': {\n        backgroundColor: // Same logic as the LinearProgress track color\n        theme.palette.type === 'light' ? lighten(theme.palette.primary.main, 0.62) : darken(theme.palette.primary.main, 0.5)\n      },\n      '& $rail': {\n        opacity: 1\n      }\n    },\n\n    /* Styles applied to the thumb element. */\n    thumb: {\n      position: 'absolute',\n      width: 12,\n      height: 12,\n      marginLeft: -6,\n      marginTop: -5,\n      boxSizing: 'border-box',\n      borderRadius: '50%',\n      outline: 0,\n      backgroundColor: 'currentColor',\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      transition: theme.transitions.create(['box-shadow'], {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&::after': {\n        position: 'absolute',\n        content: '\"\"',\n        borderRadius: '50%',\n        // reach 42px hit target (2 * 15 + thumb diameter)\n        left: -15,\n        top: -15,\n        right: -15,\n        bottom: -15\n      },\n      '&$focusVisible,&:hover': {\n        boxShadow: \"0px 0px 0px 8px \".concat(fade(theme.palette.primary.main, 0.16)),\n        '@media (hover: none)': {\n          boxShadow: 'none'\n        }\n      },\n      '&$active': {\n        boxShadow: \"0px 0px 0px 14px \".concat(fade(theme.palette.primary.main, 0.16))\n      },\n      '&$disabled': {\n        width: 8,\n        height: 8,\n        marginLeft: -4,\n        marginTop: -3,\n        '&:hover': {\n          boxShadow: 'none'\n        }\n      },\n      '$vertical &': {\n        marginLeft: -5,\n        marginBottom: -6\n      },\n      '$vertical &$disabled': {\n        marginLeft: -3,\n        marginBottom: -4\n      }\n    },\n\n    /* Styles applied to the thumb element if `color=\"primary\"`. */\n    thumbColorPrimary: {// TODO v5, move the style here\n    },\n\n    /* Styles applied to the thumb element if `color=\"secondary\"`. */\n    thumbColorSecondary: {\n      '&$focusVisible,&:hover': {\n        boxShadow: \"0px 0px 0px 8px \".concat(fade(theme.palette.secondary.main, 0.16))\n      },\n      '&$active': {\n        boxShadow: \"0px 0px 0px 14px \".concat(fade(theme.palette.secondary.main, 0.16))\n      }\n    },\n\n    /* Pseudo-class applied to the thumb element if it's active. */\n    active: {},\n\n    /* Pseudo-class applied to the thumb element if keyboard focused. */\n    focusVisible: {},\n\n    /* Styles applied to the thumb label element. */\n    valueLabel: {},\n\n    /* Styles applied to the mark element. */\n    mark: {\n      position: 'absolute',\n      width: 2,\n      height: 2,\n      borderRadius: 1,\n      backgroundColor: 'currentColor'\n    },\n\n    /* Styles applied to the mark element if active (depending on the value). */\n    markActive: {\n      backgroundColor: theme.palette.background.paper,\n      opacity: 0.8\n    },\n\n    /* Styles applied to the mark label element. */\n    markLabel: _extends({}, theme.typography.body2, {\n      color: theme.palette.text.secondary,\n      position: 'absolute',\n      top: 26,\n      transform: 'translateX(-50%)',\n      whiteSpace: 'nowrap',\n      '$vertical &': {\n        top: 'auto',\n        left: 26,\n        transform: 'translateY(50%)'\n      },\n      '@media (pointer: coarse)': {\n        top: 40,\n        '$vertical &': {\n          left: 31\n        }\n      }\n    }),\n\n    /* Styles applied to the mark label element if active (depending on the value). */\n    markLabelActive: {\n      color: theme.palette.text.primary\n    }\n  };\n};\nvar Slider = React.forwardRef(function Slider(props, ref) {\n  var ariaLabel = props['aria-label'],\n      ariaLabelledby = props['aria-labelledby'],\n      ariaValuetext = props['aria-valuetext'],\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'primary' : _props$color,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'span' : _props$component,\n      defaultValue = props.defaultValue,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      getAriaLabel = props.getAriaLabel,\n      getAriaValueText = props.getAriaValueText,\n      _props$marks = props.marks,\n      marksProp = _props$marks === void 0 ? defaultMarks : _props$marks,\n      _props$max = props.max,\n      max = _props$max === void 0 ? 100 : _props$max,\n      _props$min = props.min,\n      min = _props$min === void 0 ? 0 : _props$min,\n      name = props.name,\n      onChange = props.onChange,\n      onChangeCommitted = props.onChangeCommitted,\n      onMouseDown = props.onMouseDown,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      _props$scale = props.scale,\n      scale = _props$scale === void 0 ? Identity : _props$scale,\n      _props$step = props.step,\n      step = _props$step === void 0 ? 1 : _props$step,\n      _props$ThumbComponent = props.ThumbComponent,\n      ThumbComponent = _props$ThumbComponent === void 0 ? 'span' : _props$ThumbComponent,\n      _props$track = props.track,\n      track = _props$track === void 0 ? 'normal' : _props$track,\n      valueProp = props.value,\n      _props$ValueLabelComp = props.ValueLabelComponent,\n      ValueLabelComponent = _props$ValueLabelComp === void 0 ? ValueLabel : _props$ValueLabelComp,\n      _props$valueLabelDisp = props.valueLabelDisplay,\n      valueLabelDisplay = _props$valueLabelDisp === void 0 ? 'off' : _props$valueLabelDisp,\n      _props$valueLabelForm = props.valueLabelFormat,\n      valueLabelFormat = _props$valueLabelForm === void 0 ? Identity : _props$valueLabelForm,\n      other = _objectWithoutProperties(props, [\"aria-label\", \"aria-labelledby\", \"aria-valuetext\", \"classes\", \"className\", \"color\", \"component\", \"defaultValue\", \"disabled\", \"getAriaLabel\", \"getAriaValueText\", \"marks\", \"max\", \"min\", \"name\", \"onChange\", \"onChangeCommitted\", \"onMouseDown\", \"orientation\", \"scale\", \"step\", \"ThumbComponent\", \"track\", \"value\", \"ValueLabelComponent\", \"valueLabelDisplay\", \"valueLabelFormat\"]);\n\n  var theme = useTheme();\n  var touchId = React.useRef(); // We can't use the :active browser pseudo-classes.\n  // - The active state isn't triggered when clicking on the rail.\n  // - The active state isn't transfered when inversing a range slider.\n\n  var _React$useState = React.useState(-1),\n      active = _React$useState[0],\n      setActive = _React$useState[1];\n\n  var _React$useState2 = React.useState(-1),\n      open = _React$useState2[0],\n      setOpen = _React$useState2[1];\n\n  var _useControlled = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Slider'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      valueDerived = _useControlled2[0],\n      setValueState = _useControlled2[1];\n\n  var range = Array.isArray(valueDerived);\n  var instanceRef = React.useRef();\n  var values = range ? _toConsumableArray(valueDerived).sort(asc) : [valueDerived];\n  values = values.map(function (value) {\n    return clamp(value, min, max);\n  });\n  var marks = marksProp === true && step !== null ? _toConsumableArray(Array(Math.floor((max - min) / step) + 1)).map(function (_, index) {\n    return {\n      value: min + step * index\n    };\n  }) : marksProp;\n  instanceRef.current = {\n    source: valueDerived // Keep track of the input value to leverage immutable state comparison.\n\n  };\n\n  var _useIsFocusVisible = useIsFocusVisible(),\n      isFocusVisible = _useIsFocusVisible.isFocusVisible,\n      onBlurVisible = _useIsFocusVisible.onBlurVisible,\n      focusVisibleRef = _useIsFocusVisible.ref;\n\n  var _React$useState3 = React.useState(-1),\n      focusVisible = _React$useState3[0],\n      setFocusVisible = _React$useState3[1];\n\n  var sliderRef = React.useRef();\n  var handleFocusRef = useForkRef(focusVisibleRef, sliderRef);\n  var handleRef = useForkRef(ref, handleFocusRef);\n  var handleFocus = useEventCallback(function (event) {\n    var index = Number(event.currentTarget.getAttribute('data-index'));\n\n    if (isFocusVisible(event)) {\n      setFocusVisible(index);\n    }\n\n    setOpen(index);\n  });\n  var handleBlur = useEventCallback(function () {\n    if (focusVisible !== -1) {\n      setFocusVisible(-1);\n      onBlurVisible();\n    }\n\n    setOpen(-1);\n  });\n  var handleMouseOver = useEventCallback(function (event) {\n    var index = Number(event.currentTarget.getAttribute('data-index'));\n    setOpen(index);\n  });\n  var handleMouseLeave = useEventCallback(function () {\n    setOpen(-1);\n  });\n  var handleKeyDown = useEventCallback(function (event) {\n    var index = Number(event.currentTarget.getAttribute('data-index'));\n    var value = values[index];\n    var tenPercents = (max - min) / 10;\n    var marksValues = marks.map(function (mark) {\n      return mark.value;\n    });\n    var marksIndex = marksValues.indexOf(value);\n    var newValue;\n\n    switch (event.key) {\n      case 'Home':\n        newValue = min;\n        break;\n\n      case 'End':\n        newValue = max;\n        break;\n\n      case 'PageUp':\n        if (step) {\n          newValue = value + tenPercents;\n        }\n\n        break;\n\n      case 'PageDown':\n        if (step) {\n          newValue = value - tenPercents;\n        }\n\n        break;\n\n      case 'ArrowRight':\n      case 'ArrowUp':\n        if (step) {\n          newValue = value + step;\n        } else {\n          newValue = marksValues[marksIndex + 1] || marksValues[marksValues.length - 1];\n        }\n\n        break;\n\n      case 'ArrowLeft':\n      case 'ArrowDown':\n        if (step) {\n          newValue = value - step;\n        } else {\n          newValue = marksValues[marksIndex - 1] || marksValues[0];\n        }\n\n        break;\n\n      default:\n        return;\n    } // Prevent scroll of the page\n\n\n    event.preventDefault();\n\n    if (step) {\n      newValue = roundValueToStep(newValue, step, min);\n    }\n\n    newValue = clamp(newValue, min, max);\n\n    if (range) {\n      var previousValue = newValue;\n      newValue = setValueIndex({\n        values: values,\n        source: valueDerived,\n        newValue: newValue,\n        index: index\n      }).sort(asc);\n      focusThumb({\n        sliderRef: sliderRef,\n        activeIndex: newValue.indexOf(previousValue)\n      });\n    }\n\n    setValueState(newValue);\n    setFocusVisible(index);\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n\n    if (onChangeCommitted) {\n      onChangeCommitted(event, newValue);\n    }\n  });\n  var previousIndex = React.useRef();\n  var axis = orientation;\n\n  if (theme.direction === 'rtl' && orientation !== \"vertical\") {\n    axis += '-reverse';\n  }\n\n  var getFingerNewValue = React.useCallback(function (_ref3) {\n    var finger = _ref3.finger,\n        _ref3$move = _ref3.move,\n        move = _ref3$move === void 0 ? false : _ref3$move,\n        values2 = _ref3.values,\n        source = _ref3.source;\n    var slider = sliderRef.current;\n\n    var _slider$getBoundingCl = slider.getBoundingClientRect(),\n        width = _slider$getBoundingCl.width,\n        height = _slider$getBoundingCl.height,\n        bottom = _slider$getBoundingCl.bottom,\n        left = _slider$getBoundingCl.left;\n\n    var percent;\n\n    if (axis.indexOf('vertical') === 0) {\n      percent = (bottom - finger.y) / height;\n    } else {\n      percent = (finger.x - left) / width;\n    }\n\n    if (axis.indexOf('-reverse') !== -1) {\n      percent = 1 - percent;\n    }\n\n    var newValue;\n    newValue = percentToValue(percent, min, max);\n\n    if (step) {\n      newValue = roundValueToStep(newValue, step, min);\n    } else {\n      var marksValues = marks.map(function (mark) {\n        return mark.value;\n      });\n      var closestIndex = findClosest(marksValues, newValue);\n      newValue = marksValues[closestIndex];\n    }\n\n    newValue = clamp(newValue, min, max);\n    var activeIndex = 0;\n\n    if (range) {\n      if (!move) {\n        activeIndex = findClosest(values2, newValue);\n      } else {\n        activeIndex = previousIndex.current;\n      }\n\n      var previousValue = newValue;\n      newValue = setValueIndex({\n        values: values2,\n        source: source,\n        newValue: newValue,\n        index: activeIndex\n      }).sort(asc);\n      activeIndex = newValue.indexOf(previousValue);\n      previousIndex.current = activeIndex;\n    }\n\n    return {\n      newValue: newValue,\n      activeIndex: activeIndex\n    };\n  }, [max, min, axis, range, step, marks]);\n  var handleTouchMove = useEventCallback(function (event) {\n    var finger = trackFinger(event, touchId);\n\n    if (!finger) {\n      return;\n    }\n\n    var _getFingerNewValue = getFingerNewValue({\n      finger: finger,\n      move: true,\n      values: values,\n      source: valueDerived\n    }),\n        newValue = _getFingerNewValue.newValue,\n        activeIndex = _getFingerNewValue.activeIndex;\n\n    focusThumb({\n      sliderRef: sliderRef,\n      activeIndex: activeIndex,\n      setActive: setActive\n    });\n    setValueState(newValue);\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n  });\n  var handleTouchEnd = useEventCallback(function (event) {\n    var finger = trackFinger(event, touchId);\n\n    if (!finger) {\n      return;\n    }\n\n    var _getFingerNewValue2 = getFingerNewValue({\n      finger: finger,\n      values: values,\n      source: valueDerived\n    }),\n        newValue = _getFingerNewValue2.newValue;\n\n    setActive(-1);\n\n    if (event.type === 'touchend') {\n      setOpen(-1);\n    }\n\n    if (onChangeCommitted) {\n      onChangeCommitted(event, newValue);\n    }\n\n    touchId.current = undefined;\n    var doc = ownerDocument(sliderRef.current);\n    doc.removeEventListener('mousemove', handleTouchMove);\n    doc.removeEventListener('mouseup', handleTouchEnd);\n    doc.removeEventListener('touchmove', handleTouchMove);\n    doc.removeEventListener('touchend', handleTouchEnd);\n  });\n  var handleTouchStart = useEventCallback(function (event) {\n    // Workaround as Safari has partial support for touchAction: 'none'.\n    event.preventDefault();\n    var touch = event.changedTouches[0];\n\n    if (touch != null) {\n      // A number that uniquely identifies the current finger in the touch session.\n      touchId.current = touch.identifier;\n    }\n\n    var finger = trackFinger(event, touchId);\n\n    var _getFingerNewValue3 = getFingerNewValue({\n      finger: finger,\n      values: values,\n      source: valueDerived\n    }),\n        newValue = _getFingerNewValue3.newValue,\n        activeIndex = _getFingerNewValue3.activeIndex;\n\n    focusThumb({\n      sliderRef: sliderRef,\n      activeIndex: activeIndex,\n      setActive: setActive\n    });\n    setValueState(newValue);\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n\n    var doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('touchmove', handleTouchMove);\n    doc.addEventListener('touchend', handleTouchEnd);\n  });\n  React.useEffect(function () {\n    var slider = sliderRef.current;\n    slider.addEventListener('touchstart', handleTouchStart);\n    var doc = ownerDocument(slider);\n    return function () {\n      slider.removeEventListener('touchstart', handleTouchStart);\n      doc.removeEventListener('mousemove', handleTouchMove);\n      doc.removeEventListener('mouseup', handleTouchEnd);\n      doc.removeEventListener('touchmove', handleTouchMove);\n      doc.removeEventListener('touchend', handleTouchEnd);\n    };\n  }, [handleTouchEnd, handleTouchMove, handleTouchStart]);\n  var handleMouseDown = useEventCallback(function (event) {\n    if (onMouseDown) {\n      onMouseDown(event);\n    }\n\n    event.preventDefault();\n    var finger = trackFinger(event, touchId);\n\n    var _getFingerNewValue4 = getFingerNewValue({\n      finger: finger,\n      values: values,\n      source: valueDerived\n    }),\n        newValue = _getFingerNewValue4.newValue,\n        activeIndex = _getFingerNewValue4.activeIndex;\n\n    focusThumb({\n      sliderRef: sliderRef,\n      activeIndex: activeIndex,\n      setActive: setActive\n    });\n    setValueState(newValue);\n\n    if (onChange) {\n      onChange(event, newValue);\n    }\n\n    var doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('mousemove', handleTouchMove);\n    doc.addEventListener('mouseup', handleTouchEnd);\n  });\n  var trackOffset = valueToPercent(range ? values[0] : min, min, max);\n  var trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;\n\n  var trackStyle = _extends({}, axisProps[axis].offset(trackOffset), {}, axisProps[axis].leap(trackLeap));\n\n  return React.createElement(Component, _extends({\n    ref: handleRef,\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(color))], className, disabled && classes.disabled, marks.length > 0 && marks.some(function (mark) {\n      return mark.label;\n    }) && classes.marked, track === false && classes.trackFalse, {\n      vertical: classes.vertical\n    }[orientation], {\n      inverted: classes.trackInverted\n    }[track]),\n    onMouseDown: handleMouseDown\n  }, other), React.createElement(\"span\", {\n    className: classes.rail\n  }), React.createElement(\"span\", {\n    className: classes.track,\n    style: trackStyle\n  }), React.createElement(\"input\", {\n    value: values.join(','),\n    name: name,\n    type: \"hidden\"\n  }), marks.map(function (mark) {\n    var percent = valueToPercent(mark.value, min, max);\n    var style = axisProps[axis].offset(percent);\n    var markActive;\n\n    if (track === false) {\n      markActive = values.indexOf(mark.value) !== -1;\n    } else {\n      markActive = track === 'normal' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === 'inverted' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);\n    }\n\n    return React.createElement(React.Fragment, {\n      key: mark.value\n    }, React.createElement(\"span\", {\n      style: style,\n      className: clsx(classes.mark, markActive && classes.markActive)\n    }), React.createElement(\"span\", {\n      \"aria-hidden\": true,\n      style: style,\n      className: clsx(classes.markLabel, markActive && classes.markLabelActive)\n    }, mark.label));\n  }), values.map(function (value, index) {\n    var percent = valueToPercent(value, min, max);\n    var style = axisProps[axis].offset(percent);\n    return React.createElement(ValueLabelComponent, {\n      key: index,\n      valueLabelFormat: valueLabelFormat,\n      valueLabelDisplay: valueLabelDisplay,\n      className: classes.valueLabel,\n      value: typeof valueLabelFormat === 'function' ? valueLabelFormat(scale(value), index) : valueLabelFormat,\n      index: index,\n      open: open === index || active === index || valueLabelDisplay === 'on',\n      disabled: disabled\n    }, React.createElement(ThumbComponent, {\n      className: clsx(classes.thumb, classes[\"thumbColor\".concat(capitalize(color))], active === index && classes.active, disabled && classes.disabled, focusVisible === index && classes.focusVisible),\n      tabIndex: disabled ? null : 0,\n      role: \"slider\",\n      style: style,\n      \"data-index\": index,\n      \"aria-label\": getAriaLabel ? getAriaLabel(index) : ariaLabel,\n      \"aria-labelledby\": ariaLabelledby,\n      \"aria-orientation\": orientation,\n      \"aria-valuemax\": scale(max),\n      \"aria-valuemin\": scale(min),\n      \"aria-valuenow\": scale(value),\n      \"aria-valuetext\": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,\n      onKeyDown: handleKeyDown,\n      onFocus: handleFocus,\n      onBlur: handleBlur,\n      onMouseOver: handleMouseOver,\n      onMouseLeave: handleMouseLeave\n    }));\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Slider.propTypes = {\n  /**\n   * The label of the slider.\n   */\n  'aria-label': chainPropTypes(PropTypes.string, function (props) {\n    var range = Array.isArray(props.value || props.defaultValue);\n\n    if (range && props['aria-label'] != null) {\n      return new Error('Material-UI: you need to use the `getAriaLabel` prop instead of `aria-label` when using a range slider.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * The id of the element containing a label for the slider.\n   */\n  'aria-labelledby': PropTypes.string,\n\n  /**\n   * A string value that provides a user-friendly name for the current value of the slider.\n   */\n  'aria-valuetext': chainPropTypes(PropTypes.string, function (props) {\n    var range = Array.isArray(props.value || props.defaultValue);\n\n    if (range && props['aria-valuetext'] != null) {\n      return new Error('Material-UI: you need to use the `getAriaValueText` prop instead of `aria-valuetext` when using a range slider.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a DOM element or a component.\n   */\n  component: PropTypes.elementType,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.arrayOf(PropTypes.number)]),\n\n  /**\n   * If `true`, the slider will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the thumb labels of the slider.\n   *\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaLabel: PropTypes.func,\n\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider.\n   *\n   * @param {number} value The thumb label's value to format.\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaValueText: PropTypes.func,\n\n  /**\n   * Marks indicate predetermined values to which the user can move the slider.\n   * If `true` the marks will be spaced according the value of the `step` prop.\n   * If an array, it should contain objects with `value` and an optional `label` keys.\n   */\n  marks: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n\n  /**\n   * The maximum allowed value of the slider.\n   * Should not be equal to min.\n   */\n  max: PropTypes.number,\n\n  /**\n   * The minimum allowed value of the slider.\n   * Should not be equal to max.\n   */\n  min: PropTypes.number,\n\n  /**\n   * Name attribute of the hidden `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback function that is fired when the slider's value changed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {any} value The new value.\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback function that is fired when the `mouseup` is triggered.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {any} value The new value.\n   */\n  onChangeCommitted: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onMouseDown: PropTypes.func,\n\n  /**\n   * The slider orientation.\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\n   * A transformation function, to change the scale of the slider.\n   */\n  scale: PropTypes.func,\n\n  /**\n   * The granularity with which the slider can step through values. (A \"discrete\" slider.)\n   * The `min` prop serves as the origin for the valid values.\n   * We recommend (max - min) to be evenly divisible by the step.\n   *\n   * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.\n   */\n  step: PropTypes.number,\n\n  /**\n   * The component used to display the value label.\n   */\n  ThumbComponent: PropTypes.elementType,\n\n  /**\n   * The track presentation:\n   *\n   * - `normal` the track will render a bar representing the slider value.\n   * - `inverted` the track will render a bar representing the remaining slider value.\n   * - `false` the track will render without a bar.\n   */\n  track: PropTypes.oneOf(['normal', false, 'inverted']),\n\n  /**\n   * The value of the slider.\n   * For ranged sliders, provide an array with two values.\n   */\n  value: PropTypes.oneOfType([PropTypes.number, PropTypes.arrayOf(PropTypes.number)]),\n\n  /**\n   * The value label component.\n   */\n  ValueLabelComponent: PropTypes.elementType,\n\n  /**\n   * Controls when the value label is displayed:\n   *\n   * - `auto` the value label will display when the thumb is hovered or focused.\n   * - `on` will display persistently.\n   * - `off` will never display.\n   */\n  valueLabelDisplay: PropTypes.oneOf(['on', 'auto', 'off']),\n\n  /**\n   * The format function the value label's value.\n   *\n   * When a function is provided, it should have the following signature:\n   *\n   * - {number} value The value label's value to format\n   * - {number} index The value label's index to format\n   */\n  valueLabelFormat: PropTypes.oneOfType([PropTypes.string, PropTypes.func])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiSlider'\n})(Slider);","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && isValidElement(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) Children.map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return cloneElement(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!isValidElement(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = cloneElement(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = getChildMapping(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = _extends({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n      value: contextValue\n    }, /*#__PURE__*/React.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: PropTypes.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: PropTypes.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;"],"names":["module","exports","require","SIZE","MASK","NOT_SET","SetRef","ref","value","OwnerID","ensureSize","iter","undefined","size","__iterate","returnTrue","wrapIndex","index","uint32Index","NaN","wholeSlice","begin","end","isNeg","resolveBegin","resolveIndex","resolveEnd","defaultIndex","Infinity","Math","max","min","IS_COLLECTION_SYMBOL","isCollection","maybeCollection","Boolean","IS_KEYED_SYMBOL","isKeyed","maybeKeyed","IS_INDEXED_SYMBOL","isIndexed","maybeIndexed","isAssociative","maybeAssociative","Collection","Seq","KeyedCollection","KeyedSeq","__proto__","prototype","Object","create","constructor","IndexedCollection","IndexedSeq","SetCollection","SetSeq","Keyed","Indexed","Set","IS_SEQ_SYMBOL","isSeq","maybeSeq","IS_RECORD_SYMBOL","isRecord","maybeRecord","isImmutable","maybeImmutable","IS_ORDERED_SYMBOL","isOrdered","maybeOrdered","REAL_ITERATOR_SYMBOL","Symbol","iterator","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","this","iteratorValue","type","k","v","iteratorResult","done","iteratorDone","hasIterator","maybeIterable","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","call","toString","KEYS","VALUES","ENTRIES","inspect","toSource","hasOwnProperty","isArrayLike","Array","isArray","Number","isInteger","length","keys","Collection$$1","emptySequence","toSeq","seq","maybeIndexedSeqFromValue","ObjectSeq","TypeError","seqFromValue","__toString","cacheResult","_cache","__iterateUncached","entrySeq","toArray","fn","reverse","cache","i","entry","__iterator","__iteratorUncached","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","toIndexedSeq","indexedSeqFromValue","of","arguments","toSetSeq","ArraySeq","array","_array","get","notSetValue","has","ii","object","_object","_keys","key","EMPTY_SEQ","CollectionSeq","collection","_collection","iterations","step","IS_MAP_SYMBOL","isMap","maybeMap","isOrderedMap","maybeOrderedMap","isValueObject","maybeValue","equals","hashCode","is","valueA","valueB","valueOf","imul","a","b","c","d","smi","i32","defaultValueOf","hash","o","n","hashNumber","STRING_HASH_CACHE_MIN_STRLEN","string","hashed","stringHashCache","hashString","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","cachedHashString","obj","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","propertyIsEnumerable","node","nodeType","uniqueID","documentElement","getIENodeHash","objHashUID","set","isExtensible","Error","defineProperty","enumerable","configurable","writable","apply","hashJSObj","charCodeAt","e","WeakMap","ToKeyedSequence","KeyedSeq$$1","indexed","useKeys","_iter","_useKeys","valueSeq","this$1","reversedSequence","reverseFactory","map","mapper","context","mappedSequence","mapFactory","ToIndexedSequence","IndexedSeq$$1","includes","ToSetSequence","SetSeq$$1","FromEntriesSequence","entries","validateEntry","indexedCollection","flipFactory","flipSequence","makeSequence","flip","cacheResultThrough","filterFactory","predicate","filterSequence","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","skipWhileFactory","skipSequence","skipping","concatFactory","values","isKeyedCollection","iters","concat","filter","singleton","concatSeq","flatten","reduce","sum","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","stack","push","pop","sortFactory","comparator","defaultComparator","sort","forEach","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipAll","zipSequence","sizes","iterators","isDone","steps","every","s","some","reify","collectionClass","arrCopy","arr","offset","len","newArr","invariant","condition","error","assertNotInfinite","coerceKeyPath","keyPath","isPlainObj","name","isDataStructure","quoteString","JSON","stringify","String","_ignoreError","shallowCopy","from","to","remove","collectionCopy","splice","updateIn","updater","updatedValue","updateInDeeply","inImmutable","existing","wasNotSet","existingValue","newValue","slice","nextExisting","nextUpdated","emptyMap","setIn","setIn$1","removeIn","deleteIn","update","update$1","updateIn$1","merge","mergeIntoKeyedWith","mergeWith","merger","collections","collection$1","__ownerID","withMutations","mergeIntoCollection","oldVal","merge$1","sources","mergeWithSources","mergeWith$1","mergeDeep","mergeDeepWithSources","mergeDeepWith","deepMerger","oldValue","deepMergerWith","merged","mergeItem","hasVal","nextVal","mergeDeep$1","mergeDeepWith$1","mergeIn","m","mergeDeepIn","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","__altered","Map","KeyedCollection$$1","keyValues","_root","updateMap","deleteAll","clear","__hash","OrderedMap","sortBy","MapIterator","iterate","ownerID","makeMap","MapPrototype","removeAll","result","ArrayMapNode","shift","keyHash","didChangeSize","didAlter","removed","idx","exists","MAX_ARRAY_MAP_SIZE","ValueNode","createNodes","isEditable","newEntries","BitmapIndexedNode","bitmap","nodes","bit","popCount","keyHashFrag","newNode","updateNode","MAX_BITMAP_INDEXED_SIZE","including","count","expandedNodes","HashArrayMapNode","expandNodes","isLeafNode","newBitmap","newNodes","setAt","canEdit","newLen","newArray","after","spliceOut","val","spliceIn","newCount","MIN_HASH_ARRAY_MAP_SIZE","excluding","packedII","packedNodes","packNodes","HashCollisionNode","mergeIntoNode","keyMatch","maxIndex","EMPTY_MAP","Iterator$$1","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","subNode","__prev","prev","root","hash$$1","newRoot","newSize","idx1","idx2","x","IS_LIST_SYMBOL","isList","maybeList","List","IndexedCollection$$1","empty","emptyList","makeList","VNode","list","setSize","listNodeFor","_origin","setListBounds","newTail","_tail","getTailOffset","_capacity","updateVNode","_level","updateList","insert","oldSize","unshift","arguments$1","seqs","argument","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","left","right","tailPos","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","origin","capacity","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","EMPTY_ORDERED_MAP","Map$$1","emptyOrderedMap","_map","_list","updateOrderedMap","newMap","newList","makeOrderedMap","omap","toMap","IS_STACK_SYMBOL","isStack","maybeStack","Stack","emptyStack","pushAll","head","_head","peek","makeStack","EMPTY_STACK","StackPrototype","unshiftAll","IS_SET_SYMBOL","isSet","maybeSet","isOrderedSet","maybeOrderedSet","deepEqual","notAssociative","flipped","_","allEqual","bSize","mixin","ctor","methods","keyCopier","getOwnPropertySymbols","toJS","result$1","SetCollection$$1","emptySet","add","fromKeys","keySeq","intersect","sets","SetPrototype","union","updateSet","removes","adds","mapped","toRemove","subtract","OrderedSet","__make","__empty","EMPTY_SET","makeSet","EMPTY_RANGE","Range","start","abs","_start","_end","_step","ceil","searchValue","possibleIndex","floor","indexOf","offsetValue","lastIndexOf","other","getIn","searchKeyPath","getIn$1","hasIn","toObject","isIterable","useTuples","toOrderedMap","toOrderedSet","toSet","toStack","toList","__toStringMapper","join","returnValue","find","findEntry","sideEffect","bind","separator","joined","isFirst","reducer","initialReduction","reduceRight","not","butLast","isEmpty","countBy","grouper","groups","countByFactory","entriesSequence","entryMapper","filterNot","found","findKey","findLast","findLastEntry","findLastKey","first","flatMap","coerce","flatMapFactory","searchKey","groupBy","isKeyedIter","groupByFactory","isSubset","isSuperset","keyOf","keyMapper","last","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","skip","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeSequence","iterating","takeWhileFactory","takeUntil","ordered","keyed","h","murmurHashOfSize","hashMerge","hashCollection","CollectionPrototype","toJSON","chain","contains","mapEntries","mapKeys","KeyedCollectionPrototype","findIndex","removeNum","numArgs","spliced","findLastIndex","interpose","interposedSequence","interposeFactory","interleave","zipped","interleaved","zip","defaultZipper","zipWith","IndexedCollectionPrototype","reduction","useFirst","Set$$1","emptyOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Record","defaultValues","hasInitialized","RecordType","indices","RecordTypePrototype","_indices","_name","_defaultValues","propName","console","warn","recordName","setProp","_values","l","RecordPrototype","displayName","str","recordSeq","newValues","makeRecord","getDescriptiveName","likeRecord","record","getPrototypeOf","EMPTY_REPEAT","Repeat","times","_value","fromJS","converter","fromJSWith","defaultConverter","parentValue","converted","version","Immutable","Iterable","qEnd","safeName","patternOrChannel","channel","stringableFunc","func","fsmIterator","fsm","startState","stateUpdater","errorState","effect","nextState","arg","currentState","makeIterator","takeEvery","worker","_len","args","_key","action","yTake","yFork","ac","fork","setAction","q1","q2","takeLatest","task","yCancel","cancel","setTask","t","q3","takeLeading","yCall","takeEvery$1","takeLatest$1","_len2","_key2","takeLeading$1","_len3","_key3","ownKeys","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","target","source","getOwnPropertyDescriptors","defineProperties","_classCallCheck","instance","Constructor","APPLICATION_ACTION","SESSION_EXPIRE_TIME_IN_MILLISECONDS","SANDBOX_PATH","SERVICE_DESK","TERMS_AND_CONDITIONS_LINK","CONSENT_CONTACT_EMAIL","TIME_OUT_LIMIT","cacheBuster","Date","getTime","ENV","process","IS_PRODUCTION","TOKEN_KEY","APP_ID_KEY","AMPLITUDE_API_KEY","AMPLITUDE_API_ENDPOINT_URL","APPLICATION_BASE_PATH","getLocalePrefix","window","__LOCALE_PREFIX__","DASHBOARD_PATH","DEBUG_PATH","LOGIN_PATH","SIGNUP_PATH","FORGOTPASSWORD_PATH","PAGESUBMIT_PATH","RESETPASSWORD_PATH","SIGN_UP_SECOND_STEP_PATH","THANK_YOU","SSO_PATH","USER_LIST_PATH","USER_DETAIL_PATH","USER_CREATE_PATH","USER_UPLOAD_PATH","FIRM_USER_CREATE_PATH","FIRM_OFFICE_USER_CREATE_PATH","USER_EDIT_PATH","FIRM_USER_EDIT_PATH","FIRM_OFFICE_USER_EDIT_PATH","FIRM_LIST_PATH","FIRM_DETAIL_PATH","FIRM_EDIT_PATH","FIRM_CREATE_PATH","PROJECT_MANAGEMENT_PATH","AI_PIPELINE_MANAGEMENT_PATH","BRAND_VARIATION_MANAGEMENT_PATH","AI_EXCLUSION_MANAGEMENT_PATH","AI_EXCLUSION_MANAGEMENT_TAGS_PATH","AI_EXCLUSION_MANAGEMENT_PRODUCT_NUMBERS_PATH","AI_EXCLUSION_MANAGEMENT_MANUFACTURERS_PATH","WIDGET_MANAGEMENT_PATH","WIDGET_MANAGEMENT_SUB_PATH","ADVERTISEMENT_WIDGET_MANAGEMENT_PATH","ANNOUCEMENT_WIDGET_MANAGEMENT_PATH","FEATURED_PRODUCTS_WIDGET_MANAGEMENT_PATH","SETTINGS_PATH","SETTINGS_DASHBOARD_TEMPLATES_PATH","SETTINGS_COLLABORATOR_PERIMSSIONS_PATH","SETTINGS_TEAM_MANAGEMENT_PATH","SETTINGS_VISIBILITY_PATH","SETTINGS_COMPANY_INFO_PATH","SETTINGS_OPPORTUNITY_STATUS_PATH","SETTINGS_OPPORTUNITY_LABEL_PATH","SETTINGS_ATTACHMENT_FOLDERS_PATH","SETTINGS_ATTACHMENT_FOLDERS_TEMPLATE_PATH","SETTINGS_QUOTE_NUMBER_PATH","SETTINGS_QUOTE_SECTION_TEMPLATE_PATH","SETTINGS_QUICK_ENTRY_PATH","SETTINGS_USER_PROFILE_PATH","SETTINGS_CHANGE_PASSWORD_PATH","SETTINGS_TAKE_OFF_OPTIONS_PATH","SETTINGS_ALTERNATIVE_PREFERENCES_PATH","SETTINGS_SPEC_ASSIST_PREFERENCES_PATH","SETTINGS_AUTO_QUOTE_BILLINGS_PATH","SETTINGS_MAPPED_FIELDS_PATH","EXPORT_OPTIONS_PATH","SETTINGS_PRODUCT_SEARCH_PATH","SETTINGS_AUTO_TRACK_PROJECT_PATH","SETTINGS_PROJECT_VISIBILITY_PATH","SETTINGS_CUSTOM_EMAIL_ADDRESS","SETTINGS_EMAIL_SETTINGS_PATH","SETTINGS_CUSTOMER_DISCOUNTS_PATH","SETTINGS_DISCOUNT_MANAGEMENT_PATH","SETTINGS_PRINT_SETTING_PATH","SETTINGS_AUTO_SAVE_PATH","SETTINGS_QUOTE_EXCEL_COLUMN_PREFERENCE_PATH","SETTINGS_VENDOR_QUOTATION_MYLOGO_PATH","SETTINGS_VENDOR_QUOTATION_AUTO_TAKEOFF_PATH","SETTINGS_VENDOR_QUOTATION_NOTIFICATION_PATH","SETTINGS_VENDOR_QUOTATION_BID_EMAIL_PATH","SETTINGS_VENDOR_QUOTATION_PREFER_PATH","VENDOR_QUOTATION_SEND_BID_PATH","VENDOR_QUOTATION_BID_PATH","VENDOR_QUOTATION_BID_DETAIL_PATH","AUTO_QUOTATION_DASHBOARD_PATH","QUOTE_CONNECT_BID_PATH","QUOTE_CONNECT_BID_DETAIL_PATH","SETTINGS_QUOTE_CONNECT_BID_EMAIL_PATH","SETTINGS_QUOTE_CONNECT_CURRENCY_PATH","BID_INVITATION_DETAIL_ROOT_PATH","BID_INVITATION_DETAIL_PATH","NOT_FOUND_PATH","PROJECT_DETAIL_PATH","SPECIFICATION_LIST_PATH","SPEC_DETAIL_PATH","MASTER_DETAIL_PATH","TEMPLATE_DETAIL_PATH","PRODUCT_CATEGORY_PATH","PRODUCT_SELECTION_PATH","PROJECT_DOWNLOAD_PATH","PRODUCT_BROCHURE_PATH","TEST_PROJECT_LIST_PATH","MASTER_LIST_PATH","TEMPLATE_LIST_PATH","CREATE_NEW_QUOTE_PATH","QUOTE_LIST_PATH","QUOTE_PATH","QUOTE_TEMPLATE_PATH","QUOTE_DOWNLOAD_PREVIEW_PATH","QUOTE_DOWNLOAD_HISTORY_PATH","PRODUCTS_PATH","QUOTE_DETAIL_PATH","EDIT_QUOTE_PATH","QUOTE_EXPORT_PATH","SPEC_TO_QUOTE_PATH","CREATE_NEW_QUOTE_FROM_SPEC_PATH","SHARE_VENDOR_QUOTE_PATH","QUOTE_CONNECT_PRODUCTS_PATH","QUOTE_CONNECT_PRODUCTS_UPLOAD_PATH","QUOTE_CONNECT_PRODUCTS_EXPORT_PATH","UPDATE_PRICING_PATH","ADD_PRICING_PATH","PROJECT_LIST_PATH","PROJECT_LIST_DETAIL_PATH","MY_CONTACTS_PATH","USER_DETAILS_PATH","CONFIGURATOR_PATH","REPORT_PATH","OFFICE_LIST_PATH","OFFICE_LIST_DETAIL_PATH","PT_SPEC_DETAIL_PATH","PT_SPEC_LIST_PATH","SPEC_TO_QUOTE","ATTRIBUTES_PATH","CROSS_REFERENCE_LIST_PATH","CATEGORIES_LIST_PATH","RULE_ENGINE_PATH","PRINT_CONFIG_PATH","TRANSLATION_PATH","MEDIA_MANAGEMENT_PATH","HISTORY_PATH","PIM_SERIES_LIST_PATH","PIM_SERIES_DETAIL_PATH","PIM_DRAFT_LIST_PATH","PIM_DRAFT_DETAIL_PATH","PIM_DRAFT_EDIT_PATH","PIM_DRAFT_CREATE_PATH","PIM_INTEGRATION_MAPPING_PATH","PIM_ATTRIBUTES_LIST_PATH","PIM_DESCRIPTIONS_LIST_PATH","CREATE_NEW_PROJECT_PATH","EDIT_PROJECT_PATH","CREATE_NEW_TEST_PROJECT_PATH","EDIT_TEST_PROJECT_PATH","CREATE_NEW_SPEC_PATH","EDIT_SPEC_PATH","CREATE_NEW_MASTER_PATH","CREATE_NEW_MASTER_FROM_TEMPLATE_PATH","EDIT_MASTER_PATH","EDIT_MASTER_SPEC_PATH","CREATE_NEW_MASTER_SPEC_PATH","CREATE_NEW_TEMPLATE_PATH","EDIT_TEMPLATE_PATH","CREATE_NEW_TEMPLATE_SPEC_PATH","EDIT_TEMPLATE_SPEC_PATH","REQUEST_MASTER_PATH","defaultEnv","getEnv","Store","DEFAULT_SERVER","DEFAULT_SITE","DEFAULT_LABEL","MINIMUM_SEARCH_CHARACTERS","BYTES_PER_MB","MAX_FILE_SIZE_5MB","MAX_FILE_SIZE_15MB","MAX_FILE_SIZE_100MB","MAX_FILE_SIZE_210MB","MAX_FILE_SIZE_200MB","MAX_FILE_SIZE","MAX_ATTACHMENT_FILE_SIZE","ACCEPTED_FILE_TYPES","T_NS","SiteName","SPEC_PRINT_TYPE","SPEC_PRINT_OPERATION_ID","QUOTE_PRINT_FORMAT","REPORT_PRINT_TYPE","SPEC_TO_QUOTE_CRONJOB_TYPE","PIM_SERIES_OPERATION_TYPE","ERP_CRONJOB_TYPE","QUOTE_PRINT_TYPE","QUOTE_PRINT_OPERATION_ID","CROSS_TYPE_NAMES","PROJECT_TYPE","SPEC_TYPE","BULK_IMPORT_EXPORT_TYPE","BULK_UPLOAD_USERS_TYPE","SPEC_POLLING_TYPES","Mode","PERMISSION_PROPERTY","AMPLITUDE_EVENT","ATS_EVENT","SPEC_TO_QUOTE_PRODUCT_SOURCE","COLUMN_TYPES","DATE_INTERVAL","LOCALE","SPEC_TOOL_ID","PROJECT_TRACKER_ID","QUOTE_TOOL_ID","XREF_ID","PIM_ID","DAL_ID","AMP_ID","SIZER_ID","ACUDOR_SPEC_ID","AOSMITH_SPEC_ID","AOSMITH_XREF_ID","BOBRICK_SPEC_ID","DOBBINS_SPEC_ID","DOBBINS_XREF_ID","FIAT_SPEC_ID","FIAT_XREF_ID","FRANKE_DAL_ID","FRANKE_SPEC_ID","FRANKE_XREF_ID","LIXIL_DAL_ID","LIXIL_SPEC_ID","LIXIL_XREF_ID","LOCHINVAR_SPEC_ID","LOCHINVAR_XREF_ID","MCGUIRE_XREF_ID","MCGUIRE_DAL_ID","MISSION_RUBBER_SPEC_ID","MISSION_RUBBER_XREF_ID","MORRIS_LEE_SPEC_ID","PRIER_SPEC_ID","PRIER_XREF_ID","SPECTRUM_SPEC_ID","STERN_WILLIAMS_SPEC_ID","STERN_WILLIAMS_XREF_ID","TS_BRASS_XREF_ID","WATTS_SPEC_ID","WATTS_XREF_ID","WILLIAMS_BROTHERS_DAL_ID","WILLIAMS_BROTHERS_SPEC_ID","WILLIAMS_BROTHERS_XREF_ID","ZOELLER_XREF_ID","ZOELLER_SPEC_ID","DELTA_COMMERCIAL_SPEC_ID","DELTA_COMMERCIAL_XREF_ID","HAWS_XREF_ID","KOHLER_XREF_ID","OSB_XREF_ID","BEMIS_XREF_ID","PRESSALIT_XREF_ID","IPS_XREF_ID","PPP_SPEC_ID","PPP_DAL_ID","CONTRAC_XREF_ID","NU_AIR_SPEC_ID","NU_AIR_XREF_ID","STRIKE_FIRST_DAL_ID","MIFAB_XREF_ID","WOLSELEY_XREF_ID","CRANE_XREF_ID","CRANE_SPEC_ID","NEPTUNE_XREF_ID","FIRM_ID","CURRENCY","USD","CAD","MXN","GEOLOCATION_ID","CAPITALIZE_SECTION_TITLE_FIRM_IDS","QUOTE_DOWNLOAD_ERP_FIRM_IDS","AI_IDENTIFIED_PRODUCT_ID","SALESORDER_FIRM_IDS","NETSUITE_USER_FIRM_IDS","FIRMS_THAT_UPDATE_PRODUCT_PRICING_BY_QUOTE_PRODUCT_ID","AUTO_PRICING_UPDATE_UNIT_PRICE_FIRM_IDS","UNIT_PRICE_NAME","AUTO_PRICING_UPDATE_BUYERS_COST_FIRM_IDS","BUYERS_COST_NAME","COGS_NAME","STANDARD_COST_KEY","STANDARD_COST_CELL_NAME","BRANCH_COST_KEY","BRANCH_COST_CELL_NAME","SECTION_TITLE_VALUES_TO_CLEAR_ON_MANUFACTURER_SORT","FlagOrder","canada","usa","mexico","FlagCountriesSet","IMPERIAL_UNITS_COUNTRY_IDS","TOP_CATEGORY_PRIORITY_FOR_DRAWING_NAME","DRAWING_NAME_PRIORITY","categoryName","categoryId","label","priority","BIDSTATUS_ARRAY","id","labelPath","BIDSTATUS_LABEL_PATH_MAP","WATTS_SPEC_TOOL_TITLE","GUEST_USER_LOCATION_FILTER","or","unavailabilities","eq","and","like","GUEST_USER_ID","VENDOR_PLACEHOLDER_FIRM_PRODUCT_ID","FIRM_TYPES","VENDOR_PLACEHOLDER_FIRM_PRODUCT","BOBRICK_PLANNIN_GUIDE_FILE_ID","BOBRICK_CSI_TRAD_FILE_ID","BOBRICK_CSI_EVOLVE_FILE_ID","BOBRICK_CSI_PRIVADA_FILE_ID","BULK_UPLOAD_USERS_TEMPLATE_CSV_FILE_ID","BULK_UPLOAD_USERS_TEMPLATE_XLSX_FILE_ID","MEDIA_TYPES_GROUPS_TABLE","main","mediaGroup","roughin","manufacturer_cutsheet","revit","cad","product_summary","sales_brochure","bill_of_material","operation_guide","installation_manual","warranty","ai_source","ai_processed","sketchup","eml","shop_drawing","cut_out_template","troubleshooting_document","swatch_sheet","marketing_video","pump_curve","fan_curve","epd","product_webpage","dxf_plan","dwg_plan","dxf_front","dwg_front","dxf_side","dwg_side","dxf_model","dwg_model","configurations","ReactReduxContext","React","createContext","batch","callback","nullListeners","notify","createListenerCollection","listener","listeners","subscribe","isSubscribed","Subscription","store","parentSub","unsubscribe","handleChangeWrapper","_proto","addNestedSub","trySubscribe","notifyNestedSubs","onStateChange","tryUnsubscribe","useIsomorphicLayoutEffect","document","createElement","useLayoutEffect","useEffect","Provider","_ref","children","contextValue","useMemo","subscription","previousState","getState","Context","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","state","updateCount","payload","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","actualChildProps","childPropsFromStoreUpdate","current","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","initStateUpdates","connectAdvanced","selectorFactory","_ref2","_ref2$getDisplayName","getDisplayName","_ref2$methodName","methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","_ref2$storeKey","storeKey","_ref2$forwardRef","withRef","forwardRef","_ref2$context","connectOptions","_objectWithoutPropertiesLoose","WrappedComponent","wrappedComponentName","selectorFactoryOptions","_extends","pure","usePureOnlyMemo","ConnectFunction","props","_useMemo","reactReduxForwardedRef","propsContext","ContextToUse","Consumer","isContextConsumer","useContext","didStoreComeFromProps","dispatch","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","useReducer","previousStateUpdateResult","useRef","renderedWrappedComponent","Connect","memo","forwarded","hoistStatics","y","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","options","constant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","mapDispatchToProps","bindActionCreators","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","mergedProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","nextStateProps","statePropsChanged","handleNewState","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","match","factories","strictEqual","createConnect","_temp","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","defaultMapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","defaultMapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","defaultMergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","useReduxContext","createStoreHook","useDefaultReduxContext","useStore","createDispatchHook","useDefaultStore","useDispatch","refEquality","createSelectorHook","selector","equalityFn","_useReduxContext","selectedState","contextSub","forceRender","latestSubscriptionCallbackError","latestSelector","latestSelectedState","storeState","newSelectedState","err","message","_newSelectedState","useSelectorWithStoreAndSubscription","useDebugValue","newBatch","useSelector","defaultEqualityCheck","areArgumentsShallowlyEqual","equalityCheck","defaultMemoize","lastArgs","lastResult","getDependencies","funcs","dep","dependencyTypes","createSelectorCreator","memoize","memoizeOptions","recomputations","resultFunc","memoizedResultFunc","params","resetRecomputations","createSelector","createStructuredSelector","selectors","selectorCreator","objectKeys","composition","_slicedToArray","ApplicationActionTypes","ToggleTakeoffListAction","TOGGLE_TAKEOFF_LIST","SetTimerStartAction","SET_TIMER_START","ToggleLiveChatAction","TOGGLE_LIVE_CHAT","SetAppVersionAction","SET_APP_VERSION","SetAtsApiState","SET_ATS_API_STATE","SetScrollNodeAction","SET_SCROLL_NODE","SetAttributeDialogStateAction","SET_ATTRIBUTE_DIALOG_STATE","SetOptionDialogStateAction","SET_OPTION_DIALOG_STATE","ToggleOverlayComponentAction","TOGGLE_OVERLAY_COMPONENT","SetOverlayComponentPropsAction","SET_OVERLAY_COMPONENT_PROPS","SetOverlayComponentContentAction","SET_OVERLAY_COMPONENT_CONTENT","SetSnackbarOpenAction","SET_SNACKBAR_OPEN","SetSnackbarClosedAction","SET_SNACKBAR_CLOSED","SetLocalVarAction","SET_LOCAL_VAR","SpecToolProjectListIsLoadingAction","SPEC_TOOL_PROJECT_LIST_IS_LOADING","FileAttachmentIsLoadingAction","FILE_ATTACHMENT_IS_LOADING","FieldDropzoneStateChangeAction","FIELD_DROPZONE_STATE_CHANGE","FieldDropzoneStateResetAction","FIELD_DROPZONE_STATE_RESET","NoPhotoPreviewAction","NO_PHOTO_PREVIEW","ShowPhotoPreviewAction","SHOW_PHOTO_PREVIEW","OpenMobileAppMenuAction","OPEN_MOBILE_APP_MENU","CloseMobileAppMenuAction","CLOSE_MOBILE_APP_MENU","GetVsbEnvAction","GET_VSB_ENV","GetVsbEnvSucceededAction","GET_VSB_ENV_SUCCEEDED","SetAppMenuOpenAction","SET_APP_MENU_OPEN_ACTION","GetSessionAction","GET_SESSION_ACTION","SetSessionAction","SET_SESSION_ACTION","i18nInstance","hasUsedI18nextProvider","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transKeepBasicHtmlNodesFor","useSuspense","I18nContext","getHasUsedI18nextProvider","getDefaults","ReportNamespaces","usedNamespaces","_createClass","namespaces","_this","ns","getI18n","initReactI18next","init","_objectSpread","setDefaults","react","setI18n","_console","alreadyWarned","warnOnce","loadNamespaces","i18n","cb","isInitialized","on","initialized","setTimeout","off","hasLoadedNamespace","languages","lng","fallbackLng","lastLng","toLowerCase","loadNotPending","loadState","services","backendConnector","hasResourceBundle","backend","Component","hasChildren","getChildren","nodesToString","mem","i18nOptions","keepArray","child","elementKey","elementTag","i18nIsDynamicList","isValidElement","_typeof","clone","format","renderNodes","targetString","combinedTOpts","emptyChildrenButNeedsHandling","RegExp","test","data","getData","childs","assign","interpolator","interpolate","language","mapAST","reactNodes","astNodes","translationContent","content","parseInt","isElement","mappedChildren","inner","hasValidReactChildren","dummy","cloneElement","_inner","isNaN","voidElement","_inner2","HTML","parse","Trans","parent","i18nKey","tOptions","defaults","components","i18nFromProps","tFromProps","additionalProps","_objectWithoutProperties","i18nFromContext","reactI18nextOptions","useAsParent","defaultTransParent","defaultValue","hashTransKey","interpolationOverride","interpolation","prefix","suffix","translation","useTranslation","reportNamespaces","retNotReady","ready","_props$useSuspense","defaultNS","addUsedNamespaces","initializedStoreOnce","getT","getFixedT","nsMode","_useState","useState","_useState2","setT","isMounted","boundReset","split","ret","Promise","resolve","withTranslation","I18nextWithTranslation","_useTranslation","_useTranslation2","passDownProps","tReady","I18nextProvider","initTime","selectReducerState","reducerState","DEFAULT_MOUNT_POINT","now","makeSelectRegisteredUser","makeSelectResetPasswordStatus","makeSelectFirmTypes","makeSelectLoading","makeSelectError","makeSelectAppToken","server","makeSelectAppAuthenticatedAt","makeSelectAppIdentity","AuthObject","toImmutable","makeSelectToken","makeSelectAuthObject","makeSelectIdentityObject","identity","makeSelectIssuedTime","makeSelectExpireTime","makeSelectUserId","authObject","makeSelectUserEmail","makeSelectUserRole","makeSelectDisplayLanguageSelector","makeSelectIsSpecTool","makeSelectIsAutoquote","isSpecTool","isAq","makeSelectUserIsAtsUser","role","AclRoles","ATS_USER","makeSelectUserHasNewSearchRole","NEW_SEARCH","makeSelectUserIsAiQuotiUser","AI_QUOTI","makeSelectUserIsAnyAiUser","AI_USER","AI_2_USER","isAiUser","isAi2User","isAiQuotiUser","makeSelectUserIsDeveloper","DEVELOPER","makeSelectUserHasAnyPimRole","PIM","makeSelectUserIsPimAdmin","PIM_ADMIN","makeSelectUserHasERP","ERP","makeSelectUserHasFeatStockLevel","FEAT_STOCK_LEVEL","makeSelectCanManageAttributeManagement","ATTRIBUTE_MANAGEMENT_ACL","makeSelectSite","hasAttributemanagementAcl","site","pim","makeSelectUserHasPimPrintDescriptionAcl","PIM_PRINT_DESCRIPTION","makeSelectUserHasOMShopDrawingAcl","OM_SHOP_DRAWING","makeSelectCanManagePimPricing","PIM_PRICING_ACL","hasPimPricingAcl","makeSelectUserHasFirmAdmin","FIRM_ADMIN","makeSelectUserOfficeAdmin","OFFICE_ADMIN","makeSelectUserHasFeatAssignTo","FEAT_ASSIGN_TO","makeSelectUserHasFeatEmailImprovements","FEAT_EMAIL_IMPROVEMENTS","makeSelectUserHasBuildSizerWaterHeaterAcl","BUILDSIZER_WATER_HEATER","makeSelectUserHasFirmOrOfficeAdmin","hasFirmAdmin","hasOfficeAdmin","makeSelectCanManageFolderTemplates","makeSelectCanAccessPimToolTeamManagementSettings","makeSelectChildOrParentIsAtsUser","isAtsUser","isFirmAdmin","makeSelectHasPublishPermission","isPimAdmin","makeSelectChildOrParentCanDownloadSpecBooklet","makeSelectOriginalUserRole","LIXIR_SPEC_BOOKLET","parentCanDownloadSpecBooklet","userCanDownloadSpecBooklet","makeSelectUserCanDownloadSpecBooklet","makeSelectConfig","childOrParentCanDownloadSpecBooklet","config","isLixir","makeSelectUserHasFeatOptionBasedImages","FEAT_OPTION_BASED_IMAGES","makeSelectUserHasFeatOptionBasedCutsheets","FEAT_OPTION_BASED_MANUFACTURER_CUTSHEETS","makeSelectUserHasAiCreateXref","AI_CREATE_XREF","makeSelectChildOrParentHasFeatAltPreference","FEAT_ALT_PREFERENCES","useHasRole","parentHasRole","makeSelectUserHasPimIntegrationRole","PIM_INTEGRATION","makeSelectCanManageAttribute","makeSelectUserFirmId","firmId","canManageAtsAttribute","canManageFirmAttribute","makeSelectUserHasMasterTemplate","makeSelectAppId","appId","MASTER_TEMPLATE_EDITING","makeSelectUserHasCurrencyConversion","CURRENCY_CONVERSION","makeSelectIsUsingLogInAs","makeSelectIsSuperFirm","makeSelectIsChildFirm","userIsAtsUser","parentIsAtsUser","makeSelectChildOrParentHasSectionTemplateRemapAcl","originalIdentity","SECTION_TEMPLATE_REMAP","makeSelectIsRestrictedOutsideSalesRep","RESTRICTED_OUTSIDE_SALESREP","makeSelectUserHasQuoteConnectAcl","QUOTE_CONNECT","makeSelectUserHasNuAirSmallIndependentAcl","NU_AIR_SMALL_INDEPENDENT","makeSelectUserHasNuAirWholesaleAcl","NU_AIR_WHOLESALE","makeSelectUserHasNuAirMultiplier","hasSmallIndependentAcl","hasNuAirWholesaleAcl","makeSelectUserHasSpecAssistAcl","SPEC_ASSIST","makeSelectUserHasCsi2026Acl","FEAT_CSI_2026","makeSelectUseSpecAssist","makeSelectIsAtsSpecTool","hasSpecAssistAcl","isAtsSpecTool","makeSelectUserCanManageMasters","SPEC_MASTERS_ADMIN","isOfficeAdmin","hasSpecMastersAdminAcl","makeSelectUserHasFeatCreateShopDrawingAcl","FEAT_CREATE_SHOP_DRAWING","makeSelectUserOfficeId","spec","makeSelectIsPimTool","pt","makeSelectUseUnavailabilityPurchasabilityQuery","location","usePurchasability","immuLocation","useUnavailability","makeSelectInit","makeSelectEnv","makeSelectSpecToolSeriesLinkTemplate","makeSelectLocale","locale","makeSelectIntegratedSizerConfig","sizer","makeSelectConfigAtsSvgProps","makeSelectConfigUiOverrides","makeSelectConfigUiOverridesAppBarColor","makeSelectConfigUiOverridesUseSecondaryForDashboardWidgetIcon","makeSelectUId","makeSelectData","makeSelectDebug","makeSelectBadToken","makeSelectTemplateTranslationObject","firm","makeSelectAmplitudeData","makeSelectAppVersionData","makeSelectOffices","makeSelectUserFirm","application","offices","office","newDate","originalUserData","originalUser","originalUserEmail","originalUserName","originalUserUid","toLocalISO","offsetMs","getTimezoneOffset","toISOString","defaultData","uid","time","localTime","pathname","email","username","officeId","officeName","officeCity","officeProvince","officeCountry","companyName","companyAltName","amplitudeData","_data","isGuestUser","makeSelectDomain","makeSelectUngatedCurrency","makeSelectIsVerifyingUser","AccountActionTypes","GetQuoteAutoSavePreferenceAction","GET_QUOTE_AUTO_SAVE_PREFERENCE","GetQuoteAutoSavePreferenceSucceededAction","GET_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED","UpdateQuoteAutoSavePreferenceSucceededAction","UPDATE_QUOTE_AUTO_SAVE_PREFERENCE_SUCCEEDED","GetLoggedInUserDataSucceededAction","GET_LOGGED_IN_USER_DATA_SUCCEEDED","PotentiallyFetchManufacturerDiscountsAndPriorityAction","POTENTIALLY_FETCH_MANUFACTURER_DISCOUNTS_AND_PRIORITY","GetDiscountPriorityAction","GET_DISCOUNT_PRIORITY","GetDiscountPrioritySucceededAction","GET_DISCOUNT_PRIORITY_SUCCEEDED","GetQuoteDiscountListAction","GET_QUOTE_DISCOUNT_LIST","GetQuoteDiscountListSucceededAction","GET_QUOTE_DISCOUNT_LIST_SUCCEEDED","GetShopDrawingColorAction","GET_SHOP_DRAWING_COLOR","GetShopDrawingColorSucceededAction","GET_SHOP_DRAWING_COLOR_SUCCEEDED","GetDefaultProjectVisibilityAction","GET_DEFAULT_PROJECT_VISIBILITY","GetDefaultProjectVisibilitySucceededAction","GET_DEFAULT_PROJECT_VISIBILITY_SUCCEEDED","SetIsUpdatingQuoteExcelColumnPreferencesAction","SET_IS_UPDATING_QUOTE_EXCEL_COLUMN_PREFERENCES","UpdateQuoteExcelColumnPreferencesSucceededAction","UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED","SetIsGettingQuoteExcelColumnPreferencesAction","SET_IS_GETTING_QUOTE_EXCEL_COLUMN_PREFERENCES","GetQuoteExcelColumnPreferencesSucceededAction","GET_QUOTE_EXCEL_COLUMN_PREFERENCES_SUCCEEDED","GetQuoteExcelColumnPreferencesAction","GET_QUOTE_EXCEL_COLUMN_PREFERENCES","GetCustomerDiscountVisibilitySettingSucceededAction","GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING_SUCCEEDED","SetIsGettingCustomerDiscountVisibilitySettingAction","SET_IS_GETTING_CUSTOMER_DISCOUNT_VISIBILITY_SETTING","SetIsGettingAutoTrackingProjectSettingAction","SET_IS_GETTING_AUTO_TRACK_PROJECT_SETTING","GetAutoTrackingProjectSettingSucceededAction","GET_AUTO_TRACK_PROJECT_SETTING_SUCCEEDED","GetMasterFormatRootsSucceededAction","GET_MASTER_FORMAT_ROOTS_SUCCEEDED","GetMasterFormatRootsAction","GET_MASTER_FORMAT_ROOTS","AddBrandTagsAction","ADD_BRAND_TAGS","DeleteBrandTagsByIdAction","DELETE_BRAND_TAGS_BY_ID","GetOfficeBrandTagsSucceededAction","GET_OFFICE_BRAND_TAGS_SUCCEEDED","GetOfficeBrandTagsAction","GET_OFFICE_BRAND_TAGS","GetFirmBrandTagsAction","GET_FIRM_BRAND_TAGS","GetFirmBrandTagsSucceededAction","GET_FIRM_BRAND_TAGS_SUCCEEDED","SetIsGettingFirmBrandTagsAction","SET_IS_GETTING_FIRM_BRAND_TAGS","DeleteAclRoleAction","DELETE_ACL_ROLE","SetIsDeletingAclRoleAction","SET_IS_DELETING_ACL_ROLE","AddAclRoleAction","ADD_ACL_ROLE","SetIsAddingAclRoleAction","SET_IS_ADDING_ACL_ROLE","GetAclRolesAction","GET_ACL_ROLES","GetAclRolesSucceededAction","GET_ACL_ROLES_SUCCEEDED","SetIsGettingAclRolesAction","SET_IS_GETTING_ACL_ROLES","GetAppsSucceededAction","GET_APPS_SUCCEEDED","SetIsGettingAppsAction","SET_IS_GETTING_APPS","DeleteFavouriteCategoryAction","DELETE_FAVOURITE_CATEGORY","SaveFavouriteCategoryAction","SAVE_FAVOURITE_CATEGORY","UpdateFilterByIdSucceededAction","UPDATE_FILTER_BY_ID_SUCCEEDED","UpdateFilterByIdAction","UPDATE_FILTER_BY_ID","DeleteFilterByIdSucceededAction","DELETE_FILTER_BY_ID_SUCCEEDED","DeleteFilterByIdAction","DELETE_FILTER_BY_ID","GetFiltersByType","GET_FILTERS_BY_TYPE","GetFiltersByTypeSucceededAction","GET_FILTERS_BY_TYPE_SUCCEEDED","CreateFilterSucceededAction","CREATE_FILTER_SUCCEEDED","CreateFilterAction","CREATE_FILTER","ResetFiltersAndColumnsAction","RESET_FILTERS_AND_COLUMNS","SetLoggedInUserOfficeIdAction","SET_LOGGED_IN_USER_OFFICE_ID","GetRTypeRegionsSucceededAction","GET_R_TYPE_REGIONS_SUCCEEDED","GetRTypeRegionsAction","GET_R_TYPE_REGIONS","VerifyPasswordAction","VERIFY_PASSWORD","SetPasswordFailAction","SET_PASSWORD_FAIL","SetPasswordSuccessAction","SET_PASSWORD_SUCCESS","SetPasswordAction","SET_PASSWORD","GetUsersListAction","GET_USERS_LIST","GetOpportunityLabelsAction","GET_OPPORTUNITY_LABELS","GetOpportunityStatusesAction","GET_OPPORTUNITY_STATUSES","GetOpportunityLabelsSucceededAction","GET_OPPORTUNITY_LABELS_SUCCEEDED","GetVisibilityListAction","GET_VISIBILITY_LIST","GetVisibilityListSucceededAction","GET_VISIBILITY_LIST_SUCCEEDED","GetOpportunityStatusesSucceededAction","GET_OPPORTUNITY_STATUSES_SUCCEEDED","ResetPreferenceSucceededAction","RESET_PREFERENCE_SUCCEEDED","AddContactAction","ADD_CONTACT","EditContactAction","EDIT_CONTACT","DeleteContactsByIdAction","DELETE_CONTACT_BY_ID","DeleteContactsByIdSucceededAction","DELETE_CONTACT_BY_ID_SUCCEEDED","DeleteUserByIdAction","DELETE_USER_BY_ID","DeleteUserByIdSucceededAction","DELETE_USER_BY_ID_SUCCEEDED","DeleteOfficeByIdAction","DELETE_OFFICE_BY_ID","DeleteOfficeByIdSucceededAction","DELETE_OFFICE_BY_ID_SUCCEEDED","GetContactsSucceededAction","GET_CONTACTS_SUCCEEDED","SelectContactAction","SELECT_ACCOUNT_CONTACT","DeleteContactAction","DELETE_CONTACT","DeleteContactAndSearchContactsAction","DELETE_CONTACT_AND_SEARCH_CONTACTS","GetLogInAsUsersAction","GET_LOG_IN_AS_USERS","GetLogInAsUsersSucceededAction","GET_LOG_IN_AS_USERS_SUCCEEDED","GetCollaboratorsAction","GET_COLLABORATORS","GetNonFirmCollaboratorsSucceededAction","GET_NON_FIRM_COLLABORATORS_SUCCEEDED","GetFirmCollaboratorsSucceededAction","GET_FIRM_COLLABORATORS_SUCCEEDED","GetPartnershipsAction","GET_PARTNERSHIPS","GetPartnershipsSucceededAction","GET_PARTNERSHIPS_SUCCEEDED","SetPartnershipsAction","SET_PARTNERSHIPS","SetPartnershipsSucceededAction","SET_PARTNERSHIPS_SUCCEEDED","GetOfficeByIdAction","GET_OFFICE_BY_ID","IsFetchingFirmByIdAction","IS_FETCHING_FIRM_BY_ID","GetFirmByIdSucceededAction","GET_FIRM_BY_ID_SUCCEEDED","GetUserFirmAction","GET_USER_FIRM","GetUserFirmSucceededAction","GET_USER_FIRM_SUCCEEDED","GetFirmsForSuperFirmFirmAdminAction","GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN","GetFirmsForSuperFirmFirmAdminSucceededAction","GET_FIRMS_FOR_SUPER_FIRM_FIRM_ADMIN_SUCCEEDED","SetUpdateFirmByIdLoadingAction","PATCH_UPDATE_FIRM_BY_ID_LOADING","PatchUpdateFirmByIdSucceededAction","PATCH_UPDATE_FIRM_BY_ID_SUCCESS","GetOfficesAction","GET_OFFICES","GetOfficesSucceededAction","GET_OFFICES_SUCCEEDED","GetOfficesByFirmIdAction","GET_OFFICES_BY_FIRM_ID","GetOfficesByFirmIdSucceededAction","GET_OFFICES_BY_FIRM_ID_SUCCEEDED","GetQuoteOfficesByFirmSucceededAction","GET_QUOTE_OFFICES_BY_FIRM_SUCCEEDED","SelectOfficeAction","SELECT_OFFICE","SelectTeamOrganizationFirmAction","SELECT_TEAM_ORGANIZATION_FIRM","SelectTeamOrganizationOfficeAction","SELECT_TEAM_ORGANIZATION_OFFICE","SelectTeamOrganizationDrawerOfficeAction","SELECT_TEAM_ORGANIZATION_DRAWER_OFFICE","SelectTeamOrganizationUserAction","SELECT_TEAM_ORGANIZATION_USER","GetOfficeByIdSucceededAction","GET_OFFICE_BY_ID_SUCCEEDED","SetLogInAsUsersIsSearchingAction","SET_LOG_IN_AS_USERS_IS_SEARCHING","SearchUsersQuickAction","SEARCH_USERS_QUICK","SearchUsersQuickByOfficeIdAction","SEARCH_USERS_QUICK_BY_OFFICE_ID","GetNoteCreatorsSucceededAction","GET_NOTE_CREATORS_SUCCEEDED","SearchUsersbyUserIdFinishedAction","SEARCH_USERS_BY_USER_ID_FINISHED","SearchUsersByOfficeIdAction","SEARCH_USERS_BY_OFFICE_ID","SearchUsersAction","SEARCH_USERS","SetIsSearchingAllUsersAction","SET_IS_SEARCHING_ALL_USERS","SearchAllUsersAction","SEARCH_ALL_USERS","SearchingAllUsersSucceededAction","SEARCH_ALL_USERS_SUCCEEDED","SetIsSearchingAllFirmsAction","SET_IS_SEARCHING_ALL_FIRMS","SearchAllFirmsAction","SEARCH_ALL_FIRMS","SearchingAllFirmsSucceededAction","SEARCH_ALL_FIRMS_SUCCEEDED","DeleteFirmByIdAction","DELETE_FIRM_BY_ID","GetUsersSucceededAction","GET_USERS_SUCCEEDED","SearchUsersFinishedAction","SEARCH_USERS_FINISHED","SearchUsersByOfficeIdFinishedAction","SEARCH_USERS_BY_OFFICE_ID_FINISHED","SetLogInAsUsersAction","SET_LOG_IN_AS_USERS","GetUserByIdAction","GET_USER_BY_ID","SelectUserAction","SELECT_USER","GetUserByIdSucceededAction","GET_USER_BY_ID_SUCCEEDED","GetUserByIdMultiSucceededAction","GET_USER_BY_ID_MULTI_SUCCEEDED","GetCollaboratorsOfficeSucceededAction","GET_COLLABORATORS_OFFICE_SUCCEEDED","GetFirmsAction","GET_FIRMS","GetFirmsSucceededAction","GET_FIRMS_SUCCEEDED","SetSelectedFirmId","SET_SELECTED_FIRM_ID","GetPreferencesAction","GET_PREFERENCES","GetPreferencesSucceededAction","GET_PREFERENCES_SUCCEEDED","SetPreferencesAction","SET_PREFERENCES","UpdateOfficeByIdAction","UPDATE_OFFICE_BY_ID","CreateOfficeAction","CREATE_OFFICE","UpdateUserByIdAction","UPDATE_USER_BY_ID","UpdateUserByIdSucceededAction","UPDATE_USER_BY_ID_SUCCEEDED","UpdateUserByIdFailedAction","UPDATE_USER_BY_ID_FAILED","CreateUserAction","CREATE_USER","GetManufacturersAction","GET_MANUFACTURERS","GetManufacturersSucceededAction","GET_MANUFACTURERS_SUCCEEDED","GetBrandRepCategoriesAction","GET_BRAND_REP_CATEGORIES","GetCategoriesAction","GET_CATEGORIES","GetCategoriesSucceededAction","GET_CATEGORIES_SUCCEEDED","SetSelectedManufacturerIdAction","SET_SELECTED_MANUFACTURER_ID","SetSelectedCategoryIdAction","SET_SELECTED_CATEGORY_ID","GetDiscountsForCustomerId","GET_DISCOUNTS_FOR_CUSTOMER_ID","GetDiscountsForCustomerIdSucceeded","GET_DISCOUNTS_FOR_CUSTOMER_ID_SUCCEEDED","GetDiscountsForOfficeId","GET_DISCOUNTS_FOR_OFFICE_ID","GetDiscountsForOfficeIdSucceeded","GET_DISCOUNTS_FOR_OFFICE_ID_SUCCEEDED","AddCustomerDiscountAction","ADD_CUSTOMER_DISCOUNT","EditCustomerDiscountAction","EDIT_CUSTOMER_DISCOUNT","DeleteCustomerDiscountAction","DELETE_CUSTOMER_DISCOUNT","ResetSearchContactsBySearchTermAction","RESET_SEARCH_CONTACTS_BY_SEARCH_TERM","SearchContactsBySearchTermAction","SEARCH_CONTACTS_BY_SEARCH_TERM","SearchContactsBySearchTermSucceededAction","SEARCH_CONTACTS_BY_SEARCH_TERM_SUCCEEDED","SearchContactsAction","SEARCH_CONTACTS","SearchContactsSucceededAction","SEARCH_CONTACTS_SUCCEEDED","SearchContactsFindIndexSucceededAction","SEARCH_CONTACTS_FIND_INDEX_SUCCEEDED","SetContactsLoadingAction","SET_CONTACTS_LOADING","TrackFormSubmitFailedAction","TRACK_FORM_SUBMIT_FAILED","TrackFormSubmitSucceededAction","TRACK_FORM_SUBMIT_SUCCEEDED","SearchProductCategoriesSuccessAction","SEARCH_PRODUCT_CATEGORIES_SUCCESS","SearchDivisionsSuccessAction","SEARCH_DIVISIONS_SUCCESS","SearchManufacturersSuccessAction","SEARCH_MANUFACTURERS_SUCCESS","GetUserPreferenceOverTakeOffSuccess","GET_USER_PREFERENCE_OVER_TAKE_OFF_SUCCESS","UpdateUserPreferenceActionSuccess","UPDATE_USER_PREFERENCE_SUCCESS","GetBrandRepAction","GET_BRAND_REP","GetBrandRepSucceededAction","GET_BRAND_REP_SUCCEEDED","GetBrandRepFailedAction","GET_BRAND_REP_FAILED","GetManufacturerPreferenceAction","GET_MANUFACTURER_PREFERENCES","GetManufacturerPreferenceSucceededAction","GET_MANUFACTURER_PREFERENCES_SUCCEEDED","GetManufacturerPreferenceFailedAction","GET_MANUFACTURER_PREFERENCES_FAILED","CreateManufacturerPreferenceAction","CREATE_MANUFACTURER_PREFERENCE","CreateManufacturerPreferenceSucceededAction","CREATE_MANUFACTURER_PREFERENCE_SUCCEEDED","CreateManufacturerPreferenceFailedAction","CREATE_MANUFACTURER_PREFERENCE_FAILED","UpdateManufacturerPreferenceAction","UPDATE_MANUFACTURER_PREFERENCE","UpdateManufacturerPreferenceSucceededAction","UPDATE_MANUFACTURER_PREFERENCE_SUCCEEDED","UpdateManufacturerPreferenceFailedAction","UPDATE_MANUFACTURER_PREFERENCE_FAILED","DeleteManufacturerPreferenceAction","DELETE_MANUFACTURER_PREFERENCE","DeleteManufacturerPreferenceSucceededAction","DELETE_MANUFACTURER_PREFERENCE_SUCCEEDED","DeleteManufacturerPreferenceFailedAction","DELETE_MANUFACTURER_PREFERENCE_FAILED","GetManufacturerRankingsAction","GET_MANUFACTURER_RANKINGS","GetManufacturerRankingsSucceededAction","GET_MANUFACTURER_RANKINGS_SUCCEEDED","CreateManufacturerRankingAction","CREATE_MANUFACTURER_RANKING","CreateManufacturerRankingSucceededAction","CREATE_MANUFACTURER_RANKING_SUCCEEDED","UpdateManufacturerRankingAction","UPDATE_MANUFACTURER_RANKING","DeleteManufacturerRankingAction","DELETE_MANUFACTURER_RANKING","DeleteManufacturerRankingSucceededAction","DELETE_MANUFACTURER_RANKING_SUCCEEDED","GetSearchModeSucceed","GET_SEARCH_MODE_SUCCEED","GetAttachmentFolderTemplatesAction","GET_ATTACHMENT_FOLDER_TEMPLATES","SetIsSearchingFolderTemplatesAction","SET_IS_SEARCHING_FOLDER_TEMPLATES","GetAttachmentFolderTemplatesSucceededAction","GET_ATTACHMENT_FOLDER_TEMPLATES_SUCCEEDED","GetAttachmentFolderTemplateWithFoldersAction","GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS","GetAttachmentFolderTemplateWithFoldersSucceededAction","GET_ATTACHMENT_FOLDER_TEMPLATE_WITH_FOLDERS_SUCCEEDED","CreateAttachmentFolderTemplateAction","CREATE_ATTACHMENT_FOLDER_TEMPLATE","SetSelectedAttachmentFolderTemplateIdAction","SET_SELECTED_ATTACHMENT_FOLDER_TEMPLATE_ID","UpdateAttachmentFolderTemplateAction","UPDATE_ATTACHMENT_FOLDER_TEMPLATE","SetUserDefaultAttachmentFolderTemplateAction","SET_USER_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE","SetFirmDefaultAttachmentFolderTemplateAction","SET_FIRM_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE","GetDefaultAttachmentFolderTemplateAction","GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE","GetDefaultAttachmentFolderTemplateSucceededAction","GET_DEFAULT_ATTACHMENT_FOLDER_TEMPLATE_SUCCEEDED","GetDefaultCustomEmail","GET_DEFAULT_CUSTOM_EMAIL","GetDefaultCustomEmailSucceed","GET_DEFAULT_CUSTOM_EMAIL_SUCCEED","GetDefaultCustomEmailFailed","GET_DEFAULT_CUSTOM_EMAIL_FAILED","SetDefaultCustomEmail","SET_DEFAULT_CUSTOM_EMAIL","BulkUploadUsers","BULK_UPLOAD_USERS","SetUploadUsersProgress","SET_UPLOAD_USERS_PROGRESS","SetIsGettingVendorQuotationAutoTakeoffSettingAction","SET_IS_GETTING_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING","GetVendorQuotationAutoTakeoffSettingSucceededAction","GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING_SUCCEEDED","GetVendorQuotationAutoTakeoffSettingAction","GET_VENDOR_QUOTATION_AUTO_TAKEOFF_SETTING","SetIsGettingVendorQuotationNotificationsAction","SET_IS_GETTING_VENDOR_QUOTATION_NOTIFICATIONS","GetVendorQuotationNotificationsSucceededAction","GET_VENDOR_QUOTATION_NOTIFICATIONS_SUCCEEDED","SetIsGettingVendorQuotationMyLogoAction","SET_IS_GETTING_VENDOR_QUOTATION_MY_LOGO","GetVendorQuotationMyLogoSucceededAction","GET_VENDOR_QUOTATION_MY_LOGO_SUCCEEDED","SetIsGettingVendorQuotationBidEmailAction","SET_IS_GETTING_VENDOR_QUOTATION_BID_EMAIL","GetVendorQuotationBidEmailSucceededAction","GET_VENDOR_QUOTATION_BID_EMAIL_SUCCEEDED","SearchManufacturerDiscountsAction","SEARCH_MANUFACTURER_DISCOUNTS","SetIsSearchingManufacturerDiscountsAction","SET_IS_SEARCHING_MANUFACTURER_DISCOUNTS","SearchManufacturerDiscountsSucceededAction","SEARCH_MANUFACTURER_DISCOUNTS_SUCCEEDED","GetFirmEmailSettingAction","GET_FIRM_EMAIL_SETTING","GetFirmEmailSettingSucceededAction","GET_FIRM_EMAIL_SETTING_SUCCEEDED","arrayInsert","actions","arrayMove","arrayPush","arrayPop","arrayRemove","autofill","arrayRemoveAll","arrayShift","arraySplice","arraySwap","arrayUnshift","change","blur","clearFields","clearAsyncError","clearSubmitErrors","clearSubmit","destroy","initialize","focus","reset","registerField","setSubmitFailed","resetSection","stopSubmit","setSubmitSucceeded","startAsyncValidation","startSubmit","stopAsyncValidation","submit","touch","unregisterField","untouch","updateSyncWarnings","updateSyncErrors","AtsActionTypes","GetConsentStatusAction","GET_CONSENT_STATUS","UpdateConsentStatusAction","UPDATE_CONSENT_STATUS","SetUngatedCurrencyAction","SET_UNGATED_CURRENCY","GetDomainSucceededAction","GET_DOMAIN_SUCCEEDED","SetBadTokenAction","SET_BAD_TOKEN","SetAppLoadingStatusAction","SET_APP_LOADING_STATUS","VerifyEmailByKeyAction","VERIFY_EMAIL_BY_KEY","GetFirmTypesSucceededAction","GET_FIRM_TYPES_SUCCEEDED","GetFirmTypesAction","GET_FIRM_TYPES","RegisterUserAction","REGISTER_USER","RegisterUserSucceededAction","REGISTER_USER_SUCCEEDED","ResetRegisterUserAction","RESET_REGISTER_USER","InitAction","INIT","EnvLoadedAction","ENV_LOADED","ConfigLoadedAction","CONFIG_LOADED","ChangeSiteAction","CHANGE_SITE","ChangeLabelAction","CHANGE_LABEL","RefreshTokenAction","REFRESH_TOKEN","VerifyTokenAction","VERIFY_TOKEN","VerifyTokenSucceededAction","VERIFY_TOKEN_SUCCEEDED","UserLogInAsAction","USER_LOG_IN_AS","UserLogInAction","USER_LOG_IN","UserForgotPasswordAction","USER_FORGOT_PASSWORD","UserResetPasswordAction","USER_RESET_PASSWORD","UserResetPasswordSucceededAction","USER_RESET_PASSWORD_SUCCEEDED","HasServerAction","HasTokenAction","HasErrorAction","AppLoggedInAction","APP_LOGGED_IN","AppLoggedOutAction","APP_LOGGED_OUT","UserLoggedInAction","USER_LOGGED_IN","UserLogOutAction","USER_LOG_OUT","UserLoggedOutAction","USER_LOGGED_OUT","UserRefreshErrorAction","USER_REFRESH_ERROR","AppLoginErrorAction","APP_LOGIN_ERROR","UserLoginErrorAction","USER_LOGIN_ERROR","UserForgotPasswordErrorAction","USER_FORGOTPASSWORD_ERROR","UserTokenErrorAction","USER_TOKEN_ERROR","HasKeyAction","BaseAtsApiCallAction","ApiCallAction","API_CALL","AtsApiCallAction","ATS_API_CALL","DirectApiCallAction","DIRECT_API_CALL","DeprecatedApiCallAction","DEPRECATED_API_CALL","ApiResponseAction","API_RESPONSE","defaultPayload","ApiResponseDataAction","API_RESPONSE_DATA","ApiResponseErrorAction","API_RESPONSE_ERROR","LogInAsAndRedirectAction","LOG_IN_AS_AND_REDIRECT","CheckEmailAlreadyExistsAction","USER_CHECK_EMAIL_ALREADY_EXISTS","SetTokenAction","SET_TOKEN","PresetTokenAction","PRESET_TOKEN","SetAppTokenAction","SET_APP_TOKEN","ResendVerificationEmailAction","RESEND_VERIFICATION_EMAIL","LoginWithEmailAction","LOGIN_WITH_EMAIL","SetIsVerifyingUserAction","SET_IS_VERIFYING_USER","MoveSessionSpecAction","MOVE_SESSION_SPEC","randomString","random","substring","ActionTypes","REPLACE","PROBE_UNKNOWN_ACTION","isPlainObject","proto","createStore","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","$$observable","getUndefinedStateErrorMessage","actionType","combineReducers","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","_i","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","actionCreators","boundActionCreators","_defineProperty","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","middleware","extendStatics","setPrototypeOf","p","__extends","__","__assign","__rest","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","rejected","adopt","then","__generator","body","f","g","sent","trys","ops","verb","op","__values","__read","r","ar","__spread","__spreadArrays","il","j","jl","__spreadArray","pack","SuppressedError","_inherits","subClass","superClass","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","Reflect","construct","SPACINGS","GRID_SIZES","getOffset","div","parseFloat","replace","Grid","_props$alignContent","alignContent","_props$alignItems","alignItems","classes","classNameProp","className","_props$component","component","_props$container","container","_props$direction","direction","_props$item","item","_props$justify","justify","_props$lg","lg","_props$md","md","_props$sm","sm","_props$spacing","spacing","_props$wrap","wrap","_props$xl","xl","_props$xs","xs","_props$zeroMinWidth","zeroMinWidth","clsx","StyledGrid","withStyles","theme","boxSizing","display","flexWrap","width","margin","minWidth","flexDirection","justifyContent","breakpoint","styles","themeSpacing","padding","generateGutter","breakpoints","accumulator","globalStyles","round","flexBasis","flexGrow","maxWidth","up","generateGrid","PimActionTypes","UpdateStoreFirmProductAction","UPDATE_STORE_FIRM_PRODUCT","GetManufacturerPriceInvisibilitySucceededAction","GET_MANUFACTURER_PRICE_INVISIBILITY_SUCCEEDED","GetFirmProductCustomDataListSucceededAction","GET_FIRM_PRODUCT_CUSTOM_DATA_LIST_SUCCEEDED","GetFirmProductCustomDataListAction","GET_FIRM_PRODUCT_CUSTOM_DATA_LIST","IsFetchingFirmProductCategoriesAction","IS_FETCHING_FIRM_PRODUCT_CATEGORIES","GetFirmProductCategoriesAction","GET_FIRM_PRODUCT_CATEGORIES","GetFirmProductCategoriesUpdateAction","GET_FIRM_PRODUCT_CATEGORIES_UPDATE","GetFirmProductManufacturersAction","GET_FIRM_PRODUCT_MANUFACTURERS","GetFirmProductManufacturersUpdateAction","GET_FIRM_PRODUCT_MANUFACTURERS_UPDATE","SetIsMergingProductsAction","SET_IS_MERGING_PRODUCTS","SetPrimaryMergeProductAction","SET_PRIMARY_MERGE_PRODUCT","MergeProductsAction","MERGE_PRODUCTS","GetSeriesDuplicateProductsByIdSucceededAction","GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_SUCCEEDED","GetSeriesDuplicateProductsByIdFailedAction","GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_FAILED","GetSeriesDuplicateProductsByIdAction","GET_SERIES_DUPLICATE_PRODUCTS_BY_ID","SetIsGettingSeriesDuplicateProductsByIdAction","SET_IS_GETTING_SERIES_DUPLICATE_PRODUCTS_BY_ID","GetMatchingAttributesSucceededAction","GET_MATCHING_ATTRIBUTES_SUCCEEDED","MatchingProductCheckingAction","MATCHING_PRODUCT_CHECKING","GetPimMatchingProductSucceededAction","GET_PIM_MATCHING_PRODUCT_SUCCEEDED","CheckAdvanceConfigMatchingProductAction","CHECK_ADVANCE_CONFIG_MATCHING_PRODUCT","CanProductBeConfiguredAction","CAN_PRODUCT_BE_CONFIGURED","SetIsProductConfigurableAction","SET_IS_PRODUCT_CONFIGURABLE","SetIsProductConfigurableCheckingAction","SET_IS_PRODUCT_CONFIGURABLE_CHECKING","SetIsCreatingAttributeAction","SET_IS_CREATING_ATTRIBUTE","SetIsSearchingAttributeOptionsSecondaryAction","SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS_SECONDARY","SearchAttributeOptionsSucceededSecondaryAction","SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED_SECONDARY","SearchAttributeOptionsSecondaryAction","SEARCH_ALL_ATTRIBUTE_OPTIONS_SECONDARY","UpdateAttributeOptionThenSearchAttributeOptionsAction","UPDATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS","UpdateAttributeOptionAction","UPDATE_ATTRIBUTE_OPTION","DeleteAttributeOptionByIdThenSearchAttributeOptionsAction","DELETE_ATTRIBUTE_OPTION_BY_ID_THEN_SEARCH_ATTRIBUTE_OPTIONS","DeleteAttributeOptionByIdAction","DELETE_ATTRIBUTE_OPTION_BY_ID","SetSelectedPureAttributeOptionAction","SET_SELECTED_PURE_ATTRIBUTE_OPTION","UpdateAttributeThenSearchAttributesAction","UPDATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES","UpdateAttributeAction","UPDATE_ATTRIBUTE","SetSelectedPureAttributeAction","SET_SELECTED_PURE_ATTRIBUTE","DeleteAttributeByIdThenSearchAttributesAction","DELETE_ATTRIBUTE_BY_ID_THEN_SEARCH_ATTRIBUTES","DeleteAttributeByIdAction","DELETE_ATTRIBUTE_BY_ID","CreatePureAttributeOptionThenSearchPureAttributeOptionsAction","CREATE_ATTRIBUTE_OPTION_THEN_SEARCH_ATTRIBUTE_OPTIONS","CreatePureAttributeOptionAction","CREATE_ATTRIBUTE_OPTION","CreatePureAttributeThenSearchPureAttributesAction","CREATE_ATTRIBUTE_THEN_SEARCH_ATTRIBUTES","CreatePureAttributeAction","CREATE_ATTRIBUTE","SetIsSearchingAllAttributeOptionsAction","SET_IS_SEARCHING_ALL_ATTRIBUTE_OPTIONS","SearchAllAttributeOptionsSucceededAction","SEARCH_ALL_ATTRIBUTE_OPTIONS_SUCCEEDED","SearchAllAttributeOptionsAction","SEARCH_ALL_ATTRIBUTE_OPTIONS","SetIsSearchingAllAttributesSecondaryAction","SET_IS_SEARCHING_ALL_ATTRIBUTES_SECONDARY","SearchAllAttributesSucceededSecondaryAction","SEARCH_ALL_ATTRIBUTES_SUCCEEDED_SECONDARY","SearchAllAttributesSecondaryAction","SEARCH_ALL_ATTRIBUTES_SECONDARY","SetIsSearchingAllAttributesAction","SET_IS_SEARCHING_ALL_ATTRIBUTES","SearchAllAttributesSucceededAction","SEARCH_ALL_ATTRIBUTES_SUCCEEDED","SearchAllAttributesAction","SEARCH_ALL_ATTRIBUTES","GetProductByIdAction","GET_PRODUCT_BY_ID","GetProductByIdSucceededAction","GET_PRODUCT_BY_ID_SUCCEEDED","GetProductByIdFailedAction","GET_PRODUCT_BY_ID_FAILED","ResetProductAction","RESET_PRODUCT","SetIsPublishingAction","SET_IS_PUBLISHING","PublishSeriesDraftAction","PUBLISH_SERIES_DRAFT","UpdatePIMProductDraftRawAction","UPDATE_PIM_PRODUCT_DRAFT_RAW","UpdatePIMProductDraftAction","UPDATE_PIM_PRODUCT_DRAFT","AddPimProductDraftThenSearchPimProductsAction","ADD_PIM_PRODUCT_DRAFT_THEN_SEARCH_PIM_PRODUCTS","AddPimProductDraftAction","ADD_PIM_PRODUCT_DRAFT","DeleteSeriesDraftByIdAction","DELETE_PIM_SERIES_DRAFT_BY_ID","UpdatePimSeriesDraftForDeleteAction","UPDATE_PIM_SERIES_DRAFT_FOR_DELETE","UpdatePimSeriesDraftAction","UPDATE_PIM_SERIES_DRAFT","UpdatePimSeriesDraftRawAction","UPDATE_PIM_SERIES_DRAFT_RAW","AddPimSeriesDraftForDeleteAction","ADD_PIM_SERIES_DRAFT_FOR_DELETE","AddPimSeriesDraftAction","ADD_PIM_SERIES_DRAFT","AddPimSeriesDraftRawAction","ADD_PIM_SERIES_DRAFT_RAW","SetIsAddingPimSeriesDraftAction","SET_IS_ADDING_PIM_SERIES_DRAFT","DeleteFirmSeriesThenSearchFirmSeriesAction","DELETE_FIRM_SERIES_BY_ID_THEN_SEARCH_FIRM_SERIES","DeleteFirmSeriesAction","DELETE_FIRM_SERIES_BY_ID","SearchFirmSeriesFailedAction","SEARCH_FIRM_SERIES_FAILED","SearchFirmSeriesSucceededAction","SEARCH_FIRM_SERIES_SUCCEEDED","SearchFirmSeriesAction","SEARCH_FIRM_SERIES","UpdateFirmSeriesAndRedirectAction","UPDATE_FIRM_SERIES_AND_REDIRECT","UPDATE_FIRM_SERIES","AddFirmSeriesAndRedirectAction","ADD_FIRM_SERIES_AND_REDIRECT","GetFirmSeriesByIdSucceededAction","GET_FIRM_SERIES_BY_ID_SUCCEEDED","SetSelectedFirmSeriesIdAction","SET_SELECTED_FIRM_SERIES_ID","GetFirmSeriesAction","GET_FIRM_SERIES","SetSelectedAttributeIdAction","SET_SELECTED_ATTRIBUTE_ID","SearchAttributeOptionsSucceededAction","SEARCH_ATTRIBUTE_OPTIONS_SUCCEEDED","SearchAttributeOptionsAction","SEARCH_ATTRIBUTE_OPTIONS","SetIsFetchingAttributeOptionsAction","SET_IS_FETCHING_ATTRIBUTE_OPTIONS","SearchAttributesSucceededAction","SEARCH_ATTRIBUTES_SUCCEEDED","SearchAttributesAction","SEARCH_ATTRIBUTES","DeleteSeriesProductByIdSucceededAction","DELETE_SERIES_PRODUCT_BY_ID_SUCCEEDED","DeleteSeriesProductByIdAction","DELETE_SERIES_PRODUCT_BY_ID","GetPimSeriesdDraftAction","GET_PIM_SERIES_DRAFT","DeleteSeriesByIdAndSearchSeriesAction","DELETE_SERIES_BY_ID_AND_SEARCH_SERIES","DeleteSeriesByIdAction","DELETE_SERIES_BY_ID","UpdatePIMSeriesSucceededAction","UPDATE_PIM_SERIES_SUCCEEDED","UpdatePIMProductSucceededAction","UPDATE_PIM_PRODUCT_SUCCEEDED","LoadingSeriesFinishedAction","LOADING_SERIES_FINISHED","LoadingSeriesAction","LOADING_SERIES","SearchRecommendedAttributesAction","SEARCH_RECOMMENDED_ATTRIBUTES","SearchRecommendedAttributesSuccessAction","SEARCH_RECOMMENDED_ATTRIBUTES_SUCCESS","GetSeriesSpecificMandatoryAttributesAction","GET_SERIES_SPECIFIC_MANDATORY_ATTRIBUTES","SkipAttributeAction","SKIP_ATTRIBUTE","SkipAllAttributesAction","SKIP_ALL_ATTRIBUTES","RestoreAttributeAction","RESTORE_ATTRIBUTE","SaveSkipAttributesAction","SAVE_SKIP_ATTRIBUTES","GetSeriesDetailsAction","GET_SERIES_DETAILS","SearchSeriesAction","SEARCH_SERIES","SearchSeriesSucceededAction","SEARCH_SERIES_SUCCEEDED","SearchSeriesFailedAction","SEARCH_SERIES_FAILED","GetSeriesFromPimServiceSucceededAction","GET_SERIES_FROM_PIM_SERVICE_SUCCEEDED","AddFirmProductFileAndGetMediaAction","ADD_FIRM_PRODUCT_FILE_AND_GET_MEDIA","DeleteFirmProductFileAndGetMediaAction","DELETE_FIRM_PRODUCT_FILE_AND_GET_MEDIA","DeleteFirmProductFileAction","DELETE_FIRM_PRODUCT_FILE","AddFirmProductFileAction","ADD_FIRM_PRODUCT_FILE","IsActiveProductAction","IS_ACTIVE_PRODUCT","IsInactiveProductAction","IS_INACTIVE_PRODUCT","FirmProductCreatedPendingIndexAction","FIRM_PRODUCT_CREATED_PENDING_INDEX","AddPimProductSucceededAction","ADD_PIM_PRODUCT_SUCCEEDED","AddPimProductAction","ADD_PIM_PRODUCT","AddATSLibraryProductAction","ADD_ATS_LIBRARY_PRODUCT","AddFirmProductAction","ADD_FIRM_PRODUCT","AddFirmProductAndAddToQuoteAction","ADD_FIRM_PRODUCT_AND_ADD_TO_QUOTE","UpdateQuoteRowWithProductAction","UPDATE_QUOTE_ROW_WITH_PRODUCT","EditFirmProductAction","EDIT_FIRM_PRODUCT","EditFirmProductAndAddToQuoteAction","EDIT_FIRM_PRODUCT_AND_ADD_TO_QUOTE","QuickSearchPimProducts","QUICK_SEARCH_PIM_PRODUCTS","QuickSearchPimProductsLoadingAction","QUICK_SEARCH_PIM_PRODUCTS_LOADING","QuickSearchPimProductsPackages","QUICK_SEARCH_PIM_PRODUCTS_PACKAGES","SearchingPimProductsPackagesAction","SEARCHING_PIM_PRODUCTS_PACKAGES","QuickSearchPimProductsPackagesSucceeded","QUICK_SEARCH_PIM_PRODUCTS_PACKAGES_SUCCEEDED","SearchParentSharedFirmProductsAction","SEARCH_PARENT_SHARED_FIRM_PRODUCTS","SearchParentSharedFirmProductsSucceeded","SEARCH_PARENT_SHARED_FIRM_PRODUCTS_SUCCEEDED","SearchingParentSharedFirmProductsAction","SEARCHING_PARENT_SHARED_FIRM_PRODUCTS","ResetQuoteSearchProducts","RESET_QUOTE_SEARCH_PRODUCTS","QuickSearchPimProductsSucceeded","QUICK_SEARCH_PIM_PRODUCTS_SUCCEEDED","DeleteFirmProductAction","DELETE_FIRM_PRODUCT","DeleteFirmProductSucceeded","DELETE_FIRM_PRODUCT_SUCCEEDED","SearchPimProductsAction","SEARCH_PIM_PRODUCTS","SearchPimProductsSucceeded","SEARCH_PIM_PRODUCTS_SUCCEEDED","SetSearchBodyAndSearchPimProductsAction","SET_SEARCH_BODY_AND_SEARCH_PIM_PRODUCTS","SearchFirmProductsAction","SEARCH_FIRM_PRODUCTS","SearchFirmProductsSucceeded","SEARCH_FIRM_PRODUCTS_SUCCEEDED","SearchSharedProductsAction","SEARCH_SHARED_PRODUCTS","SearchSharedProductsSucceeded","SEARCH_SHARED_PRODUCTS_SUCCEEDED","SearchSharedProductsFailedAction","SEARCH_SHARED_PRODUCTS_FAILED","DeleteFirmProductAndSearchFirmProductsAction","DELETE_FIRM_PRODUCT_AND_SEARCH_FIRM_PRODUCTS","ResetProductLibraryResultsAction","RESET_PRODUCT_LIBRARY_RESULTS","DuplicateSeriesAction","DUPLICATE_SERIES","ResetPimStateAction","RESET_PIM_STATE","SearchPimCategoriesAction","SEARCH_PIM_CATEGORIES","SetIsSearchingPimCategoriesAction","SET_IS_SEARCHING_PIM_CATEGORIES","SearchPimCategoriesSucceededAction","SEARCH_PIM_CATEGORIES_SUCCEEDED","BulkExportProductsAction","BULK_EXPORT_PRODUCTS","BulkExportProductsLoadingAction","BULK_EXPORT_PRODUCTS_LOADING","GetBulkExportProductsConfigAction","GET_BULK_EXPORT_PRODUCTS_CONFIG","GetBulkExportProductsConfigLoadingAction","GET_BULK_EXPORT_PRODUCTS_CONFIG_LOADING","GetBulkExportProductsConfigSucceededAction","GET_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS","SaveBulkExportProductsConfigLoadingAction","SAVE_BULK_EXPORT_PRODUCTS_CONFIG_LOADING","SaveBulkExportProductsConfigSucceededAction","SAVE_BULK_EXPORT_PRODUCTS_CONFIG_SUCCESS","BulkImportProductsAction","BULK_IMPORT_PRODUCTS","BulkImportProductsLoadingAction","BULK_IMPORT_PRODUCTS_LOADING","SetBulkImportProductsProgressAction","SET_BULK_IMPORT_PRODUCTS_PROGRESS","DownloadBulkImportTemplateFileAction","DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE","DownloadBulkImportTemplateFileLoadingAction","DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_LOADING","DownloadBulkImportTemplateFileSucceededAction","DOWNLOAD_BULK_IMPORT_TEMPLATE_FILE_SUCCESS","EditFirmProductOrPackageSucceededAction","EDIT_FIRM_PRODUCT_OR_PACKAGE_SUCCEEDED","GetFirmProductByIdAction","GET_FIRM_PRODUCT_BY_ID","SetIsGettingFirmProductByIdAction","SET_IS_GETTING_FIRM_PRODUCT_BY_ID","GetPackageByIdAction","GET_PACKAGE_BY_ID","SetIsGettingPackageByIdAction","SET_IS_GETTING_PACKAGE_BY_ID","SearchPimIntegrationSeriesAction","SEARCH_PIM_INTEGRATION_SERIES","SearchPimIntegrationSeriesSucceededAction","SEARCH_PIM_INTEGRATION_SERIES_SUCCEEDED","SetIsSearchingPimIntegrationSeriesAction","SET_IS_SEARCHING_PIM_INTEGRATION_SERIES","MapPimIntegrationSucceededAction","MAP_PIM_INTEGRATION_SUCCEEDED","SetIsMappingPimIntegrationAction","SET_IS_MAPPING_PIM_INTEGRATION","CancelCreatePimIntegrationSeriesDraftPollingAction","CANCEL_CREATE_PIM_INTEGRATION_SERIES_DRAFT_POLLING","SpecActionTypes","BulkDeleteDrawingsAction","BULK_DELETE_DRAWINGS","TriggerSpecAssistAction","TRIGGER_SPEC_ASSIST","AutoSetDrawingNameAction","AUTO_SET_DRAWING_NAME","ResetSpecsAction","RESET_SPECS","TogglePinMasterDrawingAction","TOGGLE_PIN_MASTER_DRAWING","TogglePinTemplateDrawingAction","TOGGLE_PIN_TEMPLATE_DRAWING","SetIsUpdatingDrawingAction","SET_IS_UPDATING_DRAWING","SetNewDrawingIdAction","SET_NEW_DRAWING_ID","IsUpdatingSpecFilesAction","IS_UPDATING_SPEC_FILES","DeleteAlternativeProductAction","DELETE_ALTERNATIVE_PRODUCT","SetIsDeletingAlternativeProductAction","SET_IS_DELETING_ALTERNATIVE_PRODUCT","SaveAlternativeProductsAction","SAVE_ALTERNATIVE_PRODUCTS","SetIsSavingAlternativeProductsAction","SET_IS_SAVING_ALTERNATIVE_PRODUCTS","SetLixilPrintGroupsInConfigBySelectedSpecIdAction","SET_LIXIL_PRINT_GROUPS_IN_CONFIG_BY_SELECTED_SPEC_ID","GetSpecPrintConfigSucceededAction","GET_SPEC_PRINT_CONFIG_SUCCEEDED","GetSpecPrintConfigAction","GET_SPEC_PRINT_CONFIG","SetSpecPrintConfigAction","SET_SPEC_PRINT_CONFIG","SetTestSpecModeAction","SET_TEST_SPEC_MODE","SetRedirectPathAction","SET_REDIRECT_PATH","SetSelectedSpecIdAction","SET_SELECTED_SPEC_ID","SetSelectedMasterSpecIdAction","SET_SELECTED_MASTER_SPEC_ID","SetSelectedTemplateSpecIdAction","SET_SELECTED_TEMPLATE_SPEC_ID","CopyAction","COPY_ACTION","CopySucceedAction","COPY_SUCCEED_ACTION","CopyFailedAction","COPY_FAILED_ACTION","UpdateMasterSpecAndRedirectAction","UPDATE_MASTER_SPEC_AND_REDIRECT","UpdateTemplateSpecAndRedirectAction","UPDATE_TEMPLATE_SPEC_AND_REDIRECT","UpdateMasterSpecAction","UPDATE_MASTER_SPEC","UpdateTemplateSpecAction","UPDATE_TEMPLATE_SPEC","UpdateMasterDrawingAction","UPDATE_MASTER_DRAWING","UpdateTemplateDrawingAction","UPDATE_TEMPLATE_DRAWING","DeleteMasterDrawingAndGetMasterSpecAction","DELETE_MASTER_DRAWING_AND_GET_MASTER_SPEC","DeleteTemplateDrawingAndGetTemplateSpecAction","DELETE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC","DeleteMasterDrawingAction","DELETE_MASTER_DRAWING","DeleteTemplateDrawingAction","DELETE_TEMPLATE_DRAWING","DeleteMasterSpecAndGetMasterProjectByIdAction","DELETE_MASTER_SPEC_AND_GET_MASTER_PROJECT_BY_ID","DeleteTemplateSpecAndGetTemplateProjectByIdAction","DELETE_TEMPLATE_SPEC_AND_GET_TEMPLATE_PROJECT_BY_ID","DeleteMasterSpecAction","DELETE_MASTER_SPEC","DeleteTemplateSpecAction","DELETE_TEMPLATE_SPEC","SelectDrawingAndRedirectAction","SELECT_DRAWING_AND_REDIRECT","CreateMasterSpecAction","CREATE_MASTER_SPEC","CreateMasterSpecAndRedirectAction","CREATE_MASTER_SPEC_AND_REDIRECT","CreateTemplateSpecAndRedirectAction","CREATE_TEMPLATE_SPEC_AND_REDIRECT","SetModeAction","SET_MODE","GetMasterSpecsSucceededAction","GET_MASTER_SPECS_SUCCEEDED","GetTemplateSpecsSucceededAction","GET_TEMPLATE_SPECS_SUCCEEDED","GetMasterSpecsAction","GET_MASTER_SPEC_BY_ID","GetTemplateSpecsAction","GET_TEMPLATE_SPEC_BY_ID","SelectMasterSpecAction","setSelectDrawingId","SELECT_MASTER_SPEC","SelectTemplateSpecAction","SELECT_TEMPLATE_SPEC","PureValidateDrawingAction","PURE_VALIDATE_DRAWING","ValidateDrawingAction","VALIDATE_DRAWING","ValidateAddProductToDrawingAction","VALIDATE_ADD_PRODUCT_TO_DRAWING","GetSeriesWithCombinedFiltersAction","GET_SPECS_WITH_COMBINED_FILTERS","ClearDrawingRulesAction","CLEAR_DRAWING_RULES","GetPrintFormatsSucceededAction","GET_PRINT_FORMATS_SUCCEEDED","CreateSpecAction","CREATE_SPEC","ReorderSpecsAndGetProjectAction","REORDER_SPECS_AND_GET_PROJECT","DeleteSpecAction","DELETE_SPEC","DeleteSpecAndGetProjectByIdAction","DELETE_SPEC_AND_GET_PROJECT_BY_ID","CreateSpecFailedAction","SPEC_FAILED","SelectSpecAction","SELECT_SPEC","GetSpecsAction","GET_SPECS","GetSpecsTakeEveryAction","GET_SPECS_TAKE_EVERY","GetSpecsSucceededAction","GET_SPECS_SUCCEEDED","GetSpecsFailedAction","GET_SPECS_FAILED","CreateSpecSucceededAction","CREATE_SPEC_SUCCEEDED","UpdateSpecAction","UPDATE_SPEC","CreateDrawingAction","CREATE_DRAWING","SelectDrawingAction","SELECT_DRAWING","SelectDrawingWithoutRulesAction","SELECT_DRAWING_WITHOUT_RULES","DuplicateDrawingWithinSpecAction","DUPLICATE_DRAWING_WITHIN_SPEC","DeleteDrawingAction","DELETE_DRAWING","UpdateDrawingAction","UPDATE_DRAWING","UpdateDrawingSucceededAction","UPDATE_DRAWING_SUCCEEDED","GetDrawingRulesAction","GET_DRAWING_RULES","UpdateSelfFailedRulesLoadingAction","UPDATE_FAILED_SELF_RULES_LOADING","UpdateSelfFailedRulesAction","UPDATE_FAILED_SELF_RULES","ClearSelfRulesAction","CLEAR_SELF_RULES","UpdateRulesAction","UPDATE_RULES","UpdatingRulesAction","UPDATING_RULES","UpdateRulesSucceededAction","UPDATE_RULES_SUCCESS","UpdateRulesFailededAction","UPDATE_RULES_FAIL","EditSpecTitleAction","EDIT_SPEC_TITLE","SearchSpecsAction","SEARCH_SPECS","SpecToolSpecListSearchSpecsAction","SPEC_TOOL_SPEC_LIST_SEARCH_SPECS","SearchSpecsSucceededAction","SEARCH_SPECS_SUCCEEDED","SearchSpecsFailedAction","SEARCH_SPECS_FAILED","LoadingSearchedSpecAction","LOADING_SEARCHED_SPEC","DeleteSpecAndSearchSpecsAction","DELETE_AND_SEARCH_SPECS","GetSpecFilesAction","specId","GET_SPEC_FILES","GetSpecFilesSucceededAction","files","GET_SPEC_FILES_SUCCEEDED","SetIsLinkingOrUnlinkGenericProductAction","SET_IS_LINKING_OR_UNLINKING_GENERIC_PRODUCT","GetMasterDrawerDataAction","GET_MASTER_DRAWER_DATA","GetPinnedDrawingAction","GET_PINNED_DRAWING","GetPinnedDrawingSucceededAction","GET_PINNED_DRAWING_SUCCEEDED","GetMasterDrawerDataSucceededAction","GET_MATER_DRAWER_DATA_SUCCEEDED","MasterDrawerSelectSpecAction","MASTER_DRAWER_SELECT_SPEC","MasterDrawerLoadSpecAction","MASTER_DRAWER_LOAD_SPEC","MasterDrawerLoadSpecSucceededAction","MASTER_DRAWER_LOAD_SPEC_SUCCEEDED","MasterDrawerUpdateDrawer","MASTER_DRAWER_UPDATE_DRAWING","MasterDrawerToggleExpandAction","MASTER_DRAWER_TOGGLE_EXPAND","SetMasterDrawerUpdatingAction","SET_MASTER_DRAWER_UPDATING","ProductCatalogueCreateDrawingAction","PRODUCT_BROWSING_CREATE_DRAWING","SelectMasterDrawerDrawingAction","SELECT_MASTER_DRAWER_DRAWING","SelectPinnedDrawingAction","SELECT_PINNED_DRAWING","LogGuestUserDownloadSpecAction","LOG_GUEST_USER_DOWNLOAD_SPEC","_toConsumableArray","sseSessionSaga","syncSseConfig","clearSseConfig","select","userId","token","getToken","apiGateway","ENDPOINT_APIGATEWAY","sseClient","configureSSE","APP_TOKEN_REFRESH_THRESHOLD_MS","APP_TOKEN_ONLY_SITES","xref","bim","PRE_LOGIN_APP_TOKEN_SITES","amp","PRE_LOGIN_PATHNAME","shouldKeepAppTokenFresh","hasUserToken","isPreLoginPathname","getAppTokenStatus","exp","expiry","isFinite","msLeft","transformRequestToFetch","request","url","taggedDelay","getEnvLoaded","getAtsApiInit","getInit","setToken","setAppToken","loginWithEmail","waitReady","doLogin","doLoginAs","apiCallWaitForEnvAction","deprecatedApiCallWaitingAction","atsApiCallWaitForEnvAction","apiCallWaitingAction","atsApiCallWaitingAction","deprecatedApiCallAction","atsApiCallAction","directApiCallAction","directApiCallWaitingAction","getAppIdentity","getUserIdentity","appSessionBegin","sessionEnd","logOutAs","delayedLogout","sessionEnded","atsRequire","atsApiRequire","getApplicationToken","getAppTokenExp","refreshAppToken","checkAppToken","appTokenRefreshLoop","waitForEnv","LoginAsAndRedirect","callForgotPassword","callResetPassword","checkEmailAlreadyExists","moveSessionSpec","registerUser","getConsentStatus","updateConsentStatus","getFirmTypes","verifyEmailByKey","updateToken","verifyToken","resendVerificationEmail","initWatchers","timeout","debug","delay","envLoaded","AtsStore","getAtsApiState","apiPresent","onEvent","safeLocalStorage","getItem","checkToken","setItem","removeItem","put","password","emailIsUnique","status","verified","i18next","severity","actionProps","autoHideDuration","onclick","buttonStyle","color","textDecoration","refreshToken","ResetErrorAction","meta","service","endpoint","apiResp","amplitude","login","usernameOrEmail","loginSuccess","auth","immutableErr","serverError","ErrorModel","AddErrorAction","suppressGlobalErrorNotification","immutableResp","loading","method","env","resultKey","transformed","envVars","fetchWithDefaultHeadersAndToken","apiCall","actionPayload","callApi","singleOrArray","resp","code","atsApi","queries","registerDirectApiEndpoint","ok","immutableData","race","forceLogout","delayMS","_call","pageWakeChannel","eventChannel","emit","onVisibilityChange","visibilityState","onFocus","addEventListener","removeEventListener","holdRequests","previousToken","getAppToken","getUserToken","authenticatedAt","wake","tick","close","stateEnv","LOADED","authKey","pageTitle","pageContent","USER_RESETPASSWORD_ERROR","linkTitle","link","sessionId","user","makeSelectSession","session","registeredUser","guestSpecId","guestSpecName","forceRefresh","CONSENT_MODAL","open","consent","firmTypes","isGuestToken","refreshedToken","userToken","log","isUsingLoginAs","USER_REFRESH","ProjectActionTypes","SetProjectMasterSavingAllowAction","SET_PROJECT_MASTER_SAVING_ALLOW","UpdateTemplateProjectAction","UPDATE_TEMPLATE_PROJECT","UpdateMasterProjectAndRedirectAction","UPDATE_MASTER_PROJECT_AND_REDIRECT","UPDATE_MASTER_PROJECT","UpdateTemplateProjectAndRedirectAction","UPDATE_TEMPLATE_PROJECT_AND_REDIRECT","GetMasterProjectsAction","GET_MASTER_PROJECTS","GetTemplateProjectsAction","GET_TEMPLATE_PROJECTS","GetMasterProjectsSucceededAction","GET_MASTER_PROJECTS_SUCCEEDED","GetTemplateProjectsSucceededAction","GET_TEMPLATE_PROJECTS_SUCCEEDED","GetMasterProjectsFailedAction","GET_MASTER_PROJECTS_FAILED","GetTemplateProjectsFailedAction","GET_TEMPLATE_PROJECTS_FAILED","SelectMasterProjectAction","SELECT_MASTER_PROJECT","SelectTemplateProjectAction","SELECT_TEMPLATE_PROJECT","LoadingSearchedMastersAction","LOADING_SEARCHED_MASTERS","LoadingSearchedMastersInCopyModalAction","LOADING_SEARCHED_MASTERS_IN_COPY_MODAL","LoadingSearchedTemplateAction","LOADING_SEARCHED_TEMPLATES","SearchMastersAction","SEARCH_MASTERS","SearchMastersInCopyModalAction","SEARCH_MASTERS_IN_COPY_MODAL","SearchMastersSucceededAction","SEARCH_MASTERS_SUCCEEDED","SearchMastersInCopyModalSucceededAction","SEARCH_MASTERS_IN_COPY_MODAL_SUCCEEDED","SearchMastersFailedAction","SEARCH_MASTERS_FAILED","SearchMastersInCopyModalFailedAction","SEARCH_MASTERS_IN_COPY_MODAL_FAILED","DeleteMasterAction","DELETE_MASTER","DeleteTemplateAction","DELETE_TEMPLATE","CreateMasterProjectSucceededAction","CREATE_MASTER_PROJECT_SUCCEEDED","CreateMasterProjectFromTemplateSucceededAction","CREATE_MASTER_PROJECT_FROM_TEMPLATE_SUCCEEDED","CreateTemplateProjectSucceededAction","CREATE_TEMPLATE_PROJECT_SUCCEEDED","CreateMasterProjectAction","CREATE_MASTER_PROJECT","CreateMasterProjectFromTemplateAction","CREATE_MASTER_PROJECT_FROM_TEMPLATE","CreateTemplateProjectAction","CREATE_TEMPLATE_PROJECT","GetMasterProjectByIdAction","GET_MASTER_PROJECT_BY_ID","GetTemplateProjectByIdAction","GET_TEMPLATE_PROJECT_BY_ID","DeleteMasterAndSearchMastersAction","DELETE_AND_SEARCH_MASTERS","DeleteTemplateAndSearchTemplatesAction","DELETE_AND_SEARCH_TEMPLATES","DuplicateMasterAction","DUPLICATE_MASTER","DuplicateTemplateAction","DUPLICATE_TEMPLATE","DuplicateProjectAction","DUPLICATE_PROJECT","SetProjectFormActiveStepAction","SET_PROJECT_FORM_ACTIVE_STEP","LoadingSearchedProjectAction","LOADING_SEARCHED_PROJECT","SetProjectIdForCreatingSpec","SET_PROJECT_ID_FOR_CREATING_SPEC","LinkSpecWithIdAction","LINK_SPEC_WITH_ID","GetProjectFilesAction","GET_PROJECT_FILES","GetProjectFilesSucceededAction","GET_PROJECT_FILES_SUCCEEDED","DeleteProjectFileAction","DELETE_PROJECT_FILE","AddProjectFileAction","ADD_PROJECT_FILE","AddProjectPhaseChangeSucceededAction","ADD_PROJECT_PHASE_CHANGE_SUCCEEDED","GetTrackedProjectsSucceededAction","GET_TRACKED_PROJECTS_SUCCEEDED","GetTrackedProjectsAction","GET_TRACKED_PROJECTS","UntrackProjectAction","UNTRACK_PROJECT","TrackProjectAction","TRACK_PROJECT","SetIsTrackingOrUntrackingProjectAction","SET_IS_TRACKING_OR_UNTRACKING_PROJECT","CreateProjectAction","CREATE_PROJECT","UpdateProjectAction","UPDATE_PROJECT","UpdateProjectAndThenRedirectAction","UPDATE_PROJECT_AND_THEN_REDIRECT","UpdateProjectKeyContactsAndThenRedirectAction","UPDATE_PROJECT_KEY_CONTACTS_AND_THEN_REDIRECT","UpdateProjectOpportunitySucceededAction","UPDATE_PROJECT_OPPORTUNITY_SUCCEEDED","UpdateProjectAssignedToAction","UPDATE_PROJECT_ASSIGNED_TO","UpdateProjectAssignedToSucceededAction","UPDATE_PROJECT_ASSIGNED_TO_SUCCEEDED","DeleteProjectSpecAction","DELETE_PROJECT_SPEC","CreatePTProjectAction","CREATE_PT_PROJECT","CreateProjectFromTemplateAction","CREATE_PROJECT_FROM_TEMPLATE","SelectProjectAction","SELECT_PROJECT","GetProjectsSucceededAction","GET_PROJECTS_SUCCEEDED","CreateProjectSucceededAction","CREATE_PROJECT_SUCCEEDED","CreatePTProjectSucceededAction","CREATE_PT_PROJECT_SUCCEEDED","DeleteProjectAction","DELETE_PROJECT","DeleteProjectSucceededAction","DELETE_PROJECT_SUCCEEDED","DeleteMasterSucceededAction","DELETE_MASTER_SUCCEEDED","GetProjectsAction","GET_PROJECTS","GetProjectByIdAndFetchMissingSpecsAction","GET_PROJECT_BY_ID_AND_FETCH_MISSING_SPECS","ProjectFailedAction","PROJECT_FAILED","GetProjectByIdAndSelectProjectAction","GET_PROJECT_BY_ID_AND_SELECT_PROJECT","GetProjectByIdAndSelectProjectSucceededAction","GET_PROJECT_BY_ID_AND_SELECT_PROJECT_SUCCEEDED","SearchProjectsAction","SEARCH_PROJECTS","QuickSearchProjectsAction","QUICK_SEARCH_PROJECTS","SearchProjectsSucceededAction","SEARCH_PROJECTS_SUCCEEDED","SearchProjectsFailedAction","SEARCH_PROJECTS_FAILED","DeleteProjectAndSearchProjectsAction","DELETE_AND_SEARCH_PROJECTS","AddQuoteToProjectAction","ADD_QUOTE_TO_PROJECT","RedirectToQuoteAction","REDIRECT_TO_QUOTE","RedirectToQuoteEditAction","REDIRECT_TO_QUOTE_EDIT","RemoveQuoteFromProjectAction","REMOVE_QUOTE_FROM_PROJECT","UpdateQuoteStatusAndOpportunityValueAction","UPDATE_QUOTE_STATUS_AND_OPPORTUNITY_VALUE","CheckOpportunityExistsFetchingAction","fetching","CHECK_OPPORTUNITY_EXISTS_FETCHING","CheckOpportunityExistsAction","CHECK_OPPORTUNITY_EXISTS","CheckOpportunityExistsSucceededAction","CHECK_OPPORTUNITY_EXISTS_SUCCEEDED","CheckOpportunityStatusUpToDateAction","projectId","CHECK_OPPORTUNITY_STATUS_UP_TO_DATE","CheckOpportunityStatusUpToDateSucceededAction","upToDate","CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_SUCCEEDED","CheckOpportunityStatusUpToDateFetchingAction","CHECK_OPPORTUNITY_STATUS_UP_TO_DATE_FETCHING","UpdateOpportunityAutomationAction","UPDATE_OPPORTUNITY_AUTOMATION","UpdateOpportunityAutomationSucceededAction","opportunities","UPDATE_OPPORTUNITY_AUTOMATION_SUCCEEDED","UpdateOpportunityAutomationFetchingAction","UPDATE_OPPORTUNITY_AUTOMATION_FETCHING","CreateTakeoffAction","CREATE_TAKEOFF","UpdateProjectSpecDetailConfigAction","UPDATE_PROJECT_SPEC_DETAIL_CONFIG","MassUpdateProjectSpecDetailConfigAction","MASS_UPDATE_PROJECT_SPEC_DETAIL_CONFIG","DeleteSpecFromProjectSpecDetailConfigAction","DELETE_SPEC_FROM_PROJECT_SPEC_DETAIL_CONFIG","SelectAllDrawingsAction","SELECT_ALL_DRAWINGS","SelectAllDrawingsInSpecAction","SELECT_ALL_DRAWINGS_IN_SPEC","SearchTemplatesAction","SEARCH_TEMPLATES","SearchTemplatesSucceededAction","SEARCH_TEMPLATES_SUCCEEDED","SearchTemplatesFailedAction","SEARCH_TEMPLATES_FAILED","ApplyFolderTemplateToProjectAttachmentAction","APPLY_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT","SetIsApplyingFolderTemplateToProjectAttachmentAction","SET_IS_APPLYING_FOLDER_TEMPLATE_TO_PROJECT_ATTACHMENT","PatchKeyContactsAction","PATCH_KEY_CONTACTS","PatchKeyContactsSucceededAction","PATCH_KEY_CONTACTS_SUCCEEDED","_defineProperties","descriptor","protoProps","staticProps","base64","bytes","typedArray","typedArrays","num","allowedValues","pdfDocEncodingToUnicode","DefaultTextFilterRenderer","filterConfig","fieldNamePrefix","Typography","align","variant","inputProps","formControlProps","fullWidth","FieldTextField","TextFilterRenderer","validate","cachedValidateStart","validateStart","_filterConfig","validatorKey","allValues","getFilterConfigFromPropsAndName","defaultConfig","parsedDate","parseDate","toPath","endDate","parsedEndDate","cachedValidateEnd","validateEnd","startDate","parsedStartDate","DateRangeFilterRenderer","formId","formValues","getFormValues","interval","style","FieldSelect","onChange","TODAY","moment","startOf","endOf","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","marginTop","MenuItem","CUSTOM","isValidMomentDate","timeOfDay","onChangeCB","keyboardDatePickerProps","clearable","InputProps","startAdornment","InputAdornment","position","disabled","FieldDatePickerV2","DateFilterRenderer","LocationFilterRenderer","selectCountry","_countryId","countries","form","countryId","GetProvinceAction","GetCountryAdminDivisionAction","selectProvince","provinceId","provinces","GetCityAction","selectCity","cityId","cities","getCountries","prevProps","initialValues","autosuggestProps","directMode","renderMissingData","shouldRenderSuggestions","autoComplete","FieldAutoSuggest","connect","makeSelectCountries","makeSelectProvinces","makeSelectCities","GetCountriesAction","cachedValidate","BuildingClassDataProviderConfig","buildingClassIdKey","BuildingTypeDataProviderConfig","parameters","patterns","BuildingFilterRenderer","filterValue","componentData","nullable","pickBy","DataFieldSelect","dataProviderProps","AmountFilterRenderer","parsedValue","toNumber","isNumber","endValue","parsedEndValue","startValue","parsedStartValue","AmountRangeFilterRenderer","option","optionKey","filterOperand","multiple","_label","TrackedUserAndOfficeSelectRenderer","getOfficesByFirm","getUsersList","users","currentUserId","currentUserOfficeId","filteredUsers","filteredOffices","excludeEmpty","makeSelectUsers","CollaboratorFilterRenderer","marginRight","defaultProps","cacheOptions","filterOption","SelectState","manageState","Select","Async","SelectComponent","_class","_Component","_possibleConstructorReturn","_getPrototypeOf","_assertThisInitialized","actionMeta","_this$props","onInputChange","inputValue","handleInputChange","lastRequest","setState","loadedInputValue","loadedOptions","isLoading","passEmptyOptions","optionsCache","loadOptions","mounted","_this2","nextProps","loader","_this3","_this$props2","_this$state","makeAsyncSelect","createSvgIcon","QuoteBrandDiscount","discounts","isChangingDiscount","whatIsChanging","onButtonClick","discount","stopPropagation","applyDiscount","renderDiscountInput","applyButtonLabel","gridItem","noWrap","Input","input","currentTarget","Button","applyButton","onClick","preview","brandButton","backgroundColor","palette","grey","primary","card","cursor","selected","cardContent","gridContainer","userDataGrid","userDataIcon","common","black","cardIcon","selectedIcon","userData","customerData","isSelected","organization","firstName","lastName","firstLine","secondLine","initials","src","phone","address","profileImage","Image","aspectRatio","fromService","Avatar","Card","classNames","CardContent","fontSize","brands","customer","customStyles","control","provided","borderRadius","borderStyle","borderWidth","borderBottom","boxShadow","valueContainer","dropdownIndicator","multiValueRemove","selectProps","marginLeft","AutoCompleteSelectSync","formatOptionLabel","setOptions","isLoadingOptions","setIsLoadingOptions","delete","displayControl","componentStillExist","fetchOptions","suppressErrors","withToken","withAppId","response","_options","getOptionValue","useCallback","FieldSyncSelect","filterKey","AutoCompleteSelectAsync","filterSearch","filters","searchConfig","limit","FieldAsyncSelect","withAtsApi","toolTip","_option","chunks","path","pathName","Tooltip","title","placement","rowControl","overflow","setInputValue","filteredOptions","customComponents","IndicatorSeparator","DropdownIndicator","dropdownProps","menuIsOpen","ArrowDropUp","ArrowDropDown","isMulti","placeholder","noOptionsMessage","loadingMessage","menuPortalTarget","menuShouldScrollIntoView","menuShouldBlockScroll","isClearable","reason","MultiValueContainer","_props","MultiValueLabel","ComponentToFilterRendererMap","default","text","date_range","date","amount_range","building","SelectFilterRenderer","data_select","DataSelectFilterRenderer","data_user_select","DataUserSelectFilterRenderer","autocomplete_search","AutoCompleteSelect","tracked_user_office_select","collaborator_select","checkbox_group","FieldCheckbox","helperText","RenderFilterComponent","Renderer","GridBlock","textAlign","opacity","button","href","linkProps","Link","classnames","SVGComponents","AtsSvgNewProject","AtsSvgNewSpec","AtsSvgEmptySpecListWidget","AtsSvgFolder","AtsSvgNewMaster","AtsSvgRequestMaster","SVGCompoenentsProp","svg","shadowColor","CallToActionWidgetContent","ImageProps","ButtonProps","buttonToolTip","noPadding","configAtsSvgProps","isRestrictedOutsideSalesRep","noAction","useSvg","substr","SVG","createQuoteProps","createNewQuote","ImageElement","withTheme","selectConfigAtsSvgProps","selectIsRestrictedOutsideSalesRep","withAmplitudeData","makeStyles","iconFont","localKey","FilterEditor","useStyles","expansionPanelRoot","expansionPanelPaper","withRouter","ExpansionPanelProps","_ExpansionPanelProps","ExpansionPanelSummaryProps","_ExpansionPanelSummaryProps","ExpansionPanelDetailsProps","_ExpansionPanelDetailsProps","defaultExpanded","closeOnRedirect","ContentComponent","ExpansionPanelDetails","history","setOpen","isFullWidthMenu","useMediaQuery","refIsFullWidthMenu","unlisten","listen","AnyContentComponent","ExpansionContent","ExpansionPanel","expanded","elevation","ExpansionPanelSummary","expandIcon","evt","newState","iconComponentByIconName","height","iconName","iconSize","uiOverrides","customWidgetIconBackgroundColor","icon","Paper","flexFlow","paper","typography","paddingTop","paddingBottom","lang","hyphens","MainMenuItemCollapsible","contentElRef","responsive","widthBreakpoint","drawerGradient","smallWidth","isWidthDown","xsWidth","displayedTitle","mappedTitle","menuItem","ExpansionPanelDetailsRoot","FlatPanelProps","Popper","anchorEl","paperContent","marginBottom","IconButtonProps","mainMenuText","contrastText","ExpansionPanelSummaryRoot","ExpansionPanelSummaryContent","ExpansionPanelSummaryExpandIcon","minHeight","paddingRight","PaperProps","CardActionArea","focusVisibleClassName","ButtonBase","focusVisible","focusHighlight","hoverOpacity","pointerEvents","top","bottom","transition","transitions","duration","short","mediaCardContainer","mediaCardImageCompact","mediaCardContent","textTransform","urlOrElement","defaultImageHeight","lazyLoad","setElevation","showCompact","onMouseEnter","onMouseLeave","isNotActive","fontStyle","statusChip","titleEllipsis","textOverflow","mapTranslatedStatus","ProductSelectOption","innerProps","isFocused","isDisabled","media","subtitle","seriesStatus","seriesIsDiscontinued","handleClick","triggerDefaultOnClick","draftStatus","pimStatus","whiteSpace","DraftStatusChip","Divider","TriangleDiv","styled","ProductStep","defaultOnClick","product","currentDrawing","SeriesFilterClearAction","clearUseFilter","category","Product","getCategoryFromProduct","seriesId","currentProductId","filteredProducts","_product","useAccessibilityStandard","SeriesLoadingAction","products","seriesIdToOrderBy","SelectSeriesAction","GetSeriesAndAddSeriesSpecificFiltersAction","productAttributes","SetEditingProductIndexAction","editProductIndex","SetCategoryIdAction","productCategoryId","GetSeriesAction","missingRule","editProduct","deleteProduct","toggleOpen","toggleOpenHandler","addProduct","handleAlternativeFeatureClick","accessAlternativeFeature","hasFeatAlternativesAclRole","accessPoint","productId","productNumber","brand","clickedSpecProductId","selectedSpecProductId","enableAlternativeFeature","isArchived","productContainer","stepName","lineHeight","productStepBox","endIcon","ALTERNATIVES_DROP_DOWN_ID","drawingId","seriesName","specProductId","productIndex","basisProductNumber","basisBrand","basisBrandId","basisCategoryname","basisCategoryId","disableActions","disableManageAlternativeButton","productStepDescription","IconButton","iconButton","marginTopBot","border","shape","background","mode","makeSelectMode","selectedSpecId","makeSelectSelectedSpecId","selectedMasterSpecId","makeSelectSelectedMasterSpecId","selectedTemplateSpecId","makeSelectSelectedTemplateSpecId","makeSelectOverlayComponentProp","master","makeSelectMasterDrawing","masterTemplate","makeSelectTemplateDrawing","makeSelectDrawing","SeriesSelectOption","MenuListComponent","checked","restProps","MenuList","borderTop","Checkbox","transform","quickSearchInput","fontWeight","searchContainer","searchContainerCompact","searchLabelCompact","xrefIcon","xrefButton","selectedDrawing","isOverlayComponents","makeSelectOverlayComponents","searchResults","makeSelectSearchResults","allCategories","makeSelectProductCategories","categories","makeSelectFilteredProductCategories","categorySelect","selectSearchProductSelectionGroupFormCategorySelect","searchTerm","makeSelectSearchTerm","skipRules","makeSelectSkipRuleEngine","isLoadingQuickSearchResults","makeSelectIsLoadingQuickSearchResults","isHideDiscontinuedSeries","makeSelectHideDiscontinuedSeries","isRegisteredUser","quickSearch","query","QuickSearchAction","categorySearchType","CategorySearchTypeAction","updateHideDiscontinuedAndQuickSearch","SetHideDiscontinuedSeriesAction","trim","setCategorySearchTerm","useTheme","headerRef","displayFullXrefButton","setDisplayFullXrefButton","ClearAllSearchResultsAction","ClearQuickSearchAction","resizeObserver","observe","unobserve","ResizeObserver","clientWidth","isCategorySearchType","QuickSearchType","CATEGORY","onSeriesSelected","series","startTime","productSelectionPageLoad","foundProductCategory","listOfCategories","productCategoryGroup","cat","productCategory","ProductCategory","hasProduct","SelectCategoryAction","selectDrawing","SelectNewCategoryAction","MissingRule","SkipRuleEngineAction","parsedSearchResults","PRODUCT","SERIES","description","safeStringify","optionComponent","FormControl","newSearchType","zIndex","FieldReactSelect","trimmedVal","onKeyDown","preventDefault","getOptionLabel","opt","Option","borderRight","borderLeft","borderColor","subtitle2","loadingIndicator","SpecToolXrefButton","shadow","shadows","flex","RoutePartialPath","partialPath","_partialPath","render","routeProps","pathMatchPartial","matchPathPartial","RouteWithProps","componentProps","finalProps","renderMergedProps","selectableCard","selectedCheckIcon","labelTypography","iconFontawesomeIcon","secondary","selectedIconFontawesomeIcon","styleUtils","Lodable","SpeedDialAction","_props$delay","_props$FabProps","FabProps","TooltipClasses","_props$tooltipOpen","tooltipOpen","tooltipOpenProp","_props$tooltipPlaceme","tooltipPlacement","tooltipTitle","_React$useState","setTooltipOpen","transitionStyle","transitionDelay","fab","Fab","fabClosed","tabIndex","staticTooltip","capitalize","staticTooltipClosed","staticTooltipLabel","onClose","onOpen","emphasize","shorter","body1","tooltipPlacementLeft","transformOrigin","tooltipPlacementRight","getOrientation","SpeedDial","ariaLabel","origDialButtonRef","childrenProp","_props$hidden","hidden","onBlur","_props$TransitionComp","openIcon","TransitionComponent","Zoom","_props$transitionDura","transitionDuration","enter","enteringScreen","exit","leavingScreen","TransitionProps","eventTimer","clearTimeout","focusedAction","nextItemArrowKey","handleOwnFabRef","fabFef","handleFabRef","useForkRef","createHandleSpeedDialActionButtonRef","dialActionIndex","origButtonRef","buttonRef","handleClose","event","persist","handleOpen","mouseenter","allItems","Children","_child$props$FabProps","ChildFabProps","_nextItemArrowKey$cur","nextItemArrowKeyCurrent","actionStep","nextAction","clamp","in","unmountOnExit","isMuiElement","actionsClosed","speedDial","directionUp","spacingActions","directionDown","directionLeft","directionRight","paddingLeft","SpeedDialCustom","overRideClasses","fill","white","makeSelectLocation","utils","togglePath","TruncateText","styledDiv","underConstructionImg","alt","WidgetHeaderEndStyle","WidgetHeaderStyle","grid","WidgetLoaderStyle","header","noAuto","widgetStyleOverride","flexVertical","flexHorizontal","widgetContentContainer","widgetContentStyle","overflowX","ConditionalTooltip","showTooltip","capitalizedError","toUpperCase","FormikField","errorComponent","fieldComponent","FormikTextField","FormikErrorField","ProductActionTypes","UpdateCategoryPopularityAction","UPDATE_CATEGORY_POPULARITY","SelectProductForConfiguratorAction","SELECT_PRODUCT_FOR_CONFIGURATOR","GetAiExclusionAction","GET_AI_EXCLUSION","GetAiExclusionSucceededAction","GET_AI_EXCLUSION_SUCCEEDED","SetIsGettingAiExclusionAction","SET_IS_GETTING_AI_EXCLUSION","SetIsAddingAiExclusionAction","SET_IS_ADDING_AI_EXCLUSIONS","SetIsUpdatingAiExclusionAction","SET_IS_UPDATING_AI_EXCLUSION","SetIsDeletingAiExclusionAction","SET_IS_DELETING_AI_EXCLUSION","SetIsRecommendedSpecProductLoadingAction","SET_IS_RECOMMENDED_SPEC_PRODUCT_LOADING_ACTION","SetRecommendedSpecProductAction","SET_RECOMMENDED_SPEC_PRODUCT_ACTION","GetRecommendedSpecProductAction","GET_RECOMMENDED_SPEC_PRODUCT_ACTION","SetSortSeriesByAction","SET_SORT_SERIES_BY","SetSeriesSearchOptionsAction","SET_SERIES_SEARCH_OPTIONS","SET_HIDE_DISCONTINUED_SERIES","SetShowDraftSeriesOnlyAction","SET_SHOW_DRAFT_SERIES_ONLY","GetManufacturersByCategoryIdSucceededAction","GET_MANUFACTURERS_BY_CATEGORY_ID_SUCCEEDED","GetManufacturersByCategoryIdAction","GET_MANUFACTURERS_BY_CATEGORY_ID","SetIsGettingBrandVariationsAction","SET_IS_GETTING_BRAND_VARIATIONS","GetBrandVariationsSucceededAction","GET_BRAND_VARIATIONS_SUCCEEDED","SetIsUpdatinggBrandVariationAction","SET_IS_UPDATING_BRAND_VARIATION","UpdateBrandVariationByIdSucceededAction","UPDATE_BRAND_VARIATION_BY_ID_SUCCEEDED","CategoryLoadingAction","CATEGORY_LOADING","SearchDalSeriesWithFilterLoadingAction","SEARCH_DAL_SERIES_WITH_FILTER_LOADING","SearchDalSeriesWithFilterSucceededAction","SEARCH_DAL_SERIES_WITH_FILTER_SUCCEEDED","SearchProductsWithFilterLoadingAction","SEARCH_PRODUCTS_WITH_FILTER_LOADING","SearchProductsWithFilterSucceededAction","SEARCH_PRODUCTS_WITH_FILTER_SUCCEEDED","CreateMatchingProductThenUpdateDrawingAction","CREATE_MATCHING_PRODUCT_THEN_UPDATE_DRAWING","GET_SERIES_AND_ADD_SERIES_SPECIFIC_FILTERS","GetSeriesByIdAction","GET_SERIES_BY_ID","SKIP_RULE_ENGINE","ConvertInitSelectionsToSeriesSpecificFiltersAction","CONVERT_INIT_SELECTIONS_TO_SERIES_SPECIFIC_FILTERS","SeriesSpecificFilterAddAction","SERIES_SPECIFIC_FILTER_ADD","SeriesSpecificFilterRemoveAction","SERIES_SPECIFIC_FILTER_REMOVE","SeriesSpecificFilterClearThenCheckProductAndAttributesAction","SERIES_SPECIFIC_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES","SeriesSpecificFilterClearAllAction","SERIES_SPECIFIC_FILTER_CLEAR_ALL","ProductFilterAddAction","PRODUCT_FILTER_ADD","ProductFilterRemoveAction","PRODUCT_FILTER_REMOVE","ProductFilterToggleAction","PRODUCT_FILTER_TOGGLE","ProductFilterClearAction","PRODUCT_FILTER_CLEAR","SERIES_LOADING","SeriesLoadingFinishedAction","SERIES_LOADING_FINISHED","UseActionAndSearchWithFilterAction","USE_ACTION_AND_SEARCH_WITH_FILTER","SearchSeriesWithFilterAction","SEARCH_SERIES_WITH_FILTER","GetAttributeOptionsOrderSucceededAction","GET_ATTRIBUTE_OPTIONS_ORDER_SUCCEEDED","GetAttributeOptionsOrderAction","GET_ATTRIBUTE_OPTIONS_ORDER","ResetEditingProductIndexAction","RESET_EDITING_PRODUCT_INDEX","EDITING_PRODUCT_INDEX","GetAttributeOrderSucceededAction","GET_ATTRIBUTE_ORDER_SUCCEEDED","GetAttributeOrderAction","GET_ATTRIBUTE_ORDER","SELECT_NEW_CATEGORY","withCategoryFilter","Filter","generateCategoryFilter","SELECT_CATEGORY","SelectCategoryAndGetSpecsAction","SELECT_CATEGORY_AND_GET_SPECS","SelectCategoryFinishedAction","SELECT_CATEGORY_FINISHED","SET_CATEGORY_ID","UpdateSeriesAction","UPDATE_SERIES","GET_SERIES","MatchingProductsSucceededAction","MATCHING_PRODUCTS_SUCCEEDED","ResetMatchingProductsAction","RESET_MATCHING_PRODUCTS","GetMatchingPriceSummarySucceededAction","GET_MATCHING_PRICE_SUMMARY_SUCCEEDED","SELECT_SERIES","SeriesFilterAddAction","SERIES_FILTER_ADD","SeriesFilterToggleAction","SERIES_FILTER_TOGGLE","SeriesFilterRemoveAction","SERIES_FILTER_REMOVE","SERIES_FILTER_CLEAR","SetCategorySpecificSeriesFiltersAction","SET_CATEGORY_SPECIFIC_SERIES_FILTERS","RemoveCategorySpecificSeriesFilterAction","REMOVE_CATEGORY_SPECIFIC_SERIES_FILTER","SetSeriesSpecificInitSelectionsAction","SET_SERIES_SPECIFIC_INIT_SELECTIONS","SetSelectedSeriesSpecificInitDisabledSelectionsAction","SET_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS","DeleteSelectedSeriesSpecificInitDisabledSelectionsAction","DELETE_SELECTED_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS","ResetSeriesSpecificInitDisabledSelectionsAction","RESET_SERIES_SPECIFIC_INIT_DISABLED_SELECTIONS","ClearSearchResultsAction","CLEAR_SEARCH_RESULTS","CLEAR_ALL_SEARCH_RESULTS","ClearSearchResultsWithCategoryNameAction","CLEAR_SEARCH_RESULTS_WITH_CATEGORY","GetSearchResultsSucceededAction","GET_SEARCH_RESULTS_SUCCEEDED","GetProductsFailedAction","GET_PRODUCTS_FAILED","QUICK_SEARCH","CLEAR_QUICK_SEARCH","QuickSearchFirmAction","QUICK_SEARCH_FIRM","QuickSearchFirmLoadingAction","QUICK_SEARCH_FIRM_LOADING","CATEGORY_SEARCH_TYPE","GetBrandRepProductCategoriesAction","GET_BRAND_REP_PRODUCT_CATEGORIES","GetProductCategoriesAction","GET_PRODUCT_CATEGORIES","GetProductCategoriesSucceededAction","GET_PRODUCT_CATEGORIES_SUCCEEDED","FilterProductCategoriesAction","FILTER_PRODUCT_CATEGORIES","ProductCategorySelectionAction","PRODUCT_CATEGORY_SELECTION","UpdateSeriesFilterInputAction","UPDATE_SERIES_FILTER_INPUT","CheckProductAndAttributesLoadingAction","CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING","CheckProductAndAttributesLoadingDoneAction","CHECK_PRODUCTS_AND_ATTRIBUTES_LOADING_DONE","SaveFirmCategoryAction","SAVE_FIRM_CATEGORY","SaveFirmCategoryLoadingAction","SAVE_FIRM_CATEGORY_LOADING","makeSelectLoggedInUserData","makeSelectGettingFilterList","makeSelectFilterList","filterType","makeSelectLocationForSeriesSearchFilter","useXrefLogic","makeSelectSpec","makeSelectMasterProjectspec","makeSelectTemplateProjectSpec","makeSelectLoggedInUserOfficeLocation","selectedSpec","masterSpec","templateSpec","userOfficeLocation","specProjectId","selectedSpecLocation","masterSpecProjectId","masterSelectedSpecLocation","templateSpecProjectId","templateSelectedSpecLocation","isCanOrUs","makeSelectPTXrefLocation","selectReduxFormState","quoteFormValues","projectLocation","makeSelectBuildingForSeriesSearchFilter","selectedSpecBuilding","masterSelectedSpecBuilding","templateSelectedSpecBuilding","makeSelectLoggedInUserOfficeId","makeSelectLoggedInUserOffice","loggedInUserOfficeId","makeSelectRegionList","makeSelectSettingPassword","makeSelectSetPasswordSuccess","makeSelectOpportunityStatusesList","makeSelectOpportunityLabelsList","makeSelectSearchedContacts","makeSelectSearchedContactsHasNextPage","makeSelectSearchedContactsBySearchTerm","makeSelectVisibilityList","makeSelectContacts","makeSelectCollaborators","makeSelectAlphabetizedContacts","contacts","contact","makeSelectContactsLoading","makeSelectContact","controlledContactId","contactId","makeSelectSelectedContactId","salesRep","makeSelectSelectedUserId","makeSelectUsersForSalesRep","makeSelectNoteCreators","makeSelectLogInAsUsers","makeSelectLogInAsUsersIsSearching","makeSelectSearchedUsers","makeSelectSearchedUsersWithUsers","searchedUsers","isSearching","makeSelectSearchedUsersWithDetailAsListItem","acc","makeSelectUsersLoading","makeSelectUserLoading","makeSelectUserUpdateSucceeded","makeSelectOfficeLoading","_makeSelectUsersPerOfficeMergedWithUserData","usersPerOfficeRaw","mutableMap","idSet","makeSelectUsersPerOffice","controlledOfficeId","makeSelectSelectedOfficeId","usersPerOffice","selectedOfficeId","makeSelectUsersPerOfficeTeamOrganization","makeSelectTeamOrganizationSelectedOfficeId","makeSelectUsersPerOfficeWithUsers","makeSelectTeamOrganizationUsersWithUsers","usersInOffice","makeSelectTeamOrganizationSelectedUser","makeSelectTeamOrganizationSelectedUserId","selectedUserId","makeSelectUserById","makeSelectShareQuotes","userFirm","makeSelectShareContacts","makeSelectTeamOrganization","teamOrganization","makeSelectSelectedFirmId","makeSelectFirmOfficeIdsMap","makeSelectOfficesByFirm","firmToOfficeIdsMap","makeSelectOfficeIdsByFirm","officeMap","officeIdSet","makeSelectFirms","makeSelectOffice","makeSelectOfficeBySelectedTeamOrganizationOfficeId","makeSelectOfficeByTeamOrganization","makeSelectFirm","controlledFirmId","firms","makeSelectUserFirmCompanyName","userFirmId","makeSelectUserFirmCompanyAltName","makeSelectPreferences","makeSelectUserDefinedLabel","preferences","PreferenceType","UserDefinedLabel","makeSelectOpportunityGroups","OpportunityGroups","makeSelectOpportunityStatuses","opportunityStatus","makeSelectPhases","ProjectPhase","makeSelectQuoteConnectCurrency","QuoteConnectCurrency","makeSelectManufacturer","makeSelectToolSpecificManufacturers","manufacturers","isPimTool","userHasAtsUserAcl","manufacturer","makeSelectCategory","makeSelectSelectedManufacturerId","makeSelectSelectedCategoryId","makeSelectCustomerDiscounts","makeSelectSearchedContactsFindIndex","makeSelectUpdateFirmloading","makeSelectManufacturerPreferences","makeSelectManufacturerRankings","makeSelectSpecToolDefaultSpecListFilter","userOfficeId","makeSelectSpecToolDefaultProjectListFilter","isAi","makeSelectIsSearchingFolderTemplates","makeSelectAttachmentFolderTemplates","makeSelectDefaultAttachmentFolderTemplate","makeSelectDefaultCustomEmail","makeSelectAclRoles","makeSelectOfficeBrandTags","makeSelectFirmBrandTags","firmBrandTags","makeSelectFirmBrandTagsKeyed","makeSelectIsGettingFirmBrandTags","makeSelectMasterFormatRoots","makeSelectUploadUsersProgress","makeSelectAutoTrackProjects","makeSelectIsGettingCustomerVisibilitySetting","makeSelectIsGettingQuoteExcelColumnPreferences","makeSelectIsUpdatingQuoteExcelColumnPreferences","makeSelectQuoteExcelColumnPreferences","makeSelectVendorQuotationAutoTakeoff","selectBrandRep","selectBrandRepCategoryByManufacturer","selectBrandRepManufacturerByCategory","selectSearchMode","makeSelectHasFetchedDiscountPriority","makeSelectDiscountPriority","makeSelectHasFetchedQuoteDiscountList","makeSelectQuoteDiscountList","makeSelectShopDrawingColor","makeSelectHasFetchedShopDrawingColor","makeSelectHasAlreadyFetchedManufacturerDiscounts","makeSelectManufacturerDiscounts","makeSelectManufacturerDiscountsIndexMap","makeSelectSelectedManufacturerDiscounts","selectedManufacturerIds","makeSelectQuoteFormProps","manufacturerGroups","manufacturerDiscountsIndexMap","quoteFormSelectedManufacturerIds","selectedGroups","manufacturerId","groupIndex","group","makeSelectDefaultManufacturerDiscounts","makeSelectDefaultProjectVisibility","makeSelectHasFetchedDefaultProjectVisibility","makeSelectFirmEmailSetting","makeSelectQuoteAutoSavePreferenceFetched","consoleLogger","output","Logger","concreteLogger","logger","bool","forward","_len4","_key4","lvl","debugOnly","moduleName","EventEmitter","observers","events","cloned","_cloned","defer","res","rej","promise","makeString","copy","getLastOfPath","Empty","cleanKey","canNotTraverseDeeper","setPath","_getLastOfPath","getPath","_getLastOfPath3","deepExtend","overwrite","prop","regexEscape","_entityMap","escape","ResourceStore","_EventEmitter","keySeparator","silent","addNamespaces","resources","addResource","deep","removeNamespaces","getResource","compatibilityAPI","processors","addPostProcessor","handle","translator","processor","Translator","baseLogger","resolved","nsSeparator","parts","overloadTranslationOptionHandler","_this$extractFromKey","extractFromKey","namespace","appendNamespaceToCIMode","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","translate","extendTranslation","usedDefault","isValidLookup","pluralResolver","getSuffix","updateMissing","lngs","fallbackLngs","languageUtils","getFallbackCodes","saveMissingTo","toResolveHierarchy","send","missingKeyHandler","saveMissing","needsPluralHandling","saveMissingPlurals","getPluralFormsOfKey","appendNamespaceToMissingKey","parseMissingKeyHandler","usedLng","usedNS","skipInterpolation","defaultVariables","nest","postProcess","postProcessorNames","applyPostProcessor","postProcessor","_this4","extracted","fallbackNS","needsContextHandling","codes","pluralSuffix","possibleKey","finalKey","finalKeys","addLookupKeys","contextSeparator","returnNull","returnEmptyString","resourceStore","charAt","LanguageUtil","whitelist","formatLanguageCode","specialCases","lowerCaseLng","part","cleanCode","load","nonExplicitWhitelist","getLanguagePartFromCode","fallbacks","getScriptPartFromCode","fallbackCode","fallbackCodes","addCode","isWhitelisted","fc","nr","_rulesPluralsTypes","createRules","rules","numbers","plurals","PluralResolver","rule","getRule","noAbs","simplifyPluralSuffix","returnSuffix","prepend","compatibilityJSON","Interpolator","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","maxReplaces","resetRegExp","regexpStr","regexp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","nestingRegexp","replaces","regexSafe","handleFormat","missingInterpolationHandler","exec","lastIndex","temp","clonedOptions","handleHasOptions","inheritedOptions","optionsString","Connector","queue","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","errors","_name$split","_name$split2","addResourceBundle","q","_getLastOfPath2","what","fcName","tried","wait","read","queueLoad","loadOne","prepareLoading","_this5","_name$split3","_name$split4","fallbackValue","isUpdate","initImmediate","preload","pluralSeparator","partialBundledLanguages","tDescription","_format","transformOptions","noop","I18n","modules","external","isClone","createClassOnDemand","ClassOrObject","lu","LanguageUtils","BackendConnector","languageDetector","detection","storeApi","_this2$store","deferred","changeLanguage","append","setLng","cacheUserLanguage","loadResources","async","detect","fixedT","opts","_this$translator","_this$translator2","_this6","preloaded","newLngs","_this7","mergedOptions","membersToCopy","cloneInstance","createInstance","dir","loadLanguages","setDefaultNamespace","use","defaultVariantMapping","h1","h2","h3","h4","h5","h6","subtitle1","body2","_props$align","_props$color","_props$display","_props$gutterBottom","gutterBottom","_props$noWrap","_props$paragraph","paragraph","_props$variant","_props$variantMapping","variantMapping","caption","overline","srOnly","alignLeft","alignCenter","alignRight","alignJustify","colorInherit","colorPrimary","colorSecondary","colorTextPrimary","colorTextSecondary","colorError","displayInline","displayBlock","buffer","PDFNumber","PDFArray","PDFBool","IsDelimiter","CharCodes","IsWhitespace","PDFName","PDFNull","copyBytesInto","PDFDict","PDFStream","PDFRawStream","objectNumber","PDFOperatorNames","PDFFlateStream","SimpleRNG","PDFContext","PDFPageLeaf","PDFInvalidObject","EntryType","PDFCrossRefStream","StandardFontEmbedder","widths","currSection","CustomFontSubsetEmbedder","ColorSpace","pos","UPNG","out","w","tabs","acTL","toRGBA8","decodeImage","frms","frames","img","Uint8Array","frm","fx","rect","fy","fw","fh","fdata","blend","_copyTile","dispose","area","bpp","decode","_getBPP","bpl","bf","bf32","Uint32Array","ctype","rs","_bin","readUshort","qarea","ts","ti","tr","tg","tb","qi","ap","tl","s0","t0","cj","gr","di","al","buff","fd","bin","rUs","rUi","readUint","dd","doff","foff","mgck","readASCII","_IHDR","num_frames","num_plays","fr","_decompress","rct","del","nz","nextZero","keyw","readUTF8","readBytes","pl","compress","interlace","_inflate","_filterZero","_readInterlace","inflateRaw","H","N","W","C","R","J","Q","X","u","V","A","M","I","Z","K","S","D","T","z","$","Y","byteOffset","Uint16Array","cbpp","starting_row","starting_col","row_increment","col_increment","pass","ri","ci","sw","sh","cr","cc","bpll","row","col","cdi","paeth","_paeth","pa","pb","pc","writeUshort","writeUint","fromCharCode","writeASCII","pad","decodeURIComponent","sb","tw","th","xoff","yoff","si","fa","fg","fb","ba","br","bg","bb","ifa","oa","ioa","encode","bufs","ps","dels","forbidPlte","nimg","compressPNG","_main","encodeLL","bipp","bipl","crc","wUi","wUs","wAs","anim","pltAlpha","leng","dl","plte","cimg","wr","fi","imgd","ioff","levelZero","nh","prms","onlyBlend","evenCrd","forbidPrev","minBits","alphaAnd","ilen","gotAlpha","framize","cmap","inds","nbufs","abuf","concatRGBA","qres","quantize","cof","bln","est","rgba","img32","nw","ind","cmc","inj","alwaysBlend","cimg32","nx","ny","tlim","tstp","tarea","it","pimg","p32","mix","miy","may","sarea","_prepareDiff","r0","r1","miX","miY","_updateFrame","U8","U32","pimg32","cx","cy","rec","fls","ftry","CMPR","UZIP","pako","_filterLine","tsize","table","tab","buf","oimg","nimg32","KD","getKDtree","leafs","planeDst","nd","getNearest","i0","i1","bst","tdst","stats","estats","maxL","mi","L","splitPixels","eMq255","ln","rn","dist","node0","node1","eMq","d0","d1","d2","d3","vecDot","m0","m1","m2","m3","iN","Rj","M4","tmi","multVec","sqrt","dot","sml","Cov","tlen","byteLength","noff","PngType","rgbChannel","alphaChannel","DecodeStream","ViewerPreferences","PDFAcroField","dict","PDFAnnotation","PDFAcroTerminal","FT","widget","PDFAcroCheckBox","AcroFieldFlags","AcroChoiceFlags","PDFAcroChoice","updateSelectedIndices","PDFAcroText","ffNumber","PDFCatalog","Count","IsDigit","ByteStream","CarriageReturn","stream","AnnotationFlags","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","self","Function","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","nodeIsRegExp","isRegExp","nodeIsSet","nodeIsTypedArray","isTypedArray","arrayAggregator","setter","iteratee","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","arrayMap","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","nativeCreate","metaMap","realNames","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","comparer","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","createCaseFirst","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","prereq","thru","wrapper","getFuncName","funcName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","otherFunc","isKeyable","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","interceptor","wrapperAt","forEachRight","invokeMap","keyBy","partition","before","bindKey","WRAP_BIND_FLAG","debounce","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isString","lt","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","invert","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","toPairs","toPairsIn","camelCase","word","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","initial","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","takeRight","takeRightWhile","tap","throttle","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extend","extendWith","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","mean","meanBy","stubObject","stubString","stubTrue","nth","noConflict","strLength","padEnd","padStart","radix","floating","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","reDelimiters","evaluate","sourceURL","interpolateValue","esTemplateValue","evaluateValue","variable","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","search","newEnd","unescape","uniqueId","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","define","toVal","tmp","makeSelectSelectedSpecIdLixilPrintConfigPrintGroups","makeSelectSpecPrintConfigBySelectedSpecId","controlledDrawingId","makeSelectSelectedDrawingId","selectedDrawingId","drawing","makeSelectfailedSelfDrawingRulesLoading","makeSelectfailedSelfDrawingRules","makeSelectTestSpecMode","makeSelectSearchingGetMasterSpecById","makeSelectSearchingGetTemplateSpecById","makeSelectSpecOrMasterSpecId","makeSelectSpecs","makeSelectMasterProjectspecs","makeSelectTemplateSpecs","makeSelectCurrentSpecs","specs","masterSpecs","templateSpecs","controlledSpecId","makeSelectDrawings","finalSpec","makeSelectSelectedSpec","makeSelectSelectedSpecIsAI","makeSelectAlternativeProducts","controlledIndex","makeSelectEditingProductIndex","makeSelectDrawingRules","makeSelectUpdatingRules","makeSelectGettingSpec","makeSelectMissingCategory","drawingRules","makeSelectRuleFails","makeSelectSearchedSpecsHasNextPage","makeSelectSearchedSpecs","makeSelectSearchingSpecs","makeSelectRedirectPath","makeSelectIsSavingAlternativeProducts","makeSelectCopyStatus","makeSelectIsUpdatingDrawing","makeSelectNewDrawingId","makeSelectMasterDrawerData","minDate","minDateMessage","maxDate","maxDateMessage","potentialDate","isValidDate","required","requiredList","requiredCheckbox","isNotEmpty","isNumberGreaterThanZero","isBiggerThan","isSmallerThan","isPositiveFloatSmallerThan","decimalLimit","onlyWhole","isNonNegativeFloatSmallerThan","SIGNED_FLOAT_REGEX","isFloatBetween","outOfRangeError","POSITIVE_INTEGER_REGEX","NON_NEGATIVE_INTEGER_REGEX","isPositiveIntegerSmallerThan","isEmptyOrContent","isValid","isNotEmptyStringRequired","_isString","isValidEmailAddress","isValidEmailAddressOrEmpty","isValidPassword","strongRegex","isValidExtension","invalidLength","invalidCharacters","passwordsMustMatch","dateValidateFunc","gteDate","lteDate","convertDate","dateNoLaterThan","noLaterThan","setHours","dateNoEarlierThan","noEarlierThan","MinMaxValidateFunc","maxStringLength","excluded","sourceSymbolKeys","Unknown","UUID","getResponseBodyString","responseBodyString","IdentifyOperation","RevenueProperty","SpecialEventType","retryTimeout","throttleTimeout","storageKey","scheduled","setup","apiKey","storageProvider","unsent","all","execute","catch","insert_id","attempts","addToQueue","getTryableList","flushMaxRetries","fulfillRequest","scheduleTryable","shouldAddToQueue","schedule","flushIntervalMillis","tryable","saveEvents","offline","useRetry","loggerProvider","later","batches","chunkSize","element","chunkIndex","flushQueueSize","api_key","min_id_length","minIdLength","client_upload_time","serverUrl","serverZone","useBatch","transportProvider","handleResponse","statusCode","Success","handleSuccessResponse","Invalid","handleInvalidResponse","PayloadTooLarge","handlePayloadTooLargeResponse","RateLimit","handleRateLimitResponse","handleOtherResponse","missingField","dropIndex","eventsWithInvalidFields","eventsWithMissingFields","eventsWithInvalidIdLengths","silencedEvents","flat","dropIndexSet","retry","dropUserIds","exceededDailyQuotaUsers","dropDeviceIds","exceededDailyQuotaDevices","throttledIndex","throttledEvents","dropUserIdsSet","dropDeviceIdsSet","throttledIndexSet","user_id","device_id","removeEvents","updatedEvents","eventsToRemove","queuedContext","isValidObject","valueElement","_propertySet","_properties","getUserProperties","_safeSet","SET","setOnce","SET_ONCE","APPEND","PREPEND","postInsert","POSTINSERT","preInsert","PREINSERT","REMOVE","ADD","UNSET","clearAll","CLEAR_ALL","operation","_validate","userPropertyMap","quantity","price","setProductId","setQuantity","setPrice","setRevenueType","revenueType","setRevenue","revenue","setEventProperties","getEventProperties","eventProperties","REVENUE_PRODUCT_ID","REVENUE_QUANTITY","REVENUE_PRICE","REVENUE_TYPE","REVENUE","client","applying","plugins","register","plugin","deregister","pluginName","teardown","scheduleApply","enrichment","destination","executeDestinations","eventClone","resolveResult","identify","eventOptions","event_type","IDENTIFY","user_properties","initializing","dispatchQ","logEvent","track","timeline","_init","runQueuedFunctions","queueName","queuedFunctions","queuedFunction","eventInput","baseEvent","event_properties","groupIdentify","groupType","groupName","GROUP_IDENTIFY","group_properties","setGroup","dispatchWithCallback","optOut","setOptOut","identityStore","userProperties","editIdentity","updateUserProperties","instanceName","isTrackingEnabled","defaultTracking","isAttributionTrackingEnabled","isPageViewTrackingEnabled","getPageViewTrackingConfig","eventType","trackOn","trackHistoryChanges","pageCounter","pageViews","convertProxyObjectToRealObject","isInstanceProxy","_q","getLanguage","navigator","userLanguage","library","userAgent","lastEventId","nextEventId","event_id","lastEventTime","deviceId","session_id","appVersion","app_version","trackingOptions","platform","ipAddress","ip","partner_id","partnerId","plan","ingestionMetadata","ingestion_metadata","source_name","sourceName","source_version","sourceVersion","user_agent","memoryStorage","isEnabled","getRaw","postKey","globalScope","curr","tryDecodeURIComponent","CookieStorage","testValue","testStrorage","testKey","atob","cookie","expirationDays","expireDate","expires","setTime","btoa","encodeURIComponent","toUTCString","domain","secure","sameSite","storage","testStorage","BrowserStorage","localStorage","droppedEventsCount","sessionStorage","XMLHttpRequest","xhr","onreadystatechange","readyState","responsePayload","responseText","parsedResponsePayload","buildResponse","setRequestHeader","sendBeacon","events_ingested","payload_size_bytes","server_upload_time","cookieStorage","deleteLegacyCookies","cookieName","cookies","parseTime","integer","BASE_CAMPAIGN","utm_campaign","utm_content","utm_id","utm_medium","utm_source","utm_term","referrer","referring_domain","dclid","gbraid","gclid","fbclid","ko_click_id","li_fat_id","msclkid","rtd_cid","ttclid","twclid","wbraid","getUtmParam","getReferrer","getClickIds","pluginConfig","initialEmptyValue","resetSessionOnNewCampaign","excludeReferrers","getDefaultExcludedReferrers","cookieOptions","currentCampaign","previousCampaign","isEventInNewSession","sessionTimeout","setSessionId","campaignEvent","omitUndefined","pushState","localConfig","createPageViewEvent","hostname","shouldTrackOnPageLoad","previousURL","trackHistoryPageView","newURL","shouldTrackPageView","shouldTrackHistoryPageView","trackHistoryPageViewWrapper","Proxy","unused","pageViewEvent","$set","$unset","trackingOption","oldURL","eventListeners","handler","addFormInteractionListener","hasFormChanged","DEFAULT_FORM_START_EVENT","FORM_ID","stringOrUndefined","FORM_NAME","FORM_DESTINATION","DEFAULT_FORM_SUBMIT_EVENT","getElementsByTagName","MutationObserver","mutations","mutation","addedNodes","nodeName","querySelectorAll","subtree","childList","disconnect","addFileDownloadListener","URL","ext","fileExtension","DEFAULT_FILE_DOWNLOAD_EVENT","FILE_EXTENSION","FILE_NAME","LINK_ID","LINK_TEXT","LINK_URL","notified","addNetworkListener","onLine","userIdOrOptions","maybeOptions","browserOptions","connector","setIdentity","isFormInteractionTrackingEnabled","attributionTrackingOptions","attribution","webAttribution","eventBridge","setEventReceiver","getUserId","setUserId","getDeviceId","setDeviceId","getSessionId","previousSessionId","DEFAULT_SESSION_END_EVENT","previousSessionDeviceId","previousSessionUserId","DEFAULT_SESSION_START_EVENT","extendSession","setTransport","transport","currentTime","__esModule","ReferenceError","stylesOrCreator","withStylesWithoutDefault","defaultTheme","asyncGeneratorStep","gen","_next","_throw","info","_asyncToGenerator","makeSelectPollingPrintId","makeSelectAtsApiStates","makeSelectAtsApiState","states","makeSelectAtsApiIdentity","makeSelectScrollNode","makeSelectOverlayComponentProps","makeSelectOverlayComponentContent","makeSelectLastOpenedOverlayComponentId","makeSelectOverlayComponent","makeSelectSnackbarOptions","makeSelectPrintSpecIdTypeFiles","makeSelectSpecToolProjectListIsLoading","makeSelectFieldDropzoneState","makeSelectPhotoPreview","makeSelectMobileAppMenuState","makeSelectVsbEnv","makeSelectAttributeDialogState","makeSelectOptionDialogState","makeSelectAppMenuOpen","makeSelectliveChatOpen","makeSelectTimerTracker","makeSelectTakeoffListOpen","hasOwn","appendClass","parseValue","newClass","QuoteTypes","SetBidInvitationDataAction","SET_BID_INVITATION_DATA","SetLinkBidResponseQuoteAction","SET_LINK_BID_RESPONSE_QUOTE","SaveSpecToQuoteDraftAction","SAVE_SPEC_TO_QUOTE_DRAFT","GetSpecToQuoteDraftFailedAction","GET_SPEC_TO_QUOTE_DRAFT_FAILED","GetSpecToQuoteDraftSucceededAction","GET_SPEC_TO_QUOTE_DRAFT_SUCCEEDED","GetSpecToQuoteDraftAction","GET_SPEC_TO_QUOTE_DRAFT","SetIsCreatingSalesOrderAction","SET_IS_CREATING_SALES_ORDER","SendRecommendedProductFeedbacksAction","SEND_RECOMMENDED_PRODUCT_FEEDBACKS","UpdateQuotePhaseSucceededAction","UPDATE_QUOTE_PHASE_SUCCEEDED","UpdateQuotePhaseAction","UPDATE_QUOTE_PHASE","UpdateQuoteAssignedToSucceededAction","UPDATE_QUOTE_ASSIGNED_TO_SUCCEEDED","GetSpecToQuoteProductsSucceededAction","GET_SPEC_TO_QUOTE_PRODUCTS_SUCCEEDED","GetSpecToQuoteProductsFailedAction","GET_SPEC_TO_QUOTE_PRODUCTS_FAILED","MergeBidQuoteSpecToQuoteLinkedListAction","MERGE_BID_QUOTE_SPEC_TO_QUOTE_LINKED_LIST","GetSpecToQuoteProductsAction","GET_SPEC_TO_QUOTE_PRODUCTS","GetSpecToQuoteStatusAction","GET_SPEC_TO_QUOTE_STATUS","SetIsCreatingQuoteWithSpecToQuoteAction","SET_IS_CREATING_QUOTE_WITH_SPEC_TO_QUOTE","CreateQuoteWithSpecToQuoteAction","CREATE_QUOTE_WITH_SPEC_TO_QUOTE","CreateQuoteWithSpecToQuoteActionSuccess","CREATE_QUOTE_WITH_SPEC_TO_QUOTE_SUCCESS","GetProductMediaAction","GET_PRODUCT_MEDIA","GetProductMediaSucceededAction","GET_PRODUCT_MEDIA_SUCCEEDED","GetQuoteFailAction","GET_QUOTE_FAIL","SelectQuoteAction","SELECT_QUOTE","GetQuotePhasesAction","GET_QUOTE_PHASES","GetQuotePhasesSuccessAction","GET_QUOTE_PHASES_SUCCESS","PatchQuoteSuccessAction","PATCH_QUOTE_SUCCESS","GetQuotesAction","GET_QUOTES","GetQuotesSuccessAction","GET_QUOTES_SUCCESS","SearchQuotesAction","SEARCH_QUOTES","GetQuoteSearchResultsSucceededAction","GET_SEARCHED_QUOTES_SUCCESS","GetQuotesFailAction","GET_QUOTES_FAIL","CreateQuoteAction","CREATE_QUOTE","CreateQuotePreviewAction","CREATE_QUOTE_PREVIEW","DuplicateQuoteAction","DUPLICATE_QUOTE","DeleteQuoteAction","DELETE_QUOTE","CreateRevisionAction","CREATE_REVISION","CreateRequoteAction","CREATE_REQUOTE","DeleteQuoteSuccessAction","DELETE_QUOTE_SUCCESS","UpdateQuoteAction","UPDATE_QUOTE","SetRevisionLoadingAction","SET_REVISION_LOADING","SubmittingQuoteAction","SUBMITTING_QUOTE","SetRevisionSuccessAction","SET_REVISION_SUCCESS","GetRevisionsAction","GET_REVISIONS","GetRevisionsSuccessAction","GET_REVISIONS_SUCCESS","DeleteRevisionAction","DELETE_REVISION","DeleteRevisionSuccessAction","DELETE_REVISION_SUCCESS","SelectQuoteIdAction","SELECT_QUOTE_ID","SetRevisionFailAction","SET_REVISION_FAIL","GetRevisionsFailAction","GET_REVISIONS_FAIL","DeleteRevisionFailAction","DELETE_REVISION_FAIL","CopyRevisionAction","COPY_REVISION","ResetPrintQuoteDataAction","RESET_QUOTE_PRINT_DATA","UpdateSpecToQuoteLoadingAction","UPDATE_SPEC_TO_QUOTE_LOADING","PrepareInitialValuesForSpecToQuote","PREPARE_INITIAL_VALUES_FOR_SPEC_TO_QUOTE","PrepareInitialValuesForSpecToSourceQuote","PREPARE_INITIAL_VALUES_FOR_SPEC_TO_SOURCE_QUOTE","GetQuoteBillingSucceedAction","GET_QUOTE_BILLING_SUCCEED","GetQuoteBillingFailedAction","GET_QUOTE_BILLING_FAILED","DownloadQuoteBillingSucceedAction","DOWNLOAD_QUOTE_BILLING_SUCCEED","DownloadQuoteBillingFailedAction","DOWNLOAD_QUOTE_BILLING_FAILED","ResetSpecToQuote","RESET_SPEC_TO_QUOTE","UpdateSpecToQuoteLinkedListRecommendationsAction","UPDATE_SPEC_TO_QUOTE_LINKED_LIST_RECOMMENDATIONS","_interopRequireDefault","_react","_SvgIcon","_extends2","muiName","camelize","letter","stringReplace","maybeObject","immutableObject","replacement","substituteParams","isNode","cacheCount","compilePath","cacheKey","strict","sensitive","pathCache","pathKey","pathToRegexp","exact","matched","pathFragment","matchFragment","isExact","stringValue","withTimezone","checkStore","runSaga","injectedReducers","injectedSagas","debugLog","callFunctions","functionOrArr","parseQueryString","objURL","$0","$1","$2","$3","stringifyQueryParams","qs","arrayFormat","isEvent","candidate","isReactNative","nativeEventText","nativeEvent","detypedEvent","dataTransfer","getSelectedValues","onChangeValue","normalize","makeSelectProjectFormActiveStep","makeSelectTrackedProjectIds","trackedProjectStatuses","trackInfo","makeSelectGetMasterProjectLoading","makeSelectGetMasterTemplateLoading","makeSelectSelectedProjectId","makeSelectProjectIdForCreatingSpec","makeSelectSelectedProjectOpportunityGroupUuidId","makeSelectProjects","_makeSelectProject","projects","makeSelectProject","controlledProjectId","makeSelectSearchedProjects","makeSelectSearchingProjects","makeSelectSearchedProjectsHasNextPage","makeSelectSelectedProjectFiles","makeSelectSearchedTemplates","makeSelectSearchingTemplates","makeSelectSearchedTemplatesHasNextPage","makeSelectSearchedMasters","makeSelectSearchedMastersInCopyModal","makeSelectSearchingMasters","makeSelectSearchingMastersInCopyModal","makeSelectSearchedMastersHasNextPage","makeSelectSelectedMasterProjectId","makeSelectSelectedTemplateProjectId","makeSelectMasterProjects","makeSelectTemplateProjects","makeSelectMaster","controlledMasterId","masters","makeSelectTemplate","controlledTemplateId","templates","makeSelectProjectMasterSavingAllow","makeSelectUpdateOpportunityAutomationOpportunities","makeSelectCheckOpportunityExists","makeSelectCheckOpportunityExistsFetching","makeSelectIsTrackingOrUntrackingProject","makeSelectProjectSpecConfig","makeSelectIsApplyingTemplateToProjectAttachment","makeSelectIsGettingProjects","ChildComponent","selectAmplitudeData","useAmplitudeData","PrintActionTypes","CreateAnalyticsEventsAction","CREATE_ANALYTICS_EVENTS","ShouldDisablePrintContinueAction","SHOULD_DISABLE_PRINT_CONTINUE","DeleteCoverImageAction","DELETE_COVER_IMAGES","CreateCoverImageAction","CREATE_COVER_IMAGES","SetPollingPrintIdAction","SET_POLLING_PRINT_ID","PollPrintAction","POLL_PRINT","GenericSpecPrintAction","GENERIC_SPEC_PRINT","GenericSpecPrintErrorAction","GENERIC_SPEC_PRINT_ERROR","GenericSpecPrintResetErrorAction","GENERIC_SPEC_PRINT_RESET_ERROR","GetPrintHistorySuccessAction","GET_PRINT_HISTORY_SUCCESS","GetPrintHistoryFailAction","GET_PRINT_HISTORY_FAIL","GenericQuotePrintAction","GENERIC_QUOTE_PRINT","GetCoverImagesAction","GET_COVER_IMAGES","GetCoverImagesSucceededAction","GET_COVER_IMAGES_SUCCEEDED","PrintSpecSucceededAction","PRINT_SPEC_SUCCEEDED","SetPrintQuoteStatusForShareVendorQuoteAction","SET_PRINT_QUOTE_STATUS_FOR_SHARE_VENDOR_QUOTE","ResetPrintShareVendorQuoteAction","RESET_PRINT_SHARE_VENDOR_QUOTE","PrintQuoteSucceededAction","PRINT_QUOTE_SUCCEEDED","PrintQuoteCompletedAction","PRINT_QUOTE_COMPLETED","PrintFailToggleAction","PRINT_FAIL_TOGGLE","GenericErpCronJobAction","GENERIC_ERP_CRONJOB","PrintReportCompletedAction","PRINT_REPORT_COMPLETED","PrintReportReset","PRINT_REPORT_RESET","PrintReportFailedAction","PRINT_REPORT_FAILED","CancelBulkSpecCronJobAction","CANCEL_BULK_SPEC_CRONJOB","CancelDownloadLixirSpecBookletAction","CANCEL_DOWNLOAD_LIXIR_SPEC_BOOKLET","BulkDownloadAction","BULK_DOWNLOAD","BulkDownloadFailedAction","BULK_DOWNLOAD_FAILED","PrintJobFailed","PRINT_JOB_FAILED","PrintJobSucceed","PRINT_JOB_SUCCEED","BulkDownloadSucceed","BULK_DOWNLOAD_SUCCEED","ResetBulkDownloadStatusAction","RESET_BULK_DOWNLOAD_STATUS","Base","AiExclusionType","HasId","DashboardWidgetTypes","Attribute","isAttribute","isOption","attributes","mappedAttributes","attribute","attributeValue","unit","Authentication","authenticated_at","verify_token","ContactListItem","ListItem","bidStatus","bidValue","bidNote","quoteId","quoteNumber","projectContactId","formattedBidValue","contactBids","productSearch","MatchingProduct","paginationMethod","generateProductOrderByNameOption","divisionName","divisionNumber","factoryId","brandId","upc","model","make","dateAdded","dateModified","ean","sku","file","productNumberLength","keywords","Project","buildingClasses","collaborators","isCollaborated","createdBy","createdDate","customers","doneby","leadSource","modifiedBy","modifiedDate","quotes","specForeCast","projectPhase","specIds","tags","squareFootage","tenderDate","valuation","bidDate","keyContacts","Quote","architectName","previousQuoteId","projectInfo","versionNumber","expiryDate","nextQuoteId","revisionNumber","shippingAddress","internalQuoteNumber","createdFromSpecId","requote","shippingPreference","parentVersionId","locked","termsAndCondition","grandTotals","mySqlParentQuoteId","parentQuoteId","isVersioned","currencyConversionDate","mySqlSpecId","unitMeasurement","doneBy","engineerName","revisionCreatedDate","mySqlId","internalNo","currencyCode","selectedCustomer","totalVersions","quotePhase","discountList","sections","sortProductsByManufacturer","Series","isSeries","isConfigurator","testStatus","configurator","getCategoryFromSeries","getAttributesWithFilters","onlyFilter","attributeAcc","attributeKey","filterSetValues","Spec","drawings","projectTitle","isMaster","WidgetLayoutData","XrefProduct","competitorProductType","sponsorProductType","crossTypes","QuoteEditTypes","EnableAutoSaveAction","ENABLE_AUTO_SAVE","DisableAutoSaveAction","DISABLE_AUTO_SAVE","IncrementFocusedFieldsAction","INCREMENT_FOCUSED_FIELDS","DecrementFocusedFieldsAction","DECREMENT_FOCUSED_FIELDS","SetQuoteDirtyAction","SET_QUOTE_DIRTY","RestartAutoSaveSettlingAction","RESTART_AUTO_SAVE_SETTLING","SetIsDetailViewAction","SET_IS_DETAIL_VIEW","RestartAutoSaveTimerAction","RESTART_AUTO_SAVE_TIMER","AutoSaveSuccessAction","AUTO_SAVE_SUCCESS","IngestDraftSectionsAction","INGEST_DRAFT_SECTIONS","AddCustomerSalesRepsToQuoteAction","ADD_CUSTOMER_SALES_REPS_TO_QUOTE","ToggleProductIsRequestingProductAction","TOGGLE_PRODUCT_IS_REQUESTING_PRODUCT","ToggleSectionIsRequestingProductAction","TOGGLE_SECTION_IS_REQUESTING_PRODUCT","ToggleAllIsRequestingProductAction","TOGGLE_ALL_IS_REQUESTING_PRODUCT","BulkEditSelectedProductsAction","BULK_EDIT_SELECTED_PRODUCTS","BulkMoveSelectedProductsAction","BULK_MOVE_SELECTED_PRODUCTS","BulkCopySelectedProductsAction","BULK_COPY_SELECTED_PRODUCTS","SetSortProductsByManufacturerAction","SET_SORT_PRODUCTS_BY_MANUFACTURER","SortProductsByManufacturerAction","SORT_PRODUCTS_BY_MANUFACTURER","DeleteSelectedProductsAction","DELETE_SELECTED_PRODUCTS","MapProductsToSectionTemplateAction","MAP_PRODUCTS_TO_SECTION_TEMPLATE","SetSectionToFocusAction","SET_SECTION_TO_FOCUS_ACTION","FocusCellAction","FOCUS_CELL_ACTION","SetExpandedProductInSection","SET_EXPANDED_PRODUCT_IN_SECTION","SetAllExpandedProductInSection","SET_ALL_EXPANDED_PRODUCT_IN_SECTION","SetDndMenuPathsAction","SET_DND_MENU_PATHS_ACTION","SetExcludeProductAction","SET_EXCLUDE_PRODUCT_ACTION","SetExcludeSectionAction","SET_EXCLUDE_SECTION_ACTION","ToggleExcludeSectionAction","TOGGLE_EXCLUDE_SECTION_ACTION","UpdateGrandTotalAction","UPDATE_GRAND_TOTAL_ACTION","UpdateAllSectionTotalAction","UPDATE_ALL_SECTION_TOTAL_ACTION","UpdateSectionTotalAndGrandTotalAction","UPDATE_SECTION_TOTAL_AND_GRAND_TOTAL_ACTION","UpdateAllSectionTotalThenGrandTotalAction","UPDATE_ALL_SECTION_TOTAL_THEN_GRAND_TOTAL_ACTION","UpdateProductsPriceAction","UPDATE_PRODUCTS_PRICE_ACTION","UpdateSectionTemplateAction","UPDATE_SECTION_TEMPLATE_ACTION","UpdateAllSectionTemplateAction","UPDATE_ALL_SECTION_TEMPLATE_ACTION","AddProductOrPackageToQuoteAction","ADD_PRODUCT_OR_PACKAGE_TO_QUOTE_ACTION","DuplicateFirmProductProceedAction","DUPLICATE_FIRM_PRODUCT_PROCEED_ACTION","DuplicateFirmProductCancelAction","DUPLICATE_FIRM_PRODUCT_CANCEL_ACTION","DuplicateSectionAction","DUPLICATE_SECTION_ACTION","SetPresentationalLabelColumnAction","SET_PRESENTATIONAL_LABEL_COLUMN_ACTION","SetSectionLoadingAndExpandedAction","SET_SECTION_LOADING_AND_EXPANDED_ACTION","UpdateRegionCalculationsAction","UPDATE_REGION_CALCULATIONS_ACTION","SelectQuoteCustomerAction","SELECT_QUOTE_CUSTOMER_ACTION","GetCustomerDiscountsAndVisibilityAction","GET_CUSTOMER_DISCOUNT_AND_VISIBILITY_ACTION","ClearProductInRowAction","CLEAR_PRODUCT_IN_ROW_ACTION","DeleteProductInRowAction","DELETE_PRODUCT_IN_ROW_ACTION","CopyProductToSectionAction","COPY_PRODUCT_TO_SECTION_ACTION","MoveProductToSectionAction","MOVE_PRODUCT_TO_SECTION_ACTION","ReorderProductAction","REORDER_PRODUCT_ACTION","LinkAndUnlinkProductAction","LINK_AND_UNLINK_PRODUCT_ACTION","PinColumnAction","PIN_COLUMN_ACTION","UpdateSectionTitleAction","UPDATE_SECTION_TITLE_ACTION","AddNewSectionAction","ADD_NEW_SECTION_ACTION","ClearSectionAction","CLEAR_SECTION_ACTION","DeleteSectionAction","DELETE_SECTION_ACTION","GetCurrencyConversionsAction","GET_CURRENCY_CONVERSIONS_ACTION","SetOnFocusProductRow","SET_ON_FOCUS_PRODUCT_ROW","ApplyFeedbackAction","APPLY_FEEDBACK","SetMaxProductsPerPageAction","SET_MAX_PRODUCTS_PER_PAGE","ImportPricingFromVendorQuoteAction","IMPORT_PRICING_FROM_VENDOR_QUOTE","SetSourceQuoteAction","SET_SOURCE_QUOTE","SetBidResponseIdAction","SET_BID_RESPONSE_ID","SetPendingAttachQuoteIdAction","SET_PENDING_ATTACH_QUOTE_ID","ResetImportPricingFormAction","RESET_IMPORT_PRICING_FORM","XrefActionTypes","DeleteXrefByIdAction","DELETE_XREF_BY_ID","SearchXrefsAction","SEARCH_XREFS","SearchXrefsSucceededAction","SEARCH_XREFS_SUCCEEDED","SearchXrefsFinishedAction","SEARCH_XREFS_FINISHED","SetSelectedManufacturerValueAction","SET_SELECTED_MANUFACTURER_VALUE","GetXrefProductsByCategoryAction","GET_XREF_PRODUCT_BY_CATEGORY","GetXrefProductByManufacturerAction","GET_XREF_PRODUCT_BY_MANUFACTURER","GetXrefCategoriesSucceededAction","GET_XREF_CATEGORIES_SUCCEEDED","GetXrefCategoriesAction","GET_XREF_CATEGORIES","GetXrefCategoriesLoadingAction","GET_XREF_CATEGORIES_LOADING","GetXrefManufacturersSucceededAction","GET_XREF_MANUFACTURERS_SUCCEEDED","ResetManufacturersListAction","RESET_MANUFACTURERS_LIST","GetXrefManufacturersAction","GET_XREF_MANUFACTURERS","GetXrefManufacturersLoadingAction","GET_XREF_MANUFACTURERS_LOADING","ResetSearchResultsAction","RESET_SEARCH_RESULTS","SetSelectedCompetitorProductId","SET_SELECTED_COMPETITOR_PRODUCT_ID","GetProductDetailsSucceededAction","GET_PRODUCT_DETAILS_SUCCEEDED","GetProductDetailsFailedAction","GET_PRODUCT_DETAILS_FAILED","GetProductDetailsAction","GET_PRODUCT_DETAILS","GetCompetitorProductsAction","GET_COMPETITOR_PRODUCTS","CancelXrefSearchAction","CANCEL_XREF_SEARCH","GetCompetitorProductsLoadingAction","GET_COMPETITOR_PRODUCTS_LOADING","SetSearchTermAction","SET_SEARCH_TERM","GetQuickSearchXrefSucceededAction","GET_QUICK_SEARCH_XREF_SUCCEEDED","GetAlternativesXrefAction","GET_ALTERNATIVES_XREF","GetExactSearchXrefAction","GET_EXACT_SEARCH_XREF","GetExactSearchXrefSucceededAction","GET_EXACT_SEARCH_XREF_SUCCEEDED","SendXrefFeedbackAction","SEND_XREF_FEEDBACK","RequestXrefAction","REQUEST_XREF","AddXrefAction","ADD_XREF","AddXrefSuccessAction","ADD_XREF_SUCCESS","UpdateXrefSuccessAction","UPDATE_XREF_SUCCESS","SearchXrefSponsorProductSuccessAction","SEARCH_XREF_SPONSOR_PRODUCT_SUCCESS","SearchXrefSponsorSeriesSuccessAction","SEARCH_XREF_SPONSOR_SERIES_SUCCESS","SearchXrefCompetitorProductSuccessAction","SEARCH_XREF_COMPETITOR_PRODUCT_SUCCESS","SearchXrefCompetitorSeriesSuccessAction","SEARCH_XREF_COMPETITOR_SERIES_SUCCESS","SearchXrefSponsorAction","SEARCH_XREF_SPONSOR","SearchXrefCompetitorAction","SEARCH_XREF_COMPETITOR","SearchXrefSponsorLoadingAction","SEARCH_XREF_SPONSOR_LOADING","SearchXrefCompetitorLoadingAction","SEARCH_XREF_COMPETITOR_LOADING","CheckDuplicateXrefLoadingAction","CHECK_DUPLICATE_XREF_LOADING","CreateSponsorProductFailedAction","CREATE_SPONSOR_PRODUCT_FAILED","CreateSponsorProductSucceedAction","CREATE_SPONSOR_PRODUCT_SUCCEED","SetAlternativesXrefLoadingAction","SET_ALTERNATIVES_XREF_LOADING","makeSelectSeriesListHasNextPage","makeSelectSeriesSearchOptions","makeSelectShowDraftSeriesOnly","makeSelectSortSeriesBy","makeSelectIsRecommendedSpecProductLoading","makeSelectRecommendedSpecProducts","makeSelectCategoryManfacturers","makeSelectAttributeOptions","makeSelectAttributeWhitelistMapWithSelectedCategoryId","makeSelectProductCategoryId","makeSelectCategoryToAttributeWhitelistMap","makeSelectProductCategory","makeSelectProductTypeIdToProductTypeMap","productTypeIdToProductTypeMap","makeSelectProductCategoriesAlphaSorted","productCategories","division","aCategory","bCategory","localeCompare","makeSelectProductTypeIdToProductCategoryReverseMap","reverseMapAcc","reverseMapCtx","productCategoryGroupList","productCategoryMap","productCategoryMapCtx","makeSelectProductCategoryFilters","CategoryDisplayTypeListItem","productCategoryFilters","CategoryDisplayType","DISPLAY_BY_CATEGORY","makeMatchingProducts","makeLastMatchingProducts","makeSelectMatchingProductPriceSummary","makeSelectMatchingProductForSpecificSeries","controlledSeriesId","makeSelectSeries","makeSelectSeriesSpecificFilterAttributes","makeSelectLastMatchingProductForSeries","matchingProducts","fallbackMatchingProduct","getAttributesIdentifierString","makeSelectDirectMatchingProductForSeries","makeSelectSeriesFilterAttributes","makeSelectLastMatchingProductForDirectSeries","blankMap","selectSeriess","makeSelectSeriesLoading","selectCategorySeries","serie","selectSeriesFilters","makeSelectCategorySpecificSeriesFilters","selectProductFilters","makeSelectSeriesSpecificFilters","makeSelectSelectedSeriesSpecificFilters","makeSelectSelectedSeriesId","selectedSeriesId","makeSelectSelectedSeriesSpecificInitSelections","makeSelectSelectedSeriesSpecificInitDisabledSelections","makeSelectSelectedSeriesSpecificFiltersKeys","seriesSpecificFilters","makeSelectSelectedSeriesSpecificValuesArray","filterArray","makeSelectSeriesAttributes","seriesSpecificProductFilters","makeSelectDirectSeriesAttributes","seriesFilters","selectFilteredSeries","selectSearchProductSelectionGroupForm","lastFetchedSeriesIds","nonEmptyFilters","filterKeys","manufacturerFiltersValues","lastFetchedSeriesId","seriesFetched","seriesElement","seriesAttributes","seriesAttributeKeys","seriesPassesAttributeFilter","passesFilter","filterSelection","seriesPassesManufacturerFilter","selectFilteredSeriesFilterAttibutes","attributeMap","_series","_attributeMap","updatedValues","_existingAttributeValueMap","aValue","PRODUCT_SELECTION_GROUP_FORM","makeSelectProductCategorySelect","makeSelectSeriesFilterInput","makeSelectCheckProductsAndAttributesLoading","makeSelectSelectingCategory","makeSelectQuickSearchFirmLoading","makeSelectSaveFirmCategoryLoading","makeSelectSeriesSearchOrderBy","sortType","isLoggedinUser","ungatedCurrency","specOrOfficeLocation","currencyBySpecOrOfficeRegion","mostSpecified","specRank","mostRecent","recommended","rank","priceHighToLow","minPrice","regionId","currency","order","priceLowToHigh","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","getOwnPropertyNames","arrLen","createUTC","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","flags","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LT","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","ww","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","shorthand","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","month","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","getParseRegexForToken","unescapeFormat","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","E","createLocal","gg","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","sign","offsetFromString","chunkOffset","matcher","cloneWithOffset","local","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","period","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","calendarFormat","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","keepOffset","toDate","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","_createForOfIteratorHelper","allowArrayLike","F","_e","normalCompletion","didErr","_e2","makeSelectSelectedFirmSeriesId","makeSelectSelectedFirmSeries","makeSelectFirmSeries","makeSelectFirmSeriesHasNextPage","makeSelectSearchingFirmSeries","makeSelectPimAttributeOptionsBySelectedAttributeId","selectedAttributeId","makeSelectIsFetchingAttributeOptions","makeSelectPimAttributes","makeSelectSearchedPimProducts","makeSelectSearchedPimProductsPackages","makeSelectSearchingPimProductsPackages","makeSelectParentSharedFirmProducts","makeSelectSearchingParentSharedFirmProducts","makeSelectSearchedPimProductsList","makeSelectPimProductsListSearchFilters","makeSelectPimProductsListSearchOptions","makeSelectSearchedFirmProductsList","makeSelectPendingCreatedFirmProducts","makeSelectSearchedFirmProductsListCount","makeSelectSearchedFirmProductsListHasNextPage","makeSelectSharedProductsList","makeSelectIsFetchingSharedProductsList","makeSelectIsFetchingFirmProducts","makeSelectIsInactiveProduct","makeSelectSearchedSeries","makeSelectSeriesHasNextPage","makeSelectSearchingSeries","makeSelectSelectedPimSeries","makeSelectSelectedPimProductId","makeSelectMandatoryAttributes","makeSelectRecommendedAttributes","makeSelectCombinedMandatoryRecommendedAttributes","makeSelectIsPublishing","makeSelectProduct","makeSelectIsFetchingProduct","makeSelectQuickSearchPimProductsLoading","makeSelectIsAddingPimSeriesDraft","makeSelectPureAttributes","makeSelectPureAttributesCount","makeSelectIsSearchingPureAttributes","makeSelectPureAttributesSecondary","makeSelectIsSearchingPureAttributesSecondary","makeSelectPureAttributeOptionsSecondary","makeSelectIsSearchingPureAttributeOptionsSecondary","makeSelectSelectedPureAttribute","makeSelectFirstPureAttributes","makeSelectSelectedPureAttributeOption","makeSelectPureAttributeOptions","makeSelectPureAttributeOptionsCount","makeSelectIsSearchingPureAttributeOptions","makeSelectMatchingProductChecking","makeSelectIsProductConfigurable","makeSelectIsProductConfigurableChecking","makeSelectPimMatchingProduct","makeSelectIsCreatingAttribute","makeSelectPimMatchingAttributes","makeSelectIsGettingSeriesDuplicateProducts","makeSelectSeriesDuplicateProducts","makeSelectHasUnconfigurableProducts","makeSelectFirmExportFieldsConfig","makeSelectIsExportingProducts","makeSelectIsImportingProducts","makeSelectImportProductsProgress","makeSelectIsDownloadingTemplate","makeSelectIsDownloadTemplateSuccess","makeSelectPrimaryMergeProduct","makeSelectIsMergingProducts","makeSelectPimIntegrationSeries","makeSelectIsSearchingPimIntegrationSeries","makeSelectIsFetchingFirmProduct","makeSelectIsFetchingPackage","makeSelectFirmProductManufacturers","makeSelectFirmProductCategories","makeSelectIsFetchingFirmProductCategories","makeSelectFirmProductCustomDataList","makeSelectBrandsToHidePrice","touched","warning","formControlLabelProps","checkedValue","uncheckedValue","customOverrides","O","valueAsArray","handleMultiChange","handleChange","selectFormValues","formName","selectForm","makeSelectReduxFormSyncErrors","makeSelectProductMedia","makeSelectQuotes","makeSelectQuotesLoading","makeSelectQuotePhases","makeSelectAppliableQuotePhases","quotePhases","getAppliableQuotePhases","makeSelectSelectedQuote","makeSelectSelectedQuoteId","selectedQuoteId","makeSelectQuote","makeSelectSections","makeSelectFormSectionsSize","makeSelectQuotePreview","makeSelectRevisions","makeSelectRevisionState","makeSelectPrintQuoteFiles","makeSelectSubmittingQuote","makeSelectSpecToQuoteLinkedListBySpecId","makeSelectIsCreatingSalesOrder","makeSelectCreateQuoteWithSpecToQuote","makeSelectIsLoadingSpecToQuoteLinkedList","makeSelectSpecToQuoteDraft","makeSelectIsSpecToQuote","makeSelectsSpecProductsRecommendations","specToQuoteLinkedList","specToQuote","makeSelectUniqueRecommendations","recommendations","productIdMap","filteredRecommendations","recommendation","makeSelectSpecProduct","sectionIndex","specProduct","makeSelectSpecProductsFromLinkedList","makeSelectLinkBidResponseQuote","makeSelectQuoteTemplate","makeSelectAllIsRequestingProduct","section","makeSelectHasIsRequestingProduct","makeSelectIsSelectedProductCount","_count","_productCount","makeSelectIsSelectedValidProductCount","makeSelectAllowXmlDownload","_default","LOADING_MODAL_ID","overlayProps","clearProps","customMessage","actionOnItem","kTrue","konst","asyncIterator","check","assignWithSymbols","called","kThrow","kReturn","thro","throw","return","isSagaIterator","logError","sagaStack","internalErr","createEmptyArray","wrapSagaDispatch","SAGA_ACTION","shouldTerminate","TERMINATE","shouldCancel","TASK_CANCEL","shouldComplete","createAllStyleChildCallbacks","parentCallback","totalCount","completed","completedCount","results","childCallbacks","chCbAtKey","isErr","getMetaInfo","getLocation","instrumented","SAGA_LOCATION","zeroBuffer","ringBuffer","overflowAction","pushIndex","popIndex","items","doubledLimit","none","sliding","expanding","initialSize","TAKE","PUT","ALL","RACE","CALL","CPS","FORK","JOIN","CANCEL","SELECT","ACTION_CHANNEL","CANCELLED","FLUSH","GET_CONTEXT","SET_CONTEXT","makeEffect","IO","combinator","detach","eff","detached","multicastPattern","multicast","notUndef","channel$1","undef","putResolve","effects","getFnCallDescriptor","fnDescriptor","spawn","taskOrTasks","SELF_CANCELLATION","_len5","_key5","actionChannel","pattern$1","buffer$1","cancelled","delayP","QUOTE_FORM_PATH","QUOTE_FORM_NAME","IMPORT_PRICING_FORM_PATH","IMPORT_PRICING_FORM_NAME","bidFormSelector","BID_FORM_NAME","initialBidFormSelector","quoteFormSelector","fallback","importPricingFormSelector","makeSelectExpandedProductInSection","makeSelectExcludedSection","makeSelectAddProductOrPackageToQuoteLoading","makeSelectPresentationalLabelColumn","makeSelectLabelColumnWithoutProduct","makeSelectSectionExpanded","makeSelectSectionLoading","makeSelectDndMenuPaths","makeSelectSectionToFocus","makeSelectFocusingSection","makeSelectUpdatePricingLoading","makeSelectProductRowOnFocus","INITIAL_STATE","makeSelectSectionsInPages","makeSelectMaxProductsPerPage","makeSelectMaxSectionsPerPage","maxProductsPerPage","maxSectionsPerPage","productsCount","sectionsCount","page","makeSelectSortProductsByManufacturer","makeSelectSourceQuote","makeSelectBidResponseId","makeSelectAutoSaveEnabled","makeSelectAutoSavePerformRequestId","makeSelectDefaultQuoteTemplate","makeSelectQuoteTemplateList","quoteTemplates","quoteDefaultTemplateId","ServerStyleSheets","sheetsManager","sheetsRegistry","SheetsRegistry","generateClassName","createGenerateClassName","StylesProvider","serverGenerateClassName","dangerouslySetInnerHTML","__html","withThemeCreator","WithTheme","innerRef","hoistNonReactStatics","ProjectLocationTypes","GET_COUNTRY_ADMIN_DIVISION","GetCountryAdminDivisionSucceededAction","GET_COUNTRY_ADMIN_DIVISION_SUCCEEDED","GET_COUNTRIES","GetCountriesSucceededAction","GET_COUNTRIES_SUCCEEDED","GetCountriesFailedAction","GET_COUNTRIES_FAILED","GET_PROVINCE","GetProvinceSucceededAction","GET_PROVINCE_SUCCEEDED","GetProvincesFailedAction","GET_PROVINCE_FAILED","GET_CITY","GetCitySucceededAction","GET_CITY_SUCCEEDED","GetCityFailedAction","GET_CITY_FAILED","ClearLocationInfo","CLEAR_LOCATION_INFO","ClearProvinceList","CLEAR_PROVINCE_LIST","ClearCityList","CLEAR_CITY_LIST","createStyles","iconContainer","defaultIcon","primaryTextColor","muiIcon","childrenJustify","childrenAlign","childWidth","drawerView","tooltip","childrenWidth","framesToPop","createLoadable","_ref$resolve","_render","onLoad","loadable","loadableConstructor","requireAsync","resolveConstructor","_getCacheKey","InnerLoadable","_React$Component","__chunkExtractor","requireSync","ssr","loadSync","addChunk","chunkName","isReady","_inheritsLoose","getDerivedStateFromProps","componentDidMount","loadAsync","triggerOnLoad","componentDidUpdate","prevState","componentWillUnmount","safeSetState","loadedModule","Loadable","getCacheKey","getCache","setCache","forwardedRef","suspense","propFallback","cachedResult","EnhancedInnerLoadable","extractor","lazy","_createLoadable","_createLoadable$1","loadable$1","lazy$1","loadable$2","lib","createNamedContext","Router","_isMounted","_pendingLocation","staticContext","computeRootMatch","MemoryRouter","createMemoryHistory","Lifecycle","onMount","onUpdate","onUnmount","Prompt","_ref$when","when","context$$1","block","release","generatePath","compile","pretty","Redirect","computedMatch","_ref$push","createLocation","prevLocation","locationsAreEqual","cache$1","cacheCount$1","matchPath","_options$exact","_options$strict","_options$sensitive","_compilePath","compilePath$1","Route","isEmptyChildren","addLeadingSlash","stripBasename","basename","createURL","createPath","staticHandler","StaticRouter","handlePush","navigateTo","handleReplace","handleListen","handleBlock","_this$props$basename","_this$props$context","addBasename","_this$props2$basename","_this$props2$context","_this$props2$location","createHref","go","goBack","goForward","Switch","wrappedComponentRef","remainingProps","AtsSvg404","xmlns","viewBox","animation","offsetPath","offsetRotate","rx","ry","AtsSvgAtWork","shadowOpacity","maxHeight","stroke","strokeMiterlimit","strokeWidth","strokeLinecap","strokeLinejoin","fillRule","clipRule","AtsSvgBuildSizer","clipPath","AtsSvgBulkEdit","AtsSvgEdit","backgroundOpacity","foregroundColor","foregroundOpacity","AtsSvgXref","filterUnits","dx","dy","stdDeviation","x1","y1","x2","y2","stopColor","stopOpacity","xlinkHref","AtsSvgPackage","fillOpacity","AtsSvgDownload","AtsSvgDrawing","AtsSvgMove","AtsSvgPreparingDoc","WebkitAnimation","AtsSvgSpec","AtsSvgEmptyProductList","surfaceA","surfaceB","surfaceC","surfaceD","mask","AtsSvgDrawingCompleted","clip","board","checkMark","AtsSvgEmptyDashboard","colorOpacity","maskContentUnits","maskUnits","strokeDasharray","AtsSvgProduct","AtsSvgSeries","AtsSvgContact","AtsSvgStep1","fontFamily","fontStretch","letterSpacing","AtsSvgStep2","AtsSvgTestProject","AtsSvgPushpinRounded","preserveAspectRatio","AtsSvgEmptyFeaturesOptions","xmlnsXlink","AtsSvgEmptyAttachment","AtsSvgTag","AtsSvgCreateNewProject","AtsSvgCategory","points","AtsSvgAltXrefLogo","AtsSvgUpload","AtsSvgDiscontinued","glyph","outlineColor","AtsSvgProductDiscontinued","AtsSvgPackageDiscontinued","cancellableCallApi","controller","AbortController","signal","abort","AtsApiContext","useAtsApi","sourceKeys","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","commonjsGlobal","humps","createCommonjsModule","_processKeys","_isObject","_isDate","_isRegExp","_isBoolean","_isFunction","_isArray","_isNumerical","pascalize","camelized","decamelize","separateWords","_processor","depascalize","camelizeKeys","decamelizeKeys","pascalizeKeys","depascalizeKeys","styleToObject","PRODUCTION","objectWithKey","normalizeIconArgs","icon$$1","FontAwesomeIcon","iconArgs","maskArgs","iconLookup","_classes","spin","pulse","fixedWidth","inverse","listItem","rotation","classList","renderedIcon","abstract","extraProps","convertCurry","propTypes","PropTypes","oneOfType","oneOf","mixins","attrs","_extraProps$style","existingStyle","injectReducerFactory","createReducer","hoistNonReactStatics1","hoistNonReactStatics2","WrappedComponent_","contextType","StoreContext","injectors","injectReducer","useWillMount","willMount","RESTART_ON_REMOUNT","DAEMON","ONCE_TILL_UNMOUNT","allowedModes","checkKey","checkDescriptor","saga","injectSagaFactory","newDescriptor","hasSaga","ejectSagaFactory","injectSaga","ejectSaga","getKey","serializeForm","localState","deserializeForm","serializedFormState","serialize2","stateCtx","stateKey","subState","matchesFloppy","ATS_REDUCER_MOUNT_POINT","ctx","deserialize2","parsedPayload","entryPayload","removeTZ","dateTime","primaryColor","dark","formHelperProps","dateType","DATE_TYPE","yearMonthDay","timezone","getHours","getMinutes","getSeconds","getMilliseconds","yearMonth","convertDateToISO","momentTimeZone","tz","handleBlur","warningMessage","showError","active","showWarning","formHelperContent","MomentUtils","INPUT_TYPE","maskChar","leftArrowIcon","rightArrowIcon","keyboardIcon","InputLabelProps","_props$disabled","_props$disableElevati","disableElevation","_props$disableFocusRi","disableFocusRipple","endIconProp","_props$fullWidth","_props$size","startIconProp","startIcon","_props$type","focusRipple","fade","textPrimary","textSecondary","outlined","outlinedPrimary","outlinedSecondary","contained","getContrastText","A100","disabledBackground","containedPrimary","containedSecondary","textSizeSmall","pxToRem","textSizeLarge","outlinedSizeSmall","outlinedSizeLarge","containedSizeSmall","containedSizeLarge","sizeSmall","sizeLarge","iconSizeSmall","iconSizeMedium","iconSizeLarge","hystersisOpen","hystersisTimer","_props$arrow","arrow","_props$disableFocusLi","disableFocusListener","_props$disableHoverLi","disableHoverListener","_props$disableTouchLi","disableTouchListener","_props$enterDelay","enterDelay","_props$enterTouchDela","enterTouchDelay","idProp","_props$interactive","interactive","_props$leaveDelay","leaveDelay","_props$leaveTouchDela","leaveTouchDelay","openProp","_props$placement","PopperProps","Grow","childNode","setChildNode","_React$useState2","arrowRef","setArrowRef","ignoreNonTouchEvents","closeTimer","enterTimer","leaveTimer","touchTimer","_useControlled","useControlled","controlled","_useControlled2","openState","setOpenState","_React$useState3","defaultId","setDefaultId","handleEnter","childrenProps","onMouseOver","removeAttribute","_useIsFocusVisible","useIsFocusVisible","isFocusVisible","onBlurVisible","focusVisibleRef","_React$useState4","childIsFocusVisible","setChildIsFocusVisible","shortest","handleLeave","handleUseRef","handleFocusRef","handleOwnRef","setRef","ReactDOM","findDOMNode","handleRef","shouldShowNativeTitle","onTouchStart","onTouchEnd","interactiveWrapperListeners","popperOptions","modifiers","enabled","Fragment","popper","popperInteractive","popperArrow","placementInner","TransitionPropsInner","tooltipArrow","wordWrap","fontWeightMedium","fontWeightRegular","tooltipPlacementTop","tooltipPlacementBottom","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","_super","DEBUG_BUILD","makeSelectDivisionName","makeSelectAdminDivisions","createDroppableMasterDrawingId","createDraggableMasterDrawingId","masterId","originListType","masterName","isDraggableMasterDrawingId","draggableId","parseDraggableMasterDrawingId","createDroppableSpecListId","projectName","isDroppableSpecListId","droppableId","createDroppableShortSpecListId","isDroppableShortSpecListId","createDraggableSpecId","createDraggableListItem","isDraggableListItem","createDroppableTemplateDrawingId","createDraggableTemplateDrawingId","templateId","templateName","isDraggableTemplateDrawingId","parseDraggableTemplateDrawingId","createDraggableIdForDragSelectedDrawing","drawingIds","isDraggableIdForDragSelectedDrawing","parseDraggableIdForDragSelectedDrawing","createDraggableIdForDragAllSelectedPinnedDrawing","sourceType","isDraggableIdForDragAllSelectedPinnedDrawing","parseDraggableIdForDragAllSelectedPinnedDrawing","checkIsDrawingChecked","drawingConfig","getFormattedCopyDrawingsForBE","projectSpecDetailConfig","_acc","_curr","handleProjectClickCopyTo","project","COPY_MODAL","sourceSpecs","amplitudeSourceData","sourceId","totalDrawings","getSelectedDrawings","totalProducts","getSelectedProducts","Statuses","SvgIcon","emptyDefaultLocation","makeSelectLocationPathname","makeSelectLocationSearch","makeSelectLocationHash","decomposeColor","re","colors","hexToRgb","marker","recomposeColor","getContrastRatio","foreground","lumA","getLuminance","lumB","rgb","hslToRgb","coefficient","darken","lighten","reactRouterLink","StyledTableCell","TableCell","LinkCell","linkPath","handleOnClick","refresh","textCellCell","textCellText","TextCell","typographyProps","setAnchorEl","quoteCount","Menu","goQuote","trackedProjects","iconButtonRoot","tracked","typeId","customersTooltip","firstNamePath","lastNamePath","organizationPath","contactsDisplay","customerIndex","org","contactName","DRAWER_ID","listText","tooltipWrapper","overridePath","isLink","specsDisplay","listData","computeStyle","gpuAcceleration","RegionCell","RegionFlags","inlineMore","MultiTextCellCell","MultiTextCellText","fromJSBase","preConverter","defaultPreConverter","preConvertedValue","isBase","ROUNDING_OPTIONS","DECIMAL_PRECISION","TaskActionTypes","UpdateCriterionAndGetTaskAction","UPDATE_CRITERION_STATUS_AND_GET_TASK","UpdateCriteriaStatusesAndGetTaskAction","UPDATE_CRITERIA_STATUSES_AND_GET_TASK","GetTaskByIdAction","GET_TASK_BY_ID","CreateOrUpdateTaskAction","CREATE_OR_UPDATE_TASK","DeleteCriteriaAction","DELETE_CRITERIA","DeleteCriteriaSuccceededAction","DELETE_CRITERIA_SUCCEEDED","EditCriteriaAction","EDIT_CRITERIA","EditCriteriaSucceededAction","EDIT_CRITERIA_SUCCEEDED","UpdateCriteriaStatusSucceededAction","UPDATE_CRITERIA_STATUS_SUCCEEDED","UpdateCriteriaStatusAction","UPDATE_CRITERIA_STATUS","AddCriteriaAction","ADD_CRITERIA","AddCriteriaSucceededAction","ADD_CRITERIA_SUCCEEDED","DeleteTaskAction","DELETE_TASK","EditTaskSucceededAction","EDIT_TASK_SUCCEEDED","EditTaskAction","EDIT_TASK","SelectTaskIdAction","SELECT_TASK_ID","AddTaskAction","ADD_TASK","GetTasksSucceededAction","GET_TASKS_SUCCEEDED","TagEntityAction","TAG_ENTITY","UnTagEntityAction","UNTAG_ENTITY","ResetTasksAction","RESET_TASKS","LocationTypes","GetRegionsAction","GET_REGIONS","GetRegionsSucceededAction","GET_REGIONS_SUCCEEDED","GetProvincesAction","GET_PROVINCES","GetProvincesSucceededAction","GET_PROVINCES_SUCCEEDED","GET_PROVINCES_FAILED","GetCitiesAction","GET_CITIES","GetCitiesSucceededAction","GET_CITIES_SUCCEEDED","GetCitiesFailedAction","GET_CITIES_FAILED","SaveCountryNameAction","SAVE_COUNTRY_NAME","SaveProvinceNameAction","SAVE_PROVINCE_NAME","SaveCityNameAction","SAVE_CITY_NAME","GetRegionsListAction","GET_REGIONS_LIST","GetRegionsListSucceededAction","GET_REGIONS_LIST_SUCCEEDED","SetSelectedRegion","SET_SELECTED_REGION","VALIDATION_HACK_FIELD","withReduxFormValidationTranslation","hocProps","hocSyncErrors","getFormSyncErrors","useMemoOne","getResult","inputs","isFirstRun","committed","newInputs","lastInputs","areInputsEqual","_setPrototypeOf","getRect","center","expand","expandBy","shrink","shrinkBy","noSpacing","createBox","borderBox","_ref2$margin","_ref2$border","_ref2$padding","marginBox","paddingBox","contentBox","raw","original","shiftBy","shifted","withScroll","scroll","pageXOffset","pageYOffset","calculateBox","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","getBox","el","getBoundingClientRect","getComputedStyle","rafSchd","frameId","wrapperFn","requestAnimationFrame","cancelAnimationFrame","bindEvents","bindings","sharedOptions","unbindings","shared","fromBinding","eventName","unbind","RbdInvariant","ErrorBoundary","callbacks","onWindowError","getCallbacks","isDragging","tryAbort","setCallbacks","componentDidCatch","withLocation","isInHomeList","startPosition","endPosition","withCombine","combine","returnedToStart","preset","point1","point2","point","patch","line","otherValue","distance","closest","offsetByPosition","getCorners","frame","shouldClipSubject","subject","executeClip","pageMarginBox","getSubject","withPlaceholder","axis","scrolled","displacement","increased","increasedBy","increase","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","_Object$values","toDroppableMap","memoizeOne","droppables","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","draggable","tryGetDestination","impact","tryGetCombine","removeDraggableFromList","isHomeOf","noDisplacedBy","emptyGroups","invisible","visible","noImpact","displaced","displacedBy","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","crossAxisLine","crossAxisStart","crossAxisEnd","crossAxisSize","horizontal","isVisible","toBeDisplaced","viewport","withDroppableDisplacement","isVisibleThroughFrameFn","displacedTarget","getDroppableDisplaced","isVisibleInDroppable","isVisibleInViewport","isPartiallyVisible","isTotallyVisible","getDisplacementGroups","afterDragging","forceShouldAnimate","getTarget","shouldAnimate","getShouldAnimate","goAtEnd","insideDestination","inHomeList","newIndex","indexOfLastItem","getIndexOfLastItem","calculateReorderImpact","withoutDragging","sliceFrom","didStartAfterCritical","afterCritical","effected","moveToNextIndex","isMovingForward","previousImpact","wasAt","_newIndex","currentIndex","proposedIndex","firstIndex","fromReorder","isCombineEnabled","combineId","combineWithIndex","fromCombine","whenCombining","combineWith","displaceBy","isDisplaced","getCombinedItemDisplacement","distanceFromStartToBorderBoxCenter","box","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","distanceFromEndToBorderBoxCenter","whenReordering","draggablePage","moveInto","goIntoStart","closestAfter","withDisplacement","getPageBorderBoxCenterFromImpact","withoutDisplacement","getResultWithoutDroppableDisplacement","scrollViewport","getDraggables","ids","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","withViewportDisplacement","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","_ref$onlyOnMainAxis","onlyOnMainAxis","changeNeeded","isTotallyVisibleOnAxis","moveToNextPlace","previousPageBorderBoxCenter","previousClientSelection","getImpact","closestId","withoutDraggable","indexOfClosest","moveToNextCombine","clientSelection","scrollJumpRequest","cautious","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","withDroppableScroll","tryGetVisible","speculativelyIncrease","getKnownActive","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getDisplacedBy","withMaxScroll","addPlaceholder","placeholderSize","requiredGrowth","availableSpace","needsToGrowBy","dimension","getRequiredGrowthForPlaceholder","added","oldFrameMaxScroll","maxScroll","newFrame","moveCrossAxis","isOver","isBetweenSourceClipped","candidates","activeOfTarget","isBetweenDestinationClipped","isWithinDroppable","getBestCrossAxisDroppable","distanceToA","distanceToB","getClosestDraggable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","moveToNewDroppable","whatIsDraggedOver","moveInDirection","isActuallyOver","getDroppableOver","dimensions","isMainAxisMovementAllowed","home","critical","isMovingOnMainAxis","borderBoxCenter","_state$dimensions","selection","isMovementAllowed","phase","isPositionInFrame","getDroppableOver$1","pageBorderBox","childCenter","isContained","isStartContained","isEndContained","startCenter","sorted","getFurthestAway","offsetRectByPosition","getIsDisplaced","getDragImpact","pageOffset","destinationId","pageBorderBoxWithDroppableScroll","targetRect","targetStart","targetEnd","childRect","didStartAfterCritical$1","getCombineImpact","atIndex","getReorderImpact","patchDroppableMap","updated","clearUnusedPlaceholder","lastDroppable","oldMaxScroll","removePlaceholder","forcedClientSelection","forcedDimensions","forcedViewport","forcedImpact","newImpact","withUpdatedPlaceholders","cleaned","patched","recomputePlaceholders","recompute","getDraggables$1","getClientBorderBoxCenter","refreshSnap","movementMode","needsVisibilityCheck","getLiftEffect","insideHome","inVirtualList","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","droppableScrollChange","getFrame","moved","offset$1","initialWindowScroll","offsetDraggable","isSnapping","postDroppableChange","isEnabledChanging","patchDimensionMap","removeScrollJumpRequest","idle","shouldFlush","_action$payload","isWindowScrollAllowed","isFixedOnPage","_getLiftEffect","onLiftImpact","_extends3","published","withScrollChange","modified","updatedAdditions","removals","wasOverId","wasOver","draggingState","isWaiting","publishWhileDraggingInVirtual","_clientSelection","_action$payload2","_action$payload3","_id","_target","_action$payload4","_id2","_target2","_updated","_newScroll","_viewport","_result2","_action$payload5","dropDuration","newHomeClientOffset","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","move","moveUp","moveDown","moveRight","moveLeft","completeDrop","dropAnimationFinished","curves","combining","outOfTheWayTiming","fluid","snap","timing","outOfTheWay","moveTo","isCombining","minDropTime","maxDropTime","dropTimeRange","drop$1","_getDropImpact","lastImpact","didDropInsideDroppable","getDropImpact","newClientCenter","getNewHomeClientOffset","distance$1","getDropDuration","animateDrop","dropPending","getWindowScroll","getScrollListener","onWindowScroll","passive","capture","isActive","stop","scrollListener","shouldEnd","getAsyncMarshal","shallow","withTimings","getDragStart","responder","announce","getDefaultMessage","willExpire","wasCalled","isExpired","timeoutId","getExpiringAnnounce","responders","getResponders","publisher","asyncMarshal","dragging","onDragEnd","beforeCapture","onBeforeCapture","beforeStart","onBeforeDragStart","lastCritical","lastLocation","lastCombine","onDragStart","hasCriticalChanged","isDraggableEqual","isDroppableEqual","isCriticalEqual","hasLocationChanged","hasGroupingChanged","isCombineEqual","onDragUpdate","getPublisher","dropAnimationFinish","dropAnimationFlushOnScroll","pendingDrop","postActionState","composeEnhancers","marshal","dimensionMarshal","focusMarshal","styleMarshal","autoScroller","createStore$1","dropping","resting","stopPublishing","dimensionMarshalStopper","scrollOptions","shouldPublishImmediately","_marshal$startPublish","startPublishing","lift$1","shouldStop","autoScroll","isWatching","tryRecordFocus","tryRestoreFocusRecorded","tryShiftRecord","getMaxScroll","scrollHeight","scrollWidth","getDocumentElement","doc","getMaxWindowScroll","clientHeight","getInitialPublish","registry","getViewport","windowScroll","getAllByType","getDimensionAndWatchScroll","getDimension","shouldPublishUpdate","getById","createDimensionMarshal","staging","collect","_staging","_Object$keys","getScrollWhileDragging","publish","createPublisher","subscriber","dragStopped","canStartDrag","scrollWindow","scrollBy","getScrollableDroppables","getBestScrollableDroppable","_dimension","getScrollableDroppableOver","percentage","stopDampeningAt","accelerateAt","getPercentage","startOfRange","endOfRange","stopAt","distanceToEdge","dragStartTime","shouldUseTimeDampening","startScrollingFrom","maxScrollValueAt","percentageFromMaxScrollValueAt","getValueFromDistance","proposedScroll","runTime","_Date$now","betweenAccelerateAtAndStopAtPercentage","dampenValueByTime","getScrollOnAxis","distanceToEdges","getDistanceThresholds","clean$2","getScroll","limited","isTooBigVertically","isTooBigHorizontally","adjustForSizeLimits","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","canScrollDroppable","scroll$1","_change","getWindowScrollChange","getDroppableScrollChange","createJumpScroller","scrollDroppableAsMuchAsItCan","getDroppableOverlap","whatTheDroppableCanScroll","scrollWindowAsMuchAsItCan","getWindowOverlap","whatTheWindowCanScroll","droppableRemainder","windowRemainder","moveByOffset","createAutoScroller","fluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","_dragging","wasScrollNeeded","fakeScrollCallback","createFluidScroller","jumpScroll","dragHandle","prefix$1","contextId","scrollContainer","getStyles","getHead","querySelector","createStyleEl","nonce","setAttribute","useStyleMarshal","getSelector","dragHandle$1","grabCursor","always","dropAnimating","userCancel","getStyles$1","alwaysRef","dynamicRef","setDynamicStyle","textContent","setAlwaysStyle","dynamic","appendChild","removeChild","getWindowFromEl","ownerDocument","defaultView","isHtmlElement","HTMLElement","findDragHandle","possible","getAttribute","createRegistry","subscribers","findDraggableById","findDroppableById","unregister","findById","clean","getBodyElement","visuallyHidden","AppContext","useDev","useHook","useDevSetupWarning","useStartupValidation","usePrevious","_preventedKeys","preventedKeys","preventStandardKeyEvents","keyCode","supportedEventName","_scrollJumpKeys","idle$1","getCaptureBindings","getPhase","setPhase","clientX","clientY","fluidLift","shouldBlockNextClick","shouldRespectForcePress","noop$1","scrollJumpKeys","getDraggingBindings","idle$2","interactiveTagNames","textarea","optgroup","video","audio","isAnInteractiveElement","tagName","parentElement","isEventInInteractiveElement","getBorderBoxCenterPosition","supportedMatchesName","Element","closestPonyfill","closest$1","findClosestDragHandleFromEvent","_isActive","expected","isLockActive","shouldWarn","canStart","lockAPI","isClaimed","tryStart","forceSensorStop","sourceEvent","draggable$1","findDraggable","canDragInteractiveElements","lock","claim","getShouldRespectForcePress","tryDispatchWhenDragging","getAction","finish","cleanup","lift","liftActionArgs","move$1","snapLift","defaultSensors","api","phaseRef","unbindEventsRef","startCaptureBinding","defaultPrevented","ctrlKey","metaKey","shiftKey","altKey","findClosestDraggableId","tryGetLock","startPendingDrag","preventForcePressBinding","findOptionsForDraggable","canGetLock","listenForCapture","bindCapturingEvents","preDrag","isCapturing","touches","longPressTimerId","unbindTarget","hasMoved","_event$touches$","force","shouldRespect","getHandleBindings","unbindWindow","getWindowBindings","startDragging","useSensorMarshal","_ref4","customSensors","enableDefaultSensors","useSensors","abandon","newLock","tryAbandon","tryAbandonLock","forceStop","tryGetClosestDraggableIdFromEvent","tryReleaseLock","isLockClaimed","getStore","lazyRef","App","sensors","liftInstruction","lazyStoreRef","lastPropsRef","createResponders","getId","_Object$assign","useAnnouncer","liftInstructionId","getId$1","useLiftInstruction","lazyDispatch","marshalCallbacks","useRegistry","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","tryGiveFocus","tryGiveFocusTo","activeElement","redirectTo","focused","useFocusMarshal","tryResetStore","getCanLift","getIsMovementAllowed","appContext","canLift","instanceCount","DragDropContext","isEqual$1","isScroll","isAuto","isEither","overflowY","isElementScrollable","getClosestScrollable","getScroll$1","scrollLeft","scrollTop","getIsFixed","closestScrollable","isDropDisabled","targetRef","getClient","frameClient","scrollSize","getDroppableDimension","immediate","delayed","getListenerOptions","useRequiredContext","useUniqueId","getClosestScrollableFromDrag","noop$2","getStyle","isAnimatingOpenOnMount","animate","getSize","flexShrink","Placeholder$1","animateOpenTimerRef","tryClearAnimateOpenTimer","onTransitionEnd","setIsAnimatingOpenOnMount","onSizeChangeEnd","propertyName","DroppableContext","AnimateInOut","_React$PureComponent","PureComponent","zIndexOptions","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isDropAnimating","getStyle$1","getShouldDraggingAnimate","getDraggingStyle","shouldAnimateDisplacement","useDraggablePublisher","getDraggableRef","computedStyles","getDimension$1","publishedRef","isFirstPublishRef","preventHtml5Dnd","isStrictEqual","whatIsDraggedOverFromResult","getSecondarySnapshot","combineTargetFor","dropAnimation","draggingOver","atRest","snapshot","ConnectedDraggable","draggingSelector","memoizedOffset","getMemoizedSnapshot","getMemoizedProps","_draggingOver","_combineWith","getCombineWithFromResult","curve","scale","getDraggableSelector","secondarySelector","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","getSecondarySelector","getRef","_useRequiredContext","_useRequiredContext2","dropAnimationFinishedAction","dragHandleProps","onMoveEnd","draggableProps","rubric","PrivateDraggable","isUsingCloneFor","PublicDraggable","isDragDisabled","disableInteractiveElementBlocking","isMatchingType","getDraggable","mapDispatchToProps$1","updateViewportMaxScroll","ignoreContainerClipping","renderClone","getContainerForClone","ConnectedDroppable","idleWithAnimation","shouldAnimatePlaceholder","isDraggingOver","draggingOverWith","draggingFromThisWith","isUsingPlaceholder","useClone","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","_snapshot","_completed","wasCombining","isHome","droppableRef","placeholderRef","getDroppableRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","whileDraggingRef","previousRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","updateScroll","scheduleScrollUpdate","onClosestScroll","useDroppablePublisher","droppableProps","droppableContext","draggableProvided","draggableSnapshot","createPortal","getClone","DisplayDrawingType","CategorySpecificSeriesFilterKey","CATEGORY_SPECIFIC_SERIES_FILTER_LABEL_KEYS","motorSize","psychrometrics","DebugRender","delayedRender","clonedChildren","includeOriginal","requiredRoles","Debug","debugLevel","makeSelectDebugState","__VERSION__","ApiClient","baseURL","tokenKey","headers","fetch","getHeader","json","success","apiData","PriceExpansionPanel","regionTitle","initialCurrency","setValue","TabPanel","tabValue","summary","panelDetails","Tabs","indicatorColor","textColor","Tab","half","isPoaContainer","FieldSwitch","priceType","DrawerTextFieldRow","removeIconSpace","hiddenInput","fileName","deleteMessageContainer","checkIcon","PRODUCT_DRAWER_EDIT_FORM","mediaKey","accept","linkedProductMedia","disabledRemoveTooltip","atsMediaTooltip","mediaDeleteMessage","localeRegion","displayMediaDeleteMessage","setDisplayMediaDeleteMessage","formFile","isOverride","fileId","linkedProductMediaKeyFileId","hasValidFile","isAtsMedia","disabledTooltip","useFileUpload","fileState","uploadedFile","loadingPercentage","isUploading","uploadErr","setUploadErr","setFile","prevIsOverride","prevLocaleRegion","transformedFile","filename","mimeType","Box","LinearProgress","ERROR_TYPE","htmlFor","fileType","formURL","mutatedFileType","newFiles","noMargin","linkDialog","uploadTooltip","openLinkTooltip","linkLabel","linkPlaceholder","linkedProductMediaKeyUrl","isAttached","setIsAttached","setURL","errorText","setErrorText","Dialog","DialogContent","TextField","FormHelperTextProps","DialogActions","isURL","MSPIM_SERVICE","DUPLICATE_CHECK_ENDPOINT","buildDuplicateFirmProductCheckBody","itemNumber","firmProductId","trimmedProductNumber","trimmedItemNumber","getDuplicateFromResponse","searchDuplicateFirmProduct","confirmationButton","LinkConfirmationDialog","LinkConfirmationDialogProps","onConfirm","autoFocus","deleteDialog","textContainer","checkbox","InheritenceSettingDialog","InheritenceSettingDialogProps","inheritenceSetting","onSave","setting","setSetting","settingList","images","FormControlLabel","newSetting","UnlinkConfirmationDialog","UnLinkConfirmationDialogProps","ComponentToEditRowRendererMap","validation","dropdown","DrawerRow","FieldAutocomplete","renderOption","RenderRowComponent","MANUFACTURER_CUTSHEET_MEDIA_KEY","SHOP_DRAWING_MEDIA_KEY","OPERATION_GUIDE_MEDIA_KEY","INSTALLATION_MANUAL_MEDIA_KEY","WARRANTY_MEDIA_KEY","mediaLocaleRegions","UOM","addIsOverrideTrueToPrice","priceMap","region","currencyCtx","defaultInheritenceSetting","ProductDrawerEdit","newCategoryInputRef","duplicateCheckController","isFetchingSavedLinkedProduct","savedLinkedProduct","productData","isSaveFirmCategoryLoading","isChildFirm","getLinkedProduct","vendorQuoteProduct","searchFirmProducts","searchedFirmProductList","vendorQuoteProductPrice","isFetchingFirmProducts","quoteRegion","linkedProduct","overrideValues","prevInheritenceSetting","prevLinkedProduct","handleShare","QuoteConnectUtil","getProductNumber","firmProductUpc","productUpc","Manufacturer","foundManufacturer","Category","foundCategory","firmProductPrice","currencyKeys","listValue","sellValue","sell","costValue","cost","targetRegionData","isPoa","updatedPrice","imageId","setLinkedProductMedia","setLinkedProduct","newCategoryString","isLinked","removePhoto","overrideValuesDropzone","handleDuplicateProceed","pendingSubmit","duplicateProduct","onSubmit","skipDuplicateCheck","handleDuplicateCancel","closeOnSuccuss","addToQuote","addToImportModal","isSuperFirm","updateQuoteProductRow","firmProductCustomDataList","callbackWithProduct","sharedProductDeltas","isCheckingDuplicate","duplicate","saveButtonDisabled","Xhr","imageArray","linkedProductId","isChildFirmWithSharedProduct","deltas","_deltas","newCustomData","formCustomDataKey","customData","datakey","sharedProduct","productSharedWithMe","isProductSharedWithFirm","closeDrawer","toggleSection","isCollapsedPriceRow","isCollapsedAttachmentRow","isCollapsedErpRow","productToBeLinkedOrShared","immutableproductToBeLinkedOrShared","handleLink","linkConfirmationDialogOpen","handleUnlink","resetIsPoa","cutsheet","shopDrawing","operationGuide","installationManual","unlinkConfirmationDialogOpen","resetIsPoaPrice","regionPrice","currencyPrice","regionPricingData","pricingRegions","productPrices","priceKeys","regionLabel","selectedPrice","_maxStringLength","handleOnKeywordChange","keyword","includeSpacesError","handleKeywordFieldOnPressEnter","prevKeywords","newKeywords","handleOnKeywordDelete","prevKeywordsArr","retainLinkedImage","hasAtsImage","handleOnNewCategoryChange","handleOnAddNewCategoryClick","showCategoryTextField","handleOnCloseClick","handleOnDoneClick","saveFirmCategory","newCategory","onSaveSetting","newInheritenceSetting","inheritenceSettingDialogOpen","PopperMy","ClickAwayListener","onClickAway","localName","autoCompletePopperOpen","PaperComponent","duplicatedCategory","paperComponent","inputRef","onMouseDown","newCategoryInput","newCategoryInputFont","endAdornment","CircularProgress","selectedMediaRegion","EN_US","saveAnchorEl","getCategories","getManufacturers","getRegions","loggedInUserOfficeLocation","EN_CA","handleSubmit","quickSearchSharedProducts","pimProducts","isLoadingQuickSearch","sharedProducts","isFetchingSharedProducts","toggleDrawer","hasFirmAdminAclRole","hasOMShopDrawingAcl","isFetchingFirmProduct","selectedCurrency","isExistingFirmProduct","productNumberLinkId","displayDetailSaveMenuForQuote","linkProductId","isChildFirmWithShareableProductLoaded","usingOverrideImage","uom","DrawerEditHeader","fetchingLinked","uploadPhoto","bottonMargin","FieldDropzone","uploadFileValidation","initialImage","renderSuggestText","suggestion","infoIcon","searchPlaceHolder","_imageId","currencyForTooltip","listPrice","rawLastUpdated","lastUpdatedPrice","utcToLocal","rows","tooltipContent","borderCollapse","rowIndex","cell","cellIndex","wordBreak","zeroWidthAndGrow","searchResultNumberText","searchResultDescriptionText","customSelectStyles","menu","defaultStyles","singleValue","PopperComponent","multiLine","Collapse","collapseErp","entered","collapseEntered","erp","collapseAttachment","collapse","Chip","firmChip","onKeyPress","onDelete","keywordChip","cta","_formValues","DuplicateProductDialog","onCancel","onProceed","optionComponentRoot","optionLabel","initialProductData","manufacturersList","structuredProduct","transformedCustomData","uomValue","transformValuesForInitialValues","formValueSelector","isModalOpen","PRODUCT_DRAWER_ID","makeSelectOfficePricingRegions","regionType","onSuccess","reduxForm","destroyOnUnmount","enableReinitialize","priceData","drawerIsExpanded","getDrawerExpanded","setExpanded","sync","DRAWER_EXPANDED_EVENT","useDrawerExpanded","renderTypeLabel","useSpecPoaTooltip","renderTypeValue","renderPrices","priceTypes","CountryFlag","canFlag","usFlag","PRICING_DATE_FIELDS","PRICING_USER_FIELDS","costLastUpdatedAt","listLastUpdatedAt","sellLastUpdatedAt","PRICING_FIRM_ID_FIELDS","CURRENCIES","ProductDrawerView","pdfEditorOpen","handleDelete","deleteFirmProduct","propsFromRedux","deleteAndSearch","getMediaDataByLocaleRegionOrFallback","productMap","mediaType","getDataType","loginUserOfficeLocation","getFileRegionFlag","languageCode","hasFeatStockLevelAclRole","onProductUpdated","hasFeatCreateShopDrawingAcl","imageSrc","imgData","imgComponentProps","imgId","imgSize","imgProps","undefinedPNG","creator","ats","rawModifiedDate","rawCreatedDate","updatedAt","updatedBy","dateField","userName","isAts","getMostRecentPricingUpdate","pricingUpdatedAt","pricingUpdatedBy","isCutsheetOverride","cutsheetReferenceProduct","isShopDrawingOverride","shopDrawingReferenceProduct","shopDrawingFileName","shopDrawingFileId","shopDrawingLanguageCode","shopDrawingFileLink","generateFileLink","isOperationGuideOverride","operationGuideReferenceProduct","operationGuideFileName","operationGuideFileId","operationGuideLanguageCode","operationGuideFileLink","operationGuideURL","isInstallationManualOverride","installationManualReferenceProduct","installationManualFileName","installationManualFileId","installationManualLanguageCode","installationManualFileLink","installationManualURL","isWarrantyOverride","warrantyReferenceProduct","warrantyFileName","warrantyFileId","warrantyLanguageCode","warrantyFileLink","warrantyURL","manufacturerCutsheetFileName","manufacturerCutsheetFileId","manufacturerCutsheetLanguageCode","manufacturerCutsheetFileLink","manufacturerCutsheetURL","hasPdfCutsheet","currentStatus","statusLabelPath","SERIES_STATUS_VALUE_MAP","currentStatusMap","seriesStatusList","currentStatusClass","null","stockRegions","stockRegionIds","disableDuplicate","createdBySameFirm","currentlySharedWithMe","displayPdfEditor","DrawerViewHeader","imageProps","menuItems","editAction","copyAction","deleteAction","otherElements","chipContainer","chip","productInfoItem","fileContainer","underline","rel","createShopDrawingButton","stockRegionId","targetedStock","regionName","stockable","qty","stockItem","PDFEditorModal","pdfProducts","fileSrc","onUploaded","dropDownContainer","mainPrimaryColor","popover","__1","__2","__3","__4","__6","PRODUCT_CONTENT_EDIT_KEY","ProductDrawer","resetLinkedProduct","_contentString","modalProps","initialData","SUCCESS_DRAWER","SuccessDrawer","getCustomerDiscounts","customerId","ex","isModifiedEvent","__RouterContext","WINDOW","getRegisteredStyles","registered","registeredStyles","rawClassName","insertStyles","serialized","isStringTag","inserted","sheet","EmotionCacheContext","createCache","ThemeContext","CacheProvider","withEmotionCache","typePropName","createEmotionProps","newProps","cssProp","css","serializeStyles","Emotion","jsx","createElementArgArray","keyframes","insertable","cls","toAdd","ClassNames","ele","ListActionTypes","GetPimStatusesAction","GET_PIM_STATUSES","GetPimStatusesSucceededAction","pimStatuses","GET_PIM_STATUSES_SUCCEEDED","GetTestStatusesAction","GET_TEST_STATUSES","GetTestStatusesSucceededAction","testStatuses","GET_TEST_STATUSES_SUCCEEDED","GetLeadSourcesAction","GET_LEAD_SOURCES","GetLeadSourcesSucceededAction","leadSources","GET_LEAD_SOURCES_SUCCEEDED","GetAllManufacturersAction","GET_ALL_MANUFACTURERS","GetAllManufacturersSucceededAction","GET_ALL_MANUFACTURERS_SUCCEEDED","GetXrefTypesAction","GET_XREF_TYPES","GetXrefTypesSucceededAction","xrefTypes","GET_XREF_TYPES_SUCCEEDED","UpdateDetailedManufacturerMapAction","UPDATE_DETAILED_MANUFACTURER_MAP","GetAllCategoriesAction","GET_ALL_CATEGORIES","GetAllCategoriesSucceededAction","GET_ALL_CATEGORIES_SUCCEEDED","_assign","_assign2","pat","ch","MULTICAST","ARRAY_INSERT","ARRAY_MOVE","ARRAY_POP","ARRAY_PUSH","ARRAY_REMOVE","ARRAY_REMOVE_ALL","ARRAY_SHIFT","ARRAY_SPLICE","indexA","indexB","ARRAY_SWAP","ARRAY_UNSHIFT","AUTOFILL","BLUR","persistentSubmitErrors","CHANGE","keepTouched","fields","CLEAR_FIELDS","CLEAR_SUBMIT","CLEAR_SUBMIT_ERRORS","CLEAR_ASYNC_ERROR","DESTROY","FOCUS","keepDirty","otherMeta","INITIALIZE","REGISTER_FIELD","RESET","RESET_SECTION","START_ASYNC_VALIDATION","START_SUBMIT","STOP_ASYNC_VALIDATION","STOP_SUBMIT","SUBMIT","SET_SUBMIT_FAILED","SET_SUBMIT_SUCCEEDED","_len6","_key6","TOUCH","UNREGISTER_FIELD","_len7","_key7","UNTOUCH","syncErrors","UPDATE_SYNC_ERRORS","syncWarnings","UPDATE_SYNC_WARNINGS","_props$edge","edge","small","edgeStart","edgeEnd","centerRipple","chainPropTypes","propType1","propType2","elementAcceptingRef","isRequired","exactProp","formatMuiErrorMessage","fnNameMatchRegex","getFunctionName","getFunctionComponentName","getWrappedName","outerType","innerType","wrapperName","functionName","$$typeof","ForwardRef","Memo","HTMLElementType","componentName","propFullName","refType","refA","refB","refValue","NotificationTypes","ResetNotification","RESET_NOTIFICATION","ConnectNotificationSse","CONNECT_NOTIFICATION_SSE","CheckNotification","CHECK_NOTIFICATION","GetNewNotificationAction","GET_NEW_NOTIFICATION","GetNotification","GET_NOTIFICATION","GetNotificationSuccess","GET_NOTIFICATION_SUCCESS","CreateNotification","CREATE_NOTIFICATION","MarkNotificationReadOrUnread","MARK_NOTIFICATION_READ_OR_UNREAD","MarkNotificationReadOrUnreadSuccess","MARK_NOTIFICATION_READ_OR_UNREAD_SUCCESS","MarkAllNotificationsRead","MARK_ALL_NOTIFICATIONS_READ","MarkAllNotificationsReadSuccess","MARK_ALL_NOTIFICATIONS_READ_SUCCESS","OpenNotificationDropDown","OPEN_NOTIFICATION_DROP_DOWN","CloseNotificationDropDown","CLOSE_NOTIFICATION_DROP_DOWN","SetListItemStatusLoaded","SET_NOTIFICATIONS_LISTITEM_STATUS_LOADED","SetShouldScrollToTop","SET_SHOULD_SCROLL_TO_TOP","isOpen","isGlobalObj","GLOBAL_OBJ","globalThis","getGlobalObject","getGlobalSingleton","gbl","__SENTRY__","dataStore","reducerNamespace","Fuse","_Fuse","renderInput","renderSuggestion","valueKey","idKey","getSuggestionDisabled","fuseItem","isHighlighted","suggestionMatch","textPiece","highlight","matchHighlight","keyMatchFirst","beginIndices","endIndices","wordBuilt","elements","currWord","endIndex","renderSuggestionsContainer","popperProps","containerProps","square","getSuggestionValue","getSuggestions","fuse","justSelectedSuggestion","onSuggestionSelected","handleSuggestionsFetchRequested","handleSuggestionsClearRequested","suggestionNameLookup","suggestionItemLookup","wholeValue","typedItem","visited","withDefaultContainerClass","focusInputOnSuggestionClick","otherAutosuggestProps","suggestionIdLookup","suggestionValue","suggestionId","selectedValue","includeMatches","weight","TypedAutosuggest","Autosuggest","suggestionsContainerOpen","suggestionsList","renderInputComponent","suggestions","onSuggestionsFetchRequested","onSuggestionsClearRequested","listStyleType","_taggedTemplateLiteral","strings","freeze","acceptedExtensions","maxFileSize","setUploadedFile","setLoadingPercentage","setIsUploading","uploadFile","fileUploadUrl","urlOnly","req","FormData","upload","percent","onloadstart","readUploadResponse","failedUpload","uploaded","DashboardActionTypes","LoadDashboardAction","LOAD_DASHBOARD","DashboardLoadedAction","DASHBOARD_LOADED","WidgetAdminsLoadedAction","WIDGET_ADMINS_LOADED","DashboardUpdateLayoutAction","DASHBOARD_UPDATE_LAYOUT","DashboardWidgetCreatedAction","DASHBOARD_WIDGET_CREATED","DashboardDeleteWidgetAction","DASHBOARD_DELETE_WIDGET","WidgetLayoutDataUpdatedLocalAction","WIDGET_LAYOUT_DATA_UPDATED_LOCAL","WidgetLayoutDataUpdatedAction","WIDGET_LAYOUT_DATA_UPDATED","WidgetDataUpdateByUserWidgetIdAction","WIDGET_DATA_UPDATE_BY_WIDGET_ID","WidgetDataUpdatedAction","WIDGET_DATA_UPDATED","SetIsFetchingWidgetDataByWidgetIdAction","SET_IS_FETCHING_WIDGET_DATA_BY_WIDGET_ID","FetchWidgetsDataAction","FETCH_WIDGETS_DATA","SetAllowBatchWidgetsDataFetchAction","SET_ALLOW_BATCH_WIDGETS_DATA_FETCH","PDFHexString","_objectDestructuringEmpty","fieldReactSelectStyles","indicatorSeparator","providedStyles","labelStyle","enableCustomOnBlur","resolvedLabel","resolvedLabelStyle","hasValue","byPassBlurAction","ErrorActionTypes","ERROR","RESET_ERROR","ToggleErrorMenuAction","TOGGLE_ERROR_MENU","BuildingClassTypes","GetBuildingClassesAction","GET_BUILDING_CLASSES","GetBuildingClassesSucceededAction","GET_BUILDING_CLASSES_SUCCEEDED","GetBuildingTypesSucceededAction","GET_BUILDING_TYPES_SUCCEEDED","GetBuildingFailedAction","GET_BUILDING_FAILED","GetBuildingTypesAction","GET_BUILDING_TYPES","_toPropertyKey","hint","prim","toPrimitive","hiddenStyles","HiddenText","LiveRegion","ariaLiveType","screenReaderInstructions","defaultAnnouncements","onDragOver","onDragCancel","Action","getMinValueIndex","getValueIndex","activatorEvent","activeNode","activeNodeRect","activeNodeClientRect","activators","ariaDescribedById","containerNodeRect","draggableNodes","droppableRects","droppableContainers","overlayNode","nodeRef","scrollableAncestors","scrollableAncestorRects","recomputeLayouts","windowRect","willRecomputeLayouts","defaultCoordinates","distanceBetween","getEventCoordinates","isTouchEvent","isMouseEvent","getRelativeTransformOrigin","eventCoordinates","centerOfRectangle","closestCenter","rects","centerRect","distances","minValueIndex","createRectAdjustmentFn","modifier","adjustments","adjustment","offsetLeft","offsetTop","viewRect","getAdjustedRect","getScrollableAncestors","scrollParents","computedStyle","overflowRegex","isScrollable","findScrollableAncestors","getScrollableElement","getScrollCoordinates","scrollY","getScrollPosition","scrollingContainer","minScroll","isTop","isLeft","isBottom","isDocumentScrollingElement","Direction","defaultThreshold","getScrollDirectionAndSpeed","scrollContainerRect","acceleration","thresholdPercentage","finalScrollContainerRect","speed","getScrollElementRect","innerHeight","getScrollOffsets","getEdgeOffset","nodeOffset","getElementLayout","offsetWidth","offsetHeight","getViewRect","scrollOffsets","isViewRect","cornersOfRectangle","closestCorners","corners","entryCorners","rectIntersection","intersections","targetArea","entryArea","intersectionArea","intersectionRatio","getIntersectionRatio","maxValueIndex","getOwnerDocument","getInitialState","initialCoordinates","containers","DndMonitorContext","Accessibility","announcements","setAnnouncement","announcement","useAnnouncement","liveRegionId","setMounted","monitorState","previousMonitorState","onDragMove","useDndMonitor","hiddenTextDescribedById","useData","dataRef","AutoScrollActivator","TraversalOrder","LayoutMeasuringStrategy","LayoutMeasuringFrequency","useLayoutMeasuring","layoutMeasuring","strategy","containersRef","setWillRecomputeLayouts","recomputeLayoutsTimeoutId","layoutRectMap","useLazyMemo","previousValue","createLayoutRectMap","frequency","defaultLayoutMeasuring","Optimized","useClientRect","createUseRectFn","useClientRects","createUseRectsFn","useViewRect","previousElement","forceRecompute","previousElements","useSensor","sensor","Listeners","getEventListenerTarget","hasExceededDistance","delta","measurement","KeyboardCode","defaultKeyboardCodes","defaultKeyboardCoordinateGetter","currentCoordinates","KeyboardSensor","autoScrollEnabled","coordinates","getWindow","handleKeyDown","handleCancel","attach","handleStart","onStart","keyboardCodes","coordinateGetter","scrollBehavior","newCoordinates","scrollDelta","coordinatesDelta","getCoordinatesDelta","scrollElementRect","clampedCoordinates","canScrollX","canScrollY","behavior","getAdjustedCoordinates","handleMove","onMove","handleEnd","onEnd","isDistanceConstraint","constraint","isDelayConstraint","onActivation","EventName","AbstractPointerSensor","listenerTarget","activated","handleKeydown","activationConstraint","PointerSensor","MouseButton","MouseSensor","applyModifiers","TouchSensor","ActiveDraggableContext","scaleX","scaleY","DndContext","rect1","rect2","collisionDetection","activeId","activeRects","translated","activeRef","latestProps","draggableDescribedById","draggableNode","cachedNode","useCachedNode","activationCoordinates","initialActiveNodeRectRef","initialActiveNodeRect","nodeRectDelta","sensorContext","collisionRect","draggingNodeRect","scrollAdjustedTranslate","translatedRect","overNode","getDroppableNode","previousNode","ancestors","useScrollableAncestors","useNodeRef","overlayNodeRect","overlayNodeRef","modifiedTranslate","pointerCoordinates","scrollAdjustment","prevElements","handleScroll","scrollingElement","setScrollCoordinates","scrollCoordinates","scrollableElement","useScrollOffsets","overContainer","getOver","adjustScale","instantiateSensor","sensorInstance","Sensor","setMonitorState","createHandler","setActiveSensor","setActivatorEvent","cancelDrop","bindActivatorToSensorInstantiator","capturedBy","getSyntheticHandler","sensorActivators","activator","useCombineActivators","useInterval","scrollSpeed","draggingRect","scrollDirection","scrollContainerRef","sortedScrollableAncestors","canScroll","scrolllContainerRect","clearAutoScrollInterval","setAutoScrollInterval","useAutoScroller","activeSensorDisablesAutoscroll","activeSensor","autoScrollGloballyDisabled","getAutoScrollerOptions","setOverlayNodeRef","NullContext","defaultRole","useDraggable","roleDescription","useSyntheticListeners","setNodeRef","useDndContext","useDroppable","defaultTransition","defaultDropAnimation","easing","dragSourceOpacity","DragOverlay","wrapperElement","modifiedTransform","derivedTransform","prevRect","useDerivedTransform","intermediateTransform","finalTransform","CSS","touchAction","styleProp","attributesSnapshot","derivedAttributes","otherAttributes","prevActiveId","dropAnimationComplete","finalNode","fromNode","scaleDelta","originalOpacity","nodeAnimation","setDropAnimationComplete","useDropAnimation","shouldRender","finalChildren","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tmh","withTime","localDateTime","useThemeWithoutDefault","API_VERSION","Hub","scope","isolationScope","assignedScope","assignedIsolationScope","_version","setClient","bindClient","_isolationScope","getStackTop","setupIntegrations","getScope","getStack","maybePromiseResult","pushScope","popScope","exception","eventId","_lastEventId","syntheticException","captureException","originalException","captureMessage","captureEvent","breadcrumb","getOptions","beforeBreadcrumb","maxBreadcrumbs","timestamp","mergedBreadcrumb","finalBreadcrumb","addBreadcrumb","setUser","getIsolationScope","setTags","extras","setExtras","extra","setExtra","setContext","oldHub","makeMain","integration","getIntegration","_oO","customSamplingContext","_callExtensionMethod","endSession","_sendSessionUpdate","getSession","setSession","environment","getUser","currentSession","sendDefaultPii","captureSession","carrier","getMainCarrier","sentry","extensions","hub","getHubFromCarrier","setHubOnCarrier","getCurrentHub","acs","getGlobalHub","hasHubOnCarrier","isOlderThan","runWithAsyncContext","ReactCSS","loop","handleActive","handleHover","hover","_flattenNames2","_mergeClasses2","_autoprefix2","_hover3","_active2","_loop3","activations","activeNames","_defineProperty2","DrawerTextFieldRowComponent","multiline","rowsMax","BUILDING_SELECTION_FORM","FORM_SELECTED_BUILDING_CLASSES_KEY","FORM_SELECTED_BUILDING_TYPES_KEY","FORM_SINGLE_KEY","FORM_MULTI_KEY","makeSelectPimStatuses","makeSelectTestStatuses","makeSelectLeadSources","makeSelectAllManufacturers","makeSelectXrefTypes","makeSelectAvailableXrefTypes","xrefType","makeSelectDetailedManufacturerMap","makeSelectmanufacturerLogoId","makeSelectAllCategories","useCombinedRefs","refs","canUseDOM","intervalRef","setInterval","clearInterval","valueRef","createAdjustmentFn","Translate","Scale","Transform","Transition","acceptedMainImageExtensions","mainImageUploadValidation","_isPositiveIntegerSmallerThan","_isPositiveFloatSmallerThan","_isSmallerThan","_isBiggerThan","isBothValueValid","isBothSkidValid","isBothTruckValid","uploadFileContainer","renderTextField","isPOA","isListPriceField","SERIES_EDIT_FORM","searchingOffice","getBrandRepCategories","searchRecommendedAttributes","getAttributeOrder","getOfficeAndSelectOffice","setSelectedCurrency","mainFileId","canManagePimPricing","prevOffice","mandatoryRecommendedAttributes","suggestText","dropzoneInputProps","updatedBrandId","updatedCategoryId","COUNTRIES_ARRAY","getOptionSelected","filterSelectedOptions","COUNTRIES_OBJECT","getMenuPlacement","menuEl","shouldScroll","isFixedPosition","scrollParent","getScrollParent","defaultState","offsetParent","_menuEl$getBoundingCl","menuBottom","menuHeight","menuTop","containerTop","viewHeight","getScrollTop","viewSpaceAbove","viewSpaceBelow","scrollSpaceAbove","scrollSpaceBelow","scrollDown","scrollUp","scrollDuration","animatedScrollTo","_constrainedHeight","spaceAbove","controlHeight","scrollTo","_constrainedHeight2","coercePlacement","menuCSS","_ref2$theme","alignToControl","neutral0","menuGutter","MenuPlacer","_getPrototypeOf2","maxMenuHeight","minMenuHeight","menuPlacement","menuPosition","getPortalPlacement","getPlacement","placerProps","getUpdatedProps","menuListCSS","baseUnit","WebkitOverflowScrolling","noticeCSS","_ref5","_ref5$theme","neutral40","noOptionsMessageCSS","loadingMessageCSS","NoOptionsMessage","LoadingMessage","menuPortalCSS","_ref6","MenuPortal","_Component2","_getPrototypeOf3","_ref7","appendTo","controlElement","isFixed","getBoundingClientObj","scrollDistance","menuWrapper","keyList","hasProp","equal","arrA","arrB","dateA","dateB","regexpA","regexpB","exportedEqual","containerCSS","isRtl","valueContainerCSS","ValueContainer","indicatorsContainerCSS","alignSelf","_templateObject","Svg","focusable","CrossIcon","DownChevron","baseCSS","_ref3$theme","neutral60","neutral20","neutral80","dropdownIndicatorCSS","clearIndicatorCSS","indicatorSeparatorCSS","_ref4$theme","neutral10","loadingDotAnimations","loadingIndicatorCSS","verticalAlign","LoadingDot","_css","LoadingIndicator","indicator","_ref$theme","neutral5","outline","neutral30","groupCSS","groupHeadingCSS","inputCSS","visibility","inputStyle","isHidden","multiValueCSS","multiValueLabelCSS","cropWithEllipsis","multiValueRemoveCSS","dangerLight","danger","MultiValueGeneric","MultiValueRemove","MultiValue","removeProps","Container","Label","Remove","emotionCx","optionCSS","primary25","userSelect","WebkitTapHighlightColor","primary50","placeholderCSS","neutral50","css$1","ClearIndicator","Control","Group","Heading","headingProps","GroupHeading","cleanProps","IndicatorsContainer","indicators","AutosizeInput","Placeholder","SelectContainer","SingleValue","defaultComponents","BackgroundImage","cover","backgroundStyle","backgroundSize","backgroundImage","mq","AsyncImage","imageURL","getImageFileUrl","LocalImage","ImageContainer","imageContainerProps","PDFString","ProjectTrackerCreateProjectFormVariant","CreationMethod","PackageDrawerView","openPackageEdit","PACKAGE_DRAWER_ID","PACKAGE_CONTENT_EDIT_KEY","deletePackage","productList","packageData","onProductClicked","deltasfirmProducts","productQuantities","deltasFirmProduct","linkContainer","packageId","ModifiedDate","formattedModifiedDate","formattedCreatedDate","packageImg","DeletePackageAction","PackageDrawer","initialPackageData","PackageDrawerEdit","Hide","show","_typeof2","_typeof3","tabContent","descriptionTitle","templateButton","tabTitleIcon","openSampleModal","sampleModalKey","sampleSrc","sampleAlt","fontIcon","PrintWrapper","safeIsNaN","resultFn","calledOnce","newArgs","paddingProp","scopeProp","sizeProp","sortDirection","variantProp","TableContext","tablelvl2","Tablelvl2Context","ariaSort","stickyHeader","divider","footer","paddingCheckbox","paddingNone","fieldDropzoneState","showPhotoPreview","rootDisabled","imagePreview","dropFile","browseFile","disabledText","dropzoneProps","onDropAccepted","dropzonePropsRest","dropzoneRootProps","autoRevokeURL","filesWithPreview","createObjectURL","previews","revokeObjectURL","showLoading","loadingState","fileArray","getRootProps","getInputProps","PT_PROJECT_LIST_FILTER_FORM","PT_PROJECT_LIST_FILTER_LIST","formatDateRangeFilter","dateRangeMap","formatedDateRangeFilter","bidDateValidateFunc","createdDateValidateFunc","valuationValidateFunc","oppValuationValidateFunc","defaultMultiSelectValue","ProjectListFilter","createdByUserInput","contactInput","assignedToInput","AvatarOrLogo","avatarText","avatar","_country","province","city","setFormValues","setSearchArgsAndSearch","country","createdByOfficeId","assignedToValue","assignedTo","orConditions","oppLabelId","oppStatusId","minOppValution","maxOppValution","untracked","nonAiSpec","aiSpec","aiValidatedSpec","specCount","buildingClassId","buildingTypeId","phaseName","trackingOfficeId","createdByUser","createdByOffice","contactIds","formatedBidDate","formatedCreatedDate","projectSource","newFilter","orList","handleResetForm","setUniqueKey","getFiltersByType","getOpportunityLabels","getOpportunityStatuses","getBuildingClasses","getProjectPhases","getLeadSource","searchUsers","getBuildingTypes","getOfficesByFirmId","searchContacts","selectedBuildingClassId","adminDivisions","opportunityStatusesList","opportunityLabelsList","buildingTypes","projectPhases","firmOfficesId","regions","isLoadingContacts","userListItems","uniqueKey","adminDivision","firmOffices","userFirmOfficesId","drawer","drawerPaper","filterFormOpen","defaultCheckBoxLabel","handleSave","projectListFilterSave","projectListFilterSaveClicked","handleCreateFilter","filterName","projectListFilterCreate","handleSelectFilter","projectListFilterSelectSavedFilter","selectedFilter","handleReset","freeSolo","dateInput","contactType","address1","address2","cityName","provinceCode","countryName","fullName","filterOptions","contactOptions","subtitleContainer","buttonContainer","makeSelectBuildingTypes","makeSelectBuildingClasses","userType","preference","touchOnChange","TRACE_FLAG_NONE","TRACE_FLAG_SAMPLED","spanToTraceContext","span","spanContext","span_id","spanId","trace_id","traceId","spanToJSON","parent_span_id","spanToTraceHeader","sampled","spanIsSampled","spanTimeInputToSeconds","ensureTimestampInSeconds","getSpanJSON","spanIsSpanClass","traceFlags","wat","isInstanceOf","isBuiltin","isErrorEvent","isDOMError","isDOMException","isParameterizedString","isPrimitive","Event","isThenable","isSyntheticEvent","isVueViewModel","__isVue","_isVue","createSymbol","CHANNEL_END_TYPE","MATCH","TASK","emptyContainer","logo","addButton","appBar","EmptyViewProps","image","onButtonClicked","emptyviewSubtitle","emptyviewAddButton","emptyviewAddButtonProps","disabledAdd","disabledAddTooltip","emptyviewAlt","emptyviewNotFound","overRideStyles","noGrow","reactIs","REACT_STATICS","childContextTypes","contextTypes","getDefaultProps","getDerivedStateFromError","KNOWN_STATICS","caller","callee","MEMO_STATICS","compare","TYPE_STATICS","getStatics","isMemo","objectPrototype","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","FieldRadio","formHelperTextProps","customOnChange","cleanString","getProductUniqueKey","isFromBidResponse","firmProductProductNumber","productProductNumber","productBrandId","firmProductCategory","fetchFirmProducts","productsToMap","selectedProducts","updateFirmProductPrice","bidResponseProducts","firmProductIds","brp","fpId","searchParams","PimServiceApi","freshProducts","updatedMap","fresh","fp","firmProduct","QuoteFormUtil","getImportedPriceCells","importPricingResults","importPricingLogs","entriesByKey","sectionId","quoteProductId","fieldId","newInfoItem","bidResponse","BidInvitationResponse","fieldValue","bidResponseProductId","originalQuoteProductId","findMatchImportPricingBid","templateCell","importedPrices","selectedRegionId","templateCellFieldId","matchResult","getSavedImportPricing","quoteForm","importPricingFormSectionProducts","matchImportBidResponsePricingProducts","bidResponseId","matchImportPricingProducts","bidResponseSectionProducts","quoteSections","importPricingSectionProducts","sectionObj","quoteProducts","quoteProduct","matchProducts","templateCells","quoteProductTemplateCell","matchProduct","findMatchImportPricingData","copySourceQuote","sourceSpecToQuoteLinkedList","loggedInUserData","defaultQuoteQuickText","defaultManufacturerDiscountsManufacturerIds","defaultTerms","defaultComments","defaultDiscountList","nonStockProductNote","sourceQuote","defaultTemplate","quoteRegionId","fieldsData","specSections","seenPackageIds","updatedQuoteProducts","specUniquePackageId","uniquePackageId","specToQuoteValues","linkedSpecToQuoteValues","defaultRecommended","emptyProduct","uuid","note","defaultPrint","specDrawingProductId","isRequestingProduct","setupTemplateCells","recommendedProduct","nonStockTerm","packageProducts","productNote","noteWithNonStockTerm","stockRegionExist","specProductInfo","aiAnnotation","stockLevels","nonSpecProduct","_sectionId","sectionTitle","sectionTemplate","aiNote","getDefaultInitialValues","hasCurrencyConversionACLRole","findMappingProducts","sourceQuoteSections","invitationResponseResult","initMappingProducts","BidResponseProducts","bidResponseProduct","responseProductNumber","responseManufacturerName","manufacturerName","productBrand","responseUpc","quoteSection","reFormatProduct","findUnmappedProducts","mappingProducts","addSearchProductsToMap","searchFirmProductResults","selectedBidIds","searchFirmProduct","bidProductNumber","responseProductBrand","matchedProduct","getFirmProductSearchParams","searchProductsParams","uniqueKeys","buildNewImportProduct","responseProductId","fieldsToMap","bidProduct","BidProduct","productNo","productManufacturer","firmProductDescription","productDescription","firmProductCategoryName","productCategoryName","sectionCurrencyCode","fieldsMapping","priceMapping","aliasToPriceKey","sellPrice","priceKey","mappingTo","isPoaIsOverride","listIsOverride","sellIsOverride","costIsOverride","importNewProduct","isProductImportable","responseProduct","hasManufacturer","hasCategory","removeDuplicateProducts","seenKeys","isProductDuplicate","newProduct","existingProducts","productKey","findOriginalProductByResult","newFirmProducts","buildPricingGroups","invitationResponses","columns","columnsSet","directFields","firstMapping","parsed","contactEmail","Contact","pricingRequestNumber","supplierProductNumber","notes","isFirmProductPriceInherited","reconstructInsertSectionProducts","savedImportPricing","vendorQuote","vendorEntries","brpToImportedProduct","importedQuoteProducts","importedQpIds","reconstructed","brps","importedQuoteProductId","isInsert","newProductUuid","isInsertAction","originalQpIds","origId","replaceQpIds","insertQpIds","qpId","brpsByOriginal","insertIdx","groupBrps","insertQpId","reconstructOtherVendorsInsertSectionProducts","currentVendorId","currentVendorBrps","allBrpToOriginalQpId","originalQuoteProductIds","otherVendorEntries","vendorId","vendorQuoteProducts","brpId","minBrpId","savedOriginalQpId","replaceItems","insertItems","insertItem","originalQpId","bestReplace","rep","sameSection","sec","parser","FormulaParser","varRegex","allVarsRegex","parseAllFormulaFields","productFields","setUpdateTag","selectedProduct","retainOldValue","applyRounding","targetedTemplate","fieldName","formula","fieldType","allowMassUpdate","prevCell","formulaResult","parseFormula","isFieldUpdated","applyFullTruncate","valueType","truncateToDecimal","applyRoundingOption","roundingOption","decimalPrecision","truncateDecimals","formattedValue","parseFormulaFields","fieldData","parsedIds","isUserInput","fieldIndex","elm","temporaryFormula","parserVar","setVariable","rawResult","decimals","verifyPriceFormat","decimalPlaces","countDecimals","accurateSum","maxDec","factor","numValue","replacementFactory","markFunctionWrapped","addNonEnumerableProperty","o_O","getOriginalFunction","__sentry_original__","urlEncode","handlers","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","useEnhancedEffect","useEventCallback","additionalText","openLoadingModal","deleteModalProps","idToDelete","itemName","toggleDeleteModal","contentText","dialogProps","buttonCancel","buttonOk","withLoading","withLoadingAction","setLoading","textFieldProps","textField_inputProps","_setPrototypeOf2","_create2","PDFObject","uploadedFiles","makeSelectXrefSelectedCategoryId","makeSelectXrefSelectedManufacturerValue","makeSelectXrefCategory","makeSelectXrefManufacturer","makeSelectCachedXrefProducts","makeSelectSelectedCompetitorProductId","makeSelectCachedCompetitorProduct","controlledCompetitorProductId","competitorProductId","cachedXrefProducts","makeSelectXrefData","makeSelectSelectedCompetitorProductIdXrefData","xrefData","xrefs","productXrefs","seriesXrefs","makeSelectCompetitorProducts","competitorIds","competitorId","makeSelectSearchingXrefs","makeSelectGetCompetitorProductsLoading","makeSelectGetXrefManufacturersLoading","makeSelectGetXrefCategoriesLoading","ProjectVisibility","DEFAULT_QUOTE_AUTO_SAVE_PREFERENCE","QuoteAutoSaveType","INTERVAL","QUOTE_DISCOUNT_LIST_PREFERENCE","QUOTE_DISCOUNT_LIST_USER_TYPE","uuid4","crypto","msCrypto","getRandomByte","randomUUID","getRandomValues","getFirstException","getEventDescription","firstException","Acl","anyRole","roles","originalRoles","allRoles","requiredRolesSet","Reducer","CreateNewProjectFormStepperActionTypes","SET_FORM_VALUES","CLEAR_FORM_VALUES","DuplicateModal","onNo","onYes","selectedIndex","setSelectedIndex","Modal","Radio","CreateNewProjectFormStepper","activeStep","openDuplicateModal","transformedValues","mergedValues","ClearFormValuesAction","SetFormValuesAction","wholeTemplateSelected","updateWholeTemplateSelected","allSelected","changeStep","absolute","transformNewProjectModalFormValues","leadSourceCtx","preTransformLeadSource","leadSourceSource","parsedValuation","transformContactFormValues","projectKeyContacts","quoteKeyContacts","keyContact","updatedKeyContacts","transformCollaboratorFormValues","permissions","valuesCtx","collaboratorsWithPermissions","collaboratorListCtx","permissionList","collaboratorIdAsString","collaboratorId","permissionListForApi","permissionListForApiCtx","permission","collaborator","submitForm","variantSet","isTestProject","trackProject","formatedValues","projectValues","projectType","buildingClassesString","buildingClass","buildingType","buildingTypesString","projectCreated","buildingClassesCount","buildingTypesCount","buildingAmplitudeData","setProjectMasterSavingAllow","editMode","savingAllow","atsApiIdentity","templateTranslationObject","filterOutCountryIds","enabledCountryIds","backToSelection","_activeStep","withKeyContactComponent","WITH_KEY_CONTACT_COMPONENT","withTemplateSelection","WITH_TEMPLATE_SELECTION","hasBackButton","WITH_CREATION_METHOD_SELECTION","Stepper","orientation","Step","StepLabel","StepContent","NewProjectModalForm","NewProjectBuildingSelectionForm","buttons","TemplateSelectionForm","buildings","NewProjectKeyContactsForm","projectData","circularProgress","NewProjectCollaboratorsForm","resetContainer","WITH_EDIT_MODE","makeSelectFormValues","allow","COMPETITOR_FILTER","CompetitorFilter","hasProductType","hasSeriesType","brandMap","categoryMap","setUpAvailableOptions","competitorProducts","newHasProductType","newHasSeriesType","newBrandMap","newCategoryMap","competitorProduct","newManufacturers","newCategories","_brands","_categories","useSecondaryColorForCheckbox","disablePortal","DRAWER_MAX_WIDTH","detailXrefTypes","CrossReferenceRecommendedProductsContainer","handleBack","resetDropdowns","selectedManufacturerValue","selectedCategoryId","CROSS_REF_QUICKSEARCH_FORM","fullReset","xrefTypeInfo","isBemis","useSecondaryColorForCrossTypeButton","CrossReferenceTypesInfoPopup","xRefData","selectedCompetitorProduct","customProductImage","selectedCompetitorProductId","xrefDataForCompetitorProduct","_companyName","useSecondaryColorForSpinner","resultTextDisplay","darkText","bold","resultInfoContainer","XrefExpansion","originalState","originalOwnProps","itemTitle","infoContainer","textOverFlow","CompetitorProductCard","secondaryColorIcon","useSecondaryColorForCardIcon","cardSvgBackgroundColor","cardSvgShadowColor","useSecondaryColorForProductNumberLink","productNumbers","productNumbersDisplay","_competitorProduct","_competitorProductType","xrefCompetitorProductSelected","searchId","trackingData","xref_stepOne_CompetitorSelected","isFirmSpecific","XREF_REF_STEPPER","productSelected","reactSelectComponents","CrossReferencePage","openPopper","filterAnchorEl","filteredCompetitorProducts","filterCompetitorProducts","trackData","filterFormValues","allType","filterBrand","filterCategory","filterCrossTypeRecommended","filterCrossTypeFunction","function","filterCrossTypeValue","filterCrossTypeFinish","filterCrossTypeClosestMatch","closestMatch","filterCrossTypeAesthetics","aesthetics","allCrossTypes","crossType","setFilteredCompetitorProducts","filterCompetitorProductType","resultsCount","xref_stepOne_SecondarySearch","setFeSearchTerm","feSearchTerm","resetFilter","resetSearchTerm","competitorProductsDisplay","getSelectedManufacturer","SelectCompetitorsProduct","getCompetitorProductsLoading","filteredResultsCount","useSecondaryColorForFilterIcon","NoResults","filterChips","filterChip","resultsInfo","xrefManufacturer","getSelectedCategory","xrefCategory","getXrefManufacturers","selectManufacturer","selectCategory","getXrefProductByManufacturer","getXrefCategoriesLoading","getXrefManufacturersLoading","productDetailContainer","positionStart","searchIcon","Fade","popperContent","warningIcon","minimumCharacters","FieldListItemReactSelect","selectStyles","imageStyle","alignItem","verticalDivider","defaultParameter","cachedApiCallActionParams","DataFieldAutoSuggest","immutablePatternSetCache","sortedParams","ParameterRecord","patternKey","arrayOrObject","parameter","parseArrayOrObjectParamsIntoMap","paramA","paramB","param","cmpA","cmpB","cmpAParam","cmpBParam","immutableParameters","atsState","getDataIfValid","valid","stringifiedImmutableParameters","paramSet","getValidParameterKeys","patternSet","immutablePattern","atsApiPayload","modifiedOptions","atsApiPayloadWithModifiedOptions","apiCallAction","getApiCallAction","getDataKey","parametersValid","prevImmutableParameters","NewProjectTabs","VirtualizedTableRef","firmCollaborators","selectedCollaborators","AppBar","tableHeader","tableContainer","VirtualizedTable","tableData","columnProps","dataKey","celltype","rowData","tableProps","disableHeader","rowHeight","headerHeight","MODAL_ID","OpportunityAddEditModal","addOpportunityEnabled","selectedItemIndex","dirty","resetModal","setCategory","setManufacturer","getSelectedManufacturers","productChipRoot","productChip","disableRipple","iconStyle","handleAddToOpportunity","selectedManufacturerId","categoryIndex","manufacturerIndex","manufacturerData","categoryData","productInfo","enableAddOpportunity","disableAddOpportunity","resetSelectedProducts","handleFormSubmit","modalType","opportunityLabel","listOfselectedProducts","addOpportunity","manufacturerValue","_manufacturer","modalTitle","_category","opportunityGroups","originalSelectedProducts","opportunityLabelChanged","valuesChanged","shouldDisable","dialogBody","addToOpportunityEnabled","addToOpportunityDisabled","productChipContainer","addOrEdit","selectedItemIndexState","inputField","opportunityData","doesTitleExist","manufacturerSelection","categorySelection","AtsActionBlock","makeStylesWithoutDefault","makeSelectShareContactsPricingRegions","shareContacts","firmRegions","officeRegions","makeSelectRegionsList","makeSelectSelectedRegion","formControl","roleInput","GUEST_SIGN_UP_MODAL_FORM_NAME_STEP_1","asyncValidate","asyncBlurFields","onSubmitFail","step1Final","onSubmitSuccess","useViewContext","setView","passwordTypeEnabled","setPasswordTypeEnabled","roleName","setRoleName","hasNoRole","setHasNoRole","selectedRole","setSelectedRole","consentModalOpen","setConsentModalOpen","hasInvalidCustomRole","roleTypes","togglePasswordVisible","ConsentModal","GUEST_LOGIN_MODAL","preventUnhandledSubmitRejection","InputLabel","selectedRoleId","roleType","FormHelperText","stepperContainer","backButton","stepContent","signUpButtonContainer","roleCard","signUpOrganizationValuesSelector","signUpOrganizationFormName","signUpFirstStepValuesSelector","sighUpFirstStepFormName","SignUpStep2","setActiveStep","submitting","setSubmitting","signUpOrganizationValues","signUpFirstStepValues","saveDefaultSpec","setSaveDefaultSpec","quickSpecTitle","setQuickSpecTitle","privacyLink","handleSignUp","step3Final","mergedFormValues","finally","prevStep","SignUpOrganizationForm","nextStep","renderActionButtons","SignUpStep3","withContinueButton","onClickContinue","gap","ViewContext","GuestLoginModal","SIGN_UP_ORG_FORM_NAME","_props$disableGutters","disableGutters","_props$role","tabIndexProp","dense","gutters","WithPaper","paperContainer","imageContainer","secondRow","routeContainer","messages","redirectLink","svgIcon","firstRow","redirectMessage","_style","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","_path12","_path13","_ellipse","_path14","_path15","_path16","_excluded","SvgLoadingCart","svgRef","titleId","APPLY_ATTACHMENT_TEMPLATE_MODAL","selectMenu","fieldContainer","selectOpen","selectOverlayProps","selectIsSearchingFolderTemplates","selectIsApplyingTemplateToProjectAttachment","selectDefaultAttachmentFolderTemplate","selectAttachmentFolderTemplates","rawData","userDefaultTemplateId","firmDefaultTemplateId","filteredData","userDefaultTemplate","firmDefaultTemplate","isSearchingFolderTemplates","isApplyingTemplate","selectedProjectId","parentFolderId","debounceSearchTemplates","ControlledModal","isFirmDefaultTemplate","isUserDefaultTemplate","specificationSaga","getMastersInCopyModal","getMasters","searchMasters","deleteMaster","deleteTemplate","deleteAndSearchMasters","deleteAndSearchTemplates","duplicateMaster","duplicateTemplate","updateMasterProject","updateTemplateProject","getMasterProjects","getTemplateProjects","createMasterProject","createMasterProjectFromTemplate","createTemplateProject","getMasterProject","getTemplateProject","deleteProjectFileAndGetProjectFiles","updateProjectFileAndGetProjectFiles","addProjectFileAndGetProjectFiles","addProjectFile","deleteProjectFile","getProjectFiles","addProjectPhaseChange","editProject","updateProjectKeyContactsAndThenRedirect","updateProject","updateProjectAndThenRedirect","updateMasterProjectAndRedirect","updateTemplateProjectAndRedirect","editProjectOpportunity","getProjectOpportunity","updateProjectOpportunity","updateProjectAssignedTo","getTrackedProjects","updateTrackList","updateUntrackList","untrackProject","createProject","createProjectFromTemplate","createPTProject","createPTProjectFromTemplate","getProjects","getProjectByIdAndFetchMissingSpecs","getProjectByIdAndSelectProject","deleteProject","duplicateProject","quickSearchProjects","searchProjects","deleteAndSearchProjects","addQuoteToProject","removeQuoteFromProject","specToolProjectListSearchProjects","linkSpecWithId","checkOpportunityStatusUpToDate","updateOpportunityAutomation","fetchProjectOpportunitiesThenUpdateProjectThenCheckOpportunityStatus","checkOpportunityExists","updateQuoteStatusAndOpportunityValue","createTakeoff","searchTemplates","applyFolderTemplateToProjectAttachment","patchKeyContacts","buildingClassesData","_buildingAmplitudeData","class_commercial","class_commercial_type_entertainmentCenter","class_commercial_type_mall","class_commercial_type_retail","class_commercial_type_theater","class_education","class_education_type_collegeUniversity","class_education_type_dayCare","class_education_type_elementary","class_education_type_highSchool","class_heathCareFacilities","class_heathCareFacilities_type_ambulatorySurgicalCenter","class_heathCareFacilities_type_clinicMedicalOfficeBuilding","class_heathCareFacilities_type_dentalClinic","class_heathCareFacilities_type_dialysisCenter","class_heathCareFacilities_type_hospital","class_heathCareFacilities_type_longTermCareFacilitiesAttachedToHospital","class_heathCareFacilities_type_longTermCareFacilitiesPrivate","class_heathCareFacilities_type_metalHealthcare","class_heathCareFacilities_type_seniorCitizensRetirementHome","class_heathCareFacilities_type_veterinarianClinic","class_hospitality","class_hospitality_type_entryLevel","class_hospitality_type_luxury","class_hospitality_type_upgrade","class_industrial","class_industrial_type_distributionCenter","class_industrial_type_foodProcessing","class_industrial_type_lightIndustrial","class_industrial_type_pharmaceuticalLaboratory","class_industrial_type_plantsFactories","class_industrial_type_wasteWaterTreatmentCenter","class_lightCommercial","class_lightCommercial_type_bank","class_lightCommercial_type_barRestaurant","class_lightCommercial_type_dealershipServiceCenter","class_lightCommercial_type_gasStation","class_lightCommercial_type_hairSalon","class_lightCommercial_type_retail","class_officeBuildings","class_publicSpace","class_publicSpace_type_fireHall","class_publicSpace_type_library","class_publicSpace_type_placeOfWorship","class_publicSpace_type_townHall","class_recreationalFacilities","class_recreationalFacilities_type_amusementPark","class_recreationalFacilities_type_arena","class_recreationalFacilities_type_communityCenter","class_recreationalFacilities_type_fitnessCenter","class_recreationalFacilities_type_park","class_recreationalFacilities_type_restArea","class_recreationalFacilities_type_stadium","class_residential","class_residential_type_apartment","class_residential_type_condominium","class_residential_type_privateHome","class_residential_type_studentResidence","class_security","class_security_type_military","class_security_type_policeStation","class_security_type_prison","class_security_type_youthDetentionCenter","class_transportation","class_transportation_type_airportTerminal","class_transportation_type_hangar","class_transportation_type_parkingGarage","class_transportation_type_rentalService","class_transportation_type_trainBusDepot","class_transportation_type_transportationCenter","CREATE_PT_PROJECT_FROM_TEMPLATE","UPDATE_TRACK_LIST","UPDATE_UNTRACK_LIST","SPEC_TOOL_PROJECT_LIST_SEARCH_PROJECTS","EDIT_PROJECT","EDIT_PROJECT_OPPORTUNITY","UPDATE_PROJECT_OPPORTUNITY","ADD_PROJECT_PHASE_CHANGE","DELETE_PROJECT_FILE_AND_GET_PROJECT_FILES","ADD_PROJECT_FILE_AND_GET_PROJECT_FILES","FETCH_THEN_UPDATE_THEN_CHECK_OPPORTUNITY_STATUS","UPDATE_PROJECT_FILE_AND_GET_PROJECT_FILES","immuData","hasNextPage","filterObject","immutableFilters","filterData","createdByUserId","createdDateGte","createdDateLte","modifiedDateGte","modifiedDateLte","errorCode","versionNumbers","masterSearch","redirectPath","masterTemplateId","deleteMasterTemplate","data2","err2","_projectId","NEW_MASTER_PROJECT_MODAL_FORM","NEW_TEMPLATE_PROJECT_MODAL_FORM","projectAction","onFailed","masterTemplateUsage","sourceTemplateId","wholeTemplateUsed","templateUsed","copyInstructions","_master","selectedTemplate","projectSpecs","firstSpec","selectTemplateProject","redirectIfNotfound","masterProject","linkedFile","linkedFileId","updatedFile","parentId","fileIds","folderName","labels","fileTags","fileObjs","filesOrFolderUploaded","getUserFirm","firmName","projectFiles","currentFirmFolders","currentFirmFiles","currentFirmFilesSize","sumOfUploadedFilesSize","totalFirmFilesSizeInMB","trackedData","folderId","totalFolders","totalFilesSize","folderCreation","fileAttachment","attachmentName","attachmentDelete","selectedProjectFiles","updatedPhase","redirect","keyContactsRes","targetedKeyContact","projectKeyContact","customerAwarded","customerLost","opportunity","updatedOpportunities","opportunityList","updatedAssignedTo","anchorOrigin","_project","_specs","setTrackProject","exitQuoteAfterQuoteSave","getDefaultProjectVisibility","visibilityErr","projectVisibility","newProject","exitAfterSave","withoutLinkedQuotes","initialSelectedSpecId","currentSpecsMap","missingProjectSpecs","projectSpecIdObject","getSpecActions","projectSpecId","valuationGte","valuationLte","oppValueGte","oppValueLte","bidDateGte","bidDateLte","createdByUserIds","createdByOfficeIds","isUserTracked","hasQuote","hasAnySpec","hasAiSpec","projectSearch","constructUpdatedKeyContactsForQuoteSave","redirectToQuoteDetails","withQuoteReload","redirectToQuoteEdit","withResetSelectedProject","updateQuotePhase","opp","masterTemplateSearch","templateDirectoryId","PRINT_DESCRIPTION_MODAL_ID","closeIcon","paddingContainer","ellipsis","printDescription","productImageId","setSelectedLanguage","selectedLanguage","optionContainsCutsheet","allLocales","mediaLocaleOptions","cutsheetNotAvailableLocales","fileLink","_selectedLanguage","displayLabel","disabledLocales","HEADER_HEIGHT_UNIT_MULTIPLIER","SM_HEADER_HEIGHT_UNIT_MULTIPLIER","SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER","MD_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER","SM_SIDEBAR_THEME_SPACING_UNIT_MULTIPLIER","ANIMATION_SPEED","_toPath2","_immutable","_deepEqual","_setIn","_splice","_getIn","allowsArrayErrors","jsValue","orderChanged","icons","hideExpandButton","disableCloseButton","core","__e","_Alpha","_Checkboard","_EditableInput","_Hue","_Raised","_Saturation","_ColorWrap","_Swatch","TypePlaceholder","Preferences","getNativeStorage","kind","createSafeStorage","memory","selectRoot","FileLocalizationSelector","renderValue","mergeDuplicateWarningIcon","PredefinedContactRole","setProductDefaultPrint","currentDefaultPrint","updatedDefaultPrint","ImmutableMap","normalizeAttributes","DISCONTINUED_PRODUCT_STATUS","readField","getDiscontinuedProducts","discontinued","visibleCount","isArchitect","isEngineer","lowerCaseRole","isContractor","getPredefinedContactRole","indexOfArchitect","ARCHITECT","indexOfEngineer","ENGINEER","indexOfIngenieur","indexOfContractor","CONTRACTOR","indexOfEntrepreneur","indexOfEntrepreneuse","projectOnlyKeyContactIdsSet","truncateText","optionNotActiveIcon","descriptionContainer","optionItem","optionItemDraft","optionNotActive","textDecorationLine","selectUserHasPimPrintDescriptionAcl","selectUserHasFeatOptionBasedImages","selectUserHasFeatOptionBasedCutsheets","hasPimPrintDescriptionAcl","hasFeatOptionBasedImages","hasFeatOptionBasedCutsheets","isDraftDetailPage","updateOptionValueStatus","setOptionValueDescriptionsWithEffect","isRequire","useSwatch","useImage","useSpec","onlyActive","printDescriptionCsi","optionValueId","isOptionActive","isOptionDeleted","disabledDiscontinue","swatchId","effectedListContainer","optionHead","displayAsAttributeChip","justifySelf","setOptionDialogState","deleteOptionModalOpen","toggleOptionDeleteModal","bulkUpdate","discontinueModalOpen","toggleDiscontinueModalOpen","keyToUpdate","setKeyToUpdate","valueIndexToUpdate","setValueIndexToUpdate","optionValueDescriptionsWithEffect","openOptionsDialog","bulkStatusChange","everyOptionsValuesDeleted","NoAttributesFound","buttonText","SvgElement","AtsSvg","displayAsAttribute","discontinuedValues","activeValues","deletedValues","isAllOptionsDiscontinued","isAllOptionsActive","isAllOptionsDeleted","updateEntireOptionValueStatus","optKey","deleteOption","getTotalOptionDescriptionsCountByStatus","attr","optionDescription","getOptionStatusUpdatedCount","originalSeriesAttributes","updatedSeriesAttributes","attributeType","updatedStatusList","attrKey","getOptionDescriptionStatusUpdatedCount","optionDescriptionListByStatus","originalDescription","extractSkippedAttributeIdFromRecommendedAttributesAndFormAttributes","recommendedAttributes","formAttributes","formAttribute","nonDeletedAttributeIsInForm","SeriesEditPage","openPimIntegrationDailog","isSaving","refContainer","refSeriesInfo","refUnlistedAttributes","refFeatures","refOptions","refAttachment","scrollTabLabels","getUnscrollableTabItems","spacer","scrollTabButton","updateSeriesDraft","addDraft","mandatoryAttributes","rawPrice","regionCurrency","priceObj","_index","actualPrice","priceIndex","formPurchasability","formSkid","formTruck","formTransformedSeries","skidQuantity","skidPrice","truckQuantity","truckPrice","skid","truck","skippedMandatoryAttributes","skipAttributes","onFinally","seriesDraftUpdated","numberOfOptions","seriesType","totalNumberOfOptions_active","totalNumberOfOptions_discontinued","totalNumberOfOptions_deleted","totalNumberOfOptionDescriptions_active","totalNumberOfOptionDescriptions_discontinued","totalNumberOfOptionDescriptions_deleted","totalNumberOfFeatures_active","totalNumberOfFeatures_deleted","updated_seriesImage","updated_seriesName","updated_seriesDescription","updated_manufacturerName","updated_categoryName","updated_listPrice","getPriceComparison","updated_sellPrice","updated_costPrice","updated_skid_quantity","getBulkPriceComparison","updated_skid_price","updated_truck_quantity","updated_truck_price","updated_purchasability","getPurchasabilityComparison","updated_numberOfOptionsActivated","updated_numberOfOptionsDiscontinued","updated_numberOfOptionsDeleted","updated_numberOfOptionDescriptionsActivated","updated_numberOfOptionDescriptionsDiscontinued","updated_numberOfOptionDescriptionsDeleted","updated_numberOfFeaturesActivated","updated_numberOfFeaturesDeleted","newSeries","draftParentId","seriesDraftCreated","SeriesInfoWidget","WidgetWrapper","rootRef","SeriesInfo","OptionsWidget","AttachmentWidget","Attachments","getSeriesDraft","scrollNode","attributeId","seriesNotVisibleToUser","preAddedTags","unscrollableTabItems","RootRef","widgetContainerStyle","UnlistedAttributesWidget","SeriesType","BASIC","FeaturesWidget","FeaturesDialog","brandKey","OptionsDialog","AttributeDialog","searchAfter","DescriptionDialog","PrintDescriptionModal","PimIntegrationDialog","togglePimIntegrationDialog","updateSeriesIntegrationButton","bulkPrice","purchasability","transformedIsPoaPrice","priceRegion","priceRegionKey","transformPriceRegionIsPoa","currencyKey","isPoaBooleanValue","transformedIsPoa","transformInitialValues","ATTRIBUTE_DIALOG_FORM","OPTIONS_DIALOG_FORM","onFail","seriesInfo","_props$square","_props$elevation","rounded","elevations","startDateValidate","endDateValidate","getPricingRequestDisplayColumnByToggle","SendPricingRequestsWidgetUtil","getFiltersConfigToFormState","initData","createdAt","filterResult","periodFilter","BidInvitationUtil","initPeriodFilter","submitted","declined","initFilterForm","generateSaveFilterOptions","sourceValues","statusList","parsingData","bidStartDateValidate","bidEndDateValidate","bidDateDisableChange","createdStartDateValidate","createdEndDateValidate","createdDateDisableChange","updatedStartDateValidate","updatedEndDateValidate","updatedDateDisableChange","getBidDetailUrl","bidReponse","bidUrl","getProjectUrl","invitation","getQuoteUrl","sortInvitationsResponses","invitations","invitationSortingOptions","sortedResponses","BidResponses","sortOption","columnId","BidInvitation","isNullA","isNullB","wholeSalerTableColumns","sortable","beSortable","mappingInvitationSearchFilter","projectNames","sorting","sortingOptions","bidDateAt","mappingResponseSearchFilter","resetDisplayColumns","initHiddenColumn","column","easeInOut","easeOut","easeIn","sharp","standard","complex","formatMs","_options$duration","durationOption","_options$easing","easingOption","_options$delay","animatedProp","getAutoHeightDuration","_decorator2","_reducer2","_server","_root2","Tree","_interopRequireWildcard","Actions","newObj","stringifySafe","Root","applyPrefixToName","cleanValue","isDocumentElement","excludeStaticParent","overflowRx","docEl","easeOutCubic","increment","animateScroll","raf","scrollIntoView","focusedEl","menuRect","focusedRect","overScroll","isTouchCapable","createEvent","isMobileDevice","makeSelectWidgetAdmins","makeSelectWidgetAdminByWidgetId","widgetId","widgetAdmins","makeSelectWidgetLoadedOnce","userWidgetId","makeSelectWidgets","makeSelectWidget","makeSelectWidgetCount","makeSelectWidgetHasNextPage","makeSelectIsFetchingWidgetDataById","makeSelectAllowBatchWidgetsDataFetch","makeSelectDashboard","makeSelectShouldDisableContinuePrint","makeSelectCoverImages","makeSelectSpecPrintError","makeSelectBulkDownloadStatus","listContainer","editButton","warningContainer","selectedSpecSelector","searchingSpecSelector","alternativeProducts","searchingSpec","searchingXrefs","xrefDataList","closePopper","deleteAlternativeProduct","alternativeId","readonly","filterBrandId","selectedAlternativeId","setSelectedAlternativeId","competitorProductSeriesName","competitorProductProductNumber","competitorProductBrand","competitorProductBrandId","competitorProductCategoryName","competitorProductCategoryId","sponsorRank","xrefSponsorProductIdMap","filteredAlts","alternativeProduct","isManufacturerAlt","alternativeProductId","isAlternativeProduct","_seriesName","productSrc","manufacturerSrc","imgSrc","outDated","deleteAlternative","basisProductId","alternativeProductNumber","alternativeSeriesId","alternativeSeriesName","alternativeManufacturer","alternativeCategoryName","handleDeleteLog","typesContainer","ALTERNATIVES_MODAL_ID","cardContainer","typeIcon","actionIcon","selfFirmId","displayDeleteIcon","toggleAlternativeProduct","alternativeType","logoId","_src","detailedManufacturer","typesIcon","iconSelect","isFetchingManufacturers","alternativesManufacturer","deleteAlternativeManufacturer","updateAlternativeManufacturer","logoSrc","setLogoSrc","setNote","isFocusOnManufacturer","setIsFocusOnManufacturer","disabledNote","manufacturerLogoMap","ManufacturerSelection","Autocomplete","cachedManufacturerLogoId","disableClearable","openText","closeText","clearText","noOptionsText","loadingText","innerContainer","groupContainer","addCardContainer","typesLengendIcon","addIcon","progressContainer","progress","ctaButton","ctaContainer","seriesLoading","updatingRules","searchingSpecs","isSavingAlternativeProducts","closeDialog","saveAlternativeProducts","baseProduct","resetManufacturers","setAlternativeProducts","openConfirmation","setOpenConfirmation","setManufacturers","setIsFetchingManufacturers","uniqueSponsorIdMap","filteredXrefDataList","sponsorId","sponsorType","atMaxAlternatives","alternativeProductsProductIdMap","alternativeSponsorProducts","alternativesManufacturers","hasEmptyAlternativesManufacturer","selectedXrefs","orphanedAlternativeProducts","alternativeSponsorProduct","_productSeriesId","alternative","newAlternativeProducts","newAlternativeManufacturer","indexOfAlternative","cleanAlternativeProducts","newAlternativeProduct","fromEntries","XrefTypeInfo","loadingContent","onEntered","onExit","sponsorProduct","tempAlternativeProduct","filterSpecDrawingsByProductName","productSearchTerm","normalizedSearchTerm","ProjectRow","isExpanded","onToggleExpand","onSelect","selectedIndexes","ListItemIcon","ListItemText","primaryTypographyProps","specName","searchOptions","getSearchFilters","CopyToProject","selectionState","setSelectionState","isCreateModalOpen","setIsCreateModalOpen","setSelectedProjectId","expandedProjectId","setExpandedProjectId","sourceProjectId","isCopying","hasSearchedOnce","debouncedSearch","copyProject","createNew","selectedSpecs","hasMultipleDestinationSpecs","mappings","destinationProjectId","destinationType","forceCreateNewSpec","newSpecName","destinationSpecId","newSpecs","destinationName","copyTo","specsDrawingIds","_spec","_specId","renderRow","CreateNewProjectModal","toggle","selectedDrawings","keyedDrawings","specDrawingsFormatted","responseData","newProjectId","SpecificationRow","neq","CopyToSpec","setSelectedItemIndex","quickSearchSpecs","copySpec","itemCount","itemSize","modalWidth","itemIndex","CreateNewSpecModal","projectIdForCreatingSpec","isTestSpec","CopyToMaster","selectedMasterId","setSelectedMasterId","expandedMasterId","setExpandedMasterId","quickSearchMaster","copyMaster","CreateNewMasterFromTemplateModal","selectedTemplateId","createMasterFromTemplate","newMaster","radioGroup","CopyModal","defaultDestinationType","userCanManageMasters","setDestinationType","closeModal","RadioGroup","formatThousandsNumber","dotIndex","intPart","decPart","NON_NUMERIC_INPUT_KEYS","preventNonNumericKeys","trimmedXrefSearchResults","brandRefCounter","categoryRefCounter","objectTypeRefCounter","trimmedResults","productType","brandName","brandNameRef","categoryNameRef","objectTypeRef","resultsKeyRef","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_PROFILE_ID","createStylesOriginal","filled","muiFormControl","useFormControl","fcs","formControlState","marginDense","_props$autoFocus","_props$button","componentProp","_props$ContainerCompo","ContainerComponent","_props$ContainerProps","ContainerProps","ContainerClassName","_props$dense","_props$divider","_props$selected","ListContext","childContext","listItemRef","hasSecondaryAction","alignItemsFlexStart","secondaryAction","backgroundClip","CALL_HISTORY_METHOD","updateLocation","routerActions","withMediaQuery","_mediaQueries","mediaProps","mediaQueries","catchForwardedRef","refKey","DEFAULT_REF_KEY","plainObjectConstrurctor","cloneStyle","newStyle","createRule","decl","jss","declCopy","onCreateRule","by","toCssValue","ignoreImportant","cssValue","getWhitespaceSymbols","linebreak","space","indentStr","indent","toCss","_options$indent","_getWhitespaceSymbols","_prop","_prop2","_value2","allowEmpty","escapeRegex","nativeEscape","BaseStyleRule","isProcessed","renderer","isDefined","renderable","removeProperty","setProperty","attached","StyleRule","_BaseStyleRule","scoped","generateId","selectorText","_proto2","applyTo","setSelector","replaceRule","pluginStyleRule","defaultToStringOptions","atRegExp","ConditionalRule","atMatch","RuleList","addRule","onProcessRule","keyRegExp","pluginConditionalRule","defaultToStringOptions$1","nameRegExp","KeyframesRule","nameMatch","keyRegExp$1","refRegExp","findReferencedKeyframe","replaceRef","refKeyframe","pluginKeyframesRule","onProcessStyle","KeyframeRule","pluginKeyframeRule","FontFaceRule","keyRegExp$2","pluginFontFaceRule","ViewportRule","pluginViewportRule","SimpleRule","keysMap","defaultUpdateOptions","forceUpdateOptions","counter","ruleOptions","_this$options","updateOne","_this$options2","nextValue","_nextValue","_prevValue","StyleSheet","deployed","deploy","insertRule","addRules","deleteRule","_this$rules","PluginsRegistry","internal","onProcessSheet","processedValue","newPlugin","sheets","globalThis$1","moduleId","createGenerateId","ruleCounter","jssId","classNamePrefix","minify","getPropertyValue","cssRule","attributeStyleMap","findPrevNode","insertionPoint","findHigherSheet","parentNode","findHighestSheet","nextSibling","comment","childNodes","nodeValue","findCommentNode","getNonce","_insertRule","appendRule","cssRules","getValidRuleInsertionIndex","DomRenderer","hasInsertedRules","createStyle","nextNode","insertBefore","insertionPointElement","insertStyle","insertRules","nativeParent","latestNativeParent","_insertionIndex","refCssRule","ruleStr","insertionIndex","nativeRule","getRules","instanceCounter","Jss","isInBrowser","createStyleSheet","removeStyleSheet","createJss","hasCSSTOMSupport","getDynamicStyles","withScope","getCurrentScope","startSession","currentScope","_copy2","_copy3","_copy","_toPath","setInWithPath","pathIndex","_isNil","_error","_warning","deleteInWithPath","_result","_firstIndex","structure","_isEqualWith","toProductDrawerEdit","toPackageDrawerEdit","lastOpened","RepViewType","AcViewType","VendorQCViewType","VendorAQViewType","AttachmentAIProcessType","AttachmentAISourceType","AttachmentReplyEmailType","AttachmentPdfQuotation","SECTION_TYPE_NEW","SEARCH_TYPES","PIM_CROSS_REFERENCE_DRAWER_TYPE","_props$error","_props$hiddenLabel","hiddenLabel","_props$margin","_props$required","initialAdornedStart","isAdornedStart","adornedStart","setAdornedStart","initialFilled","isFilled","setFilled","setFocused","onFilled","onEmpty","registerEffect","FormControlContext","marginNormal","apiEndPoint","BidInvitationServiceApi","apiClient","post","findGroupedByQuote","filterClone","filterDateFormat","fetchAllDataWithCount","findUser","fetchData","msquoteconnect","invitationId","updateByField","fetchOneDetailResponse","fetchAllInvitationResponse","fetchAllInvitationResponseByUserType","cleanFilter","filterStr","argIndex","componentWillMount","componentWillReceiveProps","componentWillUpdate","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","newApiName","maybeSnapshot","__suppressDeprecationWarning","QUOTE_INPUT_DELAY","getTemplateCurrency","specConfig","hasNonArchivedProduct","constructSpecDrawingsArrayForDelete","iconMap","submittal","pdfIcon","productBrochure","longSpec","shortSpec","manufacturerSpecSheet","revitSVG","autoCad","autocadIcon","csi","lochinvarSubmittal","bobrickCSIEvolve","bobrickCSITrad","bobrickCSIPrivada","bobrickPlanningGuide","projectQuoteNuAir","DOWNLOAD_GROUPS","DOWNLOAD_GROUP","projectDocuments","labelKey","specifications","bimCad","BORBRICK_CSI_MASTER_SPECS","BORBRICK_PLANNING_GUIDE","WATTS_CSI_MASTER_SPEC","reflow","getTransitionProps","_props$style","getText","texts","BidNoteModal","bidIndex","setBidNote","formKeyContact","formCustomers","customerName","disableBackdropClick","disableEscapeKeyDown","DialogTitle","float","overflowWrap","columnIcon","QuoteCustomersWithBid","selectedCustomers","openColumnsDrawer","toggleColumnsDrawer","onApplyDiscount","disabledColumns","defaultColumns","columnsToDisplay","setColumnsToDisplay","initialLoadRef","openBidNoteModal","setOpenBidNoteModal","editingBidIndex","setEditingBidIndex","isProjectLinked","columnList","QUOTE_CUSTOMER_LIST_COLUMNS","hiddenColumns","filteredColumns","rawColumns","parsedRawColumns","handleColumnsChange","toogleBidNoteModal","QuoteCustomersTable","QuoteContactsDropdown","subTitle","useDivContainer","backspaceRemovesValue","controlShouldRenderValue","bidNotes","ColumnsSelector","columnType","TypographyClasses","_props$underline","setFocusVisible","handlerRef","underlineNone","underlineHover","underlineAlways","headerContainer","filterButton","topHeaderIcon","fabContainer","fabInnerContainer","_disabledFab","searchTooltip","showColumn","showFab","disabledFab","fabTooltip","showFilter","showSearchInput","minimumCharactersText","onClickFilterButton","onClickColumnButton","onClickFab","customizedFab","leftComponent","showUploadProducts","onClickUploadProductsButton","onClickCancelUploadButton","onUploadMenuItemClick","rightComponent","setSearch","canDisplay","setCanDisplay","isUploadMenuOpen","setIsUploadMenuOpen","handleOnUploadMenuClick","getContentAnchorEl","keepMounted","MapShim","getIndex","class_1","__entries__","isBrowser","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","leadingCall","trailingCall","resolvePending","timeoutCallback","timeStamp","addObserver","connect_","removeObserver","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","characterData","_b","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","positions","getHTMLElementContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","clearActive","observation","printSaga","zipFilesFlow","deleteCoverImage","createCoverImage","getPrintHistoryByQuoteId","getCoverImages","genericQuotePrint","genericReportPrint","printReport","cancelPrintReport","genericErpCrobJob","sendQuoteToErp","cancelErpCronJob","pollPrint","genericSpecPrintJob","cancelGenericSpecPrint","genericSpecPrint","getPrintHistoryByFormat","createAnalyticsEvent","bulkSpecCrobJob","cancelBulkSpecCronJob","bulkDownload","createPrintJob","pollPrintJobs","zipFiles","quoteBillingPrint","GENERIC_REPORT_PRINT","GET_PRINT_HISTORY_BY_FORMAT","GET_PRINT_HISTORY_BY_QUOTE_ID","QUOTE_BILLING_PRINT","ZIP_FILES","zipFileId","printType","referenceType","downloadHistory","coverImages","operationId","printData","timerStart","bidInvitationResponseId","isCanada","xAtsLanguageEn","xAtsLanguageFr","oandm","getShopDrawingColor","xAtsLanguage","withTimezoneOffset","queuedDownloads","printId","otherProps","onSuccessCb","shopDrawingDownloadSuccess","timeToDownload","omDownloadSuccess","onFailCb","shopDrawingDownloadFailed","omDownloadFailed","cancellation","provideAiBillableLines","CANCEL_LOADING_REPORT","knownType","salesorder","CANCEL_ERP_CRONJOB","onFinallyCb","localStart","localEnd","queuedDownload","containuePolling","splitquote","quoteexcel","quotexml","successPayload","reportquote","zurn","markssupply","aprsupply","winsupply","spectrum","netsuite","pacificplumbing","kellersupply","spscompanies","macombgroup","northeasternsupply","thegranitegroup","atlanticplumbing","texasplumbing","capitolgroup","lixilsalesforce","nextsupply","pacesupply","famoussupply","plumbingandheating","nationalwholesale","goodin","hirsch","hajoca","hubbard","coburnsupply","isCompositeError","resultId","successMessage","contentType","CONTENT_TYPE","errorMsg","spectoquote","bulkExport","bulkImport","stauts","importPricing","haveConflicts","haveErrors","numbersOfInvalidEntries","bulkimportusers","reportquotebillablelines","publishDraft","getDuplicateProducts","mapIntegration","createIntegratedSeries","specAssist","downloadItem","printEndTime","timerTracker","printClickedStartTime","specBooklet","printGenerateTime","renderTime","printTypes","numberOfPrintTypes","isSuccess","getPrintData","withAvatar","includeLabel","hasPricingOption","includeSwatches","hasSwatchesOption","hasIncludeLabel","drawingsIdsAndProductIds","productIds","drawingAndProductsIdObj","formatAllCaps","outputFormat","includeAlternatives","includeNotes","attention","formatDetails","projectLevelFormatDetails","bulkDownloadWrapper","printJobs","_isMaster","formatDetail","specPrints","printJobsCreated","fileIdsOfPrintJobs","polledFileIds","downloadSpec","zipResponse","endTime","generatePrintClickedStartTime","printedFormats","filteredPrintedFormats","createProductBrochure","createManufacturerSpecSheet","createSubmittal","createSchedule","createShortSpec","createLongSpec","createRevitPackage","responseKey","createSpecBooklet","createCsi","createLochinvarSubmittal","createProjectQuote","hasCsi2026Acl","createCsi2026","responsePrintType","printJob","printJobIds","isFirstPoll","printJobsStatus","sideEffects","printJobId","_printJob","job","childJob","zipFileMeta","breadcrumbText","homeLink","Breadcrumbs","customHeaderImage","localeTitle","useWhite","displayContactUsInHeader","useSecondaryColorForXrefIcon","secondaryColorIconApps","ConditionalPaper","headerBackgroundColor","REQUEST_XREF_MODAL","messageDialog","typographyDialogTitle","selectUserEmail","requestXref","onExited","languageData","LocaleMap","localeSelectorIcon","localeSelectorInputRoot","borderBottomColor","LocaleSelector","singleLocale","languageSelected","languageToggle","localeRegex","newPath","getSteps","getStepContent","specRegion","ptRegion","setDefaultRegion","urlLocationId","__LOCATION_ID__","regionsList","handleNext","addStepNumber","currentStepCount","backStepNumber","requestXrefOpen","xrefClickOnRequestCrossReferenceButton","CustomIcon","iconProps","loadingCompetitorsProducts","selectedRegion","isCanadianDomain","disableRegionSelection","noBreadcrumb","noMainToolTitle","hideLocationSelector","isWatts","isAoSmith","isLochinvar","isDelta","isHaws","isOSB","isContrac","US","CA","caFlag","Mail","horizontalHeader","verticalHeader","newId","newSegment","oldSegment","__LOCATION_SEGMENT__","localeSegment","replaceState","flexAlign","disabledregionSelectionArrow","siteName","isDefault","regionsListAndSpecOrPtLocation","flag","iso_alpha2","stepper","StepConnector","StepIconComponent","uppercase","StepIconProps","stepIcontext","customIcon","toggleModal","toggleRequestModal","appBarColor","fullScreen","Toolbar","envelope","CrossReferenceStepper","ATTRIBUTES_LIST_FILTER_FORM","AttributesListFilter","valuesWithParsedKeys","Drawer","toggleCreateOverrideModeAction","isATSUser","AtsAttributeCell","isAtsAttribute","AtsSvgAtsLogo","AttributeNameCell","parentAttributeName","hasParent","isCreatingOverride","nameExists","overrideName","setOverrideName","isCreatingAttribute","disabledCreateTooltip","createOverride","constructFilters","constructedfilters","PimAttributesListPage","validateAttribute","isValidating","_exists","pureAttributes","pureAttributesCount","searchingPureAttributes","canManageAttributeManagement","identityObject","attributeIdForOverride","newPage","newOffset","handleCreateOverride","pureAttribute","sendAmplitude","newAttribute","pureAttributeCreated","attributeName","handleOverrideOnChange","newOverrideName","handleToggleCreateOverrideMode","handleEdit","openDialog","updatedAttribute","pureAttributeUpdated","originalAttributeName","selectedAttribute","_filters","openDeleteModal","toggleFilterDrawer","openFilterDrawer","searchPureAttributes","currentOptions","currentSearchTerm","currentFilters","currentPage","newOptions","newSearchTerm","newFilters","handlePageChange","handleChangeRowsPerPage","newRow","adjustedPage","handleAddAttribute","getTags","categoryByManufacturer","manufacturerByCategory","filteredTags","_manufacturerId","_categoryId","handleTagClick","tagAnchorEl","tagValueArray","handleClickAway","datatype","DROPDOWN_CELL_DATATYPE","attributesListFilterUniqueKey","getBrandRep","filteredColumnsToDisplay","ToolBar","FilterChipsBar","filtersFormId","contentContainer","contentItemContainer","NotFound","Table","TableHead","tableHead","TableRow","headerCell","TableBody","manufacturerTags","categoryTags","isStandaloneAttribute","isCreateOverrideMode","overrideParentId","DropDownCell","valueArray","TablePagination","pagination","labelRowsPerPage","onChangePage","rowsPerPageOptions","onChangeRowsPerPage","rowsPerPage","ActionsComponent","TablePaginationActions","toolbar","paginationToolbar","EmptyView","emptyPimAttributesList","TagPopper","ATTRIBUTE_DIALOG_ID","tagToTagMap","tagListToTagMap","tagList","selectedPureAttribute","overlayComponentProp","isSearchingPureAttributes","createAttribute","successCB","createAttributeThenSearchAttributes","resetSelectedPureAttribute","updateAttribute","updateAttributeThenSearchAttributes","AttributeDialogProps","providedName","setSelectedAttribute","nameInput","setNameInput","setIsValidating","setExists","setSteps","emptyTagError","setEmptyTagError","selectedAttributeName","resArray","DialogContentText","OptionFields","handleAddTag","handleDeleteTag","SUPPORTED_BROSWERS","useNotSupportedBrowserWarning","browser","Bowser","getBrowser","useSite","siteSelector","logoItem","requestMasterContainer","requestText","contentItem","fullHeight","atsAppLogoLookUp","specLogo","backgroundPosition","ptLogo","pimLogo","ampLogo","badToken","_location","displayLanguageSelector","useConfig","logoPropsConfig","hasRequestMaster","withSignUp","elementId","selectedTab","getSelectedTabIndex","textBlurb","specTool","projectTracker","quoteTool","textBlurbLookUp","warningMsg","AppStyle","Snackbar","SideDiv","SignUpFirstStep","Login","_open","RequestMasterModal","modalOpen","isAbsolute","spliceOne","resolvePathname","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","hasTrailingSlash","valueEqual","aType","bValue","aKeys","bKeys","stripLeadingSlash","hasBasename","stripTrailingSlash","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","notifyListeners","getConfirmation","confirm","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","globalHistory","canUseHistory","ua","supportsHistory","needsHashChangeListener","_props$forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","getDOMLocation","historyState","_window$location","createKey","transitionManager","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","fromLocation","toLocation","toIndex","allKeys","revertPop","initialLocation","listenerCount","checkDOMListeners","isBlocked","prevIndex","nextKeys","unblock","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","getHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","allPaths","pushHashPath","nextPaths","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","nextIndex","nextEntries","canGo","TableDynamicCell","getEmptyCell","indexId","getTextCell","getTimeCell","PRODUCT_ASSETS_CONFIRM_DIALOG","PIM_PRODUCT_DRAWER_FORM","selectedPimSeries","selectedPimProduct","uploadedCutsheetFileIds","setImageId","applyImage","setApplyImage","applyCutsheet","setApplyCutsheet","useAsFinalImage","useAsFinalCutsheet","optionImageId","optionCutsheets","originalMainImageId","formProductMedia","updatedFormMedia","localeKey","formCutsheetFileId","isNotCustomUpload","originalCutsheet","isPricePoa","priceIsOverride","isPoaCustom","isPoaCalculated","originalProduct","updatedProduct","priceUpdate","emptyBulk","bulkType","itemKey","bulkPriceUpdate","originalPurchasability","updatedPurchasability","changes","getSpecSheetAvailability","specSheetType","seriesAttributesToProductAttributes","attributeOption","attributeOptionValue","optionId","PimProductDrawerEdit","refProductNumber","selectedAttributesValues","unselectedRequireCheck","drawerOpen","matchingProduct","matchingAttributes","updateImageOrCutsheetByOption","selectedRadioOption","productAssetsConfirmDialogOpen","seriesAttributeOptions","formAttributeOptions","missingRequire","selectedOptionDescriptionId","nonDeletedValueIds","stillHaveRequire","updatePIMProductDraft","createPimProductDraft","filteredAttributesEntries","filteredAttributes","submitValues","optionsAndCheckboxes","productUpdated","productName","specSheetFileAvailable","specSheetURLAvailable","updated_productImage","updated_productNumber","updated_itemNumber","updated_upc","updated_sku","updated_productDescription","productCreated","Delete","seriesNumber","AccountTree","toggleProductNumberDialog","productNumberDialogOpen","priceInfo","prices","calculatedLabel","calculatedName","isOverrideName","calculatedValue","calculatedIsPOA","CurrencySelector","childOrParentIsAtsUser","haveInformed","ProductNumberDialog","Edit","flagIcon","isCheckingProduct","pimMatchingAttributes","disableOptions","optionKeys","invalidAttributesInfo","optionIndex","attributesOptionValue","optionHasNoActiveValue","disableResetButton","invalidAttributeInfo","valueIndex","isMatchingAttributeOptionValue","optionValue","valueStatusNotActive","wholeOptionsNotDeleted","checkedIcon","swatchInput","swatchBox","crossOverLine","textureIcon","noOptionsAvailable","attachments","renderUpload","UploadComponent","fullUpload","FullMediaUpload","MediaUpload","designColumnSplit","designMediaKeys","AttachFile","mediaContainer","mediaKeys1","disabledForProduct","isPimProductEditDrawer","uploadedCutSheetFileIds","setUploadedCutSheetFileIds","_uploadedCutsheetFileIds","mediaKeys2","links","linkKeys","linkKey","LinkItem","pimMatchingProduct","selectedPimProductId","isProductConfigurable","isProductConfigurableChecking","matchingProductIds","matchingProductIsCurrentProduct","otherMatchingProductIds","otherMatchingProductIdsExist","noProductCanBeConfig","selectedAttributeKeys","hasSelectedDisplayAsAttribute","drawerContainer","imageProductRow","imageLayout","borderBottomStyle","withData","optionIdsMap","optionkey","updatedCurrency","isValidIndex","rectSortingStrategy","newRects","layoutRects","overIndex","oldRect","newRect","defaultScale","verticalListSortingStrategy","overIndexRect","activeIndex","itemGap","currentRect","previousRect","nextRect","getItemGap","ID_PREFIX","containerId","disableTransforms","useDragOverlay","sortedRects","wasSorting","SortableContext","userDefinedItems","isSorting","previousItemsRef","layoutRect","getSortedRects","itemsHaveChanged","defaultAnimateLayoutChanges","transitionProperty","disabledTransition","defaultAttributes","useSortable","animateLayoutChanges","setDroppableNodeRef","userDefinedAttributes","displaceItem","shouldDisplaceDragSource","dragSourceDisplacement","localStrategy","prevNewIndex","shouldAnimateLayoutChanges","setDerivedtransform","setDraggableNodeRef","getTransition","directions","sortableKeyboardCoordinates","hasDifferentScrollAncestors","newScrollAncestors","getSpecsInProject","projectSpec","getProjectSpecsWithFilteredDrawingsWithProduct","allSpecsInProject","filteredDrawings","getAllFilteredDrawingsInProjectWithProductSelected","selectedDrawingsInProjectSize","projectSpecsWithFilteredDrawingsWithProduct","getHasSelectedFilteredDrawingWithProducts","createDraggableTabId","isDraggableTabId","draggableTabId","MuiPickersContext","MuiPickersUtilsProvider","Utils","libInstance","React.createElement","useUtils","checkUtils","calculateSizeAndPositionDataAndUpdateScrollOffset","cellCount","cellSize","computeMetadataCallback","computeMetadataCallbackProps","nextCellsCount","nextCellSize","nextScrollToIndex","scrollToIndex","updateScrollOffsetForScrollToIndex","CellSizeAndPositionManager","cellSizeGetter","estimatedCellSize","_lastMeasuredIndex","_cellSizeGetter","_cellCount","_estimatedCellSize","_layoutVector","LinearLayoutVector","setLength","setDefaultSize","vector","_size","setItemSize","getItemSize","_ref3$align","containerSize","currentOffset","targetIndex","datum","getSizeAndPositionOfCell","maxOffset","minOffset","idealOffset","totalSize","getTotalSize","_findNearestCell","targetOffset","nearestCellIndex","getMaxElementSize","chrome","webstore","ScalingCellSizeAndPositionManager","_ref$maxScrollSize","maxScrollSize","_cellSizeAndPositionManager","_maxScrollSize","configure","getCellCount","getEstimatedCellSize","getLastMeasuredIndex","safeTotalSize","offsetPercentage","_getOffsetPercentage","getSizeAndPositionOfLastMeasuredCell","_safeOffsetToOffset","getUpdatedOffsetForIndex","_offsetToSafeOffset","getVisibleCellRange","resetCell","createCallbackMemoizer","requireAllKeys","cachedIndices","allInitialized","indexChanged","cachedValue","updateScrollIndexHelper","cellSizeAndPositionManager","previousCellsCount","previousCellSize","previousScrollToAlignment","previousScrollToIndex","previousSize","scrollOffset","scrollToAlignment","sizeJustIncreasedFromZero","updateScrollIndexCallback","hasScrollToIndex","win","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","caf","cancelAnimationTimeout","requestAnimationTimeout","_Promise","SCROLL_POSITION_CHANGE_REASONS","_Object$getPrototypeOf","_onGridRenderedMemoizer","_onScrollMemoizer","_deferredInvalidateColumnIndex","_deferredInvalidateRowIndex","_recomputeScrollLeftFlag","_recomputeScrollTopFlag","_horizontalScrollBarSize","_verticalScrollBarSize","_scrollbarPresenceChanged","_renderedColumnStartIndex","_renderedColumnStopIndex","_renderedRowStartIndex","_renderedRowStopIndex","_styleCache","_cellCache","_debounceScrollEndedCallback","_disablePointerEventsTimeoutId","isScrolling","needToResetStyleCache","_invokeOnGridRenderedHelper","onSectionRendered","columnOverscanStartIndex","_columnStartIndex","columnOverscanStopIndex","_columnStopIndex","columnStartIndex","columnStopIndex","rowOverscanStartIndex","_rowStartIndex","rowOverscanStopIndex","_rowStopIndex","rowStartIndex","rowStopIndex","_setScrollingContainerRef","_scrollingContainer","_onScroll","handleScrollEvent","columnSizeAndPositionManager","columnCount","_wrapSizeGetter","columnWidth","_getEstimatedColumnSize","rowSizeAndPositionManager","rowCount","_getEstimatedRowSize","instanceProps","prevColumnWidth","prevRowHeight","prevColumnCount","prevRowCount","prevIsScrolling","prevScrollToColumn","scrollToColumn","prevScrollToRow","scrollToRow","prevScrollLeft","prevScrollTop","scrollbarSize","scrollbarSizeMeasured","scrollDirectionHorizontal","scrollDirectionVertical","scrollPositionChangeReason","_initialScrollTop","_getCalculatedScrollTop","_initialScrollLeft","_getCalculatedScrollLeft","_ref$alignment","alignment","_ref$columnIndex","columnIndex","_ref$rowIndex","offsetProps","_ref2$scrollLeft","scrollLeftParam","_ref2$scrollTop","scrollTopParam","_debounceScrollEnded","autoHeight","autoWidth","totalRowsHeight","totalColumnsWidth","_invokeOnScrollMemoizer","_props2","_ref4$columnIndex","_ref4$rowIndex","_props3","forceUpdate","_updateScrollLeftForScrollToColumn","_updateScrollTopForScrollToRow","_props4","getScrollbarSize","_handleInvalidatedGridSize","stateUpdate","_getScrollToPositionStateUpdate","sizeIsBiggerThanZero","_maybeCallOnScrollbarPresenceChange","_props5","_state","columnOrRowCountJustIncreasedFromZero","_props6","autoContainerWidth","containerRole","containerStyle","noContentRenderer","_state2","_isScrolling","gridStyle","willChange","_resetStyleCache","_calculateChildrenToRender","verticalScrollBarSize","horizontalScrollBarSize","childrenToDisplay","_childrenToDisplay","showNoContentRenderer","onScroll","cellRenderer","cellRangeRenderer","deferredMeasurementCache","overscanColumnCount","overscanIndicesGetter","overscanRowCount","isScrollingOptOut","visibleColumnIndices","visibleRowIndices","horizontalOffsetAdjustment","getOffsetAdjustment","verticalOffsetAdjustment","overscanColumnIndices","overscanCellsCount","startIndex","stopIndex","overscanRowIndices","overscanStartIndex","overscanStopIndex","hasFixedHeight","hasFixedWidth","cellCache","styleCache","scrollingResetTimeInterval","recomputeGridSize","_props7","_onScrollbarPresenceChange","onScrollbarPresenceChange","_ref8","_getScrollLeftForScrollToColumnStateUpdate","_getScrollTopForScrollToRowStateUpdate","maybeStateA","maybeStateB","estimatedColumnSize","estimatedRowSize","_ref9","finalColumn","scrollBarSize","calculatedScrollLeft","finalRow","calculatedScrollTop","renderedCells","areOffsetsAdjusted","canCacheStyle","rowDatum","columnDatum","cellRendererParams","renderedCell","defaultOverscanIndicesGetter","ArrowKeyStepper","_ret","_onKeyDown","_this$_getScrollState","_getScrollState","scrollToColumnPrevious","scrollToRowPrevious","_this$_getScrollState2","_updateScrollState","_onSectionRendered","_getScrollState2","isControlled","onScrollToChange","AutoSizer","defaultHeight","defaultWidth","_onResize","disableHeight","disableWidth","onResize","_parentNode","_height","_width","newHeight","newWidth","_setRef","autoSizer","_autoSizer","_detectElementResize","createDetectElementResize","addResizeListener","removeResizeListener","outerStyle","childParams","CellMeasurer","_measure","_this$props$columnInd","_this$props$rowIndex","_this$_getCellMeasure","_getCellMeasurements","getHeight","getWidth","_maybeMeasureCell","measure","styleWidth","styleHeight","_props$columnIndex","_props$rowIndex","_getCellMeasurements2","invalidateCellSizeAfterRender","__internalCellMeasurerFlag","CellMeasurerCache","_cellHeightCache","_cellWidthCache","_columnWidthCache","_rowHeightCache","_columnCount","_rowCount","_keyMapper","_defaultWidth","_defaultHeight","fixedHeight","_hasFixedHeight","_hasFixedWidth","_minHeight","_minWidth","defaultKeyMapper","_updateCachedColumnAndRowSizes","columnKey","rowKey","CollectionView","_calculateSizeAndPositionDataOnNextUpdate","_onSectionRenderedMemoizer","_invokeOnSectionRenderedHelper","cellLayoutManager","getLastRenderedIndices","_updateScrollPositionForScrollToCell","scrollToCell","scrollPosition","getScrollPositionForCell","_setScrollPosition","_enablePointerEventsAfterDelay","_this$props3","isScrollingChange","_scrollbarSize","_cellLayoutManager$ge","totalHeight","totalWidth","cancelable","_scrollbarSizeMeasured","_cellLayoutManager$ge2","horizontalOverscanSize","verticalOverscanSize","_lastRenderedCellCount","_lastRenderedCellLayoutManager","calculateSizeAndPositionData","_cellLayoutManager$ge3","cellRenderers","collectionStyle","Section","_indexMap","SectionManager","sectionSize","_sectionSize","_cellMetadata","_sections","getSections","getCellIndices","sectionXStart","sectionXStop","sectionYStart","sectionYStop","sectionX","sectionY","cellMetadatum","addCellIndex","_ref$align","cellOffset","_lastRenderedCellIndices","_isScrollingChange","_setCollectionViewRef","_collectionView","recomputeCellSizesAndPositions","cellSizeAndPositionGetter","cellMetadata","sectionManager","registerCell","_calculateSizeAndPositionData","_sectionManager","cellGroupRenderer","getCellMetadata","cellRendererProps","ColumnSizer","_registerChild","columnMaxWidth","columnMinWidth","_registeredChild","safeColumnMinWidth","safeColumnMaxWidth","adjustedWidth","getColumnWidth","registerChild","InfiniteLoader","_loadMoreRowsMemoizer","_onRowsRendered","autoReload","_doStuff","_lastRenderedStartIndex","_lastRenderedStopIndex","onRowsRendered","unloadedRanges","loadMoreRows","unloadedRange","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","recomputeSize","recomputeRowHeights","forceUpdateReactVirtualizedComponent","isRowLoaded","minimumBatchSize","rangeStartIndex","rangeStopIndex","potentialStopIndex","firstUnloadedRange","_index2","scanForUnloadedRanges","squashedUnloadedRanges","_loadUnloadedRanges","registeredChild","_cellRenderer","rowRenderer","_Object$getOwnPropertyDescriptor","getOffsetForCell","measureAllCells","_ref7$columnIndex","_ref7$rowIndex","scrollToPosition","noRowsRenderer","accessibilityOverscanIndicesGetter","ge","_GEP","_GEA","_GTP","_GTA","_LTP","_LTA","le","_LEP","_LEA","_EQP","_EQA","IntervalTreeNode","leftPoints","rightPoints","rebuild","intervals","ntree","createIntervalTree","rebuildWithInterval","rebuildWithoutInterval","reportLeftRange","hi","reportRightRange","lo","reportRange","compareNumbers","compareBegin","compareEnd","pts","leftIntervals","rightIntervals","centerIntervals","IntervalTree","bounds","queryPoint","queryInterval","tproto","PositionCache","_columnSizeMap","_intervalTree","_leftMap","defaultCellHeight","unmeasuredCellCount","tallestColumnSize","renderCallback","columnSizeMap","columnHeight","Masonry","_invalidateOnUpdateStartIndex","_invalidateOnUpdateStopIndex","_positionCache","_startIndex","_startIndexMemoized","_stopIndex","_stopIndexMemoized","_debounceResetIsScrollingCallback","eventScrollTop","_getEstimatedTotalHeight","_debounceResetIsScrolling","_populatePositionCache","_checkInvalidateOnUpdate","_invokeOnScrollCallback","_invokeOnCellsRenderedCallback","_debounceResetIsScrollingId","cellMeasurerCache","overscanByPixels","rowDirection","estimateTotalHeight","shortestColumnSize","measuredCellCount","batchSize","estimatedColumnCount","_onScrollMemoized","_onCellsRendered","onCellsRendered","cellPositioner","_cellPositioner","_left","_top","setPosition","CellMeasurerCacheDecorator","_cellMeasurerCache","_columnIndexOffset","_rowIndexOffset","_params$columnIndexOf","columnIndexOffset","_params$rowIndexOffse","rowIndexOffset","MultiGrid","_initialiseProps","fixedColumnCount","fixedRowCount","_maybeCalculateCachedStyles","_deferredMeasurementCacheBottomLeftGrid","_deferredMeasurementCacheBottomRightGrid","_deferredMeasurementCacheTopRightGrid","_bottomLeftGrid","_bottomRightGrid","_topLeftGrid","_topRightGrid","_ref2$columnIndex","_ref2$rowIndex","adjustedColumnIndex","adjustedRowIndex","_leftGridWidth","_topGridHeight","_prepareForRender","_containerOuterStyle","_containerTopStyle","_renderTopLeftGrid","_renderTopRightGrid","_containerBottomStyle","_renderBottomLeftGrid","_renderBottomRightGrid","_getTopGridHeight","leftGridWidth","_getLeftGridWidth","topGridHeight","resetAll","enableFixedColumnScroll","enableFixedRowScroll","styleBottomLeftGrid","styleBottomRightGrid","styleTopLeftGrid","styleTopRightGrid","sizeChange","_lastRenderedHeight","_lastRenderedWidth","leftSizeChange","_lastRenderedColumnWidth","_lastRenderedFixedColumnCount","topSizeChange","_lastRenderedFixedRowCount","_lastRenderedRowHeight","_lastRenderedStyle","_lastRenderedStyleBottomLeftGrid","_bottomLeftGridStyle","_lastRenderedStyleBottomRightGrid","_bottomRightGridStyle","_lastRenderedStyleTopLeftGrid","_topLeftGridStyle","_lastRenderedStyleTopRightGrid","_topRightGridStyle","hideBottomLeftGridScrollbar","showVerticalScrollbar","additionalRowCount","_getBottomGridHeight","gridWidth","bottomLeftGrid","_cellRendererBottomLeftGrid","classNameBottomLeftGrid","_onScrollTop","_bottomLeftGridRef","_rowHeightBottomGrid","_cellRendererBottomRightGrid","classNameBottomRightGrid","_columnWidthRightGrid","_bottomRightGridRef","_getRightGridWidth","classNameTopLeftGrid","_topLeftGridRef","hideTopRightGridScrollbar","showHorizontalScrollbar","additionalColumnCount","additionalHeight","gridHeight","topRightGrid","_cellRendererTopRightGrid","classNameTopRightGrid","_onScrollLeft","_topRightGridRef","_props8","_state3","scrollInfo","_state4","_props9","_state5","ScrollSync","defaultHeaderRowRenderer","SortDirection","ASC","DESC","SortIndicator","defaultHeaderRenderer","showSortIndicator","defaultRowRenderer","onRowClick","onRowDoubleClick","onRowMouseOut","onRowMouseOver","onRowRightClick","a11yProps","onDoubleClick","onMouseOut","onContextMenu","Column","cellDataGetter","cellData","defaultSortDirection","headerRenderer","scrollbarWidth","_createColumn","_createRow","_ref3$columnIndex","_ref3$rowIndex","_setScrollbarWidth","gridClassName","headerRowRenderer","rowClassName","rowStyle","availableRowsHeight","rowClass","rowStyleObject","_cachedColumnStyles","flexStyles","_getFlexStyleForColumn","_getHeaderColumns","onColumnClick","_column$props","columnData","headerClassName","headerStyle","onHeaderClick","_column$props2","disableSort","sortEnabled","ReactVirtualized__Table__sortableHeaderColumn","renderedHeader","headerOnClick","headerOnKeyDown","headerTabIndex","headerAriaSort","headerAriaLabel","newSortDirection","rowGetter","flattenedStyle","_getRowHeight","customStyle","flexValue","msFlex","WebkitFlex","_createHeader","_Grid","mountedInstances","originalBodyPointerEvents","disablePointerEventsTimeoutId","enablePointerEventsIfDisabled","enablePointerEventsAfterDelayCallback","__resetIsScrolling","onScrollWindow","maximumTimeout","enablePointerEventsAfterDelay","scrollElement","__handleWindowScrollEvent","registerScrollListener","unregisterScrollListener","isWindow","getBoundingBox","getDimensions","_window","innerWidth","serverHeight","serverWidth","getPositionOffset","containerElement","elementRect","containerRect","getScrollOffset","_elementRect","_containerRect","scrollX","WindowScroller","_positionFromTop","_positionFromLeft","_child","updatePosition","_onChildScroll","_registerResizeListener","_unregisterResizeListener","_scrollLeft","_scrollTop","thisNode","prevScrollElement","onChildScroll","getQuotePath","getQuoteEditPath","SNACKBAR_DEFAULT_MESSAGE","SNACKBAR_DEFAULT_SEVERITY","SNACKBAR_DEFAULT_ANCHOR_ORIGIN","atsApiState","overlayComponents","overlayComponentProps","overlayComponentContent","lastOpenedOverlayComponentId","printSpecIdTypeMap","printSpecIdTypeFiles","loadingStates","specToolProjectListIsLoading","fileAttachmentIsLoading","GET_PRODUCT_DETAILS_LOADING","hasError","showMobileAppMenu","snackbarState","isSnackbarOpen","pollingPrintId","vsbEnv","appVersionData","attributeDialogState","optionDialogState","appMenuOpen","liveChatOpen","takeoffListOpen","forceState","versionData","mutableState","PRINT_SPEC_COMPLETED","printSpecTypes","updatedPrintSpecTypes","isAuthTokenExist","isVerifyingUser","userIsAuthenticated","connectedReduxRedirect","allowRedirectBack","authenticatingSelector","authenticatedSelector","redirectAction","wrapperDisplayName","AuthenticatingComponent","defaultAuthenticatingComponent","locationHelper","locationHelperBuilder","userIsNotAuthenticated","getRedirectQueryParam","locations","modifiedDateValidateFunc","XrefListFilter","locationId","formatedModifiedDate","competitorManufacturer","sponsorManufacturer","andFilters","reloadList","getAllManufacturers","allManufacturers","chipWrap","registeredFields","fieldsList","valuePath","filtersFormValues","updatePimSeriesListFilterFormValues","isDraftPimSeriesList","fieldsWithMultiValues","filterChipsList","formsValuePath","labelValue","selectedLocation","booleanValue","statusString","DESCRIPTIONS_LIST_FILTER_FORM","labelPathTranslation","getLabelValue","MASTER_TEMPLATE_LIST_FILTER_FORM","MASTER_LIST_FILTER_FORM","getLabelKey","labelList","originalFieldName","aLabel","bLabel","deleletedIndex","updatedList","XREF_LIST_FILTER_FORM","SERIES_LIST_FILTER_FORM","disableSubmit","cancelText","saveText","warningText","isProcessing","isProcessingText","__webpack_modules__","__unused_webpack_module","__w_pdfjs_require__","StatTimer","RenderingCancelledException","PixelsPerInch","PageViewport","PDFDateString","LinkTarget","DOMStandardFontDataFactory","DOMSVGFactory","DOMCanvasFactory","DOMCMapReaderFactory","addLinkAttributes","_ref4$enabled","_util","assert","urlNullRemoved","removeNullCharacters","targetStr","NONE","SELF","BLANK","PARENT","TOP","DEFAULT_LINK_REL","deprecated","getFilenameFromUrl","getPdfFilenameFromUrl","defaultFilename","isDataScheme","reURI","reFilename","splitURI","suggestedFilename","getXfaPageViewport","xfaPage","_ref6$scale","_ref6$rotation","_xfaPage$attributes$s","isPdfFile","isValidFetchUrl","loadScript","removeScriptElement","script","onload","onerror","_regenerator","_base_factory","minLen","_arrayLikeToArray","_unsupportedIterableToArray","sham","_isNativeReflectConstruct","PDF","PDF_TO_CSS_UNITS","_BaseCanvasFactory","_ref$ownerDocument","_document","canvas","BaseCanvasFactory","_x","_fetchData","mark","_callee","asTypedArray","_args","_context","baseURI","statusText","t1","t2","t3","stringToBytes","t4","abrupt","responseType","_BaseCMapReaderFactor","_super2","compressionType","isCompressed","cMapData","BaseCMapReaderFactory","_BaseStandardFontData","_super3","BaseStandardFontDataFactory","_BaseSVGFactory","_super4","createElementNS","BaseSVGFactory","_ref2$offsetX","offsetX","_ref2$offsetY","offsetY","_ref2$dontFlip","dontFlip","rotateA","rotateB","rotateC","rotateD","offsetCanvasX","offsetCanvasY","centerX","centerY","_ref3$scale","_ref3$rotation","_ref3$offsetX","_ref3$offsetY","_ref3$dontFlip","Util","applyTransform","topLeft","bottomRight","applyInverseTransform","_BaseException","_super5","BaseException","pdfDateStringRegex","started","outBuf","longest","_iterator","_step2","_iterator2","_time","baseUrl","protocol","universalTimeRelation","offsetHour","offsetMinute","__unused_webpack_exports","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","isGeneratorFunction","genFun","awrap","skipTempReset","rootRecord","rval","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","nmd","regeneratorRuntime","accidentalStrictMode","_arrayWithHoles","_s","_arr","_n","_iterableToArrayLimit","_nonIterableRest","VerbosityLevel","UnknownErrorException","UnexpectedResponseException","UNSUPPORTED_FEATURES","TextRenderingMode","StreamType","RenderingIntentFlag","PermissionFlag","PasswordResponses","PasswordException","PageActionEventType","OPS","MissingPDFException","IsLittleEndianCached","IsEvalSupportedCached","InvalidPDFException","ImageKind","IDENTITY_MATRIX","FormatError","FontType","FONT_IDENTITY_MATRIX","DocumentActionEventType","CMapCompressionType","AnnotationType","AnnotationStateModelType","AnnotationReviewState","AnnotationReplyType","AnnotationMode","AnnotationMarkedState","AnnotationFlag","AnnotationFieldFlag","AnnotationBorderStyleType","AnnotationActionEventType","AbortException","arrayByteLength","arraysToBytes","resultLength","itemLength","bytesToString","MAX_ARGUMENT_COUNT","strBuf","chunkEnd","subarray","forceDataSchema","Blob","digits","b1","b2","b3","d4","createPromiseCapability","capability","isSettled","createValidAbsoluteUrl","addDefaultProtocol","dots","tryConvertEncoding","stringToUTF8String","absoluteUrl","_isValidProtocol","escapeString","getModificationDate","getUTCHours","getUTCSeconds","getVerbosityLevel","verbosity","INFOS","isArrayEqual","isAscii","isBool","isNum","isSameOrigin","otherUrl","objectFromMap","_e3","_step$value","objectSize","replaceInvisible","InvisibleCharactersRegExp","NullCharactersRegExp","setVerbosityLevel","string32","stringToPDFString","_i2","_i3","PDFStringTranslateTable","stringToUTF16BEString","_char","unreachable","utf8StringToString","ANY","DISPLAY","PRINT","ANNOTATIONS_FORMS","ANNOTATIONS_STORAGE","ANNOTATIONS_DISABLE","OPLIST","DISABLE","ENABLE","ENABLE_FORMS","ENABLE_STORAGE","MODIFY_CONTENTS","COPY","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","COPY_FOR_ACCESSIBILITY","ASSEMBLE","PRINT_HIGH_QUALITY","FILL","STROKE","FILL_STROKE","INVISIBLE","FILL_ADD_TO_PATH","STROKE_ADD_TO_PATH","FILL_STROKE_ADD_TO_PATH","ADD_TO_PATH","FILL_STROKE_MASK","ADD_TO_PATH_FLAG","GRAYSCALE_1BPP","RGB_24BPP","RGBA_32BPP","TEXT","LINK","FREETEXT","LINE","SQUARE","CIRCLE","POLYGON","POLYLINE","HIGHLIGHT","UNDERLINE","SQUIGGLY","STRIKEOUT","STAMP","CARET","INK","POPUP","FILEATTACHMENT","SOUND","MOVIE","WIDGET","SCREEN","PRINTERMARK","TRAPNET","WATERMARK","THREED","REDACT","MARKED","REVIEW","UNMARKED","ACCEPTED","REJECTED","COMPLETED","GROUP","REPLY","HIDDEN","NOZOOM","NOROTATE","NOVIEW","READONLY","LOCKED","TOGGLENOVIEW","LOCKEDCONTENTS","REQUIRED","NOEXPORT","MULTILINE","PASSWORD","NOTOGGLETOOFF","RADIO","PUSHBUTTON","COMBO","EDIT","SORT","FILESELECT","MULTISELECT","DONOTSPELLCHECK","DONOTSCROLL","COMB","RICHTEXT","RADIOSINUNISON","COMMITONSELCHANGE","SOLID","DASHED","BEVELED","INSET","U","Fo","Bl","PO","PC","PV","PI","WC","WS","DS","WP","DP","UNKNOWN","FLATE","LZW","DCT","JPX","JBIG","A85","AHX","CCF","RLX","TYPE1","TYPE1STANDARD","TYPE1C","CIDFONTTYPE0","CIDFONTTYPE0C","TRUETYPE","CIDFONTTYPE2","TYPE3","OPENTYPE","TYPE0","MMTYPE1","ERRORS","WARNINGS","BINARY","STREAM","dependency","setLineWidth","setLineCap","setLineJoin","setMiterLimit","setDash","setRenderingIntent","setFlatness","setGState","save","restore","lineTo","curveTo","curveTo2","curveTo3","closePath","rectangle","closeStroke","eoFill","fillStroke","eoFillStroke","closeFillStroke","closeEOFillStroke","endPath","eoClip","beginText","endText","setCharSpacing","setWordSpacing","setHScale","setLeading","setFont","setTextRenderingMode","setTextRise","moveText","setLeadingMoveText","setTextMatrix","nextLine","showText","showSpacedText","nextLineShowText","nextLineSetSpacingShowText","setCharWidth","setCharWidthAndBounds","setStrokeColorSpace","setFillColorSpace","setStrokeColor","setStrokeColorN","setFillColor","setFillColorN","setStrokeGray","setFillGray","setStrokeRGBColor","setFillRGBColor","setStrokeCMYKColor","setFillCMYKColor","shadingFill","beginInlineImage","beginImageData","endInlineImage","paintXObject","markPoint","markPointProps","beginMarkedContent","beginMarkedContentProps","endMarkedContent","beginCompat","endCompat","paintFormXObjectBegin","paintFormXObjectEnd","beginGroup","endGroup","beginAnnotations","endAnnotations","beginAnnotation","endAnnotation","paintJpegXObject","paintImageMaskXObject","paintImageMaskXObjectGroup","paintImageXObject","paintInlineImageXObject","paintInlineImageXObjectGroup","paintImageXObjectRepeat","paintImageMaskXObjectRepeat","paintSolidColorImageMask","constructPath","unknown","forms","javaScript","signatures","smask","shadingPattern","font","errorTilingPattern","errorExtGState","errorXObject","errorFontLoadType3","errorFontState","errorFontMissing","errorFontTranslate","errorColorSpace","errorOperatorList","errorFontToUnicode","errorFontLoadNative","errorFontBuildPath","errorFontGetPath","errorMarkedContent","errorContentSubStream","NEED_PASSWORD","INCORRECT_PASSWORD","_BaseException2","_BaseException3","_BaseException4","_BaseException5","_BaseException6","_super6","_BaseException7","_super7","buffer8","isLittleEndian","isEvalSupported","hexNumbers","transpose","sx","sy","orderedX","orderedY","normalizeRect","x0","y0","x3","y3","b2ac","sqrtb2ac","tvalues","mt","jlen","_is_node","_pdfjsCompatibilityChecked","isNodeJS","DOMMatrix","allSettled","ReadableStream","versions","electron","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPropertyKey","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","fails","$propertyIsEnumerable","NASHORN_BUG","IndexedObject","requireObjectCoercible","uncurryThis","classof","FunctionPrototype","callBind","stringSlice","getMethod","ordinaryToPrimitive","wellKnownSymbol","TO_PRIMITIVE","pref","exoticToPrim","isCallable","getBuiltIn","isPrototypeOf","USE_SYMBOL_AS_UID","aFunction","NATIVE_SYMBOL","V8_VERSION","Deno","v8","aCallable","tryToString","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","IS_PURE","copyright","SHARED","postfix","EXISTS","definePropertyModule","anObject","$defineProperty","Attributes","inspectSource","InternalStateModule","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","getInternalState","enforceInternalState","enforce","TEMPLATE","unsafe","simple","functionToString","NATIVE_WEAK_MAP","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","wmget","wmhas","wmset","metadata","facade","STATE","getterFor","TYPE","getDescriptor","PROPER","getOwnPropertyDescriptorModule","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","internalObjectKeys","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","toIntegerOrInfinity","feature","POLYFILL","NATIVE","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","fromArray","CSSMatrix","m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44","M11","M12","M21","M22","M41","M42","fromMatrix","fromString","invalidStringError","tf","xyz","xyza","rotateAxisAngle","rotate","skewX","skewY","axeValues","Rotate","rz","degToRad","radX","radY","radZ","cosx","cos","sinx","sin","cosy","siny","cosz","sinz","RotateAxisAngle","alpha","angle","sinA","cosA","sinA2","z2","SkewX","radA","tan","SkewY","Multiply","ARGS","setMatrixValue","prototypeAccessors","isIdentity","is2D","Float64Array","Float32Array","RX","RY","RZ","transformPoint","Version","addToUnscopables","Iterators","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","Arguments","UNSCOPABLES","ArrayPrototype","activeXDocument","enumBugKeys","html","documentCreateElement","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","write","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","contentWindow","NullProtoObjectViaIFrame","Properties","FunctionName","createIteratorConstructor","setToStringTag","IteratorsCore","PROPER_FUNCTION_NAME","BUGGY_SAFARI_ITERATORS","ITERATOR","returnThis","NAME","IteratorConstructor","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","TO_STRING_TAG","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","ENUMERABLE_NEXT","PrototypeOfArrayIteratorPrototype","arrayIterator","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","TAG","aPossiblePrototype","CORRECT_SETTER","createProperty","AS_ENTRIES","isArrayIteratorMethod","getIteratorMethod","iteratorClose","Result","ResultPrototype","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","callFn","usingIterator","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","innerResult","innerError","propertyKey","clearErrorStack","installErrorCause","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","isInstance","AggregateErrorPrototype","errorsArray","AggregateError","arraySlice","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","IS_FIREFOX_OR_SAFARI_STACK","dropEntries","fin","cause","$default","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","NativePromise","redefineAll","setSpecies","anInstance","checkCorrectnessOfIteration","speciesConstructor","microtask","promiseResolve","hostReportErrors","newPromiseCapabilityModule","perform","IS_BROWSER","IS_NODE","SPECIES","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newPromiseCapability","newGenericPromiseCapability","DISPATCH_EVENT","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","isReject","reactions","exited","reaction","fail","rejection","onHandleUnhandled","onUnhandled","initEvent","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","$promiseResolve","alreadyCalled","CONSTRUCTOR_NAME","Prototype","SAFE_CLOSING","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","aConstructor","defaultConstructor","isConstructor","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","port","IS_IOS","setImmediate","clearImmediate","Dispatch","MessageChannel","ONREADYSTATECHANGE","run","runner","postMessage","host","nextTick","port2","port1","onmessage","importScripts","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","createTextNode","Pebble","promiseCapability","PromiseCapability","$$resolve","$$reject","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","real","STRING_ITERATOR","CONVERT_TO_STRING","codeAt","SymbolPolyfill","globals","typeIsObject","rethrowAssertionErrorRejection","originalPromise","originalPromiseThen","originalPromiseResolve","originalPromiseReject","newPromise","promiseResolvedWith","promiseRejectedWith","PerformPromiseThen","uponPromise","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","globalQueueMicrotask","resolvedPromise","reflectCall","promiseCall","SimpleQueue","_cursor","_front","_elements","_back","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","oldFront","newFront","oldCursor","newCursor","front","ReadableStreamReaderGenericInitialize","reader","_ownerReadableStream","_reader","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","MathTrunc","trunc","assertDictionary","assertFunction","assertObject","assertRequiredArgument","assertRequiredField","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","AsyncIteratorPrototype","IsReadableStreamLocked","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","releaseLock","_disturbed","_readableStreamController","closed","ReadableStreamAsyncIteratorImpl","preventCancel","_ongoingPromise","_isFinished","_preventCancel","nextSteps","_nextSteps","returnSteps","_returnSteps","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","streamAsyncIteratorBrandCheckException","NumberIsNaN","CreateArrayFromList","CopyDataBlockBytes","dest","destOffset","srcOffset","ArrayBufferSlice","CloneAsUint8Array","DequeueValue","_queue","_queueTotalSize","EnqueueValueWithSize","RangeError","ResetQueue","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","respond","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespond","respondWithNewView","isView","ReadableByteStreamControllerRespondWithNewView","ReadableByteStreamController","IsReadableByteStreamController","byteStreamControllerBrandCheckException","ReadableByteStreamControllerGetBYOBRequest","ReadableByteStreamControllerGetDesiredSize","_closeRequested","_controlledReadableByteStream","ReadableByteStreamControllerClose","enqueue","ReadableByteStreamControllerEnqueue","ReadableByteStreamControllerError","ReadableByteStreamControllerClearPendingPullIntos","_cancelAlgorithm","ReadableByteStreamControllerClearAlgorithms","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","bufferByteLength","bytesFilled","elementSize","viewConstructor","readerType","_pendingPullIntos","ReadableByteStreamControllerCallPullIfNeeded","shouldPull","_started","ReadableStreamHasBYOBReader","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","headOfQueue","bytesToCopy","destStart","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableStreamClose","_byobRequest","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInternal","firstDescriptor","ReadableByteStreamControllerRespondInClosedState","remainderSize","ReadableByteStreamControllerRespondInReadableState","transferredBuffer","firstPendingPullInto","ReadableStreamError","byobRequest","SetUpReadableStreamBYOBRequest","_strategyHWM","viewByteLength","SetUpReadableByteStreamController","startAlgorithm","pullAlgorithm","cancelAlgorithm","highWaterMark","AcquireReadableStreamBYOBReader","ReadableStreamBYOBReader","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","desiredSize","byobReaderBrandCheckException","ReadableStreamBYOBReaderRead","BYTES_PER_ELEMENT","emptyView","ReadableByteStreamControllerPullInto","ExtractHighWaterMark","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","supportsAbortController","WritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","streamBrandCheckException$2","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","getWriter","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_abortReason","_abortController","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","writer","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","writeRequest","abortRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","defaultControllerBrandCheckException$2","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","createAbortController","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","abortReason","NativeDOMException","DOMException","DOMException$1","isDOMExceptionConstructor","captureStackTrace","createDOMExceptionPolyfill","ReadableStreamPipeTo","preventClose","preventAbort","shuttingDown","currentWrite","shutdownWithAction","aborted","isOrBecomesErrored","shutdown","isOrBecomesClosed","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed_1","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","finalize","newError","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","defaultControllerBrandCheckException$1","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","ReadableStreamTee","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","readAgainForBranch1","readAgainForBranch2","canceled1","canceled2","cancelPromise","forwardReaderError","thisReader","pullWithDefaultReader","chunk1","chunk2","cloneE","pull1Algorithm","pull2Algorithm","pullWithBYOBReader","forBranch2","byobBranch","otherBranch","byobCanceled","clonedChunk","otherCanceled","cancel1Algorithm","compositeReason","cancelResult","cancel2Algorithm","CreateReadableByteStream","ReadableByteStreamTee","readAgain","CreateReadableStream","ReadableStreamDefaultTee","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","convertPipeOptions","isAbortSignal","assertAbortSignal","rawUnderlyingSource","underlyingSource","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","underlyingByteSource","SetUpReadableByteStreamControllerFromUnderlyingSource","SetUpReadableStreamDefaultControllerFromUnderlyingSource","streamBrandCheckException$1","getReader","rawOptions","convertReaderOptions","pipeThrough","rawTransform","readable","convertReadableWritablePair","pipeTo","tee","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","TransformStream","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","readableType","writableType","convertTransformer","startPromise_resolve","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","streamBrandCheckException","IsTransformStreamDefaultController","defaultControllerBrandCheckException","terminate","TransformStreamDefaultControllerTerminate","readableController","ReadableStreamDefaultControllerHasBackpressure","_createCanvas","getContext","canvasAndContext","_ref$baseUrl","_ref$isCompressed","_fetch","_ref3$baseUrl","_fetch2","_callee2","_context2","_x2","_createSVG","build","RenderTask","PDFWorker","PDFPageProxy","PDFDocumentProxy","PDFDocumentLoadingTask","PDFDataRangeTransport","LoopbackPort","DefaultStandardFontDataFactory","DefaultCanvasFactory","DefaultCMapReaderFactory","getDocument","setPDFNetworkStreamFactory","_display_utils","_font_loader","_node_utils","_annotation_storage","_canvas","_worker_options","_message_handler","_metadata","_optional_content_config","_transport_stream","_xfa_text","_classPrivateFieldInitSpec","privateMap","_checkPrivateRedeclaration","privateCollection","_classPrivateFieldSet","receiver","_classApplyDescriptorSet","_classExtractFieldDescriptor","_classPrivateFieldGet","_classApplyDescriptorGet","DEFAULT_RANGE_CHUNK_SIZE","RENDERING_CANCELLED_TIMEOUT","NodeCanvasFactory","NodeCMapReaderFactory","NodeStandardFontDataFactory","createPDFNetworkStream","pdfNetworkStreamFactory","rangeTransport","rangeChunkSize","CMapReaderFactory","StandardFontDataFactory","ignoreErrors","stopAtErrors","fontExtraProperties","pdfBug","enableXfa","docBaseUrl","maxImageSize","useWorkerFetch","disableFontFace","useSystemFonts","disableRange","disableStream","disableAutoFetch","workerParams","GlobalWorkerOptions","workerPort","fromPort","_worker","docId","destroyed","workerIdPromise","_fetchDocument","networkStreamPromise","networkStream","PDFDataTransportStream","progressiveDone","contentDispositionFilename","httpHeaders","withCredentials","workerId","messageHandler","MessageHandler","WorkerTransport","_transport","_capability","_x3","_x4","_fetchDocument2","_callee7","pdfDataRangeTransport","_context7","sendWithPromise","apiVersion","cMapUrl","standardFontDataUrl","idCounters","onPassword","onProgress","onUnsupportedFeature","_destroy","_this$_transport","_rangeListeners","_progressListeners","_progressiveReadListeners","_progressiveDoneListeners","_readyCapability","_step3","_iterator3","_step4","_iterator4","pdfInfo","_pdfInfo","fingerprints","streamTypes","fontTypes","annotationStorage","numPages","_htmlForXfa","pageNumber","getPage","getPageIndex","getDestinations","getDestination","getPageLabels","getPageLayout","getPageMode","getViewerPreferences","getOpenAction","getAttachments","getJavaScript","getDocJSActions","getOutline","getOptionalContentConfig","getPermissions","getMetadata","getMarkInfo","downloadInfoCapability","keepLoadedFonts","startCleanup","isPureXfa","loadingTask","loadingParams","saveDocument","getFieldObjects","hasJSActions","getCalculationOrderIds","pageIndex","pageInfo","_pageIndex","_pageInfo","_ownerDocument","_stats","_pdfBug","commonObjs","objs","PDFObjects","cleanupAfterRender","pendingCleanup","_intentStates","_annotationPromises","userUnit","_ref4$intent","intent","intentArgs","getRenderingIntent","getAnnotations","renderingIntent","annotations","_step5","_iterator5","_loop","annotation","titleObj","contentsObj","_jsActionsPromise","getPageJSActions","_getXfa","_callee3","_this$_transport$_htm","_context3","_arguments$","_arguments$2","_intentState","canvasContext","_ref5$intent","_ref5$annotationMode","annotationMode","_ref5$transform","_ref5$imageLayer","imageLayer","_ref5$canvasFactory","canvasFactory","_ref5$background","_ref5$optionalContent","optionalContentConfigPromise","_ref5$annotationCanva","annotationCanvasMap","renderInteractiveForms","includeAnnotationStorage","intentState","streamReaderCancelTimeout","canvasFactoryInstance","intentPrint","displayReadyCapability","operatorList","fnArray","argsArray","lastChunk","_pumpOperatorList","renderTasks","internalRenderTask","_tryCleanup","_abortOperatorList","timeEnd","InternalRenderTask","useRequestAnimationFrame","renderTask","transparency","optionalContentConfig","initializeGraphics","operatorListChanged","_ref8$intent","_ref8$annotationMode","opListReadCapability","opListTask","_intentState2","_ref9$normalizeWhites","normalizeWhitespace","_ref9$disableCombineT","disableCombineTextItems","_ref9$includeMarkedCo","includeMarkedContent","TEXT_CONTENT_CHUNK_SIZE","sendWithStream","combineTextItems","getXfa","xfa","XfaText","readableStream","streamTextContent","pump","_ref10","_textContent$items","_structTreePromise","getStructTree","_step6","waitOn","_iterator6","_step7","_iterator7","resetStats","_step8","_iterator8","_step8$value","operatorListChunk","_step9","_iterator9","_ref11","serializable","streamReader","_ref12","_renderPageChunk","_step10","_iterator10","_ref13","_ref13$force","_step11","_iterator11","_step11$value","curCacheKey","_listeners","_deferred","transfers","_this8","structuredClone","fallbackCloneValue","_step12","_iterator12","_step12$value","_step13","_iterator13","_val","_value$hasOwnProperty","desc","cloneValue","_step14","_iterator14","PDFWorkerUtil","isWorkerDisabled","fallbackWorkerSrc","fakeWorkerId","_document$currentScri","pdfjsFilePath","currentScript","createCDNWrapper","_ref14","_ref14$name","_ref14$port","_ref14$verbosity","_workerPorts","_port","_webWorker","_messageHandler","_initializeFromPort","_initialize","_this9","Worker","_mainThreadWorkerMessageHandler","workerSrc","terminateEarly","onWorkerError","_setupFakeWorker","sendTest","testObj","_this10","_setupFakeWorkerGlobal","WorkerMessageHandler","workerHandler","_globalThis$pdfjsWork","pdfjsWorker","_this11","_ref15","_callee4","mainWorkerMessageHandler","_callee4$","_context4","eval","getWorkerSrc","_docStats","_pageCache","_pagePromises","_metadataPromise","fontLoader","FontLoader","_onUnsupportedFeature","styleElement","_params","cMapPacked","destroyCapability","_passwordCapability","_networkStream","_fullReader","_lastProgress","setupMessageHandler","AnnotationStorage","isOpList","lastModified","_this12","_step15","_iterator15","resetModified","terminated","_getFieldObjectsPromise","_hasJSActionsPromise","cancelAllRequests","_this13","sink","getFullReader","onPull","_ref16","readyReason","headersCapability","fullReader","headersReady","_loadingTask$onProgre","isStreamingSupported","isRangeSupported","_loadingTask$onProgre2","contentLength","rangeReader","getRangeReader","_ref17","_ref18","_numPages","htmlForXfa","_loadingTask$onProgre3","_startRenderPage","_ref19","_globalThis$FontInspe","_ref20","exportedData","exportedError","fontRegistry","FontInspector","registerFont","fontAdded","FontFaceObject","_ref21","_imageData$data","_ref22","imageData","pageProxy","_loadingTask$onProgre4","_ref23","_this$loadingTask$onU","_this$loadingTask","featureId","_this14","cachedPromise","_this$_fullReader$fil","_this$_fullReader","_this15","OptionalContentConfig","_this16","_this16$_fullReader$f","_this16$_fullReader","_this16$_fullReader$c","_this16$_fullReader2","Metadata","_startCleanup","_callee5","_iterator16","_step16","_args5","_context5","_objs","objId","_ensureObj","_internalRenderTask","onContinue","_ref24","_ref24$useRequestAnim","_ref24$pdfBug","operatorListIdx","running","graphicsReadyCallback","graphicsReady","_useRequestAnimationFrame","_cancelBound","_continueBound","_continue","_scheduleNextBound","_scheduleNext","_nextBound","_ref25","_globalThis$StepperMa","_ref25$transparency","canvasInUse","StepperManager","nextBreakPoint","getNextBreakPoint","_this$params","gfx","CanvasGraphics","beginDrawing","endDrawing","updateOperatorList","_this17","_next2","_callee6","_context6","executeOperatorList","WeakSet","BaseFontLoader","nativeFontFaces","nativeFontFace","fonts","styleSheet","_bind","missingFile","isFontLoadingAPISupported","createNativeFontFace","addNativeFontFace","family","createFontFaceRule","isSyncFontLoadingSupported","_queueLoadingCallback","_prepareFontLoadEvent","_this$_document","hasFonts","fontsToLoad","_BaseFontLoader","GenericFontLoader","loadingContext","requests","nextRequestId","loadTestFontId","supported","otherRequest","int32","spliceString","_loadTestFont","XXXX_VALUE","checksum","loadedName","_names","isFontReady","fillText","getImageData","translatedData","_ref2$isEvalSupported","_ref2$disableFontFace","_ref2$ignoreErrors","_ref2$fontRegistry","compiledGlyphs","cssFontInfo","italicAngle","FontFace","mimetype","character","cmds","jsBuf","cmd","_current","readFile","createCanvas","_storage","_timeStamp","_modified","onSetModified","onResetModified","_Object$entries","_Object$entries$_i","_setModified","_pattern_helper","MAX_GROUP_SIZE","FULL_CHUNK_HEIGHT","addContextCurrentTransform","mozCurrentTransform","_originalSave","_originalRestore","_originalRotate","_originalScale","_originalTranslate","_originalTransform","_originalSetTransform","setTransform","_originalResetTransform","resetTransform","_transformMatrix","_transformStack","_setLineWidth","_getLineWidth","_this$_transformMatri","ad_bc","bc_ad","old","cosValue","sinValue","CachedCanvases","trackTransform","canvasEntry","CanvasExtraState","alphaIsShape","fontSizeScale","textMatrix","textMatrixScale","fontMatrix","lineX","lineY","charSpacing","wordSpacing","textHScale","textRenderingMode","textRise","fillColor","strokeColor","patternFill","fillAlpha","strokeAlpha","lineWidth","activeSMask","transferMaps","startNewPathAndClipBox","clipBox","_Util$applyTransform2","minX","minY","maxX","maxY","bezierBoundingBox","updatePathMinMax","pathType","PathType","singularValueDecompose2dScale","xStrokePad","yStrokePad","getPathBoundingBox","putBinaryImageData","ImageData","putImageData","destPos","thisChunkHeight","elemsInThisChunk","transferMapRed","transferMapGreen","transferMapBlue","transferMapGray","partialChunkHeight","fullChunks","totalChunks","chunkImgData","createImageData","srcPos","srcLength","dest32","dest32DataLength","fullSrcDiff","srcDiff","kEnd","kEndUnrolled","srcByte","hasTransferMaps","_k","_k2","_hasTransferMaps","_k3","putBinaryImageMask","elem","copyCtxState","sourceCtx","destCtx","setLineDash","getLineDash","lineDashOffset","resetCtxToDefault","strokeStyle","fillStyle","globalAlpha","lineCap","lineJoin","miterLimit","globalCompositeOperation","composeSMaskBackdrop","g0","b0","alpha_","composeSMaskAlpha","maskData","layerData","transferMap","composeSMaskLuminosity","composeSMask","layerCtx","layerBox","layerOffsetX","layerOffsetY","layerWidth","layerHeight","maskCtx","subtype","backdrop","maskOffsetX","maskOffsetY","composeFn","hasBackdrop","chunkHeight","genericComposeSMask","drawImage","getImageSmoothingEnabled","fround","actualScale","devicePixelRatio","LINE_CAP_STYLES","LINE_JOIN_STYLES","NORMAL_CLIP","EO_CLIP","canvasCtx","stateStack","pendingClip","pendingEOFill","xobjs","groupStack","processingType3","baseTransform","baseTransformStack","groupLevel","smaskStack","smaskCounter","tempSMask","suspendedCtx","contentVisible","markedContentStack","cachedCanvases","cachedPatterns","viewportScale","outputScaleX","outputScaleY","_cachedGetSinglePixelWidth","_ref2$transparency","_ref2$background","fillRect","transparentCanvas","getCanvas","compositeCtx","_combinedScaleFactor","hypot","beginLayout","executionStartIdx","continueCallback","argsArrayLen","fnId","chunkOperations","breakIt","depObjId","objsPool","endLayout","inverseTransform","tmpCanvas","tmpCtx","widthScale","heightScale","paintWidth","paintHeight","tmpCanvasId","clearRect","isPatternFill","maskCanvas","objToCanvas","maskToCanvas","cord1","cord2","drawnWidth","drawnHeight","fillCanvas","fillCtx","scaled","_scaleImage","mozCurrentTransformInverse","imageSmoothingEnabled","getPattern","dashArray","dashPhase","flatness","checkSMaskState","inSMaskMode","beginSMaskMode","endSMaskMode","cacheId","scratchCanvas","_removeMirroring","__originalSave","__originalRestore","__originalRotate","__originalScale","__originalTranslate","__originalTransform","__originalSetTransform","__originalResetTransform","__originalClip","__originalMoveTo","__originalLineTo","__originalBezierCurveTo","bezierCurveTo","__originalRect","__originalClosePath","__originalBeginPath","beginPath","cp1x","cp1y","cp2x","cp2y","mirrorContextOperations","dirtyBox","startX","startY","xw","yh","updateCurvePathMinMax","setCurrentPoint","consumePath","getSinglePixelWidth","_lineWidth","getClippedPathBoundingBox","needRestore","pendingTextPaths","addToPath","fontRefName","fontObj","fontDirection","isType3Font","italic","typeface","fallbackName","browserFontSize","rise","patternTransform","resetLineWidthToOne","fillStrokeMode","isAddToPathSet","getPathGenerator","strokeText","glyphs","showType3Text","glyphsLength","spacingDir","defaultVMetrics","widthAdvanceScale","simpleFillText","restoreNeeded","isSpace","fontChar","accent","scaledX","scaledY","vmetric","vx","vy","remeasure","measuredWidth","measureText","isFontSubpixelAAEnabled","characterScaleX","isInFont","paintChar","scaledAccentX","scaledAccentY","spacingLength","charProcOperatorList","operatorListId","xWidth","yWidth","llx","lly","urx","ury","IR","canvasGraphicsFactory","createCanvasGraphics","TilingPattern","_getPattern","getColorN_Pattern","makeHexColor","matrix","getShadingPattern","SHADING","inv","bl","ul","ur","currentCtx","isolated","knockout","currentTransform","getAxialAlignedBoundingBox","canvasBounds","groupCtx","startTransformInverse","_this$groupStack$pop","currentMtx","hasOwnCanvas","_Util$singularValueDe2","canvasWidth","canvasHeight","annotationCanvas","_this$annotationCanva","savedCtx","compiled","j0","POINT_TYPES","width1","lineSize","data0","Int32Array","outlines","coords","p0","pp","kk","ll","compileType3Glyph","_createMaskCanvas","trans","_Util$applyTransform3","_Util$applyTransform4","imgToPaint","getCanvasPosition","appendImage","isContentVisible","updateClipFromPath","absDet","sqNorm1","sqNorm2","pixelHeight","EPSILON","RadialAxialShadingPattern","MeshShadingPattern","DummyShadingPattern","applyBoundingBox","Path2D","BaseShadingPattern","_BaseShadingPattern","_bbox","_colorStops","_p0","_p1","_r0","_r1","grad","createLinearGradient","createRadialGradient","colorStop","addColorStop","ownerBBox","_createGradient","createPattern","domMatrix","drawTriangle","c1","c2","c3","rowSize","xa","car","cag","cab","xb","cbr","cbg","cbb","c1r","c1g","c1b","c2r","c2g","c2b","c3r","c3g","c3b","x1_","x2_","drawFigure","figure","cs","verticesPerRow","cols","_BaseShadingPattern2","_coords","_colors","_figures","_bounds","_background","combinedScale","boundsWidth","boundsHeight","paddedWidth","BORDER_SIZE","paddedHeight","matrixScale","temporaryPatternCanvas","_createMeshCanvas","_BaseShadingPattern3","PaintType","xstep","ystep","paintType","tilingType","curMatrixScale","dimx","getSizeAndScale","dimy","graphics","setFillAndStrokeStyleToContext","adjustedX0","adjustedY0","adjustedX1","adjustedY1","clipBbox","realOutputSize","maxSize","MAX_PATTERN_SIZE","bboxWidth","bboxHeight","cssColor","createPatternCanvas","CallbackKind","StreamKind","wrapReason","targetName","comObj","callbackId","streamId","streamSinks","streamControllers","callbackCapabilities","actionHandler","_onComObjOnMessage","_processStreamMessage","cbSourceName","cbTargetName","_createStreamSink","actionName","ah","queueingStrategy","startCapability","startCall","pullCall","cancelCall","isClosed","pullCapability","cancelCapability","streamSink","isCancelled","lastDesiredSize","sinkCapability","streamController","_deleteStreamController","_deleteStreamController2","_metadataMap","parsedData","_classPrivateFieldGet2","OptionalContentGroup","_order","_groups","_group","baseState","_evaluateVisibilityExpression","expression","policy","_id3","_queuedChunks","_progressiveDone","_contentDispositionFilename","_pdfDataRangeTransport","_isStreamingSupported","_isRangeSupported","_contentLength","_fullRequestReader","_rangeReaders","addRangeListener","_onReceiveData","addProgressListener","_onProgress","addProgressiveReadListener","addProgressiveDoneListener","_onProgressiveDone","transportReady","_enqueue","_begin","_this$_fullRequestRea","_this$_fullRequestRea2","_loaded","firstReader","queuedChunks","PDFDataTransportStreamReader","_progressiveDataLength","PDFDataTransportStreamRangeReader","requestDataRange","_stream","_done","_filename","_requests","_headersReady","_read","requestCapability","_queuedChunk","_removeRangeReader","_read2","walk","_node$attributes","shouldBuildText","AnnotationLayer","_scripting_utils","_xfa_layer","_classStaticPrivateMethodGet","classConstructor","_classCheckPrivateStaticAccess","_get","_superPropBase","DEFAULT_TAB_INDEX","GetElementsByNameSet","AnnotationElementFactory","annotationType","LinkAnnotationElement","TextAnnotationElement","TextWidgetAnnotationElement","radioButton","RadioButtonWidgetAnnotationElement","checkBox","CheckboxWidgetAnnotationElement","PushButtonWidgetAnnotationElement","ChoiceWidgetAnnotationElement","WidgetAnnotationElement","PopupAnnotationElement","FreeTextAnnotationElement","LineAnnotationElement","SquareAnnotationElement","CircleAnnotationElement","PolylineAnnotationElement","CaretAnnotationElement","InkAnnotationElement","PolygonAnnotationElement","HighlightAnnotationElement","UnderlineAnnotationElement","SquigglyAnnotationElement","StrikeOutAnnotationElement","StampAnnotationElement","FileAttachmentAnnotationElement","AnnotationElement","_ref$isRenderable","isRenderable","_ref$ignoreBorder","ignoreBorder","_ref$createQuadrilate","createQuadrilaterals","layer","linkService","downloadManager","imageResourcesPath","renderForms","svgFactory","enableScripting","_fieldObjects","fieldObjects","_mouseState","mouseState","_createContainer","quadrilaterals","_createQuadrilaterals","_Util$singularValueDe","horizontalRadius","horizontalCornerRadius","verticalRadius","verticalCornerRadius","radius","quadPoints","savedRect","quadPoint","trigger","popup","PopupElement","modificationDate","richText","hideWrapper","skipId","fieldObj","_step3$value","exportValues","exportValue","domElement","getElementById","getElementsByName","_domElement","_exportValue","isWin","isMac","_AnnotationElement","isTooltipOnly","resetForm","_linkService$addLinkA","newWindow","_bindNamedAction","_bindLink","hasClickAction","_bindJSAction","_bindResetFormAction","_renderQuadrilaterals","quadrilateral","linkElement","cloneNode","getDestinationHash","goToDestination","getAnchorUrl","executeNamedAction","jsName","_this3$linkService$ev","eventBus","detail","otherClickAction","resetFormFields","resetFormRefs","include","allFields","fieldIds","_i4","_Object$values2","_fields2","_this4$linkService$ev","allIds","_i5","_allFields","_field","valueAsString","_AnnotationElement2","_parameters$data$titl","_parameters$data$cont","_parameters$data$rich","hasPopup","dataset","l10nId","l10nArgs","_createPopup","_AnnotationElement3","alternativeText","_AnnotationElement$pl","baseName","valueGetter","_this5$linkService$ev","_getKeyModifier","_this5$linkService$ev2","_this$data$actions","_setEventListener","jsEvent","setColor","styleName","ColorConverters","commonActions","print","preventScroll","bgColor","fgColor","_i6","_Object$keys2","_WidgetAnnotationElem","hasAppearance","keyInStorage","_getElementsByName","storedData","elementData","userValue","beforeInputSelectionRange","beforeInputValue","readOnly","setPropertyOnSiblings","defaultFieldValue","blurListener","_this$data$actions2","selRange","_event$detail$selRang","selStart","selEnd","setSelectionRange","_dispatchEventFromSandbox","_this7$linkService$ev","commitKey","willCommit","selectionStart","selectionEnd","_blurListener","_this7$linkService$ev2","isDown","Keystroke","_this7$linkService$ev3","_elementData$beforeIn","_setEventListeners","maxLen","comb","combWidth","_setTextStyle","_setBackgroundColor","_this$data$defaultApp","defaultAppearanceData","fontColor","textAlignment","_WidgetAnnotationElem2","_event$target","curChecked","_WidgetAnnotationElem3","buttonValue","_event$target2","radio","pdfButtonValue","_LinkAnnotationElemen","_WidgetAnnotationElem4","_super8","fontSizeStyle","selectElement","combo","multiSelect","optionElement","displayValue","isExport","getItems","multipleSelection","_event$detail$insert","_step17","_iterator17","_this10$linkService$e","changeEx","keyDown","_AnnotationElement4","_super9","_parameters$data$titl2","_parameters$data$cont2","_parameters$data$rich2","parentType","parentElements","parentRect","popupLeft","popupTop","pinned","_this$richText","_this$contentsObj","hideElement","dateObject","toDateObject","toLocaleDateString","toLocaleTimeString","contents","_formatContents","XfaLayer","xfaHtml","lastChild","_step18","_iterator18","_toggle","_show","_hide","lines","pin","unpin","_AnnotationElement5","_super10","_parameters$data$titl3","_parameters$data$cont3","_parameters$data$rich3","_AnnotationElement6","_super11","_parameters$data$titl4","_parameters$data$cont4","_parameters$data$rich4","lineCoordinates","_AnnotationElement7","_super12","_parameters$data$titl5","_parameters$data$cont5","_parameters$data$rich5","_AnnotationElement8","_super13","_parameters$data$titl6","_parameters$data$cont6","_parameters$data$rich6","circle","_AnnotationElement9","_super14","_parameters$data$titl7","_parameters$data$cont7","_parameters$data$rich7","containerClassName","svgElementName","_step19","_iterator19","vertices","coordinate","polyline","_PolylineAnnotationEl","_super15","_AnnotationElement10","_super16","_parameters$data$titl8","_parameters$data$cont8","_parameters$data$rich8","_AnnotationElement11","_super17","_parameters$data$titl9","_parameters$data$cont9","_parameters$data$rich9","_step20","_iterator20","inkLists","_step21","inkList","_iterator21","_AnnotationElement12","_super18","_parameters$data$titl10","_parameters$data$cont10","_parameters$data$rich10","_AnnotationElement13","_super19","_parameters$data$titl11","_parameters$data$cont11","_parameters$data$rich11","_AnnotationElement14","_super20","_parameters$data$titl12","_parameters$data$cont12","_parameters$data$rich12","_AnnotationElement15","_super21","_parameters$data$titl13","_parameters$data$cont13","_parameters$data$rich13","_AnnotationElement16","_super22","_parameters$data$titl14","_parameters$data$cont14","_parameters$data$rich14","_AnnotationElement17","_super23","_this14$linkService$e","_this14$data$file","_this$data$titleObj","_this$data$contentsOb","_download","_this$downloadManager","openOrDownloadData","_step22","sortedAnnotations","popupAnnotations","_iterator22","_i7","_sortedAnnotations","rendered","_step23","_iterator23","renderedElement","_setAnnotationCanvasMap","ownMatrix","_step24","_iterator24","_step25","_iterator25","ownTransform","_step26","_iterator26","_step26$value","firstChild","replaceChild","makeColorComp","G","B","RGB_HTML","CMYK_RGB","xfaOn","xfaOff","_ref$storage","isHTMLAnchorElement","HTMLAnchorElement","dataId","setupStorage","rootHtml","setAttributes","rootDiv","textDivs","_child$attributes","childHtml","_node","renderTextLayer","renderParameters","TextLayerRenderTask","textContentStream","textContentItemsStr","enhanceTextSelection","DEFAULT_FONT_SIZE","ascentCache","AllWhitespaceRegexp","appendText","geom","textDiv","textDivProperties","_enhanceTextSelection","hasText","hasEOL","originalTransform","_textDivs","tx","atan2","fontName","fontHeight","fontAscent","cachedAscent","metrics","ascent","fontBoundingBoxAscent","descent","fontBoundingBoxDescent","ratio","pixels","_ratio","getAscent","_fontInspectorEnabled","shouldScaleText","absScaleX","absScaleY","_textDivProperties","_textContentStream","_layoutText","angleCos","angleSin","divWidth","divHeight","_canceled","textDivsLength","_renderingDone","findPositiveMin","boxes","x1New","x2New","expandBoundsLTR","expandBounds","divProperties","jj","boxScale","horizon","boundary","_horizonPart","_affectedBoundary","maxXNew","xNew","changedHorizon","lastBoundary","useBoundary","used","_horizon","affectedBoundary","_textContent","_container","_textContentItemsStr","_layoutTextLastFontSize","_layoutTextLastFontFamily","_layoutTextCtx","_renderTimer","_textDiv$style","mozOpaque","textItems","textStyles","_processItems","expandDivs","transformBuf","paddingBuf","divProps","SVGGraphics","pf","pm","acos","SVG_DEFAULTS","convertImgDataToPng","PNG_HEADER","crcTable","writePngChunk","crc32","deflateSyncUncompressed","literals","maxBlockLength","deflateBlocks","idat","pi","adler","adler32","isMask","bitDepth","colorType","offsetLiterals","offsetBytes","_y","ihdr","deflateSync","pngLength","CHUNK_WRAPPER_SIZE","SVGExtraState","activeClipUrl","clipGroup","maskId","clipCount","maskCount","shadingCount","transformMatrix","transformStack","extraStack","embedFonts","embeddedFonts","cssStyle","_operatorIdMapping","tgrp","executeOpTree","svgElement","loadDependencies","convertOpList","operatorIdMapping","opList","opTree","opListElement","opListToTree","opTreeElement","lineMatrix","xcoords","ycoords","tspan","setAttributeNS","txtElement","txtgrp","lineWidthScale","_setStrokeAttributes","_ensureTransformGroup","defs","addFontStyle","_current$txtElement","hasChildNodes","_makeColorN_Pattern","_makeShadingPattern","_makeTilingPattern","_args$","tilingId","_Util$normalizeRect2","tx0","ty0","tx1","ty1","txstep","tystep","tiling","gradient","shadingId","colorStops","point0","focalPoint","circlePoint","focalRadius","circleRadius","getAttributeNS","clipId","clipElement","setStrokeAlpha","setFillAlpha","cliprect","imgEl","definitions","rootGroup","_ensureClipGroup","PDFNodeStream","_network_utils","fs","http","https","fileUriRegex","sourceUrl","parsedUrl","parseUrl","isHttp","isFsUrl","_rangeRequestReaders","PDFNodeStreamFsFullReader","PDFNodeStreamFullReader","PDFNodeStreamFsRangeReader","PDFNodeStreamRangeReader","BaseFullReader","_url","_disableRange","_rangeChunkSize","_readableStream","_readCapability","_headersCapability","BaseRangeReader","createRequestOptions","_BaseFullReader","_setReadableStream","getResponseHeader","_validateRangeRequest","validateRangeRequestCapabilities","allowRangeRequests","suggestedLength","extractFilenameFromHeader","_request","_BaseRangeReader","_httpHeaders","_BaseFullReader2","lstat","createReadStream","_BaseRangeReader2","createResponseStatusError","contentDisposition","_content_disposition","getFilenameFromContentDispositionHeader","returnValues","validateResponseStatus","needsEncodingFixup","toParamRegExp","rfc2616unquote","fixupEncoding","rfc2047decode","rfc5987decode","contentDispositionStr","_match2","quot","_n2","_matches$_n","_quot","_part","rfc2231getparam","_filename2","attributePattern","textdecode","encoding","decoder","TextDecoder","fatal","quotindex","extvalue","encodingend","charset","hex","PDFNetworkStream","NetworkManager","getXhr","currXhrId","pendingRequests","xhrId","pendingRequest","expectedStatus","onError","onprogress","onHeadersReceived","onDone","_pendingRequest$onPro","_pendingRequest$onErr","xhrStatus","getArrayBuffer","rangeHeader","_pendingRequest$onErr3","_pendingRequest$onErr2","_source","_manager","PDFNetworkStreamFullRequestReader","PDFNetworkStreamRangeRequestReader","onClosed","_onRangeRequestReaderClosed","manager","_onHeadersReceived","_onDone","_onError","_fullRequestId","requestFull","_headersReceivedCapability","_cachedChunks","fullRequestXhrId","fullRequestXhr","getRequestXhr","_this$onProgress","lengthComputable","isPendingRequest","_requestId","requestRange","_this$onClosed","_close","_this$onProgress2","PDFFetchStream","createFetchOptions","abortController","credentials","createHeaders","Headers","PDFFetchStreamReader","PDFFetchStreamRangeReader","_withCredentials","_headers","_yield$this$_reader$r","_yield$this$_reader$r2","__webpack_module_cache__","cachedModule","__webpack_exports__","_annotation_layer","_api","_svg","_text_layer","submitHandler","emailCheckFailedFieldError","activateAction","deactivateAction","dialog","PimDescriptionsListPage","searchedPureAttributeOptions","searchedPureAttributeOptionsCount","pureAttributeOption","updatedAttributeOption","pureAttributeDescriptionUpdated","descriptionName","descriptionId","originalDescriptionName","selectedPureAttributeId","selectedAttributeOption","activateOption","updateAttributeOptionThenSearchAttributeOptions","openActivateModal","deactivateOption","openDeactivateModal","searchPureAttributeById","searchAllAttributeOptions","handleAddPureAttributeOption","newAttributeOption","pureAttributeDescriptionCreated","descriptionsListFilterUniqueKey","pureAttributeId","searchingPureAttributeOptions","canManageAttribute","canCreateAttributeOption","tabWrapper","labelIcon","tabLabelIcon","DescriptionsListFilter","DESCRIPTION_DIALOG_ID","failedCB","selectedPureAttributeOption","createAttributeOption","createAttributeOptionThenSearchAttributeOptions","resetSelectedPureAttributeOption","updateAttributeOption","SearchAttributeOptions","DescriptionDialogProps","providedDescription","setSelectedAttributeOption","valueInput","setValueInput","selectedAttributeOptionId","validateAttributeOption","attributeOptions","hasSelectedOption","valueAutocompleteOnInputChange","valueAutocompleteOnChange","CreateNewMasterFromStepperActionTypes","contentColumn","iconColumn","na","acceptString","_fileId","useFileUploadByAny","setUrl","uploadFileByUrl","urlTempValue","setUrlTempValue","handleDeleteMediaType","uploadErrFile","uploadErrUrl","sizeFromUrl","typeFromUrl","tArgs","fileTypes","fullMediaKeys","allMediaKeys","sectionHeader","renderMediaColumn","_mediaKeys","subheader","ListSubheader","EditLink","DRAWER_EXPANDED_KEY","setDrawerExpanded","SSE_RECONNECTED_EVENT","SSE_AUTH_ERROR","SseClient","connectionParams","activeToken","reconnectTimer","hasEverOpened","failedAuthToken","syncConnection","isCompleteParams","subscriberCount","closeConnection","openConnection","fetchEventSource","openWhenHidden","onopen","scheduleReconnect","preserveReconnectFlag","CANVAS_COLUMN_COUNT","STYLE_CANVAS_ROW_HEIGHT","STYLE_WIDGET_DRAG_COLOR","STYLE_WIDGET_SHADOW_HEIGHT","STYLE_WIDGET_SHADOW_HEIGHT_DRAGGING","STYLE_WIDGET_HANDLE_WIDTH","STYLE_WIDGET_HANDLE_HEIGHT","STYLE_WIDGET_FLOATING_WIDGET_WIDTH","STYLE_WIDGET_MARGIN","DRAGGABLE_ANCHOR_ID","DASHBOARD_EDIT_MENU_ID","INCREMENT_CENTS","_decimalPrecision","TWO","stripFloatNoise","incrementCents","valueCents","roundedValue","formatSectionTotal","applyThousandsSeparator","NEAREST_CENT","formatGrandTotal","dp","parseBody","serviceError","camelizeString","makeSelectNotificationByIndex","makeSelectNotifications","makeSelectNotificationsUnreadCount","makeSelectNotificationsCount","makeSelectIsNotificationDropDownOpen","makeSelectListItemStatus","makeSelectShouldScrollToTop","makeSelectLoadingCustomerDiscount","makeSelectContactsList","makeSelectSelectedContact","customersList","makeSelectStoredContactData","makeSelectSelectedCustomerDiscounts","selectedCustomerData","storedCustomerData","getManufacturer","getResponseSuggestProductNumber","getDescription","getSourceSpecs","specsDictionary","buildSpecsDictionaryFromDrawingIds","importSelectedDrawingsViaDrop","displayedDrawings","handleClickCopyTo","getRelativeValue","_props$disableShrink","disableShrink","_props$thickness","thickness","_props$value","circleStyle","rootStyle","rootProps","circumference","strokeDashoffset","indeterminate","static","circleDisableShrink","circleIndeterminate","circleStatic","hide","$export","own","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","IS_WRAP","expProto","virtual","__g","USE_SYMBOL","operandValue","transformFiltersConfigToFormState","filtersTemplate","keyIndexObject","filterTemplate","filterKeysSplit","keyBackendNeeds","operand","isAiChecking","isUserTrackedChecking","keyArray","transformFiltersFormStateToConfig","filtersList","filterIndex","locationIds","filterArr","filterList","filterOperands","filterArrEl","operandAcc","operandKey","operandElement","selectedOptions","defaultOption","rawDate","hasInterval","newOperandAcc","newTime","operandType","newFilterArr","isAiEq","isAineq","isAiEqIdx","isAineqIdx","isUserTrackedEq","isUserTrackedNeq","isUserTrackedEqIdx","isUserTrackedNeqIdx","portal","PortalAwareItem","draggableStyle","usePortal","disableUpdate","overlappedColumns","nonOverlappedDefaultColumns","prevDefaultCol","insertAfterIndex","newColumns","colToMerge","updateDefault","newColumnsToDisplay","filterId","listToReorder","notSortableColumnsCount","provider","sortableColumns","unsortableColumns","provided2","snapshot2","initialEmail","TEAM_MANAGEMENT_USER_FORM","UserEditDrawer","initialEmailFromUser","onCloseOverride","createOrUpdateUser","createUser","updateUser","getUserAfterUpdate","customOnSubmit","formRoles","newRoles","includeAclRoles","currentRoles","rolesToGrant","rolesToRevoke","selectedFirmId","MEMBER","uploadTitle","userInfo","selfOfficeId","isSuperUser","aclRoles","selfAdminOffice","displayAclRolesInput","revokableRoles","activeOfficeInput","previousArray","restoredRoles","renderTags","tagValue","getTagProps","tagProps","prevTeamOrganization","DrawerEditCTA","withUserPermissions","createInitialValue","existingRoles","adjustedRoles","newUser","hasQuoteConnectRepAcl","QUOTE_CONNECT_REP","isQuoteConnectRepLogin","getQuoteConnectLightColor","getGradientColors","constructDiscountsMap","customerDiscounts","manufacturerDiscounts","discountMap","manufacturerGroup","typeEntry","discountType","populateDiscountFields","discountPriority","customerDiscountColumns","currentRegionId","multiplierCellIndex","discountValue","pManufacturerId","pCategoryId","priorityOrder","regionsToCheck","specificKey","generalKey","priorityDiscounts","regionDiscounts","calculcateDiscountValue","resetCustomerDiscountFields","cells","checkBrandMatch","combos","fullMatchForProductBrand","wildcardBrand","updateDiscountsAndVisibilityPerspective","firstProduct","currenctTemplateCells","updatedTemplateCells","currentTemplateCells","multiKeyStore","key1","key2","subCache","indexCounter","getStylesCreator","themingEnabled","overrides","stylesWithOverrides","deepmerge","noopTheme","getClasses","stylesOptions","disableGeneration","cacheClasses","lastProp","lastJSS","generate","mergeClasses","baseClasses","newClasses","stylesCreator","sheetManager","staticSheet","dynamicStyles","sheetsCache","dynamicSheet","useSynchronousEffect","currentKey","classNamePrefixOption","_options$defaultTheme","stylesOptions2","StylesContext","shouldUpdate","LanguageActionTypes","ChangeLocaleAction","CHANGE_LOCALE","DEFAULT_LOCALE","defaultProp","valueState","createChainedFunction","makeSession","startingTime","sid","ignoreDuration","sessionToJSON","updateSession","ip_address","did","abnormal_mechanism","CONTEXT_VALUE","ORIGINAL_PROVIDER","runWithNormalPriority","runWithPriority","NormalPriority","ProviderOrig","createContextOrig","versionRef","setResolve","useContextSelector","useContextOrig","nextSelected","CONFIRMATION_STEP","confirmDuplicateValuesDialogRoot","dialogTitle","ConfirmDuplicateValuesDialog","onKeepExistingValues","onApplyNewValues","MERGE_DUPLICATE_FORM","IMG_SIZE","INFO_COLUMN_WIDTH","ICON_COLUMN_WIDTH","selectedProductIndex","isFetchingProductNumber","cleanProductNumber","isProductNumberDialogOpen","confirmationStep","isConfirmDuplicateValuesDialogOpen","currentPrimaryIndex","selectingPrimaryIndex","MergeProductsDialog","initialPrimaryIndex","handleCopyFromDuplicate","isAdvanceConfig","selectedAttributes","descriptionKey","handleChangeReference","download","handleClearLink","newFormValues","customProductNumber","REINITIALIZE_DATE","imageFileId","generalEnManufacturerCutsheetUrl","primaryProductId","duplicateProductIds","productMerged","numberOfProductsMerged","AffectedProductNumbers","AffectedProductIds","SelectedOptions","swatch","selectedOptionValues","allValuesNotActive","Texture","attributeDescription","CTA","discard","copyMediaLinksCleanUp","cleanupPath","copyRowButton","formFieldPath","productKeyPath","cleanupFn","isPoaField","copiedValue","poaValue","arrowColumn","closeConfirmDuplicateValuesDialog","rowWarningicondisplay","valueExistInOtherProducts","displayAttachmentWarningForOtherLanguages","otherLanguages","findWarningForAttachedFile","formValuesContainMediaFiles","duplicatesContainMediaFiles","findWarningForCutSheetUrl","findWarningForVdoUrl","renderMergeMediaRow","sectionLabel","mediaPath","assetBundle","labelColumn","infoColumn","setPrimaryIndex","setSelectedProducts","isMergingProducts","loadingContainer","selectingIndex","sectionRow","isPrimaryProduct","selectedProductId","disableRemoveProduct","updatedProducts","updatedSelectedProductIndex","updatedPrimaryProductIndex","AttachMoney","isCAD","countryFlag","Info","Check","languageOption","hasPublishPermission","isGettingSeriesDuplicateProducts","seriesDuplicateProducts","updatePimSeriesDraft","openPublishDialog","PUBLISH_DIALOG_ID","getSeriesDuplicateProductsById","chipConnectionContainer","unselectedChip","_1","_2","_3","_4","_5","_extraChip","connection","highlightedConnection","unHighlightedConnection","rootPadding","productListGroups","mergeButton","isProductSelectionOpen","setIsProductSelectionOpen","rowStatuses","setRowStatuses","isMergeDialogOpen","setIsMergeDialogOpen","primaryIndex","hasUnconfigurableProducts","canPublish","statusValue","statusId","chipClass","connectionClass","duplicateProductsGroup","selectedCount","hasPrimary","isSelectAllIndeterminate","isPrimary","currentRowStatuses","handleGroupCheck","productIsSelected","isCheckOnCurrentSelectedGroup","handleProductCheck","indexAlreadySelected","newRowStatuses","handleProductPrimarySelect","_primaryIndex","_selectedProducts","handleOpenMergeDialog","getTestChipColor","headerText","brandCategory","draftBadge","bulkPriceContainer","mainId","mainName","isDraft","draftId","testChipStyle","ImageViewer","isListPrice","deleted","archived","statusType","newStatus","cascade","marginAuto","providedStatuses","seriesInvalidStatus","menuState","setMenuState","confirmationOpen","setConfirmationOpen","setStatusValue","isStatus","isTestStatus","isDeletedStatusSeries","_statusLabel","statusLabel","updatePimSeriesDraftWithAmplitude","_statusType","seriesDeleted","seriesDiscontinued","_status","updatedStatus","productDeleted","productDiscontinued","sendAmplitudeOnDeleteOrDiscontinued","inset","CriteriaStatus","FORM_BACKED_FORMATS","BOBRICK_CSI_MASTER_SPEC_FORM","BOBRICK_PLANNING_GUIDE_FORM","isSelectableFormat","countCheckedFields","formBacked","getFormatChecked","getFormatPartiallyChecked","checkedCount","hasFormatSelection","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","bindReporter","metric","reportAllChanges","prevValue","forceReport","navEntry","getNavigationEntry","activationStart","navigationType","prerendering","rating","PerformanceObserver","supportedEntryTypes","po","getEntries","buffered","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","interactionId","performance","interactionCount","longestInteractionList","longestInteractionMap","processEntry","minLongestInteraction","existingInteraction","latency","interaction","onReport","durationThreshold","report","handleEntries","entryType","prevEntry","candidateInteractionIndex","estimateP98LongestInteraction","onHidden","takeRecords","reportedMetricIDs","whenReady","responseStart","addClsInstrumentationHandler","stopOnCallback","addMetricObserver","instrumentCls","addLcpInstrumentationHandler","instrumentLcp","addTtfbInstrumentationHandler","instrumentTtfb","addFidInstrumentationHandler","instrumentFid","addInpInstrumentationHandler","instrumentInp","addPerformanceInstrumentationHandler","instrumentPerformanceObserver","getCleanupCallback","sessionValue","sessionEntries","hadRecentInput","firstSessionEntry","lastSessionEntry","stopListening","visibilityWatcher","getVisibilityWatcher","handleEntry","firstHiddenTime","processingStart","lastEntry","widgetStyle","widgetStylePaper","gridProps","noFlex","widgetWrapperInner","PRODUCT_LIST_FILTER_FORM","PARENT_PRODUCT_LIST_FILTER_FORM","dateModifiedValidateFunc","dateAddedValidateFunc","ProductsListFilter","currentSelection","modifiedByUserInput","getFilterData","signedInUserOfficeId","isQuoteConnect","isDrawerOpened","resetProductsSelection","formatedDateModified","formatedDateAdded","normalizeExclusiveCheckbox","renderCheckboxFilterSection","titleKey","eqName","eqLabelKey","neqName","neqLabelKey","brandsFilter","manufacturerIds","officeUsers","isFetchingFirmProductCategories","isProductForm","usersListItem","immutableMap","defaultTransitionDuration","BackdropProps","_props$disableBackdro","_props$disableEscapeK","_props$fullScreen","_props$maxWidth","onBackdropClick","onEnter","onEntering","onEscapeKeyDown","onExiting","_props$PaperComponent","_props$PaperProps","_props$scroll","ariaDescribedby","ariaLabelledby","mouseDownTarget","BackdropComponent","Backdrop","closeAfterTransition","appear","paperFullScreen","paperFullWidth","scrollPaper","scrollBody","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","down","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","_props$dividers","dividers","isWidthUp","inclusive","breakpointKeys","withWidth","_options$withTheme","withThemeOption","_options$noSSR","noSSR","initialWidthOption","initialWidth","WithWidth","contextTheme","_getThemeProps","getThemeProps","mountedState","setMountedState","widthComputed","more","objectWithoutPropertiesLoose","ThemeActionTypes","ChangeThemeAction","CHANGE_THEME","toggleComponent","testChipLabel","testChipColor","menuIcon","titleRow","avatarProps","imgName","circleImg","materialIcon","disableButton","quoteTemplateId","makeSelectQuoteTemplateSaveSuccess","makeSelectIsFetchingQuoteTemplates","PG","CHANGE_PAGE","CHANGE_RECORD","CHANGE_PER_PAGE","FIND_RECORD","ButtonTab","variantComponent","FilledInput","OutlinedInput","_props$multiline","_props$select","SelectProps","InputMore","notched","native","helperTextId","inputLabelId","InputComponent","InputElement","labelId","Status","_props$disableSpacing","disableSpacing","red","getContrastingColor","isValidHex","toState","simpleCheckForValidColor","_each2","_tinycolor2","passed","oldHue","hsl","toHsl","hsv","toHsv","toRgb","toHex","lh","makeSelectSelectedTaskId","makeSelectTask","tasks","taskId","makeSelectTaskCriteria","useFileSrc","BreadcrumbProjectSpecBar","backToSpecButton","searchBar","breadcrumbsWarningIcon","breadcrumbs","showBreadscrumbWarningIcon","renderSearch","isLastBreadcrumb","isLastButton","buttonProps","tooltipDisable","tooltipEnable","getContactDisplayText","entity","__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__","paramAppId","paramToken","paramSite","paramLabel","useShutDownSplashPage","applyShutDownSplashPage","whitelabel","Ats","queryString","paramMapping","lowerKey","mapping","initParams","_babelPolyfill","installDomTranslationGuard","configPath","envPath","_siteNamespace","envData","envErr","configData","configErr","bootAtsApiInstance","Api","atsApiOptions","serviceBlacklist","setEnv","whiteLabelData","whitelabelConfig","whitelabelEnv","useDefaultTheme","newParams","initWithData","initialState","additionalSagas","customHistory","beforeMiddleware","afterMiddleware","endpointData","atsApiOptionsFromConfig","shouldPreloadEndpointData","atsApiOptionsFinal","constants","atsApiInstance","configureStore","SetDebug","initFontAwesome","retParams","sagaMiddleware","valueFromStore","debounceChange","setTemporaryValue","installedIntegrations","getIntegrationsToSetup","defaultIntegrations","userIntegrations","integrations","isDefaultInstance","finalIntegrations","integrationsByName","currentInstance","existingInstance","filterDuplicates","debugIndex","debugInstance","integrationIndex","setupIntegration","afterSetupIntegrations","afterAllSetup","createBreakpoints","_breakpoints$values","_breakpoints$unit","_breakpoints$step","between","upperbound","only","returnWrapper","awaitable","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","hasPropertyDescriptor","selfUserRoles","SUPER_USER","selfUserId","hasOfficeAdminPermissions","isInOffice","hasFirmAdminPermissions","isInFirm","hasEditSelfPermissions","DebugActionTypes","DEBUG","selectErrors","selectErrorMenuOpen","Parent","Class","isNativeReflectConstruct","getSpecs","getMasterSpecs","getTemplateSpecs","setSpec","setMasterSpec","setTemplateSpec","setTestSpec","withSpecId","withSpec","getAll","redirectToControlled","onGetSpecFailed","WithSpecIdInner","selectedId","specType","nextId","controlledId","nextControlledId","nextSpecId","nextSpecTestMode","specTestMode","nextSpec","WrappedWithSpecIdInner","originalId","paramsId","RefForwardingFactory","onHiddenOrPageHide","ImportSelectedDrawingsContext","useImportSelectedDrawings","ViewContainer","DEFAULT_ATTACHMENT_TEMPLATE_VISIBILITY_LEVEL","DEFAULT_FOLDER_ATTACHMENT_TEMPLATE","ADD_ATTACHMENT_FOLDERS_TEMPLATE_PATH","SelectionType","AttachmentFoldersPage","isDeleteModalOpen","templatesList","attachmentFolderTemplatesList","goToTemplatePage","filteredTemplates","handleChangePage","getAttachmentFolderTemplates","getDefaultAttachmentFolderTemplate","canManageFolderTemplates","listTitle","disablePadding","isFirmDefault","buttonsContainer","paginationContainer","backIconButtonProps","nextIconButtonProps","labelDisplayedRows","DeleteModalDialog","updatedTemplate","myDefaultTemplate","visibilityLevel","orDivider","isHeadOffice","masterFormatRoots","firmBrandTagsKeyed","isAddingBrandTags","manufacturerInput","setManufacturerInput","selectedManufacturers","setSelectedManufacturers","categoryInput","setCategoryInput","selectedCategories","setSelectedCategories","divisionInput","setDivisionInput","selectedDivisions","setSelectedDivisions","BRAND","selectionType","setSelectionType","applyToFirm","setApplyToFirm","canConfirm","setCanConfirm","handleAdd","officeIds","newBrandTags","masterFormatRootIdsToAdd","masterFormatRootId","netNewBrandTags","newBrandTag","brandReps","byDivision","handleSelectionTypeChange","DIVISION","VirtualizedListComp","defaultprops","VirtualizedList","rowheight","vList","ListboxComponent","blurOnSelect","handleDeleteManufacturer","handleDeleteCategory","division_number","handleDeleteDivision","DeleteDialog","officeBrandTags","firmIds","brandTagsKeyMapped","selectedOfficebrandTags","brandTag","singleInfoContainer","chipsContainer","isGettingFirmBrandTags","selectedOfficeDisplayedBrandTags","setSelectedOfficeDisplayedBrandTags","setSearchTerm","setPage","newBrandTagDialogOpen","setNewBrandTagDialogOpen","setOpenDeleteModal","brandTagToDelete","setBrandTagToDelete","deleteAllDialogOpen","setDeleteAllDialogOpen","paginatedSelectedOfficeDisplayedBrandTags","paginatedSelectedOfficeDisplayedBrandTagsCount","handleFilterBrandTags","_searchTerm","NoAttachmentsFound","EmptyWidgetContent","contentKeyToDelete","idsToDelete","officeBrandTagsKeyed","brandRepIds","downloadBlob","blob","pom","click","CircularProgressWithLabels","onFinish","onFinishDelay","showPercentage","DragAndDropWithLabels","labelTextArea","tickBigIconStyles","errorBigIconStyles","errorSmallIconStyles","tickIconStyles","Summary","onReUploadClick","unvalidCount","vaildCount","CheckCircleOutline","htmlColor","ErrorOutline","CheckCircle","exportFile","getLoadingText","UserUploadStepperView","onFinishLoading","uploadProgress","BULK_IMPORT_USERS_FORM","renderStatusContent","renderStepContent","uploadSteps","stepContainer","step1Container","stepPageContainer","toolBarButton","conflicts","template_csv","template_xlsx","onDownloadTemplate","backToListPage","renderStepInfo","defaultSaga","updateQuoteAutoSavePreference","getQuoteAutoSavePreference","updateQuoteExcelColumnPreference","getQuoteExcelColumnPreference","getCustomerDiscountVisibilitySetting","getAutoTrackProjectSetting","getVendorQuotationAutoTakeoffSetting","getVendorQuotationNotifications","getVendorQuotationMyLogo","getVendorQuotationBidEmail","getMasterFormatRoots","addBrandTags","deleteBrandTagsById","getOfficeBrandTags","getFirmBrandTags","deleteAclRole","addAclRole","getAclRoles","getApps","saveFavouriteCategory","deleteFavouriteCategory","updateFilterById","deleteFilterById","createFilter","getRTypeRegions","verifyPassword","setPassword","getVisibiltyList","resetPreferenceAction","editContactByUserId","addContactByUserId","deleteOfficeById","deleteContactsById","deleteUserByIdRaw","deleteUserById","deleteUserByIdAndSearchAllUsers","getContactsById","getCollaborators","getUserCollaboratorsByFirm","getOfficeCollaboratorsByFirm","getContacts","getLogInAsUsers","addCollaboratorToSpec","getPartnerships","setPartnerships","getQuoteOfficesByFirm","getOfficeById","getFirmById","searchUsersQuick","searchUsersQuickByOfficeId","searchQuoteUsers","getNoteCreators","searchUsersByUserId","searchUsersByOfficeId","getFirmsForSuperFirmFirmAdmin","searchAllFirms","deleteFirmById","deleteFirmByIdThenSearchAllFirms","searchAllUsers","searchUsersRaw","getUserByIdRaw","getUserById","getLoggedInUserData","getCollaboratorsOffice","getOffices","getFirms","getPreferences","getOpportunityStatusesPreferences","setPreferences","editPreferences","updateOfficeById","createOffice","moveUserById","updateUserByIdRaw","updateUserById","getDiscounts","addCustomerDiscount","editCustomerDiscount","deleteCustomerDiscount","getOfficeDiscounts","searchContactsBySearchTerm","deleteContactAndSearchContacts","searchContactsFindIndex","trackFormSubmitFailed","trackFormSubmitSucceeded","searchDivisions","searchCategories","searchManufacturers","getUserPreferenceOverTakeoff","updateUserPreference","createFirm","updateFirmById","patchUpdateFirmById","getAllManufacturerPreferences","createManufacturerPreference","updateManufacturerPreference","deleteManufacturerPreference","getManufacturerRankings","createManufacturerRanking","updateManufacturerRanking","deleteManufacturerRanking","getAttachmentFolderTemplateWithFolders","createAttachmentFolderTemplate","updateAttachmentFolderTemplate","createTemplateFolder","updateTemplateFolder","deleteTemplateFolder","setUserDefaultAttachmentFolderTemplate","setFirmDefaultAttachmentFolderTemplate","getSearchMode","setSearchMode","getDefaultCustomEmail","setUseDefaultCustomEmail","setDefaultCustomEmail","exportUsers","bulkUploadUsers","getDiscountPriority","getQuoteDiscountList","searchManufacturerDiscounts","potentiallyFetchManufacturerDiscountsAndPriority","setDefaultProjectVisibility","getFirmEmailSetting","defaultContactSearchFilter","GET_CONTACTS","GET_CONTACT_BY_ID","ADD_COLLABORATOR","DELETE_FIRM_BY_ID_THEN_SEARCH_ALL_FIRMS","GET_FIRM_BY_ID","SEARCH_USERS_BY_USER_ID","GET_NOTE_CREATORS","GET_COLLABORATORS_OFFICE","GET_QUOTE_OFFICES_BY_FIRM","GET_OPPORTUNITY_STATUSES_PREFERENCES","EDIT_PREFERENCES","MOVE_USER_BY_ID","RESET_PREFERENCE","DELETE_USER_BY_ID_AND_SEARCH_ALL_USERS","SEARCH_CONTACTS_FIND_INDEX","SEARCH_DIVISIONS","SEARCH_CATEGORIES","SEARCH_MANUFACTURER","GET_USER_PREFERENCE_OVER_TAKE_OFF","UPDATE_USER_PREFERENCE","CREATE_FIRM","UPDATE_FIRM_BY_ID","PATCH_UPDATE_FIRM_BY_ID","SEARCH_QUOTE_USERS","GET_LOGGED_IN_USER_DATA","GET_SEARCH_MODE","SET_SEARCH_MODE","CREATE_TEMPLATE_FOLDER","UPDATE_TEMPLATE_FOLDER","DELETE_TEMPLATE_FOLDER","SET_USE_DEFAULT_CUSTOM_EMAIL","GET_APPS","EXPORT_USERS","GET_AUTO_TRACK_PROJECT_SETTING","GET_CUSTOMER_DISCOUNT_VISIBILITY_SETTING","UPDATE_QUOTE_EXCEL_COLUMN_PREFERENCES","GET_VENDOR_QUOTATION_NOTIFICATIONS","GET_VENDOR_QUOTATION_MY_LOGO","GET_VENDOR_QUOTATION_BID_EMAIL","SET_DEFAULT_PROJECT_VISIBILITY","UPDATE_QUOTE_AUTO_SAVE_PREFERENCE","newPreference","quoteAutoSavePreference","fetched","quoteExcelColumnPreferences","isUpdatingQuoteExcelColumnPreferences","newQuoteExcelColumnPreferences","isGettingQuoteExcelColumnPreferences","isGettingCustomerVisibilitySetting","displayAllBrands","isGettingAutoTrackProjectSetting","autoTrackProjects","isGettingVendorQuotationAutoTakeoffSetting","vendorQuotationAutoTakeoff","isGettingVendorQuotationNotifications","vendorQuotationNotifications","isGettingVendorQuotationMyLogo","vendorQuotationMyLogo","isGettingVendorQuotationBidEmail","vendorQuotationBidEmail","brandTags","responses","apps","applyUnavailabilityFilter","savedFilter","passwordCorrect","passwordNew","opportunityLabels","opportunityStatuses","visibilityListItems","contactData","postSearch","completedDiscounts","account","deletedOfficeId","deletedContactId","deleteduserId","userEmail","collaboratorData","partnerships","partnershipId","partnership","dataConfig","dataPartnershipId","officeList","includeAtsUsers","userIds","userIdList","firmList","firmsCount","usersCount","saveMulti","collaboratorsOffice","requestBody","newPreferences","newOfficeId","_user","aclRole","aclRoleName","addData","addErr","revokeData","revokeErr","finalUsers","userTypeId","manufacturerList","categoryList","brandRepId","noLoadingScreen","indexToFind","indexOfLetter","divisions","queryParam","divisionIds","productCategoryIds","share","newFirm","updatedFirm","shareQuotes","bodyToSubmit","immutableBrandRepResponse","brandRep","immutableResponse","manufacturerPreferences","newManufacturerPreferences","manufacturerPreference","preferenceId","newManufacturerPreference","deletedPreferenceId","rankings","ranking","command","upsert","mp","_err","_immutableResponse","directoryTemplateId","templateFolders","visibilityType","directoryTemplate","newTemplateId","updatedFolder","FIRM","searchMode","defaultCustomEmailResponse","useDefaultCustomEmailResponse","defaultCustomEmail","useDefaultCustomEmail","formValue","importData","rawDiscountPriority","quoteDiscountList","rawQuoteDiscountList","shopDrawingColor","isSearchingManufacturerDiscounts","sortedManufacturerDiscounts","sortedRegions","sortedTypes","defaultProjectVisibility","PUBLIC","FIRM_ONLY","OFFICE_ONLY","AccountServiceApi","getEmailSetting","CollapsibleCard","handleExpandClick","CardHeaderProps","expandOpen","PackageActionTypes","SearchPackagesAction","GET_LIST_PACKAGE","CreatePackageAction","CREATE_PACKAGE","CreatePackageAndAddToQuoteAction","CREATE_PACKAGE_AND_ADD_TO_QUOTE","EditPackageAction","EDIT_PACKAGE","EditPackageAndAddToQuoteAction","EDIT_PACKAGE_AND_ADD_TO_QUOTE","DELETE_PACKAGE","SearchFirmPackagesAction","SEARCH_FIRM_PACKAGE","QuickSearchFirmPackagesAction","QUICK_SEARCH_FIRM_PACKAGE","DeletePackageAndSearchFirmPackagesAction","DELETE_PACKAGE_AND_SEARCH_FIRM_PACKAGE","CheckingProductInPackages","CHECKING_PRODUCT_IN_PACKAGES","isPublishing","publishSeriesDraft","redirectToDetail","PublishDialogProps","completedFilters","step2Country","step2StateProvince","step2City","onBlurTrack","step2CompanyName","step2CompanyAddress","step2PostalCode","step2OrganizationType","nextButton","keepDirtyOnReinitialize","forceUnregisterOnUnmount","step2Final","SpecModalFormVariant","ContactTypes","GetContactsListSuccess","GET_CONTACTS_LIST_SUCCESS","SelectContact","SELECT_CONTACT","SetSelectedContact","SET_SELECTED_CONTACT","SetStoredContactDataAction","SET_STORED_CONTACT_DATA_ACTION","withConfiguratorSeriesId","withConfiguratorSeries","WithConfiguratorSeriesIdInner","getSeries","setConfigSeriesId","_seriesId","nextseriesId","WrappedWithConfiguratorSeriesIdInner","PRODUCT_CONFIG_FORM","onCurrencyChange","completedInitialRecAttributesSearch","setCompletedInitialRecAttributesSearch","maskSectionContainer","maskSectionContainerTitle","emptyMaskDisplay","chipStyle","isPT","maskOptions","setMaskOptions","baseModelNumber","optionButtons","attributeOptionName","attributeOptionKey","handleOptionChipAdd","maskChip","handleBaseKeyChange","maskOptionsCopy","selectedMaskChips","newMaskOptions","_provided","onChipEditModeToggle","onChipDelete","hasAttributeOption","OPTION_EXCLUSION_DIALOG_FORM","exclusionInput","addNewButton","configFormValues","setSelectedAttributeId","exclusionDialogOpen","exclusionPopperAttributeOptionKey","exclusionPopperOptionDescriptionIndex","closeExclusionDialog","attributeOptionAddId","exclusionAddList","selectedExclusionAttributeAddId","selectedExclusionAttributeAddKey","unselectedAttributes","exclusion","attributesForExclusion","exclusionOptionsBySelectedAttributeAdd","ImmutableExclusionOptionsBySelectedAttributeAdd","exclusionOptionsBySelectedAttributeAddValues","newExclusionOptionList","exclusionValue","indexToDelete","valuesArray","exclusionAddIndex","exclusionValues","selectedExclusionAttributeOptionId","optionsForExistingExclusion","imutableOptionsForExistingExclusion","exclusionOptionsBySelectedExistingAttributeAddValues","immutableExclusion","existingExclusionOptionList","newExclusionAddList","exclusionAddInForm","exclusionAddListInForm","immutableExclusionAddInForm","hasAttributeOptionValue","exclusionAdd","immutableExclusionAdd","currentOption","exclusionAddListInFormWithOrWithoutExclusionAdd","prevOptionExclusion","keyExclusionsById","exclusions","keyedValues","newExclusion","nowExclusionKeyedById","prevExclusionKeyedById","removedValues","prevExclusionValues","nowExclusionValues","validExclusionAddListInFormWithOrWithoutExclusionAdd","newAttributeOptionsWithUpdatedExclusions","attributeOptionValues","currentOptionId","newAttributeOptionValues","excludeIndex","exclude","excludeValues","newExcludeValues","dialogContent","closeWholeExclusionDialog","wholeExclusionOptionDialogOpen","wholeExclusionPopperAttributeOptionKey","initalList","wholeExcludeList","setWholeExcludeList","filteredAttributeOptions","checkboxes","newExcludes","finalAttributeOptions","previousExcludes","nextExcludes","removedOption","removedOptionKey","excludes","applyWholeExclusion","priceInputContainer","CONFIG_OPTION_DIALOG_FORM","suffixPath","pricesPath","hasOptionDescription","formattedPricesPath","isPOAPath","pricesType","addNewButtonContainer","isFetchingAttributeOptions","pimAttributeOptions","attributeOptionValuesAdd","attributeDescriptionAddId","immutableDescriptionOptionValueAdd","immutableAttributeOption","isCheckbox","brandFilter","originalSeriesDeletedOptionValueIds","getAttributeOptions","setToBeRevokeObjectURLs","formUseSwatch","formUseImage","formUseSpec","isCategoryLocked","descriptionInputValue","setDescriptionInputValue","descriptionOptionValues","activeStatusFilter","currentPrice","currentSuffix","currentExclude","seriesAttributeOptionId","hasBeenDeleted","newAttributeOptionId","convertedAttributeOption","optionExclusionIds","searchOptionDescriptions","CutsheetDisplay","formFilePathArray","formFilePathString","CONFIG_PAGE_ROUTE_TYPES","LEFT_COLUMN_WIDTH","addedOptionInputs","light","optionsInput","optionsDialogOpen","filteredSelectedAttributeOption","transformedSelectedAttributeOption","pimAttributes","categoriesList","getAttributes","addNewAttributeOptionsPopperEditModeKey","setAddNewAttributeOptionsPopperEditModeKey","attributeInputValue","setAttributeInputValue","optionsPopperError","setOptionsPopperError","initialAttributeId","setInitialAttributeId","deleteOptionValueModalOpen","toggleOptionValueDeleteModal","newOptionValues","setNewOptionValues","toBeRevokeObjectURLs","newlyDeletedOptionValueIds","setNewlyDeletedOptionValueIds","bypassFrozenCategory","setBypassFrozenCategory","searchAttributes","isAccessFeatSwatches","originalSeriesOptionValues","attributeOptionValuesAddCount","descriptionOptionValueAdd","formDisplayAsAttribute","formUseAsProductImage","formUseAsProductSpec","foundOtherCurrentFinalProductImageOption","foundOtherCurrentFinalProductCutsheetOption","lastValidDNDIndex","addedOptionDragableDisabled","descriptionCount","prevValues","closeOptionPopper","attributeIds","attributeOptionIds","_attributeOption","notEntireAttributeDescriptionDeleted","_attributeOptionId","exclusionIds","checkAddToSeries","_imageArray","_productImageArray","valueWithSwatchFileId","valueWithSwatchProductImageFileId","immutableDescriptionOptionValues","immutableDescriptionOptionValuesFiltered","immutableDescriptionOptionValueAddWithSwatchProductImageFileId","productImageArray","immutableDescriptionOptionValueAddWithSwatchFileId","descriptionOptionValuesWithOrWithoutImmutableDescriptionOptionValueAdd","newAttributeOptionWithRequire","newAttributeOptionWithRequireFilteredValues","newAttributeOptionWithRequireFiltered","newAttributeOptions","newAttributesWithChangedKey","updatedNewAttributesWithOverride","declareOptionBasedProductImageAsFinal","declareOptionBasedManufacturerCutsheetAsFinal","existingFinalImageOptionKey","existingFinalCutsheetOptionKey","checkMissingValueAndProceed","validatedOptionValues","formValueIds","missingOptionValueIds","isDeleted","_newOptionValues","onAttributeChange","onOptionTypeChange","checkValue","NewOptionItem","_attributeKey","newAttributeId","convertedAttribute","newAttributeOptionValuesAdd","newDescriptionOptionValueAdd","isReplacingWithNewlyDeleted","currentSelectedOption","immutablecurrentSelectedOption","currentSelectedOptionId","attributeOptionValuesAddWithImmutableDescriptionOptionValueAdd","immutableOption","onDescriptionFocus","removeSwatch","removeImage","handleAttributeOptionDelete","provided3","snapshot3","optionContainer","optionSection","optionRow","optionColumn","staticSelectIcons","exclusionDisplay","exclusionIcon","overflowAuto","compactStringDisplay","selectSite","deleteMaskOption","setExclusionDialogOpen","setWholeExclusionOptionDialogOpen","setwholeExclusionPopperAttributeOptionKey","setExclusionPopperAttributeOptionKey","setExclusionPopperOptionDescriptionIndex","attributeOptionsInForm","optionsTableColumns","attributeOptionInForm","attributeOptionIndex","topLevelExclude","allExcludeNames","topLevelExcludeDisplay","optionDescriptionIndex","immutableOptionDescription","descriptionOptionValue","descriptionSuffix","exclusionDisplayString","WholeExclusionDialog","makeMaskArray","maskStringInput","attributesInSeries","attributesInSeriesSplit","selectedString","attributeLabel","toTheEnd","endingMask","ProductConfiguratorPage","refConfigurator","updateSeriesAndRoute","addSeriesAndRoute","isAutoquote","maskString","maskOption","maskOptionIsBase","maskKey","keyWithSyntax","priceWithNullValues","attributesOnly","immutableAttributesOnly","immutableOptions","attributesAndOptions","attributesAndOptionsWithNewKeys","_attribute","keyedAttribute","newAttributeValues","optionWithNewKey","finalAttribute","finalAttributeKey","replacementsList","CREATE","updatedOptions","currentSeriesOptions","currentSeriesOptionValues","replacements","newOptionValue","replacementFound","currentOptionValue","replacementData","exclusionGroups","updatedExclusionGroups","exclusionStringValue","replacementOption","priceGroups","updatedPriceGroups","priceOptionStringValue","firmSeries","toBeUpdatedSeriesid","isRecommendedConfig","disableSave","initialTabValue","PRODUCTS_PACKAGES_CONFIGS_TAB_TYPES","CONFIGS","TooltipTab","ConfigUnlistedAttributesWidget","ADVANCED","ConfigFeaturesWidget","ConfigOptionsWidget","NumberGeneratorWidget","prevManufacturerId","setSeriesId","allRefs","unlistedAttributesInfo","features","attachment","menuLabels","attachmentContainer","locationState","configSeries","allAttributesFromSeries","changeKeys","valuesList","_ctx","attrMap","firmSeriesId","lookup","FontNames","decompressJson","compressedJson","arrayToString","inflate","encoded1","encoded2","encoded3","encoded4","bufferLength","decodeFromBase64","compressedJsonForFontName","CourierCompressed","CourierBoldCompressed","CourierObliqueCompressed","CourierBoldObliqueCompressed","HelveticaCompressed","HelveticaBoldCompressed","HelveticaObliqueCompressed","HelveticaBoldObliqueCompressed","TimesBoldCompressed","TimesItalicCompressed","TimesBoldItalicCompressed","fontCache","Font","getWidthOfGlyph","glyphName","CharWidths","getXAxisKerningForPair","leftGlyphName","rightGlyphName","KernPairXAmounts","cachedFont","CharMetrics","WX","KernPairs","name1","name2","decompressedEncodings","AllEncodingsCompressed","allUnicodeMappings","Encoding","unicodeMappings","canEncodeUnicodeCodePoint","codePoint","encodeUnicodeCodePoint","hexCode","padChar","supportedCodePoints","Encodings","ZapfDingbats","zapfdingbats","WinAnsi","win1252","getProductMedia","productFiles","dateTimestampInSeconds","timestampInSeconds","approxStartingTimeOrigin","timeOrigin","createUnixTimestampInSecondsFunc","browserPerformanceTimeOrigin","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","oppositeDirection","_props$anchor","anchorProp","_props$ModalProps","ModalProps","BackdropPropsProp","_props$open","SlideProps","isHorizontal","getAnchor","docked","slidingDrawer","Slide","modal","paperAnchorLeft","paperAnchorRight","paperAnchorTop","paperAnchorBottom","paperAnchorDockedLeft","paperAnchorDockedTop","paperAnchorDockedRight","paperAnchorDockedBottom","_deleteIn","dP","TypographyWrapper","ignoreCase","ignoreAccents","matchFrom","defaultInputProps","selectValue","selectOption","isOptionDisabled","isPromise","diacritics","letters","stripDiacritics","trimString","defaultStringify","rawInput","_ignoreCase$ignoreAcc","A11yText","DummyInput","emotion","NodeResolver","STYLE_KEYS","LOCK_STYLES","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","maxTouchPoints","activeScrollLocks","ScrollLock","accountForScrollbars","touchScrollTarget","targetStyle","originalStyles","currentPadding","adjustedPadding","listenerOptions","_ref$1","ScrollBlock","_PureComponent","blurSelectInput","getScrollTarget","ScrollCaptor","onBottomArrive","onBottomLeave","onTopArrive","onTopLeave","_this$scrollTarget","scrollTarget","isDeltaPositive","availableScroll","shouldCancelScroll","cancelScroll","handleEventDelta","deltaY","touchStart","changedTouches","startListening","onWheel","onTouchMove","ScrollCaptorSwitch","instructionsAriaMessage","isSearchable","valueEventAriaMessage","clearIndicator","groupHeading","indicatorsContainer","menuList","menuPortal","multiValue","multiValueLabel","primary75","neutral70","neutral90","blurInputOnSelect","captureMenuScroll","closeMenuOnSelect","closeMenuOnScroll","escapeClearsValue","formatGroupLabel","openMenuOnFocus","openMenuOnClick","pageSize","screenReaderStatus","tabSelectsValue","instanceId","ariaLiveSelection","ariaLiveContext","focusedOption","focusedValue","inputIsHidden","menuOptions","controlRef","focusedOptionRef","menuListRef","focusInput","blurInput","inputIsHiddenAfterUpdate","onMenuClose","clearFocusValueOnUpdate","isOptionSelected","announceAriaLiveSelection","removedValue","lastSelectedValue","custom","instancePrefix","blockOptionHover","openMenu","openAfterFocus","_this$props4","clearValue","isComposing","initialTouchX","initialTouchY","userIsDragging","deltaX","onControlMouseDown","onClearIndicatorMouseDown","onDropdownIndicatorMouseDown","onMenuOpen","_this$props5","announceAriaLiveContext","_this$props6","hideSelectedOptions","_this$props7","_this$state2","focusValue","removeValue","popValue","focusOption","cacheComponents","_selectValue","_menuOptions","buildMenuOptions","startListeningComposition","startListeningToTouch","_this$props8","getNextFocusedValue","getNextFocusedOption","_this$props9","scrollToFocusedOptionOnUpdate","stopListeningComposition","stopListeningToTouch","_this$props10","_this$state3","openAtIndex","_this$props11","_this$state4","focusedIndex","nextFocus","_this$state5","getTheme","nextSelectValue","_this$state6","lastFocusedIndex","lastFocusedOption","_this$props12","onCompositionStart","onCompositionEnd","_props$inputValue","toOption","shouldHideSelectedOptions","onHover","onOptionHover","getElementId","onMouseMove","hasGroups","groupId","_this$state7","_this$props13","focusedValueMsg","valueFocusAriaMessage","focusedOptionMsg","optionFocusAriaMessage","resultsMsg","screenReaderMessage","resultsAriaMessage","countOptions","_this$props14","inputId","getInputRef","onInputBlur","onInputFocus","ariaAttributes","_this$commonProps","commonProps","autoCapitalize","autoCorrect","spellCheck","_this$components","_this$props15","_this$state8","isOptionFocused","_this$props16","onClearIndicatorTouchEnd","_this$props17","_this$components2","onDropdownIndicatorTouchEnd","_this$components3","_this$state9","_this$props18","onMenuScrollToTop","onMenuScrollToBottom","menuUI","getFocusedOptionRef","hasOptions","headingId","_message","menuPlacementProps","menuElement","_ref6$placerProps","onMenuMouseDown","onMenuMouseMove","getMenuListRef","_this$props19","delimiter","constructAriaLiveMessage","_this$components4","_this$props20","getCommonProps","renderLiveRegion","getControlRef","onControlTouchEnd","renderPlaceholderOrValue","renderClearIndicator","renderLoadingIndicator","renderIndicatorSeparator","renderDropdownIndicator","renderMenu","renderFormField","bulkDeleteDrawings","triggerSpecAssist","cancelGetSeriesDuplicateProductsByIdPolling","triggerSpecAssistRequest","autoSetDrawingName","togglePinMasterDrawing","togglePinTemplateDrawing","getPinnedDrawing","loadSpec","getMasterDrawerData","getDrawingById","setSpecPrintConfig","getSpecPrintConfig","updateMasterDrawingAndGetMasterSpec","updateTemplateDrawingAndGetTemplateSpec","updateMasterSpecAndRedirect","updateTemplateSpecAndRedirect","updateMasterDrawing","updateTemplateDrawing","deleteMasterDrawingAndGetMasterSpec","deleteTemplateDrawingAndGetTemplateSpec","deleteMasterDrawing","deleteTemplateDrawing","deleteMasterSpecAndGetMasterProjectById","deleteTemplateSpecAndGetTemplateProjectById","selectMasterSpec","selectTemplateSpec","selectMasterProject","getMasterSpec","receiveData","getTemplateSpec","pureValidateDrawing","validateDrawing","validateAddProductToDrawing","getSeriesWithCombinedFilters","projectSelected","updateDrawing","updateSpec","updateMasterSpec","updateTemplateSpec","getPrintFormats","createSpec","createMasterSpec","createMasterSpecAndRedirect","createTemplateSpecAndRedirect","reorderSpecsAndGetProject","deleteSpec","deleteSpecAndGetProject","deleteSpecAndGetProjectById","deleteMasterSpec","deleteTemplateSpec","getDrawingRules","getDrawingRulesAndGetSpec","createDrawingThenSelectAndRedirect","duplicateDrawingWithinSpec","deleteDrawing","selectSpec","SelectDrawing","createDrawing","selectDrawingAndRedirect","selectCategoryAndGetSpecs","editSpecTitle","searchSpecs","specToolSpecListSearchSpecs","deleteSpecAndSearchSpecs","getSpecFiles","linkGenericProductToProduct","unlinkGenericProduct","updateSpecFilesPermission","productCatalogueCreateDrawing","logGuestUserDownloadSpec","DELETE_SPEC_AND_GET_PROJECT","CREATE_DRAWING_THEN_SELECT_AND_REDIRECT","GET_DRAWING_RULES_AND_GET_SPEC","GET_PRINT_FORMATS","UPDATE_MASTER_DRAWING_AND_GET_MASTER_SPEC","UPDATE_TEMPLATE_DRAWING_AND_GET_TEMPLATE_SPEC","GET_DRAWING_BY_ID","LINK_GENERIC_PRODUCT_TO_PRODUCT","UNLINK_GENERIC_PRODUCT","UPDATE_SPEC_FILES_PERMISSION","specDrawings","fetchEndpoint","uniqueSpecIds","specDrawing","masterTemplateSpecId","CANCEL_SPEC_ASSIST","setAndStartNewDrawing","newDrawingId","partialProjectPath","partialSpecPath","projectpath","specpath","newDrawingName","getDrawingLabelBaseOnProducts","newDrawing","isPinned","masterDrawerData","masterSpecsCount","templateSpecsCount","fetchedSpecsSize","masterSpecsOffset","templateSpecsOffset","withInfiniteScroll","populate","masterSpecsResponse","templateSpecsResponse","mastersSpecsData","templateSpecsData","immutableMastersSpecsData","immutableTemplateSpecsData","specData","isDeletingAlternativeProduct","closeModalAfter","displaySnackbar","_alternativeProducts","trackingAlternativeProducts","savedByUser","savedByOffice","savedByFirm","isMasterTemplate","isProject","basisCategoryName","saveAlternatives","productGroups","masterProjectId","templateProjectId","specIdToGet","drawingSpecId","onDeleteSuccess","deleteId","selectedMasterProjectId","selectedTemplateProjectId","firstDrawingId","masterSpecId","firstMasterSpecId","masterSpecIdObject","templateSpecId","firstTemplateSpecId","templateSpecIdObject","testProject","productCatalogue","missingCategoryId","missingCategoryFilter","missingRules","missingRuleByCategoryId","categoryIdFromRule","missingRuleWithMissingCategoryId","seriesFilterInput","attributeFiltersList","hideDiscontinuedSeries","seriesFilterInputFilterValue","finalMissingRuleFilter","valueFilters","manufacturerFilter","attriValuePath","useList","CHILD_HEIGHT_COMPATIBLE_CATEGORY_IDS","BARIATRIC_COMPATIBLE_CATEGORY_IDS","useValue","useFilter","isRangeValue","lowerRangeValue","upperRangeValue","attributeFilterInfo","isQuantizedRange","metricMin","metricMax","imperialMin","imperialMax","isUSLocation","valueFilter","missingFilter","finalFinalFilters","statusFilter","finalFinalFinalFilters","openAlternativeModal","failedSelfRules","RULES_DIALOG_KEY","updateAccessible","additionalSingleUsedFilters","_products","scores","failed","missing","firstSpecId","openSnackbar","resetEditProductIndex","clearFilters","useSpecAssist","baseUseSpecAssist","finalEnableSpecAssist","_drawings","updatedSpecs","pageData","specCreateParams","specCreateData","specCreateError","immutableSpecCreateData","newSpec","specsOrder","reorderSuccess","newSelectedSpecId","firstMissingRule","specAndDrawingIds","firstDrawing","originalDrawingId","originalDrawing","immuFirstDrawing","duplicatedDrawing","withLoad","getMasterTemplateSpec","getSpec","__PLACEHOLDER__","SELECT_CATEGORY_ERROR","updatedSpec","pathDetail","createdByFirmName","specSearch","identifiedBrand","identifiedProductNumber","linkedFiles","permissionLowercase","linkedFileArray","updatedLinkedFile","newLinkedFile","toggleSpecFileVisibility","guestEmail","TAB_VALUE","attributeTitle","attributeContainer","attributeBody","attrName","attrDescription","attrImage","UTM_NULL_VALUE","getShareLinkUtmContent","utmContentType","modeToUtmContentType","utmContent","buildSeriesShareLink","seriesLinkTemplate","urlWithoutHash","queryIndex","URLSearchParams","appendQueryParams","utm_content_type","buildShareLinkUtmParams","CopyLinkButton","getLink","onCopied","iconButtonProps","setFallback","closeFallback","copyToClipboard","copied","Popover","makeFlagsWithCountryIds","whiteList","withName","mexicoFlag","Expansion","currentTabValue","OPTIONS","optionsTabUsage","featuresTabUsage","swatchTabUsage","showPrice","showSuffix","includeAlternates","haveSetInitDisabledSelections","productIsNotCompliant","firstMissingRequiredOptionRef","firstMissingRequiredSwatchRef","checkComplianceController","TabsTimeAmplitudeTrack","lastAddedTabUsage","updatedOptionsTabUsage","updatedFeaturesTabUsage","updatedSwatchTabUsage","FEATURES","SWATCH","featuresTime","optionsTime","swatchesTime","seriesPanelTabsTime","multi","priceSummary","addToDrawing","selectedMissingCategories","recommendedSpecProducts","recommendedProductId","draft","addingRecommendedProductToDrawing","getMediaFileIdByRegionLocaleOrFallback","dataMap","isFr","frCutSheet","manufacturerCutsheetSrc","manufacturerCutsheet","handleAddToDrawing","selectedDrawingProducts","handleAddToDrawingThenOpenAlternatives","_editProductIndex","handleGoToMissingRequiredOption","switchTabAndScrollToFirstOption","switchTabAndScrollToFirstSwatch","productFilters","expandedSeriesId","optionValueAlreadyCheck","isFeatures","filterOptionValue","atLeastOneOptionWithoutSwatch","buttonAction","selectedSeriesSpecificInitSelections","isCompliant","compliance","addProductToDrawingButtonProps","selectedCategoryIdWhiteList","checkProductsAndAttributesLoading","productFiltersForSelectedSeries","seriesSpecificFilterKeys","seriesSpecificFilterValuesArray","currencyType","selfFailedRulesLoading","addButtonText","rulesModalOpen","brandsToHidePrice","specToolSeriesLinkTemplate","selectedSeriesSpecificInitDisabledSelections","tabValueString","resetButtonProps","pumpCurveImageId","fanCurveImageId","epdFileId","configurationsFileId","hasWaterSenseAttribute","attributeWhitelist","addProductToDrawingTooltipLabel","dynamicExpansionPanelProps","dynamicExpansionPanelSummaryProps","whiteListedAttributesAndOptions","mapCtx","attributesAndOptionsCtx","availabilityByAppId","availabilityByDefaultLocation","productUnavailability","productPurchasability","expansionPanelSummary","productOrSeriesPrice","isPoaDisplay","productOrSeriesPriceForSpec","canadaLocationId","usaLocationId","productOrSeriesListPrice","draftProduct","draftSeries","seriesPimStatus","productPimStatus","productStatus","availabilityStatus","isAtLeastOneRequiredOption","isAtLeastOneRequiredSwatch","disableOptionsTab","disableSwatchPreviewTab","displayAttributeSubheader","stillHaveMissingHardRequire","handleShowPrice","generateInputProps","generateProps","checkedProp","initDisabled","mountOnEnter","heading","linkShared","shareConfiguratorLink","minListPrice","validMinListPrice","minListPriceLastUpdatedAt","priceDisplay","flagWidth","waterSenseLogo","viewMediaIcon","viewPumpCurveClicked","CURVE_PREVIEW_MODAL_ID","modelNumber","viewFanCurveClicked","viewConfigurationsClicked","productIsNotCompliantWarning","notCompliantWarningIcon","timeStampOnChange","addedTabUsage","fixed","TabIndicatorProps","tabContentContainer","attrOptionTitle","expansionContent","attrFirstValue","optionsContainer","descriptionsOnly","attributeSelection","handleShowSuffix","priceBreakdownContainer","expansionDetailsButtonContainer","dalConfigureProductPrompt","addToDrawingBtn","addToDrawingBtnLoader","ADD_PRODUCT_TO_DRAWING_MODAL_ID","controlProps","controlPropsError","columnGap","priceListCell","priceList","selectMatchingProduct","identityObjectSelector","disabledItem","zoomInIcon","checkBoxIcon","checkBoxIconOnDisabled","discontinusLine","swatchPreviewDialog","noPreviewContainer","noPreviewL","noPreviewS","boldPriceTitle","priceBreakdownSectionMargin","priceBreakdownLineMargin","priceBreakdownPricePadding","PriceBreakdownTable","matchingProductPriceSummary","basePrices","optionPrices","groupPrices","getKeyPrice","pricesMap","getKeyTotoalPrice","groupPrice","groupPriceIndex","priceGroupDataFromSeries","individualPrice","individualPriceIndex","SwatchList","currectInputProps","setCurrentInputProps","selectedOption","setSelectOption","handleOnOpen","handleOnSelect","accum","isHardRequired","isSoftRequired","firstMissingRequiredSwatchKey","theKey","isHardRequiredButNotSelected","isValueDiscontinued","ListComponent","dataIndex","OptionsTable","keyValue","heights","setHeights","isRecommendedProductLoading","isQuoteConfigurator","columnsPerRow","setWidth","index2","index3","radioHeight","descriptionHeight","priceListHeight","optionContainerMargin","useDirectMatchProduct","firstMissingRequiredOptionKey","InputType","contentId","optionValueDisabled","keyProductSeriesSpecificFiltersValues","attributeValuesWhitelistSet","awlValue","valueValue","valueDisplay","hasSeriesKey","hasProductSeriesSpecificFilterValues","hasValueValue","optionObj","_optionObj","_optionValueId","hasOptionObj","hasThisValue","getDynamicSamplingContextFromClient","public_key","getDsn","publicKey","user_segment","segment","dsc","getDynamicSamplingContextFromSpan","txn","v7FrozenDsc","_frozenDynamicSamplingContext","maybeSampleRate","sampleRate","sample_rate","assertThisInitialized","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","prevFormValues","getCountryDisabledPredicate","ITEM_HEIGHT","CreateMasterProjectFormVariant","rawCountriesList","selectVisibleCountries","enableDropdownLength","withTooltip","enableDropdown","gatewayEndPoint","extractGatewayError","fetchPreference","savePreference","saveRawPreference","msaccount","createEmailSetting","updateEmailSetting","updateData","upsertUserEmailSetting","getFirmBillingRules","fetchDataWithSuccess","saveFirmBillingRules","tableCell","KeyContactsAddedToProject","keyContactArr","contactListItem","CONTACT_DRAWER_ID","CONTACT_CONTENT_EDIT_KEY","updateCollaborator","updateAction","selectedContacts","getKeyContactsArr","keyContactArrImmutable","contactFormValues","keyContactArrImmutableWithContactData","menuComponent","drawerId","formContainer","AddKeyContacts","getInitialValue","createImmutableEqualSelector","makeSelectAllQuickTextList","makeSelectDefaultQuickTextByType","SeriesListFilter","updateFiltersFormValues","formattedDateAdded","formattedDateModified","getOfficeOfLoginUser","signedInUserOffice","userRoles","amendedpimStatuses","amendedStatues","configTypesCheckboxesContainer","setIsUpdatingDrawing","drawingProduct","includeUrl","frFileId","handleRevit","downloadProductMedia","projectAddress","isDirectDownload","ProjectDetailSpecDrawingProduct","deleteModalOpen","_deleteProduct","hoverOn","hoverOff","_handleRevit","showDnDIcon","drawingContainsCompetitorProduct","isUpdatingDrawing","Icons","alternativeContainer","displayNone","detailsContainer","productActionButtonsContainer","selectAtsApiState","selectProject","selectMasterProjectSepc","selectMode","getDrawing","selectLocale","selectloggedInUserOfficeLocation","selectIsAtsSpecTool","selectIdentity","UPLOAD_COVER_DRAWER_FORM","UploadCoverDrawer","isComplete","customImagesSize","FormElement","dropzone","formData","resetFieldDropzoneState","SubmissionError","origFileName","DownloadComplete","isAddMoreButtonDisabled","downloadComplete","radioGroupTitleText","linearProgress","UPLOAD_COVER_DRAWER","SPEC_BOOKLET_FORM_NAME","SpecificationBookletBeta","printStep","handleCancelUser","USER_DRAWER_ID","getOffice","specCreatorOfficeId","shouldDisablePrintContinue","selfUser","customCoverImages","coverImage","customCoverImagesIsMax","PrintHeader","specBookletSample","stepButtonHilight","stepButtonHilightNoBorder","stepButtonTitle","stepButtonSubtitle","arrowRight","arrowRightOrange","stepButton","newChip","CoverImageComp","customImagesIsMax","formField","LIXIL","ASB","DXV","GROHE","IconComponent","arrowDown","disableUnderline","userCustomerfield","UserSearchInput","ContactSearchInput","LixilPrintSpecDetail","TeamManagementUserDrawer","useCustomData","selfOffice","savedPrintConfig","selfUserLabel","savedPrintConfigAsInitialValues","savedCoverImage","defaultCoverImage","brandingPage","backCoverPage","customerLabel","coverImageId","includeStoryPages","includePNumber","includeBudgetPrice","includeQuantity","brandingPages","backCoverPages","updateUnregisteredFields","contactInfo","coverTitle","textEllipsis","reactDom","_extends_1","slicedToArray","objectSpread","classCallCheck","createClass","_typeof_1","possibleConstructorReturn","inherits","invariant_1","Manager","sortableInfo","sortByIndex","arrayWithoutHoles","iterableToArray","nonIterableSpread","toConsumableArray","keysToOmit","vendorPrefix","pre","OLink","setInlineStyles","setTranslate3d","setTransitionDuration","getPixelValue","getElementMargin","provideDisplayName","getScrollAdjustedBoundingClientRect","boundingClientRect","getPosition","pageX","pageY","getTargetIndex","oldIndex","getLockPixelOffset","lockOffset","getLockPixelOffsets","offsets","_offsets","minLockOffset","maxLockOffset","getScrollingParent","KEYCODE","TAB","ESC","SPACE","LEFT","UP","RIGHT","DOWN","NodeType","Anchor","Canvas","Textarea","clonedNode","sortableHandle","WithSortableHandle","wrappedInstance","isSortableHandle","AutoScroller","onScrollCallback","minTranslate","maxTranslate","_this$container","isAutoScrolling","defaultGetHelperDimensions","defaultShouldCancelStart","contentEditable","disableAutoscroll","getContainer","getHelperDimensions","helperClass","helperContainer","instanceOf","hideSortableGhost","keyboardSortingTransitionDuration","lockAxis","arrayOf","lockToContainerEdges","onSortEnd","onSortMove","onSortOver","onSortStart","pressDelay","pressThreshold","shouldCancelStart","updateBeforeSortStart","useDragHandle","useWindowAsScrollContainer","omittedProps","validateProps","_finallyRethrows","finalizer","sortableContainer","WithSortableContainer","nodeIsChild","_node$sortableInfo","handlePress","pressTimer","_awaitingUpdateBeforeSortStart","combinedDelta","cancelTimer","getActive","_temp6","_temp7","containerBoundingRect","_getHelperDimensions","marginOffset","_axis","offsetEdge","initialOffset","_isKeySorting","initialScroll","helper","_hideSortableGhost","sortableGhost","_useWindowAsScrollContainer","containerLeft","containerWidth","containerBottom","containerRight","_helperClass","listenerNode","handleKeyEnd","handleSortMove","handleSortEnd","sortingIndex","_onSortStart","isKeySorting","keyMove","_temp8","_temp9","_wasThrown","updateHelperPosition","animateNodes","autoscroll","_this$manager","_node2","edgeOffset","isValidSortingTarget","keyDrop","keyLift","_node$sortableInfo2","initialFocusedNode","getOrderedRefs","targetNode","containerScrollDelta","targetBoundingClientRect","targetTranslate","targetPosition","shouldAdjustForSize","sizeAdjustment","ignoreTransition","containerNode","onAutoScroll","_this$props5$keyboard","_getLockPixelOffsets","_getLockPixelOffsets2","windowScrollDelta","sortingOffset","_node3","mustShiftBackward","mustShiftForward","prevNode","getWrappedInstance","propTypes$1","omittedProps$1","sortableElement","WithSortableElement","SortableContainer","SortableElement","SortableHandle","WithStyles","_props$disablePadding","listStyle","areEqualValues","SelectInput","displayEmpty","inputRefProp","_props$MenuProps","MenuProps","_props$SelectDisplayP","SelectDisplayProps","valueProp","displayNode","setDisplayNode","isOpenControlled","menuMinWidthState","setMenuMinWidthState","useImperativeHandle","displaySingle","handleItemClick","displayMultiple","computeDisplay","onKeyUp","menuMinWidth","buttonId","iconOpen","MenuListProps","disableListWrap","NativeSelectInput","iconFilled","iconOutlined","defaultInput","NativeSelect","_props$IconComponent","ArrowDropDownIcon","_props$input","inputComponent","nativeSelectStyles","_props$autoWidth","_props$displayEmpty","_props$labelWidth","labelWidth","_props$multiple","_props$native","variantProps","withReduxForm","ReduxFormContext","_objectWithoutPropertiesLoose2","_inheritsLoose2","Hoc","_reduxForm","IObject","defined","TYPED_OK","_has","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","UserContactDrawerDetailsContact","showDeleteModal","editContact","CONTENT_EDIT_KEY","deleteContact","contactListProps","getManufacturerAndCategory","getDiscountAndAmount","deletable","userDefinedLabel","internalNumber","officeContact","officeNumber","extension","fullAddress","mobileNumber","salesReps","internalNote","branchId","pricingRegion","billTo","shipTo","userDefined","ownerType","ellipseEditButton","UserContactDrawerDetails","_modalProps","loginUserId","ownerId","UserContactDrawerDetailsContactEdit","toggleHandle","ThemeProvider","forcedTheme","muiTheme","createMuiTheme","makeSelectTheme","withProjectId","withProject","onGetProjectFailed","WithProjectIdInner","templateProject","nextProjectId","nextProjectType","WrappedWithProjectIdInner","paramsIdMaster","paramsIdProject","paramsIdTemplate","DefaultActionButtonContainer","deleteMenuItem","deleteItem","ActionButtonContainer","setShowDeleteModal","menuItemsState","setMenuItemsState","Row","OuterElementContext","OuterElementType","outerProps","gridRef","resetAfterIndex","useResetCache","outerElementType","overscanCount","itemData","__WEB_VITALS_POLYFILL__","getEntriesByType","navigation","navigationEntry","getNavigationEntryFromPerformanceTiming","TagEntityType","ownerWindow","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesWhitelist","tel","handlePointerDown","handleVisibilityChange","isContentEditable","focusTriggersKeyboardModality","handleBlurVisible","withForwardedRef","onMouseUp","MenuItemProps","cachedValidateAmount","validateAmount","numberValue","descriptionTooltip","altArrow","typeContainer","typesTitle","selectUserFirmId","selectCompanyName","selectCompanyAltName","selectXrefTypes","selectAppId","getXrefTypes","getFirm","_desc","SvgLoadingFile","sharing","AiServiceApi","getPrintJobs","filterParam","hidePrintJob","createProjectExtraction","getProjectExtractionById","buildingIconsById","selectMultiCard","selectedBuildingClasses","buildingClassIndex","selectedBuildingClass","getRequiredBuildingTypes","isOptional","minSelected","buildingClassList","buildingTypeList","buildingClassIdAsString","transformBuildingValues","formatedBulidingClasses","hiddenBuildingTypeCount","buildingTypesList","minStillRequired","filteredSelectedBuildingClasses","trimmedSelectedBuildingClasses","onSubmitTransform","chooseBuildingClass","buildingClassListItem","buildingClassListItemId","chooseBuildingType","blist","fieldProps","warningModal","initialFormStateCtx","projectBuildingClasses","projectIsMulti","formSelectedBuildingClasses","buildingTypesFromDataForClass","buildingTypesForClass","buildingTypeKey","priceDropdownSelect","setPriceDropdownSelect","ResponsiveDrawer","DrawerProps","AppBarWrapper","ResponsiveDiv","mobileMenuState","ResponsiveContentContainer","MobileMenu2","MobileDrawerProps","ContentWrapper","ResponsiveMenu","getOpenDrawerState","_widthBreakpoint","DrawerContents","HeaderContents","MobileDrawerContents","HeaderProps","isQuoteConnectRep","QuoteConnectHelp","menuColor","toggleMenu","collapseQuoteConnectButton","collapseButton","mobileDrawerBackdrop","mobileDrawerPaper","inProgress","created","awarded","pendingApproval","missed","quoted","lost","won","useNextVariants","MuiStepIcon","CreateTemplateProjectFormVariant","TopBar","EmptySpec","Loading","useSpecContext","SpecContext","DrawerBusyContext","useDrawerBusy","getObjectHash","ShareVendorQuoteUtil","checkIsDisabledForNextStep","bidInvitationResponse","generatePdfBid","attachmentId","getQuoteProductByQuoteProductId","targetedProductIndex","targetedSectionIndex","prepareBidResponseFormValue","quotePrintOG","applyDiscountQuoteProducts","sectionsWithoutDiscount","customerSections","shareQuoteSections","shareQuoteProducts","shareQuoteProduct","hasDefaultPrint","shareProduct","extractNames","displayUserName","checkBidProductDisable","productToMap","bidProductId","isSelectedSuggestQuoteProduct","suggestQuoteProducts","suggestProduct","getBidResponseSections","BidProducts","getSuggestQuoteProduct","sectionName","productLabel","getAllSelectedSuggestProducts","bidResponseResult","suggestProducts","attachSection","groupedSectionProducts","foundSuggest","suggestAttachProducts","matchAttachQuoteProductId","foundProduct","matchProductNumber","getTemplateFieldIds","ShareVendorQuoteContext","ShareVendorQuoteDispatch","ShareVendorQuoteContextProvider","onDownload","bidResponseFormValues","setBidResponseFormValues","setBidInvitationResponseId","setBidInvitationResponse","bidResponseEmailSetting","setBidResponseEmailSetting","isLoadingShare","setIsLoadingShare","setGeneratePdfBid","setComplete","setDraft","attachQuote","quoteConnectBidEmailSettingResult","QuoteServiceApi","getDraft","responseDraft","selectedFields","appliedDiscount","termAndCondition","BidInvitationResponseAttachments","checkReGeneratePdf","bid","generatePdfBidsFile","downloadObj","isSharingQuote","pdfHash","handleOnNextStep","handleOnBackStep","handleOnCancel","handleOnDownloadQuotePrint","downloadData","handleClearDiscount","resetPdfBids","handleOnApplyDiscount","updatedFormValues","_customerId","handleOnFormValuesChange","handleOnFormAttachmentsChange","attachmentsData","bidInvitationResponseAttachments","handleOnComplete","handleOnSubmit","repExtraInfo","termsAndConditions","specialTerms","comments","selectQuoteProductByCustomerIdAndQuoteProductId","bidInvitationProductId","saveResult","dispatchValue","onNextStep","onBackStep","onFormValuesChange","onFormAttachmentsChange","onDownloadQuotePrint","onClearDiscount","notifyUpdateReGeneratePdf","generatePdfData","onComplete","selectIsComplete","selectBidResponseEmailSetting","selectIsDisabledForNextStep","selectIsLoadingShare","selectActiveStep","selectBidResponseFormValuesByField","selectBidResponseFormValues","selectBidInvitationResponse","useShareVendorQuoteContextSelector","StepperBar","stepLabels","isLastStep","isDisabledNextButton","dropzoneImageContainer","FileDropZone","initialFileId","acceptFileTypes","notifyUploadChange","setFileId","uploadFileId","prevButton","emailImage","avatarContainer","avatarTitleContainer","deleteIconContainer","attachmentLabel","AttachmentsAndComments","printQuoteFiles","selectGeneratePdfBid","downFilesHash","setDownFilesHash","User","printStatus","isRefreshFile","pdfAttachment","handleSubjectChange","handleDescriptionChange","handleOnClearFile","handleRemoveAttachment","handleRegeneratePdf","ApplyCustomerDiscount","enableDiscount","setEnableDiscount","customerCheckbox","firstCustomerId","expansionPanel","expansionPanelDetails","expansionPanelSummaryContent","expansionPanelSummaryDetails","attachmentIcon","BidInvitationListItem","getBidInvitationName","getUserInfo","BidInvitationList","completeView","ShareVendorQuote","Header","stepTitles","SideMenu","AtsSvgQuote","filterForValidSections","getCustomerDisplayName","QUOTE_PRINT_SECTION_FIELDS","QuotePrint","readyForInitialize","readyToIntegrateConfig","checkedSections","timeoutID","sectionTooManySelectedIndexes","columnsBySectionExpanded","productSectionsExpanded","productSectionsExpandedList","selectedCustomerForProducts","selectedCustomerForColumns","selectedCustomerForSummary","multipleCustomers","originalQuote","_printConfigApplied","fetchAndSetupCustomerData","_selectedCustomerId","dataFetched","forPrint","callbackForPrint","resetSections","isQuoteSelectedCustomer","withReset","updatedSections","_grandTotals","visibilityList","quoteDiscountVariations","selectedCustomerId","_updatedSections","visibleProducts","getVisibilityProducts","fetchQuotePrintConfig","generalConfig","quotePrint","applyPrintConfigToForm","hasFeatEmailImprovements","applyIfPresent","checkIfMaximumColumnsReached","getConfigSelectionErrorFromPreview","fullCustomers","customerIds","sectionsInForm","newSectionTooManySelectedIndexes","customerSection","customerSectionKey","customerHasTooManyFields","getSectionValue","getSectionFormPath","useCustomerSectionPath","resolveSectionPath","resolveSectionValue","renderSectionTitle","titleText","fieldNames","hideApplyToAll","onApplyToAll","applyToAllButton","ProjectInfo","panel","expansionPanelDetailsProjectInfo","QuoteLogoPosition","CreatorInfo","isCustomEmailChecked","CustomerDiscount","allCustomerIds","customerNote","handleSectionChange","formPath","allProductsInSectionSelected","overrideSelected","checkedProductIds","handleSectionParentchange","sectionTemplateId","activeCustomerId","compactQdvEntry","targetedQuote","sectionColumnsParentCheck","sectionIndexes","sectionIndexesBySectionTemplateId","sectionFieldValues","sectionFormPath2","sectionFormPath","fieldsDataInQuote","fieldsDataInQuoteByFieldId","_fieldIds","formValueSections","fieldsDataInFormValuesByFieldId","handleSwitch","SectionColumns","customerMenuItems","sectionsColumnsDetails","templateTitle","sectionNote","sectionCheckboxGroup","sectionColumn","sectionTemplates","nonDupliateByIdSectionTemplates","_section","sectionColumnsParent","sectionField","isSelectAllButtonSelected","selectAllButton","hasColumnError","panelError","splitQuote","labelPlacement","handleOnCustomerSelectForCulumns","sectionColumnsError","sectionColumnDetail","sectionColumnDetailSummary","sectionColumnDetailSummaryContent","viewColumnsBySectionTitle","expansionPanelDetailsTemplate","handleColumnsBySectionChange","viewColumnsBySection","handleOnCustomerSelectForProducts","handleOnCustomerSelectForSummary","ProductSpecs","isAllSelected","sectionPanels","excludeSection","productCheckboxes","productRowContainer","checkedValues","productExpansion","sectionsExpandedCount","sectionExpanded","productSectionExpansionPanelRoot","expansionPanelSummaryProductsToPrint","expandArrow","productExpansionContainer","InfoToDisplay","QuoteSummary","isAllSectionSelected","calculation","calculationIndex","quoteSummarySectionPanels","sectionCalculations","calculationCheckboxes","quoteTotal","totalObject","totalName","grandTotalContainer","grandTotal","otherCharges","discountOrCharge","hasAtLeastOneCheckbox","quoteSummaryTitle","Others","getVisibilityList","immutableIs","discountToggled","currentQdvMap","prevQdvMap","activeQdvEntry","prevActiveQdvEntry","qdvJustLoaded","prevActiveCustomerIdForRebuild","discountOn","qdvQuotes","qdvEntry","sourceSections","formSections","filteredSource","existingBySectionId","newSections","sourceSection","currentCustomers","prevCustomer","customerQuote","quoteWithoutDiscount","mergedSectionInitalValues","mergedSections","hideCustomerDiscount","customerTitle","sectionsContainerTitle","hasMatchingSelectedCustomer","quoteWithUpdatedSections","compactDiscountOn","currentQdvForMerge","qdvEntryForMerge","sectionsForProducts","mergedSectionValues","sectionTemplatesSectionCalculationNameMap","calc","quoteTotalKeys","discountListLabels","currentQuoteDiscountVariations","currentQuoteWithoutDiscount","currentGeneralConfig","hasExistingFormValues","prefValue","defaultInitialValues","quoteTitle","officeContactInfo","contractorName","sectionNotes","productNotes","logoAlignment","productImage","productHyperlink","customCreatorEmail","allowToAddress","productsWithProductIds","defaultPrintByDefault","defaultPrintByCustomer","fieldsIds","sectionCalculationIds","CUSTOMER_DISPLAY_NAME_OPTION","ActionCell","edit","showReplacementMenu","handleCreateReplacementShopDrawing","anchorRef","prevOpen","preventOverflow","boundariesElement","autoFocusItem","textFlowEllipsis","FileCell","fileLanguageCode","overSizeFileName","isATSFile","fileLoading","fileOverSize","Warning","sizeDisplay","SHOP_DRAWING_SECTION_FIELDS","ShopDrawingPrint","uploadedProducts","loadingProductIndex","selectedFileSizeArray","getProductMediaByLocaleRegionOrFallback","mediaDataKey","linkedProjectLocation","mediaData","CustomizePrint","CustomerDelivery","allCustomers","customerRadios","headerKey","firstLastNameKey","orgNameKey","CUSTOMER","ORGANIZATION","filteredCheckedSections","checkedSection","handleUpload","fileItem","fileReader","FileReader","onloadend","uploadLangaugeCode","readAsArrayBuffer","mergeMediaWithProduct","productMedia","productMediaFilesOfProduct","checkUploadLimitReached","totalAddedFileSizeInMB","totalFileSizeRemaining","withoutSpec","selectedFileSizeArrayCount","visibleFirmProductIds","mergedProducts","filteredProduct","headerName","renderCell","_sectionIndex","renderFileCell","renderActionCell","productUploadingKey","isFirmProduct","disableDelete","cutsheetFileId","canCreateShopDrawing","showCreateShopDrawingReplacementButton","showPdfEditor","openPdfEditorForProduct","handleDeleteFile","onClickCapture","TableContainer","tableLayout","constructPdfProducts","productsAlreadyAdded","newPdfProducts","uniqueVisibleProducts","filteredSectionProducts","buildPdfProduct","expansionPanelDetailsChooseProducts","containerPadding","inactiveDialog","isInactiveProduct","closeInactiveProductDialog","hasFetchedColor","sectionIndexesArray","sectionsFromForm","sectionsFromQuote","selectedProductIds","updatedSelectedFileSizeByMediaTypeInMB","fileSizeArray","productFromMerged","productIdFromMerged","showDrawing","shopDrawingSize","shopDrawingSizeInMB","cutsheetSize","cutsheetSizeInMB","operationGuideSize","operationGuideSizeInMB","installationManualSize","installationManualSizeInMB","warrantySize","warrantySizeInMB","otherSize","otherSizeInMB","fixedFileSizes","setSelectFileSizeByMediaTypeInMB","fileLinkStyles","trash","productColumn","productRowTitles","linkedProjectId","linkedProject","removeUniqueIdentifier","newProducts","transformToAddSectionTitle","sectionsFromValues","transformedSectionValues","noTitleSection","QuoteDownloadPreviewUtil","transformSectionValues","addSectionTitle","allowEmptySectionWithNote","cleanSections","filterCheck","transformQuoteForDefaultPrint","printConfig","quotePrintFormValues","updatedQuote","_quote","newSection","targetedSection","targetedConfig","sectionFromConfig","productsFromSectionConfig","productsWithDefaultPrint","sectionWithDefaultProducts","transformCreatorField","creatorValue","trimQuoteDiscountVariations","qdv","resetValues","sectionCalcs","isValidEmail","QuoteEmailUtil","getCustomerDisplayInfo","getUserName","givenName","familyName","getFileIconType","buildSendEmailParams","selectedCustomerIds","emailData","jobs","fileBaseUrl","toEmails","downloadLinksHtml","customerJobs","messageHtml","signatureHtml","linksSection","htmlBody","emailParam","bcc","att","transformQuotePrintData","trimmedQdv","currentSections","transformedSections","addCalcToSections","secs","computedCalcs","resetCalcs","calcMap","resetGrandTotals","transformShopDrawingPrintData","mediaTypes","formatFileSize","hasInvalidEmails","cId","QuoteEmailContext","useQuoteEmail","OM_FORM_NAME","ENABLED_ATTACHMENT_TYPES","defaultCustomerSettings","attachmentTypes","excelCsv","quoteProjectInfo","expirationDate","logoPosition","creatorInfo","applyCustomerDiscount","splitQuoteBySection","shopDrawingPrintFormat","pageNumbers","titlePage","tableOfContents","shopDrawingProjectInfo","printDate","shopDrawingCustomerDisplayName","shopDrawingCustomerId","shopDrawingFileTypes","leftPanel","middlePanel","rightPanel","customerItem","customerEmail","customerOrg","customerAddress","settingsSection","settingsSectionTitle","applyToAll","cancelButton","dialogActions","customerRowActive","customerRowInactive","attachmentTypeLabel","printSettingsHint","excelCsvText","customerRow","attachmentTypeRow","onNext","setSelectedCustomerIds","selectAllCustomers","setSelectAllCustomers","setActiveCustomerId","customerSettings","setCustomerSettings","activeSettings","updateActiveSettings","activeAttachmentType","setActiveAttachmentType","customerPrintFormValues","setCustomerPrintFormValues","configErrorByCustomer","setConfigErrorByCustomer","mountedAttachmentTypes","setMountedAttachmentTypes","mountingAttachmentType","setMountingAttachmentType","reduxStore","getFormValuesFromStore","QUOTE_PRINT_FORM_NAME","SHOP_DRAWING_FORM_NAME","vals","activeCustomerVisibleFirmProductIds","customerQdv","qdvSections","fid","buildShopDrawingSections","getVisibleFirmProductIdsForCustomer","shopDrawingInitialValues","customerDisplayName","shopDrawingInitialValuesForSD","shopDrawingInitialValuesForOM","saveCurrentCustomerFormValues","initialFormValuesRef","isRestoringRef","restoreCustomerFormValues","currentQuotePrintValues","currentQdv","currentQwd","saved","restoreValues","discountForCustomer","productSourceSections","perCustomerSections","sdFormExists","sdDefaults","omFormExists","omDefaults","handleCustomerClick","handleApplyToAll","formKey","currentQuotePrint","currentShopDrawing","currentOM","currentSettings","isScoped","updatedSettings","overlayFields","topLevelFields","perSectionSubFields","targetSections","sourceBySectionId","targetSection","sCtx","subField","isSectionColumnsApply","getTargetCustomerDiscount","patchedQuotePrint","patchedShopDrawing","patchedOM","activeError","updatedErrors","selectAllAttachments","handleCustomerToggle","_scrollLeftLockAttached","selectedFileSizeByMediaTypeInMB","pendingContainer","pendingImage","pendingText","failureContainer","failureImage","failureWarningText","failedCustomerCard","failedCustomerName","failedJobRow","failedJobIcon","continuePromptContainer","continuePromptText","completeContainer","completeImage","completeText","completedJobRow","completedJobIcon","completedJobLabel","downloadLink","setModalStep","setExpectedJobs","failedJobs","completedJobs","allComplete","hasFailures","isPending","failedByCustomer","getCustomerName","downloadLoadingImage","downloadReadyImage","customerIdStr","NotificationServiceApi","sendEmail","ATTACHMENT_MAX_TOTAL_SIZE","getAttachmentsTotalSize","getFileIcon","fileIconPdf","fileIconImage","fileIconWord","fileIconExcel","fileIconDefault","ChipInput","onAdd","onRemove","fieldRow","fieldLabel","fieldInput","chipInputContainer","chipInvalidEmail","deleteIcon","chipDeleteIcon","chipInputField","customerWarning","subjectField","messageField","linksContainer","attachmentItem","attachmentChip","warningIconSpan","subjectAdornment","signatureContainer","attachmentHeaderRow","attachmentHeaderIcon","attachmentHeaderText","attachmentSizeHint","attachmentSizeError","attachmentSizeErrorIcon","fileUploadContainer","exitConfirmContent","exitConfirmText","exitConfirmActions","exitConfirmYes","setEmailData","quoteName","showExitConfirm","setShowExitConfirm","activeEmailCustomerId","setActiveEmailCustomerId","sending","setSending","emailCheckedCustomers","setEmailCheckedCustomers","missingIds","activeEmail","updateEmailField","handleRemoveChip","activeAttachmentsExceedLimit","anyCheckedCustomerExceedsLimit","handleSendEmails","checkedIds","emailParams","handleAddChip","allChecked","hasFailed","failedJobsForCustomer","isChecked","fileSize","doneButton","tryAgainButton","errorImage","buildDefaultShopDrawingValues","customerVisibility","attachType","attachmentTypeToConfig","createQuotePrint","createShopDrawing","createOandM","createQuoteExcelPrint","dialogPaper","shopDrawingFormValues","omFormValues","modalStep","expectedJobs","lastGeneratedSettingsHash","setLastGeneratedSettingsHash","pendingDispatchQueue","setPendingDispatchQueue","prevPrintQuoteFilesRef","prevBodyOverflowX","prevHtmlOverflowX","attachmentType","prevData","prevPrintId","pendingIdx","newQueue","updatedCustomerPrintFormValues","currentHash","customerPrintForms","timeNow","newJobs","dispatchQueue","customerForms","hasFormData","customerObj","customerQuotePrintValues","shopDrawingCustomerQdv","customerVisibleFirmProductIds","shopDrawingQdvSections","customerShopDrawingValues","customerOMValues","sectionKey","liveQdv","customerKey","customerQdvEntry","qdvSection","qdvProducts","qdvProductMap","qdvProduct","qdvGrandTotals","qwd","qwdSections","qwdSection","qwdCalcs","qwdGrandTotals","selectedProductIdSet","calcSource","recalcSectionMap","recalcGrandTotals","calcSections","filteredCalcSections","newCalculatedSections","newGrandTotals","calcs","qdvSource","hasSelectedCustomer","trimmedOGQuote","overlaid","newQ","createSplitQuotePrint","EmailSettingUtil","isUserEmailEnabled","firmEmailSetting","_userEmail","EMAIL_DOMAIN_ENABLE","DUPLICATE_PRODUCT_DIALOG_ID","QuoteAddProductDuplicateDialog","getQuoteFormInitialValuesFromSpecToQuoteDraft","formattedValues","sectionAcc","drawingIndex","quoteSectionProducts","quoteProductIndexFromQuote","specToQuoteDataList","productOrPackage","quoteDefaultPrint","quoteLabelColumn","productsArrays","immutableProductsArray","inputType","decimal","userInput","TemplateColumn","mouseOver","lastSentFieldValue","getFieldData","onFieldsChange","debouncedUpdate","onComponentUpdate","onFieldValueChange","incoming","keepLocalFieldValue","onEdit","stateFieldData","columnHeader","droppedComponent","noDroppedIcon","noDroppedComponent","customsButtonsContainer","customsButton","titleField","QuoteSectionTemplate","droppedComponents","infoToDisplay","fieldsRef","sectionCalculationsRef","SortableItem","droppedValueChanged","SortableList","editColumn","columnsDropZone","onDrop","removeColumn","removeCalculation","onFieldChange","templateData","onRef","addCalculation","titleContainer","infoToDisplayContainer","infoToDisplayTitle","FormGroup","optionsTitle","radioGroupHorizontal","totalContainer","sectionAmount","buttonTotal","sectionTotalContainer","buttonAdd","borderTopColor","FontAwesomeIconIntercept","childrenClassName","QuoteSectionComponents","valueComponents","searchedValueComponents","renderComponents","removeComponent","editComponent","componentChip","onComponentSearch","innerHTML","addValue","addFormula","componentsContainer","searchField","addValueButton","componentGrid","formulaLabel","CustomValue","printColumn","pimType","pimData","NO_ROUNDING","componentToEdit","nameAlreadyExists","onColumnLabelChange","templateComponents","debouncedOnColumnLabelChange","debouncedEvent","addCustom","cancelCustom","displayRoundingAndDecimalOptions","customValueCard","controlLabel","dividerContainer","formSelect","NEAREST_NICKLE","NEAREST_DIME","NEAREST_DOLLAR","THREE","FOUR","customColumnLabel","customConstantValue","customValueButtonsContainer","textButton","buttonAddCustom","formulaRegex","formulaVarRegex","formulaBeforeVarRegex","formulaAfterVarRegex","formulaBeforeStatementRegex","formulaAfterStatementRegex","formulaOperations","usage","formulaConditionalOperators","formulaErrors","CustomFormula","keptSuggestions","conditionalOperators","formulaError","cursorIndex","formulaRef","onFormulaChange","syntheticCursorPOS","validateFormula","conditionalClick","insertIntoString","triggerChange","conditionalButton","inputOperators","onFormulaClick","valueToSelection","beforeCursor","afterCursor","beforeCursorLength","afterCursorLength","onFormulaKeyDown","matchNextValue","nextChar","selectionRange","valueMatch","operationButton","templateFormulaStyles","highlightFirstSuggestion","main_string","ins_string","bubbles","HTMLTextAreaElement","HTMLInputElement","defaultFieldData","calculationComplexity","calculationType","selectedColumn","SectionCalculation","addCalc","checkIsDuplicateName","addSectionCalculation","camelizeName","cancelSectionCalculation","optionSelector","QUOTE_TEMPLATE_LIST_PATH","QuoteTemplate","isAddingCustomValue","isAddingCustomFormula","isAddingSectionCalculation","templateSaveSuccess","quoteTemplateRef","saveTemplate","defaultOfficeIds","saveQuoteTemplate","cancelTemplate","onColumnsDrop","onColumnsChange","addNewComponent","oldFieldName","componentIndex","droppedComponentIndex","updateFormulaComponents","comps","newFieldName","customComponentsCreator","getQuoteExcelColumnPreferences","getQuoteTemplate","setSaveSuccessFlag","hasFirmOrOfficeAdminAcl","headlineTitle","buttonSave","defaultCurrency","extractAndAddCustoms","templateFields","customs","GetQuoteTemplate","SetSaveSuccessFlag","SaveQuoteTemplate","BidQuoteServiceApi","fetchOneQuote","DivInterceptor","QuoteContainer","isSaveMenuOpen","showDetails","showProjectPanelMenuItem","revision","downloadButtonAnchorEl","quoteEmailModalOpen","shareVendorQuoteStep","refreshedQuoteForm","sourceSpecId","draftSectionsIngestionTriggered","refQuoteInfo","refProjectInfo","refContacts","refDiscounts","refInternalNotes","refProductList","refTerms","refTask","refEvents","refQuoteForm","formRef","discontinuedGuardRef","quoteLoading","submittingQuote","hasERP","openSalesOrderModal","isUpdatingPrice","isCreatingQuote","loadingSpecToQuoteLinkedList","hasQuoteConnectAcl","isSpecToQuote","hasIsRequestingProduct","allowXmlDownload","quoteLocked","isNetSuiteUserWithNoCustomers","saveDateToDisplay","iscreatingOrUpdatingQuote","displayBidInvitationButton","handleToggle","simplePrimaryButton","compactTextButton","disabledSimplePrimaryButton","editQuote","exportButton","guardDiscontinued","reviewQuote","raisedPrimaryButton","raisedButtonContainer","raisedPrimaryButtonLabel","handleMenuOpen","handleMenuClose","erpItems","downloadQuote","emailAndDownloadItem","exportQuote","historyItem","legacyCsvItem","downloadCsv","legacyQuoteItem","legacyShopDrawingItem","downloadShopDrawing","legacyOmItem","downloadOM","legacyXmlItem","showExportFlow","quoteAutoSaveEnabled","quoteAutoSavePreferenceFetched","handleSaveToggle","saveProgressContainer","sendBid","sourceQuoteId","pendingAttachQuoteId","isAutoSave","newQuote","requestData","sectionCurrency","requestSectionProducts","idOfSpecProduct","isSpecProduct","bidInvitationData","saveQuote","createOrUpdateQuote","onReviewQuote","toggleProjectView","quoteFormId","updateQuote","importPricingFormSaved","importPricingForm","ImportPricingServiceApi","createQuoteFromSpecToQuote","createQuote","createRevision","createRequote","duplicateQuote","selectRevision","handleSaveClose","pathFromProject","getBidSourceQuote","getSpecToSourceQuoteDraft","getSpecToQuoteProduct","initWithDraft","isEditing","getProject","getQuote","selectQuoteId","getDefaultQuickTextByType","getTemplateList","getSpecToQuoteDraft","potentiallyFetchManufacturerDiscounts","isRequestProductInitialSelectAllPreference","hasFetchedQuoteDiscountList","refreshKey","isDetailView","isFetchingQuoteTemplates","defaultManufacturerDiscountsTerms","defaultManufacturerDiscountsComments","resetSpecToQuote","specToQuoteDraft","appliedManufacturerDiscounts","selectedCustomerDiscounts","prevProjectId","selectLinkedListBySpecId","mergedLinkedList","initialQuoteFormValues","getInitialQuoteFromSpec","autoSavePerformRequestId","createPreview","selectProjectId","deleteQuote","quoteInfo","internalNotes","terms","QuoteProductConfigurator","SalesOrderModal","ScrollTabContainer","QuoteDetails","handleEditRevision","handleSelectRevision","QuoteForm","CreateAiXrefModal","DiscontinuedProductsGuard","specToQuoteFormValues","defaultSpecialTerms","quoteAppBar","sendPricingButton","originalInitialValues","updatedOriginalInitialValues","architect","contractor","engineer","hasFetchedDefaultDiscountList","defaultManufacturerDiscounts","initialQuoteValues","sectionsSize","urlSearchParams","persistedSourceQuoteId","persistedBidResponseId","quotePreview","fallbackTo404","SALES_ORDER_MODAL_KEY","GetDefaultQuickTextByTypeAction","GetQuoteTemplateListAction","_specToQuoteDraft","keyboardEvents","mouseEvents","touchEvents","allEvents","makeEventProps","getArgs","eventProps","eventHandler","makeCancellablePromise","mergeClassNames","Message","LinkService","externalLinkTarget","externalLinkRel","pdfDocument","pdfViewer","currentPageNumber","explicitDest","destRef","pagesCount","scrollPageIntoView","isLocalFileSystem","isProvided","isBlob","isFile","File","isDataURI","dataURItoByteString","dataURI","_dataURI$split","_dataURI$split2","headersString","dataString","allowFileAccessFromFilesTip","displayCORSWarning","cancelRunningTask","runningTask","makePageCallback","isCancelException","loadFromFile","NOT_FOUND_ERR","NOT_READABLE_ERR","SECURITY_ERR","ABORT_ERR","isClassName","isLinkService","isPage","getTextContent","isPdf","isRef","isRenderMode","isRotate","pdfjs","Document","pdf","onItemClick","pages","cancellable","makeCancellable","findDocumentSource","onSourceSuccess","onLoadProgress","fingerprint","onLoadSuccess","onLoadError","onSourceError","setViewer","viewer","setExternalLinkRel","setExternalLinkTarget","setDocument","fileByteString","otherParams","_fileByteString","loadDocument","setupLinkService","registerPage","unregisterPage","renderMode","DocumentContext","noData","renderChildren","renderContent","isFunctionOrNode","isFileProp","Ref","OutlineItemInternal","getPageNumber","subitems","subitem","subitemIndex","renderSubitems","isDestination","OutlineItem","documentContext","OutlineContext","outlineContext","OutlineInternal","loadOutline","renderOutline","mergeRefs","inputRefs","filteredInputRefs","firstRef","ANNOTATION_MODE","PageCanvasInternal","createRef","onRenderSuccess","onRenderError","canvasElement","_assertThisInitialize","renderViewport","canvasBackground","renderContext","cancelRenderingTask","drawPageOnCanvas","pixelRatio","canvasRef","PageCanvas","PageContext","PageSVGInternal","getOperatorList","svgGfx","getSVG","firstElementChild","_this$viewport","renderSVG","_this$viewport2","drawPageOnContainer","PageSVG","TextLayerItemInternal","sideways","alignTextItem","unrotatedViewport","defaultSideways","_transform","fontHeightPx","fontWidthPx","_transform2","_viewport$viewBox","yMin","yMax","_transform3","xMin","itemElement","getFontData","fontData","fallbackFontName","targetWidth","actualWidth","getElementWidth","WebkitTransform","customTextRenderer","TextLayerItem","TextLayerInternal","onGetTextSuccess","onGetTextError","loadTextItems","textItem","renderTextItems","TextLayer","AnnotationLayerInternal","onGetAnnotationsSuccess","onGetAnnotationsError","onRenderAnnotationLayerSuccess","onRenderAnnotationLayerError","loadAnnotations","layerElement","renderAnnotationLayer","pageContext","PageInternal","pageElement","loadPage","pageScale","scaleWithDefault","pageKeyNoScale","pageKey","renderMainLayer","Page","ZoomInMap","MEGABYTE","loadPdfData","expectedLength","lastStep","flexCenter","flexFixed","flexFluid","flexJustifyEnd","retryButton","toMegabytes","PDFViewer","onMaximize","onMinimize","maximized","defaultPageNumber","setPageNumber","pageNumberInputValue","setPageNumberInputValue","setNumPages","setScale","scaleInputValue","setScaleInputValue","initialLoadCompleted","setInitialLoadCompleted","pdfData","setPdfData","loadProgress","setLoadProgress","loadFailed","setLoadFailed","loadAttempt","setLoadAttempt","pageContainerRef","onPageInputUpdate","parsedNumberInputValue","logPageChange","pdfViewerEvent","logZoomIn","logZoomOut","onScaleInputUpdate","parsedScaleInputValue","onDocumentLoadError","isPrevPageDisabled","isNextPageDisabled","isZoomInDisabled","isZoomOutDisabled","documentFile","renderLoading","hasTotal","loadFailedMessage","newScale","pageContainer","setRetry","usePDFModalStyles","PDFModal_","defaultMaximized","setFileSrc","setMaximized","getFileSrc","PDFModal","handleEditProduct","_productIndex","fallbackCB","prod","handleDuplicateDrawing","drawingName","ProjectDetailSpecDrawing","ruleFails","loadingRules","debouncedDispatch","instantUpdateDrawingInStore","drawingChecked","updateProductOrder","newItems","getListStyle","handleAddDrawing","generateProductElements","ProductCategoryPath","handleDeleteDrawing","openGuestLoginModal","drawingIsAccessible","drawingAdaCertifiedIcon","barrierFreeIcon","tooltipInfo","_checked","tooltipInfoContainer","adaCertifiedIcon","drawingEditButton","productsContainer","addProductButton","noteLabel","displayByContainer","ActionMenu","AddAlternateButton","AlternativeProductCard","disabledEdit","alternativeProductManufacturerId","cardActions","pimStatusChip","alternativeProductCardContainer","alternatives","ProductCard","disabledEditTooltip","setDeleteModalOpen","handleClickManageAlternatives","alternativeProductByBrand","swap","moveIndex","tslib_1","getPositionForIndex","traverseIndex","boxesPerRow","xy","getIndexFromCoordinates","getDragPosition","GridContext","getActiveDropId","startTraverse","measureAll","traverse","endTraverse","GridContextProvider","setTraverse","dropRefs","getFixedPosition","e_1","_c","disableDrop","e_1_1","targetId","sourceIndex","getRelativePosition","targetGrid","px","py","sBounds","tBounds","diffDropzones","ty","GridItemContext","GridDropZone","disableDrag","setBounds","useMeasure","draggingIndex","setDraggingIndex","_g","setPlaceholder","childCount","itemsIndexes","isTraverseTarget","mountWithTraverseTarget","targetDropId","lastTouchTimestamp","disableMouse","isMouseEnabled","initialDirection","lastLocal","velocity","enableMouse","grantedTouch","useGestureResponder","pressed","callbackRefs","claimTouch","onTerminationRequest","onTerminate","attemptGrant","onGrant","unbindGlobalMouseEvents","handleMoveMouse","handleMoveMouseCapture","handleEndMouse","handleStartCapture","updateStartState","granted","onStartShouldSetCapture","onStartShouldSet","isGrantedTouch","onRelease","handleMoveCapture","x_dist","y_dist","delta_x","delta_y","scaler","updateMoveState","onMoveShouldSetCapture","onMoveShouldSet","onTouchStartCapture","onTouchMoveCapture","onMouseDownCapture","terminateCurrentResponder","getCurrentResponder","GridItem","startCoords","useSpring","mountXY","animated","menuItemIcon","productCardsContainer","drawingSummaryContainer","drawingSummary","defaultCursor","disabledTextFieldLabel","disabledTextFieldInput","Drawing","onCheck","onExpandChange","onDeleteDrawing","hideEndorsement","productComplianceMap","validationHasTriggeredRef","drawingRef","isOnScreen","observerRef","setIsOnScreen","IntersectionObserver","isIntersecting","useIsOnScreen","handleAddProduct","containOneProductHasAlternative","productCardsPerRow","setProductCardsPerRow","drawingHead","productRowHeight","setProductRowHeight","firstProductId","firstProductCard","MoreVertButton","tooltipText","handleEditDrawing","KeyboardArrowUp","KeyboardArrowDown","gridSize","destinationIndex","newProductsList","DraggableDrawing","DraggableListItem","isDragLocked","isHoveringOver","setIsHoveringOver","drawingsBar","leftRightLayout","stretch","drawingList","ProductGroupContent","renderEmptySpecView","renderAddDrawingButton","disableDraggableListItem","lockDraggableListItem","hideDrawingEndorsement","setProductSearchTerm","drawingRefs","hideActionBarButtonText","setHideActionBarButtonText","setProductComplianceMap","actionBarContainerResizeObserver","actionBarContainerRef","searchInputRef","fakeActionButtonsContainerRef","specDetailConfig","selectedDrawingsSize","drawingsHasProduct","hasSelectedDrawing","countryIdForProductComplianceCheck","scrollToDrawing","getMap","uniqueProductsList","alreadyChecked","uniqueProductsMap","productAcc","ImmuMap","getUncheckedUniqueProducts","mergeProductCompliance","checkCollision","aRect","fakeBRect","aOverlapb","bgcolor","fullMode","isReal","droppableProvided","disabledWidth","whatHasMyLifeComeTo","DroppableDrawingList","PsychrometricsMode","PsychrometricsSeason","BarrierFreeButton","toolTipTitle","APP_CATEGORIES_MAP","byId","UNIT_LABEL_KEYS","UNIT_SYMBOL_KEYS","imperial","airflow","temperature","PERCENT_UNIT_KEY","MEASUREMENT_DECIMAL_LIMITS","pressure","CFM_IN_LITERS_PER_SECOND","PA_IN_INCH_WATER_GAUGE","UNIT_CONVERTERS","convertMeasurementToUnits","getMeasurementPlaceholder","DEFROST_OPTIONS","UNIT_OPTIONS","VENTILATOR_FIELD_MEASUREMENTS","supplyAirflow","supplyStaticPressure","exhaustAirflow","exhaustStaticPressure","VENTILATOR_FIELD_KEYS","DEFAULT_VENTILATOR_FILTER_VALUES","defrostType","VENTILATOR_FILTER_PLACEHOLDERS","placeholders","AIRFLOW_VALIDATOR","PRESSURE_VALIDATORS","PRESSURE_MAX_IN_WG","getFieldValidator","headerIconContainer","headerTitle","stepLabel","stepIconActive","coreColor","stepIconCompleted","defrostPrompt","radioOption","unitToggleContainer","unitToggleButton","unitToggleButtonActive","airSection","airSectionActive","airSectionTitle","inputAdornment","stepNextButton","VENTILATOR_FILTER_MODAL","VentilatorFilterModal","setValues","handleDefrostChange","handleUnitChange","convertVentilatorFilterValuesToUnits","handleFieldChange","goToStep2","unitLabels","fieldErrors","hasFieldErrors","hasRequiredSupplyValues","renderAirflowField","unitLabel","VENTILATOR_CATEGORY_ID","selectionMap","seriesSpecificInitSelections","categorySpecificSeriesFilters","passedAction","seriesAction","productAction","spinner","errorContainer","errorIcon","CalculatedResult","DEFAULT_EFFECTIVENESS","MAX_EFFECTIVENESS","PSYCHROMETRICS_MODE_TYPES","leavingTemps","efficiency","RESULT_KEYS","SEASON_PALETTE_COLORS","summer","winter","PSYCHROMETRICS_SEASONS","PSYCHROMETRICS_UNIT_OPTIONS","PSYCHROMETRICS_MODE_OPTIONS","DEFAULT_PSYCHROMETRICS_SEASON_VALUES","outdoorDb","outdoorWb","returnDb","returnRh","leavingTemp","effectiveness","MODE_FIELDS","requestKey","OUTDOOR_TEMPERATURE_FIELD_KEYS","TEMPERATURE_FIELD_KEYS","TEMPERATURE_VALIDATOR","PERCENT_VALIDATOR","AIRFLOW_PLACEHOLDER","PSYCHROMETRICS_PLACEHOLDERS","isBlank","getAirflowError","getEffectivenessError","isWetBulbAboveDryBulb","canCalculateSeason","getSeasonFieldErrors","clampEffectiveness","EFFECTIVENESS_DECIMALS","whole","truncateToOneDecimal","toEffectivenessNumber","buildCalculationBody","seasonValues","seasons","season","seasonBody","formatResultValue","headerIcon","effectivenessContainer","effectivenessInput","slider","sliderBounds","resultTitle","inputLabel","SeasonSection","temperatureUnit","onEffectivenessChange","onEffectivenessBlur","percentUnit","fieldColumns","effectivenessError","wetBulbError","emptyValue","fieldError","Slider","minimumRequiredEffectivenessPct","leavingAirTemperature","tabSelected","summaryLabel","summaryChip","summarySeason","PSYCHROMETRICS_ANALYSIS_MODAL","buildSeasonMap","PsychrometricsAnalysisModal","setMode","setUnits","setAirflow","setSeasonValues","setResults","calculating","setCalculating","setFilterData","calculationErrors","setCalculationErrors","debounceTimer","latestRequestId","notAvailable","airflowError","activeMode","hasWinterResult","cancelScheduledCalculation","scheduleCalculation","requestId","isLatestRequest","getCalculableSeasons","parsePsychrometricsResults","nextUnits","nextAirflow","nextSeasonValues","convertSeasonValuesToUnits","updateSeasonValues","handleSeasonFieldChange","handleEffectivenessChange","handleEffectivenessBlur","clamped","seasonSummary","nextMode","seasonColor","ADA_BLACKLIST_CATEGORY_IDS","WATER_HEATER_CATEGORY_ID","ZOELLER_PUMP_SIZING_TOOL_URL","ProductSelectionControl","drawingNameFilter","productSelectionControlGroup","selectedDrawingName","ventilatorToolMenuAnchorEl","paginationRefPrevious","paginationRefNext","toggleOnChildHeightIfDayCare","isDaycareBuildingType","handleAdaChange","selectCategoryWithoutValidate","openVentilatorToolMenu","closeVentilatorToolMenu","openVentilatorTool","modalId","FeatureButton","userHasBuildSizerWaterHeaterAcl","hasProject","sizerType","BUILD_SIZER_MODAL_ID","openCategorySpecificTool","categryName","PIPE_FILTER_MODAL","productCategoryListFormValues","productTypeToProductCategoryReverseMap","selectedRuleFails","useADA","projectIdFromSelectedSpec","mainImage","fontClass","tooltipInfoStyles","ruleWarnings","ruleWarningsIcon","ProductCategorySelectionLink","goto","projectAndSpecString","disableCompleteButton","handleCompleteOrGoBack","backTo","drawingRulesIcons","suggestionsContainer","pageStart","perPage","previousEl","nextEl","paginationEl","records","propsToTemplate","accessibilitySwitches","bariatricIcon","childHeightIcon","AlternativeDropDown","CurvePreviewModal","PipeFilterModal","normalSpec","dividerMargin","itemIcon","menuItemStyles","completeButton","NewSpecModalForm","specCreated","isProductGroup","inputContainer","finishButton","masterMode","MASTER_MODE","templateMode","TEMPLATE_MODE","formKeys","toggleDialog","uncontrolledOpen","controlledOpen","disableEnforceFocus","FieldFilterUtil","getIntervalDate","sourcePeriodDate","periodDate","verifyStartEndDate","dateOption","getEndDate","quoteConnectFilter","intervalData","checkDefaultFilterOption","searchFilterOptions","dateFieldsToCheck","verifyFilterFormDate","actionBarButton","SpecAssistButton","hideText","dialogOpen","setDialogOpen","isRunningSpecAssist","setIsRunningSpecAssist","enable","hasAlt","updateDrawingWithSpecAssist","actionBarContainer","actionBar","actionButtonsContainer","actionBarButtonIcon","actionBarButtonIconMin","actionBarDivider","downloadButtonContainer","ActionBar","onViewChange","hasMasterTemplateRole","setIsDownloadWarningModalOpen","selectedInfoContainerRef","fakeDownloadButtonContainerRef","actionButtonsContainerRef","downloadButtonContainerRef","fullWidthActionBar","setFullWidthActionBar","openDeleteSelectedDrawingsDialog","setOpenDeleteSelectedDrawingsDialog","allowDeleteTemplateDrawings","enabledDownload","fakeCRect","hasOverlap","bRect","cRect","hasSecondOverlap","projectUnselectAll","projectCopy","uiData","unselectAll","drawingsDisplayed","checkHasSelectedDrawingsWithDraftProduct","getGlobalEventProcessors","addGlobalEventProcessor","notifyEventProcessors","final","UserOfficeDisplay","renderUserOfficeTags","tooltipClasses","QuoteTemplateTypes","SAVE_QUOTE_TEMPLATE","SET_SAVE_SUCCESS_FLAG","GET_QUOTE_TEMPLATE","GET_QUOTE_TEMPLATE_LIST","NoteActionTypes","GetNotesAction","GET_NOTES","DeleteNoteAction","DELETE_NOTE","UpdateNotePermissionLevelAction","UPDATE_PERMISSION_LEVEL","CreateNoteAction","CREATE_NOTE","EditNoteAction","EDIT_NOTE","murmur2","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","processStyleValue","unitless","handleInterpolation","couldBeSelectorInterpolation","__emotion_styles","interpolated","createStringFromObject","previousCursor","cached","labelPattern","stringMode","identifierName","_props$fontSize","titleAccess","_props$viewBox","colorAction","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeLarge","_WINDOW","_DOCUMENT","_MUTATION_OBSERVER","_PERFORMANCE","_ref$userAgent","DOCUMENT","MUTATION_OBSERVER","PERFORMANCE","IS_DOM","IS_IE","DEFAULT_REPLACEMENT_CLASS","DATA_FA_I2SVG","DATA_FA_PSEUDO_ELEMENT","HTML_CLASS_I2SVG_BASE_CLASS","TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS","PREFIX_TO_STYLE","STYLE_TO_PREFIX","LAYERS_TEXT_CLASSNAME","FONT_FAMILY_PATTERN","FONT_WEIGHT_TO_PREFIX","oneToTen","oneToTwenty","ATTRIBUTES_WATCHED_FOR_MUTATION","RESERVED_CLASSES","FontAwesomeConfig","getAttrConfig","familyPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","shims","domready","doScroll","asyncTimer","PENDING","SETTLED","FULFILLED","NOOP","asyncSetTimer","asyncQueue","asyncFlush","asyncCall","invokeCallback","settled","handleThenable","fulfill","publishFulfillment","publishRejection","_then","_handled","notifyRejectionHandled","invokeResolver","onFulfillment","onRejection","promises","picked","meaninglessTransform","flipX","flipY","insertCss","headChildren","beforeChild","nextUniqueId","classArray","getIconName","isReserved","htmlEscape","joinStyles","transformIsMeaningful","transformForSvg","iconWidth","innerTranslate","innerScale","innerRotate","ALL_SPACE","makeInlineSvgAbstract","_params$icons","_params$watchable","watchable","widthClass","attrClass","mainWidth","mainPath","maskWidth","maskPath","maskRect","maskInnerGroup","maskOuterGroup","makeIconMasking","styleString","makeIconStandard","asSymbol","asIcon","makeLayersTextAbstract","_params$watchable2","_ref2$width","_ref2$height","_ref2$startCentered","startCentered","transformForCss","class","makeLayersCounterAbstract","preamble","perf","initialValue","thisContext","bindInternal4","unicode","defineIcons","_params$skipHooks","skipHooks","normalized","addPack","_byUnicode","_byLigature","_byOldName","ligatures","ligature","hasRegular","shim","oldName","byUnicode","styles$1","getCanonicalIcon","autoFetchSvg","byOldName","iconFromMapping","toHtml","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","joinAttributes","isWatched","mutators","newOuterHTML","outerHTML","forSvg","splitClasses","toSvg","toNode","newInnerHTML","performOperationSync","callbackFunction","mutator","enableObservation","mo","treeCallback","nodeCallback","pseudoElementsCallback","_options$observeMutat","observeMutationsRoot","objects","mutationRecord","_getCanonicalIcon","classParser","existingPrefix","existingIconName","innerText","parseTransformString","transformString","parseMeta","_classParser","extraClasses","extraStyles","styleParser","transformParser","symbolParser","extraAttributes","attributesParser","maskParser","MissingIcon","ANIMATION_BASE","repeatCount","dur","RING","OPACITY_ANIMATE","styles$2","findIcon","styles$3","generateMutation","nodeMeta","computedFontSize","generateLayersText","generateSvgReplacementMutation","onTree","htmlClassList","hclAdd","hclRemove","prefixes","prefixesDomQuery","resolvedMutations","onNode","replaceForPosition","pendingAttribute","alreadyProcessedPseudoElement","hexValue","iconIdentifier","processable","operations","drc","rc","dPatt","rPatt","Library","_pullDefinitions","definition","_normalized$key","prepIcon","ensureCss","_cssInserted","apiObject","abstractCreator","findIconDefinition","_iconLookup$prefix","dom","i2svg","_params$node","_params$callback","watch","autoReplaceSvgRoot","autoReplace","iconDefinition","_params$transform","_params$symbol","_params$mask","_params$title","_params$classes","_params$attributes","_params$styles","maybeIconDefinition","_params$transform2","_params$title2","_params$classes2","_params$attributes2","_params$styles2","_params$title3","_params$classes3","_params$attributes3","_params$styles3","assembler","_params$autoReplaceSv","extractBooleanFilter","constructedFilters","newAnd","_filter","pushActiveStatusFilter","regionForWhichPriceIsAvailable","isPoaListPrice","newCell","vendorPlaceholderProductTemplateCells","specProducts","isSpecProductExistInSpecToQuoteLinkedList","emptyQuoteProductWithSpecProduct","specProductNote","linked","selectedRecommendedIndex","feedback","pinnedColumn","defaultSectionTitle","excludedRowCount","projectOrSpecName","linkedProjectTitle","specBidDate","specExpiryDate","isAiValidated","callNewSearch","readNewSearchError","surface","mssearch","bidStatusAndValueCell","formKeyContacts","projectInfoKeyContacts","customersInitialized","selectedGrandTotalValue","setSelectedGrandTotalValue","bids","constructedBid","fixedGrandTotal","handleOnSelectBidStatus","formattedGrandTotal","handleOnBidValueChange","handleOnBidValueBlur","handleOnDeleteCustomer","deletedCustomerId","updatedCustomers","removedSalesReps","updatedCollaborators","currentSalesReps","targetedSalesRep","currSR","toggleContactDrawer","justifyItems","trophy","statusCell","statusContainer","pendingStatus","declinedStatus","submittedStatus","statusBox","pendingStatusBox","BidStatusBar","getUpdatedAtCell","getResponseStatusCell","getResponseIdCell","maxProperties","visit","normalizeToSize","jsonSize","unmemoize","stringified","stringifyValue","remainingDepth","valueWithToJSON","jsonValue","numAdded","visitable","visitKey","visitValue","_events","objName","getConstructorName","encodeURI","utf8Length","_props$absolute","_props$light","_props$orientation","middle","disabledProp","_props$labelPlacement","labelPlacementStart","labelPlacementTop","labelPlacementBottom","_props$disableAnimati","disableAnimation","shrinkProp","FormLabel","asterisk","_props$disableTypogra","disableTypography","_props$inset","primaryProp","secondaryProp","secondaryTypographyProps","webpackPolyfill","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","argv","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","_reactIs","isValidElementType","createDesc","TourTriggerValue","TOUR_TRIGGER_KEY","setUsetifulTags","currentTags","usetifulTags","timeoutResetUsetifulTags","parseJSON","checkStatus","addAuthHeaders","defaultHeaders","Accept","bodyObj","requestWithAuth","reducerConfig","configureReducer","router","connectRouter","Centered","getRootSpan","transaction","SSR","ResponsiveListItemText","ListItemTextProps","listItemTextColor","listItemIcon","listItemIconWidth","endIconProps","isSubMenu","customSelectedMenuItemBackgroundColor","generateLinkParams","isFullMenuWidth","currentPath","activeMenuItemBackgroundColor","navigateMenu","_to","DropdownContainer","openDropdown","closeDropdown","IconProps","InputButton","closeOnItemClick","QuickTextTypes","GetAllQuickText","GET_ALL_QUICK_TEXT","GET_DEFAULT_QUICK_TEXT_BY_TYPE","v1","v4","NewMasterCollaboratorsForm","getCollaboratorsEmail","handleSelectChange","filteredCollaborators","isValidate","isEmail","immutableCollaborators","specPermission","PimIntegrationType","PIM_INTEGRATION_DIALOG_FORM","PimIntegrationOptions","WATTS_ODS","WATTS_SALSIFY","integrationTypeSearchVerbiageMap","displayKey","selectPimIntegrationSeries","selectIsSearcingSeries","pimIntegrationSeries","isSearchingSeries","searchPimIntegrationSeries","integrationType","wideDialog","integrationInputValue","setIntegrationInputValue","selectedIntegration","selectedIntegratingSeries","searchSeries","integrationSeriesId","integrationSeries","optionProps","Scope","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","generatePropagationContext","newScope","_span","_session","_transactionName","_fingerprint","_requestSession","_client","_notifyScopeListeners","requestSession","captureContext","scopeToMerge","scopeData","getScopeData","contexts","getRequestSession","propagationContext","scopeContext","maxCrumbs","eventProcessors","sdkProcessingMetadata","transactionName","additionalEventProcessors","getGlobalScope","FULLTEXT_TERM_KEYS","LIKE_TERM_FIELDS","isTermClause","firmRestrictionFilters","others","clause","ProductSearchServiceApi","ProductSearchGatewayApi","autoquoteSearch","toLegacyProductList","mainImageFileId","parseFiltersAndOptions","searchSetting","isPackage","isQCSearch","searchTermIndex","searchTermSubIndex","_searchTermIndex","_searchTermSubIndex","productSimpleSearch","productSearchRelevance","LANGUAGE_TYPE","NOTIFICATION_TYPE","GUEST_EMAIL_SUBMISSION_MODAL","GuestEmailSubmissionModal","hasTouched","setHasTouched","setEmail","onSignup","makeSelectAtsPackages","makeSelectFirmPackages","makeSelectFirmPackagesHasNextPage","makeSelectQuickSearchedFirmPackages","makeSelectCheckingProductInPackages","makeSelectIsFetchingFirmPackages","makeSelectIsLoadingQuickSearchFirmPackage","makeSelectSearchPackagesLoading","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","initialStatus","isMounting","appearStatus","nextCallback","updateStatus","nextStatus","cancelNextCallback","getTimeouts","mounting","performEnter","performExit","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","setNextCallback","doesNotHaveTimeoutOrListener","addEndListener","maybeNextCallback","childProps","TransitionGroupContext","_props$hover","selectedOpacity","defaultCheckedIcon","CheckBoxIcon","CheckBoxOutlineBlankIcon","defaultIndeterminateIcon","IndeterminateCheckBoxIcon","_props$checkedIcon","_props$icon","_props$indeterminate","_props$indeterminateI","indeterminateIcon","SwitchBase","originalModule","$keys","ErrorMessageComponent","ErrorHandler","errorMessageInput","errorMenuOpen","toggleErrorMenu","resetError","hasErrors","resetClassName","badgeContent","textInput","NotesDrawerView","changePermissionLevel","updatePermissionLevel","deleteNote","noteCreators","disabledUpdate","noteCreator","creatorFirstName","creatorLastName","isPublic","noteStatusButton","notesType","notesTypeIcon","notesIcon","notesTypeContainer","selectedNoteId","permissionLevel","boderColor","getUsersDifference","initialUsers","newUsers","initialUsersIds","newUsersIds","addedUsersIds","removedUsersIds","getAssignedUsers","assignedUsers","NotesDrawerEdit","handleUserChange","handleUserInputChange","searchUser","selectedProject","saveNote","seeded","isUntouched","usersData","userIcon","DEFAULT_DRAWER_ID","NotesViewDrawerDetails","selectedNote","bidStatusSelect","bidValueField","bidNoteLabel","bidNoteField","statusDropDownicon","emphasized","bidRowCell","headerRowCell","noExpandOnClickZone","bidNoteLeftWhiteSpace","bidNoteContainer","bidRowRootContainer","bidRowAccordion","rowIcon","rowIconExpanded","expandIconContainer","overlayComponentPropsSelector","bidRowStates","setBidRowStates","selectedQuoteGrandTotals","setSelectedQuoteGrandTotals","selectedGrandTotal","setSelectedGrandTotal","isUpdatingBidInfo","setIsUpdatingBidInfo","formik","setFieldValue","useFormik","handleDropDownValueChange","bidQuoteId","handleBidValueChange","disableEventPropagation","isRowExpanded","contactDisplay","quoteNumberLinkDisplay","saveBidStatusDrawer","AppGlobalComponents","ControlledDrawer","TASK_DRAWER_ID","TaskViewDrawerDetails","NOTE_DRAWER_ID","BID_DRAWER_ID","BidStatusViewDrawerDetails","drawerWidth","LogInAsModal","userCount","logInAsUsersIsSearching","logInAsModal","logInAsModalTable","logInAsModalButtonStyle","LoginAsButtonDropDown","nameDisplay","outlineOffset","NotifacationListItem","notification","notificationId","templateParams","linkParams","isRead","getAvatarInitial","templateParamsKeys","replaceAll","getNotificationContent","actionHref","linkParamsKeys","getActionContent","WidgetMenuItem","disableTouchRipple","NotifacationList","scrollToTop","getRowHeight","NotificationListItem","promiseResolver","promis","ids_index","GuestLoginButton","GuestSignUpButton","footerDefaultValues","footerHomeLink","footerTermsLink","footerPrivacyLink","footerCopyright","GradiantDrawerHeader","LogoImage","MobileLogoImage","AppMenu","liveChatLoaded","openDrawer","userMenu","LOGINAS_MODAL_ID","logoutAction","cogMenu","openDashboard","cogMenuDashboardItem","hasIcon","menuText","closeMenu","openNotificationDropDown","handleClickGuestLoginButton","handleClickGuestSignUpButton","logout","HubSpotConversations","widgetOpen","logoProps","mobileLogoProps","drawerGradients","alphaProp","betaProp","beta","isProduction","loginAsModalOpen","editMenuOpen","displayCogMenu","cogMenuItems","userMenuItems","toggleLiveChat","notificationsUnreadCount","testCreateNotification","notifications","notificationsCount","markAllNotificationsRead","isNotificationDropDownOpen","enableTakeoff","headerGradientConfig","drawerGradientConfig","mobileDrawerGradientConfig","headerGradientProps","drawerGradientProps","mobileDrawerGradientProps","mobileDrawer","headerGradient","mobileDrawerGradient","quoteConnectHelp","mobileLogoPropsConfig","alphaConfig","betaConfig","tool","drawerState","languageSelector","basePath","guestLoginButton","PopoverClasses","takeoffListContainer","TakeoffList","Badge","NotificationList","LoginAsButtonDropdown","drawerHeader","showMobile","logoImg","hideMobile","mobileLogoImg","quoteConnectMobile","alphaImg","betaImg","MainMenuItems","footerWrapper","footerContainers","spaceChildren","brandsContainer","footerImage","localeSrc","defaultSrc","localeOrDefaultSrc","localeWidth","localeOrDefaultWidth","liveChatButton","closeLiveChat","whitespace","slideOpen","setLocaleAction","newLocale","TeamManagementUserView","selectedOffice","TEAM_MANAGEMENT_USER_EDIT","userInitial","jobTitle","mobilePhone","officePhone","lastAccessed","officeAdminEdit","firmAdminEdit","isUser","defaultRoles","displayPictureContainer","contentTitle","roleChip","profileRow","smallAvatar","profilePageTypo","gradientMixinCreator","colorStrings","colorSettings","Backend","LanguageDetector","loadPath","importedMomentLocale","LanguageProvider","i18nProp","localeLow","newImportedMomentLocale","_i18n","i18nDefault","yearFormat","yearMonthFormat","dateTime12hFormat","dateTime24hFormat","time12hFormat","time24hFormat","defaultMoment","getDiff","comparing","isAfterDay","isBeforeDay","isBeforeYear","isAfterYear","startOfDay","endOfDay","formatString","formatNumber","numberToFormat","addDays","setMinutes","setSeconds","isSameDay","getMeridiemText","ampm","startOfMonth","endOfMonth","getNextMonth","getPreviousMonth","getMonthArray","monthArray","prevMonth","getYear","setYear","mergeDateAndTime","getWeekdays","dayOfWeek","getWeekArray","nestedWeeks","weekNumber","getYearRange","getCalendarHeaderText","getYearText","getDatePickerHeaderText","getDateTimePickerHeaderText","getMonthText","getDayText","getHourText","getMinuteText","getSecondText","dialogRoot","dialogTitleContainer","fontWeightBold","closeButton","infoBox","PaddedMessage","GridProps","AFRelationship","InfoBar","roundValueToPrecision","nearest","decimalPart","getDecimalPrecision","IconContainer","Star","defaultLabelText","Rating","_props$defaultValue","emptyIcon","_props$emptyLabelText","emptyLabelText","_props$getLabelText","getLabelText","_props$IconContainerC","IconContainerComponent","_props$max","nameProp","onChangeActive","_props$precision","_props$readOnly","defaultName","setDefaultName","setValueState","valueRounded","_React$useState3$","handleClear","handleFocus","newFocus","labelProps","iconEmpty","iconHover","iconFocus","iconActive","visuallyhidden","rootNode","_rootNode$getBounding","newHover","itemValue","indexDecimal","itemDecimalValue","defaultChecked","pristine","XREF_FEEDBACK_MODAL","CrossReferenceFeedback","sendXrefFeedback","xrefIndex","xrefId","competitorProductNumber","competitorBrand","competitorCategory","competitorType","sponsorProductId","sponsorProductNumber","sponsorBrand","sponsorCategory","xrefFeedback","xRefFeedback","compCategory","compManufacturer","compProductNumber","compProductId","sponsorpManufacturer","xref_feedbackSubmitted","_rating","selectSelectedCompetitorProductId","selectXrefData","horizontalDivider","horizontalDividerHead","itemContainer","generalInfo","expansionIcon","lastColumn","ExpansionItem","copiedIndex","setCopiedIndex","copyFailedIndex","setCopyFailedIndex","packageProductId","setPackageProductId","setFetching","productOrSeries","setProductOrSeries","orderedAttributes","setOrderedAttributes","isStandaloneXref","hasNoAttributes","getProductData","getWhiteList","getSeriesData","xrefProduct","_orderedAttributes","isPackageType","getCutsheetByRegionLocaleOrFallback","imgDisplay","attributeAndValues","productsDisplay","cutsheetObject","cutsheetUrl","productNumberIsCopied","copyTooltip","xrefSponsorProductSelected","onXrefProductSelected","xref_stepTwo_SponsorSelected","downloadSpecSheet","xref_stepTwo_SponsorExpanded","_packageProductId","packageProduct","pIndex","paginatedData","expansion","isQuotePhasesDisabledForOSR","quoteIsLocked","notAllowedQuotePhasesForOSR","setCheckedState","hasLabelFor","newChecked","removeDiacritics","specialCharsRegex","wordCharacterRegex","whitespacesRegex","wordLen","QuoteContactsForm","setPermissions","contactsProp","contactsIndex","checkboxFormControl","immutableContacts","optionsList","company","optionsMap","contactsValue","contactsSelect","isUnique","unique","immutableValueArray","includesIgnoreCase","officeNameStyles","bidInvResponseId","findAllByQuote","_flagCountries","flagCountries","displayFirstNonFlagCountry","cancelTimeout","requestTimeout","cachedRTLResult","getRTLOffsetType","recalculate","outerDiv","innerDiv","innerStyle","defaultItemKey","createListComponent","getItemOffset","getEstimatedTotalSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","scrollUpdateWasRequested","visibleStartIndex","visibleStopIndex","layout","itemStyleCache","outerRef","validateSharedProps","initialScrollOffset","innerElementType","innerTagName","outerTagName","useIsScrolling","_getItemStyle","estimatedTotalSize","overscanBackward","overscanForward","getItemMetadata","itemMetadataMap","lastMeasuredIndex","itemMetadata","findNearestItemBinarySearch","findNearestItemExponentialSearch","estimatedItemSize","totalSizeOfMeasuredItems","VariableSizeList","findNearestItem","shouldForceUpdate","FixedSizeList","lastItemOffset","middleOffset","numVisibleItems","useToggle","defaultOn","setIsOn","turnOn","turnOff","prevOn","QUOTE_CONFIGURATOR_OVERLAY_COMPONENT","providedLocation","providedRegionId","searchingFirmSeries","firmSeriesCount","widthAuto","boldText","autocompleteInput","stepperRoot","priceContainer","selectedSeries","setSelectedSeries","autocompleteOpen","setAutocompleteOpen","firstOpen","setFirstOpen","priceOrDash","priceValue","addProductToQuote","ButtonComponent","LinkButton","closeConsentModal","onConsentConfirm","_mtm","step1Email","step1FirstName","step1LastName","step1Password","step1ConfirmPassword","emailAccessLink","basicInfoButton","projectInfoPanel","gridTemplateColumns","captionColor","isProjectInfoPanelExpanded","internalNum","lastUpdate","SortProductGroupsModal","_dragEl","projectWithNewSpec","reorderedSpecIdsArray","BobrickCSIMasterSpecBeta","templateDescription","BobrickPlanningGuideBeta","defaultShouldValidate","initialRender","lastFieldValidatorKeys","fieldValidatorKeys","iconWrapper","CreationMethodSelector","setCreationMethod","hasFetchedDefaultProjectVisibility","MANUAL","AI","statusIcon","failedSection","failedList","buildCreateProjectBody","defaultAssignedTo","extractionData","contactObj","stateProvince","extractionId","buildFileList","documentType","CreationProgressModal","projectsToCreate","autoTrackProject","setStatus","createdCount","setCreatedCount","failedProjects","setFailedProjects","hasStarted","trackAnalytics","sourceFileId","projectCreatedFromDocuments","createAll","successIds","createSingleProject","sourceFile","fileList","fileIdCounter","generateFileId","projectIdCounter","highlightedFileLocalId","extractionStatus","extractionProgress","extractionError","lastExtractedSourceUploadedFileId","highlightedFileServerId","highlightedFileName","extractionCoordinates","buildHighlightedFile","highlightedFileId","isProjectValid","buildingTypeRequired","useExtraction","setProjects","pollTimers","clearAllPolling","timer","projectExtractedFromDocuments","clearProjectPoll","setProjectFailed","handleExtractionCompleted","rawArchitect","rawEngineer","mapExtractionResponse","completedAt","hFileId","hFileName","hFile","pollExtraction","poll","msai","startExtraction","dropText","ProjectCardDropzone","currentFileCount","existingFileNames","onFilesAccepted","setError","acceptedFiles","fileRejections","useDropzone","isDragActive","SortableFileItem","tagSelect","tagSelectInner","DocumentTypeSelect","misc","useProjectCardStyles","cardError","fileRow","sourceLabel","fileInfo","fileActions","fileItemError","progressBar","progressBarRoot","progressBarBar","progressBarBarError","fileIcon","green","deleteFileButton","progressRow","FileProgressBar","isUploaded","bar","deleteProjectButton","dropzoneColumn","filesColumn","filesList","uploadedHeader","ProjectCardUpload","onRemoveFile","onRemoveProject","onSetSourceFile","onSetDocumentType","showSourceFileError","sharedClasses","hasFiles","successfulUploads","hasCardError","amber","A200","A400","A700","noOptions","addContactButton","eyeIcon","optionDivider","contactTitle","extractionHint","extractionHintText","noContactFound","tooltipFitContent","formatContactLabel","ContactSearchField","onContactEdited","rawExtractedContact","notFoundMessage","contactsLoading","formatOptions","handleAddContact","addedCb","newContactData","updatedContact","contactMap","handleViewContact","submitCb","_event","rawName","rawOrg","rawDisplayName","rawAddress","provinceName","postalZip","ExtractionReviewForm","buildingClassOptions","buildingTypeOptions","onBuildingClassChange","showRequiredErrors","countryOptions","provinceOptions","setProvinceOptions","cityOptions","setCityOptions","requiredError","isBuildingTypeRequired","bidDateInvalid","bidDateWarning","today","findOption","listItems","classId","selectedClass","selectedType","reviewHeader","reviewFileWrapper","reviewFileList","reviewFileItem","moreFilesButton","reviewProgressBar","reviewMessage","reviewContainer","reviewContainerWithForm","ProjectCardReview","onToggleSelected","onRetryWithNewFile","onConfirmRetry","onRenameProject","onUpdateExtractionData","onOpenPdfModal","filesExpanded","setFilesExpanded","retryFileInputRef","isFailed","isRetryUpload","retryFile","retryFileUploaded","retryFileUploading","hasMissingRequired","priorityFiles","otherFiles","sortedFiles","firstRowFiles","hasMore","visibleFiles","hasUploadedFile","isHighlightedFile","coordsItem","pixelCoordinates","containerUpload","containerReview","projectCardsContainer","addProjectButton","addText","validationWarningIcon","validationMessage","EMPTY_BUILDING_TYPES","AiPath","returnToSelection","buildingClassesMap","buildingTypesMap","setActiveId","setStep","requiredModalOpen","setRequiredModalOpen","duplicateModalOpen","setDuplicateModalOpen","requiredInvalidProjects","setRequiredInvalidProjects","duplicateProjects","setDuplicateProjects","validationLoading","setValidationLoading","setShowRequiredErrors","setCountryOptions","creationModalOpen","setCreationModalOpen","setProjectsToCreate","pdfModalFile","setPdfModalFile","firstPdfId","setFileError","uploadError","updatedFiles","autoAssignSource","handleFilesAccepted","handleRemoveFile","handleRemoveProject","filtered","handleSetSourceFile","handleSetDocumentType","findProjectByFileId","handleToggleProjectSelected","handleUpdateExtractionData","handleContactEdited","architectId","engineerId","matchesArchitect","matchesEngineer","handleRenameProject","handleBuildingClassChange","handleRetryWithNewFile","newFile","oldSourceFileId","handleConfirmRetry","allFiles","hasUploadedFiles","allUploaded","allHaveSourceFile","canContinue","startCreation","validProjects","handleCreate","seenAddresses","localDuplicateIds","remoteDuplicateIds","toCheckRemotely","allDuplicateIds","duplicates","requiredInvalid","bc","buildingTypeOptionsMap","activeFile","isExtracting","hasSelectedProjects","canCreate","activeFileId","overFileId","activeProject","overProject","overProjectCheck","nextNumber","projectsWithFiles","projectIdsNeedingExtraction","updatedProjects","requiredInvalidIds","filteredDuplicates","validSelected","duplicateIds","refetchProjects","discardModalOpen","creationMethod","openDiscardModal","useCreationMethodSelection","isInCreationSelectionStep","projectImageGreen","AssignProjectToModal","canSearchFirm","useAssignableUserSearch","userOptions","searchUsersFromFirm","setSearchUsersFromFirm","tightTooltipClasses","useTightTooltip","selectedUsers","setSelectedUsers","AssignPaper","useTogglePaper","locationSelect","userRolesSelect","hasFeatAssignToAclSelect","hasFeatAssignToAcl","assignModalOpen","setAssignModalOpen","specIdToConvert","validSpecsForConvert","selectedSpecDate","specToQuoteOpened","s2qLoadingTime","ActionButton","mutableFilters","tabIcon","ProjectHeaderTabs","notifyTabChange","ProjectUtil","projectListTrackingData","contactArray","_contact","advancedSearch","opportunityValueMin","opportunityValueMax","bidDateStart","bidDateEnd","createdDateStart","createdDateEnd","trackedByMe","specAndQuoteAvailability","projectValuationMin","projectValuationMax","trackedByOffice","leadReferenceNumber","projectListColumns","priceRequestProjectViewColumns","priceRequestResponseViewColumns","getBidStatusList","pricingRequestDateValidateFunc","PT_PRICING_REQUESTS_FILTER_FORM","PT_PRICING_REQUESTS_FILTER_LIST","updatedDateValidateFunc","PricingRequestFilter","notifySearchPricingRequests","formatedUpdatedDate","contactItems","userResults","userResult","bidStatusList","FilterList","pricingRequestFilterSave","pricingRequestFilterClicked","pricingRequestFilterCreate","pricingRequestFilterSelectSavedFilter","bidStatusConfig","TableDynamicHeader","notifySortingChange","tableColumns","TableSortLabel","invitationTable","tableCellRoot","projectCell","projectLinkContent","projectIconButton","SendPricingRequestsProjectTable","widgetName","notFoundImage","callToActionTitle","callToActionDescription","notifyPageChange","notifyChangeRowsPerPage","currentInvitation","setCurrentInvitation","currentBidResponse","setCurrentBidResponse","currentAnchorEl","setCurrentAnchorEl","showBidProjectToggles","setShowBidProjectToggles","setTableColumns","resetToggle","tempColumns","handleMenuShow","menuAnchorEl","menuInvitation","menuBidResponse","handleProjectToggleClick","newToggles","getTableCellsById","ProjectQuote","getProjectCell","getQuoteCell","BidStatusSummaryBar","getStatusCell","LoadingSpinner","BidResponseTable","notifyMenu","TableFooter","colSpan","paginationProps","onlyPrevAndNext","BidResponseMenu","notifyAnchorElChange","rightPagination","leftPagination","disableIcon","BidResponseProjectListTable","notifyReload","declineOpen","setDeclineOpen","setBidResponseId","declineButtonRef","onClickShowMenu","handleImportPrice","bidSubject","getActionsCell","BidInvitationWidgetUtil","DeclineDialog","handleDeclineClose","SendPricingRequestsProjectWidget","searchPricingRequestsFilter","pricingRequestsViewType","invitationOptions","setInvitationOptions","responseOptions","setResponseOptions","setInvitations","invitationPage","setInvitationPage","totalInvitationCount","setTotalInvitationCount","setBids","responsePage","setResponsePage","totalResponseCount","setTotalResponseCount","setInvitationSortingOptions","responseSortingOptions","setResponseSortingOptions","setLoaded","getInvitationInit","pagingOptions","searchFilter","projectSearchTerm","invitationsResults","sortedInvitations","getResponseInit","currentInvitationOptions","currentResponseOptions","handleResponseSortingChange","currentFieldSort","otherOptions","newSortingOptions","currentDirection","newDirection","finalSortingOptions","notifyViewTypeChange","ProjectSourceIcon","ProjectSourceCell","assignedTos","assignedTosTooltip","AssignedToCell","assignedToDisplay","_buildingClasses","firstBuildingClass","ImmutableList","ProjectList","pricingRequestsSearchTerm","pricingRequestsProjectViewColumns","getDirection","_sortBy","getSortedProducts","handleSearchPricingRequests","handlePricingImportViewTypeChange","pricingRequestsResponseViewColumns","searchedProjects","filterUsage","handleAddProject","handleTabChange","pricingRequestsProjectViewColumnsList","pricingRequestsResponseViewColumnsList","projectColumnsList","linkTab","projectListSearchTerm","projectListFilterUniqueKey","pricingRequestsFilterUniqueKey","PT_PROJECT_LIST_COLUMNS","PT_PRICING_REQUESTS_PROJECT_VIEW_COLUMNS","PT_PRICING_REQUESTS_RESPONSE_VIEW_COLUMNS","searchingProjects","searchedProjectsHasNextPage","columnSortBy","pricingRequestFormValues","getFormNames","isDragEvt","getInvalidTypeRejectionErr","messageSuffix","getTooLargeRejectionErr","getTooSmallRejectionErr","minSize","TOO_MANY_FILES_REJECTION","fileAccepted","isAcceptable","accepts","fileMatchSize","allFilesAccepted","maxFiles","accepted","sizeMatch","isPropagationStopped","cancelBubble","isEvtWithFiles","onDocumentDragOver","isIe","isEdge","isIeOrEdge","composeEventHandlers","fns","Dropzone","_useDropzone","getFilesFromEvent","preventDropOnDocument","noClick","noKeyboard","noDrag","noDragEventsBubbling","onFileDialogCancel","onDragEnter","onDragLeave","onDropRejected","isFileDialogActive","isDragAccept","isDragReject","draggedFiles","_defaultProps$options","_useReducer2","openFileDialog","onWindowFocus","onKeyDownCb","isEqualNode","onFocusCb","onBlurCb","onClickCb","dragTargetsRef","onDocumentDrop","onDragEnterCb","onDragOverCb","dropEffect","_unused","onDragLeaveCb","targets","targetIdx","onDropCb","_fileAccepted2","acceptError","_fileMatchSize2","sizeError","composeHandler","composeKeyboardHandler","composeDragHandler","_ref2$refKey","onInputElementClick","_ref3$refKey","fileCount","specDialActions","speedDialCustomRoot","speedDialCustomFab","specsInProject","specSelectorContainer","specSelectorIndicatorText","DropdownMenu","setIsDeleteModalOpen","setIsDialogOpen","isATSSpecTool","editPath","NewDefaultView","setMasterTemplateDrawerState","canDownloadSpecBooklet","testProjectBreadcrumbs","projectBreadcrumbs","selectedSpecIndex","DownloadSpecBookletButton","ProductGroupTabs","activeTabIndex","onCreate","onSelectTab","newSelectedTab","AlternativesModal","DownloadWarningModal","ProjectContext","DefaultView","sortProductGroupsModalOpen","setSortProductGroupsModalOpen","switchState","masterTemplateDrawerState","isDialogOpen","isDownloadWarningModalOpen","setIsCopying","isGettingProjects","isSearchingSpecs","viewContextValue","handleDragFc","drawingInsertPoint","quickAccessCopyTo","masterInsertDrawingCount","allDrawings","sourceDrawing","sourceDrawingId","destinationDrawingId","sourceDrawingIndexInOriginalList","destinationDrawingIndexInOriginalList","newDrawings","updatedSpecFromRes","onSwitch","CloseButtonComponent","VsbRedirectDialog","appHref","webHref","EditButton","DeleteButton","TabComponent","actionButtons","isHovering","setIsHovering","ProductGroupTab","droppableIsDraggingOver","allCheckboxTooltip","displaySort","disabledSort","disabledSortTooltip","deleteModelOpen","specToDelete","setSpecToDelete","allFilteredDrawingsInProjectWithProductSelected","hasSelectedFilteredDrawingWithProducts","scrollButtons","selectableDrawings","TaskViewDrawerDetailsTask","handleMenuExit","colorFor","changeStatus","selectedTaskCriteria","editCriteriaStatus","updateAllCriteriaStatus","deleteTask","userById","disabledStatusChange","taskDescription","assignedByUser","assignedDate","dueDate","totalCriterias","completedCriterias","criterias","criteriaId","Rejected","Completed","criteriasContainer","criteriasContent","criteriaButton","criteriaStatus","tasksIcon","taskStatusContainer","statusChipContainer","StatusChip","handleExit","criteriaSection","progressBarContainer","linearProgressBar","InProgress","Created","selectedTaskId","TaskViewDrawerDetailsEdit","localCriteriaData","newCriteria","editedCriteriaIds","deletedCriteriaIds","insufficientCriterias","includeAtsFirm","criterion","taskToType","taskToId","deletedUserIds","editUser","addEntity","assignedUser","assignedUserId","USER","deleteUser","deleteEntity","criteriaData","subtaskField","hasNoCriteria","inputCriteria","userFirmName","criteriasArray","subtasksRow","stateCopy","newEditedCriteriaIds","criteriaIcons","inputCriteriaContainer","subjectIcon","greyColor","dueDateIcon","inputPropsDatePicker","addTaskCriteria","tagUser","editTask","entityData","deleteCriteria","def","semaphore","suspend","asap","immediately","_predicate","wildcard","matcherCreator","string$1","array$1","symbol$1","END","isEnd","takers","taker","chan","stdChannel","currentTakers","nextTakers","ensureCanMutateNextTakers","multicastChannel","_effectRunnerMap","nextSagaId","cancelSingleTask","taskToCancel","isRunning","effectRunnerMap","_ref3$channel","maybe","takeCb","digestEffect","effectId","childCbs","proc","cpsCb","taskIterator","createTaskIterator","getIteratorMetaInfo","addTask","isAborted","joinSingleTask","taskToJoin","joiner","joiners","CANCEL$1","CANCELLED$1","formatLocation","lineNumber","sagaLocationAsString","sagaMeta","cancelledTasksAsString","cancelledTasks","crashedEffect","firstSaga","otherSagas","crashedEffectLocation","effectLocationAsString","newTask","mainTask","parentContext","parentEffectId","isRoot","cont","_task","taskResult","taskError","deferredEnd","cancelledDueToErrorTasks","onAbort","cancelAll","getTasks","forkQueue","toPromise","iterator$1","finalRunEffect","finalizeRunEffect","currCb","effectRunner","executingContext","effectSettled","sagaMonitor","effectRejected","effectResolved","setCrashedEffect","effectTriggered","effectCancelled","_ref$channel","_ref$context","effectMiddlewares","_ref$onError","rootSagaStarted","actionDispatched","runEffect","sagaMiddlewareFactory","boundRunSaga","createSagaMiddleware__default","actionTypes","useStepper","goNext","goTo","isSubmitting","useFormContext","clearFormValues","syncData","_onSubmit","NewMasterModalForm","isAtsSpecToolSelector","configAtsSvgPropsSelector","INITIAL_FORM_VALUES","CONTEXT_DEFAULT_VALUE","FormContext","atsSvgColor","closeDiscardModal","WebkitFontSmoothing","MozOsxFontSmoothing","CssBaseline","_props$children","syncExpanded","baseWidth","DRAWER_WIDTH","widthTransition","paperTransition","filteredMandatoryAttributes","openAttributeDialog","setMenuContent","isSkipped","skipAllButton","ReusableMenu","categoryToAttributeWhiteListMap","menuContent","tabIndexValue","setTabIndexValue","filteredFormAttributes","validValues","filteredFormAttributesOptions","unlistedAttributes","filteredUnlistedAttributes","unlistedAttribute","unlistedAttrKey","initialSlicedUnlistedAttributes","hasUnskippedAttributes","paginatedUnlistedAttributes","paginationSize","RecommendedRows","filteredRecommendedAttributes","formCutsheet","disableUpload","fileMap","cutsheetFile","applyScopeDataToEvent","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","applyDataToEvent","trace","rootSpan","dynamicSamplingContext","applySpanToEvent","applyFingerprintToEvent","mergedBreadcrumbs","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeScopeData","mergeAndOverwriteScopeData","mergeVal","YES","CONSENT_MODAL_PAPER_PROPS","chooseOne","ConsentModalContent","setSelection","muiNames","defaultSimplifiedDiscount","searchContactInputRef","discountContainerRef","discountsLoadedRef","searchContactsRef","scrollTimeout","focusTimeout","addOrEditContact","jsValues","newDiscounts","duplicatedDiscounts","deleteDiscountIds","discountsTouched","editedDiscounts","discountHasError","discountExist","filteredValues","finalValues","newEditDiscounts","newContact","resetDefault","addEmptyDiscount","simplifiedDiscounts","newSimplifiedDiscounts","newDuplicatedDiscounts","checkIfDiscountAlreadyExist","handleCloseDiscountMenu","addToDeleteDiscounts","newDeleteDiscountIds","discountAlreadyExist","optionalRequiredValidateFunc","checkInDigitLimit","newEditedDiscounts","discountToCheck","indexToIgnore","_isEqual","getProvinces","getCities","selectSalesRep","renderSelectField","inputKey","renderSalesRepSelectField","handleInputValueChange","contactsSearchInputValue","resetSearchContacts","handleOpenDiscountMenu","discountMenuAnchorEl","handleDisplayContactSearch","displayContactSearch","handleOpenDiscountConfirmDialog","openDiscountConfirmation","contactDiscountId","handleCloseDiscountConfirmDialog","handleCopyDiscounts","contactsSearchValue","countryInput","provinceInput","cityInput","salesRepsFilter","clearLocationInfo","customer_id","salesRepUsers","contactsArray","characterCount","inputLabelFormControl","inputFormControl","discountsContainer","discountContainer","valueInputHack","deleteButtonContainer","discountErrorMessage","contactsSearchContainer","contactsSearchPlaceholder","contactsSeachRoot","contactsSearchIcon","contactsSearch","discountConfirmationContainer","confirmationText","DEFAULT_FORM_NAME","discountIcon","createContact","iconPadding","printDescriptionContainer","initialAttribute","initialDescription","getInitialValues","seriesEditFormValues","setAttributeId","clearAttributeDialogState","formAttributeId","dialogAttributeValues","dialogAttributeId","seriesCategoryId","seriesFeatures","seriesOptions","seriesAttributeIds","brandOnlyFilter","attributeExclusionFilter","attributeFilter","transformedValue","updatedSeriesAttribute","createBatch","mspim","firmProducts","updateBatch","checkIsSpecSelected","getSelectedSpecs","Wrapper","OptionWrapper","PrimaryInfoColumn","$wide","NoteColumn","selectedContact","isSearchingContacts","storedContact","cardTitle","QuoteCustomersStyles","clickHandler","debounceSearch","isWide","setIsWide","useMinWidth","valueLabel","SingleOrMulti","_children","currentValue","noResults","RTL_ORIGIN","LTR_ORIGIN","_props$disableAutoFoc","disableAutoFocusItem","_props$MenuListProps","menuListActionsRef","contentAnchorRef","activeItemIndex","isAppearing","adjustStyleForScrollbar","ReactGAImplementation","_ga","GA4","filterProps","StyledComponent","ComponentProp","FinalComponent","getAnchorEl","defaultPopperOptions","_props$disablePortal","_props$keepMounted","initialPlacement","_props$popperOptions","popperRefProp","popperRef","_props$transition","tooltipRef","ownRef","handlePopperRef","handlePopperRefRef","setExited","rtlPlacement","flipPlacement","setPlacement","handlePopperUpdate","PopperJS","Portal","_props$collapsedHeigh","collapsedHeight","collapsedHeightProp","inProp","_props$timeout","wrapperRef","autoTransitionDuration","wrapperHeight","duration2","wrapperInner","muiSupportAuto","NoSsr","_props$defer","_props$fallback","Ripple","_props$pulsate","pulsate","rippleX","rippleY","rippleSize","_props$onExited","leaving","setLeaving","rippleClassName","ripple","rippleVisible","ripplePulsate","rippleStyles","childClassName","childLeaving","childPulsate","handleExited","TouchRipple","_props$center","centerProp","ripples","setRipples","nextKey","rippleCallback","ignoringMouseDown","startTimer","startTimerCommit","startCommit","oldRipples","_options$pulsate","_options$center","_options$fakeElement","fakeElement","sizeX","sizeY","TransitionGroup","animationDuration","buttonRefProp","_props$centerRipple","_props$disableRipple","_props$disableTouchRi","_props$focusRipple","onFocusVisible","_props$tabIndex","TouchRippleProps","rippleRef","useRippleHandler","rippleAction","eventCallback","skipRippleAction","handleMouseDown","handleDragLeave","handleMouseUp","handleMouseLeave","handleTouchStart","handleTouchEnd","handleTouchMove","isNonNativeButton","keydownRef","handleKeyUp","handleUserRef","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","stackClear","stackDelete","stackGet","stackHas","isMasked","hashClear","hashDelete","hashGet","hashHas","hashSet","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","stackSet","baseIsTypedArray","cloneSymbol","baseIsMap","baseIsSet","resVal","pathArray","currentObj","nextPath","setNestedObjectValues","PrivateFormikContext","FormikProvider","FormikConsumer","useFormikContext","formikReducer","submitCount","emptyErrors","emptyTouched","validateOnChange","validateOnBlur","isInitialValid","initialErrors","initialTouched","fieldRegistry","runValidateHandler","maybePromisedErrors","actualException","runValidationSchema","validationSchema","schema","validateData","abortEarly","validateYupSchema","yupError","yupToFormErrors","runSingleFieldLevelValidation","runFieldLevelValidations","fieldKeysWithValidation","fieldValidations","fieldErrorsList","runAllValidations","schemaErrors","validateErrors","arrayMerge","validateFormWithLowPriority","unstable_runWithPriority","combinedErrors","validateFormWithHighPriority","validateField","maybePromise","setTouched","setErrors","setFieldError","shouldValidate","executeChange","eventOrTextValue","maybePath","getValueForCheckbox","setFieldTouched","executeBlur","stateOrCb","imperativeMethods","validateForm","setFormikState","executeSubmit","_errors","maybePromisedOnReset","getFieldMeta","initialError","getFieldProps","Formik","formikbag","shouldClone","Field","_validationSchema","legacyBag","asElement","Comp","componentDisplayName","FieldArrayInner","updateArrayField","updateErrors","alterErrors","updateTouched","alterTouched","handleSwap","handleInsert","handleUnshift","handleRemove","arrayHelpers","restOfFormik","ErrorMessageImpl","shouldComponentUpdate","ErrorMessage","sectionPrefix","$at","_t","injectFirstNode","jssPreset","_props$injectFirst","injectFirst","_props$disableGenerat","localOptions","outerOptions","createComment","WindowSizeContext","BuildSizerModal","buildSizerTheme","Sizer","LanguageModuleActions","ThemeProviderActions","PaginationActions","mainMenuIcons","setVersionData","toggleDebug","resolvedMenuItems","extraMenuItems","fetchAppVersion","DebugStyle","MenuItemOverride","onClickOverride","defaultShouldError","defaultShouldWarn","stylis_min","ca","da","ea","ha","ia","ja","ka","aa","la","ma","toSheet","Sheet","ruleSheet","parents","stylisOptions","stylis","Stylis","_insert","stylisPlugins","shouldCache","speedy","isarray","tokensToFunction","tokensToRegExp","PATH_REGEXP","defaultDelimiter","escaped","optional","escapeGroup","encodeURIComponentPretty","attachKeys","route","endsWithDelimiter","regexpToRegexp","arrayToRegexp","stringToRegexp","UserConsentModal","createSagaMiddleware","reduxClassActionMiddleware","routerMiddleware","enhancers","ProductSection","isCollapsed","collapsedIndex","showAIProduct","showImage","expandRow","getCutsheetDataByLocaleRegionOrFallback","handleAddSectionWithTemplateIssue","sortedFieldsData","expanderColumn","greyText","tableRow","imageCell","expanderColumnChevron","toLocaleString","maximumFractionDigits","expansionContainer","descAndNote","subTotalBox","switchButtonContainer","tableBorder","toSearchableString","recalc","_inDOM","scrollDiv","MasterListFilter","MasterTemplateFilter","officeLocation","relatedManufacturers","relatedCategories","deactivated","newRelatedManufacturers","newRelatedCategories","updatedUploadedCutSheetFileIds","CREATE_AI_XREF_DIALOG_ID","rowContainer","overlayComponent","addXref","CreateAiXrefModalProps","selectedCrossTypes","setSelectedCrossTypes","foundXref","foundXrefType","handleCheckChange","displayedType","transformedCrossedTypes","crossTypeObj","xrefObj","selectSelectedQuote","selectIsCreatingSalesOrder","isCreatingSalesOrder","closeSalesOrderModal","createSalesOrder","hasNoSalesOrder","handleCreateSalesOrder","newProjectFormValues","mapNewSearchFirmProducts","firmRow","productSharing","firmRowFromDocOnly","mapNewSearchFirmProductsFlat","productUnavailabilityIds","AddToProject","setIsAdding","AmplitudeTrackOnAddProduct","addToSpec","createNewSpec","selectedExistingSpec","destinationProjecId","newSpecId","AddToSpec","MODAL_WIDTH","AddToMaster","addToMasterSpec","destinationMasterId","newMasterId","setProjectType","productCatalogAddProduct","productDestination","integratedAppConfigs","appAuthentication","authentication","dataParams","resetPasswordSucceeded","PERSIST_KEYS","ADD_INTEGRATED_APP_CONFIG","appType","AtsModuleDebug","dispatchDeprecatedApiCall","mainContent","apiTestButtons","AtsModule","Module","ProductCategoryListComponent","dispatchFilterProductCategories","filterProductCategories","productCategorySelect","displayByCategory","sub","subList","listItemCompact","filterText","filterTextCompact","useImageSrc","configSelector","pageTitleCompact","GuestPageHeader","compactMode","appTitle","drawingNameLength","highestNumber","currentHighestNumber","ProductCategorySelection","pinHoverId","categorySearchTerm","tourButton","modeCheck","resetMode","isQuickSpec","isMasterSpec","isTemplateSpec","isProjectSpec","toggleTask","handleSelectCategory","productCatalogSelectCategory","getProductCategories","selectingCategory","searchTermLower","sortedProductTypesList","productTypes","updateFavouriteCategoryInStateAndAmplitude","favourite","favouritedCategory","favouritedProductTypeIndex","categoryWithUpdatedFavourite","pinCategory","unpinCategory","contentContainerCompact","formContainerCompact","term","availableCategoriesTitle","availableCategoriesSubText","productCategoryContainer","productCategoryListContainerCompact","divisionDropdown","displaySelectionCompact","DISPLAY_BY_DIVISION","categoryContainerCompact","isFavouriteCategory","displayMediaCard","categoryListItemCompact","searchInput","displaySelectionContainer","displaySelectionContainerCompact","mediaCardCompact","categoryListButtonCompact","lineClamp","boxOrient","selectTaskId","FieldMultiSelect","finalValue","customOverrideOverride","valueAsSet","valueSet","FieldMultiTextField","handleMakeChip","charDelimiterSet","valueList","actualValue","char","keyDelimiterSet","_InputLabelProps","chipValue","chipIndex","charDelimiter","keyDelimiter","minDateWarn","validDate","makeDateValidator","handleFilterLeadSourceValues","leadSourceList","formList","filteredLeadSourceList","forProjectTracker","withLeadSource","WITH_LEAD_SOURCE","withValuation","WITH_PROJECT_VALUATION","leadSourceValues","leadSourceRefGroup","lead","withAssignedTo","WITH_ASSIGNED_TO","AssignedTo","canSearchFirmUsers","WITH_TRACK_PROJECT","leadSourceSelect","WITH_PROJECT_TRACKER","withTrackProject","leadSourceForReduxForm","withIdAndSource","_trackProject","qtyColumnCell","ProductRow","drawingLabel","isMissing","newQty","QUOTE_PRINT_FORMAT_FORM_NAME","CATEGORIES_TO_ROUND","CATEGORIES_TO_BYPASS_CHECK","QuotePrintFormat","locationDataSource","calcUnitListPrice","nuAirMultiplier","userHasNuAirSmallIndependentAcl","userHasNuAirWholesaleAcl","rawListPrice","checkIsMissing","handleChangeLocationDataSource","loggedInUserOffice","constructSelectedProducts","quoteSample","rowItem","productListTitle","productTable","columnHeaderCell","selectedProductsAcc","checkedDrawingIds","partialDrawing","drawingProducts","disabledDrag","optionsTypes","enableOptionBasedProductImage","enableOptionBasedManufacturerCutsheet","initialOptionValues","optionBasedProductImage","optionBasedManufacturerCutsheet","optionType","clearOptionDialogState","submitFailed","formOptionType","nullOptionKeyFilter","swatchImageArray","swatchImageId","transformedOptionValues","transformedOption","editSeriesOption","addSeriesOption","updatedSeriesOption","updatedSeriesOptionWithOverride","typeValue","DescriptionsFieldArray","nin","numDescriptions","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","States","_handlers","onfulfilled","onrejected","_executeHandlers","onfinally","isRejected","_setResult","RESOLVED","cachedHandlers","PACKAGE_LIST_FILTER_FORM","PackageListFilter","CONFIG_LIST_FILTER_FORM","ConfigListFilter","createAnnotationLayerBuilder","l10n","hasJSActionsPromise","fieldObjectsPromise","pageDiv","pdfPage","createStructTreeLayerBuilder","createTextLayerBuilder","textLayerDiv","highlighter","createXfaLayerBuilder","_cancelled","pdfjsLib","__non_webpack_require__","PARTIAL_LANG_CODES","langCode","DEFAULT_L10N_STRINGS","of_pages","page_of_pages","document_properties_kb","document_properties_mb","document_properties_date_string","document_properties_page_size_unit_inches","document_properties_page_size_unit_millimeters","document_properties_page_size_orientation_portrait","document_properties_page_size_orientation_landscape","document_properties_page_size_name_a3","document_properties_page_size_name_a4","document_properties_page_size_name_letter","document_properties_page_size_name_legal","document_properties_page_size_dimension_string","document_properties_page_size_dimension_name_string","document_properties_linearized_yes","document_properties_linearized_no","print_progress_percent","additional_layers","page_landmark","thumb_page_title","thumb_page_canvas","find_reached_top","find_reached_bottom","find_not_found","error_version_info","error_message","error_stack","error_file","error_line","rendering_error","page_scale_width","page_scale_fit","page_scale_auto","page_scale_actual","page_scale_percent","loading_error","invalid_file_error","missing_file_error","unexpected_response_error","printing_not_supported","printing_not_ready","web_fonts_disabled","en","es","ga","gu","hy","nb","ne","nn","sv","zh","NullL10n","getL10nFallback","formatL10nValue","ignoreDestinationZoom","setHistory","_goToDestinationHelper","namedDest","_cachedPageNumber","destArray","goToPage","pageLabelToPageNumber","setHash","phraseSearch","zoomArgs","zoomArg","zoomArgNumber","allowNegativeOffset","destLength","zoom","allowNull","isValidExplicitDestination","cachePageRef","refStr","pageRef","isPageVisible","isPageCached","scrollMode","ScrollMode","spreadMode","SpreadMode","SidebarView","xinv","x_","curRoot","curActiveOrFocused","backingStoreRatio","changeOrientation","sortByVisibility","rtl","scrollEl","numViews","views","firstVisibleElementInd","binarySearchFirstItem","elementLeft","elementRight","backtrackBeforeAllVisibleElements","lastEdge","currentWidth","currentHeight","viewWidth","viewRight","viewBottom","hiddenHeight","hiddenWidth","fractionWidth","fractionHeight","widthPercent","normalizeWheelEventDirection","MOUSE_PIXELS_PER_LINE","scrollMatches","spot","debounceScroll","rAF","currentX","viewAreaElement","lastX","currentY","lastY","_eventHandler","INITIAL","RUNNING","PAUSED","FINISHED","NORMAL","CHANGING","FULLSCREEN","THUMBS","OUTLINE","ATTACHMENTS","LAYERS","CANVAS","ENABLE_ENHANCE","VERTICAL","HORIZONTAL","WRAPPED","PAGE","ODD","EVEN","minIndex","elt","pageTop","animationStarted","_updateBar","progressSize","PDF_ROLE_TO_HTML_ROLE","DocumentFragment","Part","Sect","Div","Aside","NonStruct","Title","FENote","Sub","Lbl","Span","Em","Strong","Annot","Form","Ruby","RB","RT","RP","Warichu","WT","LI","LBody","TR","TH","TD","THead","TBody","TFoot","Caption","Figure","Formula","Artifact","HEADING_PATTERN","_walk","_setAttributes","structElement","htmlElement","_finishRendering","endOfContent","numTextDivs","textLayerFrag","setTextContentStream","setTextContent","_bindMouse","expandDivsTimer","adjustTop","divBounds","_resetView","_updateScrollMode","_updateSpreadMode","ENABLE_PERMISSIONS_CLASS","PagesCountLimit","FORCE_SCROLL_MODE_PAGE","FORCE_LAZY_PAGE_INIT","PAUSE_EAGER_PAGE_INIT","resize","idsToKeep","firstView","viewerVersion","TextLayerMode","RendererType","watchScroll","_scrollUpdate","PresentationModeState","_onAfterDraw","_pages","getPageView","_pagesCapability","pageView","_setCurrentPageNumber","resetCurrentPageView","_currentPageNumber","pageLabel","_pageLabels","_currentScale","isValidRotation","_pagesRotation","updateArgs","pagesRotation","_firstPageCapability","_onePageRenderedCapability","firstPagePromise","permissionsPromise","_scrollMode","viewerElement","firstPdfPage","textLayerFactory","annotationLayerFactory","xfaLayerFactory","pageNum","defaultViewport","renderingQueue","textLayerMode","textHighlighterFactory","structTreeLayerFactory","useOnlyCssZoom","maxCanvasPixels","firstPageView","getPagesLeft","setPageLabels","PDFPageViewBuffer","previousPageNumber","_scrollIntoView","pageSpot","_setScaleUpdatePages","noScroll","presetValue","isInPresentationMode","_spreadMode","_setScale","hPadding","vPadding","pageWidthScale","pageHeightScale","horizontalScale","isPortraitOrientation","_resetCurrentPageView","pageWidth","pageHeight","removePageBorders","boundingRect","_updateLocation","currentScale","currentScaleValue","normalizedScaleValue","firstPage","pdfOpenParams","currentPageView","intLeft","intTop","visiblePages","numVisiblePages","newCacheSize","isSimpleLayout","currentId","stillFullyVisible","containsElement","presentationModeState","_getCurrentVisiblePage","_getVisiblePages","getVisibleElements","renderingState","RenderingStates","_cancelRendering","forceRendering","currentlyVisiblePages","scrollAhead","preRenderExtra","getHighestPriority","createTextHighlighter","findController","getPagesOverview","isValidScrollMode","_previousScrollMode","_currentScaleValue","isValidSpreadMode","parity","_getPageAdvance","pageLayout","yArray","expectedId","firstId","lastId","nextPage","advance","previousPage","increaseScale","decreaseScale","initializePermissions","dummyPage","pageIndexSet","isSameScale","getScrollAhead","toggleLoadingIconSpinner","visibleIds","MAX_CANVAS_PIXELS","compatibilityParams","setPdfPage","totalRotation","annotationLayer","xfaLayer","_resetZoomLayer","removeFromDOM","zoomLayerCanvas","zoomLayer","keepZoomLayer","keepAnnotationLayer","keepXfaLayer","zoomLayerNode","annotationLayerNode","xfaLayerNode","redrawAnnotationLayer","redrawXfaLayer","cssTransform","isScalingRestricted","outputScale","hasRestrictedScaling","cancelRendering","relativeRotation","paintedViewportMap","absRotation","textLayerViewport","textLayer","textRelativeRotation","textAbsRotation","transX","transY","getPagePoint","convertToPdfPoint","viewVisible","draw","canvasWrapper","renderContinueCallback","finishPaintTask","paintTask","paintOnSvg","paintOnCanvas","resultPromise","tree","treeDom","renderCapability","onRenderContinue","isCanvasHidden","showCanvas","getOutputScale","actualSizeViewport","pixelsInViewport","maxScale","sfx","approximateFraction","sfy","roundToDivide","ensureNotCancelled","setPageLabel","isAndroid","isIOS","OptionKind","VIEWER","API","WORKER","PREFERENCE","cursorToolOnLoad","defaultUrl","defaultZoomValue","disableHistory","disablePageLabels","enablePermissions","enablePrintAutoRotate","historyUpdateUrl","compatibility","pdfBugEnabled","printResolution","sidebarViewOnLoad","scrollModeOnLoad","spreadModeOnLoad","viewerCssTheme","viewOnLoad","userOption","setThumbnailViewer","isHighestPriority","highestPriorityPage","hasViewer","renderHighestPriority","isThumbnailViewEnabled","onIdle","visibleViews","numVisible","isViewFinished","holeId","scrolledDown","holeView","preRenderIndex","preRenderView","renderView","setTextMapping","disable","_convertMatches","iIndex","matchIdx","divIdx","matchesLength","_renderMatches","isSelectedPage","pageIdx","selectedMatchIdx","prevEnd","infinity","highlightSuffix","selectedLeft","appendTextToDiv","n0","n1","matchIndex","Node","_updateMatches","clearedUntilDivIdx","pageMatches","pageMatchesLength","downloadUrl","isPdfData","blobUrl","_openBlobUrls","viewerUrl","WaitOnType","timeoutHandler","EVENT","TIMEOUT","externalListeners","_on","_off","webL10n","fixupLangCode","gL10nData","gTextData","gTextProp","gLanguage","gMacros","gReadyState","onFailure","xhrLoadText","dictionary","reBlank","reComment","reSection","reImport","reSplit","rawText","currentLang","genericLang","skipLang","parsedRawLinesCallback","loadImport","evalString","nextEntry","parseRawLines","parsedPropertiesCallback","parseProperties","successCallback","langLinks","langCount","onResourceLoaded","gResourceCount","L10nResourceLink","resource","getL10nDictionary","defaultLocale","anyCaseLang","parseResource","rv","substArguments","substIndexes","reMatch","reIndex","macroName","paramName","macro","getL10nAttributes","getL10nData","getChildElementCount","textNode","pluralRules","isIn","getPluralRules","setLanguage","shortCode","rtlList","getTranslatableChildren","elementCount","translateElement","getReadyState","FindState","FOUND","NOT_FOUND","CHARACTERS_TO_NORMALIZE","normalizationRegex","normalizedCh","totalDiff","_onFind","_onFindBarClose","eventState","_shouldDirtyMatch","findbarClosed","pendingTimeout","scrollMatchIntoView","_selected","_reset","_prepareMatches","currentElem","matchesWithLength","nextElem","prevElem","isSubTerm","_isEntireWord","startIdx","getCharacterType","endIdx","_calculatePhraseMatch","queryLen","entireWord","originalMatchIdx","getOriginalIndex","originalQueryLen","_calculateWordMatch","queryArray","subquery","subqueryLen","matchLength","_pageMatches","_pageMatchesLength","_calculateMatch","_pageContents","pageDiffs","_pageDiffs","_resumePageIdx","pageMatchesCount","_extractText","_extractTextPromises","extractTextCapability","_linkService","_updatePage","_scrollMatches","_updateAllPages","_nextMatch","currentPageIndex","_pendingFindMatches","_query","numPageMatches","_matchesReady","numMatches","_pagesToSearch","_nextPageMatch","_advanceOffsetPage","_updateMatch","_requestMatchesCount","_updateUIResultsCount","matchesCount","_updateUIState","rawQuery","charCode","isAlphabeticalScript","isAsciiSpace","CharacterType","isAsciiAlpha","isAsciiDigit","isThai","isHan","isKatakana","isHiragana","isHalfwidthKatakana","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","resetHistory","updateUrl","reInitialized","getCurrentHash","_maxUid","_isValidState","_parseCurrentHash","_isValidPage","forceReplace","_destination","isDestHashesEqual","isDestArraysEqual","_popStateInProgress","pushPage","pushCurrentPosition","back","_initialized","_blockHashChange","_pushOrReplaceState","shouldReplace","_uid","_updateUrl","newUrl","_tryPushCurrentPosition","temporary","_numPositionUpdates","checkReload","perfEntry","_updateInternalState","removeTemporary","checkNameddest","nameddest","_updateViewarea","_isViewerInPresentationMode","POSITION_UPDATED_THRESHOLD","_popState","newHash","hashChanged","_currentHash","waitOnEventOrTimeout","_pageHide","_bindEvents","updateViewarea","popState","pageHide","_boundEvents","_unbindEvents","destHash","pushHash","isEntryEqual","firstDest","secondDest","sandboxBundleSrc","scriptingFactory","docPropertiesLookup","docProperties","_scripting","createSandbox","calculationOrder","appInfo","docInfo","_dispatchPageOpen","_pdfViewer","modes","apiPageLayoutToViewerModes","siblings","CustomEvent","visitedPages","actionsPromise","_pageOpenPending","_docPropertiesLookup","_createScripting","_scriptingFactory","createScripting","GenericScripting","_closeCapability","filesize","authors","sandbox","applyAnimatedValues","createStringInterpolator","defaultElement","manualFrameloop","createAnimatedStyle","createAnimatedTransform","createAnimatedInterpolation","colorNames","createAnimatedRef","Animated","AnimatedArray","addChild","AnimatedObject","AnimatedStyle","und","boo","useForceUpdate","withDefault","callProp","interpolateTo","onRest","onFrame","getForwardProps","usePrev","prevRef","AnimatedValueArray","createInterpolator","extrapolate","outputRange","inputRange","extrapolateLeft","extrapolateRight","findRange","inputMin","inputMax","outputMin","outputMax","AnimatedInterpolation","getPayload","controllers","configIdx","configs","endOfAnimation","lastTime","valIdx","animatedValues","toValues","isAnimated","fromValues","lastPosition","initialVelocity","decay","lastVelocity","numSteps","tension","friction","mass","isOvershooting","isVelocity","isDisplacement","addAnimatedStyles","AnimatedValue","animatedStyles","animatedStyle","linear","emptyObj","Controller","runCount","timestamps","animations","onEndQueue","cancelledAt","propsArg","_ensureAnimated","_flush","finished","_stopAnimation","_stop","createAnimated","moveChildren","_onEnd","reduceDelays","runsLeft","onRunEnd","_run","_runAsync","_diff","_animate","asyncTo","changed","diffProp","lastKey","diffTimestamp","_this$props$from","_this$props$to","isPrevented","_isModified","goalValue","computeGoalValue","currValue","fromValue","isInterpolated","isAnimatableString","useSprings","deps","hasNewSprings","isFn","springs","mapIndex","fillArray","spring","_useSprings","AnimatedProps","animated$1","overrideKey","withExtend","propsAnimated","attachProps","oldPropsAnimated","getAnimatedValue","_getValue","animatedProps","childRef","isUnitlessNumber","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flexPositive","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","orphans","tabSize","widows","floodOpacity","strokeOpacity","dangerousStyleValue","prefixKey","attributeCache","NUMBER","PERCENTAGE","hsla","hex3","hex4","hex6","hex8","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","hue2rgb","parse255","int","parse360","parse1","parsePercentage","colorToRgba","int32Color","normalizeColor","stringShapeRegex","colorRegex","colorNamesRegex","styleValue","isFilterElement","hasAttribute","rangeValue","outputRanges","interpolations","_props$raised","raised","valueBuffer","inlineStyles","bar1","bar2","determinate","dashed","bar1Indeterminate","bar1Determinate","bar1Buffer","bar2Indeterminate","bar2Buffer","getColor","backgroundPrimary","backgroundSecondary","dashedColorPrimary","dashedColorSecondary","barColorPrimary","barColorSecondary","DisablePortal","CloseIcon","autoHighlight","autoSelect","ChipProps","_props$clearText","clearOnEscape","_props$closeIcon","_props$closeText","_props$disableClearab","disableCloseOnSelect","disableOpenOnFocus","_props$forcePopupIcon","forcePopupIcon","_props$freeSolo","_props$getOptionLabel","getOptionDisabled","_props$ListboxCompone","includeInputInList","ListboxProps","_props$loading","_props$loadingText","_props$noOptionsText","_props$openText","_props$PopperComponen","PopperComponentProp","_props$popupIcon","popupIcon","renderGroupProp","renderGroup","renderOptionProp","_props$selectOnFocus","selectOnFocus","_useAutocomplete","useAutocomplete","getInputLabelProps","getPopupIndicatorProps","getClearProps","getListboxProps","getOptionProps","popupOpen","focusedTag","groupedOptions","getCustomizedTagProps","tagSizeSmall","groupLabel","groupUl","renderListOption","hasClearIcon","hasPopupIcon","inputRoot","clearIndicatorDirty","popupIndicator","popupIndicatorOpen","inputFocused","popperDisablePortal","listbox","option2","IMAGE_FILE_URL_OPTIONS","isIconButton","propIsEnumerable","test1","test2","test3","shouldUseNative","sliceIterator","isTree","getHash","slots","hasHash","wrapTree","replaceInArray","compressedTree","_hash","_hash2","treeEntries","cur","createTreeIterator","keyFn","afterSet","onLocationChanged","LOCATION_CHANGE","isFirstRendering","$changePage","ident","$changeRecord","$changePerPage","$findRecord","ComponentWithRef","DOMIterables","dontSetMe","findInArray","localReducer","me","localComponentId","localToggleOpen","controlledToggleOpen","localOpen","_action","AtsSvgMaster","_defs","_rect","SvgQuoteTakeoffRobot","vendors","_now","cp","_react2","_propTypes2","sizerStyle","INPUT_PROPS_BLACKLIST","copyStyles","isIE","placeHolderSizerRef","placeHolderSizer","sizerRef","inputWidth","copyInputStyles","updateInputWidth","onAutosize","inputStyles","newInputWidth","placeholderIsMinWidth","extraWidth","injectStyles","sizerValue","wrapperStyle","cleanInputProps","inputClassName","renderStyles","setPending","fetchQuoteById","rowNumberCell","reviewButton","errorInfo","_errorMessage","GenericDrawer","closeOnSubmit","buttonsSection","emailKey","loginError","_ExtendableError","ExtendableError","defaultShouldAsyncValidate","syncValidationPasses","BuildingTypes","SelectBuildingClassAction","SELECT_BUILDING_CLASS","QuoteProjectInfo","tracking","preselectedProjectLoaded","createProjectTrackChecked","testValid","selectedClasses","selectedTypes","Contacts","multiUseOptions","isSingle","allOptions","areThereSelectedBuildingClasses","areNonMultiUseOptionsSelected","selectBuildingClass","optionSelect","disabledCustomStyles","selectBuildingType","classesRequiringTypes","buildingClassesHaveNoBuildingTypes","onCountrySelect","onProvinceSelect","onCitySelect","projectInfoLabel","onDateChange","trimFieldName","selectBuildingClasses","bClass","existingType","selectExistingProject","unLink","linkUnLinkProject","preLinked","skipDates","targetedArchitect","targetedContractor","targetedEngineer","projectOnlyContacts","salesRepsWithNumberIds","contactsAdded","uniqueProjectOnlyContacts","customersToAdd","newSalesReps","createFolder","fetchCountries","resetSelectedProjectId","searchProjectsById","_selectedProject","isTrackingOrUntrackingProject","isSearchingProjects","selectorContainer","buttonLink","buttonCreateFolder","trackProjectContainer","formControlLabel","trackUntrackProject","trackStatus","linkButtonContainer","selectedCountry","selectedProvince","selectedCity","makeSelectSelectedBuildingClasses","selectedBuildingTypes","makeSelectSelectedBuildingTypes","provinceKey","cityKey","defaultPeriods","ValidityDate","periods","expiryDateValidateFunc","updatePeriods","newPeriod","onBidChange","onExpiryChange","handlePeriodChange","periodLabel","helperWarning","ShippingAddress","onRadioSelect","changeValue","renderRadioGroup","addressGrid","QuoteInfo","addressOptions","quoteCollaborators","quoteBidDate","quoteExpiryDate","quoteCreatedDate","quoteAddress","quoteShippingPreference","userList","keyedUsers","filteredUserList","useFocused","ISpecToQuoteSortValue","CharCountAdornment","_QuickEntry","dataPath","autocompleteProps","canClearSet","showCharCount","quickTextOptions","filterString","setFilterString","prevInputRef","dipatchChangeDebounced","dispatchChange","focusProps","countAdornment","callerInputProps","callerHtmlInputProps","restTextFieldProps","replaced","QuickEntry","QuoteTermsConditions","onTermSelect","quickEntrySuggestions","TYPE_LABEL_KEYS","charge","tax","isPercentageType","formatChargeDiscountTaxValue","toStoredValue","emptyBox","itemsContainer","itemRow","typeChip","itemLabel","sortableHelper","formDivider","addNewRow","addNewLabel","radioLabel","inputsRow","textField","DragHandle","itemProps","ChargeDiscountTaxEditor","dividerBeforeForm","newItem","setNewItem","applyChange","updatedItems","onApplied","missingLabel","missingValue","itemToAdd","QuoteChargeDiscount","chargesDiscounts","handleItemsChange","handleUpdate","openPopupButton","GrandTotals","updateDiscounts","recalculateGrandTotals","currentDiscounts","nextContext","grandTotalsHaveChanged","grandTotalWrapper","QuoteGrandTotal","chargeDiscountWrapper","quoteList","quotesLoading","revisions","printQuoteMap","printHistoryLoading","revisionState","reportQuote","createQuoteWithSpecToQuote","allowEmptySpecToQuoteSectionMap","isGettingSpecToQuoteDraft","specToQuoteInitialValues","quoteBilling","isDownloadingQuoteBilling","loadingQuotes","linkBidInvitationQuote","tooltipMenuItem","packageNumber","searchOptionBold","internalProductNumberText","showShareStatus","currentRowId","internalProductNumber","dateNoTimeStamp","multipleManufacturers","manu","getManufacturerOfProductOrPackage","isSharedProduct","stockRegion","_firmProduct","_stockRegion","_stockable","_qty","_isPOA","_productNumber","_description","_dateNoTimeStamp","NavigateNext","rowId","expansionPanelDetailsRoot","tableBackground_showVendorRequestCb","tableBackground_showAIProduct_showVendorRequestCb","tableBackground_showImage_showAIProduct_showVendorRequestCb","tableBackground_note_and_description_row","AIProductImageCell","AIProductImageComponentPlaceholderCell","AIProductNumberCell","AIBrandCell","nonAIProductTooltip","opacityDisabled","sectionsList","sectionsTitle","textFieldRoot","textFieldInput","highlightedTextFieldInput","poaTag","boxIcon","discontinuedIcon","thumbUpButton","thumbUpButtonWithPositiveState","disabledThumbsUpIcon","thumbDownButton","thumbDownButtonWithNegativeState","disabledThumbsDownIcon","columnCell","listIconItem","PRODUCT_LIBRARY_TAB","SHARED_LIBRARY_TAB","AC_","textRef","fromImportVendorPricing","parentSharedProducts","searchingProducts","searchingParentSharedProducts","addProductOrPackageToQuoteLoading","activeTab","setActiveTab","isSharedLibraryTab","quoteProductUniquePackageId","quoteProductproductIndex","uniqueRecommendations","recommendedProducts","productsWithRecommendations","isNotFirstProductInPackage","debouncedSearchProducts","localOnChange","handleFeedbackOnSelectChange","DrawerButtons","handleTabsKeyDown","recommendedIndex","AC","tryParseJSON","getPriceFormat","isValidPositiveNumber","getDownloadFile","atsApiCall","quotePhaseCode","formatBidResponseProducts","globalIndexId","groupedData","isLast","BidGroupProducts","attachmentFileName","FileUpload","FileUploadMetas","netPrice","getGroupSectionProducts","formatQuoteSectionProducts","SourceQuoteSections","newProductMaps","matchAdded","matchedSection","resProducts","bidLabelColumn","bidProductDescription","bidProductNote","SectionProducts","bidProductNo","responseProductDescription","responseProductNote","resProductNo","getResProductMappingHeaderColumns","headerMappings","calculatePrice","priceFields","productItem","bidId","requiredMsg","initVerifyAllowBid","netPriceVerify","multiplierVerify","createSuggestProduct","maxIndexId","createContextSuggestProduct","detailTableProducts","prefillBidResponseProducts","initPendingBidResponseProducts","savedResponseProduct","prefillBidResponseSettingInfo","quoteConnectBidEmailSetting","replyEmailAttachments","replyEmailAttachment","getBidResponseProductsSubmitData","productState","detailTableProduct","bidGroupProduct","verifyAllowBid","bidSectionProductsState","verifyProduct","totalReplyProducts","getEmailSummary","bidSummary","emailTemplate","viewType","bidExtraInfo","bidDescription","getQuoteSearchFilter","parsingQuoteSearchResult","quotesResponse","quotations","quotation","isSelectedCustomerFiles","selectCustomerFiles","getBidProjectAttachments","getSelectedProjectAttachments","groupSuggestSectionCount","sectionCountMap","sectionCounted","sectionCount","processedBidProducts","newProductMapsFlatten","lastUpdateQuoteProduct","bidRes","firstTableCell","tableAICell","tableSupplierCell","attachFileTitleContainer","attachTitleRow","attachFilesContainer","attachDownloadFileRow","iconAndTextContainer","disabledProductRow","disabledProductText","enabledProductText","_defaultFieldsToMap","ImportPricingStepper","linkBidResponseId","bidResponseProductIds","loadMappingReady","setLoadMappingReady","allRowsExpanded","setAllRowsExpanded","expandedRows","setExpandedRows","selectedVendorQuote","setSelectedVendorQuote","setFieldsToMap","setProductsToMap","finalCheck","setFinalCheck","addMissingProductModalOpen","setAddMissingProductModalOpen","selectedMissingProducts","setSelectedMissingProducts","unmappedProducts","setUnmappedProducts","importedMissingProductIds","setImportedMissingProductIds","setCategories","bidImportPriceSetting","setBidImportPriceSetting","setExtraSections","allVendorBidResponseProductIds","setAllVendorBidResponseProductIds","allVendorBidResponseProducts","setAllVendorBidResponseProducts","setUpdateFirmProductPrice","updatePriceConfirmOpen","setUpdatePriceConfirmOpen","fetchingPrices","setFetchingPrices","mountedRef","selectProductDrawerOpen","isProductDrawerOpen","fetchDetail","bidImportPriceSettingResult","categoriesResult","manufacturersResult","quoteTemplate","templateObj","extraSectionsTemp","sectionType","sectionMap","matchSection","mapSectionId","mappingPriceSetting","updateMappingFields","parsedFieldsMappings","defaultSetting","hasAttachQuote","attachedQuoteId","matchPriceSetting","mappingField","matchSetting","aliasField","templateItem","existingMapTo","handleOnExpand","importNewProducts","updatedProductsToMap","updatedSelectedProducts","updatedImportedIds","firmProductData","importedIndex","bidCurrency","bidResponseItems","handleUpdateFirmProductPriceChange","hasUnmappedProducts","getMappedPriceFields","fieldNameToPriceKey","templateField","templateFieldName","handleConfirmUpdate","mappedPriceFields","firmProductsToUpdate","handleOnClickImportPricing","onExpandChnage","onChangeAutocomplete","onChangeCheckbox","handleProductDrawerCallback","rowSpan","getTotalColumn","ExtraSectionProductRow","MappingFieldRow","keyInfo","newFieldsToMap","handleChangeMappingField","productKeyToResponseIds","createResults","responseIds","fullFirmProductBase","fullFirmProduct","existingProduct","existingInner","mergedInner","bidImportPriceSettingTemp","suggestResponseProductIds","suggestProductsMapping","insertSectionProducts","bidResponseToQuoteProductId","insertSectionProductsFormData","reconstructedCurrentVendor","reconstructedOtherVendors","previousImportMap","bidResponses","processedFirmProductIds","sourceProductInfoMap","sourceProductNote","sourceProductDescription","sourceQuoteProductId","groupedByOriginal","previousImport","insertCountPerBase","baseIndex","targetProduct","targetUniquePackageId","maxPackageIndex","insertCountByBaseIndex","productToMapFirmProductId","firmProductIdStr","offsetFromLowerInserts","sourceProductInfo","existingQuoteProductId","previousInsertSectionProducts","handleCloseModal","imported","linkBidInvitationResponseId","handleClickAttachmentFile","fileUrl","rowGap","currentUnmappedIds","allProducts","uniqueProducts","ml","firmProductNumber","originalPrices","updatedPrices","getUpdatePriceConfirmData","VendorQuotationsModalContentView","SetRes","selectedVendorQuoteId","setSelectedVendorQuoteId","alertOpen","setAlertOpen","importStepperOpen","setImportStepperOpen","importBidResponseId","setImportBidResponseId","initLinkBidResponseId","filteredInvitationResponseResult","bidInvResponseIds","showImportPricing","onClickDeleteQuote","handleDeleteVendorQuote","handleCloseImportStepper","getInitialsFromEmail","BULK_EDIT_FILTER_TYPE","COLUMN_ACTIONS","SELECT_ALL_SECTION_OPTION","isSelectAll","columnActions","CLEAR","DEFAULT_NEW_ROW","columnName","columnAction","filterContainer","filterChildContainer","step0Autocomplete","BulkEditDialog","hasRawPreSelectedProducts","minStep0","setMinStep0","SECTIONS","setSelectedFilter","selectedSections","setSelectedSections","selectedBrands","setSelectedBrands","sectionInputValue","setSectionInputValue","brandInputValue","setBrandInputValue","categoryInputValue","setCategoryInputValue","productNumberInputValue","setProductNumberInputValue","sectionList","setSectionList","brandList","setBrandList","setCategoryList","productNumberList","setProductNumberList","noProductsError","setNoProductsError","selectedQuoteProductIdsBaseOnFilterMapRef","availableTemplateColumnsRef","columnsToEdit","setColumnsToEdit","isProcessingBulkEdit","setIsProcessingBulkEdit","disabledNextButton","BRANDS_AND_CATEGORIES","PRODUCTS","setupStep0","newSectionList","newBrandList","newCategoryList","newProductNumberList","productNumberMap","preSelectedProductIndexes","currentUniquePackageIdProductToAdd","indexOnSelectableProducts","quoteProductIds","openBulkEditModal","hasPreSelectedProducts","hasValidPreSelectedProducts","getAllLists","newQuoteProductIdsMap","templateColumnNames","addToColumnNamesSet","templateHasBeenAdded","idMap","checkingFunction","sensitivity","setupStep1","getFilteredDataList","dataList","toggleAllOptions","currentSelected","filteredDataList","hasChecked","prevSelected","newSelected","handleUpdateStep1Field","indexToEdit","fieldToEdit","prevColumns","isClearAction","DataOption","selectedSection","handleDeleteSection","selectedBrand","selectedCategory","isLastRow","displayError","rowValue","ImmuSet","cleanedColumnsToEditMap","applyBulkEdit","numberOfTargetedProducts","numberOfSelectedSections","numberOfSelectedBrands","numberOfSelectedCategories","numberOfActions","applyBulkEditOperation","PRODUCTS_COLUMN","SECTION_COLUMN","multiAutocomplete","BulkMoveDialog","selectedTargetSection","setSelectedTargetSection","isAddingNewSection","setIsAddingNewSection","newSectionName","setNewSectionName","isProcessingBulkMove","setIsProcessingBulkMove","sourceSectionIndex","prePopulatedProductNumbers","productsAcc","getPrePopulatedProducts","selectedQuoteProductIdsMap","handleDeleteProductNumber","restrictToBoundingRect","restrictToParentElement","restrictToVerticalAxis","sectionsContainer","SortBySectionDialog","sectionsInPages","tempSections","setTempSections","_page","BulkCopyDialog","isProcessingBulkCopy","setIsProcessingBulkCopy","BulkTemplateUpdateDialog","quoteSectionTemplates","setSelectedTemplate","templateOptions","DebouncedTextField","stateValue","setStateValue","debouncedOnChange","handleOnChange","inputPropsWithCount","localAnchorEl","setLocalAnchorEl","currentMenuContent","setCurrentMenuContent","keepOpen","sectionEnd","menuItemProps","_menuContent","ListItemSecondaryAction","ChevronRight","SectionsMenu_","menuContent2","SectionsMenu","_ExpandIcon","ExpandIcon","SvgRequestPage","FEEDBACK_VALUES","importedPriceLink","_CellThing","focusCellRef","setCellRef","_setUpdateValues","_onBlurUpdateValues","templateIndex","cellId","parseInput","displayPoaTag","isUpdated","isUpdatedByRate","appliedConversion","importedPricingResponse","isDirty","setShow","width_","multiValueCorrection","cellRef","CellThing","productInfoBar","productInfoIcon","productInfoLabel","productInfoValue","bodyCell","importPricingAction","fromCell","expandButton","expandedContent","expandedLabel","expandedValue","noBorderBottom","expandedRow","expandCellBody","expandedCollapseCell","colExpand","colPricingRequestNumber","colFrom","colSupplierProductNumber","colValue","colAction","importAllButton","PricingComparisonRow","onImportPricing","PricingComparison","pricingGroups","sectionProducts","isAiIdentifiedProduct","specProductNumber","specProductBrand","ActionCell_","openSubMenu","hasAiCreateXrefRole","isStandaloneProduct","positiveNegativeValue","linkedState","isCompleteRow","linkUnlinkDisable","disabledS2QFeature","isVendorPlaceholderProduct","pricingComparisonOpen","setPricingComparisonOpen","importBidResponseProductIds","setImportBidResponseProductIds","hasPricingComparison","handleThumbUpOrDown","feedbackMap","feedbacks","NEGATIVE","linkedToFirmProductId","isFirmProductLinkedToAtsProduct","firmProductIsPackage","enableAddAiXrefButton","actionItems","CompareArrows","ShuffleRounded","xrefModalOpened","Widgets","productConfiguratorModal","configuratorOpened","NearMe","fromSection","toSection","CancelOutlined","POSITIVE","Height","RowThing_","pushRef","displayIndex","AIProduct","openPdfModal","sectionTemplateFieldsData","setTest","isInitialMount","updateValues","isAI","applyRoundingRef","_test","_updatedValues","parsedFields","regionWithPricing","isFirmProductPoaAtRegionAndCurrency","keyValueList","_templateCells","handleExpand","setLabel","onChangeDescription","onChangeAIProductNote","attachLabel","toggleVendorPlaceholderProduct","quickEntryProps","rowRefs","labelRef","acProduct","productIsDiscontinued","ImageCell","RemoveCircle","RemoveCircleOutline","RowThing","PresentationalRowThing_","setLabelColumnMemo","setProductPlaceholder","productplaceholder","PresentationalRowThing","TestComp_","sectionToFocus","sectionStartingIndices","allSections","startingIndices","cumulativeIndex","useSectionStartingIndices","startingProductIndex","subMenuAnchorEl","setSubMenuAnchorEl","subMenuContent","setSubMenuContent","maxLengthWarn","setMaxLengthWarn","sectionRef","sectionTitleRef","pdfModalProduct","setPdfModalProduct","togglePdfModal","hasSectionTemplateRemapAcl","specToQuoteSectionNote","productsVisibleCount","includedCount","excludedCount","visibleProductIndices","visibleIndex","actualIndex","isSectionUpdated","allIsRequestingProduct","toggleRequestProduct","handleOnChangeSectionTitle","newStr","templateMenuContent","sectionsMenuSetAnchorEl","focusRef","isNavigation","handleExpandAll","onChangeSpecToQuoteSectionNote","expandedProductsInSection","shouldExcludeSection","scrollMarginTop","TestComp","AddSection_","setHover","AddSection","usePaginationStyles","Pagination_","setCurrentPage","statePage","setStatePage","onlyOnePage","onPageChange","alert","Pagination","SectionListEdit","oldProps","shouldRecalculateGrandTotals","currentSectionIndex","currentRowIndex","cellToFocus","loadingBarOpen","openSortByManufacturerDialog","sortDialogLoading","hasLoggedS2QLoadingTime","selectedFirmPackageOrProduct","itemIdToDelete","maxProducts","openVendorQuotationsModal","showViewBidInvitationResponseButton","productViewAnchorEl","openDeleteSelectedProductsDialog","isDeletingSelecetedProducts","openBulkEditDialog","openBulkMoveDialog","openBulkCopyDialog","openSortBySectionDialog","openBulkTemplateUpdateDialog","paginationRef","setShowAISpecInfo","isEdit","setupResizeObserver","bOverlapC","handleCloseSnackbar","handleSortByManufacturer","specToQuoteSort","toggleAllIsRequestingProduct","handleOnShowAIProductAndImage","onCloseVendorQuoteModal","handleToggleBulkEditDialog","handleToggleBulkMoveDialog","handleToggleBulkCopyDialog","handleToggleSortBySectionDialog","handleToggleBulkTemplateUpdateModal","fetchBidInvitationResponse","fetchHistoryImportedPricing","addNewSection","getCurrencyConversions","conversionDate","hasCurrencyConversionAclRole","formSectionsSize","focusingSection","productListRef","importedPricesForm","isLoadingSpecToQuoteLinkedList","isFinishLoading","loadingTime","targetPage","sectionsInPage","savedImportedPrices","isUpdatePricingLoading","isProductSelectedCount","isSelectedValidProductCount","noSections","Cancel","sortTooltip","updateOnlySelectedProducts","sortLoadingProgress","addSectionButton","stickyProductTitle","showSpecSelect","urlParams","disabledSpecToQuote","addItem","moveItem","quickSearchFirmPackages","setMaxProductsPerPage","setFocusingSection","DnDMenu","_theme","focusedSectionIndex","onMenuOpenScrollHereRef","activeSpecProductId","activeSpecProduct","activeSpecProductNumber","disableAutoFocus","disableRestoreFocus","menuIndex","selectedContactLoaded","searchString","currentFocusComponentIndex","constructedInitialManufacturerDiscountsMap","quoteSelectedContactId","hasFetchedDiscountPriority","hasAlreadyFetchedManufacturerDiscounts","selectedDetailedManufacturerDiscounts","selectedManufacturerDiscounts","initialSelectedManufacturerDiscountsInitialized","onCustomerCardClick","selectedContactId","onSearchChange","abc","onResetColumn","selectContact","ignoredProps","loadingCustomerDiscount","QuoteDiscountsTabs","ScrollTop","toggleSnackbar","editTooltip","deleteTooltip","ImageCreateApi","mediaId","msmedia","shareAction","IMPORT_PRODUCTS_FILE_FORM","ProductAndPackageList","preloadInMediaImage","firmProductsList","firmPackagesList","firmSeriesList","quickSearchedFirmPackagesList","checkingPackages","packageDrawerSuccess","productDrawerSuccess","isFetchingFirmPackages","isFetchingFirmSeries","productFilterFormValues","parentProductFilterFormValues","packageFilterFormValues","configFilterFormValues","isDownloadTemplateSuccess","isAddingOrUpdatingPricing","quoteConnectCurrency","PACKAGES","PARENT_PRODUCTS","preloadMainImageFileIds","firmPackage","packagesListModalOpen","productsColumns","updatedDateStart","updatedDateEnd","configuratorType","isExportModalOpen","excludedProducts","searchFirmPackages","searchFirmSeries","addNewConfiguratorClick","addNewConfiguratorClicked","bulkConfirmationModalOpen","onConfirmBulkAction","onExportButtonClick","onExportModalClose","onNextClick","isUpdatingPricing","isAddingNewPricing","onbackClick","onCancelClick","onSelectProduct","_deltasFirmProduct","firmProductsListCount","onSelectAllProduct","onClearFile","onApply","StepPages","firmProductsListHasNextPage","firmPackagesListHasNextPage","firmSeriesListHasNextPage","deleteFirmPackage","deleteFirmSeries","isImportingProducts","importProductsProgress","userOfficeInCanada","emptyProductsLabels","emptyParentProductsLabels","emptyPackagesLabels","emptyConfigsLabels","listConfig","displayFirmProducts","searching","DownloadTemplate","itemNameToDelete","itemToDeleteIsShareable","createMainImageFileId","updatedDelta","isBasicConfig","isAtsConfig","disabledAction","SeriesTypeCell","formatPrice","DUPLCIATE","addNewConfigurator","onLoadingFinish","Conflict","manufacturersModalOpen","categoriesModalOpen","usd","closePackagesListModal","closeQCProductModal","openQCEditModal","resolvedFileId","pendingCreatedFirmProducts","present","parentProductsColumns","packagesColumns","configsColumns","productsSearchTerm","parentProductsSearchTerm","packagesSearchTerm","configSearchTerm","productsFilters","parentProductsFilters","packagesFilters","configsFilters","filterUniqueKey","getFirmFieldsConfig","getCurrencyPreference","firmExportFieldsConfig","isDownloadingTemplate","isExportingProducts","InfoRounded","uploadButton","ExportFields","itemToDelete","bulkConfirmationModal","QCProductEditModal","isLoadingQuickSearchFirmPackages","importFile","QuoteContactsPreview","selectEntity","selectedEntity","officeUser","renderEntity","entities","cnt","displayText","contactLink","contactsLabel","linkStyles","contactsList","assignedToOfficeName","addressSegment","qCharge","qGrandTotal","qAmount","sectionsWithTemplateIssue","setSectionsWithTemplateIssue","handleSetSectionsWithTemplateIssue","RevisionItemContentClass","menuOpen","onDeleteButtonClick","handleDeleteRevision","onCopyButtonClick","handleCopyRevision","rev","hideActions","lockedQuoteIcon","unlockedQuoteIcons","projectLink","opportunityExists","opportunityExistsFetching","updateQuoteStatusToQuoted","prevOpportunityExistsFetching","validity","statusChangeConfirmationOpen","appliableQuotePhases","toggleStatusConfirmationOpen","confirmStatusAndOpportunityValuesUpdate","changeRevision","revisionId","deleteRevision","copyRevision","handleCreateRevision","onEnteredHandler","onExitedHandler","getRevisions","getQuotePhases","disableStatusForOSR","createRevisionItem","createNewRevision","canDisplayLockIcon","revisionContainer","revisionMenu","revisionRef","RevisionItemContent","halfCard","openSans","halfCardsContainer","DialogComponent","historyWrapper","CardActions","CardImage","CardContactInfo","contactInfoArr","LOCHINVAR_SUBMITTAL_FORM_NAME","formatContactName","Submittal","handleEditIcon","showAvatar","submittalSample","PUBLISH_DRAFT_TAB_TYPES","subdivisions","divisionFilterContainer","expansionPanelExapanded","expansionPanelSummaryContentExpanded","divisionMenu","divisionMenuListItem","displayAll","displayAllText","getSubdivisions","_categoryObject","categoryItem","categoryType","concatenatedDivision","categoryTypes","aName","bName","divisionIndex","typeIndex","duplicateAction","StatusCell","_handleDuplicate","duplicateProducts","DuplicateDialogProps","toggleDuplicateDialog","withProducts","setWithProducts","handleDuplicate","providedFilters","excludeGeneric","PimSeriesListPage","DRAFT","searchedSeries","draftColumns","publishColumns","publishStatusColumnIndex","handleAddSeries","draftFiltersFormValues","publishFiltersFormValues","PUBLISH","handleSeriesDraftDelete","handleEditSeries","redirectToEdit","redirectOnSuccess","useSourceSeriesSkipAttributes","handleDeleteSeries","handleDuplicateSeries","_orderBy","sortList","publishSearchTerm","draftSearchTerm","publishFilters","draftFilters","seriesListFilterUniqueKey","getpimStatuses","getTestStatuses","publishColumnsList","draftColumnsList","PIM_PUBLISH_LIST_COLUMNS","PIM_DRAFT_LIST_COLUMNS","searchingSeries","seriesHasNextPage","isAddingDraft","hasPimIntegrationRole","detailPath","tableOverallContainer","contentWrapper","contentSubWrapper","emptySeriesList","PublishDialog","createTypeContainer","createTypeText","NestedSubMenu","savedTarget","handleSubMenuClose","anchorHorizontal","transformHorizontal","subMenuItem","openSubMenuIcon","subMenuContainer","subMenuProjectsContainer","NestedMenu","pendingIndex","unmounted","disableHover","withProgress","customProps","settle","newProjectContainer","itemProgress","SettingsMenu","refMenu","refContent","menuWidth","widthListener","toggleSideMenu","sideMenu","noWordBreak","disablePointerEvents","ev","settingHeaderLabel","hideInMenu","listItemProps","closedMenuSelectedItem","buttonRipple","checkIfActiveRoute","linkItemTextContainer","linkItemText","settingContent","settingContentLayer","errorBoundaryContainer","NotFoundPage","ProjectSelector","controlledOnChange","elProjectId","disabledContainer","LocalTypographyProps","TypographyProps","styleOverride","statusMap","camelizedPhase","prepareEvent","normalizeDepth","normalizeMaxBreadth","prepared","maxValueLength","applyClientOptions","integrationNames","sdk","applyIntegrationsMetadata","stackParser","debugIdStackFramesCache","debugIdMap","_sentryDebugIds","cachedDebugIdStackFrameCache","debugIdStackParserCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","stacktrace","debug_id","applyDebugIds","finalScope","getFinalScope","mechanism","clientEventProcessors","getEventProcessors","isolationData","finalScopeData","abs_path","debug_meta","code_file","applyDebugMeta","maxBreadth","spans","normalizeEvent","parseEventHintOrCaptureContext","hintIsScopeOrFunction","captureContextKeys","hintIsScopeContext","serviceKey","isGatewayRelative","hasSymbol","mobileStepper","snackbar","RadioGroupContext","installedModules","__webpack_require__","nil","div0","flattenShallow","aIsArray","bIsArray","argsToArray","possibleNumbers","cleanFloat","power","parseBool","parseNumber","parseNumberArray","parseMatrix","pnarr","d1900","parseDateArray","anyIsError","arrayValuesToNumbers","isValidStrict","ERROR_DIV_ZERO","ERROR_NAME","ERROR_NOT_AVAILABLE","ERROR_NULL","ERROR_NUM","ERROR_REF","ERROR_VALUE","invertNumber","statistical","information","evalExpression","ABS","ACOS","ACOSH","ACOT","atan","ACOTH","AGGREGATE","function_num","ref1","ref2","AVERAGE","COUNT","COUNTA","MAX","MIN","STDEV","SUM","VAR","MEDIAN","MODE","SNGL","LARGE","SMALL","PERCENTILE","INC","QUARTILE","EXC","ARABIC","CM","CD","XC","XL","IX","IV","ASIN","asin","ASINH","ATAN","ATAN2","number_x","number_y","ATANH","BASE","min_length","CEILING","significance","ROUND","MATH","PRECISE","COMBIN","number_chosen","FACT","COMBINA","COS","COSH","COT","COTH","e2","CSC","CSCH","DECIMAL","DEGREES","EXP","MEMOIZED_FACT","FACTDOUBLE","FLOOR","GCD","INT","ISO","LCM","LN","LN10","LN2","LOG10E","LOG2E","LOG","LOG10","MOD","modulus","MROUND","MULTINOMIAL","POWER","QUOTIENT","numerator","denominator","RADIANS","RAND","RANDBETWEEN","ROMAN","roman","ROUNDDOWN","ROUNDUP","SEC","SECH","SERIESSUM","coefficients","SIGN","SIN","SINH","SQRT","SQRTPI","SQRT1_2","SQRT2","SUBTOTAL","function_code","num1","num2","MINUS","DIVIDE","MULTIPLY","factor1","factor2","GTE","LTE","EQ","value1","value2","NE","POW","exponent","SUMIF","isWildcard","tokenizedCriteria","createToken","TOKEN_TYPE_LITERAL","compute","SUMIFS","n_range_elements","criteriaLength","isMeetCondition","computedResult","SUMPRODUCT","_ij","SUMSQ","ISNUMBER","SUMX2MY2","array_x","array_y","SUMX2PY2","SUMXMY2","TAN","TANH","TRUNC","mathTrig","jStat","AVEDEV","AVERAGEA","AVERAGEIF","average_range","average_count","AVERAGEIFS","average","BETA","DIST","cumulative","cdf","INV","probability","BINOM","successes","trials","binomial","RANGE","successes2","CHISQ","chisquare","observed","dof","xsqr","Pi","ChiSq","COLUMN","COLUMNS","CONFIDENCE","NORM","sd","normalci","tci","CORREL","corrcoeff","COUNTBLANK","COUNTIN","blanks","COUNTIF","COUNTIFS","COUNTUNIQUE","UNIQUE","COVARIANCE","mean1","mean2","covariance","DEVSQ","EXPON","lambda","exponential","centralF","sumOfSquares","FISHER","FISHERINV","e2y","FORECAST","data_y","data_x","xmean","ymean","den","FREQUENCY","bins","GAMMA","gammafn","gamma","GAMMALN","gammaln","GAUSS","normal","GEOMEAN","geomean","GROWTH","known_y","known_x","new_x","use_const","avg_x","avg_y","avg_xy","avg_xx","new_y","HARMEAN","HYPGEOM","INTERCEPT","KURT","sigma","stdev","LINEST","LOGEST","LOGNORM","lognormal","MAXA","median","MINA","MULT","currentItem","maxItems","NEGBINOM","negbin","PEARSON","den1","den2","fl","PERCENTRANK","uniques","PERMUT","PERMUTATIONA","PHI","POISSON","poisson","PROB","quart","RANK","AVG","ROW","ROWS","RSQ","SKEW","SLOPE","STANDARDIZE","STDEVA","VARA","STDEVPA","VARPA","STEYX","lft","TRANSPOSE","df","studentt","mean_x","mean_y","s_x","s_y","TREND","new_data_x","linest","TRIMMEAN","WEIBULL","BAHTTEXT","CHAR","CLEAN","CODE","CONCATENATE","trueFound","falseFound","DBCS","DOLLAR","EXACT","text1","text2","FIND","find_text","within_text","FIXED","HTML2TEXT","LEN","LOWER","MID","NUMBERVALUE","decimal_separator","group_separator","PRONETIC","txt","REGEXEXTRACT","regular_expression","REGEXMATCH","full","REGEXREPLACE","new_text","REPT","SEARCH","foundAt","SPLIT","SUBSTITUTE","old_text","occurrence","TRIM","UNICHAR","UNICODE","UPPER","VALUE","validSymbols","TOKEN_TYPE_OPERATOR","SUPPORTED_TOKENS","analyzeTokens","literalValue","analyzedTokens","castValueToCorrectType","expressionLength","processedSymbol","tokenizeExpression","CELL","error_val","INFO","ISBLANK","ISBINARY","ISERR","ISERROR","ISEVEN","ISFORMULA","ISLOGICAL","ISNA","ISNONTEXT","ISODD","ISREF","ISTEXT","NA","SHEET","SHEETS","WEEK_STARTS","WEEK_TYPES","WEEKEND_TYPES","daysBetween","start_date","end_date","serial","addOn","DATEVALUE","date_text","DAY","serial_number","DAYS","DAYS360","ed","em","smd","emd","EDATE","EOMONTH","ISOWEEKNUM","setDate","yearStart","NETWORKDAYS","holidays","INTL","weekend","dec","holiday","NOW","TIMEVALUE","time_text","return_type","WEEKNUM","week_start","jan","inc","WORKDAY","YEARFRAC","basis","ey","ylength","date1","date2","year1","mar1year1","year2","mar1year2","feb29Between","calcRdx","toVector","retZero","retOne","retIdent","rowa","submat","arange","cola","diag","nrow","antidiag","objArr","toAlter","ncol","cumreduce","alter","zeros","ones","symmetric","hival","rl","_slice","rcSlice","colSlice","rowSlice","sliceAssign","nl","diagonal","diagArray","mat","jProto","passfunc","ascNum","sumsqrd","sumsqerr","sumrow","meansqerr","arrlen","cumsum","cumprod","ranks","maxCount","numMaxCount","mode_arr","variance","pooledvariance","samples","deviation","dev","pooledstdev","meandev","meddev","coeffvar","quartiles","quantiles","quantilesArray","alphap","betap","aleph","sortedArray","quantileVals","percentile","realIndex","frac","percentileOfScore","histogram","binCnt","binWidth","arr1Len","sq_dev","spearmancoeff","stanMoment","mu","skewSum","skewness","kurtosis","fullbool","tmpthis","argsToPass","curriedFunction","xx","ser","yi","fact","xden","xnum","gammap","lowRegGamma","an","aln","ITMAX","factorialln","factorial","combination","combinationln","permutation","betafn","betaln","betacf","fpmin","qab","qap","qam","gammapinv","lna1","afac","a1","EPS","gln","erf","isneg","erfc","erfcinv","ibetainv","lna","lnb","ibeta","bt","randn","randg","a2","oalph","laplaceSign","tukeyWprob","rr","nleg","ihalf","C1","C2","C3","wlar","wincr1","wincr2","xleg","aleg","qsqz","wincr","pr_w","blb","binc","bub","einsum","cc1","wi","elsum","qexpo","rinsum","tukeyQinv","q0","q4","c4","c5","vmax","newthis","fnfunc","df1","df2","cauchy","rate","invgamma","kumaraswamy","noncentralt","ncp","tol","min_iterations","prob","lastvalue","std","pareto","dof2","weibull","uniform","binomarr","hypgeom","scaledPDF","samplesDone","scaledCDF","sumarr","triangular","arcsine","laplace","tukey","nmeans","nlegq","ihalfq","eps1","eps2","dhaf","dquar","deigh","dlarg","ulen1","ulen2","ulen3","ulen4","xlegq","alegq","ulen","f2","f2lf","f21","ff4","ans","otsum","twa1","eps","maxiter","valx0","valx1","isUsable","nrescols","rescols","norm","nnorm","aug","newarr","gauss_jordan","det","alen","alend","rowshift","colshift","mrow","mcol","gauss_elimination","maug","pivot","maxrow","triaUpSolve","matrix_mode","triaLowSolve","cholesky","gauss_jacobi","xv","xk","gauss_seidel","SOR","householder","QR","qr2","lstsq","R_I","Aj","cAi","Ij","cIi","qr_solve","array_mode","Q1","RI","Q2","jacobi","maxim","theta","rungekutta","t_j","u_j","k1","k2","k3","romberg","richardson","h_min","simpson","hermite","dF","lagrange","cubic_spline","sq","gauss_quadrature","PCA","temp1","temp2","Bt","Vt","differenceOfProportions","n2","pooled","zscore","ztest","sides","tscore","ttest","anovafscore","expVar","sampMean","sampSampMean","tmpargs","unexpVar","anovaftest","ftest","fscore","anovaftes","qscore","qtest","tukeyhsd","means","significant","pvalue","oneSidedDifferenceOfProportions","twoSidedDifferenceOfProportions","models","sub_regress","endog","exog","ols","var_count","endog_index","exog_index","nobs","df_model","df_resid","coef","predict","resid","ybar","SSE","SST","R2","t_test","subModelList","sigmaHat","seBetaHat","tStatistic","pValue","leftppf","interval95","se","F_test","F_statistic","ols_wrap","adjust_R2","hasElement","FLATTEN","ARGS2ARRAY","REFERENCE","opening","NUMBERS","bessel","isValidBinaryNumber","BESSELI","besseli","BESSELJ","besselj","BESSELK","besselk","BESSELY","bessely","BIN2DEC","BIN2HEX","places","BIN2OCT","BITAND","number1","number2","BITLSHIFT","BITOR","BITRSHIFT","BITXOR","COMPLEX","imaginary","CONVERT","from_unit","to_unit","binary_prefixes","Yi","Zi","Ei","Ti","Gi","Mi","ki","unit_prefixes","base_from_unit","base_to_unit","from_multiplier","to_multiplier","from_binary_prefix","from_unit_prefix","to_binary_prefix","to_unit_prefix","DEC2BIN","DEC2HEX","DEC2OCT","DELTA","ERF","lower_bound","upper_bound","ERFC","GESTEP","HEX2BIN","negative","HEX2DEC","HEX2OCT","IMABS","inumber","IMREAL","IMAGINARY","plus","minus","IMARGUMENT","IMCONJUGATE","IMCOS","IMCOSH","IMCOT","IMDIV","IMSIN","inumber1","inumber2","unit1","unit2","IMEXP","IMLN","IMLOG10","IMLOG2","IMPOWER","IMPRODUCT","IMSEC","IMSECH","IMSINH","IMSQRT","IMCSC","IMCSCH","IMSUB","IMSUM","IMTAN","OCT2BIN","OCT2DEC","OCT2HEX","rowLabelToIndex","rowIndexToLabel","columnLabelToIndex","columnIndexToLabel","extractLabel","LABEL_EXTRACT_REGEXP","_label$toUpperCase$ma","columnAbs","rowAbs","toLabel","rowLabel","COLUMN_LABEL_BASE","COLUMN_LABEL_BASE_LENGTH","Parser","SUPPORTED_FORMULAS","_parser2","_supportedFormulas2","_error2","_cell","_tinyEmitter2","_evaluateByOperator2","_grammarParser","_string","_number","_Emitter","trimEdges","throwError","errorName","_throwError","callVariable","_callVariable","evaluateByOperator","callFunction","_callFunction","cellValue","_callCellValue","_callRangeValue","variables","getVariable","setFunction","getFunction","_extractLabel","startLabel","endLabel","_extractLabel2","startRow","startColumn","_extractLabel3","endRow","endColumn","startCell","endCell","evtArr","evts","liveEvents","availableOperators","registerOperation","_add2","_ampersand2","_divide2","_equal2","_formulaFunction2","_greaterThan2","_greaterThanOrEqual2","_lessThan2","_lessThanOrEqual2","_minus2","_multiply2","_notEqual2","_power2","isFactory","SYMBOL","exp1","exp2","formulajs","_supportedFormulas","symbolParts","foundFormula","nestedFormula","engineering","BETADIST","BETAINV","BINOMDIST","ISOCEILING","CEILINGMATH","CEILINGPRECISE","CHIDIST","CHIDISTRT","CHIINV","CHIINVRT","CHITEST","COVAR","COVARIANCEP","COVARIANCES","CRITBINOM","EXPONDIST","ERFCPRECISE","ERFPRECISE","FDIST","FDISTRT","FINVRT","FINV","FLOORMATH","FLOORPRECISE","FTEST","GAMMADIST","GAMMAINV","GAMMALNPRECISE","HYPGEOMDIST","LOGINV","LOGNORMINV","LOGNORMDIST","MODEMULT","MODESNGL","NEGBINOMDIST","NETWORKDAYSINTL","NORMDIST","NORMINV","NORMSDIST","NORMSINV","PERCENTILEEXC","PERCENTILEINC","PERCENTRANKEXC","PERCENTRANKINC","POISSONDIST","QUARTILEEXC","QUARTILEINC","RANKAVG","RANKEQ","SKEWP","STDEVP","STDEVS","TDIST","TDISTRT","TINV","TTEST","VARP","VARS","WEIBULLDIST","WORKDAYINTL","ZTEST","_horner","_bessel_iter","f0","f1","tdx","_bessel_wrap","bessel0","bessel1","nonzero","b0_a1a","b0_a2a","b0_a1b","b0_a2b","b1_a1a","b1_a2a","b1_a1b","b1_a2b","jsum","bjp","bj","bjm","tox","b0_a","b0_b","b1_a","b1_b","bip","bi","maths","findResultIndex","database","maxCriteriaLength","currentCriteriaResult","hasMatchingCriteria","criteriaField","FINDFIELD","DAVERAGE","resultIndexes","targetFields","DCOUNT","targetValues","DCOUNTA","DGET","DMAX","maxValue","DMIN","minValue","DPRODUCT","DSTDEV","DSTDEVP","DSUM","DVAR","DVARP","AND","CHOOSE","FALSE","IF","then_value","otherwise_value","IFERROR","valueIfError","IFNA","value_if_na","NOT","logical","OR","TRUE","XOR","SWITCH","targetValue","argc","switchCount","switchSatisfied","hasDefaultClause","defaultClause","ensureDate","ACCRINT","issue","settlement","par","ACCRINTM","AMORDEGRC","AMORLINC","COUPDAYBS","COUPDAYS","COUPDAYSNC","COUPNCD","COUPNUM","COUPPCD","CUMIPMT","payment","PMT","interest","FV","CUMPRINC","principal","DB","salvage","life","ceiling","DDB","DISC","DOLLARDE","dollar","fraction","DOLLARFR","DURATION","EFFECT","FVSCHEDULE","INTRATE","IPMT","IRR","guess","irrResult","irrResultDeriv","positive","newRate","epsRate","resultValue","resultRate","contLoop","ISPMT","MDURATION","MIRR","finance_rate","reinvest_rate","payments","incomes","NPV","NOMINAL","NPER","ODDFPRICE","ODDFYIELD","ODDLPRICE","ODDLYIELD","PDURATION","PPMT","PRICE","PRICEDISC","PRICEMAT","RATE","epsMax","RECEIVED","RRI","SLN","SYD","TBILLEQ","maturity","TBILLPRICE","TBILLYIELD","VDB","XNPV","YIELD","YIELDDISC","YIELDMAT","lookupValue","lookupArray","matchType","indexValue","VLOOKUP","needle","rangeLookup","HLOOKUP","transposedTable","grammarParser","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","defaultActions","parseError","recoverable","vstack","lstack","recovering","TERROR","EOF","lexer","sharedState","setInput","yylloc","yyloc","ranges","popStack","preErrorSymbol","lex","yyval","error_rule_depth","locateNearestErrorRecoveryRule","stack_probe","errStr","showPosition","first_line","last_line","first_column","last_column","_input","_more","_backtrack","conditionStack","unput","oldLines","backtrack_lexer","less","pastInput","upcomingInput","test_match","indexed_rule","backup","tempMatch","_currentRules","conditions","topState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","unitlessKeys","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","WebkitLineClamp","isSpeedy","ctr","_tag","createStyleElement","styleSheets","ownerNode","sheetForTag","isImportRule","defaultInputValue","defaultMenuIsOpen","StateManager","getProp","toggleHeader","paperProps","ExpansionPanelContext","reTrim","clipboard","writeText","copyWithCopyCommand","previousFocus","execCommand","xrefSelectedAction","onProductSelected","seriess","tableCellImage","menuItemDetails","menuItemType","DrawerExpandButton","attachEvent","requestFrame","cancelFrame","resetTriggers","triggers","__resizeTriggers__","contract","lastElementChild","expandChild","__resizeRAF__","__resizeLast__","checkTriggers","__resizeListeners__","keyframeprefix","animationstartevent","domPrefixes","startEvents","animationName","animationKeyframes","animationStyle","elementStyle","cssText","__animationListener__","detachEvent","failedUploadFromUrl","showInitialUsers","initSearchTerm","setInitSearchTerm","paperToggleProps","paperToggle","paperToggleChecked","paperToggleLabel","onPaperToggleChange","inputTooltip","inputTooltipPlacement","inputTooltipClasses","tooltipBottom","recommendedAttr","optionHoverStyle","isSearchingAttributeOptions","OptionFieldsProps","valueOnChange","categoryOptions","manufacturerOptions","isLocked","productNumberDialogRoot","topControlContainer","zoomControlContainer","controlRoot","topControlIcon","zoomControlIcon","imgRef","zoomFactor","setZoomFactor","isPanning","setPanning","oldX","oldY","getSrc","ControlIcon","Icon","topControl","lightGrey","darkGrey","contrastThreshold","tonalOffset","level2","level1","isNewUser","fiatPrierGreyBackground","useAppConfig","customPortalGraphic","customPortalGraphicSize","customPortalGraphicURL","defaultPortalGraphic","portalGraphic","propsMap","smDown","setIsDropDisabled","CATEGORIES_WITH_SCHEDULE_OBJECT","useDownloadView","selectLochinvarData","selectSubmittalData","SUBMITTAL_FORM_NAME","selectProductBrochureData","PRODUCT_BROCHURE_FORM_NAME","selectScheduleData","SCHEDULE_FORM_NAME","selectLongSpecData","LONG_SPEC_FORM_NAME","selectShortSpecData","SHORT_SPEC_FORM_NAME","selectManufacturerCutsheetData","MANUFACTURER_CUTSHEET_FORM_NAME","selectBobrickCSIMasterSpecData","selectBobrickPlanningGuideData","selectCSIData","CSI_FORMATTED_SPECS_FORM_NAME","selectQuotePrintFormatData","lochinvarSubmittalData","bobrickCSIMasterSpec","CSIData","quotePrintFormatData","useDownloadViewData","isLoggedInUser","isBobrick","isNuAir","hasNuAirSmallIndependentAcl","enableNuAirQuotePrint","hasProductInScheduleCategory","hasProductWithMediaFile","hasProductWithRevit","hasProductWithAutoCad","isProjectLevel","requiredFields","isAdditionalFormat","setFormats","useLixirSpecBookletStyles","usePreparingDownloadStyle","readyToGo","chosenDownloads","PreparingDownload","useDownloadReadyStyle","DownloadReady","ErrorPrinting","handleRetry","LixirSpecBooklet","setIsLoading","formValuesSelector","selectedLixilPrintGroups","disableDownload","specPrintError","lastStatus","invalidKeys","brandingPagesArray","backCoverPagesArray","onClickDownload","rowSizeBase","colSizeBase","edgeBase","topRight","bottomLeft","Resizer","onResizeStart","replaceStyles","_jsx","DEFAULT_SIZE","gridGap","hasDirection","findClosestSnap","snapArray","snapGap","closestGapIndex","getStringSize","getPixelSize","parentSize","definedProps","baseClassName","Resizable","resizable","parentLeft","parentTop","resizableLeft","resizableRight","resizableTop","resizableBottom","targetLeft","targetTop","appendBase","removeBase","isResizing","propsSize","defaultSize","orgWidth","orgHeight","orgPosition","getParentSize","wrapChanged","unbindEvents","createSizeForCssProperty","calculateNewMaxFromBoundary","boundWidth","boundHeight","boundsByDirection","widthByDirection","heightByDirection","parent_1","calculateNewSizeFromDirection","resizeRatio","resizeRatioX","resizeRatioY","lockAspectRatio","lockAspectRatioExtraHeight","lockAspectRatioExtraWidth","extraHeight","calculateNewSizeFromAspectRatio","computedMinWidth","computedMaxWidth","computedMinHeight","computedMaxHeight","extraMinWidth","extraMaxWidth","extraMinHeight","extraMaxHeight","lockedMinWidth","lockedMaxWidth","lockedMinHeight","lockedMaxHeight","setBoundingClientRect","adjustedScale","parent_2","top_1","parent_3","flexDir","TouchEvent","calculateNewMax","boundaryMax","newGridWidth","newGridHeight","vw","vh","widthChanged","heightChanged","flexBaseChanged","flushSync","onResizeStop","updateSize","renderResizer","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","handleComponent","resizers","extendsProps","sizeStyle","_jsxs","resizableStyle","Rnd","resizingPosition","offsetFromParent","resizableElement","originalPosition","resizing","onDrag","onDragStop","getMaxSizesFromProps","updateOffsetFromParent","getDraggablePosition","getParent","getSelfElement","getOffsetHeight","getOffsetWidth","parentRect_1","parentLeft_1","parentTop_1","bodyRect","left_1","parentRect_2","parentLeft_2","parentTop_2","left_2","top_2","boundaryRect","boundaryLeft","boundaryTop","dragAxis","elementRef","self_1","selfRect","selfLeft","selfTop","hasLeft","hasRight","hasTop","hasBottom","newPos","draggableState","disableDragging","dragHandleClassName","dragGrid","enableUserSelectHack","resizeHandleStyles","resizeHandleClasses","resizeHandleComponent","enableResizing","resizeGrid","resizeHandleWrapperClass","resizeHandleWrapperStyle","allowAnyClick","dragPositionOffset","resizableProps","draggablePosition","cursorStyle","dragAxisOrUndefined","Draggable","defaultPosition","onStop","positionOffset","SHAPE_PATHS","star","arrowBack","arrowUp","arrowForward","DEFAULT_RECTANGLE_COLOR","DEFAULT_SHAPE_COLOR","DEFAULT_SHAPE_KIND","DEFAULT_TEXT_COLOR","DEFAULT_STRIKETHROUGH_COLOR","DEFAULT_UNDERLINE_COLOR","DEFAULT_DRAW_COLOR","getViewerScale","PdfViewer","genId","parseHexColor","hexToRgba","pointsToSvgPath","clearMouseSelection","toolGroup","toolGroupSelected","toolGroupLast","activeBtn","tools","sizeInput","strokeSliderWrap","strokeSizeValue","dropdownCaret","toolSettingsPopover","toolSettingsRow","zoomSlider","pageInput","viewerContainer","rectangleColor","mixBlendMode","areaShape","hideSelectionBackground","borderImage","contain","viewerContainerPointer","viewerContainerDraw","sidebar","productItemSelected","productHeader","objectFit","productMetaText","fileSection","fileSectionSelected","fileSectionLabel","fileNameText","confirmDialogPaper","confirmDialogContent","confirmCloseIcon","confirmText","confirmActions","confirmSaveButton","OverlayLayer","overlays","editingTextId","setEditingTextId","setOverlays","pdfScale","isSelectionMode","selectedOverlayId","onSelectOverlay","layerEl","setLayerEl","pollTimer","rafScheduled","triggerUpdate","pdfViewerEl","sc","layerRect","ov","pageEl","pageRect","baseLeft","xPct","baseTop","yPct","sizeRatio","drawScale","shapeSize","shapeKind","shapeColor","textFontSize","onPointerDown","annotationText","pageLeft","getPointsBounds","DrawLayer","containerRef","onCommit","liveStrokeRef","colorRef","strokeWidthRef","onCommitRef","containerEl","rafId","scheduleRender","toPagePoint","MIN_POINT_DISTANCE_PX","live","displayRectToPdf","Dleft","Dtop","Dw","Dh","rawW","rawH","displayPointToPdf","Dx","Dy","generateAnnotatedPdf","PDFDocument","pdfDoc","hl","getRotation","isRotated90","dispW","dispH","areaColor","highlightColor","drawEllipse","xScale","yScale","borderOpacity","drawRectangle","drawAnnotRect","isUnderline","lineH","Px","Py","pushOperators","pushGraphicsState","rotateDegrees","gc","drawSvgPath","drawText","LineJoinStyle","Round","borderLineCap","LineCapStyle","blendMode","BlendMode","popGraphicsState","ANNOTATION_COLOR_PRESETS","SHAPE_ICONS","AREA_SHAPE_ICONS","ellipse","initialSelectedIndex","setRectangleColor","setAreaShape","activeTool","setActiveTool","hideTitle","setHideTitle","childrenSum","padX","statePdfProducts","setStatePdfProducts","pdfBlobUrl","setPdfBlobUrl","selectedPdfProduct","originalFileSrc","settingsAnchor","setSettingsAnchor","setShapeSize","setShapeColor","setShapeKind","setTextColor","setTextFontSize","strikethroughColor","setStrikethroughColor","underlineColor","setUnderlineColor","drawColor","setDrawColor","drawStrokeWidth","setDrawStrokeWidth","selectionPreviewRects","setSelectionPreviewRects","selectedItemId","setSelectedItemId","setAnnotations","zoomValue","setZoomValue","committedZoom","setCommittedZoom","initialZoomSet","pendingTargetPage","activeToolRef","selectedItemIdRef","rectangleColorRef","areaShapeRef","shapeSizeRef","shapeColorRef","shapeKindRef","textColorRef","textFontSizeRef","strikethroughColorRef","underlineColorRef","annotationsRef","overlaysRef","scrollViewerTo","hideTipRef","isMouseDownRef","pendingAnnotationRef","lastAddedIdRef","pdfHighlighterRef","viewerContainerRef","undoStackRef","onCapturePointerDown","hit","commitPending","getSelection","removeAllRanges","pendingActionRef","switchToIndex","handleSelectProduct","setConfirmCloseOpen","handleUndo","lastType","commitTextSelection","inst","sel","rangeCount","getRangeAt","allClientRects","getClientRects","firstRect","probeX","probeY","probeEl","elementFromPoint","startPage","pr","minLeft","minTop","maxRight","maxBottom","viewportPosition","scaledPosition","viewportPositionToScaled","colorByTool","strikethrough","newHl","emoji","debouncedAfterSelection","commonAncestorContainer","afterSelection","pdfLoaded","fitZoom","totalPages","setTotalPages","pageInputValue","setPageInputValue","initTimer","updatePage","textLayerListener","patchPage","handlePageInputCommit","generateAnnotatedPdfBytes","handleUploadAndUpdate","pdfBytes","uploadedFileId","confirmCloseOpen","hasUnsavedAnnotations","handleBeforeUnload","handleAttemptClose","handleConfirmCancel","handleConfirmDontSave","handleConfirmSave","handleDownload","handleDeletePage","removePage","newBytes","zoomPct","getPageClickPosition","handleViewerMouseDown","handleViewerClick","handleDrawCommit","highlightsForRender","tooltipKey","onChangeCommitted","colorCfg","textAnnotation","sizeCfg","shapeOptions","areaShapeOptions","rgbaToHex","presetColors","disableAlpha","picker","productImageSrc","cutsheetFileName","shopDrawingFileSrc","beforeLoad","highlights","pdfScaleValue","enableAreaSelection","onScrollChange","scrollRef","onSelectionFinished","hideTipAndSelection","transformSelection","highlightTransform","setTip","hideTip","viewportToScaled","screenshot","isScrolledTo","outlineRadius","lineColor","SearchField","noTrailing","debounceMode","lastExec","clearExistingTimeout","elapsed","SpecMenu","currentSpec","handleSelect","drawingBoxStyle","skipDropAnimation","onPin","onClickOriginalProjectName","originalProjectName","isUpdating","numberOfSelectedDrawings","pinButtonTooltip","drawingDroppable","CollapseTableRow","ImportSelectedDrawingsBar","onImport","isBusy","barRef","overlayStyle","setOverlayStyle","barHeight","setBarHeight","barHeightRef","hiddenRef","appliedSignatureRef","measured","viewportBottom","visibleAboveBar","MIN_VISIBLE_PARENT_HEIGHT","signature","MasterTable","InfiniteScrollProps","onImportSelectedDrawings","drawingIdsUpdating","scrollableTarget","isLoadingSpecData","currentSpecData","selectedDrawingIds","hasSelectedDrawings","currentSpecId","currentDataId","pinDrawing","searchFieldContainer","LIMIT","MasterTab","mastersLoadingStatus","setSearchValue","debouncedFetchData","dataLength","TemplateTable","getBuildingTypeFilter","TemplateTab","isChildSpec","templatesLoadingStatus","TabContext","PinTab","useTabContext","setTabValue","selectedPinnedDrawingIds","specsLoadingStatus","pinnedDrawings","pinnedSpecDrawings","hasPinnedDrawing","MASTER_LIMIT","MasterAndTemplateDrawer","defaultTabValue","fetchInitialMasterData","fetchInitialTemplateData","fetchInitialPinData","RevitFiles","revitDownloadSample","AutoCadFilesBeta","cadSample","WattsCSIBeta","useLoadingScreenStyles","GridFileName","svgContainer","DownloadIcon","LoadingScreen","succeed","statusElement","groupHeader","groupChildRow","formatSelectButton","activeStyle","DownloadView","getRowChecked","getRowPartiallyChecked","getTriState","selectableItems","hasPartiallyCheckedRow","areAllFormatsSelected","setSelectionForKeys","renderHeaderCheckbox","renderFormatRow","isRowPartiallyChecked","activeFormat","selectBulkDownloadStatus","additionalFormats","areAllAdditionalSelected","isAdditionalIndeterminate","additionalDocumentsLabel","groupFormats","isGroupChecked","isGroupIndeterminate","LochinvarSubmittal","SubmittalBeta","ProductBrochureBeta","ScheduleBeta","LongSpecBeta","ShortSpecBeta","ManufacturerSpecSheetBeta","RevitFilesBeta","CSIFormattedSpecs","ProductsContainer","productCard","drawingCardContainer","drawingsContainer","actionButton","checkIsSelectingAll","isSelectingAll","initialDrawingIds","setSelectedDrawingIds","CardHeader","titleTypographyProps","toggled","selectAll","prevIds","selectTemplates","selectTemplateSpecs","selectSearchingGetTemplateSpecById","OPEN_MENU","CLOSE_MENU","menuStateReducer","menuId","isAllDrawingInTemplateSelected","isAtLeastOneDrawingInTemplateSelected","MItem","KeyboardArrowRight","TemplateSelectionTable","setSelectedDrawings","searchingTemplateSpecById","setModalId","dispatchMenuState","handleClickMenuItem","activeTemplate","disableClearSelectionButton","buildingTypeNames","newSelectedDrawings","specTitle","specDrawingIds","getMenuItems","templatesContainer","isLoadingSelector","templatesSelector","useLooseBuildingClassFilter","ContactCard","PROJECT_AND_TEST_PROJECT_LIST_TAB_VALUES","PROJECT_AND_TEST_PROJECT_LIST_FILTER_FORM","projectTabFormValues","testProjectTabFormValues","collaborated","projectFilterInitialized","setInitialized","userOffice","defaultFilters","testProjects","handleEditProject","ProjectAndTestProjectList","userHasAnyPimRole","defaultProjectListFilter","testProjectsColumns","projectsColumns","projectsFilters","testProjectsFilters","projectFilterMounted","projectsSearchTerm","testProjectsSearchTerm","testProjectColumnsList","SPEC_PROJECT_LIST_COLUMNS","SPEC_TEST_PROJECT_LIST_COLUMNS","emptyProjectsLabels","emptyTestProjectsLabels","speedDialActions","searchedProjectsSelect","searchedProjectsHasNextPageSelect","searchingProjectsSelect","userHasAnyPimRoleSelect","defaultProjectListFilterSelect","projectColumnsListSelect","testProjectColumnsListSelect","formsSelect","configAtsSvgPropsSelect","attributeOrder","openDeleteDialog","arrKey","nestedCell","nestedGrid","NestedCell","combinedMandatoryRecommendedAttributes","deleteDialogOpen","setDeleteDialogOpen","nameToDelete","setNameToDelete","keyToDelete","setKeyToDelete","formCategoryId","formFeatures","recommendedAttrKey","getSortedFeatures","sortableMap","unsortableMap","slicedSortedFeatures","setAttributeDialogState","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirst","cleanedLine","stripSentryFramesAndReverse","stackParserFromStackParserOptions","localStack","defaultFunctionName","searchLabel","discountCount","viewLink","detailTable","categoryChip","categoriesCell","textSecondaryCell","includedNotesSection","includedNotesTitle","noteRow","noteCheckbox","noteText","ManufacturerDiscountsTab","inputSearchTerm","setInputSearchTerm","viewDialogOpen","setViewDialogOpen","viewingManufacturer","setViewingManufacturer","labelA","labelB","selectedIds","createFilterOptions","handleViewClick","handleCloseViewDialog","newDetailedManufacturerDiscount","discountsToApply","handleSelectManufacturer","manufacturerDiscountGroup","manufacturerLabel","discountsToRemove","regionIndex","categoryChips","tabsContainer","setOpenColumnsDrawer","discountedValue","formattedDiscountedValue","displayedValue","displayedDiscountedValue","buildUserSearchFilters","setUserOptions","setInitialUsers","hasMany","setHasMany","buildFilters","sortedUsers","trimmed","createHasError","asyncErrors","submitErrors","getErrorKeys","createIsValid","getFormState","ignoreSubmitErrors","nonNullGetFormState","formState","TooltipButton","numOfProductsSelectionArray","handleClickCoverImage","includeDrawingLabel","productBrochureSample","cardListProps","cardRootProps","titleProps","cardProps","selectionNumber","radioContainer","cardSelected","numberOfValuesDefault","firstCoverImageId","numOfProducts","includePrice","chooseCoverImage","deleteBar","imageObj","displayMaximumUploadWarning","selectedCoverId","isCustom","isHover","setIsHover","coverId","defaultCoverId","uploadCoverDrawerOpen","cards","thumbnail","Schedule","isDeveloper","scheduleSample","longSpecSample","simpleFormatting","shortSpecSample","manufacturerSpecSheetSample","CSISample","DSN_REGEX","dsnToString","dsn","withPassword","hasElementType","isMergeableObject","isNonNullObject","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","defaultArrayMerge","getKeys","getEnumerableOwnPropertySymbols","propertyIsOnObject","mergeObject","propertyIsUnsafe","customMerge","getMergeFunction","sourceIsArray","deepmerge_1","isHotReloading","castModule","hot","parseTextCsv","verifyEmail","SwaggerParser","envKey","setResponse","setEnvKey","getResponse","getEnvKey","serviceName","serviceVersion","swaggerEndpointData","endpoints","endpointUrl","methodKey","methodValue","setParsedData","failureData","X_ATS_TOKEN_KEY","X_ATS_APP_ID_KEY","appToken","appIdentity","userIdentity","onEventFn","everyEventFn","abortControllers","loadEndpointsTimeout","loadEndpointsRun","callApiProcessToken","skipTokenProcessing","internalCallApi","lowerService","processAppToken","processUserToken","processAppIdentity","processUserIdentity","processResponse","invalidateAppToken","claims","invalidateToken","getEndpointParams","defaultEndpointData","appendParameters","baseUrlOrOptions","getApiKey","argCopy","endpointParams","generateApiParams","apiParamsOptions","registerDirectEndpoint","serviceEndpoints","directCallApi","argsWithoutCallback","lastArg","directArgs","hasParams","substitutionParams","_method","capturingGroupRegex","capturingGroupsBeforeArgs","captureGroup","argsInUrl","capturingGroupsBeforeBody","captureGroupBeforeBody","_body","bodyWithoutUrlParams","bodyOnlyUrlParams","bodyOnlyUrlParamsKeys","bodyInUrl","capturingGroupsBeforeCall","captureGroupBeforeCall","urlBeforeQueryString","finalBody","getHeaders","fetchWithDefaultHeaders","envProd","loadEndpointsDebounced","setEndpointData","prebuiltEndpointData","FnList","untrigger","_token","Intl","DateTimeFormat","resolvedOptions","timeZone","loadEndpoints","isCurrentRun","loadEndpointLogs","skippedEndpoints","parsedEndpoints","retriedEndpoints","serviceBlacklistLowerCase","envEndpoints","loadServiceEndpoints","parseResponse","getParsedData","notLoaded","_service","servicesToLoad","retried","failedEndpoints","resolvedEndpoints","_props$inputComponent","InputBase","bottomLineColor","inputMarginDense","inputMultiline","inputTypeSearch","getOffsetTop","getOffsetLeft","getTransformOriginValue","_props$anchorOrigin","anchorPosition","_props$anchorReferenc","anchorReference","containerProp","_props$marginThreshol","marginThreshold","_props$transformOrigi","transitionDurationProp","_props$TransitionProp","paperRef","getAnchorOffset","contentAnchorOffset","resolvedAnchorEl","anchorRect","anchorVertical","getContentAnchorOffset","contentAnchorEl","getTransformOrigin","elemRect","getPositioningStyle","elemTransformOrigin","anchorOffset","containerWindow","heightThreshold","widthThreshold","_diff2","_diff3","setPositioningStyles","positioning","handlePaperRef","handleResize","_props$disablePointer","positionEnd","thumb","switchBase","ariaHidden","getPaddingRight","ariaHiddenSiblings","mountNode","currentNode","nodesToExclude","blacklistTagNames","findIndexOf","containerInfo","handleContainer","fixedNodes","restoreStyle","restorePaddings","disableScrollLock","isOverflowing","ModalManager","modals","modalIndex","modalRef","hiddenSiblingNodes","hiddenSiblings","getHiddenSiblings","containerIndex","nextTop","TrapFocus","_props$disableEnforce","_props$disableRestore","getDoc","ignoreNextEnforceFocus","sentinelStart","sentinelEnd","nodeToRestore","loopFocus","SimpleBackdrop","_props$invisible","defaultManager","inProps","_props$BackdropCompon","_props$closeAfterTran","_props$disableScrollL","_props$hideBackdrop","hideBackdrop","_props$manager","onRendered","mountNodeRef","hasTransition","getHasTransition","getModal","handleMounted","mount","resolvedContainer","isTopModal","handlePortalRef","inlineStyle","hexTable","arrayToObject","plainObjects","compacted","compactQueue","strWithoutPlus","defaultEncoder","allowPrototypes","mergeTarget","targetItem","_hasError","aValueKeys","bValueKeys","aValueKey","dPs","createDict","pIE","toIObject","gOPD","LIBRARY","wksExt","ARG","addClassName","addEvent","inputOptions","addUserSelectStyles","styleEl","createCSSTransform","controlPos","getTranslation","_getPrefix","browserPrefixToKey","createSVGTransform","getTouch","identifier","targetTouches","_shims","getTouchIdentifier","matchesSelector","matchesSelectorAndParentsTo","baseNode","offsetXYFromParent","offsetParentRect","outerHeight","outerWidth","removeClassName","removeEvent","removeUserSelectStyles","matchesSelectorFunc","unitSuffix","defaultX","defaultY","Checkboard","_reactcss2","checkboard","renderers","ContactCardWrapper","ContactCardButton","imageCard","cardAndButton","formatCustomerName","cardType","customerImageId","phoneNumber","selfEdit","customOnUserSubmit","handleCustomerEdit","_extendableBuiltin2","ExtendableBuiltin","_extendableBuiltin","$Object","ImuList","_url2","_queryString","redirectQueryParamName","locationSelector","_defaults$args","createRedirectLoc","redirectLoc","processProps","createFieldProps","asyncError","asyncValidating","submitError","syncError","syncWarning","formattedFieldValue","defaultFormattedValue","formatFieldValue","autofilled","_detypedEvent$target","validateComponentProp","propsToNotUpdateFor","eventPreventDefault","eventDataTransferGetData","eventDataTransferSetData","createConnectedField","ConnectedField","isPristine","handleDragStart","handleDrop","nextPropsKeys","thisPropsKeys","immutableProps","getRenderedComponent","_createFieldProps","_ownProps$_reduxForm","plain","getSyncError","getSyncWarning","objectValue","indexOrkey","shallowCompare","propsEqual","stateEqual","formatName","createField","previousValues","getValues","prefixName","newName","isImmutableList","asyncValidation","handleErrors","silenceEvent","silenceEvents","getError","validators","generateValidator","isSubmissionError","makeFieldsArray","submitAsSideEffect","submitResult","asyncValidateResult","mergeErrors","importedActions","formActions","arrayActions","checkSubmit","createReduxForm","initialConfig","touchOnBlur","shouldAsyncValidate","shouldError","fieldCounts","fieldValidators","fieldWarners","lastFieldWarnerKeys","innerOnSubmit","submitPromise","getValidator","getWarner","nextCount","lastCount","_destroyOnUnmount","getFieldList","excludeFieldArray","excludeUnregistered","getValidators","validator","getWarners","warners","warner","generateWarner","asyncChangeFields","valuesToValidate","fieldNeedsValidationForBlur","fieldNeedsValidationForChange","fieldNeedsValidation","blurredField","submitCompleted","listenToSubmit","submitOrEvent","validExceptSubmit","initIfNeeded","_keepDirty","keepValues","lastInitialValues","updateSyncErrorsIfNeeded","nextSyncErrors","nextError","lastSyncErrors","noErrors","nextNoErrors","clearSubmitPromiseIfNeeded","submitIfNeeded","triggerSubmit","shouldErrorFunction","shouldValidateOverridden","shouldErrorOverridden","validateIfNeeded","fieldLevelValidate","propsToValidate","_merge2","_merge","updateSyncWarningsIfNeeded","nextSyncWarnings","nextWarning","lastSyncWarnings","noWarnings","nextNoWarnings","shouldWarnFunction","shouldWarnOverridden","warnIfNeeded","fieldLevelWarn","fieldWarnerKeys","propsToWarn","_merge3","_config$immutableProp","anyTouched","propNamespace","submitSucceeded","reduxFormProps","propsToPass","registerInnerOnSubmit","stateInitial","shouldUpdateInitialValues","shouldResetValues","initialProps","bindForm","boundFormACs","_mapValues","boundArrayACs","boundFocus","connectedFormACs","connectedArrayACs","computedActions","ConnectedForm","ReduxForm","_React$Component2","WithContext","textStyle","contactsValueSeq","deleteContactRedux","tableState","tableHoverIndex","setSelectedContact","toggleOverlayComponent","setOverlayComponentContent","labelroot","TypedField","immutableTableRowGetter","immutableCellDataGetter","TableRef","RowRend","HeadRend","HeadCell","contactValues","toggleOverlayComponentAction","CellType","NoImagePlaceholder","FullName","CollaboratorsCheckBox","LogInAsModalCell","BAGGAGE_HEADER_NAME","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","baggageHeaderToDynamicSamplingContext","baggageHeader","baggageObject","currBaggageObject","baggageHeaderToObject","dynamicSamplingContextToSentryBaggageHeader","newBaggageHeader","dscKey","dscValue","ponyfill","nullptn","formatptn","colonptn","cursorptn","transformptn","animationptn","propertiesptn","elementptn","selectorptn","andptn","escapeptn","invalidptn","keyframeptn","plcholdrptn","readonlyptn","beforeptn","afterptn","tailptn","whiteptn","pseudoptn","writingptn","supportsptn","propertyptn","selfptn","pseudofmt","dimensionptn","imgsrcptn","webkit","moz","SEMICOLON","CLOSEBRACES","OPENBRACES","OPENPARENTHESES","CLOSEPARENTHESES","OPENBRACKET","CLOSEBRACKET","NEWLINE","CARRIAGE","AT","DASH","UNDERSCORE","STAR","COMMA","COLON","SINGLEQUOTE","DOUBLEQUOTE","FOWARDSLASH","GREATERTHAN","PLUS","TILDE","NULL","FORMFEED","VERTICALTAB","KEYFRAME","MEDIA","SUPPORTS","IMPORT","CHARSET","semicolon","preserve","plugged","should","POSTS","PREPS","UNKWN","PROPS","BLCKS","ATRUL","unkwn","nscopealt","nscope","bracket","parentheses","trail","peak","atrule","pseudo","caret","eof","eol","delimited","supports","vendor","third","declare","getAnalyticsConnector","setConnectorUserId","setConnectorDeviceId","connectedRouterRedirect","_locationHelper2","_redirectUtil","getRouterRedirect","createMixins","_toolbar","addLightOrDark","shade","createPalette","_palette$primary","_palette$secondary","_palette$error","_palette$warning","_palette$info","_palette$success","_palette$type","_palette$contrastThre","_palette$tonalOffset","augmentColor","mainShade","lightShade","darkShade","caseAllCaps","defaultFontFamily","createTypography","_ref$fontFamily","_ref$fontSize","_ref$fontWeightLight","fontWeightLight","_ref$fontWeightRegula","_ref$fontWeightMedium","_ref$fontWeightBold","_ref$htmlFontSize","htmlFontSize","allVariants","pxToRem2","buildVariant","casing","variants","createShadow","createSpacing","spacingInput","mui","_options$breakpoints","breakpointsInput","_options$mixins","mixinsInput","_options$palette","paletteInput","_options$typography","typographyInput","AccountModule","subHeader","secondaryDetails","erpId","errorMessageCell","successHeader","erpErrors","errorCodePrefix","Alert","pimSuccessIcon","pimSuccessMessage","pimSuccessCloseIcon","setSnackbarClosed","isPimToolAndWhite","pricingUpdateErrorMessage","selectTemplateId","MasterList","templateColumns","searchedTemplates","handleAddTemplate","masterTemplateListFilterUniqueKey","templateColumnsList","SPEC_TEMPLATE_LIST_COLUMNS","searchingTemplates","searchedTemplatesHasNextPage","canEditTemplate","CustomActionButtonForTemplate","searchedTemplatesSelect","searchedTemplatesHasNextPageSelect","searchingTemplatesSelect","templateColumnsListSelect","templateTranslationObjectSelect","userFirmIdSelect","identitySelect","setSelectedMasterSpec","entering","defaultTimeout","transitionProps","webkitTransition","getScale","autoTimeout","_getTransitionProps","_getTransitionProps2","regular","_props$position","backgroundColorDefault","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","fnValuesNs","fnRuleNs","functionPlugin","fnValues","styleRule","fnRule","atPrefix","GlobalContainerRule","GlobalPrefixedRule","separatorRegExp","addScope","jssGlobal","handleNestedGlobalContainerRule","handlePrefixedGlobalRule","parentRegExp","jssNested","getReplaceRef","replaceParentRefs","nestedProp","parentProp","parentSelectors","nestedSelectors","prevOptions","nestingLevel","isNested","isNestedConditional","uppercasePattern","msPattern","toHyphenLower","hyphenateStyleName","hName","convertCase","hyphenate","hyphenatedProp","addCamelCasedVersion","regExp","motion","perspective","innerProp","_innerProp","defaultUnit","camelCasedOptions","js","isTouch","jsCssMap","Moz","Webkit","appearence","noPrefill","supportedProperty","colorAdjust","longhand","textOrientation","writingMode","breakPropsOld","inlineLogicalOld","newProp","unprefixed","prefixed","pascalized","scrollSnap","overscrollBehavior","propMap","flex2012","propMap$1","propKeys","prefixCss","propertyDetectors","key$1","el$1","transitionProperties","transPropsRegExp","prefixTransitionCallback","prefixedValue","supportedValue","jssVendorPrefixer","prefixStyle","changeProp","supportedProp","supportedValue$1","atRule","jssPropsSort","prop0","prop1","vendorPrefixer","propsSort","RadioButtonUncheckedIcon","RadioButtonCheckedIcon","RadioButtonIcon","onChangeProp","MoreHorizIcon","_props$itemsAfterColl","itemsAfterCollapse","_props$itemsBeforeCol","itemsBeforeCollapse","_props$maxItems","_props$separator","li","ol","insertSeparators","BreadcrumbCollapsed","renderItemsBeforeAndAfter","HiddenJs","_breakpoint","breakpointUp","breakpointDown","implementation","lgDown","lgUp","mdDown","mdUp","smUp","xlDown","xlUp","xsDown","xsUp","Hidden","_props$implementation","_props$lgDown","_props$lgUp","_props$mdDown","_props$mdUp","_props$smDown","_props$smUp","_props$xlDown","_props$xlUp","_props$xsDown","_props$xsUp","HiddenCss","srcSet","useLoaded","hasImg","hasImgNotFailing","Person","system","textIndent","avatarProp","clickableProp","clickable","deleteIconProp","iconProp","chipRef","handleDeleteIconClick","moreProps","customClasses","deleteIconSmall","CancelIcon","avatarSmall","iconSmall","labelSmall","deleteIconColor","clickableColorPrimary","clickableColorSecondary","deletableColorPrimary","deletableColorSecondary","avatarColorPrimary","avatarColorSecondary","iconColorPrimary","iconColorSecondary","deleteIconColorPrimary","deleteIconColorSecondary","deleteIconOutlinedColorPrimary","deleteIconOutlinedColorSecondary","_touched","anyValue","TABLE_CELL_MAX_WIDTH","ListTableCell","DraggableCore","outcoming","bidItem","AtsSvgDashboardEditLayout","idExists","envHref","hrefHref","VERSION_JSON_PATH","instances","resizeDetector","createResizeDetector","errMsg","ReferenceWrapper","phProps","renderWrapper","explicitRef","disablePlaceholder","renderPlaceholder","renderProps","toRender","withSize","monitorWidth","monitorHeight","monitorPosition","refreshRate","refreshMode","noPlaceholder","resizeDetectorStrategy","refreshDelayStrategy","SizeMeRenderWrapper","SizeAwareComponent","np","domEl","isSameNode","SizeMe","sizeMeConfig","currentSizeMeConfig","prevSizeMeConfig","isShallowEqual","SizeAware","onSize","createComponent","TeamManagementOfficeContent","renderLocation","headOfficeStatus","TEAM_MANAGEMENT_OFFICE_EDIT","TeamManagementOfficeDrawer","createOrUpdateOffice","arrayLikeToArray","_toArray","percentTwenties","util","Format","RFC1738","RFC3986","formatters","rnds8","rnds","byteToHex","bth","_actionTypes","_isReactNative","_isEqualWith2","fieldInitial","_isEvent","support","viewClasses","isDataView","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","Request","_bodyInit","Body","Response","redirectStatuses","parseHeaders","getAllResponseHeaders","responseURL","ontimeout","consumed","bodyUsed","fileReaderReady","readBlobAsArrayBuffer","bufferClone","_initBody","_bodyText","_bodyBlob","_bodyFormData","_bodyArrayBuffer","readAsText","readBlobAsText","readArrayBufferAsText","upcased","normalizeMethod","rawHeaders","bodyInit","useLocal","unmount","_reactRouter","getRouter","isRouter","getSearch","createMatchSelector","lastPathname","lastMatch","autocompleteOverrides","currentRecord","selectedRecord","arrayIndexOf","ObjectProto","_symbol2","$iterCreate","BUGGY","DEF_VALUES","VALUES_BUG","$native","$entries","$anyNative","ArrayProto","cel","clearTask","riter","skipClosing","safe","canDragX","canDragY","createCoreData","isStart","createDraggableData","coreData","getBoundPosition","cloneBounds","boundNode","boundNodeEl","nodeStyle","boundNodeStyle","_domFns","getControlPosition","touchIdentifier","draggableCore","touchObj","snapToGrid","pendingX","pendingY","s1","s2","makeTable","STR_APPLY_OK","STR_APPLY_UIA_OK","_utf8len","buf2binstring","string2buf","m_pos","str_len","buf_len","binstring2buf","buf2string","c_len","utf16buf","utf8border","next_in","avail_in","total_in","next_out","avail_out","total_out","data_type","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","ColorWrap","_debounce2","_color2","Picker","ColorPicker","onChangeComplete","handleSwatchHover","onSwatchHover","optionalEvents","deepPurple","lightBlue","lightGreen","deepOrange","blueGrey","lightText","darkIcons","lightIcons","productionPrefix","jssCompose","jssExtend","atsStore","suspenseFallback","ConnectedRouter","propValue","detector","agent","isAnyIeVersion","isLegacyOpera","opera","getFirstMatch","getSecondMatch","matchAndReturnConst","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","getVersionPrecision","compareVersions","getBrowserAlias","BROWSER_ALIASES_MAP","getBrowserTypeByAlias","BROWSER_MAP","ENGINE_MAP","OS_MAP","PLATFORMS_MAP","Bada","BlackBerry","Chrome","Chromium","Electron","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","android","bada","blackberry","chromium","epiphany","firefox","generic","googlebot","google_search","ie","k_meleon","maxthon","mz","naver","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","safari","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tablet","mobile","desktop","tv","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","getParser","_ua","parsedResult","getUA","parseBrowser","describe","getBrowserName","getBrowserVersion","getOS","os","parseOS","getOSName","getOSVersion","getPlatform","parsePlatform","getPlatformType","getEngine","engine","parseEngine","getEngineName","satisfies","isOS","isPlatform","compareVersion","isEngine","versionName","statusBar","trackColor","percentText","totalResponse","statusesToFilter","totalReplied","totalSubmitted","totalDeclined","getPercentRate","confirmDeclineInvitation","declineData","RotationTypes","TextAlignment","ImageAlignment","PDFField","PDFDropdown","PDFOptionList","PDFTextField","StandardFonts","PDFForm","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","Executive","Folio","Legal","Letter","Tabloid","ParseSpeeds","PDFPage","contentStream","whiteLoading","TAKEOFF_DRAWER_ID","publicFiles","protectedFiles","TakeoffDrawerView","htmlTreeAsString","nextStr","MAX_TRAVERSE_HEIGHT","sepLength","keyAttrs","_htmlElementAsString","keyAttrPairs","keyAttr","keyAttrPair","memoBuilder","hasWeakSet","supportsFetch","isNativeFetch","supportsNativeFetch","EdgeRuntime","SentryError","logLevel","isBrowserBundle","__SENTRY_BROWSER_BUNDLE__","getSDKSource","getBaseApiEndpoint","isNodeEnv","symbolObservablePonyfill","MAX_SIGNED_31_BIT_INT","createEventEmitter","changedBits","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","getUniqueId","emitter","getChildContext","observedBits","reactPropsRegex","PREFIX","None","Warn","Verbose","ApplicationContextProviderImpl","getApplicationContext","deviceModel","EventBridgeImpl","obj1","obj2","typeA","primitive_1","isArrayA","isArrayB","sorted1","sorted2","result_1","IdentityStoreImpl","actingUserProperties","actingIdentity","setUserProperties","actingProperties","getIdentity","addIdentityListener","removeIdentityListener","safeGlobal","AnalyticsConnector","applicationContextProvider","timeoutDuration","longerTimeoutBrowsers","functionToCheck","getType","getStyleComputedProperty","getParentNode","getReferenceNode","isIE11","isIE10","getOffsetParent","noOffsetParent","getRoot","findCommonOffsetParent","element1","element2","isOffsetContainer","element1root","side","upperSide","includeScroll","sideA","sideB","getWindowSizes","getClientRect","getOffsetRectRelativeToArbitraryNode","fixedPosition","runIsIE","isHTML","childrenRect","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","getFixedPositionOffsetParent","getBoundaries","boundaries","boundariesNode","isPaddingNumber","getArea","computeAutoPlacement","refRect","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","secondaryMeasurement","runModifiers","ends","isModifierEnabled","modifierName","getSupportedPropertyName","upperProp","toCheck","attachToScrollParents","isBody","setupEventListeners","enableEventListeners","disableEventListeners","removeEventListeners","isNumeric","setStyles","isFirefox","isModifierRequired","requesting","requested","validPlacements","placements","clockwise","BEHAVIORS","parseOffset","useHeight","basePlacement","fragments","frag","splitRegex","mergeWithPrevious","toValue","shiftvariation","isVertical","shiftOffsets","transformProp","popperStyles","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flippedVariationByContent","flippedVariation","getOppositeVariation","subtractLength","bound","legacyGpuAccelerationOption","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","bothOddWidth","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","modifierOptions","eventsEnabled","PopperUtils","Defaults","maxPatternLength","caseSensitive","tokenSeparator","findAllMatches","minMatchCharLength","shouldSort","getFn","sortFn","tokenize","matchAllTokens","includeScore","verbose","isCaseSensitive","setCollection","_log","_prepareSearchers","tokenSearchers","fullSearcher","_search","weights","_computeScore","_sort","_analyze","resultMap","arrayIndex","matchedIndices","nScore","patternAlphabet","expectedLocation","_reactDom","_eventlistener","_lodash2","_lodash4","_parentScroll2","_inViewport2","LazyLoad","lazyLoadHandler","_mounted","eventNode","getEventNode","_nextProps","detachListeners","offsetVertical","offsetHorizontal","offsetBottom","offsetRight","_offsetAll","_offsetVertical","_offsetHorizontal","onContentVisible","elStyles","elClasses","elementType","_objectWithoutProperties2","_clsx","_withStyles","_capitalize","acceptedFilesArray","baseMimeType","validType","block_size","block_shift","block_mask","block_table","_defaultSize","_axisOffset","_gap","inserts","_length","_pendingLength","isIntervalClear","inBlockCopy","dstBlock","dstIndexStart","srcBlock","srcIndexStart","ascending","dstIndex","dstSizes","srcSizes","dstValue","sizesSumDelta","defaultCountDelta","sizesSum","defaultCount","copyInterval","dstBlockIndex","dstSizesIndex","srcBlockIndex","srcSizesIndex","copyCount","dstStartIndex","srcStartIndex","Block","blockIndex","sizesIndex","clearCount","removeIntervals","intervalsCount","getLength","srcStart","dstStart","intervalEnd","nextIntervalStart","insertIntervals","newLength","oldLength","srcEnd","dstEnd","intervalStart","flushPendingChanges","indexOfInternal","curDistance","getAxisOffset","blockSize","getGap","blockGap","blockTable","blockTableLength","blockDistance","partialBlock","getDefaultSize","setAxisOffset","setGap","lastBlock","lastBlockOffset","lastBlockLength","_from","_from2","_isIterable3","_getIterator3","CustomPicker","TwitterPicker","SwatchesPicker","SliderPicker","SketchPicker","PhotoshopPicker","MaterialPicker","HuePicker","GithubPicker","CompactPicker","ChromePicker","CirclePicker","BlockPicker","AlphaPicker","_Block","_Circle","_Chrome","_Compact","_Github","_Material","_Photoshop","_Sketch","_Slider","_Swatches","_Twitter","_Chrome2","tab__wrapper","defaultCalcActiveLabel","isElementScrolledToBottom","noContainer","calcActiveLabel","setTabIndex","isScrollingCausedByManullyClick","prevLabels","usePrevValue","onChangeTab","debouncedHandleScroll","GUARD_FLAG","warnings","originalRemoveChild","originalInsertBefore","guardedRemoveChild","guardedInsertBefore","referenceNode","composes","registerClass","_warning2","refRule","valueNs","mergeExtend","mergeRest","ForgotPassword","TokenExpireModal","setIsExpired","refreshTimeout","setRefreshTimeout","expiredTimeout","setExpiredTimeout","issuedTime","expireTime","useRatioedTriggerRemainderTime","ratioedTriggerRemainderTime","timeLeftInMilliseconds","triggerRemainderTime","newRefreshTimeout","newExpiredTimeout","dateStr","DisplayType","defaultPartnership","CollaboratorPermission","selectedPartnership","specifics","setToDefault","togglePermission","permissionKey","toggleSpecifics","booleanRenderer","objectKey","crudRenderer","toggledAssignToValues","toggledViewValue","searchRender","opportunityRenderer","opportunityListItem","rootList","groupTitle","labelsToDisplay","label2","filtersExist","filteredBySearchTerm","pageHeader","titleDescription","leftContainer","rightContainer","leftSection","leftContainerTitle","settingsContainer","OPPORTUNITY","BOOLEAN","CRUD","USER_PROFILE_FORM","UserProfile","userLoading","isUsingLoggedInAs","editableKeys","usersLoading","userUpdateSucceeded","overallContainer","successIcon","failIcon","resultMessage","sectionContainer","contentDirection","updateButton","identityObj","CHANGE_PASSWORD_FORM","newPasswordsMustMatch","selecter","ChangeUserPassword","settingPassword","setPasswordSuccess","inputGroup","GuestSpecExpireModal","PageSubmit","projectPad","ResetPassword","hideConfirmPassword","toggleConfirmPasswordVisible","resetPasswordStatus","toLogin","isFIATOrPRIERSpecSite","dashboard","widgets","allowBatchedWidgetsDataFetch","newDashboard","dashboardContext","widgetsMap","widgetAdminImmutableLookup","admin","layoutImmutableLookup","layoutItem","updatedWidget","widgetLayoutData","widgetData","WIDGET_LOADED_ONCE","isFetching","createWidgetIfRequired","createWidget","widgetCreateCall","widgetCreated","createNewWidgetParams","hasTitle","updatedWidgetConfig","fetchWidgetDataWithOptions","fetchWidgetDataCall","requestResultTime","dashboardWidgetDataFetch","fetchWidgetData","widgetsData","adjustedRow","fetchWidgetsData","activeDashboard","dashboardWidgets","fetchWidgetDataActions","fetchWidgetLayoutData","fetchWidgetLayoutDataCall","fetchWidgetDataIfRequired","fetchWidgetLayoutDataActions","loadDashboard","getDashboard","getWidgetAdmin","ALLOWED_WIDGETS_FOR_RESTRICTED_OUTSIDE_SALES_REP","updateLayout","dashboardUpdateCall","dashboardParams","dashboardId","updateWidgetData","widgetUpdateCall","refreshData","LAYOUT_CHANGE_ACTIONS","WIDGET_CHANGED_ACTIONS","DashboardModule","TooltipInfo","Download","downloadViewProps","downloadStatus","hasSelectedAtLeastOneFormat","selectedFormats","specsArr","selectedFormat","modalKey","ungatedDownload","LixirSpecBookletView","handleOpenInVsb","ExpiringCountDown","timeLeft","expiredContainer","calculateDrawingInsetPoint","copyTemplateSpecs","copyMasterSpecs","lastDrawing","SpecDetail","viewProps","newView","ViewComponent","WithSpecId","isFirstLoad","WithMode","isFetchingProduct","pimProductsPackages","parentSharedFirmProducts","pimProductsList","pimProductsListHasNextPage","pimProductsListSearchFilters","pimProductsListSearchOptions","sharedProductsList","quickSearchFirmProductsList","quickSearchFirmProductsListCount","quickSearchFirmProductsListHasNextPage","searchingPimProductsPackages","searchingParentSharedFirmProducts","isLoadingQuickSearchFirmProducts","isFetchingPimAttributeOptions","selectedFirmSeriesId","firmSeriesHasNextPage","selectedFirmConfigSeriesId","selectedFirmSeries","quickSearchPimProductsLoading","pureAttributesSecondary","isSearchingPureAttributesSecondary","pureAttributeOptions","pureAttributeOptionsCount","pureAttributeOptionsSecondary","isSearchingPureAttributeOptionsSecondary","isSearchingPureAttributeOptions","matchingProductChecking","configuratbleProductsCheck","isSearchingPimCategories","pimCategories","primaryMergeProduct","isSearchingPimIntegrationSeries","pimIntegrationMap","isMappingPimIntegration","isFetchingPackage","firmProductManufacturers","firmProductCategories","indexToSkip","indexToRestore","integrationMap","isCreating","GET_FIRM_SERIES_SUCCEEDED","SET_SELECTED_PIM_PRODUCT_ID","stateSeries","stateProducts","ADD_ATS_LIBRARY_PRODUCT_SUCCEEDED","RESET_SEARCH_PIM_PRODUCTS_SEARCH_BODY","kept","returned","cutoff","QUICK_SEARCH_FIRM_PRODUCTS_SUCCEEDED","FETCHING_FIRM_PRODUCTS","QUICK_SEARCH_FIRM_PRODUCTS","firmConfig","SavedSuccessfully","mediaLabel","componentExist","validationError","createProduct","isInvalid","filteredManufacturers","onValidationFailed","LIBRARY_PRODUCT_DRAWER_ID","LibraryProductDrawer","DrawerView","formatSelectedAttributesForApi","filteredValue","attributeIsOption","seriesAttributeValues","getFirmProductCustomDataList","getFirmProductManufacturers","getFirmProductCategories","getSeriesDuplicateProductsByIdContent","searchAttributeOptionsSecondary","deleteAttributeOptionByIdThenSearchAttributeOptions","deleteAttributeOptionById","deleteAttributeByIdThenSearchAttributes","deleteAttributeById","validateAttributeOptionExists","createPureAttributeOptionThenSearchPureAttributeOptions","createPureAttributeOption","validateAttributeExists","createPureAttributeThenSearchPureAttributes","createPureAttribute","searchAllAttributesSecondary","searchAllAttributes","getProductById","publishSeriesDraftContent","updatePimProductDraftRaw","updatePimProductDraft","mergeProducts","addPimProductDraftThenSearchPimProducts","addPimProductDraft","deleteSeriesDraftById","updatePimSeriesDraftRaw","updatePimSeriesDraftForDelete","addPimSeriesDraftRaw","addPimSeriesDraft","addPimSeriesDraftForDelete","deleteFirmSeriesThenSearchFirmSeries","deleteFirmSeriesById","updateFirmSeriesAndRedirect","addFirmSeriesActionAndRedirect","updateFirmSeries","addFirmSeries","getFirmSeries","searchAttributeOptions","getPimSeries","getPimSeriesDraft","getPimSeriesDraftByParentId","deleteSeriesByIdAndSearchSeries","deleteSeriesByIdAndSearchXref","deleteSeriesProductByIdAndSearchXref","deleteSeriesById","deleteSeriesProductById","deleteSeriesProductByIdThenSearchSeriesProducts","getSeriesSpecificMandatoryAttributes","saveSkipAttributes","getSeriesDetail","addFirmProductFile","addFirmProductFileAndGetMedia","deleteFirmProductFileAndGetMedia","deleteFirmProductFile","updateQuoteRowWithProduct","requireFirmProductId","editFirmProduct","editFirmProductAndAddToQuote","addPimProductOrSeries","addATSLibraryProduct","addPimProduct","addPimProductThenSearchPimProducts","addFirmProduct","addFirmProductAndAddToQuote","fetchFirmProductPackages","quickSearchPimProductsPackages","searchParentSharedFirmProducts","quickSearchPimProducts","cancelQuickSearchPimProducts","quickSearchPimProductsCONTENT","searchPimProducts","setSearchBodyAndSearchPimProducts","searchSharedProducts","deleteFirmProductAndSearchFirmProducts","duplicateSeries","checkAdvanceConfigMatchingProduct","canProductBeConfigured","searchPimCategories","updatePimCategory","downloadBulkImportTemplateFile","bulkExportProducts","bulkImportProducts","getBulkExportProductsConfig","saveBulkExportProductsConfig","getFirmProductById","getPackageById","mapPimIntegration","cancelMapPimIntegrationPolling","mapPimIntegrationContent","savePimIntegrationMap","unmapPimIntegration","createPimIntegrationSeriesDraft","cancelCreatePimIntegrationSeriesDraftPolling","createPimIntegrationSeriesDraftContent","DELETE_SERIES_BY_ID_AND_SEARCH_XREF","DELETE_SERIES_PRODUCT_BY_ID_AND_SEARCH_XREF","DELETE_SERIES_PRODUCT_BY_ID_THEN_SEARCH_SERIES_PRODUCTS","ADD_PIM_PRODUCT_OR_SERIES","ADD_PIM_PRODUCT_THEN_SEARCH_PIM_PRODUCTS","GET_SERIES_FROM_PIM_SERVICE","GET_PIM_SERIES_DRAFT_BY_PARENT_ID","ADD_FIRM_SERIES","VALIDATE_ATTRIBUTE_EXISTS","VALIDATE_ATTRIBUTE_OPTION_EXISTS","UPDATE_PIM_CATEGORY","SAVE_BULK_EXPORT_PRODUCTS_CONFIG","MAP_PIM_INTEGRATION","SAVE_PIM_INTEGRATION_MAP","UNMAP_PIM_INTEGRATION","CREATE_PIM_INTEGRATION_SERIES_DRAFT","removeBrandFilters","removeEmptyFilters","CANCEL_GET_SERIES_DUPLICATE_PRODUCTS_BY_ID_POLLING","immutableResult","deletedOptionId","deletedAttributeId","newPureAttributeOption","displaySuccessMessage","newPureAttribute","attributesResponse","immutableAttributeResponse","isCompetitor","sourceSeriesMandatoryAttributes","sourceSeriesSkipAttributeIds","sourceSeriesRemainingMandatoryAttributeKeys","newSeriesId","isStillDraft","seriesPublished","forceCascade","skipOnly","idOnly","sourceSeriesSkipAttributes","seriesDraftData","seriesDraftId","redirectState","extractIsConfiguratorFromFilters","extractedIsConfigurator","useUnavailabilityPurchasabilityQuery","firmSeriesResponse","hasDatabaseAdminRole","DATABASE_ADMIN","competitorOrSponsor","searchXrefAction","deletedProductId","sanitizeMandatoryRecommendedAttributes","attributeIdsMap","sanitizeRecommendedAttributes","isAndFilters","isOrFilters","newFilterArray","seriesData","xrefSponsorProductDetailSearch","updatedFirmProduct","createOrUpdateFirmProductAmplitudeTracking","quoteRelevance","createOrUpdateFirmProduct","isNewProduct","pimProductsPackagesList","productRowOnFocus","currentIndexRowId","targetRowExists","productOrPackageId","exsitingProduct","productSeriesData","PimCrossReferenceSuccessDrawer","PimCrossReferenceProductDrawer","isParentSharedSearch","productBody","rankContext","productRestrictions","productErr","packageFilters","packageOptions","pkgData","pkgErr","packages","mergedList","mergeFirmProductPackagesByRank","productSearch_match","itemNumber_startsWith","optionsLimit","orderBy_productSearchRelevance","orderBy_rank","orderBy_type","orderBy_productNumber","orderByPropertyOrder","parentSharedFirmProductSearch","firmProductPackageSearch","CANCEL_QUICK_SEARCH_PIM_PRODUCTS","searchFilters","specOrOfficeLocationForFilter","requireSeries","quickData","quickErr","productSimpleSearch_match","province_state","orderBy_id","orderBy_isCompetitor","atsProductSearch","rankVal","productNumberVal","ra","rb","typeDiff","pnDiff","mergedFilters","restrictions","firmData","modifiedUserId","dateAddedGte","dateAddedLte","dateModifiedGte","dateModifiedLte","firmProductSearch","sourceSeries","duplicateSeriesId","isAQ","productObjectKey","displayAsAttributeProducts","andFilterArray","orFilterArray","validAndFilter","validOrFilter","updatedCategory","categoryFrozen","exportFields","exportData","exportPricing","seriesIds","searchedSeriesResult","CANCEL_MAP_PIM_INTEGRATION_POLLING","integrationMapList","savedMapList","mappingIds","mappingId","deletedMappingIds","failedMappingIds","PimModule","LIST_ITEM_STATUS","notificationsItemStatusList","readCount","unreadCount","isDropDownOpen","scollToTop","mappedList","newNotifications","updatedNotifications","updatedReadCount","updatedUnreadCount","SET_NOTIFICATIONS_LISTITEM_STATUS_LOADING","LOADING","NOTIFICATION_BROADCAST_EVENT","isSupported","BroadcastChannel","getChannel","releaseChannelIfIdle","broadcastNewNotification","NOTIFICATION_NEW_EVENT","createNotificationEventChannel","unsubscribeNew","onSseEvent","notificationType","unsubscribeReconnect","unsubscribeBroadcast","NOTE_PAGES","assignedNote","assignedOfficeNote","assignedUserNote","ENTITY_ID","getNoteContextFromPathname","shouldRefreshNotes","noteContext","notificationTypes","notificationSaga","watchCheckNotification","resetStateAndGetNotification","watchNotificationSse","consumeNotificationEvents","getNewNotification","checkNotification","getNotification","createNotification","markNotificationReadOrUnread","quiet","loggedOut","hasNewNotification","PROJECT_LIST_DETAIL_PAGE_PATHNAME_REGEX","CampaignIcon","targetAppId","NotificationModule","connectNotificationSse","formatsWithRequiredFields","firstFormatWithMissingRequiredFields","prevFormats","buildingTypesTooltip","ProjectTooltipInfo","collaboratorIcon","hasSelectedDrawingsWithDraftProduct","findSpecsInProject","useSelectAllDrawingsEffect","isLoadingProject","isEverySpecsLoaded","specMatched","checkIsEverySpecInProjectLoaded","Loader","projectSelector","has404Error","enableSelectAllDrawings","ProjectSpecDetail","ProductSelectionGroup","externalUpdate","debouncedChange","drawingDetailTitleContainer","thumbEmpty","valuetext","selectLoggedInUserOfficeLocation","rangeFilterValues","appliedFilterValue","handleChangeCommitted","metricUnit","impMin","impMax","impUnit","isIntRange","isRangeFilterInUse","valueRange","setValueRange","displayWarning","setDisplayWarning","stepProps","primaryUnit","secondaryUnit","newValueRange","getSecondaryValue","appliedValue","imperialValue","metricValue","getAriaLabel","getAriaValueText","valueRangeToSubmit","handleCommitRangeSlider","searchDrawing","seriesSearchOptions","newOption","productSelectionPageFilter","productsBeforeCurrent","currentProduct","getAttributeOptionOrder","getAttributeOrderedWhiteList","getManufacturersByCategoryId","searchFilterLocation","filterSet","filterValueLabel","rawSeries","manufacturersByCategory","filteredAttributesOptions","filterCollapsePanels","ProductSelectionGroupDrawingSettings","drawingSearchContainer","drawingSearchIcon","manufacturerFilterValue","manufacturerInFilterValue","optionTitleLabel","valuesWithoutPlaceholder","radioButtonFilterValues","appliedKeyFilterValue","valueMap","valueInFilter","lowerBoundFilter","upperBoundFilter","isRangeFilterDisabled","valueObject","valueObjectIndex","filteredSeriesAttributes","considerAppId","tableTheme","MuiTablePagination","useStyles1","KeyboardArrowLeft","selectedSeriesIdSelector","seriesHasNextPageSelector","seriesSearchOptionsSelector","filteredSeriesSelector","filteredSeries","updateOptionAndSearch","SeriesPanel","seriesLoadingSelector","updatingRulesSelector","searchTermSelector","drawingRulesSelector","sortSeriesBySelector","skipRulesEngineSelector","isRegisteredUserSelector","sortSeriesBy","handleSortingSelect","openSignUpDialog","userSearch","completeLabels","completeviewSubtitle","completeviewAddButton","completeviewAlt","completeviewNotFound","ReactBeautifulDndAnchor","ProductSelection","haveInitializedWithInitData","basePageWithDataSetup","fireStartOnSeriesOrProductEvent","fetchedSuccessfully","hasProductId","startOnSeriesOrProduct","removeFilter","removeCategorySpecificSeriesFilter","customArgs","searchedValue","drawingRule","updateHideDiscontinuedAndSearchSeries","updateShowDraftOnlyAndSearchSeries","isShowDraftSeriesOnly","specPath","completePath","searchedValueValue","onlyEmptyUseFilter","resetButtonToggle","resetButton","toggleProductSelectionControl","DrawingCompletionPath","spaceContainer","ProductTable","AddProductToDrawingModal","specificationIcon","specificationBtn","specificationBtnColor","sortBySelect","CreateNewTemplateFromStepper","NewTemplateModalForm","CreateNewTemplateModal","CreateNewTemplateFormStepper","searchResultsCompetitorIds","productDetail","xrefCompetitorProducts","xrefCompetitorSeries","xrefSponsorProducts","xrefSponsorSeries","searchXrefSponsorLoading","searchXrefCompetitorLoading","checkingXrefDuplicate","createSponsorProduct","DELETE_XREF_BY_ID_AND_SEARCH_XREFS","xrefSearchResults","orderedCompetitoredProductIds","competitorIdCtx","stateCachedProducts","stateCachedProductsCtx","sponsorProductCtx","competitorProductCtx","stateXrefs","stateXref","RESET_XREF_STATE","xrefStateKey","CREATE_SPONSOR_PRODUCT","CLEAR_CREATE_SPONSOR_PRODUCT_ERROR","filterForValidXrefs","productSaga","resolveXrefLocation","deleteXrefByIdAndSearchXrefs","deleteXrefById","searchXrefs","searchXrefSponsor","searchXrefCompetitor","getXrefProductByCategory","getXrefCategories","getProductDetails","getProducts","getSearchXrefs","getAlternativesXref","getExactProducts","SendXrefFeedback","RequestXref","AddXref","UpdateXref","CheckXrefDuplicate","CreateSponsorProduct","UPDATE_XREF","isDuplicateCheck","typeKey","categoryValue","competitorProductIdSet","resultSize","xrefCompetitorCategorySearch","searchCategoryId","performanceData","backendDuration","frontendDuration","searchByCategoryName","searchByCategoryId","xref_stepOne_categorySearch","xrefCompetitorManufacturerSearch","searchByManufacturerName","searchByManufacturerId","xref_stepOne_manufacturerSearch","xrefCompetitorProductSearch","xref_stepOne_numberSearch","defaultResults","sponsorResults","productSponsorProductResults","seriesSponsorProductResults","packageSponsorProductResults","sponsorBrandData","sponsorBrands","sponsorBrandOccurrences","xrefSponsorProductResults","totalResults","isAlternativeFlow","SearchByCompetitorProductId","SearchByCompetitorProductType","xref_stepTwo_search","manufacuturer","xrefRequestCrossReference","withNewCrossButton","withActionButtons","CrossRefModule","TAKEOFF_PENDING_STATUS","PrintServiceApi","linearProgressRoot","outlinedButton","successJobContainer","cusror","failedJobContainer","JobItem","getJobs","apiProgress","stepKey","getStepLabel","pageProgressText","handleHideJob","aiTakeoff","createAITakeoff","isTerminalStatus","isFrameInScope","rebaselineHighWater","prevHighWater","highWater","serverProgress","streamed","NEGATIVE_INFINITY","useLatest","clearAllButton","jobsContainer","TakeOffList","setJobs","setLimit","setHasMore","loaderRef","listRef","hasPendingJob","highWaterRef","fetchSeqRef","pathnameWithoutLocale","msnotification","jobLength","reconciledJobs","newHasPendingJob","takeoffFinished","getJobsLatest","refetchJobs","handleClearAll","rootMargin","debouncedRefetch","unsubscribeProgress","opId","applyProgress","hasOtherFields","mergeProgressFrame","referenceId","drawingHash","errorData","CreateNewMasterFromStepper","CreateNewMasterModal","CreateNewMasterFormStepper","_iconsCache","faAddressBook","faAddressCard","faAngry","faArrowAltCircleDown","faArrowAltCircleLeft","faArrowAltCircleRight","faArrowAltCircleUp","faBell","faBellSlash","faBookmark","faBuilding","faCalendar","faCalendarAlt","faCalendarCheck","faCalendarMinus","faCalendarPlus","faCalendarTimes","faCaretSquareDown","faCaretSquareLeft","faCaretSquareRight","faCaretSquareUp","faChartBar","faCheckCircle","faCheckSquare","faCircle","faClipboard","faClock","faClone","faClosedCaptioning","faComment","faCommentAlt","faCommentDots","faComments","faCompass","faCopy","faCopyright","faCreditCard","faDizzy","faDotCircle","faEdit","faEnvelope","faEnvelopeOpen","faEye","faEyeSlash","faFile","faFileAlt","faFileArchive","faFileAudio","faFileCode","faFileExcel","faFileImage","faFilePdf","faFilePowerpoint","faFileVideo","faFileWord","faFlag","faFlushed","faFolder","faFolderOpen","faFontAwesomeLogoFull","faFrown","faFrownOpen","faFutbol","faGem","faGrimace","faGrin","faGrinAlt","faGrinBeam","faGrinBeamSweat","faGrinHearts","faGrinSquint","faGrinSquintTears","faGrinStars","faGrinTears","faGrinTongue","faGrinTongueSquint","faGrinTongueWink","faGrinWink","faHandLizard","faHandPaper","faHandPeace","faHandPointDown","faHandPointLeft","faHandPointRight","faHandPointUp","faHandPointer","faHandRock","faHandScissors","faHandSpock","faHandshake","faHdd","faHeart","faHospital","faHourglass","faIdBadge","faIdCard","faImage","faImages","faKeyboard","faKiss","faKissBeam","faKissWinkHeart","faLaugh","faLaughBeam","faLaughSquint","faLaughWink","faLemon","faLifeRing","faLightbulb","faListAlt","faMap","faMeh","faMehBlank","faMehRollingEyes","faMinusSquare","faMoneyBillAlt","faMoon","faNewspaper","faObjectGroup","faObjectUngroup","faPaperPlane","faPauseCircle","faPlayCircle","faPlusSquare","faQuestionCircle","faRegistered","faSadCry","faSadTear","faSave","faShareSquare","faSmile","faSmileBeam","faSmileWink","faSnowflake","faSquare","faStar","faStarHalf","faStickyNote","faStopCircle","faSun","faSurprise","faThumbsDown","faThumbsUp","faTimesCircle","faTired","faTrashAlt","faUser","faUserCircle","faWindowClose","faWindowMaximize","faWindowMinimize","faWindowRestore","faAd","faAdjust","faAirFreshener","faAlignCenter","faAlignJustify","faAlignLeft","faAlignRight","faAllergies","faAmbulance","faAmericanSignLanguageInterpreting","faAnchor","faAngleDoubleDown","faAngleDoubleLeft","faAngleDoubleRight","faAngleDoubleUp","faAngleDown","faAngleLeft","faAngleRight","faAngleUp","faAnkh","faAppleAlt","faArchive","faArchway","faArrowCircleDown","faArrowCircleLeft","faArrowCircleRight","faArrowCircleUp","faArrowDown","faArrowLeft","faArrowRight","faArrowUp","faArrowsAlt","faArrowsAltH","faArrowsAltV","faAssistiveListeningSystems","faAsterisk","faAt","faAtlas","faAtom","faAudioDescription","faAward","faBaby","faBabyCarriage","faBackspace","faBackward","faBacon","faBalanceScale","faBan","faBandAid","faBarcode","faBars","faBaseballBall","faBasketballBall","faBath","faBatteryEmpty","faBatteryFull","faBatteryHalf","faBatteryQuarter","faBatteryThreeQuarters","faBed","faBeer","faBezierCurve","faBible","faBicycle","faBinoculars","faBiohazard","faBirthdayCake","faBlender","faBlenderPhone","faBlind","faBlog","faBold","faBolt","faBomb","faBone","faBong","faBook","faBookDead","faBookMedical","faBookOpen","faBookReader","faBowlingBall","faBox","faBoxOpen","faBoxes","faBraille","faBrain","faBreadSlice","faBriefcase","faBriefcaseMedical","faBroadcastTower","faBroom","faBrush","faBug","faBullhorn","faBullseye","faBurn","faBus","faBusAlt","faBusinessTime","faCalculator","faCalendarDay","faCalendarWeek","faCamera","faCameraRetro","faCampground","faCandyCane","faCannabis","faCapsules","faCar","faCarAlt","faCarBattery","faCarCrash","faCarSide","faCaretDown","faCaretLeft","faCaretRight","faCaretUp","faCarrot","faCartArrowDown","faCartPlus","faCashRegister","faCat","faCertificate","faChair","faChalkboard","faChalkboardTeacher","faChargingStation","faChartArea","faChartLine","faChartPie","faCheck","faCheckDouble","faCheese","faChess","faChessBishop","faChessBoard","faChessKing","faChessKnight","faChessPawn","faChessQueen","faChessRook","faChevronCircleDown","faChevronCircleLeft","faChevronCircleRight","faChevronCircleUp","faChevronDown","faChevronLeft","faChevronRight","faChevronUp","faChild","faChurch","faCircleNotch","faCity","faClinicMedical","faClipboardCheck","faClipboardList","faCloud","faCloudDownloadAlt","faCloudMeatball","faCloudMoon","faCloudMoonRain","faCloudRain","faCloudShowersHeavy","faCloudSun","faCloudSunRain","faCloudUploadAlt","faCocktail","faCode","faCodeBranch","faCoffee","faCog","faCogs","faCoins","faColumns","faCommentDollar","faCommentMedical","faCommentSlash","faCommentsDollar","faCompactDisc","faCompress","faCompressArrowsAlt","faConciergeBell","faCookie","faCookieBite","faCouch","faCrop","faCropAlt","faCross","faCrosshairs","faCrow","faCrown","faCrutch","faCube","faCubes","faCut","faDatabase","faDeaf","faDemocrat","faDesktop","faDharmachakra","faDiagnoses","faDice","faDiceD20","faDiceD6","faDiceFive","faDiceFour","faDiceOne","faDiceSix","faDiceThree","faDiceTwo","faDigitalTachograph","faDirections","faDivide","faDna","faDog","faDollarSign","faDolly","faDollyFlatbed","faDonate","faDoorClosed","faDoorOpen","faDove","faDownload","faDraftingCompass","faDragon","faDrawPolygon","faDrum","faDrumSteelpan","faDrumstickBite","faDumbbell","faDumpster","faDumpsterFire","faDungeon","faEgg","faEject","faEllipsisH","faEllipsisV","faEnvelopeOpenText","faEnvelopeSquare","faEquals","faEraser","faEthernet","faEuroSign","faExchangeAlt","faExclamation","faExclamationCircle","faExclamationTriangle","faExpand","faExpandArrowsAlt","faExternalLinkAlt","faExternalLinkSquareAlt","faEyeDropper","faFastBackward","faFastForward","faFax","faFeather","faFeatherAlt","faFemale","faFighterJet","faFileContract","faFileCsv","faFileDownload","faFileExport","faFileImport","faFileInvoice","faFileInvoiceDollar","faFileMedical","faFileMedicalAlt","faFilePrescription","faFileSignature","faFileUpload","faFill","faFillDrip","faFilm","faFilter","faFingerprint","faFire","faFireAlt","faFireExtinguisher","faFirstAid","faFish","faFistRaised","faFlagCheckered","faFlagUsa","faFlask","faFolderMinus","faFolderPlus","faFont","faFootballBall","faForward","faFrog","faFunnelDollar","faGamepad","faGasPump","faGavel","faGenderless","faGhost","faGift","faGifts","faGlassCheers","faGlassMartini","faGlassMartiniAlt","faGlassWhiskey","faGlasses","faGlobe","faGlobeAfrica","faGlobeAmericas","faGlobeAsia","faGlobeEurope","faGolfBall","faGopuram","faGraduationCap","faGreaterThan","faGreaterThanEqual","faGripHorizontal","faGripLines","faGripLinesVertical","faGripVertical","faGuitar","faHSquare","faHamburger","faHammer","faHamsa","faHandHolding","faHandHoldingHeart","faHandHoldingUsd","faHandMiddleFinger","faHands","faHandsHelping","faHanukiah","faHardHat","faHashtag","faHatWizard","faHaykal","faHeading","faHeadphones","faHeadphonesAlt","faHeadset","faHeartBroken","faHeartbeat","faHelicopter","faHighlighter","faHiking","faHippo","faHistory","faHockeyPuck","faHollyBerry","faHome","faHorse","faHorseHead","faHospitalAlt","faHospitalSymbol","faHotTub","faHotdog","faHotel","faHourglassEnd","faHourglassHalf","faHourglassStart","faHouseDamage","faHryvnia","faICursor","faIceCream","faIcicles","faIdCardAlt","faIgloo","faInbox","faIndent","faIndustry","faInfinity","faInfo","faInfoCircle","faItalic","faJedi","faJoint","faJournalWhills","faKaaba","faKey","faKhanda","faKiwiBird","faLandmark","faLanguage","faLaptop","faLaptopCode","faLaptopMedical","faLayerGroup","faLeaf","faLessThan","faLessThanEqual","faLevelDownAlt","faLevelUpAlt","faLink","faLiraSign","faList","faListOl","faListUl","faLocationArrow","faLock","faLockOpen","faLongArrowAltDown","faLongArrowAltLeft","faLongArrowAltRight","faLongArrowAltUp","faLowVision","faLuggageCart","faMagic","faMagnet","faMailBulk","faMale","faMapMarked","faMapMarkedAlt","faMapMarker","faMapMarkerAlt","faMapPin","faMapSigns","faMarker","faMars","faMarsDouble","faMarsStroke","faMarsStrokeH","faMarsStrokeV","faMask","faMedal","faMedkit","faMemory","faMenorah","faMercury","faMeteor","faMicrochip","faMicrophone","faMicrophoneAlt","faMicrophoneAltSlash","faMicrophoneSlash","faMicroscope","faMinus","faMinusCircle","faMitten","faMobile","faMobileAlt","faMoneyBill","faMoneyBillWave","faMoneyBillWaveAlt","faMoneyCheck","faMoneyCheckAlt","faMonument","faMortarPestle","faMosque","faMotorcycle","faMountain","faMousePointer","faMugHot","faMusic","faNetworkWired","faNeuter","faNotEqual","faNotesMedical","faOilCan","faOm","faOtter","faOutdent","faPager","faPaintBrush","faPaintRoller","faPalette","faPallet","faPaperclip","faParachuteBox","faParagraph","faParking","faPassport","faPastafarianism","faPaste","faPause","faPaw","faPeace","faPen","faPenAlt","faPenFancy","faPenNib","faPenSquare","faPencilAlt","faPencilRuler","faPeopleCarry","faPepperHot","faPercent","faPercentage","faPersonBooth","faPhone","faPhoneSlash","faPhoneSquare","faPhoneVolume","faPiggyBank","faPills","faPizzaSlice","faPlaceOfWorship","faPlane","faPlaneArrival","faPlaneDeparture","faPlay","faPlug","faPlus","faPlusCircle","faPodcast","faPoll","faPollH","faPoo","faPooStorm","faPoop","faPortrait","faPoundSign","faPowerOff","faPray","faPrayingHands","faPrescription","faPrescriptionBottle","faPrescriptionBottleAlt","faPrint","faProcedures","faProjectDiagram","faPuzzlePiece","faQrcode","faQuestion","faQuidditch","faQuoteLeft","faQuoteRight","faQuran","faRadiation","faRadiationAlt","faRainbow","faRandom","faReceipt","faRecycle","faRedo","faRedoAlt","faReply","faReplyAll","faRepublican","faRestroom","faRetweet","faRibbon","faRing","faRoad","faRobot","faRocket","faRoute","faRss","faRssSquare","faRubleSign","faRuler","faRulerCombined","faRulerHorizontal","faRulerVertical","faRunning","faRupeeSign","faSatellite","faSatelliteDish","faSchool","faScrewdriver","faScroll","faSdCard","faSearch","faSearchDollar","faSearchLocation","faSearchMinus","faSearchPlus","faSeedling","faServer","faShapes","faShare","faShareAlt","faShareAltSquare","faShekelSign","faShieldAlt","faShip","faShippingFast","faShoePrints","faShoppingBag","faShoppingBasket","faShoppingCart","faShower","faShuttleVan","faSign","faSignInAlt","faSignLanguage","faSignOutAlt","faSignal","faSignature","faSimCard","faSitemap","faSkating","faSkiing","faSkiingNordic","faSkull","faSkullCrossbones","faSlash","faSleigh","faSlidersH","faSmog","faSmoking","faSmokingBan","faSms","faSnowboarding","faSnowman","faSnowplow","faSocks","faSolarPanel","faSort","faSortAlphaDown","faSortAlphaUp","faSortAmountDown","faSortAmountUp","faSortDown","faSortNumericDown","faSortNumericUp","faSortUp","faSpa","faSpaceShuttle","faSpider","faSpinner","faSplotch","faSprayCan","faSquareFull","faSquareRootAlt","faStamp","faStarAndCrescent","faStarHalfAlt","faStarOfDavid","faStarOfLife","faStepBackward","faStepForward","faStethoscope","faStop","faStopwatch","faStore","faStoreAlt","faStream","faStreetView","faStrikethrough","faStroopwafel","faSubscript","faSubway","faSuitcase","faSuitcaseRolling","faSuperscript","faSwatchbook","faSwimmer","faSwimmingPool","faSynagogue","faSync","faSyncAlt","faSyringe","faTable","faTableTennis","faTablet","faTabletAlt","faTablets","faTachometerAlt","faTag","faTags","faTape","faTasks","faTaxi","faTeeth","faTeethOpen","faTemperatureHigh","faTemperatureLow","faTenge","faTerminal","faTextHeight","faTextWidth","faTh","faThLarge","faThList","faTheaterMasks","faThermometer","faThermometerEmpty","faThermometerFull","faThermometerHalf","faThermometerQuarter","faThermometerThreeQuarters","faThumbtack","faTicketAlt","faTimes","faTint","faTintSlash","faToggleOff","faToggleOn","faToilet","faToiletPaper","faToolbox","faTools","faTooth","faTorah","faToriiGate","faTractor","faTrademark","faTrafficLight","faTrain","faTram","faTransgender","faTransgenderAlt","faTrash","faTrashRestore","faTrashRestoreAlt","faTree","faTrophy","faTruck","faTruckLoading","faTruckMonster","faTruckMoving","faTruckPickup","faTshirt","faTty","faTv","faUmbrella","faUmbrellaBeach","faUnderline","faUndo","faUndoAlt","faUniversalAccess","faUniversity","faUnlink","faUnlock","faUnlockAlt","faUpload","faUserAlt","faUserAltSlash","faUserAstronaut","faUserCheck","faUserClock","faUserCog","faUserEdit","faUserFriends","faUserGraduate","faUserInjured","faUserLock","faUserMd","faUserMinus","faUserNinja","faUserNurse","faUserPlus","faUserSecret","faUserShield","faUserSlash","faUserTag","faUserTie","faUserTimes","faUsers","faUsersCog","faUtensilSpoon","faUtensils","faVectorSquare","faVenus","faVenusDouble","faVenusMars","faVial","faVials","faVideo","faVideoSlash","faVihara","faVolleyballBall","faVolumeDown","faVolumeMute","faVolumeOff","faVolumeUp","faVoteYea","faVrCardboard","faWalking","faWallet","faWarehouse","faWater","faWaveSquare","faWeight","faWeightHanging","faWheelchair","faWifi","faWind","faWineBottle","faWineGlass","faWineGlassAlt","faWonSign","faWrench","faXRay","faYenSign","faYinYang","fa500px","faAccessibleIcon","faAccusoft","faAcquisitionsIncorporated","faAdn","faAdobe","faAdversal","faAffiliatetheme","faAirbnb","faAlgolia","faAlipay","faAmazon","faAmazonPay","faAmilia","faAndroid","faAngellist","faAngrycreative","faAngular","faAppStore","faAppStoreIos","faApper","faApple","faApplePay","faArtstation","faAsymmetrik","faAtlassian","faAudible","faAutoprefixer","faAvianex","faAviato","faAws","faBandcamp","faBattleNet","faBehance","faBehanceSquare","faBimobject","faBitbucket","faBitcoin","faBity","faBlackTie","faBlackberry","faBlogger","faBloggerB","faBluetooth","faBluetoothB","faBootstrap","faBtc","faBuffer","faBuromobelexperte","faBuysellads","faCanadianMapleLeaf","faCcAmazonPay","faCcAmex","faCcApplePay","faCcDinersClub","faCcDiscover","faCcJcb","faCcMastercard","faCcPaypal","faCcStripe","faCcVisa","faCentercode","faCentos","faChrome","faChromecast","faCloudscale","faCloudsmith","faCloudversify","faCodepen","faCodiepie","faConfluence","faConnectdevelop","faContao","faCpanel","faCreativeCommons","faCreativeCommonsBy","faCreativeCommonsNc","faCreativeCommonsNcEu","faCreativeCommonsNcJp","faCreativeCommonsNd","faCreativeCommonsPd","faCreativeCommonsPdAlt","faCreativeCommonsRemix","faCreativeCommonsSa","faCreativeCommonsSampling","faCreativeCommonsSamplingPlus","faCreativeCommonsShare","faCreativeCommonsZero","faCriticalRole","faCss3","faCss3Alt","faCuttlefish","faDAndD","faDAndDBeyond","faDashcube","faDelicious","faDeploydog","faDeskpro","faDev","faDeviantart","faDhl","faDiaspora","faDigg","faDigitalOcean","faDiscord","faDiscourse","faDochub","faDocker","faDraft2digital","faDribbble","faDribbbleSquare","faDropbox","faDrupal","faDyalog","faEarlybirds","faEbay","faEdge","faElementor","faEllo","faEmber","faEmpire","faEnvira","faErlang","faEthereum","faEtsy","faEvernote","faExpeditedssl","faFacebook","faFacebookF","faFacebookMessenger","faFacebookSquare","faFantasyFlightGames","faFedex","faFedora","faFigma","faFirefox","faFirstOrder","faFirstOrderAlt","faFirstdraft","faFlickr","faFlipboard","faFly","faFontAwesome","faFontAwesomeAlt","faFontAwesomeFlag","faFonticons","faFonticonsFi","faFortAwesome","faFortAwesomeAlt","faForumbee","faFoursquare","faFreeCodeCamp","faFreebsd","faFulcrum","faGalacticRepublic","faGalacticSenate","faGetPocket","faGg","faGgCircle","faGit","faGitAlt","faGitSquare","faGithub","faGithubAlt","faGithubSquare","faGitkraken","faGitlab","faGitter","faGlide","faGlideG","faGofore","faGoodreads","faGoodreadsG","faGoogle","faGoogleDrive","faGooglePlay","faGooglePlus","faGooglePlusG","faGooglePlusSquare","faGoogleWallet","faGratipay","faGrav","faGripfire","faGrunt","faGulp","faHackerNews","faHackerNewsSquare","faHackerrank","faHips","faHireAHelper","faHooli","faHornbill","faHotjar","faHouzz","faHtml5","faHubspot","faImdb","faInstagram","faIntercom","faInternetExplorer","faInvision","faIoxhost","faItchIo","faItunes","faItunesNote","faJava","faJediOrder","faJenkins","faJira","faJoget","faJoomla","faJs","faJsSquare","faJsfiddle","faKaggle","faKeybase","faKeycdn","faKickstarter","faKickstarterK","faKorvue","faLaravel","faLastfm","faLastfmSquare","faLeanpub","faLess","faLine","faLinkedin","faLinkedinIn","faLinode","faLinux","faLyft","faMagento","faMailchimp","faMandalorian","faMarkdown","faMastodon","faMaxcdn","faMedapps","faMedium","faMediumM","faMedrt","faMeetup","faMegaport","faMendeley","faMicrosoft","faMix","faMixcloud","faMizuni","faModx","faMonero","faNapster","faNeos","faNimblr","faNintendoSwitch","faNode","faNodeJs","faNpm","faNs8","faNutritionix","faOdnoklassniki","faOdnoklassnikiSquare","faOldRepublic","faOpencart","faOpenid","faOpera","faOptinMonster","faOsi","faPage4","faPagelines","faPalfed","faPatreon","faPaypal","faPennyArcade","faPeriscope","faPhabricator","faPhoenixFramework","faPhoenixSquadron","faPhp","faPiedPiper","faPiedPiperAlt","faPiedPiperHat","faPiedPiperPp","faPinterest","faPinterestP","faPinterestSquare","faPlaystation","faProductHunt","faPushed","faPython","faQq","faQuinscape","faQuora","faRProject","faRaspberryPi","faRavelry","faReact","faReacteurope","faReadme","faRebel","faRedRiver","faReddit","faRedditAlien","faRedditSquare","faRedhat","faRenren","faReplyd","faResearchgate","faResolving","faRev","faRocketchat","faRockrms","faSafari","faSalesforce","faSass","faSchlix","faScribd","faSearchengin","faSellcast","faSellsy","faServicestack","faShirtsinbulk","faShopware","faSimplybuilt","faSistrix","faSith","faSketch","faSkyatlas","faSkype","faSlack","faSlackHash","faSlideshare","faSnapchat","faSnapchatGhost","faSnapchatSquare","faSoundcloud","faSourcetree","faSpeakap","faSpeakerDeck","faSpotify","faSquarespace","faStackExchange","faStackOverflow","faStackpath","faStaylinked","faSteam","faSteamSquare","faSteamSymbol","faStickerMule","faStrava","faStripe","faStripeS","faStudiovinari","faStumbleupon","faStumbleuponCircle","faSuperpowers","faSupple","faSuse","faSymfony","faTeamspeak","faTelegram","faTelegramPlane","faTencentWeibo","faTheRedYeti","faThemeco","faThemeisle","faThinkPeaks","faTradeFederation","faTrello","faTripadvisor","faTumblr","faTumblrSquare","faTwitch","faTwitter","faTwitterSquare","faTypo3","faUber","faUbuntu","faUikit","faUniregistry","faUntappd","faUps","faUsb","faUsps","faUssunnah","faVaadin","faViacoin","faViadeo","faViadeoSquare","faViber","faVimeo","faVimeoSquare","faVimeoV","faVine","faVk","faVnv","faVuejs","faWaze","faWeebly","faWeibo","faWeixin","faWhatsapp","faWhatsappSquare","faWhmcs","faWikipediaW","faWindows","faWix","faWizardsOfTheCoast","faWolfPackBattalion","faWordpress","faWordpressSimple","faWpbeginner","faWpexplorer","faWpforms","faWpressr","faXbox","faXing","faXingSquare","faYCombinator","faYahoo","faYammer","faYandex","faYandexInternational","faYarn","faYelp","faYoast","faYoutube","faYoutubeSquare","faZhihu","far","fas","requestSent","multiBuildings","multiBuildingTypes","buildingClassesSucceededPayload","buildingClassesList","stateList","listItemCtx","buildingClassA","buildingClassB","buildingClassAName","buildingClassBName","buildingTypesSucceededPayload","GET_BUILDING_CLASS","GET_BUILDING_SUCCEEDED","GET_MULTI_BUILDING","GET_MULTIPLE_BUILDING_TYPES","SELECT_BUILDING_TYPE","SELECT_BUILDING_TYPES","buildingSaga","getBuildingClassesSingle","getBuildingClassesMulti","getBuildingTypesAction","BuildingModule","_meta","ErrorModule","projectLocationSaga","getCountryAdminDivision","countryAction","provinceAction","cityAction","ProjectLocationModule","seriesSpecificInitDisabledSelections","lastMatchingProducts","attributeWhiteList","categoryToAttributeWhitelistMap","skipRuleEngine","quickSearchFirmLoading","productsHasNextPage","productsLoading","categoryLoading","categoryManfacturers","isRecommendedSpecProductLoading","seriesListHasNextPage","showDraftSeriesOnly","isGettingBrandVariations","brandVariations","isUpdatingBrandVariation","aiExclusion","isGettingAiExclusion","isAddingAiExclusion","isUpdatingAiExclusion","isDeletingAiExclusion","RESET_CATEGORY_MANUFACTURERS","RESET_PRODUCTS","seriesList","RESET_ATTRIBUTE_OPTIONS","attributeList","updateSeriesPayload","updatedSeries","matchingProductsSucceededPayload","selectSeriesPayload","seriesFilterTogglePayload","seriesFilterPayload","existingSet","seriesFilterAddPayload","seriesFilterRemovePayload","seriesFilterClearPayload","productFilterTogglePayload","specificFilterValueLabel","currentFilter","productFilterAddPayload","currentSeriesSpecificFilters","newSeriesSpecificFilters","productFilterRemovePayload","productFilterClearPayload","productFilter","productFilterKey","productFilterValue","PRODUCT_FILTER_CLEAR_THEN_CHECK_PRODUCT_AND_ATTRIBUTES","prevFilter","newSelections","attributesForDisabled","newSelectedSeriesSpecificInitDisabledSelections","valueToCompare","valuesToDisable","valuesAcc","seriesSpecificFilterAddPayload","seriesSpecificFilterRemovePayload","SERIES_SPECIFIC_FILTER_CLEAR","quickSearchPayload","categorySearchTypePayload","getSearchResultsSucceededPayload","getProductsFailedPayload","_productCategoryGroup","filterProductCategoriesPayload","ProductCategorySelectionPayload","QuickSearchFirmLoadingPayload","SaveFirmCategoryLoadingPayload","updateCategoryPopularity","selectProductForConfigurator","getAiExclusion","addAiExclusions","updateAiExclusionById","deleteAiExclusionById","getRecommendedSpecProduct","createProductMediaRequest","getBrandVariations","updateBrandVariationById","searchDalSeriesWithFilters","searchProductsWithFilters","getSeriesAndAddSeriesSpecificFilters","getSeriesById","useActionAndSearchWithFilterAction","searchSeriesWithFilter","selectNewCategory","createMatchingProductThenUpdateDrawing","checkProductAndAttributes","expansionFindSelectedSeries","quickSearchFirm","clearSearchResults","selectQuickSearchContext","quickSearchProduct","quickSearchFirmProduct","quickSearchCategory","quickSearchSeries","rawGetProductCategories","getBrandRepProductCategories","SEARCH_PRODUCTS_WITH_FILTER","SEARCH_DAL_SERIES_WITH_FILTER","CREATE_PRODUCT_MEDIA_REQUEST","GET_BRAND_VARIATIONS","UPDATE_BRAND_VARIATION_BY_ID","ADD_AI_EXCLUSIONS","UPDATE_AI_EXCLUSION_BY_ID","DELETE_AI_EXCLUSION_BY_ID","aiExclusionItems","aiExclusionItem","exclusionId","defaultAmplitudeData","trackedSeriesData","noRecommendedProductRetrieved","trackedProductData","recommendedProductRetrieved","seriesCheckboxAttributes","productAttribute","productAttributeKey","altNames","bimSeriesSearch","hasNewSearch","bimProductSearch","testSpecMode","testQuery","specBuildingForFilter","filterFromRules","filterRuleByCategoryId","filterOutNonActiveSeries","categorySpecificSeriesFilter","timerAction","isNewDrawingCreated","productCategoriesList","newDrawingCreated","isFirstConfiguredProduct","productSpecified","selectedSeriesAttributes","matchingPriceSummary","hasNoProducts","availableAttributes","remainingSeriesRequiredSingleSelectionAttributes","onlyOneAvailabelAttributeValue","remainingValidAttribute","expansionPaginationLocalKey","selectedSeriesIndex","paginationKey","paginationAction","searchFunction","dataContent","productCategoryGroups","productCategoryList","productSelectionQuickSearch","searchType","resultCount","toPlain","hasAnyPimRole","hideDiscontinued","productNumberSimilarity","iApiData","nsData","filtersAnd","adjustedMissingRule","productCategoryAction","filterUnavailability","ProductModule","tasksData","taskData","updatedCriteriaData","updatedCriteriaId","updatedCriterias","newCriteriaData","deletedCriteriaId","oldCriteria","criteriaMap","mutableCriteriaMap","updatedOldCriteria","existingCriterion","oldCriteriaIdSet","resetTasks","getTaskById","updateCriteriaStatusesAndGetTask","createOrUpdateTask","editCriteria","updateCriterionAndGetTask","updateCriteria","addCriteria","tagEntity","unTagEntity","GET_TASKS","taskList","batchActions","updateCriteriaAction","criterionId","completionDueDate","assignUserActions","deleteUserActions","deletedUserId","deleteCriterionActions","criteriaJS","editedCriteria","criteriaList","tagEntityData","TaskModule","locationSaga","getRegionsList","stateId","LocationModule","specsList","NewView","allowEditProductGroups","handleDeleteProject","selectedProjectOpportunityGroupUuid","searchedProjectsCount","searchedMasters","searchedMastersCount","searchedMastersHasNextPage","searchingMasters","searchedMastersInCopyModal","searchedMastersCountInCopyModal","searchedMastersHasNextPageInCopyModal","searchingMastersInCopyModal","searchedTemplatesCount","searchingGetMasterProjectById","searchingGetTemplateProjectById","projectMasterSavingAllow","upToDateFetching","opportunitiesFetching","isApplyingTemplateToProjectAttachment","updatedProjectSpecDetailConfig","CREATE_PROJECT_FAILED","hasId","projectsResponse","stateProjects","projectResponse","deleteKey","projectOpportunities","opportunitiesMap","mutableOpportunityMap","updatedOldOpportunities","existingOpportunity","oldOpportunityLabelIdSet","newProjectOpportunities","projectIndex","SELECT_PROJECT_OPPORTUNITY_GROUP_UUID","UPDATE_PROJECT_CONTACT","ProjectModule","createTemplateProjectSucceeded","createMasterProjectSucceeded","createMasterProjectFromTemplateSucceeded","categorySelected","createSpecSucceeded","createProjectSucceeded","createPTProjectSucceeded","getVsbEnv","newSessionId","newSession","NEW_TEMPLATE_MODAL_FORM","NEW_MASTER_COLLABORATORS_FORM","CREATE_NEW_SPEC_MODAL_FORM","NEW_PROJECT_MODAL_FORM","NEW_PROJECT_CONTRIBUTORS_FORM","vsbEnvUrl","ApplicationModule","reducerStateSelector","LanguageModule","debugMode","DebugModule","failedSelfDrawingRules","failedSelfDrawingRulesLoading","printFormats","searchedSpecs","searchedSpecsCount","searchedSpecsHasNextPage","searchingGetMasterSpecById","searchingGetTemplateSpecById","currentSpecFiles","specPrintConfigs","isUpdatingSpecFiles","copyStatus","isLinkingOrUnlinkingGenericProduct","ptSpecDndMenu","masterSpecDrawingState","masterHasNextPage","masterCount","templateHasNextPage","templateCount","specHasNextPage","templateSpecOffset","masterSpecOffset","DELETE_ALTERNATIVE_PRODUCT_SUCCEEDED","alternativeIndex","specsResponse","stateSpecs","specResponse","currentDrawingId","drawingsPath","updatedDrawing","existingDrawingIndex","updatedDrawingList","UPDATE_RULES_MISSING","SET_PT_SPEC_DND_MENU","defaultSpec","targetProjectIndex","targetDrawingIndex","pId","sId","dId","sType","SpecModule","nonFirmCollaborators","logInAsUsers","usersById","isFetchingFirmById","selectedFirm","isSearchingAllUsers","allUsers","allUsersCount","isSearchingAllFirms","allFirms","allFirmsCount","drawerOfficeId","superFirmAndChildFirms","officeDiscounts","searchedContacts","searchedContactsHasNextPage","searchedContactsBySearchTerm","totalSearchedContactsCount","totalQuickSearchedContactsCount","officeLoading","usersTrackingProject","searchedContactsFindIndex","currentPasswordCorrect","quickSearchContactsLoading","savedFilters","gettingFilterList","userPreference","quoteOfficesByFirm","brandRepCategoryByManufacturer","brandRepManufacturerByCategory","isLoadingBrandRep","manufacturerRankings","attachmentFolderTemplates","currentAttachmentFolderTemplateFolders","currentAttachmentFolderTemplateId","defaultAttachmentFolderTemplate","isGettingApps","isGettingAclRoles","isAddingAclRole","isDeletingAclRole","uploadUsersProgress","DELETE_OFFICE_FROM_FIRM_BRAND_TAGS","DELETE_ACL_ROLE_SUCCEEDED","ADD_ACL_ROLE_SUCCEEDED","indexToUpdate","GET_CONTACTS_FAIL","stateContacts","GET_COLLABORATORS_SUCCEEDED","stateCollaborators","newCollaboratorIds","DeleteContactId","statePartnerships","firstOffice","firmOfficeMap","GET_OPPORTUNITY_GROUPS_SUCCEEDED","stateUsers","CLEAR_USERS","immutableState","stateFirms","stateOffices","stateWithMutations","getCategoryByManufacturer","getManufacturerByCategory","UPDATE_MANUFACTURER_RANKING_SUCCEEDED","SET_SEARCH_MODE_SUCCEED","printFailToggle","selectedPrintType","shouldDisableContinueForPrint","bulkDownloadStatus","SET_PRINT_TYPE","bulkDownloadJobs","jobIndex","PrintModule","AtsSvgCheckmark","AtsSvgSignupFooter","getTerms","SignUpSecondStep","selectedRowTypeId","handleClickNextButtonInStep2","valuesWithOrganization","selectRoleType","handleCustomeRole","SelectableCard","toLoginPage","StepperComponent","otherSelected","roleTypeId","roleTypeValue","step3Role","RegisterSuccess","thanksTextContainer","thanksTitle","thanksBody","clickTheLink","returnLoginPage","urlMatches","detailedManufacturerMap","getPimStatuses","getLeadSources","getAllCategories","listSaga","ListModule","ProductBrochureSpecDrawingProduct","inPage","productContentFunction","drawingDisplaySelect","productDeleteButton","cardActionContainer","ProductBrochurePages","newItemOrder","getItemStyle","ProductStepBox","dropContainer","ProductBrochure","id2List","droppable2","productDataParsed","handleContinue","productJS","controlsBar","selectProjectById","ALTERNATES_REGIONS_MAP","ALTERNATES_REGIONS","targetGeonameId","selectEmpty","getTitle","ADD_MANUFACTURER","EDIT_MANUFACTURER","ADD_PREFERENCE","EDIT_PREFERENCE","ManufacturerEditView","targetedManufacturer","editManufacturer","duplicateManufacturer","targetManufacturerId","rankingOutOfRange","PreferenceEditView","targetedBrand","targetedCategory","duplicateCombination","ContentView","EditModal","selectedManufacturer","selectedPreference","manufacturerPrefereneces","mr","targetSelectedManufacturer","valueToSubmit","getDisabledStatus","descendingComparator","getComparator","stableSort","stabilizedThis","EnhancedTableHead","onRequestSort","headCells","headCell","useToolbarStyles","backBtn","EnhancedTableToolbar","openModal","onBack","searchTerms","pagingation","EnhancedTable","onOpenEditModal","onSelectManufacturer","setOrder","setOrderBy","setRowsPerPage","deleteInfo","setDeleteInfo","setSearchTerms","handleOnDeleteClick","handleOnEditClick","handleOnAlertClose","mappedPreferences","targetedManufacturerId","altManuf","mappedRankings","emptyRows","switchContainer","switch","setSelectedManufacturer","setEditManufacturer","setSelectedPreference","Detector","isOnline","setIsOnline","onlineEventListener","offlineEventListener","online","OfflineErrorModal","networkConditionChangeHandler","SnackbarContent","reportProblemIcon","dashboardWidgetConfigs","dashboardWidgetConfig","DashboardPage","selectMasterId","masterColumns","handleAddMaster","masterListFilterUniqueKey","masterColumnsList","SPEC_MASTER_LIST_COLUMNS","searchedMastersSelect","searchedMastersHasNextPageSelect","searchingMastersSelect","masterColumnsListSelect","userCanManageMastersSelect","RAW_ALL_PIPES_WHITELIST","RAW_ALL_PLASTIC_PIPES_WHITELIST","PVC_WHITELIST","CPVC_WHITELIST","ABS_WHITELIST","PEX_WHITELIST","PPPE_WHITELIST","ALL_PLASTIC_PIPES_WHITELIST","COPPER_WHITELIST","CAST_IRON_WHITELIST","STAINLESS_STEEL_WHITELIST","GLASS_WHITELIST","ALL_PIPES_WHITELIST","STANDARD_WHITELIST","DEFAULT_PIPE_FILTER_LIST","groupCaption","materials","materialLabel","standards","checkboxLabel","selectedStandards","setSelectedStandards","setWhitelist","updateWhitelist","highestRank","newWhitelistStandardKey","handleChecked","newStandards","material","materialIndex","standardIndex","standardsMap","standardsArray","selectedStandard","pseudoClasses","_options$disableGloba","disableGlobal","_options$productionPr","_options$seed","seed","seedPrefix","queryInput","supportMatchMedia","matchMedia","_props$options","_props$options$defaul","defaultMatches","_props$options$matchM","_props$options$noSsr","noSsr","_props$options$ssrMat","ssrMatchMedia","setMatch","queryList","updateMatch","setTranslateValue","fakeTransform","transformValues","getTranslateValue","webkitTransform","childrenRef","handleRefIntermediary","_props$padding","_props$stickyHeader","borderSpacing","captionSide","localTheme","outerTheme","mergeOuterLocalTheme","mapEventPropToEvent","eventProp","_props$mouseEvent","mouseEvent","_props$touchEvent","touchEvent","movedRef","handleNodeRef","mappedTouchEvent","mappedMouseEvent","_props$active","alternativeLabel","_props$completed","_props$expanded","_props$autoHideDurati","ClickAwayListenerProps","ContentProps","_props$disableWindowB","disableWindowBlurListener","resumeHideDuration","timerAutoHide","setAutoHideTimer","autoHideDurationParam","handlePause","handleResume","top1","bottom1","top3","bottom3","right3","left3","anchorOriginTopCenter","anchorOriginBottomCenter","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft","StepIcon","textAnchor","_props$alternativeLab","StepIconComponentProp","labelContainer","getStyleValue","TextareaAutosize","_props$rowsMin","rowsMin","rowsMinProp","shadowRef","syncHeight","inputShallow","singleRowHeight","outerHeightStyle","_props$inputProps","inputPropsProp","renderSuffix","handleInputRefWarning","handleInputPropsRefProp","handleInputRefProp","handleInputRef","checkDirty","adornedEnd","onAnimationStart","inputHiddenLabel","inputAdornedStart","inputAdornedEnd","placeholderHidden","placeholderVisible","_styles","_defaultTheme","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","isPureReactComponent","__self","__source","_owner","keyPrefix","ReactCurrentDispatcher","ReactCurrentBatchConfig","ReactCurrentOwner","IsSomeRendererActing","Profiler","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","createFactory","_ctor","qa","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","registrationName","va","wa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","Ua","Va","Wa","Xa","Sa","Ta","Ra","Ya","Za","$a","ab","db","eb","gb","hb","ib","jb","kb","lb","mb","qb","_debugOwner","_debugSource","_valueTracker","stopTracking","yb","zb","_wrapperState","initialChecked","Ab","Bb","Cb","Db","Eb","Gb","Fb","Hb","defaultSelected","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","namespaceURI","MSApp","execUnsafeLocalFunction","Rb","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","Xb","Yb","Zb","$b","dc","alternate","effectTag","ec","memoizedState","dehydrated","hc","sibling","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPersistent","mc","nc","srcElement","correspondingUseElement","oc","qc","topLevelType","targetInst","eventSystemFlags","tc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","pointerId","Mc","Nc","Pc","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","unstable_UserBlockingPriority","gd","hd","Oc","jd","gridArea","kd","ld","menuitem","embed","hr","keygen","wbr","od","pd","qd","rd","td","ud","vd","wd","compareDocumentPosition","xd","HTMLIFrameElement","yd","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","ee","eventPool","fe","destructor","de","getPooled","eventPhase","isTrusted","he","je","ke","documentMode","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","ve","which","te","ue","we","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","Oe","Alt","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","relatedTarget","fromElement","toElement","movementX","movementY","We","tangentialPressure","tiltX","tiltY","twist","pointerType","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","cf","ef","ff","gf","hf","jf","anchorNode","focusNode","focusOffset","kf","lf","elapsedTime","pseudoElement","mf","clipboardData","nf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Apps","Scroll","MozPrintableKey","qf","rf","sf","uf","vf","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Df","Ef","Ff","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","cg","dg","eg","hg","ig","jg","kg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","ug","updateQueue","baseQueue","vg","wg","suspenseConfig","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","Lg","Mg","Ng","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","bh","dh","eh","gh","memoizedProps","revealOrder","ih","jh","kh","mh","oh","ph","qh","rh","uh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","xh","Ah","Bh","Ch","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","ei","gi","pendingContext","ni","retryTime","ji","unstable_avoidThisFallback","isBackwards","rendering","renderingStartTime","tailExpiration","tailMode","wasMultiple","ui","vi","xi","zi","Ai","Bi","Ci","Fi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","Di","Ni","Oi","Qi","Ri","_reactRootContainer","Si","Ui","Vi","Wi","Xi","$i","aj","componentStack","dj","fj","gj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","wb","activeElementDetached","focusedElem","Tj","setStart","addRange","setEnd","vb","Uj","Vj","Wj","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","Lj","lk","Events","findFiberByHostInstance","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","unstable_forceFrameRate","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","_cookie2","_querystring2","_localStorage2","_navigator2","_htmlTag2","_subdomain2","Browser","detectors","lookupQuerystring","lookupCookie","lookupLocalStorage","excludeCacheFor","lookupFromUrlIndex","lookupFromPathIndex","addDetector","detectionOrder","detected","detectorName","cleanedLng","cacheName","toGMTString","nameEQ","cookieMinutes","cookieDomain","hasLocalStorageSupport","htmlTag","lookupFromSubdomainIndex","_ajax","_ajax2","addPath","allowMultiLoading","crossDomain","ajax","loadUrl","addQueryString","queryStringParams","overrideMimeType","customHeaders","tagRE","parseTag","pushTextNode","ignoreWhitespace","byTag","inComponent","isComment","attrRE","voidElements","expectingValueAfterEquals","attrString","rootEl","arrayPrefixGenerators","brackets","comma","pushToArray","valueOrArray","toISO","addQueryPrefix","allowDots","charsetSentinel","encoder","encodeValuesOnly","formatter","serializeDate","skipNulls","strictNullHandling","generateArrayPrefix","valuesJoined","objKeys","normalizeStringifyOptions","arrayLimit","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","numberStr","parseArrayValue","parseKeys","givenKey","valuesParsed","leaf","cleanRoot","parseObject","normalizeParseOptions","tempObj","cleanStr","skipIndex","bracketEqualsPos","encodedVal","parseValues","formPropTypes","fieldArrayPropTypes","fieldArrayMetaPropTypes","fieldArrayFieldsPropTypes","fieldPropTypes","fieldMetaPropTypes","fieldInputPropTypes","hasSubmitFailed","hasSubmitSucceeded","isAsyncValidating","getFormSubmitErrors","getFormSyncWarnings","getFormAsyncErrors","getFormMeta","getFormInitialValues","getFormError","FieldArray","Fields","FormSection","FormName","_actions","_defaultShouldAsyncValidate","_defaultShouldValidate","_defaultShouldError","_defaultShouldWarn","_Form","_FormName","_FormSection","_SubmissionError","_propTypes","_Field","_Fields","_FieldArray","_formValueSelector","_getFormError","_getFormNames","_getFormValues","_getFormInitialValues","_getFormSyncErrors","_getFormMeta","_getFormAsyncErrors","_getFormSyncWarnings","_getFormSubmitErrors","_isAsyncValidating","_isDirty","_isInvalid","_isPristine","_isSubmitting","_hasSubmitSucceeded","_hasSubmitFailed","_reducer","_reactLifecyclesCompat","_ReduxFormContext","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","secret","getShim","ReactPropTypes","bigint","objectOf","checkPropTypes","_prefixName","_validateComponentProp","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","isAsyncMode","isConcurrentMode","isContextProvider","isForwardRef","isFragment","isPortal","isProfiler","isStrictMode","isSuspense","typeOf","_createField","_createClass2","_invariant","_ConnectedField","_shallowCompare","_plain","_reactRedux","_createFieldProps2","_onChangeValue","_eventConsts","_isNil2","setCacheAdd","setCacheHas","arrayPattern","pathPart","nextPart","assureComplexProps","originalList","originalListValue","mergeLists","_createFields","_ConnectedFields","validateNameProp","_isFieldArray","warnAndValidatePropType","fieldsPropTypes","getFieldWarnAndValidate","ConnectedFields","registerFields","connected","onChangeFns","onFocusFns","onBlurFns","prepareEventHandlers","nextName","_fields","_Object$keys$reduce","connectedProps","_createFieldArray","_ConnectedFieldArray","wrapError","ConnectedFieldArray","_mapValues2","_redux","_createFieldArrayProps","thisValue","nextValueItemsSame","nextValueItemsOrderChanged","rerenderOnEveryChange","_createFormValueSelector","_createFormValues","_isEqual2","_isEmpty2","firstArg","FormValues","updateComponent","valuesMap","_rest$reduce","resolvedFirstArg","_valuesMap","setComponent","_createReduxForm","_merge4","_hoistNonReactStatics","_isPromise","_asyncValidation","_silenceEvent","_silenceEvents","_generateValidator","_handleSubmit","_getDisplayName","_isHotReloading","_createReducer","_isFunction2","_deleteInWithCleanUp","shouldDelete","initialValuesPath","initialValueComparison","_behaviors","deleteInWithCleanUp","plainDeleteInWithCleanUp","doSplice","doPlainSplice","rootKeys","nonValuesValue","behaviors","_ref2$meta","_ref3$meta","_ref6$meta","_ref9$meta","_ref10$meta","_ref13$meta","_ref14$meta","fieldCurrentValue","_ref16$meta","previouslyActive","_ref18$meta","keepSubmitSucceeded","mapData","previousInitialValues","newInitialValues","overwritePristineValue","previousInitialValue","newInitialValue","_ref19$payload","_ref26","_ref26$payload","_ref27","_ref28","_ref28$payload","_ref29","_ref29$payload","decorate","callPlugin","processed","receiveAllFormActions","isReduxFormAction","byForm","shouldDeleteDefault","pathTokens","parentPath","_parent","_createValues","_prop$getFormState$co","jsxs","getDefaultState","inputState","nextDomainState","temporaryState","validateNextState","getStateName","getUnexpectedInvocationParameterMessage","reducerNames","stateName","unexpectedStatePropertyNames","reducerName","mapProps","_props$config","_props$config$initial","_props$config$reducer","_props$config$persist","Target","_temp2","ReduxReactLocal","mappedProps","whenUndefined","$get","getInitial","_setState","isBrowserLike","$$local","orElse","$$tree","$$fns","$$changed","reduceAll","_action$meta","_entries$i","$action","doHash","UInt32","Umul32","UInt16","_tree","_utils","_local","getLocalState","_middleware","_ConnectedRouter","_selectors","_createSelectors","inTimeTravelling","_getLocation","pathnameInStore","searchInStore","hashInStore","_history$location","pathnameInHistory","searchInHistory","hashInHistory","handleLocationChange","ConnectedRouterWithContext","initialRouterState","Timeout","clearFn","_clearFn","unref","enroll","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","messagePrefix","onGlobalMessage","installPostMessageImplementation","installMessageChannelImplementation","installReadyStateChangeImplementation","cachedGuess","zones","guesses","momentVersion","major","minor","charCodeToInt","unpackBase60","fractional","arrayToInt","mapIndices","unpack","untils","intToUntil","abbrs","population","Zone","packedString","_set","Country","country_name","zone_names","OffsetAt","timeString","toTimeString","ZoneScore","offsetScore","abbrScore","findChange","sortZoneScores","addToGuesses","guessesForUserOffsets","guessesOffset","offsetsLength","filteredGuesses","rebuildGuess","intlName","zoneScore","startYear","userOffsets","zoneScores","getZone","scoreOffsetAt","addZone","packed","addLink","normal0","normal1","needsOffset","isUnixTimestamp","unpacked","zone_name","country_code","offsetNext","offsetPrev","moveAmbiguousForward","moveInvalidForward","offsetAt","dataVersion","_zones","_links","_countries","country_zones","addCountries","zoneExists","didShowError","ignoreCache","zonesForCountry","with_offset","getCountry","abbrWrap","_z","resetZoneWrap","defaultZone","setDefault","_arrays2","_reactAutowhatever2","alwaysTrue","alwaysRenderSuggestions","highlightedSectionIndex","highlightedSuggestionIndex","highlightedSuggestion","valueBeforeUpDown","justPressedUpDown","justMouseEntered","pressedSuggestion","onDocumentMouseDown","onDocumentMouseUp","autowhatever","willRenderSuggestions","revealSuggestions","resetHighlightedSuggestion","onSuggestionHighlighted","getHighlightedSuggestion","suggestionIndex","getSuggestion","shouldResetValueBeforeUpDown","multiSection","getSectionSuggestions","suggestionElement","startNode","_onFocus","autowhateverInputProps","justClickedOnSuggestionsContainer","blurEvent","maybeCallOnChange","newHighlightedSectionIndex","newHighlightedItemIndex","getSuggestionValueByIndex","updateHighlightedSuggestion","closeSuggestions","_newValue","willCloseSuggestions","renderSuggestionData","getQuery","renderItemsContainer","renderItem","renderItemData","getSectionItems","highlightedItemIndex","mapToAutowhateverTheme","storeAutowhateverRef","onSuggestionMouseEnter","onSuggestionMouseDown","onSuggestionClick","_getSuggestionIndices","getSuggestionIndices","findSuggestionElement","clickedSuggestion","clickedSuggestionValue","onSuggestionMouseLeave","onSuggestionTouchStart","onSuggestionTouchMove","_sectionIterator2","_reactThemeable2","_SectionTitle2","_ItemsList2","emptyObject","Autowhatever","storeInputReference","storeItemsContainerReference","onHighlightedItemChange","highlightedItem","getItemId","isInputFocused","nextPrev","_this$sectionIterator","sectionIterator","_this$sectionIterator2","setSectionsItems","setSectionIterator","setTheme","ensureHighlightedItemIsVisible","sectionsItems","sectionsLengths","allSectionsAreEmpty","itemsCount","sectionKeyPrefix","isFirstSection","storeItemsListReference","itemOffsetRelativeToContainer","renderedItems","renderSections","renderItems","ariaActivedescendant","itemsContainerId","containerOpen","inputOpen","itemsContainerOpen","itemsList","itemFirst","itemHighlighted","sectionContainerFirst","_position","nextNonEmptySectionIndex","_position2","prevNonEmptySectionIndex","_objectAssign","_objectAssign2","truthy","classNameDecorator","_compareObjects2","SectionTitle","_Item2","ItemsList","storeHighlightedItemReference","isItemPropsFunction","itemPropsObj","allItemProps","storeItemReference","suggestionFirst","suggestionHighlighted","refLength","letLength","evtName","useCapture","customOffset","containerPosition","_getElementPosition2","elementPosition","_getElementPosition","_createBreakpoints","_createMixins","_createPalette","_createTypography","_shadows","_shape","_createSpacing","_transitions","_zIndex","_indigo","_pink","_red","_orange","_blue","_green","_colorManipulator","_common","_grey","rgbToHex","intToHex","buggy","gOPS","$assign","aLen","isEnum","$values","isEntries","$getPrototypeOf","TO_STRING","META","$fails","wks","wksDefine","enumKeys","_create","gOPNExt","$GOPD","$GOPS","$DP","gOPN","$JSON","_stringify","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","findChild","setSymbolDesc","protoDesc","$defineProperties","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","setDesc","FREEZE","preventExtensions","setMeta","NEED","fastKey","getWeak","onFreeze","windowNames","getWindowNames","forOf","$Promise","_v","_h","unhandled","onunhandledrejection","onrejectionhandled","$reject","$resolve","$index","forbiddenField","isArrayIter","getIterFn","BREAK","RETURN","un","Observer","standalone","callbackfn","arrayLike","mapfn","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","fromArrayLike","fromArrayBuffer","isEncoding","actual","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","indexSize","valLength","readUInt16BE","foundIndex","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","_DraggableCore","_positionFns","_toPrimitive","dragged","slackX","slackY","newStateX","newStateY","prevPropsPosition","isElementSVG","_this$props$nodeRef$c","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","draggableCoreProps","svgTransform","validPosition","transformOpts","browserPrefixToStyle","getPrefix","_window$document","shouldCapitalize","kebabToTitleCase","eventsFor","dragEventFor","coreEvent","handleDrag","handleDragStop","MouseEvent","initMouseEvent","zlib_deflate","ZStream","Deflate","windowBits","memLevel","gzip","ended","strm","deflateInit2","deflateSetHeader","deflateSetDictionary","_dict_set","deflate","deflator","_mode","onData","deflateEnd","deflateRaw","configuration_table","trees","MAX_MATCH","MIN_LOOKAHEAD","HCRC_STATE","BUSY_STATE","FINISH_STATE","zero","flush_pending","pending_buf","pending_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","MIN_MATCH","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","_tr_init","deflateReset","max_block_size","max_start","deflateInit","old_flush","beg","hcrc","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","LITERALS","L_CODES","D_CODES","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","bi_reverse","gen_codes","bits","next_code","init_block","END_BLOCK","bi_windup","smaller","_m2","pqdownheap","compress_block","ltree","dtree","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","zlib_inflate","GZheader","Inflate","inflateInit2","inflateGetHeader","inflateSetDictionary","inflator","next_out_utf8","utf8str","allowBufError","inflateEnd","ungzip","inflate_fast","inflate_table","BAD","zswap32","InflateState","havedict","dmax","wbits","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","ncode","nlen","ndist","have","work","lendyn","distdyn","sane","was","inflateResetKeep","inflateReset","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","_in","_out","from_source","here_bits","here_op","here_val","last_bits","last_op","last_val","here","hbuf","inf_leave","xflags","extra_len","inflateInfo","s_window","lcode","dcode","lmask","dmask","dolen","dodist","MAXBITS","lbase","lext","dbase","dext","lens_index","table_index","incr","huff","base_index","offs","extra_index","_AlphaPointer2","pointer","_ref$className","Alpha","flattenNames","_isString3","_forOwn3","_isPlainObject3","_map3","things","thing","_cloneDeep3","toMerge","autoprefix","_forOwn2","msBorderRadius","MozBorderRadius","OBorderRadius","WebkitBorderRadius","msBoxShadow","MozBoxShadow","OBoxShadow","WebkitBoxShadow","WebkitTouchCallout","KhtmlUserSelect","MozUserSelect","msUserSelect","WebkitUserSelect","WebkitBoxFlex","MozBoxFlex","WebkitFlexBasis","WebkitJustifyContent","msTransition","MozTransition","OTransition","WebkitTransition","msTransform","MozTransform","OTransform","otherElementStyles","otherStyle","Hover","handleMouseOver","handleMouseOut","Active","_Checkboard2","calculateChange","unbindEventListeners","initialA","containerHeight","checkboardCache","serverCanvas","toDataURL","EditableInput","VALID_KEY_CODES","blurValue","setUpdatedValue","getNumberValue","getArrowOffset","dragLabel","dragMax","getValueObjectWithLabel","arrowOffset","isPercentage","getIsPercentage","hideLabel","Hue","hue","Raised","zDepth","_ref$styles","passedStyles","Saturation","_throttle2","saturation","_container$getBoundin","bright","trimLeft","trimRight","tinycolor","inputToRGB","_originalInput","_r","_roundA","_gradientType","gradientType","_ok","stringInputToObject","isValidCSSUnit","rgbToRgb","convertToPercentage","hsvToRgb","boundAlpha","bound01","rgbToHsl","rgbToHsv","allow3Char","pad2","allow4Char","convertDecimalToHex","rgbaToArgbHex","_desaturate","clamp01","_saturate","_greyscale","desaturate","_lighten","_brighten","_darken","_spin","_complement","polyad","_splitcomplement","_analogous","slices","_monochromatic","modification","isDark","getBrightness","isLight","getOriginalInput","getFormat","getAlpha","RsRGB","GsRGB","BsRGB","setAlpha","toHsvString","toHslString","toHexString","toHex8","toHex8String","toRgbString","toPercentageRgb","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex8String","secondHex8String","formatSet","formattedString","hasAlpha","_applyModification","brighten","saturate","greyscale","_applyCombination","analogous","complement","monochromatic","splitcomplement","triad","tetrad","fromRatio","newColor","color1","color2","rgb1","rgb2","readability","isReadable","wcag2","wcag2Parms","validateWCAG2Parms","mostReadable","baseColor","colorList","includeFallbackColors","bestColor","bestScore","isOnePointZero","processPercent","parseIntFromHex","convertHexToDecimal","matchers","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","hsva","named","parms","Swatch","_interaction","_ref$onClick","_ref$title","_ref$focusStyle","focusStyle","AlphaPointer","_BlockSwatches2","triangle","BlockSwatches","_map2","swatches","Circle","_CircleSwatch2","circleSize","circleSpacing","CircleSwatch","_reactcss","_ChromeFields2","_ChromePointer2","_ChromePointerCircle2","controls","toggles","ChromeFields","_UnfoldMoreHorizontalIcon2","toggleViews","showHighlight","hideHighlight","iconHighlight","_ref$fill","_ref$width","_ref$height","_ref$style","ChromePointer","ChromePointerCircle","Compact","_CompactColor2","_CompactFields2","CompactColor","CompactFields","HEXwrap","HEXinput","HEXlabel","RGBwrap","RGBinput","RGBlabel","Github","_GithubSwatch2","triangleShadow","GithubSwatch","hoverSwatch","_HuePointer2","SliderPointer","Material","Hex","Photoshop","_PhotoshopFields2","_PhotoshopPointerCircle2","_PhotoshopPointer2","_PhotoshopButton2","_PhotoshopPreviews2","currentColor","_props$styles","_props$className","onAccept","fieldSymbols","PhotoshopPointerCircle","triangleBorder","Extend","leftInside","rightInside","PhotoshopButton","PhotoshopPreviews","new","Sketch","_SketchFields2","_SketchPresetColors2","sliders","activeColor","SketchFields","single","double","SketchPresetColors","swatchWrap","colorObjOrString","_SliderSwatches2","_SliderPointer2","SliderSwatches","_SliderSwatch2","epsilon","SliderSwatch","Swatches","_SwatchesGroup2","SwatchesGroup","_SwatchesColor2","SwatchesColor","_CheckIcon2","Twitter","hexcode","elementUtilsMaker","listenerHandlerMaker","idGeneratorMaker","idHandlerMaker","reporterMaker","browserDetector","batchProcessorMaker","stateHandler","objectStrategyMaker","scrollStrategyMaker","getOption","idHandler","idGenerator","defaultIdHandler","reporter","batchProcessor","globalOptions","callOnAdd","detectionStrategy","eventListenerHandler","elementUtils","desiredStrategy","importantCssRules","strategyOptions","important","onReadyCallbacks","listenTo","onResizeCallback","elementsReady","onReadyCallback","initState","isDetectable","markBusy","makeDetectable","markAsDetectable","startSize","uninstall","cleanState","initDocument","targetDocument","busy","getListeners","idCount","attachFunction","Batch","topLevel","bottomLevel","asyncProcess","autoProcess","asyncFrameHandler","processBatch","processingBatch","processBatchAsync","localAsyncProcess","buildCssTextString","seperator","getObject","OBJECT_STYLE","positionCheckPerformed","mutateDom","alterPositionStyles","removeRelativeStyles","getNumericalValue","contentDocument","checkForObjectDocumentTimeoutId","objectDocument","injectObject","listenerProxy","hasState","scrollbarSizes","widthSize","heightSize","getScrollbarSizes","detectionContainerClass","styleId","containerClass","injectStyle","containerAnimationClass","containerAnimationActiveClass","injectScrollStyle","getExpandElement","getShrinkElement","isUnrendered","widthCSS","heightCSS","storeStyle","storeCurrentSize","lastWidth","lastHeight","getWidthOffset","getHeightOffset","getExpandWidth","getExpandHeight","positionScrollbars","expandWidth","expandHeight","shrinkWidth","getShrinkWidth","shrinkHeight","getShrinkHeight","injectContainerElement","addAnimationClass","injectScrollElements","rootContainer","scrollbarHeight","containerContainerStyle","expandStyle","shrinkStyle","expandChildStyle","shrinkChildStyle","containerContainer","shrinkChild","onExpandScroll","onShrinkScroll","onExpand","onShrink","registerListenersAndPositionElements","updateChildSizes","getExpandChildElement","updateDetectorElements","sizeChanged","areElementsInjected","notifyListenersIfNeeded","lastNotifiedWidth","lastNotifiedHeight","finalizeDomMutation","install","storeStartSize","isInShadowRoot","getRootNode","isInDocument","isDetached","arguments_","atBegin","compareContext","bHasOwnProperty","punycode","Url","slashes","urlParse","relative","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","slashesDenoteHost","splitter","uSplit","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","toASCII","esc","qm","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","adapt","numPoints","baseMinusTMin","basic","oldi","baseMinusT","inputLength","bias","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","sep","maxKeys","kstr","vstr","stringifyPrimitive","ks","strictUriEncode","objectAssign","decodeComponent","keysSorter","extract","queryStart","parserForArrayFormat","encoderForArrayFormat","val2","singleMatcher","multiMatcher","decodeComponents","encodedURI","replaceMap","customDecodeURIComponent","_invariant2","_authWrapper2","connectedDefaults","FailureComponent","allArgs","redirectPathSelector","allowRedirectBackFn","ConnectedFailureComponent","DecoratedComponent","isAuthenticated","isAuthenticating","_hoistNonReactStatics2","UserAuthWrapper","_gtag","_excluded2","_excluded3","_testMode","_currentMeasurementId","_hasLoadedGA","_isQueuing","_queueGtag","GA_MEASUREMENT_ID","gtagUrl","dataLayer","gtag","gaOptions","mapFields","cookieUpdate","cookieExpires","cookieFlags","clientId","anonymizeIp","contentGroup1","contentGroup2","contentGroup3","contentGroup4","contentGroup5","allowAdFeatures","allowAdPersonalizationSignals","nonInteraction","hitCallback","initConfigs","trackingId","gtagOptions","_options$testMode","testMode","_loadGA","mergedGtagOptions","_toGtagOptions","queues","fieldsObject","_gaCommand","eventCategory","eventAction","eventLabel","eventValue","event_category","event_label","non_interaction","_gaCommandSendEvent","hitType","timingCategory","timingVar","timingValue","timingLabel","_this$_toGtagOptions","page_path","page_title","page_location","_gaCommandSendPageview","_args$2","_gaCommandSendEventParameters","_gaCommandSendPageviewParameters","_gaCommandSendTiming","_gaCommandSend","_gaCommandSet","readyCallback","optionsOrName","fieldObject","titleCase","redactingEmail","_str","toTitleCase","redactEmail","smallWords","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","parentSampled","parentSpanId","tracingContextFromHeaders","sentryTrace","baggage","traceparentData","propagationContextFromHeaders","generateSentryTraceHeader","sampledString","setMountNode","_props$row","borderTopLeftRadius","borderTopRightRadius","WebkitTextFillColor","nextItem","nextElementSibling","previousItem","previousElementSibling","textCriteriaMatches","textCriteria","repeating","moveFocus","currentFocus","traversalFunction","wrappedOnce","_props$autoFocusItem","_props$disableListWra","textCriteriaRef","previousKeyMatched","noExplicitWidth","currTime","keepFocusOnCurrent","subheaderProp","subheaderTypographyProps","titleProp","focusedState","setFocusedState","_React$useContext","_React$useContext$dis","_props$textColor","_props$wrapped","textColorInherit","textColorPrimary","textColorSecondary","extended","inherit","sizeMedium","defaultConnector","_props$activeStep","_props$connector","connectorProp","_props$nonLinear","nonLinear","childrenArray","lineVertical","lineHorizontal","borderTopStyle","borderLeftStyle","invisibleProp","_props$overlap","_props$showZero","showZero","badge","RADIUS_STANDARD","RADIUS_DOT","anchorOriginTopRightRectangle","anchorOriginBottomRightRectangle","anchorOriginTopLeftRectangle","anchorOriginBottomLeftRectangle","anchorOriginTopRightCircle","anchorOriginBottomRightCircle","anchorOriginTopLeftCircle","anchorOriginBottomLeftCircle","emphasis","styleFunctionSx","styleFunction","newStyleFunction","defaultBreakpoints","handleBreakpoints","styleFromPropValue","themeBreakpoints","_themeBreakpoints","_options$cssProperty","cssProperty","themeKey","themeMapping","propValueFinal","getBorder","borders","flexbox","sizing","marginX","marginY","paddingX","paddingY","getCssProperties","_prop$split","_prop$split2","spacingKeys","getStyleFromPropValue","cssProperties","createUnarySpacing","componentCreator","styledWithoutDefault","itemOrItems","staticWrapperRoot","StaticWrapper","ModalDialog","onDismiss","onClear","onSetToday","okLabel","cancelLabel","clearLabel","todayLabel","showTodayButton","wider","dialogRootWider","withAdditionalAction","useIsomorphicEffect","runKeyHandler","keyHandlers","useKeyDown","keyHandlersRef","ModalWrapper","DialogProps","showTabs","DateInputProps","Enter","InlineWrapper","PopoverProps","VariantContext","getWrapperFromVariant","Rifm","_del","_handleChange","noOp","refuse","fv","_hKD","_hKU","daySelected","dayDisabled","Day","replaceClassName","origClass","classToRemove","removeClass","baseVal","CSSTransition","appliedClasses","_this$resolveArgument","resolveArguments","removeClasses","addClass","_this$resolveArgument2","_this$resolveArgument3","getClassNames","isStringClassNames","activeClassName","doneClassName","hasClass","_addClass","_this$appliedClasses$","isYearOnlyView","isYearAndMonthViews","DayWrapper","dayInCurrentMonth","slideTransition","transitionContainer","slideEnterActive","slideExit","SlideTransition","transKey","slideDirection","transitionClasses","enterActive","exitActive","childFactory","switchHeader","daysHeader","dayLabel","CalendarHeader","currentMonth","onMonthChange","leftArrowButtonProps","rightArrowButtonProps","disablePrevMonth","disableNextMonth","KeyDownListener","Calendar","loadingQueue","returnVal","disableFuture","disablePast","firstEnabledMonth","lastEnabledMonth","shouldDisableDate","isFinish","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","renderDay","selectedDate","currentMonthNumber","isDayInCurrentMonth","dayComponent","handleDaySelect","closestEnabledDate","backward","findClosestEnabledDate","allowKeyboardControl","loadingElement","shouldDisableNextMonth","nextDate","nextMonth","lastDate","lastMonth","ClockType","WithUtils","withUtils","ClockPointer","toAnimateTransform","previousType","isInner","hasSelected","animateTransform","noPoint","getAngleValue","deg","angleStep","Clock","isPointerInner","clock","minutesStep","squareMask","touchActions","clockNumber","clockNumberSelected","ClockNumber","transformStyle","getHourNumbers","currentHours","hourNumbers","endHour","getMinutesNumbers","ClockView","onHourChange","onMinutesChange","onSecondsChange","currentMeridiem","getMeridiem","updatedTimeWithMeridiem","convertToMeridiem","minutesValue","updatedTime","secondsValue","datePickerDefaultProps","invalidDateMessage","yearSelected","yearDisabled","Year","YearSelection","onYearChange","animateYearScrolling","currentVariant","selectedYearRef","currentYear","onYearSelect","yearNumber","monthSelected","monthDisabled","Month","handleSelection","MonthSelection","shouldDisableMonth","utilMinDate","utilMaxDate","isBeforeFirstEnabled","isAfterLastEnabled","onMonthSelect","monthNumber","monthText","viewsMap","containerLandscape","pickerView","pickerViewLandscape","disableToolbar","openTo","unparsedMinDate","unparsedMaxDate","ToolbarComponent","isLandscape","customOrientation","setOrientation","useIsLandscape","openView","setOpenView","handleChangeAndOpenNext","nextViewToOpen","useViews","toolbarTxt","toolbarBtnSelected","ToolbarText","ToolbarButton","typographyClassName","toolbarBtn","toolbarLandscape","PickerToolbar","PureDateInput","inputVariant","openPicker","TextFieldComponent","PureDateInputProps","getDisplayDate","invalidLabel","emptyLabel","labelFunc","getComparisonMaxDate","getComparisonMinDate","KeyboardDateInput","KeyboardButtonProps","InputAdornmentProps","rifmFormatter","inputMask","makeMaskFromFormat","maskedDateFormatter","useDateValues","initialFocusedDate","nowRef","useValueToDate","usePickerState","autoOk","setIsOpenState","setIsOpen","newIsOpen","useOpenState","pickerDate","setPickerDate","acceptDate","pickerProps","strictCompareDates","pickerState","makePickerWithState","useOptions","getCustomProps","DefaultToolbarComponent","dateRangeIcon","hideTabs","timeIcon","injectedProps","dateLandscape","DatePickerToolbar","isYearOnly","isYearAndMonth","getDefaultFormat","getFormatByViews","DatePicker","KeyboardDatePicker","displayDate","innerInputValue","setInnerInputValue","dateValue","parseInputString","innerInputProps","cachedType","inDOM","detectScrollType","getNormalizedScrollLeft","easeInOutSin","ScrollbarSize","setMeasurements","prevHeight","TabIndicator","TabScrollButton","_props$centered","centered","_props$indicatorColor","_props$ScrollButtonCo","ScrollButtonComponent","_props$scrollButtons","_props$TabIndicatorPr","scrollStart","clientSize","indicatorStyle","setIndicatorStyle","displayScroll","setDisplayScroll","scrollerStyle","setScrollerStyle","valueToIndex","tabsRef","childrenWrapperRef","getTabsMeta","tabsMeta","tabMeta","tabsNode","scrollLeftNormalized","updateIndicatorState","_newIndicatorStyle","_getTabsMeta","correction","newIndicatorStyle","dStart","dSize","scrollValue","_options$ease","ease","moveTabsScroll","handleStartScrollClick","handleEndScrollClick","handleScrollbarSizeChange","scrollSelectedIntoView","_getTabsMeta2","nextScrollStart","_nextScrollStart","updateScrollButtonState","showStartScroll","showEndScroll","_tabsRef$current","handleTabsScroll","updateIndicator","updateScrollButtons","childIndex","childValue","conditionalElements","scrollbarSizeListener","scrollButtonsActive","showScrollButtons","scrollButtonStart","scrollButtonsDesktop","scrollButtonEnd","getConditionalElements","scroller","flexContainer","flexContainerVertical","NotchedOutline","labelWidthProp","legendLabelled","legendNotched","legend","notchedOutline","_props$defaultExpande","expandedProp","setExpandedState","_React$Children$toArr","_React$Children$toArr2","borderBottomLeftRadius","borderBottomRightRadius","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","__sentry_instrumentation_handlers__","handlerForType","refCount","originalRemoveEventListener","isSimilarToLastCapturedEvent","_sentryId","shouldSkipDOMEvent","globalListener","getEventTarget","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","startTimestamp","request_headers","__sentry_own_request__","onreadystatechangeHandler","xhrInfo","status_code","handlerData","endTimestamp","readyStateArgs","setRequestHeaderArgs","originalSend","sentryXhrData","addFetchInstrumentationHandler","instrumentFetch","originalFetch","parseFetchArgs","finishedHandlerData","erroredHandlerData","getUrlFromResource","fetchArgs","fragment","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","__SENTRY_LOADER__","__SENTRY_INSTRUMENTED__","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","parseRetryAfterHeader","headerDelay","nextClasses","getStacktrace","ignoreDepth","getClientLogConfig","getValueByStringPath","getClientStates","debugWrapper","fnName","getLogConfig","getStates","fnContext","debugContext","_config$ignoreAccents","_config$ignoreCase","_config$matchFrom","_config$stringify","_config$trim","defaultFilterOptions","_props$autoComplete","_props$autoHighlight","_props$autoSelect","_props$blurOnSelect","_props$clearOnEscape","_props$debug","_props$disableCloseOn","_props$disableOpenOnF","_props$filterOptions","_props$filterSelected","_props$getOptionSelec","_props$includeInputIn","inputValueProp","_props$componentName","ignoreFocus","firstFocus","listboxRef","setFocusedTag","defaultHighlighted","highlightedIndexRef","selectedIndexRef","setHighlightedIndex","mouse","listboxNode","scrollBottom","elementBottom","isInputValueControlled","inputValueState","_React$useState5","resetInputValue","newInputValue","_React$useState6","inputValueIsSelectedValue","focusTag","tagToFocus","changeHighlightedIndex","validOptionIndex","getNextIndex","handleValue","selectNewValue","valueItem","handleFocusTag","nextTag","validTagIndex","handleOptionMouseOver","handleOptionTouchStart","handleOptionClick","handleTagDelete","handleListboxRef","handlePopupIndicator","handleInputMouseDown","indexByKey","currentResultIndex","_props$disableSticky","disableSticky","sticky","ServerZone","DEFAULT_EVENT_PROPERTY_PREFIX","DEFAULT_SESSION_REPLAY_PROPERTY","DEFAULT_SERVER_ZONE","SESSION_REPLAY_DEBUG_PROPERTY","STORAGE_PREFIX","defaultSessionStore","currentSequenceId","sessionSequences","privacyConfig","ELEMENT_NODE","isShadowRoot","shadowRoot","isNativeShadowDom","stringifyStylesheet","stringifyRule","importStringified","isCSSImportRule","statement","layerName","supportsText","mediaText","escapeImportStatement","isCSSStyleRule","cssStringified","fixSafariColons","Mirror","idNodeMap","nodeMetaMap","getMeta","getNode","getIds","removeNodeFromMap","hasNode","oldNode","maskInputValue","maskInputOptions","maskInputFn","actualType","ORIGINAL_ATTRIBUTE_NAME","getInputType","canvasService","tagNameRegex","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path2","path3","filePath","maybeQuote","parts_1","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","absoluteToDoc","isSVGElement","ownerSVGElement","getHref","transformAttribute","collectCharacters","regEx","descriptorsStr","inParens","getAbsoluteSrcsetString","ignoreAttribute","classMatchesRegex","checkAncestors","eIndex","needMaskingText","maskTextClass","maskTextSelector","serializeNode","mirror","blockClass","blockSelector","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","DOCUMENT_NODE","compatMode","DOCUMENT_TYPE_NODE","DocumentType","publicId","systemId","needBlock","_isBlockedElement","HTMLFormElement","processedTagName","getValidTagName","stylesheet","_cssText","__context","originalGetImageData","pixel","is2DCanvasBlank","rr_dataURL","quality","canvasDataURL","blankCanvas","image_1","oldValue_1","crossOrigin","recordInlineImage_1","naturalWidth","naturalHeight","currentSrc","rr_mediaState","paused","rr_mediaCurrentTime","rr_scrollLeft","rr_scrollTop","rr_width","rr_height","rr_src","isSVG","serializeElementNode","TEXT_NODE","parentTagName","isStyle","isScript","Text","serializeTextNode","CDATA_SECTION_NODE","CDATA","COMMENT_NODE","Comment","lowerIfExists","maybeAttr","serializeNodeWithId","skipChild","slimDOMOptions","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","_j","preserveWhiteSpace","_serializedNode","sn","headFavicon","headMetaDescKeywords","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","slimDOMExcluded","serializedNode","recordChild","isShadowHost","headWhitespace","bypassOptions","_m","serializedChildNode","_o","_p","isShadow","iframeEl","fired","blankUrl","timer_1","onceIframeLoaded","iframeDoc","serializedIframeNode","styleSheetLoadTimeout","styleSheetLoaded","onceStylesheetLoaded","serializedLinkNode","maskAllInputs","slimDOM","HOVER_SELECTOR","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","CanvasContext","CanvasContext2","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","hookSetter","isRevoked","__rrweb_original__","nowTimestamp","getWindowHeight","getWindowWidth","closestElementOfNode","isIgnored","isAncestorRemoved","legacy_isTouchEvent","NodeList","DOMTokenList","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","errorHandler","StyleSheetMirror","styleIDMap","idStyleMap","getShadowHost","shadowHost","DOCUMENT_FRAGMENT_NODE","shadowHostInDom","rootShadowHost","getRootShadowHost","inDom","registerErrorHandler","unregisterErrorHandler","callbackWrapper","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","IframeManager","iframes","crossOriginIframeMap","crossOriginIframeMirror","crossOriginIframeRootIdMap","mutationCb","wrappedEmit","stylesheetManager","recordCrossOriginIframes","crossOriginIframeStyleMirror","styleMirror","handleMessage","loadListener","childSn","isAttachIframe","adoptedStyleSheets","adoptStyleSheets","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","FullSnapshot","replaceIdOnNode","patchRootIdOnNode","IncrementalSnapshot","Mutation","Load","DomContentLoaded","Plugin","Custom","replaceIds","Drag","TouchMove","MouseMove","ViewportResize","MediaInteraction","MouseInteraction","CanvasMutation","StyleSheetRule","StyleDeclaration","replaceStyleIds","Selection","AdoptedStyleSheet","iframeMirror","isNodeInLinkedList","DoubleLinkedList","__ln","moveKey","MutationBuffer","frozen","mapRemoves","movedMap","addedSet","movedSet","droppedSet","processMutations","processMutation","addedIds","addList","getNextId","pushAdd","addNode","currentN","iframeManager","addIframe","trackLinkElement","shadowDomManager","addShadowRoot","attachIframe","observeAttachShadow","attachLinkElement","isParentRemoved","isAncestorInSet","tailNode","unhandledNode","removeNode","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","unattachedDoc","createHTMLDocument","pname","newPriority","getPropertyPriority","genAdds","removedNodes","nodeId","isSerialized","deepDelete","processedNodeManager","inOtherBuffer","childN","canvasManager","unfreeze","unlock","addsSet","_isParentRemoved","_isAncestorInSet","mutationBuffers","composedPath","initMutationObserver","mutationBuffer","mutationObserverCtor","__rrMutationObserver","angularZoneSymbol","__symbol__","attributeOldValue","characterDataOldValue","initMoveObserver","mousemoveCb","sampling","mousemove","timeBaseline","callbackThreshold","mousemoveCallback","wrappedCb","totalOffset","timeOffset","DragEvent","initMouseInteractionObserver","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","eventKey","thisEventKey","Mouse","Touch","Pen","MouseDown","MouseUp","Click","getHandler","PointerEvent","TouchStart","TouchEnd","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","wrapEventWithUserTriggeredFlag","userTriggered","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","hookProperties","HTMLSelectElement","HTMLOptionElement","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","parentStyleSheet","recurse","getIdAndStyleId","initStyleSheetObserver","styleSheetRuleCb","CSSStyleSheet","argumentsList","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","initAdoptedStyleSheetObserver","hostId","patchTarget","ShadowRoot","originalPropertyDescriptor","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","CSSStyleDeclaration","initMediaInteractionObserver","mediaInteractionCb","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","descriptors","fontFace","fontSource","restoreHandler","initSelectionObserver","selectionCb","collapsed","updateSelection","startContainer","startOffset","endContainer","endOffset","mergeHooks","canvasMutationCb","viewportResize","mediaInteaction","styleSheetRule","styleDeclaration","canvasMutation","initObservers","mutationObserver","recordDOM","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","collectFonts","selectionObserver","pluginHandlers","WorkerFactory","sourcemapArg","sourcemap","blankPrefixLength","funcToSource","createInlineWorkerFactory","arraybuffer","lastBlobMap","transparentBlobMap","getTransparentBlobFor","offscreen","OffscreenCanvas","convertToBlob","transparentBase64","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","contextMap","variableListFor","serializeArg","Int16Array","Int8Array","Uint8ClampedArray","rr_type","HTMLImageElement","HTMLCanvasElement","serializeArgs","supportedWebGLConstructorNames","getNormalizedContextName","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","preserveDrawingBuffer","patchGLPrototype","recordArgs","hookHandler","takeFullSnapshot","CanvasManager","pendingCanvasMutations","rafStamps","latestId","invokeId","initCanvasMutationObserver","initCanvasFPSObserver","resetObservers","fps","canvasContextReset","snapshotInProgressMap","commands","timeBetweenSnapshots","lastSnapshotTime","takeCanvasSnapshots","matchedCanvas","getContextAttributes","COLOR_BUFFER_BIT","createImageBitmap","startRAFTimestamping","startPendingCanvasMutationFlusher","canvas2DReset","props2D","CanvasRenderingContext2D","initCanvas2DMutationObserver","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL","WebGL2RenderingContext","WebGL2","initCanvasWebGLMutationObserver","flushPendingCanvasMutations","setLatestRAFTimestamp","flushPendingCanvasMutationFor","valuesWithType","ProcessedNodeManager","nodeMap","periodicallyClear","thisBuffer","buffers","ShadowDomManager","shadowDoms","restoreHandlers","patchAttachShadow","iframeElement","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","wrapEvent","recording","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordAfter","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","getMirror","nodeMirror","addLoadListener","addCustomEvent","freezePage","u8","u16","u32","fleb","fdeb","clim","freb","revfl","revfd","hMap","co","rvb","r_1","flt","fdt","flm","fdm","shft","slc","wbits16","hTree","i2","maxSym","mbt","cst","i2_1","i2_2","i2_3","cl","cli","cln","clen","wfblk","dat","wblk","syms","bs","dlt","mlb","ddt","mdb","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","dm","flen","ftlen","dtlen","llm","lcts","clct","deo","et","dopt","st","plvl","lst","msk_1","bs1_1","bs2_1","hsh","lc_1","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","mmd","lin","din","dflt","zlibSync","lv","zlh","wbytes","RecordingStatus","defaultGetStoreFunc","latin1","strFromU8","TextEncoder","strToU8","promisifyRequest","oncomplete","onsuccess","onabort","defaultGetStore","dbName","storeName","indexedDB","onupgradeneeded","createObjectStore","dbp","txMode","objectStore","customStore","MAX_RETRIES_EXCEEDED_MESSAGE","STORAGE_FAILURE","getAllSessionDataFromStore","storeEventsForSession","sequenceId","sessionMap","currentSequence","RECORDING","cleanUpSessionEventsStore","sequenceToUpdate","SENT","storedSeqId","sequence","numericStoredSeqId","numericSessionId","generateHashCode","generateSessionReplayId","sendEventsList","destinationData","getServerUrl","STAGING","EU","completeRequest","qContext","seq_number","Authorization","server_url","handleReponse","responseBody","buildStatus","Failed","maxPersistedEventsSize","timeAtLastSend","shouldSplitEventsList","nextEventString","sizeOfNextEvent","trackDestination","sessionIDBStore","shouldSendStoredEvents","storedReplaySessions","storedSequencesForSession","lastSequence","sendStoredEvents","storedSessionId","storedSequences","numericSeqId","resetSequence","sendEvents","sessionReplayId","sessionReplay","getSessionReplayProperties","ENRICHMENT_PLUGIN_NAME","sessionRecordingProperties","forceSessionTracking","formInteractions","fileDownloads","sessions","sessionReplayPlugin","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","INTEGRATION_NAME","inboundFiltersIntegration","setupOnce","processEvent","_hint","clientOptions","_shouldDropEvent","_mergeOptions","internalOptions","allowUrls","denyUrls","disableErrorDefaults","ignoreTransactions","disableTransactionDefaults","ignoreInternal","_isSentryError","originalFunctionToString","SETUP_CLIENTS","functionToStringIntegration","originalFunction","applySdkMetadata","exceptionFromError","parseStackFrames","extractMessage","eventFromError","popSize","reactMinifiedRegexp","getPopSize","attachStacktrace","eventFromString","eventFromUnknownInput","isUnhandledRejection","domException","getNonErrorObjectExceptionValue","__serialized__","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","__sentry_wrapped__","sentryWrapped","wrappedArguments","addEventProcessor","SENTRY_SDK_SOURCE","sendClientReports","_flushOutcomes","_isEnabled","tunnel","sent_at","createUserFeedbackEnvelopeItem","createUserFeedbackEnvelope","getSdkMetadata","_sendEnvelope","outcomes","_clearOutcomes","_dsn","discarded_events","clientReportItem","createClientReportEnvelope","addConsoleInstrumentationHandler","instrumentConsole","originalConsoleMethod","validSeverityLevels","severityLevelFromString","MAX_ALLOWED_STRING_LENGTH","breadcrumbsIntegration","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","dedupeIntegration","previousEvent","currentEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","_isSameMessageEvent","previousException","_getExceptionFromEvent","currentException","_isSameExceptionEvent","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","lineno","colno","currentFingerprint","previousFingerprint","globalHandlersIntegration","stackTraceLimit","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","_eventFromIncompleteOnError","_enhanceEventWithInitialFrame","handled","_getUnhandledRejectionError","httpContextIntegration","preprocessEvent","Referer","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","maxValueLimit","truncateAggregateExceptions","aggregateExceptionsFromError","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","is_exception_group","exception_id","parent_id","exceptions","DEFAULT_KEY","linkedErrorsIntegration","DEFAULT_EVENT_TARGET","browserApiErrorsIntegration","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","xmlHttpRequestProps","wrapOptions","globalObject","handleEvent","wrappedEventHandler","originalEventHandler","UNKNOWN_FUNCTION","createFrame","in_app","chromeRegex","chromeEvalRegex","geckoREgex","geckoEvalRegex","winjsRegex","defaultStackLineParsers","subMatch","extractSafariExtensionDetails","defaultStackParser","isSafariExtension","isSafariWebExtension","makePromiseBuffer","taskProducer","drain","capturedSetTimeout","createTransport","makeRequest","bufferSize","rateLimits","filteredEnvelopeItems","dataCategory","getEventForEnvelopeItem","recordDroppedEvent","filteredEnvelope","recordEnvelopeLoss","textEncoder","__sentry__baseTransport__","cachedFetchImpl","getNativeFetchImplementation","fetchImpl","clearCachedFetchImplementation","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","requestOptions","referrerPolicy","keepalive","makeXHRTransport","getDefaultIntegrations","startSessionTracking","__SENTRY_RELEASE__","SENTRY_RELEASE","autoSessionTracking","initAndBind","browserInit","hasTracingEnabled","__SENTRY_TRACING__","enableTracing","startInactiveSpan","normalizeContext","parentSpan","getSpan","getActiveSpan","onlyIfParent","temporaryScope","createChildSpanOrTransaction","forceTransaction","startChild","startTransaction","getPropagationContext","setSpan","ISOLATION_SCOPE_ON_START_SPAN_FIELD","SCOPE_ON_START_SPAN_FIELD","setCapturedScopesOnSpan","SPAN_METRIC_SUMMARY","getMetricStorageForSpan","getMetricSummaryJsonForSpan","exportKey","getSpanStatusFromHttpCode","httpStatus","spanStatus","maxlen","_maxlen","spanRecorder","_traceId","_spanId","_startTime","instrumenter","_attributes","_parentSpanId","_sampled","_endTime","exclusiveTime","_exclusiveTime","_measurements","measurements","updateName","childSpan","opStr","nameStr","idStr","logMessage","_logMessage","_getData","start_timestamp","_metrics_summary","profile_id","exclusive_time","hasData","hasAttributes","transactionContext","_hub","_trimEnd","incomingDynamicSamplingContext","setName","spanMetadata","newMetadata","timestampInS","_finishTransaction","finishedSpans","endTimes","capturedSpanScope","capturedSpanIsolationScope","transaction_info","SpanClass","TRACING_DEFAULTS","idleTimeout","finalTimeout","heartbeatInterval","IDLE_TRANSACTION_FINISH_REASONS","_pushActivity","_popActivity","transactionSpanId","originalEnd","_idleHub","_finalTimeout","_heartbeatInterval","_onScope","delayAutoFinishUntilSignal","activities","_heartbeatCounter","_finished","_idleTimeoutCanceledPermanently","_beforeFinishCallbacks","_finishReason","_autoFinishAllowed","getActiveTransaction","maybeHub","getTransaction","_extractTraceparentData","errorsInstrumented","errorCallback","activeTransaction","sampleTransaction","samplingContext","tracesSampler","tracesSampleRate","isValidSampleRate","traceHeaders","_startTransaction","configInstrumenter","transactionInstrumenter","isRecording","initSpanRecorder","_experiments","maxSpans","startIdleTransaction","onScope","addTracingExtensions","registerBackgroundTabDetection","createSpanItem","isMeasurementValue","_startChild","msToSec","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","startTrackingWebVitals","fidCallback","clsCallback","lcpCallback","ttfbCallback","startTrackingLongTasks","startTrackingInteractions","transactionStartTime","setMeasurement","requestSpan","existingBaggageHeader","newBaggageHeaders","DEFAULT_TRACE_PROPAGATION_TARGETS","defaultRequestInstrumentationOptions","traceFetch","traceXHR","enableHTTPTimings","tracingOrigins","tracePropagationTargets","instrumentOutgoingRequests","shouldCreateSpanForRequest","shouldCreateSpan","shouldAttachHeadersWithTargets","createdSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","fullUrl","getFullURL","__span","endSpan","instrumentFetchRequest","addHTTPTimings","__sentry_xhr_span_id__","xhrCallback","nextHopProtocol","initiatorType","isPerformanceResourceTiming","resourceTiming","extractNetworkProtocol","timingSpanData","getAbsoluteTime","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseEnd","resourceTimingEntryToSpanData","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","instrumentNavigation","instrumentPageLoad","markBackgroundSpan","enableLongTask","enableInp","interactionsSampleRate","_hasSetTracePropagationTargets","_collectWebVitals","interactionIdToRouteNameMapping","startTrackingINP","enableInteractions","latestRoute","_createRouteTransaction","expandedContext","beforeStartSpan","isPageloadTransaction","getMetaContent","finalContext","idleTransaction","sendAutoFinishSignal","registerBeforeFinishCallback","addPerformanceEntries","activeSpan","clientOptionsTracePropagationTargets","startingUrl","_optionalChain","lastAccessLHS","isSentryRequestUrl","hubOrClient","isHub","checkDsn","removeTrailingSlash","checkTunnel","NodeType$1","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","RETRY_BASE_INTERVAL","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","REPLAY_MAX_EVENT_BUFFER_SIZE","MAX_REPLAY_DURATION","_optionalChain$5","lhs","rhsFn","shouldMaskInput","getInputValue","maskAttributeFn","distanceToMatch","matchPredicate","createMatchPredicate","elementClassMatchesRegex","unmaskTextClass","unmaskTextSelector","maskAllText","autocomplete","maskDistance","unmaskDistance","unblockSelector","isCustomElement","forceMask","recordInlineImage","customElements","isTextarea","_6","_7","_8","isElement$1","_optionalChain$4","throttle$1","clearTimeout$1","setTimeout$1","_9","_10","_11","_12","_13","_14","blockedPredicate","isUnblocked","unblockDistance","_18","_19","_20","_21","cachedImplementations","getImplementation","_optionalChain$3","isInputMasked","_optionalChain$2","onMutation","_15","_16","_17","initCustomElementObserver","customElementCb","customElementObserver","_optionalChain$1","_takeFullSnapshot","IframeManagerNoop","ShadowDomManagerNoop","CanvasManagerNoop","onRequestAnimationFrame","maxCanvasSize","getCanvasManager","__RRWEB_EXCLUDE_IFRAME__","_getCanvasManager","__RRWEB_EXCLUDE_SHADOW_DOM__","CustomElement","getCanvasManagerFn","timestampToMs","timestampToS","addBreadcrumbEvent","replay","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","originalWindowOpen","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_timeout","_threshold","_scollTimeout","_replay","_ignoreSelector","cleanupWindowOpen","nowInSeconds","_teardown","_checkClickTimeout","SLOW_CLICK_TAGS","ignoreElement","isClickBreadcrumb","newClick","clickBreadcrumb","clickCount","_scheduleCheckClicks","_handleMultiClick","_getClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","isSlowClick","timeAfterClickMs","endReason","getCurrentRoute","_checkClicks","updateClickDetectorForRecordingEvent","clickDetector","isIncrementalEvent","registerMutation","registerScroll","isIncrementalMouseInteraction","registerClick","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","handleDomListener","isClick","getDomTarget","getBaseDomBreadcrumb","handleDom","handleKeyboardEvent","updateUserActivity","isInputElement","hasModifierKey","isCharacterKey","baseBreadcrumb","getKeyboardBreadcrumb","ENTRY_TYPES","decodedBodySize","encodedBodySize","responseStatus","transferSize","paint","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","createPerformanceEntry","setupPerformanceObserver","addPerformanceEntry","performanceEntries","onEntries","clearCallbacks","replayPerformanceEntries","getLargestContentfulPaint","clearCallback","__SENTRY_DEBUG__","logInfo","shouldAddBreadcrumb","addLogBreadcrumb","logInfoNextTick","EventBufferSizeExceededError","EventBufferArray","_totalSize","hasCheckout","eventSize","eventsRet","WorkerHandler","_ensureReadyPromise","_getAndIncrementId","EventBufferCompressionWorker","_earliestTimestamp","ensureReady","_sendEventToWorker","_finishRequest","EventBufferProxy","_fallback","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","hasEvents","getEarliestTimestamp","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","createEventBuffer","useCompression","customWorkerUrl","workerUrl","__SENTRY_EXCLUDE_REPLAY_WORKER__","_getWorkerUrl","_loadWorker","hasSessionStorage","clearSession","deleteSession","isSampled","lastActivity","segmentId","saveSession","getSessionSampleType","sessionSampleRate","allowBuffering","createSession","stickySession","initialTime","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","traceInternals","existingSession","sessionStringFromStorage","sessionObj","fetchSession","addEventSync","shouldAddEvent","_addEvent","eventBuffer","recordingMode","replayOptions","eventAfterPossibleCallback","maybeApplyCallback","beforeAddRecordingEvent","isPaused","timestampInMs","sessionIdlePause","initialTimestamp","isCustomEvent","isTransactionEvent","isReplayEvent","isFeedbackEvent","handleAfterSendEvent","enforceStatusCode","getTransport","isBaseTransportSend","sendResponse","replayContext","traceIds","handleTransactionEvent","errorIds","replayId","beforeErrorSampling","sendBufferedReplayOrFlush","handleErrorEvent","handleBeforeSendEvent","exceptionValue","handleHydrationError","isRrwebError","__rrweb__","addFeedbackBreadcrumb","feedbackId","shouldSampleForBufferEvent","errorSampleRate","createPerformanceSpans","handleHistorySpanListener","handleHistory","urls","addNetworkBreadcrumb","shouldFilterRequest","handleXhrSpanListener","handleXhr","getBodySize","formDataStr","_serializeFormData","parseContentLengthHeader","getBodyString","mergeWarning","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","dropUndefinedKeys","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","e3","normalizeNetworkBody","normalizedBody","getAllowedHeaders","allowedHeaders","filteredHeaders","fixedUrl","getFullUrl","stringMatchesSomePattern","_prepareFetchData","requestBodySize","request_body_size","responseBodySize","response_body_size","captureDetails","networkDetailAllowUrls","networkDetailDenyUrls","_getRequestInfo","_getResponseInfo","networkCaptureBodies","networkRequestHeaders","getHeadersFromOptions","getRequestHeaders","_getFetchRequestArgBody","bodyStr","networkResponseHeaders","getAllHeaders","_parseFetchResponseBody","bodyText","getResponseData","_tryCloneResponse","_tryGetResponseText","allHeaders","_getResponseText","_prepareXhrData","enrichXhrBreadcrumb","reqSize","resSize","_getBodySize","getResponseHeaders","requestWarning","_parseXhrResponse","_getXhrResponseBody","responseWarning","handleNetworkBreadcrumbs","_isXhrBreadcrumb","_isXhrHint","captureXhrBreadcrumbToReplay","_isFetchBreadcrumb","_isFetchHint","enrichFetchBreadcrumb","captureFetchBreadcrumbToReplay","beforeAddNetworkBreadcrumb","handleFetch","handleFetchSpanListener","_LAST_BREADCRUMB","handleScopeListener","newBreadcrumb","getLastBreadcrumb","isBreadcrumbWithCategory","isTruncated","normalizedArgs","normalizedArg","normalizeConsoleBreadcrumb","handleScope","addGlobalListeners","addScopeListener","addHistoryInstrumentationHandler","afterSendHandler","replay_id","captureExceptions","handleGlobalEventListener","hasHooks","lastTransaction","feedbackEvent","includeReplay","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","getHandleRecordingEmit","hadFirstEvent","_isCheckout","setInitialState","shouldRecordCanvas","isRecordingCanvas","useCompressionOption","blockAllMedia","networkDetailHasUrls","networkRequestHasHeaders","networkResponseHasHeaders","createOptionsEvent","addSettingsEvent","earliestEvent","createReplayEnvelope","replayEvent","recordingData","createEnvelope","createEventEnvelopeHeaders","getSdkMetadataForEnvelopeHeader","prepareRecordingData","payloadWithSequence","replayHeaders","prepareReplayEvent","_integrations","eventHint","preparedEvent","sendReplayRequest","segment_id","eventContext","preparedRecordingData","replay_start_timestamp","error_ids","trace_ids","replay_type","TransportStatusCodeError","updateRateLimits","isRateLimited","RateLimitError","sendReplay","replayData","retryConfig","_retryCount","THROTTLED","SKIPPED","ReplayContainer","recordingOptions","__init","__init2","__init3","__init4","__init5","__init6","_lastActivity","_isPaused","_hasInitializedCoreListeners","initialUrl","_recordingOptions","_debouncedFlush","callbackReturnValue","maxTimerId","cancelTimers","flushMinDelay","flushMaxDelay","_throttledAddEvent","durationSeconds","_cleanup","_getTotalCount","isThrottled","wasThrottled","slowClickTimeout","slowClickIgnoreSelectors","_initializeSessionForSampling","_initializeRecording","_handleException","_updateUserActivity","canvasOptions","_stopRecording","_onMutationHandler","forceFlush","_removeListeners","stopRecording","_checkSession","startRecording","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateSessionActivity","_maybeSaveSession","cbResult","resume","pause","urlPath","_clearContext","_addListeners","_refreshSession","initializeSampling","_handleVisibilityChange","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","addListeners","_performanceCleanupCallback","removeListeners","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","_createCustomBreadcrumb","conditionalFlush","_addPerformanceEntries","_updateInitialTimestampFromEventBuffer","_popEventContext","tooShort","minReplayDuration","tooLong","_flushLock","_runFlush","mutationLimit","overMutationLimit","mutationBreadcrumbLimit","defaultSelectors","deprecatedClassOption","deprecatedSelectorOption","deprecatedSelectors","allSelectors","consoleSandbox","getPrivacyOptions","unmask","ignore","maskAttribute","maskAttributes","privacyOptions","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","replayIntegration$1","Replay$1","maskFn","_initialOptions","_getMergedNetworkHeaders","_isInitialized","_setup","startBuffering","_maybeLoadFromReplayCanvasIntegration","finalOptions","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","loadReplayOptionsFromClient","canvasIntegration","getIntegrationByName","__initStatic","defaultIconMapping","SuccessOutlinedIcon","ReportProblemOutlinedIcon","ErrorOutlineIcon","InfoOutlinedIcon","_props$iconMapping","iconMapping","_props$severity","standardSuccess","standardInfo","standardWarning","standardError","outlinedSuccess","outlinedInfo","outlinedWarning","outlinedError","filledSuccess","filledInfo","filledWarning","filledError","createEventEnvelope","sdkInfo","enhanceEventWithSdkInfo","envelopeHeaders","eventItem","createMetricEnvelope","metricBucketItems","tagEntries","maybeTags","serializeMetricBuckets","createMetricEnvelopeItem","ALREADY_SEEN_ERROR","_integrationsInitialized","_numProcessing","_outcomes","_hooks","transportOptions","_process","eventFromException","_captureEvent","eventMessage","promisedEvent","eventFromMessage","sendSession","metricsAggregator","_isClientDoneProcessing","clientFinished","transportFlushed","forceInitialize","_setupIntegrations","integrationId","integrationName","isAlreadyInstalled","envelopeItem","createSessionEnvelope","eventOrCount","lastHref","instrumentHistory","chromeVar","isChromePackagedApp","app","hasHistoryApi","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","defaultLabelDisplayedRows","defaultRowsPerPageOptions","_props$ActionsCompone","_props$backIconButton","backIconButtonText","colSpanProp","_props$labelDisplayed","_props$labelRowsPerPa","_props$nextIconButton","nextIconButtonText","_props$rowsPerPageOpt","_props$SelectProps","MenuItemComponent","selectIcon","rowsPerPageOption","textAlignLast","_props$hideSortIcon","hideSortIcon","ArrowDownwardIcon","iconDirectionDesc","iconDirectionAsc","valueLabelDisplay","asc","findClosest","trackFinger","touchId","valueToPercent","roundValueToStep","toExponential","matissaDecimalPart","setValueIndex","focusThumb","sliderRef","setActive","axisProps","leap","defaultMarks","Identity","ariaValuetext","_props$marks","marks","marksProp","_props$min","_props$scale","_props$step","_props$ThumbComponent","ThumbComponent","_props$track","_props$ValueLabelComp","ValueLabelComponent","ValueLabel","_props$valueLabelDisp","_props$valueLabelForm","valueLabelFormat","valueDerived","instanceRef","tenPercents","marksValues","marksIndex","previousIndex","getFingerNewValue","finger","_ref3$move","values2","_slider$getBoundingCl","percentToValue","_getFingerNewValue","_getFingerNewValue3","_getFingerNewValue4","trackOffset","trackLeap","trackStyle","marked","trackFalse","inverted","trackInverted","rail","markActive","markLabel","markLabelActive","thumbColorPrimary","thumbColorSecondary","getChildMapping","mapFn","getNextChildMapping","prevChildMapping","nextChildMapping","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","pendingNextKey","mergeChildMappings","hasPrev","hasNext","prevChild","isLeaving","firstRender","currentChildMapping"],"mappings":"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,E,4BAAAA,E,0BAAAA,E,wCAAAA,E,kCAAAA,E,oCAAAA,E,8BAAAA,E,4BAAAA,E,kCAAAA,E,wBAAAA,E,wBAAAA,E,4BAAAA,E,wCAAAA,E,sCAAAA,E,gBAAAA,E,gBAAAA,E,gBAAAA,E,kBAAAA,E,6BAAAA,Q,cAgCAC,K,cAAAA,E,aAAAA,Q,cAKAC,K,sCAAAA,E,0BAAAA,E,oCAAAA,E,8CAAAA,E,8CAAAA,E,2CAAAA,Q,cASAC,K,0BAAAA,E,oBAAAA,E,wBAAAA,E,gBAAAA,E,cAAAA,E,6BAAAA,E,aAAAA,Q,cAUAC,K,kBAAAA,E,8BAAAA,E,mCAAAA,Q,cAMAC,K,YAAAA,E,wBAAAA,E,iCAAAA,Q,cAMAC,K,wBAAAA,E,yBAAAA,Q,cAKAC,K,mCAAAA,Q,cAIAC,K,yBAAAA,Q,cAIAC,K,YAAAA,E,0BAAAA,E,kBAAAA,E,gBAAAA,E,gCAAAA,E,qCAAAA,Q,cASAC,K,gFAAAA,E,sEAAAA,E,+EAAAA,Q,cAMAC,K,kCAAAA,E,kCAAAA,E,0CAAAA,E,kCAAAA,E,8BAAAA,E,8BAAAA,E,qCAAAA,E,kCAAAA,E,kCAAAA,E,sCAAAA,E,sCAAAA,E,uCAAAA,E,+CAAAA,E,sCAAAA,E,oCAAAA,E,oCAAAA,E,6DAAAA,E,uEAAAA,E,+DAAAA,E,iEAAAA,E,2DAAAA,E,oEAAAA,E,yDAAAA,E,sFAAAA,E,6BAAAA,E,yDAAAA,E,2BAAAA,E,yCAAAA,E,iEAAAA,E,kCAAAA,E,uBAAAA,E,+BAAAA,E,2BAAAA,E,qDAAAA,E,6DAAAA,E,4DAAAA,E,2DAAAA,E,yDAAAA,E,yCAAAA,E,uCAAAA,E,4CAAAA,E,mCAAAA,E,6BAAAA,E,yCAAAA,E,gCAAAA,E,mDAAAA,E,gCAAAA,E,gCAAAA,E,oCAAAA,E,+BAAAA,E,6BAAAA,E,8CAAAA,E,yCAAAA,E,6CAAAA,E,iCAAAA,E,4CAAAA,E,4CAAAA,E,2BAAAA,E,4CAAAA,E,iCAAAA,E,iCAAAA,E,qCAAAA,E,+BAAAA,E,6BAAAA,E,8CAAAA,E,qDAAAA,E,iDAAAA,E,qDAAAA,E,6EAAAA,E,+DAAAA,E,mEAAAA,E,2FAAAA,E,6CAAAA,E,iDAAAA,E,yEAAAA,E,yBAAAA,E,6DAAAA,E,6BAAAA,E,2BAAAA,E,sDAAAA,E,uCAAAA,E,qCAAAA,E,0CAAAA,E,uDAAAA,E,uBAAAA,E,yDAAAA,E,wCAAAA,E,iBAAAA,E,yCAAAA,E,yBAAAA,E,yBAAAA,E,0CAAAA,E,wCAAAA,E,mDAAAA,E,wDAAAA,E,gDAAAA,E,oDAAAA,E,wCAAAA,E,uDAAAA,E,sCAAAA,E,qCAAAA,E,0EAAAA,E,iEAAAA,E,4DAAAA,E,6CAAAA,E,+BAAAA,E,+BAAAA,E,oCAAAA,E,wCAAAA,E,+DAAAA,E,uDAAAA,E,0DAAAA,E,iDAAAA,E,2BAAAA,E,+BAAAA,E,uDAAAA,E,2DAAAA,E,mBAAAA,E,6BAAAA,E,iCAAAA,E,8CAAAA,E,uDAAAA,E,0BAAAA,E,mCAAAA,E,iCAAAA,E,gCAAAA,E,+CAAAA,E,0BAAAA,E,uCAAAA,E,6CAAAA,E,8BAAAA,E,6CAAAA,E,wBAAAA,E,2CAAAA,E,iDAAAA,E,0BAAAA,E,wBAAAA,E,0BAAAA,E,uCAAAA,E,6CAAAA,E,6CAAAA,E,mCAAAA,E,qCAAAA,E,4DAAAA,E,8FAAAA,E,kFAAAA,E,2CAAAA,E,kCAAAA,E,4DAAAA,E,mCAAAA,E,0CAAAA,E,0CAAAA,E,iCAAAA,E,iCAAAA,E,+BAAAA,E,8CAAAA,E,8CAAAA,E,qEAAAA,E,qEAAAA,E,iCAAAA,E,2BAAAA,E,2BAAAA,E,yCAAAA,E,+BAAAA,E,2CAAAA,E,iCAAAA,E,oCAAAA,Q,cAgNAC,K,uEAAAA,E,mFAAAA,E,2EAAAA,E,6EAAAA,E,mFAAAA,E,0DAAAA,E,6EAAAA,E,6EAAAA,E,8DAAAA,E,gDAAAA,E,oDAAAA,E,iEAAAA,E,8DAAAA,Q,cAqBAC,K,0BAAAA,E,gBAAAA,E,oCAAAA,E,8BAAAA,E,oBAAAA,E,8CAAAA,E,aAAAA,Q,cAuBAC,K,wCAAAA,E,qCAAAA,E,uCAAAA,E,4CAAAA,E,qDAAAA,E,yCAAAA,E,6CAAAA,E,iDAAAA,E,6CAAAA,E,yCAAAA,E,uCAAAA,E,mDAAAA,E,gEAAAA,E,8DAAAA,Q,cAiBAC,K,gB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PCtyBjDopD,E,iBAAAA,K,gDAAAA,E,sCAAAA,E,4BAAAA,E,sCAAAA,E,4CAAAA,E,gEAAAA,E,0CAAAA,E,8DAAAA,E,0BAAAA,E,4BAAAA,E,gDAAAA,E,gCAAAA,E,0CAAAA,E,8DAAAA,E,0CAAAA,E,oEAAAA,E,sCAAAA,E,0DAAAA,E,oEAAAA,E,4EAAAA,E,oCAAAA,E,oCAAAA,E,wDAAAA,E,oCAAAA,E,wDAAAA,E,oCAAAA,E,wDAAAA,E,gDAAAA,E,gCAAAA,E,oDAAAA,E,8BAAAA,E,kDAAAA,E,0EAAAA,E,8FAAAA,E,0BAAAA,E,sCAAAA,E,0DAAAA,E,gDAAAA,E,mEAAAA,E,4CAAAA,E,wDAAAA,E,oCAAAA,E,wDAAAA,E,4BAAAA,E,wCAAAA,E,wCAAAA,E,kEAAAA,E,kDAAAA,E,oEAAAA,E,sDAAAA,E,wEAAAA,E,8CAAAA,E,0CAAAA,E,0BAAAA,E,gCAAAA,E,oDAAAA,E,oDAAAA,E,wEAAAA,E,wDAAAA,E,oCAAAA,E,wDAAAA,E,sCAAAA,E,kFAAAA,E,0BAAAA,E,8CAAAA,E,gDAAAA,E,oEAAAA,E,sDAAAA,E,0EAAAA,E,8BAAAA,E,gFAAAA,E,8DAAAA,E,kEAAAA,E,8DAAAA,E,sBAAAA,E,0CAAAA,E,4CAAAA,E,kCAAAA,E,4EAAAA,E,gDAAAA,E,oDAAAA,E,oEAAAA,E,wEAAAA,E,sDAAAA,E,kCAAAA,E,oCAAAA,E,8BAAAA,E,4CAAAA,E,0CAAAA,E,wDAAAA,E,0BAAAA,E,wCAAAA,E,sCAAAA,E,0DAAAA,E,oDAAAA,E,kCAAAA,E,oDAAAA,E,gCAAAA,E,oDAAAA,E,sCAAAA,E,0DAAAA,E,sCAAAA,E,0DAAAA,E,4DAAAA,E,oDAAAA,E,gEAAAA,E,8DAAAA,E,4EAAAA,E,kFAAAA,E,0DAAAA,E,wEAAAA,E,8EAAAA,E,0CAAAA,E,8DAAAA,E,8CAAAA,E,gDAAAA,E,oDAAAA,E,oCAAAA,E,wDAAAA,E,sCAAAA,E,0DAAAA,E,gFAAAA,E,kCAAAA,E,sDAAAA,E,wDAAAA,E,4CAAAA,E,wEAAAA,E,gCAAAA,E,4EAAAA,E,0BAAAA,E,kCAAAA,E,4BAAAA,E,4CAAAA,E,sCAAAA,E,wCAAAA,E,4DAAAA,E,4DAAAA,E,gEAAAA,E,oFAAAA,E,4EAAAA,E,8BAAAA,E,kDAAAA,E,0CAAAA,E,8DAAAA,E,0CAAAA,E,8DAAAA,E,0CAAAA,E,8DAAAA,E,sDAAAA,E,oDAAAA,E,0DAAAA,E,oCAAAA,E,sDAAAA,E,0CAAAA,E,sEAAAA,E,oDAAAA,E,4DAAAA,E,sEAAAA,E,sFAAAA,E,gDAAAA,E,gEAAAA,E,kDAAAA,E,sDAAAA,E,kDAAAA,E,kEAAAA,E,kEAAAA,E,kDAAAA,E,8BAAAA,E,4CAAAA,E,4BAAAA,E,kDAAAA,E,sEAAAA,E,4DAAAA,E,gFAAAA,E,0EAAAA,E,gEAAAA,E,oFAAAA,E,8EAAAA,E,gEAAAA,E,qFAAAA,E,+EAAAA,E,gEAAAA,E,oFAAAA,E,8EAAAA,E,sDAAAA,E,0EAAAA,E,oEAAAA,E,0DAAAA,E,8EAAAA,E,wEAAAA,E,0DAAAA,E,8EAAAA,E,wEAAAA,E,0DAAAA,E,8EAAAA,E,wEAAAA,E,kCAAAA,E,kDAAAA,E,kCAAAA,E,kDAAAA,E,kEAAAA,E,sEAAAA,E,sFAAAA,E,0FAAAA,E,8GAAAA,E,sEAAAA,E,wFAAAA,E,sEAAAA,E,gDAAAA,E,gDAAAA,E,gDAAAA,E,0FAAAA,E,0FAAAA,E,gFAAAA,E,oGAAAA,E,oDAAAA,E,oEAAAA,E,kEAAAA,E,oDAAAA,E,4DAAAA,E,0CAAAA,E,oBAAAA,E,wCAAAA,E,oDAAAA,E,8BAAAA,E,kDAAAA,E,gDAAAA,E,4BAAAA,E,gDAAAA,E,oDAAAA,E,kCAAAA,E,sDAAAA,E,8CAAAA,E,kEAAAA,E,oEAAAA,E,wEAAAA,E,0CAAAA,E,8DAAAA,E,gEAAAA,E,kDAAAA,E,gCAAAA,E,kDAAAA,E,sEAAAA,E,sCAAAA,E,sDAAAA,E,gEAAAA,E,oFAAAA,E,sFAAAA,E,oFAAAA,E,wGAAAA,E,0GAAAA,E,wEAAAA,E,4FAAAA,E,8FAAAA,E,8EAAAA,E,kGAAAA,E,gGAAAA,E,sFAAAA,E,0GAAAA,E,4GAAAA,E,wEAAAA,E,4FAAAA,E,8FAAAA,E,4DAAAA,E,gF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AAA,E,0DAAAA,E,kEAAAA,E,0EAAAA,E,wEAAAA,E,4FAAAA,E,8EAAAA,E,kDAAAA,E,0CAAAA,E,8DAAAA,E,0CAAAA,E,8DAAAA,E,kFAAAA,E,8EAAAA,E,4CAAAA,E,gEAAAA,E,gDAAAA,E,oEAAAA,E,8DAAAA,E,8DAAAA,E,4FAAAA,E,wDAAAA,E,4EAAAA,E,8CAAAA,E,sDAAAA,E,sDAAAA,E,kCAAAA,E,oFAAAA,E,kEAAAA,E,oDAAAA,E,wEAAAA,E,0EAAAA,E,gFAAAA,E,gDAAAA,E,sCAAAA,E,0CAAAA,E,wEAAAA,E,0DAAAA,E,8EAAAA,E,4CAAAA,E,sEAAAA,E,8BAAAA,E,kDAAAA,E,4CAAAA,E,gCAAAA,E,kDAAAA,E,0DAAAA,E,0CAAAA,E,8DAAAA,E,8EAAAA,E,oCAAAA,E,kCAAAA,E,4DAAAA,E,0DAAAA,E,0DAAAA,E,8EAAAA,E,kHAAAA,E,0EAAAA,E,0FAAAA,E,8DAAAA,E,8EAAAA,E,oFAAAA,E,gCAAAA,E,0CAAAA,E,sCAAAA,E,4CAAAA,E,sCAAAA,E,0DAAAA,E,sEAAAA,E,oDAAAA,E,wEAAAA,E,sDAAAA,E,sCAAAA,E,kCAAAA,E,sDAAAA,E,kEAAAA,E,0DAAAA,E,kCAAAA,E,4DAAAA,E,sDAAAA,E,wCAAAA,E,kEAAAA,E,4DAAAA,E,wCAAAA,E,4DAAAA,E,sDAAAA,E,oDAAAA,E,oGAAAA,E,gEAAAA,E,oDAAAA,E,4CAAAA,E,kEAAAA,E,0DAAAA,E,kDAAAA,E,wEAAAA,E,8DAAAA,E,8CAAAA,E,gGAAAA,E,4DAAAA,E,oDAAAA,E,4CAAAA,E,0EAAAA,E,sCAAAA,E,sCAAAA,E,0DAAAA,E,oDAAAA,E,8BAAAA,E,wCAAAA,E,0EAAAA,E,8FAAAA,E,wFAAAA,E,gGAAAA,E,wGAAAA,E,gCAAAA,E,kDAAAA,E,sDAAAA,E,8FAAAA,E,sDAAAA,E,8CAAAA,E,kEAAAA,E,kEAAAA,E,kEAAAA,E,sFAAAA,E,sFAAAA,E,0DAAAA,E,sDAAAA,E,sDAAAA,E,oCAAAA,E,kFAAAA,E,gDAAAA,E,8FAAAA,E,oCAAAA,E,kFAAAA,E,4DAAAA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AAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,SAC7D,GAGE,GAAmB,CAAC,IAAI,WAAW,CACvC,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,EAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAC/D,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,OAAS,IAC7D,GAmSW,GAjSf,YAKI,SAAF,EAAY,EAAoB,GAA5B,IAAJ,EACE,YAAM,IAAY,KAEd,EAAC,OAAS,EAEV,IAAE,EAAM,EAAO,UACb,EAAM,EAAO,UACf,IAAS,IAAT,IAAuB,IAAT,EAChB,MAAM,IAAI,MAAM,mCAAmC,EAAG,KAAK,GAE7D,GAAqB,KAAV,GAAN,GACH,MAAM,IAAI,MACR,+CAA+C,EAAG,KAAK,GAGvD,KAAE,GAAO,GAAK,GAAO,KAAO,EAC9B,MAAM,IAAI,MAAM,+BAA+B,EAAG,KAAK,GAErD,GAAM,GAAN,EACF,MAAM,IAAI,MAAM,kCAAkC,EAAG,KAAK,G,OAGxD,EAAC,SAAW,EACZ,EAAC,QAAU,E,EAmQnB,OA/R0B,iBA+Bd,sBAAV,WACM,MACA,EACE,EAAM,KAAK,OAEb,EAAM,KAAK,QAAQ,GAMnB,GALM,EAAN,IACI,KAAD,KAAM,GAID,KAFR,IAAI,GAEJ,CAgDA,MACA,EACA,GAAQ,IAAR,EAEI,EAAS,GACT,EAAU,OACX,IAAY,IAAR,EAuDH,UAAI,MAAM,sCArDV,MAAc,KAAK,QAAQ,GAAK,IAChC,EAAe,KAAK,QAAQ,GAAK,EACjC,EAAkB,KAAK,QAAQ,GAAK,EAGpC,EAAqB,IAAI,WAAW,GAAe,QAErD,OAAC,EACC,IAAD,EAAI,EAAG,EAAI,IAAmB,EACzB,EAAW,GAAe,IAAM,KAAK,QAAQ,GAEjD,MAAiB,KAAK,qBAAqB,GAG3C,IACA,EAAF,EAME,IALA,MAAQ,EAAc,EACtB,EAAc,IAAI,WAAW,GAC/B,OAAU,EACV,OAAU,EACV,OAAI,EACD,EAAI,GAAO,CACR,IAAF,EAAO,KAAK,QAAQ,GAClB,GAAK,KAAT,EACF,EAAa,EACb,EAAa,EACb,EAAO,OACF,GAAa,KAAT,EACT,EAAa,EACb,EAAa,EACb,EAAO,EAAM,MACR,IAAa,KAAT,EAIJ,CACL,EAAY,KAAO,EAAM,EACzB,SALA,EAAa,EACb,EAAa,GACb,EAAO,EAAM,EAOP,IADA,IAAJ,EAAe,KAAK,QAAQ,GAAc,EACvC,KAAiB,GACtB,EAAY,KAAO,EAIjB,EAAS,KAAK,qBAClB,EAAY,SAAS,EAAG,IAEpB,EAAU,KAAK,qBACnB,EAAY,SAAS,EAAa,IASlC,IAFA,OADA,EAAK,KAAK,QACO,EAAO,OAAS,EACjC,EAAM,KAAK,eACF,CACL,IAAF,EAAQ,KAAK,QAAQ,GACnB,GAAF,EAAQ,IACN,EAAM,GAAK,IAEb,GADA,EAAS,KAAK,aAAa,EAAM,IAClB,QAEjB,EAAO,KAAS,MALZ,CAQN,GAAc,MAAV,EAEF,YADA,KAAK,aAAe,GAKtB,IAAI,GADJ,EAAQ,GADR,GAAS,OAEY,GACjB,EAAQ,IACV,EAAQ,KAAK,QAAQ,IAEjB,GAAS,MAAR,GAAkB,EACnB,EAAE,KAAK,QAAQ,IAErB,GADM,EAAE,GAAW,KACF,IACL,IACV,EAAQ,KAAK,QAAQ,IAEvB,IAAM,GAAgB,MAAR,GAAkB,EAC5B,EAAM,GAAO,IAEf,GADA,EAAS,KAAK,aAAa,EAAM,IAClB,QAEjB,IAAK,IAAI,EAAI,EAAG,EAAI,IAAO,IAAK,EAC9B,EAAO,GAAO,EAAO,EAAM,SApJ3B,CAEI,IAAF,OAAC,EAEC,IAAuB,KAAxB,EAAI,EAAI,WACX,MAAM,IAAI,MAAM,oCAEZ,IAAF,EAAW,EACT,IAAuB,KAAxB,EAAI,EAAI,WACX,MAAM,IAAI,MAAM,oCAGZ,GADA,GAAM,GAAK,GACY,KAAxB,EAAI,EAAI,WACH,MAAF,IAAI,MAAM,oCAEZ,IAAF,EAAQ,EACN,IAAuB,KAAxB,EAAI,EAAI,WACX,MAAM,IAAI,MAAM,oCAGZ,IADA,GAAG,GAAK,MACa,OAAX,KAAoC,IAAb,GAA4B,IAAV,GAE/C,MAAF,IAAI,MAAM,iDAGZ,KAAD,QAAU,EACT,KAAD,SAAW,EAEhB,IAAM,EAAe,KAAK,aAC1B,EAAS,KAAK,aAAa,EAAe,GAC1C,IAAM,EAAM,EAAe,EAErB,GADA,KAAD,aAAe,EACH,IAAb,GACsB,IAApB,EAAI,aACN,KAAK,KAAM,QAGb,IAAK,IAAI,EAAI,EAAc,EAAI,IAAO,EAAG,CACvC,IAA6B,KAAxB,EAAI,EAAI,WAAmB,CAC9B,KAAK,KAAM,EACX,MAEF,EAAO,GAAK,KA+GV,EAAF,kBAAR,SAAgB,GAMV,IALA,IAIA,EAJE,EAAM,KAAK,OACb,EAAW,KAAK,SAChB,EAAU,KAAK,QAGZ,EAAW,GAAM,CACtB,IAA6B,KAAxB,EAAI,EAAI,WACX,MAAM,IAAI,MAAM,gCAElB,GAAW,GAAK,EAChB,GAAY,EAMV,OAJA,KAAY,GAAK,GAAQ,EACzB,KAAC,QAAU,GAAW,EACtB,KAAC,SAAW,GAAY,EAErB,GAGD,oBAAR,SAAgB,GAQV,IAPA,IAMA,EANE,EAAM,KAAK,OACX,EAAQ,EAAM,GACd,EAAS,EAAM,GACjB,EAAW,KAAK,SAChB,EAAU,KAAK,QAGZ,EAAW,IACa,KAAxB,EAAI,EAAI,YAKP,GAAK,GAAK,EACV,GAAM,EAEV,IAAE,EAAO,EAAM,GAAY,GAAK,GAAU,GACzB,kBAAV,GACH,QAAE,IAAI,SAAU,GAEpB,IAAE,EAAU,GAAQ,GAClB,EAAiB,MAAP,EACZ,KAAU,GAAK,EAAW,EACtB,UAAI,MAAM,gCAId,OAFA,KAAC,QAAU,GAAW,EACtB,KAAC,SAAW,EAAW,EACpB,GAGD,iCAAR,SAA6B,GAC3B,IAII,EAJE,EAAI,EAAQ,OAGd,EAAS,EAEb,IAAK,EAAI,EAAG,EAAI,IAAK,EACf,EAAQ,GAAK,IACf,EAAS,EAAQ,IAOrB,IAFA,IAAM,EAAO,GAAK,EACZ,EAAQ,IAAI,WAAW,GAEvB,EAAM,EAAG,EAAO,EAAG,EAAO,EAC9B,GAAO,IACL,EAAK,IAAS,EAAG,IAAS,EAE5B,IAAK,IAAI,EAAM,EAAG,EAAM,IAAK,EAC3B,GAAI,EAAQ,KAAS,EAAK,CAExB,IAAI,EAAQ,EACR,EAAI,EACR,IAAK,EAAI,EAAG,EAAI,IAAO,EACrB,EAAS,GAAS,EAAU,EAAJ,EACxB,IAAM,EAIR,IAAK,EAAI,EAAO,EAAI,EAAM,GAAK,EAC7B,EAAM,GAAM,GAAO,GAAM,IAEzB,EAKR,MAAO,CAAC,EAAO,IAEnB,EA/RA,CAA0B,IC8CX,GAxJf,YAgBI,SAAF,EACE,EACA,EACA,GAHE,IAAJ,EAKE,YAAM,IAAY,KAElB,EAAK,OAAS,EACV,EAAC,WAAa,EACd,EAAC,WAAa,EAad,IAXA,IAAE,EAAuB,KACvB,EAAW,CACf,YAAW,EACX,WAAY,EACZ,SAAU,IACJ,iBAAY,IAAI,WAAW,GACjC,kBAAmB,IAAI,YAAY,GACnC,oBAAqB,IAAI,YAAY,GACrC,gBAAiB,IAAI,WAAW,GAChC,sBAAuB,GAEhB6E,EAAI,EAAG,EAAI,MAAO,EACzB,EAAS,iBAAiB,GAAK,EAC/B,EAAS,kBAAkB,GAAK,E,OAE9B,EAAC,SAAW,E,EA4GpB,OAtJwB,iBA6CZ,sBAAV,WACM,IAIA,EACA,EACA,EAJA,EAAuB,KAMrB,EAAW,KAAK,SAClB,GAAC,EAAD,CAIA,IAAE,EAAc,EAAS,YACzB,EAAW,EAAS,SAClB,EAAmB,EAAS,iBAC5B,EAAoB,EAAS,kBAC7B,EAAsB,EAAS,oBACjC,EAAa,EAAS,WACtB,EAAW,EAAS,SAClB,EAAkB,EAAS,gBAC7B,EAAwB,EAAS,sBAEjC,EAAgB,EAChB,EAAsB,KAAK,aAC3B,EAAS,KAAK,aAAa,KAAK,aAAe,GAE/C,IAAC,EAAI,EAAG,EA3BM,IA2BS,IAAK,CACxB,MAAO,KAAK,SAAS,GACrB,EAAU,EAAwB,EAClC,IAAD,GAAQ,EAAO,IACV,EAAQ,GAAK,EACb,EAAgB,MACnB,MAAI,GAAQ,KAUZ,IAAa,MAAT,EAAc,CACf,EAAK,EACL,EAAG,IACH,EAAgB,EACxB,SAEQ,KAAH,KAAM,SACJ,KAAK,SACZ,MAjBQ,GAAJ,EAAO,EAEC,IAAL,GADL,EAAwB,EAAkB,IACT,EAAG,EAAI,EAAM,GAAK,EAAG,IACxC,EAAI,GAAK,EAAiB,GAC1B,EAAR,EAAoB,QAG1B,EAAgB,KAA2B,EAAgB,GA6B/D,GAhBI,IACF,EAAoB,GAAY,EAChC,EAAkB,GAAY,EAAkB,GAAsB,EACtE,EAAiB,GAAY,EAAgB,GAE7C,IADA,EAEc,EAAgB,EAAW,EAAc,EACjD,EAII,EAHJ,KAAK,IACH,KAAK,IAAI,EAAW,GAAe,kBAAqB,EACxD,KAGJ,EAAK,EAGP,GADJ,GAAiB,GACyB,CACxC,GACE,GAxEY,UAyEL,EAAuB,GAChC,EAAS,KAAK,aAAa,KAAK,aAAe,GAEjD,IAAK,EAAI,EAAG,EAAI,EAAuB,IACrC,EAAO,KAAyB,EAAgB,GAGpD,EAAS,SAAW,EACpB,EAAS,WAAa,EACtB,EAAS,SAAW,EACpB,EAAS,sBAAwB,EAEjC,KAAK,aAAe,IAGd,qBAAR,SAAiB,GAGf,IAFA,IAAI,EAAa,KAAK,WAClB,EAAa,KAAK,WACf,EAAa,GAAG,CACrB,IAAM,EAAI,KAAK,OAAO,UACtB,IAAW,IAAP,EAEF,OADA,KAAK,KAAM,EACJ,KAET,EAAc,GAAc,EAAK,EACjC,GAAc,EAIhB,OAFA,KAAK,WAAa,GAAc,EAChC,KAAK,WAAa,EACV,IAAe,GAAgB,GAAK,GAAK,GAErD,EAtJA,CAAwB,IC2CT,GA3Cf,YAGI,SAAF,EAAY,EAAoB,GAA5B,IAAJ,EACE,YAAM,IAAY,K,OAClB,EAAK,OAAS,E,EAoClB,OAzC8B,iBAQlB,sBAAV,WAKM,IAAE,EAAe,KAAK,OAAO,SAAS,GACtC,IAAC,GAAgB,EAAa,OAAS,GAAyB,MAApB,EAAa,GAC3D,KAAK,KAAM,MADT,CAKA,MACA,EAAe,KAAK,aACpB,EAAI,EAAa,GACjB,KAAI,KAIA,IAFA,EAAG,KAAK,aAAa,EAAe,EAAI,IACvC,KAAkB,EAAa,GAClC,EAAI,EAAG,CACT,IAAM,EAAS,KAAK,OAAO,SAAS,GACpC,EAAO,IAAI,EAAQ,GACnB,GAAgB,OAEb,CACC,EAAF,IAAM,EACJ,MAAI,EAAa,GACjB,EAAG,KAAK,aAAa,EAAe,EAAI,GAC9C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACrB,EAAO,KAAkB,EAG7B,KAAK,aAAe,IAExB,EAzCA,CAA8B,ICMxB,GAAe,SACnB,EACA,EACA,GAEE,GAAE,IAAa,EAAQ,GAAG,eACtB,OAAG,IAAI,GAAY,GAEvB,GAAE,IAAa,EAAQ,GAAG,aAAc,CACpC,MAAc,EAClB,GAAI,aAAkB,EAAS,CAC7B,IAAM,EAAc,EAAO,OAAO,EAAQ,GAAG,gBACzC,aAAuB,IACzB,EAAc,EAAY,YAG9B,OAAO,IAAI,GAAU,OAAQ,EAAW,GAE1C,GAAI,IAAa,EAAQ,GAAG,iBAC1B,OAAO,IAAI,GAAc,GAEzB,GAAE,IAAa,EAAQ,GAAG,kBAC1B,OAAO,IAAI,GAAe,GAE1B,GAAE,IAAa,EAAQ,GAAG,mBACtB,OAAG,IAAI,GAAgB,GAE3B,MAAI,IAAI,IAAyB,EAAS,aAGjC,GAAqB,SAAC,G,IAAE,EAAI,OAAE,EAAQ,WAC7C,EAAqB,IAAI,GAAO,GAE9B,EAAS,EAAK,OAAO,EAAQ,GAAG,WAChC,EAAc,EAAK,OAAO,EAAQ,GAAG,gBAE3C,GAAI,aAAkB,EACpB,EAAS,GACP,EACA,EACA,QAEG,GAAI,aAAkB,EAC3B,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,IAChD,EAAS,GACP,EACA,EAAO,OAAO,EAAK,GACnB,GAAgB,EAAyB,YAAY,EAAK,SAGzD,GAAM,EACX,MAAM,IAAI,IAA0B,CAAC,EAAS,GAAW,GAG3D,OAAO,GCqEM,GAjFf,WAgBI,SAAF,EACE,EACA,EACA,GAEI,KAAC,KAAO,EAER,IAAE,EAAgB,OAAX,QAAW,IAAX,IA3Ca,SAAC,GACzB,IAAI,EAAW,EAAK,WAUpB,MAAK,CAAM,KAAE,EAAG,OAAQ,EAAG,MAP3B,EAAS,OAAO,EAAG,GAAW,WAC9B,EAAS,OAAO,EAAG,GAAW,WAMW,IAHzC,EAAS,OAAO,EAAG,GAAW,WAC9B,EAAS,OAAO,EAAG,GAAW,YAkCJ,CAAoB,GAE9C,KAAK,MAAQ,EAAG,MAAQ,EAAG,KAC3B,KAAK,OAAS,EAAG,IAAM,EAAG,OAC1B,KAAK,YAAc,EACnB,KAAK,qBACiB,OAApB,QAAoB,IAApB,IAjC4B,SAChC,GACyB,OAAC,EAAG,EAAG,EAAG,GAAI,EAAG,MAAO,EAAxB,QA+BG,CAA0B,GAkDxD,OA9Ee,MAAb,SACE,EACA,EACA,G,uFAEA,SAAO,IAAI,EAAgB,EAAM,EAAa,WA0B1C,6BAAN,SAAuB,EAAqB,G,+GAG1C,GAFM,EAA0B,KAAK,KAAK,oBAAlC,EAAQ,WAAE,EAAS,aAEtB,EAAU,MAAM,IAAI,IAazB,OAZM,EAAkB,KAAK,eAAe,GAEtC,EAA+B,KAAK,YAAlC,EAAI,OAAE,EAAM,SAAE,EAAK,QAAE,EAAG,MAC1B,EAAU,EAAQ,YAAY,EAAiB,CACnD,KAAM,UACN,QAAS,OACT,SAAU,EACV,KAAM,CAAC,EAAM,EAAQ,EAAO,GAC5B,OAAQ,KAAK,qBACb,UAAS,IAGP,GACF,EAAQ,OAAO,EAAK,GACpB,GAAO,IAEP,GAAO,EAAQ,SAAS,WAMpB,2BAAR,SAAuB,GAIrB,IAHA,IAAM,EAAU,WAAW,GAAG,IAAU,SAClC,EAAgC,GAE7B,EAAM,EAAG,EAAM,EAAS,OAAQ,EAAM,EAAK,IAAO,CACzD,IAAM,EAAS,EAAS,OAAO,EAAK,GAEhC,OAAO,EACX,GAAI,aAAkB,EACpB,EAAU,GAAmB,GAAQ,aAChC,MAAI,aAAkB,GAG3B,MAAM,IAAI,IAA4B,GAFtC,EAAU,EAAO,uBAKnB,EAAgB,KAAK,EAAS,GAGhC,OAAO,IAAmB,aAAI,IAElC,EA/EA,GV9CM,GAAS,SACb,EACA,GAEE,QAAe,IAAb,EACF,OAAK,EAAS,KAGlB,SAAY,GAKV,oBAGE,EAAF,0BAGE,EAAF,sBAMA,gBAjBF,CAAY,QAAqB,KAoBjC,SAAY,GAEV,YAME,EAAF,UARF,CAAY,QAAgB,KAW5B,SAAY,GAER,EAAF,YAGE,EAAF,wBALF,CAAY,QAAY,KAQxB,SAAY,GAER,EAAF,kBAME,EAAF,0CAME,EAAF,wCAdF,CAAY,QAAM,KAoClB,IW7FY,GAwBA,GA6BA,GAyDA,GXidG,GAlef,WAeI,SAAF,EAAsB,GACpB,KAAK,KAAO,EAgdhB,OA7cY,uBAAV,SAAqB,GACnB,IAAM,EAAY,KAAK,KAAK,OAAO,EAAQ,GAAG,IAC9C,GAAI,aAAqB,EAAS,OAAO,GAIjC,uBAAV,SAAqB,GACf,IAAE,EAAY,KAAK,KAAK,OAAO,EAAQ,GAAG,IAC1C,gBAAqB,EAAS,OAAO,GAKzCwjK,EAAkBroK,UAAU,YAA9B,WACM,OAAG,KAAK,WAAW,gBAIvB,EAAF,iCACE,OAAO,KAAK,WAAW,gBAIvB,EAAF,kCACE,OAAO,KAAK,WAAW,iBAIvB,EAAF,+BACE,OAAO,KAAK,WAAW,cAIvBqoK,EAAkBroK,UAAU,aAA9B,WACM,OAAG,KAAK,WAAW,iBAIvB,EAAF,qCACE,OAAO,KAAK,WAAW,oBAIvBqoK,EAAkBroK,UAAU,sBAA9B,WACM,OAAG,KAAK,WAAW,0BAIvB,EAAF,+BACE,OAAO,KAAK,WAAW,cAIvB,EAAF,kCACM,OAAG,KAAK,WAAW,iBAIvB,EAAF,4BACE,OAAO,KAAK,WAAW,WAIvB,EAAF,uCACE,OAAO,KAAK,WAAW,sBAIvB,EAAF,oCACE,IAAM,EAAiB,KAAK,KAAK,OAAO,EAAQ,GAAG,mBACnD,GAAI,aAA0B,EAAU,OAAO,GAK/C,EAAF,+BACE,IAAM,EAAY,KAAK,KAAK,OAAO,EAAQ,GAAG,cAC9C,GAAI,aAAqB,EAAW,OAAO,GAS3C,EAAF,oC,QACE,OAAoC,QAApC,EAAyB,QAAzB,EAAO,KAAK,qBAAa,eAAE,mBAAS,UAQpC,EAAF,oC,QACE,OAAoC,QAApC,EAAyB,QAAzB,EAAO,KAAK,qBAAa,eAAE,mBAAS,UASpC,EAAF,qC,QACE,OAAqC,QAArC,EAA0B,QAA1B,EAAO,KAAK,sBAAc,eAAE,mBAAS,UAQrC,EAAF,kC,QACE,OAAkC,QAAlC,EAAuB,QAAvB,EAAO,KAAK,mBAAW,eAAE,mBAAS,UAQlC,EAAF,qC,QACE,OAAqC,QAArC,EAA0B,QAA1B,EAAO,KAAK,sBAAc,eAAE,mBAAS,UAUrC,EAAF,wC,QACE,OAAwC,QAAxC,EAA6B,QAA7B,EAAO,KAAK,yBAAiB,eAAE,mBAAS,UAQxC,EAAF,8C,QACQ,EAAmC,QAA/B,EAAG,KAAK,+BAAuB,eAAE,aACvC,OAAsC,QAA1C,EAAO,GAAO,EAAM,WAAsB,QAAI,GAAsB,SAOpE,EAAF,yC,QACQ,EAA4B,QAAnB,EAAG,KAAK,mBAAW,eAAE,aAChC,OAAsC,QAA1C,EAAO,GAAO,EAAW,WAAiB,QAAI,GAAiB,KAQ/D,EAAF,qC,QACQ,EAA6B,QAAtB,EAAG,KAAK,sBAAc,eAAE,aACjC,OAAgC,QAApC,EAAO,GAAO,EAAS,WAAa,QAAI,GAAa,YAQrDqoK,EAAkBroK,UAAU,UAA9B,W,MACQ,EAAsB,QAAhB,EAAG,KAAK,gBAAQ,eAAE,aAC1B,OAAG,GAAO,EAAQ,KAStB,EAAF,0C,MACE,OAA+B,QAA/B,EAAO,KAAK,2BAAmB,eAAE,aAoBjC,EAAF,uCACE,IAAM,EAAM,KAAK,iBACjB,IAAK,EAAK,MAAO,GAGjB,IADA,IAAM,EAA0B,GACvB,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EAAG,CAKtC,IAAM,EAAQ,EAAI,OAAO,EAAG,GAAW,WACjC,EAAM,EAAI,OAAO,EAAI,EAAG,GAAW,WACzC,EAAW,KAAK,CAAE,MAAK,EAAE,IAAG,IAG9B,OAAO,GAQP,EAAF,kC,QACE,OAAiC,QAAjC,EAAuB,QAAvB,EAAO,KAAK,mBAAW,eAAE,kBAAQ,QAAM,GAQvC,EAAF,kCAAe,GACb,IAAM,EAAc,KAAK,KAAK,QAAQ,IAAI,GAC1C,KAAK,KAAK,IAAI,EAAQ,GAAG,eAAgB,IAQzC,EAAF,kCAAe,GACT,IAAE,EAAc,KAAK,KAAK,QAAQ,IAAI,GACtC6B,KAAC,KAAK,IAAI,EAAQ,GAAG,eAAgB,IASzC,EAAF,mCAAgB,GACd,IAAM,EAAe,KAAK,KAAK,QAAQ,IAAI,GAC3C,KAAK,KAAK,IAAI,EAAQ,GAAG,gBAAiB,IAQ1C,EAAF,gCAAa,GACX,IAAM,EAAY,KAAK,KAAK,QAAQ,IAAI,GACpC,KAAC,KAAK,IAAI,EAAQ,GAAG,aAAc,IAQvC,EAAF,mCAAgB,GACd,IAAM,EAAe,KAAK,KAAK,QAAQ,IAAI,GAC3C,KAAK,KAAK,IAAI,EAAQ,GAAG,gBAAiB,IAS1CwmK,EAAkBroK,UAAU,mBAA9B,SAAmB,GACb,IAAE,EAAkB,KAAK,KAAK,QAAQ,IAAI,GAC1C,KAAC,KAAK,IAAI,EAAQ,GAAG,mBAAoB,IAyB7C,EAAF,4CAAyB,GACvB,YACE,EACA,wBACA,IAEF,IAAM,EAAO,EAAQ,GAAG,GACxB,KAAK,KAAK,IAAI,EAAQ,GAAG,yBAA0B,IAqBnD,EAAF,uCAAoB,GAClB,YAAc,EAAkB,mBAAoB,IACpD,IAAM,EAAY,EAAQ,GAAG,GAC7B,KAAK,KAAK,IAAI,EAAQ,GAAG,aAAc,IAkBvC,EAAF,mCAAgB,GACV,OAAJ,IAAI,CAAU,EAAc,eAAgB,IACxC,IAAE,EAAU,EAAQ,GAAG,GAC3B,KAAK,KAAK,IAAI,EAAQ,GAAG,gBAAiB,IAkB1C,EAAF,6BAAU,GACJ,OAAJ,IAAI,CAAU,EAAQ,SAAU,IAChC,IAAM,EAAM,EAAQ,GAAG,GACvB,KAAK,KAAK,IAAI,EAAQ,GAAG,UAAW,IAgBtC,0CAAqB,GACnB,IAAM,EAAoB,KAAK,KAAK,QAAQ,IAAI,GAChD,KAAK,KAAK,IAAI,EAAQ,GAAG,qBAAsB,IA6BjD,uCAAkB,GACX,MAAM,QAAQ,KAAiB,EAAiB,CAAC,IAGtD,IADA,IAAM,EAAsB,GACnB,EAAM,EAAG,EAAM,EAAe,OAAQ,EAAM,EAAK,IACxD,EAAU,KAAK,EAAe,GAAK,OACnC,EAAU,KAAK,EAAe,GAAK,KAGrC,YAAa,EAAW,iBAAkB,CAAC,WAE3C,IAAM,EAAa,KAAK,KAAK,QAAQ,IAAI,GACzC,KAAK,KAAK,IAAI,EAAQ,GAAG,kBAAmB,IAQ9C,kCAAa,GACX,YAAY,EAAW,YAAa,EAAG,OAAO,WAC9C,YAAc,EAAW,aACzB,IAAM,EAAY,KAAK,KAAK,QAAQ,IAAI,GACxC,KAAK,KAAK,IAAI,EAAQ,GAAG,aAAc,IAzdlC,WAAW,SAAC,GACb,OAAO,IAAP,EAAkB,IAGjB,SAAS,SAAC,GAEf,OAAO,IAAI,EADE,EAAQ,IAAI,MAsd7B,EAheA,GYjFM,GAAU,sEAEhB,cAII,SAAF,EAAsB,EAAe,GACnC,KAAK,KAAO,EACR,KAAC,IAAM,EA6If,OA1IIsoK,EAAatoK,UAAU,EAAzB,WACM,OAAG,KAAK,KAAK,YAAY,EAAQ,GAAG,KAAM,KAAW,OAGzDsoK,EAAatoK,UAAU,GAAzB,WACM,IAAE,EAAc,KAAK,wBAAwB,EAAQ,GAAG,OAC5D,OAAO,KAAK,KAAK,QAAQ,YAAY,EAAa,IAGlD,EAAF,uBACE,IAAM,EAAa,KAAK,wBAAwB,EAAQ,GAAG,MACvD,OAAG,KAAK,KAAK,QAAQ,OAAO,IAGhC,EAAF,0BACE,OAAO,KAAK,KAAK,YAAY,EAAQ,GAAG,QAAS,IAOjD,EAAF,wBACM,IAAE,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACnC,gBAAc,MAAa,aAAc,KAAc,OAAO,GAIlE,EAAF,2BAAQ,GACN,KAAK,KAAK,IAAI,EAAQ,GAAG,QAAS,KAAK,KAAK,QAAQ,IAAI,KAGxD,EAAF,+BAKM,IAAE,EAAY,KAAK,KAAK,IAAI,EAAQ,GAAG,WACvC,gBAAqB,EAEvB,OAAO,IAAI,EADI,KAAK,KAAK,OAAO,EAAQ,GAAG,UAAW,GACtB,IAMlCsoK,EAAatoK,UAAU,UAAzB,SAAU,GACH,EACA,KAAK,KAAK,IAAI,EAAQ,GAAG,UAAW,GAD5B,KAAK,KAAK,OAAO,EAAQ,GAAG,YAIzC,EAAF,2CACE,IAAM,EAAS,KAAK,YAChB,OAAC,EACK,EAAO,wBAAuB,IAAI,KAAK,iBAD7B,KAAK,kBAIzB,EAAF,oC,MACM,OAAW,QAAf,EAAO,KAAK,WAAG,eAAE,cAGjB,EAAF,kCAAe,GACR,EACA,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,KAAa,SAAS,IADxC,KAAK,KAAK,OAAO,EAAQ,GAAG,OAI9C,EAAF,wCAAqB,GACf,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,KAAU,GAAG,KAG7C,EAAF,0CACM,IAAE,EAAK,KAAK,KAEZ,oBAAc,KACT,EAAG,aAGH,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,YAGX,EAAF,+BAAY,G,MACJ,EAAmC,QAA/B,EAAG,KAAK,+BAAuB,QAAI,GAEvC,EAAK,KAAK,uBAChB,IAAK,EAAI,MAAM,IAAI,IAAoB,GAEnC,IAAE,EAAU,YAAc,EAAI,IAClC,IAAK,EAAQ,MAAO,MAAM,IAAI,IAAuB,GAEjD,IAAE,EAAU,EAAG,MAAM,EAAG,EAAQ,IAAM,EAAQ,MAAM,GAAG,QACrD,EAAQ,EAAQ,KAAO,EAAG,OAAS,EAAG,MAAM,EAAQ,KAAO,GAE3D,EAAgB,EAAO,KADZ,EAAQ,MAAM,GACW,IAAI,EAAQ,OAAO,EAEzD6B,KAAC,qBAAqB,IAG1B,EAAF,8B,QACM,OAAsB,QAA1B,EAAgB,QAAhB,EAAO,KAAK,YAAI,eAAE,kBAAQ,QAAM,GAGhC,EAAF,4BAAS,GACP,KAAK,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAU,GAAG,KAG7C,EAAF,2BAAQ,GAEF,OAAsB,KADZ,KAAK,WACH,IAGhBymK,EAAatoK,UAAU,QAAzB,SAAQ,GACF,IAAE,EAAQ,KAAK,WACf,KAAC,SAAS,EAAQ,IAGtB,EAAF,6BAAU,GACR,IAAM,EAAQ,KAAK,WACnB,KAAK,SAAS,GAAS,IAGzB,+BAAU,EAAc,GAClB,EAAQ,KAAK,QAAQ,GACpB,KAAK,UAAU,IAGtB,6CAAwB,GACtB,IAAI,EAIJ,OAHA,KAAK,QAAO,SAAC,GACN,IAAW,EAAY,EAAK,KAAK,IAAI,OAErC,GAGT,4BAAO,GACL,EAAQ,MACR,IAAM,EAAS,KAAK,YAChB,GAAQ,EAAO,OAAO,IAE9B,EAnJA,GAqJe,MCxIA,GAzBf,WAKI,SAAF,EAAsB,GAChB,KAAC,KAAO,EAiBhB,OAdI,EAAF,uBACM,IAAE,EAAI,KAAK,KAAK,OAAO,EAAQ,GAAG,MACtC,GAAI,aAAa,EAAW,OAAO,GAInC,EAAF,8B,QACE,OAAyB,QAAzB,EAAe,QAAf,EAAO,KAAK,WAAG,eAAE,kBAAQ,QAAM,GAGjC,8BAAS,GACP,IAAM,EAAI,KAAK,KAAK,QAAQ,IAAI,GAChC,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,IAlB1B,WAAW,SAACuoK,GAA+B,WAAI,EAAJ,IAoBpD,EAvBA,GCEA,cAKI,SAAF,EAAsB,GACpB,KAAK,KAAO,EAoIhB,OAhIIC,EAAcxoK,UAAU,KAA1B,WACM,OAAG,KAAK,KAAK,OAAO,EAAQ,GAAG,QAAS,IAG5CwoK,EAAcxoK,UAAU,GAA1B,WACM,OAAG,KAAK,KAAK,YAAY,EAAQ,GAAG,MAAO,IAG/C,EAAF,uBACE,IAAM,EAAc,KAAK,KAAK,OAAO,EAAQ,GAAG,MAC5C,OAAG,KAAK,KAAK,QAAQ,YAAY,EAAa,IAGlD,EAAF,kC,MACQ,EAAO,KAAK,OACd,OAAoB,QAAxB,EAAW,OAAJ,QAAI,IAAJ,OAAI,EAAJ,EAAM,qBAAW,QAAM,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,IAG9D,EAAF,gCAAa,GACH,MAAwB,EAAvB,EAAE,EAAqB,EAApB,EAAE,EAAkB,EAAb,MAAE,EAAW,EAAL,OACrB,EAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,EAAG,EAAG,EAAI,EAAO,EAAI,IACrD6B,KAAC,KAAK,IAAI,EAAQ,GAAG,QAAS,IAGlC,EAAF,wCACE,IAAM,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACvC,GAAI,aAAc,EAAS,OAAO,GAIlC,EAAF,sCAAmB,GACb,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,IAGhC2mK,EAAcxoK,UAAU,eAA1B,SAAe,GACT,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,IAGhC,EAAF,8BACM,MAAK,KAAK,KAKV,OAJC,IACH,EAAK,KAAK,KAAK,QAAQ,IAAI,IAC3B,KAAK,KAAK,IAAI,EAAQ,GAAG,MAAO,IAE3B,GAGPwoK,EAAcxoK,UAAU,oBAA1B,WACM,IACE,EADK,KAAK,WACH,IAAI,EAAQ,GAAG,MAC5B,GAAI,aAAa,GAAU,aAAa,EAAS,OAAO,EAExD,MAAM,IAAI,MAAM,uBAAuB,OAAD,QAAC,IAAD,OAAC,EAAD,EAAG,YAAY,QAIrDwoK,EAAcxoK,UAAU,oBAA1B,SAAoB,GACP,KAAK,WACb,IAAI,EAAQ,GAAG,KAAM,IAIxB,EAAF,yCAAsB,GACT,KAAK,WACb,IAAI,EAAQ,GAAG,KAAM,IAIxB,EAAF,qCAAkB,GACL,KAAK,WACb,IAAI,EAAQ,GAAG,KAAM,IAGxBwoK,EAAcxoK,UAAU,yBAA1B,WACM,IAAE,EAAK,KAAK,KACd,OAAE,QAAF,IAAF,KAAI,OAAO,EAAQ,GAAG,OAGtB,EAAF,0CACE,IAAM,EAAK,KAAK,KACd,OAAF,QAAE,IAAF,KAAI,OAAO,EAAQ,GAAG,OAGtB,EAAF,oCAOM,IAAE,EAAK,KAAK,KAEhB,GAAK,EAML,MAAO,CAAE,OAJC,EAAG,OAAO,EAAQ,GAAG,KAAM,EAAS,GAI1B,SAHV,EAAG,YAAY,EAAQ,GAAG,KAAM,EAAS,GAGlB,KAFvB,EAAG,YAAY,EAAQ,GAAG,KAAM,EAAS,KAKrD,gC,QACE,OAAyB,QAAzB,EAAe,QAAf,EAAO,KAAK,WAAG,eAAE,kBAAQ,QAAM,GAGjC,8BAAS,GACP,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,EAAU,GAAG,KAG9C,6BAAQ,GAEN,OAA0B,KADZ,KAAK,WACH,IAGlB,6BAAQ,GACN,IAAM,EAAQ,KAAK,WACnB,KAAK,SAAS,EAAQ,IAGxB,+BAAU,GACR,IAAM,EAAQ,KAAK,WACnB,KAAK,SAAS,GAAS,IAGzB,+BAAU,EAAc,GAClB,EAAQ,KAAK,QAAQ,GACpB,KAAK,UAAU,IArIf,WAAW,SAAC,GAAiC,WAAI,EAAJ,IAuItD,EA1IA,GA4Ie,MCfA,GA7Hf,WAMI,SAAF,EAAsB,GACpB,KAAK,KAAO,EAoHhB,OAjHI,EAAF,uBACM,IAAE,EAAI,KAAK,KAAK,OAAO,EAAQ,GAAG,MAClC,gBAAa,EAAW,OAAO,GAInC,EAAF,wBACM,IAAE,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACnC,gBAAc,EAAU,OAAO,GAInC,EAAF,wBACM,IAAE,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACnC,gBAAc,EAAU,OAAO,GAInC,EAAF,wBACM,IAAE,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACnC,gBAAc,MAAgB,aAAc,KAAW,OAAO,GAIlE,EAAF,wBACM,IAAE,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACnC,gBAAc,MAAgB,aAAc,KAAW,OAAO,GAIlE,EAAF,wBACE,IAAM,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACvC,GAAI,aAAc,MAAgB,aAAc,KAAW,OAAO,GAIlE,EAAF,iC,MACM,OAAW,QAAf,EAAO,KAAK,WAAG,eAAE,YAGjB,EAAF,oCACM,IAAE,EAAK,KAAK,KAEhB,GAAK,EAAL,CAGI,IADA,IAAE,EAAuB,GACpB,EAAM,EAAG,EAAQ,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,OAAQ,EAAM,EAAK,IAAO,CAC9C,MAAY,EAAG,IAAI,GACrB,aAAqB,GAAW,EAAW,KAAK,EAAU,YAG5D,OAAG,IAGP,EAAF,wCACE,IAAM,EAAK,KAAK,KAEZ,GAAC,EAAD,CAGA,IADA,IAAE,EAAuB,GACpB,EAAM,EAAG,EAAQ,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,OAAQ,EAAM,EAAK,IAAO,CAC9C,MAAY,EAAG,IAAI,GACrB,aAAqB,GAAW,EAAW,KAAK,EAAU,YAGhE,OAAO,IAGP,EAAF,iCACE,IAAM,EAAK,KAAK,KACV,EAAK,KAAK,KACV,EAAK,KAAK,KAEhB,MAAO,CACL,OAAU,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,aACZ,SAAY,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,aACd,KAAQ,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,eAIZ,EAAF,+BAAY,GACN,IAAE,EAAI,KAAK,KAAK,QAAQ,IAAI,GAC5B,KAAC,KAAK,IAAI,EAAQ,GAAG,KAAM,IAG/B,EAAF,kCAAe,GACT,IAAE,EAAK,KAAK,KAAK,QAAQ,IAAI,GAC7B,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,IAGhC,EAAF,sCAAmB,GACb,IAAE,EAAK,KAAK,KAAK,QAAQ,IAAI,GAC7B,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,IAGhC,EAAF,+BAAY,GACV,IAAM,EAAK,KAAa,SAAS,EAAS,QAG1C,GAFI,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,GAE5B,EAAS,SAAU,CACrB,IAAM,EAAK,KAAa,SAAS,EAAS,UAC1C,KAAK,KAAK,IAAI,EAAQ,GAAG,MAAO,QAEhC,KAAK,KAAK,OAAO,EAAQ,GAAG,OAG9B,GAAI,EAAS,KAAM,CACjB,IAAM,EAAK,KAAa,SAAS,EAAS,MAC1C,KAAK,KAAK,IAAI,EAAQ,GAAG,MAAO,QAEhC,KAAK,KAAK,OAAO,EAAQ,GAAG,QArHzB,WAAW,SAACuoK,GACb,OAAJ,IAAI,EAA0B,IAuHlC,EA3HA,GCGA,eAAE,SAAF,I,+CAmGA,OAnGkC,iBAc9B,EAAF,wBACE,IAAM,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACvC,GAAI,aAAc,EAAS,OAAO,GAIlC,EAAF,wBACE,IAAM,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACvC,GAAI,aAAc,EAAS,OAAO,GAIlC,EAAF,wBACE,IAAM,EAAK,KAAK,KAAK,OAAO,EAAQ,GAAG,OACvC,GAAI,aAAc,MAAa,aAAc,KAAc,OAAO,GAIlE,EAAF,uBACE,IAAM,EAAI,KAAK,KAAK,IAAI,EAAQ,GAAG,MACnC,GAAI,aAAa,EAAQ,OAAO,GAIhC,EAAF,wBAAK,GACC,KAAC,KAAK,IAAI,EAAQ,GAAG,KAAM,IAG/B,EAAF,wCAAqB,GACf,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,KAAU,GAAG,KAG7C,EAAF,0CACE,IAAM,EAAK,KAAK,KAEZ,oBAAc,KACT,EAAG,aAGH,OAAF,QAAE,IAAF,OAAE,EAAF,EAAI,YAGX,EAAF,kDACM,IAAE,EAAK,KAAK,KACZ,KAAI,OAAO,GAA0B,SAAS,IAIlD,EAAF,0DACM,IAAE,EAAK,KAAK,KACZ,KAAI,OAAO,GAA0B,SAAS,GAE9C,IAAE,EAAK,GAA0B,SAAS,KAAK,KAAK,QAAQ,IAAI,KAEpE,OADI,KAAC,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAG,MAC5B,GAGP,EAAF,oCACM,IAAE,EAAK,KAAK,KACZ,KAAI,OAAO,GAAY,SAAS,IAIpC,EAAF,4CACM,IAAE,EAAK,KAAK,KACZ,KAAI,OAAO,GAAY,SAAS,GAEpC,IAAM,EAAK,GAAY,SAAS,KAAK,KAAK,QAAQ,IAAI,KAElD,OADJ,KAAK,KAAK,IAAI,EAAQ,GAAG,MAAO,EAAG,MAC5B,GAGP,EAAF,gC,MACQ,EAA8B,QAAxB,EAAG,KAAK,wBAAgB,eAAE,OAElC,gBAAkB,EAEpB,IADM,MAAO,EAAO,OACX,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,EAAK,IAAO,CACrD,IAAM,EAAM,EAAK,GACjB,GAAI,IAAQ,EAAQ,GAAG,OAAQ,OAAO,IA5FrC,WAAW,SAAC,GACb,OAAO,IAAP,EAAoB,IAEnB,SAAS,SAAC,EAAqB,GAOhC,OAAG,IAAI,EANE,EAAQ,IAAI,CACvB,KAAM,QACA,QAAG,SACT,KAAM,CAAC,EAAG,EAAG,EAAG,GAChB,OAAQ,MA0Fd,EAnGA,CAAkC,IAqGnB,MCxGf,eAAE,SAAF,I,+CA6DA,OA7D8B,iBAI1BE,EAAgBzoK,UAAU0oK,GAAK,WAC3B,IAAE,EAAY,KAAK,wBAAwB,EAAQ,GAAG,OACtD,OAAG,KAAK,KAAK,QAAQ,OAAO,EAAW,IAG3C,EAAF,gCACM,IAAE,EAAW,KAAK,OAGlB,IAAC,EAAU,MAAO,CAAC,GAAoB,SAAS,KAAK,OAIrD,IADA,IAAE,EAAU,IAAI,MAA2B,EAAS,QAC/C,EAAM,EAAG,EAAM,EAAS,OAAQ,EAAM,EAAK,IAAO,CACzD,IAAM,EAAO,EAAS,OAAO,EAAK,GAClC,EAAQ,GAAO,GAAoB,SAAS,GAG1C,OAAG,GAGPD,EAAgBzoK,UAAU,UAA5B,SAAU,GACS,KAAK,oBAAV,KACP,KAAK,IAGV,EAAF,gCAAa,GACP,IAAE,EAAW,KAAK,OAElB,GAAC,EAIE,CAEL,GAAI,EAAM,GAAK,EAAM,EAAS,OAC5B,MAAM,IAAI,IAAsB,EAAK,EAAG,EAAS,QAEnD,EAAS,OAAO,OATH,CAEP,GAAM,IAAR,EAAW,MAAM,IAAI,IAAsB,EAAK,EAAG,GACjD,KAAD,QAAQ,MAUf,EAAF,uCACM,MAAO,KAAK,OAYhB,OALK,IACH,EAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK1C,MACnC,KAAK,KAAK,IAAI,EAAQ,GAAG,QAAS,IAG7B,CAAE,KAAI,IA1DR,WAAW,SAAC,EAAe,GAC5B,OAAO,IAAP,EAAgB,EAAM,IA2D9B,EA7DA,CAA8B,IA+Df,MC7Df,eAAE,SAAF,I,+CAsGA,OAtG4B,iBACxB,EAAF,yBACE,OAAO,KAAK,KAAK,YACf,EAAQ,GAAG,OACX,KACA,KACA,IAIF,EAAF,0BAAO,GACD,KAAC,KAAK,IAAI,EAAQ,GAAG,OAAQ,KAAK,KAAK,QAAQ,IAAI,KAGvD,EAAF,qCACM,IAAE,EAAM,KAAK,MAEb,GAAC,EAAD,CAEA,gBAAe,MAAa,aAAe,KACvC,MAAC,CAAC,GAIV,IADI,IAAE,EAAuC,GACpC,EAAM,EAAG,EAAM,EAAI,OAAQ,EAAM,EAAK,IAAO,CACpD,IAAM,EAAQ,EAAI,OAAO,IACrB,aAAiB,MAAa,aAAiB,OACjD,EAAO,KAAK,GAIZ,OAAG,IAGP,EAAF,qCAAkB,GACZ,IAAE,EAAM,KAAK,MAEb,GAAC,EAED,gBAAe,MAAa,aAAe,KAAc,CAC3D,GAAY,IAAR,EAAW,MAAM,IAAI,IAAsB,EAAK,EAAG,GACvD,KAAK,OAAO,QACP,CACL,GAAI,EAAM,GAAK,EAAM,EAAI,OACvB,MAAM,IAAI,IAAsB,EAAK,EAAG,EAAI,QAE9C,EAAI,OAAO,KAKb,EAAF,2CAME,I,YALM,EAAqC,QAAzB,EAAG,KAAK,yBAAiB,QAAI,GAEzC,EAAoC,GAEpC,EAAU,KAAK,aACZ,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAAO,CACxD,IAAM,EAAS,EAAQ,GACjB,EACa,QADJ,EACb,EAAa,UAAI,QACjB,KAAa,SAAwC,QAAhC,EAAoB,QAApB,EAAC,EAAO,oBAAY,eAAE,oBAAU,QAAM,IAC7D,EAAI,KAAK,GAGP,KAAC,OAAO,IAOZ,EAAF,0BAAO,EAA+B,G,MAChC,KAAC,wBAEL,IAEI,EAFE,EAAU,EAAI,aAGhB,KAEF,IADA,IAAM,EAAqC,QAAzB,EAAG,KAAK,yBAAiB,QAAI,GACtC,EAAM,EAAG,EAAM,EAAa,OAAQ,EAAM,EAAK,IAAO,CAC3C,EAAa,GACjB,eAAiB,IAAS,EAAc,GAI1D,IAAM,EAAM,KAAK,MAGjB,OAFA,EAAI,KAAK,GAES,OAAX,QAAW,IAAX,IAAe,EAAI,OAAS,GAGrC,sCACE,EACA,EACA,GAEA,IAAM,EAAS,KAAK,OAAO,EAAK,GAC1B,EAAe,EAAQ,GAAG,OAAO,IAEvC,OADA,KAAK,UAAU,GACR,GAEX,EAtGA,CAA4B,IAwGb,MC1Gf,eAAE,SAAF,I,+CAuCA,OAvC8B,iBAa1B,EAAF,4BAAS,G,MAEP,GAAI,KAD6B,QAApB,EAAG,KAAK,oBAAY,QAAI,EAAQ,GAAG,SACvB,IAAU,EAAQ,GAAG,OAC5C,MAAM,IAAI,IAGR,KAAC,KAAK,IAAI,EAAQ,GAAG,KAAM,GAG/B,IADA,IAAM,EAAU,KAAK,aACZ,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAAO,CACxD,IAAMqrK,EAAS,EAAQ,GACjB,EAAQ,EAAO,eAAiB,EAAQ,EAAQ,EAAQ,GAAG,OACjE,EAAO,mBAAmB,KAI5BC,EAAgB,UAAlB,oBACM,IAAE,EAAI,KAAK,IACX,oBAAa,EAAgB,EAC1B,EAAQ,GAAG,QAGlB,EAAF,gCACS,MAAU,KAAK,aAAT,GACb,OAAa,OAAN,QAAM,IAAN,OAAM,EAAN,EAAQ,cApCV,WAAW,SAAC,EAAe,GAChC,WAAI,EAAgB,EAAM,IAErB,SAAS,SAAC,GACX,IAAE,EAAO,EAAQ,IAAI,CACjB,GAAF,MACJ,KAAM,KAGJ,OAAG,IAAI,EAAgB,EADf,EAAQ,SAAS,KA8BjC,EAvCA,CAA8B,IAyCf,MRhDT,GAAO,SAAC,GAAqB,cAGnC,SAAY,GAQRC,EAAeA,EAAyB,SAA/B,GAAK,IAAM,WAMpB,EAAF,WAAW,GAAK,IAAM,WAMtB,aAAW,GAAK,IAAM,WApBxB,CAAY,QAAc,KAwB1B,SAAY,GAMR,EAAF,gBAAgB,GAAK,KAAO,gBAM1B,EAAF,QAAQ,GAAK,KAAO,QAKlB,EAAF,aAAa,GAAK,KAAO,aAQvB,EAAF,iBAAiB,GAAK,KAAO,iBAzB/B,CAAY,QAAe,KA6B3B,SAAY,GAKR,EAAF,YAAY,GAAK,KAAO,YAUtB,EAAF,WAAW,GAAK,KAAO,WAMrB,EAAF,aAAa,GAAK,KAAO,aAKvB,EAAF,kBAAkB,GAAK,KAAO,kBAU5B,EAAF,cAAc,GAAK,KAAO,cAS1B,SAAO,GAAK,KAAO,OAQjB,EAAF,WAAW,GAAK,KAAO,WArDzB,CAAY,QAAa,KAyDzB,SAAY,GAIR,EAAF,QAAQ,GAAK,KAAO,QAOlBC,EAAgBA,EAAlB,KAAO,GAAK,KAAO,OAQjB,EAAF,OAAO,GAAK,KAAO,OAMjB,EAAF,cAAc,GAAK,KAAO,cAMxBA,EAAgBA,EAAlB,gBAAkB,GAAK,KAAO,kBAgB9B,sBAAoB,GAAK,KAAO,oBA/ClC,CAAY,QAAe,KStG3B,mBAAE,SAAF,I,+CA2IA,OA3I4B,iBACxB,EAAF,6BAAU,GACR,GACE,KAAK,QAAQ,GAAgB,SAC5B,KAAK,QAAQ,GAAgB,QAC7B,KAAK,eAAe,GAErB,MAAM,IAAI,IASR,GANkB,IAAlB,EAAO,QACT,KAAK,KAAK,OAAO,EAAQ,GAAG,MAER,IAAlB,EAAO,QACT,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,EAAO,IAEpC,EAAO,OAAS,EAAG,CACf,IAAD,KAAK,QAAQ,GAAgB,aAChC,MAAM,IAAI,IAEZ,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,KAAK,KAAK,QAAQ,IAAI,IAGnD,KAAC,sBAAsB,IAG3B,EAAF,kCAAe,GAET,IADA,IAAE,EAAU,KAAK,a,WACZ,EAAS,GAChB,IAAM,EAAM,EAAO,GAAK,aACxB,IAAK,EAAQ,MAAK,SAAC,GAAM,YAAS,EAAE,SAAW,EAAE,OAAxB,gB,cAChB,IAHF,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,IAAK,C,QAA9C,G,sCAML,OAAG,GAGPC,EAAc/oK,UAAUgpK,sBAAwB,SAA5B,GAChB,KAAO,OAAS,EAAG,CAGf,IAFA,MAAU,IAAI,MAAc,EAAO,QACnC,EAAU,KAAK,a,WACZ,EAAS,GACR,IAAF,EAAM,EAAO,GAAK,aAChBz/I,EAAA,GAAO,EAAQ,WACrB,SAAC,GAAM,YAAS,EAAE,SAAW,EAAE,OAAxB,iBAHF,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,I,EAAzC,GAMH,KAAD,KAAK,IAAI,EAAQ,GAAG,KAAM,KAAK,KAAK,QAAQ,IAAI,EAAQ,cAE7D,KAAK,KAAK,OAAO,EAAQ,GAAG,OAI9B,EAAF,+BACE,IAAM,EAAI,KAAK,IAEX,gBAAa,MAAa,aAAa,KAAc,MAAO,CAAC,GAE7D,gBAAa,EAAU,CAGnB,IAFA,MAAuC,GAEpC,EAAM,EAAG,EAAM,EAAE,OAAQ,EAAM,EAAK,IAAO,CAC1C,IAAF,EAAQ,EAAE,OAAO,IACnB,aAAiB,MAAa,aAAiB,OACjD,EAAO,KAAK,GAIhB,OAAO,EAGL,MAAG,IAGP,EAAF,yBACM,OAAG,KAAK,KAAK,YACf,EAAQ,GAAG,OACX,KACA,KACA,IAIF,EAAF,8BACE,GAMI,IADA,IAAE,EAAS,IAAI,MAAgB,EAAQ,QAClC,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAAO,CAClD,MAAqB,EAAQ,GAA3B,EAAK,QAAE,EAAO,UAChB,EAAC,GAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,EAAO,GAAW,IAErD,KAAC,KAAK,IAAI,EAAQ,GAAG,OAAQ,KAAK,KAAK,QAAQ,IAAI,KAGvD,EAAF,gCAIM,IAAE,EAAM,KAAK,MAGb,gBAAe,MAAa,aAAe,KACvC,MAAC,CAAC,CAAE,MAAO,EAAK,QAAS,IAG7B,gBAAe,EAAU,CAM3B,IALA,IAAM,EAGA,GAEG,EAAM,EAAG,EAAM,EAAI,OAAQ,EAAM,EAAK,IAAO,CACpD,IAAM,EAAO,EAAI,OAAO,GAUxB,IAPI,aAAgB,MAAa,aAAgB,OAC/C,EAAI,KAAK,CAAE,MAAO,EAAM,QAAS,IAM/B,aAAgB,GACd,EAAK,OAAS,EAAG,CACnB,IAAM,EAAQ,EAAK,OAAO,EAAG,KAAW,MAClC,EAAS,EAAK,YAAY,EAAG,KAAW,MAC9C,EAAI,KAAK,CAAE,MAAO,EAAO,QAAS,GAAU,KAKlD,OAAO,EAGT,MAAO,IAEX,EA3IA,CAA4B,IA6Ib,MClJf,eAAE,SAAF,I,+CAaE,OAb4B,iBACrB,WAAW,SAAC,EAAe,GAChC,WAAI,EAAgB,EAAM,IAErB,SAAS,SAAC,GACf,IAAM,EAAO,EAAQ,IAAI,CACvB,GAAI,KACE,GAAF,GAAgB,MACd,UAGJ,OAAG,IAAI,EAAgB,EADf,EAAQ,SAAS,KAGjC,EAbA,CAA8B,IAef,MCff,eAAE,SAAF,I,+CAyBA,OAzBiC,iBAU7B,EAAF,4BAAS,GACC,MAAS,KAAK,oBAAV,KACR,mBAAJ,KAAM,KAAK,IAGX,EAAF,uCACE,IAAI,EAAO,KAAK,OAOhB,OALK,IACH,EAAO,KAAK,KAAK,QAAQ,IAAI,IAC7B,KAAK,KAAK,IAAI,EAAQ,GAAG,QAAS,IAG7B,CAAE,KAAI,IAtBR,WAAW,SAAC,EAAe,GAChC,WAAI,EAAmB,EAAM,IAExB,SAAS,SAAC,GACf,IAAM,EAAO,EAAQ,IAAI,IAErB,OAAG,IAAI,EAAmB,EADlB,EAAQ,SAAS,KAmBjC,EAzBA,CAAiC,IA2BlB,MC7Bf,eAAE,SAAF,I,+CAGE,OAH6B,iBACtB,WAAW,SAAC,EAAe,GAChC,WAAI,EAAiB,EAAM,IAC/B,EAHA,CAA+B,IAKhB,MCAf,eAAE,SAAF,I,+CAgEA,OAhE0B,iBAYtB,EAAF,4BACE,IAAM,EAAS,KAAK,KAAK,OAAO,EAAQ,GAAG,WAC3C,GAAI,aAAkB,EAAW,OAAO,GAIxC,EAAF,uBACE,IAAM,EAAI,KAAK,KAAK,OAAO,EAAQ,GAAG,MACtC,GAAI,aAAa,EAAW,OAAO,GAInC0/I,EAAYjpK,UAAU,aAAxB,SAAa,GACP6B,KAAC,KAAK,IAAI,EAAQ,GAAG,UAAW,EAAU,GAAG,KAGjD,EAAF,qCACM,KAAC,KAAK,OAAO,EAAQ,GAAG,YAG5B,EAAF,kC,MACM,OAAgB,QAApB,EAAO,KAAK,gBAAQ,eAAE,YAGtB,EAAF,+BAAY,GACN,KAAC,KAAK,IAAI,EAAQ,GAAG,KAAM,EAAU,GAAG,KAG5ConK,EAAYjpK,UAAU,YAAxB,W,MACM,OAAW,QAAf,EAAO,KAAK,WAAG,eAAE,YAGjB,EAAF,4BAAS,GACH,KAAC,KAAK,IAAI,EAAQ,GAAG,KAAM,IAU/B,EAAF,iCACM,KAAC,KAAK,OAAO,EAAQ,GAAG,OAG9B,gCACE,IAAM,EAAI,KAAK,IACf,GAAI,aAAa,MAAa,aAAa,KAAc,OAAO,GA5D3D,WAAW,SAAC,EAAe,GAAgB,WAAI,EAAY,EAAhB,IAE3C,SAAS,SAAC,GACX,IAAE,EAAO,EAAQ,IAAI,CACjB,GAAF,KACJ,KAAM,KAGJ,OAAG,IAAI,EAAY,EADX,EAAQ,SAAS,KAwDjC,EAhEA,CAA0B,IAkEX,MCrEf,eAAE,SAAF,I,+CAaE,OAb8B,iBACvB,WAAW,SAAC,EAAe,GAChC,WAAI,EAAkB,EAAM,IAEvB,SAAS,SAAC,GACf,IAAM,EAAO,EAAQ,IAAI,CACvB,GAAI,MACE,GAAF,GAAgB,WACd,UAGJ,OAAG,IAAI,EAAkB,EADjB,EAAQ,SAAS,KAGjC,EAbA,CAAgC,IAejB,MCbf,eAAE,SAAF,I,+CA+CA,OA/CiC,iBAc7B,EAAF,4BAAS,GAEH,IADa,KAAK,cACR,SAAS,IAAU,IAAU,EAAQ,GAAG,OACpD,MAAM,IAAI,IAGZ,KAAK,KAAK,IAAI,EAAQ,GAAG,KAAM,GAG3B,IADA,IAAE,EAAU,KAAK,aACZ,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAAO,CACxD,IAAM,EAAS,EAAQ,GACjB,EAAQ,EAAO,eAAiB,EAAQ,EAAQ,EAAQ,GAAG,OAC3D,EAAC,mBAAmB,KAI5B,EAAF,8BACE,IAAM,EAAI,KAAK,IACX,oBAAa,EAAgB,EAC1B,EAAQ,GAAG,QAGlB,EAAF,iCAIM,IAHA,IAAE,EAAU,KAAK,aAEf,EAAsB,GACnB,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAAO,CACxD,IAAM,EAAU,EAAQ,GAAK,aACzB,GAAS,EAAS,KAAK,GAG7B,OAAO,GA5CF,WAAW,SAAC,EAAe,GAChC,WAAI,EAAmB,EAAM,IAExB,SAAS,SAAC,GACX,IAAE,EAAO,EAAQ,IAAI,CACvB,GAAI,MACJ,GAAI,GAAgB,MACpB,KAAM,KAGJ,OAAG,IAAI,EAAmB,EADlB,EAAQ,SAAS,KAqCjC,EA/CA,CAAiC,IAiDlB,MCpDf,eAAE,SAAF,I,+CAYE,OAZ2B,iBACpB,WAAW,SAAC,EAAe,GAChC,WAAI,EAAe,EAAM,IAEpB,SAAS,SAAC,GACf,IAAM,EAAO,EAAQ,IAAI,CACvB,GAAI,KACE,UAGJ,OAAG,IAAI,EAAe,EADd,EAAQ,SAAS,KAGjC,EAZA,CAA6B,IAcd,MCEF,GAAsB,SACjC,GAEE,IAAG,EAAU,MAAO,GAGpB,IADA,IAAI,EAAiC,GAC9B,EAAM,EAAG,EAAM,EAAS,OAAQ,EAAM,EAAK,IAAO,CACzD,IAAM,EAAM,EAAS,IAAI,GACnB,EAAO,EAAS,OAAO,GAEzB,aAAe,GAAU,aAAgB,GAC3C,EAAK,KAAK,CAAC,GAAmB,EAAM,GAAM,IAI9C,OAAO,GAGI,GAAqB,SAChC,EACA,GAGA,OADsB,GAAuB,GACnB,GAAmB,SAAS,EAAM,GACrD,GAAsB,EAAM,IAmB/B,GAAyB,SAAC,GAC5B,IAAI,EAAO,EAAK,OAAO,EAAQ,GAAG,SAElC,GAAE,aAAgB,EACd,IAAC,IAAI,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,EAAK,IAAO,CACrD,IAAM,EAAM,EAAK,OAAO,GAExB,GADmB,aAAe,GAAW,EAAI,IAAI,EAAQ,GAAG,MAChD,OAAO,EAIzB,OAAK,GAGH,GAAwB,SAAC,EAAe,GAC1C,IAAI,EAAc,GAAwB,EAAM,EAAQ,GAAG,OACvD,EAAO,EAAK,QAAQ,OAAO,EAAa,GAE5C,OAAE,IAAS,EAAQ,GAAG,OAAe,GAAoB,EAAM,GAC7D,IAAS,EAAQ,GAAG,MAAc,GAAoB,EAAM,GAC5D,IAAS,EAAQ,GAAG,MAAc,GAAY,SAAS,EAAM,GAC7D,IAAS,EAAQ,GAAG,OAAe,GAAiB,SAAS,EAAM,GAKhE,GAAgB,SAAS,EAAM,IAGlC,GAAsB,SAAC,EAAe,G,MACpC,EAAgB,GAAwB,EAAM,EAAQ,GAAG,OACzDkpK,EAAW,EAAK,QAAQ,YAAY,EAAe,GACnD,EAA0B,QAArB,EAAW,OAAR,QAAQ,IAAR,OAAQ,EAAR,EAAU,kBAAQ,QAAM,EAEpC,OAAE,GAAU,EAAO,GAAgB,YAC5B,GAAkB,SAAS,EAAM,GAC/B,GAAU,EAAO,GAAgB,OACnC,GAAmB,SAAS,EAAM,GAElC,GAAgB,SAAS,EAAM,IAIpC,GAAsB,SAAC,EAAe,G,MACpC,EAAgB,GAAwB,EAAM,EAAQ,GAAG,OACzD,EAAW,EAAK,QAAQ,YAAY,EAAe,GACnD,EAA0B,QAArB,EAAW,OAAR,QAAQ,IAAR,OAAQ,EAAR,EAAU,kBAAQ,QAAM,EAEpC,OAAE,GAAU,EAAO,GAAgB,OAC5B,GAAgB,SAAS,EAAM,GAE/B,GAAe,SAAS,EAAM,IAInC,GAAY,SAAC,EAAe,GAC9B,OAAiB,KAAlB,EAAQ,IAEL,GAA0B,SAAC,EAAoB,GACnD,IAAI,EAIJ,OAHA,GAAO,GAAW,SAAC,GACZ,IAAW,EAAY,EAAK,IAAI,OAEhC,GAGH,GAAS,SAAT,EAAU,EAAoB,GAClC,EAAQ,GACR,IAAM,EAAS,EAAU,YAAY,EAAQ,GAAG,UAAW,GACvD,GAAQ,EAAO,EAAQ,IChCd,GAzFf,WAUI,SAAF,EAAoB,GACd,KAAC,KAAO,EA4EhB,OAzEI,EAAF,4BACM,IAAE,EAAS,KAAK,KAAK,OAAO,EAAQ,GAAG,WACvC,gBAAkB,EAAU,OAAO,GAIvC,EAAF,+BAIM,IAHQ,IAAI,EAAG,KAAK,oBAAV,OAER,EAAS,IAAI,MAAM,EAAO,QACvB,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,IAAO,CACjD,MAAM,EAAO,IAAI,GACjB,EAAO,EAAO,OAAO,EAAK,GAChC,EAAO,GAAO,CAAC,GAAmB,EAAM,GAAM,GAGhD,OAAO,GAGP,EAAF,kCACE,IAAM,EAAsC,GAgBxC,OAde,SAAb,EAAc,GAClB,GAAK,EACL,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,IAAO,CACvD,IAAM,EAAQ,EAAO,GACrB,EAAU,KAAK,GACR,MAAc,EAAJ,GACb,aAAsB,IACxB,EAAW,GAAoB,EAAW,UAK5C,CAAO,KAAK,aAET,GAGP,EAAF,4BAAS,GACC,MAAW,KAAK,oBAAV,OACR,OAAN,QAAM,IAAN,KAAQ,KAAK,IAGb,EAAF,+BAAY,GACV,IAAM,EAAS,EAAM,YACf,OACO,IAAX,EAAuB,KAAK,oBAAoB,OAAS,EAAO,OAE5D,EAAc,OAAN,QAAM,IAAN,OAAM,EAAN,EAAQ,QAAQ,EAAM,KACpC,QAAe,IAAX,QAAkC,IAAV,EAC1B,MAAM,IAAI,MACR,oCAAoC,EAAM,yBAI9C,EAAO,OAAO,QAEC,IAAX,GAA0C,IAAlB,EAAO,QACjC,KAAK,YAAY,IAIrB,yCACE,IAAI,EAAS,KAAK,SAOlB,OALK,IACH,EAAS,KAAK,KAAK,QAAQ,IAAI,IAC/B,KAAK,KAAK,IAAI,EAAQ,GAAG,UAAW,IAG/B,CAAE,OAAM,IAlFV,WAAW,SAAC,GAAkB,WAAI,EAAJ,IAE9B,SAAS,SAAC,GAEX,OAAG,IAAI,EADE,EAAQ,IAAI,CAAE,OAAQ,OAiFvC,EAvFA,GCJA,eAAE,SAAF,I,+CA0EA,OA1EyB,iBAcrBC,EAAWnpK,UAAU,MAAvB,WACM,OAAG,KAAK,OAAO,EAAQ,GAAG,SAAU,IAGxC,EAAF,8BACM,OAAG,KAAK,YAAY,EAAQ,GAAG,YAAa,IAGhD,EAAF,iCACE,IAAM,EAAO,KAAK,WACd,GAAC,EACL,OAAO,GAAY,SAAS,IAG5B,EAAF,yCACM,MAAW,KAAK,cAChB,IAAC,EAAU,CACb,EAAW,GAAY,OAAO,KAAK,SACnC,IAAM,EAAc,KAAK,QAAQ,SAAS,EAAS,MACnD,KAAK,IAAI,EAAQ,GAAG,YAAa,GAE/B,OAAG,GAGP,EAAF,uCACM,OAAG,KAAK,YAAY,EAAQ,GAAG,qBAAsB,IAGzD,EAAF,0CACE,IAAM,EAAO,KAAK,oBAClB,GAAK,EACL,OAAO,GAAkB,SAAS,IAGlCmpK,EAAWnpK,UAAU,6BAAvB,WACM,MAAc,KAAK,uBACnB,IAAC,EAAa,CAChB,EAAc,GAAkB,OAAO,KAAK,SAC5C,IAAM,EAAiB,KAAK,QAAQ,SAAS,EAAY,MACzD,KAAK,IAAI,EAAQ,GAAG,qBAAsB,GAE5C,OAAO,GAUP,EAAF,kCAAe,EAAiB,GAC9B,IAAM,EAAW,KAAK,IAAI,EAAQ,GAAG,UAErC,OADuB,KAAK,QAAQ,eAAe,EAAS,IACnC,GAG3B,oCAAe,GACb,KAAK,QAAQ,eAAe,IAvEvB,sBAAsB,SAC3B,EACA,GAEA,IAAM,EAAO,IAAI,IAGjB,OAFI,EAAC,IAAI,EAAQ,GAAG,QAAS,EAAQ,GAAG,YACxC,EAAK,IAAI,EAAQ,GAAG,SAAU,GACvB,IAAI,EAAW,EAAM,IAGrB,EAAF,mBAAqB,SAAC,EAAc,GACrC,OAAO,IAAP,EAAW,EAAK,IA8DxB,EA1EA,CAAyB,GA4EV,MCzEf,eAAE,SAAF,I,+CAqLA,OArL0B,iBAatB,EAAF,4BACE,OAAO,KAAK,OAAO,EAAQ,GAAG,YAG9B,EAAF,0BACE,OAAO,KAAK,OAAO,EAAQ,GAAG,QAAS,IAGvC,EAAF,2BACE,OAAO,KAAK,OAAO,EAAQ,GAAG,SAAU,IAGxC,EAAF,gCAAa,GACE,KAAK,OACb,KAAK,IAGV,EAAF,gCAAa,GACP,IAAE,EAAO,KAAK,OACd,KAAC,cAAc,EAAK,OAAQ,IAYhC,EAAF,kCAAe,EAAiB,GAC1B,IAAE,EAAO,KAAK,OACZ,EAAQ,KAAK,QAAQ,WAEvB,KAAc,EACV,UAAI,IAAwB,EAAaopK,GAI7C,IADA,MAA4B,EACvB,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,EAAK,IAAO,CAC/C,GAA4B,IAA9B,EAGF,YADA,KAAK,cAAc,EAAK,GAIpB,MAAS,EAAK,IAAI,GAClB,EAAM,KAAK,QAAQ,OAAO,GAEhC,GAAI,aAAe,EAAa,CAC9B,GAAI,EAAI,QAAQ,WAAa,EAE3B,OACE,EAAI,eAAe,EAAS,IAA8B,EAI5D,GAA6B,EAAI,QAAQ,WAIzC,aAAe,IAEjB,GAA6B,GAI7B,GAA8B,IAA9B,EAOA,MAAE,IAAI,IAAqB,EAAa,kBALpC,KAAD,cAAc,EAAK,OAAQ,IAgBlC,EAAF,kCAAe,EAAqB,sBAC9B,IAAE,EAAO,KAAK,OACZ,EAAQ,KAAK,QAAQ,WAEvB,MAAe,EACX,UAAI,IAAwB,EAAa,GAI7C,IADA,MAA4B,EACvB,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,EAAK,IAAO,CACrD,IAAM,EAAS,EAAK,IAAI,GAClB,EAAM,KAAK,QAAQ,OAAO,GAEhC,GAAI,aAAe,EAAa,CAC9B,GAAI,EAAI,QAAQ,WAAa,EAI3B,OAFA,EAAI,eAAe,EAA2B,QAC1C,GAA+B,IAAtB,EAAI,OAAO,QAAc,EAAK,OAAO,IAIlD,GAA6B,EAAI,QAAQ,WAIvC,GAAF,aAAe,EAAa,CACtB,GAA0B,IAA9B,EAGF,YADA,KAAK,UAAU,GAIf,GAA6B,GAMnC,MAAM,IAAI,IAAqB,EAAa,mBAG5C,EAAF,0BAAO,GACD,EAAIvnK,MACJ,IAAE,EAAS,KAAK,SAChB,GAAQ,EAAO,OAAO,IAI1B,EAAF,4BAAS,GAEH,IADJ,IAAM,EAAO,KAAK,OACT,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,EAAK,IAAO,CACrD,IAAM,EAAS,EAAK,IAAI,GAClB,EAAM,KAAK,QAAQ,OAAO,GAC5B,aAAe,GAAa,EAAI,SAAS,GAC7C,EAAQ,EAAK,KAIT,0BAAR,SAAsB,EAAgB,GAChC,IAAE,EAAO,KAAK,OAElB,KAAK,QAAO,SAAC,GACX,IAAM,EAAW,EAAK,QAAQ,WAAa,EAC3C,EAAK,IAAI,EAAQ,GAAG,SAAU,EAAU,GAAG,OAG7C,EAAK,OAAO,EAAQ,IAGd,sBAAR,SAAkB,GAChB,IAAM,EAAO,KAAK,OAEN,EAAK,OAAO,aACL,GACjB,KAAK,QAAO,SAAC,GACX,IAAM,EAAW,EAAK,QAAQ,WAAa,EAC3C,EAAK,IAAI,EAAQ,GAAG,SAAU,EAAU,GAAG,OAI/C,EAAK,OAAO,IAlLP,cAAc,SAAC,EAAqB,GACrC,IAAE,EAAO,IAAI,IAKjB,OAJA,EAAK,IAAI,EAAQ,GAAG,QAAS,EAAQ,GAAG,UACxC,EAAK,IAAI,EAAQ,GAAG,QAAS,EAAQ,IAAI,KACrC,EAAC,IAAI,EAAQ,GAAG,SAAU,EAAQ,IAAI,IACtC,GAAQ,EAAK,IAAI,EAAQ,GAAG,UAAW,GACpC,IAAI,EAAY,EAAM,IAGxB,qBAAqB,SAAC,EAAc,GACrC,OAAJ,IAAI,EAAY,EAAK,IA0KzB,EArLA,CAA0B,GAuLX,MChMF,GAAU,IAAI,WAAW,KAEtCwnK,GAAQjU,EAAA,EAAU,MAAQ,EAC1BiU,GAAQjU,EAAA,EAAU,KAAO,EACzBiU,GAAQjU,EAAA,EAAU,KAAO,EACzBiU,GAAQjU,EAAA,EAAU,OAAS,EAC3BiU,GAAQjU,EAAA,EAAU,MAAQ,EAC1BiU,GAAQjU,EAAA,EAAU,MAAQ,EAC1BiU,GAAQjU,EAAA,EAAU,KAAO,EACzBiU,GAAQjU,EAAA,EAAU,OAAS,EAC3B,GAAQ,IAAU,OAAS,EAC3B,GAAQ,IAAU,MAAQ,EAEnB,IAAM,GAAkB,IAAI,WAAW,KAE9C,GAAgB,IAAU,QAAU,EACpC,GAAgB,IAAU,MAAQ,EAClC,GAAgB,IAAU,OAAS,EAInC,IAFO,IAAM,GAAY,IAAI,WAAW,KAE/B,GAAM,EAAc,GAAL,IAAgB,KACtC,GAAU,IAAO,GAAQ,KAAQ,GAAgB,IAAO,EAAI,ECjBtD,ICJI,GDIJ,GAA4B,IAArB,QAAE,GAAmB,IAAL,eA+GhB,GA5Gf,WAII,SAAF,EAAY,EAAmB,sBACzB,KAAC,MAAQ,EACT,KAAC,WAAa,EAoGtB,OAjGY,wBAAV,WAGM,IAFA,MAAQ,IAEJ,KAAK,MAAM,QAAQ,CACnB,MAAO,KAAK,MAAM,OACxB,IAAK,GAAQ,GAAO,MACpB,GAAS,YAAa,KAAK,MAAM,QAGnC,IAAM,EAAc,OAAO,GAEvB,IAAC,IAAU,SAAS,GACtB,MAAM,IAAI,IAAmB,KAAK,MAAM,WAAY,GAGlD,OAAG,GAKC,2BAAV,WAIM,IAHA,MAAQ,IAGJ,KAAK,MAAM,QAAQ,CACnB,MAAO,KAAK,MAAM,OAClB,IAAD,GAAU,GAAO,MAEtB,GADA,GAAS,YAAa,KAAK,MAAM,QAC7B,IAAS,IAAU,OAAQ,MAI7B,MAAI,KAAK,MAAM,QAAQ,CACnB,EAAO,KAAK,MAAM,OAClB,IAAD,GAAQ,GAAO,MACd,GAAG,YAAa,KAAK,MAAM,QAG/B,IAAE,EAAc,OAAO,GAEvB,IAAC,IAAU,SAAS,GAChB,UAAI,IAAmB,KAAK,MAAM,WAAY,GAGtD,GAAI,EAAc,OAAO,iBAAkB,CACzC,GAAI,KAAK,WAAY,CACnB,IAAM,EAAM,yDAAyD,EAAK,2CAE1E,OADA,QAAQ,KAAK,GACN,OAAO,iBAER,EAAM,yDAAyD,EAAK,iBAC1E,QAAQ,KAAK,GAIb,OAAG,GAGC,2BAAV,WACM,MAAIvzJ,KAAK+4G,MAAM,QAAU,EAAa,KAAK,MAAM,SAC7C,KAAD,MAAM,QAIH,EAAF,mBAAV,WACM,MAAI/4G,KAAK+4G,MAAM,QAAQ,CACzB,IAAM,EAAO,KAAK,MAAM,OACxB,GAAI,IAAS,IAAW,IAAS,GAAgB,OACjD,KAAK,MAAM,SAIL,wBAAV,WACE,GAAI,KAAK,MAAM,SAAW,IAAU,QAAS,OAAO,EACpD,MAAQ,KAAK,MAAM,QAAQ,CACzB,IAAM,EAAO,KAAK,MAAM,OACxB,GAAI,IAAS,IAAW,IAAS,GAAgB,OAAO,EAClD,KAAD,MAAM,OAET,OAAG,GAGC,sCAAV,WAEE,IADA,KAAK,iBACE,KAAK,eAAe,KAAK,kBAGxB,yBAAV,SAAuB,GAErB,IADA,IAAM,EAAgB,KAAK,MAAM,SACxB,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IACjD,GAAI,KAAK,MAAM,QAAU,KAAK,MAAM,SAAW,EAAQ,GAErD,OADA,KAAK,MAAM,OAAO,IACX,EAGX,OAAO,GAEX,EA1GA,GEiEe,GArEf,WAaI,SAAF,EAAY,GAJJ,SAAM,EACN,UAAO,EACP,YAAS,EAGX,KAAC,MAAQ,EACT,KAAC,OAAS,KAAK,MAAM,OAoD7B,OAjDI,EAAF,0BAAO,GACL,KAAK,IAAM,GAGX,EAAF,0BACM,IAAE,EAAO,KAAK,MAAM,KAAK,OAOzB,OANA,IAAS,IAAU,SACrB,KAAK,MAAQ,EACb,KAAK,OAAS,GAEd,KAAK,QAAU,EAEV,GAGP,EAAF,8BAAW,GACT,GAAI,KAAK,SAAW,EAClB,MAAM,IAAI,IAAuB,KAAK,WAAY,EAAU,KAAK,QAEnE,OAAO,KAAK,QAGZ,EAAF,0BACE,OAAO,KAAK,MAAM,KAAK,MAGvB0uD,EAAWtpK,UAAU,UAAvB,SAAU,GACJ,OAAG,KAAK,MAAM,KAAK,IAAM,IAG7BspK,EAAW,UAAb,gBAAO,GACD,OAAG,KAAK,MAAM,IAGpB,4BACE,OAAO,KAAK,KAAO,KAAK,QAG1B,8BACE,OAAO,KAAK,KAGd,2BAAM,EAAe,GACnB,OAAO,KAAK,MAAM,MAAM,EAAO,IAGjC,gCACE,MAAO,CAAE,KAAM,KAAK,KAAM,OAAQ,KAAK,OAAQ,OAAQ,KAAK,MAhEvD,KAAK,SAAC,GAAsB,WAAI,EAAJ,IAE5B,mBAAmB,SAAC,GACrB,OAAJ,EAAW,GAAG,GAAmB,GAAW,WA+DhD,EAnEA,GCJQ,GAAmC,IAA9B,MAAE,GAA4B,IAAdC,eAAE,GAAY,IAAL,QAEhC,GAAS,CACb,IAAUl6J,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,GAGN,GAAY,CAChB,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAUA,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,GAGC,GAAW,CACpB,OAAM,CACN,IAAU,QACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,MAEV,IAAG,CACH,IAAU,QACV,IAAU,QACV,IAAU,EACV,IAAU,EACV,IAAU,GAEV,IAAG,CAAC+lJ,EAAA,EAAU,EAAG,IAAU,EAAG,IAAU,GACxC,OAAM,CACN,IAAU,EACV,IAAU,EACV,IAAUztJ,EACV,IAAU,EACV,IAAU,EACV,IAAU,GAEV,KAAI,CAAC,IAAU,EAAG,IAAU,EAAG,IAAU,EAAG,IAAU,GACtD,QAAO,CACP,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,GAEV,UAAS,CACT,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,EACV,IAAU,GAEV,KAAI,CAAC,IAAU,EAAG,IAAU,EAAG,IAAU,EAAG,IAAU,GACtD,MAAK,CAAC,IAAU,EAAG,IAAU,EAAG,IAAU,EAAG,IAAU,EAAG,IAAU,GACpE,KAAI,CAAC,IAAU,EAAG,IAAU,EAAG,IAAU,EAAG,IAAU,GACtD6hK,OAAI,GACJ,WAAQ,YAAM,GAAM,CAAE,GAAO,GAAgB,KAC7C,WAAQ,YAAM,GAAM,CAAE,GAAgB,KACtC,WAAQ,YAAM,GAAM,CAAE,KACtB,WAAQ,YAAM,GAAM,CAAE,KACtB,UAAO,GACT,cAAa,aAAG,GAAgB,IAAY,IAC5C,cAAa,aAAG,IAAmB,IACnC,cAAa,aAAG,IAAY,KCgMf,GAjPf,YAeI,SAAF,EAAY,EAAwB,EAAqB,sBAArD,IAAJ,EACE,YAAM,EAAY,IAAW,K,OACzB,EAAC,QAAU,E,EA8NnB,OA/O8B,iBAqB1B,EAAF,iCAGM,GAFA,KAAC,4BAED,KAAK,aAAa,GAAS,MAAO,OAAO,EAAQ,KACrD,GAAI,KAAK,aAAa,GAAS,OAAQ,OAAO,EAAQ,MACtD,GAAI,KAAK,aAAa,GAAS,MAAO,OAAO,EAEzC,IAAE,EAAO,KAAK,MAAM,OAEpB,GACF,IAAS,IAAU,UACnB,KAAK,MAAM,UAAU,KAAO,IAAU,SAEhC,OAAC,KAAK,oBAEV,OAAS,IAAU,SAAU,OAAO,KAAK,iBACzC,OAAS,IAAU,UAAW,OAAO,KAAK,cAC1C,OAAS,IAAU,aAAc,OAAO,KAAK,YAC7C,OAAS,IAAU,kBAAmB,OAAO,KAAK,aACtD,GAAI,GAAU,GAAO,OAAO,KAAK,mBAEjC,MAAM,IAAI,IAAsB,KAAK,MAAM,WAAY,IAG/C,6BAAV,WACM,IAAE,EAAW,KAAK,iBAClB,KAAC,4BAED,IAAE,EAAiB,KAAK,MAAM,SAClC,GAAI,GAAQ,KAAK,MAAM,QAAS,CAC9B,IAAM,EAAY,KAAK,iBAEvB,GADA,KAAK,4BACD,KAAK,MAAM,SAAW,IAAU,EAElC,OADA,KAAK,MAAM,WAAW,IAAU,GACzB,EAAO,GAAG,EAAU,GAK3B,OADA,KAAC,MAAM,OAAO,GACX,EAAU,GAAG,IAIZ,2BAAV,WACM,MAAQ,GAGR,IADA,KAAC,MAAM,WAAW,IAAU,WACxB,KAAK,MAAM,QAAU,KAAK,MAAM,SAAW,IAAU,aACrD,GAAG,YAAa,KAAK,MAAM,QAI/B,OAFA,KAAC,MAAM,WAAW,IAAU,aAEzB,KAAa,GAAG,IAGf,wBAAV,WAKE,IAJI,MAAa,EACb,GAAY,EACZ,EAAQ,IAEJ,KAAK,MAAM,QAAQ,CACzB,IAAM,EAAO,KAAK,MAAM,OAiBlB,GAhBN,GAAS,YAAa,GAGjB,IACC,IAAS,IAAU,YAAW,GAAc,GAC5C,IAAS,IAAU,aAAY,GAAc,IAI/C,IAAS,IAAU,UACrB,GAAa,EACJ,IACT,GAAY,GAIK,IAAf,EAEF,OAAO,KAAU,GAAG,EAAM,UAAU,EAAG,EAAM,OAAS,IAI1D,MAAM,IAAI,IAA2B,KAAK,MAAM,aAKxC,sBAAV,WACM,KAAC,MAAM,WAAW,IAAU,cAG5B,IADA,MAAO,IACH,KAAK,MAAM,QAAQ,CACnB,MAAO,KAAK,MAAM,OAClB,GAAF,EAAa,IAAS,EAAY,GAAO,MACvC,GAAE,YAAa,GACrB,KAAK,MAAM,OAGT,OAAG,EAAQ,GAAG,IAGV,uBAAV,WACM,KAAC,MAAM,WAAW,IAAU,mBAC5B,KAAC,4BAGD,IADA,IAAE,EAAW,EAAS,YAAY,KAAK,SACpC,KAAK,MAAM,SAAW,IAAU,oBAAoB,CACnD,MAAU,KAAK,cACrB,EAAS,KAAK,GACd,KAAK,4BAGP,OADI,KAAC,MAAM,WAAW,IAAU,oBACzB,GAGC,sBAAV,WACM3nK,KAAC,MAAM,WAAW,IAAU,UAC5B,KAAC,MAAM,WAAW,IAAU,UAC5B,KAAC,4BAID,IAFA,IAAE,EAAgB,IAAI,KAGvB,KAAK,MAAM,QACZ,KAAK,MAAM,SAAW,IAAU,aAChC,KAAK,MAAM,UAAU,KAAO,IAAU,aACtC,CACA,IAAM,EAAM,KAAK,YACX,EAAQ,KAAK,cACb,EAAD,IAAI,EAAK,GACRA,KAAD,4BAGH,KAAC,4BACD,KAAC,MAAM,WAAW,IAAU,aAC5B,KAAC,MAAM,WAAW,IAAU,aAE5B,IAAE,EAAO,EAAK,IAAI,EAAQ,GAAG,SAE7B,WAAS,EAAQ,GAAG,WACf,GAAW,mBAAmB,EAAM,KAAK,SACvC,IAAS,EAAQ,GAAG,SACtB,GAAY,mBAAmB,EAAM,KAAK,SACxC,IAAS,EAAQ,GAAG,QACtB,EAAY,mBAAmB,EAAM,KAAK,SAE1C,EAAQ,mBAAmB,EAAM,KAAK,UAIvC,8BAAV,WACM,IAAE,EAAWA,KAAK,MAAM,WAEtB,EAAO,KAAK,YAId,GAFA,KAAC,6BAGF,KAAK,aAAa,GAAS,cAC3B,KAAK,aAAa,GAAS,cAC3B,KAAK,aAAa,GAAS,cAC3B,KAAK,aAAa,GAAS,cAC3B,KAAK,aAAa,GAAS,QAEtB,OAAC,EAGT,IACI,EADE,EAAQ,KAAK,MAAM,SAGnB,EAAS,EAAK,IAAI,EAAQ,GAAG,WAC/B,aAAkB,GACpB,EAAM,EAAQ,EAAO,WACrB,KAAK,MAAM,OAAO,GAClB,KAAK,4BACA,KAAK,aAAa,GAAS,aAC9B,KAAK,MAAM,OAAO,GAClB,EAAM,KAAK,wBAAwB,KAGrC,EAAM,KAAK,wBAAwB,GAGrC,IAAM,EAAW,KAAK,MAAM,MAAM,EAAO,GAEzC,OAAO,EAAa,GAAG,EAAM,IAGrB,oCAAV,SAAkC,GAKhC,IAHA,IAAI,EAAa,EACb,EAAM,KAAK,MAAM,UAEb,KAAK,MAAM,SACjB,EAAM,KAAK,MAAM,SAEb,KAAK,aAAa,GAAS,QAC7B,GAAc,EAEd,KAAK,aAAa,GAAS,gBAC3B,KAAK,aAAa,GAAS,gBAC3B,KAAK,aAAa,GAAS,gBAC3B,KAAK,aAAa,GAAS,WAE3B,GAAc,EAEd,KAAK,MAAM,OAGM,IAAf,KAGN,GAAmB,IAAf,EAAkB,MAAM,IAAI,IAAsB,GAEtD,OAAO,GA5OF,WAAW,SAChB,EACA,EACA,GACG,WAAI,EAAgB,GAAW,GAAG,GAAQ,EAA1C,IAEE,gBAAgB,SACrB,EACA,EACA,GACO,YADP,IAAQ,IAAR,MACG,IAAI,EAAgB,EAAY,EAAS,IAoOhD,EA/OA,CAA8B,ICkCf,GAzDf,YAWI,SAAF,EAAY,EAAyB,GAAjC,IAAJ,EACE,YAAM,GAAW,iBAAiB,GAAY,EAAU,KAAK,UAAQ,KAE7D,EAAS,EAAL,K,OAER,EAAC,eAAgB,EACjB,EAAC,kBAAoB,GAAsB,WAAM,UACjD,EAAC,YAAc,EAAK,OAAO,EAAQ,GAAG,SAAU,GAAW,WAC3D,EAAC,YAAc,EAAK,OAAO,EAAQ,GAAG,KAAM,GAAW,W,EAoC7D,OAvDkC,iBAsB1B,EAAF,2BAAN,W,kIACc,GAAR,KAAK,cACO,MAAR,IAAI,IAAa,wBAAyB,oBAEtC,KAAP,eAAgB,EAEH,EAAc,KAAK,+BAC5B,EAAM,EAAG,EAAM,EAAwB,O,wBAAQ,EAAM,GAC1C,EAAe,EAAwB,GAAjD,EAAY,eAAE,EAAM,SAChB,KAAP,MAAM,OAAO,KAAK,YAAc,GAC/B,EAAS,KAAK,cACF,EAAN,EAAO,GAAG,EAAc,GACxB,KAAP,QAAQ,OAAO,EAAK,GACrB,KAAK,oBAAqB,GAAM,gBAAhC,OAN2D,M,OAMjC,S,wBANmC,I,+BAU3D,EAAF,uCAAR,WAKM,IADJ,IAAM,EAA0B,GACvB,EAAM,EAAG,EAAM,KAAK,YAAa,EAAM,EAAK,IAAO,CAC1D,KAAK,4BACC,MAAe,KAAK,cAEpBA,KAAD,4BACC,MAAS,KAAK,cAEpB,EAAwB,KAAK,CAAE,aAAY,EAAE,OAAM,IAErD,OAAO,GApDF,YAAY,SACjB,EACA,GACG,WAAI,EAAsB,EAA1B,IAmDP,EAvDA,CAAoC,ICwHrB,GAhHf,WAeI,SAAF,EAAY,GACN,KAAC,eAAgB,EAEjBA,KAAC,KAAO,EAAU,KAClBA,KAAC,MAAQ,GAAW,iBAAiB,GACrC,KAAC,QAAU,KAAK,KAAK,QAErB,IAAE,EAAO,KAAK,KAAK,OAAO,EAAQ,GAAG,QAAS,GAE5C,EAAQ,KAAK,KAAK,OAAO,EAAQ,GAAG,UACtC,gBAAiB,EAAU,CAC7B,KAAK,YAAc,GACnB,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,OAAQ,EAAM,EAAK,GAAO,EAAG,CACzD,IAAM,EAAoB,EAAM,OAAO,EAAM,EAAG,GAAW,WACrD,EAAS,EAAM,OAAO,EAAM,EAAG,GAAW,WAChD,KAAK,YAAY,KAAK,CAAE,kBAAiB,EAAE,OAAM,UAGnD,KAAK,YAAc,CAAC,CAAE,kBAAmB,EAAG,OAAQ,EAAK,aAGvD,IAAE,EAAI,KAAK,KAAK,OAAO,EAAQ,GAAG,KAAM,GACxC,KAAC,WAAa,EAAE,GAAI,GAAI,GACxB,IAAK,EAAM,EAAG,EAAM,EAAE,OAAQ,EAAM,EAAK,IACrC,KAAD,WAAW,GAAO,EAAE,OAAO,EAAK,GAAW,WAuEtD,OAnEI,EAAF,sCACM,QAAK,cACD,UAAI,IAAa,sBAAuB,oBAkB5C,OAhBA,KAAC,eAAgB,EAEjB,KAAC,QAAQ,YAAc,CACnB,UAAK,KAAK,IAAI,EAAQ,GAAG,SACzB,QAAG,KAAK,KAAK,IAAI,EAAQ,GAAG,YAC5B,UAAK,KAAK,IAAI,EAAQ,GAAG,SACzB,GAAF,KAAK,KAAK,IAAI,EAAQ,GAAG,QAGf,KAAK,gBAUf,yBAAR,WAIE,IAHA,IAAM,EAAU,GACV,EAAoD,KAAK,WAAxD,EAAc,KAAE,EAAgB,KAAE,EAAa,KAGhD,EAAgB,EAAG,EAAgB,KAAK,YAAY,OACxD,EAAgB,EAChB,IAIA,IAFM,MAAgC,KAAK,YAAY,GAA/C,EAAiB,oBAAE,EAAM,SAExB,EAAS,EAAG,EAAS,EAAQ,IAAU,CAE9C,IADA,IAAI,EAAO,EACF,EAAM,EAAG,EAAM,EAAgB,EAAM,EAAK,IACjD,EAAQ,GAAQ,EAAK,KAAK,MAAM,OAGlC,IAAI,EAAS,EACb,IAAS,EAAM,EAAG,EAAM,EAAkB,EAAM,EAAK,IACnD,EAAU,GAAU,EAAK,KAAK,MAAM,OAGtC,IAAI,EAAmB,EACvB,IAAS,EAAM,EAAG,EAAM,EAAe,EAAM,EAAK,IAChD,EAAoB,GAAoB,EAAK,KAAK,MAAM,OAInC,IAAnB,IAAsB,EAAO,GAEjC,IAAM,EAAe,EAAoB,EACnC,EAAQ,CACZ,IAAK,EAAO,GAAG,EAAc,GAC7B,OAAM,EACN,QAAkB,IAAT,EACT,eAAyB,IAAT,GAGlB,EAAQ,KAAK,GAIjB,OAAO,GA3GA,EAAF,UAAY,SAAC,GACd,OAAJ,IAAI,EAAoB,IA4G5B,EA9GA,GC0Ve,GAjVf,YAcI,SAAF,EACE,EACA,EACA,EACA,QAFA,QAAM,EAAN,UACA,QAAM,GAAN,QACA,QAAM,GAAN,GAJE,IAAJ,EAME,YAAM,GAAW,GAAG,GAAW,EAAW,SAAU,IAAW,K,OATzD,iBAAgB,EAChB,gBAAgB,EAqGZ,EAAJ,kBAAoB,WAEpB,OADA,EAAD,eAAiB,EACf,EAAK,cAAgB,EAAK,iBAAmB,GA9FhD,EAAC,eAAiB,EAClB,EAAC,qBAAuB,E,EAyThC,OA/UwB,iBAyBd,EAAF,wBAAN,W,sHACc,GAAR,KAAK,cACO,MAAR,IAAI,IAAa,YAAa,iBAE1B,KAAP,eAAgB,EAET,KAAP,QAAQ,OAAS,KAAK,c,wBAGnB,KAAK,MAAM,OAAM,MACvB,GAAM,KAAK,wB,OAEC,GAFA,EAAZ,QACkB,EAAH,KAAK,MAAM,YACX,EACC,MAAR,IAAI,IAAmB,KAAK,MAAM,Y,OAE1C,EAAa,E,aAUf,OAPA,KAAK,mBAED,KAAK,QAAQ,OAAO,EAAO,GAAG,MAChC,QAAQ,KAAK,iCACb,KAAK,QAAQ,OAAO,EAAO,GAAG,KAGhC,GAAO,KAAK,iBAGJ,EAAF,2BAAR,WACM,IAAE,EAAiB,SAAC,GAChB,OAAN,aAAe,GACf,EAAI,OAAO,EAAQ,GAAG,WAAa,EAAQ,GAAG,YAIhD,IAAK,EAFW,KAAK,QAAQ,OAAO,KAAK,QAAQ,YAAY,OAIrD,IADN,IAAM,EAAkB,KAAK,QAAQ,2BAC5B,EAAM,EAAG,EAAM,EAAgB,OAAQ,EAAM,EAAK,IAAO,CAC1D,MAAgB,EAAgB,GAA/B,EAAG,KACN,EADc,QAEhB,KAAK,QAAQ,YAAY,KAAO,KAMhC,wBAAR,WACM,MAAI,KAAK,MAAM,QAAQ,CACzB,GAAI,KAAK,aAAa,GAAS,QAAS,CACtC,IAAM,EAAQ,KAAK,cACnBA,KAAK,MAAM,WAAW,IAAU,QAChC,IAAM,EAAQ,KAAK,cACb,EAAS,EAAU,WAAW,EAAO,GAE3C,OADA,KAAK,0BACE,EAEH,KAAD,MAAM,OAGb,MAAM,IAAI,IAAsB,KAAK,MAAM,aAGrC,sCAAR,WACM,KAAC,4BACD,IAAE,EAAe,KAAK,cAEtB,KAAC,4BACD,IAAE,EAAmB,KAAK,cAG9B,GADI,KAAC,6BACA,KAAK,aAAa,GAAS,KAC9B,MAAM,IAAI,IAAoB,KAAK,MAAM,WAAY,GAAS,KAG5D,OAAG,EAAO,GAAG,EAAc,IAGvB,EAAF,oCAAR,WACM,IAAE,EAAgB,KAAK,MAAM,SAC7B,IAEI,OADA,KAAD,6BACE,EACP,MAAO,GAED,OADA,KAAD,MAAM,OAAO,IACX,IASK,EAAF,8BAAd,W,6HACoB,EAAN,KAAK,4BAEL,KAAP,4BACa,EAAH,KAAK,cAER,KAAP,4BAML,KAAK,aAAa,GAAS,QAGzB,aAAkB,GAClB,EAAO,KAAK,OAAO,EAAQ,GAAG,WAAa,EAAQ,GAAG,UAEtD,GAAM,GAAsB,UAC1B,EACA,KAAK,mBACL,oBANF,M,cAGA,S,aAKA,aAAkB,GAClB,EAAO,KAAK,OAAO,EAAQ,GAAG,WAAa,EAAQ,GAAG,QAEtD,GAAoB,UAAU,GAAQ,mBAEtC,KAAK,QAAQ,OAAO,EAAK,G,iBAG3B,SAAO,WAID,4CAAR,WACM,IAAE,EAAW,KAAK,MAAM,WAEtB,EAAM,mCAAmC,KAAK,UAAU,GAAS,IACvE,GAAI,KAAK,qBAAsB,MAAM,IAAI,MAAM,GAC/C,QAAQ,KAAK,GAET,IAAE,EAAM,KAAK,4BAEb,QAAI,KAAK,uBAAuB,GAEhC,KAAC,4BAID,IAHA,IAAE,EAAQ,KAAK,MAAM,SAErB,GAAS,GACL,KAAK,MAAM,SACb,KAAK,aAAa,GAAS,UACrB,GAAC,GAEN,IACC,KAAD,MAAM,OAGT,KAAQ,MAAM,IAAI,IAA6B,GAE/C,IAAE,EAAM,KAAK,MAAM,SAAW,GAAS,OAAO,OAE5C,EAAS,EAAiB,GAAG,KAAK,MAAM,MAAM,EAAO,IAGvD,OAFA,KAAC,QAAQ,OAAO,EAAK,GAElB,GAGO,EAAF,+BAAd,W,oHACc,KAAP,4B,oBAEG,KAAK,MAAM,SAAU,GAAQ,KAAK,MAAM,QAAO,YACnC,EAAI,KAAK,MAAM,S,iBAG/B,O,sBAAA,GAAM,KAAK,uB,cAAX,S,6BAGA,KAAK,MAAM,OAAO,GAClB,KAAK,kC,oBAEP,KAAK,4BAGL,KAAK,gBAED,KAAK,oBAAqB,GAAM,gBAAhC,M,OAA0B,S,sDAIxB,EAAF,oCAAR,WAEM,GADA,KAAC,4BACA,KAAK,aAAa,GAAS,MAA5B,CACA,KAAC,4BAKD,IAHA,OAAgB,EACd,EAAO,EAAmB,eAExB,KAAK,MAAM,QAAU,GAAQ,KAAK,MAAM,SAAS,CACjD,MAAW,KAAK,cAChB,KAAD,4BAEC,MAAY,KAAK,cACjB,KAAD,4BAEC,MAAO,KAAK,MAAM,OAClB,GAAF,IAAS,IAAU,GAAK,IAAS,IAAU,EAAG,CAChD,IAAM,EAAM,EAAO,GAAG,EAAc,GAChC,KAAK,MAAM,SAAW,IAAU,EAClC,EAAK,SAAS,EAAK,GAGnB,EAAK,gBAAgB,EAAK,GAE5B,GAAgB,OAEhB,EAAe,EAEX,KAAD,4BAGH,OAAG,IAGD,kCAAR,WAEM,GADAA,KAAC,4BACA,KAAK,aAAa,GAAS,SAA5B,CACA,KAAC,4BAED,IAAE,EAAO,KAAK,YAEV,EAAY,KAAL,QACX,EAAI,YAAc,CACpB,KAAM,EAAK,IAAI,EAAQ,GAAG,UAAY,EAAQ,YAAY,KAC1D,QAAS,EAAK,IAAI,EAAQ,GAAG,aAAe,EAAQ,YAAY,QAChE,KAAM,EAAK,IAAI,EAAQ,GAAG,UAAY,EAAQ,YAAY,KAC1D,GAAI,EAAK,IAAI,EAAQ,GAAG,QAAU,EAAQ,YAAY,MAIhD,EAAF,4BAAR,WAEM,GADA,KAAC,4BACA,KAAK,aAAa,GAAS,WAA5B,CACA,KAAC,4BAED,IAAE,EAAS,KAAK,cAQpB,OANI,KAAC,iBACD,KAAC,aAAa,GAAS,KACvB,KAAC,4BACD,KAAC,aAAa,GAAS,KACvB,KAAC,4BAEE,EAAW,6BAA6B,KAGnC,iCAAd,W,8GACE,SAAM,KAAK,wB,cAAX,SACA,KAAK,4BACL,KAAK,wBACL,KAAK,oBAGL,KAAK,gB,YASG,EAAF,wBAAR,WAEM,IADA,KAAC,6BACG,KAAK,MAAM,QAAQ,CACnB,MAAgB,KAAK,MAAM,SAC3B,EAAO,KAAK,MAAM,OAExB,GADuB,GAAQ,IAAU,OAAS,GAAQ,IAAU,QAGhE,KAAK,aAAa,GAAS,OAC3B,KAAK,aAAa,GAAS,UAC3B,KAAK,aAAa,GAAS,YAC3B,KAAK,6BACL,CACA,KAAK,MAAM,OAAO,GAClB,MAGJ,KAAK,MAAM,SAiBP,oCAAR,WACE,KAAK,4BACL,IACE,IAAM,EAAgB,KAAK,MAAM,SACjC,KAAK,4BACL,KAAK,MAAM,OAAO,GAClB,MAAO,GACP,KAAK,MAAM,OACX,KAAK,8BA3UF,sBAAsB,SAC3B,EACA,EACA,EACA,GAEI,OAAJ,IAAI,EAAU,EAAU,EAAgB,EAAsB,IAwUlE,EA/UA,CAAwB,IN1BlB,GAAO,SAAC,GAAqB,cAGnC,SAAY,GAOR4nK,EAAgBA,EAA2B,UAAjC,GAAK,IAAM,YAYrB,EAAF,SAAS,GAAK,IAAM,SASlB,EAAF,QAAQ,GAAK,IAAM,QAQjB,EAAF,SAAS,GAAK,IAAM,SAOlB,EAAF,WAAW,GAAK,IAAM,WAQpB,EAAF,SAAS,GAAK,IAAM,SAWlB,EAAF,WAAW,GAAK,IAAM,WAQpBA,EAAgBA,EAAlB,OAAS,GAAK,IAAM,SAQpB,iBAAe,GAAK,IAAM,eAO1B,mBAAiB,GAAK,IAAO,iBArF/B,CAAY,QAAe,M,iBOH3B,qBAQE,WAGA,IAAI9rK,EAUA+rK,EAAkB,sBAIlBC,EAAiB,4BAMjBC,EAAc,yBAgBdC,EAAwB,GACxBC,EAAoB,GACpBC,EAA0B,GAC1BC,EAAgB,IAChBC,EAAkB,IAiBlBC,EAAW,IACXC,EAAmB,iBAEnBC,EAAM,IAGNC,EAAmB,WAKnBC,EAAY,CACd,CAAC,MAAON,GACR,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aAAcH,GACf,CAAC,OAjCkB,KAkCnB,CAAC,UAAWC,GACZ,CAAC,eAAgBC,GACjB,CAAC,QAASE,IAIRM,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBACZC,EAAa,mBAEbC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmB5vH,OAAO0vH,EAAcv9I,QACxC09I,EAAqB7vH,OAAO2vH,EAAgBx9I,QAG5C29I,EAAW,mBACXC,GAAa,kBACbC,GAAgB,mBAGhBC,GAAe,mDACfC,GAAgB,QAChBC,GAAa,mGAMbC,GAAe,sBACfC,GAAkBrwH,OAAOowH,GAAaj+I,QAGtCm+I,GAAc,OAGdC,GAAe,KAGfC,GAAgB,4CAChBC,GAAgB,oCAChBC,GAAiB,QAGjBC,GAAc,4CAYdC,GAA6B,mBAG7BC,GAAe,WAMfC,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAOpBC,GAAeC,gDACfC,GAAiB,kBACjBC,GAAe,4BAKfC,GAAe,4BACfC,GAAa,iBACbC,GAAeC,8OAGfC,GAAS,YACTC,GAAW,oBACXC,GAAU,IAAMJ,GAAe,IAC/BK,GAAU,IAAMX,GAAe,IAC/BY,GAAW,OACXC,GAAY,oBACZC,GAAU,IAAMX,GAAe,IAC/BY,GAAS,oBAAuBT,GAAeM,GAAWV,GAAiBC,GAAeC,GAAe,IACzGY,GAAS,2BAETC,GAAc,qBACdC,GAAa,kCACbC,GAAa,qCACbC,GAAU,IAAMhB,GAAe,IAI/BiB,GAAc,MAAQP,GAAU,IAAMC,GAAS,IAC/CO,GAAc,MAAQF,GAAU,IAAML,GAAS,IAC/CQ,GAAkB,qCAClBC,GAAkB,qCAClBC,GAZa,MAAQd,GAAU,IAAMK,GAAS,IAYtB,IACxBU,GAAW,oBAIXC,GAAQD,GAAWD,IAHP,gBAAwB,CAACR,GAAaC,GAAYC,IAAYhsJ,KAAK,KAAO,IAAMusJ,GAAWD,GAAW,MAIlHG,GAAU,MAAQ,CAACf,GAAWK,GAAYC,IAAYhsJ,KAAK,KAAO,IAAMwsJ,GACxEE,GAAW,MAAQ,CAACZ,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAUtrJ,KAAK,KAAO,IAGxG2sJ,GAAStzH,OAAOgyH,GAAQ,KAMxBuB,GAAcvzH,OAAOmyH,GAAS,KAG9BqB,GAAYxzH,OAAOwyH,GAAS,MAAQA,GAAS,KAAOa,GAAWF,GAAO,KAGtEM,GAAgBzzH,OAAO,CACzB4yH,GAAU,IAAMN,GAAU,IAAMS,GAAkB,MAAQ,CAACb,GAASU,GAAS,KAAKjsJ,KAAK,KAAO,IAC9FmsJ,GAAc,IAAME,GAAkB,MAAQ,CAACd,GAASU,GAAUC,GAAa,KAAKlsJ,KAAK,KAAO,IAChGisJ,GAAU,IAAMC,GAAc,IAAME,GACpCH,GAAU,IAAMI,GAtBD,mDADA,mDA0BfZ,GACAgB,IACAzsJ,KAAK,KAAM,KAGT+sJ,GAAe1zH,OAAO,0BAA+BwxH,GAAeK,GAAa,KAGjF8B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,GACrBA,GAAehF,GAAcgF,GAAe/E,GAC5C+E,GAAe9E,GAAW8E,GAAe7E,GACzC6E,GAAe5E,GAAY4E,GAAe3E,GAC1C2E,GAAe1E,GAAmB0E,GAAezE,GACjDyE,GAAexE,IAAa,EAC5BwE,GAAelG,GAAWkG,GAAejG,GACzCiG,GAAelF,GAAkBkF,GAAehG,GAChDgG,GAAejF,GAAeiF,GAAe/F,GAC7C+F,GAAe9F,GAAY8F,GAAe7F,GAC1C6F,GAAe3F,GAAU2F,GAAe1F,GACxC0F,GAAezF,GAAayF,GAAevF,GAC3CuF,GAAetF,GAAUsF,GAAerF,GACxCqF,GAAenF,IAAc,EAG7B,IAAIoF,GAAgB,GACpBA,GAAcnG,GAAWmG,GAAclG,GACvCkG,GAAcnF,GAAkBmF,GAAclF,GAC9CkF,GAAcjG,GAAWiG,GAAchG,GACvCgG,GAAcjF,GAAciF,GAAchF,GAC1CgF,GAAc/E,GAAW+E,GAAc9E,GACvC8E,GAAc7E,GAAY6E,GAAc5F,GACxC4F,GAAc3F,GAAa2F,GAAc1F,GACzC0F,GAAcxF,GAAawF,GAAcvF,GACzCuF,GAActF,GAAasF,GAAcrF,GACzCqF,GAAc5E,GAAY4E,GAAc3E,GACxC2E,GAAc1E,GAAa0E,GAAczE,IAAa,EACtDyE,GAAc/F,GAAY+F,GAAc9F,GACxC8F,GAAcpF,IAAc,EAG5B,IA4EIqF,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBp2F,WACjBq2F,GAAepzH,SAGfqzH,GAA8B,iBAAVC,GAAsBA,GAAUA,EAAO9wK,SAAWA,QAAU8wK,EAGhFC,GAA0B,iBAARC,MAAoBA,MAAQA,KAAKhxK,SAAWA,QAAUgxK,KAGxE73J,GAAO03J,IAAcE,IAAYE,SAAS,cAATA,GAGjCC,GAA4Cn0K,IAAYA,EAAQkM,UAAYlM,EAG5Eo0K,GAAaD,IAAgC,iBAAVp0K,GAAsBA,IAAWA,EAAOmM,UAAYnM,EAGvFs0K,GAAgBD,IAAcA,GAAWp0K,UAAYm0K,GAGrDG,GAAcD,IAAiBP,GAAW/gJ,QAG1CwhJ,GAAY,WACd,IAEE,IAAIC,EAAQJ,IAAcA,GAAWn0K,SAAWm0K,GAAWn0K,QAAQ,QAAQu0K,MAE3E,OAAIA,GAKGF,IAAeA,GAAYG,SAAWH,GAAYG,QAAQ,QACjE,MAAOxnK,KAXK,GAeZynK,GAAoBH,IAAYA,GAASI,cACzCC,GAAaL,IAAYA,GAASM,OAClCC,GAAYP,IAAYA,GAAS5qK,MACjCorK,GAAeR,IAAYA,GAASS,SACpCC,GAAYV,IAAYA,GAASlyJ,MACjC6yJ,GAAmBX,IAAYA,GAASY,aAc5C,SAASroK,GAAMiiB,EAAM6rD,EAAS/qD,GAC5B,OAAQA,EAAKnpB,QACX,KAAK,EAAG,OAAOqoB,EAAKlpB,KAAK+0E,GACzB,KAAK,EAAG,OAAO7rD,EAAKlpB,KAAK+0E,EAAS/qD,EAAK,IACvC,KAAK,EAAG,OAAOd,EAAKlpB,KAAK+0E,EAAS/qD,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOd,EAAKlpB,KAAK+0E,EAAS/qD,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAOd,EAAKjiB,MAAM8tE,EAAS/qD,GAa7B,SAASulJ,GAAgB1sK,EAAO2sK,EAAQC,EAAUx0F,GAIhD,IAHA,IAAI9/E,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GAClBq0K,EAAOv0F,EAAavgF,EAAO+0K,EAAS/0K,GAAQmI,GAE9C,OAAOo4E,EAYT,SAASy0F,GAAU7sK,EAAO4sK,GAIxB,IAHA,IAAIt0K,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,IAC8B,IAAzC4uK,EAAS5sK,EAAM1H,GAAQA,EAAO0H,KAIpC,OAAOA,EAYT,SAAS8sK,GAAe9sK,EAAO4sK,GAG7B,IAFA,IAAI5uK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OAEhCA,MAC0C,IAA3C4uK,EAAS5sK,EAAMhC,GAASA,EAAQgC,KAItC,OAAOA,EAaT,SAAS+sK,GAAW/sK,EAAOuG,GAIzB,IAHA,IAAIjO,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,GACf,IAAKuI,EAAUvG,EAAM1H,GAAQA,EAAO0H,GAClC,OAAO,EAGX,OAAO,EAYT,SAASgtK,GAAYhtK,EAAOuG,GAM1B,IALA,IAAIjO,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnCivK,EAAW,EACXl9J,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACdiO,EAAU1O,EAAOS,EAAO0H,KAC1B+P,EAAOk9J,KAAcp1K,GAGzB,OAAOkY,EAYT,SAASm9J,GAAcltK,EAAOnI,GAE5B,SADsB,MAATmI,EAAgB,EAAIA,EAAMhC,SACpBmvK,GAAYntK,EAAOnI,EAAO,IAAM,EAYrD,SAASu1K,GAAkBptK,EAAOnI,EAAO6Q,GAIvC,IAHA,IAAIpQ,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,GACf,GAAI0K,EAAW7Q,EAAOmI,EAAM1H,IAC1B,OAAO,EAGX,OAAO,EAYT,SAAS+0K,GAASrtK,EAAO4sK,GAKvB,IAJA,IAAIt0K,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnC+R,EAASnS,MAAMI,KAEV1F,EAAQ0F,GACf+R,EAAOzX,GAASs0K,EAAS5sK,EAAM1H,GAAQA,EAAO0H,GAEhD,OAAO+P,EAWT,SAAS61D,GAAU5lE,EAAOsH,GAKxB,IAJA,IAAIhP,GAAS,EACT0F,EAASsJ,EAAOtJ,OAChBiM,EAASjK,EAAMhC,SAEV1F,EAAQ0F,GACfgC,EAAMiK,EAAS3R,GAASgP,EAAOhP,GAEjC,OAAO0H,EAeT,SAASstK,GAAYttK,EAAO4sK,EAAUx0F,EAAam1F,GACjD,IAAIj1K,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OAKvC,IAHIuvK,GAAavvK,IACfo6E,EAAcp4E,IAAQ1H,MAEfA,EAAQ0F,GACfo6E,EAAcw0F,EAASx0F,EAAap4E,EAAM1H,GAAQA,EAAO0H,GAE3D,OAAOo4E,EAeT,SAASo1F,GAAiBxtK,EAAO4sK,EAAUx0F,EAAam1F,GACtD,IAAIvvK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OAIvC,IAHIuvK,GAAavvK,IACfo6E,EAAcp4E,IAAQhC,IAEjBA,KACLo6E,EAAcw0F,EAASx0F,EAAap4E,EAAMhC,GAASA,EAAQgC,GAE7D,OAAOo4E,EAaT,SAASq1F,GAAUztK,EAAOuG,GAIxB,IAHA,IAAIjO,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,GACf,GAAIuI,EAAUvG,EAAM1H,GAAQA,EAAO0H,GACjC,OAAO,EAGX,OAAO,EAUT,IAAI0tK,GAAYC,GAAa,UAmC7B,SAASC,GAAYhtK,EAAY2F,EAAWsnK,GAC1C,IAAI99J,EAOJ,OANA89J,EAASjtK,GAAY,SAAS/I,EAAO4I,EAAKG,GACxC,GAAI2F,EAAU1O,EAAO4I,EAAKG,GAExB,OADAmP,EAAStP,GACF,KAGJsP,EAcT,SAAS+9J,GAAc9tK,EAAOuG,EAAWwnK,EAAWC,GAIlD,IAHA,IAAIhwK,EAASgC,EAAMhC,OACf1F,EAAQy1K,GAAaC,EAAY,GAAK,GAElCA,EAAY11K,MAAYA,EAAQ0F,GACtC,GAAIuI,EAAUvG,EAAM1H,GAAQA,EAAO0H,GACjC,OAAO1H,EAGX,OAAQ,EAYV,SAAS60K,GAAYntK,EAAOnI,EAAOk2K,GACjC,OAAOl2K,IAAUA,EAidnB,SAAuBmI,EAAOnI,EAAOk2K,GACnC,IAAIz1K,EAAQy1K,EAAY,EACpB/vK,EAASgC,EAAMhC,OAEnB,OAAS1F,EAAQ0F,GACf,GAAIgC,EAAM1H,KAAWT,EACnB,OAAOS,EAGX,OAAQ,EAzdJ21K,CAAcjuK,EAAOnI,EAAOk2K,GAC5BD,GAAc9tK,EAAOkuK,GAAWH,GAatC,SAASI,GAAgBnuK,EAAOnI,EAAOk2K,EAAWrlK,GAIhD,IAHA,IAAIpQ,EAAQy1K,EAAY,EACpB/vK,EAASgC,EAAMhC,SAEV1F,EAAQ0F,GACf,GAAI0K,EAAW1I,EAAM1H,GAAQT,GAC3B,OAAOS,EAGX,OAAQ,EAUV,SAAS41K,GAAUr2K,GACjB,OAAOA,IAAUA,EAYnB,SAASu2K,GAASpuK,EAAO4sK,GACvB,IAAI5uK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAOA,EAAUqwK,GAAQruK,EAAO4sK,GAAY5uK,EAAU0mK,EAUxD,SAASiJ,GAAaltK,GACpB,OAAO,SAASH,GACd,OAAiB,MAAVA,EAAiBrI,EAAYqI,EAAOG,IAW/C,SAAS6tK,GAAehuK,GACtB,OAAO,SAASG,GACd,OAAiB,MAAVH,EAAiBrI,EAAYqI,EAAOG,IAiB/C,SAAS8tK,GAAW3tK,EAAYgsK,EAAUx0F,EAAam1F,EAAWM,GAMhE,OALAA,EAASjtK,GAAY,SAAS/I,EAAOS,EAAOsI,GAC1Cw3E,EAAcm1F,GACTA,GAAY,EAAO11K,GACpB+0K,EAASx0F,EAAavgF,EAAOS,EAAOsI,MAEnCw3E,EAgCT,SAASi2F,GAAQruK,EAAO4sK,GAKtB,IAJA,IAAI78J,EACAzX,GAAS,EACT0F,EAASgC,EAAMhC,SAEV1F,EAAQ0F,GAAQ,CACvB,IAAIimC,EAAU2oI,EAAS5sK,EAAM1H,IACzB2rC,IAAYhsC,IACd8X,EAASA,IAAW9X,EAAYgsC,EAAWl0B,EAASk0B,GAGxD,OAAOl0B,EAYT,SAASy+J,GAAUjsK,EAAGqqK,GAIpB,IAHA,IAAIt0K,GAAS,EACTyX,EAASnS,MAAM2E,KAEVjK,EAAQiK,GACfwN,EAAOzX,GAASs0K,EAASt0K,GAE3B,OAAOyX,EAyBT,SAAS0+J,GAAS/rK,GAChB,OAAOA,EACHA,EAAOuJ,MAAM,EAAGyiK,GAAgBhsK,GAAU,GAAGqyE,QAAQwyF,GAAa,IAClE7kK,EAUN,SAASisK,GAAUtoJ,GACjB,OAAO,SAASxuB,GACd,OAAOwuB,EAAKxuB,IAchB,SAAS+2K,GAAWtuK,EAAQ+lC,GAC1B,OAAOgnI,GAAShnI,GAAO,SAAS5lC,GAC9B,OAAOH,EAAOG,MAYlB,SAASouK,GAAS3vK,EAAOuB,GACvB,OAAOvB,EAAMkB,IAAIK,GAYnB,SAASquK,GAAgBC,EAAYC,GAInC,IAHA,IAAI12K,GAAS,EACT0F,EAAS+wK,EAAW/wK,SAEf1F,EAAQ0F,GAAUmvK,GAAY6B,EAAYD,EAAWz2K,GAAQ,IAAM,IAC5E,OAAOA,EAYT,SAAS22K,GAAcF,EAAYC,GAGjC,IAFA,IAAI12K,EAAQy2K,EAAW/wK,OAEhB1F,KAAW60K,GAAY6B,EAAYD,EAAWz2K,GAAQ,IAAM,IACnE,OAAOA,EAWT,SAAS42K,GAAalvK,EAAOmnH,GAI3B,IAHA,IAAInpH,EAASgC,EAAMhC,OACf+R,EAAS,EAEN/R,KACDgC,EAAMhC,KAAYmpH,KAClBp3G,EAGN,OAAOA,EAWT,IAAIo/J,GAAeb,GAjxBG,CAEpB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IACnC,OAAQ,KAAM,OAAQ,KACtB,OAAQ,KAAM,OAAQ,KACtB,OAAQ,KAER,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,KAAM,SAAU,KAC1B,SAAU,KAAM,SAAU,KAC1B,SAAU,KAAM,SAAU,MAouBxBc,GAAiBd,GAhuBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAouBP,SAASe,GAAiBC,GACxB,MAAO,KAAOrE,GAAcqE,GAsB9B,SAASC,GAAW7sK,GAClB,OAAOioK,GAAazzH,KAAKx0C,GAsC3B,SAAS8sK,GAAWrqK,GAClB,IAAI7M,GAAS,EACTyX,EAASnS,MAAMuH,EAAIjN,MAKvB,OAHAiN,EAAI0D,SAAQ,SAAShR,EAAO4I,GAC1BsP,IAASzX,GAAS,CAACmI,EAAK5I,MAEnBkY,EAWT,SAAS0/J,GAAQppJ,EAAMmyG,GACrB,OAAO,SAAS3xG,GACd,OAAOR,EAAKmyG,EAAU3xG,KAa1B,SAAS6oJ,GAAe1vK,EAAOmnH,GAM7B,IALA,IAAI7uH,GAAS,EACT0F,EAASgC,EAAMhC,OACfivK,EAAW,EACXl9J,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACdT,IAAUsvH,GAAetvH,IAAUqsK,IACrClkK,EAAM1H,GAAS4rK,EACfn0J,EAAOk9J,KAAc30K,GAGzB,OAAOyX,EAUT,SAAS4/J,GAAW9rK,GAClB,IAAIvL,GAAS,EACTyX,EAASnS,MAAMiG,EAAI3L,MAKvB,OAHA2L,EAAIgF,SAAQ,SAAShR,GACnBkY,IAASzX,GAAST,KAEbkY,EAUT,SAAS6/J,GAAW/rK,GAClB,IAAIvL,GAAS,EACTyX,EAASnS,MAAMiG,EAAI3L,MAKvB,OAHA2L,EAAIgF,SAAQ,SAAShR,GACnBkY,IAASzX,GAAS,CAACT,EAAOA,MAErBkY,EAoDT,SAAS8/J,GAAWntK,GAClB,OAAO6sK,GAAW7sK,GAiDpB,SAAqBA,GACnB,IAAIqN,EAAS06J,GAAUtiB,UAAY,EACnC,KAAOsiB,GAAUvzH,KAAKx0C,MAClBqN,EAEJ,OAAOA,EArDH+/J,CAAYptK,GACZgrK,GAAUhrK,GAUhB,SAASqtK,GAAcrtK,GACrB,OAAO6sK,GAAW7sK,GAmDpB,SAAwBA,GACtB,OAAOA,EAAOgoC,MAAM+/H,KAAc,GAnD9BuF,CAAettK,GA7kBrB,SAAsBA,GACpB,OAAOA,EAAOw4C,MAAM,IA6kBhB+0H,CAAavtK,GAWnB,SAASgsK,GAAgBhsK,GAGvB,IAFA,IAAIpK,EAAQoK,EAAO1E,OAEZ1F,KAAWkvK,GAAatwH,KAAKx0C,EAAO+hJ,OAAOnsJ,MAClD,OAAOA,EAUT,IAAI43K,GAAmB5B,GA38BH,CAClB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,MA4gCX,IAs3eIp0J,GAt3egB,SAASi2J,EAAa9qK,GAIxC,IAAIzH,GAHJyH,EAAqB,MAAXA,EAAkBqO,GAAOwG,GAAE8+B,SAAStlC,GAAKnZ,SAAU8K,EAAS6U,GAAEk2J,KAAK18J,GAAMm3J,MAG/DjtK,MAChBssB,EAAO7kB,EAAQ6kB,KACfnmB,EAAQsB,EAAQtB,MAChBynK,GAAWnmK,EAAQmmK,SACnBtyK,GAAOmM,EAAQnM,KACfqB,GAAS8K,EAAQ9K,OACjB08C,GAAS5xC,EAAQ4xC,OACjBjsC,GAAS3F,EAAQ2F,OACjBxM,GAAY6G,EAAQ7G,UAGpB6xK,GAAazyK,EAAMtD,UACnBg2K,GAAY9E,GAASlxK,UACrBi2K,GAAch2K,GAAOD,UAGrBk2K,GAAanrK,EAAQ,sBAGrBorK,GAAeH,GAAUlzK,SAGzBM,GAAiB6yK,GAAY7yK,eAG7BgzK,GAAY,EAGZC,GAAc,WAChB,IAAIxoH,EAAM,SAAS+/F,KAAKsoB,IAAcA,GAAWvyK,MAAQuyK,GAAWvyK,KAAK2yK,UAAY,IACrF,OAAOzoH,EAAO,iBAAmBA,EAAO,GAFxB,GAUd0oH,GAAuBN,GAAYnzK,SAGnC0zK,GAAmBL,GAAatzK,KAAK5C,IAGrCw2K,GAAUr9J,GAAKwG,EAGf82J,GAAa/5H,GAAO,IACtBw5H,GAAatzK,KAAKO,IAAgBq3E,QAAQsyF,GAAc,QACvDtyF,QAAQ,yDAA0D,SAAW,KAI5Ek8F,GAAStF,GAAgBtmK,EAAQ4rK,OAASh5K,EAC1C4D,GAASwJ,EAAQxJ,OACjB81J,GAAatsJ,EAAQssJ,WACrBuf,GAAcD,GAASA,GAAOC,YAAcj5K,EAC5Ck5K,GAAe1B,GAAQl1K,GAAO2qB,eAAgB3qB,IAC9C62K,GAAe72K,GAAOC,OACtB8I,GAAuBitK,GAAYjtK,qBACnCiI,GAAS8kK,GAAW9kK,OACpB8lK,GAAmBx1K,GAASA,GAAOy1K,mBAAqBr5K,EACxDs5K,GAAc11K,GAASA,GAAOC,SAAW7D,EACzCu5K,GAAiB31K,GAASA,GAAO41K,YAAcx5K,EAE/C+L,GAAkB,WACpB,IACE,IAAIqiB,EAAOqrJ,GAAUn3K,GAAQ,kBAE7B,OADA8rB,EAAK,GAAI,GAAI,IACNA,EACP,MAAO9hB,KALW,GASlBotK,GAAkBtsK,EAAQq9H,eAAiBhvH,GAAKgvH,cAAgBr9H,EAAQq9H,aACxEkvC,GAAS1nJ,GAAQA,EAAK+xB,MAAQvoC,GAAKwW,KAAK+xB,KAAO/xB,EAAK+xB,IACpD41H,GAAgBxsK,EAAQ2vC,aAAethC,GAAKshC,YAAc3vC,EAAQ2vC,WAGlE88H,GAAa54K,GAAKqjB,KAClBw1J,GAAc74K,GAAKwjB,MACnBs1J,GAAmBz3K,GAAOkgB,sBAC1Bw3J,GAAiBhB,GAASA,GAAOiB,SAAWj6K,EAC5Ck6K,GAAiB9sK,EAAQk4F,SACzB60E,GAAa/B,GAAWzyJ,KACxBy0J,GAAa5C,GAAQl1K,GAAO0D,KAAM1D,IAClC+3K,GAAYp5K,GAAKC,IACjBo5K,GAAYr5K,GAAKE,IACjBo5K,GAAYtoJ,EAAK+xB,IACjBw2H,GAAiBptK,EAAQ0yC,SACzB26H,GAAex5K,GAAKy1E,OACpBgkG,GAAgBtC,GAAWpxK,QAG3B2zK,GAAWlB,GAAUrsK,EAAS,YAC9B0J,GAAM2iK,GAAUrsK,EAAS,OACzB+1C,GAAUs2H,GAAUrsK,EAAS,WAC7BrK,GAAM02K,GAAUrsK,EAAS,OACzBb,GAAUktK,GAAUrsK,EAAS,WAC7BwtK,GAAenB,GAAUn3K,GAAQ,UAGjCu4K,GAAUtuK,IAAW,IAAIA,GAGzBuuK,GAAY,GAGZC,GAAqBv1K,GAASm1K,IAC9BK,GAAgBx1K,GAASsR,IACzBmkK,GAAoBz1K,GAAS29C,IAC7B+3H,GAAgB11K,GAASzC,IACzBo4K,GAAoB31K,GAAS+G,IAG7B6uK,GAAcx3K,GAASA,GAAOvB,UAAYrC,EAC1Cq7K,GAAgBD,GAAcA,GAAYzxK,QAAU3J,EACpDs7K,GAAiBF,GAAcA,GAAYj2K,SAAWnF,EAyH1D,SAASu7K,GAAO37K,GACd,GAAI47K,GAAa57K,KAAWgG,GAAQhG,MAAYA,aAAiB67K,IAAc,CAC7E,GAAI77K,aAAiB87K,GACnB,OAAO97K,EAET,GAAI6F,GAAeP,KAAKtF,EAAO,eAC7B,OAAO+7K,GAAa/7K,GAGxB,OAAO,IAAI87K,GAAc97K,GAW3B,IAAIg8K,GAAc,WAChB,SAASvzK,KACT,OAAO,SAAS2uE,GACd,IAAK6kG,GAAS7kG,GACZ,MAAO,GAET,GAAImiG,GACF,OAAOA,GAAaniG,GAEtB3uE,EAAOhG,UAAY20E,EACnB,IAAIl/D,EAAS,IAAIzP,EAEjB,OADAA,EAAOhG,UAAYrC,EACZ8X,GAZO,GAqBlB,SAASgkK,MAWT,SAASJ,GAAc97K,EAAOm8K,GAC5B73K,KAAK83K,YAAcp8K,EACnBsE,KAAK+3K,YAAc,GACnB/3K,KAAKg4K,YAAcH,EACnB73K,KAAKi4K,UAAY,EACjBj4K,KAAKk4K,WAAap8K,EAgFpB,SAASy7K,GAAY77K,GACnBsE,KAAK83K,YAAcp8K,EACnBsE,KAAK+3K,YAAc,GACnB/3K,KAAKm4K,QAAU,EACfn4K,KAAKo4K,cAAe,EACpBp4K,KAAKq4K,cAAgB,GACrBr4K,KAAKs4K,cAAgB9P,EACrBxoK,KAAKu4K,UAAY,GAgHnB,SAASC,GAAK7uK,GACZ,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAiG7B,SAASw1K,GAAU9uK,GACjB,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KA8G7B,SAASy1K,GAAS/uK,GAChB,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAiG7B,SAAS01K,GAASxtK,GAChB,IAAIhP,GAAS,EACT0F,EAAmB,MAAVsJ,EAAiB,EAAIA,EAAOtJ,OAGzC,IADA7B,KAAK44K,SAAW,IAAIF,KACXv8K,EAAQ0F,GACf7B,KAAK2e,IAAIxT,EAAOhP,IA6CpB,SAAS0gB,GAAMlT,GACb,IAAIqxC,EAAOh7C,KAAK44K,SAAW,IAAIH,GAAU9uK,GACzC3J,KAAKjE,KAAOi/C,EAAKj/C,KAqGnB,SAAS88K,GAAcn9K,EAAOo9K,GAC5B,IAAIC,EAAQr3K,GAAQhG,GAChBs9K,GAASD,GAASE,GAAYv9K,GAC9Bw9K,GAAUH,IAAUC,GAASjD,GAASr6K,GACtCy9K,GAAUJ,IAAUC,IAAUE,GAAU5I,GAAa50K,GACrD09K,EAAcL,GAASC,GAASE,GAAUC,EAC1CvlK,EAASwlK,EAAc/G,GAAU32K,EAAMmG,OAAQgN,IAAU,GACzDhN,EAAS+R,EAAO/R,OAEpB,IAAK,IAAIyC,KAAO5I,GACTo9K,IAAav3K,GAAeP,KAAKtF,EAAO4I,IACvC80K,IAEQ,UAAP90K,GAEC40K,IAAkB,UAAP50K,GAA0B,UAAPA,IAE9B60K,IAAkB,UAAP70K,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD+0K,GAAQ/0K,EAAKzC,KAElB+R,EAAOxH,KAAK9H,GAGhB,OAAOsP,EAUT,SAAS0lK,GAAYz1K,GACnB,IAAIhC,EAASgC,EAAMhC,OACnB,OAAOA,EAASgC,EAAM01K,GAAW,EAAG13K,EAAS,IAAM/F,EAWrD,SAAS09K,GAAgB31K,EAAOuC,GAC9B,OAAOqzK,GAAYC,GAAU71K,GAAQ81K,GAAUvzK,EAAG,EAAGvC,EAAMhC,SAU7D,SAAS+3K,GAAa/1K,GACpB,OAAO41K,GAAYC,GAAU71K,IAY/B,SAASg2K,GAAiB11K,EAAQG,EAAK5I,IAChCA,IAAUI,IAAc0lC,GAAGr9B,EAAOG,GAAM5I,IACxCA,IAAUI,KAAewI,KAAOH,KACnC21K,GAAgB31K,EAAQG,EAAK5I,GAcjC,SAASq+K,GAAY51K,EAAQG,EAAK5I,GAChC,IAAIs+K,EAAW71K,EAAOG,GAChB/C,GAAeP,KAAKmD,EAAQG,IAAQk9B,GAAGw4I,EAAUt+K,KAClDA,IAAUI,GAAewI,KAAOH,IACnC21K,GAAgB31K,EAAQG,EAAK5I,GAYjC,SAASu+K,GAAap2K,EAAOS,GAE3B,IADA,IAAIzC,EAASgC,EAAMhC,OACZA,KACL,GAAI2/B,GAAG39B,EAAMhC,GAAQ,GAAIyC,GACvB,OAAOzC,EAGX,OAAQ,EAcV,SAASq4K,GAAez1K,EAAY+rK,EAAQC,EAAUx0F,GAIpD,OAHAk+F,GAAS11K,GAAY,SAAS/I,EAAO4I,EAAKG,GACxC+rK,EAAOv0F,EAAavgF,EAAO+0K,EAAS/0K,GAAQ+I,MAEvCw3E,EAYT,SAASm+F,GAAWj2K,EAAQ8oB,GAC1B,OAAO9oB,GAAUk2K,GAAWptJ,EAAQnrB,GAAKmrB,GAAS9oB,GAyBpD,SAAS21K,GAAgB31K,EAAQG,EAAK5I,GACzB,aAAP4I,GAAsBuD,GACxBA,GAAe1D,EAAQG,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAAS5I,EACT,UAAY,IAGdyI,EAAOG,GAAO5I,EAYlB,SAAS4+K,GAAOn2K,EAAQo2K,GAMtB,IALA,IAAIp+K,GAAS,EACT0F,EAAS04K,EAAM14K,OACf+R,EAASnS,EAAMI,GACf0iB,EAAiB,MAAVpgB,IAEFhI,EAAQ0F,GACf+R,EAAOzX,GAASooB,EAAOzoB,EAAYiI,GAAII,EAAQo2K,EAAMp+K,IAEvD,OAAOyX,EAYT,SAAS+lK,GAAUa,EAAQC,EAAOC,GAShC,OARIF,IAAWA,IACTE,IAAU5+K,IACZ0+K,EAASA,GAAUE,EAAQF,EAASE,GAElCD,IAAU3+K,IACZ0+K,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,EAmBT,SAASG,GAAUj/K,EAAOk/K,EAASC,EAAYv2K,EAAKH,EAAQgI,GAC1D,IAAIyH,EACAknK,EArkFc,EAqkFLF,EACTG,EArkFc,EAqkFLH,EACTI,EArkFiB,EAqkFRJ,EAKb,GAHIC,IACFjnK,EAASzP,EAAS02K,EAAWn/K,EAAO4I,EAAKH,EAAQgI,GAAS0uK,EAAWn/K,IAEnEkY,IAAW9X,EACb,OAAO8X,EAET,IAAK+jK,GAASj8K,GACZ,OAAOA,EAET,IAAIq9K,EAAQr3K,GAAQhG,GACpB,GAAIq9K,GAEF,GADAnlK,EA68GJ,SAAwB/P,GACtB,IAAIhC,EAASgC,EAAMhC,OACf+R,EAAS,IAAI/P,EAAMvF,YAAYuD,GAG/BA,GAA6B,iBAAZgC,EAAM,IAAkBtC,GAAeP,KAAK6C,EAAO,WACtE+P,EAAOzX,MAAQ0H,EAAM1H,MACrByX,EAAO6wG,MAAQ5gH,EAAM4gH,OAEvB,OAAO7wG,EAt9GIqnK,CAAev/K,IACnBo/K,EACH,OAAOpB,GAAUh+K,EAAOkY,OAErB,CACL,IAAIsnK,EAAMC,GAAOz/K,GACb0/K,EAASF,GAAOnS,GAAWmS,GAAOlS,EAEtC,GAAI+M,GAASr6K,GACX,OAAO2/K,GAAY3/K,EAAOo/K,GAE5B,GAAII,GAAO/R,GAAa+R,GAAOxS,GAAY0S,IAAWj3K,GAEpD,GADAyP,EAAUmnK,GAAUK,EAAU,GAAKE,GAAgB5/K,IAC9Co/K,EACH,OAAOC,EA+nEf,SAAuB9tJ,EAAQ9oB,GAC7B,OAAOk2K,GAAWptJ,EAAQsuJ,GAAatuJ,GAAS9oB,GA/nEtCq3K,CAAc9/K,EAnH1B,SAAsByI,EAAQ8oB,GAC5B,OAAO9oB,GAAUk2K,GAAWptJ,EAAQwuJ,GAAOxuJ,GAAS9oB,GAkHrBu3K,CAAa9nK,EAAQlY,IAknEtD,SAAqBuxB,EAAQ9oB,GAC3B,OAAOk2K,GAAWptJ,EAAQ0uJ,GAAW1uJ,GAAS9oB,GAlnEpCy3K,CAAYlgL,EAAO0+K,GAAWxmK,EAAQlY,QAEvC,CACL,IAAKmzK,GAAcqM,GACjB,OAAO/2K,EAASzI,EAAQ,GAE1BkY,EA49GN,SAAwBzP,EAAQ+2K,EAAKJ,GACnC,IAAIe,EAAO13K,EAAO7F,YAClB,OAAQ48K,GACN,KAAKxR,EACH,OAAOoS,GAAiB33K,GAE1B,KAAKykK,EACL,KAAKC,EACH,OAAO,IAAIgT,GAAM13K,GAEnB,KAAKwlK,EACH,OA5nDN,SAAuBoS,EAAUjB,GAC/B,IAAI5nB,EAAS4nB,EAASgB,GAAiBC,EAAS7oB,QAAU6oB,EAAS7oB,OACnE,OAAO,IAAI6oB,EAASz9K,YAAY40J,EAAQ6oB,EAAS9gB,WAAY8gB,EAAS7V,YA0nD3D8V,CAAc73K,EAAQ22K,GAE/B,KAAKlR,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,KAAKC,EAAiB,KAAKC,EAAW,KAAKC,EACxD,OAAO6R,GAAgB93K,EAAQ22K,GAEjC,KAAK7R,EAUL,KAAKK,EACH,OAAO,IAAIuS,EARb,KAAK3S,EACL,KAAKK,EACH,OAAO,IAAIsS,EAAK13K,GAElB,KAAKklK,EACH,OA/nDN,SAAqB/d,GACnB,IAAI13I,EAAS,IAAI03I,EAAOhtJ,YAAYgtJ,EAAOr+H,OAAQ4+I,GAAQ9f,KAAKT,IAEhE,OADA13I,EAAOo4I,UAAYV,EAAOU,UACnBp4I,EA4nDIsoK,CAAY/3K,GAKrB,KAAKqlK,EACH,OAxnDe2S,EAwnDIh4K,EAvnDhBgzK,GAAgB/4K,GAAO+4K,GAAcn2K,KAAKm7K,IAAW,GAD9D,IAAqBA,EAp4DNC,CAAe1gL,EAAOw/K,EAAKJ,IAIxC3uK,IAAUA,EAAQ,IAAI0Q,IACtB,IAAIw/J,EAAUlwK,EAAMpI,IAAIrI,GACxB,GAAI2gL,EACF,OAAOA,EAETlwK,EAAMzE,IAAIhM,EAAOkY,GAEb4J,GAAM9hB,GACRA,EAAMgR,SAAQ,SAAS4vK,GACrB1oK,EAAO+K,IAAIg8J,GAAU2B,EAAU1B,EAASC,EAAYyB,EAAU5gL,EAAOyQ,OAE9DrH,GAAMpJ,IACfA,EAAMgR,SAAQ,SAAS4vK,EAAUh4K,GAC/BsP,EAAOlM,IAAIpD,EAAKq2K,GAAU2B,EAAU1B,EAASC,EAAYv2K,EAAK5I,EAAOyQ,OAIzE,IAII+9B,EAAQ6uI,EAAQj9K,GAJLk/K,EACVD,EAASwB,GAAeC,GACxBzB,EAASU,GAAS35K,IAEkBpG,GASzC,OARAg1K,GAAUxmI,GAASxuC,GAAO,SAAS4gL,EAAUh4K,GACvC4lC,IAEFoyI,EAAW5gL,EADX4I,EAAMg4K,IAIRvC,GAAYnmK,EAAQtP,EAAKq2K,GAAU2B,EAAU1B,EAASC,EAAYv2K,EAAK5I,EAAOyQ,OAEzEyH,EAyBT,SAAS6oK,GAAet4K,EAAQ8oB,EAAQid,GACtC,IAAIroC,EAASqoC,EAAMroC,OACnB,GAAc,MAAVsC,EACF,OAAQtC,EAGV,IADAsC,EAAS/F,GAAO+F,GACTtC,KAAU,CACf,IAAIyC,EAAM4lC,EAAMroC,GACZuI,EAAY6iB,EAAO3oB,GACnB5I,EAAQyI,EAAOG,GAEnB,GAAK5I,IAAUI,KAAewI,KAAOH,KAAaiG,EAAU1O,GAC1D,OAAO,EAGX,OAAO,EAaT,SAASghL,GAAUxyJ,EAAMsjI,EAAMxiI,GAC7B,GAAmB,mBAARd,EACT,MAAM,IAAI7nB,GAAUwlK,GAEtB,OAAOhvH,IAAW,WAAa3uB,EAAKjiB,MAAMnM,EAAWkvB,KAAUwiI,GAcjE,SAASmvB,GAAe94K,EAAOsH,EAAQslK,EAAUlkK,GAC/C,IAAIpQ,GAAS,EACToN,EAAWwnK,GACX6L,GAAW,EACX/6K,EAASgC,EAAMhC,OACf+R,EAAS,GACTipK,EAAe1xK,EAAOtJ,OAE1B,IAAKA,EACH,OAAO+R,EAEL68J,IACFtlK,EAAS+lK,GAAS/lK,EAAQqnK,GAAU/B,KAElClkK,GACFhD,EAAW0nK,GACX2L,GAAW,GAEJzxK,EAAOtJ,QAtvFG,MAuvFjB0H,EAAWmpK,GACXkK,GAAW,EACXzxK,EAAS,IAAIwtK,GAASxtK,IAExB2xK,EACA,OAAS3gL,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACd4gL,EAAuB,MAAZtM,EAAmB/0K,EAAQ+0K,EAAS/0K,GAGnD,GADAA,EAAS6Q,GAAwB,IAAV7Q,EAAeA,EAAQ,EAC1CkhL,GAAYG,IAAaA,EAAU,CAErC,IADA,IAAIC,EAAcH,EACXG,KACL,GAAI7xK,EAAO6xK,KAAiBD,EAC1B,SAASD,EAGblpK,EAAOxH,KAAK1Q,QAEJ6N,EAAS4B,EAAQ4xK,EAAUxwK,IACnCqH,EAAOxH,KAAK1Q,GAGhB,OAAOkY,EAjkCTyjK,GAAO4F,iBAAmB,CAQxB,OAAUrS,EAQV,SAAYC,GAQZ,YAAeC,GAQf,SAAY,GAQZ,QAAW,CAQT,EAAKuM,KAKTA,GAAOl5K,UAAYy5K,GAAWz5K,UAC9Bk5K,GAAOl5K,UAAUG,YAAc+4K,GAE/BG,GAAcr5K,UAAYu5K,GAAWE,GAAWz5K,WAChDq5K,GAAcr5K,UAAUG,YAAck5K,GAsHtCD,GAAYp5K,UAAYu5K,GAAWE,GAAWz5K,WAC9Co5K,GAAYp5K,UAAUG,YAAci5K,GAoGpCiB,GAAKr6K,UAAU+U,MAvEf,WACElT,KAAK44K,SAAWlC,GAAeA,GAAa,MAAQ,GACpD12K,KAAKjE,KAAO,GAsEdy8K,GAAKr6K,UAAL,OAzDA,SAAoBmG,GAClB,IAAIsP,EAAS5T,KAAKiE,IAAIK,WAAetE,KAAK44K,SAASt0K,GAEnD,OADAtE,KAAKjE,MAAQ6X,EAAS,EAAI,EACnBA,GAuDT4kK,GAAKr6K,UAAU4F,IA3Cf,SAAiBO,GACf,IAAI02C,EAAOh7C,KAAK44K,SAChB,GAAIlC,GAAc,CAChB,IAAI9iK,EAASonC,EAAK12C,GAClB,OAAOsP,IAAWk0J,EAAiBhsK,EAAY8X,EAEjD,OAAOrS,GAAeP,KAAKg6C,EAAM12C,GAAO02C,EAAK12C,GAAOxI,GAsCtD08K,GAAKr6K,UAAU8F,IA1Bf,SAAiBK,GACf,IAAI02C,EAAOh7C,KAAK44K,SAChB,OAAOlC,GAAgB17H,EAAK12C,KAASxI,EAAayF,GAAeP,KAAKg6C,EAAM12C,IAyB9Ek0K,GAAKr6K,UAAUuJ,IAZf,SAAiBpD,EAAK5I,GACpB,IAAIs/C,EAAOh7C,KAAK44K,SAGhB,OAFA54K,KAAKjE,MAAQiE,KAAKiE,IAAIK,GAAO,EAAI,EACjC02C,EAAK12C,GAAQoyK,IAAgBh7K,IAAUI,EAAagsK,EAAiBpsK,EAC9DsE,MAyHTy4K,GAAUt6K,UAAU+U,MApFpB,WACElT,KAAK44K,SAAW,GAChB54K,KAAKjE,KAAO,GAmFd08K,GAAUt6K,UAAV,OAvEA,SAAyBmG,GACvB,IAAI02C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,GAAaj/H,EAAM12C,GAE/B,QAAInI,EAAQ,KAIRA,GADY6+C,EAAKn5C,OAAS,EAE5Bm5C,EAAK3uC,MAEL+C,GAAOpO,KAAKg6C,EAAM7+C,EAAO,KAEzB6D,KAAKjE,MACA,IA0DT08K,GAAUt6K,UAAU4F,IA9CpB,SAAsBO,GACpB,IAAI02C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,GAAaj/H,EAAM12C,GAE/B,OAAOnI,EAAQ,EAAIL,EAAYk/C,EAAK7+C,GAAO,IA2C7Cs8K,GAAUt6K,UAAU8F,IA/BpB,SAAsBK,GACpB,OAAO21K,GAAaj6K,KAAK44K,SAAUt0K,IAAQ,GA+B7Cm0K,GAAUt6K,UAAUuJ,IAlBpB,SAAsBpD,EAAK5I,GACzB,IAAIs/C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,GAAaj/H,EAAM12C,GAQ/B,OANInI,EAAQ,KACR6D,KAAKjE,KACPi/C,EAAK5uC,KAAK,CAAC9H,EAAK5I,KAEhBs/C,EAAK7+C,GAAO,GAAKT,EAEZsE,MA2GT04K,GAASv6K,UAAU+U,MAtEnB,WACElT,KAAKjE,KAAO,EACZiE,KAAK44K,SAAW,CACd,KAAQ,IAAIJ,GACZ,IAAO,IAAK5lK,IAAO6lK,IACnB,OAAU,IAAID,KAkElBE,GAASv6K,UAAT,OArDA,SAAwBmG,GACtB,IAAIsP,EAASspK,GAAWl9K,KAAMsE,GAAjB,OAAgCA,GAE7C,OADAtE,KAAKjE,MAAQ6X,EAAS,EAAI,EACnBA,GAmDT8kK,GAASv6K,UAAU4F,IAvCnB,SAAqBO,GACnB,OAAO44K,GAAWl9K,KAAMsE,GAAKP,IAAIO,IAuCnCo0K,GAASv6K,UAAU8F,IA3BnB,SAAqBK,GACnB,OAAO44K,GAAWl9K,KAAMsE,GAAKL,IAAIK,IA2BnCo0K,GAASv6K,UAAUuJ,IAdnB,SAAqBpD,EAAK5I,GACxB,IAAIs/C,EAAOkiI,GAAWl9K,KAAMsE,GACxBvI,EAAOi/C,EAAKj/C,KAIhB,OAFAi/C,EAAKtzC,IAAIpD,EAAK5I,GACdsE,KAAKjE,MAAQi/C,EAAKj/C,MAAQA,EAAO,EAAI,EAC9BiE,MA2DT24K,GAASx6K,UAAUwgB,IAAMg6J,GAASx6K,UAAUiO,KAnB5C,SAAqB1Q,GAEnB,OADAsE,KAAK44K,SAASlxK,IAAIhM,EAAOosK,GAClB9nK,MAkBT24K,GAASx6K,UAAU8F,IANnB,SAAqBvI,GACnB,OAAOsE,KAAK44K,SAAS30K,IAAIvI,IAuG3BmhB,GAAM1e,UAAU+U,MA3EhB,WACElT,KAAK44K,SAAW,IAAIH,GACpBz4K,KAAKjE,KAAO,GA0Ed8gB,GAAM1e,UAAN,OA9DA,SAAqBmG,GACnB,IAAI02C,EAAOh7C,KAAK44K,SACZhlK,EAASonC,EAAI,OAAW12C,GAG5B,OADAtE,KAAKjE,KAAOi/C,EAAKj/C,KACV6X,GA0DTiJ,GAAM1e,UAAU4F,IA9ChB,SAAkBO,GAChB,OAAOtE,KAAK44K,SAAS70K,IAAIO,IA8C3BuY,GAAM1e,UAAU8F,IAlChB,SAAkBK,GAChB,OAAOtE,KAAK44K,SAAS30K,IAAIK,IAkC3BuY,GAAM1e,UAAUuJ,IArBhB,SAAkBpD,EAAK5I,GACrB,IAAIs/C,EAAOh7C,KAAK44K,SAChB,GAAI59H,aAAgBy9H,GAAW,CAC7B,IAAI0E,EAAQniI,EAAK49H,SACjB,IAAKhmK,IAAQuqK,EAAMt7K,OAASu7K,IAG1B,OAFAD,EAAM/wK,KAAK,CAAC9H,EAAK5I,IACjBsE,KAAKjE,OAASi/C,EAAKj/C,KACZiE,KAETg7C,EAAOh7C,KAAK44K,SAAW,IAAIF,GAASyE,GAItC,OAFAniI,EAAKtzC,IAAIpD,EAAK5I,GACdsE,KAAKjE,KAAOi/C,EAAKj/C,KACViE,MAscT,IAAIm6K,GAAWkD,GAAeC,IAU1BC,GAAgBF,GAAeG,IAAiB,GAWpD,SAASC,GAAUh5K,EAAY2F,GAC7B,IAAIwJ,GAAS,EAKb,OAJAumK,GAAS11K,GAAY,SAAS/I,EAAOS,EAAOsI,GAE1C,OADAmP,IAAWxJ,EAAU1O,EAAOS,EAAOsI,MAG9BmP,EAaT,SAAS8pK,GAAa75K,EAAO4sK,EAAUlkK,GAIrC,IAHA,IAAIpQ,GAAS,EACT0F,EAASgC,EAAMhC,SAEV1F,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACd2rC,EAAU2oI,EAAS/0K,GAEvB,GAAe,MAAXosC,IAAoBi1I,IAAajhL,EAC5BgsC,IAAYA,IAAY61I,GAAS71I,GAClCv7B,EAAWu7B,EAASi1I,IAE1B,IAAIA,EAAWj1I,EACXl0B,EAASlY,EAGjB,OAAOkY,EAuCT,SAASgqK,GAAWn5K,EAAY2F,GAC9B,IAAIwJ,EAAS,GAMb,OALAumK,GAAS11K,GAAY,SAAS/I,EAAOS,EAAOsI,GACtC2F,EAAU1O,EAAOS,EAAOsI,IAC1BmP,EAAOxH,KAAK1Q,MAGTkY,EAcT,SAASiqK,GAAYh6K,EAAOiI,EAAO1B,EAAW0zK,EAAUlqK,GACtD,IAAIzX,GAAS,EACT0F,EAASgC,EAAMhC,OAKnB,IAHAuI,IAAcA,EAAY2zK,IAC1BnqK,IAAWA,EAAS,MAEXzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACd2P,EAAQ,GAAK1B,EAAU1O,GACrBoQ,EAAQ,EAEV+xK,GAAYniL,EAAOoQ,EAAQ,EAAG1B,EAAW0zK,EAAUlqK,GAEnD61D,GAAU71D,EAAQlY,GAEVoiL,IACVlqK,EAAOA,EAAO/R,QAAUnG,GAG5B,OAAOkY,EAcT,IAAIoqK,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASX,GAAWn5K,EAAQssK,GAC1B,OAAOtsK,GAAU65K,GAAQ75K,EAAQssK,EAAU3uK,IAW7C,SAAS07K,GAAgBr5K,EAAQssK,GAC/B,OAAOtsK,GAAU+5K,GAAa/5K,EAAQssK,EAAU3uK,IAYlD,SAASq8K,GAAch6K,EAAQ+lC,GAC7B,OAAO2mI,GAAY3mI,GAAO,SAAS5lC,GACjC,OAAO85K,GAAWj6K,EAAOG,OAY7B,SAAS+5K,GAAQl6K,EAAQ4lH,GAMvB,IAHA,IAAI5tH,EAAQ,EACR0F,GAHJkoH,EAAOu0D,GAASv0D,EAAM5lH,IAGJtC,OAED,MAAVsC,GAAkBhI,EAAQ0F,GAC/BsC,EAASA,EAAOo6K,GAAMx0D,EAAK5tH,OAE7B,OAAQA,GAASA,GAAS0F,EAAUsC,EAASrI,EAc/C,SAAS0iL,GAAer6K,EAAQs6K,EAAUC,GACxC,IAAI9qK,EAAS6qK,EAASt6K,GACtB,OAAOzC,GAAQyC,GAAUyP,EAAS61D,GAAU71D,EAAQ8qK,EAAYv6K,IAUlE,SAASw6K,GAAWjjL,GAClB,OAAa,MAATA,EACKA,IAAUI,EAn7FJ,qBARL,gBA67FFu5K,IAAkBA,MAAkBj3K,GAAO1C,GA23FrD,SAAmBA,GACjB,IAAIkjL,EAAQr9K,GAAeP,KAAKtF,EAAO25K,IACnC6F,EAAMx/K,EAAM25K,IAEhB,IACE35K,EAAM25K,IAAkBv5K,EACxB,IAAI+iL,GAAW,EACf,MAAOz2K,IAET,IAAIwL,EAAS8gK,GAAqB1zK,KAAKtF,GACnCmjL,IACED,EACFljL,EAAM25K,IAAkB6F,SAEjBx/K,EAAM25K,KAGjB,OAAOzhK,EA34FHkrK,CAAUpjL,GA+5GhB,SAAwBA,GACtB,OAAOg5K,GAAqB1zK,KAAKtF,GA/5G7BqjL,CAAerjL,GAYrB,SAASsjL,GAAOtjL,EAAOilB,GACrB,OAAOjlB,EAAQilB,EAWjB,SAASs+J,GAAQ96K,EAAQG,GACvB,OAAiB,MAAVH,GAAkB5C,GAAeP,KAAKmD,EAAQG,GAWvD,SAAS46K,GAAU/6K,EAAQG,GACzB,OAAiB,MAAVH,GAAkBG,KAAOlG,GAAO+F,GA0BzC,SAASg7K,GAAiBC,EAAQ3O,EAAUlkK,GAS1C,IARA,IAAIhD,EAAWgD,EAAa0kK,GAAoBF,GAC5ClvK,EAASu9K,EAAO,GAAGv9K,OACnBw9K,EAAYD,EAAOv9K,OACnBy9K,EAAWD,EACXE,EAAS99K,EAAM49K,GACfG,EAAY1iL,IACZ8W,EAAS,GAEN0rK,KAAY,CACjB,IAAIz7K,EAAQu7K,EAAOE,GACfA,GAAY7O,IACd5sK,EAAQqtK,GAASrtK,EAAO2uK,GAAU/B,KAEpC+O,EAAYpJ,GAAUvyK,EAAMhC,OAAQ29K,GACpCD,EAAOD,IAAa/yK,IAAekkK,GAAa5uK,GAAU,KAAOgC,EAAMhC,QAAU,KAC7E,IAAI82K,GAAS2G,GAAYz7K,GACzB/H,EAEN+H,EAAQu7K,EAAO,GAEf,IAAIjjL,GAAS,EACTsjL,EAAOF,EAAO,GAElBzC,EACA,OAAS3gL,EAAQ0F,GAAU+R,EAAO/R,OAAS29K,GAAW,CACpD,IAAI9jL,EAAQmI,EAAM1H,GACd4gL,EAAWtM,EAAWA,EAAS/0K,GAASA,EAG5C,GADAA,EAAS6Q,GAAwB,IAAV7Q,EAAeA,EAAQ,IACxC+jL,EACE/M,GAAS+M,EAAM1C,GACfxzK,EAASqK,EAAQmpK,EAAUxwK,IAC5B,CAEL,IADA+yK,EAAWD,IACFC,GAAU,CACjB,IAAIv8K,EAAQw8K,EAAOD,GACnB,KAAMv8K,EACE2vK,GAAS3vK,EAAOg6K,GAChBxzK,EAAS61K,EAAOE,GAAWvC,EAAUxwK,IAE3C,SAASuwK,EAGT2C,GACFA,EAAKrzK,KAAK2wK,GAEZnpK,EAAOxH,KAAK1Q,IAGhB,OAAOkY,EA+BT,SAAS8rK,GAAWv7K,EAAQ4lH,EAAM/+F,GAGhC,IAAId,EAAiB,OADrB/lB,EAASu4C,GAAOv4C,EADhB4lH,EAAOu0D,GAASv0D,EAAM5lH,KAEMA,EAASA,EAAOo6K,GAAMv6J,GAAK+lG,KACvD,OAAe,MAAR7/F,EAAepuB,EAAYmM,GAAMiiB,EAAM/lB,EAAQ6mB,GAUxD,SAAS20J,GAAgBjkL,GACvB,OAAO47K,GAAa57K,IAAUijL,GAAWjjL,IAAUgtK,EAuCrD,SAASkX,GAAYlkL,EAAOilB,EAAOi6J,EAASC,EAAY1uK,GACtD,OAAIzQ,IAAUilB,IAGD,MAATjlB,GAA0B,MAATilB,IAAmB22J,GAAa57K,KAAW47K,GAAa32J,GACpEjlB,IAAUA,GAASilB,IAAUA,EAmBxC,SAAyBxc,EAAQwc,EAAOi6J,EAASC,EAAYgF,EAAW1zK,GACtE,IAAI2zK,EAAWp+K,GAAQyC,GACnB47K,EAAWr+K,GAAQif,GACnBq/J,EAASF,EAAWnX,EAAWwS,GAAOh3K,GACtC87K,EAASF,EAAWpX,EAAWwS,GAAOx6J,GAKtCu/J,GAHJF,EAASA,GAAUtX,EAAUS,EAAY6W,IAGhB7W,EACrBgX,GAHJF,EAASA,GAAUvX,EAAUS,EAAY8W,IAGhB9W,EACrBiX,EAAYJ,GAAUC,EAE1B,GAAIG,GAAarK,GAAS5xK,GAAS,CACjC,IAAK4xK,GAASp1J,GACZ,OAAO,EAETm/J,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADA/zK,IAAUA,EAAQ,IAAI0Q,IACdijK,GAAYxP,GAAansK,GAC7Bk8K,GAAYl8K,EAAQwc,EAAOi6J,EAASC,EAAYgF,EAAW1zK,GA81EnE,SAAoBhI,EAAQwc,EAAOu6J,EAAKN,EAASC,EAAYgF,EAAW1zK,GACtE,OAAQ+uK,GACN,KAAKvR,EACH,GAAKxlK,EAAO+hK,YAAcvlJ,EAAMulJ,YAC3B/hK,EAAO82J,YAAct6I,EAAMs6I,WAC9B,OAAO,EAET92J,EAASA,EAAO+uJ,OAChBvyI,EAAQA,EAAMuyI,OAEhB,KAAKwW,EACH,QAAKvlK,EAAO+hK,YAAcvlJ,EAAMulJ,aAC3B2Z,EAAU,IAAIrqB,GAAWrxJ,GAAS,IAAIqxJ,GAAW70I,KAKxD,KAAKioJ,EACL,KAAKC,EACL,KAAKK,EAGH,OAAO1nI,IAAIr9B,GAASwc,GAEtB,KAAKmoJ,EACH,OAAO3kK,EAAOqK,MAAQmS,EAAMnS,MAAQrK,EAAOktC,SAAW1wB,EAAM0wB,QAE9D,KAAKg4H,EACL,KAAKE,EAIH,OAAOplK,GAAWwc,EAAQ,GAE5B,KAAKsoJ,EACH,IAAIqX,EAAUjN,GAEhB,KAAK/J,EACH,IAAIiX,EAxnLe,EAwnLH3F,EAGhB,GAFA0F,IAAYA,EAAU9M,IAElBrvK,EAAOpI,MAAQ4kB,EAAM5kB,OAASwkL,EAChC,OAAO,EAGT,IAAIlE,EAAUlwK,EAAMpI,IAAII,GACxB,GAAIk4K,EACF,OAAOA,GAAW17J,EAEpBi6J,GAloLqB,EAqoLrBzuK,EAAMzE,IAAIvD,EAAQwc,GAClB,IAAI/M,EAASysK,GAAYC,EAAQn8K,GAASm8K,EAAQ3/J,GAAQi6J,EAASC,EAAYgF,EAAW1zK,GAE1F,OADAA,EAAK,OAAWhI,GACTyP,EAET,KAAK41J,EACH,GAAI2N,GACF,OAAOA,GAAcn2K,KAAKmD,IAAWgzK,GAAcn2K,KAAK2f,GAG9D,OAAO,EA35ED6/J,CAAWr8K,EAAQwc,EAAOq/J,EAAQpF,EAASC,EAAYgF,EAAW1zK,GAExE,KAvvGuB,EAuvGjByuK,GAAiC,CACrC,IAAI6F,EAAeP,GAAY3+K,GAAeP,KAAKmD,EAAQ,eACvDu8K,EAAeP,GAAY5+K,GAAeP,KAAK2f,EAAO,eAE1D,GAAI8/J,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAet8K,EAAOzI,QAAUyI,EAC/Cy8K,EAAeF,EAAe//J,EAAMjlB,QAAUilB,EAGlD,OADAxU,IAAUA,EAAQ,IAAI0Q,IACfgjK,EAAUc,EAAcC,EAAchG,EAASC,EAAY1uK,IAGtE,IAAKi0K,EACH,OAAO,EAGT,OADAj0K,IAAUA,EAAQ,IAAI0Q,IA05ExB,SAAsB1Y,EAAQwc,EAAOi6J,EAASC,EAAYgF,EAAW1zK,GACnE,IAAIo0K,EAjqLmB,EAiqLP3F,EACZiG,EAAWrE,GAAWr4K,GACtB28K,EAAYD,EAASh/K,OAErBw9K,EADW7C,GAAW77J,GACD9e,OAEzB,GAAIi/K,GAAazB,IAAckB,EAC7B,OAAO,EAET,IAAIpkL,EAAQ2kL,EACZ,KAAO3kL,KAAS,CACd,IAAImI,EAAMu8K,EAAS1kL,GACnB,KAAMokL,EAAYj8K,KAAOqc,EAAQpf,GAAeP,KAAK2f,EAAOrc,IAC1D,OAAO,EAIX,IAAIy8K,EAAa50K,EAAMpI,IAAII,GACvB68K,EAAa70K,EAAMpI,IAAI4c,GAC3B,GAAIogK,GAAcC,EAChB,OAAOD,GAAcpgK,GAASqgK,GAAc78K,EAE9C,IAAIyP,GAAS,EACbzH,EAAMzE,IAAIvD,EAAQwc,GAClBxU,EAAMzE,IAAIiZ,EAAOxc,GAEjB,IAAI88K,EAAWV,EACf,OAASpkL,EAAQ2kL,GAAW,CAE1B,IAAI9G,EAAW71K,EADfG,EAAMu8K,EAAS1kL,IAEX+kL,EAAWvgK,EAAMrc,GAErB,GAAIu2K,EACF,IAAIsG,EAAWZ,EACX1F,EAAWqG,EAAUlH,EAAU11K,EAAKqc,EAAOxc,EAAQgI,GACnD0uK,EAAWb,EAAUkH,EAAU58K,EAAKH,EAAQwc,EAAOxU,GAGzD,KAAMg1K,IAAarlL,EACVk+K,IAAakH,GAAYrB,EAAU7F,EAAUkH,EAAUtG,EAASC,EAAY1uK,GAC7Eg1K,GACD,CACLvtK,GAAS,EACT,MAEFqtK,IAAaA,EAAkB,eAAP38K,GAE1B,GAAIsP,IAAWqtK,EAAU,CACvB,IAAIG,EAAUj9K,EAAO7F,YACjB+iL,EAAU1gK,EAAMriB,YAGhB8iL,GAAWC,KACV,gBAAiBl9K,MAAU,gBAAiBwc,IACzB,mBAAXygK,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvDztK,GAAS,GAKb,OAFAzH,EAAK,OAAWhI,GAChBgI,EAAK,OAAWwU,GACT/M,EAv9EA0tK,CAAan9K,EAAQwc,EAAOi6J,EAASC,EAAYgF,EAAW1zK,GA3D5Do1K,CAAgB7lL,EAAOilB,EAAOi6J,EAASC,EAAY+E,GAAazzK,IAmFzE,SAASq1K,GAAYr9K,EAAQ8oB,EAAQw0J,EAAW5G,GAC9C,IAAI1+K,EAAQslL,EAAU5/K,OAClBA,EAAS1F,EACTulL,GAAgB7G,EAEpB,GAAc,MAAV12K,EACF,OAAQtC,EAGV,IADAsC,EAAS/F,GAAO+F,GACThI,KAAS,CACd,IAAI6+C,EAAOymI,EAAUtlL,GACrB,GAAKulL,GAAgB1mI,EAAK,GAClBA,EAAK,KAAO72C,EAAO62C,EAAK,MACtBA,EAAK,KAAM72C,GAEnB,OAAO,EAGX,OAAShI,EAAQ0F,GAAQ,CAEvB,IAAIyC,GADJ02C,EAAOymI,EAAUtlL,IACF,GACX69K,EAAW71K,EAAOG,GAClBq9K,EAAW3mI,EAAK,GAEpB,GAAI0mI,GAAgB1mI,EAAK,IACvB,GAAIg/H,IAAal+K,KAAewI,KAAOH,GACrC,OAAO,MAEJ,CACL,IAAIgI,EAAQ,IAAI0Q,GAChB,GAAIg+J,EACF,IAAIjnK,EAASinK,EAAWb,EAAU2H,EAAUr9K,EAAKH,EAAQ8oB,EAAQ9gB,GAEnE,KAAMyH,IAAW9X,EACT8jL,GAAY+B,EAAU3H,EAAU4H,EAA+C/G,EAAY1uK,GAC3FyH,GAEN,OAAO,GAIb,OAAO,EAWT,SAASiuK,GAAanmL,GACpB,SAAKi8K,GAASj8K,KA05FEwuB,EA15FiBxuB,EA25FxB84K,IAAeA,MAActqJ,MAx5FxBk0J,GAAW1iL,GAASm5K,GAAa7I,IAChCjxH,KAAKz5C,GAAS5F,IAs5F/B,IAAkBwuB,EA12FlB,SAAS43J,GAAapmL,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACKmlD,GAEW,iBAATnlD,EACFgG,GAAQhG,GACXqmL,GAAoBrmL,EAAM,GAAIA,EAAM,IACpCsmL,GAAYtmL,GAEXumL,GAASvmL,GAUlB,SAASwmL,GAAS/9K,GAChB,IAAKg+K,GAAYh+K,GACf,OAAO+xK,GAAW/xK,GAEpB,IAAIyP,EAAS,GACb,IAAK,IAAItP,KAAOlG,GAAO+F,GACjB5C,GAAeP,KAAKmD,EAAQG,IAAe,eAAPA,GACtCsP,EAAOxH,KAAK9H,GAGhB,OAAOsP,EAUT,SAASwuK,GAAWj+K,GAClB,IAAKwzK,GAASxzK,GACZ,OA09FJ,SAAsBA,GACpB,IAAIyP,EAAS,GACb,GAAc,MAAVzP,EACF,IAAK,IAAIG,KAAOlG,GAAO+F,GACrByP,EAAOxH,KAAK9H,GAGhB,OAAOsP,EAj+FEyuK,CAAal+K,GAEtB,IAAIm+K,EAAUH,GAAYh+K,GACtByP,EAAS,GAEb,IAAK,IAAItP,KAAOH,GACD,eAAPG,IAAyBg+K,GAAY/gL,GAAeP,KAAKmD,EAAQG,KACrEsP,EAAOxH,KAAK9H,GAGhB,OAAOsP,EAYT,SAAS2uK,GAAO7mL,EAAOilB,GACrB,OAAOjlB,EAAQilB,EAWjB,SAAS6hK,GAAQ/9K,EAAYgsK,GAC3B,IAAIt0K,GAAS,EACTyX,EAASpS,GAAYiD,GAAchD,EAAMgD,EAAW5C,QAAU,GAKlE,OAHAs4K,GAAS11K,GAAY,SAAS/I,EAAO4I,EAAKG,GACxCmP,IAASzX,GAASs0K,EAAS/0K,EAAO4I,EAAKG,MAElCmP,EAUT,SAASouK,GAAY/0J,GACnB,IAAIw0J,EAAYgB,GAAax1J,GAC7B,OAAwB,GAApBw0J,EAAU5/K,QAAe4/K,EAAU,GAAG,GACjCiB,GAAwBjB,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAASt9K,GACd,OAAOA,IAAW8oB,GAAUu0J,GAAYr9K,EAAQ8oB,EAAQw0J,IAY5D,SAASM,GAAoBh4D,EAAM43D,GACjC,OAAIgB,GAAM54D,IAAS64D,GAAmBjB,GAC7Be,GAAwBnE,GAAMx0D,GAAO43D,GAEvC,SAASx9K,GACd,IAAI61K,EAAWj2K,GAAII,EAAQ4lH,GAC3B,OAAQiwD,IAAal+K,GAAak+K,IAAa2H,EAC3C5gK,GAAM5c,EAAQ4lH,GACd61D,GAAY+B,EAAU3H,EAAU4H,IAexC,SAASiB,GAAU1+K,EAAQ8oB,EAAQ61J,EAAUjI,EAAY1uK,GACnDhI,IAAW8oB,GAGf+wJ,GAAQ/wJ,GAAQ,SAAS00J,EAAUr9K,GAEjC,GADA6H,IAAUA,EAAQ,IAAI0Q,IAClB86J,GAASgK,IA+BjB,SAAuBx9K,EAAQ8oB,EAAQ3oB,EAAKw+K,EAAUC,EAAWlI,EAAY1uK,GAC3E,IAAI6tK,EAAWgJ,GAAQ7+K,EAAQG,GAC3Bq9K,EAAWqB,GAAQ/1J,EAAQ3oB,GAC3B+3K,EAAUlwK,EAAMpI,IAAI49K,GAExB,GAAItF,EAEF,YADAxC,GAAiB11K,EAAQG,EAAK+3K,GAGhC,IAAIxsK,EAAWgrK,EACXA,EAAWb,EAAU2H,EAAWr9K,EAAM,GAAKH,EAAQ8oB,EAAQ9gB,GAC3DrQ,EAEA8gL,EAAW/sK,IAAa/T,EAE5B,GAAI8gL,EAAU,CACZ,IAAI7D,EAAQr3K,GAAQigL,GAChBzI,GAAUH,GAAShD,GAAS4L,GAC5BsB,GAAWlK,IAAUG,GAAU5I,GAAaqR,GAEhD9xK,EAAW8xK,EACP5I,GAASG,GAAU+J,EACjBvhL,GAAQs4K,GACVnqK,EAAWmqK,EAEJkJ,GAAkBlJ,GACzBnqK,EAAW6pK,GAAUM,GAEdd,GACP0D,GAAW,EACX/sK,EAAWwrK,GAAYsG,GAAU,IAE1BsB,GACPrG,GAAW,EACX/sK,EAAWosK,GAAgB0F,GAAU,IAGrC9xK,EAAW,GAGNgjE,GAAc8uG,IAAa1I,GAAY0I,IAC9C9xK,EAAWmqK,EACPf,GAAYe,GACdnqK,EAAWszK,GAAcnJ,GAEjBrC,GAASqC,KAAaoE,GAAWpE,KACzCnqK,EAAWyrK,GAAgBqG,KAI7B/E,GAAW,EAGXA,IAEFzwK,EAAMzE,IAAIi6K,EAAU9xK,GACpBkzK,EAAUlzK,EAAU8xK,EAAUmB,EAAUjI,EAAY1uK,GACpDA,EAAK,OAAWw1K,IAElB9H,GAAiB11K,EAAQG,EAAKuL,GAzF1BuzK,CAAcj/K,EAAQ8oB,EAAQ3oB,EAAKw+K,EAAUD,GAAWhI,EAAY1uK,OAEjE,CACH,IAAI0D,EAAWgrK,EACXA,EAAWmI,GAAQ7+K,EAAQG,GAAMq9K,EAAWr9K,EAAM,GAAKH,EAAQ8oB,EAAQ9gB,GACvErQ,EAEA+T,IAAa/T,IACf+T,EAAW8xK,GAEb9H,GAAiB11K,EAAQG,EAAKuL,MAE/B4rK,IAwFL,SAAS4H,GAAQx/K,EAAOuC,GACtB,IAAIvE,EAASgC,EAAMhC,OACnB,GAAKA,EAIL,OAAOw3K,GADPjzK,GAAKA,EAAI,EAAIvE,EAAS,EACJA,GAAUgC,EAAMuC,GAAKtK,EAYzC,SAASwnL,GAAY7+K,EAAY8+K,EAAWC,GAExCD,EADEA,EAAU1hL,OACAqvK,GAASqS,GAAW,SAAS9S,GACvC,OAAI/uK,GAAQ+uK,GACH,SAAS/0K,GACd,OAAO2iL,GAAQ3iL,EAA2B,IAApB+0K,EAAS5uK,OAAe4uK,EAAS,GAAKA,IAGzDA,KAGG,CAAC5vH,IAGf,IAAI1kD,GAAS,EACbonL,EAAYrS,GAASqS,EAAW/Q,GAAUiR,OAE1C,IAAI7vK,EAAS4uK,GAAQ/9K,GAAY,SAAS/I,EAAO4I,EAAKG,GACpD,IAAIi/K,EAAWxS,GAASqS,GAAW,SAAS9S,GAC1C,OAAOA,EAAS/0K,MAElB,MAAO,CAAE,SAAYgoL,EAAU,QAAWvnL,EAAO,MAAST,MAG5D,OA5xFJ,SAAoBmI,EAAO8/K,GACzB,IAAI9hL,EAASgC,EAAMhC,OAGnB,IADAgC,EAAM4I,KAAKk3K,GACJ9hL,KACLgC,EAAMhC,GAAUgC,EAAMhC,GAAQnG,MAEhC,OAAOmI,EAqxFE+/K,CAAWhwK,GAAQ,SAASzP,EAAQwc,GACzC,OA04BJ,SAAyBxc,EAAQwc,EAAO6iK,GACtC,IAAIrnL,GAAS,EACT0nL,EAAc1/K,EAAOu/K,SACrBI,EAAcnjK,EAAM+iK,SACpB7hL,EAASgiL,EAAYhiL,OACrBkiL,EAAeP,EAAO3hL,OAE1B,OAAS1F,EAAQ0F,GAAQ,CACvB,IAAI+R,EAASowK,GAAiBH,EAAY1nL,GAAQ2nL,EAAY3nL,IAC9D,GAAIyX,EACF,OAAIzX,GAAS4nL,EACJnwK,EAGFA,GAAmB,QADd4vK,EAAOrnL,IACiB,EAAI,GAU5C,OAAOgI,EAAOhI,MAAQwkB,EAAMxkB,MAl6BnB8nL,CAAgB9/K,EAAQwc,EAAO6iK,MA4B1C,SAASU,GAAW//K,EAAQo2K,EAAOnwK,GAKjC,IAJA,IAAIjO,GAAS,EACT0F,EAAS04K,EAAM14K,OACf+R,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAIkoH,EAAOwwD,EAAMp+K,GACbT,EAAQ2iL,GAAQl6K,EAAQ4lH,GAExB3/G,EAAU1O,EAAOquH,IACnBo6D,GAAQvwK,EAAQ0qK,GAASv0D,EAAM5lH,GAASzI,GAG5C,OAAOkY,EA2BT,SAASwwK,GAAYvgL,EAAOsH,EAAQslK,EAAUlkK,GAC5C,IAAIiU,EAAUjU,EAAaylK,GAAkBhB,GACzC70K,GAAS,EACT0F,EAASsJ,EAAOtJ,OAChB49K,EAAO57K,EAQX,IANIA,IAAUsH,IACZA,EAASuuK,GAAUvuK,IAEjBslK,IACFgP,EAAOvO,GAASrtK,EAAO2uK,GAAU/B,OAE1Bt0K,EAAQ0F,GAKf,IAJA,IAAI+vK,EAAY,EACZl2K,EAAQyP,EAAOhP,GACf4gL,EAAWtM,EAAWA,EAAS/0K,GAASA,GAEpCk2K,EAAYpxJ,EAAQi/J,EAAM1C,EAAUnL,EAAWrlK,KAAgB,GACjEkzK,IAAS57K,GACXuL,GAAOpO,KAAKy+K,EAAM7N,EAAW,GAE/BxiK,GAAOpO,KAAK6C,EAAO+tK,EAAW,GAGlC,OAAO/tK,EAYT,SAASwgL,GAAWxgL,EAAOygL,GAIzB,IAHA,IAAIziL,EAASgC,EAAQygL,EAAQziL,OAAS,EAClCmqJ,EAAYnqJ,EAAS,EAElBA,KAAU,CACf,IAAI1F,EAAQmoL,EAAQziL,GACpB,GAAIA,GAAUmqJ,GAAa7vJ,IAAUooL,EAAU,CAC7C,IAAIA,EAAWpoL,EACXk9K,GAAQl9K,GACViT,GAAOpO,KAAK6C,EAAO1H,EAAO,GAE1BqoL,GAAU3gL,EAAO1H,IAIvB,OAAO0H,EAYT,SAAS01K,GAAWkB,EAAOC,GACzB,OAAOD,EAAQ7E,GAAYW,MAAkBmE,EAAQD,EAAQ,IAkC/D,SAASgK,GAAWl+K,EAAQH,GAC1B,IAAIwN,EAAS,GACb,IAAKrN,GAAUH,EAAI,GAAKA,EAAIkiK,EAC1B,OAAO10J,EAIT,GACMxN,EAAI,IACNwN,GAAUrN,IAEZH,EAAIwvK,GAAYxvK,EAAI,MAElBG,GAAUA,SAELH,GAET,OAAOwN,EAWT,SAAS8wK,GAASx6J,EAAMnK,GACtB,OAAO4kK,GAAYC,GAAS16J,EAAMnK,EAAO8gC,IAAW32B,EAAO,IAU7D,SAAS26J,GAAWpgL,GAClB,OAAO60K,GAAYnuK,GAAO1G,IAW5B,SAASqgL,GAAergL,EAAY2B,GAClC,IAAIvC,EAAQsH,GAAO1G,GACnB,OAAOg1K,GAAY51K,EAAO81K,GAAUvzK,EAAG,EAAGvC,EAAMhC,SAalD,SAASsiL,GAAQhgL,EAAQ4lH,EAAMruH,EAAOm/K,GACpC,IAAKlD,GAASxzK,GACZ,OAAOA,EAST,IALA,IAAIhI,GAAS,EACT0F,GAHJkoH,EAAOu0D,GAASv0D,EAAM5lH,IAGJtC,OACdmqJ,EAAYnqJ,EAAS,EACrBkjL,EAAS5gL,EAEI,MAAV4gL,KAAoB5oL,EAAQ0F,GAAQ,CACzC,IAAIyC,EAAMi6K,GAAMx0D,EAAK5tH,IACjB0T,EAAWnU,EAEf,GAAY,cAAR4I,GAA+B,gBAARA,GAAiC,cAARA,EAClD,OAAOH,EAGT,GAAIhI,GAAS6vJ,EAAW,CACtB,IAAIguB,EAAW+K,EAAOzgL,IACtBuL,EAAWgrK,EAAaA,EAAWb,EAAU11K,EAAKygL,GAAUjpL,KAC3CA,IACf+T,EAAW8nK,GAASqC,GAChBA,EACCX,GAAQtvD,EAAK5tH,EAAQ,IAAM,GAAK,IAGzC49K,GAAYgL,EAAQzgL,EAAKuL,GACzBk1K,EAASA,EAAOzgL,GAElB,OAAOH,EAWT,IAAI6gL,GAAerO,GAAqB,SAASzsJ,EAAM8wB,GAErD,OADA27H,GAAQjvK,IAAIwiB,EAAM8wB,GACX9wB,GAFoB22B,GAazBokI,GAAmBp9K,GAA4B,SAASqiB,EAAM3jB,GAChE,OAAOsB,GAAeqiB,EAAM,WAAY,CACtC,cAAgB,EAChB,YAAc,EACd,MAAS+hB,GAAS1lC,GAClB,UAAY,KALwBs6C,GAgBxC,SAASqkI,GAAYzgL,GACnB,OAAOg1K,GAAYtuK,GAAO1G,IAY5B,SAAS0gL,GAAUthL,EAAOkc,EAAOvjB,GAC/B,IAAIL,GAAS,EACT0F,EAASgC,EAAMhC,OAEfke,EAAQ,IACVA,GAASA,EAAQle,EAAS,EAAKA,EAASke,IAE1CvjB,EAAMA,EAAMqF,EAASA,EAASrF,GACpB,IACRA,GAAOqF,GAETA,EAASke,EAAQvjB,EAAM,EAAMA,EAAMujB,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAInM,EAASnS,EAAMI,KACV1F,EAAQ0F,GACf+R,EAAOzX,GAAS0H,EAAM1H,EAAQ4jB,GAEhC,OAAOnM,EAYT,SAASwxK,GAAS3gL,EAAY2F,GAC5B,IAAIwJ,EAMJ,OAJAumK,GAAS11K,GAAY,SAAS/I,EAAOS,EAAOsI,GAE1C,QADAmP,EAASxJ,EAAU1O,EAAOS,EAAOsI,SAG1BmP,EAeX,SAASyxK,GAAgBxhL,EAAOnI,EAAO4pL,GACrC,IAAIC,EAAM,EACNC,EAAgB,MAAT3hL,EAAgB0hL,EAAM1hL,EAAMhC,OAEvC,GAAoB,iBAATnG,GAAqBA,IAAUA,GAAS8pL,GAn/H3Bhd,WAm/H0D,CAChF,KAAO+c,EAAMC,GAAM,CACjB,IAAIC,EAAOF,EAAMC,IAAU,EACvBzI,EAAWl5K,EAAM4hL,GAEJ,OAAb1I,IAAsBY,GAASZ,KAC9BuI,EAAcvI,GAAYrhL,EAAUqhL,EAAWrhL,GAClD6pL,EAAME,EAAM,EAEZD,EAAOC,EAGX,OAAOD,EAET,OAAOE,GAAkB7hL,EAAOnI,EAAOmlD,GAAUykI,GAgBnD,SAASI,GAAkB7hL,EAAOnI,EAAO+0K,EAAU6U,GACjD,IAAIC,EAAM,EACNC,EAAgB,MAAT3hL,EAAgB,EAAIA,EAAMhC,OACrC,GAAa,IAAT2jL,EACF,OAAO,EAST,IALA,IAAIG,GADJjqL,EAAQ+0K,EAAS/0K,MACQA,EACrBkqL,EAAsB,OAAVlqL,EACZmqL,EAAclI,GAASjiL,GACvBoqL,EAAiBpqL,IAAUI,EAExBypL,EAAMC,GAAM,CACjB,IAAIC,EAAM7P,IAAa2P,EAAMC,GAAQ,GACjCzI,EAAWtM,EAAS5sK,EAAM4hL,IAC1BM,EAAehJ,IAAajhL,EAC5BkqL,EAAyB,OAAbjJ,EACZkJ,EAAiBlJ,IAAaA,EAC9BmJ,EAAcvI,GAASZ,GAE3B,GAAI4I,EACF,IAAIQ,EAASb,GAAcW,OAE3BE,EADSL,EACAG,IAAmBX,GAAcS,GACjCH,EACAK,GAAkBF,IAAiBT,IAAeU,GAClDH,EACAI,GAAkBF,IAAiBC,IAAcV,IAAeY,IAChEF,IAAaE,IAGbZ,EAAcvI,GAAYrhL,EAAUqhL,EAAWrhL,GAEtDyqL,EACFZ,EAAME,EAAM,EAEZD,EAAOC,EAGX,OAAOrP,GAAUoP,EA1jIChd,YAskIpB,SAAS4d,GAAeviL,EAAO4sK,GAM7B,IALA,IAAIt0K,GAAS,EACT0F,EAASgC,EAAMhC,OACfivK,EAAW,EACXl9J,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACd4gL,EAAWtM,EAAWA,EAAS/0K,GAASA,EAE5C,IAAKS,IAAUqlC,GAAGu7I,EAAU0C,GAAO,CACjC,IAAIA,EAAO1C,EACXnpK,EAAOk9J,KAAwB,IAAVp1K,EAAc,EAAIA,GAG3C,OAAOkY,EAWT,SAASyyK,GAAa3qL,GACpB,MAAoB,iBAATA,EACFA,EAELiiL,GAASjiL,GACJ6sK,GAED7sK,EAWV,SAAS4qL,GAAa5qL,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIgG,GAAQhG,GAEV,OAAOw1K,GAASx1K,EAAO4qL,IAAgB,GAEzC,GAAI3I,GAASjiL,GACX,OAAO07K,GAAiBA,GAAep2K,KAAKtF,GAAS,GAEvD,IAAIkY,EAAUlY,EAAQ,GACtB,MAAkB,KAAVkY,GAAkB,EAAIlY,IAAU,IAAa,KAAOkY,EAY9D,SAAS2yK,GAAS1iL,EAAO4sK,EAAUlkK,GACjC,IAAIpQ,GAAS,EACToN,EAAWwnK,GACXlvK,EAASgC,EAAMhC,OACf+6K,GAAW,EACXhpK,EAAS,GACT6rK,EAAO7rK,EAEX,GAAIrH,EACFqwK,GAAW,EACXrzK,EAAW0nK,QAER,GAAIpvK,GAjtIU,IAitIkB,CACnC,IAAI6F,EAAM+oK,EAAW,KAAO+V,GAAU3iL,GACtC,GAAI6D,EACF,OAAO8rK,GAAW9rK,GAEpBk1K,GAAW,EACXrzK,EAAWmpK,GACX+M,EAAO,IAAI9G,QAGX8G,EAAOhP,EAAW,GAAK78J,EAEzBkpK,EACA,OAAS3gL,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACd4gL,EAAWtM,EAAWA,EAAS/0K,GAASA,EAG5C,GADAA,EAAS6Q,GAAwB,IAAV7Q,EAAeA,EAAQ,EAC1CkhL,GAAYG,IAAaA,EAAU,CAErC,IADA,IAAI0J,EAAYhH,EAAK59K,OACd4kL,KACL,GAAIhH,EAAKgH,KAAe1J,EACtB,SAASD,EAGTrM,GACFgP,EAAKrzK,KAAK2wK,GAEZnpK,EAAOxH,KAAK1Q,QAEJ6N,EAASk2K,EAAM1C,EAAUxwK,KAC7BkzK,IAAS7rK,GACX6rK,EAAKrzK,KAAK2wK,GAEZnpK,EAAOxH,KAAK1Q,IAGhB,OAAOkY,EAWT,SAAS4wK,GAAUrgL,EAAQ4lH,GAGzB,OAAiB,OADjB5lH,EAASu4C,GAAOv4C,EADhB4lH,EAAOu0D,GAASv0D,EAAM5lH,aAEUA,EAAOo6K,GAAMv6J,GAAK+lG,KAapD,SAAS28D,GAAWviL,EAAQ4lH,EAAMz6G,EAASurK,GACzC,OAAOsJ,GAAQhgL,EAAQ4lH,EAAMz6G,EAAQ+uK,GAAQl6K,EAAQ4lH,IAAQ8wD,GAc/D,SAAS8L,GAAU9iL,EAAOuG,EAAWw8K,EAAQ/U,GAI3C,IAHA,IAAIhwK,EAASgC,EAAMhC,OACf1F,EAAQ01K,EAAYhwK,GAAU,GAE1BgwK,EAAY11K,MAAYA,EAAQ0F,IACtCuI,EAAUvG,EAAM1H,GAAQA,EAAO0H,KAEjC,OAAO+iL,EACHzB,GAAUthL,EAAQguK,EAAY,EAAI11K,EAAS01K,EAAY11K,EAAQ,EAAI0F,GACnEsjL,GAAUthL,EAAQguK,EAAY11K,EAAQ,EAAI,EAAK01K,EAAYhwK,EAAS1F,GAa1E,SAAS0qL,GAAiBnrL,EAAO6tE,GAC/B,IAAI31D,EAASlY,EAIb,OAHIkY,aAAkB2jK,KACpB3jK,EAASA,EAAOlY,SAEXy1K,GAAY5nG,GAAS,SAAS31D,EAAQsX,GAC3C,OAAOA,EAAOhB,KAAKjiB,MAAMijB,EAAO6qD,QAAStM,GAAU,CAAC71D,GAASsX,EAAOF,SACnEpX,GAaL,SAASkzK,GAAQ1H,EAAQ3O,EAAUlkK,GACjC,IAAI1K,EAASu9K,EAAOv9K,OACpB,GAAIA,EAAS,EACX,OAAOA,EAAS0kL,GAASnH,EAAO,IAAM,GAKxC,IAHA,IAAIjjL,GAAS,EACTyX,EAASnS,EAAMI,KAEV1F,EAAQ0F,GAIf,IAHA,IAAIgC,EAAQu7K,EAAOjjL,GACfmjL,GAAY,IAEPA,EAAWz9K,GACdy9K,GAAYnjL,IACdyX,EAAOzX,GAASwgL,GAAe/oK,EAAOzX,IAAU0H,EAAOu7K,EAAOE,GAAW7O,EAAUlkK,IAIzF,OAAOg6K,GAAS1I,GAAYjqK,EAAQ,GAAI68J,EAAUlkK,GAYpD,SAASw6K,GAAc78I,EAAO/+B,EAAQ67K,GAMpC,IALA,IAAI7qL,GAAS,EACT0F,EAASqoC,EAAMroC,OACfolL,EAAa97K,EAAOtJ,OACpB+R,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQS,EAAQ8qL,EAAa97K,EAAOhP,GAASL,EACjDkrL,EAAWpzK,EAAQs2B,EAAM/tC,GAAQT,GAEnC,OAAOkY,EAUT,SAASszK,GAAoBxrL,GAC3B,OAAOwnL,GAAkBxnL,GAASA,EAAQ,GAU5C,SAASyrL,GAAazrL,GACpB,MAAuB,mBAATA,EAAsBA,EAAQmlD,GAW9C,SAASy9H,GAAS5iL,EAAOyI,GACvB,OAAIzC,GAAQhG,GACHA,EAEFinL,GAAMjnL,EAAOyI,GAAU,CAACzI,GAAS0rL,GAAanmL,GAASvF,IAYhE,IAAI2rL,GAAW3C,GAWf,SAAS4C,GAAUzjL,EAAOkc,EAAOvjB,GAC/B,IAAIqF,EAASgC,EAAMhC,OAEnB,OADArF,EAAMA,IAAQV,EAAY+F,EAASrF,GAC1BujB,GAASvjB,GAAOqF,EAAUgC,EAAQshL,GAAUthL,EAAOkc,EAAOvjB,GASrE,IAAI+pI,GAAeivC,IAAmB,SAASv0I,GAC7C,OAAO1pB,GAAKgvH,aAAatlG,IAW3B,SAASo6I,GAAYnoB,EAAQ4nB,GAC3B,GAAIA,EACF,OAAO5nB,EAAOpjJ,QAEhB,IAAIjO,EAASqxJ,EAAOrxJ,OAChB+R,EAASmhK,GAAcA,GAAYlzK,GAAU,IAAIqxJ,EAAO50J,YAAYuD,GAGxE,OADAqxJ,EAAOhR,KAAKtuI,GACLA,EAUT,SAASkoK,GAAiByL,GACxB,IAAI3zK,EAAS,IAAI2zK,EAAYjpL,YAAYipL,EAAYrhB,YAErD,OADA,IAAI1Q,GAAW5hJ,GAAQlM,IAAI,IAAI8tJ,GAAW+xB,IACnC3zK,EAgDT,SAASqoK,GAAgBjjE,EAAY8hE,GACnC,IAAI5nB,EAAS4nB,EAASgB,GAAiB9iE,EAAWk6C,QAAUl6C,EAAWk6C,OACvE,OAAO,IAAIl6C,EAAW16G,YAAY40J,EAAQl6C,EAAWiiD,WAAYjiD,EAAWn3G,QAW9E,SAASmiL,GAAiBtoL,EAAOilB,GAC/B,GAAIjlB,IAAUilB,EAAO,CACnB,IAAI6mK,EAAe9rL,IAAUI,EACzB8pL,EAAsB,OAAVlqL,EACZ+rL,EAAiB/rL,IAAUA,EAC3BmqL,EAAclI,GAASjiL,GAEvBqqL,EAAeplK,IAAU7kB,EACzBkqL,EAAsB,OAAVrlK,EACZslK,EAAiBtlK,IAAUA,EAC3BulK,EAAcvI,GAASh9J,GAE3B,IAAMqlK,IAAcE,IAAgBL,GAAenqL,EAAQilB,GACtDklK,GAAeE,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5BuB,GAAgBvB,IACjBwB,EACH,OAAO,EAET,IAAM7B,IAAcC,IAAgBK,GAAexqL,EAAQilB,GACtDulK,GAAesB,GAAgBC,IAAmB7B,IAAcC,GAChEG,GAAawB,GAAgBC,IAC5B1B,GAAgB0B,IACjBxB,EACH,OAAQ,EAGZ,OAAO,EAuDT,SAASyB,GAAY18J,EAAM28J,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAa/8J,EAAKnpB,OAClBmmL,EAAgBJ,EAAQ/lL,OACxBomL,GAAa,EACbC,EAAaP,EAAS9lL,OACtBsmL,EAAchS,GAAU4R,EAAaC,EAAe,GACpDp0K,EAASnS,EAAMymL,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBt0K,EAAOq0K,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7Bn0K,EAAOg0K,EAAQE,IAAc98J,EAAK88J,IAGtC,KAAOK,KACLv0K,EAAOq0K,KAAej9J,EAAK88J,KAE7B,OAAOl0K,EAcT,SAASy0K,GAAiBr9J,EAAM28J,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAa/8J,EAAKnpB,OAClBymL,GAAgB,EAChBN,EAAgBJ,EAAQ/lL,OACxB0mL,GAAc,EACdC,EAAcb,EAAS9lL,OACvBsmL,EAAchS,GAAU4R,EAAaC,EAAe,GACpDp0K,EAASnS,EAAM0mL,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBv0K,EAAOk0K,GAAa98J,EAAK88J,GAG3B,IADA,IAAIh6K,EAASg6K,IACJS,EAAaC,GACpB50K,EAAO9F,EAASy6K,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7Bn0K,EAAO9F,EAAS85K,EAAQU,IAAiBt9J,EAAK88J,MAGlD,OAAOl0K,EAWT,SAAS8lK,GAAUzsJ,EAAQppB,GACzB,IAAI1H,GAAS,EACT0F,EAASorB,EAAOprB,OAGpB,IADAgC,IAAUA,EAAQpC,EAAMI,MACf1F,EAAQ0F,GACfgC,EAAM1H,GAAS8wB,EAAO9wB,GAExB,OAAO0H,EAaT,SAASw2K,GAAWptJ,EAAQid,EAAO/lC,EAAQ02K,GACzC,IAAI4N,GAAStkL,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAIhI,GAAS,EACT0F,EAASqoC,EAAMroC,SAEV1F,EAAQ0F,GAAQ,CACvB,IAAIyC,EAAM4lC,EAAM/tC,GAEZ0T,EAAWgrK,EACXA,EAAW12K,EAAOG,GAAM2oB,EAAO3oB,GAAMA,EAAKH,EAAQ8oB,GAClDnxB,EAEA+T,IAAa/T,IACf+T,EAAWod,EAAO3oB,IAEhBmkL,EACF3O,GAAgB31K,EAAQG,EAAKuL,GAE7BkqK,GAAY51K,EAAQG,EAAKuL,GAG7B,OAAO1L,EAmCT,SAASukL,GAAiBlY,EAAQmY,GAChC,OAAO,SAASlkL,EAAYgsK,GAC1B,IAAIvmJ,EAAOxoB,GAAQ+C,GAAc8rK,GAAkB2J,GAC/Cj+F,EAAc0sG,EAAcA,IAAgB,GAEhD,OAAOz+J,EAAKzlB,EAAY+rK,EAAQiT,GAAYhT,EAAU,GAAIx0F,IAW9D,SAAS2sG,GAAeC,GACtB,OAAOnE,IAAS,SAASvgL,EAAQiN,GAC/B,IAAIjV,GAAS,EACT0F,EAASuP,EAAQvP,OACjBg5K,EAAah5K,EAAS,EAAIuP,EAAQvP,EAAS,GAAK/F,EAChDgtL,EAAQjnL,EAAS,EAAIuP,EAAQ,GAAKtV,EAWtC,IATA++K,EAAcgO,EAAShnL,OAAS,GAA0B,mBAAdg5K,GACvCh5K,IAAUg5K,GACX/+K,EAEAgtL,GAASC,GAAe33K,EAAQ,GAAIA,EAAQ,GAAI03K,KAClDjO,EAAah5K,EAAS,EAAI/F,EAAY++K,EACtCh5K,EAAS,GAEXsC,EAAS/F,GAAO+F,KACPhI,EAAQ0F,GAAQ,CACvB,IAAIorB,EAAS7b,EAAQjV,GACjB8wB,GACF47J,EAAS1kL,EAAQ8oB,EAAQ9wB,EAAO0+K,GAGpC,OAAO12K,KAYX,SAASk5K,GAAe3L,EAAUG,GAChC,OAAO,SAASptK,EAAYgsK,GAC1B,GAAkB,MAAdhsK,EACF,OAAOA,EAET,IAAKjD,GAAYiD,GACf,OAAOitK,EAASjtK,EAAYgsK,GAM9B,IAJA,IAAI5uK,EAAS4C,EAAW5C,OACpB1F,EAAQ01K,EAAYhwK,GAAU,EAC9Bf,EAAW1C,GAAOqG,IAEdotK,EAAY11K,MAAYA,EAAQ0F,KACa,IAA/C4uK,EAAS3vK,EAAS3E,GAAQA,EAAO2E,KAIvC,OAAO2D,GAWX,SAASw5K,GAAcpM,GACrB,OAAO,SAAS1tK,EAAQssK,EAAUgO,GAMhC,IALA,IAAItiL,GAAS,EACT2E,EAAW1C,GAAO+F,GAClB+lC,EAAQu0I,EAASt6K,GACjBtC,EAASqoC,EAAMroC,OAEZA,KAAU,CACf,IAAIyC,EAAM4lC,EAAM2nI,EAAYhwK,IAAW1F,GACvC,IAA+C,IAA3Cs0K,EAAS3vK,EAASwD,GAAMA,EAAKxD,GAC/B,MAGJ,OAAOqD,GAgCX,SAAS6kL,GAAgBjgJ,GACvB,OAAO,SAASxiC,GAGd,IAAIqsK,EAAaQ,GAFjB7sK,EAAStF,GAASsF,IAGdqtK,GAAcrtK,GACdzK,EAEAq3K,EAAMP,EACNA,EAAW,GACXrsK,EAAO+hJ,OAAO,GAEd2gC,EAAWrW,EACX0U,GAAU1U,EAAY,GAAGnxJ,KAAK,IAC9Blb,EAAOuJ,MAAM,GAEjB,OAAOqjK,EAAIpqI,KAAgBkgJ,GAW/B,SAASC,GAAiBtkJ,GACxB,OAAO,SAASr+B,GACd,OAAO4qK,GAAYgY,GAAMC,GAAO7iL,GAAQqyE,QAAQw1F,GAAQ,KAAMxpI,EAAU,KAY5E,SAASykJ,GAAWxN,GAClB,OAAO,WAIL,IAAI7wJ,EAAOtnB,UACX,OAAQsnB,EAAKnpB,QACX,KAAK,EAAG,OAAO,IAAIg6K,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAK7wJ,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAI6wJ,EAAK7wJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAIs+J,EAAc5R,GAAWmE,EAAK19K,WAC9ByV,EAASioK,EAAK5zK,MAAMqhL,EAAat+J,GAIrC,OAAO2sJ,GAAS/jK,GAAUA,EAAS01K,GAgDvC,SAASC,GAAWC,GAClB,OAAO,SAAS/kL,EAAY2F,EAAWwnK,GACrC,IAAI9wK,EAAW1C,GAAOqG,GACtB,IAAKjD,GAAYiD,GAAa,CAC5B,IAAIgsK,EAAWgT,GAAYr5K,EAAW,GACtC3F,EAAa3C,GAAK2C,GAClB2F,EAAY,SAAS9F,GAAO,OAAOmsK,EAAS3vK,EAASwD,GAAMA,EAAKxD,IAElE,IAAI3E,EAAQqtL,EAAc/kL,EAAY2F,EAAWwnK,GACjD,OAAOz1K,GAAS,EAAI2E,EAAS2vK,EAAWhsK,EAAWtI,GAASA,GAASL,GAWzE,SAAS2tL,GAAW5X,GAClB,OAAO6X,IAAS,SAASx3I,GACvB,IAAIrwC,EAASqwC,EAAMrwC,OACf1F,EAAQ0F,EACR8nL,EAASnS,GAAcr5K,UAAUyrL,KAKrC,IAHI/X,GACF3/H,EAAMpvC,UAED3G,KAAS,CACd,IAAI+tB,EAAOgoB,EAAM/1C,GACjB,GAAmB,mBAAR+tB,EACT,MAAM,IAAI7nB,GAAUwlK,GAEtB,GAAI8hB,IAAWE,GAAgC,WAArBC,GAAY5/J,GACpC,IAAI2/J,EAAU,IAAIrS,GAAc,IAAI,GAIxC,IADAr7K,EAAQ0tL,EAAU1tL,EAAQ0F,IACjB1F,EAAQ0F,GAAQ,CAGvB,IAAIkoL,EAAWD,GAFf5/J,EAAOgoB,EAAM/1C,IAGT6+C,EAAmB,WAAZ+uI,EAAwB9uI,GAAQ/wB,GAAQpuB,EAMjD+tL,EAJE7uI,GAAQgvI,GAAWhvI,EAAK,KACtB,KAAAA,EAAK,KACJA,EAAK,GAAGn5C,QAAqB,GAAXm5C,EAAK,GAElB6uI,EAAQC,GAAY9uI,EAAK,KAAK/yC,MAAM4hL,EAAS7uI,EAAK,IAElC,GAAf9wB,EAAKroB,QAAemoL,GAAW9/J,GACtC2/J,EAAQE,KACRF,EAAQD,KAAK1/J,GAGrB,OAAO,WACL,IAAIc,EAAOtnB,UACPhI,EAAQsvB,EAAK,GAEjB,GAAI6+J,GAA0B,GAAf7+J,EAAKnpB,QAAeH,GAAQhG,GACzC,OAAOmuL,EAAQI,MAAMvuL,GAAOA,QAK9B,IAHA,IAAIS,EAAQ,EACRyX,EAAS/R,EAASqwC,EAAM/1C,GAAO8L,MAAMjI,KAAMgrB,GAAQtvB,IAE9CS,EAAQ0F,GACf+R,EAASs+B,EAAM/1C,GAAO6E,KAAKhB,KAAM4T,GAEnC,OAAOA,MAwBb,SAASs2K,GAAahgK,EAAM0wJ,EAAS7kG,EAAS4xG,EAAUC,EAASuC,EAAeC,EAAcC,EAAQC,EAAKC,GACzG,IAAIC,EAAQ5P,EAAUzS,EAClBsiB,EA5iKa,EA4iKJ7P,EACT8P,EA5iKiB,EA4iKL9P,EACZiN,EAAsB,GAAVjN,EACZ+P,EAtiKa,IAsiKJ/P,EACTiB,EAAO6O,EAAY5uL,EAAYutL,GAAWn/J,GA6C9C,OA3CA,SAAS2/J,IAKP,IAJA,IAAIhoL,EAAS6B,UAAU7B,OACnBmpB,EAAOvpB,EAAMI,GACb1F,EAAQ0F,EAEL1F,KACL6uB,EAAK7uB,GAASuH,UAAUvH,GAE1B,GAAI0rL,EACF,IAAI78D,EAAc4/D,GAAUf,GACxBgB,EAAe9X,GAAa/nJ,EAAMggG,GASxC,GAPI28D,IACF38J,EAAO08J,GAAY18J,EAAM28J,EAAUC,EAASC,IAE1CsC,IACFn/J,EAAOq9J,GAAiBr9J,EAAMm/J,EAAeC,EAAcvC,IAE7DhmL,GAAUgpL,EACNhD,GAAahmL,EAAS0oL,EAAO,CAC/B,IAAIO,EAAavX,GAAevoJ,EAAMggG,GACtC,OAAO+/D,GACL7gK,EAAM0wJ,EAASsP,GAAcL,EAAQ7+D,YAAaj1C,EAClD/qD,EAAM8/J,EAAYT,EAAQC,EAAKC,EAAQ1oL,GAG3C,IAAIynL,EAAcmB,EAAS10G,EAAU/1E,KACjC6C,EAAK6nL,EAAYpB,EAAYp/J,GAAQA,EAczC,OAZAroB,EAASmpB,EAAKnpB,OACVwoL,EACFr/J,EAAOggK,GAAQhgK,EAAMq/J,GACZM,GAAU9oL,EAAS,GAC5BmpB,EAAKloB,UAEH0nL,GAASF,EAAMzoL,IACjBmpB,EAAKnpB,OAASyoL,GAEZtqL,MAAQA,OAASuX,IAAQvX,gBAAgB6pL,IAC3ChnL,EAAKg5K,GAAQwN,GAAWxmL,IAEnBA,EAAGoF,MAAMqhL,EAAat+J,IAajC,SAASigK,GAAeza,EAAQ0a,GAC9B,OAAO,SAAS/mL,EAAQssK,GACtB,OAh/DJ,SAAsBtsK,EAAQqsK,EAAQC,EAAUx0F,GAI9C,OAHAqhG,GAAWn5K,GAAQ,SAASzI,EAAO4I,EAAKH,GACtCqsK,EAAOv0F,EAAaw0F,EAAS/0K,GAAQ4I,EAAKH,MAErC83E,EA4+DEkvG,CAAahnL,EAAQqsK,EAAQ0a,EAAWza,GAAW,KAY9D,SAAS2a,GAAoBC,EAAU9tI,GACrC,OAAO,SAAS7hD,EAAOilB,GACrB,IAAI/M,EACJ,GAAIlY,IAAUI,GAAa6kB,IAAU7kB,EACnC,OAAOyhD,EAKT,GAHI7hD,IAAUI,IACZ8X,EAASlY,GAEPilB,IAAU7kB,EAAW,CACvB,GAAI8X,IAAW9X,EACb,OAAO6kB,EAEW,iBAATjlB,GAAqC,iBAATilB,GACrCjlB,EAAQ4qL,GAAa5qL,GACrBilB,EAAQ2lK,GAAa3lK,KAErBjlB,EAAQ2qL,GAAa3qL,GACrBilB,EAAQ0lK,GAAa1lK,IAEvB/M,EAASy3K,EAAS3vL,EAAOilB,GAE3B,OAAO/M,GAWX,SAAS03K,GAAWC,GAClB,OAAO7B,IAAS,SAASnG,GAEvB,OADAA,EAAYrS,GAASqS,EAAW/Q,GAAUiR,OACnCiB,IAAS,SAAS15J,GACvB,IAAI+qD,EAAU/1E,KACd,OAAOurL,EAAUhI,GAAW,SAAS9S,GACnC,OAAOxoK,GAAMwoK,EAAU16F,EAAS/qD,YAexC,SAASwgK,GAAc3pL,EAAQ4pL,GAG7B,IAAIC,GAFJD,EAAQA,IAAU3vL,EAAY,IAAMwqL,GAAamF,IAEzB5pL,OACxB,GAAI6pL,EAAc,EAChB,OAAOA,EAAcjH,GAAWgH,EAAO5pL,GAAU4pL,EAEnD,IAAI73K,EAAS6wK,GAAWgH,EAAO9V,GAAW9zK,EAAS6xK,GAAW+X,KAC9D,OAAOrY,GAAWqY,GACdnE,GAAU1T,GAAchgK,GAAS,EAAG/R,GAAQ4f,KAAK,IACjD7N,EAAO9D,MAAM,EAAGjO,GA6CtB,SAAS8pL,GAAY9Z,GACnB,OAAO,SAAS9xJ,EAAOvjB,EAAKoI,GAa1B,OAZIA,GAAuB,iBAARA,GAAoBmkL,GAAehpK,EAAOvjB,EAAKoI,KAChEpI,EAAMoI,EAAO9I,GAGfikB,EAAQ6rK,GAAS7rK,GACbvjB,IAAQV,GACVU,EAAMujB,EACNA,EAAQ,GAERvjB,EAAMovL,GAASpvL,GA57CrB,SAAmBujB,EAAOvjB,EAAKoI,EAAMitK,GAKnC,IAJA,IAAI11K,GAAS,EACT0F,EAASs0K,GAAUR,IAAYn5K,EAAMujB,IAAUnb,GAAQ,IAAK,GAC5DgP,EAASnS,EAAMI,GAEZA,KACL+R,EAAOi+J,EAAYhwK,IAAW1F,GAAS4jB,EACvCA,GAASnb,EAEX,OAAOgP,EAs7CEi4K,CAAU9rK,EAAOvjB,EADxBoI,EAAOA,IAAS9I,EAAaikB,EAAQvjB,EAAM,GAAK,EAAKovL,GAAShnL,GAC3BitK,IAWvC,SAASia,GAA0BT,GACjC,OAAO,SAAS3vL,EAAOilB,GAKrB,MAJsB,iBAATjlB,GAAqC,iBAATilB,IACvCjlB,EAAQukH,GAASvkH,GACjBilB,EAAQs/F,GAASt/F,IAEZ0qK,EAAS3vL,EAAOilB,IAqB3B,SAASoqK,GAAc7gK,EAAM0wJ,EAASmR,EAAU/gE,EAAaj1C,EAAS4xG,EAAUC,EAASyC,EAAQC,EAAKC,GACpG,IAAIyB,EArxKc,EAqxKJpR,EAMdA,GAAYoR,EAAU/jB,EAAoBC,EA5xKlB,GA6xKxB0S,KAAaoR,EAAU9jB,EAA0BD,MAG/C2S,IAAW,GAEb,IAAIqR,EAAU,CACZ/hK,EAAM0wJ,EAAS7kG,EAVCi2G,EAAUrE,EAAW7rL,EAFtBkwL,EAAUpE,EAAU9rL,EAGdkwL,EAAUlwL,EAAY6rL,EAFvBqE,EAAUlwL,EAAY8rL,EAYzByC,EAAQC,EAAKC,GAG5B32K,EAASm4K,EAAS9jL,MAAMnM,EAAWmwL,GAKvC,OAJIjC,GAAW9/J,IACbgiK,GAAQt4K,EAAQq4K,GAElBr4K,EAAOo3G,YAAcA,EACdmhE,GAAgBv4K,EAAQsW,EAAM0wJ,GAUvC,SAASwR,GAAYrjJ,GACnB,IAAI7e,EAAOntB,GAAKgsC,GAChB,OAAO,SAASyxI,EAAQ6R,GAGtB,GAFA7R,EAASv6D,GAASu6D,IAClB6R,EAAyB,MAAbA,EAAoB,EAAIjW,GAAUkW,GAAUD,GAAY,OACnDrW,GAAewE,GAAS,CAGvC,IAAI+R,GAAQtrL,GAASu5K,GAAU,KAAKz7H,MAAM,KAI1C,SADAwtI,GAAQtrL,GAFIipB,EAAKqiK,EAAK,GAAK,MAAQA,EAAK,GAAKF,KAEnB,KAAKttI,MAAM,MACvB,GAAK,MAAQwtI,EAAK,GAAKF,IAEvC,OAAOniK,EAAKswJ,IAWhB,IAAIgM,GAAc3nL,IAAQ,EAAI20K,GAAW,IAAI30K,GAAI,CAAC,EAAE,KAAK,IAAOwpK,EAAmB,SAASl9J,GAC1F,OAAO,IAAItM,GAAIsM,IAD2DsjJ,GAW5E,SAAS+9B,GAAc/N,GACrB,OAAO,SAASt6K,GACd,IAAI+2K,EAAMC,GAAOh3K,GACjB,OAAI+2K,GAAOjS,EACFoK,GAAWlvK,GAEhB+2K,GAAO5R,EACFmK,GAAWtvK,GAn6I1B,SAAqBA,EAAQ+lC,GAC3B,OAAOgnI,GAAShnI,GAAO,SAAS5lC,GAC9B,MAAO,CAACA,EAAKH,EAAOG,OAm6IXmoL,CAAYtoL,EAAQs6K,EAASt6K,KA6BxC,SAASuoL,GAAWxiK,EAAM0wJ,EAAS7kG,EAAS4xG,EAAUC,EAASyC,EAAQC,EAAKC,GAC1E,IAAIG,EAl4KiB,EAk4KL9P,EAChB,IAAK8P,GAA4B,mBAARxgK,EACvB,MAAM,IAAI7nB,GAAUwlK,GAEtB,IAAIhmK,EAAS8lL,EAAWA,EAAS9lL,OAAS,EAS1C,GARKA,IACH+4K,IAAW,GACX+M,EAAWC,EAAU9rL,GAEvBwuL,EAAMA,IAAQxuL,EAAYwuL,EAAMnU,GAAUmW,GAAUhC,GAAM,GAC1DC,EAAQA,IAAUzuL,EAAYyuL,EAAQ+B,GAAU/B,GAChD1oL,GAAU+lL,EAAUA,EAAQ/lL,OAAS,EAEjC+4K,EAAU1S,EAAyB,CACrC,IAAIiiB,EAAgBxC,EAChByC,EAAexC,EAEnBD,EAAWC,EAAU9rL,EAEvB,IAAIk/C,EAAO0vI,EAAY5uL,EAAYm/C,GAAQ/wB,GAEvC+hK,EAAU,CACZ/hK,EAAM0wJ,EAAS7kG,EAAS4xG,EAAUC,EAASuC,EAAeC,EAC1DC,EAAQC,EAAKC,GAkBf,GAfIvvI,GA26BN,SAAmBA,EAAM/tB,GACvB,IAAI2tJ,EAAU5/H,EAAK,GACf2xI,EAAa1/J,EAAO,GACpB2/J,EAAahS,EAAU+R,EACvB/P,EAAWgQ,EAAa,IAExBC,EACAF,GAAcxkB,GA50MA,GA40MmByS,GACjC+R,GAAcxkB,GAAmByS,GAAWxS,GAAqBptH,EAAK,GAAGn5C,QAAUorB,EAAO,IAC5E,KAAd0/J,GAAqD1/J,EAAO,GAAGprB,QAAUorB,EAAO,IA90MlE,GA80M0E2tJ,EAG5F,IAAMgC,IAAYiQ,EAChB,OAAO7xI,EAr1MQ,EAw1Mb2xI,IACF3xI,EAAK,GAAK/tB,EAAO,GAEjB2/J,GA31Me,EA21MDhS,EAA2B,EAz1MnB,GA41MxB,IAAIl/K,EAAQuxB,EAAO,GACnB,GAAIvxB,EAAO,CACT,IAAIisL,EAAW3sI,EAAK,GACpBA,EAAK,GAAK2sI,EAAWD,GAAYC,EAAUjsL,EAAOuxB,EAAO,IAAMvxB,EAC/Ds/C,EAAK,GAAK2sI,EAAWpU,GAAev4H,EAAK,GAAI+sH,GAAe96I,EAAO,IAGrEvxB,EAAQuxB,EAAO,MAEb06J,EAAW3sI,EAAK,GAChBA,EAAK,GAAK2sI,EAAWU,GAAiBV,EAAUjsL,EAAOuxB,EAAO,IAAMvxB,EACpEs/C,EAAK,GAAK2sI,EAAWpU,GAAev4H,EAAK,GAAI+sH,GAAe96I,EAAO,KAGrEvxB,EAAQuxB,EAAO,MAEb+tB,EAAK,GAAKt/C,GAGRixL,EAAaxkB,IACfntH,EAAK,GAAgB,MAAXA,EAAK,GAAa/tB,EAAO,GAAKmpJ,GAAUp7H,EAAK,GAAI/tB,EAAO,KAGrD,MAAX+tB,EAAK,KACPA,EAAK,GAAK/tB,EAAO,IAGnB+tB,EAAK,GAAK/tB,EAAO,GACjB+tB,EAAK,GAAK4xI,EA59BRE,CAAUb,EAASjxI,GAErB9wB,EAAO+hK,EAAQ,GACfrR,EAAUqR,EAAQ,GAClBl2G,EAAUk2G,EAAQ,GAClBtE,EAAWsE,EAAQ,GACnBrE,EAAUqE,EAAQ,KAClB1B,EAAQ0B,EAAQ,GAAKA,EAAQ,KAAOnwL,EAC/B4uL,EAAY,EAAIxgK,EAAKroB,OACtBs0K,GAAU8V,EAAQ,GAAKpqL,EAAQ,KAEX,GAAV+4K,IACZA,IAAW,IAERA,GA56KY,GA46KDA,EAGdhnK,EA56KgB,GA26KPgnK,GAA8BA,GAAW5S,EApgBtD,SAAqB99I,EAAM0wJ,EAAS2P,GAClC,IAAI1O,EAAOwN,GAAWn/J,GAwBtB,OAtBA,SAAS2/J,IAMP,IALA,IAAIhoL,EAAS6B,UAAU7B,OACnBmpB,EAAOvpB,EAAMI,GACb1F,EAAQ0F,EACRmpH,EAAc4/D,GAAUf,GAErB1tL,KACL6uB,EAAK7uB,GAASuH,UAAUvH,GAE1B,IAAIyrL,EAAW/lL,EAAS,GAAKmpB,EAAK,KAAOggG,GAAehgG,EAAKnpB,EAAS,KAAOmpH,EACzE,GACAuoD,GAAevoJ,EAAMggG,GAGzB,OADAnpH,GAAU+lL,EAAQ/lL,QACL0oL,EACJQ,GACL7gK,EAAM0wJ,EAASsP,GAAcL,EAAQ7+D,YAAalvH,EAClDkvB,EAAM48J,EAAS9rL,EAAWA,EAAWyuL,EAAQ1oL,GAG1CoG,GADGjI,MAAQA,OAASuX,IAAQvX,gBAAgB6pL,EAAWhO,EAAO3xJ,EACpDlqB,KAAMgrB,IA8ed+hK,CAAY7iK,EAAM0wJ,EAAS2P,GAC1B3P,GAAW3S,GAAgC,IAAX2S,GAAqDgN,EAAQ/lL,OAG9FqoL,GAAajiL,MAAMnM,EAAWmwL,GA9O3C,SAAuB/hK,EAAM0wJ,EAAS7kG,EAAS4xG,GAC7C,IAAI8C,EAtsKa,EAssKJ7P,EACTiB,EAAOwN,GAAWn/J,GAkBtB,OAhBA,SAAS2/J,IAQP,IAPA,IAAI/B,GAAa,EACbC,EAAarkL,UAAU7B,OACvBomL,GAAa,EACbC,EAAaP,EAAS9lL,OACtBmpB,EAAOvpB,EAAMymL,EAAaH,GAC1BllL,EAAM7C,MAAQA,OAASuX,IAAQvX,gBAAgB6pL,EAAWhO,EAAO3xJ,IAE5D+9J,EAAYC,GACnBl9J,EAAKi9J,GAAaN,EAASM,GAE7B,KAAOF,KACL/8J,EAAKi9J,KAAevkL,YAAYokL,GAElC,OAAO7/K,GAAMpF,EAAI4nL,EAAS10G,EAAU/1E,KAAMgrB,IA0NjCgiK,CAAc9iK,EAAM0wJ,EAAS7kG,EAAS4xG,QAJ/C,IAAI/zK,EAhmBR,SAAoBsW,EAAM0wJ,EAAS7kG,GACjC,IAAI00G,EA90Ja,EA80JJ7P,EACTiB,EAAOwN,GAAWn/J,GAMtB,OAJA,SAAS2/J,IAEP,OADU7pL,MAAQA,OAASuX,IAAQvX,gBAAgB6pL,EAAWhO,EAAO3xJ,GAC3DjiB,MAAMwiL,EAAS10G,EAAU/1E,KAAM0D,YA0lB5BupL,CAAW/iK,EAAM0wJ,EAAS7kG,GASzC,OAAOo2G,IADMnxI,EAAOgqI,GAAckH,IACJt4K,EAAQq4K,GAAU/hK,EAAM0wJ,GAexD,SAASsS,GAAuBlT,EAAU2H,EAAUr9K,EAAKH,GACvD,OAAI61K,IAAal+K,GACZ0lC,GAAGw4I,EAAU5F,GAAY9vK,MAAU/C,GAAeP,KAAKmD,EAAQG,GAC3Dq9K,EAEF3H,EAiBT,SAASmT,GAAoBnT,EAAU2H,EAAUr9K,EAAKH,EAAQ8oB,EAAQ9gB,GAOpE,OANIwrK,GAASqC,IAAarC,GAASgK,KAEjCx1K,EAAMzE,IAAIi6K,EAAU3H,GACpB6I,GAAU7I,EAAU2H,EAAU7lL,EAAWqxL,GAAqBhhL,GAC9DA,EAAK,OAAWw1K,IAEX3H,EAYT,SAASoT,GAAgB1xL,GACvB,OAAOm3E,GAAcn3E,GAASI,EAAYJ,EAgB5C,SAAS2kL,GAAYx8K,EAAO8c,EAAOi6J,EAASC,EAAYgF,EAAW1zK,GACjE,IAAIo0K,EApgLmB,EAogLP3F,EACZyS,EAAYxpL,EAAMhC,OAClBw9K,EAAY1+J,EAAM9e,OAEtB,GAAIwrL,GAAahO,KAAekB,GAAalB,EAAYgO,GACvD,OAAO,EAGT,IAAIC,EAAanhL,EAAMpI,IAAIF,GACvBm9K,EAAa70K,EAAMpI,IAAI4c,GAC3B,GAAI2sK,GAActM,EAChB,OAAOsM,GAAc3sK,GAASqgK,GAAcn9K,EAE9C,IAAI1H,GAAS,EACTyX,GAAS,EACT6rK,EAlhLqB,EAkhLb7E,EAAoC,IAAIjC,GAAW78K,EAM/D,IAJAqQ,EAAMzE,IAAI7D,EAAO8c,GACjBxU,EAAMzE,IAAIiZ,EAAO9c,KAGR1H,EAAQkxL,GAAW,CAC1B,IAAIE,EAAW1pL,EAAM1H,GACjB+kL,EAAWvgK,EAAMxkB,GAErB,GAAI0+K,EACF,IAAIsG,EAAWZ,EACX1F,EAAWqG,EAAUqM,EAAUpxL,EAAOwkB,EAAO9c,EAAOsI,GACpD0uK,EAAW0S,EAAUrM,EAAU/kL,EAAO0H,EAAO8c,EAAOxU,GAE1D,GAAIg1K,IAAarlL,EAAW,CAC1B,GAAIqlL,EACF,SAEFvtK,GAAS,EACT,MAGF,GAAI6rK,GACF,IAAKnO,GAAU3wJ,GAAO,SAASugK,EAAU5B,GACnC,IAAK5M,GAAS+M,EAAMH,KACfiO,IAAarM,GAAYrB,EAAU0N,EAAUrM,EAAUtG,EAASC,EAAY1uK,IAC/E,OAAOszK,EAAKrzK,KAAKkzK,MAEjB,CACN1rK,GAAS,EACT,YAEG,GACD25K,IAAarM,IACXrB,EAAU0N,EAAUrM,EAAUtG,EAASC,EAAY1uK,GACpD,CACLyH,GAAS,EACT,OAKJ,OAFAzH,EAAK,OAAWtI,GAChBsI,EAAK,OAAWwU,GACT/M,EA0KT,SAAS81K,GAASx/J,GAChB,OAAOy6J,GAAYC,GAAS16J,EAAMpuB,EAAW4P,IAAUwe,EAAO,IAUhE,SAASsyJ,GAAWr4K,GAClB,OAAOq6K,GAAer6K,EAAQrC,GAAM65K,IAWtC,SAASY,GAAap4K,GACpB,OAAOq6K,GAAer6K,EAAQs3K,GAAQF,IAUxC,IAAItgI,GAAW07H,GAAiB,SAASzsJ,GACvC,OAAOysJ,GAAQ5yK,IAAImmB,IADIukI,GAWzB,SAASq7B,GAAY5/J,GAKnB,IAJA,IAAItW,EAAUsW,EAAK1b,KAAO,GACtB3K,EAAQ+yK,GAAUhjK,GAClB/R,EAASN,GAAeP,KAAK41K,GAAWhjK,GAAU/P,EAAMhC,OAAS,EAE9DA,KAAU,CACf,IAAIm5C,EAAOn3C,EAAMhC,GACb2rL,EAAYxyI,EAAK9wB,KACrB,GAAiB,MAAbsjK,GAAqBA,GAAatjK,EACpC,OAAO8wB,EAAKxsC,KAGhB,OAAOoF,EAUT,SAASg3K,GAAU1gK,GAEjB,OADa3oB,GAAeP,KAAKq2K,GAAQ,eAAiBA,GAASntJ,GACrD8gG,YAchB,SAASy4D,KACP,IAAI7vK,EAASyjK,GAAO5G,UAAYA,GAEhC,OADA78J,EAASA,IAAW68J,GAAWqR,GAAeluK,EACvClQ,UAAU7B,OAAS+R,EAAOlQ,UAAU,GAAIA,UAAU,IAAMkQ,EAWjE,SAASspK,GAAWl0K,EAAK1E,GACvB,IAAI02C,EAAOhyC,EAAI4vK,SACf,OA+XF,SAAmBl9K,GACjB,IAAIwE,SAAcxE,EAClB,MAAgB,UAARwE,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVxE,EACU,OAAVA,EAnYE+xL,CAAUnpL,GACb02C,EAAmB,iBAAP12C,EAAkB,SAAW,QACzC02C,EAAKhyC,IAUX,SAASy5K,GAAat+K,GAIpB,IAHA,IAAIyP,EAAS9R,GAAKqC,GACdtC,EAAS+R,EAAO/R,OAEbA,KAAU,CACf,IAAIyC,EAAMsP,EAAO/R,GACbnG,EAAQyI,EAAOG,GAEnBsP,EAAO/R,GAAU,CAACyC,EAAK5I,EAAOknL,GAAmBlnL,IAEnD,OAAOkY,EAWT,SAAS2hK,GAAUpxK,EAAQG,GACzB,IAAI5I,EAlxJR,SAAkByI,EAAQG,GACxB,OAAiB,MAAVH,EAAiBrI,EAAYqI,EAAOG,GAixJ7BopL,CAASvpL,EAAQG,GAC7B,OAAOu9K,GAAanmL,GAASA,EAAQI,EAqCvC,IAAI6/K,GAAc9F,GAA+B,SAAS1xK,GACxD,OAAc,MAAVA,EACK,IAETA,EAAS/F,GAAO+F,GACT0sK,GAAYgF,GAAiB1xK,IAAS,SAASg4K,GACpD,OAAOh1K,GAAqBnG,KAAKmD,EAAQg4K,QANRwR,GAiBjCpS,GAAgB1F,GAA+B,SAAS1xK,GAE1D,IADA,IAAIyP,EAAS,GACNzP,GACLslE,GAAU71D,EAAQ+nK,GAAWx3K,IAC7BA,EAAS6wK,GAAa7wK,GAExB,OAAOyP,GAN8B+5K,GAgBnCxS,GAASwD,GA2Eb,SAASiP,GAAQzpL,EAAQ4lH,EAAM8jE,GAO7B,IAJA,IAAI1xL,GAAS,EACT0F,GAHJkoH,EAAOu0D,GAASv0D,EAAM5lH,IAGJtC,OACd+R,GAAS,IAEJzX,EAAQ0F,GAAQ,CACvB,IAAIyC,EAAMi6K,GAAMx0D,EAAK5tH,IACrB,KAAMyX,EAAmB,MAAVzP,GAAkB0pL,EAAQ1pL,EAAQG,IAC/C,MAEFH,EAASA,EAAOG,GAElB,OAAIsP,KAAYzX,GAAS0F,EAChB+R,KAET/R,EAAmB,MAAVsC,EAAiB,EAAIA,EAAOtC,SAClBisL,GAASjsL,IAAWw3K,GAAQ/0K,EAAKzC,KACjDH,GAAQyC,IAAW80K,GAAY90K,IA6BpC,SAASm3K,GAAgBn3K,GACvB,MAAqC,mBAAtBA,EAAO7F,aAA8B6jL,GAAYh+K,GAE5D,GADAuzK,GAAW1C,GAAa7wK,IA8E9B,SAAS45K,GAAcriL,GACrB,OAAOgG,GAAQhG,IAAUu9K,GAAYv9K,OAChCw5K,IAAoBx5K,GAASA,EAAMw5K,KAW1C,SAASmE,GAAQ39K,EAAOmG,GACtB,IAAI3B,SAAcxE,EAGlB,SAFAmG,EAAmB,MAAVA,EAAiBymK,EAAmBzmK,KAGlC,UAAR3B,GACU,UAARA,GAAoBgsK,GAASnxH,KAAKr/C,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQmG,EAajD,SAASknL,GAAertL,EAAOS,EAAOgI,GACpC,IAAKwzK,GAASxzK,GACZ,OAAO,EAET,IAAIjE,SAAc/D,EAClB,SAAY,UAAR+D,EACKsB,GAAY2C,IAAWk1K,GAAQl9K,EAAOgI,EAAOtC,QACrC,UAAR3B,GAAoB/D,KAASgI,IAE7Bq9B,GAAGr9B,EAAOhI,GAAQT,GAa7B,SAASinL,GAAMjnL,EAAOyI,GACpB,GAAIzC,GAAQhG,GACV,OAAO,EAET,IAAIwE,SAAcxE,EAClB,QAAY,UAARwE,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAATxE,IAAiBiiL,GAASjiL,MAGvBsvK,GAAcjwH,KAAKr/C,KAAWqvK,GAAahwH,KAAKr/C,IAC1C,MAAVyI,GAAkBzI,KAAS0C,GAAO+F,IAyBvC,SAAS6lL,GAAW9/J,GAClB,IAAI6/J,EAAWD,GAAY5/J,GACvBvJ,EAAQ02J,GAAO0S,GAEnB,GAAoB,mBAATppK,KAAyBopK,KAAYxS,GAAYp5K,WAC1D,OAAO,EAET,GAAI+rB,IAASvJ,EACX,OAAO,EAET,IAAIq6B,EAAOC,GAAQt6B,GACnB,QAASq6B,GAAQ9wB,IAAS8wB,EAAK,IA7S5By7H,IAAY0E,GAAO,IAAI1E,GAAS,IAAIsX,YAAY,MAAQpkB,GACxD/2J,IAAOuoK,GAAO,IAAIvoK,KAAQq2J,GAC1BhqH,IAAWk8H,GAAOl8H,GAAQC,YAAckqH,GACxCvqK,IAAOs8K,GAAO,IAAIt8K,KAAQyqK,GAC1BjhK,IAAW8yK,GAAO,IAAI9yK,KAAYohK,KACrC0R,GAAS,SAASz/K,GAChB,IAAIkY,EAAS+qK,GAAWjjL,GACpBmgL,EAAOjoK,GAAUu1J,EAAYztK,EAAM4C,YAAcxC,EACjDkyL,EAAanS,EAAOv6K,GAASu6K,GAAQ,GAEzC,GAAImS,EACF,OAAQA,GACN,KAAKnX,GAAoB,OAAOlN,EAChC,KAAKmN,GAAe,OAAO7N,EAC3B,KAAK8N,GAAmB,OAAO3N,EAC/B,KAAK4N,GAAe,OAAO1N,EAC3B,KAAK2N,GAAmB,OAAOxN,EAGnC,OAAO71J,IA+SX,IAAIq6K,GAAa5Z,GAAa+J,GAAa8P,GAS3C,SAAS/L,GAAYzmL,GACnB,IAAImgL,EAAOngL,GAASA,EAAM4C,YAG1B,OAAO5C,KAFqB,mBAARmgL,GAAsBA,EAAK19K,WAAci2K,IAa/D,SAASwO,GAAmBlnL,GAC1B,OAAOA,IAAUA,IAAUi8K,GAASj8K,GAYtC,SAASgnL,GAAwBp+K,EAAKq9K,GACpC,OAAO,SAASx9K,GACd,OAAc,MAAVA,IAGGA,EAAOG,KAASq9K,IACpBA,IAAa7lL,GAAcwI,KAAOlG,GAAO+F,MAsIhD,SAASygL,GAAS16J,EAAMnK,EAAOs8G,GAE7B,OADAt8G,EAAQo2J,GAAUp2J,IAAUjkB,EAAaouB,EAAKroB,OAAS,EAAKke,EAAO,GAC5D,WAML,IALA,IAAIiL,EAAOtnB,UACPvH,GAAS,EACT0F,EAASs0K,GAAUnrJ,EAAKnpB,OAASke,EAAO,GACxClc,EAAQpC,EAAMI,KAET1F,EAAQ0F,GACfgC,EAAM1H,GAAS6uB,EAAKjL,EAAQ5jB,GAE9BA,GAAS,EAET,IADA,IAAIgyL,EAAY1sL,EAAMse,EAAQ,KACrB5jB,EAAQ4jB,GACfouK,EAAUhyL,GAAS6uB,EAAK7uB,GAG1B,OADAgyL,EAAUpuK,GAASs8G,EAAUx4H,GACtBoE,GAAMiiB,EAAMlqB,KAAMmuL,IAY7B,SAASzxI,GAAOv4C,EAAQ4lH,GACtB,OAAOA,EAAKloH,OAAS,EAAIsC,EAASk6K,GAAQl6K,EAAQghL,GAAUp7D,EAAM,GAAI,IAaxE,SAASihE,GAAQnnL,EAAOygL,GAKtB,IAJA,IAAI+I,EAAYxpL,EAAMhC,OAClBA,EAASu0K,GAAUkO,EAAQziL,OAAQwrL,GACnCe,EAAW1U,GAAU71K,GAElBhC,KAAU,CACf,IAAI1F,EAAQmoL,EAAQziL,GACpBgC,EAAMhC,GAAUw3K,GAAQl9K,EAAOkxL,GAAae,EAASjyL,GAASL,EAEhE,OAAO+H,EAWT,SAASm/K,GAAQ7+K,EAAQG,GACvB,IAAY,gBAARA,GAAgD,oBAAhBH,EAAOG,KAIhC,aAAPA,EAIJ,OAAOH,EAAOG,GAiBhB,IAAI4nL,GAAUmC,GAASrJ,IAUnBnsI,GAAa68H,IAAiB,SAASxrJ,EAAMsjI,GAC/C,OAAOj2I,GAAKshC,WAAW3uB,EAAMsjI,IAW3Bm3B,GAAc0J,GAASpJ,IAY3B,SAASkH,GAAgBtC,EAASyE,EAAW1T,GAC3C,IAAI3tJ,EAAUqhK,EAAY,GAC1B,OAAO3J,GAAYkF,EA1brB,SAA2B58J,EAAQshK,GACjC,IAAI1sL,EAAS0sL,EAAQ1sL,OACrB,IAAKA,EACH,OAAOorB,EAET,IAAI++H,EAAYnqJ,EAAS,EAGzB,OAFA0sL,EAAQviC,IAAcnqJ,EAAS,EAAI,KAAO,IAAM0sL,EAAQviC,GACxDuiC,EAAUA,EAAQ9sK,KAAK5f,EAAS,EAAI,KAAO,KACpCorB,EAAO2rD,QAAQ0yF,GAAe,uBAAyBijB,EAAU,UAkb5CC,CAAkBvhK,EAqHhD,SAA2BshK,EAAS3T,GAOlC,OANAlK,GAAUjI,GAAW,SAAS8jB,GAC5B,IAAI7wL,EAAQ,KAAO6wL,EAAK,GACnB3R,EAAU2R,EAAK,KAAQxb,GAAcwd,EAAS7yL,IACjD6yL,EAAQniL,KAAK1Q,MAGV6yL,EAAQ9hL,OA5HuCgiL,CAtjBxD,SAAwBxhK,GACtB,IAAIshB,EAAQthB,EAAOshB,MAAMg9H,IACzB,OAAOh9H,EAAQA,EAAM,GAAGwQ,MAAMysH,IAAkB,GAojBwBkjB,CAAezhK,GAAS2tJ,KAYlG,SAASyT,GAASnkK,GAChB,IAAI9U,EAAQ,EACRu5K,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQvY,KACRwY,EApiNK,IAoiNmBD,EAAQD,GAGpC,GADAA,EAAaC,EACTC,EAAY,GACd,KAAMz5K,GAziNE,IA0iNN,OAAO1R,UAAU,QAGnB0R,EAAQ,EAEV,OAAO8U,EAAKjiB,MAAMnM,EAAW4H,YAYjC,SAAS+1K,GAAY51K,EAAO9H,GAC1B,IAAII,GAAS,EACT0F,EAASgC,EAAMhC,OACfmqJ,EAAYnqJ,EAAS,EAGzB,IADA9F,EAAOA,IAASD,EAAY+F,EAAS9F,IAC5BI,EAAQJ,GAAM,CACrB,IAAI+yL,EAAOvV,GAAWp9K,EAAO6vJ,GACzBtwJ,EAAQmI,EAAMirL,GAElBjrL,EAAMirL,GAAQjrL,EAAM1H,GACpB0H,EAAM1H,GAAST,EAGjB,OADAmI,EAAMhC,OAAS9F,EACR8H,EAUT,IAAIujL,GAvTJ,SAAuBl9J,GACrB,IAAItW,EAAS0+B,GAAQpoB,GAAM,SAAS5lB,GAIlC,OAh0MiB,MA6zMbvB,EAAMhH,MACRgH,EAAMmQ,QAED5O,KAGLvB,EAAQ6Q,EAAO7Q,MACnB,OAAO6Q,EA8SUm7K,EAAc,SAASxoL,GACxC,IAAIqN,EAAS,GAOb,OAN6B,KAAzBrN,EAAO4B,WAAW,IACpByL,EAAOxH,KAAK,IAEd7F,EAAOqyE,QAAQqyF,IAAY,SAAS18H,EAAOisI,EAAQwU,EAAOC,GACxDr7K,EAAOxH,KAAK4iL,EAAQC,EAAUr2G,QAAQ+yF,GAAc,MAAS6O,GAAUjsI,MAElE36B,KAUT,SAAS2qK,GAAM7iL,GACb,GAAoB,iBAATA,GAAqBiiL,GAASjiL,GACvC,OAAOA,EAET,IAAIkY,EAAUlY,EAAQ,GACtB,MAAkB,KAAVkY,GAAkB,EAAIlY,IAAU,IAAa,KAAOkY,EAU9D,SAAStS,GAAS4oB,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOoqJ,GAAatzK,KAAKkpB,GACzB,MAAO9hB,IACT,IACE,OAAQ8hB,EAAO,GACf,MAAO9hB,KAEX,MAAO,GA4BT,SAASqvK,GAAaoS,GACpB,GAAIA,aAAmBtS,GACrB,OAAOsS,EAAQrvI,QAEjB,IAAI5mC,EAAS,IAAI4jK,GAAcqS,EAAQ/R,YAAa+R,EAAQ7R,WAI5D,OAHApkK,EAAOmkK,YAAc2B,GAAUmQ,EAAQ9R,aACvCnkK,EAAOqkK,UAAa4R,EAAQ5R,UAC5BrkK,EAAOskK,WAAa2R,EAAQ3R,WACrBtkK,EAsIT,IAAIs7K,GAAaxK,IAAS,SAAS7gL,EAAOsH,GACxC,OAAO+3K,GAAkBr/K,GACrB84K,GAAe94K,EAAOg6K,GAAY1yK,EAAQ,EAAG+3K,IAAmB,IAChE,MA6BFiM,GAAezK,IAAS,SAAS7gL,EAAOsH,GAC1C,IAAIslK,EAAWzsJ,GAAK7Y,GAIpB,OAHI+3K,GAAkBzS,KACpBA,EAAW30K,GAENonL,GAAkBr/K,GACrB84K,GAAe94K,EAAOg6K,GAAY1yK,EAAQ,EAAG+3K,IAAmB,GAAOO,GAAYhT,EAAU,IAC7F,MA0BF2e,GAAiB1K,IAAS,SAAS7gL,EAAOsH,GAC5C,IAAIoB,EAAayX,GAAK7Y,GAItB,OAHI+3K,GAAkB32K,KACpBA,EAAazQ,GAERonL,GAAkBr/K,GACrB84K,GAAe94K,EAAOg6K,GAAY1yK,EAAQ,EAAG+3K,IAAmB,GAAOpnL,EAAWyQ,GAClF,MAsON,SAASyZ,GAAUniB,EAAOuG,EAAWwnK,GACnC,IAAI/vK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI1F,EAAqB,MAAby1K,EAAoB,EAAI0a,GAAU1a,GAI9C,OAHIz1K,EAAQ,IACVA,EAAQg6K,GAAUt0K,EAAS1F,EAAO,IAE7Bw1K,GAAc9tK,EAAO4/K,GAAYr5K,EAAW,GAAIjO,GAsCzD,SAASiqB,GAAcviB,EAAOuG,EAAWwnK,GACvC,IAAI/vK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI1F,EAAQ0F,EAAS,EAOrB,OANI+vK,IAAc91K,IAChBK,EAAQmwL,GAAU1a,GAClBz1K,EAAQy1K,EAAY,EAChBuE,GAAUt0K,EAAS1F,EAAO,GAC1Bi6K,GAAUj6K,EAAO0F,EAAS,IAEzB8vK,GAAc9tK,EAAO4/K,GAAYr5K,EAAW,GAAIjO,GAAO,GAiBhE,SAASuP,GAAQ7H,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMhC,QACvBg8K,GAAYh6K,EAAO,GAAK,GAgG1C,SAASmZ,GAAKnZ,GACZ,OAAQA,GAASA,EAAMhC,OAAUgC,EAAM,GAAK/H,EA0E9C,IAAIuzL,GAAe3K,IAAS,SAAStF,GACnC,IAAI//J,EAAS6xJ,GAASkO,EAAQ8H,IAC9B,OAAQ7nK,EAAOxd,QAAUwd,EAAO,KAAO+/J,EAAO,GAC1CD,GAAiB9/J,GACjB,MA0BFiwK,GAAiB5K,IAAS,SAAStF,GACrC,IAAI3O,EAAWzsJ,GAAKo7J,GAChB//J,EAAS6xJ,GAASkO,EAAQ8H,IAO9B,OALIzW,IAAazsJ,GAAK3E,GACpBoxJ,EAAW30K,EAEXujB,EAAOhT,MAEDgT,EAAOxd,QAAUwd,EAAO,KAAO+/J,EAAO,GAC1CD,GAAiB9/J,EAAQokK,GAAYhT,EAAU,IAC/C,MAwBF8e,GAAmB7K,IAAS,SAAStF,GACvC,IAAI7yK,EAAayX,GAAKo7J,GAClB//J,EAAS6xJ,GAASkO,EAAQ8H,IAM9B,OAJA36K,EAAkC,mBAAdA,EAA2BA,EAAazQ,IAE1DujB,EAAOhT,MAEDgT,EAAOxd,QAAUwd,EAAO,KAAO+/J,EAAO,GAC1CD,GAAiB9/J,EAAQvjB,EAAWyQ,GACpC,MAoCN,SAASyX,GAAKngB,GACZ,IAAIhC,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAOA,EAASgC,EAAMhC,EAAS,GAAK/F,EAuFtC,IAAI0zL,GAAO9K,GAAS+K,IAsBpB,SAASA,GAAQ5rL,EAAOsH,GACtB,OAAQtH,GAASA,EAAMhC,QAAUsJ,GAAUA,EAAOtJ,OAC9CuiL,GAAYvgL,EAAOsH,GACnBtH,EAqFN,IAAI6rL,GAAShG,IAAS,SAAS7lL,EAAOygL,GACpC,IAAIziL,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnC+R,EAAS0mK,GAAOz2K,EAAOygL,GAM3B,OAJAD,GAAWxgL,EAAOqtK,GAASoT,GAAS,SAASnoL,GAC3C,OAAOk9K,GAAQl9K,EAAO0F,IAAW1F,EAAQA,KACxCsQ,KAAKu3K,KAEDpwK,KA2ET,SAAS9Q,GAAQe,GACf,OAAgB,MAATA,EAAgBA,EAAQ2yK,GAAcx1K,KAAK6C,GAkapD,IAAIob,GAAQylK,IAAS,SAAStF,GAC5B,OAAOmH,GAAS1I,GAAYuB,EAAQ,EAAG8D,IAAmB,OA0BxDyM,GAAUjL,IAAS,SAAStF,GAC9B,IAAI3O,EAAWzsJ,GAAKo7J,GAIpB,OAHI8D,GAAkBzS,KACpBA,EAAW30K,GAENyqL,GAAS1I,GAAYuB,EAAQ,EAAG8D,IAAmB,GAAOO,GAAYhT,EAAU,OAwBrFmf,GAAYlL,IAAS,SAAStF,GAChC,IAAI7yK,EAAayX,GAAKo7J,GAEtB,OADA7yK,EAAkC,mBAAdA,EAA2BA,EAAazQ,EACrDyqL,GAAS1I,GAAYuB,EAAQ,EAAG8D,IAAmB,GAAOpnL,EAAWyQ,MAgG9E,SAASsjL,GAAMhsL,GACb,IAAMA,IAASA,EAAMhC,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANAgC,EAAQgtK,GAAYhtK,GAAO,SAASy8I,GAClC,GAAI4iC,GAAkB5iC,GAEpB,OADAz+I,EAASs0K,GAAU71B,EAAMz+I,OAAQA,IAC1B,KAGJwwK,GAAUxwK,GAAQ,SAAS1F,GAChC,OAAO+0K,GAASrtK,EAAO2tK,GAAar1K,OAyBxC,SAAS2zL,GAAUjsL,EAAO4sK,GACxB,IAAM5sK,IAASA,EAAMhC,OACnB,MAAO,GAET,IAAI+R,EAASi8K,GAAMhsL,GACnB,OAAgB,MAAZ4sK,EACK78J,EAEFs9J,GAASt9J,GAAQ,SAAS0sI,GAC/B,OAAOr4I,GAAMwoK,EAAU30K,EAAWwkJ,MAwBtC,IAAIyvC,GAAUrL,IAAS,SAAS7gL,EAAOsH,GACrC,OAAO+3K,GAAkBr/K,GACrB84K,GAAe94K,EAAOsH,GACtB,MAqBF6kL,GAAMtL,IAAS,SAAStF,GAC1B,OAAO0H,GAAQjW,GAAYuO,EAAQ8D,QA0BjC+M,GAAQvL,IAAS,SAAStF,GAC5B,IAAI3O,EAAWzsJ,GAAKo7J,GAIpB,OAHI8D,GAAkBzS,KACpBA,EAAW30K,GAENgrL,GAAQjW,GAAYuO,EAAQ8D,IAAoBO,GAAYhT,EAAU,OAwB3Eyf,GAAUxL,IAAS,SAAStF,GAC9B,IAAI7yK,EAAayX,GAAKo7J,GAEtB,OADA7yK,EAAkC,mBAAdA,EAA2BA,EAAazQ,EACrDgrL,GAAQjW,GAAYuO,EAAQ8D,IAAoBpnL,EAAWyQ,MAmBhEoa,GAAM+9J,GAASmL,IA6DnB,IAAIhpK,GAAU69J,IAAS,SAAStF,GAC9B,IAAIv9K,EAASu9K,EAAOv9K,OAChB4uK,EAAW5uK,EAAS,EAAIu9K,EAAOv9K,EAAS,GAAK/F,EAGjD,OADA20K,EAA8B,mBAAZA,GAA0B2O,EAAO/yK,MAAOokK,GAAY30K,EAC/Dg0L,GAAU1Q,EAAQ3O,MAkC3B,SAAS9qJ,GAAMjqB,GACb,IAAIkY,EAASyjK,GAAO37K,GAEpB,OADAkY,EAAOokK,WAAY,EACZpkK,EAsDT,SAASg2K,GAAKluL,EAAOy0L,GACnB,OAAOA,EAAYz0L,GAmBrB,IAAI00L,GAAY1G,IAAS,SAASnP,GAChC,IAAI14K,EAAS04K,EAAM14K,OACfke,EAAQle,EAAS04K,EAAM,GAAK,EAC5B7+K,EAAQsE,KAAK83K,YACbqY,EAAc,SAAShsL,GAAU,OAAOm2K,GAAOn2K,EAAQo2K,IAE3D,QAAI14K,EAAS,GAAK7B,KAAK+3K,YAAYl2K,SAC7BnG,aAAiB67K,IAAiB8B,GAAQt5J,KAGhDrkB,EAAQA,EAAMoU,MAAMiQ,GAAQA,GAASle,EAAS,EAAI,KAC5Ck2K,YAAY3rK,KAAK,CACrB,KAAQw9K,GACR,KAAQ,CAACuG,GACT,QAAWr0L,IAEN,IAAI07K,GAAc97K,EAAOsE,KAAKg4K,WAAW4R,MAAK,SAAS/lL,GAI5D,OAHIhC,IAAWgC,EAAMhC,QACnBgC,EAAMuI,KAAKtQ,GAEN+H,MAZA7D,KAAK4pL,KAAKuG,MA+PrB,IAAI3tK,GAAUkmK,IAAiB,SAAS90K,EAAQlY,EAAO4I,GACjD/C,GAAeP,KAAK4S,EAAQtP,KAC5BsP,EAAOtP,GAETw1K,GAAgBlmK,EAAQtP,EAAK,MAuIjC,IAAIqd,GAAO4nK,GAAWvjK,IAqBlB/C,GAAWsmK,GAAWnjK,IA2G1B,SAAS1Z,GAAQjI,EAAYgsK,GAE3B,OADW/uK,GAAQ+C,GAAcisK,GAAYyJ,IACjC11K,EAAYg/K,GAAYhT,EAAU,IAuBhD,SAAS4f,GAAa5rL,EAAYgsK,GAEhC,OADW/uK,GAAQ+C,GAAcksK,GAAiB4M,IACtC94K,EAAYg/K,GAAYhT,EAAU,IA0BhD,IAAIhtJ,GAAUilK,IAAiB,SAAS90K,EAAQlY,EAAO4I,GACjD/C,GAAeP,KAAK4S,EAAQtP,GAC9BsP,EAAOtP,GAAK8H,KAAK1Q,GAEjBo+K,GAAgBlmK,EAAQtP,EAAK,CAAC5I,OAsElC,IAAI40L,GAAY5L,IAAS,SAASjgL,EAAYslH,EAAM/+F,GAClD,IAAI7uB,GAAS,EACTi/K,EAAwB,mBAARrxD,EAChBn2G,EAASpS,GAAYiD,GAAchD,EAAMgD,EAAW5C,QAAU,GAKlE,OAHAs4K,GAAS11K,GAAY,SAAS/I,GAC5BkY,IAASzX,GAASi/K,EAASnzK,GAAM8hH,EAAMruH,EAAOsvB,GAAQ00J,GAAWhkL,EAAOquH,EAAM/+F,MAEzEpX,KA+BL28K,GAAQ7H,IAAiB,SAAS90K,EAAQlY,EAAO4I,GACnDw1K,GAAgBlmK,EAAQtP,EAAK5I,MA6C/B,SAASsN,GAAIvE,EAAYgsK,GAEvB,OADW/uK,GAAQ+C,GAAcysK,GAAWsR,IAChC/9K,EAAYg/K,GAAYhT,EAAU,IAkFhD,IAAI+f,GAAY9H,IAAiB,SAAS90K,EAAQlY,EAAO4I,GACvDsP,EAAOtP,EAAM,EAAI,GAAG8H,KAAK1Q,MACxB,WAAa,MAAO,CAAC,GAAI,OAmS5B,IAAI2X,GAASqxK,IAAS,SAASjgL,EAAY8+K,GACzC,GAAkB,MAAd9+K,EACF,MAAO,GAET,IAAI5C,EAAS0hL,EAAU1hL,OAMvB,OALIA,EAAS,GAAKknL,GAAetkL,EAAY8+K,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACH1hL,EAAS,GAAKknL,GAAexF,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAY7+K,EAAYo5K,GAAY0F,EAAW,GAAI,OAqBxDzjI,GAAM21H,IAAU,WAClB,OAAOl+J,GAAKwW,KAAK+xB,OA0DnB,SAASwqI,GAAIpgK,EAAM9jB,EAAG0iL,GAGpB,OAFA1iL,EAAI0iL,EAAQhtL,EAAYsK,EACxBA,EAAK8jB,GAAa,MAAL9jB,EAAa8jB,EAAKroB,OAASuE,EACjCsmL,GAAWxiK,EAAMi+I,EAAersK,EAAWA,EAAWA,EAAWA,EAAWsK,GAoBrF,SAASqqL,GAAOrqL,EAAG8jB,GACjB,IAAItW,EACJ,GAAmB,mBAARsW,EACT,MAAM,IAAI7nB,GAAUwlK,GAGtB,OADAzhK,EAAIkmL,GAAUlmL,GACP,WAOL,QANMA,EAAI,IACRwN,EAASsW,EAAKjiB,MAAMjI,KAAM0D,YAExB0C,GAAK,IACP8jB,EAAOpuB,GAEF8X,GAuCX,IAAIkO,GAAO4iK,IAAS,SAASx6J,EAAM6rD,EAAS4xG,GAC1C,IAAI/M,EAv4Ta,EAw4TjB,GAAI+M,EAAS9lL,OAAQ,CACnB,IAAI+lL,EAAUrU,GAAeoU,EAAUiD,GAAU9oK,KACjD84J,GAAW3S,EAEb,OAAOykB,GAAWxiK,EAAM0wJ,EAAS7kG,EAAS4xG,EAAUC,MAgDlD8I,GAAUhM,IAAS,SAASvgL,EAAQG,EAAKqjL,GAC3C,IAAI/M,EAAU+V,EACd,GAAIhJ,EAAS9lL,OAAQ,CACnB,IAAI+lL,EAAUrU,GAAeoU,EAAUiD,GAAU8F,KACjD9V,GAAW3S,EAEb,OAAOykB,GAAWpoL,EAAKs2K,EAASz2K,EAAQwjL,EAAUC,MAsJpD,SAASgJ,GAAS1mK,EAAMsjI,EAAMxhH,GAC5B,IAAI+F,EACA8+I,EACAC,EACAl9K,EACAm9K,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTlI,GAAW,EAEf,GAAmB,mBAAR/+J,EACT,MAAM,IAAI7nB,GAAUwlK,GAUtB,SAASupB,EAAWnlI,GAClB,IAAIjhC,EAAO+mB,EACPgkC,EAAU86G,EAKd,OAHA9+I,EAAW8+I,EAAW/0L,EACtBm1L,EAAiBhlI,EACjBr4C,EAASsW,EAAKjiB,MAAM8tE,EAAS/qD,GAI/B,SAASqmK,EAAYplI,GAMnB,OAJAglI,EAAiBhlI,EAEjB8kI,EAAUl4I,GAAWy4I,EAAc9jC,GAE5B0jC,EAAUE,EAAWnlI,GAAQr4C,EAatC,SAAS29K,EAAatlI,GACpB,IAAIulI,EAAoBvlI,EAAO+kI,EAM/B,OAAQA,IAAiBl1L,GAAc01L,GAAqBhkC,GACzDgkC,EAAoB,GAAOL,GANJllI,EAAOglI,GAM8BH,EAGjE,SAASQ,IACP,IAAIrlI,EAAOnM,KACX,GAAIyxI,EAAatlI,GACf,OAAOwlI,EAAaxlI,GAGtB8kI,EAAUl4I,GAAWy4I,EA3BvB,SAAuBrlI,GACrB,IAEIylI,EAAclkC,GAFMvhG,EAAO+kI,GAI/B,OAAOG,EACH/a,GAAUsb,EAAaZ,GAJD7kI,EAAOglI,IAK7BS,EAoB+BC,CAAc1lI,IAGnD,SAASwlI,EAAaxlI,GAKpB,OAJA8kI,EAAUj1L,EAINmtL,GAAYl3I,EACPq/I,EAAWnlI,IAEpBla,EAAW8+I,EAAW/0L,EACf8X,GAeT,SAASg+K,IACP,IAAI3lI,EAAOnM,KACP+xI,EAAaN,EAAatlI,GAM9B,GAJAla,EAAWruC,UACXmtL,EAAW7wL,KACXgxL,EAAe/kI,EAEX4lI,EAAY,CACd,GAAId,IAAYj1L,EACd,OAAOu1L,EAAYL,GAErB,GAAIG,EAIF,OAFA5qD,GAAawqD,GACbA,EAAUl4I,GAAWy4I,EAAc9jC,GAC5B4jC,EAAWJ,GAMtB,OAHID,IAAYj1L,IACdi1L,EAAUl4I,GAAWy4I,EAAc9jC,IAE9B55I,EAIT,OA3GA45I,EAAOvtC,GAASutC,IAAS,EACrBmqB,GAAS3rI,KACXklJ,IAAYllJ,EAAQklJ,QAEpBJ,GADAK,EAAS,YAAanlJ,GACHmqI,GAAUl2D,GAASj0E,EAAQ8kJ,UAAY,EAAGtjC,GAAQsjC,EACrE7H,EAAW,aAAcj9I,IAAYA,EAAQi9I,SAAWA,GAoG1D2I,EAAU/lK,OApCV,WACMklK,IAAYj1L,GACdyqI,GAAawqD,GAEfE,EAAiB,EACjBl/I,EAAWi/I,EAAeH,EAAWE,EAAUj1L,GAgCjD81L,EAAUE,MA7BV,WACE,OAAOf,IAAYj1L,EAAY8X,EAAS69K,EAAa3xI,OA6BhD8xI,EAqBT,IAAI/vC,GAAQ6iC,IAAS,SAASx6J,EAAMc,GAClC,OAAO0xJ,GAAUxyJ,EAAM,EAAGc,MAsBxB25E,GAAQ+/E,IAAS,SAASx6J,EAAMsjI,EAAMxiI,GACxC,OAAO0xJ,GAAUxyJ,EAAM+1F,GAASutC,IAAS,EAAGxiI,MAqE9C,SAASsnB,GAAQpoB,EAAM6nK,GACrB,GAAmB,mBAAR7nK,GAAmC,MAAZ6nK,GAAuC,mBAAZA,EAC3D,MAAM,IAAI1vL,GAAUwlK,GAEtB,IAAImqB,EAAW,SAAXA,IACF,IAAIhnK,EAAOtnB,UACPY,EAAMytL,EAAWA,EAAS9pL,MAAMjI,KAAMgrB,GAAQA,EAAK,GACnDjoB,EAAQivL,EAASjvL,MAErB,GAAIA,EAAMkB,IAAIK,GACZ,OAAOvB,EAAMgB,IAAIO,GAEnB,IAAIsP,EAASsW,EAAKjiB,MAAMjI,KAAMgrB,GAE9B,OADAgnK,EAASjvL,MAAQA,EAAM2E,IAAIpD,EAAKsP,IAAW7Q,EACpC6Q,GAGT,OADAo+K,EAASjvL,MAAQ,IAAKuvC,GAAQ2/I,OAASvZ,IAChCsZ,EA0BT,SAASE,GAAO9nL,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAI/H,GAAUwlK,GAEtB,OAAO,WACL,IAAI78I,EAAOtnB,UACX,OAAQsnB,EAAKnpB,QACX,KAAK,EAAG,OAAQuI,EAAUpJ,KAAKhB,MAC/B,KAAK,EAAG,OAAQoK,EAAUpJ,KAAKhB,KAAMgrB,EAAK,IAC1C,KAAK,EAAG,OAAQ5gB,EAAUpJ,KAAKhB,KAAMgrB,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQ5gB,EAAUpJ,KAAKhB,KAAMgrB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQ5gB,EAAUnC,MAAMjI,KAAMgrB,IAlClCsnB,GAAQ2/I,MAAQvZ,GA2FhB,IAAIyZ,GAAW9K,IAAS,SAASn9J,EAAMkoK,GAKrC,IAAIC,GAJJD,EAAmC,GAArBA,EAAWvwL,QAAeH,GAAQ0wL,EAAW,IACvDlhB,GAASkhB,EAAW,GAAI5f,GAAUiR,OAClCvS,GAAS2M,GAAYuU,EAAY,GAAI5f,GAAUiR,QAEtB5hL,OAC7B,OAAO6iL,IAAS,SAAS15J,GAIvB,IAHA,IAAI7uB,GAAS,EACT0F,EAASu0K,GAAUprJ,EAAKnpB,OAAQwwL,KAE3Bl2L,EAAQ0F,GACfmpB,EAAK7uB,GAASi2L,EAAWj2L,GAAO6E,KAAKhB,KAAMgrB,EAAK7uB,IAElD,OAAO8L,GAAMiiB,EAAMlqB,KAAMgrB,SAqCzBsnK,GAAU5N,IAAS,SAASx6J,EAAMy9J,GACpC,IAAIC,EAAUrU,GAAeoU,EAAUiD,GAAU0H,KACjD,OAAO5F,GAAWxiK,EAAM+9I,EAAmBnsK,EAAW6rL,EAAUC,MAmC9D2K,GAAe7N,IAAS,SAASx6J,EAAMy9J,GACzC,IAAIC,EAAUrU,GAAeoU,EAAUiD,GAAU2H,KACjD,OAAO7F,GAAWxiK,EAAMg+I,EAAyBpsK,EAAW6rL,EAAUC,MAyBpE4K,GAAQ9I,IAAS,SAASx/J,EAAMo6J,GAClC,OAAOoI,GAAWxiK,EAAMk+I,EAAiBtsK,EAAWA,EAAWA,EAAWwoL,MAia5E,SAAS9iJ,GAAG9lC,EAAOilB,GACjB,OAAOjlB,IAAUilB,GAAUjlB,IAAUA,GAASilB,IAAUA,EA0B1D,IAAI8xK,GAAK3G,GAA0B9M,IAyB/B0T,GAAM5G,IAA0B,SAASpwL,EAAOilB,GAClD,OAAOjlB,GAASilB,KAqBds4J,GAAc0G,GAAgB,WAAa,OAAOj8K,UAApB,IAAsCi8K,GAAkB,SAASjkL,GACjG,OAAO47K,GAAa57K,IAAU6F,GAAeP,KAAKtF,EAAO,YACtDyL,GAAqBnG,KAAKtF,EAAO,WA0BlCgG,GAAUD,EAAMC,QAmBhBouK,GAAgBD,GAAoB2C,GAAU3C,IA75PlD,SAA2Bn0K,GACzB,OAAO47K,GAAa57K,IAAUijL,GAAWjjL,IAAUguK,GAu7PrD,SAASloK,GAAY9F,GACnB,OAAgB,MAATA,GAAiBoyL,GAASpyL,EAAMmG,UAAYu8K,GAAW1iL,GA4BhE,SAASwnL,GAAkBxnL,GACzB,OAAO47K,GAAa57K,IAAU8F,GAAY9F,GA0C5C,IAAIq6K,GAAWD,IAAkBoY,GAmB7Ble,GAASD,GAAayC,GAAUzC,IAxgQpC,SAAoBr0K,GAClB,OAAO47K,GAAa57K,IAAUijL,GAAWjjL,IAAUmtK,GA+qQrD,SAAS8pB,GAAQj3L,GACf,IAAK47K,GAAa57K,GAChB,OAAO,EAET,IAAIw/K,EAAMyD,GAAWjjL,GACrB,OAAOw/K,GAAOpS,GA9yWF,yBA8yWcoS,GACC,iBAAjBx/K,EAAM21C,SAA4C,iBAAd31C,EAAM8S,OAAqBqkE,GAAcn3E,GAkDzF,SAAS0iL,GAAW1iL,GAClB,IAAKi8K,GAASj8K,GACZ,OAAO,EAIT,IAAIw/K,EAAMyD,GAAWjjL,GACrB,OAAOw/K,GAAOnS,GAAWmS,GAAOlS,GA32WrB,0BA22W+BkS,GA/1W/B,kBA+1WkDA,EA6B/D,SAASt5K,GAAUlG,GACjB,MAAuB,iBAATA,GAAqBA,GAAS4wL,GAAU5wL,GA6BxD,SAASoyL,GAASpyL,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS4sK,EA4B7C,SAASqP,GAASj8K,GAChB,IAAIwE,SAAcxE,EAClB,OAAgB,MAATA,IAA0B,UAARwE,GAA4B,YAARA,GA2B/C,SAASo3K,GAAa57K,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAoBjC,IAAIoJ,GAAQmrK,GAAYuC,GAAUvC,IA5xQlC,SAAmBv0K,GACjB,OAAO47K,GAAa57K,IAAUy/K,GAAOz/K,IAAUutK,GA6+QjD,SAAS/oD,GAASxkH,GAChB,MAAuB,iBAATA,GACX47K,GAAa57K,IAAUijL,GAAWjjL,IAAUwtK,EA+BjD,SAASr2F,GAAcn3E,GACrB,IAAK47K,GAAa57K,IAAUijL,GAAWjjL,IAAUytK,EAC/C,OAAO,EAET,IAAIr2F,EAAQkiG,GAAat5K,GACzB,GAAc,OAAVo3E,EACF,OAAO,EAET,IAAI+oG,EAAOt6K,GAAeP,KAAK8xE,EAAO,gBAAkBA,EAAMx0E,YAC9D,MAAsB,mBAARu9K,GAAsBA,aAAgBA,GAClDvH,GAAatzK,KAAK66K,IAASlH,GAoB/B,IAAIxE,GAAWD,GAAesC,GAAUtC,IA59QxC,SAAsBx0K,GACpB,OAAO47K,GAAa57K,IAAUijL,GAAWjjL,IAAU2tK,GA6gRrD,IAAI7rJ,GAAQ4yJ,GAAYoC,GAAUpC,IAngRlC,SAAmB10K,GACjB,OAAO47K,GAAa57K,IAAUy/K,GAAOz/K,IAAU4tK,GAqhRjD,SAASspB,GAASl3L,GAChB,MAAuB,iBAATA,IACVgG,GAAQhG,IAAU47K,GAAa57K,IAAUijL,GAAWjjL,IAAU6tK,EAoBpE,SAASoU,GAASjiL,GAChB,MAAuB,iBAATA,GACX47K,GAAa57K,IAAUijL,GAAWjjL,IAAU8tK,EAoBjD,IAAI8G,GAAeD,GAAmBmC,GAAUnC,IAvjRhD,SAA0B30K,GACxB,OAAO47K,GAAa57K,IAClBoyL,GAASpyL,EAAMmG,WAAa+sK,GAAe+P,GAAWjjL,KA6oR1D,IAAIm3L,GAAK/G,GAA0BvJ,IAyB/BuQ,GAAMhH,IAA0B,SAASpwL,EAAOilB,GAClD,OAAOjlB,GAASilB,KA0BlB,SAAS/d,GAAQlH,GACf,IAAKA,EACH,MAAO,GAET,GAAI8F,GAAY9F,GACd,OAAOk3L,GAASl3L,GAASk4K,GAAcl4K,GAASg+K,GAAUh+K,GAE5D,GAAI05K,IAAe15K,EAAM05K,IACvB,OAv8VN,SAAyBz1K,GAIvB,IAHA,IAAIq7C,EACApnC,EAAS,KAEJonC,EAAOr7C,EAASI,QAAQO,MAC/BsT,EAAOxH,KAAK4uC,EAAKt/C,OAEnB,OAAOkY,EAg8VIm/K,CAAgBr3L,EAAM05K,OAE/B,IAAI8F,EAAMC,GAAOz/K,GAGjB,OAFWw/K,GAAOjS,EAASoK,GAAc6H,GAAO5R,EAASkK,GAAaroK,IAE1DzP,GA0Bd,SAASkwL,GAASlwL,GAChB,OAAKA,GAGLA,EAAQukH,GAASvkH,MACH2sK,GAAY3sK,KAAU,IAxkYtB,uBAykYAA,EAAQ,GAAK,EAAI,GAGxBA,IAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,EAoCjC,SAAS4wL,GAAU5wL,GACjB,IAAIkY,EAASg4K,GAASlwL,GAClBs3L,EAAYp/K,EAAS,EAEzB,OAAOA,IAAWA,EAAUo/K,EAAYp/K,EAASo/K,EAAYp/K,EAAU,EA8BzE,SAASq/K,GAASv3L,GAChB,OAAOA,EAAQi+K,GAAU2S,GAAU5wL,GAAQ,EAAG8sK,GAAoB,EA0BpE,SAASvoD,GAASvkH,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIiiL,GAASjiL,GACX,OAAO6sK,EAET,GAAIoP,GAASj8K,GAAQ,CACnB,IAAIilB,EAAgC,mBAAjBjlB,EAAM+J,QAAwB/J,EAAM+J,UAAY/J,EACnEA,EAAQi8K,GAASh3J,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATjlB,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQ42K,GAAS52K,GACjB,IAAIw3L,EAAWnnB,GAAWhxH,KAAKr/C,GAC/B,OAAQw3L,GAAYjnB,GAAUlxH,KAAKr/C,GAC/BszK,GAAatzK,EAAMoU,MAAM,GAAIojL,EAAW,EAAI,GAC3CpnB,GAAW/wH,KAAKr/C,GAAS6sK,GAAO7sK,EA2BvC,SAASynL,GAAcznL,GACrB,OAAO2+K,GAAW3+K,EAAO+/K,GAAO//K,IAsDlC,SAASuF,GAASvF,GAChB,OAAgB,MAATA,EAAgB,GAAK4qL,GAAa5qL,GAqC3C,IAAIy/C,GAASytI,IAAe,SAASzkL,EAAQ8oB,GAC3C,GAAIk1J,GAAYl1J,IAAWzrB,GAAYyrB,GACrCotJ,GAAWptJ,EAAQnrB,GAAKmrB,GAAS9oB,QAGnC,IAAK,IAAIG,KAAO2oB,EACV1rB,GAAeP,KAAKisB,EAAQ3oB,IAC9By1K,GAAY51K,EAAQG,EAAK2oB,EAAO3oB,OAoClC6uL,GAAWvK,IAAe,SAASzkL,EAAQ8oB,GAC7CotJ,GAAWptJ,EAAQwuJ,GAAOxuJ,GAAS9oB,MAgCjCivL,GAAexK,IAAe,SAASzkL,EAAQ8oB,EAAQ61J,EAAUjI,GACnER,GAAWptJ,EAAQwuJ,GAAOxuJ,GAAS9oB,EAAQ02K,MA+BzCwY,GAAazK,IAAe,SAASzkL,EAAQ8oB,EAAQ61J,EAAUjI,GACjER,GAAWptJ,EAAQnrB,GAAKmrB,GAAS9oB,EAAQ02K,MAoBvCyY,GAAK5J,GAASpP,IA8DlB,IAAIz9H,GAAW6nI,IAAS,SAASvgL,EAAQiN,GACvCjN,EAAS/F,GAAO+F,GAEhB,IAAIhI,GAAS,EACT0F,EAASuP,EAAQvP,OACjBinL,EAAQjnL,EAAS,EAAIuP,EAAQ,GAAKtV,EAMtC,IAJIgtL,GAASC,GAAe33K,EAAQ,GAAIA,EAAQ,GAAI03K,KAClDjnL,EAAS,KAGF1F,EAAQ0F,GAMf,IALA,IAAIorB,EAAS7b,EAAQjV,GACjB+tC,EAAQuxI,GAAOxuJ,GACfsmK,GAAc,EACdC,EAActpJ,EAAMroC,SAEf0xL,EAAaC,GAAa,CACjC,IAAIlvL,EAAM4lC,EAAMqpJ,GACZ73L,EAAQyI,EAAOG,IAEf5I,IAAUI,GACT0lC,GAAG9lC,EAAO04K,GAAY9vK,MAAU/C,GAAeP,KAAKmD,EAAQG,MAC/DH,EAAOG,GAAO2oB,EAAO3oB,IAK3B,OAAOH,KAsBLsvL,GAAe/O,IAAS,SAAS15J,GAEnC,OADAA,EAAK5e,KAAKtQ,EAAWqxL,IACdllL,GAAM0I,GAAW7U,EAAWkvB,MAgSrC,SAASjnB,GAAII,EAAQ4lH,EAAMxsE,GACzB,IAAI3pC,EAAmB,MAAVzP,EAAiBrI,EAAYuiL,GAAQl6K,EAAQ4lH,GAC1D,OAAOn2G,IAAW9X,EAAYyhD,EAAe3pC,EA4D/C,SAASmN,GAAM5c,EAAQ4lH,GACrB,OAAiB,MAAV5lH,GAAkBypL,GAAQzpL,EAAQ4lH,EAAMm1D,IAqBjD,IAAIwU,GAASzI,IAAe,SAASr3K,EAAQlY,EAAO4I,GACrC,MAAT5I,GACyB,mBAAlBA,EAAMuF,WACfvF,EAAQg5K,GAAqB1zK,KAAKtF,IAGpCkY,EAAOlY,GAAS4I,IACf2nC,GAAS4U,KA4BR8yI,GAAW1I,IAAe,SAASr3K,EAAQlY,EAAO4I,GACvC,MAAT5I,GACyB,mBAAlBA,EAAMuF,WACfvF,EAAQg5K,GAAqB1zK,KAAKtF,IAGhC6F,GAAeP,KAAK4S,EAAQlY,GAC9BkY,EAAOlY,GAAO0Q,KAAK9H,GAEnBsP,EAAOlY,GAAS,CAAC4I,KAElBm/K,IAoBCmQ,GAASlP,GAAShF,IA8BtB,SAAS59K,GAAKqC,GACZ,OAAO3C,GAAY2C,GAAU00K,GAAc10K,GAAU+9K,GAAS/9K,GA0BhE,SAASs3K,GAAOt3K,GACd,OAAO3C,GAAY2C,GAAU00K,GAAc10K,GAAQ,GAAQi+K,GAAWj+K,GAuGxE,IAAIsM,GAAQm4K,IAAe,SAASzkL,EAAQ8oB,EAAQ61J,GAClDD,GAAU1+K,EAAQ8oB,EAAQ61J,MAkCxBnyK,GAAYi4K,IAAe,SAASzkL,EAAQ8oB,EAAQ61J,EAAUjI,GAChEgI,GAAU1+K,EAAQ8oB,EAAQ61J,EAAUjI,MAuBlCgZ,GAAOnK,IAAS,SAASvlL,EAAQo2K,GACnC,IAAI3mK,EAAS,GACb,GAAc,MAAVzP,EACF,OAAOyP,EAET,IAAIknK,GAAS,EACbP,EAAQrJ,GAASqJ,GAAO,SAASxwD,GAG/B,OAFAA,EAAOu0D,GAASv0D,EAAM5lH,GACtB22K,IAAWA,EAAS/wD,EAAKloH,OAAS,GAC3BkoH,KAETswD,GAAWl2K,EAAQo4K,GAAap4K,GAASyP,GACrCknK,IACFlnK,EAAS+mK,GAAU/mK,EAAQkgL,EAAwD1G,KAGrF,IADA,IAAIvrL,EAAS04K,EAAM14K,OACZA,KACL2iL,GAAU5wK,EAAQ2mK,EAAM14K,IAE1B,OAAO+R,KA4CT,IAAIqgK,GAAOyV,IAAS,SAASvlL,EAAQo2K,GACnC,OAAiB,MAAVp2K,EAAiB,GAnmT1B,SAAkBA,EAAQo2K,GACxB,OAAO2J,GAAW//K,EAAQo2K,GAAO,SAAS7+K,EAAOquH,GAC/C,OAAOhpG,GAAM5c,EAAQ4lH,MAimTMgqE,CAAS5vL,EAAQo2K,MAqBhD,SAAS36D,GAAOz7G,EAAQiG,GACtB,GAAc,MAAVjG,EACF,MAAO,GAET,IAAI+lC,EAAQgnI,GAASqL,GAAap4K,IAAS,SAAS0+I,GAClD,MAAO,CAACA,MAGV,OADAz4I,EAAYq5K,GAAYr5K,GACjB85K,GAAW//K,EAAQ+lC,GAAO,SAASxuC,EAAOquH,GAC/C,OAAO3/G,EAAU1O,EAAOquH,EAAK,OA4IjC,IAAIiqE,GAAUxH,GAAc1qL,IA0BxBmyL,GAAYzH,GAAc/Q,IA4K9B,SAAStwK,GAAOhH,GACd,OAAiB,MAAVA,EAAiB,GAAKsuK,GAAWtuK,EAAQrC,GAAKqC,IAkNvD,IAAI+vL,GAAYhL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GAEtD,OADAg4L,EAAOA,EAAK/6I,cACLxlC,GAAUzX,EAAQqoI,GAAW2vD,GAAQA,MAkB9C,SAAS3vD,GAAWj+H,GAClB,OAAO6tL,GAAWnzL,GAASsF,GAAQ6yC,eAqBrC,SAASgwI,GAAO7iL,GAEd,OADAA,EAAStF,GAASsF,KACDA,EAAOqyE,QAAQuzF,GAAS6G,IAAcp6F,QAAQy1F,GAAa,IAsH9E,IAAIgmB,GAAYnL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GACtD,OAAOyX,GAAUzX,EAAQ,IAAM,IAAMg4L,EAAK/6I,iBAuBxCk7I,GAAYpL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GACtD,OAAOyX,GAAUzX,EAAQ,IAAM,IAAMg4L,EAAK/6I,iBAoBxCm7I,GAAavL,GAAgB,eA0NjC,IAAIwL,GAAYtL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GACtD,OAAOyX,GAAUzX,EAAQ,IAAM,IAAMg4L,EAAK/6I,iBAgE5C,IAAIq7I,GAAYvL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GACtD,OAAOyX,GAAUzX,EAAQ,IAAM,IAAMi4L,GAAWD,MAsiBlD,IAAIO,GAAYxL,IAAiB,SAASt1K,EAAQugL,EAAMh4L,GACtD,OAAOyX,GAAUzX,EAAQ,IAAM,IAAMg4L,EAAK9pD,iBAoBxC+pD,GAAapL,GAAgB,eAqBjC,SAASG,GAAM5iL,EAAQouL,EAAS7L,GAI9B,OAHAviL,EAAStF,GAASsF,IAClBouL,EAAU7L,EAAQhtL,EAAY64L,KAEd74L,EArybpB,SAAwByK,GACtB,OAAOkoK,GAAiB1zH,KAAKx0C,GAqyblBquL,CAAeruL,GA1jb5B,SAAsBA,GACpB,OAAOA,EAAOgoC,MAAMggI,KAAkB,GAyjbFsmB,CAAatuL,GAzrcnD,SAAoBA,GAClB,OAAOA,EAAOgoC,MAAMk9H,KAAgB,GAwrcuBqpB,CAAWvuL,GAE7DA,EAAOgoC,MAAMomJ,IAAY,GA2BlC,IAAII,GAAUrQ,IAAS,SAASx6J,EAAMc,GACpC,IACE,OAAO/iB,GAAMiiB,EAAMpuB,EAAWkvB,GAC9B,MAAO5iB,GACP,OAAOuqL,GAAQvqL,GAAKA,EAAI,IAAIR,EAAMQ,OA8BlC4sL,GAAUtL,IAAS,SAASvlL,EAAQ8wL,GAKtC,OAJAvkB,GAAUukB,GAAa,SAAS3wL,GAC9BA,EAAMi6K,GAAMj6K,GACZw1K,GAAgB31K,EAAQG,EAAKwd,GAAK3d,EAAOG,GAAMH,OAE1CA,KAqGT,SAAS8nC,GAASvwC,GAChB,OAAO,WACL,OAAOA,GAkDX,IAAIw5L,GAAOzL,KAuBP0L,GAAY1L,IAAW,GAkB3B,SAAS5oI,GAASnlD,GAChB,OAAOA,EA6CT,SAAS+0K,GAASvmJ,GAChB,OAAO43J,GAA4B,mBAAR53J,EAAqBA,EAAOywJ,GAAUzwJ,EAjte/C,IAwzepB,IAAIm9E,GAASq9E,IAAS,SAAS36D,EAAM/+F,GACnC,OAAO,SAAS7mB,GACd,OAAOu7K,GAAWv7K,EAAQ4lH,EAAM/+F,OA2BhCoqK,GAAW1Q,IAAS,SAASvgL,EAAQ6mB,GACvC,OAAO,SAAS++F,GACd,OAAO21D,GAAWv7K,EAAQ4lH,EAAM/+F,OAwCpC,SAAS9M,GAAM/Z,EAAQ8oB,EAAQ+e,GAC7B,IAAI9B,EAAQpoC,GAAKmrB,GACbgoK,EAAc9W,GAAclxJ,EAAQid,GAEzB,MAAX8B,GACE2rI,GAAS1qJ,KAAYgoK,EAAYpzL,SAAWqoC,EAAMroC,UACtDmqC,EAAU/e,EACVA,EAAS9oB,EACTA,EAASnE,KACTi1L,EAAc9W,GAAclxJ,EAAQnrB,GAAKmrB,KAE3C,IAAItH,IAAUgyJ,GAAS3rI,IAAY,UAAWA,MAAcA,EAAQrmB,MAChEy1J,EAASgD,GAAWj6K,GAqBxB,OAnBAusK,GAAUukB,GAAa,SAASlsJ,GAC9B,IAAI7e,EAAO+C,EAAO8b,GAClB5kC,EAAO4kC,GAAc7e,EACjBkxJ,IACFj3K,EAAOhG,UAAU4qC,GAAc,WAC7B,IAAI8uI,EAAW73K,KAAKg4K,UACpB,GAAIryJ,GAASkyJ,EAAU,CACrB,IAAIjkK,EAASzP,EAAOnE,KAAK83K,aACrBvuG,EAAU31D,EAAOmkK,YAAc2B,GAAU15K,KAAK+3K,aAIlD,OAFAxuG,EAAQn9D,KAAK,CAAE,KAAQ8d,EAAM,KAAQxmB,UAAW,QAAWS,IAC3DyP,EAAOokK,UAAYH,EACZjkK,EAET,OAAOsW,EAAKjiB,MAAM9D,EAAQslE,GAAU,CAACzpE,KAAKtE,SAAUgI,iBAKnDS,EAmCT,SAASsqJ,MAiDT,IAAI4mC,GAAO/J,GAAWpa,IA8BlBokB,GAAYhK,GAAW1a,IAiCvB2kB,GAAWjK,GAAWha,IAwB1B,SAAS2Q,GAASl4D,GAChB,OAAO44D,GAAM54D,GAAQynD,GAAa+M,GAAMx0D,IAh3X1C,SAA0BA,GACxB,OAAO,SAAS5lH,GACd,OAAOk6K,GAAQl6K,EAAQ4lH,IA82XwByrE,CAAiBzrE,GAuEpE,IAAI0rE,GAAQ9J,KAsCR+J,GAAa/J,IAAY,GAoB7B,SAASgC,KACP,MAAO,GAgBT,SAASO,KACP,OAAO,EA+JT,IAAIvvK,GAAMysK,IAAoB,SAASuK,EAAQC,GAC7C,OAAOD,EAASC,IACf,GAuBCx1K,GAAOgsK,GAAY,QAiBnByJ,GAASzK,IAAoB,SAAS0K,EAAUC,GAClD,OAAOD,EAAWC,IACjB,GAuBCx1K,GAAQ6rK,GAAY,SAwKxB,IAAI4J,GAAW5K,IAAoB,SAAS6K,EAAYC,GACtD,OAAOD,EAAaC,IACnB,GAuBC/5G,GAAQiwG,GAAY,SAiBpB7sK,GAAW6rK,IAAoB,SAAS+K,EAASC,GACnD,OAAOD,EAAUC,IAChB,GAgmBH,OA1iBA/e,GAAOthK,MAp6MP,SAAe3P,EAAG8jB,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAI7nB,GAAUwlK,GAGtB,OADAzhK,EAAIkmL,GAAUlmL,GACP,WACL,KAAMA,EAAI,EACR,OAAO8jB,EAAKjiB,MAAMjI,KAAM0D,aA85M9B2zK,GAAOiT,IAAMA,GACbjT,GAAOl8H,OAASA,GAChBk8H,GAAO8b,SAAWA,GAClB9b,GAAO+b,aAAeA,GACtB/b,GAAOgc,WAAaA,GACpBhc,GAAOic,GAAKA,GACZjc,GAAOoZ,OAASA,GAChBpZ,GAAOv1J,KAAOA,GACdu1J,GAAO2d,QAAUA,GACjB3d,GAAOqZ,QAAUA,GACjBrZ,GAAOgf,UAl8KP,WACE,IAAK3yL,UAAU7B,OACb,MAAO,GAET,IAAInG,EAAQgI,UAAU,GACtB,OAAOhC,GAAQhG,GAASA,EAAQ,CAACA,IA87KnC27K,GAAO1xJ,MAAQA,GACf0xJ,GAAOif,MApgTP,SAAezyL,EAAO9H,EAAM+sL,GAExB/sL,GADG+sL,EAAQC,GAAellL,EAAO9H,EAAM+sL,GAAS/sL,IAASD,GAClD,EAEAq6K,GAAUmW,GAAUvwL,GAAO,GAEpC,IAAI8F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,IAAKA,GAAU9F,EAAO,EACpB,MAAO,GAMT,IAJA,IAAII,EAAQ,EACR20K,EAAW,EACXl9J,EAASnS,EAAMk0K,GAAW9zK,EAAS9F,IAEhCI,EAAQ0F,GACb+R,EAAOk9J,KAAcqU,GAAUthL,EAAO1H,EAAQA,GAASJ,GAEzD,OAAO6X,GAo/STyjK,GAAOkf,QAl+SP,SAAiB1yL,GAMf,IALA,IAAI1H,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnCivK,EAAW,EACXl9J,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACdT,IACFkY,EAAOk9J,KAAcp1K,GAGzB,OAAOkY,GAu9STyjK,GAAO/rK,OA97SP,WACE,IAAIzJ,EAAS6B,UAAU7B,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAImpB,EAAOvpB,EAAMI,EAAS,GACtBgC,EAAQH,UAAU,GAClBvH,EAAQ0F,EAEL1F,KACL6uB,EAAK7uB,EAAQ,GAAKuH,UAAUvH,GAE9B,OAAOstE,GAAU/nE,GAAQmC,GAAS61K,GAAU71K,GAAS,CAACA,GAAQg6K,GAAY7yJ,EAAM,KAm7SlFqsJ,GAAOmf,KA3tCP,SAAcrZ,GACZ,IAAIt7K,EAAkB,MAATs7K,EAAgB,EAAIA,EAAMt7K,OACnCqpL,EAAazH,KASjB,OAPAtG,EAASt7K,EAAcqvK,GAASiM,GAAO,SAASoP,GAC9C,GAAsB,mBAAXA,EAAK,GACd,MAAM,IAAIlqL,GAAUwlK,GAEtB,MAAO,CAACqjB,EAAWqB,EAAK,IAAKA,EAAK,OAJlB,GAOX7H,IAAS,SAAS15J,GAEvB,IADA,IAAI7uB,GAAS,IACJA,EAAQ0F,GAAQ,CACvB,IAAI0qL,EAAOpP,EAAMhhL,GACjB,GAAI8L,GAAMskL,EAAK,GAAIvsL,KAAMgrB,GACvB,OAAO/iB,GAAMskL,EAAK,GAAIvsL,KAAMgrB,QA4sCpCqsJ,GAAOof,SA9qCP,SAAkBxpK,GAChB,OAz5YF,SAAsBA,GACpB,IAAIid,EAAQpoC,GAAKmrB,GACjB,OAAO,SAAS9oB,GACd,OAAOs4K,GAAet4K,EAAQ8oB,EAAQid,IAs5YjCwsJ,CAAa/b,GAAU1tJ,EA/ieZ,KA6tgBpBoqJ,GAAOprI,SAAWA,GAClBorI,GAAO70J,QAAUA,GACjB60J,GAAOh5K,OAtuHP,SAAgBF,EAAWw4L,GACzB,IAAI/iL,EAAS8jK,GAAWv5K,GACxB,OAAqB,MAAdw4L,EAAqB/iL,EAASwmK,GAAWxmK,EAAQ+iL,IAquH1Dtf,GAAOuf,MAzuMP,SAASA,EAAM1sK,EAAMqgK,EAAOzB,GAE1B,IAAIl1K,EAAS84K,GAAWxiK,EA7+TN,EA6+T6BpuB,EAAWA,EAAWA,EAAWA,EAAWA,EAD3FyuL,EAAQzB,EAAQhtL,EAAYyuL,GAG5B,OADA32K,EAAOo3G,YAAc4rE,EAAM5rE,YACpBp3G,GAsuMTyjK,GAAOwf,WA7rMP,SAASA,EAAW3sK,EAAMqgK,EAAOzB,GAE/B,IAAIl1K,EAAS84K,GAAWxiK,EAAM89I,EAAuBlsK,EAAWA,EAAWA,EAAWA,EAAWA,EADjGyuL,EAAQzB,EAAQhtL,EAAYyuL,GAG5B,OADA32K,EAAOo3G,YAAc6rE,EAAW7rE,YACzBp3G,GA0rMTyjK,GAAOuZ,SAAWA,GAClBvZ,GAAOx6H,SAAWA,GAClBw6H,GAAOoc,aAAeA,GACtBpc,GAAOx1B,MAAQA,GACfw1B,GAAO1yE,MAAQA,GACf0yE,GAAO6X,WAAaA,GACpB7X,GAAO8X,aAAeA,GACtB9X,GAAO+X,eAAiBA,GACxB/X,GAAOyf,KAt0SP,SAAcjzL,EAAOuC,EAAG0iL,GACtB,IAAIjnL,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAKA,EAIEsjL,GAAUthL,GADjBuC,EAAK0iL,GAAS1iL,IAAMtK,EAAa,EAAIwwL,GAAUlmL,IACnB,EAAI,EAAIA,EAAGvE,GAH9B,IAo0SXw1K,GAAO0f,UArySP,SAAmBlzL,EAAOuC,EAAG0iL,GAC3B,IAAIjnL,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAKA,EAKEsjL,GAAUthL,EAAO,GADxBuC,EAAIvE,GADJuE,EAAK0iL,GAAS1iL,IAAMtK,EAAa,EAAIwwL,GAAUlmL,KAEhB,EAAI,EAAIA,GAJ9B,IAmySXixK,GAAO2f,eAzvSP,SAAwBnzL,EAAOuG,GAC7B,OAAQvG,GAASA,EAAMhC,OACnB8kL,GAAU9iL,EAAO4/K,GAAYr5K,EAAW,IAAI,GAAM,GAClD,IAuvSNitK,GAAO4f,UAjtSP,SAAmBpzL,EAAOuG,GACxB,OAAQvG,GAASA,EAAMhC,OACnB8kL,GAAU9iL,EAAO4/K,GAAYr5K,EAAW,IAAI,GAC5C,IA+sSNitK,GAAOxuC,KA/qSP,SAAchlI,EAAOnI,EAAOqkB,EAAOvjB,GACjC,IAAIqF,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAKA,GAGDke,GAAyB,iBAATA,GAAqBgpK,GAAellL,EAAOnI,EAAOqkB,KACpEA,EAAQ,EACRvjB,EAAMqF,GAzvIV,SAAkBgC,EAAOnI,EAAOqkB,EAAOvjB,GACrC,IAAIqF,EAASgC,EAAMhC,OAWnB,KATAke,EAAQusK,GAAUvsK,IACN,IACVA,GAASA,EAAQle,EAAS,EAAKA,EAASke,IAE1CvjB,EAAOA,IAAQV,GAAaU,EAAMqF,EAAUA,EAASyqL,GAAU9vL,IACrD,IACRA,GAAOqF,GAETrF,EAAMujB,EAAQvjB,EAAM,EAAIy2L,GAASz2L,GAC1BujB,EAAQvjB,GACbqH,EAAMkc,KAAWrkB,EAEnB,OAAOmI,EA4uIAqzL,CAASrzL,EAAOnI,EAAOqkB,EAAOvjB,IAN5B,IA6qSX66K,GAAO9rK,OA3vOP,SAAgB9G,EAAY2F,GAE1B,OADW1I,GAAQ+C,GAAcosK,GAAc+M,IACnCn5K,EAAYg/K,GAAYr5K,EAAW,KA0vOjDitK,GAAOh0J,QAvqOP,SAAiB5e,EAAYgsK,GAC3B,OAAOoN,GAAY70K,GAAIvE,EAAYgsK,GAAW,IAuqOhD4G,GAAO8f,YAhpOP,SAAqB1yL,EAAYgsK,GAC/B,OAAOoN,GAAY70K,GAAIvE,EAAYgsK,GAAWpI,IAgpOhDgP,GAAO+f,aAxnOP,SAAsB3yL,EAAYgsK,EAAU3kK,GAE1C,OADAA,EAAQA,IAAUhQ,EAAY,EAAIwwL,GAAUxgL,GACrC+xK,GAAY70K,GAAIvE,EAAYgsK,GAAW3kK,IAunOhDurK,GAAO3rK,QAAUA,GACjB2rK,GAAOggB,YAviSP,SAAqBxzL,GAEnB,OADsB,MAATA,EAAgB,EAAIA,EAAMhC,QACvBg8K,GAAYh6K,EAAOwkK,GAAY,IAsiSjDgP,GAAOigB,aA/gSP,SAAsBzzL,EAAOiI,GAE3B,OADsB,MAATjI,EAAgB,EAAIA,EAAMhC,QAKhCg8K,GAAYh6K,EADnBiI,EAAQA,IAAUhQ,EAAY,EAAIwwL,GAAUxgL,IAFnC,IA6gSXurK,GAAOptK,KAz9LP,SAAcigB,GACZ,OAAOwiK,GAAWxiK,EA5wUD,MAqugBnBmtJ,GAAO6d,KAAOA,GACd7d,GAAO8d,UAAYA,GACnB9d,GAAOkgB,UA3/RP,SAAmBpa,GAKjB,IAJA,IAAIhhL,GAAS,EACT0F,EAAkB,MAATs7K,EAAgB,EAAIA,EAAMt7K,OACnC+R,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAI0qL,EAAOpP,EAAMhhL,GACjByX,EAAO24K,EAAK,IAAMA,EAAK,GAEzB,OAAO34K,GAm/RTyjK,GAAOmgB,UA38GP,SAAmBrzL,GACjB,OAAiB,MAAVA,EAAiB,GAAKg6K,GAAch6K,EAAQrC,GAAKqC,KA28G1DkzK,GAAOogB,YAj7GP,SAAqBtzL,GACnB,OAAiB,MAAVA,EAAiB,GAAKg6K,GAAch6K,EAAQs3K,GAAOt3K,KAi7G5DkzK,GAAO5zJ,QAAUA,GACjB4zJ,GAAOqgB,QA56RP,SAAiB7zL,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMhC,QACvBsjL,GAAUthL,EAAO,GAAI,GAAK,IA26R5CwzK,GAAOgY,aAAeA,GACtBhY,GAAOiY,eAAiBA,GACxBjY,GAAOkY,iBAAmBA,GAC1BlY,GAAOqc,OAASA,GAChBrc,GAAOsc,SAAWA,GAClBtc,GAAOiZ,UAAYA,GACnBjZ,GAAO5G,SAAWA,GAClB4G,GAAOkZ,MAAQA,GACflZ,GAAOv1K,KAAOA,GACdu1K,GAAOoE,OAASA,GAChBpE,GAAOruK,IAAMA,GACbquK,GAAOvxJ,QA1rGP,SAAiB3hB,EAAQssK,GACvB,IAAI78J,EAAS,GAMb,OALA68J,EAAWgT,GAAYhT,EAAU,GAEjC6M,GAAWn5K,GAAQ,SAASzI,EAAO4I,EAAKH,GACtC21K,GAAgBlmK,EAAQ68J,EAAS/0K,EAAO4I,EAAKH,GAASzI,MAEjDkY,GAorGTyjK,GAAOsgB,UArpGP,SAAmBxzL,EAAQssK,GACzB,IAAI78J,EAAS,GAMb,OALA68J,EAAWgT,GAAYhT,EAAU,GAEjC6M,GAAWn5K,GAAQ,SAASzI,EAAO4I,EAAKH,GACtC21K,GAAgBlmK,EAAQtP,EAAKmsK,EAAS/0K,EAAO4I,EAAKH,OAE7CyP,GA+oGTyjK,GAAOugB,QAphCP,SAAiB3qK,GACf,OAAO+0J,GAAYrH,GAAU1tJ,EAxveX,KA4wgBpBoqJ,GAAOwgB,gBAh/BP,SAAyB9tE,EAAM43D,GAC7B,OAAOI,GAAoBh4D,EAAM4wD,GAAUgH,EA7xezB,KA6wgBpBtK,GAAO/kI,QAAUA,GACjB+kI,GAAO5mK,MAAQA,GACf4mK,GAAO1mK,UAAYA,GACnB0mK,GAAOhwE,OAASA,GAChBgwE,GAAO+d,SAAWA,GAClB/d,GAAOn5J,MAAQA,GACfm5J,GAAO6a,OAASA,GAChB7a,GAAOygB,OAzzBP,SAAgB1xL,GAEd,OADAA,EAAIkmL,GAAUlmL,GACPs+K,IAAS,SAAS15J,GACvB,OAAOq4J,GAAQr4J,EAAM5kB,OAuzBzBixK,GAAOwc,KAAOA,GACdxc,GAAO0gB,OAnhGP,SAAgB5zL,EAAQiG,GACtB,OAAOw1G,GAAOz7G,EAAQ+tL,GAAOzO,GAAYr5K,MAmhG3CitK,GAAO2gB,KA73LP,SAAc9tK,GACZ,OAAOumK,GAAO,EAAGvmK,IA63LnBmtJ,GAAO4gB,QAr4NP,SAAiBxzL,EAAY8+K,EAAWC,EAAQsF,GAC9C,OAAkB,MAAdrkL,EACK,IAEJ/C,GAAQ6hL,KACXA,EAAyB,MAAbA,EAAoB,GAAK,CAACA,IAGnC7hL,GADL8hL,EAASsF,EAAQhtL,EAAY0nL,KAE3BA,EAAmB,MAAVA,EAAiB,GAAK,CAACA,IAE3BF,GAAY7+K,EAAY8+K,EAAWC,KA23N5CnM,GAAOge,KAAOA,GACdhe,GAAO8a,SAAWA,GAClB9a,GAAOie,UAAYA,GACnBje,GAAOke,SAAWA,GAClBle,GAAOib,QAAUA,GACjBjb,GAAOkb,aAAeA,GACtBlb,GAAOmZ,UAAYA,GACnBnZ,GAAOpD,KAAOA,GACdoD,GAAOz3D,OAASA,GAChBy3D,GAAO4K,SAAWA,GAClB5K,GAAO6gB,WA/rBP,SAAoB/zL,GAClB,OAAO,SAAS4lH,GACd,OAAiB,MAAV5lH,EAAiBrI,EAAYuiL,GAAQl6K,EAAQ4lH,KA8rBxDstD,GAAOmY,KAAOA,GACdnY,GAAOoY,QAAUA,GACjBpY,GAAO8gB,UApsRP,SAAmBt0L,EAAOsH,EAAQslK,GAChC,OAAQ5sK,GAASA,EAAMhC,QAAUsJ,GAAUA,EAAOtJ,OAC9CuiL,GAAYvgL,EAAOsH,EAAQs4K,GAAYhT,EAAU,IACjD5sK,GAksRNwzK,GAAO+gB,YAxqRP,SAAqBv0L,EAAOsH,EAAQoB,GAClC,OAAQ1I,GAASA,EAAMhC,QAAUsJ,GAAUA,EAAOtJ,OAC9CuiL,GAAYvgL,EAAOsH,EAAQrP,EAAWyQ,GACtC1I,GAsqRNwzK,GAAOqY,OAASA,GAChBrY,GAAOoe,MAAQA,GACfpe,GAAOqe,WAAaA,GACpBre,GAAOmb,MAAQA,GACfnb,GAAOlhG,OAxvNP,SAAgB1xE,EAAY2F,GAE1B,OADW1I,GAAQ+C,GAAcosK,GAAc+M,IACnCn5K,EAAYytL,GAAOzO,GAAYr5K,EAAW,MAuvNxDitK,GAAOnoK,OAzmRP,SAAgBrL,EAAOuG,GACrB,IAAIwJ,EAAS,GACb,IAAM/P,IAASA,EAAMhC,OACnB,OAAO+R,EAET,IAAIzX,GAAS,EACTmoL,EAAU,GACVziL,EAASgC,EAAMhC,OAGnB,IADAuI,EAAYq5K,GAAYr5K,EAAW,KAC1BjO,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACdiO,EAAU1O,EAAOS,EAAO0H,KAC1B+P,EAAOxH,KAAK1Q,GACZ4oL,EAAQl4K,KAAKjQ,IAIjB,OADAkoL,GAAWxgL,EAAOygL,GACX1wK,GAwlRTyjK,GAAO/yJ,KAluLP,SAAc4F,EAAMnK,GAClB,GAAmB,mBAARmK,EACT,MAAM,IAAI7nB,GAAUwlK,GAGtB,OAAO6c,GAASx6J,EADhBnK,EAAQA,IAAUjkB,EAAYikB,EAAQusK,GAAUvsK,KA+tLlDs3J,GAAOv0K,QAAUA,GACjBu0K,GAAOghB,WAhtNP,SAAoB5zL,EAAY2B,EAAG0iL,GAOjC,OALE1iL,GADG0iL,EAAQC,GAAetkL,EAAY2B,EAAG0iL,GAAS1iL,IAAMtK,GACpD,EAEAwwL,GAAUlmL,IAEL1E,GAAQ+C,GAAc+0K,GAAkBsL,IACvCrgL,EAAY2B,IA0sN1BixK,GAAO3vK,IAv6FP,SAAavD,EAAQ4lH,EAAMruH,GACzB,OAAiB,MAAVyI,EAAiBA,EAASggL,GAAQhgL,EAAQ4lH,EAAMruH,IAu6FzD27K,GAAOihB,QA54FP,SAAiBn0L,EAAQ4lH,EAAMruH,EAAOm/K,GAEpC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa/+K,EAC3C,MAAVqI,EAAiBA,EAASggL,GAAQhgL,EAAQ4lH,EAAMruH,EAAOm/K,IA24FhExD,GAAOkhB,QA1rNP,SAAiB9zL,GAEf,OADW/C,GAAQ+C,GAAcm1K,GAAesL,IACpCzgL,IAyrNd4yK,GAAOvnK,MAhjRP,SAAejM,EAAOkc,EAAOvjB,GAC3B,IAAIqF,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAKA,GAGDrF,GAAqB,iBAAPA,GAAmBusL,GAAellL,EAAOkc,EAAOvjB,IAChEujB,EAAQ,EACRvjB,EAAMqF,IAGNke,EAAiB,MAATA,EAAgB,EAAIusK,GAAUvsK,GACtCvjB,EAAMA,IAAQV,EAAY+F,EAASyqL,GAAU9vL,IAExC2oL,GAAUthL,EAAOkc,EAAOvjB,IAVtB,IA8iRX66K,GAAOhkK,OAASA,GAChBgkK,GAAOmhB,WAx3QP,SAAoB30L,GAClB,OAAQA,GAASA,EAAMhC,OACnBukL,GAAeviL,GACf,IAs3QNwzK,GAAOohB,aAn2QP,SAAsB50L,EAAO4sK,GAC3B,OAAQ5sK,GAASA,EAAMhC,OACnBukL,GAAeviL,EAAO4/K,GAAYhT,EAAU,IAC5C,IAi2QN4G,GAAOt4H,MA5hEP,SAAex4C,EAAQwb,EAAW0nG,GAKhC,OAJIA,GAAyB,iBAATA,GAAqBs/D,GAAexiL,EAAQwb,EAAW0nG,KACzE1nG,EAAY0nG,EAAQ3tH,IAEtB2tH,EAAQA,IAAU3tH,EAAY0sK,EAAmB/+C,IAAU,IAI3DljH,EAAStF,GAASsF,MAEQ,iBAAbwb,GACO,MAAbA,IAAsBouJ,GAASpuJ,OAEpCA,EAAYukK,GAAavkK,KACPqxJ,GAAW7sK,GACpB+gL,GAAU1T,GAAcrtK,GAAS,EAAGkjH,GAGxCljH,EAAOw4C,MAAMh9B,EAAW0nG,GAZtB,IAuhEX4tD,GAAOqhB,OAnsLP,SAAgBxuK,EAAMnK,GACpB,GAAmB,mBAARmK,EACT,MAAM,IAAI7nB,GAAUwlK,GAGtB,OADA9nJ,EAAiB,MAATA,EAAgB,EAAIo2J,GAAUmW,GAAUvsK,GAAQ,GACjD2kK,IAAS,SAAS15J,GACvB,IAAInnB,EAAQmnB,EAAKjL,GACbouK,EAAY7G,GAAUt8J,EAAM,EAAGjL,GAKnC,OAHIlc,GACF4lE,GAAU0kH,EAAWtqL,GAEhBoE,GAAMiiB,EAAMlqB,KAAMmuL,OAwrL7B9W,GAAO38J,KAl1QP,SAAc7W,GACZ,IAAIhC,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAOA,EAASsjL,GAAUthL,EAAO,EAAGhC,GAAU,IAi1QhDw1K,GAAOzyJ,KArzQP,SAAc/gB,EAAOuC,EAAG0iL,GACtB,OAAMjlL,GAASA,EAAMhC,OAIdsjL,GAAUthL,EAAO,GADxBuC,EAAK0iL,GAAS1iL,IAAMtK,EAAa,EAAIwwL,GAAUlmL,IAChB,EAAI,EAAIA,GAH9B,IAozQXixK,GAAOshB,UArxQP,SAAmB90L,EAAOuC,EAAG0iL,GAC3B,IAAIjnL,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,OAAKA,EAKEsjL,GAAUthL,GADjBuC,EAAIvE,GADJuE,EAAK0iL,GAAS1iL,IAAMtK,EAAa,EAAIwwL,GAAUlmL,KAEnB,EAAI,EAAIA,EAAGvE,GAJ9B,IAmxQXw1K,GAAOuhB,eAzuQP,SAAwB/0L,EAAOuG,GAC7B,OAAQvG,GAASA,EAAMhC,OACnB8kL,GAAU9iL,EAAO4/K,GAAYr5K,EAAW,IAAI,GAAO,GACnD,IAuuQNitK,GAAOvyJ,UAjsQP,SAAmBjhB,EAAOuG,GACxB,OAAQvG,GAASA,EAAMhC,OACnB8kL,GAAU9iL,EAAO4/K,GAAYr5K,EAAW,IACxC,IA+rQNitK,GAAOwhB,IApuPP,SAAan9L,EAAOy0L,GAElB,OADAA,EAAYz0L,GACLA,GAmuPT27K,GAAOyhB,SA9oLP,SAAkB5uK,EAAMsjI,EAAMxhH,GAC5B,IAAIklJ,GAAU,EACVjI,GAAW,EAEf,GAAmB,mBAAR/+J,EACT,MAAM,IAAI7nB,GAAUwlK,GAMtB,OAJI8P,GAAS3rI,KACXklJ,EAAU,YAAallJ,IAAYA,EAAQklJ,QAAUA,EACrDjI,EAAW,aAAcj9I,IAAYA,EAAQi9I,SAAWA,GAEnD2H,GAAS1mK,EAAMsjI,EAAM,CAC1B,QAAW0jC,EACX,QAAW1jC,EACX,SAAYy7B,KAioLhB5R,GAAOuS,KAAOA,GACdvS,GAAOz0K,QAAUA,GACjBy0K,GAAO2c,QAAUA,GACjB3c,GAAO4c,UAAYA,GACnB5c,GAAO38D,OArfP,SAAgBh/G,GACd,OAAIgG,GAAQhG,GACHw1K,GAASx1K,EAAO6iL,IAElBZ,GAASjiL,GAAS,CAACA,GAASg+K,GAAU0N,GAAanmL,GAASvF,MAkfrE27K,GAAO8L,cAAgBA,GACvB9L,GAAOh7C,UA10FP,SAAmBl4H,EAAQssK,EAAUx0F,GACnC,IAAI88F,EAAQr3K,GAAQyC,GAChB40L,EAAYhgB,GAAShD,GAAS5xK,IAAWmsK,GAAansK,GAG1D,GADAssK,EAAWgT,GAAYhT,EAAU,GACd,MAAfx0F,EAAqB,CACvB,IAAI4/F,EAAO13K,GAAUA,EAAO7F,YAE1B29E,EADE88G,EACYhgB,EAAQ,IAAI8C,EAAO,GAE1BlE,GAASxzK,IACFi6K,GAAWvC,GAAQnE,GAAW1C,GAAa7wK,IAG3C,GAMlB,OAHC40L,EAAYroB,GAAY4M,IAAYn5K,GAAQ,SAASzI,EAAOS,EAAOgI,GAClE,OAAOssK,EAASx0F,EAAavgF,EAAOS,EAAOgI,MAEtC83E,GAuzFTo7F,GAAO2hB,MArnLP,SAAe9uK,GACb,OAAOogK,GAAIpgK,EAAM,IAqnLnBmtJ,GAAOp4J,MAAQA,GACfo4J,GAAOsY,QAAUA,GACjBtY,GAAOuY,UAAYA,GACnBvY,GAAO4hB,KAzmQP,SAAcp1L,GACZ,OAAQA,GAASA,EAAMhC,OAAU0kL,GAAS1iL,GAAS,IAymQrDwzK,GAAO6hB,OA/kQP,SAAgBr1L,EAAO4sK,GACrB,OAAQ5sK,GAASA,EAAMhC,OAAU0kL,GAAS1iL,EAAO4/K,GAAYhT,EAAU,IAAM,IA+kQ/E4G,GAAO8hB,SAxjQP,SAAkBt1L,EAAO0I,GAEvB,OADAA,EAAkC,mBAAdA,EAA2BA,EAAazQ,EACpD+H,GAASA,EAAMhC,OAAU0kL,GAAS1iL,EAAO/H,EAAWyQ,GAAc,IAujQ5E8qK,GAAO+hB,MAhyFP,SAAej1L,EAAQ4lH,GACrB,OAAiB,MAAV5lH,GAAwBqgL,GAAUrgL,EAAQ4lH,IAgyFnDstD,GAAOwY,MAAQA,GACfxY,GAAOyY,UAAYA,GACnBzY,GAAO/mK,OApwFP,SAAgBnM,EAAQ4lH,EAAMz6G,GAC5B,OAAiB,MAAVnL,EAAiBA,EAASuiL,GAAWviL,EAAQ4lH,EAAMo9D,GAAa73K,KAowFzE+nK,GAAOgiB,WAzuFP,SAAoBl1L,EAAQ4lH,EAAMz6G,EAASurK,GAEzC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa/+K,EAC3C,MAAVqI,EAAiBA,EAASuiL,GAAWviL,EAAQ4lH,EAAMo9D,GAAa73K,GAAUurK,IAwuFnFxD,GAAOlsK,OAASA,GAChBksK,GAAOiiB,SAhrFP,SAAkBn1L,GAChB,OAAiB,MAAVA,EAAiB,GAAKsuK,GAAWtuK,EAAQs3K,GAAOt3K,KAgrFzDkzK,GAAO0Y,QAAUA,GACjB1Y,GAAO8R,MAAQA,GACf9R,GAAO78F,KA3mLP,SAAc9+E,EAAOmuL,GACnB,OAAOyI,GAAQnL,GAAa0C,GAAUnuL,IA2mLxC27K,GAAO2Y,IAAMA,GACb3Y,GAAO4Y,MAAQA,GACf5Y,GAAO6Y,QAAUA,GACjB7Y,GAAO1wJ,IAAMA,GACb0wJ,GAAOkiB,UAj3PP,SAAmBrvJ,EAAO/+B,GACxB,OAAO47K,GAAc78I,GAAS,GAAI/+B,GAAU,GAAI4uK,KAi3PlD1C,GAAOmiB,cA/1PP,SAAuBtvJ,EAAO/+B,GAC5B,OAAO47K,GAAc78I,GAAS,GAAI/+B,GAAU,GAAIg5K,KA+1PlD9M,GAAOxwJ,QAAUA,GAGjBwwJ,GAAO1tK,QAAUqqL,GACjB3c,GAAOoiB,UAAYxF,GACnB5c,GAAOqiB,OAASvG,GAChB9b,GAAOsiB,WAAavG,GAGpBl1K,GAAMm5J,GAAQA,IAKdA,GAAO14J,IAAMA,GACb04J,GAAO0d,QAAUA,GACjB1d,GAAO6c,UAAYA,GACnB7c,GAAO7yC,WAAaA,GACpB6yC,GAAOj3J,KAAOA,GACdi3J,GAAOtvC,MAprFP,SAAeyyC,EAAQC,EAAOC,GAa5B,OAZIA,IAAU5+K,IACZ4+K,EAAQD,EACRA,EAAQ3+K,GAEN4+K,IAAU5+K,IAEZ4+K,GADAA,EAAQz6D,GAASy6D,MACCA,EAAQA,EAAQ,GAEhCD,IAAU3+K,IAEZ2+K,GADAA,EAAQx6D,GAASw6D,MACCA,EAAQA,EAAQ,GAE7Bd,GAAU15D,GAASu6D,GAASC,EAAOC,IAwqF5CrD,GAAO78H,MA7jLP,SAAe9+C,GACb,OAAOi/K,GAAUj/K,EArzVI,IAk3gBvB27K,GAAOuiB,UApgLP,SAAmBl+L,GACjB,OAAOi/K,GAAUj/K,EAAOo4L,IAogL1Bzc,GAAOwiB,cAr+KP,SAAuBn+L,EAAOm/K,GAE5B,OAAOF,GAAUj/K,EAAOo4L,EADxBjZ,EAAkC,mBAAdA,EAA2BA,EAAa/+K,IAq+K9Du7K,GAAOyiB,UA7hLP,SAAmBp+L,EAAOm/K,GAExB,OAAOF,GAAUj/K,EAz1VI,EAw1VrBm/K,EAAkC,mBAAdA,EAA2BA,EAAa/+K,IA6hL9Du7K,GAAO0iB,WA18KP,SAAoB51L,EAAQ8oB,GAC1B,OAAiB,MAAVA,GAAkBwvJ,GAAet4K,EAAQ8oB,EAAQnrB,GAAKmrB,KA08K/DoqJ,GAAO+R,OAASA,GAChB/R,GAAO2iB,UA1xCP,SAAmBt+L,EAAO6hD,GACxB,OAAiB,MAAT7hD,GAAiBA,IAAUA,EAAS6hD,EAAe7hD,GA0xC7D27K,GAAOwe,OAASA,GAChBxe,GAAO4iB,SAz9EP,SAAkB1zL,EAAQymB,EAAQiwF,GAChC12G,EAAStF,GAASsF,GAClBymB,EAASs5J,GAAat5J,GAEtB,IAAInrB,EAAS0E,EAAO1E,OAKhBrF,EAJJygH,EAAWA,IAAanhH,EACpB+F,EACA83K,GAAU2S,GAAUrvE,GAAW,EAAGp7G,GAItC,OADAo7G,GAAYjwF,EAAOnrB,SACA,GAAK0E,EAAOuJ,MAAMmtG,EAAUzgH,IAAQwwB,GA+8EzDqqJ,GAAO71I,GAAKA,GACZ61I,GAAOr0B,OAj7EP,SAAgBz8I,GAEd,OADAA,EAAStF,GAASsF,KACAokK,EAAmB5vH,KAAKx0C,GACtCA,EAAOqyE,QAAQ6xF,EAAiBwI,IAChC1sK,GA86EN8wK,GAAO6iB,aA55EP,SAAsB3zL,GAEpB,OADAA,EAAStF,GAASsF,KACA4kK,GAAgBpwH,KAAKx0C,GACnCA,EAAOqyE,QAAQsyF,GAAc,QAC7B3kK,GAy5EN8wK,GAAO9pK,MA57OP,SAAe9I,EAAY2F,EAAW0+K,GACpC,IAAI5+J,EAAOxoB,GAAQ+C,GAAcmsK,GAAa6M,GAI9C,OAHIqL,GAASC,GAAetkL,EAAY2F,EAAW0+K,KACjD1+K,EAAYtO,GAEPouB,EAAKzlB,EAAYg/K,GAAYr5K,EAAW,KAw7OjDitK,GAAO11J,KAAOA,GACd01J,GAAOrxJ,UAAYA,GACnBqxJ,GAAOr0J,QArxHP,SAAiB7e,EAAQiG,GACvB,OAAOqnK,GAAYttK,EAAQs/K,GAAYr5K,EAAW,GAAIkzK,KAqxHxDjG,GAAOp0J,SAAWA,GAClBo0J,GAAOjxJ,cAAgBA,GACvBixJ,GAAOl0J,YAjvHP,SAAqBhf,EAAQiG,GAC3B,OAAOqnK,GAAYttK,EAAQs/K,GAAYr5K,EAAW,GAAIozK,KAivHxDnG,GAAO92J,MAAQA,GACf82J,GAAO3qK,QAAUA,GACjB2qK,GAAOgZ,aAAeA,GACtBhZ,GAAO8iB,MArtHP,SAAeh2L,EAAQssK,GACrB,OAAiB,MAAVtsK,EACHA,EACA65K,GAAQ75K,EAAQs/K,GAAYhT,EAAU,GAAIgL,KAmtHhDpE,GAAO+iB,WAtrHP,SAAoBj2L,EAAQssK,GAC1B,OAAiB,MAAVtsK,EACHA,EACA+5K,GAAa/5K,EAAQs/K,GAAYhT,EAAU,GAAIgL,KAorHrDpE,GAAOgjB,OArpHP,SAAgBl2L,EAAQssK,GACtB,OAAOtsK,GAAUm5K,GAAWn5K,EAAQs/K,GAAYhT,EAAU,KAqpH5D4G,GAAOijB,YAxnHP,SAAqBn2L,EAAQssK,GAC3B,OAAOtsK,GAAUq5K,GAAgBr5K,EAAQs/K,GAAYhT,EAAU,KAwnHjE4G,GAAOtzK,IAAMA,GACbszK,GAAOob,GAAKA,GACZpb,GAAOqb,IAAMA,GACbrb,GAAOpzK,IAzgHP,SAAaE,EAAQ4lH,GACnB,OAAiB,MAAV5lH,GAAkBypL,GAAQzpL,EAAQ4lH,EAAMk1D,KAygHjD5H,GAAOt2J,MAAQA,GACfs2J,GAAOr6J,KAAOA,GACdq6J,GAAOx2H,SAAWA,GAClBw2H,GAAO9tK,SA5pOP,SAAkB9E,EAAY/I,EAAOk2K,EAAWkX,GAC9CrkL,EAAajD,GAAYiD,GAAcA,EAAa0G,GAAO1G,GAC3DmtK,EAAaA,IAAckX,EAASwD,GAAU1a,GAAa,EAE3D,IAAI/vK,EAAS4C,EAAW5C,OAIxB,OAHI+vK,EAAY,IACdA,EAAYuE,GAAUt0K,EAAS+vK,EAAW,IAErCghB,GAASnuL,GACXmtK,GAAa/vK,GAAU4C,EAAW+b,QAAQ9kB,EAAOk2K,IAAc,IAC7D/vK,GAAUmvK,GAAYvsK,EAAY/I,EAAOk2K,IAAc,GAmpOhEyF,GAAO72J,QA9lSP,SAAiB3c,EAAOnI,EAAOk2K,GAC7B,IAAI/vK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI1F,EAAqB,MAAby1K,EAAoB,EAAI0a,GAAU1a,GAI9C,OAHIz1K,EAAQ,IACVA,EAAQg6K,GAAUt0K,EAAS1F,EAAO,IAE7B60K,GAAYntK,EAAOnI,EAAOS,IAslSnCk7K,GAAOkjB,QAlqFP,SAAiB/f,EAAQz6J,EAAOvjB,GAS9B,OARAujB,EAAQ6rK,GAAS7rK,GACbvjB,IAAQV,GACVU,EAAMujB,EACNA,EAAQ,GAERvjB,EAAMovL,GAASpvL,GArsVnB,SAAqBg+K,EAAQz6J,EAAOvjB,GAClC,OAAOg+K,GAAUpE,GAAUr2J,EAAOvjB,IAAQg+K,EAASrE,GAAUp2J,EAAOvjB,GAusV7Dg+L,CADPhgB,EAASv6D,GAASu6D,GACSz6J,EAAOvjB,IA0pFpC66K,GAAOuc,OAASA,GAChBvc,GAAO4B,YAAcA,GACrB5B,GAAO31K,QAAUA,GACjB21K,GAAOvH,cAAgBA,GACvBuH,GAAO71K,YAAcA,GACrB61K,GAAO6L,kBAAoBA,GAC3B7L,GAAOojB,UAtwKP,SAAmB/+L,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtB47K,GAAa57K,IAAUijL,GAAWjjL,IAAUktK,GAqwKjDyO,GAAOtB,SAAWA,GAClBsB,GAAOrH,OAASA,GAChBqH,GAAOx7H,UA7sKP,SAAmBngD,GACjB,OAAO47K,GAAa57K,IAA6B,IAAnBA,EAAM2L,WAAmBwrE,GAAcn3E,IA6sKvE27K,GAAO90J,QAzqKP,SAAiB7mB,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAI8F,GAAY9F,KACXgG,GAAQhG,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAM0T,QAC1D2mK,GAASr6K,IAAU40K,GAAa50K,IAAUu9K,GAAYv9K,IAC1D,OAAQA,EAAMmG,OAEhB,IAAIq5K,EAAMC,GAAOz/K,GACjB,GAAIw/K,GAAOjS,GAAUiS,GAAO5R,EAC1B,OAAQ5tK,EAAMK,KAEhB,GAAIomL,GAAYzmL,GACd,OAAQwmL,GAASxmL,GAAOmG,OAE1B,IAAK,IAAIyC,KAAO5I,EACd,GAAI6F,GAAeP,KAAKtF,EAAO4I,GAC7B,OAAO,EAGX,OAAO,GAqpKT+yK,GAAOqjB,QAtnKP,SAAiBh/L,EAAOilB,GACtB,OAAOi/J,GAAYlkL,EAAOilB,IAsnK5B02J,GAAOsjB,YAnlKP,SAAqBj/L,EAAOilB,EAAOk6J,GAEjC,IAAIjnK,GADJinK,EAAkC,mBAAdA,EAA2BA,EAAa/+K,GAClC++K,EAAWn/K,EAAOilB,GAAS7kB,EACrD,OAAO8X,IAAW9X,EAAY8jL,GAAYlkL,EAAOilB,EAAO7kB,EAAW++K,KAAgBjnK,GAilKrFyjK,GAAOsb,QAAUA,GACjBtb,GAAOj2E,SA1hKP,SAAkB1lG,GAChB,MAAuB,iBAATA,GAAqBs6K,GAAet6K,IA0hKpD27K,GAAO+G,WAAaA,GACpB/G,GAAOz1K,UAAYA,GACnBy1K,GAAOyW,SAAWA,GAClBzW,GAAOvyK,MAAQA,GACfuyK,GAAOujB,QA11JP,SAAiBz2L,EAAQ8oB,GACvB,OAAO9oB,IAAW8oB,GAAUu0J,GAAYr9K,EAAQ8oB,EAAQw1J,GAAax1J,KA01JvEoqJ,GAAOwjB,YAvzJP,SAAqB12L,EAAQ8oB,EAAQ4tJ,GAEnC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa/+K,EACrD0lL,GAAYr9K,EAAQ8oB,EAAQw1J,GAAax1J,GAAS4tJ,IAszJ3DxD,GAAOj7H,MAvxJP,SAAe1gD,GAIb,OAAOwkH,GAASxkH,IAAUA,IAAUA,GAoxJtC27K,GAAOyjB,SAvvJP,SAAkBp/L,GAChB,GAAIuyL,GAAWvyL,GACb,MAAM,IAAIkM,EAtsXM,mEAwsXlB,OAAOi6K,GAAanmL,IAovJtB27K,GAAO0jB,MAxsJP,SAAer/L,GACb,OAAgB,MAATA,GAwsJT27K,GAAO2jB,OAjuJP,SAAgBt/L,GACd,OAAiB,OAAVA,GAiuJT27K,GAAOn3D,SAAWA,GAClBm3D,GAAOM,SAAWA,GAClBN,GAAOC,aAAeA,GACtBD,GAAOxkG,cAAgBA,GACvBwkG,GAAOlH,SAAWA,GAClBkH,GAAO4jB,cArlJP,SAAuBv/L,GACrB,OAAOkG,GAAUlG,IAAUA,IAAS,kBAAqBA,GAAS4sK,GAqlJpE+O,GAAO75J,MAAQA,GACf65J,GAAOub,SAAWA,GAClBvb,GAAOsG,SAAWA,GAClBtG,GAAO/G,aAAeA,GACtB+G,GAAO6jB,YAn/IP,SAAqBx/L,GACnB,OAAOA,IAAUI,GAm/InBu7K,GAAO8jB,UA/9IP,SAAmBz/L,GACjB,OAAO47K,GAAa57K,IAAUy/K,GAAOz/K,IAAU+tK,GA+9IjD4N,GAAO+jB,UA38IP,SAAmB1/L,GACjB,OAAO47K,GAAa57K,IAn6XP,oBAm6XiBijL,GAAWjjL,IA28I3C27K,GAAO51J,KAz/RP,SAAc5d,EAAOke,GACnB,OAAgB,MAATle,EAAgB,GAAKoyK,GAAWj1K,KAAK6C,EAAOke,IAy/RrDs1J,GAAOgd,UAAYA,GACnBhd,GAAOrzJ,KAAOA,GACdqzJ,GAAO32J,YAh9RP,SAAqB7c,EAAOnI,EAAOk2K,GACjC,IAAI/vK,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI1F,EAAQ0F,EAKZ,OAJI+vK,IAAc91K,IAEhBK,GADAA,EAAQmwL,GAAU1a,IACF,EAAIuE,GAAUt0K,EAAS1F,EAAO,GAAKi6K,GAAUj6K,EAAO0F,EAAS,IAExEnG,IAAUA,EArvMrB,SAA2BmI,EAAOnI,EAAOk2K,GAEvC,IADA,IAAIz1K,EAAQy1K,EAAY,EACjBz1K,KACL,GAAI0H,EAAM1H,KAAWT,EACnB,OAAOS,EAGX,OAAOA,EA+uMDk/L,CAAkBx3L,EAAOnI,EAAOS,GAChCw1K,GAAc9tK,EAAOkuK,GAAW51K,GAAO,IAq8R7Ck7K,GAAOid,UAAYA,GACnBjd,GAAOkd,WAAaA,GACpBld,GAAOwb,GAAKA,GACZxb,GAAOyb,IAAMA,GACbzb,GAAOr6K,IAhfP,SAAa6G,GACX,OAAQA,GAASA,EAAMhC,OACnB67K,GAAa75K,EAAOg9C,GAAUm+H,IAC9BljL,GA8eNu7K,GAAOnzJ,MApdP,SAAergB,EAAO4sK,GACpB,OAAQ5sK,GAASA,EAAMhC,OACnB67K,GAAa75K,EAAO4/K,GAAYhT,EAAU,GAAIuO,IAC9CljL,GAkdNu7K,GAAOikB,KAjcP,SAAcz3L,GACZ,OAAOouK,GAASpuK,EAAOg9C,KAiczBw2H,GAAOkkB,OAvaP,SAAgB13L,EAAO4sK,GACrB,OAAOwB,GAASpuK,EAAO4/K,GAAYhT,EAAU,KAua/C4G,GAAOp6K,IAlZP,SAAa4G,GACX,OAAQA,GAASA,EAAMhC,OACnB67K,GAAa75K,EAAOg9C,GAAU0hI,IAC9BzmL,GAgZNu7K,GAAOhzJ,MAtXP,SAAexgB,EAAO4sK,GACpB,OAAQ5sK,GAASA,EAAMhC,OACnB67K,GAAa75K,EAAO4/K,GAAYhT,EAAU,GAAI8R,IAC9CzmL,GAoXNu7K,GAAOsW,UAAYA,GACnBtW,GAAO6W,UAAYA,GACnB7W,GAAOmkB,WAztBP,WACE,MAAO,IAytBTnkB,GAAOokB,WAzsBP,WACE,MAAO,IAysBTpkB,GAAOqkB,SAzrBP,WACE,OAAO,GAyrBTrkB,GAAO2e,SAAWA,GAClB3e,GAAOskB,IA77RP,SAAa93L,EAAOuC,GAClB,OAAQvC,GAASA,EAAMhC,OAAUwhL,GAAQx/K,EAAOyoL,GAAUlmL,IAAMtK,GA67RlEu7K,GAAOukB,WAliCP,WAIE,OAHIrkL,GAAKwG,IAAM/d,OACbuX,GAAKwG,EAAI62J,IAEJ50K,MA+hCTq3K,GAAO5oB,KAAOA,GACd4oB,GAAOv3H,IAAMA,GACbu3H,GAAOza,IAj5EP,SAAar2J,EAAQ1E,EAAQ4pL,GAC3BllL,EAAStF,GAASsF,GAGlB,IAAIs1L,GAFJh6L,EAASyqL,GAAUzqL,IAEM6xK,GAAWntK,GAAU,EAC9C,IAAK1E,GAAUg6L,GAAah6L,EAC1B,OAAO0E,EAET,IAAIk/K,GAAO5jL,EAASg6L,GAAa,EACjC,OACErQ,GAAc5V,GAAY6P,GAAMgG,GAChCllL,EACAilL,GAAc7V,GAAW8P,GAAMgG,IAs4EnCpU,GAAOykB,OA32EP,SAAgBv1L,EAAQ1E,EAAQ4pL,GAC9BllL,EAAStF,GAASsF,GAGlB,IAAIs1L,GAFJh6L,EAASyqL,GAAUzqL,IAEM6xK,GAAWntK,GAAU,EAC9C,OAAQ1E,GAAUg6L,EAAYh6L,EACzB0E,EAASilL,GAAc3pL,EAASg6L,EAAWpQ,GAC5CllL,GAq2EN8wK,GAAO0kB,SA30EP,SAAkBx1L,EAAQ1E,EAAQ4pL,GAChCllL,EAAStF,GAASsF,GAGlB,IAAIs1L,GAFJh6L,EAASyqL,GAAUzqL,IAEM6xK,GAAWntK,GAAU,EAC9C,OAAQ1E,GAAUg6L,EAAYh6L,EACzB2pL,GAAc3pL,EAASg6L,EAAWpQ,GAASllL,EAC5CA,GAq0EN8wK,GAAOz7H,SA1yEP,SAAkBr1C,EAAQy1L,EAAOlT,GAM/B,OALIA,GAAkB,MAATkT,EACXA,EAAQ,EACCA,IACTA,GAASA,GAEJ1lB,GAAer1K,GAASsF,GAAQqyE,QAAQwyF,GAAa,IAAK4wB,GAAS,IAqyE5E3kB,GAAO7kG,OA1rFP,SAAgBioG,EAAOC,EAAOuhB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyBlT,GAAetO,EAAOC,EAAOuhB,KAC3EvhB,EAAQuhB,EAAWngM,GAEjBmgM,IAAangM,IACK,kBAAT4+K,GACTuhB,EAAWvhB,EACXA,EAAQ5+K,GAEe,kBAAT2+K,IACdwhB,EAAWxhB,EACXA,EAAQ3+K,IAGR2+K,IAAU3+K,GAAa4+K,IAAU5+K,GACnC2+K,EAAQ,EACRC,EAAQ,IAGRD,EAAQmR,GAASnR,GACbC,IAAU5+K,GACZ4+K,EAAQD,EACRA,EAAQ,GAERC,EAAQkR,GAASlR,IAGjBD,EAAQC,EAAO,CACjB,IAAIzuB,EAAOwuB,EACXA,EAAQC,EACRA,EAAQzuB,EAEV,GAAIgwC,GAAYxhB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAIoU,EAAOvY,KACX,OAAOH,GAAUqE,EAASqU,GAAQpU,EAAQD,EAAQ1L,GAAe,QAAU+f,EAAO,IAAIjtL,OAAS,KAAO64K,GAExG,OAAOnB,GAAWkB,EAAOC,IAupF3BrD,GAAO1rK,OA5+NP,SAAgBlH,EAAYgsK,EAAUx0F,GACpC,IAAI/xD,EAAOxoB,GAAQ+C,GAAc0sK,GAAciB,GAC3ChB,EAAY1tK,UAAU7B,OAAS,EAEnC,OAAOqoB,EAAKzlB,EAAYg/K,GAAYhT,EAAU,GAAIx0F,EAAam1F,EAAW+I,KAy+N5E9C,GAAOj1J,YAh9NP,SAAqB3d,EAAYgsK,EAAUx0F,GACzC,IAAI/xD,EAAOxoB,GAAQ+C,GAAc4sK,GAAmBe,GAChDhB,EAAY1tK,UAAU7B,OAAS,EAEnC,OAAOqoB,EAAKzlB,EAAYg/K,GAAYhT,EAAU,GAAIx0F,EAAam1F,EAAWmM,KA68N5ElG,GAAO6kB,OA/wEP,SAAgB31L,EAAQH,EAAG0iL,GAMzB,OAJE1iL,GADG0iL,EAAQC,GAAexiL,EAAQH,EAAG0iL,GAAS1iL,IAAMtK,GAChD,EAEAwwL,GAAUlmL,GAETq+K,GAAWxjL,GAASsF,GAASH,IA0wEtCixK,GAAOz+F,QApvEP,WACE,IAAI5tD,EAAOtnB,UACP6C,EAAStF,GAAS+pB,EAAK,IAE3B,OAAOA,EAAKnpB,OAAS,EAAI0E,EAASA,EAAOqyE,QAAQ5tD,EAAK,GAAIA,EAAK,KAivEjEqsJ,GAAOzjK,OAtoGP,SAAgBzP,EAAQ4lH,EAAMxsE,GAG5B,IAAIphD,GAAS,EACT0F,GAHJkoH,EAAOu0D,GAASv0D,EAAM5lH,IAGJtC,OAOlB,IAJKA,IACHA,EAAS,EACTsC,EAASrI,KAEFK,EAAQ0F,GAAQ,CACvB,IAAInG,EAAkB,MAAVyI,EAAiBrI,EAAYqI,EAAOo6K,GAAMx0D,EAAK5tH,KACvDT,IAAUI,IACZK,EAAQ0F,EACRnG,EAAQ6hD,GAEVp5C,EAASi6K,GAAW1iL,GAASA,EAAMsF,KAAKmD,GAAUzI,EAEpD,OAAOyI,GAonGTkzK,GAAOl7F,MAAQA,GACfk7F,GAAOrD,aAAeA,EACtBqD,GAAO8kB,OA15NP,SAAgB13L,GAEd,OADW/C,GAAQ+C,GAAc60K,GAAcuL,IACnCpgL,IAy5Nd4yK,GAAOt7K,KA/0NP,SAAc0I,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAIjD,GAAYiD,GACd,OAAOmuL,GAASnuL,GAAcivK,GAAWjvK,GAAcA,EAAW5C,OAEpE,IAAIq5K,EAAMC,GAAO12K,GACjB,OAAIy2K,GAAOjS,GAAUiS,GAAO5R,EACnB7kK,EAAW1I,KAEbmmL,GAASz9K,GAAY5C,QAq0N9Bw1K,GAAOmd,UAAYA,GACnBnd,GAAO5pK,KA/xNP,SAAchJ,EAAY2F,EAAW0+K,GACnC,IAAI5+J,EAAOxoB,GAAQ+C,GAAc6sK,GAAY8T,GAI7C,OAHI0D,GAASC,GAAetkL,EAAY2F,EAAW0+K,KACjD1+K,EAAYtO,GAEPouB,EAAKzlB,EAAYg/K,GAAYr5K,EAAW,KA2xNjDitK,GAAO+kB,YAhsRP,SAAqBv4L,EAAOnI,GAC1B,OAAO2pL,GAAgBxhL,EAAOnI,IAgsRhC27K,GAAOglB,cApqRP,SAAuBx4L,EAAOnI,EAAO+0K,GACnC,OAAOiV,GAAkB7hL,EAAOnI,EAAO+nL,GAAYhT,EAAU,KAoqR/D4G,GAAOilB,cAjpRP,SAAuBz4L,EAAOnI,GAC5B,IAAImG,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACvC,GAAIA,EAAQ,CACV,IAAI1F,EAAQkpL,GAAgBxhL,EAAOnI,GACnC,GAAIS,EAAQ0F,GAAU2/B,GAAG39B,EAAM1H,GAAQT,GACrC,OAAOS,EAGX,OAAQ,GA0oRVk7K,GAAOklB,gBArnRP,SAAyB14L,EAAOnI,GAC9B,OAAO2pL,GAAgBxhL,EAAOnI,GAAO,IAqnRvC27K,GAAOmlB,kBAzlRP,SAA2B34L,EAAOnI,EAAO+0K,GACvC,OAAOiV,GAAkB7hL,EAAOnI,EAAO+nL,GAAYhT,EAAU,IAAI,IAylRnE4G,GAAOolB,kBAtkRP,SAA2B54L,EAAOnI,GAEhC,GADsB,MAATmI,EAAgB,EAAIA,EAAMhC,OAC3B,CACV,IAAI1F,EAAQkpL,GAAgBxhL,EAAOnI,GAAO,GAAQ,EAClD,GAAI8lC,GAAG39B,EAAM1H,GAAQT,GACnB,OAAOS,EAGX,OAAQ,GA+jRVk7K,GAAOod,UAAYA,GACnBpd,GAAOqlB,WA3oEP,SAAoBn2L,EAAQymB,EAAQiwF,GAOlC,OANA12G,EAAStF,GAASsF,GAClB02G,EAAuB,MAAZA,EACP,EACA08D,GAAU2S,GAAUrvE,GAAW,EAAG12G,EAAO1E,QAE7CmrB,EAASs5J,GAAat5J,GACfzmB,EAAOuJ,MAAMmtG,EAAUA,EAAWjwF,EAAOnrB,SAAWmrB,GAqoE7DqqJ,GAAO93J,SAAWA,GAClB83J,GAAOzrK,IAzUP,SAAa/H,GACX,OAAQA,GAASA,EAAMhC,OACnBqwK,GAAQruK,EAAOg9C,IACf,GAuUNw2H,GAAOslB,MA7SP,SAAe94L,EAAO4sK,GACpB,OAAQ5sK,GAASA,EAAMhC,OACnBqwK,GAAQruK,EAAO4/K,GAAYhT,EAAU,IACrC,GA2SN4G,GAAOulB,SA7hEP,SAAkBr2L,EAAQylC,EAAS88I,GAIjC,IAAI+T,EAAWxlB,GAAO4F,iBAElB6L,GAASC,GAAexiL,EAAQylC,EAAS88I,KAC3C98I,EAAUlwC,GAEZyK,EAAStF,GAASsF,GAClBylC,EAAUonJ,GAAa,GAAIpnJ,EAAS6wJ,EAAU3P,IAE9C,IAII4P,EACAC,EALAC,EAAU5J,GAAa,GAAIpnJ,EAAQgxJ,QAASH,EAASG,QAAS9P,IAC9D+P,EAAcn7L,GAAKk7L,GACnBE,EAAgBzqB,GAAWuqB,EAASC,GAIpC9gM,EAAQ,EACRk/C,EAAcrP,EAAQqP,aAAe+wH,GACrCn/I,EAAS,WAGTkwK,EAAeriJ,IAChB9O,EAAQg3G,QAAUopB,IAAWn/I,OAAS,IACvCouB,EAAYpuB,OAAS,KACpBouB,IAAgByvH,GAAgBc,GAAeQ,IAAWn/I,OAAS,KACnE+e,EAAQoxJ,UAAYhxB,IAAWn/I,OAAS,KACzC,KAMEowK,EAAY,kBACb97L,GAAeP,KAAKgrC,EAAS,cACzBA,EAAQqxJ,UAAY,IAAIzkH,QAAQ,MAAO,KACvC,6BAA+B+1F,GAAmB,KACnD,KAENpoK,EAAOqyE,QAAQukH,GAAc,SAAS5uJ,EAAOg8G,EAAa+yC,EAAkBC,EAAiBC,EAAe1vL,GAsB1G,OArBAwvL,IAAqBA,EAAmBC,GAGxCtwK,GAAU1mB,EAAOuJ,MAAM3T,EAAO2R,GAAQ8qE,QAAQyzF,GAAmB6G,IAG7D3oB,IACFuyC,GAAa,EACb7vK,GAAU,YAAcs9H,EAAc,UAEpCizC,IACFT,GAAe,EACf9vK,GAAU,OAASuwK,EAAgB,eAEjCF,IACFrwK,GAAU,iBAAmBqwK,EAAmB,+BAElDnhM,EAAQ2R,EAASygC,EAAM1sC,OAIhB0sC,KAGTthB,GAAU,OAIV,IAAIwwK,EAAWl8L,GAAeP,KAAKgrC,EAAS,aAAeA,EAAQyxJ,SACnE,GAAKA,GAKA,GAAI/xB,GAA2B3wH,KAAK0iJ,GACvC,MAAM,IAAI71L,EA3idmB,2DAsid7BqlB,EAAS,iBAAmBA,EAAS,QASvCA,GAAU8vK,EAAe9vK,EAAO2rD,QAAQyxF,EAAsB,IAAMp9I,GACjE2rD,QAAQ0xF,EAAqB,MAC7B1xF,QAAQ2xF,EAAuB,OAGlCt9I,EAAS,aAAewwK,GAAY,OAAS,SAC1CA,EACG,GACA,wBAEJ,qBACCX,EACI,mBACA,KAEJC,EACG,uFAEA,OAEJ9vK,EACA,gBAEF,IAAIrZ,EAASmhL,IAAQ,WACnB,OAAO1lB,GAAS4tB,EAAaI,EAAY,UAAYpwK,GAClDhlB,MAAMnM,EAAWohM,MAMtB,GADAtpL,EAAOqZ,OAASA,EACZ0lK,GAAQ/+K,GACV,MAAMA,EAER,OAAOA,GA46DTyjK,GAAOnuJ,MApsBP,SAAe9iB,EAAGqqK,GAEhB,IADArqK,EAAIkmL,GAAUlmL,IACN,GAAKA,EAAIkiK,EACf,MAAO,GAET,IAAInsK,EAAQqsK,EACR3mK,EAASu0K,GAAUhwK,EAAGoiK,GAE1BiI,EAAWgT,GAAYhT,GACvBrqK,GAAKoiK,EAGL,IADA,IAAI50J,EAASy+J,GAAUxwK,EAAQ4uK,KACtBt0K,EAAQiK,GACfqqK,EAASt0K,GAEX,OAAOyX,GAsrBTyjK,GAAOuU,SAAWA,GAClBvU,GAAOiV,UAAYA,GACnBjV,GAAO4b,SAAWA,GAClB5b,GAAOqmB,QAx5DP,SAAiBhiM,GACf,OAAOuF,GAASvF,GAAO09C,eAw5DzBi+H,GAAOp3D,SAAWA,GAClBo3D,GAAOsmB,cApuIP,SAAuBjiM,GACrB,OAAOA,EACHi+K,GAAU2S,GAAU5wL,IAAQ,iBAAmB4sK,GACpC,IAAV5sK,EAAcA,EAAQ,GAkuI7B27K,GAAOp2K,SAAWA,GAClBo2K,GAAOumB,QAn4DP,SAAiBliM,GACf,OAAOuF,GAASvF,GAAO2uI,eAm4DzBgtC,GAAO74C,KA12DP,SAAcj4H,EAAQklL,EAAO3C,GAE3B,IADAviL,EAAStF,GAASsF,MACHuiL,GAAS2C,IAAU3vL,GAChC,OAAOw2K,GAAS/rK,GAElB,IAAKA,KAAYklL,EAAQnF,GAAamF,IACpC,OAAOllL,EAET,IAAIqsK,EAAagB,GAAcrtK,GAC3BssK,EAAae,GAAc6X,GAI/B,OAAOnE,GAAU1U,EAHLD,GAAgBC,EAAYC,GAC9BC,GAAcF,EAAYC,GAAc,GAETpxJ,KAAK,KA81DhD41J,GAAOwmB,QAx0DP,SAAiBt3L,EAAQklL,EAAO3C,GAE9B,IADAviL,EAAStF,GAASsF,MACHuiL,GAAS2C,IAAU3vL,GAChC,OAAOyK,EAAOuJ,MAAM,EAAGyiK,GAAgBhsK,GAAU,GAEnD,IAAKA,KAAYklL,EAAQnF,GAAamF,IACpC,OAAOllL,EAET,IAAIqsK,EAAagB,GAAcrtK,GAG/B,OAAO+gL,GAAU1U,EAAY,EAFnBE,GAAcF,EAAYgB,GAAc6X,IAAU,GAEvBhqK,KAAK,KA8zD5C41J,GAAOymB,UAxyDP,SAAmBv3L,EAAQklL,EAAO3C,GAEhC,IADAviL,EAAStF,GAASsF,MACHuiL,GAAS2C,IAAU3vL,GAChC,OAAOyK,EAAOqyE,QAAQwyF,GAAa,IAErC,IAAK7kK,KAAYklL,EAAQnF,GAAamF,IACpC,OAAOllL,EAET,IAAIqsK,EAAagB,GAAcrtK,GAG/B,OAAO+gL,GAAU1U,EAFLD,GAAgBC,EAAYgB,GAAc6X,KAElBhqK,KAAK,KA8xD3C41J,GAAO0mB,SAtvDP,SAAkBx3L,EAAQylC,GACxB,IAAInqC,EAnvdmB,GAovdnBm8L,EAnvdqB,MAqvdzB,GAAIrmB,GAAS3rI,GAAU,CACrB,IAAIjqB,EAAY,cAAeiqB,EAAUA,EAAQjqB,UAAYA,EAC7DlgB,EAAS,WAAYmqC,EAAUsgJ,GAAUtgJ,EAAQnqC,QAAUA,EAC3Dm8L,EAAW,aAAchyJ,EAAUs6I,GAAat6I,EAAQgyJ,UAAYA,EAItE,IAAInC,GAFJt1L,EAAStF,GAASsF,IAEK1E,OACvB,GAAIuxK,GAAW7sK,GAAS,CACtB,IAAIqsK,EAAagB,GAAcrtK,GAC/Bs1L,EAAYjpB,EAAW/wK,OAEzB,GAAIA,GAAUg6L,EACZ,OAAOt1L,EAET,IAAI/J,EAAMqF,EAAS6xK,GAAWsqB,GAC9B,GAAIxhM,EAAM,EACR,OAAOwhM,EAET,IAAIpqL,EAASg/J,EACT0U,GAAU1U,EAAY,EAAGp2K,GAAKilB,KAAK,IACnClb,EAAOuJ,MAAM,EAAGtT,GAEpB,GAAIulB,IAAcjmB,EAChB,OAAO8X,EAASoqL,EAKlB,GAHIprB,IACFp2K,GAAQoX,EAAO/R,OAASrF,GAEtB2zK,GAASpuJ,IACX,GAAIxb,EAAOuJ,MAAMtT,GAAKyhM,OAAOl8K,GAAY,CACvC,IAAIwsB,EACAkkC,EAAY7+D,EAMhB,IAJKmO,EAAUmtJ,SACbntJ,EAAY+4B,GAAO/4B,EAAUkL,OAAQhsB,GAAS4qK,GAAQ9f,KAAKhqI,IAAc,MAE3EA,EAAUiqI,UAAY,EACdz9G,EAAQxsB,EAAUgqI,KAAKt5E,IAC7B,IAAIyrH,EAAS3vJ,EAAMpyC,MAErByX,EAASA,EAAO9D,MAAM,EAAGouL,IAAWpiM,EAAYU,EAAM0hM,SAEnD,GAAI33L,EAAOia,QAAQ8lK,GAAavkK,GAAYvlB,IAAQA,EAAK,CAC9D,IAAIL,EAAQyX,EAAO8M,YAAYqB,GAC3B5lB,GAAS,IACXyX,EAASA,EAAO9D,MAAM,EAAG3T,IAG7B,OAAOyX,EAASoqL,GAksDlB3mB,GAAO8mB,SA5qDP,SAAkB53L,GAEhB,OADAA,EAAStF,GAASsF,KACAmkK,EAAiB3vH,KAAKx0C,GACpCA,EAAOqyE,QAAQ4xF,EAAeuJ,IAC9BxtK,GAyqDN8wK,GAAO+mB,SAvpBP,SAAkBzgJ,GAChB,IAAI1c,IAAOszI,GACX,OAAOtzK,GAAS08C,GAAU1c,GAspB5Bo2I,GAAOqd,UAAYA,GACnBrd,GAAO+c,WAAaA,GAGpB/c,GAAOgnB,KAAO3xL,GACd2qK,GAAOinB,UAAYjO,GACnBhZ,GAAOj0J,MAAQpG,GAEfkB,GAAMm5J,GAAS,WACb,IAAIpqJ,EAAS,GAMb,OALAqwJ,GAAWjG,IAAQ,SAASntJ,EAAM6e,GAC3BxnC,GAAeP,KAAKq2K,GAAOl5K,UAAW4qC,KACzC9b,EAAO8b,GAAc7e,MAGlB+C,EAPM,GAQT,CAAE,OAAS,IAWjBoqJ,GAAOknB,QA/ihBK,UAkjhBZ7tB,GAAU,CAAC,OAAQ,UAAW,QAAS,aAAc,UAAW,iBAAiB,SAAS3nI,GACxFsuI,GAAOtuI,GAAYiiF,YAAcqsD,MAInC3G,GAAU,CAAC,OAAQ,SAAS,SAAS3nI,EAAY5sC,GAC/Co7K,GAAYp5K,UAAU4qC,GAAc,SAAS3iC,GAC3CA,EAAIA,IAAMtK,EAAY,EAAIq6K,GAAUmW,GAAUlmL,GAAI,GAElD,IAAIwN,EAAU5T,KAAKo4K,eAAiBj8K,EAChC,IAAIo7K,GAAYv3K,MAChBA,KAAKw6C,QAUT,OARI5mC,EAAOwkK,aACTxkK,EAAO0kK,cAAgBlC,GAAUhwK,EAAGwN,EAAO0kK,eAE3C1kK,EAAO2kK,UAAUnsK,KAAK,CACpB,KAAQgqK,GAAUhwK,EAAGoiK,GACrB,KAAQz/H,GAAcn1B,EAAOukK,QAAU,EAAI,QAAU,MAGlDvkK,GAGT2jK,GAAYp5K,UAAU4qC,EAAa,SAAW,SAAS3iC,GACrD,OAAOpG,KAAK8C,UAAUimC,GAAY3iC,GAAGtD,cAKzC4tK,GAAU,CAAC,SAAU,MAAO,cAAc,SAAS3nI,EAAY5sC,GAC7D,IAAI+D,EAAO/D,EAAQ,EACfqiM,EAjihBe,GAiihBJt+L,GA/hhBG,GA+hhByBA,EAE3Cq3K,GAAYp5K,UAAU4qC,GAAc,SAAS0nI,GAC3C,IAAI78J,EAAS5T,KAAKw6C,QAMlB,OALA5mC,EAAOykK,cAAcjsK,KAAK,CACxB,SAAYq3K,GAAYhT,EAAU,GAClC,KAAQvwK,IAEV0T,EAAOwkK,aAAexkK,EAAOwkK,cAAgBomB,EACtC5qL,MAKX88J,GAAU,CAAC,OAAQ,SAAS,SAAS3nI,EAAY5sC,GAC/C,IAAIsiM,EAAW,QAAUtiM,EAAQ,QAAU,IAE3Co7K,GAAYp5K,UAAU4qC,GAAc,WAClC,OAAO/oC,KAAKy+L,GAAU,GAAG/iM,QAAQ,OAKrCg1K,GAAU,CAAC,UAAW,SAAS,SAAS3nI,EAAY5sC,GAClD,IAAIuiM,EAAW,QAAUviM,EAAQ,GAAK,SAEtCo7K,GAAYp5K,UAAU4qC,GAAc,WAClC,OAAO/oC,KAAKo4K,aAAe,IAAIb,GAAYv3K,MAAQA,KAAK0+L,GAAU,OAItEnnB,GAAYp5K,UAAUo4L,QAAU,WAC9B,OAAOv2L,KAAKuL,OAAOs1C,KAGrB02H,GAAYp5K,UAAUwjB,KAAO,SAASvX,GACpC,OAAOpK,KAAKuL,OAAOnB,GAAW4S,QAGhCu6J,GAAYp5K,UAAU8kB,SAAW,SAAS7Y,GACxC,OAAOpK,KAAK8C,UAAU6e,KAAKvX,IAG7BmtK,GAAYp5K,UAAUmyL,UAAY5L,IAAS,SAAS36D,EAAM/+F,GACxD,MAAmB,mBAAR++F,EACF,IAAIwtD,GAAYv3K,MAElBA,KAAKgJ,KAAI,SAAStN,GACvB,OAAOgkL,GAAWhkL,EAAOquH,EAAM/+F,SAInCusJ,GAAYp5K,UAAUg4E,OAAS,SAAS/rE,GACtC,OAAOpK,KAAKuL,OAAO2mL,GAAOzO,GAAYr5K,MAGxCmtK,GAAYp5K,UAAU2R,MAAQ,SAASiQ,EAAOvjB,GAC5CujB,EAAQusK,GAAUvsK,GAElB,IAAInM,EAAS5T,KACb,OAAI4T,EAAOwkK,eAAiBr4J,EAAQ,GAAKvjB,EAAM,GACtC,IAAI+6K,GAAY3jK,IAErBmM,EAAQ,EACVnM,EAASA,EAAO+kL,WAAW54K,GAClBA,IACTnM,EAASA,EAAOkjL,KAAK/2K,IAEnBvjB,IAAQV,IAEV8X,GADApX,EAAM8vL,GAAU9vL,IACD,EAAIoX,EAAOmjL,WAAWv6L,GAAOoX,EAAOgR,KAAKpoB,EAAMujB,IAEzDnM,IAGT2jK,GAAYp5K,UAAUy6L,eAAiB,SAASxuL,GAC9C,OAAOpK,KAAK8C,UAAUgiB,UAAU1a,GAAWtH,WAG7Cy0K,GAAYp5K,UAAUyE,QAAU,WAC9B,OAAO5C,KAAK4kB,KAAK4jJ,IAInB8U,GAAW/F,GAAYp5K,WAAW,SAAS+rB,EAAM6e,GAC/C,IAAI41J,EAAgB,qCAAqC5jJ,KAAKhS,GAC1D61J,EAAU,kBAAkB7jJ,KAAKhS,GACjC81J,EAAaxnB,GAAOunB,EAAW,QAAwB,QAAd71J,EAAuB,QAAU,IAAOA,GACjF+1J,EAAeF,GAAW,QAAQ7jJ,KAAKhS,GAEtC81J,IAGLxnB,GAAOl5K,UAAU4qC,GAAc,WAC7B,IAAIrtC,EAAQsE,KAAK83K,YACb9sJ,EAAO4zK,EAAU,CAAC,GAAKl7L,UACvBq7L,EAASrjM,aAAiB67K,GAC1B9G,EAAWzlJ,EAAK,GAChBg0K,EAAUD,GAAUr9L,GAAQhG,GAE5By0L,EAAc,SAASz0L,GACzB,IAAIkY,EAASirL,EAAW52L,MAAMovK,GAAQ5tG,GAAU,CAAC/tE,GAAQsvB,IACzD,OAAQ4zK,GAAW/mB,EAAYjkK,EAAO,GAAKA,GAGzCorL,GAAWL,GAAoC,mBAAZluB,GAA6C,GAAnBA,EAAS5uK,SAExEk9L,EAASC,GAAU,GAErB,IAAInnB,EAAW73K,KAAKg4K,UAChBinB,IAAaj/L,KAAK+3K,YAAYl2K,OAC9Bq9L,EAAcJ,IAAiBjnB,EAC/BsnB,EAAWJ,IAAWE,EAE1B,IAAKH,GAAgBE,EAAS,CAC5BtjM,EAAQyjM,EAAWzjM,EAAQ,IAAI67K,GAAYv3K,MAC3C,IAAI4T,EAASsW,EAAKjiB,MAAMvM,EAAOsvB,GAE/B,OADApX,EAAOmkK,YAAY3rK,KAAK,CAAE,KAAQw9K,GAAM,KAAQ,CAACuG,GAAc,QAAWr0L,IACnE,IAAI07K,GAAc5jK,EAAQikK,GAEnC,OAAIqnB,GAAeC,EACVj1K,EAAKjiB,MAAMjI,KAAMgrB,IAE1BpX,EAAS5T,KAAK4pL,KAAKuG,GACZ+O,EAAeN,EAAUhrL,EAAOlY,QAAQ,GAAKkY,EAAOlY,QAAWkY,QAK1E88J,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,YAAY,SAAS3nI,GACxE,IAAI7e,EAAOgqJ,GAAWnrI,GAClBq2J,EAAY,0BAA0BrkJ,KAAKhS,GAAc,MAAQ,OACjE+1J,EAAe,kBAAkB/jJ,KAAKhS,GAE1CsuI,GAAOl5K,UAAU4qC,GAAc,WAC7B,IAAI/d,EAAOtnB,UACX,GAAIo7L,IAAiB9+L,KAAKg4K,UAAW,CACnC,IAAIt8K,EAAQsE,KAAKtE,QACjB,OAAOwuB,EAAKjiB,MAAMvG,GAAQhG,GAASA,EAAQ,GAAIsvB,GAEjD,OAAOhrB,KAAKo/L,IAAW,SAAS1jM,GAC9B,OAAOwuB,EAAKjiB,MAAMvG,GAAQhG,GAASA,EAAQ,GAAIsvB,UAMrDsyJ,GAAW/F,GAAYp5K,WAAW,SAAS+rB,EAAM6e,GAC/C,IAAI81J,EAAaxnB,GAAOtuI,GACxB,GAAI81J,EAAY,CACd,IAAIv6L,EAAMu6L,EAAWrwL,KAAO,GACvBjN,GAAeP,KAAK41K,GAAWtyK,KAClCsyK,GAAUtyK,GAAO,IAEnBsyK,GAAUtyK,GAAK8H,KAAK,CAAE,KAAQ28B,EAAY,KAAQ81J,QAItDjoB,GAAUsT,GAAapuL,EAlthBA,GAkthB+B0S,MAAQ,CAAC,CAC7D,KAAQ,UACR,KAAQ1S,IAIVy7K,GAAYp5K,UAAUq8C,MAh9dtB,WACE,IAAI5mC,EAAS,IAAI2jK,GAAYv3K,KAAK83K,aAOlC,OANAlkK,EAAOmkK,YAAc2B,GAAU15K,KAAK+3K,aACpCnkK,EAAOukK,QAAUn4K,KAAKm4K,QACtBvkK,EAAOwkK,aAAep4K,KAAKo4K,aAC3BxkK,EAAOykK,cAAgBqB,GAAU15K,KAAKq4K,eACtCzkK,EAAO0kK,cAAgBt4K,KAAKs4K,cAC5B1kK,EAAO2kK,UAAYmB,GAAU15K,KAAKu4K,WAC3B3kK,GAy8dT2jK,GAAYp5K,UAAU2E,QA97dtB,WACE,GAAI9C,KAAKo4K,aAAc,CACrB,IAAIxkK,EAAS,IAAI2jK,GAAYv3K,MAC7B4T,EAAOukK,SAAW,EAClBvkK,EAAOwkK,cAAe,OAEtBxkK,EAAS5T,KAAKw6C,SACP29H,UAAY,EAErB,OAAOvkK,GAs7dT2jK,GAAYp5K,UAAUzC,MA36dtB,WACE,IAAImI,EAAQ7D,KAAK83K,YAAYp8K,QACzBi1J,EAAM3wJ,KAAKm4K,QACXY,EAAQr3K,GAAQmC,GAChBw7L,EAAU1uC,EAAM,EAChB08B,EAAYtU,EAAQl1K,EAAMhC,OAAS,EACnCy9L,EA8pIN,SAAiBv/K,EAAOvjB,EAAK41L,GAC3B,IAAIj2L,GAAS,EACT0F,EAASuwL,EAAWvwL,OAExB,OAAS1F,EAAQ0F,GAAQ,CACvB,IAAIm5C,EAAOo3I,EAAWj2L,GAClBJ,EAAOi/C,EAAKj/C,KAEhB,OAAQi/C,EAAK96C,MACX,IAAK,OAAa6f,GAAShkB,EAAM,MACjC,IAAK,YAAaS,GAAOT,EAAM,MAC/B,IAAK,OAAaS,EAAM45K,GAAU55K,EAAKujB,EAAQhkB,GAAO,MACtD,IAAK,YAAagkB,EAAQo2J,GAAUp2J,EAAOvjB,EAAMT,IAGrD,MAAO,CAAE,MAASgkB,EAAO,IAAOvjB,GA7qIrB+iM,CAAQ,EAAGlS,EAAWrtL,KAAKu4K,WAClCx4J,EAAQu/K,EAAKv/K,MACbvjB,EAAM8iM,EAAK9iM,IACXqF,EAASrF,EAAMujB,EACf5jB,EAAQkjM,EAAU7iM,EAAOujB,EAAQ,EACjCwjK,EAAYvjL,KAAKq4K,cACjBmnB,EAAajc,EAAU1hL,OACvBivK,EAAW,EACX2uB,EAAYrpB,GAAUv0K,EAAQ7B,KAAKs4K,eAEvC,IAAKS,IAAWsmB,GAAWhS,GAAaxrL,GAAU49L,GAAa59L,EAC7D,OAAOglL,GAAiBhjL,EAAO7D,KAAK+3K,aAEtC,IAAInkK,EAAS,GAEbkpK,EACA,KAAOj7K,KAAYivK,EAAW2uB,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACbhkM,EAAQmI,EAHZ1H,GAASw0J,KAKA+uC,EAAYF,GAAY,CAC/B,IAAIxkJ,EAAOuoI,EAAUmc,GACjBjvB,EAAWz1H,EAAKy1H,SAChBvwK,EAAO86C,EAAK96C,KACZ68K,EAAWtM,EAAS/0K,GAExB,GA7zDY,GA6zDRwE,EACFxE,EAAQqhL,OACH,IAAKA,EAAU,CACpB,GAj0Da,GAi0DT78K,EACF,SAAS48K,EAET,MAAMA,GAIZlpK,EAAOk9J,KAAcp1K,EAEvB,OAAOkY,GAg4dTyjK,GAAOl5K,UAAUm1L,GAAKlD,GACtB/Y,GAAOl5K,UAAUwnB,MA1iQjB,WACE,OAAOA,GAAM3lB,OA0iQfq3K,GAAOl5K,UAAUwhM,OA7gQjB,WACE,OAAO,IAAInoB,GAAcx3K,KAAKtE,QAASsE,KAAKg4K,YA6gQ9CX,GAAOl5K,UAAU4B,KAp/PjB,WACMC,KAAKk4K,aAAep8K,IACtBkE,KAAKk4K,WAAat1K,GAAQ5C,KAAKtE,UAEjC,IAAI4E,EAAON,KAAKi4K,WAAaj4K,KAAKk4K,WAAWr2K,OAG7C,MAAO,CAAE,KAAQvB,EAAM,MAFXA,EAAOxE,EAAYkE,KAAKk4K,WAAWl4K,KAAKi4K,eAg/PtDZ,GAAOl5K,UAAU8rL,MA77PjB,SAAsBvuL,GAIpB,IAHA,IAAIkY,EACA8oC,EAAS18C,KAEN08C,aAAkBk7H,IAAY,CACnC,IAAIp9H,EAAQi9H,GAAa/6H,GACzBlC,EAAMy9H,UAAY,EAClBz9H,EAAM09H,WAAap8K,EACf8X,EACF2wK,EAASzM,YAAct9H,EAEvB5mC,EAAS4mC,EAEX,IAAI+pI,EAAW/pI,EACfkC,EAASA,EAAOo7H,YAGlB,OADAyM,EAASzM,YAAcp8K,EAChBkY,GA66PTyjK,GAAOl5K,UAAU2E,QAt5PjB,WACE,IAAIpH,EAAQsE,KAAK83K,YACjB,GAAIp8K,aAAiB67K,GAAa,CAChC,IAAIqoB,EAAUlkM,EAUd,OATIsE,KAAK+3K,YAAYl2K,SACnB+9L,EAAU,IAAIroB,GAAYv3K,QAE5B4/L,EAAUA,EAAQ98L,WACVi1K,YAAY3rK,KAAK,CACvB,KAAQw9K,GACR,KAAQ,CAAC9mL,IACT,QAAWhH,IAEN,IAAI07K,GAAcooB,EAAS5/L,KAAKg4K,WAEzC,OAAOh4K,KAAK4pL,KAAK9mL,KAw4PnBu0K,GAAOl5K,UAAUunB,OAAS2xJ,GAAOl5K,UAAUsH,QAAU4xK,GAAOl5K,UAAUzC,MAv3PtE,WACE,OAAOmrL,GAAiB7mL,KAAK83K,YAAa93K,KAAK+3K,cAy3PjDV,GAAOl5K,UAAUilB,MAAQi0J,GAAOl5K,UAAU6e,KAEtCo4J,KACFiC,GAAOl5K,UAAUi3K,IAj+PnB,WACE,OAAOp1K,OAk+PFq3K,GAMDrD,GAQNz8J,GAAKwG,EAAIA,IAIT8hL,aACE,OAAO9hL,IADH,oCAeR/c,KAAKhB,Q,0DCxzhBP,SAAS8/L,EAAMl+B,GACd,IAAIzhK,EAAGqrC,EAAGhjB,EAAI,GAEd,GAAmB,kBAARo5I,GAAmC,kBAARA,EACrCp5I,GAAOo5I,OACD,GAAmB,kBAARA,EACjB,GAAIngK,MAAMC,QAAQkgK,GACjB,IAAKzhK,EAAE,EAAGA,EAAIyhK,EAAI//J,OAAQ1B,IACrByhK,EAAIzhK,KACHqrC,EAAIs0J,EAAMl+B,EAAIzhK,OACjBqoB,IAAQA,GAAO,KACfA,GAAOgjB,QAKV,IAAKrrC,KAAKyhK,EACLA,EAAIzhK,KACPqoB,IAAQA,GAAO,KACfA,GAAOroB,GAMX,OAAOqoB,EAzBR,OA4Be,qBAEd,IADA,IAASu3K,EAAKloL,EAAV7U,EAAE,EAAWwlB,EAAI,GACdxlB,EAAIU,UAAU7B,SAChBk+L,EAAMr8L,UAAUV,QACf6U,EAAIioL,EAAMC,MACbv3K,IAAQA,GAAO,KACfA,GAAO3Q,GAIV,OAAO2Q,I,6BCtCR,w5CAoCIk3B,EApCJ,8CAsCaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,oDAA8G,CAC5G7Y,UAGGp0B,kBAGIotL,EAAsD,kBAAMntJ,YACvEotJ,KACA,SAACv6I,GAAD,OAA8BA,GAAUA,EAAO3hD,IAAI,qBAGxC23H,EAA0B,wEAKjC,GAHSwkE,EAFwB,EAEnCpmE,UAFmC,OAK1BjnF,YACX8iG,IACAwqD,KACA,SAAC92I,EAAkB+2I,GACjB,IAAMtmE,EAAmC,MAAvBomE,EAA8BA,EAAsBE,EACtE,OAAO/2I,GAAQA,EAAKtlD,IAAI,WAAYkU,kBAAQ0J,MAAK,SAAC0+K,GAAD,OAA4BA,EAAQt8L,IAAI,QAAU+1H,SAI1F8B,EAA4B,wEAKjC,GAHSskE,EAFwB,EAEnCpmE,UAFmC,OAK1BjnF,YACX+iG,IACAuqD,KACA,SAAC92I,EAAkB+2I,GACjB,IAAMtmE,EAAmC,MAAvBomE,EAA8BA,EAAsBE,EACtE,OAAO/2I,GAAQA,EAAKtlD,IAAI,WAAYkU,kBAAQ0J,MAAK,SAAC0+K,GAAD,OAA4BA,EAAQt8L,IAAI,QAAU+1H,SAI5FmmE,EAA4C,kBAAMptJ,YAC7D8M,IACAw7E,KACA,SAACn0F,EAA4Ck0F,GAA7C,OAAwEl0F,EAAMpmB,MAAM,CAAC,mBAAoBs6G,QAG9FolE,EAA0C,kBAAMztJ,YAC3D8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,qCAG/Cw8L,EAAmC,kBAAM1tJ,YACpD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,8BAG/Cy8L,EAAyB,kBAAM3tJ,YAC1C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,oBAG/Ck3H,EAAiB,kBAAMpoF,YAChC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,YAGjD08L,EAAuC,kBAAM5tJ,YACxD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,kCAG/C28L,EAAyC,kBAAM7tJ,YAC1D8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,oCAY/Co3H,EAA2B,kBAAMtoF,YAC5C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,sBAG/C48L,EAA+B,kBAAM9tJ,YAChD8M,IACAs7E,KACA,SAACj0F,EAA4Cg0F,GAC3C,OAAQA,GACN,KAAKvgG,OAAKghG,OACR,OAAOz0F,EAAMjjC,IAAI,wBAEnB,KAAK02B,OAAKkhG,eACR,OAAO30F,EAAMjjC,IAAI,0BAEnB,QACE,OAAOijC,EAAMjjC,IAAI,uBAMZs3H,EAAiC,kBAAMxoF,YAClD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,4BAG/Cw3H,EAAmC,kBAAM1oF,YAClD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,8BAIjD68L,EAAkB,kBAAM/tJ,YACnC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,QAAS6O,qBAGxDiuL,EAA+B,kBAAMhuJ,YAChD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,cAAe6O,qBAG9DkuL,EAA0B,kBAAMjuJ,YACzC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,gBAAiB6O,qBAGlEmuL,EAAyB,kBAAMluJ,YAC1C8M,IACAs7E,IACA2lE,IACAC,IACAC,KACA,SAAC95J,EAA4Cg0F,EAAYgmE,EAAgCC,EAAsCC,GAC7H,OAAQlmE,GACN,KAAKvgG,OAAKghG,OACR,OAAOz0F,EAAMjjC,IAAI,cAAe6O,iBAElC,KAAK6nB,OAAKkhG,eACR,OAAO30F,EAAMjjC,IAAI,gBAAiB6O,iBAEpC,QACE,OAAOo0B,EAAMjjC,IAAI,QAAS6O,sBAMrB+iI,EAA8B,wEAKrC,GAHMwrD,EAF+B,EAEvC3jG,OAFuC,OAK9B3qD,YACXguJ,IACAxlE,KACA,SAAC2lE,EAAgCxjG,GAAjC,OAAwE,MAApB2jG,EAA2BH,EAAMj9L,IAAIo9L,GAAoBH,EAAMj9L,IAAIy5F,OAE5Go4C,EAAgC,wEAKrC,GAHMurD,EAF+B,EAEvC3jG,OAFuC,OAK9B3qD,YACXiuJ,IACAvlE,KACA,SAACylE,EAAgCxjG,GAAjC,OAAwE,MAApB2jG,EAA2BH,EAAMj9L,IAAIo9L,GAAoBH,EAAMj9L,IAAIy5F,OAE9Gk4C,EAAiB,wEAKxB,GAHMyrD,EAFkB,EAE1B3jG,OAF0B,OAKjB3qD,YACX+tJ,IACAzlE,KACA,SAAC6lE,EAAgCxjG,GAC/B,OAA2B,MAApB2jG,EAA2BH,EAAMj9L,IAAIo9L,GAAoBH,EAAMj9L,IAAIy5F,OA0BjE2iG,EAA8B,kBAAMttJ,YAC/C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,yBAG/Cq9L,EAAqB,kBAAMvuJ,YACtC6iG,KACA,SAACrsF,GACC,OAAOA,GAAQA,EAAKtlD,IAAI,WAAYkU,sBA6B3B4jH,EAAoB,wEAK3B,GAHSqkE,EAFkB,EAE7BpmE,UAF6B,OAKpBjnF,YACX6iG,IACAyqD,IACAllE,IACA0a,IACAC,KACA,SAACvsF,EAAkB+2I,EAA2BplE,EAAY+a,EAAwBC,GAChF,IAAIqrD,EACJ,OAAQrmE,GACN,KAAKvgG,OAAKghG,OACR4lE,EAAYtrD,EACZ,MAEF,KAAKt7G,OAAKkhG,eACR0lE,EAAYrrD,EACZ,MAEF,QACEqrD,EAAYh4I,EAGhB,IAAMywE,EAAmC,MAAvBomE,EAA8BA,EAAsBE,EACtE,OAAOiB,GAAaA,EAAUt9L,IAAI,WAAYkU,kBAAQ0J,MAAK,SAAC0+K,GAAD,OAA4BA,EAAQt8L,IAAI,QAAU+1H,SAIpGwnE,EAAyB,wEAKhC,GALgC,EAElC9jG,OAFkC,OAKzB3qD,YACXooF,IACAya,IACAC,IACAC,KACA,SAAC5a,EAAY3xE,EAAiB0sF,EAAwBC,GACpD,IAAIqrD,EACJ,OAAQrmE,GACN,KAAKvgG,OAAKghG,OACR4lE,EAAYtrD,EACZ,MAEF,KAAKt7G,OAAKkhG,eACR0lE,EAAYrrD,EACZ,MAEF,QACEqrD,EAAYh4I,EAGhB,OAAOg4I,MAIEE,EAA6B,kBAAM1uJ,YAC9CyuJ,KACA,SAACj4I,GACC,OAAQA,GAAQz2C,iBAAO7O,IAAI,UAAW,MAI7By9L,EAAgC,wEAKvC,GAHKC,EAFkC,EAEzCtlM,MAFyC,OAKhC02C,YACXgpF,IACA6lE,eACA,SAACrB,EAAwBloE,GACvB,IAAMh8H,EAA2B,MAAnBslM,EAA0BA,EAAkBtpE,EAC1D,OAAc,OAAPkoE,QAAO,IAAPA,OAAA,EAAAA,EAASz/K,MAAM,CAAC,WAAYzkB,EAAO,0BAA2B8b,qBAI5D0pL,EAAyB,kBAAM9uJ,YAC1C8M,IACAwgJ,KACA,SACEn5J,EACA8yF,GAFF,OAGK9yF,EAAMpmB,MAAM,CAAC,eAAgBk5G,QAGvB8nE,EAA0B,kBAAM/uJ,YAC3C8M,KACA,SACE3Y,GADF,OAEKA,EAAMjjC,IAAI,qBAGJ89L,EAAwB,kBAAMhvJ,YACzC8M,KACA,SACE3Y,GADF,OAEKA,EAAMjjC,IAAI,sBAEJ+9L,EAA4B,kBAAMjvJ,YAC7C8uJ,KACA,SACEI,GADF,OAEKA,GAAgBA,EAAah+L,IAAI,YAAckU,qBAGzC+pL,EAAsB,kBAAMnvJ,YACvC8uJ,KACA,SACEI,GADF,OAEKA,GAAgBA,EAAah+L,IAAI,WAAakU,qBAaxCgqL,EAAqC,kBAAMpvJ,YACtD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,gCAG/Cm+L,EAA0B,kBAAMrvJ,YAC3C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,qBAG/Co+L,EAA2B,kBAAMtvJ,YAC5C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,sBAG/Cq+L,EAAyB,kBAAMvvJ,YAC1C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,oBAQ/Cs+L,EAAwC,kBAAMxvJ,YACzD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,mCAa/Cu+L,EAAuB,kBAAMzvJ,YACtC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,kBAajDw+L,EAA8B,kBAAM1vJ,YAC/C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,yBAG/Cy+L,EAAyB,kBAAM3vJ,YAC1C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,oBAG/C0+L,EAA6B,kBAAM5vJ,YAC5C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,+B,6BC1e9D,IAAK,GAAL,SAAK,GACH,mBACEwvJ,EAAUA,EAAZ,yBACEA,EAAUA,EAAZ,aACEA,EAAUA,EAAZ,sBACEA,EAAUA,EAAZ,wBACEA,EAAUA,EAAZ,oCACEA,EAAUA,EAAZ,kBACEA,EAAUA,EAAZ,wCACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,sBACEA,EAAUA,EAAZ,0BACEA,EAAUA,EAAZ,4BACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,kBACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,oBACEA,EAAUA,EAAZ,gCACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,cACEA,EAAUA,EAAZ,cACEA,EAAUA,EAAZ,kBACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,cACEA,EAAUA,EAAZ,kBACEA,EAAUA,EAAZ,kBACEA,EAAUA,EAAZ,gBACEA,EAAUA,EAAZ,wBACEA,EAAUA,EAAZ,8BACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,0CACEA,EAAUA,EAAZ,0BACEA,EAAUA,EAAZ,4CACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,UACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,WACEA,EAAUA,EAAZ,2BACEA,EAAUA,EAAZ,6BACEA,EAAUA,EAAZ,mBA1DF,CAAK,MAAS,KA6DC,O,s+BCvDA,kBACbmvC,EADa,EACbA,QACAC,EAFa,EAEbA,eACAC,EAHa,EAGbA,QACAC,EAJa,EAIbA,eAJa,OAUT,SAACnnM,GACL,IAAMonM,EAAgB,IAAI/0K,KAAKryB,GAO/B,OAAKqnM,YAAYD,GAGbJ,GAAWK,YAAYL,IAAYI,EAAgBJ,EAC5B,MAAlBC,EAAyBA,EAAiBh9F,IAAQ55E,EAAE,CAAC,wCAAyC,mCAEnG62K,GAAWG,YAAYH,IAAYE,EAAgBF,EAC5B,MAAlBC,EAAyBA,EAAiBl9F,IAAQ55E,EAAE,CAAC,wCAAyC,wCADvG,EALS45E,IAAQ55E,EAAE,CAAC,kCAAmC,mBCnB5Ci3K,EAAW,SAACtnM,GACvB,OAAiB,MAATA,OAAiBI,EAAY6pG,IAAQ55E,EAAE,CAAC,+BAAgC,cAErEk3K,EAAe,SAACvnM,GAAgB,IAAD,EAC1C,OAAQA,KAAU,UAAAA,EAAM0Z,aAAN,oBAAA1Z,KAAmBA,EAAMmG,aAAW/F,EAAY6pG,IAAQ55E,EAAE,CAAC,+BAAgC,cAElGm3K,EAAmB,SAACxnM,GAC/B,OAAQA,IAAUA,EAAM0Z,QAAWuwF,IAAQ55E,EAAE,CAAC,+BAAgC,kBAAejwB,GAKlFqnM,EAAa,SAACznM,GACzB,OAAkB,MAATA,GAAwD,KAArCmT,OAAOnT,GAAOk9E,QAAQ,MAAO,SAAe98E,EAAY6pG,IAAQ55E,EAAE,CAAC,iCAAkC,2BAWtHq3K,EAA0B,SAAC1nM,GACtC,OAAiB,MAATA,GAA2B,KAAVA,GAA2B,OAAVA,GAAmBiG,OAAOjG,GAAS,IAAM0gD,MAAMz6C,OAAOjG,SAAYI,EAAY6pG,IAAQ55E,EAAE,CAAC,8CAA+C,2DAGvKs3K,EAAe,SAAC99L,GAAD,OAAiB,SAACC,GAC5C,GAAID,GAAUC,EACZ,OAAI7D,OAAO4D,GAAU5D,OAAO6D,QAC1B,EAEOmgG,IAAQ55E,EAAE,mCAAoC,CAAExmB,SAAQg4C,aAAa,uBAAD,OAAyBh4C,OAM7F+9L,EAAgB,SAAC/9L,GAAD,OAAiB,SAACC,GAC7C,GAAID,GAAUC,EACZ,OAAI7D,OAAO4D,GAAU5D,OAAO6D,QAC1B,EAEOmgG,IAAQ55E,EAAE,oCAAqC,CAAExmB,SAAQg4C,aAAa,wBAAD,OAA0Bh4C,OAM/Fg+L,EAA6B,SAAC95E,GAAD,IAAgB+5E,EAAhB,uDAAuC,EAAGC,EAA1C,+DAAyE,SAAC/nM,GAClH,GAAIiG,OAAOjG,GAAS+tH,EAClB,OAAO9jB,IAAQ55E,EAAE,iDAAkD,CAAE09F,QAAOlsE,aAAa,gCAAD,OAAkCksE,EAAlC,eAG1F,GAAa,MAAT/tH,IAGiB,kBAAVA,IAAsBiG,OAAOjG,IAAxC,CAGA,GAAqB,kBAAVA,EAAoB,CAC7B,GAAc,KAAVA,EACF,OAGF,IACsE,EAAtE,GADc,iBACJq/C,KAAKr/C,IAAUiG,OAAOjG,GAAS,GAAKiG,OAAOjG,IAAU+tH,EAE7D,OAAI,UAAA/tH,EAAMqjD,MAAM,KAAK,UAAjB,eAAqBl9C,QAAS2hM,EACzB79F,IAAQ55E,EAAE,0CAA2C,CAAEy3K,eAAcjmJ,aAAa,qCAAD,OAAuCimJ,EAAvC,8BAEtFC,GAAa9hM,OAAOjG,GAAS,IAAM,EAC9BiqG,IAAQ55E,EAAE,CAAC,oCAAqC,yCAEzD,EAGJ,OAAO45E,IAAQ55E,EAAE,CAAC,sCAAuC,iCAG9C23K,EAAgC,SAACj6E,GAAD,IAAgB+5E,EAAhB,uDAAuC,EAAGC,EAA1C,+DAAyE,SAAC/nM,GACrH,GAAIiG,OAAOjG,GAAS+tH,EAClB,OAAO9jB,IAAQ55E,EAAE,oDAAqD,CAAE09F,QAAOlsE,aAAa,iCAAD,OAAmCksE,EAAnC,eAG7F,GAAa,MAAT/tH,KAGiB,kBAAVA,GAAsBA,GAAS,GAA1C,CAGA,GAAqB,kBAAVA,EAAoB,CAC7B,GAAc,KAAVA,EACF,OAGF,IACuE,EAAvE,GADc,iBACJq/C,KAAKr/C,IAAUiG,OAAOjG,IAAU,GAAKiG,OAAOjG,IAAU+tH,EAE9D,OAAI,UAAA/tH,EAAMqjD,MAAM,KAAK,UAAjB,eAAqBl9C,QAAS2hM,EACzB79F,IAAQ55E,EAAE,0CAA2C,CAAEy3K,eAAcjmJ,aAAa,qCAAD,OAAuCimJ,EAAvC,8BAEtFC,GAAa9hM,OAAOjG,GAAS,IAAM,EAC9BiqG,IAAQ55E,EAAE,CAAC,oCAAqC,yCAEzD,EAGJ,OAAO45E,IAAQ55E,EAAE,CAAC,sCAAuC,iCAG9C43K,EAAqB,mBAGrBC,EAAiB,SAAC3mM,EAAaD,GAAd,IAA2BwmM,EAA3B,uDAAkD,EAAlD,OAAwD,SAAC9nM,GACrF,IAQ0F,EARpFmoM,EAAkB,kBAAMl+F,IAAQ55E,EAAE,qCAAsC,CAAE9uB,MAAKD,MAAKugD,aAAa,4BAAD,OAA8BtgD,EAA9B,gBAAyCD,EAAzC,gBAEtG,GAAa,MAATtB,GAA2B,KAAVA,EAGrB,MAAqB,kBAAVA,EACDA,GAASuB,GAAOvB,GAASsB,OAAOlB,EAAY+nM,IAEjC,kBAAVnoM,GAAsBioM,EAAmB5oJ,KAAKr/C,KAAW0gD,MAAMz6C,OAAOjG,KAE3E,UAAAA,EAAMqjD,MAAM,KAAK,UAAjB,eAAqBl9C,QAAS2hM,EACzB79F,IAAQ55E,EAAE,0CAA2C,CAAEy3K,eAAcjmJ,aAAa,qCAAD,OAAuCimJ,EAAvC,8BAElF7hM,OAAOjG,IAAUuB,GAAO0E,OAAOjG,IAAUsB,OAAOlB,EAAY+nM,IAE/Dl+F,IAAQ55E,EAAE,CAAC,sCAAuC,gCAG9C+3K,EAAyB,iBAEzBC,EAA6B,iBAE7BC,EAA+B,SAACv6E,GAAD,OAAmB,SAAC/tH,GAC9D,GAAIiG,OAAOjG,GAAS+tH,EAClB,OAAO9jB,IAAQ55E,EAAE,mDAAoD,CAAE09F,QAAOlsE,aAAa,uCAAD,OAAyCksE,EAAzC,eAG5F,GAAa,MAAT/tH,IAGiB,kBAAVA,IAAsBiG,OAAOC,UAAUlG,IAAlD,CAGA,GAAqB,kBAAVA,EAAoB,CAC7B,GAAc,KAAVA,EACF,OAEF,GAAIooM,EAAuB/oJ,KAAKr/C,IAAUiG,OAAOjG,IAAU+tH,EACzD,OAGJ,OAAO9jB,IAAQ55E,EAAE,CAAC,sCAAuC,uCAyB9CnqB,EAAY,SAAClG,GACxB,GAAa,MAATA,IAGiB,kBAAVA,IAAsBiG,OAAOC,UAAUlG,IAAlD,CAGA,GAAqB,kBAAVA,EAAoB,CAC7B,GAAc,KAAVA,EACF,OAEF,GAAIooM,EAAuB/oJ,KAAKr/C,GAC9B,OAGJ,OAAOiqG,IAAQ55E,EAAE,CAAC,sCAAuC,gCAqB9Ck4K,EAAmB,SAACvoM,GAC/B,OAAiB,MAATA,GAA2B,KAAVA,GAAsD,KAArCmT,OAAOnT,GAAOk9E,QAAQ,MAAO,SAAe98E,EAAY6pG,IAAQ55E,EAAE,CAAC,uCAAwC,sCAI1I0wF,EAAoB,SAACsP,GAChC,GAAY,MAARA,GAAyB,KAATA,IAGhBrQ,IAAOqQ,EAAM,cAAcm4E,UAG/B,OAAOv+F,IAAQ55E,EAAE,CAAC,kCAAmC,kBAW1Co4K,EAA2B,SAACzoM,GACvC,OAAQ0oM,mBAAU1oM,IAAwC,KAA7BA,EAAMk9E,QAAQ,MAAO,SAAe98E,EAAY6pG,IAAQ55E,EAAE,CAAC,+BAAgC,cAE7Gs4K,EAAsB,SAAC3oM,GAClC,OAAQ0oM,mBAAU1oM,IAAW,6CAA6Cq/C,KAAKr/C,QAAWI,EAAY6pG,IAAQ55E,EAAE,CAAC,iCAAkC,+BAExIu4K,EAA6B,SAAC5oM,GACzC,OAAiB,MAATA,GAA2B,KAAVA,GAAiB0oM,mBAAU1oM,IAAW,6CAA6Cq/C,KAAKr/C,QAAYI,EAAY6pG,IAAQ55E,EAAE,CAAC,iCAAkC,+BAQ3Kw4K,EAAkB,SAAC7oM,GAC9B,IAAO8oM,EAAc,IAAI1pJ,OAAO,uCAChC,OAAQspJ,mBAAU1oM,IAAW8oM,EAAYzpJ,KAAKr/C,QAAWI,EAAY6pG,IAAQ55E,EAAE,CAAC,oCAAqC,+EAE1G04K,EAAmB,SAAC/oM,GAC/B,IAAMgpM,EAAgBhpM,GAASA,EAAMmG,OAAS,EACxC8iM,EAAqBjpM,GAAS0gD,MAAMz6C,OAAOjG,IACjD,OAAOgpM,EAAgB/+F,IAAQ55E,EAAE,CAAC,6CAA8C,8BAAgC44K,EAAoBh/F,IAAQ55E,EAAE,CAAC,+BAAgC,0BAAuBjwB,GAE3L8oM,EAAqB,SAAClpM,EAAY2+G,GAG7C,OAAQ3+G,IAFS2+G,EAAU97F,OACF,cACKziB,EAAY6pG,IAAQ55E,EAAE,CAAC,oCAAqC,0DAG/E84K,EAAmB,SAAC3kM,EAAMm6G,GACrC,IAAMyqF,EAAUzqF,EAAUz5F,MAAM,CAAC1gB,EAAM,QACjC6kM,EAAU1qF,EAAUz5F,MAAM,CAAC1gB,EAAM,QACjC8kM,EAAc,SAACj5E,GAAD,MAA0B,kBAATA,EAAoBA,EAAOA,EAAKjgE,eACrE,GAAIg5I,GAAWC,GACTC,EAAYF,GAAWE,EAAYD,GACrC,OAAOp/F,IAAQ55E,EAAE,CAAC,uCAAwC,2CAkBnDk5K,EAAkB,SAACl5E,EAAYm5E,EAAmB7zJ,GAI7D,GAFA06E,EAAKo5E,SAAS,EAAE,EAAE,EAAE,GACpBD,EAAYC,SAAS,EAAE,EAAE,EAAE,GACvBp5E,EAAK/9F,UAAYk3K,EAAYl3K,UAC/B,OAAOqjB,GAKE+zJ,EAAoB,SAACr5E,EAAYs5E,EAAqBh0J,GAIjE,GAFA06E,EAAKo5E,SAAS,EAAE,EAAE,EAAE,GACpBE,EAAcF,SAAS,EAAE,EAAE,EAAE,GACzBp5E,EAAK/9F,UAAYq3K,EAAcr3K,UACjC,OAAOqjB,GAKEi0J,EAAqB,SAACplM,EAAMm6G,GACvC,IAAMp9G,EAAMo9G,EAAUz5F,MAAM,CAAC1gB,EAAM,QAC7BlD,EAAMq9G,EAAUz5F,MAAM,CAAC1gB,EAAM,QAEnC,GAAIjD,GAAOD,GAAO2E,OAAO1E,GAAO0E,OAAO3E,GACrC,OAAO2oG,IAAQ55E,EAAE,CAAC,wCAAyC,6CAYlDw5K,EAAkB,SAAC97E,GAAD,OAAmB,SAAC/tH,GACjD,GAAIA,GAASA,EAAMmG,OAAS4nH,EAC1B,OAAO9jB,IAAQ55E,EAAE,0CAA2C,CAAE09F,a,6BCpVlE,+CACe,SAASvsE,EAAyBjwB,EAAQu4K,GACvD,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IACI3oB,EAAKtB,EADLgqB,EAAS,YAA6BC,EAAQu4K,GAGlD,GAAIpnM,OAAOkgB,sBAAuB,CAChC,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAEpD,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IACvCsB,EAAMmhM,EAAiBziM,GACnBwiM,EAAShlL,QAAQlc,IAAQ,GACxBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KACxD0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAIzB,OAAO0oB,I,uLCfI,EAAc,SAACm6G,EAAcn/B,EAAU32D,GAClD,YADwC,IAAA22D,MAAA,QAAU,IAAA32D,MAAkB,IAAOq0J,SACpE,CAAEv+D,MAAK,EAAEn/B,KAAI,EAAE32D,QAAO,I,UCKlBs0J,EAAO,SAAPA,EAAiBhgM,GAC5B,OAAOA,GAGDA,EAEE,GADA5I,KAAKy1E,UAEJ7sE,EAAI,GAEN1E,SAAS,KAGV4N,OAAO,KACPA,QAAQ,KACRA,QAAQ,KACRA,QAAQ,KACRA,QAAQ,OAEP+pE,QAEC,SACA+sH,ICEJ,SAAUC,EAAsB9jD,GACpC,IAAI+jD,EAAqB,GACzB,IACM,SAAU/jD,IACZ+jD,EAAqBl3L,KAAKC,UAAUkzI,EAAIrrE,KAAM,KAAM,IAEtD,UAGF,OAAOovH,EAGT,IC3BYC,EAkEAC,EAqBAC,ED5DZ,0BACE,KAAAx3L,KAAO,YACP,KAAAtO,KAAO,cAEP,KAAA+lM,aAAe,IACf,KAAAC,gBAAkB,IAClB,KAAAC,WAAa,GAKL,KAAAC,UAAkD,KAC1D,KAAA75C,MAAmB,GAuSrB,OArSQ,YAAA85C,MAAN,SAAY3gJ,G,iIAIK,OAHf1lD,KAAK0lD,OAASA,EAEd1lD,KAAKmmM,WAAa,UAAG,IAAc,YAAInmM,KAAK0lD,OAAO4gJ,OAAO7zH,UAAU,EAAG,KACxD,GAAiC,QAA3B,EAAAzyE,KAAK0lD,OAAO6gJ,uBAAe,eAAExiM,IAAI/D,KAAKmmM,a,OAK3D,OALMK,EAAS,WACDA,EAAO3kM,OAAS,GACvBo9C,QAAQwnJ,IAAID,EAAOx9L,KAAI,SAACm+H,GAAU,SAAKu/D,QAAL,OAAsBC,QAG/D,GAAO1nJ,QAAQC,aAAQpjD,YAGzB,YAAA4qM,QAAA,SAAQv/D,GAAR,WAME,OAJKA,EAAMy/D,YACTz/D,EAAMy/D,UAAYjB,KAGb,IAAI1mJ,SAAQ,SAACC,GAClB,IAAMh2C,EAAU,CACdi+H,MAAK,EACL0/D,SAAU,EACVjiK,SAAU,SAAChxB,GAAmB,OAAAsrC,EAAA,IAC9BulD,QAAS,GAEN,EAAKqiG,WAAW59L,OAIzB,YAAA69L,eAAA,SAAexuL,GAAf,WACE,OAAOA,EAAKhN,QAAO,SAACrC,GAClB,OAAIA,EAAQ29L,SAAW,EAAKnhJ,OAAOshJ,iBACjC99L,EAAQ29L,UAAY,GACb,IAEJ,EAAKI,eAAe,CAAC/9L,GAAU,IE1FE,+CF2F/B,OAIX,YAAAg+L,gBAAA,SAAgB3uL,EAAiB4uL,GAAjC,gBAAiC,IAAAA,OAAA,GAC/B5uL,EAAK7L,SAAQ,SAACxD,GAERi+L,IACF,EAAK56C,MAAQ,EAAKA,MAAMjhJ,OAAOpC,IAET,IAApBA,EAAQu7F,QAKZ5rD,YAAW,WACT3vC,EAAQu7F,QAAU,EAClB,EAAK2iG,SAAS,KACbl+L,EAAQu7F,SAPT,EAAK2iG,SAAS,EAAK1hJ,OAAO2hJ,yBAWhC,YAAAP,WAAA,W,IAAW,sDACT,IAAMQ,EAAUtnM,KAAK+mM,eAAexuL,GACpCvY,KAAKknM,gBAAgBI,GAAS,GAC9BtnM,KAAKunM,cAGP,YAAAH,SAAA,SAAS3iG,GAAT,WACMzkG,KAAKomM,WAAapmM,KAAK0lD,OAAO8hJ,UAIlCxnM,KAAKomM,UAAYvtJ,YAAW,WACrB,EAAKi5I,OAAM,GAAMv7G,MAAK,WACrB,EAAKg2E,MAAM1qJ,OAAS,GACtB,EAAKulM,SAAS3iG,QAGjBA,KAGC,YAAAqtF,MAAN,SAAY2V,G,YAAA,IAAAA,OAAA,G,wHAEV,OAAIznM,KAAK0lD,OAAO8hJ,SACdxnM,KAAK0lD,OAAOgiJ,eAAehjG,MAAM,iCACjC,MAGInsF,EAAkB,GAClBovL,EAAmB,GACzB3nM,KAAKusJ,MAAM7/I,SAAQ,SAACxD,GAAY,OAAqB,IAApBA,EAAQu7F,QAAgBlsF,EAAKnM,KAAKlD,GAAWy+L,EAAMv7L,KAApD,MAE5BpM,KAAKomM,YACP7/D,aAAavmI,KAAKomM,WAClBpmM,KAAKomM,UAAY,MAGbwB,EGnJW,SAAI/5L,EAAU9R,GACjC,IAAM8rM,EAAY9qM,KAAKC,IAAIjB,EAAM,GACjC,OAAO8R,EAAIlC,QAAc,SAACm+G,EAAQg+E,EAAS3rM,GACzC,IAAM4rM,EAAahrM,KAAKwjB,MAAMpkB,EAAQ0rM,GAKtC,OAJK/9E,EAAOi+E,KACVj+E,EAAOi+E,GAAc,IAEvBj+E,EAAOi+E,GAAY37L,KAAK07L,GACjBh+E,IACN,IH0IewsE,CAAM/9K,EAAMvY,KAAK0lD,OAAOsiJ,gBAExC,GAAM/oJ,QAAQwnJ,IAAImB,EAAQ5+L,KAAI,SAAC27B,GAAU,SAAK4hH,KAAK5hH,EAAV,S,cAAzC,SAEA3kC,KAAKknM,gBAAgBS,G,YAGjB,YAAAphD,KAAN,SAAWhuI,EAAiBkvL,G,YAAA,IAAAA,OAAA,G,qHAC1B,IAAKznM,KAAK0lD,OAAO4gJ,OACf,SAAOtmM,KAAKinM,eAAe1uL,EAAM,IE5JA,0CF+J7B2uB,EAAU,CACd+gK,QAASjoM,KAAK0lD,OAAO4gJ,OACrB5kD,OAAQnpI,EAAKvP,KAAI,SAACE,GAEhB,IAAM,EAAkCA,EAAQi+H,MAAnC,QACb,OADmC,cAA7B,cAGRn7F,QAAS,CACPk8J,cAAeloM,KAAK0lD,OAAOyiJ,aAE7BC,oBAAoB,IAAIr6K,MAAO+9B,e,iBAKnB,O,sBADJu8I,EAAc,YAAmBroM,KAAK0lD,OAAO2iJ,UAAWroM,KAAK0lD,OAAO4iJ,WAAYtoM,KAAK0lD,OAAO6iJ,UAAnF,UACL,GAAMvoM,KAAK0lD,OAAO8iJ,kBAAkBjiD,KAAK8hD,EAAWnhK,I,OAChE,OAAY,QADN46G,EAAM,WAEV9hJ,KAAKinM,eAAe1uL,EAAM,EEnLM,6BFoLhC,KAEGkvL,GAQLznM,KAAKyoM,eAAe3mD,EAAKvpI,G,QAPnB,SAAUupI,EACZ9hJ,KAAKinM,eAAe1uL,EAAMupI,EAAI4mD,WAAY,UAAG5mD,EAAIr8C,OAAM,aAAKmgG,EAAsB9jD,KAElF9hJ,KAAKinM,eAAe1uL,EAAMupI,EAAI4mD,WAAY5mD,EAAIr8C,QAEhD,K,yBAII9wB,GAvKaxmE,EAuKkB,aAtKpBvG,MAAcuG,EAAMkjC,QAClCxiC,OAAOV,GAsKVnO,KAAK0lD,OAAOgiJ,eAAev5L,MAAMwmE,GACjC30E,KAAKinM,eAAe1uL,EAAM,EAAGo8D,G,uBAzKnC,IAAyBxmE,SA6KvB,YAAAs6L,eAAA,SAAe3mD,EAAevpI,GACpB,IAAAktF,EAAWq8C,EAAL,OAEd,OAAQr8C,GACN,KAAK,IAAOkjG,QACV3oM,KAAK4oM,sBAAsB9mD,EAAKvpI,GAChC,MAEF,KAAK,IAAOswL,QACV7oM,KAAK8oM,sBAAsBhnD,EAAKvpI,GAChC,MAEF,KAAK,IAAOwwL,gBACV/oM,KAAKgpM,8BAA8BlnD,EAAKvpI,GACxC,MAEF,KAAK,IAAO0wL,UACVjpM,KAAKkpM,wBAAwBpnD,EAAKvpI,GAClC,MAEF,QAEEvY,KAAK0lD,OAAOgiJ,eAAez/K,KAAK,qCAA6Bw9E,EAAM,0BAAkBltF,EAAK1W,OAAM,cAChG7B,KAAKmpM,oBAAoB5wL,KAM/B,YAAAqwL,sBAAA,SAAsB9mD,EAAsBvpI,GAC1CvY,KAAKinM,eAAe1uL,EAAMupI,EAAI4mD,WErOH,+BFwO7B,YAAAI,sBAAA,SAAsBhnD,EAAsBvpI,GAA5C,WACE,GAAIupI,EAAIrrE,KAAK2yH,cAAgBtnD,EAAIrrE,KAAKtoE,MAAMuuL,WEpOjB,mBFqOzB18L,KAAKinM,eAAe1uL,EAAMupI,EAAI4mD,WAAY5mD,EAAIrrE,KAAKtoE,WADrD,CAKA,IAAMk7L,EAAY,+DACbjrM,OAAO+M,OAAO22I,EAAIrrE,KAAK6yH,2BAAwB,eAC/ClrM,OAAO+M,OAAO22I,EAAIrrE,KAAK8yH,2BAAwB,eAC/CnrM,OAAO+M,OAAO22I,EAAIrrE,KAAK+yH,8BAA2B,eAClD1nD,EAAIrrE,KAAKgzH,iBAAc,GAC1BC,OACIC,EAAe,IAAI9qM,IAAIwqM,GAEvBO,EAAQrxL,EAAKhN,QAAO,SAACrC,EAAS/M,GAClC,IAAIwtM,EAAa1lM,IAAI9H,GAIrB,OAAO,EAHL,EAAK8qM,eAAe,CAAC/9L,GAAU44I,EAAI4mD,WAAY5mD,EAAIrrE,KAAKtoE,UAMxDy7L,EAAM/nM,OAAS,GAEjB7B,KAAK0lD,OAAOgiJ,eAAez/K,KAAK29K,EAAsB9jD,IAGxD,IAAMwlD,EAAUtnM,KAAK+mM,eAAe6C,GACpC5pM,KAAKknM,gBAAgBI,KAGvB,YAAA0B,8BAAA,SAA8BlnD,EAA8BvpI,GAC1D,GAAoB,IAAhBA,EAAK1W,OAAT,CAMA7B,KAAK0lD,OAAOgiJ,eAAez/K,KAAK29K,EAAsB9jD,IAEtD9hJ,KAAK0lD,OAAOsiJ,gBAAkB,EAE9B,IAAMV,EAAUtnM,KAAK+mM,eAAexuL,GACpCvY,KAAKknM,gBAAgBI,QAVnBtnM,KAAKinM,eAAe1uL,EAAMupI,EAAI4mD,WAAY5mD,EAAIrrE,KAAKtoE,QAavD,YAAA+6L,wBAAA,SAAwBpnD,EAAwBvpI,GAAhD,WACQsxL,EAAczrM,OAAO0D,KAAKggJ,EAAIrrE,KAAKqzH,yBACnCC,EAAgB3rM,OAAO0D,KAAKggJ,EAAIrrE,KAAKuzH,2BACrCC,EAAiBnoD,EAAIrrE,KAAKyzH,gBAC1BC,EAAiB,IAAItrM,IAAIgrM,GACzBO,EAAmB,IAAIvrM,IAAIkrM,GAC3BM,EAAoB,IAAIxrM,IAAIorM,GAE5BL,EAAQrxL,EAAKhN,QAAO,SAACrC,EAAS/M,GAClC,KACG+M,EAAQi+H,MAAMmjE,SAAWH,EAAelmM,IAAIiF,EAAQi+H,MAAMmjE,UAC1DphM,EAAQi+H,MAAMojE,WAAaH,EAAiBnmM,IAAIiF,EAAQi+H,MAAMojE,YAQjE,OAHIF,EAAkBpmM,IAAI9H,KACxB+M,EAAQu7F,QAAU,EAAKyhG,kBAElB,EANL,EAAKe,eAAe,CAAC/9L,GAAU44I,EAAI4mD,WAAY5mD,EAAIrrE,KAAKtoE,UASxDy7L,EAAM/nM,OAAS,GAEjB7B,KAAK0lD,OAAOgiJ,eAAez/K,KAAK29K,EAAsB9jD,IAGxD,IAAMwlD,EAAUtnM,KAAK+mM,eAAe6C,GACpC5pM,KAAKknM,gBAAgBI,IAGvB,YAAA6B,oBAAA,SAAoB5wL,GAApB,WACQovL,EAAQpvL,EAAKvP,KAAI,SAACE,GAEtB,OADAA,EAAQu7F,QAAUv7F,EAAQ29L,SAAW,EAAKZ,aACnC/8L,KAGHo+L,EAAUtnM,KAAK+mM,eAAeY,GACpC3nM,KAAKknM,gBAAgBI,IAGvB,YAAAL,eAAA,SAAe1uL,EAAiByvF,EAAc32D,GAC5CrxC,KAAKwqM,aAAajyL,GAClBA,EAAK7L,SAAQ,SAACxD,GAAY,OAAAA,EAAQ07B,SAAS,EAAY17B,EAAQi+H,MAAOn/B,EAA5C,QAU5B,YAAAu/F,WAAA,WACE,GAAKvnM,KAAK0lD,OAAO6gJ,gBAAjB,CAIA,IAAMkE,EAAgBzqM,KAAKusJ,MAAMvjJ,KAAI,SAACE,GAAY,OAAAA,EAAA,SAC7ClJ,KAAK0lD,OAAO6gJ,gBAAgB7+L,IAAI1H,KAAKmmM,WAAYsE,KAMxD,YAAAD,aAAA,SAAaE,GACX1qM,KAAKusJ,MAAQvsJ,KAAKusJ,MAAMhhJ,QACtB,SAACo/L,GAAkB,OAACD,EAAej9L,MAAK,SAACvE,GAAY,OAAAA,EAAQi+H,MAAMy/D,YAAc+D,EAAcxjE,MAA1C,gBAGvDnnI,KAAKunM,cAET,EAnTA,IC3BA,SAAYzB,GAEV,aACA,sBAGA,aACA,mBACA,qBACA,mBAGA,yBACA,2BAGA,iBACA,wBAjBF,CAAYA,MAAiB,KAkE7B,SAAYC,GACV,kCACA,+BACA,yBACA,8BACA,qBALF,CAAYA,MAAe,KAqB3B,SAAYC,GACV,uBACA,kCACA,2BAHF,CAAYA,MAAgB,KGvG5B,IAEa4E,EAAgB,SAACjU,GAC5B,GAAIv4L,OAAO0D,KAAK60L,GAAY90L,OAHJ,IAItB,OAAO,EAET,IAAK,IAAMyC,KAAOqyL,EAAY,CAE5B,IAAMj7L,EAAQi7L,EAAWryL,GACzB,IAAK,EAAkBA,EAAK5I,GAAQ,OAAO,EAE7C,OAAO,GAGI,EAAoB,SAACumL,EAAkBvmL,G,QAClD,GAAwB,kBAAbumL,EAAuB,OAAO,EACzC,GAAIxgL,MAAMC,QAAQhG,GAAQ,CACxB,IAAIwoM,GAAU,E,IACd,IAA2B,kBAAAxoM,GAAK,8BAAE,CAA7B,IAAMmvM,EAAY,QACrB,GAAIppM,MAAMC,QAAQmpM,GAChB,OAAO,EACF,GAA4B,kBAAjBA,EAChB3G,EAAUA,GAAW0G,EAAcC,QAC9B,IAAK,CAAC,SAAU,UAAUthM,gBAAgBshM,GAC/C,OAAO,EAET,IAAK3G,EACH,OAAO,G,sGAGN,IAAc,OAAVxoM,QAA4BI,IAAVJ,EAC3B,OAAO,EACF,GAAqB,kBAAVA,EAEhB,OAAOkvM,EAAclvM,GAChB,IAAK,CAAC,SAAU,SAAU,WAAW6N,gBAAgB7N,GAC1D,OAAO,EAET,OAAO,GC7BT,0BACqB,KAAAovM,aAA4B,IAAIjsM,IACzC,KAAAksM,YAAsC,GAmGlD,OAjGS,YAAAC,kBAAP,WACE,sBAAYhrM,KAAK+qM,cAGZ,YAAArjM,IAAP,SAAWu6K,EAAkBvmL,GAE3B,OADAsE,KAAKirM,SAASnF,EAAkBoF,IAAKjpB,EAAUvmL,GACxCsE,MAGF,YAAAmrM,QAAP,SAAelpB,EAAkBvmL,GAE/B,OADAsE,KAAKirM,SAASnF,EAAkBsF,SAAUnpB,EAAUvmL,GAC7CsE,MAGF,YAAAyvJ,OAAP,SAAcwyB,EAAkBvmL,GAE9B,OADAsE,KAAKirM,SAASnF,EAAkBuF,OAAQppB,EAAUvmL,GAC3CsE,MAGF,YAAAoqJ,QAAP,SAAe63B,EAAkBvmL,GAE/B,OADAsE,KAAKirM,SAASnF,EAAkBwF,QAASrpB,EAAUvmL,GAC5CsE,MAGF,YAAAurM,WAAP,SAAkBtpB,EAAkBvmL,GAElC,OADAsE,KAAKirM,SAASnF,EAAkB0F,WAAYvpB,EAAUvmL,GAC/CsE,MAGF,YAAAyrM,UAAP,SAAiBxpB,EAAkBvmL,GAEjC,OADAsE,KAAKirM,SAASnF,EAAkB4F,UAAWzpB,EAAUvmL,GAC9CsE,MAGF,YAAAkP,OAAP,SAAc+yK,EAAkBvmL,GAE9B,OADAsE,KAAKirM,SAASnF,EAAkB6F,OAAQ1pB,EAAUvmL,GAC3CsE,MAGF,YAAA2e,IAAP,SAAWsjK,EAAkBvmL,GAE3B,OADAsE,KAAKirM,SAASnF,EAAkB8F,IAAK3pB,EAAUvmL,GACxCsE,MAGF,YAAAo5L,MAAP,SAAanX,GAEX,OADAjiL,KAAKirM,SAASnF,EAAkB+F,MAAO5pB,EAAU,KAC1CjiL,MAGF,YAAA8rM,SAAP,WAKE,OAHA9rM,KAAK+qM,YAAc,GACnB/qM,KAAK+qM,YAAYjF,EAAkBiG,WAAa,IAEzC/rM,MAID,YAAAirM,SAAR,SAAiBe,EAA8B/pB,EAAkBvmL,GAC/D,GAAIsE,KAAKisM,UAAUD,EAAW/pB,EAAUvmL,GAAQ,CAE9C,IAAIwwM,EAAuBlsM,KAAK+qM,YAAYiB,GAU5C,YATwBlwM,IAApBowM,IACFA,EAAkB,GAElBlsM,KAAK+qM,YAAYiB,GAAaE,GAIhCA,EAAgBjqB,GAAYvmL,EAC5BsE,KAAK8qM,aAAansL,IAAIsjK,IACf,EAGT,OAAO,GAGD,YAAAgqB,UAAR,SAAkBD,EAA8B/pB,EAAkBvmL,GAChE,YAAsDI,IAAlDkE,KAAK+qM,YAAYjF,EAAkBiG,cAKnC/rM,KAAK8qM,aAAa7mM,IAAIg+K,KAKtB+pB,IAAclG,EAAkB8F,IACV,kBAAVlwM,EAGZswM,IAAclG,EAAkB+F,OAASG,IAAclG,EAAkB6F,QACpE,EAAkB1pB,EAAUvmL,MAIzC,EArGA,GCDA,aAQE,aACEsE,KAAKi5H,UAAY,GACjBj5H,KAAKmsM,SAAW,EAChBnsM,KAAKosM,MAAQ,EA8CjB,OA3CE,YAAAC,aAAA,SAAapzE,GAEX,OADAj5H,KAAKi5H,UAAYA,EACVj5H,MAGT,YAAAssM,YAAA,SAAYH,GAIV,OAHIA,EAAW,IACbnsM,KAAKmsM,SAAWA,GAEXnsM,MAGT,YAAAusM,SAAA,SAASH,GAEP,OADApsM,KAAKosM,MAAQA,EACNpsM,MAGT,YAAAwsM,eAAA,SAAeC,GAEb,OADAzsM,KAAKysM,YAAcA,EACZzsM,MAGT,YAAA0sM,WAAA,SAAWC,GAET,OADA3sM,KAAK2sM,QAAUA,EACR3sM,MAGT,YAAA4sM,mBAAA,SAAmBjW,GAIjB,OAHIiU,EAAcjU,KAChB32L,KAAK22L,WAAaA,GAEb32L,MAGT,YAAA6sM,mBAAA,WACE,IAAMC,EAA0C9sM,KAAK22L,WAAY,eAAM32L,KAAK22L,YAAe,GAM3F,OALAmW,EAAgB/G,EAAgBgH,oBAAsB/sM,KAAKi5H,UAC3D6zE,EAAgB/G,EAAgBiH,kBAAoBhtM,KAAKmsM,SACzDW,EAAgB/G,EAAgBkH,eAAiBjtM,KAAKosM,MACtDU,EAAgB/G,EAAgBmH,cAAgBltM,KAAKysM,YACrDK,EAAgB/G,EAAgBoH,SAAWntM,KAAK2sM,QACzCG,GAEX,EAzDA,GCMA,aAQE,WAAoBM,GAAA,KAAAA,SAPpB,KAAA7gD,MAAkC,GAElC,KAAA8gD,UAAW,EAGX,KAAAC,QAAoB,GA8HtB,OA1HQ,YAAAC,SAAN,SAAeC,EAAgB9nJ,G,wHAG7B,OAFA8nJ,EAAOh/L,KAAkB,QAAX,EAAAg/L,EAAOh/L,YAAI,QAAIm3L,IAC7B6H,EAAOttM,KAAkB,QAAX,EAAAstM,EAAOttM,YAAI,QAAI,aAC7B,GAAkB,QAAZ,EAAAstM,EAAOnH,aAAK,sBAAG3gJ,EAAQ1lD,KAAKotM,S,cAAlC,SACAptM,KAAKstM,QAAQlhM,KAAKohM,G,YAGd,YAAAC,WAAN,SAAiBC,G,4HAIf,OAHMvxM,EAAQ6D,KAAKstM,QAAQtnL,WAAU,SAACwnL,GAAW,OAAAA,EAAOh/L,OAAP,KAC3Cg/L,EAASxtM,KAAKstM,QAAQnxM,GAC5B6D,KAAKstM,QAAQl+L,OAAOjT,EAAO,GAC3B,GAAqB,QAAf,EAAAqxM,EAAOG,gBAAQ,wB,cAArB,S,YAGF,YAAAhjI,MAAA,SAAMyiI,GACJptM,KAAKqtM,UAAW,EACArtM,KAAKstM,QACbtkM,KAAI,SAACwkM,GAAM,MAAK,OAAe,QAAf,EAAAA,EAAOG,gBAAQ,0BACvC3tM,KAAKstM,QAAU,GACfttM,KAAKotM,OAASA,GAGhB,YAAAhhM,KAAA,SAAK+6H,GAAL,WACE,OAAO,IAAIloF,SAAgB,SAACC,GAC1B,EAAKqtG,MAAMngJ,KAAK,CAAC+6H,EAAOjoF,IACxB,EAAK0uJ,cAAc,OAIvB,YAAAA,cAAA,SAAcnpG,GAAd,WACMzkG,KAAKqtM,WACTrtM,KAAKqtM,UAAW,EAChBx0J,YAAW,WACJ,EAAK5wC,MAAM,EAAKskJ,MAAMz4I,SAASyiE,MAAK,WACvC,EAAK82H,UAAW,EACZ,EAAK9gD,MAAM1qJ,OAAS,GACtB,EAAK+rM,cAAc,QAGtBnpG,KAGC,YAAAx8F,MAAN,SAAY2xE,G,0JACV,IAAKA,EACH,UAGE,cAAUA,EAAI,GAAbutD,EAAK,KACJ,cAAcvtD,EAAI,GAAf16B,EAAO,KAEVuxI,EAASzwL,KAAKstM,QAAQ/hM,QAC1B,SAACiiM,GAA2C,iBAAAA,EAAOttM,Q,wCAGhC,cAAAuwL,GAAM,W,sCAAhB+c,EAAM,SAEH9G,QAIF,GAAM8G,EAAO9G,QAAO,eAAMv/D,KAFlC,M,OAGF,GAAU,QADJ/+H,EAAI,UAGR,OADA82C,EAAQ,CAAEioF,MAAK,EAAEn/B,KAAM,EAAG32D,QAAS,KACnC,IAEA81F,EAAQ/+H,E,kMAINylM,EAAa7tM,KAAKstM,QAAQ/hM,QAC9B,SAACiiM,GAA+C,MAAgB,eAAhBA,EAAOttM,WAAP,IAAgCstM,EAAOttM,Q,2CAGpE,cAAA2tM,GAAU,W,yCAApBL,EAAM,SAEH9G,QAIF,GAAM8G,EAAO9G,QAAO,eAAMv/D,KAFlC,O,QAGF,GAAU,QADJ/+H,EAAI,UAGR,OADA82C,EAAQ,CAAEioF,MAAK,EAAEn/B,KAAM,EAAG32D,QAAS,KACnC,IAEA81F,EAAQ/+H,E,2MAmBZ,OAfM0lM,EAAc9tM,KAAKstM,QAAQ/hM,QAC/B,SAACiiM,GAAgD,sBAAAA,EAAOttM,QAGpD6tM,EAAsBD,EAAY9kM,KAAI,SAACwkM,GAC3C,IAAMQ,EAAa,OAAH,IAAG,CAAH,GAAQ7mE,GACxB,OAAOqmE,EAAO9G,QAAQsH,GAAYrH,OAAM,SAACv+L,GAAM,SAAY4lM,EAAY,EAAGn/L,OAA3B,UAG5CowC,QAAQwnJ,IAAIsH,GAAqBx3H,MAAK,SAAC,G,IACpC03H,EADoC,iBAAO,IAErC,EAAY9mE,EAAO,IAAK,6DACpCjoF,EAAQ+uJ,MAGV,YAGI,YAAAnc,MAAN,W,+HAIE,OAHMvlC,EAAQvsJ,KAAKusJ,MACnBvsJ,KAAKusJ,MAAQ,GAEb,GAAMttG,QAAQwnJ,IAAIl6C,EAAMvjJ,KAAI,SAAC4wE,GAAS,SAAK3xE,MAAL,Q,OAUtC,OAVA,SAEM6lM,EAAc9tM,KAAKstM,QAAQ/hM,QAC/B,SAACiiM,GAAgD,sBAAAA,EAAOttM,QAGpD6tM,EAAsBD,EAAY9kM,KAAI,SAACwkM,GAC3C,OAAOA,EAAO1b,OAAS0b,EAAO1b,WAGhC,GAAM7yI,QAAQwnJ,IAAIsH,I,cAAlB,S,YAEJ,EApIA,GCYa,EAAsB,SAACG,EAAqBC,GAOvD,OANmB,2BACdA,GAAY,CACfC,WAAYpI,EAAiBqI,SAC7BC,gBAAiBJ,EAASlD,uBCP9B,aAYE,WAAYx8L,QAAA,IAAAA,MAAA,YAXF,KAAA+/L,cAAe,EAQf,KAAAphD,EAAwB,GACxB,KAAAqhD,UAAgC,GA0B1C,KAAAC,SAAWzuM,KAAK0uM,MAAM5sL,KAAK9hB,MAvBzBA,KAAK2uM,SAAW,IAAI,EAAS3uM,MAC7BA,KAAKwO,KAAOA,EAiHhB,OA9GkB,YAAAogM,MAAhB,SAAsBlpJ,G,8GAGpB,OAFA1lD,KAAK0lD,OAASA,EACd1lD,KAAK2uM,SAAShkI,MAAM3qE,MACpB,GAAMA,KAAK6uM,mBAAmB,M,cAA9B,S,YAGI,YAAAA,mBAAN,SAAyBC,G,8HACjBC,EAAkB/uM,KAAK8uM,GAC7B9uM,KAAK8uM,GAAa,G,wCACW,cAAAC,GAAe,W,qCAC1C,IADSC,EAAc,Y,OACvB,S,oNAIJ,YAAAN,MAAA,SAAMO,EAAgCnC,EAAuCqB,GAC3E,IAAMhnE,ED1CsB,SAC9B8nE,EACAnC,EACAqB,GAEA,IAAMe,EAA6C,kBAAfD,EAA0B,CAAEb,WAAYa,GAAeA,EAC3F,8CACKC,GACAf,GACCrB,GAAmB,CAAEqC,iBAAkBrC,ICiC7B,CAAiBmC,EAAYnC,EAAiBqB,GAC5D,OAAO,YAAcnuM,KAAK2qC,SAASw8F,KAKrC,YAAA+mE,SAAA,SAASA,EAAoBC,GAC3B,IAAMhnE,EAAQ,EAAoB+mE,EAAUC,GAC5C,OAAO,YAAcnuM,KAAK2qC,SAASw8F,KAGrC,YAAAioE,cAAA,SAAcC,EAAmBC,EAA8BpB,EAAoBC,GACjF,IAAMhnE,ED/B8B,SACtCkoE,EACAC,EACApB,EACAC,G,MAWA,OATmB,2BACdA,GAAY,CACfC,WAAYpI,EAAiBuJ,eAC7BC,iBAAkBtB,EAASlD,oBAC3BtoL,QAAM,KACJ,EAAC2sL,GAAYC,EAEhB,KCkBe,CAAyBD,EAAWC,EAAWpB,EAAUC,GACvE,OAAO,YAAcnuM,KAAK2qC,SAASw8F,KAGrC,YAAAsoE,SAAA,SAASJ,EAAmBC,EAA8BnB,GACxD,IAAMhnE,EDlBsB,SAACkoE,EAAmBC,EAA8BnB,G,MAC1ED,EAAW,IAAI,EAWrB,OAVAA,EAASxmM,IAAI2nM,EAAWC,GAER,2BACXnB,GAAY,CACfC,WAAYpI,EAAiBqI,SAC7BC,gBAAiBJ,EAASlD,oBAC1BtoL,QAAM,KACJ,EAAC2sL,GAAYC,EAEhB,KCOe,CAAiBD,EAAWC,EAAWnB,GACrD,OAAO,YAAcnuM,KAAK2qC,SAASw8F,KAGrC,YAAAwlE,QAAA,SAAQA,EAAkBwB,GACxB,IAAMhnE,EDRwB,SAACwlE,EAAkBwB,GACnD,kCACKA,GAAY,CACfC,WAAYpI,EAAiBmH,QAC7BgC,iBAAkBxC,EAAQE,uBCIZ,CAAmBF,EAASwB,GAC1C,OAAO,YAAcnuM,KAAK2qC,SAASw8F,KAGrC,YAAAxoH,IAAA,SAAI6uL,GACF,OAAKxtM,KAAK0lD,OAIH,YAAc1lD,KAAK2uM,SAASpB,SAASC,EAAQxtM,KAAK0lD,UAHvD1lD,KAAKmtJ,EAAE/gJ,KAAKpM,KAAK2e,IAAImD,KAAK9hB,KAAMwtM,IACzB,gBAKX,YAAAt+L,OAAA,SAAOw+L,GACL,OAAK1tM,KAAK0lD,OAIH,YAAc1lD,KAAK2uM,SAASlB,WAAWC,KAH5C1tM,KAAKmtJ,EAAE/gJ,KAAKpM,KAAKkP,OAAO4S,KAAK9hB,KAAM0tM,IAC5B,gBAKX,YAAAgC,qBAAA,SAAqBvoE,EAAcviG,GACjC,IAAK5kC,KAAK0lD,OACR,OAAO9gB,EAAS,EAAYuiG,EAAO,EP7FH,2BO+F7BnnI,KAAKkuB,QAAQi5G,GAAO5wD,KAAK3xC,IAG1B,YAAA+F,SAAN,SAAew8F,G,kGACb,OAAKnnI,KAAK0lD,OAMV,GAAO1lD,KAAKkuB,QAAQi5G,IALlB,GAAO,IAAIloF,SAAgB,SAACC,GAC1B,EAAKsvJ,UAAUpiM,KAAK,EAAKsjM,qBAAqB5tL,KAAK,EAAMqlH,EAAOjoF,eAOhE,YAAAhxB,QAAN,SAAci5G,G,wHAGV,O,sBAAInnI,KAAK0lD,OAAOiqJ,OACd,GAAO,EAAYxoE,EAAO,EPnHH,uCOsHV,GAAMnnI,KAAK2uM,SAASviM,KAAK+6H,I,OAQxC,OANgB,OAFVvzH,EAAS,UAERo0F,KACHhoG,KAAK0lD,OAAOgiJ,eAAez8F,IAAIr3F,EAAOy9B,SACtB,MAAhBz9B,EAAOo0F,KACPhoG,KAAK0lD,OAAOgiJ,eAAez/K,KAAKrU,EAAOy9B,SACvCrxC,KAAK0lD,OAAOgiJ,eAAev5L,MAAMyF,EAAOy9B,SAE5C,GAAOz9B,G,OAMP,O,WAJMy9B,EAAUxiC,OAAO,GACvB7O,KAAK0lD,OAAOgiJ,eAAev5L,MAAMkjC,GAGjC,GAFMz9B,EAAS,EAAYuzH,EAAO,EAAG91F,I,yBAMzC,YAAAu+J,UAAA,SAAUD,GACH3vM,KAAK0lD,OAIV1lD,KAAK0lD,OAAOiqJ,OAAStyM,QAAQsyM,GAH3B3vM,KAAKmtJ,EAAE/gJ,KAAKpM,KAAK4vM,UAAU9tL,KAAK9hB,KAAM3C,QAAQsyM,MAMlD,YAAA7d,MAAA,WACE,OAAO,YAAc9xL,KAAK2uM,SAAS7c,UAEvC,EA/HA,G,UCpBA,0BACE,KAAAtjL,KAAO,WACP,KAAAtO,KAAO,SAEP,KAAA2vM,cAAgB,cAAwBA,cAe1C,OAbQ,YAAAnJ,QAAN,SAAcx9L,G,6FAKZ,OAJM4mM,EAAiB5mM,EAAQolM,kBAE7BtuM,KAAK6vM,cAAcE,eAAeC,qBAAqBF,GAAgBnQ,SAEzE,GAAOz2L,UAGH,YAAAm9L,MAAN,SAAY3gJ,G,8FACNA,EAAOuqJ,eACTjwM,KAAK6vM,cAAgB,YAAsBnqJ,EAAOuqJ,cAAcJ,e,WAGtE,EAnBA,GCUMK,EAAoB,SACxBC,EACAhpE,GAEA,MAA+B,mBAApBgpE,EACFA,GAGwB,KAAd,OAAfA,QAAe,IAAfA,OAAe,EAAfA,EAAkBhpE,KAOXipE,EAA+B,SAACD,GAC3C,OAAAD,EAAkBC,EAAiB,gBAQxBE,EAA4B,SAACF,GACxC,OAAAD,EAAkBC,EAAiB,cAKxBG,EAA4B,SAAC5qJ,GACxC,IAEI6qJ,EAFAC,EAA2C,WAAM,UACjDC,OAA8D30M,EAE5D40M,EAAchrJ,EAAOgrJ,YA2B3B,OAzByCL,EAA0B3qJ,EAAOyqJ,mBAExEK,OAAU10M,EACVy0M,OAAYz0M,EAGV4pD,EAAOyqJ,iBAC2B,kBAA3BzqJ,EAAOyqJ,iBACdzqJ,EAAOyqJ,gBAAgBQ,WACqB,kBAArCjrJ,EAAOyqJ,gBAAgBQ,YAE1B,YAAajrJ,EAAOyqJ,gBAAgBQ,YACtCH,EAAU9qJ,EAAOyqJ,gBAAgBQ,UAAUH,SAGzC,wBAAyB9qJ,EAAOyqJ,gBAAgBQ,YAClDF,EAAsB/qJ,EAAOyqJ,gBAAgBQ,UAAUF,qBAGrD,cAAe/qJ,EAAOyqJ,gBAAgBQ,WAAajrJ,EAAOyqJ,gBAAgBQ,UAAUJ,YACtFA,EAAY7qJ,EAAOyqJ,gBAAgBQ,UAAUJ,aAK5C,CACLC,QAAO,EACPC,oBAAmB,EACnBF,UAAS,EACTG,YAAW,IC9EF,EAAe,SAAC,EAAwB,GAInD,YAJmD,UAAwB,KAAK,OAC5D,KAAK,MACgB,EAEb,GCUjBE,EAAiC,SAAIvjL,EAAak/H,GAC7D,IAAK,IAAIvpJ,EAAI,EAAGA,EAAIupJ,EAAM1qJ,OAAQmB,IAAK,CAC/B,MAA0BupJ,EAAMvpJ,GAA9B,EAAI,OAAEgoB,EAAI,OAAEk0B,EAAO,UACrBr8C,EAAKwqB,GAAYA,EAAS,GAChC,GAAkB,oBAAPxqB,EAAmB,CAC5B,IAAM+Q,EAAS/Q,EAAGoF,MAAMolB,EAAUrC,GACX,oBAAZk0B,GACTA,EAAc,OAANtrC,QAAM,IAANA,OAAM,EAANA,EAAQouI,UAItB,OAAO30H,GAMIwjL,EAAkB,SAACxjL,GAE9B,OADsBA,QACuBvxB,IADvBuxB,EACgByjL,ICjC3BC,EAAc,W,YACzB,GAAyB,qBAAdC,UAA2B,MAAO,GAE7C,IAAMC,EAAgBD,UAAkBC,aAExC,OAAqE,QAA9D,EAA8C,QAA9C,EAAwB,QAAxB,EAAmB,QAAnB,EAAAD,UAAUh4J,iBAAS,eAAG,UAAE,QAAIg4J,UAAU11J,gBAAQ,QAAI21J,SAAY,QAAI,ICE3E,aAWE,aAVA,KAAAziM,KAAO,oCACP,KAAAtO,KAAO,SAOP,KAAAgxM,QAAU,uBChBW,SDoBM,qBAAdF,YACThxM,KAAKmxM,UAAYH,UAAUG,WA4CjC,OAxCE,YAAA9K,MAAA,SAAM3gJ,GAGJ,OAFA1lD,KAAK0lD,OAASA,EAEPzG,QAAQC,aAAQpjD,IAGnB,YAAA4qM,QAAN,SAAcx9L,G,yGAgCZ,OA/BM+iD,GAAO,IAAIl+B,MAAOC,UAClBojL,EAAqC,QAAvB,EAAApxM,KAAK0lD,OAAO0rJ,mBAAW,SAAK,EAC1CC,EAA8B,QAAhB,EAAAnoM,EAAQooM,gBAAQ,QAAIF,EAAc,EACtDpxM,KAAK0lD,OAAO0rJ,YAAcC,EACrBnoM,EAAQ+iD,OACXjsD,KAAK0lD,OAAO6rJ,cAAgBtlJ,GA0B9B,GAvBW,iGACTq+I,QAAStqM,KAAK0lD,OAAOs6C,OACrBuqG,UAAWvqM,KAAK0lD,OAAO8rJ,SACvBC,WAAYzxM,KAAK0lD,OAAOwkD,UACxBj+C,KAAI,GACAjsD,KAAK0lD,OAAOgsJ,YAAc,CAAEC,YAAa3xM,KAAK0lD,OAAOgsJ,aACrD1xM,KAAK0lD,OAAOksJ,gBAAgBC,UAAY,CAAEA,SAzC3B,QA0Cf7xM,KAAK0lD,OAAOksJ,gBAAgBt2J,UAAY,CAAEA,SAAUy1J,MACpD/wM,KAAK0lD,OAAOksJ,gBAAgBE,WAAa,CAAEC,GA1ClC,YA0CmD,CAChEnL,UAAWjB,IACXqM,WAAYhyM,KAAK0lD,OAAOusJ,UACxBC,KAAMlyM,KAAK0lD,OAAOwsJ,OACdlyM,KAAK0lD,OAAOysJ,mBAAqB,CACnCC,mBAAoB,CAClBC,YAAaryM,KAAK0lD,OAAOysJ,kBAAkBG,WAC3CC,eAAgBvyM,KAAK0lD,OAAOysJ,kBAAkBK,iBAG/CtpM,GAAO,CACVooM,SAAUD,EACVH,QAASlxM,KAAKkxM,QACduB,WAAYzyM,KAAKmxM,oBAIvB,EA1DA,G,SELA,0BACE,KAAAuB,cAAgC,IAAI9/L,IA0BtC,OAxBQ,YAAA+/L,UAAN,W,uFACE,UAAO,UAGH,YAAA5uM,IAAN,SAAUO,G,uFACR,SAAOtE,KAAK0yM,cAAc3uM,IAAIO,WAG1B,YAAAsuM,OAAN,SAAatuM,G,oHACG,SAAMtE,KAAK+D,IAAIO,I,OAC7B,UADM5I,EAAQ,UACCiT,KAAKC,UAAUlT,QAASI,WAGnC,YAAA4L,IAAN,SAAUpD,EAAa5I,G,8FACrBsE,KAAK0yM,cAAchrM,IAAIpD,EAAK5I,G,WAGxB,YAAAwT,OAAN,SAAa5K,G,8FACXtE,KAAK0yM,cAAclqF,OAAOlkH,G,WAGtB,YAAAqmE,MAAN,W,8FACE3qE,KAAK0yM,cAAcx/L,Q,WAEvB,EA3BA,G,UCAa,EAAgB,SAACozL,EAAgBuM,EAAcppF,GAC1D,YAD4C,IAAAopF,MAAA,SAAc,IAAAppF,MAAA,IACnD,CAAC,IAAkBopF,EAASvM,EAAO7zH,UAAU,EAAGg3C,IAAQl+G,OAAOlO,SAASokB,KAAK,M,SCDzE,EAAiB,W,MACtBqxL,EAAc,cAEpB,OAA0B,QAArB,EAAW,OAAXA,QAAW,IAAXA,OAAW,EAAXA,EAAarpJ,gBAAQ,eAAEw0I,QAGd6U,EAAYrpJ,SAASw0I,OAAOxrH,UAAU,GAAG1zB,MAAM,KAAKxzC,OAAOlO,SACpDsO,QAA2C,SAACutI,EAAK65D,GACpE,IAAM70E,EAAQ60E,EAAKh0J,MAAM,IAAK,GACxBz6C,EAAM0uM,EAAsB90E,EAAM,IAClCxiI,EAAQs3M,EAAsB90E,EAAM,IAC1C,OAAKxiI,GAGLw9I,EAAI50I,GAAO5I,EACJw9I,GAHEA,IAIR,IAZM,IAgBE85D,EAAwB,SAACt3M,QAAA,IAAAA,MAAA,IACpC,IACE,OAAOmhK,mBAAmBnhK,GAC1B,SACA,MAAO,KCvBX,aAIE,WAAYswC,GACVhsC,KAAKgsC,QAAO,eAAQA,GA6FxB,OA1FQ,YAAA2mK,UAAN,W,sHAEE,IAAK,cACH,UAAO,GAGTM,EAAcC,UAAYrkM,OAAOkf,KAAK+xB,OAChCqzJ,EAAe,IAAIF,EAAsBjzM,KAAKgsC,SAC9ConK,EAAU,W,iBAEd,O,uBAAA,GAAMD,EAAazrM,IAAI0rM,EAASH,EAAcC,Y,OAChC,OADd,SACc,GAAMC,EAAapvM,IAAIqvM,I,OACrC,SADc,WACGH,EAAcC,W,OAG/B,O,SAAA,IAAO,G,OAEP,SAAMC,EAAajkM,OAAOkkM,I,cAA1B,S,6BAIE,YAAArvM,IAAN,SAAUO,G,oHACI,SAAMtE,KAAK4yM,OAAOtuM,I,OAC9B,KADI5I,EAAQ,UAEV,cAAOI,GAET,IACE,IACEJ,EAAQmhK,mBAAmBw2C,KAAK33M,IAChC,UAIF,SAAOiT,KAAK6tC,MAAM9gD,IAClB,SAEA,cAAOI,G,kBAIL,YAAA82M,OAAN,SAAatuM,G,yGAIX,OAHMwuM,EAAc,cACdQ,EAAkD,QAAzC,EAAqB,QAArB,EAAW,OAAXR,QAAW,IAAXA,OAAW,EAAXA,EAAa9sK,gBAAQ,eAAEstK,OAAOv0J,MAAM,aAAK,QAAI,IACtDxQ,EAAQ+kK,EAAO3xL,MAAK,SAAC9b,GAAM,WAAAA,EAAE2a,QAAQlc,EAAM,SAIjD,GAAOiqC,EAAMkkC,UAAUnuE,EAAIzC,OAAS,IAFlC,QAAO/F,UAKL,YAAA4L,IAAN,SAAUpD,EAAa5I,G,6GACrB,IACQ63M,EAA4C,QAA3B,EAAAvzM,KAAKgsC,QAAQunK,sBAAc,QAAI,EAElDC,OAA+B13M,GAD7B23M,EAAoB,OAAV/3M,EAAiB63M,GAAkB,MAG3CxnF,EAAO,IAAIh+F,MACZ2lL,QAAQ3nF,EAAK/9F,UAAsB,GAAVylL,EAAe,GAAK,GAAK,KACvDD,EAAaznF,GAEXvjG,EAAM,UAAGlkB,EAAG,YAAIqvM,KAAKC,mBAAmBjlM,KAAKC,UAAUlT,MACvD83M,IACFhrL,GAAO,oBAAagrL,EAAWK,gBAEjCrrL,GAAO,WACHxoB,KAAKgsC,QAAQ8nK,SACftrL,GAAO,mBAAYxoB,KAAKgsC,QAAQ8nK,SAE9B9zM,KAAKgsC,QAAQ+nK,SACfvrL,GAAO,YAELxoB,KAAKgsC,QAAQgoK,WACfxrL,GAAO,qBAAcxoB,KAAKgsC,QAAQgoK,YAE9BlB,EAAc,iBAElBA,EAAY9sK,SAASstK,OAAS9qL,GAEhC,U,iBAKE,YAAAtZ,OAAN,SAAa5K,G,8GACX,SAAMtE,KAAK0H,IAAIpD,EAAK,O,cAApB,S,YAGI,YAAAqmE,MAAN,W,uFACE,iBAEJ,EAlGA,G,UCDA,aACE,WAAoBspI,GAAA,KAAAA,UAgEtB,OA9DQ,YAAAtB,UAAN,W,wHAEE,IAAK3yM,KAAKi0M,QACR,UAAO,GAGHzhI,EAAS3jE,OAAOkf,KAAK+xB,OACrBo0J,EAAc,IAAIC,EAAuBn0M,KAAKi0M,SAC9Cb,EAAU,W,iBAEd,O,uBAAA,GAAMc,EAAYxsM,IAAI0rM,EAAS5gI,I,OACjB,OADd,SACc,GAAM0hI,EAAYnwM,IAAIqvM,I,OACpC,SADc,WACG5gI,G,OAGjB,O,SAAA,IAAO,G,OAEP,SAAM0hI,EAAYhlM,OAAOkkM,I,cAAzB,S,6BAIE,YAAArvM,IAAN,SAAUO,G,oHAEQ,O,sBAAA,GAAMtE,KAAK4yM,OAAOtuM,I,OAChC,OADM5I,EAAQ,UAKd,GAAOiT,KAAK6tC,MAAM9gD,IAHhB,QAAOI,G,OAMT,O,SADAksB,QAAQ7Z,MAAM,uDACd,QAAOrS,G,yBAIL,YAAA82M,OAAN,SAAatuM,G,6FACX,UAAmB,QAAZ,EAAAtE,KAAKi0M,eAAO,eAAE/uG,QAAQ5gG,UAAQxI,UAGjC,YAAA4L,IAAN,SAAUpD,EAAa5I,G,6FACrB,IACc,QAAZ,EAAAsE,KAAKi0M,eAAO,SAAE7uG,QAAQ9gG,EAAKqK,KAAKC,UAAUlT,IAC1C,U,iBAKE,YAAAwT,OAAN,SAAa5K,G,6FACX,IACc,QAAZ,EAAAtE,KAAKi0M,eAAO,SAAE5uG,WAAW/gG,GACzB,U,iBAKE,YAAAqmE,MAAN,W,6FACE,IACc,QAAZ,EAAA3qE,KAAKi0M,eAAO,SAAE/gM,QACd,U,iBAIN,EAjEA,GCEMs1J,EAAmB,IAKzB,cAGE,WAAY9iH,GAAZ,I,EAAA,O,SACE,YAAsB,QAAhB,uBAAgB,eAAE0uJ,eAAa,MAChC1M,eAAuB,OAANhiJ,QAAM,IAANA,OAAM,EAANA,EAAQgiJ,e,EAclC,OAnBqC,iBAQ7B,YAAAhgM,IAAN,SAAUpD,EAAa5I,G,iIACjB+F,MAAMC,QAAQhG,IAAUA,EAAMmG,OAAS2mK,GACnC6rC,EAAqB34M,EAAMmG,OAAS2mK,EAC1C,GAAM,YAAM9gK,IAAG,UAACpD,EAAK5I,EAAMoU,MAAM,EAAG04J,MAFlC,M,cAEF,SACmB,QAAnB,EAAAxoK,KAAK0nM,sBAAc,SAAEv5L,MACnB,yBAAkBkmM,EAAkB,qDAA6C7rC,EAAgB,M,aAGnG,SAAM,YAAM9gK,IAAG,UAACpD,EAAK5I,I,OAArB,S,mCAGN,EAnBA,CAAqC,GCNrC,cACE,a,aACE,YAAsB,QAAhB,uBAAgB,eAAE44M,iBAAe,KAE3C,OAJuC,iBAIvC,EAJA,CAAuC,G,UCAvC,yE,OACU,EAAAttK,MAAQ,CACd1mC,KAAM,G,EA8BV,OAhCkC,iBAK1B,YAAAimJ,KAAN,SAAW8hD,EAAmBnhK,G,kGAC5B,SAAO,IAAI+X,SAAQ,SAACC,EAASi3B,GAEG,qBAAnBo+H,gBACTp+H,EAAO,IAAIvuE,MAAM,mCAGnB,IAAM4sM,EAAM,IAAID,eAChBC,EAAI7pG,KAAK,OAAQ09F,GAAW,GAC5BmM,EAAIC,mBAAqB,WACvB,GAAID,EAAIE,aAAe,EAAK1tK,MAAM1mC,KAChC,IACE,IAAMq0M,EAAkBH,EAAII,aAEtBC,EAA6ClmM,KAAK6tC,MAAMm4J,GACxD/gM,EAAS,EAAKkhM,cAAcD,GAClC31J,EAAQtrC,GACR,MAAOxL,GACP+tE,EAAO/tE,KAIbosM,EAAIO,iBAAiB,eAAgB,oBACrCP,EAAIO,iBAAiB,SAAU,OAC/BP,EAAIjuD,KAAK53I,KAAKC,UAAUs4B,eAG9B,EAhCA,CAAkC,KCClC,2B,+CA2BA,OA3ByC,iBACjC,YAAAq/G,KAAN,SAAW8hD,EAAmBnhK,G,kGAC5B,SAAO,IAAI+X,SAAQ,SAACC,EAASi3B,GAC3B,IAAM28H,EAAc,cAEpB,KAAgB,OAAXA,QAAW,IAAXA,OAAW,EAAXA,EAAa9B,UAAUgE,YAC1B,MAAM,IAAIptM,MAAM,wCAElB,IACE,IAAMozC,EAAOrsC,KAAKC,UAAUs4B,GAE5B,OACSgY,EAFO4zJ,EAAY9B,UAAUgE,WAAW3M,EAAW15L,KAAKC,UAAUs4B,IAGvE,EAAK4tK,cAAc,CACjB9sG,KAAM,IACNitG,gBAAiB/tK,EAAQw6G,OAAO7/I,OAChCqzM,mBAAoBl6J,EAAKn5C,OACzBszM,mBAAoBpnL,KAAK+xB,QAIhB,EAAKg1J,cAAc,CAAE9sG,KAAM,OAC1C,MAAO5/F,GACP+tE,EAAO/tE,eAIf,EA3BA,CAAyC,KCD5B,EAAqB,SAChCk+L,EACA8O,EACAC,G,YAAA,IAAAA,OAAA,G,+HAGgB,OADVC,ERFwB,SAAChP,GAC/B,MAAO,UAAG,IAAiBltJ,cAAa,YAAIktJ,EAAO7zH,UAAU,EAAG,IQC7C,CAAiB6zH,GACpB,GAAM8O,EAAcxC,OAAO0C,I,OAC3C,OADMC,EAAU,UAMZF,EACF,GAAMD,EAAclmM,OAAOomM,IADzB,MAJF,GAAO,CACL3F,QAAQ,I,OAIV,S,iBAGF,OADM,cAAoE4F,EAAQx2J,MAAM,KAAI,GAArFyyJ,EAAQ,KAAExxG,EAAM,KAAE2vG,EAAM,KAAEzlG,EAAS,KAAEqnG,EAAa,KAAEH,EAAW,KACtE,GAAO,CACLI,SAAQ,EACRxxG,OAAQq2D,EAAOr2D,GACfkK,UAAWsrG,EAAUtrG,GACrBknG,YAAaoE,EAAUpE,GACvBG,cAAeiE,EAAUjE,GACzB5B,OAAQtyM,QAAQsyM,aAIP6F,EAAY,SAACt8F,GACxB,IAAMu8F,EAAU75J,SAASs9D,EAAK,IAC9B,IAAI98D,MAAMq5J,GAGV,OAAOA,GAGIp/C,EAAS,SAAC36J,GACrB,GAAK23M,MAASrwD,QAAWtnJ,EAGzB,IACE,OAAOmhK,mBAAmB7Z,OAAOqwD,KAAK33M,KACtC,SACA,SC1CS,EAAuB,cAGvB,IAD0B,UAAG,EAAoB,gBACtB,UAAG,EAAoB,kBAClD,GAA4B,UAAG,EAAoB,mBACnD,GAA8B,UAAG,EAAoB,oBACrD,GAA8B,gBAC9B,GAA4B,cAE5B,GAAiB,UAAG,EAAoB,mBACxC,GAAY,UAAG,EAAoB,cACnC,GAAU,UAAG,EAAoB,YACjC,GAAY,UAAG,EAAoB,cACnC,GAAW,UAAG,EAAoB,aAElC,GAAU,UAAG,EAAoB,YACjC,GAAY,UAAG,EAAoB,cACnC,GAAmB,UAAG,EAAoB,qBAE1C,GAAgD,SCS7D,eASI,SAAF,EACS,EACA,EACP,EACO,EAOA,EACP,EACO,EACA,EACA,EACA,EACA,EACA,EACP,EACA,EACO,EACA,EACA,EACA,EACP,EACO,EACA,EACA,EACA,EACP,EACO,EACA,EACA,EAKA,EACA,EACP,EACA,QAtCA,cAA0C,QACnC,WACL,OAAQ,GACR,WAAY,IACZ,SAAU,MACV,QAAQ,EACR,SAAS,SAIJ,oBACA,kBACA,mBACA,mBAKA,cAA8B,UAC9B,UAAqB,IAAS,WAE9B,mBACP,mBAGO,mBACA,UD9CwC,WCgDxC,UAAyB,WACzB,cAAwC,EAAa,CAAE,eAAc,UACrE,WACL,WAAW,EACX,UAAU,EACV,UAAU,SAEL,wBACA,cAvCT,MA2CE,YAAM,CAAE,OAAM,EAAE,gBAAe,EAAE,kBAAmB,GAAgB,MAAa,K,OA1C1E,WACA,eAEA,kBAOA,oBAEA,wBACA,oBACA,mBACA,oBACA,sBACA,iBAGA,mBACA,aACA,gBACA,YAEA,cACA,SACA,cACA,eAEA,mBACA,oBACA,oBAKA,cACA,aA3CC,WAAU,EAgDlB,EAAK,eAAiB,EACtB,EAAK,SAAW,EAChB,EAAK,YAAc,EACnB,EAAK,cAAgB,EACrB,EAAK,OAAS,EACd,EAAK,UAAY,EACjB,EAAK,YAAc,EACnB,EAAK,OAAS,EACd,EAAK,eAAe,OAAO,EAAK,U,EAuGpC,OApKmC,iBAgEjC,sBAAI,4BAAa,C,IAAjB,WACE,OAAO,KAAK,gB,IAGd,SAAkB,GACZ,KAAK,iBAAmB,IAC1B,KAAK,eAAiB,EACtB,KAAK,kB,gCAIT,sBAAI,uBAAQ,C,IAAZ,WACE,OAAO,KAAK,W,IAGd,SAAa,GACP,KAAK,YAAc,IACrB,KAAK,UAAY,EACjB,KAAK,kB,gCAIT,sBAAI,qBAAM,C,IAAV,WACE,OAAO,KAAK,S,IAGd,SAAW,GACL,KAAK,UAAY,IACnB,KAAK,QAAU,EACf,KAAK,kB,gCAIT,sBAAI,wBAAS,C,IAAb,WACE,OAAO,KAAK,Y,IAGd,SAAc,GACR,KAAK,aAAe,IACtB,KAAK,WAAa,EAClB,KAAK,kB,gCAIT,sBAAI,qBAAM,C,IAAV,WACE,OAAO,KAAK,S,IAGd,SAAW,GACL,KAAK,UAAY,IACnB,KAAK,QAAU,EACf,KAAK,kB,gCAIT,sBAAI,4BAAa,C,IAAjB,WACE,OAAO,KAAK,gB,IAGd,SAAkB,GACZ,KAAK,iBAAmB,IAC1B,KAAK,eAAiB,EACtB,KAAK,kB,gCAIT,sBAAI,0BAAW,C,IAAf,WACE,OAAO,KAAK,c,IAGd,SAAgB,GACV,KAAK,eAAiB,IACxB,KAAK,aAAe,EACpB,KAAK,kB,gCAIT,sBAAI,0BAAW,C,IAAf,WACE,OAAO,KAAK,c,IAGd,SAAgB,GACV,KAAK,eAAiB,IACxB,KAAK,aAAe,EACpB,KAAK,kB,gCAID,0BAAR,WACE,IAAM,EAAQ,CACZ,SAAU,KAAK,UACf,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,OAAQ,KAAK,QACb,cAAe,KAAK,eACpB,YAAa,KAAK,aAClB,YAAa,KAAK,cAEf,KAAK,cAAc,IAAI,EAAc,KAAK,QAAS,IAE5D,EApKA,CAAmC,KAsKtB,GAAmB,SAC9B,EACA,EACA,G,YADA,c,oMAIM,EAAkB,EAAQ,iBAAmB,G,KAG/C,IAAoB,GAApB,OAA+C,K,qBAAkC,Q,EAAR,QAArB,IAAQ,qBAAa,eAAE,cAAM,a,kBAAK,SAAM,M,OAAP,EAAC,S,iBAAlC,I,iBAUlC,OAZhB,EAAa,mBACjB,SAAM,EAEN,aAAY,IACZ,WAAU,MACV,UAAQ,EACR,WAAS,EAAI,GACV,EAAQ,gBAEP,EAAgB,GAAiC,EAAQ,gBAAiB,GAG1D,GAAM,EAAmB,EAAQ,EAA6C,QAA9B,EAAqB,QAArB,IAAQ,qBAAa,eAAE,eAAO,W,OAC5E,OADlB,EAAgB,SACE,GAAM,EAAc,IAAI,EAAc,K,OAqB9D,OArBM,EAAkB,SAClB,EAAc,IAGd,EAC2F,QAA/F,EAAqE,QAArE,EAAwC,QAAxC,EAAgB,QAAhB,IAAQ,gBAAQ,QAAI,EAAY,gBAAQ,QAAmB,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,gBAAQ,QAAI,EAAc,gBAAQ,QAAI,IAC/F,EAA0C,QAA5B,EAAe,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,mBAAW,QAAI,EAAc,YAC5D,EAA8C,QAA9B,EAAe,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,qBAAa,QAAI,EAAc,cAChE,EAAkD,QAAzC,EAAc,QAAd,IAAQ,cAAM,QAAmB,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,cAAM,QAAI,EAAc,OACpE,EAAsC,QAA1B,EAAe,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,iBAAS,QAAI,EAAc,UACxD,EAAkD,QAAzC,EAAc,QAAd,IAAQ,cAAM,QAAmB,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,cAAM,QAAI,EAAc,OAC1E,EAAkB,wBAAmD,QAAzB,EAAe,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,gBAAQ,QAAI,EAAc,SACvF,EAAkB,sBAA+C,QAAvB,EAAe,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,cAAM,QAAI,EAAc,OAE7E,EAAkB,CACtB,UAA6C,QAAlC,EAAuB,QAAvB,IAAQ,uBAAe,eAAE,iBAAS,SAC7C,SAA2C,QAAjC,EAAuB,QAAvB,IAAQ,uBAAe,eAAE,gBAAQ,SAC3C,SAA2C,QAAjC,EAAuB,QAAvB,IAAQ,uBAAe,eAAE,gBAAQ,UAEvC,EAA6B,OAAf,QAAe,IAAf,OAAe,EAAf,EAAiB,YAErC,GAAO,IAAI,GACT,EACA,EAAQ,WACR,EACA,EACA,EAAQ,gBACR,EACA,EAAQ,oBACR,EAAQ,gBACR,EAAQ,eACR,EACA,EAAQ,kBACR,EAAQ,aACR,EACA,EACA,EAAQ,eACR,EAAQ,SACR,EAAQ,YACR,EAAQ,QACR,EACA,EAAQ,UACR,EAAQ,KACR,EAAQ,UACR,EAAQ,WACR,EACA,EAAQ,eACR,EAAQ,gBACR,EACA,EAAQ,UACR,EAAQ,SACR,EACA,YAIS,GAAsB,SACjC,EACA,GAEA,YAHA,mBACA,cAEQ,GACN,IAAK,eACH,OAAO,IAAI,EACb,IAAK,iBACH,OAAO,IAAI,EACb,IAAK,OACH,OAAO,IAAI,EAEb,QACE,OAAO,IAAI,EAAa,2BACnB,GAAa,CAChB,eAAgB,EAAc,gBAKzB,GAAkB,SAAC,GAC9B,MAAkB,QAAd,EACK,IAAI,EAEK,WAAd,EACK,IAAI,EAEN,IAAI,KAGA,GAAoB,SAAO,GAAY,oD,8EAC5C,UAAM,IAAI,GAAwB,a,OAAxC,IAAM,WAAoD,GAA2B,qBAAb,SACtE,SAAO,IAQT,IALM,EAAU,OAAH,QAAG,IAAH,IAAO,SAAS,SACvB,EAAQ,EAAK,MAAM,KACnB,EAAS,GACT,EAAa,cAEV,EAAI,EAAM,OAAS,EAAG,GAAK,IAAK,EACvC,EAAO,KAAK,EAAM,MAAM,GAAG,KAAK,MAEzB,EAAI,E,wBAAG,EAAI,EAAO,QACnB,EAAS,EAAO,GAGtB,IADM,EAAU,IAAI,EADJ,CAAE,OAAQ,IAAM,KAElB,IAAI,EAAY,KAJC,M,OAKjB,OADd,SACc,GAAM,EAAQ,IAAI,I,cAAlB,SAEZ,GAAM,EAAQ,OAAO,IADnB,M,OAEF,OADA,SACA,GAAO,IAAM,G,cARkB,I,aAYnC,SAAO,YChTIg6M,GAA0B,CACrCC,kBAAc75M,EACd85M,iBAAa95M,EACb+5M,YAAQ/5M,EACRg6M,gBAAYh6M,EACZi6M,gBAAYj6M,EACZk6M,cAAUl6M,EACVm6M,cAAUn6M,EACVo6M,sBAAkBp6M,EAClBq6M,WAAOr6M,EACPs6M,YAAQt6M,EACRu6M,WAAOv6M,EACPw6M,YAAQx6M,EACRy6M,iBAAaz6M,EACb06M,eAAW16M,EACX26M,aAAS36M,EACT46M,aAAS56M,EACT66M,YAAQ76M,EACR86M,YAAQ96M,EACR+6M,YAAQ/6M,GCbV,4BA4DA,OA3DQ,YAAA0gD,MAAN,W,uFACE,SAAO,mDACFk5J,IACA11M,KAAK82M,eACL92M,KAAK+2M,eACL/2M,KAAKg3M,uBAIZ,YAAAF,YAAA,WACE,IAAMnkK,EAAS,IASf,MAAO,CACLgjK,aARkBhjK,EAAM,aASxBijK,YARiBjjK,EAAM,YASvBkjK,OARYljK,EAAM,OASlBmjK,WARgBnjK,EAAM,WAStBojK,WARgBpjK,EAAM,WAStBqjK,SARcrjK,EAAM,WAYxB,YAAAokK,YAAA,W,QACQ/7J,EAA2B,CAC/Bi7J,cAAUn6M,EACVo6M,sBAAkBp6M,GAEpB,IACEk/C,EAAKi7J,SAAWjwK,SAASiwK,eAAYn6M,EACrCk/C,EAAKk7J,iBAA+C,QAA5B,EAAa,QAAb,EAAAl7J,EAAKi7J,gBAAQ,eAAEl3J,MAAM,KAAK,UAAE,aAAIjjD,EACxD,UAGF,OAAOk/C,GAGT,YAAAg8J,YAAA,W,MACQrkK,EAAS,IACf,aACE,MAASA,EAAM,MACf,SAAUA,EAAM,OAChB,SAAUA,EAAM,OAChB,QAASA,EAAM,MACf,cAAeA,EAAM,YACrB,YAAaA,EAAM,UACnB,UAAWA,EAAM,QACjB,UAAWA,EAAM,QACjB,SAAUA,EAAM,OAChB,SAAUA,EAAM,OAChB,SAAUA,EAAM,OAChB,GAEN,EA5DA,GCpBM,GAAyB,SAAC,GAC9B,IAAM,EAAQ,EAAO,MAAM,KAE3B,OAAI,EAAM,QAAU,EACX,EAGF,EAAM,MAAM,EAAM,OAAS,EAAG,EAAM,QAAQ,KAAK,MAQ7C,GAAgB,SAC3B,EACA,EACA,EACA,sBAE2D,EAA3C,SAAR,IAAU,EAAyC,EAAzB,iBAAK,EAAe,YAAK,EAArD,iCACA,EAA+F,GAAY,GAAzD,GAApB,WAAuC,oBAAK,EAAgB,cAA1F,iCAEN,GAAI,GAAmB,EAAQ,iBAAkB,EAAQ,kBACvD,OAAO,EAIT,IAAK,GAlBiB,SAAC,GACvB,OAAO,OAAO,OAAO,GAAS,OAAM,SAAC,GAAU,YAiB1B,CAAgB,IAAY,EAC/C,OAAO,EAGT,IAAM,EAAiB,KAAK,UAAU,KAAqB,KAAK,UAAU,GACpE,EACJ,GAAuB,GAAoB,MAAQ,GAAuB,GAAuB,IAEnG,OAAQ,GAAY,GAAkB,GAG3B,GAAqB,SAAC,EAA4C,GAC7E,YADiC,mBAA4C,cACtE,EAAiB,MAAK,SAAC,GAC5B,oBAAiB,OAAS,EAAM,KAAK,GAAmB,IAAU,MAsBzD,GAA8B,SAAC,GAC1C,IAAI,EAAS,EACb,OAAI,GACE,EAAO,WAAW,OACpB,EAAS,EAAO,UAAU,IAErB,CAAC,IAAI,OAAO,UAAG,EAAO,QAAQ,IAAK,OAAM,QAE3C,IC3EI,GAAmD,SAAU3G,GAAV,gBAAU,IAAAA,MAAA,IACxE,IAAMwhK,EAAuB,CAC3Bh/L,KAAM,4CACNtO,KAAM,SAENmmM,MAAO,SAAgB3gJ,EAAuB+gD,G,wIAaA,OAZtCwwG,EAAe,OAAH,IAAG,CAAH,CAChBC,kBAAmB,QACnBC,2BAA2B,EAC3BC,iBAAkBC,GAAgD,QAApB,EAAA3xJ,EAAO4xJ,qBAAa,eAAExD,SACjE9nK,GAEL0Z,EAAOgiJ,eAAez8F,IAAI,yDAGpBgpG,EAAUvuJ,EAAO0vJ,cDhBC,ECiBS1vJ,EAAO4gJ,YDjBA,OCiBQ,UDjBR,WAAc,cCiBhDH,EDhBH,CAAC,IAAkB,EAAS,EAAO,UAAU,EAAG,IAAQ,OAAO,SAAS,KAAK,KCkBpC,GAAMlnJ,QAAQwnJ,IAAI,EAC5D,IAAI,IAAiBjqJ,QACrBy3J,EAAQlwM,IAAIoiM,M,cAFR,oBAAsC,SAG1C,IAHKoR,EAAe,KAAEC,EAAgB,KAKlCC,EAAsB,EAAa/xJ,EAAOgyJ,eAAgBhyJ,EAAO6rJ,eAEnE,GAAcgG,EAAiBC,EAAkBP,EAAcQ,KAC7DR,EAAaE,4BACf1wG,EAAUkxG,aAAa5pL,KAAK+xB,OAC5B4F,EAAOgiJ,eAAez8F,IAAI,4CAE5BvlD,EAAOgiJ,eAAez8F,IAAI,yBACpB2sG,EDkBqB,SAAC,EAAoB,GACtD,IAAM,EAAkB,2BAGnB,IACA,GAEC,EAAgB,OAAO,QAAQ,GAAoB,QAAO,SAAC,EAAU,G,MAAA,mBAAC,EAAG,KAAE,EAAK,KAEpF,OADA,EAAS,QAAQ,kBAAW,GAAyC,QAAlC,EAAK,OAAL,QAAK,IAAL,IAAS,EAAQ,yBAAiB,QAAI,SACrE,EACK,EAAS,IAAI,EAAK,GAEpB,EAAS,MAAM,KACrB,IAAI,GAEP,OAAO,EAAoB,GCjCC,CAAoBL,EAAiBN,GAC3DxwG,EAAUioG,MAAMkJ,GACX3D,EAAQvsM,IAAIy+L,EAAYoR,I,IDlCR,IAAC,EAAgB,EAAc,SCsCxD7Q,QAAS,SAAOv/D,GAAY,oFAAK,SAAAA,WAGnC,OAAOqmE,GC9CIqK,GAAgB,SAACpzF,GAC5B,IAAM39G,EAA8B,GACpC,IAAK,IAAMxC,KAAOmgH,EAAO,CACvB,IAAMxuG,EAAMwuG,EAAMngH,GACd2R,IACFnP,EAAIxC,GAAO2R,GAGf,OAAOnP,GCMI,GAAuD,SAACklC,GACnE,IAAIy6D,OAD+D,IAAAz6D,MAAA,IAEnE,IAEI8rK,EACAC,EAHEjF,EAAc,cAChBpL,OAAqC5rM,EAInCk8M,EAAsB,+D,sEAKlB,OAJRD,EAAYrH,YAAeqH,EAAYrH,YAAkBqH,EAAYrH,YAAc,EAA9B,E,GAEnDtC,WAA6B,QAAjB,EAAApiK,EAAQukK,iBAAS,QAAI,2B,OAE3B,GAAM,M,OAHd,UAEE,EAAApB,iBAAgB,6CACV,YAA0B,CAC9B,0BACkD,qBAAb1lJ,UAA4BA,SAASwuJ,UAAa,GACvF,4BACkD,qBAAbxuJ,UAA4BA,SAAS2jE,MAAS,GACnF,wBACkD,qBAAb3jE,UAA4BA,SAAS0C,UAAa,GACvF,yBAA0E,qBAAbnmB,UAA4BA,SAASkkF,OAAU,GAC5G,uBACkD,qBAAbzgE,UAA4BA,SAAS2jE,KAAKruE,MAAM,KAAK,IAAO,GACjG,2BAA4Bg5J,EAAYrH,eAE1C,YAGEwH,EAAwB,WAC5B,MAA2B,qBAApBlsK,EAAQwkK,SAAuD,oBAApBxkK,EAAQwkK,SAA0BxkK,EAAQwkK,WAG1F2H,EAAiD,qBAAb1uJ,SAA2BA,SAAS2jE,KAAO,KAE7EgrF,EAAuB,+D,+EACrBC,EAAS5uJ,SAAS2jE,KAClBkrF,EACJC,GAA2BvsK,EAAQykK,oBAAqB4H,EAAQF,GAAe,KAAOD,IAKxFC,EAAcE,EAEVC,GAEY,OAAd5Q,QAAc,IAAdA,KAAgBz8F,IAAI,4BACX,OAATxE,QAAS,IAATA,EAAS,Y,UAHP,M,OAGe,O,GAAjB,EAAAA,GAAWioG,MAAM,GAAMsJ,K,kBAAN,W,oDAKfQ,EAA8B,WAC7BJ,KAgEP,MA7DiC,CAC/B5pM,KAAM,+CACNtO,KAAM,aAENmmM,MAAO,SAAO3gJ,EAAuB0nJ,GAAqB,oD,2EACxD3mG,EAAY2mG,EACZ2K,EAAcryJ,GAEdgiJ,EAAiBhiJ,EAAOgiJ,gBACTz8F,IAAI,2DAEf6nG,IACFA,EAAY9pG,iBAAiB,WAAYwvG,GAIzCV,EAAYhF,EAAYxiF,QAAQwnF,UAOhChF,EAAYxiF,QAAQwnF,UAAY,IAAIW,MAAM3F,EAAYxiF,QAAQwnF,UAAW,CACvE7vM,MAAO,SAAC+kB,EAAQ+oD,EAAS,G,IAAA,mBAAC/uC,EAAK,KAAE0xK,EAAM,KAAEl3G,EAAG,KAC1Cx0E,EAAO/kB,MAAM8tE,EAAS,CAAC/uC,EAAO0xK,EAAQl3G,IACjC42G,QAKPF,KACFxQ,EAAez8F,IAAI,4BAEnB,KAAAxE,GAAUioG,MAAM,GAAMsJ,MAHpB,M,OAGF,WAAgB,W,mCAIpBtR,QAAS,SAAOv/D,GAAY,oD,wEACF,gBAApBn7F,EAAQwkK,SAA6B,GAAgBrpE,IAEzC,OAAdugE,QAAc,IAAdA,KAAgBz8F,IAAI,wEACE,GAAM+sG,MAH1B,M,OAGIW,EAAgB,SACtBxxE,EAAMinE,WAAauK,EAAcvK,WACjCjnE,EAAMgoE,iBAAgB,2BACjBhoE,EAAMgoE,kBACNwJ,EAAcxJ,kB,iBAGrB,SAAOhoE,WAGTwmE,SAAU,+D,4CACJmF,IACFA,EAAY7pG,oBAAoB,WAAYuvG,GACxCV,IACFhF,EAAYxiF,QAAQwnF,UAAYA,I,aAQpC,GAAoB,0G,uBAA0B,OAAd,EAAAD,GAAc,IAAM,IAAI,IAAiBr7J,S,OAAzC,yBAAc,oBAE9C,GAAkB,SAAC2qF,GACvB,GAAyB,cAArBA,EAAMinE,YAA8BjnE,EAAMmnE,gBAAiB,CAC7D,IAAM3X,EAAaxvD,EAAMmnE,gBACnBsK,EAAOjiB,EAAWmP,EAAkBoF,MAAQ,GAC5C2N,EAASliB,EAAWmP,EAAkB+F,QAAU,GAChD,EAAiB,OAAH,IAAG,CAAH,2BAAOztM,OAAO0D,KAAK82M,KAAK,eAAKx6M,OAAO0D,KAAK+2M,KAAO,GACpE,OAAOz6M,OAAO0D,KAAK4zM,IAAenoM,OAAM,SAAC7R,GAAU,SAAe6N,SAAf,MAErD,OAAO,GAGIgvM,GAA6B,SACxCO,EACAT,EACAU,GAEA,MACO,aADCD,EAEGT,EAAOt5J,MAAM,KAAK,KAAOg6J,EAAOh6J,MAAM,KAAK,GAE3Cs5J,IAAWU,GC3IX,GAA0B,WACrC,IAAIplI,EACAqlI,EAAkC,GAEhChwG,EAAmB,SAAC8+F,EAAkB5nM,EAA2B+4M,GACrEnR,EAAQ9+F,iBAAiB9oG,EAAM+4M,GAC/BD,EAAe5sM,KAAK,CAClB07L,QAAO,EACP5nM,KAAI,EACJ+4M,QAAO,KAmGX,MAAO,CACLzqM,KAxFW,sDAyFXtO,KAxFW,aAyFXmmM,MAxFY,SAAO3gJ,EAAuB+gD,GAAwB,oD,4CAKlE/3E,OAAOs6E,iBAAiB,QAAQ,WAE9B,GAAKvC,GASL,GAAwB,qBAAbzgE,SAAX,CAIA,IAAMkzK,EAA6B,SAACz7F,GAClC,IAAI07F,GAAiB,EAErBnwG,EAAiByU,EAAM,UAAU,W,MAC1B07F,GACH1yG,EAAUioG,MAAM0K,KAAwB,MACrCC,IAAUC,GAAkB77F,EAAKx8E,IAClC,EAACs4K,IAAYD,GAAkB77F,EAAKjvG,MACpC,EAACgrM,IAAmB/7F,EAAKvyF,OACzB,IAEJiuL,GAAiB,KAGnBnwG,EAAiByU,EAAM,UAAU,W,QAC1B07F,GACH1yG,EAAUioG,MAAM0K,KAAwB,MACrCC,IAAUC,GAAkB77F,EAAKx8E,IAClC,EAACs4K,IAAYD,GAAkB77F,EAAKjvG,MACpC,EAACgrM,IAAmB/7F,EAAKvyF,OACzB,IAGJu7E,EAAUioG,MAAM+K,KAAyB,MACtCJ,IAAUC,GAAkB77F,EAAKx8E,IAClC,EAACs4K,IAAYD,GAAkB77F,EAAKjvG,MACpC,EAACgrM,IAAmB/7F,EAAKvyF,OACzB,IACFiuL,GAAiB,MAKP13M,MAAMuN,KAAKg3B,SAAS0zK,qBAAqB,SACjDhtM,QAAQwsM,GAIkB,qBAArBS,mBACThmI,EAAW,IAAIgmI,kBAAiB,SAACC,GAC/BA,EAAUltM,SAAQ,SAACmtM,GACjBA,EAASC,WAAWptM,SAAQ,SAACtF,GACL,SAAlBA,EAAK2yM,UACPb,EAA2B9xM,GAEzB,qBAAsBA,GAAyC,oBAA1BA,EAAK4yM,kBAC5Cv4M,MAAMuN,KAAK5H,EAAK4yM,iBAAiB,SAA8BhxM,IAAIkwM,aAMlEj6E,QAAQj5F,SAASywC,KAAM,CAC9BwjI,SAAS,EACTC,WAAW,UAjEbx0J,EAAOgiJ,eAAez/K,KACpB,mI,WA+ENy+K,QAVc,SAAOv/D,GAAY,yFAAK,SAAAA,UAWtCwmE,SAVe,+D,4CACP,OAARh6H,QAAQ,IAARA,KAAUwmI,aA1FVnB,EAAetsM,SAAQ,SAAC,G,IAAEo7L,EAAO,UAAE5nM,EAAI,OAAE+4M,EAAO,UAEvC,OAAPnR,QAAO,IAAPA,KAAS7+F,oBAAoB/oG,EAAM+4M,MAErCD,EAAiB,G,aAmGRM,GAAoB,SAAI9qM,GAEnC,GAAoB,kBAATA,EAOX,OAAOA,GCpII,GAAuB,WAClC,IAAImlE,EACAqlI,EAAkC,GAsGtC,MAAO,CACLxqM,KAtFW,mDAuFXtO,KAtFW,aAuFXmmM,MAtFY,SAAO3gJ,EAAuB+gD,GAAwB,oD,4CAKlE/3E,OAAOs6E,iBAAiB,QAAQ,WAE9B,GAAKvC,GASL,GAAwB,qBAAbzgE,SAAX,CAIA,IAAMo0K,EAA0B,SAACz0M,GAC/B,IAAI67F,EACJ,IAEEA,EAAM,IAAI64G,IAAI10M,EAAEynH,KAAM1+F,OAAO+6B,SAAS2jE,MACtC,SAEA,OAEF,IAAMx5G,EAAS0mM,EAAIvuD,KAAKvqD,EAAI4rB,MACtBmtF,EAAsB,OAAN3mM,QAAM,IAANA,OAAM,EAANA,EAAS,GAE3B2mM,GAlDe,SAACzS,EAAkB5nM,EAAe+4M,GACzDnR,EAAQ9+F,iBAAiB9oG,EAAM+4M,GAC/BD,EAAe5sM,KAAK,CAClB07L,QAAO,EACP5nM,KAAI,EACJ+4M,QAAO,IA8CHjwG,CAAiBrjG,EAAG,SAAS,W,MACvB40M,GACF9zG,EAAUioG,MAAM8L,KAA2B,MACxCC,IAAiBF,EAClB,EAACG,IAAYl5G,EAAIr1C,SACjB,EAACwuJ,IAAUh1M,EAAEs7B,GACb,EAAC25K,IAAYj1M,EAAEkmH,KACf,EAACgvF,IAAWl1M,EAAEynH,KACd,QAMJktF,EACJ,gHAGY74M,MAAMuN,KAAKg3B,SAAS0zK,qBAAqB,MACjDhtM,QAAQ0tM,GAIkB,qBAArBT,mBACThmI,EAAW,IAAIgmI,kBAAiB,SAACC,GAC/BA,EAAUltM,SAAQ,SAACmtM,GACjBA,EAASC,WAAWptM,SAAQ,SAACtF,GACL,MAAlBA,EAAK2yM,UACPK,EAAwBhzM,GAEtB,qBAAsBA,GAAyC,oBAA1BA,EAAK4yM,kBAC5Cv4M,MAAMuN,KAAK5H,EAAK4yM,iBAAiB,MAA6BhxM,IAAIoxM,aAMjEn7E,QAAQj5F,SAASywC,KAAM,CAC9BwjI,SAAS,EACTC,WAAW,UA/Dbx0J,EAAOgiJ,eAAez/K,KACpB,6H,WA6ENy+K,QAVc,SAAOv/D,GAAY,yFAAK,SAAAA,UAWtCwmE,SAVe,+D,4CACP,OAARh6H,QAAQ,IAARA,KAAUwmI,aAxFVnB,EAAetsM,SAAQ,SAAC,G,IAAEo7L,EAAO,UAAE5nM,EAAI,OAAE+4M,EAAO,UAEvC,OAAPnR,QAAO,IAAPA,KAAS7+F,oBAAoB/oG,EAAM+4M,MAErCD,EAAiB,G,aCxBjB8B,IAAW,ECOF,GAAmC,WAC9C,IAEMhI,EAAc,cAChBkG,EAAkC,GAEhC+B,EAAqB,SAAC76M,EAA4B+4M,GAClDnG,IACFA,EAAY9pG,iBAAiB9oG,EAAM+4M,GACnCD,EAAe5sM,KAAK,CAClBlM,KAAI,EACJ+4M,QAAO,MAoCb,MAAO,CACLzqM,KA/CW,4CAgDXtO,KA/CW,SAgDXmmM,MAzBY,SAAO3gJ,EAAuB+gD,GAAwB,oD,4CAClE/gD,EAAO8hJ,SAAWwJ,UAAUgK,OAE5BD,EAAmB,UAAU,WAC3Br1J,EAAOgiJ,eAAehjG,MAAM,2CAC5Bh/C,EAAO8hJ,SAAU,EAEjB3uJ,YAAW,WACT4tD,EAAUqrF,UACTpsI,EAAO2hJ,wBAGZ0T,EAAmB,WAAW,WAC5Br1J,EAAOgiJ,eAAehjG,MAAM,4CAC5Bh/C,EAAO8hJ,SAAU,K,WAYnBmG,SARe,+D,4CA1BfqL,EAAetsM,SAAQ,SAAC,G,IAAExM,EAAI,OAAE+4M,EAAO,UACjCnG,GACFA,EAAY7pG,oBAAoB/oG,EAAM+4M,MAG1CD,EAAiB,G,aCMrB,4B,+CAgPA,OAhPsC,iBAOpC,YAAAjhK,KAAA,SAAKuuJ,EAAa2U,EAA2CC,GAC3D,IAAIl7G,EACAh0D,EAcJ,YAhBG,IAAAs6J,MAAA,IAIC5iM,UAAU7B,OAAS,GACrBm+F,EAASi7G,EACTjvK,EAAUkvK,GAEqB,kBAApBD,GACTj7G,EAASi7G,EACTjvK,OAAUlwC,IAEVkkG,EAAwB,OAAfi7G,QAAe,IAAfA,OAAe,EAAfA,EAAiBj7G,OAC1Bh0D,EAAUivK,GAGP,YAAcj7M,KAAK4uM,MAAK,2BAAM5iK,GAAO,CAAEg0D,OAAM,EAAEsmG,OAAM,OAE9C,YAAAsI,MAAhB,SAAsB5iK,G,yIAEpB,OAAIhsC,KAAKuuM,aACP,KAEFvuM,KAAKuuM,cAAe,EAGG,GAAM,GAAiBviK,EAAQs6J,OAAQt6J,EAAShsC,Q,OAUvE,OAVMm7M,EAAiB,SACvBn7M,KAAK0lD,OAASy1J,EAOdn7M,KAAK23M,aAAuD,QAA1C,EAAiB,QAAjB,EAAA3rK,EAAQk+D,iBAAS,QAAIlqG,KAAK0lD,OAAOwkD,iBAAS,QAAIn8E,KAAK+xB,OAErE,GAAM,YAAM8uJ,MAAK,UAAC5uM,KAAK0lD,S,cAAvB,UAKM01J,EAAY,YAAsBpvK,EAAQikK,eACtCJ,cAAcwL,YAAY,CAClCr7G,OAAQhgG,KAAK0lD,OAAOs6C,OACpBwxG,SAAUxxM,KAAK0lD,OAAO8rJ,WCxFG,OD6FvBxxM,KAAK0lD,OAAO8hJ,QAAZ,MACF,GAAMxnM,KAAK2e,IAAI,MAAoCqjI,S,OAAnD,S,iBAEF,SAAMhiJ,KAAK2e,IAAI,IAAI,GAAeqjI,S,OAClC,OADA,SACA,GAAMhiJ,KAAK2e,IAAI,IAAI,GAAWqjI,S,OAC9B,OADA,SACA,GAAMhiJ,KAAK2e,IAAI,IAAI,GAAuBqjI,S,cAA1C,SF9FsBt8F,EEiGZ1lD,KAAK0lD,OFhGbo1J,SAAuCh/M,IAA3B4pD,EAAOyqJ,kBAWvBzqJ,EAAOgiJ,eAAez/K,KAPN,+jBAQhB6yL,IAAW,G1BciC3K,E4BwERnwM,KAAK0lD,OAAOyqJ,gB5BvEhDD,EAAkBC,EAAiB,iB4BwE/B,GAAMnwM,KAAK2e,IAAI,MAAwBqjI,SADrC,M,OACF,S,wB5BtE0C,SAACmuD,GAC/C,OAAAD,EAAkBC,EAAiB,oB4BwE7BmL,CAAiCt7M,KAAK0lD,OAAOyqJ,iBAC/C,GAAMnwM,KAAK2e,IAAI,MAA2BqjI,SADxC,O,QACF,S,0BAIEouD,EAA6BpwM,KAAK0lD,OAAOyqJ,kBACrCoL,E5B/BgC,SAAC71J,GAC3C,OACE0qJ,EAA6B1qJ,EAAOyqJ,kBACpCzqJ,EAAOyqJ,iBAC2B,kBAA3BzqJ,EAAOyqJ,iBACdzqJ,EAAOyqJ,gBAAgBqL,aACuB,kBAAvC91J,EAAOyqJ,gBAAgBqL,YAE9B,eACK91J,EAAOyqJ,gBAAgBqL,aAIvB,G4BkBgC,CAA6Bx7M,KAAK0lD,QAC/D+1J,EAAiB,GAAqBF,GAC5C,GAAMv7M,KAAK2e,IAAI88L,GAAgBz5D,UAH7B,O,QAGF,S,0BAIEquD,EAA0BrwM,KAAK0lD,OAAOyqJ,iBACxC,GAAMnwM,KAAK2e,IAAI,GAAuB2xL,EAA0BtwM,KAAK0lD,UAAUs8F,SAD7E,O,QACF,S,mBAMF,OAHAhiJ,KAAKuuM,cAAe,EAGpB,GAAMvuM,KAAK6uM,mBAAmB,c,eAA9B,SAGAuM,EAAUM,YAAYC,kBAAiB,SAACx0E,GACjC,EAAKunE,MAAMvnE,EAAMopE,UAAWppE,EAAM2lE,oB,I5BnGA,IAACqD,E0B3BpBzqJ,SEkIxB,YAAAk2J,UAAA,W,MACE,OAAkB,QAAX,EAAA57M,KAAK0lD,cAAM,eAAEs6C,QAGtB,YAAA67G,UAAA,SAAU77G,GACHhgG,KAAK0lD,OAINs6C,IAAWhgG,KAAK0lD,OAAOs6C,aAAqBlkG,IAAXkkG,IACnChgG,KAAK0lD,OAAOs6C,OAASA,EACrB,YAAmBA,EAAQhgG,KAAK0lD,OAAOuqJ,eALvCjwM,KAAKmtJ,EAAE/gJ,KAAKpM,KAAK67M,UAAU/5L,KAAK9hB,KAAMggG,KAS1C,YAAA87G,YAAA,W,MACE,OAAkB,QAAX,EAAA97M,KAAK0lD,cAAM,eAAE8rJ,UAGtB,YAAAuK,YAAA,SAAYvK,GACLxxM,KAAK0lD,QAIV1lD,KAAK0lD,OAAO8rJ,SAAWA,EACvB,YAAqBA,EAAUxxM,KAAK0lD,OAAOuqJ,eAJzCjwM,KAAKmtJ,EAAE/gJ,KAAKpM,KAAK+7M,YAAYj6L,KAAK9hB,KAAMwxM,KAO5C,YAAA7mI,MAAA,WACE3qE,KAAK+7M,YAAYpW,KACjB3lM,KAAK67M,eAAU//M,IAGjB,YAAAkgN,aAAA,W,MACE,OAAkB,QAAX,EAAAh8M,KAAK0lD,cAAM,eAAEwkD,WAGtB,YAAAytG,aAAA,SAAaztG,G,MACX,GAAKlqG,KAAK0lD,QAMV,GAAIwkD,IAAclqG,KAAK0lD,OAAOwkD,UAA9B,CAIA,I5B9IqCimG,E4B8I/B8L,EAAoBj8M,KAAKg8M,eACzBzK,EAAgBvxM,KAAK0lD,OAAO6rJ,cAC9BH,EAAqC,QAAvB,EAAApxM,KAAK0lD,OAAO0rJ,mBAAW,SAAK,EAE9CpxM,KAAK0lD,OAAOwkD,UAAYA,EACxBlqG,KAAK0lD,OAAO6rJ,mBAAgBz1M,EAC5BkE,KAAK0lD,OAAOgrJ,YAAc,E5BpJWP,E4BsJRnwM,KAAK0lD,OAAOyqJ,gB5BrJ3CD,EAAkBC,EAAiB,c4BsJ3B8L,GAAqB1K,GACvBvxM,KAAK0uM,MAAMwN,QAA2BpgN,EAAW,CAC/CyuM,UAAWvqM,KAAKm8M,wBAChB7K,WAAYF,EACZK,WAAYwK,EACZhwJ,KAAMslJ,EAAgB,EACtBjH,QAAStqM,KAAKo8M,wBAIlBp8M,KAAK0lD,OAAO6rJ,cAAgBvxM,KAAK0lD,OAAOwkD,UACxClqG,KAAK0uM,MAAM2N,QAA6BvgN,EAAW,CACjDw1M,WAAYF,EACZK,WAAYzxM,KAAK0lD,OAAOwkD,UACxBj+C,KAAMjsD,KAAK0lD,OAAO6rJ,iBAItBvxM,KAAKm8M,wBAA0Bn8M,KAAK0lD,OAAO8rJ,SAC3CxxM,KAAKo8M,sBAAwBp8M,KAAK0lD,OAAOs6C,aArCvChgG,KAAKmtJ,EAAE/gJ,KAAKpM,KAAK23M,aAAa71L,KAAK9hB,KAAMkqG,KAwC7C,YAAAoyG,cAAA,WACOt8M,KAAK0lD,OAIV1lD,KAAK0lD,OAAO6rJ,cAAgBxjL,KAAK+xB,MAH/B9/C,KAAKmtJ,EAAE/gJ,KAAKpM,KAAKs8M,cAAcx6L,KAAK9hB,QAMxC,YAAAu8M,aAAA,SAAaC,GACNx8M,KAAK0lD,OAIV1lD,KAAK0lD,OAAO8iJ,kBAAoB,GAAgBgU,GAH9Cx8M,KAAKmtJ,EAAE/gJ,KAAKpM,KAAKu8M,aAAaz6L,KAAK9hB,KAAMw8M,KAM7C,YAAAtO,SAAA,SAASA,EAAqBC,GAC5B,GAAI0C,EAAgB3C,GAAW,CAC7B,IAAM3hD,EAAQ2hD,EAAS4C,GACvB5C,EAAS4C,GAAK,GACd5C,EAAW0C,EAA+B,IAAI,EAAYrkD,GAQ5D,OANgB,OAAZ4hD,QAAY,IAAZA,OAAY,EAAZA,EAAc7D,UAChBtqM,KAAK67M,UAAU1N,EAAa7D,UAEd,OAAZ6D,QAAY,IAAZA,OAAY,EAAZA,EAAc5D,YAChBvqM,KAAK+7M,YAAY5N,EAAa5D,WAEzB,YAAM2D,SAAQ,UAACA,EAAUC,IAGlC,YAAAiB,cAAA,SAAcC,EAAmBC,EAA8BpB,EAAqBC,GAClF,GAAI0C,EAAgB3C,GAAW,CAC7B,IAAM3hD,EAAQ2hD,EAAS4C,GACvB5C,EAAS4C,GAAK,GACd5C,EAAW0C,EAA+B,IAAI,EAAYrkD,GAE5D,OAAO,YAAM6iD,cAAa,UAACC,EAAWC,EAAWpB,EAAUC,IAG7D,YAAAxB,QAAA,SAAQA,EAAmBwB,GACzB,GAAI0C,EAAgBlE,GAAU,CAC5B,IAAMpgD,EAAQogD,EAAQmE,GACtBnE,EAAQmE,GAAK,GACbnE,EAAUiE,EAA+B,IAAI,EAAWrkD,GAE1D,OAAO,YAAMogD,QAAO,UAACA,EAASwB,IAG1B,YAAAjgL,QAAN,SAAci5G,G,+FAaZ,OAZMs1E,EAAc1uL,KAAK+xB,MACnB23J,EAAsB,EAAaz3M,KAAK0lD,OAAOgyJ,eAAgB13M,KAAK0lD,OAAO6rJ,eAG/EpqE,EAAMinE,aAAeiO,IACrBl1E,EAAMinE,aAAe8N,IACnB/0E,EAAMsqE,YAActqE,EAAMsqE,aAAezxM,KAAKg8M,iBAChDvE,GAEAz3M,KAAK23M,aAAa8E,GAGpB,GAAO,YAAMvuL,QAAO,UAACi5G,WAEzB,EAhPA,CAAsC,GE6FvB,GA9He,WAC5B,IAAMimE,EAAS,IAAI,GACnB,MAAO,CACLr1J,KAAM,OAAA2sD,EAAA,GACJ0oG,EAAOr1J,KAAKj2B,KAAKsrL,GACjB,OACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,YAE3BzuL,IAAK,OAAA+lF,EAAA,GACH0oG,EAAOzuL,IAAImD,KAAKsrL,GAChB,MACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,sBAE5Cl+L,OAAQ,OAAAw1F,EAAA,GACN0oG,EAAOl+L,OAAO4S,KAAKsrL,GACnB,SACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,sBAE5CsB,MAAO,OAAAhqG,EAAA,GACL0oG,EAAOsB,MAAM5sL,KAAKsrL,GAClB,QACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5CqB,SAAU,OAAA/pG,EAAA,GACR0oG,EAAOqB,SAAS3sL,KAAKsrL,GACrB,WACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5Cc,SAAU,OAAAxpG,EAAA,GACR0oG,EAAOc,SAASpsL,KAAKsrL,GACrB,WACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5CgC,cAAe,OAAA1qG,EAAA,GACb0oG,EAAOgC,cAActtL,KAAKsrL,GAC1B,gBACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5CqC,SAAU,OAAA/qG,EAAA,GACR0oG,EAAOqC,SAAS3tL,KAAKsrL,GACrB,WACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5CT,QAAS,OAAAjoG,EAAA,GACP0oG,EAAOT,QAAQ7qL,KAAKsrL,GACpB,UACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5Ctb,MAAO,OAAAptF,EAAA,GACL0oG,EAAOtb,MAAMhwK,KAAKsrL,GAClB,QACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,gBAAiB,2BAE5CwO,UAAW,OAAAl3G,EAAA,GACT0oG,EAAOwO,UAAU95L,KAAKsrL,GACtB,YACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,SAAU,mBAErCyO,UAAW,OAAAn3G,EAAA,GACT0oG,EAAOyO,UAAU/5L,KAAKsrL,GACtB,YACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,SAAU,mBAErC0O,YAAa,OAAAp3G,EAAA,GACX0oG,EAAO0O,YAAYh6L,KAAKsrL,GACxB,cACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,SAAU,qBAErC2O,YAAa,OAAAr3G,EAAA,GACX0oG,EAAO2O,YAAYj6L,KAAKsrL,GACxB,cACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,SAAU,qBAErCziI,MAAO,OAAA+5B,EAAA,GACL0oG,EAAOziI,MAAM7oD,KAAKsrL,GAClB,QACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,SAAU,gBAAiB,qBAEtD4O,aAAc,OAAAt3G,EAAA,GACZ0oG,EAAO4O,aAAal6L,KAAKsrL,GACzB,eACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,YAE3BuK,aAAc,OAAAjzG,EAAA,GACZ0oG,EAAOuK,aAAa71L,KAAKsrL,GACzB,eACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,YAE3BkP,cAAe,OAAA53G,EAAA,GACb0oG,EAAOkP,cAAcx6L,KAAKsrL,GAC1B,gBACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,YAE3BwC,UAAW,OAAAlrG,EAAA,GACT0oG,EAAOwC,UAAU9tL,KAAKsrL,GACtB,YACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,YAE3BmP,aAAc,OAAA73G,EAAA,GACZ0oG,EAAOmP,aAAaz6L,KAAKsrL,GACzB,eACA,YAAmBA,GACnB,YAAgBA,EAAQ,CAAC,aAKhB,GC9Hb,GAoBE,GApBC,IAQH,IAYE,GAnBW,cAmBX,GAlBG,MAkBH,GAjBS,YAiBT,GAhBU,aAgBV,GAfO,UAeP,GAdW,cAcX,GAbM,SAaN,GAZE,MACJ,GAWE,GAXM,SAWN,GAVI,OAUJ,GATG,MASH,GARK,QAQL,GAPS,YAOT,GANM,SAMN,GALO,UAKP,GAJU,aAIV,GAHU,aAGV,GAFO,UAEP,GADG,O,cCjBPlyM,EAAOC,QANP,SAAgC2L,GAC9B,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CACnC,QAAWA,IAKf5L,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCPzD,SAASr6F,EAAuB+sD,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIutC,eAAe,6DAG3B,OAAOvtC,EALT,mC,6BCAA,8BAUen0F,IANf,SAAoB2hI,EAAiB5wK,GACnC,OAAO6wK,YAAyBD,EAAiB9yK,YAAS,CACxDgzK,aAAcA,KACb9wK,M,6BCPU,SAASgpC,EAAgBluE,EAAKxC,EAAK5I,GAYhD,OAXI4I,KAAOwC,EACT1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAC9B5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZlB,EAAIxC,GAAO5I,EAGNoL,EAZT,mC,6BCAA,SAASi2M,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GACpE,IACE,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAChBhvB,EAAQyhN,EAAKzhN,MACjB,MAAOyS,GAEP,YADAgoE,EAAOhoE,GAILgvM,EAAK78M,KACP4+C,EAAQxjD,GAERujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAIxB,SAASE,EAAkBv6M,GACxC,OAAO,WACL,IAAIusK,EAAOpvK,KACPgrB,EAAOtnB,UACX,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GACpC,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAEzB,SAASiyL,EAAMvhN,GACbqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAGlE,SAASwhN,EAAO9rK,GACd2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAGnE6rK,OAAMnhN,OA/BZ,mC,6BCAA,05BAsBI4jD,EAtBJ,uBAwBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAGIm4C,EAA2B,kBAAMlY,YAC5C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,sBAGtDs5M,EAA2B,kBAAMxqK,YAC5C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,sBAGtDu5M,EAAyB,kBAAMzqK,YAC1C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,mBAGtDw5M,EAAwB,SAACv2K,GAAD,OAAsB6L,YACzDyqK,KACA,SAACE,GAAD,OAAYA,EAAOz5M,IAAIijC,OAGZy2K,EAA2B,kBAAM5qK,YAC5C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMpmB,MAAM,CAAC,cAAe,iBAGxE88L,EAAuB,kBAAM7qK,YACxC8M,KACA,SAAC3Y,GACC,OAAOA,EAAMjjC,IAAI,kBAIR45M,EAAkC,kBAAM9qK,YACnD8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,wBAAyB6O,qBAQ/E4oH,EAAiC,SAACv6F,GAAD,OAAgB4R,YAC5D8qK,KACA,SAAC32K,GAAD,OAA6BA,EAAMjjC,IAAIk9B,IAAO,OAGnC28K,EAAoC,SAAC38K,GAAD,OAAgB4R,YAVTA,YACtD8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,0BAA2B6O,qBAU5F,SAACo0B,GAAD,OAAgCA,EAAMjjC,IAAIk9B,OAG/B87F,EAA8B,kBAAMlqF,YAC/C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,oBAAqB6O,qBAE3EirM,EAAyC,kBAAMhrK,YAC1D8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,iCAAmC,OAGzF+5M,EAA6B,SAAC78K,GAAD,OAAgB4R,YACxDkqF,KACA,SAAC/1F,GAAD,OAAiCA,EAAMjjC,IAAIk9B,GAAI,OAGpC88K,EAA4B,kBAAMlrK,YAC7C8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,qBAQtDi6M,EAAiC,kBAAMnrK,YAClD8M,KACA,SAAC3Y,GAAD,OAAuDA,EAAMjjC,IAAI,yBAA2B6O,oBAajFqrM,EAAyC,kBAAMprK,YAC1D8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMpmB,MAAM,CAAC,gBAAiB,qCAQ9Ds9L,EAA+B,kBAAMrrK,YAChD8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMpmB,MAAM,CAAC,2BAG7Cu9L,EAAyB,kBAAMtrK,YAC1C8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMpmB,MAAM,CAAC,yBAG7Cw9L,EAA+B,kBAAMvrK,YAChD8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMpmB,MAAM,CAAC,0BAQ7Cy9L,EAAmB,kBAAMxrK,YACpC8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMpmB,MAAM,CAAC,eAG7C09L,EAAiC,kBAAMzrK,YAClD8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,4BAG1Cw6M,EAA8B,kBAAM1rK,YAC/C8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,yBAG1Cy6M,EAAwB,kBAAM3rK,YACzC8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,mBAG1C06M,EAAyB,kBAAM5rK,YAC1C8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,oBAG1C26M,EAAyB,kBAAM7rK,YAC1C8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,oBAG1CqmG,EAAoB,kBAAMv3D,YACnC8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,eAG5C46M,EAA4B,kBAAM9rK,YAC7C8M,KACA,SAAC3Y,GAAD,OAA2CA,EAAMjjC,IAAI,wB,gBCxMvD,OAOC,WACA,aAEA,IAAI66M,EAAS,GAAGr9M,eAEhB,SAAS0lH,IAGR,IAFA,IAAI/tC,EAAU,GAELl2E,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAC1C,IAAI0nB,EAAMhnB,UAAUV,GAChB0nB,IACHwuD,EAAU2lI,EAAY3lI,EAAS4lI,EAAWp0L,KAI5C,OAAOwuD,EAGR,SAAS4lI,EAAYp0L,GACpB,GAAmB,kBAARA,GAAmC,kBAARA,EACrC,OAAOA,EAGR,GAAmB,kBAARA,EACV,MAAO,GAGR,GAAIjpB,MAAMC,QAAQgpB,GACjB,OAAOu8F,EAAWh/G,MAAM,KAAMyiB,GAG/B,GAAIA,EAAIzpB,WAAa7C,OAAOD,UAAU8C,WAAaypB,EAAIzpB,SAASA,WAAWsI,SAAS,iBACnF,OAAOmhB,EAAIzpB,WAGZ,IAAIi4E,EAAU,GAEd,IAAK,IAAI50E,KAAOomB,EACXk0L,EAAO59M,KAAK0pB,EAAKpmB,IAAQomB,EAAIpmB,KAChC40E,EAAU2lI,EAAY3lI,EAAS50E,IAIjC,OAAO40E,EAGR,SAAS2lI,EAAanjN,EAAOqjN,GAC5B,OAAKA,EAIDrjN,EACIA,EAAQ,IAAMqjN,EAGfrjN,EAAQqjN,EAPPrjN,EAU4BR,EAAOC,SAC3C8rH,EAAW2E,QAAU3E,EACrB/rH,EAAOC,QAAU8rH,QAGX,kBACL,OAAOA,GADF,QAAe,OAAf,aA/DP,I,mnECIW+3F,E,iBAAAA,K,4BAAAA,E,gCAAAA,E,4BAAAA,E,4CAAAA,E,kCAAAA,E,4BAAAA,E,wBAAAA,E,wCAAAA,E,8BAAAA,E,0DAAAA,E,kCAAAA,E,4BAAAA,E,4CAAAA,E,gCAAAA,E,kCAAAA,E,4BAAAA,E,4CAAAA,E,sCAAAA,E,4CAAAA,E,8BAAAA,E,8CAAAA,E,wCAAAA,E,kCAAAA,E,kDAAAA,E,4CAAAA,E,kCAAAA,E,8BAAAA,E,oCAAAA,E,oDAAAA,E,8CAAAA,E,0BAAAA,E,0CAAAA,E,oCAAAA,E,gDAAAA,E,sCAAAA,E,0DAAAA,E,oCAAAA,E,oFAAAA,E,kEAAAA,E,kFAAAA,E,8EAAAA,E,wCAAAA,E,sFAAAA,E,wDAAAA,E,4EAAAA,E,sEAAAA,E,sFAAAA,E,sDAAAA,E,0DAAAA,E,4DAAAA,E,wCAAAA,E,4DAAAA,E,oDAAAA,E,wEAAAA,E,wEAAAA,E,wCAAAA,E,0DAAAA,E,4DAAAA,E,sCAAAA,E,oDAAAA,E,kDAAAA,E,sEAAAA,E,gEAAAA,E,oDAAAA,E,wDAAAA,E,oFAAAA,E,kGAAAA,E,sCAAAA,E,sDAAAA,E,oDAAAA,E,gDAAAA,E,gEAAAA,E,8DAAAA,E,0CAAAA,E,4BAAAA,E,0DAAAA,E,kCAAAA,E,gDAAAA,E,oGAAAA,E,kDAAAA,E,2DAAAA,M,KAoFL,IAAMC,EAGX,WACS/3K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWE,yBASvBC,EAEX,WACSj4K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAWI,6BAsCvBC,EAGX,WACSn4K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWM,0BAUvBC,EAAb,sCACkBr/M,KAAO8+M,EAAWQ,gCAGvBC,EAGX,WACSv4K,GAMN,yBANMA,UAMP,KATchnC,KAAO8+M,EAAWU,mCAYvBC,EAGX,WACSz4K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWY,yBAwBvBC,EAGX,WACS34K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWc,6BAoBvBC,EAGX,WACS74K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWgB,oCAUvBC,EAGX,WACS/4K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWkB,8BAUvBC,EAGX,WACSj5K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWoB,oBAqBvBC,EAGX,WACSn5K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWsB,oCAUvBC,EAEX,WACSr5K,GAIN,yBAJMA,UAIP,KANchnC,KAAO8+M,EAAWwB,sCASvBC,EAAb,sCACoBvgN,KAAO8+M,EAAW0B,mCAGzBC,EAEX,WACSz5K,GAIN,yBAJMA,UAIP,KANchnC,KAAO8+M,EAAW4B,2CASvBC,EAEX,WACS35K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAW8B,4BAUvBC,EAET,WACW75K,GAKR,yBALQA,UAKT,KAPchnC,KAAO8+M,EAAWgC,0BAwBzBC,EAEX,WACS/5K,GAGN,yBAHMA,UAGP,KALchnC,KAAO8+M,EAAWkC,0CAQvBC,EAEX,WACSj6K,GAYN,yBAZMA,UAYP,KAdchnC,KAAO8+M,EAAWoC,iCAiBvBC,EAAb,sCACkBnhN,KAAO8+M,EAAWsC,yCAGvBC,EAEX,WACSr6K,GAGN,yBAHMA,UAGP,KALchnC,KAAO8+M,EAAWwC,mBAQvBC,EAEX,WACSv6K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAW0C,6BAMvBC,EAEX,WACSz6K,GAGN,yBAHMA,UAGP,KALchnC,KAAO8+M,EAAW4C,gBAQvBC,EAGX,WACS36K,GACN,yBADMA,UACP,KAJchnC,KAAO8+M,EAAW8C,cAOvBC,EAGX,WACS76K,GACN,yBADMA,UACP,KAJchnC,KAAO8+M,EAAWgD,kBAOvBC,EAGX,WACS/6K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWkD,0BAkBvBC,EAGX,WACSj7K,GACN,yBADMA,UACP,KAJchnC,KAAO8+M,EAAWoD,qBAOvBC,EAEX,WACSn7K,GAMN,yBANMA,UAMP,KARchnC,KAAO8+M,EAAWsD,YAWvBC,EAEX,WACSr7K,GAGN,yBAHMA,UAGP,KALchnC,KAAO8+M,EAAWwD,oBAQvBC,EAEX,WACSv7K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAW0D,eAUvBC,EAEX,WACSz7K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAW4D,6BAUvBC,EAEX,WACS37K,GAGN,yBAHMA,UAGP,KALchnC,KAAO8+M,EAAW8D,iBAQvBC,EAEX,WACS77K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAWgE,cAUvBC,EAEX,WACS/7K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAWkE,sBAMvBC,EAEX,WACSj8K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAWoE,iBAMvBC,EAEX,WACSn8K,GAQN,yBARMA,UAQP,KAVchnC,KAAO8+M,EAAWsE,cAuBvBC,EAEX,WACSr8K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAWwE,iBAMvBC,EAEX,WACSv8K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAW0E,gBAMvBC,EAEX,WACSz8K,GACN,yBADMA,UACP,KAHchnC,KAAO8+M,EAAW4E,sBAMvBC,EAEX,WACS38K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAW8E,cAUvBC,EAGX,WACS78K,GAIN,yBAJMA,UAIP,KAPchnC,KAAO8+M,EAAWgF,sBAUvBC,EAGX,WACU/8K,GACP,yBADOA,UACR,KAJchnC,KAAO8+M,EAAWkF,kBAiBvBC,EAGX,WACSj9K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWoF,sBASvBC,EAGX,WACSn9K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWsF,eASvBC,EAGX,WACSr9K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWwF,uBASvBC,EAGX,WACSv9K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAW0F,iBASvBC,EAGX,WACSz9K,GAKN,yBALMA,UAKP,KARchnC,KAAO8+M,EAAW4F,yBAYvBC,EAGX,WACS39K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAW8F,iBASvBC,EAGX,WACS79K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWgG,mBASvBC,EAGX,WACS/9K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWkG,oBASvBC,GAGX,WACSj+K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWoG,sBASvBC,GAGX,WACSn+K,GAGN,yBAHMA,UAGP,KANchnC,KAAO8+M,EAAWsG,eASvBC,GAAb,sCACkBrlN,KAAO8+M,EAAWwG,wBAGvBC,GAAb,sCACoBvlN,KAAO8+M,EAAW0G,8BAGzBC,GAET,WACWz+K,GAIR,yBAJQA,UAIT,KANchnC,KAAO8+M,EAAW4G,0CAUzBC,GAEX,WACS3+K,GAIN,yBAJMA,UAIP,KANchnC,KAAO8+M,EAAW8G,iDAmBvBC,GAGT,WACW7+K,GAGR,yBAHQA,UAGT,KANchnC,KAAO8+M,EAAWgH,2BASzBC,GAAb,sCACoB/lN,KAAO8+M,EAAWkH,0BAgBzBC,GAAb,sCACoBjmN,KAAO8+M,EAAWoH,gCAEzBC,GAAb,sCACoBnmN,KAAO8+M,EAAWsH,+BAEzBC,GAAb,sCACkBrmN,KAAO8+M,EAAWwH,qBAYvBC,GAEX,WACSv/K,GAKN,yBALMA,UAKP,KAPchnC,KAAO8+M,EAAW0H,mD,6BC7wBpC,IAAIC,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,QAQR,SAAuB7B,EAAMxhG,GAC3B,IAAIoxB,EAAYitK,EAAOh7F,QAAQvgF,KAAKu7K,EAAOh7F,QAAQriF,YAAW,SAAUW,EAAOzuC,GAC7E,OAAOmrN,EAAOh7F,QAAQ3lF,cAAc4gL,EAASj7F,SAAS,EAAIk7F,EAAUl7F,SAAS,CAC3EnwH,IAAKA,GACJyuC,GAAQ6/E,OAGT77F,EAKJ,OADAyrB,EAAUotK,QAAUF,EAASj7F,QAAQm7F,QAC9BptK,GAlBT,IAAImtK,EAAYH,EAAuBvrN,EAAQ,MAE3CwrN,EAASD,EAAuBvrN,EAAQ,IAExCyrN,EAAWF,EAAuBvrN,EAAQ,O,6BCb9C,+CACe,SAAS8hD,EAAyBjwB,EAAQu4K,GACvD,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IACI3oB,EAAKtB,EADLgqB,EAAS,YAA6BC,EAAQu4K,GAGlD,GAAIpnM,OAAOkgB,sBAAuB,CAChC,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAEpD,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IACvCsB,EAAMmhM,EAAiBziM,GACnBwiM,EAAShlL,QAAQlc,IAAQ,GACxBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KACxD0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAIzB,OAAO0oB,I,6BCjBM,SAASg6L,EAASx+L,GAC/B,OAAOA,EAAIowD,QAAQ,uBAAuB,SAACquI,EAAQ9qN,GAAT,OAC9B,IAAVA,EAAc8qN,EAAO7tK,cAAgB6tK,EAAO58E,iBAC5CzxD,QAAQ,OAAQ,I,6kBCQLl3E,MARR,SAAiByE,GACtB,OAAa,MAALA,IACJyjB,WAAS3I,WAAW9a,KACrByM,MAAI9N,MAAMqB,KACViN,aAAWpO,aAAamB,IACzBA,EAAE7H,cAAgBmD,QCKPqmG,MAPR,SAA0B3hG,GAC/B,OAAI/G,sBAAY+G,GACP8R,OAAKF,OAAO5R,GAAKA,EAAiB8R,eAAK,CAAC9R,IAE1CzE,EAAQyE,GAAKA,EAAI,CAACA,ICuFZ+gN,EApCc,SAAC1+L,EAAK2+L,GACjC,GAAIxvC,IAASwvC,KAAiBzlN,EAAQylN,GAAc,CAClD,IAAMC,EAAkBh+L,iBAAO+9L,GAE/B,OAAO3+L,EAAIowD,QACT,iBACA,SAAC3iE,EAAK9Z,GACJ,IAAMkrN,EAAcD,EAAgBxmM,MAAMzkB,EAAM4iD,MAAM,MACtD,OAAsB,MAAfsoK,EAAsBA,EAAcpxM,KARS,IAY1D,IAAIqxM,EAAmBx/G,EAAcq/G,GAZqB,mBAAT7iM,EAAS,iCAATA,EAAS,kBAiB1D,GAHoB,IAAhBA,EAAKziB,SACPylN,EAAgB,sBAAOA,GAAqBhjM,IAE1CkE,EAAI+lB,MAAM,iBACZ,OAAO/lB,EAAIowD,QACT,iBACA,SAAC3iE,EAAK9Z,GACJ,IAAMkrN,EAAcC,EAAiBnrN,GACrC,OAAsB,MAAfkrN,EAAsBA,EAAcpxM,KAIjD,IAAI9B,EAAM,EACV,OAAOqU,EAAIowD,QACT,iBACA,SAAC3iE,EAAK8H,GACJ,IAAMspM,EAAcC,EAAiBnzM,KACrC,OAAsB,MAAfkzM,EAAsBA,EAAcpxM,MC1ElC2qH,MAlBR,SAAuBz6H,GAC5B,IAAIpD,EAAQ,GACN6Q,EAASjF,KAAKC,UAAUzI,GAAG,SAAC7B,EAAK5I,GACrC,GAAqB,kBAAVA,GAAgC,OAAVA,EAAgB,CAC/C,IAA8B,IAA1BqH,EAAMyd,QAAQ9kB,GAEhB,OAAO,KAGTqH,EAAMqJ,KAAK1Q,GAEb,OAAOA,KAIT,OADAqH,EAAQ,KACD6Q,GCLMioC,I,SCAA0rK,I,sDCQTxkN,EAIF,GAEAykN,EAAa,EAEjB,SAASC,EAAY19F,EAAyB/9E,GAC5C,IAAM07K,EAAQ,UAAM17K,EAAQxvC,KAAd,OAAoBwvC,EAAQ27K,QAA5B,OAAqC37K,EAAQ47K,WACrDC,EAAoB9kN,EAAM2kN,KAAc3kN,EAAM2kN,GAAY,IAC1DI,EAAO,UAAM/9F,GAEnB,GAAI89F,EAAUC,GACZ,OAAOD,EAAUC,GAGnB,IAAMhmN,EAA2B,GAE3B8R,EAAS,CAAE03I,OADFy8D,IAAah+F,EAAMjoH,EAAMkqC,GACflqC,QAOzB,OALI0lN,EAhBa,MAiBfK,EAAUC,GAAWl0M,EACrB4zM,KAGK5zM,EA2DM2uH,MArDf,SAA6Bp2E,GAKpB,IALsCngB,EAKvC,uDAAJ,IACEtqC,kBAAQsqC,IAAgC,kBAAZA,KAC9BA,EAAU,CAAE+9E,KAAM/9E,IAGpB,MAAmEA,EAA3D+9E,EAAR,EAAQA,KAAR,IAAci+F,aAAd,aAA6BL,cAA7B,aAA6CC,iBAA7C,SAEMrtC,EAAkB,GAAGjvK,OAAOy+G,GAElC,OAAOwwD,EAAM5uK,QAAO,SAACs8M,EAAoBC,GACvC,IAAKA,EACH,OAAO,KAET,GAAID,EACF,OAAOA,EAGT,MAAyBR,EAAYS,EAAc,CACjD1rN,IAAKwrN,EACLL,SACAC,cAHMt8D,EAAR,EAAQA,OAAQxpJ,EAAhB,EAAgBA,KAMVqmN,EADgB,IAAIrtK,OAAOwwG,EAAOrqJ,WAAW6O,MAAM,GAAI,GAAI,KAC7Bi8I,KAAK5/F,GAEzC,IAAKg8J,EACH,OAAO,KAGT,kBAAyBA,GAAlB3mH,EAAP,KAAer2F,EAAf,WACMi9M,EAAUj8J,IAAaq1C,EAE7B,OAAIwmH,IAAUI,EACL,KAGF,CACLr+F,KAAMm+F,EACN1mH,IAAsB,MAAjB0mH,GAAgC,KAAR1mH,EAAa,IAAMA,EAChD4mH,UACAz1K,OAAQ7wC,EAAK6J,QAAO,SAAC0/B,EAAM/mC,EAAKnI,GAE9B,OADAkvC,EAAK/mC,EAAIkK,MAAQrD,EAAOhP,GACjBkvC,IACN,OAEJ,OC/EUovE,MAdR,SAAmB4tG,GAAmC,IAAtBC,IAAqB,yDAC1D,GAAoB,KAAhBD,GAAqC,MAAfA,EACxB,OAAO,KAET,IAAIt8F,EAAO,IAAIh+F,KAAKs6L,GAOpB,OALKtlB,YAAYh3E,GAELu8F,IACVv8F,EAAO,IAAIh+F,KAAKg+F,EAAK/9F,UAAwC,IAA3B+9F,EAAKlgE,sBAFvCkgE,EAAO,KAIFA,G,uDCVM,SAASw8F,EAAWljL,GACjC,IAAMy1F,EAAQ,CACZnwF,SAAUyzI,IACVl5I,UAAWk5I,IACXz3I,SAAUy3I,IACV7qG,eAAgB6qG,IAChBoqC,QAASpqC,IACTqqC,iBAAkB9wC,IAClB+wC,cAAe/wC,KAGjB1pK,IACE8rL,IAAW10J,EAAOy1F,GAClB,0DCjBW6tF,ICYAC,EAZc,SAAhBA,EAAiBC,GAAD,OAAmB,WAAc,IAAD,uBAAT79L,EAAS,yBAATA,EAAS,gBAC3D,IAAMg0B,EAAM,GAQZ,OAPA8oD,EAAc+gH,GAAen8M,SAAQ,SAACwd,GAChCxoB,EAAQwoB,GACV80B,EAAI5yC,KAAKw8M,EAAc1+L,GAAd,aAAuBc,IACf,MAARd,GACT80B,EAAI5yC,KAAK8d,EAAI,WAAJ,EAAQc,OAGdg0B,EAAIlvC,OAAO,GAAG,KCCRg5M,EAbiB,WAC9B,IAAMtgM,EAAMkG,OAAO+6B,SAASw0I,OACtB8qB,EAAS,GAQf,OANAvgM,EAAIowD,QACF,IAAI99B,OAAO,uBAAwB,MACnC,SAACkuK,EAAIC,EAAIC,EAAIC,GACXJ,EAAOE,GAAME,KAGVJ,G,mBCPMK,EAFc,SAACz2K,GAAD,OAAY02K,IAAGz6M,UAAU+jC,EAAQ,CAAE22K,YAAa,W,SC2B9DC,EAHC,SAACC,GAAD,SACXA,GAAaA,EAAUtlG,iBAAmBslG,EAAUpoF,iBCnB1CqoF,EALK,qBAAX/6L,QACPA,OAAOsiL,WACPtiL,OAAOsiL,UAAUh6E,SACY,gBAA7BtoG,OAAOsiL,UAAUh6E,Q,QC2CJ02D,EAhCE,SAACvmD,EAAcsiF,GAC9B,GAAIF,EAAQpiF,GAAQ,CAClB,IAAMuiF,EAAkBviF,EAAMwiF,aAAgBxiF,EAAMwiF,YAAoB99F,KACxE,IACG49F,GACDtiF,EAAMwiF,kBACc7tN,IAApB4tN,EAEA,OAAOA,EAET,GAAID,QAAuC3tN,IAAtBqrI,EAAMwiF,YACzB,OAAOD,EAET,IAAME,EAAoBziF,EAC1B,EAGIyiF,EAFF58L,OAAU9sB,EADZ,EACYA,KAAMxE,EADlB,EACkBA,MAAOsgI,EADzB,EACyBA,QAASr+B,EADlC,EACkCA,MAChCksH,EACED,EADFC,aAEF,MAAa,aAAT3pN,IACO87H,EAEE,SAAT97H,EACKy9F,GAAUksH,GAAgBA,EAAalsH,MAEnC,oBAATz9F,EApCkB,SAAA8rC,GACxB,IAAMp4B,EAAS,GACf,GAAIo4B,EAAS,CAAC,IAAD,gBACUA,GADV,IACX,2BAA8B,CAAC,IAApBw0E,EAAmB,QACxBA,EAAO8E,UACT1xG,EAAOxH,KAAKo0G,EAAO9kH,QAHZ,+BAOb,OAAOkY,EA4BIk2M,CAAkB3iF,EAAMn6G,OAAOgf,SAEjCtwC,EAET,OAAOyrI,GClBM4iF,EAxBO,SACpB5iF,EADoB,GAOhB,IAJF34H,EAIC,EAJDA,KACAguC,EAGC,EAHDA,MACAwtK,EAEC,EAFDA,UAIEtuN,EAAQgyL,EAASvmD,EAAOsiF,GAY5B,OATIjtK,IACF9gD,EAAQ8gD,EAAM9gD,EAAO8S,IAInBw7M,IACFtuN,EAAQsuN,EAAUtuN,EAAO8S,IAGpB9S,G,qCCzBT,0qCAwBIgkD,EAxBJ,uBA+BauqK,EAAkC,kBAAMp3K,YACnD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,kBAQlDmmN,EAA8B,kBAAMr3K,YALKA,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,2BAA6BkU,qBAK1F,SAACkyM,GAAD,OAA4DA,EAAuBnhN,KAAI,SAACohN,GACtF,OAAOzoN,OAAOyoN,EAAUrmN,IAAI,qBAanBsmN,EAAoC,kBAAMx3K,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,qCAGlDumN,EAAqC,kBAAMz3K,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uCAGpD47C,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAGI23M,EAA8B,kBAAM13K,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAGlDymN,EAAqC,kBAAM33K,YACtD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,gCAGlD0mN,EAAkD,kBAAM53K,YACnE8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,2CAKlD2mN,EAAqB,kBAAM73K,YACtC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,aAAe6O,oBAGjE+3M,EAAqB,kBAAM93K,YACtC63K,IACAH,KACA,SAACK,EAAsC10G,GAAvC,OAA6D00G,EAAS7mN,IAAImyG,OAI/D20G,EAAoB,wEAK3B,GAHSC,EAFkB,EAE7B50G,UAF6B,OAM5BrjE,YACH63K,IACAH,KACA,SAACK,EAAsC10G,GAAvC,OAAoF,MAAvB40G,EACzDF,EAAS7mN,IAAI+mN,GACbF,EAAS7mN,IAAImyG,OAGN60G,EAA6B,kBAAMl4K,YAC9C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAGlDinN,EAA8B,kBAAMn4K,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAQlDknN,EAAwC,kBAAMp4K,YACzD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mCAGlDmnN,EAAiC,kBAAMr4K,YAClD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,4BAIlDonN,EAA8B,kBAAMt4K,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAGlDqnN,EAA+B,kBAAMv4K,YAChD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,0BAQlDsnN,EAAyC,kBAAMx4K,YAC1D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,oCAGlDunN,EAA4B,kBAAMz4K,YAC3C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uBAGpDwnN,EAAuC,kBAAM14K,YACtD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,kCAEpDynN,EAA6B,kBAAM34K,YAC5C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAEpD0nN,EAAwC,kBAAM54K,YACvD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mCAQpD2nN,EAAuC,kBAAM74K,YACxD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,kCAGlD4nN,EAAoC,kBAAM94K,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAGlD6nN,EAAsC,kBAAM/4K,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,0BAGpD8nN,EAA2B,kBAAMh5K,YAC5C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,YAAc6O,oBAEhEk5M,EAA6B,kBAAMj5K,YAC5C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,cAAgB6O,oBAIpEm5M,EAAmB,wEAK1B,GAHSC,EAFiB,EAE5B91G,UAF4B,OAM3BrjE,YACHg5K,IACAF,KACA,SAACM,EAAqC/1G,GAAtC,OAAkF,MAAtB81G,EACxDC,EAAQloN,IAAIioN,GACZC,EAAQloN,IAAImyG,OAELg2G,EAAqB,wEAK1B,GAHSC,EAFiB,EAE5Bj2G,UAF4B,OAM7BrjE,YACDi5K,IACAF,KACA,SAACQ,EAAuCl2G,GAAxC,OAAsF,MAAxBi2G,EACxDC,EAAUroN,IAAIooN,GACdC,EAAUroN,IAAImyG,OAEXm2G,EAAqC,kBAAMx5K,YACtD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,gCAalDuoN,EAAqD,kBAAMz5K,YACtE8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMpmB,MAAM,CAAC,oBAAqB,sBAQ1E2rM,EAAmC,kBAAM15K,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMpmB,MAAM,CAAC,oBAAqB,0BAG1E4rM,EAA2C,kBAAM35K,YAC5D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMpmB,MAAM,CAAC,oBAAqB,kCAG1E6rM,EAA0C,kBAAM55K,YAC3D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,qCAGlD2oN,EAA8B,SAAC,GAAgE,IAA/DlvH,EAA8D,EAA9DA,OAAQs8B,EAAsD,EAAtDA,UAC7C/P,EACNvsB,EACIs8B,EACE,CAAC,0BAA2Bt8B,EAAQs8B,GACpC,CAAC,0BAA2Bt8B,GAC9B,CAAC,2BAEL,OAAO3qD,YACL8M,KACA,SAAC3Y,GAAD,uBAAmDA,EAAMpmB,MAAMmpG,UAA/D,QAAwE3gG,iBAAO,QAItEujM,EAAkD,kBAAM95K,YACnE8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,6CAGlD6oN,EAA8B,kBAAM/5K,YAC7C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,0B,mIC7QlDorH,IA5BW,SAAC09F,GAyBzB,OAAOhuG,mBAVqB,WAC1B,IAAMiuG,EAAsBhiK,cAM5B,OAJwB,SAAA9jB,GAAK,MAAK,CAChC6lB,cAAeigK,EAAoB9lL,OAMhC63E,EAxBuD,SAAA30E,GAC5D,IACE2iB,EAEE3iB,EAFF2iB,cACGvoC,EAFL,YAGI4lB,EAHJ,GAOA,OAAO,cAAC2iL,EAAD,aACLhgK,cAH0B,SAAA7R,GAAI,kCAASA,GAAS6R,KAI5CvoC,QAmBH,IAAMyoM,EAAmB,WAC9B,IAAMlgK,EAAgBnb,sBAAYoZ,eAIlC,OAF4B,eAAC9P,EAAD,uDAA8B,GAA9B,mBAAC,eAAyCA,GAAS6R,M,6BC7ClE,SAASw1D,EAAuB+sD,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIutC,eAAe,6DAG3B,OAAOvtC,EALT,mC,moCCoDY49C,E,iBAAAA,K,4CAAAA,E,4CAAAA,E,8FAAAA,E,gEAAAA,E,8CAAAA,E,8CAAAA,E,gDAAAA,E,wCAAAA,E,sCAAAA,E,0CAAAA,E,8CAAAA,E,oCAAAA,E,wDAAAA,E,wCAAAA,E,oDAAAA,E,gEAAAA,E,0CAAAA,E,4CAAAA,E,0CAAAA,E,wCAAAA,E,wBAAAA,E,4CAAAA,E,0DAAAA,E,sDAAAA,E,gDAAAA,E,8DAAAA,E,gCAAAA,E,0CAAAA,E,0CAAAA,E,8DAAAA,E,kDAAAA,E,oDAAAA,E,8BAAAA,E,8CAAAA,E,4CAAAA,E,wDAAAA,E,oCAAAA,E,sCAAAA,E,wEAAAA,E,0CAAAA,E,uBAAAA,M,KA4CL,IAAMC,EAEX,WACS/lL,GAGN,yBAHMA,UAGP,KALKhnC,KAAO8sN,EAAiBE,yBAQpBC,EAEX,WACSjmL,GACN,yBADMA,UACP,KAHKhnC,KAAO8sN,EAAiBI,+BAMpBC,EAEX,WACSnmL,GAIN,yBAJMA,UAIP,KANKhnC,KAAO8sN,EAAiBM,qBAQpBC,EAEX,WACSrmL,GAKN,yBALMA,UAKP,KAPKhnC,KAAO8sN,EAAiBQ,qBAoBpBC,EAEX,WACSvmL,GAGN,yBAHMA,UAGP,KALKhnC,KAAO8sN,EAAiBU,sBASpBC,EAEX,WACSzmL,GA4BN,yBA5BMA,UA4BP,KA9BKhnC,KAAO8sN,EAAiBY,YAwCpBC,EAEX,WACS3mL,GAQN,yBARMA,UAQP,KAVKhnC,KAAO8sN,EAAiBc,oBAYpBC,EAEX,WACS7mL,GACN,yBADMA,UACP,KAHKhnC,KAAO8sN,EAAiBgB,0BAKpBC,EAAb,sCACS/tN,KAAO8sN,EAAiBkB,gCAcpBC,EAEX,WACSjnL,GACN,yBADMA,UACP,KAHchnC,KAAO8sN,EAAiBoB,2BAM7BC,EAEX,WACSnnL,GAGN,yBAHMA,UAGP,KALchnC,KAAO8sN,EAAiBsB,wBAQ7BC,EAEX,WACSrnL,GASN,yBATMA,UASP,KAXKhnC,KAAO8sN,EAAiBwB,qBAcpBC,EAGX,WACSvnL,GACN,yBADMA,UACP,KAJKhnC,KAAO8sN,EAAiB0B,kBAOpBC,EAEX,WACSznL,GAIN,yBAJMA,UAIP,KANKhnC,KAAO8sN,EAAiB4B,4BASpBC,EAEX,WACS3nL,GAQN,yBARMA,UAQP,KAVKhnC,KAAO8sN,EAAiB8B,sBAyBpBC,EAEX,WACS7nL,GAMN,yBANMA,UAMP,KARKhnC,KAAO8sN,EAAiBgC,+CAWpBC,EAEX,WACS/nL,GAGN,yBAHMA,UAGP,KALKhnC,KAAO8sN,EAAiBkC,gCAQpBC,EAEX,WACSjoL,GAMN,yBANMA,UAMP,KARKhnC,KAAO8sN,EAAiBoC,uBAWpBC,EAEX,WACSnoL,GAIN,yBAJMA,UAIP,KANKhnC,KAAO8sN,EAAiBsC,uBAUpBC,EAAb,sCACSrvN,KAAO8sN,EAAiBwC,mBAkBpBC,EAGX,WACSvoL,GAMN,yBANMA,UAMP,KATchnC,KAAO8sN,EAAiB0C,qBAmB7BC,EAEX,WACSzoL,GAGN,yBAHMA,UAGP,KALchnC,KAAO8sN,EAAiB4C,wBAQ7BC,EAAb,sCACkB3vN,KAAO8sN,EAAiB8C,oBAG7BC,EAAb,sCACkB7vN,KAAO8sN,EAAiBgD,qBAG7BC,EAAb,sCACkB/vN,KAAO8sN,EAAiBkD,0BAE7BC,EAAb,sCACoBjwN,KAAO8sN,EAAiBoD,oCAG/BC,EAEX,WACWnpL,GAoBR,yBApBQA,UAoBT,KAtBchnC,KAAO8sN,EAAiBsD,eA0B7BC,EAAb,sCACoBrwN,KAAO8sN,EAAiBwD,sBAG/BC,EAET,WACWvpL,GAOR,yBAPQA,UAOT,KATchnC,KAAO8sN,EAAiB0D,kBAY/BC,EAET,WACWzpL,GAMR,yBANQA,UAMT,KARchnC,KAAO8sN,EAAiB4D,mBAY/BC,EAGT,WACW3pL,GAIR,yBAJQA,UAIT,KAPchnC,KAAO8sN,EAAiB8D,uBAY/BC,EAAb,sCACkB7wN,KAAO8sN,EAAiBgE,6B,2qBChe9BrvK,E,wCCEyBsvK,K,SDFzBtvK,K,wBAAAA,E,oBAAAA,E,sBAAAA,E,wBAAAA,E,4BAAAA,E,UAAAA,E,sBAAAA,E,gCAAAA,E,sCAAAA,E,UAAAA,E,kDAAAA,E,oCAAAA,E,+BAAAA,E,gDAAAA,E,8BAAAA,E,4CAAAA,E,8CAAAA,E,wCAAAA,E,8BAAAA,E,mCAAAA,E,oDAAAA,E,oFAAAA,E,0CAAAA,E,kBAAAA,E,mBAAAA,E,oBAAAA,E,sBAAAA,E,gBAAAA,E,gCAAAA,E,sBAAAA,E,oBAAAA,E,wBAAAA,E,oCAAAA,E,kCAAAA,E,gDAAAA,E,yDAAAA,E,8BAAAA,E,sCAAAA,E,gBAAAA,E,sDAAAA,E,sCAAAA,E,0BAAAA,E,oDAAAA,E,wCAAAA,E,gCAAAA,E,wBAAAA,E,8BAAAA,E,iDAAAA,E,mDAAAA,M,KAoDGA,IElDHuvK,EFkDGvvK,I,GGjDsBsvK,I,QCMWE,ICJPF,K,SHH7BC,K,UAAAA,E,+BAAAA,E,6BAAAA,M,KAMiCD,I,IImBxCG,E,gBCXgBC,E,kDAmBnB,WAAmBt5K,GAA4B,IAAD,8BAC5C,cAAMA,IAPD4oF,iBAMuC,IALvC2wF,iBAKuC,IAJvCC,cAIuC,IAHvC/iN,UAGuC,IAFvCrD,YAEuC,EAE5C/M,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFwB,E,sEAhB9C,SAA4Cy5K,GAC1C,IAAMC,EAAmBD,EAAWxoN,KAAI,SAAC0oN,GACvC,OAAOA,EAAU3tN,IAAI,UAAUiF,KAAI,SAAC2oN,GAClC,OAAOA,EAAe5tN,IAAI,eAI9B,OADsC68H,YAAc6wF,EAAiBlzM,Y,ICTvE,WAAmBw5B,GAAiC,yBAP7C4oF,iBAO4C,OAN5C1K,WAM4C,OAL5CznH,UAK4C,OAJ5C49L,WAI4C,OAH5CwlB,UAG4C,OAF5Cl2N,WAE4C,EACjD0C,OAAO+8C,OAAOn7C,KAAM+3C,MCTH85K,E,kDAKnB,WAAmB95K,GAAwC,IAAD,8BACxD,cAAMA,IALDkoD,WAImD,IAHnD6xH,sBAGmD,IAFnDjxK,cAEmD,EAExDziD,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFoC,E,UALhBk5K,KCEvBzwK,E,kDAInB,WAAmBzI,GAAoC,IAAD,8BACpD,cAAMA,IAJDg6K,kBAG+C,IAF/C5nH,UAE+C,EAEpD/rG,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFgC,E,UAJhBk5K,K,GCCFA,ICDMA,ICRFA,I,QCIrBe,GCG8BC,ICPWA,ICmBpBd,ICfLA,I,kDJUnC,WAAmBp5K,GAA6C,IAAD,8BAC7D,cAAMA,IAVDkgG,aASwD,IARxDi6E,eAQwD,IAPxDC,cAOwD,IANxDC,aAMwD,IALxDC,aAKwD,IAJxDC,iBAIwD,IAHxDC,sBAGwD,IAFxDC,uBAEwD,IADxDC,iBACwD,EAE7Dr0N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFyC,E,UAVpBk6K,M,iBRqBxCb,K,gCAAAA,E,qBAAAA,M,KAiBE,IatCcxpN,E,kDAInB,WAAmBmwC,GAA+B,IAAD,8BAC/C,cAAMA,IAJD1G,aAG0C,IAF1Cg1D,UAE0C,EAE/CjoG,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF2B,E,UAJhBk5K,KCoDdtgF,E,kDAkBnB,WAAmB54F,GAAgC,IAAD,8BAChD,cAAMA,IALDtW,SAI2C,IAH3CH,QAG2C,IAF3CoxL,mBAE2C,EAEhDt0N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF4B,E,UAlBhBk5K,KAAftgF,EAELC,uBAAyB,SAACxZ,GACtC,OAAO,IAAIuZ,EAAO,CAChBlvG,IAAK,CACH,CACE21F,SAAU,CACR51F,GAAI41F,EAASrzH,IAAI,WAItB08C,eC5DiC0wK,ICPCF,I,aCYpB0B,GCXgB1B,ICKCA,ICNCA,ICA2BgB,I,kDJiBhE,WAAmBl6K,GAAyC,IAAD,8BACzD,cAAMA,IAJD25K,eAGoD,IAFpD16F,aAEoD,EAEzD54H,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFqC,E,UALhBk5K,MKJxB3wF,E,kDAInB,WAAmBvoF,GAAqC,IAAD,8BACrD,cAAMA,IAJDq/E,cAGgD,IAFhD7N,aAEgD,EAErDnrH,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFiC,E,UAJhBk5K,KCcpB1vF,GCbe4vF,ICDKF,ICLaA,ICFDE,ICAEc,I,kDLoCrD,WAAmBl6K,GAAmC,IAAD,8BACnD,cAAMA,IAND0xE,WAK8C,IAJ9C37G,YAI8C,IAH9CmqL,aAG8C,IAF9C26B,sBAE8C,EAEnDx0N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF+B,E,UAfDk5K,MAAjC1vF,EAELsxF,iCAAmC,SAAC77F,GAChD,OAAO,IAAIuK,EAAO,CAChB02D,QAAS,CACPzpL,KAAM,KAEPiyC,eMnB+BwwK,I,OCCDE,ICOFF,I,ICbdhxF,E,kDAOnB,WAAmBloF,GAAyC,IAAD,8BACzD,cAAMA,IAPD+6K,kBAMoD,IALpDC,oBAKoD,IAJpD98F,WAIoD,IAHpDh1F,QAGoD,IAFpDzyB,UAEoD,EAEzDpQ,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFqC,E,UAPhBk5K,KCWxB55F,E,kDAmCnB,WAAmBt/E,GAAkC,IAAD,8BAClD,cAAMA,IA3BDq/E,cA0B6C,IAzB7Cx2F,kBAyB6C,IAxB7Cq1F,WAwB6C,IAvB7C+8F,eAuB6C,IAtB7C75F,WAsB6C,IArB7C85F,aAqB6C,IApB7CC,SAoB6C,IAnB7C9mB,WAmB6C,IAlB7C+mB,WAkB6C,IAjB7C3kN,UAiB6C,IAhB7C4kN,UAgB6C,IAf7CC,eAe6C,IAd7CC,kBAc6C,IAb7CC,SAa6C,IAZ7C9tH,YAY6C,IAX7C+rH,gBAW6C,IAV7CvnK,YAU6C,IAT7Cw1E,YAS6C,IAR7CvG,mBAQ6C,IAP7CjsG,YAO6C,IAN7C0zG,iBAM6C,IAL7C6yF,SAK6C,IAJ7CC,UAI6C,IAH7CC,yBAG6C,IAF7CC,cAE6C,EAElDv1N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF8B,E,UAnCjBo5K,KAAhB95F,EAELC,uBAA4E,SAACN,GACzF,OAAO,IAAIiJ,EAAgB,CACzBh/F,GAAI+1F,EAAQjzH,IAAI,YAChByK,KAAMwoH,EAAQjzH,IAAI,kBACjB08C,e,ICJcmzK,E,kDAoCnB,WAAmB77K,GAAkC,IAAD,8BAClD,cAAMA,IApCD9W,QAmC6C,IAlC7CzyB,UAkC6C,IAjC7Ck4G,aAiC6C,IAhC7CuF,cAgC6C,IA7B7C4nG,qBA6B6C,IA5B7CC,mBA4B6C,IA3B7CC,oBA2B6C,IA1B7CC,eA0B6C,IAzB7CC,iBAyB6C,IAxB7CC,eAwB6C,IAvB7CC,YAuB6C,IAtB7CV,UAsB6C,IArB7C5oK,UAqB6C,IApB7CupK,gBAoB6C,IAnB7C3qK,cAmB6C,IAlB7C4qK,gBAkB6C,IAjB7CC,kBAiB6C,IAhB7CC,YAgB6C,IAf7CC,kBAe6C,IAd7CC,kBAc6C,IAb7CzzB,WAa6C,IAZ7C0zB,aAY6C,IAX7CC,UAW6C,IAV7CC,mBAU6C,IAT7CC,gBAS6C,IAR7CC,eAQ6C,IAP7C3+D,UAO6C,IAN7C4+D,aAM6C,IAL7CtvH,YAK6C,IAJ7CuvH,iBAI6C,IAF7Cp+G,mBAE6C,EAElDx4G,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF8B,E,UApCjBo5K,KCwEhB8D,GC1FoB9D,ICCOA,ICSLA,ICDMA,ICTNA,I,kDL4JzC,WAAmBp5K,GAAgC,IAAD,8BAChD,gBAlEKm9K,mBAiE2C,IAhE3Cb,gBAgE2C,IA/D3Cc,qBA+D2C,IA9D3CC,iBA8D2C,IA7D3CC,mBA6D2C,IA5D3CC,gBA4D2C,IA3D3CC,iBA2D2C,IA1D3CC,oBA0D2C,IAzD3ClD,iBAyD2C,IAxD3CmD,qBAwD2C,IAvD3CC,yBAuD2C,IAtD3CC,uBAsD2C,IArD3CC,aAqD2C,IApD3CC,wBAoD2C,IAnD3CC,qBAmD2C,IAlD3CC,YAkD2C,IAjD3CC,uBAiD2C,IAhD3CC,iBAgD2C,IA/C3ClB,aA+C2C,IA9C3CvmN,UA8C2C,IA7C3C0nN,wBA6C2C,IA5C3C//D,UA4C2C,IA3C3CggE,mBA2C2C,IA1C3CrC,mBA0C2C,IAzC3CsC,iBAyC2C,IAxC3C3wH,YAwC2C,IAvC3CyQ,eAuC2C,IAtC3C+V,cAsC2C,IArC3CvF,aAqC2C,IApC3C2vG,4BAoC2C,IAnC3CnC,eAmC2C,IAlC3CD,iBAkC2C,IAjC3CK,kBAiC2C,IAhC3C5qM,aAgC2C,IA/B3C4sM,iBA+B2C,IA9B3CC,qBA8B2C,IA7B3C5B,UA6B2C,IA5B3C6B,YA4B2C,IA3B3CC,kBA2B2C,IA1B3CC,yBA0B2C,IAzB3CjD,UAyB2C,IAxB3CkD,aAwB2C,IAvB3CC,gBAuB2C,IAtB3CC,kBAsB2C,IArB3CC,sBAqB2C,IApB3C9C,eAoB2C,IAP3C+C,mBAO2C,IAN3CC,gBAM2C,IAJ3CC,kBAI2C,IAH3CC,cAG2C,IAF3CC,gCAE2C,EAEhD/4N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF4B,E,UAlEjBo5K,M,GM1FMF,ICAiBA,I,MCiBrCmG,E,kDA0CnB,WAAmBr/K,GAAiC,IAAD,8BACjD,cAAMA,IAZDs/K,cAW4C,IAV5C7F,gBAU4C,IAT5C8B,kBAS4C,IAR5CU,eAQ4C,IAP5CK,gBAO4C,IAN5CZ,UAM4C,IAL5C6D,oBAK4C,IAJ5CC,gBAI4C,IAH5C/gG,eAG4C,IAF5CghG,kBAE4C,EAEjDp5N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF6B,E,UA1CjBs/E,GAAf+/F,EAELK,sBAAyE,SAACh4F,GACtF,OAAO,IAAIQ,EAAgB,CACzBh/F,GAAIw+F,EAAO17H,IAAI,YACfyK,KAAMixH,EAAO17H,IAAI,kBAChB08C,eANc22K,EASLM,yBAAyI,SAACj4F,EAAsBlW,EAAgCouG,GAC5M,OAAiB,MAAVl4F,EACHA,EAAO17H,IAAI,aAAc6O,iBAAOjH,QAAO,SAACisN,EAA4CjG,EAAiCkG,GAEnH,GADoBlG,EAAe5tN,IAAI,iBACnB4zN,EAClB,OAAOC,EAAalwN,IAAImwN,EAAclG,GAExC,IACMmG,EADYvuG,EAAQxlH,IAAI8zN,EAAch5N,iBACVmK,KAAI,SAACuC,GACrC,OAAOA,EAAOxH,IAAI,YAEdoH,EAAqCwmN,EAAe5tN,IAAI,UAAUwH,QAAO,SAAC7P,GAC9E,OAAOo8N,EAAgB7zN,IAAIvI,EAAMqI,IAAI,aAEvC,OAAuB,IAAnBoH,EAAOiK,QACFwiN,EAAalwN,IAAImwN,EAAclG,EAAejqN,IAAI,SAAUyD,IAE9DysN,IACNhlN,iBACHA,iBCzCiCq+M,I,ICOpB8G,E,kDAqBnB,WAAmBhgL,GAA+B,IAAD,8BAC/C,gBArBK9W,QAoB0C,IAnB1CzyB,UAmB0C,IAlB1Ck4G,aAkB0C,IAjB1CyvC,UAiB0C,IAhB1C4+D,aAgB0C,IAf1C9oG,cAe0C,IAZ1C+nG,eAY0C,IAX1CC,iBAW0C,IAV1CuC,YAU0C,IAT1CwB,cAS0C,IAR1CpB,gBAQ0C,IAP1CntK,cAO0C,IAN1C6qK,kBAM0C,IAL1C2D,kBAK0C,IAJ1C/hH,eAI0C,IAH1CgiH,cAG0C,IAF1Cr6E,UAE0C,EAE/Cz/I,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF2B,E,UArBjBo5K,KCXbgH,GCAuClG,ICCbhB,I,OCIbE,I,kDHFhC,WAAmBp5K,GAA0C,IAAD,8BAC1D,cAAMA,IAHD9W,QAEqD,EAE1D7iC,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFsC,E,UAHhBk5K,MISzBmH,GCR2BjH,I,kDDoB9C,WAAmBp5K,GAAqC,IAAD,8BACrD,cAAMA,IAZDohF,WAWgD,IAVhD/B,cAUgD,IAThDx2F,kBASgD,IARhDK,QAQgD,IAPhDg1F,WAOgD,IANhD4B,cAMgD,IALhDqB,mBAKgD,IAJhDm/F,2BAIgD,IAHhDC,wBAGgD,IAFhDC,gBAEgD,EAErDn6N,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFiC,E,UAZhBk5K,MEFHE,ICNAA,ICA4Bc,K,guECItDuG,E,iBAAAA,K,wDAAAA,E,wDAAAA,E,8DAAAA,E,sDAAAA,E,0DAAAA,E,kEAAAA,E,gEAAAA,E,wEAAAA,E,0DAAAA,E,gFAAAA,E,sDAAAA,E,gGAAAA,E,8EAAAA,E,4EAAAA,E,oDAAAA,E,0DAAAA,E,gFAAAA,E,kFAAAA,E,sEAAAA,E,0FAAAA,E,oGAAAA,E,4DAAAA,E,0FAAAA,E,+CAAAA,E,kEAAAA,E,0EAAAA,E,sCAAAA,E,0DAAAA,E,4DAAAA,E,4EAAAA,E,kEAAAA,E,0DAAAA,E,4DAAAA,E,gEAAAA,E,oEAAAA,E,wEAAAA,E,gEAAAA,E,gDAAAA,E,gEAAAA,E,sCAAAA,E,0DAAAA,E,gDAAAA,E,4CAAAA,E,8CAAAA,E,kEAAAA,E,kFAAAA,E,oEAAAA,E,oDAAAA,E,sCAAAA,E,gCAAAA,E,sDAAAA,E,0DAAAA,E,0DAAAA,E,0DAAAA,E,8DAAAA,E,oDAAAA,E,4EAAAA,E,4EAAAA,E,oEAAAA,E,sEAAAA,E,oEAAAA,E,oCAAAA,E,0CAAAA,E,0DAAAA,E,8CAAAA,E,0EAAAA,E,oFAAAA,E,oEAAAA,E,sDAAAA,E,8CAAAA,E,oCAAAA,E,sCAAAA,E,wDAAAA,E,wDAAAA,E,8CAAAA,E,kCAAAA,E,kDAAAA,E,sCAAAA,E,sCAAAA,E,oCAAAA,E,sDAAAA,E,oDAAAA,E,oDAAAA,E,gDAAAA,E,wDAAAA,E,wCAAAA,E,mDAAAA,M,KA0FL,IAAMC,EAAb,sCACkBv4N,KAAOs4N,EAAeE,kBAG3BC,EAAb,sCACkBz4N,KAAOs4N,EAAeI,mBAkB3BC,EAEX,WACS3xL,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAeM,0BAQ3BC,EAEX,WACS7xL,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAeQ,0BAiB3BC,EAEX,WACS/xL,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAeU,iBAyB3BC,EAAb,sCACkBj5N,KAAOs4N,EAAeY,4BAG3BC,EAEX,WACSnyL,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAec,oBAQ3BC,EAAb,sCACkBr5N,KAAOs4N,EAAegB,yBAW3BC,EAAb,sCACkBv5N,KAAOs4N,EAAekB,mBAqB3BC,EAAb,sCACkBz5N,KAAOs4N,EAAeoB,uBAG3BC,EAGX,WACS3yL,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAesB,kCA6B3BC,EAGX,WACS7yL,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAewB,sCAW3BC,EAGX,WACS/yL,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAe0B,sCAU3BC,EAGX,WACSjzL,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe4B,kCAS3BC,EAGX,WACSnzL,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAe8B,6BAW3BC,EAGX,WACSrzL,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAegC,6BAW3BC,EAGX,WACSvzL,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAekC,6BAW3BC,EAGT,WACWzzL,GAGR,yBAHQA,UAGT,KANchnC,KAAOs4N,EAAeoC,mCAS7BC,EAAb,sCACkB36N,KAAOs4N,EAAesC,+BAG3BC,EAGX,WACS7zL,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAewC,0BAS3BC,EAGX,WACS/zL,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe0C,kCAS3BC,EAGX,WACSj0L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe4C,6BAS3BC,EAGX,WACSn0L,GAMN,yBANMA,UAMP,KATchnC,KAAOs4N,EAAe8C,mBAY3BC,EAGX,WACSr0L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAegD,iCAU3BC,EAGX,WACSv0L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAekD,qCAS3BC,EAGX,WACSz0L,GAON,yBAPMA,UAOP,KAVchnC,KAAOs4N,EAAeoD,2BAa3BC,EAGX,WACS30L,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAesD,4BAW3BC,EAGX,WACS70L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAewD,4BAU3BC,EAGX,WACS/0L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe0D,+BAS3BC,EAEX,WACSj1L,GAIN,yBAJMA,UAIP,KANchnC,KAAOs4N,EAAe4D,2BAmB3BC,EAGX,WACSn1L,GAWN,yBAXMA,UAWP,KAdchnC,KAAOs4N,EAAe8D,iCAiB3BC,EAGX,WACSr1L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAegE,6CAS3BC,EAGX,WACSv1L,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAekE,kDAW3BC,EAGX,WACSz1L,GAON,yBAPMA,UAOP,KAVchnC,KAAOs4N,EAAeoE,8BAuB3BC,EAGX,WACS31L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAesE,gCAU3BC,EAGX,WACS71L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAewE,oCAS3BC,EAGX,WACS/1L,GAMN,yBANMA,UAMP,KATchnC,KAAOs4N,EAAe0E,wCA6C3BC,EAGX,aAEG,IADMj2L,EACP,uDADqB,GACrB,yBADOA,UACP,KAJchnC,KAAOs4N,EAAe4E,uCAO3BC,EAGX,aAEG,IADMn2L,EACP,uDADqB,GACrB,yBADOA,UACP,KAJchnC,KAAOs4N,EAAe8E,sCAO3BC,EAGX,WACSr2L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAegF,0BAS3BC,EAGX,WACSv2L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAekF,wCAU3BC,EAGX,WACSz2L,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAeoF,yCAW3BC,EAGX,WACS32L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAesF,mCAS3BC,EAGX,WACS72L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAewF,8BAS3BC,EAGX,WACS/2L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAe0F,6CAqB3BC,EAGX,WACSj3L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAe4F,6BAU3BC,EAGX,WACSn3L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAe8F,8BAU3BC,EAGX,WACSr3L,GAMN,yBANMA,UAMP,KATchnC,KAAOs4N,EAAegG,gCAuB3BC,EAGX,WACSv3L,GAMN,yBANMA,UAMP,KATchnC,KAAOs4N,EAAekG,gCAY3BC,GAGX,WACSz3L,GAKN,yBALMA,UAKP,KARchnC,KAAOs4N,EAAeoG,wBAW3BC,GAGX,WACS33L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAesG,gCAU3BC,GAGX,WACS73L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAewG,mBAS3BC,GAGX,WACS/3L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOs4N,EAAe0G,6BAS3BC,GAEX,WACSj4L,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAe4G,wBAO3BC,GAGX,WACSn4L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe8G,sBAS3BC,GAGX,WACSr4L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAegH,uBAS3BC,GAEX,WACSv4L,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAekH,iCAiB3BC,GAEX,WACSz4L,GAKN,yBALMA,UAKP,KAPchnC,KAAOs4N,EAAeoH,0BAU3BC,GAEX,WACS34L,GAKN,yBALMA,UAKP,KAPchnC,KAAOs4N,EAAesH,gBAU3BC,GAEX,WACS74L,GAGN,yBAHMA,UAGP,KALchnC,KAAOs4N,EAAewH,2BAQ3BC,GAEX,WACS/4L,GAUN,yBAVMA,UAUP,KAZchnC,KAAOs4N,EAAe0H,kCAe3BC,GAGX,WACSj5L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe4H,kBAS3BC,GAGX,WACSn5L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAe8H,qBAS3BC,GAGX,WACSr5L,GAGN,yBAHMA,UAGP,KANchnC,KAAOs4N,EAAegI,6BAsB3BC,GAGX,WAAmBv5L,GAAe,yBAAfA,UAAc,KAFjBhnC,KAAOs4N,EAAekI,4B,6jDC54B5BC,E,iBAAAA,K,kDAAAA,E,kEAAAA,E,kEAAAA,E,8CAAAA,E,kEAAAA,E,0CAAAA,E,8DAAAA,E,wEAAAA,E,4CAAAA,E,oDAAAA,E,gDAAAA,E,gEAAAA,E,oEAAAA,E,0CAAAA,E,0DAAAA,E,8DAAAA,E,oEAAAA,E,4DAAAA,E,kEAAAA,E,oDAAAA,E,kCAAAA,E,wCAAAA,E,wDAAAA,E,4BAAAA,E,oBAAAA,E,oCAAAA,E,0BAAAA,E,0CAAAA,E,4BAAAA,E,gDAAAA,E,8CAAAA,E,gDAAAA,E,0CAAAA,E,0DAAAA,E,gEAAAA,E,0EAAAA,E,wEAAAA,E,gFAAAA,E,8EAAAA,E,sCAAAA,E,0DAAAA,E,wEAAAA,E,oCAAAA,E,4DAAAA,E,8CAAAA,E,gDAAAA,E,8DAAAA,E,gEAAAA,E,wEAAAA,E,wCAAAA,E,+DAAAA,M,KAwDL,IAaMC,EAGX,WACS15L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOygO,EAAgBE,mBAU5BC,EAGX,WACS55L,GAKN,yBALMA,UAKP,KARchnC,KAAOygO,EAAgBI,cAW5BC,EAGX,WACS95L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBM,wBAS5BC,EAAb,sCACkBhhO,KAAOygO,EAAgBQ,uBAG5BvhK,EAGX,WACS14B,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgB9gK,0BAS5BuhK,EAGX,WACSl6L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBU,iCAS5BC,EAGX,WACSp6L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBY,8BAS5BC,EAGX,WACSt6L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBc,kCAS5BC,EAGX,WACSx6L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBgB,+BAS5BC,EAGX,WACS16L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBkB,qBAS5BC,EAGX,WACS56L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBoB,6BAM5BC,EAGX,WACS96L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBsB,kCAS5BC,EAAb,sCACkBhiO,KAAOygO,EAAgBwB,0BAG5BC,EAGX,WACSvhM,GACN,yBADMA,aACP,KAJc3gC,KAAOygO,EAAgB0B,wBAO5BC,EAGX,WACSp7L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgB4B,gCAO5BC,EAAb,sCACkBtiO,KAAOygO,EAAgB8B,sBAS5BC,EAGX,WACSx7L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBgC,oCAO5BC,EAGX,WACS17L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBkC,+BAS5BC,EAAb,sCACkB5iO,KAAOygO,EAAgBoC,4BAG5BC,EAGX,WACS97L,GAKN,yBALMA,UAKP,KARchnC,KAAOygO,EAAgBsC,qBAW5BC,EAGX,WACSh8L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBwC,yBAS5BC,EAAb,sCACkBljO,KAAOygO,EAAgB0C,oBAG5BC,EAGX,WACSp8L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgB4C,iCAO5BC,EAGX,WACSt8L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgB8C,iBAS5BC,EAGX,WACSx8L,GAGN,yBAHMA,UAGP,KANchnC,KAAOygO,EAAgBgD,iCAS5BC,EAGX,WACS18L,GAiBN,yBAjBMA,UAiBP,KApBchnC,KAAOygO,EAAgBkD,uBAuB5BC,EAGX,WACS58L,GAQN,yBARMA,UAQP,KAXchnC,KAAOygO,EAAgBoD,uBAc5BC,EAGX,WACS98L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOygO,EAAgBsD,iCAU5BC,EAGX,WACSh9L,GAQN,yBARMA,UAQP,KAXchnC,KAAOygO,EAAgBwD,oBAc5BC,EAGX,WACSl9L,GAON,yBAPMA,UAOP,KAVchnC,KAAOygO,EAAgB0D,cAa5BC,EAGX,WACSp9L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOygO,EAAgB4D,UAS5BC,EAGX,WACSt9L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgB8D,kBAkB5BC,EAGX,WACSx9L,GAIN,yBAJMA,UAIP,KAPchnC,KAAOygO,EAAgBgE,qBAS5BC,EAGX,WACS19L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBkE,qCAO5BC,EAGX,WACS59L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBoE,oCAO5BC,EAGX,WACS99L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBsE,wCAO5BC,EAGX,WACSh+L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBwE,uCAO5BC,EAGX,WACSl+L,GAMN,yBANMA,UAMP,KATchnC,KAAOygO,EAAgB0E,qBAY5BC,EAGX,WACSp+L,GAMN,yBANMA,UAMP,KATchnC,KAAOygO,EAAgB4E,wBAY5BC,EAGX,WACSt+L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgB8E,6BAM5BC,EAGX,WACSx+L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBgF,gCAc5BC,EAGX,WACS1+L,GACN,yBADMA,UACP,KAJchnC,KAAOygO,EAAgBkF,8BAoB5BC,EAET,WACW5+L,GAGR,yBAHQA,UAGT,KALchnC,KAAOygO,EAAgBoF,+BAa9BC,EAGT,WACW9+L,GAKR,yBALQA,UAKT,KARchnC,KAAOygO,EAAgBsF,gCAY9BC,EAAb,sCACkBhmO,KAAOygO,EAAgBwF,gC,8zDChgBrCzmL,E,+EAESC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAQIwzN,EAAkC,kBAAMvzL,YACnD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,6BAGlDsiO,EAAgC,kBAAMxzL,YACjD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,2BAGlDg6H,EAAmC,kBAAMlrF,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,8BAGlDuiO,EAAgC,kBAAMzzL,YACjD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,2BAGlDwiO,EAAyB,kBAAM1zL,YAC1C8M,KACA,SAAC3Y,GAAD,OAAiEA,EAAMjjC,IAAI,oBAGhEyiO,EAA4C,kBAAM3zL,YAC7D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uCAGlD0iO,EAAoC,kBAAM5zL,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,+BAGlD2iO,EAAiC,kBAAM7zL,YAClD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,4BAuBlD45H,EAA2B,kBAAM9qF,YAC5C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,sBAGlD4iO,EAA6B,kBAAM9zL,YAC9C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAGlD29L,EAAgC,kBAAM7uJ,YACjD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAGlD6iO,EAAwD,kBAAM/zL,YACzE8M,IACAknL,KACA,SAAC7/L,EAA+CqxF,GAAhD,OAA8ErxF,EAAMpmB,MAAM,CAAC,kCAAmCy3G,KAAuB74G,2BAG1IsnN,EAA4C,kBAAMj0L,YAC7D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uCAGlD8iO,EAA8B,kBAAMh0L,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAElDgjO,EAA4B,kBAAMl0L,YAC7Cg0L,IACAG,KACA,SAAC3uG,EAA2B4uG,GAA5B,OAAkGA,EAA8BljO,IAAIs0H,OAGzHoF,EAAuB,kBAAM5qF,YACxC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,kBAGlDo5H,EAA8B,kBAAMtqF,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAGlDmjO,EAAyC,kBAAMr0L,YAC1DsqF,KACA,SAACgqG,GACC,OAAKA,EAGL,OAAOA,QAAP,IAAOA,OAAP,EAAOA,EACHx7N,QAAO,SAACutI,EAAKkuF,GAAc,IAAD,IACxB,OAAOluF,EAAI5tI,OAAJ,oBAAW87N,EAASrjO,IAAI,uBAAxB,aAAW,EAA8BiF,KAAI,SAACouH,GAAD,OAAchuG,iBAAO,CAAC6X,GAAIm2F,EAASrzH,IAAI,MAAOrI,MAAO07H,EAASrzH,IAAI,oBAA/G,QAA6HkU,oBACnIA,kBACJxL,MAAK,SAAC9G,EAAGC,GACR,IAAMyhO,EAAY1hO,EAAE5B,IAAI,SAASq1C,cAC3BkuL,EAAY1hO,EAAE7B,IAAI,SAASq1C,cACjC,OAAOiuL,EAAUE,cAAcD,MAT1BrvN,qBAwCAuvN,EAAqD,kBAAM30L,YACtEsqF,KACA,SAACgqG,GAUC,OAR+CA,EAAkBx7N,QAAO,SAAC87N,EAA8D3nG,GACrI,OAAO2nG,EAAcz2N,eAAc,SAAC02N,GAClC5nG,EAAqB/7H,IAAI,gBAAgB2I,SAAQ,SAACszH,GAChD,IAAM2nG,EAA6DD,EAAc3jO,IAAIi8H,EAAgBj8H,IAAI,MAAOkU,kBAChHyvN,EAAchgO,IAAIs4H,EAAgBj8H,IAAI,MAAO4jO,EAAyBv7N,KAAK0zH,YAG9EltH,qBAKMo0N,EAA0C,kBAAMn0L,YAC3DsqF,KACA,SAACgqG,GAQC,OAP+CA,EAAkBx7N,QAAO,SAACi8N,EAAwD9nG,GAC/H,OAAO8nG,EAAmB52N,eAAc,SAAC62N,GACvC/nG,EAAqB/7H,IAAI,gBAAgB2I,SAAQ,SAACszH,GAChD6nG,EAAsBngO,IAAIs4H,EAAgBj8H,IAAI,MAAOi8H,WAGxDptH,qBAKMk1N,EAAmC,kBAAMj1L,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,0BAA0B,IAAIgkO,KAA8BtnL,mBAG9G48E,EAAsC,kBAAMxqF,YACvDsqF,IACA2qG,KACA,SAACX,EAA4Da,GAC3D,IAAM9nO,EAAO8nO,EAAuBjkO,IAAI,SAClCk9B,EAAK+mM,EAAuBjkO,IAAI,MACtC,OAAOojO,EAAkBv+N,WAAW2C,QAAO,SAACu0H,GAC1C,OAAY,MAAR5/H,IAGGA,IAAS+nO,IAAoBC,oBAAsBpoG,EAAqB/7H,IAAI,kBAAoBk9B,EAAK6+F,EAAqB/7H,IAAI,oBAAsBk9B,UAKpJknM,EAAuB,kBAAMt1L,YACxC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mBAAoB6O,qBAGtEw1N,EAA2B,kBAAMv1L,YAC5C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uBAAwB6O,qBAG1Ey1N,EAAwC,kBAAMx1L,YACzD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mCAGlDukO,EAA6C,wEAKpD,GAHQC,EAF4C,EAEtDhxG,SAFsD,OAMrD1kF,YACHs1L,IACAK,GAAiB,CAACjxG,SAAUgxG,IAC5BE,GAAyC,CAAClxG,SAAUgxG,IACpDG,EAAuC,CAACnxG,SAAUgxG,KAClD,SACEI,EACAlpG,EACA+xF,EACAoX,GAGA,GAAc,MAAVnpG,EACF,OAAO7sH,gBAET,IAAM2kH,EAAWkI,EAAO17H,IAAI,MAK5B,OAD+C4kO,EAAiB/nN,MAAM,CAAC22G,EAAU85F,IAAUwX,8BAA8BrX,MAAiBoX,MAMjIE,EAA2C,SAAC,GAAD,IAEpDrpG,EAFoD,EAEpDA,OAFoD,OAMnD5sF,YACHs1L,IACAY,GAAiC,CAACxxG,SAAUkI,EAAO17H,IAAI,QACvDilO,EAA6C,CAACvpG,YAC9C,SACEkpG,EACAnX,EACAoX,GAGA,GAAc,MAAVnpG,EACF,OAAO7sH,gBAET,IAAM2kH,EAAWkI,EAAO17H,IAAI,MAK5B,OAD+C4kO,EAAiB/nN,MAAM,CAAC22G,EAAU85F,IAAUwX,8BAA8BrX,MAAiBoX,MAMjII,EAA+C,SAAC,GAAD,IAExDvpG,EAFwD,EAExDA,OAFwD,OAMvD5sF,YACHu1L,KACA,SAACO,GAEC,IAAMM,EAAW,IAAItW,IAAgB,IAAIlyK,cACzC,GAAc,MAAVg/E,EACF,OAAOwpG,EAET,IAAM1xG,EAAWkI,EAAO17H,IAAI,MAK5B,OAD+C4kO,EAAiB5kO,IAAIwzH,IAAa0xG,MAMxEP,EAAyC,wEAKhD,GAHQH,EAFwC,EAElDhxG,SAFkD,OAMjD1kF,YACHu1L,IACAI,GAAiB,CAACjxG,SAAUgxG,KAC5B,SAACI,EAAkBlpG,GAEjB,IAAMwpG,EAAW,IAAItW,IAAgB,IAAIlyK,cACzC,GAAc,MAAVg/E,EACF,OAAOwpG,EAET,IAAM1xG,EAAWkI,EAAO17H,IAAI,MAK5B,OAD+C4kO,EAAiB5kO,IAAIwzH,IAAa0xG,MAMxEC,EAAgB,kBAAMr2L,YACjC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,SAAU6O,qBAG5Du2N,EAA0B,kBAAMt2L,YAC3C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,qBAQlDqlO,EAAuB,kBAAMv2L,YACxCq2L,IACArC,KACA,SAACpnG,EAAmCpH,GAClC,OAAOoH,EAAOl0H,QAAO,SAAC89N,GACpB,OAAOA,EAAMtlO,IAAI,cAAgBpC,OAAO02H,UAQjCixG,EAAsB,kBAAMz2L,YACvC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,gBAAiB6O,qBAGnE22N,EAA0C,kBAAM12L,YAC3D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,gCAAiC6O,qBAKnF42N,EAAuB,kBAAM32L,YACxC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iBAAkB6O,qBAGpE62N,EAAkC,kBAAM52L,YACnD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAAyB6O,qBAG3E82N,EAA0C,kBAAM72L,YAC3D8M,IACAgqL,MACA,SAAC3iM,EAA+C4iM,GAAhD,OAAqE5iM,EAAMpmB,MAAM,CAAC,wBAAyBgpN,GAAmBh3N,qBAQnHi3N,EAAiD,kBAAMh3L,YAClE8M,IACAgqL,MACA,SAAC3iM,EAA+C4iM,GAAhD,OAAqE5iM,EAAMpmB,MAAM,CAAC,+BAAgC/R,OAAO+6N,SAG9GE,EAAyD,kBAAMj3L,YAC1E8M,IACAgqL,MACA,SAAC3iM,EAA+C4iM,GAAhD,OAAqE5iM,EAAMpmB,MAAM,CAAC,uCAAwC/R,OAAO+6N,SAGtHG,GAA8C,kBAAMl3L,YAC/D62L,KACA,SAACM,GACC,OAAOA,EAAsBnrN,aAIpBorN,GAA8C,kBAAMp3L,YAC/D62L,KACA,SAACM,GAYC,OAXoBA,EAAsBr+N,QAAO,SAACutI,EAAKgxF,GACrD,OAAyB,IAArBA,EAAYnuO,KACPm9I,EAGFA,EAAI9sI,KAAJ,MAAA8sI,EAAG,YAASgxF,MAClBjyN,sBASM0xN,GAA6B,kBAAM92L,YAC9C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wBAGlDykO,GAAmB,wEAK1B,GAHQD,EAFkB,EAE5BhxG,SAF4B,OAM3B1kF,YACHq2L,IACAS,MACA,SAAClqG,EAAmClI,GAClC,OAA6B,MAAtBgxG,EAA6B9oG,EAAO17H,IAAIwkO,GAAsB9oG,EAAO17H,IAAIwzH,OAIvE4yG,GAA6B,wEAKpC,GAHQ5B,EAF4B,EAEtChxG,SAFsC,OAMrC1kF,YACH21L,GAAiB,CAACjxG,SAAUgxG,IAC5BmB,KACA,SAACjqG,EAAsB2qG,GACrB,OAAOhT,IAAOM,yBAAyBj4F,EAAQ2qG,OAItCC,GAAmC,SAAC5qG,GAAD,OAA0B5sF,YACxE62L,KACA,SAACU,GACC,OAAOhT,IAAOM,yBAAyBj4F,EAAQ2qG,OAItCrB,GAAmC,wEAK1C,GAHQR,EAFkC,EAE5ChxG,SAF4C,OAM3C1kF,YACH21L,GAAiB,CAACjxG,SAAUgxG,IAC5Be,KACA,SAAC7pG,EAAsB6qG,GACrB,OAAOlT,IAAOM,yBAAyBj4F,EAAQ6qG,GAAe,OAIrD7B,GAA2C,wEAKlD,GAHQF,EAF0C,EAEpDhxG,SAFoD,OAMnD1kF,YACH21L,GAAiB,CAACjxG,SAAUgxG,IAC5BmB,KACA,SAACjqG,EAAsBuqG,GACrB,OAAO5S,IAAOM,yBAAyBj4F,EAAQuqG,GAAuB,OAI7DO,GAAuB,kBAAM13L,YACxCu2L,IACAE,IACAkB,KA/JkD33L,YAClD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,uBAAwByb,4BA+JrF,SAACigH,EAAQlW,EAASxpB,EAAQ0qI,GAOxB,IAAMC,EAAyCnhH,EAAQh+G,QAAO,SAACA,EAAkBjH,GAC/E,MAAe,gBAAPA,GAA0BiH,IAAWA,EAAOgX,aAEhDooN,EAAaD,EAAgB7rN,SAASwC,QAEtCupN,EADgCrhH,EAAQxlH,IAAI,eAAgBlF,iBACZ0iB,SAAS5V,QAAO,SAACutI,EAAK3tI,EAAQpP,GAClF,OAAO+8I,EAAI9sI,KAAKb,EAAOxH,IAAI,YAC1BkU,kBAEgB8nF,EACah8F,IAAI,eAAgB,IAiBpD,OAdqC0mO,EAAuBA,EAAqB9+N,QAAO,SAACutI,EAAK2xF,GAC5F,IAAMC,EAAgBrrG,EAAO17H,IAAI8mO,GAEjC,OAAOC,EAAgB5xF,EAAI9sI,KAAK0+N,GAAiB5xF,IAChDjhI,kBAAUA,kBAUuB1M,QAAO,SAACw/N,GAC1C,IAAMC,EAAmBD,EAAchnO,IAAI,cACrCknO,EAAsBD,EAAiBnsN,SAASlb,WAEhDunO,EAD8E,IAArDP,EAAWprN,SAAS0rN,GAAqB71N,SACV41N,EAAiBr/N,QAAO,SAACw/N,EAAuBzZ,EAAgBmG,GAC5H,IAAKsT,EACH,OAAOA,EAET,IAAMC,EAAkBV,EAAgB3mO,IAAI8zN,EAAch5N,iBAC1D,GAAuB,MAAnBusO,EACF,OAAOD,EAEKzZ,EAAU3tN,IAAI,YACR2tN,EAAU3tN,IAAI,eAClC,OAAIqnO,EAAgB7oN,UACX4oN,KA6BR,GACGhyG,EAAQ4xG,EAAchnO,IAAI,SAC1BsnO,EAAiCT,EAA0BroN,WAAaqoN,EAA0BrhO,SAAS4vH,GACjH,OAAO+xG,GAA+BG,SAU/BC,GAAsC,kBAAMz4L,YACvD03L,MACA,SAAC9qG,GAiBC,OAhBsCA,EAAO9zH,QAAO,SAAC4/N,EAAwDC,GAc3G,OAbYD,EAAav6N,eAAc,SAACy6N,GACWD,EAAQznO,IAAI,cAClD2I,SAAQ,SAACglN,EAA4BmG,GAC9C,IACM6T,EAD4BD,EAAc1nO,IAAI8zN,EAAczuM,iBAAO,KACzBpY,eAAc,SAAC26N,GAC7DA,EAA2BjkO,IAAI,YAAagqN,GAC5CA,EAAU3tN,IAAI,UAAU2I,SAAQ,SAACk/N,GAC/BD,EAA2Bz7N,MAAM,CAAC,SAAU07N,EAAO7nO,IAAI,UAAW6nO,SAGtEH,EAAc/jO,IAAImwN,EAAc6T,WAInC94N,qBAKM43N,GAAwC,kBAAM33L,YACzDuoE,wBAAcywH,MACd,SAAC1wH,GAAD,OAAmCA,GAAcvoG,oBAGtC2qH,GAAsD,kBAAM1qF,YACvE8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,0BAGlD+nO,GAAkC,kBAAMj5L,YACnD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,6BAQlDk5H,GAA0B,kBAAMpqF,YAC3C8M,IACA49E,MACA,SAACv2F,EAA+Cs2F,GAE9C,OAAOt2F,EAAMpmB,MAAM,CAAC,gBAAiB08G,GAAiBrlH,sBAI7C8zN,GAA8B,kBAAMl5L,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,sBAAwB,OAG1EioO,GAA8C,kBAAMn5L,YAC/D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yCAGlD85H,GAAwC,kBAAMhrF,YACzD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mCAGlDkoO,GAA8B,kBAAMp5L,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,yBAGlDmoO,GAAmC,kBAAMr5L,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,8BAGlDooO,GAAoC,kBAAMt5L,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iCA2ClDqoO,GAAgC,kBAAMv5L,YACjD0zL,IACA3lL,cACAqM,cACAuoF,eACA,SAAC62F,EAAwBC,EAAqBC,EAAyBC,GACrE,IAAM9uH,EAAS,OAAG8uH,QAAH,IAAGA,OAAH,EAAGA,EAAsB5rN,MAAM,CAAC,UAAW,OACpD6rN,EAAgCH,EAAmC5uH,IAAcv+E,iBAAekB,OAAS,MAAQ,MAAhEksM,EA6BvD,MAvBmB,CACjBG,cAAe,CAACC,UAAW,EAAG1rM,IAAK,GACnC2rM,WAAY,CAAC3rM,IAAK,GAClB4rM,YAAa,CAACC,MAAO,EAAGH,UAAW,EAAG1rM,IAAK,GAC3C8rM,eAAgB,CACdC,SAAU,CACRC,SAAU,UACVC,SAAUT,EACVU,OAAQ,GAEVlsM,IAAK,GAEPmsM,eAAgB,CACdJ,SAAU,CACRC,SAAU,UACVC,SAAUT,EACVU,MAAO,GAETlsM,IAAK,IAIkBorM,IA1BJ,CACrB,MAAS,EACT,IAAO,Q,iBCrxBb,YAOmEnxO,EAAOC,QAGjE,WAAc,aAEnB,IAAIkyO,EA6HA5/N,EA3HJ,SAAS6/N,IACL,OAAOD,EAAaplO,MAAM,KAAMvE,WAKpC,SAAS6pO,EAAgB3oM,GACrByoM,EAAezoM,EAGnB,SAASljC,EAAQ+iH,GACb,OACIA,aAAiBhjH,OACyB,mBAA1CrD,OAAOD,UAAU8C,SAASD,KAAKyjH,GAIvC,SAASkzD,EAASlzD,GAGd,OACa,MAATA,GAC0C,oBAA1CrmH,OAAOD,UAAU8C,SAASD,KAAKyjH,GAIvC,SAAS+oH,EAAW7nO,EAAGC,GACnB,OAAOxH,OAAOD,UAAUoD,eAAeP,KAAK2E,EAAGC,GAGnD,SAAS6nO,EAAc3mO,GACnB,GAAI1I,OAAOsvO,oBACP,OAAkD,IAA3CtvO,OAAOsvO,oBAAoB5mO,GAAKjF,OAEvC,IAAI1B,EACJ,IAAKA,KAAK2G,EACN,GAAI0mO,EAAW1mO,EAAK3G,GAChB,OAAO,EAGf,OAAO,EAIf,SAAS+6L,EAAYz2E,GACjB,YAAiB,IAAVA,EAGX,SAASvE,EAASuE,GACd,MACqB,kBAAVA,GACmC,oBAA1CrmH,OAAOD,UAAU8C,SAASD,KAAKyjH,GAIvC,SAASurD,EAAOvrD,GACZ,OACIA,aAAiB12F,MACyB,kBAA1C3vB,OAAOD,UAAU8C,SAASD,KAAKyjH,GAIvC,SAASz7G,EAAI6E,EAAKhL,GACd,IACIG,EADA8+I,EAAM,GAEN6rF,EAAS9/N,EAAIhM,OACjB,IAAKmB,EAAI,EAAGA,EAAI2qO,IAAU3qO,EACtB8+I,EAAI11I,KAAKvJ,EAAGgL,EAAI7K,GAAIA,IAExB,OAAO8+I,EAGX,SAAS43C,EAAO/zL,EAAGC,GACf,IAAK,IAAI5C,KAAK4C,EACN4nO,EAAW5nO,EAAG5C,KACd2C,EAAE3C,GAAK4C,EAAE5C,IAYjB,OARIwqO,EAAW5nO,EAAG,cACdD,EAAE1E,SAAW2E,EAAE3E,UAGfusO,EAAW5nO,EAAG,aACdD,EAAEF,QAAUG,EAAEH,SAGXE,EAGX,SAASioO,EAAUnpH,EAAOhqE,EAAQwP,EAAQ09J,GACtC,OAAOkmB,GAAiBppH,EAAOhqE,EAAQwP,EAAQ09J,GAAQ,GAAMmmB,MAGjE,SAASC,IAEL,MAAO,CACH51N,OAAO,EACP61N,aAAc,GACdC,YAAa,GACb5jH,UAAW,EACX6jH,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,GAIzB,SAASC,EAAgB18N,GAIrB,OAHa,MAATA,EAAE28N,MACF38N,EAAE28N,IAAMhB,KAEL37N,EAAE28N,IAsBb,SAAS7qC,EAAQ9xL,GACb,GAAkB,MAAdA,EAAE48N,SAAkB,CACpB,IAAIC,EAAQH,EAAgB18N,GACxB88N,EAAczhO,EAAKzM,KAAKiuO,EAAMR,iBAAiB,SAAUzrO,GACrD,OAAY,MAALA,KAEXmsO,GACK/yL,MAAMhqC,EAAEg9N,GAAGphN,YACZihN,EAAM5kH,SAAW,IAChB4kH,EAAM92N,QACN82N,EAAMb,aACNa,EAAMZ,eACNY,EAAMI,iBACNJ,EAAMJ,kBACNI,EAAMd,YACNc,EAAMX,gBACNW,EAAMV,mBACLU,EAAMN,UAAaM,EAAMN,UAAYO,GAU/C,GARI98N,EAAEk9N,UACFH,EACIA,GACwB,IAAxBF,EAAMf,eACwB,IAA9Be,EAAMjB,aAAansO,aACD/F,IAAlBmzO,EAAMM,SAGS,MAAnBnxO,OAAOoxO,UAAqBpxO,OAAOoxO,SAASp9N,GAG5C,OAAO+8N,EAFP/8N,EAAE48N,SAAWG,EAKrB,OAAO/8N,EAAE48N,SAGb,SAASS,EAAcR,GACnB,IAAI78N,EAAIw7N,EAAUvxO,KAOlB,OANa,MAAT4yO,EACAv1C,EAAOo1C,EAAgB18N,GAAI68N,GAE3BH,EAAgB18N,GAAGm8N,iBAAkB,EAGlCn8N,EA7DP3E,EADAhM,MAAMtD,UAAUsP,KACThM,MAAMtD,UAAUsP,KAEhB,SAAUiiO,GACb,IAEI1sO,EAFA+oB,EAAI3tB,OAAO4B,MACX+N,EAAMge,EAAElqB,SAAW,EAGvB,IAAKmB,EAAI,EAAGA,EAAI+K,EAAK/K,IACjB,GAAIA,KAAK+oB,GAAK2jN,EAAI1uO,KAAKhB,KAAM+rB,EAAE/oB,GAAIA,EAAG+oB,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAI4jN,EAAoBrC,EAAMqC,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAW5gO,EAAID,GACpB,IAAIhM,EACA6/I,EACA5sI,EACA65N,EAAsBH,EAAiB9tO,OAiC3C,GA/BKq5L,EAAYlsL,EAAK+gO,oBAClB9gO,EAAG8gO,iBAAmB/gO,EAAK+gO,kBAE1B70C,EAAYlsL,EAAKwlE,MAClBvlE,EAAGulE,GAAKxlE,EAAKwlE,IAEZ0mH,EAAYlsL,EAAKghO,MAClB/gO,EAAG+gO,GAAKhhO,EAAKghO,IAEZ90C,EAAYlsL,EAAKihO,MAClBhhO,EAAGghO,GAAKjhO,EAAKihO,IAEZ/0C,EAAYlsL,EAAKsgO,WAClBrgO,EAAGqgO,QAAUtgO,EAAKsgO,SAEjBp0C,EAAYlsL,EAAKkhO,QAClBjhO,EAAGihO,KAAOlhO,EAAKkhO,MAEdh1C,EAAYlsL,EAAKmhO,UAClBlhO,EAAGkhO,OAASnhO,EAAKmhO,QAEhBj1C,EAAYlsL,EAAKohO,WAClBnhO,EAAGmhO,QAAUphO,EAAKohO,SAEjBl1C,EAAYlsL,EAAK+/N,OAClB9/N,EAAG8/N,IAAMD,EAAgB9/N,IAExBksL,EAAYlsL,EAAKqhO,WAClBphO,EAAGohO,QAAUrhO,EAAKqhO,SAGlBP,EAAsB,EACtB,IAAK9sO,EAAI,EAAGA,EAAI8sO,EAAqB9sO,IAG5Bk4L,EADLjlL,EAAMjH,EADN6zI,EAAO8sF,EAAiB3sO,OAGpBiM,EAAG4zI,GAAQ5sI,GAKvB,OAAOhH,EAIX,SAASqhO,EAAO5qL,GACZmqL,EAAW7vO,KAAM0lD,GACjB1lD,KAAKovO,GAAK,IAAIrhN,KAAkB,MAAb23B,EAAO0pL,GAAa1pL,EAAO0pL,GAAGphN,UAAY3xB,KACxD2D,KAAKkkM,YACNlkM,KAAKovO,GAAK,IAAIrhN,KAAK1xB,OAIE,IAArBuzO,IACAA,GAAmB,EACnBtC,EAAMiD,aAAavwO,MACnB4vO,GAAmB,GAI3B,SAASY,EAAS1pO,GACd,OACIA,aAAewpO,GAAkB,MAAPxpO,GAAuC,MAAxBA,EAAIipO,iBAIrD,SAAS9nN,EAAKwoN,IAEgC,IAAtCnD,EAAMoD,6BACa,qBAAZ1oN,SACPA,QAAQC,MAERD,QAAQC,KAAK,wBAA0BwoN,GAI/C,SAASE,EAAUF,EAAK5tO,GACpB,IAAI+tO,GAAY,EAEhB,OAAOl3C,GAAO,WAIV,GAHgC,MAA5B4zC,EAAMuD,oBACNvD,EAAMuD,mBAAmB,KAAMJ,GAE/BG,EAAW,CACX,IACIlmN,EACA1nB,EACAsB,EAHA0mB,EAAO,GAIP8lN,EAASptO,UAAU7B,OACvB,IAAKmB,EAAI,EAAGA,EAAI8tO,EAAQ9tO,IAAK,CAEzB,GADA0nB,EAAM,GACsB,kBAAjBhnB,UAAUV,GAAiB,CAElC,IAAKsB,KADLomB,GAAO,MAAQ1nB,EAAI,KACPU,UAAU,GACd8pO,EAAW9pO,UAAU,GAAIY,KACzBomB,GAAOpmB,EAAM,KAAOZ,UAAU,GAAGY,GAAO,MAGhDomB,EAAMA,EAAI5a,MAAM,GAAI,QAEpB4a,EAAMhnB,UAAUV,GAEpBgoB,EAAK5e,KAAKse,GAEdzC,EACIwoN,EACI,gBACAhvO,MAAMtD,UAAU2R,MAAM9O,KAAKgqB,GAAMvJ,KAAK,IACtC,MACA,IAAI7Z,OAAQuE,OAEpBykO,GAAY,EAEhB,OAAO/tO,EAAGoF,MAAMjI,KAAM0D,aACvBb,GAGP,IAgFIf,EAhFAivO,EAAe,GAEnB,SAASC,EAAgBxiO,EAAMiiO,GACK,MAA5BnD,EAAMuD,oBACNvD,EAAMuD,mBAAmBriO,EAAMiiO,GAE9BM,EAAaviO,KACdyZ,EAAKwoN,GACLM,EAAaviO,IAAQ,GAO7B,SAAS4vK,EAAW35D,GAChB,MACyB,qBAAb4qD,UAA4B5qD,aAAiB4qD,UACX,sBAA1CjxK,OAAOD,UAAU8C,SAASD,KAAKyjH,GAIvC,SAAS/8G,EAAIg+C,GACT,IAAIm9F,EAAM7/I,EACV,IAAKA,KAAK0iD,EACF8nL,EAAW9nL,EAAQ1iD,KAEfo7K,EADJv7B,EAAOn9F,EAAO1iD,IAEVhD,KAAKgD,GAAK6/I,EAEV7iJ,KAAK,IAAMgD,GAAK6/I,GAI5B7iJ,KAAKixO,QAAUvrL,EAIf1lD,KAAKkxO,+BAAiC,IAAIp2L,QACrC96C,KAAKmxO,wBAAwBlkN,QAAUjtB,KAAKoxO,cAAcnkN,QACvD,IACA,UAAUA,QAItB,SAASokN,EAAaC,EAAcC,GAChC,IACI1uF,EADAf,EAAM43C,EAAO,GAAI43C,GAErB,IAAKzuF,KAAQ0uF,EACL/D,EAAW+D,EAAa1uF,KACpB80B,EAAS25D,EAAazuF,KAAU80B,EAAS45D,EAAY1uF,KACrDf,EAAIe,GAAQ,GACZ62C,EAAO53C,EAAIe,GAAOyuF,EAAazuF,IAC/B62C,EAAO53C,EAAIe,GAAO0uF,EAAY1uF,KACF,MAArB0uF,EAAY1uF,GACnBf,EAAIe,GAAQ0uF,EAAY1uF,UAEjBf,EAAIe,IAIvB,IAAKA,KAAQyuF,EAEL9D,EAAW8D,EAAczuF,KACxB2qF,EAAW+D,EAAa1uF,IACzB80B,EAAS25D,EAAazuF,MAGtBf,EAAIe,GAAQ62C,EAAO,GAAI53C,EAAIe,KAGnC,OAAOf,EAGX,SAAS0vF,EAAO9rL,GACE,MAAVA,GACA1lD,KAAK0H,IAAIg+C,GAhEjB4nL,EAAMoD,6BAA8B,EACpCpD,EAAMuD,mBAAqB,KAsEvB/uO,EADA1D,OAAO0D,KACA1D,OAAO0D,KAEP,SAAUgF,GACb,IAAI9D,EACA8+I,EAAM,GACV,IAAK9+I,KAAK8D,EACF0mO,EAAW1mO,EAAK9D,IAChB8+I,EAAI11I,KAAKpJ,GAGjB,OAAO8+I,GAIf,IAAI2vF,EAAkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAGd,SAASC,EAAS1tO,EAAK2tO,EAAKnyL,GACxB,IAAI+gG,EAAS7gJ,KAAKkyO,UAAU5tO,IAAQtE,KAAKkyO,UAAL,SACpC,OAAO9zD,EAAWv9B,GAAUA,EAAO7/I,KAAKixO,EAAKnyL,GAAO+gG,EAGxD,SAASsxF,EAAS33D,EAAQ43D,EAAcC,GACpC,IAAIC,EAAY,GAAKv1O,KAAKijB,IAAIw6J,GAC1B+3D,EAAcH,EAAeE,EAAUzwO,OAE3C,OADW24K,GAAU,EAER63D,EAAY,IAAM,GAAM,KACjCt1O,KAAKy1O,IAAI,GAAIz1O,KAAKC,IAAI,EAAGu1O,IAActxO,WAAW0tH,OAAO,GACzD2jH,EAIR,IAAIG,EACI,yMACJC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAe5yI,EAAO6yI,EAAQC,EAASnuM,GAC5C,IAAI1a,EAAO0a,EACa,kBAAbA,IACP1a,EAAO,WACH,OAAOlqB,KAAK4kC,OAGhBq7D,IACA2yI,EAAqB3yI,GAAS/1E,GAE9B4oN,IACAF,EAAqBE,EAAO,IAAM,WAC9B,OAAOX,EAASjoN,EAAKjiB,MAAMjI,KAAM0D,WAAYovO,EAAO,GAAIA,EAAO,MAGnEC,IACAH,EAAqBG,GAAW,WAC5B,OAAO/yO,KAAKgzO,aAAaD,QACrB7oN,EAAKjiB,MAAMjI,KAAM0D,WACjBu8F,KAMhB,SAASgzI,EAAuBxuH,GAC5B,OAAIA,EAAMl2E,MAAM,YACLk2E,EAAM7rC,QAAQ,WAAY,IAE9B6rC,EAAM7rC,QAAQ,MAAO,IAGhC,SAASs6J,EAAmBz4L,GACxB,IACIz3C,EACAnB,EAFAgC,EAAQ42C,EAAOlM,MAAMkkM,GAIzB,IAAKzvO,EAAI,EAAGnB,EAASgC,EAAMhC,OAAQmB,EAAInB,EAAQmB,IACvC4vO,EAAqB/uO,EAAMb,IAC3Ba,EAAMb,GAAK4vO,EAAqB/uO,EAAMb,IAEtCa,EAAMb,GAAKiwO,EAAuBpvO,EAAMb,IAIhD,OAAO,SAAUivO,GACb,IACIjvO,EADA69I,EAAS,GAEb,IAAK79I,EAAI,EAAGA,EAAInB,EAAQmB,IACpB69I,GAAUu9B,EAAWv6K,EAAMb,IACrBa,EAAMb,GAAGhC,KAAKixO,EAAKx3L,GACnB52C,EAAMb,GAEhB,OAAO69I,GAKf,SAASsyF,EAAa/gO,EAAGqoC,GACrB,OAAKroC,EAAE8xL,WAIPzpJ,EAAS24L,EAAa34L,EAAQroC,EAAE4gO,cAChCL,EAAgBl4L,GACZk4L,EAAgBl4L,IAAWy4L,EAAmBz4L,GAE3Ck4L,EAAgBl4L,GAAQroC,IAPpBA,EAAE4gO,aAAaK,cAU9B,SAASD,EAAa34L,EAAQwP,GAC1B,IAAIjnD,EAAI,EAER,SAASswO,EAA4B7uH,GACjC,OAAOx6D,EAAOspL,eAAe9uH,IAAUA,EAI3C,IADAiuH,EAAsB1mF,UAAY,EAC3BhpJ,GAAK,GAAK0vO,EAAsB33L,KAAKN,IACxCA,EAASA,EAAOm+B,QACZ85J,EACAY,GAEJZ,EAAsB1mF,UAAY,EAClChpJ,GAAK,EAGT,OAAOy3C,EAGX,IAAI+4L,EAAwB,CACxBC,IAAK,YACLC,GAAI,SACJpvE,EAAG,aACHqvE,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAGV,SAASN,EAAejvO,GACpB,IAAIm2C,EAASz6C,KAAK8zO,gBAAgBxvO,GAC9ByvO,EAAc/zO,KAAK8zO,gBAAgBxvO,EAAI+lI,eAE3C,OAAI5vF,IAAWs5L,EACJt5L,GAGXz6C,KAAK8zO,gBAAgBxvO,GAAOyvO,EACvBxlM,MAAMkkM,GACNzpO,KAAI,SAAUgrO,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAIlkO,MAAM,GAEdkkO,KAEVvyN,KAAK,IAEHzhB,KAAK8zO,gBAAgBxvO,IAGhC,IAAI2vO,EAAqB,eAEzB,SAASZ,IACL,OAAOrzO,KAAKk0O,aAGhB,IAAIC,EAAiB,KACjBC,EAAgC,UAEpC,SAASrB,EAAQv4D,GACb,OAAOx6K,KAAKq0O,SAASz7J,QAAQ,KAAM4hG,GAGvC,IAAI85D,EAAsB,CACtBC,OAAQ,QACRC,KAAM,SACNhnO,EAAG,gBACHinO,GAAI,aACJriO,EAAG,WACHsiO,GAAI,aACJrvN,EAAG,UACHsvN,GAAI,WACJ7uO,EAAG,QACHsyJ,GAAI,UACJpD,EAAG,SACH4/E,GAAI,WACJr6E,EAAG,UACHs6E,GAAI,YACJrpM,EAAG,SACHspM,GAAI,YAGR,SAASC,EAAav6D,EAAQw6D,EAAezuO,EAAQ0uO,GACjD,IAAIp0F,EAAS7gJ,KAAKk1O,cAAc3uO,GAChC,OAAO63K,EAAWv9B,GACZA,EAAO25B,EAAQw6D,EAAezuO,EAAQ0uO,GACtCp0F,EAAOjoE,QAAQ,MAAO4hG,GAGhC,SAAS26D,GAAWC,EAAMv0F,GACtB,IAAIpmG,EAASz6C,KAAKk1O,cAAcE,EAAO,EAAI,SAAW,QACtD,OAAOh3D,EAAW3jI,GAAUA,EAAOomG,GAAUpmG,EAAOm+B,QAAQ,MAAOioE,GAGvE,IAAIw0F,GAAU,GAEd,SAASC,GAAa1jB,EAAM2jB,GACxB,IAAIjhD,EAAYs9B,EAAKx4K,cACrBi8L,GAAQ/gD,GAAa+gD,GAAQ/gD,EAAY,KAAO+gD,GAAQE,GAAa3jB,EAGzE,SAAS4jB,GAAeC,GACpB,MAAwB,kBAAVA,EACRJ,GAAQI,IAAUJ,GAAQI,EAAMr8L,oBAChCt9C,EAGV,SAAS45O,GAAqBC,GAC1B,IACIC,EACA/yF,EAFAgzF,EAAkB,GAItB,IAAKhzF,KAAQ8yF,EACLnI,EAAWmI,EAAa9yF,KACxB+yF,EAAiBJ,GAAe3yF,MAE5BgzF,EAAgBD,GAAkBD,EAAY9yF,IAK1D,OAAOgzF,EAGX,IAAIC,GAAa,GAEjB,SAASC,GAAgBnkB,EAAM7wL,GAC3B+0M,GAAWlkB,GAAQ7wL,EAGvB,SAASi1M,GAAoBC,GACzB,IACI77E,EADAq7E,EAAQ,GAEZ,IAAKr7E,KAAK67E,EACFzI,EAAWyI,EAAU77E,IACrBq7E,EAAMrpO,KAAK,CAAEwlN,KAAMx3D,EAAGr5H,SAAU+0M,GAAW17E,KAMnD,OAHAq7E,EAAMhpO,MAAK,SAAU9G,EAAGC,GACpB,OAAOD,EAAEo7B,SAAWn7B,EAAEm7B,YAEnB00M,EAGX,SAASS,GAAWC,GAChB,OAAQA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAGlE,SAASC,GAAS57D,GACd,OAAIA,EAAS,EAEFz9K,KAAKqjB,KAAKo6J,IAAW,EAErBz9K,KAAKwjB,MAAMi6J,GAI1B,SAAS67D,GAAMC,GACX,IAAIC,GAAiBD,EACjB56O,EAAQ,EAMZ,OAJsB,IAAlB66O,GAAuBn1I,SAASm1I,KAChC76O,EAAQ06O,GAASG,IAGd76O,EAGX,SAAS86O,GAAW5kB,EAAM6kB,GACtB,OAAO,SAAU/6O,GACb,OAAa,MAATA,GACAg7O,GAAM12O,KAAM4xN,EAAMl2N,GAClB4xO,EAAMiD,aAAavwO,KAAMy2O,GAClBz2O,MAEA+D,GAAI/D,KAAM4xN,IAK7B,SAAS7tN,GAAIkuO,EAAKrgB,GACd,OAAOqgB,EAAI/tC,UACL+tC,EAAI7C,GAAG,OAAS6C,EAAI9B,OAAS,MAAQ,IAAMve,KAC3Cv1N,IAGV,SAASq6O,GAAMzE,EAAKrgB,EAAMl2N,GAClBu2O,EAAI/tC,YAAc9nJ,MAAM1gD,KAEX,aAATk2N,GACAskB,GAAWjE,EAAIkE,SACC,IAAhBlE,EAAI0E,SACW,KAAf1E,EAAIlmH,QAEJrwH,EAAQ26O,GAAM36O,GACdu2O,EAAI7C,GAAG,OAAS6C,EAAI9B,OAAS,MAAQ,IAAMve,GACvCl2N,EACAu2O,EAAI0E,QACJC,GAAYl7O,EAAOu2O,EAAI0E,WAG3B1E,EAAI7C,GAAG,OAAS6C,EAAI9B,OAAS,MAAQ,IAAMve,GAAMl2N,IAO7D,SAASm7O,GAAUpB,GAEf,OAAIr3D,EAAWp+K,KADfy1O,EAAQD,GAAeC,KAEZz1O,KAAKy1O,KAETz1O,KAGX,SAAS82O,GAAUrB,EAAO/5O,GACtB,GAAqB,kBAAV+5O,EAAoB,CAE3B,IACIzyO,EADA+zO,EAAcf,GADlBP,EAAQC,GAAqBD,IAGzBuB,EAAiBD,EAAYl1O,OACjC,IAAKmB,EAAI,EAAGA,EAAIg0O,EAAgBh0O,IAC5BhD,KAAK+2O,EAAY/zO,GAAG4uN,MAAM6jB,EAAMsB,EAAY/zO,GAAG4uN,YAInD,GAAIxzC,EAAWp+K,KADfy1O,EAAQD,GAAeC,KAEnB,OAAOz1O,KAAKy1O,GAAO/5O,GAG3B,OAAOsE,KAGX,IAoBIi3O,GApBAC,GAAS,KACTC,GAAS,OACTC,GAAS,QACTC,GAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BACnBC,GAAiB,uBAGjBC,GACI,wJAKR,SAASC,GAAcl4I,EAAOm4I,EAAOC,GACjCpB,GAAQh3I,GAASm+E,EAAWg6D,GACtBA,EACA,SAAUt6D,EAAUk1D,GAChB,OAAOl1D,GAAYu6D,EAAcA,EAAcD,GAI7D,SAASE,GAAsBr4I,EAAOv6C,GAClC,OAAK8nL,EAAWyJ,GAASh3I,GAIlBg3I,GAAQh3I,GAAOv6C,EAAO4pL,QAAS5pL,EAAO2qL,SAHlC,IAAIv1L,OAAOy9L,GAAet4I,IAOzC,SAASs4I,GAAe/qO,GACpB,OAAOs1I,GACHt1I,EACKorE,QAAQ,KAAM,IACdA,QACG,uCACA,SAAUqvI,EAASuwB,EAAIC,EAAIC,EAAIC,GAC3B,OAAOH,GAAMC,GAAMC,GAAMC,MAM7C,SAAS71F,GAAYt1I,GACjB,OAAOA,EAAEorE,QAAQ,yBAA0B,QAjC/Cq+J,GAAU,GAoCV,IAAI2B,GAAS,GAEb,SAASC,GAAc54I,EAAOr7D,GAC1B,IAAI5hC,EAEA81O,EADA5uN,EAAO0a,EAWX,IATqB,kBAAVq7D,IACPA,EAAQ,CAACA,IAETigB,EAASt7E,KACT1a,EAAO,SAAUu6F,EAAO5gH,GACpBA,EAAM+gC,GAAYyxM,GAAM5xH,KAGhCq0H,EAAW74I,EAAMp+F,OACZmB,EAAI,EAAGA,EAAI81O,EAAU91O,IACtB41O,GAAO34I,EAAMj9F,IAAMknB,EAI3B,SAAS6uN,GAAkB94I,EAAOr7D,GAC9Bi0M,GAAc54I,GAAO,SAAUwkB,EAAO5gH,EAAO6hD,EAAQu6C,GACjDv6C,EAAOszL,GAAKtzL,EAAOszL,IAAM,GACzBp0M,EAAS6/E,EAAO/+D,EAAOszL,GAAItzL,EAAQu6C,MAI3C,SAASg5I,GAAwBh5I,EAAOwkB,EAAO/+D,GAC9B,MAAT++D,GAAiB+oH,EAAWoL,GAAQ34I,IACpC24I,GAAO34I,GAAOwkB,EAAO/+D,EAAOwzL,GAAIxzL,EAAQu6C,GAIhD,IAcIz/E,GAdA24N,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAEd,SAASC,GAAIxzO,EAAGyR,GACZ,OAASzR,EAAIyR,EAAKA,GAAKA,EAoB3B,SAAS++N,GAAYT,EAAMQ,GACvB,GAAIv6L,MAAM+5L,IAAS/5L,MAAMu6L,GACrB,OAAOt6O,IAEX,IAAIw9O,EAAWD,GAAIjD,EAAO,IAE1B,OADAR,IAASQ,EAAQkD,GAAY,GACT,IAAbA,EACD3D,GAAWC,GACP,GACA,GACJ,GAAO0D,EAAW,EAAK,EAxB7Br5N,GADA/e,MAAMtD,UAAUqiB,QACN/e,MAAMtD,UAAUqiB,QAEhB,SAAUra,GAEhB,IAAInD,EACJ,IAAKA,EAAI,EAAGA,EAAIhD,KAAK6B,SAAUmB,EAC3B,GAAIhD,KAAKgD,KAAOmD,EACZ,OAAOnD,EAGf,OAAQ,GAmBhB6vO,EAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAO7yO,KAAK22O,QAAU,KAG1B9D,EAAe,MAAO,EAAG,GAAG,SAAUp4L,GAClC,OAAOz6C,KAAKgzO,aAAa8G,YAAY95O,KAAMy6C,MAG/Co4L,EAAe,OAAQ,EAAG,GAAG,SAAUp4L,GACnC,OAAOz6C,KAAKgzO,aAAa+G,OAAO/5O,KAAMy6C,MAK1C66L,GAAa,QAAS,KAItBS,GAAgB,QAAS,GAIzBoC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAO,SAAUr6D,EAAU7zH,GACrC,OAAOA,EAAO+vL,iBAAiBl8D,MAEnCq6D,GAAc,QAAQ,SAAUr6D,EAAU7zH,GACtC,OAAOA,EAAOgwL,YAAYn8D,MAG9B+6D,GAAc,CAAC,IAAK,OAAO,SAAUp0H,EAAO5gH,GACxCA,EAAMu1O,IAAS/C,GAAM5xH,GAAS,KAGlCo0H,GAAc,CAAC,MAAO,SAAS,SAAUp0H,EAAO5gH,EAAO6hD,EAAQu6C,GAC3D,IAAI02I,EAAQjxL,EAAO2qL,QAAQ6J,YAAYz1H,EAAOxkB,EAAOv6C,EAAO4pL,SAE/C,MAATqH,EACA9yO,EAAMu1O,IAASzC,EAEf7H,EAAgBppL,GAAQ2oL,aAAe5pH,KAM/C,IAAI01H,GACI,wFAAwFp7L,MACpF,KAERq7L,GACI,kDAAkDr7L,MAAM,KAC5Ds7L,GAAmB,gCACnBC,GAA0BpC,GAC1BqC,GAAqBrC,GAEzB,SAASsC,GAAapoO,EAAGqoC,GACrB,OAAKroC,EAKE1Q,EAAQ1B,KAAKy6O,SACdz6O,KAAKy6O,QAAQroO,EAAEukO,SACf32O,KAAKy6O,SACAz6O,KAAKy6O,QAAQC,UAAYL,IAAkBt/L,KAAKN,GAC3C,SACA,cACRroC,EAAEukO,SAVCj1O,EAAQ1B,KAAKy6O,SACdz6O,KAAKy6O,QACLz6O,KAAKy6O,QAAL,WAWd,SAASE,GAAkBvoO,EAAGqoC,GAC1B,OAAKroC,EAKE1Q,EAAQ1B,KAAK46O,cACd56O,KAAK46O,aAAaxoO,EAAEukO,SACpB32O,KAAK46O,aACDP,GAAiBt/L,KAAKN,GAAU,SAAW,cAC7CroC,EAAEukO,SARCj1O,EAAQ1B,KAAK46O,cACd56O,KAAK46O,aACL56O,KAAK46O,aAAL,WASd,SAASC,GAAkBC,EAAWrgM,EAAQktK,GAC1C,IAAI3kN,EACAkB,EACA+tO,EACA8I,EAAMD,EAAUE,oBACpB,IAAKh7O,KAAKi7O,aAKN,IAHAj7O,KAAKi7O,aAAe,GACpBj7O,KAAKk7O,iBAAmB,GACxBl7O,KAAKm7O,kBAAoB,GACpBn4O,EAAI,EAAGA,EAAI,KAAMA,EAClBivO,EAAMrE,EAAU,CAAC,IAAM5qO,IACvBhD,KAAKm7O,kBAAkBn4O,GAAKhD,KAAK85O,YAC7B7H,EACA,IACF+I,oBACFh7O,KAAKk7O,iBAAiBl4O,GAAKhD,KAAK+5O,OAAO9H,EAAK,IAAI+I,oBAIxD,OAAIrzB,EACe,QAAXltK,GAEe,KADfv2C,EAAKsc,GAAQxf,KAAKhB,KAAKm7O,kBAAmBJ,IACvB72O,EAAK,MAGT,KADfA,EAAKsc,GAAQxf,KAAKhB,KAAKk7O,iBAAkBH,IACtB72O,EAAK,KAGb,QAAXu2C,GAEY,KADZv2C,EAAKsc,GAAQxf,KAAKhB,KAAKm7O,kBAAmBJ,MAK3B,KADf72O,EAAKsc,GAAQxf,KAAKhB,KAAKk7O,iBAAkBH,IAF9B72O,EAGa,MAGZ,KADZA,EAAKsc,GAAQxf,KAAKhB,KAAKk7O,iBAAkBH,MAK1B,KADf72O,EAAKsc,GAAQxf,KAAKhB,KAAKm7O,kBAAmBJ,IAF/B72O,EAGa,KAKpC,SAASk3O,GAAkBN,EAAWrgM,EAAQktK,GAC1C,IAAI3kN,EAAGivO,EAAKmG,EAEZ,GAAIp4O,KAAKq7O,kBACL,OAAOR,GAAkB75O,KAAKhB,KAAM86O,EAAWrgM,EAAQktK,GAY3D,IATK3nN,KAAKi7O,eACNj7O,KAAKi7O,aAAe,GACpBj7O,KAAKk7O,iBAAmB,GACxBl7O,KAAKm7O,kBAAoB,IAMxBn4O,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAivO,EAAMrE,EAAU,CAAC,IAAM5qO,IACnB2kN,IAAW3nN,KAAKk7O,iBAAiBl4O,KACjChD,KAAKk7O,iBAAiBl4O,GAAK,IAAI83C,OAC3B,IAAM96C,KAAK+5O,OAAO9H,EAAK,IAAIr5J,QAAQ,IAAK,IAAM,IAC9C,KAEJ54E,KAAKm7O,kBAAkBn4O,GAAK,IAAI83C,OAC5B,IAAM96C,KAAK85O,YAAY7H,EAAK,IAAIr5J,QAAQ,IAAK,IAAM,IACnD,MAGH+uI,GAAW3nN,KAAKi7O,aAAaj4O,KAC9Bo1O,EACI,IAAMp4O,KAAK+5O,OAAO9H,EAAK,IAAM,KAAOjyO,KAAK85O,YAAY7H,EAAK,IAC9DjyO,KAAKi7O,aAAaj4O,GAAK,IAAI83C,OAAOs9L,EAAMx/J,QAAQ,IAAK,IAAK,MAI1D+uI,GACW,SAAXltK,GACAz6C,KAAKk7O,iBAAiBl4O,GAAG+3C,KAAK+/L,GAE9B,OAAO93O,EACJ,GACH2kN,GACW,QAAXltK,GACAz6C,KAAKm7O,kBAAkBn4O,GAAG+3C,KAAK+/L,GAE/B,OAAO93O,EACJ,IAAK2kN,GAAU3nN,KAAKi7O,aAAaj4O,GAAG+3C,KAAK+/L,GAC5C,OAAO93O,GAOnB,SAASs4O,GAASrJ,EAAKv2O,GACnB,IAAI6/O,EAEJ,IAAKtJ,EAAI/tC,UAEL,OAAO+tC,EAGX,GAAqB,kBAAVv2O,EACP,GAAI,QAAQq/C,KAAKr/C,GACbA,EAAQ26O,GAAM36O,QAId,IAAKwkH,EAFLxkH,EAAQu2O,EAAIe,aAAakH,YAAYx+O,IAGjC,OAAOu2O,EAOnB,OAFAsJ,EAAax+O,KAAKE,IAAIg1O,EAAIlmH,OAAQ6qH,GAAY3E,EAAIkE,OAAQz6O,IAC1Du2O,EAAI7C,GAAG,OAAS6C,EAAI9B,OAAS,MAAQ,IAAM,SAASz0O,EAAO6/O,GACpDtJ,EAGX,SAASuJ,GAAY9/O,GACjB,OAAa,MAATA,GACA4/O,GAASt7O,KAAMtE,GACf4xO,EAAMiD,aAAavwO,MAAM,GAClBA,MAEA+D,GAAI/D,KAAM,SAIzB,SAASy7O,KACL,OAAO7E,GAAY52O,KAAKm2O,OAAQn2O,KAAK22O,SAGzC,SAASqD,GAAiBl8D,GACtB,OAAI99K,KAAKq7O,mBACA7N,EAAWxtO,KAAM,iBAClB07O,GAAmB16O,KAAKhB,MAExB89K,EACO99K,KAAK27O,wBAEL37O,KAAK47O,oBAGXpO,EAAWxtO,KAAM,uBAClBA,KAAK47O,kBAAoBtB,IAEtBt6O,KAAK27O,yBAA2B79D,EACjC99K,KAAK27O,wBACL37O,KAAK47O,mBAInB,SAAS3B,GAAYn8D,GACjB,OAAI99K,KAAKq7O,mBACA7N,EAAWxtO,KAAM,iBAClB07O,GAAmB16O,KAAKhB,MAExB89K,EACO99K,KAAK67O,mBAEL77O,KAAK87O,eAGXtO,EAAWxtO,KAAM,kBAClBA,KAAK87O,aAAevB,IAEjBv6O,KAAK67O,oBAAsB/9D,EAC5B99K,KAAK67O,mBACL77O,KAAK87O,cAInB,SAASJ,KACL,SAASK,EAAUp2O,EAAGC,GAClB,OAAOA,EAAE/D,OAAS8D,EAAE9D,OAGxB,IAGImB,EACAivO,EAJA+J,EAAc,GACdC,EAAa,GACbC,EAAc,GAGlB,IAAKl5O,EAAI,EAAGA,EAAI,GAAIA,IAEhBivO,EAAMrE,EAAU,CAAC,IAAM5qO,IACvBg5O,EAAY5vO,KAAKpM,KAAK85O,YAAY7H,EAAK,KACvCgK,EAAW7vO,KAAKpM,KAAK+5O,OAAO9H,EAAK,KACjCiK,EAAY9vO,KAAKpM,KAAK+5O,OAAO9H,EAAK,KAClCiK,EAAY9vO,KAAKpM,KAAK85O,YAAY7H,EAAK,KAO3C,IAHA+J,EAAYvvO,KAAKsvO,GACjBE,EAAWxvO,KAAKsvO,GAChBG,EAAYzvO,KAAKsvO,GACZ/4O,EAAI,EAAGA,EAAI,GAAIA,IAChBg5O,EAAYh5O,GAAK8/I,GAAYk5F,EAAYh5O,IACzCi5O,EAAWj5O,GAAK8/I,GAAYm5F,EAAWj5O,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBk5O,EAAYl5O,GAAK8/I,GAAYo5F,EAAYl5O,IAG7ChD,KAAK87O,aAAe,IAAIhhM,OAAO,KAAOohM,EAAYz6N,KAAK,KAAO,IAAK,KACnEzhB,KAAK47O,kBAAoB57O,KAAK87O,aAC9B97O,KAAK67O,mBAAqB,IAAI/gM,OAC1B,KAAOmhM,EAAWx6N,KAAK,KAAO,IAC9B,KAEJzhB,KAAK27O,wBAA0B,IAAI7gM,OAC/B,KAAOkhM,EAAYv6N,KAAK,KAAO,IAC/B,KAiDR,SAAS06N,GAAWhG,GAChB,OAAOD,GAAWC,GAAQ,IAAM,IA5CpCtD,EAAe,IAAK,EAAG,GAAG,WACtB,IAAIrnM,EAAIxrC,KAAKm2O,OACb,OAAO3qM,GAAK,KAAO2mM,EAAS3mM,EAAG,GAAK,IAAMA,KAG9CqnM,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO7yO,KAAKm2O,OAAS,OAGzBtD,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CyC,GAAa,OAAQ,KAIrBS,GAAgB,OAAQ,GAIxBoC,GAAc,IAAKL,IACnBK,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAQR,GAAWN,IACjCc,GAAc,QAASP,GAAWN,IAClCa,GAAc,SAAUP,GAAWN,IAEnCuB,GAAc,CAAC,QAAS,UAAWM,IACnCN,GAAc,QAAQ,SAAUp0H,EAAO5gH,GACnCA,EAAMs1O,IACe,IAAjB10H,EAAM5iH,OAAeyrO,EAAM8O,kBAAkB33H,GAAS4xH,GAAM5xH,MAEpEo0H,GAAc,MAAM,SAAUp0H,EAAO5gH,GACjCA,EAAMs1O,IAAQ7L,EAAM8O,kBAAkB33H,MAE1Co0H,GAAc,KAAK,SAAUp0H,EAAO5gH,GAChCA,EAAMs1O,IAAQv9L,SAAS6oE,EAAO,OAWlC6oH,EAAM8O,kBAAoB,SAAU33H,GAChC,OAAO4xH,GAAM5xH,IAAU4xH,GAAM5xH,GAAS,GAAK,KAAO,MAKtD,IAAI43H,GAAa7F,GAAW,YAAY,GAExC,SAAS8F,KACL,OAAOpG,GAAWl2O,KAAKm2O,QAG3B,SAASoG,GAAW/wM,EAAGp5B,EAAGtM,EAAGuf,EAAGk1I,EAAG/sJ,EAAGgvO,GAGlC,IAAIzwH,EAYJ,OAVIvgF,EAAI,KAAOA,GAAK,GAEhBugF,EAAO,IAAIh+F,KAAKyd,EAAI,IAAKp5B,EAAGtM,EAAGuf,EAAGk1I,EAAG/sJ,EAAGgvO,GACpCp7I,SAAS2qB,EAAK0wH,gBACd1wH,EAAK2wH,YAAYlxM,IAGrBugF,EAAO,IAAIh+F,KAAKyd,EAAGp5B,EAAGtM,EAAGuf,EAAGk1I,EAAG/sJ,EAAGgvO,GAG/BzwH,EAGX,SAAS4wH,GAAcnxM,GACnB,IAAIugF,EAAM/gG,EAcV,OAZIwgB,EAAI,KAAOA,GAAK,IAChBxgB,EAAOvpB,MAAMtD,UAAU2R,MAAM9O,KAAK0C,YAE7B,GAAK8nC,EAAI,IACdugF,EAAO,IAAIh+F,KAAKA,KAAK6uN,IAAI30O,MAAM,KAAM+iB,IACjCo2E,SAAS2qB,EAAK8wH,mBACd9wH,EAAK+wH,eAAetxM,IAGxBugF,EAAO,IAAIh+F,KAAKA,KAAK6uN,IAAI30O,MAAM,KAAMvE,YAGlCqoH,EAIX,SAASgxH,GAAgB5G,EAAM6G,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,QAFa,EAAIN,GAAcxG,EAAM,EAAG+G,GAAKC,YAAcH,GAAO,EAElDE,EAAM,EAI1B,SAASE,GAAmBjH,EAAMkH,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EACAC,EAFAC,EAAY,EAAI,GAAKJ,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgB5G,EAAM6G,EAAKC,GAgB5C,OAXIQ,GAAa,EAEbD,EAAerB,GADfoB,EAAUpH,EAAO,GACoBsH,EAC9BA,EAAYtB,GAAWhG,IAC9BoH,EAAUpH,EAAO,EACjBqH,EAAeC,EAAYtB,GAAWhG,KAEtCoH,EAAUpH,EACVqH,EAAeC,GAGZ,CACHtH,KAAMoH,EACNE,UAAWD,GAInB,SAASE,GAAWzL,EAAK+K,EAAKC,GAC1B,IAEIU,EACAJ,EAHAK,EAAab,GAAgB9K,EAAIkE,OAAQ6G,EAAKC,GAC9CI,EAAOtgP,KAAKwjB,OAAO0xN,EAAIwL,YAAcG,EAAa,GAAK,GAAK,EAehE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUtL,EAAIkE,OAAS,EACe6G,EAAKC,GACpCI,EAAOQ,GAAY5L,EAAIkE,OAAQ6G,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAY5L,EAAIkE,OAAQ6G,EAAKC,GAC9CM,EAAUtL,EAAIkE,OAAS,IAEvBoH,EAAUtL,EAAIkE,OACdwH,EAAUN,GAGP,CACHA,KAAMM,EACNxH,KAAMoH,GAId,SAASM,GAAY1H,EAAM6G,EAAKC,GAC5B,IAAIW,EAAab,GAAgB5G,EAAM6G,EAAKC,GACxCa,EAAiBf,GAAgB5G,EAAO,EAAG6G,EAAKC,GACpD,OAAQd,GAAWhG,GAAQyH,EAAaE,GAAkB,EAoC9D,SAASC,GAAW9L,GAChB,OAAOyL,GAAWzL,EAAKjyO,KAAKg+O,MAAMhB,IAAKh9O,KAAKg+O,MAAMf,KAAKI,KAhC3DxK,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCyC,GAAa,OAAQ,KACrBA,GAAa,UAAW,KAIxBS,GAAgB,OAAQ,GACxBA,GAAgB,UAAW,GAI3BoC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAE/B4B,GACI,CAAC,IAAK,KAAM,IAAK,OACjB,SAAUt0H,EAAO44H,EAAM33L,EAAQu6C,GAC3Bo9I,EAAKp9I,EAAM0uB,OAAO,EAAG,IAAM0nH,GAAM5xH,MAYzC,IAAIw5H,GAAoB,CACpBjB,IAAK,EACLC,IAAK,GAGT,SAASiB,KACL,OAAOl+O,KAAKg+O,MAAMhB,IAGtB,SAASmB,KACL,OAAOn+O,KAAKg+O,MAAMf,IAKtB,SAASmB,GAAW35H,GAChB,IAAI44H,EAAOr9O,KAAKgzO,aAAaqK,KAAKr9O,MAClC,OAAgB,MAATykH,EAAgB44H,EAAOr9O,KAAK2e,IAAqB,GAAhB8lG,EAAQ44H,GAAW,KAG/D,SAASgB,GAAc55H,GACnB,IAAI44H,EAAOK,GAAW19O,KAAM,EAAG,GAAGq9O,KAClC,OAAgB,MAAT54H,EAAgB44H,EAAOr9O,KAAK2e,IAAqB,GAAhB8lG,EAAQ44H,GAAW,KAgE/D,SAASiB,GAAa75H,EAAOx6D,GACzB,MAAqB,kBAAVw6D,EACAA,EAGNroE,MAAMqoE,GAKU,kBADrBA,EAAQx6D,EAAOs0L,cAAc95H,IAElBA,EAGJ,KARI7oE,SAAS6oE,EAAO,IAW/B,SAAS+5H,GAAgB/5H,EAAOx6D,GAC5B,MAAqB,kBAAVw6D,EACAx6D,EAAOs0L,cAAc95H,GAAS,GAAK,EAEvCroE,MAAMqoE,GAAS,KAAOA,EAIjC,SAASg6H,GAAcC,EAAIt4O,GACvB,OAAOs4O,EAAG5uO,MAAM1J,EAAG,GAAGkF,OAAOozO,EAAG5uO,MAAM,EAAG1J,IArF7CysO,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,GAAG,SAAUp4L,GACjC,OAAOz6C,KAAKgzO,aAAa2L,YAAY3+O,KAAMy6C,MAG/Co4L,EAAe,MAAO,EAAG,GAAG,SAAUp4L,GAClC,OAAOz6C,KAAKgzO,aAAa4L,cAAc5+O,KAAMy6C,MAGjDo4L,EAAe,OAAQ,EAAG,GAAG,SAAUp4L,GACnC,OAAOz6C,KAAKgzO,aAAa6L,SAAS7+O,KAAMy6C,MAG5Co4L,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1ByC,GAAa,MAAO,KACpBA,GAAa,UAAW,KACxBA,GAAa,aAAc,KAG3BS,GAAgB,MAAO,IACvBA,GAAgB,UAAW,IAC3BA,GAAgB,aAAc,IAI9BoC,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,MAAM,SAAUr6D,EAAU7zH,GACpC,OAAOA,EAAO60L,iBAAiBhhE,MAEnCq6D,GAAc,OAAO,SAAUr6D,EAAU7zH,GACrC,OAAOA,EAAO80L,mBAAmBjhE,MAErCq6D,GAAc,QAAQ,SAAUr6D,EAAU7zH,GACtC,OAAOA,EAAO+0L,cAAclhE,MAGhCi7D,GAAkB,CAAC,KAAM,MAAO,SAAS,SAAUt0H,EAAO44H,EAAM33L,EAAQu6C,GACpE,IAAIq9I,EAAU53L,EAAO2qL,QAAQkO,cAAc95H,EAAOxkB,EAAOv6C,EAAO4pL,SAEjD,MAAXgO,EACAD,EAAKv3O,EAAIw3O,EAETxO,EAAgBppL,GAAQ2pL,eAAiB5qH,KAIjDs0H,GAAkB,CAAC,IAAK,IAAK,MAAM,SAAUt0H,EAAO44H,EAAM33L,EAAQu6C,GAC9Do9I,EAAKp9I,GAASo2I,GAAM5xH,MAkCxB,IAAIw6H,GACI,2DAA2DlgM,MAAM,KACrEmgM,GAA6B,8BAA8BngM,MAAM,KACjEogM,GAA2B,uBAAuBpgM,MAAM,KACxDqgM,GAAuBlH,GACvBmH,GAA4BnH,GAC5BoH,GAA0BpH,GAE9B,SAASqH,GAAentO,EAAGqoC,GACvB,IAAIokM,EAAWn9O,EAAQ1B,KAAKw/O,WACtBx/O,KAAKw/O,UACLx/O,KAAKw/O,UACDptO,IAAW,IAANA,GAAcpS,KAAKw/O,UAAU9E,SAAS3/L,KAAKN,GAC1C,SACA,cAEhB,OAAa,IAANroC,EACDqsO,GAAcI,EAAU7+O,KAAKg+O,MAAMhB,KACnC5qO,EACAysO,EAASzsO,EAAEqtO,OACXZ,EAGV,SAASa,GAAoBttO,GACzB,OAAa,IAANA,EACDqsO,GAAcz+O,KAAK2/O,eAAgB3/O,KAAKg+O,MAAMhB,KAC9C5qO,EACApS,KAAK2/O,eAAevtO,EAAEqtO,OACtBz/O,KAAK2/O,eAGf,SAASC,GAAkBxtO,GACvB,OAAa,IAANA,EACDqsO,GAAcz+O,KAAK6/O,aAAc7/O,KAAKg+O,MAAMhB,KAC5C5qO,EACApS,KAAK6/O,aAAaztO,EAAEqtO,OACpBz/O,KAAK6/O,aAGf,SAASC,GAAoBC,EAAatlM,EAAQktK,GAC9C,IAAI3kN,EACAkB,EACA+tO,EACA8I,EAAMgF,EAAY/E,oBACtB,IAAKh7O,KAAKggP,eAKN,IAJAhgP,KAAKggP,eAAiB,GACtBhgP,KAAKigP,oBAAsB,GAC3BjgP,KAAKkgP,kBAAoB,GAEpBl9O,EAAI,EAAGA,EAAI,IAAKA,EACjBivO,EAAMrE,EAAU,CAAC,IAAM,IAAI6R,IAAIz8O,GAC/BhD,KAAKkgP,kBAAkBl9O,GAAKhD,KAAK2+O,YAC7B1M,EACA,IACF+I,oBACFh7O,KAAKigP,oBAAoBj9O,GAAKhD,KAAK4+O,cAC/B3M,EACA,IACF+I,oBACFh7O,KAAKggP,eAAeh9O,GAAKhD,KAAK6+O,SAAS5M,EAAK,IAAI+I,oBAIxD,OAAIrzB,EACe,SAAXltK,GAEe,KADfv2C,EAAKsc,GAAQxf,KAAKhB,KAAKggP,eAAgBjF,IACpB72O,EAAK,KACN,QAAXu2C,GAEQ,KADfv2C,EAAKsc,GAAQxf,KAAKhB,KAAKigP,oBAAqBlF,IACzB72O,EAAK,MAGT,KADfA,EAAKsc,GAAQxf,KAAKhB,KAAKkgP,kBAAmBnF,IACvB72O,EAAK,KAGb,SAAXu2C,GAEY,KADZv2C,EAAKsc,GAAQxf,KAAKhB,KAAKggP,eAAgBjF,MAK3B,KADZ72O,EAAKsc,GAAQxf,KAAKhB,KAAKigP,oBAAqBlF,MAK7B,KADf72O,EAAKsc,GAAQxf,KAAKhB,KAAKkgP,kBAAmBnF,IAN/B72O,EAOa,KACN,QAAXu2C,GAEK,KADZv2C,EAAKsc,GAAQxf,KAAKhB,KAAKigP,oBAAqBlF,MAKhC,KADZ72O,EAAKsc,GAAQxf,KAAKhB,KAAKggP,eAAgBjF,MAKxB,KADf72O,EAAKsc,GAAQxf,KAAKhB,KAAKkgP,kBAAmBnF,IAN/B72O,EAOa,MAGZ,KADZA,EAAKsc,GAAQxf,KAAKhB,KAAKkgP,kBAAmBnF,MAK9B,KADZ72O,EAAKsc,GAAQxf,KAAKhB,KAAKggP,eAAgBjF,MAKxB,KADf72O,EAAKsc,GAAQxf,KAAKhB,KAAKigP,oBAAqBlF,IANjC72O,EAOa,KAKpC,SAASi8O,GAAoBJ,EAAatlM,EAAQktK,GAC9C,IAAI3kN,EAAGivO,EAAKmG,EAEZ,GAAIp4O,KAAKogP,oBACL,OAAON,GAAoB9+O,KAAKhB,KAAM+/O,EAAatlM,EAAQktK,GAU/D,IAPK3nN,KAAKggP,iBACNhgP,KAAKggP,eAAiB,GACtBhgP,KAAKkgP,kBAAoB,GACzBlgP,KAAKigP,oBAAsB,GAC3BjgP,KAAKqgP,mBAAqB,IAGzBr9O,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAivO,EAAMrE,EAAU,CAAC,IAAM,IAAI6R,IAAIz8O,GAC3B2kN,IAAW3nN,KAAKqgP,mBAAmBr9O,KACnChD,KAAKqgP,mBAAmBr9O,GAAK,IAAI83C,OAC7B,IAAM96C,KAAK6+O,SAAS5M,EAAK,IAAIr5J,QAAQ,IAAK,QAAU,IACpD,KAEJ54E,KAAKigP,oBAAoBj9O,GAAK,IAAI83C,OAC9B,IAAM96C,KAAK4+O,cAAc3M,EAAK,IAAIr5J,QAAQ,IAAK,QAAU,IACzD,KAEJ54E,KAAKkgP,kBAAkBl9O,GAAK,IAAI83C,OAC5B,IAAM96C,KAAK2+O,YAAY1M,EAAK,IAAIr5J,QAAQ,IAAK,QAAU,IACvD,MAGH54E,KAAKggP,eAAeh9O,KACrBo1O,EACI,IACAp4O,KAAK6+O,SAAS5M,EAAK,IACnB,KACAjyO,KAAK4+O,cAAc3M,EAAK,IACxB,KACAjyO,KAAK2+O,YAAY1M,EAAK,IAC1BjyO,KAAKggP,eAAeh9O,GAAK,IAAI83C,OAAOs9L,EAAMx/J,QAAQ,IAAK,IAAK,MAI5D+uI,GACW,SAAXltK,GACAz6C,KAAKqgP,mBAAmBr9O,GAAG+3C,KAAKglM,GAEhC,OAAO/8O,EACJ,GACH2kN,GACW,QAAXltK,GACAz6C,KAAKigP,oBAAoBj9O,GAAG+3C,KAAKglM,GAEjC,OAAO/8O,EACJ,GACH2kN,GACW,OAAXltK,GACAz6C,KAAKkgP,kBAAkBl9O,GAAG+3C,KAAKglM,GAE/B,OAAO/8O,EACJ,IAAK2kN,GAAU3nN,KAAKggP,eAAeh9O,GAAG+3C,KAAKglM,GAC9C,OAAO/8O,GAOnB,SAASs9O,GAAgB77H,GACrB,IAAKzkH,KAAKkkM,UACN,OAAgB,MAATz/E,EAAgBzkH,KAAO3D,IAElC,IAAIojP,EAAMz/O,KAAKmwO,OAASnwO,KAAKovO,GAAG+N,YAAcn9O,KAAKovO,GAAGmR,SACtD,OAAa,MAAT97H,GACAA,EAAQ65H,GAAa75H,EAAOzkH,KAAKgzO,cAC1BhzO,KAAK2e,IAAI8lG,EAAQg7H,EAAK,MAEtBA,EAIf,SAASe,GAAsB/7H,GAC3B,IAAKzkH,KAAKkkM,UACN,OAAgB,MAATz/E,EAAgBzkH,KAAO3D,IAElC,IAAIihP,GAAWt9O,KAAKy/O,MAAQ,EAAIz/O,KAAKgzO,aAAagL,MAAMhB,KAAO,EAC/D,OAAgB,MAATv4H,EAAgB64H,EAAUt9O,KAAK2e,IAAI8lG,EAAQ64H,EAAS,KAG/D,SAASmD,GAAmBh8H,GACxB,IAAKzkH,KAAKkkM,UACN,OAAgB,MAATz/E,EAAgBzkH,KAAO3D,IAOlC,GAAa,MAATooH,EAAe,CACf,IAAI64H,EAAUkB,GAAgB/5H,EAAOzkH,KAAKgzO,cAC1C,OAAOhzO,KAAKy/O,IAAIz/O,KAAKy/O,MAAQ,EAAInC,EAAUA,EAAU,GAErD,OAAOt9O,KAAKy/O,OAAS,EAI7B,SAAST,GAAclhE,GACnB,OAAI99K,KAAKogP,qBACA5S,EAAWxtO,KAAM,mBAClB0gP,GAAqB1/O,KAAKhB,MAE1B89K,EACO99K,KAAK2gP,qBAEL3gP,KAAK4gP,iBAGXpT,EAAWxtO,KAAM,oBAClBA,KAAK4gP,eAAiBxB,IAEnBp/O,KAAK2gP,sBAAwB7iE,EAC9B99K,KAAK2gP,qBACL3gP,KAAK4gP,gBAInB,SAAS7B,GAAmBjhE,GACxB,OAAI99K,KAAKogP,qBACA5S,EAAWxtO,KAAM,mBAClB0gP,GAAqB1/O,KAAKhB,MAE1B89K,EACO99K,KAAK6gP,0BAEL7gP,KAAK8gP,sBAGXtT,EAAWxtO,KAAM,yBAClBA,KAAK8gP,oBAAsBzB,IAExBr/O,KAAK6gP,2BAA6B/iE,EACnC99K,KAAK6gP,0BACL7gP,KAAK8gP,qBAInB,SAAShC,GAAiBhhE,GACtB,OAAI99K,KAAKogP,qBACA5S,EAAWxtO,KAAM,mBAClB0gP,GAAqB1/O,KAAKhB,MAE1B89K,EACO99K,KAAK+gP,wBAEL/gP,KAAKghP,oBAGXxT,EAAWxtO,KAAM,uBAClBA,KAAKghP,kBAAoB1B,IAEtBt/O,KAAK+gP,yBAA2BjjE,EACjC99K,KAAK+gP,wBACL/gP,KAAKghP,mBAInB,SAASN,KACL,SAAS3E,EAAUp2O,EAAGC,GAClB,OAAOA,EAAE/D,OAAS8D,EAAE9D,OAGxB,IAIImB,EACAivO,EACAgP,EACAC,EACAC,EARAC,EAAY,GACZpF,EAAc,GACdC,EAAa,GACbC,EAAc,GAMlB,IAAKl5O,EAAI,EAAGA,EAAI,EAAGA,IAEfivO,EAAMrE,EAAU,CAAC,IAAM,IAAI6R,IAAIz8O,GAC/Bi+O,EAAOn+F,GAAY9iJ,KAAK2+O,YAAY1M,EAAK,KACzCiP,EAASp+F,GAAY9iJ,KAAK4+O,cAAc3M,EAAK,KAC7CkP,EAAQr+F,GAAY9iJ,KAAK6+O,SAAS5M,EAAK,KACvCmP,EAAUh1O,KAAK60O,GACfjF,EAAY5vO,KAAK80O,GACjBjF,EAAW7vO,KAAK+0O,GAChBjF,EAAY9vO,KAAK60O,GACjB/E,EAAY9vO,KAAK80O,GACjBhF,EAAY9vO,KAAK+0O,GAIrBC,EAAU30O,KAAKsvO,GACfC,EAAYvvO,KAAKsvO,GACjBE,EAAWxvO,KAAKsvO,GAChBG,EAAYzvO,KAAKsvO,GAEjB/7O,KAAK4gP,eAAiB,IAAI9lM,OAAO,KAAOohM,EAAYz6N,KAAK,KAAO,IAAK,KACrEzhB,KAAK8gP,oBAAsB9gP,KAAK4gP,eAChC5gP,KAAKghP,kBAAoBhhP,KAAK4gP,eAE9B5gP,KAAK2gP,qBAAuB,IAAI7lM,OAC5B,KAAOmhM,EAAWx6N,KAAK,KAAO,IAC9B,KAEJzhB,KAAK6gP,0BAA4B,IAAI/lM,OACjC,KAAOkhM,EAAYv6N,KAAK,KAAO,IAC/B,KAEJzhB,KAAK+gP,wBAA0B,IAAIjmM,OAC/B,KAAOsmM,EAAU3/N,KAAK,KAAO,IAC7B,KAMR,SAAS4/N,KACL,OAAOrhP,KAAKshP,QAAU,IAAM,GAGhC,SAASC,KACL,OAAOvhP,KAAKshP,SAAW,GAiC3B,SAAS3S,GAAS1uI,EAAOuhJ,GACrB3O,EAAe5yI,EAAO,EAAG,GAAG,WACxB,OAAOjgG,KAAKgzO,aAAarE,SACrB3uO,KAAKshP,QACLthP,KAAKyhP,UACLD,MAiBZ,SAASE,GAAc5jE,EAAU7zH,GAC7B,OAAOA,EAAO03L,eA2DlB,SAASC,GAAWn9H,GAGhB,MAAgD,OAAxCA,EAAQ,IAAIrrE,cAAckvG,OAAO,GAnH7CuqF,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGwO,IAClCxO,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG0O,IAElC1O,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAKwO,GAAQp5O,MAAMjI,MAAQmyO,EAASnyO,KAAKyhP,UAAW,MAG/D5O,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACAwO,GAAQp5O,MAAMjI,MACdmyO,EAASnyO,KAAKyhP,UAAW,GACzBtP,EAASnyO,KAAK6hP,UAAW,MAIjChP,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK7yO,KAAKshP,QAAUnP,EAASnyO,KAAKyhP,UAAW,MAGxD5O,EAAe,QAAS,EAAG,GAAG,WAC1B,MACI,GACA7yO,KAAKshP,QACLnP,EAASnyO,KAAKyhP,UAAW,GACzBtP,EAASnyO,KAAK6hP,UAAW,MAcjClT,GAAS,KAAK,GACdA,GAAS,KAAK,GAId2G,GAAa,OAAQ,KAGrBS,GAAgB,OAAQ,IAQxBoC,GAAc,IAAKuJ,IACnBvJ,GAAc,IAAKuJ,IACnBvJ,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAE/BgB,GAAc,MAAOX,IACrBW,GAAc,QAASV,IACvBU,GAAc,MAAOX,IACrBW,GAAc,QAASV,IAEvBoB,GAAc,CAAC,IAAK,MAAOS,IAC3BT,GAAc,CAAC,IAAK,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,GAC/C,IAAIo8L,EAASzL,GAAM5xH,GACnB5gH,EAAMy1O,IAAmB,KAAXwI,EAAgB,EAAIA,KAEtCjJ,GAAc,CAAC,IAAK,MAAM,SAAUp0H,EAAO5gH,EAAO6hD,GAC9CA,EAAOq8L,MAAQr8L,EAAO2qL,QAAQ2R,KAAKv9H,GACnC/+D,EAAOu8L,UAAYx9H,KAEvBo0H,GAAc,CAAC,IAAK,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,GAC/C7hD,EAAMy1O,IAAQjD,GAAM5xH,GACpBqqH,EAAgBppL,GAAQ6pL,SAAU,KAEtCsJ,GAAc,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,GACzC,IAAImvG,EAAMpwC,EAAM5iH,OAAS,EACzBgC,EAAMy1O,IAAQjD,GAAM5xH,EAAMkK,OAAO,EAAGkmC,IACpChxJ,EAAM01O,IAAUlD,GAAM5xH,EAAMkK,OAAOkmC,IACnCi6E,EAAgBppL,GAAQ6pL,SAAU,KAEtCsJ,GAAc,SAAS,SAAUp0H,EAAO5gH,EAAO6hD,GAC3C,IAAIw8L,EAAOz9H,EAAM5iH,OAAS,EACtBsgP,EAAO19H,EAAM5iH,OAAS,EAC1BgC,EAAMy1O,IAAQjD,GAAM5xH,EAAMkK,OAAO,EAAGuzH,IACpCr+O,EAAM01O,IAAUlD,GAAM5xH,EAAMkK,OAAOuzH,EAAM,IACzCr+O,EAAM21O,IAAUnD,GAAM5xH,EAAMkK,OAAOwzH,IACnCrT,EAAgBppL,GAAQ6pL,SAAU,KAEtCsJ,GAAc,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,GACzC,IAAImvG,EAAMpwC,EAAM5iH,OAAS,EACzBgC,EAAMy1O,IAAQjD,GAAM5xH,EAAMkK,OAAO,EAAGkmC,IACpChxJ,EAAM01O,IAAUlD,GAAM5xH,EAAMkK,OAAOkmC,OAEvCgkF,GAAc,SAAS,SAAUp0H,EAAO5gH,EAAO6hD,GAC3C,IAAIw8L,EAAOz9H,EAAM5iH,OAAS,EACtBsgP,EAAO19H,EAAM5iH,OAAS,EAC1BgC,EAAMy1O,IAAQjD,GAAM5xH,EAAMkK,OAAO,EAAGuzH,IACpCr+O,EAAM01O,IAAUlD,GAAM5xH,EAAMkK,OAAOuzH,EAAM,IACzCr+O,EAAM21O,IAAUnD,GAAM5xH,EAAMkK,OAAOwzH,OAWvC,IAAIC,GAA6B,gBAK7BC,GAAa7L,GAAW,SAAS,GAErC,SAAS8L,GAAehB,EAAOG,EAASc,GACpC,OAAIjB,EAAQ,GACDiB,EAAU,KAAO,KAEjBA,EAAU,KAAO,KAIhC,IAuBIC,GAvBAC,GAAa,CACbzQ,SAAUP,EACV8B,eAAgBC,EAChBH,YAAaY,EACblB,QAASoB,EACTuO,uBAAwBtO,EACxBW,aAAcT,EAEdyF,OAAQI,GACRL,YAAaM,GAEbiD,KAAMY,GAENY,SAAUI,GACVN,YAAaQ,GACbP,cAAeM,GAEfyD,cAAeP,IAIfQ,GAAU,GACVC,GAAiB,GAGrB,SAASC,GAAaC,EAAMC,GACxB,IAAIhgP,EACAigP,EAAOlmP,KAAKE,IAAI8lP,EAAKlhP,OAAQmhP,EAAKnhP,QACtC,IAAKmB,EAAI,EAAGA,EAAIigP,EAAMjgP,GAAK,EACvB,GAAI+/O,EAAK//O,KAAOggP,EAAKhgP,GACjB,OAAOA,EAGf,OAAOigP,EAGX,SAASC,GAAgB5+O,GACrB,OAAOA,EAAMA,EAAI80C,cAAcw/B,QAAQ,IAAK,KAAOt0E,EAMvD,SAAS6+O,GAAaC,GAOlB,IANA,IACI5rK,EACAz3E,EACAkqD,EACAlL,EAJA/7C,EAAI,EAMDA,EAAIogP,EAAMvhP,QAAQ,CAKrB,IAHA21E,GADAz4B,EAAQmkM,GAAgBE,EAAMpgP,IAAI+7C,MAAM,MAC9Bl9C,OAEV9B,GADAA,EAAOmjP,GAAgBE,EAAMpgP,EAAI,KACnBjD,EAAKg/C,MAAM,KAAO,KACzBy4B,EAAI,GAAG,CAEV,GADAvtB,EAASo5L,GAAWtkM,EAAMjvC,MAAM,EAAG0nE,GAAG/1D,KAAK,MAEvC,OAAOwoC,EAEX,GACIlqD,GACAA,EAAK8B,QAAU21E,GACfsrK,GAAa/jM,EAAOh/C,IAASy3E,EAAI,EAGjC,MAEJA,IAEJx0E,IAEJ,OAAOw/O,GAGX,SAASc,GAAiB90O,GAEtB,OAAoC,MAA7BA,EAAK+/B,MAAM,eAGtB,SAAS80M,GAAW70O,GAChB,IAAI+0O,EAAY,KAGhB,QACsBznP,IAAlB8mP,GAAQp0O,IACU,qBAAXtT,GACPA,GACAA,EAAOC,SACPmoP,GAAiB90O,GAEjB,IACI+0O,EAAYf,GAAagB,MAEzBC,kGACAC,GAAmBH,GACrB,MAAOn7O,GAGLw6O,GAAQp0O,GAAQ,KAGxB,OAAOo0O,GAAQp0O,GAMnB,SAASk1O,GAAmBp/O,EAAK6G,GAC7B,IAAI6vC,EAqBJ,OApBI12C,KAEI02C,EADAkgJ,EAAY/vL,GACLw4O,GAAUr/O,GAEVs/O,GAAat/O,EAAK6G,IAKzBq3O,GAAexnM,EAEQ,qBAAZhzB,SAA2BA,QAAQC,MAE1CD,QAAQC,KACJ,UAAY3jB,EAAM,2CAM3Bk+O,GAAagB,MAGxB,SAASI,GAAap1O,EAAMk3C,GACxB,GAAe,OAAXA,EAAiB,CACjB,IAAIuE,EACAqnL,EAAemR,GAEnB,GADA/8L,EAAOm+L,KAAOr1O,EACO,MAAjBo0O,GAAQp0O,GACRwiO,EACI,uBACA,2OAKJM,EAAesR,GAAQp0O,GAAMyiO,aAC1B,GAA2B,MAAvBvrL,EAAOo+L,aACd,GAAoC,MAAhClB,GAAQl9L,EAAOo+L,cACfxS,EAAesR,GAAQl9L,EAAOo+L,cAAc7S,YACzC,CAEH,GAAc,OADdhnL,EAASo5L,GAAW39L,EAAOo+L,eAWvB,OAPKjB,GAAen9L,EAAOo+L,gBACvBjB,GAAen9L,EAAOo+L,cAAgB,IAE1CjB,GAAen9L,EAAOo+L,cAAc13O,KAAK,CACrCoC,KAAMA,EACNk3C,OAAQA,IAEL,KATP4rL,EAAernL,EAAOgnL,QA0BlC,OAbA2R,GAAQp0O,GAAQ,IAAIgjO,EAAOH,EAAaC,EAAc5rL,IAElDm9L,GAAer0O,IACfq0O,GAAer0O,GAAM9B,SAAQ,SAAUmL,GACnC+rO,GAAa/rO,EAAErJ,KAAMqJ,EAAE6tC,WAO/Bg+L,GAAmBl1O,GAEZo0O,GAAQp0O,GAIf,cADOo0O,GAAQp0O,GACR,KAIf,SAASu1O,GAAav1O,EAAMk3C,GACxB,GAAc,MAAVA,EAAgB,CAChB,IAAIuE,EACA+5L,EACA1S,EAAemR,GAEE,MAAjBG,GAAQp0O,IAA+C,MAA9Bo0O,GAAQp0O,GAAMs1O,aAEvClB,GAAQp0O,GAAM9G,IAAI2pO,EAAauR,GAAQp0O,GAAMyiO,QAASvrL,KAIrC,OADjBs+L,EAAYX,GAAW70O,MAEnB8iO,EAAe0S,EAAU/S,SAE7BvrL,EAAS2rL,EAAaC,EAAc5rL,GACnB,MAAbs+L,IAIAt+L,EAAOm+L,KAAOr1O,IAElBy7C,EAAS,IAAIunL,EAAO9rL,IACbo+L,aAAelB,GAAQp0O,GAC9Bo0O,GAAQp0O,GAAQy7C,GAIpBy5L,GAAmBl1O,QAGE,MAAjBo0O,GAAQp0O,KAC0B,MAA9Bo0O,GAAQp0O,GAAMs1O,cACdlB,GAAQp0O,GAAQo0O,GAAQp0O,GAAMs1O,aAC1Bt1O,IAASk1O,MACTA,GAAmBl1O,IAEC,MAAjBo0O,GAAQp0O,WACRo0O,GAAQp0O,IAI3B,OAAOo0O,GAAQp0O,GAInB,SAASm1O,GAAUr/O,GACf,IAAI2lD,EAMJ,GAJI3lD,GAAOA,EAAI+rO,SAAW/rO,EAAI+rO,QAAQmT,QAClCl/O,EAAMA,EAAI+rO,QAAQmT,QAGjBl/O,EACD,OAAOk+O,GAGX,IAAK9gP,EAAQ4C,GAAM,CAGf,GADA2lD,EAASo5L,GAAW/+O,GAEhB,OAAO2lD,EAEX3lD,EAAM,CAACA,GAGX,OAAO6+O,GAAa7+O,GAGxB,SAAS2/O,KACL,OAAOniP,EAAK8gP,IAGhB,SAASsB,GAAc9xO,GACnB,IAAIi4G,EACA1kH,EAAIyM,EAAE8mO,GAuCV,OArCIvzO,IAAsC,IAAjCmpO,EAAgB18N,GAAGi4G,WACxBA,EACI1kH,EAAEyzO,IAAS,GAAKzzO,EAAEyzO,IAAS,GACrBA,GACAzzO,EAAE0zO,IAAQ,GAAK1zO,EAAE0zO,IAAQzC,GAAYjxO,EAAEwzO,IAAOxzO,EAAEyzO,KAChDC,GACA1zO,EAAE2zO,IAAQ,GACV3zO,EAAE2zO,IAAQ,IACG,KAAZ3zO,EAAE2zO,MACgB,IAAd3zO,EAAE4zO,KACe,IAAd5zO,EAAE6zO,KACiB,IAAnB7zO,EAAE8zO,KACVH,GACA3zO,EAAE4zO,IAAU,GAAK5zO,EAAE4zO,IAAU,GAC7BA,GACA5zO,EAAE6zO,IAAU,GAAK7zO,EAAE6zO,IAAU,GAC7BA,GACA7zO,EAAE8zO,IAAe,GAAK9zO,EAAE8zO,IAAe,IACvCA,IACC,EAGP3K,EAAgB18N,GAAG+xO,qBAClB95H,EAAW8uH,IAAQ9uH,EAAWgvH,MAE/BhvH,EAAWgvH,IAEXvK,EAAgB18N,GAAGgyO,iBAAgC,IAAd/5H,IACrCA,EAAWqvH,IAEX5K,EAAgB18N,GAAGiyO,mBAAkC,IAAdh6H,IACvCA,EAAWsvH,IAGf7K,EAAgB18N,GAAGi4G,SAAWA,GAG3Bj4G,EAKX,IAAIkyO,GACI,iJACJC,GACI,6IACJC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElB/V,GACI,0LACJgW,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc7/L,GACnB,IAAI1iD,EACAqlB,EAGAm9N,EACAC,EACAC,EACAC,EALAp/O,EAASm/C,EAAO8uB,GAChBjmC,EAAQ+1M,GAAiBv4F,KAAKxlJ,IAAWg+O,GAAcx4F,KAAKxlJ,GAK5Dq/O,EAAcnB,GAAS5iP,OACvBgkP,EAAcnB,GAAS7iP,OAE3B,GAAI0sC,EAAO,CAEP,IADAugM,EAAgBppL,GAAQ8oL,KAAM,EACzBxrO,EAAI,EAAGqlB,EAAIu9N,EAAa5iP,EAAIqlB,EAAGrlB,IAChC,GAAIyhP,GAASzhP,GAAG,GAAG+oJ,KAAKx9G,EAAM,IAAK,CAC/Bk3M,EAAahB,GAASzhP,GAAG,GACzBwiP,GAA+B,IAAnBf,GAASzhP,GAAG,GACxB,MAGR,GAAkB,MAAdyiP,EAEA,YADA//L,EAAOspL,UAAW,GAGtB,GAAIzgM,EAAM,GAAI,CACV,IAAKvrC,EAAI,EAAGqlB,EAAIw9N,EAAa7iP,EAAIqlB,EAAGrlB,IAChC,GAAI0hP,GAAS1hP,GAAG,GAAG+oJ,KAAKx9G,EAAM,IAAK,CAE/Bm3M,GAAcn3M,EAAM,IAAM,KAAOm2M,GAAS1hP,GAAG,GAC7C,MAGR,GAAkB,MAAd0iP,EAEA,YADAhgM,EAAOspL,UAAW,GAI1B,IAAKwW,GAA2B,MAAdE,EAEd,YADAhgM,EAAOspL,UAAW,GAGtB,GAAIzgM,EAAM,GAAI,CACV,IAAIi2M,GAAQz4F,KAAKx9G,EAAM,IAInB,YADAmX,EAAOspL,UAAW,GAFlB2W,EAAW,IAMnBjgM,EAAOsqL,GAAKyV,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BpgM,QAE1BA,EAAOspL,UAAW,EAI1B,SAAS+W,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIzyO,EAAS,CACT0yO,GAAeN,GACf5L,GAAyB55N,QAAQylO,GACjCrqM,SAASsqM,EAAQ,IACjBtqM,SAASuqM,EAAS,IAClBvqM,SAASwqM,EAAW,KAOxB,OAJIC,GACAzyO,EAAOxH,KAAKwvC,SAASyqM,EAAW,KAG7BzyO,EAGX,SAAS0yO,GAAeN,GACpB,IAAI7P,EAAOv6L,SAASoqM,EAAS,IAC7B,OAAI7P,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,EAGX,SAASoQ,GAAkB/4O,GAEvB,OAAOA,EACForE,QAAQ,qBAAsB,KAC9BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,IAG3B,SAAS4tK,GAAaC,EAAYC,EAAahhM,GAC3C,OAAI+gM,GAEsBvH,GAA2B1+N,QAAQimO,KACrC,IAAI14N,KAChB24N,EAAY,GACZA,EAAY,GACZA,EAAY,IACdnG,WAEFzR,EAAgBppL,GAAQmpL,iBAAkB,EAC1CnpL,EAAOspL,UAAW,GACX,GAMnB,SAAS2X,GAAgBC,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOhC,GAAWgC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAKnrM,SAASkrM,EAAW,IACzB10O,EAAI20O,EAAK,IAEb,OADSA,EAAK30O,GAAK,IACR,GAAKA,EAKxB,SAAS40O,GAAkBthM,GACvB,IACIuhM,EADA14M,EAAQqgM,GAAQ7iF,KAAKw6F,GAAkB7gM,EAAO8uB,KAElD,GAAIjmC,EAAO,CASP,GARA04M,EAAclB,GACVx3M,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,KAELi4M,GAAaj4M,EAAM,GAAI04M,EAAavhM,GACrC,OAGJA,EAAOwzL,GAAK+N,EACZvhM,EAAOwqL,KAAOyW,GAAgBp4M,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDmX,EAAO0pL,GAAKuN,GAAc10O,MAAM,KAAMy9C,EAAOwzL,IAC7CxzL,EAAO0pL,GAAG8X,cAAcxhM,EAAO0pL,GAAG+X,gBAAkBzhM,EAAOwqL,MAE3DpB,EAAgBppL,GAAQkpL,SAAU,OAElClpL,EAAOspL,UAAW,EAK1B,SAASoY,GAAiB1hM,GACtB,IAAIuiK,EAAU08B,GAAgB54F,KAAKrmG,EAAO8uB,IAC1B,OAAZyzI,GAKJs9B,GAAc7/L,IACU,IAApBA,EAAOspL,kBACAtpL,EAAOspL,SAKlBgY,GAAkBthM,IACM,IAApBA,EAAOspL,kBACAtpL,EAAOspL,SAKdtpL,EAAO4pL,QACP5pL,EAAOspL,UAAW,EAGlB1B,EAAM+Z,wBAAwB3hM,MAtB9BA,EAAO0pL,GAAK,IAAIrhN,MAAMk6L,EAAQ,IAoCtC,SAASprK,GAASl3C,EAAGC,EAAGC,GACpB,OAAS,MAALF,EACOA,EAEF,MAALC,EACOA,EAEJC,EAGX,SAASyhP,GAAiB5hM,GAEtB,IAAI6hM,EAAW,IAAIx5N,KAAKu/M,EAAMxtL,OAC9B,OAAI4F,EAAO8hM,QACA,CACHD,EAAS1K,iBACT0K,EAASE,cACTF,EAASG,cAGV,CAACH,EAAS9K,cAAe8K,EAASI,WAAYJ,EAASK,WAOlE,SAASC,GAAgBniM,GACrB,IAAI1iD,EACA+oH,EAEA+7H,EACAC,EACAC,EAHAvjI,EAAQ,GAKZ,IAAI/+D,EAAO0pL,GAAX,CAgCA,IA5BA0Y,EAAcR,GAAiB5hM,GAG3BA,EAAOszL,IAAyB,MAAnBtzL,EAAOwzL,GAAGG,KAAqC,MAApB3zL,EAAOwzL,GAAGE,KAClD6O,GAAsBviM,GAID,MAArBA,EAAOwiM,aACPF,EAAYnrM,GAAS6I,EAAOwzL,GAAGC,IAAO2O,EAAY3O,MAG9CzzL,EAAOwiM,WAAa/L,GAAW6L,IACT,IAAtBtiM,EAAOwiM,cAEPpZ,EAAgBppL,GAAQy+L,oBAAqB,GAGjDp4H,EAAO4wH,GAAcqL,EAAW,EAAGtiM,EAAOwiM,YAC1CxiM,EAAOwzL,GAAGE,IAASrtH,EAAK07H,cACxB/hM,EAAOwzL,GAAGG,IAAQttH,EAAK27H,cAQtB1kP,EAAI,EAAGA,EAAI,GAAqB,MAAhB0iD,EAAOwzL,GAAGl2O,KAAcA,EACzC0iD,EAAOwzL,GAAGl2O,GAAKyhH,EAAMzhH,GAAK8kP,EAAY9kP,GAI1C,KAAOA,EAAI,EAAGA,IACV0iD,EAAOwzL,GAAGl2O,GAAKyhH,EAAMzhH,GACD,MAAhB0iD,EAAOwzL,GAAGl2O,GAAoB,IAANA,EAAU,EAAI,EAAK0iD,EAAOwzL,GAAGl2O,GAKrC,KAApB0iD,EAAOwzL,GAAGI,KACY,IAAtB5zL,EAAOwzL,GAAGK,KACY,IAAtB7zL,EAAOwzL,GAAGM,KACiB,IAA3B9zL,EAAOwzL,GAAGO,MAEV/zL,EAAOyiM,UAAW,EAClBziM,EAAOwzL,GAAGI,IAAQ,GAGtB5zL,EAAO0pL,IAAM1pL,EAAO8hM,QAAU7K,GAAgBJ,IAAYt0O,MACtD,KACAw8G,GAEJsjI,EAAkBriM,EAAO8hM,QACnB9hM,EAAO0pL,GAAG+N,YACVz3L,EAAO0pL,GAAGmR,SAIG,MAAf76L,EAAOwqL,MACPxqL,EAAO0pL,GAAG8X,cAAcxhM,EAAO0pL,GAAG+X,gBAAkBzhM,EAAOwqL,MAG3DxqL,EAAOyiM,WACPziM,EAAOwzL,GAAGI,IAAQ,IAKlB5zL,EAAOszL,IACgB,qBAAhBtzL,EAAOszL,GAAGlzO,GACjB4/C,EAAOszL,GAAGlzO,IAAMiiP,IAEhBjZ,EAAgBppL,GAAQmpL,iBAAkB,IAIlD,SAASoZ,GAAsBviM,GAC3B,IAAIsvG,EAAGozF,EAAU/K,EAAMC,EAASN,EAAKC,EAAKhxF,EAAMo8F,EAAiBC,EAGrD,OADZtzF,EAAItvG,EAAOszL,IACLuP,IAAqB,MAAPvzF,EAAE8E,GAAoB,MAAP9E,EAAEwzF,GACjCxL,EAAM,EACNC,EAAM,EAMNmL,EAAWvrM,GACPm4G,EAAEuzF,GACF7iM,EAAOwzL,GAAGC,IACVuE,GAAW+K,KAAe,EAAG,GAAGtS,MAEpCkH,EAAOxgM,GAASm4G,EAAE8E,EAAG,KACrBwjF,EAAUzgM,GAASm4G,EAAEwzF,EAAG,IACV,GAAKlL,EAAU,KACzB+K,GAAkB,KAGtBrL,EAAMt3L,EAAO2qL,QAAQ2N,MAAMhB,IAC3BC,EAAMv3L,EAAO2qL,QAAQ2N,MAAMf,IAE3BqL,EAAU5K,GAAW+K,KAAezL,EAAKC,GAEzCmL,EAAWvrM,GAASm4G,EAAE0zF,GAAIhjM,EAAOwzL,GAAGC,IAAOmP,EAAQnS,MAGnDkH,EAAOxgM,GAASm4G,EAAEA,EAAGszF,EAAQjL,MAElB,MAAProF,EAAElvJ,IAEFw3O,EAAUtoF,EAAElvJ,GACE,GAAKw3O,EAAU,KACzB+K,GAAkB,GAER,MAAPrzF,EAAE5sJ,GAETk1O,EAAUtoF,EAAE5sJ,EAAI40O,GACZhoF,EAAE5sJ,EAAI,GAAK4sJ,EAAE5sJ,EAAI,KACjBigP,GAAkB,IAItB/K,EAAUN,GAGdK,EAAO,GAAKA,EAAOQ,GAAYuK,EAAUpL,EAAKC,GAC9CnO,EAAgBppL,GAAQ0+L,gBAAiB,EACf,MAAnBiE,EACPvZ,EAAgBppL,GAAQ2+L,kBAAmB,GAE3Cp4F,EAAOmxF,GAAmBgL,EAAU/K,EAAMC,EAASN,EAAKC,GACxDv3L,EAAOwzL,GAAGC,IAAQltF,EAAKkqF,KACvBzwL,EAAOwiM,WAAaj8F,EAAKwxF,WAWjC,SAASqI,GAA0BpgM,GAE/B,GAAIA,EAAOsqL,KAAO1C,EAAMqb,SAIxB,GAAIjjM,EAAOsqL,KAAO1C,EAAMsb,SAAxB,CAIAljM,EAAOwzL,GAAK,GACZpK,EAAgBppL,GAAQvtC,OAAQ,EAGhC,IACInV,EACA0jP,EACA9N,EACA34I,EACAp1F,EAGA6jO,EACAoK,EATAvyO,EAAS,GAAKm/C,EAAO8uB,GAMrBq0K,EAAetiP,EAAO1E,OACtBinP,EAAyB,EAO7B,IADAhQ,GAFAF,EACIxF,EAAa1tL,EAAOsqL,GAAItqL,EAAO2qL,SAAS9hM,MAAMkkM,IAAqB,IACrD5wO,OACbmB,EAAI,EAAGA,EAAI81O,EAAU91O,IACtBi9F,EAAQ24I,EAAO51O,IACf0jP,GAAengP,EAAOgoC,MAAM+pM,GAAsBr4I,EAAOv6C,KACrD,IAAI,OAEJ76C,EAAUtE,EAAOooH,OAAO,EAAGpoH,EAAOia,QAAQkmO,KAC9B7kP,OAAS,GACjBitO,EAAgBppL,GAAQuoL,YAAY7hO,KAAKvB,GAE7CtE,EAASA,EAAOuJ,MACZvJ,EAAOia,QAAQkmO,GAAeA,EAAY7kP,QAE9CinP,GAA0BpC,EAAY7kP,QAGtC+wO,EAAqB3yI,IACjBymJ,EACA5X,EAAgBppL,GAAQvtC,OAAQ,EAEhC22N,EAAgBppL,GAAQsoL,aAAa5hO,KAAK6zF,GAE9Cg5I,GAAwBh5I,EAAOymJ,EAAahhM,IACrCA,EAAO4pL,UAAYoX,GAC1B5X,EAAgBppL,GAAQsoL,aAAa5hO,KAAK6zF,GAKlD6uI,EAAgBppL,GAAQwoL,cACpB2a,EAAeC,EACfviP,EAAO1E,OAAS,GAChBitO,EAAgBppL,GAAQuoL,YAAY7hO,KAAK7F,GAKzCm/C,EAAOwzL,GAAGI,KAAS,KACiB,IAApCxK,EAAgBppL,GAAQ6pL,SACxB7pL,EAAOwzL,GAAGI,IAAQ,IAElBxK,EAAgBppL,GAAQ6pL,aAAUzzO,GAGtCgzO,EAAgBppL,GAAQ+oL,gBAAkB/oL,EAAOwzL,GAAGppO,MAAM,GAC1Dg/N,EAAgBppL,GAAQipL,SAAWjpL,EAAOu8L,UAE1Cv8L,EAAOwzL,GAAGI,IAAQyP,GACdrjM,EAAO2qL,QACP3qL,EAAOwzL,GAAGI,IACV5zL,EAAOu8L,WAKC,QADZvT,EAAMI,EAAgBppL,GAAQgpL,OAE1BhpL,EAAOwzL,GAAGC,IAAQzzL,EAAO2qL,QAAQ2Y,gBAAgBta,EAAKhpL,EAAOwzL,GAAGC,MAGpE0O,GAAgBniM,GAChBw+L,GAAcx+L,QAhFVshM,GAAkBthM,QAJlB6/L,GAAc7/L,GAuFtB,SAASqjM,GAAgB9+L,EAAQg/L,EAAMta,GACnC,IAAIua,EAEJ,OAAgB,MAAZva,EAEOsa,EAEgB,MAAvBh/L,EAAOk/L,aACAl/L,EAAOk/L,aAAaF,EAAMta,GACX,MAAf1kL,EAAO+3L,OAEdkH,EAAOj/L,EAAO+3L,KAAKrT,KACPsa,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,GAEJA,GAGAA,EAKf,SAASG,GAAyB1jM,GAC9B,IAAI2jM,EACAC,EACAC,EACAvmP,EACAwmP,EACAC,EACAC,GAAoB,EACpBC,EAAajkM,EAAOsqL,GAAGnuO,OAE3B,GAAmB,IAAf8nP,EAGA,OAFA7a,EAAgBppL,GAAQ4oL,eAAgB,OACxC5oL,EAAO0pL,GAAK,IAAIrhN,KAAK1xB,MAIzB,IAAK2G,EAAI,EAAGA,EAAI2mP,EAAY3mP,IACxBwmP,EAAe,EACfC,GAAmB,EACnBJ,EAAaxZ,EAAW,GAAInqL,GACN,MAAlBA,EAAO8hM,UACP6B,EAAW7B,QAAU9hM,EAAO8hM,SAEhC6B,EAAWrZ,GAAKtqL,EAAOsqL,GAAGhtO,GAC1B8iP,GAA0BuD,GAEtBnlD,EAAQmlD,KACRI,GAAmB,GAIvBD,GAAgB1a,EAAgBua,GAAYnb,cAG5Csb,GAAkE,GAAlD1a,EAAgBua,GAAYrb,aAAansO,OAEzDitO,EAAgBua,GAAYO,MAAQJ,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpChwD,EAAOh0I,EAAQ4jM,GAAcD,GAGjC,SAASQ,GAAiBnkM,GACtB,IAAIA,EAAO0pL,GAAX,CAIA,IAAIpsO,EAAI0yO,GAAqBhwL,EAAO8uB,IAChCs1K,OAAsBhuP,IAAVkH,EAAEy8O,IAAoBz8O,EAAE+oH,KAAO/oH,EAAEy8O,IACjD/5L,EAAOwzL,GAAKlwO,EACR,CAAChG,EAAEmzO,KAAMnzO,EAAE2zO,MAAOmT,EAAW9mP,EAAEimP,KAAMjmP,EAAE+mP,OAAQ/mP,EAAEgnP,OAAQhnP,EAAEinP,cAC3D,SAAUnjP,GACN,OAAOA,GAAO80C,SAAS90C,EAAK,OAIpC+gP,GAAgBniM,IAGpB,SAASwkM,GAAiBxkM,GACtB,IAAIo8F,EAAM,IAAIwuF,EAAO4T,GAAciG,GAAczkM,KAOjD,OANIo8F,EAAIqmG,WAEJrmG,EAAInjI,IAAI,EAAG,KACXmjI,EAAIqmG,cAAWrsP,GAGZgmJ,EAGX,SAASqoG,GAAczkM,GACnB,IAAI++D,EAAQ/+D,EAAO8uB,GACf/5B,EAASiL,EAAOsqL,GAIpB,OAFAtqL,EAAO2qL,QAAU3qL,EAAO2qL,SAAWsT,GAAUj+L,EAAOuqL,IAEtC,OAAVxrH,QAA8B3oH,IAAX2+C,GAAkC,KAAVgqE,EACpCgrH,EAAc,CAAEtB,WAAW,KAGjB,kBAAV1pH,IACP/+D,EAAO8uB,GAAKiwC,EAAQ/+D,EAAO2qL,QAAQ+Z,SAAS3lI,IAG5C+rH,EAAS/rH,GACF,IAAI6rH,EAAO4T,GAAcz/H,KACzBurD,EAAOvrD,GACd/+D,EAAO0pL,GAAK3qH,EACL/iH,EAAQ+4C,GACf2uM,GAAyB1jM,GAClBjL,EACPqrM,GAA0BpgM,GAE1B2kM,GAAgB3kM,GAGfw+I,EAAQx+I,KACTA,EAAO0pL,GAAK,MAGT1pL,IAGX,SAAS2kM,GAAgB3kM,GACrB,IAAI++D,EAAQ/+D,EAAO8uB,GACf0mH,EAAYz2E,GACZ/+D,EAAO0pL,GAAK,IAAIrhN,KAAKu/M,EAAMxtL,OACpBkwH,EAAOvrD,GACd/+D,EAAO0pL,GAAK,IAAIrhN,KAAK02F,EAAMh/G,WACH,kBAAVg/G,EACd2iI,GAAiB1hM,GACVhkD,EAAQ+iH,IACf/+D,EAAOwzL,GAAKlwO,EAAIy7G,EAAM30G,MAAM,IAAI,SAAUhJ,GACtC,OAAO80C,SAAS90C,EAAK,OAEzB+gP,GAAgBniM,IACTiyH,EAASlzD,GAChBolI,GAAiBnkM,GACVw6D,EAASuE,GAEhB/+D,EAAO0pL,GAAK,IAAIrhN,KAAK02F,GAErB6oH,EAAM+Z,wBAAwB3hM,GAItC,SAASmoL,GAAiBppH,EAAOhqE,EAAQwP,EAAQ09J,EAAQ2iC,GACrD,IAAIzkP,EAAI,GA2BR,OAzBe,IAAX40C,IAA8B,IAAXA,IACnBktK,EAASltK,EACTA,OAAS3+C,IAGE,IAAXmuD,IAA8B,IAAXA,IACnB09J,EAAS19J,EACTA,OAASnuD,IAIR67K,EAASlzD,IAAUgpH,EAAchpH,IACjC/iH,EAAQ+iH,IAA2B,IAAjBA,EAAM5iH,UAEzB4iH,OAAQ3oH,GAIZ+J,EAAEkqO,kBAAmB,EACrBlqO,EAAE2hP,QAAU3hP,EAAEsqO,OAASma,EACvBzkP,EAAEoqO,GAAKhmL,EACPpkD,EAAE2uE,GAAKiwC,EACP5+G,EAAEmqO,GAAKv1L,EACP50C,EAAEypO,QAAU3nB,EAELuiC,GAAiBrkP,GAG5B,SAAS4iP,GAAYhkI,EAAOhqE,EAAQwP,EAAQ09J,GACxC,OAAOkmB,GAAiBppH,EAAOhqE,EAAQwP,EAAQ09J,GAAQ,GAve3D2lB,EAAM+Z,wBAA0B1W,EAC5B,iSAGA,SAAUjrL,GACNA,EAAO0pL,GAAK,IAAIrhN,KAAK23B,EAAO8uB,IAAM9uB,EAAO8hM,QAAU,OAAS,QAuLpEla,EAAMqb,SAAW,aAGjBrb,EAAMsb,SAAW,aA2SjB,IAAI2B,GAAe5Z,EACX,sGACA,WACI,IAAIhwN,EAAQ8nO,GAAYxgP,MAAM,KAAMvE,WACpC,OAAI1D,KAAKkkM,WAAavjL,EAAMujL,UACjBvjL,EAAQ3gB,KAAOA,KAAO2gB,EAEtB8uN,OAInB+a,GAAe7Z,EACX,sGACA,WACI,IAAIhwN,EAAQ8nO,GAAYxgP,MAAM,KAAMvE,WACpC,OAAI1D,KAAKkkM,WAAavjL,EAAMujL,UACjBvjL,EAAQ3gB,KAAOA,KAAO2gB,EAEtB8uN,OAUvB,SAAS7vH,GAAO/8G,EAAI4nP,GAChB,IAAI3oG,EAAK9+I,EAIT,GAHuB,IAAnBynP,EAAQ5oP,QAAgBH,EAAQ+oP,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ5oP,OACT,OAAO4mP,KAGX,IADA3mG,EAAM2oG,EAAQ,GACTznP,EAAI,EAAGA,EAAIynP,EAAQ5oP,SAAUmB,EACzBynP,EAAQznP,GAAGkhM,YAAaumD,EAAQznP,GAAGH,GAAIi/I,KACxCA,EAAM2oG,EAAQznP,IAGtB,OAAO8+I,EAIX,SAAS7kJ,KAGL,OAAO2iH,GAAO,WAFH,GAAG9vG,MAAM9O,KAAK0C,UAAW,IAKxC,SAAS1G,KAGL,OAAO4iH,GAAO,UAFH,GAAG9vG,MAAM9O,KAAK0C,UAAW,IAKxC,IAAIo8C,GAAM,WACN,OAAO/xB,KAAK+xB,IAAM/xB,KAAK+xB,OAAS,IAAI/xB,MAGpC28N,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAGJ,SAASC,GAAgBv4O,GACrB,IAAI9N,EAEAtB,EADA4nP,GAAiB,EAEjBC,EAAWH,GAAS7oP,OACxB,IAAKyC,KAAO8N,EACR,GACIo7N,EAAWp7N,EAAG9N,MAEuB,IAAjCkc,GAAQxf,KAAK0pP,GAAUpmP,IACZ,MAAV8N,EAAE9N,IAAiB83C,MAAMhqC,EAAE9N,KAGhC,OAAO,EAIf,IAAKtB,EAAI,EAAGA,EAAI6nP,IAAY7nP,EACxB,GAAIoP,EAAEs4O,GAAS1nP,IAAK,CAChB,GAAI4nP,EACA,OAAO,EAEPjyK,WAAWvmE,EAAEs4O,GAAS1nP,OAASqzO,GAAMjkO,EAAEs4O,GAAS1nP,OAChD4nP,GAAiB,GAK7B,OAAO,EAGX,SAASE,KACL,OAAO9qP,KAAKgvO,SAGhB,SAAS+b,KACL,OAAOC,GAAe3uP,KAG1B,SAAS4uP,GAASv2H,GACd,IAAImhH,EAAkBH,GAAqBhhH,GACvCw2H,EAAQrV,EAAgBM,MAAQ,EAChCgV,EAAWtV,EAAgBuV,SAAW,EACtCrR,EAASlE,EAAgBc,OAAS,EAClC0U,EAAQxV,EAAgBwH,MAAQxH,EAAgByV,SAAW,EAC3DC,EAAO1V,EAAgB4J,KAAO,EAC9B6B,EAAQzL,EAAgBoT,MAAQ,EAChCxH,EAAU5L,EAAgBkU,QAAU,EACpClI,EAAUhM,EAAgBmU,QAAU,EACpCwB,EAAe3V,EAAgBoU,aAAe,EAElDjqP,KAAKgvO,SAAW2b,GAAgB9U,GAGhC71O,KAAKyrP,eACAD,EACS,IAAV3J,EACU,IAAVJ,EACQ,IAARH,EAAe,GAAK,GAGxBthP,KAAK0rP,OAASH,EAAe,EAARF,EAIrBrrP,KAAKy6O,SAAWV,EAAoB,EAAXoR,EAAuB,GAARD,EAExClrP,KAAK8sD,MAAQ,GAEb9sD,KAAKqwO,QAAUsT,KAEf3jP,KAAK2rP,UAGT,SAASC,GAAW9kP,GAChB,OAAOA,aAAemkP,GAG1B,SAASY,GAASrxE,GACd,OAAIA,EAAS,GACyB,EAA3Bz9K,KAAKo/E,OAAO,EAAIq+F,GAEhBz9K,KAAKo/E,MAAMq+F,GAK1B,SAASsxE,GAAcC,EAAQC,EAAQC,GACnC,IAGIjpP,EAHA+K,EAAMhR,KAAKE,IAAI8uP,EAAOlqP,OAAQmqP,EAAOnqP,QACrCqqP,EAAanvP,KAAKijB,IAAI+rO,EAAOlqP,OAASmqP,EAAOnqP,QAC7CsqP,EAAQ,EAEZ,IAAKnpP,EAAI,EAAGA,EAAI+K,EAAK/K,KAEZipP,GAAeF,EAAO/oP,KAAOgpP,EAAOhpP,KACnCipP,GAAe5V,GAAM0V,EAAO/oP,MAAQqzO,GAAM2V,EAAOhpP,MAEnDmpP,IAGR,OAAOA,EAAQD,EAKnB,SAASp+O,GAAOmyF,EAAOl+E,GACnB8wN,EAAe5yI,EAAO,EAAG,GAAG,WACxB,IAAInyF,EAAS9N,KAAKosP,YACdC,EAAO,IAKX,OAJIv+O,EAAS,IACTA,GAAUA,EACVu+O,EAAO,KAGPA,EACAla,KAAYrkO,EAAS,IAAK,GAC1BiU,EACAowN,IAAWrkO,EAAS,GAAI,MAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIbqqO,GAAc,IAAKH,IACnBG,GAAc,KAAMH,IACpBa,GAAc,CAAC,IAAK,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,GAC/CA,EAAO8hM,SAAU,EACjB9hM,EAAOwqL,KAAOoc,GAAiBtU,GAAkBvzH,MAQrD,IAAI8nI,GAAc,kBAElB,SAASD,GAAiBE,EAASjmP,GAC/B,IAEI89I,EACAo9F,EAHA7pD,GAAWrxL,GAAU,IAAIgoC,MAAMi+M,GAKnC,OAAgB,OAAZ50D,EACO,KAOQ,KAFnB6pD,EAAuB,IADvBp9F,IADQuzC,EAAQA,EAAQ/1L,OAAS,IAAM,IACtB,IAAI0sC,MAAMg+M,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAWlW,GAAMhyF,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAao9F,GAAWA,EAI7D,SAASgL,GAAgBhoI,EAAO0uG,GAC5B,IAAIrxE,EAAKszF,EACT,OAAIjiB,EAAMgd,QACNruF,EAAMqxE,EAAM34K,QACZ46L,GACK5E,EAAS/rH,IAAUurD,EAAOvrD,GACrBA,EAAMh/G,UACNgjP,GAAYhkI,GAAOh/G,WAAaq8I,EAAIr8I,UAE9Cq8I,EAAIstF,GAAG17B,QAAQ5xD,EAAIstF,GAAG3pO,UAAY2vO,GAClC9H,EAAMiD,aAAazuF,GAAK,GACjBA,GAEA2mG,GAAYhkI,GAAOioI,QAIlC,SAASC,GAAcv6O,GAGnB,OAAQrV,KAAKo/E,MAAM/pE,EAAEg9N,GAAGvjL,qBAqB5B,SAAS+gM,GAAanoI,EAAOooI,EAAeC,GACxC,IACIC,EADAj/O,EAAS9N,KAAKowO,SAAW,EAE7B,IAAKpwO,KAAKkkM,UACN,OAAgB,MAATz/E,EAAgBzkH,KAAO3D,IAElC,GAAa,MAATooH,EAAe,CACf,GAAqB,kBAAVA,GAEP,GAAc,QADdA,EAAQ6nI,GAAiBtU,GAAkBvzH,IAEvC,OAAOzkH,UAEJjD,KAAKijB,IAAIykG,GAAS,KAAOqoI,IAChCroI,GAAgB,IAwBpB,OAtBKzkH,KAAKmwO,QAAU0c,IAChBE,EAAcJ,GAAc3sP,OAEhCA,KAAKowO,QAAU3rH,EACfzkH,KAAKmwO,QAAS,EACK,MAAf4c,GACA/sP,KAAK2e,IAAIouO,EAAa,KAEtBj/O,IAAW22G,KACNooI,GAAiB7sP,KAAKgtP,kBACvBC,GACIjtP,KACAgrP,GAAevmI,EAAQ32G,EAAQ,KAC/B,GACA,GAEI9N,KAAKgtP,oBACbhtP,KAAKgtP,mBAAoB,EACzB1f,EAAMiD,aAAavwO,MAAM,GACzBA,KAAKgtP,kBAAoB,OAG1BhtP,KAEP,OAAOA,KAAKmwO,OAASriO,EAAS6+O,GAAc3sP,MAIpD,SAASktP,GAAWzoI,EAAOooI,GACvB,OAAa,MAATpoI,GACqB,kBAAVA,IACPA,GAASA,GAGbzkH,KAAKosP,UAAU3nI,EAAOooI,GAEf7sP,OAECA,KAAKosP,YAIrB,SAASe,GAAeN,GACpB,OAAO7sP,KAAKosP,UAAU,EAAGS,GAG7B,SAASO,GAAiBP,GAStB,OARI7sP,KAAKmwO,SACLnwO,KAAKosP,UAAU,EAAGS,GAClB7sP,KAAKmwO,QAAS,EAEV0c,GACA7sP,KAAKuf,SAASotO,GAAc3sP,MAAO,MAGpCA,KAGX,SAASqtP,KACL,GAAiB,MAAbrtP,KAAKkwO,KACLlwO,KAAKosP,UAAUpsP,KAAKkwO,MAAM,GAAO,QAC9B,GAAuB,kBAAZlwO,KAAKw0E,GAAiB,CACpC,IAAI84K,EAAQhB,GAAiBvU,GAAa/3O,KAAKw0E,IAClC,MAAT84K,EACAttP,KAAKosP,UAAUkB,GAEfttP,KAAKosP,UAAU,GAAG,GAG1B,OAAOpsP,KAGX,SAASutP,GAAqB9oI,GAC1B,QAAKzkH,KAAKkkM,YAGVz/E,EAAQA,EAAQgkI,GAAYhkI,GAAO2nI,YAAc,GAEzCpsP,KAAKosP,YAAc3nI,GAAS,KAAO,GAG/C,SAAS+oI,KACL,OACIxtP,KAAKosP,YAAcpsP,KAAKw6C,QAAQm8L,MAAM,GAAGyV,aACzCpsP,KAAKosP,YAAcpsP,KAAKw6C,QAAQm8L,MAAM,GAAGyV,YAIjD,SAASqB,KACL,IAAKvyD,EAAYl7L,KAAK0tP,eAClB,OAAO1tP,KAAK0tP,cAGhB,IACI/sO,EADA9a,EAAI,GAcR,OAXAgqO,EAAWhqO,EAAG7F,OACd6F,EAAIskP,GAActkP,IAEZqzO,IACFv4N,EAAQ9a,EAAEsqO,OAASvC,EAAU/nO,EAAEqzO,IAAMuP,GAAY5iP,EAAEqzO,IACnDl5O,KAAK0tP,cACD1tP,KAAKkkM,WAAa4nD,GAAcjmP,EAAEqzO,GAAIv4N,EAAM/d,WAAa,GAE7D5C,KAAK0tP,eAAgB,EAGlB1tP,KAAK0tP,cAGhB,SAASC,KACL,QAAO3tP,KAAKkkM,YAAalkM,KAAKmwO,OAGlC,SAASyd,KACL,QAAO5tP,KAAKkkM,WAAYlkM,KAAKmwO,OAGjC,SAAS0d,KACL,QAAO7tP,KAAKkkM,WAAYlkM,KAAKmwO,QAA2B,IAAjBnwO,KAAKowO,QApJhD9C,EAAMiD,aAAe,aAwJrB,IAAIud,GAAc,wDAIdC,GACI,sKAER,SAAS/C,GAAevmI,EAAOngH,GAC3B,IAGI+nP,EACArtM,EACAgvM,EALAt5H,EAAWjQ,EAEXl2E,EAAQ,KAkEZ,OA7DIq9M,GAAWnnI,GACXiQ,EAAW,CACP8nH,GAAI/3H,EAAMgnI,cACV3lP,EAAG2+G,EAAMinI,MACTnxF,EAAG91C,EAAMg2H,SAENv6H,EAASuE,KAAWroE,OAAOqoE,IAClCiQ,EAAW,GACPpwH,EACAowH,EAASpwH,IAAQmgH,EAEjBiQ,EAAS82H,cAAgB/mI,IAErBl2E,EAAQu/M,GAAY/hG,KAAKtnC,KACjC4nI,EAAoB,MAAb99M,EAAM,IAAc,EAAI,EAC/BmmF,EAAW,CACPlpF,EAAG,EACH1lC,EAAGuwO,GAAM9nM,EAAM8qM,KAASgT,EACxBhnO,EAAGgxN,GAAM9nM,EAAM+qM,KAAS+S,EACxBj6O,EAAGikO,GAAM9nM,EAAMgrM,KAAW8S,EAC1B7+O,EAAG6oO,GAAM9nM,EAAMirM,KAAW6S,EAC1B7P,GAAInG,GAAMwV,GAA8B,IAArBt9M,EAAMkrM,MAAwB4S,KAE7C99M,EAAQw/M,GAAShiG,KAAKtnC,KAC9B4nI,EAAoB,MAAb99M,EAAM,IAAc,EAAI,EAC/BmmF,EAAW,CACPlpF,EAAGyiN,GAAS1/M,EAAM,GAAI89M,GACtB9xF,EAAG0zF,GAAS1/M,EAAM,GAAI89M,GACtBr3F,EAAGi5F,GAAS1/M,EAAM,GAAI89M,GACtBvmP,EAAGmoP,GAAS1/M,EAAM,GAAI89M,GACtBhnO,EAAG4oO,GAAS1/M,EAAM,GAAI89M,GACtBj6O,EAAG67O,GAAS1/M,EAAM,GAAI89M,GACtB7+O,EAAGygP,GAAS1/M,EAAM,GAAI89M,KAEP,MAAZ33H,EAEPA,EAAW,GAES,kBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/Bs5H,EAAUE,GACNzF,GAAY/zH,EAAS1lH,MACrBy5O,GAAY/zH,EAASzlH,MAGzBylH,EAAW,IACF8nH,GAAKwR,EAAQxC,aACtB92H,EAAS6lC,EAAIyzF,EAAQjU,QAGzB/6L,EAAM,IAAIisM,GAASv2H,GAEfk3H,GAAWnnI,IAAU+oH,EAAW/oH,EAAO,aACvCzlE,EAAIqxL,QAAU5rH,EAAM4rH,SAGpBub,GAAWnnI,IAAU+oH,EAAW/oH,EAAO,cACvCzlE,EAAIgwL,SAAWvqH,EAAMuqH,UAGlBhwL,EAMX,SAASivM,GAASE,EAAK9B,GAInB,IAAIvqG,EAAMqsG,GAAOx1K,WAAWw1K,EAAIv1K,QAAQ,IAAK,MAE7C,OAAQx8B,MAAM0lG,GAAO,EAAIA,GAAOuqG,EAGpC,SAAS+B,GAA0BC,EAAM1tO,GACrC,IAAImhI,EAAM,GAUV,OARAA,EAAIi4F,OACAp5N,EAAMg2N,QAAU0X,EAAK1X,QAAyC,IAA9Bh2N,EAAMw1N,OAASkY,EAAKlY,QACpDkY,EAAK7zM,QAAQ77B,IAAImjI,EAAIi4F,OAAQ,KAAKuU,QAAQ3tO,MACxCmhI,EAAIi4F,OAGVj4F,EAAI0pG,cAAgB7qO,GAAS0tO,EAAK7zM,QAAQ77B,IAAImjI,EAAIi4F,OAAQ,KAEnDj4F,EAGX,SAASosG,GAAkBG,EAAM1tO,GAC7B,IAAImhI,EACJ,OAAMusG,EAAKnqD,WAAavjL,EAAMujL,WAI9BvjL,EAAQ8rO,GAAgB9rO,EAAO0tO,GAC3BA,EAAKE,SAAS5tO,GACdmhI,EAAMssG,GAA0BC,EAAM1tO,KAEtCmhI,EAAMssG,GAA0BztO,EAAO0tO,IACnC7C,cAAgB1pG,EAAI0pG,aACxB1pG,EAAIi4F,QAAUj4F,EAAIi4F,QAGfj4F,GAZI,CAAE0pG,aAAc,EAAGzR,OAAQ,GAgB1C,SAASyU,GAAY90K,EAAWlrE,GAC5B,OAAO,SAAUyH,EAAKw4O,GAClB,IAAS1uD,EAmBT,OAjBe,OAAX0uD,GAAoBryM,OAAOqyM,KAC3Bzd,EACIxiO,EACA,YACIA,EACA,uDACAA,EAHJ,kGAOJuxL,EAAM9pL,EACNA,EAAMw4O,EACNA,EAAS1uD,GAIbktD,GAAYjtP,KADNgrP,GAAe/0O,EAAKw4O,GACH/0K,GAChB15E,MAIf,SAASitP,GAAYhb,EAAKv9G,EAAUg6H,EAAUne,GAC1C,IAAIib,EAAe92H,EAAS+2H,cACxBF,EAAOM,GAASn3H,EAASg3H,OACzB3R,EAAS8R,GAASn3H,EAAS+lH,SAE1BxI,EAAI/tC,YAKTqsC,EAA+B,MAAhBA,GAA8BA,EAEzCwJ,GACAuB,GAASrJ,EAAKluO,GAAIkuO,EAAK,SAAW8H,EAAS2U,GAE3CnD,GACA7U,GAAMzE,EAAK,OAAQluO,GAAIkuO,EAAK,QAAUsZ,EAAOmD,GAE7ClD,GACAvZ,EAAI7C,GAAG17B,QAAQu+B,EAAI7C,GAAG3pO,UAAY+lP,EAAekD,GAEjDne,GACAjD,EAAMiD,aAAa0B,EAAKsZ,GAAQxR,IA5FxCiR,GAAenoP,GAAKooP,GAAS9sP,UAC7B6sP,GAAe2D,QAAU5D,GA+FzB,IAAIpsO,GAAM6vO,GAAY,EAAG,OACrBjvO,GAAWivO,IAAa,EAAG,YAE/B,SAAS57D,GAASnuE,GACd,MAAwB,kBAAVA,GAAsBA,aAAiB51G,OAIzD,SAAS+/O,GAAcnqI,GACnB,OACI+rH,EAAS/rH,IACTurD,EAAOvrD,IACPmuE,GAASnuE,IACTvE,EAASuE,IACToqI,GAAsBpqI,IACtBqqI,GAAoBrqI,IACV,OAAVA,QACU3oH,IAAV2oH,EAIR,SAASqqI,GAAoBrqI,GACzB,IA4BIzhH,EACAi/K,EA7BA8sE,EAAap3E,EAASlzD,KAAWgpH,EAAchpH,GAC/CuqI,GAAe,EACfr4D,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAIJs4D,EAAct4D,EAAW90L,OAE7B,IAAKmB,EAAI,EAAGA,EAAIisP,EAAajsP,GAAK,EAC9Bi/K,EAAW0U,EAAW3zL,GACtBgsP,EAAeA,GAAgBxhB,EAAW/oH,EAAOw9D,GAGrD,OAAO8sE,GAAcC,EAGzB,SAASH,GAAsBpqI,GAC3B,IAAIyqI,EAAYxtP,EAAQ+iH,GACpB0qI,GAAe,EAOnB,OANID,IACAC,EAGkB,IAFd1qI,EAAMl5G,QAAO,SAAUquE,GACnB,OAAQsmC,EAAStmC,IAASg5G,GAASnuE,MACpC5iH,QAEJqtP,GAAaC,EAGxB,SAASC,GAAe3qI,GACpB,IAUIzhH,EACAi/K,EAXA8sE,EAAap3E,EAASlzD,KAAWgpH,EAAchpH,GAC/CuqI,GAAe,EACfr4D,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKR,IAAK3zL,EAAI,EAAGA,EAAI2zL,EAAW90L,OAAQmB,GAAK,EACpCi/K,EAAW0U,EAAW3zL,GACtBgsP,EAAeA,GAAgBxhB,EAAW/oH,EAAOw9D,GAGrD,OAAO8sE,GAAcC,EAGzB,SAASK,GAAkBC,EAAUxvM,GACjC,IAAIs1L,EAAOka,EAASla,KAAKt1L,EAAK,QAAQ,GACtC,OAAOs1L,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,WAGV,SAASma,GAAWtjM,EAAMujM,GAEG,IAArB9rP,UAAU7B,SACL6B,UAAU,GAGJkrP,GAAclrP,UAAU,KAC/BuoD,EAAOvoD,UAAU,GACjB8rP,OAAU1zP,GACHszP,GAAe1rP,UAAU,MAChC8rP,EAAU9rP,UAAU,GACpBuoD,OAAOnwD,IAPPmwD,OAAOnwD,EACP0zP,OAAU1zP,IAWlB,IAAIgkD,EAAMmM,GAAQw8L,KACdgH,EAAMhD,GAAgB3sM,EAAK9/C,MAAM27G,QAAQ,OACzClhE,EAAS6yL,EAAMoiB,eAAe1vP,KAAMyvP,IAAQ,WAC5C5uG,EACI2uG,IACCpxE,EAAWoxE,EAAQ/0M,IACd+0M,EAAQ/0M,GAAQz5C,KAAKhB,KAAM8/C,GAC3B0vM,EAAQ/0M,IAEtB,OAAOz6C,KAAKy6C,OACRomG,GAAU7gJ,KAAKgzO,aAAahB,SAASv3L,EAAQz6C,KAAMyoP,GAAY3oM,KAIvE,SAAStF,KACL,OAAO,IAAI81L,EAAOtwO,MAGtB,SAASsuP,GAAQ7pI,EAAOgxH,GACpB,IAAIka,EAAanf,EAAS/rH,GAASA,EAAQgkI,GAAYhkI,GACvD,SAAMzkH,KAAKkkM,YAAayrD,EAAWzrD,aAIrB,iBADduxC,EAAQD,GAAeC,IAAU,eAEtBz1O,KAAKyF,UAAYkqP,EAAWlqP,UAE5BkqP,EAAWlqP,UAAYzF,KAAKw6C,QAAQmhE,QAAQ85H,GAAOhwO,WAIlE,SAAS8oP,GAAS9pI,EAAOgxH,GACrB,IAAIka,EAAanf,EAAS/rH,GAASA,EAAQgkI,GAAYhkI,GACvD,SAAMzkH,KAAKkkM,YAAayrD,EAAWzrD,aAIrB,iBADduxC,EAAQD,GAAeC,IAAU,eAEtBz1O,KAAKyF,UAAYkqP,EAAWlqP,UAE5BzF,KAAKw6C,QAAQohE,MAAM65H,GAAOhwO,UAAYkqP,EAAWlqP,WAIhE,SAASmqP,GAAU5gP,EAAMC,EAAIwmO,EAAOoa,GAChC,IAAIC,EAAYtf,EAASxhO,GAAQA,EAAOy5O,GAAYz5O,GAChD+gP,EAAUvf,EAASvhO,GAAMA,EAAKw5O,GAAYx5O,GAC9C,SAAMjP,KAAKkkM,WAAa4rD,EAAU5rD,WAAa6rD,EAAQ7rD,aAK/B,OAFxB2rD,EAAcA,GAAe,MAEZ,GACP7vP,KAAKsuP,QAAQwB,EAAWra,IACvBz1O,KAAKuuP,SAASuB,EAAWra,MACZ,MAAnBoa,EAAY,GACP7vP,KAAKuuP,SAASwB,EAASta,IACtBz1O,KAAKsuP,QAAQyB,EAASta,IAIrC,SAASua,GAAOvrI,EAAOgxH,GACnB,IACIwa,EADAN,EAAanf,EAAS/rH,GAASA,EAAQgkI,GAAYhkI,GAEvD,SAAMzkH,KAAKkkM,YAAayrD,EAAWzrD,aAIrB,iBADduxC,EAAQD,GAAeC,IAAU,eAEtBz1O,KAAKyF,YAAckqP,EAAWlqP,WAErCwqP,EAAUN,EAAWlqP,UAEjBzF,KAAKw6C,QAAQmhE,QAAQ85H,GAAOhwO,WAAawqP,GACzCA,GAAWjwP,KAAKw6C,QAAQohE,MAAM65H,GAAOhwO,YAKjD,SAASyqP,GAAczrI,EAAOgxH,GAC1B,OAAOz1O,KAAKgwP,OAAOvrI,EAAOgxH,IAAUz1O,KAAKsuP,QAAQ7pI,EAAOgxH,GAG5D,SAAS0a,GAAe1rI,EAAOgxH,GAC3B,OAAOz1O,KAAKgwP,OAAOvrI,EAAOgxH,IAAUz1O,KAAKuuP,SAAS9pI,EAAOgxH,GAG7D,SAASL,GAAK3wH,EAAOgxH,EAAO2a,GACxB,IAAIC,EAAMC,EAAWzvG,EAErB,IAAK7gJ,KAAKkkM,UACN,OAAO7nM,IAKX,KAFAg0P,EAAO5D,GAAgBhoI,EAAOzkH,OAEpBkkM,UACN,OAAO7nM,IAOX,OAJAi0P,EAAoD,KAAvCD,EAAKjE,YAAcpsP,KAAKosP,aAErC3W,EAAQD,GAAeC,IAGnB,IAAK,OACD50F,EAAS0vG,GAAUvwP,KAAMqwP,GAAQ,GACjC,MACJ,IAAK,QACDxvG,EAAS0vG,GAAUvwP,KAAMqwP,GACzB,MACJ,IAAK,UACDxvG,EAAS0vG,GAAUvwP,KAAMqwP,GAAQ,EACjC,MACJ,IAAK,SACDxvG,GAAU7gJ,KAAOqwP,GAAQ,IACzB,MACJ,IAAK,SACDxvG,GAAU7gJ,KAAOqwP,GAAQ,IACzB,MACJ,IAAK,OACDxvG,GAAU7gJ,KAAOqwP,GAAQ,KACzB,MACJ,IAAK,MACDxvG,GAAU7gJ,KAAOqwP,EAAOC,GAAa,MACrC,MACJ,IAAK,OACDzvG,GAAU7gJ,KAAOqwP,EAAOC,GAAa,OACrC,MACJ,QACIzvG,EAAS7gJ,KAAOqwP,EAGxB,OAAOD,EAAUvvG,EAASu1F,GAASv1F,GAGvC,SAAS0vG,GAAU5qP,EAAGC,GAClB,GAAID,EAAEomH,OAASnmH,EAAEmmH,OAGb,OAAQwkI,GAAU3qP,EAAGD,GAGzB,IAAI6qP,EAAyC,IAAvB5qP,EAAEuwO,OAASxwO,EAAEwwO,SAAgBvwO,EAAE+wO,QAAUhxO,EAAEgxO,SAE7D8Z,EAAS9qP,EAAE60C,QAAQ77B,IAAI6xO,EAAgB,UAe3C,QAASA,GAXL5qP,EAAI6qP,EAAS,GAGH7qP,EAAI6qP,IAAWA,EAFf9qP,EAAE60C,QAAQ77B,IAAI6xO,EAAiB,EAAG,YAMlC5qP,EAAI6qP,IAFJ9qP,EAAE60C,QAAQ77B,IAAI6xO,EAAiB,EAAG,UAETC,MAIF,EAMzC,SAASxvP,KACL,OAAOjB,KAAKw6C,QAAQyP,OAAO,MAAMxP,OAAO,oCAG5C,SAASqR,GAAY4kM,GACjB,IAAK1wP,KAAKkkM,UACN,OAAO,KAEX,IAAI4pC,GAAqB,IAAf4iB,EACNt+O,EAAI07N,EAAM9tO,KAAKw6C,QAAQszL,MAAQ9tO,KACnC,OAAIoS,EAAE+jO,OAAS,GAAK/jO,EAAE+jO,OAAS,KACpBhD,EACH/gO,EACA07N,EACM,iCACA,gCAGV1vD,EAAWrwJ,KAAK5vB,UAAU2tD,aAEtBgiL,EACO9tO,KAAK2wP,SAAS7kM,cAEd,IAAI/9B,KAAK/tB,KAAKyF,UAA+B,GAAnBzF,KAAKosP,YAAmB,KACpDtgM,cACA8sB,QAAQ,IAAKu6J,EAAa/gO,EAAG,MAGnC+gO,EACH/gO,EACA07N,EAAM,+BAAiC,8BAU/C,SAASzsO,KACL,IAAKrB,KAAKkkM,UACN,MAAO,qBAAuBlkM,KAAKw0E,GAAK,OAE5C,IAEI72B,EACAw4L,EACAya,EACAhzM,EALA1zB,EAAO,SACP2mO,EAAO,GAcX,OATK7wP,KAAK2tP,YACNzjO,EAA4B,IAArBlqB,KAAKosP,YAAoB,aAAe,mBAC/CyE,EAAO,KAEXlzM,EAAS,IAAMzzB,EAAO,MACtBisN,EAAO,GAAKn2O,KAAKm2O,QAAUn2O,KAAKm2O,QAAU,KAAO,OAAS,SAC1Dya,EAAW,wBACXhzM,EAASizM,EAAO,OAET7wP,KAAKy6C,OAAOkD,EAASw4L,EAAOya,EAAWhzM,GAGlD,SAASnD,GAAOq2M,GACPA,IACDA,EAAc9wP,KAAK6tP,QACbvgB,EAAMyjB,iBACNzjB,EAAM0jB,eAEhB,IAAInwG,EAASsyF,EAAanzO,KAAM8wP,GAChC,OAAO9wP,KAAKgzO,aAAaie,WAAWpwG,GAGxC,SAAS7xI,GAAKi9C,EAAM+oL,GAChB,OACIh1O,KAAKkkM,YACHssC,EAASvkL,IAASA,EAAKi4I,WAAcukD,GAAYx8L,GAAMi4I,WAElD8mD,GAAe,CAAE/7O,GAAIjP,KAAMgP,KAAMi9C,IACnChC,OAAOjqD,KAAKiqD,UACZinM,UAAUlc,GAERh1O,KAAKgzO,aAAaK,cAIjC,SAAS8d,GAAQnc,GACb,OAAOh1O,KAAKgP,KAAKy5O,KAAezT,GAGpC,SAAS/lO,GAAGg9C,EAAM+oL,GACd,OACIh1O,KAAKkkM,YACHssC,EAASvkL,IAASA,EAAKi4I,WAAcukD,GAAYx8L,GAAMi4I,WAElD8mD,GAAe,CAAEh8O,KAAMhP,KAAMiP,GAAIg9C,IACnChC,OAAOjqD,KAAKiqD,UACZinM,UAAUlc,GAERh1O,KAAKgzO,aAAaK,cAIjC,SAAS+d,GAAMpc,GACX,OAAOh1O,KAAKiP,GAAGw5O,KAAezT,GAMlC,SAAS/qL,GAAO3lD,GACZ,IAAI+sP,EAEJ,YAAYv1P,IAARwI,EACOtE,KAAKqwO,QAAQmT,OAGC,OADrB6N,EAAgB1N,GAAUr/O,MAEtBtE,KAAKqwO,QAAUghB,GAEZrxP,MA1HfstO,EAAM0jB,cAAgB,uBACtB1jB,EAAMyjB,iBAAmB,yBA6HzB,IAAI5+H,GAAOw+G,EACP,mJACA,SAAUrsO,GACN,YAAYxI,IAARwI,EACOtE,KAAKgzO,aAELhzO,KAAKiqD,OAAO3lD,MAK/B,SAAS0uO,KACL,OAAOhzO,KAAKqwO,QAGhB,IAAIihB,GAAgB,IAChBC,GAAgB,GAAKD,GACrBE,GAAc,GAAKD,GACnBE,GAAmB,QAAwBD,GAG/C,SAASE,GAAM57D,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAAS47D,GAAiBnmN,EAAGp5B,EAAGtM,GAE5B,OAAI0lC,EAAI,KAAOA,GAAK,EAET,IAAIzd,KAAKyd,EAAI,IAAKp5B,EAAGtM,GAAK2rP,GAE1B,IAAI1jO,KAAKyd,EAAGp5B,EAAGtM,GAAGL,UAIjC,SAASmsP,GAAepmN,EAAGp5B,EAAGtM,GAE1B,OAAI0lC,EAAI,KAAOA,GAAK,EAETzd,KAAK6uN,IAAIpxM,EAAI,IAAKp5B,EAAGtM,GAAK2rP,GAE1B1jO,KAAK6uN,IAAIpxM,EAAGp5B,EAAGtM,GAI9B,SAAS61G,GAAQ85H,GACb,IAAIxpL,EAAM4lM,EAEV,QAAc/1P,KADd25O,EAAQD,GAAeC,KACc,gBAAVA,IAA4Bz1O,KAAKkkM,UACxD,OAAOlkM,KAKX,OAFA6xP,EAAc7xP,KAAKmwO,OAASyhB,GAAiBD,GAErClc,GACJ,IAAK,OACDxpL,EAAO4lM,EAAY7xP,KAAKm2O,OAAQ,EAAG,GACnC,MACJ,IAAK,UACDlqL,EAAO4lM,EACH7xP,KAAKm2O,OACLn2O,KAAK22O,QAAW32O,KAAK22O,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACD1qL,EAAO4lM,EAAY7xP,KAAKm2O,OAAQn2O,KAAK22O,QAAS,GAC9C,MACJ,IAAK,OACD1qL,EAAO4lM,EACH7xP,KAAKm2O,OACLn2O,KAAK22O,QACL32O,KAAK+rH,OAAS/rH,KAAKs9O,WAEvB,MACJ,IAAK,UACDrxL,EAAO4lM,EACH7xP,KAAKm2O,OACLn2O,KAAK22O,QACL32O,KAAK+rH,QAAU/rH,KAAK8xP,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACD7lM,EAAO4lM,EAAY7xP,KAAKm2O,OAAQn2O,KAAK22O,QAAS32O,KAAK+rH,QACnD,MACJ,IAAK,OACD9/D,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GAAQylM,GACJzlM,GAAQjsD,KAAKmwO,OAAS,EAAInwO,KAAKosP,YAAcmF,IAC7CC,IAEJ,MACJ,IAAK,SACDvlM,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GAAQylM,GAAMzlM,EAAMslM,IACpB,MACJ,IAAK,SACDtlM,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GAAQylM,GAAMzlM,EAAMqlM,IAM5B,OAFAtxP,KAAKovO,GAAG17B,QAAQznJ,GAChBqhL,EAAMiD,aAAavwO,MAAM,GAClBA,KAGX,SAAS47G,GAAM65H,GACX,IAAIxpL,EAAM4lM,EAEV,QAAc/1P,KADd25O,EAAQD,GAAeC,KACc,gBAAVA,IAA4Bz1O,KAAKkkM,UACxD,OAAOlkM,KAKX,OAFA6xP,EAAc7xP,KAAKmwO,OAASyhB,GAAiBD,GAErClc,GACJ,IAAK,OACDxpL,EAAO4lM,EAAY7xP,KAAKm2O,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACDlqL,EACI4lM,EACI7xP,KAAKm2O,OACLn2O,KAAK22O,QAAW32O,KAAK22O,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACD1qL,EAAO4lM,EAAY7xP,KAAKm2O,OAAQn2O,KAAK22O,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACD1qL,EACI4lM,EACI7xP,KAAKm2O,OACLn2O,KAAK22O,QACL32O,KAAK+rH,OAAS/rH,KAAKs9O,UAAY,GAC/B,EACR,MACJ,IAAK,UACDrxL,EACI4lM,EACI7xP,KAAKm2O,OACLn2O,KAAK22O,QACL32O,KAAK+rH,QAAU/rH,KAAK8xP,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACD7lM,EAAO4lM,EAAY7xP,KAAKm2O,OAAQn2O,KAAK22O,QAAS32O,KAAK+rH,OAAS,GAAK,EACjE,MACJ,IAAK,OACD9/D,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GACIulM,GACAE,GACIzlM,GAAQjsD,KAAKmwO,OAAS,EAAInwO,KAAKosP,YAAcmF,IAC7CC,IAEJ,EACJ,MACJ,IAAK,SACDvlM,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GAAQslM,GAAgBG,GAAMzlM,EAAMslM,IAAiB,EACrD,MACJ,IAAK,SACDtlM,EAAOjsD,KAAKovO,GAAG3pO,UACfwmD,GAAQqlM,GAAgBI,GAAMzlM,EAAMqlM,IAAiB,EAM7D,OAFAtxP,KAAKovO,GAAG17B,QAAQznJ,GAChBqhL,EAAMiD,aAAavwO,MAAM,GAClBA,KAGX,SAASyF,KACL,OAAOzF,KAAKovO,GAAG3pO,UAAkC,KAArBzF,KAAKowO,SAAW,GAGhD,SAAS2hB,KACL,OAAOh1P,KAAKwjB,MAAMvgB,KAAKyF,UAAY,KAGvC,SAASkrP,KACL,OAAO,IAAI5iO,KAAK/tB,KAAKyF,WAGzB,SAAS7C,KACL,IAAIwP,EAAIpS,KACR,MAAO,CACHoS,EAAE+jO,OACF/jO,EAAEukO,QACFvkO,EAAE25G,OACF35G,EAAE62O,OACF72O,EAAE23O,SACF33O,EAAE43O,SACF53O,EAAE63O,eAIV,SAASjpO,KACL,IAAI5O,EAAIpS,KACR,MAAO,CACHkrP,MAAO94O,EAAE+jO,OACT4D,OAAQ3nO,EAAEukO,QACV5qH,KAAM35G,EAAE25G,OACRu1H,MAAOlvO,EAAEkvO,QACTG,QAASrvO,EAAEqvO,UACXI,QAASzvO,EAAEyvO,UACX2J,aAAcp5O,EAAEo5O,gBAIxB,SAAS9lO,KAEL,OAAO1lB,KAAKkkM,UAAYlkM,KAAK8rD,cAAgB,KAGjD,SAASkmM,KACL,OAAO9tD,EAAQlkM,MAGnB,SAASiyP,KACL,OAAOv4D,EAAO,GAAIo1C,EAAgB9uO,OAGtC,SAASkyP,KACL,OAAOpjB,EAAgB9uO,MAAMqqH,SAGjC,SAAS8nI,KACL,MAAO,CACH1tI,MAAOzkH,KAAKw0E,GACZ/5B,OAAQz6C,KAAKgwO,GACb/lL,OAAQjqD,KAAKqwO,QACbia,MAAOtqP,KAAKmwO,OACZxoB,OAAQ3nN,KAAKsvO,SAqDrB,SAAS8iB,GAAWhgP,EAAGqoC,GACnB,IAAIz3C,EACAqlB,EACA0jG,EACAsmI,EAAOryP,KAAKsyP,OAAS3O,GAAU,MAAM2O,MACzC,IAAKtvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EASlC,OAPS,kBADMqvP,EAAKrvP,GAAGuvP,QAGfxmI,EAAOuhH,EAAM+kB,EAAKrvP,GAAGuvP,OAAO52I,QAAQ,OACpC02I,EAAKrvP,GAAGuvP,MAAQxmI,EAAKtmH,kBAId4sP,EAAKrvP,GAAGwvP,OACnB,IAAK,YACDH,EAAKrvP,GAAGwvP,MAAQ,IAChB,MACJ,IAAK,SAEDzmI,EAAOuhH,EAAM+kB,EAAKrvP,GAAGwvP,OAAO72I,QAAQ,OAAOl2G,UAC3C4sP,EAAKrvP,GAAGwvP,MAAQzmI,EAAKtmH,UAIjC,OAAO4sP,EAGX,SAASI,GAAgBC,EAASj4M,EAAQktK,GACtC,IAAI3kN,EACAqlB,EAEA7Z,EACAq1O,EACA8O,EAHAN,EAAOryP,KAAKqyP,OAMhB,IAFAK,EAAUA,EAAQroH,cAEbrnI,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAKlC,GAJAwL,EAAO6jP,EAAKrvP,GAAGwL,KAAK67H,cACpBw5G,EAAOwO,EAAKrvP,GAAG6gP,KAAKx5G,cACpBsoH,EAASN,EAAKrvP,GAAG2vP,OAAOtoH,cAEpBs9E,EACA,OAAQltK,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAIopM,IAAS6O,EACT,OAAOL,EAAKrvP,GAEhB,MAEJ,IAAK,OACD,GAAIwL,IAASkkP,EACT,OAAOL,EAAKrvP,GAEhB,MAEJ,IAAK,QACD,GAAI2vP,IAAWD,EACX,OAAOL,EAAKrvP,QAIrB,GAAI,CAACwL,EAAMq1O,EAAM8O,GAAQnyO,QAAQkyO,IAAY,EAChD,OAAOL,EAAKrvP,GAKxB,SAAS4vP,GAAsBlkB,EAAKyH,GAChC,IAAIxlF,EAAM+9E,EAAI6jB,OAAS7jB,EAAI8jB,MAAQ,GAAM,EACzC,YAAa12P,IAATq6O,EACO7I,EAAMoB,EAAI6jB,OAAOpc,OAEjB7I,EAAMoB,EAAI6jB,OAAOpc,QAAUA,EAAOzH,EAAI5gO,QAAU6iJ,EAI/D,SAASkiG,KACL,IAAI7vP,EACAqlB,EACApS,EACAo8O,EAAOryP,KAAKgzO,aAAaqf,OAC7B,IAAKrvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAAG,CAIrC,GAFAiT,EAAMjW,KAAKw6C,QAAQmhE,QAAQ,OAAOl2G,UAE9B4sP,EAAKrvP,GAAGuvP,OAASt8O,GAAOA,GAAOo8O,EAAKrvP,GAAGwvP,MACvC,OAAOH,EAAKrvP,GAAGwL,KAEnB,GAAI6jP,EAAKrvP,GAAGwvP,OAASv8O,GAAOA,GAAOo8O,EAAKrvP,GAAGuvP,MACvC,OAAOF,EAAKrvP,GAAGwL,KAIvB,MAAO,GAGX,SAASskP,KACL,IAAI9vP,EACAqlB,EACApS,EACAo8O,EAAOryP,KAAKgzO,aAAaqf,OAC7B,IAAKrvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAAG,CAIrC,GAFAiT,EAAMjW,KAAKw6C,QAAQmhE,QAAQ,OAAOl2G,UAE9B4sP,EAAKrvP,GAAGuvP,OAASt8O,GAAOA,GAAOo8O,EAAKrvP,GAAGwvP,MACvC,OAAOH,EAAKrvP,GAAG2vP,OAEnB,GAAIN,EAAKrvP,GAAGwvP,OAASv8O,GAAOA,GAAOo8O,EAAKrvP,GAAGuvP,MACvC,OAAOF,EAAKrvP,GAAG2vP,OAIvB,MAAO,GAGX,SAASI,KACL,IAAI/vP,EACAqlB,EACApS,EACAo8O,EAAOryP,KAAKgzO,aAAaqf,OAC7B,IAAKrvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAAG,CAIrC,GAFAiT,EAAMjW,KAAKw6C,QAAQmhE,QAAQ,OAAOl2G,UAE9B4sP,EAAKrvP,GAAGuvP,OAASt8O,GAAOA,GAAOo8O,EAAKrvP,GAAGwvP,MACvC,OAAOH,EAAKrvP,GAAG6gP,KAEnB,GAAIwO,EAAKrvP,GAAGwvP,OAASv8O,GAAOA,GAAOo8O,EAAKrvP,GAAGuvP,MACvC,OAAOF,EAAKrvP,GAAG6gP,KAIvB,MAAO,GAGX,SAASmP,KACL,IAAIhwP,EACAqlB,EACAsoI,EACA16I,EACAo8O,EAAOryP,KAAKgzO,aAAaqf,OAC7B,IAAKrvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAMlC,GALA2tJ,EAAM0hG,EAAKrvP,GAAGuvP,OAASF,EAAKrvP,GAAGwvP,MAAQ,GAAM,EAG7Cv8O,EAAMjW,KAAKw6C,QAAQmhE,QAAQ,OAAOl2G,UAG7B4sP,EAAKrvP,GAAGuvP,OAASt8O,GAAOA,GAAOo8O,EAAKrvP,GAAGwvP,OACvCH,EAAKrvP,GAAGwvP,OAASv8O,GAAOA,GAAOo8O,EAAKrvP,GAAGuvP,MAExC,OACKvyP,KAAKm2O,OAAS7I,EAAM+kB,EAAKrvP,GAAGuvP,OAAOpc,QAAUxlF,EAC9C0hG,EAAKrvP,GAAG8K,OAKpB,OAAO9N,KAAKm2O,OAGhB,SAAS8c,GAAcn1E,GAInB,OAHK0vD,EAAWxtO,KAAM,mBAClBkzP,GAAiBlyP,KAAKhB,MAEnB89K,EAAW99K,KAAKmzP,eAAiBnzP,KAAKozP,WAGjD,SAASC,GAAcv1E,GAInB,OAHK0vD,EAAWxtO,KAAM,mBAClBkzP,GAAiBlyP,KAAKhB,MAEnB89K,EAAW99K,KAAKszP,eAAiBtzP,KAAKozP,WAGjD,SAASG,GAAgBz1E,GAIrB,OAHK0vD,EAAWxtO,KAAM,qBAClBkzP,GAAiBlyP,KAAKhB,MAEnB89K,EAAW99K,KAAKwzP,iBAAmBxzP,KAAKozP,WAGnD,SAASK,GAAa31E,EAAU7zH,GAC5B,OAAOA,EAAOopM,cAAcv1E,GAGhC,SAAS41E,GAAa51E,EAAU7zH,GAC5B,OAAOA,EAAOgpM,cAAcn1E,GAGhC,SAAS61E,GAAe71E,EAAU7zH,GAC9B,OAAOA,EAAOspM,gBAAgBz1E,GAGlC,SAAS81E,GAAoB91E,EAAU7zH,GACnC,OAAOA,EAAO4pM,sBAAwBhc,GAG1C,SAASqb,KACL,IAIIlwP,EACAqlB,EALAyrO,EAAa,GACbC,EAAa,GACbC,EAAe,GACf9X,EAAc,GAGdmW,EAAOryP,KAAKqyP,OAEhB,IAAKrvP,EAAI,EAAGqlB,EAAIgqO,EAAKxwP,OAAQmB,EAAIqlB,IAAKrlB,EAClC+wP,EAAW3nP,KAAK02I,GAAYuvG,EAAKrvP,GAAGwL,OACpCslP,EAAW1nP,KAAK02I,GAAYuvG,EAAKrvP,GAAG6gP,OACpCmQ,EAAa5nP,KAAK02I,GAAYuvG,EAAKrvP,GAAG2vP,SAEtCzW,EAAY9vO,KAAK02I,GAAYuvG,EAAKrvP,GAAGwL,OACrC0tO,EAAY9vO,KAAK02I,GAAYuvG,EAAKrvP,GAAG6gP,OACrC3H,EAAY9vO,KAAK02I,GAAYuvG,EAAKrvP,GAAG2vP,SAGzC3yP,KAAKozP,WAAa,IAAIt4M,OAAO,KAAOohM,EAAYz6N,KAAK,KAAO,IAAK,KACjEzhB,KAAKmzP,eAAiB,IAAIr4M,OAAO,KAAOi5M,EAAWtyO,KAAK,KAAO,IAAK,KACpEzhB,KAAKszP,eAAiB,IAAIx4M,OAAO,KAAOg5M,EAAWryO,KAAK,KAAO,IAAK,KACpEzhB,KAAKwzP,iBAAmB,IAAI14M,OACxB,KAAOk5M,EAAavyO,KAAK,KAAO,IAChC,KAcR,SAASwyO,GAAuBh0J,EAAOi0J,GACnCrhB,EAAe,EAAG,CAAC5yI,EAAOA,EAAMp+F,QAAS,EAAGqyP,GA0ChD,SAASC,GAAe1vI,GACpB,OAAO2vI,GAAqBpzP,KACxBhB,KACAykH,EACAzkH,KAAKq9O,OACLr9O,KAAKs9O,UACLt9O,KAAKgzO,aAAagL,MAAMhB,IACxBh9O,KAAKgzO,aAAagL,MAAMf,KAIhC,SAASoX,GAAkB5vI,GACvB,OAAO2vI,GAAqBpzP,KACxBhB,KACAykH,EACAzkH,KAAKsrP,UACLtrP,KAAK8xP,aACL,EACA,GAIR,SAASwC,KACL,OAAOzW,GAAY79O,KAAKm2O,OAAQ,EAAG,GAGvC,SAASoe,KACL,OAAO1W,GAAY79O,KAAKw0P,cAAe,EAAG,GAG9C,SAASC,KACL,IAAIC,EAAW10P,KAAKgzO,aAAagL,MACjC,OAAOH,GAAY79O,KAAKm2O,OAAQue,EAAS1X,IAAK0X,EAASzX,KAG3D,SAAS0X,KACL,IAAID,EAAW10P,KAAKgzO,aAAagL,MACjC,OAAOH,GAAY79O,KAAKooP,WAAYsM,EAAS1X,IAAK0X,EAASzX,KAG/D,SAASmX,GAAqB3vI,EAAO44H,EAAMC,EAASN,EAAKC,GACrD,IAAI2X,EACJ,OAAa,MAATnwI,EACOi5H,GAAW19O,KAAMg9O,EAAKC,GAAK9G,MAG9BkH,GADJuX,EAAc/W,GAAYp5H,EAAOu4H,EAAKC,MAElCI,EAAOuX,GAEJC,GAAW7zP,KAAKhB,KAAMykH,EAAO44H,EAAMC,EAASN,EAAKC,IAIhE,SAAS4X,GAAWzM,EAAU/K,EAAMC,EAASN,EAAKC,GAC9C,IAAI6X,EAAgB1X,GAAmBgL,EAAU/K,EAAMC,EAASN,EAAKC,GACjElxH,EAAO4wH,GAAcmY,EAAc3e,KAAM,EAAG2e,EAAcrX,WAK9D,OAHAz9O,KAAKm2O,KAAKpqH,EAAK8wH,kBACf78O,KAAK22O,MAAM5qH,EAAK07H,eAChBznP,KAAK+rH,KAAKA,EAAK27H,cACR1nP,KAwBX,SAAS+0P,GAActwI,GACnB,OAAgB,MAATA,EACD1nH,KAAKqjB,MAAMpgB,KAAK22O,QAAU,GAAK,GAC/B32O,KAAK22O,MAAoB,GAAblyH,EAAQ,GAAUzkH,KAAK22O,QAAU,GAnavD9D,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCsF,GAAc,IAAKsb,IACnBtb,GAAc,KAAMsb,IACpBtb,GAAc,MAAOsb,IACrBtb,GAAc,OAAQub,IACtBvb,GAAc,QAASwb,IAEvB9a,GACI,CAAC,IAAK,KAAM,MAAO,OAAQ,UAC3B,SAAUp0H,EAAO5gH,EAAO6hD,EAAQu6C,GAC5B,IAAIyuI,EAAMhpL,EAAO2qL,QAAQ2kB,UAAUvwI,EAAOxkB,EAAOv6C,EAAO4pL,SACpDZ,EACAI,EAAgBppL,GAAQgpL,IAAMA,EAE9BI,EAAgBppL,GAAQ0oL,WAAa3pH,KAKjD0zH,GAAc,IAAKN,IACnBM,GAAc,KAAMN,IACpBM,GAAc,MAAON,IACrBM,GAAc,OAAQN,IACtBM,GAAc,KAAMyb,IAEpB/a,GAAc,CAAC,IAAK,KAAM,MAAO,QAASM,IAC1CN,GAAc,CAAC,OAAO,SAAUp0H,EAAO5gH,EAAO6hD,EAAQu6C,GAClD,IAAI1xD,EACAmX,EAAO2qL,QAAQwjB,uBACftlN,EAAQk2E,EAAMl2E,MAAMmX,EAAO2qL,QAAQwjB,uBAGnCnuM,EAAO2qL,QAAQ4kB,oBACfpxP,EAAMs1O,IAAQzzL,EAAO2qL,QAAQ4kB,oBAAoBxwI,EAAOl2E,GAExD1qC,EAAMs1O,IAAQv9L,SAAS6oE,EAAO,OA4OtCouH,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO7yO,KAAKooP,WAAa,OAG7BvV,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO7yO,KAAKw0P,cAAgB,OAOhCP,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhC3e,GAAa,WAAY,MACzBA,GAAa,cAAe,MAI5BS,GAAgB,WAAY,GAC5BA,GAAgB,cAAe,GAI/BoC,GAAc,IAAKL,IACnBK,GAAc,IAAKL,IACnBK,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,OAAQR,GAAWN,IACjCc,GAAc,OAAQR,GAAWN,IACjCc,GAAc,QAASP,GAAWN,IAClCa,GAAc,QAASP,GAAWN,IAElCyB,GACI,CAAC,OAAQ,QAAS,OAAQ,UAC1B,SAAUt0H,EAAO44H,EAAM33L,EAAQu6C,GAC3Bo9I,EAAKp9I,EAAM0uB,OAAO,EAAG,IAAM0nH,GAAM5xH,MAIzCs0H,GAAkB,CAAC,KAAM,OAAO,SAAUt0H,EAAO44H,EAAM33L,EAAQu6C,GAC3Do9I,EAAKp9I,GAASqtI,EAAM8O,kBAAkB33H,MAsE1CouH,EAAe,IAAK,EAAG,KAAM,WAI7ByC,GAAa,UAAW,KAIxBS,GAAgB,UAAW,GAI3BoC,GAAc,IAAKjB,IACnB2B,GAAc,KAAK,SAAUp0H,EAAO5gH,GAChCA,EAAMu1O,IAA8B,GAApB/C,GAAM5xH,GAAS,MAanCouH,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCyC,GAAa,OAAQ,KAGrBS,GAAgB,OAAQ,GAIxBoC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/BgB,GAAc,MAAM,SAAUr6D,EAAU7zH,GAEpC,OAAO6zH,EACD7zH,EAAOknL,yBAA2BlnL,EAAOmnL,cACzCnnL,EAAOinL,kCAGjB2H,GAAc,CAAC,IAAK,MAAOQ,IAC3BR,GAAc,MAAM,SAAUp0H,EAAO5gH,GACjCA,EAAMw1O,IAAQhD,GAAM5xH,EAAMl2E,MAAMgpM,IAAW,OAK/C,IAAI2d,GAAmB1e,GAAW,QAAQ,GAyB1C,SAAS2e,GAAgB1wI,GACrB,IAAIg5H,EACA1gP,KAAKo/E,OACAn8E,KAAKw6C,QAAQmhE,QAAQ,OAAS37G,KAAKw6C,QAAQmhE,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAAT8I,EAAgBg5H,EAAYz9O,KAAK2e,IAAI8lG,EAAQg5H,EAAW,KA1BnE5K,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CyC,GAAa,YAAa,OAG1BS,GAAgB,YAAa,GAI7BoC,GAAc,MAAOT,IACrBS,GAAc,OAAQf,IACtByB,GAAc,CAAC,MAAO,SAAS,SAAUp0H,EAAO5gH,EAAO6hD,GACnDA,EAAOwiM,WAAa7R,GAAM5xH,MAiB9BouH,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCyC,GAAa,SAAU,KAIvBS,GAAgB,SAAU,IAI1BoC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/B0B,GAAc,CAAC,IAAK,MAAOU,IAI3B,IAAI6b,GAAe5e,GAAW,WAAW,GAIzC3D,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCyC,GAAa,SAAU,KAIvBS,GAAgB,SAAU,IAI1BoC,GAAc,IAAKZ,IACnBY,GAAc,KAAMZ,GAAWJ,IAC/B0B,GAAc,CAAC,IAAK,MAAOW,IAI3B,IA8CIv5I,GAAOo1J,GA9CPC,GAAe9e,GAAW,WAAW,GA+CzC,IA3CA3D,EAAe,IAAK,EAAG,GAAG,WACtB,SAAU7yO,KAAKiqP,cAAgB,QAGnCpX,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAU7yO,KAAKiqP,cAAgB,OAGnCpX,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArB7yO,KAAKiqP,iBAEhBpX,EAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArB7yO,KAAKiqP,iBAEhBpX,EAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArB7yO,KAAKiqP,iBAEhBpX,EAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArB7yO,KAAKiqP,iBAEhBpX,EAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArB7yO,KAAKiqP,iBAEhBpX,EAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArB7yO,KAAKiqP,iBAKhB3U,GAAa,cAAe,MAI5BS,GAAgB,cAAe,IAI/BoC,GAAc,IAAKT,GAAWR,IAC9BiB,GAAc,KAAMT,GAAWP,IAC/BgB,GAAc,MAAOT,GAAWN,IAG3Bn3I,GAAQ,OAAQA,GAAMp+F,QAAU,EAAGo+F,IAAS,IAC7Ck4I,GAAcl4I,GAAO43I,IAGzB,SAAS0d,GAAQ9wI,EAAO5gH,GACpBA,EAAM41O,IAAepD,GAAuB,KAAhB,KAAO5xH,IAGvC,IAAKxkB,GAAQ,IAAKA,GAAMp+F,QAAU,EAAGo+F,IAAS,IAC1C44I,GAAc54I,GAAOs1J,IAYzB,SAASC,KACL,OAAOx1P,KAAKmwO,OAAS,MAAQ,GAGjC,SAASslB,KACL,OAAOz1P,KAAKmwO,OAAS,6BAA+B,GAdxDklB,GAAoB7e,GAAW,gBAAgB,GAI/C3D,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAI//J,GAAQw9J,EAAOnyO,UAwGnB,SAASu3P,GAAWjxI,GAChB,OAAOgkI,GAAoB,IAARhkI,GAGvB,SAASkxI,KACL,OAAOlN,GAAYxgP,MAAM,KAAMvE,WAAWkyP,YAG9C,SAASC,GAAmBtvP,GACxB,OAAOA,EA/GXusE,GAAMn0D,IAAMA,GACZm0D,GAAMk/J,SAAWud,GACjBz8K,GAAMt4B,MAAQA,GACds4B,GAAMsiK,KAAOA,GACbtiK,GAAM8oC,MAAQA,GACd9oC,GAAMr4B,OAASA,GACfq4B,GAAM9jE,KAAOA,GACb8jE,GAAMq+K,QAAUA,GAChBr+K,GAAM7jE,GAAKA,GACX6jE,GAAMs+K,MAAQA,GACdt+K,GAAM/uE,IAAM8yO,GACZ/jK,GAAMo/K,UAAYA,GAClBp/K,GAAMw7K,QAAUA,GAChBx7K,GAAMy7K,SAAWA,GACjBz7K,GAAM88K,UAAYA,GAClB98K,GAAMk9K,OAASA,GACfl9K,GAAMo9K,cAAgBA,GACtBp9K,GAAMq9K,eAAiBA,GACvBr9K,GAAMoxH,QAAU8tD,GAChBl/K,GAAMq/C,KAAOA,GACbr/C,GAAM7oB,OAASA,GACf6oB,GAAMkgK,WAAaA,GACnBlgK,GAAM91E,IAAMwtP,GACZ13K,GAAM71E,IAAMstP,GACZz3K,GAAMm/K,aAAeA,GACrBn/K,GAAMprE,IAAMovO,GACZhkK,GAAM6oC,QAAUA,GAChB7oC,GAAMvzD,SAAWA,GACjBuzD,GAAMlwE,QAAUA,GAChBkwE,GAAM9xD,SAAWA,GACjB8xD,GAAM69K,OAASA,GACf79K,GAAMhnB,YAAcA,GACpBgnB,GAAMzxE,QAAUA,GACM,qBAAX3B,QAAwC,MAAdA,OAAOo2P,MACxChjL,GAAMpzE,OAAOo2P,IAAI,+BAAiC,WAC9C,MAAO,UAAY91P,KAAKy6C,SAAW,MAG3Cq4B,GAAMptD,OAASA,GACfotD,GAAM7xE,SAAWA,GACjB6xE,GAAMi/K,KAAOA,GACbj/K,GAAMrtE,QAAUA,GAChBqtE,GAAMq/K,aAAeA,GACrBr/K,GAAM4/K,QAAUG,GAChB//K,GAAMijL,UAAYjD,GAClBhgL,GAAMkjL,QAAUjD,GAChBjgL,GAAMmjL,QAAUjD,GAChBlgL,GAAMqjK,KAAOkG,GACbvpK,GAAMojK,WAAaoG,GACnBxpK,GAAMs1K,SAAW+L,GACjBrhL,GAAM0hL,YAAcH,GACpBvhL,GAAMs4K,QAAUt4K,GAAMq4K,SAAW4J,GACjCjiL,GAAM6jK,MAAQ6E,GACd1oK,GAAM8jK,YAAc6E,GACpB3oK,GAAMuqK,KAAOvqK,GAAMu4K,MAAQjN,GAC3BtrK,GAAMw4K,QAAUx4K,GAAMojL,SAAW7X,GACjCvrK,GAAM+qK,YAAc4W,GACpB3hL,GAAMqjL,gBAAkBxB,GACxB7hL,GAAMsjL,eAAiB9B,GACvBxhL,GAAMujL,sBAAwB9B,GAC9BzhL,GAAMi5C,KAAOmpI,GACbpiL,GAAM2sK,IAAM3sK,GAAMy4K,KAAOjL,GACzBxtK,GAAMwqK,QAAUkD,GAChB1tK,GAAMg/K,WAAarR,GACnB3tK,GAAM2qK,UAAY0X,GAClBriL,GAAMm2K,KAAOn2K,GAAMwuK,MAAQe,GAC3BvvK,GAAMi3K,OAASj3K,GAAM2uK,QAAU2T,GAC/BtiL,GAAMk3K,OAASl3K,GAAM+uK,QAAUyT,GAC/BxiL,GAAMm3K,YAAcn3K,GAAM04K,aAAe6J,GACzCviL,GAAMs5K,UAAYQ,GAClB95K,GAAMg7J,IAAMqf,GACZr6K,GAAM45K,MAAQU,GACdt6K,GAAM8iL,UAAYvI,GAClBv6K,GAAMy6K,qBAAuBA,GAC7Bz6K,GAAMwjL,MAAQ9I,GACd16K,GAAM66K,QAAUA,GAChB76K,GAAM86K,YAAcA,GACpB96K,GAAM+6K,MAAQA,GACd/6K,GAAMw3K,MAAQuD,GACd/6K,GAAMyjL,SAAWf,GACjB1iL,GAAM0jL,SAAWf,GACjB3iL,GAAM2jL,MAAQ9lB,EACV,kDACAukB,IAEJpiL,GAAMinK,OAASpJ,EACX,mDACA6K,IAEJ1oK,GAAMo4K,MAAQva,EACV,iDACA0L,IAEJvpK,GAAM+9K,KAAOlgB,EACT,2GACAuc,IAEJp6K,GAAM4jL,aAAe/lB,EACjB,0GACA8c,IAeJ,IAAIkJ,GAAUnlB,EAAOrzO,UAuCrB,SAASy4P,GAAMn8M,EAAQt+C,EAAO06P,EAAOrmF,GACjC,IAAIvmH,EAAS05L,KACT7V,EAAMF,IAAYlmO,IAAI8oK,EAAQr0K,GAClC,OAAO8tD,EAAO4sM,GAAO/oB,EAAKrzL,GAG9B,SAASq8M,GAAer8M,EAAQt+C,EAAO06P,GAQnC,GAPI32I,EAASzlE,KACTt+C,EAAQs+C,EACRA,OAAS3+C,GAGb2+C,EAASA,GAAU,GAEN,MAATt+C,EACA,OAAOy6P,GAAMn8M,EAAQt+C,EAAO06P,EAAO,SAGvC,IAAI7zP,EACA+xJ,EAAM,GACV,IAAK/xJ,EAAI,EAAGA,EAAI,GAAIA,IAChB+xJ,EAAI/xJ,GAAK4zP,GAAMn8M,EAAQz3C,EAAG6zP,EAAO,SAErC,OAAO9hG,EAWX,SAASgiG,GAAiBC,EAAcv8M,EAAQt+C,EAAO06P,GACvB,mBAAjBG,GACH92I,EAASzlE,KACTt+C,EAAQs+C,EACRA,OAAS3+C,GAGb2+C,EAASA,GAAU,KAGnBt+C,EADAs+C,EAASu8M,EAETA,GAAe,EAEX92I,EAASzlE,KACTt+C,EAAQs+C,EACRA,OAAS3+C,GAGb2+C,EAASA,GAAU,IAGvB,IAEIz3C,EAFAinD,EAAS05L,KACT7vO,EAAQkjP,EAAe/sM,EAAO+zL,MAAMhB,IAAM,EAE1CjoF,EAAM,GAEV,GAAa,MAAT54J,EACA,OAAOy6P,GAAMn8M,GAASt+C,EAAQ2X,GAAS,EAAG+iP,EAAO,OAGrD,IAAK7zP,EAAI,EAAGA,EAAI,EAAGA,IACf+xJ,EAAI/xJ,GAAK4zP,GAAMn8M,GAASz3C,EAAI8Q,GAAS,EAAG+iP,EAAO,OAEnD,OAAO9hG,EAGX,SAASkiG,GAAWx8M,EAAQt+C,GACxB,OAAO26P,GAAer8M,EAAQt+C,EAAO,UAGzC,SAAS+6P,GAAgBz8M,EAAQt+C,GAC7B,OAAO26P,GAAer8M,EAAQt+C,EAAO,eAGzC,SAASg7P,GAAaH,EAAcv8M,EAAQt+C,GACxC,OAAO46P,GAAiBC,EAAcv8M,EAAQt+C,EAAO,YAGzD,SAASi7P,GAAkBJ,EAAcv8M,EAAQt+C,GAC7C,OAAO46P,GAAiBC,EAAcv8M,EAAQt+C,EAAO,iBAGzD,SAASk7P,GAAgBL,EAAcv8M,EAAQt+C,GAC3C,OAAO46P,GAAiBC,EAAcv8M,EAAQt+C,EAAO,eA5HzDw6P,GAAQ3kB,SAAWA,EACnB2kB,GAAQpjB,eAAiBA,EACzBojB,GAAQtjB,YAAcA,EACtBsjB,GAAQ5jB,QAAUA,EAClB4jB,GAAQvM,SAAWyL,GACnBc,GAAQ1F,WAAa4E,GACrBc,GAAQ5hB,aAAeA,EACvB4hB,GAAQxhB,WAAaA,GACrBwhB,GAAQjvP,IAAMA,EACdivP,GAAQtE,KAAOD,GACfuE,GAAQ3B,UAAYvC,GACpBkE,GAAQ3N,gBAAkB4J,GAC1B+D,GAAQtD,cAAgBA,GACxBsD,GAAQ1D,cAAgBA,GACxB0D,GAAQpD,gBAAkBA,GAE1BoD,GAAQ5c,OAASS,GACjBmc,GAAQ7c,YAAca,GACtBgc,GAAQzc,YAAckB,GACtBub,GAAQ1c,YAAcA,GACtB0c,GAAQ3c,iBAAmBA,GAC3B2c,GAAQtZ,KAAOU,GACf4Y,GAAQW,eAAiBnZ,GACzBwY,GAAQY,eAAiBrZ,GAEzByY,GAAQ9X,SAAWU,GACnBoX,GAAQhY,YAAciB,GACtB+W,GAAQ/X,cAAgBc,GACxBiX,GAAQpY,cAAgB4B,GAExBwW,GAAQ3X,cAAgBA,GACxB2X,GAAQ5X,mBAAqBA,GAC7B4X,GAAQ7X,iBAAmBA,GAE3B6X,GAAQ3U,KAAOJ,GACf+U,GAAQhoB,SAAW2T,GA4FnBoB,GAAmB,KAAM,CACrB2O,KAAM,CACF,CACIE,MAAO,aACPC,MAAO,IACP1kP,OAAQ,EACRU,KAAM,cACNmkP,OAAQ,KACR9O,KAAM,MAEV,CACI0O,MAAO,aACPC,OAAO,IACP1kP,OAAQ,EACRU,KAAM,gBACNmkP,OAAQ,KACR9O,KAAM,OAGdnB,uBAAwB,uBACxB3P,QAAS,SAAUv4D,GACf,IAAI50K,EAAI40K,EAAS,GAWjB,OAAOA,GATgC,IAA/B67D,GAAO77D,EAAS,IAAO,IACjB,KACM,IAAN50K,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,SAOtB0nO,EAAMn7G,KAAOw+G,EACT,wDACA+S,IAEJpW,EAAMkqB,SAAW7mB,EACb,gEACAgT,IAGJ,IAAI8T,GAAU16P,KAAKijB,IAEnB,SAASA,KACL,IAAIg7B,EAAOh7C,KAAK8sD,MAahB,OAXA9sD,KAAKyrP,cAAgBgM,GAAQz3P,KAAKyrP,eAClCzrP,KAAK0rP,MAAQ+L,GAAQz3P,KAAK0rP,OAC1B1rP,KAAKy6O,QAAUgd,GAAQz3P,KAAKy6O,SAE5Bz/L,EAAKwwM,aAAeiM,GAAQz8M,EAAKwwM,cACjCxwM,EAAK6mM,QAAU4V,GAAQz8M,EAAK6mM,SAC5B7mM,EAAKymM,QAAUgW,GAAQz8M,EAAKymM,SAC5BzmM,EAAKsmM,MAAQmW,GAAQz8M,EAAKsmM,OAC1BtmM,EAAK++L,OAAS0d,GAAQz8M,EAAK++L,QAC3B/+L,EAAKkwM,MAAQuM,GAAQz8M,EAAKkwM,OAEnBlrP,KAGX,SAAS03P,GAAchjI,EAAUjQ,EAAO/oH,EAAOg+E,GAC3C,IAAI/4D,EAAQqqO,GAAevmI,EAAO/oH,GAMlC,OAJAg5H,EAAS+2H,eAAiB/xK,EAAY/4D,EAAM8qO,cAC5C/2H,EAASg3H,OAAShyK,EAAY/4D,EAAM+qO,MACpCh3H,EAAS+lH,SAAW/gK,EAAY/4D,EAAM85N,QAE/B/lH,EAASi3H,UAIpB,SAASgM,GAAMlzI,EAAO/oH,GAClB,OAAOg8P,GAAc13P,KAAMykH,EAAO/oH,EAAO,GAI7C,SAASk8P,GAAWnzI,EAAO/oH,GACvB,OAAOg8P,GAAc13P,KAAMykH,EAAO/oH,GAAQ,GAG9C,SAASm8P,GAAQr9E,GACb,OAAIA,EAAS,EACFz9K,KAAKwjB,MAAMi6J,GAEXz9K,KAAKqjB,KAAKo6J,GAIzB,SAASs9E,KACL,IAIIjW,EACAJ,EACAH,EACA4J,EACA6M,EARAvM,EAAexrP,KAAKyrP,cACpBF,EAAOvrP,KAAK0rP,MACZ3R,EAAS/5O,KAAKy6O,QACdz/L,EAAOh7C,KAAK8sD,MAgDhB,OArCS0+L,GAAgB,GAAKD,GAAQ,GAAKxR,GAAU,GAC5CyR,GAAgB,GAAKD,GAAQ,GAAKxR,GAAU,IAGjDyR,GAAuD,MAAvCqM,GAAQG,GAAaje,GAAUwR,GAC/CA,EAAO,EACPxR,EAAS,GAKb/+L,EAAKwwM,aAAeA,EAAe,IAEnC3J,EAAUzL,GAASoV,EAAe,KAClCxwM,EAAK6mM,QAAUA,EAAU,GAEzBJ,EAAUrL,GAASyL,EAAU,IAC7B7mM,EAAKymM,QAAUA,EAAU,GAEzBH,EAAQlL,GAASqL,EAAU,IAC3BzmM,EAAKsmM,MAAQA,EAAQ,GAErBiK,GAAQnV,GAASkL,EAAQ,IAIzBvH,GADAge,EAAiB3hB,GAAS6hB,GAAa1M,IAEvCA,GAAQsM,GAAQG,GAAaD,IAG7B7M,EAAQ9U,GAAS2D,EAAS,IAC1BA,GAAU,GAEV/+L,EAAKuwM,KAAOA,EACZvwM,EAAK++L,OAASA,EACd/+L,EAAKkwM,MAAQA,EAENlrP,KAGX,SAASi4P,GAAa1M,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAASyM,GAAaje,GAElB,OAAiB,OAATA,EAAmB,KAG/B,SAASme,GAAGziB,GACR,IAAKz1O,KAAKkkM,UACN,OAAO7nM,IAEX,IAAIkvP,EACAxR,EACAyR,EAAexrP,KAAKyrP,cAIxB,GAAc,WAFdhW,EAAQD,GAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFA8V,EAAOvrP,KAAK0rP,MAAQF,EAAe,MACnCzR,EAAS/5O,KAAKy6O,QAAUwd,GAAa1M,GAC7B9V,GACJ,IAAK,QACD,OAAOsE,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAwR,EAAOvrP,KAAK0rP,MAAQ3uP,KAAKo/E,MAAM67K,GAAah4P,KAAKy6O,UACzChF,GACJ,IAAK,OACD,OAAO8V,EAAO,EAAIC,EAAe,OACrC,IAAK,MACD,OAAOD,EAAOC,EAAe,MACjC,IAAK,OACD,OAAc,GAAPD,EAAYC,EAAe,KACtC,IAAK,SACD,OAAc,KAAPD,EAAcC,EAAe,IACxC,IAAK,SACD,OAAc,MAAPD,EAAeC,EAAe,IAEzC,IAAK,cACD,OAAOzuP,KAAKwjB,MAAa,MAAPgrO,GAAgBC,EACtC,QACI,MAAM,IAAI5jP,MAAM,gBAAkB6tO,IAMlD,SAAS0iB,KACL,OAAKn4P,KAAKkkM,UAINlkM,KAAKyrP,cACQ,MAAbzrP,KAAK0rP,MACJ1rP,KAAKy6O,QAAU,GAAM,OACK,QAA3BpE,GAAMr2O,KAAKy6O,QAAU,IANdp+O,IAUf,SAAS+7P,GAAOC,GACZ,OAAO,WACH,OAAOr4P,KAAKk4P,GAAGG,IAIvB,IAAIC,GAAiBF,GAAO,MACxBG,GAAYH,GAAO,KACnBI,GAAYJ,GAAO,KACnBK,GAAUL,GAAO,KACjBM,GAASN,GAAO,KAChBO,GAAUP,GAAO,KACjBQ,GAAWR,GAAO,KAClBS,GAAaT,GAAO,KACpBU,GAAUV,GAAO,KAErB,SAASW,KACL,OAAO/N,GAAehrP,MAG1B,SAASg5P,GAAMvjB,GAEX,OADAA,EAAQD,GAAeC,GAChBz1O,KAAKkkM,UAAYlkM,KAAKy1O,EAAQ,OAASp5O,IAGlD,SAAS48P,GAAWzqP,GAChB,OAAO,WACH,OAAOxO,KAAKkkM,UAAYlkM,KAAK8sD,MAAMt+C,GAAQnS,KAInD,IAAImvP,GAAeyN,GAAW,gBAC1BpX,GAAUoX,GAAW,WACrBxX,GAAUwX,GAAW,WACrB3X,GAAQ2X,GAAW,SACnB1N,GAAO0N,GAAW,QAClBlf,GAASkf,GAAW,UACpB/N,GAAQ+N,GAAW,SAEvB,SAAS5N,KACL,OAAOjV,GAASp2O,KAAKurP,OAAS,GAGlC,IAAIpvK,GAAQp/E,KAAKo/E,MACb+8K,GAAa,CACTzkB,GAAI,GACJjnO,EAAG,GACH4E,EAAG,GACHiT,EAAG,GACHvf,EAAG,GACHkvJ,EAAG,KACHuF,EAAG,IAIX,SAAS4+F,GAAkB5yP,EAAQi0K,EAAQw6D,EAAeC,EAAUhrL,GAChE,OAAOA,EAAO8qL,aAAav6D,GAAU,IAAKw6D,EAAezuO,EAAQ0uO,GAGrE,SAASmkB,GAAeC,EAAgBrkB,EAAekkB,EAAYjvM,GAC/D,IAAIyqE,EAAWs2H,GAAeqO,GAAgBr5O,MAC1C6hO,EAAU1lK,GAAMu4C,EAASwjI,GAAG,MAC5BzW,EAAUtlK,GAAMu4C,EAASwjI,GAAG,MAC5B5W,EAAQnlK,GAAMu4C,EAASwjI,GAAG,MAC1B3M,EAAOpvK,GAAMu4C,EAASwjI,GAAG,MACzBne,EAAS59J,GAAMu4C,EAASwjI,GAAG,MAC3B7M,EAAQlvK,GAAMu4C,EAASwjI,GAAG,MAC1BhN,EAAQ/uK,GAAMu4C,EAASwjI,GAAG,MAC1BvyP,EACKk8O,GAAWqX,EAAWzkB,IAAM,CAAC,IAAKoN,IAClCA,EAAUqX,EAAW1rP,GAAK,CAAC,KAAMq0O,IACjCJ,GAAW,GAAK,CAAC,MACjBA,EAAUyX,EAAW9mP,GAAK,CAAC,KAAMqvO,IACjCH,GAAS,GAAK,CAAC,MACfA,EAAQ4X,EAAW7zO,GAAK,CAAC,KAAMi8N,IAC/BiK,GAAQ,GAAK,CAAC,MACdA,EAAO2N,EAAWpzP,GAAK,CAAC,KAAMylP,GAgBvC,OAdoB,MAAhB2N,EAAWlkG,IACXrvJ,EACIA,GACC0lP,GAAS,GAAK,CAAC,MACfA,EAAQ6N,EAAWlkG,GAAK,CAAC,KAAMq2F,KAExC1lP,EAAIA,GACCo0O,GAAU,GAAK,CAAC,MAChBA,EAASmf,EAAW3+F,GAAK,CAAC,KAAMw/E,IAChCmR,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKlW,EACPrvO,EAAE,IAAM0zP,EAAiB,EACzB1zP,EAAE,GAAKskD,EACAkvM,GAAkBlxP,MAAM,KAAMtC,GAIzC,SAAS2zP,GAA2BC,GAChC,YAAyBz9P,IAArBy9P,EACOp9K,GAEqB,oBAArBo9K,IACPp9K,GAAQo9K,GACD,GAMf,SAASC,GAA4BC,EAAWhwI,GAC5C,YAA8B3tH,IAA1Bo9P,GAAWO,UAGD39P,IAAV2tH,EACOyvI,GAAWO,IAEtBP,GAAWO,GAAahwI,EACN,MAAdgwI,IACAP,GAAWzkB,GAAKhrH,EAAQ,IAErB,IAGX,SAASynI,GAASwI,EAAeC,GAC7B,IAAK35P,KAAKkkM,UACN,OAAOlkM,KAAKgzO,aAAaK,cAG7B,IAEIppL,EACA42F,EAHA+4G,GAAa,EACb58F,EAAKk8F,GAyBT,MArB6B,kBAAlBQ,IACPC,EAAgBD,EAChBA,GAAgB,GAES,mBAAlBA,IACPE,EAAaF,GAEY,kBAAlBC,IACP38F,EAAK5+J,OAAO+8C,OAAO,GAAI+9M,GAAYS,GACZ,MAAnBA,EAAcnsP,GAAiC,MAApBmsP,EAAcllB,KACzCz3E,EAAGy3E,GAAKklB,EAAcnsP,EAAI,IAKlCqzI,EAASu4G,GAAep5P,MAAO45P,EAAY58F,EAD3C/yG,EAASjqD,KAAKgzO,cAGV4mB,IACA/4G,EAAS52F,EAAOkrL,YAAYn1O,KAAM6gJ,IAG/B52F,EAAOgnM,WAAWpwG,GAG7B,IAAIg5G,GAAQ98P,KAAKijB,IAEjB,SAASqsO,GAAKx0O,GACV,OAAQA,EAAI,IAAMA,EAAI,KAAOA,EAGjC,SAASiiP,KAQL,IAAK95P,KAAKkkM,UACN,OAAOlkM,KAAKgzO,aAAaK,cAG7B,IAGIoO,EACAH,EACA4J,EACA19O,EAEAusP,EACAC,EACAC,EACAC,EAXArY,EAAUgY,GAAM75P,KAAKyrP,eAAiB,IACtCF,EAAOsO,GAAM75P,KAAK0rP,OAClB3R,EAAS8f,GAAM75P,KAAKy6O,SAKpB0f,EAAQn6P,KAAKu4P,YAMjB,OAAK4B,GAOL1Y,EAAUrL,GAASyL,EAAU,IAC7BP,EAAQlL,GAASqL,EAAU,IAC3BI,GAAW,GACXJ,GAAW,GAGXyJ,EAAQ9U,GAAS2D,EAAS,IAC1BA,GAAU,GAGVvsO,EAAIq0O,EAAUA,EAAQuY,QAAQ,GAAGxhL,QAAQ,SAAU,IAAM,GAEzDmhL,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAS3N,GAAKrsP,KAAKy6O,WAAa4R,GAAK8N,GAAS,IAAM,GACpDF,EAAW5N,GAAKrsP,KAAK0rP,SAAWW,GAAK8N,GAAS,IAAM,GACpDD,EAAU7N,GAAKrsP,KAAKyrP,iBAAmBY,GAAK8N,GAAS,IAAM,GAGvDJ,EACA,KACC7O,EAAQ8O,EAAS9O,EAAQ,IAAM,KAC/BnR,EAASigB,EAASjgB,EAAS,IAAM,KACjCwR,EAAO0O,EAAW1O,EAAO,IAAM,KAC/BjK,GAASG,GAAWI,EAAU,IAAM,KACpCP,EAAQ4Y,EAAU5Y,EAAQ,IAAM,KAChCG,EAAUyY,EAAUzY,EAAU,IAAM,KACpCI,EAAUqY,EAAU1sP,EAAI,IAAM,KA9BxB,MAkCf,IAAI6sP,GAAUpP,GAAS9sP,UAwGvB,OAtGAk8P,GAAQn2D,QAAU4mD,GAClBuP,GAAQr6O,IAAMA,GACdq6O,GAAQ17O,IAAMg5O,GACd0C,GAAQ96O,SAAWq4O,GACnByC,GAAQnC,GAAKA,GACbmC,GAAQ/B,eAAiBA,GACzB+B,GAAQ9B,UAAYA,GACpB8B,GAAQ7B,UAAYA,GACpB6B,GAAQ5B,QAAUA,GAClB4B,GAAQ3B,OAASA,GACjB2B,GAAQ1B,QAAUA,GAClB0B,GAAQzB,SAAWA,GACnByB,GAAQxB,WAAaA,GACrBwB,GAAQvB,QAAUA,GAClBuB,GAAQ50P,QAAU0yP,GAClBkC,GAAQ1O,QAAUmM,GAClBuC,GAAQ7/M,MAAQu+M,GAChBsB,GAAQt2P,IAAMi1P,GACdqB,GAAQ7O,aAAeA,GACvB6O,GAAQxY,QAAUA,GAClBwY,GAAQ5Y,QAAUA,GAClB4Y,GAAQ/Y,MAAQA,GAChB+Y,GAAQ9O,KAAOA,GACf8O,GAAQhP,MAAQA,GAChBgP,GAAQtgB,OAASA,GACjBsgB,GAAQnP,MAAQA,GAChBmP,GAAQnJ,SAAWA,GACnBmJ,GAAQvuM,YAAcguM,GACtBO,GAAQp5P,SAAW64P,GACnBO,GAAQ30O,OAASo0O,GACjBO,GAAQpwM,OAASA,GACjBowM,GAAQrnB,WAAaA,GAErBqnB,GAAQC,YAAc3pB,EAClB,sFACAmpB,IAEJO,GAAQloI,KAAOA,GAIf0gH,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BsF,GAAc,IAAKL,IACnBK,GAAc,IAAKF,IACnBY,GAAc,KAAK,SAAUp0H,EAAO5gH,EAAO6hD,GACvCA,EAAO0pL,GAAK,IAAIrhN,KAAyB,IAApB4qD,WAAW8rC,OAEpCo0H,GAAc,KAAK,SAAUp0H,EAAO5gH,EAAO6hD,GACvCA,EAAO0pL,GAAK,IAAIrhN,KAAKsoN,GAAM5xH,OAK/B6oH,EAAM5jN,QAAU,SAEhB6jN,EAAgBkb,IAEhBnb,EAAMzqO,GAAKiwE,GACXw6J,EAAMrwO,IAAMA,GACZqwO,EAAMtwO,IAAMA,GACZswO,EAAMxtL,IAAMA,GACZwtL,EAAMQ,IAAMF,EACZN,EAAMykB,KAAO2D,GACbpoB,EAAMyM,OAASkd,GACf3pB,EAAMt9D,OAASA,EACfs9D,EAAMrjL,OAASy5L,GACfpW,EAAMqhB,QAAUlf,EAChBnC,EAAM54G,SAAWs2H,GACjB1d,EAAMkD,SAAWA,EACjBlD,EAAMuR,SAAWsY,GACjB7pB,EAAMsoB,UAAYD,GAClBroB,EAAM0F,WAAa2Q,GACnBrW,EAAMse,WAAaA,GACnBte,EAAMwM,YAAcod,GACpB5pB,EAAMqR,YAAc0Y,GACpB/pB,EAAMsW,aAAeA,GACrBtW,EAAMyW,aAAeA,GACrBzW,EAAMsV,QAAUqB,GAChB3W,EAAMsR,cAAgBwY,GACtB9pB,EAAMkI,eAAiBA,GACvBlI,EAAMitB,qBAAuBjB,GAC7BhsB,EAAMktB,sBAAwBhB,GAC9BlsB,EAAMoiB,eAAiBL,GACvB/hB,EAAMnvO,UAAY20E,GAGlBw6J,EAAMmtB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnBvhB,KAAM,aACNwhB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTrhB,KAAM,aACNN,MAAO,WAGJ9L,EA3iLyE0tB,K,mDCPpF,+CACe,SAASC,EAA2B90P,EAAG+0P,GACpD,IAAIz5F,EAEJ,GAAsB,qBAAX/hK,QAAgD,MAAtByG,EAAEzG,OAAOC,UAAmB,CAC/D,GAAI8B,MAAMC,QAAQyE,KAAOs7J,EAAK,YAA2Bt7J,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAC/G4/J,IAAIt7J,EAAIs7J,GACZ,IAAIz+J,EAAI,EAEJm4P,EAAI,aAER,MAAO,CACL3tP,EAAG2tP,EACH/0P,EAAG,WACD,OAAIpD,GAAKmD,EAAEtE,OAAe,CACxBvB,MAAM,GAED,CACLA,MAAM,EACN5E,MAAOyK,EAAEnD,OAGboF,EAAG,SAAWgzP,GACZ,MAAMA,GAER1kL,EAAGykL,GAIP,MAAM,IAAI94P,UAAU,yIAGtB,IAEI+uC,EAFAiqN,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACL9tP,EAAG,WACDi0J,EAAKt7J,EAAEzG,OAAOC,aAEhByG,EAAG,WACD,IAAIxB,EAAO68J,EAAG1hK,OAEd,OADAs7P,EAAmBz2P,EAAKtE,KACjBsE,GAETwD,EAAG,SAAWmzP,GACZD,GAAS,EACTlqN,EAAMmqN,GAER7kL,EAAG,WACD,IACO2kL,GAAoC,MAAhB55F,EAAW,QAAWA,EAAW,SAC1D,QACA,GAAI65F,EAAQ,MAAMlqN,O,6BCpD1B,qnFAsBIsO,EAtBJ,uBAwBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAaI4oP,EAAiC,kBAAM3oN,YAClD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,4BAG9C03P,EAA+B,kBAAM5oN,YAChD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,0BAG9C23P,EAAuB,kBAAM7oN,YACxC8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,kBAQ9C43P,EAAkC,kBAAM9oN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9C63P,EAAgC,kBAAM/oN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAkB9C83P,EAAqD,kBAAMhpN,YACtE8M,IAXiD9M,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAWzD,SAACijC,EAA2C80N,GAA5C,OAAoE90N,EAAMpmB,MAAM,CAAC,sBAAuBk7O,GAAsB7jP,sBAGnH8jP,EAAuC,kBAAMlpN,YACxD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qCAG9Ci4P,EAA0B,kBAAMnpN,YAC3C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qBAG9Ck4P,EAAgC,kBAAMppN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,mBAG9Cm4P,EAAwC,kBAAMrpN,YACzD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9Co4P,EAAyC,kBAAMtpN,YAC1D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,oCAG9Cq4P,EAAqC,kBAAMvpN,YACtD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,gCAG9Cs4P,EAA8C,kBAAMxpN,YAC/D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yCAG9Cu4P,EAAoC,kBAAMzpN,YACrD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,uBAQ9Cw4P,EAAyC,kBAAM1pN,YAC1D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,oCAG9Cy4P,EAAyC,kBAAM3pN,YAC1D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,oCAG9C04P,EAAqC,kBAAM5pN,YACtD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,wBA+B9C24P,EAAuC,kBAAM7pN,YACxD8M,KACA,SAAC3Y,GAAD,OACEA,EAAMjjC,IAAI,kCASD44P,EAA0C,kBAAM9pN,YAC3D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9C64P,EAAgD,kBAAM/pN,YACjE8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,mCAQ9C84P,EAA+B,kBAAMhqN,YAChD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,0BAG9C+4P,EAAyC,kBAAMjqN,YAC1D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,gCAG9Cg5P,EAAmC,kBAAMlqN,YACpD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,8BAI9Ci5P,EAA8B,kBAAMnqN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9Ck5P,EAA2B,kBAAMpqN,YAC5C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,iBAAkBkU,eAAK,SAGrEilP,EAA8B,kBAAMrqN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9Co5P,EAA4B,kBAAMtqN,YAC7C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,uBAG9Cq5P,EAA8B,kBAAMvqN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9Cs5P,EAAiC,kBAAMxqN,YAClD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,4BAmB9Cu5P,EAAgC,kBAAMzqN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMpmB,MAAM,CAAC,iCAAkC,iBAGnF28O,EAAkC,kBAAM1qN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMpmB,MAAM,CAAC,iCAAkC,oBAGnF48O,EAAmD,kBAAM3qN,YACpE8M,KACA,SAAC3Y,GAAD,yBAA+CA,EAAMpmB,MAAM,CAAC,iCAAkC,uBAA9F,aAA+C,EAAgEnQ,MAAhE,UAAsEu2B,EAAMpmB,MAAM,CAAC,iCAAkC,oBAArH,QAAqI3I,sBAGzKwlP,EAAyB,kBAAM5qN,YAC1C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,oBAG9C25P,EAAoB,kBAAM7qN,YACrC8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,eAG9C45P,EAA8B,kBAAM9qN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9C65P,EAA0C,kBAAM/qN,YAC3D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qCAG9C85P,EAAmC,kBAAMhrN,YACpD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qBAG9C+5P,EAA2B,kBAAMjrN,YAC5C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,sBAG9Cg6P,EAAgC,kBAAMlrN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9Ci6P,EAAsC,kBAAMnrN,YACvD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,iCAG9Ck6P,EAAoC,kBAAMprN,YACrD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,+BAG9Cm6P,EAA+C,kBAAMrrN,YAChE8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,0CAG9Co6P,EAA0C,kBAAMtrN,YAC3D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qCAG9Cq6P,EAAqD,kBAAMvrN,YACtE8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,gDAG9Cs6P,EAAkC,kBAAMxrN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9Cu6P,EAAgC,kBAAMzrN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMpmB,MAAM,CAAC,iBAAkB,GAAIhO,qBAGvE2rP,GAAwC,kBAAM1rN,YACzD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,mCAG9Cy6P,GAAiC,kBAAM3rN,YAClD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,4BAG9C06P,GAAsC,kBAAM5rN,YACvD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,iCAG9C26P,GAA4C,kBAAM7rN,YAC7D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,uCAI9C46P,GAAoC,kBAAM9rN,YACrD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,+BAG9C66P,GAAkC,kBAAM/rN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9C86P,GAA0C,kBAAMhsN,YAC3D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,qCAG9C+6P,GAA+B,kBAAMjsN,YAChD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,0BAG9Cg7P,GAAgC,kBAAMlsN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9Ci7P,GAAkC,kBAAMnsN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9Ck7P,GAA6C,kBAAMpsN,YAC9D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,wCAG9Cm7P,GAAoC,kBAAMrsN,YACrD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMpmB,MAAM,CAAC,6BAA8B,gCAG/Eu+O,GAAsC,kBAAMtsN,YACvD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMpmB,MAAM,CAAC,6BAA8B,kCAa/Ew+O,GAAmC,kBAAMvsN,YACpD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,8BAG9Cs7P,GAAgC,kBAAMxsN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9Cu7P,GAAgC,kBAAMzsN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9Cw7P,GAAmC,kBAAM1sN,YACpD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,8BAG9Cy7P,GAAkC,kBAAM3sN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9C07P,GAAsC,kBAAM5sN,YACvD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,iCAG9C27P,GAAgC,kBAAM7sN,YACjD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,2BAG9C47P,GAA8B,kBAAM9sN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9C67P,GAAiC,kBAAM/sN,YAClD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,4BAG9C87P,GAA4C,kBAAMhtN,YAC7D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,uCAmB9C+7P,GAAkC,kBAAMjtN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9Cg8P,GAA8B,kBAAMltN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,yBAG9Ci8P,GAAqC,kBAAMntN,YACtD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,gCAG9Ck8P,GAAkC,kBAAMptN,YACnD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,6BAG9Cm8P,GAA4C,kBAAMrtN,YAC7D8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,uCAG9Co8P,GAAsC,kBAAMttN,YACvD8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,iCAG9Cq8P,GAA8B,kBAAMvtN,YAC/C8M,KACA,SAAC3Y,GAAD,OAA+CA,EAAMjjC,IAAI,0B,6RCtY5C6oH,IAnFqC,SAAC1iF,GACnD,IACEu6E,EAoBEv6E,EApBFu6E,MADF,EAqBIv6E,EAnBFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAUEoJ,EAVFpJ,MAXF,GAqBIoJ,EATF9uC,QASE8uC,EARFyvE,mBAbF,MAae,GAbf,IAqBIzvE,EAPF0vE,wBAdF,MAcqB,GAdrB,IAqBI1vE,EANFq2N,6BAfF,MAe0B,GAf1B,IAqBIr2N,EALFs2N,oBAhBF,WAqBIt2N,EAJFu2N,sBAjBF,WAqBIv2N,EAHFwvE,eAlBF,MAkBY,QAlBZ,IAqBIxvE,EAFF2iF,kBAnBF,SAoBKvoG,EApBL,YAqBI4lB,EArBJ,GAuBM6gF,EAAsB,UAAZrR,EAEVgnJ,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAgCZ,OA9BoC,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzFmjN,EAAgBnjN,cAIrBwtE,GACG5tH,uBAAaujQ,EAAgBhlQ,OAEtBuc,OAAKF,OAAO2oP,EAAgBhlQ,SACtCglQ,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAM6lB,UAF9Cm/O,EAAgBhlQ,MAAQuc,iBAIM,MAA5ByoP,EAAgBllJ,WAClBklJ,EAAgBllJ,SAlEI,SAAC9/G,EAAO+I,GAAR,OAAuB,SAAC+2G,GAAD,OAAc,SAAC4V,EAAK4K,GACnExgB,EAASwgB,GAAYv3H,EAAW8E,SAAS7N,IAAU+I,EAAW2H,KAAK1Q,IAAU+I,EAAcA,EAAW8G,QAAO,SAACu8L,GAAD,OAAcxiM,aAAGwiM,EAASpsM,MAAS01H,EAAK4K,KAiEtH6kI,CAAkBL,EAAcE,EAAgBhlQ,MAAhDmlQ,CAAuDH,EAAgBllJ,WAEtE,MAA1BklJ,EAAgBh7H,SAClBg7H,EAAgBh7H,QAAuCg7H,EAAgBhlQ,MAjE9B,SAACgqI,GAAD,OAAY,SAACtU,OAiEwBsvI,EAAgBh7H,SAEhGg7H,EAAgB1kI,QAAU0kI,EAAgBhlQ,MAAM6N,SAASi3P,KAGzB,MAA5BE,EAAgBllJ,WAClBklJ,EAAgBllJ,SAlED,SAACglJ,EAAcC,GAAf,OAAkC,SAACjlJ,GAAD,OAAc,SAAC4V,EAAK4K,GACzExgB,EAASwgB,EAAUwkI,EAAeC,EAAgBrvI,EAAK4K,KAiExB8kI,CAAaN,EAAcC,EAA3BK,CAA2CJ,EAAgBllJ,WAE1D,MAA1BklJ,EAAgBh7H,SAClBg7H,EAAgBh7H,QAAkDg7H,EAAgBh7H,OAjEvB,SAACtU,OAmE9DsvI,EAAgB1kI,QAAU0kI,EAAgBhlQ,QAAU8kQ,GAIpD,eAAC,IAAD,yBAAaryP,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,aACE94E,MAAOA,EACPymF,QACE,cAAC,IAAD,uCACMm5I,GACAp8O,GAFN,IAGE5oB,MAAK,UAAK8kQ,OAGVD,IAEL1zI,GAAc,cAAC,IAAD,CAAgB5rF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,W,2wCCrHxE5gN,E,uEAESC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAEImuP,EAAmB,SAACC,EAAkBj3I,GAAnB,OAAqDl3E,aACnF,SAAC7L,GAAD,OAAWA,KACX,SAACA,GAAD,OAAiB+iF,EAAO/iF,EAAMpmB,MAAN,CAAa,OAAQogP,EAAU,UAA/B,mBAA4Cj3I,KAAS/iF,EAAMpmB,MAAM,CAAC,OAAQogP,EAAU,aAAepuP,cAAI,QAEpHquP,EAAa,SAACD,GAAD,OAAsBnuN,aAC9C,SAAC7L,GAAD,OAAWA,KACX,SAACA,GAAD,OAAgBA,EAAMpmB,MAAM,CAAC,OAAQogP,KAAcpuP,cAAI,QAE5C8jI,EAAuB,kBAAM7jG,aACxC,SAAC7L,GAAD,OAAWA,KACX,SAACA,GAAD,OAAgBA,EAAMpmB,MAAM,CAAC,OAAQ,QAAS,YAAchO,cAAI,QAMrDsuP,EAAgC,kBAAMruN,aACjD,SAAC7L,GAAD,OAAWA,KACX,SAACA,GAAD,OAAgBA,EAAMpmB,MAAM,CAAC,OAAQ,QAAS,mBAEnCugP,EAAyB,kBAAMtuN,YAC1C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,oBAEzCq9P,EAAmB,kBAAMvuN,YACpC8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,WAAa6O,oBAMtDyuP,EAA0B,kBAAMxuN,YAC3C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,qBAYzCu9P,EAAwB,kBAAMzuN,YACzC8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,mBAGzCw9P,EAAiC,kBAAM1uN,YAClDyuN,IACA35M,eACA,SAAC65M,EAAmChzI,GAApC,OAA6EizI,YAAwB,CAAEjzI,8BAA6BgzI,oBAGzHE,EAA0B,kBAAM7uN,YAC3CuuN,IACAO,KACA,SAACptC,EAAkCqtC,GAAnC,OAA+DrtC,EAAOxwN,IAAIpC,OAAOigQ,QAGtED,EAA4B,kBAAM9uN,YAC7C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,uBAGzC89P,EAAkB,SAACxvC,GAAD,OAAqBx/K,YAClDuuN,KACA,SAAC7sC,GAAD,OAAoCA,EAAOxwN,IAAIpC,OAAO0wN,QAM3CtyE,EAA2B,SAACh2B,GAAD,OAAiBl3E,YACvD6jG,KACA,SAACj5B,GAAD,OAAeA,GAAQA,EAAK78F,MAAMmpG,OAUvB+3I,EAAqB,kBAAMjvN,YACtC6jG,KACA,SAACj5B,GAAD,OAAeA,EAAK78F,MAAM,CAAC,cAAgB3I,qBAYhC8pP,EAA6B,kBAAMlvN,YAC9C6jG,KACA,SAACj5B,GAAD,aAAe97G,OAAM,UAAC87G,EAAK78F,MAAM,CAAC,YAAa3I,eAAK,YAA/B,aAAC,EAAoClc,UAqB/CimQ,EAAyB,kBAAMnvN,YAC1C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,oBAGzCk+P,EAAsB,SAAC9rC,GAAD,OAA2BtjL,YAC5D8M,KACA,SAAC3Y,GAAD,OAA8BA,EAAMpmB,MAAM,CAAC,YAAau1M,QAG7C+rC,EAA0B,kBAAMrvN,YAC3C8M,KACA,SAAC3Y,GAAD,OAA8BA,EAAMjjC,IAAI,qBAQ7Bo+P,EAA4B,kBAAMtvN,YAC7C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,oBAAsB6O,oBAG/DwvP,EAA4B,kBAAMvvN,YAC7C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,uBASzCs+P,EAA0C,SAAC7kK,GAAD,OAAoB3qD,YACzE8M,KAEA,SAAC3Y,GAAD,OAA0CA,EAAMpmB,MAAM,CAAC,wBAAyB48E,KAAY5qF,oBAQjF0vP,EAAiC,kBAAMzvN,YAClD8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,4BAGzCw+P,EAAuC,kBAAM1vN,YACxD8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMpmB,MAAM,CAAC,6BAA8B,kBAE1E4hP,EAA2C,kBAAM3vN,YAC5D8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,oCAYzC0+P,EAA6B,kBAAM5vN,YAC9C8M,KACA,SAAC3Y,GAAD,OAA0CA,EAAMjjC,IAAI,wBAUzC2+P,EAA0B,kBAAM7vN,YAC3C8M,IACAogG,EAAyB,CAAC,sBAC1BhX,eACA,SAAC/hG,EAAsCw2D,EAAQ/zC,GAA/C,OACEA,EAAS1lD,IAAI,YAAYwF,SAAS8rB,qCACjC2R,EAAMjjC,IAAI,oBAAoBwe,WAC/BllB,QAAQ2pC,EAAMpmB,MAAM,CAAC,wBAAyB48E,SAMrCmlK,EAAyC,SAACnlK,GAAD,OAAY3qD,YAChEwvN,EAAwC7kK,IACxC,SAAColK,GACC,OAAOA,EAAsB55P,KAAI,SAAC65P,GAAD,OAAiBA,EAAY9+P,IAAI,0BASzD++P,EAAkC,SAACtlK,EAAQw8B,GAAT,OAA2BnnF,YACxEwvN,EAAwC7kK,IACxC,SAAColK,GACC,IAAMG,EAAkBH,EAAsBhiP,MAAM,CAAC/R,OAAOmrH,GAAgB,oBACxEgpI,EAAepwP,cAAI,IACjBqwP,EAAuB,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAiBx3P,QAAO,SAAC23P,GAEvD,OADoBF,EAAaj/P,IAAIm/P,EAAetiP,MAAM,CAAC,eAAgB,mBAAqBsiP,EAAetiP,MAAM,CAAC,eAAgB,UAIpIoiP,EAAeA,EAAat7P,IAAIw7P,EAAetiP,MAAM,CAAC,eAAgB,mBAAqBsiP,EAAetiP,MAAM,CAAC,eAAgB,QAAQ,IAClI,MAIX,cAAOqiP,QAAP,IAAOA,OAAP,EAAOA,EAAyBj6P,KAAI,SAACk6P,EAAgB/mQ,GAAjB,OAA2B+mQ,EAAehzP,MAAM,CAAC,eAAgB,oBAAqB/T,UAGjHgnQ,EAAwB,SAAC3lK,EAAQw8B,EAAeopI,EAAenpI,GAAvC,OAAyDpnF,YAC5FwvN,EAAwC7kK,GACxCuiD,EAAyB,CAAC,WAAYqjH,EAAc,WAAYnpI,EAAc,oBAAqB,iBACnG,SAAC2oI,EAAkCS,GAIjC,OAAST,GAAyBA,IAA0BA,EAAsBrgP,UAAaqgP,EAAsBhiP,MAAM,CAAC/R,OAAOmrH,GAAgB,gBAAkBqpI,GAAezwP,oBAG3K0wP,EAAuC,SAAC9lK,GAAD,OAAY3qD,YAC9DwvN,EAAwC7kK,IACxC,SAAColK,GACC,OAAOA,EAAsB55P,KAAI,SAAC65P,GAAD,OAAiBA,EAAY9+P,IAAI,sBAQzDw/P,EAAiC,kBAAM1wN,YAClD8M,KACA,SAAC3Y,GAAD,OAAgBA,EAAMjjC,IAAI,8BAGfy/P,EAA0B,kBAAM3wN,YAC3CivN,KACA,SAAC5qC,GAAD,OAA+BA,EAASt2M,MAAM,CAAC,EAAG,qBAAuBhO,oBAQ9D6wP,EAAmC,kBAAM5wN,YACpD6jG,KACA,SAACj5B,GAAe,IAAD,EACPy5G,EAAWz5G,EAAK78F,MAAM,CAAC,aAK7B,OAJkB,iBAAGs2M,QAAH,IAAGA,OAAH,EAAGA,EAAU3pN,OAAM,SAACm2P,GAAwB,IAAD,EACrD7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,wBAAO8zH,QAAP,IAAOA,OAAP,EAAOA,EAAUtqH,OAAM,SAACypH,GAAD,OAAyBA,GAAWA,EAAQjzH,IAAI,wBAA2BizH,EAAQjzH,IAAI,iBAAmBizH,EAAQjzH,IAAI,2BAA7I,mBAFgB,aAQT4/P,EAAmC,kBAAM9wN,YACpD6jG,KACA,SAACj5B,GAAe,IAAD,EACPy5G,EAAWz5G,EAAK78F,MAAM,CAAC,aAK7B,OAJkB,iBAAGs2M,QAAH,IAAGA,OAAH,EAAGA,EAAUzpN,MAAK,SAACi2P,GAAwB,IAAD,EACpD7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,wBAAO8zH,QAAP,IAAOA,OAAP,EAAOA,EAAUpqH,MAAK,SAACupH,GAAD,OAAwBA,GAAWA,EAAQjzH,IAAI,iCAArE,mBAFgB,aAQT6/P,EAAmC,kBAAM/wN,YACpD6jG,KACA,SAACj5B,GACC,IAAMy5G,EAAWz5G,EAAK78F,MAAM,CAAC,aAW7B,OAVW,OAAGs2M,QAAH,IAAGA,OAAH,EAAGA,EAAUvrN,QAAO,SAACk4P,EAAQH,GACtC,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,OAAI8zH,EACKgsI,EAAShsI,EAASlsH,QAAO,SAACm4P,EAAe9sI,GAC9C,OAAOA,GAAWA,EAAQjzH,IAAI,uBAAyB+/P,EAAgB,EAAIA,IAC1E,GAEID,IAER,KACa,MAIPE,EAAwC,kBAAMlxN,YACzD6jG,KACA,SAACj5B,GACC,IAAMy5G,EAAWz5G,EAAK78F,MAAM,CAAC,aAW7B,OAVW,OAAGs2M,QAAH,IAAGA,OAAH,EAAGA,EAAUvrN,QAAO,SAACk4P,EAAQH,GACtC,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,OAAI8zH,EACKgsI,EAAShsI,EAASlsH,QAAO,SAACm4P,EAAe9sI,GAC9C,OAAOA,GAAWA,EAAQjzH,IAAI,wBAA0BizH,EAAQjzH,IAAI,iBAAmB,EAAI+/P,EAAgB,EAAIA,IAC9G,GAEID,IAER,KACa,MAKPG,EAA6B,kBAAMnxN,YAC9C4T,gBACA,SAACC,GAAD,OAA+B,UAAXA,O,6BCzYtB,IAAIigK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0GACD,SAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,kFACD,UAEJ3K,EAAQywH,QAAUq4I,G,iNCaZnqJ,EAAgDr1E,cAAiB,SAACyF,EAAOzuC,GAC7E,IACEgpH,EAiBEv6E,EAjBFu6E,MADF,EAkBIv6E,EAhBFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAOEoJ,EAPFpJ,MACAkqF,EAME9gF,EANF8gF,YAZF,EAkBI9gF,EALF9uC,eAbF,WAkBI8uC,EAJFyvE,kBAdF,MAce,GAdf,IAkBIzvE,EAHF0vE,wBAfF,MAeqB,GAfrB,IAkBI1vE,EAFF2iF,kBAhBF,SAiBKvoG,EAjBL,YAkBI4lB,EAlBJ,GAoBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,OAAI85K,qBAAWzkE,EAAWr1G,IACjB,2BAAKq8P,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAAEnkG,EAAcngH,GAAMq1G,EAAWr1G,OAEhE,2BAAKq8P,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAQZ,OALoC,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzFmjN,EAAgBnjN,cAIvB,eAAC,IAAD,yBAAapvC,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,mDACO94E,GAAS,CAACA,MAAO1lC,EAAO,UAAM0lC,EAAN,MAAkBA,IADjD,IAEE3yB,MAAO9Q,QAAQgjQ,IAAYlyP,GAASmyP,KAChCI,GACAp8O,GAJN,IAKE7oB,IAAKA,IACCilQ,EAAgB11I,aAAeA,IAAgB,CAACA,YAAa5vH,EAAO,UAAMslQ,EAAgB11I,aAAeA,EAArC,MAAuD01I,EAAgB11I,aAAeA,KAEjK6B,GAAc,cAAC,IAAD,CAAgB5rF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,YAK7DxmJ,O,6BC/Ef,2KA2CaoqJ,EAAmB,gBA+ChC,IAAMt3N,EAAkBkG,YAAyB,CAC/CqxN,aAAc3oI,YAA+B0oI,GAC7Cv5J,KAAMmzG,YAA2BomD,KAGpBjvL,4BACbgG,aAxDa,SAACC,GAAD,MAA+B,KAwDzB,CAAE8zC,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQjyE,GApBV,SAA4BjC,GAC1B,MAAO,CACLA,WACAy5N,WAAY,WACVz5N,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIijO,EACJh6N,MAAO,WAWA+qC,EAlDmC,SAAC/qC,GACjD,MAAgGA,EAAxFi6N,aAAgBE,EAAxB,EAAwBA,cAAen5O,EAAvC,EAAuCA,OAAQo5O,EAA/C,EAA+CA,aAAc3/H,EAA7D,EAA6DA,QAAWy/H,EAAwBl6N,EAAxBk6N,WAAYz5J,EAAYzgE,EAAZygE,KAAM5+E,EAAMme,EAANne,EACpFslB,EAAO,OAAGgzN,QAAH,IAAGA,IAAiB,CAACn5O,GAAkBa,EAAE,+BAAgCu4O,GAAc/4P,QAAO,SAAAid,GAAG,OAAIA,KAAK/G,KAAK,KAAKnW,OAAO,OAQxI,OANAm5B,aAAgB,WACTkmE,GACH9xD,WAAWurN,EAAY,OAExB,CAACz5J,IAGF,cAAC,IAAD,CACE2kB,SAAU40I,EACV5nL,SAAS,KACT4qD,YAAavC,EAHf,SAKE,cAAC,IAAD,UACE,eAAC,IAAD,CACEnrD,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SAJb,UAME,cAAC,IAAD,IACA,cAAC,IAAD,CAAmBh4C,GAAG,2BAA2By4E,QAAQ,KAAzD,SACGroE,e,6BCtEb,uvDAUIkzN,EALQ,SAAenkQ,GACzB,OAAO,WACL,OAAOA,GAKXokQ,EAAM,GAEF/1G,EAAO,aAWX,IAAI5tG,EAAW,SAAkBzgD,GAC/B,OAAOA,GAEyB,oBAAXV,QACgBA,OAAO+kQ,eAAgB/kQ,OAAO+kQ,cACrE,SAASC,EAAMhpQ,EAAO0O,EAAW+D,GAC/B,IAAK/D,EAAU1O,GACb,MAAM,IAAIkM,MAAMuG,GAGpB,IAAIw2P,EAAoB,SAA2B33O,EAAQC,GACzD6c,YAAS9c,EAAQC,GAEb7uB,OAAOkgB,uBACTlgB,OAAOkgB,sBAAsB2O,GAAQvgB,SAAQ,SAAUc,GACrDwf,EAAOxf,GAAKyf,EAAOzf,OAIrB6V,EAAU,SAAiBpa,EAAQ4E,GACrC,IAAIw4B,EAEJ,OAAQA,EAAO,IAAI/6B,OAAOrD,MAAMo+B,EAAMx4B,EAAI7E,IAAIC,KAEhD,SAASiG,EAAOrL,EAAO+1E,GACrB,IAAIz9E,EAAQ0H,EAAM2c,QAAQo5D,GAEtBz9E,GAAS,GACX0H,EAAMuL,OAAOjT,EAAO,GAGxB,SAAS67L,EAAKn1L,GACZ,IAAI+hQ,GAAS,EACb,OAAO,WACDA,IAIJA,GAAS,EACT/hQ,MAIJ,IAAIgiQ,EAAS,SAAgBzzN,GAC3B,MAAMA,GAGJ0zN,EAAU,SAAiBppQ,GAC7B,MAAO,CACLA,MAAOA,EACP4E,MAAM,IAIV,SAASsqB,EAAa7qB,EAAMglQ,EAAMv2P,QACnB,IAATu2P,IACFA,EAAOF,QAGI,IAATr2P,IACFA,EAAO,YAGT,IAAI7O,EAAW,CACb0mG,KAAM,CACJ73F,KAAMA,GAERzO,KAAMA,EACNilQ,MAAOD,EACPE,OAAQH,EACRI,gBAAgB,GASlB,MANsB,qBAAXxlQ,SACTC,EAASD,OAAOC,UAAY,WAC1B,OAAOA,IAIJA,EAET,SAASwlQ,EAASh3P,EAAOw6B,GACvB,IAAIy8N,EAAYz8N,EAAMy8N,UAGtBp9O,QAAQ7Z,MAAMA,GACd6Z,QAAQ7Z,MAAMi3P,GAEhB,IAAIC,EAAc,SAAqBj0N,GACrC,OAAO,IAAIxpC,MAAM,oMAAsMwpC,EAAM,OAO3Nk0N,EAAmB,SAA0Bl/P,GAC/C,OAAO3E,MAAMwG,MAAM,KAAM,IAAIxG,MAAM2E,KAEjCm/P,EAAmB,SAA0B56N,GAC/C,OAAO,SAAUzf,GAOf,OAAOyf,EAASvsC,OAAOyJ,eAAeqjB,EAAQs6O,IAAa,CACzD9pQ,OAAO,OAIT+pQ,EAAkB,SAAyB3jH,GAC7C,OAAOA,IAAQ4jH,KAEbC,EAAe,SAAsB7jH,GACvC,OAAOA,IAAQ8jH,KAEbC,EAAiB,SAAwB/jH,GAC3C,OAAO2jH,EAAgB3jH,IAAQ6jH,EAAa7jH,IAE9C,SAASgkH,EAA6BhrI,EAAOirI,GAC3C,IAAIjkQ,EAAO1D,OAAO0D,KAAKg5H,GACnBkrI,EAAalkQ,EAAKD,OAQtB,IACIokQ,EADAC,EAAiB,EAEjBC,EAAUtiQ,YAAMi3H,GAASwqI,EAAiBU,GAAc,GACxDI,EAAiB,GAsCrB,OA7BAtkQ,EAAK4K,SAAQ,SAAUpI,GACrB,IAAI+hQ,EAAY,SAAmBvkH,EAAKwkH,GAClCL,IAIAK,GAAST,EAAe/jH,IAC1BikH,EAAel6O,SACfk6O,EAAejkH,EAAKwkH,KAEpBH,EAAQ7hQ,GAAOw9I,IACfokH,IAjBmBF,IACrBC,GAAY,EACZF,EAAeI,OAoBjBE,EAAUx6O,OAAS4iI,EACnB23G,EAAe9hQ,GAAO+hQ,KAGxBN,EAAel6O,OAAS,WACjBo6O,IACHA,GAAY,EACZnkQ,EAAK4K,SAAQ,SAAUpI,GACrB,OAAO8hQ,EAAe9hQ,GAAKunB,cAK1Bu6O,EAET,SAASG,EAAY1jQ,GACnB,MAAO,CACL2L,KAAM3L,EAAG2L,MAAQ,YACjBi7C,SAAU+8M,EAAY3jQ,IAG1B,SAAS2jQ,EAAYC,GACnB,OAAOA,EAAaC,KAGtB,IAKIC,EAAa,CACfpkP,QAASgiP,EACTj/J,IAAKmpD,EACL7pI,KAAM6pI,GAGR,SAASm4G,EAAWn9I,EAAOo9I,QACX,IAAVp9I,IACFA,EAAQ,IAGV,IAAI57G,EAAM,IAAIpM,MAAMgoH,GAChB5nH,EAAS,EACTilQ,EAAY,EACZC,EAAW,EAEX36P,EAAO,SAAcq1J,GACvB5zJ,EAAIi5P,GAAarlG,EACjBqlG,GAAaA,EAAY,GAAKr9I,EAC9B5nH,KAGE+iB,EAAO,WACT,GAAc,GAAV/iB,EAAa,CACf,IAAI4/J,EAAK5zJ,EAAIk5P,GAIb,OAHAl5P,EAAIk5P,GAAY,KAChBllQ,IACAklQ,GAAYA,EAAW,GAAKt9I,EACrBg4C,IAIPqwB,EAAQ,WAGV,IAFA,IAAIk1E,EAAQ,GAELnlQ,GACLmlQ,EAAM56P,KAAKwY,KAGb,OAAOoiP,GAGT,MAAO,CACLzkP,QAAS,WACP,OAAiB,GAAV1gB,GAETyjG,IAAK,SAAam8D,GAId,IAAIwlG,EAHN,GAAIplQ,EAAS4nH,EACXr9G,EAAKq1J,QAIL,OAAQolG,GACN,KAzDc,EA0DZ,MAAM,IAAIj/P,MA3DA,8BA6DZ,KA1Dc,EA2DZiG,EAAIi5P,GAAarlG,EAEjBslG,EADAD,GAAaA,EAAY,GAAKr9I,EAE9B,MAEF,KA/De,EAgEbw9I,EAAe,EAAIx9I,EACnB57G,EAAMikL,IACNjwL,EAASgM,EAAIhM,OACbilQ,EAAYj5P,EAAIhM,OAChBklQ,EAAW,EACXl5P,EAAIhM,OAASolQ,EACbx9I,EAAQw9I,EACR76P,EAAKq1J,KAQb78I,KAAMA,EACNktK,MAAOA,GAIX,IAAIo1E,EAAO,WACT,OAAOP,GAQLQ,EAAU,SAAiB19I,GAC7B,OAAOm9I,EAAWn9I,EA/FI,IAiGpB29I,EAAY,SAAmBC,GACjC,OAAOT,EAAWS,EAjGK,IA6GrBC,EAAO,OACPC,EAAM,MACNC,EAAM,MACNC,EAAO,OACPC,EAAO,OACPC,EAAM,MACNC,EAAO,OACPC,EAAO,OACPC,EAAS,SACTC,EAAS,SACTC,EAAiB,iBACjBC,EAAY,YACZC,EAAQ,QACRC,EAAc,cACdC,EAAc,cAuBdC,EAAa,SAAoBnoQ,EAAMgnC,GACzC,IAAIb,EAEJ,OAAOA,EAAO,IAASiiO,MAAM,EAAMjiO,EAAKkiO,YAAa,EAAOliO,EAAKnmC,KAAOA,EAAMmmC,EAAKa,QAAUA,EAASb,GAOpGmiO,EAAS,SAAgBC,GAK3B,OAAOJ,EAAWT,EAAM99N,YAAS,GAAI2+N,EAAIvhO,QAAS,CAChDwhO,UAAU,MAGd,SAAS9jP,EAAKmF,EAAkB4+O,GAS9B,YARyB,IAArB5+O,IACFA,EAAmB,KAOjB4qK,YAAQ5qK,GACHs+O,EAAWf,EAAM,CACtB3yE,QAAS5qK,IAIT6+O,YAAU7+O,IAAqB8+O,YAASF,IAAqBh0E,YAAQg0E,GAChEN,EAAWf,EAAM,CACtBt9O,QAASD,EACT4qK,QAASg0E,IAIT3+O,YAAQD,GACHs+O,EAAWf,EAAM,CACtBt9O,QAASD,SAITmE,EASN,SAASo3E,EAAIwjK,EAAW59O,GAiBtB,OANI69O,YAAM79O,KACRA,EAAS49O,EAETA,OAAYhtQ,GAGPusQ,EAAWd,EAAK,CACrBv9O,QAAS8+O,EACT59O,OAAQA,IAGZ,IAAI89O,EAAa,WACf,IAAIP,EAAMnjK,EAAIr9F,WAAM,EAAQvE,WAE5B,OADA+kQ,EAAIvhO,QAAQgY,SAAU,EACfupN,GAET,SAAShiE,EAAIwiE,GACX,IAAIR,EAAMJ,EAAWb,EAAKyB,GAE1B,OADAR,EAAIF,YAAa,EACVE,EAET,SAASngK,GAAK2gK,GACZ,IAAIR,EAAMJ,EAAWZ,EAAMwB,GAE3B,OADAR,EAAIF,YAAa,EACVE,EAkCT,SAASS,GAAoBC,EAAcn+O,GACzC,IACInoB,EADAqG,EAAU,KAmBd,OAhBIghB,YAAKi/O,GACPtmQ,EAAKsmQ,GAEDtlQ,YAAMslQ,IACRjgQ,EAAUigQ,EAAa,GACvBtmQ,EAAKsmQ,EAAa,KAElBjgQ,EAAUigQ,EAAajgQ,QACvBrG,EAAKsmQ,EAAatmQ,IAGhBqG,GAAW3C,YAAO1D,IAAOqnB,YAAKhhB,EAAQrG,MACxCA,EAAKqG,EAAQrG,KAIV,CACLqG,QAASA,EACTrG,GAAIA,EACJmoB,KAAMA,GAQV,SAAShqB,GAAKmoQ,GACZ,IAAK,IAAIp+O,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,GAAKvnB,UAAUunB,GAS7B,OAAOo9O,EAAWX,EAAMwB,GAAoBC,EAAcn+O,IA0B5D,SAASM,GAAK69O,GAQZ,IAAK,IAAI38O,EAAQ9oB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM+qB,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGzB,EAAKyB,EAAQ,GAAK/oB,UAAU+oB,GAG9B,OAAO47O,EAAWT,EAAMsB,GAAoBC,EAAcn+O,IAE5D,SAASo+O,GAAMD,GAKb,IAAK,IAAIhoH,EAAQz9I,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM0/I,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGp2H,EAAKo2H,EAAQ,GAAK19I,UAAU09I,GAG9B,OAAOonH,EAAOl9O,GAAKrjB,WAAM,EAAQ,CAACkhQ,GAAc79P,OAAO0f,KAEzD,SAASvJ,GAAK4nP,GAeZ,OAAOhB,EAAWR,EAAMwB,GAE1B,SAASx9O,GAAOw9O,GAmBd,YAlBoB,IAAhBA,IACFA,EAAcC,KAiBTjB,EAAWP,EAAQuB,GAE5B,SAAStpK,GAAOtvD,QACG,IAAbA,IACFA,EAAWoQ,GAGb,IAAK,IAAI0oN,EAAQ7lQ,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM8nQ,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGx+O,EAAKw+O,EAAQ,GAAK9lQ,UAAU8lQ,GAQ9B,OAAOnB,EAAWN,EAAQ,CACxBt3N,SAAUA,EACVzlB,KAAMA,IAOV,SAASy+O,GAAcC,EAAWC,GAUhC,OAAOtB,EAAWL,EAAgB,CAChCrzE,QAAS+0E,EACTx2G,OAAQy2G,IAGZ,SAASC,KACP,OAAOvB,EAAWJ,EAAW,IAuB/B,IAAItjK,GAEJ3jG,GAAK8gB,KAAK,KAAM+nP,M,i1BCnpBZnqN,E,8BChBSG,EAAsB,YACtBiqN,EAAkB,CAAC,OAAQC,IAAiB,UAC5CC,EAA2B,CAAC,OAAQC,IAA0B,U,4CDgB9DtqN,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,yDAAmH,CACjH7Y,UAGGp0B,kBAUIs3P,EAAkB,SAACngJ,GAAD,OAAiBl3E,aAC9C,SAAC7L,GAAD,OAAgBA,EAAMpmB,MAAM,CAAC,OAAQupP,IAAe,cACpD,SAAAnjO,GAAK,OAAI+iF,EAAKloH,OAAL,OAAcmlC,QAAd,IAAcA,OAAd,EAAcA,EAAOpmB,MAAP,YAAiBmpG,IAAS9xG,qBAGtCmyP,EAAyB,SAACrgJ,GAAD,OAAiBl3E,aACrD,SAAC7L,GAAD,OAAgBA,EAAMpmB,MAAM,CAAC,OAAQupP,IAAe,eACpD,SAAAnjO,GAAK,OAAI+iF,EAAKloH,OAAL,OAAcmlC,QAAd,IAAcA,OAAd,EAAcA,EAAOpmB,MAAP,YAAiBmpG,IAAS9xG,qBAGtCoyP,EAAoB,SAACtgJ,GAAD,IAAcugJ,EAAd,uDAAyBryP,iBAAzB,OAAoC46B,aACnE,SAAC7L,GAAD,OAAgBA,EAAMpmB,MAAN,YAAgBkpP,OAChC,SAAA9iO,GAAK,OAAI+iF,EAAKloH,QAAUmlC,EAAQA,EAAMpmB,MAAN,YAAgBmpG,IAASugJ,MAG9CC,EAA4B,kBAAM13N,aAC7C,SAAC7L,GAAD,OAAgBA,EAAMpmB,MAAN,YAAgBopP,OAChC,SAAAhjO,GAAK,OAAKA,MAGCwjO,EAAqC,SAAC,GAAD,IAAG9G,EAAH,EAAGA,QAASzpI,EAAZ,EAAYA,aAAZ,OAA0EpnF,YAC1Hw3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,QAAqDA,SACiBlrC,IAAlEkrC,EAAMpmB,MAAM,CAAC8iP,EAAS,SAAU,+BAC9B18N,EAAMpmB,MAAM,CAAC8iP,EAAS,SAAU,8BAA8Bj2P,MAAK,SAAAzK,GAAC,OAAIA,IAAMi3H,UAKzEwwI,EAA4B,SAAC,GAAD,IAAG/G,EAAH,EAAGA,QAAH,OAAsC7wN,YAC7Ew3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,OAA0D,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOpmB,MAAM,CAAC8iP,EAAS,SAAU,gBAAgB,MAG3FgH,EAA8C,kBAAM73N,YAC/D8M,KACA,SAAC3Y,GAAD,OAA0D,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOjjC,IAAI,wCAAwC,MAQ7F4mQ,EAAsC,SAACjH,GAAD,OAAqB7wN,YACtEw3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,OAA0D,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOpmB,MAAM,CAAC8iP,EAAS,SAAU,gCAAiC,OAG5GkH,EAAsC,SAACxH,EAAsBnpI,GAAvB,OAAgDpnF,YACjGw3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,OAA0D,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOpmB,MAAM,CAACwiP,EAAc,SAAU,WAAYnpI,EAAc,kBAAmB,OAG7H4wI,EAA4B,SAACnH,GAAD,OAAqB7wN,YAC5Dw3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,8BAAqDA,QAArD,IAAqDA,OAArD,EAAqDA,EAAOpmB,MAAM,CAAC8iP,EAAS,sBAA5E,aAGWoH,EAA2B,SAACpH,GAAD,OAAqB7wN,YAC3Dw3N,EAAkB,CAAC,cACnB,SAACrjO,GAAD,cAAqDA,QAArD,IAAqDA,OAArD,EAAqDA,EAAOpmB,MAAM,CAAC8iP,EAAS,SAAU,gBAG3EqH,EAAyB,kBAAMl4N,YAC1C8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,oBASpDinQ,EAA2B,SAAC5H,GAAD,OAA0BvwN,YAChE8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,oBAAsBq/P,MAG1E6H,EAA4B,kBAAMp4N,YAC7C8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,sBAIpDmnQ,EAAiC,kBAAMr4N,YAClD8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,0BAA2B,MAQ/EonQ,EAA8B,kBAAMt4N,YAC/C8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,sBAAwBqnQ,IAAcrnQ,IAAI,yBAwB9FsnQ,EAA4B,kBAAMx4N,YAC7Cw3N,EAAkB,CAAC,aACnBiB,IACAC,KACA,SAACr0C,EAA2Bs0C,EAA4BC,GACtD,IAAIC,EAAgB,EAChBC,EAAgB,EAChBC,EAAO,EAsBX,OArBcvuQ,QAAQ65N,GAAYA,EAASvrN,QAAO,SAACutI,EAAKwqH,EAASvnQ,GAAW,IAAD,IAKlE,EAFP,OAFAuvQ,GAAa,oBAAKhI,EAAQ3/P,IAAI,mBAAjB,aAAK,EAAyBhI,YAA9B,QAAsC,EACnD4vQ,GAAiB,EACbD,GAAiBF,GAAsBG,GAAiBF,EACnDvyH,EAAIxxI,IAAIkkQ,EAAM1yH,EAAIn1I,IAAI6nQ,GAAQ1yH,EAAIn1I,IAAI6nQ,GAAMx/P,KAAKjQ,GAAS8b,eAAK,CAAC9b,MAElEkB,QAAO,UAAC67I,EAAIn1I,IAAI6nQ,UAAT,aAAC,EAAe7vQ,SAMxB6vQ,EACFF,EAAgBhI,EAAQ3/P,IAAI,YAAYhI,KACxC4vQ,EAAgB,EAChBzyH,EAAMA,EAAIxxI,IAAIkkQ,EAAM1yH,EAAIn1I,IAAI6nQ,GAAQ1yH,EAAIn1I,IAAI6nQ,GAAMx/P,KAAKjQ,GAAS8b,eAAK,CAAC9b,OARtE+8I,EAAMA,EAAIxxI,IAAIkkQ,EAAM1yH,EAAIn1I,IAAI6nQ,GAAQ1yH,EAAIn1I,IAAI6nQ,GAAMx/P,KAAKjQ,GAAS8b,eAAK,CAAC9b,KACtEyvQ,IACAF,EAAgB,EAChBC,EAAgB,GAOXzyH,KAER9vH,iBAAO,KAAOA,iBAAO,QAMfkiP,EAA+B,kBAAMz4N,YAChD8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,0BAGpDwnQ,EAA+B,kBAAM14N,YAChD8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,0BAGpD8nQ,EAAuC,kBAAMh5N,YACxD8M,KACA,SAAC3Y,GAAD,OAAqDA,EAAMjjC,IAAI,kCAGpD+nQ,EAAwB,kBAAMj5N,YACzC8M,KACA,SAAC3Y,GAAD,OAAWA,EAAMjjC,IAAI,qBAGVgoQ,EAA0B,kBAAMl5N,YAC3C8M,KACA,SAAC3Y,GAAD,OAAWA,EAAMjjC,IAAI,qBAqBVioQ,EAA4B,kBAAMn5N,YAC7C8M,KACA,SAAC3Y,GAAD,OAAqD3pC,QAAO,OAAC2pC,QAAD,IAACA,OAAD,EAACA,EAAOjjC,IAAI,6BAiC7DkoQ,EAAqC,kBAAMp5N,YACtD8M,KACA,SAAC3Y,GAAD,8BAAqDA,QAArD,IAAqDA,OAArD,EAAqDA,EAAOjjC,IAAI,mCAAhE,QAA+F,SAmBpFmoQ,EAAiC,kBAAMr5N,YAClDs5N,cACAl1H,cACAozH,EAAkB,CAAC,0BAA2B,OAC9C,SAAC+B,EAAqCzuH,EAAsB0uH,GAA5D,OAA+FA,EAC3FD,EAAezqP,MAAK,SAACi7K,GAAD,OAAcA,EAAS74L,IAAI,QAAUsoQ,KACzDD,EAAezqP,MAAK,SAACi7K,GAAD,uBAAcA,EAAS74L,IAAI,2BAA3B,aAAc,EAAkCwF,SAASo0I,W,gBEnTnFziJ,EAAOC,QAAUC,EAAQ,O,+4BCQrBkxQ,EAEJ,WACE,SAASA,IACP,IAAItgO,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAElF0pB,YAAgBptB,KAAMssQ,GAEtBtsQ,KAAKgsC,QAAUA,EAoCjB,OAjCAyL,YAAa60N,EAAmB,CAAC,CAC/BhoQ,IAAK,UACL5I,MAAO,SAAiB4qC,GAEtB,IAAIimO,EAAgB,IAAI35P,IAExB5S,KAAKwsQ,eAAiB,IAAIC,IAE1B,IAAIC,EAAoBC,cACxB,OAAOloO,IAAMwB,cAAc2mO,IAAgB9iO,YAAS,CAClDyiO,cAAeA,EACfM,wBAAyBH,EACzBF,eAAgBxsQ,KAAKwsQ,gBACpBxsQ,KAAKgsC,SAAU1F,KAEnB,CACDhiC,IAAK,WACL5I,MAAO,WACL,OAAOsE,KAAKwsQ,eAAiBxsQ,KAAKwsQ,eAAevrQ,WAAa,KAE/D,CACDqD,IAAK,kBACL5I,MAAO,SAAyBwuC,GAC9B,OAAOzF,IAAMwB,cAAc,QAAS6D,YAAS,CAC3C7I,GAAI,kBACJ38B,IAAK,kBACLwoQ,wBAAyB,CACvBC,OAAQ/sQ,KAAKiB,aAEdipC,QAIAoiO,EA1CT,GA6CeA,I,wEChDR,SAASU,IACd,IAAIhhO,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC9Eo5M,EAAe9wK,EAAQ8wK,aAEvB9tF,EAAY,SAAmBr1E,GAOjC,IAAIszN,EAAYxoO,IAAM8E,YAAW,SAAmBW,EAAOzuC,GACzD,IAAIyxQ,EAAWhjO,EAAMgjO,SACjBvsP,EAAQu8B,YAAyBhT,EAAO,CAAC,aAEzCgxC,EAAQwjD,eAAco+E,EAC1B,OAAOr4K,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CoxC,MAAOA,EACPz/E,IAAKyxQ,GAAYzxQ,GAChBklB,OA2BL,OAPAwsP,IAAqBF,EAAWtzN,GAOzBszN,GAGT,OAAOj+I,EAKT,IACeA,EADCg+I,K,+hBChDJI,E,iBAAAA,K,8BAAAA,E,kDAAAA,E,4CAAAA,E,4BAAAA,E,gDAAAA,E,0CAAAA,E,wCAAAA,E,oBAAAA,E,wCAAAA,E,kCAAAA,E,gCAAAA,E,sCAAAA,E,wDAAAA,E,4EAAAA,E,0CAAAA,E,0CAAAA,E,mCAAAA,M,KAoBL,IAAMxvJ,EAEX,WACS12E,GAGN,yBAHMA,UAGP,KALchnC,KAAOktQ,EAAqBC,4BAQjCC,EAEX,WACSpmO,GAIN,yBAJMA,UAIP,KANchnC,KAAOktQ,EAAqBG,sCASjCtuJ,EAAb,sCACkB/+G,KAAOktQ,EAAqBI,eAiCjCC,EAGX,WACSvmO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBM,yBASjCC,EAGX,WACSzmO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBQ,sBASjCjwJ,EAGX,WACSz2E,GACN,yBADMA,UACP,KAJchnC,KAAOktQ,EAAqBS,cAQjCC,EAGX,WACS5mO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBW,wBASjCC,EAGX,WACS9mO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBa,qBASjCjwJ,EAGX,WACS92E,GACN,yBADMA,UACP,KAJchnC,KAAOktQ,EAAqBc,UAOjCC,EAGX,WACSjnO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBgB,oBASjCC,EAGX,WACSnnO,GAGN,yBAHMA,UAGP,KANchnC,KAAOktQ,EAAqBkB,iBASjCC,EAAb,sCACkBruQ,KAAOktQ,EAAqBoB,qBAGjCC,EAAb,sCACkBvuQ,KAAOktQ,EAAqBsB,qBAGjCC,EAAb,sCACkBzuQ,KAAOktQ,EAAqBwB,kB,8BC5K9C,qGAoJe35L,sBACbgG,aArGa,SAACC,GAAD,OAAkB2zL,YAAa,CAC5C7yG,IAAK,CACH3oC,aAAcn4C,EAAMZ,QAAQ,MAE9B/iE,KAAM,GAENu3P,cAAe,GAEfl9I,KAAM,GAENm9I,YAAa,CACX9oK,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B8pJ,iBAAkB,CAChB/oK,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B0G,KAAM,QAoFO52C,EAhF6B,SAAC,GAiBtC,IAhBL3uC,EAgBI,EAhBJA,SACA4yC,EAeI,EAfJA,QAeI,IAdJu4C,gBAcI,MAdO,KAcP,EAbJG,EAaI,EAbJA,KAaI,IAZJq9I,eAYI,MAZM,KAYN,MAXJh2L,kBAWI,MAXS,SAWT,MAVJa,eAUI,MAVM,aAUN,MATJo1L,uBASI,MATc,aASd,EARJC,EAQI,EARJA,cACAC,EAOI,EAPJA,WAOI,IANJvjJ,YAMI,MANG,GAMH,MALJnS,eAKI,MALM,QAKN,MAJJ21J,kBAII,aAHJ9zL,cAGI,aAFJ+zL,eAEI,MAFM,GAEN,MADJh1L,eACI,MADM,EACN,EACEY,EAAQwjD,cAIR6wI,EAAa,OAAGH,QAAH,IAAGA,IAAH,sBAnEF,GAmEE,aACgB90L,EAAO,aAASY,EAAMZ,QAAQA,GAAvB,MAAsC,GAD7D,KAEnB,OACA,eAAC,IAAD,CACEd,WAAW,EACXP,WAAYA,EACZa,QAASA,EACTV,UAAWi2L,GAAc9zL,EAASgyC,IAAWr0C,EAAQ8iF,IAAK9iF,EAAQ3hE,MAAQ2hE,EAAQ3hE,KAClFijE,KAAK,SALP,UAQgB,aAAZV,EACI,cAAC,IAAD,CACEF,MAAM,EACNJ,WAAW,EACXP,WAAY,SACZG,UAAWF,EAAQ41L,cACnBxzJ,MAAO,CACLhgC,MArFK,IA+ET,SAUIs2C,EACA,cAAC,IAAD,CACE71H,KAAM01H,EACNG,KAAMA,EACNx4C,UAAWm0C,IAAWr0C,EAAQ61L,YAAa71L,EAAQ04C,QAEnDq9I,EAAUxqO,eAAmBwqO,EAAS,CACpC9nJ,SAAU,QACV/tC,UAAWm0C,IAAWr0C,EAAQ61L,YAAa71L,EAAQ04C,KAAMq9I,EAAQ/kO,MAAMkvC,aACpE,OAGX,KAEN,cAAC,IAAD,CACEQ,MAAM,EACNJ,WAAW,EACXM,QAASo1L,EACTj2L,WAAYk2L,IAAkB7oO,EAAW,aAAe,UACxDg0C,QAASA,EACTghC,MAAO,CACLhgC,MAAOi0L,GAPX,SAWIjpO,GAEI,cAAC,IAAD,CAAS4jF,MAAOolJ,GAAW,GAAInlJ,UAAU,SAAzC,SACE,cAAC,IAAD,CAAYzQ,QAASA,EAAStgC,UAAWm0C,IAAWr0C,EAAQ81L,iBAAkB91L,EAAQ2yC,MAAtF,SAA8FA,e,6BC5I5G,wEAQA,SAAS59G,EAAUC,EAAWmjC,GAC5B,IAAInjC,EAAJ,CACA,IAAIC,EAAQ,IAAIvG,MAAM,aAAeypC,GAGrC,MAFAljC,EAAMqhQ,YAAc,EACpBrhQ,EAAMK,KAAO,sBACPL,GAOR,IAAIy4B,EACJnC,IAAMC,gBAuBN,IAUImc,EAAW,SAAkBzgD,GAC/B,OAAOA,GAGT,SAASqvQ,EAAeppO,GACtB,IAAIqpO,EAAerpO,EAAK6Y,QACpBA,OAA2B,IAAjBwwN,EAA0B7uN,EAAW6uN,EAC/CC,EAAUtpO,EAAK+7F,OACfwtI,EAASvpO,EAAKupO,OAElB,SAASC,EAASC,EAAqB9jO,QACrB,IAAZA,IACFA,EAAU,IAGZ,IAAI7tB,EAnCR,SAA4BA,GAC1B,MAAoB,oBAATA,EACF,CACL4xP,aAAc5xP,GAIXA,EA4BM6xP,CAAmBF,GAC1B/sQ,EAAQ,GAEZ,SAASktQ,EAAa/lO,GACpB,OAAI8B,EAAQ07K,SACH17K,EAAQ07K,SAASx9K,GAGtB/rB,EAAK+gC,QACA/gC,EAAK+gC,QAAQhV,GAGf,KAGT,IAxCiDyP,EAwC7Cu2N,EAEJ,SAAUC,GAYR,SAASD,EAAchmO,GACrB,IAAIyN,EAYJ,OAVAA,EAAQw4N,EAAiBnvQ,KAAKhB,KAAMkqC,IAAUlqC,MACxCgnC,MAAQ,CACZpzB,OAAQ,KACRzF,MAAO,KACPi5F,SAAS,EACTsgH,SAAUuoD,EAAa/lO,IAEzByN,EAAMqqG,QAAU,KAChB/zI,GAAWi8B,EAAMkmO,kBAAoBjyP,EAAKkyP,YAAa,4DAEnDnmO,EAAMkmO,mBAEY,IAAhBpkO,EAAQskO,MAMZnyP,EAAK4xP,aAAa7lO,GAAlB,OAAkC,eAElCyN,EAAM44N,WAENrmO,EAAMkmO,iBAAiBI,SAASryP,EAAKsyP,UAAUvmO,KATtCm4E,YAAuB1qE,KAgB9Bx5B,EAAKuyP,SAAWvyP,EAAKuyP,QAAQxmO,IAC/ByN,EAAM44N,WAGD54N,GA/CTg5N,YAAeT,EAAeC,GAE9BD,EAAcU,yBAA2B,SAAkC1mO,EAAOlD,GAChF,IAAI0gL,EAAWuoD,EAAa/lO,GAE5B,OAAOJ,YAAS,GAAI9C,EAAO,CACzB0gL,SAAUA,EACVtgH,QAASpgE,EAAMogE,SAAWpgE,EAAM0gL,WAAaA,KA2CjD,IAAIjiL,EAASyqO,EAAc/xQ,UAuJ3B,OArJAsnC,EAAOorO,kBAAoB,WACzB7wQ,KAAKmjH,SAAU,EAEXnjH,KAAKgnC,MAAMogE,QACbpnG,KAAK8wQ,YACK9wQ,KAAKgnC,MAAM74B,OACrBnO,KAAK+wQ,iBAITtrO,EAAOurO,mBAAqB,SAA4B3yJ,EAAW4yJ,GAE5D7yQ,OAAOkH,GAAG2rQ,EAAUvpD,SAAU1nN,KAAKgnC,MAAM0gL,YAC5C1nN,KAAKgiJ,QAAU,KACfhiJ,KAAK8wQ,cAITrrO,EAAOyrO,qBAAuB,WAC5BlxQ,KAAKmjH,SAAU,GAGjB19E,EAAO0rO,aAAe,SAAsB1mP,EAAWma,GACjD5kC,KAAKmjH,SACPnjH,KAAK4iH,SAASn4F,EAAWma,IAI7Ba,EAAOsrO,cAAgB,WACrB,IAAI3tJ,EAASpjH,KAET4vQ,GACF/2N,YAAW,WACT+2N,EAAOxsJ,EAAOp8E,MAAMpzB,OAAQwvG,EAAOl5E,WAKzCzE,EAAO8qO,SAAW,WAChB,GAAKvwQ,KAAKgnC,MAAMogE,QAEhB,IACE,IAAIgqK,EAAejzP,EAAKkyP,YAAYrwQ,KAAKkqC,OACrCt2B,EAASsrC,EAAQkyN,EAAc,CACjCC,SAAUA,IAEZrxQ,KAAKgnC,MAAMpzB,OAASA,EACpB5T,KAAKgnC,MAAMogE,SAAU,EACrB,MAAOj5F,GACPnO,KAAKgnC,MAAM74B,MAAQA,IAIvBs3B,EAAO6rO,YAAc,WACnB,OAAOrB,EAAajwQ,KAAKkqC,QAAUv7B,KAAKC,UAAU5O,KAAKkqC,QAGzDzE,EAAO8rO,SAAW,WAChB,OAAOxuQ,EAAM/C,KAAKsxQ,gBAGpB7rO,EAAO+rO,SAAW,SAAkB91Q,GAClCqH,EAAM/C,KAAKsxQ,eAAiB51Q,GAG9B+pC,EAAOqrO,UAAY,WACjB,IAAIvtJ,EAASvjH,KAEb,IAAKA,KAAKgiJ,QAAS,CACjB,IAAIz/B,EAAcviH,KAAKkqC,MAGnBA,GAFmBq4E,EAAY6tJ,iBAChB7tJ,EAAYkvJ,aACnB/nO,YAA8B64E,EAAa,CAAC,mBAAoB,kBAE5EviH,KAAKgiJ,QAAU7jI,EAAK4xP,aAAa7lO,GAAOqsC,MAAK,SAAU66L,GACrD,IAAIx9P,EAASsrC,EAAQkyN,EAAc,CACjCC,SAAUA,IAGRrlO,EAAQ0lO,UACVnuJ,EAAOiuJ,SAAS59P,GAGlB2vG,EAAO4tJ,aAAa,CAClBv9P,OAAQsrC,EAAQkyN,EAAc,CAC5BC,SAAUA,IAEZjqK,SAAS,IACR,WACD,OAAOmc,EAAOwtJ,sBAfH,OAiBH,SAAU5iQ,GACpBo1G,EAAO4tJ,aAAa,CAClBhjQ,MAAOA,EACPi5F,SAAS,OAKf,OAAOpnG,KAAKgiJ,SAGdv8G,EAAO28F,OAAS,WACd,IAAI5e,EAAexjH,KAAKkqC,MACpBunO,EAAejuJ,EAAaiuJ,aAC5BE,EAAenuJ,EAAa8mJ,SAE5BpgO,GADmBs5E,EAAa4sJ,iBACxB1mO,YAA8B85E,EAAc,CAAC,eAAgB,WAAY,sBAEjFC,EAAczjH,KAAKgnC,MACnB74B,EAAQs1G,EAAYt1G,MACpBi5F,EAAUqc,EAAYrc,QACtBxzF,EAAS6vG,EAAY7vG,OAEzB,GAAIo4B,EAAQ0lO,SAAU,CACpB,IAAIE,EAAe5xQ,KAAKuxQ,WACxB,IAAKK,EAAc,MAAM5xQ,KAAK8wQ,YAC9B,OAAOnB,EAAQ,CACbvoK,SAAS,EACTkjK,SAAU,KACV12P,OAAQg+P,EACR5lO,QAASA,EACT9B,MAAOJ,YAAS,GAAII,EAAO,CACzBzuC,IAAKg2Q,MAKX,GAAItjQ,EACF,MAAMA,EAGR,IAAIm8P,EAAWqH,GAAgB3lO,EAAQs+N,UAAY,KAEnD,OAAIljK,EACKkjK,EAGFqF,EAAQ,CACbvoK,QAASA,EACTkjK,SAAUA,EACV12P,OAAQA,EACRo4B,QAASA,EACT9B,MAAOJ,YAAS,GAAII,EAAO,CACzBzuC,IAAKg2Q,OAKJvB,EA1MT,CA2MEzrO,IAAMkV,WAEJk4N,GAvP6Cl4N,EAuPFu2N,EAtP1C,SAAUhmO,GACf,OAAOzF,IAAMwB,cAAcW,EAAQ2D,SAAU,MAAM,SAAUunO,GAC3D,OAAOrtO,IAAMwB,cAAc0T,EAAWv7C,OAAO+8C,OAAO,CAClDi1N,iBAAkB0B,GACjB5nO,SAmPDmnO,EAAW5sO,IAAM8E,YAAW,SAAUW,EAAOzuC,GAC/C,OAAOgpC,IAAMwB,cAAc4rO,EAAuBzzQ,OAAO+8C,OAAO,CAC9Ds2N,aAAch2Q,GACbyuC,OAWL,OARAmnO,EAASljH,QAAU,SAAUjkH,GAC3B/rB,EAAK4xP,aAAa7lO,IAGpBmnO,EAASvoH,KAAO,SAAU5+G,GACxB,OAAO/rB,EAAK4xP,aAAa7lO,IAGpBmnO,EAST,MAAO,CACLxB,SAAUA,EACVkC,KARF,SAAc5zP,EAAM6tB,GAClB,OAAO6jO,EAAS1xP,EAAM2rB,YAAS,GAAIkC,EAAS,CAC1C0lO,UAAU,OAsBhB,IAAIM,EAEJvC,EAAe,CACbvwN,QAfF,SAA0BkyN,EAAc/qO,GACtC,IAAIgrO,EAAWhrO,EAAKgrO,SAEhB13N,EAAYy3N,EAAa10D,WAAa00D,EAAY,QAAcA,EAAY,SAAeA,EAI/F,OAHAjE,IAAqBkE,EAAU13N,EAAW,CACxCw0G,SAAS,IAEJx0G,GASPyoF,OAAQ,SAAgB/7F,GACtB,IAAIsT,EAAYtT,EAAKzyB,OACjBs2B,EAAQ7D,EAAK6D,MACjB,OAAOzF,IAAMwB,cAAc0T,EAAWzP,MAGtC2lO,EAAWmC,EAAgBnC,SAC3BkC,EAAOC,EAAgBD,KAIvBE,EAEJxC,EAAe,CACbG,OAAQ,SAAgBh8P,EAAQs2B,GAC1Bt2B,GAAUs2B,EAAMunO,eACgB,oBAAvBvnO,EAAMunO,aACfvnO,EAAMunO,aAAa79P,GAEnBs2B,EAAMunO,aAAa3pO,QAAUl0B,IAInCwuH,OAAQ,SAAgB/7F,GACtB,IAAIzyB,EAASyyB,EAAKzyB,OACdwzF,EAAU/gE,EAAK+gE,QACfl9D,EAAQ7D,EAAK6D,MAEjB,OAAKk9D,GAAWl9D,EAAM5D,SACb4D,EAAM5D,SAAS1yB,GAGjB,QAGPs+P,EAAaD,EAAkBpC,SAC/BsC,EAASF,EAAkBF,KAkE/B,IAAIK,EAAavC,EACjBuC,EAAWC,IAAMH,EACJH,EACNM,IAAMF,EAGEC,O,6BC7bf,8kBAeIE,EAAqB,SAA4B9jQ,GACnD,IAAItF,EAAUw7B,cAEd,OADAx7B,EAAQqf,YAAc/Z,EACftF,GAGLA,EAEJopQ,EAAmB,UAMfC,EAEJ,SAAUpC,GAYR,SAASoC,EAAOroO,GACd,IAAIyN,EA0BJ,OAxBAA,EAAQw4N,EAAiBnvQ,KAAKhB,KAAMkqC,IAAUlqC,MACxCgnC,MAAQ,CACZyiB,SAAUvf,EAAMomF,QAAQ7mE,UAO1B9R,EAAM66N,YAAa,EACnB76N,EAAM86N,iBAAmB,KAEpBvoO,EAAMwoO,gBACT/6N,EAAMg5E,SAAWzmF,EAAMomF,QAAQM,QAAO,SAAUnnE,GAC1C9R,EAAM66N,WACR76N,EAAMirE,SAAS,CACbn5D,SAAUA,IAGZ9R,EAAM86N,iBAAmBhpN,MAKxB9R,EAtCTg5N,YAAe4B,EAAQpC,GAEvBoC,EAAOI,iBAAmB,SAA0BxmN,GAClD,MAAO,CACL49D,KAAM,IACNvoB,IAAK,IACL7uD,OAAQ,GACRy1K,QAAsB,MAAbj8J,IAkCb,IAAI1mB,EAAS8sO,EAAOp0Q,UA4BpB,OA1BAsnC,EAAOorO,kBAAoB,WACzB7wQ,KAAKwyQ,YAAa,EAEdxyQ,KAAKyyQ,kBACPzyQ,KAAK4iH,SAAS,CACZn5D,SAAUzpD,KAAKyyQ,oBAKrBhtO,EAAOyrO,qBAAuB,WACxBlxQ,KAAK2wH,UAAU3wH,KAAK2wH,YAG1BlrF,EAAO28F,OAAS,WACd,OAAO39F,IAAMwB,cAAc/8B,EAAQk9B,SAAU,CAC3CE,SAAUtmC,KAAKkqC,MAAM5D,UAAY,KACjC5qC,MAAO,CACL40H,QAAStwH,KAAKkqC,MAAMomF,QACpB7mE,SAAUzpD,KAAKgnC,MAAMyiB,SACrBlb,MAAOgkO,EAAOI,iBAAiB3yQ,KAAKgnC,MAAMyiB,SAAS0C,UACnDumN,cAAe1yQ,KAAKkqC,MAAMwoO,kBAKzBH,EAtET,CAuEE9tO,IAAMkV,WAkBR,IAAIi5N,EAEJ,SAAUzC,GAGR,SAASyC,IAGP,IAFA,IAAIj7N,EAEK5sB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAKzB,OAFA0sB,EAAQw4N,EAAiBnvQ,KAAKiH,MAAMkoQ,EAAkB,CAACnwQ,MAAMsL,OAAO0f,KAAUhrB,MACxEswH,QAAUuiJ,YAAoBl7N,EAAMzN,OACnCyN,EAYT,OAvBAg5N,YAAeiC,EAAczC,GAchByC,EAAaz0Q,UAEnBikI,OAAS,WACd,OAAO39F,IAAMwB,cAAcssO,EAAQ,CACjCjiJ,QAAStwH,KAAKswH,QACdhqF,SAAUtmC,KAAKkqC,MAAM5D,YAIlBssO,EAxBT,CAyBEnuO,IAAMkV,WAgBR,IAAIm5N,EAEJ,SAAU3C,GAGR,SAAS2C,IACP,OAAO3C,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAHpD2wQ,YAAemC,EAAW3C,GAM1B,IAAI1qO,EAASqtO,EAAU30Q,UAkBvB,OAhBAsnC,EAAOorO,kBAAoB,WACrB7wQ,KAAKkqC,MAAM6oO,SAAS/yQ,KAAKkqC,MAAM6oO,QAAQ/xQ,KAAKhB,KAAMA,OAGxDylC,EAAOurO,mBAAqB,SAA4B3yJ,GAClDr+G,KAAKkqC,MAAM8oO,UAAUhzQ,KAAKkqC,MAAM8oO,SAAShyQ,KAAKhB,KAAMA,KAAMq+G,IAGhE54E,EAAOyrO,qBAAuB,WACxBlxQ,KAAKkqC,MAAM+oO,WAAWjzQ,KAAKkqC,MAAM+oO,UAAUjyQ,KAAKhB,KAAMA,OAG5DylC,EAAO28F,OAAS,WACd,OAAO,MAGF0wI,EAzBT,CA0BEruO,IAAMkV,WAMR,SAASu5N,EAAO7sO,GACd,IAAIgL,EAAUhL,EAAKgL,QACf8hO,EAAY9sO,EAAK+sO,KACjBA,OAAqB,IAAdD,GAA8BA,EACzC,OAAO1uO,IAAMwB,cAAc/8B,EAAQqhC,SAAU,MAAM,SAAU8oO,GAE3D,GADCA,GAA0HplQ,aAAU,IAChImlQ,GAAQC,EAAWX,cAAe,OAAO,KAC9C,IAAIrrK,EAASgsK,EAAW/iJ,QAAQgjJ,MAChC,OAAO7uO,IAAMwB,cAAc6sO,EAAW,CACpCC,QAAS,SAAiB3jG,GACxBA,EAAKmkG,QAAUlsK,EAAOh2D,IAExB2hO,SAAU,SAAkB5jG,EAAM/wD,GAC5BA,EAAUhtE,UAAYA,IACxB+9H,EAAKmkG,UACLnkG,EAAKmkG,QAAUlsK,EAAOh2D,KAG1B4hO,UAAW,SAAmB7jG,GAC5BA,EAAKmkG,WAEPliO,QAASA,OAaf,IAAItuC,EAAQ,GAERykN,EAAa,EAkBjB,SAASgsD,EAAazpJ,EAAMp3E,GAS1B,YARa,IAATo3E,IACFA,EAAO,UAGM,IAAXp3E,IACFA,EAAS,IAGK,MAATo3E,EAAeA,EAzBxB,SAAqBA,GACnB,GAAIhnH,EAAMgnH,GAAO,OAAOhnH,EAAMgnH,GAC9B,IAAI7zC,EAAY6xI,IAAa0rD,QAAQ1pJ,GAOrC,OALIy9F,EAPW,MAQbzkN,EAAMgnH,GAAQ7zC,EACdsxI,KAGKtxI,EAgBsBuxI,CAAY19F,EAAZ09F,CAAkB90K,EAAQ,CACrD+gO,QAAQ,IAQZ,SAASC,EAASttO,GAChB,IAAIutO,EAAgBvtO,EAAKutO,cACrB3kQ,EAAKo3B,EAAKp3B,GACV4kQ,EAAYxtO,EAAKj6B,KACjBA,OAAqB,IAAdynQ,GAA+BA,EAC1C,OAAOpvO,IAAMwB,cAAc/8B,EAAQqhC,SAAU,MAAM,SAAU8oO,GAC1DA,GAA4HplQ,aAAU,GACvI,IAAIqiH,EAAU+iJ,EAAW/iJ,QACrBoiJ,EAAgBW,EAAWX,cAC3BrrK,EAASj7F,EAAOkkH,EAAQlkH,KAAOkkH,EAAQ13C,QACvCnvB,EAAWqqN,YAAeF,EAA8B,kBAAP3kQ,EAAkBukQ,EAAavkQ,EAAI2kQ,EAAcjhO,QAAU7I,YAAS,GAAI76B,EAAI,CAC/Hk9C,SAAUqnN,EAAavkQ,EAAGk9C,SAAUynN,EAAcjhO,UAC/C1jC,GAGL,OAAIyjQ,GACFrrK,EAAO59C,GACA,MAGFhlB,IAAMwB,cAAc6sO,EAAW,CACpCC,QAAS,WACP1rK,EAAO59C,IAETupN,SAAU,SAAkB5jG,EAAM/wD,GAChC,IAAI01J,EAAeD,YAAez1J,EAAUpvG,IAEvC+kQ,YAAkBD,EAAcjqO,YAAS,GAAI2f,EAAU,CAC1DnlD,IAAKyvQ,EAAazvQ,QAElB+iG,EAAO59C,IAGXx6C,GAAIA,OAaV,IAAIglQ,EAAU,GAEVC,EAAe,EAyBnB,SAASC,EAAUhoN,EAAUngB,QACX,IAAZA,IACFA,EAAU,IAGW,kBAAZA,IAAsBA,EAAU,CACzC+9E,KAAM/9E,IAER,IAAIg9E,EAAWh9E,EACX+9E,EAAOf,EAASe,KAChBqqJ,EAAiBprJ,EAASg/F,MAC1BA,OAA2B,IAAnBosD,GAAoCA,EAC5CC,EAAkBrrJ,EAAS2+F,OAC3BA,OAA6B,IAApB0sD,GAAqCA,EAC9CC,EAAqBtrJ,EAAS4+F,UAC9BA,OAAmC,IAAvB0sD,GAAwCA,EAExD,MADY,GAAGhpQ,OAAOy+G,GACTp+G,QAAO,SAAUs8M,EAASl+F,GACrC,IAAKA,EAAM,OAAO,KAClB,GAAIk+F,EAAS,OAAOA,EAEpB,IAAIssD,EA5CR,SAAuBxqJ,EAAM/9E,GAC3B,IAAI07K,EAAW,GAAK17K,EAAQxvC,IAAMwvC,EAAQ27K,OAAS37K,EAAQ47K,UACvDC,EAAYosD,EAAQvsD,KAAcusD,EAAQvsD,GAAY,IAC1D,GAAIG,EAAU99F,GAAO,OAAO89F,EAAU99F,GACtC,IAAIjoH,EAAO,GAEP8R,EAAS,CACX03I,OAFWy8D,IAAah+F,EAAMjoH,EAAMkqC,GAGpClqC,KAAMA,GAQR,OALIoyQ,EAda,MAefrsD,EAAU99F,GAAQn2G,EAClBsgQ,KAGKtgQ,EA4Bc4gQ,CAAczqJ,EAAM,CACrCvtH,IAAKwrN,EACLL,OAAQA,EACRC,UAAWA,IAETt8D,EAASipH,EAAajpH,OACtBxpJ,EAAOyyQ,EAAazyQ,KAEpBysC,EAAQ+8G,EAAOS,KAAK5/F,GACxB,IAAK5d,EAAO,OAAO,KACnB,IAAIizD,EAAMjzD,EAAM,GACZpjC,EAASojC,EAAMz+B,MAAM,GACrBs4M,EAAUj8J,IAAaq1C,EAC3B,OAAIwmH,IAAUI,EAAgB,KACvB,CACLr+F,KAAMA,EAENvoB,IAAc,MAATuoB,GAAwB,KAARvoB,EAAa,IAAMA,EAExC4mH,QAASA,EAETz1K,OAAQ7wC,EAAK6J,QAAO,SAAU0/B,EAAM/mC,EAAKnI,GAEvC,OADAkvC,EAAK/mC,EAAIkK,MAAQrD,EAAOhP,GACjBkvC,IACN,OAEJ,MAWL,IAAIopO,EAEJ,SAAUtE,GAGR,SAASsE,IACP,OAAOtE,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAgDpD,OAnDA2wQ,YAAe8D,EAAOtE,GAMTsE,EAAMt2Q,UAEZikI,OAAS,WACd,IAAIzqF,EAAQ33C,KAEZ,OAAOykC,IAAMwB,cAAc/8B,EAAQqhC,SAAU,MAAM,SAAU8oO,GAC1DA,GAAyHplQ,aAAU,GACpI,IAAIw7C,EAAW9R,EAAMzN,MAAMuf,UAAY4pN,EAAW5pN,SAC9Clb,EAAQoJ,EAAMzN,MAAM0pO,cAAgBj8N,EAAMzN,MAAM0pO,cAClDj8N,EAAMzN,MAAM6/E,KAAOoqJ,EAAU1qN,EAAS0C,SAAUxU,EAAMzN,OAASmpO,EAAW9kO,MAExErE,EAAQJ,YAAS,GAAIupO,EAAY,CACnC5pN,SAAUA,EACVlb,MAAOA,IAGLg0E,EAAc5qE,EAAMzN,MACpB5D,EAAWi8E,EAAYj8E,SACvBgzC,EAAYipC,EAAYjpC,UACxB8oD,EAAS7f,EAAY6f,QAGrB3gI,MAAMC,QAAQ4kC,IAAiC,IAApBA,EAASzkC,SACtCykC,EAAW,MAGW,oBAAbA,UAGQxqC,KAFjBwqC,EAAWA,EAAS4D,MAQlB5D,EAAW,OAIf,OAAO7B,IAAMwB,cAAc/8B,EAAQk9B,SAAU,CAC3C1qC,MAAOwuC,GACN5D,IA1DT,SAAyBA,GACvB,OAA0C,IAAnC7B,IAAM+iG,SAASpyH,MAAMkxB,GAyDRouO,CAAgBpuO,GAAYA,EAAW4D,EAAMqE,MAAQ+qC,EAAY70C,IAAMwB,cAAcqzC,EAAWpvC,GAASk4F,EAASA,EAAOl4F,GAAS,KAAO,UAItJuqO,EApDT,CAqDEhwO,IAAMkV,WA8BR,SAASg7N,EAAgB5qJ,GACvB,MAA0B,MAAnBA,EAAKu+B,OAAO,GAAav+B,EAAO,IAAMA,EAU/C,SAAS6qJ,EAAcC,EAAUprN,GAC/B,IAAKorN,EAAU,OAAOprN,EACtB,IAAI4kM,EAAOsmB,EAAgBE,GAC3B,OAAwC,IAApCprN,EAAS0C,SAAS3rC,QAAQ6tO,GAAoB5kM,EAC3C3f,YAAS,GAAI2f,EAAU,CAC5B0C,SAAU1C,EAAS0C,SAASwiE,OAAO0/H,EAAKxsP,UAI5C,SAASizQ,EAAUrrN,GACjB,MAA2B,kBAAbA,EAAwBA,EAAWsrN,YAAWtrN,GAG9D,SAASurN,EAAcjsO,GACrB,OAAO,WACuG96B,aAAU,IAI1H,SAASwgJ,KAST,IAAIwmH,EAEJ,SAAU9E,GAGR,SAAS8E,IAGP,IAFA,IAAIt9N,EAEK5sB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAqBzB,OAlBA0sB,EAAQw4N,EAAiBnvQ,KAAKiH,MAAMkoQ,EAAkB,CAACnwQ,MAAMsL,OAAO0f,KAAUhrB,MAExEk1Q,WAAa,SAAUzrN,GAC3B,OAAO9R,EAAMw9N,WAAW1rN,EAAU,SAGpC9R,EAAMy9N,cAAgB,SAAU3rN,GAC9B,OAAO9R,EAAMw9N,WAAW1rN,EAAU,YAGpC9R,EAAM09N,aAAe,WACnB,OAAO5mH,GAGT92G,EAAM29N,YAAc,WAClB,OAAO7mH,GAGF92G,EA3BTg5N,YAAesE,EAAc9E,GA8B7B,IAAI1qO,EAASwvO,EAAa92Q,UA2C1B,OAzCAsnC,EAAO0vO,WAAa,SAAoB1rN,EAAUv+B,GAChD,IAAIq3F,EAAcviH,KAAKkqC,MACnBqrO,EAAuBhzJ,EAAYsyJ,SACnCA,OAAoC,IAAzBU,EAAkC,GAAKA,EAClDC,EAAsBjzJ,EAAYr5G,QAClCA,OAAkC,IAAxBssQ,EAAiC,GAAKA,EACpDtsQ,EAAQgiB,OAASA,EACjBhiB,EAAQugD,SA7EZ,SAAqBorN,EAAUprN,GAC7B,OAAKorN,EACE/qO,YAAS,GAAI2f,EAAU,CAC5B0C,SAAUwoN,EAAgBE,GAAYprN,EAAS0C,WAF3B1C,EA4EDgsN,CAAYZ,EAAUf,YAAerqN,IACxDvgD,EAAQs4F,IAAMszK,EAAU5rQ,EAAQugD,WAGlChkB,EAAO28F,OAAS,WACd,IAAI5e,EAAexjH,KAAKkqC,MACpBwrO,EAAwBlyJ,EAAaqxJ,SACrCA,OAAqC,IAA1Ba,EAAmC,GAAKA,EACnDC,EAAuBnyJ,EAAat6G,QACpCA,OAAmC,IAAzBysQ,EAAkC,GAAKA,EACjDC,EAAwBpyJ,EAAa/5D,SACrCA,OAAqC,IAA1BmsN,EAAmC,IAAMA,EACpDtxP,EAAOolB,YAA8B85E,EAAc,CAAC,WAAY,UAAW,aAE3E8M,EAAU,CACZulJ,WAAY,SAAoB9rJ,GAC9B,OAAO4qJ,EAAgBE,EAAWC,EAAU/qJ,KAE9C7+F,OAAQ,MACRu+B,SAAUmrN,EAAcC,EAAUf,YAAerqN,IACjDr9C,KAAMpM,KAAKk1Q,WACXt8L,QAAS54E,KAAKo1Q,cACdU,GAAId,IACJe,OAAQf,IACRgB,UAAWhB,IACXpkJ,OAAQ5wH,KAAKq1Q,aACb/B,MAAOtzQ,KAAKs1Q,aAEd,OAAO7wO,IAAMwB,cAAcssO,EAAQzoO,YAAS,GAAIxlB,EAAM,CACpDgsG,QAASA,EACToiJ,cAAexpQ,MAIZ+rQ,EA1ET,CA2EExwO,IAAMkV,WAkBR,IAAIs8N,EAEJ,SAAU9F,GAGR,SAAS8F,IACP,OAAO9F,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAgCpD,OAnCA2wQ,YAAesF,EAAQ9F,GAMV8F,EAAO93Q,UAEbikI,OAAS,WACd,IAAIzqF,EAAQ33C,KAEZ,OAAOykC,IAAMwB,cAAc/8B,EAAQqhC,SAAU,MAAM,SAAU8oO,GAC1DA,GAA0HplQ,aAAU,GACrI,IACI65L,EAASv5J,EADTkb,EAAW9R,EAAMzN,MAAMuf,UAAY4pN,EAAW5pN,SAelD,OATAhlB,IAAM+iG,SAAS96H,QAAQirC,EAAMzN,MAAM5D,UAAU,SAAU4T,GACrD,GAAa,MAAT3L,GAAiB9J,IAAM6V,eAAeJ,GAAQ,CAChD4tJ,EAAU5tJ,EACV,IAAI6vE,EAAO7vE,EAAMhQ,MAAM6/E,MAAQ7vE,EAAMhQ,MAAMl7B,KAC3Cu/B,EAAQw7E,EAAOoqJ,EAAU1qN,EAAS0C,SAAUriB,YAAS,GAAIoQ,EAAMhQ,MAAO,CACpE6/E,KAAMA,KACFspJ,EAAW9kO,UAGdA,EAAQ9J,IAAMyX,aAAa4rJ,EAAS,CACzCr+I,SAAUA,EACVmqN,cAAerlO,IACZ,SAIF0nO,EApCT,CAqCExxO,IAAMkV,WAkBR,SAASg2E,EAAWh2E,GAClB,IAAIpxB,EAAc,eAAiBoxB,EAAUpxB,aAAeoxB,EAAUnrC,MAAQ,IAE1EurJ,EAAI,SAAW7vH,GACjB,IAAIgsO,EAAsBhsO,EAAMgsO,oBAC5BC,EAAiBzsO,YAA8BQ,EAAO,CAAC,wBAE3D,OAAOzF,IAAMwB,cAAc/8B,EAAQqhC,SAAU,MAAM,SAAU8oO,GAE3D,OADCA,GAAyIplQ,aAAU,GAC7Iw2B,IAAMwB,cAAc0T,EAAW7P,YAAS,GAAIqsO,EAAgB9C,EAAY,CAC7E53Q,IAAKy6Q,SAcX,OATAn8G,EAAExxI,YAAcA,EAChBwxI,EAAEpwH,iBAAmBgQ,EAQdpO,IAAawuH,EAAGpgH,K,u2CChqBnBy8N,EAAY,SAAC,GAIK,IAAD,IAHrBnwK,aAGqB,MAHb,UAGa,MAFrB3qB,aAEqB,MAFb,MAEa,MADrBi2C,cACqB,MADZ,MACY,EAErB,OACE,sBACE8kJ,MAAM,6BACN/6L,MAAQA,EACRi2C,OAASA,EACT+kJ,QAAO,cACPh7J,MAAO,CAAEh/B,SAAU,QALrB,UAOE,sBAAMx2E,EAAE,qlBAAqlBw1G,MAAO,CAACi7J,UAAW,iCAAkC1tI,KAAM5iC,EAAOinB,QAAS,GAAImP,UAAW,oEACvrB,sBAAMv2H,EAAE,kuBAAkuB+iI,KAAM5iC,EAAOinB,QAAQ,OAC/vB,sBAAMpnH,EAAE,osBAAosB+iI,KAAM5iC,EAAOinB,QAAQ,OACjuB,sBAAMpnH,EAAE,4uBAA4uB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,gEAAgE/gB,MAAO,CAACi7J,UAAW,mEAC12B,sBAAMzwQ,EAAE,stBAAstB+iI,KAAM5iC,EAAOinB,QAAQ,OACnvB,sBAAMpnH,EAAE,+tBAA+tB+iI,KAAM5iC,EAAOinB,QAAQ,OAC5vB,sBAAMpnH,EAAE,+sBAA+sB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,+DAA+D/gB,MAAO,CAACi7J,UAAW,mEAC50B,sBAAMzwQ,EAAE,ytBAAytB+iI,KAAM5iC,EAAOinB,QAAQ,OACtvB,sBAAMpnH,EAAE,qtBAAqtB+iI,KAAM5iC,EAAOinB,QAAQ,OAClvB,sBAAMpnH,EAAE,gtBAAgtB+iI,KAAM5iC,EAAOinB,QAAQ,OAC7uB,sBAAMpnH,EAAE,8tBAA8tB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,gEAAgE/gB,MAAO,CAACi7J,UAAW,mEAC51B,sBAAMzwQ,EAAE,0sBAA0sB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,4CAA4C/gB,MAAO,CAACi7J,UAAW,gGAAiGC,WAAY,oFAAqFC,aAAc,UACpgC,sBAAM3wQ,EAAE,4tBAA4tB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,4CAA4C/gB,MAAO,CAAEi7J,UAAW,gGAAiGC,WAAY,mGAAoGC,aAAc,UACtiC,sBAAM3wQ,EAAE,usBAAusB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,0CAA0C/gB,MAAO,CAAEi7J,UAAW,gGAAiGC,WAAY,mFAAoFC,aAAc,UAC//B,yBAAS5tI,KAAM5iC,EAAOinB,QAAQ,KAAKwpJ,GAAG,OAAOC,GAAG,OAAOt6I,UAAU,6DACjE,sBAAMv2H,EAAE,iHAAiH+iI,KAAK,YAC9H,sBAAM/iI,EAAE,yEAAyEonH,QAAQ,OACzF,sBAAM2b,KAAM5iC,EAAOngG,EAAE,4CAA4Cu2H,UAAU,+EAA+E/gB,MAAO,CAACi7J,UAAW,oCAC7K,sBAAMzwQ,EAAE,uRAAuR+iI,KAAK,YACpS,sBAAM/iI,EAAE,2DAA2DonH,QAAQ,OAC3E,sBAAMpnH,EAAE,yDAAyDonH,QAAQ,OACzE,sBAAMpnH,EAAE,wDAAwDonH,QAAQ,OACxE,sBAAMpnH,EAAE,4XAA4XonH,QAAQ,OAC5Y,sBAAMpnH,EAAE,kRAAkR+iI,KAAK,YAC/R,oBAAG3b,QAAQ,KAAKmP,UAAU,uCAA1B,UACE,sBAAMv2H,EAAE,mGACR,sBAAMA,EAAE,wLACR,sBAAMA,EAAE,4KAEV,sBAAM+iI,KAAK,UAAU/iI,EAAE,0CACvB,sBAAMonH,QAAQ,KAAKpnH,EAAE,2EACrB,sBAAMA,EAAE,wOAAwO+iI,KAAK,YACrP,sBAAM/iI,EAAE,oOAAoO+iI,KAAK,YACjP,sBAAM/iI,EAAE,kfAAkfonH,QAAQ,OAClgB,sBAAMpnH,EAAE,iOAAiO+iI,KAAK,YAC9O,sBAAM/iI,EAAE,yeAAyeonH,QAAQ,OACzf,sBAAMpnH,EAAE,qIAAqI+iI,KAAK,YAClJ,sBAAM/iI,EAAE,iGAAiG+iI,KAAK,YAC9G,sBAAM/iI,EAAE,qIAAqIonH,QAAQ,OACrJ,sBAAMpnH,EAAE,iGAAiGonH,QAAQ,OACjH,sBAAMpnH,EAAE,obAAob+iI,KAAK,YACjc,sBAAM/iI,EAAE,oIAAoIonH,QAAQ,OACpJ,sBAAMpnH,EAAE,sMAAsM+iI,KAAK,YACnN,sBAAM/iI,EAAE,0LAA0LonH,QAAQ,OAC1M,sBAAMpnH,EAAE,0fAA0f+iI,KAAK,YACvgB,sBAAM/iI,EAAE,2DAA2DonH,QAAQ,OAC3E,sBAAMpnH,EAAE,yDAAyDonH,QAAQ,OACzE,sBAAMpnH,EAAE,mEAAmEonH,QAAQ,OACnF,sBAAMpnH,EAAE,+GAA+GonH,QAAQ,OAC/H,sBAAMpnH,EAAE,+GAA+G+iI,KAAK,YAC5H,sBAAM/iI,EAAE,iaAAiaonH,QAAQ,OACjb,sBAAMpnH,EAAE,2pBAA2pBonH,QAAQ,OAC3qB,sBAAMpnH,EAAE,4wBAA4wB+iI,KAAK,YACzxB,oBAAG3b,QAAQ,KAAKmP,UAAU,yCAA1B,UACE,sBAAMv2H,EAAE,6FACR,sBAAMA,EAAE,+CACR,sBAAMA,EAAE,w7BAEV,sBAAMA,EAAE,wDAAwDonH,QAAQ,OACxE,sBAAMpnH,EAAE,qDAAqDonH,QAAQ,OACrE,sBAAMpnH,EAAE,2DAA2DonH,QAAQ,OAC3E,sBAAM2b,KAAM5iC,EAAOngG,EAAE,wCACrB,sBAAMonH,QAAQ,MAAMpnH,EAAE,wCACtB,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,uCACrB,sBAAMonH,QAAQ,KAAKpnH,EAAE,uCACrB,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,0CACrB,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,kFACrB,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,0DACrB,sBAAMonH,QAAQ,MAAMpnH,EAAE,0DACtB,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,uCACrB,sBAAM+iI,KAAK,OAAO3b,QAAQ,KAAKpnH,EAAE,uCACjC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,6CACrB,sBAAM+iI,KAAK,OAAO3b,QAAQ,KAAKpnH,EAAE,6CACjC,sBAAM+iI,KAAK,OAAO3b,QAAQ,KAAKpnH,EAAE,oCACjC,sBAAM+iI,KAAK,OAAO3b,QAAQ,KAAKpnH,EAAE,oCACjC,sBAAM+iI,KAAK,OAAO3b,QAAQ,KAAKpnH,EAAE,oCACjC,sBAAMA,EAAE,gHAAgHonH,QAAQ,OAChI,sBAAMpnH,EAAE,8GAA8G+iI,KAAK,YAC3H,sBAAM/iI,EAAE,uEAAuEonH,QAAQ,OACvF,sBAAMpnH,EAAE,4RAA4R+iI,KAAK,YACzS,sBAAM/iI,EAAE,2DAA2DonH,QAAQ,OAC3E,sBAAMpnH,EAAE,2DAA2DonH,QAAQ,OAC3E,sBAAMpnH,EAAE,oDAAoDonH,QAAQ,OACpE,sBAAMpnH,EAAE,2tBAA2tB+iI,KAAM5iC,EAAOinB,QAAQ,IAAImP,UAAU,iEAAiE/gB,MAAO,CAAEi7J,UAAW,mEAC31B,yBAAS1tI,KAAM5iC,EAAOinB,QAAQ,KAAKwpJ,GAAG,OAAOC,GAAG,MAAMt6I,UAAU,6DAChE,yBAASwM,KAAM5iC,EAAOinB,QAAQ,KAAKwpJ,GAAG,OAAOC,GAAG,MAAMt6I,UAAU,6DAChE,yBAASwM,KAAM5iC,EAAOinB,QAAQ,KAAKwpJ,GAAG,OAAOC,GAAG,MAAMt6I,UAAU,4DAChE,yBAASwM,KAAM5iC,EAAOinB,QAAQ,KAAKwpJ,GAAG,OAAOC,GAAG,MAAMt6I,UAAU,6DAChE,yBAASwM,KAAM5iC,EAAOywK,GAAG,OAAOC,GAAG,MAAMt6I,UAAU,6DACnD,sBAAMv2H,EAAE,2YAA2Y+iI,KAAM5iC,IACzZ,sBAAMngG,EAAE,+HAA+H+iI,KAAK,YAC5I,sBAAM/iI,EAAE,uJAAuJonH,QAAQ,OACvK,oBAAGmP,UAAU,4CAA4C/gB,MAAO,CAAEi7J,UAAW,kCAA7E,UACE,sBAAMzwQ,EAAE,4FAA4FonH,QAAQ,OAC5G,sBAAMpnH,EAAE,0KAA0KonH,QAAQ,OAC1L,sBAAMpnH,EAAE,uFAAuFonH,QAAQ,OACvG,sBAAMpnH,EAAE,2KAA2K+iI,KAAK,YACxL,sBAAM/iI,EAAE,mEAAmE+iI,KAAK,mBClGlF+tI,EAAe,SAAC,GASK,IAAD,IARxBt7L,aAQwB,MARhB,MAQgB,MAPxBi2C,cAOwB,MAPf,MAOe,MANxBtrB,MACEgoB,GAKsB,aAJpB,CACFA,YAAa,WAGS,GALtBA,YAKsB,EADxB4oJ,cAGA,OACE,sBACER,MAAM,6BACNC,QAAO,cAASh7L,EAAT,YAAkBi2C,GACzBj2C,MAAOA,EACPi2C,OAAQA,EACRsX,KAAK,OACLvtB,MAAO,CAAEh/B,SAAU,OAAQw6L,UAAW,QANxC,UAQE,sBACEjuI,KAAM5a,EACNnoH,EAAE,00BACFonH,QAAS,KAEX,sBACE2b,KAAM5a,EACNnoH,EAAE,ovNACFonH,QAAS,KAEX,mBAAG2b,KAAK,OAAO3b,QAAS,GAAxB,SACE,sBAAMpnH,EAAE,qlBAEV,sBACE+iI,KAAK,OACL/iI,EAAE,6JACFonH,QAAS,KAEX,sBACE2b,KAAM5a,EACNnoH,EAAE,iiBACFonH,QAAS,KAEX,sBACE2b,KAAM5a,EACNnoH,EAAE,gJAEJ,sBACE+iI,KAAM5a,EACNnoH,EAAE,+iBAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,2LAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,uNACFonH,QAAS,KAEX,sBACE6pJ,OAAO,UACPC,iBAAkB,GAClBC,YAAa,MACbnxQ,EAAE,oDAEJ,sBACE+iI,KAAM5a,EACNnoH,EAAE,8SAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,4SACFonH,QAAS,KAEX,sBACE2b,KAAK,UACL/iI,EAAE,mIAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,gIAEJ,sBAAM+iI,KAAK,UAAU/iI,EAAE,mDACvB,sBACE+iI,KAAK,UACL/iI,EAAE,wEAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,yTAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,qGAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,oJAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,6KAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,wIAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,0FAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,yKAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,iKAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,gNAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,mNAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,iMAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,qIAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,oIAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sDAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,iLAEJ,sBAAM+iI,KAAK,UAAU/iI,EAAE,kDACvB,sBACE+iI,KAAK,UACL/iI,EAAE,wEAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,gFAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,yaAEJ,sBACEixQ,OAAO,UACPG,cAAc,QACdC,eAAe,QACfH,iBAAkB,GAClBC,YAAa,IACbnxQ,EAAE,mCAEJ,sBAAM+iI,KAAM5a,EAAanoH,EAAE,mDAC3B,sBACE+iI,KAAK,OACL/iI,EAAE,iDACFonH,QAAS,KAEX,sBACE6pJ,OAAO,UACPC,iBAAkB,GAClBC,YAAa,MACbnxQ,EAAE,4BAEJ,sBACEixQ,OAAO,UACPG,cAAc,QACdC,eAAe,QACfH,iBAAkB,GAClBC,YAAa,IACbnxQ,EAAE,mCAEJ,sBACE+iI,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,uTACFuxQ,SAAS,YAEX,sBACExuI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,uTACFuxQ,SAAS,UACTnqJ,QAAS,SCzMXoqJ,EAAmB,SAAC,GAUK,IAAD,IAT5Bh8L,aAS4B,MATpB,KASoB,MAR5Bi2C,cAQ4B,MARnB,KAQmB,MAP5BtrB,MACEgoB,GAM0B,aAJxB,CACFA,YAAa,UACbjJ,gBAAiB,WAES,GAN1BiJ,YACAjJ,EAK0B,EAL1BA,gBAOF,OACE,sBACE1pC,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BALR,UAOE,oBAAGkB,SAAS,cAAZ,UACE,sBACEzxQ,EAAE,oHACF+iI,KAAM7jB,IAER,sBACEl/G,EAAE,oLACF+iI,KAAM5a,IAER,mBAAGspJ,SAAS,cAAZ,SACE,sBACEzxQ,EAAE,iaACF+iI,KAAK,eAKX,iCACE,0BAAU5nG,GAAG,QAAb,SACE,sBAAMq6C,MAAM,KAAKi2C,OAAO,KAAKsX,KAAK,YAEpC,0BAAU5nG,GAAG,QAAb,SACE,sBACEq6C,MAAM,QACNi2C,OAAO,QACPsX,KAAK,QACLxM,UAAU,oDCzDhBm7I,EAAiB,SAAC,GAMW,IAAD,IALhCl8L,aAKgC,MALxB,KAKwB,MAJhCi2C,cAIgC,MAJvB,KAIuB,MAHhCtrB,aAGgC,MAHxB,OAGwB,MAFhC7sB,iBAEgC,MAFpB,GAEoB,MADhCkiC,aACgC,MADxB,GACwB,EAEhC,OACE,qBACEhgC,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BACNj9L,UAAWA,EACXkiC,MAAOA,EAPT,SASE,sBACEx1G,EAAE,6RACF+iI,KAAM5iC,OCdRwxK,EAAa,SAAC,GAOK,IAAD,IANtBn8L,aAMsB,MANd,GAMc,MALtBi2C,cAKsB,MALb,GAKa,MAJtBtrB,aAIsB,MAJd,UAIc,MAHtB+e,uBAGsB,MAHJ,UAGI,MAFtB5rC,iBAEsB,MAFV,GAEU,MADtBkiC,aACsB,MADd,GACc,EAEtB,OACE,sBACEhgC,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BACNj9L,UAAWA,EACXkiC,MAAOA,EAPT,UASE,sBAAMhgC,MAAOA,EAAOi2C,OAAQA,EAAQmlJ,GAAI,GAAI7tI,KAAM7jB,IAClD,mBAAGuyJ,SAAS,yBAAZ,SACE,sBACEzxQ,EAAE,gYACF+iI,KAAM5iC,MAGV,+BACE,0BAAUhlE,GAAG,mBAAb,SACE,sBACEq6C,MAAO,GACPi2C,OAAQ,GACRsX,KAAK,QACLxM,UAAU,6BCHhB5O,EAAmB,SAAC,GAcK,IAAD,IAb5BnyC,aAa4B,MAbpB,MAaoB,MAZ5Bi2C,cAY4B,MAZnB,MAYmB,MAX5BtrB,MACEgoB,GAU0B,aARxB,CACFA,YAAa,UACbjJ,gBAAiB,WAMS,GAV1BiJ,YACAjJ,EAS0B,EAT1BA,gBAS0B,IAJ5B6xJ,qBAI4B,MAJZ,OAIY,MAH5Ba,yBAG4B,MAHR,IAGQ,MAF5BC,uBAE4B,MAFV,UAEU,MAD5BC,yBAC4B,MADR,IACQ,EAE5B,OACE,qBACEvB,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cAJV,SAME,oBACEztI,KAAK,OACLuuI,SAAS,UACTL,OAAO,OACPE,YAAY,IACZ56I,UAAU,0CALZ,UAOE,wBAAQomC,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,OAAO0xD,KAAM7jB,EAAiBkI,QAASwqJ,IACrE,sBACE7uI,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,6GACFonH,QAAS2pJ,IAEX,sBACEhuI,KAAM8uI,EACNzqJ,QAAS0qJ,EACTR,SAAS,UACTtxQ,EAAE,8YCzCN4nH,EAAgB,SAAC,GAcK,IAAD,IAbzBpyC,aAayB,MAbjB,MAaiB,MAZzBi2C,cAYyB,MAZhB,MAYgB,MAXzBtrB,MACEgoB,GAUuB,aARrB,CACFA,YAAa,UACbjJ,gBAAiB,WAMM,GAVvBiJ,YACAjJ,EASuB,EATvBA,gBASuB,IAJzB6xJ,qBAIyB,MAJT,OAIS,MAHzBa,yBAGyB,MAHL,IAGK,MAFzBC,uBAEyB,MAFP,UAEO,MADzBC,yBACyB,MADL,IACK,EAEzB,OACE,qBACEvB,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cAJV,SAME,oBAAGztI,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,UACE,wBACEx0G,GAAG,OACHC,GAAG,OACHvrF,EAAE,OACF0xD,KAAM7jB,EACNqX,UAAU,0CACVnP,QAASwqJ,IAEX,sBACE7uI,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,4GACFonH,QAAS2pJ,EACTx6I,UAAU,4CAEZ,sBACEwM,KAAM8uI,EACNzqJ,QAAS0qJ,EACTR,SAAS,UACTtxQ,EAAE,kiBACFu2H,UAAU,kDC5Cdw7I,EAAa,SAAC,GAcK,IAAD,IAbtBv8L,aAasB,MAbd,KAac,MAZtBi2C,cAYsB,MAZb,KAYa,MAXtBtrB,MAEE+e,IASoB,aARlB,CACFiJ,YAAa,UACbjJ,gBAAiB,WAMG,GAVpBiJ,YAUoB,EATpBjJ,iBASoB,IAJtB6xJ,qBAIsB,MAJN,OAIM,IAHtBa,kBAGsB,EAFtBC,gBAEsB,EADtBC,kBAGA,OACE,sBACEt8L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRD,MAAM,6BAJR,UAME,iCACE,yBAASp1O,GAAG,OAAOwhI,GAAG,aAAaC,GAAG,aAAag0G,GAAG,aAAaC,GAAG,eACtE,yBAAQ9+P,EAAE,QAAQ2zB,EAAE,QAAQ8vC,MAAM,SAASi2C,OAAO,SAASumJ,YAAY,oBAAoB72O,GAAG,WAA9F,UACE,0BAAU82O,GAAG,IAAIC,GAAG,IAAIhwI,GAAG,cAAcp0H,OAAO,uBAChD,gCAAgBqkQ,aAAa,MAAMjwI,GAAG,qBAAqBp0H,OAAO,qBAClE,+BAAezI,OAAO,kDAAkDjL,KAAK,SAAS8nI,GAAG,wBAE3F,iCAAgBkwI,GAAG,cAAcC,GAAG,cAAcC,GAAG,cAAcC,GAAG,YAAYp3O,GAAG,mBAArF,UACE,sBAAMq3O,UAAU,UAAUC,YAAY,IAAIzqQ,OAAO,OACjD,sBAAMwqQ,UAAU,UAAUxqQ,OAAO,eAGrC,mBAAGmzB,GAAG,uBAAuB81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAhF,SACE,mBAAGn2O,GAAG,4CAA4Co7F,UAAU,sCAA5D,SACE,mBAAGp7F,GAAG,UAAUo7F,UAAU,oCAA1B,SACE,oBAAGp7F,GAAG,QAAN,UACE,mBAAGA,GAAG,SAAN,SACE,qBAAK4nG,KAAM7jB,EAAiBoyJ,SAAS,UAAUoB,UAAU,YAE3D,sBAAM1yQ,EAAE,ujBAAujBm7B,GAAG,iBAAiB4nG,KAAK,yBAAyB3b,QAAS2pJ,IAC1nB,sBAAM/wQ,EAAE,qsEAAqsEm7B,GAAG,SAAI4nG,KAAK,yBC3CjuE4vI,EAAgB,SAAC,GAcK,IAAD,IAbzBn9L,aAayB,MAbjB,MAaiB,MAZzBi2C,cAYyB,MAZhB,MAYgB,MAXzBtrB,MACEgoB,GAUuB,aARrB,CACFA,YAAa,UACbjJ,gBAAiB,WAMM,GAVvBiJ,YACAjJ,EASuB,EATvBA,gBASuB,IAJzB6xJ,qBAIyB,MAJT,OAIS,MAHzBa,yBAGyB,MAHL,IAGK,MAFzBC,uBAEyB,MAFP,UAEO,MADzBp8L,cACyB,MADhB,IACgB,EAEzB,OACE,qBACED,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRD,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,mBACEw7L,OAAO,OACPE,YAAY,IACZpuI,KAAK,OACLuuI,SAAS,UAJX,SAME,8BACE,mBACEvuI,KAAM7jB,EACNkI,QAASwqJ,EAFX,SAIE,4BACE,wBACEj1G,GAAG,OACHC,GAAG,OACHvrF,EAAE,aAIR,sBACErxE,EAAE,8PACF4yQ,YAAa7B,EACbhuI,KAAM5a,EACNmpJ,SAAS,YAEX,mBACE/6I,UAAU,iHACVwM,KAAM8uI,EACNP,SAAS,UAHX,SAKE,4BACE,sBAAMtxQ,EAAE,qrBC9EhB6yQ,EAAiB,SAAC,GAUK,IAAD,IAT1Br9L,aAS0B,MATlB,MASkB,MAR1Bi2C,cAQ0B,MARjB,MAQiB,MAP1BtrB,MACEgoB,GAMwB,aAJtB,CACFA,YAAa,UACbjJ,gBAAiB,WAEO,GANxBiJ,YACAjJ,EAKwB,EALxBA,gBAOF,OACE,sBACEqxJ,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,QALrB,UAOE,iCACE,wBAAQr7C,GAAG,SAASwhI,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SAC1C,yBACEl2C,GAAG,WACHq6C,MAAM,OACNi2C,OAAO,OACP15G,EAAE,MACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,iCACE81B,GAAG,mBACHi3O,GAAG,UACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAY,MAC9B,sBAAMzqQ,OAAO,OAAOwqQ,UAAWtzJ,OAEjC,sBACE/jF,GAAG,SACHn7B,EAAE,gIAEJ,yBACEm7B,GAAG,WACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,QACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,sBACE81B,GAAG,SACHn7B,EAAE,43BAEJ,yBACEm7B,GAAG,WACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,QACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,qDAIb,mBAAG09H,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,8BACE,qBACEwM,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAM5a,EAAauqJ,UAAU,eAEpC,oBAAGtrJ,QAAQ,MAAX,UACE,qBACE2b,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAK,yBAAyB2vI,UAAU,eAE/C,8BACE,qBACE3vI,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAK,OAAO2vI,UAAU,0BC1HnCI,EAAgB,SAAC,GAYK,IAAD,IAXzBt9L,aAWyB,MAXjB,MAWiB,MAVzBi2C,cAUyB,MAVhB,MAUgB,MATzBtrB,MACEgoB,GAQuB,aANrB,CACFA,YAAa,UACbjJ,gBAAiB,WAIM,GARvBiJ,YACAjJ,EAOuB,EAPvBA,gBAOuB,IAFzB6xJ,qBAEyB,MAFT,OAES,MADzBt7L,cACyB,MADhB,IACgB,EAEzB,OACE,qBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,mBAAGstD,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,wBAAQomC,GAAG,KAAKC,GAAG,KAAKvrF,EAAE,KAAK0xD,KAAM7jB,IACrC,sBACE6jB,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,4KACFonH,QAAS2pJ,IAEX,oBAAGx6I,UAAU,mBAAb,UACE,sBAAMv2H,EAAE,8BACR,sBACE+iI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,0BAEJ,wBACE28J,GAAG,OACHC,GAAG,OACHvrF,EAAE,OACF0xD,KAAK,OACLuuI,SAAS,YAEX,sBACEvuI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,6CC1EZ+yQ,EAAa,SAAC,GAMc,EALhCv9L,MAKgC,EAJhCi2C,OAIiC,IAAD,IAHhCtrB,aAGgC,MAHxB,OAGwB,IAFhC7sB,UAEgC,EADhCkiC,MAGA,OACE,sBACEhgC,MAAM,KACNi2C,OAAO,KACP+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BALR,UAOE,sBACEvwQ,EAAE,gKACF+iI,KAAM5iC,IAER,sBACEngG,EAAE,yCACF+iI,KAAM5iC,IAER,sBACEngG,EAAE,oBACF+iI,KAAM5iC,QC1BR6yK,G,QAAqB,SAAC,GAIK,IAAD,IAH9Bx9L,aAG8B,MAHtB,MAGsB,MAF9Bi2C,cAE8B,MAFrB,MAEqB,MAD9BtrB,aAC8B,MADtB,UACsB,EAE9B,OACE,sBACEowK,MAAM,6BACNC,QAAQ,cACRh7L,MAAOA,EACPi2C,OAAQA,EACRjW,MAAO,CAAEh/B,SAAU,QALrB,UAOE,iCACE,iCAAgBr7C,GAAG,aAAai3O,GAAG,MAAME,GAAG,MAAMD,GAAG,IAAIE,GAAG,IAA5D,UACE,sBAAMvqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,SAC9C,sBAAMzqQ,OAAO,MAAMwqQ,UAAU,OAAOC,YAAY,SAChD,sBAAMzqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,WAEhD,iCAAgBt3O,GAAG,aAAai3O,GAAG,MAAME,GAAG,MAAMD,GAAG,IAAIE,GAAG,IAA5D,UACE,sBAAMvqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,SAC9C,sBAAMzqQ,OAAO,MAAMwqQ,UAAU,OAAOC,YAAY,SAChD,sBAAMzqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,WAEhD,iCAAgBt3O,GAAG,aAAai3O,GAAG,MAAME,GAAG,MAAMD,GAAG,IAAIE,GAAG,IAA5D,UACE,sBAAMvqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,SAC9C,sBAAMzqQ,OAAO,MAAMwqQ,UAAU,OAAOC,YAAY,SAChD,sBAAMzqQ,OAAO,IAAIwqQ,UAAU,OAAOC,YAAY,cAGlD,oBACE1vI,KAAK,UACLuuI,SAAS,UACT/6I,UAAU,uBACV/gB,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,kCANf,UASE,sBACEa,SAAS,UACTtxQ,EAAE,iQAEJ,sBAAMA,EAAE,mBACR,sBAAMA,EAAE,6MACR,sBAAMA,EAAE,qBACR,sBAAMA,EAAE,wEACR,sBAAMA,EAAE,kBACR,sBAAMA,EAAE,cAAcu2H,UAAU,8BAElC,oBACEwM,KAAK,UACLuuI,SAAS,UACT/6I,UAAU,+CACV/gB,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,kCANf,UASE,sBACEa,SAAS,UACTtxQ,EAAE,iQAEJ,sBAAMA,EAAE,mBACR,sBAAMA,EAAE,6MACR,sBAAMA,EAAE,qBACR,sBAAMA,EAAE,wEACR,sBAAMA,EAAE,kBACR,sBAAMA,EAAE,cAAcu2H,UAAU,8BAElC,oBACEwM,KAAK,UACLuuI,SAAS,UACT/6I,UAAU,6CACV/gB,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,kCANf,UASE,sBACEa,SAAS,UACTtxQ,EAAE,iQAEJ,sBAAMA,EAAE,mBACR,sBAAMA,EAAE,6MACR,sBAAMA,EAAE,qBACR,sBAAMA,EAAE,wEACR,sBAAMA,EAAE,kBACR,sBAAMA,EAAE,cAAcu2H,UAAU,8BAElC,oBACEwM,KAAK,OACLuuI,SAAS,UACT/6I,UAAU,qCAHZ,UAKE,sBACEwM,KAAM5iC,EACNngG,EAAE,0zBACFonH,QAAQ,OACR5R,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,oCAGf,oBAAGrpJ,QAAQ,MAAMmP,UAAU,mBAA3B,UACE,sBACEwM,KAAK,UACL/iI,EAAE,0tBACFw1G,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,oCAGf,sBACE1tI,KAAK,OACLkuI,OAAO,OACPE,YAAY,MACZnxQ,EAAE,gLAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,2EAEJ,sBACEixQ,OAAO,OACPjxQ,EAAE,0GAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,wBAEJ,sBACEixQ,OAAO,UACPjxQ,EAAE,yBAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,gDAEJ,sBACEixQ,OAAO,UACPjxQ,EAAE,uBAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,sFAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,mEAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,uBAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,yBAEJ,sBACEixQ,OAAO,OACPE,YAAY,MACZnxQ,EAAE,oGAGN,sBACE+iI,KAAK,mBACLuuI,SAAS,UACTtxQ,EAAE,qlHAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,8SAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,4SACFonH,QAAQ,QAEV,sBACE2b,KAAM5iC,EACNngG,EAAE,oaAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,kaACFonH,QAAQ,QAEV,sBACE2b,KAAK,UACL/iI,EAAE,mPAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,qHACFonH,QAAQ,QAEV,yBAASu1C,GAAG,OAAOC,GAAG,KAAK75B,KAAK,UAAU6tI,GAAG,OAAOC,GAAG,OACvD,sBACE9tI,KAAM5iC,EACNngG,EAAE,qsBAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,0yCAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,iNACFonH,QAAQ,QAEV,sBACE2b,KAAK,UACL/iI,EAAE,+bAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,u3BACFonH,QAAQ,QAEV,yBACEu1C,GAAG,OACHC,GAAG,QACH75B,KAAM5iC,EACNinB,QAAQ,MACRwpJ,GAAG,OACHC,GAAG,QAEL,sBACE9tI,KAAK,UACL/iI,EAAE,mhBAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,s8BAEJ,oBACEw1G,MAAO,CACLy9J,gBAAiB,iCACjBxC,UAAW,kCAHf,UAME,sBACE1tI,KAAK,UACL/iI,EAAE,4SAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,8bACFonH,QAAQ,QAEV,sBACE2b,KAAM5iC,EACNngG,EAAE,igBAIR,oBAAG+iI,KAAK,OAAOuuI,SAAS,UAAUlqJ,QAAQ,IAAImP,UAAU,iEAAiE/gB,MAAO,CAACi7J,UAAW,kEAA5I,UAA+M,sBAAM1tI,KAAM5iC,EAAOngG,EAAE,oCAAoC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,mCAAmC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,qCAAqC,sBAAM+iI,KAAK,UAAU/iI,EAAE,wCAAyC,oBAAG+iI,KAAK,OAAOuuI,SAAS,UAAUlqJ,QAAQ,IAAImP,UAAU,iEAAiE/gB,MAAO,CAACi7J,UAAW,kEAA5I,UAA+M,sBAAM1tI,KAAK,mBAAmB/iI,EAAE,8BAA8Bu2H,UAAU,2DAA2D,sBAAMwM,KAAK,UAAU/iI,EAAE,0CAA0C,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,qCAAqC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,qCAAqC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,qCAAqC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,wCAAwC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,qCAAqC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,qCAAqC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,wCAAwC,sBAAM+iI,KAAM5iC,EAAOinB,QAAQ,KAAKpnH,EAAE,wCAAyC,oBAAG+iI,KAAK,OAAOuuI,SAAS,UAAUlqJ,QAAQ,IAAImP,UAAU,iEAAiE/gB,MAAO,CAACi7J,UAAW,kEAA5I,UAA+M,sBAAM1tI,KAAK,mBAAmB/iI,EAAE,mCAAmCu2H,UAAU,2DAA2D,sBAAMwM,KAAK,OAAO/iI,EAAE,yCAAyC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,sCAAsC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,yCAAyC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,yCAAyC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,sCAAsC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,sCAAsC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,yCAAyC,sBAAM+iI,KAAM5iC,EAAOngG,EAAE,oDChPnsF8nH,EAAe,SAAC,GAYK,IAAD,IAXxBtyC,aAWwB,MAXhB,MAWgB,MAVxBi2C,cAUwB,MAVf,MAUe,MATxBtrB,MACEgoB,GAQsB,aANpB,CACFA,YAAa,UACbjJ,gBAAiB,WAIK,GARtBiJ,YACAjJ,EAOsB,EAPtBA,gBAOsB,IAFxB6xJ,qBAEwB,MAFR,QAEQ,MADxBt7L,cACwB,MADf,IACe,EAExB,OACE,sBACED,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRD,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,UAOE,iCACE,yBAAQ1jE,EAAE,QAAQ2zB,EAAE,QAAQ8vC,MAAM,SAASi2C,OAAO,SAASumJ,YAAY,oBAAoB72O,GAAG,WAA9F,UACE,0BAAU82O,GAAG,IAAIC,GAAG,IAAIhwI,GAAG,cAAcp0H,OAAO,uBAChD,gCAAgBqkQ,aAAa,MAAMjwI,GAAG,qBAAqBp0H,OAAO,qBAClE,+BAAezI,OAAO,kDAAkDjL,KAAK,SAAS8nI,GAAG,wBAE3F,iCAAgBkwI,GAAG,cAAcC,GAAG,cAAcC,GAAG,cAAcC,GAAG,YAAYp3O,GAAG,mBAArF,UACE,sBAAMq3O,UAAU,UAAUC,YAAY,IAAIzqQ,OAAO,OACjD,sBAAMwqQ,UAAWrqJ,EAAangH,OAAO,YAEvC,yBAAQ+J,EAAE,QAAQ2zB,EAAE,QAAQ8vC,MAAM,SAASi2C,OAAO,SAASumJ,YAAY,oBAAoB72O,GAAG,WAA9F,UACE,0BAAU82O,GAAG,IAAIC,GAAG,IAAIhwI,GAAG,cAAcp0H,OAAO,uBAChD,gCAAgBqkQ,aAAa,MAAMjwI,GAAG,qBAAqBp0H,OAAO,qBAClE,+BAAezI,OAAO,kDAAkDjL,KAAK,SAAS8nI,GAAG,2BAG7F,mBAAG/mG,GAAG,wBAAwB81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAjF,SACE,mBAAGn2O,GAAG,kCAAkCo7F,UAAU,sCAAlD,SACE,mBAAGp7F,GAAG,WAAWo7F,UAAU,mCAA3B,SACE,oBAAGp7F,GAAG,UAAUo7F,UAAU,kCAA1B,UACE,oBAAGp7F,GAAG,SAAN,UACE,wBAAQwhI,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,OAAO0xD,KAAK,QAAQ6vI,YAAY,IAAIntQ,OAAO,mBACzE,wBAAQk3J,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,OAAO0xD,KAAM7jB,EAAiBoyJ,SAAS,eAEvE,sBAAMtxQ,EAAE,8eAA8em7B,GAAG,iBAAiB4nG,KAAK,yBAAyB3b,QAAS2pJ,IACjjB,oBAAG51O,GAAG,yBAAN,UACE,sBAAM4nG,KAAK,QAAQ6vI,YAAY,IAAIntQ,OAAO,iBAAiBzF,EAAE,8pCAC7D,sBAAM+iI,KAAK,UAAUuuI,SAAS,UAAUtxQ,EAAE,8qCCjDpD6nH,EAA4B,SAAC,GAYK,IAAD,IAXrCryC,aAWqC,MAX7B,MAW6B,MAVrCi2C,cAUqC,MAV5B,MAU4B,MATrCtrB,MACEgoB,GAQmC,aANjC,CACFA,YAAa,UACbjJ,gBAAiB,WAIkB,GARnCiJ,YACAjJ,EAOmC,EAPnCA,gBAOmC,IAFrC6xJ,qBAEqC,MAFrB,QAEqB,MADrCt7L,cACqC,MAD7B,IAC6B,EAErC,OACE,sBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,UAOE,iCACE,wBAAQt6C,GAAG,UAAUwhI,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SAC3C,yBACEl2C,GAAG,YACHq6C,MAAM,OACNi2C,OAAO,OACP15G,EAAE,MACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,iCACE81B,GAAG,oBACHi3O,GAAG,UACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAY,MAC9B,sBAAMzqQ,OAAO,OAAOwqQ,UAAWrqJ,OAEjC,sBACEhtF,GAAG,UACHn7B,EAAE,uiCAEJ,yBACEm7B,GAAG,YACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,SACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,qDAIb,mBACE09H,KAAK,OACLuuI,SAAS,UACTL,OAAO,OACPE,YAAY,IAJd,SAME,mBAAGh2O,GAAG,WAAWo7F,UAAU,iBAA3B,SACE,mBAAGp7F,GAAG,WAAN,SACE,oBAAGA,GAAG,WAAN,UACE,oBAAGA,GAAG,SAAN,UACE,qBACE4nG,KAAK,OACLt9H,OAAO,kBACPitQ,UAAU,aAEZ,qBAAK3vI,KAAM7jB,EAAiBwzJ,UAAU,gBAExC,sBACEv3O,GAAG,iBACH4nG,KAAK,0BACL/iI,EAAE,qNACFonH,QAAS2pJ,IAEX,oBAAG51O,GAAG,kBAAN,UACE,qBACE4nG,KAAK,OACLt9H,OAAO,kBACPitQ,UAAU,aAEZ,qBAAK3vI,KAAK,OAAO2vI,UAAU,6BClHrCQ,EAAa,SAAC,GAYK,IAAD,IAXtB19L,aAWsB,MAXd,KAWc,MAVtBi2C,cAUsB,MAVb,KAUa,MATtBtrB,MACEgoB,GAQoB,aANlB,CACFA,YAAa,UACbjJ,gBAAiB,WAIG,GARpBiJ,YACAjJ,EAOoB,EAPpBA,gBAOoB,IAFtB6xJ,qBAEsB,MAFN,QAEM,MADtBt7L,cACsB,MADb,IACa,EAEtB,OACE,sBACED,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRD,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,UAOE,iCACE,yBACE1jE,EAAE,SACF2zB,EAAE,SACF8vC,MAAM,SACNi2C,OAAO,SACPumJ,YAAY,oBACZ72O,GAAG,YANL,UAQE,0BAAU+2O,GAAI,EAAGhwI,GAAG,cAAcp0H,OAAO,uBACzC,gCACEqkQ,aAAc,IACdjwI,GAAG,qBACHp0H,OAAO,qBAET,+BACEzI,OAAO,6CACP68H,GAAG,wBAGP,yBACEnwH,EAAE,SACF2zB,EAAE,SACF8vC,MAAM,SACNi2C,OAAO,SACPumJ,YAAY,oBACZ72O,GAAG,YANL,UAQE,0BAAU+2O,GAAI,EAAGhwI,GAAG,cAAcp0H,OAAO,uBACzC,gCACEqkQ,aAAc,IACdjwI,GAAG,qBACHp0H,OAAO,qBAET,+BACEzI,OAAO,6CACP68H,GAAG,wBAGP,iCACEkwI,GAAG,UACHC,GAAG,UACHC,GAAG,UACHC,GAAG,UACHp3O,GAAG,YALL,UAOE,sBAAMs3O,YAAa,EAAGzqQ,OAAO,OAC7B,sBAAMwqQ,UAAWrqJ,EAAangH,OAAO,YAEvC,yBAASmzB,GAAG,YAAYwhI,GAAI,OAAQC,GAAI,GAAIg0G,GAAI,OAAQC,GAAI,KAC5D,sBACE7wQ,EAAE,i/BACFm7B,GAAG,iBAGP,oBAAG4nG,KAAK,OAAOuuI,SAAS,UAAxB,UACE,oBAAG/6I,UAAU,iBAAb,UACE,qBAAKwM,KAAK,OAAOt9H,OAAO,kBAAkBitQ,UAAU,eACpD,qBAAK3vI,KAAM7jB,EAAiBwzJ,UAAU,kBAExC,sBACE1yQ,EAAE,sHACF+iI,KAAK,kBACL3b,QAAS2pJ,EACTx6I,UAAU,mBAEZ,oBAAGA,UAAU,iBAAb,UACE,qBAAKwM,KAAK,OAAOt9H,OAAO,kBAAkBitQ,UAAU,eACpD,qBAAK3vI,KAAK,OAAO2vI,UAAU,yBC3F/BS,EAAyB,SAAC,GAcK,IAAD,IAblC39L,aAakC,MAb1B,MAa0B,MAZlCi2C,cAYkC,MAZzB,MAYyB,MAXlCtrB,MACEizK,GAUgC,aAN9B,CACFA,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,WAEsB,GAVhCH,SACAC,EASgC,EAThCA,SACAC,EAQgC,EARhCA,SACAC,EAOgC,EAPhCA,SASF,OACE,sBACEhD,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,QALrB,UAOE,+BACE,sBACEr7C,GAAG,SACHn7B,EAAE,wGAGN,mBAAG+iI,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,8BACE,sBACEwM,KAAK,UACL/iI,EAAE,kqBAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,oiBAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,4TAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,4TAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,ugBAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,4UAEJ,oBAAGu2H,UAAU,6BAAb,UACE,sBAAMp7F,GAAG,SAAS4nG,KAAK,OAAvB,SACE,qBAAK2vI,UAAU,cAEjB,sBACE3vI,KAAK,UACL/iI,EAAE,uIACFwzQ,KAAK,oBAGT,sBACEzwI,KAAK,UACL/iI,EAAE,ieAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,wUAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,wdAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,uJAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,2SAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,2TAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,oRAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,uJAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sSAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,yRAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,yJAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,oMAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,0MAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,wSAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,qMAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sWAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sMAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,8JAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,6DAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sNAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,6EAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,mJAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sDAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,6EAGN,oBAAGu2H,UAAU,qBAAb,UACE,sBACEwM,KAAK,UACL/iI,EAAE,wGAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,sFAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,gIAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,kGAEJ,sBACE+iI,KAAK,UACL/iI,EAAE,kIAEJ,sBACE+iI,KAAMqwI,EACNpzQ,EAAE,8nBAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,+bAEJ,sBACE+iI,KAAMswI,EACNrzQ,EAAE,8fAEJ,sBACE+iI,KAAMswI,EACNrzQ,EAAE,kaAEJ,sBACE+iI,KAAMqwI,EACNpzQ,EAAE,6dAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,4kBAEJ,sBACE+iI,KAAMuwI,EACNtzQ,EAAE,4FAEJ,sBACE+iI,KAAMwwI,EACNvzQ,EAAE,0QCzMZyzQ,EAAyB,SAAC,GAiBK,IAAD,IAhBlCj+L,aAgBkC,MAhB1B,MAgB0B,MAflCi2C,cAekC,MAfzB,MAeyB,MAdlCtrB,MACE+e,GAagC,aAR9B,CACFA,gBAAiB,UACjBw0J,KAAM,UACNC,MAAO,UACP99N,QAAS,UACT+9N,UAAW,WAGqB,GAbhC10J,gBACAw0J,EAYgC,EAZhCA,KACAC,EAWgC,EAXhCA,MACA99N,EAUgC,EAVhCA,QACA+9N,EASgC,EAThCA,UASgC,IADlC7C,qBACkC,MADlB,QACkB,EAElC,OACE,sBACER,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,QALrB,UAOE,iCACE,iCACEr7C,GAAG,mBACHi3O,GAAG,UACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAY,MAC9B,sBAAMzqQ,OAAO,OAAOwqQ,UAAU,eAEhC,sBACEr3O,GAAG,SACHn7B,EAAE,sHAEJ,yBACEm7B,GAAG,WACHq6C,MAAM,SACNi2C,OAAO,OACP15G,EAAE,SACF2zB,EAAE,OACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,MAEf,+BACEjwI,GAAG,mBACH78H,OAAO,qDAIb,mBAAG09H,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,yBACEomC,GAAG,SACHC,GAAG,KACH75B,KAAM7jB,EACNoyJ,SAAS,UACTV,GAAG,SACHC,GAAG,OAEL,sBACE9tI,KAAK,yBACL/iI,EAAE,gRACFonH,QAAS2pJ,IAEX,oBAAGO,SAAS,UAAU/6I,UAAU,uBAAhC,UACE,sBACEwM,KAAM4wI,EACN3zQ,EAAE,uKAEJ,sBACE+iI,KAAK,OACL/iI,EAAE,oHAEJ,sBACE+iI,KAAM2wI,EACN1zQ,EAAE,wEAEJ,sBACE+iI,KAAM2wI,EACN1zQ,EAAE,wGAEJ,sBACE+iI,KAAMltF,EACN71C,EAAE,2SAEJ,sBACE+iI,KAAMltF,EACN71C,EAAE,4FAEJ,sBACE+iI,KAAMltF,EACN71C,EAAE,uSAGN,mBAAGsxQ,SAAS,UAAU/6I,UAAU,wBAAhC,SACE,8BACE,qBACEwM,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAM6wI,EAAWlB,UAAU,iBAGpC,sBACE3vI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,2MCtJV6zQ,EAAuB,SAAC,GAMK,IAAD,IALhCr+L,aAKgC,MALxB,MAKwB,MAJhCi2C,cAIgC,MAJvB,MAIuB,MAHhCtrB,aAGgC,MAHxB,UAGwB,MAFhC2zK,oBAEgC,MAFjB,QAEiB,MADhCr+L,cACgC,MADvB,IACuB,EAEhC,OACE,sBACED,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GAJtE,UAME,iCACE,sBACEt6C,GAAG,YACH44O,iBAAiB,iBACjBC,UAAU,oBACVjiQ,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,IACPi2C,OAAQ,GACRsX,KAAK,OARP,SAUE,qBAAK2vI,UAAU,iBAEjB,sBACEv3O,GAAG,YACH44O,iBAAiB,iBACjBC,UAAU,oBACVjiQ,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,IACPi2C,OAAQ,GACRsX,KAAK,OARP,SAUE,qBAAK2vI,UAAU,iBAEjB,sBACEv3O,GAAG,YACH44O,iBAAiB,iBACjBC,UAAU,oBACVjiQ,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,GACPi2C,OAAQ,IACRsX,KAAK,OARP,SAUE,qBAAK2vI,UAAU,iBAEjB,sBACEv3O,GAAG,YACH44O,iBAAiB,iBACjBC,UAAU,oBACVjiQ,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,GACPi2C,OAAQ,IACRsX,KAAK,OARP,SAUE,qBAAK2vI,UAAU,iBAEjB,sBACEv3O,GAAG,YACH44O,iBAAiB,iBACjBC,UAAU,oBACVjiQ,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,GACPi2C,OAAQ,IACRsX,KAAK,OARP,SAUE,qBAAK2vI,UAAU,iBAEjB,sBACE1yQ,EAAE,yEACFm7B,GAAG,cAEL,sBACEn7B,EAAE,2EACFm7B,GAAG,cAEL,sBACEn7B,EAAE,2EACFm7B,GAAG,cAEL,sBACEn7B,EAAE,2EACFm7B,GAAG,cAEL,sBAAMA,GAAG,YAAYppB,EAAG,IAAK2zB,EAAG,GAAI8vC,MAAO,GAAIi2C,OAAQ,IAAKmlJ,GAAI,OAElE,oBAAGr6I,UAAU,iBAAiBwM,KAAK,OAAOuuI,SAAS,UAAnD,UACE,sBACEtxQ,EAAE,2GACFixQ,OAAO,UACPE,YAAa,IACbpuI,KAAK,SAEP,sBACE/iI,EAAE,gHACFixQ,OAAO,UACPE,YAAa,IACbpuI,KAAK,SAEP,oBAAG3b,QAAS,IAAZ,UACE,sBAAM2b,KAAK,UAAU/iI,EAAE,mBACvB,sBACE+iI,KAAK,UACL/iI,EAAE,yDAGN,sBAAM+iI,KAAK,UAAU/iI,EAAE,uCACvB,oBAAGu2H,UAAU,4BAA4BwM,KAAK,UAA9C,UACE,yBAAS45B,GAAI,MAAOC,GAAI,MAAOg0G,GAAI,MAAOC,GAAI,QAC9C,yBAASl0G,GAAI,OAAQC,GAAI,MAAOg0G,GAAI,MAAOC,GAAI,QAC/C,yBAASl0G,GAAI,OAAQC,GAAI,MAAOg0G,GAAI,MAAOC,GAAI,WAEjD,sBAAM9tI,KAAM5iC,EAAOinB,QAAS0sJ,EAAc9zQ,EAAE,uBAC5C,sBAAM+iI,KAAK,UAAU/iI,EAAE,yCACvB,sBAAM+iI,KAAK,UAAU/iI,EAAE,uBACvB,sBAAM+iI,KAAK,UAAU/iI,EAAE,gCACvB,sBACEA,EAAE,yCACFixQ,OAAO,UACPE,YAAa,EACbpuI,KAAK,YAEP,sBAAMA,KAAK,UAAU/iI,EAAE,gCACvB,sBACEA,EAAE,yCACFixQ,OAAO,UACPE,YAAa,EACbpuI,KAAK,YAEP,sBAAMA,KAAK,UAAU/iI,EAAE,gCACvB,sBACEA,EAAE,yCACFixQ,OAAO,UACPE,YAAa,EACbpuI,KAAK,YAEP,sBAAMA,KAAK,UAAU/iI,EAAE,gCACvB,sBACEA,EAAE,yCACFixQ,OAAO,UACPE,YAAa,EACbpuI,KAAK,YAEP,sBAAMA,KAAK,UAAU/iI,EAAE,gCACvB,sBACEA,EAAE,yCACFixQ,OAAO,UACPE,YAAa,EACbpuI,KAAK,YAEP,sBAAMA,KAAK,UAAU/iI,EAAE,uBACvB,mBAAGonH,QAAS,GAAK2b,KAAK,UAAtB,SACE,sBAAM/iI,EAAE,wjBAEV,sBAAM+iI,KAAK,UAAU/iI,EAAE,uBACvB,mBAAGonH,QAAS,GAAK2b,KAAK,UAAtB,SACE,sBAAM/iI,EAAE,+iBAEV,sBAAM+iI,KAAK,UAAU/iI,EAAE,yBACvB,sBACEA,EAAE,gJACF+iI,KAAK,YAEP,mBAAGA,KAAK,UAAR,SACE,sBAAM/iI,EAAE,oJAEV,mBAAG+iI,KAAK,UAAR,SACE,sBAAM/iI,EAAE,oJAEV,mBAAG+iI,KAAK,UAAR,SACE,sBAAM/iI,EAAE,oJAEV,mBAAG+iI,KAAK,UAAR,SACE,sBAAM/iI,EAAE,oJAEV,qBACEixQ,OAAO,UACPuC,KAAK,kBACLrC,YAAa,EACb8C,gBAAiB,EACjBvB,UAAU,eAEZ,qBACEzB,OAAO,UACPuC,KAAK,kBACLrC,YAAa,EACb8C,gBAAiB,EACjBvB,UAAU,eAEZ,qBACEzB,OAAO,UACPuC,KAAK,kBACLrC,YAAa,EACb8C,gBAAiB,EACjBvB,UAAU,eAEZ,qBACEzB,OAAO,UACPuC,KAAK,kBACLrC,YAAa,EACb8C,gBAAiB,EACjBvB,UAAU,eAEZ,qBACEzB,OAAO,UACPuC,KAAK,kBACLrC,YAAa,EACb8C,gBAAiB,EACjBvB,UAAU,sBCzMdwB,G,QAAgB,SAAC,GAaK,IAAD,IAZzB1+L,aAYyB,MAZjB,MAYiB,MAXzBi2C,cAWyB,MAXhB,MAWgB,MAVzBtrB,MACEgoB,GASuB,aAPrB,CACFA,YAAa,UACbjJ,gBAAiB,WAKM,GATvBiJ,YACAjJ,EAQuB,EARvBA,gBAQuB,IAHzB6xJ,qBAGyB,MAHT,OAGS,MAFzBc,uBAEyB,MAFP,UAEO,MADzBp8L,cACyB,MADhB,IACgB,EAEzB,OACE,qBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,mBAAGstD,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,oBAAG+6I,SAAS,UAAZ,UACE,mBAAGvuI,KAAM7jB,EAAT,SACE,4BACE,4BACE,wBAAQy9C,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,eAIpC,sBACE0xD,KAAM5a,GAAe,UACrBnoH,EAAE,yMACFonH,QAAS2pJ,OAGb,mBAAGhuI,KAAM8uI,EAAiBt7I,UAAU,mBAApC,SACE,sBACE+6I,SAAS,UACTtxQ,EAAE,qPC1CZm0Q,EAAe,SAAC,GAaK,IAAD,IAZxB3+L,aAYwB,MAZhB,MAYgB,MAXxBi2C,cAWwB,MAXf,MAWe,MAVxBtrB,MACEgoB,GASsB,aAPpB,CACFA,YAAa,UACbjJ,gBAAiB,WAKK,GATtBiJ,YACAjJ,EAQsB,EARtBA,gBAQsB,IAHxB6xJ,qBAGwB,MAHR,OAGQ,MAFxBc,uBAEwB,MAFN,UAEM,MADxBp8L,cACwB,MADf,IACe,EAExB,OACE,qBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,mBAAGstD,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAG+6I,SAAS,UAAU/6I,UAAU,qBAAhC,UACE,oBAAG46I,YAAY,IAAf,UACE,mBAAGpuI,KAAM7jB,EAAT,SACE,4BACE,4BACE,wBAAQy9C,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,eAIpC,sBACE0xD,KAAM5a,EACNnoH,EAAE,iJACFonH,QAAS2pJ,OAGb,sBACEhuI,KAAM8uI,EACN7xQ,EAAE,wM,SC1CV+nH,EAAkB,SAAC,GAaK,IAAD,IAZ3BvyC,aAY2B,MAZnB,MAYmB,MAX3Bi2C,cAW2B,MAXlB,MAWkB,MAV3BtrB,MACEgoB,GASyB,aAPvB,CACFA,YAAa,UACbjJ,gBAAiB,WAKQ,GATzBiJ,YACAjJ,EAQyB,EARzBA,gBAQyB,IAH3B6xJ,qBAG2B,MAHX,OAGW,MAF3Bc,uBAE2B,MAFT,UAES,MAD3Bp8L,cAC2B,MADlB,IACkB,EAE3B,OACE,qBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,oBAAGstD,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,UACE,8BACE,mBAAGpuI,KAAM7jB,EAAT,SACE,4BACE,wBAAQy9C,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,aAGlC,sBACE0xD,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,2IACFonH,QAAS2pJ,OAGb,mBAAGhuI,KAAM8uI,EAAiBP,SAAS,UAAU/6I,UAAU,mBAAvD,SACE,sBAAMv2H,EAAE,gtBC5CZo0Q,EAAgB,SAAC,GAYK,IAAD,IAXzB5+L,aAWyB,MAXjB,MAWiB,MAVzBi2C,cAUyB,MAVhB,MAUgB,MATzBtrB,MACEgoB,GAQuB,aANrB,CACFA,YAAa,UACbjJ,gBAAiB,WAIM,GARvBiJ,YACAjJ,EAOuB,EAPvBA,gBAOuB,IAFzB6xJ,qBAEyB,MAFT,QAES,MADzBt7L,cACyB,MADhB,IACgB,EAEzB,OACE,sBACED,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRD,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,UAOE,iCACE,iCACE28L,GAAG,UACHC,GAAG,UACHC,GAAG,UACHC,GAAG,UACHp3O,GAAG,YALL,UAOE,sBAAMs3O,YAAa,EAAGzqQ,OAAO,OAC7B,sBAAMwqQ,UAAWrqJ,EAAangH,OAAO,YAEvC,yBAASmzB,GAAG,YAAYwhI,GAAI,KAAMC,GAAI,OAAQg0G,GAAI,KAAMC,GAAI,SAC5D,yBACE9+P,EAAE,MACF2zB,EAAE,QACF8vC,MAAM,OACNi2C,OAAO,SACPumJ,YAAY,oBACZ72O,GAAG,YANL,UAQE,0BAAU+2O,GAAI,EAAGhwI,GAAG,cAAcp0H,OAAO,uBACzC,gCACEqkQ,aAAc,IACdjwI,GAAG,qBACHp0H,OAAO,qBAET,+BACEzI,OAAO,6CACP68H,GAAG,2BAIT,oBAAGa,KAAK,OAAOuuI,SAAS,UAAxB,UACE,oBAAG/6I,UAAU,iBAAb,UACE,qBAAKwM,KAAK,OAAOt9H,OAAO,kBAAkBitQ,UAAU,eACpD,qBAAK3vI,KAAM7jB,EAAiBwzJ,UAAU,kBAExC,sBACE1yQ,EAAE,iKACF+iI,KAAK,kBACLuuI,SAAS,UACTlqJ,QAAS2pJ,EACTx6I,UAAU,mBAEZ,sBACEv2H,EAAE,+3BACF+iI,KAAK,OACLuuI,SAAS,mBC/Fb+C,EAAc,SAAC,GAIK,IAAD,IAHvB7+L,aAGuB,MAHf,KAGe,MAFvBi2C,cAEuB,MAFd,KAEc,MADvBsX,YACuB,MADhB,UACgB,EACvB,OACE,qBACEvtD,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACR5sP,QAAQ,MACR2sP,MAAM,6BALR,SAOI,mBAAGp1O,GAAG,uBAAuB81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAhF,SACI,mBAAGn2O,GAAG,wDAA8Co7F,UAAU,sCAA9D,SACI,oBAAGp7F,GAAG,UAAUo7F,UAAU,oCAA1B,UACI,wBAAQp7F,GAAG,OAAO81O,OAAQluI,EAAM45B,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SACtD,sBAAMl2C,GAAG,IAAI4nG,KAAMA,EAAMuuI,SAAS,UAAUgD,WAAW,YAAYC,YAAY,KAAK99I,WAAW,SAAS+9I,cAAc,gBAAtH,SACI,uBAAOziQ,EAAE,KAAK2zB,EAAE,KAAhB,2BClBlB+uO,EAAc,SAAC,GAIK,IAAD,IAHvBj/L,aAGuB,MAHf,KAGe,MAFvBi2C,cAEuB,MAFd,KAEc,MADvBsX,YACuB,MADhB,UACgB,EACvB,OACE,qBACEvtD,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACR5sP,QAAQ,MACR2sP,MAAM,6BALR,SAOI,mBAAGp1O,GAAG,uBAAuB81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAhF,SACI,mBAAGn2O,GAAG,yDAA+Co7F,UAAU,sCAA/D,SACI,oBAAGp7F,GAAG,UAAUo7F,UAAU,oCAA1B,UACI,wBAAQp7F,GAAG,OAAO81O,OAAQluI,EAAM45B,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SACtD,sBAAMl2C,GAAG,IAAI4nG,KAAMA,EAAMuuI,SAAS,UAAUgD,WAAW,YAAYjzJ,SAAS,KAAKoV,WAAW,SAAS+9I,cAAc,gBAAnH,SACI,uBAAOziQ,EAAE,KAAK2zB,EAAE,KAAhB,2BCblBgvO,EAAoB,SAAC,GAMK,IAAD,IAL7Bl/L,aAK6B,MALrB,KAKqB,MAJ7Bi2C,cAI6B,MAJpB,KAIoB,MAH7BtrB,aAG6B,MAHrB,OAGqB,MAF7B7sB,iBAE6B,MAFjB,GAEiB,MAD7BkiC,aAC6B,MADrB,GACqB,EAE7B,OACE,qBACE+6J,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRl9L,UAAWA,EACXkiC,MAAOA,EANT,SAQE,mBAAGutB,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAGpuI,KAAM5iC,EAAOmxK,SAAS,UAAU/6I,UAAU,wBAA7C,SACE,sBAAMv2H,EAAE,4mBClBZ20Q,EAAuB,SAAC,GAOK,IAAD,IANhCn/L,aAMgC,MANxB,KAMwB,MALhCi2C,cAKgC,MALvB,KAKuB,MAJhCtrB,aAIgC,MAJxB,OAIwB,MAHhC7sB,iBAGgC,MAHpB,GAGoB,MAFhCkiC,aAEgC,MAFxB,GAEwB,MADhCo/J,2BACgC,MADV,gBACU,EAEhC,OACE,qBACErE,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRl9L,UAAWA,EACXkiC,MAAOA,EACPo/J,oBAAqBA,EAPvB,SASE,sBAAM7xI,KAAM5iC,EAAOmxK,SAAS,UAAUtxQ,EAAE,kQCfxC60Q,EAA6B,SAAC,GAMK,IAAD,IALtCr/L,aAKsC,MAL9B,MAK8B,MAJtCi2C,cAIsC,MAJ7B,MAI6B,MAHtCtrB,aAGsC,MAH9B,OAG8B,MAFtCgoB,mBAEsC,MAFxB,UAEwB,MADtC3S,aACsC,MAD9B,GAC8B,EAEtC,OACE,sBACE+6J,MAAM,6BACNuE,WAAW,+BACXt/L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAOA,EANT,UAQE,iCACE,yBACEr6E,GAAG,SACHwhI,GAAG,SACHC,GAAG,OACHg0G,GAAG,SACHC,GAAG,SAEL,yBACE11O,GAAG,WACHq6C,MAAM,OACNi2C,OAAO,OACP15G,EAAE,MACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,iCACE81B,GAAG,mBACHi3O,GAAG,UACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAa,IAC/B,sBAAMzqQ,OAAO,OAAOwqQ,UAAWrqJ,OAEjC,wBAAQhtF,GAAG,WAAX,SACE,+BACE+mG,GAAG,gBACH78H,OAAO,0EAGX,yBACE81B,GAAG,WACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,SACF2zB,EAAE,SACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,MAEf,+BACEjwI,GAAG,mBACHp0H,OAAO,qBACPzI,OAAO,8CAET,oCACE,6BAAa68H,GAAG,uBAChB,6BAAaA,GAAG,2BAItB,mBAAGa,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,yBAAb,SACE,oBAAGA,UAAU,uBAAb,UACE,8BACE,4BACE,8BACE,qBACEwM,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAM5iC,EAAOuyK,UAAU,iBAGhC,sBACE3vI,KAAK,yBACLuuI,SAAS,UACTtxQ,EAAE,mWACFonH,QAAQ,WAGZ,mBAAG3hH,OAAO,iBAAV,SACE,oBAAGA,OAAO,iBAAiB8wH,UAAU,mBAArC,UACE,sBAAMv2H,EAAE,0BACR,sBACE+iI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,2KCxHd+0Q,G,OAAwB,SAAC,GAMK,IAAD,IALjCv/L,aAKiC,MALzB,MAKyB,MAJjCi2C,cAIiC,MAJxB,MAIwB,MAHjCtrB,aAGiC,MAHzB,OAGyB,MAFjCgoB,mBAEiC,MAFnB,UAEmB,MADjC3S,aACiC,MADzB,GACyB,EAEjC,OACE,sBACE+6J,MAAM,6BACNuE,WAAW,+BACXt/L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAOA,EANT,UAQE,iCACE,yBAASr6E,GAAG,SAASwhI,GAAG,KAAKC,GAAG,KAAKg0G,GAAG,KAAKC,GAAG,OAChD,yBACE11O,GAAG,WACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,QACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,iDAGX,iCACE81B,GAAG,mBACHi3O,GAAG,UACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAY,MAC9B,sBAAMzqQ,OAAO,OAAOwqQ,UAAWrqJ,UAGnC,mBAAG4a,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,wBAAb,SACE,oBAAGA,UAAU,sBAAb,UACE,4BACE,4BACE,8BACE,qBACEwM,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAM5iC,EAAOuyK,UAAU,mBAIlC,sBACE3vI,KAAK,yBACLuuI,SAAS,UACTtxQ,EAAE,kHACFonH,QAAQ,UAEV,sBACE2b,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,+f,SC3DVg1Q,EAAY,SAAC,GAYK,IAAD,IAXrBx/L,aAWqB,MAXb,MAWa,MAVrBi2C,cAUqB,MAVZ,MAUY,MATrBtrB,MACEgoB,GAQmB,aANjB,CACFA,YAAa,UACbjJ,gBAAiB,WAIE,GARnBiJ,YACAjJ,EAOmB,EAPnBA,gBAOmB,IAFrB6xJ,qBAEqB,MAFL,OAEK,MADrBt7L,cACqB,MADZ,IACY,EAErB,OACE,qBACED,MAAOA,EACPi2C,OAAQA,EACR8kJ,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GAJtE,SAME,oBAAGstD,KAAK,OAAOuuI,SAAS,UAAxB,UACE,8BACE,wBAAQvuI,KAAM7jB,EAAiBy9C,GAAI,KAAMC,GAAI,KAAMvrF,EAAG,OACtD,sBACErxE,EAAE,mGACF+iI,KAAM5a,EACNmpJ,SAAS,UACTlqJ,QAAS2pJ,OAGb,sBACE/wQ,EAAE,2XACF+iI,KAAK,OACLuuI,SAAS,kBCxCb2D,EAAyB,SAAC,GAWK,IAAD,IAVlCz/L,aAUkC,MAV1B,KAU0B,MATlCi2C,cASkC,MATzB,KASyB,MARlCtrB,MACEgoB,GAOgC,aAL9B,CACFA,YAAa,UACbjJ,gBAAiB,WAGe,GAPhCiJ,YACAjJ,EAMgC,EANhCA,gBAMgC,IADlC6xJ,qBACkC,MADlB,OACkB,EAElC,OACE,qBAAKv7L,MAAOA,EAAOi2C,OAAQA,EAAQ+kJ,QAAQ,cAAc5sP,QAAQ,MAAM2sP,MAAM,6BAA6BuE,WAAW,+BAArH,SACI,mBAAG35O,GAAG,6BAA6B81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAtF,SACI,oBAAGn2O,GAAG,uCAAN,UACI,mBAAGA,GAAG,SAAS4nG,KAAM7jB,EAArB,SACI,wBAAQ/jF,GAAG,SAASwhI,GAAG,KAAKC,GAAG,KAAKvrF,EAAE,SAE1C,sBAAMrxE,EAAE,qLAAqLm7B,GAAG,iBAAiB4nG,KAAM5a,EAAampJ,SAAS,UAAUlqJ,QAAS2pJ,IAChQ,mBAAG51O,GAAG,cAAco7F,UAAU,kCAAkCwM,KAAK,UAArE,SACI,sBAAM/iI,EAAE,wpCAAwpCm7B,GAAG,qBCtBjrC+5O,EAAiB,SAAC,GAWK,IAAD,IAV1B1/L,aAU0B,MAVlB,KAUkB,MAT1Bi2C,cAS0B,MATjB,KASiB,MAR1BtrB,MACEgoB,GAOwB,aALtB,CACFA,YAAa,UACbjJ,gBAAiB,WAGO,GAPxBiJ,YACAjJ,EAMwB,EANxBA,gBAMwB,IAD1B6xJ,qBAC0B,MADV,OACU,EAE1B,OACE,qBAAKv7L,MAAOA,EAAOi2C,OAAQA,EAAQ+kJ,QAAQ,cAAc5sP,QAAQ,MAAM2sP,MAAM,6BAA6BuE,WAAW,+BAArH,SACI,mBAAG35O,GAAG,WAAW81O,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAApE,SACI,mBAAGn2O,GAAG,mEAAmEo7F,UAAU,sCAAnF,SACI,oBAAGp7F,GAAG,gBAAgBo7F,UAAU,oCAAhC,UACI,wBAAQp7F,GAAG,SAAS4nG,KAAM7jB,EAAiBy9C,GAAG,KAAKC,GAAG,KAAKvrF,EAAE,OAC7D,mBAAGl2C,GAAG,cAAco7F,UAAU,oCAC9B,sBAAMv2H,EAAE,iRAAiRm7B,GAAG,iBAAiB4nG,KAAM5a,EAAampJ,SAAS,UAAUlqJ,QAAS2pJ,IAC5V,oBAAG51O,GAAG,sBAAsBo7F,UAAU,kCAAtC,UACI,yBAASp7F,GAAG,OAAOg6O,OAAO,4BAC1B,yBAASh6O,GAAG,OAAO4nG,KAAK,UAAUuuI,SAAS,UAAU6D,OAAO,wBAC5D,wBAAQh6O,GAAG,OAAO4nG,KAAK,UAAUuuI,SAAS,UAAU30G,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SAC1E,yBAASl2C,GAAG,OAAO4nG,KAAK,UAAUuuI,SAAS,UAAU6D,OAAO,2CC3B9EntJ,EAAsB,SAAC,GAWK,IAAD,IAV/BxyC,aAU+B,MAVvB,MAUuB,MAT/Bi2C,cAS+B,MATtB,MASsB,MAR/BtrB,MACEgoB,GAO6B,aAL3B,CACFA,YAAa,UACbjJ,gBAAiB,WAGY,GAP7BiJ,YACAjJ,EAM6B,EAN7BA,gBAM6B,IAD/B6xJ,qBAC+B,MADf,OACe,EAE/B,OACE,sBACER,MAAM,6BACNuE,WAAW,+BACXt/L,MAAOA,EACPi2C,OAAQA,EAJV,UAME,gCACG,sEAEH,iCACE,yBACEtwF,GAAG,IACHq6C,MAAM,OACNi2C,OAAO,OACP15G,EAAE,MACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BAAUE,GAAI,EAAGhwI,GAAG,cAAcp0H,OAAO,uBACzC,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAc,MAEhB,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,yBACE81B,GAAG,IACHq6C,MAAM,SACNi2C,OAAO,SACP15G,EAAE,QACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BAAUE,GAAI,EAAGhwI,GAAG,cAAcp0H,OAAO,uBACzC,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAc,MAEhB,+BACEjwI,GAAG,mBACH78H,OAAO,kDAGX,wBAAQ81B,GAAG,IAAIwhI,GAAI,KAAMC,GAAI,KAAMvrF,EAAG,OACtC,sBACEl2C,GAAG,IACHn7B,EAAE,uKAGN,oBAAG+iI,KAAK,OAAOuuI,SAAS,UAAxB,UACE,qBAAKoB,UAAU,KAAK3vI,KAAK,OAAOt9H,OAAO,YACvC,qBAAKitQ,UAAU,KAAK3vI,KAAM7jB,IAC1B,oBAAGkI,QAAS2pJ,EAAZ,UACE,qBAAK2B,UAAU,KAAK3vI,KAAK,OAAOt9H,OAAO,YACvC,qBAAKitQ,UAAU,KAAK3vI,KAAM5a,OAE5B,sBAAMnoH,EAAE,qBACR,sBACE+iI,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,8wBClGNo1Q,EAAoB,SAAC,GAIK,IAAD,IAH7BryI,YAG6B,MAHtB,OAGsB,IAF7BvtD,MAE6B,EAD7Bi2C,OAGA,OACA,sBACE8kJ,MAAM,6BACN/6L,MAAM,KACNi2C,OAAO,KACPsX,KAAK,OACLytI,QAAQ,YALV,UAOE,sBACEztI,KAAMA,EACNuuI,SAAS,UACTtxQ,EAAE,kQACFuxQ,SAAS,YAEX,sBACExuI,KAAMA,EACN/iI,EAAE,2kBCdFq1Q,EAAe,SAAC,GAOK,IAAD,IANxB7/L,aAMwB,MANhB,GAMgB,MALxBi2C,cAKwB,MALf,GAKe,MAJxBtrB,aAIwB,MAJhB,UAIgB,MAHxB+e,uBAGwB,MAHN,UAGM,MAFxB5rC,iBAEwB,MAFZ,GAEY,MADxBkiC,aACwB,MADhB,GACgB,EAExB,OACE,sBACEhgC,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BACNj9L,UAAWA,EACXkiC,MAAOA,EAPT,UASE,sBAAMhgC,MAAOA,EAAOi2C,OAAQA,EAAQmlJ,GAAI,GAAI7tI,KAAM7jB,IAClD,mBAAGuyJ,SAAS,yBAAZ,SACE,sBACEzxQ,EAAE,0ZACF+iI,KAAM5iC,MAGV,+BACE,0BAAUhlE,GAAG,mBAAb,SACE,sBACEq6C,MAAO,GACPi2C,OAAQ,GACRsX,KAAK,QACLxM,UAAU,6B,OC/BhB++I,EAAqB,SAAC,GAAD,IACzBC,EADyB,EACzBA,MADyB,IAEzB//L,aAFyB,MAEjB,KAFiB,MAGzBi2C,cAHyB,MAGhB,KAHgB,MAIzBtrB,aAJyB,MAIjB,UAJiB,MAKzBq1K,oBALyB,MAKV,UALU,SAOzB,sBACEhgM,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRztI,KAAK,OACLwtI,MAAM,6BACN/6J,MAAO,CAAEh/B,SAAU,QANrB,UAQE,sBACE86L,SAAS,UACTC,SAAS,UACTvxQ,EAAGu1Q,EACHxyI,KAAM5iC,IAER,sBACEngG,EAxB2B,4fAyB3B+iI,KAAM5iC,EACN8wK,OAAQuE,EACRrE,YAAa,SAcbsE,EAA4B,SAACrxO,GAAD,OAChC,cAAC,EAAD,2BAAwBA,GAAxB,IAA+BmxO,MAhDX,4cA2DhBG,EAA4B,SAACtxO,GAAD,OAChC,cAAC,EAAD,2BAAwBA,GAAxB,IAA+BmxO,MAzDX,uzB,6BC3BP,SAAS72I,EAAWj+H,GAOjC,OAAOA,EAAO+hJ,OAAO,GAAGje,cAAgB9jI,EAAOuJ,MAAM,GAXvD,mC,qKCMO,SAAS2rQ,IAAkC,IAAfzvO,EAAc,uDAAJ,GACrC0vO,EAAa,IAAIC,gBACjBC,EAASF,EAAWE,OAEpB55H,EAAU38G,IAAMA,MAAM4iE,OAAOJ,QAAnB,2BAAgC77D,GAAhC,IAAyC4vO,YACtDj1E,OAAM,SAAAv1J,GACL,GAAiB,eAAbA,EAAI5iC,KACN,OAAO,IAAIywC,SAAQ,eAErB,MAAM7N,KAGV,MAAO,CACL4wG,UACAn2H,OAAQ,kBAAM6vP,EAAWG,UAKtB,IAAMC,EAAgBr3O,qBAAoB3oC,GAEpC6tH,EAAa,kBAAM,SAAChwE,GAAD,OAAe,SAAyBzP,GACtE,OACE,cAAC4xO,EAAcvxO,SAAf,UACG,SAAC09D,GAAD,OAAY,cAACtuD,EAAD,2BAAezP,GAAf,IAAsB+9D,OAAQA,WAYpC8zK,EAAwB,kBAAMtxO,qBAAWqxO,IACvCA,O,8BC3Cf,4FAIA,SAASvhO,EAAQzzC,GAWf,OATEyzC,EADoB,oBAAX76C,QAAoD,kBAApBA,OAAOC,SACtC,SAAUmH,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAItHyzC,EAAQzzC,GAGjB,SAASkuE,EAAgBluE,EAAKxC,EAAK5I,GAYjC,OAXI4I,KAAOwC,EACT1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAC9B5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZlB,EAAIxC,GAAO5I,EAGNoL,EAGT,SAASkxC,EAAchrB,GACrB,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAaU,UAAUV,GAAK,GAC/C0pB,EAAUtuB,OAAO0D,KAAKmrB,GAEkB,oBAAjC7uB,OAAOkgB,wBAChBoO,EAAUA,EAAQphB,OAAOlN,OAAOkgB,sBAAsB2O,GAAQ1hB,QAAO,SAAUshB,GAC7E,OAAOzuB,OAAO0uB,yBAAyBG,EAAQJ,GAAK/kB,gBAIxD4kB,EAAQhgB,SAAQ,SAAUpI,GACxB0wE,EAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAIxC,OAAO0oB,EAkBT,SAASkwB,EAAyBjwB,EAAQu4K,GACxC,GAAc,MAAVv4K,EAAgB,MAAO,GAE3B,IAEI3oB,EAAKtB,EAFLgqB,EAlBN,SAAuCC,EAAQu4K,GAC7C,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IAEI3oB,EAAKtB,EAFLgqB,EAAS,GACTgvP,EAAa59Q,OAAO0D,KAAKmrB,GAG7B,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IACjCsB,EAAM03Q,EAAWh5Q,GACbwiM,EAAShlL,QAAQlc,IAAQ,IAC7B0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAGvB,OAAO0oB,EAMM0c,CAA8Bzc,EAAQu4K,GAInD,GAAIpnM,OAAOkgB,sBAAuB,CAChC,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAEpD,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IACvCsB,EAAMmhM,EAAiBziM,GACnBwiM,EAAShlL,QAAQlc,IAAQ,GACxBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KACxD0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAIzB,OAAO0oB,EAGT,SAAS2yE,EAAmB9xF,GAC1B,OAGF,SAA4BA,GAC1B,GAAIpM,MAAMC,QAAQmM,GAAM,CACtB,IAAK,IAAI7K,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMoM,EAAIhM,QAASmB,EAAI6K,EAAIhM,OAAQmB,IAAKggP,EAAKhgP,GAAK6K,EAAI7K,GAEjF,OAAOggP,GAPFi5B,CAAmBpuQ,IAW5B,SAA0BhS,GACxB,GAAI6D,OAAOC,YAAYvB,OAAOvC,IAAkD,uBAAzCuC,OAAOD,UAAU8C,SAASD,KAAKnF,GAAgC,OAAO4F,MAAMuN,KAAKnT,GAZtFqgR,CAAiBruQ,IAerD,WACE,MAAM,IAAIxL,UAAU,mDAhBuC85Q,GAmB7D,IAAIC,EAAmC,qBAAX1tP,OAAyBA,OAA2B,qBAAXwgJ,EAAyBA,EAAyB,qBAATE,KAAuBA,KAAO,GAM5I,IAAIitG,EAJJ,SAA8Bx5Q,EAAI3H,GACjC,OAAiC2H,EAA1B3H,EAAS,CAAEC,QAAS,IAAiBD,EAAOC,SAAUD,EAAOC,QAGzDmhR,EAAqB,SAAUphR,IAC3C,SAAUg0K,GAER,IAAIqtG,EAAe,SAAfA,EAAwBj8F,EAASx5K,EAAKklC,GACxC,IAAIwwO,EAAU11Q,IAAQ21Q,EAAQ31Q,IAAQ41Q,EAAU51Q,IAAQ61Q,EAAW71Q,IAAQ81Q,EAAY91Q,GACrF,OAAOA,EAGT,IAAI+5I,EACA79I,EAAI,EACJqlB,EAAI,EAER,GAAGw0P,EAAS/1Q,GAEV,IADA+5I,EAAS,GACLx4H,EAAEvhB,EAAIjF,OAAQmB,EAAEqlB,EAAGrlB,IACrB69I,EAAOz0I,KAAKmwQ,EAAaj8F,EAASx5K,EAAI9D,GAAIgpC,SAK5C,IAAI,IAAI1nC,KADRu8I,EAAS,GACM/5I,EACV1I,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,KAC3Cu8I,EAAOy/B,EAAQh8K,EAAK0nC,IAAYuwO,EAAaj8F,EAASx5K,EAAIxC,GAAM0nC,IAItE,OAAO60G,GAaLmmE,EAAW,SAASzgN,GACtB,OAAIu2Q,EAAav2Q,GACRA,GAETA,EAASA,EAAOqyE,QAAQ,iBAAiB,SAASrqC,EAAO4kI,GACvD,OAAOA,EAAMA,EAAI9oC,cAAgB,OAGrB1b,OAAO,EAAG,GAAGv1E,cAAgB7yC,EAAOooH,OAAO,IAGvDouJ,EAAY,SAASx2Q,GACvB,IAAIy2Q,EAAYh2D,EAASzgN,GAEzB,OAAOy2Q,EAAUruJ,OAAO,EAAG,GAAG0b,cAAgB2yI,EAAUruJ,OAAO,IAG7DsuJ,EAAa,SAAS12Q,EAAQylC,GAChC,OA1BkB,SAASzlC,EAAQylC,GAEnC,IAAIjqB,GADJiqB,EAAUA,GAAW,IACGjqB,WAAa,IACjCg9B,EAAQ/S,EAAQ+S,OAAS,YAE7B,OAAOx4C,EAAOw4C,MAAMA,GAAOt9B,KAAKM,GAqBzBm7P,CAAc32Q,EAAQylC,GAASoN,eAMpCn4C,EAAW7C,OAAOD,UAAU8C,SAE5B27Q,EAAc,SAAS91Q,GACzB,MAAuB,oBAATA,GAEZ01Q,EAAY,SAAS11Q,GACvB,OAAOA,IAAQ1I,OAAO0I,IAEpB+1Q,EAAW,SAAS/1Q,GACtB,MAA6B,kBAAtB7F,EAASD,KAAK8F,IAEnB21Q,EAAU,SAAS31Q,GACrB,MAA6B,iBAAtB7F,EAASD,KAAK8F,IAEnB41Q,EAAY,SAAS51Q,GACvB,MAA6B,mBAAtB7F,EAASD,KAAK8F,IAEnB61Q,EAAa,SAAS71Q,GACxB,MAA6B,oBAAtB7F,EAASD,KAAK8F,IAInBg2Q,EAAe,SAASh2Q,GAE1B,OADAA,GAAY,KACGA,GAKbq2Q,EAAa,SAAS78F,EAASt0I,GACjC,IAAIpH,EAAWoH,GAAW,YAAaA,EAAUA,EAAQ9d,QAAU8d,EAEnE,MAAwB,oBAAdpH,EACD07I,EAGF,SAAS/5K,EAAQylC,GACtB,OAAOpH,EAASr+B,EAAQ+5K,EAASt0I,KAIjCqwO,EAAQ,CACVr1D,SAAUA,EACVi2D,WAAYA,EACZF,UAAWA,EACXK,YAAaH,EACbI,aAAc,SAASl5Q,EAAQ6nC,GAC7B,OAAOuwO,EAAaY,EAAWn2D,EAAUh7K,GAAU7nC,IAErDm5Q,eAAgB,SAASn5Q,EAAQ6nC,GAC/B,OAAOuwO,EAAaY,EAAWF,EAAYjxO,GAAU7nC,EAAQ6nC,IAE/DuxO,cAAe,SAASp5Q,EAAQ6nC,GAC9B,OAAOuwO,EAAaY,EAAWJ,EAAW/wO,GAAU7nC,IAEtDq5Q,gBAAiB,WACf,OAAOx9Q,KAAKs9Q,eAAer1Q,MAAMjI,KAAM0D,aAIvCxI,EAAOC,QACTD,EAAOC,QAAUkhR,EAEjBntG,EAAOmtG,MAAQA,EA7HnB,CAgIGD,MAOH,SAASqB,EAAcniK,GACrB,OAAOA,EAAMv8D,MAAM,KAAK/1C,KAAI,SAAUwE,GACpC,OAAOA,EAAEgxH,UACRjzH,QAAO,SAAUiC,GAClB,OAAOA,KACN7B,QAAO,SAAUutI,EAAKqzC,GACvB,IAVgBt2K,EAUZjT,EAAIupL,EAAK/rK,QAAQ,KACjBqiI,EAAOw5H,EAAMr1D,SAASz6B,EAAKz8K,MAAM,EAAG9M,IACpCtH,EAAQ6wL,EAAKz8K,MAAM9M,EAAI,GAAGw7H,OAE9B,OADAqkB,EAAK65C,WAAW,UAAYxjD,GAbZjjI,EAa2B4sI,EAZtC5sI,EAAIqyI,OAAO,GAAGje,cAAgBp0H,EAAInG,MAAM,KAYOpU,EAAQw9I,EAAI2J,GAAQnnJ,EACjEw9I,IACN,IAgDL,IAAIwkI,GAAa,EAEjB,IACEA,GAAaxvP,EACb,MAAO9lB,IAUT,SAASu1Q,EAAcr5Q,EAAK5I,GAC1B,OAAO+F,MAAMC,QAAQhG,IAAUA,EAAMmG,OAAS,IAAMJ,MAAMC,QAAQhG,IAAUA,EAAQs5E,EAAgB,GAAI1wE,EAAK5I,GAAS,GAuBxH,SAASkiR,EAAkBC,GACzB,OAAgB,OAAZA,EACK,KAGgB,WAArBtjO,EAAQsjO,IAAyBA,EAAQlgO,QAAUkgO,EAAQrsJ,SACtDqsJ,EAGLp8Q,MAAMC,QAAQm8Q,IAA+B,IAAnBA,EAAQh8Q,OAC7B,CACL87C,OAAQkgO,EAAQ,GAChBrsJ,SAAUqsJ,EAAQ,IAIC,kBAAZA,EACF,CACLlgO,OAAQ,MACR6zE,SAAUqsJ,QAHd,EAQF,SAASC,EAAgB5zO,GACvB,IAAI6zO,EAAW7zO,EAAM0nF,KACjBosJ,EAAW9zO,EAAMovO,KACjBn9F,EAASjyI,EAAMiyI,OACf/iG,EAAYlvC,EAAMkvC,UAClB8wC,EAAQhgF,EAAMggF,MACd+zJ,EAAaL,EAAkBG,GAC/B7kM,EAAUykM,EAAc,UAAW,GAAGryQ,OAAOq0F,EAnDnD,SAAmBz1D,GACjB,IAAIg0O,EAEAhlM,GASDlE,EATYkpM,EAAW,CACxB,UAAWh0O,EAAMi0O,KACjB,WAAYj0O,EAAMk0O,MAClB,QAASl0O,EAAMm0O,WACf,aAAcn0O,EAAMo0O,QACpB,YAAap0O,EAAM2wF,OACnB,QAAS3wF,EAAMq0O,SACf,qBAAqC,eAAfr0O,EAAMjgC,MAAwC,SAAfigC,EAAMjgC,KAC3D,mBAAmC,aAAfigC,EAAMjgC,MAAsC,SAAfigC,EAAMjgC,MAC5B,MAAMqB,OAAO4+B,EAAMnuC,MAAsB,OAAfmuC,EAAMnuC,MAAgBi5E,EAAgBkpM,EAAU,aAAa5yQ,OAAO4+B,EAAMs0O,UAA8B,OAAnBt0O,EAAMs0O,UAAoBxpM,EAAgBkpM,EAAU,WAAW5yQ,OAAO4+B,EAAMslJ,MAAsB,OAAftlJ,EAAMslJ,MAAgB0uF,GACrP,OAAO9/Q,OAAO0D,KAAKo3E,GAASlwE,KAAI,SAAU1E,GACxC,OAAO40E,EAAQ50E,GAAOA,EAAM,QAC3BiH,QAAO,SAAUjH,GAClB,OAAOA,KAmC2Dm6Q,CAAUv0O,IAASy1D,EAAmBvmB,EAAUr6B,MAAM,QACtHs9E,EAAYshJ,EAAc,YAAwC,kBAApBzzO,EAAMmyF,UAAyB7/E,IAAM6/E,UAAUnyF,EAAMmyF,WAAanyF,EAAMmyF,WACtHi9I,EAAOqE,EAAc,OAAQC,EAAkBI,IAC/CU,EAAe9sJ,YAAKqsJ,EAAYjmO,EAAc,GAAIkhC,EAASmjD,EAAWi9I,EAAM,CAC9En9F,OAAQA,EACRjyD,MAAOA,KAGT,IAAKw0J,EAEH,OAzEJ,WAEI,IAAItmO,GADDslO,GAAc11P,SAAoC,oBAAlBA,QAAQ7Z,QAG1CiqC,EAAWpwB,SAAS7Z,MAAMlG,MAAMmwC,EAAU10C,WAoE3CunG,CAAI,sBAAuBgzK,GACpB,KAGT,IAAIU,EAAWD,EAAaC,SACxBC,EAAa,GAMjB,OALAxgR,OAAO0D,KAAKooC,GAAOx9B,SAAQ,SAAUpI,GAC9Bw5Q,EAAgBr8J,aAAalgH,eAAe+C,KAC/Cs6Q,EAAWt6Q,GAAO4lC,EAAM5lC,OAGrBu6Q,EAAaF,EAAS,GAAIC,GAEnCd,EAAgBv1P,YAAc,kBAC9Bu1P,EAAgBgB,UAAY,CAC1BjkJ,OAAQkkJ,IAAU99H,KAClB7nE,UAAW2lM,IAAUx4Q,OACrB+yQ,KAAMyF,IAAUC,UAAU,CAACD,IAAU56Q,OAAQ46Q,IAAUl7Q,MAAOk7Q,IAAUx4Q,SACxE83Q,WAAYU,IAAU99H,KACtBq9H,QAASS,IAAU99H,KACnBh3I,KAAM80Q,IAAUE,MAAM,CAAC,aAAc,WAAY,SACjDrtJ,KAAMmtJ,IAAUC,UAAU,CAACD,IAAU56Q,OAAQ46Q,IAAUl7Q,MAAOk7Q,IAAUx4Q,SACxEg4Q,SAAUQ,IAAU99H,KACpBuuC,KAAMuvF,IAAUE,MAAM,CAAC,QAAS,SAChCb,MAAOW,IAAU99H,KACjBu9H,SAAUO,IAAUE,MAAM,CAAC,GAAI,IAAK,MACpCljR,KAAMgjR,IAAUE,MAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAC/Fd,KAAMY,IAAU99H,KAChBk7B,OAAQ4iG,IAAUC,UAAU,CAACD,IAAU99H,KAAM89H,IAAUx4Q,SACvD2jH,MAAO60J,IAAUx4Q,OACjB81H,UAAW0iJ,IAAUC,UAAU,CAACD,IAAUx4Q,OAAQw4Q,IAAU56Q,UAE9D25Q,EAAgBr8J,aAAe,CAC7BoZ,QAAQ,EACRzhD,UAAW,GACXkgM,KAAM,KACN+E,YAAY,EACZC,SAAS,EACTr0Q,KAAM,KACN2nH,KAAM,KACN2sJ,UAAU,EACV/uF,KAAM,KACN4uF,OAAO,EACPI,SAAU,KACVziR,KAAM,KACNoiR,MAAM,EACNhiG,QAAQ,EACRjyD,MAAO,GACPmS,UAAW,MAEb,IAAIwiJ,EA7KJ,SAASv+F,EAAQr6I,EAAe6hK,GAC9B,IAAI82E,EAAal7Q,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAErF,GAAuB,kBAAZokM,EACT,OAAOA,EAGT,IAAIxhK,GAAYwhK,EAAQxhK,UAAY,IAAIt9B,KAAI,SAAUkxC,GACpD,OAAOomI,EAAQr6I,EAAeiU,MAE5BglO,EAAS9gR,OAAO0D,KAAKgmM,EAAQ0pB,YAAc,IAAI7lN,QAAO,SAAUutI,EAAK50I,GACvE,IAAI2R,EAAM6xL,EAAQ0pB,WAAWltN,GAE7B,OAAQA,GACN,IAAK,QACH40I,EAAIimI,MAAJ,UAAyBlpQ,SAClB6xL,EAAQ0pB,WAAR,MACP,MAEF,IAAK,QACHt4E,EAAIimI,MAAJ,MAAqB1B,EAAcxnQ,GACnC,MAEF,QAC+B,IAAzB3R,EAAIkc,QAAQ,UAA2C,IAAzBlc,EAAIkc,QAAQ,SAC5C04H,EAAIimI,MAAM76Q,EAAI80C,eAAiBnjC,EAE/BijI,EAAIimI,MAAM9C,EAAMr1D,SAAS1iN,IAAQ2R,EAKvC,OAAOijI,IACN,CACDimI,MAAO,KAGLC,EAAoBR,EAAWtjK,MAC/B+jK,OAAsC,IAAtBD,EAA+B,GAAKA,EACpDvwF,EAAY3xI,EAAyB0hO,EAAY,CAAC,UAGtD,OADAM,EAAOC,MAAP,MAAwBnnO,EAAc,GAAIknO,EAAOC,MAAP,MAAuBE,GAC1Dp5O,EAAch+B,WAAM,EAAQ,CAAC6/L,EAAQ5sB,IAAKljI,EAAc,GAAIknO,EAAOC,MAAOtwF,IAAYvjL,OAAOq0F,EAAmBr5D,MAmI9FxkB,KAAK,KAAM2iB,IAAMwB,iB,yYCparC,SAASq5O,EAAqBj6O,EAAyD6+J,GAC5F,OAAO,SAAuB5/L,EAAa4d,GACpCgiL,GACHqkB,YAAWljL,GAGbp3B,IACE2kL,mBAAStuL,KAASie,kBAAQje,IAAQ85K,qBAAWl8J,GAC7C,6EAIEm2D,QAAQp0E,IAAIohC,EAAMojL,iBAAkBnkN,IAAQ+gC,EAAMojL,iBAAiBnkN,KAAS4d,IAIhFmjB,EAAMojL,iBAAiBnkN,GAAO4d,EAC9BmjB,EAAMkuC,eACJgsM,YACEl6O,EAAMojL,qB,WCzBR0kD,EAA4B/uF,qBAAWohG,KAAyBA,IAAwBC,EAQ/E,kBACbn7Q,EADa,EACbA,IACA4d,EAFa,EAEbA,QAFa,OAMT,SAACynB,GAmBL,OAAOwjO,GAlBiB,SAACjjO,GACvB,IDeiC7E,ECf3Bq6O,EAAoB/1O,EACpBg2O,EAAcC,IACd12Q,EAAUu7B,aAAiBk7O,GAC3BE,GDY2Bx6O,ECZFn8B,EDajCq/M,YAAWljL,GAEJ,CACLy6O,cAAeR,EAAqBj6O,GAAO,KCL3C,OALA06O,GAAa,YAEXD,EAD0BD,EAAlBC,eAJD1hG,qBAAW95K,GAAOA,EAAI4lC,GAAS5lC,EAKd4d,MAGnB,cAACw9P,EAAD,eAAuBx1O,MAGaP,KAGlCo2O,EAAe,SAACl9Q,GAC3B,IAAMm9Q,EAAYv7O,UAAa,GAE3Bu7O,EAAUl4O,SAAWjlC,GAAoB,oBAAPA,GACpCA,IAGFm9Q,EAAUl4O,SAAU,GCtDTm4O,EAAqB,qCACrBC,EAAS,yBACTC,EAAoB,oCCsB3BC,EAAyB,CAACH,EAAoBC,EAAQC,GAEtDE,EAAW,SAAC/7Q,GAAD,OAAiB2J,IAChC2kL,mBAAStuL,KAASie,kBAAQje,GAC1B,uEAGIg8Q,EAAkB,SAAC3nK,GACvB,IAAMmiB,EAAQ,CACZylJ,KAAMniG,aACNpjD,KAAM,SAACA,GAAD,OAAkB43D,mBAAS53D,KAA0C,IAAhColJ,EAAa5/P,QAAQw6G,KAGlE/sH,IACE8rL,qBAAWphF,EAAYmiB,GACvB,gEAIG,SAAS0lJ,EAAkBn7O,EAAyD6+J,GACzF,OAAO,SAAoB5/L,GAAuD,IAA1Cq0G,EAAyC,uDAAf,GAAI3tF,EAAW,uCAC1Ek5K,GACHqkB,YAAWljL,GAGb,IAAMo7O,EAAa,2BAAQ9nK,GAAR,IAAoBqiB,KAAMriB,EAAWqiB,MAAQilJ,IACxDM,EAAeE,EAAfF,KAAMvlJ,EAASylJ,EAATzlJ,KAEdqlJ,EAAS/7Q,GACTg8Q,EAAgBG,GAEhB,IAAIC,EAAUroM,QAAQp0E,IAAIohC,EAAMqjL,cAAepkN,KAY1Co8Q,GAAYA,GAAW1lJ,IAASklJ,GAAUllJ,IAASmlJ,KACtD96O,EAAMqjL,cAAcpkN,GAApB,2BAAgCm8Q,GAAhC,IAA+C90P,KAAM0Z,EAAMmjL,QAAQ+3D,EAAMv1P,OAKxE,SAAS21P,EAAiBt7O,EAAyD6+J,GACxF,OAAO,SAAmB5/L,GAOxB,GANK4/L,GACHqkB,YAAWljL,GAGbg7O,EAAS/7Q,GAEL+zE,QAAQp0E,IAAIohC,EAAMqjL,cAAepkN,GAAM,CACzC,IAAMq0G,EAAatzE,EAAMqjL,cAAcpkN,GAEnCq0G,EAAWqiB,MAAQriB,EAAWqiB,OAASklJ,IACzCvnK,EAAWhtF,KAAKE,SAIdwZ,EAAMqjL,cAAcpkN,GAAO,UC7ErC,IAAM6oQ,EAA4B/uF,qBAAWohG,KAAyBA,IAAwBC,EAc/E,kBACbn7Q,EADa,EACbA,IACAi8Q,EAFa,EAEbA,KACAvlJ,EAHa,EAGbA,KAHa,OAQT,SAACrxF,GA2BL,OAAOwjO,GA1BY,SAACjjO,GAClB,ID4DiC7E,EC3D3Bs6O,EAAcC,IACd12Q,EAAUu7B,aAAiBk7O,GAC3BE,GDyD2Bx6O,ECzDFn8B,ED0DjCq/M,YAAWljL,GAEJ,CACLu7O,WAAYJ,EAAkBn7O,GAAO,GACrCw7O,UAAWF,EAAiBt7O,GAAO,KC7D7By7O,EAAS,WACb,OAAO1iG,qBAAW95K,GAAOA,EAAI4lC,GAAS5lC,GAiBxC,OAdAy7Q,GAAa,YAGXa,EAFuBf,EAAfe,YAEGE,IAAU,CAAEP,OAAMvlJ,QAAQ9wF,MAGvCzF,aAAgB,WACd,OAAO,YAGLo8O,EAFsBhB,EAAdgB,WAEEC,QAEX,IAEI,cAACn3O,EAAD,eAAsBO,MAGSP,KAG7Bo2O,EAAe,SAACl9Q,GAC3B,IAAMm9Q,EAAYv7O,UAAa,GAE3Bu7O,EAAUl4O,SAAWjlC,GAAoB,oBAAPA,GACpCA,IAGFm9Q,EAAUl4O,SAAU,G,0CCuChBi5O,EAAgB,SAACC,GACrB,OAAOpgJ,YAAcogJ,EAAWx4J,OAAO,SAASjqG,SAG5C0iQ,EAAkB,SAACC,GACvB,OAAO93P,iBAAOza,KAAK6tC,MAAM0kO,K,oCCpEZ,KACbx5K,oCACAnG,YACAu+K,gBACAc,aACAO,WDlCwB,SAACltE,GAkDzB,OAjDqB,2BAChBA,GADgB,IAEnB3uG,IAAK,SAAChhG,EAAa0iC,EAAqBpC,GAEtCqvK,EAAQ3uG,IACNhhG,EACAsO,gBAAmB5B,eAAc,SAACowQ,GAChCp6O,EAAMnoB,SAASnS,SAAQ,SAAC20Q,GACtB,IAOI75K,EAPE85K,EAAWt6O,EAAMjjC,IAAIs9Q,GAMrBE,EAAuB,MADjBF,EAAS9yO,MADV,gBAIX,OAAQ8yO,GAKN,KAAKG,IACHh6K,EAAc85K,EAAStwQ,eAAc,SAACywQ,GACpCA,EAAI/5Q,IAAI,OAAQkL,iBAChB6uQ,EAAI/5Q,IAAI,aAAckL,oBAExB,MAEF,KAAK2uQ,EAAgBF,EAAW,KAChC,KAAK3oP,IAAM30B,IAAI,oBACbyjG,EAAc85K,EACd,MAEF,IAAK,OACH95K,EAAcu5K,EAAcO,GAMb,MAAf95K,GACF45K,EAAS15Q,IAAI25Q,EAAU75K,SAG1BjpF,OACHqmB,OCXN88O,aDoB0B,WAAkD,IAAjD16O,EAAgD,uDAAxCp0B,gBAAoBs0B,EAAoB,uCAC3E,IACE,IAAMy6O,EAAgBv4P,iBAAO8d,GACvB7nB,EAAS2nB,EAAMnhB,YAAW,YAAoB,IAAlB1lB,EAAiB,oBAC7CyhR,EAAeD,EAAc59Q,IAAI5D,GAErC,GAKO,SALCA,EAMJyhR,EAAeX,EAAgBW,GAOnC,MAAO,CAACzhR,EAAGyhR,MAOb,OAAOviQ,EACP,MAAOjX,GACP4f,QAAQ08E,MAAM,kCAAmC,CAC/Ct8F,IACA4+B,QACAE,YAGJ,OAAOF,K,0QEtEI66O,EAAW,WAA4B,IAA3BC,EAA0B,uDAAP,GAC1C,OAAKA,EAGEA,EAASlpM,QAAQ,IAAK,KAAK9oE,MAAM,EAAG,IAFlCgyQ,GAOLtyJ,EAAYJ,aAAW,SAACl0C,GAAD,MAAY,CACvC6mM,aAAc,CACZ97K,MAAO/qB,EAAM+pC,QAAQq7I,QAAQ0hB,UAwHlB7kK,IAvF6C,SAACjzE,GAC3D,IAEEu6E,EASEv6E,EATFu6E,MACApe,EAQEn8D,EARFm8D,KAHF,EAWIn8D,EAPF0vE,wBAJF,MAIqB,GAJrB,IAWI1vE,EANF+3O,uBALF,MAKoB,GALpB,IAWI/3O,EALF0yE,+BANF,MAM4B,GAN5B,IAWI1yE,EAJFwyE,iBAPF,MAOc,UAPd,IAWIxyE,EAHFg4O,gBARF,MAQaC,IAAUC,aARvB,EASEC,EAEEn4O,EAFFm4O,SACA1lK,EACEzyE,EADFyyE,WAGIzhC,EAAQwjD,cACRxlD,EAAUs2C,EAAUt0C,GACpB4lL,EAAe53I,uBAAY,SAAC6C,GAChCtH,EAAMjJ,SA9Ce,SAACuQ,EAAcrP,EAAsBwlK,GAC5D,GAAa,OAATn2J,IAAkBA,EAAKm4E,UACzB,OAAOn4E,EAET,IAAMjsE,EAAM,IAAI/xB,KAEhB,OAAQ2uF,GACN,IAAK,UACHqP,EACGu1H,MAAMxhM,EAAIwiO,YACV7gC,QAAQ3hM,EAAIyiO,cACZ1gC,QAAQ/hM,EAAI0iO,cACZh3B,aAAa1rM,EAAI2iO,mBACpB,MACF,IAAK,QAECP,IAAaC,IAAUO,WACzB32J,EAAKpQ,QAAQ,SAEfoQ,EAAKpQ,QAAQ,OACb,MACF,IAAK,MACCumK,IAAaC,IAAUO,WACzB32J,EAAKnQ,MAAM,SAEbmQ,EAAKnQ,MAAM,OAEf,OAAOmQ,EAAKjgE,cAmBK62N,CAAiB52J,GAAQs2J,EAAWO,EAAe72J,GAAM82J,GAAGR,GAAYt2J,EAAMrP,EAAWwlK,IACpGvlK,GACFA,MAED,CAAC8H,EAAMjJ,WACJsnK,EAAa55J,uBAAY,SAAC9gH,GAC9B,IAAM2jH,EAAes2J,EAAWO,EAAen+J,EAAM/oH,OAAOmnR,GAAGR,GAAY3mK,IAAO+I,EAAM/oH,OACpFqwH,EAAKm4E,WACPz/E,EAAMihB,OAAO3Z,EAAKjgE,iBAEnB,CAAC24D,EAAMihB,OAAQjhB,EAAM/oH,QAElBi5E,EAAuB0xB,EAAKl4F,MAC5B40Q,EAAyB18K,EAAKi6J,QAC9B0iB,GAAsB38K,EAAK48K,QAAU58K,EAAKg6J,UAAYhjQ,QAAQs3E,GAC9DuuM,GAAwB78K,EAAK48K,QAAU58K,EAAKg6J,WAAahjQ,QAAQs3E,IAAiBt3E,QAAQ0lR,GAC5FI,EAA4B,KAC5BH,EACFG,EAAoB98K,EAAKl4F,MAChB+0Q,IACTC,EAAoB98K,EAAKi6J,SAE3B,MAA2B1jJ,EAApBC,iBAAP,SACA,OACE,cAAC,IAAD,yBAAa1uG,MAAO60Q,EAAW,mBAAiB,eAAkBppK,GAAlE,aACE,eAAC,IAAD,CACEovB,MAAOo6I,IADT,UAGE,cAAC,IAAD,aAEE3oO,OAAQ4oO,IAAWnB,GAAUznO,OAC7B6+N,KAAM+J,IAAWnB,GAAU5I,KAC3BgK,SAtFO,IAwFPC,cAAe,cAAC,IAAD,CAAwBp8J,SAAS,UAChDq8J,eAAgB,cAAC,IAAD,CAAyBr8J,SAAS,UAClDs8J,aAAc,cAAC,IAAD,IACd/nR,MACE+oH,EAAM/oH,MACF2mR,EACIO,EAAen+J,EAAM/oH,OAAOmnR,GAAGR,GAC/B3mK,IAAO+I,EAAM/oH,OACjB,KAEN8/G,SAAUslJ,EAGVtyP,KAAMi2G,EAAMj2G,KACZk1Q,gBAAiB,CACftqM,UAAWm0C,IAAW,eAAEr0C,EAAQ6oM,aAAemB,KAEjDx9I,OAAQo9I,EACR/5K,QAAS0b,EAAM1b,QAEf56F,MAAO60Q,EACPnmK,UAAWA,EAEXgQ,WAAY,MAERjQ,IAEN,cAAC,IAAD,yBAAgB37E,GAAG,cAAc9yB,MAAO60Q,EAAW5pM,UAAWm0C,IAAW,eAAEr0C,EAAQ6oM,aAAemB,KAAmBjB,GAArH,aACGkB,a,6BChKX,8EAiSIx+J,EAASlgF,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cp4E,EAAmBnvC,EAAMovC,UACzBA,OAAiC,IAArBD,EAA8B,SAAWA,EACrDsqM,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDC,EAAwB15O,EAAM25O,iBAC9BA,OAA6C,IAA1BD,GAA2CA,EAC9DE,EAAwB55O,EAAM65O,mBAC9BA,OAA+C,IAA1BD,GAA2CA,EAChEE,EAAc95O,EAAM0vF,QACpB5F,EAAwB9pF,EAAM8pF,sBAC9BiwJ,EAAmB/5O,EAAM2vE,UACzBA,OAAiC,IAArBoqK,GAAsCA,EAClDC,EAAch6O,EAAMnuC,KACpBA,OAAuB,IAAhBmoR,EAAyB,SAAWA,EAC3CC,EAAgBj6O,EAAMk6O,UACtBC,EAAcn6O,EAAMhqC,KACpBA,OAAuB,IAAhBmkR,EAAyB,SAAWA,EAC3CryH,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,OAASA,EAC/CrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,QAAS,YAAa,WAAY,mBAAoB,qBAAsB,UAAW,wBAAyB,YAAa,OAAQ,YAAa,OAAQ,YAEvOk6O,EAAYD,GAAiB1/O,IAAMwB,cAAc,OAAQ,CAC3DmzC,UAAW2B,kBAAK7B,EAAQkrM,UAAWlrM,EAAQ,WAAW5tE,OAAOk5H,YAAWzoI,OACvEooR,GACCvqJ,EAAUoqJ,GAAev/O,IAAMwB,cAAc,OAAQ,CACvDmzC,UAAW2B,kBAAK7B,EAAQ0gD,QAAS1gD,EAAQ,WAAW5tE,OAAOk5H,YAAWzoI,OACrEioR,GACH,OAAOv/O,IAAMwB,cAAcguF,IAAYnqF,YAAS,CAC9CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQwgC,GAAUtgC,EAAqB,YAAV6sB,EAAsB/sB,EAAQw5E,aAAyB,YAAVzsD,GAAuB/sB,EAAQ,GAAG5tE,OAAOouG,GAASpuG,OAAOk5H,YAAWv+B,KAAmB,WAATlqG,GAAqB,CAACm9E,EAAQ,GAAG5tE,OAAOouG,EAAS,QAAQpuG,OAAOk5H,YAAWzoI,KAASm9E,EAAQ,OAAO5tE,OAAOk5H,YAAWzoI,MAAU8nR,GAAoB3qM,EAAQ2qM,iBAAkB3mK,GAAYhkC,EAAQgkC,SAAUrD,GAAa3gC,EAAQ2gC,WACtZvgC,UAAWA,EACX4jC,SAAUA,EACVonK,aAAcP,EACd/vJ,sBAAuBj5C,kBAAK7B,EAAQg7C,aAAcF,GAClDv4H,IAAKA,EACLyE,KAAMA,GACLygB,GAAQ8jB,IAAMwB,cAAc,OAAQ,CACrCmzC,UAAWF,EAAQp4C,OAClBsjP,EAAW99O,EAAUszF,OAgGX3+C,iBAnaK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAMuyB,YAAS,GAAIoxC,EAAM82C,WAAW7E,OAAQ,CAC1ChyC,UAAW,aACXK,SAAU,GACVM,QAAS,WACT2rC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BxhB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BqP,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,mBAAoB,aAAc,UAAW,CACjFq2H,SAAUx5C,EAAMu5C,YAAYC,SAASC,QAEvC,UAAW,CACTzuB,eAAgB,OAChB8e,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ4G,KAAK1G,QAASjqC,EAAM+pC,QAAQ/5F,OAAOkpG,cAEvE,uBAAwB,CACtBpP,gBAAiB,eAEnB,aAAc,CACZA,gBAAiB,gBAGrB,aAAc,CACZ/e,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,YAKhCp8E,MAAO,CACLw6C,MAAO,OAEPF,QAAS,UACTnC,WAAY,UACZyC,eAAgB,WAIlBmwC,KAAM,CACJ/vC,QAAS,WAIX0oM,YAAa,CACXv+K,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEvE,uBAAwB,CACtBpP,gBAAiB,iBAMvBy/J,cAAe,CACbx+K,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,KAC/B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEzE,uBAAwB,CACtBpP,gBAAiB,iBAMvB0/J,SAAU,CACR5oM,QAAS,WACT++C,OAAQ,aAAavvH,OAA8B,UAAvB4vE,EAAM+pC,QAAQ/kH,KAAmB,sBAAwB,6BACrF,aAAc,CACZ26H,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQ/5F,OAAOgyF,YAKrDynK,gBAAiB,CACf1+K,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7Bu4F,OAAQ,aAAavvH,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM,KAC7D,UAAW,CACTu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQE,QAAQ7iF,MAClD0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEvE,uBAAwB,CACtBpP,gBAAiB,iBAMvB4/J,kBAAmB,CACjB3+K,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,KAC/Bu4F,OAAQ,aAAavvH,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM,KAC/D,UAAW,CACTu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQ+d,UAAU1gG,MACpD0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEzE,uBAAwB,CACtBpP,gBAAiB,gBAGrB,aAAc,CACZ6V,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQ/5F,OAAOgyF,YAKrD2nK,UAAW,CACT5+K,MAAO/qB,EAAM+pC,QAAQ6/J,gBAAgB5pM,EAAM+pC,QAAQC,KAAK,MACxDF,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC2C,UAAW3sC,EAAM6mD,QAAQ,GACzB,UAAW,CACT/c,gBAAiB9pC,EAAM+pC,QAAQC,KAAK6/J,KACpCl9J,UAAW3sC,EAAM6mD,QAAQ,GAEzB,uBAAwB,CACtBla,UAAW3sC,EAAM6mD,QAAQ,GACzB/c,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtC,aAAc,CACZF,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAO85P,qBAG1C,iBAAkB,CAChBn9J,UAAW3sC,EAAM6mD,QAAQ,IAE3B,WAAY,CACVla,UAAW3sC,EAAM6mD,QAAQ,IAE3B,aAAc,CACZ97B,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,SAC5B2K,UAAW3sC,EAAM6mD,QAAQ,GACzB/c,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAO85P,qBAK1CC,iBAAkB,CAChBh/K,MAAO/qB,EAAM+pC,QAAQE,QAAQqO,aAC7BxO,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvC,UAAW,CACT0iF,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ68J,KAEvC,uBAAwB,CACtBh9J,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,QAM7C4iP,mBAAoB,CAClBj/K,MAAO/qB,EAAM+pC,QAAQ+d,UAAUxP,aAC/BxO,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU1gG,KACzC,UAAW,CACT0iF,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAUg/I,KAEzC,uBAAwB,CACtBh9J,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU1gG,QAM/CuhP,iBAAkB,CAChBh8J,UAAW,OACX,UAAW,CACTA,UAAW,QAEb,iBAAkB,CAChBA,UAAW,QAEb,WAAY,CACVA,UAAW,QAEb,aAAc,CACZA,UAAW,SAKfqM,aAAc,GAGdhX,SAAU,GAGVw1C,aAAc,CACZzsD,MAAO,UACPy7B,YAAa,gBAIfyjJ,cAAe,CACbrpM,QAAS,UACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCC,cAAe,CACbvpM,QAAS,WACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCE,kBAAmB,CACjBxpM,QAAS,UACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCG,kBAAmB,CACjBzpM,QAAS,WACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCI,mBAAoB,CAClB1pM,QAAS,WACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCK,mBAAoB,CAClB3pM,QAAS,WACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCM,UAAW,GAGXC,UAAW,GAGX9rK,UAAW,CACTv+B,MAAO,QAIT8oM,UAAW,CACThpM,QAAS,UACTomC,YAAa,EACb0G,YAAa,EACb,kBAAmB,CACjBA,YAAa,IAKjB0R,QAAS,CACPx+C,QAAS,UACTomC,aAAc,EACd0G,WAAY,EACZ,kBAAmB,CACjB1G,aAAc,IAKlBokK,cAAe,CACb,oBAAqB,CACnBz+J,SAAU,KAKd0+J,eAAgB,CACd,oBAAqB,CACnB1+J,SAAU,KAKd2+J,cAAe,CACb,oBAAqB,CACnB3+J,SAAU,QAgJgB,CAChC34G,KAAM,aADOysE,CAEZ0pC,I,6BC9aH,uKAoBA,SAASxoC,EAAMzgF,GACb,OAAOqB,KAAKo/E,MAAc,IAARzgF,GAAe,IAkE5B,IA8FHqqR,GAAgB,EAChBC,EAAiB,KAKrB,IAAI/7J,EAAUxlF,IAAM8E,YAAW,SAAiBW,EAAOzuC,GACrD,IAAIwqR,EAAe/7O,EAAMg8O,MACrBA,OAAyB,IAAjBD,GAAkCA,EAC1C3/O,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBitM,EAAwBj8O,EAAMk8O,qBAC9BA,OAAiD,IAA1BD,GAA2CA,EAClEE,EAAwBn8O,EAAMo8O,qBAC9BA,OAAiD,IAA1BD,GAA2CA,EAClEE,EAAwBr8O,EAAMs8O,qBAC9BA,OAAiD,IAA1BD,GAA2CA,EAClEE,EAAoBv8O,EAAMw8O,WAC1BA,OAAmC,IAAtBD,EAA+B,EAAIA,EAChDE,EAAwBz8O,EAAM08O,gBAC9BA,OAA4C,IAA1BD,EAAmC,IAAMA,EAC3DE,EAAS38O,EAAMjJ,GACf6lP,EAAqB58O,EAAM68O,YAC3BA,OAAqC,IAAvBD,GAAwCA,EACtDE,EAAoB98O,EAAM+8O,WAC1BA,OAAmC,IAAtBD,EAA+B,EAAIA,EAChDE,EAAwBh9O,EAAMi9O,gBAC9BA,OAA4C,IAA1BD,EAAmC,KAAOA,EAC5DviJ,EAAUz6F,EAAMy6F,QAChBC,EAAS16F,EAAM06F,OACfwiJ,EAAWl9O,EAAMygE,KACjB08K,EAAmBn9O,EAAMigF,UACzBA,OAAiC,IAArBk9J,EAA8B,SAAWA,EACrDC,EAAcp9O,EAAMo9O,YACpBp9J,EAAQhgF,EAAMggF,MACdyb,EAAwBz7F,EAAM27F,oBAC9BA,OAAgD,IAA1BF,EAAmC4hJ,IAAO5hJ,EAChEU,EAAkBn8F,EAAMm8F,gBACxB1lH,EAAQu8B,YAAyBhT,EAAO,CAAC,QAAS,WAAY,UAAW,uBAAwB,uBAAwB,uBAAwB,aAAc,kBAAmB,KAAM,cAAe,aAAc,kBAAmB,UAAW,SAAU,OAAQ,YAAa,cAAe,QAAS,sBAAuB,oBAEjUgxC,EAAQwjD,cAERqF,EAAkBt/F,IAAMia,WACxB8oO,EAAYzjJ,EAAgB,GAC5B0jJ,EAAe1jJ,EAAgB,GAE/B2jJ,GAAmBjjP,IAAMia,SAAS,MAClCipO,GAAWD,GAAiB,GAC5BE,GAAcF,GAAiB,GAE/BG,GAAuBpjP,IAAMyG,QAAO,GACpC48O,GAAarjP,IAAMyG,SACnB68O,GAAatjP,IAAMyG,SACnB88O,GAAavjP,IAAMyG,SACnB+8O,GAAaxjP,IAAMyG,SAEnBg9O,GAAiBC,YAAc,CACjCC,WAAYhB,EACZx7J,SAAS,EACTp9G,KAAM,YAEJ65Q,GAAkBl1O,YAAe+0O,GAAgB,GACjDI,GAAYD,GAAgB,GAC5BE,GAAeF,GAAgB,GAE/B19K,GAAO29K,GAePE,GAAmB/jP,IAAMia,WACzB+pO,GAAYD,GAAiB,GAC7BE,GAAeF,GAAiB,GAEhCvnP,GAAK4lP,GAAU4B,GACnBhkP,IAAM0B,WAAU,WACTwkE,KAAQ89K,IAObC,GAAa,eAAep9Q,OAAOvO,KAAKo/E,MAAsB,IAAhBp/E,KAAKy1E,cAClD,CAACm4B,GAAM89K,KACVhkP,IAAM0B,WAAU,WACd,OAAO,WACLogG,aAAauhJ,GAAWhgP,SACxBy+F,aAAawhJ,GAAWjgP,SACxBy+F,aAAayhJ,GAAWlgP,SACxBy+F,aAAa0hJ,GAAWngP,YAEzB,IAEH,IAAIu/F,GAAa,SAAoBF,GACnCZ,aAAay/I,GACbD,GAAgB,EAIhBwC,IAAa,GAET3jJ,GACFA,EAAOuC,IAIPwhJ,GAAc,SAAqBxhJ,GACrC,IAAIyhJ,EAAgBtiP,EAAS4D,MAEV,cAAfi9F,EAAMjnI,MAAwB0oR,EAAcC,aAAe1hJ,EAAMziB,gBAAkB8iK,GACrFoB,EAAcC,YAAY1hJ,GAGxB0gJ,GAAqB//O,SAA0B,eAAfq/F,EAAMjnI,OAOtCsnR,GACFA,EAAUsB,gBAAgB,SAG5BviJ,aAAawhJ,GAAWjgP,SACxBy+F,aAAayhJ,GAAWlgP,SAEpB4+O,IAAeX,GACjB5+I,EAAMC,UACN2gJ,GAAWjgP,QAAU+Q,YAAW,WAC9BwuF,GAAWF,KACVu/I,IAEHr/I,GAAWF,KAIX4hJ,GAAqBC,cACrBC,GAAiBF,GAAmBE,eACpCC,GAAgBH,GAAmBG,cACnCC,GAAkBJ,GAAmBttR,IAErC2tR,GAAmB3kP,IAAMia,UAAS,GAClC2qO,GAAsBD,GAAiB,GACvCE,GAAyBF,GAAiB,GA6B1CliJ,GAAc,SAAqBC,GACrCZ,aAAay/I,GACbA,EAAiBntO,YAAW,WAC1BktO,GAAgB,IACf,KAEHwC,IAAa,GAET5jJ,GACFA,EAAQwC,GAGVZ,aAAauhJ,GAAWhgP,SACxBggP,GAAWhgP,QAAU+Q,YAAW,WAC9BgvO,GAAqB//O,SAAU,IAC9BozC,EAAMu5C,YAAYC,SAAS60J,WAG5BC,GAAc,SAAqBriJ,GACrC,IAAIyhJ,EAAgBtiP,EAAS4D,MAEV,SAAfi9F,EAAMjnI,OACJ0oR,EAAcljJ,QAAUyB,EAAMziB,gBAAkB8iK,GAClDoB,EAAcljJ,OAAOyB,GAjDrBkiJ,KACFC,IAAuB,GACvBJ,OAqDiB,eAAf/hJ,EAAMjnI,MAAyB0oR,EAActzJ,cAAgB6R,EAAMziB,gBAAkB8iK,GACvFoB,EAActzJ,aAAa6R,GAG7BZ,aAAawhJ,GAAWjgP,SACxBy+F,aAAayhJ,GAAWlgP,SACxBq/F,EAAMC,UACN4gJ,GAAWlgP,QAAU+Q,YAAW,WAC9BquF,GAAYC,KACX8/I,IAiCDwC,GAAe5iJ,YAAW4gJ,EAAchsR,GACxCiuR,GAAiB7iJ,YAAWsiJ,GAAiBM,IAE7CE,GAAellP,IAAMykF,aAAY,SAAU77F,GAE7Cu8P,YAAOF,GAAgBG,IAASC,YAAYz8P,MAC3C,CAACq8P,KACAK,GAAYljJ,YAAWvgG,EAAS7qC,IAAKkuR,IAE3B,KAAVz/J,IACFvf,IAAO,GAQT,IAAIq/K,IAAyBr/K,KAAS27K,EAElCsC,GAAgB9+O,YAAS,CAC3B,mBAAoB6gE,GAAO1pE,GAAK,KAChCipF,MAAO8/J,IAA0C,kBAAV9/J,EAAqBA,EAAQ,MACnEvpG,EAAO,GAAI2lB,EAAS4D,MAAO,CAC5BkvC,UAAW2B,kBAAKp6D,EAAMy4D,UAAW9yC,EAAS4D,MAAMkvC,aAG7CotM,IACHoC,GAAcqB,aA1DO,SAA0B9iJ,GAC/C0gJ,GAAqB//O,SAAU,EAC/B,IAAI8gP,EAAgBtiP,EAAS4D,MAEzB0+O,EAAcqB,cAChBrB,EAAcqB,aAAa9iJ,GAG7BZ,aAAayhJ,GAAWlgP,SACxBy+F,aAAauhJ,GAAWhgP,SACxBy+F,aAAa0hJ,GAAWngP,SACxBq/F,EAAMC,UACN6gJ,GAAWngP,QAAU+Q,YAAW,WAC9B8vO,GAAYxhJ,KACXy/I,IA6CHgC,GAAcsB,WA1CK,SAAwB/iJ,GACvC7gG,EAAS4D,MAAMggP,YACjB5jP,EAAS4D,MAAMggP,WAAW/iJ,GAG5BZ,aAAa0hJ,GAAWngP,SACxBy+F,aAAayhJ,GAAWlgP,SACxBq/F,EAAMC,UACN4gJ,GAAWlgP,QAAU+Q,YAAW,WAC9BquF,GAAYC,KACXggJ,KAmCAb,IACHsC,GAAcC,YAAcF,GAC5BC,GAActzJ,aAAek0J,IAG1BpD,IACHwC,GAAc7/K,QAjIE,SAAqBo+B,GAIhCqgJ,GACHC,EAAatgJ,EAAMziB,eAGjBukK,GAAe9hJ,KACjBmiJ,IAAuB,GACvBX,GAAYxhJ,IAGd,IAAIyhJ,EAAgBtiP,EAAS4D,MAEzB0+O,EAAc7/K,SAAWo+B,EAAMziB,gBAAkB8iK,GACnDoB,EAAc7/K,QAAQo+B,IAkHxByhJ,GAAcljJ,OAAS8jJ,IAGzB,IAAIW,GAA8BpD,EAAc,CAC9C8B,YAAaD,GAAcC,YAC3BvzJ,aAAcszJ,GAActzJ,aAC5BvsB,QAAS6/K,GAAc7/K,QACvB28B,OAAQkjJ,GAAcljJ,QACpB,GASJ,IAAI0kJ,GAAgB3lP,IAAM+B,SAAQ,WAChC,MAAO,CACL6jP,UAAW,CACTnE,MAAO,CACLoE,QAASjtR,QAAQsqR,IACjB7/E,QAAS6/E,QAId,CAACA,KACJ,OAAOljP,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMyX,aAAa5V,EAAUwD,YAAS,CACrFruC,IAAKsuR,IACJnB,KAAiBnkP,IAAMwB,cAAcitF,IAAQppF,YAAS,CACvDsvC,UAAW2B,kBAAK7B,EAAQsxM,OAAQzD,GAAe7tM,EAAQuxM,kBAAmBvE,GAAShtM,EAAQwxM,aAC3FvgK,UAAWA,EACXgJ,SAAUq0J,EACV78K,OAAM68K,GAAY78K,GAClB1pE,GAAI2nP,GAAc,oBAClBp0J,YAAY,EACZ41J,cAAeA,IACdD,GAA6B7C,IAAc,SAAUjhP,GACtD,IAAIskP,EAAiBtkP,EAAK8jF,UACtBygK,EAAuBvkP,EAAKggG,gBAChC,OAAO5hG,IAAMwB,cAAc4/F,EAAqB/7F,YAAS,CACvD26D,QAASvpB,EAAMu5C,YAAYC,SAASoQ,SACnC8lJ,EAAsBvkJ,GAAkB5hG,IAAMwB,cAAc,MAAO,CACpEmzC,UAAW2B,kBAAK7B,EAAQo2L,QAASp2L,EAAQ,mBAAmB5tE,OAAOk5H,YAAWmmJ,EAAe5rO,MAAM,KAAK,MAAO8oO,GAAqB//O,SAAWoxC,EAAQ7N,MAAO66M,GAAShtM,EAAQ2xM,eAC9K3gK,EAAOg8J,EAAQzhP,IAAMwB,cAAc,OAAQ,CAC5CmzC,UAAWF,EAAQgtM,MACnBzqR,IAAKmsR,KACF,cAkHM3sM,iBAriBK,SAAgBC,GAClC,MAAO,CAELsvM,OAAQ,CACNxpJ,OAAQ9lD,EAAM8lD,OAAOsuI,QACrBj7I,cAAe,OACfpqH,MAAM,GAKRwgR,kBAAmB,CACjBp2J,cAAe,QAIjBq2J,YA9EK,CACL,kCAAmC,CACjCzgR,MAAM,EACNqqH,IAAK,EACL/5G,KAAM,EACN+hG,UAAW,UACX4L,WAAY,EACZ1G,YAAa,EACblmC,MAAO,MACPi2C,OAAQ,MACR,YAAa,CACXtnH,MAAM,EACN09G,YAAa,gBACb+Z,YAAa,qDAGjB,+BAAgC,CAC9Bz3H,MAAM,EACNsqH,OAAQ,EACRh6G,KAAM,EACN84G,aAAc,UACdnL,WAAY,EACZ1G,YAAa,EACblmC,MAAO,MACPi2C,OAAQ,MACR,YAAa,CACXtnH,MAAM,EACN09G,YAAa,gBACb+Z,YAAa,qDAGjB,iCAAkC,CAChCz3H,MAAM,EACNsQ,KAAM,EACN2tG,WAAY,UACZ5L,UAAW,EACX+W,aAAc,EACd9B,OAAQ,MACRj2C,MAAO,MACP,YAAa,CACXrxE,MAAM,EACN09G,YAAa,gBACb+Z,YAAa,qDAGjB,gCAAiC,CAC/Bz3H,MAAM,EACNuQ,MAAO,EACPgnG,YAAa,UACblF,UAAW,EACX+W,aAAc,EACd9B,OAAQ,MACRj2C,MAAO,MACP,YAAa,CACXrxE,MAAM,EACN09G,YAAa,gBACb+Z,YAAa,sDAyBjB4tI,QAAS,CACPtqJ,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQC,KAAK,KAAM,IAC/CuC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BxhB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5BsxI,WAAYl/L,EAAM82C,WAAWooJ,WAC7Bt+L,QAAS,UACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnC1rJ,WAAY,GAAGpuH,OAAO6wE,EAAM,KAAU,MACtCG,SAAU,IACVwuM,SAAU,aACVvuJ,WAAYrhD,EAAM82C,WAAW+4J,kBAI/BF,aAAc,CACZ5tK,SAAU,WACV1hC,OAAQ,KAIV2qM,MAAO,CACLjpK,SAAU,WACVkK,SAAU,EACVlhB,MAAOs+K,YAAKrpM,EAAM+pC,QAAQC,KAAK,KAAM,IACrC,YAAa,CACXvpE,QAAS,KACT4/B,OAAQ,OACRH,QAAS,QACTE,MAAO,EACPi2C,OAAQ,EACR7J,YAAa,UAKjBr8C,MAAO,CACLyQ,QAAS,WACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnC1rJ,WAAY,GAAGpuH,OAAO6wE,EAAM,GAAK,IAAK,MACtCogD,WAAYrhD,EAAM82C,WAAWg5J,mBAI/BhmJ,qBAAsBhwD,YAAgB,CACpCiwD,gBAAiB,eACjB1pD,OAAQ,WACPL,EAAMc,YAAYO,GAAG,MAAO,CAC7BhB,OAAQ,WAIV2pD,sBAAuBlwD,YAAgB,CACrCiwD,gBAAiB,cACjB1pD,OAAQ,UACPL,EAAMc,YAAYO,GAAG,MAAO,CAC7BhB,OAAQ,WAIV0vM,oBAAqBj2M,YAAgB,CACnCiwD,gBAAiB,gBACjB1pD,OAAQ,UACPL,EAAMc,YAAYO,GAAG,MAAO,CAC7BhB,OAAQ,WAIV2vM,uBAAwBl2M,YAAgB,CACtCiwD,gBAAiB,aACjB1pD,OAAQ,UACPL,EAAMc,YAAYO,GAAG,MAAO,CAC7BhB,OAAQ,cA2coB,CAChC/sE,KAAM,cADOysE,CAEZgvC,I,8BC5nBH,SAASkhK,IAEP,GAC4C,qBAAnCC,gCAC4C,oBAA5CA,+BAA+BD,SAcxC,IAEEC,+BAA+BD,SAASA,GACxC,MAAO/5O,GAGPppB,QAAQ7Z,MAAMijC,IAOhB+5O,GACAjwR,EAAOC,QAAUC,EAAQ,O,q6BC9B3B,cACI,SAAF,EAAY,EAAmB,GAA3B,IACI,EAAM,UAAU,EAAS,IAAI,EAAU,qB,OACjCiwR,EAAOrqR,KAAKhB,KAAlB,IAAI,KAEZ,OAL6C,iBAK/C,EALA,CAA+C,OAO/C,cACE,WAAY,GAAZ,IACQ,EAAM,oBAAoB,EAAS,kC,OACzC,YAAM,IAAI,KAEZ,OAL2C,iBAK7C,EALA,CAA6C,OAO7C,cACI,SAAF,EAAY,EAAuB,GAA/B,IACI,EAAO,SAAC,GAAM,eAAY,QAAZ,EAAM,OAAD,QAAC,IAAD,OAAC,EAAD,EAAG,YAAI,QAAkB,QAAlB,EAAK,OAAD,QAAC,IAAD,OAAC,EAAD,EAAG,mBAAW,eAAE,MAM9C,EACJ,yBALoB,MAAM,QAAQ,GAChC,EAAS,IAAI,GACb,CAAC,EAAK,KAG8B,KAAK,QAA3C,0BACuB,EAAS,EAAK,GAAU,G,OAEjD,YAAM,IAAI,KAEZ,OAd6C,iBAc/C,EAdA,CAA+C,OAgB/C,cACI,SAAF,EAAY,GAAR,IACI,EAAS,EAAQ,iC,OACvB,YAAM,IAAI,KAEd,OAL8C,iBAK9C,EALA,CAA8C,OAO9C,cACI,SAAS,EAAC,EAAmB,GAA/B,IACQ,EAAM,eAAe,EAAS,IAAI,EAAU,oB,OAClD,YAAM,IAAI,KAEZ,OALgC,iBAKlC,EALA,CAAkC,OAclC,GAPA,YACE,WAAY,GAAZ,IACQ,EAAM,wBAAwB,EAAG,I,OACvC,YAAM,IAAI,KAH2B,iBAAzC,CAAyC,OAOzC,YACI,SAAF,I,OAEE,YADY,2CACF,KAEd,OALuD,iBAKvD,EALA,CAAuD,QAOnD,EAAJ,YACI,SAAF,EAAY,G,UAEJ,EAAM,8BAD+C,QAA3C,EAA2B,QAA3B,EAAqB,QAArB,EAAS,OAAN,QAAM,IAAN,OAAM,EAAN,EAAQ,kBAAU,eAAE,YAAI,QAAU,OAAN,QAAM,IAAN,OAAM,EAAN,EAAQ,YAAI,QAAI,G,OAE/D,YAAM,IAAI,KAEZ,OAN+C,iBAMjD,EANA,CAAiD,OAQjD,cACE,a,OAEE,YADY,iJACF,KAEZ,OALuD,iBAKzD,EALA,CAAyD,OAOzD,cACI,SAAF,EAAY,GAAR,IACI,EAAM,sCAAsC,EAAI,4D,OACtD,YAAM,IAAI,KAEd,OALiD,iBAKjD,EALA,CAAiD,OAO7C,EAAJ,YACI,SAAF,EAAY,GAAZ,IACQ,EAAM,yBAAyB,EAAK,iE,OAC1C,YAAM,IAAI,KAEZ,OAL6C,iBAK/C,EALA,CAA+C,OAO/C,cACI,SAAF,EAAY,EAAqB,GAA7B,IACI,EAAM,8CAA8C,EAAW,4BAA4B,E,OACjG,YAAM,IAAI,KAEd,OAL6C,iBAK7C,EALA,CAA6C,OAO7C,cACI,SAAS,EAAC,EAAqB,GAAjC,IACQ,EAAM,aAAa,EAAS,mBAAmB,EAAW,uF,OAChE,YAAM,IAAI,KAEZ,OALwC,iBAK1C,EALA,CAA0C,OAO1C,cACE,WAAY,EAAe,EAAa,GAAxC,IACQ,EAAM,4BAA4B,EAAG,gBAAgB,EAAG,sBAAsB,E,OACpF,YAAM,IAAI,KAEZ,OALyC,iBAK3C,EALA,CAA2C,OAO3C,cACI,SAAF,I,OAEE,YADY,yCACF,KAEd,OALgD,iBAKhD,EALA,CAAgD,OAO5C,EAAJ,YACI,SAAF,I,OAEE,YADY,gEACF,KAEZ,OALyC,iBAK3C,EALA,CAA2C,OAO3C,cACI,SAAF,EAAY,GAAZ,IACQ,EAAM,sDAAsD,E,OAClE,YAAM,IAAI,KAEZ,OALuC,iBAKzC,EALA,CAAyC,OAOzC,cACI,SAAF,EAAY,GAAR,IACI,EAAM,yCAAyC,E,OACrD,YAAM,IAAI,KAEZ,OAL0C,iBAK5C,EALA,CAA4C,OAe5C,cACI,SAAF,EAAY,EAAe,GAA3B,IACQ,EACJ,gCACS,EAAI,KAAI,QAAQ,EAAI,OAAM,WAAW,EAAI,OAAM,OAAO,EAAK,I,OACtE,YAAM,IAAI,KAEZ,OAPsC,iBAOxC,EAPA,CAAwC,OASxC,cACI,SAAF,EAAY,EAAe,GAAvB,IACI,EACJ,sCACS,EAAI,KAAI,QAAQ,EAAI,OAAM,WAAW,EAAI,OAAM,MAAM,E,OAChE,YAAM,IAAI,KAEZ,OAPmC,iBAOrC,EAPA,CAAqC,OASrC,cACI,SAAF,EAAY,EAAe,EAAsB,GAA7C,IACI,EAAM,4BAA4B,EAAY,wBAAwB,E,OAC5E,YAAM,EAAK,IAAI,KAEjB,OAL0C,iBAK5C,EALA,CAA4C,GAO5C,cACE,WAAY,EAAe,GAA3B,IACQ,EAAM,gEAAgE,E,OAC5E,YAAM,EAAK,IAAI,KAEjB,OALyC,iBAK3C,EALA,CAA2C,GAO3C,cACI,SAAF,EAAY,G,OAEV,YAAM,EADM,uCACG,KAEnB,OALkD,iBAKlD,EALA,CAAkD,GAOlD,cACI,SAAF,EAAY,G,OAEEqrR,EAAOrqR,KAAKhB,KAAlB,EADM,+BACG,KAEjB,OALyC,iBAK3C,EALA,CAA2C,GAO3C,cACE,WAAY,G,OAEV,YAAM,EADM,qEACG,KAEjB,OAL8C,iBAKhD,EALA,CAAgD,GAOhD,cACI,SAAF,EAAY,G,OAEV,YAAM,EADM,mBACG,KAEnB,OALwC,iBAKxC,EALA,CAAwC,GAOxC,cACI,SAAS,EAAC,G,OAEV,YAAM,EADM,wBACG,KAEjB,OALyC,iBAK3C,EALA,CAA2C,GAO3C,cACI,SAAF,EAAY,EAAe,GAA3B,IACQ,EAAM,kCAAkC,YAAc,GAAQ,I,OACpE,YAAM,EAAK,IAAI,KAEjB,OALuC,iBAKzC,EALA,CAAyC,I,6BCrNzC,kCAKO,IAAMsrR,EAAc,yD,6BCP3B,gNAkBI5rO,EAlBJ,uBAoBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,+DAAyH,CACvH7Y,UAGGp0B,kBAGIksG,EAAsB,kBAAMjsE,YACvC8M,KACA,SAAC3Y,GAAD,OAA2DA,EAAMjjC,IAAI,iBAG1Dg7G,EAAsB,kBAAMlsE,YACvC8M,KACA,SAAC3Y,GAAD,OAA2DA,EAAMjjC,IAAI,iBAG1Di7G,EAAmB,kBAAMnsE,YACpC8M,KACA,SAAC3Y,GAAD,OAA2DA,EAAMjjC,IAAI,cAkB1DwnR,EAAyB,kBAAM14O,YAC1C8M,KACA,SAAC3Y,GAAD,OAA2DA,EAAMjjC,IAAI,oBAG1DynR,EAA2B,kBAAM34O,YAC5C8M,KACA,SAAC3Y,GAAD,OAA2DA,EAAMjjC,IAAI,uB,m3BCnE1D0nR,EAAiC,SAAChwJ,EAAQt/H,GAAT,+BAAqCs/H,EAAO76G,MAAM,CAAC,OAAQ,OAA3D,YAAqEzkB,EAArE,YAA8Es/H,EAAO76G,MAAM,CAAC,OAAQ,WAWrI8qQ,EAAiC,SAACC,EAAUnuL,EAAQs8B,EAAW8xJ,EAAgBC,GAA9C,+BAA+EF,EAA/E,YAA2FnuL,EAA3F,YAAqGs8B,EAArG,YAAkH8xJ,EAAlH,YAAoIC,IACrKC,EAA6B,SAACC,GAAD,OAAiBA,EAAYx9O,MAAM,0EAChEy9O,EAAgC,SAACD,GAC1C,MAAsCA,EAAYhtO,MAAM,KAAKjvC,MAAM,GAAnE,mBAAO67Q,EAAP,KAAiBnuL,EAAjB,KAAyBs8B,EAAzB,KACA,MAAO,CACH6xJ,SAAU/vO,SAAS+vO,EAAU,IAC7BnuL,OAAQ5hD,SAAS4hD,EAAQ,IACzBs8B,UAAWl+E,SAASk+E,EAAW,IAC/B8xJ,eAAgBG,EAAYhtO,MAAM,KAAK,GACvC8sO,WAAYE,EAAYhtO,MAAM,KAAKjvC,MAAM,GAAG2R,KAAK,OAK5CwqQ,EAA4B,SAACzuL,EAAQ0uL,GAAT,uCAAmD1uL,EAAnD,YAA6D0uL,IACzFC,EAAwB,SAACC,GAAD,OAAiBA,EAAY79O,MAAM,sCAS3D89O,EAAiC,SAAC7uL,GAAD,6CAA4CA,IAC7E8uL,EAA6B,SAACF,GAAD,OAAiBA,EAAY79O,MAAM,uCAQhEg+O,EAAwB,SAAC/uL,EAAQs8B,EAAWoyJ,GAApB,uCAA8D1uL,EAA9D,YAAwEs8B,EAAxE,YAAqFoyJ,IAU7GM,EAA0B,SAAChvL,EAAQs8B,GAAT,+BAAyCt8B,EAAzC,YAAmDs8B,IAC7E2yJ,EAAsB,SAACV,GAAD,OAAiBA,EAAYx9O,MAAM,6BASzDm+O,EAAmC,SAAC9vF,EAAUzgM,GAAX,iCAAyCygM,EAASh8K,MAAM,CAAC,OAAQ,OAAjE,YAA2EzkB,EAA3E,YAAoFygM,EAASh8K,MAAM,CAAC,OAAQ,WAW/I+rQ,EAAmC,SAACC,EAAYpvL,EAAQs8B,EAAW8xJ,EAAgBiB,GAAhD,iCAAqFD,EAArF,YAAmGpvL,EAAnG,YAA6Gs8B,EAA7G,YAA0H8xJ,EAA1H,YAA4IiB,IAC/KC,EAA+B,SAACf,GAAD,OAAiBA,EAAYx9O,MAAM,8EAClEw+O,EAAkC,SAAChB,GAC5C,MAAwCA,EAAYhtO,MAAM,KAAKjvC,MAAM,GAArE,mBAAO88Q,EAAP,KAAmBpvL,EAAnB,KAA2Bs8B,EAA3B,KACA,MAAO,CACH8yJ,WAAYhxO,SAASgxO,EAAY,IACjCpvL,OAAQ5hD,SAAS4hD,EAAQ,IACzBs8B,UAAWl+E,SAASk+E,EAAW,IAC/B8xJ,eAAgBG,EAAYhtO,MAAM,KAAK,GACvC8tO,aAAcd,EAAYhtO,MAAM,KAAKjvC,MAAM,GAAG2R,KAAK,OAI9CurQ,EAA0C,SAAC92K,EAAW1Y,EAAQyvL,EAAYrB,GAAhC,IAAgDzvR,EAAhD,uDAAwD,EAAxD,sCAAuFyvR,EAAvF,YAAyG11K,EAAzG,YAAsH1Y,EAAtH,YAAgIyvL,EAAWxrQ,KAAK,KAAhJ,YAAwJtlB,IAClM+wR,EAAsC,SAACnB,GAAD,OAAiBA,EAAYx9O,MAAM,iCACzE4+O,EAAyC,SAACpB,GACnD,MAAqDA,EAAYhtO,MAAM,KAAKjvC,MAAM,GAAlF,mBAAO5P,EAAP,KAAag2G,EAAb,KAAwB1Y,EAAxB,KAAgCyvL,EAAhC,KAA4C9wR,EAA5C,KACA,MAAO,CACH+5G,UAAWt6D,SAASs6D,EAAW,IAC/B1Y,OAAQ5hD,SAAS4hD,EAAQ,IACzBouL,eAAgB1rR,EAChB+sR,WAAYA,EAAWluO,MAAM,KAAK/1C,KAAI,SAACi4B,GAAD,OAAQ2a,SAAS3a,EAAI,OAC3D9kC,MAAOy/C,SAASz/C,EAAO,MAIlBixR,EAAmD,SAACH,GAAD,IAAa9wR,EAAb,uDAAqB,EAArB,iDAA+D8wR,EAAWjkR,KAAI,mCAAEktG,EAAF,KAAa1Y,EAAb,KAAqBs8B,EAArB,KAAgCuzJ,EAAhC,qBAAmDn3K,EAAnD,YAAgE1Y,EAAhE,YAA0Es8B,EAA1E,YAAuFuzJ,MAAc5rQ,KAAK,KAAxL,YAAgMtlB,IACnPmxR,EAA+C,SAACvB,GAAD,OAAiBA,EAAYx9O,MAAM,4CAClFg/O,EAAkD,SAACxB,GAE5D,OADmBA,EAAYhtO,MAAM,KAAKjvC,MAAM,GAC9B9G,KAAI,SAACwf,GAAD,OAASA,EAAIu2B,MAAM,QAAM/1C,KAAI,mCAAEktG,EAAF,KAAa1Y,EAAb,KAAqBs8B,EAArB,KAAgCuzJ,EAAhC,WAAgD,CAACzxO,SAASs6D,EAAW,IAAKt6D,SAAS4hD,EAAQ,IAAK5hD,SAASk+E,EAAW,IAAKuzJ,OAGnKG,EAAwB,SAACC,GAAD,OAAmBpwR,QAAO,OAACowR,QAAD,IAACA,OAAD,EAACA,EAAe1pR,IAAI,aACtE2pR,EAAgC,SAACC,GAC1C,OAAOA,GAA2BA,EAAwBhiR,QAAO,SAACutI,EAAK65D,EAAMv1G,GACzE,IAAMw6H,EAAWjlB,EAAKxnM,OAAOiiR,GAAuB7hR,QAAO,SAACiiR,EAAMC,EAAO/zJ,GAIrE,OAHA8zJ,EAAKxhR,KAAK,CACN60B,GAAI64F,IAED8zJ,IACR,IAOH,OANI51D,EAASn2N,QACTq3I,EAAI9sI,KAAK,CACL60B,GAAIu8D,EACJw6H,aAGD9+E,IACR,KAGM40I,EAA2B,SAAC,GAMlC,IALLH,EAKI,EALJA,wBACAhjP,EAII,EAJJA,SACAojP,EAGI,EAHJA,QACA/sF,EAEI,EAFJA,MACAqsF,EACI,EADJA,WAQE1iP,EAAS,IAAI4J,IAA+B,CACxCtT,GAAI+sP,IACJ9jP,MAAO,CACHmjP,WAA2B,YAAfA,EAA2B,WAAaA,EACpDY,YAAaP,EAA8BC,GAC3CO,oBAAqB,CACjBb,WAZA,CACR,QAAW,UACX,OAAU,SACV,SAAY,WACZ,gBAAmB,YAQKA,GAChBc,SAAUJ,EAAQhqR,IAAI,MACtBuuM,WAAYy7E,EAAQhqR,IAAI,QACxBqqR,cAAeC,YAAoBV,GAAyB9rR,OAC5DysR,cAAeC,YAAoBZ,EAAyB3sF,GAAOn/L,YAI/E8oC,EAAS,IAAI0J,IAA6B,CACtCpT,GAAI+sP,IACJrjL,MAAM,O,6BCpKd,oEACO,IAEK6jL,EAFCzkB,EAAkB,QAClBE,EAA2B,6B,SAC5BukB,K,wBAAAA,E,sBAAAA,E,gBAAAA,E,gBAAAA,E,gBAAAA,E,YAAAA,E,WAAAA,M,mCCHZ,uEAGe,SAAS7qK,EAAcoG,EAAMxhG,GAC1C,IAAIoxB,EAAYlV,IAAM4G,KAAK5G,IAAM8E,YAAW,SAAUW,EAAOzuC,GAC3D,OAAOgpC,IAAMwB,cAAcwoP,IAAS3kP,YAAS,CAC3CruC,IAAKA,GACJyuC,GAAQ6/E,OAQb,OADApwE,EAAUotK,QAAU0nE,IAAQ1nE,QACrBptK,I,yKCCL+F,E,cCfSG,EAAsB,SDiBtBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,wEAAkI,CAChI7Y,UAGGp0B,kBASI87Q,EAA+C,CAC1DviO,SAAU,GACV8xI,OAAQ,GACR/3L,KAAM,IAaK6iI,EAAqB,kBAAMl2F,YACtC8M,KACA,SAAC3Y,GAAD,OAAkDA,EAAMjjC,IAAI,aAAeqlB,iBAAOslQ,OAGvEC,EAA6B,kBAAM97O,YAC9Ck2F,KACA,SAAC/hG,GAAD,OAAyCA,EAAMjjC,IAAI,aAAe,OAGvD6qR,EAA2B,kBAAM/7O,YAC5Ck2F,KACA,SAAC/hG,GAAD,OAAyCA,EAAMjjC,IAAI,cAGxC8qR,EAAyB,kBAAMh8O,YAC1Ck2F,KACA,SAAC/hG,GAAD,OAAyCA,EAAMjjC,IAAI,a,6BEjErD,SAASgkI,EAAMrsI,GACb,IAAIuB,EAAMyG,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC1E1G,EAAM0G,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAQ9E,OAAO3G,KAAKE,IAAIF,KAAKC,IAAIC,EAAKvB,GAAQsB,GA8FjC,SAAS8xR,EAAe7oL,GAE7B,GAAIA,EAAM/lG,KACR,OAAO+lG,EAGT,GAAwB,MAApBA,EAAMqiD,OAAO,GACf,OAAOwmI,EA3FJ,SAAkB7oL,GACvBA,EAAQA,EAAM0oB,OAAO,GACrB,IAAIogK,EAAK,IAAIj0O,OAAO,OAAOxvC,OAAO26F,EAAMpkG,OAAS,EAAG,KAAM,KACtDmtR,EAAS/oL,EAAM13D,MAAMwgP,GAQzB,OANIC,GAA+B,IAArBA,EAAO,GAAGntR,SACtBmtR,EAASA,EAAOhmR,KAAI,SAAU5C,GAC5B,OAAOA,EAAIA,MAIR4oR,EAAS,OAAO1jR,OAAO0jR,EAAOhmR,KAAI,SAAU5C,GACjD,OAAOw1C,SAASx1C,EAAG,OAClBqb,KAAK,MAAO,KAAO,GA8EEwtQ,CAAShpL,IAGjC,IAAIipL,EAASjpL,EAAMzlF,QAAQ,KACvBtgB,EAAO+lG,EAAMxzB,UAAU,EAAGy8M,GAE9B,IAAsD,IAAlD,CAAC,MAAO,OAAQ,MAAO,QAAQ1uQ,QAAQtgB,GACzC,MAAM,IAAI0H,MAAM,CAAC,6BAA6B0D,OAAO26F,EAAO,YAAa,kFAAkFxkF,KAAK,OAGlK,IAAItW,EAAS86F,EAAMxzB,UAAUy8M,EAAS,EAAGjpL,EAAMpkG,OAAS,GAAGk9C,MAAM,KAIjE,MAAO,CACL7+C,KAAMA,EACNiL,OALFA,EAASA,EAAOnC,KAAI,SAAUtN,GAC5B,OAAOi9E,WAAWj9E,OAgBf,SAASyzR,EAAelpL,GAC7B,IAAI/lG,EAAO+lG,EAAM/lG,KACbiL,EAAS86F,EAAM96F,OAYnB,OAV6B,IAAzBjL,EAAKsgB,QAAQ,OAEfrV,EAASA,EAAOnC,KAAI,SAAU5C,EAAGpD,GAC/B,OAAOA,EAAI,EAAI44C,SAASx1C,EAAG,IAAMA,MAED,IAAzBlG,EAAKsgB,QAAQ,SACtBrV,EAAO,GAAK,GAAGG,OAAOH,EAAO,GAAI,KACjCA,EAAO,GAAK,GAAGG,OAAOH,EAAO,GAAI,MAG5B,GAAGG,OAAOpL,EAAM,KAAKoL,OAAOH,EAAOsW,KAAK,MAAO,KAYjD,SAAS2tQ,EAAiBC,EAAYt0J,GAC3C,IAAIu0J,EAAOC,EAAaF,GACpBG,EAAOD,EAAax0J,GACxB,OAAQh+H,KAAKC,IAAIsyR,EAAME,GAAQ,MAASzyR,KAAKE,IAAIqyR,EAAME,GAAQ,KAY1D,SAASD,EAAatpL,GAE3B,IAAIwpL,EAAqB,SADzBxpL,EAAQ6oL,EAAe7oL,IACP/lG,KAAiB4uR,EAlH5B,SAAkB7oL,GAEvB,IACI96F,GAFJ86F,EAAQ6oL,EAAe7oL,IAEH96F,OAChBka,EAAIla,EAAO,GACXqC,EAAIrC,EAAO,GAAK,IAChBkd,EAAIld,EAAO,GAAK,IAChBxF,EAAI6H,EAAIzQ,KAAKE,IAAIorB,EAAG,EAAIA,GAExBquD,EAAI,SAAWtwE,GACjB,IAAIjG,EAAIuD,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,IAAM0C,EAAIif,EAAI,IAAM,GAC3F,OAAOgD,EAAI1iB,EAAI5I,KAAKC,IAAID,KAAKE,IAAIkD,EAAI,EAAG,EAAIA,EAAG,IAAK,IAGlDD,EAAO,MACPuvR,EAAM,CAAC1yR,KAAKo/E,MAAa,IAAPzF,EAAE,IAAW35E,KAAKo/E,MAAa,IAAPzF,EAAE,IAAW35E,KAAKo/E,MAAa,IAAPzF,EAAE,KAOxE,MALmB,SAAfuvB,EAAM/lG,OACRA,GAAQ,IACRuvR,EAAIrjR,KAAKjB,EAAO,KAGXgkR,EAAe,CACpBjvR,KAAMA,EACNiL,OAAQskR,IA0FsCC,CAASzpL,IAAQ96F,OAAS86F,EAAM96F,OAOhF,OANAskR,EAAMA,EAAIzmR,KAAI,SAAUiN,GAGtB,OAFAA,GAAO,MAEO,OAAUA,EAAM,MAAQlZ,KAAKy1O,KAAKv8N,EAAM,MAAS,MAAO,QAGjEtU,QAAQ,MAAS8tR,EAAI,GAAK,MAASA,EAAI,GAAK,MAASA,EAAI,IAAIr1B,QAAQ,IAWvE,SAASv1H,EAAU5+B,GACxB,IAAI0pL,EAAcjsR,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,IACtF,OAAO6rR,EAAatpL,GAAS,GAAM2pL,EAAO3pL,EAAO0pL,GAAeE,EAAQ5pL,EAAO0pL,GAW1E,SAASpL,EAAKt+K,EAAOvqG,GAS1B,OARAuqG,EAAQ6oL,EAAe7oL,GACvBvqG,EAAQqsI,EAAMrsI,GAEK,QAAfuqG,EAAM/lG,MAAiC,QAAf+lG,EAAM/lG,OAChC+lG,EAAM/lG,MAAQ,KAGhB+lG,EAAM96F,OAAO,GAAKzP,EACXyzR,EAAelpL,GAUjB,SAAS2pL,EAAO3pL,EAAO0pL,GAI5B,GAHA1pL,EAAQ6oL,EAAe7oL,GACvB0pL,EAAc5nJ,EAAM4nJ,IAEe,IAA/B1pL,EAAM/lG,KAAKsgB,QAAQ,OACrBylF,EAAM96F,OAAO,IAAM,EAAIwkR,OAClB,IAAmC,IAA/B1pL,EAAM/lG,KAAKsgB,QAAQ,OAC5B,IAAK,IAAIxd,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAC1BijG,EAAM96F,OAAOnI,IAAM,EAAI2sR,EAI3B,OAAOR,EAAelpL,GAUjB,SAAS4pL,EAAQ5pL,EAAO0pL,GAI7B,GAHA1pL,EAAQ6oL,EAAe7oL,GACvB0pL,EAAc5nJ,EAAM4nJ,IAEe,IAA/B1pL,EAAM/lG,KAAKsgB,QAAQ,OACrBylF,EAAM96F,OAAO,KAAO,IAAM86F,EAAM96F,OAAO,IAAMwkR,OACxC,IAAmC,IAA/B1pL,EAAM/lG,KAAKsgB,QAAQ,OAC5B,IAAK,IAAIxd,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAC1BijG,EAAM96F,OAAOnI,KAAO,IAAMijG,EAAM96F,OAAOnI,IAAM2sR,EAIjD,OAAOR,EAAelpL,GApRxB,2K,ibCYMupB,EAAYJ,aAAW,SAACl0C,GAAD,MAAY,CACvC40M,gBAAiB,CACf7pL,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,UAuE3BytP,EAAkBl5J,aAJX,SAAC,GAAD,EAAGv6C,SAAH,IAAgBpyC,EAAhB,wBACX,cAAC8lP,EAAA,EAAD,eAAe9lP,MAGO2sF,CAAH,uHAIN,SAAA3sF,GAAK,OAAIA,EAAMoyC,YAEf2zM,EAjEqC,SAAC/lP,GACnD,IACE17B,EAME07B,EANF17B,KACA0hR,EAKEhmP,EALFgmP,SAFF,EAOIhmP,EAJFoyC,gBAHF,MAGa,QAHb,EAIE6zM,EAGEjmP,EAHFimP,cACAnjQ,EAEEkd,EAFFld,OALF,EAOIkd,EADFkmP,eANF,SAUMl3M,EAAUs2C,IACZ7zE,EAAU,cAAC69D,EAAA,EAAD,UAAahrG,GAAQ,MA+BnC,OA9BI0hR,IAEAv0O,EADEy0O,EACQ,cAAC9iK,EAAA,EAAD,CACRrnB,MAAM,UACNqV,MAAO,CAAC+J,OAAQ,WAChB+H,KAAI,UAAK1+F,OAAO+6B,SAAS3uC,QAArB,OAA8B2T,6BAA9B,OAAkDyhQ,GACtDljQ,OAAQA,EAJA,SAMPxe,GAAQ,KAIT,cAAC,IAAD,CAAiBS,GAAIihR,EAAU92M,UAAWF,EAAQ42M,gBAAlD,SACGthR,GAAQ,MAIb2hR,IACFx0O,EAAU,cAAC2xE,EAAA,EAAD,CACRrnB,MAAM,UACNqV,MAAO,CAAC+J,OAAQ,WAChBR,QAAS,SAACz8G,GACRA,EAAEg5H,iBACF+uJ,KALM,SAQP3hR,KAKH,cAACuhR,EAAD,CAAiBzzM,SAAUA,EAA3B,SACE,cAAC2tC,EAAA,EAAD,CACEC,MAAO17G,GAAQ,GACf27G,UAAU,eAFZ,SAIGxuE,OC7DH6zE,EAAYJ,YAAW,CAC3BihK,aAAc,CACZ/zM,SAAU,SAEZg0M,aAAc,CACZ75J,WAAY,SACZpM,SAAU,SACVsL,aAAc,cA4BH46J,EAxB4B,SAACrmP,GAC1C,IACE2hF,EAEE3hF,EAFF2hF,KADF,EAGI3hF,EADFsmP,uBAFF,MAEoB,GAFpB,EAKA,EAGIhhK,IAFF6gK,EADF,EACEA,aACAC,EAFF,EAEEA,aAGF,OACE,cAACN,EAAA,EAAD,CACE52M,UAAWi3M,EADb,SAGE,cAACpmK,EAAA,EAAD,CAASC,MAAO2B,GAAQ,GAAI1B,UAAU,eAAtC,SACE,cAAC3Q,EAAA,EAAD,yBAAYpgC,UAAWk3M,GAAkBE,GAAzC,aACI3kK,GAAc,Y,kGC4EpBj/E,EAAkBkG,YAAyB,IAGlCmiC,oBACb4pC,kBAAQjyE,GAViB,SAACjC,GAC1B,MAAO,CACLA,eAOWsqC,EA7EgC,SAAC/qC,GAC9C,IACE6jP,EACE7jP,EADF6jP,QAIF,EAAgCrvO,mBAAS,MAAzC,mBAAOy0E,EAAP,KAAiBs9J,EAAjB,KAUMl8D,EAAmCw5D,EAAQhqR,IAAI,UAAUwH,QAAO,SAACsM,GAAD,MAA2B,WAApBA,EAAE9T,IAAI,aAAwBjB,UACrG4tR,EAAan8D,EAAOn/M,QAU1B,OACE,cAAC46Q,EAAA,EAAD,CACE10K,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAQI+6J,EAAa,EACb,qCACE,cAAC/rK,EAAA,EAAD,CACE1e,MAAM,UACN4e,QA5BS,SAACz8G,GAClBqoR,EAAYroR,EAAEs8G,gBA4BNkV,QAAS82J,EAAa,EAAI,cAAC,IAAD,CAAmBzqL,MAAM,WAAc,KAHnE,SAKGsuH,EAAOnxM,QAA4Brf,IAAI,iBAE1C,cAAC4sR,EAAA,EAAD,CACEx9J,SAAUA,EACVxoB,KAAMttG,QAAQ81H,GACdwR,QAxCU,WAClB8rJ,EAAY,OAoCN,SAMIl8D,EAAOvrN,KAAI,SAACgmL,EAA2BhsL,GACrC,IAAMqvN,EAAUrjC,EAAMjrL,IAAI,MAC1B,OACE,cAACw4G,EAAA,EAAD,CAAkBsI,QAAS,kBAnC3B,SAACwtG,IAKf1nL,EAFIT,EADFS,UAGOv+B,YAAK,GAAD,OAAIwoB,aAAJ,YAAkBy9L,KA8BgBu+D,CAAQv+D,IAAzC,SACGrjC,EAAMjrL,IAAI,gBADEf,WAQvB,cAACw2G,EAAA,EAAD,CAAYvT,MAAM,gBAAlB,SAAmC,W,gFCdvCr5D,EAAkBkG,YAAyB,CAC/C+9O,gBAAiB3mE,cACjBlqH,OAAQh/C,iBAGKi0B,oBACbgG,aA9Da,iBAAO,CACpB61M,eAAgB,CACdh1M,QAAS,OA6DX+iC,kBAAQjyE,GAbiB,SAACjC,GAC1B,MAAO,CACLA,eASWsqC,EArD4C,SAAC/qC,GAC1D,IACEgvC,EAKEhvC,EALFgvC,QACA60M,EAIE7jP,EAJF6jP,QACApjP,EAGET,EAHFS,SACAkmP,EAEE3mP,EAFF2mP,gBACA7wL,EACE91D,EADF81D,OAGI/+D,EAAK8sP,EAAQhqR,IAAI,MACjBgtR,EAAUF,EAAgBtnR,SAAS03B,GACnCiG,EAAU,CAAEhnC,KAAM,OAAQ8wR,OAAQhxL,EAAQkW,UAAWj1E,GAE3D,OACE,cAAC+uP,EAAA,EAAD,CACE10K,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAOE,cAAC+E,EAAA,EAAD,CACEz0B,MAAM,UACN4e,QAAS,kBACPl6E,EACEomP,EACE,IAAI3/K,KAAqBlqE,GACzB,IAAIoqE,KAAmBpqE,KAG7BgyC,QAAS,CAAC3hE,KAAM2hE,EAAQ43M,gBAT1B,SAYIC,EACI,cAAC,IAAD,IACA,cAAC,IAAD,W,gDCkDRnkP,EAAkBkG,YAAyB,I,GAIlCmiC,kBACb91B,YAAgB,gBAChB87B,aArFa,SAACC,GAAD,MAA+B,CAC5Cg5I,UAAW,CACTz9F,WAAY,SACZpM,SAAU,SACVsL,aAAc,WACdr5C,SAAU,SAEZ+qC,SAAU,CACRhC,OAAQ,WAEV4rK,iBAAkB,CAChBjsK,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,GACzB5a,SAAU,WAyEZtI,kBAAQjyE,GAbiB,SAACjC,GAC1B,MAAO,CACLA,eAQWsqC,EAlEmC,SAAC/qC,GACjD,IACES,EAOET,EAPFS,SACAuuC,EAMEhvC,EANFgvC,QAEA8+D,GAIE9tG,EALFne,EAKEme,EAJF8tG,UACAk5I,EAGEhnP,EAHFgnP,cACAC,EAEEjnP,EAFFinP,aACAC,EACElnP,EADFknP,iBAGIC,EAAkBr5I,GAAYA,EAAShvI,KAAI,SAACivI,EAASq5I,GACzD,IAAMnrK,EAAY8xB,EAAQr3H,MAAMswQ,IAAkB,GAC5C9qK,EAAW6xB,EAAQr3H,MAAMuwQ,GACzBI,EAAMt5I,EAAQr3H,MAAMwwQ,GACpBI,EAAcD,GAAaprK,GAAaC,EAAQ,WAAOA,GAAa,IAE1E,OAAO,cAACkH,EAAA,EAAD,CACLl0C,UAAWF,EAAQmuC,SACnBphB,MAAM,UAEN4e,QAAS,WACPl6E,EAAS,IAAI6rB,KAA2B,CAACwhF,SAAU5uH,iBAAO,CAAC6uH,OAC3DttG,EAAS,IAAI8J,IAAiC,CAACxT,GAAIwwP,IAAW91O,QAAS,aACvEhR,EAAS,IAAI+rB,KAAoBuhF,EAAQl0I,IAAI,QAC7C4mC,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIwwP,IAAW9mL,MAAM,MAR9D,SAWJ2mL,EAAgB,KAAOE,EAAcA,GARjCF,MAYT,OACE,cAACtB,EAAA,EAAD,CACE10K,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAOE,cAAC1L,EAAA,EAAD,CACE88J,aAAa,EACb58J,UAAU,eACVD,MAAOmnK,EACPn4M,QAAS,CACPo2L,QAASp2L,EAAQ+3M,kBALrB,SAQE,qBAAK73M,UAAWF,EAAQg7I,UAAxB,SACIm9D,W,kDC7EGp8M,qBACb91B,YAAgB,gBADH81B,EAvBqD,SAAC/qC,GACnE,IACE6pL,EAEE7pL,EAFF6pL,eACAhoM,EACEme,EADFne,EAGF,OACE,cAACikQ,EAAA,EAAD,CACE10K,MAAO,CAAE2R,UAAW,UADtB,SAII8mG,EACI,cAAC9pG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0BAA2Bo+F,UAAU,eAAvD,SACE,cAAC,KAAD,CAAmBlkB,MAAM,cAE3B,cAACgkB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6BAA8Bo+F,UAAU,eAA1D,SACE,cAAC,KAAD,CAAmBlkB,MAAM,mB,oBC8GjCr5D,GAAkBkG,YAAyB,IAQlCmiC,qBACb91B,YAAgB,gBAChB87B,aAtGa,SAACC,GAAD,MAA+B,CAC5C2uG,QAAS,CACPpzD,WAAY,SACZn6C,SAAU,SAEZuvC,KAAM,CACJxB,SAAU,SACVsL,aAAc,YAEhB+7J,SAAU,CACRvqK,SAAU,UAEZwqK,eAAgB,CACd3sK,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,IAE3B5X,UAAW,CACT5uC,OAAQL,EAAMZ,QAAQ,EAAG,QAsF3BukC,kBAAQjyE,IATiB,SAACjC,GAC1B,MAAO,CACLA,eAIWsqC,EA/E2B,SAAC/qC,GACzC,IACEgvC,EAIEhvC,EAJFgvC,QACAl+B,EAGE9Q,EAHF8Q,KACA42O,EAEE1nP,EAFF0nP,aAHF,EAKI1nP,EADF2nP,cAJF,SAOM5nL,EAAO,SAAC4hB,EAAc9B,GAAf,IAA6B/iF,EAA7B,uDAA6C,GAAI9b,EAAjD,uCAAqE/uB,EAArE,uDAAqF,EAArF,OACX,cAACmxH,EAAA,EAAD,CAEErnB,MAAM,UACNqV,MAAO,CAAE+J,OAAQ,WACjBR,QAAS,SAACz8G,GACRA,EAAEg5H,iBACEl2G,GACFA,IAEFgf,EAAMS,SACJv+B,YAAK,CAAE+/C,SAAU49D,EAAM/iF,YAV7B,SAcE,cAACwyE,EAAA,EAAD,CAAYvT,MAAM,UAAU7sB,UAAWm0C,KAAWr0C,EAAQ2yC,KAAM3yC,EAAQw4M,UAAxE,SAAoF7lK,KAb/E1vH,IAiBH21R,EAAe,SAACC,GAAD,OACnB,qBAAK34M,UAAWF,EAAQ2wG,QAAxB,SAEIgoG,EACID,EACIG,EAAS/oR,KAAI,SAAC4wE,EAAMz9E,GAAP,OAAiB8tG,EAAKrwB,EAAKprE,KAAMojR,EAAch4M,EAAK5yC,MAAO4yC,EAAK1uD,OAAQ/uB,MACrF41R,EAAS/oR,KAAI,SAAC4wE,EAAMz9E,GAAP,OAAiB8tG,EAAKrwB,EAAKprE,KAAMorE,EAAKmwC,KAAMnwC,EAAK5yC,MAAO4yC,EAAK1uD,OAAQ/uB,MACtF41R,EAAS/oR,KAAI,SAAC4wE,EAAMz9E,GAAP,OAAiB,cAACq9G,EAAA,EAAD,CAAwBpgC,UAAWm0C,KAAWr0C,EAAQ2yC,KAAM3yC,EAAQw4M,UAApE,SAAgF93M,EAAKprE,MAApErS,SAKzD,OACE,cAAC6zR,EAAA,EAAD,CACE52M,UAAWF,EAAQ2wG,QADrB,SAII7uI,EAAKj/C,KACD,mCACE,cAACkuH,EAAA,EAAD,CACE88J,aAAa,EACb58J,UAAU,eACVD,MAAO4nK,EAAa92O,GACpBk+B,QAAS,CACPo2L,QAASp2L,EAAQy4M,eACjBzG,uBAAwBhyM,EAAQixC,WAElCm9J,YAAa,CACX+C,UAAW,CACT2H,aAAc,CACZC,iBAAiB,KAXzB,SAgBIH,EAAa75Q,eAAK,CAAC+iC,EAAK53B,eAG9B,cAACo2F,EAAA,EAAD,qB,UC9GG04K,GAZ+B,SAAChoP,GAC7C,IACEu1F,EACEv1F,EADFu1F,OAGF,OACE,cAACuwJ,EAAA,EAAD,CAAWl0M,QAAQ,OAAO//E,KAAK,QAA/B,SACE,cAACo2R,GAAA,EAAD,CAAa1yJ,OAAQA,EAAQ2yJ,YAAY,OCJ7BhjK,YAAW,CAC3B0hK,eAAgB,CACdh1M,QAAS,KCNKszC,YAAW,CAC3BijK,kBAAmB,CACjB/1M,SAAU,SAEZg2M,kBAAmB,CACjB77J,WAAY,SACZpM,SAAU,SACVsL,aAAc,e,0ICNX,SAAS48J,EAAW72R,EAAY82R,EAAenpQ,GACpD,OAAOC,EACL,GACAkpQ,GAAgBC,EAChBppQ,GAAaE,EACb7tB,EACA,GACA2tB,GAAaA,EAAUxnB,OAAS,EAAI,QAAK/F,EACzC,CAAE,GAAIJ,IAIV,SAAS4tB,EAAWnd,EAAOqmR,EAAcnpQ,EAAW3tB,EAAO4I,EAAKgK,EAASkb,GACvE,IAAMkpQ,EAAoBF,EAAaxxR,KAAKwoB,EAAa9tB,GACnDi3R,EAASD,aAA6BzhE,EACtChvN,EAAkCR,MAAMC,QAAQgxR,GAClD/oQ,UAAU5rB,IAAIa,QACd+zR,GAAU9/M,YAAc6/M,GACtB/oQ,UAAU5rB,IAAIY,MACd,KACN,GAAa,MAATsD,EAAe,CACjB,IAA0C,IAAtCkK,EAAMqU,QAAQkyQ,GAChB,MAAM,IAAIrwR,UAAU,kDAEtB8J,EAAMC,KAAKsmR,GACI,MAAXpkR,GAA2B,KAARhK,GACrBgK,EAAQlC,KAAK9H,GAEf,IAAMmlB,EAAYJ,EAAUroB,KAC1BwoB,EACAllB,EACArC,EAAM0wR,EAAM,eAAOD,GAAqBA,GAAmB1pR,KAAI,SAAC5I,EAAGD,GAAJ,OAC7DmpB,EAAWnd,EAAOqmR,EAAcnpQ,EAAWjpB,EAAGD,EAAGmO,EAASokR,MAE5DpkR,GAAWA,EAAQwB,SAMrB,OAJA3D,EAAME,MACS,MAAXiC,GACFA,EAAQjC,MAEHod,EAET,OAAOipQ,EAGT,SAASD,EAAoBryR,GAC3B,OAAOA,EAGT,SAASmpB,EAAiBppB,EAAGC,GAC3B,OAAOupB,UAAUpsB,QAAQ6C,GAAKA,EAAEqc,QAAUrc,EAAEmhB,S,IAKzB0vM,E,WAEnB,WAAmBl5K,GAAuB,oBACxC35C,OAAO+8C,OAAOn7C,KAAM+3C,G,+CAGtB,WACE,OAAOk5K,EAAKshE,WAAL,eAAoBvyR,S,qCAG7B,WACE,OAAOixN,EAAKshE,WAAL,eAAoBvyR,W,KAXVixN,EACLshE,WAAaA,G,6BCtEtB,IAAKK,EAQAC,EARZ,oE,SAAYD,K,eAAAA,E,oBAAAA,E,sBAAAA,E,oBAAAA,E,uBAAAA,M,cAQAC,O,aAAAA,I,iBAAAA,I,gBAAAA,M,mxBCQAC,E,iBAAAA,K,sBAAAA,E,0CAAAA,E,8CAAAA,E,oBAAAA,E,gCAAAA,E,sBAAAA,E,0CAAAA,E,0BAAAA,E,gDAAAA,E,wBAAAA,E,4BAAAA,E,4BAAAA,E,gDAAAA,E,8BAAAA,E,kDAAAA,E,kCAAAA,E,sDAAAA,E,gDAAAA,E,oEAAAA,E,kCAAAA,E,gCAAAA,E,8EAAAA,E,4EAAAA,E,2BAAAA,M,KA4BL,IAAMC,EAGX,WACS7rP,GAKN,yBALMA,UAKP,KARchnC,KAAO4yR,EAAgBE,sCAW5BC,EAGX,WACS/rP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBI,uCAU5BC,EAGX,WACSjsP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBM,gBAS5BC,EAGX,WACSnsP,GASN,yBATMA,UASP,KAZchnC,KAAO4yR,EAAgBQ,uBAuB5BC,EAGX,WACSrsP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBU,iBAU5BC,EAGX,WACSvsP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBY,2BAS5BC,EAGX,WACSzsP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBc,eAU5BC,EAGX,WACS3sP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBgB,yBAU5BC,EAGX,WACS7sP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBkB,kCAU5BC,EAGX,WACS/sP,GAKN,yBALMA,UAKP,KARchnC,KAAO4yR,EAAgBoB,wBAW5BC,EAGX,WACSjtP,GAIN,yBAJMA,UAIP,KAPchnC,KAAO4yR,EAAgBsB,cAU5BC,EAGX,WACSntP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBwB,wBAS5BC,EAGX,WACSrtP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgB0B,aAS5BC,EAGX,WACSvtP,GACN,yBADMA,UACP,KAJchnC,KAAO4yR,EAAgB4B,qBAO5BC,EAGX,WACSztP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgB8B,WAS5BC,EAGX,WACS3tP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBgC,gBAoB5BC,EAGX,WACS7tP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBkC,UAS5BC,EAGX,WACS/tP,GAGN,yBAHMA,UAGP,KANchnC,KAAO4yR,EAAgBoC,qBAS5BC,EAGX,WACSjuP,GACN,yBADMA,UACP,KAJKhnC,KAAO4yR,EAAgBsC,YAOnBC,EAGX,WACSnuP,GACN,yBADMA,UACP,KAJKhnC,KAAO4yR,EAAgBwC,cAOnBC,EAAb,sCACSr1R,KAAO4yR,EAAgB0C,c,qoBCzQpBC,E,iBAAAA,K,8BAAAA,E,kDAAAA,E,0BAAAA,E,8CAAAA,E,4CAAAA,E,sCAAAA,E,8BAAAA,E,mDAAAA,E,4CAAAA,E,wCAAAA,E,wBAAAA,E,4CAAAA,E,sCAAAA,E,gCAAAA,E,oCAAAA,E,wDAAAA,E,2CAAAA,M,KA2BL,IAAMx2K,EAGX,WACS/3E,GACN,yBADMA,UACP,KAJchnC,KAAOu1R,EAAcjoB,eAO1BkoB,EAGX,WACSxuP,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAcE,aAU1BC,EAGX,WACS1uP,GAKN,yBALMA,UAKP,KARchnC,KAAOu1R,EAAcI,uBAY1BpoB,EAGX,WACSvmO,GAGN,yBAHMA,UAGP,KANchnC,KAAOu1R,EAAc/nB,yBAS1BC,EAGX,WACSzmO,GAGN,yBAHMA,UAGP,KANchnC,KAAOu1R,EAAc7nB,sBAS1BkoB,EAGX,WACS5uP,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAcM,eAW1BC,EAGX,WACS9uP,GACN,yBADMA,UACP,KAJchnC,KAAOu1R,EAAcQ,yBAO1BjoB,EAGX,WACS9mO,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAcS,sBAU1BC,EAGX,WACSjvP,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAcW,YAU1BC,EAGX,WACSnvP,GACN,yBADMA,UACP,KAJchnC,KAAOu1R,EAAca,sBAO1BC,EAGX,WACSrvP,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAce,mBAU1BC,EAGX,WACSvvP,GAMN,yBANMA,UAMP,KATchnC,KAAOu1R,EAAciB,mBAY1BC,EAGX,WACSzvP,GAKN,yBALMA,UAKP,KARchnC,KAAOu1R,EAAcmB,oBAW1BC,EAGX,WACS3vP,GAIN,yBAJMA,UAIP,KAPchnC,KAAOu1R,EAAcqB,gBAU1BC,EAGX,WACWv1L,GACR,yBADQA,MACT,KAJcthG,KAAOu1R,EAAcuB,kBAO1BC,EAGX,WACW/vP,GAGR,yBAHQA,UAGT,KANchnC,KAAOu1R,EAAcyB,4BAS1BC,EAGX,WACSjwP,GAGN,yBAHMA,UAGP,KANchnC,KAAOu1R,EAAc2B,sB,6BC5MxB,SAASh1K,EAAgBj8G,GAItC,OAHAi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GACzF,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAEvCi8G,EAAgBj8G,GAJzB,mC,qKCQakxR,EAAwB,uBAgDtBC,IArC4B,SAACC,GAAD,OAA8B,SAAC1qE,GACxE,IACEm0C,EACEu2B,EADFv2B,SAgCF,OAAOniJ,mBAViB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpE0kP,cAAeC,4BAAkBz2B,IADUluN,CAE1C9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,cAIGk0E,EA7BkF,SAAA30E,GACvF,IAAQS,EAAqCT,EAArCS,SAAU6sP,EAA2BttP,EAA3BstP,cAAkBlzQ,EAApC,YAA6C4lB,EAA7C,GACQsO,EAASsF,cAATtF,KAcR,OAZArS,qBAAU,WAMR,OALAqS,EAAKG,GAAG,mBAAmB,SAAAM,GACzBtO,EAASu/B,YAAO82L,EAAUq2B,EAAuBtpQ,KAAK+xB,QACtDjH,YAAW,kBAAMlO,EAASu/B,YAAO82L,EAAUq2B,EAAuB,OAAM,QAGnE,WACL7+O,EAAKM,IAAI,kBAAmB,MAC5BnO,EAASu/B,YAAO82L,EAAUq2B,EAAuB,QAElD,CAACG,IAEG,cAAC3qE,EAAD,eAAoBvoM,U,6BCtC/B,IAAIqiM,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,uDACD,WAEJ3K,EAAQywH,QAAUq4I,G,cCjBlB,SAASn6N,IAgBP,OAfA5uC,EAAOC,QAAU2uC,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GACrD,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAASvpB,UAAUV,GAEvB,IAAK,IAAIsB,KAAO2oB,EACV7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAC/C0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAK3B,OAAO0oB,GAGT9xB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,EACjE5yK,EAAS7hC,MAAMjI,KAAM0D,WAG9BxI,EAAOC,QAAU2uC,EACjB5uC,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,0JCJxE,SAASg7E,EAAWC,EAAWC,GAC7B,IAAIlgG,EAAUh5I,oBAAS,WACrB,MAAO,CACLk5O,OAAQA,EACRhkR,OAAQ+jR,QAET,GACCE,EAAa3sP,kBAAO,GACpB4sP,EAAY5sP,iBAAOwsJ,GAEnB30L,EADW80R,EAAW/vP,SAAWzqC,QAAQu6R,GAAUE,EAAUhwP,QAAQ8vP,QAvB3E,SAAwBG,EAAWC,GACjC,GAAID,EAAUl2R,SAAWm2R,EAAWn2R,OAClC,OAAO,EAGT,IAAK,IAAImB,EAAI,EAAGA,EAAI+0R,EAAUl2R,OAAQmB,IACpC,GAAI+0R,EAAU/0R,KAAOg1R,EAAWh1R,GAC9B,OAAO,EAIX,OAAO,EAY4Ei1R,CAAeL,EAAQE,EAAUhwP,QAAQ8vP,SACrGE,EAAUhwP,QAAU,CACzC8vP,OAAQA,EACRhkR,OAAQ+jR,KAMV,OAJAxxP,qBAAU,WACR0xP,EAAW/vP,SAAU,EACrBgwP,EAAUhwP,QAAU/kC,IACnB,CAACA,IACGA,EAAM6Q,OAOf,IAAI4yB,EAAUkxP,EACVxuK,EANJ,SAAwBtkF,EAAUgzP,GAChC,OAAOF,GAAW,WAChB,OAAO9yP,IACNgzP,I,qCCtCL,SAASM,EAAgBnsQ,EAAG3jB,GAC1B,OAAO8vR,EAAkB,IAAyB,IAAuBp2Q,OAAS,SAAUiK,EAAG3jB,GAC7F,OAAO2jB,EAAE7tB,UAAYkK,EAAG2jB,GACvBmsQ,EAAgBnsQ,EAAG3jB,GCFxB,SAASuoQ,EAAe5kP,EAAG5lB,GACzB4lB,EAAE5tB,UAAY,IAAegI,EAAEhI,WAAY4tB,EAAE5tB,UAAUG,YAAcytB,EAAG,EAAeA,EAAG5lB,G,sBCF5F,SAAS2jC,IACP,OAAOA,EAAW,IAAiB,IAAehoB,OAAS,SAAU1b,GACnE,IAAK,IAAIgC,EAAI,EAAGA,EAAI1E,UAAU7B,OAAQuG,IAAK,CACzC,IAAI2jB,EAAIroB,UAAU0E,GAClB,IAAK,IAAI+uE,KAAKprD,GAAG,IAAKxqB,eAAeP,KAAK+qB,EAAGorD,KAAO/wE,EAAE+wE,GAAKprD,EAAEorD,IAE/D,OAAO/wE,GACN0jC,EAAS7hC,MAAM,KAAMvE,W,4BCNtBy0R,EAAU,SAAiB9xP,GAC7B,IAAIiuF,EAAMjuF,EAAKiuF,IACX95G,EAAQ6rB,EAAK7rB,MACb+5G,EAASluF,EAAKkuF,OACdh6G,EAAO8rB,EAAK9rB,KAiBhB,MAdW,CACT+5G,IAAKA,EACL95G,MAAOA,EACP+5G,OAAQA,EACRh6G,KAAMA,EACN+gE,MAPU9gE,EAAQD,EAQlBg3G,OAPWgD,EAASD,EAQpBz8G,EAAG0C,EACHixB,EAAG8oF,EACH8jK,OAAQ,CACNvgR,GAAI2C,EAAQD,GAAQ,EACpBixB,GAAI+oF,EAASD,GAAO,KAKtB+jK,EAAS,SAAgBrrQ,EAAQsrQ,GACnC,MAAO,CACLhkK,IAAKtnG,EAAOsnG,IAAMgkK,EAAShkK,IAC3B/5G,KAAMyS,EAAOzS,KAAO+9Q,EAAS/9Q,KAC7Bg6G,OAAQvnG,EAAOunG,OAAS+jK,EAAS/jK,OACjC/5G,MAAOwS,EAAOxS,MAAQ89Q,EAAS99Q,QAG/B+9Q,EAAS,SAAgBvrQ,EAAQwrQ,GACnC,MAAO,CACLlkK,IAAKtnG,EAAOsnG,IAAMkkK,EAASlkK,IAC3B/5G,KAAMyS,EAAOzS,KAAOi+Q,EAASj+Q,KAC7Bg6G,OAAQvnG,EAAOunG,OAASikK,EAASjkK,OACjC/5G,MAAOwS,EAAOxS,MAAQg+Q,EAASh+Q,QAa/Bi+Q,EAAY,CACdnkK,IAAK,EACL95G,MAAO,EACP+5G,OAAQ,EACRh6G,KAAM,GAEJm+Q,EAAY,SAAmB/vP,GACjC,IAAIgwP,EAAYhwP,EAAMgwP,UAClBC,EAAejwP,EAAM4yC,OACrBA,OAA0B,IAAjBq9M,EAA0BH,EAAYG,EAC/CC,EAAelwP,EAAMkyF,OACrBA,OAA0B,IAAjBg+J,EAA0BJ,EAAYI,EAC/CC,EAAgBnwP,EAAMmzC,QACtBA,OAA4B,IAAlBg9M,EAA2BL,EAAYK,EACjDC,EAAYZ,EAAQE,EAAOM,EAAWp9M,IACtCy9M,EAAab,EAAQI,EAAOI,EAAW99J,IACvCo+J,EAAad,EAAQI,EAAOS,EAAYl9M,IAC5C,MAAO,CACLi9M,UAAWA,EACXJ,UAAWR,EAAQQ,GACnBK,WAAYA,EACZC,WAAYA,EACZ19M,OAAQA,EACRs/C,OAAQA,EACR/+C,QAASA,IAITt/B,EAAQ,SAAe08O,GACzB,IAAIx9R,EAAQw9R,EAAIppR,MAAM,GAAI,GAG1B,GAAe,OAFFopR,EAAIppR,OAAO,GAGtB,OAAO,EAGT,IAAI8D,EAASjS,OAAOjG,GAEpB,OADE0gD,MAAMxoC,IAAgJ3F,aAAU,GAC3J2F,GAUL9F,EAAS,SAAgBqrR,EAAUjvN,GACrC,IA1DyBl9C,EAAQosQ,EA0D7BT,EAAYQ,EAASR,UACrB99J,EAASs+J,EAASt+J,OAClBt/C,EAAS49M,EAAS59M,OAClBO,EAAUq9M,EAASr9M,QACnBu9M,GA9D6BD,EA8DFlvN,EA7DxB,CACLoqD,KAFuBtnG,EA8DL2rQ,GA5DNrkK,IAAM8kK,EAAQ5tP,EAC1BjxB,KAAMyS,EAAOzS,KAAO6+Q,EAAQvhR,EAC5B08G,OAAQvnG,EAAOunG,OAAS6kK,EAAQ5tP,EAChChxB,MAAOwS,EAAOxS,MAAQ4+Q,EAAQvhR,IA0DhC,OAAO6gR,EAAU,CACfC,UAAWU,EACXx+J,OAAQA,EACRt/C,OAAQA,EACRO,QAASA,KAGTw9M,EAAa,SAAoBH,EAAUI,GAK7C,YAJe,IAAXA,IACFA,EArBK,CACL1hR,EAAG6W,OAAO8qQ,YACVhuP,EAAG9c,OAAO+qQ,cAsBL3rR,EAAOqrR,EAAUI,IAEtBG,EAAe,SAAsBf,EAAW/8M,GAClD,IAAIL,EAAS,CACX+4C,IAAK93E,EAAMo/B,EAAO0gC,WAClB9hG,MAAOgiC,EAAMo/B,EAAO4lC,aACpB+S,OAAQ/3E,EAAMo/B,EAAOy3C,cACrB94G,KAAMiiC,EAAMo/B,EAAOssC,aAEjBpsC,EAAU,CACZw4C,IAAK93E,EAAMo/B,EAAOq2C,YAClBz3G,MAAOgiC,EAAMo/B,EAAOi4C,cACpBU,OAAQ/3E,EAAMo/B,EAAOs2C,eACrB33G,KAAMiiC,EAAMo/B,EAAO8sD,cAEjB7N,EAAS,CACXvG,IAAK93E,EAAMo/B,EAAO+9M,gBAClBn/Q,MAAOgiC,EAAMo/B,EAAOg+M,kBACpBrlK,OAAQ/3E,EAAMo/B,EAAOi+M,mBACrBt/Q,KAAMiiC,EAAMo/B,EAAOk+M,kBAErB,OAAOpB,EAAU,CACfC,UAAWA,EACXp9M,OAAQA,EACRO,QAASA,EACT++C,OAAQA,KAGRk/J,EAAS,SAAgBC,GAC3B,IAAIrB,EAAYqB,EAAGC,wBACfr+M,EAASltD,OAAOwrQ,iBAAiBF,GACrC,OAAON,EAAaf,EAAW/8M,I,8CCnHlBu+M,EAjCD,SAAiBt3R,GAC7B,IAAIkvC,EAAW,GACXqoP,EAAU,KAEVC,EAAY,WACd,IAAK,IAAItvQ,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB8mB,EAAW/mB,EAEPovQ,IAIJA,EAAUE,uBAAsB,WAC9BF,EAAU,KACVv3R,EAAGoF,WAAM,EAAQ8pC,QAarB,OATAsoP,EAAUxuQ,OAAS,WACZuuQ,IAILG,qBAAqBH,GACrBA,EAAU,OAGLC,G,+DCET,SAASpvL,EAAI/qG,EAAMmxC,IAaL45D,EAAInpF,KAAK,KAAM,QACjBmpF,EAAInpF,KAAK,KAAM,SAE3B,SAAS2sI,KAMT,SAAS+rI,EAAWR,EAAIS,EAAUC,GAChC,IAAIC,EAAaF,EAASzxR,KAAI,SAAU4mK,GACtC,IANgBgrH,EAAQC,EAMpB7uP,GANY4uP,EAMSF,EANDG,EAMgBjrH,EAAQ5jI,QAL3ClC,EAAS,GAAI8wP,EAAQC,IAO1B,OADAb,EAAGhxL,iBAAiB4mE,EAAQkrH,UAAWlrH,EAAQ/sK,GAAImpC,GAC5C,WACLguP,EAAG/wL,oBAAoB2mE,EAAQkrH,UAAWlrH,EAAQ/sK,GAAImpC,OAG1D,OAAO,WACL2uP,EAAWjuR,SAAQ,SAAUquR,GAC3BA,QAKN,IACIp9O,EAAS,mBACb,SAASq9O,EAAa3pP,GACpBrxC,KAAKqxC,QAAUA,EAOjB,SAASpjC,EAAUC,EAAWmjC,GAC5B,IAAInjC,EAKF,MAAM,IAAI8sR,EAAar9O,GAV3Bq9O,EAAa78R,UAAU8C,SAAW,WAChC,OAAOjB,KAAKqxC,SAed,IAAI4pP,EAAgB,SAAU9qB,GAG5B,SAAS8qB,IAGP,IAFA,IAAItjP,EAEK5sB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAsCzB,OAnCA0sB,EAAQw4N,EAAiBnvQ,KAAKiH,MAAMkoQ,EAAkB,CAACnwQ,MAAMsL,OAAO0f,KAAUhrB,MACxEk7R,UAAY,KAClBvjP,EAAMojP,OAAStsI,EAEf92G,EAAMwjP,cAAgB,SAAUh0J,GAC9B,IAAI+zJ,EAAYvjP,EAAMyjP,eAElBF,EAAUG,cACZH,EAAUI,WAIFn0J,EAAMh5H,iBAEG6sR,GACjB7zJ,EAAM/F,kBAQVzpF,EAAMyjP,aAAe,WACnB,IAAKzjP,EAAMujP,UACT,MAAM,IAAItzR,MAAM,mDAGlB,OAAO+vC,EAAMujP,WAGfvjP,EAAM4jP,aAAe,SAAUL,GAC7BvjP,EAAMujP,UAAYA,GAGbvjP,EA5CTg5N,EAAesqB,EAAe9qB,GA+C9B,IAAI1qO,EAASw1P,EAAc98R,UA8B3B,OA5BAsnC,EAAOorO,kBAAoB,WACzB7wQ,KAAK+6R,OAASP,EAAW9rQ,OAAQ,CAAC,CAChCosQ,UAAW,QACXj4R,GAAI7C,KAAKm7R,kBAIb11P,EAAOyrO,qBAAuB,WAC5BlxQ,KAAK+6R,UAGPt1P,EAAO+1P,kBAAoB,SAA2BpqP,GACpD,KAAIA,aAAe4pP,GASnB,MAAM5pP,EAJJpxC,KAAK4iH,SAAS,KAOlBn9E,EAAO28F,OAAS,WACd,OAAOpiI,KAAKkqC,MAAM5D,SAAStmC,KAAKu7R,eAG3BN,EA9EW,CA+ElBx2P,IAAMkV,WAIJsjE,EAAW,SAAkB9gH,GAC/B,OAAOA,EAAQ,GAObs/R,EAAe,SAAsBxuQ,EAAQ6gL,GAC/C,IAAI4tF,EAAezuQ,EAAOm/P,cAAgBt+E,EAAYs+E,YAClDuP,EAAgB1+K,EAAShwF,EAAO9wB,OAChCy/R,EAAc3+K,EAAS6wF,EAAY3xM,OAEvC,OAAIu/R,EACK,iDAAmDC,EAAgB,uBAAyBC,EAAc,SAG5G,+CAAiDD,EAAgB,iBAAmB1uQ,EAAOm/P,YAAc,iBAAmBt+E,EAAYs+E,YAAc,qBAAuBwP,EAAc,QAGhMC,EAAc,SAAqB56P,EAAIhU,EAAQ6uQ,GAGjD,OAFiB7uQ,EAAOm/P,cAAgB0P,EAAQ1P,YAGvC,oBAAsBnrP,EAAK,kCAAoC66P,EAAQ/P,YAGzE,oBAAsB9qP,EAAK,mBAAqBhU,EAAOm/P,YAAc,kCAAoC0P,EAAQ/P,YAAc,mBAAqB+P,EAAQ1P,YAAc,UAmB/K2P,EAAkB,SAAyB9uQ,GAC7C,MAAO,4DAA8DgwF,EAAShwF,EAAO9wB,OAAS,MAsB5F6/R,EAvEkB,oGAuElBA,GAjEc,SAAqBj8Q,GACrC,MAAO,2CAA6Ck9F,EAASl9F,EAAMkN,OAAO9wB,OAAS,+EAgEjF6/R,GAvCe,SAAsB1rR,GACvC,IAAIm5C,EAAWn5C,EAAOw9L,YAEtB,GAAIrkJ,EACF,OAAOgyO,EAAanrR,EAAO2c,OAAQw8B,GAGrC,IAAIqyO,EAAUxrR,EAAOwrR,QAErB,OAAIA,EACKD,EAAYvrR,EAAOy7Q,YAAaz7Q,EAAO2c,OAAQ6uQ,GAGjD,kDA0BLE,GAnBY,SAAmBpoR,GACjC,GAAsB,WAAlBA,EAAO23G,OACT,MAAO,sCAAwCwwK,EAAgBnoR,EAAOqZ,QAAU,SAGlF,IAAIw8B,EAAW71C,EAAOk6L,YAClBguF,EAAUloR,EAAOkoR,QAErB,OAAIryO,EACK,6CAA+CgyO,EAAa7nR,EAAOqZ,OAAQw8B,GAAY,SAG5FqyO,EACK,6CAA+CD,EAAYjoR,EAAOm4Q,YAAan4Q,EAAOqZ,OAAQ6uQ,GAAW,SAG3G,oEAAsEC,EAAgBnoR,EAAOqZ,QAAU,QAU5GnS,GAAS,CACXjD,EAAG,EACH2zB,EAAG,GAED7sB,GAAM,SAAas9Q,EAAQC,GAC7B,MAAO,CACLrkR,EAAGokR,EAAOpkR,EAAIqkR,EAAOrkR,EACrB2zB,EAAGywP,EAAOzwP,EAAI0wP,EAAO1wP,IAGrBjsB,GAAW,SAAkB08Q,EAAQC,GACvC,MAAO,CACLrkR,EAAGokR,EAAOpkR,EAAIqkR,EAAOrkR,EACrB2zB,EAAGywP,EAAOzwP,EAAI0wP,EAAO1wP,IAGrBkvJ,GAAU,SAAiBuhG,EAAQC,GACrC,OAAOD,EAAOpkR,IAAMqkR,EAAOrkR,GAAKokR,EAAOzwP,IAAM0wP,EAAO1wP,GAElD0mJ,GAAS,SAAgBiqG,GAC3B,MAAO,CACLtkR,EAAe,IAAZskR,EAAMtkR,GAAWskR,EAAMtkR,EAAI,EAC9B2zB,EAAe,IAAZ2wP,EAAM3wP,GAAW2wP,EAAM3wP,EAAI,IAG9B4wP,GAAQ,SAAeC,EAAM3gS,EAAO4gS,GACtC,IAAIj2P,EAMJ,YAJmB,IAAfi2P,IACFA,EAAa,IAGRj2P,EAAO,IAASg2P,GAAQ3gS,EAAO2qC,EAAc,MAATg2P,EAAe,IAAM,KAAOC,EAAYj2P,GAEjFk2P,GAAW,SAAkBN,EAAQC,GACvC,OAAOn/R,KAAK8oK,KAAK9oK,KAAKy1O,IAAI0pD,EAAOrkR,EAAIokR,EAAOpkR,EAAG,GAAK9a,KAAKy1O,IAAI0pD,EAAO1wP,EAAIywP,EAAOzwP,EAAG,KAEhFgxP,GAAU,SAAiBxvQ,EAAQiuP,GACrC,OAAOl+Q,KAAKE,IAAIgL,MAAMlL,KAAMk+Q,EAAOjyQ,KAAI,SAAUmzR,GAC/C,OAAOI,GAASvvQ,EAAQmvQ,QAGxBl0R,GAAQ,SAAepF,GACzB,OAAO,SAAUs5R,GACf,MAAO,CACLtkR,EAAGhV,EAAGs5R,EAAMtkR,GACZ2zB,EAAG3oC,EAAGs5R,EAAM3wP,MAoBdixP,GAAmB,SAA0BniN,EAAS6hN,GACxD,MAAO,CACL7nK,IAAKh6C,EAAQg6C,IAAM6nK,EAAM3wP,EACzBjxB,KAAM+/D,EAAQ//D,KAAO4hR,EAAMtkR,EAC3B08G,OAAQj6C,EAAQi6C,OAAS4nK,EAAM3wP,EAC/BhxB,MAAO8/D,EAAQ9/D,MAAQ2hR,EAAMtkR,IAG7B6kR,GAAa,SAAoBpiN,GACnC,MAAO,CAAC,CACNziE,EAAGyiE,EAAQ//D,KACXixB,EAAG8uC,EAAQg6C,KACV,CACDz8G,EAAGyiE,EAAQ9/D,MACXgxB,EAAG8uC,EAAQg6C,KACV,CACDz8G,EAAGyiE,EAAQ//D,KACXixB,EAAG8uC,EAAQi6C,QACV,CACD18G,EAAGyiE,EAAQ9/D,MACXgxB,EAAG8uC,EAAQi6C,UA4BXilJ,GAAO,SAAcxsP,EAAQ2vQ,GAC/B,OAAIA,GAASA,EAAMC,kBAhEF,SAAUD,EAAOE,GAClC,IAAIjpR,EAASukR,EAAQ,CACnB7jK,IAAKv3H,KAAKC,IAAI6/R,EAAQvoK,IAAKqoK,EAAMroK,KACjC95G,MAAOzd,KAAKE,IAAI4/R,EAAQriR,MAAOmiR,EAAMniR,OACrC+5G,OAAQx3H,KAAKE,IAAI4/R,EAAQtoK,OAAQooK,EAAMpoK,QACvCh6G,KAAMxd,KAAKC,IAAI6/R,EAAQtiR,KAAMoiR,EAAMpiR,QAGrC,OAAI3G,EAAO0nE,OAAS,GAAK1nE,EAAO29G,QAAU,EACjC,KAGF39G,EAqDEkpR,CAAYH,EAAMI,cAAe/vQ,GAGnCmrQ,EAAQnrQ,IAGbgwQ,GAAc,SAAU32P,GAC1B,IAAIulO,EAAOvlO,EAAKulO,KACZqxB,EAAkB52P,EAAK42P,gBACvBC,EAAO72P,EAAK62P,KACZP,EAAQt2P,EAAKs2P,MACbQ,EA/BO,SAAgBnwQ,EAAQ2vQ,GACnC,OAAKA,EAIEF,GAAiBzvQ,EAAQ2vQ,EAAMpD,OAAOnkD,KAAKgoD,cAHzCpwQ,EA6BMusQ,CAAO3tB,EAAKmtB,UAAW4D,GAClCU,EAxBS,SAAkBrwQ,EAAQkwQ,EAAMD,GAE3C,IAAIn2E,EADN,OAAIm2E,GAAmBA,EAAgBK,YAG9BxzP,EAAS,GAAI9c,IAAS85L,EAAY,IAAco2E,EAAK1gS,KAAOwwB,EAAOkwQ,EAAK1gS,KAAOygS,EAAgBK,YAAYJ,EAAKb,MAAOv1E,IAGzH95L,EAiBSuwQ,CAASJ,EAAUD,EAAMD,GAEzC,MAAO,CACLrxB,KAAMA,EACNqxB,gBAAiBA,EACjBha,OAJYzJ,GAAK6jB,EAAWV,KAQ5Ba,GAAmB,SAAUC,EAAWC,GACzCD,EAAUd,OAAmE1uR,GAAU,GACxF,IAAI0vR,EAAaF,EAAUd,MACvBiB,EAAar+Q,GAASm+Q,EAAWC,EAAWpE,OAAO7hG,SACnDmmG,EAAqB3rG,GAAO0rG,GAE5BjB,EAAQ7yP,EAAS,GAAI6zP,EAAY,CACnCpE,OAAQ,CACN7hG,QAASimG,EAAWpE,OAAO7hG,QAC3B5vJ,QAAS41P,EACTtoD,KAAM,CACJ15O,MAAOkiS,EACPR,aAAcS,GAEhB7gS,IAAK2gS,EAAWpE,OAAOv8R,OAgB3B,OALa8sC,EAAS,GAAI2zP,EAAW,CACnCd,MAAOA,EACPE,QATYG,GAAW,CACvBpxB,KAAM6xB,EAAUZ,QAAQjxB,KACxBqxB,gBAAiBQ,EAAUZ,QAAQI,gBACnCC,KAAMO,EAAUP,KAChBP,MAAOA,OAWX,SAASxxR,GAAOnC,GACd,OAAO80R,IAAe90R,GAExB,SAASgd,GAAUzN,EAAMnO,GACvB,GAAImO,EAAKyN,UACP,OAAOzN,EAAKyN,UAAU5b,GAGxB,IAAK,IAAIpH,EAAI,EAAGA,EAAIuV,EAAK1W,OAAQmB,IAC/B,GAAIoH,EAAUmO,EAAKvV,IACjB,OAAOA,EAIX,OAAQ,EAEV,SAAS2e,GAAKpJ,EAAMnO,GAClB,GAAImO,EAAKoJ,KACP,OAAOpJ,EAAKoJ,KAAKvX,GAGnB,IAAIjO,EAAQ6pB,GAAUzN,EAAMnO,GAE5B,OAAe,IAAXjO,EACKoc,EAAKpc,QADd,EAMF,SAASyG,GAAQ2V,GACf,OAAO9W,MAAMtD,UAAU2R,MAAM9O,KAAKuX,GAGpC,IAAIwlR,GAAiBC,aAAW,SAAUC,GACxC,OAAOA,EAAWtyR,QAAO,SAAU44K,EAAUz8I,GAE3C,OADAy8I,EAASz8I,EAAQ6wE,WAAW13E,IAAM6G,EAC3By8I,IACN,OAED25G,GAAiBF,aAAW,SAAUG,GACxC,OAAOA,EAAWxyR,QAAO,SAAU44K,EAAUz8I,GAE3C,OADAy8I,EAASz8I,EAAQ6wE,WAAW13E,IAAM6G,EAC3By8I,IACN,OAED65G,GAAkBJ,aAAW,SAAUC,GACzC,OAAO9yR,GAAO8yR,MAEZI,GAAkBL,aAAW,SAAUG,GACzC,OAAOhzR,GAAOgzR,MAGZG,GAA+BN,aAAW,SAAU5R,EAAa+R,GAMnE,OALaE,GAAgBF,GAAY5yR,QAAO,SAAUgzR,GACxD,OAAOnS,IAAgBmS,EAAU5lL,WAAWyzK,eAC3C3/Q,MAAK,SAAU9G,EAAGC,GACnB,OAAOD,EAAEgzG,WAAWx8G,MAAQyJ,EAAE+yG,WAAWx8G,YAK7C,SAASqiS,GAAkBC,GACzB,OAAIA,EAAOnrG,IAAyB,YAAnBmrG,EAAOnrG,GAAGpzL,KAClBu+R,EAAOnrG,GAAGwa,YAGZ,KAET,SAAS4wF,GAAcD,GACrB,OAAIA,EAAOnrG,IAAyB,YAAnBmrG,EAAOnrG,GAAGpzL,KAClBu+R,EAAOnrG,GAAGwoG,QAGZ,KAGT,IAAI6C,GAA0BX,aAAW,SAAU9uR,EAAQqJ,GACzD,OAAOA,EAAKhN,QAAO,SAAUquE,GAC3B,OAAOA,EAAK++B,WAAW13E,KAAO/xB,EAAOypG,WAAW13E,SAkEhD29P,GAAY,SAAUL,EAAWzwF,GACnC,OAAOywF,EAAU5lL,WAAWyzK,cAAgBt+E,EAAYn1F,WAAW13E,IAGjE49P,GAAgB,CAClB1C,MAAOrhR,GACPpf,MAAO,GAELojS,GAAc,CAChBC,UAAW,GACXC,QAAS,GACTv4F,IAAK,IAEHw4F,GAAW,CACbC,UAAWJ,GACXK,YAAaN,GACbvrG,GAAI,MAGF8rG,GAAY,SAAUC,EAAYC,GACpC,OAAO,SAAU5jS,GACf,OAAO2jS,GAAc3jS,GAASA,GAAS4jS,IAIvCC,GAAkC,SAAU5C,GAC9C,IAAI6C,EAAmBJ,GAASzC,EAAMroK,IAAKqoK,EAAMpoK,QAC7CkrK,EAAqBL,GAASzC,EAAMpiR,KAAMoiR,EAAMniR,OACpD,OAAO,SAAUqiR,GAGf,GAFkB2C,EAAiB3C,EAAQvoK,MAAQkrK,EAAiB3C,EAAQtoK,SAAWkrK,EAAmB5C,EAAQtiR,OAASklR,EAAmB5C,EAAQriR,OAGpJ,OAAO,EAGT,IAAIklR,EAA+BF,EAAiB3C,EAAQvoK,MAAQkrK,EAAiB3C,EAAQtoK,QACzForK,EAAiCF,EAAmB5C,EAAQtiR,OAASklR,EAAmB5C,EAAQriR,OAGpG,GAF2BklR,GAAgCC,EAGzD,OAAO,EAGT,IAAIC,EAAqB/C,EAAQvoK,IAAMqoK,EAAMroK,KAAOuoK,EAAQtoK,OAASooK,EAAMpoK,OACvEsrK,EAAuBhD,EAAQtiR,KAAOoiR,EAAMpiR,MAAQsiR,EAAQriR,MAAQmiR,EAAMniR,MAG9E,SAF8BolR,IAAsBC,KAMtBD,GAAsBD,GAAkCE,GAAwBH,KAK9GI,GAAgC,SAAUnD,GAC5C,IAAI6C,EAAmBJ,GAASzC,EAAMroK,IAAKqoK,EAAMpoK,QAC7CkrK,EAAqBL,GAASzC,EAAMpiR,KAAMoiR,EAAMniR,OACpD,OAAO,SAAUqiR,GAEf,OADkB2C,EAAiB3C,EAAQvoK,MAAQkrK,EAAiB3C,EAAQtoK,SAAWkrK,EAAmB5C,EAAQtiR,OAASklR,EAAmB5C,EAAQriR,SAKtJulR,GAAW,CACbrmN,UAAW,WACX2iN,KAAM,IACN2D,cAAe,IACfjgR,MAAO,MACPvjB,IAAK,SACLT,KAAM,SACNkkS,eAAgB,OAChBC,aAAc,QACdC,cAAe,SAEbC,GAAa,CACf1mN,UAAW,aACX2iN,KAAM,IACN2D,cAAe,IACfjgR,MAAO,OACPvjB,IAAK,QACLT,KAAM,QACNkkS,eAAgB,MAChBC,aAAc,SACdC,cAAe,UAkCbE,GAAY,SAAmBh6P,GACjC,IAAIi6P,EAAgBj6P,EAAKrZ,OACrB8gL,EAAcznK,EAAKynK,YACnByyF,EAAWl6P,EAAKk6P,SAChBC,EAA4Bn6P,EAAKm6P,0BACjCC,EAA0Bp6P,EAAKo6P,wBAC/BC,EAAkBF,EAvBI,SAA+BxzQ,EAAQ8gL,GACjE,IAAIsvF,EAAetvF,EAAY6uF,MAAQ7uF,EAAY6uF,MAAMpD,OAAOnkD,KAAKgoD,aAAetiR,GACpF,OAAO2hR,GAAiBzvQ,EAAQowQ,GAqBkBuD,CAAsBL,EAAexyF,GAAewyF,EACtG,OAnByB,SAA8BtzQ,EAAQ8gL,EAAa2yF,GAC5E,QAAK3yF,EAAY+uF,QAAQ5Z,QAIlBwd,EAAwB3yF,EAAY+uF,QAAQ5Z,OAA5Cwd,CAAoDzzQ,GAcpD4zQ,CAAqBF,EAAiB5yF,EAAa2yF,IAXlC,SAA6BzzQ,EAAQuzQ,EAAUE,GACvE,OAAOA,EAAwBF,EAAxBE,CAAkCzzQ,GAU6C6zQ,CAAoBH,EAAiBH,EAAUE,IAGnIK,GAAqB,SAA4B91Q,GACnD,OAAOq1Q,GAAUv2P,EAAS,GAAI9e,EAAM,CAClCy1Q,wBAAyBlB,OAGzBwB,GAAmB,SAA0B/1Q,GAC/C,OAAOq1Q,GAAUv2P,EAAS,GAAI9e,EAAM,CAClCy1Q,wBAAyBX,OAwC7B,SAASkB,GAAsB36P,GAC7B,IAAI46P,EAAgB56P,EAAK46P,cACrBnzF,EAAcznK,EAAKynK,YACnBqxF,EAAc94P,EAAK84P,YACnBoB,EAAWl6P,EAAKk6P,SAChBW,EAAqB76P,EAAK66P,mBAC1Bl9Q,EAAOqiB,EAAKriB,KAChB,OAAOi9Q,EAAct1R,QAAO,SAAiB+W,EAAQ67Q,GACnD,IAAIvxQ,EAnBR,SAAmBuxQ,EAAWY,GAC5B,IAAIpG,EAAYwF,EAAU3yB,KAAKmtB,UAC3BT,EAAW,CACbhkK,IAAK6qK,EAAYhD,MAAM3wP,EACvBhxB,MAAO,EACP+5G,OAAQ,EACRh6G,KAAM4kR,EAAYhD,MAAMtkR,GAE1B,OAAOsgR,EAAQE,EAAOU,EAAWT,IAWlB6I,CAAU5C,EAAWY,GAC9Bl+P,EAAKs9P,EAAU5lL,WAAW13E,GAS9B,GARAve,EAAO+jL,IAAIr6L,KAAK60B,IACA6/P,GAAmB,CACjC9zQ,OAAQA,EACR8gL,YAAaA,EACbyyF,SAAUA,EACVC,2BAA2B,IAK3B,OADA99Q,EAAOq8Q,UAAUR,EAAU5lL,WAAW13E,KAAM,EACrCve,EAGT,IAAI0+Q,EAtDe,SAA0BngQ,EAAIjd,EAAMk9Q,GACzD,GAAkC,mBAAvBA,EACT,OAAOA,EAGT,IAAKl9Q,EACH,OAAO,EAGT,IAAI+6Q,EAAY/6Q,EAAK+6Q,UACjBC,EAAUh7Q,EAAKg7Q,QAEnB,GAAID,EAAU99P,GACZ,OAAO,EAGT,IAAIsjJ,EAAWy6G,EAAQ/9P,GACvB,OAAOsjJ,GAAWA,EAAS68G,cAqCLC,CAAiBpgQ,EAAIjd,EAAMk9Q,GAC3C9D,EAAe,CACjBrR,YAAa9qP,EACbmgQ,cAAeA,GAGjB,OADA1+Q,EAAOs8Q,QAAQ/9P,GAAMm8P,EACd16Q,IACN,CACD+jL,IAAK,GACLu4F,QAAS,GACTD,UAAW,KAaf,SAASuC,GAAQj7P,GACf,IAAIk7P,EAAoBl7P,EAAKk7P,kBACzBC,EAAan7P,EAAKm7P,WAClBrC,EAAc94P,EAAK84P,YACnBrxF,EAAcznK,EAAKynK,YACnB2zF,EAdN,SAA4BtD,EAAYnyP,GACtC,IAAKmyP,EAAWt8R,OACd,OAAO,EAGT,IAAI6/R,EAAkBvD,EAAWA,EAAWt8R,OAAS,GAAG82G,WAAWx8G,MACnE,OAAO6vC,EAAQw1P,WAAaE,EAAkBA,EAAkB,EAQjDC,CAAmBJ,EAAmB,CACnDC,WAAYA,IAEd,MAAO,CACLtC,UAAWJ,GACXK,YAAaA,EACb7rG,GAAI,CACFpzL,KAAM,UACN4tM,YAAa,CACXs+E,YAAat+E,EAAYn1F,WAAW13E,GACpC9kC,MAAOslS,KAMf,SAASG,GAAuBj5P,GAC9B,IAAI41P,EAAY51P,EAAM41P,UAClBgD,EAAoB54P,EAAM44P,kBAC1BzzF,EAAcnlK,EAAMmlK,YACpByyF,EAAW53P,EAAM43P,SACjBpB,EAAcx2P,EAAMw2P,YACpBn7Q,EAAO2kB,EAAM3kB,KACb7nB,EAAQwsC,EAAMxsC,MACd+kS,EAAqBv4P,EAAMu4P,mBAC3BM,EAAa5C,GAASL,EAAWzwF,GAErC,GAAa,MAAT3xM,EACF,OAAOmlS,GAAQ,CACbC,kBAAmBA,EACnBC,WAAYA,EACZrC,YAAaA,EACbrxF,YAAaA,IAIjB,IAAIv/J,EAAQ5sB,GAAK4/Q,GAAmB,SAAU3nN,GAC5C,OAAOA,EAAK++B,WAAWx8G,QAAUA,KAGnC,IAAKoyC,EACH,OAAO+yP,GAAQ,CACbC,kBAAmBA,EACnBC,WAAYA,EACZrC,YAAaA,EACbrxF,YAAaA,IAIjB,IAAI+zF,EAAkBlD,GAAwBJ,EAAWgD,GACrDO,EAAYP,EAAkB/gR,QAAQ+tB,GAU1C,MAAO,CACL2wP,UATc8B,GAAsB,CACpCC,cAFaY,EAAgB/xR,MAAMgyR,GAGnCh0F,YAAaA,EACbqxF,YAAaA,EACbn7Q,KAAMA,EACNu8Q,SAAUA,EAAS5D,MACnBuE,mBAAoBA,IAIpB/B,YAAaA,EACb7rG,GAAI,CACFpzL,KAAM,UACN4tM,YAAa,CACXs+E,YAAat+E,EAAYn1F,WAAW13E,GACpC9kC,MAAOA,KAMf,SAAS4lS,GAAsBhW,EAAaiW,GAC1C,OAAO3kS,QAAQ2kS,EAAcC,SAASlW,IAGxC,IA0DImW,GAAmB,SAAU77P,GAC/B,IAAI87P,EAAkB97P,EAAK87P,gBACvBzG,EAAer1P,EAAKq1P,aACpB6C,EAAYl4P,EAAKk4P,UACjBJ,EAAa93P,EAAK83P,WAClBrwF,EAAcznK,EAAKynK,YACnByzF,EAAoBl7P,EAAKk7P,kBACzBa,EAAiB/7P,EAAK+7P,eACtB7B,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cACrBK,EAAQD,EAAe9uG,GAG3B,GAFC+uG,GAAgIp0R,GAAU,GAExH,YAAfo0R,EAAMniS,KAAoB,CAC5B,IAAIoiS,EAzCW,SAAUj8P,GAC3B,IAAI87P,EAAkB97P,EAAK87P,gBACvBzG,EAAer1P,EAAKq1P,aACpB6F,EAAoBl7P,EAAKk7P,kBACzB93O,EAAWpjB,EAAKojB,SAEpB,IAAK83O,EAAkB1/R,OACrB,OAAO,KAGT,IAAI0gS,EAAe94O,EAASttD,MACxBqmS,EAAgBL,EAAkBI,EAAe,EAAIA,EAAe,EACpEE,EAAalB,EAAkB,GAAG5oL,WAAWx8G,MAC7C6vJ,EAAYu1I,EAAkBA,EAAkB1/R,OAAS,GAAG82G,WAAWx8G,MAG3E,OAAIqmS,EAAgBC,GAIhBD,GANa9G,EAAe1vI,EAAYA,EAAY,GAG/C,KAOFw2I,EAiBWE,CAAY,CAC1BP,gBAAiBA,EACjBzG,aAAcA,EACdjyO,SAAU44O,EAAMv0F,YAChByzF,kBAAmBA,IAGrB,OAAiB,MAAbe,EACK,KAGFV,GAAuB,CAC5BrD,UAAWA,EACXgD,kBAAmBA,EACnBzzF,YAAaA,EACbyyF,SAAUA,EACVv8Q,KAAMo+Q,EAAelD,UACrBC,YAAaiD,EAAejD,YAC5BhjS,MAAOmmS,IAIX,IAAIb,EA9Fa,SAAUp7P,GAC3B,IAAI87P,EAAkB97P,EAAK87P,gBACvBr0F,EAAcznK,EAAKynK,YACnBqwF,EAAa93P,EAAK83P,WAClBrC,EAAUz1P,EAAKy1P,QACfkG,EAAgB37P,EAAK27P,cAEzB,IAAKl0F,EAAY60F,iBACf,OAAO,KAGT,IAAIC,EAAY9G,EAAQ/P,YAEpB8W,EADc1E,EAAWyE,GACMjqL,WAAWx8G,MAG9C,OAFuC4lS,GAAsBa,EAAWZ,GAGlEG,EACKU,EAGFA,EAAmB,EAGxBV,EACKU,EAAmB,EAGrBA,EAkEQC,CAAY,CACzBX,gBAAiBA,EACjBr0F,YAAaA,EACboxF,UAAWkD,EAAelD,UAC1Bf,WAAYA,EACZrC,QAASuG,EAAMvG,QACfkG,cAAeA,IAGjB,OAAgB,MAAZP,EACK,KAGFG,GAAuB,CAC5BrD,UAAWA,EACXgD,kBAAmBA,EACnBzzF,YAAaA,EACbyyF,SAAUA,EACVv8Q,KAAMo+Q,EAAelD,UACrBC,YAAaiD,EAAejD,YAC5BhjS,MAAOslS,KAkBPsB,GAAiB,SAAU18P,GAC7B,IAAI27P,EAAgB37P,EAAK27P,cACrBvD,EAASp4P,EAAKo4P,OACdN,EAAa93P,EAAK83P,WAClBrC,EAAU4C,GAAcD,GAC3B3C,GAAqE7tR,GAAU,GAChF,IAAI+0R,EAAclH,EAAQ/P,YACtBqM,EAAS+F,EAAW6E,GAAap3B,KAAK+sB,UAAUP,OAChD6K,EAtB6B,SAAU58P,GAC3C,IAAI64P,EAAY74P,EAAK64P,UACjB8C,EAAgB37P,EAAK27P,cACrBgB,EAAc38P,EAAK28P,YACnB7D,EAAc94P,EAAK84P,YACnB+D,EAAc7lS,QAAQ6hS,EAAUF,QAAQgE,IAAgB9D,EAAUH,UAAUiE,IAEhF,OAAIjB,GAAsBiB,EAAahB,GAC9BkB,EAAcpoR,GAASo3K,GAAOitG,EAAYhD,OAG5C+G,EAAc/D,EAAYhD,MAAQrhR,GAWxBqoR,CAA4B,CAC3CjE,UAAWT,EAAOS,UAClB8C,cAAeA,EACfgB,YAAaA,EACb7D,YAAaV,EAAOU,cAEtB,OAAOxgR,GAAIy5Q,EAAQ6K,IAGjBG,GAAqC,SAA4ClG,EAAMmG,GACzF,OAAOA,EAAI9nN,OAAO2hN,EAAKn9Q,OAASsjR,EAAI1K,UAAUuE,EAAKnhS,MAAQ,GAOzDunS,GAA8B,SAAqCpG,EAAMlwQ,EAAQu2Q,GACnF,OAAOv2Q,EAAOkwQ,EAAK+C,gBAAkBsD,EAAShoN,OAAO2hN,EAAK+C,gBAAkBsD,EAAS5K,UAAUuE,EAAKiD,eAAiB,GAGnHqD,GAAU,SAAiBn9P,GAC7B,IAAI62P,EAAO72P,EAAK62P,KACZuG,EAAiBp9P,EAAKo9P,eACtBF,EAAWl9P,EAAKk9P,SACpB,OAAOnH,GAAMc,EAAKb,KAAMoH,EAAe1K,UAAUmE,EAAK1gS,KAAO4mS,GAAmClG,EAAMqG,GAAWD,GAA4BpG,EAAMuG,EAAe1K,UAAWwK,KAE3KG,GAAW,SAAkB/6P,GAC/B,IAAIu0P,EAAOv0P,EAAMu0P,KACbuG,EAAiB96P,EAAM86P,eACvBF,EAAW56P,EAAM46P,SACrB,OAAOnH,GAAMc,EAAKb,KAAMoH,EAAe1K,UAAUmE,EAAKn9Q,OAlBjB,SAA0Cm9Q,EAAMmG,GACrF,OAAOA,EAAI9nN,OAAO2hN,EAAK1gS,KAAO6mS,EAAI1K,UAAUuE,EAAKnhS,MAAQ,EAiBM4nS,CAAiCzG,EAAMqG,GAAWD,GAA4BpG,EAAMuG,EAAe1K,UAAWwK,KAS3KK,GAAkB,SAAUv9P,GAC9B,IAAIo4P,EAASp4P,EAAKo4P,OACdF,EAAYl4P,EAAKk4P,UACjBJ,EAAa93P,EAAK83P,WAClBV,EAAYp3P,EAAKo3P,UACjBuE,EAAgB37P,EAAK27P,cACrBT,EAAoBjD,GAA6Bb,EAAU9kL,WAAW13E,GAAIk9P,GAC1E0F,EAAgBtF,EAAU3yB,KAC1BsxB,EAAOO,EAAUP,KAErB,IAAKqE,EAAkB1/R,OACrB,OAlBc,SAAqB4tC,GACrC,IAAIytP,EAAOztP,EAAMytP,KACb4G,EAAWr0P,EAAMq0P,SACjBP,EAAW9zP,EAAM8zP,SACrB,OAAOnH,GAAMc,EAAKb,KAAMyH,EAAS7K,WAAWiE,EAAKn9Q,OAASqjR,GAAmClG,EAAMqG,GAAWD,GAA4BpG,EAAM4G,EAAS7K,WAAYsK,IAc5JQ,CAAY,CACjB7G,KAAMA,EACN4G,SAAUrG,EAAU7xB,KACpB23B,SAAUM,IAId,IAAI3E,EAAYT,EAAOS,UACnBC,EAAcV,EAAOU,YACrB6E,EAAe9E,EAAUz4F,IAAI,GAEjC,GAAIu9F,EAAc,CAChB,IAAIxH,EAAU2B,EAAW6F,GAEzB,GAAIjC,GAAsBiC,EAAchC,GACtC,OAAO0B,GAAS,CACdxG,KAAMA,EACNuG,eAAgBjH,EAAQ5wB,KACxB23B,SAAUM,IAId,IAAII,EAAmBn2R,EAAO0uR,EAAQ5wB,KAAMuzB,EAAYhD,OACxD,OAAOuH,GAAS,CACdxG,KAAMA,EACNuG,eAAgBQ,EAChBV,SAAUM,IAId,IAAI7/Q,EAAOu9Q,EAAkBA,EAAkB1/R,OAAS,GAExD,GAAImiB,EAAK20F,WAAW13E,KAAOs9P,EAAU5lL,WAAW13E,GAC9C,OAAO4iQ,EAAclL,UAAUP,OAGjC,GAAI2J,GAAsB/9Q,EAAK20F,WAAW13E,GAAI+gQ,GAAgB,CAC5D,IAAIp2B,EAAO99P,EAAOkW,EAAK4nP,KAAM15E,GAAO8vG,EAAc7C,YAAYhD,QAC9D,OAAOqH,GAAQ,CACbtG,KAAMA,EACNuG,eAAgB73B,EAChB23B,SAAUM,IAId,OAAOL,GAAQ,CACbtG,KAAMA,EACNuG,eAAgBz/Q,EAAK4nP,KACrB23B,SAAUM,KAIVrD,GAA6B,SAAU/C,EAAWtB,GACpD,IAAIQ,EAAQc,EAAUd,MAEtB,OAAKA,EAIEh+Q,GAAIw9Q,EAAOQ,EAAMpD,OAAOnkD,KAAKgoD,cAH3BjB,GAwCP+H,GAAoC,SAAUl5Q,GAChD,IAAIm5Q,EAnCsC,SAA+C99P,GACzF,IAAIo4P,EAASp4P,EAAKo4P,OACdF,EAAYl4P,EAAKk4P,UACjBd,EAAYp3P,EAAKo3P,UACjBU,EAAa93P,EAAK83P,WAClB6D,EAAgB37P,EAAK27P,cACrB7I,EAAWoF,EAAU3yB,KAAK+sB,UAAUP,OACpC9kG,EAAKmrG,EAAOnrG,GAEhB,OAAKmqG,GAIAnqG,EAIW,YAAZA,EAAGpzL,KACE0jS,GAAe,CACpBnF,OAAQA,EACRF,UAAWA,EACXJ,WAAYA,EACZV,UAAWA,EACXuE,cAAeA,IAIZe,GAAc,CACnBtE,OAAQA,EACRN,WAAYA,EACZ6D,cAAeA,IApBR7I,EAyBiBiL,CAAsCp5Q,GAC5DyyQ,EAAYzyQ,EAAKyyQ,UAErB,OADuBA,EAAY+C,GAA0B/C,EAAW0G,GAAuBA,GAI7FE,GAAkB,SAAU9D,EAAU7C,GACxC,IAAItoD,EAAO71N,GAASm+Q,EAAW6C,EAAShH,OAAO7hG,SAC3C0lG,EAAelrG,GAAOkjD,GAmB1B,MAZc,CACZunD,MAPUxE,EAAQ,CAClB7jK,IAAKopK,EAAUlyP,EACf+oF,OAAQmpK,EAAUlyP,EAAI+0P,EAAS5D,MAAMprK,OACrCh3G,KAAMmjR,EAAU7lR,EAChB2C,MAAOkjR,EAAU7lR,EAAI0oR,EAAS5D,MAAMrhN,QAIpCi+M,OAAQ,CACN7hG,QAAS6oG,EAAShH,OAAO7hG,QACzB16L,IAAKujS,EAAShH,OAAOv8R,IACrB8qC,QAAS41P,EACTtoD,KAAM,CACJ15O,MAAO05O,EACPgoD,aAAcA,MAOtB,SAASkH,GAAcC,EAAKpG,GAC1B,OAAOoG,EAAIv7R,KAAI,SAAUi4B,GACvB,OAAOk9P,EAAWl9P,MAgBtB,IAsDIujQ,GAAoC,SAAUn+P,GAChD,IAAIo+P,EAAsBp+P,EAAKo+P,oBAC3BlG,EAAYl4P,EAAKk4P,UAEjBmG,EAR0B,SAAUnE,EAAUpE,GAClD,OAAOx9Q,GAAI4hR,EAAShH,OAAOnkD,KAAKgoD,aAAcjB,GAOhBwI,CADft+P,EAAKk6P,SAC6CkE,GAC7D32R,EAASyR,GAASmlR,EAAyBnG,EAAU3yB,KAAK+sB,UAAUP,QACxE,OAAOz5Q,GAAI4/Q,EAAUnxF,OAAOurF,UAAUP,OAAQtqR,IAG5C82R,GAAiC,SAAUv+P,GAC7C,IAAIk4P,EAAYl4P,EAAKk4P,UACjBzwF,EAAcznK,EAAKynK,YACnB+2F,EAAyBx+P,EAAKw+P,uBAC9BtE,EAAWl6P,EAAKk6P,SAChBC,EAA4Bn6P,EAAKm6P,0BACjCsE,EAAsBz+P,EAAK0+P,eAC3BA,OAAyC,IAAxBD,GAAyCA,EAC1DE,EAAezlR,GAASslR,EAAwBtG,EAAU3yB,KAAK+sB,UAAUP,QAEzEptQ,EAAO,CACTgC,OAFYyvQ,GAAiB8B,EAAU3yB,KAAK+sB,UAAWqM,GAGvDl3F,YAAaA,EACb0yF,0BAA2BA,EAC3BD,SAAUA,GAEZ,OAAOwE,EApkBoB,SAAgC/5Q,GAC3D,OAAOq1Q,GAAUv2P,EAAS,GAAI9e,EAAM,CAClCy1Q,yBArDgDvD,EAqDYlyQ,EAAK8iL,YAAYovF,KApDxE,SAAUP,GACf,IAAI6C,EAAmBJ,GAASzC,EAAMroK,IAAKqoK,EAAMpoK,QAC7CkrK,EAAqBL,GAASzC,EAAMpiR,KAAMoiR,EAAMniR,OACpD,OAAO,SAAUqiR,GACf,OAAIK,IAAS6C,GACJP,EAAiB3C,EAAQvoK,MAAQkrK,EAAiB3C,EAAQtoK,QAG5DkrK,EAAmB5C,EAAQtiR,OAASklR,EAAmB5C,EAAQriR,aATlC,IAAU0iR,EAunB1B+H,CAAuBj6Q,GAAQ+1Q,GAAiB/1Q,IAGtEk6Q,GAAmB,SAAU7+P,GAC/B,IAAI87P,EAAkB97P,EAAK87P,gBACvB5D,EAAYl4P,EAAKk4P,UACjBzwF,EAAcznK,EAAKynK,YACnBqwF,EAAa93P,EAAK83P,WAClBiE,EAAiB/7P,EAAK+7P,eACtB7B,EAAWl6P,EAAKk6P,SAChB4E,EAA8B9+P,EAAK8+P,4BACnCC,EAA0B/+P,EAAK++P,wBAC/BpD,EAAgB37P,EAAK27P,cAEzB,IAAKl0F,EAAY6E,UACf,OAAO,KAGT,IAAI4uF,EAAoBjD,GAA6BxwF,EAAYn1F,WAAW13E,GAAIk9P,GAC5EzC,EAAekD,GAASL,EAAWzwF,GACnC2wF,EAjyBmB,SAAUp4P,GACjC,IAAI87P,EAAkB97P,EAAK87P,gBACvB5D,EAAYl4P,EAAKk4P,UACjBzwF,EAAcznK,EAAKynK,YACnByzF,EAAoBl7P,EAAKk7P,kBACzBa,EAAiB/7P,EAAK+7P,eAE1B,IAAKt0F,EAAY60F,iBACf,OAAO,KAKT,IAFenE,GAAkB4D,GAG/B,OAAO,KAGT,SAASiD,EAAUr4Q,GACjB,IAAIsmK,EAAK,CACPpzL,KAAM,UACN47R,QAAS,CACP/P,YAAa/+P,EACbo/P,YAAat+E,EAAYn1F,WAAW13E,KAGxC,OAAO6I,EAAS,GAAIs4P,EAAgB,CAClC9uG,GAAIA,IAIR,IAAImT,EAAM27F,EAAelD,UAAUz4F,IAC/B6+F,EAAY7+F,EAAI5kM,OAAS4kM,EAAI,GAAK,KAEtC,GAAI07F,EACF,OAAOmD,EAAYD,EAAUC,GAAa,KAG5C,IAAIC,EAAmB5G,GAAwBJ,EAAWgD,GAE1D,IAAK+D,EACH,OAAKC,EAAiB1jS,OAKfwjS,EADIE,EAAiBA,EAAiB1jS,OAAS,GAChC82G,WAAW13E,IAJxB,KAOX,IAAIukQ,EAAiBx/Q,GAAUu/Q,GAAkB,SAAUz/R,GACzD,OAAOA,EAAE6yG,WAAW13E,KAAOqkQ,MAEP,IAApBE,GAA4Hv3R,GAAU,GACxI,IAAIu0R,EAAgBgD,EAAiB,EAErC,OAAIhD,EAAgB,EACX,KAIF6C,EADME,EAAiB/C,GACN7pL,WAAW13E,IAsuBtBwkQ,CAAkB,CAC7BtD,gBAAiBA,EACjB5D,UAAWA,EACXzwF,YAAaA,EACbyzF,kBAAmBA,EACnBa,eAAgBA,KACZF,GAAgB,CACpBC,gBAAiBA,EACjBzG,aAAcA,EACd6C,UAAWA,EACXJ,WAAYA,EACZrwF,YAAaA,EACbyzF,kBAAmBA,EACnBa,eAAgBA,EAChB7B,SAAUA,EACVyB,cAAeA,IAGjB,IAAKvD,EACH,OAAO,KAGT,IAAIgG,EAAsBP,GAAiC,CACzDzF,OAAQA,EACRF,UAAWA,EACXd,UAAW3vF,EACXqwF,WAAYA,EACZ6D,cAAeA,IAWjB,GAT6B4C,GAA8B,CACzDrG,UAAWA,EACXzwF,YAAaA,EACb+2F,uBAAwBJ,EACxBlE,SAAUA,EAAS5D,MACnB6D,2BAA2B,EAC3BuE,gBAAgB,IAShB,MAAO,CACLW,gBANoBlB,GAAiC,CACrDC,oBAAqBA,EACrBlG,UAAWA,EACXgC,SAAUA,IAIV9B,OAAQA,EACRkH,kBAAmB,MAIvB,IAAIpJ,EAAWh9Q,GAASklR,EAAqBU,GACzCS,EAvJuB,SAAUv/P,GACrC,IAAIo4P,EAASp4P,EAAKo4P,OACd8B,EAAWl6P,EAAKk6P,SAChBzyF,EAAcznK,EAAKynK,YACnBqwF,EAAa93P,EAAK83P,WAClB0H,EAAkBx/P,EAAKw/P,gBACvBC,EAAmBzB,GAAe9D,EAAU5hR,GAAI4hR,EAAShH,OAAOzxP,QAAS+9P,IACzEE,EAAoBj4F,EAAY6uF,MAAQa,GAAgB1vF,EAAanvL,GAAImvL,EAAY6uF,MAAMpD,OAAOzxP,QAAS+9P,IAAoB/3F,EAC/H9pL,EAAOy6Q,EAAOS,UACd8G,EAAqBhF,GAAsB,CAC7CC,cAAeqD,GAActgR,EAAKyiL,IAAK03F,GACvCrwF,YAAaA,EACbqxF,YAAaV,EAAOU,YACpBoB,SAAUuF,EAAiBnJ,MAC3B34Q,KAAMA,EACNk9Q,oBAAoB,IAElB+E,EAAsBjF,GAAsB,CAC9CC,cAAeqD,GAActgR,EAAKyiL,IAAK03F,GACvCrwF,YAAai4F,EACb5G,YAAaV,EAAOU,YACpBoB,SAAUA,EAAS5D,MACnB34Q,KAAMA,EACNk9Q,oBAAoB,IAElBnC,EAAY,GACZC,EAAU,GACVt8Q,EAAS,CAACsB,EAAMgiR,EAAoBC,GAoBxC,OAnBAjiR,EAAKyiL,IAAI/5L,SAAQ,SAAUu0B,GACzB,IAAIm8P,EAzCR,SAAuBn8P,EAAIve,GACzB,IAAK,IAAI1f,EAAI,EAAGA,EAAI0f,EAAO7gB,OAAQmB,IAAK,CACtC,IAAIo6R,EAAe16Q,EAAO1f,GAAGg8R,QAAQ/9P,GAErC,GAAIm8P,EACF,OAAOA,EAIX,OAAO,KAgCc8I,CAAcjlQ,EAAIve,GAEjC06Q,EACF4B,EAAQ/9P,GAAMm8P,EAIhB2B,EAAU99P,IAAM,KAGF6I,EAAS,GAAI20P,EAAQ,CACnCS,UAAW,CACTz4F,IAAKziL,EAAKyiL,IACVs4F,UAAWA,EACXC,QAASA,KA4GEmH,CAAsB,CACnC1H,OAAQA,EACR8B,SAAUA,EACVzyF,YAAaA,EACbqwF,WAAYA,EACZ0H,gBAAiBtJ,IAEnB,MAAO,CACLmJ,gBAAiBN,EACjB3G,OAAQmH,EACRD,kBAAmBpJ,IAInB6J,GAAiB,SAAwB3I,GAC3C,IAAI9nI,EAAO8nI,EAAUZ,QAAQ5Z,OAE7B,OADCttH,GAA4G1nJ,GAAU,GAChH0nJ,GAqFL0wI,GAAgC,SAAuC9H,EAAWyD,GACpF,IAAI7I,EAAWoF,EAAU3yB,KAAK+sB,UAAUP,OACxC,OAAO2J,GAAsBxD,EAAU5lL,WAAW13E,GAAI+gQ,GAAiBziR,GAAS45Q,EAAU6I,EAAc7C,YAAYhD,OAAShD,GAE3HmN,GAA0B,SAAiC/H,EAAWyD,GACxE,IAAI7I,EAAWoF,EAAU3yB,KAAK+sB,UAC9B,OAAOoJ,GAAsBxD,EAAU5lL,WAAW13E,GAAI+gQ,GAAiBvF,GAAiBtD,EAAUjnG,GAAO8vG,EAAc7C,YAAYhD,QAAUhD,GAiC3IoN,GAAiBvI,aAAW,SAAwBd,EAAM+F,GAC5D,IAAI7F,EAAe6F,EAAW/F,EAAKb,MACnC,MAAO,CACL3gS,MAAO0hS,EACPjB,MAAOC,GAAMc,EAAKb,KAAMe,OA0BxBoJ,GAAgB,SAAuB7J,EAAO3/R,GAChD,OAAO8sC,EAAS,GAAI6yP,EAAO,CACzBpD,OAAQzvP,EAAS,GAAI6yP,EAAMpD,OAAQ,CACjCv8R,IAAKA,OAKPypS,GAAiB,SAAwBhJ,EAAWc,EAAWJ,GACjE,IAAIxB,EAAQc,EAAUd,MACpBiC,GAASL,EAAWd,IAAyHxvR,GAAU,GACvJwvR,EAAUZ,QAAQI,iBAAiJhvR,GAAU,GAC/K,IAAIy4R,EAAkBH,GAAe9I,EAAUP,KAAMqB,EAAU0E,YAAY9G,MACvEwK,EAnCgC,SAAyClJ,EAAWiJ,EAAiBvI,GACzG,IAAIjB,EAAOO,EAAUP,KAErB,GAAkC,YAA9BO,EAAU9kL,WAAWqiB,KACvB,OAAOohK,GAAMc,EAAKb,KAAMqK,EAAgBxJ,EAAKb,OAG/C,IAAIuK,EAAiBnJ,EAAUZ,QAAQjxB,KAAKqtB,WAAWiE,EAAKnhS,MAMxD8qS,EALkBvI,GAA6Bb,EAAU9kL,WAAW13E,GAAIk9P,GAC5CxyR,QAAO,SAAUC,EAAKk7R,GACpD,OAAOl7R,EAAMk7R,EAAU15F,OAAO2rF,UAAUmE,EAAKnhS,QAC5C,GAC6B2qS,EAAgBxJ,EAAKb,MACjBuK,EAEpC,OAAIC,GAAiB,EACZ,KAGFzK,GAAMc,EAAKb,KAAMwK,GAgBHE,CAAgCtJ,EAAWiJ,EAAiBvI,GAC7E6I,EAAQ,CACVN,gBAAiBA,EACjBpJ,YAAaqJ,EACbM,kBAAmBxJ,EAAUd,MAAQc,EAAUd,MAAMpD,OAAOv8R,IAAM,MAGpE,IAAK2/R,EAQH,OAAO7yP,EAAS,GAAI2zP,EAAW,CAC7BZ,QARaG,GAAW,CACxBpxB,KAAM6xB,EAAUZ,QAAQjxB,KACxBqxB,gBAAiB+J,EACjB9J,KAAMO,EAAUP,KAChBP,MAAOc,EAAUd,UAQrB,IAAIuK,EAAYP,EAAiBhoR,GAAIg+Q,EAAMpD,OAAOv8R,IAAK2pS,GAAkBhK,EAAMpD,OAAOv8R,IAClFmqS,EAAWX,GAAc7J,EAAOuK,GAOpC,OAAOp9P,EAAS,GAAI2zP,EAAW,CAC7BZ,QAPYG,GAAW,CACvBpxB,KAAM6xB,EAAUZ,QAAQjxB,KACxBqxB,gBAAiB+J,EACjB9J,KAAMO,EAAUP,KAChBP,MAAOwK,IAIPxK,MAAOwK,KA6GPC,GAAiB,SAAU/gQ,GAC7B,IAAI87P,EAAkB97P,EAAK87P,gBACvBgD,EAA8B9+P,EAAK8+P,4BACnC5G,EAAYl4P,EAAKk4P,UACjB8I,EAAShhQ,EAAKghQ,OACdlJ,EAAa93P,EAAK83P,WAClBF,EAAa53P,EAAK43P,WAClBsC,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cACrBl0F,EAxT2B,SAAUznK,GACzC,IAAI87P,EAAkB97P,EAAK87P,gBACvBsC,EAAsBp+P,EAAKo+P,oBAC3Bx3Q,EAASoZ,EAAKpZ,OACdgxQ,EAAa53P,EAAK43P,WAClBsC,EAAWl6P,EAAKk6P,SAChBtd,EAASh2P,EAAO4vQ,QAAQ5Z,OAE5B,IAAKA,EACH,OAAO,KAGT,IAAIia,EAAOjwQ,EAAOiwQ,KACdoK,EAAyBlI,GAASnc,EAAOia,EAAKn9Q,OAAQkjQ,EAAOia,EAAK1gS,MAClE+qS,EAAanJ,GAAgBH,GAAY1yR,QAAO,SAAUkyR,GAC5D,OAAOA,IAAcxwQ,KACpB1hB,QAAO,SAAUkyR,GAClB,OAAOA,EAAU9qF,aAChBpnM,QAAO,SAAUkyR,GAClB,OAAOpgS,QAAQogS,EAAUZ,QAAQ5Z,WAChC13Q,QAAO,SAAUkyR,GAClB,OAAO8B,GAA+BgB,EAAS5D,MAAxC4C,CAA+C6G,GAAe3I,OACpElyR,QAAO,SAAUkyR,GAClB,IAAI+J,EAAiBpB,GAAe3I,GAEpC,OAAI0E,EACKlf,EAAOia,EAAKgD,cAAgBsH,EAAetK,EAAKgD,cAGlDsH,EAAetK,EAAK+C,gBAAkBhd,EAAOia,EAAK+C,mBACxD10R,QAAO,SAAUkyR,GAClB,IAAI+J,EAAiBpB,GAAe3I,GAChCgK,EAA8BrI,GAASoI,EAAetK,EAAKn9Q,OAAQynR,EAAetK,EAAK1gS,MAC3F,OAAO8qS,EAAuBE,EAAetK,EAAKn9Q,SAAWunR,EAAuBE,EAAetK,EAAK1gS,OAASirS,EAA4BxkB,EAAOia,EAAKn9Q,SAAW0nR,EAA4BxkB,EAAOia,EAAK1gS,SAC3MiQ,MAAK,SAAU9G,EAAGC,GACnB,IAAIwd,EAAQgjR,GAAezgS,GAAGu3R,EAAK+C,gBAC/Bj2C,EAASo8C,GAAexgS,GAAGs3R,EAAK+C,gBAEpC,OAAIkC,EACK/+Q,EAAQ4mO,EAGVA,EAAS5mO,KACf7X,QAAO,SAAUkyR,EAAWthS,EAAO0H,GACpC,OAAOuiS,GAAe3I,GAAWP,EAAK+C,kBAAoBmG,GAAeviS,EAAM,IAAIq5R,EAAK+C,mBAG1F,IAAKsH,EAAW1lS,OACd,OAAO,KAGT,GAA0B,IAAtB0lS,EAAW1lS,OACb,OAAO0lS,EAAW,GAGpB,IAAI3hR,EAAW2hR,EAAWh8R,QAAO,SAAUkyR,GAEzC,OADwB2B,GAASgH,GAAe3I,GAAWP,EAAKn9Q,OAAQqmR,GAAe3I,GAAWP,EAAK1gS,KAChGkrS,CAAkBjD,EAAoBvH,EAAKb,UAGpD,OAAwB,IAApBz2Q,EAAS/jB,OACJ+jB,EAAS,GAGdA,EAAS/jB,OAAS,EACb+jB,EAASnZ,MAAK,SAAU9G,EAAGC,GAChC,OAAOwgS,GAAezgS,GAAGu3R,EAAKn9Q,OAASqmR,GAAexgS,GAAGs3R,EAAKn9Q,UAC7D,GAGEwnR,EAAW96R,MAAK,SAAU9G,EAAGC,GAClC,IAAIwd,EAAQo5Q,GAAQiI,EAAqB/H,GAAW0J,GAAezgS,KAC/DqkP,EAASwyC,GAAQiI,EAAqB/H,GAAW0J,GAAexgS,KAEpE,OAAIwd,IAAU4mO,EACL5mO,EAAQ4mO,EAGVo8C,GAAezgS,GAAGu3R,EAAKn9Q,OAASqmR,GAAexgS,GAAGs3R,EAAKn9Q,UAC7D,GAyOe4nR,CAA0B,CAC1CxF,gBAAiBA,EACjBsC,oBAAqBU,EACrBl4Q,OAAQo6Q,EACRpJ,WAAYA,EACZsC,SAAUA,IAGZ,IAAKzyF,EACH,OAAO,KAGT,IAAIyzF,EAAoBjD,GAA6BxwF,EAAYn1F,WAAW13E,GAAIk9P,GAC5EsF,EA1OqB,SAAUp9P,GACnC,IAAIo+P,EAAsBp+P,EAAKo+P,oBAC3BlE,EAAWl6P,EAAKk6P,SAChBzyF,EAAcznK,EAAKynK,YACnByzF,EAAoBl7P,EAAKk7P,kBACzBS,EAAgB37P,EAAK27P,cAsBzB,OArBaT,EAAkBh2R,QAAO,SAAUgzR,GAC9C,OAAOwC,GAAiB,CACtB/zQ,OAAQs5Q,GAAwB/H,EAAWyD,GAC3Cl0F,YAAaA,EACbyyF,SAAUA,EAAS5D,MACnB6D,2BAA2B,OAE5B/zR,MAAK,SAAU9G,EAAGC,GACnB,IAAIgiS,EAAcrL,GAASkI,EAAqBjE,GAA0B1yF,EAAau4F,GAA8B1gS,EAAGq8R,KACpH6F,EAActL,GAASkI,EAAqBjE,GAA0B1yF,EAAau4F,GAA8BzgS,EAAGo8R,KAExH,OAAI4F,EAAcC,GACR,EAGNA,EAAcD,EACT,EAGFjiS,EAAEgzG,WAAWx8G,MAAQyJ,EAAE+yG,WAAWx8G,SAE7B,IAAM,KA+MC2rS,CAAoB,CACvCrD,oBAAqBU,EACrB5E,SAAUA,EACVzyF,YAAaA,EACbyzF,kBAAmBA,EACnBS,cAAeA,IAEbvD,EAtGoB,SAAUp4P,GAClC,IAAI8+P,EAA8B9+P,EAAK8+P,4BACnC1B,EAAiBp9P,EAAKo9P,eACtBlC,EAAoBl7P,EAAKk7P,kBACzBhD,EAAYl4P,EAAKk4P,UACjBJ,EAAa93P,EAAK83P,WAClBrwF,EAAcznK,EAAKynK,YACnByyF,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cAEzB,IAAKyB,EAAgB,CACnB,GAAIlC,EAAkB1/R,OACpB,OAAO,KAGT,IAAIkmS,EAAW,CACb7I,UAAWJ,GACXK,YAAaN,GACbvrG,GAAI,CACFpzL,KAAM,UACN4tM,YAAa,CACXs+E,YAAat+E,EAAYn1F,WAAW13E,GACpC9kC,MAAO,KAIT6rS,EAA8B9D,GAAiC,CACjEzF,OAAQsJ,EACRxJ,UAAWA,EACXd,UAAW3vF,EACXqwF,WAAYA,EACZ6D,cAAeA,IAEb/E,EAAkB2B,GAASL,EAAWzwF,GAAeA,EAAc24F,GAAe34F,EAAaywF,EAAWJ,GAS9G,OAR6ByG,GAA8B,CACzDrG,UAAWA,EACXzwF,YAAamvF,EACb4H,uBAAwBmD,EACxBzH,SAAUA,EAAS5D,MACnB6D,2BAA2B,EAC3BuE,gBAAgB,IAEcgD,EAAW,KAG7C,IAAIE,EAAsB5qS,QAAQ8nS,EAA4Br3F,EAAYovF,KAAKb,OAASoH,EAAe73B,KAAK+sB,UAAUP,OAAOtqF,EAAYovF,KAAKb,OAE1ImG,EAAgB,WAClB,IAAI0F,EAAazE,EAAe9qL,WAAWx8G,MAE3C,OAAIsnS,EAAe9qL,WAAW13E,KAAOs9P,EAAU5lL,WAAW13E,IAItDgnQ,EAHKC,EAOFA,EAAa,EAXF,GAchB/I,EAAcoH,GAAez4F,EAAYovF,KAAMqB,EAAU0E,YAC7D,OAAOrB,GAAuB,CAC5BrD,UAAWA,EACXgD,kBAAmBA,EACnBzzF,YAAaA,EACbyyF,SAAUA,EACVpB,YAAaA,EACbn7Q,KAAM86Q,GACN3iS,MAAOqmS,IAiCI2F,CAAmB,CAC9BhD,4BAA6BA,EAC7Br3F,YAAaA,EACbywF,UAAWA,EACXJ,WAAYA,EACZsF,eAAgBA,EAChBlC,kBAAmBA,EACnBhB,SAAUA,EACVyB,cAAeA,IAGjB,IAAKvD,EACH,OAAO,KAGT,IAAIgG,EAAsBP,GAAiC,CACzDzF,OAAQA,EACRF,UAAWA,EACXd,UAAW3vF,EACXqwF,WAAYA,EACZ6D,cAAeA,IAOjB,MAAO,CACL0D,gBANoBlB,GAAiC,CACrDC,oBAAqBA,EACrBlG,UAAWA,EACXgC,SAAUA,IAIV9B,OAAQA,EACRkH,kBAAmB,OAInByC,GAAqB,SAAU3J,GACjC,IAAInrG,EAAKmrG,EAAOnrG,GAEhB,OAAKA,EAIW,YAAZA,EAAGpzL,KACEozL,EAAGwa,YAAYs+E,YAGjB94F,EAAGwoG,QAAQ1P,YAPT,MAePic,GAAmB,SAAUhiQ,GAC/B,IAAIW,EAAQX,EAAKW,MACb9mC,EAAOmmC,EAAKnmC,KACZooS,EARiB,SAA0B7J,EAAQR,GACvD,IAAIh9P,EAAKmnQ,GAAkB3J,GAC3B,OAAOx9P,EAAKg9P,EAAWh9P,GAAM,KAMRsnQ,CAAiBvhQ,EAAMy3P,OAAQz3P,EAAMwhQ,WAAWvK,YACjEwK,EAA4BprS,QAAQirS,GACpCI,EAAO1hQ,EAAMwhQ,WAAWvK,WAAWj3P,EAAM2hQ,SAASlL,UAAUx8P,IAC5DomQ,EAASiB,GAAkBI,EAC3BhvN,EAAY2tN,EAAOnK,KAAKxjN,UACxBkvN,EAAmC,aAAdlvN,IAAsC,YAATx5E,GAA+B,cAATA,IAAuC,eAAdw5E,IAAwC,cAATx5E,GAAiC,eAATA,GAE5J,GAAI0oS,IAAuBH,EACzB,OAAO,KAGT,IAAItG,EAA2B,cAATjiS,GAAiC,eAATA,EAC1Cq+R,EAAYv3P,EAAMwhQ,WAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IACjEkkQ,EAA8Bn+P,EAAMc,QAAQ8jO,KAAKi9B,gBACjDC,EAAoB9hQ,EAAMwhQ,WAC1BrK,EAAa2K,EAAkB3K,WAC/BF,EAAa6K,EAAkB7K,WACnC,OAAO2K,EAAqB1D,GAAgB,CAC1C/C,gBAAiBA,EACjBgD,4BAA6BA,EAC7B5G,UAAWA,EACXzwF,YAAau5F,EACblJ,WAAYA,EACZoC,SAAUv5P,EAAMu5P,SAChB6E,wBAAyBp+P,EAAMc,QAAQslK,OAAO27F,UAC9C3G,eAAgBp7P,EAAMy3P,OACtBuD,cAAeh7P,EAAMg7P,gBAClBoF,GAAc,CACjBjF,gBAAiBA,EACjBgD,4BAA6BA,EAC7B5G,UAAWA,EACX8I,OAAQA,EACRlJ,WAAYA,EACZF,WAAYA,EACZsC,SAAUv5P,EAAMu5P,SAChByB,cAAeh7P,EAAMg7P,iBAIzB,SAASgH,GAAkBhiQ,GACzB,MAAuB,aAAhBA,EAAMiiQ,OAAwC,eAAhBjiQ,EAAMiiQ,MAG7C,SAASC,GAAkBvM,GACzB,IAAI6C,EAAmBJ,GAASzC,EAAMroK,IAAKqoK,EAAMpoK,QAC7CkrK,EAAqBL,GAASzC,EAAMpiR,KAAMoiR,EAAMniR,OACpD,OAAO,SAAa2hR,GAClB,OAAOqD,EAAiBrD,EAAM3wP,IAAMi0P,EAAmBtD,EAAMtkR,IA0BjE,SAASsxR,GAAmBxgQ,GAC1B,IAAIygQ,EAAgBzgQ,EAAMygQ,cACtB7K,EAAY51P,EAAM41P,UAClBN,EAAat1P,EAAMs1P,WACnBsJ,EAAanJ,GAAgBH,GAAY1yR,QAAO,SAAUquE,GAC5D,IAAKA,EAAK+4H,UACR,OAAO,EAGT,IA/BmBvvL,EAAO4mO,EA+BtBi5B,EAASrpM,EAAKijN,QAAQ5Z,OAE1B,IAAKA,EACH,OAAO,EAGT,GArC0Bj5B,EAqCQi5B,KArCf7/P,EAqCAgmR,GApCR7uR,KAAOyvO,EAAOxvO,OAAS4I,EAAM5I,MAAQwvO,EAAOzvO,MAAQ6I,EAAMkxG,IAAM01H,EAAOz1H,QAAUnxG,EAAMmxG,OAASy1H,EAAO11H,KAqChH,OAAO,EAGT,GAAI40K,GAAkBjmB,EAAlBimB,CAA0BE,EAAchR,QAC1C,OAAO,EAGT,IAAI8E,EAAOtjN,EAAKsjN,KACZmM,EAAcpmB,EAAOmV,OAAO8E,EAAK8C,eACjCC,EAAiBmJ,EAAclM,EAAK+C,gBACpCC,EAAekJ,EAAclM,EAAKgD,cAClCoJ,EAAclK,GAASnc,EAAOia,EAAK+C,gBAAiBhd,EAAOia,EAAKgD,eAChEqJ,EAAmBD,EAAYrJ,GAC/BuJ,EAAiBF,EAAYpJ,GAEjC,OAAKqJ,IAAqBC,IAItBD,EACKtJ,EAAiBoJ,EAGnBnJ,EAAemJ,MAGxB,OAAK9B,EAAW1lS,OAIU,IAAtB0lS,EAAW1lS,OACN0lS,EAAW,GAAG5uL,WAAW13E,GAjEpC,SAAyBoF,GACvB,IAAI+iQ,EAAgB/iQ,EAAK+iQ,cACrB7K,EAAYl4P,EAAKk4P,UACjBgJ,EAAalhQ,EAAKkhQ,WAClBkC,EAAclL,EAAU3yB,KAAK+sB,UAAUP,OACvCsR,EAASnC,EAAWv+R,KAAI,SAAUwgN,GACpC,IAAI0zE,EAAO1zE,EAAU0zE,KACjBlwQ,EAASovQ,GAAM5yE,EAAU0zE,KAAKb,KAAM+M,EAAchR,OAAO8E,EAAKb,MAAO7yE,EAAUoiD,KAAK+sB,UAAUP,OAAO8E,EAAK8C,gBAC9G,MAAO,CACL/+P,GAAIuoL,EAAU7wG,WAAW13E,GACzBs7P,SAAUA,GAASkN,EAAaz8Q,OAEjCvgB,MAAK,SAAU9G,EAAGC,GACnB,OAAOA,EAAE22R,SAAW52R,EAAE42R,YAExB,OAAOmN,EAAO,GAAKA,EAAO,GAAGzoQ,GAAK,KAqD3B0oQ,CAAgB,CACrBP,cAAeA,EACf7K,UAAWA,EACXgJ,WAAYA,IAVL,KAcX,IAAIqC,GAAuB,SAA8Bj0I,EAAMwmI,GAC7D,OAAOhE,EAAQsE,GAAiB9mI,EAAMwmI,KAaxC,SAAS0N,GAAexjQ,GACtB,IAAI64P,EAAY74P,EAAK64P,UACjBj+P,EAAKoF,EAAKpF,GACd,OAAO5jC,QAAQ6hS,EAAUF,QAAQ/9P,IAAOi+P,EAAUH,UAAU99P,IAuB9D,IAoHI6oQ,GAAiB,SAAUzjQ,GAC7B,IAAI0jQ,EAAa1jQ,EAAK0jQ,WAClBxL,EAAYl4P,EAAKk4P,UACjBJ,EAAa93P,EAAK83P,WAClBF,EAAa53P,EAAK43P,WAClBmE,EAAiB/7P,EAAK+7P,eACtB7B,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cACrBoH,EAAgBQ,GAAqBrL,EAAU3yB,KAAK+sB,UAAWoR,GAC/DC,EAAgBb,GAAmB,CACrCC,cAAeA,EACf7K,UAAWA,EACXN,WAAYA,IAGd,IAAK+L,EACH,OAAO/K,GAGT,IAAInxF,EAAcmwF,EAAW+L,GACzBzI,EAAoBjD,GAA6BxwF,EAAYn1F,WAAW13E,GAAIk9P,GAC5E8L,EA7KqB,SAAUxM,EAAWtnI,GAC9C,IAAIwmI,EAAQc,EAAUd,MAEtB,OAAKA,EAIEiN,GAAqBzzI,EAAMwmI,EAAMpD,OAAOnkD,KAAK15O,OAH3Cy6J,EAyK8B8vI,CAAoBn4F,EAAas7F,GACxE,OApFsB,SAAU/iQ,GAChC,IAAIk4P,EAAYl4P,EAAKk4P,UACjB2L,EAAa7jQ,EAAK4jQ,iCAClB7H,EAAiB/7P,EAAK+7P,eACtBt0F,EAAcznK,EAAKynK,YACnByzF,EAAoBl7P,EAAKk7P,kBACzBS,EAAgB37P,EAAK27P,cAEzB,IAAKl0F,EAAY60F,iBACf,OAAO,KAGT,IAAIzF,EAAOpvF,EAAYovF,KACnBiC,EAAcoH,GAAez4F,EAAYovF,KAAMqB,EAAU0E,YACzD7F,EAAe+B,EAAYzjS,MAC3ByuS,EAAcD,EAAWhN,EAAKn9Q,OAC9BqqR,EAAYF,EAAWhN,EAAK1gS,KAE5BwmS,EAAcrhR,GADIg9Q,GAAwBJ,EAAWgD,IACjB,SAAUrnP,GAChD,IAAIjZ,EAAKiZ,EAAMy+D,WAAW13E,GACtBopQ,EAAYnwP,EAAM0xN,KAAK+sB,UAEvBl/B,EADY4wC,EAAUnN,EAAKnhS,MAtBL,EAwBtBuuS,EAA0BvI,GAAsB9gQ,EAAI+gQ,GACpDkB,EAAc2G,GAAe,CAC/B3K,UAAWkD,EAAelD,UAC1Bj+P,GAAIA,IAGN,OAAIqpQ,EACEpH,EACKkH,EAAYC,EAAUnN,EAAKn9Q,OAAS05O,GAAa2wC,EAAYC,EAAUnN,EAAK1gS,KAAOi9P,EAGrF0wC,EAAcE,EAAUnN,EAAKn9Q,OAASq9Q,EAAe3jC,GAAa0wC,EAAcE,EAAUnN,EAAK1gS,KAAO4gS,EAAe3jC,EAG1HypC,EACKkH,EAAYC,EAAUnN,EAAKn9Q,OAASq9Q,EAAe3jC,GAAa2wC,EAAYC,EAAUnN,EAAK1gS,KAAO4gS,EAAe3jC,EAGnH0wC,EAAcE,EAAUnN,EAAKn9Q,OAAS05O,GAAa0wC,EAAcE,EAAUnN,EAAK1gS,KAAOi9P,KAGhG,OAAKupC,EAIQ,CACX7D,YAAaA,EACbD,UAAWkD,EAAelD,UAC1B5rG,GAAI,CACFpzL,KAAM,UACN47R,QAAS,CACP/P,YAAaiX,EAAYrqL,WAAW13E,GACpCmrP,YAAat+E,EAAYn1F,WAAW13E,MAVjC,KAuCFspQ,CAAiB,CACtBN,iCAAkCA,EAClC1L,UAAWA,EACX6D,eAAgBA,EAChBt0F,YAAaA,EACbyzF,kBAAmBA,EACnBS,cAAeA,KAhJK,SAAUr5P,GAChC,IAAIuhQ,EAAavhQ,EAAMshQ,iCACnB1L,EAAY51P,EAAM41P,UAClBzwF,EAAcnlK,EAAMmlK,YACpByzF,EAAoB54P,EAAM44P,kBAC1Bv9Q,EAAO2kB,EAAM3kB,KACbu8Q,EAAW53P,EAAM43P,SACjByB,EAAgBr5P,EAAMq5P,cACtB9E,EAAOpvF,EAAYovF,KACnBiC,EAAcoH,GAAez4F,EAAYovF,KAAMqB,EAAU0E,YACzD7F,EAAe+B,EAAYzjS,MAC3ByuS,EAAcD,EAAWhN,EAAKn9Q,OAC9BqqR,EAAYF,EAAWhN,EAAK1gS,KAyB5BilS,EAzDN,SAAiBp7P,GACf,IAAIk4P,EAAYl4P,EAAKk4P,UACjB/B,EAAUn2P,EAAKm2P,QACfgF,EAAan7P,EAAKm7P,WAEtB,OAAKhF,EAIAgF,GAIDhF,EAAQ7jL,WAAWx8G,MAAQoiS,EAAU5lL,WAAWx8G,MAC3CqgS,EAAQ7jL,WAAWx8G,MAAQ,EAJ3BqgS,EAAQ7jL,WAAWx8G,MAJnB,KAmDMquS,CAAQ,CACrBjM,UAAWA,EACX/B,QAzBY76Q,GADQg9Q,GAAwBJ,EAAWgD,IACrB,SAAUrnP,GAC5C,IAAIjZ,EAAKiZ,EAAMy+D,WAAW13E,GACtBooQ,EAAcnvP,EAAM0xN,KAAK+sB,UAAUP,OAAO8E,EAAKb,MAC/CiO,EAA0BvI,GAAsB9gQ,EAAI+gQ,GACpDkB,EAAc2G,GAAe,CAC/B3K,UAAWl7Q,EACXid,GAAIA,IAGN,OAAIqpQ,EACEpH,EACKkH,GAAaf,EAGfc,EAAcd,EAAcjM,EAGjC8F,EACKkH,GAAaf,EAAcjM,EAG7B+M,EAAcd,KAKrB7H,WAAY5C,GAASL,EAAWzwF,KAElC,OAAO8zF,GAAuB,CAC5BrD,UAAWA,EACXgD,kBAAmBA,EACnBzzF,YAAaA,EACbyyF,SAAUA,EACVv8Q,KAAMA,EACNm7Q,YAAaA,EACbhjS,MAAOslS,IAgGHgJ,CAAiB,CACrBR,iCAAkCA,EAClC1L,UAAWA,EACXzwF,YAAaA,EACbyzF,kBAAmBA,EACnBv9Q,KAAMo+Q,EAAelD,UACrBqB,SAAUA,EACVyB,cAAeA,KAIf0I,GAAqB,SAAUzM,EAAY0M,GAC7C,IAAI7jF,EAEJ,OAAOh9K,EAAS,GAAIm0P,IAAan3E,EAAY,IAAc6jF,EAAQhyL,WAAW13E,IAAM0pQ,EAAS7jF,KAG3F8jF,GAAyB,SAAgCvkQ,GAC3D,IAAI+7P,EAAiB/7P,EAAK+7P,eACtB3D,EAASp4P,EAAKo4P,OACdR,EAAa53P,EAAK43P,WAClBj6Q,EAAOokR,GAAkBhG,GACzBtiP,EAAMsoP,GAAkB3J,GAE5B,IAAKz6Q,EACH,OAAOi6Q,EAGT,GAAIj6Q,IAAS87B,EACX,OAAOm+O,EAGT,IAAI4M,EAAgB5M,EAAWj6Q,GAE/B,IAAK6mR,EAAchO,QAAQI,gBACzB,OAAOgB,EAGT,IAAI0M,EAhiBkB,SAA2BlN,GACjD,IAAIuJ,EAAQvJ,EAAUZ,QAAQI,gBAC7B+J,GAAiI/4R,GAAU,GAC5I,IAAI0uR,EAAQc,EAAUd,MAEtB,IAAKA,EAQH,OAAO7yP,EAAS,GAAI2zP,EAAW,CAC7BZ,QARcG,GAAW,CACzBpxB,KAAM6xB,EAAUZ,QAAQjxB,KACxBsxB,KAAMO,EAAUP,KAChBP,MAAO,KACPM,gBAAiB,SAQrB,IAAI6N,EAAe9D,EAAMC,kBACxB6D,GAAkK78R,GAAU,GAC7K,IAAIk5R,EAAWX,GAAc7J,EAAOmO,GAOpC,OAAOhhQ,EAAS,GAAI2zP,EAAW,CAC7BZ,QAPYG,GAAW,CACvBpxB,KAAM6xB,EAAUZ,QAAQjxB,KACxBsxB,KAAMO,EAAUP,KAChBP,MAAOwK,EACPlK,gBAAiB,OAIjBN,MAAOwK,IAmgBK4D,CAAkBF,GAChC,OAAOH,GAAkBzM,EAAY0M,IAkCnCr6R,GAAU,SAAU+1B,GACtB,IAAIW,EAAQX,EAAKW,MACbgkQ,EAAwB3kQ,EAAKq/P,gBAC7BuF,EAAmB5kQ,EAAKmiQ,WACxB0C,EAAiB7kQ,EAAKk6P,SACtB4K,EAAe9kQ,EAAKo4P,OACpBkH,EAAoBt/P,EAAKs/P,kBACzBpF,EAAW2K,GAAkBlkQ,EAAMu5P,SACnCiI,EAAayC,GAAoBjkQ,EAAMwhQ,WACvC9C,EAAkBsF,GAAyBhkQ,EAAMc,QAAQslK,OAAO27F,UAChEj7R,EAASyR,GAASmmR,EAAiB1+P,EAAM0wJ,QAAQ0V,OAAO27F,WACxD37F,EAAS,CACXt/L,OAAQA,EACRi7R,UAAWrD,EACXmD,gBAAiBlqR,GAAIqoB,EAAM0wJ,QAAQ0V,OAAOy7F,gBAAiB/6R,IAEzD89P,EAAO,CACTm9B,UAAWpqR,GAAIyuL,EAAO27F,UAAWxI,EAAShH,OAAOzxP,SACjD+gQ,gBAAiBlqR,GAAIyuL,EAAOy7F,gBAAiBtI,EAAShH,OAAOzxP,SAC7Dh6B,OAAQ6Q,GAAIyuL,EAAOt/L,OAAQyyR,EAAShH,OAAOnkD,KAAK15O,QAE9CosC,EAAU,CACZslK,OAAQA,EACRw+D,KAAMA,GAGR,GAAoB,eAAhB5kO,EAAMiiQ,MACR,OAAOn/P,EAAS,CACdm/P,MAAO,cACNjiQ,EAAO,CACRwhQ,WAAYA,EACZjI,SAAUA,EACVz4P,QAASA,IAIb,IAAIy2P,EAAYiK,EAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAC3DmqQ,EAAYD,GAAgBrB,GAAc,CAC5CC,WAAYn+B,EAAK99P,OACjBywR,UAAWA,EACXJ,WAAYqK,EAAWrK,WACvBF,WAAYuK,EAAWvK,WACvBmE,eAAgBp7P,EAAMy3P,OACtB8B,SAAUA,EACVyB,cAAeh7P,EAAMg7P,gBAEnBqJ,EA7EuB,SAAU1iQ,GACrC,IAAI41P,EAAY51P,EAAM41P,UAClBJ,EAAax1P,EAAMw1P,WACnBF,EAAat1P,EAAMs1P,WACnBmE,EAAiBz5P,EAAMy5P,eACvB3D,EAAS91P,EAAM81P,OACf6M,EAAUV,GAAuB,CACnCxI,eAAgBA,EAChB3D,OAAQA,EACRR,WAAYA,IAEVoJ,EAASe,GAAkB3J,GAE/B,IAAK4I,EACH,OAAOiE,EAGT,IAAI7N,EAAYQ,EAAWoJ,GAE3B,GAAIzI,GAASL,EAAWd,GACtB,OAAO6N,EAGT,GAAI7N,EAAUZ,QAAQI,gBACpB,OAAOqO,EAGT,IAAIC,EAAU9E,GAAehJ,EAAWc,EAAWJ,GACnD,OAAOuM,GAAkBY,EAASC,GAiDJC,CAAsB,CAClDjN,UAAWA,EACXE,OAAQ2M,EACRhJ,eAAgBp7P,EAAMy3P,OACtBN,WAAYqK,EAAWrK,WACvBF,WAAYuK,EAAWvK,aAezB,OAZan0P,EAAS,GAAI9C,EAAO,CAC/Bc,QAASA,EACT0gQ,WAAY,CACVrK,WAAYqK,EAAWrK,WACvBF,WAAYoN,GAEd5M,OAAQ2M,EACR7K,SAAUA,EACVoF,kBAAmBA,GAAqB,KACxCzE,oBAAoByE,GAA4B,QAYpD,IAAI8F,GAAa,SAAUplQ,GACzB,IAAIo4P,EAASp4P,EAAKo4P,OACd8B,EAAWl6P,EAAKk6P,SAChBpC,EAAa93P,EAAK83P,WAClBrwF,EAAcznK,EAAKynK,YACnBozF,EAAqB76P,EAAK66P,mBAC1Bl9Q,EAAOy6Q,EAAOS,UACd+B,EAbN,SAAyBsD,EAAKpG,GAC5B,OAAOoG,EAAIv7R,KAAI,SAAUi4B,GACvB,OAAOk9P,EAAWl9P,MAWAyqQ,CAAgB1nR,EAAKyiL,IAAK03F,GAS9C,OAAOr0P,EAAS,GAAI20P,EAAQ,CAC1BS,UATc8B,GAAsB,CACpCC,cAAeA,EACfnzF,YAAaA,EACbqxF,YAAaV,EAAOU,YACpBoB,SAAUA,EAAS5D,MACnBuE,mBAAoBA,EACpBl9Q,KAAMA,OAON2nR,GAA4B,SAAUtlQ,GACxC,IAAIo4P,EAASp4P,EAAKo4P,OACdF,EAAYl4P,EAAKk4P,UACjBd,EAAYp3P,EAAKo3P,UACjBU,EAAa93P,EAAK83P,WAClBoC,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cACrByC,EAAsBP,GAAiC,CACzDzF,OAAQA,EACRF,UAAWA,EACXJ,WAAYA,EACZV,UAAWA,EACXuE,cAAeA,IAEjB,OAAOwC,GAAiC,CACtCC,oBAAqBA,EACrBlG,UAAWA,EACXgC,SAAUA,KAIVqL,GAAe,SAAUvlQ,GAC3B,IAAIW,EAAQX,EAAKW,MACbikQ,EAAmB5kQ,EAAKmiQ,WACxB0C,EAAiB7kQ,EAAKk6P,SACD,SAAvBv5P,EAAM6kQ,cAAsF59R,GAAU,GACxG,IAAI69R,EAAuB9kQ,EAAMy3P,OAC7B8B,EAAW2K,GAAkBlkQ,EAAMu5P,SACnCiI,EAAayC,GAAoBjkQ,EAAMwhQ,WACvCrK,EAAaqK,EAAWrK,WACxBF,EAAauK,EAAWvK,WACxBM,EAAYJ,EAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAChDomQ,EAASe,GAAkB0D,GAC9BzE,GAAwHp5R,GAAU,GACnI,IAAI6/L,EAAcmwF,EAAWoJ,GACzB5I,EAASgN,GAAU,CACrBhN,OAAQqN,EACRvL,SAAUA,EACVzyF,YAAaA,EACbqwF,WAAYA,IAEVuH,EAAkBiG,GAAyB,CAC7ClN,OAAQA,EACRF,UAAWA,EACXd,UAAW3vF,EACXqwF,WAAYA,EACZoC,SAAUA,EACVyB,cAAeh7P,EAAMg7P,gBAEvB,OAAO1xR,GAAO,CACZmuR,OAAQA,EACRiH,gBAAiBA,EACjB1+P,MAAOA,EACPwhQ,WAAYA,EACZjI,SAAUA,KAWVwL,GAAiB,SAAU1lQ,GAC7B,IAAIk4P,EAAYl4P,EAAKk4P,UACjBmK,EAAOriQ,EAAKqiQ,KACZvK,EAAa93P,EAAK83P,WAClBoC,EAAWl6P,EAAKk6P,SAChBpB,EAAcoH,GAAemC,EAAKxL,KAAMqB,EAAU0E,YAClD+I,EAAa1N,GAA6BoK,EAAK/vL,WAAW13E,GAAIk9P,GAC9DhjR,EAAW6wR,EAAWxrR,QAAQ+9Q,IAClB,IAAdpjR,GAA2HlN,GAAU,GACvI,IAhB+B0qG,EAgB3BsoL,EAAgB+K,EAAWl8R,MAAMqL,EAAW,GAC5C8mR,EAAWhB,EAAct1R,QAAO,SAAU44K,EAAU3qG,GAEtD,OADA2qG,EAAS3qG,EAAK++B,WAAW13E,KAAM,EACxBsjJ,IACN,IACCy9G,EAAgB,CAClBiK,cAAwC,YAAzBvD,EAAK/vL,WAAWqiB,KAC/BmkK,YAAaA,EACb8C,SAAUA,GAkBZ,MAAO,CACLxD,OATW,CACXS,UATc8B,GAAsB,CACpCC,cAAeA,EACfnzF,YAAa46F,EACbvJ,YAAaA,EACbn7Q,KAAM,KACNu8Q,SAAUA,EAAS5D,MACnBuE,oBAAoB,IAIpB/B,YAAaA,EACb7rG,GAAI,CACFpzL,KAAM,UACN4tM,aAvC2Bn1F,EAuCE4lL,EAAU5lL,WAtCpC,CACLx8G,MAAOw8G,EAAWx8G,MAClBiwR,YAAazzK,EAAWyzK,gBAyCxB4V,cAAeA,IA6FfkK,GAAmC,SAAU7lQ,GAC/C,IAAI8lQ,EAAY9lQ,EAAK8lQ,UACjBC,EAAoB/lQ,EAAK+lQ,kBACzB7L,EAAWl6P,EAAKk6P,SAChB8L,EAAqB9L,EAAShH,OAAOnkD,KAAK15O,MAC9C,OAAOywS,EAAUnjS,KAAI,SAAUu1R,GAC7B,IAAInS,EAAcmS,EAAU5lL,WAAWyzK,YAGnCkgB,EAfQ,SAAU7O,GACxB,IAAId,EAAQc,EAAUd,MAEtB,OADCA,GAAyG1uR,GAAU,GAC7G0uR,EAWO4P,CADGH,EAAkBhgB,IAECmN,OAAOnkD,KAAK15O,MAE1C8wS,EAnCe,SAAUnmQ,GAC/B,IAAIk4P,EAAYl4P,EAAKk4P,UACjBkO,EAAWpmQ,EAAKv4B,OAChB4+R,EAAsBrmQ,EAAKqmQ,oBAC3Bt/F,EAASt/L,EAAOywR,EAAUnxF,OAAQq/F,GAClC7gC,EAAO0tB,EAAWlsF,EAAQs/F,GAU9B,OARY5iQ,EAAS,GAAIy0P,EAAW,CAClCvzK,YAAalhF,EAAS,GAAIy0P,EAAUvzK,YAAa,CAC/CoiF,OAAQA,IAEVA,OAAQA,EACRw+D,KAAMA,IAuBM+gC,CAAgB,CAC1BpO,UAAWA,EACXzwR,OAHgB6Q,GAAI0tR,EAAoBC,GAIxCI,oBAAqBnM,EAAShH,OAAO7hG,UAEvC,OAAO80G,MA2EPI,GAAa,SAAoB5lQ,GACnC,MAA8B,SAAvBA,EAAM6kQ,cAGXgB,GAAsB,SAA6B7lQ,EAAO2jQ,EAASmC,GACrE,IAAItE,EAzLmB,SAAUA,EAAYmC,GAC7C,MAAO,CACLxM,WAAYqK,EAAWrK,WACvBF,WAAYyM,GAAkBlC,EAAWvK,WAAY0M,IAsLtCoC,CAAkB/lQ,EAAMwhQ,WAAYmC,GAErD,OAAKiC,GAAW5lQ,IAAU8lQ,EACjBx8R,GAAO,CACZ02B,MAAOA,EACPwhQ,WAAYA,IAIToD,GAAY,CACjB5kQ,MAAOA,EACPwhQ,WAAYA,KAIhB,SAASwE,GAAwBhmQ,GAC/B,OAAIA,EAAMq0P,YAAqC,SAAvBr0P,EAAM6kQ,aACrB/hQ,EAAS,CACdm/P,MAAO,YACNjiQ,EAAO,CACR2+P,kBAAmB,OAIhB3+P,EAGT,IAAIimQ,GAAO,CACThE,MAAO,OACPhjC,UAAW,KACXinC,aAAa,GAEXhrR,GAAW,SAAU8kB,EAAO9b,GAK9B,QAJc,IAAV8b,IACFA,EAAQimQ,IAGU,UAAhB/hR,EAAOhrB,KACT,OAAO4pC,EAAS,GAAImjQ,GAAM,CACxBC,aAAa,IAIjB,GAAoB,oBAAhBhiR,EAAOhrB,KAA4B,CACnB,SAAhB8mC,EAAMiiQ,OAA+Hh7R,GAAU,GACjJ,IAAIk/R,EAAkBjiR,EAAOgc,QACzByhQ,EAAWwE,EAAgBxE,SAC3BjD,EAAkByH,EAAgBzH,gBAClCnF,EAAW4M,EAAgB5M,SAC3BiI,EAAa2E,EAAgB3E,WAC7BqD,EAAesB,EAAgBtB,aAC/BtN,EAAYiK,EAAWrK,WAAWwK,EAASpK,UAAUt9P,IACrDynQ,EAAOF,EAAWvK,WAAW0K,EAASlL,UAAUx8P,IAChDmsK,EAAS,CACX27F,UAAWrD,EACXmD,gBAAiBtK,EAAUnxF,OAAOurF,UAAUP,OAC5CtqR,OAAQgN,IAEN48K,EAAU,CACZ0V,OAAQA,EACRw+D,KAAM,CACJm9B,UAAWpqR,GAAIyuL,EAAO27F,UAAWxI,EAAShH,OAAO7hG,SACjDmxG,gBAAiBlqR,GAAIyuL,EAAO27F,UAAWxI,EAAShH,OAAO7hG,SACvD5pL,OAAQ6Q,GAAIyuL,EAAO27F,UAAWxI,EAAShH,OAAOnkD,KAAK15O,SAGnD0xS,EAAwBhP,GAAgBoK,EAAWvK,YAAY1wR,OAAM,SAAUqsE,GACjF,OAAQA,EAAKyzN,iBAGXC,EAAiBvB,GAAc,CACjCxN,UAAWA,EACXmK,KAAMA,EACNvK,WAAYqK,EAAWrK,WACvBoC,SAAUA,IAER9B,EAAS6O,EAAe7O,OAmB5B,MAhBa,CACXwK,MAAO,WACP5N,YAAY,EACZsN,SAAUA,EACVkD,aAAcA,EACdrD,WAAYA,EACZ9wG,QAASA,EACT5vJ,QAAS4vJ,EACT01G,sBAAuBA,EACvB3O,OAAQA,EACRuD,cAZkBsL,EAAetL,cAajCuL,aAAc9O,EACd8B,SAAUA,EACVoF,kBAAmB,KACnBzE,mBAAoB,MAMtB,IAAIp6E,EADN,GAAoB,wBAAhB57L,EAAOhrB,KAGT,MAAoB,eAAhB8mC,EAAMiiQ,OAA0C,iBAAhBjiQ,EAAMiiQ,MACjCjiQ,GAGS,aAAhBA,EAAMiiQ,OAAwIh7R,GAAU,GAE5I67B,EAAS,CACrBm/P,MAAO,cACNjiQ,IAAQ8/K,EAAY,IAAa,MAAY,aAAcA,KAKhE,GAAoB,2BAAhB57L,EAAOhrB,KAET,MADkB,eAAhB8mC,EAAMiiQ,OAA0C,iBAAhBjiQ,EAAMiiQ,OAA0Jh7R,GAAU,GA9L3K,SAAUo4B,GAC7C,IAAIygL,EAAW0mF,EAEXxmQ,EAAQX,EAAKW,MACbymQ,EAAYpnQ,EAAKonQ,UAEjBC,EAAmBD,EAAUE,SAAS3kS,KAAI,SAAUsH,GACtD,IAAIZ,EAAWs3B,EAAMwhQ,WAAWvK,WAAW3tR,EAAO87Q,aAElD,OADeoR,GAAgB9tR,EAAUY,EAAOipR,WAI9C0E,EAAan0P,EAAS,GAAI9C,EAAMwhQ,WAAWvK,WAAYF,GAAe2P,IAEtEE,EAAmB1P,GAAegO,GAAgC,CACpEC,UAAWsB,EAAUtB,UACrBC,kBAAmBnO,EACnBsC,SAAUv5P,EAAMu5P,YAGdpC,EAAar0P,EAAS,GAAI9C,EAAMwhQ,WAAWrK,WAAYyP,GAE3DH,EAAUI,SAASnhS,SAAQ,SAAUu0B,UAC5Bk9P,EAAWl9P,MAEpB,IAAIunQ,EAAa,CACfvK,WAAYA,EACZE,WAAYA,GAEV2P,EAAY1F,GAAkBphQ,EAAMy3P,QACpCsP,EAAUD,EAAYtF,EAAWvK,WAAW6P,GAAa,KACzDvP,EAAYiK,EAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAC3DynQ,EAAOF,EAAWvK,WAAWj3P,EAAM2hQ,SAASlL,UAAUx8P,IAEtDqsQ,EAAiBvB,GAAc,CACjCxN,UAAWA,EACXmK,KAAMA,EACNvK,WAAYA,EACZoC,SAAUv5P,EAAMu5P,WAEdgN,EAAeD,EAAe7O,OAC9BuD,EAAgBsL,EAAetL,cAE/BI,EAAiB2L,GAAWA,EAAQpL,iBAAmB37P,EAAMy3P,OAAS8O,EACtE9O,EAASqL,GAAc,CACzBC,WAAY/iQ,EAAMc,QAAQ8jO,KAAK99P,OAC/BywR,UAAWiK,EAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAC1Dk9P,WAAYqK,EAAWrK,WACvBF,WAAYuK,EAAWvK,WACvBmE,eAAgBA,EAChB7B,SAAUv5P,EAAMu5P,SAChByB,cAAeA,IAIbgM,EAAgBlkQ,EAAS,CAC3Bm/P,MAAO,YACNjiQ,IAAQ8/K,EAAY,IAAa,MAAY,WAAYA,EAAU23E,OAASA,EAAQ33E,EAAUymF,aAAeA,EAAczmF,EAAU0hF,WAAaA,EAAY1hF,EAAUk7E,cAAgBA,EAAel7E,EAAUo6E,oBAAqB,EAAOp6E,IAEhP,MAAoB,eAAhB9/K,EAAMiiQ,MACD+E,EAGSlkQ,EAAS,CACzBm/P,MAAO,gBACN+E,IAAgBR,EAAY,IAAa,MAAY,eAAgBA,EAAUjiL,OAASvkF,EAAMukF,OAAQiiL,EAAUS,WAAY,EAAOT,IA8H7HU,CAA8B,CACnClnQ,MAAOA,EACPymQ,UAAWviR,EAAOgc,UAItB,GAAoB,SAAhBhc,EAAOhrB,KAAiB,CAC1B,GAAoB,iBAAhB8mC,EAAMiiQ,MACR,OAAOjiQ,EAGRgiQ,GAAkBhiQ,IAA4H/4B,GAAU,GACzJ,IAAIkgS,EAAmBjjR,EAAOgc,QAAQkmK,OAEtC,OAAI1S,GAAQyzG,EAAkBnnQ,EAAMc,QAAQslK,OAAO27F,WAC1C/hQ,EAGF12B,GAAO,CACZ02B,MAAOA,EACP0+P,gBAAiByI,EACjB1P,OAAQmO,GAAW5lQ,GAASA,EAAMy3P,OAAS,OAI/C,GAAoB,4BAAhBvzQ,EAAOhrB,KAAoC,CAC7C,GAAoB,iBAAhB8mC,EAAMiiQ,MACR,OAAO+D,GAAwBhmQ,GAGjC,GAAoB,eAAhBA,EAAMiiQ,MACR,OAAO+D,GAAwBhmQ,GAGhCgiQ,GAAkBhiQ,IAA4H/4B,GAAU,GACzJ,IAAImgS,EAAmBljR,EAAOgc,QAC1BjG,EAAKmtQ,EAAiBntQ,GACtBy8P,EAAY0Q,EAAiB1Q,UAC7B1wQ,EAASga,EAAMwhQ,WAAWvK,WAAWh9P,GAEzC,IAAKjU,EACH,OAAOga,EAGT,IAAIm2P,EAAWK,GAAgBxwQ,EAAQ0wQ,GACvC,OAAOmP,GAAoB7lQ,EAAOm2P,GAAU,GAG9C,GAAoB,gCAAhBjyQ,EAAOhrB,KAAwC,CACjD,GAAoB,iBAAhB8mC,EAAMiiQ,MACR,OAAOjiQ,EAGRgiQ,GAAkBhiQ,IAAiI/4B,GAAU,GAC9J,IAAIogS,EAAmBnjR,EAAOgc,QAC1BonQ,EAAMD,EAAiBptQ,GACvB0xK,EAAY07F,EAAiB17F,UAC7B47F,EAAUvnQ,EAAMwhQ,WAAWvK,WAAWqQ,GACzCC,GAA2ItgS,GAAU,GACpJsgS,EAAQ57F,YAAcA,GAAgM1kM,GAAU,GAElO,IAAI08R,EAAU7gQ,EAAS,GAAIykQ,EAAS,CAClC57F,UAAWA,IAGb,OAAOk6F,GAAoB7lQ,EAAO2jQ,GAAS,GAG7C,GAAoB,wCAAhBz/Q,EAAOhrB,KAAgD,CACzD,GAAoB,iBAAhB8mC,EAAMiiQ,MACR,OAAOjiQ,EAGRgiQ,GAAkBhiQ,IAAiI/4B,GAAU,GAC9J,IAAIugS,EAAmBtjR,EAAOgc,QAC1BunQ,EAAOD,EAAiBvtQ,GACxB0hQ,EAAmB6L,EAAiB7L,iBACpC+L,EAAW1nQ,EAAMwhQ,WAAWvK,WAAWwQ,GAC1CC,GAAsJzgS,GAAU,GAC/JygS,EAAS/L,mBAAqBA,GAA6N10R,GAAU,GAEvQ,IAAI0gS,EAAW7kQ,EAAS,GAAI4kQ,EAAU,CACpC/L,iBAAkBA,IAGpB,OAAOkK,GAAoB7lQ,EAAO2nQ,GAAU,GAG9C,GAAoB,0BAAhBzjR,EAAOhrB,KAAkC,CAC3C,GAAoB,iBAAhB8mC,EAAMiiQ,OAA4C,mBAAhBjiQ,EAAMiiQ,MAC1C,OAAOjiQ,EAGRgiQ,GAAkBhiQ,IAAqH/4B,GAAU,GACjJ+4B,EAAMomQ,uBAAkJn/R,GAAU,GACnK,IAAI2gS,EAAa1jR,EAAOgc,QAAQw2P,UAEhC,GAAIhjG,GAAQ1zJ,EAAMu5P,SAAShH,OAAOzxP,QAAS8mQ,GACzC,OAAO5B,GAAwBhmQ,GAGjC,IAAI6nQ,EAAYxK,GAAer9P,EAAMu5P,SAAUqO,GAE/C,OAAIhC,GAAW5lQ,GACN4kQ,GAAY,CACjB5kQ,MAAOA,EACPu5P,SAAUsO,IAIPv+R,GAAO,CACZ02B,MAAOA,EACPu5P,SAAUsO,IAId,GAAoB,+BAAhB3jR,EAAOhrB,KAAuC,CAChD,IAAK8oS,GAAkBhiQ,GACrB,OAAOA,EAGT,IAAIkgQ,EAAYh8Q,EAAOgc,QAAQggQ,UAE/B,GAAIxsG,GAAQwsG,EAAWlgQ,EAAMu5P,SAAShH,OAAOv8R,KAC3C,OAAOgqC,EAGT,IAAIw/P,EAAgB18P,EAAS,GAAI9C,EAAMu5P,SAAU,CAC/ChH,OAAQzvP,EAAS,GAAI9C,EAAMu5P,SAAShH,OAAQ,CAC1Cv8R,IAAKkqS,MAIT,OAAOp9P,EAAS,CACdm/P,MAAO,YACNjiQ,EAAO,CACRu5P,SAAUiG,IAId,GAAoB,YAAhBt7Q,EAAOhrB,MAAsC,cAAhBgrB,EAAOhrB,MAAwC,cAAhBgrB,EAAOhrB,MAAwC,eAAhBgrB,EAAOhrB,KAAuB,CAC3H,GAAoB,eAAhB8mC,EAAMiiQ,OAA0C,iBAAhBjiQ,EAAMiiQ,MACxC,OAAOjiQ,EAGS,aAAhBA,EAAMiiQ,OAA0Ih7R,GAAU,GAE5J,IAAI6gS,EAAWzG,GAAgB,CAC7BrhQ,MAAOA,EACP9mC,KAAMgrB,EAAOhrB,OAGf,OAAK4uS,EAIEx+R,GAAO,CACZ02B,MAAOA,EACPy3P,OAAQqQ,EAASrQ,OACjBiH,gBAAiBoJ,EAASpJ,gBAC1BC,kBAAmBmJ,EAASnJ,oBAPrB3+P,EAWX,GAAoB,iBAAhB9b,EAAOhrB,KAAyB,CAClC,IAAIstS,EAEAjiL,EAASrgG,EAAOgc,QAAQqkF,OAO5B,MANkB,eAAhBvkF,EAAMiiQ,OAA4Jh7R,GAAU,GAE/J67B,EAAS,CACtBm/P,MAAO,gBACNjiQ,IAAQwmQ,EAAY,IAAa,MAAY,eAAgBA,EAAUS,WAAY,EAAMT,EAAUjiL,OAASA,EAAQiiL,IAKzH,GAAoB,iBAAhBtiR,EAAOhrB,KAAyB,CAClC,IAAI6uS,EAAmB7jR,EAAOgc,QAC1B++N,EAAY8oC,EAAiB9oC,UAC7B+oC,EAAeD,EAAiBC,aAChCC,EAAsBF,EAAiBE,oBAS3C,MARkB,aAAhBjoQ,EAAMiiQ,OAAwC,iBAAhBjiQ,EAAMiiQ,OAAwIh7R,GAAU,GACzK,CACbg7R,MAAO,iBACPhjC,UAAWA,EACX+oC,aAAcA,EACdC,oBAAqBA,EACrBzG,WAAYxhQ,EAAMwhQ,YAKtB,MAAoB,kBAAhBt9Q,EAAOhrB,KAEF,CACL+oS,MAAO,OACPhjC,UAHe/6O,EAAOgc,QAAQ++N,UAI9BinC,aAAa,GAIVlmQ,GAqBLkoQ,GAAuB,SAA8BlkR,GACvD,MAAO,CACL9qB,KAAM,yBACNgnC,QAASlc,IAGTmkR,GAAqB,WACvB,MAAO,CACLjvS,KAAM,sBACNgnC,QAAS,OAGTkoQ,GAAwB,SAA+BpkR,GACzD,MAAO,CACL9qB,KAAM,0BACNgnC,QAASlc,IAGTqkR,GAA2B,SAAkCrkR,GAC/D,MAAO,CACL9qB,KAAM,8BACNgnC,QAASlc,IAGTskR,GAAkC,SAAyCtkR,GAC7E,MAAO,CACL9qB,KAAM,sCACNgnC,QAASlc,IAGTukR,GAAO,SAAcvkR,GACvB,MAAO,CACL9qB,KAAM,OACNgnC,QAASlc,IAeTwkR,GAAS,WACX,MAAO,CACLtvS,KAAM,UACNgnC,QAAS,OAGTuoQ,GAAW,WACb,MAAO,CACLvvS,KAAM,YACNgnC,QAAS,OAGTwoQ,GAAY,WACd,MAAO,CACLxvS,KAAM,aACNgnC,QAAS,OAGTyoQ,GAAW,WACb,MAAO,CACLzvS,KAAM,YACNgnC,QAAS,OAeT0oQ,GAAe,SAAsB5kR,GACvC,MAAO,CACL9qB,KAAM,gBACNgnC,QAASlc,IAGT8rK,GAAO,SAAc9rK,GACvB,MAAO,CACL9qB,KAAM,OACNgnC,QAASlc,IAST6kR,GAAwB,WAC1B,MAAO,CACL3vS,KAAM,0BACNgnC,QAAS,OAyCb,IA6EI4oQ,GAEI,0BAEJhU,GACO,CACPhlG,KAAM,EACNi5G,UAAW,IAHXjU,GAKK,CACLhlG,KAAM,KAQNk5G,GAJW,GAI+B,KAjB/B,6BAkBXv7K,GAAc,CAChBw7K,MAAO,WAAaD,GACpBE,KAAM,aAAeF,GAAoB,aAAeA,GACxDl5G,KAAM,SAAcpiE,GAClB,IAAIy7K,EAASz7K,EAAW,KAAOo7K,GAC/B,MAAO,aAAeK,EAAS,aAAeA,GAEhDC,YAAa,aAAeJ,GAC5BhlL,YAAa,UAAYglL,GAAoB,WAAaA,GAAoB,YAAcA,IAG1FK,GAAS,SAAgBviS,GAC3B,OAAO4sL,GAAQ5sL,EAAQgN,IAAU,KAAO,aAAehN,EAAO+J,EAAI,OAAS/J,EAAO09B,EAAI,OAGpF4mJ,GACMi+G,GADNj+G,GAEI,SAActkL,EAAQwiS,GAC1B,IAAI5qJ,EAAY2qJ,GAAOviS,GAEvB,OAAK43I,EAIA4qJ,EAIE5qJ,EAAY,UAAYo2I,GAAchlG,KAAO,IAH3CpxC,EAJA,MAWT6qJ,GApCW,IAqCXC,GApCW,IAqCXC,GAAgBD,GAAcD,GAqF9BG,GAAU,SAAUrqQ,GACtB,IAAIM,EAAWN,EAAKM,SAChBgE,EAAWtE,EAAKsE,SACpB,OAAO,SAAU5qC,GACf,OAAO,SAAUmrB,GACf,GAAoB,SAAhBA,EAAOhrB,KAAX,CAKA,IAAI8mC,EAAQL,IACR4kF,EAASrgG,EAAOgc,QAAQqkF,OAE5B,GAAoB,eAAhBvkF,EAAMiiQ,OAOV,GAAoB,SAAhBjiQ,EAAMiiQ,MAAV,CAIuC,iBAAhBjiQ,EAAMiiQ,OAA4BjiQ,EAAMinQ,WACgFhgS,GAAU,GACvI,aAAhB+4B,EAAMiiQ,OAAwC,iBAAhBjiQ,EAAMiiQ,OAA+Hh7R,GAAU,GAC/K,IAAI06R,EAAW3hQ,EAAM2hQ,SACjBH,EAAaxhQ,EAAMwhQ,WACnBjK,EAAYiK,EAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAE3D0vQ,EAtEW,SAAUtqQ,GAC7B,IAAI83P,EAAa93P,EAAK83P,WAClB5yK,EAASllF,EAAKklF,OACdqlL,EAAavqQ,EAAKuqQ,WAClBlI,EAAOriQ,EAAKqiQ,KACZnI,EAAWl6P,EAAKk6P,SAChBgN,EAAelnQ,EAAKknQ,aAExB,OAAKqD,EAAWt9G,IAAiB,SAAX/nE,EAcK,YAAvBqlL,EAAWt9G,GAAGpzL,KACT,CACLu+R,OAAQmS,EACRC,wBAAwB,GAQrB,CACLpS,OALoB30P,EAAS,GAAI8mQ,EAAY,CAC7C1R,UAAWJ,KAKX+R,wBAAwB,GAnBjB,CACLpS,OARyBgN,GAAU,CACnCtN,WAAYA,EACZM,OAAQ8O,EACRz/F,YAAa46F,EACbnI,SAAUA,EACVW,oBAAoB,IAIpB2P,wBAAwB,GAoDHC,CAAc,CACjCvlL,OAAQA,EACRqlL,WAAY5pQ,EAAMy3P,OAClBuD,cAAeh7P,EAAMg7P,cACrBuL,aAAcvmQ,EAAMumQ,aACpB7E,KAAM1hQ,EAAMwhQ,WAAWvK,WAAWj3P,EAAM2hQ,SAASlL,UAAUx8P,IAC3Ds/P,SAAUv5P,EAAMu5P,SAChBpC,WAAYn3P,EAAMwhQ,WAAWrK,aAE3BM,EAASkS,EAAelS,OACxBoS,EAAyBF,EAAeE,uBAExC/iG,EAAc+iG,EAAyBrS,GAAkBC,GAAU,KACnE3C,EAAU+U,EAAyBnS,GAAcD,GAAU,KAC3DxxQ,EAAS,CACX9wB,MAAOwsS,EAASpK,UAAUpiS,MAC1BiwR,YAAauc,EAASlL,UAAUx8P,IAE9BrtB,EAAS,CACXm4Q,YAAawS,EAAU5lL,WAAW13E,GAClC/gC,KAAMq+R,EAAU5lL,WAAWz4G,KAC3B+sB,OAAQA,EACRs+F,OAAQA,EACRyP,KAAMh0F,EAAM6kQ,aACZ/9F,YAAaA,EACbguF,QAASA,GAEPmT,EAxHoB,SAAU5oQ,GACtC,IAAIo4P,EAASp4P,EAAKo4P,OACdF,EAAYl4P,EAAKk4P,UACjBiK,EAAaniQ,EAAKmiQ,WAClBjI,EAAWl6P,EAAKk6P,SAChByB,EAAgB37P,EAAK27P,cACrB7D,EAAaqK,EAAWrK,WACxBF,EAAauK,EAAWvK,WACxB7R,EAAcgc,GAAkB3J,GAChC3wF,EAAcs+E,EAAc6R,EAAW7R,GAAe,KACtDsc,EAAOzK,EAAWM,EAAU5lL,WAAWyzK,aACvC2kB,EAAkBpF,GAAyB,CAC7ClN,OAAQA,EACRF,UAAWA,EACXJ,WAAYA,EACZ6D,cAAeA,EACfvE,UAAW3vF,GAAe46F,EAC1BnI,SAAUA,IAGZ,OADahhR,GAASwxR,EAAiBxS,EAAUnxF,OAAOurF,UAAUP,QAqGpC4Y,CAAuB,CAC/CvS,OAAQA,EACRF,UAAWA,EACXiK,WAAYA,EACZjI,SAAUv5P,EAAMu5P,SAChByB,cAAeh7P,EAAMg7P,gBAEnB/7B,EAAY,CACd0iC,SAAU3hQ,EAAM2hQ,SAChB3G,cAAeh7P,EAAMg7P,cACrBpuR,OAAQA,EACR6qR,OAAQA,GAIV,IAF2B/jG,GAAQ1zJ,EAAMc,QAAQslK,OAAOt/L,OAAQmhS,IAAwB5xS,QAAQuW,EAAOkoR,SAEvG,CAOA,IAAIkT,EAlKa,SAAU3oQ,GAC/B,IAAIyB,EAAUzB,EAAKyB,QACfgmK,EAAcznK,EAAKynK,YACnBviF,EAASllF,EAAKklF,OACd0lL,EAAa1U,GAASz0P,EAASgmK,GAEnC,GAAImjG,GAAc,EAChB,OAAOV,GAGT,GAAIU,GAZsB,KAaxB,OAAOT,GAGT,IACI97K,EAAW67K,GAAcE,IADZQ,EAhBS,MAmB1B,OAAOtvS,QADuB,WAAX4pH,EAjBI,GAiBkBmJ,EAAgCA,GAC9C0lI,QAAQ,IAiJZ82C,CAAgB,CACjCppQ,QAASd,EAAMc,QAAQslK,OAAOt/L,OAC9BggM,YAAamhG,EACb1jL,OAAQA,IAOV5gF,EArXY,SAAqB3f,GACrC,MAAO,CACL9qB,KAAM,eACNgnC,QAASlc,GAkXEmmR,CALE,CACTlC,oBAAqBA,EACrBD,aAAcA,EACd/oC,UAAWA,UAdXt7N,EAASilQ,GAAa,CACpB3pC,UAAWA,WA7Dbt7N,EAvRU,SAAqB3f,GACrC,MAAO,CACL9qB,KAAM,eACNgnC,QAASlc,GAoRIomR,CAAY,CACnB7lL,OAAQA,UATVxrH,EAAKmrB,MAyFTmmR,GAAmB,WACrB,MAAO,CACLx5R,EAAG6W,OAAO8qQ,YACVhuP,EAAG9c,OAAO+qQ,cAqBd,SAAS6X,GAAkBjrQ,GACzB,IAAIkrQ,EAAiBlrQ,EAAKkrQ,eAM1B,IAxB8BjhS,EAwB1B81L,EAAY+zF,GAJhB,WACEoX,EAAeF,SAIbzhI,GAzB0Bt/J,EAyBO81L,EAxB9B,CACL00F,UAAW,SACX9uP,QAAS,CACPwlQ,SAAS,EACTC,SAAS,GAEX5uS,GAAI,SAAYskI,GACVA,EAAMn6G,SAAW0B,QAAUy4G,EAAMn6G,SAAW0B,OAAOsX,UAIvD11B,OAcAyqR,EAAStsI,EAEb,SAASijJ,IACP,OAAO3W,IAAWtsI,EAepB,MAAO,CACL1uI,MAbF,WACI2xR,KAA4HzjS,GAAU,GACxI8sR,EAASP,EAAW9rQ,OAAQ,CAACkhJ,KAY7B+hI,KATF,WACGD,KAAuHzjS,GAAU,GAClIm4L,EAAUv6K,SACVkvQ,IACAA,EAAStsI,GAMTijJ,SAAUA,GAId,IAIIE,GAAkB,SAAUvsQ,GAC9B,IAAIL,EAAWssQ,GAAkB,CAC/BC,eAAgB,SAAwB7T,GACtCr4P,EAAMsF,SApeH,CACLzqC,KAAM,wBACNgnC,QAkeoC,CAChCw2P,UAAWA,QAIjB,OAAO,SAAU39R,GACf,OAAO,SAAUmrB,GACV8Z,EAAS0sQ,YAA8B,oBAAhBxmR,EAAOhrB,MACjC8kC,EAASjlB,QAGPilB,EAAS0sQ,YAlBH,SAAmBxmR,GACjC,MAAuB,kBAAhBA,EAAOhrB,MAA4C,iBAAhBgrB,EAAOhrB,MAA2C,UAAhBgrB,EAAOhrB,KAiBpD2xS,CAAU3mR,IACnC8Z,EAAS2sQ,OAGX5xS,EAAKmrB,MAmCP4mR,GAAmB,WACrB,IAAInoS,EAAU,GAsCd,MAAO,CACLgV,IAzBQ,SAAa9b,GACrB,IAAIkuL,EAAUl4I,YAAW,WACvB,OAdU,SAAiBk4I,GAC7B,IAAI50L,EAAQ6pB,GAAUrc,GAAS,SAAUiwE,GACvC,OAAOA,EAAKm3G,UAAYA,MAEb,IAAX50L,GAAmG8R,GAAU,GAEzFtE,EAAQyF,OAAOjT,EAAO,GAChB,GAEtByoC,WAKG8hK,CAAQ3V,MAEb9tL,EAAQ,CACV8tL,QAASA,EACTnsJ,SAAU/hC,GAEZ8G,EAAQyC,KAAKnJ,IAkBb6uL,MAfU,WACV,GAAKnoL,EAAQ9H,OAAb,CAIA,IAAIkwS,EAAU,GAAGzmS,OAAO3B,GACxBA,EAAQ9H,OAAS,EACjBkwS,EAAQrlS,SAAQ,SAAUzJ,GACxBsjI,aAAatjI,EAAM8tL,SACnB9tL,EAAM2hC,kBA0CRotQ,GAAc,SAAqB1tS,EAAKzB,GAE1CA,KAIEovS,GAAe,SAAsBtJ,EAAU3tK,GACjD,MAAO,CACL+wJ,YAAa4c,EAASpK,UAAUt9P,GAChC/gC,KAAMyoS,EAASlL,UAAUv9R,KACzB+sB,OAAQ,CACNm/P,YAAauc,EAASlL,UAAUx8P,GAChC9kC,MAAOwsS,EAASpK,UAAUpiS,OAE5B6+H,KAAMA,IAIN0rE,GAAU,SAAiBwrG,EAAWl3P,EAAMm3P,EAAUC,GACxD,GAAKF,EAAL,CAKA,IAAIG,EAnIqB,SAAUF,GACnC,IAAIG,GAAY,EACZC,GAAY,EACZC,EAAY35P,YAAW,WACzB05P,GAAY,KAGV3+R,EAAS,SAAgBy9B,GACvBihQ,GAKAC,IAKJD,GAAY,EACZH,EAAS9gQ,GACTk1F,aAAaisK,KAOf,OAJA5+R,EAAO0+R,UAAY,WACjB,OAAOA,GAGF1+R,EAwGU6+R,CAAoBN,GAIrCD,EAAUl3P,EAHK,CACbm3P,SAAUE,IAIPA,EAAWC,aACdH,EAASC,EAAkBp3P,SAX3Bm3P,EAASC,EAAkBp3P,KAyI3B03P,GAAc,SAAUC,EAAeR,GACzC,IAAIS,EA3Hc,SAAUD,EAAeR,GAC3C,IAAIU,EAAef,KACfgB,EAAW,KAuFXh8G,EAAO,SAAcljL,GACtBk/R,GAAqI7kS,GAAU,GAChJ6kS,EAAW,KACXd,GAAY,GAAa,WACvB,OAAOtrG,GAAQisG,IAAgBI,UAAWn/R,EAAQu+R,EAAUnW,QAkBhE,MAAO,CACLgX,cA5GkB,SAAuBjnB,EAAa/wJ,GACpD83K,GAAgJ7kS,GAAU,GAC5J+jS,GAAY,GAAmB,WAC7B,IAAInvS,EAAK8vS,IAAgBM,gBAErBpwS,GAKFA,EAJa,CACXkpR,YAAaA,EACb/wJ,KAAMA,QAqGZk4K,YA9FgB,SAAqBvK,EAAU3tK,GAC7C83K,GAAkJ7kS,GAAU,GAC9J+jS,GAAY,GAAqB,WAC/B,IAAInvS,EAAK8vS,IAAgBQ,kBAErBtwS,GACFA,EAAGovS,GAAatJ,EAAU3tK,QAyF9Bj7G,MApFU,SAAe4oR,EAAU3tK,GACjC83K,GAAkJ7kS,GAAU,GAC9J,IAAI+sC,EAAOi3P,GAAatJ,EAAU3tK,GAClC83K,EAAW,CACT93K,KAAMA,EACNo4K,aAAczK,EACd0K,aAAcr4P,EAAK/tB,OACnBqmR,YAAa,MAEfT,EAAal0R,KAAI,WACfqzR,GAAY,GAAe,WACzB,OAAOtrG,GAAQisG,IAAgBY,YAAav4P,EAAMm3P,EAAUnW,WA0EhE1rR,OArEW,SAAgBq4R,EAAUlK,GACrC,IAAIh1O,EAAW+0O,GAAkBC,GAC7B3C,EAAU4C,GAAcD,GAC3BqU,GAAqI7kS,GAAU,GAChJ,IAAIulS,GA/Fc,SAAyBpwR,EAAO4mO,GACpD,GAAI5mO,IAAU4mO,EACZ,OAAO,EAGT,IAAIypD,EAAmBrwR,EAAMm7Q,UAAUt9P,KAAO+oN,EAAOu0C,UAAUt9P,IAAM7d,EAAMm7Q,UAAUnS,cAAgBpiC,EAAOu0C,UAAUnS,aAAehpQ,EAAMm7Q,UAAUr+R,OAAS8pP,EAAOu0C,UAAUr+R,MAAQkjB,EAAMm7Q,UAAUpiS,QAAU6tP,EAAOu0C,UAAUpiS,MAC9Nu3S,EAAmBtwR,EAAMq6Q,UAAUx8P,KAAO+oN,EAAOyzC,UAAUx8P,IAAM7d,EAAMq6Q,UAAUv9R,OAAS8pP,EAAOyzC,UAAUv9R,KAC/G,OAAOuzS,GAAoBC,EAwFCC,CAAgBhL,EAAUmK,EAASM,cAEzDI,IACFV,EAASM,aAAezK,GAG1B,IA3H+CvlR,EAAO4mO,EA2HlD4pD,GA3HkD5pD,EA2HavgM,IA1HxD,OADoCrmC,EA2HH0vR,EAASO,eA1HxB,MAAVrpD,GAIR,MAAT5mO,GAA2B,MAAV4mO,GAId5mO,EAAMgpQ,cAAgBpiC,EAAOoiC,aAAehpQ,EAAMjnB,QAAU6tP,EAAO7tP,QAoHpEy3S,IACFd,EAASO,aAAe5pP,GAG1B,IAAIoqP,GAtHa,SAAwBzwR,EAAO4mO,GAClD,OAAa,MAAT5mO,GAA2B,MAAV4mO,GAIR,MAAT5mO,GAA2B,MAAV4mO,GAId5mO,EAAM2oQ,cAAgB/hC,EAAO+hC,aAAe3oQ,EAAMgpQ,cAAgBpiC,EAAOoiC,YA6GpD0nB,CAAehB,EAASQ,YAAaxX,GAM/D,GAJI+X,IACFf,EAASQ,YAAcxX,GAGpB0X,GAAuBI,GAAuBC,EAAnD,CAIA,IAAI74P,EAAOlR,EAAS,GAAImoQ,GAAatJ,EAAUmK,EAAS93K,MAAO,CAC7D8gK,QAASA,EACThuF,YAAarkJ,IAGfopP,EAAal0R,KAAI,WACfqzR,GAAY,GAAgB,WAC1B,OAAOtrG,GAAQisG,IAAgBoB,aAAc/4P,EAAMm3P,EAAUnW,YAqCjElqG,MAhCU,WACTghH,GAAkH7kS,GAAU,GAC7H4kS,EAAa/gH,SA+BbgF,KAAMA,EACN+kF,MArBU,WACV,GAAKi3B,EAAL,CAIA,IAAIl/R,EAASk2B,EAAS,GAAImoQ,GAAaa,EAASM,aAAcN,EAAS93K,MAAO,CAC5E8gK,QAAS,KACThuF,YAAa,KACbviF,OAAQ,WAGVurE,EAAKljL,MAeSogS,CAAarB,EAAeR,GAC5C,OAAO,SAAU9sQ,GACf,OAAO,SAAUtlC,GACf,OAAO,SAAUmrB,GACf,GAAoB,2BAAhBA,EAAOhrB,KAAX,CAKA,GAAoB,oBAAhBgrB,EAAOhrB,KAA4B,CACrC,IAAIyoS,EAAWz9Q,EAAOgc,QAAQyhQ,SAI9B,OAHAiK,EAAUM,YAAYvK,EAAUz9Q,EAAOgc,QAAQ2kQ,cAC/C9rS,EAAKmrB,QACL0nR,EAAU7yR,MAAM4oR,EAAUz9Q,EAAOgc,QAAQ2kQ,cAI3C,GAAoB,kBAAhB3gR,EAAOhrB,KAA0B,CACnC,IAAI0T,EAASsX,EAAOgc,QAAQ++N,UAAUryP,OAItC,OAHAg/R,EAAU9gH,QACV/xL,EAAKmrB,QACL0nR,EAAU97G,KAAKljL,GAMjB,GAFA7T,EAAKmrB,GAEe,UAAhBA,EAAOhrB,KAAX,CAKA,IAAI8mC,EAAQ3B,EAAMsB,WAEE,aAAhBK,EAAMiiQ,OACR2J,EAAUtiS,OAAO02B,EAAM2hQ,SAAU3hQ,EAAMy3P,aAPvCmU,EAAU/2B,aAvBV+2B,EAAUI,cAAc9nR,EAAOgc,QAAQ6kP,YAAa7gQ,EAAOgc,QAAQ2kQ,kBAqCzEoI,GAAuB,SAAU5uQ,GACnC,OAAO,SAAUtlC,GACf,OAAO,SAAUmrB,GACf,GAAoB,4BAAhBA,EAAOhrB,KAAX,CAKA,IAAI8mC,EAAQ3B,EAAMsB,WACA,mBAAhBK,EAAMiiQ,OAAqJh7R,GAAU,GACvKo3B,EAAMsF,SAASilQ,GAAa,CAC1B3pC,UAAWj/N,EAAMi/N,kBAPjBlmQ,EAAKmrB,MAaTgpR,GAA8B,SAAU7uQ,GAC1C,IAAI01P,EAAS,KACTX,EAAU,KAcd,OAAO,SAAUr6R,GACf,OAAO,SAAUmrB,GAOf,GANoB,UAAhBA,EAAOhrB,MAAoC,kBAAhBgrB,EAAOhrB,MAA4C,4BAAhBgrB,EAAOhrB,OAbvEk6R,IACFG,qBAAqBH,GACrBA,EAAU,MAGRW,IACFA,IACAA,EAAS,OAUTh7R,EAAKmrB,GAEe,iBAAhBA,EAAOhrB,KAAX,CAIA,IAAI0vK,EAAU,CACZkrH,UAAW,SACX9uP,QAAS,CACPylQ,SAAS,EACTD,SAAS,EACTx5G,MAAM,GAERn1L,GAAI,WAGkB,mBAFRwiC,EAAMsB,WAERsiQ,OACR5jQ,EAAMsF,SAjyBT,CACLzqC,KAAM,0BACNgnC,QAAS,SAmyBPkzP,EAAUE,uBAAsB,WAC9BF,EAAU,KACVW,EAASP,EAAW9rQ,OAAQ,CAACkhJ,WAyFjCukI,GAAe,SAAU9uQ,GAC3B,OAAO,SAAUtlC,GACf,OAAO,SAAUmrB,GAGf,GAFAnrB,EAAKmrB,GAEe,2BAAhBA,EAAOhrB,KAAX,CAIA,IAAIk0S,EAAkB/uQ,EAAMsB,WAEE,iBAA1BytQ,EAAgBnL,QAIhBmL,EAAgBnG,WAIpB5oQ,EAAMsF,SAASmsJ,GAAK,CAClBvrE,OAAQ6oL,EAAgB7oL,eAM5B8oL,GAAyLp/N,UACzLlC,GAAe,SAAU1sC,GAC3B,IA1zBqBiuQ,EA0zBjBC,EAAmBluQ,EAAKkuQ,iBACxBC,EAAenuQ,EAAKmuQ,aACpBC,EAAepuQ,EAAKouQ,aACpB9B,EAAgBtsQ,EAAKssQ,cACrBR,EAAW9rQ,EAAK8rQ,SAChBuC,EAAeruQ,EAAKquQ,aACxB,OAAOC,sBAAczyR,GAASmyR,GAAiBn/N,2BAh0B1Bo/N,EAg0BgDG,EA/zB9D,WACL,OAAO,SAAU10S,GACf,OAAO,SAAUmrB,GACK,oBAAhBA,EAAOhrB,MACTo0S,EAAQxB,WAGU,iBAAhB5nR,EAAOhrB,MACTo0S,EAAQM,SAAS1pR,EAAOgc,QAAQ++N,UAAUryP,OAAO23G,QAG/B,UAAhBrgG,EAAOhrB,MAAoC,kBAAhBgrB,EAAOhrB,MACpCo0S,EAAQO,UAGV90S,EAAKmrB,OA2rBkB,SAAUopR,GACvC,OAAO,WACL,OAAO,SAAUv0S,GACf,OAAO,SAAUmrB,GACK,kBAAhBA,EAAOhrB,MAA4C,UAAhBgrB,EAAOhrB,MAAoC,iBAAhBgrB,EAAOhrB,MACvEo0S,EAAQQ,iBAGV/0S,EAAKmrB,MA6GyE6pR,CAAwBR,GAv3BhG,SAAUD,GACtB,OAAO,SAAUjuQ,GACf,IAAIM,EAAWN,EAAKM,SAChBgE,EAAWtE,EAAKsE,SACpB,OAAO,SAAU5qC,GACf,OAAO,SAAUmrB,GACf,GAAoB,SAAhBA,EAAOhrB,KAAX,CAKA,IAAIitS,EAAkBjiR,EAAOgc,QACzBjG,EAAKksQ,EAAgBlsQ,GACrBykQ,EAAkByH,EAAgBzH,gBAClCmG,EAAesB,EAAgBtB,aAC/Bn0G,EAAU/wJ,IAEQ,mBAAlB+wJ,EAAQuxG,OACVt+P,EAASilQ,GAAa,CACpB3pC,UAAWvuE,EAAQuuE,aAIA,SAArBt/N,IAAWsiQ,OAAmHh7R,GAAU,GAC1I08B,EAjGC,CACLzqC,KAAM,QACNgnC,QAAS,OAgGLyD,EA5LC,CACLzqC,KAAM,yBACNgnC,QA0LkC,CAC5B6kP,YAAa9qP,EACb4qQ,aAAcA,KAEhB,IAGItqM,EAAU,CACZwqL,YAAa9qP,EACb+zQ,cALkB,CAClBC,yBAA2C,SAAjBpJ,IAOxBqJ,EAAwBZ,EAAQa,gBAAgB5zM,GAChDonM,EAAWuM,EAAsBvM,SACjCH,EAAa0M,EAAsB1M,WACnCjI,EAAW2U,EAAsB3U,SAGrC51P,EAlMC,CACLzqC,KAAM,kBACNgnC,QAgM4B,CACtByhQ,SAAUA,EACVH,WAAYA,EACZ9C,gBAAiBA,EACjBmG,aAAcA,EACdtL,SAAUA,UAzCVxgS,EAAKmrB,MAg3BkHkqR,CAAOb,GAAmB7D,GAAQuD,GAAqBC,GAA4BC,GA3DlM,SAAUO,GAC1B,OAAO,SAAUrvQ,GACf,OAAO,SAAUtlC,GACf,OAAO,SAAUmrB,GACf,GARS,SAAoBA,GACnC,MAAuB,kBAAhBA,EAAOhrB,MAA4C,iBAAhBgrB,EAAOhrB,MAA2C,UAAhBgrB,EAAOhrB,KAOzEm1S,CAAWnqR,GAGb,OAFAwpR,EAAa/C,YACb5xS,EAAKmrB,GAIP,GAAoB,oBAAhBA,EAAOhrB,KAA4B,CACrCH,EAAKmrB,GACL,IAAI8b,EAAQ3B,EAAMsB,WAGlB,MAFkB,aAAhBK,EAAMiiQ,OAA0Ih7R,GAAU,QAC5JymS,EAAa30R,MAAMinB,GAIrBjnC,EAAKmrB,GACLwpR,EAAanb,OAAOl0P,EAAMsB,eAwC+L2uQ,CAAWZ,GAAe9C,GAvG9O,SAAU0C,GACrB,IAAIiB,GAAa,EACjB,OAAO,WACL,OAAO,SAAUx1S,GACf,OAAO,SAAUmrB,GACf,GAAoB,oBAAhBA,EAAOhrB,KAKT,OAJAq1S,GAAa,EACbjB,EAAQkB,eAAetqR,EAAOgc,QAAQyhQ,SAASpK,UAAUt9P,IACzDlhC,EAAKmrB,QACLopR,EAAQmB,0BAMV,GAFA11S,EAAKmrB,GAEAqqR,EAAL,CAIA,GAAoB,UAAhBrqR,EAAOhrB,KAGT,OAFAq1S,GAAa,OACbjB,EAAQmB,0BAIV,GAAoB,kBAAhBvqR,EAAOhrB,KAA0B,CACnCq1S,GAAa,EACb,IAAI3hS,EAASsX,EAAOgc,QAAQ++N,UAAUryP,OAElCA,EAAOkoR,SACTwY,EAAQoB,eAAe9hS,EAAOm4Q,YAAan4Q,EAAOkoR,QAAQ/P,aAG5DuoB,EAAQmB,+BAsEyP/qO,CAAM8pO,GAAe9B,GAAWC,EAAeR,OAmG1T,IAAIwD,GAAgB,SAAUtvQ,GAC5B,IAAIuvQ,EAAevvQ,EAAKuvQ,aACpBC,EAAcxvQ,EAAKwvQ,YACnBtkL,EAASlrF,EAAKkrF,OACdj2C,EAAQj1C,EAAKi1C,MACb4rN,EAAY3nR,GAAS,CACvB1H,EAAGg+R,EACHrqQ,EAAGoqQ,GACF,CACD/9R,EAAGyjE,EACH9vC,EAAG+lF,IAML,MAJwB,CACtB15G,EAAG9a,KAAKC,IAAI,EAAGkqS,EAAUrvR,GACzB2zB,EAAGzuC,KAAKC,IAAI,EAAGkqS,EAAU17P,KAKzBsqQ,GAAsB,WACxB,IAAIC,EAAM/vQ,SAASz+B,gBAEnB,OADCwuS,GAAyG9nS,GAAU,GAC7G8nS,GAGLC,GAAsB,WACxB,IAAID,EAAMD,KAOV,OANgBH,GAAa,CAC3BC,aAAcG,EAAIH,aAClBC,YAAaE,EAAIF,YACjBv6N,MAAOy6N,EAAI32K,YACX7N,OAAQwkL,EAAIE,gBAoCZC,GAAqB,SAAU7vQ,GACjC,IAAIsiQ,EAAWtiQ,EAAKsiQ,SAChBqM,EAAgB3uQ,EAAK2uQ,cACrBmB,EAAW9vQ,EAAK8vQ,SAGhB5V,EArCa,WACjB,IAAIhH,EAAS8X,KACTnK,EAAY8O,KACZ1hL,EAAMilK,EAAO/tP,EACbjxB,EAAOg/Q,EAAO1hR,EACdk+R,EAAMD,KACNx6N,EAAQy6N,EAAI32K,YACZ7N,EAASwkL,EAAIE,aAqBjB,MAZe,CACbtZ,MAPUxE,EAAQ,CAClB7jK,IAAKA,EACL/5G,KAAMA,EACNC,MALUD,EAAO+gE,EAMjBi5C,OALWD,EAAM/C,IASjBgoK,OAAQ,CACN7hG,QAAS6hG,EACTzxP,QAASyxP,EACTv8R,IAAKkqS,EACL9xD,KAAM,CACJ15O,MAAOof,GACPsiR,aAActiR,MAaLs7R,GACXC,EAAe9V,EAAShH,OAAOzxP,QAC/B4gQ,EAAOC,EAASlL,UAChBQ,EAAakY,EAAS1Y,UAAU6Y,aAAa5N,EAAKxoS,MAAM8I,KAAI,SAAU/F,GACxE,OAAOA,EAAMi4R,UAAUqb,2BAA2BF,EAAcrB,MAE9D7W,EAAagY,EAAS5X,UAAU+X,aAAa3N,EAASpK,UAAUr+R,MAAM8I,KAAI,SAAU/F,GACtF,OAAOA,EAAMuzS,aAAaH,MAY5B,MALa,CACX7N,WANe,CACfrK,WAAYD,GAAeC,GAC3BF,WAAYF,GAAeE,IAK3B0K,SAAUA,EACVpI,SAAUA,IAKd,SAASkW,GAAoBN,EAAUrD,EAAU7vS,GAC/C,OAAIA,EAAM01G,WAAW13E,KAAO6xQ,EAAS7xQ,KAIjCh+B,EAAM01G,WAAWz4G,OAAS4yS,EAAS5yS,MAMV,YAFlBi2S,EAAS1Y,UAAUiZ,QAAQzzS,EAAM01G,WAAWyzK,aAE9CzzK,WAAWqiB,MAQtB,IAAI27K,GAA0B,SAAUR,EAAUjb,GAChD,IAAIz2R,EAAa,KACbmuS,EA3MN,SAAyBvsQ,GACvB,IAAI8vQ,EAAW9vQ,EAAK8vQ,SAChBjb,EAAY70P,EAAK60P,UACjB0b,EAXG,CACLzK,UAAW,GACX0B,SAAU,GACVF,SAAU,IASRvT,EAAU,KAEVyc,EAAU,WACRzc,IAIJc,EAAUiU,qBACV/U,EAAUE,uBAAsB,WAC9BF,EAAU,KAEV,IAAI0c,EAAWF,EACXzK,EAAY2K,EAAS3K,UACrB0B,EAAWiJ,EAASjJ,SACpBF,EAAWmJ,EAASnJ,SAEpB3G,EAAQ+P,IAAa5K,GAAWnjS,KAAI,SAAUi4B,GAChD,OAAOk1Q,EAAS5X,UAAUmY,QAAQz1Q,GAAIu1Q,aAAa17R,OAClDrO,MAAK,SAAU9G,EAAGC,GACnB,OAAOD,EAAEgzG,WAAWx8G,MAAQyJ,EAAE+yG,WAAWx8G,SAGvCwuS,EAAUoM,IAAapJ,GAAU3kS,KAAI,SAAUi4B,GAGjD,MAAO,CACLmrP,YAAanrP,EACbs4P,OAJU4c,EAAS1Y,UAAUiZ,QAAQz1Q,GACpBi6P,UAAU8b,6BAO3BpjS,EAAS,CACXu4R,UAAWnF,EACX6G,SAAUkJ,IAAalJ,GACvBF,SAAUhD,GAEZiM,EAhDG,CACLzK,UAAW,GACX0B,SAAU,GACVF,SAAU,IA+CRzS,EAAU+b,QAAQrjS,QAsCtB,MAAO,CACL+K,IAnCQ,SAAa1b,GACrB,IAAIg+B,EAAKh+B,EAAM01G,WAAW13E,GAC1B21Q,EAAQzK,UAAUlrQ,GAAMh+B,EACxB2zS,EAAQjJ,SAAS1qS,EAAM01G,WAAWyzK,cAAe,EAE7CwqB,EAAQ/I,SAAS5sQ,WACZ21Q,EAAQ/I,SAAS5sQ,GAG1B41Q,KA2BA3nS,OAxBW,SAAgBjM,GAC3B,IAAI01G,EAAa11G,EAAM01G,WACvBi+L,EAAQ/I,SAASl1L,EAAW13E,KAAM,EAClC21Q,EAAQjJ,SAASh1L,EAAWyzK,cAAe,EAEvCwqB,EAAQzK,UAAUxzL,EAAW13E,YACxB21Q,EAAQzK,UAAUxzL,EAAW13E,IAGtC41Q,KAgBAlF,KAbS,WACJvX,IAILG,qBAAqBH,GACrBA,EAAU,KACVwc,EArFK,CACLzK,UAAW,GACX0B,SAAU,GACVF,SAAU,OAgNIuJ,CAAgB,CAC9Bhc,UAAW,CACT+b,QAAS/b,EAAUgU,qBACnBC,mBAAoBjU,EAAUiU,oBAEhCgH,SAAUA,IA8DRgB,EAAa,SAAoBhwK,GAClC1iI,GAAoIwJ,GAAU,GAC/I,IAAI6kS,EAAWruS,EAAWkkS,SAASpK,UAEhB,aAAfp3J,EAAMjnI,MACJu2S,GAAoBN,EAAUrD,EAAU3rK,EAAMzrI,QAChDk3S,EAAUj0R,IAAIwoH,EAAMzrI,OAIL,YAAfyrI,EAAMjnI,MACJu2S,GAAoBN,EAAUrD,EAAU3rK,EAAMzrI,QAChDk3S,EAAU1jS,OAAOi4H,EAAMzrI,QAiC7B,MARc,CACZ2zS,yBAjG6B,SAAkCpuQ,EAAI0xK,GAClEwjG,EAAS1Y,UAAUrpR,OAAO6sB,IAAkJhzB,GAAU,GAElLxJ,GAILy2R,EAAUmU,yBAAyB,CACjCpuQ,GAAIA,EACJ0xK,UAAWA,KAyFb28F,gCArFoC,SAAyCruQ,EAAI0hQ,GAC5El+R,IAIJ0xS,EAAS1Y,UAAUrpR,OAAO6sB,IAAwJhzB,GAAU,GAC7LitR,EAAUoU,gCAAgC,CACxCruQ,GAAIA,EACJ0hQ,iBAAkBA,MA8EpBnF,gBA9DoB,SAAyBv8P,EAAIipC,GAC5CzlE,GAIL0xS,EAAS1Y,UAAUiZ,QAAQz1Q,GAAIi6P,UAAU3B,OAAOrvN,IA0DhDklO,sBA3E0B,SAA+BnuQ,EAAIy8P,GACxDj5R,IAIJ0xS,EAAS1Y,UAAUrpR,OAAO6sB,IAA6IhzB,GAAU,GAClLitR,EAAUkU,sBAAsB,CAC9BnuQ,GAAIA,EACJy8P,UAAWA,MAoEbyX,gBAzBoB,SAAyB5zM,GAC3C98F,GAAuJwJ,GAAU,GACnK,IAAIhL,EAAQkzS,EAAS5X,UAAUmY,QAAQn1M,EAAQwqL,aAC3C2c,EAAOyN,EAAS1Y,UAAUiZ,QAAQzzS,EAAM01G,WAAWyzK,aACnDuc,EAAW,CACbpK,UAAWt7R,EAAM01G,WACjB8kL,UAAWiL,EAAK/vL,YAEdpzE,EAAc4wQ,EAASjxQ,UAAUiyQ,GAKrC,OAJA1yS,EAAa,CACXkkS,SAAUA,EACVpjQ,YAAaA,GAER2wQ,GAAkB,CACvBvN,SAAUA,EACVwN,SAAUA,EACVnB,cAAezzM,EAAQyzM,iBAUzBF,eAzDmB,WACnB,GAAKrwS,EAAL,CAIAmuS,EAAUjB,OACV,IAAIjJ,EAAOjkS,EAAWkkS,SAASlL,UAC/B0Y,EAAS1Y,UAAU6Y,aAAa5N,EAAKxoS,MAAMwM,SAAQ,SAAUzJ,GAC3D,OAAOA,EAAMi4R,UAAUkc,iBAEzB3yS,EAAW8gC,cACX9gC,EAAa,SAmDb4yS,GAAgB,SAAUrwQ,EAAO/F,GACnC,MAAoB,SAAhB+F,EAAMiiQ,OAIU,mBAAhBjiQ,EAAMiiQ,QAINjiQ,EAAMi/N,UAAUryP,OAAOm4Q,cAAgB9qP,GAIF,SAAlC+F,EAAMi/N,UAAUryP,OAAO23G,SAG5B+rL,GAAgB,SAAUptO,GAC5Bx7C,OAAO6oR,SAASrtO,EAAOryD,EAAGqyD,EAAO1+B,IAG/BgsQ,GAA0BxZ,aAAW,SAAUC,GACjD,OAAOG,GAAgBH,GAAY1yR,QAAO,SAAUkyR,GAClD,QAAKA,EAAU9qF,aAIV8qF,EAAUd,YAgBf8a,GAA8B,SAAUpxQ,GAC1C,IAAI+xP,EAAS/xP,EAAK+xP,OACdtqF,EAAcznK,EAAKynK,YACnBmwF,EAAa53P,EAAK43P,WAEtB,GAAInwF,EAAa,CACf,IAAI4pG,EAAazZ,EAAWnwF,GAE5B,OAAK4pG,EAAW/a,MAIT+a,EAHE,KAMX,IAAI5Q,EAvB2B,SAAoC95Q,EAAQixQ,GAK3E,OAJYt8Q,GAAK61R,GAAwBvZ,IAAa,SAAUR,GAE9D,OADCA,EAAUd,OAAqF1uR,GAAU,GACnGi7R,GAAkBzL,EAAUd,MAAMI,cAAlCmM,CAAiDl8Q,MAoB1C2qR,CAA2Bvf,EAAQ6F,GACnD,OAAO6I,GAGLphP,GACmB,IADnBA,GAEqB,IAFrBA,GAGc,GAHdA,GAII,SAAckyP,GAClB,OAAO76S,KAAKy1O,IAAIolE,EAAY,IAL5BlyP,GAOiB,CACjBmyP,gBAAiB,KACjBC,aAAc,KAcdC,GAAiB,SAAU1xQ,GAC7B,IAAI2xQ,EAAe3xQ,EAAK2xQ,aACpBC,EAAa5xQ,EAAK4xQ,WAClBnwQ,EAAUzB,EAAKyB,QACf2tJ,EAAQwiH,EAAaD,EAEzB,OAAc,IAAVviH,EAEK,GAGY3tJ,EAAUkwQ,GACGviH,GA6BhCqiH,GAAepyP,GAAyBoyP,aACxCI,GAASxyP,GAAyBmyP,gBA0BlCnqH,GAAY,SAAUrnJ,GACxB,IAAI8xQ,EAAiB9xQ,EAAK8xQ,eACtBj/C,EAAa7yN,EAAK6yN,WAClBk/C,EAAgB/xQ,EAAK+xQ,cACrBC,EAAyBhyQ,EAAKgyQ,uBAC9B9e,EAvDsB,SAAU4e,EAAgBj/C,GACpD,GAAIi/C,EAAiBj/C,EAAWo/C,mBAC9B,OAAO,EAGT,GAAIH,GAAkBj/C,EAAWq/C,iBAC/B,OAAO7yP,GAGT,GAAIyyP,IAAmBj/C,EAAWo/C,mBAChC,OAZY,EAed,IAAIE,EAAiCT,GAAc,CACjDC,aAAc9+C,EAAWq/C,iBACzBN,WAAY/+C,EAAWo/C,mBACvBxwQ,QAASqwQ,IAGP5e,EAAS7zO,GAAwBA,GADE,EAAI8yP,GAE3C,OAAOz7S,KAAKqjB,KAAKm5Q,GAmCJkf,CAAqBN,EAAgBj/C,GAElD,OAAe,IAAXqgC,EACK,EAGJ8e,EAIEt7S,KAAKC,IAxCW,SAAU07S,EAAgBN,GACjD,IAAIJ,EAAeI,EACfH,EAAaC,GAIbS,EAFMC,MAEUZ,EAEpB,GAAIW,GAAWT,GACb,OAAOQ,EAGT,GAAIC,EAAUb,GACZ,OAxCY,EA2Cd,IAAIe,EAAyCd,GAAc,CACzDC,aAAcF,GACdG,WAAYA,EACZnwQ,QAAS6wQ,IAEPpf,EAASmf,EAAiBhzP,GAAYmzP,GAC1C,OAAO97S,KAAKqjB,KAAKm5Q,GAkBDuf,CAAkBvf,EAAQ6e,GAnE5B,GAgEL7e,GAMPwf,GAAmB,SAAU1yQ,GAC/B,IAAImzC,EAAYnzC,EAAKmzC,UACjBw/N,EAAkB3yQ,EAAK2yQ,gBACvBZ,EAAgB/xQ,EAAK+xQ,cACrBlb,EAAO72P,EAAK62P,KACZmb,EAAyBhyQ,EAAKgyQ,uBAC9Bn/C,EAtGuB,SAAU1/K,EAAW0jN,GAOhD,MAJiB,CACfob,mBAHuB9+N,EAAU0jN,EAAKnhS,MAAQ2pD,GAI9C6yP,iBAHqB/+N,EAAU0jN,EAAKnhS,MAAQ2pD,IAoG7BuzP,CAAsBz/N,EAAW0jN,GAGlD,OAFoB8b,EAAgB9b,EAAK1gS,KAAOw8S,EAAgB9b,EAAKn9Q,OAG5D2tK,GAAS,CACdyqH,eAAgBa,EAAgB9b,EAAK1gS,KACrC08P,WAAYA,EACZk/C,cAAeA,EACfC,uBAAwBA,KAIpB,EAAI3qH,GAAS,CACnByqH,eAAgBa,EAAgB9b,EAAKn9Q,OACrCm5O,WAAYA,EACZk/C,cAAeA,EACfC,uBAAwBA,KAyBxBa,GAAUjxS,IAAM,SAAUvM,GAC5B,OAAiB,IAAVA,EAAc,EAAIA,KAEvBy9S,GAAa,SAAU9yQ,GACzB,IAAI+xQ,EAAgB/xQ,EAAK+xQ,cACrB5+N,EAAYnzC,EAAKmzC,UACjBqjN,EAAUx2P,EAAKw2P,QACfzE,EAAS/xP,EAAK+xP,OACdigB,EAAyBhyQ,EAAKgyQ,uBAC9BW,EAAkB,CACpB1kL,IAAK8jK,EAAO5sP,EAAIguC,EAAU86C,IAC1B95G,MAAOg/D,EAAUh/D,MAAQ49Q,EAAOvgR,EAChC08G,OAAQ/6C,EAAU+6C,OAAS6jK,EAAO5sP,EAClCjxB,KAAM69Q,EAAOvgR,EAAI2hE,EAAUj/D,MAEzBixB,EAAIutQ,GAAgB,CACtBv/N,UAAWA,EACXw/N,gBAAiBA,EACjBZ,cAAeA,EACflb,KAAM6C,GACNsY,uBAAwBA,IAEtBxgS,EAAIkhS,GAAgB,CACtBv/N,UAAWA,EACXw/N,gBAAiBA,EACjBZ,cAAeA,EACflb,KAAMkD,GACNiY,uBAAwBA,IAEtBr1G,EAAWk2G,GAAQ,CACrBrhS,EAAGA,EACH2zB,EAAGA,IAGL,GAAIkvJ,GAAQsI,EAAUloL,IACpB,OAAO,KAGT,IAAIs+R,EA3DqB,SAAU/yQ,GACnC,IAAImzC,EAAYnzC,EAAKmzC,UACjBqjN,EAAUx2P,EAAKw2P,QACf6b,EAAiBryQ,EAAKqyQ,eACtBW,EAAqBxc,EAAQtrK,OAAS/3C,EAAU+3C,OAChD+nL,EAAuBzc,EAAQvhN,MAAQ9B,EAAU8B,MAErD,OAAKg+N,GAAyBD,EAI1BC,GAAwBD,EACnB,KAGF,CACLxhS,EAAGyhS,EAAuB,EAAIZ,EAAe7gS,EAC7C2zB,EAAG6tQ,EAAqB,EAAIX,EAAeltQ,GATpCktQ,EAmDKa,CAAoB,CAChC//N,UAAWA,EACXqjN,QAASA,EACT6b,eAAgB11G,IAGlB,OAAKo2G,EAIE1+G,GAAQ0+G,EAASt+R,IAAU,KAAOs+R,EAHhC,MAMPI,GAAiBvxS,IAAM,SAAUvM,GACnC,OAAc,IAAVA,EACK,EAGFA,EAAQ,EAAI,GAAK,KAEtB+9S,GAAa,WACf,IAAIC,EAAe,SAAsB1sR,EAAQhwB,GAC/C,OAAIgwB,EAAS,EACJA,EAGLA,EAAShwB,EACJgwB,EAAShwB,EAGX,GAGT,OAAO,SAAUqpC,GACf,IAAIyB,EAAUzB,EAAKyB,QACf9qC,EAAMqpC,EAAKrpC,IACXktE,EAAS7jC,EAAK6jC,OACdyvO,EAAeh7R,GAAImpB,EAASoiC,GAC5B0vO,EAAU,CACZ/hS,EAAG6hS,EAAaC,EAAa9hS,EAAG7a,EAAI6a,GACpC2zB,EAAGkuQ,EAAaC,EAAanuQ,EAAGxuC,EAAIwuC,IAGtC,OAAIkvJ,GAAQk/G,EAAS9+R,IACZ,KAGF8+R,GA3BM,GA8BbC,GAAqB,SAA4BlxQ,GACnD,IAAImxQ,EAASnxQ,EAAM3rC,IACf8qC,EAAUa,EAAMb,QAChBoiC,EAASvhC,EAAMuhC,OACfltE,EAAM,CACR6a,EAAG9a,KAAKC,IAAI8qC,EAAQjwB,EAAGiiS,EAAOjiS,GAC9B2zB,EAAGzuC,KAAKC,IAAI8qC,EAAQ0D,EAAGsuQ,EAAOtuQ,IAE5BuuQ,EAAiBP,GAAetvO,GAChC0vO,EAAUH,GAAW,CACvBz8S,IAAKA,EACL8qC,QAASA,EACToiC,OAAQ6vO,IAGV,OAAKH,IAIoB,IAArBG,EAAeliS,GAAyB,IAAd+hS,EAAQ/hS,GAIb,IAArBkiS,EAAevuQ,GAAyB,IAAdouQ,EAAQpuQ,IAMpCwuQ,GAAkB,SAAyBzZ,EAAUr2N,GACvD,OAAO2vO,GAAmB,CACxB/xQ,QAASy4P,EAAShH,OAAOzxP,QACzB9qC,IAAKujS,EAAShH,OAAOv8R,IACrBktE,OAAQA,KAgBR+vO,GAAqB,SAA4Bxc,EAAWvzN,GAC9D,IAAIyyN,EAAQc,EAAUd,MAEtB,QAAKA,GAIEkd,GAAmB,CACxB/xQ,QAAS60P,EAAMpD,OAAOzxP,QACtB9qC,IAAK2/R,EAAMpD,OAAOv8R,IAClBktE,OAAQA,KA2DRgwO,GAAY,SAAU7zQ,GACxB,IAAIW,EAAQX,EAAKW,MACboxQ,EAAgB/xQ,EAAK+xQ,cACrBC,EAAyBhyQ,EAAKgyQ,uBAC9Bf,EAAejxQ,EAAKixQ,aACpB9Z,EAAkBn3P,EAAKm3P,gBACvBpF,EAASpxP,EAAMc,QAAQ8jO,KAAKi9B,gBAE5BhM,EADY71P,EAAMwhQ,WAAWrK,WAAWn3P,EAAM2hQ,SAASpK,UAAUt9P,IAC7C2qO,KAAKmtB,UAE7B,GAAI/xP,EAAMomQ,sBAAuB,CAC/B,IAEI+M,EAnDqB,SAAU9zQ,GACrC,IAAIk6P,EAAWl6P,EAAKk6P,SAChB1D,EAAUx2P,EAAKw2P,QACfzE,EAAS/xP,EAAK+xP,OACdggB,EAAgB/xQ,EAAK+xQ,cACrBC,EAAyBhyQ,EAAKgyQ,uBAC9B9e,EAAS4f,GAAU,CACrBf,cAAeA,EACf5+N,UAAW+mN,EAAS5D,MACpBE,QAASA,EACTzE,OAAQA,EACRigB,uBAAwBA,IAE1B,OAAO9e,GAAUygB,GAAgBzZ,EAAUhH,GAAUA,EAAS,KAsC9C6gB,CAAsB,CAClChC,cAAeA,EACf7X,SAJav5P,EAAMu5P,SAKnB1D,QAASA,EACTzE,OAAQA,EACRigB,uBAAwBA,IAG1B,GAAI8B,EAEF,YADA7C,EAAa6C,GAKjB,IAAI1c,EAAYga,GAA2B,CACzCrf,OAAQA,EACRtqF,YAAas6F,GAAkBphQ,EAAMy3P,QACrCR,WAAYj3P,EAAMwhQ,WAAWvK,aAG/B,GAAKR,EAAL,CAIA,IAAIvzN,EA3D0B,SAAU7jC,GACxC,IAAIo3P,EAAYp3P,EAAKo3P,UACjBZ,EAAUx2P,EAAKw2P,QACfzE,EAAS/xP,EAAK+xP,OACdggB,EAAgB/xQ,EAAK+xQ,cACrBC,EAAyBhyQ,EAAKgyQ,uBAC9B1b,EAAQc,EAAUd,MAEtB,IAAKA,EACH,OAAO,KAGT,IAAIpD,EAAS4f,GAAU,CACrBf,cAAeA,EACf5+N,UAAWmjN,EAAMI,cACjBF,QAASA,EACTzE,OAAQA,EACRigB,uBAAwBA,IAE1B,OAAO9e,GAAU0gB,GAAmBxc,EAAWlE,GAAUA,EAAS,KAwCrD8gB,CAAyB,CACpCjC,cAAeA,EACf3a,UAAWA,EACXZ,QAASA,EACTzE,OAAQA,EACRigB,uBAAwBA,IAGtBnuO,GACFszN,EAAgBC,EAAU9kL,WAAW13E,GAAIipC,KAwEzCowO,GAAsB,SAAUj0Q,GAClC,IAAIkpQ,EAAOlpQ,EAAKkpQ,KACZ/R,EAAkBn3P,EAAKm3P,gBACvB8Z,EAAejxQ,EAAKixQ,aASpBiD,EAA+B,SAAsC9c,EAAWvzN,GAClF,IAAK+vO,GAAmBxc,EAAWvzN,GACjC,OAAOA,EAGT,IAAI0vO,EA/LkB,SAA6Bnc,EAAWvzN,GAChE,IAAIyyN,EAAQc,EAAUd,MAEtB,OAAKA,GAIAsd,GAAmBxc,EAAWvzN,GAI5BuvO,GAAW,CAChB3xQ,QAAS60P,EAAMpD,OAAOzxP,QACtB9qC,IAAK2/R,EAAMpD,OAAOv8R,IAClBktE,OAAQA,IAVD,KA2LOswO,CAAoB/c,EAAWvzN,GAE7C,IAAK0vO,EAEH,OADApc,EAAgBC,EAAU9kL,WAAW13E,GAAIipC,GAClC,KAGT,IAAIuwO,EAA4Bl7R,GAAS2qD,EAAQ0vO,GAGjD,OAFApc,EAAgBC,EAAU9kL,WAAW13E,GAAIw5Q,GACzBl7R,GAAS2qD,EAAQuwO,IAI/BC,EAA4B,SAAmCtN,EAAuB7M,EAAUr2N,GAClG,IAAKkjO,EACH,OAAOljO,EAGT,IAAK8vO,GAAgBzZ,EAAUr2N,GAC7B,OAAOA,EAGT,IAAI0vO,EA/Oe,SAA0BrZ,EAAUr2N,GACzD,IAAK8vO,GAAgBzZ,EAAUr2N,GAC7B,OAAO,KAGT,IAAIltE,EAAMujS,EAAShH,OAAOv8R,IACtB8qC,EAAUy4P,EAAShH,OAAOzxP,QAC9B,OAAO2xQ,GAAW,CAChB3xQ,QAASA,EACT9qC,IAAKA,EACLktE,OAAQA,IAqOMywO,CAAiBpa,EAAUr2N,GAEzC,IAAK0vO,EAEH,OADAtC,EAAaptO,GACN,KAGT,IAAI0wO,EAAyBr7R,GAAS2qD,EAAQ0vO,GAG9C,OAFAtC,EAAasD,GACGr7R,GAAS2qD,EAAQ0wO,IA6BnC,OAzBmB,SAAsB5zQ,GACvC,IAAIu6D,EAAUv6D,EAAM2+P,kBAEpB,GAAKpkM,EAAL,CAIA,IAAIusG,EAAcs6F,GAAkBphQ,EAAMy3P,QACzC3wF,GAAsI7/L,GAAU,GACjJ,IAAI4sS,EAAqBN,EAA6BvzQ,EAAMwhQ,WAAWvK,WAAWnwF,GAAcvsG,GAEhG,GAAKs5M,EAAL,CAIA,IAAIta,EAAWv5P,EAAMu5P,SACjBua,EAAkBJ,EAA0B1zQ,EAAMomQ,sBAAuB7M,EAAUsa,GAElFC,GAjEY,SAAsB9zQ,EAAOl5B,GAC9C,IAAIs/L,EAASzuL,GAAIqoB,EAAMc,QAAQslK,OAAO27F,UAAWj7R,GACjDyhS,EAAK,CACHniG,OAAQA,IAkEV2tG,CAAa/zQ,EAAO8zQ,OAMpBE,GAAsB,SAAU30Q,GAClC,IAAIm3P,EAAkBn3P,EAAKm3P,gBACvB8Z,EAAejxQ,EAAKixQ,aACpB/H,EAAOlpQ,EAAKkpQ,KACZ0L,EAxJqB,SAAU50Q,GACnC,IAAIixQ,EAAejxQ,EAAKixQ,aACpB9Z,EAAkBn3P,EAAKm3P,gBACvB0d,EAAuB/gB,EAAQmd,GAC/B6D,EAA0BhhB,EAAQqD,GAClCsV,EAAW,KAEXsI,EAAY,SAAmBp0Q,GAChC8rQ,GAA6G7kS,GAAU,GACxH,IAAIotS,EAAYvI,EACZuF,EAAyBgD,EAAUhD,uBACnCD,EAAgBiD,EAAUjD,cAC9B8B,GAAS,CACPlzQ,MAAOA,EACPswQ,aAAc4D,EACd1d,gBAAiB2d,EACjB/C,cAAeA,EACfC,uBAAwBA,KA4C5B,MAAO,CACLt4R,MAzCY,SAAiBinB,GAE3B8rQ,GAA0H7kS,GAAU,GAEtI,IAAImqS,EAAgBQ,MAEhB0C,GAAkB,EAElBC,EAAqB,WACvBD,GAAkB,GAGpBpB,GAAS,CACPlzQ,MAAOA,EACPoxQ,cAAe,EACfC,wBAAwB,EACxBf,aAAciE,EACd/d,gBAAiB+d,IAEnBzI,EAAW,CACTsF,cAAeA,EACfC,uBAAwBiD,GAItBA,GACFF,EAAUp0Q,IAgBZ2qQ,KAZS,WACJmB,IAILoI,EAAqBrvR,SACrBsvR,EAAwBtvR,SACxBinR,EAAW,OAMXvZ,OAAQ6hB,GAwFUI,CAAoB,CACtClE,aAAcA,EACd9Z,gBAAiBA,IAEfie,EAAanB,GAAmB,CAClC/K,KAAMA,EACN+H,aAAcA,EACd9Z,gBAAiBA,IAyBnB,MALe,CACbjE,OAlBW,SAAgBvyP,GACP,aAAhBA,EAAMiiQ,QAIiB,UAAvBjiQ,EAAM6kQ,aAKL7kQ,EAAM2+P,mBAIX8V,EAAWz0Q,GARTi0Q,EAAc1hB,OAAOvyP,KAavBjnB,MAAOk7R,EAAcl7R,MACrB4xR,KAAMsJ,EAActJ,OAMpB+J,GAAa,WACf,IAAIrtD,EAAOstD,uBACX,MAAO,CACLttD,KAAMA,EACN09B,YAAa19B,EAAO,gBACpButD,UAAWvtD,EAAO,eALL,GAQbkwC,GAAY,WACd,IAAIlwC,EAAOstD,qBACX,MAAO,CACLttD,KAAMA,EACNutD,UAAWvtD,EAAO,cAClBptN,GAAIotN,EAAO,OALC,GAQZovC,GAAY,WACd,IAAIpvC,EAAOstD,qBACX,MAAO,CACLttD,KAAMA,EACNutD,UAAWvtD,EAAO,cAClBptN,GAAIotN,EAAO,OALC,GAQZwtD,GAAkB,CACpBD,UAAWD,wCASTG,GAAY,SAAmBnyJ,EAAOs4B,GACxC,OAAOt4B,EAAM3gJ,KAAI,SAAU+gJ,GACzB,IAAIruJ,EAAQquJ,EAAKnuE,OAAOqmG,GAExB,OAAKvmL,EAIEquJ,EAAKt5G,SAAW,MAAQ/0C,EAAQ,KAH9B,MAIR+lB,KAAK,MAsDNskB,GAA8C,qBAAXrX,QAAqD,qBAApBA,OAAOsX,UAAqE,qBAAlCtX,OAAOsX,SAASC,cAAgCC,kBAAkBC,YAEhL41Q,GAAU,WACZ,IAAI/+R,EAAOgpB,SAASg2Q,cAAc,QAElC,OADCh/R,GAA+G/O,GAAU,GACnH+O,GAGLi/R,GAAgB,SAAuBC,GACzC,IAAIliB,EAAKh0P,SAASC,cAAc,SAOhC,OALIi2Q,GACFliB,EAAGmiB,aAAa,QAASD,GAG3BliB,EAAG95R,KAAO,WACH85R,GAGT,SAASoiB,GAAgBR,EAAWM,GAClC,IAAItgO,EAASp1C,GAAQ,WACnB,OAvEe,SAAUo1Q,GAC3B,IApB6C1yS,EAoBzCmzS,GApByCnzS,EAoBX0yS,EAnB3B,SAAUlqF,GACf,MAAO,IAAMA,EAAY,KAAQxoN,EAAU,OAoBzCozS,EAAe,WACjB,IAAIC,EAAa,2DACjB,MAAO,CACL9rQ,SAAU4rQ,EAAYX,GAAWE,WACjChgO,OAAQ,CACN4gO,OAAQ,mJACR3H,QAAS0H,EACTzJ,SAXc,wBAYd2J,cAAeF,IARF,GAqCf5yJ,EAAQ,CAxBM,WAChB,IAAIn1B,EAAa,uBAAyBC,GAAY27K,YAAc,UACpE,MAAO,CACL3/P,SAAU4rQ,EAAY9d,GAAUqd,WAChChgO,OAAQ,CACNk3N,SAAUt+K,EACVioL,cAAejoL,EACfkoL,WAAYloL,IAPA,GAwBQ8nL,EAZR,CAChB7rQ,SAAU4rQ,EAAY5e,GAAUme,WAChChgO,OAAQ,CACN4gO,OAAQ,2BAGD,CACT/rQ,SAAU,OACVmrC,OAAQ,CACNk3N,SAAU,6OAId,MAAO,CACL0J,OAAQV,GAAUnyJ,EAAO,UACzBkrJ,QAASiH,GAAUnyJ,EAAO,WAC1BmpJ,SAAUgJ,GAAUnyJ,EAAO,YAC3B8yJ,cAAeX,GAAUnyJ,EAAO,iBAChC+yJ,WAAYZ,GAAUnyJ,EAAO,eAyBtBgzJ,CAAYf,KAClB,CAACA,IACAgB,EAAY1xQ,iBAAO,MACnB2xQ,EAAa3xQ,iBAAO,MACpB4xQ,EAAkB5zL,EAAY80K,aAAW,SAAU+J,GACrD,IAAI/N,EAAK6iB,EAAW/0Q,QACnBkyP,GAAqH/rR,GAAU,GAChI+rR,EAAG+iB,YAAchV,KACf,IACAiV,EAAiB9zL,GAAY,SAAU6+K,GACzC,IAAI/N,EAAK4iB,EAAU90Q,QAClBkyP,GAAqH/rR,GAAU,GAChI+rR,EAAG+iB,YAAchV,IAChB,IACHhiQ,IAA0B,YACrB62Q,EAAU90Q,SAAY+0Q,EAAW/0Q,UAAwG75B,GAAU,GACtJ,IAAIuuS,EAASP,GAAcC,GACvBe,EAAUhB,GAAcC,GAS5B,OARAU,EAAU90Q,QAAU00Q,EACpBK,EAAW/0Q,QAAUm1Q,EACrBT,EAAOL,aAAaR,kBAAsBC,GAC1CqB,EAAQd,aAAaR,mBAAuBC,GAC5CG,KAAUmB,YAAYV,GACtBT,KAAUmB,YAAYD,GACtBD,EAAephO,EAAO4gO,QACtBM,EAAgBlhO,EAAOi5N,SAChB,WACL,IAAI3lS,EAAS,SAAgBzT,GAC3B,IAAIqsC,EAAUrsC,EAAIqsC,QACjBA,GAA4G75B,GAAU,GACvH8tS,KAAUoB,YAAYr1Q,GACtBrsC,EAAIqsC,QAAU,MAGhB54B,EAAO0tS,GACP1tS,EAAO2tS,MAER,CAACX,EAAOc,EAAgBF,EAAiBlhO,EAAO4gO,OAAQ5gO,EAAOi5N,QAAS+G,IAC3E,IAAI9I,EAAW5pL,GAAY,WACzB,OAAO4zL,EAAgBlhO,EAAOk3N,YAC7B,CAACgK,EAAiBlhO,EAAOk3N,WACxB8B,EAAW1rL,GAAY,SAAUqC,GAMnCuxL,EALe,SAAXvxL,EAKY3vC,EAAO8gO,WAJL9gO,EAAO6gO,iBAKxB,CAACK,EAAiBlhO,EAAO6gO,cAAe7gO,EAAO8gO,aAC9C7H,EAAU3rL,GAAY,WACnB2zL,EAAW/0Q,SAIhBg1Q,EAAgBlhO,EAAOi5N,WACtB,CAACiI,EAAiBlhO,EAAOi5N,UAQ5B,OAPcruQ,GAAQ,WACpB,MAAO,CACLssQ,SAAUA,EACV8B,SAAUA,EACVC,QAASA,KAEV,CAAC/B,EAAU8B,EAAUC,IAI1B,IAAIuI,GAAmB,SAAUpjB,GAC/B,OAAOA,GAAMA,EAAGqjB,cAAgBrjB,EAAGqjB,cAAcC,YAAc5uR,QAGjE,SAAS6uR,GAAcvjB,GACrB,OAAOA,aAAcojB,GAAgBpjB,GAAIwjB,YAG3C,SAASC,GAAe7B,EAAW7vB,GACjC,IAAIt7O,EAAW,IAAMirQ,GAAWE,UAAY,KAAQA,EAAY,KAC5D8B,EAAW96S,GAAQojC,SAASg0K,iBAAiBvpK,IAEjD,IAAKitQ,EAAS77S,OAEZ,OAAO,KAGT,IAAIiiJ,EAASniI,GAAK+7R,GAAU,SAAU1jB,GACpC,OAAOA,EAAG2jB,aAAajC,GAAW3vB,eAAiBA,KAGrD,OAAKjoI,GAKAy5J,GAAcz5J,GAKZA,EARE,KAiGX,SAAS85J,KACP,IAAIj0S,EAAU,CACZw0R,WAAY,GACZF,WAAY,IAEV4f,EAAc,GAelB,SAAS/4Q,EAAOqiG,GACV02K,EAAYh8S,QACdg8S,EAAYnxS,SAAQ,SAAU+rC,GAC5B,OAAOA,EAAG0uF,MAKhB,SAAS22K,EAAkB78Q,GACzB,OAAOt3B,EAAQw0R,WAAWl9P,IAAO,KA6DnC,SAAS88Q,EAAkB98Q,GACzB,OAAOt3B,EAAQs0R,WAAWh9P,IAAO,KA4CnC,MAAO,CACLs9P,UAlGiB,CACjBhxF,SAAU,SAAkBtqM,GAC1B0G,EAAQw0R,WAAWl7R,EAAM01G,WAAW13E,IAAMh+B,EAC1C6hC,EAAO,CACL5kC,KAAM,WACNxE,MAAOuH,KAGXqN,OAAQ,SAAgBrN,EAAO+gB,GAC7B,IAAI8jB,EAAUn+B,EAAQw0R,WAAWn6Q,EAAK20F,WAAW13E,IAE5C6G,GAIDA,EAAQs2J,WAAan7L,EAAMm7L,kBAIxBz0L,EAAQw0R,WAAWn6Q,EAAK20F,WAAW13E,IAC1Ct3B,EAAQw0R,WAAWl7R,EAAM01G,WAAW13E,IAAMh+B,IAE5C+6S,WAAY,SAAoB/6S,GAC9B,IAAI8oR,EAAc9oR,EAAM01G,WAAW13E,GAC/B6G,EAAUg2Q,EAAkB/xB,GAE3BjkP,GAID7kC,EAAMm7L,WAAat2J,EAAQs2J,kBAIxBz0L,EAAQw0R,WAAWpS,GAC1BjnP,EAAO,CACL5kC,KAAM,UACNxE,MAAOuH,MAGXyzS,QA9CF,SAA0Bz1Q,GACxB,IAAIh+B,EAAQ66S,EAAkB78Q,GAE9B,OADCh+B,GAAuHgL,GAAU,GAC3HhL,GA4CPg7S,SAAUH,EACV1pS,OAAQ,SAAgB6sB,GACtB,OAAO5jC,QAAQygT,EAAkB78Q,KAEnCq1Q,aAAc,SAAsBp2S,GAClC,OAAOiL,GAAOxB,EAAQw0R,YAAY5yR,QAAO,SAAUtI,GACjD,OAAOA,EAAM01G,WAAWz4G,OAASA,OAoDrCu9R,UArCiB,CACjBlwF,SAAU,SAAkBtqM,GAC1B0G,EAAQs0R,WAAWh7R,EAAM01G,WAAW13E,IAAMh+B,GAE5C+6S,WAAY,SAAoB/6S,GAC9B,IAAI6kC,EAAUi2Q,EAAkB96S,EAAM01G,WAAW13E,IAE5C6G,GAID7kC,EAAMm7L,WAAat2J,EAAQs2J,iBAIxBz0L,EAAQs0R,WAAWh7R,EAAM01G,WAAW13E,KAE7Cy1Q,QAvBF,SAA0Bz1Q,GACxB,IAAIh+B,EAAQ86S,EAAkB98Q,GAE9B,OADCh+B,GAAuHgL,GAAU,GAC3HhL,GAqBPg7S,SAAUF,EACV3pS,OAAQ,SAAgB6sB,GACtB,OAAO5jC,QAAQ0gT,EAAkB98Q,KAEnCq1Q,aAAc,SAAsBp2S,GAClC,OAAOiL,GAAOxB,EAAQs0R,YAAY1yR,QAAO,SAAUtI,GACjD,OAAOA,EAAM01G,WAAWz4G,OAASA,OAcrCglC,UAnIF,SAAmBuT,GAEjB,OADAolQ,EAAYzxS,KAAKqsC,GACV,WACL,IAAIt8C,EAAQ0hT,EAAYr9R,QAAQi4B,IAEjB,IAAXt8C,GAIJ0hT,EAAYzuS,OAAOjT,EAAO,KA2H5B+hT,MAVF,WACEv0S,EAAQw0R,WAAa,GACrBx0R,EAAQs0R,WAAa,GACrB4f,EAAYh8S,OAAS,IAqBzB,IAAI+9Q,GAAen7O,IAAMC,cAAc,MAEnCy5Q,GAAkB,WACpB,IAAI1nO,EAAOzwC,SAASywC,KAEpB,OADCA,GAA+FxoE,GAAU,GACnGwoE,GAGL2nO,GAAiB,CACnBnhM,SAAU,WACV3hC,MAAO,MACPi2C,OAAQ,MACRh2C,OAAQ,OACRs/C,OAAQ,IACR/+C,QAAS,IACTuuC,SAAU,SACVmvJ,KAAM,gBACN,YAAa,eAqEf,IAAI6kC,GAAa55Q,IAAMC,cAAc,MAwErC,SAAS45Q,GAAOC,GACVrwR,EAKN,SAASswR,GAAmB37S,EAAI+0R,GAC9B0mB,KAWF,SAASG,KACPD,KAMF,SAASE,GAAY52Q,GACnB,IAAIrsC,EAAMyvC,iBAAOpD,GAIjB,OAHA3B,qBAAU,WACR1qC,EAAIqsC,QAAUA,KAETrsC,EA4CT,IAaIkjT,GACAC,KAAiBD,GAAiB,IAb1B,KAasD,EAAMA,GAd9D,IAcoF,EAAMA,IAChGE,GAA4B,SAAU13K,GACpCy3K,GAAcz3K,EAAM23K,UACtB33K,EAAM/F,kBAIN29K,GAAqB,WACvB,IAAI1wD,EAAO,mBAEX,MAAwB,qBAAbroN,SACFqoN,EAIO1sO,GADC,CAAC0sO,EAAM,KAAOA,EAAM,SAAWA,EAAM,MAAQA,EAAM,IAAMA,IACzC,SAAUysC,GACzC,MAAO,KAAOA,KAAa90P,aAETqoN,EAXG,GAqBzB,IAuQI2wD,GAvQAC,GAAS,CACX/+S,KAAM,QAGR,SAASg/S,GAAmB74Q,GAC1B,IAAIxa,EAASwa,EAAKxa,OACdo6O,EAAY5/N,EAAK4/N,UACjBk5C,EAAW94Q,EAAK84Q,SAChBC,EAAW/4Q,EAAK+4Q,SACpB,MAAO,CAAC,CACNtkB,UAAW,YACXj4R,GAAI,SAAYskI,GACd,IAAIha,EAASga,EAAMha,OACfkyL,EAAUl4K,EAAMk4K,QAChBC,EAAUn4K,EAAMm4K,QAEpB,GAvBc,IAuBVnyL,EAAJ,CAIA,IAAIgvK,EAAQ,CACVtkR,EAAGwnS,EACH7zQ,EAAG8zQ,GAEDrW,EAAQkW,IAEZ,GAAmB,aAAflW,EAAM/oS,KAGR,OAFAinI,EAAM/F,sBACN6nK,EAAM1/N,QAAQgmO,KAAKpT,GAIJ,YAAf8M,EAAM/oS,MAAmG+N,GAAU,GACrH,IAAIw+I,EAAUw8I,EAAM9M,MAEpB,GAvCkChD,EAuCE1sI,EAvCQ3kH,EAuCCq0P,EAtC1Cp/R,KAAKijB,IAAI8nB,EAAQjwB,EAAIshR,EAASthR,IAHZ,GAG0C9a,KAAKijB,IAAI8nB,EAAQ0D,EAAI2tP,EAAS3tP,IAHxE,EAyCrB,CAvCN,IAAwC2tP,EAAUrxP,EA2C5Cq/F,EAAM/F,iBACN,IAAI73D,EAAU0/N,EAAM1/N,QAAQg2O,UAAUpjB,GACtCijB,EAAS,CACPl/S,KAAM,WACNqpE,QAASA,QAGZ,CACDuxN,UAAW,UACXj4R,GAAI,SAAYskI,GACd,IAAI8hK,EAAQkW,IAEO,aAAflW,EAAM/oS,MAKVinI,EAAM/F,iBACN6nK,EAAM1/N,QAAQutH,KAAK,CACjB0oH,sBAAsB,IAExBv5C,KAREp6O,MAUH,CACDivQ,UAAW,YACXj4R,GAAI,SAAYskI,GACU,aAApBg4K,IAAWj/S,MACbinI,EAAM/F,iBAGRv1G,MAED,CACDivQ,UAAW,UACXj4R,GAAI,SAAYskI,GAGd,GAAmB,YAFPg4K,IAEFj/S,KAKV,OAzHO,KAyHHinI,EAAM23K,SACR33K,EAAM/F,sBACNv1G,UAIFgzR,GAAyB13K,GAVvBt7G,MAYH,CACDivQ,UAAW,SACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,SACX9uP,QAAS,CACPwlQ,SAAS,EACTC,SAAS,GAEX5uS,GAAI,WACsB,YAApBs8S,IAAWj/S,MACb2rB,MAGH,CACDivQ,UAAW,uBACXj4R,GAAI,SAAYskI,GACd,IAAI8hK,EAAQkW,IACK,SAAflW,EAAM/oS,MAAkG+N,GAAU,GAEhHg7R,EAAM1/N,QAAQk2O,0BAChB5zR,IAIFs7G,EAAM/F,mBAEP,CACD05J,UAAWikB,GACXl8S,GAAIgpB,IAmJR,SAAS6zR,MAET,IAAIC,KAAkBX,GAAkB,IAhTzB,KAgTyD,EAAMA,GAjTjE,KAiT2F,EAAMA,GA9SnG,KA8S2H,EAAMA,GA/SlI,KA+SyJ,EAAMA,IAEzK,SAASY,GAAoBr2O,EAASooO,GACpC,SAAS9lR,IACP8lR,IACApoO,EAAQ19C,SAQV,MAAO,CAAC,CACNivQ,UAAW,UACXj4R,GAAI,SAAYskI,GACd,OAnUO,KAmUHA,EAAM23K,SACR33K,EAAM/F,sBACNv1G,KApUI,KAwUFs7G,EAAM23K,SACR33K,EAAM/F,iBAdVuwK,SACApoO,EAAQutH,QApTI,KAsUN3vD,EAAM23K,SACR33K,EAAM/F,sBACN73D,EAAQkmO,YA1UF,KA8UJtoK,EAAM23K,SACR33K,EAAM/F,sBACN73D,EAAQimO,UA/UC,KAmVProK,EAAM23K,SACR33K,EAAM/F,sBACN73D,EAAQmmO,aAvVA,KA2VNvoK,EAAM23K,SACR33K,EAAM/F,sBACN73D,EAAQomO,iBAINgQ,GAAex4K,EAAM23K,SACvB33K,EAAM/F,iBAIRy9K,GAAyB13K,MAE1B,CACD2zJ,UAAW,YACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,UACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,QACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,aACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,SACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,QACXj4R,GAAIgpB,EACJmgB,QAAS,CACPwlQ,SAAS,IAEV,CACD1W,UAAWikB,GACXl8S,GAAIgpB,IAkER,IAAIg0R,GAAS,CACX3/S,KAAM,QAmSR,IAAI4/S,GAAsB,CACxBr7L,OAAO,EACP0I,QAAQ,EACR4yL,UAAU,EACVhgN,QAAQ,EACRygB,QAAQ,EACRw/L,UAAU,EACVC,OAAO,EACPC,OAAO,GAGT,SAASC,GAAuBzjQ,EAAQ5U,GACtC,GAAe,MAAXA,EACF,OAAO,EAKT,GAF0BzqC,QAAQyiT,GAAoBh4Q,EAAQs4Q,QAAQhnQ,gBAGpE,OAAO,EAGT,IAAIs4K,EAAY5pL,EAAQ61Q,aAAa,mBAErC,MAAkB,SAAdjsF,GAAsC,KAAdA,GAIxB5pL,IAAY4U,GAITyjQ,GAAuBzjQ,EAAQ5U,EAAQu4Q,eAGhD,SAASC,GAA4B/hB,EAAWp3J,GAC9C,IAAIn6G,EAASm6G,EAAMn6G,OAEnB,QAAKuwR,GAAcvwR,IAIZmzR,GAAuB5hB,EAAWvxQ,GAG3C,IAAIuzR,GAA8B,SAAUvmB,GAC1C,OAAO7B,EAAQ6B,EAAGC,yBAAyB7B,QAO7C,IAAIooB,GAAuB,WACzB,IAAInyD,EAAO,UAEX,MAAwB,qBAAbroN,SACFqoN,EAIG1sO,GADK,CAAC0sO,EAAM,oBAAqB,0BAChB,SAAU7/O,GACrC,OAAOA,KAAQiyS,QAAQtiT,cAETkwP,EAXS,GAc3B,SAASqyD,GAAgB1mB,EAAIvpP,GAC3B,OAAU,MAANupP,EACK,KAGLA,EAAGwmB,IAAsB/vQ,GACpBupP,EAGF0mB,GAAgB1mB,EAAGqmB,cAAe5vQ,GAG3C,SAASkwQ,GAAU3mB,EAAIvpP,GACrB,OAAIupP,EAAGwC,QACExC,EAAGwC,QAAQ/rP,GAGbiwQ,GAAgB1mB,EAAIvpP,GAO7B,SAASmwQ,GAA+BhF,EAAWz0K,GACjD,IA3CiB6yJ,EA2CbhtQ,EAASm6G,EAAMn6G,OAEnB,MA7CiBgtQ,EA6CFhtQ,aA5CMowR,GAAgBpjB,GAAIymB,SA8CvC,OAAO,KAGT,IAAIhwQ,EAZN,SAAqBmrQ,GACnB,MAAO,IAAMF,GAAWE,UAAY,KAAQA,EAAY,KAWzCS,CAAYT,GACvB93J,EAAS68J,GAAU3zR,EAAQyjB,GAE/B,OAAKqzG,GAIAy5J,GAAcz5J,GAKZA,EARE,KAwCX,SAAS1iB,GAAe+F,GACtBA,EAAM/F,iBAGR,SAASy/K,GAAUx6Q,GACjB,IAAIy6Q,EAAWz6Q,EAAKy6Q,SAChB7X,EAAQ5iQ,EAAK4iQ,MACb8X,EAAe16Q,EAAK06Q,aACP16Q,EAAK26Q,WAEtB,QAAKD,KAQDD,IAAa7X,EAWnB,SAASgY,GAASt4Q,GAChB,IAAIu4Q,EAAUv4Q,EAAMu4Q,QAChB77Q,EAAQsD,EAAMtD,MACd8wQ,EAAWxtQ,EAAMwtQ,SACjBpqB,EAAcpjP,EAAMojP,YAExB,GAAIm1B,EAAQC,YACV,OAAO,EAGT,IAAIl+S,EAAQkzS,EAAS5X,UAAU0f,SAASlyB,GAExC,QAAK9oR,MAKAA,EAAM+oC,QAAQ2mK,aAId0kG,GAAahyQ,EAAMsB,WAAYolP,IAOtC,SAASq1B,GAAS3xQ,GAChB,IAAIyxQ,EAAUzxQ,EAAMyxQ,QAChBtF,EAAYnsQ,EAAMmsQ,UAClBv2Q,EAAQoK,EAAMpK,MACd8wQ,EAAW1mQ,EAAM0mQ,SACjBpqB,EAAct8O,EAAMs8O,YACpBs1B,EAAkB5xQ,EAAM4xQ,gBACxBC,EAAc7xQ,EAAM6xQ,YAQxB,IAPkBL,GAAS,CACzBC,QAASA,EACT77Q,MAAOA,EACP8wQ,SAAUA,EACVpqB,YAAaA,IAIb,OAAO,KAGT,IAAI9oR,EAAQkzS,EAAS5X,UAAUmY,QAAQ3qB,GACnCiO,EAhGN,SAAuB4hB,EAAW7vB,GAChC,IAAIt7O,EAAW,IAAM8tP,GAAUqd,UAAY,KAAQA,EAAY,KAE3D2F,EAAc5/R,GADH/e,GAAQojC,SAASg0K,iBAAiBvpK,KAChB,SAAUupP,GACzC,OAAOA,EAAG2jB,aAAapf,GAAUt9P,MAAQ8qP,KAG3C,OAAKw1B,GAIAhE,GAAcgE,GAKZA,EARE,KAwFAC,CAAc5F,EAAW34S,EAAM01G,WAAW13E,IAEnD,IAAK+4P,EAEH,OAAO,KAGT,GAAIsnB,IAAgBr+S,EAAM+oC,QAAQy1Q,4BAA8BnB,GAA4BtmB,EAAIsnB,GAC9F,OAAO,KAGT,IAAII,EAAOR,EAAQS,MAAMN,GAAmB5yJ,GACxCw6I,EAAQ,WAEZ,SAAS2Y,IACP,OAAO3+S,EAAM+oC,QAAQyzQ,wBAGvB,SAASsB,IACP,OAAOG,EAAQxP,SAASgQ,GAc1B,IAAIG,EAXJ,SAAqBf,EAAUgB,GACzBjB,GAAU,CACZC,SAAUA,EACV7X,MAAOA,EACP8X,aAAcA,EACdC,YAAY,KAEZ37Q,EAAMsF,SAASm3Q,MAIuBhgS,KAAK9hB,KAAM,YAErD,SAASo1S,EAAOpqR,GACd,SAASi7O,IACPi7C,EAAQ3tC,UACR01B,EAAQ,YAWV,SAAS8Y,EAAOx2L,EAAQv/E,GAStB,QARgB,IAAZA,IACFA,EAAU,CACRwzQ,sBAAsB,IAI1Bx0R,EAAKg3R,UAEDh2Q,EAAQwzQ,qBAAsB,CAChC,IAAIzkB,EAASP,EAAW9rQ,OAAQ,CAAC,CAC/BosQ,UAAW,QACXj4R,GAAIu+H,GACJp1F,QAAS,CACPgsJ,MAAM,EACNw5G,SAAS,EACTC,SAAS,MAGb54P,WAAWkiP,GAGb90B,IACA5gO,EAAMsF,SAASmsJ,GAAK,CAClBvrE,OAAQA,KAIZ,MApCc,aAAV09K,IACFhjC,IACY,aAAVgjC,GAAoHh7R,GAAU,IAGlIo3B,EAAMsF,SA5pHC,SAAc3f,GACvB,MAAO,CACL9qB,KAAM,OACNgnC,QAASlc,GAypHMi3R,CAAKj3R,EAAKk3R,iBACzBjZ,EAAQ,WA8BDn/P,EAAS,CACd4nQ,SAAU,WACR,OAAOmP,GAAU,CACfC,SAAU,WACV7X,MAAOA,EACP8X,aAAcA,EACdC,YAAY,KAGhBvB,wBAAyBmC,EACzB9qH,KAAM,SAAc9qJ,GAClB,OAAO+1Q,EAAO,OAAQ/1Q,IAExBngB,OAAQ,SAAgBmgB,GACtB,OAAO+1Q,EAAO,SAAU/1Q,KAEzBhhB,EAAKu+C,SAkFV,MAdc,CACZmoO,SAAU,WACR,OAAOmP,GAAU,CACfC,SAAU,WACV7X,MAAOA,EACP8X,aAAcA,EACdC,YAAY,KAGhBvB,wBAAyBmC,EACzBrC,UA3EF,SAAmB7Z,GACjB,IAAIyc,EAAShoB,GAAQ,SAAU/sF,GAC7By0G,GAAwB,WACtB,OAAOtS,GAAK,CACVniG,OAAQA,UAiBd,OAAOtjK,EAAS,GAbNsrQ,EAAO,CACf8M,eAAgB,CACdjhR,GAAI8qP,EACJ2Z,gBAAiBA,EACjBmG,aAAc,SAEhBmW,QAAS,WACP,OAAOG,EAAOt2R,UAEhB09C,QAAS,CACPgmO,KAAM4S,KAGe,CACvB5S,KAAM4S,KAsDRC,SAlDF,WACE,IAAI74O,EAAU,CACZimO,OAAQ,WACN,OAAOqS,EAAwBrS,KAEjCE,UAAW,WACT,OAAOmS,EAAwBnS,KAEjCD,SAAU,WACR,OAAOoS,EAAwBpS,KAEjCE,SAAU,WACR,OAAOkS,EAAwBlS,MAGnC,OAAOyF,EAAO,CACZ8M,eAAgB,CACdjhR,GAAI8qP,EACJ2Z,gBAAiB6a,GAA2BvmB,GAC5C6R,aAAc,QAEhBmW,QAASvzJ,EACTllF,QAASA,KA6BXsyM,MAzBF,WACsBglC,GAAU,CAC5BC,SAAU,WACV7X,MAAOA,EACP8X,aAAcA,EACdC,YAAY,KAIZE,EAAQ3tC,YAqBd,IAAI8uC,GAAiB,CAv9BrB,SAAwBC,GACtB,IAAIC,EAAWr3Q,iBAAO+zQ,IAClBuD,EAAkBt3Q,iBAAOujH,GACzBg0J,EAAsBj8Q,GAAQ,WAChC,MAAO,CACLs0P,UAAW,YACXj4R,GAAI,SAAqBskI,GACvB,IAAIA,EAAMu7K,kBAxIE,IA4IRv7K,EAAMha,UAINga,EAAMw7K,SAAWx7K,EAAMy7K,SAAWz7K,EAAM07K,UAAY17K,EAAM27K,QAA9D,CAIA,IAAI/2B,EAAcu2B,EAAIS,uBAAuB57K,GAE7C,GAAK4kJ,EAAL,CAIA,IAAIxiN,EAAU+4O,EAAIU,WAAWj3B,EAAa4lB,EAAM,CAC9C2P,YAAan6K,IAGf,GAAK59D,EAAL,CAIA49D,EAAM/F,iBACN,IAAI+6J,EAAQ,CACVtkR,EAAGsvH,EAAMk4K,QACT7zQ,EAAG27F,EAAMm4K,SAEXkD,EAAgB16Q,UAChBm7Q,EAAiB15O,EAAS4yN,UAG7B,CAACmmB,IACAY,EAA2B18Q,GAAQ,WACrC,MAAO,CACLs0P,UAAW,4BACXj4R,GAAI,SAAYskI,GACd,IAAIA,EAAMu7K,iBAAV,CAIA,IAAIzhR,EAAKqhR,EAAIS,uBAAuB57K,GAEpC,GAAKlmG,EAAL,CAIA,IAAI+K,EAAUs2Q,EAAIa,wBAAwBliR,GAErC+K,IAIDA,EAAQyzQ,yBAIP6C,EAAIc,WAAWniR,IAIpBkmG,EAAM/F,wBAGT,CAACkhL,IACAe,EAAmBn6L,GAAY,WAKjCs5L,EAAgB16Q,QAAU0yP,EAAW9rQ,OAAQ,CAACw0R,EAA0BT,GAJ1D,CACZjR,SAAS,EACTC,SAAS,MAGV,CAACyR,EAA0BT,IAC1B9Q,EAAOzoL,GAAY,WAGA,SAFPq5L,EAASz6Q,QAEX5nC,OAIZqiT,EAASz6Q,QAAUm3Q,GACnBuD,EAAgB16Q,UAChBu7Q,OACC,CAACA,IACAx3R,EAASq9F,GAAY,WACvB,IAAI+/K,EAAQsZ,EAASz6Q,QACrB6pQ,IAEmB,aAAf1I,EAAM/oS,MACR+oS,EAAM1/N,QAAQ19C,OAAO,CACnB2zR,sBAAsB,IAIP,YAAfvW,EAAM/oS,MACR+oS,EAAM1/N,QAAQsyM,UAEf,CAAC81B,IACA2R,EAAsBp6L,GAAY,WACpC,IAIIuxK,EAAWykB,GAAmB,CAChCrzR,OAAQA,EACRo6O,UAAW0rC,EACXwN,SAAU,WACR,OAAOoD,EAASz6Q,SAElBs3Q,SAAU,SAAkBnW,GAC1BsZ,EAASz6Q,QAAUmhQ,KAGvBuZ,EAAgB16Q,QAAU0yP,EAAW9rQ,OAAQ+rQ,EAd/B,CACZgX,SAAS,EACTD,SAAS,MAaV,CAAC3lR,EAAQ8lR,IACRsR,EAAmB/5L,GAAY,SAA0B3/C,EAAS4yN,GACxC,SAA1BomB,EAASz6Q,QAAQ5nC,MAA4H+N,GAAU,GACzJs0S,EAASz6Q,QAAU,CACjB5nC,KAAM,UACNi8R,MAAOA,EACP5yN,QAASA,GAEX+5O,MACC,CAACA,IACJv9Q,IAA0B,WAExB,OADAs9Q,IACO,WACLb,EAAgB16Q,aAEjB,CAACu7Q,KA6FN,SAA2Bf,GACzB,IAAIE,EAAkBt3Q,iBAAOw0Q,IACzB+C,EAAsBj8Q,GAAQ,WAChC,MAAO,CACLs0P,UAAW,UACXj4R,GAAI,SAAmBskI,GACrB,IAAIA,EAAMu7K,kBA9YN,KAkZAv7K,EAAM23K,QAAV,CAIA,IAAI/yB,EAAcu2B,EAAIS,uBAAuB57K,GAE7C,GAAK4kJ,EAAL,CAIA,IAAIw3B,EAAUjB,EAAIU,WAAWj3B,EAAa4lB,EAAM,CAC9C2P,YAAan6K,IAGf,GAAKo8K,EAAL,CAIAp8K,EAAM/F,iBACN,IAAIoiL,GAAc,EACdj6O,EAAUg6O,EAAQnB,WACtBI,EAAgB16Q,UAShB06Q,EAAgB16Q,QAAU0yP,EAAW9rQ,OAAQkxR,GAAoBr2O,EAASooO,GAAO,CAC/EF,SAAS,EACTD,SAAS,MATX,SAASG,IACN6R,GAAqIv1S,GAAU,GAChJu1S,GAAc,EACdhB,EAAgB16Q,UAChBu7Q,SASL,CAACf,IACAe,EAAmBn6L,GAAY,WAKjCs5L,EAAgB16Q,QAAU0yP,EAAW9rQ,OAAQ,CAAC+zR,GAJhC,CACZjR,SAAS,EACTC,SAAS,MAGV,CAACgR,IACJ18Q,IAA0B,WAExB,OADAs9Q,IACO,WACLb,EAAgB16Q,aAEjB,CAACu7Q,KA+IN,SAA0Bf,GACxB,IAAIC,EAAWr3Q,iBAAO20Q,IAClB2C,EAAkBt3Q,iBAAOujH,GACzB0wJ,EAAWj2L,GAAY,WACzB,OAAOq5L,EAASz6Q,UACf,IACCs3Q,EAAWl2L,GAAY,SAAkB+/K,GAC3CsZ,EAASz6Q,QAAUmhQ,IAClB,IACCwZ,EAAsBj8Q,GAAQ,WAChC,MAAO,CACLs0P,UAAW,aACXj4R,GAAI,SAAsBskI,GACxB,IAAIA,EAAMu7K,iBAAV,CAIA,IAAI32B,EAAcu2B,EAAIS,uBAAuB57K,GAE7C,GAAK4kJ,EAAL,CAIA,IAAIxiN,EAAU+4O,EAAIU,WAAWj3B,EAAa4lB,EAAM,CAC9C2P,YAAan6K,IAGf,GAAK59D,EAAL,CAIA,IAAI8B,EAAQ87D,EAAMs8K,QAAQ,GAGtBtnB,EAAQ,CACVtkR,EAHYwzD,EAAMg0O,QAIlB7zQ,EAHY6/B,EAAMi0O,SAKpBkD,EAAgB16Q,UAChBm7Q,EAAiB15O,EAAS4yN,UAG7B,CAACmmB,IACAe,EAAmBn6L,GAAY,WAKjCs5L,EAAgB16Q,QAAU0yP,EAAW9rQ,OAAQ,CAAC+zR,GAJhC,CACZhR,SAAS,EACTD,SAAS,MAGV,CAACiR,IACA9Q,EAAOzoL,GAAY,WACrB,IAAIphF,EAAUy6Q,EAASz6Q,QAEF,SAAjBA,EAAQ5nC,OAIS,YAAjB4nC,EAAQ5nC,MACVqmI,aAAaz+F,EAAQ47Q,kBAGvBtE,EAASS,IACT2C,EAAgB16Q,UAChBu7Q,OACC,CAACA,EAAkBjE,IAClBvzR,EAASq9F,GAAY,WACvB,IAAI+/K,EAAQsZ,EAASz6Q,QACrB6pQ,IAEmB,aAAf1I,EAAM/oS,MACR+oS,EAAM1/N,QAAQ19C,OAAO,CACnB2zR,sBAAsB,IAIP,YAAfvW,EAAM/oS,MACR+oS,EAAM1/N,QAAQsyM,UAEf,CAAC81B,IACA2R,EAAsBp6L,GAAY,WACpC,IAAIl9E,EAAU,CACZylQ,SAAS,EACTD,SAAS,GAEPxmR,EAAO,CACTa,OAAQA,EACRo6O,UAAW0rC,EACXwN,SAAUA,GAERwE,EAAenpB,EAAW9rQ,OA7LlC,SAA2Bia,GACzB,IAAI9c,EAAS8c,EAAM9c,OACfo6O,EAAYt9N,EAAMs9N,UAClBk5C,EAAWx2Q,EAAMw2Q,SACrB,MAAO,CAAC,CACNrkB,UAAW,YACX9uP,QAAS,CACPylQ,SAAS,GAEX5uS,GAAI,SAAYskI,GACd,IAAI8hK,EAAQkW,IAEZ,GAAmB,aAAflW,EAAM/oS,KAAV,CAKA+oS,EAAM2a,UAAW,EACjB,IAAIC,EAAkB18K,EAAMs8K,QAAQ,GAGhCtnB,EAAQ,CACVtkR,EAHYgsS,EAAgBxE,QAI5B7zQ,EAHYq4Q,EAAgBvE,SAK9Bn4K,EAAM/F,iBACN6nK,EAAM1/N,QAAQgmO,KAAKpT,QAbjBtwQ,MAeH,CACDivQ,UAAW,WACXj4R,GAAI,SAAYskI,GACd,IAAI8hK,EAAQkW,IAEO,aAAflW,EAAM/oS,MAKVinI,EAAM/F,iBACN6nK,EAAM1/N,QAAQutH,KAAK,CACjB0oH,sBAAsB,IAExBv5C,KAREp6O,MAUH,CACDivQ,UAAW,cACXj4R,GAAI,SAAYskI,GACU,aAApBg4K,IAAWj/S,MAKfinI,EAAM/F,iBACNv1G,KALEA,MAOH,CACDivQ,UAAW,mBACXj4R,GAAI,SAAYskI,GACd,IAAI8hK,EAAQkW,IACK,SAAflW,EAAM/oS,MAA8E+N,GAAU,GAChG,IAAIo9D,EAAQ87D,EAAMs8K,QAAQ,GAE1B,GAAKp4O,GAIcA,EAAMy4O,OAtGL,IAwGpB,CAIA,IAAIC,EAAgB9a,EAAM1/N,QAAQk2O,0BAElC,GAAmB,YAAfxW,EAAM/oS,KAQV,OAAI6jT,EACE9a,EAAM2a,cACRz8K,EAAM/F,sBAIRv1G,SAIFs7G,EAAM/F,iBAjBA2iL,GACFl4R,OAkBL,CACDivQ,UAAWikB,GACXl8S,GAAIgpB,IA6FkCm4R,CAAkBh5R,GAAOghB,GAC3Di4Q,EAAezpB,EAAW9rQ,OAhOlC,SAA2B2X,GACzB,IAAIxa,EAASwa,EAAKxa,OACdszR,EAAW94Q,EAAK84Q,SACpB,MAAO,CAAC,CACNrkB,UAAW,oBACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,SACXj4R,GAAIgpB,GACH,CACDivQ,UAAW,cACXj4R,GAAI,SAAYskI,GACdA,EAAM/F,mBAEP,CACD05J,UAAW,UACXj4R,GAAI,SAAYskI,GACU,aAApBg4K,IAAWj/S,MA9dR,KAmeHinI,EAAM23K,SACR33K,EAAM/F,iBAGRv1G,KAREA,MAUH,CACDivQ,UAAWikB,GACXl8S,GAAIgpB,IAkMkCq4R,CAAkBl5R,GAAOghB,GAE/Dw2Q,EAAgB16Q,QAAU,WACxB67Q,IACAM,OAED,CAACp4R,EAAQszR,EAAUxN,IAClBwS,EAAgBj7L,GAAY,WAC9B,IAAI+/K,EAAQkW,IACK,YAAflW,EAAM/oS,MAAmI+N,GAAU,GACrJ,IAAIs7D,EAAU0/N,EAAM1/N,QAAQg2O,UAAUtW,EAAM9M,OAC5CijB,EAAS,CACPl/S,KAAM,WACNqpE,QAASA,EACTq6O,UAAU,MAEX,CAACzE,EAAUC,IACV6D,EAAmB/5L,GAAY,SAA0B3/C,EAAS4yN,GAC9C,SAApBgjB,IAAWj/S,MAA4H+N,GAAU,GACnJ,IAAIy1S,EAAmB7qQ,WAAWsrQ,EAtPf,KAuPnB/E,EAAS,CACPl/S,KAAM,UACNi8R,MAAOA,EACP5yN,QAASA,EACTm6O,iBAAkBA,IAEpBJ,MACC,CAACA,EAAqBnE,EAAUC,EAAU+E,IAC7Cp+Q,IAA0B,WAExB,OADAs9Q,IACO,WACLb,EAAgB16Q,UAChB,IAAImhQ,EAAQkW,IAEO,YAAflW,EAAM/oS,OACRqmI,aAAa0iK,EAAMya,kBACnBtE,EAASS,QAGZ,CAACV,EAAUkE,EAAkBjE,IAChCr5Q,IAA0B,WASxB,OARay0P,EAAW9rQ,OAAQ,CAAC,CAC/BosQ,UAAW,YACXj4R,GAAI,aACJmpC,QAAS,CACPylQ,SAAS,EACTD,SAAS,QAIZ,MA2ZL,SAAS4S,GAAiBC,GACxB,IAAIzI,EAAYyI,EAAMzI,UAClBv2Q,EAAQg/Q,EAAMh/Q,MACd8wQ,EAAWkO,EAAMlO,SACjBmO,EAAgBD,EAAMC,cACtBC,EAAuBF,EAAME,qBAC7BC,EAAa,GAAGl5S,OAAOi5S,EAAuBlC,GAAiB,GAAIiC,GAAiB,IACpFpD,EAAUxiQ,oBAAS,WACrB,OA7qCJ,WACE,IAAIgjQ,EAAO,KAmBX,SAASnuC,IACNmuC,GAA+GzzS,GAAU,GAC1HyzS,EAAO,KAUT,MAAO,CACLP,UA9BF,WACE,OAAO9jT,QAAQqkT,IA8BfhQ,SA3BF,SAAkBh2S,GAChB,OAAOA,IAAUgmT,GA2BjBC,MAxBF,SAAe8C,GACX/C,GAAgHzzS,GAAU,GAC5H,IAAIy2S,EAAU,CACZD,QAASA,GAGX,OADA/C,EAAOgD,EACAA,GAmBPnxC,QAASA,EACToxC,WAZF,WACMjD,IACFA,EAAK+C,UACLlxC,OAipCKl1Q,MACN,GACCumT,EAAiB17L,GAAY,SAAwBq7D,EAAUz8I,GAC7Dy8I,EAAS82G,aAAevzP,EAAQuzP,YAClC6lB,EAAQyD,eAET,CAACzD,IACJn7Q,IAA0B,WACxB,IAAIw+I,EAAWl/I,EAAMsB,WAMrB,OALkBtB,EAAMH,WAAU,WAChC,IAAI4C,EAAUzC,EAAMsB,WACpBi+Q,EAAergI,EAAUz8I,GACzBy8I,EAAWz8I,OAGZ,CAACo5Q,EAAS77Q,EAAOu/Q,IACpB7+Q,IAA0B,WACxB,OAAOm7Q,EAAQyD,aACd,CAACzD,EAAQyD,aACZ,IAAIvB,EAAal6L,GAAY,SAAU6iK,GACrC,OAAOk1B,GAAS,CACdC,QAASA,EACT/K,SAAUA,EACV9wQ,MAAOA,EACP0mP,YAAaA,MAEd,CAACm1B,EAAS/K,EAAU9wQ,IACnB29Q,EAAa95L,GAAY,SAAU6iK,EAAa84B,EAAW74Q,GAC7D,OAAOo1Q,GAAS,CACdF,QAASA,EACT/K,SAAUA,EACVyF,UAAWA,EACXv2Q,MAAOA,EACP0mP,YAAaA,EACbs1B,gBAAiBwD,EACjBvD,YAAat1Q,GAAWA,EAAQs1Q,YAAct1Q,EAAQs1Q,YAAc,SAErE,CAAC1F,EAAWsF,EAAS/K,EAAU9wQ,IAC9B09Q,EAAyB75L,GAAY,SAAUie,GACjD,OA5UJ,SAA2Cy0K,EAAWz0K,GACpD,IAAI2c,EAAS88J,GAA+BhF,EAAWz0K,GAEvD,OAAK2c,EAIEA,EAAO65J,aAAajC,GAAW3vB,aAH7B,KAwUA+4B,CAAkClJ,EAAWz0K,KACnD,CAACy0K,IACAuH,EAA0Bj6L,GAAY,SAAUjoF,GAClD,IAAIh+B,EAAQkzS,EAAS5X,UAAU0f,SAASh9Q,GACxC,OAAOh+B,EAAQA,EAAM+oC,QAAU,OAC9B,CAACmqQ,EAAS5X,YACTwmB,EAAiB77L,EAAYg4L,EAAQyD,WAAY,CAACzD,IAClD8D,EAAgB97L,EAAYg4L,EAAQC,UAAW,CAACD,IAChDoB,EAAM97Q,GAAQ,WAChB,MAAO,CACL48Q,WAAYA,EACZJ,WAAYA,EACZD,uBAAwBA,EACxBI,wBAAyBA,EACzB4B,eAAgBA,EAChBC,cAAeA,KAEhB,CAAC5B,EAAYJ,EAAYD,EAAwBI,EAAyB4B,EAAgBC,IAvd7F1G,KA0dA,IAAK,IAAIt7S,EAAI,EAAGA,EAAIwhT,EAAW3iT,OAAQmB,IACrCwhT,EAAWxhT,GAAGs/S,GAclB,SAAS2C,GAASC,GAEhB,OADCA,EAAQp9Q,SAA2G75B,GAAU,GACvHi3S,EAAQp9Q,QAGjB,SAASq9Q,GAAIj7Q,GACX,IAAI0xQ,EAAY1xQ,EAAM0xQ,UAClBrgB,EAAerxP,EAAMqxP,aACrB6pB,EAAUl7Q,EAAMk7Q,QAChBlJ,EAAQhyQ,EAAMgyQ,MACdmJ,EAAkBn7Q,EAAMm7Q,gBACxBC,EAAep6Q,iBAAO,MAC1BuzQ,KACA,IAAI8G,EAAe7G,GAAYx0Q,GAC3ByoQ,EAAgBzpL,GAAY,WAC9B,OAzBmB,SAA0Bh/E,GAC/C,MAAO,CACL+oQ,gBAAiB/oQ,EAAM+oQ,gBACvBE,kBAAmBjpQ,EAAMipQ,kBACzBI,YAAarpQ,EAAMqpQ,YACnBR,UAAW7oQ,EAAM6oQ,UACjBgB,aAAc7pQ,EAAM6pQ,cAmBbyR,CAAiBD,EAAaz9Q,WACpC,CAACy9Q,IACApT,EAh7CN,SAAsByJ,GACpB,IAAI36Q,EAAKuF,GAAQ,WACf,OALQ,SAAeo1Q,GACzB,MAAO,oBAAsBA,EAIpB6J,CAAM7J,KACZ,CAACA,IACAngT,EAAMyvC,iBAAO,MAgCjB,OA/BA/E,qBAAU,WACR,IAAI6zP,EAAKh0P,SAASC,cAAc,OAUhC,OATAxqC,EAAIqsC,QAAUkyP,EACdA,EAAG/4P,GAAKA,EACR+4P,EAAGmiB,aAAa,YAAa,aAC7BniB,EAAGmiB,aAAa,OAAQ,OACxBniB,EAAGmiB,aAAa,cAAe,QAE/BuJ,IAAe1rB,EAAG1+K,MAAO8iM,IAEzBD,KAAiBjB,YAAYljB,GACtB,WACLnhP,YAAW,WACTslQ,KAAiBhB,YAAYnjB,GAEzBA,IAAOv+R,EAAIqsC,UACbrsC,EAAIqsC,QAAU,YAInB,CAAC7G,IACWioF,GAAY,SAAU73E,GACnC,IAAI2oP,EAAKv+R,EAAIqsC,QAETkyP,IACFA,EAAG+iB,YAAc1rQ,KAKlB,IA64CYs0Q,CAAa/J,GACxBgK,EAv4CN,SAA4BhK,EAAWyJ,GACrC,IAAIpkR,EAAKuF,GAAQ,WACf,OALU,SAAeo1Q,GAC3B,MAAO,wBAA0BA,EAIxBiK,CAAQjK,KACd,CAACA,IAeJ,OAdAz1Q,qBAAU,WACR,IAAI6zP,EAAKh0P,SAASC,cAAc,OAShC,OARA+zP,EAAG/4P,GAAKA,EACR+4P,EAAG+iB,YAAcsI,EAEjBK,IAAe1rB,EAAG1+K,MAAO,CACvBlgC,QAAS,SAGX+iO,KAAiBjB,YAAYljB,GACtB,WACLmkB,KAAiBhB,YAAYnjB,MAE9B,CAAC/4P,EAAIokR,IACDpkR,EAq3CiB6kR,CAAmBlK,EAAWyJ,GAClD5Q,EAAe2H,GAAgBR,EAAWM,GAC1C6J,EAAe78L,GAAY,SAAUh+F,GACvC+5R,GAASK,GAAc36Q,SAASzf,KAC/B,IACC86R,EAAmBx/Q,GAAQ,WAC7B,OAAOmG,6BAAmB,CACxBuiQ,qBAAsBA,GACtBE,sBAAuBA,GACvBC,yBAA0BA,GAC1BC,gCAAiCA,GACjCH,mBAAoBA,IACnB4W,KACF,CAACA,IACA5P,EAh+CN,WACE,IAAIA,EAAW3vQ,EAAQo3Q,GAAgB,IAMvC,OALAz3Q,qBAAU,WACR,OAAO,WACLm0P,sBAAsB6b,EAAS+H,UAEhC,CAAC/H,IACGA,EAy9CQ8P,GACX1R,EAAmB/tQ,GAAQ,WAC7B,OAAOmwQ,GAAuBR,EAAU6P,KACvC,CAAC7P,EAAU6P,IACVtR,EAAeluQ,GAAQ,WACzB,OAAOw0Q,GAAmBlxQ,EAAS,CACjCwtQ,aAAcA,GACd9Z,gBAAiB+W,EAAiB/W,iBACjC7wP,6BAAmB,CACpB4iQ,KAAMA,IACLwW,OACF,CAACxR,EAAiB/W,gBAAiBuoB,IAClCvR,EAjtDN,SAAyBoH,GACvB,IAAIsK,EAAah7Q,iBAAO,IACpBi7Q,EAAYj7Q,iBAAO,MACnBk7Q,EAAuBl7Q,iBAAO,MAC9Bm7Q,EAAen7Q,kBAAO,GACtBqiK,EAAWrkF,GAAY,SAAkBjoF,EAAIypC,GAC/C,IAAIznE,EAAQ,CACVg+B,GAAIA,EACJypC,MAAOA,GAGT,OADAw7O,EAAWp+Q,QAAQ7G,GAAMh+B,EAClB,WACL,IAAI0G,EAAUu8S,EAAWp+Q,QACXn+B,EAAQs3B,KAENh+B,UACP0G,EAAQs3B,MAGlB,IACCqlR,EAAep9L,GAAY,SAAsBq9L,GACnD,IAAIziK,EAAS25J,GAAe7B,EAAW2K,GAEnCziK,GAAUA,IAAW99G,SAASwgR,eAChC1iK,EAAOp5E,UAER,CAACkxO,IACAlG,EAAiBxsL,GAAY,SAAwBq7D,EAAUkiI,GAC7DN,EAAUr+Q,UAAYy8I,IACxB4hI,EAAUr+Q,QAAU2+Q,KAErB,IACChR,EAA0BvsL,GAAY,WACpCk9L,EAAqBt+Q,SAIpBu+Q,EAAav+Q,UAIlBs+Q,EAAqBt+Q,QAAUwyP,uBAAsB,WACnD8rB,EAAqBt+Q,QAAU,KAC/B,IAAIhf,EAASq9R,EAAUr+Q,QAEnBhf,GACFw9R,EAAax9R,SAGhB,CAACw9R,IACA9Q,EAAiBtsL,GAAY,SAAwBjoF,GACvDklR,EAAUr+Q,QAAU,KACpB,IAAI4+Q,EAAU1gR,SAASwgR,cAElBE,GAIDA,EAAQ/I,aAAajC,GAAW3vB,eAAiB9qP,IAIrDklR,EAAUr+Q,QAAU7G,KACnB,IAoBH,OAnBA8E,IAA0B,WAExB,OADAsgR,EAAav+Q,SAAU,EAChB,WACLu+Q,EAAav+Q,SAAU,EACvB,IAAIsyP,EAAUgsB,EAAqBt+Q,QAE/BsyP,GACFG,qBAAqBH,MAGxB,IACW5zP,GAAQ,WACpB,MAAO,CACL+mK,SAAUA,EACVioG,eAAgBA,EAChBC,wBAAyBA,EACzBC,eAAgBA,KAEjB,CAACnoG,EAAUioG,EAAgBC,EAAyBC,IA+nDpCiR,CAAgB/K,GAC/Bv2Q,EAAQmB,GAAQ,WAClB,OAAOusC,GAAY,CACjBo/N,SAAUA,EACVuC,aAAcA,EACdH,iBAAkBA,EAClBC,aAAcA,EACd7B,cAAeA,EACf8B,aAAcA,MAEf,CAACtC,EAAUuC,EAAcH,EAAkBC,EAAc7B,EAAe8B,IAQ3E6Q,EAAax9Q,QAAUzC,EACvB,IAAIuhR,EAAgB19L,GAAY,WAC9B,IAAIphF,EAAUm9Q,GAASK,GAGH,SAFRx9Q,EAAQnB,WAEVsiQ,OACRnhQ,EAAQ6C,SAl2HL,CACLzqC,KAAM,QACNgnC,QAAS,SAk2HR,IACCm0P,EAAanyK,GAAY,WAC3B,IAAIliF,EAAQi+Q,GAASK,GAAc3+Q,WACnC,OAAOK,EAAMq0P,YAA8B,mBAAhBr0P,EAAMiiQ,QAChC,IAOH1N,EANmB/0P,GAAQ,WACzB,MAAO,CACL60P,WAAYA,EACZC,SAAUsrB,KAEX,CAACvrB,EAAYurB,KAEhB,IAAIC,EAAa39L,GAAY,SAAUjoF,GACrC,OAAOo2Q,GAAa4N,GAASK,GAAc3+Q,WAAY1F,KACtD,IACC6lR,EAAuB59L,GAAY,WACrC,OAAO8/K,GAAkBic,GAASK,GAAc3+Q,cAC/C,IACCogR,EAAavgR,GAAQ,WACvB,MAAO,CACL8tQ,QAASC,EACT7pO,MAAO8pO,EACPoH,UAAWA,EACXoL,QAASH,EACT7d,kBAAmB8d,EACnBlB,kBAAmBA,EACnBzP,SAAUA,KAEX,CAACyF,EAAWrH,EAAkBC,EAAcqS,EAAYC,EAAsBlB,EAAmBzP,IAWpG,OAVAiO,GAAiB,CACfxI,UAAWA,EACXv2Q,MAAOA,EACP8wQ,SAAUA,EACVmO,cAAec,EACfb,sBAAqD,IAA/Br6Q,EAAMq6Q,uBAE9Bp+Q,qBAAU,WACR,OAAOygR,IACN,CAACA,IACGniR,IAAMwB,cAAco4Q,GAAWj4Q,SAAU,CAC9C1qC,MAAOqrT,GACNtiR,IAAMwB,cAAcG,WAAU,CAC/Bl9B,QAAS02Q,GACTv6O,MAAOA,GACN6E,EAAM5D,WAGX,IAAI2gR,GAAgB,EAIpB,SAASC,GAAgBh9Q,GACvB,IAAI0xQ,EAAYp1Q,GAAQ,WACtB,MAAO,GAAKygR,OACX,IACC5B,EAAkBn7Q,EAAMm7Q,iBAAmBrpB,EAC/C,OAAOv3P,IAAMwB,cAAcg1P,EAAe,MAAM,SAAUM,GACxD,OAAO92P,IAAMwB,cAAck/Q,GAAK,CAC9BjJ,MAAOhyQ,EAAMgyQ,MACbN,UAAWA,EACXrgB,aAAcA,EACd8pB,gBAAiBA,EACjBd,qBAAsBr6Q,EAAMq6Q,qBAC5Ba,QAASl7Q,EAAMk7Q,QACfnS,gBAAiB/oQ,EAAM+oQ,gBACvBE,kBAAmBjpQ,EAAMipQ,kBACzBI,YAAarpQ,EAAMqpQ,YACnBQ,aAAc7pQ,EAAM6pQ,aACpBhB,UAAW7oQ,EAAM6oQ,WAChB7oQ,EAAM5D,aAIb,IAAI6gR,GAAY,SAAiB94D,GAC/B,OAAO,SAAU3yP,GACf,OAAO2yP,IAAS3yP,IAIhB0rT,GAAWD,GAAU,UACrBE,GAASF,GAAU,QAGnBG,IAFcH,GAAU,WAEb,SAAkB98L,EAAUxnH,GACzC,OAAOA,EAAGwnH,EAAS4f,YAAcpnI,EAAGwnH,EAASk9L,aAO3CC,GAAsB,SAA6BxtB,GACrD,IAAI1+K,EAAQ5sF,OAAOwrQ,iBAAiBF,GAChC3vK,EAAW,CACb4f,UAAW3uB,EAAM2uB,UACjBs9K,UAAWjsM,EAAMisM,WAEnB,OAAOD,GAASj9L,EAAU+8L,KAAaE,GAASj9L,EAAUg9L,KA8BxDI,GAAuB,SAASA,EAAqBztB,GACvD,OAAU,MAANA,GAIAA,IAAOh0P,SAASywC,MAIhBujN,IAAOh0P,SAASz+B,gBAPX,KAWJigT,GAAoBxtB,GAIlBA,EAHEytB,EAAqBztB,EAAGqmB,gBAoB/BqH,GAAe,SAAU1tB,GAC3B,MAAO,CACLniR,EAAGmiR,EAAG2tB,WACNn8Q,EAAGwuP,EAAG4tB,YAINC,GAAa,SAASA,EAAW7tB,GACnC,QAAKA,IAMkB,UAFXtrQ,OAAOwrQ,iBAAiBF,GAE1B/8K,UAIH4qM,EAAW7tB,EAAGqmB,iBAGnB5nR,GAAU,SAAU1Y,GAGtB,MAAO,CACL+nS,kBAHsBL,GAAqB1nS,GAI3CstR,cAHkBwa,GAAW9nS,KAmG7By2R,GAAgB,SAAUnwQ,GAC5B,IAAI5qC,EAAM4qC,EAAK5qC,IACXk9G,EAAatyE,EAAKsyE,WAClBrR,EAAMjhE,EAAKihE,IACX+uM,EAAehwQ,EAAKgwQ,aACpB38N,EAAYrzC,EAAKqzC,UACjBquO,EAAiB1hR,EAAK0hR,eACtBplB,EAAmBt8P,EAAKs8P,iBACxB/F,EAAoBv2P,EAAKu2P,kBACzBkrB,EAAoBxgN,EAAIwgN,kBACxB16G,EAzCU,SAAmB46G,EAAWF,GAC5C,IAAIz5D,EAAO0rC,EAAOiuB,GAElB,IAAKF,EACH,OAAOz5D,EAGT,GAAI25D,IAAcF,EAChB,OAAOz5D,EAGT,IAAI/5H,EAAM+5H,EAAK2qC,WAAW1kK,IAAMwzL,EAAkBF,UAC9CrtS,EAAO8zO,EAAK2qC,WAAWz+Q,KAAOutS,EAAkBH,WAChDpzL,EAASD,EAAMwzL,EAAkBlS,aACjCp7R,EAAQD,EAAOutS,EAAkBjS,YAOjCld,EAAYN,EANC,CACf/jK,IAAKA,EACL95G,MAAOA,EACP+5G,OAAQA,EACRh6G,KAAMA,GAE2B8zO,EAAKxzH,QAOxC,OANa69J,EAAU,CACrBC,UAAWA,EACXp9M,OAAQ8yK,EAAK9yK,OACbs/C,OAAQwzH,EAAKxzH,OACb/+C,QAASuyK,EAAKvyK,UAeHmsO,CAAUxsT,EAAKqsT,GACxBl8C,EAAO0tB,EAAWlsF,EAAQipG,GAE1B7Z,EAAU,WACZ,IAAKsrB,EACH,OAAO,KAGT,IAAII,EAAcnuB,EAAO+tB,GACrBK,EAAa,CACfvS,aAAckS,EAAkBlS,aAChCC,YAAaiS,EAAkBjS,aAEjC,MAAO,CACLzoG,OAAQ86G,EACRt8C,KAAM0tB,EAAW4uB,EAAa7R,GAC9B9c,OAAQmuB,GAAYI,GACpBK,WAAYA,EACZvrB,kBAAmBA,GAfT,GAmBVkK,EA5HuB,SAAUzgQ,GACrC,IAAIsyE,EAAatyE,EAAKsyE,WAClBg6F,EAAYtsK,EAAKssK,UACjBgwF,EAAmBt8P,EAAKs8P,iBACxB0K,EAAgBhnQ,EAAKgnQ,cACrB3zN,EAAYrzC,EAAKqzC,UACjB0zH,EAAS/mK,EAAK+mK,OACdw+D,EAAOvlO,EAAKulO,KACZ4wB,EAAUn2P,EAAKm2P,QAEfG,EAAQ,WACV,IAAKH,EACH,OAAO,KAGT,IAAI2rB,EAAa3rB,EAAQ2rB,WACrBD,EAAc1rB,EAAQpvF,OACtB85F,EAAYyO,GAAa,CAC3BC,aAAcuS,EAAWvS,aACzBC,YAAasS,EAAWtS,YACxBtkL,OAAQ22L,EAAYlvB,WAAWznK,OAC/Bj2C,MAAO4sO,EAAYlvB,WAAW19M,QAEhC,MAAO,CACLyhN,cAAeP,EAAQ5wB,KAAKmtB,UAC5BmvB,YAAaA,EACbC,WAAYA,EACZvrB,kBAAmBJ,EAAQI,kBAC3BrD,OAAQ,CACN7hG,QAAS8kG,EAAQjD,OACjBzxP,QAAS00P,EAAQjD,OACjBv8R,IAAKkqS,EACL9xD,KAAM,CACJ15O,MAAOof,GACPsiR,aAActiR,MAxBV,GA8BRoiR,EAAqB,aAAdxjN,EAA2BqmN,GAAWK,GAkBjD,MAXgB,CACdznL,WAAYA,EACZgqL,iBAAkBA,EAClB0K,cAAeA,EACfnQ,KAAMA,EACNvqF,UAAWA,EACXvF,OAAQA,EACRw+D,KAAMA,EACN+wB,MAAOA,EACPE,QAfYG,GAAW,CACvBpxB,KAAMA,EACNqxB,gBAAiB,KACjBC,KAAMA,EACNP,MAAOA,KA+EOyrB,CAAsB,CACpCzvM,WAAYA,EACZg6F,WAAYo1G,EACZplB,iBAAkBA,EAClB0K,cAAe/lM,EAAI+lM,cACnB3zN,UAAWA,EACX0zH,OAAQA,EACRw+D,KAAMA,EACN4wB,QAASA,IAEX,OAAOsK,GAGLuhB,GAAY,CACd7W,SAAS,GAEP8W,GAAU,CACZ9W,SAAS,GAEP+W,GAAsB,SAAUv8Q,GAClC,OAAOA,EAAQipQ,yBAA2BoT,GAAYC,IAGxD,SAASE,GAAmB5hR,GAC1B,IAAIhzB,EAAS62B,qBAAW7D,GAExB,OADChzB,GAAuG3F,GAAU,GAC3G2F,EAGT,IAAIwB,GAAQ,EACZ,SAASqzS,GAAY9qQ,GAEnB,OAAOA,EAAS,KADDzS,iBAAO91B,MACU0yB,QAGlC,IAAI4gR,GAA+B,SAAsC5V,GACvE,OAAOA,GAAYA,EAASxrM,IAAIwgN,mBAAqB,MAoKvD,SAASa,MAET,IAAIxwS,GAAQ,CACVmjE,MAAO,EACPi2C,OAAQ,EACRh2C,OA/5Nc,CACd+4C,IAAK,EACL95G,MAAO,EACP+5G,OAAQ,EACRh6G,KAAM,IAk7NJquS,GAAW,SAAkBjgR,GAC/B,IAAIkgR,EAAyBlgR,EAAMkgR,uBAC/B79L,EAAcriF,EAAMqiF,YACpB89L,EAAUngR,EAAMmgR,QAChB/sT,EAxBQ,SAAiBsqC,GAC7B,IAAIwiR,EAAyBxiR,EAAKwiR,uBAC9B79L,EAAc3kF,EAAK2kF,YACnB89L,EAAUziR,EAAKyiR,QAEnB,OAAID,GAIY,UAAZC,EAHK3wS,GAOF,CACLo5G,OAAQvG,EAAYoiF,OAAOurF,UAAUpnK,OACrCj2C,MAAO0vC,EAAYoiF,OAAOurF,UAAUr9M,MACpCC,OAAQyvC,EAAYoiF,OAAO7xH,QAQlBwtO,CAAQ,CACjBF,uBAAwBA,EACxB79L,YAAaA,EACb89L,QAASA,IAEX,MAAO,CACL1tO,QAAS4vC,EAAY5vC,QACrBD,UAAW,aACXG,MAAOv/E,EAAKu/E,MACZi2C,OAAQx1H,EAAKw1H,OACbjV,UAAWvgH,EAAKw/E,OAAO+4C,IACvB9S,YAAazlH,EAAKw/E,OAAO/gE,MACzB64G,aAAct3H,EAAKw/E,OAAOg5C,OAC1BrM,WAAYnsH,EAAKw/E,OAAOhhE,KACxByuS,WAAY,IACZ3sO,SAAU,IACVg4C,cAAe,OACfG,WAAwB,SAAZs0L,EAAqBr0L,GAAYzJ,YAAc,OAoE/D,IAAIi+L,GAAgBxkR,IAAM4G,MAhE1B,SAAqBnB,GACnB,IAAIg/Q,EAAsBh+Q,iBAAO,MAC7Bi+Q,EAA2BjgM,GAAY,WACpCggM,EAAoBphR,UAIzBy+F,aAAa2iL,EAAoBphR,SACjCohR,EAAoBphR,QAAU,QAC7B,IACCghR,EAAU5+Q,EAAM4+Q,QAChBM,EAAkBl/Q,EAAMk/Q,gBACxBzkL,EAAUz6F,EAAMy6F,QAChBi3K,EAAY1xQ,EAAM0xQ,UAElBn9P,EAAYC,mBAA2B,SAAlBxU,EAAM4+Q,SAC3BD,EAAyBpqQ,EAAU,GACnC4qQ,EAA4B5qQ,EAAU,GAE1CtY,qBAAU,WACR,OAAK0iR,EAIW,SAAZC,GACFK,IACAE,GAA0B,GACnBV,IAGLO,EAAoBphR,QACf6gR,IAGTO,EAAoBphR,QAAU+Q,YAAW,WACvCqwQ,EAAoBphR,QAAU,KAC9BuhR,GAA0B,MAErBF,GAjBER,KAkBR,CAACG,EAASD,EAAwBM,IACrC,IAAIG,EAAkBpgM,GAAY,SAAUie,GACf,WAAvBA,EAAMoiL,eAIVH,IAEgB,UAAZN,GACFnkL,OAED,CAACmkL,EAASnkL,EAASykL,IAClB9tM,EAAQstM,GAAS,CACnBC,uBAAwBA,EACxBC,QAAS5+Q,EAAM4+Q,QACf99L,YAAa9gF,EAAM8gF,cAErB,OAAOvmF,IAAMwB,cAAciE,EAAM8gF,YAAYo1L,QAAS,CACpD9kM,MAAOA,EACP,kCAAmCsgM,EACnCwN,gBAAiBE,EACjB7tT,IAAKyuC,EAAMgjO,cAMXs8C,GAAmB/kR,IAAMC,cAAc,MAkE3C,IAAI+kR,GAAe,SAAUC,GAG3B,SAASD,IAGP,IAFA,IAAI9xQ,EAEK5sB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAoBzB,OAjBA0sB,EAAQ+xQ,EAAqB1oT,KAAKiH,MAAMyhT,EAAsB,CAAC1pT,MAAMsL,OAAO0f,KAAUhrB,MAChFgnC,MAAQ,CACZq5P,UAAWhjS,QAAQs6C,EAAMzN,MAAMyO,IAC/BqC,KAAMrD,EAAMzN,MAAMyO,GAClBmwQ,QAASnxQ,EAAMzN,MAAMk3P,eAAiBzpP,EAAMzN,MAAMyO,GAAK,OAAS,QAGlEhB,EAAMgtF,QAAU,WACc,UAAxBhtF,EAAM3Q,MAAM8hR,SAIhBnxQ,EAAMirE,SAAS,CACby9K,WAAW,KAIR1oP,EAkDT,OA5EAg5N,EAAe84C,EAAcC,GA6B7BD,EAAa74C,yBAA2B,SAAkC1mO,EAAOlD,GAC/E,OAAKkD,EAAMk3P,cAQPl3P,EAAMyO,GACD,CACL0nP,WAAW,EACXrlP,KAAM9Q,EAAMyO,GACZmwQ,QAAS,QAIT9hR,EAAMq5P,UACD,CACLA,WAAW,EACXrlP,KAAMhU,EAAMgU,KACZ8tQ,QAAS,SAIN,CACLzoB,WAAW,EACXyoB,QAAS,QACT9tQ,KAAM,MA1BC,CACLqlP,UAAWhjS,QAAQ6sC,EAAMyO,IACzBqC,KAAM9Q,EAAMyO,GACZmwQ,QAAS,SA2BFW,EAAatrT,UAEnBikI,OAAS,WACd,IAAKpiI,KAAKgnC,MAAMq5P,UACd,OAAO,KAGT,IAAI74K,EAAW,CACbmd,QAAS3kI,KAAK2kI,QACd3pF,KAAMh7C,KAAKgnC,MAAMgU,KACjB8tQ,QAAS9oT,KAAKgnC,MAAM8hR,SAEtB,OAAO9oT,KAAKkqC,MAAM5D,SAASkhF,IAGtBiiM,EA7EU,CA8EjBhlR,IAAMklR,eAEJC,GACQ,IADRA,GAEa,KAGbC,GAAwB,SAA+BC,EAA2BlV,GACpF,OAAIA,EACKngL,GAAYqiE,KAAK89G,EAASlgL,UAG/Bo1L,EACKr1L,GAAYy7K,KAGdz7K,GAAYw7K,OAGjB8Z,GAAqB,SAA4BzZ,EAAa0Z,GAChE,OAAK1Z,EAIE0Z,EAAkBluB,GAAgBhlG,KAAOglG,GAAgBiU,UAHvD,MA+CX,SAASka,GAAW5qS,GAClB,MAAuB,aAAhBA,EAAOnf,KAlChB,SAA0B4yS,GACxB,IACIzP,EADYyP,EAAShM,UACL15F,OAChBt/L,EAASglS,EAAShlS,OAClBk1R,EAAc8P,EAAS9P,YACvB4R,EAAW9B,EAAS8B,SACpBtE,EAAcjzS,QAAQ2lS,GACtB5B,EAfyB,SAAkC0R,GAC/D,OAAmC,MAA/BA,EAAS5R,mBACJ4R,EAAS5R,mBAGO,SAAlB4R,EAAS93K,KAUIkvL,CAAyBpX,GACzCkX,EAAkB3sT,QAAQu3S,GAC1Bv4K,EAAY2tL,EAAkB53H,GAAgBtkL,EAAQwiS,GAAel+G,GAAkBtkL,GAc3F,MAbY,CACVmvG,SAAU,QACVqX,IAAK+uK,EAAItK,UAAUzkK,IACnB/5G,KAAM8oR,EAAItK,UAAUx+Q,KACpB4gE,UAAW,aACXG,MAAO+nN,EAAI1K,UAAUr9M,MACrBi2C,OAAQ8xK,EAAI1K,UAAUpnK,OACtBiD,WAAYq1L,GAAsBzoB,EAAewT,GACjDv4K,UAAWA,EACXnP,QAAS68L,GAAmBzZ,EAAa0Z,GACzChpL,OAAQgpL,EAAkBJ,GAA8BA,GACxDv1L,cAAe,QAamB81L,CAAiB9qS,GAP9C,CACLg9G,UAAW+1D,IAFYpvD,EAQwD3jH,GANxCvR,QACvC0mH,WAAYwO,EAAUonL,0BAA4B,KAAO,QAH7D,IAA2BpnL,EAuC3B,SAASqnL,GAAsBr/R,GAC7B,IAAIozK,EAAWqqH,GAAY,aACvB9vM,EAAa3tF,EAAK2tF,WAClBw9L,EAAWnrR,EAAKmrR,SAChBmU,EAAkBt/R,EAAKs/R,gBACvB7I,EAA6Bz2R,EAAKy2R,2BAClChC,EAA0Bz0R,EAAKy0R,wBAC/B9sG,EAAY3nL,EAAK2nL,UACjB3mK,EAAUxF,GAAQ,WACpB,MAAO,CACLi7Q,2BAA4BA,EAC5BhC,wBAAyBA,EACzB9sG,UAAWA,KAEZ,CAAC8uG,EAA4B9uG,EAAW8sG,IACvCjJ,EAAettL,GAAY,SAAUmtL,GACvC,IAAIrc,EAAKswB,IAET,OADCtwB,GAA2G/rR,GAAU,GA7C1H,SAAwB0qG,EAAYqhL,EAAIqc,QACjB,IAAjBA,IACFA,EAAev7R,IAGjB,IAAIyvS,EAAiB77R,OAAOwrQ,iBAAiBF,GACzCrB,EAAYqB,EAAGC,wBACf7sF,EAASssF,EAAaf,EAAW4xB,GACjC3+C,EAAO0tB,EAAWlsF,EAAQipG,GAiB9B,MAPgB,CACd19L,WAAYA,EACZqS,YAXgB,CAChBoiF,OAAQA,EACRgzG,QAASpmB,EAAGomB,QAAQhnQ,cACpBgiC,QAASmvO,EAAenvO,SASxB6nN,WAPe,CACfprR,EAAGu1L,EAAO2rF,UAAUz9M,MACpB9vC,EAAG4hK,EAAO2rF,UAAUxnK,QAMpB67E,OAAQA,EACRw+D,KAAMA,GAuBC4+C,CAAe7xM,EAAYqhL,EAAIqc,KACrC,CAAC19L,EAAY2xM,IACZrnT,EAAQujC,GAAQ,WAClB,MAAO,CACL43J,SAAUA,EACVzlF,WAAYA,EACZ3sE,QAASA,EACTwqQ,aAAcA,KAEf,CAAC79L,EAAY69L,EAAcxqQ,EAASoyJ,IACnCqsH,EAAev/Q,iBAAOjoC,GACtBynT,EAAoBx/Q,kBAAO,GAC/BnF,IAA0B,WAExB,OADAowQ,EAAS5X,UAAUhxF,SAASk9G,EAAa3iR,SAClC,WACL,OAAOquQ,EAAS5X,UAAUyf,WAAWyM,EAAa3iR,YAEnD,CAACquQ,EAAS5X,YACbx4P,IAA0B,WACxB,GAAI2kR,EAAkB5iR,QACpB4iR,EAAkB5iR,SAAU,MAD9B,CAKA,IAAI9jB,EAAOymS,EAAa3iR,QACxB2iR,EAAa3iR,QAAU7kC,EACvBkzS,EAAS5X,UAAUjuR,OAAOrN,EAAO+gB,MAChC,CAAC/gB,EAAOkzS,EAAS5X,YAkCtB,SAASosB,GAAgBxjL,GACvBA,EAAM/F,iBA2GR,IAAIwpL,GAAiB,SAAUjlT,EAAGC,GAChC,OAAOD,IAAMC,GAGXilT,GAA+B,SAAUj3S,GAC3C,IAAIkoR,EAAUloR,EAAOkoR,QACjBhuF,EAAcl6L,EAAOk6L,YAEzB,OAAIA,EACKA,EAAYs+E,YAGjB0P,EACKA,EAAQ1P,YAGV,MAyGT,SAAS0+B,GAAqBC,GAC5B,MAAO,CACL1vB,YAAY,EACZ2uB,iBAAiB,EACjBn7J,SAAS,EACTm8J,cAAe,KACfhwL,KAAM,KACNiwL,aAAc,KACdF,iBAAkBA,EAClB/nB,YAAa,MAIjB,IAAIkoB,GAAS,CACX7rS,OAAQ,CACNnf,KAAM,YACN4N,OAAQgN,GACRiwS,iBAAkB,KAClBX,2BAA2B,EAC3Be,SAAUL,GAAqB,QAwFnC,IAUIp+Q,GAAqB,CACvBmjQ,sBAAuBA,IAErBub,GAAqBvsM,mBAbC,WACxB,IAAIwsM,EA1MN,WACE,IAAIC,EAAiBttB,aAAW,SAAUnmR,EAAG2zB,GAC3C,MAAO,CACL3zB,EAAGA,EACH2zB,EAAGA,MAGH+/Q,EAAsBvtB,aAAW,SAAUhjK,EAAM6zB,EAASo8J,EAAcjoB,EAAa4R,GACvF,MAAO,CACLvZ,YAAY,EACZxsI,QAASA,EACTm7J,gBAAiB3sT,QAAQu3S,GACzBoW,cAAepW,EACf55K,KAAMA,EACNiwL,aAAcA,EACdjoB,YAAaA,EACb+nB,iBAAkB,SAGlBS,EAAmBxtB,aAAW,SAAUlwR,EAAQktH,EAAM8rK,EAAWj4I,EAASo8J,EAAcjoB,EAAa9B,GACvG,MAAO,CACL7hR,OAAQ,CACNnf,KAAM,WACN00S,SAAU,KACVqW,aAAcA,EACdjoB,YAAaA,EACbhoK,KAAMA,EACNltH,OAAQA,EACRg5R,UAAWA,EACX5F,mBAAoBA,EACpBiqB,SAAUI,EAAoBvwL,EAAM6zB,EAASo8J,EAAcjoB,EAAa,WA6D9E,OAxDe,SAAkBh8P,EAAOyF,GACtC,GAAIzF,EAAMq0P,WAAY,CACpB,GAAIr0P,EAAM2hQ,SAASpK,UAAUt9P,KAAOwL,EAASs/O,YAC3C,OAAO,KAGT,IAAIj+Q,EAASk5B,EAAMc,QAAQslK,OAAOt/L,OAC9Bg5R,EAAY9/P,EAAMwhQ,WAAWrK,WAAW1xP,EAASs/O,aACjDk/B,EAAe7iB,GAAkBphQ,EAAMy3P,QACvCuE,GAhDuDvE,EAgDhBz3P,EAAMy3P,QA/CvCnrG,IAAyB,YAAnBmrG,EAAOnrG,GAAGpzL,KAAqBu+R,EAAOnrG,GAAGwoG,QAAQ/P,YAAc,KAgD3EmV,EAAqBl6P,EAAMk6P,mBAC/B,OAAOsqB,EAAiBF,EAAex9S,EAAO+J,EAAG/J,EAAO09B,GAAIxE,EAAM6kQ,aAAc/E,EAAWr6P,EAASoiH,QAASo8J,EAAcjoB,EAAa9B,GAlD/G,IAAkCzC,EAqD7D,GAAoB,mBAAhBz3P,EAAMiiQ,MAA4B,CACpC,IAAIhjC,EAAYj/N,EAAMi/N,UAEtB,GAAIA,EAAUryP,OAAOm4Q,cAAgBt/O,EAASs/O,YAC5C,OAAO,KAGT,IAAIl9H,EAAUpiH,EAASoiH,QACnB6oJ,EAAa1wQ,EAAMwhQ,WAAWrK,WAAW1xP,EAASs/O,aAClDn4Q,EAASqyP,EAAUryP,OACnBonH,EAAOpnH,EAAOonH,KAEdywL,EAAgBZ,GAA4Bj3S,GAE5C83S,EAvEqB,SAAkC93S,GAC/D,OAAOA,EAAOkoR,QAAUloR,EAAOkoR,QAAQ/P,YAAc,KAsE9B4/B,CAAyB/3S,GAGxCghS,EAAW,CACblgL,SAFa1tF,EAAMgoQ,aAGnB4c,MAAO9b,GACPO,OAAQrpQ,EAAMioQ,oBACd/hL,QAASw+L,EAAe5vB,GAAgBhlG,KAAO,KAC/C+0H,MAAOH,EAAe5vB,GAAchlG,KAAO,MAE7C,MAAO,CACLz3K,OAAQ,CACNnf,KAAM,WACN4N,OAAQk5B,EAAMioQ,oBACdnI,UAAW4Q,EACX9C,SAAUA,EACVqW,aAAcQ,EACdzoB,YAAa0oB,EACb1wL,KAAMA,EACNkmK,mBAAoB,KACpBiqB,SAAUI,EAAoBvwL,EAAM6zB,EAAS48J,EAAeC,EAAc9W,KAKhF,OAAO,MAkHckX,GACnBC,EAtFN,WACE,IAAIT,EAAiBttB,aAAW,SAAUnmR,EAAG2zB,GAC3C,MAAO,CACL3zB,EAAGA,EACH2zB,EAAGA,MAGH+/Q,EAAsBvtB,YAAW8sB,IACjCU,EAAmBxtB,aAAW,SAAUlwR,EAAQi9S,EAAkBX,GAKpE,YAJyB,IAArBW,IACFA,EAAmB,MAGd,CACL1rS,OAAQ,CACNnf,KAAM,YACN4N,OAAQA,EACRi9S,iBAAkBA,EAClBX,0BAA2BA,EAC3Be,SAAUI,EAAoBR,QAKhCiB,EAAc,SAAqBjB,GACrC,OAAOA,EAAmBS,EAAiB1wS,GAAQiwS,GAAkB,GAAQ,MAG3EkB,EAAW,SAAkBC,EAAOC,EAAY1tB,EAAQuD,GAC1D,IAAIoqB,EAAqB3tB,EAAOS,UAAUF,QAAQktB,GAC9CG,EAA+BhvT,QAAQ2kS,EAAciK,eAAiBjK,EAAcC,SAASiqB,IAC7FpwB,EAAU4C,GAAcD,GACxBssB,EAAmBjvB,GAAWA,EAAQ/P,cAAgBmgC,EAAQC,EAAa,KAE/E,IAAKC,EAAoB,CACvB,IAAKC,EACH,OAAOL,EAAYjB,GAGrB,GAAItsB,EAAOS,UAAUH,UAAUmtB,GAC7B,OAAO,KAGT,IAAIhiP,EAASgoH,GAAO8vG,EAAc7C,YAAYhD,OAE1C/rD,EAAUk7E,EAAephP,EAAOryD,EAAGqyD,EAAO1+B,GAE9C,OAAOggR,EAAiBp7E,EAAS26E,GAAkB,GAGrD,GAAIsB,EACF,OAAOL,EAAYjB,GAGrB,IAAI9nB,EAAaxE,EAAOU,YAAYhD,MAChCruR,EAASw9S,EAAeroB,EAAWprR,EAAGorR,EAAWz3P,GACrD,OAAOggR,EAAiB19S,EAAQi9S,EAAkBqB,EAAmBhrB,gBAyBvE,OAtBe,SAAkBp6P,EAAOyF,GACtC,GAAIzF,EAAMq0P,WACR,OAAIr0P,EAAM2hQ,SAASpK,UAAUt9P,KAAOwL,EAASs/O,YACpC,KAGFkgC,EAASx/Q,EAASs/O,YAAa/kP,EAAM2hQ,SAASpK,UAAUt9P,GAAI+F,EAAMy3P,OAAQz3P,EAAMg7P,eAGzF,GAAoB,mBAAhBh7P,EAAMiiQ,MAA4B,CACpC,IAAIhjC,EAAYj/N,EAAMi/N,UAEtB,OAAIA,EAAUryP,OAAOm4Q,cAAgBt/O,EAASs/O,YACrC,KAGFkgC,EAASx/Q,EAASs/O,YAAa9lB,EAAUryP,OAAOm4Q,YAAa9lB,EAAUw4B,OAAQx4B,EAAU+7B,eAGlG,OAAO,MAQesqB,GAMxB,OAJe,SAAkBtlR,EAAOyF,GACtC,OAAO4+Q,EAAiBrkR,EAAOyF,IAAas/Q,EAAkB/kR,EAAOyF,IAAay+Q,MAQhCx+Q,GAAoB,KAAM,CAC9ExjC,QAAS02Q,GACT71O,MAAM,EACN2D,mBAAoBk9Q,IAHG/rM,EAzVzB,SAAmB30E,GACjB,IAAIzuC,EAAMyvC,iBAAO,MACb0+O,EAAS1gK,GAAY,SAAU8wK,GACjCv+R,EAAIqsC,QAAUkyP,IACb,IACCuyB,EAASrjM,GAAY,WACvB,OAAOztH,EAAIqsC,UACV,IAEC0kR,EAAsBhE,GAAmBnK,IACzCzC,EAAY4Q,EAAoB5Q,UAChCgK,EAAoB4G,EAAoB5G,kBACxCzP,EAAWqW,EAAoBrW,SAE/BsW,EAAuBjE,GAAmBgB,IAC1CtpT,EAAOusT,EAAqBvsT,KAC5BksR,EAAcqgC,EAAqBrgC,YAEnCzzK,EAAanyE,GAAQ,WACvB,MAAO,CACLvF,GAAIiJ,EAAM6hP,YACV5vR,MAAO+tC,EAAM/tC,MACb+D,KAAMA,EACNksR,YAAaA,KAEd,CAACliP,EAAM6hP,YAAa7hP,EAAM/tC,MAAO+D,EAAMksR,IACtC9lP,EAAW4D,EAAM5D,SACjBylP,EAAc7hP,EAAM6hP,YACpBp5E,EAAYzoK,EAAMyoK,UAClB8sG,EAA0Bv1Q,EAAMu1Q,wBAChCgC,EAA6Bv3Q,EAAMu3Q,2BACnC5yJ,EAAU3kH,EAAM2kH,QAChBxvI,EAAS6qB,EAAM7qB,OACfqtS,EAA8BxiR,EAAM2lQ,sBAnExC2O,KAsBAF,KAiDKzvJ,GAWHw7J,GAVmB7jR,GAAQ,WACzB,MAAO,CACLmyE,WAAYA,EACZw9L,SAAUA,EACVmU,gBAAiBiC,EACjB9K,2BAA4BA,EAC5BhC,wBAAyBA,EACzB9sG,UAAWA,KAEZ,CAACh6F,EAAYw9L,EAAUoW,EAAQ9K,EAA4BhC,EAAyB9sG,KAIzF,IAAIg6G,EAAkBnmR,GAAQ,WAC5B,OAAOmsK,EAAY,CACjBruE,SAAU,EACV,oCAAqCynJ,EACrC,kCAAmC6vB,EACnC,kBAAmBgK,EACnBrnB,WAAW,EACXgV,YAAaoX,IACX,OACH,CAAC/O,EAAW7vB,EAAap5E,EAAWizG,IACnCgH,EAAY1jM,GAAY,SAAUie,GAChB,aAAhB9nH,EAAOnf,MAINmf,EAAOu1R,UAIe,cAAvBztK,EAAMoiL,cAIVmD,MACC,CAACA,EAA6BrtS,IAC7BmoG,EAAWhhF,GAAQ,WACrB,IAAI80E,EAAQ2uM,GAAW5qS,GACnB+pS,EAAkC,aAAhB/pS,EAAOnf,MAAuBmf,EAAOu1R,SAAWgY,EAAY,KAWlF,MAVa,CACX1/C,SAAU0c,EACVijC,eAAgB,CACd,gCAAiCjR,EACjC,wBAAyB7vB,EACzBzwK,MAAOA,EACP8tM,gBAAiBA,GAEnBuD,gBAAiBA,KAGlB,CAAC/Q,EAAW+Q,EAAiB5gC,EAAa1sQ,EAAQutS,EAAWhjC,IAC5DkjC,EAAStmR,GAAQ,WACnB,MAAO,CACLulP,YAAapzK,EAAW13E,GACxB/gC,KAAMy4G,EAAWz4G,KACjB+sB,OAAQ,CACN9wB,MAAOw8G,EAAWx8G,MAClBiwR,YAAazzK,EAAWyzK,gBAG3B,CAACzzK,EAAWyzK,YAAazzK,EAAW13E,GAAI03E,EAAWx8G,MAAOw8G,EAAWz4G,OACxE,OAAOomC,EAASkhF,EAAUnoG,EAAO8rS,SAAU2B,MA0P7C,SAASC,GAAiB7iR,GAIxB,OAHuBs+Q,GAAmBgB,IACHwD,kBAEf9iR,EAAM6hP,aAAgB7hP,EAAM2kH,QAI7CpqH,IAAMwB,cAAcmlR,GAAoBlhR,GAHtC,KAKX,SAAS+iR,GAAgB/iR,GACvB,IAAIyoK,EAA4C,mBAAzBzoK,EAAMgjR,iBAAgChjR,EAAMgjR,eAC/DzL,EAA6BpkT,QAAQ6sC,EAAMijR,mCAC3C1N,EAA0BpiT,QAAQ6sC,EAAMu1Q,yBAC5C,OAAOh7Q,IAAMwB,cAAc8mR,GAAkBjjR,EAAS,GAAII,EAAO,CAC/D2kH,SAAS,EACT8jD,UAAWA,EACX8uG,2BAA4BA,EAC5BhC,wBAAyBA,KAqH7B,IAAI2N,GAAiB,SAAwBltT,EAAMyoS,GACjD,OAAOzoS,IAASyoS,EAASlL,UAAUv9R,MAGjCmtT,GAAe,SAAsB1kB,EAAUH,GACjD,OAAOA,EAAWrK,WAAWwK,EAASpK,UAAUt9P,KAoI9CqsR,GAAuB,CACzBC,wBAp7K4B,SAAiCviS,GAC7D,MAAO,CACL9qB,KAAM,6BACNgnC,QAASlc,KAy7Kb,IAAIy2F,GAAe,CACjBuZ,KAAM,WACN96H,KAAM,UACNw5E,UAAW,WACXquO,gBAAgB,EAChBplB,kBAAkB,EAClB6qB,yBAAyB,EACzBC,YAAa,KACbC,qBAbF,WAEE,OADC1nR,SAASywC,MAAgGxoE,GAAU,GAC7G+3B,SAASywC,OAadk3O,GAAqB9uM,mBApJG,WAC1B,IAAI+uM,EAAoB,CACtB5iM,YAAa,KACb6iM,0BAA0B,EAC1B1C,SAAU,CACR2C,gBAAgB,EAChBC,iBAAkB,KAClBC,qBAAsB,KACtBC,oBAAoB,GAEtBC,SAAU,MAGRC,EAAuBrkR,EAAS,GAAI8jR,EAAmB,CACzDC,0BAA0B,IAGxBO,EAAqBpwB,aAAW,SAAUrlL,GAC5C,MAAO,CACLozK,YAAapzK,EAAW13E,GACxB/gC,KAAMy4G,EAAWz4G,KACjB+sB,OAAQ,CACN9wB,MAAOw8G,EAAWx8G,MAClBiwR,YAAazzK,EAAWyzK,iBAI1BiiC,EAAcrwB,aAAW,SAAU/8P,EAAI0xK,EAAW27G,EAA2BC,EAAyBzb,EAAU2a,GAClH,IAAI1hC,EAAc+mB,EAASn6L,WAAW13E,GAGtC,GAFa6xQ,EAASn6L,WAAWyzK,cAAgBnrP,EAErC,CACV,IAAIitR,EAAWT,EAAc,CAC3BrrL,OAAQqrL,EACR3a,SAAUsb,EAAmBtb,EAASn6L,aACpC,KACA61M,EAAY,CACdV,eAAgBQ,EAChBP,iBAAkBO,EAA4BviC,EAAc,KAC5DiiC,qBAAsBjiC,EACtBkiC,oBAAoB,GAEtB,MAAO,CACLjjM,YAAa8nL,EAAS9nL,YACtB6iM,0BAA0B,EAC1B1C,SAAUqD,EACVN,SAAUA,GAId,IAAKv7G,EACH,OAAOw7G,EAGT,IAAKI,EACH,OAAOX,EAGT,IAAIzC,EAAW,CACb2C,eAAgBQ,EAChBP,iBAAkBhiC,EAClBiiC,qBAAsB,KACtBC,oBAAoB,GAEtB,MAAO,CACLjjM,YAAa8nL,EAAS9nL,YACtB6iM,0BAA0B,EAC1B1C,SAAUA,EACV+C,SAAU,SA2Dd,OAvDe,SAAkBlnR,EAAOyF,GACtC,IAAIxL,EAAKwL,EAAS2/O,YACdlsR,EAAOusC,EAASvsC,KAChByyM,GAAalmK,EAASs7Q,eACtB0F,EAAchhR,EAASghR,YAE3B,GAAIzmR,EAAMq0P,WAAY,CACpB,IAAIsN,EAAW3hQ,EAAM2hQ,SAErB,IAAKykB,GAAeltT,EAAMyoS,GACxB,OAAOwlB,EAGT,IAAIrb,EAAWua,GAAa1kB,EAAU3hQ,EAAMwhQ,YACxCslB,EAAiB1lB,GAAkBphQ,EAAMy3P,UAAYx9P,EACzD,OAAOotR,EAAYptR,EAAI0xK,EAAWm7G,EAAgBA,EAAgBhb,EAAU2a,GAG9E,GAAoB,mBAAhBzmR,EAAMiiQ,MAA4B,CACpC,IAAIhjC,EAAYj/N,EAAMi/N,UAEtB,IAAKmnD,GAAeltT,EAAM+lQ,EAAU0iC,UAClC,OAAOwlB,EAGT,IAAI9S,EAAYgS,GAAapnD,EAAU0iC,SAAU3hQ,EAAMwhQ,YAEvD,OAAO6lB,EAAYptR,EAAI0xK,EAAWk4G,GAA4B5kD,EAAUryP,UAAYqtB,EAAImnQ,GAAkBniC,EAAUw4B,UAAYx9P,EAAIo6Q,EAAWoS,GAGjJ,GAAoB,SAAhBzmR,EAAMiiQ,OAAoBjiQ,EAAMi/N,YAAcj/N,EAAMkmQ,YAAa,CACnE,IAAIuhB,EAAaznR,EAAMi/N,UAEvB,IAAKmnD,GAAeltT,EAAMuuT,EAAW9lB,UACnC,OAAOwlB,EAGT,IAAIpgB,EAAU3F,GAAkBqmB,EAAWhwB,UAAYx9P,EACnDytR,EAAerxT,QAAQoxT,EAAWhwB,OAAOnrG,IAAoC,YAA9Bm7H,EAAWhwB,OAAOnrG,GAAGpzL,MACpEyuT,EAASF,EAAW9lB,SAASlL,UAAUx8P,KAAOA,EAElD,OAAI8sQ,EACK2gB,EAAed,EAAoBO,EAGxCQ,EACKf,EAGFO,EAGT,OAAOA,KAwB6Cb,GAAsB,KAAM,CAClFpkT,QAAS02Q,GACT71O,MAAM,EACN2D,mBAAoBk9Q,IAHG/rM,EA7QzB,SAAmB30E,GACjB,IAAI68Q,EAAat8Q,qBAAW4zQ,IAC3B0I,GAAsG94S,GAAU,GACjH,IAAI2tS,EAAYmL,EAAWnL,UACvB5S,EAAoB+d,EAAW/d,kBAC/B4lB,EAAe1jR,iBAAO,MACtB2jR,EAAiB3jR,iBAAO,MACxB5E,EAAW4D,EAAM5D,SACjB8lP,EAAcliP,EAAMkiP,YACpBlsR,EAAOgqC,EAAMhqC,KACb86H,EAAO9wF,EAAM8wF,KACbthD,EAAYxvC,EAAMwvC,UAClB8zO,EAA0BtjR,EAAMsjR,wBAChCzF,EAAiB79Q,EAAM69Q,eACvBplB,EAAmBz4P,EAAMy4P,iBACzBwoB,EAAWjhR,EAAMihR,SACjB+C,EAAWhkR,EAAMgkR,SACjBX,EAA0BrjR,EAAMqjR,wBAChCG,EAAuBxjR,EAAMwjR,qBAC7BoB,EAAkB5lM,GAAY,WAChC,OAAO0lM,EAAa9mR,UACnB,IACCinR,EAAkB7lM,GAAY,SAAUxtH,GAC1CkzT,EAAa9mR,QAAUpsC,IACtB,IAICszT,GAHoB9lM,GAAY,WAClC,OAAO2lM,EAAe/mR,UACrB,IACqBohF,GAAY,SAAUxtH,GAC5CmzT,EAAe/mR,QAAUpsC,IACxB,KArqBH8iT,KA2qBA,IAAIyQ,EAA6B/lM,GAAY,WACvC8/K,KACFukB,EAAwB,CACtBrmB,UAAW8O,SAGd,CAAChN,EAAmBukB,KA9/BzB,SAA+BviS,GAC7B,IAAIkkS,EAAmBhkR,iBAAO,MAC1B67Q,EAAayB,GAAmBnK,IAChCjgH,EAAWqqH,GAAY,aACvBtS,EAAW4Q,EAAW5Q,SACtB7B,EAAUyS,EAAWzS,QACrB6a,EAAczQ,GAAY1zR,GAC1B2tF,EAAanyE,GAAQ,WACvB,MAAO,CACLvF,GAAIjW,EAAKohQ,YACTlsR,KAAM8qB,EAAK9qB,KACX86H,KAAMhwG,EAAKgwG,QAEZ,CAAChwG,EAAKohQ,YAAaphQ,EAAKgwG,KAAMhwG,EAAK9qB,OAClCkvT,EAAyBlkR,iBAAOytE,GAChC02M,EAAuB7oR,GAAQ,WACjC,OAAOw3P,aAAW,SAAUnmR,EAAG2zB,GAC5B0jR,EAAiBpnR,SAA6G75B,GAAU,GACzI,IAAIsrR,EAAS,CACX1hR,EAAGA,EACH2zB,EAAGA,GAEL8oQ,EAAQlF,sBAAsBz2L,EAAW13E,GAAIs4P,QAE9C,CAAC5gL,EAAW13E,GAAIqzQ,IACfgb,EAAmBpmM,GAAY,WACjC,IAAI4pL,EAAWoc,EAAiBpnR,QAEhC,OAAKgrQ,GAAaA,EAASxrM,IAAIwgN,kBAIxBJ,GAAY5U,EAASxrM,IAAIwgN,mBAHvBhtS,KAIR,IACCy0S,EAAermM,GAAY,WAC7B,IAAIqwK,EAAS+1B,IACbD,EAAqB91B,EAAO1hR,EAAG0hR,EAAO/tP,KACrC,CAAC8jR,EAAkBD,IAClBG,EAAuBhpR,GAAQ,WACjC,OAAO2zP,EAAQo1B,KACd,CAACA,IACAE,EAAkBvmM,GAAY,WAChC,IAAI4pL,EAAWoc,EAAiBpnR,QAC5B00P,EAAUksB,GAA6B5V,GACzCA,GAAYtW,GAAuHvuR,GAAU,GACjI6kS,EAASkC,cAEXC,yBACVsa,IAIFC,MACC,CAACA,EAAsBD,IACtBhZ,EAA6BrtL,GAAY,SAAUmtL,EAAcrqQ,GACjEkjR,EAAiBpnR,SAA6H75B,GAAU,GAC1J,IAAIs2K,EAAW4qI,EAAYrnR,QACvBrsC,EAAM8oL,EAASuqI,kBAClBrzT,GAA2GwS,GAAU,GACtH,IAAIq5F,EAAM7uE,GAAOh9B,GACbq3S,EAAW,CACbr3S,IAAKA,EACLk9G,WAAYA,EACZrR,IAAKA,EACL0tM,cAAehpQ,GAEjBkjR,EAAiBpnR,QAAUgrQ,EAC3B,IAAIhM,EAAY0P,GAAa,CAC3B/6S,IAAKA,EACLk9G,WAAYA,EACZrR,IAAKA,EACL+uM,aAAcA,EACd38N,UAAW6qG,EAAS7qG,UACpBquO,eAAgBxjI,EAASwjI,eACzBplB,iBAAkBp+G,EAASo+G,iBAC3B/F,mBAAoBr4G,EAASipI,0BAE3B7vB,EAAar2L,EAAIwgN,kBAWrB,OATInqB,IACFA,EAAWwe,aAAaN,GAAgBD,UAAWmL,EAAWnL,WAC9Dje,EAAW30L,iBAAiB,SAAUymN,EAAiBlH,GAAmBzV,EAASkC,iBAO9ElO,IACN,CAACigB,EAAWnL,UAAWjjM,EAAY82M,EAAiBN,IACnDnY,EAAyB9tL,GAAY,WACvC,IAAI4pL,EAAWoc,EAAiBpnR,QAC5B00P,EAAUksB,GAA6B5V,GAE3C,OADEA,GAAYtW,GAAyJvuR,GAAU,GAC1Ky5S,GAAYlrB,KAClB,IACC4a,EAAcluL,GAAY,WAC5B,IAAI4pL,EAAWoc,EAAiBpnR,QAC/BgrQ,GAA8G7kS,GAAU,GACzH,IAAIuuR,EAAUksB,GAA6B5V,GAC3Coc,EAAiBpnR,QAAU,KAEtB00P,IAILgzB,EAAqB3jS,SACrB2wQ,EAAQ1T,gBAAgB+yB,GAAgBD,WACxCpf,EAAQvzL,oBAAoB,SAAUwmN,EAAiBlH,GAAmBzV,EAASkC,mBAClF,CAACya,EAAiBD,IACjBj2B,EAASrwK,GAAY,SAAUh/C,GACjC,IAAI4oO,EAAWoc,EAAiBpnR,QAC/BgrQ,GAA6G7kS,GAAU,GACxH,IAAIuuR,EAAUksB,GAA6B5V,GAC1CtW,GAA6HvuR,GAAU,GACxIuuR,EAAQorB,WAAa19O,EAAO1+B,EAC5BgxP,EAAQmrB,YAAcz9O,EAAOryD,IAC5B,IACCqjR,EAAY10P,GAAQ,WACtB,MAAO,CACL+vQ,2BAA4BA,EAC5BS,uBAAwBA,EACxBI,YAAaA,EACb7d,OAAQA,KAET,CAAC6d,EAAab,EAA4BS,EAAwBzd,IACjEt2R,EAAQujC,GAAQ,WAClB,MAAO,CACL43J,SAAUA,EACVzlF,WAAYA,EACZuiL,UAAWA,KAEZ,CAACA,EAAWviL,EAAYylF,IAC3Br4J,IAA0B,WAGxB,OAFAqpR,EAAuBtnR,QAAU7kC,EAAM01G,WACvCw9L,EAAS1Y,UAAUlwF,SAAStqM,GACrB,WACDisT,EAAiBpnR,SAEnBsvQ,IAGFjB,EAAS1Y,UAAUugB,WAAW/6S,MAE/B,CAACi4R,EAAWviL,EAAYy+L,EAAan0S,EAAOqxS,EAAS6B,EAAS1Y,YACjE13P,IAA0B,WACnBmpR,EAAiBpnR,SAItBwsQ,EAAQjF,yBAAyB+f,EAAuBtnR,QAAQ7G,IAAKjW,EAAK+8R,kBACzE,CAAC/8R,EAAK+8R,eAAgBzT,IACzBvuQ,IAA0B,WACnBmpR,EAAiBpnR,SAItBwsQ,EAAQhF,gCAAgC8f,EAAuBtnR,QAAQ7G,GAAIjW,EAAK23Q,oBAC/E,CAAC33Q,EAAK23Q,iBAAkB2R,IAi2B3Bob,CAAsB,CACpBtjC,YAAaA,EACblsR,KAAMA,EACN86H,KAAMA,EACNthD,UAAWA,EACXquO,eAAgBA,EAChBplB,iBAAkBA,EAClB6qB,wBAAyBA,EACzBsB,gBAAiBA,IAEnB,IAAI9jM,EAAcvmF,IAAMwB,cAAcwjR,GAAc,CAClD9wQ,GAAIzO,EAAM8gF,YACVo2K,cAAel3P,EAAM2jR,2BACpB,SAAUxnR,GACX,IAAIs+F,EAAUt+F,EAAKs+F,QACf3pF,EAAO3U,EAAK2U,KACZ8tQ,EAAUziR,EAAKyiR,QACnB,OAAOrkR,IAAMwB,cAAcgjR,GAAe,CACxCj+L,YAAahwE,EACb2pF,QAASA,EACTuoI,SAAU8hD,EACVlG,QAASA,EACTlN,UAAWA,EACXwN,gBAAiB6F,OAGjBznM,EAAWhhF,GAAQ,WACrB,MAAO,CACL0mO,SAAU6hD,EACV/jM,YAAaA,EACb2kM,eAAgB,CACd,wBAAyBvjC,EACzB,gCAAiCwvB,MAGpC,CAACA,EAAWxvB,EAAaphK,EAAa+jM,IACrC/B,EAAkBkB,EAAWA,EAASpb,SAAS/mB,YAAc,KAC7D6jC,EAAmBppR,GAAQ,WAC7B,MAAO,CACL4lP,YAAaA,EACblsR,KAAMA,EACN8sT,gBAAiBA,KAElB,CAAC5gC,EAAa4gC,EAAiB9sT,IAsBlC,OAAOukC,IAAMwB,cAAcujR,GAAiBpjR,SAAU,CACpD1qC,MAAOk0T,GACNtpR,EAASkhF,EAAU2jM,GAtBtB,WACE,IAAK+C,EACH,OAAO,KAGT,IAAIpb,EAAWob,EAASpb,SACpB1wK,EAAS8rL,EAAS9rL,OAClBh7H,EAAOq9B,IAAMwB,cAAc8mR,GAAkB,CAC/ChhC,YAAa+mB,EAAS/mB,YACtB5vR,MAAO22S,EAAS7lR,OAAO9wB,MACvB0yJ,SAAS,EACT8jD,WAAW,EACX8sG,yBAAyB,EACzBgC,4BAA4B,IAC3B,SAAUoO,EAAmBC,GAC9B,OAAO1tL,EAAOytL,EAAmBC,EAAmBhd,MAEtD,OAAOjpB,IAASkmC,aAAa3oT,EAAMsmT,KAKJsC,OAoKnCrC,GAAmBlsM,aAAeA,I,6BClzQlC,SAAS/I,EAAkB1rF,EAAQkd,GACjC,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CACrC,IAAI21G,EAAazuE,EAAMlnC,GACvB21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EACjD6wG,EAAW5wG,cAAe,EACtB,UAAW4wG,IAAYA,EAAW3wG,UAAW,GACjD5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAInC,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAG5D,OAFID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GACrDC,GAAaH,EAAkBprF,EAAaurF,GACzCvrF,EAbT,mC,6BCAA,+D,+OCGY26M,EAKAgoF,EAKA3wL,EASA4wL,E,kBAnBAjoF,K,4EAAAA,E,6EAAAA,M,cAKAgoF,K,8DAAAA,E,iEAAAA,M,cAKA3wL,K,gDAAAA,E,8CAAAA,E,kDAAAA,E,2CAAAA,M,cASA4wL,K,sBAAAA,E,iCAAAA,M,KAKL,IAAMC,GAA2F,mBACrGD,EAAgCE,UAAY,qDADyD,cAErGF,EAAgCG,eAAiB,mDAFoD,GAK3FxwQ,EAAsB,UACtBgsL,EAA+B,8C,4LCCtCykF,EAA+C,SAAC,GAI/C,IAHLC,EAGI,EAHJA,cACAjqR,EAEI,EAFJA,SACGhiB,EACC,iBACEksS,EAAiB/rR,WAAez7B,IAAIs9B,GAAU,SAAC4T,GAAD,OAAWzV,iBAAqByV,GAClFzV,eAAmByV,EAAnB,eACG51B,IAEH,QACF,OAAO,cAAC,IAAD,CACLmsS,iBAAiB,EACjBC,cAAeviS,gBAAgBwzB,IAASa,eAAY1mD,EACpDy0T,cAAe,WACb,OAAqB,MAAjBA,EACK,eAAC,IAAD,WACJA,IACAC,KAGE,cAAC,IAAD,UACJA,QAMHG,E,4JAEJ,WACE,MAKI3wT,KAAKkqC,MALT,IACEw6D,aADF,MACU,EADV,EAEEp+D,EAFF,EAEEA,SACAiqR,EAHF,EAGEA,cAHF,IAIEK,kBAJF,MAIe,EAJf,EAOA,OACElsN,GACGksN,GACAlsN,GAASksN,EAEL,cAACN,EAAD,CACLC,cAAeA,EADV,SAGJjqR,IAIE,qBAAKg1E,MAAO,CAAElgC,QAAS,c,GAtBd32C,aA0BdmI,EAAkBkG,YAAyB,CAC/C4xD,MAAOmsN,gBAGM57O,sBACb4pC,kBAAQjyE,EAAiB,MADZqoC,CAEb07O,I,6BC7FF,kCAAO,IAAMl/B,EAAY,iB,8BCAV,SAASrkQ,EAAgBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAIjrB,UAAU,qCAFxB,mC,urKC2CC,e,mzCAgBgDyuT,S,47FAiWtC9tT,yB,+iNCjZT,6B,0CAUA,G,o1CCQA,G,+sJCjBA,K,+oDCHI+tT,E,WAMJ,WAAYC,GAAsC,IAArBjqQ,EAAoB,uDAAJ,GAAI,yBAL1Ck5C,WAK0C,OAJ1C+wN,aAI0C,OAH1CC,cAG0C,OAF1ClqQ,WAE0C,EAC/C/mD,KAAKigG,MAAQgF,IAAiBC,QAAQ,4BACtCllG,KAAKgxT,QAAUA,EACfhxT,KAAKixT,SAAWx4R,mBAASrK,WAAa,cACtCpuB,KAAK+mD,MAAQA,E,6CAGf,WACE,IAAMmqQ,EAAU,CACd,eAAgB,oBAQlB,OANIlxT,KAAKixT,WACPC,EAAQlxT,KAAKixT,UAAYjxT,KAAKigG,OAE5BjgG,KAAK+mD,QACPmqQ,EAAQ,gBAAkBlxT,KAAK+mD,OAE1BmqQ,I,8DAGT,WAAuB3qN,GAAvB,gGAE2B4qN,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,MACR6pN,QAASlxT,KAAKoxT,cAJpB,WAEUroM,EAFV,QAMkB3gB,GANlB,sBAOY,IAAIxgG,MAAJ,8BAAiCmhH,EAAStjB,SAPtD,uBASiBsjB,EAASsoM,OAT1B,0EAYIrpS,QAAQ7Z,MAAM,kBAAd,MAZJ,0D,gIAgBA,WAAkCo4F,GAAlC,gGAE2B4qN,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,MACR6pN,QAASlxT,KAAKoxT,cAJpB,YAEUroM,EAFV,QAMiB3gB,GANjB,6BASgB2gB,EAAStjB,OATzB,SAUoBsjB,EAASsoM,OAV7B,6CAQQC,SAAS,EACT7rN,OATR,KAUQzqD,KAVR,KAWQ7sC,MAAO,OAXf,iCAca,CACLmjT,SAAS,EACT7rN,OAAQsjB,EAAStjB,OACjBzqD,KAAM+tE,EACN56G,MAAO,OAlBf,iEAuBI6Z,QAAQ7Z,MAAM,iBAAd,MAvBJ,kBAwBW,CACLmjT,SAAS,EACT7rN,OAAQ,EACRzqD,KAAM,KACN7sC,MAAO,gBAAiBvG,MAAQ,KAAMypC,QAAU,8BA5BtD,0D,iIAiCA,WAAmCk1D,GAAnC,kFACQ3yF,EAAS,CACb09S,SAAS,EACTl8S,MAAO,EACP8xB,QAAS,IAJb,kBAO2BiqR,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,MACR6pN,QAASlxT,KAAKoxT,YACdruT,MAAO,aAVb,cAOUgmH,EAPV,QAYkB3gB,KACZx0F,EAAO09S,SAAU,GAEnB19S,EAAOwB,MAAQzT,OAAOonH,EAASmoM,QAAQntT,IAAI,gBAf/C,SAgBwCglH,EAASsoM,OAhBjD,OAgBUE,EAhBV,OAiBI39S,EAAOszB,QAAP,OAAiBqqR,QAAjB,IAAiBA,OAAjB,EAAiBA,EAASrqR,QAjB9B,kDAmBItzB,EAAO09S,SAAU,EAnBrB,iCAqBS19S,GArBT,0D,gHAwBA,WAAkB2yF,EAAkBvrD,EAAW4gO,GAA/C,gGAE2Bu1C,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,OACR6pN,QAASlxT,KAAKoxT,YACd36O,KAAM9nE,KAAKC,UAAUosC,GACrB4gO,WANN,YAEU7yJ,EAFV,QAQiB3gB,GARjB,6BAWgB2gB,EAAStjB,OAXzB,SAYoBsjB,EAASsoM,OAZ7B,6CAUQC,SAAS,EACT7rN,OAXR,KAYQzqD,KAZR,KAaQ7sC,MAAO,OAbf,iCAgBa,CACLmjT,SAAS,EACT7rN,OAAQsjB,EAAStjB,OACjBzqD,KAAM+tE,EACN56G,MAAO,OApBf,iEA0BI6Z,QAAQ7Z,MAAM,kBAAd,MA1BJ,kBA2BW,CACLmjT,SAAS,EACT7rN,OAAQ,EACRzqD,KAAM,KACN7sC,MAAO,gBAAiBvG,MAAQ,KAAMypC,QAAU,8BA/BtD,0D,sHAoCA,WAAoBk1D,EAAkBtlE,EAAY+Z,GAAlD,gGAE2Bm2Q,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,EAAnB,YAA+BtlE,GAAM,CAC/DomE,OAAQ,QACR6pN,QAASlxT,KAAKoxT,YACd36O,KAAM9nE,KAAKC,UAAUosC,KAL3B,WAEU+tE,EAFV,QAOkB3gB,GAPlB,sBAQY,IAAIxgG,MAAJ,8BAAiCmhH,EAAStjB,SARtD,uBAUiBsjB,EAASsoM,OAV1B,0EAaIrpS,QAAQ7Z,MAAM,kBAAd,MAbJ,0D,mHAiBA,WAAiBo4F,EAAkBvrD,GAAnC,gGAE2Bm2Q,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,MACR6pN,QAASlxT,KAAKoxT,YACd36O,KAAM9nE,KAAKC,UAAUosC,KAL3B,WAEU+tE,EAFV,QAOkB3gB,GAPlB,sBAQY,IAAIxgG,MAAJ,8BAAiCmhH,EAAStjB,SARtD,uBAUiBsjB,EAASsoM,OAV1B,0EAaIrpS,QAAQ7Z,MAAM,kBAAd,MAbJ,0D,oHAiBA,WAAoBo4F,GAApB,gGAE2B4qN,MAAM,GAAD,OAAInxT,KAAKgxT,SAAT,OAAmBzqN,GAAY,CACzDc,OAAQ,SACR6pN,QAASlxT,KAAKoxT,cAJpB,cAEUroM,EAFV,gBAMiBA,EAASsoM,OAN1B,wEASIrpS,QAAQ7Z,MAAM,oBAAd,MATJ,yD,8DAea4iT,O,mnBCzHTS,GAA0D,SAAAtnR,GAC9D,IACEgvC,EAOEhvC,EAPFgvC,QACAu4O,EAMEvnR,EANFunR,YAFF,EAQIvnR,EALFgzE,gBAHF,SAIE+vH,EAIE/iM,EAJF+iM,SAJF,EAQI/iM,EAHFgmF,uBALF,SAMEwhM,EAEExnR,EAFFwnR,gBACA3lS,EACEme,EADFne,EAGF,EAA0B0Y,WAAA,OAAeitR,QAAf,IAAeA,IAAmB3yR,YAASC,KAArE,mBAAOtjC,EAAP,KAAci2T,EAAd,KAMMC,EAAW,SAAC,GAAsD,IAApDtrR,EAAmD,EAAnDA,SAAUurR,EAAyC,EAAzCA,SAAalxS,EAA4B,kBACrE,OACE,eAACk4D,EAAA,EAAD,yBACE4sD,OAAQosL,IAAan2T,GACjBilB,GAFN,aAIG2lB,MAKP,OACE,gBAACyqF,EAAA,EAAD,CACEb,gBAAiBA,EACjB92C,UAAWF,EAAQzC,KAFrB,UAIE,eAACy6C,GAAA,EAAD,CACEC,WAAY,eAAC,KAAD,IACZ,gBAAc,gBACdlwF,GAAG,eACHm4C,UAAWF,EAAQ44O,QAJrB,SAME,eAACt4M,EAAA,EAAD,UAAai4M,MAEf,gBAACphM,GAAA,EAAD,CAAuBj3C,UAAWF,EAAQ64O,aAA1C,UACE,gBAACC,EAAA,EAAD,CACEt2T,MAAOA,EACP8/G,SA/Bc,SAACz9F,EAA0BlO,GAC/C8hT,EAAS9hT,IA+BH,aAAYkc,EAAE,8BACdkmS,eAAe,UACfC,UAAU,UALZ,UAOE,eAACC,EAAA,EAAD,CAAKz2T,MAAOqjC,YAASC,IAAK8B,MAAO/U,EAAE,qBAAsBqtD,UAAWF,EAAQk5O,OAC5E,eAACD,EAAA,EAAD,CAAKz2T,MAAOqjC,YAASE,IAAK6B,MAAO/U,EAAE,qBAAsBqtD,UAAWF,EAAQk5O,UAG5E,CAACrzR,YAASC,IAAKD,YAASE,KAAKj2B,KAAI,SAACkkO,GAAD,OAC/B,gBAAC0kF,EAAD,CAAyBC,SAAU3kF,EAAnC,UACE,sBAAK9zJ,UAAWF,EAAQm5O,eAAxB,SACE,eAAC,QAAD,CACE7jT,KAAI,gBAAWy+N,EAAX,YAAuBC,EAAvB,UACJ5zJ,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,6CACT4tF,WAAY,CACV1T,MAAO,UACPlqG,KAAM,QACNmhH,iBAMN,CAAC,OAAQ,OAAQ,QAAQl0G,KAAI,SAACupT,GAAD,OAC3B,eAACC,EAAA,EAAD,CAEEhkT,KAAI,gBAAWy+N,EAAX,YAAuBC,EAAvB,YAAmCqlF,GACvCroR,MAAO,CACLpJ,MAAO/U,EAAE,iBAAD,OAAkBwmS,IAC1B54M,WAAY,CACVuD,aAGJh9G,KAAK,SACLuyT,iBAAiB,GATZF,QAlBErlF,aAuCZj4J,qBACbgG,aAjHa,SAACC,GAAD,MAA+B,CAC5CzE,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B83O,KAAM,CACJ52O,SAAU,OAEZu2O,aAAc,CACZt2O,cAAe,SACfK,QAASZ,EAAMZ,QAAQ,IAEzBw3O,QAAS,CACPh2O,QAAS,GAEXu2O,eAAgB,CACd92O,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,EAAG,QAmGjCn7B,YAAgB,gBAFH81B,CAGbxwC,OAAW+sR,K,iPClJPhiM,GAAYJ,cAAW,SAACl0C,GAAD,OAAkB2zL,aAAa,CAC1Dp4L,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B+4C,aAAc,iBACd/3C,MAAO,QAETw2O,QAAS,CACPh2O,QAAS,GAEX42O,YAAa,CACXt3O,QAAS,QAEXw2C,KAAM,CACJpQ,YAAatmC,EAAMZ,QAAQ,GAC3BgB,MAAO,GACPi2C,OAAQ,IAEVohM,SAAU,CACRttM,OAAQ,UACRpf,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7BwQ,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEdm8L,uBAAwB,CACtB5tM,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzClnD,QAASZ,EAAMZ,QAAQ,IACvBgiC,UAAWphC,EAAMZ,WAEnBu4O,UAAW,CACTt3O,OAAQL,EAAMZ,QAAQ,GAAI,GAAI,GAAI,KAClCgB,MAAO,GACPi2C,OAAQ,SA6PGt8C,qBACb91B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DqoE,WAAYC,wBAAc03M,KADOhgR,CAEhC9L,MAGwB,SAAC2D,GAAD,MAAwC,CAAEA,eAEtDsqC,EAtO4D,SAAC,GAcrE,IAbL89O,EAaI,EAbJA,SACAC,EAYI,EAZJA,OACA1jD,EAWI,EAXJA,QACAn0J,EAUI,EAVJA,WACA83M,EASI,EATJA,mBACAnyR,EAQI,EARJA,MAEAoyR,GAMI,EAPJloM,YAOI,EANJkoM,uBACAC,EAKI,EALJA,gBACAC,EAII,EAJJA,mBACAC,EAGI,EAHJA,aACA1oR,EAEI,EAFJA,SACA5e,EACI,EADJA,EAGA,EAAkE0Y,YAAe,GAAjF,mBAAO6uR,EAAP,KAAkCC,EAAlC,KAEMr6O,EAAUs2C,KACVgkM,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAC5E+/S,EAAWa,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,aAC5DU,EAAaD,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,eAC9DW,EAASF,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,WAE1DY,EAA8BV,EAAmBryS,MAAM,CAACyyS,EAAcN,EAAU,WAChFa,EAAgBF,GAAUD,GAAeE,EACzCE,EAAaF,GAA+BH,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,aAAeY,EAC5GG,EAAkBD,EAAaX,EAAwB,GAE7D,EASIa,aAAc,CAAC,QATnB,IACEC,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAEFC,EAPF,EAOEA,aACAC,EARF,EAQEA,QAGI5V,EAAc,SAAoBhjT,GACtC,IAAMD,EAAMgpC,WAIZ,OAHAA,aAAgB,WACdhpC,EAAIqsC,QAAUpsC,KAETD,EAAIqsC,SAEPysR,EAAiB7V,EAAY+U,GAC7Be,EAAmB9V,EAAY2U,GAmCrC,OAjCA5uR,aAAgB,WAEZ8uR,KADEgB,GAAmBd,GAAce,IAAqBnB,MAKzD,CAACI,EAAYJ,IAEhB5uR,aAAgB,WAAO,IAAD,GACpB,UAAIwuR,EAAmBlvT,IAAIsvT,UAA3B,aAAI,EAAsCt3T,OACxCs4T,EAAa,QAEd,CAACpB,EAAmBlvT,IAAIsvT,KAE3B5uR,aAAgB,WACd,GAAKwvR,EAAL,CAIA,IAAMQ,GAAmBx8S,OAAKF,OAAOy7S,GAAY5gT,gBAAQ4gT,GAAUxiT,eAAc,SAACywQ,GAChFA,EAAIpyQ,SAAS,CAAC,QAASgkT,EAAcN,IAAW,SAAC98S,GAC/C,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,EAAalwT,IAAI,MACzB2wT,SAAUT,EAAalwT,IAAI,gBAC3B4wT,SAAUV,EAAalwT,IAAI,aAC3BhI,KAAMk4T,EAAalwT,IAAI,QACvB0vT,YAAY,WAIlB9oR,EAASu/B,YAAO4oP,GAA0B,OAAQ2B,OACjD,CAACR,IAGF,gBAACljM,EAAA,EAAD,CACEb,iBAAiB,EACjB92C,UAAWF,EAAQzC,KAFrB,UAIE,eAACy6C,GAAA,EAAD,CACEC,WAAY,eAAC,KAAD,IACZ,gBAAc,gBACdlwF,GAAG,eACHm4C,UAAWF,EAAQ44O,QAJrB,SAME,eAACt4M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B54E,MAE/B,gBAAC+3C,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXa,QAAQ,gBAHV,UAKE,eAACjB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJJ,KAAK,SACLvB,WAAW,SACXO,WAAW,EALb,SAQI26O,EAEM,gBAACS,GAAA,EAAD,CAAKt5O,MAAM,OAAX,UACE,eAACu5O,GAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoBjuN,MAAM,YAAYqV,MAAO,CAAEj/B,SAAU,KAC7G,gBAACm9B,EAAA,EAAD,WAAa06M,EAAb,UAGJE,EAEM,uCACE,eAAC,KAAD,CAAoBnuN,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OACtE,eAACpY,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,QAAlC,SAEI06M,IAAcU,KAAW/4T,KACrBgwB,EAAE,kCACFqoS,IAAcU,KAAW50T,KACvB6rB,EAAE,2BACFA,EAAE,kCAKhB6nS,EACI,uCACIC,GACE,eAAC5pM,EAAA,EAAD,CAASC,MAAOipM,EAAhB,SACE,eAAC,KAAD,CAAaltN,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAItD,eAAC3H,EAAA,EAAD,CAASC,MAAOyoM,EAAhB,SACE,wBAAOoC,QAAShC,EAAUz3M,MAAO,CAAE+O,SAAU,UAA7C,SACE,eAAC7Q,EAAA,EAAD,CAAYpgC,UAAWF,EAAQy5O,SAA/B,SACIA,WAMV,OAIdW,GACE,gBAACz6O,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQ05O,uBAAxD,UACE,eAAC,KAAD,CAAiB3sN,MAAM,YAAY7sB,UAAWF,EAAQ25O,YACtD,eAACr5M,EAAA,EAAD,CAAYvT,MAAM,YAAYyT,QAAQ,QAAtC,SACG05M,OAKT,gBAACv6O,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJpB,WAAW,EACXT,aAAa,SACbe,QAAQ,WALV,UAOE,wBACEV,UAAWF,EAAQw5O,YACnBxyT,KAAK,OACLsO,KAAK,OACLgtG,SAAU,SAACpzG,GACTksT,EAAQlsT,EAAE4kB,OAAO2wE,MAAM,IACvBv1F,EAAE4kB,OAAOtxB,MAAQ,MAEnBs3T,OAAQA,EACR/xR,GAAI8xR,IAEN,gBAACl6O,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WAFV,UAIE,eAACmwC,EAAA,EAAD,CAASC,MAAO4pM,EAAhB,SACE,gCACE,eAACp5L,EAAA,EAAD,CACExd,UAAWu2M,EACX5uM,QAAS,WACP,GAAI8uM,EAA6B,CAC/B,IAAMqB,EAAW/B,EAAmBryS,MAAM,CAACyyS,EAAcN,IACnDkC,EAAUzB,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,QAC3DmC,EAAkBD,EAAUD,EAASttT,IAAI,MAAOutT,GAAWD,EAC3DG,EAAW3B,EACdtjT,MAAM,CAAC,QAASmjT,EAAcN,GAAWmC,GAC5CvqR,EAASu/B,YAAO4oP,GAAD,OAAmCqC,SAElDxqR,EAASu/B,YAAO4oP,GAAD,OAAmCU,EAASnjT,SAAS,CAAC,QAASgjT,EAAcN,OAXlG,SAeE,eAAC,KAAD,UAIN,wBAAOgC,QAAShC,EAAhB,SACE,eAAC9oM,EAAA,EAAD,CAASC,MAAOolJ,EAAhB,SACE,gCACE,eAAC50I,EAAA,EAAD,CACExd,SAAUi3M,EACV76O,UAAU,OAFZ,SAIE,eAAC,KAAD,2B,gFCvQdk2C,GAAYJ,cAAW,SAACl0C,GAAD,OAAkB2zL,aAAa,CAC1Dp4L,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B+4C,aAAc,iBACd/3C,MAAO,QAETw2O,QAAS,CACPh2O,QAAS,GAEX42O,YAAa,CACXt3O,QAAS,QAEXw2C,KAAM,CACJpQ,YAAatmC,EAAMZ,QAAQ,GAC3BgB,MAAO,GACPi2C,OAAQ,IAEVohM,SAAU,CACRttM,OAAQ,UACRpf,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7BwQ,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEdm8L,uBAAwB,CACtB5tM,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzClnD,QAASZ,EAAMZ,QAAQ,IACvBgiC,UAAWphC,EAAMZ,WAEnBu4O,UAAW,CACTt3O,OAAQL,EAAMZ,QAAQ,GAAI,GAAI,GAAI,KAClCgB,MAAO,GACPi2C,OAAQ,IAEV/vB,IAAK,CACH6jB,OAAQ,UACRpf,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7BwQ,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEdhS,MAAO,CACL3oC,QAASZ,EAAMZ,QAAQ,GAAK,MAC5B6sC,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnCiuM,SAAU,CACRltM,WAAY,EACZ1G,YAAa,GAEf6zM,WAAY,CACV/5O,MAAO,UAiXIrG,qBACb91B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DqoE,WAAYC,wBAAc03M,KADOhgR,CAEhC9L,MAGwB,SAAC2D,GAAD,MAAwC,CAAEA,eAEtDsqC,EAvV8C,SAAC,GAiBvD,IAhBL89O,EAgBI,EAhBJA,SACAC,EAeI,EAfJA,OACAsC,EAcI,EAdJA,cACAC,EAaI,EAbJA,gBACAp6M,EAYI,EAZJA,WACA83M,EAWI,EAXJA,mBACAnyR,EAUI,EAVJA,MAEAoyR,GAQI,EATJloM,YASI,EARJkoM,uBACAC,EAOI,EAPJA,gBACAC,EAMI,EANJA,mBACAoC,EAKI,EALJA,UACAC,EAII,EAJJA,gBACApC,EAGI,EAHJA,aACA1oR,EAEI,EAFJA,SACA5e,EACI,EADJA,EAEMmtD,EAAUs2C,KACVgkM,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAC5E6gT,EAAaD,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,eAC9DJ,EAAWa,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,aAC5DW,EAASF,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,WAC1DkC,EAAUzB,EAAS5yS,MAAM,CAAC,QAASyyS,EAAcN,EAAU,SAAW,GAEtEY,EAA8BV,EAAmBryS,MAAM,CAACyyS,EAAcN,EAAU,WAChF2C,EAA2BzC,EAAmBryS,MAAM,CAACyyS,EAAcN,EAAU,QAE7Ec,GAAcJ,IAEfE,GAA+BD,IAAWC,GACvC+B,GAA4BT,IAAYS,GAE1C5B,EAAkBD,EAAaX,EAAwB,GAE7D,EAAoCzuR,WAAepnC,QAAQ43T,IAA3D,mBAAOU,EAAP,KAAmBC,EAAnB,KACA,EAAwBnxR,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KACA,EAAsB9rF,WAAe,IAArC,mBAAO+8D,EAAP,KAAYq0N,EAAZ,KACA,EAAkCpxR,WAAe,IAAjD,mBAAOqxR,EAAP,KAAkBC,EAAlB,KACA,EAAkEtxR,YAAe,GAAjF,oBAAO6uR,GAAP,MAAkCC,GAAlC,MAIA9uR,aAAgB,WACdmxR,EAAcv4T,QAAQ43T,MACrB,CAACA,IAEJ,OASIlB,aAAc,CAAC,QATnB,MACEC,UACEC,GAFJ,GAEIA,aACAC,GAHJ,GAGIA,kBACAC,GAJJ,GAIIA,YACAC,GALJ,GAKIA,UAEFC,GAPF,GAOEA,aACAC,GARF,GAQEA,QAGI5V,GAAc,SAAoBhjT,GACtC,IAAMD,EAAMgpC,WAIZ,OAHAA,aAAgB,WACdhpC,EAAIqsC,QAAUpsC,KAETD,EAAIqsC,SAEPysR,GAAiB7V,GAAY+U,GAC7Be,GAAmB9V,GAAY2U,GAErC5uR,aAAgB,WAEZ8uR,MADEgB,IAAmBd,GAAce,KAAqBnB,MAKzD,CAACI,EAAYJ,IAEhB5uR,aAAgB,WAAO,IAAD,GACpB,UAAIwuR,EAAmBlvT,IAAIsvT,UAA3B,aAAI,EAAsCt3T,OACxCs4T,GAAa,QAEd,CAACpB,EAAmBlvT,IAAIsvT,KAE3B5uR,aAAgB,WACd,GAAKwvR,GAAL,CAIA,IAAMQ,GAAmBx8S,OAAKF,OAAOy7S,GAAY5gT,gBAAQ4gT,GAAUxiT,eAAc,SAACywQ,GAChFA,EAAIpyQ,SAAS,CAAC,QAASgkT,EAAcN,IAAW,SAAC98S,GAC/C,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,GAAalwT,IAAI,MACzB2wT,SAAUT,GAAalwT,IAAI,gBAC3B4wT,SAAUV,GAAalwT,IAAI,aAC3BhI,KAAMk4T,GAAalwT,IAAI,QACvB0vT,YAAY,WAIlB9oR,EAASu/B,YAAO4oP,GAA0B,OAAQ2B,IAClDoB,EAAO,OACN,CAAC5B,KAEJ,IAIM/sL,GAAc,WAClB3W,GAAQ,GACRwlM,EAAa,IACTd,GAAWzzN,GACbq0N,EAAO,KAIX,OACE,gBAAC9kM,EAAA,EAAD,CACEb,iBAAiB,EACjB92C,UAAWF,EAAQzC,KAFrB,UAIE,eAACy6C,GAAA,EAAD,CACEC,WAAY,eAAC,KAAD,IACZ,gBAAc,gBACdlwF,GAAG,eACHm4C,UAAWF,EAAQ44O,QAJrB,SAME,eAACt4M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B54E,MAE/B,gBAAC+3C,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXa,QAAQ,gBAHV,UAKE,eAACjB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJJ,KAAK,SACLvB,WAAW,SACXO,WAAW,EALb,SAQI26O,GAEM,gBAACS,GAAA,EAAD,CAAKt5O,MAAM,OAAX,UACE,eAACu5O,GAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,IAAoBjuN,MAAM,YAAYqV,MAAO,CAAEj/B,SAAU,KAC7G,gBAACm9B,EAAA,EAAD,WAAa06M,GAAb,UAGJE,GAEM,uCACE,eAAC,KAAD,CAAoBnuN,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OACtE,eAACpY,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,QAAlC,SAEI06M,KAAcU,KAAW/4T,KACrBgwB,EAAE,kCACFqoS,KAAcU,KAAW50T,KACvB6rB,EAAE,2BACFA,EAAE,kCAKhB4mS,EACI,uCACIkB,GACE,eAAC5pM,EAAA,EAAD,CAASC,MAAOipM,EAAhB,SACE,eAAC,KAAD,CAAaltN,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAItD,eAAC3H,EAAA,EAAD,CAASC,MAAOyoM,GAAY,GAA5B,SACE,wBAAOoC,QAAShC,EAAUz3M,MAAO,CAAE+O,SAAU,UAA7C,SACE,eAAC7Q,EAAA,EAAD,CAAYpgC,UAAWF,EAAQy5O,SAA/B,SACIA,WAKVgD,EACI,uCACI9B,GACE,eAAC5pM,EAAA,EAAD,CAASC,MAAOipM,EAAhB,SACE,eAAC,KAAD,CAAaltN,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAItD,eAAC3H,EAAA,EAAD,CAASC,MAAO+qM,GAAW,GAA3B,SACE,eAACz7M,EAAA,EAAD,CAAYpgC,UAAWF,EAAQsoB,IAA/B,SACIyzN,SAIR,OAIlB3B,IACE,gBAACz6O,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQ05O,uBAAxD,UACE,eAAC,KAAD,CAAiB3sN,MAAM,YAAY7sB,UAAWF,EAAQ25O,YACtD,eAACr5M,EAAA,EAAD,CAAYvT,MAAM,YAAYyT,QAAQ,QAAtC,SACG05M,OAKT,gBAACv6O,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJpB,WAAW,EACXT,aAAa,SACbe,QAAQ,WALV,UAOE,wBACEV,UAAWF,EAAQw5O,YACnBxyT,KAAK,OACLsO,KAAK,OACLgtG,SAAU,SAACpzG,GACTksT,GAAQlsT,EAAE4kB,OAAO2wE,MAAM,IACvBv1F,EAAE4kB,OAAOtxB,MAAQ,MAEnBs3T,OAAQA,EACR/xR,GAAI8xR,IAEN,gBAACl6O,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WAFV,UAIE,eAACmwC,EAAA,EAAD,CAASC,MAAO4pM,EAAhB,SACE,gCACE,eAACp5L,EAAA,EAAD,CACExd,UAAWu2M,EACX5uM,QAAS,WACP,GAAI8uM,GAA+B+B,EAA0B,CAC3D,IAAMV,EAAW/B,EAAmBryS,MAAM,CAACyyS,EAAcN,IACnDoC,EAAW3B,EACdtjT,MAAM,CAAC,QAASmjT,EAAcN,GAAWiC,GAC5CrqR,EAASu/B,YAAO4oP,GAAD,OAAmCqC,SAElDxqR,EAASu/B,YAAO4oP,GAAD,OAAmCU,EAASnjT,SAAS,CAAC,QAASgjT,EAAcN,MAGzF2C,GACHE,GAAc,IAbpB,SAiBE,eAAC,KAAD,UAIN,wBAAOb,QAAShC,EAAhB,SACE,eAAC9oM,EAAA,EAAD,CAASC,MAAOorM,EAAhB,SACE,gCACE,eAAC56L,EAAA,EAAD,CACExd,SAAUi3M,GACV76O,UAAU,OAFZ,SAIE,eAAC,KAAD,YAKR,eAAC2wC,EAAA,EAAD,CAASC,MAAOqrM,EAAhB,SACE,gCACE,eAAC76L,EAAA,EAAD,CAEEphD,UAAU,OACVurC,QArKG,WACjB0L,GAAQ,IAiKI,SAKE,eAAC,KAAD,gBAOV,gBAACylM,GAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAASuC,GAAa,kBAAgB,oBAA1D,UACE,eAAC+uL,GAAA,EAAD,CAAe78O,UAAWF,EAAQm8O,WAAlC,SACA,eAACv0L,GAAA,EAAD,CACEjnB,WAAW,EADb,SAGE,eAACq8M,EAAA,EAAD,CACEh2T,KAAK,OACL4gC,MAAO00R,EACPxqM,YAAayqM,EACb/5T,MAAO8lG,EACPga,SAAU,SAAC2rB,GAAD,OAAW0uL,EAAO1uL,EAAMn6G,OAAOtxB,QACzCohH,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQurC,QAGnB0xM,oBAAqB,CACnB56O,OAAQ,QACRrC,QAAS,CACP2rM,UAAW3rM,EAAQk8O,WAGvBjnT,MAAO9Q,QAAQy4T,GACfjpM,WAAYipM,QAIhB,gBAACM,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQE,QAASqiB,GAAajhC,MAAM,UAApC,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACEjL,QAAQ,OACRzT,MAAM,UACN3sB,UAAU,OAEVurC,QAAS,WACP,GAAIrjB,GAAO60N,aAAM70N,GAAM,CACrB,IAAMmpM,GAAW1yR,OAAKF,OAAOy7S,GAAY5gT,gBAAQ4gT,GAC9CtjT,MAAM,CAAC,QAASmjT,EAAcN,GAAWngT,cAAI,CAC5C4uF,MACAiyN,WAAY11H,eAEhBpzJ,EAASu/B,YAAO4oP,GAA0B,OAAQnoB,IAClDirB,GAAc,GACd1uL,UAEA6uL,EAAahqS,EAAE,iCAhBrB,SAoBGA,EAAE,uC,yECraJuqS,GAAgB,SAChBC,GAA2B,iCAe3BC,GAAqC,SAAC,GAA4F,IAA1Ft9L,EAAyF,EAAzFA,cAAeu9L,EAA0E,EAA1EA,WAAYxjG,EAA8D,EAA9DA,QAASyjG,EAAqD,EAArDA,cACjFC,EAAgD,kBAAlBz9L,EAA6BA,EAAcsF,OAAStF,EAClF09L,EAA0C,kBAAfH,EAA0BA,EAAWj4L,OAASi4L,EAC/E,OAAKxjG,IAAa0jG,GAAyBC,GAGpC,qCACL3jG,WAEG0jG,EAAuB,CAAEz9L,cAAey9L,GAAyB,IACjEC,EAAoB,CAAEH,WAAYG,GAAsB,IACxDF,EAAgB,CAAEA,iBAAkB,IAPhC,MAgBEG,GAA2B,SAAC77Q,GACvC,IAAMpnC,EAASwV,iBAAO4xB,GAAQ,IAAIp6B,MAAM,CAAC,UAAW,UACpD,OAAI,OAAChN,QAAD,IAACA,OAAD,EAACA,EAAQ7P,IAAI,iBAGV6P,EAAOgN,MAAM,CAAC,aAAc,KAF1B,MAUEk2S,GAA0B,uCAAG,qCAAAnxT,EAAA,yDACtCsiG,EADsC,EACtCA,OAAQ2zK,EAD8B,EAC9BA,OAAW5wP,EADmB,kBAGlCyrD,EAAO+/O,GAAmCxrS,GAHR,yCAK/B,MAL+B,cAOxCm9E,aAA0BF,EAAQ,CAChC3B,QAASgwN,GACT/vN,SAAUgwN,GACVlvN,OAAQ,SAV8B,SAYrBY,EAAOJ,QAAQ,CAChCvB,QAASgwN,GACT/vN,SAAUgwN,GACV9/O,OACAmlM,WAhBsC,cAYlC95H,EAZkC,yBAkBjC+0K,GAAyB/0K,IAlBQ,2CAAH,sD,oBC9BjCtyB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C67O,mBAAoB,CAClBv1M,YAAatmC,EAAMZ,QAAQ,QA6ChB08O,GAzCgB,SAACC,GAC9B,IACEtsN,EAGEssN,EAHFtsN,KACAg6B,EAEEsyL,EAFFtyL,QACAuyL,EACED,EADFC,UAGKnrS,EAAK+xB,YAAe,gBAApB/xB,EACDmtD,EAAUs2C,KAEhB,OACE,gBAACwmM,GAAA,EAAD,CACErxL,QAASA,EACT,mBAAiB,2BACjBh6B,KAAMA,EAHR,UAKE,eAACsrN,GAAA,EAAD,UACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACE3tF,EAAE,8CAGN,gBAACqqS,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAAS8f,EACT1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHrB,SAKIhrS,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEE,QAASqyM,EACTjxN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBAHrB,SAKIhrS,EAAE,4B,oBCrCRyjG,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Ck8O,aAAc,CACZ96O,SAAU,KAEZy6O,mBAAoB,CAClBv1M,YAAatmC,EAAMZ,QAAQ,IAE7B+8O,cAAe,CACbhkM,aAAcn4C,EAAMZ,QAAQ,IAE9Bg9O,SAAU,CACRh8O,MAAO,YAqFIi8O,GAjFkB,SAACC,GAChC,IACE7sN,EAIE6sN,EAJF7sN,KACA8sN,EAGED,EAHFC,mBACA9yL,EAEE6yL,EAFF7yL,QACA+yL,EACEF,EADFE,OAGK3rS,EAAK+xB,YAAe,gBAApB/xB,EACDmtD,EAAUs2C,KAChB,EAA8B/qF,WAAoCgzR,GAAlE,mBAAOE,EAAP,KAAgBC,EAAhB,KAEAnzR,aAAgB,WACVkmE,GACFitN,EAAWH,KAEZ,CAAC9sN,IAEJ,IAAMktN,EAAc,CAClB,CAAE33T,KAAM,SAAU4gC,MAAO/U,EAAE,uCAAwCiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASG,QACrF,CAAE53T,KAAM,gBAAiB4gC,MAAO/U,EAAE,+CAAgDiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASz+L,eACpG,CAAEh5H,KAAM,MAAO4gC,MAAO/U,EAAE,qCAAsCiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASzkG,KAChF,CAAEhzN,KAAM,QAAS4gC,MAAO/U,EAAE,8CAA+CiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASx+L,OAC3F,CAAEj5H,KAAM,WAAY4gC,MAAO/U,EAAE,0CAA2CiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASvgM,UAC1F,CAAEl3H,KAAM,cAAe4gC,MAAO/U,EAAE,6CAA8CiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASh3L,aAChG,CAAEzgI,KAAM,QAAS4gC,MAAO/U,EAAE,uCAAwCiwG,QAAO,OAAE27L,QAAF,IAAEA,OAAF,EAAEA,EAASvrH,QAGtF,OACE,eAAC4pH,GAAA,EAAD,CACErxL,QAASA,EACT,mBAAiB,6BACjBh6B,KAAMA,EAHR,SAKE,uBAAKvxB,UAAWF,EAAQk+O,aAAxB,UACE,gBAACnB,GAAA,EAAD,WACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQm+O,cAAnE,SACItrS,EAAE,oCAGJ8rS,EAAY7uT,KAAI,SAAC4wE,GAAD,OACd,eAACm+O,GAAA,EAAD,CAEExwM,QACE,eAAC6U,GAAA,EAAD,CACEn2B,MAAM,YAGVnlE,MAAO84C,EAAK94C,MACZs4C,UAAWF,EAAQo+O,SACnBt7L,QAASpiD,EAAKoiD,QACdxgB,SAAU,SAACpzG,EAAG4zH,GACZ,IAAMg8L,EAAU,eAAOL,GACvBK,EAAWp+O,EAAK15E,MAAQ87H,EACxB47L,EAAWI,KAZRp+O,EAAK15E,YAkBlB,gBAACk2T,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAAS8f,EACT1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHrB,SAKIhrS,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEE,QAAS,kBAAM6yM,EAAOC,IACtB1xN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBAHrB,SAKIhrS,EAAE,+B,2BC5FVyjG,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC5C67O,mBAAoB,CAChBv1M,YAAatmC,EAAMZ,QAAQ,QA6CpB29O,GAzCkB,SAACC,GAC9B,IACIvtN,EAGAutN,EAHAvtN,KACAg6B,EAEAuzL,EAFAvzL,QACAuyL,EACAgB,EADAhB,UAGGnrS,EAAK+xB,YAAe,gBAApB/xB,EACDmtD,EAAUs2C,KAEhB,OACI,gBAACwmM,GAAA,EAAD,CACIrxL,QAASA,EACT,mBAAiB,6BACjBh6B,KAAMA,EAHV,UAKI,eAACsrN,GAAA,EAAD,UACI,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACK3tF,EAAE,qCAGX,gBAACqqS,GAAA,EAAD,WACI,eAACzxM,EAAA,EAAD,CACIE,QAAS8f,EACT1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,wBAEP,eAAC44F,EAAA,EAAD,CACIE,QAASqyM,EACTjxN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,4B,2TC9DVosS,GAAgC,CAC3CvsM,QAAS,KACTC,KCYoD,SAAA3hF,GACpD,IACE17B,EAIE07B,EAJF17B,KACAsyB,EAGEoJ,EAHFpJ,MAGEoJ,EAFF8gF,YAEE9gF,EADFkuR,WAGF,OACE,eAAC5F,EAAA,EAAD,CACEhkT,KAAMA,EACN07B,MAAO,CACLpJ,SAEFg5C,QAAQ,cDzBZu+O,SEsBoE,SAAAnuR,GACpE,IACE17B,EAKE07B,EALF17B,KACAsyB,EAIEoJ,EAJFpJ,MAEA31B,GAEE++B,EAHF8gF,YAGE9gF,EAFF/+B,QAEE++B,EADFkuR,WAGF,OACE,eAACE,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAACplJ,EAAA,EAAD,CAGEC,MAAO,GAHT,SAKE,sBAAK5O,MAAO,CAAEhgC,MAAO,QAArB,SACE,eAAC,QAAD,CACE9sE,KAAMA,EACN8qE,UAAWi/O,KAEXruR,MAAO,CAELyvE,WAAY,CACV3tE,QAAS7gC,EAAOoT,OAChBuiB,QAEAugG,eAAgB,SAAA7gB,GAAM,aAAIA,EAAM,iBAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAQ1/E,aAAX,QAAoB0/E,EAAS,MAC7Dg4M,aAAc,SAAAh4M,GAAM,aAAIA,GAAU,eAAChH,EAAA,EAAD,2BAAagH,QAAb,IAAaA,OAAb,EAAaA,EAAQ1/E,aAArB,QAA8B0/E,MAElE5G,iBAAkB,CAChBC,WAAW,c,+DCtCZ4+M,GARqD,SAACvuR,GACnE,IAAQhqC,EAAgEgqC,EAAhEhqC,KAAMsO,EAA0D07B,EAA1D17B,KAAMsyB,EAAoDoJ,EAApDpJ,MAAOkqF,EAA6C9gF,EAA7C8gF,YAAa7/G,EAAgC++B,EAAhC/+B,OAAQitT,EAAwBluR,EAAxBkuR,WAAe9zS,EAA/D,YAAwE4lB,EAAxE,IAEM6iF,EAAWorM,GAA8Bj4T,IAASi4T,GAA6B,QAErF,OAAQ,eAACprM,EAAD,4BAAev+G,KAAK,cAAD,OAAgBA,GAAQsyB,QAAOkqF,cAAa7/G,SAAQitT,cAAe9zS,M,yBCiI1Fo0S,GAAkC,wBAClCC,GAAyB,eACzBC,GAA4B,kBAC5BC,GAAgC,sBAChCC,GAAqB,WAErBC,GAAqB,CAAC,KAAM,QAAS,QAAS,KAAM,SAE7CC,GAAM,CACjB,CAAEl4R,MAAO,cAAeplC,MAAO,MAC/B,CAAEolC,MAAO,eAAgBplC,MAAO,OAChC,CAAEolC,MAAO,iBAAkBplC,MAAO,MAClC,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,MAAOplC,MAAO,MACvB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,QAASplC,MAAO,MACzB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,MAAOplC,MAAO,OACvB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,QAASplC,MAAO,KACzB,CAAEolC,MAAO,aAAcplC,MAAO,MAC9B,CAAEolC,MAAO,aAAcplC,MAAO,MAC9B,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,cAAeplC,MAAO,QAC/B,CAAEolC,MAAO,cAAeplC,MAAO,QAC/B,CAAEolC,MAAO,cAAeplC,MAAO,QAC/B,CAAEolC,MAAO,eAAgBplC,MAAO,OAChC,CAAEolC,MAAO,oBAAqBplC,MAAO,QACrC,CAAEolC,MAAO,QAASplC,MAAO,OACzB,CAAEolC,MAAO,QAASplC,MAAO,OACzB,CAAEolC,MAAO,SAAUplC,MAAO,OAC1B,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,OAAQplC,MAAO,MACxB,CAAEolC,MAAO,MAAOplC,MAAO,MACvB,CAAEolC,MAAO,YAAaplC,MAAO,OAC7B,CAAEolC,MAAO,QAASplC,MAAO,QAGrBu9T,GAA2B,SAACC,GAChC,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAUlwT,KAAI,SAACmwT,GAAD,OAAYA,EAAOnwT,KAAI,SAACkkO,GAAD,OAAcA,EAASl8N,eAAc,SAACooT,GAChFA,EACG1xT,IAAI,mBAAmB,GACvBA,IAAI,kBAAkB,GACtBA,IAAI,kBAAkB,GACtBA,IAAI,kBAAkB,aAcvB2xT,GAAiD,CACrDvB,QAAQ,EACR5+L,eAAe,EACfg6F,KAAK,EACL/5F,OAAO,EACP/B,UAAU,EACVuJ,aAAa,EACbyrE,OAAO,GAiFHktH,G,kDAMJ,WAAYpvR,GAAQ,IAAD,8BACjB,cAAMA,IALDqvR,oBAAsB90R,cAIV,EAFZ+0R,yBAA4C,KAEhC,EA4DZxoD,mBA5DY,uCA4DS,WAAO3yJ,EAAW4yJ,GAAlB,uIAAAtrQ,EAAA,wDAGiF,EAAKukC,MAFxGuvR,EADkB,EAClBA,6BAA8BC,EADZ,EACYA,mBAAoBC,EADhC,EACgCA,YAAax+M,EAD7C,EAC6CA,WAAYy+M,EADzD,EACyDA,0BAA2Bn8M,EADpF,EACoFA,KAC5Go8M,EAFwB,EAExBA,YAAalvR,EAFW,EAEXA,SAAUmvR,EAFC,EAEDA,iBAAkBC,EAFjB,EAEiBA,mBAAoBC,EAFrC,EAEqCA,mBAAoBC,EAFzD,EAEyDA,wBACjFC,EAHwB,EAGxBA,wBAAyBC,EAHD,EAGCA,uBAAwBr9K,EAHzB,EAGyBA,cAAe1f,EAHxC,EAGwCA,WAAYg9L,EAHpD,EAGoDA,YAAav+K,EAHjE,EAGiEA,WAHjE,EAIoC,EAAK70G,MAA3DywR,EAJkB,EAIlBA,mBAAoB4C,EAJF,EAIEA,cAAeC,EAJjB,EAIiBA,eAErBC,EAElBtpD,EAFFwmD,mBACe+C,EACbvpD,EADFopD,eAGa,OAAXV,QAAW,IAAXA,OAAA,EAAAA,EAAa51T,IAAI,aAAc83I,IAAyB,OAAX89K,QAAW,IAAXA,OAAA,EAAAA,EAAa/4S,MAAM,CAAC,cAAe,sBAAnC,UAAyDy9F,EAAUs7M,mBAAnE,aAAyD,EAAuB/4S,MAAM,CAAC,cAAe,qBACrJ+pB,EAASu/B,YAAOuzC,EAAM,oBAAqBk8M,IAC3C,EAAKc,eAGHp8M,EAAU07M,qBAAuBA,GAAsBW,KAAiBC,iBAAiBZ,IAC3FC,EAAmBU,KAAiBC,iBAAiBZ,IAGnDA,GAAkE17M,EAAU87M,yBAA2BA,IAA2BA,IAKhIO,KAAiBC,iBAAiBZ,IACpCpvR,EAASu/B,YAAOuzC,EAAM,gBAAiBi9M,KAAiBC,iBAAiBZ,KAI3EpvR,EAASu/B,YAAOuzC,EAAM,cAAP,OAAsBy8M,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAyBv5L,cAC9Dh2F,EAASu/B,YAAOuzC,EAAM,OAAyB,OAAlBs8M,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBa,kBAApB,OAAsCb,QAAtC,IAAsCA,OAAtC,EAAsCA,EAAoBc,aAAc,KAE/Fz6K,EAbsJ,OAarI25K,QAbqI,IAarIA,GAbqI,UAarIA,EAAoBe,oBAbiH,aAarI,EAAkC75R,GACnD85R,EAAoB36K,IAAc,OAAItD,QAAJ,IAAIA,OAAJ,EAAIA,EAAen7H,MAAK,SAAAvP,GAAC,OAAIA,EAAErO,IAAI,QAAUq8I,MACrFz1G,EAASu/B,YAAOuzC,EAAM,QAASs9M,GAAqB,CAAE95R,GAAI,GAAIvlC,MAAO,MAG/DmlC,EAlBsJ,OAkBzIk5R,QAlByI,IAkBzIA,GAlByI,UAkBzIA,EAAoBiB,gBAlBqH,aAkBzI,EAA8B/5R,GAC3Cg6R,EAAgBp6R,IAAU,OAAIu8F,QAAJ,IAAIA,OAAJ,EAAIA,EAAYz7G,MAAK,SAAA9b,GAAC,OAAIA,EAAE9B,IAAI,QAAU88B,MAC1E8J,EAASu/B,YAAOuzC,EAAM,eAAgBw9M,GAAiB,CAAEh6R,GAAI,GAAIvlC,MAAO,MAGlEw/T,EAAmBjB,EAAwBr5S,MAAM,CAAC,EAAG,cAAe,UAGpEqsN,EAAWmtF,EAAYr2T,IAAI,OAAS,UAEpCo3T,EAAgBjB,EACpB97T,OAAO0D,KAAKo4T,GAAyB3uT,QAAO,SAACjH,GAAD,OAA0BA,IAAQy6B,YAASC,KAAO16B,IAAQy6B,YAASE,OADjE,GAE1CiuM,EAAWiuF,EAAat5T,OAAS,EACnCs5T,EAAa,IACb,UAAAD,EAAiBn3T,IAAIkpO,UAArB,mBAAgCpuN,gBAAhC,eAA0CuE,UAAW,MACnDg4S,EAAYlB,GAA2BhtF,EAA3B,UAAsCgtF,EAAwBhtF,UAA9D,aAAsC,EAAmC30N,KAAO,GAC5F8iT,EAAYnB,GAA2BhtF,EAA3B,UAAsCgtF,EAAwBhtF,UAA9D,aAAsC,EAAmCouF,KAAO,GAC5FC,EAAYrB,GAA2BhtF,EAA3B,UAAsCgtF,EAAwBhtF,UAA9D,aAAsC,EAAmCsuF,KAAO,GAE5FC,EAAmB7oT,cAAI,eAC1Bs6N,EACC9jN,iBAAO,CACL7Q,KAAM6iT,EACNE,KAAMD,EACNG,KAAMD,EACNG,OAAO,MAKPC,EAAe/oT,cAAI,eAAGq6N,EAAWwuF,IACvC9wR,EAASu/B,YAAOuzC,EAAM,QAASk+M,KAG7Bt9M,EAAUs7M,cAAgBA,IAC5B,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAa51T,IAAI,eACnB+1T,EAAgB,OAACH,QAAD,IAACA,OAAD,EAACA,EAAa51T,IAAI,eAIjCktQ,EAAU2qD,SAAWzgN,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAClF,EAAKgiG,SAAS,CAAEg5M,QAASzgN,EAAWv6F,MAAM,CAAC,OAAQ,SAAU,OAAQ,cAElE64S,GAAgCp7M,EAAUo7M,+BAE7C,EAAKoC,sBAAsBnC,EAAmB94S,MAAM,CAAC,OAAQ,WAC7D,EAAKk7S,iBAAiBpC,KAGnBE,GAA6Bv7M,EAAUu7M,2BAC1C,EAAKh3M,SAAS,CAEZm5M,kBAAmB,KAIclC,IAAW,OAAI1+M,QAAJ,IAAIA,OAAJ,EAAIA,EAAYv6F,MAAM,CAAC,qBAG/Do7S,IAAqB,OAAV7gN,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,gBAAhB,OAAgCs2T,QAAhC,IAAgCA,OAAhC,EAAgCA,EAAet2T,IAAI,OAGhEs2T,IAAkBG,GAAqBwB,MAAQ,OAAKrC,QAAL,IAAKA,OAAL,EAAKA,EAAa51T,IAAI,eACvE,EAAK6+G,SAAS,CACZ60M,mBAAoB,CAClBK,SAAQ,OAAC6B,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,OAAQ,SAAU,OAAQ,YACjEs4G,gBAAe,OAACygM,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,mBAC9CsyM,MAAK,OAACymG,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,SACpCu4G,QAAO,OAACwgM,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,WACtCw2G,WAAU,OAACuiM,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,kBACzC+/G,cAAa,OAACg5L,QAAD,IAACA,OAAD,EAACA,EAAa/4S,MAAM,CAAC,SAAU,iBAC5CwrL,QAAO,OAACutH,QAAD,IAACA,GAAD,WAACA,EAAa/4S,MAAM,CAAC,SAAU,iBAA/B,cAAC,GAAyC7kB,OAGnDu+T,eAAgBA,EACb5yT,IAAI,SAAUyzG,EAAWv6F,MAAM,CAAC,OAAQ,YACxClZ,IAAI,WAAYyzG,EAAWp3G,IAAI,eAKhCi4T,MAAaA,IAAavE,EAAmBK,SAAcp9H,mBAAQv/E,EAAWp3G,IAAI,YAAhB,OAA6Bs6G,QAA7B,IAA6BA,GAA7B,WAA6BA,EAAWlD,kBAAxC,cAA6B,GAAuBp3G,IAAI,cAC9H,EAAK6+G,SAAS,CACZ03M,eAAgBA,EACb5yT,IAAI,SAAUyzG,EAAWv6F,MAAM,CAAC,OAAQ,YACxClZ,IAAI,WAAYyzG,EAAWp3G,IAAI,eAGhCi4T,MAAaA,IAAavE,EAAmBv+L,iBAAmB,WAAA7a,EAAUlD,kBAAV,iBAAsBp3G,IAAI,oBAAqBo3G,EAAWp3G,IAAI,kBAClI,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,gBAAiByzG,EAAWp3G,IAAI,oBAE/Ei4T,MAAaA,IAAavE,EAAmBvkG,OAAS,WAAA70G,EAAUlD,kBAAV,iBAAsBp3G,IAAI,UAAWo3G,EAAWp3G,IAAI,QAC9G,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,MAAOyzG,EAAWp3G,IAAI,UAErEi4T,MAAaA,IAAavE,EAAmBt+L,SAAW,WAAA9a,EAAUlD,kBAAV,iBAAsBp3G,IAAI,YAAao3G,EAAWp3G,IAAI,UAClH,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,QAASyzG,EAAWp3G,IAAI,YAEvEi4T,MAAaA,IAAavE,EAAmBrgM,YAAc,WAAA/Y,EAAUlD,kBAAV,iBAAsBp3G,IAAI,eAAgBo3G,EAAWp3G,IAAI,aACxH,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,WAAYyzG,EAAWp3G,IAAI,eAE1Ei4T,MAAaA,IAAavE,EAAmB92L,eAAiB,WAAAtiB,EAAUlD,kBAAV,iBAAsBp3G,IAAI,kBAAmBo3G,EAAWp3G,IAAI,gBAC9H,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,cAAeyzG,EAAWp3G,IAAI,kBAE7Ei4T,MAAaA,IAAavE,EAAmBrrH,SAAW,WAAA/tF,EAAUlD,kBAAV,iBAAsBp3G,IAAI,YAAao3G,EAAWp3G,IAAI,UAClH,EAAK6+G,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,QAASyzG,EAAWp3G,IAAI,YAIzEi4T,KACEzB,EAAuBzC,SAAWL,EAAmBK,SACnDL,EAAmBK,OAChBuC,EAAcz5S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAGlD,EAAKgiG,SAAS,CAAEg5M,QAASvB,EAAcz5S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAc,KACtF+pB,EAASu/B,YAAOuzC,EAAM,cAAe48M,EAAcz5S,MAAM,CAAC,OAAQ,aAClE+pB,EAASu/B,YAAOuzC,EAAM,WAAY,MAJlC,EAAKw+M,cAOF3B,EAAe15S,MAAM,CAAC,SAAU,OAAQ,YAAe05S,EAAev2T,IAAI,aAGvEm4T,GAAyB5B,EAAev2T,IAAI,YAClD,EAAK6+G,SAAS,CAAEg5M,QAAStB,EAAe15S,MAAM,CAAC,SAAU,OAAQ,YAAc,KAC/Es7S,IAA0BvxR,EAASu/B,YAAOuzC,EAAM,WAAYy+M,MAJ5D,EAAKD,eAQP1B,EAAuBrhM,gBAAkBu+L,EAAmBv+L,gBAC1Du+L,EAAmBv+L,cACrBvuF,EAASu/B,YAAOuzC,EAAM,gBAAiB48M,EAAct2T,IAAI,mBAEzD4mC,EAASu/B,YAAOuzC,EAAM,gBAAiB68M,EAAev2T,IAAI,oBAG1Dw2T,EAAuBrnG,MAAQukG,EAAmBvkG,MAChDukG,EAAmBvkG,IACrBvoL,EAASu/B,YAAOuzC,EAAM,MAAO48M,EAAct2T,IAAI,SAE/C4mC,EAASu/B,YAAOuzC,EAAM,MAAO68M,EAAev2T,IAAI,UAGhDw2T,EAAuBphM,QAAUs+L,EAAmBt+L,QAClDs+L,EAAmBt+L,MACrBxuF,EAASu/B,YAAOuzC,EAAM,QAASr0F,iBAAO,CAAE6X,GAAIo5R,EAAct2T,IAAI,WAAYrI,MAAO2+T,EAAct2T,IAAI,aAEnG4mC,EAASu/B,YAAOuzC,EAAM,QAAS68M,EAAev2T,IAAI,YAGlDw2T,EAAuBnjM,WAAaqgM,EAAmBrgM,WACrDqgM,EAAmBrgM,SACrBzsF,EAASu/B,YAAOuzC,EAAM,eAAgBr0F,iBAAO,CAAE6X,GAAIo5R,EAAct2T,IAAI,YAAarI,MAAO2+T,EAAct2T,IAAI,oBAE3G4mC,EAASu/B,YAAOuzC,EAAM,eAAgB68M,EAAev2T,IAAI,eAGzDw2T,EAAuB55L,cAAgB82L,EAAmB92L,cACxD82L,EAAmB92L,aACrB,EAAK/d,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,cAAeyzG,EAAWp3G,IAAI,kBACjF4mC,EAASu/B,YAAOuzC,EAAM,cAAe48M,EAAct2T,IAAI,kBAEvD4mC,EAASu/B,YAAOuzC,EAAM,cAAe68M,EAAev2T,IAAI,kBAGxDw2T,EAAuBnuH,QAAUqrH,EAAmBrrH,QAClDqrH,EAAmBrrH,OACrB,EAAKxpF,SAAS,CAAE03M,eAAgBA,EAAe5yT,IAAI,QAASyzG,EAAWp3G,IAAI,YAC3E4mC,EAASu/B,YAAOuzC,EAAM,QAAS48M,EAAct2T,IAAI,YAEjD4mC,EAASu/B,YAAOuzC,EAAM,QAAS68M,EAAev2T,IAAI,cA9MhC,4CA5DT,0DAiRZo4T,uBAAyB,WAC9B,IAAQC,EAAkB,EAAKp1R,MAAvBo1R,cACR,EAAKx5M,SAAS,CAAEy5M,iBAAkB,KAAMD,cAAe,OACnDA,GACF,EAAKE,SAAL,2BAAmBF,GAAnB,IAAkCG,oBAAoB,MArRvC,EAyRZC,sBAAwB,WAC7B,EAAK55M,SAAS,CAAEy5M,iBAAkB,KAAMD,cAAe,QA1RtC,EA6RZE,SA7RY,uCA6RD,yFAAA32T,EAAA,yDAASwF,EAAT,EAASA,OAAQsxT,EAAjB,EAAiBA,eAAgBC,EAAjC,EAAiCA,WAAYC,EAA7C,EAA6CA,iBAAkBJ,EAA/D,EAA+DA,mBAA/D,EAC6K,EAAKryR,MAA1LS,EADQ,EACRA,SADQ,IACEgvR,mBADF,MACgB/mT,gBADhB,EACuB6mT,EADvB,EACuBA,6BAA8BxxN,EADrD,EACqDA,OAAQ20N,EAD7D,EAC6DA,YAAa/C,EAD1E,EAC0EA,YAAah+K,EADvF,EACuFA,WAAYghL,EADnG,EACmGA,sBAAuBC,EAD1H,EAC0HA,0BAA2BC,EADrJ,EACqJA,oBADrJ,EAEmD,EAAK/1R,MAAhEqzR,EAFQ,EAERA,cAAe5C,EAFP,EAEOA,mBAAoBuF,EAF3B,EAE2BA,oBAEtCT,EAJW,qBAKV,EAAKv1R,MAAMi2R,oBALD,wDASV,EAAKzD,0BACP,EAAKA,yBAAyB39C,QAE1BH,EAAa,IAAIC,gBACvB,EAAK69C,yBAA2B99C,EAChC,EAAK94J,SAAS,CAAEq6M,qBAAqB,IACjCC,EAAY,KAfF,oBAiBMpG,GAA2B,CAC3C7uN,SACA2zK,OAAQF,EAAWE,OACnB1iJ,cAAe/tH,EAAOpH,IAAI,iBAC1B0yT,WAAYtrT,EAAOpH,IAAI,cACvBkvN,QAAS9nN,EAAOyV,MAAM,CAAC,QAAS,OAChC81S,cAAevrT,EAAOpH,IAAI,OAASoH,EAAOpH,IAAI,mBAvBpC,QAiBZm5T,EAjBY,6DA0BM,gBAAd,uCAAK1uT,MA1BG,mDA8BZ0uT,EAAY,KA9BA,WAgCV,EAAK1D,2BAA6B99C,EAhCxB,uDAmCVwhD,EAnCU,wBAoCZ,EAAKt6M,SAAS,CACZq6M,qBAAqB,EACrBZ,iBAAkBa,EAClBd,cAAe,CAAEjxT,SAAQsxT,iBAAgBC,aAAYC,sBAvC3C,2BA2Cd,EAAK/5M,SAAS,CAAEq6M,qBAAqB,IA3CvB,eA+ChB,EAAKr6M,SAAL,2BAAmB,EAAK57E,OAAxB,IAA+Bm2R,oBAAoB,KA/CnC,UAiDSC,aAAI,CAAEn1N,SAAQtK,MAAOxyF,EAAOpH,IAAI,cAjDzC,QAiDVs5T,EAjDU,OAkDVzB,EAAUh7S,gBAAMy8S,EAAY,CAAC,EAAG,MAAO,KAAO,EAAKr2R,MAAM40R,QACzD0B,EAnDU,OAmDQjD,QAnDR,IAmDQA,OAnDR,EAmDQA,EAAet2T,IAAI,MAGrCw5T,EAA+B1D,IAAW,OAAI1uT,QAAJ,IAAIA,OAAJ,EAAIA,EAAQyV,MAAM,CAAC,mBAE7D48S,IAAqB,OAAX7D,QAAW,IAAXA,OAAA,EAAAA,EAAa51T,IAAI,YAAai5T,GAAuBpqT,iBAAO5B,eAAc,SAACysT,GAAa,IAAD,MAGrG,SAASntT,EAAOo1C,EAAQqtQ,GAEtB,CAAC,QAAS,SAASrmT,SAAQ,SAACu9C,GAC1B,IAAMgqQ,EAAe9oT,EAAOyV,MAAM,CAAC,OAAQ,QAASqpC,EAAQ8oQ,KAC5D,OAAIkB,QAAJ,IAAIA,OAAJ,EAAIA,EAAclwT,IAAI,eACpB2hD,EACGx1C,MAAM,CAAC,OAAQ,QAAS+5C,EAAQ8oQ,GAAWkB,GAE9CvuQ,EACGr1C,SAAS,CAAC,OAAQ,QAAS45C,EAAQ8oQ,OAmB5C,GAfAziT,EAAOmtT,EAAS9E,IAChBroT,EAAOmtT,EAAS/E,IAChBpoT,EAAOmtT,EAAS7E,IAChBtoT,EAAOmtT,EAAS5E,IAChBvoT,EAAOmtT,EAAS3E,IAEhBC,GAAmBrsT,SAAQ,SAACu9C,GAAY,IAAD,GACrC,UAAIwzQ,EAAQ78S,MAAM,CAAC,OAAQ,QAASqpC,WAApC,aAAI,EAA0C1nC,YAC5Ck7S,EAAQptT,SAAS,CAAC,OAAQ,QAAS45C,QAGvC,UAAIwzQ,EAAQ78S,MAAM,CAAC,OAAQ,iBAA3B,aAAI,EAAkC2B,YACpCk7S,EAAQptT,SAAS,CAAC,OAAQ,UAGxBktT,EASG3B,EAEMA,GAAWzwT,EAAOpH,IAAI,cAC/B05T,EAAQvtT,MAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW0rT,GACpDjxR,EAAS,IAAI4K,MAHbkoR,EAAQptT,SAAS,CAAC,OAAQ,WAM5BotT,EAAQ/1T,IAAI,QAASuxT,GAAyB9tT,EAAOpH,IAAI,eACpD,CAAC,IAAD,MAqB8F,EAAnG,GApBMu5T,GAAmB7F,EAAmBK,SAAY3sT,EAAOpH,IAAI,cAAeoH,EAAOyV,MAAM,CAAC,OAAQ,SAAU,OAAQ,gBAO9GzV,EAAOpH,IAAI,OAAS63T,EAC9B6B,EAAQvtT,MAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW0rT,GAEpD6B,EAAQptT,SAAS,CAAC,OAAQ,WATtBurT,GACF6B,EAAQvtT,MAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW0rT,GACpDjxR,EAAS,IAAI4K,MAEbkoR,EAAQptT,SAAS,CAAC,OAAQ,YAQzBopT,GAAgCY,GAAiBoD,EAAQ15T,IAAI,eAAiBu5T,GACjFG,EAAQ/1T,IAAI,YAAa41T,GAEtBnyT,EAAOpH,IAAI,cACd05T,EAAQj1M,OAAO,aAGX80M,GAAmB7F,EAAmBv+L,iBAAxC,UAA0D/tH,EAAOpH,IAAI,wBAArE,aAA0D,EAA6By6H,QAGzFi/L,EAAQj1M,OAAO,sBAFfi1M,EAAQ/1T,IAAI,gBAAZ,UAA6ByD,EAAOpH,IAAI,wBAAxC,aAA6B,EAA6By6H,QAK5Di/L,EAAQ/1T,IAAI,cAAc,UAAAyD,EAAOpH,IAAI,qBAAX,eAA0By6H,SAAU,IAE9D,IAuB+F,EAvBzF00F,EAAM/nN,EAAOpH,IAAI,QAAU8K,OAAO1D,EAAOpH,IAAI,QAAQy6H,OAuB3D,GAtBM8+L,GAAmB7F,EAAmBvkG,MAAQA,EAGlDuqG,EAAQj1M,OAAO,OAFfi1M,EAAQ/1T,IAAI,MAAOwrN,GAKfoqG,GAAmB7F,EAAmBt+L,MAK1CskM,EAAQj1M,OAAO,SAASA,OAAO,WAJ/Bi1M,EACG/1T,IAAI,QAASyD,EAAOyV,MAAM,CAAC,QAAS,WACpClZ,IAAI,UAAWyD,EAAOyV,MAAM,CAAC,QAAS,QAKrC08S,GAAmB7F,EAAmBrgM,SAK1CqmM,EAAQj1M,OAAO,gBAAgBA,OAAO,YAJtCi1M,EACG/1T,IAAI,eAAgByD,EAAOyV,MAAM,CAAC,eAAgB,WAClDlZ,IAAI,WAAYyD,EAAOyV,MAAM,CAAC,eAAgB,QAK7C08S,GAAmB7F,EAAmB92L,eAAxC,UAAwDx1H,EAAOpH,IAAI,sBAAnE,aAAwD,EAA2By6H,QAGrFi/L,EAAQj1M,OAAO,oBAFfi1M,EAAQ/1T,IAAI,cAAZ,UAA2ByD,EAAOpH,IAAI,sBAAtC,aAA2B,EAA2By6H,QAKxDi/L,EAAQ/1T,IAAI,MAAOyD,EAAOyV,MAAM,CAAC,MAAO,WAAa,IAE/C08S,GAAmB7F,EAAmBrrH,MAG1CqxH,EAAQj1M,OAAO,SAFfi1M,EAAQ/1T,IAAI,QAASuxT,GAAyB9tT,EAAOpH,IAAI,WAM7D05T,EAAQ/1T,IAAI,WAAYyD,EAAOpH,IAAI,aAEnC,IAAI25T,EAAa,UAAGvyT,EAAOpH,IAAI,qBAAd,aAAG,EAA0BwH,QAAO,SAAC7P,EAAOiiU,GAAR,OAA8BjiU,KAC/EgiU,IACuB,OAAzBZ,QAAyB,IAAzBA,KAA2BpwT,SAAQ,SAACkxT,GAClC,IAAMC,EAAUD,EAAW75T,IAAI,OAC3B25T,EAAcz5T,IAAI45T,IAAuC,SAA3BD,EAAW75T,IAAI,UAC/C25T,EAAgBA,EAAch2T,IAAIm2T,EAASz0S,iBAAO,CAAE6X,GAAI28R,EAAWh9S,MAAM,CAAC,SAAU,EAAG,OAAQllB,MAAOgiU,EAAc35T,IAAI85T,WAI9HJ,EAAQ/1T,IAAI,aAAcg2T,IAG1B,UAAID,EAAQ15T,IAAI,eAAhB,aAAI,EAAqBwe,YACvBk7S,EAAQj1M,OAAO,WAIbs1M,EAAgB3yT,EAAOyV,MAAM,CAAC,kBAGhCi5S,IAEAkE,KADEpE,EAAY51T,IAAI,OAAU41T,EAAY51T,IAAI,YAAc83I,IAAcmiL,aAAwBrE,EAAa99K,KAO7G7kB,EAAUrtG,UAAU/W,IAAI,IAAI1C,MAAM,CAAC,UAAWstT,GAE9CZ,EACF5lM,EAAUA,EAAQtvH,IAAI,gBAAiBo2T,GAC9BP,IACTvmM,EAAUA,EAAQhmH,eAAc,SAACywQ,GAC/BA,EAAI/5Q,IAAI,gBAAiBo2T,GACzBr8C,EAAI/5Q,IAAI,iBAAkBuQ,eAAK,CAAC,CAAEyuC,OAAQm1F,UAK1CghL,EACF1xT,EAAOpH,IAAI,MACP4mC,EAAS,IAAI8gD,IAAmC,CAChDurC,UACAinM,YAAaxB,EACbsB,sBACAlB,wBACAH,aACAK,oBAAqBJ,EAAmBI,EAAsB,QAE9DpyR,EAAS,IAAIwgD,IAAkC,CAC/CqyO,OAAQxmM,EACRinM,YAAaxB,EACbC,aACAK,oBAAqBJ,EAAmBI,EAAsB,QAGlE5xT,EAAOpH,IAAI,MACP4mC,EAAS,IAAI4gD,IAAsB,CACnCyrC,UACAinM,YAAaxB,EACbsB,yBAEApzR,EAAS,IAAIsgD,IAAqB,CAClCuyO,OAAQxmM,EACRinM,YAAaxB,KA9OH,2DA7RC,wDAghBZyB,cAAgB,SAACliK,GACV,UAARA,EACF,EAAKp5C,UAAS,SAACquJ,GAAD,MAAgB,CAC5BktD,qBAAsBltD,EAAUktD,wBAEjB,eAARniK,EACT,EAAKp5C,UAAS,SAACquJ,GAAD,MAAgB,CAC5BmtD,0BAA2BntD,EAAUmtD,6BAEtB,QAARpiK,GACT,EAAKp5C,UAAS,SAACquJ,GAAD,MAAgB,CAC5BotD,mBAAoBptD,EAAUotD,uBA3hBjB,EAgiBZxC,sBAAwB,WAAoD,IAAnD5I,EAAkD,uDAAVrgT,gBACtE,EAAKgwG,SAAS,CAAEqwM,wBAjiBC,EAoiBZ6I,iBAAmB,WAAuC,IAAtCzB,EAAqC,uDAAVznT,gBACpD,EAAKgwG,SAAS,CAAEy3M,mBAriBC,EAwiBZI,YAAc,WAAO,IAAD,EACzB,EAKI,EAAKvwR,MAJPS,EADF,EACEA,SACAmvR,EAFF,EAEEA,iBACAwE,EAHF,EAGEA,0BACA7gN,EAJF,EAIEA,KAGF,GAAiC,MAA7B6gN,EAAJ,CAIA,IAAMC,EAAqCn1S,iBAAOk1S,GAC5CrlM,EAAYslM,EAAmCx6T,IAAI,aACnDkyH,EAAQsoM,EAAmC39S,MAAM,CAAC,OAAQ,UAEhE+pB,EAASu/B,YAAOuzC,EAAM,KAAM8gN,EAAmCx6T,IAAI,QACnE4mC,EAASu/B,YAAOuzC,EAAM,gBAAiB8gN,EAAmCx6T,IAAI,mBAC9E4mC,EAASu/B,YAAOuzC,EAAM,YAAawb,IAEnCtuF,EAASu/B,YAAOuzC,EAAM,aAAcwY,IACpCtrF,EAASu/B,YAAOuzC,EAAM,iBAAiB,IAEvC,EAAKo+M,sBAAsB0C,EAAmC39S,MAAM,CAAC,OAAQ,WAC7E,EAAKk7S,iBAAiByC,GAEjBA,EAAmC39S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAGvE,EAAKgiG,SAAS,CAAEg5M,QAAS2C,EAAmC39S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAc,KAC3G+pB,EAASu/B,YAAOuzC,EAAM,cAAe8gN,EAAmC39S,MAAM,CAAC,OAAQ,aACvF+pB,EAASu/B,YAAOuzC,EAAM,WAAY,MAJlC,EAAKw+M,cAMPtxR,EAASu/B,YAAOuzC,EAAM,gBAAiB8gN,EAAmCx6T,IAAI,mBAC9E4mC,EAASu/B,YAAOuzC,EAAM,aAAc8gN,EAAmCx6T,IAAI,gBAC3E4mC,EAASu/B,YAAOuzC,EAAM,MAAO8gN,EAAmCx6T,IAAI,SACpE4mC,EAASu/B,YAAOuzC,EAAM,QAASr0F,iBAAO,CAAE6X,GAAIs9R,EAAmCx6T,IAAI,WAAYrI,MAAO6iU,EAAmCx6T,IAAI,aAC7I4mC,EAASu/B,YAAOuzC,EAAM,eAAgBr0F,iBAAO,CAAE6X,GAAIs9R,EAAmCx6T,IAAI,YAAarI,MAAO6iU,EAAmCx6T,IAAI,oBACrJ4mC,EAASu/B,YAAOuzC,EAAM,cAAe8gN,EAAmCx6T,IAAI,iBAC5E4mC,EAASu/B,YAAOuzC,EAAM,MAAO8gN,EAAmCx6T,IAAI,SACpE4mC,EAASu/B,YAAOuzC,EAAM,SAAS,UAAA8gN,EAAmCx6T,IAAI,gBAAvC,eAAiDhI,MAAOwiU,EAAmCx6T,IAAI,SAAW6O,kBACzI+3B,EAASu/B,YAAOuzC,EAAM,WAAY8gN,EAAmCx6T,IAAI,cACzE4mC,EAASu/B,YAAOuzC,EAAM,aAAc8gN,EAAmCx6T,IAAI,gBAE3E,EAAK6+G,SAAS,CAAEo6M,oBAAqBuB,EAAmCx6T,IAAI,YAExEk1H,GACF6gM,EAAiB7gM,KAvlBF,EA4lBZulM,WAAa,WAClB,MAKI,EAAKt0R,MAJPS,EADF,EACEA,SACA2zR,EAFF,EAEEA,0BACA7gN,EAHF,EAGEA,KAGF,GANA,EAIEtC,WAKE,EAAKn0E,OAFPywR,EADF,EACEA,mBACA6C,EAFF,EAEEA,eAGF,GAAiC,MAA7BgE,EAAJ,CAIA,IA6C8B,EAEvB,EA/CDC,EAAqCn1S,iBAAOk1S,GAC5CrlM,EAAYslM,EAAmCx6T,IAAI,MACnDkyH,EAAQsoM,EAAmC39S,MAAM,CAAC,OAAQ,UA2ChE,GAzCA+pB,EAASu/B,YAAOuzC,EAAM,YAAawb,IACnCtuF,EAASu/B,YAAOuzC,EAAM,aAAcwY,IAEpC,EAAK4lM,sBAAsB0C,EAAmC39S,MAAM,CAAC,OAAQ,WAC7E,EAAKk7S,iBAAiByC,GAGlB9G,EAAmBK,SAChByG,EAAmC39S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAGvE,EAAKgiG,SAAS,CAAEg5M,QAAS2C,EAAmC39S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAc,KAC3G+pB,EAASu/B,YAAOuzC,EAAM,cAAe8gN,EAAmC39S,MAAM,CAAC,OAAQ,aACvF+pB,EAASu/B,YAAOuzC,EAAM,WAAY,MAJlC,EAAKw+M,eAOLxE,EAAmBv+L,cACrBvuF,EAASu/B,YAAOuzC,EAAM,gBAAiB8gN,EAAmCx6T,IAAI,mBAE9E4mC,EAASu/B,YAAOuzC,EAAM,gBAAiB68M,EAAev2T,IAAI,mBAExD0zT,EAAmBvkG,IACrBvoL,EAASu/B,YAAOuzC,EAAM,MAAO8gN,EAAmCx6T,IAAI,SAEpE4mC,EAASu/B,YAAOuzC,EAAM,MAAO68M,EAAev2T,IAAI,SAE9C0zT,EAAmBt+L,MACrBxuF,EAASu/B,YAAOuzC,EAAM,QAASr0F,iBAAO,CAAE6X,GAAIs9R,EAAmCx6T,IAAI,WAAYrI,MAAO6iU,EAAmCx6T,IAAI,aAE7I4mC,EAASu/B,YAAOuzC,EAAM,QAAS68M,EAAev2T,IAAI,WAEhD0zT,EAAmBrgM,SACrBzsF,EAASu/B,YAAOuzC,EAAM,eAAgBr0F,iBAAO,CAAE6X,GAAIs9R,EAAmCx6T,IAAI,YAAarI,MAAO6iU,EAAmCx6T,IAAI,oBAErJ4mC,EAASu/B,YAAOuzC,EAAM,eAAgB68M,EAAev2T,IAAI,cAEvD0zT,EAAmB92L,YACrBh2F,EAASu/B,YAAOuzC,EAAM,cAAe8gN,EAAmCx6T,IAAI,iBAE5E4mC,EAASu/B,YAAOuzC,EAAM,cAAe68M,EAAev2T,IAAI,iBAEtD0zT,EAAmBrrH,MACrBzhK,EAASu/B,YAAOuzC,EAAM,SAAS,UAAA8gN,EAAmCx6T,IAAI,gBAAvC,eAAiDhI,MAAOwiU,EAAmCx6T,IAAI,SAAW6O,uBAEzI+3B,EAASu/B,YAAOuzC,EAAM,SAAS,UAAA68M,EAAev2T,IAAI,gBAAnB,eAA6BhI,MAAOu+T,EAAev2T,IAAI,SAAW6O,kBAGnG,EAAKgwG,SAAS,CAAE67M,4BAA4B,MA/pB3B,EAkqBZC,aAAe,WACpB,MAII,EAAKx0R,MAHPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAtC,EAHF,EAGEA,WAGFxwE,EAASu/B,YAAOuzC,EAAM,YAAa,OAE/B,EAAKz2E,MAAMywR,mBAAmBrrH,OAChC,EAAKuyH,aAGP,EAAK9C,wBACL,EAAKC,mBAEL,IAAMhE,EAAM,OAAG38M,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,SAAU,UACpD,OAAIk3S,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ/zT,IAAI,YACd4mC,EAASu/B,YAAOuzC,EAAM,+BAA+B,IAGvDs7M,GAAmBrsT,SAAQ,SAACu9C,GAC1B,IAAM20Q,EAAQ,OAAGzjN,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,QAASqpC,EAAQyuQ,KACvDmG,EAAW,OAAG1jN,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,QAASqpC,EAAQ0uQ,KAC1DmG,EAAc,OAAG3jN,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,QAASqpC,EAAQ2uQ,KAC7DmG,EAAqB5jN,EAAWv6F,MAAM,CAAC,OAAQ,QAASqpC,EAAQ4uQ,KAChE51R,EAAWk4E,EAAWv6F,MAAM,CAAC,OAAQ,QAASqpC,EAAQ6uQ,OAEhD,OAAR8F,QAAQ,IAARA,OAAA,EAAAA,EAAU76T,IAAI,aAAd,OAA2B66T,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAU76T,IAAI,UAC3C4mC,EAASu/B,YAAOuzC,EAAD,qBAAqBxzD,EAArB,YAA+ByuQ,GAA/B,gBAA6E,KAE9F,OAAImG,QAAJ,IAAIA,OAAJ,EAAIA,EAAa96T,IAAI,YACnB4mC,EAASu/B,YAAOuzC,EAAD,qBAAqBxzD,EAArB,YAA+B0uQ,GAA/B,gBAAoE,MAEnE,OAAdmG,QAAc,IAAdA,OAAA,EAAAA,EAAgB/6T,IAAI,aAApB,OAAiC+6T,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAgB/6T,IAAI,UACvD4mC,EAASu/B,YAAOuzC,EAAD,qBAAqBxzD,EAArB,YAA+B2uQ,GAA/B,gBAAuE,MAElE,OAAlBmG,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBh7T,IAAI,aAAxB,OAAqCg7T,QAArC,IAAqCA,OAArC,EAAqCA,EAAoBh7T,IAAI,UAC/D4mC,EAASu/B,YAAOuzC,EAAD,qBAAqBxzD,EAArB,YAA+B4uQ,GAA/B,gBAA2E,MAEhF,OAAR51R,QAAQ,IAARA,OAAA,EAAAA,EAAUl/B,IAAI,aAAd,OAA2Bk/B,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAUl/B,IAAI,UAC3C4mC,EAASu/B,YAAOuzC,EAAD,qBAAqBxzD,EAArB,YAA+B6uQ,GAA/B,gBAAgE,OAInF,EAAKl2M,SAAS,CACZo8M,8BAA8B,KAhtBf,EAotBZL,WAAa,WAClB,MAII,EAAKz0R,MAHPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAOIwhN,GATN,EAGE9jN,WAGuBp3G,IAAI,UAAY6O,iBAGX5J,KAAI,SAACk2T,GACjC,OAAOA,EAAYl2T,KAAI,SAACm2T,GACtB,OAAOA,EAAcz3T,IAAI,SAAS,SAItCijC,EAASu/B,YAAOuzC,EAAM,QAASwhN,KApuBd,EAuuBZG,kBAAoB,WACzB,MAGI,EAAKl1R,MAFPyvR,EADF,EACEA,YACA0F,EAFF,EAEEA,eAGIC,EAAgB3F,GAAeA,EAAY/4S,MAAM,CAAC,cAAe,UACjE2+S,EAAYD,GAAiBA,EAAczgT,SAASjc,UAwC1D,OAnC+By8T,GAAkBA,EAAe1zT,QAAO,SAACutI,EAAKigL,GAC3E,IAAMlsF,EAAWksF,EAAOp1T,IAAI,MACtBy7T,EAAcrG,EAAOp1T,IAAI,SAE/B,GAAIw7T,GAAaA,EAAUh2T,SAAS0jO,GAAW,CAC7C,IAAMwyF,EAAgBH,EAAcv7T,IAAIkpO,GAClCisF,EAAWtmT,gBAAM5B,eAAc,SAACywQ,GACpCA,EAAI/5Q,IAAIulO,EAAUwyF,GAClBh+C,EAAIvxQ,MAAM,CAAC+8N,EAAU,SAAUuyF,GAC/B/9C,EAAIvxQ,MAAM,CAAC+8N,EAAU,MAAOA,MAG9B,OAAO/zF,EAAI9sI,KAAK8sT,GAEhB,IAAMA,EAAWtmT,gBAAM5B,eAAc,SAACywQ,GACpCA,EAAI/5Q,IAAIulO,EAAU7jN,iBAAO,CACvB6V,IAAK,CACHu8R,KAAM,KACNjjT,KAAM,KACN+iT,KAAM,MAERt8R,IAAK,CACHw8R,KAAM,KACNjjT,KAAM,KACN+iT,KAAM,SAGV75C,EAAIvxQ,MAAM,CAAC+8N,EAAU,SAAUuyF,GAC/B/9C,EAAIvxQ,MAAM,CAAC+8N,EAAU,MAAOA,MAG9B,OAAO/zF,EAAI9sI,KAAK8sT,KAEjBjhT,mBApxBc,EAyxBZynT,iBAAmB,SAAChkU,GAAD,OAAW6pM,YAAgB,GAAhBA,CAAoB7pM,IAzxBtC,EA2xBZikU,sBAAwB,SAACv3T,GAC9B,IAAMw3T,EAAUx3T,EAAE4kB,OAAOtxB,MACzB,EAAKknH,SAAS,CACZi9M,mBAAoBD,EAAQp/S,QAAQ,MAAQ,KA9xB7B,EAmyBZs/S,+BAAiC,SAAC13T,GACvC,IAAMw3T,EAAUx3T,EAAE4kB,OAAOtxB,MACzB,GAAc,UAAV0M,EAAE9D,KAAmBs7T,IACvBx3T,EAAEg5H,kBACG,EAAKp6F,MAAM64R,oBAAoB,CAClC,MAA+C,EAAK31R,MAA5CuzE,EAAR,EAAQA,KAAM9yE,EAAd,EAAcA,SAAd,IAAwBwwE,WAClB4kN,QADN,MAAqCntT,gBAArC,GACgC7O,IAAI,aAAe,GAC7Ci8T,EAA+B,KAAjBD,EAAsBH,EAAUG,EAAaz0T,OAAO,IAAKs0T,GAC7Ej1R,EAASu/B,YAAOuzC,EAAM,WAAYuiN,IAClC53T,EAAE4kB,OAAOtxB,MAAQ,OA5yBJ,EAizBZukU,sBAAwB,SAACjlR,EAAM7+C,GACpC,MAA+C,EAAK+tC,MAA5CuzE,EAAR,EAAQA,KAAM9yE,EAAd,EAAcA,SAAd,IAAwBwwE,WAElB+kN,SAFN,MAAqCttT,gBAArC,GACgC7O,IAAI,aAAe,IACdg7C,MAAM,KAC3C,GAAI5iD,IAAU+jU,EAAgB1/S,QAAQw6B,GAAO,CAC3CklR,EAAgB9wT,OAAOjT,EAAO,GAC9B,IAAM6jU,EAAcE,EAAgBz+S,KAAK,KACzCkpB,EAASu/B,YAAOuzC,EAAM,WAAYuiN,MAxzBnB,EA4zBZ/D,YAAc,SAACkE,GACpB,MAKI,EAAKj2R,MAJPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAIF,GANA,EAGEo8M,YAHF,EAIE1+M,WAKE,EAAKn0E,OAFPqzR,EADF,EACEA,cAII+F,GALN,EAEE3I,oBAG+B,OAAb4C,QAAa,IAAbA,OAAA,EAAAA,EAAez5S,MAAM,CAAC,OAAQ,SAAU,OAAQ,eAAc,OAACy5S,QAAD,IAACA,OAAD,EAACA,EAAez5S,MAAM,CAAC,OAAQ,SAAU,OAAQ,iBAE/Hu/S,GAAqBC,GACvB,EAAKx9M,SAAS,CAAEg5M,QAASvB,EAAcz5S,MAAM,CAAC,OAAQ,SAAU,OAAQ,aACxE+pB,EAASu/B,YAAOuzC,EAAM,cAAe48M,EAAcz5S,MAAM,CAAC,OAAQ,aAClE+pB,EAASu/B,YAAOuzC,EAAM,WAAY,OAElC9yE,EAAS,IAAI8K,KACb,EAAKmtE,SAAS,CAAEg5M,QAAS,KACzBjxR,EAASu/B,YAAOuzC,EAAM,0BAA2B,KACjD9yE,EAASu/B,YAAOuzC,EAAM,WAAY,OAl1BnB,EAs1BZ4iN,0BAA4B,SAACj4T,GAClC,EAAKw6G,SAAS,CAAEm5M,kBAAmB3zT,EAAE4kB,OAAOtxB,SAv1B3B,EA01BZ4kU,4BAA8B,SAACl4T,GAEpC,EAAKw6G,SAAS,CACZ29M,uBAAuB,IAEzB1nR,YAAW,oCAAM,EAAK0gR,2BAAX,iBAAM,EAA0BzxR,eAAhC,aAAM,EAAmC4iC,UAAS,MA/1B5C,EAk2BZ81P,mBAAqB,SAACp4T,GAE3B,EAAKw6G,SAAS,CACZ29M,uBAAuB,EACvBxE,kBAAmB,MAt2BJ,EA02BZ0E,kBAAoB,SAACr4T,GAE1B,MAA6C,EAAK8hC,MAA1Cw2R,EAAR,EAAQA,iBAAkB/1R,EAA1B,EAA0BA,SAAU8yE,EAApC,EAAoCA,KAGpCijN,EAF8B,EAAK15R,MAA3B+0R,kBAE2Bv9L,QAAQ,SAACmiM,GAAD,OAAiBh2R,EAASu/B,YAAOuzC,EAAM,eAAgBkjN,QA/2BjF,EAk3BZC,cAAgB,SAACC,GAAgD,IAAD,MACpD,YAAK32R,MAAMixE,kBAAX,eAAuBp3G,IAAI,gBAA3B,UAA2C,EAAKijC,MAAMqzR,qBAAtD,aAA2C,EAA0Bt2T,IAAI,SAC1E,EAAKijC,MAAMywR,mBAAmBrrH,QAAUy0H,EAAsBz0H,OAC5E,EAAKuyH,aAEP,EAAK/7M,SAAS,CAAE60M,mBAAoBoJ,EAAuBC,8BAA8B,KAv3BxE,EA03BZC,SAAWt8R,QAAW,SAACyF,EAA6CzuC,GACzE,OACE,eAACy3H,EAAA,EAAD,2BACMhpF,GADN,aAEE,eAAC82R,EAAA,EAAD,CAAmBC,YAAa,SAAC74T,GAAY,IAAD,EAEL,WAAjC,UAACA,EAAE4kB,cAAH,eAAmBk0S,WACrB94T,EAAEg5H,iBAIF,EAAKxe,SAAS,CACZu+M,wBAAwB,EACxBZ,uBAAuB,EACvBxE,kBAAmB,MAVzB,SAcG7xR,EAAM5D,iBA54BI,EAk5BZ86R,eAAiB38R,OAAWA,cAAiC,SAACyF,EAAmEzuC,GACtI,MAA8D,EAAKyuC,MAA3DkzF,EAAR,EAAQA,WAAYlkD,EAApB,EAAoBA,QAAS0gP,EAA7B,EAA6BA,0BAA2B7tS,EAAxD,EAAwDA,EAChDua,EAAsB4D,EAAtB5D,SAAahiB,EAArB,YAA8B4lB,EAA9B,IACA,EAAqD,EAAKlD,MAAlDu5R,EAAR,EAAQA,sBAAuBxE,EAA/B,EAA+BA,kBACzBsF,GAA2I,IAAtHjkM,EAAWp3G,WAAU,SAAAoxG,GAAQ,OAAIA,EAASrzH,IAAI,SAASq1C,gBAAkB2iR,EAAkBv9L,OAAOplF,iBAE7H,OACE,gBAACy4E,EAAA,EAAD,yBACEp2H,IAAKA,GACD6oB,GAFN,cAIGgiB,EACD,uBACE8yC,UAAWF,EAAQooP,eADrB,UAIIf,EACI,eAACrK,EAAA,EAAD,CACAqL,SAAU,EAAKhI,oBACfr8M,SAAU08M,EACV4H,YAAa,SAACp5T,GAAaA,EAAE4kB,OAAO09C,SACpCv8D,MAAOkzT,EACP7lN,SAAU,EAAK6kN,0BACfjnP,UAAWF,EAAQuoP,iBACnB5nN,WAAW,EACXmR,YAAaj/F,EAAE,wCACf+wF,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQwoP,sBAEjBC,aACE,eAAC3kN,EAAA,EAAD,CAAgBC,SAAS,MAAzB,SAEI28M,EACI,eAACgI,EAAA,EAAD,CAAkB7lU,KAAK,OAAOkqG,MAAM,YACpC,uCACA,eAACy0B,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,EAAK27M,mBAAvC,SAA2D,eAAC,KAAD,MAC3D,eAAC9lM,EAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAUmkN,IAAuBtF,EAAkBv9L,OAAQ3Z,QAAS,EAAK47M,kBAAlG,SAAqH,eAAC,KAAD,YAMjI/kU,MAAOqgU,EACPlvM,WAAYw0M,EAAqBt1S,EAAE,6CAA+C,OAElF,KAEN,eAAC44F,EAAA,EAAD,CAAQzH,SAAUqjN,EAAuB17M,QAAS,EAAKy7M,4BAA6Br6N,MAAM,UAAU4T,WAAW,EAA/G,SAAsH9tF,EAAE,6CAh8B9H,EAAKib,MAAQ,CACXtrC,MAAO,EACP2iU,mBAAmB,EACnBF,qBAAqB,EACrBC,0BAA0B,EAC1BnL,mBAAoBrgT,gBACpBynT,cAAe,KACf2C,oBAAqB,KACrBG,oBAAoB,EACpB0C,oBAAoB,EACpBjE,QAAS,GACT6C,4BAA4B,EAC5BO,8BAA8B,EAC9B8B,8BAA8B,EAC9BrJ,mBAAoB4B,GACpBxH,SAAU,MACV0O,uBAAuB,EACvBxE,kBAAmB,GACnBoF,wBAAwB,EACxBhuM,SAAU,KACVmnM,eAAgB1nT,gBAChBivT,oBAAqB7mS,UAAO8mS,MAC5BC,aAAc,KACd9E,qBAAqB,EACrBZ,iBAAkB,KAClBD,cAAe,MA3BA,E,qDA+BnB,WACE,MAA2Kp8T,KAAKkqC,MAAxK83R,EAAR,EAAQA,cAAeC,EAAvB,EAAuBA,iBAAkBC,EAAzC,EAAyCA,WAAYpI,EAArD,EAAqDA,iBAAkBH,EAAvE,EAAuEA,YAAaI,EAApF,EAAoFA,mBAAoBC,EAAxG,EAAwGA,mBAAoBmI,EAA5H,EAA4HA,2BAA4B9C,EAAxJ,EAAwJA,eAExJ4C,IACAD,IACK3C,EAAetjU,MAClBmmU,KAEF,OAAIvI,QAAJ,IAAIA,OAAJ,EAAIA,EAAa51T,IAAI,eACnB+1T,EAAgB,OAACH,QAAD,IAACA,OAAD,EAACA,EAAa51T,IAAI,cAGhCg2T,GAAsBW,KAAiBC,iBAAiBZ,IAC1DC,EAAmBU,KAAiBC,iBAAiBZ,KAGzB,OAA1BoI,QAA0B,IAA1BA,OAAA,EAAAA,EAA4BvhT,MAAM,CAAC,UAAW,UAAWue,kBAAekB,QAC1ErgC,KAAK4iH,SAAS,CACZi/M,oBAAqB7mS,UAAOonS,U,kCAKlC,WACMpiU,KAAKw5T,0BACPx5T,KAAKw5T,yBAAyB39C,U,oBAg5BlC,WAAiB,IAAD,WACd,EAiCI77Q,KAAKkqC,MAjCT,IACEixE,kBADF,MACevoG,gBADf,EAEEyvT,EAFF,EAEEA,aACAnpP,EAHF,EAGEA,QACAukC,EAJF,EAIEA,KACAq/B,EALF,EAKEA,cACA1f,EANF,EAMEA,WACAa,EAPF,EAOEA,YACAqkM,EARF,EAQEA,0BACAC,EATF,EASEA,YACAC,EAVF,EAUEA,qBACAC,EAXF,EAWEA,eACAC,EAZF,EAYEA,yBACAC,EAbF,EAaEA,aACAlJ,EAdF,EAcEA,6BACA1tS,EAfF,EAeEA,EACA62S,EAhBF,EAgBEA,oBACAhG,EAjBF,EAiBEA,YACA/C,EAlBF,EAkBEA,YACAF,EAnBF,EAmBEA,YACA2E,EApBF,EAoBEA,0BACAt1Q,EArBF,EAqBEA,cACAre,EAtBF,EAsBEA,SACAk4R,EAvBF,EAuBEA,oBACAC,EAxBF,EAwBEA,sBACAjG,EAzBF,EAyBEA,sBACAE,EA1BF,EA0BEA,oBACAhD,EA3BF,EA2BEA,mBACAG,GA5BF,EA4BEA,wBACAC,GA7BF,EA6BEA,uBACA2C,GA9BF,EA8BEA,0BACA1C,GA/BF,EA+BEA,YACA+H,GAhCF,EAgCEA,2BAGF,GAiBIniU,KAAKgnC,MAhBPq3R,GADF,GACEA,kBACAF,GAFF,GAEEA,oBACAC,GAHF,GAGEA,yBACAnL,GAJF,GAIEA,mBACAkK,GALF,GAKEA,mBACAvB,GANF,GAMEA,QACA6C,GAPF,GAOEA,2BACAO,GARF,GAQEA,6BACA8B,GATF,GASEA,6BACArJ,GAVF,GAUEA,mBACA5F,GAXF,GAWEA,SACAsP,GAZF,GAYEA,uBACA9G,GAbF,GAaEA,cACA0H,GAdF,GAcEA,aACA9E,GAfF,GAeEA,oBACAZ,GAhBF,GAgBEA,iBAKI0G,GAAgB,UAAI7I,GACtB97T,OAAO0D,KAAKo4T,IAAyBv4S,MAAK,SAACrd,GAAD,OAA0BA,IAAQy6B,YAASC,KAAO16B,IAAQy6B,YAASE,OAC7GF,YAASC,WAFS,QAEDD,YAASC,IAExBgkS,GAAqB,OAAG7nN,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,MACxCk/T,GAAmB,OAAG9nN,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,oBAAqB,OAC9DsiT,GAAgCnG,KAA0BiG,IAA0BA,IAAyBA,KAA0BC,KAAyBpG,EAEhKsG,GAAa,OAAGhoN,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,aAEhCw5T,GAA+B1D,GAAe1+M,EAAWp3G,IAAI,iBAC7Dq/T,GAAwCvJ,IAAW,OAAKyE,QAAL,IAAKA,OAAL,EAAKA,EAAmCR,eAE3FuF,GAAqBloN,EAAWp3G,IAAI,aAAeo3G,EAAWv6F,MAAM,CAAC,OAAQ,SAAU,OAAQ,eAE/F4/G,GAAmC,QAAbqxL,GAAA,OACxB0Q,QADwB,IACxBA,OADwB,EACxBA,EAAav5T,KAAI,SAACguH,GAClB,MAAO,CACLl2F,MAAOk2F,EAAQjzH,IAAI,iBACnBrI,MAAOs7H,EAAQjzH,IAAI,OAAS,GAC5B48H,YAAa3J,EAAQjzH,IAAI,eACzBu/T,IAAKtsM,EAAQjzH,IAAI,OACjBo1H,MAAOnC,EAAQjzH,IAAI,SACnBkvN,QAASj8F,EAAQjzH,IAAI,WACrB68B,aAAco2F,EAAQjzH,IAAI,gBAC1BqzH,SAAUJ,EAAQjzH,IAAI,YACtBm1H,cAAelC,EAAQjzH,IAAI,iBAC3B0yT,WAAYz/L,EAAQjzH,IAAI,cACxBmvN,IAAKl8F,EAAQjzH,IAAI,OACjB0vN,KAAMz8F,EAAQjzH,IAAI,QAClBqoM,MAAOp1E,EAAQjzH,IAAI,SACnBytN,WAAYx6F,EAAQjzH,IAAI,cAExBk9B,GAAI+1F,EAAQjzH,IAAI,MAChB2yT,cAAe,KACfz9L,UAAW,KACX06F,SAAU,GACVmqG,eAAe,EACfN,OAAQ,SAvBc,OA0BxBiF,QA1BwB,IA0BxBA,OA1BwB,EA0BxBA,EAAgBz5T,KAAI,SAACguH,GACrB,MAAO,CACLl2F,MAAOk2F,EAAQp2G,MAAM,CAAC,cAAe,kBACrCllB,MAAOs7H,EAAQp2G,MAAM,CAAC,cAAe,QAAU,GAC/C+/G,YAAa3J,EAAQp2G,MAAM,CAAC,cAAe,gBAC3C0iT,IAAKtsM,EAAQp2G,MAAM,CAAC,cAAe,QACnCu4G,MAAOnC,EAAQp2G,MAAM,CAAC,cAAe,UACrCqyM,QAASj8F,EAAQp2G,MAAM,CAAC,cAAe,YACvCggB,aAAco2F,EAAQp2G,MAAM,CAAC,cAAe,iBAC5Cw2G,SAAUJ,EAAQp2G,MAAM,CAAC,cAAe,aACxCs4G,cAAelC,EAAQp2G,MAAM,CAAC,cAAe,kBAC7C61S,WAAYz/L,EAAQp2G,MAAM,CAAC,cAAe,eAC1CsyM,IAAKl8F,EAAQp2G,MAAM,CAAC,cAAe,QACnC6yM,KAAMz8F,EAAQp2G,MAAM,CAAC,cAAe,SACpCwrL,MAAOp1E,EAAQp2G,MAAM,CAAC,cAAe,UACrC4wM,WAAYx6F,EAAQp2G,MAAM,CAAC,cAAe,eAE1CqgB,GAAI+1F,EAAQp2G,MAAM,CAAC,cAAe,OAClC81S,cAAe1/L,EAAQp2G,MAAM,CAAC,cAAe,kBAC7Cq4G,UAAWjC,EAAQp2G,MAAM,CAAC,cAAe,cACzC+yM,SAAU38F,EAAQp2G,MAAM,CAAC,cAAe,aACxCg9S,WAAY5mM,EAAQp2G,MAAM,CAAC,cAAe,eAC1Ck9S,cAAe9mM,EAAQjzH,IAAI,iBAC3By5T,OAAQxmM,EAAQjzH,IAAI,cA+G1B,OACE,gBAAC80E,EAAA,EAAD,WACE,eAAC0qP,GAAA,EAAD,CAAkBr5M,MAAgDn+F,EAAxC4tS,GAAemJ,EAA2B,4BAAiC,+BAAgC57L,YAAay7L,IAEhJG,GAAyBrJ,GAAiCM,GAAsBI,GAE5E,gBAACthP,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASV,UAAWF,EAAQsqP,eAA3D,UACE,eAAC5B,EAAA,EAAD,CAAkB7lU,KAAM,QAASu/G,MAAO,CAAEkG,YAAa,KACtDi4M,EAA+B,6BAA+BqJ,EAAwB,6BAA+B3I,GAAyB,8BAAgC,QAIjL,wBAEE/gP,UAAWF,EAAQzC,KAFrB,UAIE,gBAACoC,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASV,UAAWF,EAAQuqP,YAA9E,UACE,eAAC5qP,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UAEK8hP,IAAYzgN,GAAcA,EAAWp3G,IAAI,cAC1C,eAACkmH,EAAA,EAAD,CAASC,MAAOm5M,GAAqB,GAAK,mDAA1C,SACE,gCACE,eAAC3oM,EAAA,EAAD,CAAYxd,SAAWimN,IAAiB1L,GAAmBK,SAAWyF,KAAkC8F,GAAoBx+M,QAAS,kBAAM,EAAKo3M,aAAY,IAAOlgU,KAAK,QAAQq9E,UAAWF,EAAQwqP,aAAnM,SACE,eAAC,KAAD,CAAiB9xM,KAAK,YAAY71H,KAAK,eAMjD,eAAC,QAAD,CACEu9E,UAAWqqP,KACXn1T,KAAK,WACLwrG,SAAU4pN,wBACV15R,MAAO,CACL25R,aAAcjI,GACd1+M,SAAUimN,IAAiB1L,GAAmBK,SAAWyF,GACzDuG,kBAAmB,kBACjB,gBAACjrP,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAME,QAAQ,SAA3C,UACE,eAAC0/B,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ6qP,WAA/C,SAA4Dh4S,EAAE,kCAC9D,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ6qP,WAA/C,SAA4Dh4S,EAAE,mDAOrEwxS,IAAgC,uCAC/B,eAACjF,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EAFd,SAKIwqD,EACI,eAACrgN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACCl6E,EAAE,0CAEH,uCACA,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGl6E,EAAE,wCAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ8qP,SAArC,SACE,eAAC/5M,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6BAAlB,SACE,eAAC,KAAD,CAAUo7F,SAAS,QAAQ/tC,UAAWF,EAAQ04C,gBAM1D,eAAC0mM,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAAC,QAAD,CACE7gQ,KAAK,oBACL8qE,UAAW2nD,IACXtnB,WAAY,CACVqc,WAAYinM,GACZjyM,YAAaj/F,EAAE,mCACfqtD,UAAWF,EAAQ+qP,kBACnBtiN,aAAc,kBAAM,GACpBa,cAAe,SAACvsG,GACVA,IACFgoH,EAAYhoH,GACR4jT,GACFyI,EAA0BrsT,KAIhC8yF,QAAS,WACP,EAAK7+D,MAAMS,SAAS,IAAI0jD,OAE1B48B,iBAAkB,iBACD,QAAb4mM,IAAsB2Q,GAAuC,WAAb3Q,IAAyB6Q,EACvE,uCACA,eAAC7pP,EAAA,EAAD,UACE,eAAC+oP,EAAA,EAAD,CAAkB7lU,KAAK,WAEzB,eAAC88E,EAAA,EAAD,UACE,eAAC2gC,EAAA,EAAD,UAAaztF,EAAE,iCAGjB,eAACytF,EAAA,EAAD,UACCztF,EAAE,mCAGTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,GAAUA,EAAO0Y,eAC3CjQ,eAAgB,SAAAzI,GAAM,OAAIA,GAAUA,EAAO0Y,eAC3CltF,QAASw0F,IAAuBA,GAAoB59H,UACpDwlH,kBAtNI,SAAC,EAAD,GAAuF,EAApF1sH,MAAqF,IAA9EolC,EAA6E,EAA7EA,MAAO6/F,EAAsE,EAAtEA,YAAa8yF,EAAyD,EAAzDA,KAAMP,EAAmD,EAAnDA,IAAK9mB,EAA8C,EAA9CA,MAAOjzE,EAAuC,EAAvCA,MAAOv4F,EAAgC,EAAhCA,aACzEsjS,GADyG,EAAdh7T,QAChFuqN,GAAQA,EAAK7yM,MAAM,CAAC,SAAU,OAAQ,YAAc,IAC/DujT,GAA+C,OAA1BhC,SAA0B,IAA1BA,QAAA,EAAAA,GAA4BvhT,MAAM,CAAC,UAAW,UAAWue,kBAAekB,OAAStB,YAASE,IAAMF,YAASC,IAC9HolS,EAAS,OAAGh4H,QAAH,IAAGA,OAAH,EAAGA,EAAOxrL,MAAM,CAAC,UAAWujT,EAAoB,SACzDzI,EAAK,OAAGtvH,QAAH,IAAGA,OAAH,EAAGA,EAAOxrL,MAAM,CAAC,UAAWujT,EAAoB,UACrDE,EAAc,OAAGj4H,QAAH,IAAGA,OAAH,EAAGA,EAAOxrL,MAAM,CAAC,UAAWujT,EAAoB,sBAC9DG,EAAmBD,EAAiBE,aAAWF,GAAgB,GAAS,KAExEG,EAAO,CACX,CAACz4S,EAAE,oDAAqD2vS,EAAQ3vS,EAAE,qBAAoC,MAAbq4S,EAAA,WAAwBA,GAAc,KAC/H,CAACr4S,EAAE,8CAA+CmnM,GAAO,KACzD,CAACnnM,EAAE,2DAA4Du4S,GAAoB,MAG/EG,EACJ,wBAAOnpN,MAAO,CAAEopN,eAAgB,YAAhC,SACE,iCACGF,EAAKx7T,KAAI,SAACgzJ,EAAK2oK,GAAN,OACR,8BACG3oK,EAAIhzJ,KAAI,SAAC47T,EAAMC,GAAP,OACP,qBAEEvpN,MAAO,CACLx/B,QAAS,gBACTmxC,UAAW43M,EAAY,OAAS,QAChCC,UAAW,aALf,SAQGF,GAPIC,OAHFF,UAmBjB,OACE,eAAC16M,EAAA,EAAD,CACEC,MAAOu6M,EACPt6M,UAAU,OAFZ,SAIE,gBAACtxC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAIi/O,EAAc,EAAI,EAAGv+M,MAAO,CAAEuY,aAAc,GAAlE,SACE,eAAC,KAAD,CAAOrN,IAAK09M,EAAUp9M,aAAa,EAAMD,YAAY,WAEvD,gBAAChuC,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASE,MAAM,EAAMgB,GAAIi/O,EAAc,GAAK,EAA7E,UACE,eAAChhP,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAA7B,SACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ6rP,iBAAmB,IAAM7rP,EAAQ8rP,uBAApG,SAA6HlkS,MAE/H,eAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAA7B,SACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ6rP,iBAAmB,IAAM7rP,EAAQ+rP,4BAAhF,SAA8GtkM,OAE9GxH,GAASv4F,IAAiB,eAACi4C,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAA7B,SAC1B,eAACggC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ6rP,iBAAnE,SAAsF,CAAC5rM,EAAOv4F,GAAcr1B,OAAOlO,SAASokB,KAAK,oBAiKvHq7B,WAAW,aACT4tE,kBA1JE,SAAAxgF,GACxB,OACE4S,KAAW4tE,mBACT,eAAC,KAAWA,kBAAZ,2BAAkCxgF,GAAlC,aACE,eAAC2uC,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SAFb,SAIE,eAAC,KAAD,WAmJiB4gP,EAAc,CAAElpC,KA5I9B,SAAAzmP,GACX,OAAQ4S,KAAW6zO,MACjB,gBAAC,KAAWA,KAAZ,2BAAqBzmP,GAArB,cACE,gBAAC8nR,EAAA,EAAD,CACEt2T,MAAOm2T,GACPr2M,SAAU,SAACpzG,EAAGyH,GACZzH,EAAEg5H,iBACF,EAAKxe,SAAS,CAAEivM,SAAUhiT,KAE5BoiT,eAAe,UACfC,UAAU,UACV,aAAW,eARb,UAUE,eAACC,EAAA,EAAD,CACErxR,MACE,gBAAC+3C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAAnD,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,GAA/D,SAAqEz1F,EAAE,iCACvE,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sCAAlB,SAAyD,eAAC,KAAD,CAAUk6E,MAAM,SAASkhB,SAAS,eAG/FzrH,MAAO,MACP4/G,MAAO,CAAEhgC,MAAO,SAElB,eAAC62O,EAAA,EAAD,CAAKj1M,UAAqB,OAAXy8M,QAAW,IAAXA,OAAA,EAAAA,EAAa51T,IAAI,SAAjB,OAA0Bo3G,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAYp3G,IAAI,cAAc+8B,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,UAA/B,SAA0Cl6E,EAAE,oCAAiDrwB,MAAO,SAAU4/G,MAAO,CAAEhgC,MAAO,YAE7MpxC,EAAM5D,eAmHuC,IAE9Bs1C,OAAO,uCACFspP,KACArL,EAAc,CACfsL,KAAM,SAACC,GAAD,mBAAC,eACFA,GADC,IAEJnoN,SAAU,QACV3hC,MAAO,IACPg5C,IAAK,OACL95G,MAAO,GACPs8P,UAAW,QAEX,IAXA,IAYJhvJ,eAAgB,SAACs9M,GAAD,mBAAC,eACZA,GADW,IAEdtpP,QAAS,IACTuuC,SAAU,YAEZg7M,YAAa,SAACD,GAAD,mBAAC,eACTA,GADQ,IAEX9pP,MAAO,OAKP2hC,SAAU,WACVqX,IAAK,OACL+H,UAAW,OACX5F,WAAY,SACZpM,SAAU,UACVvuC,QAAS,WAEXisC,kBAAmB,iBAAO,CACxBZ,SAAU,OACVlhB,MAAO,YAETshB,QAAS,SAAAC,GAAQ,kCACZA,GADY,IAEfG,YAAY,YACZF,aAAc,IACdI,UAAW,EACX0J,OAAQ,aAId3X,iBAAkB,CAChBC,WAAW,GAEbgT,YAAY,SAMpB,gBAACyrM,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,UACE,gBAACx2L,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNE,QAAQ,WACRb,WAAW,SAJb,UAOIskP,GACI,KACA6F,GACE,eAACz+M,EAAA,EAAD,CACAE,QAAS7kH,KAAKy6T,YACdx0N,MAAM,UAFN,SAICl6E,EAAE,yBAEHo3S,GACE,eAACl5M,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+BAAlB,SACA,eAAC44F,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAEo8M,8BAA8B,KAC7D/4N,MAAM,UAFR,SAIGl6E,EAAE,4BAGL,eAAC44F,EAAA,EAAD,CACAE,QAAS,kBAAM,EAAKjC,SAAS,CAAE67M,4BAA4B,KAC3Dx4N,MAAM,UACNiX,UAAWohN,EAHX,SAKCvyS,EAAE,0BAITq3S,IAAyC7F,KACzC,eAAC54M,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAEk+M,8BAA8B,KAC7D76N,MAAM,UACNiX,SAAU+/M,GAHZ,SAKGlxS,EAAE,8BAMT6wS,GACE,eAAC,QAAD,CACEpuT,KAAK,gBACL8qE,UAAWszC,KACX1iF,MAAO,CACL+7D,MAAO,UACPyT,QAAS,SACT54E,MAAO/U,EAAE,4CACTyvF,SAAU,SAACpzG,EAAGhI,GAAJ,OAAUuqC,EAASu/B,YAAOuzC,EAAM,gBAAiBr9G,WAQrE,eAACk4T,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAEIl0J,EAAWp3G,IAAI,cAAgB,uCAC7B,eAACy1G,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAQ4B,MAAO,CAAEgB,UAAW,EAAGhhC,MAAO,QAA9E,SACGvvD,EAAE,qCAEL,eAACytF,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAQ4B,MAAO,CAAE+X,aAAc,GAAIhJ,SAAU,UAArF,gBACGgwM,SADH,IACGA,QADH,EACGA,GAAet2T,IAAI,wBAO5B,eAACu0T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,+BAEV,eAACymS,EAAA,EAAD,CACEhkT,KAAK,gBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BACT3wB,SAAS,EACTu+G,WAAY,CACVuD,SAAWimN,IAAiB1L,GAAmBv+L,eAAkBqkM,IAAgCN,KAGrGnjP,QAAQ,WACRkgC,SAAU,CAACmqF,OAEb,eAACquH,EAAA,EAAD,CACEhkT,KAAK,aACL07B,MAAO,CACLpJ,MAAO/U,EAAE,uCACT4tF,WAAY,CACVuD,SAAUqgN,IAAgCN,KAG9CnjP,QAAQ,WACRkgC,SAAU,CAACiqF,OAEb,eAACuuH,EAAA,EAAD,CACEhkT,KAAK,MACL07B,MAAO,CACLpJ,MAAO/U,EAAE,qBACT4tF,WAAY,CACVuD,SAAWimN,IAAiB1L,GAAmBvkG,KAAQqqG,KAG3DzjP,QAAQ,WACRkgC,SAAU,CAACiqF,IAAkBjkM,KAAK0/T,oBAEpC,gBAACpH,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,UACE,eAACplJ,EAAA,EAAD,CACEC,MAAO/O,EAAWv6F,MAAM,CAAC,QAAS,WAAa,GAC/Cs4D,QAAS,CAAEsxM,OAAQtxM,EAAQ2qD,kBAF7B,SAIE,sBAAKvoB,MAAO,CAAEhgC,MAAO,QAArB,SAEE,eAAC,QAAD,CACE9sE,KAAK,QACL8qE,UAAWi/O,KACXv+M,SAAU,CAACgpF,KACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBuiB,MAAO/U,EAAE,8BACTmxF,SAAWimN,IAAiB1L,GAAmBt+L,OAAUokM,IAAgCN,GACzF57L,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAMrB,eAACoQ,EAAA,EAAD,CACEC,MAAO/O,EAAWv6F,MAAM,CAAC,eAAgB,WAAa,GACtDs4D,QAAS,CAAEsxM,OAAQtxM,EAAQ2qD,kBAF7B,SAIE,sBAAKvoB,MAAO,CAAEhgC,MAAO,QAArB,SAGE,eAAC,QAAD,CACE9sE,KAAK,eACL8qE,UAAWi/O,KACXv+M,SAAU,CAACgpF,KACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAASoxF,EAAW7+G,OACpBuiB,MAAO/U,EAAE,0BACTmxF,SAAWimN,IAAiB1L,GAAmBrgM,UAAammM,GAC5Dl8L,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO1/E,OAAS0/E,EAAO9kH,MAAQ,MAClE88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO1/E,OAAS0/E,EAAO9kH,SACtE0lU,eAAgBphU,KAAKohU,eACrBkE,gBAAiBtlU,KAAK+gU,SACtBp2N,KAAMw2N,GACNv8L,OAAQ,SAACx8H,EAAQmjH,GACf,EAAK3I,SAAS,CAAEu+M,wBAAwB,KAE1Cx8L,QAAS,SAACv8H,EAAQmjH,GAAoB,IAAD,EACN,WAAxB,OAADnjH,QAAC,IAADA,GAAA,UAAAA,EAAG4kB,cAAH,eAAWk0S,YACb,EAAKt+M,SAAS,CACZu+M,wBAAwB,EACxBZ,uBAAuB,EACvBxE,kBAAmB,OAK3BniN,iBAAkB,CAChBC,WAAW,IAGf9Q,QAAS,SAAC3gG,GAAD,OAAO,EAAKw6G,SAAS,CAAEu+M,wBAAwB,cAKhE,eAAC3O,EAAA,EAAD,CACEhkT,KAAK,cACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6BACT4tF,WAAY,CACVuD,SAAWimN,IAAiB1L,GAAmB92L,aAAgB48L,KAGnEgI,UAAW,GACXzrP,QAAQ,aAEV,eAACw+O,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAACx2L,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,eAAC,QAAD,CACEpsE,KAAK,MACL8qE,UAAWi/O,KACXruR,MAAO,CACLyvE,WAAY,CACV74E,MAAO/U,EAAE,qBACTigB,QAASgtR,GACT33L,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO1/E,MAAQ,MAClD03R,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO1/E,UAExD84E,iBAAkB,CAChBC,WAAW,UAMrB,eAACy+M,GAAA,EAAD,CAAWjpD,YAAY,IArXzB,IAyXIhyQ,QAAO,OAACy/T,SAAD,IAACA,QAAD,EAACA,GAA2B/gU,OAAS,uCAC1C,gBAACu8T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZF,cAAc,SACdD,gBAAgB,gBAJlB,UAME,eAAC11J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGl6E,EAAE,uBAEL,eAAC2uG,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAAM,EAAKq5M,cAAc,QAA3D,SACGG,GACG,eAAC,KAAD,CAAuBl3M,SAAS,UAChC,eAAC,KAAD,CAAgBA,SAAS,eAIjC,eAACq+M,EAAA,EAAD,CACEx9L,IAAKq2L,GACLjlP,UAAWF,EAAQusP,YACnBvsP,QAAS,CACPwsP,QAASxsP,EAAQysP,iBAJrB,SAQI7I,GAA0B9zT,KAAI,SAAC48T,EAAKzpU,GAClC,IAAM+D,EAAO0lU,EAAI7hU,IAAI,QACfyK,EAAOo3T,EAAI7hU,IAAI,OACf+8B,EAAQ8kS,EAAI7hU,IAAI,QAChBinH,EAAc46M,EAAI7hU,IAAI,eACtBoH,EAASy6T,EAAI7hU,IAAI,UACjBq0T,EAAawN,EAAI7hU,IAAI,cAC3B,OACE,eAAC,GAAD,CAAgC7D,KAAMA,EAAMsO,KAAMA,EAAMsyB,MAAOA,EAAOkqF,YAAaA,EAAa7/G,OAAQA,EAAQitT,WAAYA,GAAnGj8T,WASrC,gBAACm8T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZF,cAAc,SACdD,gBAAgB,gBAJlB,UAME,eAAC11J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGl6E,EAAE,+BAEL,eAAC2uG,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAAM,EAAKq5M,cAAc,eAA3D,SACGE,GACG,eAAC,KAAD,CAAuBj3M,SAAS,UAChC,eAAC,KAAD,CAAgBA,SAAS,eAIjC,gBAACq+M,EAAA,EAAD,CACEx9L,IAAKo2L,GACLhlP,UAAWF,EAAQ2sP,mBACnB3sP,QAAS,CACPwsP,QAASxsP,EAAQysP,iBAJrB,UAOE,eAACrN,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,gBAAC2iD,EAAA,EAAD,CACEt2T,MAAOsE,KAAKgnC,MAAM66R,oBAClBrmN,SAAU,SAACpzG,EAAGyH,GAAJ,OAAiB,EAAK+yG,SAAS,CAAEi/M,oBAAqBhyT,KAChE,aAAYkc,EAAE,yCACdkmS,eAAe,UACfC,UAAU,UACV52M,MAAO,CAAEhgC,MAAO,QANlB,UAQE,eAAC62O,EAAA,EAAD,CAAKrxR,MAAO/U,EAAE,oBAAqBrwB,MAAOs/B,UAAO8mS,MAAO1oP,UAAWF,EAAQk5O,OAC3E,eAACD,EAAA,EAAD,CAAKrxR,MAAO/U,EAAE,oBAAqBrwB,MAAOs/B,UAAOonS,MAAOhpP,UAAWF,EAAQk5O,YAI/E,eAACkG,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAEIoqD,EACI,eAACjgN,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,mDAE/B,eAAC,GAAD,CACEgnS,SAAU,wBACVC,OAAQ,OACRsC,cAAevpS,EAAE,kCACjBwpS,gBAAiBxpS,EAAE,mCACnBknS,mBAAoBA,GACpBnyR,MAAO/U,EAAE,2CACTypS,UAAWzpS,EAAE,+CACb0pS,gBAAiB1pS,EAAE,qDACnBmnS,sBAAuBnnS,EAAE,2DACzBonS,gBAAiBpnS,EAAE,gDACnBi/F,YAAaj/F,EAAE,iDACfqnS,mBAAoBrnS,EAAE,mDACtBsnS,aAAcrzT,KAAKgnC,MAAM66R,wBA+BnC,eAACvJ,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAEIoqD,EACI,eAACjgN,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,0CAE/B,eAAC,GAAD,CACEgnS,SAAU,eACVC,OAAQ,OACR1jD,QAASvjP,EAAE,kCACXknS,mBAAoBA,GACpBnyR,MAAO/U,EAAE,kCACTmnS,sBAAuBnnS,EAAE,kDACzBonS,gBAAiBpnS,EAAE,uCACnBi/F,YAAaj/F,EAAE,wCACfqnS,mBAAoBrnS,EAAE,0CACtBsnS,aAAcrzT,KAAKgnC,MAAM66R,wBAOjCgB,EAAsB,eAACvK,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAElBoqD,EACI,eAACjgN,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,6CAE/B,eAAC,GAAD,CACEgnS,SAAU6F,GACV5F,OAAQ,OACRsC,cAAevpS,EAAE,kCACjBwpS,gBAAiBxpS,EAAE,iDACnBknS,mBAAoBA,GACpBnyR,MAAO/U,EAAE,qCACTypS,UAAWzpS,EAAE,yCACb0pS,gBAAiB1pS,EAAE,+CACnBmnS,sBAAuBnnS,EAAE,qDACzBonS,gBAAiBpnS,EAAE,0CACnBi/F,YAAaj/F,EAAE,2CACfqnS,mBAAoBrnS,EAAE,6CACtBsnS,aAAcrzT,KAAKgnC,MAAM66R,wBAIpB,KAIfgB,EAAsB,eAACvK,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAElBoqD,EACI,eAACjgN,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,iDAE/B,eAAC,GAAD,CACEgnS,SAAU8F,GACV7F,OAAQ,OACRsC,cAAevpS,EAAE,kCACjBwpS,gBAAiBxpS,EAAE,qDACnBknS,mBAAoBA,GACpBnyR,MAAO/U,EAAE,yCACTypS,UAAWzpS,EAAE,6CACb0pS,gBAAiB1pS,EAAE,mDACnBmnS,sBAAuBnnS,EAAE,yDACzBonS,gBAAiBpnS,EAAE,8CACnBi/F,YAAaj/F,EAAE,+CACfqnS,mBAAoBrnS,EAAE,iDACtBsnS,aAAcrzT,KAAKgnC,MAAM66R,wBAIpB,KAIfgB,EAAsB,eAACvK,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAElBoqD,EACI,eAACjgN,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,uCAE/B,eAAC,GAAD,CACEgnS,SAAU+F,GACV9F,OAAQ,OACRsC,cAAevpS,EAAE,kCACjBwpS,gBAAiBxpS,EAAE,2CACnBknS,mBAAoBA,GACpBnyR,MAAO/U,EAAE,+BACTypS,UAAWzpS,EAAE,mCACb0pS,gBAAiB1pS,EAAE,yCACnBmnS,sBAAuBnnS,EAAE,+CACzBonS,gBAAiBpnS,EAAE,oCACnBi/F,YAAaj/F,EAAE,qCACfqnS,mBAAoBrnS,EAAE,uCACtBsnS,aAAcrzT,KAAKgnC,MAAM66R,wBAIpB,QAmBnB,gBAACvJ,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZF,cAAc,SACdD,gBAAgB,gBAJlB,UAME,eAAC11J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGl6E,EAAE,oCAEL,eAACk+F,EAAA,EAAD,CACEC,MAEMn+F,EADJoyS,GACM,uBACA,0BAJV,SAOE,eAACzjM,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAAM,EAAKq5M,cAAc,UAA3D,SACGC,GACG,eAAC,KAAD,CAAuBh3M,SAAS,UAChC,eAAC,KAAD,CAAgBA,SAAS,iBAKnC,eAACmxM,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAACm2D,EAAA,EAAD,CACEx9L,IAAKm2L,GACL/kP,UAAWF,EAAQ4sP,SACnB5sP,QAAS,CACPwsP,QAASxsP,EAAQysP,iBAJrB,SAQI3lU,KAAKo/T,oBACDp/T,KAAKo/T,oBAAoBp2T,KAAI,SAACk2T,EAAoC/iU,GAArC,OAC7B,eAAC,GAAD,CAEEs1T,YAAayN,EAAY97S,QAAQrf,IAAI,SACrCkpO,SAAUiyF,EAAY97S,QAAQrf,IAAI,MAClCmsH,gBAAiBkqM,GAAYr2T,IAAI,MAAQm7T,EAAY97S,QAAQrf,IAAI,QAAUq2T,GAAYr2T,IAAI,OAAS5H,EACpGu1T,gBACEqI,EACIgJ,IAC0B,OAA1BZ,SAA0B,IAA1BA,QAAA,EAAAA,GAA4BvhT,MAAM,CAAC,UAAW,UAAWue,kBAAekB,OAAStB,YAASE,IAAMF,YAASC,IAE/Gk+E,SAAWimN,IAAiB1L,GAAmBrrH,QAAUmxH,IAAkCA,IAAkE,YAAlC2B,EAAY97S,QAAQrf,IAAI,OAT9Im7T,EAAY97S,QAAQrf,IAAI,UAW9B6E,WACD,eAAC,GAAD,CACA6oT,YAAY,UACZxkF,SAAS,UACTykF,gBACEqI,EACIgJ,IAC0B,OAA1BZ,SAA0B,IAA1BA,QAAA,EAAAA,GAA4BvhT,MAAM,CAAC,UAAW,UAAWue,kBAAekB,OAAStB,YAASE,IAAMF,YAASC,IAE/GkxF,iBAAiB,EACjBhT,SAAWimN,IAAiB1L,GAAmBrrH,QAAUmxH,IAAiCA,SAOjGX,GAAezhN,EAAWp3G,IAAI,kBAAoB41T,GAAgB,uCACjE,eAACrB,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,qCAEV,eAACusS,GAAA,EAAD,iBAEIqB,QAFJ,IAEIA,GAFJ,UAEIA,EAAa51T,IAAI,yBAFrB,aAEI,EAAoCiF,KAAI,SAAC6hD,EAAM1uD,GAAP,OAAiB,eAAC8tH,EAAA,EAAD,CAAqBC,MAAOr/D,EAAK9mD,IAAI,YAArC,SAAkD,eAACgiU,EAAA,EAAD,CAAMjlS,MAAO+pB,EAAK9mD,IAAI,YAAaq1E,UAAWF,EAAQ8sP,YAA1F7pU,WAM/E,eAACm8T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,2BAEV,gBAACusS,GAAA,EAAD,WACE,eAAC9+M,EAAA,EAAD,UAAaztF,EAAE,sCACf,eAACmqS,EAAA,EAAD,CACE/nT,MAAOnO,KAAKgnC,MAAM64R,mBAClBhzM,WAAY7sH,KAAKgnC,MAAM64R,oBAAsB9zS,EAAE,oCAC/Cvd,KAAK,WACLsyB,MAAO/U,EAAE,8BACTk6S,WAAYjmU,KAAK8/T,+BACjBtkN,SAAUx7G,KAAK2/T,sBACf9lN,WAAW,IAGXzwF,kBAAQ+xF,EAAWp3G,IAAI,aAAe,IAAIg7C,MAAM,MAAM/1C,KAAI,SAACgyC,EAAM7+C,GAAP,OACxD6+C,GACA,eAACivE,EAAA,EAAD,CAAqBC,MAAOlvE,EAA5B,SACE,eAAC+qR,EAAA,EAAD,CACEjlS,MAAOka,EACPkrR,SAAUtD,GAAuB55Q,EAAgB,kBAAM,EAAKi3Q,sBAAsBjlR,EAAM7+C,IAAS,KACjGi9E,UAAWF,EAAQitP,eAJThqU,SAWpB,eAAC08E,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQktP,IAFrB,SAKIjJ,GACI,gBAACtkP,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACA,eAAConP,EAAA,EAAD,CAAkB7lU,KAAK,QAAQu/G,MAAO,CAAEkG,YAAa,MACrD,eAAChI,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,kCAGL,uCACA,eAAC44F,EAAA,EAAD,CACEE,QAAS89M,EACT18N,MAAM,UACNiX,SAAUigN,IAAsBF,GAHlC,SAKGlxS,EAAE,wBAGHm3S,GACI,eAACv+M,EAAA,EAAD,CACAE,QAAS,SAACz8G,GAAD,OAAO,EAAKw6G,SAAS,CAAEm/M,aAAcA,GAAe,KAAO35T,EAAEs8G,iBACtEze,MAAM,UACNiX,SAAUigN,IAAsBF,GAChCrjM,QAASmoM,GAAe,eAAC,KAAD,IAAqB,eAAC,KAAD,IAJ7C,SAMCh2S,EAAE,sBAEH,eAAC44F,EAAA,EAAD,CACAE,QAASw9M,GAAa,SAACgE,GAAD,OAAiB,EAAK/J,SAAS,CAAEnxT,OAAQk7T,EAAa5J,eAAgBuG,QAC5F/8N,MAAM,UACNiX,SAAUigN,IAAsBF,GAHhC,SAKClxS,EAAE,sBAIPkxS,IAAuB,eAAC2E,EAAA,EAAD,CAAkB7lU,KAAK,QAAQu/G,MAAO,CAAE4M,WAAY,MAG7E,gBAAC,IAAD,CACEiL,SAAU4uM,GACVp3N,KAAMttG,QAAQ0kU,IACd98L,gBAAiB,CAAE86J,SAAU,SAAUK,WAAY,QACnDz7J,QAAS,kBAAM,EAAK/hB,SAAS,CAAEm/M,aAAc,QAJ/C,UAOIhF,EACE,eAACxgN,EAAA,EAAD,CAAUW,SAAU+/M,GAAqBp4M,QAASw9M,GAAa,SAACgE,GAAD,OAAiB,EAAK/J,SAAS,CAAEnxT,OAAQk7T,EAAa5J,gBAAgB,EAAME,iBAAkBt/T,QAAQ0/T,QAArK,SACGhxS,EAAE,qCAGL,eAACwwF,EAAA,EAAD,CAAUW,SAAU+/M,GAAqBp4M,QAASw9M,GAAa,SAACgE,GAAD,OAAiB,EAAK/J,SAAS,CAAEnxT,OAAQk7T,EAAa5J,gBAAgB,EAAMC,YAAY,OAAvJ,SACG3wS,EAAE,qCAIT,eAACwwF,EAAA,EAAD,CAAUW,SAAU+/M,GAAqBp4M,QAASw9M,GAAa,SAACgE,GAAD,OAAiB,EAAK/J,SAAS,CAAEnxT,OAAQk7T,EAAa5J,gBAAgB,OAArI,SACG1wS,EAAE,0CASvB,eAAC,GAAD,CACE4+E,KAAMq0N,GACNr6L,QAAS,kBAAM,EAAK/hB,SAAS,CAAEo8M,8BAA8B,KAC7D9H,UAAWl3T,KAAK0+T,eAElB,eAAC,GAAD,CACE/zN,KAAM8zN,GACN95L,QAAS,kBAAM,EAAK/hB,SAAS,CAAE67M,4BAA4B,KAC3DvH,UAAWl3T,KAAKw+T,aAElB,eAAC,GAAD,CACE7zN,KAAMm2N,GACNrJ,mBAAoBA,GACpB9yL,QAAS,kBAAM,EAAK/hB,SAAS,CAAEk+M,8BAA8B,KAC7DpJ,OAAQ13T,KAAK4gU,gBAEf,eAAC0F,GAAA,EAAD,CACE37N,KAAMttG,QAAQg/T,IACdnjM,cAAa,OAAEmjM,SAAF,IAAEA,QAAF,EAAEA,GAAkBt4T,IAAI,iBACrC0yT,WAAU,OAAE4F,SAAF,IAAEA,QAAF,EAAEA,GAAkBt4T,IAAI,cAClCo1H,MAAK,OAAEkjM,SAAF,IAAEA,QAAF,EAAEA,GAAkBt4T,IAAI,SAC7BwiU,SAAUvmU,KAAKw8T,sBACfgK,UAAWxmU,KAAKm8T,gC,GAr/DM13R,aA2lEnBquR,GAA2B,oBAqKzB79O,qBACbgG,aArQa,SAACC,GAAD,MAA+B,CAC5CurP,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,OAGnCzuC,KAAM,CACJ8E,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAC/B2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B8+M,kBAAmB,CACjB98M,SAAU,UAEZirM,KAAM,CACJ52O,SAAU,OAEZkrP,YAAa,CACXrhN,OAAQ,WAEV2/M,uBAAwB,CACtB/+N,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1B2/M,UAAW,aAGbC,iBAAkB,CAChBzpP,MAAO,EACPe,SAAU,GAEZ4oP,4BAA6B,CAC3Bh/N,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5B8iM,SAAU,CACRxqP,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,EAAG,IAAM,EAAG,MAErCmrP,YAAa,CACXnqP,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,EAAG,IAAM,EAAG,MAErCurP,mBAAoB,CAClBvqP,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,EAAG,IAAM,EAAG,MAErCqrP,gBAAiB,CACft7M,SAAU,qBAEZuH,KAAM,CACJ3rB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B8+M,SAAU,CACR97M,WAAYhtC,EAAMZ,WAEpBupD,iBAAkB,CAChBvP,IAAI,GAAD,OAAKp5C,EAAMZ,SAAS,GAApB,kBAEL6rP,YAAa,CACX1+M,aAAcvsC,EAAM4/C,MAAMrT,aAC1BnL,UAAWphC,EAAMZ,QAAQ,IACzBknC,YAAatmC,EAAMZ,QAAQ,IAC3B+4C,aAAcn4C,EAAMZ,QAAQ,IAC5BgC,SAAU,SAEZmnP,YAAa,CACXlyM,OAAQr2C,EAAMZ,QAAQ,IACtB+4C,aAAcn4C,EAAMZ,WAEtBopP,aAAc,CACZrwM,aAAcn4C,EAAMZ,WAEtBkpP,eAAgB,CACdlnN,UAAWphC,EAAMZ,QAAQ,IAE3BgnP,eAAgB,CACdxlP,QAASZ,EAAMZ,WAEjBmnP,iBAAkB,CAChBpuM,aAAcn4C,EAAMZ,QAAQ,IAE9BonP,qBAAsB,CACpBv6M,SAAU,SAEZ6+M,SAAU,CACR37M,SAAU,SACV9uC,OAAQ,GAEV6qP,IAAK,CACHtqP,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B2iC,SAAU,SACVsX,OAAQ,IACRwG,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,UA0KhB,CAAE9Z,WAAW,IAChC7vE,YAAgB,gBAChBwqE,eACA9K,mBAnIsB,SAAC73E,EAAOyF,GAAc,IAAD,EACrCk6R,EAAqBl6R,EAASktR,aAAeltR,EAASktR,YAAY11T,IAAI,eACxEwoC,EAASktR,YAAY51T,IAAI,eACzB0oC,EAASktR,YAEPmE,EAAa,UAAGrxR,EAASktR,mBAAZ,aAAG,EAAsB51T,IAAI,iBAE1C41T,EAAoC,MAAtBgN,EAChBA,EAAmB5iU,IAAI,MACrB4iU,EACAA,EAAmBj/T,IAAI,gBAAiB,CAACi+F,KAAQ55E,EAAE,qCAAsC46S,EAAmB5iU,IAAI,kBAAkB0d,KAAK,MACzI7O,gBAIEg0T,EAAoBhqL,cAAyB51G,GAE7Co5G,EAAiBumL,GAAsBC,EAC1Cr7T,QAAO,SAAA0xI,GAAY,OAAIA,EAAal5I,IAAI,WAAa4iU,EAAmB5iU,IAAI,YAC5E6c,MAAM,CAAC,EAAG,OAGPimT,EAAoBlN,EAAY7zS,SAAQ,SAACxhB,GAC7C,MAAe,iBAARA,EAAyB,QAAUA,KAGtCw4T,EAA4B38D,eAAsCn5N,GAElEs3E,EAAiBqoN,EAhEe,SAAChN,EAAav5K,EAAgB09K,GACpE,OAAOnE,EAAY3oT,eAAc,SAACywQ,GAAS,IAAD,KACpC,UAACA,EAAI19Q,IAAI,gBAAT,aAAC,EAAkBhI,OACrB0lR,EAAI/5Q,IAAI,QAASkL,cAAI,KAEvB,IAAMgrT,EAAan8C,EAAI19Q,IAAI,cAC3B,GAAI,OAAC65T,QAAD,IAACA,OAAD,EAACA,EAAY7hU,KAEV,CAEL,IAAM+qU,EAAwBlJ,EAAW50T,KAAI,SAACgyC,GAC5C,OAA0B,OAAtBA,EAAKj3C,IAAI,SACJi3C,EAAKj3C,IAAI,SAEXi3C,KAETymO,EAAI/5Q,IAAI,aAAco/T,QATtBrlD,EAAI/5Q,IAAI,aAAckL,cAAI,KAW5B6uQ,EAAI/5Q,IAAI,gBAAiBo2T,GACzB,IAAMiJ,EAAWpN,EAAY51T,IAAI,OACjC,OAAO09Q,EACJ/5Q,IAAI,eAA+C,MAA/BiyT,EAAY51T,IAAI,YAAsB,KAAO6O,cAAI,CACpEquB,GAAI04R,EAAY51T,IAAI,YACpBrI,MAAOi+T,EAAY51T,IAAI,mBAExB2D,IAAI,QAA2B,MAAlB04I,EAAyB,KAAOxtI,cAAI,CAChDquB,GAAIm/G,EACJ1kJ,MAAOi+T,EAAY51T,IAAI,YAExB2D,IAAI,MAAOq/T,EAAWn0T,cAAI,CACzBkuB,OAAO,UAAAk4R,GAAIr3S,MAAK,SAAA2hT,GAAG,OAAIA,EAAI5nU,QAAUqrU,YAA9B,eAAyCjmS,QAAS,GACzDplC,MAAOqrU,IACJ,SAkCLC,CAAgCH,EAAmBzmL,EAAgB/iJ,QAAQygU,IAD3ElrT,gBAEE6qG,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOq1M,GAE/CwL,EADW2I,4BAAkBnU,GACuBriR,CAASzJ,EAAO,qBAE1E,OAAO,aACLy2E,OACAa,gBACAggN,4BACAxhL,cAAe8pL,EACf9J,4BACA1C,YAAa/vD,YAAkB,CAAC,UAAnBA,CAA8BrjO,IACxC8L,YAAyB,CAC1BqoE,WAAYC,wBAAc03M,IAC1B11L,WAAY8f,cACZgqL,YAAappH,YAA2BqpH,IACxC5E,YAAatmE,gBACbumE,qBAAsB5kE,gBACtB6kE,eAAgB5lE,gBAChB6lE,yBAA0B5lE,eAC1BuiE,eAAgB+H,eAChB1N,mBAAoBh8D,eACpB+7D,6BAA8B97D,eAC9BilE,oBAAqB9+Q,eACrB81Q,0BAA2BztF,eAC3BywF,YAAax1Q,cACbyyQ,YAAaxyQ,cACbw0F,WAAYp1F,eACZuC,cAAehF,eACf6+Q,oBAAqBp/Q,eACrBq/Q,sBAAuBhjE,eACvBm6D,wBAAyBx9D,gBACzB09D,uBAAwBp9D,eACxBolE,2BAA4BtsL,eArB3B/iG,CAsBA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfgjQ,cAAe,WACbr3R,EAAS,IAAI20B,MAEf2+D,YAAa,SAACC,GACZvzF,EAAS,IAAIghD,KAAuB,CAAE6xC,WAAYU,MAEpDokM,0BAA2B,SAACpkM,GAC1BvzF,EAAS,IAAIkjD,KAA2B,CACtC07B,QAAS,CACP,IAAO,CACL,CACE,cAAiB,CACf,MAAS2U,UAOrBgkM,WAAY,WACVv3R,EAAS,IAAI+qP,IAAiB,CAAEx1R,KAAM,SAAUmnU,WAAY,QAE9DvN,iBAAkB,SAAC7gM,GACjBtuF,EAAS,IAAIm4C,KAAqB,CAAEm2C,gBAEtCynM,iBAAkB,SAAClyT,EAAc84T,GAC/B38R,EAAS,IAAIqqG,KAAuB,CAAExmI,OAAM84T,gBAE9CtN,mBAAoB,SAAC97L,GAAD,OAAmBvzF,EAAS,IAAI8iD,KAAyB,CAC3E87B,QAAS,CACP,IAAO,CACL,CACE,cAAiB,CACf,MAAS2U,IAGb,CACE,cAAiB,CACf,GAAMA,MAKdlyF,QAAS,CAEPisJ,QAAS,CACPh3J,IAAK,YAYbq2P,aAAmC,CAAEt2B,SAAU8xD,KAC/CyU,oBAAU,CACRC,kBAAkB,EAClBC,oBAAoB,IARTxyP,CAUbqkP,I,2FCnhFF,IAsHerkP,qBACbgG,cAda,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ0uF,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5BmqJ,QAAS,CACPh0L,MAAO,SAUTn8B,YAAgB,gBAChB0/D,mBAPsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DuQ,KAAMF,eAD2BrQ,CAEhC9L,KAKwB,MAHZiuC,EAtHuC,SAAC/qC,GACrD,IACEw9R,EAIEx9R,EAJFw9R,UACAxuP,EAGEhvC,EAHFgvC,QACA71B,EAEEnZ,EAFFmZ,KACAt3B,EACEme,EADFne,EAGI47S,EC7BD,WACL,MAAgCjpR,mBAAkBkpR,gBAAlD,mBAAO52M,EAAP,KAAiB62M,EAAjB,KAYA,OAVA1hS,qBAAU,WACR,IAAM2hS,EAAO,kBAAMD,EAAYD,iBAG/B,OAFAl5S,OAAOs6E,iBAAiB++N,KAAuBD,GAC/Cp5S,OAAOs6E,iBAAiB,UAAW8+N,GAC5B,WACLp5S,OAAOu6E,oBAAoB8+N,KAAuBD,GAClDp5S,OAAOu6E,oBAAoB,UAAW6+N,MAEvC,IAEI92M,EDgBkBg3M,GAEnBjrL,EAAY15F,IAAS5pB,YAAS6pB,IAG9B2kR,EAAkB,SAAC/6F,EAAyBhtO,GAChD,GAAa,SAATA,EACF,OAAO6rB,EAAE,iBAAD,OAAkB7rB,IAG5B,IAAKwnU,EAAU9mT,MAAM,CAACssN,EAAU,UAC9B,OAAOnhN,EAAE,sBAGX,IAAMm8S,EAAiC,QAAbh7F,IAAuBnwF,EAEjD,OACE,kCACGhxH,EAAE,qBACH,eAACk+F,EAAA,EAAD,CACEC,MAA2Bn+F,EAApBm8S,EAAsB,kCAAuC,oCACpEhvP,QAASgvP,EAAoB,CAAC19C,OAAQtxM,EAAQo2L,cAAWxzQ,EAF3D,SAIE,eAAC,KAAD,CAAUmqG,MAAM,SAASqV,MAAO,CAAC6L,SAAU,kBAM7CghN,EAAkB,SAACj7F,EAAyBhtO,GAA1B,MACb,SAATA,GAAmBwnU,EAAU9mT,MAAM,CAACssN,EAAU,UAC1C,eAAC,KAAD,CAAWjnI,MAAM,YACjByhO,EAAU9mT,MAAM,CAACssN,EAAUhtO,KAE3BkoU,EAAe,SAACl7F,GACpB,IAAMm7F,EAA0B,CAAC,OAAQ,OAAQ,QAIjD,OAAKV,EAcH,uCACE,eAAC9uP,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACG6uP,EAAWr/T,KAAI,SAAC9I,GAAD,OACd,eAAC24E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6CgiO,EAAgB/6F,EAAUhtO,MAD3CA,QAKlC,eAAC24E,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACG6uP,EAAWr/T,KAAI,SAAC9I,GAAD,OACd,eAAC24E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6CkiO,EAAgBj7F,EAAUhtO,MAD3CA,WAvB7BmoU,EAAWr/T,KAAI,SAAC9I,GAAD,OACpB,gBAAC24E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6CgiO,EAAgB/6F,EAAUhtO,OAEzE,eAAC24E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6CkiO,EAAgBj7F,EAAUhtO,SAL/CA,OA+BlC,OACE,gBAAC24E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQ3hE,KAA7C,UACE,eAACiiG,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6CyhO,EAAU3jU,IAAI,UAAY,KAEvE,gBAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAM4hC,MAAO,CAACgB,UAAW,GAA1D,UACE,eAACgsN,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,0BACPy6F,IAAK+hN,OAEP,eAAC/uN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAC4M,WAAY,GAAhE,SAAqEn8F,EAAE,0BAExEq8S,EAAa,OAEd,gBAACvvP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAM4hC,MAAO,CAACgB,UAAW,GAA1D,UACE,eAACgsN,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,oBACPy6F,IAAKgiN,OAEP,eAAChvN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAC4M,WAAY,GAAhE,SAAqEn8F,EAAE,0BAExEq8S,EAAa,a,qEEhIdK,GAAsB,CAAC,oBAAqB,oBAAqB,qBACjEC,GAAsB,CAC1BC,kBAAmB,oBACnBC,kBAAmB,oBACnBC,kBAAmB,qBAEfC,GAAyB,CAC7BH,kBAAmB,0BACnBC,kBAAmB,0BACnBC,kBAAmB,2BAEfE,GAAa,CAAC,MAAO,O,yGCuFrBC,G,4MACGhiS,MAAQ,CAAEiiS,eAAe,G,EAQzBC,aAAe,SAACjoS,GACrB,MAAsF,EAAKiJ,MAAnFi/R,EAAR,EAAQA,kBAAmBxG,EAA3B,EAA2BA,aAAcyG,EAAzC,EAAyCA,eAAgBC,EAAzD,EAAyDA,gBAAiBryM,EAA1E,EAA0EA,QAC1E,EAGIoyM,EAAerlU,IAAIojU,IAFrBn7R,EADF,EACEA,QACAu9E,EAFF,EAEEA,QAEFyN,EACIqyM,EAAgB,CAAEpwM,UAAWh4F,EAAI+K,UAASu9E,YAC1C4/M,EAAkBloS,GACtB0hS,K,EAGKvD,kBAAoB,WACzB,MAII,EAAKl1R,MAHPm1R,EADF,EACEA,eACAroM,EAFF,EAEEA,QACAjrG,EAHF,EAGEA,EAGIuzS,EAAa,OAAGtoM,QAAH,IAAGA,OAAH,EAAGA,EAASp2G,MAAM,CAAC,cAAe,UAC/C2+S,EAAYD,GAAiBA,EAAczgT,SAASjc,UAsB1D,OAjB+By8T,GAAkBA,EAAe1zT,QAAO,SAACutI,EAAKigL,GAC3E,IAAMlsF,EAAWksF,EAAOp1T,IAAI,MACtBy7T,EAA2B,YAAbvyF,EAAyBlhN,EAAE,yBAA2BotS,EAAOp1T,IAAI,SAErF,GAAIw7T,GAAaA,EAAUh2T,SAAS0jO,GAAW,CAC7C,IAAMwyF,EAAgBH,EAAcv7T,IAAIkpO,GAClCisF,EAAWtmT,gBAAM5B,eAAc,SAACywQ,GACpCA,EAAI/5Q,IAAIulO,EAAUwyF,GAClBh+C,EAAIvxQ,MAAM,CAAC+8N,EAAU,SAAUuyF,GAC/B/9C,EAAIvxQ,MAAM,CAAC+8N,EAAU,MAAOA,MAG9B,OAAO/zF,EAAI9sI,KAAK8sT,GAElB,OAAOhgL,IACNjhI,mB,EAKEqxT,qCAAuC,SAACC,EAA+BC,EAAmBC,GAK/F,OAJoC,EAAKv/R,MAAjCw/R,wBAGiC9oT,MAAM,CAAC,UAAW,SAAWue,kBAAekB,OAEjFkpS,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,IAAcD,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAWC,IAAgBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAWC,IACrLF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,IAAcD,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAWC,IAAgBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAWC,K,EAGpLE,kBAAoB,SAACC,GAC1B,IAAQ79S,EAAM,EAAKme,MAAXne,EACR,OAAQ69S,GACN,IAAK,QACH,OAAO,gBAAC/wP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACL,eAAC4uP,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,0BACPy6F,IAAK+hN,OAEP,eAAC/uN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAE4M,WAAY,GAAjE,SAAuEn8F,EAAE,yBAE7E,IAAK,QACH,OAAO,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACL,eAAC4uP,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,oBACPy6F,IAAKgiN,OAEP,eAAChvN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAE4M,WAAY,GAAjE,SAAuEn8F,EAAE,yBAI7E,QACE,OAAO,O,uDAnFb,WACO/rB,KAAKkqC,MAAMm1R,eAAetjU,MAC7BiE,KAAKkqC,MAAMg4R,e,oBAqFf,WAAiB,IAAD,WACd,EAeIliU,KAAKkqC,MAdPgvC,EADF,EACEA,QACAypP,EAFF,EAEEA,aAFF,IAIE3rM,eAJF,MAIYpkH,gBAJZ,EAKEmZ,EALF,EAKEA,EAEA89S,GAPF,EAMExK,eANF,EAOEwK,0BACAjN,EARF,EAQEA,YACA/C,EATF,EASEA,YACAgJ,EAVF,EAUEA,oBACAr0M,EAXF,EAWEA,4BACAs7M,EAZF,EAYEA,iBACAC,EAbF,EAaEA,4BACAluL,EAdF,EAcEA,WAGI89K,EAAc3iM,EAAQjzH,IAAI,eAI1BimU,GAFYrQ,EAAY51T,IAAI,MAEjB41T,EAAY/4S,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAc,IAEtEqpT,EAAUD,EACZ,CACAE,kBAAmB,CACjBC,MAAOH,EACPI,QAPY,MAUd,CACAC,SAAU,CACR7jN,IAAK8jN,KACLjhM,IAAK,qBAILkhM,EAAU5Q,EAAY/4S,MAAM,CAAC,YAAa,OAAQ,SAAWke,WAAQ0rS,IAAM,MAAQ7Q,EAAY/4S,MAAM,CAAC,YAAa,OAAQ,SAE3H6pT,GADW9Q,EAAY/4S,MAAM,CAAC,aAAc,OAAQ,SAAWke,WAAQ0rS,KAAc7Q,EAAY/4S,MAAM,CAAC,aAAc,OAAQ,SAC5G+4S,EAAY51T,IAAI,iBAElC2mU,GADeD,EAAkBlG,aAAWkG,GAAiB,GAAQ1+S,EAAE,oBACtD4tS,EAAY51T,IAAI,cACjCkwN,EAAcy2G,EAAiBnG,aAAWmG,GAAgB,GAAQ3+S,EAAE,oBAE1E,ED5NsC,SAACuzS,GACzC,IAAIqL,EAA2B,KAC3BC,EAA2B,KAE/B,OAAKtL,GAIcA,EAAczgT,SAASjc,UAC/B8J,SAAQ,SAACugO,GAClB,IAAMiyF,EAAcI,EAAcv7T,IAAIkpO,GACtC87F,GAAWr8T,SAAQ,SAACwgO,GAAc,IAAD,EACzBiyF,EAAa,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAan7T,WAAhB,aAAG,OAAAm7T,EAAmBhyF,GACrCiyF,GACFsJ,GAAoB/7T,SAAQ,SAACm+T,GAAe,IAAD,EACnC9+M,EAAI,UAAGozM,EAAcp7T,WAAjB,aAAG,OAAAo7T,EAAoB0L,GACjC,GAAI9+M,KAAU4+M,GAAa,IAAI58S,KAAKg+F,GAAQ,IAAIh+F,KAAK48S,IAAa,CAAC,IAAD,IAChEA,EAAY5+M,EACZ,IAAMrlE,EAAM,UAAGy4Q,EAAcp7T,WAAjB,aAAG,OAAAo7T,EAAoB2J,GAAuB+B,IACpDC,GAAW,UAAA3L,EAAcp7T,WAAd,oBAAAo7T,EAAoBuJ,GAAoBmC,MAAe,KAClEE,EAAQppU,OAAO+kD,KAAY5nB,WAAQ0rS,KAlC/B,+BAkCsCM,EAChDF,EAAYG,EAAQ,MAAQD,YAO/B,CAAEH,YAAWC,cAvBX,CAAED,YAAWC,aCuNiDI,CAA2BrR,EAAY51T,IAAI,UAA7FknU,EAAnB,EAAQN,UAAwCO,EAAhD,EAAqCN,UAE/BO,EAAqBnrU,KAAKspU,qCAAqC3P,EAAa,wBAAyB,eAAiBA,EAAY/4S,MAAM,CAAC,OAAQ,QAAS,wBAAyB,eACnLwqT,EAA2BzR,EAE3B0R,EAAwBrrU,KAAKspU,qCAAqC3P,EAAa,eAAgB,eAAiBA,EAAY/4S,MAAM,CAAC,OAAQ,QAAS,eAAgB,eACpK0qT,EAA8B3R,EAE9B4R,EAAsBvrU,KAAKspU,qCAAqCgC,EAA6B,eAAgB,aAAe,GAC5HE,EAAoBxrU,KAAKspU,qCAAqCgC,EAA6B,eAAgB,UAC3GG,EAA0BzrU,KAAKspU,qCAAqCgC,EAA6B,eAAgB,gBACjHI,EAAsBF,GAAqBG,aAAiBH,GAG5DI,EAA2B5rU,KAAKspU,qCAAqC3P,EAAa,kBAAmB,eAAiBA,EAAY/4S,MAAM,CAAC,OAAQ,QAAS,kBAAmB,eAC7KirT,EAAiClS,EAEjCmS,EAAyB9rU,KAAKspU,qCAAqCuC,EAAgC,kBAAmB,aAAe,GACrIE,EAAuB/rU,KAAKspU,qCAAqCuC,EAAgC,kBAAmB,UACpHG,EAA6BhsU,KAAKspU,qCAAqCuC,EAAgC,kBAAmB,gBAC1HI,EAAyBF,GAAwBJ,aAAiBI,GAClEG,EAAoBlsU,KAAKspU,qCAAqC3P,EAAa,kBAAmB,QAAU,GAExGwS,EAA+BnsU,KAAKspU,qCAAqC3P,EAAa,sBAAuB,eAAiBA,EAAY/4S,MAAM,CAAC,OAAQ,QAAS,sBAAuB,eACzLwrT,EAAqCzS,EAErC0S,EAA6BrsU,KAAKspU,qCAAqC8C,EAAoC,sBAAuB,aAAe,GACjJE,EAA2BtsU,KAAKspU,qCAAqC8C,EAAoC,sBAAuB,UAChIG,GAAiCvsU,KAAKspU,qCAAqC8C,EAAoC,sBAAuB,gBACtII,GAA6BF,GAA4BX,aAAiBW,GAC1EG,GAAwBzsU,KAAKspU,qCAAqC3P,EAAa,sBAAuB,QAAU,GAEhH+S,GAAqB1sU,KAAKspU,qCAAqC3P,EAAa,WAAY,eAAiBA,EAAY/4S,MAAM,CAAC,OAAQ,QAAS,WAAY,eACzJ+rT,GAA2BhT,EAE3BiT,GAAmB5sU,KAAKspU,qCAAqCqD,GAA0B,WAAY,aAAe,GAClHE,GAAiB7sU,KAAKspU,qCAAqCqD,GAA0B,WAAY,UACjGG,GAAuB9sU,KAAKspU,qCAAqCqD,GAA0B,WAAY,gBACvGI,GAAmBF,IAAkBlB,aAAiBkB,IACtDG,GAAchtU,KAAKspU,qCAAqC3P,EAAa,WAAY,QAAU,GAE3FsT,GAA+BjtU,KAAKspU,qCAAqC8B,EAA0B,wBAAyB,aAAe,GAC3I8B,GAA6BltU,KAAKspU,qCAAqC8B,EAA0B,wBAAyB,UAC1H+B,GAAmCntU,KAAKspU,qCAAqC8B,EAA0B,wBAAyB,gBAChIgC,GAA+BF,IAA8BvB,aAAiBuB,IAC9EG,GAA0BrtU,KAAKspU,qCAAqC3P,EAAa,wBAAyB,QAAU,GACpH2T,MAAoBJ,IAA8BD,IAAgCA,GAA6B7zR,cAAc6gJ,SAAS,SAEtIszI,GAAgB5T,EAAY51T,IAAI,UAChCypU,GAAkBC,2BAAwB7sT,MAAM,CAAC2sT,GAAe,cAChEG,GAAmBC,qBAAoBA,oBAAiBhsT,MAAK,SAAC8jF,GAAD,OAA0BA,EAAO1hG,IAAI,WAAawpU,MAC/GK,GAAqBL,GAAgBr0P,EAAQ,KAAD,OAAMw0P,IAAoBA,GAAiB3pU,IAAI,QAAWm1E,EAAQ20P,KAE9GC,GAAY,OAAGnU,QAAH,IAAGA,OAAH,EAAGA,EAAa51T,IAAI,eAChCgqU,GAAiBD,GAAe1vU,OAAO0D,KAAKgsU,GAAavvT,QAAU,GAEnEo1M,GAAWgmG,EAAY51T,IAAI,aAAe,GAE1CiqU,GAAmBnU,GAAe7iM,EAAQjzH,IAAI,iBAE9CgjU,GAAWpN,EAAY51T,IAAI,OAE3BkqU,GAAoBj3M,EAAQjzH,IAAI,YAAc83I,EAC9CqyL,GAAwBl3M,EAAQjzH,IAAI,mBAAqBkqU,IAAqBjQ,aAAwBhnM,EAAS6kB,GAE/GsyL,GAAmBpE,GAA+BuD,KAAmBW,KAAuBA,IAAqBC,IAEvH,OACE,gBAACr1P,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAOE,eAAC4zP,GAAA,EAAD,CACEC,WAAU,eAAOpE,GACjBqE,UAAW9/M,EAA8B,GAAK,CAC5C,CAAEtjG,OAAQa,EAAE,oBAAqB84F,QAAS7kH,KAAKkqC,MAAMqkS,YAAc,MACnE,CAAErjT,OAAQa,EAAE,yBAA0B84F,QAASmpN,GAAmB,KAAOhuU,KAAKkqC,MAAMskS,YAAc,MAElG,CAAEtjT,OAAQa,EAAE,sBAAuB84F,QAAS7kH,KAAKkqC,MAAMukS,cAAgB,OAEzEvkN,MAAOyvM,EAAY51T,IAAI,iBACvBmjI,YAAay7L,EACb+L,cACE,sBAAKt1P,UAAWF,EAAQy1P,cAAxB,SACE,sBAAKv1P,UAAW6tC,KAAW/tC,EAAQ01P,KAAMhB,IAAqBpM,YAAa,SAAAp5T,GAAC,OAAIA,EAAE87G,mBAAlF,SACE,eAAC1K,EAAA,EAAD,UACGg0N,GAAkBzhT,EAAEyhT,IAAoBD,IAAiB,YAQpE,gBAAC10P,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SACLpB,UAAWF,EAAQzC,KAJrB,UAME,eAAC6hP,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,+BAEV,eAACusS,GAAA,EAAD,UACE,gBAACz/O,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEwpN,UAAW,cAA9D,UACE,eAAC76M,EAAA,EAAD,CAASC,MAAOn+F,EAAE,uCAAwCo+F,UAAU,eAApE,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ21P,gBAA/D,SACGlV,EAAY51T,IAAI,kBAGrB,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qBAAsBo+F,UAAU,eAAlD,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ21P,gBAA/D,SACGlV,EAAY51T,IAAI,WAGrB,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0BAA2Bo+F,UAAU,eAAvD,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ21P,gBAA/D,SACGlV,EAAY51T,IAAI,oBAGrB,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6BAA8Bo+F,UAAU,eAA1D,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ21P,gBAA/D,SACGlV,EAAY51T,IAAI,mBAGrB,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qBAAsBo+F,UAAU,eAAlD,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ21P,gBAA/D,UACG,UAAA7V,GAAIr3S,MAAK,SAAA2hT,GAAG,OAAIA,EAAI5nU,QAAUqrU,aAA9B,eAAyCjmS,QAAS,YAM3D,eAACw3R,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,+BAEV,eAACusS,GAAA,EAAD,UACE,gBAACz/O,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,WAEIuzP,IAAgCI,KAA4B,uCAC5D,eAAC7zN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,6CAC9C/rB,KAAK2pU,kBAAkBwD,IACxB,gBAACt0P,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ41P,cAA5E,WACI3D,GACA,eAAClhN,EAAA,EAAD,CAASC,MAAOn+F,EAAE,gDAAlB,SACE,eAAC,KAAD,CAAak6E,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAKlDq7M,GAEI,eAAChjN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,2CAAL,aAAoDkhT,KAAkC,GAAtG,SACE,eAAC3/M,GAAA,EAAD,CAAMF,KAAMggN,GAA8B2B,UAAU,OAAO31P,UAAWF,EAAQu6I,KAA9E,SAAqFw5G,OAIvF,eAAChjN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,2CAAL,aAAoDshT,KAA6B,GAAjG,SACE,eAAC//M,GAAA,EAAD,CAAMF,KAAMigN,GAAyBrgT,OAAQ,SAAUgiT,IAAI,WAAWD,UAAU,OAAO31P,UAAWF,EAAQu6I,KAA1G,SACG45G,aAQd9B,EACG,uCACE,eAAC/xN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,oCAC9C/rB,KAAK2pU,kBAAkB8B,GACxB,gBAAC5yP,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ41P,cAA5E,WACIzD,GACE,eAACphN,EAAA,EAAD,CAASC,MAAOn+F,EAAE,uCAAlB,SACE,eAAC,KAAD,CAAak6E,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAItD,eAAC3H,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,kCAAL,aAA2Cw/S,IAAyB,GAApF,SACE,eAACj+M,GAAA,EAAD,CAAMF,KAAMs+M,EAAqBqD,UAAU,OAAO31P,UAAWF,EAAQu6I,KAArE,SAA4E83G,SAI9E4C,IACE,eAACxpN,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACNqV,MAAO,CAAEhgC,MAAO,eAChBupC,QAAS,kBAAM,EAAKjC,SAAS,CAAEqmN,eAAe,KAJhD,SAME,eAACzvN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7qB,QAAQ,SAASkgC,MAAO,CAAE4M,WAAY,GAAlF,SACGn8F,EAAE,8BAMboiT,GACE,qCACE,gBAACt1P,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,oCAC/C,gBAAC44F,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN7sB,UAAWF,EAAQ+1P,wBACnBpqN,QAAS,kBAAM,EAAKjC,SAAS,CAAEqmN,eAAe,KAJhD,UAME,eAAC,KAAD,CAAS9hN,SAAS,QAAQlhB,MAAM,YAChC,eAACuT,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7qB,QAAQ,SAASkgC,MAAO,CAAE4M,WAAY,GAAlF,SACGn8F,EAAE,gCAKX,KAIJ82S,EAAsB,sCAClBiJ,GAA0BI,IAAsB,uCAChD,eAAC1yN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,uCAC9C/rB,KAAK2pU,kBAAkBqC,GACxB,gBAACnzP,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ41P,cAA5E,WACIlD,GACA,eAAC3hN,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0CAAlB,SACE,eAAC,KAAD,CAAak6E,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAKlDk6M,EAEI,eAAC7hN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,qCAAL,aAA8C+/S,IAA4B,GAA1F,SACE,eAACx+M,GAAA,EAAD,CAAMF,KAAM6+M,EAAwB8C,UAAU,OAAO31P,UAAWF,EAAQu6I,KAAxE,SAA+Eq4G,MAIjF,eAAC7hN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,qCAAL,aAA8CmgT,IAAuB,GAArF,SACE,eAAC5+M,GAAA,EAAD,CAAMF,KAAM8+M,EAAmBl/S,OAAQ,SAAUgiT,IAAI,WAAWD,UAAU,OAAO31P,UAAWF,EAAQu6I,KAApG,SACGy4G,cAOX,KAINrJ,EAAsB,sCAClBwJ,GAA8BI,KAA0B,uCACxD,eAACjzN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,2CAC9C/rB,KAAK2pU,kBAAkB4C,IACxB,gBAAC1zP,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ41P,cAA5E,WACI3C,GACA,eAACliN,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8CAAlB,SACE,eAAC,KAAD,CAAak6E,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAKlDy6M,EAEI,eAACpiN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,yCAAL,aAAkDsgT,IAAgC,GAAlG,SACE,eAAC/+M,GAAA,EAAD,CAAMF,KAAMo/M,GAA4BuC,UAAU,OAAO31P,UAAWF,EAAQu6I,KAA5E,SAAmF44G,MAIrF,eAACpiN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,yCAAL,aAAkD0gT,KAA2B,GAA7F,SACE,eAACn/M,GAAA,EAAD,CAAMF,KAAMq/M,GAAuBz/S,OAAQ,SAAUgiT,IAAI,WAAWD,UAAU,OAAO31P,UAAWF,EAAQu6I,KAAxG,SACGg5G,eAOX,KAIN5J,EAAsB,sCAClB+J,IAAoBI,KAAgB,uCACpC,eAACxzN,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,iCAC9C/rB,KAAK2pU,kBAAkBmD,IACxB,gBAACj0P,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ41P,cAA5E,WACIpC,IACA,eAACziN,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oCAAlB,SACE,eAAC,KAAD,CAAak6E,MAAM,UAAU7sB,UAAWF,EAAQ04C,SAKlDg7M,GAEI,eAAC3iN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,+BAAL,aAAwC6gT,KAAsB,GAA9E,SACE,eAACt/M,GAAA,EAAD,CAAMF,KAAM2/M,GAAkBgC,UAAU,OAAO31P,UAAWF,EAAQu6I,KAAlE,SAAyEm5G,OAI3E,eAAC3iN,EAAA,EAAD,CAASC,MAAO,UAAGn+F,EAAE,+BAAL,aAAwCihT,KAAiB,GAAzE,SACE,eAAC1/M,GAAA,EAAD,CAAMF,KAAM4/M,GAAahgT,OAAQ,SAAUgiT,IAAI,WAAWD,UAAU,OAAO31P,UAAWF,EAAQu6I,KAA9F,SACGu5G,eAOX,UAMVnD,EACE,eAACvR,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,kCAGV,KAGF89S,GAA4BiE,GAC1B,eAACxV,GAAA,EAAD,UACE,eAACz/O,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,gBAAlD,SAEIi0P,GAAe/kU,KAAI,SAACkmU,EAAuB5qU,GAAiB,IAAD,EACnD6qU,EAAgBrB,GAAa/pU,IAAImrU,GACjCE,EAAaD,EAAcprU,IAAI,cAC/BsrU,EAAYF,EAAcprU,IAAI,aAC9BurU,EAAG,UAAGH,EAAcprU,IAAI,qBAArB,QAAsC,IAC/C,OACE,gBAAC80E,EAAA,EAAD,CAAgBe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQq2P,UAAnF,UACE,eAAC/1N,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGmpO,IAEH,eAAC51N,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACel6E,EAAZsjT,EAAc,wBAA6B,4BAE9C,gBAAC71N,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UACGl6E,EAAE,qBADL,KAC4B,uBAAMuvF,MAAO,CAAErV,MAAOqpO,EAAM,EAAI,MAAQ,WAAxC,SAAsDA,SARzEhrU,UAoCrB,KAGJ,eAACg0T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,6BAEV,eAACusS,GAAA,EAAD,UAEIt4T,KAAKo/T,oBACDp/T,KAAKo/T,oBAAoBp2T,KAAI,SAACk2T,EAAoC56T,GAArC,OAC7B,eAAC,GAAD,CAEEojU,UAAWxI,EAAY97S,SADlB87S,EAAY97S,QAAQrf,IAAI,UAG9B6E,WACD,eAAC,GAAD,CACA8+T,UAAW/N,EAAY/4S,MAAM,CAAC,QAAS,gBAO7Cg8S,GAAe,uCACb,eAACtE,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,qCAEV,eAACusS,GAAA,EAAD,iBAEIthM,QAFJ,IAEIA,GAFJ,UAEIA,EAASjzH,IAAI,yBAFjB,aAEI,EAAgCiF,KAAI,SAAC6hD,EAAM1uD,GAAP,OAAiB,eAAC8tH,EAAA,EAAD,CAAqBC,MAAOr/D,EAAK9mD,IAAI,YAArC,SAAkD,eAACgiU,EAAA,EAAD,CAAMjlS,MAAO+pB,EAAK9mD,IAAI,YAAaq1E,UAAWF,EAAQ8sP,YAA1F7pU,WAO3E,eAACm8T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,2BAEV,eAACusS,GAAA,EAAD,UACG3kG,IAAYA,GAAS50K,MAAM,KAAK/1C,KAAI,SAACgyC,EAAM7+C,GAAP,OACnC,eAAC8tH,EAAA,EAAD,CAAqBC,MAAOlvE,EAA5B,SACE,eAAC+qR,EAAA,EAAD,CACEjlS,MAAOka,EACPo+B,UAAWF,EAAQitP,eAHThqU,QASlB,eAACm8T,GAAA,EAAD,CAAWrpD,QAAS,eAAC,KAAD,IAApB,SACE,eAACz1J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACE,eAAC,IAAD,CACEl6E,EAAGA,EACH4wB,QAAS,iCACTxxC,OAAQ,CACNqD,KAAMy8T,EAAoBC,GAAoBn/S,EAAE,oBAAwBw+S,GAAWx+S,EAAE,oBACrFggG,KAAMk/M,EAAmBA,EAAiBn7T,MAAM,EAAG,IAAOmkN,EAAYpyN,OAAS,GAAKoyN,EAAYnkN,MAAM,EAAG,IAAMmkN,GAEjHn3K,WAAY,CACV,uBAAiBw+D,MAAO,CAAEihB,WAAY,MAA5B,QACV,uBAAiBjhB,MAAO,CAAEihB,WAAY,MAA5B,eAKlB,eAAC+7L,GAAA,EAAD,CAAWrpD,QAAS,eAAC,KAAD,IAApB,SACE,eAACz1J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACE,eAAC,IAAD,CACEl6E,EAAGA,EACH4wB,QAAS,0BACTxxC,OAAQ,CACN2/T,SAAUP,GAAWx+S,EAAE,oBACvBggG,KAAMkoG,EAAYpyN,OAAS,GAAKoyN,EAAYnkN,MAAM,EAAG,IAAMmkN,GAE7Dn3K,WAAY,CACV,uBAAiBw+D,MAAO,CAAEihB,WAAY,MAA5B,QACV,uBAAiBjhB,MAAO,CAAEihB,WAAY,MAA5B,kBAkCnBv8H,KAAKgnC,MAAMiiS,eAAiBqE,IAAkBF,IAC7C,eAACoC,GAAA,EAAD,CACE7kO,KAAM3qG,KAAKgnC,MAAMiiS,cACjBtkM,QAAS,kBAAM,EAAK/hB,SAAS,CAAEqmN,eAAe,KAC9CwG,YAAarmT,iBAAO,CAAC,CACnB6vG,UAAW0gM,EAAY51T,IAAI,iBAC3Bm1H,cAAeygM,EAAY51T,IAAI,iBAC/BimU,WACA7wM,MAAOwgM,EAAY51T,IAAI,SACvBqzH,SAAUuiM,EAAY51T,IAAI,gBAC1B2rU,QAAStC,GACTza,SAAUsa,GACVrD,aAAcuD,IAAoC,MAEpDwC,WAAY7F,W,GAhoBQrlS,aAuwBjBwwC,qBACbgG,aA/Ha,SAACC,GAAD,MAA+B,CAC5CzE,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BuU,WAAY,OACZ,MAAO,CACLzzB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4jE,eAAgB,SAGpB0pO,kBAAmB,CACjB3pO,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B+mM,iBAAkB,CAChB5pO,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BusS,gBAAiB,CACfx7M,aAAcn4C,EAAMZ,QAAQ,IAC5BgB,MAAO,eAETw0P,QAAS,CACPz7M,cAAe,QAEjBy6M,cAAe,CACb58M,cAAeh3C,EAAMZ,WAEvBm5I,KAAM,CACJh9F,WAAY,SACZd,aAAc,WACdtL,SAAU,SAEV/uC,MAAO,cACP+pC,OAAQ,WAEVuM,KAAM,CACJpQ,YAAatmC,EAAMZ,QAAQ,GAC3BgB,MAAO,GACPi2C,OAAQ,IAEVo9M,cAAe,CACblnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACV4N,cAAe,YACfz5C,MAAO,QACP2xC,UAAW,SACX8N,WAAY,SAEd6zM,KAAM,CACJ9yP,QAAS,WACTkpC,gBAAiB,WAGnB+qN,IAAK,CACHh1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,cAAe,SAE7D+qN,IAAK,CACHj1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDgrN,IAAK,CACHl1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,YAAa,SAE3DirN,IAAK,CACHn1M,WAAY,WAEdo1M,IAAK,CACHp1M,WAAY,WAGd8yM,KAAM,CACJ7oN,gBAAiB,WAEnBuqN,UAAW,CACTr9M,cAAeh3C,EAAMZ,WAEvB6rP,YAAa,CACX1+M,aAAcvsC,EAAM4/C,MAAMrT,aAC1BlsC,OAAQL,EAAMZ,QAAQ,IACtBgC,SAAU,SAEZ0pP,SAAU,CACR37M,SAAU,SACV9uC,OAAQ,GAEV0zP,wBAAyB,CACvB3yN,UAAWphC,EAAMZ,QAAQ,KACzBgB,MAAO,cACPmsC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BC,YAAa,SACZ,UAAW,CACVA,YAAa,SACbga,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,WAsCvC6c,YAAgB,gBAChBwqE,eACA9K,mBApBsB,SAAC73E,GACvB,OAAO8L,YAAyB,CAC9Bs2R,eAAgBzrH,cAChB0hH,eAAgB+H,eAChB1N,mBAAoBh8D,eACpBmsE,yBAA0B9mR,eAC1B65Q,YAAax1Q,cACbyyQ,YAAaxyQ,cACbw7Q,oBAAqBp/Q,eACrBimR,wBAAyB7zL,cACzBrnB,4BAA6B7mE,cAC7BoiR,4BAA6B7gR,eAC7B2yF,WAAYp1F,gBAXP3T,CAYJ9L,MA5BsB,SAAC2D,GAC1B,MAAO,CACLw+R,kBAAmB,SAAClwM,GAClBtuF,EAAS,IAAIoiD,IAAwB,CAAEksC,gBAEzCowM,gBAAiB,YAAqD,IAAlDpwM,EAAiD,EAAjDA,UAAWjtF,EAAsC,EAAtCA,QAASu9E,EAA6B,EAA7BA,QAASu0M,EAAoB,EAApBA,cAC/CnzR,EAAS,IAAIwjD,IAA6C,CAAE8qC,YAAWjtF,UAASu9E,UAASu0M,oBAE3FoE,WAAY,WACVv3R,EAAS,IAAI+qP,IAAiB,CAAEx1R,KAAM,SAAUmnU,WAAY,QAE9D18R,eAoBWsqC,CAKb+zP,ICnzBWoH,GAA2B,wBAC3BjJ,GAAoB,gBAG3BkJ,G,4MAEGx/D,kBAAoB,WACzB,MAA6E,EAAK3mO,MAA1E8sF,EAAR,EAAQA,QAAS8lM,EAAjB,EAAiBA,0BAA2BwT,EAA5C,EAA4CA,mBAAoB3lS,EAAhE,EAAgEA,SAC5DqsF,IACGA,EAAQjzH,IAAI,cACfusU,KAG8B,OAA9BxT,GACFnyR,EAAS,IAAIqyC,O,EAkBVg0L,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAAsC,EAAK/mO,MAAnC8sF,EAAR,EAAQA,QAAR,EAAiB8iM,iBACbz7M,EAAU2Y,UAAYA,GACxB,EAAK2rM,gB,EAIFA,aAAe,YAKpBh4R,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIkmS,O,0DA3BR,WACE,MAAwCnnU,KAAKkqC,MAArCS,EAAR,EAAQA,SAAS2lS,EAAjB,EAAiBA,mBACjB3lS,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIkmS,GACJx8N,MAAM,KAER2lO,IAEA3lS,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIkmS,GACJj9R,MAAO,Q,oBAsBX,WAAiB,IAAD,OACd,EAKIlqC,KAAKkqC,MAJEqmS,EADX,EACE50R,QACAq7E,EAFF,EAEEA,QACAw5M,EAHF,EAGEA,WACA3T,EAJF,EAIEA,sBAGM4T,EAAoGD,EAApGC,YAAa1T,EAAuFyT,EAAvFzT,oBAAqBhD,EAAkEyW,EAAlEzW,mBAAoBG,EAA8CsW,EAA9CtW,wBAAyB4P,EAAqB0G,EAArB1G,iBAEjFnD,EAAqB3vM,GAAWy5M,EAEhC90R,EAAW,WACf,OAAQ40R,GACN,KAAKH,GACH,OAAO,eAAC,GAAD,CACLzW,YAAagN,EACb9J,sBAAuBA,EACvB8F,aAAc,EAAKA,aACnB5F,oBAAqBA,EACrBhD,mBAAoBA,EACpBG,wBAAyBA,IAG7B,KAAKwW,KACH,OAAO,eAACC,GAAA,EAAD,IAGT,QACE,OAAO,eAAC,GAAD,CACL35M,QAAS2vM,EACThE,aAAc,EAAKA,aACnB4L,WAAY,EAAKrkS,MAAMqkS,YAAc,KACrCC,WAAY,EAAKtkS,MAAMskS,YAAc,KACrCC,aAAc,EAAKvkS,MAAMukS,cAAgB,KACzC3E,iBAAkBA,KAvBT,GA6BjB,OAAO,eAACjxP,EAAA,EAAD,UAEHl9B,Q,GAzFoBlX,aA8HbwwC,sBACbgG,aAhCa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ6jE,QAAS,YA+BXj8B,YAAgB,gBAChB0/D,mBA5BsB,SAAC73E,EAAOkD,GAI9B,OAHA,YAEIA,GACG4I,YAAyB,CAC9BwZ,SAAUlD,eACVonR,WAAYh1M,YAA+B2rM,IAC3ClvL,QAASE,cACTx8F,QAASiiK,YAAkCupH,IAC3CrK,0BAA2B38D,gBALtBrtN,CAMJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACLA,WACAimS,qBAAsB,SAACC,GACrBlmS,EAAS,IAAIm1B,KAA0B,CAAC+wQ,iBAE1CP,mBAAoB,WAClB3lS,EAAS,IAAIy4C,WAKJnO,CAIbo7P,K,8BCpMF,0GA0CE5rS,IAAMkV,UA+CNlV,IAAMkV,UAuBR,IAAI2zE,EAEJ,SAAU6iJ,GAGR,SAAS7iJ,IACP,OAAO6iJ,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAHpD2wQ,YAAerjJ,EAAM6iJ,GAMrB,IAAI1qO,EAAS6nF,EAAKnvH,UA6ClB,OA3CAsnC,EAAO4wF,YAAc,SAAqB8Q,EAAO7W,GAC/C,IACMtwH,KAAKkqC,MAAM26E,SAAS7kH,KAAKkqC,MAAM26E,QAAQsiB,GAC3C,MAAO2pM,GAEP,MADA3pM,EAAM/F,iBACA0vM,EAGH3pM,EAAMu7K,kBACM,IAAjBv7K,EAAMha,QACLntH,KAAKkqC,MAAMld,QAAgC,UAAtBhtB,KAAKkqC,MAAMld,QA7BrC,SAAyBm6G,GACvB,SAAUA,EAAMy7K,SAAWz7K,EAAM27K,QAAU37K,EAAMw7K,SAAWx7K,EAAM07K,UA6B/DkuB,CAAgB5pM,KAEbA,EAAM/F,kBACOphI,KAAKkqC,MAAM0uC,QAAU03C,EAAQ13C,QAAU03C,EAAQlkH,MACrDpM,KAAKkqC,MAAMj7B,MAIxBw2B,EAAO28F,OAAS,WACd,IAAIzqF,EAAQ33C,KAERuiH,EAAcviH,KAAKkqC,MACnBgjO,EAAW3qJ,EAAY2qJ,SAEvBj+P,GADUszG,EAAY3pC,QACjB2pC,EAAYtzG,IACjBqV,EAAOolB,YAA8B64E,EAAa,CAAC,WAAY,UAAW,OAG9E,OAAO99E,IAAMwB,cAAc+qS,kBAAgBzmS,SAAU,MAAM,SAAUrhC,GAClEA,GAAqH+E,aAAU,GAChI,IAAIw7C,EAAyB,kBAAPx6C,EAAkB6kQ,YAAe7kQ,EAAI,KAAM,KAAM/F,EAAQugD,UAAYx6C,EACvFm+G,EAAO3jE,EAAWvgD,EAAQonH,QAAQulJ,WAAWpsN,GAAY,GAC7D,OAAOhlB,IAAMwB,cAAc,IAAK6D,YAAS,GAAIxlB,EAAM,CACjDugG,QAAS,SAAiBsiB,GACxB,OAAOxvF,EAAM0+E,YAAY8Q,EAAOj+H,EAAQonH,UAE1ClD,KAAMA,EACN3xH,IAAKyxQ,SAKJ5/I,EApDT,CAqDE7oF,IAAMkV,Y,mECrKKs3R,E,OAAS,G,yMCDtB,SAASC,EAAoBC,EAAYC,EAAkBnqN,GACzD,IAAIoqN,EAAe,GAQnB,OAPApqN,EAAWloE,MAAM,KAAKryC,SAAQ,SAAU0sE,QACRt9E,IAA1Bq1U,EAAW/3P,GACbg4P,EAAiBhlU,KAAK+kU,EAAW/3P,IAEjCi4P,GAAgBj4P,EAAY,OAGzBi4P,EAET,IAAIC,EAAe,SAAsBvuU,EAAOwuU,EAAYC,GAC1D,IAAIp4P,EAAYr2E,EAAMuB,IAAM,IAAMitU,EAAW/iU,KAe7C,IARiB,IAAhBgjU,QAIqF11U,IAAhCiH,EAAMouU,WAAW/3P,KACrEr2E,EAAMouU,WAAW/3P,GAAam4P,EAAW31P,aAGH9/E,IAApCiH,EAAM0uU,SAASF,EAAW/iU,MAAqB,CACjD,IAAIs5B,EAAUypS,EAEd,EAAG,CACiBxuU,EAAMoW,OAAO,IAAMigE,EAAWtxC,EAAS/kC,EAAM2uU,OAAO,GAEtE5pS,EAAUA,EAAQ/nC,gBACCjE,IAAZgsC,K,SC7BTvmC,EAAiBnD,OAAOD,UAAUoD,eAElCowU,EAAmCjtS,wBAMhB,qBAAhB84Q,YAA8Bo0B,cAAgB,MACjDC,EAA4BntS,wBAAc,IAC1CotS,EAAgBH,EAAoBvrS,SAEpC2rS,EAAmB,SAA0B7nT,GAC/C,IAAIk4G,EAAS,SAAgBl4F,EAAOzuC,GAClC,OAAoBwqC,wBAAc0rS,EAAoBpnS,SAAU,MAAM,SAAUxnC,GAC9E,OAAOmnB,EAAKggB,EAAOnnC,EAAOtH,OAK9B,OAAoB8tC,qBAAW64F,IAS7B4vM,EAAe,qCAEfC,EAAqB,SAA4B/xU,EAAMgqC,GAMzD,IAAIgoS,EAAW,GAEf,IAAK,IAAI5tU,KAAO4lC,EACV3oC,EAAeP,KAAKkpC,EAAO5lC,KAC7B4tU,EAAS5tU,GAAO4lC,EAAM5lC,IAwB1B,OApBA4tU,EAASF,GAAgB9xU,EAoBlBgyU,GAGL9vM,EAAS,SAAgBr/H,EAAOmnC,EAAOgxC,EAAOz/E,GAChD,IAAI02U,EAAoB,OAAVj3P,EAAiBhxC,EAAMkoS,IAAMloS,EAAMkoS,IAAIl3P,GAI9B,kBAAZi3P,QAAsDr2U,IAA9BiH,EAAMouU,WAAWgB,KAClDA,EAAUpvU,EAAMouU,WAAWgB,IAG7B,IAAIjyU,EAAOgqC,EAAM8nS,GACbZ,EAAmB,CAACe,GACpB/4P,EAAY,GAEe,kBAApBlvC,EAAMkvC,UACfA,EAAY83P,EAAoBnuU,EAAMouU,WAAYC,EAAkBlnS,EAAMkvC,WAC9C,MAAnBlvC,EAAMkvC,YACfA,EAAYlvC,EAAMkvC,UAAY,KAGhC,IAAIm4P,EAAac,YAAgBjB,GAUrBE,EAAavuU,EAAOwuU,EAA4B,kBAATrxU,GACnDk5E,GAAar2E,EAAMuB,IAAM,IAAMitU,EAAW/iU,KAC1C,IAAI0jU,EAAW,GAEf,IAAK,IAAI5tU,KAAO4lC,EACV3oC,EAAeP,KAAKkpC,EAAO5lC,IAAgB,QAARA,GAAiBA,IAAQ0tU,IAC9DE,EAAS5tU,GAAO4lC,EAAM5lC,IAQ1B,OAJA4tU,EAASz2U,IAAMA,EACfy2U,EAAS94P,UAAYA,EACEnzC,wBAAc/lC,EAAMgyU,IAMzCI,EAAyBP,GAAiB,SAAU7nS,EAAOnnC,EAAOtH,GACpE,MAAyB,oBAAdyuC,EAAMkoS,IACKnsS,wBAAc4rS,EAAatnS,SAAU,MAAM,SAAU2wC,GACvE,OAAOknD,EAAOr/H,EAAOmnC,EAAOgxC,EAAOz/E,MAIhC2mI,EAAOr/H,EAAOmnC,EAAO,KAAMzuC,M,sBCrHhC82U,EAAM,SAAaryU,EAAMgqC,GAC3B,IAAIlf,EAAOtnB,UAEX,GAAa,MAATwmC,IAAkB3oC,EAAeP,KAAKkpC,EAAO,OAE/C,OAAOjE,gBAAch+B,WAAMnM,EAAWkvB,GAGxC,IAAI+8J,EAAa/8J,EAAKnpB,OAClB2wU,EAAwB,IAAI/wU,MAAMsmL,GACtCyqJ,EAAsB,GAAKF,EAC3BE,EAAsB,GAAKP,EAAmB/xU,EAAMgqC,GAEpD,IAAK,IAAIlnC,EAAI,EAAGA,EAAI+kL,EAAY/kL,IAC9BwvU,EAAsBxvU,GAAKgoB,EAAKhoB,GAIlC,OAAOijC,gBAAch+B,MAAM,KAAMuqU,IAmG/BC,GAFF94R,YAEc,WACd,IAAI+4R,EAAaN,IAAInqU,WAAM,EAAQvE,WAC/B8K,EAAO,aAAekkU,EAAWlkU,KAErC,MAAO,CACLA,KAAMA,EACNotE,OAAQ,cAAgBptE,EAAO,IAAMkkU,EAAW92P,OAAS,IACzDijF,KAAM,EACN59J,SAAU,WACR,MAAO,QAAUjB,KAAKwO,KAAO,IAAMxO,KAAK47E,OAAS,YAKnD2xC,EAAa,SAASA,EAAWviG,GAKnC,IAJA,IAAIjd,EAAMid,EAAKnpB,OACXmB,EAAI,EACJ2vU,EAAM,GAEH3vU,EAAI+K,EAAK/K,IAAK,CACnB,IAAI0nB,EAAMM,EAAKhoB,GACf,GAAW,MAAP0nB,EAAJ,CACA,IAAIkoT,OAAQ,EAEZ,cAAeloT,GACb,IAAK,UACH,MAEF,IAAK,SAED,GAAIjpB,MAAMC,QAAQgpB,GAChBkoT,EAAQrlN,EAAW7iG,QAInB,IAAK,IAAIvqB,KAFTyyU,EAAQ,GAEMloT,EACRA,EAAIvqB,IAAMA,IACZyyU,IAAUA,GAAS,KACnBA,GAASzyU,GAKf,MAGJ,QAEIyyU,EAAQloT,EAIVkoT,IACFD,IAAQA,GAAO,KACfA,GAAOC,IAIX,OAAOD,GAGT,SAASliU,EAAM0gU,EAAYiB,EAAKh5P,GAC9B,IAAIg4P,EAAmB,GACnBC,EAAeH,EAAoBC,EAAYC,EAAkBh4P,GAErE,OAAIg4P,EAAiBvvU,OAAS,EACrBu3E,EAGFi4P,EAAee,EAAIhB,GAG5B,IAAIyB,EAAad,GAAiB,SAAU7nS,EAAOhhC,GACjD,OAAoB+8B,wBAAc4rS,EAAatnS,SAAU,MAAM,SAAU2wC,GACvE,IAEIk3P,EAAM,WAKR,IAAK,IAAIrnT,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,IAAIsmT,EAAac,YAAgBrnT,EAAM9hB,EAAQioU,YAM/C,OAHEG,EAAapoU,EAASqoU,GAAY,GAG7BroU,EAAQ5E,IAAM,IAAMitU,EAAW/iU,MAepCmtC,EAAU,CACZy2R,IAAKA,EACL3vK,GAdO,WAKP,IAAK,IAAIp2I,EAAQ3oB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM4qB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFtB,EAAKsB,GAAS5oB,UAAU4oB,GAG1B,OAAO7b,EAAMvH,EAAQioU,WAAYiB,EAAK7kN,EAAWviG,KAMjDkwD,MAAOA,GAEL43P,EAAM5oS,EAAM5D,SAASqV,GAGzB,OAFc,EAEPm3R,S,6fC5OCC,E,iBAAAA,K,oCAAAA,E,wDAAAA,E,8CAAAA,E,kEAAAA,E,sCAAAA,E,0DAAAA,E,gCAAAA,E,oDAAAA,E,oCAAAA,E,wDAAAA,E,oEAAAA,E,wCAAAA,E,6DAAAA,M,KAiBL,IAAMC,EAAb,sCACkB9yU,KAAO6yU,EAAgBE,kBAG5BC,EAGX,WACSC,GACN,yBADMA,cACP,KAJcjzU,KAAO6yU,EAAgBK,4BAO5BC,EAAb,sCACkBnzU,KAAO6yU,EAAgBO,mBAG5BC,EAGX,WACSC,GACN,yBADMA,eACP,KAJctzU,KAAO6yU,EAAgBU,6BAO5BC,EAAb,sCACkBxzU,KAAO6yU,EAAgBY,kBAG5BC,EAGX,WACSC,GACN,yBADMA,cACP,KAJc3zU,KAAO6yU,EAAgBe,4BAO5BC,EAAb,sCACkB7zU,KAAO6yU,EAAgBiB,uBAG5BC,EAGX,WACSn3L,GACN,yBADMA,gBACP,KAJc58I,KAAO6yU,EAAgBmB,iCAO5BC,EAAb,sCACkBj0U,KAAO6yU,EAAgBqB,gBAE5BC,EAGX,WACSC,GACN,yBADMA,YACP,KAJcp0U,KAAO6yU,EAAgBwB,0BAO5BC,EAGX,WACSttS,GAIN,yBAJMA,UAIP,KAPchnC,KAAO6yU,EAAgB0B,kCAU5BC,EAAb,sCACkBx0U,KAAO6yU,EAAgB4B,oBAG5BC,EAGX,WACSx3M,GACN,yBADMA,aACP,KAJcl9H,KAAO6yU,EAAgB8B,+B,6BChGzC15U,EAAQuhN,YAAa,EAErB,IAIgC51M,EAJ5BguU,EAAU15U,EAAQ,KAElB25U,GAE4BjuU,EAFMguU,IAEehuU,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQywH,QAAUmpN,EAASnpN,SAAW,SAAU5+F,GAC9C,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAASvpB,UAAUV,GAEvB,IAAK,IAAIsB,KAAO2oB,EACV7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAC/C0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAK3B,OAAO0oB,I,6BCrBT,giBAAO,IAAM,EAAa,SAAC,GAAsB,SAAU,WAAV,IAEpC,EAAc,SAAC,GAAsB,SAAU,YAAV,IAErC,EAAyB,SAAC,EAAa,GAClD,SAAS,EAAI,SAAS,IAAK,EAAW,KAAK,eAEhC,EAAc,SAAC,GAAgB,SAAuB,EAAvB,IAE/B,EAAe,SAAC,GAAiB,cAAO,aAAP,IAEjC,EAAkB,SAAC,GAAgB,SAAa,SAAS,EAAtB,MAEnC,EAAW,SAAC,EAAe,EAAgB,GAEtD,IADA,IAAI,EAAU,GACL,EAAM,EAAG,EAAM,EAAS,EAAM,OAAQ,EAAM,EAAK,IACxD,GAAW,EAEX,OAAK,EAAU,GAGN,EAAuB,SAClC,EACA,EACA,GAGE,IADF,IAAM,EAAS,EAAI,OACV,EAAM,EAAG,EAAM,EAAQ,IAC9B,EAAO,KAAY,EAAI,WAAW,GAElC,OAAK,GASI,EAAY,SAAC,GACxB,SAAK,QAAQ,2BAA4B,QAAQ,QAAQ,UAAW,KAEzD,EAAsB,CAAC,MAAO,MAAO,MAAO,WAI5C,EAAgB,SAAC,GAAiB,yBAAmB,KAAnB,IAElC,EAAY,SAAC,GAAiB,SAAK,MAAL,mBAE9B,EAAa,SAAC,GACvB,OAAF,EAAK,QAAQ,kBAAmB,MAOrB,EAAc,SAAC,EAAc,GAEtC,IACE,EADE,EAAU,EAAK,WAAW,GAE1B,EAAY,EAAQ,EACtB,EAAS,EAUX,OAPE,GAAS,OACX,GAAW,OACX,EAAK,OAAS,IAEd,EAAW,EAAK,WAAW,KACX,OAAU,GAAY,QAAQ,EAAS,GAElD,CAAC,EAAK,MAAM,EAAO,EAAQ,GAAS,IAGhC,EAAY,SAAC,GAGtB,IAFA,IAAI,EAAkB,GAEf,EAAM,EAAG,EAAM,EAAK,OAAQ,EAAM,GAAO,CAC1C,MAAY,EAAY,EAAM,GAA7B,EAAC,KAAE,EAAI,KACd,EAAM,KAAK,GACX,GAAO,EAGP,OAAK,GAmBI,EAAqB,SAChC,EACA,EACA,EACA,GAgBA,IAdE,IAAI,EAtBoB,SAAC,GAIzB,IAHA,IAAI,EAAmB,EAAoB,KAAK,KAE5C,EAAyB,CAAC,KACvB,EAAM,EAAG,EAAM,EAAW,OAAQ,EAAM,EAAK,IAAO,CACvD,IAAE,EAAY,EAAW,GACzB,KAAc,GAChB,MAAM,IAAI,UAAU,gCAAkC,GAEpD,EAAS,KAAmB,KAAd,EAAmB,IAAmB,EA5DtD,QAAQ,sBAAuB,SA+DjC,IAAI,EAAa,EAAa,KAAK,KACnC,OAAK,IAAI,OAAO,IAAI,EAAgB,YAAY,EAAU,KAAM,MASpD,CAAoB,GAE5B,EAAQ,EAAU,GAAM,MAAM,GAEhC,EAAW,GACX,EAAY,EACV,EAAkB,GAElB,EAAe,WACF,KAAb,GAAiB,EAAM,KAAK,GAChC,EAAW,GACX,EAAY,GAGL,EAAM,EAAG,EAAM,EAAM,OAAQ,EAAM,EAAK,IAAO,CACtD,IAAM,EAAO,EAAM,GACnB,GAAI,EAAc,GAChB,QACK,CACL,IAAM,EAAQ,EAAmB,GAC7B,EAAY,EAAQ,GAAU,IAC5B,GAAM,EACZ,GAAa,GAKjB,OAFE,IAEK,GAIH,EAAY,+EAEL,EAAY,SAAC,GACxB,IAAM,EAAQ,EAAQ,MAAM,GAE5B,GAAK,EAAL,CAIE,MASE,EATE,GACJ,EAQE,EARU,GAAZ,OAAK,MAAG,KAAI,EACZ,EAOE,EAPQ,GAAV,OAAG,MAAG,KAAI,EACV,EAME,EANU,GAAZ,OAAK,MAAG,KAAI,EACZ,EAKE,EALS,GAAX,OAAI,MAAG,KAAI,EACX,EAIE,EAJS,GAAX,OAAI,MAAG,KAAI,EACX,EAGE,EAHc,GAAhB,OAAU,MAAG,IAAG,EAChB,EAEE,EAFgB,GAAlB,OAAW,MAAG,KAAI,EAClB,EACE,EADe,GAUnB,OAJa,IAAI,KACZ,EAAI,IAAI,EAAK,IAAI,EAAG,IAAI,EAAK,IAAI,EAAI,IAAI,GAF7B,MAAf,EAAqB,IAAM,GAAG,EAAa,EAAW,UAL5C,MAAG,KAAI,OAaR,EAAgB,SAAC,EAAe,GAG3C,I,MADI,EADA,EAAW,EAER,EAAW,EAAM,QAAQ,CAC9B,IAAM,EAAQ,EAAM,UAAU,GAAU,MAAM,GAC9C,IAAK,EAAO,MAAO,CAAE,MAAO,EAAW,IAAK,GAC5C,EAAY,EACZ,IAAwB,QAAZ,EAAC,EAAM,aAAK,QAAI,GAAK,EAAM,GAAG,OAE5C,MAAO,CAAE,MAAO,EAAW,IAAK,K,6BCpLlC,yeAEI+7O,EAAQ,SAAe3oQ,GACzB,OAAa,OAANA,QAAoBtE,IAANsE,GAEnByoQ,EAAW,SAAkBzoQ,GAC/B,OAAa,OAANA,QAAoBtE,IAANsE,GAEnB8pB,EAAO,SAAcwsD,GACvB,MAAoB,oBAANA,GAKZnwE,EAAS,SAAgBiH,GAC3B,MAAoB,kBAANA,GAEZ3J,EAAQpC,MAAMC,QACdyC,EAAS,SAAgB2C,GAC3B,OAAOA,IAAQjD,EAAMiD,IAAuB,kBAARA,GAElCk7I,EAAU,SAAiBvsE,GAC7B,OAAOA,GAAKvrD,EAAKurD,EAAEc,OAEjB52E,EAAW,SAAkB8hK,GAC/B,OAAOA,GAAMv3I,EAAKu3I,EAAG1hK,OAASmqB,EAAKu3I,EAAGujG,QAiBpCrwE,EAAU,SAASA,EAAQqgJ,GAC7B,OAAOA,IAAQzuU,EAAOyuU,IAAQ74J,EAAO64J,IAAQ9qT,EAAK8qT,IAAQnxU,EAAMmxU,IAAQA,EAAIznU,MAAMonL,KAEhF3qK,EAAU,SAAiBirT,GAC7B,OAAOA,GAAM/qT,EAAK+qT,EAAGrwT,OAASsF,EAAK+qT,EAAGxrO,QAEpCx/E,EAAiB,SAAwBysD,GAC3C,OAAOxsD,EAAKwsD,IAAMA,EAAEn1E,eAAe,aAEjC46K,EAAS,SAAgBtvJ,GAC3B,OAAOxvB,QAAQwvB,IAA0B,oBAAXntB,QAAyBmtB,EAAIvuB,cAAgBoB,QAAUmtB,IAAQntB,OAAOvB,WAElGyqQ,EAAY,SAAmBqsE,GACjC,OAAOjrT,EAAQirT,IAAOA,EAAGC,MAEvB1qT,EAAS,SAAgBi+O,GAC3B,OAAOA,GAAOA,EAAIH,O,6BC1DpB,+BA8bI/+L,EAAU,CACZD,YA5bgB,SAAqBm0C,EAAMo5I,EAAO16P,EAAOT,GACzD,MAAO,CACLwE,KAAMi1U,eACN9uO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACP16P,MAAOA,GAET+qC,QAASxrC,IAqbX8tE,UAjbc,SAAmBi0C,EAAMo5I,EAAO7nP,EAAMC,GACpD,MAAO,CACL/O,KAAMk1U,aACN/uO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACP7nP,KAAMA,EACNC,GAAIA,KA2aRy6D,SAtaa,SAAkB+zC,EAAMo5I,GACrC,MAAO,CACL32P,KAAMm1U,YACNhvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KAkaXptL,UA7Zc,SAAmBg0C,EAAMo5I,EAAOn7P,GAC9C,MAAO,CACLwE,KAAMo1U,aACNjvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,GAET3vN,QAASxrC,IAuZXiuE,YAnZgB,SAAqB8zC,EAAMo5I,EAAO16P,GAClD,MAAO,CACL+D,KAAMq1U,eACNlvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACP16P,MAAOA,KA8YX0tE,eAzYmB,SAAwB4zC,EAAMo5I,GACjD,MAAO,CACL32P,KAAMs1U,mBACNnvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KAqYX/sL,WAhYe,SAAoB2zC,EAAMo5I,GACzC,MAAO,CACL32P,KAAMu1U,cACNpvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KA4XX9sL,YAvXgB,SAAqB0zC,EAAMo5I,EAAO16P,EAAO8pB,EAAWvqB,GACpE,IAAIwvB,EAAS,CACXhrB,KAAMw1U,eACNrvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACP16P,MAAOA,EACP8pB,UAAWA,IAQf,YAJcnqB,IAAVJ,IACFwvB,EAAOgc,QAAUxrC,GAGZwvB,GAyWP8+C,UAtWc,SAAmByzC,EAAMo5I,EAAO8+E,EAAQC,GACtD,GAAID,IAAWC,EACb,MAAM,IAAIhuU,MAAM,gCAGlB,GAAI+tU,EAAS,GAAKC,EAAS,EACzB,MAAM,IAAIhuU,MAAM,mCAGlB,MAAO,CACL1H,KAAM21U,aACNxvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACP8+E,OAAQA,EACRC,OAAQA,KAwVZ3rQ,aAnViB,SAAsBwzC,EAAMo5I,EAAOn7P,GACpD,MAAO,CACLwE,KAAM41U,gBACNzvO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,GAET3vN,QAASxrC,IA6UXkuE,SAzUa,SAAkB6zC,EAAMo5I,EAAOn7P,GAC5C,MAAO,CACLwE,KAAM61U,WACN1vO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,GAET3vN,QAASxrC,IAmUXyuE,KA/TS,SAAcszC,EAAMo5I,EAAOn7P,EAAO2vE,GAC3C,MAAO,CACLnrE,KAAM81U,OACN3vO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACPxrL,MAAOA,GAETnkC,QAASxrC,IAwTXwuE,OApTW,SAAgBuzC,EAAMo5I,EAAOn7P,EAAO2vE,EAAO4qQ,GACtD,MAAO,CACL/1U,KAAMg2U,SACN7vO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,EACPxrL,MAAOA,EACP4qQ,uBAAwBA,GAE1B/uS,QAASxrC,IA4SX0uE,YA5QgB,SAAqBqzC,EAAM04N,EAAaF,GACxD,IAAK,IAAIlrT,EAAOrnB,UAAU7B,OAAQu0U,EAAS,IAAI30U,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IACpGmrT,EAAOnrT,EAAO,GAAKvnB,UAAUunB,GAG/B,MAAO,CACL/qB,KAAMm2U,eACNhwO,KAAM,CACJoX,KAAMA,EACN04N,YAAaA,EACbF,uBAAwBA,EACxBG,OAAQA,KAkQZ7rQ,YAzSgB,SAAqBkzC,GACrC,MAAO,CACLv9G,KAAMo2U,eACNjwO,KAAM,CACJoX,KAAMA,KAsSVnzC,kBAjSsB,SAA2BmzC,GACjD,MAAO,CACLv9G,KAAMq2U,sBACNlwO,KAAM,CACJoX,KAAMA,KA8RVpzC,gBAzRoB,SAAyBozC,EAAMo5I,GACnD,MAAO,CACL32P,KAAMs2U,oBACNnwO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KAqRXrsL,QAhQY,WACZ,IAAK,IAAIn+C,EAAQ3oB,UAAU7B,OAAQ47G,EAAO,IAAIh8G,MAAM4qB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFmxF,EAAKnxF,GAAS5oB,UAAU4oB,GAG1B,MAAO,CACLpsB,KAAMu2U,UACNpwO,KAAM,CACJoX,KAAMA,KAyPV/yC,MApPU,SAAe+yC,EAAMo5I,GAC/B,MAAO,CACL32P,KAAMw2U,QACNrwO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KAgPXpsL,WA3Oe,SAAoBgzC,EAAMtyG,EAAQwrU,EAAWC,GAU5D,YATkB,IAAdA,IACFA,EAAY,IAGVD,aAAqBv4U,SACvBw4U,EAAYD,EACZA,GAAY,GAGP,CACLz2U,KAAM22U,aACNxwO,KAAMv8D,IAAS,CACb2zE,KAAMA,EACNk5N,UAAWA,GACVC,GACH1vS,QAAS/7B,IA4NXy/D,cAxNkB,SAAuB6yC,EAAMjvG,EAAMtO,GACrD,MAAO,CACLA,KAAM42U,iBACNzwO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS,CACP14B,KAAMA,EACNtO,KAAMA,KAiNVyqE,MA5MU,SAAe8yC,GACzB,MAAO,CACLv9G,KAAM62U,QACN1wO,KAAM,CACJoX,KAAMA,KAyMV3yC,aApMiB,SAAsB2yC,GACvC,IAAK,IAAIjxF,EAAQ9oB,UAAU7B,OAAQq1N,EAAW,IAAIz1N,MAAM+qB,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC5GyqM,EAASzqM,EAAQ,GAAK/oB,UAAU+oB,GAGlC,MAAO,CACLvsB,KAAM82U,gBACN3wO,KAAM,CACJoX,KAAMA,EACNy5G,SAAUA,KA4LdjsJ,qBAvLyB,SAA8BwyC,EAAMo5I,GAC7D,MAAO,CACL32P,KAAM+2U,yBACN5wO,KAAM,CACJoX,KAAMA,EACNo5I,MAAOA,KAmLX3rL,YA9KgB,SAAqBuyC,GACrC,MAAO,CACLv9G,KAAMg3U,eACN7wO,KAAM,CACJoX,KAAMA,KA2KVtyC,oBAtKwB,SAA6BsyC,EAAMsvC,GAC3D,MAAO,CACL7sJ,KAAMi3U,wBACN9wO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS6lH,EACT5+I,SAAU4+I,IAAU3uJ,OAAO0D,KAAKirJ,GAAQlrJ,UAgK1CkpE,WA5Je,SAAoB0yC,EAAMsvC,GACzC,MAAO,CACL7sJ,KAAMk3U,cACN/wO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS6lH,EACT5+I,SAAU4+I,IAAU3uJ,OAAO0D,KAAKirJ,GAAQlrJ,UAsJ1CupE,OAlJW,SAAgBqyC,GAC3B,MAAO,CACLv9G,KAAMm3U,SACNhxO,KAAM,CACJoX,KAAMA,KA+IV5yC,gBA1IoB,SAAyB4yC,GAC7C,IAAK,IAAI0jC,EAAQz9I,UAAU7B,OAAQu0U,EAAS,IAAI30U,MAAM0/I,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1Gg1L,EAAOh1L,EAAQ,GAAK19I,UAAU09I,GAGhC,MAAO,CACLlhJ,KAAMo3U,oBACNjxO,KAAM,CACJoX,KAAMA,EACN24N,OAAQA,GAEVjoU,OAAO,IAgIT68D,mBA5HuB,SAA4ByyC,GACnD,IAAK,IAAI8rJ,EAAQ7lQ,UAAU7B,OAAQu0U,EAAS,IAAI30U,MAAM8nQ,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1G4sE,EAAO5sE,EAAQ,GAAK9lQ,UAAU8lQ,GAGhC,MAAO,CACLtpQ,KAAMq3U,uBACNlxO,KAAM,CACJoX,KAAMA,EACN24N,OAAQA,GAEVjoU,OAAO,IAkHTk9D,MA9GU,SAAeoyC,GACzB,IAAK,IAAI+5N,EAAQ9zU,UAAU7B,OAAQu0U,EAAS,IAAI30U,MAAM+1U,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1GrB,EAAOqB,EAAQ,GAAK/zU,UAAU+zU,GAGhC,MAAO,CACLv3U,KAAMw3U,QACNrxO,KAAM,CACJoX,KAAMA,EACN24N,OAAQA,KAsGZ9qQ,gBAjGoB,SAAyBmyC,EAAMjvG,EAAMg5T,GAKzD,YAJyB,IAArBA,IACFA,GAAmB,GAGd,CACLtnU,KAAMy3U,mBACNtxO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS,CACP14B,KAAMA,EACNg5T,iBAAkBA,KAsFtBj8P,QAjFY,SAAiBkyC,GAC7B,IAAK,IAAIm6N,EAAQl0U,UAAU7B,OAAQu0U,EAAS,IAAI30U,MAAMm2U,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1GzB,EAAOyB,EAAQ,GAAKn0U,UAAUm0U,GAGhC,MAAO,CACL33U,KAAM43U,UACNzxO,KAAM,CACJoX,KAAMA,EACN24N,OAAQA,KAyEZ3qQ,iBApEqB,SAA0BgyC,EAAMs6N,EAAY5pU,GAKjE,YAJmB,IAAf4pU,IACFA,EAAa,IAGR,CACL73U,KAAM83U,qBACN3xO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS,CACP6wS,WAAYA,EACZ5pU,MAAOA,KAyDXq9D,mBApDuB,SAA4BiyC,EAAMw6N,EAAc33E,GAKvE,YAJqB,IAAjB23E,IACFA,EAAe,IAGV,CACL/3U,KAAMg4U,uBACN7xO,KAAM,CACJoX,KAAMA,GAERv2E,QAAS,CACP+wS,aAAcA,EACd33E,QAASA,MA0CA/2L,O,6BCnef,8EA0GImxD,EAAaj2F,IAAM8E,YAAW,SAAoBW,EAAOzuC,GAC3D,IAAI08U,EAAcjuS,EAAMkuS,KACpBA,OAAuB,IAAhBD,GAAiCA,EACxC7xS,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9CkyH,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDG,EAAwB55O,EAAM65O,mBAC9BA,OAA+C,IAA1BD,GAA2CA,EAChEI,EAAch6O,EAAMnuC,KACpBA,OAAuB,IAAhBmoR,EAAyB,SAAWA,EAC3CvjQ,EAAQu8B,YAAyBhT,EAAO,CAAC,OAAQ,WAAY,UAAW,YAAa,QAAS,WAAY,qBAAsB,SAEpI,OAAOzF,IAAMwB,cAAcguF,IAAYnqF,YAAS,CAC9CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAqB,YAAV6sB,GAAuB/sB,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAUiX,GAAYhkC,EAAQgkC,SAAU,CACxIm7N,MAAOn/P,EAAQ,OAAO5tE,OAAOk5H,YAAWzoI,MACxCA,GAAO,CACPgkB,MAAOm5D,EAAQo/P,UACf97U,IAAK08E,EAAQq/P,SACbH,IACFI,cAAc,EACdl0D,aAAcP,EACd7mK,SAAUA,EACVzhH,IAAKA,GACJklB,GAAQ8jB,IAAMwB,cAAc,OAAQ,CACrCmzC,UAAWF,EAAQp4C,OAClBwF,OAgEU20C,iBA7LK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ01G,UAAW,SACX+U,KAAM,WACN7a,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCtpM,QAAS,GACT2rC,aAAc,MACd4C,SAAU,UAEVpkB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5BzuJ,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,mBAAoB,CACvDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,WAEvC,UAAW,CACTvkK,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ/5F,OAAO+3P,OAAQ/nM,EAAM+pC,QAAQ/5F,OAAOkpG,cAExE,uBAAwB,CACtBpP,gBAAiB,gBAGrB,aAAc,CACZA,gBAAiB,cACjB/e,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,WAKhCo7N,UAAW,CACTpwN,YAAa,GACb,cAAe,CACbA,YAAa,IAKjBqwN,QAAS,CACP/2N,aAAc,GACd,cAAe,CACbA,aAAc,IAKlBkxC,aAAc,CACZzsD,MAAO,WAIT0sD,aAAc,CACZ1sD,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEvE,uBAAwB,CACtBpP,gBAAiB,iBAMvB4tC,eAAgB,CACd3sD,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,KAC/B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEzE,uBAAwB,CACtBpP,gBAAiB,iBAMvB9H,SAAU,GAGVwoK,UAAW,CACT5pM,QAAS,EACTqrC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCtkP,MAAO,CACLw6C,MAAO,OACPF,QAAS,OACTnC,WAAY,UACZyC,eAAgB,cAsGY,CAChCltE,KAAM,iBADOysE,CAEZy/C,I,6BCzMY,SAAS+9M,EAAeC,EAAWC,GAE9C,OAAO,WACL,OAAO,M,mgBCsCb,IAAIC,GAAqC75D,IAAUj3E,QDvCxC,WACL,OAAO,OCuCb8wI,EAAoBC,YAA4B95D,IAAUj3E,QAAQ+wI,WDxCvD,WACL,OAAO,OCwCED,QCHAH,OAAe15D,cFtCnB,WACL,OAAO,O,YGIE,SAAS+5D,EAAUh6D,GAE9B,OAAOA,ECJI,SAASi6D,EAAsB/wO,GAQ5C,IAFA,IAAIxG,EAAM,kDAAoDwG,EAErDhlG,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,GAAK,EAGzCw+F,GAAO,WAAaoyG,mBAAmBlwM,UAAUV,IAGnD,MAAO,+BAAiCglG,EAAO,WAAaxG,EAAM,yB,sBCfhEw3O,EAAmB,oDAChB,SAASC,EAAgBp2U,GAC9B,IAAI0rC,EAAQ,GAAGjjC,OAAOzI,GAAI0rC,MAAMyqS,GAEhC,OADWzqS,GAASA,EAAM,IACX,GAQjB,SAAS2qS,EAAyBv/R,GAChC,IAAI2wN,EAAW5mQ,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GACnF,OAAOi2C,EAAUpxB,aAAeoxB,EAAUnrC,MAAQyqU,EAAgBt/R,IAAc2wN,EAGlF,SAAS6uE,EAAeC,EAAWC,EAAWC,GAC5C,IAAIC,EAAeL,EAAyBG,GAC5C,OAAOD,EAAU7wT,cAAiC,KAAjBgxT,EAAsB,GAAGjuU,OAAOguU,EAAa,KAAKhuU,OAAOiuU,EAAc,KAAOD,GAYlG,SAASzwS,EAAe8Q,GACrC,GAAiB,MAAbA,EAAJ,CAIA,GAAyB,kBAAdA,EACT,OAAOA,EAGT,GAAyB,oBAAdA,EACT,OAAOu/R,EAAyBv/R,EAAW,aAG7C,GAA2B,WAAvBY,YAAQZ,GACV,OAAQA,EAAU6/R,UAChB,KAAKC,aACH,OAAON,EAAex/R,EAAWA,EAAUyoF,OAAQ,cAErD,KAAKs3M,OACH,OAAOP,EAAex/R,EAAWA,EAAUz5C,KAAM,QAEnD,QACE,SCzDO,SAASy5U,EAAgBzvS,EAAOniB,EAAU6xT,EAAenwR,EAAUowR,GAE9E,OAAO,KCAI,MAAiB,oBAAVnrT,QAAyBA,OAAO3xB,MAAQA,KAAO2xB,OAAwB,oBAAR0gJ,MAAuBA,KAAKryK,MAAQA,KAAOqyK,KAAOC,SAAS,cAATA,GCAxHyqK,EADD/6D,IAAUC,UAAU,CAACD,IAAU70P,KAAM60P,IAAU56Q,U,6BCD7D,+DAEe,SAAS0iI,EAAWkzM,EAAMC,GAMvC,OAAOv1S,IAAM+B,SAAQ,WACnB,OAAY,MAARuzS,GAAwB,MAARC,EACX,KAGF,SAAUC,GACfrwD,YAAOmwD,EAAME,GACbrwD,YAAOowD,EAAMC,MAEd,CAACF,EAAMC,M,ikBCNAE,E,iBAAAA,K,oDAAAA,E,wCAAAA,E,4CAAAA,E,oCAAAA,E,oDAAAA,E,8CAAAA,E,0CAAAA,E,0DAAAA,E,oDAAAA,E,wDAAAA,E,iEAAAA,E,kEAAAA,E,oEAAAA,E,oFAAAA,E,8EAAAA,E,0DAAAA,E,0EAAAA,E,oEAAAA,E,0DAAAA,E,4DAAAA,E,sFAAAA,E,oFAAAA,E,oDAAAA,E,yCAAAA,M,KAoCL,IAAMC,EAAb,sCACkBj6U,KAAOg6U,EAAkBE,oBAG9BC,EAAb,sCACkBn6U,KAAOg6U,EAAkBI,0BAG9BC,EAKX,aAIG,IAHMrzS,EAGP,uDADI,GACJ,yBAHOA,UAGP,KARchnC,KAAOg6U,EAAkBM,oBAW9BC,EAKX,WACSvzS,GAIN,yBAJMA,UAIP,KATchnC,KAAOg6U,EAAkBQ,sBAY9BC,EAGX,WACSzzS,GAMN,yBANMA,UAMP,KATchnC,KAAOg6U,EAAkBU,kBAY9BC,EAGX,WACS3zS,GAON,yBAPMA,UAOP,KAVchnC,KAAOg6U,EAAkBY,0BAc9BC,EAGX,WACS7zS,GAUN,yBAVMA,UAUP,KAbchnC,KAAOg6U,EAAkBc,qBA+B9BC,EAGX,WACS/zS,GAIN,yBAJMA,UAIP,KAPchnC,KAAOg6U,EAAkBgB,kCAU9BC,EAGX,WACSj0S,GAGN,yBAHMA,UAGP,KANchnC,KAAOg6U,EAAkBkB,0CAS9BC,EAAb,sCACkBn7U,KAAOg6U,EAAkBoB,6BAG9BC,EAGX,WACSr0S,GAON,yBAPMA,UAOP,KAVchnC,KAAOg6U,EAAkBsB,qCAc9BC,EAAb,sCACkBv7U,KAAOg6U,EAAkBwB,6BAG9BC,EAAb,sCACkBz7U,KAAOg6U,EAAkB0B,8BAc9BC,EAGX,WACS30S,GAIN,yBAJMA,UAIP,KAPchnC,KAAOg6U,EAAkB4B,0CAU9BC,EAGX,WACS70S,GACN,yBADMA,UACP,KAJchnC,KAAOg6U,EAAkB8B,2B,6BC3M3C,8CAKa/yM,EAAa,SAAC,GAQpB,IAPLjf,EAOI,EAPJA,SACAvgE,EAMI,EANJA,SACA9e,EAKI,EALJA,SAOA,OAAO,SAACggE,GAAD,OAAoB,WACzB,IAAMsxO,GAAyD,IAAhDxyR,EAAS1lD,IAAI,YAAYyc,QAAQwpG,IACrB,MAARrf,EAAeA,GAAQsxO,GAO9BA,GACVtxS,EACEv+B,eACE,WAAKq9C,EAAS1lD,IAAI,aAAlB,OAAgCimH,GAAhC,OAA2CvgE,EAAS1lD,IAAI,WAAxD,OAAoE0lD,EAAS1lD,IAAI,SAAW60E,QAAQ,wBAAyB,SARjIjuC,EACEv+B,eACE,WAAKq9C,EAAS1lD,IAAI,YAAY60E,QAAQoxC,EAAU,KAAhD,OAAsDvgE,EAAS1lD,IAAI,WAAnE,OAA+E0lD,EAAS1lD,IAAI,SAAW60E,QAAQ,wBAAyB,YAanI,KACbqwD,e,6BC3CF,gEAEe,SAAS9mB,EAA2BitD,EAAMpuK,GACvD,GAAIA,IAA2B,WAAlB,IAAQA,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIqB,UAAU,4DAGtB,OAAO,YAAsB+sK,K,8BCS/B,YAwEA,SAAS8sK,EAAYp1U,GACnB,OAAOA,GAAOA,EAAI/J,MAAQA,KAAO+J,OAAMhL,EAzEzC,sGA6EO,IAAMqgV,EACW,iBAAdC,YAA0BF,EAAYE,aAE5B,iBAAV1tT,QAAsBwtT,EAAYxtT,SAC1B,iBAAR0gJ,MAAoB8sK,EAAY9sK,OACtB,iBAAVF,GAAsBgtK,EAAYhtK,IACzC,WACC,OAAOlvK,KADR,IAGD,GAKK,SAASq8U,IACd,OAAOF,EAcF,SAASG,EAAsB9tU,EAA0C+7T,EAAkBzjU,GAChG,IAAMy1U,EAAOz1U,GAAOq1U,EACdK,EAAcD,EAAIC,WAAaD,EAAIC,YAAc,GAEvD,OADkBA,EAAWhuU,KAAUguU,EAAWhuU,GAAQ+7T,Q,gDC7H5D,IAAMkS,EAAY,CAChBp3S,MAAO,KACP4iE,OAAQ,KACRy0O,iBAAkB,qBAClBp1O,IAAK,IAGMjiE,EAAQ,CACnB39B,IADmB,SACfpD,EAAK5I,GAEP+gV,EAAUn4U,GAAO5I,GAEnBqI,IALmB,SAKfO,GAEF,OAAOm4U,EAAUn4U,IAEnB+gC,MAAOo3S,GAGMp3S,O,iYCZTs3S,EAAOC,EA0BPC,EAAc,SAACljO,GACnB,IAAQl+G,EAAkBk+G,EAAlBl+G,IAAQklB,EAAhB,YAA0Bg5F,EAA1B,GAEA,OACE,cAAC,IAAD,aACEE,WAAW,EACX0nN,SAAU9lU,GACNklB,KAKGm8T,EAAmB,SAAC,GAAD,IAC9B5jQ,EAD8B,EAC9BA,QAEA6jQ,GAH8B,EAE9BC,MAF8B,EAG9BD,UACAE,EAJ8B,EAI9BA,sBAJ8B,OAK1B,SAACC,EAAD,GAAyC,IAwBzC9hQ,EAxBa8iD,EAA2B,EAA3BA,MAAOi/M,EAAoB,EAApBA,cAClBpZ,EAAamZ,EAAStjQ,KACtBsjC,IAAWkhE,qBAAW6+J,IAAyBA,EAAsBlZ,GAQrEnsI,EAAUrpJ,IAAMw1R,EAAWgZ,GAAW7+M,GACtCmmB,EAAQ7nG,IAAMunR,EAAWgZ,GAAWnlJ,GAEpCjhL,EAAWumU,EAAStlJ,QAAQrsL,QAAO,SAAC6xU,GACxC,OAAOA,EAAgB94U,MAAQy4U,KAM3BM,EAAY,SAACxxN,EAAcyxN,EAAoBh5U,GAAnC,OAAmDunH,EACjE,sBAAMzyC,UAAWkkQ,EAAYpkQ,EAAQqkQ,oBAAiBzhV,EAAtD,SAA4E+vH,GAANvnH,GACtE,MAIJ,GAAwB,IAApBqS,EAAS9U,OAAc,CACzB,IAAM27U,EAAgB7mU,EAAS,GACzBw9K,EAAOqpJ,EAAc9hV,MAAMqjD,MAAM,IACjC0+R,EAAeD,EAAc91T,QAAQ1e,KAAI,SAAC7M,GAAD,OAAWA,EAAM,MAC1DuhV,EAAaF,EAAc91T,QAAQ1e,KAAI,SAAC7M,GAAD,OAAWA,EAAM,MACxDwhV,EAAYxpJ,EAAKxoL,QAAO,WAAoCwnK,EAAKh/J,GAAS,IAA/CypU,EAA8C,EAA9CA,SAAUC,EAAoC,EAApCA,SAAUP,EAA0B,EAA1BA,UAC7CxhU,EAAa2hU,EAAaj9T,QAAQrM,GAClC2pU,EAAWJ,EAAWl9T,QAAQrM,GAEpC,OAAoB,IAAhB2H,GACgB,IAAdgiU,EACK,CACLF,SAAS,GAAD,mBACHA,GADG,CAENP,EAAUQ,EAAUP,EAAWO,EAAW1pU,KAE5C0pU,SAAU1qK,EACVmqK,WAAW,GAGR,CAAEM,SAAS,GAAD,mBAAMA,GAAN,CAAgBP,EAAUQ,EAAUP,EAAWO,EAAW1pU,GAAMkpU,EAAUlqK,GAAK,EAAMA,EAAMh/J,KAAO0pU,SAAU,GAAIP,WAAW,IACrH,IAAdQ,EACF,CAAEF,SAAS,GAAD,mBAAMA,GAAN,CAAgBP,EAAUQ,EAAW1qK,EAAKmqK,EAAWO,EAAW1qK,EAAMh/J,KAAO0pU,SAAU,GAAIP,WAAW,GAElH,CAAEM,SAAS,YAAKA,GAAWC,SAAUA,EAAW1qK,EAAKmqK,eAC3D,CAAEM,SAAU,GAAIC,SAAU,GAAIP,WAAW,IAG5CK,EAAUC,SAAV,sBAAyBD,EAAUC,UAAnC,CAA6CD,EAAUL,UAAY,4BAAeK,EAAUE,UAAlB,QAAkCR,EAAUM,EAAUE,UAAU,EAAO,UACjJziQ,EAAW,8BACRuiQ,EAAUC,gBAGbxiQ,EAAW,8BACRipE,EAAMr7I,KAAI,SAAC4/I,EAAMzsJ,GAAP,OAAiBysJ,EAAK00L,UAC/B,wBAA4BhiO,MAAO,CAAEihB,WAAY,QAAjD,SACGqsB,EAAK/8B,MADKh9G,OAAO1S,IAIlB,+BACGysJ,EAAK/8B,MADGh9G,OAAO1S,SAO1B,OACE,cAAC,IAAD,CACEmpH,SAAU63N,EACV7jQ,UAAU,MACV4jC,SAAUA,EAHZ,SAKG9hC,MAKM2iQ,EAA6B,SAAC5qN,EAAU6qN,GAAX,OAA2B,SAAChyS,GACpE,IAAQiyS,EAA6BjyS,EAA7BiyS,eAAgB33S,EAAa0F,EAAb1F,SAKxB,OACE,cAAC,IAAD,yBACEqkE,KAAkB,MAAZrkE,EACN6sF,SAAUA,EAASrrF,QACnBqiF,UAAU,eACV7O,MAAO,CAAChgC,MAAO,IAAK0lD,OAAQ,OACxBg9M,GALN,aAOE,cAAC,IAAD,2BAAWC,GAAX,IAA2BC,QAAQ,EAAMx4L,UAAU,KAAKpqC,MAAO,CAC7Dw7J,UAAW,IACXywC,UAAW,QAFb,SAIGjhR,UAMH63S,EAAqB,SAACpa,GAC1B,OAAOA,GAGHqa,EAAiB,SAACC,EAAMrjS,EAAMt/C,GAGlC,OAAoB,IAFAA,EAAMmG,OAGjBm5C,EAGFqjS,EAAKpgJ,OAAOviM,IAiDfkjH,E,4MAEG53E,MAAgC,CACrCtrC,MAAO,KACPs/C,KAAM,GACNypD,QAAS,KACT65O,wBAAwB,G,EAGnBnrN,SAAW1uF,c,EAEX85S,qBAAuB,SAAC7iV,GAC7B,EAAKknH,SAAS,CACZ07N,wBAAwB,K,EAMrB5/N,wBAA0B,WAAiB,IAAhBhjH,EAAe,uDAAP,GACxC,OAAOA,EAAMmG,OAAS,G,EAKjB28U,gCAAkC,SAACH,EAAMrjS,GAAP,OAAgB,YAAgB,IAAbt/C,EAAY,EAAZA,MAG1D,GAFA,EAAK6qI,eAEA7qI,GAA0B,IAAjBA,EAAMmG,OAClB,EAAK+gH,SAAS,CACZ5nE,KAAMojS,EAAeC,EAAMrjS,EAAMt/C,SAE9B,CACL,IAAM+oG,EAAU5rD,YAAW,WACzB,EAAK+pE,SAAS,CACZ5nE,KAAMojS,EAAeC,EAAMrjS,EAAMt/C,GAAOoU,MAAM,EAAG,QAElD,KACH,EAAK8yG,SAAS,CACZne,e,EAKCg6O,gCAAkC,kBAAM,WAC7C,EAAK77N,SAAS,CACZ5nE,KAAM,O,EAIH8lN,aAAe,gBACpBtlJ,EADoB,EACpBA,SACAgD,EAFoB,EAEpBA,WACAkgO,EAHoB,EAGpBA,qBACAC,EAJoB,EAIpBA,qBACA3B,EALoB,EAKpBA,MACAD,EANoB,EAMpBA,SACAE,EAPoB,EAOpBA,sBAPoB,OAQhB,SAAC91M,GAAyD,IAAD,yDAAR,GAAvCt3H,EAA+C,EAA/CA,SACd,EAAK02H,eACL,IAAM3sD,EAAQ/pE,GAAYA,EAAS+pE,MAAS/pE,EAE5C,GAAa,MAATs3H,GAAyB,MAARvtD,IAKD,kBAATA,IAAqBwkG,qBAAW6+J,KAA0BA,EAAsBrjQ,IAA3F,CAGA,IAAI6oC,EACA/gG,EAQJ,GAHE+gG,EAHU,MAAR7oC,GAAkC,MAAlBA,EAAKmjQ,IAAsB,EAAK7yS,MAAM00S,WAG3ChlQ,EAFAA,EAAKmjQ,GAKhBv+N,EACF98F,EAAc+gG,OAKd,GAHA,EAAKG,SAAS,CACZlnH,MAAO+mH,IAEG,MAAR7oC,GAA+B,MAAfA,EAAKojQ,GACvBt7T,EAAck4D,EAAKojQ,OACd,CAGL,IAAM6B,EAAYF,EAAuBA,EAAqBl8N,QAAc3mH,EAC5E4lB,EAA4B,MAAbm9T,GAAqBzgK,qBAAW6+J,IAA0BA,EAAsB4B,GAC3F,KACCH,EAAqBj8N,IAAe,KAI7C,IAAI/mH,EAAQk+E,EACR,EAAK1vC,MAAM00S,YAA8B,kBAAThlQ,GAAqBl4D,IACvDhmB,EAAQ,CAACulC,GAAIvf,EAAahmB,MAAOk+E,IAGnC4hC,EAAS,EAAKtxE,MAAM00S,WAAaljV,EAAQgmB,EAAaylH,M,EAGjD27I,WAAa,gBAClBp9I,EADkB,EAClBA,OACAlnB,EAFkB,EAElBA,WAFkB,EAGlBkgO,qBAHkB,EAIlB1B,MAJkB,EAKlBD,SALkB,OAMd,WACJ,EAAKx2M,eACD/nB,EACFknB,EAAM,WAAN,aAEA,EAAK9iB,SAAS,CACZlnH,MAAO,S,EAKN6qI,aAAe,WACpB,IACE9hC,EACE,EAAKz9D,MADPy9D,QAEa,MAAXA,IACF8hC,aAAa9hC,GACbA,EAAU,O,4CAId,WACE,MAiCIzkG,KAAKkqC,MAhCPgvC,EADF,EACEA,QACAurC,EAFF,EAEEA,MAFF,IAGEpe,KACEl4F,GAJJ,aASM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,EACTmnR,YAAQnnR,EACRgjV,aAAShjV,GAdb,GAIIqS,MACAkyP,EALJ,EAKIA,QACAC,EANJ,EAMIA,QAUFx/N,GAhBF,EAOImiP,OAPJ,EAQI67D,QARJ,EAgBEh+S,OAhBF,IAiBE1lC,eAjBF,aAkBE2jV,iCAlBF,aAmBEplO,kBAnBF,MAmBe,GAnBf,MAoBE4E,iBApBF,gBA6BM,GA7BN,GAqBIygO,mCArBJ,aAsBIxgO,kBAtBJ,aAuBIw+N,aAvBJ,MAuBY,KAvBZ,MAwBID,gBAxBJ,MAwBe,QAxBf,MAyBI/hS,YAzBJ,MAyBW,GAzBX,MA0BIyjE,yBA1BJ,MA0BwB,SAAC/iH,GAAD,+BAA6BA,IA1BrD,EA2BIuhV,EA3BJ,EA2BIA,sBACGgC,EA5BP,qBA+BErlO,wBA/BF,MA+BqB,GA/BrB,MAgCEokO,mBAhCF,MAgCgB,GAhChB,EAoCoC,MAA/BrkO,EAAmB6B,WACrB7B,EAAmB6B,SAAW,cAGjC,IAAMklJ,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAEwB,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzFmjN,EAAgBnjN,cAGrBmjN,EAAgBhlQ,OAAS0D,sBAAYshQ,EAAgBhlQ,SACvDglQ,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAM6iB,QAGhD,IAAMmgU,EAAuB,GACvBQ,EAAqB,GACrBP,GAAuB,GA8B7B,GA7BA3jS,EAAKtuC,SAAQ,SAACq3T,GACZ,IAAMob,EAAkBpb,EAAWgZ,GAC7BqC,EAAerb,EAAWiZ,GAChC0B,EAAqBS,GAAmBC,EACxCF,EAAmBE,GAAgBD,EACnCR,GAAqBQ,GAAmBpb,KAGV,MAA5BrjE,EAAgBllJ,WAClBklJ,EAAgBllJ,SAAWx7G,KAAK8gQ,aAAa,CAC3CtlJ,SAAUklJ,EAAgBllJ,SAC1BgD,aACAkgO,uBACAC,wBACA3B,QACAD,WACAE,2BAG0B,MAA1Bv8E,EAAgBh7H,SAClBg7H,EAAgBh7H,OAAS1lI,KAAK8iR,WAAW,CACvCp9I,OAAQg7H,EAAgBh7H,OACxBlnB,aACAkgO,uBACA1B,QACAD,cAIAv+N,EAEFkiJ,EAAgBhlQ,MAAhB,UAA2BglQ,EAAgBhlQ,OAAS,SAC/C,GAAwB,MAApBsE,KAAKgnC,MAAMtrC,MACpBglQ,EAAgBhlQ,MAAQsE,KAAKgnC,MAAMtrC,WAC9B,GAA6B,MAAzBglQ,EAAgBhlQ,OAA2C,KAA1BglQ,EAAgBhlQ,MAAc,CACxE,IAAMA,GAAQglQ,EAAgBhlQ,MAC1B2jV,GAAgBH,EAAmBl/U,KAAKkqC,MAAM00S,WAAX,OAAwBljV,SAAxB,IAAwBA,QAAxB,EAAwBA,GAAOulC,GAAKvlC,IAEtD,MAAjB2jV,KACFA,GAAgBjhK,qBAAW3/D,GAAqBA,EAAkB/iH,IAASA,IAE7EglQ,EAAgBhlQ,MAAQ2jV,IAAiB,GAG3C,IAWMhB,GAAO,IAAI1B,EAAK3hS,EAXF,CAClBskS,gBAAgB,EAChBx9U,KAAM,CAAC,CACL0M,KAAMwuU,EACNuC,OAAQ,IACP,CACD/wU,KAAMuuU,EACNwC,OAAQ,OAKNC,GAAmBC,EACnBz8D,GAAY3lR,QAAQgjQ,IAAYlyP,GAASmyP,IAC/C,OACE,eAAC,IAAD,yBAAanyP,MAAO60Q,IAAeppK,GAAnC,IAAqD,mBAAiB,cAAtE,UACI94E,GAAS,cAAC,IAAD,CAAYi0R,QAAQ,cAApB,SAAmC35T,EAAO,UAAM0lC,EAAN,MAAkBA,IACvE,cAAC0+S,GAAD,aACEtkQ,MAAO,CACL1B,UAAWulQ,EAA4B7lQ,EAAQM,UAAY,GAC3DkmQ,yBAA0BxmQ,EAAQwmQ,yBAClCC,gBAAiBzmQ,EAAQymQ,gBACzB5b,WAAY7qP,EAAQ6qP,YAEtB6b,qBAAsB/C,EACtBgD,YAAa7/U,KAAKgnC,MAAMgU,KACxB0jE,wBAAyB1+G,KAAK0+G,wBAC9BohO,4BAA6B9/U,KAAKw+U,gCAAgCH,GAAMrjS,EAAKhyC,KAAI,SAAC4wE,GAChF,MAAO,CACLA,OACAg+G,QAAS,QAGb2mJ,qBAAsBv+U,KAAKu+U,qBAC3BwB,4BAA6B//U,KAAKy+U,kCAClCV,2BAA4BA,EAA2B/9U,KAAKmzH,SAAU6qN,GACtEG,mBAAoBA,EACpBrB,iBAAkBA,EAAiB,CACjC5jQ,UACA8jQ,QACAD,WACAE,0BAEF+B,4BAA6BA,EAC7BrlO,WAAU,eACL+mJ,IAEDu+E,IAEN,qBAAK3jO,MAAO,CAAChgC,MAAO,QAAS7/E,IAAKuE,KAAKmzH,WACvC,cAAC,IAAD,CACElyF,GAAG,cACH9yB,MAAO60Q,GAFT,SAIGA,KAAc70Q,GAASmyP,a,GApS8B77N,aAsUjDw2C,iBA3BA,SAACC,GAAD,MAAwB,CACrC1B,UAAW,CACT6C,SAAU,EACV4gC,SAAU,WACVX,UAA6B,EAAlBphC,EAAMZ,WAEnBolQ,yBAA0B,CACxBziO,SAAU,WACVX,UAAWphC,EAAMZ,UACjB+4C,aAAgC,EAAlBn4C,EAAMZ,UACpB//D,KAAM,EACNC,MAAO,EACPwmH,OAAQ,GAEV+iM,WAAY,CACV3oP,QAAS,SAEXukQ,gBAAiB,CACfpkQ,OAAQ,EACRO,QAAS,EACTkkQ,cAAe,QAEjBzC,eAAgB,CACdt3O,MAAO/qB,EAAM+pC,QAAQE,QAAQ,SAIlBlqC,CAAmB2jC,I,kGC/hBbuyG,E,kDAEnB,WAAmBp5K,GAA+B,IAAD,8BAC/C,gBAFK9W,QAC0C,EAE/C7iC,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF2B,E,iBAFhBk5K,I,6BCFpB,SAASgvH,EAAuBC,EAAShnD,GAKtD,OAJKA,IACHA,EAAMgnD,EAAQpwU,MAAM,IAGf1R,OAAO+hV,OAAO/hV,OAAO+uB,iBAAiB+yT,EAAS,CACpDhnD,IAAK,CACHx9R,MAAO0C,OAAO+hV,OAAOjnD,OAP3B,mC,6BCAA,+CACe,SAASrhN,EAAUC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI11E,UAAU,sDAGtBy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CACrEG,YAAa,CACX5C,MAAOo8E,EACP9vE,UAAU,EACVD,cAAc,KAGdgwE,GAAY,YAAeD,EAAUC,K,6BCb5B,SAASruC,EAA8Bzc,EAAQu4K,GAC5D,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IAEI3oB,EAAKtB,EAFLgqB,EAAS,GACTgvP,EAAa59Q,OAAO0D,KAAKmrB,GAG7B,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IACjCsB,EAAM03Q,EAAWh5Q,GACbwiM,EAAShlL,QAAQlc,IAAQ,IAC7B0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAGvB,OAAO0oB,EAZT,mC,mECoBY8nS,E,wDAAAA,K,YAAAA,E,YAAAA,E,4BAAAA,E,0BAAAA,E,0BAAAA,E,2CAAAA,M,KAwFGf,IA/EO,WAAiE,IAAhEqsB,EAA+D,uDAA1C,GAAIC,EAAsC,uDAAxBnnT,sBACtD+uE,EAASxjE,aAAiBq3O,KAEhC,EAAwBr3O,WAAqB,MAA7C,mBAAOgvL,EAAP,KAAa6gG,EAAb,KACA,EAAwC7vR,WAAmC,MAA3E,mBAAOwvR,EAAP,KAAqBqsB,EAArB,KACA,EAAkD77S,WAAuB,MAAzE,mBAAOyvR,EAAP,KAA0BqsB,EAA1B,KACA,EAAsC97S,YAAe,GAArD,mBAAO0vR,EAAP,KAAoBqsB,EAApB,KACA,EAAkC/7S,WAAkC,MAApE,mBAAO2vR,EAAP,KAAkBC,EAAlB,KAEA5vR,aAAgB,WACdg8S,MACC,CAAChtH,IAEJ,IAAMgtH,EAAa,WACjB,IAAMC,EAAgBz4O,EAAOJ,QAAQ,CACnCvB,QAAS,OACTC,SAAU,aACVo6O,SAAS,EACT93N,WAAW,EACXC,WAAW,IAKb,GAFAurM,EAAa,MAER5gG,EAAL,CAIA,GAAI2sH,EAAmBv+U,SAAY,IAAIi5C,OAAO,IAAMslS,EAAmB3+T,KAAK,KAAKm3D,QAAQ,MAAO,OAAS,KAAM,KAAM79B,KAAK04K,EAAKjlN,MAC7H,OAAO6lT,EAAaS,EAAW50T,MAGjC,GAAIuzN,EAAK13N,KAAOskV,EACd,OAAOhsB,EAAaS,EAAW/4T,MAGjC,IAAM6kV,EAAM,IAAIrsI,eACVv5J,EAAO,IAAI6lS,SAEjB7lS,EAAKy0G,OAAO,OAAQgkE,GACpBz4K,EAAKy0G,OAAO,OAAQ,QAEpBmxL,EAAIj2O,KAAK,OAAQ+1O,GAEjBE,EAAIE,OAAO93O,iBAAiB,YAAY,SAAC5gG,GACvC,IAAM24U,EAAUhkV,KAAKo/E,MAAO/zE,EAAE0kJ,OAAS1kJ,EAAE+xP,MAAS,KAClDomF,EAAqBQ,EAAQ3mF,QAAQ,OAGvCwmF,EAAII,YAAc,kBAAMR,GAAe,IAEvCI,EAAI53O,iBAAiB,WAAW,SAAC5gG,GAC/Bo4U,GAAe,GACf,MAA2BS,YAAmBL,GAAtC15S,EAAR,EAAQA,QAAS/4B,EAAjB,EAAiBA,MAEjB,GAAIA,EAEF,OADA6Z,QAAQ7Z,MAAM,uBAAwBA,GAC/BkmT,EAAaS,EAAWosB,cAGjC,IAAMC,EAA+B/3T,iBAAO8d,EAAQusL,KAAK91H,MAAM,IAC/D2iP,EAAgBa,MAGlBP,EAAIr6L,KAAKvrG,KAGX,MAAO,CACLg5Q,UAAW,CACTC,eACAC,oBACAC,cACAC,aAEFC,eACAC,a,6BCxGJ,wEAoBI50Q,EApBJ,uBAsBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,wDAAkH,CAChH7Y,UAGGp0B,kBAGIo3C,EAAmB,kBAAMnX,YACpC8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,e,6fCvBpDq9U,E,iCAAAA,K,gCAAAA,E,wCAAAA,E,oCAAAA,E,4CAAAA,E,kDAAAA,E,kDAAAA,E,oDAAAA,E,oEAAAA,E,wDAAAA,E,kEAAAA,E,0CAAAA,E,oFAAAA,E,wCAAAA,E,yEAAAA,M,KAmBL,IAAMC,EAAb,sCACkBnhV,KAAOkhV,EAAqBE,gBAEjCC,EAEX,WACSr6S,GAGN,yBAHMA,UAGP,KALchnC,KAAOkhV,EAAqBI,kBAmBjCC,EAEX,WACSv6S,GAGN,yBAHMA,UAGP,KALchnC,KAAOkhV,EAAqBM,sBASjCC,EAEX,WACSz6S,GAGN,yBAHMA,UAGP,KALchnC,KAAOkhV,EAAqBQ,yBAQjCC,EAEX,WACS36S,GAIN,yBAJMA,UAIP,KANchnC,KAAOkhV,EAAqBU,0BASjCC,EAEX,WACS76S,GAGN,yBAHMA,UAGP,KALchnC,KAAOkhV,EAAqBY,yBAkBjCC,EAEX,WACS/6S,GAMN,yBANMA,UAMP,KARchnC,KAAOkhV,EAAqBc,kCAWjCC,EAAb,kDAEE,WACSj7S,GAIN,IAAD,8BACA,cAAMA,IALCA,UAIP,EANchnC,KAAOkhV,EAAqBgB,2BAM1C,EAPJ,WApBE,WACSl7S,GAIN,yBAJMA,UAIP,KANchnC,KAAOkhV,EAAqBgB,8BAiCjCC,EAEX,WACSn7S,GAIN,yBAJMA,UAIP,KANchnC,KAAOkhV,EAAqBkB,iCASjCC,EAEX,WACSr7S,GAON,yBAPMA,UAOP,KATchnC,KAAOkhV,EAAqBoB,qBAYjCC,EAEX,WACSv7S,GAIN,yBAJMA,UAIP,KANchnC,KAAOkhV,EAAqBsB,0CASjCC,EAAb,sCACkBziV,KAAOkhV,EAAqBwB,oBAGjCC,EAEX,WACS37S,GACN,yBADMA,UACP,KAHchnC,KAAOkhV,EAAqB0B,qC,0EC9J9C,cAgBI,SAAF,EAAY,GAAR,IAAJ,EACE,cAAO,K,OACH,EAAC,MAAQ,E,EA4DjB,OA9E2B,iBAqBvBC,EAAa5kV,UAAU,QAAzB,WAWM,IATA,IAAE,EAAM,KAAK,OAAS,KAAK,MAAM,OAAS,IAAM,EAAI,IAAM,IACxD,EAAY,EAAI,OAEhB,EAAQ,IAAI,WAAW,EAAI,OAAS,GAEtC,EAAY,EACZ,EAAc,EAGX,EAAY,GAAW,CAC5B,IAAM,EAAO,SAAS,EAAI,UAAU,EAAW,EAAY,GAAI,IAC/D,EAAM,GAAe,EAErB,GAAa,EACb,GAAe,EAGjB,OAAO,GAGP,EAAF,gCACM,IAAE,EAAQ,KAAK,UACnB,OAAI,YAAY,GAAe,YAAY,GACpC,YAAqB,IAG5B,EAAF,gCACM,IAAE,EAAO,KAAK,aACZ,EAAO,YAAU,GACnB,IAAC,EAAM,MAAM,IAAI,IAA0B,GAC3C,OAAG,GAGT,gCACE,OAAO,KAAK,OAGd,6BACE,OAAO,EAAa,GAAG,KAAK,QAG9B,gCACE,MAAO,IAAI,KAAK,MAAK,KAGvB,mCACE,OAAO,KAAK,MAAM,OAAS,GAG7B,mCAAc,EAAoB,GAIhC,OAHA,EAAO,KAAY,IAAU,SAC7B,GAAU,YAAqB,KAAK,MAAO,EAAQ,GACnD,EAAO,KAAY,IAAU,YACtB,KAAK,MAAM,OAAS,GA3EtB,KAAK,SAAC,GAAkB,WAAI,EAAJ,IAExB,WAAW,SAAC,GAIb,IAHA,IAAE,EAAU,YAAY,GAExB,EAAM,GACD,EAAM,EAAG,EAAM,EAAQ,OAAQ,EAAM,EAAK,IAC3C,GAAC,YAAuB,EAAQ,GAAM,GAG1C,OAAG,IAAI,EAAa,IAmE5B,EA9EA,CAA2B,KAgFZ,O,6BC7FA,SAAS6kV,EAA0Bl8U,GAChD,GAAW,MAAPA,EAAa,MAAM,IAAIzE,UAAU,gCADvC,mC,uQCkCa4gV,EAAyB,SAAC/nQ,GACrC,MAAO,CACLqsC,QAAS,SAAC8mI,EAAMrnN,GAAP,mBAAC,eACLqnN,GADI,IAEP1mI,YAAY,YACZF,aAAc,IACdI,WAAW7gF,EAAM+uF,UAAY,GAC7B2L,YAAaxmD,EAAM82C,WAAW2P,UAAU17B,MACxC,UAAW,CACTy7B,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,SAGvC4gT,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnB8C,eAAgB,SAAAq7N,GAAc,kCACzBA,GADyB,IAE5BrnQ,QAAS,SA4IAmlD,IAtH4C,SAAC/2F,GAC1D,IArDoBsxE,EAsDlBiJ,EAiBEv6E,EAjBFu6E,MADF,EAkBIv6E,EAhBFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAOEoJ,EAPFpJ,MACAsiT,EAMEl5S,EANFk5S,WAZF,GAkBIl5S,EALF8gF,YAKE9gF,EAJFyvE,mBAdF,MAce,GAdf,IAkBIzvE,EAHF0vE,wBAfF,MAeqB,GAfrB,IAkBI1vE,EAFF2iF,kBAhBF,SAiBKvoG,EAjBL,YAkBI4lB,EAlBJ,GAoBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAEwB,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,OAA2C,KAA1BglQ,EAAgBhlQ,MAAeglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzHmjN,EAAgBnjN,cAEO,MAA5BmjN,EAAgBllJ,WAClBklJ,EAAgBllJ,UAvFEA,EAuFsBklJ,EAAgBllJ,SAvFzB,WACjCA,EAAQ,WAAR,iBA6FKklJ,EAAgB2iF,oBAAsB3iF,EAAgBh7H,OAI3D,IAyCM49M,EAAgBxiT,GAAS4/N,EAAgB5/N,MACzCyiT,EAAqBH,GAAc,GACnCI,EAAW/hV,MAAMC,QAAQg/P,EAAgBhlQ,OAASglQ,EAAgBhlQ,MAAMmG,OAAS,IAAM6+P,EAAgBhlQ,MAE7G,OACE,eAAC,IAAD,yBAAayS,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UAEI0pO,EACE,cAAC,IAAD,CACE/qD,OAAQirD,EACRzuB,QAAQ,cACRz5M,MAAK,eACAioO,GAJP,SAOGD,IAED,KAEN,cAAC,IAAD,mDA5DsB,IA8DhB5iF,GACAp8O,GAHN,IAIE0mG,YAAa01I,EAAgB11I,aAAe01I,EAAgBtlQ,QAA/C,UAA4DslQ,EAAgB11I,YAA5E,MAA8F01I,EAAgBtlQ,QAAU,cAAgBslQ,EAAgB11I,YACrK0a,OAAQ,SAACt9H,GAAD,OAAOs4P,EAAgB+iF,iBAAmBr7U,EAAEg5H,iBAAmB3c,EAAMihB,QAAUjhB,EAAMihB,OAAOjhB,EAAM/oH,WAE3GmxH,GAAc,cAAC,IAAD,CAAgB5rF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,W,yKCrLhEojF,E,iBAAAA,K,sCAAAA,E,0BAAAA,E,eAAAA,M,KAML,IAAMz8O,EAGX,WACS//D,GAQN,yBARMA,UAQP,KAXchnC,KAAOwjV,EAAiBC,OAe7Bv9O,EAGX,WACSl/D,GAON,yBAPMA,UAOP,KAVchnC,KAAOwjV,EAAiBE,aAa7BC,EAGX,WACS38S,GACN,yBADMA,UACP,KAJchnC,KAAOwjV,EAAiBI,oB,6OC7B9BC,E,iBAAAA,K,gDAAAA,E,0CAAAA,E,wCAAAA,E,4CAAAA,E,gEAAAA,E,4DAAAA,E,wCAAAA,E,4BAAAA,E,wCAAAA,E,0DAAAA,E,8CAAAA,E,4CAAAA,E,+CAAAA,M,KAgBL,IAmCMC,EAAb,sCACkB9jV,KAAO6jV,EAAmBE,sBAG/BC,EAGX,WACSh9S,GAKN,yBALMA,UAKP,KARchnC,KAAO6jV,EAAmBI,gCAW/BC,EAGX,WACSl9S,GAIN,yBAJMA,UAIP,KAPchnC,KAAO6jV,EAAmBM,8BAU/BC,EAGX,WACSp9S,GAGN,yBAHMA,UAGP,KANchnC,KAAO6jV,EAAmBQ,qBAS/BC,EAGX,WACSt9S,GACN,yBADMA,UACP,KAJchnC,KAAO6jV,EAAmBU,qB,6qBCrG7B,SAASC,EAAeh6T,GACrC,IAAIpmB,ECFS,SAAsBmgH,EAAOkgO,GAC1C,GAAuB,WAAnB,IAAQlgO,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAImgO,EAAOngO,EAAM/kH,OAAOmlV,aAExB,QAAa/oV,IAAT8oV,EAAoB,CACtB,IAAI9iM,EAAM8iM,EAAK5jV,KAAKyjH,EAAOkgO,GAAQ,WACnC,GAAqB,WAAjB,IAAQ7iM,GAAmB,OAAOA,EACtC,MAAM,IAAIz/I,UAAU,gDAGtB,OAAiB,WAATsiV,EAAoB91U,OAASlN,QAAQ8iH,GDRnC,CAAY/5F,EAAK,UAC3B,MAAwB,WAAjB,YAAQpmB,GAAoBA,EAAMuK,OAAOvK,G,qCEG5CwgV,EAAoC,CACxC1pQ,QAAS,Q,SAGK2pQ,KAAW,M,EAAA,GAAKrpV,E,EAAAA,MAC9B,OACE,yBAAKulC,GAAIA,EAAIq6E,MAAOwpO,GADtB,G,SCJcE,KAAW,M,EAAA,K,EAAA,e,EAAmBC,oBAAnB,MAAkC,YAAlC,EAiBzB,OACE,yBACEhkT,GAAIA,EACJq6E,MAlBwC,CAC1C2B,SAD0C,QAE1CqX,IAF0C,EAG1C/5G,KAH0C,EAI1C+gE,MAJ0C,EAK1Ci2C,OAL0C,EAM1Ch2C,QAN0C,EAO1Cs/C,OAP0C,EAQ1C/+C,QAR0C,EAS1CuuC,SAT0C,SAU1CmvJ,KAV0C,gBAW1CjC,SAX0C,cAY1C9gJ,WAAY,UAOV/0E,KAAK,S,YACMujS,E,kBALf,G,ICtBF,E,oLCDaC,EAAqD,CAChE3mD,UAAW,iNAOA4mD,EAAsC,CACjD5xC,YADiD,SACtC,GACT,iDAEF6xC,WAJiD,SAIvC,KACR,SACE,yBAAyBnkT,EAAzB,iDAGF,oEAEF8xQ,UAXiD,SAWxC,KACP,SACE,yBAAyB9xQ,EAAzB,+CAGF,6CAEFokT,aAlBiD,SAkBrC,GACV,6ED1BJ,SAAYC,GACVA,wBACAA,sBACAA,oBACAA,0BACAA,sBACAA,wCACAA,8CACAA,4CARF,CAAYA,MAAZ,KEHO,IAGMC,EAAoB1hV,YAAD,OAC9B2hV,EAAc3hV,GAAO,qBAAoBnI,EADpC,MAMP,SAAgB8pV,EACd3hV,EACA0I,GAEA,OAAI1I,SACF,SAMF,IAHA,IAAIktR,EAAUltR,EAAd,GACI1H,EAAJ,EAES6G,EAAT,EAAgBA,EAAIa,EAApB,OAAkCb,IAC5BuJ,EAAW1I,EAAD,GAAd,KACE1H,IACA40R,EAAUltR,EAAVktR,IAIJ,S,SC3BctiI,K,SCAAolC,EAAQ5yJ,EAAY28S,GAClC,EAAO,GAEP,OAFA,eAAO,GAAP,QCIK,IAAMh3S,EAAUlC,wBAAoC,CACzD+gT,eADyD,KAEzDxiE,OAFyD,KAGzDyiE,WAHyD,KAIzDC,eAJyD,KAKzDC,qBALyD,KAMzDC,WANyD,GAOzDC,kBAAmB,CACjBvnD,UAAW,IAEbwnD,kBAVyD,KAWzDp7S,SAXyD,EAYzDq7S,eAZyD,GAazDC,eAAgB,IAbyC,IAczDC,oBAdyD,GAezD7wJ,KAfyD,KAgBzD8wJ,YAAa,CACXC,QAAS,CACPt+S,QAAS,MAEX6tH,KAJW,KAKXi0H,OAAQn7H,GAEV43L,oBAvByD,GAwBzDC,wBAxByD,GAyBzDC,iBAzByD,EA0BzDC,WA1ByD,KA2BzDC,sBAAsB,IC9BXC,EAAkCtoV,OAAA,OAAc,CAC3DyZ,EAD2D,EAE3D2zB,EAAG,ICCL,SAAgBm7S,EAAgBnuG,EAAiBC,GAC/C,OAAO17O,UAAUA,SAASy7O,IAAOC,EAAhB17O,KAA2BA,SAASy7O,IAAOC,EAAhB17O,EAA5C,ICAF,SAAgB6pV,EAAoBz/M,GAClC,G,SCP2BA,G,MAC3B,OAAO,SAAAz4G,aAAA,iBAAsBy4G,aAA7B,WDMI0/M,CAAJ,GAAyB,CACvB,GAAI1/M,WAAiBA,UAArB,OAA2C,CACzC,MAAiCA,UAAjC,GAEA,MAAO,CACLtvH,EAHF,EAAOwnS,QAIL7zQ,EAJF,EAAmB8zQ,SAMd,GAAIn4K,kBAAwBA,iBAA5B,OAAyD,CAC9D,MAAiCA,iBAAjC,GAEA,MAAO,CACLtvH,EAHF,EAAOwnS,QAIL7zQ,EAJF,EAAmB8zQ,UASvB,O,SEzB2Bn4K,G,MAC3B,OACG,SAAAz4G,aAAA,iBAAsBy4G,aAAvB,YACAA,gBAFF,SFwBI2/M,CAAJ,GACS,CACLjvU,EAAGsvH,EADE,QAEL37F,EAAG27F,EAAMm4K,SAIN,CACLznS,EADK,EAEL2zB,EAAG,G,SGhCSu7S,EACd5/M,EACAwuB,GAEA,GAAIxuB,aAAJ,cACE,YAGF,IAAM6/M,EAAmBJ,EAAzB,GACM3hN,EAAkB,CACtBptH,GAAKmvU,IAAqBrxL,EAAtB,MAAmCA,EAApC,MADmB,IAEtBnqH,GAAKw7S,IAAqBrxL,EAAtB,KAAkCA,EAAnC,OAAkD,KAGvD,gBAAU1wB,EAAgBptH,EAA1B,aAAgCotH,EAAhC,OCRF,SAASgiN,EAAkB,GAA3B,IAEE1sU,EAFF,uDAESo7I,EAFT,WAGErhC,EAHF,uDAGQqhC,EAHR,UAKE,MAAO,CACL99I,EAAG0C,EADE,GACKo7I,QACVnqH,EAAG8oF,EAAoB,GAAdqhC,UAQb,IAAauxL,EAAoC,SAACC,EAAOxxL,GACvD,IAAMyxL,EAAaH,EAAkBtxL,EAAMA,EAAP,KAAkBA,EAAtD,KACM0xL,EAAYF,OAAU,+CAC1BR,EAAgBM,EADU,MAA5B,MAIMK,EAAgB/B,EAAtB,GAEA,OAAO4B,KAAuBA,KAAvBA,GAAP,M,SC7BcI,EAAuBC,GACrC,OAAO,SAAwB,GAAxB,kFAIL,OAAOC,EAAA,QACL,iCAAC,eAAqB,GAAtB,IAEEnzN,IAAK4kB,MAAUsuM,EAAWE,EAFN,EAGpBnzN,OAAQ2kB,SAAasuM,EAAWE,EAHZ,EAIpBntU,KAAM2+H,OAAWsuM,EAAWE,EAJR,EAKpBltU,MAAO0+H,QAAYsuM,EAAWE,EALV,EAMpBC,WAAYzuM,aAAiBsuM,EAAWE,EANpB,EAOpBE,UAAW1uM,YAAgBsuM,EAAWE,EAAWl8S,MAR9C,eAUDq8S,KAKH,ICtBP,EDsBaC,EAAkBP,EAAxB,G,SEpBSQ,EAAuBjgJ,GACrC,IAAMkgJ,EAAN,GAwBA,OAAOlgJ,EAtBP,cACE,SAII1gM,uBAAJ,MAAgCA,oBAC9B4gV,OAAmB5gV,EAAnB4gV,kBAEA,KAGI5gV,aAAF,cAAkCA,aAAtC,WACE,G,SCjBuBA,GAC3B,IAAM6gV,EAAgBv5T,wBAAtB,GACMw5T,EAAN,wBAGA,aAFmB,CAAC,WAAY,YAAhC,aAGE,MAAiBjmK,YACf,IAAMvmL,EAAQusV,EAAd,GAEA,MAAwB,kBAAVvsV,GAAqBwsV,OAA5B,MDWLC,CAAJ,IACEH,UAGKI,EAAwBhhV,EAA/B,aAjBE,EAoBaghV,CAAwBtgJ,EAA3B,YAAd,E,SEzBcugJ,EAAqBvgJ,GACnC,WAIIA,IAAY9hK,SAAZ8hK,kBAAyCA,aAA7C,SACE,OAGEA,aAAJ,YACE,EAGF,KAXE,K,SCFYwgJ,EACdxgJ,GAEA,OAAIA,aAAJ,OACS,CACLjwL,EAAGiwL,EADE,QAELt8J,EAAGs8J,EAAQygJ,SAIR,CACL1wU,EAAGiwL,EADE,WAELt8J,EAAGs8J,EAAQ8/G,W,SCdC4gC,EAAkBC,GAChC,IAAMC,EAAY,CAChB7wU,EADgB,EAEhB2zB,EAAG,GAEC07P,EAAY,CAChBrvR,EAAG4wU,cAAiCA,EADpB,YAEhBj9S,EAAGi9S,eAAkCA,EAAmBxyC,cAQ1D,MAAO,CACL0yC,MANYF,aAAgCC,EAA9C,EAOEE,OANaH,cAAiCC,EAAhD,EAOEG,SANeJ,aAAgCvhD,EAAjD,EAOE7nG,QANcopJ,cAAiCvhD,EAAjD,EAOEA,YACAwhD,a,SCnBYI,EAA2BhhJ,GACzC,SAAK,EAAD,IAAJ,IAIOA,IAAY9hK,SAAnB,kBNPF,SAAY+iT,GACVA,yBACAA,4BAFF,CAAYA,MAAZ,KOMA,IAAMC,EAAmB,CACvBnxU,EADuB,GAEvB2zB,EAAG,IAGL,SAAgBy9S,EACdptC,EACAqtC,EAFF,GAKwBF,IAFtB,EAEsBA,EAFtB,MAEsBA,EAFtB,OAEsBA,EAFtB,MAAmBz0N,EAEGy0N,EAFHz0N,OACnB40N,EACsBH,uDADP,GACfI,EAAsBJ,yDAEhB,EAAN,EAAM,aAAe5pN,EAArB,EAAqBA,YACfiqN,EAA2BP,EAAA,GAC7B,CACEx0N,IADF,EAEE/5G,KAFF,EAGEC,MAHF,EAIE+5G,OAJF,EAKEj5C,MALF,EAMEi2C,OAAQ0kL,GAPd,EAUA,EAA2CuyC,EAA3C,GAAM,EAAN,EAAM,QAAN,EAAM,WAAN,EAAM,OAA0BnpJ,EAAhC,EAAgCA,QAE1B3lH,EAAY,CAChB7hE,EADgB,EAEhB2zB,EAAG,GAEC89S,EAAQ,CACZzxU,EADY,EAEZ2zB,EAAG,GAECiuN,EAAY,CAChBloI,OAAQ83N,SAAkCD,EAD1B,EAEhB9tQ,MAAO+tQ,QAAiCD,EAAoBvxU,GAiD9D,OA9CK8wU,GAASr0N,GAAO+0N,MAA+B5vF,EAApD,QAEE//K,IAAcqvQ,EAAdrvQ,SACA4vQ,IACEH,EACApsV,UACIssV,MAA+B5vF,EAAhC,OAAD,GACEA,EAJN6vF,UAOCT,GACDt0N,GAAU80N,SAAkC5vF,EAFvC,SAKL//K,IAAcqvQ,EAAdrvQ,QACA4vQ,IACEH,EACApsV,UACIssV,SAAkC5vF,EAAnC,OAAD,GACEA,EAJN6vF,UAQGjqJ,GAAW7kL,GAAS6uU,QAAiC5vF,EAA1D,OAEE//K,IAAcqvQ,EAAdrvQ,QACA4vQ,IACEH,EACApsV,UACIssV,QAAiC5vF,EAAlC,MAAD,GACEA,EAJN6vF,SAOCV,GACDruU,GAAQ8uU,OAAgC5vF,EAFnC,QAKL//K,IAAcqvQ,EAAdrvQ,SACA4vQ,IACEH,EACApsV,UACIssV,OAAgC5vF,EAAjC,MAAD,GACEA,EAJN6vF,QAQK,CACL5vQ,YACA4vQ,S,SC5FYC,GAAqBzhJ,GACnC,GAAIA,IAAY9hK,SAAhB,iBAA2C,CACzC,aAAM,EAAN,EAAM,WAAawjT,EAAnB,EAAmBA,YAEnB,MAAO,CACLl1N,IADK,EAEL/5G,KAFK,EAGLC,MAHK,EAIL+5G,OAJK,EAKLj5C,MALK,EAMLi2C,OAAQi4N,GAIZ,MAAmC1hJ,EAAnC,wBAEA,MAAO,CACLxzE,IAHF,EAAM,IAIJ/5G,KAJF,EAAM,KAKJC,MALF,EAAM,MAMJ+5G,OANF,EAAyBA,OAOvBj5C,MAAOwsH,EALF,YAMLv2E,OAAQu2E,EAAQmuG,c,SChBJwzC,GAAiBpD,GAC/B,OAAOA,EAAA,QAAwC,cAC7C,OAAO1nU,YAAIu6H,EAAKovM,EAAhB,MADF,GCHF,SAASoB,GAAc,EAAvB,OAGE57U,EAHF,yDAKE,IAAK1G,KAAUA,aAAf,aACE,SAGF,IAAMuiV,EAAa,CACjB9xU,EAAG/J,IAAW1G,EADG,WAEjBokC,EAAG19B,IAAW1G,EAAKwgV,WAGrB,OAAIxgV,iBAAJ,EACE,EAGKsiV,GAActiV,EAAD,eAApB,GAGF,SAAgBwiV,GAAiB9hJ,GAC/B,IAAM,EAAN,EAAO+hJ,YAAkCt4N,EAAzC,EAA2Bu4N,aAC3B,EAAsCJ,GAAc5hJ,EAApD,MAAM,EAAN,EAAOjwL,EAEP,MAAO,CACLyjE,QACAi2C,SACAq2N,UALF,EAAsBp8S,EAMpBm8S,cAIJ,SAAgB1tD,GACdnyF,GAEA,GAAIA,aAAJ,OAA+B,CAC7B,IAAMxsH,EAAQ5sD,OAAd,WACM6iG,EAAS7iG,OAAf,YAEA,MAAO,CACL4lG,IADK,EAEL/5G,KAFK,EAGLC,MAHK,EAIL+5G,OAJK,EAKLj5C,QACAi2C,SACAq2N,UAPK,EAQLD,WAAY,GAIhB,MAAgCiC,GAAhC,GAAM,EAAN,EAAM,UAAYjC,EAAlB,EAAkBA,WAClB,EAOI7/I,EAPJ,wBAAM,EAAN,EAAM,QAAN,EAAM,SAAN,EAAM,MAAN,EAAM,SAAN,EAAM,KASN,MAAO,CACLxsH,QACAi2C,SACA+C,MACAC,SACA/5G,MAdF,EAMEA,MASAD,OACAqtU,YACAD,cAIJ,SAAgBoC,GAAYjiJ,GAC1B,MAA+C8hJ,GAA/C,GAAM,EAAN,EAAM,QAAN,EAAM,SAAN,EAAM,UAA2BjC,EAAjC,EAAiCA,WAE3BqC,EAAgBP,GADM1B,EAA5B,IAGMzzN,EAAMszN,EAAYoC,EAAxB,EACMzvU,EAAOotU,EAAaqC,EAA1B,EAEA,MAAO,CACL1uQ,QACAi2C,SACA+C,MACAC,OAAQD,EAJH,EAKL95G,MAAOD,EALF,EAMLA,OACAqtU,YACAD,c,SC5FYsC,GAAWhnV,GACzB,MAAO,QAAP,ECQF,SAASinV,GAAmB,GAA5B,IAEE3vU,EAFF,uDAESo7I,EAFT,WAGErhC,EAHF,uDAGQqhC,EAHR,UAKE,MAAO,CACL,CACE99I,EADF,EAEE2zB,EAAG8oF,GAEL,CACEz8G,EAAG0C,EAAOo7I,EADZ,MAEEnqH,EAAG8oF,GAEL,CACEz8G,EADF,EAEE2zB,EAAG8oF,EAAMqhC,EAAKpkC,QAEhB,CACE15G,EAAG0C,EAAOo7I,EADZ,MAEEnqH,EAAG8oF,EAAMqhC,EAAKpkC,SASpB,IAAa44N,GAAqC,SAACxgV,EAASqjB,GAC1D,IAAMo9T,EAAUF,GAAmBl9T,EAAQA,EAAT,KAAsBA,EAAxD,KAEMq6T,EAAY19U,EAAA,KAAY,iDACtB0gV,EAAeH,GAAmB,EAEtCD,MAAoBhnV,EAApBgnV,UAFqC,EAGrCA,MAAoBhnV,EAApBgnV,SAHF,GAKM5C,EAAY+C,EAAA,QAAe,gBAC/B,OAAOnuQ,EAAc0qQ,EAAgB0D,EAAD,GAApC,KADF,GAIA,OAAO1oV,QAAQ0lV,EAAD,WAAd,OAGIC,EAAgB/B,EAAtB,GAEA,OAAO57U,KAAyBA,KAAzBA,GAAP,MCnBF,IAAa2gV,GAAuC,SAAC3gV,EAASqjB,GAC5D,IAAMu9T,EAAgB5gV,OAAY,+CAjCpC,SAA8B1G,EAA9B,GACE,IAAMqxH,EAAMv3H,SAASiwB,EAATjwB,IAAqBkG,EAAjC,WACMsX,EAAOxd,SAASiwB,EAATjwB,KAAsBkG,EAAnC,YACMuX,EAAQzd,SACZiwB,OAAcA,EADFjwB,MAEZkG,aAAmBA,EAFrB,OAIMsxH,EAASx3H,SACbiwB,MAAaA,EADAjwB,OAEbkG,YAAkBA,EAFpB,QAIMq4E,EAAQ9gE,EAAd,EACM+2G,EAASgD,EAAf,EAEA,GAAIh6G,KAAgB+5G,EAApB,EAAkC,CAChC,IAAMk2N,EAAax9T,QAAeA,EAAlC,OACMy9T,EAAYxnV,QAAcA,EAAhC,OACMynV,EAAmBpvQ,EAAzB,EAIA,OAAO35E,QAFL+oV,GAAoBF,IADtB,IAGcG,QAAd,IAIF,SASEC,CADgC,KAAlC,MAIMC,EzB3CNrF,EyB2CA,GzB3CqB,qBAAoB9pV,EADpC,KyB8CL,OAAI6uV,MAAJ,EACE,KAGK5gV,KAAyBA,KAAzBA,GAAP,M,SClDcmhV,GAAiB99T,GAC/B,OAAOA,yBAAgCA,EAAhCA,cAAP,S,SCGc+9T,KACd,MAAO,CACLxsD,UAAW,CACTtb,OADS,KAET+nE,mBAAoB,CAACnzU,EAAD,EAAO2zB,EAAG,GAC9B52B,MAHS,GAIT8wI,UAAW,CAAC7tI,EAAD,EAAO2zB,EAAG,IAEvBiyP,UAAW,CACTwtD,WAAY,KAKlB,SAAgB/oU,GAAQ8kB,EAAc9b,GACpC,OAAQA,EAAR,MACE,KAAKo6T,EAAL,UACE,kCAAO,GAAP,IAEE/mD,UAAW,2BACNv3P,EADM,WAAF,IAEPgkT,mBAAoB9/T,EAFX,mBAGT+3P,OAAQ/3P,EAAO+3P,WAGrB,KAAKqiE,EAAL,SACE,OAAKt+S,YAAL,OAIA,2BAAO,GAAP,IAEEu3P,UAAW,2BACNv3P,EADM,WAAF,IAEP0+G,UAAW,CACT7tI,EAAGqT,gBAAuB8b,+BADjB,EAETwE,EAAGtgB,gBAAuB8b,+BAAmCwE,OATjE,EAaJ,KAAK85S,EAAL,QACA,KAAKA,EAAL,WACE,kCAAO,GAAP,IAEE/mD,UAAW,2BACNv3P,EADM,WAAF,IAEPi8O,OAFS,KAGT+nE,mBAAoB,CAACnzU,EAAD,EAAO2zB,EAAG,GAC9Bk6G,UAAW,CAAC7tI,EAAD,EAAO2zB,EAAG,OAI3B,KAAK85S,EAAL,kBACE,IAAOx9I,EAAP,EAAOA,QACA7mK,EAAP,EAAOA,GAEP,kCAAO,GAAP,IAEEw8P,UAAW,2BACNz2P,EADM,WAAF,IAEPikT,WAAY,2BACPjkT,YADO,YAAF,kBAER,EAAM8gK,QAMd,KAAKw9I,EAAL,qBACE,IAAM,EAAN,EAAM,GAAKpoO,EAAX,EAAWA,SACL4qF,EAAU9gK,uBAAhB,GAEA,SAIA,2BAAO,GAAP,IAEEy2P,UAAW,2BACNz2P,EADM,WAAF,IAEPikT,WAAY,2BACPjkT,YADO,YAAF,kBAER,EAFQ,2BAEF,GAFE,IAINk2E,mBAXN,EAkBJ,KAAKooO,EAAL,oBACE,IAAOrkT,EAAP,EAAOA,GAEP,kCAAO,GAAP,IAEEw8P,UAAW,2BACNz2P,EADM,WAAF,IAEPikT,WAAYp3J,EAAK,EAAI7sJ,YAAL,gBAKtB,QACE,UC9EC,ICtBP,GA4BA,GCxBA,GAMA,GFYakkT,GAAoBxmT,wBAA+B,CAC9DxkC,KAD8D,KAE9DinI,MAAO,O,SGhBOgkN,G,GAAc,QAC5BC,qBAD4B,sCAG5BlG,EAH4B,EAG5BA,yBAEA,E,WClBA,MAAwCxmS,mBAAxC,uBAAM,EAAN,KAAM,EAAN,KAOA,MAAO,CAACyzP,SANSjpL,uBAAaxtH,YAC5B,MAAIA,GACF2vV,OAFJ,IAMkBC,gBDWeC,GAA3B,EAAN,EAAM,SAAWD,EAAjB,EAAiBA,aACXE,EAAe/iC,YAArB,iBAEA,EAA8B/pQ,oBAA9B,sBAAM,EAAN,KAAM,EAAN,KA+BA,OA7BAvY,qBAAU,WACRslT,QADFtlT,IHSF,YAA8B,gEAK5Bk/S,EAL4B,EAK5BA,aAEMqG,EAAejhT,qBAArB,IACMkhT,EAAuBzgT,iBAA7B,GAEA/E,qBAAU,WACR,GAAIulT,IAAiBC,EAArB,QAAmD,CACjD,IAAM,EAAN,EAAM,KAAOxkN,EAAb,EAAaA,MAEb,UACE,KAAKm+M,EAAL,UACE/xC,cACA,MACF,KAAK+xC,EAAL,SACEsG,cACA,MACF,KAAKtG,EAAL,SACEF,cACA,MACF,KAAKE,EAAL,WACED,cACA,MACF,KAAKC,EAAL,QACEvyC,cAIJ44C,eAED,CAAC,EAAD,QAxBHxlT,IGfA0lT,CACErlT,mBACE,iBAAO,CACL+sQ,YADK,YACM,IAAEtwB,EAAF,EAAEA,OACXkvB,EAASi5C,cAA0BnoE,EAAnCkvB,MAEFy5C,WAJK,YAIK,IAAC,EAAD,EAAC,OAASv2J,EAAV,EAAUA,KACd+1J,EAAJ,YACEj5C,EAASi5C,aAAyBnoE,EAAzBmoE,SAAoC/1J,OAApC+1J,EAAoC/1J,EAA7C88G,MAGJizC,WATK,YASK,IAAC,EAAD,EAAC,OAAS/vJ,EAAV,EAAUA,KAClB88G,EAASi5C,aAAyBnoE,EAAzBmoE,SAAoC/1J,OAApC+1J,EAAoC/1J,EAA7C88G,MAEFY,UAZK,YAYI,IAAC,EAAD,EAAC,OAAS19G,EAAV,EAAUA,KACjB88G,EAASi5C,YAAwBnoE,EAAxBmoE,SAAmC/1J,OAAnC+1J,EAAmC/1J,EAA5C88G,MAEFkzC,aAfK,YAeO,IAAEpiE,EAAF,EAAEA,OACZkvB,EAASi5C,eAA2BnoE,EAApCkvB,SAGJ,CAACA,EArBL05C,KAyBO1oO,EACH4sM,uBACE,oCACE,qBACE9uR,GAAI6qT,EACJpwV,MAAOwpV,EAAyB3mD,YAElC,qBAAYt9P,GAAIuqT,EAAcF,aAAcA,KAE9CtlT,SATQ,MAAd,K,SElDc+lT,GAAQ/wS,GACtB,IAAMgxS,EAAU9gT,iBAAhB,GAQA,OANAnF,aAA0B,WACpBimT,YAAJ,IACEA,eAED,CAJHjmT,IAMA,GJNF,SAAYkmT,GACVA,yBACAA,qCAFF,CAAYA,QAAZ,KA4BA,SAAYC,GACVA,6BACAA,6CAFF,CAAYA,QAAZ,KCxBA,SAAYC,GACVA,uBACAA,uCACAA,qCAHF,CAAYA,QAAZ,KAMA,SAAYC,GACVA,wBADF,CAAYA,QAAZ,KASA,IAAM7uS,GAA8B,IAApC,IAEA,SAAgB8uS,GACdpB,EADF,GAEE,IA8H0B,EA9H1B,8BAAyBvlS,EAAzB,EAAyBA,OAEzB,EAAwDhH,oBAAxD,sBAAM,EAAN,KAAM,EAAN,KACA,GA2H0B,EA3H1B,GA8HsB,2BAClB,IAEK4tS,GAHT,GA9HM,EAAN,EAAM,UAAYC,EAAlB,EAAkBA,SACZC,EAAgBthT,iBAAtB,GACMq7S,EAAmBr9N,uBAAY,kBAAMujO,GAAP,KAApC,IACMC,EAA4BxhT,iBAAlC,MACMgyE,EA8EN,WACE,UACE,KAAKivO,GAAL,OACE,SACF,KAAKA,GAAL,eACE,SACF,QACE,UArFWn2N,GACX22N,EAAgBC,aACnBC,YACC,GAAI3vO,IAAJ,EACE,UAGF,IACG2vO,GACDA,IADA,IAEAL,YAFA,GADF,EAKE,CACA,cAAsBpuV,cAAtB,kBAAiD,CAA5C,IAAIo7E,EAAT,KACE,IAIAA,eAAyBA,eACrBowQ,GAAiBpwQ,OADIA,SAAzBA,MAKF,OAmER,SAA6B,GAG3B,IAAMmzQ,EAA+B,IAArC,IAEA,KACE,cAAwBvuV,cAAxB,kBAAmD,CAA9C,IAAMo7E,EAAX,KACE,MAIA,IAAM,EAAN,EAAM,KAAN,EAAM,KAAN,EAAiB0jC,UAEjB,MAAgBy4C,WAIhBg3L,QAAsBh3L,EAAtBg3L,UAIJ,SAxFaG,CAAP,GAGF,WAEF,CAAC7B,EAAYn4C,EAAU51L,EA3BzB,IAuEA,OAzCA/2E,qBAAU,WACRqmT,cACC,CAFHrmT,IAIAA,qBAAU,WACR,GACEsmT,QAED,CAJHtmT,IAMAA,qBACE,WACE,GAIAm0P,2BAGF,GATFn0P,IAYAA,qBACE,WAEI+2E,qBACO6vO,GAFT,OAGEL,YAKFA,UAAoC7zS,YAAW,WAC7C0tS,IACAmG,iBAFFA,MAVK,CAgBP,OAhBO,mBAATvmT,KAmBO,CACLwmT,gBACApG,mBACAE,wBAuCJ,IAAMuG,GAA0C,CAC9CT,SAAUJ,GADoC,cAE9CY,UAAWX,GAAyBa,WIrJtC,IAAM1vS,GAAN,GCOO,IAAM2vS,GAAgBC,GAAtB,IACMC,GAAiBC,GAAvB,IACMC,GAAcH,GAApB,IAGP,SAASA,GAAT,GAGE,OAAO,SAAuB,EAAvB,GAIL,IAAMI,EAAkBriT,iBAAxB,GAEA,OAAO0hT,aACJC,YACC,SAKEW,IACEX,GADFW,GAEA1lJ,IAAYylJ,EAHd,QAKMzlJ,0BAAJ,MAAsCA,aACpC,KAGKqwF,EAAP,GAGF,MAAO00D,EAAP,OAfE,OAiBJ,CAAC/kJ,EApBH,KAyBJ,SAASulJ,GAAT,GACE,IAAM9vS,EAAN,GAEA,OAAO,SAAkBqgS,EAAlB,GACL,IAAM6P,EAAmBviT,iBAAzB,GAEA,OAAO0hT,aACJC,YACC,OAAKjP,EAAL,OAKE4P,IACEX,GAAiBjP,EADnB4P,QAEA5P,IAAa6P,EAHf,QAKS7P,OAAc91I,YAAD,OAAaqwF,EAAjC,MAGF,MAAO00D,EAAP,IAXE,IAaJ,CAACjP,EAhBH,K,SCrDY8P,GACdC,EACA3hT,GAEA,OAAOxF,mBACL,iBAAO,CACLmnT,SACA3hT,QAAO,MAAEA,EAAF,EAAc,MAGvB,GANF,I,SCJcw4Q,KACXY,wEAEH,OAAO5+Q,mBACL,iBACE,qBACGmnT,YAAD,OAHQ,MAGqCA,OAHrC,UAAd,I,ICJF,GCHaC,G,WAMXtvV,WAAoB0uB,GAAA,yBAAAA,SALZ,KAAAiY,UAAA,G,uCAODtmB,SAAG,OAKR3e,KAAA,+BACAA,KAAA,eAAoB,CAAC86R,YAAW7hF,c,uBAG3BtlM,WAAS,WACd3T,KAAA,mBAAuB,gBAAC,EAAD,EAAC,UAAYi5M,EAAb,EAAaA,QAAb,OACrB,+BADF,U,cChBY40I,GACd/lJ,GAOA,OAAOA,2BAA2CgjJ,GAAlD,G,SCRcgD,GACdC,EACAC,GAEA,IAAMj2E,EAAKh7Q,SAASgxV,EAApB,GACM/1E,EAAKj7Q,SAASgxV,EAApB,GAEA,wBAAWC,EACFjxV,UAAUg7Q,uBAAUC,EAApBj7Q,IAAP,EAGE,MAAOixV,GAAe,MAA1B,EACSj2E,EAAKi2E,EAALj2E,GAAsBC,EAAKg2E,EAAlC,EAGE,MAAJ,EACSj2E,EAAKi2E,EAAZ,EAGE,MAAJ,GACSh2E,EAAKg2E,EAAZ,GHnBJ,SAAYC,GACVA,gBACAA,mBACAA,qBACAA,mBACAA,eACAA,eACAA,gBAPF,CAAYA,QAAZ,KIDO,ICmDP,GDnDaC,GAAsC,CACjDnuU,MAAO,CAACkuU,GAAD,MAAqBA,GADqB,OAEjDpiU,OAAQ,CAACoiU,GAFwC,KAGjDzxV,IAAK,CAACyxV,GAAD,MAAqBA,GAArB,QAGME,GAA4D,SAAC,EAAD,OAEtEC,EAFsE,EAEtEA,mBAED,OAAQjnN,EAAR,MACE,KAAK8mN,GAAL,MACE,kCAAO,GAAP,IAEEp2U,EAAGu2U,IAAuB,KAE9B,KAAKH,GAAL,KACE,kCAAO,GAAP,IAEEp2U,EAAGu2U,IAAuB,KAE9B,KAAKH,GAAL,KACE,kCAAO,GAAP,IAEEziT,EAAG4iT,IAAuB,KAE9B,KAAKH,GAAL,GACE,kCAAO,GAAP,IAEEziT,EAAG4iT,IAAuB,OECrBC,G,WAMX/vV,WAAoB4rC,GAAA,yBAAAA,QALb,KAAAokT,mBAAA,EACC,KAAAC,YAAA,EAKN,IACUvhU,EADV,EACEm6G,MAAQn6G,OAGVhtB,KAAA,QACAA,KAAA,UAAiB,IAAI,GAAU8qV,GAA/B,IACA9qV,KAAA,gBAAuB,IAAI,G,SC3CLgtB,G,MACxB,gBAAO89T,MAAP,sBD0CuC0D,CAArC,IACAxuV,KAAA,cAAqBA,KAAKyuV,cAAc3sU,KAAxC9hB,MACAA,KAAA,aAAoBA,KAAK0uV,aAAa5sU,KAAtC9hB,MAEAA,KAAA,S,0CAGM2uV,WAAM,WACZ3uV,KAAA,cAEA64C,YAAW,WACT,0BAA8B,EAA9B,eACA,+BAAmC,EAAnC,mB,yBAII+1S,WACN,MAA8B5uV,KAA9B,MAAM,EAAN,EAAM,WAAa6uV,EAAnB,EAAmBA,QAEnB,IAAKnJ,OAAL,QACE,MAAM,IAAI99U,MAAV,sCAGF,IAAM+9U,EAAiB1rD,GAAsByrD,OAA7C,SACM6I,EAAc,CAClB12U,EAAG8tU,EADe,KAElBn6S,EAAGm6S,EAAerxN,KAGpBt0H,KAAA,cAEA6uV,O,2BAGMJ,SAAa,GACnB,GAAItnN,aAAJ,cAAoC,CAClC,IAAOonN,EAAP,KAAOA,YACP,EAAmCvuV,KAAnC,MAAM,EAAN,EAAM,SAAN,EAAM,QAAkBgsC,EAAxB,EAAwBA,QACxB,IACE8iT,qBADF,MAAM,GAAN,MAEEC,wBAFF,MAAM,GAAN,MAGEC,sBAHF,MAGmB,SAHnB,EAKOhnP,EAAP,EAAOA,KAEP,GAAI8mP,eAAJ,GAEE,YADA9uV,KAAA,aAIF,GAAI8uV,kBAAJ,GAEE,YADA9uV,KAAA,gBAIF,IAAMivV,EAAiBF,EAAiB5nN,EAAO,CAC7C87I,SACA/5Q,QAASA,EAFoC,QAG7CklV,mBAAoBG,IAGtB,KAAoB,CAClB,IADkB,EACZW,EAAc,CAClBr3U,EADkB,EAElB2zB,EAAG,GAEE66S,EAAuBn9U,EAA9B,QAAOm9U,oBALW,cAOlB,GAPkB,IAOlB,2BAAmD,KAAnD,EAAmD,QAC3C3sQ,EAAYytD,EAAlB,KACMgoN,EAAmBC,YAAoB,EAA7C,GAIA,EAOI5G,EAPJ,GAAM,EAAN,EAAM,QAAN,EAAM,UAAN,EAAM,SAAN,EAAM,WAAN,EAAM,UAMJE,EANF,EAMEA,UAEI2G,EAAoB9F,GAA1B,GAEM+F,EAAqB,CACzBz3U,EAAG9a,SACD28E,IAAcu0Q,GAAdv0Q,MACI21Q,QAA0BA,QAD9B31Q,EAEI21Q,EAHHtyV,MAIDA,SACE28E,IAAcu0Q,GAAdv0Q,MACI21Q,EADJ31Q,KAEI21Q,OAAyBA,QAH/BtyV,EAIEkyV,EATqB,IAYzBzjT,EAAGzuC,SACD28E,IAAcu0Q,GAAdv0Q,KACI21Q,SAA2BA,SAD/B31Q,EAEI21Q,EAHHtyV,OAIDA,SACE28E,IAAcu0Q,GAAdv0Q,KACI21Q,EADJ31Q,IAEI21Q,MAAwBA,SAH9BtyV,EAIEkyV,EARDlyV,KAaCwyV,EACH71Q,IAAcu0Q,GAAdv0Q,QAAD,GACCA,IAAcu0Q,GAAdv0Q,OAFH,EAGM81Q,EACH91Q,IAAcu0Q,GAAdv0Q,OAAD,GACCA,IAAcu0Q,GAAdv0Q,KAFH,EAIA,GAAI61Q,GAAcD,MAAyBL,EAA3C,EAA6D,CAQ3D,GANGv1Q,IAAcu0Q,GAAdv0Q,OACCmiO,aAA6BszC,EAA7BtzC,GACE3U,EAFJ,GAGCxtN,IAAcu0Q,GAAdv0Q,MACCmiO,aAA6BszC,EAA7BtzC,GAAmD6sC,EALvD,EAcE,YAJA7sC,WAAyB,CACvBthS,KAAM40U,EADiB,EAEvBM,SAAUT,IAKdE,IACEx1Q,IAAcu0Q,GAAdv0Q,MACImiO,aAA6B3U,EADjCxtN,EAEImiO,aAA6B6sC,EAHnCwG,EAKArzC,WAAyB,CACvBthS,MAAO20U,EADgB,EAEvBO,SAAUT,IAEZ,MACK,GAAIQ,GAAcF,MAAyBL,EAA3C,EAA6D,CAQlE,GANGv1Q,IAAcu0Q,GAAdv0Q,MACCmiO,YAA4BszC,EAA5BtzC,GACE3U,EAFJ,GAGCxtN,IAAcu0Q,GAAdv0Q,IACCmiO,YAA4BszC,EAA5BtzC,GAAkD6sC,EALtD,EAcE,YAJA7sC,WAAyB,CACvBvnL,IAAK66N,EADkB,EAEvBM,SAAUT,IAKdE,IACEx1Q,IAAcu0Q,GAAdv0Q,KACImiO,YAA4B3U,EADhCxtN,EAEImiO,YAA4B6sC,EAHlCwG,EAKArzC,WAAyB,CACvBvnL,KAAM46N,EADiB,EAEvBO,SAAUT,IAGZ,QA/Gc,8BAmHlBhvV,KAAA,aAEE0vV,YAAuBT,EAFzB,Q,wBAQEU,SAAU,KAChB,IAAOC,EAAU5vV,KAAjB,MAAO4vV,OAEPzoN,mBACAyoN,KACA5vV,KAAA,gB,uBAGM6vV,SAAS,GACf,IAAOC,EAAS9vV,KAAhB,MAAO8vV,MAEP3oN,mBACAnnI,KAAA,SACA8vV,M,0BAGMpB,SAAY,GAClB,IAAOnoB,EAAYvmU,KAAnB,MAAOumU,SAEPp/L,mBACAnnI,KAAA,SACAumU,M,oBAGM/9D,WACNxoQ,KAAA,sBACAA,KAAA,gC,KD7NJ,SAAS+vV,GAAqB,GAG5B,OAAO1yV,QAAQ2yV,GAAc,aAA7B,GAGF,SAASC,GAAkB,GAGzB,OAAO5yV,QAAQ2yV,GAAc,UAA7B,GCuNO3B,cAAa,CAClB,CACEvzD,UADF,YAEE7hF,QAAS,sBAGL61I,qBAHK,MAEP,GAFO,EAILoB,EAJK,EAILA,aAGKloP,EAAQm/B,EAAf,YAAOn/B,KAEP,QAAI8mP,iBAAJ,KACE3nN,mBAEA+oN,WAAe,CAAC/oN,MAAOA,EAAMwiF,eAE7B,MD9NV,SAAKwmI,GACHA,oBADF,CAAKA,QAAL,K,IAIaC,G,WAQX9xV,WACU4rC,EACAw3G,GAC+B,IAAvC2uM,EAAuC,uDAAtBxC,GAAuB3jT,QAAD,4BAF/B,KAAAA,QACA,KAAAw3G,SATH,KAAA4sM,mBAAA,EACC,KAAAgC,WAAA,EAEA,KAAA99C,UAAA,KASN,IAAOrrK,EAAP,EAAOA,MAEPnnI,KAAA,QACAA,KAAA,SACAA,KAAA,cAAqB8qV,GAAiB3jN,EAAtC,QACAnnI,KAAA,UAAiB,IAAI,GAArB,GACAA,KAAA,mBAA0B4mV,EAA1B,GACA5mV,KAAA,YAAmBA,KAAK4uV,YAAY9sU,KAApC9hB,MACAA,KAAA,WAAkBA,KAAK2vV,WAAW7tU,KAAlC9hB,MACAA,KAAA,UAAiBA,KAAK6vV,UAAU/tU,KAAhC9hB,MACAA,KAAA,cAAqBA,KAAKuwV,cAAczuU,KAAxC9hB,MAEAA,KAAA,S,0CAGM2uV,WACN,IAAM,EAAN,KAAM,OAGQ6B,EAHd,KAEEtmT,MACE8B,QAAUwkT,qBASd,GALAxwV,KAAA,cAAmB0hJ,OAAnB,KAAqC1hJ,KAArC,eACAA,KAAA,cAAmB0hJ,MAAnB,KAAoC1hJ,KAApC,WAEAA,KAAA,+BAAoCmwV,GAApC,QAAuDnwV,KAAvD,eAEA,EAA0B,CACxB,GAAI+vV,GAAJ,GACE,OAGF,GAAIE,GAAJ,GAKE,YAJAjwV,KAAA,UAAiB64C,WACf74C,KADyB,YAEzBwwV,EAFF,QAQJxwV,KAAA,gB,oBAGMwoQ,WACNxoQ,KAAA,sBACAA,KAAA,kCACEmwV,GADF,QAEEnwV,KAFF,eAKA,OAAIA,KAAKwyS,YACPjsK,aAAavmI,KAAbumI,WACAvmI,KAAA,kB,yBAII4uV,WACN,IAAO5D,EAAP,KAAOA,mBACA6D,EAAW7uV,KAAlB,MAAO6uV,QAEP,IACE7uV,KAAA,aAEA6uV,Q,wBAIIc,SAAU,GAChB,IAAM,EAAN,KAAM,YAAN,KAAM,mBAAgCzlT,EAAtC,KAAsCA,MAChC,EAAN,EAAM,OAEMsmT,EAFZ,EAEExkT,QAAUwkT,qBAGZ,MAIA,IAAMjC,EAAc3H,EAApB,GACMmH,EAAQqB,YAAoBpE,EAAlC,GAEA,IAAKsF,GAAL,EAAwC,CAEtC,GAAIL,GAAJ,GACE,OAAInC,GAAoBC,EAAOyC,EAA/B,WACSxwV,KAAP,oBAGF,EAGF,GAAI+vV,GAAJ,GACE,OAAIjC,GAAoBC,EAAOyC,EAA/B,UACSxwV,KAAP,mBAGF,EAIAmnI,EAAJ,YACEA,mBAGFyoN,Q,uBAGMC,WACN,IAAOC,EAAS9vV,KAAhB,MAAO8vV,MAEP9vV,KAAA,SACA8vV,M,0BAGMpB,WACN,IAAOnoB,EAAYvmU,KAAnB,MAAOumU,SAEPvmU,KAAA,SACAumU,M,2BAGMgqB,SAAa,GACfppN,SAAe8mN,GAAnB,KACEjuV,KAAA,mB,KGzLA0hJ,GAA+B,CACnC6tJ,KAAM,CAAC/gS,KAAM,eACbhS,IAAK,CAACgS,KAAM,cAODiiV,G,kDACXnyV,WAAY4rC,uBACV,IAGMmmT,EAAiBvF,GAHvB,EAAO3jN,MAGP,QAJUj9F,mBAMV,Q,UAP+BkmT,IAU1BK,cAAa,CAClB,CACE31D,UADF,gBAEE7hF,QAAS,kBACO9xE,EADP,EACNwiF,YACAumI,EAFM,EAENA,aAED,SAAK/oN,EAAD,WAAJ,IAAwBA,YAIxB+oN,WAAe,CAAC/oN,WAEhB,MChCR,IAKA,GALMua,GAA+B,CACnC6tJ,KAAM,CAAC/gS,KAAM,aACbhS,IAAK,CAACgS,KAAM,aAGd,SAAKkiV,GACHA,+BADF,CAAKA,QAAL,M,kDASEpyV,WAAY4rC,0CACV,KAAqB4gT,GAAiB5gT,QAAtC,S,UAF6BkmT,KAKxBO,WAAa,CAClB,CACE71D,UADF,cAEE7hF,QAAS,kBACO9xE,EADP,EACNwiF,YACAumI,EAFM,EAENA,aAED,OAAI/oN,WAAiBupN,GAArB,aAIAR,WAAe,CAAC/oN,WAEhB,MC/BR,IAAMua,GAA+B,CACnC6tJ,KAAM,CAAC/gS,KAAM,aACbhS,IAAK,CAACgS,KAAM,a,SCREoiV,GACdvmE,E,GACA,kBAAer/P,EAAf,iBAEA,OAAO,MAAAq/P,OAAA,EAAAA,EAAA,QACHA,EAAA,QAA4B,cAC1B,OAAOm9D,EAAS,aACdnrN,UADc,GAEXrxG,MAJJ,GAAP,G,kDDYA1sB,WAAY4rC,0CACV,M,UAF6BkmT,KAKxBS,WAAa,CAClB,CACE/1D,UADF,eAEE7hF,QAAS,kBACO9xE,EADP,EACNwiF,YACAumI,EAFM,EAENA,aAID,QAFA,EAAOzsC,QAEHA,OAAJ,KAIAysC,WAAe,CAAC/oN,WAEhB,ME0ER,IAAMk7K,GAAiB,CACrB,CAACsrC,OAAD,GAAwB3hT,QAAS,IACjC,CAAC2hT,OAAD,GAAyB3hT,QAAS,KAG9B+f,GAAuB,CAACjkB,QAAS,IAE1BgpT,GAAyBpsT,wBAAa,2BAAY,GAAZ,IAEjDqsT,OAF6D,EAG7DC,OAAQ,KAGGC,GAAa5lT,gBAAK,SAAoB,GAApB,I,MC1H7B6lT,EACAC,EDyHiD,EAApB,EAAoB,GAApB,IAE7B77C,kBAF6B,SAAoB,EAApB,EAAoB,gBAApB,EAAoB,SAApB,IAK7B8P,eAL6B,MAAoB,GAApB,MAM7BgsC,0BAN6B,MAAoB,GAApB,EAAoB,EAApB,EAAoB,kBAApB,EAAoB,UAApB,IAS7BlM,gCAT6B,MAAoB,EAApB,EAU1Bh7S,EAV0B,iBAYvB7E,EAAQ2F,qBAAW9oB,QAASpmB,EAAlC,IACA,mBAAM,EAAN,KAAM,EAAN,KACA,EAAwC4iD,oBAA0B,iBAAO,CACvEx+C,KADuE,KAEvEinI,MAAO,SAFT,mBAAM,EAAN,KAAM,EAAN,KAIA,IACEo3J,UAAW,EADb,EACctb,OAAD,EADb,EACgCruQ,MAAuB8wI,EADvD,EACuDA,UAC7BwgM,EAF1B,EAEEzoD,UAAYwtD,WAER7jV,GAAOiqV,EAAWrL,EAAH,GAArB,KACMsL,GAAcpmT,iBAAkC,CACpDwsJ,QADoD,KAEpD65J,WAAY,OAERtuE,GAASz8O,mBACb,wBACE,MAAA6qT,EACI,CACEpwT,GADF,EAGE+Z,KAAI,eAAE5zC,QAAF,EAAEA,GAAF,QAHN,GAIEuuJ,KAAM27L,IANd,OASA,CAACD,EAVH,KAYMG,GAAYtmT,iBAAlB,MACA,GAAwCwT,mBAAxC,2BAAM,GAAN,MAAM,GAAN,MACA,GAA4CA,mBAA5C,2BAAM,GAAN,MAAM,GAAN,MACM+yS,GAAcvmT,iBAApB,GACMwmT,GAAyBjpC,YAAY,iBAA3C,GACA,GAII4jC,GAAmBnG,EAAqB,CAC1CpzC,SAD0C,MAChCu+C,EACV/pT,aAAc,CAACo+G,EAAD,EAAcA,EAFc,GAG1ChgG,OAAQ4mS,IAPJ,GAAN,GACEK,cADI,GAAN,GAAM,iBAGJlG,GAHF,GAGEA,qBAMIf,G,SE7KNM,EACA/kT,GAEA,IAAM0wT,EAAgB1wT,SAAc+kT,EAAd/kT,QAAtB,EACM75B,EAAOuqV,EAAgBA,OAAH,QAA1B,KAEA,OAAO/E,aACJgF,Y,MACC,cAAI3wT,EACF,KAMF,eAAO75B,EAAP,cAEF,CAACA,EAXH,IFuKmByqV,CAAc7L,EAAjC,GACM8L,GAAwBrM,GAC1BmB,EADwC,IAA5C,KAGMjB,GAAiB2H,GAAvB,IACM1H,GAAuBsH,GAA7B,IACM6E,GAA2B7mT,iBAAjC,MACM8mT,GAAwBD,GAA9B,QACME,ICtLNd,EDsLA,ICvLAD,EDuLmCvL,KCpL5B,EACH,CACE9tU,EAAGq5U,OAAaC,EADlB,KAEE3lT,EAAG0lT,MAAYC,EAAM78N,KAH3B,GDqLM49N,GAAgBhnT,iBAAsB,CAC1C+3O,OAD0C,KAE1CyiE,cACAyM,cAH0C,KAI1ClM,kBACAD,iBACAoM,iBAN0C,KAO1ClM,sBACA7wJ,KAR0C,KAS1CgxJ,oBAT0C,GAU1CgM,wBAV0C,KAW1CC,eAAgB,OAEZC,GA+ZR,SAA0B,EAA1B,G,QAIE,OAAOtxT,GAAE,kBAAGilT,EAAH,WAAGA,OAAH,WAAT,KAnaiBsM,CAAgB,kBAC/BN,WAD+B,aAC/BA,EAD+B,WAAjC,GAIM1L,GAAa0G,GACjBxH,GAAaA,iBAAH,YADZ,MAGMK,GAAoBmH,GACxBxH,GAAaA,GAAH,cADZ,MAGMW,GhB5MR,SAAuCj/U,GACrC,IAAMqrV,EAAevnT,iBAArB,GAEMwnT,EAAY9F,aACfC,YACC,SAKEA,MAEA4F,EAFA5F,SAGAzlV,eAAoBqrV,UAJtB,WAME,EAGK1K,EAAP,GAZE,KAcJ,CAjBF,IAwBA,OAJA5hT,qBAAU,WACRssT,cACC,CAFHtsT,IAIA,EgBiL4BwsT,CAC1BtB,EAAQ,MAAGkB,GAAH,MADV,MAGMjM,GAA0B8G,GAAhC,IAEA,GAA4CwF,cAA5C,qBAAM,GAAN,MAAM,GAAN,MACMC,GAAkB3F,GACtBmE,EAAWyB,GAAH,QAD2B,KAArC,IAKMV,GAAgB,MAAGS,GAAH,GAAtB,GACME,GAAoBnC,GAAevmE,EAAW,CAClDhuJ,UAAW,CACTxkH,EAAG6tI,IAAcusM,GADR,EAETzmT,EAAGk6G,IAAcusM,GAFR,EAGTlB,OAHS,EAITC,OAAQ,GAEV/tE,UACA5tF,KAAM68J,WAR4C,KASlDvM,eATkD,GAUlDyM,oBACArM,qBACA8M,mBACAxM,uBACAC,2BACAE,gBAGIwM,GAAqBlB,GACvBnzU,YAAImzU,GADwC,GAAhD,KAIMmB,G,SGxOyBrV,GAC/B,MAGIl/R,mBAHJ,yBAAM,EAAN,KAAM,EAAN,KAIMw0S,EAAehoT,iBAArB,GAGMioT,EAAejqO,uBAAaie,YAChC,IAAMisN,EAAmB/K,EAAqBlhN,EAA9C,QAEA,GAIAksN,GAAsBC,YACpB,UAIAA,QAEEhL,EAFFgL,IAKO,IAAI1gV,IAAX,IARE,UATN,IAwEA,OAnDAuzB,qBAAU,WACR,IAAMsnT,EAAmByF,EAAzB,QAEA,GAAItV,IAAJ,EAAmC,CACjC57B,KAEA,IAAMr4S,EAAUi0U,EAAA,KACR91I,YACJ,IAAMyrJ,EAAoBlL,EAA1B,GAEA,UACEkL,8BAA2D,CACzD/hD,SAAS,IAGJ,CAAC,EAEN82C,EAFF,KAMF,QAfY,QAmBVrlV,YADF,OAlBJ,MAuBSA,KAGTowV,EAAqB1pV,SAAiB,IAAIiJ,IAArBjJ,GAArB0pV,MAEAH,YAGF,OAAO,WACLlxC,KACAA,MAGF,cACE47B,WAAkB91I,YAChB,IAAMyrJ,EAAoBlL,EAA1B,GAEAkL,iDAGH,CAACJ,EAjDJhtT,IAmDOK,mBAAQ,WACb,OAAIo3S,EAAJ,OACS0V,EACH7xV,WAAW6xV,EAAX7xV,kBACE,qBAAsBkd,YAAIu6H,EAD5Bz3I,KADoB,GAKpBgoV,GALJ,GAQF,IACC,CAAC7L,EAXJ,IHwJyB4V,CAAzB,IAEMnB,GAA0B1zU,YAAIo0U,GAApC,IAEMT,GAAiB3M,GACnBmC,EAAgBnC,GADiB,IAArC,KAIMwM,GAAgBG,GAClBxK,EAAgBwK,GADgB,IAApC,KAQMmB,GA0WR,SAAiB,EAAjB,G,MAIE,OAAOxyT,GAAE,SAAGilT,EAAH,MAAT,KA9WsBwN,CAHpBzwE,OACImuE,EAAmB3vV,WAAWwkV,GAAZ,WADtBhjE,IADF,KAIA,GACM5tF,GAAO7uJ,mBACX,kBACEitT,IAAiBA,QAAjB,QACI,CACExyT,GAAIwyT,GADN,GAEE99L,KAAM89L,QAFR,QAGEz4S,KAAMy4S,GAHR,KAIEv2O,SAAUu2O,GAAcv2O,UAPd,OAUlB,CAVF,KAaMmf,G,SI/QNA,EACA60N,EACAC,GAEA,kCAAO,GAAP,IAEEJ,OAAQG,KAAiBA,QAAcC,EAA/BD,MAFH,EAGLF,OAAQE,KAAiBA,SAAeC,EAAhCD,OAA+C,IJwQvCyC,CAAY,GAAD,eAE3BF,QAF2B,EAE3BA,QAF2B,gBAA7B,IAMMG,GAAoB1qO,uBACxB,kBAEE,EAFF,EAEGykO,OAAgB3hT,EAFnB,EAEmBA,QAEjB,GAAKwlT,GAAL,SAIA,IAAM9L,EAAaM,EAAewL,GAAlC,SAEA,MAIA,IAAMqC,EAAiB,IAAIC,EAAO,CAChC7wE,OAAQuuE,GADwB,QAEhC9L,aACAv+M,MAAOA,EAHyB,YAIhCn7F,UAGA9iC,QAPgC,GAQhC2lV,QARgC,SAQzB,GACL,IAAM5tT,EAAKuwT,GAAX,QAEA,MAIA,IAAMpqV,EAAO4+U,EAAb,GAEA,MAIA,IAAOzyC,EAAek+C,GAAtB,QAAOl+C,YACDpsK,EAAwB,CAC5B87I,OAAQ,CAAChiP,KAAI+Z,KAAM5zC,EAAX,KAAsBuuJ,KAAM27L,KAGtC3mT,EAAS,CACPzqC,KAAMolV,EADC,UAEP0F,qBACA/nE,OAAQhiP,IAEV8yT,EAAgB,CAAC7zV,KAAMolV,EAAP,UAAyBn+M,UACzCosK,iBAEFq8C,OAlCgC,SAkC1B,GACJjlT,EAAS,CACPzqC,KAAMolV,EADC,SAEPiJ,iBAGJuB,MAAOkE,EAAc1O,EAxCW,SAyChC/e,SAAUytB,EAAc1O,EAAD,cAGzB2O,MACAC,GAAkB/sN,EAAlB+sN,cAEA,cACE,8CAAO,8CAAAvuV,EAAA,2DAC2CusV,GAAhD,QAAM,EADD,EACC,SADD,EACC,KAAeG,EADhB,EACgBA,wBACjBlrN,EAAJ,MAEI87I,IAAJ,EAJK,oBAKIkxE,EAAc1C,GAArB,QAAO0C,WAEPhtN,EAAQ,CACN87I,OADM,EAEN8qE,MAFM,EAGN14J,QAGEn1L,IAASolV,EAATplV,SAAJ,oBAAsCi0V,EAbnC,iCAc0Bl1S,gBAAgBk1S,EAA3C,IAdC,gBAiBCj0V,EAAOolV,EAAPplV,YAjBD,QAsBLsxV,gBAEA7mT,EAAS,CAACzqC,SACV+zV,SACAC,SAEA,IAAW,EACyBzC,GAAlC,QAAM,EADG,EACH,aAAe1+C,EADZ,EACYA,UACf95F,EAAU/4M,IAASolV,EAATplV,UAAhB,EAEA6zV,EAAgB,CAAC7zV,OAAMinI,UACvB8xE,eAjCG,4CAAP,wDAsCJ,CAACtuK,EArGH,IAwGMypT,GAAoClrO,uBACxC,cAIE,OAAO,cACL,IAAMygG,EAAcxiF,EAApB,YAIEqqN,mBAEA7nI,EAFA6nI,QAGA7nI,EALF,mBAUA,IAAI1Q,EAAQ9xE,EAAOwmN,EAAf10I,WACF0Q,SAAqB,CACnB0qI,WAAY1G,EAAOA,QAGrB6D,aACAoC,GAAkBzsN,EAAlBysN,OAIN,CA5BF,KA+BM/N,G,SKvZNzgC,EACAkvC,GAKA,OAAO9tT,mBACL,kBACE4+Q,EAAA,QAAmC,cACjC,IAEMmvC,EAFN,EAAO5G,OAEkB,gBAAuB6G,YAAD,MAAgB,CAC7D15D,UAAW05D,EADkD,UAE7Dv7I,QAASq7I,EAAoBE,EAAD,eAG9B,4BAAO,GAAP,kBAVQ,MAYZ,CAACpvC,EAZH,ILiZmBqvC,CAAqB,EAAxC,IAKA1uT,aACE,WACE0rT,eAGFrzV,cALF2nC,IAQAI,qBAAU,WACR,KACE4rT,iBAGE9uE,SAA6B8uE,GAAjC,UACEA,iBAED,CAACpM,GARJx/S,KAUAA,qBAAU,WACR,IAAOylT,EAAc6F,GAArB,QAAO7F,WACP,EAAuBsG,GAAvB,QAAM,EAAN,EAAM,OAAS78J,EAAf,EAAeA,KAEf,MAIA,IAAMluD,EAAuB,CAC3B87I,SACA8qE,MAAO,CACLl2U,EAAGw6U,GADE,EAEL7mT,EAAG6mT,GAAwB7mT,GAE7B6pJ,QAGF0+J,EAAgB,CAAC7zV,KAAMolV,EAAP,SAAwBn+M,UACxCykN,iBACC,CAACyG,GAAD,EAA4BA,GAnB/BlsT,IAqBAA,qBACE,WACE,MAA0C+rT,GAA1C,QAAM,EAAN,EAAM,OAASG,EAAf,EAAeA,wBAEf,GAAKpvE,GAAWuuE,GAAZ,SAAJ,GAIA,IAAOpM,EAAcqM,GAArB,QAAOrM,WACDj+M,EAAuB,CAC3B87I,SACA8qE,MAAO,CACLl2U,EAAGw6U,EADE,EAEL7mT,EAAG6mT,EAAwB7mT,GAE7B6pJ,SAGF0+J,EAAgB,CAAC7zV,KAAMolV,EAAP,SAAwBn+M,UACxCi+M,iBAGF,OAAC/vJ,QAAD,EAACA,GAtBHlvJ,KAyBAJ,aAA0B,WACxBmsT,WAAwB,CACtBjvE,UACAyiE,cACAyM,iBACAlM,kBACAD,iBACAoM,oBACAlM,sBACA7wJ,QACAgxJ,uBACAgM,wBAVsB,GAWtBC,mBAGFhB,WAAsB,CACpB55J,QADoB,GAEpB65J,WAAYe,MAEb,CAAC,GAAD,yBAnBHvsT,KrBvbF,YAAgC,yBAE9ByuT,iBAF8B,MAElBvI,GAFkB,yDAM9B5wO,gBAN8B,cAO9B8xH,aAP8B,MAOtB++G,GAPsB,uFAW9BzyF,EAX8B,EAW9BA,UAEA,EAAyDi7F,cAAzD,mBAAM,EAAN,KAAM,EAAN,KACMC,EAAczpT,iBAAoB,CACtCrzB,EADsC,EAEtC2zB,EAAG,IAECmqH,EAAOnvH,mBAAQ,WACnB,UACE,KAAKylT,GAAL,QACE,OAAO+G,EACH,CACE1+N,IAAK0+N,EADP,EAEEz+N,OAAQy+N,EAFV,EAGEz4U,KAAMy4U,EAHR,EAIEx4U,MAAOw4U,EAAmBn7U,GALhC,KAQF,KAAKo0U,GAAL,cACE,SAGJ,cACC,CAACuI,EAAWI,EAhBf,IAiBMC,EAAkB3pT,iBAAxB,GACM4pT,EAAqB5pT,iBAA3B,MACMoqQ,EAAapsL,uBAAY,WAC7B,IAAM2yL,EAAkBi5C,EAAxB,QAEA,MAIA,IAAMntC,EAAagtC,YAAwBE,UAA3C,EACMjtC,EAAY+sC,YAAwBE,UAA1C,EAEAh5C,mBAVF,IAYMk5C,EAA4BvuT,mBAChC,kBACE2mM,IAAU++G,GAAV/+G,UACI,eADJA,UAFqC,IAKvC,CAACA,EALH,IAQAhnM,qBACE,WACE,GAAKmkP,GAAY+7D,EAAb,QAAJ,GADF,oBAME,GANF,IAME,2BAAyD,KAAzD,EAAyD,QACvD,SAAI,MAAA2O,OAAA,EAAAA,EAAA,IAAJ,CAIA,IAAM74V,EAAQkqV,UAAd,GACM4O,EAAuB3O,EAA7B,GAEA,MAIA,MAA2B2C,EAA2B,EAAD,MAArD,GAAM,EAAN,EAAM,UAAYK,EAAlB,EAAkBA,MAQlB,GAAIA,OAAeA,IAAnB,EASE,OARA4L,IAEAJ,YACAK,EAAsB7/C,EAAtB6/C,GAEAR,iBACAE,gBAjCN,8BAuCEF,UAAsB,CAAC98U,EAAD,EAAO2zB,EAAG,GAChCqpT,UAA0B,CAACh9U,EAAD,EAAO2zB,EAAG,GACpC0pT,SAvCEA,MA0CJ,aAQEvmV,eARF,WAcEA,eA3DJw3B,KqB+ZAivT,CAAgB,2BA6EhB,WACE,IAAMC,GAAN,KACE,MAAAC,QAAA,EAAAA,GAAA,mBACIC,EACkB,kBAAfjgD,GAAP,IACIA,WAFN,IAGMA,EACAhrB,GACH+qE,IADH,EAGA,qBAAW//C,EACT,kCAAO,GAAP,IAEEhrB,YAIJ,MAAO,CAACA,WA7FLkrE,IADU,IAEbZ,aAFc,GAGd5B,sBACA3M,uBACAC,8BAGF,IAAM//S,GAAeC,mBAAQ,WA6B3B,MA5B8C,CAC5Cy8O,UACAyiE,cACAC,kBACAC,wBACAH,kBACAI,cACAC,kBAAmB,CACjBvnD,UAAWmzD,IAEbvL,YAAa,CACXC,QADW,GAEXzwL,KAFW,GAGXi0H,OAAQ6rE,IAEV1P,qBACAp7S,WACAq7S,iBACAE,sBACAD,kBACA5wJ,QACAkxJ,oBACAF,uBACAC,2BACAG,wBACAD,iBAID,CAAC,GAAD,sDA9BH,KAsDA,OACE,kBAAC0E,GAAD,UAA4BxvV,MAAOgwV,GACjC,kBAAC9kT,EAAD,UAAkBlrC,MAAO6qC,IACvB,kBAACuqT,GAAD,UAAiCp1V,MAAO2gI,IAF5C,IAME,sBACE+uN,cAAeA,EACfU,wBAAyB4F,GACzBxM,yBAA0BA,QMtjBlC,IAAMwQ,GAAchxT,wBAApB,MAEMixT,GAAN,SAEA,SAAgBC,GAAhB,GAA6B,wBAG3B14O,gBAH2B,SAI3Bs0G,EAJ2B,EAI3BA,WAEA,EASI/mL,qBATJ,GAAM,EAAN,EAAM,SAAN,EAAM,iBAAN,EAAM,iBAAN,EAAM,oBAAN,EAAM,iBAAN,EAAM,iBAAN,EAAM,WAQJ4qJ,EARF,EAQEA,KAEF,EAAM,MACJm8B,EADI,EAAN,OAAO9vK,YAAP,MAAM,GAAN,MAA2Bm0S,uBAA3B,MAAM,YAAN,MAA0DvxN,gBAA1D,MAAqE,EAArE,EAEM+2J,GAAa,MAAApY,OAAA,EAAAA,EAAA,MAAnB,EACM5mJ,EAA8B5xF,qBAClC4wP,EAAay1D,GADf,IAGA,EAA2B8B,cAA3B,mBAAM,EAAN,KAAM,EAAN,KACM3tT,E,SCrCNA,EACAhE,GAEA,OAAOuF,mBAAQ,WACb,OAAOvB,EAAA,QACL,kBAAM,EAAN,EAAM,UAAYg0K,EAAlB,EAAkBA,QAKhB,OAJA//D,KAAkB/R,YAChB8xE,EAAQ9xE,EAAR8xE,IAGF,IANJ,MAUC,CAACh0K,EAXJ,IDkCkB6wT,CAAsBjQ,EAAxC,GACMmG,EAAUD,GAAhB,GAyBA,OAvBA5lT,qBACE,WAGE,OAFA6/S,KAAqB,CAAC5+U,OAAM4zC,KAAMgxS,GAE3B,kBACEhG,EAAP,MAIJ,GATF7/S,IAuBO,CACL88O,SACA0iE,iBACAF,iBACAj0H,WAfyBhrL,mBACzB,iBAAO,CACLkb,OACA4iF,WACA,kBAAgB+2J,GAAc35O,IAAd25O,UAHX,EAIL,uBAJK,EAKL,mBAAoByqD,EAAkBvnD,aAExC,CAAC78O,EAAM4iF,EAAU+2J,EAAYw6D,EAAiB/P,EARhD,YAgBEG,iBACA5qD,aACAp2P,UAAWi4E,OAAWphH,EAPjB,EAQLsL,OACAiuL,OACA0gK,aACA15N,a,SErFY25N,KACd,OAAOvrT,qBAAP,G,SCScwrT,G,GAAa,iBAE3B/4O,gBAF2B,SAG3Bj8E,EAH2B,EAG3BA,GAEA,EAAiCwJ,qBAAjC,GAAM,EAAN,EAAM,SAAN,EAAM,SAAmB4qJ,EAAzB,EAAyBA,KACnB1/B,EAAOzqH,iBAAb,MACA,EAA8B0nT,cAA9B,mBAAM,EAAN,KAAM,EAAN,KACM5G,EAAUD,GAAhB,GAqCA,OAnCAhmT,aACE,WAYE,OAXA4E,EAAS,CACPzqC,KAAMolV,EADC,kBAEPx9I,QAAS,CACP7mK,KACAi8E,WACA91G,KAHO,EAIPuuJ,OACA36G,KAAMgxS,KAIH,kBACLrhT,EAAS,CACPzqC,KAAMolV,EADC,oBAEPrkT,UAIN,CApBF8E,IAuBAI,qBACE,WACEwE,EAAS,CACPzqC,KAAMolV,EADC,qBAEPrkT,KACAi8E,eAIJ,CATF/2E,IAYO,CACL88O,SACAttH,OACA0xI,QAAQ,MAAAhyG,OAAA,EAAAA,EAAA,MAHH,EAILjuL,KAJK,EAKLiuL,OACA0gK,cCvCJ,IAAMG,GAAuCzQ,YAG3C,OAF4BA,aAA5B,cAE6B,4BAA7B,GAGW0Q,GAAsC,CACjDzhO,SADiD,IAEjD0hO,OAFiD,OAGjDC,kBAAmB,GAGRC,GAAc,UACzB,gB,IAAA,IACE3C,mBADF,SAAC,EAAD,EAAC,SAAD,IAGE3oC,qBAHF,MAAC,GAAD,EAAC,EAAD,EAIE1vM,MAJF,IAKEkZ,kBALF,MAAC,GAAD,EAAC,EAAD,EAAC,UAAD,IAOE+hO,sBAPF,MAAC,MAAD,EAAC,EAAD,EAAC,UAAD,IASEv1N,cATF,MASW,IATX,EAWE,EAYIg1N,KAZE,EAAN,EAAM,SAAN,EAAM,iBAAN,EAAM,uBAAN,EAAM,oBAAN,EAAM,iBAAN,EAAM,iBAAN,EAAM,OAAN,EAAM,cAAN,EAAM,sBAAN,EAAM,wBAWJxP,EAXF,EAWEA,WAEInqN,EAAY5xF,qBAAlB,IACM+rT,EAAoB5F,GAAevmE,EAAW,CAClDpH,SACA0iE,eAFkD,EAGlDyM,iBAAkBjM,EAHgC,KAIlDJ,oBACA1wJ,OACAw9J,gBAAiB1M,EANiC,KAOlDE,sBACAC,0BACAjqN,YACAmqN,eAEIiQ,E,SCrERp6N,EACAs5B,EACAwwL,GAEA,IAAMuQ,EAAWxrT,iBAAjB,GAEA,OAAO0hT,aACJC,YACC,IAAMn1J,EAAUg/J,EAAhB,QAEA,GAAI/gM,IAAJ,EAAsB,CACpB,GAAIA,GAAJ,IAEI+hC,SAAiB/hC,EAAjB+hC,MAA8BA,QAAgB/hC,EADhD,OAGA,EAAwC,CACtC,IAAMk9L,EAAe,MAAG1M,OAAH,EAAGA,EAAxB,wBAEA,KAOE,OANc,8BAAH,IAETtuU,EAAGg7U,OAAuBl9L,EAFd,KAGZnqH,EAAGqnT,MAAsBl9L,EAAKrhC,MAQtCoiO,eAKJ,CAAC/gM,EAAMt5B,EA7BT,ID+D2Bs6N,CAAoB,EAAD,EAG1CxQ,UAHF,SAKM9qD,EAAN,OAAmBpY,EACb2zE,EAAqB,MAAGH,EAAH,EAA3B,EACMI,EAAiBlD,EAAW,6BAE9B,GAF8B,IAI5B5C,OAFF,EAGEC,OAAQ,IAER11O,EAAyCqqO,EAAc,aAEvD1oO,SADF,QAEE3hC,MAAOqqQ,EAFT,MAGEp0N,OAAQo0N,EAHV,OAIErxN,IAAKqxN,EAJP,IAKEprU,KAAMorU,EALR,KAME3kN,SACA3E,UAAWy6N,uBAPb,GAQEC,YARF,OASE9xN,gBACE0uN,KACI5M,EAA2B,EAD/B4M,QAVJ,EAgBEn/N,WAAYiiO,OAAgB,EAEF,oBAAfjiO,EACPA,EADA,GAlBN,GAqBKwiO,QAtBT,EAyBMxlI,EAAa6pE,EACf,CACE//K,QACAh1E,WACA8yC,YACAijD,UAAWw6N,QALjB,EAQMI,EAAqB/rT,iBAA3B,GACMgsT,EAAiB,MAAG1lI,EAAH,EAAiBylI,EAAxC,QACA,EAAM,MACJC,EADI,EAAN,GAAM,EAAN,EAAO5wT,SAA0C6wT,GAAjD,EAAgC96N,UAAhC,kBAEM+6N,EAAelsT,iBAAM,eAAC+3O,OAAD,EAACA,EAAD,MAA3B,MACMo0E,E,YEtGuB,uHAS/Bh7N,EAT+B,EAS/BA,UAEA,EAA0D39E,oBAA1D,sBAAM,EAAN,KAAM,EAAN,KA8FA,OA5FAvY,qBAAU,WACH2iR,GAAD,MAAJ,EAQAxuB,uBAAsB,W,MACdg9D,EAAS,SAAGtR,EAAH,WAAGA,OAAlB,QAEA,GAAI3pN,SAAJ,OAAsCi7N,aAA+B,CACnE,IAAMC,EAAWnwV,sBAAkCA,WAAnD,GAEA,KAAc,CACZ,IAAM4H,EAAOuoV,EAAb,wBACMtoV,EAAK86U,GAAX,GACMgE,EAAQ,CACZl2U,EAAG7I,OAAYC,EADH,KAEZu8B,EAAGx8B,MAAWC,EAAGqlH,KAGnB,GAAIv3H,SAASgxV,EAAThxV,IAAqBA,SAASgxV,EAAlC,GAA4C,CAC1C,IAAMyJ,EAAa,CACjBzG,OAAQ4C,EACH1kV,QAAWotH,EAAZ,OAAgCrtH,EADjB,MADF,EAIjBgiV,OAAQ2C,EACH1kV,SAAYotH,EAAb,OAAiCrtH,EADlB,OAEf,GAEA6nV,EAAiB,oCACrBh/U,EAAGwkH,IAAc0xN,EAD2B,EAE5CviT,EAAG6wF,IAAc0xN,EAF2B,GAGzCyJ,IAECC,EAAkBH,QAAxB,QA8BA,OA5BA,MAAIjB,IACFiB,mCAGoBlwV,EAAA,QACpB,CACE,CACEi1H,UAAWy6N,2BAEb,CACEz6N,UAAWw6N,IAGf,CACET,SACA1hO,aAIJgjO,SAAyB,WACvBtwV,uBAEAuwV,MAEIL,GAAJ,MAAiBjB,IACfiB,uBAQVK,SAtEA,GACEA,QAuEH,CAAC,EAAD,cA1EHxxT,IAsFAJ,aAA0B,WACxB,GACE4xT,QAED,CAJH5xT,IAMA,EFHgC6xT,CAAiB,CAC7C9uC,QAASzrT,QAAQ2tT,GAAiBosC,EAAjBpsC,UAD4B,GAE7C2oC,cACAtC,SAAU+F,EAHmC,QAI7CpR,iBACAtxN,SAAQ,MAAEs2L,OAAF,EAAEA,EALmC,SAM7CorC,OAAM,MAAEprC,OAAF,EAAEA,EANqC,OAO7CqrC,kBAAiB,MAAErrC,OAAF,EAAEA,EAP0B,kBAQ7C5jT,KAAM++U,UARuC,QAS7C9pN,UAAS,SAAE46N,EAAF,gBAAEA,EAA4B56N,YAEnCw7N,EAAex6V,QACnBy6V,IAAkBxxT,GAAa0kR,IADjC,IAoBA,OAhBA7kR,qBAAU,WACiC,OAArC,MAAA88O,OAAA,EAAAA,EAAA,MAAem0E,EAAnB,UACEA,yBAAuBn0E,OAAvBm0E,EAAuBn0E,EAAvBm0E,YAGEn0E,GAAUg0E,YAAd,IACEA,eAED,CAACh0E,EARJ98O,IAUAA,qBAAU,WACR,IACE8wT,oBAED,CAJH9wT,IAMA,EAIO,+CAEL,GAFK,IAIH1qC,IAAK0qV,EAAYv8D,SAJrB,GAHE,S,6BG7JN,IAAIjjE,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wCACD,OAEJ3K,EAAQywH,QAAUq4I,G,6BCflB9oQ,EAAQuhN,YAAa,EAErBvhN,EAAQywH,QAAU,SAAUv+F,EAAUC,GACpC,KAAMD,aAAoBC,GACxB,MAAM,IAAIjrB,UAAU,uC,gBCNxB,IAQI01V,EACAC,EATAC,EAAM78V,EAAQ,MACd88V,EAAc98V,EAAQ,MAWtB+8V,EAAa,EACbC,EAAa,EA+FjBl9V,EAAOC,QA5FP,SAAY6wC,EAASq3H,EAAKv1J,GACxB,IAAI9K,EAAIqgK,GAAOv1J,GAAU,EACrBlI,EAAIy9J,GAAO,GAGXj8J,GADJ4kC,EAAUA,GAAW,IACF5kC,MAAQ2wV,EACvBM,OAAgCv8V,IAArBkwC,EAAQqsT,SAAyBrsT,EAAQqsT,SAAWL,EAKnE,GAAY,MAAR5wV,GAA4B,MAAZixV,EAAkB,CACpC,IAAIC,EAAYL,IACJ,MAAR7wV,IAEFA,EAAO2wV,EAAU,CACA,EAAfO,EAAU,GACVA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAGtD,MAAZD,IAEFA,EAAWL,EAAiD,OAApCM,EAAU,IAAM,EAAIA,EAAU,KAQ1D,IAAIC,OAA0Bz8V,IAAlBkwC,EAAQusT,MAAsBvsT,EAAQusT,OAAQ,IAAIxqU,MAAOC,UAIjEwqU,OAA0B18V,IAAlBkwC,EAAQwsT,MAAsBxsT,EAAQwsT,MAAQJ,EAAa,EAGnEK,EAAMF,EAAQJ,GAAeK,EAAQJ,GAAY,IAcrD,GAXIK,EAAK,QAA0B38V,IAArBkwC,EAAQqsT,WACpBA,EAAWA,EAAW,EAAI,QAKvBI,EAAK,GAAKF,EAAQJ,SAAiCr8V,IAAlBkwC,EAAQwsT,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAI5wV,MAAM,mDAGlBuwV,EAAaI,EACbH,EAAaI,EACbR,EAAYK,EAMZ,IAAI9gM,GAA4B,KAAb,WAHnBghM,GAAS,cAG+BC,GAAS,WACjD5yV,EAAE5C,KAAOu0J,IAAO,GAAK,IACrB3xJ,EAAE5C,KAAOu0J,IAAO,GAAK,IACrB3xJ,EAAE5C,KAAOu0J,IAAO,EAAI,IACpB3xJ,EAAE5C,KAAY,IAALu0J,EAGT,IAAImhM,EAAOH,EAAQ,WAAc,IAAS,UAC1C3yV,EAAE5C,KAAO01V,IAAQ,EAAI,IACrB9yV,EAAE5C,KAAa,IAAN01V,EAGT9yV,EAAE5C,KAAO01V,IAAQ,GAAK,GAAM,GAC5B9yV,EAAE5C,KAAO01V,IAAQ,GAAK,IAGtB9yV,EAAE5C,KAAOq1V,IAAa,EAAI,IAG1BzyV,EAAE5C,KAAkB,IAAXq1V,EAGT,IAAK,IAAIjyV,EAAI,EAAGA,EAAI,IAAKA,EACvBR,EAAE5C,EAAIoD,GAAKgB,EAAKhB,GAGlB,OAAOi9J,GAAY60L,EAAYtyV,K,6BCzGjC,gEAKO,SAAS2+T,EAAWl8G,GAAgC,IAAnBswI,EAAkB,wDACxD,GAAoB,KAAhBtwI,GAAqC,MAAfA,EACxB,OAAO,KAET,IAAMt8F,EAAO,IAAIh+F,KAAKs6L,GAEtB,GAAKtlB,YAAYh3E,GAEV,CACL,GAA2B,KAAvBs8F,EAAYxmN,OACd,OAAOwmN,EAGT,IAAMuwI,EAAgB,IAAI7qU,KAAK2tF,IAAOoyH,IAAIzlB,GAAa5tK,UACjDsxE,EAAI,UAAM6sO,EAAcn8G,cAApB,aAAsC,KAAOm8G,EAAcjxG,WAAa,IAAI73O,OAAO,GAAnF,aAA0F,IAAM8oV,EAAchxG,WAAW93O,OAAO,IAC1I,OAAI6oV,EACI,GAAN,OAAU5sO,EAAV,YAAkB6sO,EAAct2E,WAAhC,aAA+C,IAAMs2E,EAAcr2E,cAAczyQ,OAAO,GAAxF,aAA+F,IAAM8oV,EAAcp2E,cAAc1yQ,OAAO,IAEjIi8G,EAXT,OAAO,KAgBIw4M,O,6BC1Bf,IAAI59G,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,oMACD,kBAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,wDAEe,SAASvlI,IACtB,OAAOm6N,eAA4B/7I,M,wRC2CxBg8I,EAAcngR,WAAW,KAwEzBogR,E,WAyDJ,WACL3rJ,EACA4rJ,EACAC,GAEA,IACIC,EAQAC,EAVaC,EACjB,uDADoCN,EACpC,oCAEKE,EAIHE,EAAgBF,GAHhBE,EAAgB,IAAI,KACNG,UAAUjsJ,GAMrB6rJ,EAIHE,EAAyBF,GAHzBE,EAAyB,IAAI,KACNE,UAAUjsJ,GAKnCptM,KAAKiX,OAAS,CAAC,CAAE+hV,MAAOE,IAEpB9rJ,GAEFptM,KAAKs5V,WAAWlsJ,GAGlBptM,KAAKu5V,gBAAkBJ,E,+CAWlB,SAAYzvU,GACjB,OAAO1pB,KAAKo5V,SAAW1vU,I,wBASlB,SAAW0jL,GAEhB,IAAM94E,EAAMt0H,KAAKw5V,cACjBllO,EAAI84E,OAASA,EACb94E,EAAI0kO,MAAMK,UAAUjsJ,GAEhBA,GAAUA,EAAOqsJ,mBAEnBrsJ,EAAOqsJ,sB,uBASJ,WAGL,IAAMT,EAAQh5V,KAAK05V,WAAWl/S,QAO9B,OALAx6C,KAAK25V,WAAWvtV,KAAK,CAEnBghM,OAAQptM,KAAKioT,YACb+wC,UAEKA,I,sBAQF,WAEL,QAAIh5V,KAAK25V,WAAW93V,QAAU,MAErB7B,KAAK25V,WAAWttV,Q,uBAQpB,SAAau4B,GAAkC,IAIhDg1T,EAJgD,OAE9CZ,EAAQh5V,KAAK65V,YAGnB,IACED,EAAqBh1T,EAASo0T,GAC9B,MAAO5wV,GAGP,MADApI,KAAK85V,WACC1xV,EAGR,OAAI,YAAWwxV,GAENA,EAAmBrjR,MACxB,SAAAurE,GAGE,OADA,EAAKg4M,WACEh4M,KAET,SAAA15I,GAGE,MADA,EAAK0xV,WACC1xV,MAMZpI,KAAK85V,WACEF,K,uBAQF,WAEL,OAAO55V,KAAKw5V,cAAcpsJ,S,sBAQrB,WAEL,OAAOptM,KAAKw5V,cAAcR,Q,+BAMrB,WACL,OAAOh5V,KAAKu5V,kB,sBAOP,WACL,OAAOv5V,KAAKiX,S,yBAOP,WACL,OAAOjX,KAAKiX,OAAOjX,KAAKiX,OAAOpV,OAAS,K,8BAQnC,SAAiBk4V,EAAoBpV,GAC1C,IAAMqV,EAAWh6V,KAAKi6V,aAAetV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cACvE4oJ,EAAqB,IAAItyV,MAAM,6BASrC,OAPA5H,KAAK05V,WAAWS,iBAAiBJ,EAAjC,yBACEK,kBAAmBL,EACnBG,sBACGvV,GAHL,IAIErzI,SAAU0oJ,KAGLA,I,4BAQF,SACL3oT,EAEAx3B,EACA8qU,GAEA,IAAMqV,EAAWh6V,KAAKi6V,aAAetV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cACvE4oJ,EAAqB,IAAItyV,MAAMypC,GASrC,OAPArxC,KAAK05V,WAAWW,eAAehpT,EAASx3B,EAAxC,yBACEugV,kBAAmB/oT,EACnB6oT,sBACGvV,GAHL,IAIErzI,SAAU0oJ,KAGLA,I,0BAQF,SAAa7yN,EAAcw9M,GAChC,IAAMqV,EAAUrV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cAMxD,OALKnqE,EAAMjnI,OACTF,KAAKi6V,aAAeD,GAGtBh6V,KAAK05V,WAAWY,aAAanzN,EAA7B,2BAAyCw9M,GAAzC,IAA+CrzI,SAAU0oJ,KAClDA,I,yBAQF,WACL,OAAOh6V,KAAKi6V,e,2BAQP,SAAcM,EAAwB5V,GAE3C,MAA0B3kV,KAAKw5V,cAAvBR,EAAR,EAAQA,MAAO5rJ,EAAf,EAAeA,OAEf,GAAKA,EAAL,CAEA,MACGA,EAAOotJ,YAAcptJ,EAAOotJ,cAAiB,GADhD,IAAQC,wBAAR,MAA2B,KAA3B,MAAiCC,sBAAjC,MAvXwB,IAuXxB,EAGA,KAAIA,GAAkB,GAAtB,CAEA,IAAMC,EAAY,cACZC,EAAmB,OAAnB,IAAmB,CAAnB,CAAqBD,aAAcJ,GACnCM,EAAkBJ,EACnB,aAAe,kBAAMA,EAAiBG,EAAkBjW,MACzDiW,EAEoB,OAApBC,IAEAztJ,EAAOxkG,MACTwkG,EAAOxkG,KAAK,sBAAuBiyP,EAAiBlW,GAWtDqU,EAAM8B,cAAcD,EAAiBH,Q,qBAOhC,SAAQvwP,GAGbnqG,KAAK05V,WAAWqB,QAAQ5wP,GAExBnqG,KAAKg7V,oBAAoBD,QAAQ5wP,K,qBAO5B,SAAQwqH,GAGb30N,KAAK05V,WAAWuB,QAAQtmI,GAExB30N,KAAKg7V,oBAAoBC,QAAQtmI,K,uBAO5B,SAAUumI,GAGfl7V,KAAK05V,WAAWyB,UAAUD,GAE1Bl7V,KAAKg7V,oBAAoBG,UAAUD,K,oBAO9B,SAAO52V,EAAa5I,GAGzBsE,KAAK05V,WAAWpwL,OAAOhlK,EAAK5I,GAE5BsE,KAAKg7V,oBAAoB1xL,OAAOhlK,EAAK5I,K,sBAOhC,SAAS4I,EAAa82V,GAG3Bp7V,KAAK05V,WAAW2B,SAAS/2V,EAAK82V,GAE9Bp7V,KAAKg7V,oBAAoBK,SAAS/2V,EAAK82V,K,wBAQlC,SAAW5sV,EAActF,GAG9BlJ,KAAK05V,WAAW4B,WAAW9sV,EAAMtF,GAEjClJ,KAAKg7V,oBAAoBM,WAAW9sV,EAAMtF,K,4BAQrC,SAAe07B,GAEpB,MAA0B5kC,KAAKw5V,cAAvBR,EAAR,EAAQA,MAAR,EAAe5rJ,QAEbxoK,EAASo0T,K,iBAQN,SAAIp0T,GAET,IAAM22T,EAASC,EAASx7V,MACxB,IACE4kC,EAAS5kC,MADX,QAIEw7V,EAASD,M,4BAQN,SAAsCE,GAE3C,IAAMruJ,EAASptM,KAAKioT,YACpB,IAAK76G,EAAQ,OAAO,KACpB,IAEE,OAAOA,EAAOsuJ,eAAeD,GAC7B,MAAOE,GAEP,OADA,KAAe,IAAO1zU,KAAP,sCAA2CwzU,EAAYx6T,GAAvD,0BACR,Q,8BAuBJ,SAAiB/3B,EAA6B0yV,GACnD,IAAMhoV,EAAS5T,KAAK67V,qBAAkC,mBAAoB3yV,EAAS0yV,GAE/E,MAAgBhoV,IAEH5T,KAAKioT,YAMlB,IAAOhgS,KAAP,sKAJA,IAAOA,KACL,iHAUN,OAAOrU,I,0BAOF,WACL,OAAO5T,KAAK67V,qBAAgD,kB,4BAQvD,WAAkD,IAAnCC,EAAmC,wDAEvD,GAAIA,EAEF,OAAO97V,KAAK87V,aAId97V,KAAK+7V,uB,wBAOA,WAEL,IACM/C,EADQh5V,KAAKw5V,cACCR,MACd3uP,EAAU2uP,EAAMgD,aAClB3xP,GACF,YAAaA,GAEfrqG,KAAK+7V,qBAGL/C,EAAMiD,e,0BAOD,SAAa/yV,GAElB,MAA0BlJ,KAAKw5V,cAAvBR,EAAR,EAAQA,MAAO5rJ,EAAf,EAAeA,OACf,EAAwDA,GAAUA,EAAOotJ,cAAiB,GAAlFjnF,EAAR,EAAQA,QAAR,IAAiB2oF,mBAAjB,MAA+B,IAA/B,EAGQ/qJ,GAAc,IAAWH,WAAa,IAAtCG,UAEF9mG,EAAU,YAAY,yBAC1BkpK,UACA2oF,cACA/xP,KAAM6uP,EAAMmD,WACRhrJ,GAAa,CAAEA,cAChBjoM,IAICkzV,EAAiBpD,EAAMgD,YAAchD,EAAMgD,aAUjD,OATII,GAA4C,OAA1BA,EAAe32P,QACnC,YAAc22P,EAAgB,CAAE32P,OAAQ,WAG1CzlG,KAAK87V,aAGL9C,EAAMiD,WAAW5xP,GAEVA,I,kCAUF,WAEL,IAAM+iG,EAASptM,KAAKioT,YACdj8Q,EAAUohK,GAAUA,EAAOotJ,aACjC,OAAOn9V,QAAQ2uC,GAAWA,EAAQqwT,kB,gCAM5B,WAEN,MAA0Br8V,KAAKw5V,cAAvBR,EAAR,EAAQA,MAAO5rJ,EAAf,EAAeA,OAET/iG,EAAU2uP,EAAMgD,aAClB3xP,GAAW+iG,GAAUA,EAAOkvJ,gBAC9BlvJ,EAAOkvJ,eAAejyP,K,kCASlB,SAAwBhD,GAC9B,IAAMk1P,EAAUC,IACVC,EAASF,EAAQ/f,WACvB,GAAIigB,GAAUA,EAAOC,YAAmD,oBAA9BD,EAAOC,WAAWr1P,GAAwB,4BAHnCr8E,EAGmC,iCAHnCA,EAGmC,kBAClF,OAAOyxU,EAAOC,WAAWr1P,GAAQp/F,MAAMjI,KAAMgrB,GAE/C,KAAe,IAAO/C,KAAP,2BAAgCo/E,EAAhC,2C,KAWZ,SAASm1P,IAKd,OAJA,IAAWhgB,WAAa,IAAWA,YAAc,CAC/CkgB,WAAY,GACZC,SAAK7gW,GAEA,IAWF,SAAS0/V,EAASmB,GACvB,IAAMxmD,EAAWqmD,IACXjB,EAASqB,EAAkBzmD,GAEjC,OADA0mD,EAAgB1mD,EAAUwmD,GACnBpB,EAaF,SAASuB,IAEd,IAAM3mD,EAAWqmD,IAEjB,GAAIrmD,EAASqmC,YAAcrmC,EAASqmC,WAAWugB,IAAK,CAClD,IAAMJ,EAAMxmD,EAASqmC,WAAWugB,IAAID,gBAEpC,GAAIH,EACF,OAAOA,EAKX,OAAOK,EAAa7mD,GAQf,SAAS6kD,IAEd,OAAO8B,IAAgB9B,oBAIzB,SAASgC,IAAwD,IAA3C7mD,EAA2C,uDAAvBqmD,IAaxC,OATGS,EAAgB9mD,KAEjBymD,EAAkBzmD,GAAU+mD,YAAYpE,IAGxC+D,EAAgB1mD,EAAU,IAAI4iD,GAIzB6D,EAAkBzmD,GA8CpB,SAASgnD,EAAuBv4T,GAAgE,IAA7CoH,EAA6C,uDAAP,GACxFmqQ,EAAWqmD,IAEjB,OAAIrmD,EAASqmC,YAAcrmC,EAASqmC,WAAWugB,IACtC5mD,EAASqmC,WAAWugB,IAAII,oBAAoBv4T,EAAUoH,GAIxDpH,IAOT,SAASq4T,EAAgBV,GACvB,SAAUA,GAAWA,EAAQ/f,YAAc+f,EAAQ/f,WAAWmgB,KAUzD,SAASC,EAAkBL,GAEhC,OAAO,YAAwB,OAAO,kBAAM,IAAIxD,IAAOwD,GAUlD,SAASM,EAAgBN,EAAkBI,GAChD,QAAKJ,KACeA,EAAQ/f,WAAa+f,EAAQ/f,YAAc,IACpDmgB,IAAMA,GACV,K,6BCj4BTv+V,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQiiW,SAAWjiW,EAAQkiW,KAAOliW,EAAQmiW,aAAeniW,EAAQoiW,YAAcpiW,EAAQqiW,WAAQ1hW,EAE/F,IAEI2hW,EAAiB92I,EAFDvrN,EAAQ,OAMxBsiW,EAAiB/2I,EAFDvrN,EAAQ,OAMxBuiW,EAAeh3I,EAFDvrN,EAAQ,OAMtBwiW,EAAUj3I,EAFAvrN,EAAQ,OAMlByiW,EAAWl3I,EAFDvrN,EAAQ,OAMlB0iW,EAASn3I,EAFAvrN,EAAQ,OAIrB,SAASurN,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQqiW,MAAQI,EAAQhyO,QACxBzwH,EAAQoiW,YAAcK,EAAQhyO,QAC9BzwH,EAAQmiW,aAAeO,EAASjyO,QAChCzwH,EAAQkiW,KAAOS,EAAOlyO,QACtB,IAAIwxO,EAAWjiW,EAAQiiW,SAAW,SAAkBlkR,GAClD,IAAK,IAAInuD,EAAOrnB,UAAU7B,OAAQk8V,EAAct8V,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IACrG8yU,EAAY9yU,EAAO,GAAKvnB,UAAUunB,GAGpC,IAAI+yU,GAAc,EAAIP,EAAe7xO,SAASmyO,GAC1ClsV,GAAS,EAAI6rV,EAAe9xO,SAAS1yC,EAAS8kR,GAClD,OAAO,EAAIL,EAAa/xO,SAAS/5G,IAGnC1W,EAAQywH,QAAUwxO,G,6BC7ClBjiW,EAAQuhN,YAAa,EAErB,IAIgC51M,EAJ5BkuE,EAAkB55E,EAAQ,MAE1B6iW,GAE4Bn3V,EAFckuE,IAEOluE,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQywH,QAAU,WAChB,SAASz+F,EAAiBH,EAAQkd,GAChC,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CACrC,IAAI21G,EAAazuE,EAAMlnC,GACvB21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EACjD6wG,EAAW5wG,cAAe,EACtB,UAAW4wG,IAAYA,EAAW3wG,UAAW,IACjD,EAAIi2V,EAAiBryO,SAAS5+F,EAAQ2rF,EAAWr0G,IAAKq0G,IAI1D,OAAO,SAAUrrF,EAAasrF,EAAYC,GAGxC,OAFID,GAAYzrF,EAAiBG,EAAYnvB,UAAWy6G,GACpDC,GAAa1rF,EAAiBG,EAAaurF,GACxCvrF,GAdO,I,6BCRlB,IAAIq5L,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,+OACD,UAEJ3K,EAAQywH,QAAUq4I,G,gPCwHZi6F,EAA8BjjR,aAbrB,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GACNu3P,cAAe,GAEfl9I,KAAM,GAENm9I,YAAa,CACX9oK,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5BT,MAAO,MAI2BxpC,EA3F2B,SAAC,GAa1D,EAZJ30C,SAYK,IAAD,IAXJ4D,aAWI,MAXI,GAWJ,EAVJgvC,EAUI,EAVJA,QACA04C,EASI,EATJA,KASI,IARJ34C,kBAQI,MARS,SAQT,MAPJa,eAOI,MAPM,aAON,MANJ24O,uBAMI,aALJ8S,iBAKI,MALQ,EAKR,MAJJvrN,gBAII,MAJO,KAIP,EAHJ95G,EAGI,EAHJA,KAGI,IAFJ+uQ,eAEI,MAFM,KAEN,EADD3qP,EACC,iBACJ,EAEI4lB,EADFyvE,kBADF,MACe,GADf,EAGA,OAAO,eAAC,IAAD,CACLngC,WAAW,EACXP,WAAYA,EACZa,QAASA,EACTU,KAAK,SAJA,UAODi4O,GAA+B,aAAZ34O,EAwBjB,KAvBA,cAAC,IAAD,CACEN,WAAW,EACXP,WAAW,SACXW,MAAM,EACNR,UAAWF,EAAQ41L,cACnBxzJ,MAAO,CACLhgC,MAhDK,IA0CT,SAUIs2C,EACI,cAAC,IAAD,CACEA,KAAMA,EACN71H,KAAK,KACLsiR,YAAY,EACZjlM,UAAWm0C,IAAWr0C,EAAQ61L,YAAa71L,EAAQ04C,QAErDq9I,EAAUxqO,eAAmBwqO,EAAS,CACpC9nJ,SAAU,QACV/tC,UAAWm0C,IAAWr0C,EAAQ61L,YAAa71L,EAAQ04C,KAAMq9I,EAAQ/kO,MAAMkvC,aACpE,OAKnB,cAAC,IAAD,CACEQ,MAAM,EACN0hC,MAAO,CACLhgC,MAAOm3O,EAAkB,OAAH,sBAtEX,GAsEW,QAH1B,SAME,cAAC,QAAD,yBACEn5O,UAAWwgC,IACXE,SAAUA,GACN11F,GAHN,IAIE4lB,MAAK,yBACH0vE,iBAAkB,CAChBC,WAAW,IAEV3vE,GAJA,IAKHyvE,WAAW,yBACTA,WAAY,CAAEvgC,UAAWF,EAAQurC,OACjCvkH,QACGy5G,GAHK,IAIRwkP,UAAW54B,EAAY,EACvB64B,QAAS74B,iBAuBN24B,O,6BCzIf,4MACO,IAAMr+S,EAAsB,WACtBw+S,EAA0B,uCAC1BC,EAAqC,iCACrCC,EAAmC,+BACnCC,EAAkB,gBAClBC,EAAiB,gB,6BCR9B,wVAcI/+S,EAdJ,gCAgBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAGI8rV,EAAwB,kBAAM7rT,YACzC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,mBAG/C46V,EAAyB,kBAAM9rT,YAC1C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,oBAG/C66V,EAAwB,kBAAM/rT,YACzC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,mBAG/C86V,EAA6B,kBAAMhsT,YAC9C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,qBAG/C+6V,EAAsB,kBAAMjsT,YACvC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,iBAG/Cg7V,EAA+B,kBAAMlsT,YAChDisT,KACA,SAACxqB,GAAD,OAAqC/7G,aAAWhtN,QAAO,SAAArL,GAAI,OAAIo0U,EAAU3yT,MAAK,SAAAq9U,GAAQ,OAAIA,EAASj7V,IAAI,WAAa7D,EAAKA,eAG9G++V,EAAoC,kBAAMpsT,YACrD8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,+BAG/Cm7V,EAA+B,SAACjiN,GAAD,OAA0BpqG,YACpE8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMpmB,MAAM,CAAC,0BAA2Bq8H,EAAc,eAG3FkiN,EAA0B,kBAAMtsT,YAC3C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,mB,4ZC1E5Cq7V,IACXC,wEAEH,OAAO74T,mBACL,kBAAOp/B,YACLi4V,WAAc5jW,YAAD,OAASA,EAAtB4jW,SAFJ,GCJF,IAAaC,EACO,qBAAX5wU,QAAP,qBACOA,OAAP,UAFK,qBAGEA,gBAAP,cCIWqX,EAA4Bu5T,EAAS,kBAA3C,Y,SCNS5K,IACd,IAAM6K,EAAcr0T,iBAApB,MAaA,MAAO,CAXKg+E,uBAAY,cACtBq2O,UAAsBC,YAAYx6T,EAAlCu6T,KADF,IAIcr2O,uBAAY,WACxB,OAAIq2O,YACFE,cAAcF,EAAdE,SACAF,kBAHJ,K,SCPc3S,EACdhoT,EACA0C,GAEA,IAAMo4T,EAAWx0T,mBAEjB,OAAO1E,mBACL,WACE,IAAM32B,EAAW+0B,EAAS86T,EAA1B,SAGA,OAFAA,YAEA,IALU,YAAd,I,SCNc9M,IACd,IAAMxrV,EAAO8jC,iBAAb,MACM6qT,EAAa7sO,uBAAa4+E,YAC9B1gM,cADF,IAIA,MAAO,CAACA,EAAR,GCNF,IAAIm9R,EAAJ,GAEA,SAAgBkkB,EAAY9qQ,EAAgBjiD,GAC1C,OAAO8qC,mBAAQ,WACb,KACE,SAGF,IAAMvF,EAAKsjQ,aAA0BA,KAArC,EAGA,OAFAA,OAEA,UAAU5mP,EAAV,iBACC,CAACA,EATJ,ICLF,SAASgiT,EAAmBnY,GAC1B,OAAO,8FAIL,OAAOC,EAAA,QACL,cAGE,IAFA,IAEA,MAFgBrpV,eAAhB,GAEA,eAA8C,CAAzC,0BAAM,EAAN,KAAL,EAAK,KACG1C,EAAQugF,EAAd,GAEA,MAAIvgF,IACFugF,KAAoBvgF,EAAQ8rV,EAA5BvrQ,GAIJ,WAZG,eAeA93E,KAMX,IAAawa,EAAMghV,EAAZ,GACMpgV,EAAWogV,GAAjB,GCdM7I,EAAM14V,OAAA,OAAc,CAC/BwhW,UAAW,CACT3+V,SADS,SACD,GACN,MAIA,IAAM,EAAN,EAAM,EAAIuqC,EAAV,EAAUA,EAEV,4BAAsB3zB,EAAI9a,WAAH,GAAmB,EAA1C,eACEyuC,EAAIzuC,WAAH,GADH,eAKJ8iW,MAAO,CACL5+V,SADK,SACG,GACN,MAIA,IAAM,EAAN,EAAM,OAAS+vV,EAAf,EAAeA,OAEf,uBAAiBD,EAAjB,8BAGJ+O,UAAW,CACT7+V,SADS,SACD,GACN,KAIA,MAAO,CACL61V,qBADK,GAELA,iBAFK,SAAP,OAMJiJ,WAAY,CACV9+V,SADU,YACF,IAAC,EAAD,EAAC,WAAD,EAAC,SAAqBm1V,EAAtB,EAAsBA,OAC5B,gBAAUn0K,EAAV,YAAsBvtD,EAAtB,sB,6BClDN,IAAIiyF,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,qGACD,QAEJ3K,EAAQywH,QAAUq4I,G,ymBCkBL+7F,EAA8B,oBAE9BC,EAA4B,SAACvkW,GACxC,IAAMK,EAAOL,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAChD8S,EAAO9S,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAQtD,MADgB,CALKK,EAAOm9B,uBAAP,UAAiCysE,IAAQ55E,EAAE,mDACvCvd,IACM,IAAIssC,OAAO,IAAMklT,EAA4BpnR,QAAQ,OAAQ,KAAKA,QAAQ,MAAO,OAAS,KAAM,KAAM79B,KAAKvsC,IADjH,UAEOm3F,IAAQ55E,EAAE,iCAFjB,aAEsD45E,IAAQ55E,EAAE,qCAFhE,YAEwGi0U,EAA4BpnR,QAAQ,MAAO,IAAIyxD,cAFvJ,MAIwB9+H,QAAO,SAACsM,GAAD,OAAOA,KAAG4J,KAAK,aACrD3lB,GAGPokW,EAAgC,SAACxkW,GAAD,OAAWsoM,YAA6B,IAA7BA,CAAyCtoM,IAEpFykW,EAA8B,SAACzkW,GAAD,OAAW6nM,YAA2B,IAAY,GAAG,EAA1CA,CAAgD7nM,IAEzF0kW,EAAiB,SAAC1kW,EAAOyP,GAAR,OAAmBm4L,YAAa,OAACn4L,QAAD,IAACA,OAAD,EAACA,EAAQyV,MAAM,CAAC,YAAa,QAAS,MAAO,aAA1D0iL,CAAwE5nM,IAE5G2kW,EAAgB,SAAC3kW,EAAOyP,GAAR,OAAmBk4L,YAAY,OAACl4L,QAAD,IAACA,OAAD,EAACA,EAAQyV,MAAM,CAAC,YAAa,OAAQ,MAAO,aAAxDyiL,CAAsE3nM,IAEhH4kW,EAAmB,SAACpgW,EAAMiL,GAC9B,MAAK,OAACA,QAAD,IAACA,OAAD,EAACA,EAAQyV,MAAM,CAAC,YAAa1gB,EAAM,MAAO,mBAAkB,OAACiL,QAAD,IAACA,OAAD,EAACA,EAAQyV,MAAM,CAAC,YAAa1gB,EAAM,MAAO,WAG3G,MAAO,uDAGIqgW,EAAkB,SAAC7kW,EAAOyP,GAAR,OAAmBm1V,EAAiB,OAAQn1V,IAE9Dq1V,EAAmB,SAAC9kW,EAAOyP,GAAR,OAAmBm1V,EAAiB,QAASn1V,IA8EvEqkH,GAzEErwF,iBAAemB,IAGhB,IAIWkoS,IAAmC7iO,IAAQ55E,EAAE,+CACtD,IAKDoT,iBAAekB,OAGhB,IAIWkoS,IAAoC5iO,IAAQ55E,EAAE,qDACvD,IAQF,IAIWy8S,IAAmC7iO,IAAQ55E,EAAE,+CAC7Cw8S,IAAoC5iO,IAAQ55E,EAAE,qDACvD,IAsCSqjG,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D4xF,oBAAqB,CACnBptO,aAAcn4C,EAAMZ,UACpBi3C,OAAQr2C,EAAMZ,QAAQ,KAExB4vC,MAAO,CACL/C,SAAU,SACVkM,aAAcn4C,EAAMZ,UACpB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B3rC,UAAW,CACT8iC,UAAWphC,EAAMZ,iBAIfomR,EAAwC,SAAC,GAA8G,IAA7G5/T,EAA4G,EAA5GA,MAAOtyB,EAAqG,EAArGA,KAAqG,IAA/F8gQ,eAA+F,MAArF,GAAqF,MAAjF31J,kBAAiF,MAApE,GAAoE,MAAhEK,gBAAgE,MAArD,GAAqD,MAAjD5+G,eAAiD,aAAhCulW,aAAgC,SACpJC,EAAmBpyV,EAAKjF,SAAS,QACvC,OACE,qCACE,cAAC,IAAD,CAAYmwG,QAAQ,YAAYzT,MAAM,cAAtC,SACGnlE,IAEF8/T,GAAoBD,EACnB,cAAC,IAAD,CAAYlnP,MAAM,OAAOC,QAAQ,YAAY4B,MAAO,CAACrV,MAAO,YAA5D,SACInlE,IAEJ,cAAC,IAAD,CAASopF,MAAOolJ,EAAhB,SACE,8BACE,cAAC,QAAD,CACE9gQ,KAAMA,EACN8qE,UAAWwgC,IACX5vE,MAAO,CACL9uC,UACAu+G,WAAW,aACTp8D,aAAc,IACXo8D,GAELC,iBAAkB,CAChBC,WAAW,IAGfG,SAAUA,YA8dT/kC,sBACb91B,YAAgB,gBAChB0/D,mBAZsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DqoE,WAAYC,wBAAcylP,KAC1B/jN,cAAeD,eACfzf,WAAY8f,cACZ4jN,gBAAiBxnN,cACjBqE,aAAcv0F,eACdgC,OAAQkwF,cACRyB,UAAWzzF,eAPsBxW,CAQhC9L,MA5BwB,SAAC2D,GAAD,MAAoC,CAC7DA,WACAs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEf+hS,sBAAuB,WACrBp2T,EAAS,IAAIy0B,MAEf4hS,4BAA6B,YAA2M,IAAxMngU,EAAuM,EAAvMA,WAAYoyL,EAA2L,EAA3LA,QAAS17F,EAAkL,EAAlLA,SAAU+vM,EAAwK,EAAxKA,UAC7D38R,EAAS,IAAI09C,KAAkC,CAACxnD,aAAYoyL,UAAS17F,WAAU+vM,gBAEjF25B,kBAAmB,SAACpgU,GAClB8J,EAAS,IAAI4lG,IAAwB,CAAC1vG,iBAExCqgU,yBAA0B,SAAC50S,GACzB3hB,EAAS,IAAIutB,KAAoB,CAAE5L,cACnC3hB,EAAS,IAAImvB,KAAmB,CAAExN,mBAcvB2oB,EArdkD,SAAC/qC,GAChE,IACEqtF,EAeErtF,EAfFqtF,SACAulB,EAcE5yG,EAdF4yG,cACA1f,EAaElzF,EAbFkzF,WACAjiB,EAYEjxE,EAZFixE,WACAwiC,EAWEzzG,EAXFyzG,aACAvyF,EAUElhB,EAVFkhB,OACA01S,EASE52T,EATF42T,gBACA/jN,EAQE7yG,EARF6yG,UACApyG,EAOET,EAPFS,SACAs3R,EAME/3R,EANF+3R,iBACA8+B,EAKE72T,EALF62T,sBACAC,EAIE92T,EAJF82T,4BACAC,EAGE/2T,EAHF+2T,kBACAC,EAEEh3T,EAFFg3T,yBACAn1U,EACEme,EADFne,EAGF,EAAgD0Y,WAAyB,OAAzE,mBAAOs+R,EAAP,KAAyBo+B,EAAzB,KAEMC,EAAajmP,GAAcA,EAAWp3G,IAAI,cAC1C88B,EAAas6E,GAAcA,EAAWv6F,MAAM,CAAC,eAAgB,OAC7DqyM,GAAU93G,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,OACnD+/U,GAAQxlP,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,UAE9E7pP,GAAUs2C,IACV6xO,GAAsB3vT,sBAAYiS,eASlC29S,GAPc,SAAoB5lW,GACtC,IAAMD,EAAMgpC,WAIZ,OAHAA,aAAgB,WACdhpC,EAAIqsC,QAAUpsC,KAETD,EAAIqsC,QAEM42Q,CAAYtzP,GAE/B3mB,aAAgB,WAId,GAHAw9R,IACA8+B,IAEIlgU,GAAcoyL,GAAS,CAIzB+tI,EAA4B,CAAEngU,aAAYoyL,WAAS17F,WAAU+vM,UAH3C,SAACi6B,GACjB52T,EAASu/B,YAAO22R,IAAkB,6BAAnB,OAAiDU,QAAjD,IAAiDA,OAAjD,EAAiDA,EAAgCx9V,IAAI,iBAKpG88B,GACFogU,EAAkBpgU,IAGE,IAAlB88G,KAAyBvyF,GAAWA,GAAUA,EAAOrnD,IAAI,QAAU45I,GACrEujN,EAAyBvjN,GAErBvyF,GAA0D,UAAhDA,EAAOxqC,MAAM,CAAC,WAAY,UAAW,QACjDugV,EAAoB,SAGvB,IAEH18T,aAAgB,WACTq8T,IAAqC,IAAlBnjN,GAAyBvyF,KAAWA,GAAUA,EAAOrnD,IAAI,QAAU45I,IACzFujN,EAAyBvjN,KAE1B,CAACmjN,IACJr8T,aAAgB,WACV2mB,IAAWk2S,IACuC,UAAhDl2S,EAAOxqC,MAAM,CAAC,WAAY,UAAW,QACvCugV,EAAoB,SAGvB,CAAC/1S,IAEJ,IAuBM6wQ,GAAc,WAClBtxR,EAAS,IAAI8K,KACb9K,EAASu/B,YAAO22R,IAAkB,aAAc,KAChDl2T,EAASu/B,YAAO22R,IAAkB,WAAY,MAiChD,OACE,eAAC,IAAD,CACErnR,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EACTR,QAAS,gBACTV,UAAWF,GAAQM,UANrB,UAQE,cAAC,IAAD,CAAMI,MAAM,EAAMI,GAAI,EAAGE,GAAI,EAAGU,GAAI,GAApC,SArCA,eAAC,IAAD,CAAMpB,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASN,UAAWF,GAAQunR,oBAAqBjmR,KAAK,SAASI,GAAI,GAAhH,UACE,cAAC,IAAD,CAAMpB,WAAW,EAAMI,MAAM,EAAME,QAAQ,gBAA3C,UAEKsnR,GAAejmP,GAAcA,EAAWp3G,IAAI,cAC7C,cAAC,IAAD,CACE8gH,QAASo3M,GACTlgU,KAAK,QAFP,SAIE,cAAC,IAAD,CAAYorH,SAAS,cAI3B,cAAC,QAAD,CACE7tC,UAAWqqP,IACXn1T,KAAK,WACLwrG,SAAUimP,EACV/1T,MAAO,CACL25R,aAAcu9B,EACdI,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,WAoBhB,cAAC,IAAD,CACExmR,WAAW,EACXI,MAAM,EACNI,GAAI,EACJE,GAAI,EACJU,GAAI,GACJN,QAAS,EACTR,QAAQ,SAPV,SASE,eAAC,IAAD,CACEN,WAAW,EACXI,MAAM,EACNU,QAAS,EAHX,UAKE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,iCACTvd,KAAM,gBACNpT,SAAS,EACTu+G,WAAY,CACVqR,YAAaj/F,EAAE,kCAEjBiuF,SAAUmqF,QAIhB,cAAC,IAAD,CACEvqH,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,gCACTvd,KAAM,cACNmrG,WAAY,CACVqR,YAAaj/F,EAAE,qCAKvB,eAAC,IAAD,CAAM6tD,MAAM,EAAMgB,GAAI,EAAtB,UACE,cAAC,IAAD,CAAY8+B,QAAQ,YAAYzT,MAAM,cAAtC,SACGl6E,EAAE,yCAEL,cAAC,QAAD,CACEvd,KAAK,QACL8qE,UAAWi/O,IACXv+M,SAAU,CAACgpF,KACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAcj/F,EAAE,uCAChBs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,OAAS,GAAK,MACxD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,SACtD8/G,SAlIM,SAACvlG,GACrB,IAAMyrV,EAAiBzrV,GAAOA,EAAIgrB,GAClC,GAAIgyL,KAAYyuI,EAEd,OADA/2T,EAASu/B,YAAO22R,IAAkB,eAAgB,KAC3Cl2T,EAAS,IAAI8jD,KAAoB,qCAgI9BmrB,iBAAkB,CAChBC,WAAW,SAKnB,eAAC,IAAD,CAAMjgC,MAAM,EAAMgB,GAAI,EAAtB,UACE,cAAC,IAAD,CAAY8+B,QAAQ,YAAYzT,MAAM,cAAtC,SACGl6E,EAAE,qCAEL,cAAC,QAAD,CACEvd,KAAK,eACL8qE,UAAWi/O,IACXv+M,SAAU,CAACgpF,KACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAASoxF,EAAW7+G,OACpBysG,YAAaj/F,EAAE,mCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,OAAS,GAAK,MACxD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,SACtD8/G,SAjJS,SAACvlG,GAKxB,IAAM0rV,EAAoB1rV,GAAOA,EAAIgrB,GACrC,GAAI0gU,GAAqB1uI,GAAS,CAIhC+tI,EAA4B,CAAEngU,WAAY8gU,EAAmB1uI,WAAS17F,WAAU+vM,UAH9D,SAACi6B,GACjB52T,EAASu/B,YAAO22R,IAAkB,6BAAnB,OAAiDU,QAAjD,IAAiDA,OAAjD,EAAiDA,EAAgCx9V,IAAI,iBAIxGk9V,EAAkBU,KAuIN/nP,iBAAkB,CAChBC,WAAW,SAOhBkjC,EAAa,eAAC,IAAD,CAAMvjE,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIJ,KAAK,SAAhD,UACZ,eAAC,IAAD,CAAYyrB,MAAM,cAAcyT,QAAQ,YAAY4B,MAAO,CAAEmb,WAAY,UAAzE,UACG1qG,EAAE,qCADL,QAGA,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,GACJ0gC,MAAO,CAAEotB,YAAa,GAHxB,SAKE,cAAC,QAAD,CACEl6H,KAAK,yBACL8qE,UAAWi/O,IACXv+M,SAAU,CAACipF,KACX/4J,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,2CACfigB,QAAS41T,IACTC,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,aAAIA,EAASA,EAAO9kH,QAAP,UAAgBqmW,IAAiBvhP,EAAOv/E,WAAxC,aAAgB,EAA6BvlC,OAAQ,MACxF88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,WAKX,KAGZ,eAAC,IAAD,CACEjgC,MAAM,EACNJ,WAAW,EACXP,WAAW,SACXqiC,MAAO,CAAE2W,WAAY,GAJvB,UAME,cAAC,IAAD,CAAS/H,MAAOm3O,GAAsB,GAAKt1U,EAAE,mCAA7C,SACE,+BACE,cAAC,QAAD,CACEvd,KAAI,wBAAmBu0T,EAAnB,UACJzpP,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,6CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,WAMrB,cAAC,IAAD,CAASn3O,MAAOn+F,EAAE,oDAAlB,SACE,cAAC,IAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,YAAa,EAAG7C,OAAQ,kBAG9E,cAAC,IAAD,CACEzrC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,IAAD,CACEmoP,iBAAkBA,EAClBo+B,oBAAqBA,EACrBl5O,YAAa,CACXpO,WAAW,OAIjB,cAAC,IAAD,CACEjgC,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,yBACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,yBACf7rB,KAAM,SACNg9G,UAAWmkP,IAEbV,aAIN,cAAC,IAAD,CACE/mR,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,yBACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,yBACf7rB,KAAM,SACNg9G,UAAWmkP,QAKnB,cAAC,IAAD,CACEznR,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,yBACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,yBACf7rB,KAAM,SACNg9G,UAAWmkP,QAQjBtkN,GAAa,qCACX,cAAC,IAAD,CACEnjE,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,6BACTvd,KAAK,8BACL8gQ,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,6BACfmxF,UAAWmkP,IAEbrnP,SAAU,CAACkmP,EAA+BE,EAAgBG,OAIhE,cAAC,IAAD,CACE3mR,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,kCACTvd,KAAK,2BACL8gQ,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,kCACfmxF,UAAWmkP,IAEbrnP,SAAU,CAACmmP,EAA6BI,OAI9C,cAAC,IAAD,CACE3mR,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,8BACTvd,KAAK,+BACL8gQ,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,8BACfmxF,UAAWmkP,IAEbrnP,SAAU,CAACkmP,EAA+BG,EAAeG,OAI/D,cAAC,IAAD,CACE5mR,MAAM,EACNgB,GAAI,EAFN,SAKI8lR,EAAgB,CACd5/T,MAAO/U,EAAE,mCACTvd,KAAK,4BACL8gQ,QAAS+xF,GAAsB,GAAKt1U,EAAE,mCACtC4tF,WAAY,CACVqR,YAAaj/F,EAAE,mCACfmxF,UAAWmkP,IAEbrnP,SAAU,CAACmmP,EAA6BK,sB,6BC9mB5D,0jCAoBA,SAASwB,EAAiB37T,GACxB,IAAIywO,EAAYzwO,EAAKywO,UACjBmrF,EAAS57T,EAAK47T,OACdruO,EAAYvtF,EAAKutF,UACjBzJ,EAAY9jF,EAAK8jF,UACjB+3O,EAAe77T,EAAK67T,aACpBC,EAAkB97T,EAAK87T,gBAEvB7nR,EADQj0C,EAAK60C,MACGZ,QAChB8nR,EAAeC,YAAgBJ,GAC/BK,EAAe,CACjBn4O,UAAW,SACX2sJ,UAAWA,GAGb,IAAKmrF,IAAWA,EAAOM,aAAc,OAAOD,EAG5C,IACI1sD,EADwBwsD,EAAanoE,wBACA1oK,OAErCixO,EAAwBP,EAAOhoE,wBAC/BwoE,EAAaD,EAAsBjuO,OACnCmuO,EAAaF,EAAsBjxO,OACnCoxO,EAAUH,EAAsBluO,IAGhCsuO,EADwBX,EAAOM,aAAatoE,wBACP3lK,IAErCuuO,EAAan0U,OAAO86T,YACpB5hC,EAAYk7C,YAAaV,GACzB/uO,EAAez3E,SAASs+O,iBAAiB+nE,GAAQ5uO,aAAc,IAC/D/W,EAAY1gE,SAASs+O,iBAAiB+nE,GAAQ3lP,UAAW,IACzDymP,EAAiBH,EAAetmP,EAChC0mP,EAAiBH,EAAaF,EAC9BM,EAAmBF,EAAiBn7C,EACpCs7C,EAAmBttD,EAAegS,EAAY+6C,EAC9CQ,EAAaV,EAAaI,EAAaj7C,EAAYv0L,EACnD+vO,EAAWx7C,EAAY+6C,EAAUrmP,EACjC+mP,EAAiB,IAErB,OAAQl5O,GACN,IAAK,OACL,IAAK,SAEH,GAAI64O,GAAkBN,EACpB,MAAO,CACLv4O,UAAW,SACX2sJ,UAAWA,GAKf,GAAIosF,GAAoBR,IAAeP,EAKrC,OAJID,GACFoB,YAAiBlB,EAAce,EAAYE,GAGtC,CACLl5O,UAAW,SACX2sJ,UAAWA,GAKf,IAAKqrF,GAAmBe,GAAoBtvO,GAAauuO,GAAmBa,GAAkBpvO,EAQ5F,OAPIsuO,GACFoB,YAAiBlB,EAAce,EAAYE,GAMtC,CACLl5O,UAAW,SACX2sJ,UAHsBqrF,EAAkBa,EAAiB3vO,EAAe6vO,EAAmB7vO,GAS/F,GAAkB,SAAdlJ,GAAwBg4O,EAAiB,CAE3C,IAAIoB,EAAqBzsF,EACrB0sF,EAAarB,EAAkBY,EAAiBE,EAMpD,OAJIO,GAAc5vO,IAChB2vO,EAAqBxmW,KAAKE,IAAIumW,EAAanwO,EAAe/4C,EAAQmpR,cAAe3sF,IAG5E,CACL3sJ,UAAW,MACX2sJ,UAAWysF,GAKf,GAAkB,WAAdp5O,EAEF,OADAu5O,YAAStB,EAAce,GAChB,CACLh5O,UAAW,SACX2sJ,UAAWA,GAIf,MAEF,IAAK,MAEH,GAAIisF,GAAkBL,EACpB,MAAO,CACLv4O,UAAW,MACX2sJ,UAAWA,GAKf,GAAImsF,GAAoBP,IAAeP,EAKrC,OAJID,GACFoB,YAAiBlB,EAAcgB,EAAUC,GAGpC,CACLl5O,UAAW,MACX2sJ,UAAWA,GAKf,IAAKqrF,GAAmBc,GAAoBrvO,GAAauuO,GAAmBY,GAAkBnvO,EAAW,CACvG,IAAI+vO,EAAsB7sF,EAW1B,QARKqrF,GAAmBc,GAAoBrvO,GAAauuO,GAAmBY,GAAkBnvO,KAC5F+vO,EAAsBxB,EAAkBY,EAAiBzmP,EAAY2mP,EAAmB3mP,GAGtF4lP,GACFoB,YAAiBlB,EAAcgB,EAAUC,GAGpC,CACLl5O,UAAW,MACX2sJ,UAAW6sF,GAOf,MAAO,CACLx5O,UAAW,SACX2sJ,UAAWA,GAGf,QACE,MAAM,IAAIlvQ,MAAM,+BAAgC0D,OAAO6+G,EAAW,OAItE,OAAOm4O,EAYT,IAAIsB,EAAkB,SAAyBnuR,GAC7C,MAAa,SAANA,EAAe,SAAWA,GAG/BouR,EAAU,SAAiBl7T,GAC7B,IAAI8G,EAEA06E,EAAYxhF,EAAMwhF,UAClB25O,EAAcn7T,EAAMuyC,MACpBusC,EAAeq8O,EAAYr8O,aAC3BntC,EAAUwpR,EAAYxpR,QACtB00M,EAAS80E,EAAY90E,OACzB,OAAOv/O,EAAQ,CACb3O,MAAO,QACNk0C,YAAgBvlC,EAtBrB,SAAwB06E,GAKtB,OAAOA,EAJkB,CACvBoK,OAAQ,MACRD,IAAK,UAE+BnK,GAAa,SAiBzB45O,CAAe55O,GAAY,QAASn1C,YAAgBvlC,EAAO,kBAAmBu/O,EAAOg1E,UAAWhvR,YAAgBvlC,EAAO,eAAgBg4E,GAAezyC,YAAgBvlC,EAAO,YAAa,mEAAoEulC,YAAgBvlC,EAAO,eAAgB6qC,EAAQ2pR,YAAajvR,YAAgBvlC,EAAO,YAAa6qC,EAAQ2pR,YAAajvR,YAAgBvlC,EAAO,WAAY,YAAaulC,YAAgBvlC,EAAO,QAAS,QAASulC,YAAgBvlC,EAAO,SAAU,GAAIA,GAGzgBy0T,EAEJ,SAAUhiP,GAGR,SAASgiP,IACP,IAAIC,EAEAxsT,EAEJvqB,YAAgBptB,KAAMkkW,GAEtB,IAAK,IAAIn5U,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GA8CzB,OA3CA0sB,EAAQwqE,YAA2BniH,MAAOmkW,EAAmB/hP,YAAgB8hP,IAAaljW,KAAKiH,MAAMk8V,EAAkB,CAACnkW,MAAMsL,OAAO0f,KAErIgqD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,QAAS,CAC9Em/N,UAAWn/N,EAAMzN,MAAMk6T,cACvBj6O,UAAW,OAGbn1C,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAUl8C,GAC/F,IAAI8mH,EAAc5qE,EAAMzN,MACpBm6T,EAAgB9hP,EAAY8hP,cAC5BD,EAAgB7hP,EAAY6hP,cAC5BE,EAAgB/hP,EAAY+hP,cAC5BC,EAAehiP,EAAYgiP,aAC3Bn5O,EAA2B7I,EAAY6I,yBACvClwC,EAAQqnC,EAAYrnC,MACpBspR,EAAqB7sT,EAAMzuC,QAAQs7V,mBACvC,GAAK/oW,EAAL,CAEA,IAAI0mW,EAAmC,UAAjBoC,EAElBv9T,EAAQg7T,EAAiB,CAC3BlrF,UAAWstF,EACXnC,OAAQxmW,EACRm4H,UAAWywO,EACXl6O,UAAWm6O,EACXpC,aANiB92O,IAA6B+2O,EAO9CA,gBAAiBA,EACjBjnR,MAAOA,IAELspR,GAAoBA,EAAmBx9T,GAE3C2Q,EAAMirE,SAAS57E,OAGjBguC,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,WACxF,IAAI2sT,EAAgB3sT,EAAMzN,MAAMo6T,cAC5Bn6O,EAAYxyE,EAAM3Q,MAAMmjF,WAAay5O,EAAgBU,GACzD,OAAOtsT,YAAc,GAAIL,EAAMzN,MAAO,CACpCigF,UAAWA,EACX2sJ,UAAWn/N,EAAM3Q,MAAM8vO,eAIpBn/N,EAcT,OAtEAkgC,YAAUqsR,EAAYhiP,GA2DtBzqE,YAAaysT,EAAY,CAAC,CACxB5/V,IAAK,SACL5I,MAAO,WAEL,OAAO4qC,EADQtmC,KAAKkqC,MAAM5D,UACV,CACd7qC,IAAKuE,KAAKykW,aACVC,YAAa1kW,KAAK2kW,wBAKjBT,EAvET,CAwEEvqT,aAEFq7B,YAAgBkvR,EAAY,eAAgB,CAC1CM,mBAAoBzlF,IAAU70P,OAGhC,IAmBI06U,EAAc,SAAqBvgD,GACrC,IAAIvtC,EAAYutC,EAAMvtC,UAClB+tF,EAAWxgD,EAAMnpO,MAAMZ,QAAQuqR,SACnC,MAAO,CACL/tF,UAAWA,EACXywC,UAAW,OACXr1L,cAAe2yO,EACf5yO,WAAY4yO,EACZ5nP,SAAU,WAEV6nP,wBAAyB,UAsBzBC,EAAY,SAAmBC,GACjC,IAAIC,EAAcD,EAAM9pR,MACpB2pR,EAAWI,EAAY3qR,QAAQuqR,SAEnC,MAAO,CACL5+P,MAFWg/P,EAAYj2E,OAETk2E,UACdppR,QAAS,GAAGxwE,OAAkB,EAAXu5V,EAAc,OAAOv5V,OAAkB,EAAXu5V,EAAc,MAC7D53O,UAAW,WAIXk4O,EAAsBJ,EACtBK,EAAoBL,EACpBM,EAAmB,SAA0Bn7T,GAC/C,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,mBAAoB5xQ,GACnCkvC,UAAWqpF,EAAG,CACZ,eAAe,EACf,2BAA2B,GAC1BrpF,IACF08C,GAAaxvF,IAElB++T,EAAiB5jP,aAAe,CAC9Bn7E,SAAU,cAEZ,IAAIg/T,EAAiB,SAAwBp7T,GAC3C,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,iBAAkB5xQ,GACjCkvC,UAAWqpF,EAAG,CACZ,eAAe,EACf,wBAAwB,GACvBrpF,IACF08C,GAAaxvF,IAElBg/T,EAAe7jP,aAAe,CAC5Bn7E,SAAU,cAKZ,IAAIi/T,EAAgB,SAAuBC,GACzC,IAAI7vM,EAAO6vM,EAAM7vM,KACb7nJ,EAAS03V,EAAM13V,OACfmvG,EAAWuoP,EAAMvoP,SACrB,MAAO,CACL1iG,KAAMo7I,EAAKp7I,KACX0iG,SAAUA,EACVqX,IAAKxmH,EACLwtE,MAAOq6E,EAAKr6E,MACZ0lD,OAAQ,IAGRykO,EAEJ,SAAUC,GAGR,SAASD,IACP,IAAIE,EAEAviP,EAEJh2F,YAAgBptB,KAAMylW,GAEtB,IAAK,IAAIp5U,EAAQ3oB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM4qB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFtB,EAAKsB,GAAS5oB,UAAU4oB,GAoB1B,OAjBA82F,EAASjB,YAA2BniH,MAAO2lW,EAAmBvjP,YAAgBqjP,IAAazkW,KAAKiH,MAAM09V,EAAkB,CAAC3lW,MAAMsL,OAAO0f,KAEtIgqD,YAAgBqtC,YAAuBA,YAAuBe,IAAU,QAAS,CAC/E+G,UAAW,OAGbn1C,YAAgBqtC,YAAuBA,YAAuBe,IAAU,sBAAsB,SAAUwiP,GACtG,IAAIz7O,EAAYy7O,EAAMz7O,UAGlBA,IAFmBy5O,EAAgBxgP,EAAOl5E,MAAMo6T,gBAGlDlhP,EAAOR,SAAS,CACduH,UAAWA,OAKV/G,EA4CT,OA1EAvrC,YAAU4tR,EAAYC,GAiCtBjuT,YAAaguT,EAAY,CAAC,CACxBnhW,IAAK,kBACL5I,MAAO,WACL,MAAO,CACL8oW,mBAAoBxkW,KAAKwkW,sBAI5B,CACDlgW,IAAK,SACL5I,MAAO,WACL,IAAI8nH,EAAexjH,KAAKkqC,MACpB27T,EAAWriP,EAAaqiP,SACxBv/T,EAAWk9E,EAAal9E,SACxBw/T,EAAiBtiP,EAAasiP,eAC9BxB,EAAgB9gP,EAAa8gP,cAC7BrnP,EAAWuG,EAAa+gP,aACxBzoD,EAAYt4L,EAAas4L,UACzBiqD,EAAuB,UAAb9oP,EAEd,IAAK4oP,IAAaE,IAAYD,EAC5B,OAAO,KAGT,IAAI37O,EAAYnqH,KAAKgnC,MAAMmjF,WAAay5O,EAAgBU,GACpD3uM,EAAOqwM,YAAqBF,GAC5BG,EAAiBF,EAAU,EAAIr3U,OAAO+qQ,YAEtCzyP,EAAQ,CACVl5B,OAFW6nJ,EAAKxrC,GAAa87O,EAG7BhpP,SAAUA,EACV04C,KAAMA,GAGJuwM,EAAc3zB,YAAI,MAAO,CAC3BH,IAAKt2B,EAAU,aAAc90Q,IAC5BV,GACH,OAAOu/T,EAAW91C,uBAAam2C,EAAaL,GAAYK,MAIrDT,EA3ET,CA4EE9rT,aAEFq7B,YAAgBywR,EAAY,oBAAqB,CAC/CjB,mBAAoBzlF,IAAU70P,OAGhC,IAAIxoB,EAAUD,MAAMC,QAChBykW,EAAU/nW,OAAO0D,KACjBskW,EAAUhoW,OAAOD,UAAUoD,eAE/B,SAAS8kW,EAAM1gW,EAAGC,GAEhB,GAAID,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,GAAmB,UAAd20C,YAAQ50C,IAAgC,UAAd40C,YAAQ30C,GAAgB,CAC9D,IAEI5C,EACAnB,EACAyC,EAJAgiW,EAAO5kW,EAAQiE,GACf4gW,EAAO7kW,EAAQkE,GAKnB,GAAI0gW,GAAQC,EAAM,CAEhB,IADA1kW,EAAS8D,EAAE9D,SACG+D,EAAE/D,OAAQ,OAAO,EAE/B,IAAKmB,EAAInB,EAAgB,IAARmB,KACf,IAAKqjW,EAAM1gW,EAAE3C,GAAI4C,EAAE5C,IAAK,OAAO,EAGjC,OAAO,EAGT,GAAIsjW,GAAQC,EAAM,OAAO,EACzB,IAAIC,EAAQ7gW,aAAaooB,KACrB04U,EAAQ7gW,aAAamoB,KACzB,GAAIy4U,GAASC,EAAO,OAAO,EAC3B,GAAID,GAASC,EAAO,OAAO9gW,EAAEqoB,WAAapoB,EAAEooB,UAC5C,IAAI04U,EAAU/gW,aAAam1C,OACvB6rT,EAAU/gW,aAAak1C,OAC3B,GAAI4rT,GAAWC,EAAS,OAAO,EAC/B,GAAID,GAAWC,EAAS,OAAOhhW,EAAE1E,YAAc2E,EAAE3E,WACjD,IAAIa,EAAOqkW,EAAQxgW,GAGnB,IAFA9D,EAASC,EAAKD,UAECskW,EAAQvgW,GAAG/D,OACxB,OAAO,EAGT,IAAKmB,EAAInB,EAAgB,IAARmB,KACf,IAAKojW,EAAQplW,KAAK4E,EAAG9D,EAAKkB,IAAK,OAAO,EAKxC,IAAKA,EAAInB,EAAgB,IAARmB,KAGf,IAAY,YAFZsB,EAAMxC,EAAKkB,MAEa2C,EAAE6zU,YAQnB6sB,EAAM1gW,EAAErB,GAAMsB,EAAEtB,IAAO,OAAO,EAKvC,OAAO,EAGT,OAAOqB,IAAMA,GAAKC,IAAMA,EAI1B,SAASghW,EAAcjhW,EAAGC,GACxB,IACE,OAAOygW,EAAM1gW,EAAGC,GAChB,MAAOuI,GACP,GAAIA,EAAMkjC,SAAWljC,EAAMkjC,QAAQ9C,MAAM,oBAOvC,OADAvmB,QAAQC,KAAK,mEAAoE9Z,EAAMK,KAAML,EAAMkjC,UAC5F,EAIT,MAAMljC,GAIV,IAAI04V,EAAe,SAAsBxgU,GACvC,IAAI2vF,EAAa3vF,EAAK2vF,WAEtB,MAAO,CACLl1F,MAAO,YACP44C,UAHUrzC,EAAKygU,MAGI,MAAQ,KAC3BzyO,cAAe2B,EAAa,OAAS,KAErC/Y,SAAU,aAsBV8pP,EAAoB,SAA2Bp+T,GACjD,IAAI2xC,EAAU3xC,EAAMuyC,MAAMZ,QAC1B,MAAO,CACLrB,WAAY,SACZmC,QAAS,OACT4mD,KAAM,EACN3mD,SAAU,OACVS,QAAS,GAAGxwE,OAAOgvE,EAAQuqR,SAAW,EAAG,OAAOv5V,OAA0B,EAAnBgvE,EAAQuqR,SAAc,MAC7EC,wBAAyB,QACzB7nP,SAAU,WACVoN,SAAU,WAGV28O,EAEJ,SAAU9kP,GAGR,SAAS8kP,IAGP,OAFA55U,YAAgBptB,KAAMgnW,GAEf7kP,YAA2BniH,KAAMoiH,YAAgB4kP,GAAgB/+V,MAAMjI,KAAM0D,YAwBtF,OA7BAm0E,YAAUmvR,EAAgB9kP,GAQ1BzqE,YAAauvT,EAAgB,CAAC,CAC5B1iW,IAAK,SACL5I,MAAO,WACL,IAAI6mH,EAAcviH,KAAKkqC,MACnB5D,EAAWi8E,EAAYj8E,SACvB8yC,EAAYmpC,EAAYnpC,UACxBqpF,EAAKlgD,EAAYkgD,GACjB13C,EAAUxI,EAAYwI,QACtB+wL,EAAYv5L,EAAYu5L,UACxB0nC,EAAWjhO,EAAYihO,SAC3B,OAAOjR,YAAI,MAAO,CAChBH,IAAKt2B,EAAU,iBAAkB97S,KAAKkqC,OACtCkvC,UAAWqpF,EAAG,CACZ,mBAAmB,EACnB,4BAA6B13C,EAC7B,6BAA8By4N,GAC7BpqQ,IACF9yC,OAIA0gU,EA9BT,CA+BErtT,aAIEstT,EAAyB,WAC3B,MAAO,CACLhuR,WAAY,SACZiuR,UAAW,UACX9rR,QAAS,OACT4tO,WAAY,IAgBhB,SAASm+C,IACP,IAAInsT,EAAOilS,YAAuB,CAAC,+DAMnC,OAJAknB,EAAkB,WAChB,OAAOnsT,GAGFA,EAGT,IAAIrS,EAAgD,CAClDn6B,KAAM,UACNotE,OAAQ,4FAUNwrR,EAAM,SAAa/gU,GACrB,IAAItqC,EAAOsqC,EAAKtqC,KACZmuC,EAAQgT,YAAyB7W,EAAM,CAAC,SAE5C,OAAOksS,YAAI,MAAOzoS,YAAS,CACzBynF,OAAQx1H,EACRu/E,MAAOv/E,EACPu6Q,QAAS,YACT,cAAe,OACf+wF,UAAW,QACXj1B,IAAKzpS,GACJuB,KAGDo9T,EAAY,SAAmBp9T,GACjC,OAAOqoS,YAAI60B,EAAKt9T,YAAS,CACvB/tC,KAAM,IACLmuC,GAAQqoS,YAAI,OAAQ,CACrBzsU,EAAG,iWAGHyhW,EAAc,SAAqBr9T,GACrC,OAAOqoS,YAAI60B,EAAKt9T,YAAS,CACvB/tC,KAAM,IACLmuC,GAAQqoS,YAAI,OAAQ,CACrBzsU,EAAG,4RAMH0hW,EAAU,SAAiB/3T,GAC7B,IAAIsmF,EAAYtmF,EAAMsmF,UAClB0xO,EAAch4T,EAAMyrC,MACpB2pR,EAAW4C,EAAYntR,QAAQuqR,SAC/B71E,EAASy4E,EAAYz4E,OACzB,MAAO,CACLluP,MAAO,qBACPmlE,MAAO8vB,EAAYi5J,EAAO04E,UAAY14E,EAAO24E,UAC7CvsR,QAAS,OACTU,QAAoB,EAAX+oR,EACTrwO,WAAY,cACZ,SAAU,CACRvuB,MAAO8vB,EAAYi5J,EAAO44E,UAAY54E,EAAOk2E,aAK/C2C,EAAuBL,EAevBM,EAAoBN,EAkBpBO,EAAwB,SAA+B1jD,GACzD,IAAIruL,EAAaquL,EAAMruL,WACnBgyO,EAAc3jD,EAAMnpO,MACpB2pR,EAAWmD,EAAY1tR,QAAQuqR,SAC/B71E,EAASg5E,EAAYh5E,OACzB,MAAO,CACLluP,MAAO,qBACPomU,UAAW,UACXliP,gBAAiBgR,EAAag5J,EAAOi5E,UAAYj5E,EAAO24E,UACxDt0O,aAAyB,EAAXwxO,EACdvoP,UAAsB,EAAXuoP,EACXvpR,MAAO,IAkBP4sR,GAAuBz1B,YAAU00B,KACjCgB,GAAsB,SAA6BnD,GACrD,IAAIjvO,EAAYivO,EAAMjvO,UAClBh6H,EAAOipW,EAAMjpW,KACbkpW,EAAcD,EAAM9pR,MACpB8zM,EAASi2E,EAAYj2E,OACrB61E,EAAWI,EAAY3qR,QAAQuqR,SACnC,MAAO,CACL/jU,MAAO,mBACPmlE,MAAO8vB,EAAYi5J,EAAO04E,UAAY14E,EAAO24E,UAC7CvsR,QAAS,OACTU,QAAoB,EAAX+oR,EACTrwO,WAAY,cACZ0yO,UAAW,SACX//O,SAAUprH,EACV29H,WAAY,EACZlY,YAAazlH,EACbkxH,UAAW,SACXm7O,cAAe,WAIfC,GAAa,SAAoB7C,GACnC,IAAIv/P,EAAQu/P,EAAMv/P,MACdtB,EAAQ6gQ,EAAM7gQ,MACd72F,EAAS03V,EAAM13V,OACnB,OAAOykU,YAAI,OAAQ,CACjBH,IAEAk2B,YAAK,CACH/xF,UAAW,GAAGjrQ,OAAO48V,GAAsB,oBAAoB58V,OAAOq5F,EAAO,gBAC7EqgB,gBAAiB/e,EACjBwhB,aAAc,OACdrsC,QAAS,gBACT8sC,WAAYp6G,EAAS,OAAS,KAC9ByjH,OAAQ,OACR62O,cAAe,OACf9sR,MAAO,QACkC,OAI3CitR,GAAmB,SAA0Br+T,GAC/C,IAAIkvC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACnBC,EAAY7rF,EAAM6rF,UAClB+wO,EAAQ58T,EAAM48T,MACd93E,EAAS9kP,EAAMgxC,MAAM8zM,OACrB/oL,EAAQ8vB,EAAYi5J,EAAO44E,UAAY54E,EAAO24E,UAClD,OAAOp1B,YAAI,MAAOzoS,YAAS,GAAIgsF,EAAY,CACzCs8M,IAAKt2B,EAAU,mBAAoB5xQ,GACnCkvC,UAAWqpF,EAAG,CACZ+lM,WAAW,EACX,qBAAqB,GACpBpvR,KACDm5P,YAAI81B,GAAY,CAClBpiQ,MAAOA,EACPtB,MAAO,EACP72F,OAAQg5V,IACNv0B,YAAI81B,GAAY,CAClBpiQ,MAAOA,EACPtB,MAAO,IACP72F,QAAQ,IACNykU,YAAI81B,GAAY,CAClBpiQ,MAAOA,EACPtB,MAAO,IACP72F,QAASg5V,MAGbyB,GAAiB9mP,aAAe,CAC9B1lH,KAAM,GAGR,IAAIq2U,GAAM,SAAa/rS,GACrB,IAAI2vF,EAAa3vF,EAAK2vF,WAClBD,EAAY1vF,EAAK0vF,UACjB0yO,EAAapiU,EAAK60C,MAClB8zM,EAASy5E,EAAWz5E,OACpBvnK,EAAeghP,EAAWhhP,aAC1BntC,EAAUmuR,EAAWnuR,QACzB,MAAO,CACLx5C,MAAO,UACPm4C,WAAY,SACZ+rC,gBAAiBgR,EAAag5J,EAAO05E,SAAW15E,EAAOg1E,SACvDtiO,YAAa1L,EAAag5J,EAAOi5E,UAAYlyO,EAAYi5J,EAAO7pK,QAAU6pK,EAAO24E,UACjFlgP,aAAcA,EACdC,YAAa,QACbC,YAAa,EACbE,UAAWkO,EAAY,aAAazqH,OAAO0jR,EAAO7pK,SAAW,KAC7DE,OAAQ,UACRjqC,QAAS,OACTC,SAAU,OACVK,eAAgB,gBAChBk4C,UAAWt5C,EAAQmpR,cACnBkF,QAAS,eACT1rP,SAAU,WACVuX,WAAY,YACZ,UAAW,CACTkN,YAAa3L,EAAYi5J,EAAO7pK,QAAU6pK,EAAO45E,aA2BnDC,GAAW,SAAkBxiU,GAC/B,IAAIi0C,EAAUj0C,EAAK60C,MAAMZ,QACzB,MAAO,CACL43C,cAAkC,EAAnB53C,EAAQuqR,SACvB5yO,WAA+B,EAAnB33C,EAAQuqR,WA2BpBiE,GAAkB,SAAyBngU,GAC7C,IAAI2xC,EAAU3xC,EAAMuyC,MAAMZ,QAC1B,MAAO,CACLx5C,MAAO,QACPmlE,MAAO,OACPof,OAAQ,UACRjqC,QAAS,QACT+rC,SAAU,MACVoV,WAAY,MACZlJ,aAAc,SACdqV,YAAgC,EAAnBpuD,EAAQuqR,SACrBhxO,aAAiC,EAAnBv5C,EAAQuqR,SACtB9vO,cAAe,cAqBfg0O,GAAW,SAAkB1iU,GAC/B,IAAI2vF,EAAa3vF,EAAK2vF,WAClByyO,EAAapiU,EAAK60C,MAClBZ,EAAUmuR,EAAWnuR,QACrB00M,EAASy5E,EAAWz5E,OACxB,MAAO,CACLzzM,OAAQjB,EAAQuqR,SAAW,EAC3B3yO,cAAe53C,EAAQuqR,SAAW,EAClC5yO,WAAY33C,EAAQuqR,SAAW,EAC/BmE,WAAYhzO,EAAa,SAAW,UACpC/vB,MAAO+oL,EAAO44E,YAIdqB,GAAa,SAAoBC,GACnC,MAAO,CACLpoU,MAAO,QACPi6F,WAAY,EACZF,OAAQ,EACR1T,SAAU,UACV+F,QAASg8O,EAAW,EAAI,EACxBP,QAAS,EACT7sR,QAAS,EACTmqB,MAAO,YA6BPkjQ,GAAgB,SAAuB9iU,GACzC,IAAIoiU,EAAapiU,EAAK60C,MAClBZ,EAAUmuR,EAAWnuR,QACrBmtC,EAAeghP,EAAWhhP,aAE9B,MAAO,CACL3mF,MAAO,aACPkkF,gBAHWyjP,EAAWz5E,OAGEi5E,UACxBxgP,aAAcA,EAAe,EAC7BrsC,QAAS,OACTG,OAAQjB,EAAQuqR,SAAW,EAC3BrpR,SAAU,IAIV4tR,GAAqB,SAA4BzgU,GACnD,IAAIm7T,EAAcn7T,EAAMuyC,MACpBusC,EAAeq8O,EAAYr8O,aAC3BunK,EAAS80E,EAAY90E,OACrBq6E,EAAmB1gU,EAAM0gU,iBAC7B,MAAO,CACL5hP,aAAcA,EAAe,EAC7BxhB,MAAO+oL,EAAO44E,UACdzgP,SAAU,MACVkD,SAAU,SACVvuC,QAAS,EACT4sD,YAAa,EACb/S,aAAc0zO,EAAmB,WAAa,KAC9C5yO,WAAY,WAGZ6yO,GAAsB,SAA6B75T,GACrD,IAAIg4T,EAAch4T,EAAMyrC,MACpBZ,EAAUmtR,EAAYntR,QACtBmtC,EAAeggP,EAAYhgP,aAC3BunK,EAASy4E,EAAYz4E,OAEzB,MAAO,CACL/1M,WAAY,SACZwuC,aAAcA,EAAe,EAC7BzC,gBAJcv1E,EAAMsmF,WAIUi5J,EAAOu6E,YACrCnuR,QAAS,OACTstD,YAAapuD,EAAQuqR,SACrBhxO,aAAcv5C,EAAQuqR,SACtB,SAAU,CACR7/O,gBAAiBgqK,EAAOu6E,YACxBtjQ,MAAO+oL,EAAOw6E,UAIhBC,GAAoB,SAA2BplD,GACjD,IAAI/9Q,EAAW+9Q,EAAM/9Q,SACjBwvF,EAAauuL,EAAMvuL,WACvB,OAAOy8M,YAAI,MAAOz8M,EAAYxvF,IAE5BklF,GAAsBi+O,GACtB/9O,GAAkB+9O,GAClBC,GAEJ,SAAUxnP,GAGR,SAASwnP,IAGP,OAFAt8U,YAAgBptB,KAAM0pW,GAEfvnP,YAA2BniH,KAAMoiH,YAAgBsnP,GAAkBzhW,MAAMjI,KAAM0D,YAexF,OApBAm0E,YAAU6xR,EAAkBxnP,GAQ5BzqE,YAAaiyT,EAAkB,CAAC,CAC9BplW,IAAK,SACL5I,MAAO,WACL,IAAI6mH,EAAcviH,KAAKkqC,MACnB5D,EAAWi8E,EAAYj8E,SACvBwvF,EAAavT,EAAYuT,WAC7B,OAAOy8M,YAAI,MAAOz8M,EAAYxvF,GAAYisS,YAAI+0B,EAAW,CACvDvrW,KAAM,UAKL2tW,EArBT,CAsBE/vT,aAEEgwT,GAEJ,SAAUjE,GAGR,SAASiE,IAGP,OAFAv8U,YAAgBptB,KAAM2pW,GAEfxnP,YAA2BniH,KAAMoiH,YAAgBunP,GAAY1hW,MAAMjI,KAAM0D,YAuDlF,OA5DAm0E,YAAU8xR,EAAYjE,GAQtBjuT,YAAakyT,EAAY,CAAC,CACxBrlW,IAAK,SACL5I,MAAO,WACL,IAAIi8C,EAAQ33C,KAERwjH,EAAexjH,KAAKkqC,MACpB5D,EAAWk9E,EAAal9E,SACxB8yC,EAAYoqC,EAAapqC,UACzBt8B,EAAa0mE,EAAa1mE,WAC1B2lH,EAAKj/C,EAAai/C,GAClBznH,EAAOwoE,EAAaxoE,KACpB8gQ,EAAYt4L,EAAas4L,UACzBhmL,EAAatS,EAAasS,WAC1BE,EAAaxS,EAAawS,WAC1B4zO,EAAcpmP,EAAaomP,YAC3B3hP,EAAczE,EAAayE,YAC3B4hP,EAAY/sT,EAAW+sT,UACvBC,EAAQhtT,EAAWgtT,MACnBC,EAASjtT,EAAWitT,OACxB,OAAOx3B,YAAIM,IAAY,MAAM,SAAUmyB,GACrC,IAAI5yB,EAAM4yB,EAAM5yB,IACZ43B,EAAYhF,EAAMviM,GACtB,OAAO8vK,YAAIs3B,EAAW,CACpB7uT,KAAMA,EACN86E,WAAY99E,YAAc,GAAI89E,EAAY,CACxC18C,UAAW4wR,EAAU53B,EAAIt2B,EAAU,aAAcnkQ,EAAMzN,QAASu4H,EAAG,CACjE,eAAe,EACf,2BAA4BzsC,GAC3B58C,MAEL6uC,YAAaA,GACZsqN,YAAIu3B,EAAO,CACZ9uT,KAAMA,EACN86E,WAAY,CACV18C,UAAW4wR,EAAU53B,EAAIt2B,EAAU,kBAAmBnkQ,EAAMzN,QAASu4H,EAAG,CACtE,sBAAsB,GACrBrpF,KAEL6uC,YAAaA,GACZ3hF,GAAWisS,YAAIw3B,EAAQ,CACxB/uT,KAAMA,EACN86E,WAAY99E,YAAc,CACxBohC,UAAW4wR,EAAU53B,EAAIt2B,EAAU,mBAAoBnkQ,EAAMzN,QAASu4H,EAAG,CACvE,uBAAuB,GACtBrpF,KACFwwR,GACH3hP,YAAaA,YAMd0hP,EA7DT,CA8DEhwT,aAEFq7B,YAAgB20R,GAAY,eAAgB,CAC1CN,kBAAkB,IAGpB,IAAIY,GAAY,SAAmB5jU,GACjC,IAAI2vF,EAAa3vF,EAAK2vF,WAClBD,EAAY1vF,EAAK0vF,UACjB9P,EAAa5/E,EAAK4/E,WAClBwiP,EAAapiU,EAAK60C,MAClBZ,EAAUmuR,EAAWnuR,QACrB00M,EAASy5E,EAAWz5E,OACxB,MAAO,CACLluP,MAAO,SACPkkF,gBAAiBiB,EAAa+oK,EAAO7pK,QAAU4Q,EAAYi5J,EAAOk7E,UAAY,cAC9EjkQ,MAAO+vB,EAAag5J,EAAO24E,UAAY1hP,EAAa+oK,EAAOg1E,SAAW,UACtE3+O,OAAQ,UACRjqC,QAAS,QACT+rC,SAAU,UACVrrC,QAAS,GAAGxwE,OAA0B,EAAnBgvE,EAAQuqR,SAAc,OAAOv5V,OAA0B,EAAnBgvE,EAAQuqR,SAAc,MAC7EvpR,MAAO,OACP6uR,WAAY,OACZC,wBAAyB,mBAEzB,UAAW,CACTplP,iBAAkBgR,IAAe/P,EAAa+oK,EAAO7pK,QAAU6pK,EAAOq7E,cA2BxEC,GAAiB,SAAwBjkU,GAC3C,IAAIoiU,EAAapiU,EAAK60C,MAClBZ,EAAUmuR,EAAWnuR,QAEzB,MAAO,CACLx5C,MAAO,cACPmlE,MAHWwiQ,EAAWz5E,OAGRu7E,UACdriP,WAAY5tC,EAAQuqR,SAAW,EAC/BrjP,YAAalnC,EAAQuqR,SAAW,EAChC5nP,SAAU,WACVqX,IAAK,MACL+H,UAAW,qBAkBXmuO,GAAQ,SAAankU,GACvB,IAAI2vF,EAAa3vF,EAAK2vF,WAClByyO,EAAapiU,EAAK60C,MAClBZ,EAAUmuR,EAAWnuR,QACrB00M,EAASy5E,EAAWz5E,OACxB,MAAO,CACLluP,MAAO,cACPmlE,MAAO+vB,EAAag5J,EAAOk2E,UAAYl2E,EAAO44E,UAC9C1/O,WAAY5tC,EAAQuqR,SAAW,EAC/BrjP,YAAalnC,EAAQuqR,SAAW,EAChCvoR,SAAU,eAAehxE,OAA0B,EAAnBgvE,EAAQuqR,SAAc,OACtDx6O,SAAU,SACVpN,SAAU,WACV0Y,aAAc,WACdc,WAAY,SACZnC,IAAK,MACL+H,UAAW,qBAoBXv/E,GAAa,CACf2tT,eA3iBmB,SAAwBvgU,GAC3C,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,GAAIgsF,EAAY,CACzCs8M,IAAKt2B,EAAU,iBAAkB5xQ,GACjCkvC,UAAWqpF,EAAG,CACZ+lM,WAAW,EACX,mBAAmB,GAClBpvR,KACD9yC,GAAYisS,YAAI+0B,EAAW,QAgiB/BoD,QArZY,SAAiBxgU,GAC7B,IAAI5D,EAAW4D,EAAM5D,SACjBm8H,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB1iO,EAAYlvC,EAAMkvC,UAClB48C,EAAa9rF,EAAM8rF,WACnBD,EAAY7rF,EAAM6rF,UAClBm3I,EAAWhjO,EAAMgjO,SACjBp3I,EAAa5rF,EAAM4rF,WACnBlL,EAAa1gF,EAAM0gF,WACvB,OAAO2nN,YAAI,MAAOzoS,YAAS,CACzBruC,IAAKyxQ,EACLklE,IAAKt2B,EAAU,UAAW5xQ,GAC1BkvC,UAAWqpF,EAAG,CACZl7C,SAAS,EACT,uBAAwByO,EACxB,sBAAuBD,EACvB,wBAAyBnL,GACxBxxC,IACF08C,GAAaxvF,IAmYhBokF,kBA5jBsB,SAA2BxgF,GACjD,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,GAAIgsF,EAAY,CACzCs8M,IAAKt2B,EAAU,oBAAqB5xQ,GACpCkvC,UAAWqpF,EAAG,CACZ+lM,WAAW,EACX,sBAAsB,GACrBpvR,KACD9yC,GAAYisS,YAAIg1B,EAAa,QAijBjCA,YAAaA,EACbD,UAAWA,EACXqD,MA3XU,SAAezgU,GACzB,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB8uD,EAAU1gU,EAAM0gU,QAChBC,EAAe3gU,EAAM2gU,aACrB/pU,EAAQoJ,EAAMpJ,MACdo6C,EAAQhxC,EAAMgxC,MACd+sC,EAAc/9E,EAAM+9E,YACxB,OAAOsqN,YAAI,MAAO,CAChBH,IAAKt2B,EAAU,QAAS5xQ,GACxBkvC,UAAWqpF,EAAG,CACZniB,OAAO,GACNlnE,IACFm5P,YAAIq4B,EAAS9gU,YAAS,GAAI+gU,EAAc,CACzC5iP,YAAaA,EACb/sC,MAAOA,EACP4gO,UAAWA,EACXr5I,GAAIA,IACF3hI,GAAQyxS,YAAI,MAAO,KAAMjsS,KAwW7BwkU,aAtViB,SAAsB5gU,GACvC,IAAIkvC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB5gO,EAAQhxC,EAAMgxC,MAEd6vR,GADc7gU,EAAM+9E,YACP/qE,YAAyBhT,EAAO,CAAC,YAAa,KAAM,YAAa,QAAS,iBAE3F,OAAOqoS,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,eAAgB9jQ,YAAc,CAC3CkjC,MAAOA,GACN6vR,IACH3xR,UAAWqpF,EAAG,CACZ,iBAAiB,GAChBrpF,IACF2xR,KAwUHC,oBArpBwB,SAA6B9gU,GACrD,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UACtB,OAAOy2B,YAAI,MAAO,CAChBH,IAAKt2B,EAAU,sBAAuB5xQ,GACtCkvC,UAAWqpF,EAAG,CACZwoM,YAAY,GACX7xR,IACF9yC,IA4oBHmkF,mBAphBuB,SAA4BvgF,GACnD,IAAIkvC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,OAAQzoS,YAAS,GAAIgsF,EAAY,CAC1Cs8M,IAAKt2B,EAAU,qBAAsB5xQ,GACrCkvC,UAAWqpF,EAAG,CACZ,uBAAuB,GACtBrpF,OA4gBLorC,MA5SU,SAAe77E,GACzB,IAAIywC,EAAYzwC,EAAMywC,UAClBqpF,EAAK95H,EAAM85H,GACXq5I,EAAYnzQ,EAAMmzQ,UAClB5uC,EAAWvkO,EAAMukO,SACjBg8F,EAAWvgU,EAAMugU,SACjBlzO,EAAartF,EAAMqtF,WACnB96C,EAAQvyC,EAAMuyC,MAEdhxC,GADcvB,EAAMs/E,YACZ/qE,YAAyBvU,EAAO,CAAC,YAAa,KAAM,YAAa,WAAY,WAAY,aAAc,QAAS,iBAE5H,OAAO4pS,YAAI,MAAO,CAChBH,IAAKt2B,EAAU,QAAS9jQ,YAAc,CACpCkjC,MAAOA,GACNhxC,KACFqoS,YAAI24B,IAAephU,YAAS,CAC7BsvC,UAAWqpF,EAAG,CACZh+C,OAAO,GACNrrC,GACHmoP,SAAUr0D,EACV+7F,WAAYA,GAAWC,GACvBhsP,SAAU8Y,GACT9rF,MAuRHq+T,iBAAkBA,GAClB53E,KAhhCS,SAAczmP,GACvB,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB5uC,EAAWhjO,EAAMgjO,SACjBp3I,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,OAAQ5xQ,GACvBkvC,UAAWqpF,EAAG,CACZ0iK,MAAM,GACL/rP,IACF08C,EAAY,CACbr6H,IAAKyxQ,IACH5mO,IAmgCJ41F,SAj/Ba,SAAkBhyF,GAC/B,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB/wL,EAAU7gF,EAAM6gF,QAChBmiJ,EAAWhjO,EAAMgjO,SACrB,OAAOqlE,YAAI,MAAO,CAChBH,IAAKt2B,EAAU,WAAY5xQ,GAC3BkvC,UAAWqpF,EAAG,CACZ,aAAa,EACb,sBAAuB13C,GACtB3xC,GACH39E,IAAKyxQ,GACJ5mO,IAo+BHm/T,WAAYA,EACZH,eAAgBA,EAChBD,iBAAkBA,EAClBsE,WAAYA,GACZn+O,oBAAqBA,GACrBE,gBAAiBA,GACjBg+O,iBAAkBA,GAClBnoO,OA5GW,SAAgBr3F,GAC3B,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB9lL,EAAa9rF,EAAM8rF,WACnBD,EAAY7rF,EAAM6rF,UAClB9P,EAAa/7E,EAAM+7E,WACnBinJ,EAAWhjO,EAAMgjO,SACjBp3I,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,SAAU5xQ,GACzBkvC,UAAWqpF,EAAG,CACZjiD,QAAQ,EACR,sBAAuBwV,EACvB,qBAAsBD,EACtB,sBAAuB9P,GACtB7sC,GACH39E,IAAKyxQ,GACJp3I,GAAaxvF,IA0FhB6kU,YAxEgB,SAAqBjhU,GACrC,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,cAAe5xQ,GAC9BkvC,UAAWqpF,EAAG,CACZz3C,aAAa,GACZ5xC,IACF08C,GAAaxvF,IA8DhB8kU,gBAjvBoB,SAAyBlhU,GAC7C,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClBhmL,EAAa5rF,EAAM4rF,WACnBE,EAAa9rF,EAAM8rF,WACnB8wO,EAAQ58T,EAAM48T,MAClB,OAAOv0B,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,YAAa5xQ,GAC5BkvC,UAAWqpF,EAAG,CACZ,gBAAiBzsC,EACjB,WAAY8wO,GACX1tR,IACF08C,GAAaxvF,IAouBhB+kU,YAxCgB,SAAqBnhU,GACrC,IAAI5D,EAAW4D,EAAM5D,SACjB8yC,EAAYlvC,EAAMkvC,UAClBqpF,EAAKv4H,EAAMu4H,GACXq5I,EAAY5xQ,EAAM4xQ,UAClB9lL,EAAa9rF,EAAM8rF,WACnBF,EAAa5rF,EAAM4rF,WACvB,OAAOy8M,YAAI,MAAOzoS,YAAS,CACzBsoS,IAAKt2B,EAAU,cAAe5xQ,GAC9BkvC,UAAWqpF,EAAG,CACZ,gBAAgB,EAChB,4BAA6BzsC,GAC5B58C,IACF08C,GAAaxvF,IA4BhB0gU,eAAgBA,GAEdsE,GAAoB,SAA2BphU,GACjD,OAAO8N,YAAc,GAAI8E,GAAY5S,EAAM4S,c,6BCj0C7C,ulDAAO,IAAIa,EAAS,gBACTw3R,EAAex3R,EAAS,eACxBy3R,EAAaz3R,EAAS,aACtB03R,EAAY13R,EAAS,YACrB23R,EAAa33R,EAAS,aACtB43R,EAAe53R,EAAS,eACxB63R,EAAmB73R,EAAS,mBAC5B83R,EAAc93R,EAAS,cACvB+3R,EAAe/3R,EAAS,eACxBm4R,EAAgBn4R,EAAS,gBACzBk4R,EAAal4R,EAAS,aACtBo4R,EAAWp4R,EAAS,WACpBq4R,EAAOr4R,EAAS,OAChBu4R,EAASv4R,EAAS,SAClB04R,EAAe14R,EAAS,eACxB24R,EAAe34R,EAAS,eACxB44R,EAAsB54R,EAAS,sBAC/B64R,EAAoB74R,EAAS,oBAC7B84R,EAAU94R,EAAS,UACnB+4R,EAAQ/4R,EAAS,QACjBk5R,EAAal5R,EAAS,aACtBm5R,EAAiBn5R,EAAS,iBAC1Bo5R,EAAQp5R,EAAS,QACjBq5R,EAAgBr5R,EAAS,gBACzB25R,EAAoB35R,EAAS,oBAC7B45R,EAAuB55R,EAAS,uBAChCs5R,EAAyBt5R,EAAS,yBAClCu5R,EAAev5R,EAAS,eACxBw5R,EAAwBx5R,EAAS,wBACjCy5R,EAAcz5R,EAAS,cACvB05R,EAAS15R,EAAS,SAClB+5R,EAAQ/5R,EAAS,QACjBg6R,EAAmBh6R,EAAS,mBAC5Bm6R,EAAUn6R,EAAS,UACnBq6R,EAAqBr6R,EAAS,qBAC9Bu6R,EAAuBv6R,EAAS,wB,iKC0B5B4tT,EAnDgB10O,IAAOn+C,IAAIymM,OAA6B,gBAAGqsF,EAAH,EAAGA,MAAOhlP,EAAV,EAAUA,IAAKK,EAAf,EAAeA,YAAa4kP,EAA5B,EAA4BA,gBAAoBnnV,EAAhD,uBAA4D,CACjIg3F,MAAM,qCACJowP,eAAgBF,EAAQ,QAAU,UAClCG,gBAAgB,OAAD,OAASnlP,EAAT,MAEbK,EACE,CACA0K,OAAQ,EACRW,cAAerL,GAEf,CACAmb,KAAM,aAGPypO,GACAnnV,MAfwBuyG,CAAH,8GAuBxB,CAAC,SAAU,SAAU,SAAU,SAAU,UAAU7tH,KAAI,SAAC4iW,GAAD,OAAQ1oO,IAAWjN,MAAM21O,GAAxB,IAAD,6DACnD,SAAC1hU,GAAD,OAAWA,EAAM0hU,IAAO1hU,EAAM0hU,GAAI/kP,aAAvB,sCAES38E,EAAM0hU,GAAI/kP,YAFnB,kBAKX,SAAC38E,GAAD,OAAWA,EAAM0hU,IAAO1hU,EAAM0hU,GAAIplP,MAChCt8E,EAAM0hU,GAAIplP,IAAIhmG,QAAQ,SAAtB,8CAE0B0pB,EAAM0hU,GAAIplP,IAFpC,sBASF,SAACt8E,GAAD,OAAWA,EAAM0hU,KAAQ1hU,EAAM0hU,GAAIJ,MAAV,0G,gBCnBlBK,EApB+B,SAAC,GAKxC,IAJLrlP,EAII,EAJJA,IACAglP,EAGI,EAHJA,MACA3kP,EAEI,EAFJA,YACA4kP,EACI,EADJA,gBAEM7mQ,EAAqBlzD,sBAAY6rK,YAAsB,cACvDt1G,EAAS8zK,cACT+vF,EAAmBlnQ,EAAYmnQ,YAAgB9jQ,EAAQue,GAAO,GAEpE,OACE,cAAC,EAAD,CACEA,IAAKslP,EACLN,MAAOA,EACP3kP,YAAaA,EACb4kP,gBAAiBA,KCERO,EAlBgC,SAAC,GAKzC,IAJLxlP,EAII,EAJJA,IACAglP,EAGI,EAHJA,MACA3kP,EAEI,EAFJA,YACA4kP,EACI,EADJA,gBAEA,OACE,cAAC,EAAD,aACEjlP,IAAKA,EACLglP,MAAOA,EACP3kP,YAAaA,GAER4kP,KCJIQ,EAbQp1O,IAAOn+C,IAAV,gFACT,SAACwzR,GAAD,OAA+CA,EAAoB5wR,OAAS,UAC3E,SAAC4wR,GAAD,OAA+CA,EAAoB3wR,QAAU,YACrF,SAAC2wR,GAAD,MAA6E,SAA9BA,EAAoBzyP,OAAoB,oBACvF,SAACyyP,GAAD,MAA6E,UAA9BA,EAAoBzyP,OAAqB,qBACxF,SAACyyP,GAAD,OAA+CA,EAAoBrlP,YAApB,4G,yFCmDpCD,IAlC+B,SAAC,GAUxC,IATLC,EASI,EATJA,YACAvrC,EAQI,EARJA,MACAC,EAOI,EAPJA,OACAiwR,EAMI,EANJA,MACAC,EAKI,EALJA,gBACA3kP,EAII,EAJJA,YACAN,EAGI,EAHJA,IACA/M,EAEI,EAFJA,MACGn1F,EACC,iBAEJ,OACE,cAAC,EAAD,yBAAqBg3D,QAAOurC,cAAatrC,SAAQk+B,SAAan1F,GAA9D,aAEIwiG,EACE,cAAC,EAAD,CACEN,IAAKA,EACLglP,MAAOA,EACP3kP,YAAaA,EACb4kP,gBAAiBA,IAGnB,cAAC,EAAD,CACEjlP,IAAKA,EACLglP,MAAOA,EACP3kP,YAAaA,EACb4kP,gBAAiBA,S,0ECxC7B,cAkBI,SAAF,EAAoB,GAAhB,IAAJ,EACE,cAAO,K,OACH,EAAC,MAAQ,E,EAkFjB,OAtGwB,iBAuBpB,EAAF,6BAWM,IAVA,IAAE,EAAkB,GAEpB,EAAQ,GACR,GAAU,EAER,EAAW,SAAC,QACH,IAAT,GAAoB,EAAM,KAAK,GAC7B,GAAI,GAGH,EAAM,EAAG,EAAM,KAAK,MAAM,OAAQ,EAAM,EAAK,IAAO,CACrD,MAAO,KAAK,MAAM,GAClB,EAAO,YAAW,GAClB,EAAW,KAAK,MAAM,EAAM,GAC7B,EAIC,IAAS,IAAU,SACd,IAAS,IAAU,eADI,IAEvB,IAAS,IAAU,EAAG,EAAS,IAAU,SACzC,IAAS,IAAU,EAAG,EAAS,IAAU,gBACzC,IAAS,IAAU,EAAG,EAAS,IAAU,KACzC,IAAS,IAAU,EAAG,EAAS,IAAU,WACzC,IAAS,IAAU,EAAG,EAAS,IAAU,UACzC,IAAS,IAAU,UAAW,EAAS,IAAU,WACjD,IAAS,IAAU,WAAY,EAAS,IAAU,YAClD,IAAS,IAAU,UAAW,EAAS,IAAU,WACjD,GAAQ,IAAU,MAAQ,GAAQ,IAAU,MAE9B,KADrB,GAAS,GACC,QAAkB,GAAY,KAAO,GAAY,MACzD,EAAS,SAAS,EAAO,IACzB,EAAQ,IAGV,EAAS,GApBP,IAAS,IAAU,UAAW,GAAU,EACvC,EAAS,GAwBd,OAAG,IAAI,WAAW,IAGtB,EAAF,gCACE,IAAM,EAAQ,KAAK,UACnB,OAAI,YAAY,GAAe,YAAY,GACpC,YAAqB,IAG5B,EAAF,gCACE,IAAM,EAAO,KAAK,aACZ,EAAO,YAAU,GACnB,IAAC,EAAM,MAAM,IAAI,IAA0B,GAC/C,OAAO,GAGP,EAAF,8BACM,OAAG,KAAK,OAGZ,EAAF,2BACE,OAAO,EAAU,GAAG,KAAK,QAGzBU,EAAU,UAAZ,oBACM,MAAG,IAAI,KAAK,MAAK,KAGrB,EAAF,iCACM,OAAG,KAAK,MAAM,OAAS,GAG3B,EAAF,iCAAc,EAAoB,GAIhC,OAHA,EAAO,KAAY,IAAU,UAC7B,GAAU,YAAqB,KAAK,MAAO,EAAQ,GACnD,EAAO,KAAY,IAAU,WACtB,KAAK,MAAM,OAAS,GAhGpB,EAAF,GAAK,SAAC,GAAkB,WAAI,EAAJ,IAEtB,EAAF,SAAW,SAAC,GAOb,OAAG,IAAI,EAAU,KANR,YAAS,OAAO,EAAK,kBAAmB,EAAG,KAC1C,YAAS,OAAO,EAAK,cAAgB,GAAI,EAAG,KAC9C,YAAS,OAAO,EAAK,cAAe,EAAG,KACrC,YAAS,OAAO,EAAK,eAAgB,EAAG,KACzC,YAAS,OAAO,EAAK,iBAAkB,EAAG,KAC1C,YAAS,OAAO,EAAK,iBAAkB,EAAG,KACW,MAyFtE,EAtGA,CAAwB,KAwGT,O,6BCrHR,IAAKC,EAYAC,EAZZ,oE,SAAYD,K,gEAAAA,E,oCAAAA,E,gDAAAA,E,wDAAAA,E,4CAAAA,E,gCAAAA,E,kDAAAA,E,wCAAAA,E,qCAAAA,M,cAYAC,K,gBAAAA,E,SAAAA,M,+PCZG,MAA0B,oC,uGCkDnCC,E,4MACGC,gBAAkB,YAKvB5hU,EAFI,EAAKT,MADPS,UAGO,IAAI8J,IAAiC,CAC5CxT,GAAIurU,EACJ7wT,QAAS8wT,M,EAINvjC,aAAe,SAACjoS,GACrB,MAAwC,EAAKiJ,MAArCwiU,EAAR,EAAQA,cAAe/pC,EAAvB,EAAuBA,aACvB+pC,EAAczrU,GACd0hS,K,EAGKgqC,YAAc,WACnB,MAII,EAAKziU,MAHPgvC,EADF,EACEA,QACA0zR,EAFF,EAEEA,YACAC,EAHF,EAGEA,iBAEIC,EAAqBF,GAAeA,EAAY7oW,IAAI,YACpDgpW,EAAoBH,GAAeA,EAAY7oW,IAAI,qBAEzD,OACE+oW,EACIA,EAAmB9jW,KAAI,SAACgkW,EAAmBhqW,GAApB,OACrB,eAAC61E,EAAA,EAAD,CAAcW,WAAW,EAAMM,QAAQ,gBAAgBV,UAAWF,EAAQ+zR,cAAe3yR,QAAS,EAAlG,UACE,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC0yC,EAAA,EAAD,CAEE5T,QAAQ,QACRmL,QAAS,kBAAMgoP,GAAoBA,EAAiBG,IACpD5zR,UAAWF,EAAQ+wB,KACnB8kO,UAAU,OALZ,SAOGi+B,EAAkBpsV,MAAM,CAAC,cAAe,mBAAqB,IANzD5d,KAST,cAAC61E,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,UACoB,OAAjB8mQ,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBhpW,IAAIf,KAAM,UApBzBA,MAyBb,M,4CAIR,WAAiB,IAAD,OACd,EAQIhD,KAAKkqC,MAPPgvC,EADF,EACEA,QACAypP,EAFF,EAEEA,aAFF,IAGEiqC,mBAHF,MAGgBh6V,gBAHhB,EAIE47T,EAJF,EAIEA,WACAC,EALF,EAKEA,aACA1iT,EANF,EAMEA,EACAyiG,EAPF,EAOEA,4BAGI0+O,EAAYN,EAAY7oW,IAAI,MAG5ByjV,GADWolB,EAAYhsV,MAAM,CAAC,QAAS,SAAU,SACtCgsV,EAAYhsV,MAAM,CAAC,aAAc,OAAQ,SAAWke,UAAQ0rS,IAAM,MAAQoiC,EAAYhsV,MAAM,CAAC,aAAc,OAAQ,UAC9HusV,EAAeP,EAAY7oW,IAAI,gBAC/BqpW,EAAwBD,EAAe5oC,YAAW4oC,GAAc,GAAQphV,EAAE,oBAC1Ew+S,EAAUqiC,EAAYhsV,MAAM,CAAC,YAAa,OAAQ,SAAWke,UAAQ0rS,IAAM,MAAQoiC,EAAYhsV,MAAM,CAAC,YAAa,OAAQ,SAC3HqzM,EAAc24I,EAAY7oW,IAAI,eAC9BspW,EAAuBp5I,EAAcswG,YAAWtwG,GAAa,GAAQloM,EAAE,oBAE7E,OACE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAOE,cAAC4zP,EAAA,EAAD,CACEC,WAAY,CACVhE,SAAU,CACR7jN,IAAK8mP,EACLjkO,IAAK,iBAGTilM,UAAW9/M,EAA8B,GAAK,CAC5C,CAAEtjG,OAAQa,EAAE,oBAAqB84F,QAAS7kH,KAAKusW,iBAC/C,CAAErhV,OAAQa,EAAE,yBAA0B84F,QAAS2pN,GAC/C,CAAEtjT,OAAQa,EAAE,sBAAuB84F,QAAS,kBAAM4pN,EAAeA,IAAiB,EAAKvF,aAAagkC,MAEtGhjP,MAAO0iP,EAAY7oW,IAAI,UACvBmjI,YAAay7L,IAIf,eAAC9pP,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SACLpB,UAAWF,EAAQzC,KAJrB,UAOE,cAAC6hP,EAAA,EAAD,CACErpD,QAAS,cAAC,IAAD,IACTpjJ,KAAM9/F,EAAE,+BAEV,cAACusS,EAAA,EAAD,CAAWzsM,KAAM+gP,EAAY7oW,IAAI,iBAEjC,cAACu0T,EAAA,EAAD,CACE1mM,KAAK,QACL/F,KAAM9/F,EAAE,qCAEV,eAACusS,EAAA,EAAD,CAAWppD,gBAAgB,gBAA3B,UACE,cAACr2L,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,8CAGP,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,8CAIT,cAACusS,EAAA,EAAD,UACGt4T,KAAK2sW,gBAGR,cAACr0C,EAAA,EAAD,CAAWrpD,QAAS,cAAC,IAAD,IAApB,SACE,cAACz1J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACE,cAAC,IAAD,CACEl6E,EAAGA,EACH4wB,QAAS,0BACTxxC,OAAQ,CACN2/T,SAAU0c,GAAYz7T,EAAE,oBACxBggG,KAAMqhP,EAAsBvrW,OAAS,GAAKurW,EAAsBt9V,MAAM,EAAG,IAAMs9V,GAEjFtwT,WAAY,CACV,sBAAcw+D,MAAO,CAACihB,WAAY,MAAvB,GACX,sBAAcjhB,MAAO,CAACihB,WAAY,MAAvB,UAKnB,cAAC+7L,EAAA,EAAD,CAAWrpD,QAAS,cAAC,IAAD,IAApB,SACE,cAACz1J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACE,cAAC,IAAD,CACEl6E,EAAGA,EACH4wB,QAAS,0BACTxxC,OAAQ,CACN2/T,SAAUP,GAAWx+S,EAAE,oBACvBggG,KAAMshP,EAAqBxrW,OAAS,GAAKwrW,EAAqBv9V,MAAM,EAAG,IAAMu9V,GAE/EvwT,WAAY,CACV,sBAAcw+D,MAAO,CAACihB,WAAY,MAAvB,GACX,sBAAcjhB,MAAO,CAACihB,WAAY,MAAvB,oB,GArKG93F,aA4NjBwwC,oBACbgG,aA5Ca,SAACC,GAAD,MAA+B,CAC5C+xR,cAAe,CACb1xR,OAAQL,EAAMZ,QAAQ,GAAK,IAE7B2vB,KAAM,CACJob,OAAQ,WAEV5uC,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BuU,WAAY,OACZ,MAAO,CACLzzB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4jE,eAAgB,QAElB5qB,MAAO,QAETs0P,kBAAmB,CACjB3pO,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B+mM,iBAAkB,CAChB5pO,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/B0sO,iBAAkB,CAChB/oK,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,aAqB5BhmE,YAAgB,gBAChB0/D,mBAlBsB,SAAC73E,GACvB,OAAO8L,YAAyB,CAC9B07E,4BAA6B7mE,eADxB7U,CAEJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACL+hU,cAAe,SAACQ,GACdviU,EAAS,IAAI4iU,IAAoB,CAACL,gBAEpCviU,eAIWsqC,CAIbq3R,G,QChRanpO,eAAQ,kBAAM,oCCqChBqpO,EAAoB,gBACpBC,EAA2B,wBAKlCe,E,4MAEGx8F,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,IAAQ27F,EAAgB,EAAK1iU,MAArB0iU,YACJvuP,EAAUuuP,cAAgBA,GAC5B,EAAKjqC,gB,EAkBFqE,gCAAkC,SAAC4lC,GACxC,OAAOA,EAAY57V,eAAc,SAACywQ,GAChC,OAAOA,EACJ/5Q,IAAI,mBAAoBkL,cAAI,CAC3BquB,GAAI2rU,EAAY7oW,IAAI,kBACpBrI,MAAOkxW,EAAY7oW,IAAI,uBAExB2D,IAAI,eAAgBkL,cAAI,CACvBquB,GAAI2rU,EAAY7oW,IAAI,cACpBrI,MAAOkxW,EAAY7oW,IAAI,uB,EAKxB4+T,aAAe,YAKpBh4R,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIurU,M,0DAlCR,YAQE7hU,EAPqB3qC,KAAKkqC,MAAlBS,UAOC,IAAI4J,IAA+B,CAC1CtT,GAAIurU,EACJtiU,MAAO,Q,oBA4BX,WAAiB,IAAD,OACd,EAMIlqC,KAAKkqC,MALEqmS,EADX,EACE50R,QACAixT,EAFF,EAEEA,YACAC,EAHF,EAGEA,iBACAr8B,EAJF,EAIEA,WACA3T,EALF,EAKEA,sBAGM4T,EAAgBD,EAAhBC,YAEFg9B,EAAqBb,GAAen8B,EAEpC90R,EAAW,WACf,OAAQ40R,GACN,KAAKk8B,EACH,OAAO,cAACiB,EAAD,CACLd,YAAaa,GAAsB,EAAKzmC,gCAAgCymC,GACxE5wC,sBAAuBA,IAG3B,KAAK6T,IACH,OAAO,cAACC,EAAA,EAAD,IAGT,QACE,OAAO,cAAC,EAAD,CACLk8B,iBAAkBA,EAClBD,YAAaa,EACb9qC,aAAc,EAAKA,aACnB8L,aAAc,EAAKvkS,MAAMukS,cAAgB,KACzCD,WAAY,EAAKtkS,MAAMskS,YAAc,QAlB5B,GAwBjB,OACE,mCAEI7yR,Q,GAvFkBlX,aA0GbwwC,sBACb4pC,mBAbsB,SAAC73E,EAAOkD,GAC9B,OAAO,aACLyR,QAASiiK,YAAkC4uJ,EAAlC5uJ,CAAqD52K,IAC3D8L,YAAyB,CAC1Bq3D,KAAMvpD,cACN4vR,WAAYh1M,YAA+BgxO,IAF1C15T,CAGA9L,OAIoB,SAAC2D,GAAD,MAAe,CAACA,eAE5BsqC,CAEbu4R,I,6BCxJF,4BA2BeG,IAlB8B,SAAC,GAAkB,IAAbzjU,EAAY,oBACrD0jU,EAA0B1jU,EAA1B0jU,KAAM1jP,EAAoBhgF,EAApBggF,MAAO5jF,EAAa4D,EAAb5D,SAErB,OAAIsnU,GAAQtnU,EAGR,cAAC,WAAD,UACGA,GAAY,OAKjB,qBAAK8yC,UAAWwC,UAAhB,SACIsuC,EAAK,kBAAcA,GAAU,a,6BCrBrC/uH,EAAQuhN,YAAa,EAErB,IAIgC51M,EAJ5B+mW,EAAWzyW,EAAQ,MAEnB0yW,GAE4BhnW,EAFM+mW,IAEe/mW,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQywH,QAAU,SAAUwjD,EAAMpuK,GAChC,IAAKouK,EACH,MAAM,IAAIutC,eAAe,6DAG3B,OAAO37M,GAAuF,YAA7D,qBAATA,EAAuB,aAAc,EAAI8sW,EAASliP,SAAS5qH,KAAuC,oBAATA,EAA8BouK,EAAPpuK,I,6BCd1I,sJA0BMwuH,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dk/F,WAAY,CACVjyR,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B2rB,MAAO/qB,EAAM82C,WAAWg/B,GAAG/qD,OAE7B+nQ,iBAAkB,CAChBtlO,YAAa,IAEf9W,KAAM,CACJt2C,MAAO,IAET2yR,eAAgB,CACdnyR,QAAS,EACTi5C,cAAe,aACf5N,SAAUjsC,EAAM82C,WAAWu/B,MAAMpqC,SACjCe,WAAY,QAEdgmP,aAAc,CACZ/mP,SAAU,GACV8K,WAAY,GAEd16G,KAAM,CACJ8kE,SAAU,EACVf,MAAO,OACP0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,YAsE/B98C,sBACb91B,YAAgB,gBAChB0/D,kBAAQ,MAXiB,SAACl0E,EAAmC8B,GAC7D,MAAO,CACL9B,WACAwjU,gBAAiB,WACfxjU,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAM1pE,GAAIwL,EAAS2hU,uBAK3Dn5R,EAlEiC,SAAC,GAU1C,IATLi1C,EASI,EATJA,MACAyW,EAQI,EARJA,YACAna,EAOI,EAPJA,IACA4nP,EAMI,EANJA,eACAC,EAKI,EALJA,UACAC,EAII,EAJJA,UACAC,EAGI,EAHJA,SACAJ,EAEI,EAFJA,gBACApiV,EACI,EADJA,EAEMmtD,EAAUs2C,IAChB,OACE,qCACE,eAAC,IAAD,CACEh2C,WAAW,EACXP,WAAW,SACXuB,KAAK,SAHP,UAMIgsC,GACA,qBACEA,IAAKA,EACLptC,UAAWF,EAAQ04C,OAKrB28O,GACE,cAAC,IAAD,CACEn1R,UAAWF,EAAQg1R,aACnBt8O,KAAM,CAAC,MAAO,eAIpB,cAAC,IAAD,CAAYx4C,UAAWF,EAAQ80R,iBAAkBt0P,QAAQ,YAAYzT,MAAM,UAA3E,SAAsFikB,IACtF,cAAC,IAAD,CACIjkB,MAAM,UACN4e,QAASspP,EACT/0R,UAAWF,EAAQ+0R,eAHvB,SAKGliV,EAAE,qCAEL,cAAC,IAAD,CACIujG,SAAU8+O,EACV9xR,UAAU,EAFd,SAIE,qBAAKkqC,IAAK6nP,EAAWhlO,IAAKilO,SAG9B,cAAC,IAAD,CAAM10R,MAAM,EAAZ,SACE,cAAC,IAAD,CAAY8/B,QAAQ,QAApB,SAA6BinB,YAoB9B,IAAM6tO,EAAyB,SAAC,GAAkB,IAAhBloU,EAAe,EAAfA,SACjC4yC,EAAUs2C,IAChB,OACE,cAAC,IAAD,CACEp2C,UAAWF,EAAQ3hE,KADrB,SAGE,cAAC,IAAD,CACE6hE,UAAWF,EAAQ60R,WACnBv0R,WAAW,EACXE,UAAU,SACVc,KAAK,SACLF,QAAS,EALX,SAOGh0C,Q,gBC3IT,IAAIz+B,EAAiB,EAAQ,MAqB7B3M,EAAOC,QAnBP,SAAuB6xB,GACrB,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAa5E,OAAOsF,UAAUV,IAAM,GACvD0pB,EAAUtuB,OAAO0D,KAAKmrB,GAEkB,oBAAjC7uB,OAAOkgB,uBAChBoO,EAAQtgB,KAAKnE,MAAMykB,EAAStuB,OAAOkgB,sBAAsB2O,GAAQ1hB,QAAO,SAAUshB,GAChF,OAAOzuB,OAAO0uB,yBAAyBG,EAAQJ,GAAK/kB,eAIxD4kB,EAAQhgB,SAAQ,SAAUpI,GACxBuD,EAAemlB,EAAQ1oB,EAAK2oB,EAAO3oB,OAIvC,OAAO0oB,GAIT9xB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCtBxE,IAAI+xJ,EAAY9sW,OAAOy6C,OACnB,SAAkB1gD,GACd,MAAwB,kBAAVA,GAAsBA,IAAUA,GAWtD,SAASu8R,EAAeF,EAAWC,GAC/B,GAAID,EAAUl2R,SAAWm2R,EAAWn2R,OAChC,OAAO,EAEX,IAAK,IAAImB,EAAI,EAAGA,EAAI+0R,EAAUl2R,OAAQmB,IAClC,GAdSogB,EAcI20Q,EAAU/0R,GAdPgnP,EAcWguC,EAAWh1R,KAbtCogB,IAAU4mO,GAGVykH,EAAUrrV,IAAUqrV,EAAUzkH,IAW1B,OAAO,EAfnB,IAAiB5mO,EAAO4mO,EAkBpB,OAAO,EA0BIg0C,IAvBf,SAAoB0wE,EAAUh0K,GAE1B,IAAI7J,OADY,IAAZ6J,IAAsBA,EAAUu9F,GAEpC,IACIjmP,EADAD,EAAW,GAEX48T,GAAa,EAejB,OAdA,WAEI,IADA,IAAIC,EAAU,GACLp6R,EAAK,EAAGA,EAAK9wE,UAAU7B,OAAQ2yE,IACpCo6R,EAAQp6R,GAAM9wE,UAAU8wE,GAE5B,OAAIm6R,GAAc99K,IAAa7wL,MAAQ06L,EAAQk0K,EAAS78T,KAGxDC,EAAa08T,EAASzmW,MAAMjI,KAAM4uW,GAClCD,GAAa,EACb99K,EAAW7wL,KACX+xC,EAAW68T,GALA58T,K,6BCrCnB,uFAqHIg+O,EAAYvrP,IAAM8E,YAAW,SAAmBW,EAAOzuC,GACzD,IAcIk+C,EAdA63G,EAAetnH,EAAMuvE,MACrBA,OAAyB,IAAjB+3C,EAA0B,UAAYA,EAC9Ct4E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBE,EAAYpvC,EAAMovC,UAClBu1R,EAAc3kU,EAAM4xC,QACpBgzR,EAAY5kU,EAAM8uT,MAClB+V,EAAW7kU,EAAMnuC,KACjBizW,EAAgB9kU,EAAM8kU,cACtBC,EAAc/kU,EAAMwvE,QACpB/4F,EAAQu8B,YAAyBhT,EAAO,CAAC,QAAS,UAAW,YAAa,YAAa,UAAW,QAAS,OAAQ,gBAAiB,YAEpIi5H,EAAQ1+H,IAAMgG,WAAWykU,KACzBC,EAAY1qU,IAAMgG,WAAW2kU,KAI/Bz1T,EADE2/B,IAGU61R,GAAmC,SAAtBA,EAAUz1P,QAAqB,KAAO,MAGjE,IAAIs/O,EAAQ8V,GAEP9V,GAASmW,GAAmC,SAAtBA,EAAUz1P,UACnCs/O,EAAQ,OAGV,IAAIl9Q,EAAU+yR,IAAgB1rM,GAASA,EAAMrnF,QAAUqnF,EAAMrnF,QAAU,WACnE//E,EAAOgzW,IAAa5rM,GAASA,EAAMpnK,KAAOonK,EAAMpnK,KAAO,UACvD29G,EAAUu1P,GAAeE,GAAaA,EAAUz1P,QAChD21P,EAAW,KAMf,OAJIL,IACFK,EAA6B,QAAlBL,EAA0B,YAAc,cAG9CvqU,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CruC,IAAKA,EACL29E,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQwgC,GAAUtgC,EAAqB,YAAVqgC,GAAuBvgC,EAAQ,QAAQ5tE,OAAOk5H,YAAW/qB,KAAsB,YAAZ39B,GAAyB5C,EAAQ,UAAU5tE,OAAOk5H,YAAW1oD,KAAqB,WAAT//E,GAAqBm9E,EAAQ,OAAO5tE,OAAOk5H,YAAWzoI,KAAS,CACpQihB,KAAMmmJ,GAASA,EAAMmsM,cAAgBp2R,EAAQo2R,cAC7C51P,IACF,YAAa21P,EACbrW,MAAOA,GACNr4U,OA6DUs6D,iBArNK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAMuyB,YAAS,GAAIoxC,EAAM82C,WAAWu/B,MAAO,CACzCn2E,QAAS,aACTgtR,cAAe,UAGfxgP,aAAc,kBAAkBt8G,OAA8B,UAAvB4vE,EAAM+pC,QAAQ/kH,KAAmB2vR,YAAQtL,YAAKrpM,EAAM+pC,QAAQsqP,QAAS,GAAI,KAAQ3/E,YAAOrL,YAAKrpM,EAAM+pC,QAAQsqP,QAAS,GAAI,MAC/JtiP,UAAW,OACXnxC,QAAS,KAIX9+D,KAAM,CACJipF,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BuU,WAAYx+C,EAAM82C,WAAWozJ,QAAQ,IACrC7oJ,WAAYrhD,EAAM82C,WAAW+4J,kBAI/Bt0M,KAAM,CACJwvB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAI5BqqP,OAAQ,CACNvpQ,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BtJ,WAAYx+C,EAAM82C,WAAWozJ,QAAQ,IACrCj+J,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCM,UAAW,CACT5pM,QAAS,oBACT,eAAgB,CACd+3C,aAAc,IAEhB,oBAAqB,CACnBv4C,MAAO,GAEPQ,QAAS,kBACT,eAAgB,CACd4sD,YAAa,GACb7U,aAAc,IAEhB,QAAS,CACP/3C,QAAS,KAMf2zR,gBAAiB,CACfn0R,MAAO,GAEPQ,QAAS,YACT,eAAgB,CACd4sD,YAAa,EACb7U,aAAc,IAKlB67O,YAAa,CACX5zR,QAAS,EACT,eAAgB,CACdA,QAAS,IAKbw2E,UAAW,CACTrlC,UAAW,QAIbslC,YAAa,CACXtlC,UAAW,UAIbulC,WAAY,CACVvlC,UAAW,QACXxxC,cAAe,eAIjBg3E,aAAc,CACZxlC,UAAW,WAIbqiP,aAAc,CACZryP,SAAU,SACVqX,IAAK,EACL/5G,KAAM,EACNymH,OAAQ,EACRhc,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWnP,YAmHd,CAChCp9G,KAAM,gBADOysE,CAEZ+0M,I,6BC/NH,IAAIrpE,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sDACD,SAEJ3K,EAAQywH,QAAUq4I,G,iQCuQZr3N,EAAkBkG,YAAyB,CAC/C68T,mBAAoBzxJ,cACpB0xJ,iBAAkBzxJ,gBAGLlpI,sBACbgG,aA9Na,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJwjH,WAAY7V,IAAK,KACjB2V,OAAO,GAAD,OAAK3/C,EAAMZ,QAAQ,KAAnB,qBAAqC4qC,IAAK,MAChDppC,QAASZ,EAAMZ,QAAQ,GACvBi3C,OAAQ,EACRl1C,SAAU,EACVgpC,OAAQ,WAEVwqP,aAAc,CACZxqP,OAAQ,WAEVyqP,aAAc,CACZh5F,UAAW,OACXx6L,SAAU,QAEZ9C,UAAW,CACT6C,SAAU,GAEZwnP,aAAc,CACZtyM,OAAQ,QAEVw+O,SAAU,CACR9pQ,MAAO,uBAET+pQ,WAAY,CACVj7O,cAAe,aAEjBk7O,aAAc,CACZhqQ,MAAO/qB,EAAM+pC,QAAQ4G,KAAK3O,UAE5B6mN,WAAY,CACV99N,MAAO,sBA8LU,CAAE+oB,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQjyE,GAdiB,SAACjC,GAC1B,MAAM,CACJA,eASWsqC,EAzLiC,SAAC/qC,GAC/C,IACEgxC,EAwBEhxC,EAxBFgxC,MADF,EAyBIhxC,EAvBFu6E,MACE/oH,EAHJ,EAGIA,MACA8/G,EAJJ,EAIIA,SAJJ,EAyBItxE,EAnBFm8D,KACEl4F,EAPJ,EAOIA,MAGF+qE,GAVF,EAQImnL,QAiBAn2N,EAfFgvC,SAVF,EAyBIhvC,EAdFgmU,cAXF,gBAcM,GAdN,GAYIC,sBAZJ,MAYqB,KAZrB,EAaOC,EAbP,mBAyBIlmU,EAVFmmU,yBAfF,MAesB,GAftB,IAyBInmU,EATFu3T,0BAhBF,MAgBuB,GAhBvB,EAiBEkO,EAQEzlU,EARFylU,mBACA1xB,EAOE/zS,EAPF+zS,eACA2xB,EAME1lU,EANF0lU,iBACA7jV,EAKEme,EALFne,EACAy1U,EAIEt3T,EAJFs3T,YArBF,EAyBIt3T,EAHFgzE,gBAtBF,WAyBIhzE,EAFFomU,qBAvBF,SAwBExsC,EACE55R,EADF45R,kBAIIysC,EAAmB70W,EACrBA,EAAMsN,KAAI,SAAAyqN,GAAI,OAAKA,EAAKvzN,MAAQuzN,EAAKvzN,KAAKqJ,SAAS,SACjDnL,OAAO+8C,OAAOs4K,EAAM,CACpB3uG,QAASu1F,IAAIm2J,gBAAgB/8I,KAE7BA,KAEF,KAGEg9I,EAAWF,GAAoBA,EAAiBvnW,KAAI,SAACyqN,EAAMzwN,GAC/D,MAIIywN,EAHFjlN,YADF,MACS,GADT,IAIIilN,EAFFvzN,YAFF,MAES,GAFT,IAIIuzN,EADF3uG,eAHF,MAGY,GAHZ,EAMA,OAAO,cAAC,IAAD,CACLoF,MAAO17G,EADF,SAKHtO,EAAKqJ,SAAS,SACV,qBACA6vE,UAAWF,EAAQ42R,aACnBtpP,IAAK1B,IAEL,8BACE,cAAC,IAAD,CAAiB8M,KAAK,cAAc71H,KAAK,KAAKkqG,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,UAT9Et/B,MA0BTyhC,aAAgB,kBAAM,WAChB8rU,GAAoBD,GACtBC,EAAiBvnW,KAAI,SAAAyqN,GAAI,OAAIpZ,IAAIq2J,gBAAgBj9I,EAAK3uG,eAEvD,CAACppH,IAEJ,MAKIi0W,EAAmB3uV,WAJrB2vV,EADF,EACEA,YACAz8C,EAFF,EAEEA,kBACA08C,EAHF,EAGEA,aACAj8R,EAJF,EAIEA,aAGF,OACE,eAAC,IAAD,yBAAM6E,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASb,WAAW,SAASG,UAAWF,EAAQM,WAAeykQ,GAAjH,cAEI0yB,EACqB,SAAjBC,EACE,cAAC,IAAD,UAAa7kV,EAAE,sBACE,eAAjB6kV,EACE,cAAC,IAAD,UAAa7kV,EAAE,4BACE,OAAjB6kV,GACG,eAAC,IAAD,CAAMp3R,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACC,cAAC,IAAD,CAAgBygC,QAAQ,cAAch+G,MAAOw4T,EAAmB54M,MAAO,CAACj/B,SAAU,KACtF,eAAC,IAAD,YAAct/E,KAAKwjB,MAA0B,IAApB2zS,GAA2B,KAAK95D,QAAQ,GAAjE,UAEJ,qCACE,cAAC,IAAD,yBACE+1G,eAtCgB,SAACU,EAAmB1pO,GAChD,IACEx8F,EACET,EADFS,SAEF6wE,EAASq1P,GACLV,GAAkBA,EAAeU,EAAW1pO,GAC3CyoO,GAAoBjlU,EAAS,IAAIgL,MAiC1BgrE,UAAU,EACVzD,SAAUA,GACNkzP,GAJN,aAMG,gBAAGU,EAAH,EAAGA,aAAcC,EAAjB,EAAiBA,cAAjB,OACC,eAAC,IAAD,qCAAM33R,UAAW6tC,IAAW/tC,EAAQ3hE,KAAT,eAAkB2hE,EAAQ22R,aAAe3yP,IAAa1jC,WAAW,EAAMP,WAAW,SAASa,QAAQ,SAASU,KAAK,UAAas2R,KAAoBT,GAA7K,cACE,iDAAWU,KAAqBtP,IAE9B/lW,GAASk0W,EACLa,EACAvmU,EAAM25R,aACJ,cAAC,IAAD,CACEr9M,IAAKt8E,EAAM25R,aACX/8M,aAAa,EACb1tC,UAAWF,EAAQ2qP,eAErB,eAAC,IAAD,CACErqP,WAAW,EACXM,QAAQ,SACRf,aAAa,SAHf,UAKE,cAAC,IAAD,CAAMa,MAAM,EAAZ,SACE,cAAC,IAAD,CAAiButC,SAAS,QAAQlhB,MAAM,eAE1C,eAAC,IAAD,CACEzsB,WAAW,EACXI,MAAM,EACNF,UAAU,SACVT,WAAW,SACXqiC,MAAO,CAAE2R,UAAW,UALtB,UAOE,cAAC,IAAD,CAAMrzC,MAAM,EAAZ,SACE,cAAC,IAAD,CAAYR,UAAW8jC,EAAWhkC,EAAQ+2R,aAAe/2R,EAAQ62R,SAAjE,SAA4EhkV,EAAE,4BAEhF,cAAC,IAAD,CAAM6tD,MAAM,EAAZ,SAGIsjC,EACI,cAAC,IAAD,CAAY9jC,UAAW6tC,IAAW/tC,EAAQ82R,WAAY92R,EAAQ+2R,cAA9D,SACGlkV,EAAE,4BAEL,cAAC,IAAD,CACEgjT,UAAU,OACV9oO,MAAM,UACN7sB,UAAWF,EAAQ82R,WAHrB,SAKGjkV,EAAE,8BAIX+3S,EAAoBA,IAAsB09B,EAC1C,cAAC,IAAD,CAAM5nR,MAAM,EAAZ,SACE,cAAC,IAAD,CAAY8/B,QAAQ,UAAUtgC,UAAWF,EAAQ6qP,WAAjD,SAA8Dy9B,MAE9D,mBASrBrzV,GAAS,cAAC,IAAD,CAAY83F,MAAM,QAAlB,SAA2B93F,OAG3CwmE,GAAiB,cAAC,IAAD,CAAYsxB,MAAM,QAAlB,SAA2BtxB,Y,6BC7QpD,0EAIe,SAASxhC,EAAetlC,EAAK7K,GAC1C,OAAO,YAAe6K,IAAQ,YAAqBA,EAAK7K,IAAM,YAA2B6K,EAAK7K,IAAM,gB,oeCqHzFguW,EAA8B,qBAC9BC,EAA8B,sBAE9BC,EAAwB,SAACC,GACpC,GAAIA,EAAc,CAChB,IAAIC,EAA0Bx+V,gBAExB8/K,EAAMy+K,EAAaptW,IAAI,OACvB+uL,EAAMq+K,EAAaptW,IAAI,OAS7B,OAPI2uL,GAAOh3E,IAAOg3E,GAAKwR,YACrBktK,EAA0BA,EAAwB1pW,IAAI,MAAOm6Q,YAASnvF,KAEpEI,GAAOp3E,IAAOo3E,GAAKoR,YACrBktK,EAA0BA,EAAwB1pW,IAAI,MAAOm6Q,YAAS/uF,KAGjEs+K,EAAwBh8V,QAAUg8V,EAA0B,KAErE,OAAO,MAGHC,EAAsB,SAAC31W,EAAO2+G,GAClC,OAAOwqF,YAAiB,UAAWxqF,IAE/Bi3P,GAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,cAAexqF,IAEhFk3P,GAAwB,SAAC71W,EAAO2+G,GAAR,OAAsBirF,YAAmB,YAAajrF,IAC9Em3P,GAA2B,SAAC91W,EAAO2+G,GAAR,OAAsBirF,YAAmB,WAAYjrF,IAoDhFo3P,GAA0B,GAC1BC,G,4MACG1qU,MAAQ,CACb2qU,mBAAoB,GACpBC,aAAc,GACdC,gBAAiB,I,EAGZC,aAAe,YAA8D,IAA3Dl2C,EAA0D,EAA1DA,QAASz1M,EAAiD,EAAjDA,UAAWC,EAAsC,EAAtCA,SAAUF,EAA4B,EAA5BA,aACrD,EAA2B,EAAKh8E,MAAxBgvC,EAAR,EAAQA,QAASgC,EAAjB,EAAiBA,MACjB,GAAI0gP,EACF,OACE,cAAC,IAAD,CAAMpiP,WAAW,EAAjB,SACE,cAAC,IAAD,CACEgtC,IAAKo1M,EACL90M,aAAa,EACbxrC,MAAK,UAAKJ,EAAMZ,QAAQ,GAAnB,MACLusC,YAAa,OACb4kP,gBAAiB,CAAChkP,aAAc,MAAOikP,eAAgB,SACvDpwP,MAAO,CAAC//B,OAAQ,OAKxB,IAAMw2R,EAAc,EAAE5rP,GAAa,IAAI,IAAKC,GAAY,IAAI,IAAI3kG,KAAK,MAASykG,GAAgB,IAAI,GAClG,OACE,cAAC,IAAD,CAAQ9sC,UAAWF,EAAQ84R,OAA3B,SACE,cAAC,IAAD,CAAY54R,UAAWF,EAAQ64R,WAA/B,SAA4CA,O,EA8E3Cz0P,cAAgB,SAAC20P,GAA+C,IAA3B/+V,IAA0B,yDACpE,EAGI,EAAKg3B,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAIIC,EAAY/7G,OAAM,OAACswW,QAAD,IAACA,OAAD,EAACA,EAAUhxU,IAClB,MAAby8E,GAAsBthE,MAAMshE,GAI9B/yE,EAASu/B,YAAOuzC,EAAM,UAAW,QAHjC9yE,EAAS,IAAIgzE,IAAkBD,IAC/B/yE,EAAS,IAAIizE,IAA8B,CAAEF,gBAI3CxqG,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACq0P,GAAgD,IAA3Bh/V,IAA0B,yDACtE,EAGI,EAAKg3B,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAGkB,OAAR,OAARy0P,QAAQ,IAARA,OAAA,EAAAA,EAAUjxU,IACZ0J,EAAS,IAAIqzE,IAAck0P,EAASjxU,KAEpC0J,EAASu/B,YAAOuzC,EAAM,WAAY,OAEhCvqG,GACF,EAAK+qG,c,EAGFA,WAAa,SAACk0P,GACnB,MAGI,EAAKjoU,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAEc,OAAR,OAAJ00P,QAAI,IAAJA,OAAA,EAAAA,EAAMlxU,KACR0J,EAASu/B,YAAOuzC,EAAM,OAAQ,Q,EAI3B20P,cAAgB,SAACjnW,GACtB,MAII,EAAK++B,MAHPS,EADF,EACEA,SACA0nU,EAFF,EAEEA,uBACArmU,EAHF,EAGEA,QA+BF,GA5BI7gC,EAAO4pN,UACL5pN,EAAO4pN,QAAQriC,MACjBvnL,EAAO4pN,QAAQriC,IAAMh3E,IAAOoyH,IAAI3iO,EAAO4pN,QAAQriC,KAAK5mI,eAElD3gD,EAAO4pN,QAAQjiC,MACjB3nL,EAAO4pN,QAAQjiC,IAAMp3E,IAAOoyH,IAAI3iO,EAAO4pN,QAAQjiC,KAAKhnI,gBAGpD3gD,EAAO8oN,cACL9oN,EAAO8oN,YAAYvhC,MACrBvnL,EAAO8oN,YAAYvhC,IAAMh3E,IAAOoyH,IAAI3iO,EAAO8oN,YAAYvhC,KAAK5mI,eAE1D3gD,EAAO8oN,YAAYnhC,MACrB3nL,EAAO8oN,YAAYnhC,IAAMp3E,IAAOoyH,IAAI3iO,EAAO8oN,YAAYnhC,KAAKhnI,gBAI5D3gD,EAAOmnW,SAAgC,MAArBnnW,EAAOmnW,QAAQ9wU,KACnCmJ,EAAS,IAAIgzE,IAAkBxyG,EAAOmnW,QAAQ9wU,GAAGP,KACjD0J,EAAS,IAAIizE,IAA8B,CAAEF,UAAWvyG,EAAOmnW,QAAQ9wU,GAAGP,OAExE91B,EAAO+mW,UAAkC,MAAtB/mW,EAAO+mW,SAAS1wU,IACrCmJ,EAAS,IAAIqzE,IAAc7yG,EAAO+mW,SAAS1wU,GAAGP,KAEhD0J,EAAS8/B,YACPumS,EACAvvW,MAAMC,QAAQyJ,GAAU,GAAKA,IAE3B1J,MAAMC,QAAQyJ,GAChBknW,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,QAEH,CAEDzgQ,EAAOqD,MACTm8B,EAASu/B,YACP8mS,EACA,OACAp+V,cAAIzH,EAAOqD,QAGXrD,EAAO6sI,UACTrtG,EAASu/B,YACP8mS,EACA,WACAp+V,cAAIzH,EAAO6sI,YAGX7sI,EAAO6oN,WACTrpL,EAASu/B,YACP8mS,EACA,YACAp+V,cAAIzH,EAAO6oN,aAGX7oN,EAAOonW,mBACT5nU,EAASu/B,YACP8mS,EACA,oBACAp+V,cAAIzH,EAAOonW,qBAGf,IAAMC,EAAkBrnW,EAAOsnW,YAActnW,EAAO,4BAChDqnW,GACF7nU,EAASu/B,YACP8mS,EACA,2BACAp+V,cAAI4/V,O,EAMLl2C,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IAAI22W,EAAez6V,iBAgPbsxG,EAAU,CACd,IAhPqBp+G,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAMjzQ,EAAOizQ,EAAI7gQ,MAAM,CAAC,OAAQ,SAE1B+xV,EAAalxF,EAAI7gQ,MAAM,CAAC,aAAc,OACtCgyV,EAAcnxF,EAAI7gQ,MAAM,CAAC,cAAe,OACxCiyV,EAAiBpxF,EAAI7gQ,MAAM,CAAC,WAAY,QACxCkyV,EAAiBrxF,EAAI7gQ,MAAM,CAAC,WAAY,QAExCmwQ,EAAUtP,EAAI7gQ,MAAM,CAAC,gBAAiB,KAAM,IAC5CmyV,EAAYtxF,EAAI7gQ,MAAM,CAAC,gBAAiB,MAAO,IAE/CoyV,EAAYvxF,EAAI7gQ,MAAM,CAAC,OAAQ,MAAO,IACtCqyV,EAASxxF,EAAI7gQ,MAAM,CAAC,OAAQ,KAAM,IAClCouK,EAAQyyF,EAAI7gQ,MAAM,CAAC,aAAc,MAAO,IACxCsyV,EAAkBzxF,EAAI7gQ,MAAM,CAAC,qBAAsB,KAAM,IAE3DoyV,IACFN,EAAeA,EAAatmW,KAAKgd,iBAAO,CACtCqY,IAAK,CACH,CACEo8G,KAAM,CACJr8G,IAAI,IAGR,CACE2xU,UAAW,CACTzgL,IAAK,SAMXugL,IACFP,EAAeA,EAAatmW,KAAKgd,iBAAO,CACtCqY,IAAK,CACH,CACEo8G,KAAM,CACJr8G,IAAI,IAGR,CACE2xU,UAAW,CACTzgL,IAAK,SAMX1D,IACF0jL,EAAeA,EAAatmW,KAAKgd,iBAAO,CACtCsnQ,WAAY,CACVh+F,IAAK,OAIPwgL,IACFR,EAAeA,EAAatmW,KAAKgd,iBAAO,CACtC,uBAAwB,CACtBoY,IAAI,OAIVigP,EAAIj5J,OAAO,QACXi5J,EAAIj5J,OAAO,cACXi5J,EAAIj5J,OAAO,sBACX,IAAMykH,EAAWw0C,EAAI7gQ,MAAM,CAAC,WAAY,OAElCwyV,EAAkB3xF,EAAI7gQ,MAAM,CAAC,kBAAmB,OAChDyyV,EAAiB5xF,EAAI7gQ,MAAM,CAAC,iBAAkB,OAE9C0yV,EAAY7xF,EAAI7gQ,MAAM,CAAC,YAAa,OACpC2yV,EAAmB9xF,EAAI7gQ,MAAM,CAAC,mBAAoB,OAClDutQ,EAAW1M,EAAI7gQ,MAAM,CAAC,WAAY,OAElC4yV,EAAgB/xF,EAAI7gQ,MAAM,CAAC,YAAa,OACxC6yV,EAAkBhyF,EAAI7gQ,MAAM,CAAC,oBAAqB,OAElD88F,EAAY+jK,EAAI7gQ,MAAM,CAAC,UAAW,KAAM,OACxCk9F,EAAa2jK,EAAI7gQ,MAAM,CAAC,WAAY,KAAM,OAC1Cs9F,EAASujK,EAAI7gQ,MAAM,CAAC,OAAQ,KAAM,OAEpC88F,GACF+jK,EAAIvxQ,MAAM,CAAC,YAAa,MAAOwtG,GAEjC+jK,EAAIj5J,OAAO,WACP1K,GACF2jK,EAAIvxQ,MAAM,CAAC,aAAc,MAAO4tG,GAElC2jK,EAAIj5J,OAAO,YACPtK,GACFujK,EAAIvxQ,MAAM,CAAC,SAAU,MAAOguG,GAE9BujK,EAAIj5J,OAAO,SAEX,OAAIgrP,QAAJ,IAAIA,OAAJ,EAAIA,EAAe3xW,QACjB4/Q,EAAIvxQ,MAAM,CAAC,YAAa,MAAOsjW,EAAcxqW,KAAI,SAACmhG,GAAD,OAAUA,EAAKlpE,OAEhEwgP,EAAIj5J,OAAO,cAGb,OAAIirP,QAAJ,IAAIA,OAAJ,EAAIA,EAAiB5xW,QACnB4/Q,EAAIvxQ,MAAM,CAAC,oBAAqB,MAAOujW,EAAgBzqW,KAAI,SAACoiD,GAAD,OAAYA,EAAOnqB,OAE9EwgP,EAAIj5J,OAAO,qBAGb,IAAMiqP,EAAahxF,EAAI7gQ,MAAM,CAAC,2BAAkB,OAC5C6xV,GAAcA,EAAW5wW,OAC3B4/Q,EAAIvxQ,MAAM,CAAC,2BAAkB,MAAOuiW,EAAWzpW,KAAI,SAACmhG,GAAD,OAAUA,EAAKlpE,OAElEwgP,EAAIj5J,OAAO,4BAGTh6G,IAASA,EAAK3M,QAChB4/Q,EAAIj5J,OAAO,QAGb,IAAMwvB,EAAWypI,EAAI7gQ,MAAM,CAAC,WAAY,MAAO,IACzC8yV,EAAU,OAAG17N,QAAH,IAAGA,OAAH,EAAGA,EAAUhvI,KAAI,SAAAivI,GAAO,OAAIA,EAAQh3G,OACpD,OAAIyyU,QAAJ,IAAIA,OAAJ,EAAIA,EAAY7xW,SACd4/Q,EAAIvxQ,MAAM,CAAC,aAAc,MAAOwjW,GAElCjyF,EAAIj5J,OAAO,YAkBX,IAAMusG,EAAU0sD,EAAI19Q,IAAI,WAClB4vW,EAAkB5+I,GAAWm8I,EAAsBn8I,GACrD4+I,EACFlyF,EAAI/5Q,IAAI,UAAWisW,GACV5+I,GACT0sD,EAAIj5J,OAAO,WAGb,IAAMyrG,EAAcwtD,EAAI19Q,IAAI,eACtB6vW,EAAsB3/I,GAAei9I,EAAsBj9I,GAC7D2/I,EACFnyF,EAAI/5Q,IAAI,cAAeksW,GACd3/I,GACTwtD,EAAIj5J,OAAO,eAGb,IAAMqrP,EAAgBpyF,EAAI7gQ,MAAM,CAAC,SAAU,QACvC,OAACizV,QAAD,IAACA,OAAD,EAACA,EAAehyW,SAClB4/Q,EAAIj5J,OAAO,UAGTuoK,IAAYgiF,EACdtxF,EAAIj5J,OAAO,kBAEXuoK,EAAUtP,EAAIvxQ,MAAM,CAAC,gBAAiB,OAAO,GAAQuxQ,EAAIvxQ,MAAM,CAAC,gBAAiB,OAAO,GACxFuxQ,EAAIpxQ,SAAS,CAAC,gBAAiB,SAGjC48N,EAAWw0C,EAAIvxQ,MAAM,CAAC,WAAY,MAAO,CAACvO,OAAOoC,cAAIkpO,EAAU,SAAWw0C,EAAIj5J,OAAO,YAErFmqP,GAAclxF,EAAIvxQ,MAAM,CAAC,aAAc,MAAOnM,cAAI4uW,EAAY,OAC9DC,GAAenxF,EAAIvxQ,MAAM,CAAC,cAAe,MAAOnM,cAAI6uW,EAAa,OAE5DD,EAYoB,KAAnBE,GAA4C,KAAnBC,EAC3BrxF,EAAIj5J,OAAO,YACiB,KAAnBqqP,EACTpxF,EAAIpxQ,SAAS,CAAC,WAAY,QACE,KAAnByiW,GACTrxF,EAAIpxQ,SAAS,CAAC,WAAY,SAhBxBwiW,GACFpxF,EACGvxQ,MAAM,CAAC,gBAAiB,OAAQ2iW,GAChCrqP,OAAO,YAERsqP,GACFrxF,EACGvxQ,MAAM,CAAC,gBAAiB,OAAQ4iW,GAChCtqP,OAAO,aAYd4qP,EAAkB3xF,EAAIvxQ,MAAM,CAAC,kBAAmB,MAAOnM,cAAIqvW,EAAiB,OAAS3xF,EAAIj5J,OAAO,mBAChG6qP,EAAiB5xF,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAOnM,cAAIsvW,EAAgB,OAAS5xF,EAAIj5J,OAAO,kBAC7F8qP,EAAY7xF,EAAIvxQ,MAAM,CAAC,YAAa,MAAOnM,cAAIuvW,EAAW,SAAW7xF,EAAIj5J,OAAO,aAChF+qP,EAAmB9xF,EAAIvxQ,MAAM,CAAC,mBAAoB,MAAOnM,cAAIwvW,EAAkB,OAAS9xF,EAAIj5J,OAAO,oBACnG2lK,EAAW1M,EAAIvxQ,MAAM,CAAC,WAAY,MAAOnM,cAAIoqR,EAAU,OAAS1M,EAAIj5J,OAAO,eAI1E1iG,SAAQ,SAACxhB,GACR,OAAOA,EAAIs0E,QAAQ,IAAI99B,OAAO,eAAM,KAAM,QAE3CnvC,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,GAAY,SAARA,EACF,OAAO40I,EAAIloI,eAAc,SAAAywQ,GAAQ,IAAD,EAIvB,EAHHqyF,EAAY1qV,iBAAO,CAAEkY,GAAI,KACM,KAA/B,UAAA/1B,EAAOxH,IAAI,eAAX,eAAoBlC,QACtBiyW,EAAYA,EAAUxjW,OAAO,MAAM,SAAAyjW,GAAM,OAAIA,EAAO3nW,KAAP,eAAc9H,EAAM,CAAE,KAAQ,SAE3E,UAAAiH,EAAOxH,IAAI,eAAX,SAAoB2I,SAAQ,SAAAgqE,GAC1Bo9R,EAAYA,EAAUxjW,OAAO,MAAM,SAAAyjW,GAAM,OAAIA,EAAO3nW,KAAP,eAAc9H,EAAM,CAAE,KAAQoyE,WAG/E+qM,EAAIr1Q,KAAK0nW,MAEN,GAAa,cAARxvW,GAA+B,sBAARA,IAAgCiH,EAAOxH,IAAI,MAUvE,CACL,IAAM+vW,EAAY1qV,iBAAO,eAAG9kB,EAAMiH,IAClC,OAAO2tI,EAAI9sI,KAAK0nW,GAXhB,OAAO56N,EAAIloI,eAAc,SAAAywQ,GACvB,IAAIqyF,EAAY1qV,iBAAO,CAAEkY,GAAI,KACzB/1B,EAAOxH,IAAI,MAAMlC,OAAS,IAC5B0J,EAAOxH,IAAI,MAAM2I,SAAQ,SAAAgqE,GACvBo9R,EAAYA,EAAUxjW,OAAO,MAAM,SAAAyjW,GAAM,OAAIA,EAAO3nW,KAAP,eAAc9H,EAAM,CAAE,GAAMoyE,EAAEz1C,YAE7EwgP,EAAIr1Q,KAAK0nW,SAOdpB,EAAa32W,KAAO,EAAIkc,eAAK,CAACmR,iBAAO,CAAEkY,GAAIoxU,MAAoBz6V,kBACjE1M,QAAO,SAAC7P,GAEP,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAO7iB,EAAMqI,IAAIO,EAAI,KAAuC,OAAhC5I,EAAMklB,MAAM,CAACtc,EAAI,GAAI,UAIvBia,QAG9B8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAMI,EAAK9pU,MALPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAzxE,EAHF,EAGEA,QACAqmU,EAJF,EAIEA,uBACA4B,EALF,EAKEA,aAGFtpU,EACE8/B,YACEumS,EACA,KAIJrmU,EAASggC,YAAM8yC,GAAQuzP,IACvBiD,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,uDAveV,WACE,IACEzwJ,EACEn7G,KAAKkqC,MADPixE,WAGFn7G,KAAKkqC,MAAMgqU,iBAAiBjD,GACxB91P,GAAcA,EAAWp/G,MAC3BiE,KAAKs8T,SAASnhN,K,gCAIlB,SAA0BkD,EAAW4yJ,GACnC,MAmBIjxQ,KAAKkqC,MAlBPygE,EADF,EACEA,KACAhgE,EAFF,EAEEA,SACAyzE,EAHF,EAGEA,aACA+1P,EAJF,EAIEA,qBACAC,EALF,EAKEA,uBACAC,EANF,EAMEA,mBACAC,EAPF,EAOEA,iBACAC,EARF,EAQEA,cACAp5P,EATF,EASEA,WACAq5P,EAVF,EAUEA,YACAC,EAXF,EAWEA,iBACAC,EAZF,EAYEA,mBACAxyC,EAbF,EAaEA,WACAyyC,EAdF,EAcEA,eACA94N,EAfF,EAeEA,WAEA99B,GAjBF,EAgBEP,UAhBF,EAiBEO,WACAI,EAlBF,EAkBEA,OAGF,GAAIxT,GAASA,IAAS0T,EAAU1T,KAAO,CACrCyT,IACA+1P,IACAC,IACAC,IACAC,IACAE,EAAY,IACZD,IACAryC,IACAyyC,EAAe,KACK,IAAhB94N,GACF64N,EAAmB74N,GAKrB,IAAMn+B,EAAS,OAAGvC,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,UAAW,KAAM,OAChDk9F,EAAU,OAAG3C,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,WAAY,KAAM,OAClDs9F,EAAM,OAAG/C,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,KAAM,OAE5C88F,GAAaI,IAAeC,EAAUp8F,MAAK,SAACuwV,GAAD,OAAcA,EAASnuW,IAAI,QAAU+5G,OAClFnzE,EAAS,IAAIgzE,IAAkBh8G,OAAO+7G,KACtC/yE,EAAS,IAAIizE,IAA8B,CAAEF,UAAW/7G,OAAO+7G,OAE7DI,GAAcI,IAAWC,EAAOx8F,MAAK,SAACwwV,GAAD,OAAUA,EAAKpuW,IAAI,QAAUm6G,MACpEvzE,EAAS,IAAIqzE,IAAcF,IAI3BO,EAAUu2P,0BAA4B50W,KAAKkqC,MAAM0qU,0BAAoE,IAAxC50W,KAAKkqC,MAAM0qU,yBAC1FH,EAAiBz0W,KAAKkqC,MAAM0qU,yBAI1Bz5P,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAualB,WAAiB,IAAD,OACd,EAGIn7G,KAAKgnC,MACT,GAJA,EACE2qU,mBADF,EAEEC,aA+BE5xW,KAAKkqC,OA5BPne,EADF,EACEA,EACA4e,EAFF,EAEEA,SACAuuC,EAHF,EAGEA,QACAyxB,EAJF,EAIEA,KACAg4N,EALF,EAKEA,aACAnlN,EANF,EAMEA,UACAq3P,EAPF,EAOEA,eACA92P,EARF,EAQEA,UACAI,EATF,EASEA,OACAhD,EAVF,EAUEA,WACA25P,EAXF,EAWEA,wBACAC,EAZF,EAYEA,sBACAC,EAbF,EAaEA,cACAnhJ,EAdF,EAcEA,gBACAohJ,EAfF,EAeEA,cACA5yC,EAhBF,EAgBEA,aACA6yC,EAjBF,EAiBEA,cACA/pT,EAlBF,EAkBEA,QACA0oR,EAnBF,EAmBEA,YACAshC,EApBF,EAoBEA,QACAn9N,EArBF,EAqBEA,SACA28N,EAtBF,EAsBEA,eACAS,EAvBF,EAuBEA,kBACAv5N,EAxBF,EAwBEA,WACAw5N,EAzBF,EAyBEA,cACAb,EA1BF,EA0BEA,YACAc,EA3BF,EA2BEA,UACAzoT,EA5BF,EA4BEA,cAGI0wD,EAA2B,MAAdpC,EAAqBA,EAAWv6F,MAAM,CAAC,WAAY,UAAW,KAAM,QAAU,EAC3F88F,GAAkC,MAAdH,EAAqB57G,OAAO47G,IAAe,EAC/Dg4P,GAAgB9gL,oBAAUogL,EAAe9wW,IAAI25G,MAAe3xF,EAAE,8BAEhEypV,GAAcv9V,iBACZw9V,GAAoBP,EAAcnxW,IAAI83I,GAS5C,OARI45N,KACFD,GAAcA,GAAYxkW,eAAc,SAAAywQ,GACtCg0F,GAAkBl0V,SAAS7U,SAAQ,SAAAu0B,GACjCwgP,EAAIr1Q,KAAK++C,EAAQpnD,IAAIk9B,WAMzB,mCACE,eAAC,IAAD,CACEm4C,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,UAUE,eAAC,IAAD,CACEvxB,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,+BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,MAGF,cAAC,IAAD,CACEptL,WAAY07N,EACZ2E,eAAgBjrQ,EAChBwQ,WAAYA,EACZ06P,qBAAsB9pV,EAAE,sCACxB+pV,WAAY,kBAAMrvQ,IAAmB9rE,kBAAgBo7U,sBAAuBlpT,EAAc,CAACmpT,6BAA8B,8CACzHC,mBAAoB,SAACC,GAAD,OAAwBzvQ,IAAmB9rE,kBAAgBw7U,wBAAyBtpT,EAAc,CAACqpT,WAAYA,EAAW13O,WAC9I43O,mBAAoB,SAACF,GAAD,OAAwBzvQ,IAAmB9rE,kBAAgB07U,mCAAoCxpT,EAAc,CAACypT,eAAgBJ,EAAW13O,WAC7J+3O,YAAav2W,KAAKg0W,gBAClB5B,cAAepyW,KAAKoyW,mBAGxB,sBAEE91C,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,SAME,eAAC,IAAD,CACEmD,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACE+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,YACL07B,MAAO,CACLyvE,WAAY,CACV74E,MAAO/U,EAAE,iCACT40F,UAAU,EACVpjE,aAAck0T,GACd+E,UAAU,EACVxrP,YAAaj/F,EAAE,6CAEjB6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWi/O,UAMjB,cAAC,IAAD,CACE7+M,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,gCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,6BACT6yT,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,gBAGnB9uG,KAAK,aACL8qE,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAOy0U,GACP32B,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAK69G,iBAGnBrvG,KAAK,cACL8qE,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,0BACT6yT,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,aAGnBzvG,KAAK,UACL8qE,UAAWslC,WAMjB,cAAC,IAAD,CACElF,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,8BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASmpU,GAAWA,EAAQ52V,OAC5BuiB,MAAO/U,EAAE,kCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,yCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,GACJN,QAAS,EALX,UAOE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS+oU,GAAyBA,EAAsBx2V,OACxDuiB,MAAO/U,EAAE,2CACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,GAEbgT,YAAY,OAKlB,cAAC,IAAD,CACEjzC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,iBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8oU,GAA2BA,EAAwBv2V,OAC5DuiB,MAAO/U,EAAE,4CACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,GAEbgT,YAAY,UAOpB,eAAC,IAAD,CACErzC,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EACTR,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SAPP,UASE,cAAC,IAAD,CACEZ,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL07B,MAAO,CACLpJ,MAAO/U,EAAE,iCACT4tF,WAAY,CACVz5G,KAAM,UAER05G,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACw3P,IACXl4R,UAAWwgC,QAIf,cAAC,IAAD,CACElgC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL07B,MAAO,CACLpJ,MAAO/U,EAAE,iCACT4tF,WAAY,CACVz5G,KAAM,UAER05G,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACw3P,IACXl4R,UAAWwgC,WAMjB,cAAC,IAAD,CACEJ,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,cACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACq3P,EAAqB50P,KAChCnjC,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,cACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACq3P,EAAqB50P,KAChCnjC,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4CAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,qBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS6nL,EAAgBtwN,eAAegb,OACxCuiB,MAAO/U,EAAE,mCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,OACzC8/G,SAAU,SAAC2rB,EAAezrI,GAAhB,OAAgCA,GAASivC,EAASi/B,YAASonS,EAA6B,sBAAkBl1W,MAEtH89G,iBAAkB,CAChBC,WAAW,QAMnB,cAAC,IAAD,CACEjgC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASgpU,GAAiBA,EAAcz2V,OACxCuiB,MAAO/U,EAAE,kCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,WAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GAAyB70P,KACpCnjC,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GAAyB70P,KACpCnjC,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CAEVgH,UAAU,EACVqK,YAAaj/F,EAAE,0CACfigB,QAASqpU,EAAc92V,OACvBkkG,WAAYziH,KAAKgnC,MAAM2qU,mBACvB9P,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,SACtD8mH,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAC3B,UAAXA,GACFipP,EAAYv+V,IAGC,UAAXs1G,GAAkC,UAAXA,GAAsB4b,IAC/C,EAAKvkB,SAAS,CAAE+uP,mBAAoB17V,MAI1C2jG,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,uCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,uBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CAEVgH,UAAU,EACVqK,YAAaj/F,EAAE,gDACfigB,QAASwpU,GAAYj3V,OACrBsjV,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOj0D,WAAa,MACvDisQ,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAOj0D,eAExDqtD,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,gCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,8BACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,wCACfigB,QAASqpU,EAAc92V,OACvBujV,uBAAuB,EACvBr/O,WAAYziH,KAAKgnC,MAAM6qU,gBACvBhQ,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1DogG,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,SACtD8mH,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAC3B,UAAXA,GACFipP,EAAYv+V,EAAK4lI,IAGJ,UAAXtwB,GAAkC,UAAXA,GAAsB4b,IAC/C,EAAKvkB,SAAS,CAAEivP,gBAAiB57V,MAIvC2jG,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,oCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASipU,GAAiBA,EAAc12V,OACxCuiB,MAAO/U,EAAE,wCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO0J,MAAQ,MAClDsuM,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO0J,QAE3CtQ,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,8BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,YACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,8CACfigB,QAAS,CAAC,iBAAkB,YAAa,mBACzC61T,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,IAAW9kH,GACjDomW,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASz0F,EAAE,qBAAD,OAAsBy0F,EAAtB,WAAwC,MAC5Eg4M,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaz0F,EAAE,qBAAD,OAAsBy0F,EAAtB,eAElD5G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,eACRF,MAAM,EACNgB,GAAI,GAJN,UAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,mBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,6BACTk6E,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,gBAMxB,cAAC,IAAD,CACE19O,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,mBAS1B,cAAC,IAAD,CACE59M,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,oCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,GAJN,UAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,WACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,kCACTk6E,MAAO,UACP4mB,YAAY,OAIlB,cAAC,IAAD,CACEjzC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,UACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,UACP4mB,YAAY,OAIlB,cAAC,IAAD,CACEjzC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,iBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,8BACTk6E,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,gBAMxB,cAAC,IAAD,CACE19O,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,wBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,yCACTk6E,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,mBAS1B,cAAC,IAAD,CACE59M,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,wCAEL,eAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EACTR,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SAPP,UASE,cAAC,IAAD,CACEZ,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6BACT4tF,WAAY,CACVz5G,KAAM,UAER05G,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACu3P,IACXj4R,UAAWwgC,QAIf,cAAC,IAAD,CACElgC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6BACT4tF,WAAY,CACVz5G,KAAM,UAER05G,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACu3P,IACXj4R,UAAWwgC,WAMjB,cAAC,IAAD,CACEJ,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,uCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,sBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASwpU,GAAYj3V,OACrBuiB,MAAO/U,EAAE,sCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOj0D,WAAa,MACvDisQ,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAOj0D,aAE3CqtD,iBAAkB,CAChBC,WAAW,UAOrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,cACL07B,MAAO,CACLyvE,WAAY,CACVkoP,kBAAmB,SAACrhP,EAAiB9kH,GACnC,OAAO8kH,EAAOv/E,KAAOvlC,EAAMulC,IAE7B+K,QAASgsG,GAAYA,EAASz5H,OAC9BuiB,MAAO/U,EAAE,gCACTs1G,eAAgB,SAAC7gB,GACf,IAAQ2F,EAAsC3F,EAAtC2F,UAAWC,EAA2B5F,EAA3B4F,SAAUF,EAAiB1F,EAAjB0F,aAC7B,OAAIC,GAAaC,EACRD,EAAY,IAAMC,EAEvBD,GAGGD,GAET47O,uBAAuB,EACvBtpC,aAAc,SAACh4M,EAAiBx5E,GAC9B,IAAQm/E,EAAmH3F,EAAnH2F,UAAWC,EAAwG5F,EAAxG4F,SAAUh6D,EAA8Fo0D,EAA9Fp0D,MAAO85D,EAAuF1F,EAAvF0F,aAAcwwP,EAAyEl2P,EAAzEk2P,YAAaC,EAA4Dn2P,EAA5Dm2P,SAAUC,EAAkDp2P,EAAlDo2P,SAAUC,EAAwCr2P,EAAxCq2P,SAAUC,EAA8Bt2P,EAA9Bs2P,aAAcC,EAAgBv2P,EAAhBu2P,YACrGC,EAAW,CAAC7wP,EAAWC,GAAU76G,QAAO,SAAAiD,GAAI,OAAIA,KAAMiT,KAAK,KAAK+8G,OACtE,OACE,eAAC,IAAD,CAAMhlD,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASF,QAAS,EAAlE,UACE,cAAC,IAAD,CAAMV,MAAM,EAAZ,SACG,EAAKk4R,aAAatxP,KAErB,eAAC,IAAD,CAAM1lC,cAAc,EAAMlB,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAjE,UACE,cAAC,IAAD,CAAYggC,QAAQ,YAAYzT,MAAM,cAAcqV,MAAO,CAAEwvK,SAAU,cAAvE,SAAuFksF,GAAY9wP,IACnG,cAAC,IAAD,CAAYxM,QAAQ,QAAQ4B,MAAO,CAAEwvK,SAAU,cAA/C,SAA+D1+N,IAC/D,cAAC,IAAD,CAAYstD,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,SAAiE4rF,IACjE,cAAC,IAAD,CAAYh9P,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,SAAiE6rF,GAAYC,IAC7E,eAAC,IAAD,CAAYl9P,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,UAAiE+rF,EAAjE,IAA4EC,EAA5E,IAA2FC,YAKnGp2P,UAAU,EACVpjE,aAAck0T,GACdhvP,WAAYziH,KAAKgnC,MAAM4qU,aACvBpvP,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAC3B,UAAXA,GACFopP,EAAe1+V,IAGF,UAAXs1G,GAAkC,UAAXA,GAAsB4b,IAC/C,EAAKvkB,SAAS,CAAEgvP,aAAc37V,KAGlCghW,cAAe,SAACC,EAAgBlwU,GAC9B,OAAIouU,GAAwC,OAAnB8B,QAA8Cp7W,IAAnBo7W,EAC3C,GAEFA,GAET9vQ,QAASguQ,GAEXx7P,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWi/O,UAKjB,cAAC,IAAD,CACE7+M,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,2CAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS6nS,GAAeA,EAAYt1T,OACpCuiB,MAAO/U,EAAE,gCACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,QAMnB,cAAC,IAAD,CACEjgC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BACT4tF,WAAY,CACVz5G,KAAM,QAER05G,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,eAjjCdw7P,Y,GAvmBe7wU,aA4zDjBwwC,sBACbgG,aAzJa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCgC,SAAU,SAEZ7F,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCgC,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,sBAGT4lP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCgyF,gBAAiB,CACf96P,UAAW,GAEb01P,OAAQ,CACNj3O,WAAY7/C,EAAM+pC,QAAQE,QAAQ7iF,MAEpCyvU,WAAY,CACV9rQ,MAAO/qB,EAAM+pC,QAAQE,QAAQqO,cAE/BijP,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,cAmHpB,CAAC6H,WAAW,IAC/B7vE,YAAgB,gBAChB0/D,mBAjFsB,SAAC73E,EAAOyF,GAE9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOuzP,EAE/C4D,GADcx5P,wBAAcqC,EAAdrC,CAAoBp0E,IAAUp0B,iBACPgO,MAAM,CAAC,kBAAmB,KAAM,OAAQ,GAEnF,OAAO,aACL68F,OACAm3P,2BACG9hU,YAAyB,CAC1BgiU,wBAAyBv9N,eACzBw9N,sBAAuBv9N,eACvBq9N,eAAgBrpF,cAChBwpF,cAAeqC,YAAwBzC,GACvCp3P,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR60G,gBAAiByjJ,cACjBn8P,WAAYC,wBAAcqC,GAC1Bw3P,cAAez4N,eACf04N,cAAen6N,cACf5vF,QAASH,cACT6oR,YAAa+qB,cACbuW,QAAS/9N,eACTp3C,OAAQh/C,eACRg3F,SAAUP,eACV29N,kBAAmBl9N,cACnB2D,WAAYp1F,eACZ4uT,cAAep8N,gBAnBdnmG,CAoBA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEfk1P,qBAAsB,WACpBxpU,EAAS,IAAI+pB,OAEf0/S,uBAAwB,WACtBzpU,EAAS,IAAIiqB,OAEf6/S,iBAAkB,SAACxzU,GACjB0J,EAAS,IAAI65S,IAAuBvjT,KAEtCozU,mBAAoB,WAClB1pU,EAAS,IAAIq5S,MAEfswB,iBAAkB,WAChB3pU,EAAS,IAAImzB,KAAqB,CAChCy5S,SAAU,SACVC,WAAYt7N,IAAeO,iBAG/B+3N,YAAa,SAACh3O,EAAoB92E,GAChC/b,EAAS,IAAIiwB,KAAuB,CAAC4iE,aAAY92E,SAAQi+C,OAAO,MAElE+vQ,mBAAoB,SAAChuT,GACnB/b,EAAS,IAAI6uB,KAAyB,CAAC9S,aAEzC6tT,cAAe,WACb5pU,EAAS,IAAI+oS,MAEfxR,WAAY,WACVv3R,EAAS,IAAImpB,OAEf6gT,eAAgB,SAACn3O,GACf7yF,EAAS,IAAIu2B,KAAqB,CAAEs8D,iBAEtC02O,iBAAkB,SAAC3+N,GACjB5qG,EAAS,IAAIqoB,KAAiB,CAAEuiF,iBAElC5qG,eAQF2sP,YAAmC,CAAEt2B,SAAUgwG,IAC/C7hP,IACAo4M,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IATJxiS,CAWby8R,K,6BClhEF,sCACI/zT,EAAS,mBACb,SAAS1vC,EAAUC,EAAWmjC,GAC1B,IAAInjC,EAIA,MAAM,IAAItG,MAAM+1C,K,2SCFX+5T,EAAkB,EAClBC,EAAqB,EAK3B,SAASC,EAAmBC,GACjC,MAA+CA,EAAKC,cAApCC,EAAhB,EAAQC,OAA0BC,EAAlC,EAAyBC,QACzB,EAA2DC,EAAWN,GAA9D78T,EAAR,EAAQA,KAAMg8B,EAAd,EAAcA,GAAIohS,EAAlB,EAAkBA,eAAgB3yQ,EAAlC,EAAkCA,OAAQkvH,EAA1C,EAA0CA,KAAM75M,EAAhD,EAAgDA,OAEhD,OAAO,YAAkB,CACvBkgC,OACAg8B,KACAohS,iBACAL,UACAtyQ,SACAkvH,OACAsjJ,WACAn9V,WAOG,SAASu9V,EAAkBR,GAChC,MAA4BA,EAAKC,cAAzBI,EAAR,EAAQA,QAASF,EAAjB,EAAiBA,OACXM,EAAUC,EAAcV,GAC9B,OAAO,YAA0BK,EAASF,EAAQM,GAM7C,SAASE,EAAuB/zP,GACrC,MAAqB,kBAAVA,EACFg0P,EAAyBh0P,GAG9BhjH,MAAMC,QAAQ+iH,GAETA,EAAM,GAAKA,EAAM,GAAK,IAG3BA,aAAiB12F,KACZ0qV,EAAyBh0P,EAAMz2F,WAGjC,cAMT,SAASyqV,EAAyB9d,GAEhC,OADaA,EAAY,WACXA,EAAY,IAAOA,EAY5B,SAASwd,EAAWN,GACzB,OAkBF,SAAyBA,GACvB,MAAkD,oBAAnCA,EAAmBa,YAnB9BC,CAAgBd,GACXA,EAAKa,cAKa,oBAAhBb,EAAKnyV,OAEPmyV,EAAKnyV,SAGP,GAiBF,SAAS6yV,EAAcV,GAG5B,IAAQe,EAAef,EAAKC,cAApBc,WAER,OAAOv7W,QAAQu7W,EAAajB,K,6BCtG9B,giBACA,IAAM54L,EAAiB3gL,OAAOD,UAAU8C,SASjC,SAAS0xL,EAAQkmL,GACtB,OAAQ95L,EAAe/9K,KAAK63W,IAC1B,IAAK,iBACL,IAAK,qBACL,IAAK,wBACH,OAAO,EACT,QACE,OAAOC,EAAaD,EAAKjxW,QAU/B,SAASmxW,EAAUF,EAAcz/R,GAC/B,OAAO2lG,EAAe/9K,KAAK63W,KAApB,kBAAwCz/R,EAAxC,KAUF,SAAS4/R,EAAaH,GAC3B,OAAOE,EAAUF,EAAK,cAUjB,SAASI,EAAWJ,GACzB,OAAOE,EAAUF,EAAK,YAUjB,SAASK,EAAeL,GAC7B,OAAOE,EAAUF,EAAK,gBAUjB,SAASjmL,EAASimL,GACvB,OAAOE,EAAUF,EAAK,UAUjB,SAASM,EAAsBN,GACpC,MACiB,kBAARA,GACC,OAARA,GACA,+BAAgCA,GAChC,+BAAgCA,EAW7B,SAASO,EAAYP,GAC1B,OAAe,OAARA,GAAgBM,EAAsBN,IAAwB,kBAARA,GAAmC,oBAARA,EAUnF,SAAShmS,EAAcgmS,GAC5B,OAAOE,EAAUF,EAAK,UAUjB,SAAStvJ,EAAQsvJ,GACtB,MAAwB,qBAAVQ,OAAyBP,EAAaD,EAAKQ,OAUpD,SAASx9T,EAAUg9T,GACxB,MAA0B,qBAAZp4D,SAA2Bq4D,EAAaD,EAAKp4D,SAUtD,SAAStwI,EAAS0oM,GACvB,OAAOE,EAAUF,EAAK,UAOjB,SAASS,EAAWT,GAEzB,OAAOx7W,QAAQw7W,GAAOA,EAAItiS,MAA4B,oBAAbsiS,EAAItiS,MAUxC,SAASgjS,EAAiBV,GAC/B,OAAOhmS,EAAcgmS,IAAQ,gBAAiBA,GAAO,mBAAoBA,GAAO,oBAAqBA,EAUhG,SAASz8T,EAAMy8T,GACpB,MAAsB,kBAARA,GAAoBA,IAAQA,EAWrC,SAASC,EAAaD,EAAUxqH,GACrC,IACE,OAAOwqH,aAAexqH,EACtB,MAAO+M,GACP,OAAO,GAgBJ,SAASo+G,EAAeX,GAE7B,QAAyB,kBAARA,GAA4B,OAARA,IAAkBA,EAAqBY,UAAYZ,EAAqBa,U,6BCpN/G,0XAAIC,EAAe,SAAsBnrW,GACvC,MAAO,gBAAkBA,GAGvBs5P,EAEJ6xG,EAAa,kBACTC,EAEJD,EAAa,eACTrxG,EAEJqxG,EAAa,MACTE,EAEJF,EAAa,SACTzkC,EAEJykC,EAAa,aACTn0G,EAEJm0G,EAAa,eACTrwG,EAEJqwG,EAAa,qBACTG,EAEJH,EAAa,QACT/zG,EAEJ+zG,EAAa,eACTj0G,EAEJi0G,EAAa,aACTjzG,EAEJizG,EAAa,a,2LC9BP,EAAS,iBAEF,EAA0C,CACrD,QACA,OACA,OACA,QACA,MACA,SACA,SAOW,EAGT,GAeG,SAAS,EAAkB,GAC9B,KAAI,YAAa,KACjB,OAAO,IAGP,IAAI,EAAU,IAAW,QACrB,EAA8C,GAE9C,EAAgB,OAAO,KAAK,GAGlC,EAAc,SAAQ,YACpB,IAAM,EAAwB,EAAuB,GACrD,EAAa,GAAS,EAAQ,GAC9B,EAAQ,GAAS,KAGnB,IACE,OAAO,IADT,QAIE,EAAc,SAAQ,YACpB,EAAQ,GAAS,EAAa,OAqCE,MAhCtC,WACE,IAAI,GAAU,EACR,EAA0B,CAC9B,OAAQ,WACN,GAAU,GAEZ,QAAS,WACP,GAAU,GAEZ,UAAW,kBAAM,IAoBiB,OAjBhC,IACF,EAAe,SAAQ,YAErB,EAAO,GAAQ,WAAoB,2BAAhB,EAAgB,yBAAhB,EAAgB,gBAC7B,GACF,GAAe,WAAM,OACnB,MAAW,SAAQ,GAAnB,mBAA0B,EAA1B,YAA0B,EAA1B,cAA0B,WAMA,uBACA,qBAIA,EAGA,I,6BCjGtC,IAAIhzJ,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6IACD,YAEJ3K,EAAQywH,QAAUq4I,G,qHCwIHhvL,sBACb91B,YAAgB,gBAChB0/D,kBAAQ,MARiB,SAACl0E,GAC1B,MAAO,CACLA,eAOFswC,aAhCa,SAACC,GAAD,MAA+B,CAC5C6+R,eAAgB,CACd9sP,UAAW,SACX5wC,SAAU,EACVP,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B0/R,KAAM,CACJ1+R,MAAO,IACPgB,SAAU,OACVf,OAAQL,EAAMZ,QAAQ,IAExB4vC,MAAO,CACL5N,UAAWphC,EAAMZ,QAAQ,IAE3B47C,SAAU,CACR5Z,UAAWphC,EAAMZ,WAEnB2/R,UAAW,CACTj5O,OAAQ9lD,EAAM8lD,OAAOk5O,OACrB59P,UAAWphC,EAAMZ,QAAQ,QAUdrF,EAlHG,SAACklS,GACjB,IACEjhS,EAYEihS,EAZFjhS,QACAkhS,EAWED,EAXFC,MACApsP,EAUEmsP,EAVFnsP,IACAqsP,EASEF,EATFE,gBACAC,EAQEH,EARFG,kBACAC,EAOEJ,EAPFI,mBACAC,EAMEL,EANFK,wBACAC,EAKEN,EALFM,YACAC,EAIEP,EAJFO,mBACAC,EAGER,EAHFQ,aACAC,EAEET,EAFFS,kBACAC,EACEV,EADFU,eAEF,OACE,mCACE,eAAC,IAAD,CACErhS,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ6gS,eACnBz+P,MAAO,CAAEj/B,SAAUw+R,GAAkBA,EAAeC,OAAS,EAAI,GANnE,UAQE,cAAC,IAAD,CACElhS,MAAM,EADR,SAIIwgS,EACI,qBACE5zP,IAAK4zP,EACLhhS,UAAWF,EAAQ8gS,KACnB1+P,MAAOu/P,GAAkBA,EAAeb,KAAOa,EAAeb,KAAO,GACrE3wO,IAAKsxO,IAEP3sP,IAGR,eAAC,IAAD,CACEp0C,MAAM,EADR,UAGE,cAAC,IAAD,CACE8/B,QAAQ,KACRtgC,UAAWF,EAAQgxC,MAFrB,SAIG0wP,IAGDN,GACE,cAAC,IAAD,CACElhS,UAAWF,EAAQg9C,SACnB5a,MAAOu/P,GAAkBA,EAAe3kP,SAAW2kP,EAAe3kP,SAAW,GAF/E,SAIGokP,OAKPC,GACE,cAAC,IAAD,CACE3gS,MAAM,EADR,SAGE,cAAC,IAAD,CAASswC,MAAOuwP,GAAcC,GAA2B,GAAzD,SACE,+BACE,cAAC,IAAD,yBACEhhQ,QAAQ,YACRzT,MAAM,UACN7sB,UAAWF,EAAQ+gS,UACnBp1P,QAASw1P,EACTn9P,SAAUu9P,EACVn/P,MAAOu/P,GAAkBA,EAAeZ,UAAYY,EAAeZ,UAAY,IAC3EO,GAPN,aASGD,oB,6BC/GrB,IAAIQ,EAAU3/W,EAAQ,KAMlB4/W,EAAgB,CAClBC,mBAAmB,EACnBt7F,aAAa,EACbu7F,cAAc,EACdz5P,cAAc,EACdl5F,aAAa,EACb4yV,iBAAiB,EACjBC,0BAA0B,EAC1BxqG,0BAA0B,EAC1BsO,QAAQ,EACRJ,WAAW,EACX5+Q,MAAM,GAEJm7W,EAAgB,CAClB7sW,MAAM,EACN3M,QAAQ,EACR1D,WAAW,EACXm9W,QAAQ,EACRC,QAAQ,EACR73W,WAAW,EACX6mL,OAAO,GASLixL,EAAe,CACjB,UAAY,EACZC,SAAS,EACTh6P,cAAc,EACdl5F,aAAa,EACbu2P,WAAW,EACX5+Q,MAAM,GAEJw7W,EAAe,GAInB,SAASC,EAAWriS,GAElB,OAAIyhS,EAAQa,OAAOtiS,GACVkiS,EAIFE,EAAapiS,EAAS,WAAiB0hS,EAVhDU,EAAaX,EAAQthC,YAhBK,CACxB,UAAY,EACZr3M,QAAQ,EACR3gB,cAAc,EACdl5F,aAAa,EACbu2P,WAAW,GAYb48F,EAAaX,EAAQrhC,MAAQ8hC,EAY7B,IAAI3zW,EAAiBzJ,OAAOyJ,eACxB6lO,EAAsBtvO,OAAOsvO,oBAC7BpvN,EAAwBlgB,OAAOkgB,sBAC/BwO,EAA2B1uB,OAAO0uB,yBAClC/D,EAAiB3qB,OAAO2qB,eACxB8yV,EAAkBz9W,OAAOD,UAsC7BjD,EAAOC,QArCP,SAASgyQ,EAAqB2uG,EAAiBC,EAAiBC,GAC9D,GAA+B,kBAApBD,EAA8B,CAEvC,GAAIF,EAAiB,CACnB,IAAII,EAAqBlzV,EAAegzV,GAEpCE,GAAsBA,IAAuBJ,GAC/C1uG,EAAqB2uG,EAAiBG,EAAoBD,GAI9D,IAAIl6W,EAAO4rO,EAAoBquI,GAE3Bz9V,IACFxc,EAAOA,EAAKwJ,OAAOgT,EAAsBy9V,KAM3C,IAHA,IAAIG,EAAgBP,EAAWG,GAC3BK,EAAgBR,EAAWI,GAEtB/4W,EAAI,EAAGA,EAAIlB,EAAKD,SAAUmB,EAAG,CACpC,IAAIsB,EAAMxC,EAAKkB,GAEf,IAAKq4W,EAAc/2W,MAAU03W,IAAaA,EAAU13W,OAAW63W,IAAiBA,EAAc73W,OAAW43W,IAAiBA,EAAc53W,IAAO,CAC7I,IAAIq0G,EAAa7rF,EAAyBivV,EAAiBz3W,GAE3D,IAEEuD,EAAei0W,EAAiBx3W,EAAKq0G,GACrC,MAAOvwG,OAKf,OAAO0zW,I,6BCnGT,0EAIe,SAASn8Q,EAAmB9xF,GACzC,OAAO,YAAkBA,IAAQ,YAAgBA,IAAQ,YAA2BA,IAAQ,gB,0SCoH/EuuW,IA/DgC,SAAClyU,GAC9C,IACEu6E,EAoBEv6E,EApBFu6E,MADF,EAqBIv6E,EAnBFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAUEoJ,EAVFpJ,MAXF,EAqBIoJ,EATF9uC,eAZF,WAqBI8uC,EARFyvE,kBAbF,MAae,GAbf,IAqBIzvE,EAPF0vE,wBAdF,MAcqB,GAdrB,IAqBI1vE,EANFq2N,6BAfF,MAe0B,GAf1B,IAqBIr2N,EALFmyU,2BAhBF,MAgBwB,GAhBxB,IAqBInyU,EAJFs2N,oBAjBF,WAqBIt2N,EAHF2iF,kBAlBF,SAmBEyvP,EAEEpyU,EAFFoyU,eACGh4V,EApBL,YAqBI4lB,EArBJ,GAuBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAaZ,OAXoC,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAkC,OAA1BglQ,EAAgBhlQ,OAA4C,KAA1BglQ,EAAgBhlQ,MAAeglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBAC1HmjN,EAAgBnjN,cAEO,MAA5BmjN,EAAgBllJ,WAClBklJ,EAAgBllJ,SArEC,SAAC9/G,EAAO4gX,GAAR,OAAiC,SAAC9gQ,GAAD,OAAc,SAAC4V,EAAK4K,GACxExgB,EAASwgB,EAAUtgI,EAAQ,KAAM01H,EAAK4K,GAClCsgP,GACFA,EAAe5gX,KAkEYolQ,CAAaN,EAAc87G,EAA3Bx7G,CAA2CJ,EAAgBllJ,WAE1D,MAA1BklJ,EAAgBh7H,SAClBg7H,EAAgBh7H,OAjED,SAAChqI,GAAD,OAAW,SAACgqI,GAAD,OAAY,SAACtU,GACzC,IAAM4K,EAAU5K,EAAIpkG,OAAOgvG,QAC3B0J,EAAO1J,EAAUtgI,EAAQ,KAAM01H,KA+DJ0xJ,CAAWtiB,EAAXsiB,CAAyBpiB,EAAgBh7H,SAIlE,eAAC,IAAD,yBAAav3H,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,aACE94E,MAAQ1lC,GAA4B,kBAAV0lC,EAAnB,UAA4CA,EAA5C,MAAwDA,EAC/DymF,QACE,cAAC,IAAD,qCACEyU,QAAS12H,aAAGk7P,EAAcE,EAAgBhlQ,QACtCglQ,GACAp8O,GAHN,IAIE5oB,MAAK,UAAK8kQ,OAGVD,IAEL1zI,GAAc,cAAC,IAAD,yBAAgB5rF,GAAG,eAAkBo7U,GAArC,aAA2Dh8G,IAAYlyP,GAASmyP,Y,mKCxG/Fi8G,EAAc,SAAC7gX,GACnB,OAAa,MAATA,EAAwB,GACrBmT,OAAOnT,GAAO8iI,QA8pBjBg+O,EAAsB,SAACxlP,GAAuC,IAA9BylP,IAA6B,yDACjE,GAAIA,EAAmB,CAAC,IAAD,cACfvjP,GAAuB,OAAPlC,QAAO,IAAPA,GAAA,UAAAA,EAASK,eAAT,eAAkBqlP,4BAAlB,OAA8C1lP,QAA9C,IAA8CA,GAA9C,UAA8CA,EAASK,eAAvD,aAA8C,EAAkBslP,uBAAwB,GACxG1pJ,GAAiB,OAAPj8F,QAAO,IAAPA,GAAA,UAAAA,EAASK,eAAT,eAAkBulP,kBAAlB,OAAoC5lP,QAApC,IAAoCA,GAApC,UAAoCA,EAASK,eAA7C,iBAAoC,EAAkByjM,oBAAtD,aAAoC,EAAgC75R,KAAM,GACpFm2F,GAAkB,OAAPJ,QAAO,IAAPA,GAAA,UAAAA,EAASK,eAAT,eAAkBwlP,uBAAlB,OAAyC7lP,QAAzC,IAAyCA,GAAzC,UAAyCA,EAASK,eAAlD,aAAyC,EAAkB2I,kBAAmB,GAC/F,MAAM,GAAN,OAAUnxH,OAAOqqH,GAAjB,YAAmCrqH,OAAOokN,GAA1C,YAAsDpkN,OAAOuoH,IAG7D,MAAM,GAAN,OAAUvoH,QAAc,OAAPmoH,QAAO,IAAPA,OAAA,EAAAA,EAASkC,gBAAiB,IAA3C,YAAkDrqH,QAAc,OAAPmoH,QAAO,IAAPA,OAAA,EAAAA,EAASi8F,UAAW,IAA7E,YAAoFpkN,QAAc,OAAPmoH,QAAO,IAAPA,OAAA,EAAAA,EAASI,WAAY,MAkY9G0lP,EAAiB,uCAAG,WAAOx1Q,EAAKvgD,EAAOg2T,EAAeC,EAAkBC,EAAwBC,GAA5E,qBAAAv3W,EAAA,yDAClBw3W,EAAiB,GACvBD,EAAoBxwW,SAAQ,SAAC0wW,GAAS,IAAD,MACnC,GAAKH,EAAuBG,EAAIn8U,KAAQ+7U,EAAiBzzW,SAAS6zW,EAAIn8U,IAAtE,CACA,IAAMo8U,GAAO,UAAAN,EAAcK,EAAIn8U,WAAlB,eAAuBrgB,MAAM,CAAC,cAAe,qBAA7C,UACRm8V,EAAcK,EAAIn8U,WADV,aACR,EAAuBl9B,IAAI,oBADnB,UAERg5W,EAAcK,EAAIn8U,WAFV,aAER,EAAuBl9B,IAAI,OAC5Bs5W,GAAQF,EAAe/wW,KAAKixW,OAEJ,IAA1BF,EAAet7W,OATK,yCASkBk7W,GATlB,cAWlBO,EAAe,CAAE/zP,QAAS,CAAE9nF,IAAK,CAAC,CAAER,GAAI,CAAE+mG,GAAIm1O,OAX5B,SAYII,IAAcvjD,mBAAmB1yN,EAAKvgD,EAAOu2T,GAZjD,kBAYlBE,EAZkB,kBAanBA,OAbmB,EAanBA,EAAe37W,OAbI,0CAaak7W,GAbb,eAelBU,EAfkB,eAeAV,GACxBG,EAAoBxwW,SAAQ,SAAC0wW,GAAS,IAAD,MACnC,GAAKH,EAAuBG,EAAIn8U,KAAQ+7U,EAAiBzzW,SAAS6zW,EAAIn8U,IAAtE,CACA,IAAMo8U,GAAO,UAAAN,EAAcK,EAAIn8U,WAAlB,eAAuBrgB,MAAM,CAAC,cAAe,qBAA7C,UACRm8V,EAAcK,EAAIn8U,WADV,aACR,EAAuBl9B,IAAI,oBADnB,UAERg5W,EAAcK,EAAIn8U,WAFV,aAER,EAAuBl9B,IAAI,OAC1B25W,EAAQF,EAAc77V,MAAK,SAAAg8V,GAAE,aAAI,UAAAA,EAAGC,mBAAH,eAAgBlnD,iBAAkB2mD,GAAQM,EAAG18U,KAAOo8U,KACvFK,IACFD,EAAWL,EAAIn8U,IAAM7X,iBAAOs0V,QAvBR,kBA0BjBD,GA1BiB,4CAAH,gEAiCjBI,EAAgB,CACpBC,sBAvkC4B,SAACC,GAC7B,IAAMC,EAAoB,GAC1B,GAAID,EAAsB,CAGxB,IAAME,EAAoC,GAE1ClgW,IAAErR,QAAQqxW,GAAsB,SAACnqW,GAC/B,IAAIupM,EACJ,IAAMA,EAAOxuM,KAAK6tC,MAAL,OAAW5oC,QAAX,IAAWA,OAAX,EAAWA,EAAQupM,MAAS,MAAO/0M,GAAK,OAChD3G,MAAMC,QAAQy7M,IACnBp/L,IAAErR,QAAQywM,GAAM,SAACvjI,GAAU,IAAD,IAClBt1E,EAAG,UAAMs1E,EAAKskS,UAAX,YAAwBtkS,EAAKukS,eAA7B,YAA+CvkS,EAAKwkS,SACvDC,EAAc,CAClBC,aAAiB,OAAJ1kS,QAAI,IAAJA,OAAA,EAAAA,EAAM0kS,cAAe,CAChCr9U,GAAE,OAAErtB,QAAF,IAAEA,GAAF,UAAEA,EAAQ2qW,6BAAV,aAAE,EAA+Bt9U,GACnCwkE,OAAM,OAAE7xF,QAAF,IAAEA,GAAF,UAAEA,EAAQ2qW,6BAAV,aAAE,EAA+B94Q,QAEzCy4Q,UAAS,OAAEtkS,QAAF,IAAEA,OAAF,EAAEA,EAAMskS,UACjBC,eAAc,OAAEvkS,QAAF,IAAEA,OAAF,EAAEA,EAAMukS,eACtBC,QAAO,OAAExkS,QAAF,IAAEA,OAAF,EAAEA,EAAMwkS,QACfI,WAAU,OAAE5kS,QAAF,IAAEA,OAAF,EAAEA,EAAM4kS,WAClBvxI,SAAQ,OAAErzJ,QAAF,IAAEA,OAAF,EAAEA,EAAMqzJ,SAChBwxI,sBAA0B,OAAJ7kS,QAAI,IAAJA,OAAA,EAAAA,EAAM6kS,uBAAwB,KACpDC,wBAA4B,OAAJ9kS,QAAI,IAAJA,OAAA,EAAAA,EAAM8kS,yBAA0B,MAE1DT,EAAa35W,GAAO+5W,QAIxBjgX,OAAO+M,OAAO8yW,GAAcvxW,SAAQ,SAAAzJ,GAClC+6W,EAAkB5xW,KAAKnJ,MAG3B,OAAO+6W,GAsiCPW,0BAniCgC,SAACT,EAAWC,EAAgBS,EAAcC,EAAgBC,GAC1F,IAAMC,EAAsBH,EAAa76W,IAAI,MACzCi7W,EAAc,KASlB,OARkB,OAAdH,QAAc,IAAdA,OAAA,EAAAA,EAAgBh9W,QAAS,IAC3Bm9W,EAAcH,EAAel9V,MAAK,SAACspF,GACjC,OAAU,OAAHA,QAAG,IAAHA,OAAA,EAAAA,EAAKizQ,aAAcA,IAClB,OAAHjzQ,QAAG,IAAHA,OAAA,EAAAA,EAAKkzQ,kBAAmBA,IACrB,OAAHlzQ,QAAG,IAAHA,OAAA,EAAAA,EAAKmzQ,WAAYW,IACd,OAAH9zQ,QAAG,IAAHA,OAAA,EAAAA,EAAKgiI,YAAa6xI,MACnB,MAEDE,GAyhCPC,sBA5/B4B,SAACC,EAAWC,GAAsC,IAAD,EACvEC,EAAwC,CAC5CC,cAAe,KACfC,2BAA4B,IAG9B,KAD8B,OAATJ,QAAS,IAATA,GAAA,UAAAA,EAAWt+V,MAAM,CAAC,SAAU,oBAA5B,eAA0C7kB,OAAQ,KACnB,OAAhCojX,QAAgC,IAAhCA,OAAA,EAAAA,EAAkCt9W,QAAS,EAAG,CAAC,IAAD,EAC1D09W,EAA6BJ,EAAiC,GACpE,GAAII,IAA0B,OAAIA,QAAJ,IAAIA,GAAJ,UAAIA,EAA4BjB,mBAAhC,aAAI,EAAyCr9U,IAAI,CAAC,IAAD,EAC7Em+U,EAAsCC,cAAtC,OAAsDE,QAAtD,IAAsDA,GAAtD,UAAsDA,EAA4BjB,mBAAlF,aAAsD,EAAyCr9U,GAC/F,IAAMu+U,EAAgBN,EAAUt+V,MAAM,CAAC,SAAU,aACjDw+V,EAAsCE,2BArCT,SAACpoJ,EAAUuoJ,GAC5C,IAAMH,EAA6B,GAsBnC,OArBApoJ,EAASluN,KAAI,SAAC06P,GACZ,IAAMg8G,EAAah8G,EAAQnlP,OAC3B,IAAc,OAAVmhW,QAAU,IAAVA,OAAA,EAAAA,EAAYxB,aAAZ,OAAyBwB,QAAzB,IAAyBA,OAAzB,EAAyBA,EAAY7nP,UAAU,CACjD,IAAMqmP,EAAYwB,EAAWxB,UACvByB,EAAa,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAY7nP,SAClC95G,IAAErR,QAAQizW,GAAe,SAACC,GACxB,IAAMC,EAAgBJ,EAA6Bl0W,QAAO,SAACquE,GACzD,OAAOA,EAAKskS,YAAcA,GAAatkS,EAAKukS,iBAAmByB,EAAazB,kBAE1E0B,EAAch+W,OAAS,GACzBkc,IAAErR,QAAF,OAAUkzW,QAAV,IAAUA,OAAV,EAAUA,EAAcE,eAAe,SAACC,GACtChiW,IAAErR,QAAQmzW,GAAe,SAACG,GAAkB,IAAD,EACrCA,EAAa5B,UAAY2B,EAAyB9+U,KAAM,UAAA++U,EAAaxB,kBAAb,eAAyBv9W,cAAe8+W,EAAyBvB,YAC3Hc,EAA2BlzW,KAAK4zW,gBAQvCV,EAcgEW,CAA2BT,EAAeL,IAGjH,OAAOC,GA++BPc,gBA5+BsB,SAAC,GAelB,IAAD,EAdsB72T,EActB,EAdsBA,KACA82T,EAatB,EAbsBA,4BACAxpO,EAYtB,EAZsBA,gBACAypO,EAWtB,EAXsBA,iBACAjL,EAUtB,EAVsBA,QACAkL,EAStB,EATsBA,sBACAC,EAQtB,EARsBA,4CACAC,EAOtB,EAPsBA,aACAC,EAMtB,EANsBA,gBACAC,EAKtB,EALsBA,oBACAC,EAItB,EAJsBA,oBACA72C,EAGtB,EAHsBA,yBACA82C,EAEtB,EAFsBA,YACAC,EACtB,EADsBA,gBAGpBC,GAAuC,OAAflqO,QAAe,IAAfA,OAAA,EAAAA,EAAiB/1H,MAAM,CAAC,SAAU,SAAU,UAEpEkgW,GADQ,OAAGz3T,QAAH,IAAGA,KAAMtlD,IAAI,aACO,OAAf68W,QAAe,IAAfA,OAAA,EAAAA,EAAiB78W,IAAI,gBAAiB6O,iBACnDs6N,EAAQ,OAAG0zI,QAAH,IAAGA,OAAH,EAAGA,EAAiBhgW,MAAM,CAAC,WAAY,aAC/C48E,EAAM,OAAGmjR,QAAH,IAAGA,OAAH,EAAGA,EAAahrJ,kBACtBorJ,EAAe,GAiOrB,OA/Ne,OAAXJ,QAAW,IAAXA,GAAA,UAAAA,EAAazpJ,gBAAb,eAAuBr1N,QAAS,GAClCkc,IAAErR,QAAF,OAAUi0W,QAAV,IAAUA,OAAV,EAAUA,EAAazpJ,UAAU,SAACwsC,GAChC,UAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAS7rI,SAAU,CACrB,IAAMmpP,EAAiB,IAAIniX,IACrBoiX,EAAuB,GAC7BljW,IAAErR,QAAQg3P,EAAQ7rI,UAAU,SAACwrI,GAAiB,IAAD,MACrC69G,EAAmB,OAAG79G,QAAH,IAAGA,OAAH,EAAGA,EAAa89G,gBACzC,IAAID,IAAuBF,EAAe/8W,IAAIi9W,GAA9C,CAGIA,GACFF,EAAeriW,IAAIuiW,GAErB,IAAMlnP,EAAgBnrH,OAAM,OAACw0P,QAAD,IAACA,GAAD,UAACA,EAAa+9G,yBAAd,aAAC,EAAgCpnP,eAE7D,GAD+C,OAAGmmP,QAAH,IAAGA,OAAH,EAAGA,EAA6Bl8W,IAAI+1H,GACpC,CAC7C,IAAMqnP,EAA0BlB,EAA4Bp8W,IAAIi2H,GAC1D+oI,EAAkBs+G,EAAwBt9W,IAAI,mBAE9Cu9W,EAAkB,OAAGv+G,QAAH,IAAGA,OAAH,EAAGA,EAAiBh/P,IAAI,GAGhD,IAAKu9W,EAAoB,CACvB,IAAMF,EAAsDC,EAAwBrwW,eAAc,SAACywQ,GAAD,OAChGA,EACG/5Q,IAAI,UAAU,GACdA,IAAI,OAAQ,MACZA,IAAI,SAAU,MACdA,IAAI,4BAA6B,GACjCA,IAAI,WAAY,MAChBA,IAAI,cAAe+5Q,EAAI19Q,IAAI,gBAC3B2D,IAAI,kBAAmB+5Q,EAAI19Q,IAAI,SAAW09Q,EAAI19Q,IAAI,oBAAsB09Q,EAAI7gQ,MAAM,CAAC,cAAe,UAAY,IAC9G4nG,OAAO,sBAGN+4P,EAAen4V,iBAAO,CAC1B6X,IAAK,EACLk9U,eAAgBqD,IAChB9qD,eAAgB,EAChB+qD,KAAM,GACN3gV,MAAO,GACP4gV,cAAc,EACd1nP,cAAeqnP,EAAwBzgW,MAAM,CAAC,cAAe,kBAC7D+gW,qBAAsBN,EAAwBzgW,MAAM,CAAC,cAAe,kBACpEwgW,oBACAQ,qBAAqB,EACrB9B,cAAe+B,YAAmBf,EAAY5zI,EAAU2zI,EAAez3V,iBAAO,OAGhF,YADA63V,EAAqB70W,KAAKm1W,GAI5B,IAAMO,EAAkB,OAAGR,QAAH,IAAGA,OAAH,EAAGA,EAAoBv9W,IAAI,gBAE7Ci4T,EAAWqlD,EAAwBzgW,MAAM,CAAC,kBAAmB,EAAG,aAAeia,+BAA6BgoO,YAC5Gk/G,EAAoB,OAAGrB,QAAH,IAAGA,OAAH,EAAGA,EAAqB38W,IAAI,QAEtD,GAAwC,aAAlB,OAAlB+9W,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB/9W,IAAI,SAAuB,CAAC,IAAD,EAC3Ci+W,EAAkBF,EAAmB/9W,IAAI,YACzCo9W,EAAkBK,IAClBzU,EAAiB,UAAG+U,EAAmB/9W,IAAI,4BAA1B,QAAkDkU,iBAEzE,KAAI,OAAC+pW,QAAD,IAACA,OAAD,EAACA,EAAiB5sW,SAEpB,OAIa,OAAf4sW,QAAe,IAAfA,KAAiBt1W,SAAQ,SAACsqH,EAASiD,GAAkB,IAAD,MAC5C2jP,GAAqB,OAAP5mP,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,iBAAkB,KAC7Ck+W,EAAcrE,EAAY75W,IAAI,SAAW,KACzCm+W,EAAuBr4C,EACzBo4C,GAAeF,EACbE,EAAc,KAAOF,EACpBA,GACCE,EAEJA,EACE5yC,EAAS,UAAGuuC,EAAYh9V,MAAM,CAAC,cAAeigW,EAAe,qBAApD,QAAqEjD,EAAYh9V,MAAM,CAAC,cAAe,UAAW,cAC3HuhW,EAAwC,mBAAd9yC,EAC1B3jE,GAAgB,UAAA10I,EAAQjzH,IAAI,mBAAZ,eAAyBqR,UAAW,EAEpDgsW,EAAsDC,EAAwBrwW,eAAc,SAACywQ,GAAD,OAChGA,EACG/5Q,IAAI,SAAUs0T,GACdt0T,IAAI,OAAQ45W,EAAmBv9W,IAAI,SAAW,MAC9C2D,IAAI,SAAU45W,EAAmBv9W,IAAI,WAAa,MAClD2D,IAAI,2BAA4B25W,EAAwBt9W,IAAI,mBAAqB,GAAK,GACtF2D,IAAI,WAAY,MAChBA,IAAI,cAAe+5Q,EAAI19Q,IAAI,gBAC3B2D,IAAI,kBAAmB+5Q,EAAI19Q,IAAI,SAAW09Q,EAAI19Q,IAAI,oBAAsB09Q,EAAI7gQ,MAAM,CAAC,cAAe,UAAY,IAC9G4nG,OAAO,sBAGNi5P,EAAI,UAAIxnP,IAAiByxI,EAAgB,EAC3Cy2G,IAAqB9yC,EACnB6yC,EACAD,EACFE,IAAqB9yC,EACnB0yC,EACA,YANI,QAMK,KAETnC,EAAehC,GAAeA,EAAY5sW,eAAc,SAACywQ,GAC7DA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,OAAQ+5W,GACZ/5W,IAAI,gBAAiB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBACnElZ,IAAI,uBAAwB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBAC1ElZ,IAAI,YAAao6W,EAAmB/9W,IAAI,OACxC2D,IAAI,kBAAmBy5W,GACvBz5W,IAAI,eAAgBuyH,GACpBvyH,IAAI,gBAAiBo6W,EAAmB/9W,IAAI,WAC5C2D,IAAI,0BAA2Bo6W,EAAmB/9W,IAAI,qBACtD2D,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBACrB2D,IAAI,iBAAiB,GACrBA,IAAI,2BAA4BqlW,EAAkBhpW,IAAIk2H,IAAiB,GAEvEvyH,IAAI,oBAAqB05W,GACzB15W,IAAI,gBAAiBm6W,YAAmBf,EAAY5zI,EAAU2zI,EAAejD,EAAYl2W,IAAI,2BAA4BqlW,EAAkBhpW,IAAIk2H,IAAiB,KAChKvyH,IAAI,uBAAuB,MAEhCu5W,EAAqB70W,KAAKwzW,WAGvB,GAAIviX,QAAQykX,GAAqB,CAAC,IAAD,EAChCG,GAAgC,OAAlBH,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB/9W,IAAI,UAAW,KACjDm+W,EAAuBr4C,EACzBo4C,GAAeF,EACbE,EAAc,KAAOF,EACpBA,GACCE,EAEJA,EACE5yC,EAAS,UAAGyyC,EAAmBlhW,MAAM,CAAC,cAAeigW,EAAe,qBAA3D,QAA4EiB,EAAmBlhW,MAAM,CAAC,cAAe,UAAW,cACzIuhW,EAAwC,mBAAd9yC,EAE1B+xC,EAAsDC,GAA2BA,EACpF35W,IAAI,SAAUs0T,GACdt0T,IAAI,OAAQ45W,EAAmBv9W,IAAI,SAAW,MAC9C2D,IAAI,SAAU45W,EAAmBv9W,IAAI,WAAa,MAClD2D,IAAI,2BAA4B25W,EAAwBt9W,IAAI,mBAAqB,GAAK,GACtF2D,IAAI,WAAY,MAChBA,IAAI,cAAe25W,EAAwBt9W,IAAI,gBAC/C2D,IAAI,kBAAmB25W,EAAwBzgW,MAAM,CAAC,cAAe,UAAY,IACjF4nG,OAAO,mBAEJo3P,EAAekC,EAAmB9wW,eAAc,SAAAywQ,GACpDA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,OAAQy6W,IAAqB9yC,EAAY6yC,EAAuBD,GACpEv6W,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBACrB2D,IAAI,gBAAgB,GACpBA,IAAI,iBAAiB,GACrBA,IAAI,gBAAiB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBACnElZ,IAAI,uBAAwB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBAC1ElZ,IAAI,oBAAqB05W,GACzB15W,IAAI,gBAAiBm6W,YAAmBf,EAAY5zI,EAAU2zI,EAAeiB,IAC7Ep6W,IAAI,uBAAuB,MAEhCu5W,EAAqB70W,KAAKwzW,SAIvB,IAAKviX,QAAQ8iX,IAAgCA,EAA4B59V,gBAEzE,GAAI,OAAC8gP,QAAD,IAACA,GAAD,UAACA,EAAa+9G,yBAAd,aAAC,EAAgCpnP,eAuBrC,UAAIqpI,QAAJ,IAAIA,GAAJ,UAAIA,EAAa+9G,yBAAjB,aAAI,EAAgCpnP,cAAe,CAAC,IAAD,KAGzC,OAAXqpI,QAAW,IAAXA,GAAA,UAAAA,EAAa++G,uBAAb,eAA8BC,gBAA9B,UAA8Ch/G,EAAY+9G,yBAA1D,aAA8C,EAA+B/9G,eAAgBA,EAAY+9G,kBAAkB/9G,YAAYg/G,eACzIh/G,EAAY+9G,kBAAkB/9G,YAAYg/G,aAAeh/G,EAAY++G,gBAAgBC,cAEvF,IAAMjB,EAAoBh4V,iBAAOi6O,EAAY+9G,mBACvCG,EAAen4V,iBAAO,CAC1B6X,IAAK,EACLk9U,eAAgBqD,IAChB9qD,eAAgB,EAChB+qD,KAAM,GACN3gV,MAAO,GACP4gV,cAAc,EACd1nP,cAAeqpI,EAAY+9G,kBAAkBpnP,cAC7C2nP,qBAAsBt+G,EAAY+9G,kBAAkBpnP,cACpDonP,oBACAQ,qBAAqB,EACrB9B,cAAe+B,YAAmBf,EAAY5zI,EAAU2zI,EAAez3V,iBAAO,OAEhF63V,EAAqB70W,KAAKm1W,QA3C+B,CAAC,IAAD,UAEnDU,GAAyB,OAAX5+G,QAAW,IAAXA,OAAA,EAAAA,EAAao+G,OAAQ,KACnCM,EAAoB,OAAGrB,QAAH,IAAGA,OAAH,EAAGA,EAAqB38W,IAAI,QAChDm+W,EAAuBr4C,EACzBo4C,GAAeF,EACbE,EAAc,KAAOF,EACpBA,GACCE,EAEJA,EACE5yC,EAAS,iBAAGhsE,QAAH,IAAGA,GAAH,UAAGA,EAAai/G,mBAAhB,iBAAG,EAA2BzB,UAA9B,aAAG,EAA2CxxC,iBAA9C,eAA2DhsE,QAA3D,IAA2DA,GAA3D,UAA2DA,EAAai/G,mBAAxE,iBAA2D,EAA0B12P,eAArF,aAA2D,EAAmCyjN,UACvG8yC,EAAwC,mBAAd9yC,EAC1BkzC,EAAiBn5V,iBAAOi6O,GAAaryP,eAAc,SAAAywQ,GACvDA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBAAoB09Q,EAAI19Q,IAAI,UAAY,IAC7D2D,IAAI,OAAQy6W,IAAqB9yC,EAAY6yC,EAAuBD,GACpEv6W,IAAI,gBAAgB,GACpBA,IAAI,uBAAuB,GAC3BA,IAAI,gBAAiBm6W,YAAmBf,EAAY5zI,EAAU2zI,EAAez3V,iBAAOi6O,QAEzF49G,EAAqB70W,KAAKm2W,QAwB9B,IAAMC,EAAahB,IACnBT,EAAa30W,KAAK,CAChBq2W,aAAY,OAAE/+G,QAAF,IAAEA,OAAF,EAAEA,EAAS++G,aACvBvE,UAAWsE,EACX3qP,SAAUopP,EACVyB,gBAAiB9B,EACjB+B,QAAe,OAAPj/G,QAAO,IAAPA,OAAA,EAAAA,EAASi/G,SAAU,SAM5Bv5V,iBAAO,uCACTutH,EAAgBp4H,QAChBqkW,YAAwB,CACzBxC,mBACAC,wBACAlL,UACA0N,6BAA8Bh5C,EAC9By2C,8CACAC,eACAC,kBACAC,wBACCliW,QAXQ,IAYXi/E,SACA0Y,WAAsB,OAAXyqQ,QAAW,IAAXA,OAAA,EAAAA,EAAazqQ,YAAa,KACrC+hH,aAAY,OAAE0oJ,QAAF,IAAEA,OAAF,EAAEA,EAAa1oJ,aAC3Bf,SAAU9tM,iBAAO23V,GACjBprJ,kBAAmBn4H,MAsuBrBslR,oBAluB0B,SAACC,EAAqBC,GAChD,IAAMC,EAAsB,GAuD5B,OAtDAllW,IAAErR,QAAF,OAAUs2W,QAAV,IAAUA,OAAV,EAAUA,EAA0BE,qBAAqB,SAACC,GAAwB,IAAD,QAEnD,EADxBC,EAAqB,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BqlP,yBACpD0G,IACHA,EAAqB,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BslP,sBAEvDyG,EAAwB7G,EAAY6G,GACpC,IAC+B,EAD3BC,EAAwB,OAAGF,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,iBAAG,EAA6ByjM,oBAAhC,aAAG,EAA2CwoD,iBACrED,IACHA,EAAwB,OAAGF,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BksP,cAE1D,IACkB,EAGD,EAIuD,IARpEC,EAAW,OAAGL,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BujM,eAC1C4oD,IACHA,EAAW,OAAGL,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BwjM,YAEzC2oD,IACFA,EAAW,UAAGA,EAAYviX,kBAAf,aAAG,EAAwBm4C,gBAGnCgqU,GAAyBC,GAA6BG,KACzDJ,EAAqB,UAAGA,SAAH,aAAG,EAAuBhqU,cAC/CiqU,EAAwB,UAAGA,SAAH,aAAG,EAA0BjqU,cAErD2pU,EAAoBr2W,SAAQ,SAAC+2W,GAC3B,IACiB,EAOH,EARVzsP,EAAU,KACVwsP,IAKFxsP,GAJW,UAAGysP,EAAa1/W,IAAI,mBAApB,aAAG,EAA8B4d,MAAK,SAAC8zD,GAAsB,IAAD,IAErE,OADS,UAAGA,EAAE1xE,IAAI,cAAT,iBAAG,EAAc9C,kBAAjB,aAAG,EAA0Bm4C,iBACvBoqU,OAEE,MAEhBxsP,IACHA,EAAO,UAAGysP,EAAa1/W,IAAI,mBAApB,aAAG,EAA8B4d,MAAK,SAAC8zD,GAAsB,IAAD,IACjE,OAAO,UAAA8mS,EAAY9mS,EAAE1xE,IAAI,yBAAlB,eAAqCq1C,iBAAkBgqU,IAC5D,UAAA3tS,EAAE1xE,IAAI,gBAAN,eAAgBq1C,iBAAkBiqU,MAGxC,GAAIrsP,KAEA35H,QAAQ25H,EAAQjzH,IAAI,eACpB1G,QAAQ25H,EAAQjzH,IAAI,qBACpB1G,QAAQ25H,EAAQjzH,IAAI,uBACpB1G,aAAwCvB,IAAhCk7H,EAAQjzH,IAAI,kBACI,CACxB,IAAM2/W,EAAkB1sP,EAAQhmH,eAAc,SAACywQ,GAC7CA,EAAIj5J,OAAO,kBACRA,OAAO,oBAEZy6P,EAAoBE,EAAmBliV,IAAMyiV,UAMhDT,GA2qBPU,qBAxqB2B,SAACzG,EAAqB0G,GAEjD,OAD4C,OAAnB1G,QAAmB,IAAnBA,OAAA,EAAAA,EAAqB3xW,QAAO,SAAC43W,GAAD,OAAyBS,EAAgBT,EAAmBliV,SAAQ,IAwqBzH4iV,uBApqB6B,SAACC,EAA0B5G,EAAqB+F,EAAqBc,GAClGhmW,IAAErR,QAAQo3W,GAA0B,SAACE,GAAuB,IAAD,YACnD9qP,GAAiC,OAAjB8qP,QAAiB,IAAjBA,GAAA,UAAAA,EAAmBpG,mBAAnB,mBAAgC1kP,qBAAhC,eAA+C9/E,gBAAiB,KAChF+/E,GAAyB,OAAjB6qP,QAAiB,IAAjBA,GAAA,UAAAA,EAAmBpG,mBAAnB,mBAAgCzkP,aAAhC,eAAuC//E,gBAAiB,KAChE85K,GAAuB,OAAjB8wJ,QAAiB,IAAjBA,GAAA,UAAAA,EAAmBpG,mBAAnB,mBAAgC1qJ,WAAhC,eAAqC95K,gBAAiB,KAG7D8/E,GAGmBgkP,EAAoB3xW,QAAO,SAAC43W,GAAwB,IAAD,gBAElD,IADnBc,GAAqC,OAAlBd,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,mBAA6BqlP,gCAA7B,eAAuDtjU,gBAAiB,KAC1F6qU,IACHA,GAAqC,OAAlBd,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,mBAA6BslP,4BAA7B,eAAmDvjU,gBAAiB,MAEzF,IAGkB,EAGD,EANXiqU,GAA6C,OAAlBF,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,mBAA6ByjM,oBAA7B,mBAA2CwoD,wBAA3C,eAA6DlqU,gBAAiB,KACzG8qU,GAAyC,OAAlBf,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,mBAA6BksP,oBAA7B,eAA2CnqU,gBAAiB,KACrFoqU,EAAW,OAAGL,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BujM,eAC1C4oD,IACHA,EAAW,OAAGL,QAAH,IAAGA,GAAH,UAAGA,EAAoB9rP,eAAvB,aAAG,EAA6BwjM,YAEzC2oD,IACFA,EAAW,UAAGA,EAAYviX,kBAAf,aAAG,EAAwBm4C,eAExC,SAAI85K,GAAOA,IAAQswJ,IAIbS,IAAqB/qP,KAGrBC,IACKkqP,IAA6BlqP,GAAS+qP,IAAyB/qP,OAS5DzsH,SAAQ,SAACy3W,GACvBlB,EAAoBkB,EAAeljV,IAAM7X,iBAAO46V,GAC3CD,EAAex6W,SAAS46W,EAAeljV,KAC1C8iV,EAAe33W,KAAK+3W,EAAeljV,WAynBzCmjV,2BAnnBiC,SAACL,EAAgB7G,GAClD,IAAMmH,EAAuB,GACvBC,EAAyC,GAC3ChH,EAAe,KA4FnB,OA1FAv/V,IAAErR,QAAQwwW,GAAqB,SAACiG,GAC9B,IAAKY,EAAex6W,SAAS45W,EAAmBliV,IAAK,CAAC,IAAD,cAC7CsiV,GAAiC,OAAlBJ,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,mBAA6ByjM,oBAA7B,eAA2CwoD,oBAA3C,OAA+DH,QAA/D,IAA+DA,GAA/D,UAA+DA,EAAoB9rP,eAAnF,aAA+D,EAA6BksP,cAC3GrqP,GAAkC,OAAlBiqP,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,eAA6BqlP,4BAA7B,OAAyDyG,QAAzD,IAAyDA,GAAzD,UAAyDA,EAAoB9rP,eAA7E,aAAyD,EAA6BslP,sBACtG9hD,GAA+B,OAAlBsoD,QAAkB,IAAlBA,GAAA,UAAAA,EAAoB9rP,eAApB,eAA6BujM,kBAA7B,OAA+CuoD,QAA/C,IAA+CA,GAA/C,UAA+CA,EAAoB9rP,eAAnE,aAA+C,EAA6BwjM,YAC/F,GAAK0oD,GAAgBrqP,GAAkB2hM,EAAY,CACjD,IAAIy6C,EAAS,UAAMp8O,EAAN,YAAuBqqP,GAKpC,GAJI1oD,IACFy6C,EAAS,qBAAiBz6C,IAGxBypD,EAAWhP,GACb,OAEFgP,EAAWhP,IAAa,EACpBz6C,EACE0oD,GAAgBrqP,EAClBmrP,EAAqBj4W,KAAK,CACxB,GAAM,CACJ,CACE,GAAM,CACJ,CACE,kBAAmB,CACjB,GAAMyuT,IAGV,CACE,cAAe,CACb,GAAMA,MAKd,CACE,IAAO,CACL,CACE,cAAiB,CACf,GAAM3hM,IAGV,CACE,MAAS,CACP,GAAMqqP,SAQlBc,EAAqBj4W,KAAK,CACxB,IAAO,CACL,CACE,IAAO,CAAC,GAAMyuT,OAMtBwpD,EAAqBj4W,KAAK,CACxB,IAAO,CACL,CACE,cAAiB,CACf,GAAM8sH,IAGV,CACE,MAAS,CACP,GAAMqqP,YAUlBc,EAAqBxiX,OAAS,IAChCy7W,EAAe,CACb,QAAW,CACTh8U,GAAI+iV,GAEN,QAAW,CACT,MAAS,IACT,OAAU,EACV,iBAAoB,cAInB/G,GAqhBPiH,sBAlhB4B,SAACrH,EAAqBsH,EAAmBC,GAA4C,IAAD,IAA9B5D,EAA8B,uDAAd,UAC1FsC,EAAkB,OAAGjG,QAAH,IAAGA,OAAH,EAAGA,EAAqBv7V,MAAK,SAAA8zD,GAAC,OAAIA,EAAEx0C,KAAOujV,KACnE,IAAKrB,EACH,OAAO,KAGT,IAAMnsP,EAAO,OAAGmsP,QAAH,IAAGA,OAAH,EAAGA,EAAoB9rP,QAC9BqtP,EAAU,OAAGvB,QAAH,IAAGA,OAAH,EAAGA,EAAoBwB,WAEjCzrP,GAAuB,OAAPlC,QAAO,IAAPA,OAAA,EAAAA,EAAS0lP,4BAAT,OAAqC1lP,QAArC,IAAqCA,OAArC,EAAqCA,EAAS2lP,wBAA9C,OAAsE+H,QAAtE,IAAsEA,OAAtE,EAAsEA,EAAYE,WAClGzrP,GAAe,OAAPnC,QAAO,IAAPA,GAAA,UAAAA,EAAS8jM,oBAAT,eAAuBwoD,oBAAvB,OAA2CtsP,QAA3C,IAA2CA,OAA3C,EAA2CA,EAASusP,gBAApD,OAAoEmB,QAApE,IAAoEA,OAApE,EAAoEA,EAAYG,qBACxF5xJ,GAAiB,OAAPj8F,QAAO,IAAPA,OAAA,EAAAA,EAAS4lP,kBAAT,OAA2B5lP,QAA3B,IAA2BA,GAA3B,UAA2BA,EAAS8jM,oBAApC,aAA2B,EAAuB75R,IAC5DiyL,GAAa,OAAPl8F,QAAO,IAAPA,OAAA,EAAAA,EAAS4jM,kBAAT,OAA2B5jM,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAS6jM,YAC1Cl6L,GAAqB,OAAP3J,QAAO,IAAPA,OAAA,EAAAA,EAAS8tP,0BAAT,OAAmC9tP,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAS+tP,oBAC1DnkV,GAAsB,OAAPo2F,QAAO,IAAPA,OAAA,EAAAA,EAASguP,2BAAT,OAAoChuP,QAApC,IAAoCA,OAApC,EAAoCA,EAASiuP,qBAC5D7tP,GAAkB,OAAPJ,QAAO,IAAPA,OAAA,EAAAA,EAAS6lP,uBAAT,OAAgC7lP,QAAhC,IAAgCA,OAAhC,EAAgCA,EAASgJ,iBAGtD0nM,EAAY,GACV7wG,GAAyB,OAAV6tJ,QAAU,IAAVA,OAAA,EAAAA,EAAYQ,sBAAuB,MAClDC,GAAkC,OAAlBhC,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBgC,eAAgBx2W,KAAK6tC,MAAM2mU,EAAmBgC,eAAiB,KACnGC,EAAe,CACnB7sW,KAAM,GACN+iT,KAAM,GACNE,KAAM,IAER,GAAI2pD,EAAe,CAAC,IAAD,kBACjBC,EAAa7sW,KAAb,oBAAoB4sW,GAAyB,OAAXV,QAAW,IAAXA,GAAA,UAAAA,EAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,GACvG0pX,EAAa9pD,KAAb,oBAAoB6pD,GAAyB,OAAXV,QAAW,IAAXA,GAAA,UAAAA,EAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,GACvG0pX,EAAa5pD,KAAb,oBAAoB2pD,GAAyB,OAAXV,QAAW,IAAXA,GAAA,UAAAA,EAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,GAEvG,IAAM2pX,EAAkB,CAAE9sW,KAAM,OAAQ6rT,UAAW,OAAQ9I,KAAM,OAAQgqD,UAAW,OAAQ9pD,KAAM,QACvF,OAAXipD,QAAW,IAAXA,KAAa/3W,SAAQ,SAAAgqE,GACnB,IAC8F,IADxF6uS,EAAWF,EAAgB3uS,EAAE2hL,OAC/BktH,IAAaH,EAAaG,IAA6B,WAAhB7uS,EAAE8uS,WAA0C,QAAhB9uS,EAAE8uS,YACvEJ,EAAaG,GAAb,oBAAyBJ,EAAczuS,EAAEpyE,YAAzC,aAAyB,EAAsB5I,aAA/C,QAAwD,WAGvD,CACL,IAAM2pX,EAAkB,CAAE9sW,KAAM,OAAQ6rT,UAAW,OAAQ9I,KAAM,OAAQgqD,UAAW,OAAQ9pD,KAAM,QACvF,OAAXipD,QAAW,IAAXA,KAAa/3W,SAAQ,SAAAgqE,GACnB,IAAM6uS,EAAWF,EAAgB3uS,EAAE2hL,OAC/BktH,GAA4B,WAAhB7uS,EAAE8uS,WAA0C,QAAhB9uS,EAAE8uS,WAAoD,MAA7BrC,EAAmBzsS,EAAEpyE,OACxF8gX,EAAaG,GAAYpC,EAAmBzsS,EAAEpyE,UAI7C8gX,EAAa7sW,MAAQ4qW,EAAmB/+C,YAC3CghD,EAAa7sW,KAAO4qW,EAAmB/+C,YAIvCghD,EAAa7sW,MAAQ6sW,EAAa9pD,MAAQ8pD,EAAa5pD,QACzDkM,EAAY,CACVt7H,MAAM,eACHy0K,EADE,eAEAhqJ,EAAe,CACdt+M,KAAM6sW,EAAa7sW,MAAQ,KAC3B+iT,KAAM8pD,EAAa9pD,MAAQ,KAC3BE,KAAM4pD,EAAa5pD,MAAQ,KAC3BiqD,iBAAiB,EACjBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,OAO1B,IAAMC,EAAgB,aACpBrB,oBACAtrP,gBACAC,QACA85F,UACAC,MACAvyF,cACA//F,eACAw2F,YACGswM,GAGL,OAAOm+C,GAicTC,oBA9b0B,SAACC,EAAiBjpO,EAAe1f,GAAgB,IAAD,QACpEkmP,EAAgB,OAAGyC,QAAH,IAAGA,GAAH,UAAGA,EAAiB1uP,eAApB,iBAAG,EAA0ByjM,oBAA7B,aAAG,EAAwCwoD,iBAC3D1iV,EAAY,OAAGmlV,QAAH,IAAGA,GAAH,UAAGA,EAAiB1uP,eAApB,iBAAG,EAA0B2jM,gBAA7B,aAAG,EAAoCp6R,aACnDolV,EAAe,OAAGlpO,QAAH,IAAGA,OAAH,EAAGA,EAAervI,MAAK,SAAA2E,GAAC,OAAIA,EAAE1W,QAAU4nX,KACvD2C,EAAW,OAAG7oP,QAAH,IAAGA,OAAH,EAAGA,EAAY3vH,MAAK,SAAA5H,GAAC,OAAIA,EAAEnK,QAAUklC,KACtD,OAAOolV,GAAmBC,GA0b1BzJ,sBACA0J,wBA1a8B,SAACruP,GAC/B,IAAMsuP,EAAW,IAAItnX,IACrB,OAAOg5H,EAAStsH,QAAO,SAAAyrH,GACrB,IAAM1yH,EAAMk4W,EAAoBxlP,GAAS,GACzC,OAAImvP,EAASliX,IAAIK,KAGjB6hX,EAASxnW,IAAIra,IACN,OAmaT8hX,mBA9ZyB,SAACC,EAAYC,GACtC,IAAMC,EAAa/J,EAAoB6J,GAAY,GACnD,OAAOC,EAAiB74W,MAAK,SAAAgoE,GAAC,OAAI+mS,EAAoB/mS,GAAG,KAAW8wS,MA6ZpEC,4BAzZkC,SAAC5yW,EAAQ6yW,GAAqB,IAAD,MACzDl/Q,EAAS,UAAM14F,QAAa,OAAN+E,QAAM,IAANA,GAAA,UAAAA,EAAQgqW,mBAAR,eAAqB1kP,gBAAiB,IAAnD,YAA0DrqH,QAAa,OAAN+E,QAAM,IAANA,GAAA,UAAAA,EAAQgqW,mBAAR,eAAqB3qJ,UAAW,IAAjG,YAAwGpkN,QAAa,OAAN+E,QAAM,IAANA,GAAA,UAAAA,EAAQgqW,mBAAR,eAAqBxmP,WAAY,KAC/J,OAAOqvP,EAAgB9kW,MAAK,SAAA8zD,GAAC,OAAI+mS,EAAoB/mS,GAAG,KAAW8xB,MAwZnEm/Q,mBAhYyB,SAACC,EAA4BxI,GACtD,IADkG,EAC5Fz7V,EAA0B,GADkE,cAG3EikW,GAH2E,6BAGvF59P,EAHuF,QAI1F4/G,GAAoB5/G,EAASm6P,qBAAuB,IAAI33W,QAC5D,SAAC6xW,GAAD,aAAS,UAAAA,EAAIuH,kBAAJ,eAAgBxG,kBAAmBA,GAAkBf,EAAI/lP,WAClE5qH,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEs7B,GAAKr7B,EAAEq7B,MAC1B,IAAK0nM,EAAiB9mO,OAAU,iBAEhC,IAAM+kX,EAA4B,GAC5BC,EAAa,IAAIhoX,IAEjBioX,EAAe,CACnB,CAAExiX,IAAK,YAAaw8B,MAAO6kE,IAAQ55E,EAAE,uCACrC,CAAEznB,IAAK,aAAcw8B,MAAO6kE,IAAQ55E,EAAE,wCACtC,CAAEznB,IAAK,WAAYw8B,MAAO6kE,IAAQ55E,EAAE,kDAIhCg7V,EAAY,UAAGp+I,EAAiB,UAApB,aAAG,EAAqBw8I,cAC1C,GAAI4B,EACF,IACE,IADE,EACIC,EAASr4W,KAAK6tC,MAAMuqU,GADxB,cAEuB3oX,OAAOuL,QAAQq9W,IAFtC,IAEF,2BAAyE,CAAC,IAAD,yBAA7D1iX,EAA6D,KAAxD2R,EAAwD,KAClE4wW,EAAW5iX,IAAIK,KAClBuiX,EAAWloW,IAAIra,GACfsiX,EAAQx6W,KAAK,CAAE9H,MAAKw8B,MAAO7qB,EAAIzH,MAAQlK,MALzC,+BAQF,MAAO8D,QACJ,qBAEe0+W,GAFf,IAEL,2BAAkC,CAAC,IAAD,IAAvBjwH,EAAuB,aACS/6P,KAArC,UAAA6sO,EAAiB,UAAjB,eAAsBkuB,EAAMvyP,OAA2D,QAArC,UAAAqkO,EAAiB,UAAjB,eAAsBkuB,EAAMvyP,QAChFuiX,EAAWloW,IAAIk4O,EAAMvyP,KACrBsiX,EAAQx6W,KAAKyqP,KALZ,+BAUP,IAAMowH,GAAe,UAAAl+P,EAASm+P,eAAT,eAAkB96T,QAAS,GAC1C+6T,EAAuBp+P,EAAS9nF,GAAT,aAAoB8nF,EAAS9nF,IAAO,GAE3DujS,EAAsB77F,EAAiB3/N,KAAI,SAACo0W,GAAS,IAAD,IAClDjyW,EAAiC,GACvC,GAAIiyW,EAAI+H,cACN,IACE,IADE,EACI6B,EAASr4W,KAAK6tC,MAAM4gU,EAAI+H,eAD5B,cAEuB/mX,OAAOuL,QAAQq9W,IAFtC,IAEF,2BAAyE,CAAC,IAAD,2BAA7D1iX,EAA6D,KAAxD2R,EAAwD,KACvE9K,EAAO7G,GAAP,UAAc2R,EAAIva,aAAlB,QAA2B,KAH3B,+BAKF,MAAO0M,QACJ,qBAEe0+W,GAFf,IAEL,2BAAkC,CAAC,IACF,EADtBjwH,EAAuB,QAChC,GAAIgwH,EAAW5iX,IAAI4yP,EAAMvyP,KACvB6G,EAAO0rP,EAAMvyP,KAAb,UAAoB84W,EAAIvmH,EAAMvyP,YAA9B,QAAsC,KAJrC,+BASP,MAAO,CACL28B,GAAIm8U,EAAIn8U,GACRo+U,cAAet2P,EAAS9nF,GACxBkmV,uBACAn4W,KAAMi4W,EACNG,uBAAuB,UAAAhK,EAAI/lP,eAAJ,eAAaqlP,4BAAb,UAAyCU,EAAI/lP,eAA7C,aAAyC,EAAaslP,uBAAwB,GACrGh8O,YAAay8O,EAAIz8O,aAAe,GAChC0mP,MAAOjK,EAAIqE,MAAQ,GACnBt2W,aAIJuX,EAAOtW,KAAK,CAAEw6W,UAASpiD,UAtEzB,2BAA4C,IAHsD,8BA4ElG,OAAO9hT,GAqTP4kW,4BApBkC,SAAC1J,GACnC,UAAqB,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAa75W,IAAI,iBAAjB,OAAiC65W,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAah9V,MAAM,CAAC,cAAe,iBAoB9E2mW,iCAnTuC,SAACC,EAAoBC,EAAajI,GACzE,IAAMkI,GAAiBF,GAAsB,IAAIj8W,QAC/C,SAAAquE,GAAI,aAAI,UAAAA,EAAK0kS,mBAAL,eAAkBr9U,MAAOwmV,EAAYxmV,MAE/C,GAA6B,IAAzBymV,EAAc7lX,OAAgB,MAAO,GAIzC,IAAM8lX,EAAuB,GAC7BD,EAAch7W,SAAQ,SAAAzJ,GAChBA,EAAMw7W,uBACRkJ,EAAqB1kX,EAAMw7W,sBAAwB,CACjDN,eAAgBl7W,EAAMk7W,eACtBD,UAAWj7W,EAAMi7W,eAMvB,IAAM0J,EAAwB,GAC9BF,EAAch7W,SAAQ,SAAAzJ,GACf2kX,EAAsB3kX,EAAMk7W,kBAC/ByJ,EAAsB3kX,EAAMk7W,gBAAkBl7W,EAAMi7W,cAGxD,IAAM2J,EAAgBzpX,OAAO0D,KAAK8lX,GAE5BE,EAAgB,GAChBC,EAAON,EAAYvE,qBAAuB,GAKhD,GAFkB9kX,OAAO0D,KAAK6lX,GAAsB9lX,OAAS,EAI3DkmX,EAAKr7W,SAAQ,SAAA0wW,GAAQ,IAAD,EACZsB,EAAsB,UAAGtB,EAAIuH,kBAAP,aAAG,EAAgBxG,eAC/C,GAAKO,GAEDiJ,EAAqBvK,EAAIn8U,IAAK,CAChC,IAAM+mV,EAAyBL,EAAqBvK,EAAIn8U,IAAIk9U,eACtDD,EAAYyJ,EAAqBvK,EAAIn8U,IAAIi9U,UACzC+J,EAAWD,IAA2BtJ,EAG5C,GAAIuJ,EAKF,KAJe,OAAGzI,QAAH,IAAGA,OAAH,EAAGA,EAAe/xW,MAAK,SAAAi2P,GAAO,aAC3CA,EAAQ3/P,IAAI,eAAiBm6W,IAA7B,UACAx6G,EAAQ3/P,IAAI,mBADZ,aACA,EAAyB0J,MAAK,SAAAgoE,GAAC,OAAIA,EAAE1xE,IAAI,oBAAsBikX,UAE/C,OAGpBF,EAAc17W,KAAK,CACjBizW,cAAejC,EAAIn8U,GACnBi9U,YACAgK,eAAgBD,EAAWD,EAAyB,KACpDG,gBAAgB,EAChBzJ,mCAID,CAGL,IAAM0J,EAAgB,IAAIvpX,IAC1BkpX,EAAKr7W,SAAQ,SAAA0wW,GAAQ,IAAD,EACZiL,EAAM,UAAGjL,EAAIuH,kBAAP,aAAG,EAAgBxG,eAC3BkK,GAAUD,EAAczpW,IAAI0pW,MAIlC,IAAMC,EAAe,GACfC,EAAc,GACpBV,EAAcn7W,SAAQ,SAAA87W,GAChBJ,EAAcnkX,IAAIukX,GACpBF,EAAal8W,KAAKo8W,GAElBD,EAAYn8W,KAAKo8W,MAKrB,IAAMC,EAAiB,GACvBV,EAAKr7W,SAAQ,SAAA0wW,GAAQ,IAAD,EACZiL,EAAM,UAAGjL,EAAIuH,kBAAP,aAAG,EAAgBxG,eAC1BkK,IACAI,EAAeJ,KAAWI,EAAeJ,GAAU,IACxDI,EAAeJ,GAAQj8W,KAAKgxW,OAI9B,IAAIsL,EAAY,EAChBtqX,OAAOuL,QAAQ8+W,GAAgB/7W,SAAQ,YAA2C,IAAD,mBAAxC27W,EAAwC,KAAhCM,EAAgC,KACzEzK,EAAY0J,EAAsBS,IAAWT,EAAsBW,EAAY,IAChFrK,IAELyK,EAAUl8W,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEs7B,GAAKr7B,EAAEq7B,MAElC0nV,EAAUj8W,SAAQ,SAAC0wW,EAAKjpW,GACtB,GAAY,IAARA,GAAam0W,EAAa/+W,SAAS8+W,GACrCP,EAAc17W,KAAK,CACjBizW,cAAejC,EAAIn8U,GACnBi9U,UAAW0J,EAAsBS,GACjCH,eAAgB,KAChBC,gBAAgB,EAChBzJ,uBAAwB2J,SAErB,GAAIK,EAAYH,EAAY1mX,OAAQ,CACzC,IAAM+mX,EAAaL,EAAYG,GAC/BZ,EAAc17W,KAAK,CACjBizW,cAAejC,EAAIn8U,GACnBi9U,UAAW0J,EAAsBgB,IAAe1K,EAChDgK,eAAgBU,EAChBT,gBAAgB,EAChBzJ,uBAAwB2J,IAE1BK,YAMR,OAAOZ,GAyLPe,6CA7KmD,SAACrB,EAAoBsB,EAAiBtJ,EAAeuJ,EAAoBC,GAG5H,IAAMC,EAA0B,IAAIpqX,KACpC,OAAIkqX,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBlnX,SACrBknX,EAAkBr8W,SAAQ,SAAA0wW,GAAQ,IAAD,EACzBiL,EAAM,UAAGjL,EAAIuH,kBAAP,aAAG,EAAgBxG,eAC3BkK,GAAUY,EAAwBtqW,IAAI0pW,MAK9C,IAAMa,EAAqB,IAC1B1B,GAAsB,IAAI96W,SAAQ,SAAAzJ,GAAU,IAAD,EACpCkmX,EAAQ,UAAGlmX,EAAMq7W,mBAAT,aAAG,EAAmBr9U,GAC/BkoV,GAAYA,IAAaL,IACzBI,EAAmBC,KAAaD,EAAmBC,GAAY,IACpED,EAAmBC,GAAU/8W,KAAKnJ,OAGpC,IAAM6kX,EAAgB,GAmGtB,OAjGA1pX,OAAOuL,QAAQu/W,GAAoBx8W,SAAQ,YAA2C,IAAD,mBAAxCy8W,EAAwC,KAA9Bx/W,EAA8B,KAE7Ey/W,EAAqH,GAC3Hz/W,EAAQ+C,SAAQ,SAAAzJ,GACd,IAAMomX,EAAQpmX,EAAMw7W,sBAAwB,EACvC2K,EAAoBnmX,EAAMk7W,gBAEpBkL,KAAWD,EAAoBnmX,EAAMk7W,gBAAgBmL,UAAYD,EAAQD,EAAoBnmX,EAAMk7W,gBAAgBmL,YAC5HF,EAAoBnmX,EAAMk7W,gBAAgBmL,SAAWD,GAFrDD,EAAoBnmX,EAAMk7W,gBAAkB,CAAED,UAAWj7W,EAAMi7W,UAAWoL,SAAUD,EAAOE,kBAAmBtmX,EAAMy7W,wBAA0B,SAQlJ,IAAM8K,EAA0E,GAC1EC,EAA2G,GACjHrrX,OAAOuL,QAAQy/W,GAAqB18W,SAAQ,YAAmB,IAAD,mBAAhB87W,EAAgB,KAAVrrK,EAAU,KACxD8rK,EAAwBhlX,IAAIukX,GAC9BgB,EAAap9W,KAAK,CAAEo8W,OAAMtK,UAAW/gK,EAAK+gK,UAAWmL,MAAOlsK,EAAKmsK,WAEjEG,EAAYr9W,KAAK,CAAEo8W,OAAMtK,UAAW/gK,EAAK+gK,UAAWmL,MAAOlsK,EAAKmsK,SAAUC,kBAAmBpsK,EAAKosK,uBAItGC,EAAa/8W,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAE0jX,MAAQzjX,EAAEyjX,SAGxCI,EAAY/8W,SAAQ,SAAAg9W,GAClB,IAAIC,EAA8B,KAclC,IAXKA,GAAgBD,EAAWL,QAA5B,OAAqCL,QAArC,IAAqCA,OAArC,EAAqCA,EAAuBU,EAAWL,UACzEM,EAAeX,EAAqBU,EAAWL,SAI5CM,GAAgBD,EAAWH,oBAC9BI,EAAeD,EAAWH,oBAKvBI,GAAgBD,EAAWL,MAAO,CACrC,IADqC,EACjCO,EAA6C,KADZ,cAEnBJ,GAFmB,IAErC,2BAAgC,CAAC,IAAtBK,EAAqB,QAC1BA,EAAI3L,YAAcwL,EAAWxL,WAAa2L,EAAIR,OAASQ,EAAIR,MAAQK,EAAWL,SAC3EO,GAAeC,EAAIR,MAAQO,EAAYP,SAC1CO,EAAcC,IALiB,8BASjCD,IAAeD,EAAeC,EAAYpB,MAIhD,IAAKmB,EAAc,CACjB,IAAMG,EAAcN,EAAa7nW,MAAK,SAAAkoW,GAAG,OAAIA,EAAI3L,YAAcwL,EAAWxL,aACtE4L,IAAeH,EAAeG,EAAYtB,OAI3CmB,GACHV,EAAwBv8W,SAAQ,SAAA27W,GACzBsB,IACgB,OAAGnK,QAAH,IAAGA,OAAH,EAAGA,EAAe/xW,MAAK,SAAAs8W,GAAG,aAC3CA,EAAIhmX,IAAI,eAAiB2lX,EAAWxL,YAApC,UACA6L,EAAIhmX,IAAI,mBADR,aACA,EAAqB0J,MAAK,SAAAgoE,GAAC,OAAIA,EAAE1xE,IAAI,oBAAsBskX,YAExCsB,EAAetB,MAKrCsB,MAKU,OAAGnK,QAAH,IAAGA,OAAH,EAAGA,EAAe/xW,MAAK,SAAAi2P,GAAO,aAC3CA,EAAQ3/P,IAAI,eAAiB2lX,EAAWxL,YAAxC,UACAx6G,EAAQ3/P,IAAI,mBADZ,aACA,EAAyB0J,MAAK,SAAAgoE,GAAC,OAAIA,EAAE1xE,IAAI,oBAAsB2lX,EAAWlB,cAO5EV,EAAc17W,KAAK,CACjBizW,eAAgB19W,OAAOwnX,GACvBjL,UAAWwL,EAAWxL,UACtBgK,eAAgBwB,EAAWlB,KAC3BL,gBAAgB,EAChBzJ,uBAAwBiL,WAKvB7B,GAuDPhL,qBAEae,O,6BC1mCf,IAAIl3J,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,iDACD,cAEJ3K,EAAQywH,QAAUq4I,G,6BCEH3D,IAlBf,SAAiBpyP,EAAWmjC,M,6BCA5B,0PASM24U,EAAS,IAAIC,SACbC,EAAW,IAAIpvU,OAAO,gCACtBqvU,EAAe,IAAIrvU,OAAO,cAAe,KACzCqhP,EAAQ,IAAIrhP,OAAO,MAAO,KAEnBsvU,EAAwB,SAAC,GAAiR,IAA/QC,EAA8Q,EAA9QA,cAAeC,EAA+P,EAA/PA,aAAcC,EAAiP,EAAjPA,gBAAiBzJ,EAAgO,EAAhOA,WAAY0J,EAAoN,EAApNA,eAAoN,IAApMC,qBAAoM,SAC9Sr0C,EAAci0C,EAAcv6W,QAsDlC,OArDAsmU,EAAO1pU,SAAQ,SAACmqP,GACd,IAAI6zH,EAAmB,KACnB5J,IACF4J,EAAmB5J,EAAWn/V,MAAK,SAAAi7K,GAAQ,OACzCA,EAAS74L,IAAI,UAAY8yP,EAAMroP,MAC/BouL,EAAS74L,IAAI,eAAiB8yP,EAAM8zH,WACpC/tL,EAAS74L,IAAI,aAAe8yP,EAAM+zH,SAClChuL,EAAS74L,IAAI,eAAiB8yP,EAAMg0H,cAIxC,IAAMC,GAAkBJ,QAAgE5uX,IAA5C4uX,EAAiB3mX,IAAI,oBAAmC2mX,EAAiB3mX,IAAI,mBACzH,GAAmB,YAAf8yP,EAAM32P,KAKR,CAEA,GAAIqqX,IACwBA,EAAgBxmX,IAAI,kBAAoBkU,kBACvB0J,MAAK,SAAAopW,GAAQ,OAAIA,EAAShnX,IAAI,UAAY8yP,EAAMroP,SAASoE,iBACrE7O,IAAI,WAGrC,IAAM4N,EAAWklP,EAAM2nH,WACjBwM,EAAgBC,EAAa,CAAC70C,SAAQw0C,QAAS/zH,EAAM+zH,UAE3D/zH,EAAM2nH,WAAiC,eAApB3nH,EAAMg0H,UACrBL,EAAkB74W,GAAsBq5W,EAAiBF,EAAkBE,EAAgBr5W,EACzE,KAAlBq5W,EAAuB,GAAvB,UAA+B7uS,EAAwH,IAAlHxD,WAAW6xS,EAAkB74W,GAAsBq5W,EAAiBF,EAAkBE,EAAgBr5W,GAAiB,GAAGyoP,QAAQ,IAEvKkwH,GAAgB34W,IAAaq5W,GAAiBF,IAChDj0H,EAAMq0H,gBAAiB,OAED,gBAAfr0H,EAAM32P,OACf22P,EAAM32P,KAAO,WAGf,GAAIuqX,EAAe,CACjB,IAAMU,EAAwC,YAApBt0H,EAAMg0H,YAAgD,cAApBh0H,EAAMu0H,WAAiD,aAApBv0H,EAAMu0H,WACrGv0H,EAAM2nH,WAAa2M,EACfE,YAAkBx0H,EAAM2nH,WAAY,GACpC8M,YAAoB,CAClB5vX,MAAOm7P,EAAM2nH,WACb+M,eAAgB10H,EAAM00H,eACtBC,iBAAkB30H,EAAM20H,iBACxBC,iBAAiC,YAAf50H,EAAM32P,OAE9B22P,EAAM60H,eAAiB70H,EAAM2nH,eAI1BpoC,GAWIu1C,EAAqB,SAArBA,EAAsB,GAY5B,IAXLtB,EAWI,EAXJA,cACAuB,EAUI,EAVJA,UAUI,IATJC,iBASI,MATQ,GASR,EARJC,EAQI,EARJA,YAQI,IAPJrB,qBAOI,SACEr0C,EAAci0C,EAAcv6W,QAC5Bi8W,EAAa31C,EAAOpwT,WAAU,SAACgmW,GAAD,OAAcA,EAAI/qV,KAAO2qV,EAAU3qV,MACvE4qV,EAAUz/W,KAAKw/W,EAAU3qV,IACzB,IAAMu9U,EAAa3vW,OAAO+8W,EAAUpN,YACpC,GAAIA,EAAWjwU,MAAM4tP,IAAUqiF,EAAWjwU,MAAM4tP,GAAOt6R,OAAS,EAC9D,OAAOu0U,EAIT,GADAA,EAAO21C,GAAcH,EACjB,UAAU7wU,KAAK6wU,EAAUpN,YAC3B,OAAOpoC,EAmCT,GAhCAA,EAAO1pU,SAAQ,SAACmqP,GACd,GAAmB,YAAfA,EAAM32P,MACH22P,EAAM+zH,QAAQrhX,SAAd,YAA8BqiX,EAAUjB,UAAxC,QACCphX,mBAASsiX,EAAWh1H,EAAM51N,KAC3B41N,EAAM51N,KAAO2qV,EAAU3qV,SACEnlC,IAAzB8vX,EAAUpN,WAA0B,CAAC,IAAD,EAEnC7sW,EAAWklP,EAAM2nH,WACjBgN,EAAgB,UAAG30H,EAAM20H,wBAAT,QAA6B,EAC7CR,EAAgBC,EAAa,CAAC70C,SAAQw0C,QAAS/zH,EAAM+zH,UAE3D/zH,EAAM2nH,WAAiC,eAApB3nH,EAAMg0H,UACrBG,EACkB,KAAlBA,EAAuB,GAAvB,UAA+B7uS,EAAkC,IAA5BxD,WAAWqyS,GAAsBQ,GAAkBpxH,QAAQoxH,IACpGK,EAAUz/W,KAAKyqP,EAAM51N,IACrB0qV,EAAmB,CAAEtB,cAAej0C,EAAQw1C,UAAW/0H,EAAOg1H,YAAWC,cAAarB,kBAClFqB,GAAen6W,IAAaq5W,IAC9Bn0H,EAAMq0H,gBAAiB,GAGrBT,IACF5zH,EAAM2nH,WAAa8M,YAAoB,CACrC5vX,MAAOm7P,EAAM2nH,WACb+M,eAAgB10H,EAAM00H,eACtBC,iBAAkB30H,EAAM20H,iBACxBC,kBAAkB,IAEpB50H,EAAM60H,eAAiB70H,EAAM2nH,gBAK/BiM,GAAiBsB,GAAc,EAAG,CACpC,IAAMrwX,EAAQ06U,EAAO21C,GAAYvN,WAC3B2M,EAAqD,YAAjC/0C,EAAO21C,GAAYlB,YAA6D,cAAjCz0C,EAAO21C,GAAYX,WAA8D,aAAjCh1C,EAAO21C,GAAYX,WAC5Ih1C,EAAO21C,GAAYvN,WAAa2M,EAC5BE,YAAkB3vX,EAAO,GACzB4vX,YAAoB,CAClB5vX,MAAO06U,EAAO21C,GAAYvN,WAC1B+M,eAAgBn1C,EAAO21C,GAAYR,eACnCC,iBAAkBp1C,EAAO21C,GAAYP,iBACrCC,iBAA8C,YAA5Br1C,EAAO21C,GAAY7rX,OAE3Ck2U,EAAO21C,GAAYL,eAAiBt1C,EAAO21C,GAAYvN,WAGzD,OAAOpoC,GAGI60C,EAAe,SAAC,GAUtB,IATL70C,EASI,EATJA,OACAw0C,EAQI,EARJA,QAQI,IAPJH,qBAOI,SANJp+L,EAMI,EANJA,UAOI4/L,EAAmBrB,EACnBT,EAAapvU,KAAK6vU,IAEpBA,EAAQr8U,MAAM47U,GAAcz9W,SAAQ,SAAC+wL,GAEnC,IAEI+gL,EAFE0N,EAAYzuL,EAASlvJ,MAAM27U,GAAU,GACrCrzH,EAAau/E,EAAOz0T,MAAK,SAACqqW,GAAD,OAAcA,EAAIrB,YAAcuB,KAE3Dr1H,IACFmzH,EAAOmC,YAAYD,EAAWvqX,OAAOk1P,EAAM2nH,gBAC3CA,EAAiC,eAApB3nH,EAAMg0H,UAAN,UAAsCh0H,EAAM2nH,WAA5C,KAA4D3nH,EAAM2nH,aAC3DA,IAAeA,EAAW38W,UAC5C28W,EAAa,SAGjByN,EAAmBA,EAAiBrzS,QAAQ6kH,EAAU+gL,MAW1D,IACI5qW,EADEw4W,EAAYpC,EAAOxtU,MAAMyvU,GAAkBr4W,OASjD,MAA0B,kBALxBA,EADE62W,EACOtuS,EAAMiwS,EAAD,OAAY//L,QAAZ,IAAYA,IAAa,GAE9B+/L,IAG4BhwU,MAAMxoC,GAEzC,GADAA,EAAOwmP,QAAP,OAAe/tE,QAAf,IAAeA,IAAa,IAIrBlwG,EAAQ,SAACzgF,EAAe2wX,GAAhB,OAEnB1qX,OAAO5E,KAAKo/E,MAAMzgF,EAAK,WAAO2wX,IAAvB,YAA0CA,KAEtCC,EAAoB,SAAC7nQ,EAAe8nQ,GAC/C,MAAc,KAAV9nQ,GAIU,IAAI3pE,OAAJ,yBAA6ByxU,EAA7B,SACDxxU,KAAK0pE,IAGd+nQ,EAAgB,SAAC9wX,GAAD,QAA6B,OAACA,QAAD,IAACA,IAAS,IAAIuF,WAAW89C,MAAM,KAAK,IAAM,IAAIl9C,QAiBpF4qX,EAAc,SAACthX,GAC1B,IAAMkhX,EAAWtvX,KAAKE,IACpBkO,EAAOQ,QAAe,SAAC+gX,EAAQhxX,GAAT,OAAmBqB,KAAKC,IAAI0vX,EAAQF,EAAc9wX,MAAS,GAhBvD,GAmBtBixX,EAAM,SAAG,GAAMN,GAKrB,OAJclhX,EAAOQ,QAAe,SAACC,EAAKlQ,GACxC,IAAMkxX,EAAWjrX,OAAOjG,GACxB,OAAO0gD,MAAMwwU,GAAYhhX,EAAMA,EAAM7O,KAAKo/E,MAAMywS,EAAWD,KAC1D,GACYA,I,6BCvPjB,+CACe,SAASh8G,EAAe74L,EAAUC,GAC/CD,EAAS35E,UAAYC,OAAOC,OAAO05E,EAAW55E,WAC9C25E,EAAS35E,UAAUG,YAAcw5E,EACjC,YAAeA,EAAUC,K,sWCiBpB,SAAS8wD,EAAK57G,EAAgCze,EAAcq+W,GACjE,GAAMr+W,KAAQye,EAAd,CAIA,IAAMksQ,EAAWlsQ,EAAOze,GAClBoxL,EAAUitL,EAAmB1zF,GAIZ,oBAAZv5F,GACTktL,EAAoBltL,EAASu5F,GAG/BlsQ,EAAOze,GAAQoxL,GAUV,SAASmtL,EAAyBjmX,EAAa0H,EAAc9S,GAClE,IACE0C,OAAOyJ,eAAef,EAAK0H,EAAM,CAE/B9S,MAAOA,EACPsM,UAAU,EACVD,cAAc,IAEhB,MAAOilX,GACP,KAAe,IAAO/hR,IAAP,iDAAqDz8F,EAArD,eAAwE1H,IAWpF,SAASgmX,EAAoBltL,EAA0Bu5F,GAC5D,IACE,IAAMrmN,EAAQqmN,EAASh7R,WAAa,GACpCyhM,EAAQzhM,UAAYg7R,EAASh7R,UAAY20E,EACzCi6S,EAAyBntL,EAAS,sBAAuBu5F,GACzD,MAAO6zF,KAUJ,SAASC,EAAoB/iW,GAClC,OAAOA,EAAKgjW,oBASP,SAASC,EAAUhpX,GACxB,OAAO/F,OAAO0D,KAAKqC,GAChB6E,KAAI,SAAA1E,GAAI,gBAAI,sBAAJ,YAAI,6BACA,UAWA,WACA,GAgBA,kBACA,oBACA,kBACA,YACA,eACA,MAEA,mBACA,mBAOA,YACA,mBACA,kCACA,MAOA,MAJA,+DACA,mBAGA,EAEA,SAKA,cACA,IACA,uEACA,SACA,mBAKA,cACA,kCACA,SACA,eACA,OAAAnG,UAAA,2BACA,WAGA,SAEA,SASA,8EACA,oBAGA,GAFA,UAEA,SACA,6BAGA,kBACA,2BAGA,4BACA,8BACA,iBAGA,oBACA,EAEA,iBAGA,SASA,cAOA,WAHA,SAMA,gBACA,GAyCA,YACA,mBACA,SAGA,IACA,gDACA,uBACA,SACA,UAlDA,KAEA,eACA,cACA,SAGA,SAEA,WAEA,wDACA,qBAAAskH,EAAA,KACA,gBAIA,SAGA,qBAEA,eACA,cACA,SAGA,SAQA,OANA,WAEA,uBACA,kBAGA,EAGA,W,0KC7PX2qQ,EAA6E,GAC7E3mH,EAA6D,GAG5D,SAAS4mH,EAAWntX,EAA6B+4M,GACtDm0K,EAASltX,GAAQktX,EAASltX,IAAS,GAClCktX,EAASltX,GAAsCkM,KAAK6sM,GAchD,SAASq0K,EAAgBptX,EAA6BqtX,GACtD9mH,EAAavmQ,KAChBqtX,IACA9mH,EAAavmQ,IAAQ,GAKlB,SAASstX,EAAgBttX,EAA6B86C,GAC3D,IAAMyyU,EAAevtX,GAAQktX,EAASltX,GACtC,GAAKutX,EAAL,CAFgF,oBAM1DA,GAN0D,IAMhF,2BAAoC,KAAzBx0K,EAAyB,QAClC,IACEA,EAAQj+J,GACR,MAAO5yC,GACP,KACE,IAAO+F,MAAP,iEAC4DjO,EAD5D,mBAC2E,YAAgB+4M,GAD3F,YAEE7wM,KAbwE,kC,6BCrClF,sDACIslX,EAAsC,qBAAXh/V,OAAyB+V,IAAMyB,gBAAkBzB,IAAM0B,UAOvE,SAASwnV,EAAiB9qX,GACvC,IAAIpH,EAAMgpC,IAAMyG,OAAOroC,GAIvB,OAHA6qX,GAAkB,WAChBjyX,EAAIqsC,QAAUjlC,KAET4hC,IAAMykF,aAAY,WACvB,OAAWztH,EAAIqsC,QAAS7/B,WAAM,EAAQvE,aACrC,M,gOC6FU4uT,IAnEkC,SAACpoR,GAChD,IApBoBsxE,EAqBlBiJ,EAgBEv6E,EAhBFu6E,MADF,EAiBIv6E,EAfFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAMEoJ,EANFpJ,MAXF,EAiBIoJ,EALF9uC,eAZF,WAiBI8uC,EAJFyvE,kBAbF,MAae,GAbf,IAiBIzvE,EAHF0vE,wBAdF,MAcqB,GAdrB,IAiBI1vE,EAFFq2N,6BAfF,MAe0B,GAf1B,EAgBKj8O,EAhBL,YAiBI4lB,EAjBJ,GAmBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAmBZ,OAjBoC,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzFmjN,EAAgBnjN,cAEO,MAA5BmjN,EAAgBllJ,WAClBklJ,EAAgBllJ,UArDEA,EAqDsBklJ,EAAgBllJ,SArDzB,WACjCA,EAAQ,WAAR,gBAyDAklJ,EAAgB1kI,QAAU3+H,QAAQqjQ,EAAgBhlQ,OAClDglQ,EAAgBhlQ,MAAQglQ,EAAgBlyP,KAER,KAA5BkyP,EAAgB1kI,UAClB0kI,EAAgB1kI,SAAU,GAI1B,eAAC,IAAD,yBAAa7tH,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,aACE94E,MAAO1lC,EAAO,UAAM0lC,EAAN,MAAkBA,EAChCymF,QACE,cAAC,IAAD,2BACMm5I,GACAp8O,KAGJi8O,SAGMzkQ,IAAVqS,QAAmCrS,IAAZwkQ,EACvB,KACA,cAAC,IAAD,CAAgBr/N,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,W,yJCkDhDrrL,sBACbgG,aA1Ga,SAACC,GAAD,MAA+B,CAC5Ck8O,aAAc,CACZnlM,WAAY/2C,EAAMZ,QAAQ,KAC1B43C,cAAeh3C,EAAMZ,WAEvBy8O,mBAAoB,CAClBv1M,YAAatmC,EAAMZ,QAAQ,GAC3By6C,cAAe,aAEjB64P,eAAgB,CACdtxQ,UAAWphC,EAAMZ,eAiGnBn7B,YAAgB,gBAChB0/D,kBAAQ,MAhBiB,SAACl0E,GAC1B,MAAO,CACLA,WACAkjV,iBAAkB,SAAC3iW,EAAgB1c,GACjCm8B,EAAS,IAAI4J,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEhf,SAAQo5O,aAAc91P,MACnGm8B,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIijO,mBACJv5J,MAAM,UAMC11B,EA5FK,SAAC64S,GACnB,IACEC,EAgBED,EAhBFC,WACApjR,EAeEmjR,EAfFnjR,KACAqjR,EAcEF,EAdFE,SACAC,EAaEH,EAbFG,kBACA/kD,EAYE4kD,EAZF5kD,aACAhwP,EAWE40S,EAXF50S,QACAg1S,EAUEJ,EAVFI,YACAN,EASEE,EATFF,eACAjyU,EAQEmyU,EARFnyU,QACAwyU,EAOEL,EAPFK,YACAC,EAMEN,EANFM,aACAC,EAKEP,EALFO,SAZF,EAiBIP,EAJFQ,mBAbF,WAiBIR,EAHFS,yBAdF,MAcsB,KAdtB,EAeExiW,EAEE+hW,EAFF/hW,EACA8hW,EACEC,EADFD,iBAGF,EAA8BppV,YAAe,GAA7C,mBAAO2iE,EAAP,KAAgBonR,EAAhB,KAQA,OANA/pV,aAAgB,YACTkmE,GAAQvD,GACXonR,GAAW,KAEZ,CAAC7jR,IAGF,cAAC,IAAD,yBACEg6B,QAAS,WACPspP,IACAO,GAAW,IAEb,mBAAiB,4BACbL,GANN,IAOExjR,KAAMA,EAPR,SASE,sBAAKvxB,UAAWF,EAAQk+O,aAAxB,UACE,cAAC,IAAD,UAEIz7Q,GAEI,qCACE,cAAC,IAAD,CAAmB1a,GAAG,2BAA2By4E,QAAQ,KAAzD,SACIw0Q,GAAW,UAAOniW,EAAE,0BAAT,YAAsCiiW,EAAtC,OAEdJ,GAAkB,cAAC,IAAD,CAAmBx0S,UAAWF,EAAQ00S,eAAtC,SAAwDA,SAIrF,eAAC,IAAD,WACE,cAAC,IAAD,CACE/oQ,QAASopQ,EACThoR,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHrB,SAKIq3D,GAAgBriW,EAAE,wBAGtB,cAAC,IAAD,CACE84F,QAAS,SAACz8G,GACRA,EAAE87G,kBACFglN,EAAa6kD,GACTO,GACFT,EAAiBU,GAAwCxiW,EAAE,wBAAyBiiW,IAGxF/nR,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBATrB,SAWIs3D,GAAYtiW,EAAE,qC,gSCNbkpD,sBACbgG,aAJa,SAACC,GAAD,OAAkB2zL,YAAa,OAG/B55L,EA7E6C,SAAC/qC,GAC3D,IA1BoBsxE,EA2BlBiJ,EAmBEv6E,EAnBFu6E,MADF,EAoBIv6E,EAlBFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QALJ,EAoBIp2N,EATF9uC,eAXF,WAoBI8uC,EARFyvE,kBAZF,MAYe,GAZf,EAaE80Q,EAOEvkV,EAPFukV,eACAC,EAMExkV,EANFwkV,qBAdF,EAoBIxkV,EALF0vE,wBAfF,MAeqB,GAfrB,IAoBI1vE,EAJF2iF,kBAhBF,WAoBI3iF,EAHFioH,eAjBF,SAmBK7tI,GACD4lB,EAFFgvC,QAlBF,YAoBIhvC,EApBJ,IAsBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IA4BZ,MA1B8B,KAA1Bi8I,EAAgBhlQ,QAClBglQ,EAAgB//I,SACZ+/I,EAAgBhlQ,MAAQ,GACxBglQ,EAAgBhlQ,MAAQ,MAGM,MAAhCglQ,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACjFmjN,EAAgBnjN,cAGO,MAA5BmjN,EAAgBllJ,WAClBklJ,EAAgBllJ,UArEEA,EAqEsBklJ,EAAgBllJ,SArEzB,WACjCA,EAAS,UAAD,kCA0EHklJ,EAAgB2iF,oBAAgD,MAA1B3iF,EAAgBh7H,SACzDg7H,EAAgBh7H,QAAoBg7H,EAAgBh7H,OAxEzB,eA2EzBg7H,EAAgBhlQ,OAAS0D,sBAAYshQ,EAAgBhlQ,SACvDglQ,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAM6iB,QAI9C,eAAC,IAAD,yBAAapQ,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,CACEzrG,MAAO9Q,QAAQgjQ,IAAYlyP,GAASmyP,IACpCllQ,QAASA,EACT+2J,QAASA,EACTs8N,eAAgBA,EAChBC,qBAAsBA,EACtBhuH,gBAAiBA,EACjBp8O,KAAMA,IAEPuoG,GAAc,cAAC,IAAD,CAAgB5rF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,a,gBCrH5EplQ,EAAOC,QAAU,CAAE,QAAWC,EAAQ,MAA+CshN,YAAY,I,6BCEjGvhN,EAAQuhN,YAAa,EAErB,IAEIiyK,EAAmBhoK,EAFDvrN,EAAQ,OAM1BwzX,EAAWjoK,EAFDvrN,EAAQ,OAMlB0yW,EAAWnnJ,EAFAvrN,EAAQ,OAIvB,SAASurN,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQywH,QAAU,SAAU9zC,EAAUC,GACpC,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI11E,UAAU,4DAAoF,qBAAf01E,EAA6B,aAAc,EAAI+1R,EAASliP,SAAS7zC,KAG5JD,EAAS35E,WAAY,EAAIywX,EAAShjQ,SAAS7zC,GAAcA,EAAW55E,UAAW,CAC7EG,YAAa,CACX5C,MAAOo8E,EACPhwE,YAAY,EACZE,UAAU,EACVD,cAAc,KAGdgwE,IAAY42S,EAAiB/iQ,SAAU,EAAI+iQ,EAAiB/iQ,SAAS9zC,EAAUC,GAAcD,EAAS55E,UAAY65E,K,6BC/BxH,YAGA,aAAE,SAAF,KAgBA,OAfI82S,EAAU1wX,UAAUq8C,MAAQ,SAAxB,GACA,MAAE,IAAI,IAA0B,KAAK,YAAY,KAAM,UAG3D,EAAF,8BACE,MAAM,IAAI,IAA0B,KAAK,YAAY,KAAM,aAG3D,EAAF,iCACE,MAAM,IAAI,IAA0B,KAAK,YAAY,KAAM,gBAG3D,EAAF,iCAAc,EAAqB,GACjC,MAAM,IAAI,IAA0B,KAAK,YAAY,KAAM,kBAE/D,EAhBA,GAkBe,O,6BCrBf,8BAmFe4iR,IAjEH,SAAC,GAAoF,IAAnFn1N,EAAkF,EAAlFA,OAAkF,IAA1EtK,aAA0E,MAAlE,GAAkE,EAC9F,OAAO,IAAI1+C,SAAQ,SAACC,EAASi3B,GAC3B,IACExrC,EACEtF,IAAMthC,IAAI,SADZ4mC,SAOI+1S,EAAgBz4O,EAAOJ,QAAQ,CACnCvB,QAAS,OACTC,SAAU,aACVo6O,SAAS,EACT93N,WAAW,EACXC,WAAW,IAEP83N,EAAM,IAAIrsI,eACVv5J,EAAO,IAAI6lS,SAEjBljP,EAAMjxF,SAAQ,SAAC+mN,GACbz4K,EAAKy0G,OAAO,OAAQgkE,MAGtBz4K,EAAKy0G,OAAO,OAAQ,QAEpBmxL,EAAIj2O,KAAK,OAAQ+1O,GAEjBE,EAAIE,OAAO93O,iBAAiB,YAAY,SAAC5gG,GACvC,IAAM24U,EAAW34U,EAAE0kJ,OAAS1kJ,EAAE+xP,MAAS,IAEvCxvN,EAAS,IAAI0K,IAA+B,CAAC/wC,IAAK,oBAAqB5I,MAAOqlV,KAE1EA,GAAW,KACbp2S,EAAS,IAAI0K,IAA+B,CAAC/wC,IAAK,YAAa5I,MA5B7Cm9C,YAAW,WAC/BlO,EAAS,IAAI0K,IAA+B,CAAC/wC,IAAK,eAAgB5I,MAAO,kBACxE,WA8BHklV,EAAII,YAAc,SAAC54U,GACjBuiC,EAAS,IAAI0K,IAA+B,CAAC/wC,IAAK,cAAe5I,OAAO,MAG1EklV,EAAI53O,iBAAiB,WAAW,SAAC5gG,GAC/Bm+H,aAAalhG,IAAMthC,IAAI,SAAS4iC,WAAW/lB,MAAM,CAAC,cAAe,qBAAsB,eACvF+pB,EAAS,IAAI0K,IAA+B,CAAC/wC,IAAK,eAAgB5I,MAAO,UACzE,MAA2BulV,YAAmBL,GAAtC15S,EAAR,EAAQA,QAAS/4B,EAAjB,EAAiBA,MACjB,GAAIA,EACF6Z,QAAQ7Z,MAAM,uBAAwBA,GACtCw8B,EAAS,IAAI0K,IAA+B,CAAE/wC,IAAK,eAAgB5I,MAAOyS,EAAMA,MAAQA,EAAMA,MAAQ,mBACtG+wC,EAAQ,UACH,CACL,IAAM4vU,EAA4C5nV,EAAQusL,KAAK91H,MAC/Dz+C,EAAQ4vU,OAIRnxR,EAAM97F,OAAS,EACjB++U,EAAIr6L,KAAKvrG,GAETkE,EAAQ,W,6BC7Ed,kgBAsBIQ,EAtBJ,+BAwBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAQIm8W,EAAmC,kBAAMl8U,YACpD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,0BAGnDirX,EAA0C,kBAAMn8U,YAC3D8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,iCAGnDkrX,EAAyB,kBAAMp8U,YAC1C8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,iBAAkBkU,sBAGrEi3W,EAA6B,kBAAMr8U,YAC9C8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,oBAAqBkU,sBAGxEk3W,EAA+B,kBAAMt8U,YAChD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,uBAAyB6O,oBAG5Ew8W,EAAwC,kBAAMv8U,YACzD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,mCAGnDsrX,EAAoC,wEAK3C,GAHmBC,EAFwB,EAE7CC,oBAF6C,OAKpC18U,YACTs8U,IACAC,KACF,SAACI,EAAoBpvL,GACnB,IAAMmvL,EAAuD,MAAjCD,EAAwCA,EAAgClvL,EACpG,OAAOovL,EAAmBzrX,IAAIwrX,KAAwB,IAAIn3J,KAAc33K,kBAS/Dg9E,EAAuB,kBAAM5qF,YACxC8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,kBAEnD0rX,EAAqB,kBAAM58U,YACtC8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,aAAe6O,oBAGlE88W,EAAgD,kBAAM78U,YACjE48U,IACAL,KACA,SAACO,EAAe1uV,GACd,IAAM2uV,EAAQD,EAAS5rX,IAAIk9B,IAAOhpB,iBAC9B43W,EAAe53W,iBACf63W,EAAc73W,iBAQlB,OAPA23W,EAAMljX,SAAQ,SAAC+zF,GAC6B,YAAtCA,EAAK18F,IAAI,yBACX8rX,EAAeA,EAAazjX,KAAKq0F,GAEjCqvR,EAAcA,EAAY1jX,KAAKq0F,MAG5BovR,EAAa9zX,KAAO8zX,EAAeC,MAwBjCC,EAA+B,kBAAMl9U,YALQA,YACxD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,iCAK9DorX,KACA,SAACa,EAAeR,GACd,OAAOQ,EAAchnX,KAAI,SAACinX,GACxB,OAAOT,EAAmBzrX,IAAIksX,UAUvBC,EAA2B,kBAAMr9U,YAC5C8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,sBA0BnDosX,EAAyC,kBAAMt9U,YAC1D8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,oCAEnDqsX,EAAwC,kBAAMv9U,YACzD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,mCAEnDssX,EAAqC,kBAAMx9U,YACtD8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,oC,6BCpMhE,8KAKYusX,EALZ,SAGazwU,EAAsB,W,SAEvBywU,K,gBAAAA,E,iBAAAA,E,sBAAAA,M,KAML,IAAMC,EAA+D,CAC1ErwX,KAAMswX,IAAkBC,SACxBp1Q,SAAU,KAICq1Q,EAAiC,oBACjCC,EAAgC,U,+QCKtC,SAASC,IACd,IAAMr0C,EAAM,IACNs0C,EAASt0C,EAAIs0C,QAAUt0C,EAAIu0C,SAE7BC,EAAgB,kBAA8B,GAAhBh0X,KAAKy1E,UACvC,IACE,GAAIq+S,GAAUA,EAAOG,WACnB,OAAOH,EAAOG,aAAap4S,QAAQ,KAAM,IAEvCi4S,GAAUA,EAAOI,kBACnBF,EAAgB,WAKd,IAAM/3Q,EAAa,IAAIw8C,WAAW,GAElC,OADAq7N,EAAOI,gBAAgBj4Q,GAChBA,EAAW,KAGtB,MAAOj7F,IAOT,OAAS,CAAC,KAA6B,IAAM,IAAM,IAAM,MAAM66D,QAAQ,UAAU,SAAA/yE,GAAE,OAE/EA,GAA8C,GAAlBkrX,MAA2BlrX,EAA0B,GAAK5E,SAAS,OAIrG,SAASiwX,EAAkB/pP,GACzB,OAAOA,EAAM4yN,WAAa5yN,EAAM4yN,UAAU5uV,OAASg8H,EAAM4yN,UAAU5uV,OAAO,QAAKrP,EAO1E,SAASq1X,EAAoBhqP,GAClC,IAAQ91F,EAA+B81F,EAA/B91F,QAAmB2oT,EAAY7yN,EAAtBmqE,SACjB,GAAIjgK,EACF,OAAOA,EAGT,IAAM+/U,EAAiBF,EAAkB/pP,GACzC,OAAIiqP,EACEA,EAAelxX,MAAQkxX,EAAe11X,MACxC,UAAQ,OAAR,aAAQ,SAEA,gCAEA,eAUA,kBACA,kCACA,wBACA,gBACA,UACA,eAEA,SACA,mBAWA,gBACA,WACA,MAIA,IACA,cAGA,GAFA,mDAFA,6BAEA,MAEA,eACA,oDACA,qBAqFA,cAEA,4BACA,SAGA,IAGA,wCACA,UAIA,SASA,cACA,gC,cCnOd,SAASg9G,EAAkB1rF,EAAQkd,GACjC,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CACrC,IAAI21G,EAAazuE,EAAMlnC,GACvB21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EACjD6wG,EAAW5wG,cAAe,EACtB,UAAW4wG,IAAYA,EAAW3wG,UAAW,GACjD5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAUlDz9G,EAAOC,QANP,SAAsBmyB,EAAasrF,EAAYC,GAG7C,OAFID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GACrDC,GAAaH,EAAkBprF,EAAaurF,GACzCvrF,GAITpyB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,ujBCiBlE20K,E,4JAEJ,WACE,MAQIrxX,KAAKkqC,MAPPonV,EADF,EACEA,QACA/gE,EAFF,EAEEA,cACAG,EAHF,EAGEA,cACApqR,EAJF,EAIEA,SACAirV,EALF,EAKEA,MACAC,EANF,EAMEA,cACA/gE,EAPF,EAOEA,gBAGIghE,EAAWhhE,EACb8gE,EAAMjmX,OAAOkmX,GACbD,EAEEG,EAAkC7yX,cAAcipG,YAAc4oN,IACpE,OACmB,MAAjBA,IACE4gE,GACKI,EAAiB5yW,UAAU2yW,GAAUlvW,UACtCmvW,EAAiB9tW,SAAS6tW,IAGX,MAAjBlhE,EACK,eAAC,WAAD,WACJA,IACAjqR,KAGE,cAAC,WAAD,UACJA,IAIE,sBAAKg1E,MAAO,CAAElgC,QAAS,QAAvB,mDAEgBs2S,EAAiB9uX,UAAU6e,KAAK,MAFhD,qBAGiC,IAApBgvS,EAHb,gBAISghE,EAAS7uX,UAAU6e,KAAK,a,GAxC1BgjB,aA6CZmI,EAAkBkG,YAAyB,CAC/Cy+U,MAAOpwU,eACPqwU,cAAersU,gBAGF8vB,oBACb4pC,kBAAQjyE,EAAiB,MADZqoC,CAEbo8S,G,sKCpEIjmH,EAAgBhiP,iBAAO,CAC3B+xF,WAAY,KAkBCw2Q,MAff,WAAsG,IAArF3qV,EAAoF,uDAAhCokO,EAAelgP,EAAiB,uCACnG,OAAQA,EAAOhrB,MACb,KAAK0xX,IAAuCC,gBAC1C,MAEI3mW,EADFgc,EADF,EACEA,QAEF,OAAOF,EAAMt/B,IAAI,aAAcw/B,GAEjC,KAAK0qV,IAAuCE,kBAC1C,OAAO9qV,EAAMt/B,IAAI,aAAckL,iBACjC,QACE,OAAOo0B,I,wKCxBPwoF,GAAYJ,cAAW,iBAAO,CAChC2C,MAAO,CACH9U,SAAU,WACVqX,IAAK,MACL/5G,KAAM,MACN8hH,UAAW,wBACX9gD,OAAQ,SACRD,MAAM,SACNQ,QAAS,YAkEFi2S,GAvD0B,SAAC,GAOnC,IANHxrD,EAME,EANFA,SACAyrD,EAKE,EALFA,KACAC,EAIE,EAJFA,MACAtnR,EAGE,EAHFA,KACAg6B,EAEE,EAFFA,QAEE,IADFimF,gBACE,MADS3yM,iBACT,EACIihE,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAA0C2yB,mBAAS,MAAnD,oBAAOwzU,EAAP,KAAsBC,EAAtB,KACA,OACI,cAACC,GAAA,EAAD,CACIznR,KAAMA,EACNg6B,QAASA,EAFb,SAII,eAAC9S,GAAA,EAAD,CAAOz4C,UAAWF,EAAQ64C,MAA1B,UACI,cAACvY,EAAA,EAAD,CAAYE,QAAQ,KAAKpgC,UAAU,KAAnC,SACKvtD,EAAE,0DAEP,cAACytF,EAAA,EAAD,CAAY8B,MAAO,CAAEgB,UAAW,OAAQ+W,aAAc,QAAtD,SACKtnG,EAAE,8CAEP,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAW,SAAU4hC,MAAO,CAAEiW,OAAQ,QAASlH,SAAU,OAAQhvC,SAAU,UAAtH,SACKuvI,EAAS5hN,KAAI,SAAC+kR,EAAS5xR,GAAW,IAAD,IAC9B,OACI,eAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMoB,GAAI,GAAgB0gC,MAAO,CAAEx/B,QAAS,mBAAoB8rC,aAAc,qBAA3G,UACI,cAAC/uC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACI,cAACy4S,GAAA,EAAD,CACIr2P,QAASk2P,IAAkB/1X,EAC3Bq/G,SAAU,kBAAM22Q,EAAiBh2X,IACjCT,MAAOS,MAGf,eAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAZ,UACI,cAAC4/B,EAAA,EAAD,CAAYlgC,UAAU,MAAMogC,QAAQ,YAApC,SAAiDq0K,EAAQhqR,IAAI,UAC7D,cAACy1G,EAAA,EAAD,CAAYE,QAAQ,UAApB,mBAAkC3tF,EAAE,8CAApC,iCAAsFgiQ,EAAQhqR,IAAI,uBAAlG,aAAsF,EAA6B0uE,UAAU,EAAG,WAAhI,QAAuI,GAAvI,YAVwCt2E,QAgB5D,cAACq9G,EAAA,EAAD,CAAY8B,MAAO,CAAEx/B,QAAS,UAA9B,SACK/vD,EAAE,kDAEP,sBAAKuvF,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,YAA/C,UACI,cAACipC,EAAA,EAAD,CAAQjL,QAAQ,OAAOzT,MAAM,UAAU4e,QAAS0hN,EAAhD,SAA2Dx6S,EAAE,4CAC7D,cAAC44F,EAAA,EAAD,CAAQjL,QAAQ,OAAOzT,MAAM,UAAU4e,QAASmtQ,EAAhD,SAAuDjmW,EAAE,wCACzD,cAAC44F,EAAA,EAAD,CAAQjL,QAAQ,OAAOzT,MAAM,UAAU4e,QAAS,kBAAMotQ,EAAMrnK,EAAS7mN,IAAImuX,KAAiBh1Q,SAA4B,OAAlBg1Q,EAApG,SAA6HnmW,EAAE,oE,oBC+C7IumW,G,4MACGtrV,MAAQ,CACburV,WAAY,EAAKroV,MAAMqoV,WACvBC,oBAAoB,G,EAqBfnwD,aAAe,gBAElBhmM,EAFkB,EAElBA,UACAz3F,EAHkB,EAGlBA,SAHkB,OASjB,SAACz5B,GACJ,MAGI,EAAK++B,MAFPS,EADF,EACEA,SACAwwE,EAFF,EAEEA,WAGAo3Q,EACE,EAAKvrV,MADPurV,WAIIE,EAAiC,MAAbp2P,EACxBA,EAAUlxH,GACVA,EAEIunX,EAAev3Q,EAAW1qG,MAAMgiX,GAStC,OAPmB,IAAfF,GACF5nV,EAAS,IAAIgoV,KAEfhoV,EAAS,IAAIioV,IAAoBF,IAClB,MAAZ9tV,GACDA,EAAS8tV,IAEJ,I,EAEFG,sBAAwBpuV,c,EACxBquV,4BAA8B,SAACC,GACpC,EAAKF,sBAAwB,CAAE/qV,QAASirV,I,EAqXlCC,WAAa,SAAC72X,GAAD,IAAgB82X,EAAhB,+DAA8C,WACjE,EAAKrwQ,SAAS,CACZ2vQ,WAAYU,EAAW92X,EAAS,EAAK6qC,MAAMurV,WAAap2X,M,EAIpD+2X,mCAAqC,SAAC/nX,GAE5C,IAAMipN,EAAajpN,EAAOpH,IAAI,cACxB8vU,EAAc57T,iBAAkCjH,eAAc,SAACmiX,GAEnE/+J,GAAcA,EAAW1nN,SAAQ,SAAC0mX,EAAwB9uX,GACxD,IAAM+uX,EAAmBzgX,gBAAmB5B,eAAc,SAACmiX,GACzD,OAAOA,EAAc1iX,MAAM,CACzB,GAAMnM,EACN,OAAU8uX,OAId,OAAOD,EAAc/mX,KAAKinX,SAI9B,OAAOloX,EAAO6F,eAAc,SAACywQ,GAC3BA,EAAI/5Q,IAAI,aAAcmsU,GAItB,IAAM/+G,EAAY3pN,EAAOpH,IAAI,aAC7B,GAAyB,kBAAd+wN,EACT,GAAkB,KAAdA,EACF2sD,EAAI/5Q,IAAI,YAAa,UAChB,CACL,IAAM4rX,EAAkB13U,SAASk5K,GAC5BnzN,OAAOy6C,MAAMk3U,IAChB7xG,EAAI/5Q,IAAI,YAAY4rX,Q,EAOtBC,2BAA6B,SAACpoX,GAEpC,IACE4iR,EACE,EAAK7jP,MADP6jP,QAGI/4D,EAAc7pN,EAAOpH,IAAI,eACzByvX,EAAkB,OAAGzlG,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,eAClC0vX,EAAmBx7W,OAAKF,OAAOy7W,IAChCA,GAAsBv7W,kBAAQ1M,QAAO,SAACmoX,GAAD,OAAgBA,EAAW3vX,IAAI,cAAYnB,WAChF4wX,GAA6B,IAAIjoX,QAAO,SAACmoX,GAAD,OAAgBA,EAAW3vX,IAAI,cAE5E,IAAqB,OAAhBixN,GAAwC,KAAhBA,IAAmD,IAA5By+J,EAAiB5xX,OACnE,OAAOsJ,EAAO+E,MAAM,CAAC,eAAgB,IAIvC,IAAMyjX,GAAsB3+J,GAAe,IAAI1pN,OAAOmoX,GACtD,OAAOtoX,EAAO+E,MAAM,CAAC,eAAgByjX,I,EAG/BC,gCAAkC,SAACzoX,GACzC,IACE2oN,EACE,EAAK5pL,MADP4pL,cAEI+/J,EAAyC1oX,EAAOpH,IAAI,eAyB1D,OAxB0B6O,gBAAmB5B,eAAc,SAAC8iX,GAC1D,GAAmB,MAAfD,EAAqB,CAEvB,IAAME,EAA+B97W,iBAA2BjH,eAAc,SAACgjX,GAC7EH,EAAYtoX,QAAO,SAAC0oX,GAClB,OAAyB,MAAlBA,KACNvnX,SAAQ,SAACunX,EAAgBC,GAC1B,IAAMC,EAAiBv4U,SAASs4U,EAAwB,IAClDE,EAAuBxhX,gBAAsB5B,eAAc,SAACqjX,GAChEJ,EAAevnX,SAAQ,SAAC4nX,GACtBD,EAAwB3sX,IAAI4sX,EAAY,SAItCC,EAAezgK,EAAc/vN,IAAIowX,GACnB,MAAhBI,GACFP,EAAoB5nX,KAAKmoX,EAAa7sX,IAAI,cAAe0sX,UAI/DN,EAAUpsX,IAAI,gBAAiBqsX,Q,EAO7BS,WAAa,SAACrpX,GACpB,MAMI,EAAK++B,MAJPgsE,GAFF,EACEu+Q,WADF,EAEEv+Q,WACAw+Q,EAHF,EAGEA,cACA7nU,EAJF,EAIEA,cACAyvQ,EALF,EAKEA,SAMIq4D,EAAexpX,EAAOpH,IAAI,gBAC1B6wX,EAAc,OAAGzpX,QAAH,IAAGA,OAAH,EAAGA,EAAQ6F,eAAc,SAACywQ,GAC5CA,EAAI/5Q,IAAI,UAAWm6Q,YAAS12Q,EAAOpH,IAAI,aACvC09Q,EAAIj5J,OAAO,oBACXi5J,EAAIj5J,OAAO,gBAEX,IAAM2tC,EAAOsrH,EAAI19Q,IAAI,QACjB09Q,EAAIx9Q,IAAI,SACVw9Q,EAAI/5Q,IAAI,OAAwB,kBAATyuJ,EAAqBA,EAAK33B,QAAU,KAAQ23B,MAGjE0+N,EAAgBH,EAAgBE,EAAeltX,IAAI,SAAU,QAAUktX,EAGvE1oG,EAAc2oG,GAAiBA,EAAc9wX,IAAI,QACjD+wX,EAAcJ,EAAgB,eAAiB,UAC/CpiB,EAAUuiB,GAAiBA,EAAcj0W,MAAM,CAAC,WAAY,UAAW,UACvEsxV,EAAW2iB,GAAiBA,EAAcj0W,MAAM,CAAC,WAAY,WAAY,UACzEuxV,EAAO0iB,GAAiBA,EAAcj0W,MAAM,CAAC,WAAY,OAAQ,UACjEm0M,EAAU8/J,GAAiBA,EAAc9wX,IAAI,WAAW+L,MAAM,EAAG,IACjEqmJ,EAAO0+N,GAAiBA,EAAc9wX,IAAI,QAC1C8vN,EAAkBghK,GAAiBA,EAAcj0W,MAAM,CAAC,WAAY,oBACpEm0W,EAAwBlhK,EAAgB7qN,KAAK,SAAA6O,GAAC,OAAIA,EAAE9T,IAAI,YAAU0d,OAClEuzV,EAAgBnhJ,EAAgBloN,QAAO,SAACutI,EAAK87O,GACjD,IAAMrlN,EAAQqlN,EAAcjxX,IAAI,iBAAiBiF,KAAI,SAACisX,GACpD,OAAOA,EAAalxX,IAAI,YAE1B,OAAOm1I,EAAI9sI,KAAKujK,GAAOjkK,QAAQ5O,OAC/Bmb,kBACIi9W,EAAsBlgB,EAAcvzV,OAExCglF,IAAmB9rE,kBAAgBw6V,eACnCtoU,EAAc,aACZq/N,cACA4oG,cACAxiB,UACAJ,WACAC,OACAp9I,UACA5+D,OACAi/N,qBAAqB,GAAD,OAAKvhK,EAAgB93N,MACzC83N,gBAAiBkhK,EACjBM,mBAAmB,GAAD,OAAKrgB,EAAcj5W,MACrCi5W,cAAekgB,GACZI,YAAsBzhK,GAAiBt1M,UAI9C+9S,EAAS,CACPnxT,SACA+qG,YACA2+Q,gBACAhC,sBAAuB,EAAKA,sBAC5B8B,kB,0DA3kBJ,WACE,IAAQhqV,EAAa3qC,KAAKkqC,MAAlBS,SACRA,EAAS,IAAIgoV,KACbhoV,EAAS,IAAImlE,KAA+B,CAAEyiR,WAAY,O,+BAG5D,WACE,MAIIvyX,KAAKkqC,MAHPS,EADF,EACEA,SACA4qV,EAFF,EAEEA,4BACAxnG,EAHF,EAGEA,QAEFpjP,EAAS,IAAIgoV,KACbhoV,EAAS,IAAI+oS,KACb/oS,EAAS,IAAIioV,IAAoB7kG,IACjCwnG,M,oBAyCF,WAAiB,IAAD,OACd,EAiBIv1X,KAAKkqC,MAhBPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAu7S,EAHF,EAGEA,WACA1mG,EAJF,EAIEA,QACAynG,EALF,EAKEA,SACAC,EANF,EAMEA,YACAf,EAPF,EAOEA,cAEA/pV,GATF,EAQE+qV,eARF,EASE/qV,UACAigL,EAVF,EAUEA,SACAvnK,EAXF,EAWEA,KACA83D,EAZF,EAYEA,WACAw6Q,EAbF,EAaEA,0BACAC,EAdF,EAcEA,oBACAC,EAfF,EAeEA,kBACAC,EAhBF,EAgBEA,gBAGYC,EACV/1X,KAAKgnC,MADPurV,WAEIA,EAAaiD,GAAuB,MAAXznG,GAC1B,EACDgoG,EAEEC,EAA0BvB,EAAWxwX,IAAImoW,IAAuC6pB,4BAChFC,EAAwBzB,EAAWxwX,IAAImoW,IAAuC+pB,yBAE9EC,GAD2B,OAAG3B,QAAH,IAAGA,OAAH,EAAGA,EAAYxwX,IAAImoW,IAAuCiqB,mCACrCb,EAEtD,OACE,sBACEp8S,UAAWF,EAAQ3hE,KADrB,UAGE,eAAC++W,EAAA,EAAD,CACE/D,WAAYA,EACZgE,YAAY,WAFd,UAIE,eAACC,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,uCAAD,OAAwC,QAEzG,cAAC2qW,EAAA,EAAD,UACE,cAAC79S,EAAA,EAAD,CACEW,WAAW,EADb,SAGE,cAACX,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,eAAC+7S,EAAA,EAAD,CACElC,WAAYA,EACZz5U,KAAM+yO,EACN6nG,oBAAqBA,EACrBC,kBAAmBA,EACnBv5D,SAAUt8T,KAAKqiU,aAAa,CAC1BhmM,UAAWr8H,KAAKkzX,mCAChBtuV,SAAU,SAACz5B,GACLk4C,IAAS5pB,WAAS8vB,KAAMisU,GAAarqX,EAAOpH,IAAI,WAIpD4mC,EAAS,IAAI2pE,KAAqB,CAChCtoE,QAAS,CACPy9E,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAGTsoF,QAAS,CACP9nF,IAAK,CACH,CACEilF,QAAS,CACPllF,GAAIr2B,EAAOpH,IAAI,eAKvBujU,UAAW,SAAC18G,GACNA,EAAS/oN,OAAS,EAEpB,EAAK+gH,SAAS,CACZ4vQ,oBAAoB,IAGtB,EAAKQ,WAAW,EAAhB,OA3BJ,EAAKA,WAAW,EAAhB,MATR,UA6CIoD,GACE,cAACzxQ,EAAA,EAAD,CACE1e,MAAM,UACN7sB,UAAWF,EAAQi0C,OACnBtI,QAASixQ,EAHX,SAKG/pW,EAAE,sBAIT,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJrB,SAMGphG,EAAE,sBAEL,cAAC4kS,EAAA,EAAD,CACEC,WAAY,EACZL,cAAe,WACb,OAAO,cAAC,WAAD,UACL,cAAC5rM,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,EAAKmuQ,WAAW,GACzB55S,UAAWF,EAAQi0C,OAJrB,SAMGphG,EAAE,sCArFV,GA+FX,eAACyqW,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,uCAAD,OAAwC,QAEzG,cAAC2qW,EAAA,EAAD,UACE,cAAC79S,EAAA,EAAD,CACEW,WAAW,EADb,SAGE,cAACX,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,eAACg8S,EAAA,EAAD,CACEt6D,SACEo4D,EACI10X,KAAKqiU,aAAa,CAChBhmM,UAAWr8H,KAAKuzX,2BAChB3uV,SAAU5kC,KAAKw0X,aAEjBx0X,KAAKqiU,aAAa,CAChBz9R,SAAU5kC,KAAKgzX,WAAW,KAGlCh4U,KAAM+yO,EACN0mG,WAAYA,EAZd,UAcE,eAAC57S,EAAA,EAAD,CACEO,UAAWF,EAAQ29S,QADrB,UAGE,cAAClyQ,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKgzX,YAAY,GAC1B55S,UAAWF,EAAQi0C,OAHrB,SAKGphG,EAAE,sBAGH2oW,EACI,cAAC/vQ,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OACnBjQ,UAAWu4Q,EALb,SAOG1pW,EAAE,wBAEL,cAAC44F,EAAA,EAAD,CACAjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJnB,SAMCphG,EAAE,yBAIX,cAAC4kS,EAAA,EAAD,CACEC,WAAY,EACZL,cAAe,WACb,OAAO,cAAC,WAAD,UACL,cAAC5rM,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,EAAKmuQ,WAAW,GACzB55S,UAAWF,EAAQi0C,OAJrB,SAMGphG,EAAE,sCAnEV,IA8ER2oW,GAAiBwB,GAAyB,eAACM,EAAA,EAAD,WACzC,cAACC,EAAA,EAAD,UACE,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,kDAAD,OAAmD,GAAK4pW,OAEzH,cAACe,EAAA,EAAD,UACE,cAAC79S,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAACk8S,GAAA,EAAD,CACIp5Q,UAAWvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OACpDk9F,WAAY3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OACtDm2W,UAAW57Q,EAAWp3G,IAAI,YAC1Bu4T,SAAUt8T,KAAKqiU,aAAa,CAC1Bz9R,SAAU5kC,KAAKgzX,WAAW,KAE5BF,4BAA6B9yX,KAAK8yX,4BAPtC,UASE,cAACnuQ,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAAS7kH,KAAKgzX,YAAY,GAC1B55S,UAAWF,EAAQi0C,OAHvB,SAKGphG,EAAE,sBAEL,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJvB,SAMGphG,EAAE,iCA7BuC,IAsCrD2oW,GACC,eAAC8B,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAGMl6E,EADFiqW,EACI,uCAAD,OAAwC,EAAxC,eACC,uCAAD,OAAwC,QAIjD,cAACU,EAAA,EAAD,UACE,cAAC79S,EAAA,EAAD,CACEW,WAAW,EADb,SAIIw8S,EACE,cAACgB,EAAA,EAAD,CACE16D,SAAUt8T,KAAKqiU,aAAa,CAC1BhmM,UAAWr8H,KAAKuzX,2BAChB3uV,SAAU5kC,KAAKw0X,aAEjByC,YAAalpG,EALf,SAOE,eAACl1M,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACE,cAAC0rC,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAAS7kH,KAAKgzX,YAAY,GAC1B55S,UAAWF,EAAQi0C,OAHvB,SAKGphG,EAAE,sBAEL,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLg9G,UAAWu4Q,EACXr8S,UAAWF,EAAQi0C,OALvB,SAOGphG,EAAE,wBAGH0pW,EACM,KACA,cAAC7zD,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQg+S,wBAIjE,eAACC,EAAA,EAAD,CACI76D,SAAUt8T,KAAKqiU,aAAa,CAC1BhmM,UAAWr8H,KAAK4zX,gCAChBhvV,SAAU5kC,KAAKw0X,aAEjByC,YAAalpG,EALjB,UAOE,eAACl1M,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACE,cAAC0rC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKgzX,YAAY,GAC1B91Q,UAAWu4Q,EACXr8S,UAAWF,EAAQi0C,OAJrB,SAMGphG,EAAE,sBAEL,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLg9G,UAAWu4Q,EACXr8S,UAAWF,EAAQi0C,OALrB,SAOGphG,EAAE,wBAGH0pW,EACM,KACA,cAAC7zD,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQg+S,sBAG/D,cAACvmE,EAAA,EAAD,CACEC,WAAY,EACZL,cAAe,WACb,OAAO,cAAC,WAAD,UACL,cAAC5rM,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,kBAAM,EAAK2vQ,cACpBp7S,UAAWF,EAAQi0C,OACnBjQ,UAAWu4Q,EALb,SAOG1pW,EAAE,sCAzFZ,MAqGfs3B,IAAS5pB,WAAS8vB,IAAMisU,EAAW,KAAO,cAAC,GAAD,CACxC7qR,KAAM3qG,KAAKgnC,MAAMwrV,mBACjB7tP,QAAS,kBAAM,EAAK/hB,SAAS,CAAE4vQ,oBAAoB,KACnDjsD,SAAU,kBAAM,EAAK3jN,SAAS,CAAE4vQ,oBAAoB,KACpDR,KAAM,WACJ,EAAKpvQ,SAAS,CACZ4vQ,oBAAoB,EACpBD,WAAY,KAGhBN,MAAO,SAAClkG,GAENpjP,EAASv+B,aAAK,GAAD,OAAIypB,2BAAJ,YAAgCk4P,EAAQhqR,IAAI,UAE3D6mN,SAAUA,W,GA5aoBnmL,aA+nB3BwwC,qBACbgG,aA1rBa,SAACC,GAAD,MAAmB,CAChC3jE,KAAM,CACJ+jE,MAAO,MACPC,OAAQ,UAEV4xC,OAAQ,CACN5xC,OAAQL,EAAMZ,WAEhBu8S,QAAU,CACRv6Q,UAA6B,EAAlBphC,EAAMZ,WAEnB88S,eAAgB,CACdt7S,QAA2B,EAAlBZ,EAAMZ,WAEjB48S,iBAAkB,CAChBhvQ,WAAYhtC,EAAMZ,QAAQ,KAC1BgB,MAAM,cAAD,OAAgBJ,EAAM82C,WAAW7E,OAAOhG,SAAxC,gBACLoK,OAAO,cAAD,OAAgBr2C,EAAM82C,WAAW7E,OAAOhG,SAAxC,oBAyqBW,CAAE6H,WAAW,IAChC8wJ,YAAc,CAAEx7Q,IAAKu7C,IAAqB39B,YAC1C28F,mBA7CsB,SAAC73E,EAAYkD,GACnC,IAAMsrV,EAAWtrV,EAAMuqV,WAAWxwX,IAAImoW,IAAuCirB,gBAEvEtpG,EAAUynG,EAAWtrV,EAAM6jP,aAAUjyR,EAE3C,OAAO,2BACFg3C,YAAyB,CAC1B4iV,eAAgBn4K,YAAsB,YACtCpiG,WAAYm8Q,cACZxjK,cAAeh8E,cACfhC,aAAcJ,cACd68O,WAAYtoK,cACZwrK,YAAappK,cACbzB,SAAUG,cACV1nK,KAAMF,cACNwyU,0BAA2B/qU,eAT1B9X,CAUA9L,IAXL,IAYE+mP,UACAynG,gBAGuB,SAAC7qV,GAC1B,MAAO,CACL4qV,4BAA6B,WAC3B5qV,EAAS,IAAI0gE,KAAkC,CAAEksR,OAAO,MAE1D5sV,eAIe,SAACmC,EAAYC,EAAeN,GAE7C,IAAMshP,EAAUjhP,EAAWquE,WAAW/lG,QAAU03B,EAAWquE,WAAaruE,EAAWihP,QAEnF,OAAO,mDACFjhP,GACAC,GACAN,GAHL,IAIEshP,eAQF5uO,YAAgB,gBAChBgwE,IACAxF,cANa10C,CAObq9S,I,oMC1tBWkF,GAAoB,mBAE3BvuB,GAAc,CAAE9hP,SAAU,SAmB1BswQ,G,4MACGzwV,MAAQ,CACb0wV,gBAAgB,EAChBC,eAAe,EACfC,SAAU,GACVC,YAAa,GACb/6O,cAAe,GACf1f,WAAY,I,EAmBP06P,sBAAwB,WAC7B,IACEC,EACE,EAAK7tV,MADP6tV,mBAIEC,GAAoB,EACpBC,GAAmB,EACnBC,EAActlX,gBACdulX,EAAiBvlX,gBAErBmlX,EAAmBrrX,SAAQ,SAAC0rX,GAC1B,IAAM//J,EAAwB+/J,EAAkBr0X,IAAI,yBACtB,YAA1Bs0N,EACF2/J,GAAoB,EACe,WAA1B3/J,IACT4/J,GAAmB,GAGrB,IAAM9+P,EAAQi/P,EAAkBr0X,IAAI,SAC9BqzH,EAAWghQ,EAAkBr0X,IAAI,gBACnCm0X,EAAYj0X,IAAIk1H,GACb++P,EAAYn0X,IAAIo1H,GAAOl1H,IAAImzH,KAC9B8gQ,EAAcA,EAAYxwX,IAAIyxH,EAAO++P,EAAYn0X,IAAIo1H,GAAOx6G,IAAIy4G,KAGlE8gQ,EAAcA,EAAYxwX,IAAIyxH,EAAOt6H,cAAI,CAACu4H,KAExC+gQ,EAAel0X,IAAImzH,GAChB+gQ,EAAep0X,IAAIqzH,GAAUnzH,IAAIk1H,KACpCg/P,EAAiBA,EAAezwX,IAAI0vH,EAAU+gQ,EAAep0X,IAAIqzH,GAAUz4G,IAAIw6G,KAGjFg/P,EAAiBA,EAAezwX,IAAI0vH,EAAUv4H,cAAI,CAACs6H,QAIvD++P,EAAcA,EAAYlvX,KAAI,SAACtB,GAAD,OAASA,EAAI+E,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEyzC,cAAcmuL,cAAc3hO,EAAEwzC,qBAC1F++U,EAAiBA,EAAenvX,KAAI,SAACtB,GAAD,OAASA,EAAI+E,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEyzC,cAAcmuL,cAAc3hO,EAAEwzC,qBAEhG,IAAMi/U,EAAmBH,EAAYr5W,SAASpS,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEyzC,cAAcmuL,cAAc3hO,EAAEwzC,kBACvFk/U,EAAgBH,EAAet5W,SAASpS,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAEyzC,cAAcmuL,cAAc3hO,EAAEwzC,kBAE7F,EAAKwpE,SAAS,CACZ80Q,eAAgBM,EAChBL,cAAeM,EACfL,SAAUM,EAAY35W,OACtBs5W,YAAaM,EAAe55W,OAC5Bu+H,cAAeu7O,EAAiB95W,OAChC6+G,WAAYk7P,EAAc/5W,U,EAIvBy1V,gBAAkB,WACvB,MAGI,EAAK9pU,MAFPS,EADF,EACEA,SACAspU,EAFF,EAEEA,aAGFtpU,EAASggC,aAAM6sT,KACfvjB,EAAalmV,KAAK+xB,Q,uDA5EpB,WAAkC,IAAD,GAC/B,UAAI9/C,KAAKkqC,MAAM6tV,0BAAf,aAAI,EAA+Bh8X,OACjCiE,KAAK83X,0B,gCAIT,SAA0Bz5Q,EAAW4yJ,GACnC,IACE8mH,EACE/3X,KAAKkqC,MADP6tV,oBAGoB,OAAlBA,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBh8X,QAASg8X,EAAmB3yX,OAAOi5G,EAAU05Q,qBACnE/3X,KAAK83X,0B,oBAmET,WACE,MAQI93X,KAAKkqC,MAPPgvC,EADF,EACEA,QADF,IAEEiiC,kBAFF,MAEevoG,gBAFf,EAGE+xH,EAHF,EAGEA,QACA2wO,EAJF,EAIEA,UACAniP,EALF,EAKEA,SACAztE,EANF,EAMEA,OACA35B,EAPF,EAOEA,EAEF,EAOI/rB,KAAKgnC,MANP0wV,EADF,EACEA,eACAC,EAFF,EAEEA,cACA76O,EAHF,EAGEA,cACA1f,EAJF,EAIEA,WACAw6P,EALF,EAKEA,SACAC,EANF,EAMEA,YAGI1+P,EAAQhe,EAAWp3G,IAAI,SACvBqzH,EAAWjc,EAAWp3G,IAAI,YAC1Bw0X,EAAUnhQ,EAAWygQ,EAAYzgQ,GAAY0lB,EAC7C07O,EAAcr/P,EAAQy+P,EAASz+P,GAASiE,EAExCq7P,EAA+B/yU,EAAO9kC,MAAM,CAAC,cAAe,iCAAiC,GAEnG,OACE,cAACsyG,GAAA,EAAD,CACEvoB,KAAMttG,QAAQ81H,GACdA,SAAUA,EACVulQ,eAAe,EACfvuQ,UAAU,OAJZ,SAME,cAAC62M,GAAA,EAAD,CAAmBC,YAAat8L,EAAhC,SACE,cAAC9S,GAAA,EAAD,CAAOZ,UAAW,EAAG3V,MAAO,CAAEhgC,MAAOq9S,IAArC,SACE,uBAEEv/S,UAAWF,EAAQzC,KAFrB,UAKE,eAACoC,EAAA,EAAD,CACEO,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC2uG,GAAA,EAAD,CACE7V,QAAS8f,EADX,SAGE,cAAC,KAAD,YAMN,eAAC9rD,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAME,cAAC69D,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iDAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ8iF,IALrB,UAOE,cAACnjF,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,SAAD,CACEpsE,KAAK,gCACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,iDACTk6E,MAAOwyR,EAA+B,YAAc,UACpD5rQ,YAAY,EACZnT,QAAS,SACTwD,UAAWw6Q,OAIjB,cAAC7+S,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,SAAD,CACEpsE,KAAK,+BACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,gDACTk6E,MAAOwyR,EAA+B,YAAc,UACpD5rQ,YAAY,EACZnT,QAAS,SACTwD,UAAWy6Q,UAOnB,cAACn+Q,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+CAEL,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ8iF,IAHrB,SAKE,cAAC,SAAD,CACExtJ,KAAK,QACL8qE,UAAWi/O,KACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASusV,EACTvtQ,YAAaj/F,EAAE,mDACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,GAAkB,MAC5Cg4M,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,MAEjDkuQ,qBAAsB,CACpBpzQ,MAAO2tP,IAETrvP,iBAAkB,CAChBC,WAAW,QAOnB,cAACL,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,2CAEL,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ8iF,IAHrB,SAKE,cAAC,SAAD,CACExtJ,KAAK,WACL8qE,UAAWi/O,KACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASwsV,EACTxtQ,YAAaj/F,EAAE,+CACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,GAAkB,MAC5Cg4M,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,MAEjDkuQ,qBAAsB,CACpBpzQ,MAAO2tP,IAETrvP,iBAAkB,CAChBC,WAAW,aAnJhBy7P,a,GA7HY7wU,aA+RzBk0V,GAAmB,IA0CV1jT,qBACbgG,cA1Ca,SAACC,GAAD,MAA+B,CAC5CwuD,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7Bi3C,OAAQ,OACRj1C,SAAS,GAAD,OAAKq8S,GAAL,OAEV38N,IAAK,CACHlgF,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B3+B,QAAS,CACP41E,OAAO,oBACPg2L,UAAW,OACXt9K,UAAW,UAEb/T,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCtpM,QAASZ,EAAMZ,QAAQ,EAAG,QAuB5BukC,mBAnBsB,SAAC73E,EAAOyF,GAC9B,OAAO,aACLgxE,KAAM+5Q,IACH1kV,YAAyB,CAC1BqoE,WAAYC,yBAAco8Q,IAC1BoB,gBAAiB75B,eACjBr5S,OAAQF,eAHP1S,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAOF48R,qBAAU,CACR9pN,KAAM+5Q,GACNhwD,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUbwiT,ICtTIoB,G,4MAEGluT,MAAQ,WACb,MAGI,EAAKzgC,MAFPS,EADF,EACEA,SACAmuV,EAFF,EAEEA,WAMFnuV,EAAS,IAAI63L,MAEb73L,EAAS,IAAI64L,KAAoB,CAAEhmG,WAAY,MAC/Cs7P,EAAW,I,EAGNC,eAAiB,WACtB,IACEpuV,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAIy2L,KAAmC,CAAE43J,0BAA2B,MAC7EruV,EAAS,IAAIi1B,KAA4B,CAAEq5T,oBAAqB,KAChEtuV,EAASu/B,aAAOgvT,KAA4B,wBAAyB,OACrEvuV,EAASu/B,aAAOgvT,KAA4B,oBAAqB,Q,EAG5DC,UAAY,WACjB,EAAKxuT,QACL,EAAKouT,iBACL,EAAK7uV,MAAMS,SAASggC,aAAM6sT,M,EAGrB4B,aAAe,WACpB,MAKI,EAAKlvV,MAJPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAg7B,EAHF,EAGEA,MACArB,EAJF,EAIEA,OAGI2zU,EAAUtyU,IAAU/oB,gBACpBs7V,EAAsC5zU,EAAO9kC,MAAM,CAAC,cAAe,wCAAwC,GACjH,OACE,cAAC24W,GAAA,EAAD,UACE,eAAC1gT,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAAC,KAAD,CAAaysB,MAAOqzR,EAAsC,YAAc,UAAWlgT,UAAWF,EAAQ04C,OACtG,cAACpY,EAAA,EAAD,CAAYvT,MAAOqzR,EAAsC,YAAc,UAAvE,SACavtW,EAAVstW,EAAY,wCAA6C,8C,4CAOpE,WAAiB,IAAD,EACd,EAYIr5X,KAAKkqC,MAXPgvC,EADF,EACEA,QACAsgT,EAFF,EAEEA,SACAC,EAHF,EAGEA,0BACAX,EAJF,EAIEA,WACA/sW,EALF,EAKEA,EALF,IAMEwqW,mBANF,MAMgB,WANhB,EAOEmD,EAPF,EAOEA,mBACA/sU,EARF,EAQEA,YACAC,EATF,EASEA,eACA7F,EAVF,EAUEA,MACArB,EAXF,EAWEA,OAGI2zU,EAAUtyU,IAAU/oB,gBACpB27V,EAA8BF,EAA0B11X,IAAI,MAC5D61X,EAA+BJ,EAASz1X,IAAI41X,GAC5CE,EAAejtU,GAAkBD,GAAe,GAChDmtU,EAA8Bp0U,EAAO9kC,MAAM,CAAC,cAAe,gCAE3Dm5W,EAAoBH,EACxB,cAAC/gT,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAW6tC,MAAU,oBAClB/tC,EAAQ8gT,UAAW,GADD,eAElB9gT,EAAQ+gT,KAAuB,eAAhB1D,GAFG,IAFvB,mBAOOqD,EAA6B79X,KAPpC,YAOkF,IAAtC69X,EAA6B79X,KAAagwB,EAAE,qCAAuCA,EAAE,sCAPjI,YAO0K0tW,EAA0B11X,IAAI,sBAG1M,KAEF,OACE,eAAC80E,EAAA,EAAD,CACEO,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SAHZ,UAMoB,eAAhB68S,GACE,eAAC/8Q,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ+gT,KAA5C,gBACMluW,EAAE,gCAIZ,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ8gT,SAA/C,SACGjuW,EAAE,yCAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SACXG,UAAWF,EAAQghT,oBALrB,UAOIH,EACA/5X,KAAKo5X,eACP,eAACvgT,EAAA,EAAD,WACE,cAAC8rC,EAAA,EAAD,CACEE,QAAS,kBAAMi0Q,EAAW,IAC1B1/S,UAAWF,EAAQi0C,OACnBlnB,MAAM,UAHR,SAKGl6E,EAAE,sBAEL,cAAC44F,EAAA,EAAD,CACEE,QAAS7kH,KAAKm5X,UACdlzR,MAAM,UAFR,SAIGl6E,EAAE,6BAKyB,MAAhC6tW,EACE,cAACO,GAAA,EAAD,CACET,mBAAoBA,EACpBF,SAAUI,EACVjtU,YAAaktU,IAEf,cAAC,KAAD,CAAezyR,SAAS,EAAM0yR,4BAA6BA,EAA3D,SACa/tW,EAAVstW,EAAY,gCAAqC,uC,GA5IP50V,aAwL1CwwC,qBACbgG,aArCa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAENyiX,SAAU,CACR/zR,MAAO,uBAETi0R,oBAAqB,CACnB7mQ,aAAcn4C,EAAMZ,QAAQ,MAE9B2/S,KAAM,CACJ19P,WAAY,QAEd3K,KAAM,CACJpQ,YAAatmC,EAAMZ,eAyBrBn7B,YAAgB,gBAChB0/D,mBAtBsB,SAACu7Q,EAAoBC,GAC3C,OAAO,eACFvnV,YAAyB,CAC1B0mV,SAAU/J,eACVgK,0BAA2BpK,eAC3B1iU,YAAaivF,eACbhvF,eAAgBkvF,eAChB/0F,MAAOD,cACPpB,OAAQF,eANP1S,CAOAsnV,OAIoB,SAACzvV,GAC1B,MAAO,CACLA,eAIWsqC,CAIb4jT,I,kPC/PIrpQ,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvCo/S,UAAW,CACTj1Q,OAAQ,WAEVk1Q,cAAe,CACbj/S,MAAO,KAETk/S,aAAc,CACZ/jQ,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhB3H,IAAK,CACH1yC,MAAO,QACPi2C,OAAQ,aAIZ,SAASkpQ,GAAsBvwV,GAAQ,IAAD,IAElCkuV,EAGEluV,EAHFkuV,kBACAsB,EAEExvV,EAFFwvV,mBACAgB,EACExwV,EADFwwV,mBAGI/vV,EAAW2F,wBACX4oC,EAAUs2C,KACVt0C,EAAQwjD,eACR7xE,EAAgBkgK,cAChBr7F,EAAchgF,sBAAY2Y,eAE1BswU,EAAqC,iBAAGjpQ,QAAH,IAAGA,OAAH,EAAGA,EAAa3tH,IAAI,uCAApB,QAAuD22X,EAC5FE,EAAsB,OAAGlpQ,QAAH,IAAGA,OAAH,EAAGA,EAAa3tH,IAAI,0BAC1C82X,EAAkB,OAAGnpQ,QAAH,IAAGA,OAAH,EAAGA,EAAa3tH,IAAI,sBACtC+2X,EAAqC,iBAAGppQ,QAAH,IAAGA,OAAH,EAAGA,EAAa3tH,IAAI,gDAApB,SAErCs0N,EAAwB+/J,EAAkBr0X,IAAI,yBAC9C6qH,EAAgC,YAA1BypG,EAAsC2hD,KAA0C,YAA1B3hD,EAAsCogD,KAAgBwB,KAElH8gH,EAAiB3C,EAAkBr0X,IAAI,aAAeq0X,EACzDr0X,IAAI,YACJ4H,QAAO,SAACutI,EAAKliB,GAAN,OAAkBkiB,EAAI9sI,KAAK4qH,EAAQjzH,IAAI,oBAAmBkU,kBACjEwJ,KAAK,MACFu5W,EAAkD,YAA1B3iK,EAC1B,cAACpuG,GAAA,EAAD,CAASC,MAAO6wQ,EAAgB3hT,UAAWF,EAAQshT,aAAnD,SACE,cAAChhR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACI80R,MAGN,KAmDJ,OACE,cAACliT,EAAA,EAAD,CACEe,MAAM,EACNI,GAAI,EACJE,GAAI,EACJE,GAAI,GACJQ,GAAI,GALN,SAOE,cAACosC,GAAA,EAAD,UACE,eAACnuC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLF,QAAS,EAJX,UAME,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXP,WAAW,SACX2B,GAAI,EAJN,SAOI8+S,EACE,cAAC9yQ,GAAA,EAAD,CACEJ,IAAKkzQ,EACLp+S,MAAM,OACNurC,YAAa,OACbC,aAAa,EACb2kP,gBAAiB,CAAChkP,aAAc,MAAOikP,eAAgB,WAEzD,cAAC7yR,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ80C,IAJrB,SAME,cAACY,EAAD,CACEtzC,MAAM,KACNi2C,OAAO,KACPtrB,MAAO,CACL+e,gBAAiB41Q,IAA2BD,EAA+Bz/S,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,MAChI8I,YAAa4sQ,IAAuBF,EAA+Bz/S,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,OAE1H5pC,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,EAAG,EAAG,EAAG,UAKhD,eAACzB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVT,WAAW,aACXa,QAAQ,SACRQ,QAAS,EACTM,GAAI,EAPN,UASE,cAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQqhT,cAArC,SACE,cAACjtQ,GAAA,EAAD,CACEl0C,UAAWF,EAAQohT,UACnBvrD,UAAU,OACV9oO,MAAO60R,EAAwC,YAAc,UAC7Dj2Q,QAAS,YA5GC,SAACo2Q,EAAuCC,GAAoC,IAAD,QAC3F3L,EAAmB,UAAG0L,EAAmBl3X,IAAI,aAA1B,QAAmC,KACtDm1H,EAAa,UAAGk/P,EAAkBr0X,IAAI,wBAAzB,QAA6C,KAC1Do1H,EAAK,UAAGi/P,EAAkBr0X,IAAI,gBAAzB,QAAqC,KAC1C68B,EAAY,UAAGw3V,EAAkBr0X,IAAI,uBAAzB,QAA4C,KAE9D0iG,IAAmB9rE,kBAAgBwgW,8BAA+BtuU,EAAc,CAC9E2wE,WAAYtE,EACZkiQ,SAAU7L,EACVp2P,QACAv4F,kBAGF,IAAMg9R,EAAa,CACjB2xD,sBACAr2P,gBACAC,QACAv4F,eACAy3L,sBAAuB6iK,GAEnBG,EAAe,CACnB9qL,UAAW31K,YAAU0gW,gCACrBvvU,YAAac,IACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,kBAGF1wV,EAAS,IAAIm5L,KAAyB,CACpCs0J,kBAAmB6C,EACnB5iK,sBAAuB6iK,EACvBlvV,QAAS,CACPisJ,QAAS,CACPsjM,eAAgB,EAChBt6V,GAAI,OAIV0J,EAAS,IAAI+3L,KAA+Bu4J,EAAmBl3X,IAAI,QACnE4mC,EAAS,IAAI8J,KAAiC,CAC5CxT,GAAIu6V,KACJ7/U,QAAS,KAmEG8/U,CACErD,EACA//J,IAPN,SAWE,cAACpuG,GAAA,EAAD,CAASC,MAAOkuQ,EAAkBr0X,IAAI,kBAAoB,KAA1D,SACE,cAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQshT,aAA/D,SACGpC,EAAkBr0X,IAAI,yBAK/B,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQqhT,cAArC,UACE,cAACtwQ,GAAA,EAAD,CAASC,MAAOkuQ,EAAkBr0X,IAAI,UAAY,KAAlD,SACE,cAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQshT,aAA/D,SACGpC,EAAkBr0X,IAAI,aAG3B,cAACkmH,GAAA,EAAD,CAASC,MAAOkuQ,EAAkBr0X,IAAI,iBAAmB,KAAMq1E,UAAWF,EAAQshT,aAAlF,SACE,cAAChhR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGmyR,EAAkBr0X,IAAI,oBAGzBi3X,eASDv2V,WAAM4G,KAAKovV,IC5FpBiB,GAAwB,CAC5BhxQ,kBAAmB,SAAAlK,GAAM,OACvB,cAAC,KAAD,CACElF,MAAO,CACLrV,MAAO,2BAmCT01R,G,4MAEG30V,MAAQ,CACbmsF,SAAU,KACVyoQ,YAAY,EACZC,eAAgB,KAChBvmB,UAAW,GACXwmB,2BAA4B7jX,kB,EAqCvB8jX,yBAA2B,SAACC,GACjC,MAKI,EAAK9xV,MAJP6tV,EADF,EACEA,mBACAkE,EAFF,EAEEA,iBACApvU,EAHF,EAGEA,cACAliB,EAJF,EAIEA,SAEF,UAAIsxV,QAAJ,IAAIA,OAAJ,EAAIA,EAAkBlgY,KAAM,CAAC,IAAD,EACpByhI,GAAa,UAAAy+P,EAAiBl4X,IAAI,uBAArB,eAAsCq1C,gBAAiB,GACpE8iV,EAAU7+X,QAAQ4+X,EAAiBl4X,IAAI,oCAAsC1G,QAAQ4+X,EAAiBl4X,IAAI,iCAC1Go4X,EAAcF,EAAiBl4X,IAAI,SACnCq4X,EAAiBH,EAAiBl4X,IAAI,YACtCs4X,IAA+BJ,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiB0yM,cAClFyvJ,IAA4BL,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiBoiW,WAC/EC,IAAyBP,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiBz+B,QAC5E+gY,IAA0BR,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiB4nR,SAC7E26E,IAAgCT,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiBwiW,eACnFC,IAA8BX,EAAiBl4X,IAAjB,oBAAkCo2B,mBAAiB0iW,aAEjFC,GAAiBT,IAA+BC,IAA4BE,IAAyBC,IAA0BC,IAAgCE,EAE/Jd,EAA6B/D,EAAmBxsX,QAAO,SAACyrH,GAC5D,IAAMusP,EAAevsP,EAAQjzH,IAAI,SAC3Bi8H,EAAkBhJ,EAAQjzH,IAAI,gBAC9Bw0N,EAAavhG,EAAQjzH,IAAI,cAG/B,SAFsBizH,EAAQjzH,IAAI,iBAAiBq1C,cAEjC7vC,SAASi0H,KACrB0+P,IAAWD,EAAiBl4X,IAAjB,gCAA8CizH,EAAQjzH,IAAI,4BAClEo4X,GAAeA,IAAgB5Y,GAC7B6Y,GAAkBA,IAAmBp8P,IACpC88P,IAAiBvkK,EAAW9qN,MAAK,SAACsvX,GAAD,OAAed,EAAiBl4X,IAAjB,oBAAkCg5X,EAAUh5X,IAAI,iBAY9G,GAFA,EAAKi5X,8BAA8BlB,GAE/BE,EAAW,CAAC,IAAD,EACPp+D,EAAa,CACjBpgM,aACA2+P,YAAW,OAAEA,QAAF,IAAEA,IAAe,KAC5BC,eAAc,OAAEA,QAAF,IAAEA,IAAkB,KAClCa,4BAA6Bf,EAAU,MAASD,EAAiBl4X,IAAI,iCAAmC,UAAY,SACpHm5X,aAAY,iBAAEpB,QAAF,IAAEA,OAAF,EAAEA,EAA4B//X,YAA9B,QAAsC,GAE9Cs/X,EAAe,CACnB9qL,UAAW31K,YAAUuiW,6BACrBpxU,YAAac,IACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,wBAIJ,EAAK2B,8BAA8BjF,I,EAMhCiF,8BAAgC,SAAClB,GACtC,EAAKl5Q,SAAS,CAAEk5Q,gC,EAGXsB,gBAAkB,SAACC,GACxB,EAAKnzV,MAAMS,SAASu/B,aAAOstT,GAAmB,eAAgB6F,GAAgB,M,EAKzE1yT,MAAQ,WACb,IACEhgC,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI63L,MAEb73L,EAAS,IAAI64L,KAAoB,CAAEhmG,WAAY,MAE/C,EAAK8/P,e,EAGAvE,eAAiB,WACtB,IACEpuV,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAIy2L,KAAmC,CAAE43J,0BAA2B,MAC7EruV,EAAS,IAAIi1B,KAA4B,CAAEq5T,oBAAqB,KAChEtuV,EAASu/B,aAAOgvT,KAA4B,wBAAyB,OACrEvuV,EAASu/B,aAAOgvT,KAA4B,oBAAqB,Q,EAG5DqE,gBAAkB,YAKvB5yV,EAFI,EAAKT,MADPS,UAGO,IAAI64L,KAAoB,CAAEhmG,WAAY,O,EAG1C8/P,YAAc,YAInB3yV,EADI,EAAKT,MADPS,UAEOggC,aAAM6sT,KACf,EAAK50Q,SAAS,CAAE0yP,UAAWvnV,KAAK+xB,S,EAG3B09U,0BAA4B,WACjC,MAII,EAAKtzV,MAHPu4E,EADF,EACEA,WACAi3Q,EAFF,EAEEA,mBACA3yU,EAHF,EAGEA,MAGA+0U,EACE,EAAK90V,MADP80V,2BAGI7+O,EAAe,EAAKwgP,0BAepB/C,EAdyB,CAC7B1+V,eACAe,gBACAH,yBACAY,4BACAL,mBACAU,eACAC,iBACAC,cACAE,oBACAC,cACAG,kBACAQ,mBAEgDt1B,SAASw9C,GAE3D,GAAI+0U,EAA2B//X,OAAS0mH,GAAcw6B,GACpD,OAAO6+O,EAA2B9yX,KAAI,SAAC4K,EAAQzX,GAC7C,OACE,cAAC,GAAD,CAEEi8X,kBAAmBxkX,EACnB8mX,mBAAoBA,EACpBhB,mBAAoBA,GAHfv9X,O,EAURuhY,yBAAqC,WAAO,IAAD,MAChD,EAYI,EAAKxzV,MAXPyzV,EADF,EACEA,6BACAzkT,EAFF,EAEEA,QACAupC,EAHF,EAGEA,WACAw2Q,EAJF,EAIEA,mBACAD,EALF,EAKEA,0BACAjtW,EANF,EAMEA,EACAwqW,EAPF,EAOEA,YACAwB,EARF,EAQEA,mBACAkE,EATF,EASEA,iBACAl1U,EAVF,EAUEA,MACArB,EAXF,EAWEA,OAGAo2U,EACE,EAAK90V,MADP80V,2BAGIuB,EAAY,OAAGpB,QAAH,IAAGA,OAAH,EAAGA,EAAkBl4X,IAAI,gBACrC65X,GAAiD,OAA1B9B,QAA0B,IAA1BA,OAAA,EAAAA,EAA4B//X,OAAQ,EAC3Ds9X,EAAUtyU,IAAU/oB,gBACpB87V,EAA8Bp0U,EAAO9kC,MAAM,CAAC,cAAe,gCAC3Di9W,EAAiCn4U,EAAO9kC,MAAM,CAAC,cAAe,mCAEpE,GAAI+8W,EACF,OACE,cAAC,KAAD,CAAev2R,QAASu2R,EAA8B7D,4BAA6BA,EAAnF,SACa/tW,EAAVstW,EAAY,gCAAqC,gCAKxD,IAAoB,KAAf52Q,IAA+B,OAAVA,QAAU,IAAVA,OAAA,EAAAA,EAAY5gH,QAASi3B,8BAA6D,KAA9BkgW,KAAuCC,IAA8C,IAAxBA,GACzI,OAAO,KAGT,IAAM6E,EAAsB,kBAC1B,cAACjlT,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJ3B,WAAW,SACXqB,QAAS,EALX,SAOE,cAACk/B,EAAA,EAAD,CACEE,QAAQ,UADV,SAGa3tF,EAAVstW,EAAY,8BAAmC,iCAKhD0E,EAAW,UAAG,EAAK7zV,MAAM+xV,wBAAd,aAAG,EAA6BjzX,KAAI,SAACtN,EAAO4I,GAC3D,GAAI5I,EAAO,CACT,IAAIolC,EAAQ,GACZ,OAAQx8B,GACN,IAAK,eACHw8B,EAAQplC,EACR,MACF,IAAK,QACHolC,EAAQ/U,EAAE,+CAAgD,CAAErwB,UAC5D,MACF,IAAK,WACHolC,EAAQ/U,EAAE,2CAA4C,CAAErwB,UACxD,MACF,IAAK,gCACHolC,EAAQ/U,EAAE,iDAAkD,CAAErwB,MAAOqwB,EAAE,mDACvE,MACF,IAAK,+BACH+U,EAAQ/U,EAAE,iDAAkD,CAAErwB,MAAOqwB,EAAE,kDACvE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiB0yM,aACjC/rM,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,qCAClE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiBoiW,UACjCz7V,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,kCAClE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiBz+B,OACjColC,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,+BAClE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiB4nR,QACjCjhR,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,gCAClE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiBwiW,cACjC77V,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,sCAClE,MACF,IAAI,aAAJ,OAAkBoO,mBAAiB0iW,YACjC/7V,EAAQ/U,EAAE,4CAA6C,CAAErwB,MAAOqwB,EAAE,oCAItE,OACE,cAACg6S,GAAA,EAAD,CAEEjlS,MAAOA,EACPolS,SAAU,kBAAM,EAAKh8R,MAAMS,SAASu/B,aAAOstT,GAAmBlzX,EAAK,MACnE80E,UAAWF,EAAQ8kT,YAHd15X,OAOVsE,WAEH,OACE,mCAEImvX,GAAkD,IAA5BA,EAAmBh8X,KACvC,cAAC+hY,EAAD,IAEA,qCACE,cAACnnQ,GAAA,EAAD,CAASv9C,UAAWF,EAAQq2R,UAC5B,eAAC12R,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAAC8/B,EAAA,EAAD,CACEE,QAAyB,eAAhB68Q,EAA+B,KAAO,QAC/Cn9S,UAAW6tC,MAAU,oBACpB/tC,EAAQ8gT,UAAW,GADC,eAEpB9gT,EAAQ+gT,KAAuB,eAAhB1D,GAFK,IAFvB,SAOGxqW,EAAE,4CAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLpB,UAAWF,EAAQ+kT,YANrB,UAQE,cAACzkR,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAW6tC,MAAU,oBAClB/tC,EAAQ8gT,UAAW,GADD,eAElB9gT,EAAQ+gT,KAAuB,eAAhB1D,GAFG,IAFvB,SAOgCxqW,EAAJ,IAAzB6xW,EAA+B,+CAAqF,6CAArC,CAAExoX,MAAOwoX,MAE3F,eAAC/kT,EAAA,EAAD,CAAMW,WAAW,EAAMT,aAAa,SAASyB,KAAK,SAAS8gC,MAAO,CAAEhgC,MAAO,eAA3E,UACE,cAACkpC,GAAA,EAAD,CACE9oH,MAAO2hY,GAAgB,GACvB7hR,SAAU,SAACpzG,GAAD,OAAO,EAAKg1X,gBAAgBh1X,EAAE4kB,OAAOtxB,QAC/CsvH,YAAaj/F,EAAE,kDACf41S,aACE,cAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,cAAC,KAAD,CAAYhX,MAAM,aAGtBqV,MAAO,CAAEkG,YAAa,GAAIllC,SAAU,OAEtC,cAACqoC,EAAA,EAAD,CACE1e,MAAM,UACNm+K,UAAW,cAAC,KAAD,CAAgBn+K,MAAO43R,EAAiC,YAAc,YACjFh5Q,QAAS,SAACz8G,GAAD,OAAO,EAAKw6G,SAAS,CAAEi5Q,eAAgB,EAAK70V,MAAM60V,eAAiB,KAAOzzX,EAAEs8G,iBAHvF,SAKG34F,EAAE,mCAIT,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLpB,UAAWF,EAAQ+kT,YANrB,UAQE,eAACplT,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAA5B,UACE,cAACg/B,EAAA,EAAD,CAAY8B,MAAO,CAAEmb,WAAY,SAAUjV,YAAa,IAAxD,SACGz1F,EAAE,gDAEL,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACIukT,OAGN,cAACp5Q,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKy4Q,eACpBr3R,MAAM,UACNqV,MAAO,CAAEmb,WAAY,UAHvB,SAKG1qG,EAAE,iDAGP,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,SAII,EAAKkjT,uC,EAUhBvyR,IAAM,SAACuyB,GAAD,OAAgB,EAAKtzF,MAAM+zF,YAAYT,I,EAC7Co0D,UAAYhB,oBAAS,EAAK3lF,IAAK,K,EAmN9BwyR,wBAA0B,WAChC,MAGI,EAAKvzV,MAFPg0V,EADF,EACEA,iBACAlF,EAFF,EAEEA,0BAGF,OAAOkF,EAAiBv8W,MAAK,SAAAs7H,GAAY,OAAIA,EAAal5I,IAAI,WAAai1X,MAA8B,M,EAGnGmF,oBAAsB,WAC5B,MAGI,EAAKj0V,MAFPk0V,EADF,EACEA,aACAnF,EAFF,EAEEA,mBAGF,OAAOmF,EAAaz8W,MAAK,SAACy1G,GAAD,OAAcA,EAASrzH,IAAI,QAAUk1X,M,uDAzmBhE,WACE,MAGIj5X,KAAKkqC,MAFP6tV,EADF,EACEA,mBACAkE,EAFF,EAEEA,iBAGFj8X,KAAKkqC,MAAMm0V,wBAEX,OAAItG,QAAJ,IAAIA,OAAJ,EAAIA,EAAoBh8X,SACtB,OAAIkgY,QAAJ,IAAIA,OAAJ,EAAIA,EAAkBlgY,MACpBiE,KAAK+7X,2BAEL/7X,KAAKg9X,8BAA8BjF,M,gCAKzC,SAA0B15Q,EAA6C4yJ,EAAWk6C,GAChF,MAGInrT,KAAKkqC,MAFP6tV,EADF,EACEA,mBACAkE,EAFF,EAEEA,iBAGGlE,EAAmB3yX,OAAOi5G,EAAU05Q,qBACvC/3X,KAAKg9X,8BAA8BjF,GAGjCkE,IAAqBA,EAAiB72X,OAAOi5G,EAAU49Q,kBACzDj8X,KAAK+7X,0BAAyB,IACpBE,GAAoB59Q,EAAU49Q,kBACxCj8X,KAAKg9X,8BAA8BjF,K,oBA2WvC,WAAiB,IAAD,OAEZ5kQ,EACEnzH,KAAKgnC,MADPmsF,SAEF,EAeInzH,KAAKkqC,MAdPgxC,EADF,EACEA,MACAhC,EAFF,EAEEA,QACAolT,EAHF,EAGEA,mBACAC,EAJF,EAIEA,eACA97Q,EALF,EAKEA,WACAy7Q,EANF,EAMEA,iBACAE,EAPF,EAOEA,aACAI,EARF,EAQEA,6BACAC,EATF,EASEA,yBACAC,EAVF,EAUEA,4BACA3yW,EAXF,EAWEA,EACA4e,EAZF,EAYEA,SAZF,IAaE4rV,mBAbF,MAagB,WAbhB,EAcEwB,EAdF,EAcEA,mBAGI96O,EAAej9I,KAAKy9X,0BAE1B,OACE,eAAC5kT,EAAA,EAAD,CAAMO,UAAWF,EAAQ3hE,KAAzB,UAEoB,eAAhBg/W,GACE,eAAC/8Q,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ+gT,KAA5C,gBACMluW,EAAE,gCAIZ,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBf,aAAa,SAASyB,KAAK,SAA1E,UACE,cAACg/B,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAW6tC,KAAW,CAAC/tC,EAAQylT,uBAAwBzlT,EAAQ8gT,WAA3F,SACGjuW,EAAE,mCAGH1uB,QAAQolH,GAAcw6B,IACpB,cAACt4B,EAAA,EAAD,CACEE,QAAS,WAAO,EAAKl6C,QAAS,EAAKouT,kBACnC9yR,MAAM,UAFR,SAIGl6E,EAAE,mCAKX,iCAEE,cAAC,SAAD,CACEvd,KAAK,oBACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVA,WAAY,CACV2B,MAAM,eAAMpgC,EAAM82C,WAAWu/B,QAE/BvmC,YAAaj/F,EAAE,4CACfrwB,MAAO+mH,EACPviH,KAAM,OACNs7G,SAAU,SAACpzG,GACT,IAAM6N,EAAM7N,EAAE4kB,OAAOtxB,MACrBivC,EAAS,IAAI64L,KAAoB,CAAEhmG,WAAYvnH,KACnC,KAARA,GACF,EAAK00D,QAEP,EAAKouT,kBAEE,OAAH9iX,QAAG,IAAHA,OAAA,EAAAA,EAAKpU,QAASi3B,6BAChB,EAAK8pF,SAAS,CAAEg5Q,YAAY,IAC5BjxV,EAAS,IAAIy4L,MACbz4L,EAAS,IAAI24L,MAAmC,IAChD34L,EAAS,IAAI63L,QAEb,EAAK5/G,SAAS,CAAEg5Q,YAAY,IAC5B,EAAKhqM,UAAU37K,KAGnB6mG,WAAY,CACVC,eACE,cAACC,GAAA,EAAD,CACEtD,QAAQ,SACRuD,SAAS,QACT/jC,QAAS,CACP0lT,cAAe1lT,EAAQ2lT,YAJ3B,SAOE,cAAC,KAAD,CACE13Q,SAAS,YAIfpe,QAAS,SAAC3gG,GACH+qH,GACH,EAAKvQ,SAAS,CAAEuQ,SAAU/qH,EAAEs8G,iBAEhB,OAAVjC,QAAU,IAAVA,OAAA,EAAAA,EAAY5gH,QAASi3B,6BACvB,EAAK8pF,SAAS,CAAEg5Q,YAAY,KAGhCl2P,OAAQ,SAACt9H,GAAD,OAAO,EAAKw6G,SAAS,CAAEg5Q,YAAY,OAG/ChiR,iBAAkB,MAItB,cAACsZ,GAAA,EAAD,CAAQ95C,UAAWF,EAAQsxM,OAAQ7/K,KAAM3qG,KAAKgnC,MAAM40V,WAAYzoQ,SAAUA,EAAUhJ,UAAW,cAAeqK,YAAY,EAA1H,SACG,gBAAG6R,EAAH,EAAGA,gBAAH,OACC,cAACy4P,GAAA,EAAD,2BAAUz4P,GAAV,IAA2B5hC,QAAS,IAApC,SACE,cAACotB,GAAA,EAAD,CAAOz4C,UAAWF,EAAQ6lT,cAA1B,SACE,eAAClmT,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAM,SAAjD,UACE,cAAC,KAAD,CAAapB,UAAWF,EAAQ8lT,YAAa/4R,MAAM,UACnD,cAACuT,EAAA,EAAD,UAAaztF,EAAE,iCAAkC,CAAEkzW,kBAAmBnmW,2CAMhF,cAAC0gF,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAW6tC,KAAW,CAAC/tC,EAAQylT,uBAAwBzlT,EAAQ8gT,WAA3F,SACGjuW,EAAE,oDAIL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVY,QAAS,EAHX,UAKE,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNI,GAAI,EACJE,GAAI,EACJE,GAAI,GACJQ,GAAI,GALN,SAQE,cAAC,SAAD,CACEpsE,KAAK,wBACL8qE,UAAW4lT,KACXh1V,MAAO,CACLyvE,WAAY,CACV6B,SAAU,SAACvlG,GACTqoX,EAAmBroX,GACnBuoX,EAA6BvoX,GAC7B,EAAKsnX,kBACL,EAAKD,eAEPtxV,QAASkyV,EACTlzQ,YAAaj/F,EAAE,kDACf+wB,WAAW,eAAM4+U,IACjB9/S,OAAQujT,GAAajkT,GACrB+vC,iBAAkB,iBAAM,cACxBlI,UAAW27Q,GAEb9kR,iBAAkB,CAChBC,WAAW,QAMnB,cAAChhC,EAAA,EAAD,CACEe,MAAM,EACNI,GAAI,EACJE,GAAI,EACJE,GAAI,GACJQ,GAAI,GALN,SAQE,cAAC,SAAD,CACEpsE,KAAK,oBACL8qE,UAAW4lT,KACXh1V,MAAO,CACLyvE,WAAY,CACVp8D,aAAc,GACdi+D,SAAU,SAACvlG,GACTsoX,EAAetoX,GACf,EAAKqnX,eAEPtxV,QAASoyV,EAAax7X,UACtBooH,YAAaj/F,EAAE,8CACf+wB,WAAW,eAAM4+U,IACjB9/S,OAAQujT,GAAajkT,GACrB86C,YAAYinB,GAAeA,EAAa16H,UACxC0oG,iBAAkB,iBAAM,cACxBlI,UAAW07Q,GAEb7kR,iBAAkB,CAChBC,WAAW,cAOvB,mBAAM6jR,yBAAN,IAEA,cAAC,GAAD,CACE3F,mBAAoBA,EACpB5kQ,SAAUnzH,KAAKgnC,MAAM60V,eACrBl3P,QAAS,kBAAM,EAAK/hB,SAAS,CAAEi5Q,eAAgB,QAC/CvmB,UAAWt1W,KAAKgnC,MAAMsuU,UACtBrB,aAAc,kBAAM,EAAKrxP,SAAS,CAAE0yP,UAAWvnV,KAAK+xB,kB,GA9lB7Brb,aAunB3B06V,GAAe,SAACjkT,GAAD,MAAmB,CACpC8vC,YAAa,SAACqjI,EAAMrnN,GAAP,mBAAC,eACTqnN,GACAnzK,EAAM82C,WAAWu/B,QAEtBhqC,QAAS,SAAC8mI,EAAMrnN,GAAP,mBAAC,eACLqnN,GADI,IAEPxzH,OAAQ,OACRhT,WAAW7gF,EAAM+uF,UAAY,GAC7B9Y,SAAU,WACV,WAAY,CACVthE,QAAS,KACTshE,SAAU,WACVsX,OAAQ,EACRj5C,MAAO,OACPssC,aAAc5gF,EAAM+uF,UAAN,oBACG76C,EAAM+pC,QAAQE,QAAQ7iF,MACnC,iCAEN,iBAAkB,CAChBslF,aAAc,oCAGlBpH,OAAQ,SAAC5kC,EAAD,OAAWqqC,EAAX,EAAWA,WAAY8P,EAAvB,EAAuBA,UAAWC,EAAlC,EAAkCA,WAAlC,mBAAC,eACJp6C,GADG,IAENopC,gBAAiBiB,EACb/qC,EAAM+pC,QAAQC,KAAK,KACnB6Q,EACE76C,EAAM+pC,QAAQC,KAAK,KACnB,KACN,UAAU,2BACLtpC,EAAO,YADZ,IAEEopC,iBAAkBgR,IAAe/P,EAAa/qC,EAAM+pC,QAAQC,KAAK,KAAOhqC,EAAM+pC,QAAQC,KAAK,WAG/Fg+N,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnB8C,eAAgB,SAACumI,EAAMrnN,GAAP,mBAAC,eACZqnN,GADW,IAEdvyK,QAAS,IACTmhC,SAAU,UACV3hC,MAAO,yBA8FErG,qBACbgG,aA3Fa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAENsnX,WAAY,CACVviR,UAAW,gBAEb8iR,WAAY,CACV7jT,OAAQL,EAAMZ,WAEhB+kT,UAAW,CACTn3Q,WAAYhtC,EAAMZ,WAEpBglT,gBAAiB,CACf79P,WAAY,mBACZvZ,WAAYhtC,EAAMZ,QAAQ,GAC1BouD,YAAaxtD,EAAMZ,WAErBqkT,uBAAwB,CACtB1sQ,WAAW,GAAD,OAAK/2C,EAAMZ,QAAQ,KAAnB,iBACV43C,cAAc,GAAD,OAAKh3C,EAAMZ,QAAQ,KAAnB,kBAEfi1R,QAAS,CACPh0R,OAAQL,EAAMZ,QAAQ,KAAM,IAE9B2jT,YAAa,CACX1iT,OAAQL,EAAMZ,QAAQ,EAAG,IAE3B0/S,SAAU,CACR/zR,MAAO,uBAETg0R,KAAM,CACJ19P,WAAY,QAEdiuJ,OAAQ,CAGNluK,UAAWphC,EAAMZ,SAAS,GAC1B4tC,WAAYhtC,EAAMZ,WAEpBykT,cAAe,CACbjjT,QAASZ,EAAMZ,WAEjB0kT,YAAa,CACXx9Q,YAAatmC,EAAMZ,QAAQ,KAE7B0jT,WAAY,CACVv2Q,aAAcvsC,EAAM4/C,MAAMrT,aAC1BlsC,OAAQL,EAAMZ,QAAQ,SA4CL,CAAE00C,WAAW,IAChC7vE,YAAgB,gBAChBgwE,IACAo4M,qBAAU,CACR9pN,KAAMy7Q,KACN1xD,kBAAkB,IAEpB3oN,mBA/CsB,SAACu7Q,EAAoBC,GAC3C,OAAOvnV,YAAyB,CAC9BilV,mBAAoBhI,eACpBttQ,WAAYgb,eACZygQ,iBAAkBhP,eAClBkP,aAAcnP,eACd+J,0BAA2BhK,eAC3BiK,mBAAoBlK,eACpB4O,6BAA8BxN,eAC9BsO,yBAA0BpO,eAC1BqO,4BAA6BtO,eAC7BrpU,MAAOD,cACPpB,OAAQF,cACRy2U,iBAAkB7gR,yBAAco8Q,KAZ3B1kV,CAaJsnV,MAGsB,SAACzvV,EAAmC8B,GAC7D,MAAO,CACLwxF,YAAa,SAACC,GACZvzF,EAAS,IAAIu4L,KAA4B,CAAE1lG,WAAYU,MAEzDqgQ,eAAgB,SAACnnQ,GACfzsF,EAAS,IAAI22L,KAAgC,CAAElqG,eAEjDknQ,mBAAoB,SAACrhP,GACnBtyG,EAAS,IAAIi3L,KAAwB,CAAE3kF,kBACvCtyG,EAAS,IAAIi1B,KAA4B,CAAEq5T,oBAAqB,KAChEtuV,EAASu/B,aAAOgvT,KAA4B,oBAAqB,QAEnEmF,qBAAsB,WACpB1zV,EAAS,IAAIy3L,OAEfo8J,6BAA8B,SAACvhP,GAC7BtyG,EAAS,IAAI62L,KAAmC,CAAEvkF,uBAKzChoE,CASb0mT,I,SCz6Bax4P,iBAAQ,kBAAM,iE,qICmCvBo8P,GAAmBn2W,iBAAO,CAC9B45K,UAAU,IAiGNw8L,GAA4B5sX,gBAE5B6sX,G,4MAEGz4V,MAAoC,CACzC4R,aAAa,EAEb8mV,yBAA0B9sX,gBAC1B+/B,YAAQ72C,EACR6jY,kBAAc7jY,EACd8jY,gBAAiB,WAAO53W,QAAQ7Z,MAAM,yB,+DAGxC,WACE,IACE2xG,EACE9/G,KAAKkqC,MADP41E,kBAGIR,EAAaQ,EAAkB/7G,IAAI,cAGnC27X,GAFW5/Q,EAAkB/7G,IAAI,aAAe6O,iBAEZ5J,KAAI,SAACtN,EAAO4I,GACpD,OAAOzF,cAAIyF,EAAIy6C,MAAM,KAAK/1C,KAAI,SAAC62X,GAAD,OAAgBA,EAAWrhQ,cAG3D,EAIIx+H,KAAKgnC,MAHP2L,EADF,EACEA,OACAgtV,EAFF,EAEEA,aACAC,EAHF,EAGEA,gBAEgB,MAAdtgR,IACF3sE,EA/GkC,WAAwL,IAAvLmtV,EAAsL,uDAAnE7nX,iBAU1J,OAREvW,YAAQo+X,GACLA,EAAmEn0X,QACpE,SAACutI,EAAK6mP,GACJ,OAAOntX,MAAI9N,MAAMi7X,GAAa7mP,EAAIxxI,IAAIq4X,EAAUh8X,IAAI,QAAU,aAAcw7X,GAAiBhuX,UAAUwuX,IAAc7mP,EAAIxxI,IAAJ,UAAWq4X,GAAaR,MAC5I3sX,iBAEHktX,GAEY92X,KAAI,SAACtN,EAAO4I,GAC1B,OAAO5I,EAAMgM,IAAI,MAAOpD,MAoGb07X,CAAgC1gR,GAEzCqgR,EAAehtV,EAAOlmC,MAAK,SAACwzX,EAAQC,GAClC,OAhIQC,EAgIM,MAhII,SAACC,EAAMC,GAC/B,IAAMC,EAAYF,EAAKr8X,IAAIo8X,GACrBI,EAAYF,EAAKt8X,IAAIo8X,GAE3B,OAAIG,IAAcC,GACR,GACED,GAAaC,EAChB,EACED,IAAcC,EAChB,EAEFD,EAAYC,GAAa,EAAI,IAqHTN,EAAQC,GAhItB,IAACC,KAkIVP,EAAkBt4W,iBAAOq4W,EAAa32X,KAAI,kBAAM,QAAMuV,SAGxDve,KAAK4iH,SAAS,CACZ88Q,2BACA/sV,SACAgtV,eACAC,sB,+BAIJ,WAEE,MAII5/X,KAAKkqC,MAHPs2V,EADF,EACEA,oBACA71V,EAFF,EAEEA,SACA81V,EAHF,EAGEA,SAGFzgY,KAAK0gY,eAAe/1V,EAAU81V,EAA9BzgY,CAAwC,CAACwgY,0B,6BAG3C,YAAiG,IAAzEA,EAAwE,EAAxEA,oBAEpBb,EACE3/X,KAAKgnC,MADP24V,aAGF,OAAoB,MAAhBA,GAIGA,EAAa/2X,WAAW+C,QAAO,SAACg1X,EAAOR,GAC5C,OAAOQ,KAAWR,EAAMp8X,IAAI,aAAey8X,EAAoBv8X,IAAIk8X,EAAMp8X,IAAI,QAAU,QACtF,K,mCAGL,SAA6By8X,GAC3B,IACEb,EACE3/X,KAAKgnC,MADP24V,aAGF,OAAoB,MAAhBA,EACKa,EAAoB3hX,SAGtB8gX,EAAap0X,QAAO,SAAC7P,EAAO4I,GACjC,OAAOk8X,EAAoBv8X,IAAIK,MAC9Bua,W,8BAGL,YAAiE,IAAxC2hX,EAAuC,EAAvCA,oBACvB,EAGIxgY,KAAKkqC,MAFP41E,EADF,EACEA,kBACAkoG,EAFF,EAEEA,MAGI44K,EAAiCjyX,KAAKC,UAAU4xX,GAClD7tV,EAAS6sV,GAA0Bz7X,IAAI68X,GAE3C,GAAc,MAAVjuV,EACF,OAAOA,EAGT,IAAM4sE,EAAWO,EAAkB/7G,IAAI,aAAe6O,gBACtD+/B,EAAS,CACPzL,QAAS44E,EAAkB/7G,IAAI,YAEjC,IACE27X,EACE1/X,KAAKgnC,MADP04V,yBAGImB,EAAWhiY,cAAImB,KAAK8gY,sBAAsBN,IAE1CX,EAAaH,EAAyB18W,SAC1C,SAAC+9W,GACC,OAAO/4K,EACH+4K,EAAW37X,OAAOy7X,GAClBE,EAAWn9W,SAASi9W,MAG5B,GAAkB,MAAdhB,EAAoB,CACtB,IAAMmB,EAAmBzhR,EAASx7G,IAAI87X,GACd,MAApBmB,GAIoB,OAHtBruV,EAAS,CACPzL,QAAS85V,EAAiBj9X,IAAI,aAErBmjC,SACTlf,QAAQ7Z,MAAM,uCAAwC,CACpDwkC,SAAOquV,qBAOf,GAFAxB,GAA0B93X,IAAIk5X,EAAgCjuV,GAExC,MAAlBA,EAAOzL,QAMT,OALAlf,QAAQ7Z,MAAM,uCAAwC,CACpDwkC,SACAmtE,oBACA0gR,wBAEK,CACLt5V,QAAS9d,iBAAO,KAGpB,IAAM63W,EAAgBn5R,YAAcn1D,EAAOzL,QAAQ3oB,OAAO2oB,SACpDg6V,EAAe,2BAChBD,EAAcnxX,OAAO,GAAG,IADR,IAEnB6iC,OAAQ6tV,EAAoBjiX,SAExB4iX,EAAgC,uBAAOF,EAAcnxX,MAAM,GAAI,IAA/B,CAAmCoxX,IAUzE,OAAO,2BACFvuV,GADL,IAEEzL,QAASyL,EAAOzL,QAAQx/B,IAAI,UAAWy5X,O,wBAI3C,YAA0C,IAAvBX,EAAsB,EAAtBA,oBACXY,EAAgBphY,KAAKqhY,iBAAiB,CAACb,wBAC7C,MAAO,CAAC,uBAAwB7xX,KAAKC,UAAUwyX,EAAcl6V,QAAQnjC,IAAI,YAAa4K,KAAKC,UAAU4xX,M,4BAGvG,SAAsB71V,EAAU81V,GAAW,IAAD,OACxC,OAAO,YAAqE,IAAnED,EAAkE,EAAlEA,oBACDl8X,EAAM,EAAKg9X,WAAW,CAACd,wBAI7B,GAA0B,MAFCC,EAAS7/W,MAAT,CAAgB,cAAhB,oBAAiCtc,MAE1B,EAAKi9X,gBAAgB,CAACf,wBAAuB,CAC7E,IAAMY,EAAgB,EAAKC,iBAAiB,CAACb,wBAC7C71V,EAAS,IAAI2lC,KAAJ,2BACH8wT,EAAcl6V,QAAQ3oB,QADnB,IAEPja,c,uCAMR,SAAiC++G,GAC/B,MAGIrjH,KAAKkqC,MAFcs3V,EADvB,EACEhB,oBACA71V,EAFF,EAEEA,SAIA61V,EAEEn9Q,EAFFm9Q,oBACAC,EACEp9Q,EADFo9Q,SAGGe,EAAwBp8X,OAAOo7X,IAClCxgY,KAAK0gY,eAAe/1V,EAAU81V,EAA9BzgY,CAAwC,CAACwgY,0B,oBAI7C,WACE,MASIxgY,KAAKkqC,MARPs2V,EADF,EACEA,oBAGAC,GAJF,EAGE91V,SAHF,EAIE81V,UAJF,KAKE3gR,kBALF,EAOEvB,yBAPF,MAOqB,GAPrB,EAQKj6F,EARL,mBAWMhgB,EAAMtE,KAAKshY,WAAW,CAACd,wBACvBxlV,EAAOylV,EAAS7/W,MAAT,CAAgB,QAAhB,oBAA2Btc,IAAMzF,iBAAO0f,OAErD,OACE,cAAC,KAAD,2BACM+F,GADN,IAEEi6F,iBAAgB,2BACXA,GADW,IAEdC,YAAY,EACZxjE,gB,GA1NyBvW,aAuOnC,IAAMmI,GAAkBkG,YAAyB,CAC/C2tV,SAAU9gV,iBAWGs1B,kBACb4pC,kBAAQjyE,IAnBH,SAA4BjC,GACjC,MAAO,CACLA,eAQG,SAAoBmC,EAAYC,EAAeN,GACpD,IAAM+zV,EAAsBphY,sBAAYqtC,EAAS6yE,YAAc7yE,EAAS6yE,WAAal2F,iBAAOqjB,EAAS6yE,YAAc,IAEnH,OAAOlhH,OAAO+8C,OAAO,GAAI1O,EAAUK,EAAYC,EAAe,CAC5DyzV,2BAIWvrT,CAEbwqT,I,cAFaxqT,I,4CC9TTwsT,G,4MACGC,oBAAsBj9V,c,EAEtBuC,MAAQ,CACbtrC,MAAO,G,EAGFolQ,aAAe,SAAC35H,EAAYzrI,GACjC,EAAKknH,SAAS,CAAElnH,W,4CAGlB,WACE,MAMIsE,KAAKkqC,MALPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAmvD,EAHF,EAGEA,MACAymT,EAJF,EAIEA,kBACAC,EALF,EAKEA,sBAGAlmY,EACEsE,KAAKgnC,MADPtrC,MAGF,OACE,eAACm9E,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQ3hE,KACnBqjE,GAAI,GAHN,UAKE,cAACinT,GAAA,EAAD,CACE5kR,SAAS,SACT7jC,UAAWF,EAAQ4oT,YAFrB,SAIE,cAAC9vE,GAAA,EAAD,CACEt2T,MAAOA,EACP8/G,SAAUx7G,KAAK8gQ,aACfmxD,eAAe,UACfC,UAAU,UAJZ,SAME,cAACC,GAAA,EAAD,CACErxR,MAAO/U,EAAE,oCAUf,qBAAKqtD,UAAWF,EAAQ6oT,eAAxB,SACE,cAACC,GAAA,QAAD,CACEvmY,IAAKuE,KAAK0hY,oBACVO,UAAWvmY,EAAQkmY,EAAwBD,EAC3CO,YAAa,CACXtb,QAAS,CACP,CACEub,QAAS,OACTrhW,MAAO,YACPshW,SAAU,WACV9lT,SAAU,KAEZ,CACE6lT,QAAS,QACTrhW,MAAO,eACPshW,SAAU,WACV9lT,SAAU,KAEZ,CACE6lT,QAAS,UACTrhW,MAAO,UACPshW,SAAU,WACV9lT,SAAU,KAEZ,CACEx7C,MAAO,YACP0/N,aAAc,YACdhyP,KAAM,SAAC6zX,GAAD,4BAAkDA,EAAQt+X,IAAI,QACpEq+X,SAAU,wBACV9lT,SAAU,IACV4gC,WAAUxhH,GAEZ,CACEolC,MAAO,OACP0/N,aAAc,OACdhyP,KAAM,SAAC6zX,GAAD,4BAAkDA,EAAQt+X,IAAI,QACpEq+X,SAAU,wBACV9lT,SAAU,KAEZ,CACEx7C,MAAO,SACP0/N,aAAc,SACdhyP,KAAM,SAAC6zX,GAAD,4BAAkDA,EAAQt+X,IAAI,QACpEq+X,SAAU,wBACV9lT,SAAU,OAIhBgmT,WAAY,CACVC,eAAe,EACfC,UAA6B,EAAlBtnT,EAAMZ,UACjBmoT,aAAgC,EAAlBvnT,EAAMZ,sB,GArGL71C,aA8GvBmI,GAAkBkG,YAAyB,IC7KlCqwF,IDiLAluD,kBACbgG,aA/Ia,SAACC,GAAD,MAAmB,CAChC3jE,KAAM,CACJ8kE,SAAU,EACV2oC,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,OAExCg5P,YAAa,CACX98Q,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW,QAEbk6Q,eAAgB,CACdxwQ,OAAQ,QAqIS,CAAEvC,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQjyE,IAHKqoC,CAIbwsT,ICrLat+P,cAAQ,kBAAM,qC,UCGbA,ICADA,cAAQ,kBAAM,oCDAbA,cAAgB,kBAAM,8C,6EEoFzBu/P,GAAW,6BA4ClBC,G,4MAmCG37V,MAAQ,CACbg2U,iBAAkB/kW,eAAK,IACvB2qX,uBAAuB,EACvBC,kBAAmB,GACnBC,OAAO,G,EAgBFC,WAAa,WAClB,MAII,EAAK74V,MAFP84V,GAFF,EACEr4V,SADF,EAEEq4V,cAIFC,EANA,EAGEA,kBAGe,GACjBD,GAAa,GAEb,EAAKpgR,SAAS,CACZggR,uBAAuB,K,EAIpBnqQ,cAAgB,SAACrwH,EAAQwxE,GAC9BxxE,EAAEg5H,iBAEF,IACE47O,EACE,EAAKh2U,MADPg2U,iBAGI7gX,EAAQ6gX,EAAiBh3V,WAAU,SAACgxG,GAAD,OAAap9C,EAAK71E,IAAI,iBAAmBizH,EAAQjzH,IAAI,kBAE9F,EAAK6+G,SAAS,CACZo6P,iBAAkBA,EAAiBx0P,OAAOrsH,GAC1C2mY,OAAO,K,EAIJI,yBAA2B,WAChC,IACEhqT,EACE,EAAKhvC,MADPgvC,QAOF,OAFI,EAAKlyC,MADPg2U,iBAGsBh0W,KAAI,SAAC4wE,EAAMz9E,GACjC,OACE,qBACEi9E,UAAWF,EAAQiqT,gBADrB,SAIE,uBACE/pT,UAAWF,EAAQkqT,YADrB,UAGE,+BACGxpT,EAAK71E,IAAI,WAGZ,cAAC22H,GAAA,EAAD,CACE7V,QAAS,SAACz8G,GAAD,OAAO,EAAKqwH,cAAcrwH,EAAGwxE,IACtCypT,eAAe,EAFjB,SAIE,cAAC,KAAD,CACEtnY,KAAK,KACL61H,KAAK,eACLx4C,UAAWF,EAAQoqT,kBAlB3B,UAEUnnY,EAFV,YAEmBy9E,EAAK71E,IAAI,yB,EAyB3Bw/X,uBAAyB,WAC9B,MAKI,EAAKr5V,MAJPs5V,EADF,EACEA,uBACAvK,EAFF,EAEEA,mBACA7hQ,EAHF,EAGEA,SACA6lB,EAJF,EAIEA,aAGF,EAGI,EAAKj2G,MAFPg2U,EADF,EACEA,iBAIF,GALA,EAEE4lB,sBAGF,CAIA,IAII14Q,EAJEu5Q,EAAgBrsQ,EAASpxG,WAAU,SAAC4zD,GAAD,OAAUA,EAAK71E,IAAI,QAAUk1X,KAChEyK,EAAoBzmP,EAAaj3H,WAAU,SAAC4zD,GAAD,OAAUA,EAAK71E,IAAI,QAAUy/X,KACxEG,GAA0C,IAAvBD,GAA4BzmP,EAAal5I,IAAI2/X,GAChEE,GAAkC,IAAnBH,GAAwBrsQ,EAASrzH,IAAI0/X,GAGtDE,GAAoBC,EACtB15Q,EAAK,UAAMy5Q,EAAiB5/X,IAAI,SAA3B,cAAyC6/X,EAAa7/X,IAAI,UACtD6/X,EACT15Q,EAAK,UAAM05Q,EAAa7/X,IAAI,UACnB4/X,IACTz5Q,EAAK,UAAMy5Q,EAAiB5/X,IAAI,WAGlC,IAAM8/X,EAAcjxX,cAAI,CACtB,gBAAmB4wX,EACnB,YAAevK,EACf/uQ,UAGF,EAAKtH,SAAS,CACZo6P,iBAAkBA,EAAiB5wW,KAAKy3X,GACxCf,OAAO,IAGT,EAAKC,e,EAGAe,qBAAuB,WAC5B,EAAKlhR,SAAS,CACZggR,uBAAuB,K,EAIpBmB,sBAAwB,WAC7B,EAAKnhR,SAAS,CACZggR,uBAAuB,K,EAIpBoB,sBAAwB,WAC7B,EAAK95V,MAAMygC,QACX,EAAKi4C,SAAS,CACZo6P,iBAAkB/kW,eAAK,IACvB6qX,OAAO,K,EAIJ57P,YAAc,WACnB,EAAKh9F,MAAMygC,QACX,EAAKo4T,aACL,EAAKngR,SAAS,CAAEkgR,OAAO,K,EAGlBmB,iBAAmB,SAAC77X,GACzBA,EAAEg5H,iBAEF,MAOI,EAAKl3F,MANPm4R,EADF,EACEA,aACA13R,EAFF,EAEEA,SACAu5V,EAHF,EAGEA,UACAvD,EAJF,EAIEA,MACAxlR,EALF,EAKEA,WACAtuD,EANF,EAMEA,cAIAmwT,EACE,EAAKh2U,MADPg2U,iBAGFryU,EAAS0gC,aAAMq3T,GAAU,qBAErB/B,IACgB,UAAduD,EACF7hE,EAAaj6T,GAEbi6T,EAAaj6T,EAAG40W,EAAkB,EAAKgnB,uBAGzC,EAAKjB,aACL,EAAK74V,MAAMygC,QACX,EAAKi4C,SAAS,CACZkgR,OAAO,IAGTn4V,EAAS,IAAI0J,KAA6B,CACxCs2D,MAAM,EACN1pE,GAAG,GAAD,OAAKyhW,QAIX,IAAMyB,EAAmBhpR,GAAcA,EAAWp3G,IAAI,oBAChDqgY,EAAyBpnB,GAAoBA,EAAiBh0W,KAAI,SAACguH,GACvE,OAAOA,EAAQjzH,IAAI,YAClB0d,KAAK,MACRglF,IAAmB9rE,kBAAgB0pW,eACjCx3U,EAAc,CACZs3U,iBAAiB,GAAD,OAAKA,GACrBlnP,aAAa,GAAD,OAAKmnP,O,EAIhB5pC,WAAa,SAAAt6V,GAGlB,OAFgB,EAAKgqC,MAAMhqC,I,wDAzM7B,SAA0Bm+G,GACxB,MAIIr+G,KAAKkqC,MAHPg9R,EADF,EACEA,YACAjF,EAFF,EAEEA,iBACAD,EAHF,EAGEA,cAGEkF,IAAgB7oN,EAAU6oN,cAC5BjF,IACAD,O,oBAqMJ,WAAiB,IAAD,OACd,EAeIhiU,KAAKkqC,MAdPgvC,EADF,EACEA,QACA+jE,EAFF,EAEEA,aACA7lB,EAHF,EAGEA,SACAosQ,EAJF,EAIEA,uBACAvK,EALF,EAKEA,mBACAiL,EANF,EAMEA,UACAttR,EAPF,EAOEA,cACAisR,EARF,EAQEA,kBACAvkR,EATF,EASEA,cACAnD,EAVF,EAUEA,WACAxwE,EAXF,EAWEA,SACAs4V,EAZF,EAYEA,gBACAD,EAbF,EAaEA,YACAj3W,EAdF,EAcEA,EAGF,EAGI/rB,KAAKgnC,MAFP47V,EADF,EACEA,sBACA5lB,EAFF,EAEEA,iBAGIsnB,EAAoBrnP,EAAat7H,MAAK,SAAC4iX,GAC3C,OAAOA,EAAcxgY,IAAI,QAAUy/X,KAE/BgB,EAAqCz4W,EAAV,UAAdm4W,EAA0B,yCAA8C,+BAErFrjW,EAAau2F,EAASz1G,MAAK,SAAC8iX,GAAD,OAAeA,EAAU1gY,IAAI,QAAUk1X,KAElEyL,EAAoB9tR,EAAch2F,MAAMiiX,GACxC8B,EAA2BD,EAAoBA,EAAkB3gY,IAAI,iBAAmBkU,eAAK,IAI7F2sX,GAF8BzpR,GAAcA,EAAWp3G,IAAI,wBACtBu6G,GAAiBA,EAAcv6G,IAAI,qBAGxE8gY,EAAiBF,IAA6B3nB,GACpB,IAA1BA,EAAiBjhX,MAClB6oY,EAECE,GAAgBD,GAEJ,UAAdX,EAIJ,OACE,cAAC,KAAD,CACE50Q,SAAUozQ,GACV7oR,WAAW,EACXv9B,SAAU,KACV4qD,YAAalnI,KAAKknI,YAJpB,SAME,eAACrV,GAAA,EAAD,CAAOz4C,UAAWF,EAAQ3hE,KAA1B,UACE,cAACiiG,EAAA,EAAD,CACEE,QAAS,KADX,SAGG8qR,IAGH,sBACEloE,SAAUt8T,KAAKikY,iBADjB,SAGE,eAACprT,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,SAAD,CACEprE,KAAK,mBACL8qE,UAAWwgC,KACXE,SAAU,CAACgpF,KAAUmB,MACrBj6J,MAAO,CACLpJ,MAAO/U,EAAE,sCACT3wB,SAAS,EACTu+G,WAAY,CACVzgC,QAAS,IAIX0gC,iBAAkB,CAChBC,WAAW,QAQH,UAAdqqR,GACE,iCACE,cAACrrT,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQ6rT,WAFrB,SAIE,cAACvrR,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,yCAIP,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAKE,cAAC,SAAD,CACEpsE,KAAK,wBACL8qE,UAAW4lT,KACXvlR,WAAY,CACVp8D,aAAc,GACd7hD,MAAO4oY,EACP9oR,SAAU,SAACvlG,GACTgtX,EAAgBhtX,EAAIlS,KAAOkS,EAAIlS,IAAI,QAAU,GAC5CkS,EAAIlS,KAAO88B,EAAc,EAAKijW,uBAAyB,EAAKC,yBAE/D/3V,QAAShsC,KAAKw6V,WAAW,gBACzBxvO,YAAaj/F,EAAE,8CAEjB6tF,iBAAkB,CAChBC,WAAW,OAKjB,cAAChhC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAKE,cAAC,SAAD,CACEpsE,KAAK,oBACL8qE,UAAW4lT,KACXvlR,WAAY,CACVp8D,aAAc,GACd7hD,MAAOmlC,EACP26E,SAAU,SAACvlG,GACT+sX,EAAY/sX,EAAIlS,KAAOkS,EAAIlS,IAAI,QAAU,GACxCkS,EAAIlS,KAAOugY,EAAqB,EAAKR,uBAAyB,EAAKC,yBAEtE/3V,QAAShsC,KAAKw6V,WAAW,YACzBxvO,YAAaj/F,EAAE,yCACfs1G,eAAgB,SAAC7gB,GAAD,OAA4BA,EAAOz8G,IAAI,UAAYy8G,EAAOz8G,IAAI,UAC9EqkH,kBAAmB,SAAC5H,GAAD,OACjB,cAAChH,EAAA,EAAD,UACGgH,EAAOz8G,IAAI,UAAYy8G,EAAOz8G,IAAI,aAIzC61G,iBAAkB,CAChBC,WAAW,OAKjB,cAAChhC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,qBACExB,UAAWwpT,EAAwB1pT,EAAQ8rT,wBAA0B9rT,EAAQ+rT,yBAC7EpgR,QAAS7kH,KAAKujY,uBAFhB,SAIGx3W,EAAE,0CAIP,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQgsT,qBAFrB,SAIGllY,KAAKkjY,6BAER,cAACrqT,EAAA,EAAD,UAEIgsT,EACI,cAACrrR,EAAA,EAAD,CACEvT,MAAM,QADR,SAGGl6E,EAAE,0CAEL,UAOd,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,WAHV,UAKE,cAACjB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WACPl6E,EAAS,IAAI0J,KAA6B,CACxCs2D,MAAM,EACN1pE,GAAG,GAAD,OAAKyhW,OAET,EAAKsB,yBAPT,SAUGj4W,EAAE,0BAGP,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN/lG,KAAK,SACLg9G,SAAU4nR,EAHZ,SAKG/4W,EAAE,wC,uCA9crB,SAAuCs3F,EAAwC4tJ,GAC7E,IACEr6J,EAGEyM,EAHFzM,cACAuuR,EAEE9hR,EAFF8hR,UACAtC,EACEx/Q,EADFw/Q,kBAIA7lB,EAGE/rG,EAHF+rG,iBACmBooB,EAEjBn0H,EAFF4xH,kBACAC,EACE7xH,EADF6xH,MAIF,GAAkB,SAAdqC,GAAwBtC,IAAsBuC,EAAwB,CAExE,IAAMV,EAAoB9tR,EAAch2F,MAAMiiX,GACxC8B,EAA2BD,EAAoBA,EAAkB3gY,IAAI,iBAAmBkU,eAAK,IACnG,MAAO,CACL+kW,iBAAkB8lB,EAAQ9lB,EAAmB2nB,EAC7C9B,kBAAmBuC,GAIvB,MAAkB,QAAdD,EACK,CACLnoB,iBAAkB8lB,EAAQ9lB,EAAmB/kW,eAAK,KAI/C,S,GAhC2BwsB,a,IA0jBvBwwC,kBACbgG,aA9Fa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJukE,QAA2B,IAAlBZ,EAAMZ,WAEjB+qT,WAAY,CACV/pT,MAAO,IACP,WAAY,CACVA,MAAO,MAGX6nT,gBAAiB,CACf5nT,OAAO,GAAD,OAAuB,IAAlBL,EAAMZ,UAAX,SAER8oT,YAAa,CACXp+Q,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCppC,QAAQ,SAAD,OAA6B,IAAlBZ,EAAMZ,UAAjB,MACPmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BrsC,QAAS,gBAEX8pT,qBAAsB,CACpBlgR,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCppC,QAAQ,GAAD,OAAuB,IAAlBZ,EAAMZ,UAAX,cAAmD,EAAlBY,EAAMZ,UAAvC,MACPmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BnsC,MAAO,OACPs4C,UAAW,IAEboxQ,wBAAyB,CACvB/3Q,UAAW,QACXhnB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7Bi5C,OAAO,OAAD,OAA2B,EAAlBL,EAAMZ,UAAf,MACN+qC,OAAQ,WAEV4/Q,yBAA0B,CACxBh4Q,UAAW,QACXhnB,MAAO,UACP1qB,OAAO,OAAD,OAA2B,EAAlBL,EAAMZ,UAAf,MACN+qC,OAAQ,WAEV0/Q,WAAY,CACVjpT,QAAQ,OAAD,OAA2B,EAAlBZ,EAAMZ,UAAf,aAwDTn7B,YAAgB,gBAChBgwE,IACAtQ,mBAtDsB,SAAC73E,EAAYyF,GACnC,IACM64V,EADmBt+V,EAAMpmB,MAAM,CAAC,UAAW,gBACR7c,IAAIm4I,KAAeG,mBACtDwmP,EAAoBp2V,EAAQ,kBAC5B84V,EAAiBD,GAClBA,EAAgBvkX,MAAM8hX,IACtByC,EAAgB1kX,MAAMiiX,GAAmB5+X,IAAI,SAE5Cq6G,EAAgB,CACpB6lR,iBAA4C,SAA1B13V,EAAQ,WAA4B84V,EAClDD,EAAgB1kX,MAAMiiX,GAAmB9+X,IAAI,SAC7C,GACJyhY,sBAAuB,GACvBC,kBAAmB,IAGrB,OAAO,aACLnnR,iBACGxrE,YAAyB,CAC1B8jE,cAAewlC,eACfa,aAAcL,cACdxlB,SAAU8lB,cACVsmP,uBAAwBrmP,eACxB87O,mBAAoB77O,eACpB8pL,YAAappH,YAA2B4kL,IACxCvnR,WAAYC,yBAAcsnR,IAC1B/B,MAAOz8L,aAAQw+L,KARd5vV,CASA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,QAEfgjQ,cAAe,WACbr3R,EAAS,IAAI20B,OAEf2jU,gBAAiB,SAAChiW,GAChB0J,EAAS,IAAI+0B,MAAgC,CAAC8jU,uBAAwBviW,MAExE+hW,YAAa,SAAC/hW,GACZ0J,EAAS,IAAIi1B,MAA4B,CAACq5T,mBAAoBh4V,MAGhE0J,eASF2sP,aAAmC,CAAEt2B,SAAU0hI,KAC/Cn7D,qBAAU,CACR9pN,KAAMilR,GACNl7D,kBAAkB,EAClBC,oBAAoB,IATTxyP,CAWb0tT,I,kHC3qBI+C,EAAiB,SAAC,GAKI,IAAD,IAJvBpqT,aAIuB,MAJf,KAIe,MAHvBi2C,cAGuB,MAHd,KAGc,MAFvBn4C,iBAEuB,MAFX,GAEW,MADvBkiC,aACuB,MADf,GACe,EACvB,OACI,sBACI+6J,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRl9L,UAAWA,EACXkiC,MAAK,aACDrV,MAAO,QACJqV,GARX,UAWI,sBAAMx1G,EAAE,udAAud+iI,KAAK,iBACpe,sBAAMuuI,SAAS,UAAUC,SAAS,UAAUvxQ,EAAE,yRAAyR+iI,KAAK,sB,6BClDxV,8BAWezZ,IAPf,SAAoBwtF,GAClB,IAAI5wK,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAClF,OAAOiiY,YAAyB/oL,EAAiB9yK,YAAS,CACxDgzK,aAAcA,KACb9wK,M,6BCRL,8KAYI0T,EAZJ,+BAcaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAGIw0T,EAAiC,kBAAMv0R,YAClD8M,KACA,SAAC3Y,GAAD,uBAAgBA,EAAMpmB,MAAM,CAAC,UAAW,SAAU,aAAlD,QAA2D3I,qBAQhD2tX,EAAwC,kBAAM/yV,YACzD8nG,eANgD9nG,YAChD8M,KACA,SAAC3Y,GAAD,uBAAgBA,EAAMpmB,MAAM,CAAC,UAAW,OAAQ,aAAhD,QAAyD3I,oBAMzDmvT,KACA,SAACy+D,EAAwBC,EAA8BC,GACrD,OAAOF,EAAgBC,EAAcC,MAI5BC,EAAwB,kBAAMnzV,YACzC8M,KACA,SAAC3Y,GAAD,OAAgBA,EAAMjjC,IAAI,mBAGfkiY,EAA2B,kBAAMpzV,YAC5C8M,KACA,SAAC3Y,GAAD,OAAgBA,EAAMjjC,IAAI,uB,6BC1D5B,uEAGe,SAAS4/G,EAAcoG,EAAMxhG,GAC1C,IAAIoxB,EAAYlV,IAAM4G,KAAK5G,IAAM8E,YAAW,SAAUW,EAAOzuC,GAC3D,OAAOgpC,IAAMwB,cAAcwoP,IAAS3kP,YAAS,GAAII,EAAO,CACtDzuC,IAAKA,IACHsuH,OAQN,OADApwE,EAAUotK,QAAU0nE,IAAQ1nE,QACrBptK,I,6BCbT,kCAKO,IAAM2xO,EAAc,yD,0bCqBrB97J,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C2+B,UAAW,CACPv+B,MAAO,QAEXs2C,KAAM,CACFzK,SAAU,OACV3F,YAAa,OAEjBkoB,OAAQ,CACJviB,SAAU,UACVoV,WAAY,IACZ7C,WAAY,UACZzM,UAAW,SACXhnB,MAAO,sBACPotB,aAAc,QAElBxH,KAAM,CACF1E,SAAU,UACVoV,WAAY,IACZ7C,WAAY,OACZ4gJ,cAAe,QACfrtJ,UAAW,QAEfi5Q,YAAa,CACT5qT,MAAO,QAEX6qT,UAAW,CACP7qT,MAAO,YAwTF8qT,EAAuC,kCACrC7+D,sBAAU,CACrB9pN,KAAM2oR,EACN5+D,kBAAkB,EAClB6+D,kBACAC,gBAAiB,CAAC,SAClBC,aAAc,SAACx5O,EAAQpiH,GAAT,OAAsBA,EAAS,IAAI+2B,KAA4B,CACzEqrF,SACA+tI,UAAWngQ,kBAAgB6rW,eAE/BC,gBAAiB,SAAC7yX,EAAQ+2B,GAAT,OAAsBA,EAAS,IAAIi3B,KAA+B,CAC/Ek5N,UAAWngQ,kBAAgB6rW,gBAVpBj/D,EAhTsC,SAAC,GAE/C,IADLlF,EACI,EADJA,aAEE,EAA0BqkE,KAAZC,GAAd,EAAQrnM,KAAR,EAAcqnM,SACd,EAAsDjoV,oBAAS,GAA/D,mBAAOkoV,EAAP,KAA4BC,EAA5B,KACM3tT,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACXuY,EAAgBnX,sBAAYiX,eAClC,EAAgCjK,mBAAS,IAAzC,mBAAOooV,EAAP,KAAiBC,EAAjB,KACA,EAAkCroV,oBAAS,GAA3C,mBAAOsoV,EAAP,KAAkBC,EAAlB,KACA,EAAwCvoV,mBAAS,IAAjD,oBAAOwoV,GAAP,MAAqBC,GAArB,MACA,GAAgDzoV,oBAAS,GAAzD,qBAAO0oV,GAAP,MAAyBC,GAAzB,MACMC,GAAwC,MAAjBJ,MAA0BJ,GAAgC,KAApBA,EAAStoQ,QACtE+oQ,GAAyB,CAC3B,CACItmW,GAAI,IACJvlC,MAAOqwB,EAAE,wBAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,sCAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,0BAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,0BAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,sBAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,wCAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,4BAEb,CACIkV,GAAI,IACJvlC,MAAOqwB,EAAE,kBAgCXy7W,GAAwB,WAC1BX,GAAuB,SAAC51H,GAAD,OAAgBA,MAkB3C,OACG,qCACK,cAACw2H,EAAA,EAAD,CACI98R,KAAMy8R,GACNziQ,QAtCoB,WAC5B0iQ,IAAoB,IAsCZnwE,UApCiB,SAACtsN,GAE1BjgE,EAASu/B,YAAOk8T,EAAsC,UAAWx7R,IACjEy8R,IAAoB,GACpBV,EAAQ,kBAkCJ,cAACntR,EAAA,EAAD,CAAYpgC,UAAWF,EAAQwwD,OAA/B,SAAwC39G,EAAE,4BAC1C,cAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ2yC,KAA/B,SAAsC9/F,EAAE,2BACxC,qBAAKuvF,MAAO,CAAE+X,aAAc,IAA5B,SACG,cAAC7Z,EAAA,EAAD,CAAYlgC,UAAU,OAAOF,UAAWF,EAAQ2yC,KAAhD,SACI,cAAC,IAAD,CACI9/F,EAAGA,EACH4wB,QAAS,wBACTG,WAAY,CACR,cAACwwE,EAAA,EAAD,CAAqB5T,QAAQ,QAAQpgC,UAAU,SAASF,UAAWF,EAAQ2yC,KAAMvQ,MAAO,CAAEpV,eAAgB,aAAe2e,QAxC/G,WAC7Bl6E,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIymW,MAER/8V,EAASv+B,YAAK0iB,iBAoCgB,iBAK1B,sBAAMsqD,UAAWF,EAAQ2gC,UAAWyiN,SAAUqrE,YAAgCtlE,GApErE,WACR6kE,KAAgBI,IAIjB38V,EAASu/B,YAAOk8T,EAAsC,WAAYU,IAE9Dj+U,EACAw+U,IAAoB,GAGxBV,EAAQ,gBATRM,GAAa,OAkEb,SACI,eAACpuT,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACI,cAACb,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,SACI,cAAC,QAAD,CACIprE,KAAK,QACL07B,MAAO,CACHpJ,MAAO/U,EAAE,oBACT3wB,SAAS,EACTw+G,iBAAkB,CACdC,WAAW,GAEfF,WAAY,CACRz5G,KAAM,OAENs7G,SAAU,WACN7wE,EAAS,IAAIkK,MAGjBioE,WAAY,CACRC,eAAgB,cAAC,IAAD,CAAY3jC,UAAWF,EAAQ04C,UAK3D5X,SAAU,CACNgpF,IACAqB,KAEJ/qH,UAAWwgC,QAGnB,eAACjhC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,UACI,cAAC,QAAD,CACIprE,KAAK,YACL07B,MAAO,CACHpJ,MAAO/U,EAAE,wBACT3wB,SAAS,EACTw+G,iBAAkB,CACdC,WAAW,GAEfF,WAAY,CACRz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,aAIzB+4G,SAAU,CACNgpF,IACAG,KAEJ7pH,UAAWwgC,MAEf,cAAC,QAAD,CACItrG,KAAK,WACL07B,MAAO,CACHpJ,MAAO/U,EAAE,uBACT3wB,SAAS,EACTw+G,iBAAkB,CACdC,WAAW,GAEfF,WAAY,CACRz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,aAIzB+4G,SAAU,CACNgpF,IACAG,KAEJ7pH,UAAWwgC,SAGnB,eAACjhC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,UACI,cAACf,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,eAACkmD,EAAA,EAAD,CAAakiE,UAAU,EAAM5pH,UAAWF,EAAQgtT,YAAhD,UACI,cAAC0B,EAAA,EAAD,UAAa77W,EAAE,iBACf,cAAC+1F,EAAA,EAAD,CACIpmH,MAAOwrY,GACP1rR,SA9GP,SAAC2rB,GACtB,IAAM0gQ,EAAiB1gQ,EAAMn6G,OAAOtxB,MAEhCqrY,EADmB,MAAnBc,EACY,GAEAN,GAAU5lX,MAAK,SAAC+/B,GAAD,OAAUA,EAAKzgB,KAAO4mW,KAAgBnsY,OAErEurY,GAAa,GACbE,GAAgBU,IAoGQ,SAIKN,GAAUv+X,KAAI,SAAC8+X,GACZ,OACI,cAACvrR,EAAA,EAAD,CAA4B7gH,MAAOosY,EAAS7mW,GAA5C,SAAiD6mW,EAASpsY,OAA3CosY,EAAS7mW,cAOvB,MAAjBimW,IACI,cAACruT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAI0gC,MAAO,CAAEgB,UAAW,IAA9C,SACI,cAAC45M,EAAA,EAAD,CACI98O,UAAWF,EAAQitT,UACnBrlW,MAAO/U,EAAE,mBACTrwB,MAAOorY,EACPtrR,SApIX,SAAC2rB,GACtBA,EAAMC,UACN2/P,EAAY5/P,EAAMn6G,OAAOtxB,OACzBurY,GAAa,IAkImBtoR,aAAa,KACbqkF,UAAU,EACV70L,MAAOm5X,GACPz6Q,WAAYy6Q,GAAuBv7W,EAAE,2BAA6B,OAKhFi7W,GAAa,cAACe,EAAA,EAAD,CAAgB9mW,GAAG,cAAc9yB,MAAO64X,EAAxC,SAAoDj7W,EAAE,iCAEzE,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAM0hC,MAAO,CAAEgB,UAAW,IAAvD,UAEI,uBAAOp8G,KAAK,OAAOsO,KAAK,QAAQ8sG,MAAO,CAAChgC,MAAO,EAAGi2C,OAAQ,EAAGrE,QAAS,KACtE,cAAC,QAAD,CACI1+G,KAAK,WACL07B,MAAO,CACHpJ,MAAO/U,EAAE,uBACT3wB,SAAS,EACTw+G,iBAAkB,CACdC,WAAW,GAEfF,WAAY,CACRz5G,KAAM0mY,EAAsB,WAAa,OACzCp4X,KAAM,WACNmwG,aAAc,eAEd7B,WAAY,CACRC,eAAgB,cAAC,IAAD,CAAmB3jC,UAAWF,EAAQ04C,OACtD+vM,aACI,cAAC13M,EAAA,EAAD,CACIC,MAAOn+F,EAAE,mBACTo+F,UAAU,MAFd,SAII,cAACxF,EAAA,EAAD,CACIvrC,UAAWF,EAAQ04C,KACnB/M,QAAS2iR,GAFb,SAIKZ,EAAsB,cAAC,IAAD,IAAqB,cAAC,IAAD,WAOpE5sR,SAAU,CACNgpF,IACAuB,KAEJjrH,UAAWwgC,SAGnB,cAACjhC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,SACI,cAAC,QAAD,CACIprE,KAAK,kBACL07B,MAAO,CACHpJ,MAAO/U,EAAE,8BACT3wB,SAAS,EACTw+G,iBAAkB,CACdC,WAAW,GAEfF,WAAY,CACRz5G,KAAM0mY,EAAsB,WAAa,OACzCp4X,KAAM,WAENsuG,WAAY,CACRC,eAAgB,cAAC,IAAD,CAAoB3jC,UAAWF,EAAQ04C,OACvD+vM,aACI,cAAC13M,EAAA,EAAD,CAASC,MAAOn+F,EAAE,mBAAoBo+F,UAAU,MAAhD,SACI,cAACxF,EAAA,EAAD,CAAQvrC,UAAWF,EAAQ04C,KAAM/M,QAAS2iR,GAA1C,SACKZ,EAAsB,cAAC,IAAD,IAAqB,cAAC,IAAD,WAOpE5sR,SAAU,CAACgpF,IAAU4B,KACrBtrH,UAAWwgC,QAGnB,cAACjhC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACI,cAAC+qC,EAAA,EAAD,CAAQzkH,KAAK,SAASw5G,QAAQ,YAAYzT,MAAM,UAAUqV,MAAO,CAAEgB,UAAW,IAA9E,SACKvwF,EAAE,2C,iIClUzByjG,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C2+B,UAAW,CACPv+B,MAAO,QAEXs2C,KAAM,CACFzK,SAAU,OACV3F,YAAa,OAEjBkoB,OAAQ,CACJviB,SAAU,UACVoV,WAAY,IACZ7C,WAAY,UACZzM,UAAW,SACXhnB,MAAO,sBACPotB,aAAc,QAElBxH,KAAM,CACF1E,SAAU,UACVoV,WAAY,IACZ7C,WAAY,OACZ4gJ,cAAe,QACfrtJ,UAAW,QAEf+6Q,iBAAkB,GAGlB76Q,OAAQ,CACJ5xC,OAAQL,EAAMZ,WAElB2tT,WAAY,CACR1sT,OAAQL,EAAMZ,WAElB4tT,YAAa,CACTx/P,YAAaxtD,EAAMZ,QAAQ,IAE/B6tT,sBAAuB,CACnB5sT,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,SAEV8tT,SAAU,CACN9sT,MAAO,IACP2xC,UAAW,SACX1xC,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,KAAnB,cAA6BY,EAAMZ,QAAQ,GAA3C,OAEV6rT,UAAW,CACP7qT,MAAO,QAEX4uC,MAAO,CACH3uC,OAAO,qBAIT8sT,GAAmCjtR,wBAAcktR,MACjDC,GAAgCntR,wBAAcotR,GA8IrCC,GA7IkC,WAC7C,IAAQ18W,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KAChB,EAAoC9wE,mBAAS,GAA7C,mBAAO6zU,EAAP,KAAmBmW,EAAnB,KACA,EAAoChqV,oBAAS,GAA7C,mBAAOiqV,EAAP,KAAmBC,EAAnB,KACM/7U,EAAgBkgK,eACtB,EAAwB25K,KAAXC,GAAb,EAAOrnM,KAAP,EAAaqnM,SACPkC,EAAgCn3V,sBAAY22V,IAC5CS,EAA6Bp3V,sBAAY62V,IAC/C,EAA8C7pV,oBAAS,GAAvD,mBAAOqqV,EAAP,KAAwBC,EAAxB,KACA,EAA4CtqV,mBAAS,IAArD,mBAAOuqV,EAAP,KAAuBC,EAAvB,KACMv+V,EAAW2F,wBACXoV,EAAShU,sBAAY8T,eACrB6kD,EAAU34D,sBAAY04D,gBAEtB++R,GADSzjV,EAAO9kC,MAAM,CAAC,gBAAiB,YACpB,OAAN8kC,QAAM,IAANA,OAAA,EAAAA,EAAQ3hD,IAAI,uBAAwB,+CAElDqlY,EAAY,uCAAG,4BAAAzjY,EAAA,sDACjB8gG,KAAmB9rE,kBAAgB0uW,WAAYx8U,KAC/C+7U,GAAc,GACRU,EAAmBR,EAAsBr4X,MAAMo4X,GAErD,IAAI5pV,SAAQ,SAACC,EAASi3B,GAAV,OACRxrC,EAAS,IAAIkiC,KAAmB,CAC5Bs9B,KAAMm/R,EACNpqV,UACAi3B,SACA4tB,gBAAiBglS,EACjBx+R,YAAaF,EAAQtmG,IAAI,eACzBymG,cAAey+R,QAEpB1yT,MAAK,WACJowT,EAAQ,kBACT4C,SAAQ,WACP5+V,EAASggC,YAAM69T,IACf79V,EAASggC,YAAM29T,OACfM,GAAc,MAnBD,2CAAH,qDAsBZ5V,EAAa,SAAC72X,GAAD,IAAgB82X,EAAhB,+DAA8C,WAC7DyV,GAAc,SAACc,GAAD,OAAcvW,EAAW92X,EAASqtY,EAAWrtY,OAK/D,OACI,qCACI,cAACq9G,EAAA,EAAD,CAAYpgC,UAAWF,EAAQwwD,OAA/B,SAAwC39G,EAAE,uCAC1C,qBAAKqtD,UAAWF,EAAQ8uT,iBAAxB,SACI,eAAC1R,EAAA,EAAD,CACI/D,WAAYA,EACZgE,YAAY,WAFhB,UAII,eAACC,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACK1qW,EAAE,qCAEP,cAAC2qW,EAAA,EAAD,CAAat9S,UAAWF,EAAQgvT,YAAhC,SACI,cAACrvT,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACI,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,cAAC6uT,GAAA,EAAD,CAAwBC,SAAU1W,EAAW,GAAI2W,oBAAqB,WAClE,OACI,qCACI,cAAChlR,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAAS,kBAAM8hR,EAAQ,gBAF3B,SAIK56W,EAAE,sBAEP,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRx5G,KAAK,SACLk5E,UAAWF,EAAQi0C,OACnBlnB,MAAM,UAJV,SAMKl6E,EAAE,oCAtBxB,GA+BX,eAACyqW,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACK1qW,EAAE,iDAEP,cAAC2qW,EAAA,EAAD,UACI,gCACI,cAACl9Q,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO,sBAAuBkhB,SAAU,SAAU7K,UAAW,MAAO+W,aAAc,OAAvH,SAAiItnG,EAAE,4DACnI,cAACgsS,EAAA,EAAD,CACIxwM,QAAS,cAAC6U,GAAA,EAAD,CAAUn2B,MAAM,UAAU+1B,QAAS+sQ,EAAiBvtR,SAAU,SAAC2rB,GAAD,OAAW6hQ,EAAmB7hQ,EAAMn6G,OAAOgvG,YAClHl7F,MAAO/U,EAAE,yDAEZg9W,EAAkB,cAAC7yE,EAAA,EAAD,CACf98O,UAAWF,EAAQitT,UACnBrlW,MAAO/U,EAAE,kCACTrwB,MAAOutY,EACPztR,SAzDD,SAAC2rB,GAC5B+hQ,EAAkB/hQ,EAAMn6G,OAAOtxB,QAyDHijH,aAAa,KACbqkF,UAAU,IACT,KACL,gCACI,cAACr+E,EAAA,EAAD,CACIE,QAASmuQ,GAAY,GACrB/sR,MAAM,UACN7sB,UAAWF,EAAQ+uT,WAHvB,SAKKl8W,EAAE,sBAEP,cAAC44F,EAAA,EAAD,CACIE,QAASukR,EACT1vR,QAAQ,YACRtgC,UAAWF,EAAQi0C,OACnBlnB,MAAM,UACNiX,SAAUyrR,GAAeI,IAAoBE,EALjD,SAOKl9W,EAAE,sBAGX,qBAAKuvF,MAAO,CAAEgB,UAAW,QAAzB,SACI,cAAC9C,EAAA,EAAD,CAAYlgC,UAAU,OAAO2sB,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAApE,SACI,cAAC,IAAD,CACI9/F,EAAGA,EACH4wB,QAAS,8BACTG,WAAY,CACR,cAACwwE,EAAA,EAAD,CAAkB5T,QAAQ,QAAQtgC,UAAWF,EAAQ2yC,KAAMuB,KAAM+7Q,EAAan8W,OAAO,SAASgiT,IAAI,YAAvF,qBA3C5B,YC/JzBx/M,GAAYJ,aAAW,iBAAO,CAChCsa,OAAQ,CACJnN,WAAY,KAEhBoE,YAAa,CACTxZ,SAAU,SACVlhB,MAAO,2BAiCA2jS,GA9BkC,SAAC,GAK3C,IAAD,IAJFC,0BAIE,SAHFC,EAGE,EAHFA,gBACAj+Q,EAEE,EAFFA,KACAqb,EACE,EADFA,YAEQn7G,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX4oC,EAAUs2C,KAShB,OACI,sBAAKlU,MAAO,CAAEx/B,QAAS,QAAvB,UACI,cAAC09B,EAAA,EAAD,CAAYE,QAAQ,KAAKD,MAAM,SAASm4C,cAAc,EAAMx4E,UAAWF,EAAQwwD,OAA/E,SAAwF39G,EAAE,oCAC1F,cAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQynD,YAA/B,SAA6C50G,EAAE,gDAC/C,cAACytF,EAAA,EAAD,CAAYo4C,cAAc,EAAMx4E,UAAWF,EAAQynD,YAAnD,SAAiE50G,EAAE,gDACnE,sBAAKuvF,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,SAAUquT,IAAK,OAA9D,UACI,cAACplR,EAAA,EAAD,CAAQjL,QAASmwR,EAAqB,OAAS,YAAa5jS,MAAM,UAAU4e,QAdvD,WAC7BqiB,IACAv8F,EAASv+B,YAAK0iB,gBAYN,SAAgH/C,EAAE,mCACjH89W,EAAqB,cAACllR,EAAA,EAAD,CAAQjL,QAAQ,YAAYzT,MAAM,UAAU4e,QAXlD,WACxBqiB,IACe,OAAf4iQ,QAAe,IAAfA,QAS8B,SAA2Ej+Q,IAAiB,Y,uCClC5Hm+Q,GAAcvlW,IAAMC,mBAAc5oC,GAC3B4qY,GAAiB,WAC1B,IAAMx9X,EAAUu7B,IAAMgG,WAAWu/V,IACjC,QAAgBluY,IAAZoN,EACA,MAAM,IAAItB,MAAM,qDAEpB,OAAOsB,GAEEw+X,GAAoB,oBA0ClBuC,IAzCwB,WACnC,MAAwBvrV,mBAAe,eAAvC,mBAAO4gJ,EAAP,KAAaqnM,EAAb,KACMn2D,EAAa9+R,sBAAY8pF,aAA+BksQ,KACxDhsY,EAAQ8qC,mBAAQ,iBAAO,CAAE84J,OAAMqnM,aAAY,CAACrnM,EAAMqnM,IAClDh8V,EAAW2F,wBACX42F,EAAc,WAChBy/P,EAAQ,eACRh8V,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIymW,GACJ/8R,MAAM,KAEVhgE,EAASggC,YAAMy7T,IACfz7V,EAASggC,YAAMu/T,QAEnB,OACI,eAAC,KAAD,CACI56Q,SAAUo4Q,GACV5zQ,WAAY,CACRxY,MAAO,CACHx/B,QAAS,YACTN,SAAU,UAGlB0rD,YAAaA,EARjB,UAUI,qBAAK5rB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,YAA/C,SACI,cAACg/C,GAAA,EAAD,CAAY7V,QAASqiB,EAAa5rB,MAAO,CAAEx/B,QAAS,GAApD,SACI,cAAC,KAAD,CAAWw/B,MAAO,CAAE6L,SAAU,cAGtC,cAAC6iR,GAAY5jW,SAAb,CAAsB1qC,MAAOA,EAA7B,SACI,sBAAK4/G,MAAO,CAAEx/B,QAAS,UAAvB,UACc,gBAATwjH,GAA0B,cAAC,EAAD,IACjB,gBAATA,GAA0B,cAAC,GAAD,IACjB,gBAATA,GAA0B,cAAC,GAAD,CAAap4D,YAAaA,EAAa2iQ,mBAAkB,OAAEr5D,QAAF,IAAEA,OAAF,EAAEA,EAAYq5D,mBAAoBC,gBAAe,OAAEt5D,QAAF,IAAEA,OAAF,EAAEA,EAAYs5D,gBAAiBj+Q,KAAI,OAAE2kN,QAAF,IAAEA,OAAF,EAAEA,EAAY3kN,iB,6BCzD1M,qEAoCItP,EAAW93E,IAAM8E,YAAW,SAAkBW,EAAOzuC,GACvD,IAYI6oI,EAZAprD,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzBA,OAAiC,IAArBD,EAA8B,KAAOA,EACjD8wT,EAAwBjgW,EAAMkgW,eAC9BA,OAA2C,IAA1BD,GAA2CA,EAC5DE,EAAcngW,EAAMwX,KACpBA,OAAuB,IAAhB2oV,EAAyB,WAAaA,EAC7C/kR,EAAWp7E,EAAMo7E,SACjBglR,EAAepgW,EAAMo6F,SACrB3jH,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,YAAa,iBAAkB,OAAQ,WAAY,aAQxH,OAJKA,EAAMgzE,WACTonB,OAA4BxoI,IAAjBwuY,EAA6BA,GAAgB,GAGnD7lW,IAAMwB,cAAcgsL,IAAUnoL,YAAS,CAC5CqjF,QAAQ,EACRzrE,KAAMA,EACN4iF,SAAUA,EACVhrD,UAAWA,EACXgsC,SAAUA,EACV8kR,eAAgBA,EAChBlxT,QAAS,CACPqxT,MAAOrxT,EAAQqxT,OAEjBnxT,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAWksC,GAAYpsC,EAAQosC,UAAW8kR,GAAkBlxT,EAAQsxT,SAClG/uY,IAAKA,GACJklB,OAuDUs6D,iBAlHK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAMuyB,YAAS,GAAIoxC,EAAM82C,WAAW+S,MAAO/vD,YAAgB,CACzD4+C,UAAW,GACX3B,WAAY,EACZC,cAAe,EACf/2C,UAAW,aACXG,MAAO,OACP+uC,SAAU,SACVoM,WAAY,UACXv7C,EAAMc,YAAYO,GAAG,MAAO,CAC7Bq3C,UAAW,UAKb42Q,QAAS,GAGTllR,SAAU,GAGVilR,MAAOzgW,YAAS,GAAIoxC,EAAM82C,WAAWu/B,MAAO,CAC1C39B,UAAW,YA0FiB,CAChCplH,KAAM,eADOysE,CAEZshC,I,6BC1HH,IAAIoqG,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,oNACD,eAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,kFA+BMwmI,EAAuC,SAAC,GAAD,IAAGC,EAAH,EAAGA,eAAgBpkW,EAAnB,EAAmBA,SAAU4yC,EAA7B,EAA6BA,QAA7B,OAC3CwxT,EACI,eAAC,IAAD,CAAOtxT,UAAWF,EAAQwxT,eAA1B,cAA6CpkW,EAA7C,OACAA,GA6GS2uC,sBACbgG,aAtCa,SAACC,GAAD,MAAwB,CACrC3jE,KAAM,CACJ87G,aAAcn4C,EAAMZ,QAAQ,KAC5Bi3C,OAAQ,QAEVm5Q,eAAgB,CACdruT,SAAU,EACVk1C,OAAQ,OACRj2C,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,IAEzBqwT,eAAgB,CACdt3Q,aAAcn4C,EAAMZ,QAAQ,KAC5BgB,MAAO,OACP+uC,SAAU,SACV4C,UAAW,SACX,QAAS,CACPsE,OAAQ,SAGZq5Q,UAAW,CACTtuR,UAAWphC,EAAMZ,QAAQ,KACzB2rB,MAAO,SAET4kS,eAAgB,CACdvuR,UAAWphC,EAAMZ,QAAQ,MAE3BwwT,SAAU,CACR79Q,UAAW,SACXzxC,SAAU,OAEZuvT,aAAc,CACZ9kS,MAAO,QACPC,eAAgB,YAMlB/mD,YAAgB,gBAFH81B,EA1G2B,SAAC/qC,GACzC,IACE0nF,EAUE1nF,EAVF0nF,KACAo5Q,EASE9gW,EATF8gW,QACAC,EAQE/gW,EARF+gW,SACAF,EAOE7gW,EAPF6gW,aACAL,EAMExgW,EANFwgW,eACAE,EAKE1gW,EALF0gW,UACAM,EAIEhhW,EAJFghW,gBACArwB,EAGE3wU,EAHF2wU,eACA3hS,EAEEhvC,EAFFgvC,QACAntD,EACEme,EADFne,EAGF,OACE,cAAC0+W,EAAD,CAAWC,eAAgBA,EAAgBxxT,QAASA,EAApD,SACE,eAAC,IAAD,CACEE,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SACVc,KAAK,SACLV,QAAQ,SACRb,WAAW,SANb,UAQE,eAAC,IAAD,CACEW,MAAM,EACNR,UAAWF,EAAQyxT,eACnBrvR,MAAOu/P,GAAkBA,EAAe8vB,eAAiB9vB,EAAe8vB,eAAiB,GAH3F,UAKI/4Q,EAAQ,qBAAKpL,IAAKoL,EAAMyX,IAAKt9G,EAAE,kBAAqB,KACpDi/W,GAAoB,QAExB,eAAC,IAAD,CACEpxT,MAAM,EACNR,UAAWF,EAAQ4xT,SAFrB,UAKwB,kBAAbG,EACL,cAAC,IAAD,CAAYvxR,QAAQ,KAApB,SAA0BuxR,IACxBA,EAEJL,IACqB,kBAAdA,EACL,cAAC,IAAD,CAAYlxR,QAAQ,QAAQtgC,UAAWF,EAAQ0xT,UAA/C,SACGA,IAGH,qBAAKxxT,UAAWF,EAAQ0xT,UAAxB,SACGA,KAKLG,GACE,cAAC,IAAD,CAAMnxT,MAAM,EAAMR,UAAWF,EAAQ2xT,eAArC,SACE,cAAC,IAAD,CAAQ5kS,MAAM,UAAUyT,QAAQ,YAAhC,SACE,cAAC,IAAD,CAAMtgC,UAAWF,EAAQ6xT,aAAc97X,GAAI87X,EAA3C,SACIG,GAAmBn/W,EAAE,sC,6BC9F3C,sCAAIo/W,EAAQC,EAAOC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAASC,EAASC,EAASC,EAASC,EAAUC,EAASC,EAASC,EAAnJ,OAEIC,EAAY,CAAC,QAAS,WAE1B,SAASviW,IAA2Q,OAA9PA,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAASvpB,UAAUV,GAAI,IAAK,IAAIsB,KAAO2oB,EAAc7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAAQ0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAY,OAAO0oB,GAAkB8c,EAAS7hC,MAAMjI,KAAM0D,WAEhT,SAASw5C,EAAyBjwB,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAAkE3oB,EAAKtB,EAAnEgqB,EAEzF,SAAuCC,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAA2D3oB,EAAKtB,EAA5DgqB,EAAS,GAAQgvP,EAAa59Q,OAAO0D,KAAKmrB,GAAqB,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IAAOsB,EAAM03Q,EAAWh5Q,GAAQwiM,EAAShlL,QAAQlc,IAAQ,IAAa0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAQ,OAAO0oB,EAFxM0c,CAA8Bzc,EAAQu4K,GAAuB,GAAIpnM,OAAOkgB,sBAAuB,CAAE,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAAS,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IAAOsB,EAAMmhM,EAAiBziM,GAAQwiM,EAAShlL,QAAQlc,IAAQ,GAAkBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KAAgB0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAU,OAAO0oB,EAMne,SAASs/W,EAAejmW,EAAMkmW,GAC5B,IAAIriR,EAAQ7jF,EAAK6jF,MACbsiR,EAAUnmW,EAAKmmW,QACftiW,EAAQgT,EAAyB7W,EAAMgmW,GAE3C,OAAoB,gBAAoB,MAAOviW,EAAS,CACtDusO,MAAO,6BACPC,QAAS,cACTh7J,MAAO,CACLi7J,UAAW,kCAEbhlJ,OAAQ,IACRj2C,MAAO,IACP7/E,IAAK8wY,EACL,kBAAmBC,GAClBtiW,GAAQggF,EAAqB,gBAAoB,QAAS,CAC3DjpF,GAAIurW,GACHtiR,GAAS,KAAMihR,IAAWA,EAAsB,gBAAoB,QAAS,KAAM,w6FAAs7F,gBAAoB,IAAK,CACniG7vR,MAAO,CACLi7J,UAAW,mCAEC,gBAAoB,OAAQ,CAC1Cj7L,MAAO,GACPi2C,OAAQ,GACRsX,KAAM,UACNxM,UAAW,4CACX/gB,MAAO,CACLi7J,UAAW,qCAEG,gBAAoB,IAAK,CACzCj7J,MAAO,CACLi7J,UAAW,mCAEC,gBAAoB,OAAQ,CAC1Cj7L,MAAO,GACPi2C,OAAQ,GACRsX,KAAM,UACNxM,UAAW,wCACX/gB,MAAO,CACLi7J,UAAW,qCAEG,gBAAoB,IAAK,CACzCj7J,MAAO,CACLi7J,UAAW,mCAEC,gBAAoB,OAAQ,CAC1Cj7L,MAAO,GACPi2C,OAAQ,GACRsX,KAAM,UACNxM,UAAW,4CACX/gB,MAAO,CACLi7J,UAAW,qCAEG,gBAAoB,IAAK,CACzCj7J,MAAO,CACLi7J,UAAW,mCAEC,gBAAoB,IAAK,CACvCl6I,UAAW,4DACX/gB,MAAO,CACLi7J,UAAW,mCAEZ60H,IAAUA,EAAqB,gBAAoB,OAAQ,CAC5DtlY,EAAG,4GACH+iI,KAAM,aACHwiQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEvlY,EAAG,wJACH+iI,KAAM,aACHyiQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChExlY,EAAG,6DACH+iI,KAAM,aACH0iQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEzlY,EAAG,mEACH+iI,KAAM,aACH2iQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChE1lY,EAAG,8CACH+iI,KAAM,aACH4iQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChE3lY,EAAG,+GACH+iI,KAAM,aACH6iQ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChE7iQ,KAAM,UACN/iI,EAAG,kDACA6lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChE9iQ,KAAM,UACN/iI,EAAG,gDACA8lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChE/iQ,KAAM,UACN/iI,EAAG,0CACA+lY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEhjQ,KAAM,UACN/iI,EAAG,mDACAgmY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEjjQ,KAAM,UACN/iI,EAAG,wCACAimY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEjmY,EAAG,0FACH+iI,KAAM,aACHmjQ,IAAYA,EAAuB,gBAAoB,OAAQ,CAClElmY,EAAG,oDACH+iI,KAAM,aACHojQ,IAAaA,EAAwB,gBAAoB,UAAW,CACvEpjQ,KAAM,UACN6tI,GAAI,KACJC,GAAI,KACJt6I,UAAW,oCACR6vQ,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEpmY,EAAG,iDACH+iI,KAAM,aACHsjQ,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEtjQ,KAAM,UACN/iI,EAAG,2CACAsmY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEvjQ,KAAM,UACN/iI,EAAG,8CAIP,IAAI2zU,EAA0B,aAAiB6yD,GAChC,K,6BCnIf,+EAqBatC,EAAcvlW,qBAAoB3oC,GAClC4qY,EAAiB,WAC1B,IAAMx9X,EAAUu7B,aAAiBulW,GACjC,QAAgBluY,IAAZoN,EACA,MAAM,IAAItB,MAAM,oDAEpB,OAAOsB,I,6BC3BX,0GA8BIw2C,EA9BJ,uBAgCaC,GAhCb,MAgCkC,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,wDAAkH,CAChH7Y,UAGGp0B,mBAKI0kW,EAA4B,kBAAMzkU,YAC7C8M,KACA,SAAC3Y,GAAD,OAAoDA,EAAMjjC,IAAI,uBAGnDszW,EAA0B,SAACzC,GAAD,OAAsC/hU,YAC3E8M,KACA,SAAC3Y,GAAD,OAAoD4tU,EAA0B5tU,EAAMjjC,IAAI,iBAAiBA,IAAI6wW,GAA2B5tU,EAAMjjC,IAAI,sB,8uBCjBvI0oY,GAAkC,kC,IA8QhCx3T,kBACbgG,aA7Qa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJwjH,WAAY,QACZj/C,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,IAE/BoyT,WAAY,CACV,cAAe,UAEjBC,eAAgB,CACdrwR,UAAWphC,EAAMZ,QAAQ,MAE3BkqT,WAAY,CACV1oT,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B/hE,KAAM,CACJg5G,OAAQ,QACRj2C,MAAO,QAET0gF,IAAK,CACH32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,GACvBstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACTvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG1C3wE,aAAc,CACZl3J,aAAc,WACdc,WAAY,SACZpM,SAAU,aAgPO,CAAE2E,WAAW,IAChC7vE,YAAgB,gBAChBgwE,IACAtQ,mBA/C0B,WAC1B,IAAM+tR,EAAa9uL,YAA2B2uL,IACxCI,EAAqBrxQ,YAA+BixQ,IACpDK,EAAmChvP,cACnCivP,EAA8CpgL,cAC9CqgL,EAAwChvP,cACxCivP,EAAkClvP,cAExC,OAAO,SAAyB/2G,GAC9B,IAGIgU,EAHE4lU,EAAkBosB,EAAsChmW,GACxDkmW,EAAUD,EAAgCjmW,GAG1CmmW,EAAwBvsB,EAAgBhgW,MAAM,CAAC,OAAQ,OACvDwsX,EAAwBxsB,EAAgBhgW,MAAM,CAAC,OAAQ,OAE7D,GAAIusX,IAA0BC,EAAuB,CACnD,IAAMC,EAAeH,EAAQ3hY,QAAO,SAAAyuR,GAAE,OAAIA,EAAGj2R,IAAI,QAAUopY,KACrDG,EAAsBJ,EAAQ3hY,QAAO,SAAAyuR,GAAE,OAAIA,EAAGj2R,IAAI,QAAUopY,KAClEnyV,EAAOqyV,EAAah0X,QAAb,MAAAg0X,EAAY,YAAYC,QAC1B,CACL,IAAMD,EAAeH,EAAQ3hY,QAAO,SAAAyuR,GAAE,OAAIA,EAAGj2R,IAAI,QAAUopY,GAAyBnzG,EAAGj2R,IAAI,QAAUqpY,KAC/FE,EAAsBJ,EAAQ3hY,QAAO,SAAAyuR,GAAE,OAAIA,EAAGj2R,IAAI,QAAUopY,KAC5DI,EAAsBL,EAAQ3hY,QAAO,SAAAyuR,GAAE,OAAIA,EAAGj2R,IAAI,QAAUqpY,KAClEpyV,EAAOqyV,EAAah0X,QAAb,MAAAg0X,EAAY,YAAYC,GAAZ,mBAAoCC,KAEzD,MAAQ,CACN5iS,KAAMiiS,EAAW5lW,GACjBm9N,aAAc0oI,EAAmB7lW,GACjCwmW,2BAA4BV,EAAiC9lW,GAC7DymW,mBAAoBV,EAA4C/lW,GAChEgU,OACA4lU,uBAKqB,SAACj2U,GAC1B,MAAO,CACLA,eAIWsqC,EAvN+D,SAAC/qC,GAC7E,IACEne,EASEme,EATFne,EACAmtD,EAQEhvC,EARFgvC,QACAgC,EAOEhxC,EAPFgxC,MACAvwC,EAMET,EANFS,SACAw5N,EAKEj6N,EALFi6N,aACAnpN,EAIE9Q,EAJF8Q,KACAwyV,EAGEtjW,EAHFsjW,2BACAC,EAEEvjW,EAFFujW,mBACA7sB,EACE12U,EADF02U,gBAIA8sB,EAEEvpI,EAFFupI,kBACAC,EACExpI,EADFwpI,eAGFlpW,aAAgB,WACdkG,EAAS,IAAI26B,IAAmC,OAC/C,IAEH,MAAoC7gC,WAAe,IAAnD,mBAAOg+E,EAAP,KAAmB6H,EAAnB,KAQMsjR,EAA0Bh9M,qBADR,SAAApzD,GAAU,OAAI7yF,EAAS,IAAI26B,IAAmC,CAACk4D,kBAC7B,KAE1D,OACE,+BACE,eAACqwQ,EAAA,EAAD,CACEv+Q,SAAUm9Q,GACV5yR,WAAW,EACXv9B,SAAU,KACV4qD,YAda,WACjBv8F,EAAS,IAAI66B,MAAoC,IACjD76B,EAAS,IAAI0J,IAA6B,CAAEs2D,MAAM,EAAO1pE,GAAIwrW,OAQ3D,SAME,gBAAC56Q,EAAA,EAAD,CAAOz4C,UAAWF,EAAQ3hE,KAA1B,UACE,eAACiiG,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQsrT,WAFrB,SAIGz4W,EAAE,6CAEL,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQsjD,gBAArC,SACE,eAAC05L,EAAA,EAAD,CACEiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SAAU,SAACpzG,GACT,IAAMo1H,EAAap1H,EAAE4kB,OAAOtxB,MAC5B4uH,EAAckT,IACVA,GAA6B,KAAfA,IAChBowQ,EAAwBpwQ,IAG5B3jB,WAAW,EACXmR,YAAaj/F,EAAE,+CACf+wF,WAAY,CACVC,eAAgB,eAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACd,eAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQC,KAAK,eAKvD,eAACrsC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAuB,IAAd9+B,EAAKj/C,MAAcyxY,GAA8BC,EAAqB,SAAW,aAC1Fx0T,WAAW,SACXG,UAAWF,EAAQ3gE,KACnBiiE,KAAK,SANP,SAQGgzT,GAA8BC,EAC7B,uCACE,eAAC7rE,EAAA,EAAD,CAAkB37N,MAAM,YACxB,eAACuT,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACiC3tF,EAA7ByhX,EAA+B,2BAAgC,mDAGvD,IAAdxyV,EAAKj/C,KACH,uCACE,eAACy9G,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,8CAEL,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACGp7F,EAAE,qDAEL,gBAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAAS,IAAIq7B,IAAqC,CAAC6mN,aAAc,uBAFlF,eAGI9gQ,EAAE,gDAER,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,aACRb,WAAW,SACXuB,KAAK,SACL8gC,MAAO,CAACiW,OAAQ,OAAQ8B,aAAc,GAAIk0L,UAAW,QANvD,SAQIvsQ,EAAKhyC,KAAI,SAAC4zL,EAAUzgM,GAClB,IAAM0wR,EAAejwF,EAAS74L,IAAI,QAC5B6oR,EAAahwF,EAAS74L,IAAI,MAC1BqpY,EAAwBxsB,EAAgBhgW,MAAM,CAAC,OAAQ,OACvDusX,EAAwBvsB,EAAgBhgW,MAAM,CAAC,OAAQ,OACvDktX,EAAwBlxM,EAAS74L,IAAI,QAAUqpY,EAC/CW,EAAwBnxM,EAAS74L,IAAI,QAAUopY,EACrD,OACE,eAACt0T,EAAA,EAAD,CAEEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRV,UAAWF,EAAQ8iF,IACnBn3C,QAAS,WACPl6E,EAAS,IAAIutE,IAA6C,CACxDhC,UAAWw3R,EACX9gH,aACA+gH,qBAVN,SAcE,gBAAC90T,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHP,UAKE,eAAC3B,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,KAAtB,SACE,eAACk+B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQ2zM,aAAcvxK,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAApG,SACG0nK,OAGHkhH,GAAyBD,IACzB,gBAACj1T,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMc,KAAK,SAAS8gC,MAAO,CAAChgC,MAAO,QAApE,UACGyyT,GACC,eAAC9jR,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+CAAlB,SACE,eAAC,IAAD,CAAYk6E,MAAM,cAGrB6nS,GACC,eAAC7jR,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6CAA8CuvF,MAAO,CAAC4M,WAAY,GAApF,SACE,eAAC,IAAD,CAAcjiB,MAAM,qBAhCzB9pG,UA6CN,IAAd6+C,EAAKj/C,MACJ,eAAC88E,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,SAA3C,SACE,eAAC6qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAASv+B,YAAK,GAAD,OAAI2kB,iBAAJ,OAAoBQ,uCAChD2rF,SAAwB,IAAdliE,EAAKj/C,MAAc0xY,EAH/B,SAIE1hX,EAAE,yD,uCCiPOiiX,I,YAiEfC,I,YAuBAC,I,YA4BAC,I,YA4EAC,I,YAkDAC,I,YAmDAC,I,YAyBAC,I,YA0BAC,I,YA0CAC,I,YA0CAC,I,YAmDAC,I,YAmDAC,I,YAkCAC,I,YA6DAC,I,YAoDAC,I,YA4DAC,I,YA2CAC,I,YAgDAC,I,YAiDAC,I,YAUAC,I,YA8BAC,I,YAUAC,I,YAqGAC,I,YA0DAC,I,YAkCAC,I,YA6CAC,I,YAwBAC,I,YA4FAC,I,YAmDAC,I,YAqBAC,I,YAiBAC,I,YAkBAC,I,YAoBAC,I,YAkDAC,I,YAuDAC,I,YA0DAC,I,YAkDAC,I,YAgBAC,I,YAgBAC,I,YA6CA5b,I,YA6CA6b,I,YAqCAC,I,YA0COC,I,YAqEPC,I,YAqDOC,I,YAiFAC,I,YAuDAC,I,YAwCPC,I,YAmDAC,I,YA0CAC,I,YAOAC,I,YA2HAC,I,YA0BOC,I,YAiDAC,I,YA+BPC,I,YAwBOC,I,YAuCAC,I,YAmCAC,I,YAsCAC,I,YAoDAC,I,YAqCAC,I,YAoCAC,I,YA8BPC,I,YAmGOC,I,YA0CAC,IAxnGJ1c,GAAwB,SAAC2c,EAAsCt0V,GAC1E,IAAIu0V,EAAyBt/X,cAAI,CAC/Bu/X,kBAAkB,EAClBC,2CAA2C,EAC3CC,4BAA4B,EAC5BC,8BAA8B,EAC9BC,+BAA+B,EAC/BC,iBAAiB,EACjBC,wCAAwC,EACxCC,8BAA8B,EAC9BC,iCAAiC,EACjCC,iCAAiC,EACjCC,2BAA2B,EAC3BC,yDAAyD,EACzDC,4DAA4D,EAC5DC,6CAA6C,EAC7CC,+CAA+C,EAC/CC,yCAAyC,EACzCC,yEAAyE,EACzEC,8DAA8D,EAC9DC,gDAAgD,EAChDC,6DAA6D,EAC7DC,mDAAmD,EACnDC,mBAAmB,EACnBC,mCAAmC,EACnCC,+BAA+B,EAC/BC,gCAAgC,EAChCC,kBAAkB,EAClBC,0CAA0C,EAC1CC,sCAAsC,EACtCC,uCAAuC,EACvCC,gDAAgD,EAChDC,uCAAuC,EACvCC,iDAAiD,EACjDC,uBAAuB,EACvBC,iCAAiC,EACjCC,0CAA0C,EAC1CC,oDAAoD,EACpDC,uCAAuC,EACvCC,sCAAsC,EACtCC,mCAAmC,EACnCC,uBAAuB,EACvBC,mBAAmB,EACnBC,iCAAiC,EACjCC,gCAAgC,EAChCC,uCAAuC,EACvCC,iCAAiC,EACjCC,8BAA8B,EAC9BC,iDAAiD,EACjDC,yCAAyC,EACzCC,mDAAmD,EACnDC,iDAAiD,EACjDC,wCAAwC,EACxCC,4CAA4C,EAC5CC,2CAA2C,EAC3CC,mBAAmB,EACnBC,kCAAkC,EAClCC,oCAAoC,EACpCC,oCAAoC,EACpCC,yCAAyC,EACzCC,gBAAgB,EAChBC,8BAA8B,EAC9BC,mCAAmC,EACnCC,4BAA4B,EAC5BC,0CAA0C,EAC1CC,sBAAsB,EACtBC,2CAA2C,EAC3CC,kCAAkC,EAClCC,yCAAyC,EACzCC,yCAAyC,EACzCC,yCAAyC,EACzCC,gDAAgD,IAqOlD,OAlOmB,OAAnBvE,QAAmB,IAAnBA,KAAqBvlY,SAAQ,SAACsoX,GAAmB,IAAD,EAE9C,OADqB,OAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAejxX,IAAI,OAEzC,KAAK,EACHmuY,EAAyBA,EAAuBxqY,IAAI,oBAAoB,GACxE,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,mBAAmB,GACvE,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,6BAA6B,GACjF,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,qBAAqB,GACzE,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,oBAAoB,GACxE,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,yBAAyB,GAC7E,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,yBAAyB,GAC7E,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,qBAAqB,GACzE,MACF,KAAK,EACHwqY,EAAyBA,EAAuBxqY,IAAI,gCAAgC,GACpF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qBAAqB,GACzE,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kBAAkB,GACtE,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,wBAAwB,GAInE,OAAbstX,QAAa,IAAbA,GAAA,UAAAA,EAAejxX,IAAI,wBAAnB,SAAqC2I,SAAQ,SAACxM,GAE5C,OADeA,EAAK6D,IAAI,OAEtB,KAAK,GACHmuY,EAAyBA,EAAuBxqY,IAAI,6CAA6C,GACjG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,8BAA8B,GAClF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,gCAAgC,GACpF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,iCAAiC,GACrF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,0CAA0C,GAC9F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,gCAAgC,GACpF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mCAAmC,GACvF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mCAAmC,GACvF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2DAA2D,GAC/G,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,8DAA8D,GAClH,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,+CAA+C,GACnG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,iDAAiD,GACrG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2EAA2E,GAC/H,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,gEAAgE,GACpH,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kDAAkD,GACtG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,+DAA+D,GACnH,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qDAAqD,GACzG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qCAAqC,GACzF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,iCAAiC,GACrF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kCAAkC,GACtF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,4CAA4C,GAChG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,wCAAwC,GAC5F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,yCAAyC,GAC7F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kDAAkD,GACtG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,yCAAyC,GAC7F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mDAAmD,GACvG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mCAAmC,GACvF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,4CAA4C,GAChG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,sDAAsD,GAC1G,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,yCAAyC,GAC7F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,wCAAwC,GAC5F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qCAAqC,GACzF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mCAAmC,GACvF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kCAAkC,GACtF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,yCAAyC,GAC7F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mCAAmC,GACvF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mDAAmD,GACvG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qDAAqD,GACzG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,mDAAmD,GACvG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,0CAA0C,GAC9F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,8CAA8C,GAClG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,6CAA6C,GACjG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,oCAAoC,GACxF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,sCAAsC,GAC1F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,sCAAsC,GAC1F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,gCAAgC,GACpF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,qCAAqC,GACzF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,8BAA8B,GAClF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,4CAA4C,GAChG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,6CAA6C,GACjG,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,oCAAoC,GACxF,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,2CAA2C,GAC/F,MACF,KAAK,GACHwqY,EAAyBA,EAAuBxqY,IAAI,kDAAkD,UAM1Gi2C,IACFu0V,EAAyBA,EAAuBpsX,SAAQ,SAACxhB,GAAD,OAASq5C,EAAS,IAAMr5C,MAG3E4tY,GAWM,SAAUlE,KAAV,iEACb,OADa,SACP/hX,YAAYm/E,KAAmBuG,eAAgB6+R,IADxC,OAEb,OAFa,SAEPvkX,YAAYm/E,KAAmByH,6BAA8B49R,IAFtD,OAGb,OAHa,SAGPxkX,YAAYm/E,KAAmBuH,kBAAmB+9R,IAH3C,OAIb,OAJa,SAIPzkX,YAAYm/E,KAAmBqrS,gCAAiC9F,IAJzD,OAKb,OALa,UAKPjlX,YAAW0/E,KAAmByI,aAAc+8R,IALrC,QAMb,OANa,UAMPllX,YAAW0/E,KAAmB2I,0CAA2C88R,IANlE,QAOb,OAPa,UAOPnlX,YAAW0/E,KAAmB+I,qCAAsC28R,IAP7D,QAQb,OARa,UAQPplX,YAAW0/E,KAAmBmI,eAAgBw9R,IARvC,QASb,OATa,UASPrlX,YAAW0/E,KAAmByE,kBAAmBmhS,IAT1C,QAUb,OAVa,UAUPtlX,YAAW0/E,KAAmBmG,cAAeojR,IAVtC,QAWb,OAXa,UAWPjpW,YAAW0/E,KAAmBsrS,kBAAmBrG,IAX1C,QAYb,OAZa,UAYP3kX,YAAW0/E,KAAmBurS,oBAAqBrG,IAZ5C,QAab,OAba,UAaP5kX,YAAW0/E,KAAmBiG,gBAAiBk/R,IAbxC,QAcb,OAda,UAcP7kX,YAAW0/E,KAAmB+F,qBAAsBi/R,IAd7C,QAeb,OAfa,UAeP1kX,YAAW0/E,KAAmBmJ,gBAAiB28R,IAfxC,QAgBb,OAhBa,UAgBPxlX,YAAW0/E,KAAmBqJ,sBAAuBw8R,IAhB9C,QAiBb,OAjBa,UAiBPvlX,YAAW0/E,KAAmB2J,2BAA4Bo8R,IAjBnD,QAkBb,OAlBa,UAkBPzlX,YAAW0/E,KAAmBwrS,uCAAwCtF,IAlB/D,QAmBb,OAnBa,UAmBP5lX,YAAW0/E,KAAmByrS,aAAcnH,IAnBrC,QAoBb,OApBa,UAoBPhkX,YAAW0/E,KAAmByG,eAAgB+9R,IApBvC,QAqBb,OArBa,UAqBPlkX,YAAW0/E,KAAmB0rS,yBAA0B9G,IArBjD,QAsBb,OAtBa,UAsBPtkX,YAAW0/E,KAAmB2rS,2BAA4B7G,IAtBnD,QAuBb,OAvBa,UAuBPxkX,YAAW0/E,KAAmBiH,2BAA4B89R,IAvBnD,QAwBb,OAxBa,UAwBPzkX,YAAW0/E,KAAmB2G,iCAAkC89R,IAxBzD,QAyBb,OAzBa,UAyBPnkX,YAAW0/E,KAAmB6G,8CAA+C09R,IAzBtE,QA0Bb,OA1Ba,UA0BPjkX,YAAW0/E,KAAmB6J,qBAAsBm8R,IA1B7C,QA2Bb,OA3Ba,UA2BP1lX,YAAW0/E,KAAmBmK,0BAA2B87R,IA3BlD,QA4Bb,OA5Ba,UA4BP3lX,YAAW0/E,KAAmB4rS,yBAA0BvH,IA5BjD,QA6Bb,OA7Ba,UA6BP/jX,YAAW0/E,KAAmBmF,kBAAmBi/R,IA7B1C,QA8Bb,OA9Ba,UA8BP9jX,YAAW0/E,KAAmBuF,oBAAqB4+R,IA9B5C,QA+Bb,OA/Ba,UA+BP7jX,YAAW0/E,KAAmB6rS,0CAA2C9H,IA/BlE,QAgCb,OAhCa,UAgCPzjX,YAAW0/E,KAAmByF,iBAAkBy+R,IAhCzC,QAiCb,OAjCa,UAiCP5jX,YAAW0/E,KAAmB8rS,uCAAwC7H,IAjC/D,QAkCb,OAlCa,UAkCP3jX,YAAW0/E,KAAmBiF,kBAAmBkhS,IAlC1C,QAmCb,OAnCa,UAmCP7lX,YAAW0/E,KAAmB6D,yBAA0BggS,IAnCjD,QAoCb,OApCa,UAoCPvjX,YAAW0/E,KAAmB+D,2BAA4B+/R,IApCnD,QAqCb,OArCa,UAqCPjjX,YAAYm/E,KAAmBuD,sBAAuBmgS,IArC/C,QAsCb,OAtCa,UAsCP7iX,YAAYm/E,KAAmByD,oCAAqCkgS,IAtC7D,QAuCb,OAvCa,UAuCP9iX,YAAYm/E,KAAmB2D,wBAAyBigS,IAvCjD,QAwCb,OAxCa,UAwCPtjX,YAAW0/E,KAAmBW,oBAAqB6iS,IAxC5C,QAyCb,OAzCa,UAyCPljX,YAAW0/E,KAAmBa,sBAAuB4iS,IAzC9C,QA0Cb,OA1Ca,UA0CPnjX,YAAW0/E,KAAmBO,sBAAuB+iS,IA1C9C,QA2Cb,OA3Ca,UA2CPhjX,YAAW0/E,KAAmBI,wBAAyBmjS,IA3ChD,QA4Cb,OA5Ca,UA4CPjjX,YAAW0/E,KAAmBM,mCAAoCokS,IA5C3D,QA6Cb,OA7Ca,UA6CPpkX,YAAW0/E,KAAmBS,qCAAsCkkS,IA7C7D,QA8Cb,OA9Ca,UA8CPrkX,YAAW0/E,KAAmBiC,eAAgB6gS,IA9CvC,QA+Cb,OA/Ca,UA+CPxiX,YAAW0/E,KAAmBmC,6BAA8B0gS,IA/CrD,QAgDb,OAhDa,UAgDPviX,YAAW0/E,KAAmB6C,cAAemgS,IAhDtC,QAiDb,OAjDa,UAiDP1iX,YAAW0/E,KAAmB+C,gBAAiBkgS,IAjDxC,QAkDb,OAlDa,WAkDP3iX,YAAW0/E,KAAmBiE,0BAA2Bi/R,IAlDlD,SAmDb,OAnDa,WAmDP5iX,YAAW0/E,KAAmBmE,4BAA6Bg/R,IAnDpD,SAoDb,OApDa,WAoDP7iX,YAAW0/E,KAAmBqE,iBAAkB++R,IApDzC,SAqDb,OArDa,WAqDP9iX,YAAW0/E,KAAmBuE,mBAAoB8+R,IArD3C,SAsDb,OAtDa,WAsDP/iX,YAAW0/E,KAAmB+K,oCAAqCq7R,IAtD5D,SAuDb,OAvDa,WAuDP9lX,YAAW0/E,KAAmBsL,8BAA+B+6R,IAvDtD,SAwDb,OAxDa,WAwDP/lX,YAAW0/E,KAAmB+rS,gDAAiDzF,IAxDxE,SAyDb,OAzDa,WAyDPhmX,YAAW0/E,KAAmB0K,yBAA0B67R,IAzDjD,SA0Db,OA1Da,WA0DPjmX,YAAW0/E,KAAmBqK,0CAA2Cm8R,IA1DlE,SA2Db,OA3Da,WA2DPlmX,YAAW0/E,KAAmB6L,eAAgB46R,IA3DvC,SA4Db,OA5Da,WA4DPnmX,YAAW0/E,KAAmByM,iBAAkBi6R,IA5DzC,SA6Db,OA7Da,WA6DPpmX,YAAW0/E,KAAmBgsS,0CAA2ChI,IA7DlE,SA8Db,OA9Da,WA8DP1jX,YAAW0/E,KAAmB+M,4CAA6C45R,IA9DpE,0CAiEf,SAAU9D,GACN/iX,GADJ,mFAGwB,OAHxB,SAG8BlqB,YAAKmtY,GAAejjX,GAHlD,mBAGU8vB,EAHV,EAGUA,KAAM5J,EAHhB,EAGgBA,KACV4J,EAJN,oBAKUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,UAAW,UACtD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,UAAW,gBAEpD,OADTqrM,EAA+BorL,EAASz2X,MAAM,CAAC,UAAW,UAAW,cAR/E,iBAUMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAVxC,wBAYM,OAZN,UAYYsqD,YAAI,IAAIoI,KAAwC,CACpDu+G,UACA72M,QACAkiY,iBAfR,gCAmBI,OAnBJ,UAmBUhyS,YAAI,IAAIwI,KAAqC18D,IAnBvD,QAoBIppB,QAAQ7Z,MAAM,kBAAmB,CAACijC,QApBtC,yCAuBA,SAAU88V,GACNhjX,GADJ,mFAGwB,OAHxB,SAG8BlqB,YAAKmtY,GAAejjX,GAHlD,mBAGU8vB,EAHV,EAGUA,KAAM5J,EAHhB,EAGgBA,KACV4J,EAJN,oBAKUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,UAAW,UACtD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,UAAW,gBAEpD,OADTqrM,EAA+BorL,EAASz2X,MAAM,CAAC,UAAW,UAAW,cAR/E,iBAUMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAVxC,wBAYM,OAZN,UAYYsqD,YAAI,IAAIkI,KAA6B,CACzCy+G,UACA72M,QACAkiY,iBAfR,gCAmBI,OAnBJ,UAmBUhyS,YAAI,IAAIsI,KAA0Bx8D,IAnB5C,QAoBIppB,QAAQ7Z,MAAM,kBAAmB,CAACijC,QApBtC,iCAuBS,CACL4J,OACA5J,QAzBJ,yCA4BA,SAAU+8V,GACRjjX,GADF,mHAYM,OAZN,EAG+BA,EAAOgc,QAA5BqiF,EAHV,EAGUA,QAASv9E,EAHnB,EAGmBA,QAEXjsB,EAAQgO,KAAK+xB,MALrB,SAYY9+C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,CACJ8yC,UACAv9E,eAlBR,OA0DwB,OA1DxB,SAOIgP,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,IAcI50C,EAAMuxB,KAAK+xB,MACXy3V,EAAen5Y,OAAO+8C,OAAP,MAAA/8C,OAAM,CAAQ,IAAR,oBAAgB,OAACmrH,QAAD,IAACA,OAAD,EAACA,EAAiB9nF,MAAO,MAC9D+1W,EAAmBpuX,iBAAOmuX,GAC1BE,EAAa,CACjBvrH,YAAasrH,EAAiB52X,MAAM,CAAC,OAAQ,UAAY,KACzD88F,UAAW85R,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAC1Dk9F,WAAY05R,EAAiB52X,MAAM,CAAC,aAAc,QAAU,KAC5Ds9F,OAAQs5R,EAAiB52X,MAAM,CAAC,SAAU,QAAU,KACpDwyV,gBAAiBokC,EAAiB52X,MAAM,CAAC,kBAAmB,QAAU,KACtEyyV,eAAgBmkC,EAAiB52X,MAAM,CAAC,iBAAkB,QAAU,KACpE82X,gBAAiBF,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAChE+2X,eAAgBH,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEg3X,eAAgBJ,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEi3X,gBAAiBL,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpEk3X,gBAAiBN,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,MAGlEm3X,GAAY,OAAC3mW,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,OAAQ,KAClDrzB,GAAe,OAACvjC,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8BA,QAAS,KAErD4pY,GAAc/8V,IACbx+C,EAAMujB,EAAQ8N,kBAChBkqX,EAAY,IACZpjU,EAAe,mBAEfojU,EAAY,IACZpjU,EAAe,sBAIb0xB,GAAO,UAACrrD,GAAQ5J,SAAT,eAAsBi1D,OAAQ,GACrC+7B,EAASzgI,OAAM,UAAC0kG,EAAK+7B,cAAN,aAAC,EAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,EAAiB3xS,EAAK2xS,eAAL,eAA2B3xS,EAAK2xS,gBAAmB,UACnE3xS,EAAK2xS,sBACL3xS,EAAK+7B,OAxDd,UA0D8BriC,YAAOj1C,eA1DrC,eA0DQ+B,EA1DR,OA4DE45C,IAAmB9rE,kBAAgBs9W,aAAnC,iDACEF,YACApjU,eACAytD,UACGq1Q,GACApxS,GACA2xS,GACAnrV,IAnEP,kBAsES,CACL7R,OACA5J,QAxEJ,yCA4EA,SAAUg9V,GACRljX,GADF,yFAeM,OAfN,EAQOA,EAAOgc,QAJVykP,EAJJ,EAIIA,SACAE,EALJ,EAKIA,WACAn3D,EANJ,EAMIA,QACAwjL,EAPJ,EAOIA,aAPJ,SAeYl3Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,sBACV9vB,KAAM,CACJy/B,UAAWy1K,OApBnB,OAwBwB,OAxBxB,SAUI3wO,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAXJ,SAwB8B2uD,YAAOj1C,eAxBrC,UAwBQ+B,EAxBR,OAyBE45C,IAAmB9rE,kBAAgByzW,aAAnC,aACEziH,WACAE,aACAn3D,WACG7nK,KAED7R,EA/BN,oBAgCUq8V,EAAWjuX,iBAAO4xB,GAET,MADoBq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,YAjC7E,iBAmCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAnCxC,4BAqCUk9V,EArCV,iBAsCQ,OAtCR,UAsCc5yS,YAAIl5F,eAAK8rY,IAtCvB,gCA0CIlwX,QAAQ7Z,MAAM,kBAAmB,CAACijC,QA1CtC,iCA4CS,CACL4J,OACA5J,QA9CJ,yCAkDA,SAAUi9V,GACNnjX,GADJ,yFAgBM,OAhBN,EAQMA,EAAOgc,QAJT0lP,EAJJ,EAIIA,WACAC,EALJ,EAKIA,aACAn4D,EANJ,EAMIA,QACAwjL,EAPJ,EAOIA,aAPJ,SAgBYl3Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,CACJ0hU,iBAAkBvrH,OArB1B,OAyBwB,OAzBxB,SAWI5xO,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,IAZJ,SAyB8B2uD,YAAOj1C,eAzBrC,UAyBQ+B,EAzBR,OA0BE45C,IAAmB9rE,kBAAgBy9W,qBAAnC,aACExrH,aACAC,eACAn4D,WACG7nK,KAED7R,EAhCN,oBAiCUq8V,EAAWjuX,iBAAO4xB,GAET,MADoBq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,mBAlC7E,iBAoCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApCxC,4BAsCUk9V,EAtCV,iBAuCQ,OAvCR,UAuCc5yS,YAAIl5F,eAAK8rY,IAvCvB,gCA2CIlwX,QAAQ7Z,MAAM,oBAAqB,CAACijC,QA3CxC,iCA6CS,CACL4J,OACA5J,QA/CJ,yCAmDA,SAAUk9V,GACRpjX,GADF,qFAYM,OAZN,EAIwDA,EAAOgc,QAArDjG,EAJV,EAIUA,GAAIsoF,EAJd,EAIcA,QAASv9E,EAJvB,EAIuBA,QAAS6/O,EAJhC,EAIgCA,WAAYn3D,EAJ5C,EAI4CA,QAJ5C,SAYY1zN,YAAKotY,GAAc,IAAIpgS,IAAmB,CAAE29K,SAAU1qP,EAAI4qP,aAAYn3D,aAZlF,OAoBM,OApBN,WAOI15K,KAPJ,EAQI5J,IARJ,SAoBYpwC,YAAKktY,GAAY,IAAI9gS,KAAoB,CAC/CphE,UACAu9E,aAtBN,kBAeIvuE,KAfJ,EAgBI5J,IAhBJ,yCAyBA,SAAUm9V,GACNrjX,GADJ,qFAYM,OAZN,EAI0DA,EAAOgc,QAAvDjG,EAJV,EAIUA,GAAIsoF,EAJd,EAIcA,QAASv9E,EAJvB,EAIuBA,QAAS6gP,EAJhC,EAIgCA,aAAcn4D,EAJ9C,EAI8CA,QAJ9C,SAYY1zN,YAAKqtY,GAAgB,IAAIngS,IAAqB,CAAE0+K,WAAY3rP,EAAI4rP,eAAcn4D,aAZ1F,OAoBM,OApBN,WAOI15K,KAPJ,EAQI5J,IARJ,SAoBYpwC,YAAK8wY,GAAiB,IAAIl6R,KAAsB,CACxD5rE,UACAu9E,aAtBJ,kBAeI8uR,MAfJ,EAgBIC,KAhBJ,yCA0BA,SAAU9J,GACRtjX,GADF,iFAYM,OARFygQ,EACGzgQ,EAAOgc,QADVykP,SAJJ,SAYY3qR,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CACNujE,UAAWy1K,OAjBnB,mBAOI3wO,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAaE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAEV,OADRygF,EAAwB47Q,EAASz2X,MAAM,CAAC,UAAW,UAAW,WAAY3I,kBAAQmL,SAvB5F,iBAyBM4E,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA2BM,OA3BN,UA2BYsqD,YAAIl5F,eAAK,GAAD,OAAI6nB,qBAAJ,YAA0BwnG,EAAO13H,IAAI,SA3BzD,gCA8BIikB,QAAQ7Z,MAAM,yBAA0B,CAACijC,QA9B7C,QAgCE,OAhCF,UAgCQk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAlCV,iCAoCS,CACL3vD,OACA5J,QAtCJ,yCA0CA,SAAUq9V,GACNvjX,GADJ,iFAYM,OARF0hQ,EACE1hQ,EAAOgc,QADT0lP,WAJJ,SAYY5rR,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV5zD,OAAQ,CACNwlW,iBAAkBvrH,OAjB1B,mBAOI5xO,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAaE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAER,OADV4hJ,EAA0By6M,EAASz2X,MAAM,CAAC,UAAW,UAAW,kBAAmB3I,kBAAQmL,SAvBrG,iBAyBM4E,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA2BM,OA3BN,UA2BYsqD,YAAIl5F,eAAK,GAAD,OAAI8nB,uBAAJ,YAA4B0oK,EAAS74L,IAAI,SA3B7D,gCA8BIikB,QAAQ7Z,MAAM,2BAA4B,CAACijC,QA9B/C,QAgCE,OAhCF,UAgCQk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAlCV,iCAoCS,CACL3vD,OACA5J,QAtCJ,yCA0CA,SAAUs9V,GACRxjX,GADF,uFAmBM,OAfFgc,EACEhc,EADFgc,QAGWqxW,EAETrxW,EAFFgvE,UACA63K,EACE7mP,EADF6mP,QAGI73K,EAA0B,MAAdqiS,EAAqBA,EAAaxqH,EAAQhqR,IAAI,MAXlE,SAmBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,sBACV9vB,KAAK,eACAs3M,EAAQxvQ,aA1BrB,mBAcIy8B,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAgBE4J,EA/BN,oBAgCU+tE,EAAW3/F,iBAAO4xB,GAER,OADV4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,aAjChF,iBAmCM,OAnCN,UAmCY0kF,YAAI,IAAIpN,MAAwB,IAnC5C,QAoCM,OApCN,UAoCYoN,YAAI36B,YAAM0zR,MApCtB,QAqCM,OArCN,UAqCY/4P,YAAI36B,YAAM6tU,MArCtB,QAsCM,OAtCN,UAsCYlzS,YAAI,IAAI4G,IAAiC0+G,IAtCrD,QAuCM,OAvCN,UAuCYtlH,YAAI,IAAIoH,KAA0B,CAACwJ,eAvC/C,gCAyCMluF,QAAQ7Z,MAAM,mBAAoB6sC,GAzCxC,gCA4CI,OA5CJ,UA4CUsqD,YAAI,IAAI0O,KAAoB,CAAC5iE,SA5CvC,iCA8CS,CACL4J,OACA5J,QAhDJ,yCAmDA,SAAUu9V,GACNzjX,GADJ,uFAmBM,OAfFgc,EACEhc,EADFgc,QAGWqxW,EAETrxW,EAFFgvE,UACA63K,EACE7mP,EADF6mP,QAGI73K,EAA0B,MAAdqiS,EAAqBA,EAAaxqH,EAAQhqR,IAAI,MAXlE,SAmBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,uBACV9vB,KAAK,eACAs3M,EAAQxvQ,aA1BrB,mBAcIy8B,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAgBE4J,EA/BN,oBAgCU+tE,EAAW3/F,iBAAO4xB,GAER,OADV4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,oBAjChF,iBAmCM,OAnCN,UAmCY0kF,YAAI,IAAIjN,MAA0B,IAnC9C,QAoCM,OApCN,UAoCYiN,YAAI36B,YAAM0zR,MApCtB,QAqCM,OArCN,UAqCY/4P,YAAI36B,YAAM8tU,MArCtB,QAsCM,OAtCN,UAsCYnzS,YAAI,IAAI8G,IAAmCw+G,IAtCvD,QAuCM,OAvCN,UAuCYtlH,YAAI,IAAIsH,KAA4B,CAACsJ,eAvCjD,gCAyCMluF,QAAQ7Z,MAAM,mBAAoB6sC,GAzCxC,gCA4CI,OA5CJ,UA4CUsqD,YAAI,IAAI0O,KAAoB,CAAC5iE,SA5CvC,iCA8CS,CACL4J,OACA5J,QAhDJ,yCAmDA,SAAUw9V,GACR1jX,GADF,iFAUM,OAPEgrF,EAAoBhrF,EAAOgc,QAHnC,SAUYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,CACJy/B,iBAfR,mBAKIl7D,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAaE4J,EAnBN,oBAoBUq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAAWysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aArB3D,iBAuBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvBxC,wBAyBM,OAzBN,UAyBYsqD,YAAI,IAAI4G,IAAiC0+G,IAzBrD,QA0BM,OA1BN,UA0BYtlH,YAAI,IAAIoH,KAA0B,CACtCwJ,eA3BR,gCA+BIluF,QAAQ7Z,MAAM,kBAAmB,CAACijC,QA/BtC,yCAkCA,SAAUy9V,GACN3jX,GADJ,8FAKmB,OAFXgrF,EAAgChrF,EAAOgc,SAH/C,iBAYQ,OAZR,SAYclmC,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBACV9vB,KAAM,CACJ0hU,iBAAkBjiS,OAjB5B,mBAOMl7D,EAPN,EAOMA,KACA5J,EARN,EAQMA,KAaE4J,EArBR,oBAsBYq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAAWysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,oBAvB7D,iBAyBQoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzB1C,wBA2BQ,OA3BR,UA2BcsqD,YAAI,IAAI8G,IAAmCw+G,IA3BzD,QA4BQ,OA5BR,UA4BctlH,YAAI,IAAIsH,KAA4B,CACxCsJ,eA7BV,gCAiCMluF,QAAQ7Z,MAAM,kBAAmB,CAACijC,QAjCxC,gCA6CQ,OA7CR,UA6CcpwC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBAhDlB,oBAwCMvrD,EAxCN,EAwCMA,KACA5J,EAzCN,EAyCMA,KAUE4J,EAnDR,iBAsDM,OAFMq8V,EAAWjuX,iBAAO4xB,GAClB4vK,EAAgCysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,oBArDlF,UAsDY0kF,YAAI,IAAI8G,IAAmCw+G,IAtDvD,gCAwDM5iM,QAAQ7Z,MAAM,mBAAoB,CAACijC,QAxDzC,yCA6DA,SAAU09V,GACR4J,GADF,2FAmBM,OAfFxxW,EACEwxW,EADFxxW,QAIAogS,EAGEpgS,EAHFogS,UACAqxE,EAEEzxW,EAFFyxW,SACAl9Q,EACEv0F,EADFu0F,OAVJ,SAmBYz6H,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mCACV9vB,KAAMglD,MAvBZ,mBAcIzgF,EAdJ,EAcIA,KAdJ,EAeI5J,KAWE4J,EA1BN,oBA2BU+tE,EAAW3/F,iBAAO4xB,GAClB4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,YACtEmtQ,EAAUnjE,EAAS7mN,IAAI,GACvBmyG,EAAY63K,EAAQhqR,IAAI,MACd,MAAZ6mN,EA/BR,iBAgCM5iM,QAAQ7Z,MAAM,mBAAoB6sC,GAhCxC,wBAmCM,OADAssR,EAAU18G,GAlChB,UAmCYtlH,YAAI,IAAI8I,KAnCpB,QAsC4B,OAtC5B,UAsCkCrO,YAAOj1C,eAtCzC,QAsCY+B,EAtCZ,OAuCM45C,IAAmB9rE,kBAAgBi+W,oBAAnC,yBACEC,kBAAmB,EACnBC,mBAAmB,EACnBC,cAAc,EACdptH,SAAUz1K,GACPo/Q,GAAsBvnG,EAAQntQ,MAAM,CAAC,WAAY,qBAAqBrC,QACtEsuC,IA7CX,gCAiDI8rV,IAjDJ,yCAoDA,SAAU5J,GAAgC7jX,GAA1C,qGAmBM,OAjBFgc,EACEhc,EADFgc,QAIAixW,EAMEjxW,EANFixW,iBACA18Q,EAKEv0F,EALFu0F,OACAu9Q,EAIE9xW,EAJF8xW,iBACAjmB,EAGE7rV,EAHF6rV,YACAzrD,EAEEpgS,EAFFogS,UACAqxE,EACEzxW,EADFyxW,SAXJ,SAmBY33Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,6BACV5zD,OAAQ,CACNwlW,oBAEF1hU,KAAM,CACJglD,SACAu9Q,wBA5BR,mBAcIh+V,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAiBE4J,EAhCN,oBAiCU+tE,EAAW3/F,iBAAO4xB,GAClBixK,EAAwCljG,EAASnoG,MAAM,CAAC,UAAW,UAAW,WAC9Eq4X,EAAUhtL,EAAQloN,IAAI,GACb,MAAXkoN,EApCR,iBAqCMjkM,QAAQ7Z,MAAM,mBAAoB6sC,GArCxC,wBAwCM,OADAssR,EAAUr7G,GAvChB,UAwCY3mH,YAAI,IAAIgJ,KAxCpB,QA2C4B,OADhBq9K,EAAWstH,EAAQl1Y,IAAI,MA1CnC,UA2CkCg8F,YAAOj1C,eA3CzC,QA4C+B,OADnB+B,EA3CZ,iBA4CqCkzC,YAAOmsH,YAAmB,CAAEh2G,UAAWiiS,KA5C5E,QA4CYe,EA5CZ,OA6CMzyS,IAAmB9rE,kBAAgBi+W,oBAAnC,qCACEC,iBAAkBV,EAClBW,kBAAmB/lB,EACnBgmB,cAAc,EACdptH,YACG2pG,GAAsB4jB,EAAiBt4X,MAAM,CAAC,WAAY,oBAAqB,kBAAkBrC,QACjG+2W,GAAsB2jB,EAAQr4X,MAAM,CAAC,WAAY,qBAAqBrC,QACtEsuC,IApDX,gCAwDI8rV,IACA3wX,QAAQ7Z,MAAM,yCAA0C,CAACijC,QAzD7D,yCA4DA,SAAU49V,GACN0J,GADJ,2FAaM,OATFxxW,EACEwxW,EADFxxW,QAJJ,SAaYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oCACV9vB,KAAMvvC,EAAQ3oB,WAjBpB,mBAQIy8B,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAWE4J,EApBN,oBAqBU+tE,EAAW3/F,iBAAO4xB,GAClB4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,mBACtEmtQ,EAAUnjE,EAAS7mN,IAAI,GACvBmyG,EAAY63K,EAAQhqR,IAAI,MACd,MAAZ6mN,EAzBR,iBA0BM5iM,QAAQ7Z,MAAM,mBAAoB6sC,GA1BxC,wBA+BM,OAHMm+V,EAAeprH,EAAQhqR,IAAI,SAC3Bq1Y,EAAYD,EAAap1Y,IAAI,GAC7By5F,EAAsB,MAAb47S,EAAoBA,EAAUr1Y,IAAI,WAAQjI,EA9B/D,UA+BYwpG,YAAI,IAAI8G,IAAmCw+G,IA/BvD,QAgCM,OAhCN,UAgCY5pN,YAAKq4Y,KAAuB,IAAIzsS,KAA4B,CAACsJ,YAAW1Y,YAhCpF,QAiCM,OAjCN,UAiCY8H,YAAI,IAAI9N,KAAc/8D,OAAKkhG,iBAjCvC,QAkCM,OAlCN,UAkCYr2B,YAAI,IAAIkJ,KAlCpB,QAmCM,OAnCN,UAmCYlJ,YAAIl5F,eAAK+nB,0BAnCrB,gCAsCI,OAtCJ,UAsCUmxE,YAAI,IAAI0O,KAAoB,CAAC5iE,SAtCvC,QAuCI,OAvCJ,UAuCUk0D,YAAI,IAAI+F,KAAkC,CAAEksR,OAAO,KAvC7D,yCA2CA,SAAU0X,GACR/jX,GADF,2FAgBM,OAhBN,EAQMA,EAJFgc,QACMgvE,EALV,EAKMj1E,GALN,IAMMq4W,0BANN,kBAgBYt4Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,4BArBlB,mBAWIvrD,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAaE4J,EAzBN,oBA0BU+tE,EAAW3/F,iBAAO4xB,GAEH,OADfu+V,EAAqCxwR,EAASnoG,MAAM,CAAC,UAAW,UAAW,aA3BrF,iBA6BM,OA7BN,UA6BY0kF,YAAI,IAAI4G,IAAiCqtS,IA7BrD,gCA+BMvxX,QAAQ7Z,MAAM,mBAAoB6sC,GA/BxC,mCAkCIhzB,QAAQ7Z,MAAM,QAASijC,GACjB01D,EAAe19E,iBAAOgoB,GACtB42D,EAAOlB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAEjD04X,GAA+B,MAATtxS,EAtC9B,iBAuCM,OAvCN,UAuCY1C,YAAIl5F,eAAKynB,mBAvCrB,QAyCI,OAzCJ,UAyCUyxE,YAAI,IAAIgH,KAzClB,iCA2CS,CACLtxD,OACA5J,QA7CJ,yCAgDA,SAAU89V,GACNhkX,GADJ,2FAgBM,OAhBN,EAQMA,EAJFgc,QACMgvE,EALV,EAKMj1E,GALN,IAMMq4W,0BANN,kBAgBYt4Y,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,6BArBlB,mBAWIvrD,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAaE4J,EAzBN,oBA0BU+tE,EAAW3/F,iBAAO4xB,GAER,OADV4hJ,EAAgC7zE,EAASnoG,MAAM,CAAC,UAAW,UAAW,oBA3BhF,iBA6BM,OA7BN,UA6BY0kF,YAAI,IAAI8G,IAAmCwwF,IA7BvD,gCA+BM50K,QAAQ7Z,MAAM,mBAAoB6sC,GA/BxC,mCAkCIhzB,QAAQ7Z,MAAM,QAASijC,GACjB01D,EAAe19E,iBAAOgoB,GACtB42D,EAAOlB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAEjD04X,GAA+B,MAATtxS,EAtC9B,iBAuCM,OAvCN,UAuCY1C,YAAIl5F,eAAKynB,mBAvCrB,QAyCI,OAzCJ,UAyCUyxE,YAAI,IAAIkH,KAzClB,iCA2CS,CACLxxD,OACA5J,QA7CJ,yCAiDA,SAAU+9V,GACRjkX,GADF,2EAKE,OALF,EAIoCA,EAAOgc,QAAjCsyW,EAJV,EAIUA,WAAYtjS,EAJtB,EAIsBA,UAJtB,SAKQ5Q,YAAI,IAAInwD,KAA8B,IAL9C,OAME,OANF,SAMQn0C,YAAKuuY,GAAmB,IAAI7+R,IAAwB,CAAE8oS,aAAYtjS,eAN1E,OAOE,OAPF,SAOQl1G,YAAKwuY,GAAiB,IAAIl/R,IAAsB4F,IAPxD,wCAUA,SAAUk5R,GACRlkX,GADF,mFAIE,OAJF,EAGkDA,EAAOgc,QAA/CgvE,EAHV,EAGUA,UAAWujS,EAHrB,EAGqBA,aAAcC,EAHnC,EAGmCA,YAHnC,SAIQp0S,YAAI,IAAInwD,KAA8B,IAJ9C,OAYM,OAZN,SAYYn0C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV5zD,OAAQ,CACNujE,YACAujS,gBAEFhjU,KAAMijU,EAAYn7X,WApBxB,mBAOIy8B,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,IAeG4J,EAvBP,iBAwBIhzB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QAxBxD,wBA0BI,OA1BJ,UA0BUpwC,YAAKwuY,GAAiB,IAAIl/R,IAAsB4F,IA1B1D,yCA8BA,SAAUm5R,GACRnkX,GADF,qFAKE,OALF,EAIqFA,EAAOgc,QAAlFgvE,EAJV,EAIUA,UAAWyjS,EAJrB,EAIqBA,SAAUC,EAJ/B,EAI+BA,QAASC,EAJxC,EAIwCA,WAAYvlB,EAJpD,EAIoDA,WAAYwlB,EAJhE,EAIgEA,OAAQC,EAJxE,EAIwEA,SAJxE,SAKQz0S,YAAI,IAAInwD,KAA8B,IAL9C,OAME,OANF,SAMQn0C,YAAKsuY,GAAgB,IAAI1+R,IAAqB,CAAEsF,YAAWyjS,WAAUC,UAASC,aAAYvlB,aAAYwlB,SAAQC,cANtH,OAOE,OAPF,SAOQ/4Y,YAAKwuY,GAAiB,IAAIl/R,IAAsB4F,IAPxD,wCAUA,SAAUo5R,GACRpkX,GADF,mIAsCM,OAlCFgc,EACEhc,EADFgc,QAIAgvE,EAOEhvE,EAPFgvE,UARJ,EAeMhvE,EANFyyW,gBATJ,MASe,KATf,IAeMzyW,EALF0yW,eAVJ,MAUc,GAVd,IAeM1yW,EAJF2yW,kBAXJ,MAWiB,KAXjB,EAYIvlB,EAGEptV,EAHFotV,WAZJ,EAeMptV,EAFF4yW,cAbJ,MAaa,GAbb,IAeM5yW,EADF6yW,gBAdJ,MAce,GAdf,EAiBQC,EAAWH,EACf,CAAC,CACCF,WACAE,aACAvlB,aACAwlB,OAAO,YAAKA,KAEdF,EAAQ5wY,KAAI,SAACi4B,EAAI9kC,GAAL,MAAgB,CAC1Bw9Y,WACAjmF,OAAQzyR,EACRqzV,aACAwlB,OAAO,YAAKA,GACZ5+N,IAAK6+N,EAAS59Y,IAAU,SA7B9B,SAsCY6E,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJknB,MAAO,CACLr7D,KAAK,YACA03W,UA/CjB,mBAiCIh/V,EAjCJ,EAiCIA,KACA5J,EAlCJ,EAkCIA,KAqBE4J,EAvDN,oBAwDUqtD,EAAgBj/E,iBAAO4xB,GACvBi/V,EAAwB5xS,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,UAC3Cq5X,EAAsBl+Y,KA1DhE,iBA6DqB,OA7DrB,UA6D2BgkG,YAAOt5C,gBA7DlC,QA8DM,OADMC,EA7DZ,iBA8DY1lD,YAAKk5Y,IAAa,IAAI1hV,KAAkB,CAAC9R,YA9DrD,QA+DuB,OA/DvB,UA+D6Bq5C,YAAO90C,gBA/DpC,QAiE2B,OAFfyvF,EA/DZ,OAgEYy/P,EAAWz/P,EAAS32I,IAAI,gBAAkB22I,EAAS32I,IAAI,kBAhEnE,UAiEiCg8F,YAAOmrH,eAjExC,QAyF4B,OAxBhBkvL,EAjEZ,OAkEYC,EAlEZ,OAkEiCD,QAlEjC,IAkEiCA,OAlEjC,EAkEiCA,EAAc7uY,QAAO,SAAAkoN,GAAI,OAAIxvN,cAAIwvN,EAAM,WAAaA,EAAK7yM,MAAM,CAAC,YAAa,SAAW8lC,KAC7G4zV,EAnEZ,OAmE+BF,QAnE/B,IAmE+BA,OAnE/B,EAmE+BA,EAAc7uY,QAAO,SAAAkoN,GAAI,OAAIxvN,cAAIwvN,EAAM,SAAWA,EAAK7yM,MAAM,CAAC,YAAa,SAAW8lC,KACzG6zV,EAAuBD,GAAoBA,EAAiB3uY,QAAO,SAACutI,EAAKu6E,GAC7E,OAAOv6E,EAAMu6E,EAAK7yM,MAAM,CAAC,OAAQ,WAChC,IAAM,EACH45X,EAAyBX,EAAa,KAAOI,EAAsBtuY,QAAO,SAACutI,EAAKu6E,GACpF,OAAOv6E,EAAMu6E,EAAK7yM,MAAM,CAAC,OAAQ,WAChC,GACG65X,IAA2BF,EAAuBC,GAA0B,SAASpgJ,QAAQ,GAE7FsgJ,EAAcb,EAChB,CACEM,WACAzzV,SACAmzV,WAAYI,EAAsBr5X,MAAM,CAAC,EAAG,SAAU,SACtD+5X,SAAUV,EAAsBr5X,MAAM,CAAC,EAAG,OAC1Cg6X,eAAiC,OAAlBP,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBt+Y,OAAQ,GAAK,GAElD,CACEo+Y,WACAzzV,SACAm0V,eAAgBliU,WAAW8hU,IAvFvC,UAyFkC16S,YAAOj1C,eAzFzC,QAyFY+B,EAzFZ,OA0FYiuO,EAAY++G,EAAal/W,kBAAgBmgX,eAAiBngX,kBAAgBogX,eAChFt0S,IAAmBq0L,EAAnB,2BACK4/G,GACA7tV,IA7FX,gCAiGI7kC,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QAjGtD,yCAqGA,SAAUm+V,GACRrkX,GADF,mGAkBM,OAdFgc,EACEhc,EADFgc,QAIAsyW,EAEEtyW,EAFFsyW,WACAtjS,EACEhvE,EADFgvE,UAEIujS,EAAeD,EAAWz1Y,IAAI,MAXtC,SAkBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV5zD,OAAQ,CACNujE,YACAujS,oBAxBR,mBAaIz+V,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAeE4J,EA7BN,oBA8BUqtD,EAAgBj/E,iBAAO4xB,IACAqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IA/BpF,iBAiCqB,OAjCrB,UAiC2Bm/E,YAAOt5C,gBAjClC,QAkCM,OADMC,EAjCZ,iBAkCY1lD,YAAKk5Y,IAAa,IAAI1hV,KAAkB,CAAC9R,YAlCrD,QAmCuB,OAnCvB,UAmC6Bq5C,YAAO90C,gBAnCpC,QA+C4B,OAZhByvF,EAnCZ,OAoCYy/P,EAAWz/P,EAAS32I,IAAI,gBAAkB22I,EAAS32I,IAAI,kBACvD81Y,EAAaL,EAAW54X,MAAM,CAAC,SAAU,SACzC+xS,EAAW6mF,EAAW54X,MAAM,CAAC,OAAQ,SAErC85X,EAAc,CAClBP,WACAzzV,SACAxmD,KAAM25Y,EAAa,SAAW,OAC9BmB,eAAgBnB,GAA0BlnF,EAC1C1xR,GAAIw4W,GA7CZ,UA+CkC15S,YAAOj1C,eA/CzC,QA+CY+B,EA/CZ,OAgDM45C,IAAmB9rE,kBAAgBsgX,iBAAnC,2BACKP,GACA7tV,IAlDX,gCAsDI7kC,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QAtDtD,yCA0DA,SAAUo+V,GACRtkX,GADF,+EAOE,OAHWgrF,EACPhrF,EADFgc,QAJJ,SAOQo+D,YAAI,IAAInwD,KAA8B,IAP9C,OAeM,OAfN,SAeYn0C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV5zD,OAAQ,CACNujE,iBApBR,OAyBE,OAzBF,SAUIl7D,EAVJ,EAUIA,KAVJ,EAWI5J,IAXJ,UAyBQk0D,YAAI,IAAInwD,KAA8B,IAzB9C,YA2BM6F,EA3BN,iBA8BI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBkgW,EAAyC7yS,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,SA7BtG,UA8BU0kF,YAAI,IAAIkL,IAA+B0qS,IA9BjD,yCAkCA,SAAUzL,GACRvkX,GADF,qFAkBM,OAdFgc,EACEhc,EADFgc,QAIAgvE,EAEEhvE,EAFFgvE,UACA+yL,EACE/hQ,EADF+hQ,MATJ,SAkBYjoS,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,wBACV9vB,KAAK,eACAwyN,EAAM1qR,QAEXo0B,OAAQ,QA3BhB,mBAaIqI,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAkBE4J,EAhCN,oBAiCUqtD,EAAgBj/E,iBAAO4xB,GAET,OADdmgW,EAAe9yS,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAlCpE,iBAoCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApCxC,wBAsCM,OAtCN,UAsCYsqD,YAAI,IAAIwL,IAAqCqqS,IAtCzD,gCAyCI,OAzCJ,UAyCU71S,YAAI,IAAI0O,KAAoB,CAAC5iE,SAzCvC,yCA6CA,SAAUs+V,GACRxkX,GADF,6EAYE,OAREgc,EACEhc,EADFgc,QAGWqxW,EAETrxW,EAFFgvE,UACA63K,EACE7mP,EADF6mP,QAGI73K,EAA0B,MAAdqiS,EAAqBA,EAAaxqH,EAAQhqR,IAAI,MAXlE,SAYQuhG,YACJ,IAAI0N,IACF/6F,eACE,CACE81Q,EAAQrmR,IAAI,KAAMwuG,OAhB5B,OAqBE,OArBF,SAqBQl1G,YAAK4uY,GAAe1kX,GArB5B,wCAwBA,SAAUykX,GACRzkX,GADF,iGAsBM,OAlBFgc,EACEhc,EADFgc,QAIAgvE,EAMEhvE,EANFgvE,UACAs9Q,EAKEtsV,EALFssV,mBACAx+J,EAIE9tL,EAJF8tL,YAIE9tL,EAHFk0W,SAXJ,EAcMl0W,EAFFogS,iBAZJ,MAYgB,kBAAM,MAZtB,IAcMpgS,EADFyxW,gBAbJ,MAae,kBAAM,MAbrB,WAsBY33Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJu+I,oBA7BV,mBAiBIh6K,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAgBE4J,EAlCN,oBAmCU+tE,EAAW3/F,iBAAO4xB,GAED,QADjBqgW,EAAiBtyR,EAASnoG,MAAM,CAAC,UAAW,UAAW,iBApCjE,iBAsCM,OAtCN,UAsCY0kF,YAAI,IAAIkT,KAAgC,CAAEtC,YAAW8+G,YAAaqmL,KAtC9E,QAuCM,OAvCN,UAuCY/1S,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,wCACRu0D,SAAU,aAzClB,QA6C4B,OAFtB0hO,IA3CN,UA6CkCvnO,YAAOj1C,eA7CzC,QA6CY+B,EA7CZ,OA+CMwuV,EAAe3uY,SAAQ,SAACgnX,GACtB,IAAM4nB,EAAqB9nB,EAAmB7xW,MAAK,SAAC45X,GAAD,OAAuBA,EAAkBx3Y,IAAI,sBAAwB2vX,EAAW3vX,IAAI,uBACvI,IAAKu3Y,GAAsBA,EAAmBv3Y,IAAI,eAAiB2vX,EAAW3vX,IAAI,aAChF,OAAQ2vX,EAAW3vX,IAAI,cACrB,IAAK,UACH0iG,IAAmB9rE,kBAAgB6gX,gBAAnC,aACE3qE,WAAY6iD,EAAW9yW,MAAM,CAAC,UAAW,OACzCyxM,QAASqhK,EAAW3vX,IAAI,WACxBmyG,aACGrpD,IAGL,MACF,IAAK,OACH45C,IAAmB9rE,kBAAgB8gX,aAAnC,aACE5qE,WAAY6iD,EAAW9yW,MAAM,CAAC,UAAW,OACzCyxM,QAASqhK,EAAW3vX,IAAI,WACxBmyG,aACGrpD,QAjEnB,wBA4EM,OADA7kC,QAAQ7Z,MAAM,mBAAoB6sC,GA3ExC,UA4EYsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,wEACRu0D,SAAU,WA9ElB,QAgFM+yS,IAhFN,gCAmFI,OAnFJ,UAmFUrzS,YAAI,IAAI0O,KAAoB,CAAC5iE,SAnFvC,QAoFI,OApFJ,UAoFUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,wEACRu0D,SAAU,WAtFhB,QAwFI+yS,IAxFJ,yCA4FA,SAAU/I,GACR1kX,GADF,uFAmBM,OAfFgc,EACEhc,EADFgc,QAGWqxW,EAETrxW,EAFFgvE,UACA63K,EACE7mP,EADF6mP,QAGI73K,EAA0B,MAAdqiS,EAAqBA,EAAaxqH,EAAQhqR,IAAI,MAXlE,SAmBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,gBACV9vB,KAAK,eACAs3M,EAAQxvQ,aA1BrB,mBAcIy8B,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAgBE4J,EA/BN,oBAgCU+tE,EAAW3/F,iBAAO4xB,GAER,OADV4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,aAjChF,iBAmCM,OAnCN,UAmCY0kF,YAAI,IAAIzL,MAAkB,IAnCtC,QAoCM,OApCN,UAoCYyL,YAAI,IAAI8N,KApCpB,QAqCM,OArCN,UAqCY9N,YAAI,IAAI0N,IAA2B43G,IArC/C,QAsCM,OAtCN,UAsCYtlH,YAAI,IAAIwN,KAAoB,CAACoD,eAtCzC,gCAwCMluF,QAAQ7Z,MAAM,mBAAoB6sC,GAxCxC,gCA2CI,OA3CJ,UA2CUsqD,YAAI,IAAI0O,KAAoB,CAAC5iE,SA3CvC,iCA6CS,CACL4J,OACA5J,QA/CJ,yCAmDA,SAAUy+V,GACR3kX,GADF,2EAaM,OATFgc,EACEhc,EADFgc,QAGAk0W,EACEl0W,EADFk0W,SAPJ,SAaYp6Y,YAAK4uY,GAAe1kX,GAbhC,qBAWI8vB,KAGS,MAdb,EAYI5J,IAZJ,iBAeI,OAfJ,UAeUk0D,YAAIl5F,eAAKgvY,IAfnB,gCAiBI,OAjBJ,UAiBU91S,YAAI,IAAI+F,KAAkC,CAAEksR,OAAO,KAjB7D,yCAqBA,SAAUuY,GACR5kX,GADF,yEAUM,OANFgrF,EACEhrF,EAAOgc,QADTgvE,UAJJ,SAUYl1G,YAAK0tY,GAAqBxjX,GAVtC,qBAQI8vB,KAGS,MAXb,EASI5J,IATJ,iBAYI,OAZJ,SAYUk0D,YAAIl5F,eAAK,GAAD,OAAI6nB,qBAAJ,YAA0BiiF,KAZ5C,+BAcI,OAdJ,UAcU5Q,YAAI,IAAI+F,KAAkC,CAAEksR,OAAO,KAd7D,yCAiBA,SAAUwY,GACN7kX,GADJ,yEAUM,OANFgrF,EACEhrF,EAAOgc,QADTgvE,UAJJ,SAUYl1G,YAAK2tY,GAAuBzjX,GAVxC,qBAQI8vB,KAGS,MAXb,EASI5J,IATJ,iBAYI,OAZJ,SAYUk0D,YAAIl5F,eAAK,GAAD,OAAI8nB,uBAAJ,YAA4BgiF,KAZ9C,+BAcI,OAdJ,UAcU5Q,YAAI,IAAI+F,KAAkC,CAAEksR,OAAO,KAd7D,yCAkBA,SAAUyY,GACR9kX,GADF,2EAaE,OATEgc,EACEhc,EADFgc,QAKEA,EAFFgvE,UACAwlS,EACEx0W,EADFw0W,YAGIC,EAAuB1jY,eAAwB,CAACyjY,IAXxD,SAaQp2S,YAAI,IAAI4M,KAAJ,2BACLhrE,GADK,IAER0vE,cAAe+kS,MAfnB,OAiBE,OAjBF,SAiBQ36Y,YAAKkvY,GAA0BhlX,GAjBvC,wCAoBA,SAAU+kX,GACR/kX,GADF,mFAeM,OAXFgc,EACEhc,EADFgc,QAGAgvE,EACEhvE,EADFgvE,UAPJ,SAeYl1G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,+BApBlB,mBAUIvrD,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAaE4J,EAxBN,oBAyBU+tE,EAAW3/F,iBAAO4xB,GAED,OADjB4gW,EAA2C7yR,EAASnoG,MAAM,CAAC,UAAW,UAAW,iBA1B3F,iBA4BM,OA5BN,UA4BY0kF,YAAI,IAAI4M,KAAJ,2BACLhrE,GADK,IAER0vE,cAAeglS,MA9BvB,gCAiCM5zX,QAAQ7Z,MAAM,uCAAwC,CACpD6sC,OACA5J,QAnCR,gCAuCIppB,QAAQ7Z,MAAM,uCAAwC,CACpD6sC,OACA5J,QAzCN,iCA4CS,CACL4J,OACA5J,QA9CJ,yCAkDA,SAAU8+V,GACRhlX,GADF,qFAgBM,OAZFgc,EACEhc,EADFgc,QAGAgvE,EAEEhvE,EAFFgvE,UACAwlS,EACEx0W,EADFw0W,YARJ,SAgBY16Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,2BACV9vB,KAAK,eACAilU,EAAYn9X,aAvBzB,mBAWIy8B,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAgBE4J,EA5BN,oBA6BU+tE,EAAW3/F,iBAAO4xB,GAED,OADjB4gW,EAA2C7yR,EAASnoG,MAAM,CAAC,UAAW,UAAW,iBA9B3F,iBAgCM,OAhCN,UAgCY0kF,YAAI,IAAI4M,KAAJ,2BACLhrE,GADK,IAER0vE,cAAeglS,MAlCvB,gCAyCM,OAJA5zX,QAAQ7Z,MAAM,0CAA2C,CACvD6sC,OACA5J,QAvCR,UAyCYpwC,YAAKivY,GAAuB/kX,GAzCxC,gCA4CIlD,QAAQ7Z,MAAM,iCAAkC,CAC9C6sC,OACA5J,QA9CN,iCAiDS,CACL4J,OACA5J,QAnDJ,yCAuDA,SAAU++V,GACRjlX,GADF,qFAiBM,OAbFgc,EACEhc,EADFgc,QAGAgvE,EAEEhvE,EAFFgvE,UACAu8P,EACEvrU,EADFurU,WARJ,SAiBYzxW,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPgvE,EACA,CACE5P,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJg8R,mBAxBV,mBAYIz3T,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,iBAgCI,OAFM+tE,EAAW3/F,iBAAO4xB,GAClB6gW,EAAoB9yR,EAASnoG,MAAM,CAAC,UAAW,UAAW,UAAW,EAAG,eA/BlF,UAgCU0kF,YAAI,IAAIgN,KAAuC,CACnD4D,YACAu8P,WAAYopC,EAAoBA,EAAkBt9X,OAASk0V,KAlCjE,QAoCI,OApCJ,UAoCUntQ,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kEACnB65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UAzClB,gCA8CI,OADA/3Q,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QA7CtD,UA8CUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,8DACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UAnDlB,iCAuDS,CAAE/kP,OAAM5J,QAvDjB,yCA0DA,SAAUg/V,GACRllX,GADF,uFAoBM,OAhBFgc,EACEhc,EADFgc,QAIAgvE,EAGEhvE,EAHFgvE,UACA86K,EAEE9pP,EAFF8pP,OACA9wR,EACEgnC,EADFhnC,KAVJ,SAoBYc,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,UACTC,SAAU,qBAGV9vB,KAAM,CACJy/B,YACA86K,SACA9wR,QAEFyyC,OAAQ,QAhChB,mBAeIqI,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAqBE4J,EArCN,oBAsCUqtD,EAAgBj/E,iBAAO4xB,GAEC,OADxBmvK,EAAyD9hH,EAAcznF,MAAM,CAAC,UAAW,UAAW,aAvC9G,iBAyCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzCxC,wBA2CM,OA3CN,UA2CYsqD,YAAI,IAAI0L,KAAkCm5G,IA3CtD,gCA8CI,OA9CJ,UA8CU7kH,YAAI,IAAI0O,KAAoB,CAAC5iE,SA9CvC,yCAkDA,SAAUi/V,GACRnlX,GADF,6EAYE,OAREgc,EACEhc,EADFgc,QAIAgvE,EAGEhvE,EAHFgvE,UACA86K,EAEE9pP,EAFF8pP,OACA9wR,EACEgnC,EADFhnC,KAVJ,SAYQc,YAAK2zX,GAAc,IAAIrjR,KAAmB,CAACpxG,OAAM8wR,SAAQ96K,eAZjE,OAaE,OAbF,SAaQl1G,YAAK4vY,GAAa,IAAIh9R,IAAkB,CAACsC,eAbjD,wCAgBA,SAAUo6R,GACRplX,GADF,6EAYE,OAREgc,EACEhc,EADFgc,QAIAgvE,EAGEhvE,EAHFgvE,UACA86K,EAEE9pP,EAFF8pP,OACA9wR,EACEgnC,EADFhnC,KAVJ,SAYQc,YAAKuvY,GAAgB,IAAIn/R,KAAqB,CAAClxG,OAAM8wR,SAAQ96K,eAZrE,OAaE,OAbF,SAaQl1G,YAAK4vY,GAAa,IAAIh9R,IAAkB,CAACsC,eAbjD,wCAgBA,SAAUq6R,GACRrlX,GADF,mFAGE,OAHF,SAGQo6E,YAAI,IAAIkM,MAAuC,IAHvD,OAsBM,OAhBFtqE,EACEhc,EADFgc,QAIAgvE,EAGEhvE,EAHFgvE,UACA86K,EAEE9pP,EAFF8pP,OACA9wR,EACEgnC,EADFhnC,KAZJ,SAsBYc,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJy/B,YACA86K,SACA9wR,QAEFyyC,OAAQ,QAhChB,mBAiBIqI,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAmBE4J,EArCN,iBAsCI,OAtCJ,UAsCUh6C,YAAKovY,GAAoB,IAAIl/R,IAAyB,CAAChxG,OAAM8wR,SAAQ96K,eAtC/E,gCAwCI,OAxCJ,UAwCU5Q,YAAI,IAAI0O,KAAoB,CAAC5iE,SAxCvC,QA0CE,OA1CF,UA0CQk0D,YAAI,IAAIkM,MAAuC,IA1CvD,yCA6CA,SAAUmjR,GACRzpW,GADF,mFAGE,OAHF,SAGQo6E,YAAI,IAAIkM,MAAuC,IAHvD,OAsBM,OAhBFtqE,EACEhc,EADFgc,QAIAgvE,EAGEhvE,EAHFgvE,UACA86K,EAEE9pP,EAFF8pP,OACA9wR,EACEgnC,EADFhnC,KAZJ,SAsBYc,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,UACTC,SAAU,eACV9vB,KAAM,CACJy/B,YACA86K,SACA9wR,QAEFyyC,OAAQ,QAhChB,mBAiBIqI,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAmBE4J,EArCN,iBAsCI,OAtCJ,UAsCUh6C,YAAKovY,GAAoB,IAAIl/R,IAAyB,CAAChxG,OAAM8wR,SAAQ96K,eAtC/E,gCAwCI,OAxCJ,UAwCU5Q,YAAI,IAAI0O,KAAoB,CAAC5iE,SAxCvC,QA0CE,OA1CF,UA0CQk0D,YAAI,IAAIkM,MAAuC,IA1CvD,yCA6CA,SAAUg/R,GACRkI,GADF,yFAkBM,OAdFxxW,EACEwxW,EADFxxW,QAGA6mP,EAGE7mP,EAHF6mP,QACAu5C,EAEEpgS,EAFFogS,UACAqxE,EACEzxW,EADFyxW,SAEItmL,EAAU07D,EAAQhqR,IAAI,WAX9B,SAkBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,6BACV9vB,KAAMs3M,EAAQxvQ,WAtBpB,gBAaIy8B,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,IAWE4J,GACI+tE,EAAW3/F,iBAAO4xB,GAER,OADV4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,aAE1EoH,QAAQ7Z,MAAM,mBAAoB6sC,GAElCssR,EAAU18G,EAAUyH,IAGtBsmL,EAASvnW,GAlCb,wCAqCA,SAAUq/V,GAA0BvlX,GAApC,6FAkBM,OAhBFgc,EACEhc,EADFgc,QAIA6mP,EAIE7mP,EAJF6mP,QACAirH,EAGE9xW,EAHF8xW,iBACA1xE,EAEEpgS,EAFFogS,UACAqxE,EACEzxW,EADFyxW,SAEItmL,EAAU07D,EAAQhqR,IAAI,WAX9B,SAkBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wCACV9vB,KAAM,CACJs3M,QAASA,EAAQxvQ,OACjBy6X,wBAxBR,gBAaIh+V,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,IAcE4J,GACI+tE,EAAW3/F,iBAAO4xB,GACpB+gW,EAA0BhzR,EAASnoG,MAAM,CAAC,UAAW,UAAW,YAC9Do7X,EAASjzR,EAASnoG,MAAM,CAAC,UAAW,UAAW,UAErC,OADhBm7X,EAAWA,EAASr0Y,IAAI,QAASs0Y,IAE/Bh0X,QAAQ7Z,MAAM,mBAAoB6sC,GAElCssR,EAAUy0E,EAAU1pL,IAGtBsmL,EAASvnW,GAvCb,wCA0CO,SAAUs/V,GACfgI,GADK,yGAUsC,OAVtC,EAQDA,EAAcxxW,QAJhB6mP,EAJG,EAIHA,QAJG,IAKHkuH,uBALG,SAMHC,EANG,EAMHA,wBACA50E,EAPG,EAOHA,UAPG,SAU4CvnO,YAAO0gD,eAVnD,kCAY0B,OAZ1B,SAYgCz/I,YAAKm7Y,IAA6B,IAAIztV,MAZtE,qBAYS0tV,EAZT,EAYIhrW,KAZJ,iBAcD,OAdC,UAcKk0D,YAAI,IAAI0O,KAAoB,CAAC5iE,IAAKgrW,KAdvC,iCAeM,CAAEhrW,IAAKgrW,IAfb,QAkBqB,OAlBrB,UAkB2Br8S,YAAOygD,eAlBlC,QA4BD,OAVE67P,EAlBD,OAoBChqL,EAAU07D,EAAQhqR,IAAI,WApBvB,UA4BK/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAMs3M,EAAQrmR,IAAI,aAAc20Y,GAAmB99X,WAhClD,oBAuBHy8B,EAvBG,EAuBHA,KACA5J,EAxBG,EAwBHA,KAWE4J,EAnCC,oBAoCG+tE,EAAW3/F,iBAAO4xB,GAClB4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,YACtE07X,EAAa1xL,EAAS7mN,IAAI,GAC1BmyG,EAAYomS,EAAWv4Y,IAAI,MAEjB,MAAZ6mN,EAzCD,iBA0CD5iM,QAAQ7Z,MAAM,mBAAoB6sC,GA1CjC,4BA4CGq3K,EA5CH,iBA6CC,OA7CD,UA6COrxN,YAAKowY,GAAmB,IAAIp8R,IAAwB,CAAEkB,YAAWm8G,UAASkqL,cAAeL,KA7ChG,oCA+CKD,EA/CL,iBAgDkB,OAhDlB,UAgDwBl8S,YAAO/+C,gBAhD/B,QAiDG,OADMgwO,EAhDT,iBAiDShwR,YAAK2zX,GAAc,IAAIrjR,KAAmB,CAAEpxG,KAAM,OAAQ8wR,SAAQ96K,eAjD3E,QAmDC,OAnDD,UAmDO5Q,YAAI,IAAIwN,KAAoB,CAACoD,UAAW00G,EAAShqM,MAAM,CAAC,EAAG,UAnDlE,QAoDC,OApDD,UAoDO0kF,YAAI,IAAIzL,MAAkB,IApDjC,QAqDC,OArDD,UAqDOyL,YAAI,IAAI8N,KArDf,QAsDC,OAtDD,UAsDO9N,YAAI,IAAI0N,IAA2B43G,IAtD1C,QAwDG08G,GACFA,EAAUg1E,GAzDX,gCA6DH,OA7DG,UA6DGh3S,YAAI,IAAI0O,KAAoB,CAAC5iE,SA7DhC,iCA+DE,CACL4J,OACA5J,QAjEG,yCAqEP,SAAUu/V,GAA4BzlX,GAAtC,yFAgBM,OAdFgc,EACEhc,EADFgc,QAIA6mP,EAEE7mP,EAFF6mP,QACAirH,EACE9xW,EADF8xW,iBAEI3mL,EAAU07D,EAAQhqR,IAAI,WAT9B,SAgBY/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wCACV9vB,KAAM,CACJs3M,QAASA,EAAQxvQ,OACjBy6X,wBAtBR,mBAWIh+V,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAcE4J,EA1BN,oBA2BU+tE,EAAW3/F,iBAAO4xB,GAClB+gW,EAA0BhzR,EAASnoG,MAAM,CAAC,UAAW,UAAW,YAChEs1F,EAAY6lS,EAASh4Y,IAAI,MAEf,MAAZg4Y,EA/BR,iBAgCM/zX,QAAQ7Z,MAAM,mBAAoB6sC,GAhCxC,4BAkCUq3K,EAlCV,iBAmCQ,OAnCR,UAmCcrxN,YAAKowY,GAAmB,IAAIp8R,IAAwB,CAAEkB,YAAWm8G,aAnC/E,gCAqCQ,OArCR,UAqCc/sH,YAAI,IAAIwN,KAAoB,CAACoD,eArC3C,QAsCQ,OAtCR,UAsCc5Q,YAAI,IAAIzL,MAAkB,IAtCxC,QAuCQ,OAvCR,UAuCcyL,YAAI,IAAI8N,KAvCtB,QAwCQ,OAxCR,UAwCc9N,YAAI,IAAI0N,IAA2B5pF,iBAAO,CAAC2yX,MAxCzD,gCA4CI,OA5CJ,UA4CUz2S,YAAI,IAAI0O,KAAoB,CAAC5iE,SA5CvC,QA6CI,OA7CJ,UA6CUk0D,YAAI,IAAI+F,KAAkC,CAAEksR,OAAO,KA7C7D,iCA+CS,CACLv8U,OACA5J,QAjDJ,yCAqDO,SAAUw/V,GACf1lX,GADK,4GAQDA,EAAOgc,QAJTgvE,EAJG,EAIHA,UACAsmS,EALG,EAKHA,oBACAC,EANG,EAMHA,sBACA9D,EAPG,EAOHA,SAGe,MAAbziS,EAVC,iBAiBC,OAjBD,SAiBOl1G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJy/B,iBAtBH,mBAYDl7D,EAZC,EAYDA,KACA5J,EAbC,EAaDA,KAaE4J,EA1BD,oBA2BKq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAAWysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aA5BtD,iBA8BCoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BnC,wBAgCC,OAhCD,UAgCOsqD,YAAI,IAAI0N,IAA2B43G,IAhC1C,QAiCC,OAjCD,UAiCOtlH,YAAI,IAAIwN,KAAoB,CAChCoD,YACA1Y,OAAQi/S,EACRD,yBApCH,mCAwCDx0X,QAAQ7Z,MAAM,kBAAmB,CAACijC,QACS,OAAvC,OAACA,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,MAzCjC,iBA0CC,OA1CD,UA0CO1C,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,4DACRu0D,SAAU,WA5Cb,gCA+CC,OA/CD,UA+CON,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,wDACRu0D,SAAU,WAjDb,QAoDO,OAAR+yS,QAAQ,IAARA,OApDC,gCAgEC,OAhED,UAgEO33Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBAnEX,oBA2DDvrD,EA3DC,EA2DDA,KACA5J,EA5DC,EA4DDA,KAUE4J,EAtED,iBAyED,OAFMq8V,EAAWjuX,iBAAO4xB,GAClB4vK,EAAgCysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAxE3E,UAyEK0kF,YAAI,IAAI0N,IAA2B43G,IAzExC,gCA2ED5iM,QAAQ7Z,MAAM,mBAAoB,CAACijC,QAC3B,OAARunW,QAAQ,IAARA,OA5EC,yCAiFA,SAAU9H,GACf3lX,GADK,8FAOY,OAHfgrF,EACEhrF,EAAOgc,QADTgvE,WAJG,uBAQHluF,QAAQ7Z,MAAM,yBARX,0BAkBD,OAlBC,SAkBKnN,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJy/B,iBAvBD,mBAaHl7D,EAbG,EAaHA,KACA5J,EAdG,EAcHA,KAaE4J,EA3BC,oBA4BGq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAAWysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aA7BpD,iBA+BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BjC,wBAiCD,OAjCC,UAiCKsqD,YAAI,IAAI0N,IAA2B43G,IAjCxC,QAmCuB,OAnCvB,UAmC6B7qH,YAAO6gG,gBAnCpC,WAmCK87M,EAnCL,OAqCKvD,EArCL,UAqCoBvuL,EAAShqM,MAAM,CAAC,EAAG,iBArCvC,QAqCoD3I,iBAC/C0kY,EAAsBxD,EAAa5tY,QAAO,SAACqxY,GAAD,OAAuCF,EAAgBz4Y,IAAI24Y,EAAoB74Y,IAAI,YAE7H84Y,EAAiBF,EAAoB3zY,KAAI,SAAC4zY,GAC9C,IAAME,EAAgBF,EAAoB74Y,IAAI,MAC9C,OAAOuhG,YAAI,IAAIrL,IAAwB,CACrCuD,OAAQ77F,OAAOm7Y,UAGA/gZ,KA9ClB,iBA+CC,OA/CD,UA+CO0qM,YAAIo2M,EAAej0Y,WAAWhG,WA/CrC,gCAmDHolB,QAAQ7Z,MAAM,2CAA4C,CAACijC,QAnDxD,yCAuDA,SAAU0/V,GACf5lX,GADK,oFAOY,OAHfgrF,EACEhrF,EAAOgc,QADTgvE,WAJG,uBAQHluF,QAAQ7Z,MAAM,yBARX,0BAkBD,OAlBC,SAkBKnN,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJy/B,iBAvBD,mBAaHl7D,EAbG,EAaHA,KACA5J,EAdG,EAcHA,KAaE4J,EA3BC,oBA4BGq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAAWysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aA7BpD,iBA+BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BjC,wBAiCD,OAjCC,UAiCKsqD,YAAI,IAAI8O,IAA8Cw2G,IAjC3D,gCAoCH5iM,QAAQ7Z,MAAM,uCAAwC,CAACijC,QApCpD,yCAwCP,SAAU2/V,GACR7lX,GADF,2FAeM,OAfN,EAQOA,EAAOgc,QAJVgvE,EAJJ,EAIIA,UACAg2K,EALJ,EAKIA,YACAx3D,EANJ,EAMIA,QACAwjL,EAPJ,EAOIA,aAPJ,SAeYl3Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJy/B,iBApBR,OAwBwB,OAxBxB,SAUIl7D,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAXJ,SAwB8B2uD,YAAOj1C,eAxBrC,UAwBQ+B,EAxBR,OAyBE45C,IAAmB9rE,kBAAgBo2W,cAAnC,aACE76R,YACAg2K,cACAx3D,WACG7nK,KAED7R,EA/BN,oBAgCUq8V,EAAWjuX,iBAAO4xB,GAER,OADV4vK,EAA8BysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAjC9E,iBAmCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAnCxC,wBAqCM,OArCN,UAqCYsqD,YAAI,IAAIkO,IAA6B,CAAEo3G,cArCnD,YAsCUstL,EAtCV,iBAuCQ,OAvCR,UAuCc5yS,YAAIl5F,eAAK8rY,IAvCvB,gCA2CIlwX,QAAQ7Z,MAAM,kBAAmB,CAACijC,QA3CtC,iCA6CS,CACL4J,OACA5J,QA/CJ,yCAmDA,SAAU4/V,GACR9lX,GADF,iFAYM,OARFgrF,EACGhrF,EAAOgc,QADVgvE,UAJJ,SAYYl1G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV5zD,OAAQ,CACNujE,iBAjBR,mBAOIl7D,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAaE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAET,OADT+yO,EAAyBspH,EAASz2X,MAAM,CAAC,UAAW,UAAW,WAAY3I,kBAAQmL,SAvB7F,iBAyBM4E,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA2BM,OA3BN,UA2BYsqD,YAAIl5F,eAAK,GAAD,OAAI0nB,sBAAJ,YAA2Bi6P,EAAQhqR,IAAI,SA3B3D,gCA8BIikB,QAAQ7Z,MAAM,0BAA2B,CAACijC,QA9B9C,QAgCE,OAhCF,UAgCQk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAlCV,iCAoCS,CACL3vD,OACA5J,QAtCJ,yCA0CA,SAAU6/V,GACR/lX,GADF,iEAGE,OAHF,SAGQlqB,YAAKygG,IAAa,KAH1B,OAIE,OAJF,SAIQzgG,YAAKkwY,GAAgBhmX,GAJ7B,wCAOA,SAAUgmX,GACRhmX,GADF,qIAIE,OAJF,EAG0CA,EAAOgc,QAAvCqiF,EAHV,EAGUA,QAASv9E,EAHnB,EAGmBA,QAASs7R,EAH5B,EAG4BA,UAH5B,SAIQhiO,YAAI,IAAIrwD,KAAmC,IAJnD,OAaM,OAPEl1B,EAAQgO,KAAK+xB,MANrB,SAaY9+C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ8yC,UACAv9E,eAnBR,mBAQIgP,EARJ,EAQIA,KACA5J,EATJ,EASIA,IAcI50C,EAAMuxB,KAAK+xB,OACb9E,EAxBN,oBAyBUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,UAAW,UACtD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,UAAW,gBAEnD,OADVgqM,EAAgCysL,EAASz2X,MAAM,CAAC,UAAW,UAAW,cA5BhF,iBA8BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BxC,wBAgCM,OAhCN,UAgCYsqD,YAAI,IAAIoP,KAA8B,CAC1Ck2G,WACAx1M,QACAkiY,iBAnCR,QAqCM,OArCN,UAqCYhyS,YAAI,IAAIrwD,KAAmC,IArCvD,QAsCe,OAATqyR,QAAS,IAATA,KAAY18G,EAASrsM,QAtC3B,gCAyCI,OAzCJ,UAyCU+mF,YAAI,IAAIsP,KAA2BxjE,IAzC7C,QA0CI,OA1CJ,UA0CUk0D,YAAI,IAAIrwD,KAAmC,IA1CrD,QA2CIjtB,QAAQ7Z,MAAM,mBAAoB,CAACijC,QA3CvC,QAyGwB,OA3DhBmmW,EAAen5Y,OAAO+8C,OAAP,MAAA/8C,OAAM,CAAQ,IAAR,oBAAgB,OAACmrH,QAAD,IAACA,OAAD,EAACA,EAAiB9nF,MAAO,MAC9D+1W,EAAmBpuX,iBAAOmuX,GAC1B/5Q,EAAag6Q,EAAiB52X,MAAM,CAAC,KAAM,EAAG,OAAQ,UAAY42X,EAAiB52X,MAAM,CAAC,KAAM,EAAG,aAAc,SACjH62X,EAAa,CACjBvrH,YAAa1uJ,GAAc,KAC3Bo5F,WAAYp5F,GAAc,KAC1Bm1O,WAAY6kC,EAAiB52X,MAAM,CAAC,aAAc,QAAU,KAC5DgyV,YAAa4kC,EAAiB52X,MAAM,CAAC,cAAe,QAAU,KAC9Dm8X,aAAcvF,EAAiB52X,MAAM,CAAC,YAAa,SAAW,KAC9Do8X,aAAcxF,EAAiB52X,MAAM,CAAC,YAAa,SAAW,KAC9Dq8X,YAAazF,EAAiB52X,MAAM,CAAC,WAAY,SAAW,KAC5Ds8X,YAAa1F,EAAiB52X,MAAM,CAAC,WAAY,SAAW,KAC5DutQ,SAAUqpH,EAAiB52X,MAAM,CAAC,WAAY,QAAU,KACxD0xL,WAAYklM,EAAiB52X,MAAM,CAAC,aAAc,QAAU,KAC5D0yV,UAAWkkC,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAC1D88F,UAAW85R,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAC1Dk9F,WAAY05R,EAAiB52X,MAAM,CAAC,aAAc,QAAU,KAC5Ds9F,OAAQs5R,EAAiB52X,MAAM,CAAC,SAAU,QAAU,KACpDwyV,gBAAiBokC,EAAiB52X,MAAM,CAAC,kBAAmB,QAAU,KACtEyyV,eAAgBmkC,EAAiB52X,MAAM,CAAC,iBAAkB,QAAU,KACpE2yV,iBAAkBikC,EAAiB52X,MAAM,CAAC,mBAAoB,QAAU,KACxEu8X,WAAY3F,EAAiB52X,MAAM,CAAC,UAAW,SAAW,KAC1Dw8X,WAAY5F,EAAiB52X,MAAM,CAAC,UAAW,SAAW,KAC1Dy8X,kBAAkB,UAAA7F,EAAiB52X,MAAM,CAAC,YAAa,cAArC,eAA6CrC,SAAU,KACzEm5X,gBAAiBF,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAChE08X,oBAAoB,UAAA9F,EAAiB52X,MAAM,CAAC,oBAAqB,cAA7C,eAAqDrC,SAAU,KACnFg0V,kBAAmBilC,EAAiB52X,MAAM,CAAC,oBAAqB,QAAU,KAC1E+2X,eAAgBH,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEg3X,eAAgBJ,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEi3X,gBAAiBL,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpEk3X,gBAAiBN,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpE8yV,YAAY,UAAA8jC,EAAiB52X,MAAM,CAAC,aAAc,cAAtC,eAA8CrC,SAAU,KACpE0uN,SAAUuqK,EAAiB52X,MAAM,CAAC,WAAY,KAAM,KAAO,KAC3D28X,mBAAmEzhZ,IAApD07Y,EAAiB52X,MAAM,CAAC,gBAAiB,OAAuB42X,EAAiB52X,MAAM,CAAC,gBAAiB,OAAS,KACjI48X,SAAUhG,EAAiB52X,MAAM,CAAC,aAAc,QAAUvjB,QAAQm6Y,EAAiB52X,MAAM,CAAC,aAAc,SAAW,KACnH68X,WAAYjG,EAAiB52X,MAAM,CAAC,YAAa,QAAWvjB,QAAQm6Y,EAAiB52X,MAAM,CAAC,YAAa,SAAW,KACpH88X,eAAsD5hZ,IAA3C07Y,EAAiB52X,MAAM,CAAC,OAAQ,OAAuB42X,EAAiB52X,MAAM,CAAC,OAAQ,OAAS,KAC3GmzM,oBAAqEj4N,IAArD07Y,EAAiB52X,MAAM,CAAC,iBAAkB,OAAuB42X,EAAiB52X,MAAM,CAAC,iBAAkB,OAAS,MAGlIm3X,GAAY,OAAC3mW,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,OAAQ,KAClDrzB,GAAe,OAACvjC,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8BA,QAAS,KAErD4pY,GAAc/8V,IACbx+C,EAAMujB,EAAQ8N,kBAChBkqX,EAAY,IACZpjU,EAAe,mBAEfojU,EAAY,IACZpjU,EAAe,sBAIb0xB,GAAO,UAACrrD,GAAQ5J,SAAT,eAAsBi1D,OAAQ,GACrC+7B,EAASzgI,OAAM,UAAC0kG,EAAK+7B,cAAN,aAAC,EAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,EAAiB3xS,EAAK2xS,eAAL,eAA2B3xS,EAAK2xS,gBAAmB,UACnE3xS,EAAK2xS,sBACL3xS,EAAK+7B,OAvGd,UAyG8BriC,YAAOj1C,eAzGrC,eAyGQ+B,EAzGR,OA2GE45C,IAAmB9rE,kBAAgBgjX,cAAnC,iDACE5F,YACApjU,eACAytD,UACGq1Q,GACApxS,GACA2xS,GACAnrV,IAlHP,kBAqHS,CACL7R,OACA5J,QAvHJ,yCA2HA,SAAU+/V,GACRjmX,GADF,qFAYM,OAZN,EAIyDA,EAAOgc,QAAtDjG,EAJV,EAIUA,GAAIirP,EAJd,EAIcA,YAAax3D,EAJ3B,EAI2BA,QAASnrG,EAJpC,EAIoCA,QAASv9E,EAJ7C,EAI6CA,QAJ7C,SAYYhrC,YAAK+vY,GAAe,IAAIz9R,IAAoB,CAAE4C,UAAWj1E,EAAIyzL,UAASw3D,iBAZlF,OAoBM,OApBN,WAOIlxO,KAPJ,EAQI5J,IARJ,SAoBYpwC,YAAKkwY,GAAgB,IAAI58R,KAAqB,CACpDtoE,UACAu9E,aAtBN,kBAeI8uR,MAfJ,EAgBIC,KAhBJ,yCA0BO,SAAUlH,GACflmX,GADK,2FAWD,OAXC,EAI4FA,EAAOgc,QAAhGgvE,EAJH,EAIGA,UAAWm8G,EAJd,EAIcA,QAJd,IAIuBkqL,qBAJvB,SAI6CvnL,EAJ7C,EAI6CA,YAAaw+J,EAJ1D,EAI0DA,mBAAoBlsD,EAJ9E,EAI8EA,UAJ9E,SAWKtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV5zD,OAAQ,CACNujE,YACAm8G,eAjBD,mBAMHr3K,EANG,EAMHA,KACA5J,EAPG,EAOHA,KAcE4J,EArBC,sBAsBCg6K,GAAeA,EAAYj5N,KAAO,GAtBnC,iBAuBD,OAvBC,UAuBKiF,YAAKgxY,GAAkB,IAAI15R,KAAuB,CACtD+5G,UACAn8G,YACAs9Q,qBACAx+J,YAAa4oL,aAAwC,CAAE5oL,cAAa3C,YACpEkqL,gBACAj1E,eA7BD,4CAgCGA,EAhCH,iBAiCCA,IAjCD,4BAmCKi1E,EAnCL,iBAoCG,OApCH,UAoCSv7Y,YAAK68Y,IAAwB,IAAI3oS,KAAsB,CAAEm9G,UAASyrL,iBAAiB,KApC5F,QAsCG,OAtCH,UAsCS98Y,YAAK+8Y,IAAqB,IAAI3oS,KAA0B,CAAEi9G,UAASyrL,iBAAiB,KAtC7F,iCA2CE,CACL9iW,OACA5J,QA7CG,yCAiDA,SAAUigW,GACfnmX,GADK,mFAWD,OAXC,EAGmEA,EAAOgc,QAAvEgvE,EAHH,EAGGA,UAAWm8G,EAHd,EAGcA,QAASkqL,EAHvB,EAGuBA,cAAeyB,EAHtC,EAGsCA,yBAHtC,SAWKh9Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CACNujE,YACAm8G,eAjBD,mBAMHr3K,EANG,EAMHA,KANG,EAOH5J,KAcE4J,EArBC,qBAsBCuhW,EAtBD,iBAuBD,OAvBC,UAuBKv7Y,YAAK68Y,IAAwB,IAAI3oS,KAAsB,CAACm9G,UAASyrL,iBAAiB,KAvBvF,YAyBCE,EAzBD,iBA0BD,OA1BC,UA0BK14S,YAAI,IAAIwN,KAAoB,CAACoD,UAAW,QA1B7C,yCA+BP,SAAUo7R,GACRpmX,GADF,6EAME,OANF,EAI+BA,EAAOgc,QAA5BqiF,EAJV,EAIUA,QAASv9E,EAJnB,EAImBA,QAJnB,SAMQs5D,YAAI,IAAIrwD,KAAmC,IANnD,OAcM,OAdN,SAcYj0C,YAAKkwY,GAAgB,IAAI58R,KAAqB,CACtDiV,UACAv9E,aAhBJ,OAmBE,OAnBF,WASIgP,KATJ,EAUI5J,IAVJ,UAmBQk0D,YAAI,IAAIrwD,KAAmC,IAnBnD,yCAwBO,SAAUs8V,GACfrmX,GADK,qFAcD,OAdC,EAMDA,EAAOgc,QAFTgvE,EAJG,EAIHA,UACA1Y,EALG,EAKHA,OALG,SAcKx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,WACV9vB,KAAM,CACJy/B,YACA1Y,cApBD,mBASHxiD,EATG,EASHA,KACA5J,EAVG,EAUHA,KAeE4J,EAzBC,oBA0BGqtD,EAAgBj/E,iBAAO4xB,GAGb,OAFV4vK,EAAgCviH,EAAcznF,MAAM,CAAC,UAAW,UAAW,aA3B9E,iBA8BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BjC,wBAgCD,OAhCC,UAgCKsqD,YAAI,IAAI0N,IAA2B43G,IAhCxC,gCAmCH5iM,QAAQ7Z,MAAM,oBAAqB,CAACijC,QAnCjC,yCAuCA,SAAUogW,GACftmX,GADK,iFAOL,OAHEgrF,EACEhrF,EADFgrF,UAJG,SAOC5Q,YAAI,IAAIiR,KAA6C,IAPtD,OAeD,OAfC,SAeKv1G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CACNujE,iBApBD,mBAUHl7D,EAVG,EAUHA,KACA5J,EAXG,EAWHA,KAcE4J,EAzBC,iBA4BH,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBq7D,EAAoBhO,EAAcznF,MAAM,CAAC,UAAW,UAAW,aA3BlE,UA4BG0kF,YAAI,IAAI8Q,IAA8CC,IA5BzD,gCA8BHruF,QAAQ7Z,MAAM,+BAAgC,CAACijC,QA9B5C,QAgCL,OAhCK,UAgCCk0D,YAAI,IAAIiR,KAA6C,IAhCtD,yCAmCA,SAAUk7R,GACfvmX,GADK,qFAQL,OARK,EAMDA,EAAOgc,QAFTgvE,EAJG,EAIHA,UACAm8G,EALG,EAKHA,QALG,SAQC/sH,YAAI,IAAIwR,MAA0C,IARnD,OAgBD,OAhBC,SAgBK91G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,8BACV5zD,OAAQ,CACNujE,YACAm8G,eAtBD,mBAWHr3K,EAXG,EAWHA,KACA5J,EAZG,EAYHA,KAeE4J,EA3BC,iBA8BH,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvB47D,EAAmCvO,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBA7BjF,UA8BG0kF,YAAI,IAAIqR,KAA2CC,IA9BtD,gCAgCH5uF,QAAQ7Z,MAAM,oCAAqC,CAACijC,QAhCjD,QAkCL,OAlCK,UAkCCk0D,YAAI,IAAIwR,MAA0C,IAlCnD,iCAmCE,CAAE97D,OAAM5J,QAnCV,yCAsCA,SAAUsgW,GACfxmX,GADK,+EAGL,OAHK,SAGCo6E,YAAI,IAAIiR,KAA6C,IAHtD,OAKL,OALK,SAKCv1G,YAAKywY,GAA6BvmX,GALnC,OAM2C,OAN3C,SAMiD60E,YAAOusH,eANxD,OAcD,OARE11G,EAND,gBAcK51G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPhc,EAAOgc,QAAQgvE,UACf,CACE5P,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJmgC,cAAeA,EAAcr4F,aArBhC,mBASHy8B,EATG,EASHA,KATG,EAUH5J,KAgBE4J,EA1BC,iBA6BH,OAFM+tE,EAAW3/F,iBAAO4xB,GAClB4vK,EAAgC7hG,EAASnoG,MAAM,CAAC,UAAW,UAAW,YA5BzE,UA6BG0kF,YAAI,IAAI0N,IAA2B43G,IA7BtC,QA8BH,OA9BG,UA8BGtlH,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UAnCX,gCAuCH,OAvCG,UAuCGz6L,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,2DACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UA5CX,QAiDL,OAjDK,UAiDC/+R,YAAKwwY,GAAgC,IAAIv7R,IAAqC/qF,EAAOgc,QAAQgvE,YAjD9F,yCAoDA,SAAUy7R,GACfzmX,GADK,qFAQL,OARK,EAMDA,EAAOgc,QAFTgvE,EAJG,EAIHA,UACAm8G,EALG,EAKHA,QALG,SAQC/sH,YAAI,IAAIoQ,KAAqC,IAR9C,OAgBD,OAhBC,SAgBK10G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CACNujE,YACAm8G,eAtBD,mBAWHr3K,EAXG,EAWHA,KACA5J,EAZG,EAYHA,KAeE4J,EA3BC,iBA8BH,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvB5mC,EAAkBi0F,EAAcznF,MAAM,CAAC,UAAW,UAAW,WA7BhE,UA8BG0kF,YAAI,IAAIyQ,IAAsC3hG,IA9BjD,gCAgCH4T,QAAQ7Z,MAAM,+BAAgC,CAACijC,QAhC5C,QAkCL,OAlCK,UAkCCk0D,YAAI,IAAIoQ,KAAqC,IAlC9C,yCAqCA,SAAUk8R,GACf1mX,GADK,mFAUH,OAVG,EAODA,EAAOgc,QAHTgvE,EAJG,EAIHA,UACAm8G,EALG,EAKHA,QACA2E,EANG,EAMHA,WANG,KASwBvwB,IATxB,SAUGzlM,YAAKi9Y,IAAkB,IAAI99L,KAAuB,CAAEkS,UAAS2E,gBAVhE,OAWH,OAXG,qBAWGh2N,YAAKywY,GAA6B,IAAIh7R,KAAkC,CAAEP,YAAWm8G,aAXxF,OASkB,OATlB,wCASkB,cATlB,QAcL,OAdK,iCASU6rL,EATV,eAcCv5S,YAAM,KAdP,YAeDu5S,EAAIljW,KAfH,iBAgBH,OAhBG,UAgBGsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,wEACnB65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UArBX,gCAyBH,OAzBG,UAyBGz6L,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,oEACnB65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UA9BX,yCAoCA,SAAU8xG,GACf3mX,GADK,iFAWD,OAXC,EAMDA,EAAOgc,QAFTgvE,EAJG,EAIHA,UACAvY,EALG,EAKHA,MALG,SAWK38F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACNujE,aAEFz/B,KAAM,CACJknB,aAnBD,gBASH3iD,EATG,EASHA,KACA5J,EAVG,EAUHA,IAaE4J,EACe5xB,iBAAO4xB,GAExBhzB,QAAQ7Z,MAAM,yBAA0B,CAACijC,MAAK4J,SA1B3C,wCA8BP,SAAU82V,GACN5mX,GADJ,+HAYM,OAZN,EAG6CA,EAAOgc,QAA1CqiF,EAHV,EAGUA,QAASv9E,EAHnB,EAGmBA,QAHnB,IAG4Bk8D,eAH5B,MAGsC,GAHtC,EAKQnoF,EAAQgO,KAAK+xB,MALrB,SAYY9+C,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBACV9vB,KAAM,CACJ8yC,UACAv9E,WAEFk8D,cApBN,mBAOIltD,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,IAeI50C,EAAMuxB,KAAK+xB,OAEb9E,EAzBN,oBA0BUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,UAAW,UACtD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,UAAW,gBAElD,OADXwrM,EAAiCirL,EAASz2X,MAAM,CAAC,UAAW,UAAW,cA7BjF,iBA+BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BxC,wBAiCM,OAjCN,UAiCYsqD,YAAI,IAAI8G,IAAmCggH,IAjCvD,QAkCM,OAlCN,UAkCY9mH,YAAI,IAAIwS,KAA+B,CAC3Cs0G,YACAh3M,QACAkiY,iBArCR,gCAyCI,OAzCJ,UAyCUhyS,YAAI,IAAI0S,KAA4B5mE,IAzC9C,QA0CIppB,QAAQ7Z,MAAM,oBAAqB,CAACijC,QA1CxC,QAiFwB,OApChBmmW,EAAen5Y,OAAO+8C,OAAP,MAAA/8C,OAAM,CAAQ,IAAR,oBAAgB,OAACmrH,QAAD,IAACA,OAAD,EAACA,EAAiB9nF,MAAO,MAC9D+1W,EAAmBpuX,iBAAOmuX,GAE1BE,EAAa,CACjBvrH,YAAasrH,EAAiB52X,MAAM,CAAC,OAAQ,UAAY,KACzD88F,UAAW85R,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAC1Dk9F,WAAY05R,EAAiB52X,MAAM,CAAC,aAAc,QAAU,KAC5Ds9F,OAAQs5R,EAAiB52X,MAAM,CAAC,SAAU,QAAU,KACpDwyV,gBAAiBokC,EAAiB52X,MAAM,CAAC,kBAAmB,QAAU,KACtEyyV,eAAgBmkC,EAAiB52X,MAAM,CAAC,iBAAkB,QAAU,KACpE82X,gBAAiBF,EAAiB52X,MAAM,CAAC,YAAa,QAAU,KAChE+2X,eAAgBH,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEg3X,eAAgBJ,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEi3X,gBAAiBL,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpEk3X,gBAAiBN,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,MAGlEm3X,GAAY,OAAC3mW,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,OAAQ,KAClDrzB,GAAe,OAACvjC,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8BA,QAAS,KAErD4pY,GAAc/8V,IACbx+C,EAAMujB,EAAQ8N,kBAChBkqX,EAAY,IACZpjU,EAAe,mBAEfojU,EAAY,IACZpjU,EAAe,sBAIb0xB,GAAO,UAACrrD,GAAQ5J,SAAT,eAAsBi1D,OAAQ,GACrC+7B,EAASzgI,OAAM,UAAC0kG,EAAK+7B,cAAN,aAAC,EAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,EAAiB3xS,EAAK2xS,eAAL,eAA2B3xS,EAAK2xS,gBAAmB,UACnE3xS,EAAK2xS,sBACL3xS,EAAK+7B,OA/Ed,UAiF8BriC,YAAOj1C,eAjFrC,eAiFQ+B,EAjFR,OAmFE45C,IAAmB9rE,kBAAgBwjX,qBAAnC,iDACEpG,YACApjU,eACAytD,UACGq1Q,GACApxS,GACA2xS,GACAnrV,IA1FP,kBA6FS,CACL7R,OACA5J,QA/FJ,yCAmGO,SAAU2gW,GACf7mX,GADK,qFASL,OATK,EAODA,EAAOgc,QAHTgvE,EAJG,EAIHA,UACA02K,EALG,EAKHA,WACA+gH,EANG,EAMHA,eANG,SASCroS,YAAI,IAAI8S,MAAqD,IAT9D,OAcD,OAdC,SAcKp3G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mCACV5zD,OAAQ,CACNujE,YACAkoS,oBAAqBxxH,GAEvBn2M,KAAM,CACJk3T,sBAvBD,mBAYH3yV,EAZG,EAYHA,KACA5J,EAbG,EAaHA,KAcE4J,EA3BC,oBA4BGqtD,EAAgBj/E,iBAAO4xB,GAER,MADCqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBA7B9D,iBA+BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BjC,wBAiCD,OAjCC,UAiCKsqD,YAAI,IAAIjxD,IAA6B,CAACpT,GAAIwrW,GAAiC9hS,MAAM,KAjCtF,QAkCD,OAlCC,UAkCKrF,YAAI,IAAI8S,MAAqD,IAlClE,QAmCD,OAnCC,UAmCKp3G,YAAKwuY,GAAiB,IAAIl/R,IAAsB4F,IAnCrD,gCAsCHluF,QAAQ7Z,MAAM,4CAA6C,CAACijC,QAtCzD,yCA0CA,SAAU4gW,GACf9mX,GADK,+FAeD,OAfC,EAUDA,EAAOgc,QANTmrL,EAJG,EAIHA,QACAn8G,EALG,EAKHA,UACAs9Q,EANG,EAMHA,mBACAx+J,EAPG,EAOHA,YACAunL,EARG,EAQHA,cACAj1E,EATG,EASHA,UATG,SAeKtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV5zD,OAAQ,CACNujE,aAEFz/B,KAAM,CACJu+I,mBAvBD,mBAaHh6K,EAbG,EAaHA,KACA5J,EAdG,EAcHA,KAaE4J,EA3BC,oBA4BGqtD,EAAgBj/E,iBAAO4xB,GACvB8mG,EAAMz5C,EAAcznF,MAAM,CAAC,UAAW,UAAW,gBA7BpD,iBA+BDoH,QAAQ7Z,MAAM,oCAAqC6sC,GA/BlD,wBAiCqB,OAjCrB,UAiC2B+kD,YAAOj1C,eAjClC,QA8DD,OA7BM+B,EAjCL,OAmCDi1F,EAAIv2I,QAAO,SAAAmoX,GAAU,OAAIA,EAAW3vX,IAAI,aAAesuN,KAAS3lN,SAAQ,SAACgnX,GACvE,IAAM4nB,EAAqB9nB,EAAmB7xW,MAAK,SAAC45X,GAAD,OAAuBA,EAAkBx3Y,IAAI,sBAAwB2vX,EAAW3vX,IAAI,uBACvI,IAAKu3Y,GAAsBA,EAAmBv3Y,IAAI,eAAiB2vX,EAAW3vX,IAAI,aAChF,OAAQ2vX,EAAW3vX,IAAI,cACrB,IAAK,UACH0iG,IAAmB9rE,kBAAgB6gX,gBAAnC,aACE3qE,WAAY6iD,EAAW9yW,MAAM,CAAC,UAAW,OACzCyxM,UACAn8G,aACGrpD,IAGL,MACF,IAAK,OACH45C,IAAmB9rE,kBAAgB8gX,aAAnC,aACE5qE,WAAY6iD,EAAW9yW,MAAM,CAAC,UAAW,OACzCyxM,UACAn8G,aACGrpD,QArDZ,UA8DKy4C,YAAI,IAAIkT,KAAgC,CAAEtC,YAAW8+G,YAAalzE,KA9DvE,YAgEGuwE,EAhEH,qBAiEKi1G,EAjEL,iBAkEGA,IAlEH,gCAoEyBxrU,IAAlBygZ,IAA+BA,EApEtC,iBAqEK,OArEL,UAqEWv7Y,YAAK68Y,IAAwB,IAAI3oS,KAAsB,CAAEm9G,UAASyrL,iBAAiB,KArE9F,gCAuEK,OAvEL,UAuEW98Y,YAAK+8Y,IAAqB,IAAI3oS,KAA0B,CAAEi9G,UAASyrL,iBAAiB,KAvE/F,gCA8EH,OADA91X,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QA7ExC,UA8EGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,qCACTu0D,SAAU,QACVk2S,aAAc,CACZ/7G,SAAU,SACVK,WAAY,YAnFb,2C,sRCjvGMi+G,EAA6B,0BAyH1C,IAAMzxW,EAAkBkG,YAAyB,CAC/CqxN,aAAc3oI,YAA+B6iR,GAC7C1zS,KAAMmzG,YAA2BugM,KAGpBppU,4BACbgG,aAjJa,SAACC,GAAD,MAA+B,CAC5CojU,UAAW,CACTrhS,SAAU,WACVziG,MAAO0gE,EAAMZ,QAAQ,IACrBg6C,IAAKp5C,EAAMZ,QAAQ,KAErBikU,iBAAkB,CAChBziU,QAASZ,EAAMZ,QAAQ,IAEzBkkU,SAAU,CACRliU,SAAU,OACVm6C,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,aAmIjB,CAAE6H,WAAW,IAChC7vE,YAAgB,gBAChBwqE,cACA9K,kBAAQjyE,GArBV,SAA4BjC,GAC1B,MAAO,CACLA,WACAy5N,WAAY,WACVz5N,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,EACJn0W,MAAO,WAWA+qC,EA5HqD,SAAC/qC,GACnE,MAAsJA,EAA9Ii6N,aAAgBxjI,EAAxB,EAAwBA,YAAa89Q,EAArC,EAAqCA,iBAAkB7iF,EAAvD,EAAuDA,QAAS8iF,EAAhE,EAAgEA,eAAgB9/E,EAAhF,EAAgFA,SAAYx6D,EAA0Dl6N,EAA1Dk6N,WAAYz5J,EAA8CzgE,EAA9CygE,KAAMzxB,EAAwChvC,EAAxCgvC,QAASvuC,EAA+BT,EAA/BS,SAAUuwC,EAAqBhxC,EAArBgxC,MAAO+sB,EAAc/9D,EAAd+9D,OAAQl8E,EAAMme,EAANne,EAEhJ0Y,aAAgB,WACVkmE,GACFg0S,EAAoB,MAEjBh0S,GACH9xD,WAAWurN,EAAY,OAExB,CAACz5J,IAEJ,IASA,EAAgDlmE,WAAyB,MAAzE,mBAAOm6W,EAAP,KAAyBD,EAAzB,KAEME,EAAyBjgF,GAA8B,IAAlBA,EAAS7iU,KAC9C+iZ,EAAaC,IAAmB/1Y,KAAI,SAACw3G,GAAD,OAAYA,EAAO9kH,SACvDsjZ,EAA8BH,GAA0BC,EAAWnzY,QAAO,SAACutI,EAAKjvF,GACpF,OAAO20Q,EAAS76T,IAAIkmD,GAAUivF,EAAMA,EAAI5tI,OAAO,CAAC2+C,MAC/C,IACGyqQ,EAAWkK,GAAYA,EAASh+S,MAAM,CAACg+X,EAAkB,aACzDlrF,EAASkL,GAAYA,EAASh+S,MAAM,CAACg+X,EAAkB,WACvDK,EAAWvrF,GAjBGzrN,EAAOJ,QACvB6rN,EACA,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,IAiB7G,OACE,mCACE,cAAC,IAAD,CACEwG,SAAU+uR,EACVxkS,WAAY+hN,EACZriC,OAAO,OACPj9M,SAAS,KAJX,SAME,cAAC,IAAD,UACE,eAAC,IAAD,CAAMlD,UAAWF,EAAQqlU,iBAAzB,UACE,cAAC,IAAD,CACE15R,QAAS,kBAAMl6E,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAO1pE,GAAIo9W,MAC3EjlU,UAAWF,EAAQolU,UAFrB,SAIE,cAAC,IAAD,MAED1iF,GACC,cAAC,IAAD,CAAMtgN,MAAO,CAACuf,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MAAQmO,aAAcn4C,EAAMZ,QAAQ,MAA1F,SACE,cAAC,IAAD,CACEksC,IAAKo1M,GAAW,GAChBtgP,MAAO,QACPurC,YAAa,OACbC,aAAa,EACb0kP,OAAO,MAIb,cAAC,IAAD,CAAmBvqU,GAAG,2BAA2By4E,QAAQ,KAAKzT,MAAM,cAApE,SACG06B,KAED+9Q,GAAkB9/E,IAClB,eAAC,IAAD,CAAMplP,WAAW,EAAjB,UACGklU,GACC,eAAC,IAAD,CAAMllU,WAAW,EAAME,UAAU,SAAjC,UACE,cAAC,IAAD,CAAYusB,MAAM,cAAcyT,QAAQ,QAAxC,mCACA,cAAC,IAAD,CACE8M,IAAKk4R,EACLpjU,MAAO,QACPurC,YAAa,OACbC,aAAa,EACbvrC,OAAQ,YAIbsjU,GACC,eAAC,IAAD,CAAMrlU,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,WAA1D,UACE,cAAC,IAAD,CAAYgtB,MAAM,cAAcyT,QAAQ,QAAxC,SAAiD3tF,EAAE,oCACnD,cAAC,IAAD,CACE6yX,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuBP,EAAoBO,IAChEC,cAAc,EACdC,gBAAiBJ,IAEnB,cAAC,IAAD,CAAMplU,MAAM,EAAMgB,GAAI,GAAIpB,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAACiW,OAAQ,IAA/E,SACGmjM,GAAYuqF,GAAY,cAAC,IAAD,CAAS/0R,MAAOwqM,EAAhB,SACrB,cAAC,IAAD,CAAMtnM,KAAM6xR,EAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD9pF,cAQjE+pF,GACC,cAAC,IAAD,CAAmBx9W,GAAG,2BAA2By4E,QAAQ,QAAzD,SACG+kS,iB,6BCtKjB,4MAGO,IAAMY,EAAgC,EAChCC,EAAmC,EACnCC,EAAwC,GACxCC,EAA2C,GAC3CC,EAA2C,EAC3CC,EAAkB,GAEhB,KACbL,gCACAC,mCACAC,wCACAC,2CACAC,2CACAC,oB,8BChBF,IAAI/4L,EAAyBvrN,EAAQ,IAErCD,EAAQuhN,YAAa,EACrBvhN,EAAO,aAAc,EAErB,IAAIwkZ,EAAWh5L,EAAuBvrN,EAAQ,MAE1CwkZ,EAAaxkZ,EAAQ,GAErBykZ,EAAal5L,EAAuBvrN,EAAQ,OAE5CiJ,EAAQsiN,EAAuBvrN,EAAQ,OAEvC0kZ,EAASn5L,EAAuBvrN,EAAQ,OAExC2kZ,EAAUp5L,EAAuBvrN,EAAQ,OAEzC4kZ,EAASr5L,EAAuBvrN,EAAQ,OAExCgd,GAAY,EAAIwnY,EAAW3nY,QAyC3BgsP,EAxCY,CACdg8I,mBAAmB,EACnB9nY,OAAO,EAAIynY,EAAWhtY,OACtBwF,UAAWA,EACXwI,MAAO,SAAeomB,EAAO6vN,GAC3B,OAAO+oJ,EAAWh2X,SAAS3I,WAAW+lB,GAASA,EAAMpmB,OAAM,EAAI++X,EAAQ,SAAa9oJ,KAAU,EAAImpJ,EAAM,SAAah5W,EAAO6vN,IAE9H3mP,MAAO4vY,EAAM,QACbliY,UAAWiiY,EAAU,QACrBxvY,SAAU,SAAkB22B,EAAO6vN,GACjC,OAAO7vN,EAAM32B,UAAS,EAAIsvY,EAAQ,SAAa9oJ,KAEjDnqP,QAAS,SAAiBs6P,EAAOpiO,GAC/BoiO,EAAMt6P,QAAQk4B,IAEhBxb,OAAQ,SAAgB82X,GACtB,OAAO,EAAIN,EAAWx2X,QAAQ82X,GAAS,SAAU57Y,EAAK5I,GACpD,OAAOkkZ,EAAWh2X,SAASlsB,UAAUhC,GAASA,EAAM6lB,SAAW7lB,EAAM+gB,YAGzE3a,KAAMuC,EAAK,QACXtI,KAAM,SAAcwc,GAClB,OAAOA,EAAOA,EAAKxc,KAAO,GAE5B0R,KAAM,SAAcu5P,EAAOpiO,GACzB,OAAOoiO,EAAMv5P,KAAKm3B,IAEpBx1B,OAAQ2wY,EAAO,QACf36Y,OAAQ,SAAgBO,EAAGC,GACzB,QAAOA,EAAER,OAAOO,IAAYC,EAAEyb,QAAQjc,OAAOO,EAAE0b,UAEjD8+X,aAAc,SAAsBx6Y,EAAGC,GACrC,OAAOA,EAAE6H,MAAK,SAAUwI,EAAK9Z,GAC3B,OAAO8Z,IAAQtQ,EAAE5B,IAAI5H,OAGzBoiB,KAAM,SAAc7iB,GAClB,OAAOkkZ,EAAWh2X,SAAS3I,WAAWvlB,GAASA,EAAM6iB,OAAS7iB,IAIlEP,EAAO,QAAc8oQ,G,cChDrB/oQ,EAAOC,QAfP,SAAuC8xB,EAAQu4K,GAC7C,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IAEI3oB,EAAKtB,EAFLgqB,EAAS,GACTgvP,EAAa59Q,OAAO0D,KAAKmrB,GAG7B,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IACjCsB,EAAM03Q,EAAWh5Q,GACbwiM,EAAShlL,QAAQlc,IAAQ,IAC7B0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAGvB,OAAO0oB,GAIT9xB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BChBzD,SAASniK,EAAQzzC,GAa9B,OATEyzC,EADoB,oBAAX76C,QAAoD,kBAApBA,OAAOC,SACtC,SAAiBmH,GACzB,cAAcA,GAGN,SAAiBA,GACzB,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAItHyzC,EAAQzzC,GAbjB,mC,gBCAA,IAAI0uE,EAAiB,EAAQ,MAQ7Bt6E,EAAOC,QANP,SAAwB28E,EAAUC,GAChCD,EAAS35E,UAAYC,OAAOC,OAAO05E,EAAW55E,WAC9C25E,EAAS35E,UAAUG,YAAcw5E,EACjCtC,EAAesC,EAAUC,IAI3B78E,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCTxE,4FAiFeznI,sBACbgG,aA3Da,SAACC,GAAD,OAAkB2zL,YAAa,CAC5CnlI,OAAQ,CACNzsB,SAAU,SACVqX,IAAK,IACLV,UAAW,GACXoN,OAAQ9lD,EAAM8lD,OAAO00O,OAAS,EAC9BhtO,YAAaxtD,EAAMZ,QAAQ,GAC3B2rB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5B/N,WAAW,2BAAD,OAA6B7/C,EAAM+pC,QAAQ+d,UAAU,KAArD,gBAAiE9nD,EAAM+pC,QAAQ+d,UAAU,KAAzF,WAEZ9Y,MAAO,CACL46M,UAAW,cAEbs7E,MAAO,CACL3pR,WAAY,SACZjV,YAAatmC,EAAMZ,QAAQ,IAE7Bs3C,KAAM,CACJ1J,WAAYhtC,EAAMZ,QAAQ,UAwCfrF,EApC2C,SAAC,GAAD,IACxDiE,EADwD,EACxDA,QADwD,IAExDgxC,aAFwD,MAEhD,GAFgD,MAGxDm2R,wBAHwD,aAIxDC,0BAJwD,SAKxDp5Q,EALwD,EAKxDA,YALwD,OAOtD,eAAC,IAAD,CACE1tD,WAAW,EACXP,WAAW,SACXa,QAAQ,gBACRU,KAAK,SACLpB,UAAWF,EAAQwwD,OALrB,UAOE,cAAC,IAAD,CACEhwB,QAAQ,YACRzT,MAAM,UACN7sB,UAAWF,EAAQgxC,MAHrB,SAKGA,IAEH,uBAAM9wC,UAAWF,EAAQknU,MAAzB,UACIC,EAAmB,KAAO,cAAC,IAAD,IAC5B,cAAC,IAAD,CACEx7R,QAASqiB,EACTjhC,MAAM,UACNlqG,KAAK,QACLmhH,SAAUojS,EACVlnU,UAAWF,EAAQ04C,KALrB,SAOE,cAAC,IAAD,gB,cC3EV,IAAIj7C,EAGJA,EAAK,WACJ,OAAO32E,KADH,GAIL,IAEC22E,EAAIA,GAAK,IAAI04F,SAAS,cAAb,GACR,MAAOjnK,GAEc,kBAAXsmB,SAAqBioD,EAAIjoD,QAOrCxzB,EAAOC,QAAUw7E,G,cCnBjB,IAAI4pU,EAAOrlZ,EAAOC,QAAU,CAAEuuB,QAAS,UACrB,iBAAP82X,MAAiBA,IAAMD,I,6BCClCniZ,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAGT,IAAI+kZ,EAASrlZ,EAAQ,MAErBgD,OAAOyJ,eAAe1M,EAAS,QAAS,CACtC2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuB85L,GAAQ70R,WAI1C,IAAI80R,EAActlZ,EAAQ,MAE1BgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3C2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuB+5L,GAAa90R,WAI/C,IAAI+0R,EAAiBvlZ,EAAQ,MAE7BgD,OAAOyJ,eAAe1M,EAAS,gBAAiB,CAC9C2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBg6L,GAAgB/0R,WAIlD,IAAIg1R,EAAOxlZ,EAAQ,MAEnBgD,OAAOyJ,eAAe1M,EAAS,MAAO,CACpC2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBi6L,GAAMh1R,WAIxC,IAAIi1R,EAAUzlZ,EAAQ,MAEtBgD,OAAOyJ,eAAe1M,EAAS,SAAU,CACvC2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBk6L,GAASj1R,WAI3C,IAAIk1R,EAAc1lZ,EAAQ,MAE1BgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3C2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBm6L,GAAal1R,WAI/C,IAAIm1R,EAAa3lZ,EAAQ,MAEzBgD,OAAOyJ,eAAe1M,EAAS,YAAa,CAC1C2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBo6L,GAAYn1R,WAI9C,IAAIo1R,EAAU5lZ,EAAQ,MAStB,SAASurN,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAPvF1I,OAAOyJ,eAAe1M,EAAS,SAAU,CACvC2M,YAAY,EACZ/D,IAAK,WACH,OAAO4iN,EAAuBq6L,GAASp1R,Y,6BCxE3C,IAAI+6F,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wJACD,QAEJ3K,EAAQywH,QAAUq4I,G,iHCDN/nH,E,kDAAAA,K,uCAAAA,E,sCAAAA,E,sCAAAA,E,4BAAAA,E,oCAAAA,E,6CAAAA,M,OAaFA,EAAe+kQ,gB,EACf/kQ,EAAeG,kB,EACfH,EAAeK,kB,EACfL,EAAeO,a,EACfP,EAAeC,iB,EACfD,EAAeS,qB,IANJukQ,E,kDAQnB,WAAmBnpW,GAAqC,IAAD,8BACrD,gBADqD,sEAErD35C,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAFiC,E,UARhBk5K,M,6BC5BzC,kCAiBA,IAAMkwL,EAAmB,SAACC,GACxB,IACE,MAAyB,qBAAX1yX,QAAyBA,OAAO0yX,IAAgB,KAC9D,MAAOh5Y,GAEP,OAAO,OAILi5Y,EAAoB,SAACD,GACzB,IAAME,EAAS,IAAI1uY,IAEnB,MAAO,CACLsyF,QAAS,SAAC5gG,GACR,IACE,IAAM2vM,EAAUktM,EAAiBC,GACjC,GAAIntM,EAAS,CACX,IAAMv4M,EAAQu4M,EAAQ/uG,QAAQ5gG,GAC9B,GAAa,MAAT5I,EACF,OAAOA,GAGX,MAAO0M,IAGT,OAAOk5Y,EAAOr9Y,IAAIK,GAAOg9Y,EAAOv9Y,IAAIO,GAAO,MAE7C8gG,QAAS,SAAC9gG,EAAK5I,GACb,IACE,IAAMu4M,EAAUktM,EAAiBC,GACjC,GAAIntM,EAGF,OAFAA,EAAQ7uG,QAAQ9gG,EAAK5I,QACrB4lZ,EAAO94R,OAAOlkH,GAGhB,MAAO8D,IAGTk5Y,EAAO55Y,IAAIpD,EAAK5I,IAElB2pG,WAAY,SAAC/gG,GACXg9Y,EAAO94R,OAAOlkH,GACd,IACE,IAAM2vM,EAAUktM,EAAiBC,GAC7BntM,GACFA,EAAQ5uG,WAAW/gG,GAErB,MAAO8D,QAOF68F,EAAmBo8S,EAAkB,gBAChBA,EAAkB,mB,6BCtEpD,IAAI16L,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sNACD,cAEJ3K,EAAQywH,QAAUq4I,G,oKCVL86I,EAAqB,CAChC,CACErjZ,MAAO,KACPolC,MAAO,uBAET,CACEplC,MAAO,QACPolC,MAAO,0BAET,CACEplC,MAAO,QACPolC,MAAO,0BAET,CACEplC,MAAO,KACPolC,MAAO,wBASL0uF,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D0yI,WAAY,CACVzlU,QAAS,iBACTN,SAAU,UA0FCgmU,IArEuD,SAAC,GAehE,IAAD,IAdJhoU,iBAcI,aAbJP,kBAaI,MAbS,SAaT,MAZJS,iBAYI,MAZQ,SAYR,MAXJI,eAWI,MAXM,gBAWN,MAVJqlU,oBAUI,aATJzlS,eASI,MATM,YASN,MARJzT,aAQI,MARI,cAQJ,MAPJm9O,kBAOI,MAPQ,GAOR,MANJg8D,uBAMI,MANc,GAMd,MALJn3R,mBAKI,MALU,GAKV,MAJJw5R,mBAII,MAJU,KAIV,MAHJC,iCAGI,MAHwB,KAGxB,EAFJ9C,EAEI,EAFJA,iBACAD,EACI,EADJA,oBAEA,EAAwBl6W,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KACMr3C,EAAUs2C,IACTzjG,EAAK+xB,YAAe,gBAApB/xB,EAEP,OACE,eAAC,IAAD,yBACE6tD,MAAM,EACNJ,UAAWA,GAENA,EACC,CACEE,YACAI,UACAb,cAEF,IAVR,cAcIkmU,EAEM,cAAC,IAAD,CAAYzlS,QAASA,EAASzT,MAAOA,EAAOqV,MAAO8nO,EAAnD,SACGz9O,IAAQ55E,EAAE,4CAGf,KAEN,cAAC,IAAD,yBACE4+E,KAAMA,EACNg6B,QAAS,kBAAMpU,GAAQ,IACvBqU,OAAQ,kBAAMrU,GAAQ,IACtB70H,MAAOkjZ,EACPpjS,SAAU,SAAC2rB,GAAD,OAAgBw3Q,EAAoBx3Q,EAAMn6G,OAAOtxB,QAC3Dw9E,QAAS+uC,EAAY/uC,QAAU+uC,EAAY/uC,QAAU,CAAE3hE,KAAM2hE,EAAQqoU,YACrEE,YAAaA,GACTx5R,GARN,aAWI82R,EAAmB/1Y,KAAI,SAACihD,GACtB,IAAM+rE,EAAaopR,EAAgBv9Y,OAAS,GAAKu9Y,EAAgB71Y,SAAS0gD,EAAOvuD,OACjF,OACE,eAAC,IAAD,CAAUwhH,SAAU8Y,EAA+Bt6H,MAAOuuD,EAAOvuD,MAAO,WAAS,mBAAjF,UACE,cAAC,IAAD,CAAY,WAAS,mBAAmBg+G,QAAQ,QAAQzT,MAAM,cAA9D,SAA6El6E,EAAEk+B,EAAOnpB,SACrF89W,IAAqB30V,EAAOvuD,OAASgmZ,GAA6BA,EAA0Bz3V,EAAOvuD,SAFjEuuD,EAAOvuD,mB,6BChH3C,SAAS2hT,EAAcj2S,GACpC,OAAOA,GAAQA,EAAKi2S,eAAiBr3Q,SADvC,mC,6BCEA,IAAI2gL,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0KACD,4BAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,wVA8FY09I,EA9FZ,OAGaC,EAAyB,SAAC1tL,EAA4B2tL,GAAyB,IAAD,EACnFngC,EAAY,OAAGmgC,QAAH,IAAGA,KACjBC,EAAsBC,cAAa,CACrC,QAAWA,MAAaj9Y,MAAM48W,GAAnB,UACNA,EAAa39W,IAAI,kBADX,SAEP29W,IAUN,OARAxtJ,EAAUxnN,SAAQ,SAAC26G,GACjB,IACsC,EADhCwpN,EAAaxpN,EAAStjH,IAAI,MAC5Bg+Y,MAAaj9Y,MAAM48W,GACrBogC,EAAsBA,EAAoBp6Y,IAAImpU,OAAqD/0U,IAAzC4lX,EAAa39W,IAAI8K,OAAOgiU,IAA6B6wC,EAAa39W,IAAI8K,OAAOgiU,IAA7E,UAA6F6wC,EAAa39W,IAAI,kBAA9G,UAE1D+9Y,EAAsBA,EAAoBp6Y,IAAImpU,EAAY6wC,MAGvDogC,GAGIE,EAAsB,SAAChrR,GAAD,aAAa,UAAAA,EAAQjzH,IAAI,qBAAZ,eAA2Bwe,WAAYy0G,EAAUA,EAAQtvH,IAAI,aAAc0hB,iBAAO,MAErH64X,EAA8B,eAErCC,EAAY,SAAC96Y,EAAWyvP,GAAZ,OAA8BkrJ,MAAaj9Y,MAAMsC,GAAQA,EAAKrD,IAAI8yP,GAApC,OAA6CzvP,QAA7C,IAA6CA,OAA7C,EAA6CA,EAAOyvP,IAuBvFsrJ,EAA0B,SAACjrL,GACtC,IAAMkrL,EAAuC,GACzCC,EAAe,EAiBnB,OAfQ,OAARnrL,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,GAAkB,IAAD,EAClC,UAAAw+I,EAAUx+I,EAAS,mBAAnB,SAAgCh3P,SAAQ,SAACsqH,GACvC,IAAMqpK,GAAa6hH,EAAUlrR,EAAS,gCAClCqpK,IACFgiH,IACIH,EAAUlrR,EAAS,YAAcirR,GACnCG,EAAah2Y,KAAK,CAChB4vJ,IAAKqkI,EAAYgiH,EAAe,KAChCnpR,cAAegpR,EAAUlrR,EAAS,0BAOrCorR,GAGIE,EAAc,SAAC5gW,GAC1B,QAAKA,GAGiBA,EAAKsoK,UAAU,OAAOpxI,QAAQ,mBAAoB,IAAIx/B,cACvD7vC,SAAS,cAGnBg5Y,EAAa,SAAC7gW,GACzB,IAAKA,EACH,OAAO,EAET,IAAM8gW,EAAgB9gW,EAAKsoK,UAAU,OAAOpxI,QAAQ,mBAAoB,IAAIx/B,cAC5E,OAAOopW,EAAcj5Y,SAAS,aAAei5Y,EAAcj5Y,SAAS,cAGzDk5Y,EAAe,SAAC/gW,GAC3B,IAAKA,EACH,OAAO,EAET,IAAM8gW,EAAgB9gW,EAAKsoK,UAAU,OAAOpxI,QAAQ,mBAAoB,IAAIx/B,cAC5E,OAAOopW,EAAcj5Y,SAAS,eAAiBi5Y,EAAcj5Y,SAAS,iBAAmBi5Y,EAAcj5Y,SAAS,mB,SAGtGo4Y,K,sBAAAA,E,oBAAAA,E,yBAAAA,M,KAKL,IAAMe,EAA2B,SAAChhW,GACvC,IAAKA,EACH,OAAO,KAET,IAAM8gW,EAAgB9gW,EAAKsoK,UAAU,OAAOpxI,QAAQ,mBAAoB,IAAIx/B,cAEtEupW,EAAmBH,EAAchiY,QAAQ,aAC/C,GAAyB,IAArBmiY,EACF,OAAOhB,EAAsBiB,UAE/B,IAAMC,EAAkBL,EAAchiY,QAAQ,YAC9C,GAAwB,IAApBqiY,EACF,OAAOlB,EAAsBmB,SAE/B,IAAMC,EAAmBP,EAAchiY,QAAQ,aAC/C,GAAyB,IAArBuiY,EACF,OAAOpB,EAAsBmB,SAE/B,IAAME,EAAoBR,EAAchiY,QAAQ,cAChD,GAA0B,IAAtBwiY,EACF,OAAOrB,EAAsBsB,WAE/B,IAAMC,EAAsBV,EAAchiY,QAAQ,gBAClD,GAA4B,IAAxB0iY,EACF,OAAOvB,EAAsBsB,WAE/B,IAAME,EAAuBX,EAAchiY,QAAQ,iBACnD,GAA6B,IAAzB2iY,EACF,OAAOxB,EAAsBsB,WAI/B,IAAMv7X,EAAU,CACd,CAAEg6B,KAAMigW,EAAsBiB,UAAWzmZ,MAAOwmZ,GAChD,CAAEjhW,KAAMigW,EAAsBmB,SAAU3mZ,MAAO0mZ,GAC/C,CAAEnhW,KAAMigW,EAAsBmB,SAAU3mZ,MAAO4mZ,GAC/C,CAAErhW,KAAMigW,EAAsBsB,WAAY9mZ,MAAO6mZ,GACjD,CAAEthW,KAAMigW,EAAsBsB,WAAY9mZ,MAAO+mZ,GACjD,CAAExhW,KAAMigW,EAAsBsB,WAAY9mZ,MAAOgnZ,IACjD53Y,QAAO,SAAAquE,GAAI,OAAoB,IAAhBA,EAAKz9E,SACtB,OAAuB,IAAnBurB,EAAQ7lB,OACH,KAEa6lB,EAAQ/b,QAAO,SAACutI,EAAKt/D,GAAN,OAAeA,EAAKz9E,MAAQ+8I,EAAI/8I,MAAQy9E,EAAOs/D,IAAKxxH,EAAQ,IAC5Eg6B,MAGVk8V,EAA0C,SAAC,GAAuC,IAAD,IAApC5oL,mBAAoC,MAAtB/8M,iBAAsB,EAAdo6M,EAAc,EAAdA,QACxE+wL,EAA8BpuL,EAAYrpN,QAAO,SAACutI,EAAKw6O,GAC3D,OAAkC,OAA9BA,EAAW3vX,IAAI,WACVm1I,EAAIv6H,IAAI+0W,EAAW9yW,MAAM,CAAC,UAAW,QAEvCs4H,IACNr6I,iBAsBH,OApB2Bm2N,EAAYrpN,QAAO,SAACutI,EAAKw6O,EAAuBv3X,GAiBzE,OAhBKu3X,EAAWzvX,IAAI,aAElBi1I,EAAMA,EAAIxxI,IAAIvL,EAAOu3X,EAAWhsX,IAAI,UAAW2qN,IAG1C+wL,EAA4Bn/Y,IAAIyvX,EAAW9yW,MAAM,CAAC,UAAW,UAChEs4H,EAAMA,EAAI9sI,KAAKgd,iBAAO,CACpB6uH,QAAS,CACPh3G,GAAIyyV,EAAW9yW,MAAM,CAAC,UAAW,QAEnCsxM,UAAW,KACXE,QAAS,KACTD,SAAU,UAITj5E,IACN87E,K,00BCtJCxlG,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dw0I,aAAc,CACZ1tR,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEdq4I,cAAe,CACbxyL,SAAUpB,EAAMZ,QAAQ,GACxBknC,YAAatmC,EAAMZ,WAErBs3C,KAAM,CACJ3rB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5Bo+R,oBAAqB,CACnBr9S,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5Bq+R,qBAAsB,CACpBjnU,SAAS,eAAD,OAAiBpB,EAAMZ,QAAQ,GAA/B,QAEVkpU,WAAY,CACV1nU,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BmpU,gBAAiB,CACfjoU,SAAUN,EAAMZ,QAAQ,GACxBgC,SAAU,sBAEZonU,gBAAiB,CACfz9S,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1By+R,mBAAoB,qBAmTT1uU,qBACb4pC,mBAd0B,WAC1B,IAAM+kS,EAAsCrgW,gBACtCsgW,EAAqCj+V,gBACrCk+V,EAAwCh+V,gBAC9C,OAAO,SAAyB9e,GAC9B,MAAQ,CACN+8W,0BAA2BH,EAAoC58W,GAC/Dg9W,yBAA0BH,EAAmC78W,GAC7Di9W,4BAA6BH,EAAsC98W,OAM1C,MAC7BmY,YAAgB,gBAFH81B,EAnSmC,SAAC,GAS5C,IARLurC,EAQI,EARJA,OACA0jS,EAOI,EAPJA,kBACAC,EAMI,EANJA,wBACAC,EAKI,EALJA,qCACAL,EAII,EAJJA,0BACAC,EAGI,EAHJA,yBACAC,EAEI,EAFJA,4BACAl4X,EACI,EADJA,EAEMmtD,EAAUs2C,KACVt0C,EAAQwjD,cACR/zF,EAAW2F,wBACX+zW,EAAS,OAAG7jS,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,WACxBoH,EAAM,OAAGq1G,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,UACrBugZ,EAAS,OAAG9jS,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,aACxBwgZ,GAAiB,OAAN/jS,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,mCAAoCigZ,EAC3DQ,GAAgB,OAANhkS,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,2CAA4CkgZ,EAClEQ,EAAat5Y,EAAOI,QAAO,SAAC7P,GAAD,MAAmC,WAAxBA,EAAMqI,IAAI,aAAwBqR,SAAW,EACzF,OACE,eAACyjE,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAW4qU,EAAY,MAAQ,SAAUrrU,WAAYqrU,EAAY,aAAe,UAAvG,SAEIn5Y,EAAOnC,KAAI,SAACtN,EAAMS,GAAW,IAAD,UACpBskH,EAAYD,EAAOz8G,IAAI,OACvB48H,EAAcjlI,EAAMqI,IAAI,eACxB2gZ,EAAsBhpZ,EAAMklB,MAAM,CAAC,mBAAoB,QACvD+jY,EAAgBjpZ,EAAMqI,IAAI,MAC1B6gZ,EAAyC,WAAxBlpZ,EAAMqI,IAAI,UAC3B8gZ,EAA0C,YAAxBnpZ,EAAMqI,IAAI,UAC5B+gZ,EAAsBT,GAAaI,GAAcG,EACjDG,EAAWrpZ,EAAMqI,IAAI,UACrB63T,EAAUlgU,EAAMqI,IAAI,2BACpB66T,EAAWljU,EAAMqI,IAAI,mCAC3B,OAAQ8gZ,IACPP,EA8GC,gBAACzrU,EAAA,EAAD,CAAMW,WAAW,EAA2DE,UAAU,SAASI,QAAQ,SAASb,WAAW,SAASW,MAAM,EAAMgB,GAAI,EAAGV,GAAI,EAAGohC,MAAO,CAAEx/B,QAAS,GAAhL,UACE,eAACmuC,EAAA,EAAD,CACEC,MACE,gBAACrxC,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6CinB,KAC3CokR,GAAY,eAACvrS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,0CAC3D64X,GAAkB,eAACprS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,4CALzE,SAQE,gBAAC8sD,EAAA,EAAD,CAAMyiC,MAAO,CAACuf,OAAQ,oBAAC+pR,EAAuE1pU,EAAM+pC,QAAQC,KAAK,KAA5DhqC,EAAM+pC,QAAQC,KAAK,MAAiD5pC,MAAO,GAAIi2C,OAAQ,GAAItU,SAAU,WAAYoW,aAAcn4C,EAAMZ,QAAQ,MAAlM,WAEIsqU,GACA,sBAAKtpS,MAAO,CAAChgC,MAAO,OAAQi2C,OAAQ,OAAQtU,SAAU,WAAY+jB,OAAQ,GAA1E,SACE,uBAAMk3I,GAAG,OAAOC,GAAG,OAAOC,GAAG,IAAIC,GAAG,IAAI/8J,MAAO,CAACy7J,OAAQ77L,EAAM+pC,QAAQC,KAAK,KAAM+xJ,YAAa,OAGjG8tI,EACC,eAAC,IAAD,CACEv+R,IAAKu+R,GAAY,GACjBl+R,YAAa,OACbC,aAAa,EACb0kP,OAAO,EACPlwP,MAAO,CAAC4R,QAAS03R,EAAiB,EAAI,MAExC,eAAC,KAAD,CAAatpS,MAAO,CAAC6L,SAAU,GAAIlK,SAAU,WAAYqX,KAAM,EAAG/5G,MAAO,EAAG0rF,MAAQ2+S,EAA2C1pU,EAAM+pC,QAAQC,KAAK,KAA7ChqC,EAAM+pC,QAAQC,KAAK,QAEzH6/R,GAAYH,GACX,eAAClqR,EAAA,EAAD,CACEpf,MAAO,CAACx/B,QAAS,EAAGmhC,SAAU,WAAYziG,MAAO,EAAG+5G,OAAQ,GAC5D1P,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,cACAi7L,QAASmpF,MAGbp6W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAVtF,SAaE,eAAC,KAAD,CAAYwc,SAAS,QAAQ7L,MAAO,CAACrV,MAAO,QAAS+e,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,eAKjG,eAAC1L,EAAA,EAAD,CACEvT,MAAM,cACN7sB,UAAW6tC,MAAU,mBAClB/tC,EAAQmqU,cAAe,GADL,cAElBnqU,EAAQwqU,iBAAmBkB,GAFT,IAIrBtpS,MAAO,CAAEhgC,MAAO,OAAQ2xC,UAAW,UANrC,SAOE0T,IACD+jR,GAAuBX,GACtB,eAACp/R,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,eACnB/tC,EAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,cACA89Q,iBAAkBiG,MAGtB/5W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAhBb,SAkBG74X,EAAE,wCAGJw4X,GAAY3oF,GAAa4oF,IAAmB,OAAR5lF,QAAQ,IAARA,OAAA,EAAAA,EAAU7iU,MAAO,IACtD,eAAC4oH,GAAA,EAAD,CACA1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,eACnB/tC,EAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,cACA+9Q,eAAgB9iF,EAChBgD,eAGJj0R,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBX,SAmBG74X,EAAE,qCAGLm4X,GACA,eAACrrU,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACGgrU,EACG,eAAC36R,EAAA,EAAD,CAASC,MAAO46R,EAAsB/4X,EAAE,0DAA4D,GAApG,SACE,gCACE,eAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLmhH,SAAU4nS,EACVjgS,QAAS,WACPu/R,EAAqC,CAACzjR,IACtCwjR,EAAwB1jS,EAAWtkH,EAAO,iBAN9C,SASI4vB,EAAE,sCAIV,eAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACL8oH,QAAS,WACPl6E,EAASu/B,aAAO22R,GAAD,qBAAiCpgP,EAAjC,mBAAqDtkH,EAArD,WAAqE,YAJxF,SAME4vB,EAAE,mCA1Hd,UAA+B44X,EAA/B,YAAgDlkS,EAAhD,YAA6DkgB,IA7G7D,gBAAC9nD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAA2DM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAzI,UACE,gBAAC3B,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXJ,UAAW6tC,MAAU,mBAClB/tC,EAAQsqU,YAAa,GADH,cAElBtqU,EAAQuqU,gBAAkBS,GAFR,IAIrB1pU,KAAK,SAPP,UASE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQ41L,cAAjF,UAE+B,IAA3BtuJ,EAAOz8G,IAAI,YACT,eAAC,KAAD,CAA0BojH,SAAS,QAAQ/tC,UAAW6tC,MAAU,mBAC7D/tC,EAAQ04C,MAAO,GAD8C,cAE7D14C,EAAQoqU,qBAAuBsB,GAF8B,MAIhE,eAAC,KAAD,CAA0Bz9R,SAAS,QAAQ/tC,UAAW6tC,MAAU,mBAC7D/tC,EAAQ04C,MAAO,GAD8C,cAE7D14C,EAAQoqU,qBAAuBsB,GAF8B,QAMtE,gBAAC/rU,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQqqU,qBAA7C,UACE,eAACt5R,EAAA,EAAD,CAASC,MAAOyW,EAAhB,SACE,eAACnnB,EAAA,EAAD,CACEvT,MAAM,cACN7sB,UAAW6tC,MAAU,mBAClB/tC,EAAQmqU,cAAe,GADL,cAElBnqU,EAAQwqU,iBAAmBkB,GAFT,IAFvB,SAMEjkR,MAEH+jR,GAAuBX,GACtB,eAACp/R,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,eACnB/tC,EAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,cACA89Q,iBAAkBiG,MAGtB/5W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAhBb,SAkBG74X,EAAE,wCAGJw4X,GAAY3oF,GAAa4oF,IAAmB,OAAR5lF,QAAQ,IAARA,OAAA,EAAAA,EAAU7iU,MAAO,IACtD,eAAC4oH,GAAA,EAAD,CACA1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,eACnB/tC,EAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,cACA+9Q,eAAgB9iF,EAChBgD,eAGJj0R,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBX,SAmBG74X,EAAE,2CAKTm4X,GACA,eAACrrU,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACGgrU,EACG,eAAC36R,EAAA,EAAD,CAASC,MAAO46R,EAAsB/4X,EAAE,0DAA4D,GAApG,SACE,gCACE,eAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLmhH,SAAU4nS,EACVjgS,QAAS,WACPu/R,EAAqC,CAACzjR,IACtCwjR,EAAwB1jS,EAAWtkH,EAAO,iBAN9C,SASI4vB,EAAE,sCAIV,eAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACL8oH,QAAS,WACPl6E,EAASu/B,aAAO22R,GAAD,qBAAiCpgP,EAAjC,mBAAqDtkH,EAArD,WAAqE,YAJxF,SAME4vB,EAAE,mCAxGd,UAA2C44X,EAA3C,YAA4DlkS,EAA5D,YAAyEkgB,a,SClE/EnR,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D3kJ,MAAO,CACLpuC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,IAE/By3C,MAAO,CACLj2C,QAASZ,EAAMZ,QAAQ,GACvBi3C,OAAQ,QAEVyzR,sBAAuB,CACrBluI,UAAW,QACXywC,UAAW,OACXhsO,OAAQL,EAAMZ,QAAQ,IAAK,IAE7ByoM,eAAgB,CACdzmK,UAAWphC,EAAMZ,QAAQ,MAE3B2qU,WAAY,CACV5xR,aAAcn4C,EAAMZ,WAEtBopU,gBAAiB,CACfz9S,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1By+R,mBAAoB,gBAEtBuB,uBAAwB,CACtBppU,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B0qC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzCvb,aAAc,GACdnsC,MAAO,cACPF,QAAS,OACT+pU,YAAa,iBAqQFlwU,qBACb4pC,mBAbsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DqoE,WAAYC,wBAAcylP,KADO/tT,CAEhC9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,WACAy6W,qBAAsB,SAACl+W,GACrByD,EAAS,IAAIwJ,IAA2BjN,SAM5CiY,YAAgB,gBAFH81B,EAjQ4C,SAAC/qC,GAC1D,IACEk7W,EAIEl7W,EAJFk7W,qBACAz6W,EAGET,EAHFS,SACAwwE,EAEEjxE,EAFFixE,WACApvF,EACEme,EADFne,EAGIgxH,EAAYrrG,sBAAY4X,gBAE9B,EAAyD7kB,YAAe,GAAxE,mBAAO4gX,EAAP,KAA8BC,EAA9B,KACA,EAA2D7gX,WAAe,CAACkmE,MAAM,EAAO46S,YAAY,IAApG,mBAAOC,EAAP,KAA6BC,EAA7B,KACA,EAAsChhX,WAAe,MAArD,mBAAOihX,EAAP,KAAoBC,EAApB,KACA,EAAoDlhX,WAAe,MAAnE,mBAAOmhX,EAAP,KAA2BC,EAA3B,KACA,EAAkFphX,WAAe,IAAjG,mBAAOqhX,EAAP,KAA0C1B,EAA1C,KAEMlpU,EAAQwjD,cACRxlD,EAAUs2C,KACVgiG,EAAar2G,GAAcA,EAAWp3G,IAAI,eAAiB6O,gBAC3Do5B,EAAUwlL,EAAWjmN,QAAO,SAAAmmN,GAAS,OAAKA,EAAU3tN,IAAI,kBAExDgiZ,EAAoB,SAACr0L,GACzB0zL,EAAqBh8X,iBAAO,aAC1BuhF,MAAM,GACF+mH,GAAa,CAAEA,iBAUjByyL,EAA0B,SAAC1jS,EAAmBtkH,EAAespG,GAClD,iBAAXA,GACFkgT,EAAellS,GACfolS,EAAsB1pZ,GACtBspZ,EAA2B,CAAC96S,MAAM,EAAM46S,YAAY,MAEpD56W,EAASu/B,aAAO22R,GAAD,qBAAiCpgP,EAAjC,mBAAqDtkH,EAArD,WAAqE,WACpFwpZ,EAAe,MACfE,EAAsB,MACtBzB,EAAqC,MAInC4B,EAAmB,SAACvlS,EAAWhb,GACnC,IAAM+a,EAASx0E,EAAQjoC,IAAI08G,IACTD,GAAUA,EAAOz8G,IAAI,WAC7BiF,KAAI,SAACtN,EAAOS,GACpBwuC,EAASu/B,aAAO22R,GAAD,qBAAiCpgP,EAAjC,mBAAqDtkH,EAArD,WAAqEspG,OAEtFkgT,EAAe,MACfvB,EAAqC,KA2BjC6B,EAA4Bj6W,GAEtB,IAFiCA,EAAQzgC,QAAQ,SAAAi1G,GAC3D,OAAOA,EAAOz8G,IAAI,UAAU4d,MAAM,SAAAjmB,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,gBACpDhI,KAEH,OACE,gBAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UAEI1tC,IAA6B,IAAjBA,EAAQjwC,MAAckqZ,GAChC,eAACC,GAAA,EAAD,CACEh8R,MAAOn+F,EAAE,8BACTmqG,SAAUnqG,EAAE,sCACZo6X,WAAYp6X,EAAE,8BACdq6X,WAAY,eAACC,GAAA,EAAD,CAA4B/qU,MAAM,KAAKi2C,OAAO,KAAKtrB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAAM/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,OACzIuiF,QAAS,kBAAMkhS,OAEjB,eAACltU,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SAEItuC,EAAQhjC,KAAI,SAACw3G,EAAQl8G,GACnB,IAAM+1G,EAAYmG,GAAUA,EAAOz8G,IAAI,UACjC3I,EAAO,OAAGolH,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,WACtBuiZ,EAAkB,OAAG9lS,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,sBACjCugZ,EAAS,OAAG9jS,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,aACxBwiZ,EAAqBlsS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,iBAAxBA,EAAMqI,IAAI,aACzDyiZ,EAAensS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,WAAxBA,EAAMqI,IAAI,aACnD0iZ,EAAgBpsS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,aACpD2iZ,EAA2BH,EAAmBxqZ,OAASs+G,EAAUt+G,KACjE4qZ,EAAqBH,EAAazqZ,OAASs+G,EAAUt+G,KACrD6qZ,EAAsBH,EAAc1qZ,OAASs+G,EAAUt+G,KAC7D,OAAQ6qZ,GACN,eAAC/tU,EAAA,EAAD,CAAMe,MAAM,EAAMM,GAAKoqU,EAAgB,KAAJ,EAAUlqU,GAAKkqU,EAAgB,KAAJ,EAAU1pU,GAAI,GAA5E,SACE,gBAACi3C,EAAA,EAAD,CAAOnY,QAAQ,WAAWtgC,UAAWF,EAAQ64C,MAA7C,UACE,gBAACl5C,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXG,UAAWF,EAAQ+rU,WAJrB,UAME,eAACzrS,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,KAAW,eACnB/tC,EAAQwqU,gBAAkBgD,IAJ/B,SAOGlmS,EAAOz8G,IAAI,SAAWy8G,EAAOz8G,IAAI,WAAa,KAAO,MAExD,gBAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE4M,WAAY,QAAvC,UACE,eAAC+B,EAAA,EAAD,CAASC,MAAO9uH,EAAU2wB,EAAE,2DAA6D,GAAzF,SACE,gCACE,eAAC2uG,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,SAACz8G,IA3EF,SAACo4G,EAAQ/a,GAC7C,IAAMgb,EAAYD,EAAOz8G,IAAI,OACvBs2G,EAAYmG,EAAOz8G,IAAI,UAC7B4hZ,EAAellS,GACf2jS,EAAqC/pS,EAAU1uG,QAAO,SAACutI,EAAKx9I,GAAN,OAAgBw9I,EAAI5tI,OAAO,CAAC5P,EAAMqI,IAAI,mBAAkB,KAC/F,iBAAX0hG,EACFggT,EAA2B,CAAC96S,MAAM,EAAM46S,YAAY,IAEpDS,EAAiBvlS,EAAW,UAoEAomS,CAA8BrmS,EAAQ,iBAExCtD,SAAU9hH,GAAWsrZ,GAA4BE,EALnD,SAOE,eAAC38R,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SAA+D,eAAC,KAAD,YAIrE,eAAC2uG,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,SAACz8G,GACR49Y,EAAiBxlS,EAAOz8G,IAAI,OAAQ,WAEtCm5G,SAAUypS,GAAsBC,EALlC,SAOE,eAAC38R,EAAA,EAAD,CAASC,MAAOn+F,EAAE,yCAAlB,SAA4D,eAAC,KAAD,QAE9D,eAAC2uG,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,kBAAMkhS,EAAkBvlS,IAFnC,SAIE,eAAC,KAAD,CAAY2G,SAAS,YAEvB,eAACuT,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,WACP8gS,EAAerhZ,GACfghZ,GAAwB,IAJ5B,SAOE,eAAC,IAAD,CAAYn+R,SAAS,kBAKzB41B,GAAaupQ,GACX,eAAC9sS,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQgsU,uBAAnD,SACGn5X,EAAE,yCAIT,eAAC,GAAD,CACEy0F,OAAQA,EACR0jS,mBAAmB,EACnBC,wBAAyBA,EACzBC,qCAAsCA,QApEyC9/Y,MAyEtFsE,aAIX,eAAC,IAAD,CACE+hG,KAAM06S,GAAyBG,EAAqB76S,KACpDhvD,QACE,gBAACk9B,EAAA,EAAD,WACIwsU,GACA,eAAC7rS,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,uCADR,YACkDigB,EAAQprB,MAAM,CAAC8kY,EAAa,SAD9E,OAIAF,EAAqB76S,MACrB,uCACA,eAAC6O,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,4CADR,YACuDigB,EAAQprB,MAAM,CAAC8kY,EAAa,SADnF,OAGA,eAAC7sU,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASY,QAAS,EAAGlB,UAAWF,EAAQ8rU,sBAAzE,SAEIc,EAAkC98Y,KAAI,SAAC23H,EAAqBxkI,GAAtB,OACpC,eAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACIinB,KAFKxkI,WAUjBkpZ,GACA,eAAC7rS,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ6pM,eAAnE,SACGh3P,EAAE,4CAGLy5X,EAAqB76S,MACrB,eAAC6O,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ6pM,eAAnE,SACGh3P,EAAE,oDAKXkiW,kBAAmB,WACjBq3B,GAAwB,GACxBG,EAA2B,CAAC96S,MAAM,EAAO46S,YAAY,KAEvDr8E,aAAc,WACRm8E,GA3MS,SAAC/gZ,GACpB,IAAMqmS,EAAUn5E,EAAWjmN,QAAO,SAAC+1H,EAAKwlR,GAAN,OAAiBA,IAAWxiZ,KAC9DqmC,EAASu/B,aAAO22R,GAAkB,aAAcl2D,IAChD26G,GAAwB,GAyMhByB,CAAarB,GAEXF,EAAqB76S,OApK3B66S,EAAqBD,WACvBS,EAAiBN,EAAa,gBAE9B/6W,EAASu/B,aAAO22R,GAAD,qBAAiC6kD,EAAjC,mBAAuDE,EAAvD,WAAoF,iBAErGH,EAA2B,CAAC96S,MAAM,EAAO46S,YAAY,IACrDI,EAAe,MACfE,EAAsB,MACtBzB,EAAqC,MAgKjC91B,aAAa,EACbD,SAAUm3B,EAAqB76S,KAAO5+E,EAAE,gCAAkC,a,sHCvNrEi7X,GAA0C,SAACh8K,EAAkBvlI,GACxE,IAAMrwF,EAAQ41N,EAAiBr/N,QAAO,SAACutI,EAAK+tQ,GAC1C,OAAKA,EAAKljZ,IAAI,eAGPm1I,EAFEA,EAAM+tQ,EAAKljZ,IAAI,UAAUwH,QAAO,SAAA27Y,GAAiB,OAAIA,EAAkBnjZ,IAAI,YAAc0hG,KAAQ1pG,OAGzG,GACH,OAAOqZ,GAAgB,GAGZ+xY,GAA8B,SAACC,EAA0BC,EAAyB5hT,EAA+C6hT,GAC5I,IAAMC,EAAoBF,EAAwB97Y,QAAO,SAAC07Y,EAAMO,GAC9D,MAAsB,YAAlBF,EACa,YAAX7hT,GAEMwhT,EAAKljZ,IAAI,gBAAkBqjZ,EAAyBxmY,MAAM,CAAC4mY,EAAS,iBAAmBP,EAAKljZ,IAAI,YAAc0hG,GAAU2hT,EAAyBxmY,MAAM,CAAC4mY,EAAS,aAAe/hT,EAEjLwhT,EAAKljZ,IAAI,gBAAkBkjZ,EAAKljZ,IAAI,YAAc0hG,GAAU2hT,EAAyBxmY,MAAM,CAAC4mY,EAAS,aAAe/hT,EAG9G,YAAXA,GAEMwhT,EAAKljZ,IAAI,iBAAmBqjZ,EAAyBxmY,MAAM,CAAC4mY,EAAS,iBAAmBP,EAAKljZ,IAAI,YAAc0hG,GAAU2hT,EAAyBxmY,MAAM,CAAC4mY,EAAS,aAAe/hT,GAEjLwhT,EAAKljZ,IAAI,gBAAkBkjZ,EAAKljZ,IAAI,YAAc0hG,GAAU2hT,EAAyBxmY,MAAM,CAAC4mY,EAAS,aAAe/hT,KAIlI,OAAO8hT,EAAkBxrZ,KAAOwrZ,EAAkBxrZ,KAAO,GAG9C0rZ,GAAyC,SAACL,EAA0BC,EAAyB5hT,GACxG,IAAM8hT,EAAoBF,EAAwB17Y,QAAO,SAACutI,EAAK+tQ,EAAMO,GACnE,GAAIP,EAAKljZ,IAAI,eACX,OAAOm1I,EAEP,IAAMwuQ,EAAgCT,EAAKljZ,IAAI,UAAUwH,QAAO,SAAA27Y,GAAsB,IAAD,EAC7ES,EAAmB,UAAGP,EAAyBxmY,MAAM,CAAC4mY,EAAS,kBAA5C,aAAG,EAAqD7lY,MAAK,SAAAjmB,GAAK,OAAIA,EAAMqI,IAAI,QAAUmjZ,EAAkBnjZ,IAAI,SACzI,OAAOmjZ,EAAkBnjZ,IAAI,YAAc0hG,GAAUkiT,GAAuBA,EAAoB5jZ,IAAI,YAAc0hG,KAEpH,OAAOyzC,EAAI5tI,OAAOo8Y,KAEnBzvY,kBACH,OAAOsvY,EAAkBxrZ,KAAOwrZ,EAAkBxrZ,KAAO,GAG9C8kW,GAAmB,iBAEnB+mD,GAAsE,SAACC,EAAyDC,GAAgE,IAAD,EAC1M,wBAAOD,QAAP,IAAOA,OAAP,EAAOA,EACHt8Y,QAAO,SAAC07Y,GACR,IAAMpvL,EAAeovL,EAAKljZ,IAAI,gBACxBgkZ,EAAa,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAgB/jZ,IAAI8zN,GACpCmwL,EAA8BD,GAAiD,YAAhCA,EAAchkZ,IAAI,UACvE,OAAOkjZ,EAAKljZ,IAAI,UAAYikZ,KAE7Bh/Y,KAAI,SAACi+Y,GAAD,OAAUA,EAAKljZ,IAAI,kBACvB0I,cARH,QAQawL,kBA8DTgwY,G,4MACGjhX,MAA8B,CACnC43W,iBAAkB,KAClBsJ,0BAA0B,EAC1BC,UAAU,G,EAGJh1R,c,IAEAi1R,aAAe3jX,c,EACf4jX,cAAgB5jX,c,EAChB6jX,sBAAwB7jX,c,EACxB8jX,YAAc9jX,c,EACd+jX,WAAa/jX,c,EACbgkX,cAAgBhkX,c,EAEhBikX,gB,CACN,CACE5nX,MAAO,EAAKoJ,MAAMne,EAAE,+BACpBtwB,IAAK,EAAK4sZ,gB,mBAET,EAAKn+W,MAAM6yG,UAAY,CAAC,CACzBj8G,MAAQ,sBACRrlC,IAAK,EAAK6sZ,wBACP,I,CACL,CACExnX,MAAQ,EAAKoJ,MAAMne,EAAE,6BACrBtwB,IAAK,EAAK8sZ,aAEZ,CACEznX,MAAQ,EAAKoJ,MAAMne,EAAE,4BACrBtwB,IAAK,EAAK+sZ,YAEZ,CACE1nX,MAAQ,EAAKoJ,MAAMne,EAAE,+BACrBtwB,IAAK,EAAKgtZ,iB,EA8EPE,wBAA0B,WAC/B,MAAkD,EAAKz+W,MAA/CgvC,EAAR,EAAQA,QAASvuC,EAAjB,EAAiBA,SAAU80F,EAA3B,EAA2BA,OAAQ1zG,EAAnC,EAAmCA,EAC7BwrG,GADN,EAAsCjH,QACrBmP,EAAO17H,IAAI,OAE5B,MAAO,CACL,eAAC,IAAD,CAAqCq1E,UAAWF,EAAQ0vU,QAApC,mBAClBt9Y,OAAO,CACT,eAAC,IAAD,CAEEouG,QAAQ,OACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK+rH,SAAW/rH,GAElB,gBAAc,OACdy9G,QAAS0S,EACL,kBAAM5sF,EAASv+B,YAAK,GAAD,OAAI8qB,wBAAJ,YAA6BqgG,MAChD,kBAAO5sF,EAASv+B,YAAK6qB,yBAEzBmiD,UAAWF,EAAQ2vU,gBAZrB,SAcG98X,EAAE,uBAbC,kBA2BN,eAAC,IAAD,CAEE2tF,QAAQ,YACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK+rH,SAAW/rH,GAElB,gBAAc,OACdgyE,UAAWF,EAAQ2vU,gBACnB3rS,SAAU,EAAKl2E,MAAMmhX,SACrBjoZ,KAAK,SAVP,SAYG6rB,EAAE,qBAXC,mB,EAgBHuwS,S,uCAAW,WAAOnhN,GAAP,qEAAAx1G,EAAA,+DAUZ,EAAKukC,MARP4+W,EAFc,EAEdA,kBACAC,EAHc,EAGdA,SACA9gT,EAJc,EAIdA,OACAx+C,EALc,EAKdA,SACAg2E,EANc,EAMdA,OACA5yE,EAPc,EAOdA,cACAm8V,EARc,EAQdA,oBARc,EASdjsQ,UAGF,EAAKn6B,SAAS,CAAEulS,UAAU,IAEpB5wR,EAAWkI,EAAO17H,IAAI,MACtBqzH,EAAWjc,EAAWv6F,MAAM,CAAC,eAAgB,QAAU,KACvDu4G,EAAQhe,EAAWv6F,MAAM,CAAC,QAAS,WAAa,GAhBtC,SAiBYw8S,YAAI,CAAEn1N,SAAQtK,MAAOwd,EAAWp3G,IAAI,cAjBhD,OAiBV+qX,EAjBU,OAkBVlzD,EAAUh7S,gBAAMkuW,EAAe,CAAC,IAAK,MAAO,IAC5C1tB,EAAajmP,EAAWp3G,IAAI,cAC5Bm1H,EAAgB/d,EAAWp3G,IAAI,iBAC/B48H,EAAcxlB,EAAWp3G,IAAI,eAC7BytN,EAAar2G,EAAWp3G,IAAI,cAC5BklZ,EAAW9tS,EAAWp3G,IAAI,SAC1BqoM,EAAQ68M,GAAYA,EAASj4Y,eAAc,SAAAmoT,GAC/CA,EAAOzsT,SAAQ,SAACw8Y,EAAgB/sZ,GAC9B+sZ,EAAex8Y,SAAQ,SAACy8Y,EAAUC,GAChCD,EAASz8Y,SAAQ,SAAC28Y,EAAaC,GAC7B,GAAoB,KAAhBD,EACF,OAAOlwF,EAAOjpT,MAAM,CAAC/T,EAAOitZ,EAAQE,GAAa,kBAMrDC,EAAqBpuS,EAAWp3G,IAAI,kBACpCylZ,EAAWruS,EAAWv6F,MAAM,CAAC,YAAa,OAAQ,QAClD6oY,EAAYtuS,EAAWv6F,MAAM,CAAC,YAAa,QAAS,QAGpD8oY,EAAwB92Y,gBAAM5B,eAAc,SAACywQ,GAAS,IAAD,IACzDA,EAAI/5Q,IAAI,OAAQyzG,EAAWp3G,IAAI,SAAW6O,iBAE1CgpT,GAAWwlC,EACP3/E,EAAIvxQ,MAAM,CAAC,OAAO,SAAU,OAAQ,UAAW0rT,GAAWwlC,GAC1D3/E,EAAIpxQ,SAAS,CAAC,OAAQ,WAE1BoxQ,EAAI/5Q,IAAI,OAAQwxH,GAChBuoJ,EAAI/5Q,IAAI,QAASyxH,GACjBsoJ,EAAI/5Q,IAAI,WAAY0vH,GACpBqqJ,EAAI/5Q,IAAI,cAAei5H,GACvB8gJ,EAAI/5Q,IAAI,aAAc8pN,GAClBplB,GACFq1E,EAAI/5Q,IAAI,QAAS0kM,IAGnB,UAAIq1E,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,WAExB,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,WAGpB,OAACk5Y,QAAD,IAACA,OAAD,EAACA,EAAoBxlZ,IAAI,YAG3B09Q,EAAI/5Q,IAAI,iBAAkB6hZ,GAF1B9nI,EAAIvxQ,MAAM,CAAC,iBAAkB,WAAY+H,kBAK3C,IAAM0xY,GAAuB,OAARH,QAAQ,IAARA,OAAA,EAAAA,EAAUzlZ,IAAI,aAAcpC,OAAO6nZ,EAASzlZ,IAAI,aAAe,KAC9E6lZ,GAAoB,OAARJ,QAAQ,IAARA,OAAA,EAAAA,EAAUzlZ,IAAI,UAAWpC,OAAO6nZ,EAASzlZ,IAAI,UAAU9C,WAAa,KAChF4oZ,GAAyB,OAATJ,QAAS,IAATA,OAAA,EAAAA,EAAW1lZ,IAAI,aAAcpC,OAAO8nZ,EAAU1lZ,IAAI,aAAe,KACjF+lZ,GAAsB,OAATL,QAAS,IAATA,OAAA,EAAAA,EAAW1lZ,IAAI,UAAWpC,OAAO8nZ,EAAU1lZ,IAAI,UAAU9C,WAAa,KAEzF,GAAK0oZ,GAAiBC,GAAcC,GAAkBC,EAE/C,CACL,GAAIH,GAAgBC,EAAW,CAC7B,IAAMG,EAAO,CACX59M,SAAUw9M,EACVv9M,MAAOw9M,GAETnoI,EAAIvxQ,MAAM,CAAC,YAAa,QAASkZ,iBAAO,CACtC4V,IAAK+qX,EACL9qX,IAAK8qX,KAGT,GAAIF,GAAiBC,EAAY,CAC/B,IAAME,EAAQ,CACZ79M,SAAU09M,EACVz9M,MAAO09M,GAETroI,EAAIvxQ,MAAM,CAAC,YAAa,SAAUkZ,iBAAO,CACvC4V,IAAKgrX,EACL/qX,IAAK+qX,WAnBTvoI,EAAI/5Q,IAAI,YAAakL,oBA0BnBq3Y,EAA6BrC,GAAoEoB,EAAqBx3L,GAGtH04L,EAAiBD,EAA2B1rY,OAE5C4rY,EAAY,WAChB,EAAKvnS,SAAS,CAAEulS,UAAU,KAG5B,IACM5wR,GACI+vM,EAAY,SAAC1zT,GACjB6yF,KAAmB9rE,kBAAgByvX,mBAAoBv9V,EAAc,CACnEktE,WAAYnmH,EAAO7P,IAAI,QACvBwzH,SAAU3jH,EAAO7P,IAAI,MACrBu/W,iBAAkB1vW,EAAO7P,IAAI,SAC7B68B,aAAchtB,EAAO7P,IAAI,gBACzBsmZ,gBAAiBz2Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACvHuuZ,WAAY,QACZC,4BAA6B32Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,WAAvBkjZ,EAAKljZ,IAAI,aAAwBhI,KAClIyuZ,kCAAmC52Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,iBAAvBkjZ,EAAKljZ,IAAI,aAA8BhI,KAC9I0uZ,6BAA8B72Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACpI2uZ,uCAAwC1D,GAAwCpzY,EAAO7P,IAAI,cAAe,UAC1G4mZ,6CAA8C3D,GAAwCpzY,EAAO7P,IAAI,cAAe,gBAChH6mZ,wCAAyC5D,GAAwCpzY,EAAO7P,IAAI,cAAe,WAC3G8mZ,6BAA8Bj3Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAIA,EAAKljZ,IAAI,gBAAyC,WAAvBkjZ,EAAKljZ,IAAI,aAAwBhI,KAClI+uZ,8BAA+Bl3Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAIA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACpIgvZ,oBAAqBtrR,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,eAAiBhN,EAAOgN,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAehN,EAAOgN,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAe,KAC5LoqY,mBAAoBvrR,EAAO17H,IAAI,UAAY6P,EAAO7P,IAAI,QAAU6P,EAAO7P,IAAI,QAAU,KACrFknZ,0BAA2BxrR,EAAO17H,IAAI,iBAAmB6P,EAAO7P,IAAI,eAAiB6P,EAAO7P,IAAI,eAAiB,KACjHmnZ,yBAA0BzrR,EAAO17H,IAAI,WAAa6P,EAAO7P,IAAI,SAAW6P,EAAO7P,IAAI,SAAW,KAC9FonZ,qBAAsB1rR,EAAO17H,IAAI,kBAAoB6P,EAAO7P,IAAI,gBAAkB6P,EAAO7P,IAAI,gBAAkB,KAC/GqnZ,kBAAmBC,aAAmB5rR,EAAQ7rH,EAAQ,QACtD03Y,kBAAmBD,aAAmB5rR,EAAQ7rH,EAAQ,QACtD23Y,kBAAmBF,aAAmB5rR,EAAQ7rH,EAAQ,QACtD43Y,sBAAuBC,aAAuBhsR,EAAQ7rH,EAAQ,OAAQ,YACtE83Y,mBAAoBD,aAAuBhsR,EAAQ7rH,EAAQ,OAAQ,SACnE+3Y,uBAAwBF,aAAuBhsR,EAAQ7rH,EAAQ,QAAS,YACxEg4Y,oBAAqBH,aAAuBhsR,EAAQ7rH,EAAQ,QAAS,SACrEi4Y,uBAAwBC,aAA4BrsR,EAAQ7rH,GAC5Dm4Y,iCAAkC5E,GAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,SAAU,UAC5HioZ,oCAAqC7E,GAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,eAAgB,UACrIkoZ,+BAAgC9E,GAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UAAW,UAC3HmoZ,4CAA6CzE,GAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UACxIooZ,+CAAgD1E,GAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,gBAC3IqoZ,0CAA2C3E,GAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,WACtIsoZ,kCAAmClF,GAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,SAAU,WAC7HuoZ,gCAAiCnF,GAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UAAW,eAGhI+kZ,EAAkBvxR,EAAUmyR,EAAsBnrY,OAAjC,UAA4C2Y,wBAA5C,YAAqEqgG,GAAY2yR,EAAgB5iF,EAAW6iF,KAEvHoC,EAAY7C,EAAsB14Y,eAAc,SAAAywQ,GACpD,IAAM+qI,EAAgB/iW,EAASziB,OAAUyiB,EAASziB,MAAcwlX,cAC5DA,GACF/qI,EAAI/5Q,IAAI,gBAAiB8kZ,MAa7BzD,EAASwD,EAAWrC,GAVF,SAACt2Y,GACjB6yF,KAAmB9rE,kBAAgB8xX,mBAAoB5/V,EAAc,CACnEktE,WAAYnmH,EAAO7P,IAAI,QACvBwzH,SAAU3jH,EAAO7P,IAAI,MACrBu/W,iBAAkB1vW,EAAO7P,IAAI,SAC7B68B,aAAchtB,EAAO7P,IAAI,gBACzBsmZ,gBAAiBz2Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACvHuuZ,WAAY12Y,EAAO7P,IAAI,kBAAoB,UAAY,aAGZomZ,IAEjD,MAAOh8Y,GACPg8Y,IA5Kc,4C,wDAgLXpE,kBAAoB,WACzB,EAAK77W,MAAMk7W,qBAAqBh8X,iBAAO,CACrCuhF,MAAM,M,EAIH+hT,iBAAmB,WACxB,MAGI,EAAKxiX,MAFPne,EADF,EACEA,EACA0zG,EAFF,EAEEA,OAGF,OACE,eAACktR,EAAA,EAAD,CACEC,QAAS,EAAKvE,cADhB,SAGE,eAAC,KAAD,CACE1+Q,QAAQ,EACRD,OACE,gBAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAM3B,WAAW,SAAxD,SACE,eAAC,KAAD,UACGltD,EAAE,mCAGP,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJpB,WAAW,EAHb,SAKE,eAACqzU,EAAA,EAAD,CAAYt1R,SAAQ,OAAEkI,QAAF,IAAEA,OAAF,EAAEA,EAAQ17H,IAAI,kB,EASzC+oZ,cAAgB,WACrB,IACE/gY,EACE,EAAKme,MADPne,EAGF,OACE,eAAC4gY,EAAA,EAAD,CACEC,QAAS,EAAKpE,WADhB,SAGE,eAAC,KAAD,CACE7+Q,QAAQ,EACRD,OACE,gBAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAM3B,WAAW,SAAxD,SACE,eAAC,KAAD,UACGltD,EAAE,gCAGP,eAAC,KAAD,UACE,eAAC2uG,EAAA,EAAD,CACE7V,QAAS,EAAKkhS,kBADhB,SAGE,eAAC,IAAD,CAAS5+R,SAAS,cAGtB,eAAC,GAAD,Y,EAQL4lS,iBAAmB,WACxB,IACEhhY,EACE,EAAKme,MADPne,EAEM6yX,EAAqB,EAAK53W,MAA1B43W,iBAER,OACE,eAAC+N,EAAA,EAAD,CACEC,QAAS,EAAKnE,cADhB,SAGE,eAAC,KAAD,CACE9+Q,QAAQ,EACRD,OACE,gBAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAMd,QAAQ,gBAAgBb,WAAW,SAAhF,UACE,eAAC,KAAD,UACGltD,EAAE,iCAEL,eAACy1X,GAAA,EAAD,CACE5C,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuB,EAAKt8R,SAAS,CAAEg8R,iBAAkBM,UAGlF,eAAC8N,EAAA,EAAD,CACEhsJ,SAAU6/F,GACV+9C,iBAAkBA,Y,uDA/YhC,WACE,MAMI5+Y,KAAKkqC,MALP+iX,EADF,EACEA,eACAtiX,EAFF,EAEEA,SACA4D,EAHF,EAGEA,MACAyuG,EAJF,EAIEA,kBACAD,EALF,EAKEA,UAGF,GAAIxuG,EAAMw7E,OAAS3yF,wBAAuB,CAExC,IAAMmgG,EAAW37E,SAASh7B,gBAAM2tB,EAAO,CAAC,SAAU,iBAAazyC,GAAY,IACvEsgD,MAAMm7E,IACRnrH,YAAKynB,kBAmBPo5X,EAAe11R,GAhBG,SAACkI,IACZud,GAAqBD,GAAuC,MAA1Btd,EAAO17H,IAAI,YAChD4mC,EAAS,IAAIgK,IAAsB,CACjCtD,QAAS,qCACTu0D,SAAU,cAKD,WACbj7D,EAAS,IAAIgK,IAAsB,CACjCtD,QAAS,gCACTu0D,SAAU,iB,gCAQlB,SAA0ByY,GACxB,MAIIr+G,KAAKkqC,MAHPu1F,EADF,EACEA,OACA5H,EAFF,EAEEA,SACAltF,EAHF,EAGEA,UAIE80F,IAAUA,EAAO17H,IAAI,mBAAuBs6G,EAAUohB,QAAUphB,EAAUohB,OAAO17H,IAAI,QAAU07H,EAAO17H,IAAI,OAC5GqI,YAAKynB,kBAGH4rG,EAAO1jI,MAAQsiH,EAAUohB,SAAWA,GAClC5H,IAAaA,EAASziH,SACxBu1B,EAAS,IAAIwiD,KAAwB,CACnCo8B,QAAS,IAAIonB,IAAO,CAClB,IAAO,CACL,CACE,OAAU,CACR,GAAMlR,EAAO17H,IAAI,WAItB08C,mB,kCAMX,WACE,IAAQ9V,EAAa3qC,KAAKkqC,MAAlBS,SACRA,EAAS,IAAI8jD,KAAoB,mBACjC9jD,EAAS,IAAI8jD,KAAoB,sBACjC9jD,EAAS,IAAI8jD,KAAoB,mCACjC9jD,EAAU,IAAI4K,KACd5K,EAAS,IAAI49C,KAAyC31E,oB,oBAiVxD,WAAiB,IAAD,OAEZk6Y,EAGE9sZ,KAHF8sZ,cACAC,EAEE/sZ,KAFF+sZ,iBACAL,EACE1sZ,KADF0sZ,iBAGF,EAWI1sZ,KAAKkqC,MAVPgjX,EADF,EACEA,WACAh0U,EAFF,EAEEA,QACAumD,EAHF,EAGEA,OACAlxF,EAJF,EAIEA,MACA4+W,EALF,EAKEA,YALF,IAMEhyS,kBANF,MAMevoG,gBANf,EAOEmqI,EAPF,EAOEA,UACAqwQ,EARF,EAQEA,uBACA/qF,EATF,EASEA,aACAt2S,EAVF,EAUEA,EAGIkxH,EAAerqI,MAAI9N,MAAMq2G,EAAWp3G,IAAI,UAAYo3G,EAAWp3G,IAAI,SAASwa,OAAS48F,EAAWp3G,IAAI,SACpGqzH,EAAWxkH,MAAI9N,MAAMq2G,EAAWp3G,IAAI,iBAAmBo3G,EAAWp3G,IAAI,gBAAgBwa,OAAS48F,EAAWp3G,IAAI,gBAG9GspZ,GAFW5tR,EAAO17H,IAAI,MAEPk5I,GAAgB7lB,GAAY,CAC/C6lB,aAAc,CACZh8G,GAAE,OAAEg8G,QAAF,IAAEA,OAAF,EAAEA,EAAch8G,GAClBzyB,KAAI,OAAEyuI,QAAF,IAAEA,OAAF,EAAEA,EAAcvhJ,OAEtB07H,SAAU,CACRn2F,GAAE,OAAEm2F,QAAF,IAAEA,OAAF,EAAEA,EAAUn2F,GACdzyB,KAAI,OAAE4oH,QAAF,IAAEA,OAAF,EAAEA,EAAU17H,OAElBwhH,UAAU,IAGZ,OAAqB,IAAhBuiB,EAAO1jI,MAAcwyC,EAAMw7E,OAAS3yF,yBAA0Bg2X,EAC1D,qCACL,eAAC,IAAD,CACEniB,SAAU,eAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,EAChBM,QAAS,eAAC,IAAD,QAMb,uCACE,uBAAM1uE,SAAU+F,EAAariU,KAAKs8T,UAAlC,SACE,eAAC,IAAD,CACE4wF,WAAYA,EACZpT,OAAQ95Y,KAAK0oZ,gBACb4E,qBAAsBttZ,KAAK2oZ,0BAH7B,SAKE,eAAC4E,EAAA,EAAD,CAASX,QAAS5sZ,KAAKooZ,aAAvB,SACE,gBAACvvU,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SACLpB,UAAWF,EAAQs0U,qBAJrB,UAiBE,eAAC30U,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,eAAC8yU,EAAD,MAEA3vQ,GACA,eAAClkE,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,eAAC+yU,EAAA,EAAD,CACEC,QAAS5sZ,KAAKsoZ,sBADhB,SAGI,eAACmF,GAAA,EAAD,CACEzsJ,SAAU6/F,GACVypD,WAAYoD,KAAWC,YAKjC,eAAC90U,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,eAAC+yU,EAAA,EAAD,CACEC,QAAS5sZ,KAAKuoZ,YADhB,SAGE,eAACqF,GAAA,EAAD,CACE5sJ,SAAU6/F,SAIhB,eAAChoR,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,eAACkzU,EAAD,MAEF,eAACj0U,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,eAACuzU,EAAD,eAMV,eAACc,GAAA,EAAD,CACE7sJ,SAAU6/F,GACVitD,SAAU,QACV/wQ,UAAWA,IAEb,eAACgxQ,EAAA,EAAD,CACEtuR,OAAQA,IAEV,eAACuuR,GAAA,EAAD,CAAiBX,aAAcA,EAAcY,aAAa,IAC1D,eAACC,GAAA,EAAD,CAAmBf,YAAaA,EAAaE,aAAcA,EAAcY,aAAa,IACtF,eAACE,GAAA,EAAD,IACA,eAACC,GAAA,EAAD,CACEzjT,KAAM3qG,KAAKgnC,MAAMkhX,yBACjBj6P,UAAU,EACVogQ,2BAA4B,kBAAM,EAAKzrS,SAAS,CAAEslS,0BAA0B,c,GApkBzDzjX,aAirBdwwC,kBACbgG,aAxtBa,SAACC,GAAD,MAA+B,CAC5CsyU,qBAAsB,CACpBxoS,gBAAiB,mBACjBlpC,QAASZ,EAAMZ,QAAQ,GACvB+B,SAAU,GAEZusU,OAAQ,CACNvsU,SAAU,GAEZwsU,gBAAiB,CACfvtU,MAAO,IACPC,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bg0U,8BAA+B,CAC7BpnD,UAAW,gBA2sBbv9O,cACAxqE,YAAgB,gBAChBgwE,KACAtQ,mBA5DsB,SAAC73E,EAAYkD,GACnC,IAAMu1F,EAAS29H,eAA8Bp2N,GACvCs3E,EAAgBmhB,EAAO1jI,KAjDA,SAAC0jI,GAA0B,IAAD,EAEjDg0F,EAAOh0F,EAAO17H,IAAI,QAClBytN,EAAa/xF,EAAO17H,IAAI,cACxB48H,EAAclB,EAAO17H,IAAI,eACzBm1H,EAAgBuG,EAAO17H,IAAI,iBAC3Bq9V,EAAa3hO,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACrDwrL,EAAQ3sE,EAAO17H,IAAI,SACnBwqZ,GAAY,UAAA9uR,EAAO17H,IAAI,oBAAX,eAAyBhI,MAAO0jI,EAAO17H,IAAI,aAAe6O,gBACtE47Y,EAAiB/uR,EAAO17H,IAAI,kBAG5B0qZ,EAAwBriN,GAASA,EAAMzgM,QAAO,SAACutI,EAAKw1Q,EAAaC,GACrE,IAAMC,EAA4BF,EAAY/iZ,QAAO,SAACiiR,EAAM1gD,EAAU2hL,GACpE,IAAMC,EAAoBzxZ,QAAQ6vO,EAASnpO,IAAI,UACzCgrZ,EAAmB7hL,EAASxlO,IAAI,QAASonZ,GAC/C,OAAOlhI,EAAKlmR,IAAImnZ,EAAaE,KAC5Bn8Y,iBACH,OAAOsmI,EAAIxxI,IAAIinZ,EAAgBC,KAC9Bh8Y,iBAEH,OAAOA,gBAAM5B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,eAAgB0hB,iBAAO,CAC7B1tB,MAAO+jI,EAAO17H,IAAI,gBAClBk9B,GAAIw+F,EAAO17H,IAAI,eAGjB09Q,EAAI/5Q,IAAI,QAAS0hB,iBAAO,CACtB1tB,MAAO+jI,EAAO17H,IAAI,SAClBk9B,GAAIw+F,EAAO17H,IAAI,cAMjB09Q,EAAI/5Q,IAAI,OAAQ+rN,GAAQA,EAAK13N,KAAO03N,EAAO7gN,iBAC3C6uQ,EAAI/5Q,IAAI,aAAc8pN,GAAcA,EAAWz1N,KAAOy1N,EAAa5+M,iBAEnE6uQ,EAAI/5Q,IAAI,cAAei5H,GACvB8gJ,EAAI/5Q,IAAI,gBAAiBwxH,GACzBuoJ,EAAI/5Q,IAAI,aAAc05V,GACtB3/E,EAAI/5Q,IAAI,QAAS+mZ,GACjBhtI,EAAI/5Q,IAAI,YAAa6mZ,GACrB9sI,EAAI/5Q,IAAI,kBAAgC,OAAd8mZ,QAAc,IAAdA,OAAA,EAAAA,EAAgBzyZ,MAAOyyZ,EAAiBplY,iBAAO,CAAEkpV,QAASr6V,uBAMlD+2Y,CAAuBvvR,GAAU7sH,gBAC/Du6Y,GAAe/xS,wBAAc6zS,KAAd7zS,CAAqCp0E,IAA8Bp0B,iBAAOgO,MAAM,CAAC,YAAa,kBAC3Fw6F,wBAAc8zS,IAAd9zS,CAAmCp0E,IAA8Bp0B,iBAAOgO,MAAM,CAAC,YAAa,gBAE9Go8H,EAAoBv7F,gBAA0Bza,GAC9C+1G,EAAYzzF,eAAsBtiB,GAClComX,EAAyB/vZ,SAAS2/I,GAAqBD,GAAatd,GAAoC,MAA1BA,EAAO17H,IAAI,YAE/F,OAAO,aACL07H,SACA0tR,cACA7uS,gBACAy+B,YACAC,oBACAowQ,0BACGt6W,YAAyB,CAC5Bo6W,WAAYxvM,cACZviG,WAAYC,wBAAcylP,IAC1BhpO,SAAUykI,eACV0sJ,oBAAqB1rJ,eAJlBxqN,CAKF9L,OAIsB,SAAC2D,GAC1B,MAAO,CACLsiX,eAAgB,SAAC11R,EAAkB+vM,EAA4C6nF,GAC7ExkX,EAAS,IAAI48C,KAAyB,CAAEgwC,WAAU+vM,YAAW6nF,aAE/D/J,qBAAsB,SAACl+W,GACrByD,EAAS,IAAIwJ,IAA2BjN,KAE1C4hX,kBAAmB,SAACvxR,EAAkB63R,EAA6BlX,EAAsBgS,EAA0B5iF,EAA2C6iF,GAC5Jx/W,EAAS,IAAI25C,KAA2B,CACtCizC,WACA63R,aACAlX,eACAgS,iBACA5iF,YACA6iF,gBAGJpB,SAAU,SAACtpR,EAA+ByqR,EAA0B5iF,EAA2C6iF,GAC7Gx/W,EAAS,IAAIi6C,IAAwB,CACnC66C,SACAyqR,iBACA5iF,YACA6iF,oBAYN5iF,oBAAU,CACR9pN,KAAMojP,GACNp5B,oBAAoB,EACpBD,kBAAkB,IATPvyP,CAWbgzU,K,6BC/4BF,oDAgCIp2R,EAAQptF,IAAM8E,YAAW,SAAeW,EAAOzuC,GACjD,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,MAAQA,EAClDg2U,EAAgBnlX,EAAMg0S,OACtBA,OAA2B,IAAlBmxE,GAAmCA,EAC5CC,EAAmBplX,EAAM+mF,UACzBA,OAAiC,IAArBq+R,EAA8B,EAAIA,EAC9Ct9P,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,YAAcA,EACpDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,YAAa,SAAU,YAAa,YAQzG,OAAOzF,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAuB,aAAZsgC,EAAyBxgC,EAAQwrM,SAAWxrM,EAAQ,YAAY5tE,OAAO2lH,KAAcitN,GAAUhlQ,EAAQq2U,SAChJ9zZ,IAAKA,GACJklB,OAyCUs6D,iBAzFK,SAAgBC,GAClC,IAAIs0U,EAAa,GAMjB,OALAt0U,EAAM6mD,QAAQr1H,SAAQ,SAAUo1H,EAAQ3lI,GACtCqzZ,EAAW,YAAYlkZ,OAAOnP,IAAU,CACtC0rH,UAAWia,MAGRh4F,YAAS,CAEdvyB,KAAM,CACJytG,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1C9rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BqP,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,eAIvCkxZ,QAAS,CACP9nS,aAAcvsC,EAAM4/C,MAAMrT,cAI5Bi9J,SAAU,CACR7pJ,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQsqP,WAE3CigD,KAiE6B,CAChChhZ,KAAM,YADOysE,CAEZ42C,I,kHCsBG49R,EAAoB,SAAC/zZ,EAAO2+G,EAAWw8I,GAC3C,IAAMpI,EAASp0I,EAAUz5F,MAAM,CAACi2O,EAAO,WACjC97I,EAAYV,EAAUz5F,MAAM,CAACi2O,EAAO,cACpCl8I,EAAUN,EAAUz5F,MAAM,CAACi2O,EAAO,YAClC9qI,EAAa,IAAIh+F,KAAKgtF,GACtBmqF,EAAoB,IAAIn3K,KAAK4sF,GACnC,GAAI8zI,IAAW1zN,gBAAcyhF,QACtBzB,GAAcJ,EADrB,CAKA,IAAMtpE,EAAUs0D,IAAQ55E,EAAE,oCAC1B,OAAOk5K,YAAgBl5E,EAAMm5E,EAAa7zJ,KAGtCq+W,EAAkB,SAACh0Z,EAAO2+G,EAAYw8I,GAC1C,IAAMpI,EAASp0I,EAAUz5F,MAAM,CAACi2O,EAAO,WACjC97I,EAAYV,EAAUz5F,MAAM,CAACi2O,EAAO,cACpCl8I,EAAUN,EAAUz5F,MAAM,CAACi2O,EAAO,YAClCxxD,EAAsB,IAAIt3K,KAAKgtF,GAC/BgR,EAAa,IAAIh+F,KAAK4sF,GAC5B,GAAI8zI,IAAW1zN,gBAAcyhF,QACtBzB,GAAcJ,EAIrB,OAAOyqF,YAAkBr5E,EAAMs5E,EAAe,wCAwN1CsqN,EAAyC,WAC7C,MAAO,CAAC,UAAW,aAAc,YAAa,YAAa,YAiBvDC,EAAgC,CACpCC,4BAxUkC,SAACtmS,GAAkB,IAAD,8BAC9CumS,EAAWvmS,EAAQhrG,OACnBs4B,EAvCC,CACLq1O,YAAa,GACbj9Q,GAAI,GACJw2F,OAAQ,GACRsvH,QAAS,CACP05B,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXo1S,UAAW,CACTthK,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXgwN,UAAW,CACTl8E,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,KAuBTq1S,EAAe,CACjB9lS,MAAK,OAAE4lS,QAAF,IAAEA,GAAF,UAAEA,EAAUpqW,cAAZ,aAAE,EAAkBwkE,MACzBgiK,aAAqB,OAAR4jI,QAAQ,IAARA,GAAA,UAAAA,EAAUpqW,cAAV,mBAAkB6jE,eAAlB,eAA2B2iK,cAAe,GACvDj9Q,IAAY,OAAR6gZ,QAAQ,IAARA,GAAA,UAAAA,EAAUpqW,cAAV,mBAAkB6jE,eAAlB,eAA2Bt6G,KAAM,GACrCw2F,OAAQ,GACRsvH,QAASl+K,EAAek+K,QACxBg7L,UAAWl5W,EAAek5W,UAC1BplF,UAAW9zR,EAAe8zR,WAE5B,IAAK5sT,IAAEwE,QAAF,OAAUutY,QAAV,IAAUA,GAAV,UAAUA,EAAUpqW,cAApB,aAAU,EAAkB6jE,SAAU,CAAC,IAAD,EACnC0mS,EAAeC,IAAkBC,iBAAlB,OAAmCL,QAAnC,IAAmCA,GAAnC,UAAmCA,EAAUpqW,cAA7C,aAAmC,EAAkB6jE,SAC1EymS,EAAY,2BAAOA,GAAiBC,GAOtC,OALAD,EAAavqT,OAAS,CACpB2qT,WAAmB,OAARN,QAAQ,IAARA,GAAA,UAAAA,EAAUpqW,cAAV,mBAAkB6jE,eAAlB,mBAA2B9jB,cAA3B,eAAmCl8F,SAAS,gBAAgB,EACvEkjJ,SAAiB,OAARqjQ,QAAQ,IAARA,GAAA,UAAAA,EAAUpqW,cAAV,mBAAkB6jE,eAAlB,mBAA2B9jB,cAA3B,eAAmCl8F,SAAS,cAAc,EACnE8mZ,UAAkB,OAARP,QAAQ,IAARA,GAAA,UAAAA,EAAUpqW,cAAV,mBAAkB6jE,eAAlB,mBAA2B9jB,cAA3B,eAAmCl8F,SAAS,eAAe,GAEhEymZ,GAoTPM,eAxVqB,WACrB,IAAMz5W,EAvBC,CACLq1O,YAAa,GACbj9Q,GAAI,GACJw2F,OAAQ,GACRsvH,QAAS,CACP05B,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXo1S,UAAW,CACTthK,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXgwN,UAAW,CACTl8E,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,KAiBb,OAVc,2BACT9jE,GADS,IAEZqzE,MAAO,wBACPzkB,OAAQ,CACN2qT,WAAW,EACX3jQ,SAAS,EACT4jQ,UAAU,MAiVdE,0BAlTgC,SAACC,GAAuB,IAAD,MACjD/Y,EAAa+Y,EAAajyY,OAC1BkyY,EAAa,IACnB,OAAIhZ,QAAJ,IAAIA,GAAJ,UAAIA,EAAYhyS,cAAhB,aAAI,EAAoB2qT,YACtBK,EAAWrkZ,KAAK,cAElB,OAAIqrY,QAAJ,IAAIA,GAAJ,UAAIA,EAAYhyS,cAAhB,aAAI,EAAoBgnD,UACtBgkQ,EAAWrkZ,KAAK,YAElB,OAAIqrY,QAAJ,IAAIA,GAAJ,UAAIA,EAAYhyS,cAAhB,aAAI,EAAoB4qT,WACtBI,EAAWrkZ,KAAK,YAElB,IAIS,EAMe,MAME,MAMA,MAtBpBskZ,EAzEC,CACLxkI,YAAa,GACbj9Q,GAAI,GACJw2F,OAAQ,GACRsvH,QAAS,CACP05B,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXo1S,UAAW,CACTthK,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,IAEXgwN,UAAW,CACTl8E,OAAQ,GACR1zI,UAAW,GACXJ,QAAS,MAyDb,OAAI88R,QAAJ,IAAIA,OAAJ,EAAIA,EAAYxoY,MACgB,kBAA1B,OAAOwoY,QAAP,IAAOA,OAAP,EAAOA,EAAYxoY,IACrByhZ,EAAYzhZ,GAAZ,OAAiBwoY,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAYxoY,GAE7ByhZ,EAAYzhZ,GAAZ,OAAiBwoY,QAAjB,IAAiBA,GAAjB,UAAiBA,EAAYxoY,UAA7B,aAAiB,EAAgBvT,QAGrCg1Z,EAAYxkI,aAAwB,OAAVurH,QAAU,IAAVA,OAAA,EAAAA,EAAYvrH,cAAe,GACrDwkI,EAAYjrT,OAASgrT,EACjBhZ,EAAW1iL,WACb27L,EAAY37L,QAAU0iL,EAAW1iL,UAC7B,UAAA27L,EAAY37L,eAAZ,eAAqB05B,UAAW,UAACiiK,EAAY37L,eAAb,aAAC,EAAqBh6G,aAAa,UAAC21S,EAAY37L,eAAb,aAAC,EAAqBp6G,WAC3F+1S,EAAY37L,QAAQ05B,OAAS,KAG7BgpJ,EAAWsY,YACbW,EAAYX,UAAYtY,EAAWsY,YAC/B,UAAAW,EAAYX,iBAAZ,eAAuBthK,UAAW,UAACiiK,EAAYX,iBAAb,aAAC,EAAuBh1S,aAAa,UAAC21S,EAAYX,iBAAb,aAAC,EAAuBp1S,WACjG+1S,EAAYX,UAAUthK,OAAS,KAG/BgpJ,EAAW9sE,YACb+lF,EAAY/lF,UAAY8sE,EAAW9sE,YAC/B,UAAA+lF,EAAY/lF,iBAAZ,eAAuBl8E,UAAW,UAACiiK,EAAY/lF,iBAAb,aAAC,EAAuB5vN,aAAa,UAAC21S,EAAY/lF,iBAAb,aAAC,EAAuBhwN,WACjG+1S,EAAY/lF,UAAUl8E,OAAS,KAGnC,OAAOiiK,GA2QPC,qBA3O2B,SAACj1Z,EAAO2+G,GACnC,OAAOo1S,EAAkB/zZ,EAAO2+G,EAAW,YA2O3Cu2S,mBAzOyB,SAACl1Z,EAAO2+G,GACjC,OAAOq1S,EAAgBh0Z,EAAO2+G,EAAW,YAyOzCw2S,qBAtO2B,SAACx2S,GAC5B,GAAIA,EAAW,CACb,IAAMo0I,EAASp0I,EAAUz5F,MAAM,CAAC,UAAW,WAC3C,GAAI6tO,GAAUA,IAAW1zN,gBAAcyhF,OACrC,OAAO,EAGV,OAAO,GAgORs0S,yBA7N+B,SAACp1Z,EAAO2+G,GACvC,OAAOo1S,EAAkB/zZ,EAAO2+G,EAAW,cA6N3C02S,uBA3N6B,SAACr1Z,EAAO2+G,GACrC,OAAOq1S,EAAgBh0Z,EAAO2+G,EAAW,cA2NzC22S,yBAxN+B,SAAC32S,GAChC,GAAIA,EAAW,CACb,IAAMo0I,EAASp0I,EAAUz5F,MAAM,CAAC,YAAa,WAC7C,GAAI6tO,GAAUA,IAAW1zN,gBAAcyhF,OACrC,OAAO,EAGX,OAAO,GAkNPy0S,yBA/M+B,SAACv1Z,EAAO2+G,GACvC,OAAOo1S,EAAkB/zZ,EAAO2+G,EAAW,cA+M3C62S,uBA7M6B,SAACx1Z,EAAO2+G,GACrC,OAAOq1S,EAAgBh0Z,EAAO2+G,EAAW,cA6MzC82S,yBA1M+B,SAAC92S,GAChC,GAAIA,EAAW,CACb,IAAMo0I,EAASp0I,EAAUz5F,MAAM,CAAC,YAAa,WAC7C,GAAI6tO,GAAUA,IAAW1zN,gBAAcyhF,OACrC,OAAO,EAGX,OAAO,GAoMP40S,gBAjMsB,SAACC,GACvB,IAAIC,EAAS39X,kCAAkC,IAAM09X,EAAWpwX,GAIhE,MAH0B,cAAtBowX,EAAW5rT,SACb6rT,EAASl+X,4BAA4B,IAAMi+X,EAAWpwX,IAEjDqwX,GA6LPC,cAxIoB,SAACC,GAAgB,IAAD,EACpC,OAAO37X,2BAA2B,KAA3B,OAAiC27X,QAAjC,IAAiCA,GAAjC,UAAiCA,EAAYv8L,aAA7C,aAAiC,EAAmB/+G,YAwI3Du7S,YArIkB,SAACD,GACnB,OAAO58X,aAAa,IAAM48X,EAAWn/L,SAqIrCq/L,yBA5L+B,SAACC,EAAaC,GAC7C,OAAKD,GAAgBC,GAAgE,IAApCA,EAAyB/vZ,OAIhD8vZ,EAAY3oZ,KAAI,SAAAwoZ,GACxC,IACMK,EADY,YAAOL,EAAWM,cACCrlZ,MAAK,SAAC9G,EAAGC,GAAO,IAAD,gBACzBgsZ,GADyB,IAClD,2BAAmD,CAAC,IAMpB,IANrBG,EAAwC,QACzCC,EAAwBD,EAAxBC,SAAUt4U,EAAcq4U,EAAdr4U,UAEdn0E,OAAM,EACNC,OAAM,EAEV,GAAiB,cAAbwsZ,EAEFzsZ,GAAS,UAAAI,EAAEssZ,qBAAF,eAAiBlC,WAAYxrF,YAAW5+T,EAAEssZ,cAAclC,WAAa,KAC9EvqZ,GAAS,UAAAI,EAAEqsZ,qBAAF,eAAiBlC,WAAYxrF,YAAW3+T,EAAEqsZ,cAAclC,WAAa,SACxD,cAAbiC,GACTzsZ,EAAuB,YAAbI,EAAE8/F,QAAyB9/F,EAAEglU,UAAoBpG,YAAW5+T,EAAEglU,WAApB,KACpDnlU,EAAuB,YAAbI,EAAE6/F,QAAyB7/F,EAAE+kU,UAAoBpG,YAAW3+T,EAAE+kU,WAApB,OAEpDplU,EAASI,EAAEqsZ,GACXxsZ,EAASI,EAAEosZ,IAEb,IAAME,EAAqB,OAAX3sZ,QAA8BzJ,IAAXyJ,EAC7B4sZ,EAAqB,OAAX3sZ,QAA8B1J,IAAX0J,EACnC,GAAI0sZ,IAAYC,EAAW,MAAqB,QAAdz4U,GAAuB,EAAI,EAC7D,IAAKw4U,GAAWC,EAAW,MAAqB,QAAdz4U,EAAsB,GAAK,EAE7D,GAAIn0E,IAAWC,EACb,MAAkB,QAAdk0E,EACKn0E,EAASC,EAAS,GAAK,EAEvBD,EAASC,EAAS,GAAK,GA3Bc,8BA+BlD,OAAO,KAGT,OAAO,2BACFgsZ,GADL,IAEEM,aAAcD,OAzCTF,GAAe,IA2LxBS,uBAnI6B,WAU7B,MAT+B,CAC7B,CAAEnxX,GAAI,cAAeH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC3F,CAAEpxX,GAAI,cAAeH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC3F,CAAEpxX,GAAI,UAAWH,MAAO,0BAA2Bs6C,SAAS,EAAMi3U,UAAU,GAC5E,CAAEpxX,GAAI,SAAUH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,GACjF,CAAEpxX,GAAI,YAAaH,MAAO,kCAAmCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GACxG,CAAErxX,GAAI,YAAaH,MAAO,sCAAuCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC5G,CAAErxX,GAAI,UAAWH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,KA4HpFE,8BAvHoC,SAAChnZ,GAIrC,IAHA,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAQiD,QACVjD,EAAOinZ,aAAP,OAAsBjnZ,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAQiD,MAEhC,OAAIjD,QAAJ,IAAIA,OAAJ,EAAIA,EAAQknZ,QAAS,CACnB,IAAMC,EAAiB,IACvB,OAAInnZ,QAAJ,IAAIA,OAAJ,EAAIA,EAAQknZ,WACV10Y,IAAE/U,IAAF,OAAMuC,QAAN,IAAMA,OAAN,EAAMA,EAAQknZ,SAAS,SAAC74U,GACC,eAAf,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMo4U,WACRU,EAAetmZ,KACb,CACE6lZ,cAAe,CACblC,UAAWn2U,EAAKF,gBAM1BnuE,EAAOknZ,QAAUC,IAGrB,OAAInnZ,QAAJ,IAAIA,OAAJ,EAAIA,EAAQmyG,aACVnyG,EAAOmyG,UAAY/7G,OAAO4J,EAAOmyG,aAEnC,OAAInyG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQuyG,cACVvyG,EAAOuyG,WAAan8G,OAAO4J,EAAOuyG,cAEpC,OAAIvyG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ2yG,UACV3yG,EAAO2yG,OAASv8G,OAAO4J,EAAO2yG,UAEhC,OAAI3yG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQonZ,aACVpnZ,EAAM,QAAN,OAAoBA,QAApB,IAAoBA,OAApB,EAAoBA,EAAQonZ,UAC5B,OAAOpnZ,QAAP,IAAOA,YAAQonZ,WAEjB,OAAOpnZ,QAAP,IAAOA,YAAQiD,MAsFfokZ,4BAnFkC,SAACrnZ,GAInC,IAHA,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAQiD,QACVjD,EAAOinZ,aAAP,OAAsBjnZ,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAQiD,MAEhC,OAAIjD,QAAJ,IAAIA,OAAJ,EAAIA,EAAQknZ,QAAS,CACnB,IAAMC,EAAiB,IACvB,OAAInnZ,QAAJ,IAAIA,OAAJ,EAAIA,EAAQknZ,WACV10Y,IAAE/U,IAAF,OAAMuC,QAAN,IAAMA,OAAN,EAAMA,EAAQknZ,SAAS,SAAC74U,GACC,eAAf,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMo4U,WACRU,EAAetmZ,KACb,CACEmyW,sBAAuB,CACrBwxC,UAAWn2U,EAAKF,aAKD,eAAf,OAAJE,QAAI,IAAJA,OAAA,EAAAA,EAAMo4U,WACRU,EAAetmZ,KACb,CACEmyW,sBAAuB,CACrB5zC,UAAW/wP,EAAKF,gBAM1BnuE,EAAOknZ,QAAUC,IAGrB,OAAInnZ,QAAJ,IAAIA,OAAJ,EAAIA,EAAQmyG,aACVnyG,EAAOmyG,UAAY/7G,OAAO4J,EAAOmyG,aAEnC,OAAInyG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQuyG,cACVvyG,EAAOuyG,WAAan8G,OAAO4J,EAAOuyG,cAEpC,OAAIvyG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ2yG,UACV3yG,EAAO2yG,OAASv8G,OAAO4J,EAAO2yG,UAEhC,OAAI3yG,QAAJ,IAAIA,OAAJ,EAAIA,EAAQonZ,aACVpnZ,EAAM,QAAN,OAAoBA,QAApB,IAAoBA,OAApB,EAAoBA,EAAQonZ,UAC5B,OAAOpnZ,QAAP,IAAOA,YAAQonZ,WAEjB,OAAOpnZ,QAAP,IAAOA,YAAQiD,MAyCfmhZ,yCACAkD,oBAnC0B,SAACjsC,GAC3B,IAAMksC,EAJC,CAAC,UAAW,aAAc,YAAa,YAAa,WAc3D,OATmBlsC,EAAQ59W,KAAI,SAAA+pZ,GAO7B,OANID,EAAiBvpZ,SAASwpZ,EAAM,IAClCA,EAAM,MAAW,EAEjBA,EAAM,MAAW,EAEnBA,EAAM,OAAaA,EAAM,OAAa,GAAK,EACpCA,OA4BInD,O,6BChZf,IAAIjpM,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mIACD,eAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,8CAGWmyF,EAAS,CAElB48D,UAAW,+BAGXC,QAAS,+BAETC,OAAQ,6BAERC,MAAO,gCAIEz+R,EAAW,CACpB60J,SAAU,IACVzkJ,QAAS,IACTnQ,MAAO,IAEPy+R,SAAU,IAEVC,QAAS,IAETntR,eAAgB,IAEhBE,cAAe,KAGjB,SAASktR,EAAS9nK,GAChB,MAAO,GAAGlgP,OAAOvO,KAAKo/E,MAAMqvK,GAAe,MAY9B,KACb4qG,OAAQA,EACR1hO,SAAUA,EACVr2H,OAAQ,WACN,IAAI6rC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,CAAC,OAC7EsoC,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE9E6vZ,EAAoBvnX,EAAQ0oF,SAC5B8+R,OAAuC,IAAtBD,EAA+B7+R,EAAS0+R,SAAWG,EACpEE,EAAkBznX,EAAQoqT,OAC1Bs9D,OAAmC,IAApBD,EAA6Br9D,EAAO48D,UAAYS,EAC/DE,EAAiB3nX,EAAQ24D,MACzBA,OAA2B,IAAnBgvT,EAA4B,EAAIA,EAChCz2W,YAAyBlR,EAAS,CAAC,WAAY,SAAU,UAgCrE,OAAQvqC,MAAMC,QAAQwoC,GAASA,EAAQ,CAACA,IAAQlhC,KAAI,SAAU4qZ,GAC5D,MAAO,GAAGtoZ,OAAOsoZ,EAAc,KAAKtoZ,OAAiC,kBAAnBkoZ,EAA8BA,EAAiBF,EAASE,GAAiB,KAAKloZ,OAAOooZ,EAAc,KAAKpoZ,OAAwB,kBAAVq5F,EAAqBA,EAAQ2uT,EAAS3uT,OAC7MljF,KAAK,MAEVoyY,sBAAuB,SAA+BtiS,GACpD,IAAKA,EACH,OAAO,EAGT,IAAItlF,EAAWslF,EAAS,GAExB,OAAOx0H,KAAKo/E,MAA2D,IAApD,EAAI,GAAKp/E,KAAKy1O,IAAIvmM,EAAU,KAAQA,EAAW,O,6BCnGtE,kCAAO,IAAMwlP,EAAY,4B,6BCEzB,IAEIqiI,EAAcntM,EAFDvrN,EAAQ,OAMrB24Z,EAAYptM,EAFDvrN,EAAQ,OAInB44Z,EAAU54Z,EAAQ,MAIlB64Z,EAASttM,EAFDvrN,EAAQ,OAMhB84Z,EAAOC,EAFC/4Z,EAAQ,MAMhBg5Z,EAAUD,EAFC/4Z,EAAQ,OAIvB,SAAS+4Z,EAAwBrtZ,GAAO,GAAIA,GAAOA,EAAI41M,WAAc,OAAO51M,EAAc,IAAIutZ,EAAS,GAAI,GAAW,MAAPvtZ,EAAe,IAAK,IAAIxC,KAAOwC,EAAW1I,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,KAAM+vZ,EAAO/vZ,GAAOwC,EAAIxC,IAAgC,OAAtB+vZ,EAAOzoS,QAAU9kH,EAAYutZ,EAElQ,SAAS1tM,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF5L,EAAOC,QAAU,CACfuxP,MAAOonK,EAAYloS,QACnB1pG,QAAS6xY,EAAUnoS,QACnB0oS,cAAeN,EAAQM,cACvBC,KAAMN,EAAOroS,QACbsoS,KAAMA,EACNE,QAASA,I,6BClCX,ydAMI3lQ,EAAO,aAcX,SAAS+lQ,EAAkB72W,EAAQnvC,GACjC,OAAKA,EAEkB,MAAZA,EAAK,GACPmvC,EAASnvC,EAETmvC,EAAS,KAAOnvC,EAJhBmvC,EAQX,SAASspE,EAAWtpE,EAAQ3W,EAAOoyC,GACjC,IAAIvrE,EAAM,CAACurE,GAEX,GAAIpyC,GAAS2W,EACX,IAAK,IAAIr5C,KAAO0iC,EACVA,EAAMzlC,eAAe+C,IAAQ0iC,EAAM1iC,IACrCuJ,EAAIzB,KAAK,GAAGd,OAAOkpZ,EAAkB72W,EAAQr5C,KAKnD,OAAOuJ,EAAItC,QAAO,SAAUvI,GAC1B,OAAOA,KACNgG,KAAI,SAAUhG,GACf,OAAO6L,OAAO7L,GAAGw7H,UAChB/8G,KAAK,KAKV,IAAIgzY,EAAa,SAAoB/4Z,GACnC,OAAI+F,MAAMC,QAAQhG,GAAeA,EAAM6P,OAAOlO,SACvB,WAAnBk9C,YAAQ7+C,IAAiC,OAAVA,EAAuB,CAACA,GACpD,IAKT,SAASgnH,EAAkBD,EAAYH,EAAYE,GACjD,GAAIA,EAAe,CACjB,IAAI3yG,EAAW2yG,EAAcC,EAAYH,GACzC,GAAwB,kBAAbzyG,EAAuB,OAAOA,EAG3C,OAAO4yG,EAKT,SAASiyS,EAAkB16H,GACzB,MAAO,CAACh0P,SAASz+B,gBAAiBy+B,SAASywC,KAAM/nD,QAAQlO,QAAQw5Q,IAAO,EAI1E,SAAS8oE,EAAa9oE,GACpB,OAAI06H,EAAkB16H,GACbtrQ,OAAO+qQ,YAGTO,EAAG4tB,UAEZ,SAAS87C,EAAS1pE,EAAI1lK,GAEhBogS,EAAkB16H,GACpBtrQ,OAAOg1U,SAAS,EAAGpvO,GAIrB0lK,EAAG4tB,UAAYtzL,EAIjB,SAAS+tO,EAAgBv6J,GACvB,IAAIxsF,EAAQ4+K,iBAAiBpyF,GACzB6sN,EAAyC,aAAnBr5S,EAAM2B,SAC5B23S,EAAa,gBACbC,EAAQ7uX,SAASz+B,gBAErB,GAAuB,UAAnB+zG,EAAM2B,SAAsB,OAAO43S,EAEvC,IAAK,IAAIn4W,EAASorJ,EAASprJ,EAASA,EAAO2jQ,eAGzC,GAFA/kM,EAAQ4+K,iBAAiBx9O,KAErBi4W,GAA0C,WAAnBr5S,EAAM2B,WAI7B23S,EAAW75W,KAAKugE,EAAM+O,SAAW/O,EAAMisM,UAAYjsM,EAAM2uB,WAC3D,OAAOvtF,EAIX,OAAOm4W,EAWT,SAASC,EAAa/oY,EAAGnmB,EAAGC,EAAGC,GAC7B,OAAOD,IAAMkmB,EAAIA,EAAIjmB,EAAI,GAAKimB,EAAIA,EAAI,GAAKnmB,EAG7C,SAAS09V,EAAiBx7J,EAAS74L,GACjC,IAAIylH,EAAWhxH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,IAC/EkhC,EAAWlhC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK+qJ,EAC/E1uI,EAAQ+iV,EAAah7J,GACrB59H,EAASj7D,EAAK8Q,EACdg1Y,EAAY,GACZt4M,EAAc,EAElB,SAASu4M,IAEP,IAAI/+Y,EAAM6+Y,EADVr4M,GAAes4M,EACqBh1Y,EAAOmqD,EAAQwqD,GACnDgvO,EAAS57J,EAAS7xL,GAEdwmM,EAAc/nF,EAChBugS,IAAID,GAEJpwX,EAASkjK,GAIbktN,IAIF,SAASE,EAAejzD,EAAQkzD,GAC9B,IAAIC,EAAWnzD,EAAOhoE,wBAClBo7H,EAAcF,EAAUl7H,wBACxBq7H,EAAaH,EAAUrrE,aAAe,EAEtCurE,EAAY9gS,OAAS+gS,EAAaF,EAAS7gS,OAC7CmvO,EAASzB,EAAQllW,KAAKE,IAAIk4Z,EAAUvtE,UAAYutE,EAAUl/G,aAAegsD,EAAOnY,aAAewrE,EAAYrzD,EAAOrsD,eACzGy/G,EAAY/gS,IAAMghS,EAAaF,EAAS9gS,KACjDovO,EAASzB,EAAQllW,KAAKC,IAAIm4Z,EAAUvtE,UAAY0tE,EAAY,IAOhE,SAAStvD,EAAqBl+J,GAC5B,IAAInyC,EAAOmyC,EAAQmyF,wBACnB,MAAO,CACL1lK,OAAQohC,EAAKphC,OACbhD,OAAQokC,EAAKpkC,OACbh3G,KAAMo7I,EAAKp7I,KACXC,MAAOm7I,EAAKn7I,MACZ85G,IAAKqhC,EAAKrhC,IACVh5C,MAAOq6E,EAAKr6E,OAMhB,SAASi6U,IACP,IAEE,OADAvvX,SAASwvX,YAAY,eACd,EACP,MAAOptZ,GACP,OAAO,GAMX,SAASqtZ,IACP,IACE,MAAO,iEAAiE16W,KAAKi2J,UAAUG,WACvF,MAAO/oM,GACP,OAAO,K,+CCnMX,0XAWIs3C,EAXJ,uBAaaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,yDAAmH,CACjH7Y,UAGGp0B,kBAII8iZ,EAAyB,kBAAM7iX,YAC1C8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMjjC,IAAI,oBAG1B4xZ,EAAkC,SAACC,GAAD,OAAsB/iX,YACnE6iX,KACA,SAACG,GAAD,OAAkBA,EAAa9xZ,IAAI6xZ,OAGxBE,EAA6B,SAACC,GAAD,OAA0BljX,YAClE8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMpmB,MAAM,CAAC,UAAWm1Y,EAAc,qBAAqB,OAG3EC,EAAoB,kBAAMnjX,YACrC8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMjjC,IAAI,eAG1BkyZ,EAAmB,SAAC,GAAD,IAAEF,EAAF,EAAEA,aAAF,OAA4CljX,YAC1E8M,KACA,SAAC3Y,GAEC,OADmBA,EAAMpmB,MAAM,CAAC,UAAWm1Y,GAAenjZ,qBAKjDsjZ,EAAwB,SAACH,GAAD,OAA0BljX,YAC7D8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMpmB,MAAM,CAAC,UAAWm1Y,EAAc,cAGtDI,EAA8B,SAACJ,GAAD,OAA0BljX,YACnE8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMpmB,MAAM,CAAC,UAAWm1Y,EAAc,oBAGtDK,EAAqC,SAACL,GAAD,OAA0BljX,YAC1E8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMpmB,MAAM,CAAC,UAAWm1Y,EAAc,6BAGtDM,EAAuC,kBAAMxjX,YACxD8M,KACA,SAAC3Y,GAAD,OAA2BA,EAAMjjC,IAAI,oCAG1BuyZ,EAAsB,kBAAMzjX,YACvC8M,KACA,SAAC3Y,GACC,OAAOA,EAAMjjC,IAAI,kB,6BChFnB7I,EAAOC,QAAUC,EAAQ,O,6BCH3B,8KAiCIskD,EAjCJ,uBAmCaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,qDAA+G,CAC7G7Y,UAGGp0B,kBAGI2jZ,EAAuC,kBAAM1jX,YACxD8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,qCAQhDyyZ,EAAwB,SAACt2Z,GAAD,OAA2B2yC,YAC9D8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMpmB,MAAM,CAAC,cAAe1gB,QAWlEu2Z,EAA2B,kBAAM5jX,YAC5C8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,sBAMhD2yZ,EAA+B,SAACxwZ,GAAD,OAAU2sC,YACpD8M,KACE,SAAC3Y,GAAD,OAAiDA,EAAMpmB,MAAM,CAAC,qBAAsB1a,S,6BCtFzE,0/E,6BCAA,0wD,8VC8CF2zH,EAA4B,4BAqY1B5kD,sBACbgG,aAjXa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAO,IACP0lD,OAAQ,MAEV21R,cAAe,CACb/uS,aAAc,sBACd9rC,QAASZ,EAAMZ,WAEjBy/R,eAAgB,CACdz+R,MAAO,OACPi2C,OAAQ,GACR3J,aAAc,sBACd9rC,QAASZ,EAAMZ,WAEjBu/B,UAAW,CACTv+B,MAAO,QAETs7U,WAAY,CACVt7U,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,MAEzBu8U,iBAAkB,CAChBv7U,MAAO,GACPC,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,EAAG,MAEjCgmL,QAAS,CACPr6J,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,MAE/BkmU,UAAW,CACTviQ,MAAO,eAoVT9mD,YAAgB,gBAChB0/D,mBAxDsB,SAAC73E,GACvB,IAAMm9N,EAAe3oI,YAA+B3B,EAA/B2B,CAA0Dx0F,GACzE7qC,EAAQgoQ,EAAalqI,aACrBz8B,EAAS2mK,EAAa3mK,OACtBw9B,EAAOC,cAAiBj0F,GAC1B8vX,EAAuBphR,YAAe,CAAEl4C,WACxCw9B,IAASvgG,OAAKghG,SAChBq7R,EAAuBnhR,YAA4B,CAAEn4C,YAEnDw9B,IAASvgG,OAAKkhG,iBAChBm7R,EAAuBlhR,YAA8B,CAAEp4C,YAEzD,IAAIu5T,EAAwBl1N,cAO5B,OANI7mE,IAASvgG,OAAKghG,SAChBs7R,EAAwBt2N,eAEtBzlE,IAASvgG,OAAKkhG,iBAChBo7R,EAAwBr2N,eAEnB,aACLyjE,gBACGrxN,YAAyB,CAC1BkkX,oBAAqBx1N,YAA8B,CAAErlM,UACrD86Z,cAAeF,EACfG,eAAgBhnC,cAChBinC,aAAcznC,cACd55O,aAAcghR,GALbhkX,CAMA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAysX,YAAa,WACXzsX,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAI44F,EACJ3vF,MAAO,CACLipF,SAAU,UAIhBkkS,yBAA0B,SAAC75T,EAAgBs8B,EAAmBb,EAAmBq+R,GAC/E3sX,EAAS,IAAIyoD,IAA+B,CAC1CoK,SACAs8B,YACAb,YACAq+R,wBAMOriV,EA9Uc,SAAC/qC,GAC5B,IACEgvC,EAYEhvC,EAZFgvC,QACAirL,EAWEj6N,EAXFi6N,aACA6yJ,EAUE9sX,EAVF8sX,oBACAC,EASE/sX,EATF+sX,cACAC,EAQEhtX,EARFgtX,eACAC,EAOEjtX,EAPFitX,aACArhR,EAME5rG,EANF4rG,aACAuhR,EAKEntX,EALFmtX,yBACAD,EAIEltX,EAJFktX,YACAzsX,EAGET,EAHFS,SACA5e,EAEEme,EAFFne,EAXF,EAaIme,EADFqtX,gBAZF,SAeEpkS,EAiBEgxI,EAjBFhxI,SACA31B,EAgBE2mK,EAhBF3mK,OACAs8B,EAeEqqI,EAfFrqI,UACAb,EAcEkrI,EAdFlrI,UACAc,EAaEoqI,EAbFpqI,WACAC,EAYEmqI,EAZFnqI,cACAC,EAWEkqI,EAXFlqI,aAEAC,EASEiqI,EATFjqI,mBACAC,EAQEgqI,EARFhqI,WACAC,EAOE+pI,EAPF/pI,aACAC,EAME8pI,EANF9pI,kBACAC,EAKE6pI,EALF7pI,gBAEAk9R,EAGErzJ,EAHFqzJ,cAfF,EAkBIrzJ,EAFF3pI,sCAhBF,WAkBI2pI,EADF5pI,sBAjBF,SAoBA,EAA0D91F,WAAe,MAAzE,oBAAOgzX,GAAP,MAA8BC,GAA9B,MAEM7qW,GAAgBkgK,cAEhBlvE,GAAI,OAAG/H,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,QAE/B0gC,aAAgB,WACV0uF,GAAY6jS,EAAoB5hZ,SAClCu1B,EAAS,IAAIi5L,IAA0B,CACrC2rJ,oBAAqBt2P,EACrB0+R,4BAA6B59R,EAC7B69R,+BAAgC19R,GAAsB,GACtD29R,uBAAwB19R,GAAc,GACtC29R,yBAA0B19R,EAC1B29R,8BAA+B19R,GAAqB,GACpD29R,4BAA6B19R,EAC7BtuF,QAAS,CACPisJ,QAAS,CACPogC,sBAAuB,EACvB4/L,aAAc,EACd18B,eAAgB,EAChBt6V,GAAI,SAKX,CAACkyF,IAEJ1uF,aAAgB,WACd,OAAO,WACL2yX,OAED,IAGH,IAAMc,GAA0Bf,EAAaxrZ,QAAO,SAACutI,EAAKx9I,EAAOS,GAC/D,OAAO+8I,EAAIhpI,MAAM,CAACxU,EAAMqI,IAAI,sBAAuBrI,EAAMklB,MAAM,CAAC,iBAAkB,QAASllB,KAC1FkX,cAAI,CAAEokH,QAASpkH,gBAAO6sH,OAAQ7sH,mBAE7BulZ,GAAenB,EACE,MAAjBQ,IACFW,GAAenB,EAAoBzrZ,QAAO,SAAC6sZ,GAAD,OAAwBA,EAAmBr0Z,IAAI,oBAAsByzZ,MAEjHW,GAAeA,GAAanvZ,KAAI,SAACovZ,GAC/B,IAAMC,GAAqBD,EAAmBr0Z,IAAI,eAAiBq0Z,EAAmBr0Z,IAAI,YACpFu0Z,EAAuBF,EAAmBr0Z,IAAI,aACpD,OAAIs0Z,GAAqBH,GAAwBn0Z,IAAIu0Z,EAAuB,UAAY,UAAUr0Z,IAAIq0Z,GAA8CF,EAAmBr0Z,IAAI,aAClKq0Z,EAEAA,EAAmB1wZ,IAAI,YAAY,MAwB9C,OALAw+B,2BAAgB,WACY,IAAtBiyX,GAAap8Z,MACfq7Z,MAED,CAACe,GAAap8Z,OAEf,eAAC,IAAD,CACI4oI,QAAS,kBAAMyyR,KACftb,aAAc,CACZ/7G,SAAU,SACVK,WAAY,QAEdn7J,gBAAiB,CACf86J,SAAU,MACVK,WAAY,QAEhBz1L,KAAMttG,QAAQ81H,GACdA,SAAUA,EACVW,WAAY,CACV16C,UAAWF,EAAQ3hE,KACnB05G,UAAW,GAdf,UAkBQknS,GAAa/iZ,SAAW8hZ,EAElB,eAAC,IAAD,CAAM19U,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ6gS,eAA7F,UACE,cAAC,IAAD,CAAkB9zQ,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,KACxD,cAAC,IAAD,UACGz1F,EAAE,kDAIR,mCACDosY,GAAanvZ,KAAI,SAACovZ,EAA8Cj8Z,GAC5D,IAAM8kC,EAAKm3X,EAAmBr0Z,IAAI,MAC5Bu0Z,EAAuBF,EAAmBr0Z,IAAI,aAC9Cw0Z,EAAuBD,GAAwBF,EAAmBr0Z,IAAI,YACtEm1H,EAAgBk/R,EAAmBr0Z,IAAI,iBACvCy0Z,EAAcJ,EAAmBr0Z,IAAI,cACrCk5I,EAAem7Q,EAAmBr0Z,IAAI,gBACtCqzH,EAAWghS,EAAmBr0Z,IAAI,gBAClC09W,EAAO22C,EAAmBr0Z,IAAI,QAC9B00Z,EAAaL,EAAmBx3Y,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACjE83Y,EAAkBN,EAAmBr0Z,IAAI,oBACzC40Z,EAASF,EACXA,EAAa,gBACbC,GAAmB,yBACjBE,EAAWR,EAAmBr0Z,IAAI,YACxC,OACE,eAAC,IAAD,CAAyCq1E,UAAWF,EAAQy9U,cAA5D,UACE,eAAC,IAAD,CAAMn9U,WAAW,EAAMM,QAAQ,eAAeb,WAAW,SAASuB,KAAK,SAAvE,UACE,cAAC,IAAD,CAAMZ,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAO,OAAQF,QAAS,OAAQM,eAAgB,SAAUzC,WAAY,UAAjG,SACGs/U,EAAuBD,EAAuB,cAAC,IAAD,CAAiB1mS,KAAK,MAAMx4C,UAAWF,EAAQsvR,YAAe,cAAC,IAAD,CAAiBpvR,UAAWF,EAAQsvR,YAAe,OAElK,cAAC,IAAD,UACE,cAAC,IAAD,CAAOhiP,IAAKmyS,EAAQ7xS,aAAa,EAAMD,YAAa,OAAQvrC,MAAO,OAAQC,OAAQ,UAErF,eAAC,IAAD,CAAM/B,WAAW,EAAME,UAAU,SAASX,aAAa,aAAauiC,MAAO,CAAEhgC,MAAO,sBAApF,UAEIi9U,GACE,cAAC,IAAD,CAASruS,OAAQouS,EAAuBp/R,EAAgBs/R,IAAgB,GAAxE,SACE,cAAC,IAAD,CAAYvyT,MAAM,cAAcse,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAAjE,SACGy+S,EAAuBp/R,EAAgBs/R,MAM9Cv7Q,GACE,cAAC,IAAD,CAAS/yB,MAAO+yB,GAAgB,GAAhC,SACE,cAAC,IAAD,CAAYh3C,MAAOsyT,EAAuB,UAAY,cAAeh0S,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAAtG,SACGojC,MAKT,cAAC,IAAD,CAAS/yB,MAAOkN,GAAY,GAA5B,SACE,cAAC,IAAD,CAAY7S,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAA7C,SACGud,MAIHqqP,GACE,cAAC,IAAD,CAASv3P,MAAOu3P,GAAQ,GAAxB,SACE,cAAC,IAAD,CAAYl9P,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAA7C,SACG4nQ,SAMX,cAAC,IAAD,CAAMjoS,WAAW,EAAMM,QAAQ,SAASwhC,MAAO,CAAEhgC,MAAO,IAAxD,SAEI27U,GAAiBh2X,IAAOw2X,GACpB,cAAC,IAAD,CAAkBxxT,MAAM,UAAUlqG,KAAK,YACtCw7Z,EAcG,KAbF,cAAC,IAAD,CAASrtS,MAAO2zB,GAAO9xH,EAAE,oCAAsC,GAA/D,SACE,+BACE,cAAC,IAAD,CACEmxF,SAAU2gC,IAAQtjB,EAClB1V,QAAS,WACT6yS,GAAyBz2X,GACzBo2X,EAAyB75T,EAAQs8B,EAAWE,EAAe/4F,GAtH3E,SAACm3X,GACvB3xT,IAAmB9rE,kBAAgBk+X,kBAAmBhsW,GAAc,CAClEisW,eAAgB7/R,EAChBiB,qBACAC,aACAE,oBACAi+R,qBAAsBF,EAAmBr0Z,IAAI,aAC7Cg1Z,yBAA0BX,EAAmBr0Z,IAAI,iBACjDi1Z,oBAAqBZ,EAAmBr0Z,IAAI,YAC5Ck1Z,sBAAuBb,EAAmBr0Z,IAAI,cAC9Cm1Z,wBAAyBd,EAAmBr0Z,IAAI,gBAChDo1Z,wBAAyBf,EAAmBr0Z,IAAI,mBA4GZq1Z,CAAgBhB,IALlB,SAOE,cAAC,IAAD,eAShBQ,GACE,eAAC,IAAD,CAAMp/U,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASG,UAAWF,EAAQmgV,eAA9E,UACE,cAAC,IAAD,CAAMz/U,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQ29U,iBAA1E,SACE,cAAC,IAAD,CAAaz9U,UAAWF,EAAQonL,YAElC,cAAC,IAAD,CAAM1mL,MAAM,EAAZ,SACE,cAAC,IAAD,CAAYqsB,MAAM,cAAcqV,MAAO,CAAE6L,SAAU,SAAnD,SAC0Bp7F,EAAvBusY,EAAyB,uCAA4C,uDAxEvEF,EAAmBr0Z,IAAI,aAoF3CizZ,EAAoB5hZ,SACnB,cAAC,IAAD,CAAMokE,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAASK,UAAWF,EAAQ6gS,eAAjF,SACE,cAAC,IAAD,UACGhuV,EAAE,iDAMRyuG,GAAkCD,EAAkB,KAAO,cAAC,IAAD,CAASrQ,MAAO2zB,GAAO9xH,EAAE,oCAAsC,GAA/D,SAC1D,cAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ09U,WACnB/xS,QAAUg5B,IAAQo5Q,GAAiBM,EAAY,KAAO,WACpD5sX,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIq4X,IACJpvX,MAAO,CACLszD,SACAs8B,YACAb,YACAgB,mBAGJtvF,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIq4X,IACJ3uT,MAAM,KAERysT,KAlBN,SAqBE,cAAC,IAAD,CACInxT,MAAM,UACNiX,SAAU+5S,GAAiBp5Q,IAAQ05Q,EAFvC,SAIGxrY,EAAE,uD,mdCxHNkpD,oBACbgG,aApMa,SAACC,GAAD,MAA+B,CAC5Cq+U,cAAe,CACbj+U,MAAO,IACPi2C,OAAQ,IACRz1C,QAASZ,EAAMZ,QAAQ,IACvB,UAAW,CACTutC,UAAW3sC,EAAM6mD,QAAQ,KAG7BnW,QAAS,CACPvG,OAAQ,WAEVC,SAAU,CACRuV,OAAO,aAAD,OAAgB3/C,EAAM+pC,QAAQE,QAAQ,OAE9Ck0S,eAAgB,CACd99U,OAAQL,EAAMZ,QAAQ,EAAG,GACzBi3C,OAAQ,OAEVioS,SAAU,CACRj+U,OAAQ,SAEVs+B,UAAW,CACTv+B,MAAO,QAETm+U,WAAY,CACVx8S,SAAU,WACVqX,IAAK,GACL95G,MAAO,IAETwkX,YAAa,CACX/4R,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7B26E,SAAU,WACVqX,IAAK,GACL/5G,KAAM,IAERiuV,UAAW,CACTvrP,SAAU,WACVqX,IAAK,GACL/5G,KAAM,GACN0rF,MAAO,UACPkhB,SAAU,aA2JO,CAAC6H,WAAW,IAC/B7vE,YAAgB,gBAChB0/D,mBArBsB,SAAC73E,GACvB,IAAM6yV,EAAej+O,eAAgC50G,GAC/C4lB,EAAiBkvF,eAAmC90G,GACpD2lB,EAAcktU,GAAgBjtU,GAAkB,GACtD,OAAO,aACLD,eACG7Z,YAAyB,CAC1B4mX,WAAYjzW,gBADX3T,CAEA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,EAtJK,SAAC/qC,GACnB,IACEgvC,EAWEhvC,EAXFgvC,QACAgC,EAUEhxC,EAVFgxC,MACAk9U,EASEluX,EATFkuX,mBACA9jF,EAQEpqS,EARFoqS,UAEAqlF,GAMEzvX,EAPF+7E,WAOE/7E,EANFyvX,mBACAD,EAKExvX,EALFwvX,WACA/sW,EAIEziB,EAJFyiB,YACAitW,EAGE1vX,EAHF0vX,yBACAjvX,EAEET,EAFFS,SACA5e,EACEme,EADFne,EAGIktG,EAAYm/R,EAAmBr0Z,IAAI,aACnC81Z,EAAkB5gS,EAAY,YAAc,WAC5CC,EAAgBk/R,EAAmBr0Z,IAAI,iBACvCg2H,EAAaq+R,EAAmBr0Z,IAAI,cACpCwzH,EAAW6gS,EAAmBr0Z,IAAI,YAClCk5I,EAAem7Q,EAAmBr0Z,IAAI,gBACtCq8I,EAAiBg4Q,EAAmBr0Z,IAAI,kBACxCqzH,EAAWghS,EAAmBr0Z,IAAI,gBAClCyiH,EAAM4xS,EAAmBx3Y,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAC1D+uJ,EAAQ2kK,GAAar8T,iBAErB6hZ,EAASpoX,sBAAYwtT,YAA6BjiN,IAExDx4G,aAAgB,YACT+hF,QAAkB1qH,IAAXg+Z,GAAwB78Q,GAClCtyG,EAAS,IAAI6lC,IACX,CACEtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,sBACV5zD,OAAQ,CACNytG,qBAIN,SAAC55C,GACC,IAAKA,EAAQp1D,IAAK,CAChB,IACM2oX,EADgB3wY,iBAAOo9E,GACM5lF,MAAM,CAAC,OAAQ,UAAW,UAAW,eAAgB,EAAG,qBAC3F+pB,EAAS,IAAI6pS,IAAoC,CAAEv3L,eAAc+8Q,qBAAsB5wY,iBAAO,CAAE5a,KAAMyuI,EAAc68Q,OAAQC,cAKnI,CAACvzS,EAAKszS,IAET,IAAMG,EAAYtqP,EAAM3mK,KAAI,SAAC+N,EAAuBzS,GAAxB,OAC1B,eAACu0E,EAAA,EAAD,WACIqhV,YAAWnjZ,EAAMhT,IAAI,QAAS,IAER,SAAtBgT,EAAMhT,IAAI,SAAsBgT,EAAMhT,IAAI,iBAAmB21Z,GAC3D,cAACzvS,EAAA,EAAD,CAASC,MAAK,UAAKv9D,EAAL,YAAoB5gC,EAAE,6BAApC,SACE,cAAC,IAAD,CAAUuvF,MAAO,CAAEhgC,MAAO,GAAIi2C,OAAQ,IAAKtrB,MAAM,eAL9C3hG,MAYb,OACE,cAAC0iH,EAAA,EAAD,CACE5tC,UAAWm0C,IAAWr0C,EAAQqgV,cAAeI,EAAoBzgV,EAAQosC,SAAWpsC,EAAQ0yC,SAC5F/G,QAAS80S,EAAoB,KAAO,kBAAMC,EAAyB3gS,GAAwB1B,EAAUsiS,IACrGngT,QAAQ,WAHV,SAKE,eAAC7gC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,UAEwB,cAApB+/U,EAAkC,cAAC5vS,EAAA,EAAD,CAASC,MAAOn+F,EAAE,uCAAlB,SAC5B,cAAC0iQ,EAAA,EAAD,CAASr1M,UAAWF,EAAQsvR,UAA5B,SAAuC,cAAC,IAAD,CAAiB52O,KAAK,YACtD,cAAC3H,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sCAAlB,SACX,cAAC,IAAD,CAAiBqtD,UAAWF,EAAQsvR,eAIrCl0B,GACC,cAACrqN,EAAA,EAAD,CAASC,MAAmBn+F,EAAZktG,EAAc,uCAA4C,8CAA1E,SACE,cAAC,IAAD,CAAa7/C,UAAWF,EAAQ8lT,gBAKtC,cAAC,IAAD,CAAOx4Q,IAAMA,GAAYszS,GAAWxvF,IAAcxjN,eAAcN,IAAOszS,GAAwBjzS,YAAa,OAAQvrC,MAAO,QAASC,OAAQ,eAE1Io+U,GACE,cAACj/R,EAAA,EAAD,CAAY3+H,KAAK,QAAQq9E,UAAWF,EAAQugV,WAAY50S,QAAS,kBAAM+0S,EAAyB3gS,GAAwB1B,EAAUsiS,IAAlI,SACE,cAAC,IAAD,CAAY5zT,MAAM,gBAK1B,cAACptB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAI0gC,MAAO,CAAEx/B,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAAnE,SACE,eAACzB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACE,cAACb,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAM,SAA7B,SACE,cAACyvC,EAAA,EAAD,CAASC,MAAOgP,GAAiB,GAAjC,SACE,cAAC1f,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAU6K,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAAnF,SACuB,cAApBggT,EAAkC3gS,EAAgBa,QAIzD,cAAC9P,EAAA,EAAD,CAASC,MAAO+yB,GAAgB,GAAhC,SACE,cAACzjC,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAU6K,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAAnF,SACGojC,MAGL,cAAChzB,EAAA,EAAD,CAASC,MAAOkN,GAAY,GAA5B,SACE,cAAC5d,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAU6K,QAAQ,EAAMnrC,UAAWF,EAAQ2gC,UAAnF,SACGud,WAMPk9M,GACE,eAACz7P,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASG,UAAWF,EAAQmgV,eAA1F,UACE,eAAC7/S,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAU4B,MAAO,CAAEkG,YAAa,GAAK+C,QAAQ,EAArF,UACGx4F,EAAE,6BADL,OAGEkuY,EAAUjxZ,KAAI,SAACwwZ,EAAUl1Z,GAAX,OAAmB,cAACu0E,EAAA,EAAD,CAAgBe,MAAM,EAAMR,UAAWF,EAAQsgV,SAA/C,SAA0DA,GAA/Cl1Z,iB,kBCf7C2wE,qBACbgG,aAnKa,SAACC,GAAD,MAA+B,CAC5Cq+U,cAAe,CACbj+U,MAAO,IACPi2C,OAAQ,IACRz1C,QAASZ,EAAMZ,QAAQ,GAAK,GAAK,EAAG,IACpCugD,OAAO,aAAD,OAAgB3/C,EAAM+pC,QAAQE,QAAQ,MAC5C,UAAW,CACT0C,UAAW3sC,EAAM6mD,QAAQ,KAG7B03R,WAAY,CACVx8S,SAAU,WACVqX,IAAK,GACL95G,MAAO,IAETgrX,sBAAuB,CACrBlqT,MAAO,OACPghC,UAAW,IAEbmlQ,KAAM,CACJ3lS,QAASZ,EAAMZ,QAAQ,EAAG,OA+IT,CAAC00C,WAAW,IAC/B7vE,YAAgB,gBAChB0/D,kBAAQ,MATiB,SAACl0E,GAC1B,MAAO,CACLA,eAIWsqC,EA1IU,SAAC/qC,GACxB,IACEgvC,EAUEhvC,EAVFgvC,QACAgC,EASEhxC,EATFgxC,MACA4hE,EAQE5yG,EARF4yG,cACAq9Q,EAOEjwX,EAPFiwX,wBACAC,EAMElwX,EANFkwX,yBAEAC,GAIEnwX,EALFrJ,WAKEqJ,EAJFmwX,+BACAC,EAGEpwX,EAHFowX,8BACA3vX,EAEET,EAFFS,SACA5e,EACEme,EADFne,EAGF,EAAwC0Y,YACd,OAAxB21X,QAAwB,IAAxBA,OAAA,EAAAA,EAA0Br2Z,IAAI,mBAC1B,CACEk9B,GAAIm5X,EAAyBr2Z,IAAI,kBACjCrI,MAAO0+Z,EAAyBr2Z,IAAI,gBACpC+8B,MAAO,MAET,MAPN,mBAAOm8G,EAAP,KAAqBgmP,EAArB,KASA,EAA8Bx+V,WAAA,OAAe21X,QAAf,IAAeA,OAAf,EAAeA,EAA0Br2Z,IAAI,qBAA3E,mBAAOw2Z,EAAP,KAAgBC,EAAhB,KACA,EAAwB/1X,YAAuC,OAAxB21X,QAAwB,IAAxBA,OAAA,EAAAA,EAA0Br2Z,IAAI,eAAWjI,GAAhF,mBAAO2lX,EAAP,KAAag5C,EAAb,KACA,EAA0Dh2X,YAAe,GAAzE,mBAAOi2X,EAAP,KAA8BC,EAA9B,KAGMC,IADc,OAAG39Q,QAAH,IAAGA,OAAH,EAAGA,EAAch8G,IAG/B45X,EAAsBnpX,sBAAYutT,eAwBlC67D,EACJ,cAACC,EAAA,EAAD,CACEr/Z,MAAOuhJ,EACPjxG,SAAsB,OAAb8wG,QAAa,IAAbA,OAAA,EAAAA,EAAev+H,SAAU,GAClCi9F,SAAU,SAACpzG,EAAG1M,GAAW,IAAD,EA1BH6oY,EA2Bby2B,EAAwB,OAAGH,QAAH,IAAGA,GAAH,UAAGA,EAAqB92Z,IAAIrI,EAAMA,cAAlC,aAAG,EAAuCqI,IAAI,UAC5Ek/X,EAAgBvnY,GACZs/Z,EACFR,EAAWQ,IA9BMz2B,EAgCD7oY,EA/BtBivC,EAAS,IAAI6lC,IACX,CACEtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,sBACV5zD,OAAQ,CACNytG,eAAgBmkP,EAActjW,OAIpC,SAACulE,GACC,IAAKA,EAAQp1D,IAAK,CAChB,IACMo1E,EADgBp9F,iBAAOo9E,GACK5lF,MAAM,CAAC,OAAQ,UAAW,UAAW,eAAgB,EAAG,qBAC1F45Y,EAAWh0S,GACX77E,EAAS,IAAI6pS,IAAoC,CAAEv3L,aAAcsnP,EAAc7oY,MAAOs+Z,qBAAsB5wY,iBAAO,CAAE5a,KAAM+1X,EAAc7oY,MAAOo+Z,OAAQtzS,aAkB1J8zS,EAA8BF,EAAyB1yZ,IAAI,iBAAkBhM,EAAMulC,IAAIv5B,IAAI,eAAgBhM,EAAMA,SAEnH2lI,eAAgB,SAAC7gB,GAAD,OAAYA,EAAO9kH,OAAS,IAC5CqtG,QAAS,kBAAM4xT,GAAyB,IACxCj1R,OAAQ,kBAAMi1R,GAAyB,IACvC99E,YAAa,SAAAlqS,GAAM,OACjB,cAACs3E,EAAA,EAAD,CAASC,OAAmB,OAAZ+yB,QAAY,IAAZA,OAAA,EAAAA,EAAcvhJ,QAAS,GAAvC,SACE,cAACw6T,EAAA,EAAD,2BACMvjR,GADN,IAEEq4E,YAAaj/F,EAAE,4CACf8tF,WAAW,EACXiD,WAAU,2BACLnqE,EAAOmqE,YADF,IAER6kN,aACE,eAAC,WAAD,WACGw4F,GAA2BO,EAAwB,cAAC94F,EAAA,EAAD,CAAkB7lU,KAAM,GAAIu/G,MAAO,CAAE4M,WAAY,MAAW,KAC/Gv1E,EAAOmqE,WAAW6kN,wBAO/Bs5F,kBAAkB,EAClBC,SAAUnvY,EAAE,oBACZovY,UAAWpvY,EAAE,qBACbqvY,UAAWrvY,EAAE,qBACbsvY,cAAetvY,EAAE,6BACjBuvY,YAAavvY,EAAE,0BACfq7E,QAAS+yT,IAIb,OACE,cAACnzS,EAAA,EAAD,CACEtN,QAAQ,WACRtgC,UAAWF,EAAQqgV,cAFrB,SAIE,eAAC1gV,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,UACE,cAAC,IAAD,CAAO0sC,IAAK+zS,GAAoBjwF,IAAcxjN,cAAayzS,EAAwB1zS,YAAa,OAAQvrC,MAAO,QAASC,OAAQ,eAChI,cAACm/C,EAAA,EAAD,CAAY3+H,KAAK,QAAQq9E,UAAWF,EAAQugV,WAAY50S,QAAS,kBAAMw1S,EAA6B,OAACD,QAAD,IAACA,OAAD,EAACA,EAA0Br2Z,IAAI,QAAnI,SACE,cAAC,IAAD,CAAYkiG,MAAM,gBAGtB,cAACptB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQssT,sBAAuBlqR,MAAO,CAAEx/B,QAASZ,EAAMZ,QAAQ,EAAG,IAA/F,SACGwgV,IAEH,cAAC7wS,EAAA,EAAD,CAASC,MAAOu3P,GAAQ,GAAxB,SACE,cAACvrD,EAAA,EAAD,CACEh5M,SAAU09S,EACV/gT,WAAW,EACXn+G,MAAO+lX,EACPz2P,YAAaj/F,EAAE,+CACfqtD,UAAWF,EAAQuoS,KACnBjmQ,SAAU,SAACpzG,GACTqyZ,EAAQryZ,EAAE4kB,OAAOtxB,OACjB4+Z,EAA8BF,EAAyB1yZ,IAAI,OAAQU,EAAE4kB,OAAOtxB,qB,2FCxJ7E49Z,GAAwB,wBAkkBtBrkV,sBACbgG,aAriBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAO,KACPgB,SAAU,UACVi1C,OAAQ,KAEVgqS,eAAgB,CACd3nS,UAAW,IAEX3W,SAAU,WACVnhC,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BkhV,eAAgB,CAEdvxR,UAAW,OACX3uD,MAAO,QAETi+U,cAAe,CACbn+U,QAAS,OACTM,eAAgB,SAChBH,OAAQL,EAAMZ,QAAQ,EAAG,GACzB2iC,SAAU,YAEZw+S,iBAAkB,CAChBngV,MAAO,IACPi2C,OAAQ,IACRz1C,QAASZ,EAAMZ,QAAQ,IACvB+qC,OAAQ,UACR,UAAW,CACTwC,UAAW3sC,EAAM6mD,QAAQ,KAG7B25R,iBAAkB,CAChBl6S,YAAatmC,EAAMZ,WAErBqhV,QAAS,CACPvgV,QAAS,OACT8rR,UAAW,SACXh/O,WAAY,IAEd0zS,kBAAmB,CACjBxgV,QAAS,OACTm2C,OAAQ,OACR21O,UAAW,SACXjuR,WAAY,UAEd4iV,SAAU,CACRr6S,YAAatmC,EAAMZ,QAAQ,IAE7BwhV,UAAW,CACThgV,QAAS,YAEXjwD,OAAQ,CACN21F,YAAatmC,EAAMZ,QAAQ,IAE7Bi1R,QAAS,CAEPh0R,OAAQL,EAAMZ,QAAQ,EAAG,IAE3ByhV,aAAc,CAIZ9+S,SAAU,SACVsX,OAAQ,EACRz4C,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B0qC,gBAAiB,QACjB6C,UAAW,yCAkeM,CAAEmH,WAAW,IAChC7vE,YAAgB,gBAChB0/D,mBA/CsB,SAAC73E,GACvB,IAAMm9N,EAAe3oI,YAA+B89R,GAA/B99R,CAAsDx0F,GACrE8yF,EAAYqqI,EAAarqI,UACzBt8B,EAAS2mK,EAAa3mK,OAC5B,OAAO,aACL2mK,gBACGrxN,YAAyB,CAC1BkpX,cAAe7yL,cACf8yL,cAAer6N,cACfs1N,eAAgBhnC,cAChBgsC,eAAgB/5N,cAChBg6N,4BAA6B95N,cAC7BhC,QAASxkE,YAAkB,CAAC/B,cAC5Bq9R,aAAcznC,cACd55O,aAAcwrD,YAAuB,CAAE9jG,WACvCmN,KAAMmzG,YAA2Bw7M,KAThCxmX,CAUA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAyxX,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIq4X,GACJ3uT,MAAM,MAGV0xT,wBAAyB,SAAC7+T,EAAgBs8B,EAAmBb,EAAmB+9R,EAA8DsF,GAC5I3xX,EAAS,IAAI6oD,MAA8B,CACzCgK,SACAs8B,YACAb,YACA+9R,sBACAsF,kBAGJC,mBAAoB,WAClB5xX,EAAS,IAAIu3L,UAKJjtJ,EA5dW,SAAC/qC,GACzB,IACEgxC,EAiBEhxC,EAjBFgxC,MACAhC,EAgBEhvC,EAhBFgvC,QACAirL,EAeEj6N,EAfFi6N,aACA63J,EAcE9xX,EAdF8xX,cACAC,EAaE/xX,EAbF+xX,cACA/E,EAYEhtX,EAZFgtX,eACAgF,EAWEhyX,EAXFgyX,eACAC,EAUEjyX,EAVFiyX,4BACA97N,EASEn2J,EATFm2J,QACA82N,EAQEjtX,EARFitX,aAEAxsT,GAMEzgE,EAPF4rG,aAOE5rG,EANFygE,MACAhgE,EAKET,EALFS,SACAyxX,EAIElyX,EAJFkyX,YACAG,EAGEryX,EAHFqyX,mBACAF,EAEEnyX,EAFFmyX,wBACAtwY,EACEme,EADFne,EAIAyxE,EAKE2mK,EALF3mK,OACAs8B,EAIEqqI,EAJFrqI,UACAb,EAGEkrI,EAHFlrI,UACAgB,EAEEkqI,EAFFlqI,aACSvC,EACPysI,EADFntI,QAGI/uB,EAAS8zK,eAET/kJ,GAAiB,OAAPqpE,QAAO,IAAPA,OAAA,EAAAA,EAASz/K,MAAM,CAAC,WAAYq5G,MAAkBvC,EACxDsC,EAAa,OAAGhD,QAAH,IAAGA,OAAH,EAAGA,EAASjzH,IAAI,iBAEnC,EAAsD0gC,YAAsB,OAAPuyF,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,yBAA0BkU,kBAA5G,mBAAO++Y,EAAP,KAA4BwF,EAA5B,KACA,EAAgD/3X,YAAe,GAA/D,mBAAOg4X,EAAP,KAAyBC,EAAzB,KACA,EAA0Cj4X,WAAexsB,kBAAzD,mBAAO6kI,GAAP,KAAsB6/Q,GAAtB,KACA,GAA8Dl4X,YAAe,GAA7E,qBAAO01X,GAAP,MAAgCyC,GAAhC,MAEIC,GAAqBjqZ,gBAsBzB6xB,aAAgB,WACVw0F,IACFsjS,IArBFK,IAA2B,GAC1B30T,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,2BACV5zD,OAAQ,CACN9R,YAAmB,OAAPm2F,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,eAAgB,KAElCwyE,MAAK,SAAAurE,GAAQ,IAAD,IACrB66Q,GAAiBvzY,kBAAU,OAAH04H,QAAG,IAAHA,GAAA,UAAAA,EAAK56G,eAAL,mBAAc8vF,eAAd,eAAuBimB,eAAgB,IAAIxwI,MAAK,SAAC9G,EAAGC,GAC1E,OAAOD,EAAE5B,IAAI,SAASq1C,cAAcmuL,cAAc3hO,EAAE7B,IAAI,SAASq1C,sBAElEutJ,OAAM,SAACv1J,GAERppB,QAAQC,KAAK,6CAA8CmpB,MAC1Dm4V,SAAQ,WACTqzB,IAA2B,SAS5B,CAAC3jS,IAEJx0F,aAAgB,WACdkG,EAAS,IAAIu7L,OACZ,CAACv7H,IAEJlmE,aAAgB,WACVw0F,GACFtuF,EAAS,IAAIi5L,IAA0B,CACrC2rJ,oBAAqBt2P,EACrB0+R,4BAA2B,OAAE3gS,QAAF,IAAEA,OAAF,EAAEA,EAASjzH,IAAI,cAC1C6zZ,gCAAuC,OAAP5gS,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,mBAAoB,GACjE8zZ,wBAA+B,OAAP7gS,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,WAAY,GACjD+zZ,yBAAwB,OAAE9gS,QAAF,IAAEA,OAAF,EAAEA,EAASjzH,IAAI,WACvCg0Z,+BAAsC,OAAP/gS,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,kBAAmB,GAC/Di0Z,4BAA2B,OAAEhhS,QAAF,IAAEA,OAAF,EAAEA,EAASjzH,IAAI,YAC1CioC,QAAS,CACPisJ,QAAS,CACPogC,sBAAuB,EACvB4/L,aAAc,EACd18B,eAAgB,EAChBt6V,GAAI,SAKX,CAAC+4F,IAEJv1F,aAAgB,WACVu1F,GACFwiS,GAA8B,OAAPxlS,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,yBAA0BkU,kBAEhE4kZ,GAAqBjqZ,kBACpB,CAAConH,IAEJ,IAAM8iS,GAAuB3F,EAAa5rZ,QAAO,SAACokX,EAAUxzX,GAC1D,IAAM4ga,EAAYptC,EAAS/uW,MAAM,CAAC,iBAAkB,OAC9Co8Y,EAAcrtC,EAAS5rX,IAAI,sBACjC,OAAK84Z,GAAmB54Z,IAAI+4Z,EAAcD,KACxCF,GAAqBA,GAAmBn1Z,IAAIs1Z,EAAcD,GAAW,IAC9D,MAMLE,GAAoBjG,EAAoB5hZ,SAAW,EAGnD8nZ,GAAkClG,EAAoBrrZ,QAAO,SAACutI,EAAKx9I,EAAOS,GAC9E,IAAMm8Z,EAAuB58Z,EAAMqI,IAAI,aACvC,OAAOm1I,EAAIhpI,MAAM,CAACooZ,EAAuB,UAAY,SAAUA,GAA8C58Z,EAAMqI,IAAI,aAAcrI,KACpIkX,cAAI,CAAEokH,QAASpkH,gBAAO6sH,OAAQ7sH,mBAG3BslZ,GAA0B4E,GAAqBnxZ,QAAO,SAACutI,EAAKx9I,EAAOS,GACvE,OAAO+8I,EAAIhpI,MAAM,CAACxU,EAAMqI,IAAI,sBAAuBrI,EAAMklB,MAAM,CAAC,iBAAkB,QAASllB,KAC1FkX,cAAI,CAAEokH,QAASpkH,gBAAO6sH,OAAQ7sH,mBAG3BuqZ,GAA6BnG,EAAoBzrZ,QAAO,SAAC6sZ,EAAoBj8Z,GAArB,OAA+Bi8Z,EAAmBr0Z,IAAI,cAAgBq0Z,EAAmBr0Z,IAAI,eAGrJq5Z,GAA4BpG,EAAoBzrZ,QAAO,SAAC6sZ,EAAoBj8Z,GAArB,QAAiCi8Z,EAAmBr0Z,IAAI,cAAgBq0Z,EAAmBr0Z,IAAI,gBAGtJs5Z,GAAmCD,GAA0B3vZ,MAAK,SAAC2sZ,EAA0B91Z,GAA3B,OAAoC81Z,EAAyBr2Z,IAAI,qBAGnIu5Z,GAAgBR,GAAqBvxZ,QAAO,SAACokX,GAAD,OAAcutC,GAAgCn5Z,IAA2C,YAAvC4rX,EAAS5rX,IAAI,sBAAsC,UAAY,UAAUE,IAAI0rX,EAAS/uW,MAAM,CAAC,iBAAkB,WAI7M28Y,GAA8BJ,GAA2B5xZ,QAAO,SAACiyZ,GAAD,OAAgCtF,GAAwBn0Z,IAAIy5Z,EAA0Bz5Z,IAAI,aAAe,UAAY,UAAUE,IAAIu5Z,EAA0Bz5Z,IAAI,aAAey5Z,EAA0Bz5Z,IAAI,aAAey5Z,EAA0Bz5Z,IAAI,gBAE3T61Z,GAA2B,SAAC6D,EAA0Bv9Z,GAC1D,IAAM/D,EAAQ66Z,EAAoBhxY,WAAU,SAAC03Y,EAAatU,GAAd,OAAyBsU,EAAY35Z,IAAI7D,KAAUu9Z,MAChF,IAAXtha,EACG8ga,IACHT,EAAuBxF,EAAoB5qZ,KAAKwG,cAAI,eACjD1S,EAAOu9Z,MAIZjB,EAAuBxF,EAAoBxuS,OAAOrsH,KAUhDk+Z,GAAgC,SAACp5X,GACrC,IAAM08X,EAAyB3G,EAAoBzrZ,QAAO,SAAC6sZ,EAAoBj8Z,GAArB,OAA+Bi8Z,EAAmBr0Z,IAAI,QAAUk9B,KAC1Hu7X,EAAuBmB,IAGnBrD,GAAgC,SAACsD,GACrC,IAAMC,EAAqB7G,EAAoBhxY,WAAU,SAAC03Y,EAAavha,GAAd,OAAwBuha,EAAY35Z,IAAI,QAAU65Z,EAA2B75Z,IAAI,SACpI45Z,EAAyB3G,EAAoBtvZ,IAAIm2Z,EAAoBD,GAC3EpB,EAAuBmB,IAOnB7nD,GAAa,WACb2mD,GACFC,GAAoB,GAGtB,IAUMoB,EAV2B9G,EAC9BzrZ,QAAO,SAAC6sZ,EAAoBj8Z,GAArB,OAA+Bi8Z,EAAmBr0Z,IAAI,cAAgBq0Z,EAAmBr0Z,IAAI,aAAeq0Z,EAAmBr0Z,IAAI,qBAC1IiF,KAAI,SAACovZ,EAAoBj8Z,GACxB,IAAI4ha,EAAwB3F,EAK5B,OAHIA,EAAmBr0Z,IAAI,OAAS,IAClCg6Z,EAAwB3F,EAAmB5vS,OAAO,OAE7Cu1S,KAE+C/0Z,KAAI,SAACovZ,EAAoBj8Z,GACjF,OAnSe2K,EAmSG,CAChBm6B,GAAIm3X,EAAmBr0Z,IAAI,OAAS,KACpCk1H,UAAWm/R,EAAmBr0Z,IAAI,cAAgB,KAClDwzH,SAAU6gS,EAAmBr0Z,IAAI,aAAe,KAChDq8I,eAAgBg4Q,EAAmBr0Z,IAAI,mBAAqB,KAC5D09W,KAAM22C,EAAmBr0Z,IAAI,SAvS5B3F,OAAO4/Z,YACZ5/Z,OAAOuL,QAAQ7C,GAAKyE,QAAO,+CAAiB,MAAjB,SAF/B,IAAqBzE,KA4SjBu1Z,EAAwB7+T,EAAQs8B,EAAWE,EAAe8jS,EAA0B9mS,IAGhFinS,GACJ,cAAC1kC,GAAA,EAAD,CAA8B7/S,UAAU,OAAxC,SACE,eAACb,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAAC,KAAD,CAAaysB,MAAM,UAAU7sB,UAAWF,EAAQwiV,mBAChD,cAACliT,EAAA,EAAD,CAAYvT,MAAM,UAAlB,SACGl6E,EAAE,6CAMLmyY,GAAiB,WACrB,OAAIlC,GAAiBC,EAEjB,sBAAK7iV,UAAWF,EAAQ0iV,kBAAxB,UACE,cAACh6F,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQ2iV,WACpD9vY,EAAE,mDAGEmwY,EAEP,sBAAK9iV,UAAWF,EAAQ0iV,kBAAxB,UACE,cAACh6F,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQ2iV,WACpD9vY,EAAE,6BAGEmrY,EAEP,sBAAK99U,UAAWF,EAAQ0iV,kBAAxB,UACE,cAACh6F,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQ2iV,WACpD9vY,EAAE,4CAGEowY,EAEP,sBAAK/iV,UAAWF,EAAQ0iV,kBAAxB,UACE,cAACh6F,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQ2iV,WACpD9vY,EAAE,sDAJF,GAWT,OACE,eAAC,IAAD,CACEujG,SAAUgqS,GACVjzR,gBAAiB,CACf83R,UAAW,kBAAM3B,GAA8B,OAAPxlS,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,yBAA0BkU,mBAC/EmmZ,OAAQ,WACN5B,EAAuBvkZ,kBACvB0yB,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIq4X,GACJpvX,MAAO,QAIbgvC,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAbnB,UAiBI2mZ,KACIA,KACA,qCACE,sBAAK9kV,UAAWF,EAAQqiV,eAAxB,UACE,eAAC1iV,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAApD,UACE,eAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,eAA3D,UACE,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,8CAEL,cAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8CAAlB,SACE,cAAC,KAAD,CAAUk6E,MAAM,SAASkhB,SAAS,QAAQ7L,MAAO,CAAE4M,WAAY,UAGlE+1S,OAGAnB,GAAqB1nZ,SACpB,cAACyjE,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASwhC,MAAO,CAAE+X,cAAen4C,EAAMZ,QAAQ,IAA9E,SACE,cAACk/B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACGl6E,EAAE,sCAKX,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQsiV,eAAgBlhV,QAAS,EAAGE,KAAK,SAA3E,UACE,cAAC3B,EAAA,EAAD,CAAkBe,MAAM,EAAMR,UAAWF,EAAQqgV,cAAjD,SACE,cAACvyS,EAAA,EAAD,CACEtN,QAAQ,WACRtgC,UAAWF,EAAQuiV,iBACnB52S,QAASo4S,GAAoB,KA5IT,WACtCT,EAAuBxF,EAAoB5qZ,KAAKwG,cAAI,CAClDquB,KAAM,IAAIlT,MAAOtoB,eAuIH,SAKE,eAACozE,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAASuiC,MAAO,CAAEiW,OAAQ,OAAQjV,WAAY,IAAnG,UACE,cAAC,KAAD,CAASrW,MAAOg3T,GAAoB,WAAa,UAAW3hT,MAAO,CAAEhgC,MAAO,IAAKi2C,OAAQ,OACzF,cAAC/X,EAAA,EAAD,CAAY8B,MAAO,CAAEgB,WAAY,GAAIrW,MAAOg3T,GAAoB/hV,EAAM+pC,QAAQ/5F,OAAOgyF,SAAWhiC,EAAM+pC,QAAQE,QAAQ,MAAtH,SACGp5F,EAAE,4CATA,OAeT+wY,GAAqB9zZ,KAAI,SAAC2mX,EAAUxzX,GAClC,IAAM6ga,EAAcrtC,EAAS5rX,IAAI,sBAC3BkiH,EAAai3S,GAAgCn5Z,IAAIi5Z,GAAa/4Z,IAAI0rX,EAAS/uW,MAAM,CAAC,iBAAkB,QACpGy9Y,EAAiB1uC,EAAS5rX,IAAI,kBAC9BuwU,EAAYq7C,EAAS5rX,IAAI,SACzBu6Z,EAAyB1rZ,cAAI,CACjCqmH,UAA2B,YAAhB+jS,EAA4BqB,EAAet6Z,IAAI,MAAQ,KAClEwzH,SAA0B,WAAhBylS,EAA2BqB,EAAet6Z,IAAI,MAAQ,KAChEm1H,cAA+B,YAAhB8jS,EAA4BqB,EAAet6Z,IAAI,iBAAmB,KACjFg2H,WAA4B,WAAhBijS,EAA2BqB,EAAet6Z,IAAI,iBAAmB,KAC7Ek5I,aAAcohR,EAAet6Z,IAAI,SACjC68B,aAAcy9X,EAAet6Z,IAAI,gBACjC0vN,KAAM4qM,EAAet6Z,IAAI,UAE3B,OAAOkiH,EAAa,KAClB,cAACptC,EAAA,EAAD,CAAkBe,MAAM,EAAMR,UAAWF,EAAQqgV,cAAjD,SACE,cAAC,EAAD,CAAanB,mBAAoBkG,EAAwBhqF,UAAWA,EAAWruN,WAAYA,EAAY2zS,yBAA0BA,MADxHz9Z,SAOnB,cAACw6H,EAAA,EAAD,CAASv9C,UAAWF,EAAQq2R,UAC5B,eAAC12R,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACE,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,2CAEL,cAAC,KAAD,CAAUk6E,MAAM,SAASkhB,SAAS,QAAQ7L,MAAO,CAAE//B,OAAQ,mBAC3D,cAACi+B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACGl6E,EAAE,6CAIJ,OAACuxY,SAAD,IAACA,QAAD,EAACA,GAAeloZ,YAAW,OAACmoZ,SAAD,IAACA,QAAD,EAACA,GAA6BnoZ,YAAW,OAACgoZ,SAAD,IAACA,QAAD,EAACA,GAA2BhoZ,UAC/F,cAACyjE,EAAA,EAAD,CAAMW,WAAW,EAAMT,aAAa,SAASe,QAAQ,SAASwhC,MAAO,CAAEsY,UAAW,KAAlF,SACE,cAACpa,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACGl6E,EAAE,6CAKX,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQsiV,eAAgBlhV,QAAS,EAAGvB,aAAa,SAASyB,KAAK,SAAjG,SAEIw8U,EAAoBhuZ,KAAI,SAACovZ,EAAoBj8Z,GAAW,IAAD,IAC/C6ga,EAAc5E,EAAmBr0Z,IAAI,aAAe,UAAYq0Z,EAAmBr0Z,IAAI,YAAc,SAAW,eAEtH,GAAoB,iBAAhBi5Z,EACF,OACE,cAACnkV,EAAA,EAAD,CAAyCe,MAAM,EAAMR,UAAWF,EAAQqgV,cAAxE,SACE,cAAC,GAAD,CACEa,yBAA0BhC,EAC1Bv3X,YAAmB,OAAPm2F,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,eAAgB,EACzC+4I,cAAeA,GACfq9Q,wBAAyBA,GACzBE,8BAA+BA,GAC/BC,8BAA+BA,MAPxBlC,EAAmBr0Z,IAAI,OAatC,IAAMs6Z,EAAc,UAAGnG,GAAwBt3Y,MAAM,CAACo8Y,EAAa5E,EAAmBr0Z,IAAoB,YAAhBi5Z,EAA4B,YAAc,qBAAhH,aAAG,EAA4Hj5Z,IAAI,kBACjJuwU,EAAY+pF,EAAc,UAAGnG,GAAwBt3Y,MAAM,CAACo8Y,EAAa5E,EAAmBr0Z,IAAoB,YAAhBi5Z,EAA4B,YAAc,qBAAhH,aAAG,EAA4Hj5Z,IAAI,SAAW,KACxKu6Z,EAAyBD,EAC3BzrZ,cAAI,CACFqmH,UAA2B,YAAhB+jS,EAA4BqB,EAAet6Z,IAAI,MAAQ,KAClEwzH,SAA0B,WAAhBylS,EAA2BqB,EAAet6Z,IAAI,MAAQ,KAChEm1H,cAA+B,YAAhB8jS,EAA4BqB,EAAet6Z,IAAI,iBAAmB,KACjFg2H,WAA4B,WAAhBijS,EAA2BqB,EAAet6Z,IAAI,iBAAmB,KAC7Ek5I,aAAcohR,EAAet6Z,IAAI,SACjC68B,aAAcy9X,EAAet6Z,IAAI,gBACjC0vN,KAAM4qM,EAAet6Z,IAAI,UAE3Bq0Z,EACJ,OACE,cAACv/U,EAAA,EAAD,CAAkBe,MAAM,EAAMR,UAAWF,EAAQqgV,cAAjD,SACE,cAAC,EAAD,CAAanB,mBAAoBkG,EAAwBhqF,UAAWA,EAAWqlF,mBAAmB,EAAMC,yBAA0BA,MADzHz9Z,WAQrB,eAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ6iV,aAA7D,UACE,cAACp3S,EAAA,EAAD,CACE1e,MAAM,UACN4e,QA5ND,WACbu3S,KA4NcljV,QAAS,CACP3hE,KAAM2hE,EAAQ4iV,WAEhB1iV,UAAWF,EAAQrtD,OANrB,SAQGE,EAAE,wBAEL,cAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRmL,QAAS,kBAAMw4S,GAAmCX,GAAoB,GAAQ5mD,MAC9E58R,QAAS,CACP3hE,KAAM2hE,EAAQ4iV,WALlB,SAQG/vY,EAAE,4BAKf,eAACiqS,EAAA,EAAD,CACErrN,KAAM8xT,EACN93R,QAAS,kBAAM+3R,GAAoB,IAFrC,UAIE,cAACzmG,EAAA,EAAD,UACGlqS,EAAE,0CAEL,eAACqqS,EAAA,EAAD,WACE,cAACzxM,EAAA,EAAD,CAAQE,QAASixP,GAAY7vQ,MAAM,UAAnC,SACGl6E,EAAE,0BAEL,cAAC44F,EAAA,EAAD,CAAQE,QAAS,kBAAM63S,GAAoB,IAAQz2T,MAAM,UAAUkxN,WAAW,EAA9E,SACCprS,EAAE,qC,cC1jBb,SAASwuB,EAAQzzC,GAiBf,MAdsB,oBAAXpH,QAAoD,kBAApBA,OAAOC,UAChDzE,EAAOC,QAAUo/C,EAAU,SAAiBzzC,GAC1C,cAAcA,GAGhB5L,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,IAExExhN,EAAOC,QAAUo/C,EAAU,SAAiBzzC,GAC1C,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAG3H5L,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,GAGnEniK,EAAQzzC,GAGjB5L,EAAOC,QAAUo/C,EACjBr/C,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCrBxE,WAgBe6hN,IAZf,SAAyCl1W,GAAmD,IAAD,IAAhCm1W,EAAgC,uDAAJ,GAC7EC,EAAuBD,EAAkBplX,cAC/C,wBAAOiQ,QAAP,IAAOA,GAAP,UAAOA,EAAMtlD,IAAI,mBAAjB,aAAO,EAAuBwH,QAAO,SAAC80L,GAAa,IAAD,IAC9C,OAAO,UAAAA,EAAQt8L,IAAI,eAAZ,eAAqBq1C,cAAc7vC,SAASk1Z,MAA5C,UACAp+N,EAAQt8L,IAAI,mBADZ,aACA,EAAyB0J,MAAK,SAAAupH,GAAY,IAAD,MACxC,OAAO,UAAAA,EAAQjzH,IAAI,wBAAZ,eAA8Bq1C,cAAc7vC,SAASk1Z,MAArD,UACFznS,EAAQjzH,IAAI,qBADV,aACF,EAA2Bq1C,cAAc7vC,SAASk1Z,MADhD,UAEFznS,EAAQjzH,IAAI,sBAFV,aAEF,EAA4Bq1C,cAAc7vC,SAASk1Z,kBALpE,QAOMxmZ,mB,8cCkBJu3G,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C8gF,IAAK,CACD32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACPvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG9CtxE,YAAa,CACTv2J,aAAc,WACdc,WAAY,SACZpM,SAAU,UAEd9xG,KAAM,CACFmwH,YAAa,OACb1jB,gBAAiB,eAqGV05S,EAlGI,SAAC,GAQL,IAPX3wI,EAOU,EAPVA,QACAlpK,EAMU,EANVA,QAMU,IALV85S,kBAKU,aAJV14S,kBAIU,SAHV24S,EAGU,EAHVA,eACAC,EAEU,EAFVA,SAEU,IADVC,uBACU,MADQ,GACR,EACJ5lV,EAAUs2C,IACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACFi1K,EAAQ+sF,EAAQhqR,IAAI,SAC1B,OACI,gCACI,eAAC80E,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ8iF,IACnBn3C,QAASA,EAJb,UAMI,cAACwtQ,EAAA,EAAD,CAAOpsR,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,QAASwa,QAAS/V,IAC/D,sBAAK3K,MAAO,CAAEj/B,SAAU,GAAxB,UACI,eAACxD,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHT,UAKI,cAAC3B,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,KAAtB,SACI,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgzM,YAAa5wK,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAnG,SACK4oK,EAAQhqR,IAAI,YAGrB,cAAC80E,EAAA,EAAD,UACI,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAjE,SACKp5F,EAAE,2CAIf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UACI,cAAC0/B,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE6L,SAAU,WAA/C,mBACQp7F,EAAE,uCADV,aACqDw4S,YAAWx2C,EAAQhqR,IAAI,kBAAoB,SAG5F46Z,EAAa,cAACjkS,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,SAACz8G,GACxCA,EAAE87G,kBACF06S,GAAe,IAFV,SAIL,cAAC,IAAD,MAEJ,cAAClkS,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,SAACz8G,GAC/BA,EAAE87G,kBACF06S,GAAe,IAFnB,SAII,cAAC,IAAD,eAMvBD,EAAa,eAAC1mZ,EAAA,EAAD,CAAMmhE,UAAWF,EAAQ3gE,KAAzB,UACV,eAAC05M,EAAA,EAAD,CAAUptG,QAAS,kBAAMg6S,EAAS,GAAIC,EAAgBv1Z,SAAS,KAA/D,UACI,cAACw1Z,EAAA,EAAD,UACI,cAAC3iS,EAAA,EAAD,CACIn2B,MAAM,UACN+1B,QAAS8iS,EAAgBv1Z,SAAS,OAG1C,cAACy1Z,EAAA,EAAD,CAAcC,uBAAwB,CAAEvlT,QAAS,WAAayL,QAASp5F,EAAE,uDAGzEi1K,EAAMh4L,KAAI,SAACqgD,EAAMltD,GACb,IAAMqhG,EAASn0C,EAAKtlD,IAAI,MAClBm7Z,EAAW71W,EAAKtlD,IAAI,QACpBi4H,EAAU8iS,EAAgBv1Z,SAASpN,EAAQ,GACjD,OACI,eAAC81N,EAAA,EAAD,CAAuBptG,QAAS,kBAAMg6S,EAAS1ia,EAAQ,GAAI6/H,IAA3D,UACI,cAAC+iS,EAAA,EAAD,UACI,cAAC3iS,EAAA,EAAD,CACIn2B,MAAM,UACN+1B,QAASA,MAGjB,cAACgjS,EAAA,EAAD,CAAc1jT,MAAO,CAAEkG,YAAa,QAAU2D,QAAS+5S,EAAUD,uBAAwB,CAAEvlT,QAAS,QAAS4B,MAAO,CAAErV,MAAO,OAAS6+N,UAAW,gBACjJ,cAACk6F,EAAA,EAAD,CACI75S,QAASp5F,EAAE,yCACXkzY,uBAAwB,CAAEvlT,QAAS,UAAW4B,MAAO,CAAErV,MAAO,SAC9DqV,MAAO,CAAEj/B,SAAU,EAAG2sO,WAAY,OAX3BxrN,SAiBrB,S,6FC5FhBgyB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CshD,gBAAiB,CACb1gD,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bc,QAAS,QAEb7iE,KAAM,CACFujE,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bi3C,OAAQ,QACRj2C,MAAO,OACPI,eAAgB,SAChBzC,WAAY,cAGdkmV,GAAgB,CAClB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACLh3J,IAAK,IAGPm+X,GAAmB,SAACx/F,GAAD,MAAsB,CAC3C,IAAO,CACH,CACI,KAAQ,CACJ,KAAQA,IAGhB,CACI,KAAQ,CACJ,IAAM,OAyVPy/F,GApVO,SAAC,GAEhB,IAAD,EADF94F,EACE,EADFA,SAEM54C,EAA0Bj8O,sBAAYg7K,YAA4B,KAClEjjK,EAAW/X,sBAAYq3F,gBAC7B,EAAoCrqF,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAA4C5rE,mBAAS,IAArD,mBAAO4gX,EAAP,KAAuBC,EAAvB,KACA,EAAkD7gX,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACA,EAAkD/gX,mBAAS,MAA3D,mBAAOgvV,EAAP,KAA0BgyB,EAA1B,KACA,EAAkDhhX,mBAAS,MAA3D,mBAAOihX,EAAP,KAA0BC,EAA1B,KACM1mV,EAAUs2C,KACVt0C,GAAQwjD,cACN3yG,GAAM+xB,YAAe,gBAArB/xB,EACF4e,GAAW2F,wBACXyyE,GAAYrxE,sBAAYs5K,eACxBhwK,GAAOtJ,sBAAYq5K,eACzB,GAA0Er5K,sBAAY8pF,YAA+BwyJ,KAA7GC,GAAR,GAAQA,YAAa4xI,GAArB,GAAqBA,gBAAiBxyI,GAAtC,GAAsCA,WAAYa,GAAlD,GAAkDA,oBAC5CzoL,GAAS/zD,sBAAY4wJ,eACrBz1I,GAAgBkgK,eAChB+yM,GAAYr6T,GAAO1hG,IAAI,aACvBg8Z,GAAkB70X,kBAAO,GAczB80X,GAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,IAbtB,SAACA,GACzBmgG,GAAgBj4X,SAAU,EAC1B6C,GAAS,IAAI6pE,KAA0B,CACnCxoE,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,MAU9BqxE,CAAoBrxE,KACrB,OAAM,IAYHqgG,GAAc,SAAClyI,EAASmyI,EAAWC,GACrC,IAAMjqT,EAAS,OAAG63K,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,MACzBmoR,EAAW,OAAG6B,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,QAC3B0yE,EAAO,CACT2pV,6BAA6B,EAC7BC,SAAS,GAAD,mBACLH,EAAY,CAAC,CACZL,mBACAxyI,cACAY,eACAqyI,qBAAsBpqT,EACtBqqT,gBAAiB,WACjBC,oBAAoB,EACpBC,YAAa10Y,GAAE,8CACd,IATG,YAULo0Y,EAAcn3Z,KAAI,SAACqgD,GAClB,MAAQ,CACJw2W,mBACAxyI,cACAY,eACAyyI,kBAAmBr3W,EAAKtlD,IAAI,MAC5Bw8Z,gBAAiB,kBAI7B51X,GAAS,IAAImqD,IAAW,CACpBre,OACA6wP,UAAW,SAACq5F,GACR,IAAMjmB,EAAW,uCACV7tV,MACAqhO,IAA4C,IAFlC,IAGbqyI,gBAAiB,UACjBv2H,cAAe9zL,EACf0qT,gBAAiB10I,EACjBg0I,cAKJ,GAHAv1X,GAAS,IAAIwvD,IAAwBwmU,IACrCl6T,IAAmB9rE,kBAAgBkmY,OAAQnmB,GAC3Cn0E,IACI98Q,EAAS1lD,IAAI,cAAb,UAAgC+vB,sBAAhC,YAAuDoiF,GAAa,CACpE,GAAIgqT,EACAv1X,GAAS,IAAI+sE,KAA8B,CACvCruD,KAAMs3W,EAAS58Z,IAAI,UAEpB,CAEH,IAAM+8Z,EAAe,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAUh1Z,QAAO,SAACutI,EAAK6nR,GAC3C,IAAMC,EAAUD,EAAMh9Z,IAAI,MAC1B,OAAOg9Z,EAAMh9Z,IAAI,YAAY4H,QAAO,SAACiiR,EAAMvtF,GACvC,OAAKstF,EAAwB/sQ,MAAM,CAACogZ,EAAS3gO,EAAQt8L,IAAI,QAGlD6pR,EAFIA,EAAKt9Q,OAAO0wZ,EAAS/oZ,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,YAGvEm1I,KACJ9vH,iBAAO,MAES,OAAf03Y,QAAe,IAAfA,OAAA,EAAAA,EAAiB/ka,MAAO,GACxB4uC,GAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,SAAS,KAGzFrxF,GAAS,IAAIipE,IAAkB,CAAEsC,oBAElCvrE,GAAS,IAAI6oE,IAA6B,CACnCo3G,SAAU3yM,eAAK,CAAC81Q,OAEvBpjP,GAASv+B,YAAK,CACV+/C,SAAS,GAAD,OAAKr4B,sBAAL,YAA4BoiF,GACpClvE,MAAO,CACHy1W,sBAAuBkkB,EAAS//Y,MAAM,CAAC,EAAG,gBA8EjE,OALAulB,qBAAU,YACN,OAAI6U,SAAJ,IAAIA,QAAJ,EAAIA,GAAM5lC,UACNu1B,GAAS,IAAI+pE,KAA8B,CAAEk2G,SAAU3yM,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAE3F,IAEC,qCACI,eAACz+T,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQsjD,gBAArC,UACI,cAAC05L,EAAA,EAAD,CACIiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SAnKU,SAACpzG,GACvBkiH,EAAcliH,EAAE4kB,OAAOtxB,OATvB6ja,EAAkB,IAClBE,GAAqB,GACrBC,EAAqB,MACrBE,EAAqB,MAQE,KAAnBx3Z,EAAE4kB,OAAOtxB,QACTivC,GAAS,IAAIqlE,MACbgwT,GAAgB53Z,EAAE4kB,OAAOtxB,SA+JjBm+G,WAAW,EACXqD,SAAU4iT,GACV90S,YAAaj/F,GAAE,6BACf+wF,WAAY,CACRC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACZ,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,GAAM+pC,QAAQC,KAAK,aAI3D,eAACP,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QArKhC,WACnB46S,GAAqB,IAoKuDnkT,MAAO,CAAE4M,WAAY,UAAWpsC,QAAS,aAA7G,cAA6H/vD,GAAE,uBAEnI,cAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALvB,SAQSwqG,IAAaN,GAAeq9S,GAAY,eAACjnV,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACjC,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACKomT,GAAY/zY,GAAE,oCAAsCg3F,GAAYh3F,GAAE,sCAAwC,OAE/G,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAEzBjrD,GAAK5lC,QAAU,GAAKqtG,EACjB,qBAAKnH,MAAO,CAAE+O,SAAU,OAAQ/uC,MAAO,OAAQghC,UAAW,OAAQsX,UAAW,QAA7E,SACG54E,GAAKhyC,KAAI,SAAC+kR,GACP,OA1Gd,SAACA,GACf,IAAM73K,EAAY63K,EAAQhqR,IAAI,MACxBi9L,EAAQ+sF,EAAQhqR,IAAI,SAC1B,OAAO,cAAC,EAAD,CAEH+6Z,gBAAiBQ,EAAeppT,GAChC2O,QAAS,WACiC,IAAD,EAAjC6oR,IAAsBx3R,GACtBwpT,EAAqBxpT,GACrB0pT,EAAqB1pT,GACC,IAAlB8qF,EAAM5rL,UAAiB,UAACkqZ,EAAeppT,UAAhB,aAAC,EAA2B3sG,SAAS,KAE5Dg2Z,GAAkB,SAACtuJ,GAAD,mBAAC,eACZA,GADW,kBAEb/6J,EAAY+6J,EAAU/6J,GAAV,sBAA2B+6J,EAAU/6J,IAArC,CAAiD,IAAK,CAAC,SAKxE0pT,EADAD,IAAsBzpT,EACD,KAEAA,IAIjCyoT,WAAYgB,IAAsBzpT,EAClC0oT,eAAgB,SAAClja,GAETkka,EADAlka,EACqBw6G,EAEA,OAG7B+P,WAAYynR,IAAsBx3R,EAClC2oT,SAAU,SAAC1ia,EAAO8pH,GACVynR,IAAsBx3R,GACtBwpT,EAAqBxpT,GAIrBqpT,EAFAt5S,EAEkB,SAACgrJ,GAAD,mBAAC,eACZA,GADW,kBAEb/6J,EAAY+6J,EAAU/6J,GAAV,sBAA2B+6J,EAAU/6J,IAArC,CAAiD/5G,IAAS,CAACA,MAI1D,SAAC80Q,GAAD,mBAAC,eACZA,GADW,kBAEb/6J,EAAY+6J,EAAU/6J,GACnB+6J,EAAU/6J,GAAW3qG,QAAO,SAAC2mX,GAAD,OAAmBA,IAAkB/1X,KAAS,QAI1F4xR,QAASA,GAjDJ73K,GAsG0B+qT,CAAUlzI,QAGtBgyI,GAAgBj4X,QAAU,eAAC,IAAMyiP,SAAP,WACzB,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,GAAE,wCAEP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,GAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACKp7F,GAAE,0CAGP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,GAAE,oDAI3B,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEx/B,QAAS,QAA5D,UACI,cAAC6oC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAjE,SAAwEz1F,GAAE,sBAC1E,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN4e,QAvEc,WAAO,IAAD,EAC1BkpK,EAAO,OAAI/yO,SAAJ,IAAIA,QAAJ,EAAIA,GAAMr5B,MAAK,SAACo6X,GAAD,OAAcA,EAASh4Y,IAAI,QAAU2pY,KAC3DwyB,EAAS,UAAGZ,EAAe5xB,UAAlB,aAAG,EAAmCnkY,SAAS,GACxDy3L,EAAK,OAAG+sF,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,SACrBo8Z,EAAa,OAAGn/N,QAAH,IAAGA,OAAH,EAAGA,EAAOz1L,QAAO,SAAC89C,EAAMltD,GAAW,IAAD,EACjD,iBAAOmja,EAAe5xB,UAAtB,aAAO,EAAmCnkY,SAASpN,EAAQ,MAE/D8ja,GAAYlyI,EAASmyI,EAAWC,IAiEpBjjT,SAAgC,OAAtBwwR,MAAgC,UAAA4xB,EAAe5xB,UAAf,eAAmC7rY,QAAS,IAAMi+Z,GAC5FxkT,MAAO,CAAEx/B,QAAS,UALtB,SAOK/vD,GAAE,uBAGX,cAACm1Y,GAAA,EAAD,CACIzsC,WAAY51X,cAAI,CAACutW,KAAuC+pB,0BACxDgrC,OAAQ,SAACx2T,GAAD,OAAU,WACd80T,EAAqB90T,KAEzB+pR,eAAe,EACf/pR,KAAM60T,EACN76R,QAAS,WACL86R,GAAqB,IAEzBnjG,SAAU,YAA2C,IAAD,EAAvCnxT,EAAuC,EAAvCA,OAAmB0pX,GAAoB,EAA/B3+Q,UAA+B,EAApB2+Q,eACtBusC,EAAgB,iBAAGj2Z,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,2BAAf,QAAsC,GACtDs9Z,EAAgB,GACtBD,EAAiB10Z,SAAQ,YAAgC,IAA7B8wF,EAA4B,EAA5BA,OAAYs8B,EAAgB,EAApB74F,GAC5BogY,EAAc7jU,GACd6jU,EAAc7jU,GAAQpxF,KAAK0tH,GAE3BunS,EAAc7jU,GAAU,CAACs8B,MAGjC,IAAMwnS,EAA+E,GAErF,IAAK,IAAMh9Z,KAAO+8Z,EAAe,CAC7B,IAAMrpM,EAAWqpM,EAAc/8Z,GAC/Bg9Z,EAAsBl1Z,KAAK,CACvB60B,GAAI2a,SAASt3C,EAAK,IAClB0zN,SAAUA,EAAShvN,KAAI,SAAC8wH,GAAD,MAAgB,CAAE74F,GAAI64F,QAGrD,IAAM22Q,EAA4B2wB,EAAiBv/Z,OAAS,EACtDylU,EAAY,SAACi6F,EAAmElvM,GAElF,IAAIiqL,EADJmjB,GAAqB,GAOrB,IAAM+B,GAJFllB,EADArkY,OAAKF,OAAOwpZ,GACCA,EAAan+Y,QAEbm+Y,GAEex9Z,IAAI,MACpC4mC,GAAU,IAAIqoE,IAA2B5pF,iBAAO,CAACkzX,MAE7C3xW,GADA0nL,EACU,IAAIr9G,IAAwB,CAAEkB,UAAWsrT,EAAcnvM,YAExD,IAAIn/G,KAEbu9R,EACAwvB,GAAY3jB,GAAY,EAAM,IAE9B2jB,GAAY3jB,GAAY,EAAOA,EAAWv4Y,IAAI,WAGhD40Y,EAAW,SAACvnW,GACdzG,GAAS,IAAIqpE,KAAoB,CAAC5iE,SAClCzG,GAAS,IAAI0gE,KAAkC,CAAEksR,OAAO,MAIxD5sV,GAFA8lW,EAES,IAAI79R,IAAgC,CACzCm7K,QAAS8mG,EACTmkB,iBAAkB,CACd,CACI/qH,YAAaqzI,EACbf,gBAAiB,WACjBlzI,WAAY,oBAGpBi6C,YACAqxE,aAIK,IAAIjnS,IAAoB,CAC7Bq8K,QAAS8mG,EACTvtD,YACAqxE,qBChZtBnpR,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C8gF,IAAK,CACD32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACPvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG9C0hE,SAAU,CACNvpS,aAAc,WACdc,WAAY,SACZpM,SAAU,cAkDHo3S,GA/CU,SAAC,GAAwD,IAAtDp4W,EAAqD,EAArDA,KAAMiyD,EAA+C,EAA/CA,MAAOuJ,EAAwC,EAAxCA,QAAwC,IAA/BS,gBAA+B,SACvEpsC,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACR,OACI,eAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ8iF,IACnB1gD,MAAOA,EACPuJ,QAASA,EACTrqC,KAAK,SANT,UAQI,cAAC63S,EAAA,EAAD,CAAOpsR,MAAM,UAAU+1B,QAAS1W,EAAUhK,MAAO,CAAEkG,YAAa,UAChE,sBAAKlG,MAAO,CAAEj/B,SAAU,GAAxB,UACI,eAACxD,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHT,UAKI,cAAC3B,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,KAAtB,SACI,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgmV,SAAU5jT,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAhG,SACK97D,EAAKtlD,IAAI,YAGlB,cAAC80E,EAAA,EAAD,UACI,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAjE,SACKp5F,EAAE,sDAIf,cAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,aACRU,KAAK,SAHT,SAKI,cAAC3B,EAAA,EAAD,UACI,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE6L,SAAU,WAA/C,mBACQp7F,EAAE,4CADV,aAC0Dw4S,YAAWl7Q,EAAKtlD,IAAI,kBAAoB,oB,oBCxBpHyrH,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CshD,gBAAiB,CACb1gD,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bc,QAAS,QAEb4gF,IAAK,CACD32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACPvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG9CjlV,KAAM,CACFujE,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bi3C,OAAQ,QACRj2C,MAAO,OACPI,eAAgB,SAChBzC,WAAY,cAGdkmV,GAAgB,CAClB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACLh3J,IAAK,IAGPm+X,GAAmB,SAACx/F,GAAD,MAAsB,CAC3C,IAAO,CACH,CACI,KAAQ,CACJ,KAAQA,IAGhB,CACI,KAAQ,CACJ,IAAM,IAGd,CACI,UAAa,CACT,GAAM,OAGd,CAAE,oBAAqB,CAAE8hG,IAAK//X,qBAgMvBggY,GA7LI,SAAC,GAEb,IADHp7F,EACE,EADFA,SAEM54C,EAA0Bj8O,sBAAYg7K,YAA4B,KAClEjjK,EAAW/X,sBAAYq3F,gBAC7B,EAAoCrqF,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAAkD5rE,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACMvmV,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACXyyE,EAAYrxE,sBAAYywJ,eACxBnnJ,EAAOtJ,sBAAYwwJ,eACzB,EAA0ExwJ,sBAAY8pF,YAA+BwyJ,KAA7GC,EAAR,EAAQA,YAAa4xI,EAArB,EAAqBA,gBAAiBxyI,EAAtC,EAAsCA,WAAYa,EAAlD,EAAkDA,oBAC5CzoL,EAAS/zD,sBAAY4wJ,eACrBz1I,EAAgBkgK,eAChB+yM,EAAYr6T,EAAO1hG,IAAI,aAC7B,EAAkD26C,mBAAS,MAA3D,mBAAOmkV,EAAP,KAA0B++B,GAA1B,KACM7B,GAAkB70X,kBAAO,GAQzB80X,GAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,IAPzB,SAACA,GACtBmgG,GAAgBj4X,SAAU,EAC1B6C,EAAS,IAAIkyD,KAAkC,CAC3C7wD,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,MAI9BiiG,CAAiBjiG,KAClB,OAAM,IAYHkiG,GAAW,SAACtkU,EAAQ0hU,GAAiC,IAAvBgB,EAAsB,wDACtDv1X,EAAS,IAAImqD,IAAW,CACpB+qU,kBACAxyI,aACAY,cACAyyI,kBAAmBljU,EACnB+iU,gBAAiB,WACjBj5F,UAAW,SAACq5F,GACR,IAAMjmB,EAAW,uCACV7tV,KACAqhO,GAA4C,IAFlC,IAGbqyI,gBAAiB,OACjBv2H,cAAexsM,EACfojU,gBAAiB1B,EACjBgB,cAOJ,GAJAv1X,EAAS,IAAI6sD,KAAc/8D,OAAK4uB,OAChC1e,EAAS,IAAIwvD,IAAwBwmU,IACrCl6T,IAAmB9rE,kBAAgBkmY,OAAQnmB,GAC3Cn0E,IACI98Q,EAAS1lD,IAAI,cAAb,UAAgCiwB,mBAAhC,YAAoDwpE,GAAU,CAE9D,IAAMsjU,EAAe,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAUh1Z,QAAO,SAACutI,EAAK6nR,GAC3C,IAAMC,EAAUD,EAAMh9Z,IAAI,MAC1B,OAAOg9Z,EAAMh9Z,IAAI,YAAY4H,QAAO,SAACiiR,EAAMvtF,GACvC,OAAKstF,EAAwB/sQ,MAAM,CAACogZ,EAAS3gO,EAAQt8L,IAAI,QAGlD6pR,EAFIA,EAAKt9Q,OAAO0wZ,EAAS/oZ,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,YAGvEm1I,KACJ9vH,iBAAO,MAES,OAAf03Y,QAAe,IAAfA,OAAA,EAAAA,EAAiB/ka,MAAO,GACxB4uC,EAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,SAAS,UAIrFrxF,EAAS,IAAIusE,KAAoC,KACjDvsE,EAASv+B,YAAK,GAAD,OAAI4nB,mBAAJ,YAAwBwpE,UA+BrD,OALAr3D,qBAAU,YACN,OAAI6U,QAAJ,IAAIA,OAAJ,EAAIA,EAAM5lC,UACNu1B,EAAS,IAAIoyD,KAA2B,CAAEikG,MAAO/oL,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAErF,IAEC,qCACI,eAACz+T,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQsjD,gBAArC,UACI,cAAC05L,EAAA,EAAD,CACIiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SAvFU,SAACpzG,GACvBkiH,EAAcliH,EAAE4kB,OAAOtxB,OACvBkma,GAAqB,MACE,KAAnBx5Z,EAAE4kB,OAAOtxB,QACTivC,EAAS,IAAIwyD,KACb6iU,GAAgB53Z,EAAE4kB,OAAOtxB,SAmFjBm+G,WAAW,EACXqD,SAAU4iT,EACV90S,YAAaj/F,EAAE,6BACf+wF,WAAY,CACRC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACZ,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQC,KAAK,aAI3D,eAACP,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAzFhC,WACnB46S,GAAqB,IAwFuDnkT,MAAO,CAAE4M,WAAY,UAAWpsC,QAAS,aAA7G,cAA6H/vD,EAAE,uBAEnI,cAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALvB,SAQSwqG,GAAaN,GAAeq9S,EAAY,eAACjnV,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACjC,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACKomT,EAAY/zY,EAAE,oCAAsCg3F,EAAYh3F,EAAE,sCAAwC,OAE/G,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAEzBjrD,EAAK5lC,QAAU,GAAKqtG,EACjB,cAAC,KAAD,CACE8O,OAAQ,IACRwwS,UAAW/mX,EAAKj/C,KAChBima,SAAU,GACV1mV,MAAO2mV,GAAa,GAJtB,SA3DR,SAAC,GAAiC,IAAxBC,EAAuB,EAA9B/la,MAAkBm/G,EAAY,EAAZA,MAC7BjyD,EAAOrO,EAAKj3C,IAAIm+Z,GACP74W,EAAKtlD,IAAI,MACPslD,EAAKtlD,IAAI,QAC1B,OAAO,cAAC,GAAD,CACH5H,MAAO+la,EACP5mT,MAAOA,EACPuJ,QAAS,WACL+8S,GAAqBM,IAGzB58S,SAAU48S,IAAcr/B,EACxBx5U,KAAMA,OAuDY02W,GAAgBj4X,QAAU,eAAC,IAAMyiP,SAAP,WACxB,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,EAAE,wCAEP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACKp7F,EAAE,0CAGP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,EAAE,uDAI3B,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEx/B,QAAS,QAA5D,UACI,cAAC6oC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAjE,SAAwEz1F,EAAE,sBAC1E,cAAC44F,EAAA,EAAD,CAAQjL,QAAQ,YAAYzT,MAAM,UAAU4e,QAnE5B,WACxB,IAAMx7D,EAAOrO,EAAKj3C,IAAI8+X,GAChBrlS,EAASn0C,EAAKtlD,IAAI,MAClBm7Z,EAAW71W,EAAKtlD,IAAI,QAC1B+9Z,GAAStkU,EAAQ0hU,IA+DiEhiT,UAAWv7G,OAAOs5L,cAAc4nM,IAAsBi9B,EAAWxkT,MAAO,CAAEx/B,QAAS,UAA7J,SAAyK/vD,EAAE,uBAE/K,cAACo2Y,GAAA,EAAD,CACIx3T,KAAM60T,EACNljG,SAAU,SAACnxT,EAAQi3Z,EAA0B1tC,GACzC/pV,EAAS,IAAIwuD,IAAiB,CAC1B+c,UAAWksT,EACX/4W,KAAMl+C,EACNk3Z,WAAY3tC,EACZptD,UAAW,SAAC9pO,EAAQ0hU,GAChB4C,GAAStkU,EAAQ0hU,GAAU,GAC3BO,GAAqB,QAIjC0B,OAAQ,SAACx2T,GAAD,OAAU,WACd80T,EAAqB90T,W,UCvOnC6kB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CshD,gBAAiB,CACb1gD,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bc,QAAS,QAEb7iE,KAAM,CACFujE,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bi3C,OAAQ,QACRj2C,MAAO,OACPI,eAAgB,SAChBzC,WAAY,cAGdkmV,GAAgB,CAClB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACLh3J,IAAK,IAGPm+X,GAAmB,SAACx/F,GACtB,IAAMr0T,EAAc,CAChB,IAAO,CACH,CACI,KAAQ,CACJ,IAAM,MAYtB,OAPIq0T,GACAr0T,EAAOk2B,IAAIr1B,KAAK,CACZ,KAAQ,CACJ,KAAQwzT,KAIbr0T,GA6UI+2Z,GA3UM,SAAC,GAEf,IAAD,EADF/7F,EACE,EADFA,SAEM54C,EAA0Bj8O,sBAAYg7K,YAA4B,KAClEjjK,EAAW/X,sBAAYq3F,gBAC7B,EAAoCrqF,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAA4C5rE,mBAAS,IAArD,mBAAO4gX,EAAP,KAAuBC,EAAvB,KACA,EAAkD7gX,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACA,EAAgD/gX,mBAAS,MAAzD,mBAAO6jX,EAAP,KAAyBC,EAAzB,KACA,EAAgD9jX,mBAAS,MAAzD,mBAAO+jX,EAAP,KAAyBC,EAAzB,KACMxpV,EAAUs2C,KACVt0C,GAAQwjD,cACN3yG,GAAM+xB,YAAe,gBAArB/xB,EACF4e,GAAW2F,wBACXyyE,GAAYrxE,sBAAY+5K,eACxBzwK,GAAOtJ,sBAAY65K,eACzB,GAA0E75K,sBAAY8pF,YAA+BwyJ,KAA7GC,GAAR,GAAQA,YAAa4xI,GAArB,GAAqBA,gBAAiBxyI,GAAtC,GAAsCA,WAAYa,GAAlD,GAAkDA,oBAC5CzoL,GAAS/zD,sBAAY4wJ,eACrBz1I,GAAgBkgK,eAChB+yM,GAAYr6T,GAAO1hG,IAAI,aACvBg8Z,GAAkB70X,kBAAO,GAczB80X,GAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,IAbxB,SAACA,GACvBmgG,GAAgBj4X,SAAU,EAC1B6C,GAAS,IAAI2iE,KAA+B,CACxCthE,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,MAU9B+iG,CAAkB/iG,KACnB,OAAM,IAYHgjG,GAAa,SAACnnS,GAA8C,IAAtCykS,EAAqC,wDAAlBC,EAAkB,uCACvDx0I,EAAQ,OAAGlwJ,QAAH,IAAGA,OAAH,EAAGA,EAAQ13H,IAAI,MACvB8nR,EAAU,OAAGpwJ,QAAH,IAAGA,OAAH,EAAGA,EAAQ13H,IAAI,QACzB0yE,EAAO,CACT2pV,6BAA6B,EAC7BC,SAAS,GAAD,mBACDH,EAAY,CAAC,CACZL,mBACAxyI,cACAY,eACAqyI,qBAAsB30I,EACtB40I,gBAAiB,SACjBC,oBAAoB,EACpBC,YAAa10Y,GAAE,8CACd,IATD,YAUDo0Y,EAAcn3Z,KAAI,SAACqgD,GAClB,MAAQ,CACJw2W,mBACAxyI,cACAY,eACAyyI,kBAAmBr3W,EAAKtlD,IAAI,MAC5Bw8Z,gBAAiB,gBAIjC51X,GAAS,IAAImqD,IAAW,CACpBre,OACA6wP,UAAW,SAACq5F,GACR,IAAMjmB,EAAW,uCACV7tV,MACAqhO,IAA4C,IAFlC,IAGbqyI,gBAAiB,SACjBv2H,cAAere,EACfi1I,gBAAiB/0I,EACjBq0I,cAKJ,GAHAv1X,GAAS,IAAI+sD,IAA8BipU,IAC3Cl6T,IAAmB9rE,kBAAgBkmY,OAAQnmB,GAC3Cn0E,IACI98Q,EAAS1lD,IAAI,cAAb,UAAgCkwB,qBAAhC,YAAsD03P,GAAY,CAClE,GAAIu0I,EACAv1X,GAAS,IAAI+sE,KAA8B,CACvCruD,KAAMs3W,EAAS58Z,IAAI,UAEpB,CAEH,IAAM+8Z,EAAe,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAUh1Z,QAAO,SAACutI,EAAK6nR,GAC3C,IAAMC,EAAUD,EAAMh9Z,IAAI,MAC1B,OAAOg9Z,EAAMh9Z,IAAI,YAAY4H,QAAO,SAACiiR,EAAMvtF,GACvC,OAAKstF,EAAwB/sQ,MAAM,CAACogZ,EAAS3gO,EAAQt8L,IAAI,QAGlD6pR,EAFIA,EAAKt9Q,OAAO0wZ,EAAS/oZ,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,YAGvEm1I,KACJ9vH,iBAAO,MAES,OAAf03Y,QAAe,IAAfA,OAAA,EAAAA,EAAiB/ka,MAAO,GACxB4uC,GAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,SAAS,KAGzFrxF,GAAS,IAAIqkE,IAA2B,CAAE/tE,GAAI0qP,UAE9ChhP,GAAS,IAAI+oE,IAA4B,CACrCu4G,QAASh0M,eAAK,CAACwjH,OAEnB9wF,GAASv+B,YAAK,GAAD,OAAI6nB,qBAAJ,YAA0B03P,UA4EvD,OALAxlP,qBAAU,YACN,OAAI6U,SAAJ,IAAIA,QAAJ,EAAIA,GAAM5lC,UACNu1B,GAAS,IAAI+iE,KAAwC,CAAEu+G,QAASh0M,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAEpG,IAEC,qCACI,eAACz+T,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQsjD,gBAArC,UACI,cAAC05L,EAAA,EAAD,CACIiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SA9JU,SAACpzG,GACvBkiH,EAAcliH,EAAE4kB,OAAOtxB,OATvB6ja,EAAkB,IAClBE,GAAqB,GACrB+C,EAAoB,MACpBE,EAAoB,MAQG,KAAnBt6Z,EAAE4kB,OAAOtxB,QACTivC,GAAS,IAAIqiE,MACbgzT,GAAgB53Z,EAAE4kB,OAAOtxB,SA0JjBm+G,WAAW,EACXqD,SAAU4iT,GACV90S,YAAaj/F,GAAE,6BACf+wF,WAAY,CACRC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACZ,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,GAAM+pC,QAAQC,KAAK,aAI3D,eAACP,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAhKhC,WACnB46S,GAAqB,IA+JuDnkT,MAAO,CAAE4M,WAAY,UAAWpsC,QAAS,aAA7G,cAA6H/vD,GAAE,uBAEnI,cAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALvB,SAQSwqG,IAAaN,GAAeq9S,GAAY,eAACjnV,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACjC,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACKomT,GAAY/zY,GAAE,oCAAsCg3F,GAAYh3F,GAAE,sCAAwC,OAE/G,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAEzBjrD,GAAK5lC,QAAU,GAAKqtG,EACjB,qBAAKnH,MAAO,CAAE+O,SAAU,OAAQ/uC,MAAO,OAAQghC,UAAW,OAAQsX,UAAW,QAA7E,SACG54E,GAAKhyC,KAAI,SAACyyH,GACP,OA1Gd,SAACA,GACf,IAAMkwJ,EAAWlwJ,EAAO13H,IAAI,MACtBi9L,EAAQvlE,EAAO13H,IAAI,SACzB,OAAO,cAAC,EAAD,CAEH+6Z,gBAAiBQ,EAAe3zI,GAChC9mK,QAAS,WAC+B,IAAD,EAA/B09S,IAAqB52I,GACrB62I,EAAoB72I,GACpB+2I,EAAoB/2I,GACE,IAAlB3qF,EAAM5rL,UAAiB,UAACkqZ,EAAe3zI,UAAhB,aAAC,EAA0BpiR,SAAS,KAE3Dg2Z,GAAkB,SAACtuJ,GAAD,mBAAC,eACZA,GADW,kBAEb0a,EAAW1a,EAAU0a,GAAV,sBAA0B1a,EAAU0a,IAApC,CAA+C,IAAK,CAAC,SAKrE+2I,EADAD,IAAqB92I,EACD,KAEAA,IAIhCgzI,WAAY8D,IAAqB92I,EACjCizI,eAAgB,SAAClja,GAETgna,EADAhna,EACoBiwR,EAEA,OAG5B1lK,WAAYs8S,IAAqB52I,EACjCkzI,SAAU,SAAC1ia,EAAO8pH,GACVs8S,IAAqB52I,GACrB62I,EAAoB72I,GAIpB4zI,EAFAt5S,EAEkB,SAACgrJ,GAAD,mBAAC,eACZA,GADW,kBAEb0a,EAAW1a,EAAU0a,GAAV,sBAA0B1a,EAAU0a,IAApC,CAA+CxvR,IAAS,CAACA,MAIvD,SAAC80Q,GAAD,mBAAC,eACZA,GADW,kBAEb0a,EAAW1a,EAAU0a,GAClB1a,EAAU0a,GAAUpgR,QAAO,SAAC2mX,GAAD,OAAmBA,IAAkB/1X,KAAS,QAIzF4xR,QAAStyJ,GAjDJkwJ,GAsG0Bs1I,CAAUxlS,QAGvBskS,GAAgBj4X,QAAU,eAAC,IAAMyiP,SAAP,WACxB,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,GAAE,wCAEP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,GAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACKp7F,GAAE,0CAGP,cAACytF,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACK3tF,GAAE,oDAI3B,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEx/B,QAAS,QAA5D,UACI,cAAC6oC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAjE,SAAwEz1F,GAAE,sBAC1E,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN4e,QAvEc,WAAO,IAAD,EAC1B4W,EAAM,OAAGzgF,SAAH,IAAGA,QAAH,EAAGA,GAAMr5B,MAAK,SAACs3X,GAAD,OAAaA,EAAQl1Y,IAAI,QAAUw+Z,KACvDrC,EAAS,UAAGZ,EAAeiD,UAAlB,aAAG,EAAkCh5Z,SAAS,GACvDy3L,EAAK,OAAGvlE,QAAH,IAAGA,OAAH,EAAGA,EAAQ13H,IAAI,SACpBo8Z,EAAa,OAAGn/N,QAAH,IAAGA,OAAH,EAAGA,EAAOz1L,QAAO,SAAC89C,EAAMltD,GAAW,IAAD,EACjD,iBAAOmja,EAAeiD,UAAtB,aAAO,EAAkCh5Z,SAASpN,EAAQ,MAE9Dyma,GAAWnnS,EAAQykS,EAAWC,IAiElBjjT,SAA+B,OAArBqlT,MAA+B,UAAAjD,EAAeiD,UAAf,eAAkC1ga,QAAS,IAAMi+Z,GAC1FxkT,MAAO,CAAEx/B,QAAS,UALtB,SAMK/vD,GAAE,uBAGX,cAAC82Y,GAAA,EAAD,CACIl4T,KAAM60T,EACNljG,SAAU,SAACnxT,EAAQ0nX,GAA2B,IAAD,EACnCrkX,EAAI,OAAGrD,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,QACnB+vN,EAAa,OAAG3oN,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,iBAC5B++Z,EAAkB,OAAG33Z,QAAH,IAAGA,OAAH,EAAGA,EAAQyV,MAAM,CAAC,mBAAoB,EAAG,eAC3DwgZ,EAAgB,iBAAGj2Z,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,2BAAf,QAAsC,GACtDs9Z,EAAgB,GACtBD,EAAiB10Z,SAAQ,YAAgC,IAA7B8wF,EAA4B,EAA5BA,OAAYs8B,EAAgB,EAApB74F,GAC5BogY,EAAc7jU,GACd6jU,EAAc7jU,GAAQpxF,KAAK0tH,GAE3BunS,EAAc7jU,GAAU,CAACs8B,MAGjC,IAAMwnS,EAAwB,GAE9B,IAAK,IAAMh9Z,KAAO+8Z,EAAe,CAC7B,IAAMrpM,EAAWqpM,EAAc/8Z,GAC/Bg9Z,EAAsBl1Z,KAAK,CACvB60B,GAAI38B,EACJ0zN,SAAUA,EAAShvN,KAAI,SAAC8wH,GAAD,MAAgB,CAAE74F,GAAI64F,QAGrD,IAAM5yF,EAAU,CACZixW,iBAAkB2qB,EAClBrnS,OAAQ,CACJxP,SAAQ,OAAE9gH,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtB0lD,SAAQ,OAAEt+C,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtByK,OACAslN,kBAGFivM,EAA2B3B,EAAiBv/Z,OAAS,EAErDylU,EAAY,SAACpoR,GAAD,OAAa,SAAC+sK,GAC5B,IAAM+2M,EAAY/2M,EAAQloN,IAAI,GAC9B07Z,GAAqB,GACjBsD,EAEAH,GAAWI,GAAU,EAAM,IAG3BJ,GAAWI,GAAU,EAAOA,EAAUj/Z,IAAI,UAE9Cm7C,MAEJ,OAAI6jX,GACA77X,EAAQ8xW,iBAAmB,CAAEh4M,MAAOsgO,GACpCp6X,EAAQ6rV,YAAcF,EACf,IAAI5zU,SAAQ,SAACC,EAASi3B,GACzBxrC,GAAS,IAAIikE,IAAJ,2BACF1nE,GADE,IAELogS,UAAWA,EAAUpoR,GACrBy5V,SAAU,kBAAMxiU,aAIjB,IAAIl3B,SAAQ,SAACC,EAAQi3B,GACxBxrC,GAAS,IAAI+jE,IAA0B,CACnC+sB,OAAQ,CACJjtH,OACAi7C,SAAQ,OAAEt+C,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtBkoH,SAAQ,OAAE9gH,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtB+vN,iBAEJwzG,UAAWA,EAAUpoR,GACrBy5V,SAAU,kBAAMxiU,YAKhCwuD,QAAS,WACL86R,GAAqB,U,SC/X5BwC,GAAa,IACpBzyS,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C62C,MAAO,CACHR,OAAQ,OACRj2C,MAAM,GAAD,OAAK2mV,GAAL,OAETz9B,WAAY,CACR1oT,QAASZ,EAAMZ,QAAQ,IAE3B2oV,WAAY,CACRnnV,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,GAAnB,cAA2BY,EAAMZ,QAAQ,GAAzC,WAGF0zM,GAAa,aAsEXk1I,IApEG,SAAC,GAAoD,IAAD,IAAjDC,8BAAiD,MAAxB,UAAwB,EAC5DjqV,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX8yX,EAAuB1xX,sBAAYoX,iBAEzC,EAA8CpK,mBAA0BykX,GAAxE,mBAAO5C,EAAP,KAAwB8C,EAAxB,KAEA5+X,IAAM0B,WAAU,WACTi9X,GAA4C,WAApB7C,GACzB8C,EAAmB,aAEtB,CAACD,EAAsB7C,IAE1B,IAGM+C,EAAa,WACf34X,EAAS,IAAI0J,IAA6B,CACtCpT,GAAI+sP,GACJrjL,MAAM,KAEVhgE,EAAS,IAAI4J,IAA+B,CACxCtT,GAAI+sP,GACJ9jP,MAAO,OAOf,OAHA/D,qBAAU,WACN,OAAOm9X,IACR,IAEC,mCACI,cAAC,IAAD,CACIh0S,SAAU0+J,GACV1xM,UAAU,EAFd,SAII,eAACu1C,EAAA,EAAD,CAAOz4C,UAAWF,EAAQ64C,MAA1B,UACI,cAACvY,EAAA,EAAD,CACIE,QAAQ,KACRtgC,UAAWF,EAAQsrT,WAFvB,SAIKz4W,EAAE,2BAEP,eAACw3Y,EAAA,EAAD,CACIvnQ,KAAK,EACLtgK,MAAO6ka,EACP/xZ,KAAK,0BACLgtG,SAlCC,SAAC2rB,GAClBk8R,EAAqBl8R,EAAMn6G,OAA4BtxB,QAkCvC09E,UAAWF,EAAQ+pV,WALvB,UAOI,cAAClrG,EAAA,EAAD,CAAkBr8T,MAAM,UAAU6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,yBAC/E,cAACgsS,EAAA,EAAD,CAAkBr8T,MAAM,gBAAgB6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,2BACrF,cAACk+F,EAAA,EAAD,CAASC,MAAOk5S,EAAuB,GAAKr3Y,EAAE,0CAA9C,SACI,+BACI,cAACgsS,EAAA,EAAD,CAAkBr8T,MAAM,SAAS6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,sBAAuBmxF,UAAWkmT,WAIvG,YAApB7C,EAAgC,cAAC,GAAD,CAAeh6F,SAAU+8F,IAAiB,KACtD,kBAApB/C,EAAsC,cAAC,GAAD,CAAYh6F,SAAU+8F,IAAiB,KACzD,WAApB/C,EAA+B,cAAC,GAAD,CAAch6F,SAAU+8F,IAAiB,c,6BChGtF,SAASE,EAAsB9na,GAAsC,IAA1BqmB,EAAyB,uDAAL,IAC9DyG,EAAM9sB,EAAMuF,WACZwia,EAAWj7Y,EAAIhI,QAAQ,KACvBkjZ,GAAwB,IAAdD,EAAkBj7Y,EAAMA,EAAI1Y,MAAM,EAAG2zZ,GAC/CE,GAAwB,IAAdF,EAAkB,GAAKj7Y,EAAI1Y,MAAM2zZ,GACjD,OAAOC,EAAQ9qV,QAAQ,wBAAyB72D,GAAa4hZ,EAT/D,sGAwBA,IAAMC,EAAyB,CAAC,IAAK,IAAK,IAAK,KAExC,SAASC,EAAsB18R,IACe,IAA/Cy8R,EAAuBpjZ,QAAQ2mH,EAAM7iI,MACvC6iI,EAAM/F,iBAIH,SAASiqP,EAAkB3vX,EAAe8vX,GAC/C,IAAK9vX,GAAS0gD,MAAMz6C,OAAOjG,IACzB,OAAOA,EAGT,IAAM+na,EAAW/na,EAAM8kB,QAAQ,KAC/B,OAAkB,IAAdijZ,EACK/na,EAEJ8vX,EAGE9vX,EAAMoU,MAAM,EAAG2zZ,EAAW,EAAIj4C,GAF5B9vX,EAAMoU,MAAM,EAAG2zZ,K,sJCpBb5jX,EAAsB,OACtBq5U,EAA6B,4CAiC7B4qC,EAA2B,SAAC9mS,EAAqC98H,GAAkD,IAAD,EACzH6ja,EAAkB,EAClBC,EAAqB,EACrBC,EAAuB,EAsD3B,MAAO,CAAEC,eArDW,OAAGlnS,QAAH,IAAGA,OAAH,EAAGA,EAAerxH,QAAO,SAACutI,EAAKy2O,EAAUxzX,GAC3D,OAAO+8I,EAAIloI,eAAc,SAACywQ,GACxB,IAAMzqJ,EAAU24P,EAAS5rX,IAAI7D,GACvB+4H,EAAYjC,EAAQjzH,IAAI,MACxBoga,EAAcx0C,EAAS5rX,IAAT,UAAgB7D,EAAhB,SACdg5H,EAAgBlC,EAAQjzH,IAAI,iBAC5Bqga,EAAYptS,EAAQjzH,IAAI,SACxB68B,EAAeo2F,EAAQjzH,IAAI,gBAEjC09Q,EAAInxQ,OAAJ,UAAcpQ,EAAd,OAAwB,SAACqY,GAAD,OAAUA,EAAKnM,KAAK6sH,MAC5CwoJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,kBAAmC,SAACqY,GAAD,OAAUA,EAAKnM,KAAK8sH,MAKvD,IAAMmrS,EAAe5iJ,EAAI7gQ,MAAM,CAAC,eAAgBwjZ,IAC5CC,EACF5iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,cAA+B,SAACqY,GAAD,OAAUA,EAAKnM,KAAKi4Z,OAEnD5iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,cAA+B,SAACqY,GAAD,OAAUA,EAAKnM,KAAK23Z,MACnDtiJ,EAAIvxQ,MAAM,CAAC,eAAgBk0Z,GAAYL,GACvCA,GAAoC,GAGtC,IAAMO,EAAkB7iJ,EAAI7gQ,MAAM,CAAC,kBAAmBggB,IAClD0jY,EACF7iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,iBAAkC,SAACqY,GAAD,OAAUA,EAAKnM,KAAKk4Z,OAEtD7iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,iBAAkC,SAACqY,GAAD,OAAUA,EAAKnM,KAAK43Z,MACtDviJ,EAAIvxQ,MAAM,CAAC,kBAAmB0wB,GAAeojY,GAC7CA,GAA0C,GAG5C,IAAMO,EAAgB9iJ,EAAI7gQ,MAAM,CAAC,gBAAiBujZ,IAC9CI,EACF9iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,SAA0B,SAACqY,GAAD,OAAUA,EAAKnM,KAAKm4Z,OAE9C9iJ,EAAInxQ,OAAJ,UAAcpQ,EAAd,SAA0B,SAACqY,GAAD,OAAUA,EAAKnM,KAAK63Z,MAC9CxiJ,EAAIvxQ,MAAM,CAAC,GAAD,OAAIhQ,EAAJ,WAAmBika,GAAcF,GAC3CA,GAA8C,QAGjD76Y,kBAAM,6BACHlpB,EADG,MACQ,IADR,wBAEHA,EAFG,QAEU,IAFV,wBAGHA,EAHG,iBAGmB,IAHnB,wBAIHA,EAJG,aAIe,IAJf,wBAKHA,EALG,gBAKkB,IALlB,6BAMO,IANP,gCAOU,IAPV,wBAQHA,EARG,WAQa,IARb,KAWgBska,cAAe,M,6BCjH1C,oEAAO,IAAMziE,EAAmB,CAC9B,MAAS,CACP,WAAc,KACd,WAAc,MACd,MAAS,UAEX,MAAS,CACP,WAAc,KACd,WAAc,MACd,MAAS,WAEX,MAAS,CACP,WAAc,KACd,WAAc,MACd,MAAS,SAEX,MAAS,CACP,WAAc,KACd,WAAc,MACd,MAAS,QAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,QAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,SAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,SAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,oCAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,4BAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,cAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,QAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,SAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,wBAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,SAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,SAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,cAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,aAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,0BAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,aAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,UAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,YAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,aAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,aAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,WAEX,OAAU,CACR,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kCAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,+BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,qCAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,mBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,yBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,qBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,yBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,0BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,6BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gDAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,sBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,uBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,yBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,uBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,4BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,0BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oCAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,aAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,oBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,YAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,qBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,SAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,4BAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,QAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,uBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,wCAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,kBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,iBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,yBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,UAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,cAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,gBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,WAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,qCAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,eAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,wBAEX,QAAW,CACT,WAAc,KACd,WAAc,MACd,MAAS,0BAIAH,EAAkB,CAC7B,CAAE3gU,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,SAAUvlC,MAAO,iBACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,kBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,uBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,cACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,qCACxB,CAAEulC,GAAI,UAAWvlC,MAAO,0BACxB,CAAEulC,GAAI,SAAUvlC,MAAO,YACvB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,kCACxB,CAAEulC,GAAI,UAAWvlC,MAAO,0BACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,SAAUvlC,MAAO,YACvB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,kBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,4BACvB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,oCACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,YACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,sBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,SACvB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,qBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,SAAUvlC,MAAO,YACvB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,+BACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,qCACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,SAAUvlC,MAAO,QACvB,CAAEulC,GAAI,QAASvlC,MAAO,QACtB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,SAAUvlC,MAAO,SACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,aACvB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,SAAUvlC,MAAO,aACvB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,SAAUvlC,MAAO,aACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,wBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,iBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,kBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,4BACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,SAAUvlC,MAAO,QACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,yBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,SAAUvlC,MAAO,SACvB,CAAEulC,GAAI,UAAWvlC,MAAO,yBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,QAASvlC,MAAO,UACtB,CAAEulC,GAAI,UAAWvlC,MAAO,oBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,yBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,6BACxB,CAAEulC,GAAI,UAAWvlC,MAAO,oCACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,yBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,gBACvB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,yBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,cACvB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,mBACxB,CAAEulC,GAAI,QAASvlC,MAAO,WACtB,CAAEulC,GAAI,SAAUvlC,MAAO,gBACvB,CAAEulC,GAAI,UAAWvlC,MAAO,gDACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,SAAUvlC,MAAO,SACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,SAAUvlC,MAAO,0BACvB,CAAEulC,GAAI,SAAUvlC,MAAO,aACvB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,SAAUvlC,MAAO,SACvB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,SAAUvlC,MAAO,YACvB,CAAEulC,GAAI,UAAWvlC,MAAO,YACxB,CAAEulC,GAAI,UAAWvlC,MAAO,eACxB,CAAEulC,GAAI,UAAWvlC,MAAO,QACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,SACxB,CAAEulC,GAAI,UAAWvlC,MAAO,uBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,UAAWvlC,MAAO,gBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,4BACxB,CAAEulC,GAAI,UAAWvlC,MAAO,UACxB,CAAEulC,GAAI,UAAWvlC,MAAO,uBACxB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,SAAUvlC,MAAO,WACvB,CAAEulC,GAAI,SAAUvlC,MAAO,wBACvB,CAAEulC,GAAI,UAAWvlC,MAAO,kBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,wCACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,cACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,aACxB,CAAEulC,GAAI,UAAWvlC,MAAO,WACxB,CAAEulC,GAAI,UAAWvlC,MAAO,qBACxB,CAAEulC,GAAI,UAAWvlC,MAAO,kBACxB,CAAEulC,GAAI,QAASvlC,MAAO,SACtB,CAAEulC,GAAI,SAAUvlC,MAAO,UACvB,CAAEulC,GAAI,SAAUvlC,MAAO,c,6BC3+CzB,0KAKO,IAAM+oa,EAAmC,gBAKnCC,EAAwC,qBAKxCC,EAA+B,YAK/BC,EAAmC,gBAKnCC,EAAgC,c,6BCzB7C,gDAGe,SAASh2J,EAAajzL,GASnC,OAAOkpV,YAAqBlpV,K,6BCZ9B,sEAqDImsT,EAAiBtjW,IAAM8E,YAAW,SAAwBW,EAAOzuC,GACnE,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,IAAMA,EAQhD14D,GAPWupB,EAAMgzE,SACThzE,EAAM/7B,MACL+7B,EAAM66X,OACL76X,EAAMw8Q,QACPx8Q,EAAMqxC,OACJrxC,EAAM84J,SACP94J,EAAMwvE,QACRx8D,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,YAAa,WAAY,QAAS,SAAU,UAAW,SAAU,WAAY,aAE1J86X,EAAiBC,cACjBC,EAAMC,YAAiB,CACzBj7X,MAAOA,EACP86X,eAAgBA,EAChBxnN,OAAQ,CAAC,UAAW,SAAU,WAAY,QAAS,SAAU,UAAW,cAE1E,OAAO/4K,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,MAAuB,WAAhB2tZ,EAAIxrT,SAAwC,aAAhBwrT,EAAIxrT,UAA2BxgC,EAAQ2rM,UAAWzrM,EAAW8rV,EAAIhoT,UAAYhkC,EAAQgkC,SAAUgoT,EAAI/2Z,OAAS+qE,EAAQ/qE,MAAO+2Z,EAAIH,QAAU7rV,EAAQ6rV,OAAQG,EAAIx+G,SAAWxtO,EAAQwtO,QAASw+G,EAAIliO,UAAY9pH,EAAQ8pH,SAAU,CACpRunM,MAAOrxT,EAAQksV,aACfF,EAAI3pV,SACN9/E,IAAKA,GACJklB,GAAqB,MAAb2lB,EACX7B,IAAMwB,cAAc,OAAQ,CAC1B6mO,wBAAyB,CACvBC,OAAQ,aAEPzmO,MA+DQ20C,iBA3IK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAMuyB,YAAS,CACbm8D,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WACzB9nD,EAAM82C,WAAWmgC,QAAS,CAC3BllC,UAAW,OACX3Q,UAAW,EACXod,WAAY,MACZ9F,UAAW,MACXr4C,OAAQ,EACR,aAAc,CACZ0qB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK3O,UAE5B,UAAW,CACTjX,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,QAK/Bn0B,MAAO,GAGP+uG,SAAU,GAGVkoT,YAAa,CACX9oT,UAAW,GAIbuoK,UAAW,CACTtpM,OAAQ,cAIVmrO,QAAS,GAGTq+G,OAAQ,GAGR/hO,SAAU,MAiGoB,CAChCx0L,KAAM,qBADOysE,CAEZ8sT,I,6BCrJH,yGAiGIra,EAAsC,qBAAXh/V,OAAyB+V,IAAM0B,UAAY1B,IAAMyB,gBAK5E+rL,EAAWxtL,IAAM8E,YAAW,SAAkBW,EAAOzuC,GACvD,IAAIu9E,EAAoB9uC,EAAM+uC,WAC1BA,OAAmC,IAAtBD,EAA+B,SAAWA,EACvDqsV,EAAmBn7X,EAAMitR,UACzBA,OAAiC,IAArBkuG,GAAsCA,EAClDC,EAAgBp7X,EAAMijF,OACtBA,OAA2B,IAAlBm4S,GAAmCA,EAC5C//R,EAAer7F,EAAM5D,SACrB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBmsV,EAAgBr7X,EAAMovC,UACtBksV,EAAwBt7X,EAAMu7X,mBAC9BA,OAA+C,IAA1BD,EAAmC,KAAOA,EAC/DE,EAAwBx7X,EAAMy7X,eAG9BC,GAFJF,OAAkD,IAA1BA,EAAmC,GAAKA,GAEjBtsV,UAC3CusV,EAAiBzoX,YAAyBwoX,EAAuB,CAAC,cAClEG,EAAe37X,EAAMqgW,MACrBA,OAAyB,IAAjBs7B,GAAkCA,EAC1CliJ,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDwmH,EAAwBjgW,EAAMkgW,eAC9BA,OAA2C,IAA1BD,GAA2CA,EAC5D27B,EAAiB57X,EAAMqlU,QACvBA,OAA6B,IAAnBu2D,GAAoCA,EAC9C9xS,EAAwB9pF,EAAM8pF,sBAC9B+xS,EAAkB77X,EAAMo7E,SACxBA,OAA+B,IAApBygT,GAAqCA,EAChDplZ,EAAQu8B,YAAyBhT,EAAO,CAAC,aAAc,YAAa,SAAU,WAAY,UAAW,YAAa,YAAa,qBAAsB,iBAAkB,QAAS,WAAY,iBAAkB,UAAW,wBAAyB,aAElPhhC,EAAUu7B,IAAMgG,WAAWu7X,KAC3BC,EAAe,CACjB17B,MAAOA,GAASrhY,EAAQqhY,QAAS,EACjCtxT,WAAYA,GAEVitV,EAAczhY,IAAMyG,OAAO,MAC/BwiV,GAAkB,WACZv2D,GACE+uG,EAAYp+X,SACdo+X,EAAYp+X,QAAQ4iC,UAKvB,CAACysP,IACJ,IAAI7wR,EAAW7B,IAAM+iG,SAAS5kI,QAAQ2iI,GAClC4gS,EAAqB7/X,EAASzkC,QAAUqmI,YAAa5hG,EAASA,EAASzkC,OAAS,GAAI,CAAC,4BACrF8nR,EAAellP,IAAMykF,aAAY,SAAU77F,GAE7C64Y,EAAYp+X,QAAU+hP,IAASC,YAAYz8P,KAC1C,IACC08P,EAAYljJ,YAAW8iJ,EAAcluR,GAErCgnI,EAAiB34F,YAAS,CAC5BsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW6sV,EAAa17B,OAASrxT,EAAQqxT,OAAQH,GAAkBlxT,EAAQsxT,QAASj7B,GAAWr2R,EAAQq2R,QAASryP,GAAYhkC,EAAQgkC,SAAUiQ,GAAUj0C,EAAQi0C,OAAuB,WAAfl0C,GAA2BC,EAAQktV,oBAAqBD,GAAsBjtV,EAAQmtV,gBAAiB/gT,GAAYpsC,EAAQosC,UACjUpI,SAAUA,GACTv8F,GAECg5B,EAAY4rX,GAAiB,KAQjC,OANIp4S,IACFsV,EAAenpD,UAAYisV,GAAiB,MAC5C9iS,EAAezO,sBAAwBj5C,kBAAK7B,EAAQg7C,aAAcF,GAClEr6E,EAAYs6E,KAGVkyS,GAEFxsX,EAAa8oF,EAAenpD,WAAcisV,EAAwB5rX,EAAR,MAE/B,OAAvB8rX,IACgB,OAAd9rX,EACFA,EAAY,MAC0B,OAA7B8oF,EAAenpD,YACxBmpD,EAAenpD,UAAY,QAIxB70C,IAAMwB,cAAc+/X,IAAY5/X,SAAU,CAC/C1qC,MAAOuqa,GACNxhY,IAAMwB,cAAcw/X,EAAoB37X,YAAS,CAClDsvC,UAAW2B,kBAAK7B,EAAQM,UAAWosV,GACnCnqa,IAAKsuR,GACJ47I,GAAiBlhY,IAAMwB,cAAc0T,EAAW8oF,EAAgBn8F,GAAWA,EAASj6B,SAGlFo4B,IAAMwB,cAAc+/X,IAAY5/X,SAAU,CAC/C1qC,MAAOuqa,GACNxhY,IAAMwB,cAAc0T,EAAW7P,YAAS,CACzCruC,IAAKsuR,GACJtnJ,GAAiBn8F,OAwGP20C,iBA7RK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ6jE,QAAS,OACTM,eAAgB,aAChBzC,WAAY,SACZgkC,SAAU,WACV/W,eAAgB,OAChB5qB,MAAO,OACPH,UAAW,aACX8xC,UAAW,OACXgF,WAAY,EACZC,cAAe,EACf,iBAAkB,CAChBlN,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOo6F,UAExC,+BAAgC,CAC9BN,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOo6F,UAExC,aAAc,CACZ4H,QAAS,KAKb1zC,UAAW,CACTyjC,SAAU,YAIZiX,aAAc,GAGdq2Q,MAAO,CACLt4Q,WAAY,EACZC,cAAe,GAIjBk0S,oBAAqB,CACnBntV,WAAY,cAIdikC,SAAU,GAGVqyP,QAAS,CACP3nP,aAAc,aAAat8G,OAAO4vE,EAAM+pC,QAAQsqP,SAChD+2D,eAAgB,eAIlB97B,QAAS,CACP9hQ,YAAa,GACb7U,aAAc,IAIhB1G,OAAQ,CACNqH,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,mBAAoB,CACvDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,WAEvC,UAAW,CACTrjL,eAAgB,OAChB8e,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,MAEtC,uBAAwB,CACtBx4O,gBAAiB,iBAMvBqhT,gBAAiB,CAGfxyS,aAAc,IAIhBvO,SAAU,MA2MoB,CAChC92G,KAAM,eADOysE,CAEZg3I,I,6BC3SH,sGAIO,IAkBIs0M,EAAsB,+BAE7BC,EAAiB,SAAwBn/T,GAC3C,OAAO,WACL,IAAK,IAAIt8E,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,MAAO,CACL/qB,KAAMqma,EACNr/X,QAAS,CACPmgE,OAAQA,EACRr8E,KAAMA,MAYH5e,EAAOo6Z,EAAe,QACtB5tV,EAAU4tV,EAAe,WACzB1wJ,EAAK0wJ,EAAe,MACpBzwJ,EAASywJ,EAAe,UACxBxwJ,EAAYwwJ,EAAe,aAC3BC,EAAgB,CACzBr6Z,KAAMA,EACNwsE,QAASA,EACTk9L,GAAIA,EACJC,OAAQA,EACRC,UAAWA,I,cC1Bb96Q,EAAOC,QALP,SAAkBO,GAChB,IAAIwE,SAAcxE,EAClB,OAAgB,MAATA,IAA0B,UAARwE,GAA4B,YAARA,K,uPCLhCwma,EAXQ,eAACC,EAAD,uDAAkC,GAAlC,OAAyC,SAAAhtX,GAAS,OAAI,SAAAzP,GAC3E,IAAM08X,EAA6B,CAAEC,aAAcz9Y,iBAAO,KAO1D,OANK3nB,MAAMC,QAAQila,KACjBA,EAAgB,CAACA,IAEnBA,EAAcj6Z,SAAQ,SAAAygJ,GACpBy5Q,EAAWC,aAAeD,EAAWC,aAAan/Z,IAAIylJ,EAAE,GAAI18B,YAAc08B,EAAE,QAEvE,cAACxzG,EAAD,2BAAeitX,GAAgB18X,O,sGCCzB48X,EAhBW,eAACC,EAAD,uDAAkBC,IAAlB,OAAsC,SAAqErtX,GAanI,OAR2C,SAACzP,GAC1C,IAAMunO,EAAevnO,EAAM68X,GACrBziZ,EAAmB,2BACnB4lB,GADmB,kBAEtB68X,OAASjra,IAEZ,OAAO,cAAC69C,EAAD,2BAAer1B,GAAf,IAAqB7oB,IAAKg2Q,S,cCTrCv2Q,EAAOC,QANP,SAAyBkyB,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIjrB,UAAU,sCAKxBnH,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCLxE,IAAIiK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0HACD,eAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,kHACD,UAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,aAGI90F,EAA0B,iBAARC,MAAoBA,MAAQA,KAAKhxK,SAAWA,QAAUgxK,KAGxE73J,EAAO03J,KAAcE,GAAYE,SAAS,cAATA,GAEtB93J,O,6BCRf,kTAQI0vZ,EAA0B,GAAG3oa,YACjC,SAAS4oa,EAAW5rT,GAClB,GAAa,MAATA,GAAkC,kBAAVA,EAAoB,OAAOA,EACvD,GAAI75G,MAAMC,QAAQ45G,GAAQ,OAAOA,EAAMtyG,IAAIk+Z,GAC3C,GAAI5rT,EAAMh9G,cAAgB2oa,EAAyB,OAAO3rT,EAC1D,IAAI6rT,EAAW,GAEf,IAAK,IAAI34Z,KAAQ8sG,EACf6rT,EAAS34Z,GAAQ04Z,EAAW5rT,EAAM9sG,IAGpC,OAAO24Z,EAOT,SAASC,EAAW54Z,EAAM64Z,EAAMr7X,QACjB,IAATx9B,IACFA,EAAO,WAGT,IAAI84Z,EAAMt7X,EAAQs7X,IACdC,EAAWL,EAAWG,GACtBt9Q,EAAOu9Q,EAAIh6N,QAAQk6N,aAAah5Z,EAAM+4Z,EAAUv7X,GACpD,OAAI+9G,IAEAv7I,EAAK,GAIF,MAGT,IAAIiT,EAAO,SAAc/lB,EAAO+ra,GAG9B,IAFA,IAAI7zZ,EAAS,GAEJ5Q,EAAI,EAAGA,EAAItH,EAAMmG,QAEP,eAAbnG,EAAMsH,GAFsBA,IAG5B4Q,IAAQA,GAAU6zZ,GACtB7zZ,GAAUlY,EAAMsH,GAGlB,OAAO4Q,GAYL8zZ,EAAa,SAAoBhsa,EAAOisa,GAK1C,QAJwB,IAApBA,IACFA,GAAkB,IAGflma,MAAMC,QAAQhG,GAAQ,OAAOA,EAClC,IAAIksa,EAAW,GAEf,GAAInma,MAAMC,QAAQhG,EAAM,IACtB,IAAK,IAAIsH,EAAI,EAAGA,EAAItH,EAAMmG,QACP,eAAbnG,EAAMsH,GADsBA,IAE5B4ka,IAAUA,GAAY,MAC1BA,GAAYnmZ,EAAK/lB,EAAMsH,GAAI,UAExB4ka,EAAWnmZ,EAAK/lB,EAAO,MAO9B,OAJKisa,GAA+C,eAA5Bjsa,EAAMA,EAAMmG,OAAS,KAC3C+la,GAAY,eAGPA,GAGT,SAASC,EAAqB77X,GAC5B,OAAIA,IAA8B,IAAnBA,EAAQyO,OACd,CACLqtX,UAAW,GACXC,MAAO,IAIJ,CACLD,UAAW,KACXC,MAAO,KASX,SAASC,EAAUx/Y,EAAKy/Y,GAGtB,IAFA,IAAIr0Z,EAAS,GAEJzX,EAAQ,EAAGA,EAAQ8ra,EAAQ9ra,IAClCyX,GAAU,KAGZ,OAAOA,EAAS4U,EAOlB,SAAS0/Y,EAAMz3X,EAAU6qE,EAAOtvE,QACd,IAAZA,IACFA,EAAU,IAGZ,IAAIp4B,EAAS,GACb,IAAK0nG,EAAO,OAAO1nG,EACnB,IACIu0Z,EADWn8X,EACgBi8X,OAC3BA,OAA6B,IAApBE,EAA6B,EAAIA,EAC1Cl/Q,EAAY3tC,EAAM2tC,WAEC,IAAnBj9G,EAAQyO,SACVwtX,GAAUnra,KAGZ,IAAIsra,EAAwBP,EAAqB77X,GAC7C87X,EAAYM,EAAsBN,UAClCC,EAAQK,EAAsBL,MAIlC,GAFIt3X,GAAUw3X,IAEVh/Q,EAEF,GAAIxnJ,MAAMC,QAAQunJ,GAChB,IAAK,IAAI9sJ,EAAQ,EAAGA,EAAQ8sJ,EAAUpnJ,OAAQ1F,IAAS,CACrD,IAAImuQ,EAAWrhH,EAAU9sJ,GAEzB,IAAK,IAAI0mJ,KAAQynH,EAAU,CACzB,IAAI5uQ,EAAQ4uQ,EAASznH,GAER,MAATnnJ,IACEkY,IAAQA,GAAUk0Z,GACtBl0Z,GAAUo0Z,EAAUnlR,EAAO,IAAMklR,EAAQL,EAAWhsa,GAAS,IAAKusa,UAMxE,IAAK,IAAII,KAASp/Q,EAAW,CAC3B,IAAI9/H,EAAS8/H,EAAUo/Q,GAET,MAAVl/Y,IACEvV,IAAQA,GAAUk0Z,GACtBl0Z,GAAUo0Z,EAAUK,EAAQ,IAAMN,EAAQL,EAAWv+Y,GAAU,IAAK8+Y,IAM5E,IAAK,IAAIK,KAAUhtT,EAAO,CACxB,IAAIitT,EAAUjtT,EAAMgtT,GAEL,MAAXC,GAA8B,cAAXD,IACjB10Z,IAAQA,GAAUk0Z,GACtBl0Z,GAAUo0Z,EAAUM,EAAS,IAAMP,EAAQL,EAAWa,GAAW,IAAKN,IAK1E,OAAKr0Z,GAAWo4B,EAAQw8X,aAEnB/3X,GAED78B,IAAQA,EAAS,GAAKk0Z,EAAYl0Z,EAASk0Z,GACxCE,EAAU,GAAKv3X,EAAWs3X,EAAQ,IAAMn0Z,IAF/Cq0Z,GAEiED,EAAU,IAAKC,IALrCr0Z,EAQ7C,IAAI60Z,EAAc,+BACdC,EAA8B,qBAAR5xE,KAAuBA,IAAI9zM,OACjDA,EAAU,SAAUx6H,GACtB,OAAOkgZ,EAAeA,EAAalgZ,GAAOA,EAAIowD,QAAQ6vV,EAAa,SAGjEE,EAEJ,WACE,SAASA,EAAcrka,EAAKg3G,EAAOtvE,GACjChsC,KAAKE,KAAO,QACZF,KAAK4oa,aAAc,EACnB,IAAIl3F,EAAQ1lS,EAAQ0lS,MAChB3kN,EAAW/gF,EAAQ+gF,SACvB/sH,KAAKsE,IAAMA,EACXtE,KAAKgsC,QAAUA,EACfhsC,KAAKs7G,MAAQA,EACTo2N,EAAO1xU,KAAK6oa,SAAWn3F,EAAMm3F,SAAkB97S,IAAU/sH,KAAK6oa,SAAW,IAAI97S,GA2CnF,OApCa47S,EAAcxqa,UAEpB0kJ,KAAO,SAAcr0I,EAAM9S,EAAOswC,GAEvC,QAAclwC,IAAVJ,EAAqB,OAAOsE,KAAKs7G,MAAM9sG,GAE3C,IAAIs1S,IAAQ93Q,GAAUA,EAAQ83Q,MAC9B,IAAKA,GAAS9jT,KAAKs7G,MAAM9sG,KAAU9S,EAAO,OAAOsE,KACjD,IAAI6P,EAAWnU,EAEVswC,IAA+B,IAApBA,EAAQ9d,UACtBre,EAAW7P,KAAKgsC,QAAQs7X,IAAIh6N,QAAQyc,cAAcruN,EAAO8S,EAAMxO,OAGjE,IAAIuiB,EAAsB,MAAZ1S,IAAiC,IAAbA,EAC9Bi5Z,EAAYt6Z,KAAQxO,KAAKs7G,MAE7B,GAAI/4F,IAAYumZ,IAAchlH,EAAO,OAAO9jT,KAE5C,IAAIkP,EAASqT,GAAWumZ,EAGxB,GAFI55Z,SAAelP,KAAKs7G,MAAM9sG,GAAWxO,KAAKs7G,MAAM9sG,GAAQqB,EAExD7P,KAAK+oa,YAAc/oa,KAAK6oa,SAE1B,OADI35Z,EAAQlP,KAAK6oa,SAASG,eAAehpa,KAAK+oa,WAAYv6Z,GAAWxO,KAAK6oa,SAASI,YAAYjpa,KAAK+oa,WAAYv6Z,EAAMqB,GAC/G7P,KAGT,IAAI0xU,EAAQ1xU,KAAKgsC,QAAQ0lS,MAMzB,OAJIA,GAASA,EAAMw3F,SAIZlpa,MAGF2oa,EApDT,GAsDIQ,EAEJ,SAAUC,GAGR,SAASD,EAAU7ka,EAAKg3G,EAAOtvE,GAC7B,IAAI2L,EAEJA,EAAQyxX,EAAepoa,KAAKhB,KAAMsE,EAAKg3G,EAAOtvE,IAAYhsC,KAC1D,IAAIywC,EAAWzE,EAAQyE,SACnB44X,EAASr9X,EAAQq9X,OACjB33F,EAAQ1lS,EAAQ0lS,MAChB43F,EAAat9X,EAAQs9X,WASzB,OAPI74X,EACFkH,EAAM4xX,aAAe94X,GACD,IAAX44X,IACT1xX,EAAM1W,GAAKqoY,EAAWjnT,YAAuBA,YAAuB1qE,IAAS+5R,GAC7E/5R,EAAM4xX,aAAe,IAAMvmR,EAAOrrG,EAAM1W,KAGnC0W,EAlBTg5N,YAAew4J,EAAWC,GA2B1B,IAAII,EAAUL,EAAUhra,UAwExB,OAnEAqra,EAAQC,QAAU,SAAiBV,GACjC,IAAIF,EAAW7oa,KAAK6oa,SAEpB,GAAIA,EAAU,CACZ,IAAIx3G,EAAOrxT,KAAK0lB,SAEhB,IAAK,IAAIm9H,KAAQwuK,EACfw3G,EAASI,YAAYF,EAAYlmR,EAAMwuK,EAAKxuK,IAIhD,OAAO7iJ,MASTwpa,EAAQ9jZ,OAAS,WACf,IAAI2rS,EAAO,GAEX,IAAK,IAAIxuK,KAAQ7iJ,KAAKs7G,MAAO,CAC3B,IAAI5/G,EAAQsE,KAAKs7G,MAAMunC,GACF,kBAAVnnJ,EAAoB21T,EAAKxuK,GAAQnnJ,EAAe+F,MAAMC,QAAQhG,KAAQ21T,EAAKxuK,GAAQ6kR,EAAWhsa,IAG3G,OAAO21T,GAOTm4G,EAAQvoa,SAAW,SAAkB+qC,GACnC,IAAI0lS,EAAQ1xU,KAAKgsC,QAAQ0lS,MAErB1hL,IADO0hL,GAAQA,EAAM1lS,QAAQi+D,KACfngE,YAAS,GAAIkC,EAAS,CACtCw8X,YAAY,IACTx8X,EACL,OAAOk8X,EAAMloa,KAAKupa,aAAcvpa,KAAKs7G,MAAO00C,IAG9Cv4G,YAAa0xX,EAAW,CAAC,CACvB7ka,IAAK,WACLoD,IAAK,SAAa+oC,GAChB,GAAIA,IAAazwC,KAAKupa,aAAtB,CACAvpa,KAAKupa,aAAe94X,EACpB,IAAIo4X,EAAW7oa,KAAK6oa,SAChBE,EAAa/oa,KAAK+oa,WACtB,GAAKA,GAAeF,EACHA,EAASa,YAAYX,EAAYt4X,IAGhDo4X,EAASc,YAAYZ,EAAY/oa,QAOrC+D,IAAK,WACH,OAAO/D,KAAKupa,iBAITJ,EApGT,CAqGER,GACEiB,EAAkB,CACpBpC,aAAc,SAAsBlja,EAAKg3G,EAAOtvE,GAC9C,MAAe,MAAX1nC,EAAI,IAAc0nC,EAAQ0Q,QAAkC,cAAxB1Q,EAAQ0Q,OAAOx8C,KAC9C,KAGF,IAAIipa,EAAU7ka,EAAKg3G,EAAOtvE,KAIjC69X,EAAyB,CAC3B5B,OAAQ,EACR3hY,UAAU,GAERwjY,EAAW,YAKXC,EAEJ,WACE,SAASA,EAAgBzla,EAAKs3E,EAAQ5vC,GACpChsC,KAAKE,KAAO,cACZF,KAAK4oa,aAAc,EACnB5oa,KAAKsE,IAAMA,EACX,IAAI0la,EAAU1la,EAAIiqC,MAAMu7X,GASxB,IAAK,IAAIt7Z,KARTxO,KAAKszL,GAAK02O,EAAUA,EAAQ,GAAK,UAEjChqa,KAAKk+H,MAAQlyF,EAAQx9B,MAAQ,IAAMxO,KAAKszL,GACxCtzL,KAAKgsC,QAAUA,EACfhsC,KAAK2pJ,MAAQ,IAAIsgR,EAASngY,YAAS,GAAIkC,EAAS,CAC9C0Q,OAAQ18C,QAGO47E,EACf57E,KAAK2pJ,MAAMhrI,IAAInQ,EAAMotE,EAAOptE,IAG9BxO,KAAK2pJ,MAAMz7H,UAOb,IAAIuX,EAASskY,EAAgB5ra,UAgD7B,OA9CAsnC,EAAOukH,QAAU,SAAiBx7I,GAChC,OAAOxO,KAAK2pJ,MAAM5lJ,IAAIyK,IAOxBi3B,EAAOjlB,QAAU,SAAiBupI,GAChC,OAAO/pJ,KAAK2pJ,MAAMnpI,QAAQupI,IAO5BtkH,EAAOykY,QAAU,SAAiB17Z,EAAM8sG,EAAOtvE,GAC7C,IAAI+9G,EAAO/pJ,KAAK2pJ,MAAMhrI,IAAInQ,EAAM8sG,EAAOtvE,GACvC,OAAK+9G,GACL/pJ,KAAKgsC,QAAQs7X,IAAIh6N,QAAQ68N,cAAcpgR,GAChCA,GAFW,MASpBtkH,EAAOxkC,SAAW,SAAkB+qC,QAClB,IAAZA,IACFA,EAAU69X,GAGZ,IACI/B,EADwBD,EAAqB77X,GACX87X,UAKtC,GAHsB,MAAlB97X,EAAQi8X,SAAgBj8X,EAAQi8X,OAAS4B,EAAuB5B,QAC5C,MAApBj8X,EAAQ1F,WAAkB0F,EAAQ1F,SAAWujY,EAAuBvjY,WAE/C,IAArB0F,EAAQ1F,SACV,OAAOtmC,KAAKk+H,MAAQ,MAGtB,IAAI53F,EAAWtmC,KAAK2pJ,MAAM1oJ,SAAS+qC,GACnC,OAAO1F,EAAWtmC,KAAKk+H,MAAQ,KAAO4pS,EAAYxhY,EAAWwhY,EAAY,IAAM,IAG1EiC,EAzET,GA2EIK,EAAY,sBACZC,EAAwB,CAC1B7C,aAAc,SAAsBlja,EAAKs3E,EAAQ5vC,GAC/C,OAAOo+X,EAAUrvX,KAAKz2C,GAAO,IAAIyla,EAAgBzla,EAAKs3E,EAAQ5vC,GAAW,OAIzEs+X,EAA2B,CAC7BrC,OAAQ,EACR3hY,UAAU,GAERikY,EAAa,wBAKbC,EAEJ,WACE,SAASA,EAAclma,EAAKgxJ,EAAQtpH,GAClChsC,KAAKE,KAAO,YACZF,KAAKszL,GAAK,aACVtzL,KAAK4oa,aAAc,EACnB,IAAI6B,EAAYnma,EAAIiqC,MAAMg8X,GAEtBE,GAAaA,EAAU,GACzBzqa,KAAKwO,KAAOi8Z,EAAU,GAEtBzqa,KAAKwO,KAAO,SAIdxO,KAAKsE,IAAMtE,KAAKE,KAAO,IAAMF,KAAKwO,KAClCxO,KAAKgsC,QAAUA,EACf,IAAIq9X,EAASr9X,EAAQq9X,OACjB33F,EAAQ1lS,EAAQ0lS,MAChB43F,EAAat9X,EAAQs9X,WAMzB,IAAK,IAAI96Z,KALTxO,KAAKihC,IAAgB,IAAXooY,EAAmBrpa,KAAKwO,KAAOw0I,EAAOsmR,EAAWtpa,KAAM0xU,IACjE1xU,KAAK2pJ,MAAQ,IAAIsgR,EAASngY,YAAS,GAAIkC,EAAS,CAC9C0Q,OAAQ18C,QAGOs1J,EACft1J,KAAK2pJ,MAAMhrI,IAAInQ,EAAM8mJ,EAAO9mJ,GAAOs7B,YAAS,GAAIkC,EAAS,CACvD0Q,OAAQ18C,QAIZA,KAAK2pJ,MAAMz7H,UA6Bb,OAtBas8Y,EAAcrsa,UAEpB8C,SAAW,SAAkB+qC,QAClB,IAAZA,IACFA,EAAUs+X,GAGZ,IACIxC,EADwBD,EAAqB77X,GACX87X,UAKtC,GAHsB,MAAlB97X,EAAQi8X,SAAgBj8X,EAAQi8X,OAASqC,EAAyBrC,QAC9C,MAApBj8X,EAAQ1F,WAAkB0F,EAAQ1F,SAAWgkY,EAAyBhkY,WAEjD,IAArB0F,EAAQ1F,SACV,OAAOtmC,KAAKszL,GAAK,IAAMtzL,KAAKihC,GAAK,MAGnC,IAAIqF,EAAWtmC,KAAK2pJ,MAAM1oJ,SAAS+qC,GAEnC,OADI1F,IAAUA,EAAW,GAAKwhY,EAAYxhY,EAAWwhY,GAC9C9na,KAAKszL,GAAK,IAAMtzL,KAAKihC,GAAK,KAAOqF,EAAW,KAG9CkkY,EA3DT,GA6DIE,EAAc,gBACdC,EAAY,cAEZC,EAAyB,SAAgC30Z,EAAKw8T,GAChE,MAAmB,kBAARx8T,EACFA,EAAI2iE,QAAQ+xV,GAAW,SAAUp8X,EAAO//B,GAC7C,OAAIA,KAAQikU,EACHA,EAAUjkU,GAIZ+/B,KAIJt4B,GAOL40Z,EAAa,SAAoBvvT,EAAOunC,EAAM4vL,GAChD,IAAI/2U,EAAQ4/G,EAAMunC,GACdioR,EAAcF,EAAuBlva,EAAO+2U,GAE5Cq4F,IAAgBpva,IAClB4/G,EAAMunC,GAAQioR,IAIdC,EAAsB,CACxBvD,aAAc,SAAsBlja,EAAKgxJ,EAAQtpH,GAC/C,MAAsB,kBAAR1nC,GAAoBoma,EAAY3vX,KAAKz2C,GAAO,IAAIkma,EAAclma,EAAKgxJ,EAAQtpH,GAAW,MAGtGg/X,eAAgB,SAAwB1vT,EAAOyuC,EAAM2nL,GACnD,MAAkB,UAAd3nL,EAAK7pJ,MAAqBwxU,GAC1B,mBAAoBp2N,GAAOuvT,EAAWvvT,EAAO,iBAAkBo2N,EAAMe,WACrE,cAAen3N,GAAOuvT,EAAWvvT,EAAO,YAAao2N,EAAMe,WACxDn3N,GAHqCA,GAK9CyuG,cAAe,SAAuB9zM,EAAK4sI,EAAMkH,GAC/C,IAAI2nL,EAAQ3nL,EAAK/9G,QAAQ0lS,MAEzB,IAAKA,EACH,OAAOz7T,EAGT,OAAQ4sI,GACN,IAAK,YAGL,IAAK,iBACH,OAAO+nR,EAAuB30Z,EAAKy7T,EAAMe,WAE3C,QACE,OAAOx8T,KAKXg1Z,EAEJ,SAAU7B,GAGR,SAAS6B,IACP,OAAO7B,EAAenha,MAAMjI,KAAM0D,YAAc1D,KAiBlD,OApBA2wQ,YAAes6J,EAAc7B,GAMhB6B,EAAa9sa,UAKnB8C,SAAW,SAAkB+qC,GAClC,IAAI0lS,EAAQ1xU,KAAKgsC,QAAQ0lS,MAErB1hL,IADO0hL,GAAQA,EAAM1lS,QAAQi+D,KACfngE,YAAS,GAAIkC,EAAS,CACtCw8X,YAAY,IACTx8X,EACL,OAAOk8X,EAAMloa,KAAKsE,IAAKtE,KAAKs7G,MAAO00C,IAG9Bi7Q,EArBT,CAsBEtC,GACEuC,EAAqB,CACvB1D,aAAc,SAAsBlja,EAAKg3G,EAAOtvE,GAC9C,OAAIA,EAAQ0Q,QAAkC,cAAxB1Q,EAAQ0Q,OAAOx8C,KAC5B,IAAI+qa,EAAa3ma,EAAKg3G,EAAOtvE,GAG/B,OAIPm/X,EAEJ,WACE,SAASA,EAAa7ma,EAAKg3G,EAAOtvE,GAChChsC,KAAKE,KAAO,YACZF,KAAKszL,GAAK,aACVtzL,KAAK4oa,aAAc,EACnB5oa,KAAKsE,IAAMA,EACXtE,KAAKs7G,MAAQA,EACbt7G,KAAKgsC,QAAUA,EA2BjB,OApBam/X,EAAahta,UAEnB8C,SAAW,SAAkB+qC,GAClC,IACI87X,EADwBD,EAAqB77X,GACX87X,UAEtC,GAAIrma,MAAMC,QAAQ1B,KAAKs7G,OAAQ,CAG7B,IAFA,IAAI9yF,EAAM,GAEDrsB,EAAQ,EAAGA,EAAQ6D,KAAKs7G,MAAMz5G,OAAQ1F,IAC7CqsB,GAAO0/Y,EAAMloa,KAAKszL,GAAItzL,KAAKs7G,MAAMn/G,IAC7B6D,KAAKs7G,MAAMn/G,EAAQ,KAAIqsB,GAAOs/Y,GAGpC,OAAOt/Y,EAGT,OAAO0/Y,EAAMloa,KAAKszL,GAAItzL,KAAKs7G,MAAOtvE,IAG7Bm/X,EAlCT,GAoCIC,EAAc,aACdC,EAAqB,CACvB7D,aAAc,SAAsBlja,EAAKg3G,EAAOtvE,GAC9C,OAAOo/X,EAAYrwX,KAAKz2C,GAAO,IAAI6ma,EAAa7ma,EAAKg3G,EAAOtvE,GAAW,OAIvEs/X,EAEJ,WACE,SAASA,EAAahna,EAAKg3G,EAAOtvE,GAChChsC,KAAKE,KAAO,WACZF,KAAKszL,GAAK,YACVtzL,KAAK4oa,aAAc,EACnB5oa,KAAKsE,IAAMA,EACXtE,KAAKs7G,MAAQA,EACbt7G,KAAKgsC,QAAUA,EAajB,OANas/X,EAAanta,UAEnB8C,SAAW,SAAkB+qC,GAClC,OAAOk8X,EAAMloa,KAAKsE,IAAKtE,KAAKs7G,MAAOtvE,IAG9Bs/X,EApBT,GAsBIC,EAAqB,CACvB/D,aAAc,SAAsBlja,EAAKg3G,EAAOtvE,GAC9C,MAAe,cAAR1nC,GAA+B,kBAARA,EAA0B,IAAIgna,EAAahna,EAAKg3G,EAAOtvE,GAAW,OAIhGw/X,EAEJ,WACE,SAASA,EAAWlna,EAAK5I,EAAOswC,GAC9BhsC,KAAKE,KAAO,SACZF,KAAK4oa,aAAc,EACnB5oa,KAAKsE,IAAMA,EACXtE,KAAKtE,MAAQA,EACbsE,KAAKgsC,QAAUA,EAyBjB,OAjBaw/X,EAAWrta,UAEjB8C,SAAW,SAAkB+qC,GAClC,GAAIvqC,MAAMC,QAAQ1B,KAAKtE,OAAQ,CAG7B,IAFA,IAAI8sB,EAAM,GAEDrsB,EAAQ,EAAGA,EAAQ6D,KAAKtE,MAAMmG,OAAQ1F,IAC7CqsB,GAAOxoB,KAAKsE,IAAM,IAAMtE,KAAKtE,MAAMS,GAAS,IACxC6D,KAAKtE,MAAMS,EAAQ,KAAIqsB,GAAO,MAGpC,OAAOA,EAGT,OAAOxoB,KAAKsE,IAAM,IAAMtE,KAAKtE,MAAQ,KAGhC8va,EA/BT,GAiCIC,EAAU,CACZ,YAAY,EACZ,WAAW,EACX,cAAc,GAQZn+N,EAAU,CAACs8N,EAAiBS,EAAuBU,EAAqBG,EAAoBG,EAAoBE,EAN7F,CACrB/D,aAAc,SAAsBlja,EAAK5I,EAAOswC,GAC9C,OAAO1nC,KAAOmna,EAAU,IAAID,EAAWlna,EAAK5I,EAAOswC,GAAW,QAM9D0/X,EAAuB,CACzBx9Y,SAAS,GAEPy9Y,EAAqB,CACvB7nH,OAAO,EACP51R,SAAS,GAQP+7Y,EAEJ,WAKE,SAASA,EAASj+X,GAChBhsC,KAAKgJ,IAAM,GACXhJ,KAAKk5R,IAAM,GACXl5R,KAAK7D,MAAQ,GACb6D,KAAK4ra,QAAU,EACf5ra,KAAKgsC,QAAUA,EACfhsC,KAAKk5E,QAAUltC,EAAQktC,QACvBl5E,KAAKyyU,UAAYzmS,EAAQymS,UAS3B,IAAIhtS,EAASwkY,EAAS9ra,UAyNtB,OAvNAsnC,EAAO9mB,IAAM,SAAanQ,EAAM64Z,EAAMwE,GACpC,IAAIC,EAAgB9ra,KAAKgsC,QACrB0Q,EAASovX,EAAcpvX,OACvBg1R,EAAQo6F,EAAcp6F,MACtB41F,EAAMwE,EAAcxE,IACpBv6S,EAAW++S,EAAc/+S,SACzBu8S,EAAawC,EAAcxC,WAC3BD,EAASyC,EAAczC,OAEvBr9X,EAAUlC,YAAS,CACrBovC,QAASl5E,KAAKk5E,QACdx8B,OAAQA,EACRg1R,MAAOA,EACP41F,IAAKA,EACLv6S,SAAUA,EACVu8S,WAAYA,EACZD,OAAQA,EACR76Z,KAAMA,EACNikU,UAAWzyU,KAAKyyU,UAChBhiS,cAAU30C,GACT+va,GAKCvna,EAAMkK,EAENA,KAAQxO,KAAKk5R,MACf50R,EAAMkK,EAAO,KAAOxO,KAAK4ra,WAK3B5ra,KAAKk5R,IAAI50R,GAAO+ia,EAEZ/ia,KAAOtE,KAAKk5E,UAEdltC,EAAQyE,SAAW,IAAMuyG,EAAOhjJ,KAAKk5E,QAAQ50E,KAG/C,IAAIylJ,EAAOq9Q,EAAW9ia,EAAK+ia,EAAMr7X,GACjC,IAAK+9G,EAAM,OAAO,KAClB/pJ,KAAKutM,SAASxjD,GACd,IAAI5tJ,OAA0BL,IAAlBkwC,EAAQ7vC,MAAsB6D,KAAK7D,MAAM0F,OAASmqC,EAAQ7vC,MAEtE,OADA6D,KAAK7D,MAAMiT,OAAOjT,EAAO,EAAG4tJ,GACrBA,GAOTtkH,EAAO1hC,IAAM,SAAayK,GACxB,OAAOxO,KAAKgJ,IAAIwF,IAOlBi3B,EAAOv2B,OAAS,SAAgB66I,GAC9B/pJ,KAAKg+S,WAAWj0J,UACT/pJ,KAAKk5R,IAAInvI,EAAKzlJ,KACrBtE,KAAK7D,MAAMiT,OAAOpP,KAAK7D,MAAMqkB,QAAQupI,GAAO,IAO9CtkH,EAAOjlB,QAAU,SAAiBupI,GAChC,OAAO/pJ,KAAK7D,MAAMqkB,QAAQupI,IAO5BtkH,EAAOvX,QAAU,WACf,IAAIo/K,EAAUttM,KAAKgsC,QAAQs7X,IAAIh6N,QAG/BttM,KAAK7D,MAAM2T,MAAM,GAAGpD,QAAQ4gM,EAAQ68N,cAAe78N,IAOrD7nK,EAAO8nK,SAAW,SAAkBxjD,GAClC/pJ,KAAKgJ,IAAI+gJ,EAAKzlJ,KAAOylJ,EAEjBA,aAAgBo/Q,GAClBnpa,KAAKgJ,IAAI+gJ,EAAKt5G,UAAYs5G,EACtBA,EAAK9oH,KAAIjhC,KAAKk5E,QAAQ6wE,EAAKzlJ,KAAOylJ,EAAK9oH,KAClC8oH,aAAgBygR,GAAiBxqa,KAAKyyU,YAC/CzyU,KAAKyyU,UAAU1oL,EAAKv7I,MAAQu7I,EAAK9oH,KAQrCwE,EAAOu4Q,WAAa,SAAoBj0J,UAC/B/pJ,KAAKgJ,IAAI+gJ,EAAKzlJ,KAEjBylJ,aAAgBo/Q,UACXnpa,KAAKgJ,IAAI+gJ,EAAKt5G,iBACdzwC,KAAKk5E,QAAQ6wE,EAAKzlJ,MAChBylJ,aAAgBygR,UAClBxqa,KAAKyyU,UAAU1oL,EAAKv7I,OAQ/Bi3B,EAAOn1B,OAAS,WACd,IAAI9B,EACAwsC,EACAhP,EAYJ,GAVkE,kBAAtDtoC,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,KACxD8K,EAAO9K,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,GACrDs3C,EAAOt3C,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,GACrDsoC,EAAUtoC,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,KAExDs3C,EAAOt3C,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,GACrDsoC,EAAUtoC,UAAU7B,QAAU,OAAI/F,EAAY4H,UAAU,GACxD8K,EAAO,MAGLA,EACFxO,KAAK+ra,UAAU/ra,KAAKgJ,IAAIwF,GAAOwsC,EAAMhP,QAErC,IAAK,IAAI7vC,EAAQ,EAAGA,EAAQ6D,KAAK7D,MAAM0F,OAAQ1F,IAC7C6D,KAAK+ra,UAAU/ra,KAAK7D,MAAMA,GAAQ6+C,EAAMhP,IAS9CvG,EAAOsmY,UAAY,SAAmBhiR,EAAM/uG,EAAMhP,QAChC,IAAZA,IACFA,EAAU0/X,GAGZ,IAAIM,EAAiBhsa,KAAKgsC,QACtBshK,EAAU0+N,EAAe1E,IAAIh6N,QAC7BokI,EAAQs6F,EAAet6F,MAE3B,GAAI3nL,EAAKJ,iBAAiBsgR,EACxBlgR,EAAKJ,MAAMr5I,OAAO0qC,EAAMhP,OAD1B,CAKA,IAAIsvE,EAAQyuC,EAAKzuC,MAGjB,GAFAgyF,EAAQ0lE,SAASh4N,EAAM+uG,EAAM2nL,EAAO1lS,GAEhCA,EAAQ9d,SAAWotF,GAASA,IAAUyuC,EAAKzuC,MAAO,CAIpD,IAAK,IAAIunC,KAFTyqD,EAAQ09N,eAAejhR,EAAKzuC,MAAOyuC,EAAM2nL,GAExB3nL,EAAKzuC,MAAO,CAC3B,IAAI2wT,EAAYliR,EAAKzuC,MAAMunC,GAIvBopR,IAHY3wT,EAAMunC,IAIpBkH,EAAKlH,KAAKA,EAAMopR,EAAWN,GAK/B,IAAK,IAAItD,KAAS/sT,EAAO,CACvB,IAAI4wT,EAAaniR,EAAKzuC,MAAM+sT,GACxB8D,EAAa7wT,EAAM+sT,GAGL,MAAd6D,GAAsBA,IAAeC,GACvCpiR,EAAKlH,KAAKwlR,EAAO,KAAMsD,OAU/BlmY,EAAOxkC,SAAW,SAAkB+qC,GAQlC,IAPA,IAAIxjB,EAAM,GACNkpT,EAAQ1xU,KAAKgsC,QAAQ0lS,MACrBznO,IAAOynO,GAAQA,EAAM1lS,QAAQi+D,KAG7B69T,EADwBD,EAAqB77X,GACX87X,UAE7B3ra,EAAQ,EAAGA,EAAQ6D,KAAK7D,MAAM0F,OAAQ1F,IAAS,CACtD,IACIi2U,EADOpyU,KAAK7D,MAAMA,GACP8E,SAAS+qC,IAEnBomS,GAAQnoO,KACTzhF,IAAKA,GAAOs/Y,GAChBt/Y,GAAO4pT,GAGT,OAAO5pT,GAGFyhZ,EA9OT,GAiPImC,EAEJ,WACE,SAASA,EAAWxwV,EAAQ5vC,GAkB1B,IAAK,IAAIx9B,KAjBTxO,KAAKkpa,UAAW,EAChBlpa,KAAKqsa,UAAW,EAChBrsa,KAAKk5E,QAAU,GACfl5E,KAAKyyU,UAAY,GACjBzyU,KAAKgsC,QAAUlC,YAAS,GAAIkC,EAAS,CACnC0lS,MAAO1xU,KACP08C,OAAQ18C,KACRk5E,QAASl5E,KAAKk5E,QACdu5P,UAAWzyU,KAAKyyU,YAGdzmS,EAAQ+gF,WACV/sH,KAAK6oa,SAAW,IAAI78X,EAAQ+gF,SAAS/sH,OAGvCA,KAAK2pJ,MAAQ,IAAIsgR,EAASjqa,KAAKgsC,SAEd4vC,EACf57E,KAAK2pJ,MAAMhrI,IAAInQ,EAAMotE,EAAOptE,IAG9BxO,KAAK2pJ,MAAMz7H,UAOb,IAAIuX,EAAS2mY,EAAWjua,UAkKxB,OAhKAsnC,EAAOkpT,OAAS,WACd,OAAI3uV,KAAKkpa,WACLlpa,KAAK6oa,UAAU7oa,KAAK6oa,SAASl6E,SACjC3uV,KAAKkpa,UAAW,EAEXlpa,KAAKqsa,UAAUrsa,KAAKssa,UAJCtsa,MAY5BylC,EAAO+iO,OAAS,WACd,OAAKxoQ,KAAKkpa,UACNlpa,KAAK6oa,UAAU7oa,KAAK6oa,SAASrgK,SACjCxoQ,KAAKkpa,UAAW,EACTlpa,MAHoBA,MAW7BylC,EAAOykY,QAAU,SAAiB17Z,EAAM64Z,EAAMr7X,GAC5C,IAAIugH,EAAQvsJ,KAAKusJ,MAIbvsJ,KAAKkpa,WAAa38Q,IAAOvsJ,KAAKusJ,MAAQ,IAC1C,IAAIxC,EAAO/pJ,KAAK2pJ,MAAMhrI,IAAInQ,EAAM64Z,EAAMr7X,GACtC,OAAK+9G,GACL/pJ,KAAKgsC,QAAQs7X,IAAIh6N,QAAQ68N,cAAcpgR,GAEnC/pJ,KAAKkpa,SACFlpa,KAAKqsa,UAGN9/Q,EAAOA,EAAMngJ,KAAK29I,IACpB/pJ,KAAKusa,WAAWxiR,GAEZ/pJ,KAAKusJ,QACPvsJ,KAAKusJ,MAAM7/I,QAAQ1M,KAAKusa,WAAYvsa,MACpCA,KAAKusJ,WAAQzwJ,IAGViuJ,GAXoBA,GAgB7B/pJ,KAAKqsa,UAAW,EACTtiR,IArBW,MA4BpBtkH,EAAO8mY,WAAa,SAAoBxiR,GAClC/pJ,KAAK6oa,UACP7oa,KAAK6oa,SAAS0D,WAAWxiR,IAS7BtkH,EAAO+mY,SAAW,SAAkB5wV,EAAQ5vC,GAC1C,IAAIg7P,EAAQ,GAEZ,IAAK,IAAIx4R,KAAQotE,EAAQ,CACvB,IAAImuE,EAAO/pJ,KAAKkqa,QAAQ17Z,EAAMotE,EAAOptE,GAAOw9B,GACxC+9G,GAAMi9I,EAAM56R,KAAK29I,GAGvB,OAAOi9I,GAOTvhQ,EAAOukH,QAAU,SAAiBx7I,GAChC,OAAOxO,KAAK2pJ,MAAM5lJ,IAAIyK,IAQxBi3B,EAAOgnY,WAAa,SAAoBj+Z,GACtC,IAAIu7I,EAAuB,kBAATv7I,EAAoBA,EAAOxO,KAAK2pJ,MAAM5lJ,IAAIyK,GAE5D,SAAKu7I,GAEL/pJ,KAAKkpa,WAAan/Q,EAAKg/Q,cAIvB/oa,KAAK2pJ,MAAMz6I,OAAO66I,KAEd/pJ,KAAKkpa,UAAYn/Q,EAAKg/Q,YAAc/oa,KAAK6oa,WACpC7oa,KAAK6oa,SAAS4D,WAAW1iR,EAAKg/Q,cAUzCtjY,EAAOjlB,QAAU,SAAiBupI,GAChC,OAAO/pJ,KAAK2pJ,MAAMnpI,QAAQupI,IAO5BtkH,EAAO6mY,OAAS,WAGd,OAFItsa,KAAK6oa,UAAU7oa,KAAK6oa,SAASyD,SACjCtsa,KAAKqsa,UAAW,EACTrsa,MAOTylC,EAAOn1B,OAAS,WACd,IAAIo8Z,EAIJ,OAFCA,EAAc1sa,KAAK2pJ,OAAOr5I,OAAOrI,MAAMyka,EAAahpa,WAE9C1D,MAOTylC,EAAOsmY,UAAY,SAAmBhiR,EAAM/uG,EAAMhP,GAEhD,OADAhsC,KAAK2pJ,MAAMoiR,UAAUhiR,EAAM/uG,EAAMhP,GAC1BhsC,MAOTylC,EAAOxkC,SAAW,SAAkB+qC,GAClC,OAAOhsC,KAAK2pJ,MAAM1oJ,SAAS+qC,IAGtBogY,EAhMT,GAmMIO,EAEJ,WACE,SAASA,IACP3sa,KAAKstM,QAAU,CACbs/N,SAAU,GACVh+Q,SAAU,IAEZ5uJ,KAAKm2S,SAAW,GAGlB,IAAI1wQ,EAASknY,EAAgBxua,UAgH7B,OA3GAsnC,EAAO+hY,aAAe,SAAsBh5Z,EAAM64Z,EAAMr7X,GACtD,IAAK,IAAIhpC,EAAI,EAAGA,EAAIhD,KAAKm2S,SAASqxH,aAAa3la,OAAQmB,IAAK,CAC1D,IAAI+mJ,EAAO/pJ,KAAKm2S,SAASqxH,aAAaxka,GAAGwL,EAAM64Z,EAAMr7X,GACrD,GAAI+9G,EAAM,OAAOA,EAGnB,OAAO,MAOTtkH,EAAO0kY,cAAgB,SAAuBpgR,GAC5C,IAAIA,EAAK6+Q,YAAT,CAGA,IAFA,IAAIl3F,EAAQ3nL,EAAK/9G,QAAQ0lS,MAEhB1uU,EAAI,EAAGA,EAAIhD,KAAKm2S,SAASg0H,cAActoa,OAAQmB,IACtDhD,KAAKm2S,SAASg0H,cAAcnna,GAAG+mJ,EAAM2nL,GAGnC3nL,EAAKzuC,OAAOt7G,KAAKgra,eAAejhR,EAAKzuC,MAAOyuC,EAAM2nL,GACtD3nL,EAAK6+Q,aAAc,IAOrBnjY,EAAOulY,eAAiB,SAAwB1vT,EAAOyuC,EAAM2nL,GAC3D,IAAK,IAAI1uU,EAAI,EAAGA,EAAIhD,KAAKm2S,SAAS60H,eAAenpa,OAAQmB,IACvD+mJ,EAAKzuC,MAAQt7G,KAAKm2S,SAAS60H,eAAehoa,GAAG+mJ,EAAKzuC,MAAOyuC,EAAM2nL,IAQnEjsS,EAAOonY,eAAiB,SAAwBn7F,GAC9C,IAAK,IAAI1uU,EAAI,EAAGA,EAAIhD,KAAKm2S,SAAS02H,eAAehra,OAAQmB,IACvDhD,KAAKm2S,SAAS02H,eAAe7pa,GAAG0uU,IAQpCjsS,EAAOutO,SAAW,SAAkBh4N,EAAM+uG,EAAM2nL,EAAO1lS,GACrD,IAAK,IAAIhpC,EAAI,EAAGA,EAAIhD,KAAKm2S,SAASnjC,SAASnxQ,OAAQmB,IACjDhD,KAAKm2S,SAASnjC,SAAShwQ,GAAGg4C,EAAM+uG,EAAM2nL,EAAO1lS,IAQjDvG,EAAOskL,cAAgB,SAAuBruN,EAAOmnJ,EAAMkH,GAGzD,IAFA,IAAI+iR,EAAiBpxa,EAEZsH,EAAI,EAAGA,EAAIhD,KAAKm2S,SAASpsF,cAAcloN,OAAQmB,IACtD8pa,EAAiB9sa,KAAKm2S,SAASpsF,cAAc/mN,GAAG8pa,EAAgBjqR,EAAMkH,GAGxE,OAAO+iR,GAOTrnY,EAAOqrH,IAAM,SAAai8Q,EAAW/gY,QACnB,IAAZA,IACFA,EAAU,CACRugH,MAAO,aAIX,IAAI+gD,EAAUttM,KAAKstM,QAAQthK,EAAQugH,QAEC,IAAhC+gD,EAAQ9sL,QAAQusZ,KAIpBz/N,EAAQlhM,KAAK2ga,GACb/sa,KAAKm2S,SAAW,GAAG7qS,OAAOtL,KAAKstM,QAAQ1+C,SAAU5uJ,KAAKstM,QAAQs/N,UAAUjha,QAAO,SAAUwqS,EAAU3oG,GACjG,IAAK,IAAIh/L,KAAQg/L,EACXh/L,KAAQ2nS,GACVA,EAAS3nS,GAAMpC,KAAKohM,EAAOh/L,IAM/B,OAAO2nS,IACN,CACDqxH,aAAc,GACd2C,cAAe,GACfa,eAAgB,GAChB6B,eAAgB,GAChB9iN,cAAe,GACfipD,SAAU,OAIP25J,EAzHT,GAgIIlgK,EAEJ,WACE,SAASA,IACPzsQ,KAAKm2S,SAAW,GAGlB,IAAI1wQ,EAASgnO,EAAetuQ,UAgF5B,OA3EAsnC,EAAO9mB,IAAM,SAAa+yT,GACxB,IAAIv7B,EAAWn2S,KAAKm2S,SAChBh6S,EAAQu1U,EAAM1lS,QAAQ7vC,MAC1B,IAAiC,IAA7Bg6S,EAAS31R,QAAQkxT,GAErB,GAAwB,IAApBv7B,EAASt0S,QAAgB1F,GAAS6D,KAAK7D,MACzCg6S,EAAS/pS,KAAKslU,QAKhB,IAAK,IAAI1uU,EAAI,EAAGA,EAAImzS,EAASt0S,OAAQmB,IACnC,GAAImzS,EAASnzS,GAAGgpC,QAAQ7vC,MAAQA,EAE9B,YADAg6S,EAAS/mS,OAAOpM,EAAG,EAAG0uU,IAU5BjsS,EAAOklC,MAAQ,WACb3qE,KAAKm2S,SAAW,IAOlB1wQ,EAAOv2B,OAAS,SAAgBwiU,GAC9B,IAAIv1U,EAAQ6D,KAAKm2S,SAAS31R,QAAQkxT,GAClC1xU,KAAKm2S,SAAS/mS,OAAOjT,EAAO,IAO9BspC,EAAOxkC,SAAW,SAAkB0tC,GAUlC,IATA,IAAItI,OAAiB,IAAVsI,EAAmB,GAAKA,EAC/Bu6X,EAAW7iY,EAAK6iY,SAChBl9X,EAAUtC,YAA8BrD,EAAM,CAAC,aAG/CyhY,EADwBD,EAAqB77X,GACX87X,UAElC11F,EAAM,GAEDpvU,EAAI,EAAGA,EAAIhD,KAAKm2S,SAASt0S,OAAQmB,IAAK,CAC7C,IAAI0uU,EAAQ1xU,KAAKm2S,SAASnzS,GAEV,MAAZkma,GAAoBx3F,EAAMw3F,WAAaA,IAIvC92F,IAAKA,GAAO01F,GAChB11F,GAAOV,EAAMzwU,SAAS+qC,IAGxB,OAAOomS,GAGT36R,YAAag1N,EAAgB,CAAC,CAC5BnoQ,IAAK,QAKLP,IAAK,WACH,OAAgC,IAAzB/D,KAAKm2S,SAASt0S,OAAe,EAAI7B,KAAKm2S,SAASn2S,KAAKm2S,SAASt0S,OAAS,GAAGmqC,QAAQ7vC,UAIrFswQ,EArFT,GA+FIugK,EAAS,IAAIvgK,EAcbwgK,EAAqC,qBAAf7wF,WAA6BA,WAA+B,qBAAX1tT,QAA0BA,OAAO3xB,OAASA,KAAO2xB,OAAyB,qBAAT0gJ,MAAwBA,KAAKryK,OAASA,KAAOqyK,KAAOC,SAAS,cAATA,GAE5Lz3H,GAAK,mCACe,MAApBq1X,EAAar1X,MAAaq1X,EAAar1X,IAAM,GAKjD,IAAIs1X,GAAWD,EAAar1X,MASxBu1X,GAAmB,SAA0BnhY,QAC/B,IAAZA,IACFA,EAAU,IAGZ,IAAIohY,EAAc,EA8BlB,OA5BiB,SAAoBrjR,EAAM2nL,GACzC07F,GAAe,EAMf,IAAIC,EAAQ,GACR1vX,EAAS,GAYb,OAVI+zR,IACEA,EAAM1lS,QAAQshY,kBAChB3vX,EAAS+zR,EAAM1lS,QAAQshY,iBAGG,MAAxB57F,EAAM1lS,QAAQs7X,IAAIrmY,KACpBosY,EAAQx+Z,OAAO6iU,EAAM1lS,QAAQs7X,IAAIrmY,MAIjC+K,EAAQuhY,OAEH,IAAM5vX,GAAU,KAAOuvX,GAAWG,EAAQD,EAG5CzvX,EAASosG,EAAKzlJ,IAAM,IAAM4oa,IAAYG,EAAQ,IAAMA,EAAQ,IAAM,IAAMD,IAU/E96X,GAAU,SAAiBzvC,GAC7B,IAAInH,EACJ,OAAO,WAEL,OADKA,IAAOA,EAAQmH,KACbnH,IAQP8xa,GAAmB,SAA0BC,EAAS5qR,GACxD,IAEE,OAAI4qR,EAAQC,kBACHD,EAAQC,kBAAkB3pa,IAAI8+I,GAGhC4qR,EAAQnyT,MAAMkyT,iBAAiB3qR,GACtC,MAAOzxG,GAEP,MAAO,KAQP63X,GAAc,SAAqBwE,EAAS5qR,EAAMnnJ,GACpD,IACE,IAAIksa,EAAWlsa,EAEf,GAAI+F,MAAMC,QAAQhG,KAChBksa,EAAWF,EAAWhsa,GAAO,GAEG,eAA5BA,EAAMA,EAAMmG,OAAS,IAEvB,OADA4ra,EAAQnyT,MAAM2tT,YAAYpmR,EAAM+kR,EAAU,cACnC,EAKP6F,EAAQC,kBACVD,EAAQC,kBAAkBhma,IAAIm7I,EAAM+kR,GAEpC6F,EAAQnyT,MAAM2tT,YAAYpmR,EAAM+kR,GAElC,MAAOx2X,GAEP,OAAO,EAGT,OAAO,GAOL43X,GAAiB,SAAwByE,EAAS5qR,GACpD,IAEM4qR,EAAQC,kBACVD,EAAQC,kBAAkBllT,OAAOq6B,GAEjC4qR,EAAQnyT,MAAM0tT,eAAenmR,GAE/B,MAAOzxG,MASPs4X,GAAc,SAAqB+D,EAASlE,GAI9C,OAHAkE,EAAQlE,aAAeA,EAGhBkE,EAAQlE,eAAiBA,GAQ9BxtH,GAAUzpQ,IAAQ,WACpB,OAAOtM,SAASg2Q,cAAc,WAwDhC,SAAS2xH,GAAa3hY,GACpB,IAAImqQ,EAAW62H,EAAO72H,SAEtB,GAAIA,EAASt0S,OAAS,EAAG,CAEvB,IAAI6vU,EAvDR,SAAyBv7B,EAAUnqQ,GACjC,IAAK,IAAIhpC,EAAI,EAAGA,EAAImzS,EAASt0S,OAAQmB,IAAK,CACxC,IAAI0uU,EAAQv7B,EAASnzS,GAErB,GAAI0uU,EAAMw3F,UAAYx3F,EAAM1lS,QAAQ7vC,MAAQ6vC,EAAQ7vC,OAASu1U,EAAM1lS,QAAQ4hY,iBAAmB5hY,EAAQ4hY,eACpG,OAAOl8F,EAIX,OAAO,KA8COm8F,CAAgB13H,EAAUnqQ,GAEtC,GAAI0lS,GAASA,EAAMm3F,SACjB,MAAO,CACLnsX,OAAQg1R,EAAMm3F,SAAS/gO,QAAQgmO,WAC/B1ma,KAAMsqU,EAAMm3F,SAAS/gO,SAOzB,GAFA4pI,EAjDJ,SAA0Bv7B,EAAUnqQ,GAClC,IAAK,IAAIhpC,EAAImzS,EAASt0S,OAAS,EAAGmB,GAAK,EAAGA,IAAK,CAC7C,IAAI0uU,EAAQv7B,EAASnzS,GAErB,GAAI0uU,EAAMw3F,UAAYx3F,EAAM1lS,QAAQ4hY,iBAAmB5hY,EAAQ4hY,eAC7D,OAAOl8F,EAIX,OAAO,KAwCGq8F,CAAiB53H,EAAUnqQ,GAE/B0lS,GAASA,EAAMm3F,SACjB,MAAO,CACLnsX,OAAQg1R,EAAMm3F,SAAS/gO,QAAQgmO,WAC/B1ma,KAAMsqU,EAAMm3F,SAAS/gO,QAAQkmO,aAMnC,IAAIJ,EAAiB5hY,EAAQ4hY,eAE7B,GAAIA,GAA4C,kBAAnBA,EAA6B,CACxD,IAAIK,EA/CR,SAAyBpiT,GAGvB,IAFA,IAAI7uG,EAAO++R,KAEF/4S,EAAI,EAAGA,EAAIga,EAAKkxZ,WAAWrsa,OAAQmB,IAAK,CAC/C,IAAIoE,EAAO4V,EAAKkxZ,WAAWlra,GAE3B,GAAsB,IAAlBoE,EAAKC,UAAkBD,EAAK+ma,UAAU3vS,SAAW3S,EACnD,OAAOzkH,EAIX,OAAO,KAoCSgna,CAAgBR,GAE9B,GAAIK,EACF,MAAO,CACLvxX,OAAQuxX,EAAQH,WAChB1ma,KAAM6ma,EAAQD,aASpB,OAAO,EA+BT,IAAIK,GAAW/7X,IAAQ,WACrB,IAAIlrC,EAAO4+B,SAASg2Q,cAAc,8BAClC,OAAO50S,EAAOA,EAAKu2S,aAAa,WAAa,QAG3C2wH,GAAc,SAAoB90V,EAAWuwE,EAAM5tJ,GACrD,IACM,eAAgBq9E,EAClBA,EAAU+yV,WAAWxiR,EAAM5tJ,GAEpB,eAAgBq9E,GACrBA,EAAU+0V,WAAWxkR,GAEzB,MAAO34G,GAEP,OAAO,EAGT,OAAOooC,EAAUg1V,SAASrya,IAGxBsya,GAA6B,SAAoCj1V,EAAWr9E,GAC9E,IAAIya,EAAW4iE,EAAUg1V,SAAS3sa,OAElC,YAAc/F,IAAVK,GAAuBA,EAAQya,EAE1BA,EAGFza,GAYLuya,GAEJ,WAGE,SAASA,EAAYh9F,GACnB1xU,KAAKwta,iBAAmBA,GACxBxta,KAAKipa,YAAcA,GACnBjpa,KAAKgpa,eAAiBA,GACtBhpa,KAAK0pa,YAAcA,GACnB1pa,KAAK2ua,kBAAmB,EACxB3ua,KAAKwua,SAAW,GAEZ98F,GAAOs7F,EAAOruZ,IAAI+yT,GACtB1xU,KAAK0xU,MAAQA,EAEb,IAAIrrS,EAAOrmC,KAAK0xU,MAAQ1xU,KAAK0xU,MAAM1lS,QAAU,GACzCiqF,EAAQ5vF,EAAK4vF,MACb5vB,EAAOhgE,EAAKggE,KACZyhG,EAAUzhK,EAAKyhK,QAEnB9nM,KAAK8nM,QAAUA,GA9BD,WAChB,IAAIkyF,EAAKh0P,SAASC,cAAc,SAKhC,OADA+zP,EAAG+iB,YAAc,KACV/iB,EAwBqB40I,GAC1B5ua,KAAK8nM,QAAQq0G,aAAa,WAAY,IAClClmL,GAAOj2H,KAAK8nM,QAAQq0G,aAAa,QAASlmL,GAC1C5vB,GAAMrmG,KAAK8nM,QAAQq0G,aAAa,YAAa91M,GACjD,IAAI61M,EAAQmyH,KACRnyH,GAAOl8S,KAAK8nM,QAAQq0G,aAAa,QAASD,GAOhD,IAAIz2Q,EAASipY,EAAYvwa,UA6JzB,OA3JAsnC,EAAOkpT,OAAS,WAEd,IAAI3uV,KAAK8nM,QAAQgmO,YAAe9ta,KAAK0xU,MAArC,EAtGJ,SAAqBp2N,EAAOtvE,GAC1B,IAAI4hY,EAAiB5hY,EAAQ4hY,eACzBiB,EAAWlB,GAAa3hY,GAE5B,IAAiB,IAAb6iY,GAAsBA,EAASnyX,OACjCmyX,EAASnyX,OAAOoyX,aAAaxzT,EAAOuzT,EAASzna,WAK/C,GAAIwma,GAAqD,kBAA5BA,EAAevma,SAA5C,CACE,IAAI0na,EAAwBnB,EACxBE,EAAaiB,EAAsBjB,WACnCA,GAAYA,EAAWgB,aAAaxzT,EAAOyzT,EAAsBf,kBAIvEjyH,KAAUmB,YAAY5hM,GAsFpB0zT,CAAYhva,KAAK8nM,QAAS9nM,KAAK0xU,MAAM1lS,SAGrC,IAAIqgY,EAAWhva,QAAQ2C,KAAK0xU,OAAS1xU,KAAK0xU,MAAM26F,UAE5Crsa,KAAK2ua,kBAAoBtC,IAC3Brsa,KAAK2ua,kBAAmB,EACxB3ua,KAAKssa,YAQT7mY,EAAO+iO,OAAS,WACd,GAAKxoQ,KAAK0xU,MAAV,CACA,IAAIo8F,EAAa9ta,KAAK8nM,QAAQgmO,WAC1BA,GAAYA,EAAW3wH,YAAYn9S,KAAK8nM,SAGxC9nM,KAAK0xU,MAAM1lS,QAAQi+D,OACrBjqG,KAAKwua,SAAW,GAChBxua,KAAK8nM,QAAQi1G,YAAc,QAQ/Bt3Q,EAAO6mY,OAAS,WACd,IAAI56F,EAAQ1xU,KAAK0xU,MACZA,IAEDA,EAAM1lS,QAAQi+D,KAChBjqG,KAAKiva,YAAYv9F,EAAM/nL,OAIzB3pJ,KAAK8nM,QAAQi1G,YAAc,KAAO20B,EAAMzwU,WAAa,OAOvDwkC,EAAOwpY,YAAc,SAAqBtlR,EAAOulR,GAC/C,IAAK,IAAIlsa,EAAI,EAAGA,EAAI2mJ,EAAMxtJ,MAAM0F,OAAQmB,IACtChD,KAAKusa,WAAW5iR,EAAMxtJ,MAAM6G,GAAIA,EAAGksa,IAQvCzpY,EAAO8mY,WAAa,SAAoBxiR,EAAM5tJ,EAAO+ya,GAKnD,QAJqB,IAAjBA,IACFA,EAAelva,KAAK8nM,QAAQ4pI,OAG1B3nL,EAAKJ,MAAO,CACd,IAAIjtG,EAASqtG,EACTolR,EAAqBD,EAEzB,GAAkB,gBAAdnlR,EAAK7pJ,MAAwC,cAAd6pJ,EAAK7pJ,KAAsB,CAC5D,IAAIkva,EAAkBX,GAA2BS,EAAc/ya,GAO/D,IAA2B,KAJ3Bgza,EAAqBb,GAAYY,EAAcxyX,EAAOz7C,SAAS,CAC7DqlC,UAAU,IACR8oY,IAGF,OAAO,EAGTpva,KAAKqva,WAAWtlR,EAAMqlR,EAAiBD,GAIzC,OADAnva,KAAKiva,YAAYvyX,EAAOitG,MAAOwlR,GACxBA,EAGT,IAAIG,EAAUvlR,EAAK9oJ,WACnB,IAAKqua,EAAS,OAAO,EACrB,IAAIC,EAAiBd,GAA2BS,EAAc/ya,GAE1Dqza,EAAalB,GAAYY,EAAcI,EAASC,GAEpD,OAAmB,IAAfC,IAIJxva,KAAK2ua,kBAAmB,EACxB3ua,KAAKqva,WAAWtlR,EAAMwlR,EAAgBC,GAC/BA,IAGT/pY,EAAO4pY,WAAa,SAAoBtlR,EAAM5tJ,EAAOsxa,GACnD1jR,EAAKg/Q,WAAa0E,EAGd1jR,EAAK/9G,QAAQ0Q,kBAAkB0vX,IACjCpsa,KAAKwua,SAASrya,GAASsxa,IAQ3BhoY,EAAOgnY,WAAa,SAAoBgB,GACtC,IAAI/7F,EAAQ1xU,KAAK8nM,QAAQ4pI,MACrBv1U,EAAQ6D,KAAKwgB,QAAQitZ,GACzB,OAAe,IAAXtxa,IACJu1U,EAAM+6F,WAAWtwa,GACjB6D,KAAKwua,SAASp/Z,OAAOjT,EAAO,IACrB,IAOTspC,EAAOjlB,QAAU,SAAiBitZ,GAChC,OAAOzta,KAAKwua,SAAShuZ,QAAQitZ,IAS/BhoY,EAAOkkY,YAAc,SAAqB8D,EAAS1jR,GACjD,IAAI5tJ,EAAQ6D,KAAKwgB,QAAQitZ,GACzB,OAAe,IAAXtxa,IACJ6D,KAAK8nM,QAAQ4pI,MAAM+6F,WAAWtwa,GAC9B6D,KAAKwua,SAASp/Z,OAAOjT,EAAO,GACrB6D,KAAKusa,WAAWxiR,EAAM5tJ,KAO/BspC,EAAOgqY,SAAW,WAChB,OAAOzva,KAAK8nM,QAAQ4pI,MAAM88F,UAGrBE,EA5LT,GA+LIgB,GAAkB,EAElBC,GAEJ,WACE,SAASA,EAAI3jY,GACXhsC,KAAKihC,GAAKyuY,KACV1va,KAAK0pB,QAAU,SACf1pB,KAAKstM,QAAU,IAAIq/N,EACnB3sa,KAAKgsC,QAAU,CACb/K,GAAI,CACFssY,QAAQ,GAEVJ,iBAAkBA,GAClBpgT,SAAU6iT,IAAclB,GAAc,KACtCphO,QAAS,IAEXttM,KAAKspa,WAAa6D,GAAiB,CACjCI,QAAQ,IAGV,IAAK,IAAIvqa,EAAI,EAAGA,EAAIsqM,EAAQzrM,OAAQmB,IAClChD,KAAKstM,QAAQx8C,IAAIw8C,EAAQtqM,GAAI,CAC3BupJ,MAAO,aAIXvsJ,KAAKqmM,MAAMr6J,GASb,IAAIvG,EAASkqY,EAAIxxa,UAuHjB,OArHAsnC,EAAO4gK,MAAQ,SAAer6J,GAyB5B,YAxBgB,IAAZA,IACFA,EAAU,IAGRA,EAAQmhY,mBACVnta,KAAKgsC,QAAQmhY,iBAAmBnhY,EAAQmhY,kBAGtCnhY,EAAQ/K,KACVjhC,KAAKgsC,QAAQ/K,GAAK6I,YAAS,GAAI9pC,KAAKgsC,QAAQ/K,GAAI+K,EAAQ/K,MAGtD+K,EAAQmhY,kBAAoBnhY,EAAQ/K,MACtCjhC,KAAKspa,WAAatpa,KAAKgsC,QAAQmhY,iBAAiBnta,KAAKgsC,QAAQ/K,KAGjC,MAA1B+K,EAAQ4hY,iBAAwB5ta,KAAKgsC,QAAQ4hY,eAAiB5hY,EAAQ4hY,gBAEtE,aAAc5hY,IAChBhsC,KAAKgsC,QAAQ+gF,SAAW/gF,EAAQ+gF,UAI9B/gF,EAAQshK,SAASttM,KAAK8wJ,IAAI7oJ,MAAMjI,KAAMgsC,EAAQshK,SAC3CttM,MAOTylC,EAAOoqY,iBAAmB,SAA0Bj0V,EAAQ5vC,QAC1C,IAAZA,IACFA,EAAU,IAGZ,IACI7vC,EADW6vC,EACM7vC,MAEA,kBAAVA,IACTA,EAAyB,IAAjB6wa,EAAO7wa,MAAc,EAAI6wa,EAAO7wa,MAAQ,GAGlD,IAAIu1U,EAAQ,IAAI06F,EAAWxwV,EAAQ9xC,YAAS,GAAIkC,EAAS,CACvDs7X,IAAKtna,KACLspa,WAAYt9X,EAAQs9X,YAActpa,KAAKspa,WACvCsE,eAAgB5ta,KAAKgsC,QAAQ4hY,eAC7B7gT,SAAU/sH,KAAKgsC,QAAQ+gF,SACvB5wH,MAAOA,KAGT,OADA6D,KAAKstM,QAAQu/N,eAAen7F,GACrBA,GAOTjsS,EAAOqqY,iBAAmB,SAA0Bp+F,GAGlD,OAFAA,EAAMlpE,SACNwkK,EAAO99Z,OAAOwiU,GACP1xU,MAQTylC,EAAO2hY,WAAa,SAAsB54Z,EAAM8sG,EAAOtvE,GAUrD,QATc,IAAVsvE,IACFA,EAAQ,SAGM,IAAZtvE,IACFA,EAAU,IAIQ,kBAATx9B,EACT,OAAOxO,KAAKona,gBAAWtra,EAAW0S,EAAM8sG,GAG1C,IAAIuwT,EAAc/hY,YAAS,GAAIkC,EAAS,CACtCx9B,KAAMA,EACN84Z,IAAKtna,KACL+sH,SAAU/sH,KAAKgsC,QAAQ+gF,WAGpB8+S,EAAYvC,aAAYuC,EAAYvC,WAAatpa,KAAKspa,YACtDuC,EAAY3yV,UAAS2yV,EAAY3yV,QAAU,IAC3C2yV,EAAYp5F,YAAWo5F,EAAYp5F,UAAY,IAEpD,IAAI1oL,EAAOq9Q,EAAW54Z,EAAM8sG,EAAOuwT,GAGnC,OADI9hR,GAAM/pJ,KAAKstM,QAAQ68N,cAAcpgR,GAC9BA,GAOTtkH,EAAOqrH,IAAM,WAGX,IAFA,IAAIn5G,EAAQ33C,KAEH+qB,EAAOrnB,UAAU7B,OAAQyrM,EAAU,IAAI7rM,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAClFqiL,EAAQriL,GAAQvnB,UAAUunB,GAM5B,OAHAqiL,EAAQ5gM,SAAQ,SAAU8gM,GACxB71J,EAAM21J,QAAQx8C,IAAI08C,MAEbxtM,MAGF2va,EAvJT,GA0JII,GAAY,SAAmB/jY,GACjC,OAAO,IAAI2jY,GAAI3jY,IA4EbgkY,GAAkC,kBAARl5E,KAA2B,MAAPA,KAAe,WAAYA,IAK7E,SAASm5E,GAAiBr0V,GACxB,IAAI3sE,EAAK,KAET,IAAK,IAAI3K,KAAOs3E,EAAQ,CACtB,IAAIlgF,EAAQkgF,EAAOt3E,GACfpE,SAAcxE,EAElB,GAAa,aAATwE,EACG+O,IAAIA,EAAK,IACdA,EAAG3K,GAAO5I,OACL,GAAa,WAATwE,GAA+B,OAAVxE,IAAmB+F,MAAMC,QAAQhG,GAAQ,CACvE,IAAI+rJ,EAAYwoR,GAAiBv0a,GAE7B+rJ,IACGx4I,IAAIA,EAAK,IACdA,EAAG3K,GAAOmjJ,IAKhB,OAAOx4I,EAUG8ga,M,wbC3oEL,SAAS51E,EAEdJ,EACApV,GAGA,OAAO,cAAgBwV,iBAAiBJ,EAAW,YAA+BpV,IA8B7E,SAAS2V,EAAanzN,EAAcw9M,GAEzC,OAAO,cAAgB2V,aAAanzN,EAAOw9M,GAwBtC,SAASmW,EAAcP,EAAwB5V,GAEpD,cAAgBmW,cAAcP,EAAY5V,GASrC,SAAS2W,EAAW9sV,EAActF,GAEvC,cAAgBoyV,WAAW9sV,EAAMtF,GA8E5B,SAASgna,IAEX,IAEH,IAAMvzE,EAAM,cAFT,mBADAr4U,EACA,yBADAA,EACA,gBAKH,GAAoB,IAAhBA,EAAKziB,OAAc,CACrB,IAAOm3V,EAAmB10U,EAA1B,GAAcsgB,EAAYtgB,EAA1B,GACA,OAAK00U,EAME2D,EAAIuzE,WAAU,WAGnB,OADAvzE,EAAInD,cAAcR,MAAQA,EACnBp0T,EAASo0T,MAPT2D,EAAIuzE,UAAUtrY,GAYzB,OAAO+3T,EAAIuzE,UAAU5rZ,EAAK,IAoLrB,SAAS2jS,IAEd,OAAO,cAAgBA,YAalB,SAASkoH,IAEd,OAAO,cAAgBz2E,WAUlB,SAAS02E,EAAalna,GAC3B,IAAMkkM,EAAS66G,IACTgxC,EAAiB,cACjBo3E,EAAeF,IAErB,EAAwD/iO,GAAUA,EAAOotJ,cAAiB,GAAlFjnF,EAAR,EAAQA,QAAR,IAAiB2oF,mBAAjB,MAA+B,IAA/B,EAGQ/qJ,GAAc,IAAWH,WAAa,IAAtCG,UAEF9mG,EAAU,YAAY,yBAC1BkpK,UACA2oF,cACA/xP,KAAMkmU,EAAal0E,WAAalD,EAAekD,WAC3ChrJ,GAAa,CAAEA,cAChBjoM,IAICkzV,EAAiBnD,EAAe+C,aActC,OAbII,GAA4C,OAA1BA,EAAe32P,QACnC,YAAc22P,EAAgB,CAAE32P,OAAQ,WAG1Cq2P,IAGA7C,EAAegD,WAAW5xP,GAI1BgmU,EAAap0E,WAAW5xP,GAEjBA,EAMF,SAASyxP,IACd,IAAM7C,EAAiB,cACjBo3E,EAAeF,IAEf9lU,EAAUgmU,EAAar0E,cAAgB/C,EAAe+C,aACxD3xP,GACF,YAAaA,GAEf0xP,IAGA9C,EAAegD,aAIfo0E,EAAap0E,aAMf,SAASF,IACP,IAAM9C,EAAiB,cACjBo3E,EAAeF,IACf/iO,EAAS66G,IAGT59M,EAAUgmU,EAAar0E,cAAgB/C,EAAe+C,aACxD3xP,GAAW+iG,GAAUA,EAAOkvJ,gBAC9BlvJ,EAAOkvJ,eAAejyP,GAUnB,SAASiyP,IAA2C,IAA5B9/V,EAA4B,wDAErDA,EACFs/V,IAKFC,M,6BC9fa,SAASnyE,EAAOnuR,EAAKC,GACf,oBAARD,EACTA,EAAIC,GACKD,IACTA,EAAIqsC,QAAUpsC,GALlB,mC,6BCAA,IA4Ce0T,EA5CF,SAAgBvL,EAAO1H,EAAO8pB,EAAWvqB,GAGpD,GAAIS,GAFJ0H,EAAQA,GAAS,IAEChC,OAAQ,CACxB,QAAc/F,IAAVJ,IAAwBuqB,EAAW,CAErC,IAAIqqZ,EAAS,GAAGhla,OAAOzH,GAOvB,OALAysa,EAAOlha,OAAOjT,EAAO,GAAG,GAGxBm0a,EAAOn0a,QAASL,EAETw0a,EAGT,GAAa,MAAT50a,EAAe,CACjB,IAAI60a,EAAS,GAAGjla,OAAOzH,GAKvB,OAHA0sa,EAAOnha,OAAOjT,EAAO8pB,EAAWvqB,GAGzB60a,EAGT,IAAIC,EAAQ,GAAGlla,OAAOzH,GAKtB,OAHA2sa,EAAMpha,OAAOjT,EAAO8pB,GAGbuqZ,EAGT,GAAIvqZ,EAEF,OAAOpiB,EAIT,IAAIq+I,EAAO,GAAG52I,OAAOzH,GAErB,OADAq+I,EAAK/lJ,GAAST,EACPwmJ,G,kBCjBMthI,EAtBH,SAAeomB,EAAO6vN,GAChC,IAAK7vN,EACH,OAAOA,EAGT,IAAI+iF,EAAO0mT,IAAQ55K,GAEfh1P,EAASkoH,EAAKloH,OAElB,GAAKA,EAAL,CAMA,IAFA,IAAI+R,EAASozB,EAEJhkC,EAAI,EAAGA,EAAInB,GAAU+R,IAAU5Q,EACtC4Q,EAASA,EAAOm2G,EAAK/mH,IAGvB,OAAO4Q,I,kBClBL88Z,EAAgB,SAASA,EAAc1pY,EAAOtrC,EAAOquH,EAAM4mT,GAC7D,IAAI7pN,EAEJ,GAAI6pN,GAAa5mT,EAAKloH,OACpB,OAAOnG,EAGT,IAAI0nB,EAAQ2mG,EAAK4mT,GAEb5wa,EAAO2wa,EADM1pY,IAAUvlC,MAAMC,QAAQslC,GAASA,EAAMrlC,OAAOyhB,IAAU4jB,EAAM5jB,IAC1C1nB,EAAOquH,EAAM4mT,EAAY,GAE9D,IAAK3pY,EAAO,CAER,IAAIX,EADN,GAAI+V,MAAMh5B,GAGR,OAAOijB,EAAO,IAASjjB,GAASrjB,EAAMsmC,EAGxC,IAAIuS,EAAc,GAElB,OADAA,EAAYgD,SAASx4B,EAAO,KAAOrjB,EAC5B64C,EAGT,GAAIn3C,MAAMC,QAAQslC,GAAQ,CACxB,IAAIk7G,EAAO,GAAG52I,OAAO07B,GAErB,OADAk7G,EAAKtmG,SAASx4B,EAAO,KAAOrjB,EACrBmiJ,EAGT,OAAOp4G,IAAS,GAAI9C,IAAQ8/K,EAAY,IAAc1jM,GAASrjB,EAAM+mN,KAOxD52M,EAJH,SAAe82B,EAAO6vN,EAAOn7P,GACvC,OAAOg1a,EAAc1pY,EAAOtrC,EAAO+0a,IAAQ55K,GAAQ,I,oDChCjDt0O,EAAU,SAAiBzb,GAC7B,OAAO8pa,IAAO9pa,IAAgB,KAARA,GAAcs1C,MAAMt1C,IAGxC+zK,EAAa,SAAoB/zK,EAAK6Z,GACxC,OAAI7Z,IAAQ6Z,IAEP7Z,GAAQ6Z,IAIT7Z,IAAO6Z,GAAS7Z,EAAI+pa,SAAWlwZ,EAAMkwZ,YACrC/pa,IAAO6Z,GAAS7Z,EAAIgqa,WAAanwZ,EAAMmwZ,aACvCrsY,IAAM6V,eAAexzC,KAAQ29B,IAAM6V,eAAe35B,SAAtD,IALS4B,EAAQzb,KAASyb,EAAQ5B,KCTpC,SAASowZ,EAAiB/pY,EAAO5jB,GAC/B,QAActnB,IAAVkrC,GAAiC,OAAVA,QAA4BlrC,IAAVsnB,GAAiC,OAAVA,EAClE,OAAO4jB,EAGT,IAAK,IAAIjc,EAAOrnB,UAAU7B,OAAQyiB,EAAO,IAAI7iB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClG3G,EAAK2G,EAAO,GAAKvnB,UAAUunB,GAG7B,GAAI3G,EAAKziB,OAAQ,CACf,GAAIJ,MAAMC,QAAQslC,GAAQ,CACxB,GAAIoV,MAAMh5B,GACR,MAAM,IAAIxb,MAAM,kDAAqDiH,OAAOuU,GAAS,MAGvF,IAAIq/Q,EAAa9gS,OAAOyhB,GAExB,GAAIq/Q,EAAaz7P,EAAMnlC,OAAQ,CAC7B,IAAI+R,EAASm9Z,EAAiB9oa,WAAM,EAAQ,CAAC++B,GAASA,EAAMy7P,IAAan3R,OAAOgZ,IAEhF,GAAI1Q,IAAWozB,EAAMy7P,GAAa,CAChC,IAAIvgJ,EAAO,GAAG52I,OAAO07B,GAErB,OADAk7G,EAAKugJ,GAAc7uR,EACZsuI,GAIX,OAAOl7G,EAGT,GAAI5jB,KAAS4jB,EAAO,CAClB,IAAI8/K,EAEAkqN,EAAUD,EAAiB9oa,WAAM,EAAQ,CAAC++B,GAASA,EAAM5jB,IAAQ9X,OAAOgZ,IAE5E,OAAO0iB,EAAM5jB,KAAW4tZ,EAAUhqY,EAAQ8C,IAAS,GAAI9C,IAAQ8/K,EAAY,IAAc1jM,GAAS4tZ,EAASlqN,IAG7G,OAAO9/K,EAGT,GAAIvlC,MAAMC,QAAQslC,GAAQ,CACxB,GAAIoV,MAAMh5B,GACR,MAAM,IAAIxb,MAAM,4DAA+DiH,OAAOuU,IAGxF,IAAI6tZ,EAActva,OAAOyhB,GAEzB,GAAI6tZ,EAAcjqY,EAAMnlC,OAAQ,CAC9B,IAAI2ua,EAAQ,GAAGlla,OAAO07B,GAItB,OAFAwpY,EAAMpha,OAAO6ha,EAAa,GAEnBT,EAGT,OAAOxpY,EAGT,GAAI5jB,KAAS4jB,EAAO,CAClB,IAAIspY,EAASxmY,IAAS,GAAI9C,GAG1B,cADOspY,EAAOltZ,GACPktZ,EAGT,OAAOtpY,ECvDMllC,ICRXova,EAAY,CACdjxB,mBAAmB,EACnB9nY,MAAO,GACPC,UAAW,GACXwI,MAAOA,EACP1Q,MAAOA,EACP0N,UHQc,SAAmBjY,EAAGC,GACpC,OAAOura,IAAaxra,EAAGC,EAAGi1K,IGR1BxqK,SF2Da,SAAkB22B,EAAO6vN,GACtC,OAAOk6K,EAAiB9oa,WAAM,EAAQ,CAAC++B,GAAO17B,OAAOmla,IAAQ55K,ME3D7DnqP,QAAS,SAAiBs6P,EAAOpiO,GAC/B,OAAOoiO,EAAMt6P,QAAQk4B,IAEvBxb,OAAQ,SAAgB1tB,GACtB,OAAOA,GAEToG,KDpBF,SAAcpG,GACZ,OAAKA,EAID+F,MAAMC,QAAQhG,GACTA,EAAMsN,KAAI,SAAUhG,GACzB,OAAOA,EAAEwL,QAINpQ,OAAO0D,KAAKpG,GATV,ICmBTK,KAAM,SAAc8H,GAClB,OAAOA,EAAQA,EAAMhC,OAAS,GAEhC4L,KAAM,SAAcu5P,EAAOpiO,GACzB,OAAOoiO,EAAMv5P,KAAKm3B,IAEpBx1B,OAAQA,EACRhK,OAAQ,SAAgBO,EAAGC,GACzB,OAAOA,EAAE2H,OAAM,SAAU0I,GACvB,OAAQtQ,EAAE6a,QAAQvK,OAGtBkqY,aAAc,SAAsBx6Y,EAAGC,GACrC,OAAOA,EAAE6H,MAAK,SAAUwI,EAAK9Z,GAC3B,OAAO8Z,IAAQtQ,EAAExJ,OAGrBoiB,KAAM,SAAc7iB,GAClB,OAAOA,IAGIw1a,O,0NCTFxgG,EAAiB,gBAUxBC,E,4MAEG1S,YAAc,WACnB,IACEtzR,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIurU,IACJ7hQ,MAAM,KAGRhgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIkmS,IACJx8N,MAAM,M,EAIHymU,oBAAsB,WAC3B,IACEzmY,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIurU,IACJ7hQ,MAAM,KAGRhgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIkmS,IACJx8N,MAAM,KAGRhgE,EAAS,IAAI8J,IAAiC,CAC5CkH,QAASy0R,IACTnvS,GAAIkmS,Q,EAIDkqG,oBAAsB,WAC3B,IACE1mY,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIkmS,IACJx8N,MAAM,KAGRhgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIurU,IACJ7hQ,MAAM,KAGRhgE,EAAS,IAAI8J,IAAiC,CAC5CkH,QAAS8wT,IACTxrU,GAAIurU,Q,4CAIR,WACE,MAIIxsW,KAAKkqC,MAHPgvC,EADF,EACEA,QACAo4V,EAFF,EAEEA,WACAvlZ,EAHF,EAGEA,EAGF,OACE,eAAC,IAAD,WACE,cAAC,IAAD,CACEm+F,MAAOonT,IAAe9kE,IAAoBzgV,EAAE,6CAA+CA,EAAE,6CAC7Fm7G,YAAalnI,KAAKi+T,cAEpB,cAAC,IAAD,CACE9rK,QAASm/Q,IAAe9kE,IAAoBzgV,EAAE,mDAAqDA,EAAE,qDAEvG,eAAC,IAAD,CACEytD,WAAW,EACXgB,KAAK,SACLV,QAAQ,eAHV,UAKE,cAAC,IAAD,CACEV,UAAWF,EAAQi0C,OACnBlnB,MAAM,UACN4e,QAAS7kH,KAAKqxa,oBAHhB,SAKGtlZ,EAAE,4CAEL,cAAC,IAAD,CACEqtD,UAAWF,EAAQi0C,OACnBlnB,MAAM,UACN4e,QAAS7kH,KAAKoxa,oBAHhB,SAKGrlZ,EAAE,sD,GA7Fa0Y,aAiIbwwC,sBACbgG,aA7Ba,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ6jE,QAAS,QAEX+xC,OAAQ,CACN7Q,UAAWphC,EAAMZ,QAAQ,QAyB3Bn7B,YAAgB,gBAChB0/D,mBAtBsB,SAAC73E,EAAOkD,GAC9B,OAAO4I,YAAyB,CAK9Bw+X,WAAYzzN,eALP/qK,CAMJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACLA,eAOWsqC,CAIb07P,I,6BChLF,kTAAO,IACM4gG,EAAc,oBACdC,EAAa,eACbC,EAAmB,iBACnBC,EAAmB,iBAEnBC,EAA0B,eAC1BC,EAAyB,YACzBC,EAA2B,cAC3BC,EAAyB,gBAGzBC,EAAmB,e,6BCZzB,IAAKC,EAKAC,EALZ,kC,SAAYD,K,kBAAAA,E,iBAAAA,M,cAKAC,K,gEAAAA,E,wEAAAA,E,oFAAAA,E,iEAAAA,M,mCCLZ,uFAkEInxS,EAAcr8F,IAAM8E,YAAW,SAAqBW,EAAOzuC,GAC7D,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cp4E,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,MAAQA,EAClDsqM,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDuuJ,EAAehoY,EAAM/7B,MACrBA,OAAyB,IAAjB+ja,GAAkCA,EAC1CjuJ,EAAmB/5O,EAAM2vE,UACzBA,OAAiC,IAArBoqK,GAAsCA,EAClDkuJ,EAAqBjoY,EAAMkoY,YAC3BA,OAAqC,IAAvBD,GAAwCA,EACtDE,EAAgBnoY,EAAMqxC,OACtBA,OAA2B,IAAlB82V,EAA2B,OAASA,EAC7CC,EAAkBpoY,EAAM84J,SACxBA,OAA+B,IAApBsvO,GAAqCA,EAChDv2a,EAAOmuC,EAAMnuC,KACbi2J,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,WAAaA,EACnDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,QAAS,YAAa,WAAY,QAAS,YAAa,cAAe,SAAU,WAAY,OAAQ,YAElL65F,EAAkBt/F,IAAMia,UAAS,WAGnC,IAAI6zX,GAAsB,EAgB1B,OAdIjsY,GACF7B,IAAM+iG,SAAS96H,QAAQ45B,GAAU,SAAU4T,GACzC,GAAKguF,YAAahuF,EAAO,CAAC,QAAS,WAAnC,CAIA,IAAIuqE,EAAQyjB,YAAahuF,EAAO,CAAC,WAAaA,EAAMhQ,MAAMu6E,MAAQvqE,EAE9DuqE,GAAS+tT,YAAe/tT,EAAMv6E,SAChCqoY,GAAsB,OAKrBA,KAELE,EAAe1uS,EAAgB,GAC/B2uS,EAAkB3uS,EAAgB,GAElC2jJ,EAAmBjjP,IAAMia,UAAS,WAGpC,IAAIi0X,GAAgB,EAcpB,OAZIrsY,GACF7B,IAAM+iG,SAAS96H,QAAQ45B,GAAU,SAAU4T,GACpCguF,YAAahuF,EAAO,CAAC,QAAS,YAI/B04X,YAAS14X,EAAMhQ,OAAO,KACxByoY,GAAgB,MAKfA,KAEL5N,EAASr9I,EAAiB,GAC1BmrJ,EAAYnrJ,EAAiB,GAE7Bc,EAAmB/jP,IAAMia,UAAS,GAClCgoQ,EAAUl+B,EAAiB,GAC3BsqJ,EAAatqJ,EAAiB,GAE9BtrK,GAAYwpM,GACdosH,GAAW,GAqBb,IAAIC,EAAWtuY,IAAMykF,aAAY,WAC/B2pT,GAAU,KACT,IAIC5M,EAAe,CACjBwM,aAAcA,EACdC,gBAAiBA,EACjBzsU,MAAOA,EACPiX,SAAUA,EACV/uG,MAAOA,EACP42Z,OAAQA,EACRr+G,QAASA,EACT0rH,YAAaA,EACb72V,QAAkB,UAATx/E,EAAmB,aAAUD,IAAcy/E,EACpDmqD,OAAQ,WACNotS,GAAW,IAEbE,QAhBYvuY,IAAMykF,aAAY,WAC9B2pT,GAAU,KACT,IAeDE,SAAUA,EACVhqU,QAAS,WACP+pU,GAAW,IAEbG,eA1CEA,UA2CFjwO,SAAUA,EACVtpF,QAASA,GAEX,OAAOj1E,IAAMwB,cAAcitY,IAAmB9sY,SAAU,CACtD1qC,MAAOuqa,GACNxhY,IAAMwB,cAAc0T,EAAW7P,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAsB,SAAXmC,GAAqBrC,EAAQ,SAAS5tE,OAAOk5H,YAAWjpD,KAAWs+B,GAAa3gC,EAAQ2gC,WACjIp+G,IAAKA,GACJklB,GAAQ2lB,OAwEE20C,gBAlQK,CAElB1jE,KAAM,CACJ6jE,QAAS,cACTK,cAAe,SACfwhC,SAAU,WAEVzhC,SAAU,EACVM,QAAS,EACTP,OAAQ,EACRs/C,OAAQ,EACRutO,cAAe,OAKjB+qE,aAAc,CACZ72T,UAAW,GACX+W,aAAc,GAIhB+xS,YAAa,CACX9oT,UAAW,EACX+W,aAAc,GAIhBxZ,UAAW,CACTv+B,MAAO,SAqOuB,CAChC9sE,KAAM,kBADOysE,CAEZ6lD,I,4FC3QGsyS,EAAc,sBAEdC,EAA0B,CAExBh1a,OAFwB,SAEjBipG,EAAUvgD,EAAe/L,GAA0B,OAAD,8HAErDg2Q,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHkB,SAIpCusX,EAAUC,KAAV,wCAAwDv4X,GAJpB,cAIrD+tE,EAJqD,yBAKpDA,GALoD,sCAQ3D/gG,QAAQ7Z,MAAM,+BAAd,MAR2D,iEAazDqla,mBAfwB,SAeLlsU,EAAUvgD,EAAex7C,GAA4B,OAAD,oIAEnEylT,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACrCw/C,EAJqE,oDAKrEh7F,IACEkoa,EAAc11Z,IAAE67K,UAAUruL,GAC9Bkoa,EAAcvjB,IAAkBwjB,iBAAiBD,GACjDltU,GAAQ,kBAAeqtG,mBAAmBjlM,KAAKC,UAAU6ka,MARc,SAUpDH,EAAUK,sBAAsBptU,GAVoB,cAUnE3yF,EAVmE,OAWnE2tZ,EAAe,CACnBjwG,QAAS19S,EAAO09S,QAChBl8S,MAAK,OAAExB,QAAF,IAAEA,OAAF,EAAEA,EAAQwB,MACf4lC,KAAI,OAAEpnC,QAAF,IAAEA,OAAF,EAAEA,EAAQszB,QAAR,gBAdiE,kBAgBlEq6X,GAhBkE,wCAmBzEv5Y,QAAQ7Z,MAAM,gCAAd,MAnByE,kEAwBvEyla,SAvCwB,SAuCftsU,EAAUvgD,EAAex7C,GAA4B,OAAD,kIAEzDylT,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACrCw/C,EAJ2D,0CAK3Dh7F,IACFg7F,GAAQ,kBAAeqtG,mBAAmBjlM,KAAKC,UAAUrD,MANI,SAQxC+na,EAAUO,UAAUttU,GARoB,oBAQzDwiB,EARyD,kBAS3DA,GAT2D,UAS3DA,EAAU7hF,eATiD,aAS3D,EAAmB4sY,gBATwC,0CAUtD/qT,EAAS7hF,QAAQ4sY,gBAVqC,iCAYtD,MAZsD,gEAgB/D9rZ,QAAQ7Z,MAAM,iCAAd,MAhB+D,kEAqB7DmC,OA5DwB,SA4DjBg3F,EAAUvgD,EAAegtX,EAAsB/4X,GAA0B,OAAD,8HAE3Eg2Q,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHwC,SAI1DusX,EAAUhja,OAAV,iDAAmEyja,EAAc/4X,GAJvB,cAI3E+tE,EAJ2E,yBAK1EA,GAL0E,sCAQjF/gG,QAAQ7Z,MAAM,+BAAd,MARiF,iEAa/E6la,cAzEwB,SAyEV1sU,EAAUvgD,EAAegtX,EAAsB/4X,GAA0B,OAAD,8HAElFg2Q,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH+C,SAIjEusX,EAAUhja,OAAV,wDAA0Eyja,EAAc/4X,GAJvB,cAIlF+tE,EAJkF,yBAKjFA,GALiF,sCAQxF/gG,QAAQ7Z,MAAM,mDAAd,MARwF,iEAatFq6G,OAtFwB,SAsFjBlhB,EAAUvgD,EAAegtX,GAAqC,OAAD,8HAEhE/iH,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH6B,SAI/CusX,EAAU9qT,OAAV,yDAAmEurT,IAJpB,cAIhEhrT,EAJgE,yBAK/DA,GAL+D,sCAQtE/gG,QAAQ7Z,MAAM,+BAAd,MARsE,iEAapE8la,uBAnGwB,SAmGD3sU,EAAUvgD,EAAegtX,EAAsBx8D,GAAiC,OAAD,oIAElGvmD,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAErCw/C,EALoG,0DAKtCwtU,GAC9Dx8D,IACIhsW,EAAS,CACbgsW,YAEFhxQ,GAAQ,kBAAeqtG,mBAAmBjlM,KAAKC,UAAUrD,MAV6C,SAYjF+na,EAAUO,UAAUttU,GAZ6D,oBAYlGwiB,EAZkG,kBAapGA,GAboG,UAapGA,EAAU7hF,eAb0F,aAapG,EAAmB4sY,gBAbiF,0CAc/F/qT,EAAS7hF,QAAQ4sY,gBAd8E,iCAgB/F,MAhB+F,gEAoBxG9rZ,QAAQ7Z,MAAM,yCAAd,MApBwG,kEAyBtG+la,2BA5HwB,SA4HG5sU,EAAUvgD,EAAex7C,GAA4B,OAAD,kIAE3EylT,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACrCw/C,EAJ6E,kDAK7Eh7F,IACFg7F,GAAQ,kBAAeqtG,mBAAmBjlM,KAAKC,UAAUrD,MANsB,SAQ1D+na,EAAUO,UAAUttU,GARsC,oBAQ3EwiB,EAR2E,kBAS7EA,GAT6E,UAS7EA,EAAU7hF,eATmE,aAS7E,EAAmB4sY,gBAT0D,0CAUxE/qT,EAAS7hF,QAAQ4sY,gBAVuD,iCAYxE,MAZwE,gEAgBjF9rZ,QAAQ7Z,MAAM,yCAAd,MAhBiF,kEAqB/Egma,qCAjJwB,SAiJa7sU,EAAUvgD,EAAex7C,GAA4B,OAAD,oIAErFylT,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACzB,GACZ0sX,EAAc11Z,IAAE67K,UAAUruL,GAC9Bkoa,EAAcvjB,IAAkBkkB,YAAYX,GAC5CA,EAAcvjB,IAAkBwjB,iBAAiBD,GACjDY,EAAYzgO,mBAAmBjlM,KAAKC,UAAU6ka,IAR6C,UAStEH,EAAUK,sBAAsB,0DAA4DU,GATtB,eASrFzga,EATqF,OAUrF2tZ,EAAe,CACnBjwG,QAAS19S,EAAO09S,QAChBl8S,MAAK,OAAExB,QAAF,IAAEA,OAAF,EAAEA,EAAQwB,MACf4lC,KAAI,OAAEpnC,QAAF,IAAEA,OAAF,EAAEA,EAAQszB,QAAR,gBAbmF,kBAepFq6X,GAfoF,wCAkB3Fv5Y,QAAQ7Z,MAAM,sDAAd,MAlB2F,mEAyBlFkla,O,6BC/Hfn4a,EAAOC,QA5BS,SAAS+S,EAAWusC,EAAQ90C,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAOzD,IAAKxoE,EAAW,CACd,IAAIC,EACJ,QAAerS,IAAX2+C,EACFtsC,EAAQ,IAAIvG,MACV,qIAGG,CACL,IAAIojB,EAAO,CAACrlB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACvB49V,EAAW,GACfnma,EAAQ,IAAIvG,MACV6yC,EAAOm+B,QAAQ,OAAO,WAAa,OAAO5tD,EAAKspZ,UAE3C9la,KAAO,sBAIf,MADAL,EAAMqhQ,YAAc,EACdrhQ,K,6BCrCV,SAASoma,IAEP,IAAIvtY,EAAQhnC,KAAK1B,YAAYsyQ,yBAAyB5wQ,KAAKkqC,MAAOlqC,KAAKgnC,OACzD,OAAVA,QAA4BlrC,IAAVkrC,GACpBhnC,KAAK4iH,SAAS57E,GAIlB,SAASwtY,EAA0BnxT,GAQjCrjH,KAAK4iH,SALL,SAAiBquJ,GACf,IAAIjqO,EAAQhnC,KAAK1B,YAAYsyQ,yBAAyBvtJ,EAAW4tJ,GACjE,OAAiB,OAAVjqO,QAA4BlrC,IAAVkrC,EAAsBA,EAAQ,MAGnCllB,KAAK9hB,OAG7B,SAASy0a,EAAoBpxT,EAAW54F,GACtC,IACE,IAAI4zF,EAAYr+G,KAAKkqC,MACjB+mO,EAAYjxQ,KAAKgnC,MACrBhnC,KAAKkqC,MAAQm5E,EACbrjH,KAAKgnC,MAAQvc,EACbzqB,KAAK00a,6BAA8B,EACnC10a,KAAK20a,wBAA0B30a,KAAK40a,wBAClCv2T,EACA4yJ,GARJ,QAWEjxQ,KAAKkqC,MAAQm0E,EACbr+G,KAAKgnC,MAAQiqO,GAUjB,SAAS4jK,EAASl7X,GAChB,IAAIx7C,EAAYw7C,EAAUx7C,UAE1B,IAAKA,IAAcA,EAAU22a,iBAC3B,MAAM,IAAIlta,MAAM,sCAGlB,GACgD,oBAAvC+xC,EAAUi3N,0BAC4B,oBAAtCzyQ,EAAUy2a,wBAEjB,OAAOj7X,EAMT,IAAIo7X,EAAqB,KACrBC,EAA4B,KAC5BC,EAAsB,KAgB1B,GAf4C,oBAAjC92a,EAAUo2a,mBACnBQ,EAAqB,qBACmC,oBAAxC52a,EAAU+2a,4BAC1BH,EAAqB,6BAE4B,oBAAxC52a,EAAUq2a,0BACnBQ,EAA4B,4BACmC,oBAA/C72a,EAAUg3a,mCAC1BH,EAA4B,oCAEe,oBAAlC72a,EAAUs2a,oBACnBQ,EAAsB,sBACmC,oBAAzC92a,EAAUi3a,6BAC1BH,EAAsB,8BAGC,OAAvBF,GAC8B,OAA9BC,GACwB,OAAxBC,EACA,CACA,IAAIr7F,EAAgBjgS,EAAUpxB,aAAeoxB,EAAUnrC,KACnD6ma,EAC4C,oBAAvC17X,EAAUi3N,yBACb,6BACA,4BAEN,MAAMhpQ,MACJ,2FACEgyU,EACA,SACAy7F,EACA,uDACwB,OAAvBN,EAA8B,OAASA,EAAqB,KAC9B,OAA9BC,EACG,OAASA,EACT,KACqB,OAAxBC,EAA+B,OAASA,EAAsB,IATjE,wIA0BJ,GARkD,oBAAvCt7X,EAAUi3N,2BACnBzyQ,EAAUo2a,mBAAqBA,EAC/Bp2a,EAAUq2a,0BAA4BA,GAMS,oBAAtCr2a,EAAUy2a,wBAAwC,CAC3D,GAA4C,oBAAjCz2a,EAAU6yQ,mBACnB,MAAM,IAAIppQ,MACR,qHAIJzJ,EAAUs2a,oBAAsBA,EAEhC,IAAIzjK,EAAqB7yQ,EAAU6yQ,mBAEnC7yQ,EAAU6yQ,mBAAqB,SAC7B3yJ,EACA4yJ,EACAqkK,GAUA,IAAInqH,EAAWnrT,KAAK00a,4BAChB10a,KAAK20a,wBACLW,EAEJtkK,EAAmBhwQ,KAAKhB,KAAMq+G,EAAW4yJ,EAAWk6C,IAIxD,OAAOxxQ,EA1JT,gDA6CA46X,EAAmBgB,8BAA+B,EAClDf,EAA0Be,8BAA+B,EACzDd,EAAoBc,8BAA+B,G,6BC7CnD,oEAAO,IAAMC,EAAoB,IAEpBC,EAAsB,SAAC/yD,GAAgC,IAAD,IACjE,OAAsB,OAAfA,QAAe,IAAfA,OAAA,EAAAA,EAAiB9hW,MAAM,CAAC,WAAY,gBAApC,OACF8hW,QADE,IACFA,GADE,UACFA,EAAiB3+W,IAAI,qBADnB,iBACF,EAAoC4d,MAAK,SAAAq4Q,GAAE,MAAiC,kBAAtBA,EAAGj2R,IAAI,aAAkD,QAAtBi2R,EAAGj2R,IAAI,YAA8C,QAAtBi2R,EAAGj2R,IAAI,sBAD7H,aACF,EAAuJA,IAAI,aAC3J,Q,6BCPQ,QAA0B,qC,yLCM5BsqR,EAAsB,SAACV,GAChC,IAAM/5Q,EAAuD,GAW7D,OAVuB,OAAvB+5Q,QAAuB,IAAvBA,KAAyBjhR,SAAQ,SAACgpa,EAAYl4U,GAC1Ck4U,EAAWhpa,SAAQ,SAAC+gR,EAAe3zJ,GAC3B0zJ,YAAsBC,IACtB75Q,EAAOxH,KAAK,CACRoxF,OAAQ77F,OAAO67F,GACfs8B,UAAWn4H,OAAOm4H,WAK3BlmH,GAEE26Q,EAAsB,SAACZ,EAAuC3sF,GACvE,IAAMogO,EAAmB/yI,EAAoBV,GACvC/5Q,EAA0E,GAchF,OAbAwtZ,EAAiB10Z,SAAQ,YAA4B,IAGpC,EAHW8wF,EAAwB,EAAxBA,OAAQs8B,EAAgB,EAAhBA,UAE1BumE,EADWW,EAAMpgL,MAAM,CAAC48E,EAAD,aACJ77E,MAAK,SAAC7b,GAAD,OAAOA,EAAE/B,IAAI,QAAU+1H,KACjDumE,IACA,UAAAA,EAAQt8L,IAAI,mBAAZ,SAAyB2I,SAAQ,SAACsqH,GAC9BpjH,EAAOxH,KAAK,CACRoxF,SACAs8B,YACAb,UAAWjC,EAAQjzH,IAAI,eAKhC6P,GAGE+ha,EAAwB,SAAC,GAQtB,IAPdvU,EAOa,EAPbA,iBACApgO,EAMa,EANbA,MACAlrD,EAKa,EALbA,aAMA,OAAOsrR,EAAiB3zZ,MAAK,YAA4B,IAAD,IAAxB+vF,EAAwB,EAAxBA,OAAQs8B,EAAgB,EAAhBA,UAChCk+F,EAAWh3B,EACbA,EAAMpgL,MAAM,CAAC48E,EAAQ,aADH,OAElBs4C,QAFkB,IAElBA,OAFkB,EAElBA,EAAc/xI,IAAI,YACtB,IAAKi0N,EACH,OAAO,EAET,IAAM33B,EAAU23B,EAASr2M,MAAK,SAAC7b,GAAD,OAAOA,EAAE/B,IAAI,QAAU+1H,KACrD,QAAKumE,IAGL,oBAAOA,EAAQt8L,IAAI,mBAAnB,aAAO,EAAyB0J,MAAK,SAACupH,GAAD,MAAuC,aAA1BA,EAAQjzH,IAAI,oBAA9D,cAIS6xa,EAAsC,SAACxU,GAChD,IAAMp4Z,EAAM,IAAIozU,WAAWxpU,IAO3B,OANAwuZ,EAAiB10Z,SAAQ,YAA4B,IAAzB8wF,EAAwB,EAAxBA,OAAQs8B,EAAgB,EAAhBA,UAC3B9wH,EAAI/E,IAAIu5F,IACTx0F,EAAItB,IAAI81F,EAAQ,IAEpBx0F,EAAIjF,IAAIy5F,GAASpxF,KAAK0tH,MAEnBr4H,MAAMuN,KAAKhG,GAAK,yCAA2B,CAAEw0F,OAA7B,KAAqCyvL,WAArC,W,6BCvE3B,yNAMa4oJ,EAAU,IAAIjja,IAAyB,CAChD,CAAC8mB,kBAAgBo8Y,UAAWC,KAC5B,CAACr8Y,kBAAgBs8Y,gBAAiBD,KAClC,CAACr8Y,kBAAgB0tK,SAAU,CAAC,MAAO,cACnC,CAAC1tK,kBAAgBu8Y,SAAU,CAAC,MAAO,cACnC,CAACv8Y,kBAAgBw8Y,UAAW,CAAC,MAAO,cACpC,CAACx8Y,kBAAgBy8Y,sBAAuBJ,KACxC,CAACr8Y,kBAAgBgJ,MAAO0zY,KACxB,CAAC18Y,kBAAgB28Y,QAASC,KAC1B,CAAC58Y,kBAAgB68Y,IAAK,CAAC,MAAO,cAC9B,CAAC78Y,kBAAgB88Y,mBAAoBT,KACrC,CAACr8Y,kBAAgB+8Y,iBAAkB,CAAC,MAAO,cAC3C,CAAC/8Y,kBAAgBg9Y,eAAgB,CAAC,MAAO,cACzC,CAACh9Y,kBAAgBi9Y,kBAAmB,CAAC,MAAO,cAC5C,CAACj9Y,kBAAgBk9Y,qBAAsBb,KACvC,CAACr8Y,kBAAgBm9Y,kBAAmBd,OAI3Be,EAAoE,CAC7E,CAAExya,IAAKyya,IAAeC,iBAAkBC,SAAU,sCAClD,CAAE3ya,IAAKyya,IAAeG,eAAgBD,SAAU,oCAChD,CAAE3ya,IAAKyya,IAAeI,OAAQF,SAAU,6BAG/BG,EAA4B,4BAC5BC,EAA0B,0BAC1BC,EAAwB,yB,6BCjCrC,oEAAO,IAAIC,EAAS,SAAgBnwa,GAClC,OAAOA,EAAKwgT,WAEP,SAAS4vH,EAAmBttY,EAAO8B,GACxC,IAAIy4D,EAAUv6D,EAAMu6D,QAChBgzU,EAAevtY,EAAMoxE,MACrBA,OAAyB,IAAjBm8T,EAA0B,GAAKA,EAC3C,MAAO,CACL/iT,SAAUpZ,EAAM0qB,oBAAyC,kBAAZvhC,EAAuBA,EAAUA,EAAQz4D,EAAQgvF,OAAS,EACvGr2B,MAAO2W,EAAM4oB,mB,6BCTjB,iFAEawzS,EAAU,SAACC,GAEpB,IAAK,IAAI30a,EAAI,EAAGA,EAAI20a,EAAM91a,OAAQmB,IAC9B,GAAI20a,EAAM30a,GAAG,GACT,OAAO20a,EAAM30a,GAAG,GAGxB,MAAO,IAGE2oU,EAAmB,SAACjY,GAM/B,OALiBruR,IAAMA,MAAM4iE,OAAOJ,QAClC6rN,EACA,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,M,4SCqH9F8uT,EAlHoC,SAAC,GAK7C,IAAD,IAJJ9yT,eAII,SAHJ+yT,EAGI,EAHJA,SACAltU,EAEI,EAFJA,KACAg6B,EACI,EADJA,QAGQ54G,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBAGjB,EAA8B7L,IAAMia,SAAS,IAA7C,mBAAO0zK,EAAP,KAAgB0lN,EAAhB,KAEMC,EAAiBrmY,sBAAYw4N,YAAgB,CAAC,cAAe2tK,KAC7DG,EAAgBtmY,sBAAY24N,YAAkB,CAAC,gBAAkBpyP,iBAEjEovG,GAAwB,OAAb2wT,QAAa,IAAbA,OAAA,EAAAA,EAAer2Z,MAAK,SAAA9b,GAAC,OAAIA,EAAE9B,IAAI,SAAN,OAAgBg0a,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAgBn3Z,MAAM,CAAC,UAAW,aAAWhO,gBACjGqla,EAAe5wT,EAAStjH,IAAI,cAAgBsjH,EAAStjH,IAAI,YAA1C,UAChBsjH,EAAStjH,IAAI,aADG,YACasjH,EAAStjH,IAAI,aAC3CsjH,EAAStjH,IAAI,iBAAmB,IAGpC0gC,IAAM0B,WAAU,WAEZ2xY,GADgB,IAAdD,EACSE,EAAeh0a,IAAI,WAEnB,MAEZ,CAAC8za,IAWJ,OACE,eAAC7hH,EAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAASA,EAASuzS,sBAAuBpzT,EAASqzT,sBAAuBrzT,EAA7F,UACE,eAACszT,EAAA,EAAD,WAGMrsZ,EADF+4F,EACI,yCAEA,mCAGJA,GACA,cAAC4V,EAAA,EAAD,CAAY7V,QAAS8f,EAASrpB,MAAO,CAAEx/B,QAAS,EAAGu8V,MAAO,SAA1D,SACE,cAAC,IAAD,SAIN,cAACpiH,EAAA,EAAD,UAEE,eAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBQ,QAAS,EAAxD,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,UAAaztF,EAAE,mDAEjB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,UAAaztF,EAAE,gDAEjB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,UAAaztF,EAAE,+CAGjB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGE,cAAc,EAAvC,SACE,cAAC0+B,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAEg9T,aAAc,cAArD,SACGL,MAGL,cAACp/V,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAEoV,2BAAwB,OAAC42Y,QAAD,IAACA,OAAD,EAACA,EAAgBh0a,IAAI,gBAAkB,QAGtE,cAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,UAApB,gBACGq+T,QADH,IACGA,OADH,EACGA,EAAgBh0a,IAAI,gBAIzB,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAI0gC,MAAO,CAAEgB,UAAW,IAA9C,UACE,cAAC9C,EAAA,EAAD,UAAaztF,EAAE,4CAEb+4F,EACE,cAACtL,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B04G,IAG/B,cAAC8jG,EAAA,EAAD,CACEx6T,MAAO02N,GAAW,GAClB+rI,WAAW,EACXC,QAAS,GACT5iP,SAjEY,SAAC2rB,GAC3B2wS,EAAW3wS,EAAMn6G,OAAOtxB,QAiEVm+G,WAAW,EACXH,QAAQ,qBAOlBoL,EAAU,cAACsxM,EAAA,EAAD,IACR,eAACA,EAAA,EAAD,WACE,cAACzxM,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS8f,EAAjC,SAA2C54G,EAAE,4CAC7C,cAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAzET,WACvBl6E,EAASu/B,YAAOigM,EAAD,sBAA+B0tK,EAA/B,aAAoDzlN,IACnEztF,KAuEQ,SAAoD54G,EAAE,gD,gBC5GrDo+O,EAAgB,UAYvB36I,EAAYJ,aAAW,SAACl0C,GAAD,MAA+B,CAC1Dq9V,WAAY,CACV/2T,YAAatmC,EAAMZ,QAAQ,QAyJhBk+V,IArJe,SAAC,GAOK,IAAD,IANjC1zT,eAMiC,SALjC2zT,EAKiC,EALjCA,kBACAzgS,EAIiC,EAJjCA,SACA0gS,EAGiC,EAHjCA,kBACAC,EAEiC,EAFjCA,oBACAC,EACiC,EADjCA,gBAIQ7sZ,GADQyjG,IACF1xE,YAAe,gBAArB/xB,GACF4e,EAAW2F,wBAEjB,EAA8C7L,IAAMia,SAAS,CAAC,gBAAiB,iBAAkB,WAAjG,mBAAOm6X,EAAP,KACA,GADA,KACgDp0Y,IAAMia,SAAN,YAAmBo6X,OAAnE,mBAAOC,EAAP,KAAyBC,EAAzB,KACMC,EAAiBx0Y,IAAMyG,QAAO,GAEpC,EAAgDzG,IAAMia,UAAS,GAA/D,mBAAOw6X,EAAP,KAAyBC,EAAzB,KACA,EAA8C10Y,IAAMia,UAAU,GAA9D,mBAAO06X,EAAP,KAAwBC,EAAxB,KAEMnjU,EAAYxkE,sBAAY24N,YAAkB,CAAC,eAC3CivK,EAAkB5nY,sBAAY24N,YAAkB,CAAC,cAAe,cAEhEkvK,EAAa7nY,sBAAY4jG,YAAqBx6G,eAAa0+Y,8BAE3DC,EAAgB30T,EACI,CAAC,UACDw0T,EACE,GACA,CAAC,sBACvBI,EAAkBX,EAAiBxta,QAAO,SAACwnZ,GAAD,OAAYA,EAAO33U,UAAiD,IAAtCq+V,EAAclwa,SAASwpZ,EAAO9xX,OAE5GwD,IAAM0B,WAAU,WACdwE,EAAS,IAAIqoB,KAAiB,CAAEuiF,WAAYz6G,eAAa0+Y,iCACxD,IAEH/0Y,IAAM0B,WAAU,WACd,GAAI2+E,GAAWy0T,EAAY,CACzB,IAAMI,EAAU,OAAGJ,QAAH,IAAGA,OAAH,EAAGA,EAAY34Z,MAAM,CAAC,EAAG,eACnCg5Z,EAAmBD,EAAahra,KAAK6tC,MAAMm9X,GAAc,KAC3DC,GACFC,EAAoBD,MAGvB,CAAC90T,EAASy0T,IAEb,IAAMO,EAAqB,SAACjC,GAC1BwB,OAAgCv9a,IAAb+7a,EAAyBA,GAAY,GACxDsB,GAAqBD,IAGjBW,EAAsB,SAACjzD,GAC3B,GAAIqyD,EAAenxY,QAAS,CAC1BmxY,EAAenxY,SAAU,EACzB,IAAM6iQ,EAAUi8E,EAAQ59W,KAAI,SAAAizJ,GAAG,MAClB,kBAAXA,EAAIh7H,GAAJ,2BAAkCg7H,GAAlC,IAAuC7gF,SAAS,IAAU6gF,KAE5D+8Q,EAAoB,YAAIruI,SAExBquI,EAAoB,YAAIpyD,KAgB5B,OACE,qCAEI9hQ,EACE,cAAC8vM,EAAA,EAAD,CAAKvqM,SAAS,OAAO/O,MAAO,CAAEhgC,MAAO,OAAQi2C,OAAQ,QAArD,SACE,cAACwoT,EAAA,EAAD,CACEj1T,QAASA,EACTovG,UAAWj8M,eAAKwga,GAEhB7xD,QAAS8yD,EACTI,mBAAoBA,EACpBlB,gBAAiBA,MAIrB,cAACoB,EAAA,EAAD,CACErvD,UAAU,YACVsvD,SAAUluZ,EAAE,4BACZmuZ,iBAAiB,EACjBluY,QAASgsG,EACTjtB,SAAS,EACTovT,uBAAuB,EACvBxgU,WAAY,CACVygU,0BAA0B,EAC1B9uT,aAAa,GAEfuzS,SAtCqB,SAACv5S,IAE1BpP,GAAaojU,IACf3uY,EAAS8+B,YAAU0gM,EAAe,cAAe/gP,iBAAO,CACtD6uH,QAASrlI,cAAI,CAAEquB,GAAIqkF,EAASvhH,IAAI,QAChCmuN,UAAW,KACXC,SAAU,KACVkoN,SAAU,UAgCN/zY,SACE,eAACuyC,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAC/Bc,KAAK,SACL8gC,MAAO,CACLhgC,MAAO,OACPi2C,OAAQ,QAJZ,UAOE,cAAC14C,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAO,OAAQ+uC,SAAU,QAApD,SACE,cAAC0vT,EAAA,EAAD,CACE7lN,UAAWj8M,eAAKwga,GAEhB7xD,QAAS8yD,EACTI,mBAAoBA,EACpBlB,gBAAiBA,MAGrB,cAAChkH,EAAA,EAAD,CAAKt5M,MAAO,CACV9/B,SAAUk9V,EAAoB,QAAU,EACxCnnT,OAAQmnT,EAAoB,KAAO,GAFrC,SAGE,cAAC4B,EAAA,EAAD,CACEC,WAAYz/Y,eAAa0+Y,4BACzBV,eAAgBA,IAChBC,iBAAkBA,EAClBF,gBAAiBA,EACjBY,cAAeA,EACfx9F,OAAQy8F,EACR/zS,QAASg0S,EACTkB,oBAAqBA,WAOnC,cAAC,EAAD,CACE/0T,QAASA,EACTna,KAAMuuU,EACNv0S,QAAS,kBAAMm1S,KACfjC,SAAUuB,S,6BChLlB,sFAmEI9rT,EAAO7oF,IAAM8E,YAAW,SAAcW,EAAOzuC,GAC/C,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cp4E,EAAmBnvC,EAAMovC,UACzBA,OAAiC,IAArBD,EAA8B,IAAMA,EAChDqsD,EAASx7F,EAAMw7F,OACf38B,EAAU7+D,EAAM6+D,QAChByxU,EAAoBtwY,EAAMswY,kBAC1BC,EAAmBvwY,EAAM6kS,UACzBA,OAAiC,IAArB0rG,EAA8B,QAAUA,EACpDzoR,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,UAAYA,EAClDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,QAAS,YAAa,SAAU,UAAW,oBAAqB,YAAa,YAE9I6+O,EAAqBC,cACrBC,EAAiBF,EAAmBE,eACpCC,EAAgBH,EAAmBG,cACnCC,EAAkBJ,EAAmBttR,IAErCsoI,EAAkBt/F,IAAMia,UAAS,GACjCw1E,EAAe6P,EAAgB,GAC/B22S,EAAkB32S,EAAgB,GAElC42S,EAAa9zS,YAAWprI,EAAK0tR,GAuBjC,OAAO1kP,IAAMwB,cAAcuzE,IAAY1vE,YAAS,CAC9CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ,YAAY5tE,OAAOk5H,YAAWuqM,KAAc31P,EAAW86C,GAAgBh7C,EAAQg7C,aAAc,CACjI/G,OAAQj0C,EAAQi0C,QAChB7zC,IACFJ,QAASshW,EACTv0U,MAAOA,EACP3sB,UAAWA,EACXosD,OA5Be,SAAoByB,GAC/BjT,IACFg1J,IACAwxJ,GAAgB,IAGdh1S,GACFA,EAAOyB,IAsBTp+B,QAlBgB,SAAqBo+B,GACjC8hJ,EAAe9hJ,IACjBuzS,GAAgB,GAGd3xU,GACFA,EAAQo+B,IAaV1rI,IAAKk/a,EACLjhU,QAASA,GACR/4F,OAuDUs6D,gBA1KK,CAElB1jE,KAAM,GAGNqja,cAAe,CACb10U,eAAgB,QAIlB20U,eAAgB,CACd30U,eAAgB,OAChB,UAAW,CACTA,eAAgB,cAKpB40U,gBAAiB,CACf50U,eAAgB,aAKlBinB,OAAQ,CACNlQ,SAAU,WACVmtP,wBAAyB,cACzBplP,gBAAiB,cAGjB2jP,QAAS,EACT9tO,OAAQ,EACRt/C,OAAQ,EAERksC,aAAc,EACd3rC,QAAS,EAETupC,OAAQ,UACR8kP,WAAY,OACZ/B,cAAe,SACf,kBAAmB,OAEnB,qBAAsB,OAEtB,sBAAuB,CACrB1gP,YAAa,QAGf,iBAAkB,CAChBihP,QAAS,SAKbz0O,aAAc,IAoHkB,CAChC1lH,KAAM,WADOysE,CAEZqyC,I,2WClJGkC,EAAYJ,aAAW,SAAAl0C,GAAK,MAAK,CACrC6/V,gBAAiB,CACfj/V,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BygD,WAAY7/C,EAAM+pC,QAAQC,KAAK,MAEjC81T,aAAc,CACZz/V,OAAQL,EAAMZ,QAAQ,EAAG,IAE3B2gW,cAAe,CACbz5T,YAAatmC,EAAMZ,UACnB2rB,MAAO,WAET44R,WAAY,CACV54R,MAAO,WAETi1U,aAAc,CACZj+T,SAAU,WACViL,WAAYhtC,EAAMZ,QAAQ,GAC1BkB,SAAUN,EAAMZ,QAAQ,GACxBs5C,UAAW14C,EAAMZ,QAAQ,MAE3B6gW,kBAAmB,CACjB7/V,MAAOJ,EAAMZ,QAAQ,GACrBi3C,OAAQr2C,EAAMZ,QAAQ,IAExB6pD,IAAK,CACHlnB,SAAU,WACVqX,IAAK,MACLjB,aAAc,QAEhB+nT,aAAc,CACZn+T,SAAU,WACVqX,IAAK,MACLjB,aAAc,OACdptB,MAAO,sBACP4hB,UAAW,OACX7C,gBAAiB,sBACjB,UAAW,CACTA,gBAAiB,wBAGrBwlK,OAAQ,CACNluK,UAAWphC,EAAMZ,WAEnBykT,cAAe,CACbjjT,QAASZ,EAAMZ,WAEjB0kT,YAAa,CACXx9Q,YAAatmC,EAAMZ,QAAQ,SAiSzB1tC,EAAkBkG,YAAyB,CAC/C2W,SAAUs/E,gBAOG9zD,sBACb91B,YAAgB,gBAChB0/D,kBAAQjyE,GANiB,SAACjC,GAAD,MAAe,CACxCA,eAGasqC,EArQ6B,SAAC/qC,GAC3C,IACEmxY,EAwBEnxY,EAxBFmxY,cACA79S,EAuBEtzF,EAvBFszF,WAFF,EAyBItzF,EAtBFoxY,kBAHF,WAyBIpxY,EArBFqxY,eAJF,SAKEC,EAoBEtxY,EApBFsxY,YACAC,EAmBEvxY,EAnBFuxY,WANF,EAyBIvxY,EAlBFwxY,kBAPF,WAyBIxxY,EAjBFyxY,uBARF,WAyBIzxY,EAhBF+0V,yBATF,MASsB,EATtB,IAyBI/0V,EAfF0xY,6BAVF,MAU0B,GAV1B,IAyBI1xY,EAdF2xY,2BAXF,MAWwB,kBAAM,MAX9B,IAyBI3xY,EAbF4xY,2BAZF,MAYwB,kBAAM,MAZ9B,IAyBI5xY,EAZF6xY,kBAbF,MAae,kBAAM,MAbrB,EAcE15G,EAWEn4R,EAXFm4R,aACA25G,EAUE9xY,EAVF8xY,cACAC,EASE/xY,EATF+xY,cAhBF,EAyBI/xY,EARFgyY,0BAjBF,YAyBIhyY,EAPFiyY,4BAOEjyY,EANFtlC,KAMEslC,EAJFkyY,0BAIElyY,EAHFmyY,+BAtBF,MAsB0B,kBAAM,MAtBhC,EAuBEC,GAEEpyY,EAFFoyY,eACAvwZ,GACEme,EADFne,EAGF,GAYIyjG,IAXFwrT,GADF,GACEA,aACAC,GAFF,GAEEA,cACAC,GAHF,GAGEA,aACAC,GAJF,GAIEA,kBACAC,GALF,GAKEA,aACAj3S,GANF,GAMEA,IACA42S,GAPF,GAOEA,gBACAl8C,GARF,GAQEA,WACAr0G,GATF,GASEA,OACAu0G,GAVF,GAUEA,cACAC,GAXF,GAWEA,YAGF,GAA4BtgV,mBAAS8+E,GAAc,IAAnD,qBAAOygE,GAAP,MAAes+O,GAAf,MACA,GAAwB93Y,YAAe,GAAvC,qBAAOkmE,GAAP,MAAa4lB,GAAb,MACA,GAAoC9rF,YAAe,GAAnD,qBAAO+3Y,GAAP,MAAmBC,GAAnB,MACA,GAAgCh4Y,WAAwC,MAAxE,qBAAO0uF,GAAP,MAAiBs9J,GAAjB,MACA,GAAgDhsP,YAAe,GAA/D,qBAAOi4Y,GAAP,MAAyBC,GAAzB,MAIMvxW,GAAS89C,uBAAY,SAACxtH,GACE,oBAAjB2mU,GACTA,EAAa3mU,KAEd,CAAC2mU,IAEE7mN,GAAW0N,uBAAY,SAACie,GAC5B,IAAMzrI,EAAQyrI,EAAMn6G,OAAOtxB,MAC3B6gb,GAAU7gb,IAENA,EAAMmG,QAAUo9X,GAAsC,IAAjBvjY,EAAMmG,SAC7CupE,GAAO1vE,KAER,CAACujY,EAAmBs9C,GAAWnxW,KAElC3mC,aAAgB,WACd83Y,GAAU/+S,KACT,CAACA,IAEJ/4F,aAAgB,WACVw6V,IACEu9C,IAAcv+O,GAAOp8L,OAASo9X,EAChC1uQ,IAAQ,GAERA,IAAQ,MAGX,CAAC0tE,GAAQu+O,KAEZ,IAAMI,GAA0B,SAAC1xZ,GAAD,OAAsB,WACpDmxZ,GAAsBnxZ,GACtBulQ,GAAY,MACZksJ,IAAoB,KAGtB,OACE,eAAC,IAAD,CACEnjW,WAAW,EAEXP,WAAW,SACXuB,KAAK,SACLpB,UAAW2hW,GALb,UAQIkB,GAEI,KAEN,eAAC,IAAD,CACEziW,WAAW,EACXM,QAAQ,WACRf,aAAa,SACbE,WAAW,SACXuB,KAAK,SALP,UAQImhW,EACE,uBACEr/G,SAAU,SAACn1L,GACTA,EAAM/F,iBACNh2D,GAAO6yH,KAHX,UAME,cAAC,IAAD,CAAS/zE,MAAOmxT,GAAiB,GAAIlxT,UAAW80Q,EAAoB,MAAQ,SAA5E,SACE,cAAC,IAAD,CACEj0Q,YAAaj/F,GAAE,qCACfyvF,SAAUA,GACV9/G,MAAOuiM,IAAU,GACjB0jI,aACE,cAAC,IAAD,CAAgB1kN,SAAS,MAAzB,SACE,cAAC,IAAD,CAAYkK,SAAS,QAAQ/tC,UAAWylT,OAG5CllR,WAAY,CACV5Q,QAASk2R,EACL,SAAC72X,GACI+qH,IACHs9J,GAAYroR,EAAEs8G,eAEhB+3T,IAAc,IAEd,KACJ/2S,OAAQu5P,EAAoB,SAAC72X,GAAD,OAAOq0a,IAAc,IAAS,UAK9Dp/a,QAAQ4hY,IACR,cAAC,IAAD,CAAQ7lT,UAAWoxM,GAAQ7/K,KAAMA,GAAMwoB,SAAUA,GAAUhJ,UAAW,eAAgBqK,YAAY,EAAlG,SACG,gBAAG6R,EAAH,EAAGA,gBAAH,OACC,cAAC,IAAD,2BAAUA,GAAV,IAA2B5hC,QAAS,IAApC,SACE,cAAC,IAAD,CAAOrrB,UAAW2lT,GAAlB,SACE,eAAC,IAAD,CAAMvlT,WAAW,EAAMP,WAAW,SAASuB,KAAM,SAAjD,UACE,cAAC,IAAD,CAAapB,UAAW4lT,GAAa/4R,MAAM,UAC3C,cAAC,IAAD,UAAa21U,kBAS3B,KAGFF,EACE,eAAC,IAAD,CACEtiW,UAAW4hW,GACXn2T,QAASg3T,EAFX,UAIE,cAAC,IAAD,CAAuBziW,UAAW6hW,KACjClvZ,GAAE,6BAEH,KAGJuvZ,EACE,eAAC,IAAD,CACEz2T,QAASi3T,EADX,UAEE,cAAC,IAAD,CAAuB1iW,UAAW6hW,KACjClvZ,GAAE,6BAEH,KAGJmwZ,EACE,qCACE,eAAC,IAAD,CAEEr3T,QAAS,SAACz8G,GACRu0a,IAAqBD,IACrBjsJ,GAAaisJ,GAAyD,KAAtCt0a,EAAEs8G,gBAJtC,UAOE,cAAC,IAAD,CAAiBtrC,UAAW6hW,KAC3BlvZ,GAAE,yCAEL,eAAC,IAAD,CAEE8wZ,mBAAoB,KACpB1pT,SAAUA,GACV2oR,aAAc,CACZ/7G,SAAU,SACVK,WAAY,QAGdn7J,gBAAiB,CACf86J,SAAU,MACVK,WAAY,QAEd08I,aAAa,EACbnyU,KAAM+xU,GACN/3S,QAAS,WACP8rJ,GAAY,MACZksJ,IAAoB,IAjBxB,UAoBE,eAAC,IAAD,CAAU93T,QAAS+3T,GAAwB,OAA3C,UACE,cAAC,IAAD,CAAgBxjW,UAAW6hW,KAC1BlvZ,GAAE,oCAEL,eAAC,IAAD,CAAU84F,QAAS+3T,GAAwB,UAA3C,UACE,cAAC,IAAD,CAAYxjW,UAAW6hW,KACtBlvZ,GAAE,6CAKT,KAGFwvZ,EACI,qBAAKniW,UAAW8hW,GAAhB,SAEEc,GAEI,cAAC,IAAD,CACAn3T,QAAS22T,EAAc,KAAOO,EAC9B91U,MAAM,UACN,aAAYl6E,GAAE,gCACdmtD,QAAS,CAAE3hE,KAAMika,EAAcJ,GAAej3S,IAJ9C,SAMA,cAAC,IAAD,CAASja,MAAOuxT,GAAc,GAA9B,SACE,cAAC,IAAD,CAAMjiW,WAAW,EAAMT,aAAa,SAASe,QAAQ,SAASV,UAAW+hW,GAAzE,SACE,cAAC,IAAD,YAMV,QAINmB,IAEI,Y,kGC5WSrqN,E,kDAOnB,WAAmBl6K,GAA+B,IAAD,8BAC/C,cAAMA,IAPDr8C,WAM0C,IAL1CulC,QAK0C,IAJ1CzyB,UAI0C,IAH1CsyB,WAG0C,IAF1Co8E,cAE0C,EAE/C9+G,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF2B,E,iBAPoBk5K,I,8BCJvE,YAOA,IAAI8rN,EAAW,WACX,GAAmB,qBAARnqa,IACP,OAAOA,IASX,SAASoqa,EAASnva,EAAKvJ,GACnB,IAAIsP,GAAU,EAQd,OAPA/F,EAAIJ,MAAK,SAAUxK,EAAO9G,GACtB,OAAI8G,EAAM,KAAOqB,IACbsP,EAASzX,GACF,MAIRyX,EAEX,OAAsB,WAClB,SAASqpa,IACLj9a,KAAKk9a,YAAc,GAuEvB,OArEA9+a,OAAOyJ,eAAeo1a,EAAQ9+a,UAAW,OAAQ,CAI7C4F,IAAK,WACD,OAAO/D,KAAKk9a,YAAYr7a,QAE5BiG,YAAY,EACZC,cAAc,IAMlBk1a,EAAQ9+a,UAAU4F,IAAM,SAAUO,GAC9B,IAAInI,EAAQ6gb,EAASh9a,KAAKk9a,YAAa54a,GACnCrB,EAAQjD,KAAKk9a,YAAY/gb,GAC7B,OAAO8G,GAASA,EAAM,IAO1Bg6a,EAAQ9+a,UAAUuJ,IAAM,SAAUpD,EAAK5I,GACnC,IAAIS,EAAQ6gb,EAASh9a,KAAKk9a,YAAa54a,IAClCnI,EACD6D,KAAKk9a,YAAY/gb,GAAO,GAAKT,EAG7BsE,KAAKk9a,YAAY9wa,KAAK,CAAC9H,EAAK5I,KAOpCuhb,EAAQ9+a,UAAUqqH,OAAS,SAAUlkH,GACjC,IAAIqF,EAAU3J,KAAKk9a,YACf/gb,EAAQ6gb,EAASrza,EAASrF,IACzBnI,GACDwN,EAAQyF,OAAOjT,EAAO,IAO9B8gb,EAAQ9+a,UAAU8F,IAAM,SAAUK,GAC9B,SAAU04a,EAASh9a,KAAKk9a,YAAa54a,IAKzC24a,EAAQ9+a,UAAU+U,MAAQ,WACtBlT,KAAKk9a,YAAY9ta,OAAO,IAO5B6ta,EAAQ9+a,UAAUuO,QAAU,SAAUk4B,EAAU68O,QAChC,IAARA,IAAkBA,EAAM,MAC5B,IAAK,IAAIjtM,EAAK,EAAG0kK,EAAKl5O,KAAKk9a,YAAa1oW,EAAK0kK,EAAGr3O,OAAQ2yE,IAAM,CAC1D,IAAIvxE,EAAQi2O,EAAG1kK,GACf5vC,EAAS5jC,KAAKygR,EAAKx+Q,EAAM,GAAIA,EAAM,MAGpCg6a,EAzEX,GAtBW,GAsGXE,EAA8B,qBAAXzuZ,QAA8C,qBAAbsX,UAA4BtX,OAAOsX,WAAaA,SAGpGo3Y,EACsB,qBAAXluQ,GAA0BA,EAAOnyK,OAASA,KAC1CmyK,EAES,qBAATE,MAAwBA,KAAKryK,OAASA,KACtCqyK,KAEW,qBAAX1gJ,QAA0BA,OAAO3xB,OAASA,KAC1C2xB,OAGJ2gJ,SAAS,cAATA,GASPguQ,EACqC,oBAA1B/iJ,sBAIAA,sBAAsBx4Q,KAAKs7Z,GAE/B,SAAUx4Y,GAAY,OAAOiU,YAAW,WAAc,OAAOjU,EAAS7W,KAAK+xB,SAAW,IAAO,KAqExG,IAGIw9X,EAAiB,CAAC,MAAO,QAAS,SAAU,OAAQ,QAAS,SAAU,OAAQ,UAE/EC,EAAwD,qBAArB5jO,iBAInC6jO,EAA0C,WAM1C,SAASA,IAMLx9a,KAAKy9a,YAAa,EAMlBz9a,KAAK09a,sBAAuB,EAM5B19a,KAAK29a,mBAAqB,KAM1B39a,KAAK49a,WAAa,GAClB59a,KAAK69a,iBAAmB79a,KAAK69a,iBAAiB/7Z,KAAK9hB,MACnDA,KAAKowR,QAjGb,SAAmBxrP,EAAU+/D,GACzB,IAAIm5U,GAAc,EAAOC,GAAe,EAAO/sP,EAAe,EAO9D,SAASgtP,IACDF,IACAA,GAAc,EACdl5Y,KAEAm5Y,GACAxxY,IAUR,SAAS0xY,IACLZ,EAAwBW,GAO5B,SAASzxY,IACL,IAAI2xY,EAAYnwZ,KAAK+xB,MACrB,GAAIg+X,EAAa,CAEb,GAAII,EAAYltP,EA7CN,EA8CN,OAMJ+sP,GAAe,OAGfD,GAAc,EACdC,GAAe,EACfllY,WAAWolY,EAAiBt5U,GAEhCqsF,EAAektP,EAEnB,OAAO3xY,EA6CYusJ,CAAS94L,KAAKowR,QAAQtuQ,KAAK9hB,MAzC9B,IAyMhB,OAxJAw9a,EAAyBr/a,UAAUggb,YAAc,SAAUxqW,IACjD3zE,KAAK49a,WAAWp9Z,QAAQmzD,IAC1B3zE,KAAK49a,WAAWxxa,KAAKunE,GAGpB3zE,KAAKy9a,YACNz9a,KAAKo+a,YASbZ,EAAyBr/a,UAAUkgb,eAAiB,SAAU1qW,GAC1D,IAAI8tE,EAAYzhJ,KAAK49a,WACjBzhb,EAAQslJ,EAAUjhI,QAAQmzD,IAEzBx3E,GACDslJ,EAAUryI,OAAOjT,EAAO,IAGvBslJ,EAAU5/I,QAAU7B,KAAKy9a,YAC1Bz9a,KAAKs+a,eASbd,EAAyBr/a,UAAUiyR,QAAU,WACnBpwR,KAAKu+a,oBAIvBv+a,KAAKowR,WAWbotJ,EAAyBr/a,UAAUogb,iBAAmB,WAElD,IAAIC,EAAkBx+a,KAAK49a,WAAWrya,QAAO,SAAUooE,GACnD,OAAOA,EAAS8qW,eAAgB9qW,EAAS+qW,eAQ7C,OADAF,EAAgB9xa,SAAQ,SAAUinE,GAAY,OAAOA,EAASgrW,qBACvDH,EAAgB38a,OAAS,GAQpC27a,EAAyBr/a,UAAUigb,SAAW,WAGrCjB,IAAan9a,KAAKy9a,aAMvBz3Y,SAASgjE,iBAAiB,gBAAiBhpG,KAAK69a,kBAChDnvZ,OAAOs6E,iBAAiB,SAAUhpG,KAAKowR,SACnCmtJ,GACAv9a,KAAK29a,mBAAqB,IAAIhkO,iBAAiB35M,KAAKowR,SACpDpwR,KAAK29a,mBAAmB1+S,QAAQj5F,SAAU,CACtCwrL,YAAY,EACZtX,WAAW,EACX0kO,eAAe,EACf3kO,SAAS,MAIbj0K,SAASgjE,iBAAiB,qBAAsBhpG,KAAKowR,SACrDpwR,KAAK09a,sBAAuB,GAEhC19a,KAAKy9a,YAAa,IAQtBD,EAAyBr/a,UAAUmgb,YAAc,WAGxCnB,GAAcn9a,KAAKy9a,aAGxBz3Y,SAASijE,oBAAoB,gBAAiBjpG,KAAK69a,kBACnDnvZ,OAAOu6E,oBAAoB,SAAUjpG,KAAKowR,SACtCpwR,KAAK29a,oBACL39a,KAAK29a,mBAAmBxjO,aAExBn6M,KAAK09a,sBACL13Y,SAASijE,oBAAoB,qBAAsBjpG,KAAKowR,SAE5DpwR,KAAK29a,mBAAqB,KAC1B39a,KAAK09a,sBAAuB,EAC5B19a,KAAKy9a,YAAa,IAStBD,EAAyBr/a,UAAU0/a,iBAAmB,SAAU3kM,GAC5D,IAAI2lM,EAAK3lM,EAAGqwE,aAAcA,OAAsB,IAAPs1H,EAAgB,GAAKA,EAEvCvB,EAAe7va,MAAK,SAAUnJ,GACjD,SAAUilT,EAAa/oS,QAAQlc,OAG/BtE,KAAKowR,WAQbotJ,EAAyBsB,YAAc,WAInC,OAHK9+a,KAAK++a,YACN/+a,KAAK++a,UAAY,IAAIvB,GAElBx9a,KAAK++a,WAOhBvB,EAAyBuB,UAAY,KAC9BvB,EAhMmC,GA0M1CwB,EAAsB,SAAUhyZ,EAAQkd,GACxC,IAAK,IAAIsqC,EAAK,EAAG0kK,EAAK96O,OAAO0D,KAAKooC,GAAQsqC,EAAK0kK,EAAGr3O,OAAQ2yE,IAAM,CAC5D,IAAIlwE,EAAM40O,EAAG1kK,GACbp2E,OAAOyJ,eAAemlB,EAAQ1oB,EAAK,CAC/B5I,MAAOwuC,EAAM5lC,GACbwD,YAAY,EACZE,UAAU,EACVD,cAAc,IAGtB,OAAOilB,GASPiyZ,EAAe,SAAUjyZ,GAOzB,OAHkBA,GAAUA,EAAOqwR,eAAiBrwR,EAAOqwR,cAAcC,aAGnD8/H,GAItB8B,EAAYC,EAAe,EAAG,EAAG,EAAG,GAOxC,SAASC,EAAQ1jb,GACb,OAAOi9E,WAAWj9E,IAAU,EAShC,SAAS2jb,EAAezjW,GAEpB,IADA,IAAI0jW,EAAY,GACP9qW,EAAK,EAAGA,EAAK9wE,UAAU7B,OAAQ2yE,IACpC8qW,EAAU9qW,EAAK,GAAK9wE,UAAU8wE,GAElC,OAAO8qW,EAAU3za,QAAO,SAAU5P,EAAMkhH,GAEpC,OAAOlhH,EAAOqjb,EADFxjW,EAAO,UAAYqhC,EAAW,aAE3C,GAmCP,SAASsiU,EAA0BvyZ,GAG/B,IAAIoyG,EAAcpyG,EAAOoyG,YAAa62K,EAAejpR,EAAOipR,aAS5D,IAAK72K,IAAgB62K,EACjB,OAAOipI,EAEX,IAAItjW,EAASqjW,EAAYjyZ,GAAQktQ,iBAAiBltQ,GAC9CwyZ,EA3CR,SAAqB5jW,GAGjB,IAFA,IACI4jW,EAAW,GACNhrW,EAAK,EAAGirW,EAFD,CAAC,MAAO,QAAS,SAAU,QAEDjrW,EAAKirW,EAAY59a,OAAQ2yE,IAAM,CACrE,IAAIyoC,EAAWwiU,EAAYjrW,GACvB94E,EAAQkgF,EAAO,WAAaqhC,GAChCuiU,EAASviU,GAAYmiU,EAAQ1jb,GAEjC,OAAO8jb,EAmCQE,CAAY9jW,GACvB+jW,EAAWH,EAASjla,KAAOila,EAAShla,MACpCola,EAAUJ,EAASlrT,IAAMkrT,EAASjrT,OAKlCj5C,EAAQ8jW,EAAQxjW,EAAON,OAAQi2C,EAAS6tT,EAAQxjW,EAAO21C,QAqB3D,GAlByB,eAArB31C,EAAOT,YAOHp+E,KAAKo/E,MAAMb,EAAQqkW,KAAcvgT,IACjC9jD,GAAS+jW,EAAezjW,EAAQ,OAAQ,SAAW+jW,GAEnD5ib,KAAKo/E,MAAMo1C,EAASquT,KAAa3pI,IACjC1kL,GAAU8tT,EAAezjW,EAAQ,MAAO,UAAYgkW,KAoDhE,SAA2B5yZ,GACvB,OAAOA,IAAWiyZ,EAAYjyZ,GAAQgZ,SAASz+B,gBA9C1CmtZ,CAAkB1nY,GAAS,CAK5B,IAAI6yZ,EAAgB9ib,KAAKo/E,MAAMb,EAAQqkW,GAAYvgT,EAC/C0gT,EAAiB/ib,KAAKo/E,MAAMo1C,EAASquT,GAAW3pI,EAMpB,IAA5Bl5S,KAAKijB,IAAI6/Z,KACTvkW,GAASukW,GAEoB,IAA7B9ib,KAAKijB,IAAI8/Z,KACTvuT,GAAUuuT,GAGlB,OAAOX,EAAeK,EAASjla,KAAMila,EAASlrT,IAAKh5C,EAAOi2C,GAQ9D,IAAIwuT,EAGkC,qBAAvBC,mBACA,SAAUhzZ,GAAU,OAAOA,aAAkBiyZ,EAAYjyZ,GAAQgzZ,oBAKrE,SAAUhzZ,GAAU,OAAQA,aAAkBiyZ,EAAYjyZ,GAAQizZ,YAC3C,oBAAnBjzZ,EAAOkzZ,SAiBtB,SAASC,EAAenzZ,GACpB,OAAKmwZ,EAGD4C,EAAqB/yZ,GAhH7B,SAA2BA,GACvB,IAAIozZ,EAAOpzZ,EAAOkzZ,UAClB,OAAOf,EAAe,EAAG,EAAGiB,EAAK9kW,MAAO8kW,EAAK7uT,QA+GlC8uT,CAAkBrzZ,GAEtBuyZ,EAA0BvyZ,GALtBkyZ,EAuCf,SAASC,EAAetna,EAAG2zB,EAAG8vC,EAAOi2C,GACjC,MAAO,CAAE15G,EAAGA,EAAG2zB,EAAGA,EAAG8vC,MAAOA,EAAOi2C,OAAQA,GAO/C,IAAI+uT,EAAmC,WAMnC,SAASA,EAAkBtzZ,GAMvBhtB,KAAKugb,eAAiB,EAMtBvgb,KAAKwgb,gBAAkB,EAMvBxgb,KAAKygb,aAAetB,EAAe,EAAG,EAAG,EAAG,GAC5Cn/a,KAAKgtB,OAASA,EA0BlB,OAlBAszZ,EAAkBnib,UAAUuzS,SAAW,WACnC,IAAI/7I,EAAOwqR,EAAengb,KAAKgtB,QAE/B,OADAhtB,KAAKygb,aAAe9qR,EACZA,EAAKr6E,QAAUt7E,KAAKugb,gBACxB5qR,EAAKpkC,SAAWvxH,KAAKwgb,iBAQ7BF,EAAkBnib,UAAUuib,cAAgB,WACxC,IAAI/qR,EAAO31J,KAAKygb,aAGhB,OAFAzgb,KAAKugb,eAAiB5qR,EAAKr6E,MAC3Bt7E,KAAKwgb,gBAAkB7qR,EAAKpkC,OACrBokC,GAEJ2qR,EAnD4B,GAsDnCK,EAOA,SAA6B3zZ,EAAQ4zZ,GACjC,IAAIC,EA/FZ,SAA4B3nM,GACxB,IAAIrhO,EAAIqhO,EAAGrhO,EAAG2zB,EAAI0tM,EAAG1tM,EAAG8vC,EAAQ49J,EAAG59J,MAAOi2C,EAAS2nH,EAAG3nH,OAElDuvT,EAAoC,qBAApBC,gBAAkCA,gBAAkB3ib,OACpEu3J,EAAOv3J,OAAOC,OAAOyib,EAAO3ib,WAShC,OAPA6gb,EAAmBrpR,EAAM,CACrB99I,EAAGA,EAAG2zB,EAAGA,EAAG8vC,MAAOA,EAAOi2C,OAAQA,EAClC+C,IAAK9oF,EACLhxB,MAAO3C,EAAIyjE,EACXi5C,OAAQhD,EAAS/lF,EACjBjxB,KAAM1C,IAEH89I,EAkFeqrR,CAAmBJ,GAOrC5B,EAAmBh/a,KAAM,CAAEgtB,OAAQA,EAAQ6zZ,YAAaA,KAK5DI,EAAmC,WAWnC,SAASA,EAAkBr8Y,EAAU82O,EAAYwlK,GAc7C,GAPAlhb,KAAKmhb,oBAAsB,GAM3Bnhb,KAAKohb,cAAgB,IAAIrE,EACD,oBAAbn4Y,EACP,MAAM,IAAIviC,UAAU,2DAExBrC,KAAKqhb,UAAYz8Y,EACjB5kC,KAAKshb,YAAc5lK,EACnB17Q,KAAKuhb,aAAeL,EAoHxB,OA5GAD,EAAkB9ib,UAAU8gI,QAAU,SAAUjyG,GAC5C,IAAKtpB,UAAU7B,OACX,MAAM,IAAIQ,UAAU,4CAGxB,GAAuB,qBAAZo+S,SAA6BA,mBAAmBriT,OAA3D,CAGA,KAAM4uB,aAAkBiyZ,EAAYjyZ,GAAQyzR,SACxC,MAAM,IAAIp+S,UAAU,yCAExB,IAAIm/a,EAAexhb,KAAKohb,cAEpBI,EAAav9a,IAAI+oB,KAGrBw0Z,EAAa95a,IAAIslB,EAAQ,IAAIszZ,EAAkBtzZ,IAC/ChtB,KAAKshb,YAAYnD,YAAYn+a,MAE7BA,KAAKshb,YAAYlxJ,aAQrB6wJ,EAAkB9ib,UAAU+gI,UAAY,SAAUlyG,GAC9C,IAAKtpB,UAAU7B,OACX,MAAM,IAAIQ,UAAU,4CAGxB,GAAuB,qBAAZo+S,SAA6BA,mBAAmBriT,OAA3D,CAGA,KAAM4uB,aAAkBiyZ,EAAYjyZ,GAAQyzR,SACxC,MAAM,IAAIp+S,UAAU,yCAExB,IAAIm/a,EAAexhb,KAAKohb,cAEnBI,EAAav9a,IAAI+oB,KAGtBw0Z,EAAah5T,OAAOx7F,GACfw0Z,EAAazlb,MACdiE,KAAKshb,YAAYjD,eAAer+a,SAQxCihb,EAAkB9ib,UAAUg8M,WAAa,WACrCn6M,KAAKyhb,cACLzhb,KAAKohb,cAAclua,QACnBlT,KAAKshb,YAAYjD,eAAer+a,OAQpCihb,EAAkB9ib,UAAUsgb,aAAe,WACvC,IAAI9mY,EAAQ33C,KACZA,KAAKyhb,cACLzhb,KAAKohb,cAAc10a,SAAQ,SAAUg1a,GAC7BA,EAAYhwI,YACZ/5P,EAAMwpY,oBAAoB/0a,KAAKs1a,OAU3CT,EAAkB9ib,UAAUwgb,gBAAkB,WAE1C,GAAK3+a,KAAK0+a,YAAV,CAGA,IAAIj9J,EAAMzhR,KAAKuhb,aAEX53a,EAAU3J,KAAKmhb,oBAAoBn4a,KAAI,SAAU04a,GACjD,OAAO,IAAIf,EAAoBe,EAAY10Z,OAAQ00Z,EAAYhB,oBAEnE1gb,KAAKqhb,UAAUrgb,KAAKygR,EAAK93Q,EAAS83Q,GAClCzhR,KAAKyhb,gBAOTR,EAAkB9ib,UAAUsjb,YAAc,WACtCzhb,KAAKmhb,oBAAoB/xa,OAAO,IAOpC6xa,EAAkB9ib,UAAUugb,UAAY,WACpC,OAAO1+a,KAAKmhb,oBAAoBt/a,OAAS,GAEtCo/a,EAlJ4B,GAwJnCx/R,EAA+B,qBAAZp5I,QAA0B,IAAIA,QAAY,IAAI00a,EAKjE59S,EAOA,SAASA,EAAev6F,GACpB,KAAM5kC,gBAAgBm/H,GAClB,MAAM,IAAI98H,UAAU,sCAExB,IAAKqB,UAAU7B,OACX,MAAM,IAAIQ,UAAU,4CAExB,IAAIq5Q,EAAa8hK,EAAyBsB,cACtCnrW,EAAW,IAAIstW,EAAkBr8Y,EAAU82O,EAAY17Q,MAC3DyhJ,EAAU/5I,IAAI1H,KAAM2zE,IAK5B,CACI,UACA,YACA,cACFjnE,SAAQ,SAAU26F,GAChB83B,EAAehhI,UAAUkpG,GAAU,WAC/B,IAAI6xI,EACJ,OAAQA,EAAKz3F,EAAU19I,IAAI/D,OAAOqnG,GAAQp/F,MAAMixO,EAAIx1O,eAI5D,IAAIvH,EAEuC,qBAA5Bihb,EAASj+S,eACTi+S,EAASj+S,eAEbA,EAGIhjI,Q,iYCvzBUwlb,I,WAqBfC,I,WAkBAC,I,WAoDAC,I,WAmDOC,I,WA4CPC,I,WAwCAC,I,WAqGAC,I,WASAC,I,WAiEAC,I,WAKAC,I,WASAC,I,WA2FAC,I,WAKOC,I,WAmgBPC,I,WASAC,I,WAIAC,I,WA4EOC,I,WA2CPC,I,WA6IAC,I,WASAC,I,WAIAC,I,WAwRAC,I,WA8DAC,I,YAiGAC,I,YA0BOC,IAjvDF,SAAUzB,KAAV,iEACb,OADa,SACP92Z,YAAUmiM,IAAiB0B,iBAAkBszN,IADtC,OAEb,OAFa,SAEPn3Z,YAAUmiM,IAAiBQ,oBAAqBs0N,IAFzC,OAGb,OAHa,SAGPj3Z,YAAUmiM,IAAiBM,oBAAqBu0N,IAHzC,OAIb,OAJa,SAIPh3Z,YAAUmiM,IAAiBc,mBAAoB20N,IAJxC,OAKb,OALa,UAKP53Z,YAAUmiM,IAAiBwB,oBAAqByzN,IALzC,QAMb,OANa,UAMPv2Z,YAAWshM,IAAiBq2N,qBAAsBnB,IAN3C,QAOb,OAPa,UAOPr3Z,YAAUmiM,IAAiBs2N,4BAA6BV,IAPjD,QAQb,OARa,UAQP/3Z,YAAUmiM,IAAiBY,WAAY40N,IARhC,QASb,OATa,UASP92Z,YAAWshM,IAAiBu2N,8BAA+BxB,IATpD,QAUb,OAVa,UAUPr2Z,YAAWshM,IAAiB0C,oBAAqB2yN,IAV1C,QAWb,OAXa,UAWPx3Z,YAAUmiM,IAAiBE,wBAAyB21N,IAX7C,QAYb,OAZa,UAYPn3Z,YAAWshM,IAAiBsD,cAAewyN,IAZpC,QAab,OAba,UAaPp3Z,YAAWshM,IAAiBw2N,oBAAqBJ,IAb1C,QAcb,OAda,UAcPv4Z,YAAUmiM,IAAiBy2N,UAAW7B,IAd/B,wCAqBf,SAAUA,GAAa12Z,GAAvB,0FACmDA,EAAOgc,SAAW,GAA3D0yW,EADV,EACUA,QAASjnF,EADnB,EACmBA,SAAU2U,EAD7B,EAC6BA,UAAW6nF,EADxC,EACwCA,OACjCvV,GAA8B,IAAnBA,EAAQ/3Y,OAF1B,uBAGQstZ,GAAUA,IAHlB,0BAMwB,OANxB,SAM8BnuZ,YAAKmib,GAAU,CAAEvpC,UAASjnF,SAAUA,GAAY,KAN9E,mBAMU33Q,EANV,EAMUA,MANV,EAMgB5J,KACF4J,EAPd,wBAQQm0W,GAAUA,IARlB,8BAWQu0B,EAAY1oY,EAAKj3C,IAAMi3C,EAAKj3C,IAAI,MAAQi3C,EAAK/Z,GAXrD,wBAaQkuX,GAAUA,IAblB,2BAgBM7nF,GAAaA,EAAUo8G,GAhB7B,wCAkBA,SAAU7B,GACR32Z,GADF,mFAiBM,OAbFgc,EACEhc,EADFgc,QAIAy8Y,EAEEz8Y,EAFFy8Y,UACA1iZ,EACEiG,EADFjG,GATJ,SAiBYjgC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,QACTC,SAAU,mBACV5zD,OAAQ,CACNzyC,KAAMyjb,EACN1iZ,MAEFw1C,KAAM,QA1Bd,mBAYIz7B,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAmBE4J,EAhCN,oBAiCUqtD,EAAgBj/E,iBAAO4xB,GAEV,MAD0BqtD,EAAcznF,MAAM,CAAC,UAAW,QAAS,gBAlC1F,iBAoCMoH,QAAQ7Z,MAAM,kCAAmC,CAC/C6sC,OACA5J,QAtCR,wBAyCM,OAzCN,UAyCYk0D,YAAI,IAAImpH,IAAqBk1N,IAzCzC,gCA4CI37Z,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QA5C9C,QA8CE,OA9CF,UA8CQk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAhDV,wCAoDA,SAAUm3U,GACR52Z,GADF,qFAmBM,OAfFgc,EACEhc,EADFgc,QAIAy8Y,EAGEz8Y,EAHFy8Y,UACAz5T,EAEEhjF,EAFFgjF,MACAwpM,EACExsR,EADFwsR,OAVJ,SAmBY1yT,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,QACTC,SAAU,mBACV5zD,OAAQ,CACNzyC,KAAMyjb,GAERltW,KAAM,CACJyzC,QACAwpM,eA7BV,mBAcI14Q,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAoBE4J,EAnCN,oBAoCUqtD,EAAgBj/E,iBAAO4xB,GAEV,MAD0BqtD,EAAcznF,MAAM,CAAC,UAAW,QAAS,gBArC1F,iBAuCMoH,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QAzCR,wBA4CM,OA5CN,UA4CYk0D,YAAI,IAAImpH,IAAqBk1N,IA5CzC,gCA+CI37Z,QAAQ7Z,MAAM,cAAe,CAAEijC,QA/CnC,wCAmDO,SAAU2wY,GACf72Z,GADK,qFAgBD,OAZFgc,EACEhc,EADFgc,QAGAmrL,EAEEnrL,EAFFmrL,QACAsxN,EACEz8Y,EADFy8Y,UARG,SAgBK3ib,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,QACTC,SAAU,8BACV5zD,OAAQ,CACNixY,cAAeD,EACf1iZ,GAAIoxL,OAtBL,mBAWHr3K,EAXG,EAWHA,KACA7sC,EAZG,EAYHA,OAcE6sC,EA1BC,oBA2BGqtD,EAAgBj/E,iBAAO4xB,GAGN,OAFjB6oY,EAAyCx7U,EAAcznF,MAAM,CAAC,UAAW,QAAS,kBA5BrF,iBA+BD,OA/BC,UA+BK0kF,YAAI,IAAI6oH,IAA6B01N,IA/B1C,gCAiCD77Z,QAAQ7Z,MAAM,0CAA2C,CACvD6sC,OACA7sC,UAnCD,gCAwCH,OAxCG,UAwCGm3F,YAAI,IAAI+oH,IAA0B,CAAElgN,WAxCvC,wCA4CP,SAAU6za,GACR92Z,GADF,iFAYM,OAROhrB,EACPgrB,EADFgc,QAJJ,SAYYlmC,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACP,CACEo/D,QAAS,QACTC,SAAU,iBACV5zD,OAAQ,CACNzyC,aAlBV,mBAOI86C,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAgBE4J,EAxBN,oBAyBUqtD,EAAgBj/E,iBAAO4xB,GAEV,OADb8oY,EAAuCz7U,EAAcznF,MAAM,CAAC,UAAW,QAAS,iBA1B1F,iBA4BMoH,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QA9BR,wBAiCM,OAjCN,UAiCYk0D,YAAI,IAAIqpH,IAA8B,CAAE3zK,KAAM8oY,EAAa5jb,UAjCvE,gCAoCI8nB,QAAQ7Z,MAAM,cAAe,CAAEijC,QApCnC,wCAwCA,SAAU6wY,GACR/2Z,GADF,mHAeiB,OAfjB,EAaMA,EATFgc,QACEmrL,EALN,EAKMA,QACAsxN,EANN,EAMMA,UACAI,EAPN,EAOMA,YACArmU,EARN,EAQMA,UARN,IASMsmU,iBATN,MASkBpxa,gBATlB,MAUMqxa,kBAVN,MAUmB,KAVnB,EAWMC,EAXN,EAWMA,wBAXN,SAeuBnkV,YAAO/1C,eAf9B,UAeQC,EAfR,OAgBQk6X,EAAWzmU,IAAcv+E,iBAAekB,OACxC+jZ,EAAiBD,EAAW,QAAU,QACtCE,EAAiB,KAGnBV,IAAc/pZ,qBAAmBilS,aAAe8kH,IAAc/pZ,qBAAmB0qZ,MArBvF,iBAsBY,OAtBZ,UAsBkBvkV,YAAOy/C,gBAtBzB,WAsBIv5C,EAtBJ,wBAwBM,OAxBN,UAwBYjlG,YAAKujb,IAAqB,IAAIj2X,MAxB1C,QAyBc,OAzBd,UAyBoByxC,YAAOy/C,gBAzB3B,QAyBMv5C,EAzBN,eAmCM,OAnCN,UAmCYjlG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,YACTC,SAAUw9U,EACVS,aAAyB,OAAXv6X,EAAkBm6X,EAAiBC,EACjD5tW,KAAK,aACHwvB,SACG+9U,EAAUzla,QAEfkma,oBAAoB,OA7C5B,oBA8BIzpY,EA9BJ,EA8BIA,KACA5J,EA/BJ,EA+BIA,KAmBE4J,EAlDN,oBAmDUqtD,EAAgBj/E,iBAAO4xB,GAEN,OADjB0pY,EAAyCr8U,EAAcznF,MAAM,CAAC,UAAW,YAAa+ia,KApDhG,iBAsDM37Z,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QAxDR,wBA6D4B,OAFhBlxC,EAAOwkb,EAAgB9ja,MAAM,EAAE,EAAG,SAClC+ja,EAAUD,EAAgB9ja,MAAM,EAAE,EAAG,OA5DjD,UA6DkCm/E,YAAOj1C,eA7DzC,QA8DM,OADM+B,EA7DZ,iBA8DYy4C,YAAI,IAAIqoH,IAAgB,CAC5B1sL,GAAIoxL,EACJsyN,UACAzkb,OACA0kb,WAAY,CACVV,2BAEFW,YAAa,YAAgB,EAAbjxa,OACV+va,IAAc/pZ,qBAAmBilS,YACnCp4N,IAAmB9rE,kBAAgBmqZ,2BAAnC,aACEC,eAAgBh3Z,KAAK+xB,MAAQmkY,GAC1Bp3X,IAEI82X,IAAc/pZ,qBAAmB0qZ,OAC1C79U,IAAmB9rE,kBAAgBqqZ,kBAAnC,aACED,eAAgBh3Z,KAAK+xB,MAAQmkY,GAC1Bp3X,KAITo4X,SAAU,YAAgB,EAAbrxa,OACP+va,IAAc/pZ,qBAAmBilS,YACnCp4N,IAAmB9rE,kBAAgBuqZ,0BAAnC,eACKr4X,IAEI82X,IAAc/pZ,qBAAmB0qZ,OAC1C79U,IAAmB9rE,kBAAgBwqZ,iBAAnC,eACKt4X,QAzFjB,gCAgGI,OAhGJ,UAgGUy4C,YAAI,IAAIiqH,KAhGlB,QAiGIvnM,QAAQ7Z,MAAM,2BAA4B,CAAEijC,QAjGhD,wCAqGA,SAAU8wY,GACRh3Z,GADF,iEAGE,OAHF,SAGQo9E,YAAK,CACT65U,YAAanhb,YAAKmhb,GAAaj3Z,GAC/Bk6Z,aAAcpkb,YAAKohb,MALvB,uCASA,SAAUD,GACRj3Z,GADF,iHAciB,OAdjB,EAYMA,EARFgc,QACEy8Y,EALN,EAKMA,UACAI,EANN,EAMMA,YANN,IAOMC,iBAPN,MAOkBpxa,gBAPlB,MAQMyya,8BARN,aASMn9U,eATN,MASgB,GAThB,EAUM28U,EAVN,EAUMA,YAVN,SAcuB9kV,YAAO/1C,eAd9B,OAekC,OAD1BC,EAdR,gBAewC81C,YAAO81C,eAf/C,OA2BM,OAZE6zL,EAfR,OAgBQhsN,EAhBR,OAgBoBgsN,QAhBpB,IAgBoBA,OAhBpB,EAgBoBA,EAAyB9oT,MAAM,CAAC,UAAW,OACvDuja,EAAWzmU,IAAcv+E,iBAAekB,OACxC+jZ,EAAiBD,EAAW,QAAU,QACrB,KAnBzB,UA2BYnjb,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,SACTC,SAAUw9U,EACVS,aAAyB,OAAXv6X,EAAkBm6X,EAbf,KAcjB3tW,KAAK,2BACAutW,EAAUzla,QADX,IAEF8ma,2BAEFn9U,eArCR,oBAsBIltD,EAtBJ,EAsBIA,KACA5J,EAvBJ,EAuBIA,KAmBE4J,EA1CN,oBA2CUqtD,EAAgBj/E,iBAAO4xB,GAEN,OADjB0pY,EAAyCr8U,EAAcznF,MAAM,CAAC,UAAW,SAAU+ia,KA5C7F,iBA8CM37Z,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QAhDR,wBAqDM,OAFMlxC,EAAOwkb,EAAgB9ja,MAAM,EAAE,EAAG,SAClC+ja,EAAUD,EAAgB9ja,MAAM,EAAE,EAAG,OApDjD,UAqDY5f,YAAKwhb,GAAW,IAAI70N,IAAgB,CACxCg3N,UACAzkb,OACA2kb,iBAxDR,gCA4DI,OA5DJ,UA4DUv/U,YAAI,IAAIyqH,KA5DlB,QA6DI/nM,QAAQ7Z,MAAM,qBAAsB,CAAEijC,QA7D1C,wCAiEA,SAAUgxY,KAAV,iEACE,OADF,SACQx9Z,YAAKooM,IAAiBs4N,uBAD9B,OAEE,OAFF,SAEQhgV,YAAI,IAAIuqH,KAFhB,uCAKA,SAAUwyN,GACRn3Z,GADF,iEAGE,OAHF,SAGQo9E,YAAK,CACT65U,YAAanhb,YAAKshb,GAAgBp3Z,GAClCk6Z,aAAcpkb,YAAKuhb,MALvB,uCASA,SAAUD,GACRp3Z,GADF,kGAUMA,EANFgc,QACEyD,EALN,EAKMA,SACA0nL,EANN,EAMMA,QACAkzN,EAPN,EAOMA,UACAr9U,EARN,EAQMA,QAIAq9U,IAAcvrZ,mBAAiBwrZ,WAZrC,gBAaI,OAbJ,SAaUlgV,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,mBACJh6N,MAAO,CAAEhf,OAAQy6E,IAAQ55E,EAAE,oDAfjC,6BAkBI,OAlBJ,SAkBUu5E,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,mBACJh6N,MAAO,CAAEhf,OAAQy6E,IAAQ55E,EAAE,2CApBjC,OAwBE,OAxBF,UAwBQu5E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA1BV,QAmCM,OAnCN,UAmCY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,YACTC,SAAU,YACV5zD,OAAQ,CACN0/K,WAEFnqH,eA3CR,oBA8BIltD,EA9BJ,EA8BIA,KACA5J,EA/BJ,EA+BIA,KAiBE4J,EAhDN,oBAiDUqtD,EAAgBj/E,iBAAO4xB,GAEN,OADjB0pY,EAAyCr8U,EAAcznF,MAAM,CAAC,UAAW,YAAa,SAlDhG,iBAoDMoH,QAAQ7Z,MAAM,gCAAiC,CAC7C6sC,OACA5J,QAtDR,wBA2DM,OAFMlxC,EAAOwkb,EAAgB9ja,MAAM,EAAE,EAAG,SAClC+ja,EAAUD,EAAgB9ja,MAAM,EAAE,EAAG,OA1DjD,UA2DY5f,YAAKwhb,GAAW,IAAI70N,IAAgB,CACxChjL,WACAg6Y,UACAzkb,UA9DR,gCAmEI,OADA8nB,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QAlE5C,UAmEUk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KArEZ,QAuEI,OAvEJ,UAuEUrF,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,6CACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACX/kE,MAAO6kE,IAAQ55E,EAAE,yCACjB+5E,iBAAkB,KAClBC,QAAS,kBAAMp7D,EAAS,IAAI8I,IAAqB,CAAEk3D,MAAM,MACzD3E,YAAa,CACXC,MAAO,QACPC,eAAgB,iBApF1B,wCA2FA,SAAUq8U,KAAV,iEACE,OADF,SACQ39Z,YAAKooM,IAAiBy4N,oBAD9B,uCAKO,SAAUjD,GACft3Z,GADK,2QAwBiB,OApBpBgc,EACEhc,EADFgc,QAGAyD,EAYEzD,EAZFyD,SACAg6Y,EAWEz9Y,EAXFy9Y,QACA1jZ,EAUEiG,EAVFjG,GACA/gC,EASEgnC,EATFhnC,KACA6f,EAQEmnB,EARFnnB,MAXG,EAmBDmnB,EAPF09Y,kBAZG,MAYU,GAZV,IAmBD19Y,EALF29Y,mBAdG,MAcW,aAdX,IAmBD39Y,EAHF+9Y,gBAhBG,MAgBQ,aAhBR,IAmBD/9Y,EADFw+Y,mBAlBG,MAkBW,aAlBX,WAwBuB3lV,YAAOj1C,eAxB9B,OA0BH,OAFI+B,EAxBD,yBA0BGy4C,YAAI,IAAImoH,IAAwB,CAAEk3N,aA1BrC,OAgCQ,OADTgB,EAAa53Z,KAAK+xB,MA/BjB,UAgCc9+C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAChEtpC,QAAS,CACP,CACEo/D,QAAS,QACTC,SAAU,cACV9vB,KAAM,CACJx1C,GAAI0jZ,QAtCX,WAgCD/wa,EAhCC,OA2CDgya,EAAW73Z,KAAK+xB,MAER9E,GA7CP,EA6CqBpnC,GAAdonC,KAAM5J,EA7Cb,EA6CaA,KACV4J,EA9CH,qBA+COqtD,EAAgBj/E,iBAAO4xB,GACvB6qY,EAAwCx9U,EAAcznF,MAAM,CAAC,UAAW,QAAS,aAEvF6kF,EAASogV,EAAejla,MAAM,EAAE,EAAG,aACnCkla,EAAmBrgV,GAAqB,aAAXA,GAAoC,WAAXA,MAElC,OAAIm/U,QAAJ,IAAIA,OAAJ,EAAIA,EAAYV,yBArDrC,iBAsDG,OAtDH,UAsDS5+U,YAAI,IAAIypH,IAA6C,CACzDm1N,wBAAyBU,EAAWV,wBACpCz+U,OAAQ,aAxDb,WA2DuB,MAAlBogV,EA3DL,iBA4DG79Z,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QA9DL,4BAgEuB,YAAXq0D,EAhEZ,qBAiEOvlG,IAAS05B,qBAAmBilS,aAC9B3+T,IAAS05B,qBAAmB0qZ,OAC5Bpkb,IAAS05B,qBAAmBo1J,OAC5B9uL,IAAS05B,qBAAmBmsZ,YAC5B7lb,IAAS05B,qBAAmBosZ,YAC5B9lb,IAAS05B,qBAAmBqsZ,SAtEjC,iBA8EK,OANMC,EAAiB98Z,iBAAO,CAC5BipM,QAASpxL,EACT/gC,OACAqY,KAAMsta,EACNjB,eA5EP,UA8EWt/U,YAAI,IAAI+pH,IAA0BjmM,iBAAO,CAAE6X,KAAI/gC,WA9E1D,QA+EK,OA/EL,UA+EWolG,YAAI,IAAI6pH,IAA0B+2N,IA/E7C,oCAgFchmb,IAAS25B,oBAAkBssZ,YAhFzC,oBAiFoB,aAAX1gV,EAjFT,iBAkFO,OAlFP,UAkFaH,YAAI,IAAIqqH,IAA2B,CACvC+jG,OAAQmyH,EAAejla,MAAM,EAAE,EAAG,cAnF3C,gCAsFO,OAtFP,UAsFa0kF,YAAI,IAAIyqH,KAtFrB,oCAyFK7vN,IAAS85B,mBAAiBosZ,MACvBlmb,IAAS85B,mBAAiBwrZ,YAC1Btlb,IAAS85B,mBAAiBqsZ,aAC1Bnmb,IAAS85B,mBAAiBssZ,WAC1Bpmb,IAAS85B,mBAAiBusZ,WAC1Brmb,IAAS85B,mBAAiBwsZ,UAC1Btmb,IAAS85B,mBAAiBysZ,UAC1Bvmb,IAAS85B,mBAAiB0sZ,iBAC1Bxmb,IAAS85B,mBAAiB2sZ,cAC1Bzmb,IAAS85B,mBAAiB4sZ,cAC1B1mb,IAAS85B,mBAAiB6sZ,aAC1B3mb,IAAS85B,mBAAiB8sZ,oBAC1B5mb,IAAS85B,mBAAiB+sZ,iBAC1B7mb,IAAS85B,mBAAiBgtZ,kBAC1B9mb,IAAS85B,mBAAiBitZ,eAC1B/mb,IAAS85B,mBAAiBktZ,cAC1Bhnb,IAAS85B,mBAAiBmtZ,iBAC1Bjnb,IAAS85B,mBAAiBotZ,YAC1Blnb,IAAS85B,mBAAiBqtZ,YAC1Bnnb,IAAS85B,mBAAiBstZ,cAC1Bpnb,IAAS85B,mBAAiButZ,oBAC1Brnb,IAAS85B,mBAAiBwtZ,mBAC1Btnb,IAAS85B,mBAAiBytZ,QAC1Bvnb,IAAS85B,mBAAiB0tZ,QAC1Bxnb,IAAS85B,mBAAiB2tZ,QAC1Bznb,IAAS85B,mBAAiB4tZ,SAC1B1nb,IAAS85B,mBAAiB6tZ,aAnHlC,oBAqHoB,aAAXpiV,EArHT,iBA2HO,OALM8oF,EAAUs3P,EAAejla,MAAM,EAAE,EAAG,YACpCkna,EAAqD,eAA3B,OAAPv5P,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,kBAChCgkb,GAAkB,OAAPx5P,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,WAAY,GACtCikb,EAAiB,GAzH5B,UA2Ha1iV,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA7Hf,YA+HWm9U,EA/HX,iBAgIS,OAhIT,UAgIexiV,YAAI,IAAI3wD,IAAsB,CAClCgH,QAASmsY,EAAmB1+Z,iBAAO,CAAE6+Z,YAAaC,eAAatiH,IAAKr3I,YAAa,KACjF3oF,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACXC,iBAAkB,SAxI/B,gCA4KS,OAhCI5lG,IAAS85B,mBAAiBwrZ,WAC5BwC,EAAiBriV,IAAQ55E,EAAE,8CAA+C,CAAEg8Z,aAE5E7nb,IAAS85B,mBAAiBosZ,MACvBlmb,IAAS85B,mBAAiBqsZ,aAC1Bnmb,IAAS85B,mBAAiBssZ,WAC1Bpmb,IAAS85B,mBAAiBusZ,WAC1Brmb,IAAS85B,mBAAiBwsZ,UAC1Btmb,IAAS85B,mBAAiBysZ,UAC1Bvmb,IAAS85B,mBAAiB0sZ,iBAC1Bxmb,IAAS85B,mBAAiB2sZ,cAC1Bzmb,IAAS85B,mBAAiB4sZ,cAC1B1mb,IAAS85B,mBAAiB6sZ,aAC1B3mb,IAAS85B,mBAAiB8sZ,oBAC1B5mb,IAAS85B,mBAAiB+sZ,iBAC1B7mb,IAAS85B,mBAAiBgtZ,kBAC1B9mb,IAAS85B,mBAAiBitZ,eAC1B/mb,IAAS85B,mBAAiBktZ,cAC1Bhnb,IAAS85B,mBAAiBmtZ,iBAC1Bjnb,IAAS85B,mBAAiBotZ,YAC1Blnb,IAAS85B,mBAAiBqtZ,YAC1Bnnb,IAAS85B,mBAAiBstZ,cAC1Bpnb,IAAS85B,mBAAiButZ,oBAC1Brnb,IAAS85B,mBAAiBwtZ,mBAC1Btnb,IAAS85B,mBAAiBytZ,QAC1Bvnb,IAAS85B,mBAAiB0tZ,QAC1Bxnb,IAAS85B,mBAAiB2tZ,QAC1Bznb,IAAS85B,mBAAiB4tZ,SAC1B1nb,IAAS85B,mBAAiB6tZ,eAE7BG,EAAiBriV,IAAQ55E,EAAE,6CAA8C,CAAEg8Z,cA1KtF,UA4KeziV,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS22Y,EACTpiV,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACXC,iBAAkB,SApL/B,mCAwL2B,WAAXL,EAxLhB,iBA6LO,OAJM8oF,EAAUs3P,EAAejla,MAAM,EAAE,EAAG,YACpCkna,EAAqD,eAA3B,OAAPv5P,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,kBAChCokb,GAAkB,OAAP55P,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,aAAc4hG,IAAQ55E,EAAE,4CA3L7D,UA6Lau5E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA/Lf,YAiMWm9U,EAjMX,iBAkMS,OAlMT,UAkMexiV,YAAI,IAAI3wD,IAAsB,CAClCgH,QAASmsY,EAAmB1+Z,iBAAO,CAAE6+Z,YAAaC,eAAatiH,IAAKr3I,YAAa,KACjF3oF,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACXC,iBAAkB,SA1M/B,oCA6MkBqiV,EA7MlB,iBA8MS,OA9MT,UA8Me7iV,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS82Y,EACTviV,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACXC,iBAAkB,SAtN/B,gCA0NS,OA1NT,UA0NeR,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,6CACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACX/kE,MAAO6kE,IAAQ55E,EAAE,yCACjB+5E,iBAAkB,KAClBC,QAAS,kBAAMp7D,EAAS,IAAI8I,IAAqB,CAAEk3D,MAAM,MACzD3E,YAAa,CACXC,MAAO,QACPC,eAAgB,iBAvO/B,oCA6OchmG,IAAS45B,6BAA2BsuZ,YA7OlD,oBA8OoB,aAAX3iV,EA9OT,iBA+OO,OA/OP,UA+OaH,YAAI,IAAIy7G,IAA2B,CACvC9/K,KACA0jZ,UACA5ka,WAlPT,oCAqPc7f,IAASo6B,0BAAwB+tZ,WArP/C,qBAsPoB,aAAX5iV,EAtPT,kBAwPmB,OAxPnB,UAwPyBzkG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAChEtpC,QAAS,CACP,CACEo/D,QAAS,OACTC,SAAU,UACV5zD,OAAQ,CACN+gR,OAAQmyH,EAAejla,MAAM,EAAE,EAAG,YAEpC+/T,SAAS,EACT/3N,gBAAgB,EAChBC,WAAW,EACXC,WAAW,OAnQxB,aAwPag5B,GAxPb,QAuQe9mG,KAvQf,kBAyQS,OADAtsB,OAAO+6B,SAASmvB,QAAQkpE,GAAI9mG,MAxQrC,UAyQesqD,YAAI,IAAI7U,KAA8C,IAzQrE,kCA0QkBqxD,GAAI1wG,KACbppB,QAAQ7Z,MAAM,uBAAwB2zI,IA3Q/C,sCA6Q2B,WAAXr8C,EA7QhB,kBA8QO,OA9QP,WA8QaH,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,0DACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,SACZL,SAAU,aAnRrB,SAuRK,OAvRL,WAuRWz6L,YAAI,IAAInW,KAAgC,IAvRnD,SAwRK,OAxRL,WAwRWmW,YAAI,IAAI/U,KAA4C,IAxR/D,sCAyRcrwF,IAASo6B,0BAAwBguZ,WAzR/C,qBA0RoB,aAAX7iV,EA1RT,kBA2RO,OA3RP,WA2RaH,YAAI,IAAInV,KAAoC,CAChD4wP,QAAS,IACTt7O,OAAQ,WACR8oF,QAASs3P,EAAejla,MAAM,EAAE,EAAG,eA9R5C,SAiSay6W,GAAe,CACnBktD,OAAQ,YAGJxwC,IAAY,OAAC3mW,QAAD,IAACA,GAAD,WAACA,EAAalK,eAAd,sBAAuB/4B,aAAvB,iBAA8B65F,OAAQ,KAClDrzB,IAAe,OAACvjC,QAAD,IAACA,GAAD,WAACA,EAAalK,eAAd,sBAAuB/4B,aAAvB,iBAA8BA,QAAS,KAEtDk4F,IAAO,WAACrrD,GAAQ5J,SAAT,iBAAsBi1D,OAAQ,GACrC+7B,GAASzgI,OAAM,WAAC0kG,GAAK+7B,cAAN,cAAC,GAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,GAAiB3xS,GAAK2xS,eAAL,eAA2B3xS,GAAK2xS,gBAAmB,UACnE3xS,GAAK2xS,sBACL3xS,GAAK+7B,OAEZ37B,IAAmB9rE,kBAAgB6tZ,cAAnC,iDACEzwC,aACApjU,gBACAytD,WACGi5P,IACAh1R,IACA2xS,IACAnrV,IArTZ,6BAyT2B,WAAX44C,EAzThB,kBA2TO,OA3TP,WA2TaH,YAAI,IAAInV,KAAoC,CAChD4wP,QAAS,IACTt7O,OAAQ,SACR8oF,QAASs3P,EAAejla,MAAM,EAAE,EAAG,eA9T5C,SAgUa2tK,GAAUs3P,EAAejla,MAAM,EAAE,EAAG,YACpC6na,GAA2B,WAAXhjV,GAA+C,cAAxB8oF,GAAQxqL,IAAI,UAAnC,OAA8DwqL,SAA9D,IAA8DA,IAA9D,WAA8DA,GAASxqL,IAAI,kBAA3E,mBAA8D,GAAyBq1C,qBAAvF,cAA8D,GAAwC7vC,SAAS,cAC/Hm/a,GAAwB,WAAXjjV,GAAgD,YAAlB,OAAP8oF,SAAO,IAAPA,QAAA,EAAAA,GAASxqL,IAAI,WAApC,OAA4DwqL,SAA5D,IAA4DA,IAA5D,WAA4DA,GAASxqL,IAAI,kBAAzE,mBAA4D,GAAyBq1C,qBAArF,cAA4D,GAAwC7vC,SAAS,WAE1H8xX,GAAe,CACnBktD,OAAQ,SACRE,cAAeA,KAAiB,EAChCC,WAAYA,KAAc,EAC1BC,wBAAyBp6P,GAAQxqL,IAAI,WAAa,KAClDwqL,QAAUm6P,IAAcD,GAAkBl6P,GAAQxqL,IAAI,MAAQwqL,GAAQxqL,IAAI,WAAc,MAGpFg0Y,IAAY,OAAC3mW,QAAD,IAACA,GAAD,WAACA,EAAalK,eAAd,sBAAuB/4B,aAAvB,iBAA8B65F,OAAQ,KAClDrzB,IAAe,OAACvjC,QAAD,IAACA,GAAD,WAACA,EAAalK,eAAd,sBAAuB/4B,aAAvB,iBAA8BA,QAAS,KAEtDk4F,IAAO,WAACrrD,GAAQ5J,SAAT,iBAAsBi1D,OAAQ,GACrC+7B,GAASzgI,OAAM,WAAC0kG,GAAK+7B,cAAN,cAAC,GAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,GAAiB3xS,GAAK2xS,eAAL,eAA2B3xS,GAAK2xS,gBAAmB,UACnE3xS,GAAK2xS,sBACL3xS,GAAK+7B,OAEZ37B,IAAmB9rE,kBAAgB6tZ,cAAnC,iDACEzwC,aACApjU,gBACAytD,WACGi5P,IACAh1R,IACA2xS,IACAnrV,IAGL7kC,QAAQ7Z,MAAM,uBAAwByF,GA/V7C,sCAiWc1T,IAASq6B,yBAAuBquZ,gBAjW9C,qBAkWoB,aAAXnjV,EAlWT,kBAmWO,OAnWP,WAmWaH,YAAI,IAAI99B,KAAuB,CACnCowO,WAAY,IACZnyM,OAAQ,WACR8oF,QAASs3P,EAAejla,MAAM,EAAE,EAAG,eAtW5C,sCAwW2B,WAAX6kF,EAxWhB,kBAyWO,OAzWP,WAyWaH,YAAI,IAAI99B,KAAuB,CACnCowO,WAAY,IACZnyM,OAAQ,SACR8oF,QAASs3P,EAAejla,MAAM,EAAE,EAAG,eA5W5C,sCA+Wc1gB,IAAS25B,oBAAkBgvZ,yBA/WzC,2CAgXYj1a,GAhXZ,YAkXK1T,IAAS65B,4BAA0B+uZ,cAChC5ob,IAAS65B,4BAA0BgvZ,sBACnC7ob,IAAS65B,4BAA0BivZ,gBACnC9ob,IAAS65B,4BAA0BkvZ,wBACnC/ob,IAASs6B,qBAAmB0uZ,WAtXpC,kBA0XK,OAFMC,GAAe9gV,EAAcznF,MAAM,CAAC,UAAW,QAAS,WAAY,IAxX/E,WA0XW0kF,YAAI,IAAIupH,IAAyB,CACrC7zK,KAAM,CACJwiD,OAAQv8D,GAEV/gC,OACAykb,UACApsa,KAAM4wa,MAhYb,sCAqYKjpb,IAAS25B,oBAAkBssZ,YArYhC,kBAsYG,OAtYH,WAsYS7gV,YAAI,IAAIyqH,KAtYjB,mCAwYG,OAxYH,WAwYSzqH,YAAI,IAAIiqH,KAxYjB,YA0YKrvN,IAAS25B,oBAAkBgvZ,yBA1YhC,2CA2YUj1a,GA3YV,SA6YCoU,QAAQ7Z,MAAM,oBAAqB,CAAEijC,QA7YtC,aA+YG00Y,EA/YH,kBAgZC,OAhZD,WAgZO9kb,YAAKygG,IAAa,MAhZzB,YAkZMqkV,EAlZN,yBAsZkB,OAFfsD,GAAer7Z,KAAK+xB,MApZvB,WAsZwBigD,YAAO2+G,eAtZ/B,YAsZG2qO,GAtZH,OAuZGC,GAAwBD,GAAatlb,IAAI,aAC3C7D,IAASw5B,kBAAgB6vZ,aAAyC,IAA1BD,IAA+BD,GAAatlb,IAAI,YAAc42B,kBAAgB6uZ,kBAxZvH,kBAyZoB,OAzZpB,WAyZ0BzpV,YAAO21C,YAAe,CAACl4C,OAAQv8D,KAzZzD,SAoaD,OAXM60G,GAzZL,OA0ZKI,GAAgBJ,GAAa/xI,IAAI,aACvC0iG,IAAmB9rE,kBAAgB6uZ,kBAAnC,aACEC,WAAYL,GAAeE,GAC3BI,WAAY,qBACZC,mBAAoB,EACpBnsV,OAAQv8D,EACRi1E,UAAWggC,IAAgC,KAC3C0zS,UAAsB,aAAXnkV,GACR54C,IAlaJ,WAoaKy4C,YAAI,IAAI/xD,IAAoB,CAAEmsF,UAAW,EAAGx0G,OAAQ,MApazD,YAsaY,aAAXu6E,EAtaD,kBAuaDo/U,EAAY,CAAEjxa,WAvab,6BAyaG1T,IAAS45B,6BAA2BsuZ,YAzavC,kBA4aC,OAFQptY,IA1aT,GA0auBpnC,GAAdonC,KAAM5J,GA1af,GA0aeA,IACd6zY,EAAS,CAAEznV,OAAQv8D,EAAI+Z,QAAM5J,OAAKrxB,QAAOvjB,IAAK4sb,GAAcv8X,kBA3a7D,WA4aOy4C,YAAI,IAAIm7G,KA5af,SA6aC,OA7aD,WA6aOn7G,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,uEACTu0D,SAAU,QACVC,YAAa,CACXC,iBAAkB,SAjbvB,mCAqbCm/U,EAAS,CAAErxa,WArbZ,iEA0bC1T,IAAS45B,6BAA2BsuZ,YA1brC,kBA6bD,OAFQptY,IA3bP,GA2bqBpnC,GAAdonC,KAAM5J,GA3bb,GA2baA,IACd6zY,EAAS,CAAEznV,OAAQv8D,EAAI+Z,QAAM5J,OAAKrxB,MAAO4la,EAAYnpb,IAAKopb,EAAU/4X,kBA5bnE,WA6bKy4C,YAAI,IAAIm7G,KA7bb,SA8bD,OA9bC,WA8bKn7G,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,uEACTu0D,SAAU,QACVC,YAAa,CACXC,iBAAkB,SAlcrB,sCAscD5lG,IAAS85B,mBAAiBosZ,MACvBlmb,IAAS85B,mBAAiBwrZ,YAC1Btlb,IAAS85B,mBAAiBqsZ,aAC1Bnmb,IAAS85B,mBAAiBssZ,WAC1Bpmb,IAAS85B,mBAAiBusZ,WAC1Brmb,IAAS85B,mBAAiBwsZ,UAC1Btmb,IAAS85B,mBAAiBysZ,UAC1Bvmb,IAAS85B,mBAAiB0sZ,iBAC1Bxmb,IAAS85B,mBAAiB2sZ,cAC1Bzmb,IAAS85B,mBAAiB4sZ,cAC1B1mb,IAAS85B,mBAAiB6sZ,aAC1B3mb,IAAS85B,mBAAiB8sZ,oBAC1B5mb,IAAS85B,mBAAiB+sZ,iBAC1B7mb,IAAS85B,mBAAiBgtZ,kBAC1B9mb,IAAS85B,mBAAiBitZ,eAC1B/mb,IAAS85B,mBAAiBktZ,cAC1Bhnb,IAAS85B,mBAAiBmtZ,iBAC1Bjnb,IAAS85B,mBAAiBotZ,YAC1Blnb,IAAS85B,mBAAiBqtZ,YAC1Bnnb,IAAS85B,mBAAiBstZ,cAC1Bpnb,IAAS85B,mBAAiButZ,oBAC1Brnb,IAAS85B,mBAAiBwtZ,mBAC1Btnb,IAAS85B,mBAAiBytZ,QAC1Bvnb,IAAS85B,mBAAiB0tZ,QAC1Bxnb,IAAS85B,mBAAiB2tZ,QAC1Bznb,IAAS85B,mBAAiB4tZ,SAC1B1nb,IAAS85B,mBAAiB6tZ,aAhe5B,kBAkeD,OAleC,WAkeKviV,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,6CACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,OAEZl6L,YAAa,CACX/kE,MAAO6kE,IAAQ55E,EAAE,yCACjB+5E,iBAAkB,KAClBC,QAAS,kBAAMp7D,EAAS,IAAI8I,IAAqB,CAAEk3D,MAAM,MACzD3E,YAAa,CACXC,MAAO,QACPC,eAAgB,iBA/erB,mCAofD++U,EAAS,CAAErxa,WApfV,SAufC,OAvfD,sBAufOg2P,cAvfP,sCAyfD,OAzfC,WAyfKtkK,YAAI,IAAImoH,IAAwB,CAAEk3N,QAAS,MAzfhD,gBA2fHe,IA3fG,8EAmgBP,SAAUjD,GACNv3Z,GADJ,iEAGE,OAHF,SAGQo9E,YAAK,CACT65U,YAAanhb,YAAK2hb,GAAkBz3Z,GACpCk6Z,aAAcpkb,YAAK0hb,MALvB,uCASA,SAAUA,KAAV,iEACE,OADF,SACQ99Z,YAAKooM,IAAiBoD,oCAD9B,uCAIA,SAAUuyN,GACRz3Z,GADF,2GAeE,OAfF,EAYMA,EARFgc,QACEs9Y,EALN,EAKMA,aACAT,EANN,EAMMA,YACAJ,EAPN,EAOMA,UACAjmU,EARN,EAQMA,UARN,IASMsmU,iBATN,MASkBpxa,gBATlB,EAUcouZ,EAVd,EAUMxjU,OAIEA,EAASwjU,GAAoBgjB,GAAaA,EAAUjgb,IAAI,UAdhE,SAeQuhG,YAAI,IAAI2oH,KAfhB,UAiBgB,MAAVzwH,IAA8B,IAAZA,EAjBxB,iDAqB2B,OArB3B,SAqBiCuC,YAAOn/C,eArBxC,OAsBiB,OADTo9E,EArBR,iBAsBuBj+B,YAAO/1C,eAtB9B,QAiCM,OAXEC,EAtBR,OAuBQm6X,EAAiBI,EACN9mU,IAAcv+E,iBAAekB,OACvB,KAzBzB,UAiCYr/B,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACP,CACEo/D,QAAS,OACTC,SAAUw9U,EACVS,aAAcxmT,EACe,OAAX/zE,EACIm6X,EAfL,KAiBCn6X,EAClBwsB,KAAK,aACH+mB,UACGwmV,EAAUzla,aA7CvB,oBA4BIy8B,EA5BJ,EA4BIA,KACA5J,EA7BJ,EA6BIA,KAqBE4J,EAlDN,oBAmDUqtD,EAAgBj/E,iBAAO4xB,GAGT,OAFdmuY,EAAe9gV,EAAcznF,MAAM,CAAC,UAAW,OAAQ+ia,KApDjE,iBAuDM37Z,QAAQ7Z,MAAM,uBAAwB,CACpC6sC,OACA5J,QAzDR,wBA+DM,OAHMuzY,EAAUwE,EAAavoa,MAAM,EAAE,EAAG,OAClC1gB,EAAOipb,EAAavoa,MAAM,EAAE,EAAG,SA7D3C,UA+DY5f,YAAKwhb,GAAW,IAAI70N,IAAgB,CACxC1sL,GAAIu8D,EACJmnV,UACAzkb,UAlER,gCAuEI,OAvEJ,UAuEUolG,YAAI,IAAIyoH,IAA4B38K,IAvE9C,QAwEIppB,QAAQ7Z,MAAM,cAAe,CAAEijC,QAxEnC,wCA4EO,SAAUwxY,GAAwB13Z,GAAlC,uFAcD,OAdC,EAODA,EALFgc,QACE08Y,EAHC,EAGDA,cACA1jb,EAJC,EAIDA,KACA+gC,EALC,EAKDA,GALC,SAcKjgC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,QACTC,SAAU,2BACV9vB,KAAM,CACJmtW,gBACA3iZ,KACA/gC,YArBD,mBASH86C,EATG,EASHA,KACA7sC,EAVG,EAUHA,OAeE6sC,EAzBC,oBA0BGqtD,EAAgBj/E,iBAAO4xB,GAGN,OAFjB6oY,EAAyCx7U,EAAcznF,MAAM,CAAC,UAAW,QAAS,kBA3BrF,iBA8BD,OA9BC,UA8BK0kF,YAAI,IAAI6oH,IAA6B01N,IA9B1C,gCAgCD77Z,QAAQ7Z,MAAM,yCAA0C,CACtD6sC,OACA7sC,UAlCD,gCAuCH,OAvCG,UAuCGm3F,YAAI,IAAI+oH,IAA0B,CAAElgN,WAvCvC,wCA2CP,SAAU00a,GACR33Z,GADF,6EAYM,OARFmwW,EACEnwW,EAAOgc,QADTm0V,aAJJ,SAYYr6X,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,SACTC,SAAU,uBACV9vB,KAAM4kT,MAhBZ,gBAOIrgV,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,IAWE4J,GAGFhzB,QAAQ7Z,MAAM,8BAA+B,CAAEijC,QAtBnD,uCA0BA,SAASy4Y,GAAT,EAAgD7xN,GAAY,IAAD,EAA9B2rN,EAA8B,EAAnCr/a,IAAgB02C,EAAmB,EAAnBA,KAChCiyO,EAAU,iBAAGj1D,QAAH,IAAGA,OAAH,EAAGA,EAAUhvN,KAAI,SAACq3L,GAAD,OAAaA,EAAQt8L,IAAI,gBAA1C,QAAoDkU,iBACpE,OAAQ0ra,GACN,KAAKjqZ,kBAAgBo8Y,UACrB,KAAKp8Y,kBAAgB88Y,mBACnB,IAAMsT,EAAU,OAAG9uY,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,UACvByK,EAAI,OAAGwsC,QAAH,IAAGA,OAAH,EAAGA,EAAMp6B,MAAM,CAAC,UAAW,UAC/B8yS,EAAM,OAAG14Q,QAAH,IAAGA,OAAH,EAAGA,EAAMp6B,MAAM,CAAC,UAAW,QAAS,YAC1CwrL,EAAK,OAAGpxJ,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,SAClBgmb,EAAY,OAAG/uY,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,gBACzBimb,EAAoC,mBAAV59O,EAC1B69O,EAAe,OAAGjvY,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,mBAC5Bmmb,EAA+C,mBAApBD,EAC3BE,EAA0C,mBAAjBJ,EAC/B,OAAQv7a,GAAQw7a,EAAoB5ga,iBAAO,CACzC4xB,KAAK,+DACAxsC,GAAS,CACVypI,QAAQ,aACN/3I,KAAM,UACNsO,QACGs7a,GAAe,CAAEp2H,aAGrBs2H,GAAqB,CAAE59O,UACvB89O,GAAsB,CAAED,oBACxBE,GAAoB,CAAEJ,iBAVvB,IAWF98J,aACAzrL,IAAKrzE,gBAAgBO,OAAO+6B,SAAS3uC,OAAS,wCAE7ClI,gBAEP,KAAK8mB,kBAAgBu8Y,SACrB,KAAKv8Y,kBAAgBw8Y,UACnB,OAAO9sZ,iBAAO,CACZ4xB,KAAMA,EAAKtzC,IAAI,aAAculR,KAGjC,KAAKvzP,kBAAgBy8Y,sBAAwB,IAAD,EAC1C,OAAO/sZ,iBAAO,CACZ4xB,KAAM,CACJiyO,aACAppP,IAAG,iBAAEmX,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,cAAZ,YAIT,KAAK21B,kBAAgBs8Y,gBAAkB,IAAD,IAC9BoU,EAAwB,iBAAGpyN,QAAH,IAAGA,OAAH,EAAGA,EAAUrsN,QAAO,SAACutI,EAAKmnD,EAASlkM,GAC/D,IAAM29H,EAAYumE,EAAQt8L,IAAI,MAExBsmb,EADWhqP,EAAQt8L,IAAI,YACDiF,KAAI,SAACguH,GAC/B,OAAOA,EAAQjzH,IAAI,SAGfumb,EAA0B13a,gBAAM5B,eAAc,SAACywQ,GACnDA,EAAI/5Q,IAAI,KAAMoyH,GACd2nJ,EAAI/5Q,IAAI,WAAY2ib,MAGtB,OAAOnxS,EAAI9sI,KAAKk+a,KACfrya,yBAb2B,QAahBA,iBACd,wBAAO+iC,QAAP,IAAOA,OAAP,EAAOA,EAAMhqC,eAAc,SAAAywQ,GACzBA,EAAI/5Q,IAAI,aAAculR,GACtBxL,EAAI/5Q,IAAI,WAAY0ib,aAFtB,QAGMx3a,gBAER,KAAK8mB,kBAAgB0tK,SAAW,IAAD,IAC7B,OAAOh+K,iBAAO,CACZ4xB,KAAK,aACHuvY,cAAa,iBAAEvvY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,wBAAZ,SACbkpR,aACA88J,aAAY,iBAAE/uY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,uBAAZ,UACsB,SAA1B,OAAJi3C,QAAI,IAAJA,OAAA,EAAAA,EAAMj3C,IAAI,iBAA4B,CAAEymb,aAAc,OAAU,MAI1E,KAAK9wZ,kBAAgB68Y,IAAM,IAAD,MACxB,OAAOntZ,iBAAO,CACZ4xB,KAAM,CACJiyO,aACA88J,aAAY,iBAAE/uY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,uBAAZ,SACZ0mb,oBAAmB,iBAAEzvY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,8BAAZ,SACnB2mb,aAAY,iBAAE1vY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,uBAAZ,YAIlB,KAAK21B,kBAAgBm9Y,kBAAoB,IAAD,IAChCwT,EAAU,OAAGrvY,QAAH,IAAGA,GAAH,UAAGA,EAAMj3C,IAAI,mBAAb,aAAG,EAAuB4H,QAAO,SAACutI,EAAKliB,GAAN,OAAkBkiB,EAAI9sI,KAAK4qH,EAAQjzH,IAAI,oBAAmBkU,kBACrG80V,EAAiB,OAAG/xT,QAAH,IAAGA,GAAH,UAAGA,EAAMj3C,IAAI,mBAAb,aAAG,EAAuB4H,QAAO,SAACutI,EAAKliB,GAAN,OAAkBkiB,EAAI9sI,KAAKzK,OAAOq1H,EAAQjzH,IAAI,WAAUkU,kBAChH,OAAOmR,iBAAO,CACZ4xB,KAAM,CACJ2vY,UAAS,OAAE3vY,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,aACrB0lD,SAAQ,OAAEzO,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,YACpBsmb,aACAt9E,uBAIN,KAAKrzU,kBAAgB28Y,QACnB,OAAOjtZ,iBAAO,CACZ4xB,KAAM,CACJiyO,aACAt9G,MAAO,CAAC,UAId,QACE,OAAOvmJ,iBAAO,CACZ4xB,KAAM,CACJiyO,iBAOV,SAAU61J,GACR53Z,GADF,iEAGE,OAHF,SAGQo9E,YAAK,CACT65U,YAAanhb,YAAKgib,GAAc93Z,GAChCk6Z,aAAcpkb,YAAK+hb,MALvB,uCASA,SAAUA,KAAV,iEACE,OADF,SACQn+Z,YAAKooM,IAAiBkD,0BAD9B,uCAIA,SAAU8yN,GAAa93Z,GAAvB,2MAiBwB,OAhBdgc,EAAYhc,EAAZgc,QAENhnC,EAYEgnC,EAZFhnC,KACAoyM,EAWEprK,EAXForK,WACAs4O,EAUE1jZ,EAVF0jZ,cACAC,EASE3jZ,EATF2jZ,0BACA30U,EAQEhvE,EARFgvE,UACA1Y,EAOEt2D,EAPFs2D,OACAwjG,EAME95J,EANF85J,MACA96L,EAKEghC,EALFhhC,KACAywa,EAIEzvY,EAJFyvY,kBACAF,EAGEvvY,EAHFuvY,iBACAC,EAEExvY,EAFFwvY,eACAE,EACE1vY,EADF0vY,qBAEIl3S,EAAY3xG,KAAK+xB,MAhBzB,SAiB8BigD,YAAOj1C,eAjBrC,OA0CQ,OAzBA+B,EAjBR,OAqBe,YAAT3sD,IACFomG,EAAU,UACV3zD,EAAS,CACPujE,aAEF6T,EAAO,CAAC,UAAW,UAAW,WAAY,IAE/B,SAAT7pH,IACFomG,EAAU,OACV3zD,EAAS,CACP6qD,UAEFusB,EAAO,CAAC,UAAW,OAAQ,WAAY,IAjC3C,mBA0Cc/oH,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,UACAC,SAAU,iBACV5zD,aA9CR,oBAqCMqI,EArCN,EAqCMA,OACA5J,EAtCN,EAsCMA,KAtCN,uBAkDYA,EAlDZ,YAoDQ4J,EApDR,kBAqDYqtD,EAAgBj/E,iBAAO4xB,GACvB8vY,EAAuCziV,EAAcznF,MAAMmpG,GAC3Dw6K,EAAM,GACN7vE,EAAU,GACVg1N,EAAa,GACbqB,EAAY,GACZ7yN,EAAW,GA3DvB,cA4D6El3B,GA5D7E,uEA4DmBxyL,KAAcwyZ,EA5DjC,EA4DyBxjU,OAAiBw6H,EA5D1C,EA4D0CA,SAAoBgzN,EA5D9D,EA4DoD9yN,SA5DpD,cA6DmC0yN,GA7DnC,8GAgEyB,OAHNK,EA7DnB,QA8DgBtH,EA9DhB,OA8D4BsH,QA9D5B,IA8D4BA,OA9D5B,EA8D4BA,EAAc3mb,IAC1B0/a,EAAY6F,GAAaoB,EAAcjzN,GA/DvD,KAgEU+yN,EAhEV,SAgE+Bz/Z,YAAK23Z,GAAgB,CACxCzlV,OAAQwjU,EACR+iB,YAAamH,GAAWvpa,MAAK,qBAAGzhB,OAA4Byjb,KAAWI,YACvEC,YACAL,cApEZ,wBAgEoBv3a,KAhEpB,gBAsEUm4R,EAAIn4R,KAAJ,UAAY40Z,EAAZ,SACAtsM,EAAQtoN,KAAK40Z,GACb0oB,EAAWt9a,KAAKu3a,GAChBzrN,EAAS9rN,KAAK4+a,GAzExB,wPAAAt0W,IAAA,qIAAAA,IAAA,0BA4EUm0W,GAA6BA,EAA0Bhpb,OAAS,GA5E1E,gCA6EmCgpb,GA7EnC,+GAgFyB,OAHNI,EA7EnB,SA8EgBtH,EA9EhB,OA8E4BsH,QA9E5B,IA8E4BA,OA9E5B,EA8E4BA,EAAc3mb,IAC1B0/a,EAAY6F,GAAaoB,GA/EzC,KAgFUF,EAhFV,SAgF+Bz/Z,YAAK23Z,GAAgB,CACxC/sU,YACA6tU,YAAamH,GAAWvpa,MAAK,qBAAGzhB,OAA4Byjb,KAAWI,YACvEC,YACAL,cApFZ,wBAgFoBv3a,KAhFpB,gBAsFUm4R,EAAIn4R,KAAJ,UAAY8pG,EAAZ,YACAwzU,EAAWt9a,KAAKu3a,GAChBzrN,EAAS9rN,MAAK,GAxFxB,8PAAAsqE,IAAA,qBA2FsB,OA3FtB,UA2F4Bj1D,YAAKspa,GA3FjC,QA2FY5kL,GA3FZ,OA4FYglL,GAAmB,GAChBnob,GAAI,EA7FnB,aA6FsBA,GAAImjQ,GAAQtkQ,QA7FlC,sBA8Fc+R,GAASuyP,GAAQnjQ,KACZouC,IA/FnB,iBAgGU,OAhGV,UAgGgBk0D,YAAI,IAAImrH,IAAe,CAC3BvqN,OACA+6B,GAAIsjQ,EAAIvhS,IACR9C,KAAMwpb,EAAW1mb,OAnG7B,gCAqGmB4Q,GAAOonC,MAChBmwY,GAAiB/+a,KAAK,CACpBlG,OACA80C,KAAMpnC,GAAOonC,KACb/Z,GAAIsjQ,EAAIvhS,IACRkzG,YACA1Y,OAAQk3H,EAAQ1xN,IAChB9C,KAAMwpb,EAAW1mb,IACjBk1N,SAAUA,EAASl1N,MA7G/B,QA6F0CA,KA7F1C,2BAkHUoob,GAAqB,KACrBD,GAAiBtpb,OAAS,GAnHpC,iBAoH2C,OApH3C,UAoHiDb,YAAKkib,GAAe,CAC3Dh9a,OACA6kb,UAAWI,KAtHrB,kBAoHyBE,GApHzB,GAoHgBzxC,QAIRwxC,GAAkB,YAAOC,IAxHjC,WA0HYzxC,GA1HZ,YA0H0BwxC,IAChBxU,IACFnwU,IAAmB9rE,kBAAgB2wZ,aAAnC,2BACKz+X,GADL,IAEE82X,UAAWjqZ,kBAAgBk9Y,wBAE7Bh9B,GAAQxtY,KAAK21B,kCAEX20Y,IACFjwU,IAAmB9rE,kBAAgB2wZ,aAAnC,2BACKz+X,GADL,IAEE82X,UAAWjqZ,kBAAgBg9Y,kBAE7B98B,GAAQxtY,KAAK41B,6BAEXy0Y,IACFhwU,IAAmB9rE,kBAAgB2wZ,aAAnC,2BACKz+X,GADL,IAEE82X,UAAWjqZ,kBAAgB+8Y,oBAE7B78B,GAAQxtY,KAAK61B,+BAEX00Y,IACFlwU,IAAmB9rE,kBAAgB2wZ,aAAnC,2BACKz+X,GADL,IAEE82X,UAAWjqZ,kBAAgBi9Y,qBAE7B/8B,GAAQxtY,KAAK81B,kCAIX03W,GAAQ/3Y,OAAS,GAzJ3B,kBA0J4B,OA1J5B,WA0JkCb,YAAKmib,GAAU,CACvCvpC,WACAjnF,SAAUrgH,IA5JpB,cA0Jci5O,GA1Jd,QA8JwBn6Y,IA9JxB,wBA+JgBm6Y,GAAYn6Y,IA/J5B,aAiKmBm6Y,GAAYvwY,KAjK/B,kBAoKU,OAFAyqD,GAAS,WACTiuN,GAAS63H,GAAYvwY,KAAKj3C,IAAI,MAnKxC,WAoKgBuhG,YAAI,IAAIurH,IAAoB,CAChC3qN,OACAw9a,UAAWhwH,MAtKvB,sCAyKoC,IAAnBkmF,GAAQ/3Y,OAzKzB,kBA2KQ,OADA4jG,GAAS,WA1KjB,WA2KcH,YAAI,IAAIurH,IAAoB,CAChC3qN,OACAw9a,UAAW9pC,GAAQzuY,SAASpL,OAAOrE,SA7K7C,mCAgLQ+pG,GAAS,SAhLjB,SAqL2B,OAFf+lV,GAAUz9Z,KAAK+xB,MAnL3B,WAqLiCigD,YAAO2+G,eArLxC,SA4MM,OAvBM2qO,GArLZ,OAsLYoC,GAAgCpC,GAAatlb,IAAI,aACjD2nb,GAAiBd,EAAc5hb,KAAI,SAAAyxC,GAAM,OAAIA,EAAO3Z,UACtD21Y,GAAoBE,GAAqBD,IAC3CgV,GAAet/a,KAAKu5F,IAAQ55E,EAAE,sDAE5B6qZ,GACF8U,GAAet/a,KAAKu5F,IAAQ55E,EAAE,4CAE1B4/Z,GA9LZ,YA8LyC,IAAI9sb,IAAI6sb,KACL,IAAlCD,IAAuCpC,GAAatlb,IAAI,YAAc42B,kBAAgB6uZ,mBACxF/iV,IAAmB9rE,kBAAgB6uZ,kBAAnC,aACEC,WAAY+B,GAAUC,GACtB/B,WAAYiC,GAAuBlqa,KAAK,MACxCkoa,mBAAoBgC,GAAuB9pb,OAC3C27F,OAAQ,YAAI,IAAI3+F,IAAI61N,IAAUjzM,KAAK,MACnCy0F,UAAWA,GAAwB,KACnC0zU,UAAsB,aAAXnkV,IACR54C,IAID48X,GAAa+B,GAAU9rT,EA3MnC,WA4MY1+H,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACpDtpC,QAAS,CACPo/D,QAAS,QACTC,SAAU,iBACV9vB,KAAK,aACHgzW,cACAhkV,WACa,MAAViuN,GAAiB,CAAEA,WAAW,IAEnC/gR,OAAQ,CACN1R,GAAI6pZ,EAAoB/mb,IAAI,WAtNxC,mCA6NI,OA7NJ,2BA4NIikB,QAAQ7Z,MAAR,MA5NJ,WA6NUm3F,YAAI,IAAIirH,KA7NlB,SA+NI,OA/NJ,sBA+NUq5C,cA/NV,uCAkOE,OAlOF,WAkOQtkK,YAAI,IAAI/xD,IAAoB,CAACmsF,UAAW,EAAGx0G,OAAQ,MAlO3D,0GAqOA,IAAMgga,GAAoH,CACxH,CACEhrb,KAAMw5B,kBAAgBs8Y,gBACtB+N,YAAapqZ,0BAAwBiyZ,uBAEvC,CACE1rb,KAAMw5B,kBAAgBy8Y,sBACtB4N,YAAapqZ,0BAAwBkyZ,6BAEvC,CACE3rb,KAAMw5B,kBAAgBo8Y,UACtBiO,YAAapqZ,0BAAwBmyZ,iBAEvC,CACE5rb,KAAMw5B,kBAAgB0tK,SACtB28O,YAAapqZ,0BAAwBoyZ,gBAEvC,CACE7rb,KAAMw5B,kBAAgBw8Y,UACtB6N,YAAapqZ,0BAAwBqyZ,iBAEvC,CACE9rb,KAAMw5B,kBAAgBu8Y,SACtB8N,YAAapqZ,0BAAwBsyZ,gBAEvC,CACE/rb,KAAMw5B,kBAAgBgJ,MACtBqhZ,YAAapqZ,0BAAwBuyZ,oBAEvC,CACEhsb,KAAMw5B,kBAAgB28Y,QACtB0N,YAAapqZ,0BAAwBuyZ,mBACrCC,YAAazyZ,kBAAgBgJ,OAE/B,CACExiC,KAAMw5B,kBAAgB6vZ,YACtBxF,YAAapqZ,0BAAwByyZ,mBAEvC,CACElsb,KAAMw5B,kBAAgB68Y,IACtBwN,YAAapqZ,0BAAwB0yZ,WAEvC,CACEnsb,KAAMw5B,kBAAgB88Y,mBACtBuN,YAAapqZ,0BAAwB2yZ,0BAEvC,CACEpsb,KAAMw5B,kBAAgBm9Y,kBACtBkN,YAAapqZ,0BAAwB4yZ,qBAGzC,SAAUtJ,GAAV,kHAa2B,OAZzBc,EADF,EACEA,YACAJ,EAFF,EAEEA,UAFF,IAGEK,iBAHF,MAGcpxa,gBAHd,EAIEsjG,EAJF,EAIEA,UACA1Y,EALF,EAKEA,OALF,SAaiCuC,YAAOn/C,eAbxC,OAciB,OADTo9E,EAbR,gBAcuBj+B,YAAO/1C,eAd9B,OAemB,OADXC,EAdR,gBAeyB81C,YAAOy1C,eAfhC,OAqBwB,OANhB/rF,EAfR,OAgBQi0D,EAhBR,OAgBoBj0D,QAhBpB,IAgBoBA,OAhBpB,EAgBoBA,EAAU7oC,MAAM,CAAC,UAAW,OAC7B88F,IAAcv+E,iBAAekB,OACxC+jZ,EAAiB1mU,GAAaj9E,6BAA2Bl3B,SAASm0G,GAAa,QAAU,QACzF2mU,EAAiB,KAnBzB,UAqB8BtkV,YAAOv3C,gBArBrC,QAgCM,OAXEgkY,EArBR,OAsBQjmV,EAAWo9U,IAAcjqZ,kBAAgB68Y,KAAOiW,EAClD7yZ,0BAAwB8yZ,cACxB1I,EAxBN,UAgCY/ib,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACP,CACEo/D,QAAS9I,EAAS,OAAS,UAC3B+I,WACAi+U,aAAcxmT,EACe,OAAX/zE,EACIm6X,EACAC,EACJp6X,EAClBwsB,KAAK,2BACAutW,EAAUzla,QACVi/E,EAAS,CAACA,UAAU,CAAC0Y,cAE1BuuU,oBAAoB,OA9C5B,oBA2BIzpY,EA3BJ,EA2BIA,KACA5J,EA5BJ,EA4BIA,KAsBE4J,EAlDN,wBAmDU0xY,EAnDV,oBAmD8BxB,GAAWvpa,MAAK,qBAAGzhB,OAA4Byjb,YAnD7E,aAmD8B,EAA2DwI,mBAnDzF,QAmDwGxI,EAC9FgJ,EAAWvja,iBAAO4xB,GAAMp6B,MAAM,CAAC,UAAW48E,EAAS,OAAS,UAAWkvV,GAAoB,IApDrG,kBAsDW,CAAE1xY,KAAI,OAAE2xY,QAAF,IAAEA,OAAF,EAAEA,EAAUjlb,IAAI,OAAQi8a,KAtDzC,YAwDMvyY,EAxDN,wBAyDIppB,QAAQ7Z,MAAMijC,GAzDlB,kBA0DW,CAAEA,QA1Db,wCA8DA,SAAU8xY,GAAV,sFACEh9a,EADF,EACEA,KACA6kb,EAFF,EAEEA,UAEM6B,EAAc7B,EAAU/hb,KAAI,YAI5B,EAHJ9I,KAGI,EAFJs9F,OAGA,OADI,EADJxiD,KAEYj3C,IAAI,SAIdqjG,GAAmB,EACnBylV,GAAc,EACD,IACXjzC,EAAU,IAAI/6Y,IAhBtB,iHAkBSgub,EAlBT,gBAmBM,OAnBN,SAmBYprV,YAJO,KAfnB,OAuB0B,OAFtBorV,GAAc,EACdzlV,GAAU,EAtBd,SAuBgCpmG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAC1EtpC,QAAS,CACP,CACEo/D,QAAS,QACTC,SAAU,eACV9vB,KAAK,YACAm2W,QA7Bf,mBAuBY5xY,EAvBZ,EAuBYA,MAvBZ,EAuBkB5J,IAvBlB,wBAmCMg2D,GAAU,EAnChB,sCAwCkB,OAFRiB,EAAgBj/E,iBAAO4xB,GACvB8xY,EAAmDzkV,EAAcznF,MAAM,CAAC,UAAW,QAAS,YAAa,IAvCnH,UAwCwBm/E,YAAO22T,YAA6BxwZ,IAxC5D,QAyC0B,OADhB8gC,EAxCV,iBAyCgC+4D,YAAOj1C,eAzCvC,QAyCU+B,EAzCV,OA2CUkgY,EAAc,GACpBD,EAAgBnqb,WAAW+J,SAAQ,YAA6B,IAAD,uBAA1Bsgb,EAA0B,KAAdL,EAAc,KACvDM,EAAYlC,EAAUppa,MAAK,SAAC8zD,GAAD,aAAQ,OAADA,QAAC,IAADA,GAAA,UAAAA,EAAGz6B,YAAH,eAASj3C,IAAI,SAAUipb,KAGzD9sb,EAAI,iBAAI+sb,QAAJ,IAAIA,OAAJ,EAAIA,EAAW/sb,YAAf,QAAuBysb,EAAS5ob,IAAI,QACxCk9B,EAAE,OAAGgsZ,QAAH,IAAGA,OAAH,EAAGA,EAAWhsZ,GAChBi1E,EAAS,OAAG+2U,QAAH,IAAGA,OAAH,EAAGA,EAAW/2U,UACvB1Y,EAAM,OAAGyvV,QAAH,IAAGA,OAAH,EAAGA,EAAWzvV,OACpB06H,EAAQ,OAAG+0N,QAAH,IAAGA,OAAH,EAAGA,EAAW/0N,SACtBzyH,EAASknV,EAAS5ob,IAAI,UACtB2vT,EAASi5H,EAAS5ob,IAAI,UACb,YAAX0hG,IACF2B,GAAU,GAEZ,IAAM8lV,EAAG,OAAGlmZ,QAAH,IAAGA,GAAH,UAAGA,EAAOjjC,IAAI,eAAd,aAAG,EAAoB4d,MAAK,SAACwra,GAAD,OAAcA,EAASppb,IAAI,QAAUk9B,GAAMksZ,EAASppb,IAAI,UAAY7D,KACpGgtb,IAGU,aAAXznV,GAA+C,YAAtBynV,EAAInpb,IAAI,YACnC61Y,EAAQj7X,IAAI+0S,GACZjtN,IAAmB9rE,kBAAgB2wZ,aAAnC,aACEp1U,YACA1Y,SACAmmV,UAAWzjb,EACXg4N,YACGrrK,IAELkgY,EAAY3gb,KAAKk5F,YAAI,IAAIqrH,IAAgB,CACvCzqN,OACAhG,OACA+gC,KACAyyR,cAGW,WAAXjuN,GAA6C,WAAtBynV,EAAInpb,IAAI,WACjCgpb,EAAY3gb,KAAKk5F,YAAI,IAAImrH,IAAe,CACtCvqN,OACAhG,OACA+gC,KACAu8D,SACA0Y,oBAKGlzG,EAAI,EAzFjB,aAyFoBA,EAAI+pb,EAAYlrb,QAzFpC,iBA0FM,OA1FN,UA0FYkrb,EAAY/pb,GA1FxB,QAyF4CA,IAzF5C,4LA4FWokG,EA5FX,iDA8FS,CAAEwyS,YA9FX,wCAiGA,SAAUupC,GAAV,0FAKwB,OALxB,IACEvpC,eADF,MACY,GADZ,MAEEjnF,gBAFF,MAEa,GAFb,WAK8B3xT,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAC1EtpC,QAAS,CACP,CACEo/D,QAAS,OACTC,SAAU,UACV9vB,KAAM,CACJmjU,UACAjnF,iBAZV,mBAKU33Q,EALV,EAKUA,OAAM5J,EALhB,EAKgBA,KALhB,0CAkBW,CAAEA,QAlBb,eAoBUi3D,EAAgBj/E,iBAAO4xB,GACvBoyY,EAAc/kV,EAAcznF,MAAM,CAAC,UAAW,OAAQ,QArBhE,kBAsBW,CAAEo6B,KAAMoyY,IAtBnB,yCA0BO,SAAUhK,GAAkBl4Z,GAA5B,2EAOE,OAPF,EAMDA,EAJFgc,QACE6zE,EAHC,EAGDA,UACAJ,EAJC,EAIDA,QAJC,SAOQ35G,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC9DtpC,QAAS,CACP,CACEo/D,QAAS,SACTC,SAAU,iCACV9vB,KAAM,CACJ8yC,QAAS,CACP9nF,IAAK,CACH,CACEwyL,YAAa,CACXvhC,IAAK33E,EACL+3E,IAAKn4E,YAlBhB,kF,ybC90DD6U,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dh1J,UAAW,CACTv+B,MAAO,QAET+xW,eAAgB,CACdh5T,cAAe,aA6BJl1E,cAAgB,eAAhBA,EAzBqD,SAAC,GAK9D,IAJL4H,EAII,EAJJA,MACAumY,EAGI,EAHJA,SAGI,IAFJ/2D,mBAEI,MAFU,WAEV,EADJxqW,EACI,EADJA,EAGMstW,EAAUtyU,IAAU/oB,gBACpBk7C,EAAUs2C,IAChB,OAAIzoE,IAAU3rB,UACL,KAIP,eAACmyZ,EAAA,EAAD,CAAaxra,UAAU,IAAIq3D,UAAWF,EAAQ2gC,UAA9C,UACE,cAACyT,EAAA,EAAD,CAAMrnB,MAAuB,aAAhBswR,EAA6B,UAAY,UAAWnpQ,KAAMkgU,EAAvE,SACGvha,EAAE,yBAEL,cAACuhG,EAAA,EAAD,CAAMrnB,MAAuB,aAAhBswR,EAA6B,cAAgB,UAAWxnD,UAAU,OAAO31P,UAAWF,EAAQm0W,eAAzG,SACatha,EAAVstW,EAAY,0BAA+B,gC,2BCT9C7pQ,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D/yL,QAAS,CACPA,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B4vC,MAAO,CACLhC,WAAYhtC,EAAMZ,QAAQ,IAE5B8lN,WAAY,CACVn6L,MAAO/qB,EAAM+pC,QAAQE,QAAQ68J,KAC7BzlJ,WAAY,OACZpV,SAAUjsC,EAAM82C,WAAWm/B,GAAGhqC,eA+EnBhoE,cAAgB,eAAhBA,EA3EqC,SAAC,GAK9C,IAAD,IAJJo3U,EAII,EAJJA,YACAi3D,EAGI,EAHJA,kBACAzha,EAEI,EAFJA,EACA25B,EACI,EADJA,OAEMwzB,EAAUs2C,IACVt0C,EAAQwjD,cAER33E,EAAQrV,sBAAYoV,eACpBmD,EAASvY,sBAAYsY,eACrByjY,EAAW,UAAG/nY,EAAO9kC,MAAM,CAAC,aAAc,SAAUqpC,WAAzC,QAAqDvE,EAAO9kC,MAAM,CAAC,aAAc,UAC5F8sa,EAAoBhoY,EAAO9kC,MAAM,CAAC,SAAU,aAAa,GACzD+sa,EAAoCjoY,EAAO9kC,MAAM,CAAC,SAAU,6BAA6B,GACzFgta,EAAwCloY,EAAO9kC,MAAM,CAAC,cAAe,iCAAiC,GAEtGy4W,EAAUtyU,IAAU/oB,gBACpB6vZ,EAAyB,CAC7B7xZ,eACAe,gBACAH,yBACAY,4BACAL,mBACAW,iBACAC,cACAC,gBACAC,oBACAC,cACAG,kBACAQ,mBAEI67V,EAAkB,OAAGkzD,QAAH,IAAGA,IAAgCC,EAAuBtkb,SAASw9C,GAC3F,OACE,eAAC8xB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNX,WAAW,SACXuB,KAAK,SACLV,QAAyB,aAAhBy8S,EAA6B,SAAW,aACjDn9S,UAAWF,EAAQ4C,QACnBw/B,MAAO,CACL2W,WAAY07T,EAA2B,EAAIzyW,EAAMZ,QAAQ,IAR7D,UAYIkzW,EACI,cAAC5mU,EAAA,EAAD,CACAJ,IAAKgnU,EACLlyW,MAAK,UAxCC,GAwCD,MACLurC,YAAa,OACbC,aAAa,EACb2kP,gBAAiB,CAAChkP,aAAc,MAAOikP,eAAgB,SACvDnwR,OAAQ,MAEQ,aAAhBg7S,EACE,cAAC8vB,EAAA,EAAD,CAAYpgT,MAAO,CAAC+e,gBAAiB01Q,EAAqBx/S,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,QAC/G,cAACkhS,EAAA,EAAD,CAAmBx9Q,KAAM6kT,EAAW,QAAUxyW,EAAM+pC,QAAQE,QAAQ7iF,OAE5E,cAACk3E,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWm0C,KAAU,mBAClBr0C,EAAQgxC,OAAQ,GADE,cAElBhxC,EAAQknN,WAA6B,eAAhBm2F,GAFH,IAIrBj7Q,MAAO,CAAErV,MAAOynV,EAAW,QAAU,WANvC,SASoB,eAAhBn3D,GAAgCk3D,EAC9BA,EACU1ha,EAAVstW,EAAY,0BAA+B,gC,UC7GjD7pQ,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dh1J,UAAW,CACTv+B,MAAO,QAETy2C,MAAO,CACL32C,QAAS,OACTnC,WAAY,SACZwC,cAAe,eA0BJqyW,GAtB2F,SAAC,GAAuC,IAArCxnZ,EAAoC,EAApCA,SAAUof,EAA0B,EAA1BA,OAAQ6wU,EAAkB,EAAlBA,YACvHr9S,EAAUs2C,KACVt0C,EAAQwjD,cACRqvT,EAAgCroY,EAAO9kC,MAAM,CAAC,SAAU,yBAA0Bs6D,EAAM+pC,QAAQE,QAAQ,KAC9G,OACE,mCAEoB,eAAhBoxQ,EACE,cAAC1kQ,GAAA,EAAD,CACEZ,UAAW,EACXitN,QAAQ,EACR9kQ,UAAWm0C,IAAWr0C,EAAQ64C,MAAO74C,EAAQ2gC,WAC7CyB,MAAO,CAAE0J,gBAAiB+oU,GAJ5B,SAMGznZ,IAEHA,K,gGC7BKq9E,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,kHACD,Q,oEC6CSkob,GAAqB,qBA4MnB/4W,qBACbgG,aA3Ma,SAACC,GAAD,MAAmB,CAChC3jE,KAAM,CACJwjH,WAAY,QACZj/C,QAA2B,EAAlBZ,EAAMZ,WAEjB2zW,cAAe,CACbr6T,UAA6B,GAAlB14C,EAAMZ,UAAiB,KAClCw8L,UAA6B,GAAlB57L,EAAMZ,UAAiB,MAEpC89V,YAAa,CACXt8V,QAAQ,OAAD,OAA2B,EAAlBZ,EAAMZ,UAAf,SAET27O,cAAe,CACbn6O,QAAS,GAEXoyW,sBAAuB,CACrBjoV,MAAO,aA4LT9mD,YAAgB,gBAChB0/D,mBAxB0B,WAC1B,IAAMsvU,EAAkBjtY,eAQxB,OANwB,SAACla,GAAD,MAAY,CAClCs3E,cAAel1F,kBAAO,CACpBgjC,MAAO+hY,EAAgBnnZ,UAOF,SAAC2D,GAC1B,MAAO,CACLA,WACAyjZ,YAAa,SAACjjb,GACZw/B,EAAS,IAAIy5L,IAAkBj5N,SASnCmsR,aAAmC,CAAEt2B,SAAUgtL,KAC/CzmH,qBAAU,CACR9pN,KAAMuwU,GACNxmH,kBAAkB,EAClBC,oBAAqB,IARVxyP,EAxKe,SAAC/qC,GAC7B,IACEne,EAKEme,EALFne,EACAmtD,EAIEhvC,EAJFgvC,QACAvuC,EAGET,EAHFS,SACA03R,EAEEn4R,EAFFm4R,aACA+rH,EACElkZ,EADFkkZ,YAII/0D,EADQ3nV,sBAAYoV,iBACA9oB,gBAS1B,OACE,8BACE,cAAC6vW,GAAA,EAAD,CACEv+Q,SAAU0+T,GACVn0U,WAAW,EACXv9B,SAAU,KACV+xW,SAAU,kBAAMnkZ,EAAMygC,SAJxB,SAME,eAACknD,GAAA,EAAD,CAAOz4C,UAAWF,EAAQ3hE,KAA1B,UACE,cAAC6ga,GAAA,EAAD,CAAah/V,UAAWF,EAAQk/V,YAAhC,SACE,cAAC5+T,EAAA,EAAD,CAAYpgC,UAAWF,EAAQg1W,sBAA/B,SACania,EAAVstW,EAAY,sDAA2D,wDAG5E,cAACpjE,GAAA,EAAD,CAAe78O,UAAWF,EAAQ+8O,cAAlC,SACI,cAACz8M,EAAA,EAAD,UACGztF,EAAE,uCAGT,sBAAMuwS,SAAU+F,GA3BD,SAACl3T,GACtBw/B,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAO1pE,GAAI+sZ,MAC5DI,EAAYjjb,EAAOoT,WAyBb,SACE,eAACs6D,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,SAAD,CACE1vC,MAAO,CACLpJ,MAAO/U,EAAE,+CACT6tF,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,eACL8qE,UAAWwgC,KACXE,SAAU,CAACmqF,UAGf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,SAAD,CACE1vC,MAAO,CACLpJ,MAAO/U,EAAE,8CACT6tF,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,eACL8qE,UAAWwgC,KACXE,SAAU,CAACmqF,UAGf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,SAAD,CACE1vC,MAAO,CACLpJ,MAAO/U,EAAE,4CACT6tF,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,gBACL8qE,UAAWwgC,KACXE,SAAU,CAACmqF,UAGf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAChgC,MAAO,QAAjC,SACE,cAAC,SAAD,CACEpxC,MAAO,CACLpJ,MAAO/U,EAAE,sCACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVwkP,WAAW,EACXrhP,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQ+0W,kBAKvBz/a,KAAK,UACL8qE,UAAWwgC,KACXE,SAAU,CAACmqF,UAIf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAChgC,MAAO,QAAjC,SACI,cAAC,SAAD,CACE9sE,KAAK,QACL8qE,UAAWwgC,KACX5vE,MAAO,CACL9uC,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,qBAEXiuF,SAAU,CACRmqF,KACAE,UAIR,eAACxrH,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,WAA/C,UACE,cAACjB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAO1pE,GAAI+sZ,OAF7E,SAIGjia,EAAE,0BAGP,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN/lG,KAAK,SAFP,SAIG6rB,EAAE,4C,sECtMjBuia,GAAelwb,OAAO0D,KAAKysb,MAAW9hb,OA6DtC+iH,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,aAAa,CAC1D2/K,mBAAoB,CAClBvoV,MAAO,WAETwoV,wBAAyB,CACvBxoV,MAAO,UACP,WAAY,CACVyoV,kBAAmB,WAErB,oCAAqC,CACnCA,kBAAmB,WAErB,UAAW,CACTA,kBAAmB,iBAKVC,GA1EwC,WACrD,IAAMz1W,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF8gC,EAAgBkgK,eAChB9iK,EAASvY,sBAAYsY,eAE3B,OACE,eAAC6uB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVT,WAAW,SACXa,QAAQ,WACRU,KAAK,SACL8gC,MAAO,CAAEhgC,MAAO,eANlB,UAQE,cAAC,KAAD,CAAc2qB,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,KACpD,cAACM,EAAA,EAAD,CACEpmH,MAAOuuD,EACPuxD,SAAU,SAAC2rB,GACT,IAAMynT,EAAeznT,EAAMn6G,OAAOtxB,MAClCupG,KAAiBG,QAAQ,wBAAewpV,GACxC,IAAMC,EAAoC,OAAjBD,EAAwB,UAAY,SAC7DnoV,KAAmB9rE,kBAAgBm0Z,eAAgBjiY,EAAc,CAAEgiY,sBAGnE,IAAME,EAAc,IAAIj0Y,OAAJ,aAAiBwzY,GAAa7sa,KAAK,KAAnC,WAEpB,GADciN,OAAO+6B,SAAS0C,SAAS5d,MAAMwgZ,GAClC,CACT,IAAMC,EAAUtga,OAAO+6B,SAAS0C,SAASysB,QAAQm2W,EAAjC,WAAkDH,EAAlD,OAChBlga,OAAO+6B,SAAS2jE,KAAO4hU,EAAUtga,OAAO+6B,SAASw0I,OAASvvK,OAAO+6B,SAASvjD,UAE1EwoB,OAAO+6B,SAASojG,UAGpBpoC,MACE,cAACD,EAAA,EAAD,CAAOtrC,QAAS,CACd3hE,KAAM2hE,EAAQu1W,2BAGlBv1W,QAAS,CACP04C,KAAM14C,EAAQs1W,oBAxBlB,SA2BGF,GAAatlb,KAAI,SAAC4lb,GAAD,OAChB,cAACryU,EAAA,EAAD,CAEE7gH,MAAOkzb,EAFT,SAIG7ia,EAAE,oBAAD,OAAqB6ia,KAHlBA,YCqDXjzD,G,4MAkDGszD,SAAW,WAChB,MAAsB,EAAK/kZ,MAAnBne,EAAR,EAAQA,EAEFstW,EAFN,EAAW3zU,OACU9kC,MAAM,CAAC,gBAAiB,aACnBod,gBAC1B,MAAO,CAACjS,EAAE,6BAAwCA,EAAVstW,EAAY,+BAAoC,+B,EAGnF61D,eAAiB,SAACtqb,GACvB,IAAQ8gD,EAAW,EAAKxb,MAAhBwb,OACFg0U,EAAqBh0U,EAAO9kC,MAAM,CAAC,SAAU,uBAC7C21W,EAA2B7wU,EAAO9kC,MAAM,CAAC,SAAU,eAAgB,YACzE,OACO,IADChc,EAEG,cAAC,IAAD,CACLk0X,WAAY,EAAKA,WACjBvC,YAAaA,EACbmD,mBAAoBA,IAGb,cAAC,IAAD,CACLA,mBAAoBA,EACpBnD,YAAaA,K,EAKhB15U,SAAW,2CACfpjB,WAAS4vB,KAAO,EAAKnf,MAAMilZ,YADZ,cAEf11Z,WAAS8vB,GAAK,EAAKrf,MAAMklZ,UAFV,G,EAKXC,iBAAmB,WAGxB,IAAMC,EAAqC5ga,OAAe6ga,gBAC1D,GAAID,EACF,EAAKplZ,MAAMS,SAAS,IAAIwsP,KAAkB,CAACgiC,OAAQ/vS,kBAAO,CAACkpV,QAAS,CAACrxU,GAAIquZ,YAD3E,CAIA,IAAMn2H,EAAS,EAAKjvR,MAAMslZ,YAAY7ta,MAAK,SAAAw3S,GAAM,OAAIA,EAAOp1T,IAAI,iBAAiB6O,iBAC3E62C,EAAWrgC,kBAAO,CAACkpV,QAAS,CAACrxU,GAAIk4R,EAAOp1T,IAAI,SAElD,EAAKmmC,MAAMS,SAAS,IAAIwsP,KAAkB,CAACgiC,OAAQ,EAAKt8Q,WAAW,EAAK3S,MAAMmZ,OAASoG,O,EAGlFgmY,WAAa,SAACC,GACnB,MAGI,EAAKxlZ,MAFPS,EADF,EACEA,SADF,IAEEglZ,wBAFF,MAEqB,EAFrB,EAKAhlZ,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIu6V,IACJ7/U,QAASg0Y,EAAmBD,M,EAIzB52D,WAAa,SAAC82D,GACnB,MAGI,EAAK1lZ,MAFPS,EADF,EACEA,SACAglZ,EAFF,EAEEA,iBAGFhlZ,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIu6V,IACJ7/U,QAASg0Y,EAAmBC,M,EAIzBC,gBAAkB,SAACllV,GACxB,MAGI,EAAKzgE,MAFP2iB,EADF,EACEA,cACAliB,EAFF,EAEEA,SAGF87D,KAAmB9rE,kBAAgBm1Z,uCAAwCjjY,KAC3EliB,EAAS,IAAI0J,IAA6B,CAACpT,GAAI+sZ,GAAoBrjV,W,EAG9DolV,WAAa,SAACC,GACnB,MAA0B,EAAK9lZ,MAAvBgxC,EAAR,EAAQA,MAAOx1B,EAAf,EAAeA,OACPksE,EAAiBo+T,EAAjBp+T,KAAMqxJ,EAAW+sK,EAAX/sK,OAGRp6I,EADoBnjF,EAAO9kC,MAAM,CAAC,SAAU,aAAa,GAE3D,OACCqiQ,EAEC/nM,EAAM+pC,QAAQE,QAAQ7iF,KADtB4iF,KAAK,KAEX,OAAgB,IAAT0M,EACL,cAACy0R,EAAA,EAAD,CAAax9Q,KAAMA,IACnB,cAACw9Q,EAAA,EAAD,CAAax9Q,KAAMA,K,uDA3IvB,WACE,MAKI7oI,KAAKkqC,MAJPS,EADF,EACEA,SACA6lS,EAFF,EAEEA,WAFF,EAGEy/G,2BAHF,EAIET,YAGezzb,KAGfiE,KAAKqvb,mBAFL1kZ,EAAS,IAAIosP,MAKfpsP,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIu6V,IACJ7/U,QA1B0C,KA6B5C,IACE6hF,EACEgzM,EADFhzM,WAGEA,IACF7yF,EAAS,IAAI64L,IAAoB,CAAChmG,gBAClC7yF,EAAS,IAAIu4L,IAA4B,CAAC1lG,iBAG5C7yF,EAAS,IAAIwpS,Q,gCAGf,SAA0B91N,GACpBA,EAAUmxU,cAAgBxvb,KAAKkqC,MAAMslZ,aAAenxU,EAAU+wU,WAAapvb,KAAKkqC,MAAMklZ,UAAY/wU,EAAU8wU,aAAenvb,KAAKkqC,MAAMilZ,aAAgB9xb,QAAQ2C,KAAKkqC,MAAMslZ,YAAYzzb,OAAUsB,QAAQ2C,KAAKkqC,MAAMgmZ,eAAen0b,QACnOiE,KAAKqvb,qB,kCAIT,WACE,IACE1kZ,EACE3qC,KAAKkqC,MADPS,SAIFA,EAAS,IAAI63L,KAEb73L,EAAS,IAAI64L,IAAoB,CAAChmG,WAAY,Q,oBAiGhD,WAAiB,IAAD,OACd,EAUIx9H,KAAKkqC,MATPgvC,EADF,EACEA,QADF,KAEEgC,MAFF,EAGEy0W,yBAHF,MAGqB,EAHrB,EAIEjqY,EAJF,EAIEA,OACA/a,EALF,EAKEA,SACA6kZ,EANF,EAMEA,YACAU,EAPF,EAOEA,eACAp8O,EARF,EAQEA,OACA/nL,EATF,EASEA,EAEIoka,EAAmBr8O,EAAOvqM,SAAS,mBAAqBuqM,EAAOvqM,SAAS,gBAAkBuqM,EAAOvqM,SAAS,eAC1G+D,EAAQtN,KAAKivb,WACbloY,EAAQrB,EAAO9kC,MAAM,CAAC,gBAAiB,WACvC0sa,EAAW6C,EAAmBzqY,EAAO9kC,MAAM,CAAC,YAAa,YAAc,IAAM8kC,EAAO9kC,MAAM,CAAC,YAAa,UAAY,IACpHwva,EAAyB1qY,EAAO3hD,IAAI,0BAEpCwyX,EAA2B7wU,EAAO9kC,MAAM,CAAC,SAAU,eAAgB,YACnEyva,EAAwB3qY,EAAO9kC,MAAM,CAAC,SAAU,iBAAiB,GACjE0va,EAA2B5qY,EAAO9kC,MAAM,CAAC,SAAU,oBAAoB,GACvEmta,EAAgCroY,EAAO9kC,MAAM,CAAC,SAAU,yBAA0B,WAElF8sa,GADgChoY,EAAO9kC,MAAM,CAAC,SAAU,yBAA0B,WAC9D8kC,EAAO9kC,MAAM,CAAC,SAAU,aAAa,IACzD4sa,EAAoB9nY,EAAO9kC,MAAM,CAAC,SAAU,sBAC5C+sa,EAAoCjoY,EAAO9kC,MAAM,CAAC,SAAU,6BAA6B,GACzF2va,EAAgC7qY,EAAO9kC,MAAM,CAAC,SAAU,yBAAyB,GAEjF4va,EAAUzpY,IAAU1pB,gBACpBozZ,EAAY1pY,IAAUprB,kBACtB+0Z,EAAc3pY,IAAUvqB,oBACxBm0Z,EAAU5pY,IAAUnpB,2BACpBgzZ,EAAS7pY,IAAUlpB,eACnBgzZ,EAAQ9pY,IAAUhpB,cAElB+yZ,GADoB9yZ,gBACR+oB,IAAU1oB,mBA2BtB4wM,EAAQ,CACZ8hN,GAAIvoH,KACJwoH,GAAIC,MAgBN,OACE,eAACp4W,EAAA,EAAD,CACEO,UAAWF,EAAQ2gC,UACnBrgC,WAAW,EACXE,UAAU,SACVT,WAAW,SAJb,UAME,cAAC,GAAD,CAAkBs9S,YAAaA,EAAa7wU,OAAQA,EAApD,SACE,eAACmzB,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXY,GAAI,GACJF,GAAI,EACJd,UAAWF,EAAQv9B,QACnB+9B,UAAU,SACV4hC,MAAO,CACLrV,MAAOynV,EAAW,QAAU,UAC5B1oU,gBAAiB+oU,GATrB,UAYE,eAACl1W,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBU,KAAK,SAAxE,UACE,cAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,aAA/B,SAEKu2W,GAAgBG,GAAWC,GAAaC,GAAeC,GAAWC,GAAUC,GAASC,EAAc,KAAO,cAAC,EAAD,CACzGxD,SAAUA,EACVvmY,MAAOA,EACPwvU,YAAaA,MAInB,cAAC19S,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,WAAjE,SAEI6zW,GAA4B,qCAC1B,cAAC,GAAD,IACA,cAAChpU,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS,kBAAM,EAAKgrU,iBAAgB,IAAOzrK,UAAW,cAAC8sK,GAAD,IAAU51U,MAAO,CAAE4M,WAAY,IAA7G,SACIn8F,EAAE,sCAOd,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAA2B,eAAhBm9S,EAA+Br9S,EAAQi4W,iBAAmBj4W,EAAQk4W,eAApG,UAEKd,GAAmBE,GAAWC,GAAaC,GAAeC,GAAWC,GAAUC,GAASC,EAAa,KAAO,cAAC,EAAD,CAC3Gv6D,YAAaA,EACbi3D,kBAAmBA,EACnB9nY,OAAQA,IAGV6qY,GAAwBI,EAAW,KACnC,cAAC7uU,EAAA,EAAD,CACEpmH,MAAOw0b,EAAetva,MAAM,CAAC,UAAW,QAAU,GAClD46F,SAjGS,SAAApzG,GACrB,IAAMipb,EAAQjpb,EAAE4kB,OAAOtxB,MACjB+tD,EAAWrgC,kBAAO,CAACkpV,QAAS,CAACrxU,GAAIowZ,KACvC1mZ,EAAS,IAAIwsP,KAAkB,CAACgiC,OAAQ1vQ,KAGxC,IAAMurG,EAAItmI,OAEV,GAD8CsmI,EAAEu6R,gBACzB,CACrB,IACM+B,EADyC,CAAE,QAAW,KAAM,QAAW,MAC9CD,GACzBE,EAAiCv8R,EAAEw8R,qBAEnCC,GADuBz8R,EAAErmI,mBAAqB,IACjBowB,MAAM,KAAK,GAC9C,GAAIuyY,GAAcC,GAAcE,EAAe,CAC7C,IAAMzC,EAAUtga,OAAO+6B,SAAS0C,SAASysB,QACvC,IAAI99B,OAAO,KAAO22Y,EAAgB,IAAMF,EAAa,SACrD,IAAME,EAAgB,IAAMH,EAAa,MAE3Ct8R,EAAEu6R,gBAAkB8B,EACpBr8R,EAAEw8R,qBAAuBF,EACzBt8R,EAAErmI,kBAAoB,IAAM8ia,EAAgB,IAAMH,EAClD5ia,OAAO4hG,QAAQohU,aAAa,GAAI,GAAI1C,EAAUtga,OAAO+6B,SAASw0I,OAASvvK,OAAO+6B,SAASvjD,SA4E/Eg3G,SAAUkzU,EACV3rU,MACE,cAACD,EAAA,EAAD,CAAOtrC,QAAS,CACd61P,UAAW2+G,EAAWx0W,EAAQw0W,SAAW,MAG7Cx0W,QAAS,CACPwzT,WAAYxzT,EAAQy4W,UACpB//T,KAAM87T,EAAWx0W,EAAQw0W,SAAW0C,EAAyBl3W,EAAQ04W,6BAA+B,IAXxG,SAhE2B,SAAAC,GACrC,IAAK,EAAKh1Y,WAAWg1Y,GACnB,OAAOrC,EAET,IAAMvuZ,EAAK,EAAK4b,WAAWg1Y,GAAUjxa,MAAM,CAAC,UAAW,OAEvD,GAD6BvjB,QAAQmyb,EAAY7ta,MAAK,SAAA9J,GAAC,OAAIA,EAAE9T,IAAI,QAAUk9B,MAEzE,OAAOuuZ,EAET,IAAM1uZ,EAAQ,EAAK+b,WAAWg1Y,GAAUjxa,MAAM,CAAC,UAAW,UAC1D,OAAO4ua,EAAYpjb,KAAKgd,kBAAO,CAAC6X,KAAIH,QAAOgxZ,WAAW,KAoEzCC,CAA+B/xb,KAAKkqC,MAAMmZ,MAAMr6C,KAAI,SAACmwT,EAAQn2T,GAAT,OAAe,eAACu5G,EAAA,EAAD,CAAUnjC,UAAWF,EAAQy4W,UAAmBj2b,MAAOy9T,EAAOp1T,IAAI,MAAlE,UAChE,qBAAKq1E,UAAWF,EAAQ84W,KAAMxrU,IAAKyoH,EAAMkqF,EAAOp1T,IAAI,OAASg+V,KAAiB5oC,EAAOp1T,IAAI,OAAOkub,cAC/F94H,EAAOp1T,IAAI,OAASg+V,KAAiB5oC,EAAOp1T,IAAI,OAAOkub,aAFqDjvb,WAQvH,cAAC61E,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC08S,EAAA,EAAD,CACE/D,WAAYo9D,EACZp5D,YAAaA,EACbr9S,QAAS,CACP3hE,KAAM2hE,EAAQg5W,SAEhB92O,UAAW,cAAC+2O,EAAA,EAAD,CAAej5W,QAAS,CAAEmjN,KAAMqxJ,EAAWx0W,EAAQw0W,SAAW,MAN3E,SAQGpgb,EAAMtE,KAAI,SAAC83B,EAAO3kC,GAAW,IAAD,EAC3B,OACE,eAACq6X,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,CACExzG,OAAQ0sK,IAAqBxzb,EAC7Bi2b,kBAAmC,eAAhB77D,EAA+B,EAAKw5D,gBAAaj0b,EACpEo9E,QAAO,aACL41L,cAAe51L,EAAQ41L,eACH,eAAhBynH,GAAgC,CAClCh/W,KAAMg2G,IAAWr0C,EAAQp4C,MAAOo4C,EAAQm5W,aAG5CC,cAAe,CACbp5W,QAAS,CACP2yC,KAAM0B,KAAU,mBACbr0C,EAAQq5W,cAAe,GADV,cAEbr5W,EAAQm5W,UAA4B,eAAhB97D,GAFP,MAXtB,SAkBE,cAAC/8Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAOynV,EAAW,QAAU,UAAWnxT,WAAY,WAA5F,SAA0Gz7F,MAG1F,aAAhBy1V,GACE,cAACG,EAAA,EAAD,CACEx9S,QAAS,CACP3hE,KAAM2hE,EAAQgvT,aAFlB,SAKE,cAACrvT,EAAA,EAAD,UAAO,EAAKq2W,eAAe/yb,SA5BxB2kC,eAwCL,eAAhBy1V,GACE,cAAC19S,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXU,GAAI,EACJE,GAAI,GAJN,SAME,cAACvB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQv9B,QAHrB,SAKG37C,KAAKkvb,eAAeS,c,GAxWJlrZ,aAwclBwwC,qBACbgG,aAvFa,SAACC,GAAD,MAA+B,CAC5Cv/B,QAAS,CACPmgC,QAASZ,EAAMZ,QAAQ,IAEzBw0L,cAAe,CACbzyI,UAAW,aACX7a,YAAatmC,EAAMZ,QAAQ,IAE7Bi4W,aAAc,CACZprU,SAAU,WAEZ+gR,YAAa,CACXx/P,YAA+B,IAAlBxtD,EAAMZ,WAErB4vC,MAAO,CACLhC,WAAYhtC,EAAMZ,QAAQ,IAE5B43W,QAAS,CACPn3T,WAAY,UACZj/C,QAAS,GAEX+9B,UAAW,CACTv+B,MAAO,QAETx6C,MAAM,2BACDo6C,EAAM82C,WAAW+S,OADjB,IAEH9+B,MAAO,YAETosV,UAAW,CACTt9T,cAAe,aAEjBy9T,WAAY,CACVl3W,MAAO,IAETq2W,UAAW,CACTv2W,QAAS,OACTnC,WAAY,SACZyC,eAAgB,UAElBs2W,KAAM,CACJzgU,OAAQ,MACR/P,YAAatmC,EAAMZ,QAAQ,KAE7B82W,eAAgB,CACd31W,cAAe,SACfxC,WAAY,YAEdk4W,iBAAkB,CAChB11W,cAAe,MACfxC,WAAY,SACZoC,SAAU,UAEZu2W,6BAA8B,CAC5B3rV,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,UAE9BwwU,SAAU,CACRznV,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5BpH,YAAaxmD,EAAM+pC,QAAQU,OAAOmjB,MAClC,WAAY,CACV4lT,kBAAmBxzW,EAAM+pC,QAAQU,OAAOmjB,OAE1C,UAAW,CACT4lT,kBAAmBxzW,EAAM+pC,QAAQU,OAAOmjB,OAE1C,oCAAqC,CACnC4lT,kBAAmBxzW,EAAM+pC,QAAQU,OAAOmjB,WAsBzB,CAAC9Z,WAAW,IAC/B7vE,YAAgB,gBAChBgwE,KACAtQ,mBApBsB,SAACu7Q,EAAoBC,GAC3C,OAAOvnV,YAAyB,CAC9B09R,WAAYh1M,YAA+BknQ,IAC3CitD,iBAAkB/xO,YAAkC49K,KACpD91U,OAAQF,cACRyqY,2BAA4B9/D,cAC5Bq/D,YAAaxpD,eACbkqD,eAAgBjqD,eAChBmpD,SAAU34S,gBACV04S,WAAY35S,aAAwC,CAACC,cAAc,IACnEpyF,KAAMF,cACN2wJ,OAAQ9mJ,eAVHla,CAWJsnV,MAIUnlT,CAKb0mT,I,6BCvhBW+G,GAAW,4BAiBlB/G,G,4MACG30V,MAAQ,CACb4iK,MAAO,G,EAGF6oP,YAAc,YAKnB9nZ,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIyhW,O,EAKDgwD,mBAAqB,WAC1B,MAGI,EAAKxoZ,MAFPS,EADF,EACEA,SACAkiB,EAFF,EAEEA,cAEF45C,KAAmB9rE,kBAAgBm1Z,uCAAwCjjY,KAC3EliB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAI+sZ,O,4CAKR,WACE,MAIIhub,KAAKkqC,MAHPgvC,EADF,EACEA,QACAy5W,EAFF,EAEEA,YACA5ma,EAHF,EAGEA,EAGF,OACE,eAAC,KAAD,CACEujG,SAAUozQ,GACVkwD,YAAY,EAFd,UAIE,cAAC/wD,EAAA,EAAD,CAAQzoT,UAAWF,EAAQghS,OAAQj0Q,MAAK,OAAE0sV,QAAF,IAAEA,IAAe,UAAzD,SACE,eAACE,EAAA,EAAD,WACE,cAACn4T,EAAA,EAAD,CAAYz0B,MAAM,UAAU4e,QAAS7kH,KAAKyyb,YAAa,aAAW,QAAlE,SACE,cAAC,KAAD,MAEF,cAACj5U,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,UAAU7sB,UAAWF,EAAQ8oD,KAA5D,SACGj2G,EAAE,uBAEL,eAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS7kH,KAAK0yb,mBAAtC,UACE,cAAC,IAAD,CAAiB9gU,KAAK,WAAWx4C,UAAWF,EAAQ45W,WACnD/ma,EAAE,gDAIT,cAAC8sD,EAAA,EAAD,UACE,cAACk6W,GAAD,MAEF,cAAC,GAAD,W,GAzDyBtuZ,aA6E3BmI,GAAkBkG,YAAyB,CAC/C6/Y,YAAaroY,gBASA2qB,sBACbgG,aAzBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAEN2iW,OAAQ,CACNj9P,SAAU,YAEZ+kB,KAAM,CACJA,KAAM,GAER8wT,SAAU,CACRtxU,YAA+B,EAAlBtmC,EAAMZ,eAgBrBn7B,YAAgB,gBAChBgwE,KACAtQ,kBAAQjyE,IAViB,SAACjC,GAC1B,MAAO,CACLA,eAIWsqC,CAKb0mT,K,4hBC3HWq3D,EAA8B,wBAuBrCC,E,4MAsBG32H,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IAgBMm3b,EAhBiB/nb,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAMxkI,EAAewkI,EAAI19Q,IAAI,kBACvBqzH,EAAWqqJ,EAAI19Q,IAAI,cAErBk5I,IACFA,EAAar8H,MAAM,CAAC,KAAM,UACtB6gQ,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAO+sI,EAAar8H,MAAM,CAAC,KAAM,QAC9D6gQ,EAAIj5J,OAAO,mBAEb4O,IACFA,EAASx2G,MAAM,CAAC,KAAM,UAClB6gQ,EAAIvxQ,MAAM,CAAC,aAAc,MAAOknH,EAASx2G,MAAM,CAAC,KAAM,QACtD6gQ,EAAIj5J,OAAO,kBAKhB78G,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBAEGsxG,EAAU2pU,EAAqBn3b,KACjC,CAAE,IAAOm3b,EAAqB30a,QAC9B,GAEN8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAqmU,EAHF,EAGEA,uBACA4B,EAJF,EAIEA,aAGFtpU,EACE8/B,YACEuoX,EACA,KAIJroZ,EAASggC,YAAMqoX,IACf/+E,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,wDA1FV,SAA0BvtJ,EAAW4yJ,GACnC,MAKIjxQ,KAAKkqC,MAJPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WACA8mN,EAHF,EAGEA,iBACAD,EAJF,EAIEA,cAGEr3N,GAASA,IAAS0T,EAAU1T,OAC9Bs3N,IACAD,KAGE7mN,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,YAChEn7G,KAAKs8T,SAASnhN,IACJA,GAAckD,EAAUlD,YAClCn7G,KAAKg0W,oB,oBA8ET,WACE,MAUIh0W,KAAKkqC,MARPgvC,GAFF,EACEvuC,SADF,EAEEuuC,SACAyxB,EAHF,EAGEA,KACAg4N,EAJF,EAIEA,aACAN,EALF,EAKEA,aACAvlL,EANF,EAMEA,cACA1f,EAPF,EAOEA,WACAk4O,EARF,EAQEA,UACAvpV,EATF,EASEA,EAGF,OACE,cAACona,EAAA,EAAD,CACE/5W,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAACoC,EAAA,EAAD,CACEO,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC2uG,EAAA,EAAD,CACE7V,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC9pP,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC69D,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC/B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,qCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAACL,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,6BAEL,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC/B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASoxF,EAAW7+G,OACpBysG,YAAaj/F,EAAE,iCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,eAxGlBy7P,S,GAzHoB7wU,aAkSpBwwC,qBACbgG,aAnDa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAS,GAAD,OAfa,IAeb,OAEV3gC,QAAS,CACP41E,OAAO,oBACPg2L,UAAW,QAEbrxL,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,SA8BrCvmK,mBA1BsB,SAAC73E,EAAOyF,GAC9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOu1U,EACrD,OAAO,aACLv1U,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1Bq/B,cAAeD,eACfzf,WAAY8f,eAHXpqG,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfgjQ,cAAe,WACbr3R,EAAS,IAAIy0B,MAEfz0B,eAOF2sP,YAAmC,CAAEt2B,SAAUgyL,IAC/CzrH,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUbg+W,G,8GCxRah+W,qBACb91B,YAAgB,gBADH81B,EA3C+C,SAAC/qC,GAC7D,IACEkpZ,EAIElpZ,EAJFkpZ,+BACA7kH,EAGErkS,EAHFqkS,WACAE,EAEEvkS,EAFFukS,aACA1iT,EACEme,EADFne,EAGIsna,GADY3hZ,sBAAYyP,kBAAyBlpC,kBAC3B1O,SAASo4C,KAASC,UAE9C,OACE,mCACE,cAACouO,EAAA,EAAD,UACE,eAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,UACE,cAACmwC,EAAA,EAAD,CAASC,MAAOkpU,EAAiCrna,EAAE,qDAAuD,GAA1G,SACE,+BACA,cAAC2uG,EAAA,EAAD,CAAYxd,UAAWk2U,EAAgCvuU,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBkvU,KAA7F,SACI,cAAC,KAAD,CAAgBjsU,SAAS,gBAI/B,cAAC8C,EAAA,EAAD,CAASC,MAAoBn+F,EAAbwiT,EAAe,mBAAwB,4CAAvD,SACE,+BACE,cAAC7zM,EAAA,EAAD,CAAYxd,UAAWqxN,EAAY1pN,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBqqN,KAAzE,SACE,cAAC,KAAD,CAAUpnN,SAAS,gBAKvBksU,EAAY,KAAO,cAACppU,EAAA,EAAD,CAASC,MAAsBn+F,EAAf0iT,EAAiB,qBAA0B,4CAA3D,SACnB,+BACE,cAAC/zM,EAAA,EAAD,CAAYxd,UAAWuxN,EAAc5pN,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBuqN,KAA5E,SACE,cAAC,KAAD,CAAYtnN,SAAS,0B,mEChDtBmsU,GAV4C,SAACppZ,GAC1D,IAAMgxC,EAAQwjD,eAEd,OACE,cAACsxJ,EAAA,EAAD,CAAW10K,MAAO,CAAE2R,UAAW,UAA/B,SACI/iF,EAAMqpZ,gBAAkB,cAACC,GAAA,EAAD,CAAevtV,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,U,iFCCtEktF,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC+uB,KAAM,CACJwsB,WAAY,SACZd,aAAc,WACdtL,SAAU,SACV/tC,SAAU,KAEZwzM,gBAAiB,CACf7pL,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BsvF,KAAM,CACJ3U,SAAU,WACV1iG,MAAO,IAETkqG,MAAO,CACLnpC,MAAO,YAiFLy0M,GAAkBl5J,cAJX,SAAC,GAAD,IAAM3sF,EAAN,2BACX,cAAC8lP,EAAA,EAAD,eAAe9lP,MAGO2sF,CAAH,yEAIN48T,GAvEuD,SAACvpZ,GACrE,IACE17B,EAQE07B,EARF17B,KACAklb,EAOExpZ,EAPFwpZ,oBACAC,EAMEzpZ,EANFypZ,UACAzjK,EAKEhmP,EALFgmP,SACA0jK,EAIE1pZ,EAJF0pZ,mBACAC,EAGE3pZ,EAHF2pZ,WACAC,EAEE5pZ,EAFF4pZ,aACAC,EACE7pZ,EADF6pZ,gBAGI76W,EAAUs2C,KACTzjG,EAAK+xB,YAAe,gBAApB/xB,EACDioa,EAAsBtiZ,sBAAYqtN,gBAExC,OACE,cAACgxB,GAAD,UAEI6jK,EAEM,qCACE,cAAC3pU,EAAA,EAAD,CAASC,MAAOwpU,GAAuBllb,GAAQ,GAA/C,SACE,cAAC,KAAD,CAAUy3F,MAAM,SAAS7sB,UAAWF,EAAQ04C,SAE9C,cAACpN,GAAA,EAAD,CACE9oH,MAAOo4b,EACP52U,SAAU82U,EACVhpU,YAAaj/F,EAAE,mDACfqtD,UAAWF,EAAQurC,MACnBjJ,SAAUu4U,IAEVF,GAAc,cAAC9rD,GAAA,EAAD,CAAgB55X,MAAO0lb,EAAvB,SAAoC9na,EAAE,iDAIxD,qCAEI4na,GACE,cAAC1pU,EAAA,EAAD,CAASC,MAAOwpU,GAAuB,GAAvC,SACE,cAAC,KAAD,CAAUztV,MAAM,SAAS7sB,UAAWF,EAAQ04C,SAIlD,qBAAKx4C,UAAWF,EAAQ+wB,KAAxB,SACE,cAACggB,EAAA,EAAD,CACEC,MAAO17G,GAAQ,GACf27G,UAAU,eAFZ,SAIE,+BACE,cAAC,KAAD,CAAiBl7G,GAAIihR,EAAUljQ,OAAO,SAASosD,UAAWF,EAAQ42M,gBAAlE,SACGthR,GAAQ,iB,6DCxBlBymE,qBACb91B,YAAgB,gBADH81B,EAtC+C,SAAC/qC,GAC7D,IACE+pZ,EAIE/pZ,EAJF+pZ,sBACAC,EAGEhqZ,EAHFgqZ,eACAd,EAEElpZ,EAFFkpZ,+BACArna,EACEme,EADFne,EAGIioa,EAAsBtiZ,sBAAYqtN,gBAExC,OACE,mCACE,cAACixB,EAAA,EAAD,UACE,eAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,UACE,cAACmwC,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,+BACE,cAAC2uG,EAAA,EAAD,CAAYxd,SAAU82U,EAAqBnvU,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBkvU,KAAjF,SACE,cAAC,KAAD,CAAWjsU,SAAS,gBAKxB6sU,EACI,cAACpyH,GAAA,EAAD,CAAkB7lU,KAAK,UACvB,cAACkuH,EAAA,EAAD,CAASC,MAAO+pU,GAAgDloa,EAAE,sBAAlE,SACE,+BACE,cAAC2uG,EAAA,EAAD,CAAYxd,SAAU7/G,QAAQ42b,GAAwBpvU,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBgwU,KAA7F,SACE,cAAC,KAAD,CAAW/sU,SAAS,0B,4BCe7BtwE,GAAwC,CACnD4yE,MAHmB,GAInB37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAIIkzZ,GAAmB,SAAC32T,EAAoBjU,GACnD,IAAKiU,KAAc,OAACjU,QAAD,IAACA,OAAD,EAACA,EAAS9nF,KAC3B,MAAO,GAGT,IASkB,EATZ2yZ,EAA0B,CAAE,IAAO,KAErC52T,GACF42T,EAAmB3yZ,IAAIr1B,KAAK,CAC1B,iBAAkB,CAChB,KAAQoxH,KAId,OAAIjU,QAAJ,IAAIA,OAAJ,EAAIA,EAAS9nF,OACX,EAAA2yZ,EAAmB3yZ,KAAIr1B,KAAvB,oBAA+Bm9G,EAAQ9nF,MAGzC,OAAO2yZ,GAoGHC,G,kDAsDJ,WAAYnqZ,GAAgC,IAAD,8BACzC,cAAMA,IArDDm4R,aAAezxI,oBAAS,SAACpzD,GAC9B,IACExxF,EACE,EAAKhF,MADPgF,QAGF,EAAKqmU,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV0vH,aACAouI,KAAM,MAEP,KAuCwC,EArCpC0oL,kBAAoB1jQ,oBAAS,SAAC/oK,GACnC,IAAQ8iB,EAAa,EAAKT,MAAlBS,SACR,EAAKi4E,SAAS,CAAE2xU,cAAc,IAC9B5pZ,EAAS,IAAI6lC,KACX,CACEtpC,QAAS,CACPo/D,QAAS,MACTC,SAAU,sBACV9vB,KAAM,CACJ8yC,QAAS,CACP,iBAAkB,CAChB,UAAM1hG,QAAN,IAAMA,OAAN,EAAMA,EAAO22G,aAMvB,SAACh4B,GACC,IAAKA,EAAQp1D,IAAK,CAChB,IACMojZ,EADgBpra,iBAAOo9E,GACU5lF,MAAM,CAAC,OAAQ,UAAW,MAAO,UACxE,EAAKgiG,SAAS,CAAEixU,WAAYx2b,QAAQm3b,KAWtC,EAAK5xU,SAAS,CAAE2xU,cAAc,UAGjC,KAEwC,EAmCpCvjL,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAMI,EAAK/mO,MALPuqZ,EADF,EACEA,eACAC,EAFF,EAEEA,oBACAC,EAHF,EAGEA,wBACAC,EAJF,EAIEA,6BACAC,EALF,EAKEA,eAEF,EAA4C,EAAK7tZ,MAAzCgF,EAAR,EAAQA,QAAS8oZ,EAAjB,EAAiBA,uBAGjB,GAAIz2U,EAAUo2U,eAAe14b,MAAgC,IAAxB04b,EAAe14b,MAAc24b,EAAqB,CACrF,IAAMK,EAAUh4b,KAAKwjB,MAAMm0a,EAAsB1oZ,EAAQy9E,QAAUirU,EAAsB1oZ,EAAQy9E,MAAQ,EAAI,GACvGurU,EAAYhpZ,EAAQy9E,MAAQsrU,EAClC,EAAK1iF,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQknb,IAEVppL,KAAMmpL,IAINF,IAAmBD,GACrB,EAAK1qZ,MAAMS,SAASv+B,aAAKynB,oBAEvBiha,IAA2BH,GAA2Bt2U,EAAUs2U,yBAClE,EAAK/xU,SAAS,CACZkyU,uBAAwB,KACxBhB,aAAc,GACdS,cAAc,EACdV,YAAY,KAlEyB,EAuEpCoB,qBAAuB,SAACt7C,GAC7B,MAAoC,EAAKzvW,MAAjCS,EAAR,EAAQA,SAAUkiB,EAAlB,EAAkBA,cAClB,EAA2C,EAAK7lB,MAAxCgF,EAAR,EAAQA,QAASu9E,EAAjB,EAAiBA,QAASuqU,EAA1B,EAA0BA,aAS1BnpZ,EAAS,IAAI62C,IAAkD,CAC7D0zW,cAAe9ra,iBAAO,CAAE5a,KAAI,OAAEslb,QAAF,IAAEA,OAAF,EAAEA,EAAct1T,OAAQm7Q,aACpDpwR,UACAv9E,UACAmpZ,cAXoB,SAACC,GACrB3uV,KAAmB9rE,mBAAgB06Z,qBAAsBxoY,EAAc,CACrEyoY,cAAeF,EAAarxb,IAAI,QAChCopZ,YAAaioC,EAAarxb,IAAI,MAC9B0vT,WAA6C,OAAjC2hI,EAAarxb,IAAI,oBA/EQ,EA0FpCwxb,uBAAyB,SAACntb,GAC/B,IAAMotb,EAAkBptb,EAAE4kB,OAAOtxB,MACjC,EAAKknH,SAAS,CAAEkxU,aAAc0B,IAC9B,EAAKlB,kBAAkBkB,IA7FkB,EAgGpCC,+BAAiC,SAACP,GAAyC,IAAD,EAC/E,EAAKtyU,SAAS,CACZkyU,uBAAsB,iBAAEI,QAAF,IAAEA,OAAF,EAAEA,EAAenxb,IAAI,aAArB,QAA8B,KACpD+vb,aAAc,GACdS,cAAc,EACdV,YAAY,KArG2B,EAyGpC6B,WAAa,SAACR,GACnB,MAII,EAAKhrZ,MAHPS,EADF,EACEA,SACAgrZ,EAFF,EAEEA,WACA9oY,EAHF,EAGEA,cAGFliB,EAAS,IAAIm2C,KAA+B,CAAEo0W,mBAC9CS,EAAW,CACTR,cAAe,SAACS,GACdnvV,KAAmB9rE,mBAAgBk7Z,qBAAsBhpY,EAAc,CACrEyoY,cAAeM,EAAiB7xb,IAAI,QACpCopZ,YAAayoC,EAAiB7xb,IAAI,MAClC0vT,WAAiD,OAArCmiI,EAAiB7xb,IAAI,YACjC+xb,sBAAuBZ,EAAcnxb,IAAI,eAvHN,EA6HpCmlU,aAAe,WAAO,IAAD,EAClBv+R,EAAa,EAAKT,MAAlBS,SACR,EAMI,EAAK3D,MAJP+uZ,EAFF,EAEEA,kBACA/pZ,EAHF,EAGEA,QACAu9E,EAJF,EAIEA,QACAiU,EALF,EAKEA,WAGIw4T,EAAgBx4T,EAClB,CACE,IAAO,CACL,CACE,iBAAkB,CAChB,KAAQA,MAKhBjU,EACHA,GAAWiU,IAAe,EAAAw4T,EAASv0Z,KAAIr1B,KAAb,oBAAsBm9G,EAAgB9nF,MAEjE,EAAKmhF,SAAS,CAAEqzU,iBAAiB,IACjCtrZ,EAAS,IAAI63C,KAAkC,CAAEw2D,aAAa,KAC9DruG,EAAS,IAAIq2C,IAA8C,CACzDmsU,YAAa4oC,EAAkBhyb,IAAI,MACnCwlH,QAASysU,EACThqZ,cAzJuC,EA6JpCiqZ,gBAAkB,SAACF,GACxB,EAAKnzU,SAAS,CACZqzU,iBAAiB,EACjBF,uBAhKuC,EAoKpCG,mBAAqB,WAC1B,EAAKtzU,UAAS,SAAAquJ,GAAS,MAAK,CAC1BklL,kBAAmBllL,EAAUklL,sBAtKU,EA0KpC9jF,uBAAyB,SAACrnV,GAC/B,IACEora,EACE,EAAKlsZ,MADPksZ,qBAEF,EAKI,EAAKpvZ,MAJEqvZ,EADX,EACErqZ,QACYsqZ,EAFd,EAEE94T,WACS+4T,EAHX,EAGEhtU,QACMitU,EAJR,EAIE5qL,KAGS6qL,EAIPzra,EAJFghB,QACY0qZ,EAGV1ra,EAHFwyG,WACSm5T,EAEP3ra,EAFFu+F,QACMwrU,EACJ/pa,EADF4gP,KAGF,EAAKhpJ,SACH,CACE52E,QAASyqZ,GAAcJ,EACvB74T,gBAA8B1hI,IAAlB46b,EAA8BA,EAAgBJ,EAC1D/sU,aAAwBztH,IAAf66b,EAA2BA,EAAaJ,EACjD3qL,UAAkB9vQ,IAAZi5b,EAAwBA,EAAUyB,IACvC,WACD,IAAMjtU,EAAkB4qU,GAAiB,EAAKntZ,MAAMw2F,WAAY,EAAKx2F,MAAMuiF,SAC3E6sU,EACE,EAAKpvZ,MAAMgF,QACXu9E,OArMmC,EA2MpCqtU,iBAAmB,SAACxub,EAAG2sb,GAC5B,IACE/oZ,EACE,EAAKhF,MADPgF,QAGMy9E,EAAUz9E,EAAVy9E,MACFgtU,EAAU,2BACXzqZ,GADW,IAEdl+B,OAAQinb,EAAUtrU,IAGpB,EAAK4oP,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmpL,KAtNf,EAyNpC8B,wBAA0B,SAACzub,GAChC,MAGI,EAAK4+B,MAFPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KAGIkrL,EAASn1b,OAAOyG,EAAE4kB,OAAOtxB,OACzBq7b,EAAeh6b,KAAKqjB,MAAQwrP,EAAQ5/N,EAAQy9E,MAAS,GAAKqtU,GAAU,EAEpEL,EAAU,2BACXzqZ,GADW,IAEdy9E,MAAOqtU,EACPhpb,OAAQgpb,EAASC,IAGnB,EAAK1kF,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmrL,KAxOf,EA2OpCC,mBAAqB,WAC1B,MAGI,EAAK9sZ,MAFPyrZ,EADF,EACEA,WACA9oY,EAFF,EAEEA,cAEF8oY,EAAW,CACTR,cAAe,SAACC,GACd3uV,KAAmB9rE,mBAAgB06Z,qBAAsBxoY,EAAc,CACrEyoY,cAAeF,EAAarxb,IAAI,QAChCopZ,YAAaioC,EAAarxb,IAAI,MAC9B0vT,WAA6C,OAAjC2hI,EAAarxb,IAAI,mBArPM,EA0PpCkzb,QAAU,SAAC/B,EAAoC5wb,GAAsC,IAAD,EACzF,EAA2D,EAAK4lC,MAAxDgtZ,EAAR,EAAQA,uBAAwBC,EAAhC,EAAgCA,uBAC1BC,EAAY,UAAGlC,EAAcnxb,IAAI,eAArB,aAAG,EAA2BwH,QAAO,SAAC2vK,GACtD,IAAMm8Q,EAAkBn8Q,EAAIt6J,MAAM,CAAC,eAAgB,OAC7C02a,EAAcp8Q,EAAIt6J,MAAM,CAAC,WAAY,OAC3C,OACgD,OAA5Cs2a,EAAuBG,IACtB51b,MAAMC,QAAQw1b,EAAuBG,KAAqBH,EAAuBG,GAAiB9tb,SAAS+tb,IACpE,OAAxCH,EAAuBG,IACtB71b,MAAMC,QAAQy1b,EAAuBG,KAAkBH,EAAuBG,GAAa/tb,SAAS8tb,MAa3G,OAVY,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAczrb,QAAO,SAAC3C,EAAKkyK,GACxC,IAAKlyK,EAAIjF,IAAIm3K,EAAIt6J,MAAM,CAACtc,EAAK,QAAS,CACpC,IAAM28B,EAAKi6I,EAAIt6J,MAAM,CAACtc,EAAK,OACrBkK,EAAO0sK,EAAIt6J,MAAM,CAACtc,EAAK,SAC7B,OAAO0E,EAAItB,IAAIu5B,EAAIzyB,GAErB,OAAOxF,IACN4J,iBACErP,eACAX,WA/QoC,EAmRpC20b,eAAiB,SAAC39W,GAAD,OAAoB,SAACxxE,GAC3C,EAAKw6G,SAAS,CACZ40U,YAAapvb,EAAEs8G,cACf+yU,cAAe79W,MAtRwB,EA0RpC89W,gBAAkB,SAACtvb,GAAO,IAAD,iBACH,OAADA,QAAC,IAADA,GAAA,UAAAA,EAAG4kB,cAAH,mBAAWwkM,kBAAX,mBAAuBmmO,gBAAvB,eAAiCj8b,SAAUk8b,OAA2B,OAADxvb,QAAC,IAADA,GAAA,UAAAA,EAAG4kB,cAAH,mBAAWu1U,oBAAX,mBAAyB/wI,kBAAzB,mBAAqCmmO,gBAArC,eAA+Cj8b,SAAUk8b,OACrI,EAAKh1U,SAAS,CAAE40U,YAAa,QA1RhD,EAAKxwZ,MAAQ,CACX+xY,iBAAkB,CAChB,CAAE93Y,GAAI,gBAAiBH,MAAO,2CAA4CipF,KAAM,CAAC,uBAAwB3uC,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,WAC5J,CAAEhsF,GAAI,YAAaH,MAAO,yCAA0CipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GAC7G,CAAEpxX,GAAI,MAAOH,MAAO,mCAAoCipF,KAAM,CAAC,OAAQ3uC,SAAS,EAAMi3U,UAAU,GAChG,CAAEpxX,GAAI,eAAgBH,MAAO,4CAA6CipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GACnH,CAAEpxX,GAAI,WAAYH,MAAO,wCAAyCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GAC3G,CAAEpxX,GAAI,UAAWH,MAAO,uCAAwCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAErHkpU,kBAAkB,EAClBvqL,KAAM,EACNpuI,WAAY,GACZjU,QAAS,KACTv9E,QAAS6K,GACT2gZ,YAAa,KACbC,cAAe,GACfxB,iBAAiB,EACjBF,kBAAmBnjb,gBACnBkib,uBAAwB,KACxBhB,aAAc,GACdS,cAAc,EACdV,YAAY,EACZgE,8BAA+B,IAxBQ,E,qDA4B3C,WACE,MAA8C73b,KAAKkqC,MAA3CksZ,EAAR,EAAQA,qBAAsB0B,EAA9B,EAA8BA,YAE9B1B,EADoBp2b,KAAKgnC,MAAjBgF,SAER8rZ,M,oBA+PF,WAAiB,IAAD,OACd,EAOI93b,KAAKkqC,MANPgvC,EADF,EACEA,QACAu7W,EAFF,EAEEA,eACAE,EAHF,EAGEA,wBACAD,EAJF,EAIEA,oBACA5vY,EALF,EAKEA,UACA/4B,EANF,EAMEA,EAEF,EAYI/rB,KAAKgnC,MAXPw2F,EADF,EACEA,WACAjU,EAFF,EAEEA,QACAv9E,EAHF,EAGEA,QACA4/N,EAJF,EAIEA,KACAuqL,EALF,EAKEA,iBACApd,EANF,EAMEA,iBACA0e,EAPF,EAOEA,cACAxB,EARF,EAQEA,gBARF,IASEF,yBATF,MASsBnjb,gBATtB,EAUEkib,EAVF,EAUEA,uBACAhB,EAXF,EAWEA,aAGIiE,EAA2Bhf,EAAiBxta,QAAO,SAACwnZ,GAAD,OAAYA,EAAO33U,WAEtE0+T,EAAS,CACbx/B,kBAAmB,GACnBC,mBAAoB,GACpBI,aAAc5uV,EAAE,2BAChB6uV,kBAAmB7uV,EAAE,wCAGvB,OACE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQM,UAHrB,UAKE,cAACw+W,GAAA,EAAD,CACEnc,oBAAqB77a,KAAKk2b,mBAC1Bna,WAAY/7a,KAAKg3b,mBACjB3b,cAAetvZ,EAAE,mCACjBs2S,aAAcriU,KAAKqiU,aACnBi5G,YAAY,IAEd,cAAC2c,GAAA,EAAD,CACEC,cAAelF,EACf3gF,uBAAwBryW,KAAKqyW,uBAC7BrmU,QAASA,EACTioU,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAEi1U,8BAA+Bvzb,OAExE,eAACu0E,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQi/W,iBACnB39W,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKGzD,EACG,cAAC0D,EAAA,EAAD,CACErtD,QAAS,cAAC,IAAD,IACTC,SAAU,cAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,cAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,IAElB,cAAC74Q,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,SAG2B,IAAxB0yD,EAAe14b,KACZ,qCACE,qBAAKu/G,MAAO,CAAE+O,SAAU,OAAQhuC,SAAU,GAA1C,SACE,eAACi8W,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAE3hE,KAAM2hE,EAAQs/W,WAApC,SACE,cAACC,EAAA,EAAD,UACGV,EAAyB/ub,KAAI,SAAC0gI,EAAQvtI,GAAT,OAC5B,cAAC6zR,EAAA,EAAD,CAAuB92M,QAAS,CAAE3hE,KAAM2hE,EAAQw/W,YAAcp9U,MAAOouB,EAAOpuB,MAA5E,SACGvvF,EAAE29G,EAAO5oG,QADI3kC,UAMtB,cAACw8b,EAAA,EAAD,UACGlE,GAAkBA,EAAezrb,KAAI,SAACksb,EAAoC/4b,GAArC,OACpC,cAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAA7C,SACG03F,GAAiB6C,EAAyB/ub,KAAI,SAAC+pZ,GAAyB,IAAD,EAChE5F,EAAc+nC,EAAcnxb,IAAI,MAChC60b,EAAmB,EAAK3B,QAAQ/B,EAAe,gBAC/C2D,EAAe,EAAK5B,QAAQ/B,EAAe,YAC3C3B,EAAiD,OAAhC2B,EAAcnxb,IAAI,UACnC41Y,EAAWu7C,EAAcnxb,IAAI,YAC7B4vb,EAAyB,OAAbh6C,EACZm/C,GAAyBvF,GAA+B,OAAb55C,EAC3Co/C,EAAuBjE,IAA2B3nC,EAClD6rC,EAAmBzF,EAAiB2B,EAAcnxb,IAAI,MAAQ41Y,EAEpE,OAAQoZ,EAAO9xX,IACb,IAAK,gBAAiB,OAAO,cAAC,GAAD,CAAqCsyZ,eAAgBA,IAAmBwF,GAAjDhmC,EAAOjyX,OAC3D,IAAK,YAAa,OAAO,cAAC,GAAD,CAEG6yZ,UAAWA,EACXD,oBAAqBwB,EAAcnxb,IAAI,uBACvCyK,KAAM0mb,EAAcnxb,IAAI,QACxBmsR,SAAQ,qBAAgBi9H,EAAhB,kBACRymC,mBAAoBmF,EACpBlF,WAAY,EAAK7sZ,MAAM6sZ,WACvBC,aAAcA,EACdC,gBAAiB,EAAKwB,wBARjBxiC,EAAOjyX,OAUxC,IAAK,MAAO,OAAO,cAAC,KAAD,CAA6B+qF,KAAMqpU,EAAct0a,MAAMmyY,EAAOhpS,OAA/CgpS,EAAOjyX,OACzC,IAAK,eAAgB,OAAO,cAACm4Z,GAAA,EAAD,CAAiCC,WAAYN,EAAkBviU,YAAa,EAAKkhU,gBAA9DxkC,EAAOjyX,OACtD,IAAK,WAAY,OAAO,cAACm4Z,GAAA,EAAD,CAAiCC,WAAYL,EAAcxiU,YAAa,EAAKkhU,gBAA1DxkC,EAAOjyX,OAClD,IAAK,UAAW,OAAQi4Z,EACI,cAAC,GAAD,CAEE9E,sBAAwB,EAAKjtZ,MAAMutZ,cAAgB,EAAKvtZ,MAAM6sZ,cAAc,UAAC,EAAK7sZ,MAAM8sZ,oBAAZ,aAAC,EAAyBt1T,QAAUzyG,EAAE,4CAA8C,GAChKmoa,eAAgB,kBAAM,EAAKe,qBAAqB+D,IAChD5F,+BAAgC,kBAAM,EAAKqC,mCAHtC1iC,EAAOjyX,OAKd,cAAC,GAAD,CAEEsyZ,+BAAiCtuY,GAAag0Y,EAAyB,KAAO,kBAAM,EAAKrD,+BAA+BP,IACxH3mH,WAAY,kBAAM,EAAKmnH,WAAWR,IAClCzmH,aAAc,kBAAM,EAAKwnH,gBAAgBf,KAHpCniC,EAAOjyX,YApCjB3kC,aAgDvC,cAACg9b,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpButa,aAAct5b,KAAK42b,iBACnB2C,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCC,oBAAqBx5b,KAAK62b,wBAC1Bzhb,MAAOs/a,GAAuB,EAC9B+E,YAAaztZ,EAAQy9E,MACrBmiJ,KAAMA,EACN8tL,iBAAkBC,IAClBzgX,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,wBAIvB,cAACC,GAAA,EAAD,CACE1/E,MAAO2/E,IACP1/E,gBAAiBr6W,KAAKg3b,mBACtB18E,kBAAmBw/B,EAAOx/B,kBAC1BC,mBAAoBu/B,EAAOv/B,mBAC3BI,aAAcm/B,EAAOn/B,aACrBC,kBAAmBk/B,EAAOl/B,wBAMxC,cAAC/hS,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAU26W,EAAmB,QAAU,GAJ3C,SAOE,cAAC,GAAD,CACExzH,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,EACTqmU,uBAAwBryW,KAAKqyW,uBAC7BiD,UAAWt1W,KAAKgnC,MAAM6wZ,8BACtB5jF,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAEi1U,8BAA+Bvzb,YAI5E,cAAC01b,GAAA,EAAD,CAAW7mU,SAAUnzH,KAAKgnC,MAAMwwZ,YAAa0B,WAAYzB,EAAe9yT,QAAS3kI,KAAK03b,kBACtF,cAAC,GAAD,CACEl6T,WAAYA,EACZjU,QAASA,EACTv9E,QAASA,IAEX,cAAC,IAAD,CACE+hV,WAAYgoE,EAAkBhyb,IAAI,MAClC4mG,KAAMsrV,EACNjoE,SAAU+nE,EAAkBhyb,IAAI,QAChCkqX,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAAEqzU,iBAAiB,KAC1D/sH,aAAclpU,KAAKkpU,aACnBolD,aAAa,W,GAphBa7pV,aAojB9BmI,GAAkBkG,YAAyB,CAC/C2hZ,eAAgB32L,eAChB42L,oBAAqB32L,gBACrB42L,wBAAyB32L,eACzBk5L,uBAAwBj4S,KACxBk4S,uBAAwBj4S,KACxB01S,6BAA8B3xY,eAC9B4xY,eAAgBj0Y,eAChBkE,UAAWrD,kB,IAGEwzB,kBACbgG,aA7oBa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRx4C,aAAc,aACdisC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAO,OACPe,SAAU,EACVZ,cAAe,UAEjB28W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,OACR1J,UAAW3sC,EAAM6mD,QAAQ,GACzBta,aAAcvsC,EAAM4/C,MAAMrT,cAE5B0wU,iBAAkB,CAChB78W,MAAO,OACPi2C,OAAQ,MACRl1C,SAAU,EACVD,UAAW,OACXN,QAAS,QAEXimT,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACfC,eAAgB,SAChB61C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlBwxU,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,WAEZwvU,kBAAmB,CACjBxvU,SAAU,WAylBO,CAAE2E,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,kBAAQjyE,IAxCiB,SAACjC,GAC1B,MAAO,CACLA,WACAmtZ,YAAa,WACXntZ,EAAS,IAAI63B,MAEf4zX,qBAAsB,SAACpqZ,EAAgCu9E,GACrD5+E,EAAS,IAAIi4C,KAA0B,CACrC52C,UACAu9E,cAGJosU,WAAY,SAACxnE,GACXxjV,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIg5Z,GACJ/vZ,MAAOikV,KAETxjV,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIg5Z,GACJtvV,MAAM,UAiBC11B,CAKbo/W,I,oCCruBW4F,GAAsB,mBAEtBC,GAAc,SAACh/Q,GAC1B,OAAOtoK,gBAAMlL,IAAN,UAAawzK,EAAIj+B,aAAah8G,GAA9B,YAAoCi6I,EAAI9jD,SAASn2F,IAAM,CAC1Dg8G,aAAc,CAAEh8G,GAAIi6I,EAAIj+B,aAAah8G,GAAIzyB,KAAM0sK,EAAIj+B,aAAazuI,MAChE4oH,SAAU,CAAEn2F,GAAIi6I,EAAI9jD,SAASn2F,GAAIzyB,KAAM0sK,EAAI9jD,SAAS5oH,MACpD0uG,SAAUg+D,EAAIh+D,YAIPi9U,GAAkB,SAACC,GAC9B,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAASzub,QAAO,SAACkC,EAAKqtK,GAC3B,OAAOrtK,EAAInG,IAAJ,UAAWwzK,EAAIt6J,MAAM,CAAC,eAAgB,OAAtC,YAAgDs6J,EAAIt6J,MAAM,CAAC,WAAY,QAAU,CACtFq8H,aAAc,CAAEh8G,GAAIi6I,EAAIt6J,MAAM,CAAC,eAAgB,OAAQpS,KAAM0sK,EAAIt6J,MAAM,CAAC,eAAgB,UACxFw2G,SAAU,CAAEn2F,GAAIi6I,EAAIt6J,MAAM,CAAC,WAAY,OAAQpS,KAAM0sK,EAAIt6J,MAAM,CAAC,WAAY,UAC5Es8F,SAAUg+D,EAAIn3K,IAAI,gBAEnB6O,kBA8YUqiE,yBACbgG,aA9Wa,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN3L,YAA+B,EAAlBtmC,EAAMZ,WAErB/iE,KAAM,CACJ+jE,MAAO,KAETu8R,KAAM,CACJriP,UAAW,SACXvvB,MAAO,2BAsWT9mD,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMw8U,GACNzyH,kBAAkB,EAClBC,oBAAqB,IAEvB5oN,mBAjFsB,SAAC73E,EAAOyF,GAC9B,IAAM4tZ,EAAwBh8L,gBAAkCr3N,GAC1Ds3E,GAAqC,OAArB+7U,QAAqB,IAArBA,OAAA,EAAAA,EAAuB97a,SAAU,GAEvD,OAAO,aACL+/F,gBACA+7U,yBACGvnZ,YAAyB,CAC1BqoE,WAAYC,wBAAc6+U,IAC1BK,qBAAsB9+T,aAA+By+T,IACrDxF,eAAgBx2L,gBAChBs8L,0BAA2Br8L,gBAJ1BprN,CAKA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACA6vZ,gBAAiB,SAACtF,EAA6CuF,EAAyDtF,GACtHxqZ,EAAS,IAAI+2C,IAA0B,CACrCwzW,gBACAuF,YACAtF,oBAGJuF,oCAAqC,SAACxF,EAA6ClpZ,EAAgCu9E,EAAkB4rU,GACnIxqZ,EAAS,IAAI62C,IAAkD,CAC7D0zW,gBACA3rU,UACAv9E,QAASA,GAAoB6K,GAC7Bs+Y,oBAGJwF,2BAA4B,WAC1BhwZ,EAAS,IAAIm2C,KAA+B,CAAEo0W,cAAetib,oBAE/DwpZ,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIg5Z,GACJtvV,MAAM,KAERhgE,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIg5Z,GACJ/vZ,MAAO,MAETS,EAAS,IAAIm2C,KAA+B,CAAEo0W,cAAetib,oBAE/Dwjb,qBAAsB,SAAC5nb,GACrBm8B,EAAS,IAAI23C,KAAmC,CAC9C9zE,WAGJosb,gBAAiB,SAAC35Z,EAAYzyB,EAAcisb,EAAyDtF,GACnGxqZ,EAAS,IAAIi2C,KAAsB,CACjC3/C,KACAzyB,OACAisb,YACAtF,oBAGJ0F,oCAAqC,SAAC55Z,EAAYzyB,EAAcw9B,EAAgCu9E,EAAkB4rU,GAChHxqZ,EAAS,IAAI+1C,KAA0C,CACrDz/C,KACAzyB,OACA+6G,UACAv9E,QAASA,GAAoB6K,GAC7Bs+Y,wBAMOlgX,EAhWS,SAAC6lX,GACvB,IACE5hX,EAsBE4hX,EAtBF5hX,QADF,EAuBI4hX,EArBF7sC,mBAFF,SAGEzwR,EAoBEs9T,EApBFt9T,WACAjU,EAmBEuxU,EAnBFvxU,QACAv9E,EAkBE8uZ,EAlBF9uZ,QALF,EAuBI8uZ,EAjBF3/U,kBANF,MAMevoG,gBANf,EAOEynb,EAgBES,EAhBFT,sBACAhtC,EAeEytC,EAfFztC,aAEAonC,GAaEqG,EAdFP,0BAcEO,EAbFrG,gBACA6F,EAYEQ,EAZFR,qBACAlE,EAWE0E,EAXF1E,qBACAzrX,EAUEmwX,EAVFnwX,MACAgwX,EASEG,EATFH,2BACAv+B,EAQE0+B,EARF1+B,YACAo+B,EAOEM,EAPFN,gBACAE,EAMEI,EANFJ,oCACAE,EAKEE,EALFF,gBACAC,EAIEC,EAJFD,oCACAlwZ,EAGEmwZ,EAHFnwZ,SACA03R,EAEEy4H,EAFFz4H,aACAt2S,EACE+ua,EADF/ua,EAGIgva,EAAY,OAAGT,QAAH,IAAGA,OAAH,EAAGA,EAAsB9rb,KACrCisb,EAAS,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAsBG,UAClCtF,EAAa,OAAGmF,QAAH,IAAGA,OAAH,EAAGA,EAAsBnF,cAEtCltV,EAAS8zK,eAEf,EAAkDt3O,WAAe41Z,GAAjE,mBAAOtE,EAAP,KAA0BiF,EAA1B,KACA,EAAkCv2Z,WAAe41Z,EAAsBt2b,IAAI,SAAWg3b,GAAgB,IAAtG,mBAAOE,EAAP,KAAkBC,EAAlB,KACA,EAAwCz2Z,YAAe,GAAvD,oBAAO8vZ,GAAP,MAAqB4G,GAArB,MACA,GAA4B12Z,YAAe,GAA3C,qBAAOrwB,GAAP,MAAegnb,GAAf,MACA,GAA0B32Z,WAAe,GAAzC,qBAAOn3B,GAAP,MAAc+tb,GAAd,MACA,GAAwB52Z,WAA2C4oX,EAAe6sC,GAAY7sC,GAAgBz6Y,iBAA9G,qBAAO+hN,GAAP,MAAasmI,GAAb,MACA,GAA0Cx2T,YAAe,GAAzD,qBAAO62Z,GAAP,MAAsBC,GAAtB,MAEMz/L,GAAmB,OAAGi6L,QAAH,IAAGA,OAAH,EAAGA,EAAmBhyb,IAAI,MAC7Cy3b,IAAyC,OAAjBzF,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBhyb,IAAI,UAAW,GAEhE0gC,aAAgB,WACVs2Z,IACFG,EAAaH,GACRj/L,IACHw4L,GAAkByG,MAGrB,CAACA,EAAcj/L,KAElBr3N,aAAgB,WACVq3N,KACFnxN,EAAS2/B,YAAkB2vX,KAC3BmB,IAAU,MAEX,CAAC7G,GAAcz4L,KAElBr3N,aAAgB,WACdu2Z,EAAqBX,GACrBa,EAAab,EAAsBt2b,IAAI,SAAW,MACjD,CAACs2b,IAEJ51Z,aAAgB,WACdw2T,GAAQoyD,EAAe6sC,GAAY7sC,GAAgBz6Y,mBAClD,CAACy6Y,IAEJ,IAAM7+Y,GAAO2sG,EAAWv6F,MAAM,CAAC,OAAQ,SACjCq8H,GAAe9hC,EAAWp3G,IAAI,gBAC9BqzH,GAAWjc,EAAWp3G,IAAI,YAE1Buwb,GAAoB1jQ,oBAAS,SAAC/oK,GAClCsza,IAAgB,GAEhBl8Y,QAAQwnJ,IAAI,CACVx+F,EAAOJ,QAAQ,CACbvB,QAAS,MACTC,SAAU,sBACV9vB,KAAM,CACJ8yC,QAAS,CACP,iBAAkB,CAChB,UAAM1hG,QAAN,IAAMA,OAAN,EAAMA,EAAO22G,YAKrBv2B,EAAOJ,QAAQ,CACbvB,QAAS,MACTC,SAAU,0BACV9vB,KAAM,CACJjoE,KAAMqZ,OAGT0uD,MAAK,SAAAklX,GACN,IAAMzgZ,EAAO5xB,iBAAOqya,GACdjH,EAAUn3b,QAAQ29C,EAAKp6B,MAAM,CAAC,EAAG,UAAW,MAAO,WAAao6B,EAAKp6B,MAAM,CAAC,EAAG,UAAW,MAAO,YAEvGw6a,GAAU5G,GACNA,GACF7pZ,EAASogC,YAAWkvX,GAAqB,CAAEzrb,KAAMud,EAAE,+CACnD4e,EAAS0gC,YAAM4uX,GAAqB,WAEpCtvZ,EAAS2/B,YAAkB2vX,MACvB,OAAClE,QAAD,IAACA,OAAD,EAACA,EAAmB9xb,IAAI,QAAUqJ,IACpC+tb,GAAS,IAIbF,IAAgB,MACfx0P,OAAM,SAACx4L,GACR6Z,QAAQ7Z,MAAM,yBAA0B,CAACA,UACzCgtb,IAAgB,QAEjB,KAiEH,OACE,cAAC,IAAD,CACE7rU,SAAU2qU,GACV5L,SApDa,WACf1jX,IACAwwX,IAAgB,GAChBC,IAAU,GACVC,GAAS,GACTpgG,GAAQoyD,EAAe6sC,GAAY7sC,GAAgBz6Y,iBACnD2ob,IAAiB,GACjBP,EAAqBpob,iBACrBsob,EAAa,IACbP,KA4CEzhX,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAJnB,SAOE,uBAAM+kT,SAAU+F,GA7CH,SAACl3T,GAChB,GAAI4qb,EAAkB9xb,IAAI,MACpBw2b,EACFG,EAAgB9+L,GAAqBm/L,EAAWR,EAAWtF,GAE3D0F,EACE/+L,GACAm/L,EACAjvZ,EACAmoZ,GAAiB32T,EAAYjU,GAC7B4rU,GAGJ/4B,QACK,CACL,IAAKznM,GAAKv/M,QAER,YADAmmb,IAAiB,GAInB,IAAM3pO,EAAOzmN,EAAOyV,MAAM,CAAC,QAAS,IAAI49G,OAAOplF,cAEzC87Y,EAAgBtib,cAAI,CACxBpE,KAAMrD,EAAOyV,MAAM,CAAC,OAAQ,UAAYq6a,GAAa,GACrDjvZ,QAAS,CAAC,yBACR20F,YAAax1H,EAAOpH,IAAI,gBACpB6tN,EAAO,CAAEA,QAAS,IAFf,IAGPl2N,MAAOyP,EAAOpH,IAAI,SAASy6H,OAAOplF,cAClCu7K,KAAMA,GAAKpxN,oBAIf0qZ,EAAcysC,EAAoCxF,EAAelpZ,EAASmoZ,GAAiB32T,EAAYjU,GAAU4rU,GAAiBqF,EAAgBtF,EAAeuF,EAAWtF,GAC5K/4B,QAYA,UACE,eAACnmG,EAAA,EAAD,WACE,cAACylI,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2BglE,MAAM,cAAcyT,QAAQ,KAA7E,SACI8hV,GAAqB,UAAMzva,EAAE,iCAAR,aAA6Cyva,GAA7C,KAAwEzva,EAAE,qCAGnG,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,QAAD,CACEprE,KAAK,OACL8qE,UAAWi/O,KACXv+M,SAAUihV,EAAUz8T,OAAS,KAAO,CAAC2lE,KACrCj6J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAASyoZ,EAAel2a,OACxBi4V,UAAU,EACV/zP,WAAYw4U,EACZn6Z,MAAO/U,EAAE,0CACTi/F,YAAaj/F,EAAE,gDACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOhyG,KAAO,MACjDgqT,aAAc,SAAAh4M,GAAM,OAAIA,GACtB,cAACyJ,EAAA,EAAD,CAASC,MAAK,yCAAd,SACE,eAAC1Q,EAAA,EAAD,CAAYvT,MAAM,cAAlB,UAAiCua,EAAOhyG,KAAxC,MAAgD,sBAAM4qE,UAAWF,EAAQ2+R,KAAzB,SAAgCr3P,EAAOl8G,YAG3Fk+G,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAC3B,UAAXA,GACF2vU,EAAajlb,GAEA,UAAXs1G,IACF6qU,EAAqBngb,GAChB8/a,EAAkB9xb,IAAI,OACzBqwb,GAAkBr+a,KAIxBulG,SAAU,SAACvlG,GACLA,IACFilb,EAAajlb,EAAIzH,MACjBwsb,EAAqB5xa,iBAAOnT,IAC5Bolb,GAAS,MAIfzhV,iBAAkB,CAChBC,WAAW,QAMjBvsG,GAEM,cAACqub,GAAA,EAAD,CACE1+S,aAAcA,GACd7lB,SAAUA,GACVu9F,KAAMvrM,iBAAOurM,IACb2mO,cAAeA,GACfM,aArIC,WACnB3gG,GAAQtmI,GAAKjtN,IAAL,UAAYu1I,GAAah8G,GAAzB,YAA+Bm2F,GAASn2F,IAAM,CACpDg8G,aAAc,CAAEh8G,GAAIg8G,GAAah8G,GAAIzyB,KAAMyuI,GAAavhJ,OACxD07H,SAAU,CAAEn2F,GAAIm2F,GAASn2F,GAAIzyB,KAAM4oH,GAAS17H,UAE9C6/b,IAAiB,GACjB5wZ,EAASu/B,YAAO+vX,GAAqB,eAAgB,OACrDtvZ,EAASu/B,YAAO+vX,GAAqB,WAAY,QA+H/B4B,gBA5HI,SAAC3gR,GACvB+/K,GAAQtmI,GAAKnsG,OAAL,UAAe0yD,EAAIj+B,aAAah8G,GAAhC,YAAsCi6I,EAAI9jD,SAASn2F,SA8H7C,WAIV,eAACm1R,EAAA,EAAD,WACE,cAACzxM,EAAA,EAAD,CACEE,QAASu3S,EACTn2T,MAAM,UACN7sB,UAAWF,EAAQi0C,OAHrB,SAKIphG,EAAE,wBAEN,cAAC44F,EAAA,EAAD,CACEzkH,KAAK,SACL+lG,MAAM,UACN7sB,UAAWF,EAAQi0C,OACnBjQ,SAAUq3U,IAAgBngb,MAAY5F,IAAQysb,GAAa,IAAIz8T,OAJjE,SAM4BzyG,EAAxByva,GAA0B,qBAA0B,iC,qSCxXnD,MAA0B,gDCA1B,MAA0B,iDCA1B,MAA0B,+CCA1B,MAA0B,2C,uECG5BM,EAAsB,CAAC,SAAU,WAAY,WAO3CC,I,EAAAA,EALf,SAAwChwa,GACtC,IAAMiwa,EAAUC,YAAiBvta,OAAOsiL,UAAUG,WAAW+qP,aAAa1tb,KAC1E,OAAOstb,EAAmBvyb,SAASyyb,GAAW,KAAvC,UAAiDA,EAAjD,YAA4Djwa,EAAE,0C,SCExDowa,EALC,WACd,IAAMC,EAAe51Z,mBAAQ,kBAAM2c,gBAAkB,IACrD,OAAOzR,sBAAY0qZ,I,4GCiFf5sU,GAAYJ,aAAmC,SAACl0C,GACpD,MAAO,CACL1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,IAEzB+hX,SAAU,CACRhpU,aAAcn4C,EAAMZ,QAAQ,IAE9BgiX,uBAAwB,CACtBhgV,UAAWphC,EAAMZ,QAAQ,IAE3BiiX,YAAa,CACXxnU,cAAe,YACf1P,OAAQ,UACRkX,WAAY,OACZpV,SAAU,SAEZq1U,YAAa,CACX1gX,QAASZ,EAAMZ,QAAQ,IAEzBmiX,WAAY,CACVlrU,OAAQ,QAEV1X,UAAW,CACTv+B,MAAO,QAET0jT,YAAa,CACX/4R,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,MAE/Bg8W,UAAW,CACTj5R,OAAQ,WAEV09J,eAAgB,CACdxnM,OAAQL,EAAMZ,QAAQ,EAAG,UAalBoiX,IAAgB,mBAC1Bzha,eAAe,CACd++U,KAAM2iF,EACNrhX,MAAO,QACPmwR,gBAAiB,CACfmxF,mBAAoB,iBALG,cAQ1B1ha,qBAAqB,CACpB8+U,KAAM6iF,EACNvhX,MAAO,QACPmwR,gBAAiB,CACfmxF,mBAAoB,iBAZG,cAe1Bzha,gBAAgB,CACf6+U,KAAM6iF,IAhBmB,cAkB1Bxha,SAAS,CACR2+U,KAAM8iF,EACNxhX,MAAO,QACPmwR,gBAAiB,CACfmxF,mBAAoB,iBAtBG,cAyB1Brha,SAAS,CACRy+U,KAAM+iF,EACNzhX,MAAO,QACPmwR,gBAAiB,CACfmxF,mBAAoB,iBA7BG,GAqavBhwZ,GAAkBkG,YAAyB,CAC/CkqZ,SAAUryY,cACVsyY,UAAWl0T,cACXm0T,wBAAyB97Y,gBAIZ6zB,sBACb06C,aACA9Q,kBAAQjyE,IAFKqoC,EAlY4B,SAAC/qC,GAAW,IAAD,MAGlDuf,EAIEvf,EAJFuf,SACAwzY,EAGE/yZ,EAHF+yZ,UACAD,EAEE9yZ,EAFF8yZ,SACAE,EACEhzZ,EADFgzZ,wBAGF,EAAwBz4Z,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KAEM7qE,EAASy3Y,cACT95Y,EAAO84Y,IACPxxZ,EAAW2F,wBACX4qC,EAAQwjD,cACR7xE,EAAgBkgK,cACdhhM,EAAM+xB,YAAe,gBAArB/xB,EACFk+B,GAASvY,sBAAYsY,eACrBozY,IAAmB13Y,EAAO3hD,IAAP,wBAAuC,OAAXkmD,GAAkB,MAAQ,MAASvE,EAAO3hD,IAAI,mBAAqB2hD,EAAO3hD,IAAI,cAAgB6O,iBAAoB2L,OAEjK26D,GAAUs2C,GAAUtlF,GAEpBo8J,GAAS5gJ,EAAO9kC,MAAM,CAAC,gBAAiB,UAAW,IAEnD2gC,GAAa8B,IAAS5pB,WAAS4vB,KAC/B0zF,GAAY15F,IAAS5pB,WAAS6pB,IAE9BgrY,GAAelwb,OAAO0D,KAAKysb,MAAW9hb,OAEtC4wb,GAAmB/2P,KAAWlpK,gBAE9Bkga,IAAc53Y,EAAO3hD,IAAI,cAAgBg5I,GAEzCkY,GAAY,CAChB,CACEn0H,MAAO/U,EAAE,mBACTg+F,KAAMj7F,aACNyua,UAAW,cAJG,mBAMbD,GACC,CAAC,CACCx8Z,MAAO/U,EAAE,oBACTg+F,KAAMh7F,cACNwua,UAAW,eAEb,KAGAC,GAlDoB,SAACvoS,EAAclrC,GAAf,OAAwCkrC,EAAKjvI,WAAU,SAAAo9I,GAAG,OAAIA,EAAIr5C,OAASA,MAAS,EAkD1F0zU,CAAoBxoS,GAAMxrG,EAAS0C,UAEjDuxY,GA1DgB,SAAC3xa,GAAD,MAA2B,CACjD4xa,SAAU5xa,EAAE,2BACZ6xa,eAAgB7xa,EAAE,iCAClB8xa,UAAW9xa,EAAE,kCAuDK+xa,CAAgB/xa,GAAGs3B,GAE/B06Y,GAAahC,EAA8Bhwa,GAEjD0Y,aAAgB,WACds5Z,IAAcllZ,YAAW,kBAAM03E,GAAQ,KAAO,OAC7C,IAUH,OACA,gBAACytU,EAAA,EAAD,CACE1iV,MAAO,CACLisM,UAAW,UAFf,UAKE,eAAC02I,EAAA,EAAD,CACEtzV,KAAMA,EACNg6B,QAAS,kBAAMpU,GAAQ,IACvByV,mBAAoB,CAClBC,MAAO,MAET50F,QACE,gBAACwnC,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRU,KAAK,SAHP,UAKE,eAAC,IAAD,CAAapB,UAAWF,GAAQ8lT,cAChC,uBAAM5lT,UAAWF,GAAQ6pM,eAAzB,SAA0Cg7K,KAC1C,eAAC,IAAD,CAAW3kX,UAAWF,GAAQolU,UAAWz5R,QAAS,kBAAM0L,GAAQ,WAItE,gBAAC13C,EAAA,EAAD,CACEK,QAAS,CACPM,UAAWN,GAAQujX,YAErBjjX,WAAW,EAJb,UAME,eAAC0kX,EAAA,EAAD,IACA,eAACrlX,EAAA,EAAD,CACEK,QAAS,CACPM,UAAWN,GAAQM,WAErBU,GAAI,EACJU,GAAI,GACJpB,WAAW,EACXI,MAAM,EAPR,SASE,gBAACf,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXP,WAAW,SACXS,UAAU,SACVc,KAAK,SALP,UAOE,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNV,QAAS,CACPU,KAAMV,GAAQmjX,UAEhBviX,QAAQ,gBACRb,WAAW,SACXuB,KAAM,SARR,UAUE,sBACEqqC,QAAStjE,GAAa,kBAAM7yB,OAAO+6B,SAAS2jE,KAAO1+F,OAAO+6B,SAAS3uC,OAAS2T,4BAAoB,KAAM,KACtG6sF,MAAO,CAAE+J,OAAQ9jE,GAAa,UAAY,WAF5C,SAIE,eAACqlE,EAAA,EAAD,aACEJ,KAAK,UAAAk2U,GAAiBp2P,WAAjB,eAA0B0zK,OAAQ,GACvC1+R,OAAO,UAAAohX,GAAiBp2P,WAAjB,eAA0BhrH,QAAS,QAC1CurC,YAAY,SACZ4kP,gBAAe,UAAEixF,GAAiBp2P,WAAnB,aAAE,EAA0BmlK,iBACvC2xF,OAINF,GACE,gBAACrkX,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,WACRb,WAAW,WAJb,UAME,gBAACJ,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVT,WAAW,SACXa,QAAQ,WAJV,UAME,eAAC,KAAD,CAAcwhC,MAAO,CAAEkG,YAAa,EAAGvb,MAAO/qB,EAAM+pC,QAAQC,KAAK,QACjE,eAACpD,EAAA,EAAD,CACEpmH,MAAOuuD,GACPuxD,SAAU,SAAC2rB,GACT,IAAMynT,EAAeznT,EAAMn6G,OAAOtxB,MAClCupG,KAAiBG,QAAQ,wBAAewpV,GACxC,IAAMC,EAAoC,OAAjBD,EAAwB,UAAY,SAC7DnoV,IAAmB9rE,kBAAgBm0Z,eAAgBjiY,EAAc,CAAEgiY,sBAGnE,IAAME,EAAc,IAAIj0Y,OAAJ,aAAiBwzY,GAAa7sa,KAAK,KAAnC,WAEpB,GADciN,OAAO+6B,SAAS0C,SAAS5d,MAAMwgZ,GAClC,CACT,IAAMC,EAAUtga,OAAO+6B,SAAS0C,SAASysB,QAAQm2W,EAAjC,WAAkDH,EAAlD,OAChBlga,OAAO+6B,SAAS2jE,KAAO4hU,EAAUtga,OAAO+6B,SAASw0I,OAASvvK,OAAO+6B,SAASvjD,UAE1EwoB,OAAO+6B,SAASojG,UAftB,SAmBGyhS,GAAatlb,KAAI,SAAC4lb,GAAD,OAChB,eAACryU,EAAA,EAAD,CAEE7gH,MAAOkzb,EAFT,SAIG7ia,EAAE,oBAAD,OAAqB6ia,KAHlBA,WASXyO,IACE,sBAAKjkX,UAAWF,GAAQojX,uBAAxB,SACE,eAACryU,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sCAAlB,SACE,eAACytF,EAAA,EAAD,CACEvT,MAAM,UACN7sB,UAAWF,GAAQqjX,YACnB13U,QAhIO,WAC/BokB,YAAW,CACTjf,SAAUzxF,sBACVoS,WACA8e,SAAUwzY,GAHZh0T,MA4HsB,SAKGl9G,EAAE,2CAWrB,gBAAC8sD,EAAA,EAAD,CACEK,QAAS,CACPU,KAAMV,GAAQsjX,aAEhB9iX,UAAU,SACVc,KAAK,SACLhB,WAAW,EACXI,MAAM,EACNU,QAAS,EARX,UAUE,gBAAC,SAAD,WAEIgjX,IACE,eAAC,QAAD,CAAOvzU,KAAMh7F,cAAaqzG,OAAQ,WAChC,OAAO,uCACL,gBAACvpD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNE,QAAQ,gBACRb,WAAW,SAJb,UAME,eAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,sBAGHw1B,IACE,eAAC+rE,EAAA,EAAD,CACEF,KAAK,IACLvI,QAAS,kBAAMn2F,OAAO+6B,SAAS2jE,KAAO1+F,OAAO+6B,SAAS3uC,OAAS2T,4BAAoB,KAFrF,SAIG1C,EAAE,qCAKX,gBAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,UAIIojX,EACI,eAACxjV,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,QAFR,SAIGl6E,EAAE,8BAEL,KAEN,eAACytF,EAAA,EAAD,CACEE,QAAQ,YADV,SAGGgkV,cAOb,eAAC,QAAD,CAAOt7T,OAAQ,WACb,OAAO,uCACL,gBAACvpD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNE,QAAQ,gBACRb,WAAW,SAJb,UAME,eAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,qBAGHw1B,IACE,eAAC+rE,EAAA,EAAD,CACEF,KAAK,IACLvI,QAAS,kBAAMn2F,OAAO+6B,SAAS2jE,KAAO1+F,OAAO+6B,SAAS3uC,OAAS2T,4BAAoB,KAFrF,SAIG1C,EAAE,qCAKX,gBAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,UAIIojX,EACI,eAACxjV,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,QAFR,SAIGl6E,EAAE,8BAEL,KAEN,eAACytF,EAAA,EAAD,CACEE,QAAQ,YADV,SAGGgkV,iBAOTJ,IACE,eAACzkX,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,eAACo4O,EAAA,EAAD,CACE94O,QAAS,CACP3hE,KAAM2hE,GAAQ2gC,WAEhBn+G,MAAO8hc,GACPvrI,eAAe,UACfC,UAAU,UACV,aAAW,QACXx4M,QAAQ,YARV,SAWIu7C,GAAKjsJ,KAAI,SAACo6J,GACR,OAAO,eAAC+uJ,EAAA,EAAD,CAELrxR,MAAOsiI,EAAItiI,MACXG,GAAImiI,EAAIm6R,UACR14U,QAAS,kBAAMl6E,EAASv+B,YAAKg3J,EAAIr5C,SAH5Bq5C,EAAIr5C,aAWvB,eAAClxC,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EAFR,SAIE,gBAAC,SAAD,WACI0jX,IAAc,eAAC,QAAD,CAAOvzU,KAAMh7F,cAAauqD,UAAW6kX,MACrD,eAAC,QAAD,CAAO7kX,UAAW8kX,mBAQ1Bf,IACE,eAAC,IAAD,CACEn7T,YAAa,CACX3pG,uBAFJ,SAKG,SAAC8pG,GACA,IAAMg8T,GAAoE,IAA5DpB,EAAUl5b,IAAI,YAAYyc,QAAQ+X,uBAEhD,OAAO,eAAC+la,EAAA,EAAD,2BACCj8T,GADD,IAEH13B,KAAM0zV,EACNl9B,OAAQ,SAACo9B,GACP,IAAMv0U,EAAWzxF,sBACjB,OAAO0wG,YAAW,CAChBjf,WACAr/E,WACA8e,SAAUwzY,GAHLh0T,CAIJs1T,oB,qPC9hBvB,SAASC,EAAWryY,GAClB,MAA8B,MAAvBA,EAASm8F,OAAO,GAIzB,SAASm2S,EAAUlmb,EAAMpc,GACvB,IAAK,IAAI6G,EAAI7G,EAAOgE,EAAI6C,EAAI,EAAGoD,EAAImS,EAAK1W,OAAQ1B,EAAIiG,EAAGpD,GAAK,EAAG7C,GAAK,EAClEoY,EAAKvV,GAAKuV,EAAKpY,GAGjBoY,EAAKlM,MA2DQqyb,MAvDf,SAAyBzvb,GACvB,IAAID,EAAOtL,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE3Ei7b,EAAU1vb,GAAMA,EAAG8vC,MAAM,MAAQ,GACjC6/Y,EAAY5vb,GAAQA,EAAK+vC,MAAM,MAAQ,GAEvC8/Y,EAAU5vb,GAAMuvb,EAAWvvb,GAC3B6vb,EAAY9vb,GAAQwvb,EAAWxvb,GAC/B+vb,EAAaF,GAAWC,EAW5B,GATI7vb,GAAMuvb,EAAWvvb,GAEnB2vb,EAAYD,EACHA,EAAQ98b,SAEjB+8b,EAAUvyb,MACVuyb,EAAYA,EAAUtzb,OAAOqzb,KAG1BC,EAAU/8b,OAAQ,MAAO,IAE9B,IAAIm9b,OAAmB,EACvB,GAAIJ,EAAU/8b,OAAQ,CACpB,IAAImiB,EAAO46a,EAAUA,EAAU/8b,OAAS,GACxCm9b,EAA4B,MAATh7a,GAAyB,OAATA,GAA0B,KAATA,OAEpDg7a,GAAmB,EAIrB,IADA,IAAIziX,EAAK,EACAv5E,EAAI47b,EAAU/8b,OAAQmB,GAAK,EAAGA,IAAK,CAC1C,IAAI4lJ,EAAOg2S,EAAU57b,GAER,MAAT4lJ,EACF61S,EAAUG,EAAW57b,GACH,OAAT4lJ,GACT61S,EAAUG,EAAW57b,GACrBu5E,KACSA,IACTkiX,EAAUG,EAAW57b,GACrBu5E,KAIJ,IAAKwiX,EAAY,KAAOxiX,IAAMA,EAC5BqiX,EAAUvlb,QAAQ,OACf0lb,GAA+B,KAAjBH,EAAU,IAAeA,EAAU,IAAOJ,EAAWI,EAAU,KAAMA,EAAUvlb,QAAQ,IAE1G,IAAIzF,EAASgrb,EAAUn9a,KAAK,KAI5B,OAFIu9a,GAA0C,MAAtBprb,EAAO+6G,QAAQ,KAAY/6G,GAAU,KAEtDA,GClEL2mC,EAA4B,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAwB,SAAUmH,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAqCvPm4b,MAnCf,SAASA,EAAWt5b,EAAGC,GACrB,GAAID,IAAMC,EAAG,OAAO,EAEpB,GAAS,MAALD,GAAkB,MAALC,EAAW,OAAO,EAEnC,GAAInE,MAAMC,QAAQiE,GAChB,OAAOlE,MAAMC,QAAQkE,IAAMD,EAAE9D,SAAW+D,EAAE/D,QAAU8D,EAAE4H,OAAM,SAAUqsE,EAAMz9E,GAC1E,OAAO8ic,EAAWrlX,EAAMh0E,EAAEzJ,OAI9B,IAAI+ic,EAAqB,qBAANv5b,EAAoB,YAAc40C,EAAQ50C,GAG7D,GAAIu5b,KAFqB,qBAANt5b,EAAoB,YAAc20C,EAAQ30C,IAExC,OAAO,EAE5B,GAAc,WAAVs5b,EAAoB,CACtB,IAAItzN,EAASjmO,EAAEF,UACX05b,EAASv5b,EAAEH,UAEf,GAAImmO,IAAWjmO,GAAKw5b,IAAWv5b,EAAG,OAAOq5b,EAAWrzN,EAAQuzN,GAE5D,IAAIC,EAAQhhc,OAAO0D,KAAK6D,GACpB05b,EAAQjhc,OAAO0D,KAAK8D,GAExB,OAAIw5b,EAAMv9b,SAAWw9b,EAAMx9b,QAEpBu9b,EAAM7xb,OAAM,SAAUjJ,GAC3B,OAAO26b,EAAWt5b,EAAErB,GAAMsB,EAAEtB,OAIhC,OAAO,G,SC5BT,SAASqwQ,EAAgB5qJ,GACvB,MAA0B,MAAnBA,EAAKu+B,OAAO,GAAav+B,EAAO,IAAMA,EAE/C,SAASu1U,EAAkBv1U,GACzB,MAA0B,MAAnBA,EAAKu+B,OAAO,GAAav+B,EAAK4E,OAAO,GAAK5E,EAKnD,SAAS6qJ,EAAc7qJ,EAAMpsE,GAC3B,OAJF,SAAqBosE,EAAMpsE,GACzB,OAAO,IAAI7C,OAAO,IAAM6C,EAAS,gBAAiB,KAAK5C,KAAKgvE,GAGrDw1U,CAAYx1U,EAAMpsE,GAAUosE,EAAK4E,OAAOhxE,EAAO97C,QAAUkoH,EAElE,SAASy1U,EAAmBz1U,GAC1B,MAAwC,MAAjCA,EAAKu+B,OAAOv+B,EAAKloH,OAAS,GAAakoH,EAAKj6G,MAAM,GAAI,GAAKi6G,EA0BpE,SAASgrJ,EAAWtrN,GAClB,IAAI0C,EAAW1C,EAAS0C,SACpB8xI,EAASx0I,EAASw0I,OAClB/3L,EAAOujD,EAASvjD,KAChB6jH,EAAO59D,GAAY,IAGvB,OAFI8xI,GAAqB,MAAXA,IAAgBl0E,GAA6B,MAArBk0E,EAAO31C,OAAO,GAAa21C,EAAS,IAAMA,GAC5E/3L,GAAiB,MAATA,IAAc6jH,GAA2B,MAAnB7jH,EAAKoiJ,OAAO,GAAapiJ,EAAO,IAAMA,GACjE6jH,EAGT,SAAS+pJ,EAAe/pJ,EAAM/iF,EAAO1iC,EAAKm7b,GACxC,IAAIh2Y,EAEgB,kBAATsgE,GAETtgE,EAvCJ,SAAmBsgE,GACjB,IAAI59D,EAAW49D,GAAQ,IACnBk0E,EAAS,GACT/3L,EAAO,GACPw5b,EAAYvzY,EAAS3rC,QAAQ,MAEd,IAAfk/a,IACFx5b,EAAOimD,EAASwiE,OAAO+wU,GACvBvzY,EAAWA,EAASwiE,OAAO,EAAG+wU,IAGhC,IAAIC,EAAcxzY,EAAS3rC,QAAQ,KAOnC,OALqB,IAAjBm/a,IACF1hQ,EAAS9xI,EAASwiE,OAAOgxU,GACzBxzY,EAAWA,EAASwiE,OAAO,EAAGgxU,IAGzB,CACLxzY,SAAUA,EACV8xI,OAAmB,MAAXA,EAAiB,GAAKA,EAC9B/3L,KAAe,MAATA,EAAe,GAAKA,GAkBf05b,CAAU71U,GACrBtgE,EAASziB,MAAQA,SAISlrC,KAD1B2tD,EAAW3f,YAAS,GAAIigF,IACX59D,WAAwB1C,EAAS0C,SAAW,IAErD1C,EAASw0I,OACuB,MAA9Bx0I,EAASw0I,OAAO31C,OAAO,KAAY7+F,EAASw0I,OAAS,IAAMx0I,EAASw0I,QAExEx0I,EAASw0I,OAAS,GAGhBx0I,EAASvjD,KACqB,MAA5BujD,EAASvjD,KAAKoiJ,OAAO,KAAY7+F,EAASvjD,KAAO,IAAMujD,EAASvjD,MAEpEujD,EAASvjD,KAAO,QAGJpK,IAAVkrC,QAA0ClrC,IAAnB2tD,EAASziB,QAAqByiB,EAASziB,MAAQA,IAG5E,IACEyiB,EAAS0C,SAAW0zY,UAAUp2Y,EAAS0C,UACvC,MAAO/jD,GACP,MAAIA,aAAa03b,SACT,IAAIA,SAAS,aAAer2Y,EAAS0C,SAAxB,iFAEb/jD,EAoBV,OAhBI9D,IAAKmlD,EAASnlD,IAAMA,GAEpBm7b,EAEGh2Y,EAAS0C,SAE6B,MAAhC1C,EAAS0C,SAASm8F,OAAO,KAClC7+F,EAAS0C,SAAWuyY,EAAgBj1Y,EAAS0C,SAAUszY,EAAgBtzY,WAFvE1C,EAAS0C,SAAWszY,EAAgBtzY,SAMjC1C,EAAS0C,WACZ1C,EAAS0C,SAAW,KAIjB1C,EAET,SAASuqN,EAAkBruQ,EAAGC,GAC5B,OAAOD,EAAEwmD,WAAavmD,EAAEumD,UAAYxmD,EAAEs4L,SAAWr4L,EAAEq4L,QAAUt4L,EAAEO,OAASN,EAAEM,MAAQP,EAAErB,MAAQsB,EAAEtB,KAAO26b,EAAWt5b,EAAEqhC,MAAOphC,EAAEohC,OAG7H,SAAS+4Z,IACP,IAAIC,EAAS,KAiCb,IAAI/6Z,EAAY,GA4BhB,MAAO,CACLg7Z,UA5DF,SAAmBC,GAGjB,OADAF,EAASE,EACF,WACDF,IAAWE,IAAYF,EAAS,QAyDtCG,oBArDF,SAA6B12Y,EAAUv+B,EAAQk1a,EAAqBx7Z,GAIlE,GAAc,MAAVo7Z,EAAgB,CAClB,IAAIpsb,EAA2B,oBAAXosb,EAAwBA,EAAOv2Y,EAAUv+B,GAAU80a,EAEjD,kBAAXpsb,EAC0B,oBAAxBwsb,EACTA,EAAoBxsb,EAAQgxB,GAG5BA,GAAS,GAIXA,GAAoB,IAAXhxB,QAGXgxB,GAAS,IAmCXy7Z,eA7BF,SAAwBx9b,GACtB,IAAI6uS,GAAW,EAEf,SAAS1sQ,IACH0sQ,GAAU7uS,EAAGoF,WAAM,EAAQvE,WAIjC,OADAuhC,EAAU74B,KAAK44B,GACR,WACL0sQ,GAAW,EACXzsQ,EAAYA,EAAU15B,QAAO,SAAUquE,GACrC,OAAOA,IAAS50C,OAmBpBs7Z,gBAdF,WACE,IAAK,IAAIv1a,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzBga,EAAUv4B,SAAQ,SAAUs4B,GAC1B,OAAOA,EAAS/8B,WAAM,EAAQ+iB,QAYpC,IAAIs0U,IAAiC,qBAAX5wU,SAA0BA,OAAOsX,WAAYtX,OAAOsX,SAASC,eACvF,SAASs6Z,EAAgBlvZ,EAASzM,GAChCA,EAASlW,OAAO8xa,QAAQnvZ,IAwC1B,IAAIovZ,EAAgB,WAChBC,EAAkB,aAEtB,SAASC,IACP,IACE,OAAOjya,OAAO4hG,QAAQtpF,OAAS,GAC/B,MAAO5+B,GAGP,MAAO,IASX,SAASw4b,EAAqB12Z,QACd,IAAVA,IACFA,EAAQ,IAGTo1T,GAAsGrxV,aAAU,GACjH,IAAI4yb,EAAgBnya,OAAO4hG,QACvBwwU,EAvDN,WACE,IAAIC,EAAKrya,OAAOsiL,UAAUG,UAC1B,QAAmC,IAA9B4vP,EAAGvgb,QAAQ,gBAAuD,IAA/Bugb,EAAGvgb,QAAQ,iBAA2D,IAAjCugb,EAAGvgb,QAAQ,mBAAqD,IAA1Bugb,EAAGvgb,QAAQ,YAAqD,IAAjCugb,EAAGvgb,QAAQ,mBACtJkO,OAAO4hG,SAAW,cAAe5hG,OAAO4hG,QAoD3B0wU,GAChBC,KA7CsD,IAAnDvya,OAAOsiL,UAAUG,UAAU3wL,QAAQ,YA8CtCirG,EAASvhF,EACTg3Z,EAAsBz1U,EAAOhhB,aAC7BA,OAAuC,IAAxBy2V,GAAyCA,EACxDC,EAAwB11U,EAAO20U,oBAC/BA,OAAgD,IAA1Be,EAAmCZ,EAAkBY,EAC3EC,EAAmB31U,EAAO41U,UAC1BA,OAAiC,IAArBD,EAA8B,EAAIA,EAC9CvsL,EAAW3qO,EAAM2qO,SAAW2qL,EAAmB7qL,EAAgBzqO,EAAM2qO,WAAa,GAEtF,SAASysL,EAAeC,GACtB,IAAIl7Z,EAAOk7Z,GAAgB,GACvBj9b,EAAM+hC,EAAK/hC,IACX0iC,EAAQX,EAAKW,MAEbw6Z,EAAmB9ya,OAAO+6B,SAI1BsgE,EAHWy3U,EAAiBr1Y,SACnBq1Y,EAAiBvjQ,OACnBujQ,EAAiBt7b,KAI5B,OADI2uQ,IAAU9qJ,EAAO6qJ,EAAc7qJ,EAAM8qJ,IAClCf,EAAe/pJ,EAAM/iF,EAAO1iC,GAGrC,SAASm9b,IACP,OAAO1kc,KAAKy1E,SAASvxE,SAAS,IAAI0tH,OAAO,EAAG0yU,GAG9C,IAAIK,EAAoB3B,IAExB,SAASn9U,EAASn4F,GAChBqf,YAASwmF,EAAS7lG,GAElB6lG,EAAQzuH,OAASg/b,EAAch/b,OAC/B6/b,EAAkBpB,gBAAgBhwU,EAAQ7mE,SAAU6mE,EAAQplG,QAG9D,SAASy2a,EAAex6T,IApE1B,SAAmCA,QACjBrrI,IAAhBqrI,EAAMngG,OAAuBgqK,UAAUG,UAAU3wL,QAAQ,UAqEnDohb,CAA0Bz6T,IAC9B06T,EAAUP,EAAen6T,EAAMngG,QAGjC,SAAS86Z,IACPD,EAAUP,EAAeX,MAG3B,IAAIoB,GAAe,EAEnB,SAASF,EAAUp4Y,GACjB,GAAIs4Y,EACFA,GAAe,EACfn/U,QACK,CAEL8+U,EAAkBvB,oBAAoB12Y,EADzB,MAC2C22Y,GAAqB,SAAUh4V,GACjFA,EACFwa,EAAS,CACP13F,OAJO,MAKPu+B,SAAUA,IASpB,SAAmBu4Y,GACjB,IAAIC,EAAa3xU,EAAQ7mE,SAIrBy4Y,EAAUC,EAAQ3hb,QAAQyhb,EAAW39b,MACxB,IAAb49b,IAAgBA,EAAU,GAC9B,IAAItwR,EAAYuwR,EAAQ3hb,QAAQwhb,EAAa19b,MAC1B,IAAfstK,IAAkBA,EAAY,GAClC,IAAIm8K,EAAQm0G,EAAUtwR,EAElBm8K,IACFg0G,GAAe,EACfjsL,EAAGi4E,IAnBCq0G,CAAU34Y,OAuBlB,IAAI44Y,EAAkBf,EAAeX,KACjCwB,EAAU,CAACE,EAAgB/9b,KAE/B,SAASuxQ,EAAWpsN,GAClB,OAAOorN,EAAWE,EAAWtrN,GAuE/B,SAASqsN,EAAG1vQ,GACVy6b,EAAc/qL,GAAG1vQ,GAWnB,IAAIk8b,EAAgB,EAEpB,SAASC,EAAkBx0G,GAGH,KAFtBu0G,GAAiBv0G,IAEoB,IAAVA,GACzBr/T,OAAOs6E,iBAAiBy3V,EAAekB,GACnCV,GAAyBvya,OAAOs6E,iBAAiB03V,EAAiBoB,IAC3C,IAAlBQ,IACT5za,OAAOu6E,oBAAoBw3V,EAAekB,GACtCV,GAAyBvya,OAAOu6E,oBAAoBy3V,EAAiBoB,IAI7E,IAAIU,GAAY,EAiChB,IAAIlyU,EAAU,CACZzuH,OAAQg/b,EAAch/b,OACtBqpB,OAAQ,MACRu+B,SAAU44Y,EACVxsL,WAAYA,EACZzpQ,KApIF,SAAc29G,EAAM/iF,GAElB,IAAI9b,EAAS,OACTu+B,EAAWqqN,EAAe/pJ,EAAM/iF,EAAOy6Z,IAAanxU,EAAQ7mE,UAChEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACrF,GAAKA,EAAL,CACA,IAAIglB,EAAOyoJ,EAAWpsN,GAClBnlD,EAAMmlD,EAASnlD,IACf0iC,EAAQyiB,EAASziB,MAErB,GAAI85Z,EAMF,GALAD,EAAc/oP,UAAU,CACtBxzM,IAAKA,EACL0iC,MAAOA,GACN,KAAMomF,GAEL3iB,EACF/7E,OAAO+6B,SAAS2jE,KAAOA,MAClB,CACL,IAAIq1U,EAAYN,EAAQ3hb,QAAQ8vG,EAAQ7mE,SAASnlD,KAC7Co+b,EAAWP,EAAQryb,MAAM,GAAkB,IAAf2yb,EAAmB,EAAIA,EAAY,GACnEC,EAASt2b,KAAKq9C,EAASnlD,KACvB69b,EAAUO,EACV9/U,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,SAKd/6B,OAAO+6B,SAAS2jE,KAAOA,OAuG3Bx0C,QAlGF,SAAiBmxC,EAAM/iF,GAErB,IAAI9b,EAAS,UACTu+B,EAAWqqN,EAAe/pJ,EAAM/iF,EAAOy6Z,IAAanxU,EAAQ7mE,UAChEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACrF,GAAKA,EAAL,CACA,IAAIglB,EAAOyoJ,EAAWpsN,GAClBnlD,EAAMmlD,EAASnlD,IACf0iC,EAAQyiB,EAASziB,MAErB,GAAI85Z,EAMF,GALAD,EAAcnP,aAAa,CACzBptb,IAAKA,EACL0iC,MAAOA,GACN,KAAMomF,GAEL3iB,EACF/7E,OAAO+6B,SAASmvB,QAAQw0C,OACnB,CACL,IAAIq1U,EAAYN,EAAQ3hb,QAAQ8vG,EAAQ7mE,SAASnlD,MAC9B,IAAfm+b,IAAkBN,EAAQM,GAAah5Y,EAASnlD,KACpDs+G,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,SAKd/6B,OAAO+6B,SAASmvB,QAAQw0C,QAuE5B0oJ,GAAIA,EACJC,OA/DF,WACED,GAAI,IA+DJE,UA5DF,WACEF,EAAG,IA4DHxC,MAzCF,SAAe0sL,QACE,IAAXA,IACFA,GAAS,GAGX,IAAI2C,EAAUjB,EAAkBzB,UAAUD,GAO1C,OALKwC,IACHD,EAAkB,GAClBC,GAAY,GAGP,WAML,OALIA,IACFA,GAAY,EACZD,GAAmB,IAGdI,MAwBT/xU,OApBF,SAAgB5rF,GACd,IAAI2rF,EAAW+wU,EAAkBrB,eAAer7Z,GAEhD,OADAu9Z,EAAkB,GACX,WACLA,GAAmB,GACnB5xU,OAiBJ,OAAOL,EAGT,IAAIsyU,EAAoB,aACpBC,EAAiB,CACnBC,SAAU,CACRC,WAAY,SAAoBh5U,GAC9B,MAA0B,MAAnBA,EAAKu+B,OAAO,GAAav+B,EAAO,KAAOu1U,EAAkBv1U,IAElEi5U,WAAY,SAAoBj5U,GAC9B,MAA0B,MAAnBA,EAAKu+B,OAAO,GAAav+B,EAAK4E,OAAO,GAAK5E,IAGrDk5U,QAAS,CACPF,WAAYzD,EACZ0D,WAAYruL,GAEduuL,MAAO,CACLH,WAAYpuL,EACZquL,WAAYruL,IAIhB,SAASwuL,IAGP,IAAI/1U,EAAO1+F,OAAO+6B,SAAS2jE,KACvBsyU,EAAYtyU,EAAK5sG,QAAQ,KAC7B,OAAsB,IAAfk/a,EAAmB,GAAKtyU,EAAK36C,UAAUitX,EAAY,GAO5D,SAAS0D,EAAgBr5U,GACvB,IAAI21U,EAAYhxa,OAAO+6B,SAAS2jE,KAAK5sG,QAAQ,KAC7CkO,OAAO+6B,SAASmvB,QAAQlqD,OAAO+6B,SAAS2jE,KAAKt9G,MAAM,EAAG4vb,GAAa,EAAIA,EAAY,GAAK,IAAM31U,GAGhG,SAASs5U,EAAkBn5Z,QACX,IAAVA,IACFA,EAAQ,IAGTo1T,GAAmGrxV,aAAU,GAC9G,IAAI4yb,EAAgBnya,OAAO4hG,QAEvB7E,GA/TG/8F,OAAOsiL,UAAUG,UAAU3wL,QAAQ,WA+T7B0pB,GACTi3Z,EAAwB11U,EAAO20U,oBAC/BA,OAAgD,IAA1Be,EAAmCZ,EAAkBY,EAC3EmC,EAAkB73U,EAAO83U,SACzBA,OAA+B,IAApBD,EAA6B,QAAUA,EAClDzuL,EAAW3qO,EAAM2qO,SAAW2qL,EAAmB7qL,EAAgBzqO,EAAM2qO,WAAa,GAClF2uL,EAAwBX,EAAeU,GACvCR,EAAaS,EAAsBT,WACnCC,EAAaQ,EAAsBR,WAEvC,SAAS1B,IACP,IAAIv3U,EAAOi5U,EAAWG,KAGtB,OADItuL,IAAU9qJ,EAAO6qJ,EAAc7qJ,EAAM8qJ,IAClCf,EAAe/pJ,GAGxB,IAAI23U,EAAoB3B,IAExB,SAASn9U,EAASn4F,GAChBqf,YAASwmF,EAAS7lG,GAElB6lG,EAAQzuH,OAASg/b,EAAch/b,OAC/B6/b,EAAkBpB,gBAAgBhwU,EAAQ7mE,SAAU6mE,EAAQplG,QAG9D,IAAI62a,GAAe,EACf0B,EAAa,KAEjB,SAAS3B,IACP,IAAI/3U,EAAOo5U,IACPO,EAAcX,EAAWh5U,GAE7B,GAAIA,IAAS25U,EAEXN,EAAgBM,OACX,CACL,IAAIj6Y,EAAW63Y,IACXvtL,EAAezjJ,EAAQ7mE,SAC3B,IAAKs4Y,GAAgB/tL,EAAkBD,EAActqN,GAAW,OAEhE,GAAIg6Y,IAAe1uL,EAAWtrN,GAAW,OAEzCg6Y,EAAa,KAKjB,SAAmBh6Y,GACjB,GAAIs4Y,EACFA,GAAe,EACfn/U,QACK,CACL,IAAI13F,EAAS,MACbw2a,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACjFA,EACFwa,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,IASpB,SAAmBu4Y,GACjB,IAAIC,EAAa3xU,EAAQ7mE,SAIrBy4Y,EAAUyB,EAASjjb,YAAYq0P,EAAWktL,KAC7B,IAAbC,IAAgBA,EAAU,GAC9B,IAAItwR,EAAY+xR,EAASjjb,YAAYq0P,EAAWitL,KAC7B,IAAfpwR,IAAkBA,EAAY,GAClC,IAAIm8K,EAAQm0G,EAAUtwR,EAElBm8K,IACFg0G,GAAe,EACfjsL,EAAGi4E,IAnBCq0G,CAAU34Y,OAjBdo4Y,CAAUp4Y,IAyCd,IAAIsgE,EAAOo5U,IACPO,EAAcX,EAAWh5U,GACzBA,IAAS25U,GAAaN,EAAgBM,GAC1C,IAAIrB,EAAkBf,IAClBqC,EAAW,CAAC5uL,EAAWstL,IAgE3B,SAASvsL,EAAG1vQ,GAEVy6b,EAAc/qL,GAAG1vQ,GAWnB,IAAIk8b,EAAgB,EAEpB,SAASC,EAAkBx0G,GAGH,KAFtBu0G,GAAiBv0G,IAEoB,IAAVA,EACzBr/T,OAAOs6E,iBAAiB45V,EAAmBd,GAChB,IAAlBQ,GACT5za,OAAOu6E,oBAAoB25V,EAAmBd,GAIlD,IAAIU,GAAY,EAiChB,IAAIlyU,EAAU,CACZzuH,OAAQg/b,EAAch/b,OACtBqpB,OAAQ,MACRu+B,SAAU44Y,EACVxsL,WA5HF,SAAoBpsN,GAClB,MAAO,IAAMs5Y,EAAWluL,EAAWE,EAAWtrN,KA4H9Cr9C,KAzHF,SAAc29G,EAAM/iF,GAElB,IAAI9b,EAAS,OACTu+B,EAAWqqN,EAAe/pJ,OAAMjuH,OAAWA,EAAWw0H,EAAQ7mE,UAClEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACrF,GAAKA,EAAL,CACA,IAAI2hB,EAAOgrJ,EAAWtrN,GAClBi6Y,EAAcX,EAAWluL,EAAW9qJ,GAGxC,GAFkBo5U,MAAkBO,EAEnB,CAIfD,EAAa15U,EA9HrB,SAAsBA,GACpBr7F,OAAO+6B,SAASvjD,KAAO6jH,EA8HjB65U,CAAaF,GACb,IAAIjB,EAAYkB,EAASjjb,YAAYq0P,EAAWzkJ,EAAQ7mE,WACpDo6Y,EAAYF,EAAS7zb,MAAM,GAAkB,IAAf2yb,EAAmB,EAAIA,EAAY,GACrEoB,EAAUz3b,KAAK29G,GACf45U,EAAWE,EACXjhV,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,SAIZm5D,SAgGJhqC,QA3FF,SAAiBmxC,EAAM/iF,GAErB,IAAI9b,EAAS,UACTu+B,EAAWqqN,EAAe/pJ,OAAMjuH,OAAWA,EAAWw0H,EAAQ7mE,UAClEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACrF,GAAKA,EAAL,CACA,IAAI2hB,EAAOgrJ,EAAWtrN,GAClBi6Y,EAAcX,EAAWluL,EAAW9qJ,GACtBo5U,MAAkBO,IAMlCD,EAAa15U,EACbq5U,EAAgBM,IAGlB,IAAIjB,EAAYkB,EAASnjb,QAAQu0P,EAAWzkJ,EAAQ7mE,YACjC,IAAfg5Y,IAAkBkB,EAASlB,GAAa14U,GAC5CnH,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,SAsEdqsN,GAAIA,EACJC,OA7DF,WACED,GAAI,IA6DJE,UA1DF,WACEF,EAAG,IA0DHxC,MAzCF,SAAe0sL,QACE,IAAXA,IACFA,GAAS,GAGX,IAAI2C,EAAUjB,EAAkBzB,UAAUD,GAO1C,OALKwC,IACHD,EAAkB,GAClBC,GAAY,GAGP,WAML,OALIA,IACFA,GAAY,EACZD,GAAmB,IAGdI,MAwBT/xU,OApBF,SAAgB5rF,GACd,IAAI2rF,EAAW+wU,EAAkBrB,eAAer7Z,GAEhD,OADAu9Z,EAAkB,GACX,WACLA,GAAmB,GACnB5xU,OAiBJ,OAAOL,EAGT,SAASyX,EAAM3hI,EAAGi5R,EAAYC,GAC5B,OAAOviS,KAAKE,IAAIF,KAAKC,IAAIoJ,EAAGi5R,GAAaC,GAO3C,SAASzsB,EAAoB3oO,QACb,IAAVA,IACFA,EAAQ,IAGV,IAAIuhF,EAASvhF,EACTk2Z,EAAsB30U,EAAO20U,oBAC7B0D,EAAwBr4U,EAAOs4U,eAC/BA,OAA2C,IAA1BD,EAAmC,CAAC,KAAOA,EAC5DE,EAAsBv4U,EAAOw4U,aAC7BA,OAAuC,IAAxBD,EAAiC,EAAIA,EACpD5C,EAAmB31U,EAAO41U,UAC1BA,OAAiC,IAArBD,EAA8B,EAAIA,EAC9CM,EAAoB3B,IAExB,SAASn9U,EAASn4F,GAChBqf,YAASwmF,EAAS7lG,GAElB6lG,EAAQzuH,OAASyuH,EAAQ3mH,QAAQ9H,OACjC6/b,EAAkBpB,gBAAgBhwU,EAAQ7mE,SAAU6mE,EAAQplG,QAG9D,SAASu2a,IACP,OAAO1kc,KAAKy1E,SAASvxE,SAAS,IAAI0tH,OAAO,EAAG0yU,GAG9C,IAAIllc,EAAQ4rI,EAAMk8T,EAAc,EAAGF,EAAelic,OAAS,GACvD8H,EAAUo6b,EAAe/6b,KAAI,SAAU/F,GACzC,OAAmC6wQ,EAAe7wQ,OAAOnH,EAAjC,kBAAVmH,EAAsDw+b,IAAgDx+b,EAAMqB,KAAOm9b,QAG/H5rL,EAAad,EAyCjB,SAASe,EAAG1vQ,GACV,IAAI89b,EAAYn8T,EAAMzX,EAAQn0H,MAAQiK,EAAG,EAAGkqH,EAAQ3mH,QAAQ9H,OAAS,GAEjE4nD,EAAW6mE,EAAQ3mH,QAAQu6b,GAC/BxC,EAAkBvB,oBAAoB12Y,EAFzB,MAE2C22Y,GAAqB,SAAUh4V,GACjFA,EACFwa,EAAS,CACP13F,OALO,MAMPu+B,SAAUA,EACVttD,MAAO+nc,IAKTthV,OA8BN,IAAI0N,EAAU,CACZzuH,OAAQ8H,EAAQ9H,OAChBqpB,OAAQ,MACRu+B,SAAU9/C,EAAQxN,GAClBA,MAAOA,EACPwN,QAASA,EACTksQ,WAAYA,EACZzpQ,KA1FF,SAAc29G,EAAM/iF,GAElB,IAAI9b,EAAS,OACTu+B,EAAWqqN,EAAe/pJ,EAAM/iF,EAAOy6Z,IAAanxU,EAAQ7mE,UAChEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GACrF,GAAKA,EAAL,CACA,IACI87V,EADY5zU,EAAQn0H,MACI,EACxBgoc,EAAc7zU,EAAQ3mH,QAAQmG,MAAM,GAEpCq0b,EAAYtic,OAASqic,EACvBC,EAAY/0b,OAAO80b,EAAWC,EAAYtic,OAASqic,EAAWz6Y,GAE9D06Y,EAAY/3b,KAAKq9C,GAGnBm5D,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,EACVttD,MAAO+nc,EACPv6b,QAASw6b,SAuEbvrX,QAlEF,SAAiBmxC,EAAM/iF,GAErB,IAAI9b,EAAS,UACTu+B,EAAWqqN,EAAe/pJ,EAAM/iF,EAAOy6Z,IAAanxU,EAAQ7mE,UAChEi4Y,EAAkBvB,oBAAoB12Y,EAAUv+B,EAAQk1a,GAAqB,SAAUh4V,GAChFA,IACLkoB,EAAQ3mH,QAAQ2mH,EAAQn0H,OAASstD,EACjCm5D,EAAS,CACP13F,OAAQA,EACRu+B,SAAUA,SA0DdqsN,GAAIA,EACJC,OAnCF,WACED,GAAI,IAmCJE,UAhCF,WACEF,EAAG,IAgCHsuL,MA7BF,SAAeh+b,GACb,IAAI89b,EAAY5zU,EAAQn0H,MAAQiK,EAChC,OAAO89b,GAAa,GAAKA,EAAY5zU,EAAQ3mH,QAAQ9H,QA4BrDyxQ,MAzBF,SAAe0sL,GAKb,YAJe,IAAXA,IACFA,GAAS,GAGJ0B,EAAkBzB,UAAUD,IAqBnCpvU,OAlBF,SAAgB5rF,GACd,OAAO08Z,EAAkBrB,eAAer7Z,KAmB1C,OAAOsrF,I,6BCp4BT,2CA0BM+zU,EAAmB,CACvBC,aArBmB,SAACC,GACpB,OACE,cAAC,IAAD,UACE,8BADF,UAAmBA,KAoBrBC,YAdkB,SAACxpZ,EAAMupZ,GACzB,OACE,cAAC,IAAD,CAA6B14U,KAAM7wE,GAAnC,UAAkBupZ,KAapBE,YATkB,SAACx4Y,EAAMs4Y,GACzB,OACE,cAAC,IAAD,CAA6B14U,KAAM04M,YAAWt4Q,IAA9C,UAAkBs4Y,MASPF,O,6BC/Bf,mf,gZCEe1gV,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,2DACD,e,sdCYS4+b,GAAgC,gCAmBvCl1U,GAAYJ,cAAW,SAACl0C,GAAD,OAAkB2zL,aAAa,OAkJ7C55L,qBACb91B,YAAgB,gBAChB0/D,mBAfsB,SAAC73E,GACvB,MAAO,CACLm9N,aAAc3oI,aAA+BkpU,GAA/BlpU,CAA8Dx0F,GAC5Em0E,WAAYC,wBAAcupV,GAAdvpV,CAAuCp0E,OAI5B,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,EA/I+D,SAAA/qC,GAC5E,IACES,EAUET,EAVFS,SACA5e,EASEme,EATFne,EACA4+E,EAQEzgE,EARFygE,KACA4lB,EAOErmF,EAPFqmF,QACAq0U,EAME16Z,EANF06Z,kBACAC,EAKE36Z,EALF26Z,mBACAC,EAIE56Z,EAJF46Z,wBACAC,EAGE76Z,EAHF66Z,WACA5gM,EAEEj6N,EAFFi6N,aACAhpJ,EACEjxE,EADFixE,WAKF,GAFgBqU,KACFkP,eACsBj6F,YAAe,IAAnD,oBAAOuga,EAAP,KAAmBC,EAAnB,KACA,EAA0Cxga,YAAe,GAAzD,oBAAOyga,EAAP,KAAsBC,EAAtB,KACQC,EAAwEjhM,EAAxEihM,gBAAiBC,EAAuDlhM,EAAvDkhM,mBAAoBC,EAAmCnhM,EAAnCmhM,cAAeC,EAAoBphM,EAApBohM,gBAE5D9ga,aAAgB,WACVkmE,GAAQ26V,GACVL,GAAc,GAEZt6V,GAAQ46V,GACVJ,GAAiB,KAElB,CAAChhM,IAyDJ,OACE,gBAAC6xD,GAAA,EAAD,CACErrN,KAAMA,EACN,kBAAgB,gCAFlB,UAII,eAACytU,GAAA,EAAD,CAAan3Y,GAAG,sCAAhB,SACGlV,EAAE,oDAEL,eAACkqS,GAAA,EAAD,UACE,eAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,SACE,gBAACJ,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAA7C,UACE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,YAApB,SAAiC3tF,EAAE,mDACnC,eAACytF,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAC2W,WAAY,GAApD,SAAyDlmG,EAAE,0CACxDq5a,GAAmBE,GAClB,eAACvtI,GAAA,EAAD,CACE9xN,MAAM,UACNshB,QAAS,eAAC6U,GAAA,EAAD,CAAUn2B,MAAM,YACzBnlE,MAAO/U,EAAE,+BACTiwG,QAASgpU,EACTxpV,SAAU,SAACpzG,EAAG6N,GAAJ,OAAYgvb,EAAchvb,MAGvCovb,IAAqC,OAAfE,QAAe,IAAfA,OAAA,EAAAA,EAAiBxpc,MAAO,GAC7C,eAACg8T,GAAA,EAAD,CACE9xN,MAAM,UACNshB,QAAS,eAAC6U,GAAA,EAAD,CAAUn2B,MAAM,YACzBnlE,MAAO/U,EAAE,kCACTiwG,QAASkpU,EACT1pV,SAAU,SAACpzG,EAAG6N,GAAJ,OAAYkvb,EAAiBlvb,aAMnD,eAACmgT,GAAA,EAAD,UACE,eAACzxM,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAvFQ,WAChB,GAAIugV,GAAmBE,EACrB,GAAIN,EACFD,EAAWO,GACX36Z,EAASu/B,YAAOy6X,GAAyB,WAAY,SAChD,CACL,IAAMa,EAAsBX,EAAmBjkb,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAcgkb,EAAkBhkb,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACjJmkb,EAAWS,GAGf,GAAIH,IAAqC,OAAfE,QAAe,IAAfA,OAAA,EAAAA,EAAiBxpc,MAAO,EAChD,GAAImpc,EAAe,CACjB,IAAMO,EAAmBtqV,EAAWv6F,MAAM,CAAC,OAAQ,WAAahO,gBAC1D8yb,EAAmBD,EAAiBz0b,eAAc,SAAAywQ,GACtDs9H,IAAmBryY,SAAQ,SAAAu9C,GACzB,IAAM07Y,EAAY17Y,EAAOvuD,MACrB6pc,EAAgBxhc,IAAI4hc,GACtBlkL,EAAIvxQ,MAAM,CAACy1b,EAAW,yBAA0BJ,EAAgBxhc,IAAI4hc,IAC3DF,EAAiB7kb,MAAM,CAAC+kb,EAAW,2BAC5ClkL,EAAIpxQ,SAAS,CAACs1b,EAAW,6BAG7BlkL,EAAIj5J,OAAO,4BAEb79E,EAASu/B,YAAOy6X,GAAyB,aAAce,QAClD,CACL,IACMA,GADmBvqV,EAAWv6F,MAAM,CAAC,OAAQ,WAAahO,iBACtB5B,eAAc,SAAAywQ,GACtDs9H,IAAmBryY,SAAQ,SAAAu9C,GACzB,IAAM07Y,EAAY17Y,EAAOvuD,MACnBkqc,EAAqBzqV,EAAWv6F,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,wBAAyB,WAC5FE,EAAoBf,EAAwB/gc,IAAI4hc,KAA2BC,EAC3EE,EAAmBjB,EAAmBjkb,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,2BAA6Bf,EAAkBhkb,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,0BAC7JE,IACEC,GACFrkL,EAAIvxQ,MAAM,CAACy1b,EAAW,yBAA0BG,GAChDrkL,EAAIj5J,OAAO,2BAEXi5J,EAAIpxQ,SAAS,CAACs1b,EAAW,0BACzBlkL,EAAIj5J,OAAO,iCAKnB79E,EAASu/B,YAAOy6X,GAAyB,aAAce,IAhD3Dn1U,GAAQ,GACR5lF,EAAS,IAAI4J,IAA+B,CAAErK,MAAO,GAAIjJ,GAAIyja,OAwFvD,SAIG34a,EAAE,iC,6ECrFF44a,GAA0B,uBAE1BoB,GAAa,SAAC,GAAgL,IAA9KC,EAA6K,EAA7KA,gBAAiBvgF,EAA4J,EAA5JA,gBAAiBwgF,EAA2I,EAA3IA,YAAaC,EAA8H,EAA9HA,gBAC1E,SAAIF,GAAmBvgF,GAAmBwgF,MAGrCD,GAAoBvgF,IAAmBygF,IAejC76C,GAAqB,SAAC86C,EAAmCC,EAA8B7zI,GAClG,IAAM8zI,EAAcD,EAAexlb,MAAM,CAAC,QAAS,YAAajV,QAAO,SAACutI,EAAKg0F,EAAU2hL,GACrF,OAAO3hL,EAASnpO,IAAIwuT,KAAe4zI,EAAgBvlb,MAAM,CAAC,QAAS,UAAWiuY,EAAat8F,IAAcr5K,EAAI9sI,KAAJ,UAAYyiZ,EAAZ,cAA6B3hL,EAASnpO,IAAIwuT,KAAgBr5K,IAClKjhI,kBACH,OAAOoub,EAAYtqc,KAAOsqc,EAAY5kb,KAAK,MAAQ,MAG/C6kb,GAAYl9a,iBAAO,CAAE4V,IAAK,GAAIC,IAAK,KAC5BwsX,GAAyB,SAAC06C,EAAmCC,EAA8BG,EAA4BC,GAAmC,IAAD,EAC9JC,EAAe,UAAIL,EAAexlb,MAAM,CAAC,YAAa2lb,KAAcD,UAArD,aAAG,EAA8D36b,QAAO,SAACutI,EAAKg0F,EAAU2hL,GAC3G,IAAMh/Y,EAAWq9N,EAASnpO,IAAIyic,IAAY7kc,OAAOurO,EAASnpO,IAAIyic,IAE9D,OAAO32b,KADes2b,EAAgBvlb,MAAM,CAAC,YAAa2lb,EAAU13C,EAAa23C,KAAa7kc,OAAOwkc,EAAgBvlb,MAAM,CAAC,YAAa2lb,EAAU13C,EAAa23C,MAC5HttT,EAAI9sI,KAAJ,UAAYyiZ,EAAZ,qBAA6Bh/Y,QAA7B,IAA6BA,IAAY,OAAUqpI,IACtFjhI,kBACH,OAAOwub,EAAgB1qc,KAAO0qc,EAAgBhlb,KAAK,MAAQ,MAGhDqqY,GAA8B,SAACq6C,EAAmCC,GAC7E,IAAMM,EAAyBP,EAAgBpic,IAAI,kBAC7C4ic,EAAwBP,EAAeric,IAAI,kBAC3C6ic,EAAU,CAAC,UAAW,WAAY,QAAQj7b,QAAO,SAACutI,EAAK50I,GAC3D,OAAIqK,KAAKC,UAAL,OAAe+3b,QAAf,IAAeA,OAAf,EAAeA,EAAuB5ic,IAAIO,MAAUqK,KAAKC,UAAL,OAAe83b,QAAf,IAAeA,OAAf,EAAeA,EAAwB3ic,IAAIO,IAC1F40I,EAAI9sI,KAAJ,UAAY9H,EAAZ,cAAqBqK,KAAKC,UAAL,OAAe+3b,QAAf,IAAeA,OAAf,EAAeA,EAAuB5ic,IAAIO,KAAS,OAE1E40I,IACNjhI,kBACH,OAAO2ub,EAAQ7qc,KAAO6qc,EAAQnlb,KAAK,MAAQ,MAGhColb,GAA2B,SAAC7vU,EAA2B8vU,GAClE,QAAO/nD,IAAmBp9X,MAAK,SAAAsoC,GAAM,OAAI+sE,EAAQp2G,MAAM,CAAC,OAAQ,QAASqpC,EAAOvuD,MAAO,wBAAyBorc,QAG5GC,GAAsC,SAACC,EAAkCC,GAAnC,MAA8E,CACxHhma,GAAI+la,EAAgBjjc,IAAI,MACxBO,IAAK0ic,EAAgBjjc,IAAI,OACzByK,KAAMw4b,EAAgBjjc,IAAI,QAC1Bmjc,SAAUD,EAAqBljc,IAAI,MACnC48H,YAAasmU,EAAqBljc,IAAI,eACtC6tN,KAAMq1O,EAAqBljc,IAAI,QAC/BrI,MAAOurc,EAAqBljc,IAAI,SAChCqnX,UAAW67E,EAAqBljc,IAAI,aACpC65C,OAAQqpZ,EAAqBljc,IAAI,UACjC0hG,OAAQwhW,EAAqBljc,IAAI,YA4C7Bojc,G,kDAIJ,WAAYj9Z,GAAkC,IAAD,8BAC3C,cAAMA,IAHDk9Z,iBAAsD3ia,cAEhB,EAetCusO,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAAwE,EAAK/mO,MAArES,EAAR,EAAQA,SAAUwwE,EAAlB,EAAkBA,WAAYypV,EAA9B,EAA8BA,kBAAmBC,EAAjD,EAAiDA,mBAEjD,QAA6B/oc,IAAzBuiH,EAAUlD,YAA4BA,IAEnCypV,EAAkB7gc,IAAI,mBAAqB8gc,EAAmB9gc,IAAI,aAAgB6gc,EAAkB7gc,IAAI,mBAAmB,CAC9H,IAAMsjc,EAA2BlsV,EAAWp3G,IAAI,cAChD4mC,EAAS,IAAIq0C,IAAwC,CAACygD,OAAQmlU,EAAmByC,8BACjF,EAAKC,yBAIT,GAAInsV,GAAckD,EAAUlD,YAAcA,EAAWp3G,IAAI,gBAAkBs6G,EAAUlD,WAAWp3G,IAAI,cAAe,CACjH,IAAMsjc,EAA2BlsV,EAAWp3G,IAAI,cAChD4mC,EAAS,IAAIq0C,IAAwC,CAACygD,OAAQmlU,EAAmByC,8BACjF,EAAKC,2BA9BoC,EAkCtC7yB,oBAAsB,SAACp2T,EAAW4yJ,GACvC,IAAQ91J,EAAe,EAAKjxE,MAApBixE,WACF74E,EAAO64E,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACnE0hB,IAAS,EAAK0E,MAAMuga,YACtB,EAAK3kV,SAAS,CAAEg5M,QAASt5R,EAAMila,YAAY,KAtCF,EA0CtCr2L,qBAAuB,WAC5B,IAAOvmO,EAAY,EAAKT,MAAjBS,SAEPA,EAAS,IAAIm0C,KAAqC,CAAC0oX,gBAAiB,QACpE78Z,EAAS,IAAI+zC,KAAqC,CAAC+oX,mBAAoB,QACvE98Z,EAAS,IAAIi0C,MAA8B,KA/CA,EAkDtC8oX,8BAAgC,YAAiE,IAA/DtC,EAA8D,EAA9DA,gBAAiBC,EAA6C,EAA7CA,mBAAoBsC,EAAyB,EAAzBA,oBAC5E,EAAwE,EAAKz9Z,MAArE06Z,EAAR,EAAQA,kBAAmBC,EAA3B,EAA2BA,mBAAoB1pV,EAA/C,EAA+CA,WAAYxwE,EAA3D,EAA2DA,SACnDm6Z,EAA4B,EAAK99Z,MAAjC89Z,wBAEFQ,EAAa,OAAGqC,QAAH,IAAGA,OAAH,EAAGA,EAAqB5jc,IAAI,2BAE/C,GAAIqhc,IAAoBE,EAAe,CACrC,IAAME,EAAsBX,EAAmBjkb,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAcgkb,EAAkBhkb,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACjJ,EAAKgiG,SAAS,CAAEg5M,QAAS4pI,GAAuB,KAGlD,IAAMD,EAAe,OAAGoC,QAAH,IAAGA,OAAH,EAAGA,EAAqB5jc,IAAI,mCACjD,GAAIshc,MAAuC,OAAfE,QAAe,IAAfA,OAAA,EAAAA,EAAiBxpc,MAAO,GAAI,CAEtD,IACM2pc,EADmBvqV,EAAWv6F,MAAM,CAAC,OAAQ,UACT5P,eAAc,SAAAywQ,GACtDs9H,IAAmBryY,SAAQ,SAAAu9C,GACzB,IAAM07Y,EAAY17Y,EAAOvuD,MACnBkqc,EAAqBzqV,EAAWv6F,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,wBAAyB,WAC5FE,EAAoBf,EAAwB/gc,IAAI4hc,KAA2BC,EAC3EE,EAAmBjB,EAAmBjkb,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,2BAA6Bf,EAAkBhkb,MAAM,CAAC,OAAQ,QAAS+kb,EAAW,0BAC7JE,IACEC,GACFrkL,EAAIvxQ,MAAM,CAACy1b,EAAW,yBAA0BG,GAChDrkL,EAAIj5J,OAAO,2BAEXi5J,EAAIpxQ,SAAS,CAACs1b,EAAW,0BACzBlkL,EAAIj5J,OAAO,iCAKnB79E,EAASu/B,YAAOy6X,GAAyB,aAAce,KAEpDN,GAAmBE,GAAmBD,IAAqC,OAAfE,QAAe,IAAfA,OAAA,EAAAA,EAAiBxpc,MAAO,KACvF4uC,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyja,GACJx6Z,MAAO,CACLk7Z,kBACAC,qBACAC,gBACAC,sBAGJ,EAAK3iV,SAAS,CAAEglV,gCAAgC,MA9FP,EAkGtCN,uBAAyB,WAAO,IAAD,IACpC,EAII,EAAKp9Z,MAHPS,EADF,EACEA,SACAi6Z,EAFF,EAEEA,kBACAzpV,EAHF,EAGEA,WAGI0sV,EAAsB,UAAGjD,EAAkBhkb,MAAM,CAAC,sBAA5B,aAAG,EAAyCrV,QAAO,SAACmmN,GAAD,OAAgBA,EAAU3tN,IAAI,kBACvG+jc,EAAuB3sV,EAAWp3G,IAAI,cAEtCgkc,EAAc,OAAGF,QAAH,IAAGA,GAAH,UAAGA,EAAwBllc,kBAA3B,aAAG,EAAoC8K,MAAM,SAAAxK,GAC/D,IAAMkI,EAASlI,EAAM,GAAGc,IAAI,UACtBikc,EAA2B,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAsB/jc,IAAId,EAAM,IAEpE,GAAIA,EAAM,GAAGc,IAAI,YAAyC,WAA3Bd,EAAM,GAAGc,IAAI,UAC1C,GAAId,EAAM,GAAGc,IAAI,YAAa,CAC5B,KAAI,OAACikc,QAAD,IAACA,OAAD,EAACA,EAA6B5yb,SAChC,OAAO,EAEP,IAAM6yb,EAAqB98b,EAAOI,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,aAAyBiF,KAAI,SAACtN,GAAD,OAAWA,EAAMqI,IAAI,SAChH,IAAKikc,EAA4Bv6b,MAAK,SAACwzB,GAAD,OAAQgna,EAAmB1+b,SAAS03B,MACxE,OAAO,MAGN,CAAC,IAAD,EAIL,IACK+ma,GAC8F,aAA3F,UAAA78b,EAAOwW,MAAK,SAACjmB,GAAD,OAAWA,EAAMqI,IAAI,QAAUikc,YAA3C,eAAyEjkc,IAAI,WAEnF,OAAO,EAIb,OAAO,KAGT,EAAK6+G,SAAS,CAAEslV,iBAAkBH,IAAkB,WACgB,IAAD,EAA5DnD,EAAkB7gc,IAAI,mBAAsBgkc,GAC/Cp9Z,EAAS,IAAIu0C,IAA6B,CACxCugD,OAAQmlU,EACRyC,yBAAwB,OAAElsV,QAAF,IAAEA,OAAF,EAAEA,EAAYp3G,IAAI,cAC1Ck1H,UAAS,OAAE9d,QAAF,IAAEA,OAAF,EAAEA,EAAYp3G,IAAI,MAC3ByqZ,eAAc,iBAAErzS,QAAF,IAAEA,OAAF,EAAEA,EAAYp3G,IAAI,yBAAlB,QAAuC6gc,EAAkB7gc,IAAI,yBA/ItC,EAsJtCu4T,SAtJsC,uCAsJ3B,WAAOnxT,GAAP,+CAAAxF,EAAA,+DAWZ,EAAKukC,MATPS,EAFc,EAEdA,SACAs9D,EAHc,EAGdA,OACA06N,EAJc,EAIdA,aACAwlI,EALc,EAKdA,sBACAC,EANc,EAMdA,sBACAxD,EAPc,EAOdA,kBACApzO,EARc,EAQdA,WACAqzO,EATc,EASdA,mBACAh4Y,EAVc,EAUdA,cAVc,SAaSuwQ,YAAI,CAAEn1N,SAAQtK,MAAOxyF,EAAOpH,IAAI,cAbzC,OAaVs5T,EAbU,OAcVzB,EAAUh7S,gBAAMy8S,EAAY,CAAC,EAAG,MAAO,KAAO,EAAKr2R,MAAM40R,QAEzDysI,EAA4Bjqc,OAAOuL,QAAQ6nN,GAAYjmN,QAAQ,SAAAmmN,GACnE,MAA+B,YAAxBA,EAAU,GAAGjsH,UAEhB6iW,EAAqBlqc,OAAO4/Z,YAAYqqC,GAExCE,EAAep9b,EAAO6F,eAAc,SAAAywQ,GAAQ,IAAD,IAiC/C,GAhCIm6C,GACFn6C,EAAIvxQ,MAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW0rT,GAChDn6C,EAAIj5J,OAAO,YACX79E,EAAS,IAAI4K,MAEbksO,EAAIpxQ,SAAS,CAAC,OAAQ,SAAU,UAQlC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,WAExB,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,UAGM,KAA1BoxQ,EAAI19Q,IAAI,eACV09Q,EAAI/5Q,IAAI,aAAc,MAGD,KAAnB+5Q,EAAI19Q,IAAI,QACV09Q,EAAI/5Q,IAAI,MAAO,MAGM,KAAnB+5Q,EAAI19Q,IAAI,QACV09Q,EAAI/5Q,IAAI,MAAO,OAGZk9b,EAAkB7gc,IAAI,kBAAmB,CAC5C,IAAMklZ,EAAWxnI,EAAI19Q,IAAI,SACnBqoM,EAAQ68M,GAAYA,EAASj4Y,eAAc,SAAAmoT,GAC/CA,EAAOzsT,SAAQ,SAACw8Y,EAAgB/sZ,GAC9B+sZ,EAAex8Y,SAAQ,SAACy8Y,EAAUC,GAChCD,EAASz8Y,SAAQ,SAAC28Y,EAAaC,GAC7B,GAAoB,KAAhBD,EACF,OAAOlwF,EAAOjpT,MAAM,CAAC/T,EAAOitZ,EAAQE,GAAa,kBAMvDl9M,GACFq1E,EAAI/5Q,IAAI,QAAS0kM,GAIrB,IAAMo8P,EAAuB,GAC7Br9b,EAAOpH,IAAI,cAAcpB,WAAW+J,SAAQ,SAAAzJ,GAC1C,IAAM+jc,EAAkBpC,EAAkBhkb,MAAM,CAAC,aAAc3d,EAAM,KACrE,GAAI+jc,EAAgBjjc,IAAI,YACtBd,EAAM,GAAGyJ,SAAQ,SAAAw6b,GACf,IAAMD,EAAuBD,EAAgBjjc,IAAI,UAAU4d,MAAK,SAAAjmB,GAAK,OAAIA,EAAMqI,IAAI,QAAUmjc,GAAoC,YAAxBxrc,EAAMqI,IAAI,aAC/Gkjc,IACFuB,EAAqBvB,EAAqBljc,IAAI,QAAUgjc,GAAoCC,EAAiBC,YAIjH,GAAiB,OAAbhkc,EAAM,GAAa,CACrB,IAAMgkc,EAAuBD,EAAgBjjc,IAAI,UAAU4d,MAAK,SAAAjmB,GAAK,OAAIA,EAAMqI,IAAI,QAAUd,EAAM,IAA8B,YAAxBvH,EAAMqI,IAAI,aAC/Gkjc,IACFuB,EAAqBvlc,EAAM,IAAM8jc,GAAoCC,EAAiBC,QAK9FxlL,EAAI/5Q,IAAI,aAAc+I,gBAAM63b,EAAoBE,OAG9Cr9b,EAAOpH,IAAI,OACPujU,EAAY,WAChB7gO,KAAmB9rE,mBAAgB8ta,eAAgB57Y,EAAc,CAC/DktE,WAAY6qU,EAAkB7gc,IAAI,QAClC2kc,YAAaH,EAAaxkc,IAAI,QAC9Bk1H,UAAWsvU,EAAaxkc,IAAI,MAC5Bu/W,iBAAkBilF,EAAaxkc,IAAI,SACnC68B,aAAc2na,EAAaxkc,IAAI,gBAC/BsmZ,gBAAiBjhY,iBAAOm/a,EAAaxkc,IAAI,eAAewH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACrI4sc,uBAAwB9B,GAAyB0B,EAAc,UAC/DK,sBAAuB/B,GAAyB0B,EAAc,OAC9DM,qBAAsBN,EAAa3nb,MAAM,CAAC,OAAQ,SAAU,OAAQ,eAAiBikb,EAAmBjkb,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAe2nb,EAAa3nb,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAe,KACrNkob,sBAAuBP,EAAaxkc,IAAI,mBAAqB8gc,EAAmB9gc,IAAI,iBAAmBwkc,EAAaxkc,IAAI,iBAAmB,KAC3Iglc,mBAAoBR,EAAaxkc,IAAI,gBAAkB8gc,EAAmB9gc,IAAI,cAAgBwkc,EAAaxkc,IAAI,cAAgB,KAC/Hilc,YAAaT,EAAaxkc,IAAI,SAAW8gc,EAAmB9gc,IAAI,OAASwkc,EAAaxkc,IAAI,OAAS,KACnGklc,YAAaV,EAAaxkc,IAAI,SAAW8gc,EAAmB9gc,IAAI,OAASwkc,EAAaxkc,IAAI,OAAS,KACnGmlc,2BAA4BX,EAAaxkc,IAAI,iBAAmB8gc,EAAmB9gc,IAAI,eAAiBwkc,EAAaxkc,IAAI,eAAiB,KAC1IqnZ,kBAAmBC,GAAmBw5C,EAAoB0D,EAAc,QACxEj9C,kBAAmBD,GAAmBw5C,EAAoB0D,EAAc,QACxEh9C,kBAAmBF,GAAmBw5C,EAAoB0D,EAAc,YAG5EJ,EAAsBh9b,EAAOpH,IAAI,MAAOwkc,EAAahqb,OAAQ+oT,KAEvDA,EAAY,SAAC1zT,GACjB6yF,KAAmB9rE,mBAAgBwua,eAAgBt8Y,EAAc,CAC/DktE,WAAY6qU,EAAkB7gc,IAAI,QAClC2kc,YAAaH,EAAaxkc,IAAI,QAC9Bk1H,UAAWrlH,EAAO7P,IAAI,MACtBu/W,iBAAkBilF,EAAaxkc,IAAI,SACnC68B,aAAc2na,EAAaxkc,IAAI,gBAC/BsmZ,gBAAiBjhY,iBAAOm/a,EAAaxkc,IAAI,eAAewH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACrI4sc,uBAAwB9B,GAAyB0B,EAAc,UAC/DK,sBAAuB/B,GAAyB0B,EAAc,WAGlEH,EAAsBG,EAAcjhI,IAEtC3E,IApIgB,4CAtJ2B,wDA6RtC1G,YAAc,WACnB,MAA2B,EAAK/xR,MAAxBS,EAAR,EAAQA,SAAR,EAAkB8yE,KAClB9yE,EAAS,IAAI8K,KACb9K,EAASu/B,YAAOy6X,GAAyB,0BAA2B,KACpEh6Z,EAASu/B,YAAOy6X,GAAyB,WAAY,KACrD,EAAK/hV,SAAS,CAAEg5M,QAAS,MAlSkB,EAqStC6H,YAAc,WACnB,IAAQ7H,EAAY,EAAK50R,MAAjB40R,QACR,EAII,EAAK1xR,MAHPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAiiC,EAHF,EAGEA,WAGF,OACE,gBAACtiC,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVI,QAAQ,SAJV,UAME,eAACjB,EAAA,EAAD,CACEO,UAAWF,EAAQyxT,eADrB,SAGE,eAAC,QAAD,CACErxT,UAAWqqP,IACXn1T,KAAK,WACLwrG,SAAUimP,IACV/1T,MAAO,CACL25R,aAAcjI,EACd4lC,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,UAKhB,eAACnnR,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,UAEK8hP,GAAYzgN,GAAcA,EAAWp3G,IAAI,cAC1C,eAAC22H,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,EAAKo3M,YAAvC,SACE,eAAChyM,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,eAACq9a,EAAA,EAAD,CAAQjiV,SAAS,oBAzUc,EAkVtCkiV,aAAe,WACpB,MAII,EAAKn/Z,MAHPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACA0rX,EAHF,EAGEA,kBAGF,OACE,gBAAC/rX,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNY,KAAK,SAHP,UAMIoqX,EAAkB7gc,IAAI,kBAClB,eAAC,IAAD,CAAaojH,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OACjD,eAAC03U,EAAD,CAAaniV,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OAEvD,gBAAC/4C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,mCAEL,eAAC,QAAD,CACEvd,KAAK,eACL07B,MAAO,CACLyvE,WAAY,CACVj+G,MAAOkpc,EAAkB7gc,IAAI,iBAC7Bm5G,UAAU,EACVhkC,QAAS,CACP3hE,KAAM2hE,EAAQmwX,eAGlBzvV,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAzXwB,EAgYtCyvV,0BAA4B,SAAC5+V,GAClC,EAAKiY,SAAS,CAAE4mV,wBAAyB7+V,KAjYE,EAoYtC8+V,UAAY,WACjB,MAQI,EAAKv/Z,MAPPi3T,EADF,EACEA,oBACAp1U,EAFF,EAEEA,EACA4e,EAHF,EAGEA,SACAuuC,EAJF,EAIEA,QACA6pP,EALF,EAKEA,iBACA5nN,EANF,EAMEA,WACAkmP,EAPF,EAOEA,oBAGIqoG,EAAS,CACb,CACE5oa,MAAO/U,EAAE,8BACT49a,gBAAiB59a,EAAE,wCACnBvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJ6mI,eAAe,iBAAD,OAAmB7mI,EAAnB,yBACd8mI,eAAe,iBAAD,OAAmB9mI,EAAnB,mBACdrnU,MAAK,OAAEy/G,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,SAChE+mI,gBAAe,OAAE3uV,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,kBAAmB,SAC7FtP,WAAU,OAAEt4M,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,oBAEvE,CACEjiS,MAAO/U,EAAE,8BACT49a,gBAAiB59a,EAAE,wCACnBvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJ6mI,eAAe,iBAAD,OAAmB7mI,EAAnB,yBACd8mI,eAAe,iBAAD,OAAmB9mI,EAAnB,mBACdrnU,MAAK,OAAEy/G,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,SAChE+mI,gBAAe,OAAE3uV,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,kBAAmB,SAC7FtP,WAAU,OAAEt4M,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,oBAEvE,CACEjiS,MAAO/U,EAAE,yBACT49a,gBAAiB59a,EAAE,mCACnBvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJ6mI,eAAe,iBAAD,OAAmB7mI,EAAnB,yBACd8mI,eAAe,iBAAD,OAAmB9mI,EAAnB,mBACdrnU,MAAK,OAAEy/G,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,SAChE+mI,gBAAe,OAAE3uV,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,kBAAmB,SAC7FtP,WAAU,OAAEt4M,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,qBAInE49B,EAAQxlP,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,UAC9EgnI,EAAkB5uV,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,kBAAmB,UAC3G0iD,EAAkBtqQ,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,oBAE9F,OACE,gBAAClqP,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMY,KAAK,SAAxC,UACE,eAAC,KAAD,CAAiB2sC,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OACrD,gBAAC/4C,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAAEhgC,MAAO,OAAQ+3C,aAAc,IAAtF,SACGtnG,EAAE,gCAEL,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACovX,EAAA,EAAD,CACEjnI,iBAAkBA,EAClBo+B,oBAAqBA,EACrBl5O,YAAa,CACXpO,WAAW,OAIjB,gBAAChhC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAE//B,OAAQ,YAAlG,UACE,gBAAC1C,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXP,WAAW,SAHb,UAKE,eAACgxC,EAAA,EAAD,CAASC,MAAQm3O,EAAsB,GAAKt1U,EAAE,mCAA9C,SACE,gCACE,eAAC,QAAD,CACEvd,KAAqB,wBAAoBu0T,EAAnC0iD,EAAe,mCACrBnsS,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAyB/U,EAAlB05V,EAAoB,4CAAiD,yCAC5E9rQ,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,EACX7lP,SAAU,SAACpzG,GACT,IAAMyH,EAAWzH,EAAE4kB,OAAOgvG,QACrBypP,GAAmBskF,IAAoBl6b,IAC1C86B,EAASu/B,YAAOy6X,GAAD,wBAA2C5hI,EAA3C,qBAA+E,IAC9Fp4R,EAASu/B,YAAOy6X,GAAD,wBAA2C5hI,EAA3C,iCAAqFgnI,QAArF,IAAqFA,OACpGp/Z,EAASu/B,YAAOy6X,GAAD,wBAA2C5hI,EAA3C,UAAqElzT,cAQlG,eAACo6G,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oDAAlB,SACE,eAAC,KAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,YAAa,EAAG7C,OAAQ,kBAG9E,eAAC4E,EAAA,EAAD,CAASC,MAAQm3O,EAAsB,GAAKt1U,EAAE,mCAA9C,SACE,uBAAMuvF,MAAO,CAAEmb,WAAY,UAA3B,SACE,eAAC,QAAD,CACEjoH,KAAI,wBAAmBu0T,EAAnB,oBACJzpP,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,2CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,aAQrBqoG,EAAO1gc,KAAI,SAACojM,EAAOjwM,GAAR,OACT,gBAAC08E,EAAA,EAAD,CAAkBW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAApF,UACE,gBAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAtC,SACGmmG,EAAMqnH,WAAarnH,EAAMtrK,MAAQsrK,EAAMu9P,kBAEzCv9P,EAAM59L,KAAKjF,SAAS,SAAWw8b,GAAW,CAAEC,gBAAiB55P,EAAMqnH,WAAYgyD,kBAAiBwgF,YAAatlG,EAAOulG,gBAAiB6D,IACpI,eAACvwV,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAYsrB,OAAQ,OAAjF,SACG66E,EAAMqnH,WAAarnH,EAAMtrK,MAAQsrK,EAAMu9P,kBAE1C,eAAC1/U,EAAA,EAAD,CAASC,MAAQm3O,EAAsB,GAAKt1U,EAAE,mCAA9C,SACE,gCACE,eAAC,QAAD,CACEvd,KAAM49L,EAAMqnH,WAAarnH,EAAM59L,KAAO49L,EAAMw9P,eAC5C1/Z,MAAO,CACL8gF,YAAaohF,EAAMqnH,WAAarnH,EAAMtrK,MAAQsrK,EAAMu9P,gBACpD/vV,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,SACNg9G,UAAWmkP,EACX7lP,SAAU,SAACpzG,GACT,IAC6D,EADvDyH,EAAWzH,EAAE4kB,OAAOtxB,MACrB0wM,EAAMqnH,YAAcrnH,EAAM09P,kBAAoBj6b,IACjD86B,EAASu/B,YAAOy6X,GAAyBv4P,EAAMy9P,gBAAgB,IAC/Dl/Z,EAASu/B,YAAOy6X,GAAyBv4P,EAAMw9P,eAAhC,UAAgDx9P,EAAM09P,uBAAtD,QAAyE,OACxFn/Z,EAASu/B,YAAOy6X,GAAyBv4P,EAAM59L,KAAMqB,QAK7DypE,UAAWwgC,aAMrB,eAACmQ,EAAA,EAAD,CAASC,MAAQm3O,EAAsB,GAAKt1U,EAAE,mCAA9C,SACE,gCACE,eAAC,QAAD,CACEvd,KAAM49L,EAAMy9P,eACZvwX,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,+CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,YA9CZllW,aAvfsB,EAmjBtC0nY,YAAc,WACnB,MAMI,EAAK35V,MALPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACA0rX,EAHF,EAGEA,kBACAC,EAJF,EAIEA,mBACAoF,EALF,EAKEA,uBAGAC,EACE,EAAKlja,MADPkja,aAGI5yO,EAAiBstO,EAAkB7gc,IAAI,kBACvC4qP,EAAUk2M,EAAmB9gc,IAAI,WAEvC,OACE,gBAAC80E,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNY,KAAK,SAHP,UAKE,eAAC2vX,GAAA,EAAD,CACEx/V,KAAM,EAAK3jE,MAAMwia,wBACjB7kU,QAAS,WACP9rF,YAAW,kBAAM,EAAKuuZ,iBAAiBt/Z,QAAQqiC,SAAQ,IACvD,EAAKo/X,2BAA0B,IAEjCryI,UAAW,WACT,EAAKqyI,2BAA0B,MAGnC,eAACa,EAAA,EAAD,CAAMjjV,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OAC1C,gBAAC/4C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,gBAACb,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,kCAEJ4iO,GAAWs7M,GAA0B,eAAChgV,EAAA,EAAD,CAASC,MAAOn+F,EAAE,gCAAlB,SAAmD,eAAC,KAAD,CAAUk6E,MAAM,QAAQ7sB,UAAWF,EAAQmxX,gBAEtI,eAAC,QAAD,CACE77b,KAAK,gBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,kCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACV4nN,SAAU,EAAK6lI,iBACfr+V,QAAS,WACHuuH,IAAmB4yO,IACrB,EAAKtnV,SAAS,CAAEsnV,cAAc,IAC9B,EAAKX,2BAA0B,OAKvCjwX,UAAWwgC,IACXE,SAAU,CAACmqF,OAEb,eAAC,QAAD,CACE31L,KAAK,aACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BACT6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,MAEb,eAAC,QAAD,CACEtrG,KAAK,MACL07B,MAAO,CACLpJ,MAAO/U,EAAE,wBACT6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,IACXE,SAAU,CAAC,EAAK0lN,oBAElB,eAAC,QAAD,CACElxT,KAAK,MACL07B,MAAO,CACLpJ,MAAO/U,EAAE,wBACT6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,IACXE,SAAU,CAAC,EAAK0lN,oBAElB,eAAC,QAAD,CACElxT,KAAK,cACL07B,MAAO,CACLpJ,MAAO/U,EAAE,uCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,IACXE,SAAU,CAACmqF,cA5pBwB,EAmqBtCn4J,QAAU,WACf,MAUI,EAAK9B,MATPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAgC,EAHF,EAGEA,MACA0pX,EAJF,EAIEA,kBACAC,EALF,EAKEA,mBACA1pV,EANF,EAMEA,WACAmvV,EAPF,EAOEA,kBACAC,EARF,EAQEA,sBACA5/Z,EATF,EASEA,SAGI6/Z,EAAkB5F,EAAkB7gc,IAAI,oBAAsB8gc,EAAmB9gc,IAAI,YAAeumc,EACpGt/N,EAAmB45N,EAAkB7gc,IAAI,cACzC0mc,EAAaz/N,EAAiBr/N,QAAO,SAACutI,EAAKw4E,EAA4BptN,GAAlC,OAAmDotN,EAAU3tN,IAAI,eAAiCm1I,EAAhBA,EAAI9sI,KAAK9H,KAAY2T,kBAE5Iyyb,EAAqB,OAAG7F,QAAH,IAAGA,OAAH,EAAGA,EAAoB9gc,IAAI,yBAEtD,OACE,gBAAC80E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,gBAACb,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXG,UAAWF,EAAQgxC,MAHrB,UAKE,eAAC,IAAD,CAAsB/C,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OAC1D,eAACpY,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,2CAGP,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EADb,SAIIixX,EAAWr1b,QACPq1b,EAAWzhc,KAAI,SAACy3G,EAAWkqV,GACzB,IAAMnqV,EAASwqH,EAAiBjnO,IAAI08G,GAC9BmqV,EAAwBzvV,GAAcA,EAAWv6F,MAAM,CAAC,aAAc4/F,EAAOz8G,IAAI,SACjF8mc,GAA0BrqV,EAAOz8G,IAAI,UAAU4d,MAAK,SAAAjmB,GAAK,MAA4B,WAAxBA,EAAMqI,IAAI,aACvE+mc,EAAqBN,IAAmBvyb,OAAKF,OAAO6yb,GAAwD,IAA/BA,EAAsB7uc,MAAcsB,QAAQutc,IACzHtkD,EAAqB9lS,EAAOz8G,IAAI,sBAChCugZ,EAAY9jS,EAAOz8G,IAAI,aACvBqhc,EAAkB5kV,EAAOz8G,IAAI,yCAC7Bshc,EAAqB7kV,EAAOz8G,IAAI,iDAEhCgnc,EAAoB,OAAGL,QAAH,IAAGA,OAAH,EAAGA,EAAuB3mc,IAAI08G,GACxD,OACE,gBAAC5nC,EAAA,EAAD,CAEEW,WAAW,EACXE,UAAU,SACVE,MAAM,EACNgB,GAAI0pU,EAAY,GAAK,EACrBlrU,UAAWF,EAAQsnC,OACnBhmC,KAAK,SAPP,UASE,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SAJb,UAME,eAACugC,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAOukW,EAAiB,gBAAkB,cAC1ClvV,MAAOuvV,EAAyB,CAAC5kW,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,gBAAkB,KAHzG,SAIEnjS,EAAOz8G,IAAI,SAAWy8G,EAAOz8G,IAAI,WAAa,KAAO,MACvD,eAAC4gH,EAAA,EAAD,CACEE,QAAS,WAEHrE,EAAOz8G,IAAI,YACb4mC,EAASu/B,YAAOy6X,GAAD,qBAAwCnkV,EAAOz8G,IAAI,QAAUkU,oBAE5E0yB,EAASu/B,YAAOy6X,GAAD,qBAAwCnkV,EAAOz8G,IAAI,QAAU,QAExEqhc,GAAmBC,IACrB,EAAKqC,8BAA8B,CAACtC,kBAAiBC,qBAAoBsC,oBAAqB,SAIpG1hW,MAAM,UACNqV,MAAO,CAACkG,YAAa,IACrBtE,SAAU4tV,EAfZ,SAiBG/+a,EAAE,+BAILu6X,GACE,eAAC9sS,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQgsU,uBAAwB5pS,MAAO,CAACkG,YAAa,IAAhG,SACGz1F,EAAE,yCAMPg/a,GACE,gBAAClyX,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAA5B,UACE,eAAC,KAAD,CAAapB,UAAWF,EAAQ8lT,cAChC,eAACxlR,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAEihB,WAAY,KAArD,SACGwuU,OAMT,eAAClyX,EAAA,EAAD,CACEW,WAAW,EACXE,UAAW4qU,EAAY,MAAQ,SAC/BhpS,MAAO,CAAC//B,OAAQ+oU,EAAYppU,EAAMZ,QAAQ,EAAE,GAAK,MAHnD,SAMEkmC,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOsvc,GAAgB,IAAD,EACxCC,EAAiCV,IAAyB,UAAAA,EAAsB3pb,MAAM,CAAC6/F,EAAW,kBAAxC,eAAoDz6F,WAAU,SAAAklb,GAAW,OAAIA,EAAYnnc,IAAI,QAAUrI,EAAMqI,IAAI,WAAU,EACrLonc,EAA+C,WAAxBzvc,EAAMqI,IAAI,UACjCqnc,EAAyB5qV,EAAOz8G,IAAI,UAAU4d,MAAK,SAAAwH,GAAM,MAA6B,YAAzBA,EAAOplB,IAAI,aACxEghZ,EAAWrpZ,EAAMqI,IAAI,UACLrI,EAAMqI,IAAI,2BACRrI,EAAMqI,IAAI,mCAElC,OAAQugZ,EACN,gBAACzrU,EAAA,EAAD,CAEEW,WAAW,EACXE,UAAU,SACVT,WAAW,SACXa,QAAQ,SACRF,MAAM,EACNgB,GAAI,EACJ0gC,MAAO,CAAEx/B,QAAS,GARpB,UAWI0kC,EAAOz8G,IAAI,YACP,eAAC,QAAD,CACEyK,KAAI,qBAAgBgyG,EAAOz8G,IAAI,QAC/Bu1E,UAAWszC,IACX1iF,MAAO,CACLmha,YAAa,eAAC,KAAD,CAAW/vV,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAAMgC,SAAU,YAC7EjK,SAAUstV,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EACjGtxV,WAAY,CACVvgC,UAAWF,EAAQoyX,YACnBhwV,MAAO,CACL0tP,WAAY4hG,GAAyBA,EAAsBjpb,MAAK,SAAA09T,GAAa,OAAIA,IAAkB3jV,EAAMqI,IAAI,SAAS,UAAY,WAGtI61G,iBAAkB,CAChB0B,MAAO,CACLuf,OAAQ+vU,GAAyBA,EAAsBjpb,MAAK,SAAA09T,GAAa,OAAIA,IAAkB3jV,EAAMqI,IAAI,SACzE,oBAApBonc,EACejwX,EAAM+pC,QAAQC,KAAK,KACnBhqC,EAAM+pC,QAAQE,QAAQ,MACjB,oBAApBgmV,EACejwX,EAAM+pC,QAAQC,KAAK,KACnBhqC,EAAM+pC,QAAQC,KAAK,QAGlDq7I,sBAAuB,CACrBz/N,MAAO,eAACmpF,EAAA,EAAD,CACGC,MACE,gBAACrxC,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6Ch+G,EAAMqI,IAAI,kBACrDghZ,GAAY,eAACvrS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,yCAC5Do/a,GAAwB,eAAC3xV,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,4CAL/E,SAQC,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQqyX,UAAzB,UAEGJ,GACC,sBAAK/xX,UAAWF,EAAQsyX,cAAxB,SACE,uBAAMtzL,GAAG,OAAOC,GAAG,OAAOC,GAAG,IAAIC,GAAG,IAAI/8J,MAAO,CAACy7J,OAAQ77L,EAAM+pC,QAAQC,KAAK,KAAM+xJ,YAAa,OAGjG8tI,EACC,eAACn+R,GAAA,EAAD,CACEJ,IAAKu+R,GAAY,GACjBl+R,YAAa,OACbC,aAAa,EACb0kP,OAAO,EACPlwP,MAAO,CAAC4R,QAASs9U,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EAAkC,GAAM,KAElJ,eAAC,KAAD,CACE7xX,UAAWF,EAAQuyX,YACnBnwV,MAAO,CACLrV,MAAOukW,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EAAkC/vX,EAAM+pC,QAAQC,KAAK,KAAOhqC,EAAM+pC,QAAQC,KAAK,aAM7L5J,MAAO,CACL//B,OAAQ,EACRD,MAAO,OACPi2C,OAAQ,OACRtU,SAAU,aAGdujJ,aAAc9kQ,EAAMqI,IAAI,MACxB8oH,YAAY,GAEd7S,SAAUwG,EAAOz8G,IAAI,YAAcqnc,EAAyBloQ,IAAmB,OAEjF,eAAC,QAAD,CACE10L,KAAI,qBAAgBgyG,EAAOz8G,IAAI,QAC/Bu1E,UAAW8iS,IACXlyU,MAAO,CACLsxE,SAAU,SAACpzG,GACTuiC,EAASu/B,YAAOy6X,GAAD,qBAAwCnkV,EAAOz8G,IAAI,QAAUrI,EAAMqI,IAAI,SAClFqhc,GAAmBC,IACrB,EAAKqC,8BAA8B,CAACtC,kBAAiBC,qBAAoBsC,oBAAqBjsc,KAGlG2vc,YAAa,eAAC,KAAD,CAAW/vV,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAAMgC,SAAU,YAC7EjK,SAAUstV,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EACjGtxV,WAAY,CACVvgC,UAAWF,EAAQoyX,YACnBhwV,MAAO,CACL0tP,WAAY4hG,IAA0Blvc,EAAMqI,IAAI,MAAQ,UAAY,WAGxE61G,iBAAkB,CAChB0B,MAAO,CACLuf,OAAQ+vU,IAA0Blvc,EAAMqI,IAAI,MACZ,oBAApBonc,EACejwX,EAAM+pC,QAAQC,KAAK,KACnBhqC,EAAM+pC,QAAQE,QAAQ,MACjB,oBAApBgmV,EACejwX,EAAM+pC,QAAQC,KAAK,KACnBhqC,EAAM+pC,QAAQC,KAAK,QAGlDq7I,sBAAuB,CACrBz/N,MAAO,eAACmpF,EAAA,EAAD,CACGC,MACE,gBAACrxC,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6Ch+G,EAAMqI,IAAI,kBACrDghZ,GAAY,eAACvrS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,yCAC5Do/a,GAAwB,eAAC3xV,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,4CAL/E,SAQC,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQqyX,UAAzB,UAEGJ,GACC,sBAAK/xX,UAAWF,EAAQsyX,cAAxB,SACE,uBAAMtzL,GAAG,OAAOC,GAAG,OAAOC,GAAG,IAAIC,GAAG,IAAI/8J,MAAO,CAACy7J,OAAQ77L,EAAM+pC,QAAQC,KAAK,KAAM+xJ,YAAa,OAGjG8tI,EACC,eAACn+R,GAAA,EAAD,CACEJ,IAAKu+R,GAAY,GACjBl+R,YAAa,OACbC,aAAa,EACb0kP,OAAO,EACPlwP,MAAO,CAAC4R,QAASs9U,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EAAkC,GAAM,KAElJ,eAAC,KAAD,CACE7xX,UAAWF,EAAQuyX,YACnBnwV,MAAO,CACLrV,MAAOukW,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EAAkC/vX,EAAM+pC,QAAQC,KAAK,KAAOhqC,EAAM+pC,QAAQC,KAAK,aAM7L5J,MAAO,CACL//B,OAAQ,EACRD,MAAO,OACPi2C,OAAQ,OACRtU,SAAU,aAGdo/P,oBAAqB,CACnB/gQ,MAAO,CACL2B,SAAU,WACVsX,OAAQ,SAGZisI,aAAc9kQ,EAAMqI,IAAI,MACxB8oH,WAAYm+U,IAAexqV,EAAOz8G,IAAI,UAAUqR,QAAU,GAE5D4kG,SAAUwG,EAAOz8G,IAAI,YAAcqnc,EAAyBpoQ,IAAW,OAG/E,eAACxpF,EAAA,EAAD,CACEvT,MAAM,cACN7sB,UAAW6tC,KAAW,eACnB/tC,EAAQmqU,cAAe,IAE1B/nS,MAAO,CACLrV,MAAOukW,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EAAkC/vX,EAAM+pC,QAAQC,KAAK,KAAO,KAC1Jy+R,mBAAoBwnD,EAAuB,eAAiB,KAC5D7vX,MAAO,OACP2xC,UAAW,SACX3Q,UAAW,IAVf,SAYE5gH,EAAMqI,IAAI,mBA5KPinc,GA8KP,eAACnyX,EAAA,EAAD,CAAuBO,UAAWF,EAAQgyX,YAA1C,SAEI1qV,EAAOz8G,IAAI,YACP,eAAC,QAAD,CACEyK,KAAI,qBAAgBgyG,EAAOz8G,IAAI,QAC/Bu1E,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAOplC,EAAMqI,IAAI,eACjBy8P,aAAc9kQ,EAAMqI,IAAI,MACxB8oH,WAAYm+U,IAAexqV,EAAOz8G,IAAI,UAAUqR,QAAU,EAC1DukG,WAAY,CACV1T,MAAO,UACPiX,SAAUstV,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,GAEnG1qM,sBAAuB,CACrBjlJ,MAAO,CACLrV,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1By+R,mBAAoBwnD,EAAuB,eAAiB,QAIlEnxV,SAAUwG,EAAOz8G,IAAI,YAAcqnc,EAAyBloQ,IAAmB,OAEjF,eAAC,QAAD,CACE10L,KAAI,qBAAgBgyG,EAAOz8G,IAAI,QAC/Bu1E,UAAW8iS,IACXlyU,MAAO,CACLsxE,SAAU,SAACpzG,GACTuiC,EAASu/B,YAAOy6X,GAAD,qBAAwCnkV,EAAOz8G,IAAI,QAAUrI,EAAMqI,IAAI,SAClFqhc,GAAmBC,IACrB,EAAKqC,8BAA8B,CAACtC,kBAAiBC,qBAAoBsC,oBAAqBjsc,KAGlGolC,MAAOplC,EAAMqI,IAAI,eACjBkiG,MAAO,UACPu6J,aAAc9kQ,EAAMqI,IAAI,MACxB8oH,WAAYm+U,IAAexqV,EAAOz8G,IAAI,UAAUqR,QAAU,EAC1D8nG,SAAUstV,GAAkBW,GAAyBvG,EAAkB7gc,IAAI,oBAAsBknc,EACjG1qM,sBAAuB,CACrBjlJ,MAAO,CACLrV,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1By+R,mBAAoBwnD,EAAuB,eAAiB,QAIlEnxV,SAAUwG,EAAOz8G,IAAI,YAAcqnc,EAAyBpoQ,IAAW,QA7CtEgoQ,UAxPZL,MAgTb,eAACnxV,EAAA,EAAD,CAAYpgC,UAAWF,EAAQwyX,mBAA/B,SACG3/a,EAAE,gDAxgC4B,EAghCtC4/a,YAAc,WACnB,MAGI,EAAKzha,MAFPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QAEM0lU,EAAqB,EAAK53W,MAA1B43W,iBAEFgtD,EAAe,SAAC74I,EAAqB52T,GACzC,IAAM0vc,EAAkB94I,EAAS+4I,WAAaC,KAAkBC,IAChE,OAAO,eAACH,EAAD,CAA6B7qM,SAAU2jM,GAAyB5xI,SAAUA,EAAU6rF,iBAAkBA,GAAhFziZ,IAGzB8vc,EAAoBlvc,KAAKqjB,KAAK8rb,IAAgBrqc,OAAS,GAE7D,OACE,gBAACg3E,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXG,UAAWF,EAAQgxC,MAHrB,UAKE,gBAACrxC,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRV,UAAWF,EAAQgxC,MACnB1vC,KAAK,SAJP,UAME,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXG,UAAWF,EAAQgxC,MAHrB,UAKE,eAACiiV,EAAA,EAAD,CAAYhlV,SAAS,QAAQ/tC,UAAWF,EAAQ04C,OAChD,eAACpY,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,oCAGP,eAACy1X,EAAA,EAAD,CACE5C,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuB,EAAKt8R,SAAS,CAAEg8R,iBAAkBM,UAGlF,gBAACrmU,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQkzX,eAA1C,UACE,eAAC5yV,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,4BAEL,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UACE,eAACjB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASY,QAAS,EAAGlB,UAAWF,EAAQ41P,cAArF,SACIu9H,IAAW9gc,QAAO,SAACwnT,GAAD,OAAeA,EAASu5I,sBAAoBtjc,KAAI,SAAC+pT,EAAqB52T,GACxF,IAAM0vc,EAAkB94I,EAAS+4I,WAAaC,KAAkBC,IAChE,OACE,eAACH,EAAD,CAEE7qM,SAAU2jM,GACV5xI,SAAUA,EACV6rF,iBAAkBA,EAClB2tD,wBAAwB,EACxBC,wBAAyB,EAAKxla,MAAM89Z,wBACpC2H,2BAA4B,SAACC,GAAD,OAA8B,EAAK9pV,SAAS,CAAEkiV,wBAAyB4H,MAN9Fvwc,QAYb,eAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASY,QAAS,EAAGlB,UAAWF,EAAQ41P,cAArF,SACI69H,IAAW3jc,IAAI4ic,WAIvB,gBAAC/yX,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQkzX,eAA1C,UACE,eAAC5yV,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,kCAEL,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UACE,eAACjB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASY,QAAS,EAAGlB,UAAWF,EAAQ41P,cAArF,SACIo9H,IAAgBp8b,MAAM,EAAGm8b,GAAmBjjc,IAAI4ic,KAEpD,eAAC/yX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASY,QAAS,EAAGlB,UAAWF,EAAQ41P,cAArF,SACIo9H,IAAgBp8b,MAAMm8b,GAAmBjjc,IAAI4ic,WAInD,EAAKgB,YAjmCgC,EAsmCtCA,MAAQ,WACb,IACE7gb,EACE,EAAKme,MADPne,EAEM6yX,EAAqB,EAAK53W,MAA1B43W,iBAER,OACE,gBAAC/lU,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,4BAGL,eAAC8sD,EAAA,EAAD,CAAMyiC,MAAO,CAAE//B,OAAQ,GAAvB,SAEIsxX,IAAS7jc,KAAI,SAAC8jc,EAAS3wc,GACrB,OACE,eAAC4wc,GAAA,EAAD,CAEE/rM,SAAU2jM,GACV5xI,SAAU+5I,EACVluD,iBAAkBA,GAHbziZ,YAvnCwB,EAooCtCujU,iBAAmB,SAAChkU,GAAD,OAAW6pM,YAAgB,GAAhBA,CAAoB7pM,IAloCvD,EAAKsrC,MAAQ,CACX40R,QAAS,GACT2rI,YAAY,EACZ52F,aAAa,EACb64F,yBAAyB,EACzBU,cAAc,EACdtrD,iBAAkB,KAClBspD,kBAAkB,EAClBpD,wBAAyBlyb,gBACzBg1b,gCAAgC,GAXS,E,0CAsoC7C,WAAiB,IAAD,OACd,EAeI5nc,KAAKkqC,MAdPgvC,EADF,EACEA,QACAmpP,EAFF,EAEEA,aACAM,EAHF,EAGEA,aACA2nI,EAJF,EAIEA,kBACA0C,EALF,EAKEA,mBACAnI,EANF,EAMEA,mBACAoI,EAPF,EAOEA,qBACArI,EARF,EAQEA,kBACA1pX,EATF,EASEA,MACAgyX,EAVF,EAUEA,sBACAC,EAXF,EAWEA,8BACAhyV,EAZF,EAYEA,WAEApvF,GAdF,EAaE4e,SAbF,EAcE5e,GAKIqhb,EAAqBJ,GAAsBA,EAAmBhkc,KAAI,SAAAguH,GAAO,OAAIA,EAAQjzH,IAAI,SAAOwH,QAAO,SAAAsM,GAAC,OAAIA,KAC5Gw1b,EAAkCD,GAAsBA,EAAmB7jc,SAAS0jc,GACpFK,EAA0BF,GAAsBA,EAAmB7hc,QAAO,SAAA01B,GAAE,OAAIA,IAAOgsa,KACvFM,EAA+BD,GAA2BA,EAAwBvxc,KAAO,EACzFyxc,EAAuBR,GAAkD,IAA5BA,EAAmBjxc,KAEhEu7N,EAAiBstO,EAAkB7gc,IAAI,kBAEvC0pc,EAAqB,OAAGtyV,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,cAAcwH,QAAQ,SAAA07Y,GAAI,MAAoB,kBAATA,IAAP,OAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAMlrZ,SACxG2xc,EAA6B,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAuBhgc,MAAK,SAAC/R,EAAO8rZ,GAAR,OAAoBo9C,EAAkBhkb,MAAM,CAAC,aAAc4mY,EAAS,0BAEtI,OACE,gBAAC3uU,EAAA,EAAD,CAAMO,UAAWF,EAAQy0X,gBAAzB,UACE,eAACpqI,GAAA,EAAD,CACEr5M,MAAO26U,EAAmB9gc,IAAI,MAAQgoB,EAAE,qCAAuCA,EAAE,uCACjFs0X,kBAAkB,EAClBn5Q,YAAa,kBAAMy7L,GAAa,MAElC,wBACErG,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAFrB,UAIE,gBAACoC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAME,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRf,aAAa,SACbyB,KAAK,SACLpB,UAAWF,EAAQ00X,gBALrB,UAOE,eAAC/0X,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ20X,YAArC,SACI7tc,KAAKyjU,gBAET,gBAAC5qP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACI15E,KAAKqpc,eACLrpc,KAAK6jY,cACL7jY,KAAKypc,kBAKTzpc,KAAKgsC,UAGLhsC,KAAK2rc,iBAET,gBAAC9yX,EAAA,EAAD,CACEyiC,MAAO,CACL2B,SAAU,SACVsX,OAAQ,EACRwG,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,MACjChtD,QAASZ,EAAMZ,QAAQ,EAAG,IAL9B,WASM6yX,IAAkCntc,KAAKgnC,MAAMkha,mBAAqBgF,GAA2B51O,GAAkBo2O,EAC7G,gBAAC70X,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAAC,KAAD,CAAaG,UAAWF,EAAQ8lT,YAAa1jR,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,GAAI+4C,aAAcn4C,EAAMZ,QAAQ,MAC/G,eAACk/B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAxC,SACG3tF,EAAE,wDAGP,KAEJu+a,GAAqB6C,EACnB,gBAACt0X,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAAC2oP,EAAA,EAAD,CAAkB7lU,KAAK,SAASu/G,MAAO,CAACkG,YAAa,KAAK,eAAChI,EAAA,EAAD,CAAYvT,MAAM,gBAAlB,SAAmCl6E,EAAE,yCAE/Fyhb,GAAwBl2O,GAAmBt3N,KAAKgnC,MAAMkha,iBACpD,gBAACrvX,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAAC,KAAD,CAAaG,UAAWF,EAAQ8lT,YAAa1jR,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,GAAI+4C,aAAcn4C,EAAMZ,QAAQ,MAC/G,eAACk/B,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAACihB,WAAY,KAApD,SAA2DxwG,EAAE,uDAE/Dwhb,IAAiCF,EAC/B,gBAACx0X,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAAC,KAAD,CAAaG,UAAWF,EAAQ8lT,YAAa1jR,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,GAAI+4C,aAAcn4C,EAAMZ,QAAQ,MAC/G,eAACk/B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAxC,SACG3tF,EAAE,uDAGP,KAEV,gBAAC8sD,EAAA,EAAD,CACIW,WAAW,EAMXgB,KAAK,SACLvB,WAAW,SARf,UAUE,eAAC0rC,EAAA,EAAD,CACIrJ,MAAO,CAAE0mB,KAAM,GACfnd,QAAS,kBAAM89M,GAAa,IAC5B18N,MAAM,UAHV,SAKGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACIrJ,MAAO,CAAE0mB,KAAM,GACf9hI,KAAK,SACL+lG,MAAM,UACNiX,SAAUotV,GAAqB6C,GAAkCK,GAAwBl2O,GAAmBt3N,KAAKgnC,MAAMkha,iBAJ3H,SAMGn8a,EAAE,+BAKX,eAAC,GAAD,CACE4+E,KAAM3qG,KAAKgnC,MAAM4ga,+BACjBr3U,QAAS,SAAC5lB,GAAD,OAAmB,EAAKiY,SAAS,CAAEglV,+BAAgCj9V,KAC5Ei6V,kBAAmBA,EACnBC,mBAAoB7kc,KAAKkqC,MAAM26Z,mBAC/BE,WAAY,SAACnpI,GAAD,OAAqB,EAAKh5M,SAAS,CAAEg5M,aACjDkpI,wBAAyB9kc,KAAKgnC,MAAM89Z,iC,GAvxCXrga,aAk+CpBwwC,kBACb00C,cACA1uC,aAtMa,SAACC,GAAD,MAA+B,CAC5CyyX,gBAAiB,CACfryX,MAAO,SAET7E,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,MAEzBqwT,eAAgB,CACdvvT,QAAS,OACTE,MAAO,QACPi2C,OAAQ,SAEVq8U,gBAAiB,CACf9xX,QAASZ,EAAMZ,QAAQ,KAAM,IAE/BuzX,YAAa,CACX/xX,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,OAElCs3C,KAAM,CACJpQ,YAAatmC,EAAMZ,UACnB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5BqmU,aAAc,CACZ,aAAc,CACZyE,kBAAmB,UAGvB5jV,MAAO,CACLmJ,aAAcn4C,EAAMZ,QAAQ,MAE9BkmC,OAAQ,CACN6S,aAAcn4C,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,EAAG,KAE5B4wX,YAAa,CACX73U,aAAcn4C,EAAMZ,WAEtBw0P,cAAe,CACbxzP,MAAO,MACPC,OAAQL,EAAMZ,WAEhB8xX,eAAgB,CACd/4U,aAAcn4C,EAAMZ,WAEtBoxX,mBAAoB,CAClBnwX,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAAK,MAEnC+vX,SAAU,CACRniV,WAAYhtC,EAAMZ,WAEpBkxX,cAAe,CACblwX,MAAO,OACPi2C,OAAQ,OACRtU,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACNymH,OAAQ,GAEVuqU,UAAW,CACTjwX,MAAO,OACPi2C,OAAQ,OACRtU,SAAU,WACVqX,IAAK,EACL/5G,KAAM,GAERkxb,YAAa,CACXtkV,SAAU,GACVlK,SAAU,WACVqX,KAAM,EACN/5G,MAAO,GAET+wb,YAAa,CACXhwX,MAAO,GACPi2C,OAAQ,GACR8C,cAAe,OACf2M,OAAQ,GAEVqiR,aAAc,CACZ1tR,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEduoQ,YAAa,CACX/4R,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,QAAQ,IAE7B4qU,uBAAwB,CACtBppU,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B0qC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzCvb,aAAc,GACdnsC,MAAO,cACP4sC,WAAY,WA2GK,CAAC8G,WAAW,IAC/B7vE,YAAgB,gBAChBgwE,KACAmoK,YAAmC,CAAEt2B,SAAU2jM,KAC/C9lV,mBA3GsB,SAAC73E,EAAOkD,GAC9B,IAAM06Z,EAAoB16Z,EAAM06Z,kBAC1BC,EAAqB36Z,EAAM26Z,mBAG3BkJ,EAAWlJ,EAAmB9gc,IAAI,UAGlCytN,EAAa,GAEfw8O,EAA8CpJ,EAAkB7gc,IAAI,cAAc4H,QAAO,SAACutI,EAAKw4E,EAA4BptN,GAC1F,IAAD,EAAlC,GAAIotN,EAAU3tN,IAAI,eAEhB,OADAytN,EAAWltN,GAAOyic,GAAoCr1O,GAAW,UAACA,EAAU3tN,IAAI,iBAAf,aAAC,EAAyB4d,MAAK,SAACjmB,GAAD,MAAmC,WAAxBA,EAAMqI,IAAI,eAA+C2tN,EAAU9wM,MAAM,CAAC,SAAU,KACxLs4H,EAEP,IAAMq4E,EAAWG,EAAU3tN,IAAI,YAC/B,OAAOm1I,EAAIxxI,IACTgqN,EAAU3tN,IAAI,MACd6O,cAAI,CACFq7b,UAAW3pc,EACXitN,WACA71N,MAAO61N,EACHt5M,iBACA,UAIT7E,wBAGC26b,IAAaC,EAAazrb,WAC5Bsib,EAAmB9gc,IAAI,cAAc6E,WAAW8D,SAAQ,SAACglN,GACvD,IAAMzwL,EAAKywL,EAAU3tN,IAAI,MACrBiqc,EAAa/pc,IAAIg9B,KACnB+sa,EAAeA,EAAa99b,MAAM,CAAC+wB,EAAI,SAAU+sa,EAAaptb,MAAM,CAACqgB,EAAI,aAAe+sa,EAAaptb,MAAM,CAACqgB,EAAI,UAAU70B,KAAKslN,EAAU3tN,IAAI,aAAe2tN,EAAU3tN,IAAI,iBAKhL,IAAMu6G,GAAiByvV,EACnBlJ,EAAmBt5b,QAAO,SAAC7P,EAAO4I,GAAR,MACxB,CAAC,OAAQ,WAAY,gBAAiB,cAAe,OAAQ,KAAM,aAAc,QAAS,iBAAkB,MAAO,OAAOiF,SAASjF,MAErIsgc,EAAkBr5b,QAAO,SAAC7P,EAAO4I,GAAR,MACvB,CAAC,OAAQ,WAAY,gBAAiB,cAAe,OAAQ,aAAc,QAAS,kBAAkBiF,SAASjF,OAGlHoD,IAAI,SAAUk9b,EAAkB7gc,IAAI,OACpC2D,IAAI,aAAcsmc,EAAanob,YAAW,SAAC5iB,GAC1C,MAAO,CAACA,EAAM,GAAGc,IAAI,aAAcd,EAAM,GAAGc,IAAI,cAEjDiN,eAAc,SAAAywQ,GAEb,IACMgtI,EADQhtI,EAAI19Q,IAAI,SACc4H,QAAO,SAACutI,EAAKw1Q,EAAaC,GAC5D,IAAMC,EAA4BF,EAAY/iZ,QAAO,SAACiiR,EAAM1gD,EAAU2hL,GACpE,IAAMC,EAAoBzxZ,QAAQ6vO,EAASnpO,IAAI,UAC3Cmqc,EAAkBhhO,EAASxlO,IAAI,QAASonZ,GAI5C,OAHKi/C,GAAYnJ,IACfsJ,EAAkBA,EAAgBxmc,IAAI,kBAAmBk9b,EAAkBhkb,MAAM,CAAC,QAAS+tY,EAAgBE,MAEtGjhI,EAAKlmR,IAAImnZ,EAAaq/C,KAC5Bt7b,iBACH,OAAOsmI,EAAIxxI,IAAIinZ,EAAgBC,KAC9Bh8Y,iBACH6uQ,EAAI/5Q,IAAI,QAAS+mZ,MAGrB,OAAO,aACLnwS,gBACAkzG,cACG1+K,YAAyB,CAC1BqoE,WAAYC,wBAAcupV,IAC1B2F,kBAAmB3rM,eACnBquM,mBAAoBluM,eACpBmuM,qBAAsB5vM,gBACtBgkG,oBAAqB19S,eACrBsmZ,uBAAyBplZ,eACzB0lZ,sBAAuBvrM,eACvBkuM,sBAAuBtuM,eACvBuuM,8BAA+BtuM,gBAT9B/rN,CAUA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLy9Z,sBAAuB,SAACpxU,EAAiCswM,GACvD38R,EAAS,IAAIm5C,IAA8C,CAAEkzC,UAASswM,gBAExE6gI,sBAAuB,SAAClvU,EAAmB4qQ,EAA+Bv8D,GACxE38R,EAAS,IAAIi5C,KAA4B,CACvCq1C,YACA4qQ,cACAv8D,gBAGJ38R,eAWF48R,oBAAU,CACR9pN,KAAMknV,GACNn9H,kBAAkB,EAClBC,oBAAoB,IAVTxyP,CAYbkyX,K,gBCtqDF,IAAItkR,EAAYznL,EAAQ,MAkCpBqV,EAjCiBrV,EAAQ,KAiCjBwtL,EAAe,SAASzkL,EAAQ8oB,EAAQ61J,GAClDD,EAAU1+K,EAAQ8oB,EAAQ61J,MAG5B5nL,EAAOC,QAAUsV,G,gQCsFFwqE,iBANG,SAACC,GAAD,MAA+B,CAC/C6kB,OAAQ,CACNktB,UAAW,WAIAhyC,EAtEkC,SAAC/wC,GAChD,IAzBoBsxE,EA0BlBtiC,EAmBEhvC,EAnBFgvC,QACAurC,EAkBEv6E,EAlBFu6E,MAFF,EAoBIv6E,EAjBFm8D,KACEl4F,GAJJ,aAOM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GAVb,GAIIqS,MACAkyP,EALJ,EAKIA,QACAC,EANJ,EAMIA,QAMFx/N,EAQEoJ,EARFpJ,MAZF,EAoBIoJ,EAPF9uC,eAbF,WAoBI8uC,EANFyvE,kBAdF,MAce,GAdf,IAoBIzvE,EALF0vE,wBAfF,MAeqB,GAfrB,EAgBEtzE,EAIE4D,EAJF5D,SACA+6E,EAGEn3E,EAHFm3E,aAjBF,EAoBIn3E,EAFF2iF,kBAlBF,SAmBKvoG,EAnBL,YAoBI4lB,EApBJ,GAsBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAmBZ,OAjBoC,MAAhCi8I,EAAgBnjN,eAEhBmjN,EAAgBhlQ,MADd2lH,EACgD,KAA1Bq/I,EAAgBhlQ,OAAyC,MAAzBglQ,EAAgBhlQ,MACpEglQ,EAAgBhlQ,MAChBglQ,EAAgBnjN,aAE6B,MAAzBmjN,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBAE3FmjN,EAAgBnjN,cAEO,MAA5BmjN,EAAgBllJ,WAClBklJ,EAAgBllJ,UAnEEA,EAmEsBklJ,EAAgBllJ,SAnEzB,SAAC4V,GAClC5V,EAAU4V,GAAOA,EAAIpkG,QAAUokG,EAAIpkG,OAAOtxB,OAAU01H,MAoEtB,MAA1BsvI,EAAgBh7H,SAClBg7H,EAAgBh7H,QAAoBg7H,EAAgBh7H,OAlEzB,eAsE3B,eAAC,IAAD,yBAAav3H,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,cACI94E,GAAS,cAAC,IAAD,CAAYi0R,QAAQ,cAApB,SAAmC35T,EAAO,UAAM0lC,EAAN,MAAkBA,IACvE,cAAC,IAAD,qCACEo4C,QAAS,CAAE6mB,OAAQ7mB,EAAQ6mB,SACvB2gK,GACAp8O,GAHN,aAKGgiB,KAEFumF,GAAc,cAAC,IAAD,CAAgB5rF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,a,qQC9G5D92L,EAAa3lE,EAAYmL,EAAcC,GACrD,IAAM6G,EAAWjS,EAAjB,QAOA,OANAiS,SACE7G,IAAS6G,SAAT7G,EADF6G,IAGEA,cAHFA,IAMA,E,SCXcq4b,EAAahyc,GAC3B,OAAOA,UAAkBA,GAAzB,E,ICEWiyc,EAAuC,SAAC,GAAD,IAAC,EAAD,EAAC,cAAD,EAAC,cAAD,EAAC,UAInDjyc,EAJkD,EAIlDA,MAEMkyc,EAAW7kY,EAAU8kY,EAAaC,EAAxC,GAEMC,EAAUF,EAAhB,GACMG,EAAUJ,EAAhB,GAEA,OAAKI,GAAL,EAIO,CACL52b,EAAG42b,aAAqBD,EADnB,WAELhja,EAAGija,YAAoBD,EAFlB,UAGLz9G,OAAQ09G,QAAgBD,EAHnB,MAILx9G,OAAQy9G,SAAiBD,EAAQj9U,QAPjC,MCXEm9U,EAAe,CACnB39G,OADmB,EAEnBC,OAAQ,GAGG29G,EAA+C,SAAC,GAAD,I,EAAC,EAAD,EAAC,cAAD,EAE1DhpH,eAF2D,EAAD,EAAC,QAAD,EAAC,YAK3D4oH,EAL0D,EAK1DA,UAEM5oH,EAAc,SAAG2oH,EAAH,MAApB,EAEA,MACE,YAGF,GAAInyc,IAAJ,EAA2B,CACzB,IAAMyyc,EAAgBN,EAAtB,GAEA,SAIA,aACEz2b,EADK,EAEL2zB,EACEqja,IACID,YACAA,EADAA,QAECjpH,YAA2BA,EAHhCkpH,QAIID,YAA0BjpH,EAP3B,WAQF+oH,GAXH,KAeJ,IAAMI,EAyBR,gBAKE,IAAMC,EAAcT,EAApB,GACMU,EAAeV,EAAYnyc,EAAjC,GACM8yc,EAAWX,EAAYnyc,EAA7B,GAEA,MACE,SAGF,GAAI0yc,EAAJ,EACE,OAAOG,EACHD,aAAyBC,YAAyBA,EADnC,QAEfC,EACAA,aAAsBF,YAAwBA,EADtC,QAFZ,EAOF,OAAOE,EACHA,aAAsBF,YAAwBA,EADnC,QAEXC,EACAD,aAAyBC,YAAyBA,EADtC,QAFhB,EA9CgBE,CAAWZ,EAAanyc,EAAxC,GAEA,OAAIA,KAAuBA,GAA3B,EACE,aACE0b,EADK,EAEL2zB,GAAIm6S,EAAD,OAFE,GAGF+oH,GAIHvyc,KAAuBA,GAA3B,EACE,aACE0b,EADK,EAEL2zB,EAAGm6S,SAFE,GAGF+oH,GAIP,aACE72b,EADK,EAEL2zB,EAFK,GAGFkja,IC/CP,IAAMS,EAAN,WAcavoa,EAAU,kBAAuC,CAC5Dioa,aAD4D,EAE5DO,YAF4D,EAG5DC,mBAH4D,EAI5DroM,MAJ4D,GAK5DunM,WAL4D,EAM5De,gBAN4D,EAO5DC,YAP4D,GAQ5DhjH,SAR4D,EAS5DijH,WAAY,CAAC1na,SAAS,KAGxB,SAAgB2na,EAAhB,GAAgC,IA8Ef1sN,EAAjB,EA9EgC,wBAG9BikB,MAH8B,IAI9BulF,gBAJ8B,MAInB6hH,EAJmB,EAM9B,EAOIp4G,cAPE,EAAN,EAAM,SAAN,EAAM,cAAN,EAAM,iBAAN,EAAM,OAAN,EAAM,iBAMJvP,EANF,EAMEA,qBAEI2oH,EAAc3mJ,YAAY0mJ,EAAhC,GACMG,EAAiBjyc,QAAvB,OAA+B8oV,QACzBn/E,EAAQxgO,mBACZ,kBACEkpa,OAAsB91X,YAAD,MACH,kBAATA,EAAoBA,EAAOA,EAHnB,QAKnB,CALF,IAOMi1X,EAAc5rL,EAASjc,UAAcic,EAAjB,KAA1B,EACM0sL,GAAN,IAAkBd,EACZW,EAAatka,iBAAnB,GACMqja,EAAYl5Q,EAAO2xE,UAAc3xE,EAAjB,KAAtB,EACMu6Q,EAAmB1ka,iBAAzB,GACMqka,E,SC9DNvoM,EACAsnM,GAEA,OAAOtnM,EAAA,QAA2B,gBAChC,IAAM6oM,EAAavB,MAAnB,GAMA,OAJA,IACEryX,QAGF,IACCx6E,MAAMulQ,EART,SD2DoB8oM,CAAe9oM,EAAnC,GACM+oM,GAiDShtN,EAjDmBikB,EAiDpC,EAjD2C4oM,EAAzC,UAkDO7sN,WAAgBC,EAAvB,SAjDMqsN,GACHd,QAAD,IAAqBM,GADvB,EAGA9oa,aAA0B,WACpBgqa,OAAJ,GAEExpH,MAED,CAACwpH,EAAkBJ,EAAWppH,EALjCxgT,IAOAI,qBAAU,WACRypa,cACC,CAFHzpa,IAIAA,qBAAU,WACRm0P,uBAAsB,WACpBk1K,iBAED,CAJHrpa,IAMA,IAAMI,EAAeC,mBACnB,iBAA0B,CACxBqoa,cACAO,cACAC,oBACAroM,QACAunM,YACAe,iBACAC,cACAhjH,WACAijH,gBAEF,CAAC,EAAD,cAZF,IAyBA,OAAO,kBAAC5oa,EAAD,UAAkBlrC,MAAO6qC,GAAhC,G,IEhHWypa,EAAoD,SAAC,GAAD,IAAC,EAAD,EAAC,YAAD,EAAC,QAAD,EAAC,SAMhE,QAN+D,EAI/Dx7U,eAMA,GAIOitK,IAAP,IAGWy0D,EAAwC,CACnDxhO,SADmD,IAEnD0hO,OAAQ,QAGG65G,EAAN,YAEMC,EAAqB,wBAAwB,CACxDjuR,SADwD,EAExDvtD,SAFwD,EAGxD0hO,OAAQ,WAGG+5G,EAAoB,CAC/Bt6G,gBAAiB,Y,SCZHu6G,E,GAAY,QAC1BC,4BAD0B,cAE1B7+O,WAF0B,iBAI1Bx2K,KAJ0B,WAM1BuxS,SAN0B,IAO1B/3N,kBAP0B,MAOb0hO,EAPa,EAS1B,EAUIzrT,qBAVJ,GAAM,EAAN,EAAM,QAAN,EAAM,cAAN,EAAM,cAAN,EAAM,oBAAN,EAAM,cAAN,EAAM,YAAN,EAAM,iBAAN,EAQE8hT,SACAijH,EATF,EASEA,WAEIrzc,EAAQ6qQ,UAAd,GACMhsN,EAAOxU,mBACX,+BAAQ6rX,SAAU,CAAC+8C,cAAajzc,QAAO6qQ,UAAW42D,KAClD,CAACwxI,EAAaxxI,EAAYzhU,EAF5B,IAIA,EAAsD85V,YAAa,CACjEh1T,KACA+Z,SAFI,EAAN,EAAM,OAAN,EAAM,KAAyBs1Z,EAA/B,EAAmBv6G,WAInB,EAUIH,YAAa,CACf30T,KACA+Z,OACAw2K,WAAY,8BAEP++O,GAELrzV,aAjBI,EAAN,EAAM,SAAN,EAAM,iBAAN,EAAM,iBAAN,EAAM,aAAN,EAKE64O,WALI,EAAN,EAAM,YAAN,EAAM,aAAN,EAAM,KASJ15N,EATF,EASEA,UAUI05N,EAAaqJ,YAAgBkxG,EAAnC,GACMX,EAAYtyc,QAAlB,GACMmzc,EACJb,GACAH,EADAG,aAGAxB,EAHAwB,IAIAxB,EALF,GAMMsC,GAA4BnB,GAAlC,EACMoB,EACJD,OADF,KAGM55G,GAAiB25G,EAAY,MAC/BE,EAD+B,GADrB,MAAGC,EAAH,EAAd,GAGa,CACPrC,YADO,EAEP3oH,iBACAkpH,cACAN,YACApyc,UAPN,KAUMslS,GACJ0sK,MAA6BA,EAA7BA,GACI3kY,EAAUw9L,EAAO6nM,EAAjBrlY,WADJ2kY,GADF,EAIMyC,GAAe1la,iBAArB,IACM2la,GAA6BR,EAAqB,CACtDptL,SACAoY,aACAs0K,YACA1ua,KACA9kC,QACA6qQ,QACAy6B,SAAUmvK,GAP4C,QAQtDp8U,aACAg7U,WAAYA,EAAW1na,UAEnB2uT,GC9FR,YAAoC,oCAAwBrvV,EAAxB,EAAwBA,KAC1D,EAAgDs3C,mBAAhD,yBAAM,EAAN,KAAM,EAAN,KAGM+jZ,EAAYv3Z,iBAAlB,GAkCA,OAhCA/E,qBAAU,WACR,IAAK+2E,GAAY/gH,IAAUsmc,EAAvB,SAA4Cr7b,EAAhD,QAA8D,CAC5D,IAAMswL,EAAU/hC,EAAhB,QAEA,KAAa,CACX,IAAM7tH,EAAUmyP,YAAsB7yR,EAAtC,SACM2mV,EAAQ,CACZl2U,EAAG6/K,aAAqB5vJ,EADZ,WAEZ0D,EAAGksJ,YAAoB5vJ,EAFX,UAGZipT,OAAQr5J,QAAgB5vJ,EAHZ,MAIZkpT,OAAQt5J,SAAiB5vJ,EAAQypF,SAG/Bw8N,KAAWA,EAAf,IACE+iH,MAKF30c,IAAUsmc,EAAd,UACEA,eAED,CAACvlV,EAAU/gH,EAAOiL,EAtBrB++B,IAwBAA,qBAAU,WACR,GACEm0P,uBAAsB,WACpBw2K,aAGH,CANH3qa,IAQA,EDwDyBwwT,CAAoB,CAC3Cz5O,UAD2C,GAE3C/gH,QACAiL,OACAuuJ,SASF,OANAxvH,qBAAU,WACR,IACEyqa,iBAED,CAACjB,EAJJxpa,KAMO,CACL88O,SACAzxD,aACAi0H,iBACA9vL,OACAx5J,QACAwzc,YACAt0K,aACAp2P,YACA79B,OACAmnc,YACAl5Q,OACA0gK,aACAu6G,sBACAS,sBACA10U,UAAS,MAAEo6N,GAAF,GAfJ,GAgBLjiO,WAGF,WACE,MAEE,SAGF,GAAIi8U,IAAJ,EACE,YAGF,GAAId,GAAJ,GACE,OAAO,mDAAwB,GAAxB,IAEL1tR,SAAUguR,KAId,YApBYe,IEjIhB,IAAMC,EAAuB,CAC3BhjH,IAD2B,KAE3BA,IAF2B,MAG3BA,IAH2B,GAI3BA,IAJF,MAOaijH,EAAwD,SAAC,EAAD,WAElEhoc,QAAS,EAFyD,EAEzD,sBAFyD,EAEzD,eAAsCm9U,EAFmB,EAEnBA,oBAEhD,GAAI4qH,WAAoB9pU,EAAxB,MAAqC,CAGnC,GAFAA,oBAEA,EACE,OAGF,IAAMmnU,EAAN,GAEAlwc,2BAA4C,mCAAC,EAAD,YAC1C,WAAIo7E,OAAJ,EAAIA,EAAJ,WAIA,IAAMpyE,EAAI,MAAGoyE,OAAH,EAAGA,OAAb,QAEA,MAIA,IAAMm8E,EAAOo0L,YAAb,GAEA,OAAQ5iN,EAAR,MACE,KAAK8mN,IAAL,KACMqE,MAAqBA,EAArBA,QAA8C38L,EAAlD,KACE24S,OAAiB,CAACrta,EAAlBqta,IAEF,MACF,KAAKrgH,IAAL,GACMqE,OAAsB38L,MAAWA,EAArC,QACE24S,OAAiB,CAACrta,EAAlBqta,IAEF,MACF,KAAKrgH,IAAL,KACMqE,QAAuB38L,OAAYA,EAAvC,OACE24S,OAAiB,CAACrta,EAAlBqta,IAEF,MACF,KAAKrgH,IAAL,MACMqE,OAAsBA,EAAtBA,OAA8C38L,EAAlD,MACE24S,OAAiB,CAACrta,EAAlBqta,UAMR,IAAMhpK,EAAY6kD,YAAemkH,EAAjC,GAEA,KAAe,OACPt5b,EAAO,SAAGkxU,EAAH,WAAGA,OAAhB,QAEA,KAAa,CACX,IACMirH,EADqBppH,YAA3B,GACoCqpH,MAClC,qBAAoB/qH,OADtB,KAGMooH,EAAU1kH,YAAhB,GACMj8U,EAASqjc,EACX,CACEt5b,EADF,EAEE2zB,EAAG,GAEL,CACE3zB,EAAGy6U,QAAuBm8G,EAD5B,MAEEjja,EAAG8mT,SAAwBm8G,EAAQl9U,QAOzC,MALuB,CACrB15G,EAAG42b,OAAe3gc,EADG,EAErB09B,EAAGija,MAAc3gc,EAAO09B,Q,yQClFrB6la,EAAoB,SAACtjL,EAAwB/sF,GAA6D,IAAD,IAC5Gm4M,EAAqC,iBAAGprH,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,gBAAhB,QAA4BkU,iBACvE,wBAAOkhY,QAAP,IAAOA,OAAP,EAAOA,EAAcxtY,QAAO,SAACutI,EAAKo4T,GAC9B,IAAMx0D,EAAgBw0D,EAAYvtc,IAAI,MACtC,OAAOm1I,EAAIxxI,IAAIo1Y,EAAe97M,EAAMj9L,IAAI+4Y,MACzClqY,wBAHH,QAGaA,iBAaJ2+b,EAAiD,WAAoF,IAAnFC,EAAkF,uDAArC5+b,gBAAO4rZ,EAA8B,uCAC7I,OAAOgzC,EAAkB7lc,QAAO,SAACutI,EAAI7vF,EAAkBm0C,GACnD,IAAMi0W,EAAmBlzC,YAAgCl1W,EAAMm1W,GAAmBjzZ,QAAO,SAAA80L,GAAO,OAAIA,EAAQt8L,IAAI,YAAYhI,KAAO,KACnI,OAA8B,IAA1B01c,EAAiB11c,KACVm9I,EAEJA,EAAIhpI,MAAM,CAACstF,EAAQ,YAAai0W,KACxC7+b,kBAGM8+b,EAAqD,SAACC,EAA+BC,EAA6CjkL,GAC3I,OAAsC,IAAlCgkL,GAGGC,EAA4Crkc,OAAM,SAAC87C,EAAuBm0C,GAC7E,IAAMw6H,EAAQ,OAAG3uK,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,YAC3B,OAAKi0N,GAA8B,IAAlBA,EAASj8N,MAGnBi8N,EAASzqN,OAAM,SAAA8yL,GAClB,OAAOstF,EAAwB/sQ,MAAM,CAAC48E,EAAQ6iG,EAAQt8L,IAAI,MAAO,mBAKhE8tc,EAA4C,SAACF,EAA+BC,EAA6CjkL,GAClI,OAAsC,IAAlCgkL,GAGGC,EAA4Cnkc,MAAK,SAAC47C,EAAuBm0C,GAC5E,IAAMw6H,EAAQ,OAAG3uK,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,YAC3B,SAAKi0N,GAA8B,IAAlBA,EAASj8N,OAGnBi8N,EAASvqN,MAAK,SAAA4yL,GACjB,OAAOstF,EAAwB/sQ,MAAM,CAAC48E,EAAQ6iG,EAAQt8L,IAAI,MAAO,mBAKhE+tc,EAAuB,SAACt0W,GAAD,4CAAmDA,IAE1Eu0W,EAAmB,SAACC,GAAD,OAA4BA,EAAet1Q,WAAW,kC,6BChEtF,IAAIiqB,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,4MACD,WAEJ3K,EAAQywH,QAAUq4I,G,cCTlB/oQ,EAAOC,QARP,SAAgCi0K,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIutC,eAAe,6DAG3B,OAAOvtC,GAITl0K,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,4GCJ3Du1P,EAAoBxta,wBAA1B,MASMyta,EAAkE,SAAC,G,IACvEC,EAIH,EAJJnpU,MACA1iG,EAGI,EAHJA,SACA2jB,EAEI,EAFJA,OACAmoZ,EACI,EADJA,YAEMppU,EAAQ,mBAAc,W,OAAM,IAAImpU,EAAM,CAAEloZ,OAAF,EAAU58B,SAAU+kb,MAAgB,CAAC,EAAD,EAAhF,I,OAMOC,wBAACJ,EAADI,UAA4B32c,MAA5B22c,EAA0C/ra,SAAUA,KCZtD,SAASgsa,I,IACRtpU,EAAQv+F,qBAAd,G,OAVwB,SAACu+F,G,IACzB,E,MAEQ,IAAIphI,MAAV,oNAQF2qc,IAEA,I,2aChBa,SAASC,EAAkDnsa,GACxE,IAAIosa,EAAYpsa,EAAKosa,UACjBC,EAAWrsa,EAAKqsa,SAChBC,EAA0Btsa,EAAKssa,wBAC/BC,EAA+Bvsa,EAAKusa,6BACpCC,EAAiBxsa,EAAKwsa,eACtBC,EAAezsa,EAAKysa,aACpBC,EAAoB1sa,EAAK0sa,kBACzBC,EAAgB3sa,EAAK2sa,cACrBC,EAAqC5sa,EAAK4sa,mCAI1CR,IAAcI,IAAuC,kBAAbH,GAAiD,kBAAjBI,GAA8BJ,IAAaI,KACrHH,EAAwBC,GAIpBI,GAAiB,GAAKA,IAAkBD,GAC1CE,K,yCCiPSC,EA9PkB,WAG/B,SAASA,EAA2B7sa,GAClC,IAAIosa,EAAYpsa,EAAKosa,UACjBU,EAAiB9sa,EAAK8sa,eACtBC,EAAoB/sa,EAAK+sa,kBAE7Bhmb,IAAgBptB,KAAMkzc,GAEtBlzc,KAAKqzc,oBAAsB,EAE3Brzc,KAAKszc,gBAAkBH,EACvBnzc,KAAKuzc,WAAad,EAClBzyc,KAAKwzc,mBAAqBJ,EAC1Bpzc,KAAKyzc,cAAgB,IAAIC,IACzB1zc,KAAKyzc,cAAcE,UAAUlB,GAC7Bzyc,KAAKyzc,cAAcG,eAAeR,GA0OpC,OApOA37Z,IAAay7Z,EAA4B,CAAC,CACxC5uc,IAAK,qBACL5I,MAAO,WACL,OAAO,IAER,CACD4I,IAAK,YACL5I,MAAO,SAAmBitC,GACxB,IAAI8pa,EAAY9pa,EAAM8pa,UAClBW,EAAoBzqa,EAAMyqa,kBAC1BD,EAAiBxqa,EAAMwqa,eAE3Bnzc,KAAKuzc,WAAad,EAClBzyc,KAAKwzc,mBAAqBJ,EAC1Bpzc,KAAKszc,gBAAkBH,EACvBnzc,KAAKyzc,cAAcE,UAAUlB,GAC7Bzyc,KAAKyzc,cAAcG,eAAeR,KAEnC,CACD9uc,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKuzc,aAEb,CACDjvc,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKwzc,qBAEb,CACDlvc,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKqzc,qBAEb,CACD/uc,IAAK,sBACL5I,MAAO,WACL,OAAO,IAQR,CACD4I,IAAK,2BACL5I,MAAO,SAAkCS,GACvC,GAAIA,EAAQ,GAAKA,GAAS6D,KAAKuzc,WAC7B,MAAM3rc,MAAM,mBAAqBzL,EAAQ,2BAA6B6D,KAAKuzc,YAE7E,IAAIM,EAAS7zc,KAAKyzc,cAClB,GAAIt3c,EAAQ6D,KAAKqzc,mBAAoB,CAGnC,IAFA,IAAIpzW,EAAQ,CAAE9jG,MAAO6D,KAAKqzc,mBAAqB,GAEtCrwc,EAAIi9F,EAAM9jG,MAAO6G,GAAK7G,EAAO8jG,EAAM9jG,QAAU6G,EAAG,CACvD,IAAI8wc,EAAQ9zc,KAAKszc,gBAAgBrzW,GAGjC,QAAcnkG,IAAVg4c,GAAuBA,IAAUA,EACnC,MAAMlsc,MAAM,kCAAoC5E,EAAI,aAAe8wc,GAChD,OAAVA,GACTD,EAAOE,YAAY/wc,EAAG8wc,GAG1B9zc,KAAKqzc,mBAAqBt2c,KAAKE,IAAId,EAAO6D,KAAKuzc,WAAa,GAG9D,MAAO,CACLzlc,OAAQ+lc,EAAO9zb,MAAM5jB,GACrBJ,KAAM83c,EAAOG,YAAY73c,MAG5B,CACDmI,IAAK,uCACL5I,MAAO,WACL,IAAIS,EAAQ6D,KAAKqzc,mBACjB,GAAIl3c,GAAS,EACX,MAAO,CACL2R,OAAQ,EACR/R,KAAM,GAGV,IAAI83c,EAAS7zc,KAAKyzc,cAClB,MAAO,CACL3lc,OAAQ+lc,EAAO9zb,MAAM5jB,GACrBJ,KAAM83c,EAAOG,YAAY73c,MAU5B,CACDmI,IAAK,eACL5I,MAAO,WACL,IAAIswJ,EAAYhsJ,KAAKuzc,WAAa,EAClC,OAAOvnT,GAAa,EAAIhsJ,KAAKyzc,cAAcj3c,IAAIwvJ,GAAa,IAe7D,CACD1nJ,IAAK,2BACL5I,MAAO,SAAkC+zC,GACvC,IAAIwka,EAAcxka,EAAMgqE,MACpBA,OAAwB39G,IAAhBm4c,EAA4B,OAASA,EAC7CC,EAAgBzka,EAAMyka,cACtBC,EAAgB1ka,EAAM0ka,cACtBC,EAAc3ka,EAAM2ka,YAExB,GAAIF,GAAiB,EACnB,OAAO,EAGT,IAAIG,EAAQr0c,KAAKs0c,yBAAyBF,GACtCG,EAAYF,EAAMvmc,OAClB0mc,EAAYD,EAAYL,EAAgBG,EAAMt4c,KAE9C04c,OAAc,EAElB,OAAQh7V,GACN,IAAK,QACHg7V,EAAcF,EACd,MACF,IAAK,MACHE,EAAcD,EACd,MACF,IAAK,SACHC,EAAcF,GAAaL,EAAgBG,EAAMt4c,MAAQ,EACzD,MACF,QACE04c,EAAc13c,KAAKC,IAAIw3c,EAAWz3c,KAAKE,IAAIs3c,EAAWJ,IAI1D,IAAIO,EAAY10c,KAAK20c,eAErB,OAAO53c,KAAKC,IAAI,EAAGD,KAAKE,IAAIy3c,EAAYR,EAAeO,MAExD,CACDnwc,IAAK,sBACL5I,MAAO,SAA6Bi3C,GAClC,GAA4B,IAAxB3yC,KAAK20c,eACP,MAAO,GAGT,IAAIT,EAAgBvha,EAAOuha,cACvBpmc,EAAS6kC,EAAO7kC,OAEhBymc,EAAYzmc,EAASomc,EAAgB,EACzC,MAAO,CACLn0b,MAAO/f,KAAK40c,iBAAiB9mc,GAC7B6jS,KAAM3xS,KAAK40c,iBAAiBL,MAU/B,CACDjwc,IAAK,YACL5I,MAAO,SAAmBS,GACxB6D,KAAKqzc,mBAAqBt2c,KAAKE,IAAI+C,KAAKqzc,mBAAoBl3c,EAAQ,KAUrE,CACDmI,IAAK,mBACL5I,MAAO,SAA0BoS,GAC/B,GAAIsuC,MAAMtuC,GACR,MAAMlG,MAAM,kBAAoBkG,EAAS,cAY3C,IATA,IAAI+lc,EAAS7zc,KAAKyzc,cACdznT,EAAYhsJ,KAAKuzc,WAAa,EAG9BsB,EAAe93c,KAAKC,IAAI,EAAGD,KAAKE,IAAI6Q,EAAQ+lc,EAAO9zb,MAAMisI,KAEzD8oT,EAAmBjB,EAAOrzb,QAAQq0b,GAG/BC,EAAmB90c,KAAKqzc,oBAAoB,CAMjD,GAFArzc,KAAKs0c,yBAAyBQ,GAE1BA,IAAqB9oT,EACvB,OAAO8oT,GAMiB,KAJ1BA,EAAmBjB,EAAOrzb,QAAQq0b,MAKhCC,EAAmB90c,KAAKqzc,mBACxBrzc,KAAKqzc,mBAAqByB,EAAmB,EAC7CD,EAAe93c,KAAKC,IAAI,EAAGD,KAAKE,IAAI6Q,EAAQ+lc,EAAO9zb,MAAMisI,MAI7D,OAAO8oT,MAIJ5B,EA3PwB,GCGtB6B,EAAoB,WAC7B,MARyB,qBAAXrmb,QAILA,OAAOsmb,QAAYtmb,OAAOsmb,OAAOC,SAPd,SADC,MC6MhBC,EA3LyB,WACtC,SAASA,EAAkC7ua,GACzC,IAAI8ua,EAAqB9ua,EAAK+ua,cAC1BA,OAAuCt5c,IAAvBq5c,EAAmCJ,IAAsBI,EACzExia,EAASuK,IAAyB7W,EAAM,CAAC,kBAE7CjZ,IAAgBptB,KAAMk1c,GAGtBl1c,KAAKq1c,4BAA8B,IAAInC,EAA2Bvga,GAClE3yC,KAAKs1c,eAAiBF,EA8KxB,OA3KA39Z,IAAay9Z,EAAmC,CAAC,CAC/C5wc,IAAK,qBACL5I,MAAO,WACL,OAAOsE,KAAKq1c,4BAA4BV,eAAiB30c,KAAKs1c,iBAE/D,CACDhxc,IAAK,YACL5I,MAAO,SAAmBi3C,GACxB3yC,KAAKq1c,4BAA4BE,UAAU5ia,KAE5C,CACDruC,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKq1c,4BAA4BG,iBAEzC,CACDlxc,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKq1c,4BAA4BI,yBAEzC,CACDnxc,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKq1c,4BAA4BK,yBAQzC,CACDpxc,IAAK,sBACL5I,MAAO,SAA6BitC,GAClC,IAAIura,EAAgBvra,EAAMura,cACtBpmc,EAAS66B,EAAM76B,OAEf4mc,EAAY10c,KAAKq1c,4BAA4BV,eAC7CgB,EAAgB31c,KAAK20c,eACrBiB,EAAmB51c,KAAK61c,qBAAqB,CAC/C3B,cAAeA,EACfpmc,OAAQA,EACR4mc,UAAWiB,IAGb,OAAO54c,KAAKo/E,MAAMy5X,GAAoBD,EAAgBjB,MAEvD,CACDpwc,IAAK,2BACL5I,MAAO,SAAkCS,GACvC,OAAO6D,KAAKq1c,4BAA4Bf,yBAAyBn4c,KAElE,CACDmI,IAAK,uCACL5I,MAAO,WACL,OAAOsE,KAAKq1c,4BAA4BS,yCAKzC,CACDxxc,IAAK,eACL5I,MAAO,WACL,OAAOqB,KAAKE,IAAI+C,KAAKs1c,eAAgBt1c,KAAKq1c,4BAA4BV,kBAKvE,CACDrwc,IAAK,2BACL5I,MAAO,SAAkC+zC,GACvC,IAAIwka,EAAcxka,EAAMgqE,MACpBA,OAAwB39G,IAAhBm4c,EAA4B,OAASA,EAC7CC,EAAgBzka,EAAMyka,cACtBC,EAAgB1ka,EAAM0ka,cACtBC,EAAc3ka,EAAM2ka,YAExBD,EAAgBn0c,KAAK+1c,oBAAoB,CACvC7B,cAAeA,EACfpmc,OAAQqmc,IAGV,IAAIrmc,EAAS9N,KAAKq1c,4BAA4BW,yBAAyB,CACrEv8V,MAAOA,EACPy6V,cAAeA,EACfC,cAAeA,EACfC,YAAaA,IAGf,OAAOp0c,KAAKi2c,oBAAoB,CAC9B/B,cAAeA,EACfpmc,OAAQA,MAMX,CACDxJ,IAAK,sBACL5I,MAAO,SAA6B2oT,GAClC,IAAI6vJ,EAAgB7vJ,EAAM6vJ,cACtBpmc,EAASu2S,EAAMv2S,OAOnB,OALAA,EAAS9N,KAAK+1c,oBAAoB,CAChC7B,cAAeA,EACfpmc,OAAQA,IAGH9N,KAAKq1c,4BAA4Ba,oBAAoB,CAC1DhC,cAAeA,EACfpmc,OAAQA,MAGX,CACDxJ,IAAK,YACL5I,MAAO,SAAmBS,GACxB6D,KAAKq1c,4BAA4Bc,UAAUh6c,KAE5C,CACDmI,IAAK,uBACL5I,MAAO,SAA8BspW,GACnC,IAAIkvG,EAAgBlvG,EAAMkvG,cACtBpmc,EAASk3V,EAAMl3V,OACf4mc,EAAY1vG,EAAM0vG,UAEtB,OAAOA,GAAaR,EAAgB,EAAIpmc,GAAU4mc,EAAYR,KAE/D,CACD5vc,IAAK,sBACL5I,MAAO,SAA6B8pW,GAClC,IAAI0uG,EAAgB1uG,EAAM0uG,cACtBpmc,EAAS03V,EAAM13V,OAEf4mc,EAAY10c,KAAKq1c,4BAA4BV,eAC7CgB,EAAgB31c,KAAK20c,eAEzB,GAAID,IAAciB,EAChB,OAAO7nc,EAEP,IAAI8nc,EAAmB51c,KAAK61c,qBAAqB,CAC/C3B,cAAeA,EACfpmc,OAAQA,EACR4mc,UAAWA,IAGb,OAAO33c,KAAKo/E,MAAMy5X,GAAoBD,EAAgBzB,MAGzD,CACD5vc,IAAK,sBACL5I,MAAO,SAA6BkqW,GAClC,IAAIsuG,EAAgBtuG,EAAMsuG,cACtBpmc,EAAS83V,EAAM93V,OAEf4mc,EAAY10c,KAAKq1c,4BAA4BV,eAC7CgB,EAAgB31c,KAAK20c,eAEzB,GAAID,IAAciB,EAChB,OAAO7nc,EAEP,IAAI8nc,EAAmB51c,KAAK61c,qBAAqB,CAC/C3B,cAAeA,EACfpmc,OAAQA,EACR4mc,UAAWiB,IAGb,OAAO54c,KAAKo/E,MAAMy5X,GAAoBlB,EAAYR,QAKjDgB,EAxL+B,G,kBCdzB,SAASkB,IACtB,IAAIC,IAAiB3yc,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,KAAmBA,UAAU,GAEhF4yc,EAAgB,GAEpB,OAAO,SAAUjwa,GACf,IAAIzB,EAAWyB,EAAKzB,SAChBld,EAAU2e,EAAK3e,QAEf5lB,EAAOi1S,IAAarvR,GACpB6ub,GAAkBF,GAAkBv0c,EAAKyL,OAAM,SAAUjJ,GAC3D,IAAI5I,EAAQgsB,EAAQpjB,GACpB,OAAO7C,MAAMC,QAAQhG,GAASA,EAAMmG,OAAS,EAAInG,GAAS,KAExD86c,EAAe10c,EAAKD,SAAWk1S,IAAau/J,GAAez0c,QAAUC,EAAK2L,MAAK,SAAUnJ,GAC3F,IAAImyc,EAAcH,EAAchyc,GAC5B5I,EAAQgsB,EAAQpjB,GAEpB,OAAO7C,MAAMC,QAAQhG,GAAS+6c,EAAYh1b,KAAK,OAAS/lB,EAAM+lB,KAAK,KAAOg1b,IAAgB/6c,KAG5F46c,EAAgB5ub,EAEZ6ub,GAAkBC,GACpB5xa,EAASld,ICnBA,SAASgvb,EAAwBrwa,GAC9C,IAAIqsa,EAAWrsa,EAAKqsa,SAChBiE,EAA6Btwa,EAAKswa,2BAClCC,EAAqBvwa,EAAKuwa,mBAC1BC,EAAmBxwa,EAAKwwa,iBACxBC,EAA4Bzwa,EAAKywa,0BACjCC,EAAwB1wa,EAAK0wa,sBAC7BC,EAAe3wa,EAAK2wa,aACpBC,EAAe5wa,EAAK4wa,aACpBC,EAAoB7wa,EAAK6wa,kBACzBlE,EAAgB3sa,EAAK2sa,cACrBj3c,EAAOsqC,EAAKtqC,KACZo7c,EAA4B9wa,EAAK8wa,0BACjCC,EAA4B/wa,EAAK+wa,0BAEjC3E,EAAYkE,EAA2BnB,eACvC6B,EAAmBrE,GAAiB,GAAKA,EAAgBP,EAKzD4E,IAJiBt7c,IAASi7c,GAAgBG,IAA8BN,GAAwC,kBAAbnE,GAAyBA,IAAamE,GAIlGK,IAAsBJ,GAA6B9D,IAAkB+D,GAC9GK,EAA0BpE,IAIhBqE,GAAoB5E,EAAY,IAAM12c,EAAOi7c,GAAgBvE,EAAYmE,IAK/EK,EAAeN,EAA2BhC,eAAiB54c,GAC7Dq7c,EAA0B3E,EAAY,G,yCCtCxC6E,OAAM,EAYN/1W,GATF+1W,EADoB,qBAAX5ob,OACHA,OACmB,qBAAT0gJ,KACVA,KAEA,IAKUkrH,uBAAyBg9K,EAAIC,6BAA+BD,EAAIE,0BAA4BF,EAAIG,wBAA0BH,EAAII,yBAA2B,SAAU9ya,GACnL,OAAO0ya,EAAIz+Z,WAAWjU,EAAU,IAAO,KAGrC/Y,EAASyrb,EAAI/8K,sBAAwB+8K,EAAIK,4BAA8BL,EAAIM,yBAA2BN,EAAIO,uBAAyBP,EAAIQ,wBAA0B,SAAU72a,GAC7Kq2a,EAAI/wU,aAAatlG,IAGRg0X,EAAM1zT,EACNw2W,EAAMlsb,EChBNmsb,EAAyB,SAAgCr7K,GAClE,OAAOo7K,EAAIp7K,EAAM17P,KASRg3a,EAA0B,SAAiCrza,EAAU+/D,GAC9E,IAAI5kF,OAAQ,EAEZm4b,IAASh5Z,UAAUq3B,MAAK,WACtBx2D,EAAQgO,KAAK+xB,SAGf,IAQI68O,EAAQ,CACV17P,GAAIg0X,GATQ,SAASxwT,IACjB12E,KAAK+xB,MAAQ//B,GAAS4kF,EACxB//D,EAAS5jC,OAET27R,EAAM17P,GAAKg0X,EAAIxwT,OAQnB,OAAOk4L,GCRLw7K,EACQ,WADRA,EAES,YAWTt/X,EAAO,SAAU6wO,GAInB,SAAS7wO,EAAK3uC,GACZ9c,IAAgBptB,KAAM64E,GAEtB,IAAIlhC,EAAQwqE,IAA2BniH,MAAO64E,EAAK36E,WAAak6c,IAAuBv/X,IAAO73E,KAAKhB,KAAMkqC,IAEzGyN,EAAM0ga,wBAA0BjC,IAChCz+Z,EAAM2ga,kBAAoBlC,GAAuB,GACjDz+Z,EAAM4ga,+BAAiC,KACvC5ga,EAAM6ga,4BAA8B,KACpC7ga,EAAM8ga,0BAA2B,EACjC9ga,EAAM+ga,yBAA0B,EAChC/ga,EAAMgha,yBAA2B,EACjChha,EAAMiha,uBAAyB,EAC/Bjha,EAAMkha,2BAA4B,EAClClha,EAAMmha,0BAA4B,EAClCnha,EAAMoha,yBAA2B,EACjCpha,EAAMqha,uBAAyB,EAC/Brha,EAAMsha,sBAAwB,EAC9Btha,EAAMuha,YAAc,GACpBvha,EAAMwha,WAAa,GAEnBxha,EAAMyha,6BAA+B,WACnCzha,EAAM0ha,+BAAiC,KAEvC1ha,EAAMirE,SAAS,CACb02V,aAAa,EACbC,uBAAuB,KAI3B5ha,EAAM6ha,4BAA8B,WAClC,IAAIC,EAAoB9ha,EAAMzN,MAAMuva,kBAGpC9ha,EAAM0ga,wBAAwB,CAC5Bzza,SAAU60a,EACV/xb,QAAS,CACPgyb,yBAA0B/ha,EAAMgia,kBAChCC,wBAAyBjia,EAAMkia,iBAC/BC,iBAAkBnia,EAAMmha,0BACxBiB,gBAAiBpia,EAAMoha,yBACvBiB,sBAAuBria,EAAMsia,eAC7BC,qBAAsBvia,EAAMwia,cAC5BC,cAAezia,EAAMqha,uBACrBqB,aAAc1ia,EAAMsha,0BAK1Btha,EAAM2ia,0BAA4B,SAAU7+c,GAC1Ck8C,EAAM4ia,oBAAsB9+c,GAG9Bk8C,EAAM6ia,UAAY,SAAUrzU,GAItBA,EAAMn6G,SAAW2qB,EAAM4ia,qBACzB5ia,EAAM8ia,kBAAkBtzU,EAAMn6G,SAIlC,IAAI0tb,EAA+B,IAAIxF,EAAkC,CACvEzC,UAAWvoa,EAAMywa,YACjBxH,eAAgB,SAAwBxga,GACtC,OAAOkmC,EAAK+hY,gBAAgB1wa,EAAM2wa,YAA3BhiY,CAAwClmC,IAEjDyga,kBAAmBv6X,EAAKiiY,wBAAwB5wa,KAE9C6wa,EAA4B,IAAI7F,EAAkC,CACpEzC,UAAWvoa,EAAM8wa,SACjB7H,eAAgB,SAAwBxga,GACtC,OAAOkmC,EAAK+hY,gBAAgB1wa,EAAMs4V,UAA3B3pT,CAAsClmC,IAE/Cyga,kBAAmBv6X,EAAKoiY,qBAAqB/wa,KAqC/C,OAlCAyN,EAAM3Q,MAAQ,CACZk0a,cAAe,CACbR,6BAA8BA,EAC9BK,0BAA2BA,EAE3BI,gBAAiBjxa,EAAM2wa,YACvBO,cAAelxa,EAAMs4V,UACrB64E,gBAAiBnxa,EAAMywa,YACvBW,aAAcpxa,EAAM8wa,SACpBO,iBAAuC,IAAtBrxa,EAAMova,YACvBkC,mBAAoBtxa,EAAMuxa,eAC1BC,gBAAiBxxa,EAAMyxa,YACvBC,eAAgB1xa,EAAMy9Q,WACtBk0J,cAAe3xa,EAAM09Q,UAErBk0J,cAAe,EACfC,uBAAuB,GAEzBzC,aAAa,EACb0C,0BC1IgC,ED2IhCC,wBC3IgC,ED4IhCt0J,WAAYz9Q,EAAMy9Q,YAAc,EAChCC,UAAW19Q,EAAM09Q,WAAa,EAC9Bs0J,2BAA4B,KAE5B3C,uBAAuB,GAGrBrva,EAAMyxa,YAAc,IACtBhka,EAAMwka,kBAAoBxka,EAAMyka,wBAAwBlya,EAAOyN,EAAM3Q,QAEnEkD,EAAMuxa,eAAiB,IACzB9ja,EAAM0ka,mBAAqB1ka,EAAM2ka,yBAAyBpya,EAAOyN,EAAM3Q,QAElE2Q,EA4mCT,OA9tCAkgC,IAAUgB,EAAM6wO,GA0HhBjyQ,IAAaohC,EAAM,CAAC,CAClBv0E,IAAK,mBACL5I,MAAO,WACL,IAAI2qC,EAAO3iC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC3E64c,EAAiBl2a,EAAKm2a,UACtBA,OAA+B1gd,IAAnBygd,EAA+Bv8c,KAAKkqC,MAAMgta,kBAAoBqF,EAC1EE,EAAmBp2a,EAAKq2a,YACxBA,OAAmC5gd,IAArB2gd,EAAiCz8c,KAAKkqC,MAAMuxa,eAAiBgB,EAC3EE,EAAgBt2a,EAAKs+R,SACrBA,OAA6B7oU,IAAlB6gd,EAA8B38c,KAAKkqC,MAAMyxa,YAAcgB,EAElEC,EAAc9ya,IAAS,GAAI9pC,KAAKkqC,MAAO,CACzCgta,kBAAmBsF,EACnBf,eAAgBiB,EAChBf,YAAah3I,IAGf,MAAO,CACLhd,WAAY3nT,KAAKs8c,yBAAyBM,GAC1Ch1J,UAAW5nT,KAAKo8c,wBAAwBQ,MAQ3C,CACDt4c,IAAK,qBACL5I,MAAO,WACL,OAAOsE,KAAKgnC,MAAMk0a,cAAcH,0BAA0BpG,iBAO3D,CACDrwc,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKgnC,MAAMk0a,cAAcR,6BAA6B/F,iBAQ9D,CACDrwc,IAAK,oBACL5I,MAAO,SAA2BitC,GAChC,IAAIk0a,EAAmBl0a,EAAMg/Q,WACzBm1J,OAAuChhd,IAArB+gd,EAAiC,EAAIA,EACvDE,EAAkBp0a,EAAMi/Q,UACxBo1J,OAAqClhd,IAApBihd,EAAgC,EAAIA,EAIzD,KAAIC,EAAiB,GAArB,CAKAh9c,KAAKi9c,uBAEL,IAAIxxV,EAASzrH,KAAKkqC,MACdgza,EAAazxV,EAAOyxV,WACpBC,EAAY1xV,EAAO0xV,UACnB5rV,EAAS9F,EAAO8F,OAChBj2C,EAAQmwC,EAAOnwC,MACf4/X,EAAgBl7c,KAAKgnC,MAAMk0a,cAO3BY,EAAgBZ,EAAcY,cAC9BsB,EAAkBlC,EAAcH,0BAA0BpG,eAC1D0I,EAAoBnC,EAAcR,6BAA6B/F,eAC/DhtJ,EAAa5qT,KAAKE,IAAIF,KAAKC,IAAI,EAAGqgd,EAAoB/hY,EAAQwgY,GAAgBgB,GAC9El1J,EAAY7qT,KAAKE,IAAIF,KAAKC,IAAI,EAAGogd,EAAkB7rV,EAASuqV,GAAgBkB,GAMhF,GAAIh9c,KAAKgnC,MAAM2gR,aAAeA,GAAc3nT,KAAKgnC,MAAM4gR,YAAcA,EAAW,CAG9E,IAGIv2L,EAAW,CACbioV,aAAa,EACb0C,0BAL+Br0J,IAAe3nT,KAAKgnC,MAAM2gR,WAAaA,EAAa3nT,KAAKgnC,MAAM2gR,WC3PlE,GAFC,ED6PqI3nT,KAAKgnC,MAAMg1a,0BAM7KC,wBAL6Br0J,IAAc5nT,KAAKgnC,MAAM4gR,UAAYA,EAAY5nT,KAAKgnC,MAAM4gR,UC5P7D,GAFC,ED8P+H5nT,KAAKgnC,MAAMi1a,wBAMvKC,2BAA4B/D,GAGzB+E,IACH7rV,EAASu2L,UAAYA,GAGlBu1J,IACH9rV,EAASs2L,WAAaA,GAGxBt2L,EAASkoV,uBAAwB,EACjCv5c,KAAK4iH,SAASyO,GAGhBrxH,KAAKs9c,wBAAwB,CAC3B31J,WAAYA,EACZC,UAAWA,EACXy1J,kBAAmBA,EACnBD,gBAAiBA,OAYpB,CACD94c,IAAK,gCACL5I,MAAO,SAAuC+zC,GAC5C,IAAIita,EAAcjta,EAAMita,YACpB/3I,EAAWl1R,EAAMk1R,SAErB3kU,KAAKu4c,+BAAgF,kBAAxCv4c,KAAKu4c,+BAA8Cx7c,KAAKE,IAAI+C,KAAKu4c,+BAAgCmE,GAAeA,EAC7J18c,KAAKw4c,4BAA0E,kBAArCx4c,KAAKw4c,4BAA2Cz7c,KAAKE,IAAI+C,KAAKw4c,4BAA6B7zI,GAAYA,IASlJ,CACDrgU,IAAK,kBACL5I,MAAO,WACL,IAAI6hd,EAAUv9c,KAAKkqC,MACfywa,EAAc4C,EAAQ5C,YACtBK,EAAWuC,EAAQvC,SACnBE,EAAgBl7c,KAAKgnC,MAAMk0a,cAE/BA,EAAcR,6BAA6BpG,yBAAyBqG,EAAc,GAClFO,EAAcH,0BAA0BzG,yBAAyB0G,EAAW,KAS7E,CACD12c,IAAK,oBACL5I,MAAO,WACL,IAAI2oT,EAAQ3gT,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E85c,EAAoBn5J,EAAMq4J,YAC1BA,OAAoC5gd,IAAtB0hd,EAAkC,EAAIA,EACpDC,EAAiBp5J,EAAMsgB,SACvBA,OAA8B7oU,IAAnB2hd,EAA+B,EAAIA,EAE9CC,EAAU19c,KAAKkqC,MACfuxa,EAAiBiC,EAAQjC,eACzBE,EAAc+B,EAAQ/B,YACtBT,EAAgBl7c,KAAKgnC,MAAMk0a,cAG/BA,EAAcR,6BAA6BvE,UAAUuG,GACrDxB,EAAcH,0BAA0B5E,UAAUxxI,GAKlD3kU,KAAKy4c,yBAA2BgD,GAAkB,ICxVlB,IDwVwBz7c,KAAKgnC,MAAMg1a,0BAAyDU,GAAejB,EAAiBiB,GAAejB,GAC3Kz7c,KAAK04c,wBAA0BiD,GAAe,ICzVd,IDyVoB37c,KAAKgnC,MAAMi1a,wBAAuDt3I,GAAYg3I,EAAch3I,GAAYg3I,GAI5J37c,KAAKk5c,YAAc,GACnBl5c,KAAKm5c,WAAa,GAElBn5c,KAAK29c,gBAON,CACDr5c,IAAK,eACL5I,MAAO,SAAsBspW,GAC3B,IAAI03G,EAAc13G,EAAM03G,YACpB/3I,EAAWqgC,EAAMrgC,SACjBg2I,EAAc36c,KAAKkqC,MAAMywa,YAGzBzwa,EAAQlqC,KAAKkqC,MAIbywa,EAAc,QAAqB7+c,IAAhB4gd,GACrB18c,KAAK49c,mCAAmC9za,IAAS,GAAII,EAAO,CAC1Duxa,eAAgBiB,UAIH5gd,IAAb6oU,GACF3kU,KAAK69c,+BAA+B/za,IAAS,GAAII,EAAO,CACtDyxa,YAAah3I,OAIlB,CACDrgU,IAAK,oBACL5I,MAAO,WACL,IAAIoid,EAAU99c,KAAKkqC,MACf6za,EAAmBD,EAAQC,iBAC3BxsV,EAASusV,EAAQvsV,OACjBo2L,EAAam2J,EAAQn2J,WACrB8zJ,EAAiBqC,EAAQrC,eACzB7zJ,EAAYk2J,EAAQl2J,UACpB+zJ,EAAcmC,EAAQnC,YACtBrgY,EAAQwiY,EAAQxiY,MAChB4/X,EAAgBl7c,KAAKgnC,MAAMk0a,cAsB/B,GAlBAl7c,KAAKm8c,kBAAoB,EACzBn8c,KAAKq8c,mBAAqB,EAI1Br8c,KAAKg+c,6BAIA9C,EAAca,uBACjB/7c,KAAK4iH,UAAS,SAAUquJ,GACtB,IAAIgtM,EAAcn0a,IAAS,GAAImnO,EAAW,CAAEsoM,uBAAuB,IAGnE,OAFA0E,EAAY/C,cAAcY,cAAgBiC,IAC1CE,EAAY/C,cAAca,uBAAwB,EAC3CkC,KAIe,kBAAft2J,GAA2BA,GAAc,GAA0B,kBAAdC,GAA0BA,GAAa,EAAG,CACxG,IAAIq2J,EAAcplY,EAAKqlY,gCAAgC,CACrDjtM,UAAWjxQ,KAAKgnC,MAChB2gR,WAAYA,EACZC,UAAWA,IAETq2J,IACFA,EAAY1E,uBAAwB,EACpCv5c,KAAK4iH,SAASq7V,IAKdj+c,KAAKu6c,sBAGHv6c,KAAKu6c,oBAAoB5yJ,aAAe3nT,KAAKgnC,MAAM2gR,aACrD3nT,KAAKu6c,oBAAoB5yJ,WAAa3nT,KAAKgnC,MAAM2gR,YAE/C3nT,KAAKu6c,oBAAoB3yJ,YAAc5nT,KAAKgnC,MAAM4gR,YACpD5nT,KAAKu6c,oBAAoB3yJ,UAAY5nT,KAAKgnC,MAAM4gR,YAMpD,IAAIu2J,EAAuB5sV,EAAS,GAAKj2C,EAAQ,EAC7CmgY,GAAkB,GAAK0C,GACzBn+c,KAAK49c,qCAEHjC,GAAe,GAAKwC,GACtBn+c,KAAK69c,iCAIP79c,KAAKw5c,8BAGLx5c,KAAKs9c,wBAAwB,CAC3B31J,WAAYA,GAAc,EAC1BC,UAAWA,GAAa,EACxBy1J,kBAAmBnC,EAAcR,6BAA6B/F,eAC9DyI,gBAAiBlC,EAAcH,0BAA0BpG,iBAG3D30c,KAAKo+c,wCASN,CACD95c,IAAK,qBACL5I,MAAO,SAA4B2iH,EAAW4yJ,GAC5C,IAAI7tJ,EAASpjH,KAETq+c,EAAUr+c,KAAKkqC,MACfgza,EAAamB,EAAQnB,WACrBC,EAAYkB,EAAQlB,UACpBxC,EAAc0D,EAAQ1D,YACtBppV,EAAS8sV,EAAQ9sV,OACjBypV,EAAWqD,EAAQrD,SACnB9D,EAAoBmH,EAAQnH,kBAC5BuE,EAAiB4C,EAAQ5C,eACzBE,EAAc0C,EAAQ1C,YACtBrgY,EAAQ+iY,EAAQ/iY,MAChBgjY,EAASt+c,KAAKgnC,MACd2gR,EAAa22J,EAAO32J,WACpBu0J,EAA6BoC,EAAOpC,2BACpCt0J,EAAY02J,EAAO12J,UACnBszJ,EAAgBoD,EAAOpD,cAI3Bl7c,KAAKg+c,6BAKL,IAAIO,EAAwC5D,EAAc,GAA+B,IAA1Bt8V,EAAUs8V,aAAqBK,EAAW,GAA4B,IAAvB38V,EAAU28V,SAOpHkB,IAA+B/D,KAG5BgF,GAAax1J,GAAc,IAAMA,IAAe3nT,KAAKu6c,oBAAoB5yJ,YAAc42J,KAC1Fv+c,KAAKu6c,oBAAoB5yJ,WAAaA,IAEnCu1J,GAAct1J,GAAa,IAAMA,IAAc5nT,KAAKu6c,oBAAoB3yJ,WAAa22J,KACxFv+c,KAAKu6c,oBAAoB3yJ,UAAYA,IAOzC,IAAIuvJ,GAAiD,IAApB94V,EAAU/iC,OAAoC,IAArB+iC,EAAUkT,SAAiBA,EAAS,GAAKj2C,EAAQ,EAoD3G,GAhDIt7E,KAAKy4c,0BACPz4c,KAAKy4c,0BAA2B,EAChCz4c,KAAK49c,mCAAmC59c,KAAKkqC,QAE7Cwsa,EAAwB,CACtBC,2BAA4BuE,EAAcR,6BAC1C9D,mBAAoBv4V,EAAUs8V,YAC9B9D,iBAAkBx4V,EAAUw8V,YAC5B/D,0BAA2Bz4V,EAAU64V,kBACrCH,sBAAuB14V,EAAUo9V,eACjCzE,aAAc34V,EAAU/iC,MACxB27X,aAActvJ,EACduvJ,kBAAmBA,EACnBlE,cAAeyI,EACf1/c,KAAMu/E,EACN67X,0BAA2BA,EAC3BC,0BAA2B,WACzB,OAAOh0V,EAAOw6V,mCAAmCx6V,EAAOl5E,UAK1DlqC,KAAK04c,yBACP14c,KAAK04c,yBAA0B,EAC/B14c,KAAK69c,+BAA+B79c,KAAKkqC,QAEzCwsa,EAAwB,CACtBC,2BAA4BuE,EAAcH,0BAC1CnE,mBAAoBv4V,EAAU28V,SAC9BnE,iBAAkBx4V,EAAUmkR,UAC5Bs0E,0BAA2Bz4V,EAAU64V,kBACrCH,sBAAuB14V,EAAUs9V,YACjC3E,aAAc34V,EAAUkT,OACxB0lV,aAAcrvJ,EACdsvJ,kBAAmBA,EACnBlE,cAAe2I,EACf5/c,KAAMw1H,EACN4lV,0BAA2BA,EAC3BC,0BAA2B,WACzB,OAAOh0V,EAAOy6V,+BAA+Bz6V,EAAOl5E,UAM1DlqC,KAAKw5c,8BAGD7xJ,IAAe12C,EAAU02C,YAAcC,IAAc32C,EAAU22C,UAAW,CAC5E,IAAIw1J,EAAkBlC,EAAcH,0BAA0BpG,eAC1D0I,EAAoBnC,EAAcR,6BAA6B/F,eAEnE30c,KAAKs9c,wBAAwB,CAC3B31J,WAAYA,EACZC,UAAWA,EACXy1J,kBAAmBA,EACnBD,gBAAiBA,IAIrBp9c,KAAKo+c,wCAEN,CACD95c,IAAK,uBACL5I,MAAO,WACDsE,KAAKq5c,gCACPrB,EAAuBh4c,KAAKq5c,kCAW/B,CACD/0c,IAAK,SACL5I,MAAO,WACL,IAAI8id,EAAUx+c,KAAKkqC,MACfu0a,EAAqBD,EAAQC,mBAC7BvB,EAAasB,EAAQtB,WACrBC,EAAYqB,EAAQrB,UACpB/jY,EAAYolY,EAAQplY,UACpB6kQ,EAAiBugI,EAAQvgI,eACzBygI,EAAgBF,EAAQE,cACxBC,EAAiBH,EAAQG,eACzBptV,EAASitV,EAAQjtV,OACjBtwF,EAAKu9a,EAAQv9a,GACb29a,EAAoBJ,EAAQI,kBAC5Bl9Z,EAAO88Z,EAAQ98Z,KACf45D,EAAQkjW,EAAQljW,MAChBgpB,EAAWk6U,EAAQl6U,SACnBhpD,EAAQkjY,EAAQljY,MAChBujY,EAAU7+c,KAAKgnC,MACfk0a,EAAgB2D,EAAQ3D,cACxB3B,EAAwBsF,EAAQtF,sBAGhCD,EAAct5c,KAAK8+c,eAEnBC,EAAY,CACd5jY,UAAW,aACXzB,UAAW,MACX63C,OAAQ2rV,EAAa,OAAS3rV,EAC9BtU,SAAU,WACV3hC,MAAO6hY,EAAY,OAAS7hY,EAC5BwpR,wBAAyB,QACzBk6G,WAAY,aAGVzF,IACFv5c,KAAKk5c,YAAc,IAKhBl5c,KAAKgnC,MAAMsya,aACdt5c,KAAKi/c,mBAIPj/c,KAAKk/c,2BAA2Bl/c,KAAKkqC,MAAOlqC,KAAKgnC,OAEjD,IAAIq2a,EAAoBnC,EAAcR,6BAA6B/F,eAC/DyI,EAAkBlC,EAAcH,0BAA0BpG,eAK1DwK,EAAwB/B,EAAkB7rV,EAAS2pV,EAAcY,cAAgB,EACjFsD,EAA0B/B,EAAoB/hY,EAAQ4/X,EAAcY,cAAgB,EAEpFsD,IAA4Bp/c,KAAK24c,0BAA4BwG,IAA0Bn/c,KAAK44c,yBAC9F54c,KAAK24c,yBAA2ByG,EAChCp/c,KAAK44c,uBAAyBuG,EAC9Bn/c,KAAK64c,2BAA4B,GAQnCkG,EAAU90U,UAAYozU,EAAoB8B,GAAyB7jY,EAAQ,SAAW,OACtFyjY,EAAUx3J,UAAY61J,EAAkBgC,GAA2B7tV,EAAS,SAAW,OAEvF,IAAI8tV,EAAoBr/c,KAAKs/c,mBAEzBC,EAAqD,IAA7BF,EAAkBx9c,QAAgB0vH,EAAS,GAAKj2C,EAAQ,EAEpF,OAAO72C,gBACL,MACAqF,IAAS,CACPruC,IAAKuE,KAAKs6c,2BACTr8H,EAAgB,CACjB,aAAcj+U,KAAKkqC,MAAM,cACzB,gBAAiBlqC,KAAKkqC,MAAM,iBAC5BkvC,UAAW2B,kBAAK,yBAA0B3B,GAC1Cn4C,GAAIA,EACJu+a,SAAUx/c,KAAKw6c,UACf94Z,KAAMA,EACN45D,MAAOxxE,IAAS,GAAIi1a,EAAWzjW,GAC/BgpB,SAAUA,IACZ+6U,EAAkBx9c,OAAS,GAAK4iC,gBAC9B,MACA,CACE20C,UAAW,+CACX13B,KAAMg9Z,EACNpjW,MAAOxxE,IAAS,CACdwxC,MAAOmjY,EAAqB,OAASpB,EACrC9rV,OAAQ6rV,EACR9gY,SAAU+gY,EACVvmM,UAAWsmM,EACX/yV,SAAU,SACVgK,cAAeilV,EAAc,OAAS,GACtCr8V,SAAU,YACT0hW,IACLU,GAEFE,GAAyBX,OAM5B,CACDt6c,IAAK,6BACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MACjFy4a,EAAev1a,EAAMu1a,aACrBC,EAAoBx1a,EAAMw1a,kBAC1B/E,EAAczwa,EAAMywa,YACpBgF,EAA2Bz1a,EAAMy1a,yBACjCpuV,EAASrnF,EAAMqnF,OACfquV,EAAsB11a,EAAM01a,oBAC5BC,EAAwB31a,EAAM21a,sBAC9BC,EAAmB51a,EAAM41a,iBACzB9E,EAAW9wa,EAAM8wa,SACjB1/X,EAAQpxC,EAAMoxC,MACdykY,EAAoB71a,EAAM61a,kBAC1B/D,EAA4Bh1a,EAAMg1a,0BAClCC,EAA0Bj1a,EAAMi1a,wBAChCf,EAAgBl0a,EAAMk0a,cAGtBtzJ,EAAY5nT,KAAKm8c,kBAAoB,EAAIn8c,KAAKm8c,kBAAoBn1a,EAAM4gR,UACxED,EAAa3nT,KAAKq8c,mBAAqB,EAAIr8c,KAAKq8c,mBAAqBr1a,EAAM2gR,WAE3E2xJ,EAAct5c,KAAK8+c,aAAa50a,EAAOlD,GAK3C,GAHAhnC,KAAKs/c,mBAAqB,GAGtB/tV,EAAS,GAAKj2C,EAAQ,EAAG,CAC3B,IAAI0kY,EAAuB9E,EAAcR,6BAA6BxE,oBAAoB,CACxFhC,cAAe54X,EACfxtE,OAAQ65S,IAENs4J,EAAoB/E,EAAcH,0BAA0B7E,oBAAoB,CAClFhC,cAAe3iV,EACfzjH,OAAQ85S,IAGNs4J,EAA6BhF,EAAcR,6BAA6ByF,oBAAoB,CAC9FjM,cAAe54X,EACfxtE,OAAQ65S,IAENy4J,EAA2BlF,EAAcH,0BAA0BoF,oBAAoB,CACzFjM,cAAe3iV,EACfzjH,OAAQ85S,IAIV5nT,KAAK84c,0BAA4BkH,EAAqBjgc,MACtD/f,KAAK+4c,yBAA2BiH,EAAqBruK,KACrD3xS,KAAKg5c,uBAAyBiH,EAAkBlgc,MAChD/f,KAAKi5c,sBAAwBgH,EAAkBtuK,KAE/C,IAAI0uK,EAAwBR,EAAsB,CAChDnmY,UAAW,aACX+4X,UAAWkI,EACX2F,mBAAoBV,EACpB/qH,gBAAiBmnH,EACjBuE,WAAkD,kBAA/BP,EAAqBjgc,MAAqBigc,EAAqBjgc,MAAQ,EAC1Fygc,UAAgD,kBAA9BR,EAAqBruK,KAAoBquK,EAAqBruK,MAAQ,IAGtF8uK,EAAqBZ,EAAsB,CAC7CnmY,UAAW,WACX+4X,UAAWuI,EACXsF,mBAAoBR,EACpBjrH,gBAAiBonH,EACjBsE,WAA+C,kBAA5BN,EAAkBlgc,MAAqBkgc,EAAkBlgc,MAAQ,EACpFygc,UAA6C,kBAA3BP,EAAkBtuK,KAAoBsuK,EAAkBtuK,MAAQ,IAIhFmoK,EAAmBuG,EAAsBK,mBACzC3G,EAAkBsG,EAAsBM,kBACxCvG,EAAgBqG,EAAmBC,mBACnCrG,EAAeoG,EAAmBE,kBAGtC,GAAIhB,EAA0B,CAK5B,IAAKA,EAAyBiB,iBAC5B,IAAK,IAAIj8I,EAAWy1I,EAAez1I,GAAY01I,EAAc11I,IAC3D,IAAKg7I,EAAyB17c,IAAI0gU,EAAU,GAAI,CAC9Cm1I,EAAmB,EACnBC,EAAkBY,EAAc,EAChC,MASN,IAAKgF,EAAyBkB,gBAC5B,IAAK,IAAInE,EAAc5C,EAAkB4C,GAAe3C,EAAiB2C,IACvE,IAAKiD,EAAyB17c,IAAI,EAAGy4c,GAAc,CACjDtC,EAAgB,EAChBC,EAAeW,EAAW,EAC1B,OAMRh7c,KAAKs/c,mBAAqBI,EAAkB,CAC1CoB,UAAW9gd,KAAKm5c,WAChBsG,aAAcA,EACd/E,6BAA8BQ,EAAcR,6BAC5CZ,iBAAkBA,EAClBC,gBAAiBA,EACjB4F,yBAA0BA,EAC1BO,2BAA4BA,EAC5B5G,YAAaA,EACbyG,kBAAmBA,EACnBrja,OAAQ18C,KACR+6c,0BAA2BG,EAAcH,0BACzCX,cAAeA,EACfC,aAAcA,EACd1yJ,WAAYA,EACZC,UAAWA,EACXm5J,WAAY/gd,KAAKk5c,YACjBkH,yBAA0BA,EAC1BJ,qBAAsBA,EACtBC,kBAAmBA,IAIrBjgd,KAAK25c,kBAAoBG,EACzB95c,KAAK65c,iBAAmBE,EACxB/5c,KAAKi6c,eAAiBG,EACtBp6c,KAAKm6c,cAAgBE,KAUxB,CACD/1c,IAAK,uBACL5I,MAAO,WACL,IAAIsld,EAA6Bhhd,KAAKkqC,MAAM82a,2BAGxChhd,KAAKq5c,gCACPrB,EAAuBh4c,KAAKq5c,gCAG9Br5c,KAAKq5c,+BAAiCpB,EAAwBj4c,KAAKo5c,6BAA8B4H,KAElG,CACD18c,IAAK,6BAOL5I,MAAO,WACL,GAAmD,kBAAxCsE,KAAKu4c,gCAA2F,kBAArCv4c,KAAKw4c,4BAA0C,CACnH,IAAIkE,EAAc18c,KAAKu4c,+BACnB5zI,EAAW3kU,KAAKw4c,4BAEpBx4c,KAAKu4c,+BAAiC,KACtCv4c,KAAKw4c,4BAA8B,KAEnCx4c,KAAKihd,kBAAkB,CAAEvE,YAAaA,EAAa/3I,SAAUA,OAGhE,CACDrgU,IAAK,0BACL5I,MAAO,SAAiC8pW,GACtC,IAAIjiP,EAASvjH,KAET2nT,EAAa69C,EAAM79C,WACnBC,EAAY49C,EAAM59C,UAClBy1J,EAAoB73G,EAAM63G,kBAC1BD,EAAkB53G,EAAM43G,gBAE5Bp9c,KAAKs4c,kBAAkB,CACrB1za,SAAU,SAAkBghU,GAC1B,IAAIj+C,EAAai+C,EAAMj+C,WACnBC,EAAYg+C,EAAMh+C,UAClBs5J,EAAU39V,EAAOr5E,MACjBqnF,EAAS2vV,EAAQ3vV,QAKrBiuV,EAJe0B,EAAQ1B,UAId,CACPvpK,aAAc1kL,EACd6N,YALU8hV,EAAQ5lY,MAMlBs6N,aAAcwnK,EACdz1J,WAAYA,EACZC,UAAWA,EACX/R,YAAawnK,KAGjB31b,QAAS,CACPigS,WAAYA,EACZC,UAAWA,OAIhB,CACDtjT,IAAK,eACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MAIrF,OAAO5oC,OAAOmD,eAAeP,KAAKkpC,EAAO,eAAiB7sC,QAAQ6sC,EAAMova,aAAej8c,QAAQ2pC,EAAMsya,eAEtG,CACDh1c,IAAK,sCACL5I,MAAO,WACL,GAAIsE,KAAK64c,0BAA2B,CAClC,IAAIsI,EAA6Bnhd,KAAKkqC,MAAMk3a,0BAG5Cphd,KAAK64c,2BAA4B,EAEjCsI,EAA2B,CACzB/gL,WAAYpgS,KAAK24c,yBAA2B,EAC5C58c,KAAMiE,KAAKgnC,MAAMk0a,cAAcY,cAC/B/7K,SAAU//R,KAAK44c,uBAAyB,OAI7C,CACDt0c,IAAK,mBAOL5I,MAAO,SAA0B2ld,GAC/B,IAAI15J,EAAa05J,EAAM15J,WACnBC,EAAYy5J,EAAMz5J,UAElBq2J,EAAcplY,EAAKqlY,gCAAgC,CACrDjtM,UAAWjxQ,KAAKgnC,MAChB2gR,WAAYA,EACZC,UAAWA,IAGTq2J,IACFA,EAAY1E,uBAAwB,EACpCv5c,KAAK4iH,SAASq7V,MAGjB,CACD35c,IAAK,2BACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MAErF,OAAO6xC,EAAKyjY,yBAAyBpya,EAAOlD,KAE7C,CACD1iC,IAAK,qCACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MAEjFi3a,EAAcplY,EAAKyoY,2CAA2Cp3a,EAAOlD,GACrEi3a,IACFA,EAAY1E,uBAAwB,EACpCv5c,KAAK4iH,SAASq7V,MAGjB,CACD35c,IAAK,0BACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MAErF,OAAO6xC,EAAKujY,wBAAwBlya,EAAOlD,KAE5C,CACD1iC,IAAK,mBACL5I,MAAO,WACL,IAAIqld,EAAa/gd,KAAKk5c,YAClB4H,EAAY9gd,KAAKm5c,WACjB4G,EAAoB//c,KAAKkqC,MAAM61a,kBASnC//c,KAAKm5c,WAAa,GAClBn5c,KAAKk5c,YAAc,GAGnB,IAAK,IAAIv0I,EAAW3kU,KAAKi6c,eAAgBt1I,GAAY3kU,KAAKm6c,cAAex1I,IACvE,IAAK,IAAI+3I,EAAc18c,KAAK25c,kBAAmB+C,GAAe18c,KAAK65c,iBAAkB6C,IAAe,CAClG,IAAIp4c,EAAMqgU,EAAW,IAAM+3I,EAC3B18c,KAAKk5c,YAAY50c,GAAOy8c,EAAWz8c,GAE/By7c,IACF//c,KAAKm5c,WAAW70c,GAAOw8c,EAAUx8c,OAKxC,CACDA,IAAK,iCACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MACjFlD,EAAQtjC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKgnC,MAEjFi3a,EAAcplY,EAAK0oY,uCAAuCr3a,EAAOlD,GACjEi3a,IACFA,EAAY1E,uBAAwB,EACpCv5c,KAAK4iH,SAASq7V,OAGhB,CAAC,CACH35c,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,IAAI5/I,EAAW,GACX6pV,EAAgBjqM,EAAUiqM,cAGA,IAA1B73V,EAAUs3V,aAA8C,IAAzB1pM,EAAU02C,YAA2C,IAAvBtkM,EAAU23V,UAA0C,IAAxB/pM,EAAU22C,WACrGv2L,EAASs2L,WAAa,EACtBt2L,EAASu2L,UAAY,IAIZvkM,EAAUskM,aAAeuzJ,EAAcU,gBAAkBv4V,EAAUo4V,eAAiB,GAAKp4V,EAAUukM,YAAcszJ,EAAcW,eAAiBx4V,EAAUs4V,YAAc,IACjLj2J,IAAer0L,EAAUx4C,EAAKqlY,gCAAgC,CAC5DjtM,UAAWA,EACX02C,WAAYtkM,EAAUskM,WACtBC,UAAWvkM,EAAUukM,aAKzBv2L,EAASkoV,uBAAwB,EAC7Bl2V,EAAUw3V,cAAgBK,EAAcC,iBAAmB93V,EAAUm/Q,YAAc04E,EAAcE,gBAEnG/pV,EAASkoV,uBAAwB,GAGnC2B,EAAcR,6BAA6BnF,UAAU,CACnD9C,UAAWpvV,EAAUs3V,YACrBvH,kBAAmBv6X,EAAKiiY,wBAAwBz3V,GAChD8vV,eAAgBt6X,EAAK+hY,gBAAgBv3V,EAAUw3V,eAGjDK,EAAcH,0BAA0BxF,UAAU,CAChD9C,UAAWpvV,EAAU23V,SACrB5H,kBAAmBv6X,EAAKoiY,qBAAqB53V,GAC7C8vV,eAAgBt6X,EAAK+hY,gBAAgBv3V,EAAUm/Q,aAGX,IAAlC04E,EAAcG,iBAAwD,IAA/BH,EAAcI,eACvDJ,EAAcG,gBAAkB,EAChCH,EAAcI,aAAe,GAI3Bj4V,EAAU65V,aAAwC,IAA1B75V,EAAUi2V,cAA2D,IAAlC4B,EAAcK,iBAC3E71J,IAAer0L,EAAU,CACvBioV,aAAa,IAIjB,IAAIkI,OAAc,EACdC,OAAc,EAsDlB,OApDAjP,EAAkD,CAChDC,UAAWyI,EAAcG,gBACzB3I,SAAmD,kBAAlCwI,EAAcC,gBAA+BD,EAAcC,gBAAkB,KAC9FxI,wBAAyB,WACvB,OAAOuI,EAAcR,6BAA6BvE,UAAU,IAE9DvD,6BAA8BvvV,EAC9BwvV,eAAgBxvV,EAAUs3V,YAC1B7H,aAA+C,kBAA1BzvV,EAAUw3V,YAA2Bx3V,EAAUw3V,YAAc,KAClF9H,kBAAmB1vV,EAAUo4V,eAC7BzI,cAAekI,EAAcM,mBAC7BvI,mCAAoC,WAClCuO,EAAc3oY,EAAKyoY,2CAA2Cj+V,EAAW4tJ,MAG7EuhM,EAAkD,CAChDC,UAAWyI,EAAcI,aACzB5I,SAAiD,kBAAhCwI,EAAcE,cAA6BF,EAAcE,cAAgB,KAC1FzI,wBAAyB,WACvB,OAAOuI,EAAcH,0BAA0B5E,UAAU,IAE3DvD,6BAA8BvvV,EAC9BwvV,eAAgBxvV,EAAU23V,SAC1BlI,aAA6C,kBAAxBzvV,EAAUm/Q,UAAyBn/Q,EAAUm/Q,UAAY,KAC9EuwE,kBAAmB1vV,EAAUs4V,YAC7B3I,cAAekI,EAAcQ,gBAC7BzI,mCAAoC,WAClCwO,EAAc5oY,EAAK0oY,uCAAuCl+V,EAAW4tJ,MAIzEiqM,EAAcG,gBAAkBh4V,EAAUs3V,YAC1CO,EAAcC,gBAAkB93V,EAAUw3V,YAC1CK,EAAcK,iBAA4C,IAA1Bl4V,EAAUi2V,YAC1C4B,EAAcI,aAAej4V,EAAU23V,SACvCE,EAAcE,cAAgB/3V,EAAUm/Q,UACxC04E,EAAcM,mBAAqBn4V,EAAUo4V,eAC7CP,EAAcQ,gBAAkBr4V,EAAUs4V,YAC1CT,EAAcU,eAAiBv4V,EAAUskM,WACzCuzJ,EAAcW,cAAgBx4V,EAAUukM,UAGxCszJ,EAAcY,cAAgBz4V,EAAU06V,wBACJjid,IAAhCo/c,EAAcY,eAChBZ,EAAca,uBAAwB,EACtCb,EAAcY,cAAgB,GAE9BZ,EAAca,uBAAwB,EAGxC1qV,EAAS6pV,cAAgBA,EAElBpxa,IAAS,GAAIunF,EAAUmwV,EAAaC,KAE5C,CACDn9c,IAAK,0BACL5I,MAAO,SAAiCwuC,GACtC,MAAoC,kBAAtBA,EAAM2wa,YAA2B3wa,EAAM2wa,YAAc3wa,EAAMw3a,sBAE1E,CACDp9c,IAAK,uBACL5I,MAAO,SAA8BwuC,GACnC,MAAkC,kBAApBA,EAAMs4V,UAAyBt4V,EAAMs4V,UAAYt4V,EAAMy3a,mBAEtE,CACDr9c,IAAK,kCAOL5I,MAAO,SAAyCkmd,GAC9C,IAAI3wM,EAAY2wM,EAAM3wM,UAClB02C,EAAai6J,EAAMj6J,WACnBC,EAAYg6J,EAAMh6J,UAElBv2L,EAAW,CACb6qV,2BAA4B/D,GAa9B,MAV0B,kBAAfxwJ,GAA2BA,GAAc,IAClDt2L,EAAS2qV,0BAA4Br0J,EAAa12C,EAAU02C,WCxpC9B,GAFC,ED2pC/Bt2L,EAASs2L,WAAaA,GAGC,kBAAdC,GAA0BA,GAAa,IAChDv2L,EAAS4qV,wBAA0Br0J,EAAY32C,EAAU22C,UC7pC3B,GAFC,EDgqC/Bv2L,EAASu2L,UAAYA,GAGG,kBAAfD,GAA2BA,GAAc,GAAKA,IAAe12C,EAAU02C,YAAmC,kBAAdC,GAA0BA,GAAa,GAAKA,IAAc32C,EAAU22C,UAClKv2L,EAEF,OAER,CACD/sH,IAAK,kBACL5I,MAAO,SAAyBA,GAC9B,MAAwB,oBAAVA,EAAuBA,EAAQ,WAC3C,OAAOA,KAGV,CACD4I,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,IAAI0pM,EAAct3V,EAAUs3V,YACxBppV,EAASlO,EAAUkO,OACnB2lV,EAAoB7zV,EAAU6zV,kBAC9BuE,EAAiBp4V,EAAUo4V,eAC3BngY,EAAQ+nC,EAAU/nC,MAClBqsO,EAAa12C,EAAU02C,WACvBuzJ,EAAgBjqM,EAAUiqM,cAG9B,GAAIP,EAAc,EAAG,CACnB,IAAIkH,EAAclH,EAAc,EAC5BvG,EAAcqH,EAAiB,EAAIoG,EAAc9kd,KAAKE,IAAI4kd,EAAapG,GACvE2B,EAAkBlC,EAAcH,0BAA0BpG,eAC1DmN,EAAgB5G,EAAca,uBAAyBqB,EAAkB7rV,EAAS2pV,EAAcY,cAAgB,EAEpH,OAAOZ,EAAcR,6BAA6B1E,yBAAyB,CACzEv8V,MAAOy9V,EACPhD,cAAe54X,EAAQwmY,EACvB3N,cAAexsJ,EACfysJ,YAAaA,IAGjB,OAAO,IAER,CACD9vc,IAAK,6CACL5I,MAAO,SAAoD2nH,EAAW4tJ,GACpE,IAAI02C,EAAa12C,EAAU02C,WAEvBo6J,EAAuBlpY,EAAKyjY,yBAAyBj5V,EAAW4tJ,GAEpE,MAAoC,kBAAzB8wM,GAAqCA,GAAwB,GAAKp6J,IAAeo6J,EACnFlpY,EAAKqlY,gCAAgC,CAC1CjtM,UAAWA,EACX02C,WAAYo6J,EACZn6J,WAAY,IAGT,OAER,CACDtjT,IAAK,0BACL5I,MAAO,SAAiC2nH,EAAW4tJ,GACjD,IAAI1/I,EAASlO,EAAUkO,OACnBypV,EAAW33V,EAAU23V,SACrB9D,EAAoB7zV,EAAU6zV,kBAC9ByE,EAAct4V,EAAUs4V,YACxBrgY,EAAQ+nC,EAAU/nC,MAClBssO,EAAY32C,EAAU22C,UACtBszJ,EAAgBjqM,EAAUiqM,cAG9B,GAAIF,EAAW,EAAG,CAChB,IAAIgH,EAAWhH,EAAW,EACtB5G,EAAcuH,EAAc,EAAIqG,EAAWjld,KAAKE,IAAI+kd,EAAUrG,GAC9D0B,EAAoBnC,EAAcR,6BAA6B/F,eAC/DmN,EAAgB5G,EAAca,uBAAyBsB,EAAoB/hY,EAAQ4/X,EAAcY,cAAgB,EAErH,OAAOZ,EAAcH,0BAA0B/E,yBAAyB,CACtEv8V,MAAOy9V,EACPhD,cAAe3iV,EAASuwV,EACxB3N,cAAevsJ,EACfwsJ,YAAaA,IAGjB,OAAO,IAER,CACD9vc,IAAK,yCACL5I,MAAO,SAAgD2nH,EAAW4tJ,GAChE,IAAI22C,EAAY32C,EAAU22C,UAEtBq6J,EAAsBppY,EAAKujY,wBAAwB/4V,EAAW4tJ,GAElE,MAAmC,kBAAxBgxM,GAAoCA,GAAuB,GAAKr6J,IAAcq6J,EAChFppY,EAAKqlY,gCAAgC,CAC1CjtM,UAAWA,EACX02C,YAAa,EACbC,UAAWq6J,IAGR,SAIJppY,EA/tCE,CAguCTp0C,iBAEFo0C,EAAK4oC,aAAe,CAClB,aAAc,OACd,iBAAiB,EACjBg9V,oBAAoB,EACpBvB,YAAY,EACZC,WAAW,EACXuC,kBE3wCa,SAAkCr5a,GA8B/C,IA7BA,IAAIy6a,EAAYz6a,EAAKy6a,UACjBrB,EAAep5a,EAAKo5a,aACpB/E,EAA+Br0a,EAAKq0a,6BACpCZ,EAAmBzza,EAAKyza,iBACxBC,EAAkB1za,EAAK0za,gBACvB4F,EAA2Bt5a,EAAKs5a,yBAChCO,EAA6B75a,EAAK65a,2BAClC5G,EAAcjza,EAAKiza,YACnByG,EAAoB15a,EAAK05a,kBACzBrja,EAASrW,EAAKqW,OACdq+Z,EAA4B10a,EAAK00a,0BACjCX,EAAgB/za,EAAK+za,cACrBC,EAAeh0a,EAAKg0a,aACpB0G,EAAa16a,EAAK06a,WAClBX,EAA2B/5a,EAAK+5a,yBAChCJ,EAAuB35a,EAAK25a,qBAC5BC,EAAoB55a,EAAK45a,kBAEzBiC,EAAgB,GAOhBC,EAAqBzH,EAA6ByH,sBAAwBpH,EAA0BoH,qBAEpGC,GAAiB9I,IAAgB6I,EAE5Bx9I,EAAWy1I,EAAez1I,GAAY01I,EAAc11I,IAG3D,IAFA,IAAI09I,EAAWtH,EAA0BzG,yBAAyB3vI,GAEzD+3I,EAAc5C,EAAkB4C,GAAe3C,EAAiB2C,IAAe,CACtF,IAAI4F,EAAc5H,EAA6BpG,yBAAyBoI,GACpEr8K,EAAYq8K,GAAesD,EAAqBjgc,OAAS28b,GAAesD,EAAqBruK,MAAQgzB,GAAYs7I,EAAkBlgc,OAAS4kT,GAAYs7I,EAAkBtuK,KAC1KrtS,EAAMqgU,EAAW,IAAM+3I,EACvBphW,OAAQ,EAGR8mW,GAAiBrB,EAAWz8c,GAC9Bg3G,EAAQylW,EAAWz8c,GAIfq7c,IAA6BA,EAAyB17c,IAAI0gU,EAAU+3I,GAItEphW,EAAQ,CACNiW,OAAQ,OACRh3G,KAAM,EACN0iG,SAAU,WACVqX,IAAK,EACLh5C,MAAO,SAGTggC,EAAQ,CACNiW,OAAQ8wV,EAAStmd,KACjBwe,KAAM+nc,EAAYx0c,OAASoyc,EAC3BjjW,SAAU,WACVqX,IAAK+tV,EAASv0c,OAASsyc,EACvB9kY,MAAOgnY,EAAYvmd,MAGrBgld,EAAWz8c,GAAOg3G,GAItB,IAAIinW,EAAqB,CACvB7F,YAAaA,EACbpD,YAAaA,EACbj5K,UAAWA,EACX/7R,IAAKA,EACLo4C,OAAQA,EACRioR,SAAUA,EACVrpN,MAAOA,GAGLknW,OAAe,GAYdzC,IAAqBzG,GAAiB4G,GAA+BE,EAUxEoC,EAAe/C,EAAa8C,IATvBzB,EAAUx8c,KACbw8c,EAAUx8c,GAAOm7c,EAAa8C,IAGhCC,EAAe1B,EAAUx8c,IAQP,MAAhBk+c,IAAyC,IAAjBA,GAQ5BN,EAAc91c,KAAKo2c,GAIvB,OAAON,GFwpCPxD,cAAe,WACfC,eAAgB,GAChB+C,oBAAqB,IACrBC,iBAAkB,GAClB5D,iBAAkBjC,IAClB8C,kBAtvCe,WACf,OAAO,MAsvCPY,SAAU,aACV4B,0BAA2B,aAC3B3H,kBAAmB,aACnBmG,oBAAqB,EACrBC,sBC/wCa,SAAsCx5a,GACnD,IAAIosa,EAAYpsa,EAAKosa,UACjB6N,EAAqBj6a,EAAKi6a,mBAC1BzrH,EAAkBxuT,EAAKwuT,gBACvB0rH,EAAal6a,EAAKk6a,WAClBC,EAAYn6a,EAAKm6a,UAErB,OAjBoC,IAiBhC3rH,EACK,CACL6rH,mBAAoB3jd,KAAKC,IAAI,EAAGujd,GAChCI,kBAAmB5jd,KAAKE,IAAIw1c,EAAY,EAAG+N,EAAYF,IAGlD,CACLI,mBAAoB3jd,KAAKC,IAAI,EAAGujd,EAAaD,GAC7CK,kBAAmB5jd,KAAKE,IAAIw1c,EAAY,EAAG+N,KDiwC/CV,iBAAkB,GAClBp+Z,KAAM,OACNs/Z,2BAzwCiD,IA0wCjD9J,kBAAmB,OACnBuE,gBAAiB,EACjBE,aAAc,EACdrgW,MAAO,GACPgpB,SAAU,EACVy7U,mBAAmB,GAErBlnY,EAAKimM,UAAoD,KA2NzD+1J,mBAASh8V,GACMA,QGt/CA,SAAS4pY,EAA6Bp8a,GACnD,IAAIosa,EAAYpsa,EAAKosa,UACjB6N,EAAqBj6a,EAAKi6a,mBAC1BzrH,EAAkBxuT,EAAKwuT,gBACvB0rH,EAAal6a,EAAKk6a,WAClBC,EAAYn6a,EAAKm6a,UAOrB,OAFAF,EAAqBvjd,KAAKC,IAAI,EAAGsjd,GApBG,IAsBhCzrH,EACK,CACL6rH,mBAAoB3jd,KAAKC,IAAI,EAAGujd,EAAa,GAC7CI,kBAAmB5jd,KAAKE,IAAIw1c,EAAY,EAAG+N,EAAYF,IAGlD,CACLI,mBAAoB3jd,KAAKC,IAAI,EAAGujd,EAAaD,GAC7CK,kBAAmB5jd,KAAKE,IAAIw1c,EAAY,EAAG+N,EAAY,IClC7D,ICYIkC,EAAkB,SAAUh5J,GAG9B,SAASg5J,IACP,IAAIr8a,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAM0id,GAEtB,IAAK,IAAI33b,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOq8a,EAAgBxkd,WAAak6c,IAAuBsK,IAAkB1hd,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAM3Q,MAAQ,CAC3My0a,eAAgB,EAChBE,YAAa,GACZhka,EAAMgia,kBAAoB,EAAGhia,EAAMkia,iBAAmB,EAAGlia,EAAMsia,eAAiB,EAAGtia,EAAMwia,cAAgB,EAAGxia,EAAMira,WAAa,SAAUz7U,GAC1I,IAAI5kB,EAAc5qE,EAAMzN,MACpBywa,EAAcp4V,EAAYo4V,YAC1Bz9V,EAAWqF,EAAYrF,SACvB8d,EAAOzY,EAAYyY,KACnBggV,EAAWz4V,EAAYy4V,SAG3B,IAAI99V,EAAJ,CAIA,IAAI2lW,EAAwBlra,EAAMmra,kBAC9BC,EAAyBF,EAAsBpH,eAC/CuH,EAAsBH,EAAsBlH,YAE5CsH,EAAyBtra,EAAMmra,kBAC/BrH,EAAiBwH,EAAuBxH,eACxCE,EAAcsH,EAAuBtH,YAMzC,OAAQx0U,EAAM7iI,KACZ,IAAK,YACHq3c,EAAuB,UAAT3gV,EAAmBj+H,KAAKE,IAAI0+c,EAAc,EAAGX,EAAW,GAAKj+c,KAAKE,IAAI06C,EAAMwia,cAAgB,EAAGa,EAAW,GACxH,MACF,IAAK,YACHS,EAA0B,UAATzgV,EAAmBj+H,KAAKC,IAAIy+c,EAAiB,EAAG,GAAK1+c,KAAKC,IAAI26C,EAAMgia,kBAAoB,EAAG,GAC5G,MACF,IAAK,aACH8B,EAA0B,UAATzgV,EAAmBj+H,KAAKE,IAAIw+c,EAAiB,EAAGd,EAAc,GAAK59c,KAAKE,IAAI06C,EAAMkia,iBAAmB,EAAGc,EAAc,GACvI,MACF,IAAK,UACHgB,EAAuB,UAAT3gV,EAAmBj+H,KAAKC,IAAI2+c,EAAc,EAAG,GAAK5+c,KAAKC,IAAI26C,EAAMsia,eAAiB,EAAG,GAInGwB,IAAmBsH,GAA0BpH,IAAgBqH,IAC/D77U,EAAM/F,iBAENzpF,EAAMura,mBAAmB,CAAEzH,eAAgBA,EAAgBE,YAAaA,OAEzEhka,EAAMwra,mBAAqB,SAAUx6a,GACtC,IAAImxa,EAAmBnxa,EAAMmxa,iBACzBC,EAAkBpxa,EAAMoxa,gBACxBK,EAAgBzxa,EAAMyxa,cACtBC,EAAe1xa,EAAM0xa,aAEzB1ia,EAAMgia,kBAAoBG,EAC1Bnia,EAAMkia,iBAAmBE,EACzBpia,EAAMsia,eAAiBG,EACvBzia,EAAMwia,cAAgBE,GAxDjBsI,EAyDJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GA4E/C,OAlJA9qY,IAAU6qY,EAAiBh5J,GAyE3BjyQ,IAAaira,EAAiB,CAAC,CAC7Bp+c,IAAK,mBACL5I,MAAO,SAA0B+zC,GAC/B,IAAIgsa,EAAiBhsa,EAAMgsa,eACvBE,EAAclsa,EAAMksa,YAExB37c,KAAK4iH,SAAS,CACZ+4V,YAAaA,EACbF,eAAgBA,MAGnB,CACDn3c,IAAK,SACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MACdkvC,EAAYqyC,EAAOryC,UACnB9yC,EAAWmlF,EAAOnlF,SAElB88a,EAAmBpjd,KAAK8id,kBACxBrH,EAAiB2H,EAAiB3H,eAClCE,EAAcyH,EAAiBzH,YAEnC,OAAOl3a,gBACL,MACA,CAAE20C,UAAWA,EAAW+nD,UAAWnhI,KAAK4id,YACxCt8a,EAAS,CACPmza,kBAAmBz5c,KAAKmjd,mBACxB1H,eAAgBA,EAChBE,YAAaA,OAIlB,CACDr3c,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKkqC,MAAMm5a,aAAerjd,KAAKkqC,MAAQlqC,KAAKgnC,QAEpD,CACD1iC,IAAK,qBACL5I,MAAO,SAA4B2oT,GACjC,IAAIo3J,EAAiBp3J,EAAMo3J,eACvBE,EAAct3J,EAAMs3J,YACpB4B,EAAUv9c,KAAKkqC,MACfm5a,EAAe9F,EAAQ8F,aACvBC,EAAmB/F,EAAQ+F,iBAGC,oBAArBA,GACTA,EAAiB,CAAE7H,eAAgBA,EAAgBE,YAAaA,IAG7D0H,GACHrjd,KAAK4iH,SAAS,CAAE64V,eAAgBA,EAAgBE,YAAaA,OAG/D,CAAC,CACHr3c,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,OAAI5tJ,EAAUggW,aACL,KAGLhgW,EAAUo4V,iBAAmBxqM,EAAUwqM,gBAAkBp4V,EAAUs4V,cAAgB1qM,EAAU0qM,YACxF,CACLF,eAAgBp4V,EAAUo4V,eAC1BE,YAAat4V,EAAUs4V,aAIpB,SAIJ+G,EAnJa,CAoJpBj+a,iBAEFi+a,EAAgBjhW,aAAe,CAC7BvE,UAAU,EACVmmW,cAAc,EACdroV,KAAM,QACNygV,eAAgB,EAChBE,YAAa,GAEf+G,EAAgB5jM,UAAoD,KAcpE+1J,mBAAS6tC,GAEMA,I,SChLXa,EAAY,SAAU75J,GAGxB,SAAS65J,IACP,IAAIl9a,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAMujd,GAEtB,IAAK,IAAIx4b,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOk9a,EAAUrld,WAAak6c,IAAuBmL,IAAYvid,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAM3Q,MAAQ,CAC/LuqF,OAAQ55E,EAAMzN,MAAMs5a,eAAiB,EACrCloY,MAAO3jC,EAAMzN,MAAMu5a,cAAgB,GAClC9ra,EAAM+ra,UAAY,WACnB,IAAInhW,EAAc5qE,EAAMzN,MACpBy5a,EAAgBphW,EAAYohW,cAC5BC,EAAerhW,EAAYqhW,aAC3BC,EAAWthW,EAAYshW,SAG3B,GAAIlsa,EAAMmsa,YAAa,CAKrB,IAAIC,EAAUpsa,EAAMmsa,YAAYh6H,cAAgB,EAC5Ck6H,EAASrsa,EAAMmsa,YAAYj6H,aAAe,EAE1CshD,EAASz8W,OAAOwrQ,iBAAiBviP,EAAMmsa,cAAgB,GACvDp7U,EAAc9sF,SAASuvV,EAAOziQ,YAAa,KAAO,EAClD7U,EAAej4E,SAASuvV,EAAOt3Q,aAAc,KAAO,EACpD5B,EAAar2E,SAASuvV,EAAOl5Q,WAAY,KAAO,EAChDC,EAAgBt2E,SAASuvV,EAAOj5Q,cAAe,KAAO,EAEtD+xV,EAAYF,EAAU9xV,EAAaC,EACnCgyV,EAAWF,EAASt7U,EAAc7U,IAEjC8vV,GAAiBhsa,EAAM3Q,MAAMuqF,SAAW0yV,IAAcL,GAAgBjsa,EAAM3Q,MAAMs0C,QAAU4oY,KAC/Fvsa,EAAMirE,SAAS,CACb2O,OAAQwyV,EAAU9xV,EAAaC,EAC/B52C,MAAO0oY,EAASt7U,EAAc7U,IAGhCgwV,EAAS,CAAEtyV,OAAQwyV,EAASzoY,MAAO0oY,OAGtCrsa,EAAMwsa,QAAU,SAAUC,GAC3Bzsa,EAAM0sa,WAAaD,GArCdzB,EAsCJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GAmF/C,OAtIA9qY,IAAU0rY,EAAW75J,GAsDrBjyQ,IAAa8ra,EAAW,CAAC,CACvBj/c,IAAK,oBACL5I,MAAO,WACL,IAAIwgT,EAAQl8S,KAAKkqC,MAAMgyQ,MAEnBl8S,KAAKqkd,YAAcrkd,KAAKqkd,WAAWv2C,YAAc9ta,KAAKqkd,WAAWv2C,WAAWzwH,eAAiBr9S,KAAKqkd,WAAWv2C,WAAWzwH,cAAcC,aAAet9S,KAAKqkd,WAAWv2C,sBAAsB9ta,KAAKqkd,WAAWv2C,WAAWzwH,cAAcC,YAAYE,cAIlPx9S,KAAK8jd,YAAc9jd,KAAKqkd,WAAWv2C,WAInC9ta,KAAKskd,qBAAuBC,YAA0BroK,GACtDl8S,KAAKskd,qBAAqBE,kBAAkBxkd,KAAK8jd,YAAa9jd,KAAK0jd,WAEnE1jd,KAAK0jd,eAGR,CACDp/c,IAAK,uBACL5I,MAAO,WACDsE,KAAKskd,sBAAwBtkd,KAAK8jd,aACpC9jd,KAAKskd,qBAAqBG,qBAAqBzkd,KAAK8jd,YAAa9jd,KAAK0jd,aAGzE,CACDp/c,IAAK,SACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MACd5D,EAAWmlF,EAAOnlF,SAClB8yC,EAAYqyC,EAAOryC,UACnBuqY,EAAgBl4V,EAAOk4V,cACvBC,EAAen4V,EAAOm4V,aACtBtoW,EAAQmQ,EAAOnQ,MACfgjW,EAASt+c,KAAKgnC,MACduqF,EAAS+sV,EAAO/sV,OAChBj2C,EAAQgjY,EAAOhjY,MAMfopY,EAAa,CAAEr6V,SAAU,WACzBs6V,EAAc,GAyBlB,OAvBKhB,IACHe,EAAWnzV,OAAS,EACpBozV,EAAYpzV,OAASA,GAGlBqyV,IACHc,EAAWppY,MAAQ,EACnBqpY,EAAYrpY,MAAQA,GAgBf72C,gBACL,MACA,CACE20C,UAAWA,EACX39E,IAAKuE,KAAKmkd,QACV7oW,MAAOxxE,IAAS,GAAI46a,EAAYppW,IAClCh1E,EAASq+a,QAKRpB,EAvIO,CAwId9+a,iBAEF8+a,EAAU9hW,aAAe,CACvBoiW,SAAU,aACVF,eAAe,EACfC,cAAc,EACdtoW,MAAO,IAETioW,EAAUzkM,UAAoD,KAoC/CykM,Q,QChLXqB,EAAe,SAAUl7J,GAG3B,SAASk7J,IACP,IAAIv+a,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAM4kd,GAEtB,IAAK,IAAI75b,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOu+a,EAAa1md,WAAak6c,IAAuBwM,IAAe5jd,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAMkta,SAAW,WACxM,IAAItiW,EAAc5qE,EAAMzN,MACpBnnC,EAAQw/G,EAAYx/G,MACpB+hd,EAAwBviW,EAAYm6V,YACpCA,OAAwC5gd,IAA1Bgpd,EAAsC,EAAIA,EACxDpoa,EAAS6lE,EAAY7lE,OACrBqoa,EAAuBxiW,EAAYoiN,SACnCA,OAAoC7oU,IAAzBipd,EAAqCpta,EAAMzN,MAAM/tC,OAAS,EAAI4od,EAEzEC,EAAwBrta,EAAMsta,uBAC9B1zV,EAASyzV,EAAsBzzV,OAC/Bj2C,EAAQ0pY,EAAsB1pY,MAE9Bi2C,IAAWxuH,EAAMmid,UAAUvgJ,EAAU+3I,IAAgBphY,IAAUv4E,EAAMoid,SAASxgJ,EAAU+3I,KAC1F35c,EAAM2E,IAAIi9T,EAAU+3I,EAAaphY,EAAOi2C,GAEpC70E,GAA8C,oBAA7BA,EAAOuka,mBAC1Bvka,EAAOuka,kBAAkB,CACvBvE,YAAaA,EACb/3I,SAAUA,MAnBXg+I,EAuBJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GAiG/C,OArIA9qY,IAAU+sY,EAAcl7J,GAuCxBjyQ,IAAamta,EAAc,CAAC,CAC1Btgd,IAAK,oBACL5I,MAAO,WACLsE,KAAKold,sBAEN,CACD9gd,IAAK,qBACL5I,MAAO,WACLsE,KAAKold,sBAEN,CACD9gd,IAAK,SACL5I,MAAO,WACL,IAAI4qC,EAAWtmC,KAAKkqC,MAAM5D,SAG1B,MAA2B,oBAAbA,EAA0BA,EAAS,CAAE++a,QAASrld,KAAK6kd,WAAcv+a,IAEhF,CACDhiC,IAAK,uBACL5I,MAAO,WACL,IAAIqH,EAAQ/C,KAAKkqC,MAAMnnC,MAGnBqE,EAAO0iR,sBAAY9pR,MAIvB,GAAIoH,GAAQA,EAAKi2S,eAAiBj2S,EAAKi2S,cAAcC,aAAel2S,aAAgBA,EAAKi2S,cAAcC,YAAYE,YAAa,CAC9H,IAAI8nK,EAAal+c,EAAKk0G,MAAMhgC,MACxBiqY,EAAcn+c,EAAKk0G,MAAMiW,OAWxBxuH,EAAM89c,kBACTz5c,EAAKk0G,MAAMhgC,MAAQ,QAEhBv4E,EAAM69c,mBACTx5c,EAAKk0G,MAAMiW,OAAS,QAGtB,IAAIA,EAASx0H,KAAKqjB,KAAKhZ,EAAK0iV,cACxBxuQ,EAAQv+E,KAAKqjB,KAAKhZ,EAAKyiV,aAU3B,OAPIy7H,IACFl+c,EAAKk0G,MAAMhgC,MAAQgqY,GAEjBC,IACFn+c,EAAKk0G,MAAMiW,OAASg0V,GAGf,CAAEh0V,OAAQA,EAAQj2C,MAAOA,GAEhC,MAAO,CAAEi2C,OAAQ,EAAGj2C,MAAO,KAG9B,CACDh3E,IAAK,oBACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MACdnnC,EAAQ0oH,EAAO1oH,MACfyid,EAAqB/5V,EAAOixV,YAC5BA,OAAqC5gd,IAAvB0pd,EAAmC,EAAIA,EACrD9oa,EAAS+uE,EAAO/uE,OAChB+oa,EAAkBh6V,EAAOk5M,SACzBA,OAA+B7oU,IAApB2pd,EAAgCzld,KAAKkqC,MAAM/tC,OAAS,EAAIspd,EAGvE,IAAK1id,EAAMkB,IAAI0gU,EAAU+3I,GAAc,CACrC,IAAIgJ,EAAwB1ld,KAAKild,uBAC7B1zV,EAASm0V,EAAsBn0V,OAC/Bj2C,EAAQoqY,EAAsBpqY,MAElCv4E,EAAM2E,IAAIi9T,EAAU+3I,EAAaphY,EAAOi2C,GAGpC70E,GAA0D,oBAAzCA,EAAOipa,+BAC1Bjpa,EAAOipa,8BAA8B,CACnCjJ,YAAaA,EACb/3I,SAAUA,SAObigJ,EAtIU,CAuIjBngb,iBAKFmgb,EAAagB,4BAA6B,EAC1ChB,EAAa9lM,UAAoD,KAalD8lM,SCnKR,IAUHiB,GAAoB,WACtB,SAASA,IACP,IAAIlua,EAAQ33C,KAER2yC,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAEjF0pB,IAAgBptB,KAAM6ld,GAEtB7ld,KAAK8ld,iBAAmB,GACxB9ld,KAAK+ld,gBAAkB,GACvB/ld,KAAKgmd,kBAAoB,GACzBhmd,KAAKimd,gBAAkB,GACvBjmd,KAAKkmd,aAAe,EACpBlmd,KAAKmmd,UAAY,EAEjBnmd,KAAK66c,YAAc,SAAUx0a,GAC3B,IAAIlqC,EAAQkqC,EAAKlqC,MAEbmI,EAAMqzC,EAAMyua,WAAW,EAAGjqd,GAE9B,OAAOw7C,EAAMqua,kBAAkBzkd,eAAe+C,GAAOqzC,EAAMqua,kBAAkB1hd,GAAOqzC,EAAM0ua,eAG5Frmd,KAAKwiY,UAAY,SAAU75V,GACzB,IAAIxsC,EAAQwsC,EAAMxsC,MAEdmI,EAAMqzC,EAAMyua,WAAWjqd,EAAO,GAElC,OAAOw7C,EAAMsua,gBAAgB1kd,eAAe+C,GAAOqzC,EAAMsua,gBAAgB3hd,GAAOqzC,EAAM2ua,gBAGxF,IAAI9C,EAAgB7wa,EAAO6wa,cACvBC,EAAe9wa,EAAO8wa,aACtB8C,EAAc5za,EAAO4za,YACrBloM,EAAa1rO,EAAO0rO,WACpBt6P,EAAY4uB,EAAO5uB,UACnB6vG,EAAYjhF,EAAOihF,UACnBp4C,EAAW7oC,EAAO6oC,SAGtBx7E,KAAKwmd,iBAAkC,IAAhBD,EACvBvmd,KAAKymd,gBAAgC,IAAfpoM,EACtBr+Q,KAAK0md,WAAa9yV,GAAa,EAC/B5zH,KAAK2md,UAAYnrY,GAAY,EAC7Bx7E,KAAKomd,WAAaric,GAAa6ic,GAE/B5md,KAAKsmd,eAAiBvpd,KAAKC,IAAIgD,KAAK0md,WAAqC,kBAAlBlD,EAA6BA,EAxD5D,IAyDxBxjd,KAAKqmd,cAAgBtpd,KAAKC,IAAIgD,KAAK2md,UAAmC,kBAAjBlD,EAA4BA,EAvD1D,KAiMzB,OAzHAhsa,IAAaoua,EAAmB,CAAC,CAC/Bvhd,IAAK,QACL5I,MAAO,SAAeipU,GACpB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAElFY,EAAMtE,KAAKomd,WAAWzhJ,EAAU+3I,UAE7B18c,KAAK8ld,iBAAiBxhd,UACtBtE,KAAK+ld,gBAAgBzhd,GAE5BtE,KAAK6md,+BAA+BliJ,EAAU+3I,KAE/C,CACDp4c,IAAK,WACL5I,MAAO,WACLsE,KAAK8ld,iBAAmB,GACxB9ld,KAAK+ld,gBAAkB,GACvB/ld,KAAKgmd,kBAAoB,GACzBhmd,KAAKimd,gBAAkB,GACvBjmd,KAAKmmd,UAAY,EACjBnmd,KAAKkmd,aAAe,IAErB,CACD5hd,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKwmd,kBAEb,CACDlid,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKymd,iBAEb,CACDnid,IAAK,YACL5I,MAAO,SAAmBipU,GACxB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEtF,GAAI1D,KAAKwmd,gBACP,OAAOxmd,KAAKsmd,eAEZ,IAAIr7b,EAAOjrB,KAAKomd,WAAWzhJ,EAAU+3I,GAErC,OAAO18c,KAAK8ld,iBAAiBvkd,eAAe0pB,GAAQluB,KAAKC,IAAIgD,KAAK0md,WAAY1md,KAAK8ld,iBAAiB76b,IAASjrB,KAAKsmd,iBAGrH,CACDhid,IAAK,WACL5I,MAAO,SAAkBipU,GACvB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEtF,GAAI1D,KAAKymd,eACP,OAAOzmd,KAAKqmd,cAEZ,IAAI/5b,EAAQtsB,KAAKomd,WAAWzhJ,EAAU+3I,GAEtC,OAAO18c,KAAK+ld,gBAAgBxkd,eAAe+qB,GAASvvB,KAAKC,IAAIgD,KAAK2md,UAAW3md,KAAK+ld,gBAAgBz5b,IAAUtsB,KAAKqmd,gBAGpH,CACD/hd,IAAK,MACL5I,MAAO,SAAaipU,GAClB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAElFY,EAAMtE,KAAKomd,WAAWzhJ,EAAU+3I,GAEpC,OAAO18c,KAAK8ld,iBAAiBvkd,eAAe+C,KAE7C,CACDA,IAAK,MACL5I,MAAO,SAAaipU,EAAU+3I,EAAaphY,EAAOi2C,GAChD,IAAIjtH,EAAMtE,KAAKomd,WAAWzhJ,EAAU+3I,GAEhCA,GAAe18c,KAAKkmd,eACtBlmd,KAAKkmd,aAAexJ,EAAc,GAEhC/3I,GAAY3kU,KAAKmmd,YACnBnmd,KAAKmmd,UAAYxhJ,EAAW,GAI9B3kU,KAAK8ld,iBAAiBxhd,GAAOitH,EAC7BvxH,KAAK+ld,gBAAgBzhd,GAAOg3E,EAE5Bt7E,KAAK6md,+BAA+BliJ,EAAU+3I,KAE/C,CACDp4c,IAAK,iCACL5I,MAAO,SAAwCipU,EAAU+3I,GAKvD,IAAK18c,KAAKymd,eAAgB,CAExB,IADA,IAAI5L,EAAc,EACT73c,EAAI,EAAGA,EAAIhD,KAAKmmd,UAAWnjd,IAClC63c,EAAc99c,KAAKC,IAAI69c,EAAa76c,KAAKmld,SAASnid,EAAG05c,IAEvD,IAAIoK,EAAY9md,KAAKomd,WAAW,EAAG1J,GACnC18c,KAAKgmd,kBAAkBc,GAAajM,EAEtC,IAAK76c,KAAKwmd,gBAAiB,CAEzB,IADA,IAAIhkF,EAAY,EACPhuT,EAAK,EAAGA,EAAKx0E,KAAKkmd,aAAc1xY,IACvCguT,EAAYzlY,KAAKC,IAAIwlY,EAAWxiY,KAAKkld,UAAUvgJ,EAAUnwP,IAE3D,IAAIuyY,EAAS/md,KAAKomd,WAAWzhJ,EAAU,GACvC3kU,KAAKimd,gBAAgBc,GAAUvkF,KAGlC,CACDl+X,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAKsmd,iBAEb,CACDhid,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKqmd,kBAITR,EAzLe,GA4LTA,MAGf,SAASe,GAAiBjiJ,EAAU+3I,GAClC,OAAO/3I,EAAW,IAAM+3I,EC3MXkI,ICsBXzM,GACQ,WADRA,GAES,YAQT6O,GAAiB,SAAUt9J,GAI7B,SAASs9J,IACP,IAAI3gb,EAEJjZ,IAAgBptB,KAAMgnd,GAEtB,IAAK,IAAIj8b,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAKzB,IAAI0sB,EAAQwqE,IAA2BniH,MAAOqmC,EAAO2gb,EAAe9od,WAAak6c,IAAuB4O,IAAiBhmd,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KA8HxJ,OA5HA2sB,EAAM3Q,MAAQ,CACZsya,aAAa,EACb3xJ,WAAY,EACZC,UAAW,GAEbjwQ,EAAMsva,2CAA4C,EAClDtva,EAAMuva,2BAA6B9Q,IACnCz+Z,EAAM2ga,kBAAoBlC,GAAuB,GAEjDz+Z,EAAMwva,+BAAiC,WACrC,IAAI5kW,EAAc5qE,EAAMzN,MACpBk9a,EAAoB7kW,EAAY6kW,kBAChC3N,EAAoBl3V,EAAYk3V,kBAGpC9ha,EAAMuva,2BAA2B,CAC/Btib,SAAU60a,EACV/xb,QAAS,CACPA,QAAS0/b,EAAkBC,6BAKjC1va,EAAM2ia,0BAA4B,SAAU7+c,GAC1Ck8C,EAAM4ia,oBAAsB9+c,GAG9Bk8C,EAAM2va,qCAAuC,WAC3C,IAAI9jW,EAAe7rE,EAAMzN,MACrBk9a,EAAoB5jW,EAAa4jW,kBACjC71V,EAAS/N,EAAa+N,OACtB2lV,EAAoB1zV,EAAa0zV,kBACjCqQ,EAAe/jW,EAAa+jW,aAC5BjsY,EAAQkoC,EAAaloC,MACrBmoC,EAAc9rE,EAAM3Q,MACpB2gR,EAAalkM,EAAYkkM,WACzBC,EAAYnkM,EAAYmkM,UAG5B,GAAI2/J,GAAgB,EAAG,CACrB,IAAIC,EAAiBJ,EAAkBK,yBAAyB,CAC9DhuW,MAAOy9V,EACPryI,UAAW0iJ,EACXh2V,OAAQA,EACRo2L,WAAYA,EACZC,UAAWA,EACXtsO,MAAOA,IAGLksY,EAAe7/J,aAAeA,GAAc6/J,EAAe5/J,YAAcA,GAC3EjwQ,EAAM+va,mBAAmBF,KAK/B7va,EAAM6ia,UAAY,SAAUrzU,GAI1B,GAAIA,EAAMn6G,SAAW2qB,EAAM4ia,oBAA3B,CAKA5ia,EAAMgwa,iCAMN,IAAIC,EAAejwa,EAAMzN,MACrBk9a,EAAoBQ,EAAaR,kBACjC71V,EAASq2V,EAAar2V,OACtBs2V,EAAoBD,EAAaC,kBACjCvsY,EAAQssY,EAAatsY,MAErBwgY,EAAgBnka,EAAMmwa,eAEtBC,EAAwBX,EAAkBzS,eAC1CqT,EAAcD,EAAsBx2V,OACpC02V,EAAaF,EAAsBzsY,MAEnCqsO,EAAa5qT,KAAKC,IAAI,EAAGD,KAAKE,IAAIgrd,EAAa3sY,EAAQwgY,EAAe30U,EAAMn6G,OAAO26R,aACnFC,EAAY7qT,KAAKC,IAAI,EAAGD,KAAKE,IAAI+qd,EAAcz2V,EAASuqV,EAAe30U,EAAMn6G,OAAO46R,YAMxF,GAAIjwQ,EAAM3Q,MAAM2gR,aAAeA,GAAchwQ,EAAM3Q,MAAM4gR,YAAcA,EAAW,CAKhF,IAAIs0J,EAA6B/0U,EAAM+gV,WAAa/P,GAA0CA,GAGzFxga,EAAM3Q,MAAMsya,aACfuO,GAAkB,GAGpBlwa,EAAMirE,SAAS,CACb02V,aAAa,EACb3xJ,WAAYA,EACZu0J,2BAA4BA,EAC5Bt0J,UAAWA,IAIfjwQ,EAAM2la,wBAAwB,CAC5B31J,WAAYA,EACZC,UAAWA,EACXqgK,WAAYA,EACZD,YAAaA,MAIjBrwa,EAAMmwa,eAAiB/J,WACMjid,IAAzB67C,EAAMmwa,gBACRnwa,EAAMwwa,wBAAyB,EAC/Bxwa,EAAMmwa,eAAiB,GAEvBnwa,EAAMwwa,wBAAyB,EAE1Bxwa,EA+TT,OA3cAkgC,IAAUmvY,EAAgBt9J,GAsJ1BjyQ,IAAauva,EAAgB,CAAC,CAC5B1id,IAAK,iCACL5I,MAAO,WACLsE,KAAKind,2CAA4C,EACjDjnd,KAAK29c,gBAaN,CACDr5c,IAAK,oBACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MACdk9a,EAAoB37V,EAAO27V,kBAC3Bz/J,EAAal8L,EAAOk8L,WACpB4/J,EAAe97V,EAAO87V,aACtB3/J,EAAYn8L,EAAOm8L,UAKlB5nT,KAAKmod,yBACRnod,KAAK8nd,eAAiB/J,MACtB/9c,KAAKmod,wBAAyB,EAC9Bnod,KAAK4iH,SAAS,KAGZ2kW,GAAgB,EAClBvnd,KAAKsnd,wCACI3/J,GAAc,GAAKC,GAAa,IACzC5nT,KAAK0nd,mBAAmB,CAAE//J,WAAYA,EAAYC,UAAWA,IAI/D5nT,KAAKmnd,iCAEL,IAAIiB,EAAyBhB,EAAkBzS,eAC3CqT,EAAcI,EAAuB72V,OACrC02V,EAAaG,EAAuB9sY,MAKxCt7E,KAAKs9c,wBAAwB,CAC3B31J,WAAYA,GAAc,EAC1BC,UAAWA,GAAa,EACxBogK,YAAaA,EACbC,WAAYA,MAGf,CACD3jd,IAAK,qBACL5I,MAAO,SAA4B2iH,EAAW4yJ,GAC5C,IAAIssM,EAAUv9c,KAAKkqC,MACfqnF,EAASgsV,EAAQhsV,OACjB2lV,EAAoBqG,EAAQrG,kBAC5BqQ,EAAehK,EAAQgK,aACvBjsY,EAAQiiY,EAAQjiY,MAChBgjY,EAASt+c,KAAKgnC,MACd2gR,EAAa22J,EAAO32J,WACpBu0J,EAA6BoC,EAAOpC,2BACpCt0J,EAAY02J,EAAO12J,UAQnBs0J,IAA+B/D,KAC7BxwJ,GAAc,GAAKA,IAAe12C,EAAU02C,YAAcA,IAAe3nT,KAAKu6c,oBAAoB5yJ,aACpG3nT,KAAKu6c,oBAAoB5yJ,WAAaA,GAEpCC,GAAa,GAAKA,IAAc32C,EAAU22C,WAAaA,IAAc5nT,KAAKu6c,oBAAoB3yJ,YAChG5nT,KAAKu6c,oBAAoB3yJ,UAAYA,IAKrCr2L,IAAWlT,EAAUkT,QAAU2lV,IAAsB74V,EAAU64V,mBAAqBqQ,IAAiBlpW,EAAUkpW,cAAgBjsY,IAAU+iC,EAAU/iC,OACrJt7E,KAAKsnd,uCAIPtnd,KAAKmnd,mCAEN,CACD7id,IAAK,uBACL5I,MAAO,WACDsE,KAAKq5c,gCACP9yU,aAAavmI,KAAKq5c,kCAGrB,CACD/0c,IAAK,SACL5I,MAAO,WACL,IAAIgid,EAAU19c,KAAKkqC,MACfgza,EAAaQ,EAAQR,WACrBzK,EAAYiL,EAAQjL,UACpB2U,EAAoB1J,EAAQ0J,kBAC5BhuY,EAAYskY,EAAQtkY,UACpBm4C,EAASmsV,EAAQnsV,OACjB82V,EAAyB3K,EAAQ2K,uBACjCpnb,EAAKy8a,EAAQz8a,GACb29a,EAAoBlB,EAAQkB,kBAC5BtjW,EAAQoiW,EAAQpiW,MAChBgtW,EAAuB5K,EAAQ4K,qBAC/BhtY,EAAQoiY,EAAQpiY,MAChBujY,EAAU7+c,KAAKgnC,MACfsya,EAAcuF,EAAQvF,YACtB3xJ,EAAak3J,EAAQl3J,WACrBC,EAAYi3J,EAAQj3J,WAIpB5nT,KAAKuod,yBAA2B9V,GAAazyc,KAAKwod,iCAAmCpB,GAAqBpnd,KAAKind,6CACjHjnd,KAAKuod,uBAAyB9V,EAC9Bzyc,KAAKwod,+BAAiCpB,EACtCpnd,KAAKind,2CAA4C,EAEjDG,EAAkBqB,gCAGpB,IAAIC,EAAyBtB,EAAkBzS,eAC3CqT,EAAcU,EAAuBn3V,OACrC02V,EAAaS,EAAuBptY,MAKpC/gE,EAAOxd,KAAKC,IAAI,EAAG2qT,EAAa0gK,GAChC/zV,EAAMv3H,KAAKC,IAAI,EAAG4qT,EAAY0gK,GAC9B9tc,EAAQzd,KAAKE,IAAIgrd,EAAYtgK,EAAarsO,EAAQ+sY,GAClD9zV,EAASx3H,KAAKE,IAAI+qd,EAAapgK,EAAYr2L,EAAS+2V,GAEpDjJ,EAAoB9tV,EAAS,GAAKj2C,EAAQ,EAAI8rY,EAAkBuB,cAAc,CAChFp3V,OAAQgD,EAASD,EACjBglV,YAAaA,EACbh+X,MAAO9gE,EAAQD,EACf1C,EAAG0C,EACHixB,EAAG8oF,IACA,GAEDs0V,EAAkB,CACpBztY,UAAW,aACXzB,UAAW,MACX63C,OAAQ2rV,EAAa,OAAS3rV,EAC9BtU,SAAU,WACV6nP,wBAAyB,QACzBxpR,MAAOA,EACP0jY,WAAY,aAMVG,EAAwB6I,EAAcz2V,EAASvxH,KAAK8nd,eAAiB,EACrE1I,EAA0B6I,EAAa3sY,EAAQt7E,KAAK8nd,eAAiB,EAUzE,OAHAc,EAAgB3+U,UAAYg+U,EAAa9I,GAAyB7jY,EAAQ,SAAW,OACrFstY,EAAgBrhK,UAAYygK,EAAc5I,GAA2B7tV,EAAS,SAAW,OAElF9sF,gBACL,MACA,CACEhpC,IAAKuE,KAAKs6c,0BACV,aAAct6c,KAAKkqC,MAAM,cACzBkvC,UAAW2B,kBAAK,+BAAgC3B,GAChDn4C,GAAIA,EACJu+a,SAAUx/c,KAAKw6c,UACf94Z,KAAM,OACN45D,MAAOxxE,IAAS,GAAI8+a,EAAiBttW,GACrCgpB,SAAU,GACZmuU,EAAY,GAAKhua,gBACf,MACA,CACE20C,UAAW,qDACXkiC,MAAO,CACLiW,OAAQy2V,EACRlxM,UAAWkxM,EACX1rY,SAAU2rY,EACV59V,SAAU,SACVgK,cAAeilV,EAAc,OAAS,GACtCh+X,MAAO2sY,IAEX5I,GAEY,IAAd5M,GAAmBmM,OAYtB,CACDt6c,IAAK,iCACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETA,KAAKq5c,gCACP9yU,aAAavmI,KAAKq5c,gCAGpBr5c,KAAKq5c,+BAAiCxga,YAAW,YAI/Cgva,EAHwBzkW,EAAOl5E,MAAM29a,oBAGnB,GAElBzkW,EAAOi2V,+BAAiC,KACxCj2V,EAAOR,SAAS,CACd02V,aAAa,MA5YI,OAgZtB,CACDh1c,IAAK,0BACL5I,MAAO,SAAiCitC,GACtC,IAAI46E,EAASvjH,KAET2nT,EAAah/Q,EAAMg/Q,WACnBC,EAAYj/Q,EAAMi/Q,UAClBogK,EAAcr/a,EAAMq/a,YACpBC,EAAat/a,EAAMs/a,WAEvBjod,KAAKs4c,kBAAkB,CACrB1za,SAAU,SAAkB6K,GAC1B,IAAIk4Q,EAAal4Q,EAAMk4Q,WACnBC,EAAYn4Q,EAAMm4Q,UAClBk2J,EAAUv6V,EAAOr5E,MACjBqnF,EAASusV,EAAQvsV,QAKrBiuV,EAJe1B,EAAQ0B,UAId,CACPvpK,aAAc1kL,EACd6N,YALU0+U,EAAQxiY,MAMlBs6N,aAAcoyK,EACdrgK,WAAYA,EACZC,UAAWA,EACX/R,YAAaoyK,KAGjBvgc,QAAS,CACPigS,WAAYA,EACZC,UAAWA,OAIhB,CACDtjT,IAAK,qBACL5I,MAAO,SAA4B2oT,GACjC,IAAIsD,EAAatD,EAAMsD,WACnBC,EAAYvD,EAAMuD,UAElBv2L,EAAW,CACb6qV,2BAA4B/D,IAG1BxwJ,GAAc,IAChBt2L,EAASs2L,WAAaA,GAGpBC,GAAa,IACfv2L,EAASu2L,UAAYA,IAGnBD,GAAc,GAAKA,IAAe3nT,KAAKgnC,MAAM2gR,YAAcC,GAAa,GAAKA,IAAc5nT,KAAKgnC,MAAM4gR,YACxG5nT,KAAK4iH,SAASyO,MAGhB,CAAC,CACH/sH,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,OAA4B,IAAxB5tJ,EAAUovV,WAA6C,IAAzBxhM,EAAU02C,YAA4C,IAAxB12C,EAAU22C,UAK/DvkM,EAAUskM,aAAe12C,EAAU02C,YAActkM,EAAUukM,YAAc32C,EAAU22C,UACrF,CACLD,WAAoC,MAAxBtkM,EAAUskM,WAAqBtkM,EAAUskM,WAAa12C,EAAU02C,WAC5EC,UAAkC,MAAvBvkM,EAAUukM,UAAoBvkM,EAAUukM,UAAY32C,EAAU22C,WAItE,KAXE,CACLD,WAAY,EACZC,UAAW,OAaZo/J,EA5cY,CA6cnBvib,iBAEFuib,GAAevlW,aAAe,CAC5B,aAAc,OACd4mW,uBAAwB,EACxBzJ,kBAAmB,WACjB,OAAO,MAETY,SAAU,WACR,OAAO,MAET/F,kBAAmB,WACjB,OAAO,MAETvC,kBAAmB,OACnBqQ,cAAe,EACfjsW,MAAO,GACPgtW,qBAAsB,GAExBtB,GAAeloM,UAiGX,GAGJ+1J,mBAASmyC,IAEMA,UC5iBA6B,GApDD,WACZ,SAASA,EAAQxib,GACf,IAAIkrF,EAASlrF,EAAKkrF,OACdj2C,EAAQj1C,EAAKi1C,MACbzjE,EAAIwuB,EAAKxuB,EACT2zB,EAAInF,EAAKmF,EAEbpe,IAAgBptB,KAAM6od,GAEtB7od,KAAKuxH,OAASA,EACdvxH,KAAKs7E,MAAQA,EACbt7E,KAAK6X,EAAIA,EACT7X,KAAKwrC,EAAIA,EAETxrC,KAAK8od,UAAY,GACjB9od,KAAK4nB,SAAW,GAkClB,OA5BA6vB,IAAaoxa,EAAS,CAAC,CACrBvkd,IAAK,eACL5I,MAAO,SAAsBitC,GAC3B,IAAIxsC,EAAQwsC,EAAMxsC,MAEb6D,KAAK8od,UAAU3sd,KAClB6D,KAAK8od,UAAU3sd,IAAS,EACxB6D,KAAK4nB,SAASxb,KAAKjQ,MAMtB,CACDmI,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAK4nB,WAKb,CACDtjB,IAAK,WACL5I,MAAO,WACL,OAAOsE,KAAK6X,EAAI,IAAM7X,KAAKwrC,EAAI,IAAMxrC,KAAKs7E,MAAQ,IAAMt7E,KAAKuxH,WAI1Ds3V,EAjDK,GCSVE,GAAiB,WACnB,SAASA,IACP,IAAIC,EAActld,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GATlE,IAWf0pB,IAAgBptB,KAAM+od,GAEtB/od,KAAKipd,aAAeD,EAEpBhpd,KAAKkpd,cAAgB,GACrBlpd,KAAKmpd,UAAY,GAkHnB,OAzGA1xa,IAAasxa,EAAgB,CAAC,CAC5Bzkd,IAAK,iBACL5I,MAAO,SAAwB2qC,GAC7B,IAAIkrF,EAASlrF,EAAKkrF,OACdj2C,EAAQj1C,EAAKi1C,MACbzjE,EAAIwuB,EAAKxuB,EACT2zB,EAAInF,EAAKmF,EAET9jB,EAAU,GASd,OAPA1nB,KAAKopd,YAAY,CAAE73V,OAAQA,EAAQj2C,MAAOA,EAAOzjE,EAAGA,EAAG2zB,EAAGA,IAAK9+B,SAAQ,SAAUg3P,GAC/E,OAAOA,EAAQ2lN,iBAAiB38c,SAAQ,SAAUvQ,GAChDurB,EAAQvrB,GAASA,QAKd46S,IAAarvR,GAAS1e,KAAI,SAAU7M,GACzC,OAAOurB,EAAQvrB,QAMlB,CACDmI,IAAK,kBACL5I,MAAO,SAAyBitC,GAC9B,IAAIxsC,EAAQwsC,EAAMxsC,MAElB,OAAO6D,KAAKkpd,cAAc/sd,KAK3B,CACDmI,IAAK,cACL5I,MAAO,SAAqB+zC,GAa1B,IAZA,IAAI8hF,EAAS9hF,EAAM8hF,OACfj2C,EAAQ7rC,EAAM6rC,MACdzjE,EAAI43B,EAAM53B,EACV2zB,EAAIiE,EAAMjE,EAEV89a,EAAgBvsd,KAAKwjB,MAAM1I,EAAI7X,KAAKipd,cACpCM,EAAexsd,KAAKwjB,OAAO1I,EAAIyjE,EAAQ,GAAKt7E,KAAKipd,cACjDO,EAAgBzsd,KAAKwjB,MAAMirB,EAAIxrC,KAAKipd,cACpCQ,EAAe1sd,KAAKwjB,OAAOirB,EAAI+lF,EAAS,GAAKvxH,KAAKipd,cAElD/xP,EAAW,GAENwyP,EAAWJ,EAAeI,GAAYH,EAAcG,IAC3D,IAAK,IAAIC,EAAWH,EAAeG,GAAYF,EAAcE,IAAY,CACvE,IAAIrld,EAAMold,EAAW,IAAMC,EAEtB3pd,KAAKmpd,UAAU7kd,KAClBtE,KAAKmpd,UAAU7kd,GAAO,IAAIukd,GAAQ,CAChCt3V,OAAQvxH,KAAKipd,aACb3tY,MAAOt7E,KAAKipd,aACZpxc,EAAG6xc,EAAW1pd,KAAKipd,aACnBz9a,EAAGm+a,EAAW3pd,KAAKipd,gBAIvB/xP,EAAS9qN,KAAKpM,KAAKmpd,UAAU7kd,IAIjC,OAAO4yN,IAKR,CACD5yN,IAAK,uBACL5I,MAAO,WACL,OAAOq7S,IAAa/2S,KAAKmpd,WAAWtnd,SAKrC,CACDyC,IAAK,WACL5I,MAAO,WACL,IAAIi8C,EAAQ33C,KAEZ,OAAO+2S,IAAa/2S,KAAKmpd,WAAWngd,KAAI,SAAU7M,GAChD,OAAOw7C,EAAMwxa,UAAUhtd,GAAO8E,gBAMjC,CACDqD,IAAK,eACL5I,MAAO,SAAsB2oT,GAC3B,IAAIulK,EAAgBvlK,EAAMulK,cACtBztd,EAAQkoT,EAAMloT,MAElB6D,KAAKkpd,cAAc/sd,GAASytd,EAE5B5pd,KAAKopd,YAAYQ,GAAel9c,SAAQ,SAAUg3P,GAChD,OAAOA,EAAQmmN,aAAa,CAAE1td,MAAOA,WAKpC4sd,EA3HY,GA8HNA,MCpIA,SAAS/S,GAAyB3va,GAC/C,IAAIyjb,EAAazjb,EAAKozE,MAClBA,OAAuB39G,IAAfgud,EAA2B,OAASA,EAC5CC,EAAa1jb,EAAK0jb,WAClBrX,EAAWrsa,EAAKqsa,SAChBwB,EAAgB7ta,EAAK6ta,cACrBC,EAAgB9ta,EAAK8ta,cAErBI,EAAYwV,EACZvV,EAAYD,EAAYL,EAAgBxB,EAE5C,OAAQj5V,GACN,IAAK,QACH,OAAO86V,EACT,IAAK,MACH,OAAOC,EACT,IAAK,SACH,OAAOD,GAAaL,EAAgBxB,GAAY,EAClD,QACE,OAAO31c,KAAKC,IAAIw3c,EAAWz3c,KAAKE,IAAIs3c,EAAWJ,KCdrD,IAAIr2c,GAAa,SAAU4rT,GAGzB,SAAS5rT,EAAWosC,EAAOhhC,GACzBkkB,IAAgBptB,KAAMlC,GAEtB,IAAI65C,EAAQwqE,IAA2BniH,MAAOlC,EAAWI,WAAak6c,IAAuBt6c,IAAakD,KAAKhB,KAAMkqC,EAAOhhC,IAU5H,OARAyuC,EAAMuxa,cAAgB,GACtBvxa,EAAMqya,yBAA2B,GAGjCrya,EAAMwha,WAAa,GAEnBxha,EAAMsya,mBAAqBtya,EAAMsya,mBAAmBnoc,KAAK61B,GACzDA,EAAMuya,sBAAwBvya,EAAMuya,sBAAsBpoc,KAAK61B,GACxDA,EAsKT,OArLAkgC,IAAU/5E,EAAY4rT,GAkBtBjyQ,IAAa35C,EAAY,CAAC,CACxBwG,IAAK,cACL5I,MAAO,gBACwBI,IAAzBkE,KAAKmqd,iBACPnqd,KAAKmqd,gBAAgBxM,gBAMxB,CACDr5c,IAAK,iCACL5I,MAAO,WACLsE,KAAKm5c,WAAa,GAClBn5c,KAAKmqd,gBAAgBC,mCAKtB,CACD9ld,IAAK,SACL5I,MAAO,WACL,IAAIwuC,EAAQgT,IAAyBl9C,KAAKkqC,MAAO,IAEjD,OAAOzF,gBAAoBuib,GAAgBl9a,IAAS,CAClDs9a,kBAAmBpnd,KACnB6nd,kBAAmB7nd,KAAKiqd,mBACxBxud,IAAKuE,KAAKkqd,uBACThgb,MAKJ,CACD5lC,IAAK,+BACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MAMd8Q,EC5EK,SAAsC3U,GAUnD,IATA,IAAIosa,EAAYpsa,EAAKosa,UACjB4X,EAA4Bhkb,EAAKgkb,0BACjCrB,EAAc3ib,EAAK2ib,YAEnBsB,EAAe,GACfC,EAAiB,IAAIxB,GAAeC,GACpCz3V,EAAS,EACTj2C,EAAQ,EAEHn/E,EAAQ,EAAGA,EAAQs2c,EAAWt2c,IAAS,CAC9C,IAAIytd,EAAgBS,EAA0B,CAAElud,MAAOA,IAEvD,GAA4B,MAAxBytd,EAAcr4V,QAAkBn1E,MAAMwta,EAAcr4V,SAAkC,MAAvBq4V,EAActuY,OAAiBl/B,MAAMwta,EAActuY,QAA6B,MAAnBsuY,EAAc/xc,GAAaukC,MAAMwta,EAAc/xc,IAAyB,MAAnB+xc,EAAcp+a,GAAa4Q,MAAMwta,EAAcp+a,GAClO,MAAM5jC,MAAM,sCAAwCzL,EAAQ,gBAAkBytd,EAAc/xc,EAAI,OAAS+xc,EAAcp+a,EAAI,WAAao+a,EAActuY,MAAQ,YAAcsuY,EAAcr4V,QAG5LA,EAASx0H,KAAKC,IAAIu0H,EAAQq4V,EAAcp+a,EAAIo+a,EAAcr4V,QAC1Dj2C,EAAQv+E,KAAKC,IAAIs+E,EAAOsuY,EAAc/xc,EAAI+xc,EAActuY,OAExDgvY,EAAanud,GAASytd,EACtBW,EAAeC,aAAa,CAC1BZ,cAAeA,EACfztd,MAAOA,IAIX,MAAO,CACLmud,aAAcA,EACd/4V,OAAQA,EACRg5V,eAAgBA,EAChBjvY,MAAOA,GD6CMmvY,CAA8B,CACvChY,UANchnV,EAAOgnV,UAOrB4X,0BAN8B5+V,EAAO4+V,0BAOrCrB,YANgBv9V,EAAOu9V,cASzBhpd,KAAKkpd,cAAgBlua,EAAKsva,aAC1Btqd,KAAK0qd,gBAAkB1va,EAAKuva,eAC5Bvqd,KAAK+jd,QAAU/oa,EAAKu2E,OACpBvxH,KAAKgkd,OAAShpa,EAAKsgC,QAOpB,CACDh3E,IAAK,yBACL5I,MAAO,WACL,OAAOsE,KAAKgqd,2BAOb,CACD1ld,IAAK,2BACL5I,MAAO,SAAkC2qC,GACvC,IAAIozE,EAAQpzE,EAAKozE,MACborN,EAAYx+R,EAAKw+R,UACjBtzM,EAASlrF,EAAKkrF,OACdo2L,EAAathR,EAAKshR,WAClBC,EAAYvhR,EAAKuhR,UACjBtsO,EAAQj1C,EAAKi1C,MACbm3X,EAAYzyc,KAAKkqC,MAAMuoa,UAG3B,GAAI5tI,GAAa,GAAKA,EAAY4tI,EAAW,CAC3C,IAAI6X,EAAetqd,KAAKkpd,cAAcrkJ,GAEtCld,EAAaquJ,GAAyB,CACpCv8V,MAAOA,EACPswW,WAAYO,EAAazyc,EACzB66b,SAAU4X,EAAahvY,MACvB44X,cAAe54X,EACf64X,cAAexsJ,EACfysJ,YAAavvI,IAGfjd,EAAYouJ,GAAyB,CACnCv8V,MAAOA,EACPswW,WAAYO,EAAa9+a,EACzBkna,SAAU4X,EAAa/4V,OACvB2iV,cAAe3iV,EACf4iV,cAAevsJ,EACfwsJ,YAAavvI,IAIjB,MAAO,CACLld,WAAYA,EACZC,UAAWA,KAGd,CACDtjT,IAAK,eACL5I,MAAO,WACL,MAAO,CACL61H,OAAQvxH,KAAK+jd,QACbzoY,MAAOt7E,KAAKgkd,UAGf,CACD1/c,IAAK,gBACL5I,MAAO,SAAuBitC,GAC5B,IAAIy6E,EAASpjH,KAETuxH,EAAS5oF,EAAM4oF,OACf+nV,EAAc3wa,EAAM2wa,YACpBh+X,EAAQ3yC,EAAM2yC,MACdzjE,EAAI8wB,EAAM9wB,EACV2zB,EAAI7C,EAAM6C,EACV+xa,EAAUv9c,KAAKkqC,MACfygb,EAAoBpN,EAAQoN,kBAC5BlL,EAAelC,EAAQkC,aAW3B,OAPAz/c,KAAKgqd,yBAA2Bhqd,KAAK0qd,gBAAgBrB,eAAe,CAClE93V,OAAQA,EACRj2C,MAAOA,EACPzjE,EAAGA,EACH2zB,EAAGA,IAGEm/a,EAAkB,CACvB7J,UAAW9gd,KAAKm5c,WAChBsG,aAAcA,EACd4K,0BAA2B,SAAmC56a,GAC5D,IAAItzC,EAAQszC,EAAMtzC,MAClB,OAAOinH,EAAOsnW,gBAAgBE,gBAAgB,CAAEzud,MAAOA,KAEzDurB,QAAS1nB,KAAKgqd,yBACd1Q,YAAaA,MAGhB,CACDh1c,IAAK,qBACL5I,MAAO,SAA4B49c,GAC5BA,IACHt5c,KAAKm5c,WAAa,MAGrB,CACD70c,IAAK,wBACL5I,MAAO,SAA+BD,GACpCuE,KAAKmqd,gBAAkB1ud,MAIpBqC,EAtLQ,CAuLf2mC,iBAEF3mC,GAAW2jH,aAAe,CACxB,aAAc,OACdkpW,kBAwCF,SAAkCtmK,GAChC,IAAIy8J,EAAYz8J,EAAMy8J,UAClBrB,EAAep7J,EAAMo7J,aACrB4K,EAA4BhmK,EAAMgmK,0BAClC3ic,EAAU28R,EAAM38R,QAChB4xb,EAAcj1J,EAAMi1J,YAExB,OAAO5xb,EAAQ1e,KAAI,SAAU7M,GAC3B,IAAImud,EAAeD,EAA0B,CAAElud,MAAOA,IAElD0ud,EAAoB,CACtB1ud,MAAOA,EACPm9c,YAAaA,EACbh1c,IAAKnI,EACLm/G,MAAO,CACLiW,OAAQ+4V,EAAa/4V,OACrBh3G,KAAM+vc,EAAazyc,EACnBolG,SAAU,WACVqX,IAAKg2V,EAAa9+a,EAClB8vC,MAAOgvY,EAAahvY,QAQxB,OAAIg+X,GACIn9c,KAAS2kd,IACbA,EAAU3kd,GAASsjd,EAAaoL,IAG3B/J,EAAU3kd,IAEVsjd,EAAaoL,MAErBt/c,QAAO,SAAUi3c,GAClB,QAASA,OA1Eb1kd,GAAWghR,UAkCP,GE/OWhhR,ICUXgtd,GAAc,SAAUphK,GAG1B,SAASohK,EAAY5gb,EAAOhhC,GAC1BkkB,IAAgBptB,KAAM8qd,GAEtB,IAAInza,EAAQwqE,IAA2BniH,MAAO8qd,EAAY5sd,WAAak6c,IAAuB0S,IAAc9pd,KAAKhB,KAAMkqC,EAAOhhC,IAG9H,OADAyuC,EAAMoza,eAAiBpza,EAAMoza,eAAejpc,KAAK61B,GAC1CA,EAiET,OAzEAkgC,IAAUizY,EAAaphK,GAWvBjyQ,IAAaqza,EAAa,CAAC,CACzBxmd,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIoN,EAASzrH,KAAKkqC,MACd8gb,EAAiBv/V,EAAOu/V,eACxBC,EAAiBx/V,EAAOw/V,eACxBtQ,EAAclvV,EAAOkvV,YACrBr/X,EAAQmwC,EAAOnwC,MAGf0vY,IAAmB3sW,EAAU2sW,gBAAkBC,IAAmB5sW,EAAU4sW,gBAAkBtQ,IAAgBt8V,EAAUs8V,aAAer/X,IAAU+iC,EAAU/iC,OACzJt7E,KAAKkrd,kBACPlrd,KAAKkrd,iBAAiBjK,sBAI3B,CACD38c,IAAK,SACL5I,MAAO,WACL,IAAI6hd,EAAUv9c,KAAKkqC,MACf5D,EAAWi3a,EAAQj3a,SACnB0kb,EAAiBzN,EAAQyN,eACzBC,EAAiB1N,EAAQ0N,eACzBtQ,EAAc4C,EAAQ5C,YACtBr/X,EAAQiiY,EAAQjiY,MAGhB6vY,EAAqBF,GAAkB,EAEvCG,EAAqBJ,EAAiBjud,KAAKE,IAAI+td,EAAgB1vY,GAASA,EAExEu/X,EAAcv/X,EAAQq/X,EAO1B,OANAE,EAAc99c,KAAKC,IAAImud,EAAoBtQ,GAC3CA,EAAc99c,KAAKE,IAAImud,EAAoBvQ,GAC3CA,EAAc99c,KAAKwjB,MAAMs6b,GAIlBv0a,EAAS,CACd+kb,cAHkBtud,KAAKE,IAAIq+E,EAAOu/X,EAAcF,GAIhDE,YAAaA,EACbyQ,eAAgB,WACd,OAAOzQ,GAET0Q,cAAevrd,KAAK+qd,mBAGvB,CACDzmd,IAAK,iBACL5I,MAAO,SAAwBw+C,GAC7B,GAAIA,GAA4C,oBAA5BA,EAAM+ma,kBACxB,MAAMr5c,MAAM,iFAGd5H,KAAKkrd,iBAAmBhxa,EAEpBl6C,KAAKkrd,kBACPlrd,KAAKkrd,iBAAiBjK,wBAKrB6J,EA1ES,CA2EhBrmb,iBAGFqmb,GAAYhsM,UAuBR,GC/GWgsM,I,sBCcXU,GAAiB,SAAU9hK,GAG7B,SAAS8hK,EAAethb,EAAOhhC,GAC7BkkB,IAAgBptB,KAAMwrd,GAEtB,IAAI7za,EAAQwqE,IAA2BniH,MAAOwrd,EAAettd,WAAak6c,IAAuBoT,IAAiBxqd,KAAKhB,KAAMkqC,EAAOhhC,IAMpI,OAJAyuC,EAAM8za,sBAAwBrV,IAE9Bz+Z,EAAM+za,gBAAkB/za,EAAM+za,gBAAgB5pc,KAAK61B,GACnDA,EAAMoza,eAAiBpza,EAAMoza,eAAejpc,KAAK61B,GAC1CA,EAwGT,OAnHAkgC,IAAU2zY,EAAgB9hK,GAc1BjyQ,IAAa+za,EAAgB,CAAC,CAC5Blnd,IAAK,yBACL5I,MAAO,SAAgCiwd,GACrC3rd,KAAKyrd,sBAAwBrV,IAEzBuV,GACF3rd,KAAK4rd,SAAS5rd,KAAK6rd,wBAAyB7rd,KAAK8rd,0BAGpD,CACDxnd,IAAK,SACL5I,MAAO,WAIL,OAAO4qC,EAHQtmC,KAAKkqC,MAAM5D,UAGV,CACdylb,eAAgB/rd,KAAK0rd,gBACrBH,cAAevrd,KAAK+qd,mBAGvB,CACDzmd,IAAK,sBACL5I,MAAO,SAA6Bswd,GAClC,IAAI5oW,EAASpjH,KAETisd,EAAejsd,KAAKkqC,MAAM+hb,aAG9BD,EAAet/c,SAAQ,SAAUw/c,GAC/B,IAAIlqU,EAAUiqU,EAAaC,GACvBlqU,GACFA,EAAQzrE,MAAK,YAgIhB,SAAwB8tO,GAC7B,IAAI8nK,EAAyB9nK,EAAM8nK,uBAC/BC,EAAwB/nK,EAAM+nK,sBAC9B7L,EAAal8J,EAAMk8J,WACnBC,EAAYn8J,EAAMm8J,UAEtB,QAASD,EAAa6L,GAAyB5L,EAAY2L,IAnI7CE,CAAe,CACjBF,uBAAwB/oW,EAAOyoW,wBAC/BO,sBAAuBhpW,EAAO0oW,uBAC9BvL,WAAY2L,EAAc3L,WAC1BC,UAAW0L,EAAc1L,aAErBp9V,EAAO8nW,kBAkNlB,SAA8C5xY,GACnD,IAAIipN,EAAe7+R,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEnF4od,EAAuD,oBAAhChzY,EAAU2nY,kBAAmC3nY,EAAU2nY,kBAAoB3nY,EAAUizY,oBAE5GD,EACFA,EAActrd,KAAKs4E,EAAWipN,GAE9BjpN,EAAUqkY,cAzNE6O,CAAqCppW,EAAO8nW,iBAAkB9nW,EAAOyoW,iCAOhF,CACDvnd,IAAK,kBACL5I,MAAO,SAAyB2qC,GAC9B,IAAIk6a,EAAal6a,EAAKk6a,WAClBC,EAAYn6a,EAAKm6a,UAErBxgd,KAAK6rd,wBAA0BtL,EAC/Bvgd,KAAK8rd,uBAAyBtL,EAE9Bxgd,KAAK4rd,SAASrL,EAAYC,KAE3B,CACDl8c,IAAK,WACL5I,MAAO,SAAkB6kd,EAAYC,GACnC,IAAI73a,EACA46E,EAASvjH,KAETyrH,EAASzrH,KAAKkqC,MACduib,EAAchhW,EAAOghW,YACrBC,EAAmBjhW,EAAOihW,iBAC1B1R,EAAWvvV,EAAOuvV,SAClBvhN,EAAYhuI,EAAOguI,UAGnBuyN,EAmGH,SAA+BhnH,GAYpC,IAXA,IAAIynH,EAAcznH,EAAMynH,YACpBC,EAAmB1nH,EAAM0nH,iBACzB1R,EAAWh2G,EAAMg2G,SACjBuF,EAAav7G,EAAMu7G,WACnBC,EAAYx7G,EAAMw7G,UAElBwL,EAAiB,GAEjBW,EAAkB,KAClBC,EAAiB,KAEZzwd,EAAQokd,EAAYpkd,GAASqkd,EAAWrkd,IAAS,CAC3Cswd,EAAY,CAAEtwd,MAAOA,IAOJ,OAAnBywd,IACTZ,EAAe5/c,KAAK,CAClBm0c,WAAYoM,EACZnM,UAAWoM,IAGbD,EAAkBC,EAAiB,OAVnCA,EAAiBzwd,EACO,OAApBwwd,IACFA,EAAkBxwd,IAcxB,GAAuB,OAAnBywd,EAAyB,CAG3B,IAFA,IAAIC,EAAqB9vd,KAAKE,IAAIF,KAAKC,IAAI4vd,EAAgBD,EAAkBD,EAAmB,GAAI1R,EAAW,GAEtG5xD,EAASwjE,EAAiB,EAAGxjE,GAAUyjE,IACzCJ,EAAY,CAAEtwd,MAAOitZ,IADwCA,IAEhEwjE,EAAiBxjE,EAMrB4iE,EAAe5/c,KAAK,CAClBm0c,WAAYoM,EACZnM,UAAWoM,IAMf,GAAIZ,EAAenqd,OAGjB,IAFA,IAAIird,EAAqBd,EAAe,GAEjCc,EAAmBtM,UAAYsM,EAAmBvM,WAAa,EAAImM,GAAoBI,EAAmBvM,WAAa,GAAG,CAC/H,IAAIwM,EAAUD,EAAmBvM,WAAa,EAE9C,GAAKkM,EAAY,CAAEtwd,MAAO4wd,IAGxB,MAFAD,EAAmBvM,WAAawM,EAOtC,OAAOf,EApKkBgB,CAAsB,CACzCP,YAAaA,EACbC,iBAAkBA,EAClB1R,SAAUA,EACVuF,WAAYxjd,KAAKC,IAAI,EAAGujd,EAAa9mN,GACrC+mN,UAAWzjd,KAAKE,IAAI+9c,EAAW,EAAGwF,EAAY/mN,KAI5CwzN,GAA0Btkb,EAAQ,IAAIr9B,OAAOrD,MAAM0gC,EAAOg3D,KAAmBqsX,EAAehjd,KAAI,SAAUymC,GAG5G,MAAO,CAFUA,EAAM8wa,WACP9wa,EAAM+wa,gBAIxBxgd,KAAKyrd,sBAAsB,CACzB7mb,SAAU,WACR2+E,EAAO2pW,oBAAoBlB,IAE7Btkc,QAAS,CAAEulc,uBAAwBA,OAGtC,CACD3od,IAAK,iBACL5I,MAAO,SAAwByxd,GAC7Bntd,KAAKkrd,iBAAmBiC,MAIrB3B,EApHY,CAqHnB/mb,iBAOF+mb,GAAe/pW,aAAe,CAC5BirW,iBAAkB,GAClB1R,SAAU,EACVvhN,UAAW,IAEE+xN,UACfA,GAAe1sM,UA2CX,GC3LW0sM,I,sBCkBXvzc,GAAO,SAAUyxS,GAGnB,SAASzxS,IACP,IAAIouB,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAMiY,GAEtB,IAAK,IAAI8S,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOpuB,EAAK/Z,WAAak6c,IAAuBngc,IAAOjX,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAMy1a,cAAgB,SAAUzkb,GACvM,IAAI+T,EAAS/T,EAAM+T,OACfioR,EAAWh8R,EAAMg8R,SACjBrpN,EAAQ3yE,EAAM2yE,MACdg+V,EAAc3wa,EAAM2wa,YACpBj5K,EAAY13P,EAAM03P,UAClB/7R,EAAMqkC,EAAMrkC,IACZ+od,EAAc11a,EAAMzN,MAAMmjb,YAiB9B,OAT4BC,KAAiChyW,EAAO,SAC/BtzG,WAKnCszG,EAAMhgC,MAAQ,QAGT+xY,EAAY,CACjBlxd,MAAOwoU,EACPrpN,MAAOA,EACPg+V,YAAaA,EACbj5K,UAAWA,EACX/7R,IAAKA,EACLo4C,OAAQA,KAET/E,EAAMwsa,QAAU,SAAU1od,GAC3Bk8C,EAAMkhC,KAAOp9E,GACZk8C,EAAM6ia,UAAY,SAAU/qa,GAC7B,IAAIwmQ,EAAexmQ,EAAMwmQ,aACrBL,EAAenmQ,EAAMmmQ,aACrBgS,EAAYn4Q,EAAMm4Q,WAItB43J,EAHe7na,EAAMzN,MAAMs1a,UAGlB,CAAEvpK,aAAcA,EAAcL,aAAcA,EAAcgS,UAAWA,KAC7EjwQ,EAAMwra,mBAAqB,SAAU9+J,GACtC,IAAI21J,EAAwB31J,EAAM21J,sBAC9BE,EAAuB71J,EAAM61J,qBAC7BE,EAAgB/1J,EAAM+1J,cACtBC,EAAeh2J,EAAMg2J,cAIzB0R,EAHqBp0a,EAAMzN,MAAM6hb,gBAGlB,CACbrL,mBAAoB1G,EACpB2G,kBAAmBzG,EACnBqG,WAAYnG,EACZoG,UAAWnG,KAtDRsI,EAwDJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GAiJ/C,OAtNA9qY,IAAU5/D,EAAMyxS,GAwEhBjyQ,IAAax/B,EAAM,CAAC,CAClB3T,IAAK,kBACL5I,MAAO,WACDsE,KAAK64E,MACP74E,KAAK64E,KAAK8kY,gBAMb,CACDr5c,IAAK,kBACL5I,MAAO,SAAyBspW,GAC9B,IAAIw3G,EAAYx3G,EAAMw3G,UAClBrgd,EAAQ6oW,EAAM7oW,MAElB,OAAI6D,KAAK64E,KACqB74E,KAAK64E,KAAK00Y,iBAAiB,CACrD/Q,UAAWA,EACX73I,SAAUxoU,EACVugd,YAAa,IAEwB90J,UAIlC,IAKR,CACDtjT,IAAK,gCACL5I,MAAO,SAAuC8pW,GAC5C,IAAIk3G,EAAcl3G,EAAMk3G,YACpB/3I,EAAW6gC,EAAM7gC,SAEjB3kU,KAAK64E,MACP74E,KAAK64E,KAAK8sY,8BAA8B,CACtChhJ,SAAUA,EACV+3I,YAAaA,MAOlB,CACDp4c,IAAK,iBACL5I,MAAO,WACDsE,KAAK64E,MACP74E,KAAK64E,KAAK20Y,oBAMb,CACDlpd,IAAK,oBACL5I,MAAO,WACL,IAAIkqW,EAAQliW,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E+pd,EAAoB7nH,EAAM82G,YAC1BA,OAAoC5gd,IAAtB2xd,EAAkC,EAAIA,EACpDC,EAAiB9nH,EAAMjhC,SACvBA,OAA8B7oU,IAAnB4xd,EAA+B,EAAIA,EAE9C1td,KAAK64E,MACP74E,KAAK64E,KAAKooY,kBAAkB,CAC1Bt8I,SAAUA,EACV+3I,YAAaA,MAOlB,CACDp4c,IAAK,sBACL5I,MAAO,WACL,IAAIS,EAAQuH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAE5E1D,KAAK64E,MACP74E,KAAK64E,KAAKooY,kBAAkB,CAC1Bt8I,SAAUxoU,EACVugd,YAAa,MAOlB,CACDp4c,IAAK,mBACL5I,MAAO,WACL,IAAIksT,EAAYlkT,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEhF1D,KAAK64E,MACP74E,KAAK64E,KAAK80Y,iBAAiB,CAAE/lK,UAAWA,MAM3C,CACDtjT,IAAK,cACL5I,MAAO,WACL,IAAIS,EAAQuH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAE5E1D,KAAK64E,MACP74E,KAAK64E,KAAK0uY,aAAa,CACrB7K,YAAa,EACb/3I,SAAUxoU,MAIf,CACDmI,IAAK,SACL5I,MAAO,WACL,IAAI+vH,EAASzrH,KAAKkqC,MACdkvC,EAAYqyC,EAAOryC,UACnBw0Y,EAAiBniW,EAAOmiW,eACxB5a,EAAgBvnV,EAAOunV,cACvB13X,EAAQmwC,EAAOnwC,MAGf2rC,EAAalsC,kBAAK,yBAA0B3B,GAEhD,OAAO30C,gBAAoBo0C,EAAM/uC,IAAS,GAAI9pC,KAAKkqC,MAAO,CACxDu0a,oBAAoB,EACpBgB,aAAcz/c,KAAKotd,cACnBh0Y,UAAW6tC,EACX4zV,YAAav/X,EACbq/X,YAAa,EACbiE,kBAAmBgP,EACnBpO,SAAUx/c,KAAKw6c,UACff,kBAAmBz5c,KAAKmjd,mBACxB1nd,IAAKuE,KAAKmkd,QACVxI,YAAa3I,SAKZ/6b,EAvNE,CAwNTwsB,iBAEFxsB,GAAKwpG,aAAe,CAClBy7V,YAAY,EACZyE,iBAAkB,GAClBnC,SAAU,aACVoO,eAAgB,WACd,OAAO,MAET7B,eAAgB,aAChBlM,sBAAuBgO,EACvB/N,iBAAkB,GAClB5I,kBAAmB,OACnBlE,eAAgB,EAChB13V,MAAO,IAETrjG,GAAK6mQ,UAAoD,KAkG1C7mQ,U,2CC9JA,QACb61c,GA5JF,SAA2Bnod,EAAG6lC,EAAG3lC,EAAGwiB,EAAGhD,GACrC,MAAiB,oBAANxf,EAfb,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,EAAG3lC,GAExB,IADA,IAAI7C,EAAIqiB,EAAI,EACLgD,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EAEdxf,EADIF,EAAEyM,GACDo5B,IAAM,GACbxoC,EAAIoP,EACJiT,EAAIjT,EAAI,GAERiW,EAAIjW,EAAI,EAGZ,OAAOpP,EAIE+qd,CAAKpod,OAAS,IAAN0iB,EAAe,EAAQ,EAAJA,OAAa,IAANhD,EAAe1f,EAAE9D,OAAS,EAAQ,EAAJwjB,EAAOmmB,EAAG3lC,GA9BrF,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,GAErB,IADA,IAAIxoC,EAAIqiB,EAAI,EACLgD,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EACV1f,EAAEyM,IACDo5B,GACPxoC,EAAIoP,EACJiT,EAAIjT,EAAI,GAERiW,EAAIjW,EAAI,EAGZ,OAAOpP,EAoBEgrd,CAAKrod,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANwiB,EAAe1iB,EAAE9D,OAAS,EAAQ,EAAJwmB,EAAOmjB,IAyJhFinJ,GAzHF,SAA2B9sL,EAAG6lC,EAAG3lC,EAAGwiB,EAAGhD,GACrC,MAAiB,oBAANxf,EAfb,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,EAAG3lC,GAExB,IADA,IAAI7C,EAAIqiB,EAAI,EACLgD,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EAEdxf,EADIF,EAAEyM,GACDo5B,GAAK,GACZxoC,EAAIoP,EACJiT,EAAIjT,EAAI,GAERiW,EAAIjW,EAAI,EAGZ,OAAOpP,EAIEird,CAAKtod,OAAS,IAAN0iB,EAAe,EAAQ,EAAJA,OAAa,IAANhD,EAAe1f,EAAE9D,OAAS,EAAQ,EAAJwjB,EAAOmmB,EAAG3lC,GA9BrF,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,GAErB,IADA,IAAIxoC,EAAIqiB,EAAI,EACLgD,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EACV1f,EAAEyM,GACFo5B,GACNxoC,EAAIoP,EACJiT,EAAIjT,EAAI,GAERiW,EAAIjW,EAAI,EAGZ,OAAOpP,EAoBEkrd,CAAKvod,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANwiB,EAAe1iB,EAAE9D,OAAS,EAAQ,EAAJwmB,EAAOmjB,IAsHhFqnJ,GAtFF,SAA2BltL,EAAG6lC,EAAG3lC,EAAGwiB,EAAGhD,GACrC,MAAiB,oBAANxf,EAfb,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,EAAG3lC,GAExB,IADA,IAAI7C,EAAIqlB,EAAI,EACLA,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EAEdxf,EADIF,EAAEyM,GACDo5B,GAAK,GACZxoC,EAAIoP,EACJiW,EAAIjW,EAAI,GAERiT,EAAIjT,EAAI,EAGZ,OAAOpP,EAIEmrd,CAAKxod,OAAS,IAAN0iB,EAAe,EAAQ,EAAJA,OAAa,IAANhD,EAAe1f,EAAE9D,OAAS,EAAQ,EAAJwjB,EAAOmmB,EAAG3lC,GA9BrF,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,GAErB,IADA,IAAIxoC,EAAIqlB,EAAI,EACLA,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EACV1f,EAAEyM,GACFo5B,GACNxoC,EAAIoP,EACJiW,EAAIjW,EAAI,GAERiT,EAAIjT,EAAI,EAGZ,OAAOpP,EAoBEord,CAAKzod,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANwiB,EAAe1iB,EAAE9D,OAAS,EAAQ,EAAJwmB,EAAOmjB,IAmFhF6ib,GAnDF,SAA2B1od,EAAG6lC,EAAG3lC,EAAGwiB,EAAGhD,GACrC,MAAiB,oBAANxf,EAfb,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,EAAG3lC,GAExB,IADA,IAAI7C,EAAIqlB,EAAI,EACLA,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EAEdxf,EADIF,EAAEyM,GACDo5B,IAAM,GACbxoC,EAAIoP,EACJiW,EAAIjW,EAAI,GAERiT,EAAIjT,EAAI,EAGZ,OAAOpP,EAIEsrd,CAAK3od,OAAS,IAAN0iB,EAAe,EAAQ,EAAJA,OAAa,IAANhD,EAAe1f,EAAE9D,OAAS,EAAQ,EAAJwjB,EAAOmmB,EAAG3lC,GA9BrF,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,GAErB,IADA,IAAIxoC,EAAIqlB,EAAI,EACLA,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EACV1f,EAAEyM,IACDo5B,GACPxoC,EAAIoP,EACJiW,EAAIjW,EAAI,GAERiT,EAAIjT,EAAI,EAGZ,OAAOpP,EAoBEurd,CAAK5od,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANwiB,EAAe1iB,EAAE9D,OAAS,EAAQ,EAAJwmB,EAAOmjB,IAgDhFhK,GAbF,SAA2B77B,EAAG6lC,EAAG3lC,EAAGwiB,EAAGhD,GACrC,MAAiB,oBAANxf,EAjBb,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,EAAG3lC,GAExB,KAAOwiB,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EAEdowD,EAAI5vE,EADAF,EAAEyM,GACGo5B,GACb,GAAU,IAANiqC,EACF,OAAOrjE,EACEqjE,GAAK,EACdptD,EAAIjW,EAAI,EAERiT,EAAIjT,EAAI,EAGZ,OAAQ,EAICo8c,CAAK7od,OAAS,IAAN0iB,EAAe,EAAQ,EAAJA,OAAa,IAANhD,EAAe1f,EAAE9D,OAAS,EAAQ,EAAJwjB,EAAOmmB,EAAG3lC,GAjCrF,SAAcF,EAAG0iB,EAAGhD,EAAGmmB,GAErB,KAAOnjB,GAAKhD,GAAG,CACb,IAAIjT,EAAIiW,EAAIhD,IAAM,EACdxN,EAAIlS,EAAEyM,GACV,GAAIyF,IAAM2zB,EACR,OAAOp5B,EACEyF,GAAK2zB,EACdnjB,EAAIjW,EAAI,EAERiT,EAAIjT,EAAI,EAGZ,OAAQ,EAsBCq8c,CAAK9od,OAAS,IAANE,EAAe,EAAQ,EAAJA,OAAa,IAANwiB,EAAe1iB,EAAE9D,OAAS,EAAQ,EAAJwmB,EAAOmjB,KC7KlF,SAASkjb,GAAiBjpS,EAAKlrK,EAAMC,EAAOm0c,EAAYC,GACtD5ud,KAAKylL,IAAMA,EACXzlL,KAAKua,KAAOA,EACZva,KAAKwa,MAAQA,EACbxa,KAAK2ud,WAAaA,EAClB3ud,KAAK4ud,YAAcA,EACnB5ud,KAAKoV,OAASmF,EAAOA,EAAKnF,MAAQ,IAAMoF,EAAQA,EAAMpF,MAAQ,GAAKu5c,EAAW9sd,OAGhF,IAAIixE,GAAQ47Y,GAAiBvwd,UAE7B,SAAS+jJ,GAAKv8I,EAAGC,GACfD,EAAE8/K,IAAM7/K,EAAE6/K,IACV9/K,EAAE4U,KAAO3U,EAAE2U,KACX5U,EAAE6U,MAAQ5U,EAAE4U,MACZ7U,EAAEgpd,WAAa/od,EAAE+od,WACjBhpd,EAAEipd,YAAchpd,EAAEgpd,YAClBjpd,EAAEyP,MAAQxP,EAAEwP,MAGd,SAASy5c,GAAQznd,EAAM0nd,GACrB,IAAIC,EAAQC,GAAmBF,GAC/B1nd,EAAKq+K,IAAMspS,EAAMtpS,IACjBr+K,EAAKmT,KAAOw0c,EAAMx0c,KAClBnT,EAAKoT,MAAQu0c,EAAMv0c,MACnBpT,EAAKund,WAAaI,EAAMJ,WACxBvnd,EAAKwnd,YAAcG,EAAMH,YACzBxnd,EAAKgO,MAAQ25c,EAAM35c,MAGrB,SAAS65c,GAAoB7nd,EAAMi0G,GACjC,IAAIyzW,EAAY1nd,EAAK0nd,UAAU,IAC/BA,EAAU1id,KAAKivG,GACfwzW,GAAQznd,EAAM0nd,GAGhB,SAASI,GAAuB9nd,EAAMi0G,GACpC,IAAIyzW,EAAY1nd,EAAK0nd,UAAU,IAC3B36c,EAAM26c,EAAUtuc,QAAQ66F,GAC5B,OAAIlnG,EAAM,EA3CI,GA8Cd26c,EAAU1/c,OAAO+E,EAAK,GACtB06c,GAAQznd,EAAM0nd,GA9CF,GAwLd,SAASK,GAAgBthd,EAAKuhd,EAAI32a,GAChC,IAAK,IAAIz1C,EAAI,EAAGA,EAAI6K,EAAIhM,QAAUgM,EAAI7K,GAAG,IAAMosd,IAAMpsd,EAAG,CACtD,IAAIm0E,EAAI1+B,EAAG5qC,EAAI7K,IACf,GAAIm0E,EACF,OAAOA,GAKb,SAASk4Y,GAAiBxhd,EAAKyhd,EAAI72a,GACjC,IAAK,IAAIz1C,EAAI6K,EAAIhM,OAAS,EAAGmB,GAAK,GAAK6K,EAAI7K,GAAG,IAAMssd,IAAMtsd,EAAG,CAC3D,IAAIm0E,EAAI1+B,EAAG5qC,EAAI7K,IACf,GAAIm0E,EACF,OAAOA,GAKb,SAASo4Y,GAAY1hd,EAAK4qC,GACxB,IAAK,IAAIz1C,EAAI,EAAGA,EAAI6K,EAAIhM,SAAUmB,EAAG,CACnC,IAAIm0E,EAAI1+B,EAAG5qC,EAAI7K,IACf,GAAIm0E,EACF,OAAOA,GAiDb,SAASq4Y,GAAe7pd,EAAGC,GACzB,OAAOD,EAAIC,EAGb,SAAS6pd,GAAa9pd,EAAGC,GACvB,IAAIE,EAAIH,EAAE,GAAKC,EAAE,GACjB,OAAIE,GAGGH,EAAE,GAAKC,EAAE,GAGlB,SAAS8pd,GAAW/pd,EAAGC,GACrB,IAAIE,EAAIH,EAAE,GAAKC,EAAE,GACjB,OAAIE,GAGGH,EAAE,GAAKC,EAAE,GAGlB,SAASopd,GAAmBF,GAC1B,GAAyB,IAArBA,EAAUjtd,OACZ,OAAO,KAGT,IADA,IAAI8td,EAAM,GACD3sd,EAAI,EAAGA,EAAI8rd,EAAUjtd,SAAUmB,EACtC2sd,EAAIvjd,KAAK0id,EAAU9rd,GAAG,GAAI8rd,EAAU9rd,GAAG,IAEzC2sd,EAAIljd,KAAK+id,IAET,IAAI/pS,EAAMkqS,EAAIA,EAAI9td,QAAU,GAExB+td,EAAgB,GAChBC,EAAiB,GACjBC,EAAkB,GACtB,IAAS9sd,EAAI,EAAGA,EAAI8rd,EAAUjtd,SAAUmB,EAAG,CACzC,IAAIwK,EAAIshd,EAAU9rd,GACdwK,EAAE,GAAKi4K,EACTmqS,EAAcxjd,KAAKoB,GACVi4K,EAAMj4K,EAAE,GACjBqid,EAAezjd,KAAKoB,GAEpBsid,EAAgB1jd,KAAKoB,GAKzB,IAAImhd,EAAamB,EACblB,EAAckB,EAAgBhgd,QAIlC,OAHA6+c,EAAWlid,KAAKgjd,IAChBb,EAAYnid,KAAKijd,IAEV,IAAIhB,GAAiBjpS,EAAKupS,GAAmBY,GAAgBZ,GAAmBa,GAAiBlB,EAAYC,GAItH,SAASmB,GAAax4c,GACpBvX,KAAKuX,KAAOA,EAtQdu7D,GAAMg8Y,UAAY,SAAUl7c,GAQ1B,OAPAA,EAAOxH,KAAKnE,MAAM2L,EAAQ5T,KAAK2ud,YAC3B3ud,KAAKua,MACPva,KAAKua,KAAKu0c,UAAUl7c,GAElB5T,KAAKwa,OACPxa,KAAKwa,MAAMs0c,UAAUl7c,GAEhBA,GAGTk/D,GAAM35D,OAAS,SAAUkiG,GACvB,IAAIkkO,EAASv/U,KAAKoV,MAAQpV,KAAK2ud,WAAW9sd,OAE1C,GADA7B,KAAKoV,OAAS,EACVimG,EAAS,GAAKr7G,KAAKylL,IACjBzlL,KAAKua,KACH,GAAKva,KAAKua,KAAKnF,MAAQ,GAAK,GAAKmqU,EAAS,GAC5C0vI,GAAoBjvd,KAAMq7G,GAE1Br7G,KAAKua,KAAKpB,OAAOkiG,GAGnBr7G,KAAKua,KAAOy0c,GAAmB,CAAC3zW,SAE7B,GAAIA,EAAS,GAAKr7G,KAAKylL,IACxBzlL,KAAKwa,MACH,GAAKxa,KAAKwa,MAAMpF,MAAQ,GAAK,GAAKmqU,EAAS,GAC7C0vI,GAAoBjvd,KAAMq7G,GAE1Br7G,KAAKwa,MAAMrB,OAAOkiG,GAGpBr7G,KAAKwa,MAAQw0c,GAAmB,CAAC3zW,QAE9B,CACL,IAAIhzF,EAAI2nc,GAAOlC,GAAG9td,KAAK2ud,WAAYtzW,EAAUo0W,IACzCt4Y,EAAI64Y,GAAOlC,GAAG9td,KAAK4ud,YAAavzW,EAAUq0W,IAC9C1vd,KAAK2ud,WAAWv/c,OAAOiZ,EAAG,EAAGgzF,GAC7Br7G,KAAK4ud,YAAYx/c,OAAO+nE,EAAG,EAAGkkC,KAIlCvoC,GAAM5jE,OAAS,SAAUmsG,GACvB,IAAIkkO,EAASv/U,KAAKoV,MAAQpV,KAAK2ud,WAC/B,GAAItzW,EAAS,GAAKr7G,KAAKylL,IACrB,OAAKzlL,KAAKua,KAIN,GADKva,KAAKwa,MAAQxa,KAAKwa,MAAMpF,MAAQ,GAC5B,GAAKmqU,EAAS,GAClB2vI,GAAuBlvd,KAAMq7G,GAnG9B,KAqGJlkC,EAAIn3E,KAAKua,KAAKrL,OAAOmsG,KAEvBr7G,KAAKua,KAAO,KACZva,KAAKoV,OAAS,EAzGN,QA2GC+hE,IACTn3E,KAAKoV,OAAS,GAET+hE,GA/GK,EAgHP,GAAIkkC,EAAS,GAAKr7G,KAAKylL,IAC5B,OAAKzlL,KAAKwa,MAIN,GADKxa,KAAKua,KAAOva,KAAKua,KAAKnF,MAAQ,GAC1B,GAAKmqU,EAAS,GAClB2vI,GAAuBlvd,KAAMq7G,GApH9B,KAsHJlkC,EAAIn3E,KAAKwa,MAAMtL,OAAOmsG,KAExBr7G,KAAKwa,MAAQ,KACbxa,KAAKoV,OAAS,EA1HN,QA4HC+hE,IACTn3E,KAAKoV,OAAS,GAET+hE,GAhIK,EAkIZ,GAAmB,IAAfn3E,KAAKoV,MACP,OAAIpV,KAAK2ud,WAAW,KAAOtzW,EAjIrB,EAFI,EAyIZ,GAA+B,IAA3Br7G,KAAK2ud,WAAW9sd,QAAgB7B,KAAK2ud,WAAW,KAAOtzW,EAAU,CACnE,GAAIr7G,KAAKua,MAAQva,KAAKwa,MAAO,CAG3B,IAFA,IAAIi7D,EAAIz1E,KACJoG,EAAIpG,KAAKua,KACNnU,EAAEoU,OACPi7D,EAAIrvE,EACJA,EAAIA,EAAEoU,MAER,GAAIi7D,IAAMz1E,KACRoG,EAAEoU,MAAQxa,KAAKwa,UACV,CACL,IAAI6N,EAAIroB,KAAKua,KACT48D,EAAIn3E,KAAKwa,MACbi7D,EAAErgE,OAAShP,EAAEgP,MACbqgE,EAAEj7D,MAAQpU,EAAEmU,KACZnU,EAAEmU,KAAO8N,EACTjiB,EAAEoU,MAAQ28D,EAEZ+qE,GAAKliJ,KAAMoG,GACXpG,KAAKoV,OAASpV,KAAKua,KAAOva,KAAKua,KAAKnF,MAAQ,IAAMpV,KAAKwa,MAAQxa,KAAKwa,MAAMpF,MAAQ,GAAKpV,KAAK2ud,WAAW9sd,YAC9F7B,KAAKua,KACd2nI,GAAKliJ,KAAMA,KAAKua,MAEhB2nI,GAAKliJ,KAAMA,KAAKwa,OAElB,OAjKQ,EAmKV,IAAS6N,EAAI2nc,GAAOlC,GAAG9td,KAAK2ud,WAAYtzW,EAAUo0W,IAAepnc,EAAIroB,KAAK2ud,WAAW9sd,QAC/E7B,KAAK2ud,WAAWtmc,GAAG,KAAOgzF,EAAS,KADsDhzF,EAI7F,GAAIroB,KAAK2ud,WAAWtmc,KAAOgzF,EAAU,CACnCr7G,KAAKoV,OAAS,EACdpV,KAAK2ud,WAAWv/c,OAAOiZ,EAAG,GAC1B,IAAS8uD,EAAI64Y,GAAOlC,GAAG9td,KAAK4ud,YAAavzW,EAAUq0W,IAAav4Y,EAAIn3E,KAAK4ud,YAAY/sd,QAC/E7B,KAAK4ud,YAAYz3Y,GAAG,KAAOkkC,EAAS,KADqDlkC,EAGtF,GAAIn3E,KAAK4ud,YAAYz3Y,KAAOkkC,EAEjC,OADAr7G,KAAK4ud,YAAYx/c,OAAO+nE,EAAG,GA9KzB,EAoLV,OArLY,GAoNhBrE,GAAMm9Y,WAAa,SAAUp4c,EAAG4gC,GAC9B,GAAI5gC,EAAI7X,KAAKylL,IAAK,CAChB,GAAIzlL,KAAKua,KAEP,GADI48D,EAAIn3E,KAAKua,KAAK01c,WAAWp4c,EAAG4gC,GAE9B,OAAO0+B,EAGX,OAAOg4Y,GAAgBnvd,KAAK2ud,WAAY92c,EAAG4gC,GACtC,GAAI5gC,EAAI7X,KAAKylL,IAAK,CAErB,IAAItuG,EADN,GAAIn3E,KAAKwa,MAEP,GADI28D,EAAIn3E,KAAKwa,MAAMy1c,WAAWp4c,EAAG4gC,GAE/B,OAAO0+B,EAGX,OAAOk4Y,GAAiBrvd,KAAK4ud,YAAa/2c,EAAG4gC,GAE7C,OAAO82a,GAAYvvd,KAAK2ud,WAAYl2a,IAIxCq6B,GAAMo9Y,cAAgB,SAAUZ,EAAIF,EAAI32a,GAEpC,IAMI0+B,EAPN,GAAIm4Y,EAAKtvd,KAAKylL,KAAOzlL,KAAKua,OACpB48D,EAAIn3E,KAAKua,KAAK21c,cAAcZ,EAAIF,EAAI32a,IAEtC,OAAO0+B,EAGX,GAAIi4Y,EAAKpvd,KAAKylL,KAAOzlL,KAAKwa,QACpB28D,EAAIn3E,KAAKwa,MAAM01c,cAAcZ,EAAIF,EAAI32a,IAEvC,OAAO0+B,EAGX,OAAIi4Y,EAAKpvd,KAAKylL,IACL0pS,GAAgBnvd,KAAK2ud,WAAYS,EAAI32a,GACnC62a,EAAKtvd,KAAKylL,IACZ4pS,GAAiBrvd,KAAK4ud,YAAaU,EAAI72a,GAEvC82a,GAAYvvd,KAAK2ud,WAAYl2a,IAgExC,IAAI03a,GAASJ,GAAa5xd,UAE1Bgyd,GAAOh3c,OAAS,SAAUkiG,GACpBr7G,KAAKuX,KACPvX,KAAKuX,KAAK4B,OAAOkiG,GAEjBr7G,KAAKuX,KAAO,IAAIm3c,GAAiBrzW,EAAS,GAAI,KAAM,KAAM,CAACA,GAAW,CAACA,KAI3E80W,GAAOjhd,OAAS,SAAUmsG,GACxB,GAAIr7G,KAAKuX,KAAM,CACb,IAAI4/D,EAAIn3E,KAAKuX,KAAKrI,OAAOmsG,GAIzB,OA1UQ,IAuUJlkC,IACFn3E,KAAKuX,KAAO,MA1UF,IA4UL4/D,EAET,OAAO,GAGTg5Y,GAAOF,WAAa,SAAUx6Y,EAAGh9B,GAC/B,GAAIz4C,KAAKuX,KACP,OAAOvX,KAAKuX,KAAK04c,WAAWx6Y,EAAGh9B,IAInC03a,GAAOD,cAAgB,SAAUZ,EAAIF,EAAI32a,GACvC,GAAI62a,GAAMF,GAAMpvd,KAAKuX,KACnB,OAAOvX,KAAKuX,KAAK24c,cAAcZ,EAAIF,EAAI32a,IAI3Cr6C,OAAOyJ,eAAesod,GAAQ,QAAS,CACrCpsd,IAAK,WACH,OAAI/D,KAAKuX,KACAvX,KAAKuX,KAAKnC,MAEZ,KAIXhX,OAAOyJ,eAAesod,GAAQ,YAAa,CACzCpsd,IAAK,WACH,OAAI/D,KAAKuX,KACAvX,KAAKuX,KAAKu3c,UAAU,IAEtB,MC9WX,IA4FesB,GA5FK,WAClB,SAASA,IDiXI,IAAuBtB,EChXlC1hc,IAAgBptB,KAAMowd,GAEtBpwd,KAAKqwd,eAAiB,GACtBrwd,KAAKswd,cD8WFxB,GAAkC,IAArBA,EAAUjtd,OAGrB,IAAIkud,GAAaf,GAAmBF,IAFlC,IAAIiB,GAAa,MC9WxB/vd,KAAKuwd,SAAW,GAmFlB,OAxEA94a,IAAa24a,EAAe,CAAC,CAC3B9rd,IAAK,sBACL5I,MAAO,SAA6B+2c,EAAWkI,EAAa6V,GAC1D,IAAIC,EAAsBhe,EAAYzyc,KAAKoV,MAC3C,OAAOpV,KAAK0wd,kBAAoB3zd,KAAKqjB,KAAKqwc,EAAsB9V,GAAe6V,IAKhF,CACDlsd,IAAK,QACL5I,MAAO,SAAeksT,EAAW3R,EAAc06K,GAC7C,IAAIh5a,EAAQ33C,KAEZA,KAAKswd,cAAcJ,cAActoK,EAAWA,EAAY3R,GAAc,SAAU5vQ,GAC9E,IAAIsC,EAAQwK,KAAe9M,EAAM,GAC7BiuF,EAAM3rF,EAAM,GAEZxsC,GADIwsC,EAAM,GACFA,EAAM,IAElB,OAAOgob,EAAex0d,EAAOw7C,EAAM44a,SAASp0d,GAAQm4H,QAGvD,CACDhwH,IAAK,cACL5I,MAAO,SAAqBS,EAAOoe,EAAM+5G,EAAK/C,GAC5CvxH,KAAKswd,cAAcn3c,OAAO,CAACm7G,EAAKA,EAAM/C,EAAQp1H,IAC9C6D,KAAKuwd,SAASp0d,GAASoe,EAEvB,IAAIq2c,EAAgB5wd,KAAKqwd,eACrBQ,EAAeD,EAAcr2c,GAE/Bq2c,EAAcr2c,QADKze,IAAjB+0d,EACoBv8V,EAAM/C,EAENx0H,KAAKC,IAAI6zd,EAAcv8V,EAAM/C,KAGtD,CACDjtH,IAAK,QACLP,IAAK,WACH,OAAO/D,KAAKswd,cAAcl7c,QAE3B,CACD9Q,IAAK,qBACLP,IAAK,WACH,IAAI6sd,EAAgB5wd,KAAKqwd,eAErBt0d,EAAO,EAEX,IAAK,IAAIiH,KAAK4td,EAAe,CAC3B,IAAIr/V,EAASq/V,EAAc5td,GAC3BjH,EAAgB,IAATA,EAAaw1H,EAASx0H,KAAKE,IAAIlB,EAAMw1H,GAG9C,OAAOx1H,IAER,CACDuI,IAAK,oBACLP,IAAK,WACH,IAAI6sd,EAAgB5wd,KAAKqwd,eAErBt0d,EAAO,EAEX,IAAK,IAAIiH,KAAK4td,EAAe,CAC3B,IAAIr/V,EAASq/V,EAAc5td,GAC3BjH,EAAOgB,KAAKC,IAAIjB,EAAMw1H,GAGxB,OAAOx1H,MAIJq0d,EAzFW,GC0ChBU,GAAU,SAAUpnK,GAGtB,SAASonK,IACP,IAAIzqb,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAM8wd,GAEtB,IAAK,IAAI/lc,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOyqb,EAAQ5yd,WAAak6c,IAAuB0Y,IAAU9vd,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAM3Q,MAAQ,CAC3Lsya,aAAa,EACb1xJ,UAAW,GACVjwQ,EAAMo5a,8BAAgC,KAAMp5a,EAAMq5a,6BAA+B,KAAMr5a,EAAMs5a,eAAiB,IAAIb,GAAiBz4a,EAAMu5a,YAAc,KAAMv5a,EAAMw5a,oBAAsB,KAAMx5a,EAAMy5a,WAAa,KAAMz5a,EAAM05a,mBAAqB,KAAM15a,EAAM25a,kCAAoC,WACpS35a,EAAMirE,SAAS,CACb02V,aAAa,KAEd3ha,EAAM2ia,0BAA4B,SAAU7+c,GAC7Ck8C,EAAM4ia,oBAAsB9+c,GAC3Bk8C,EAAM6ia,UAAY,SAAUrzU,GAC7B,IAAI5V,EAAS55E,EAAMzN,MAAMqnF,OAGrBggW,EAAiBpqV,EAAMn6G,OAAO46R,UAM9BA,EAAY7qT,KAAKE,IAAIF,KAAKC,IAAI,EAAG26C,EAAM65a,2BAA6BjgW,GAASggW,GAI7EA,IAAmB3pK,IAKvBjwQ,EAAM85a,4BAMF95a,EAAM3Q,MAAM4gR,YAAcA,GAC5BjwQ,EAAMirE,SAAS,CACb02V,aAAa,EACb1xJ,UAAWA,MArCV+6J,EAwCJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GA2R/C,OAhVA9qY,IAAUi5Y,EAASpnK,GAwDnBjyQ,IAAaq5a,EAAS,CAAC,CACrBxsd,IAAK,qBACL5I,MAAO,WACLsE,KAAKixd,eAAiB,IAAIb,GAC1Bpwd,KAAK29c,gBAKN,CACDr5c,IAAK,gCACL5I,MAAO,SAAuCitC,GAC5C,IAAIxsC,EAAQwsC,EAAMg8R,SAEyB,OAAvC3kU,KAAK+wd,+BACP/wd,KAAK+wd,8BAAgC50d,EACrC6D,KAAKgxd,6BAA+B70d,IAEpC6D,KAAK+wd,8BAAgCh0d,KAAKE,IAAI+C,KAAK+wd,8BAA+B50d,GAClF6D,KAAKgxd,6BAA+Bj0d,KAAKC,IAAIgD,KAAKgxd,6BAA8B70d,MAGnF,CACDmI,IAAK,yBACL5I,MAAO,WACL,IAAI8kd,EAAYxgd,KAAKixd,eAAe77c,MAAQ,EAE5CpV,KAAKixd,eAAiB,IAAIb,GAC1Bpwd,KAAK0xd,uBAAuB,EAAGlR,GAE/Bxgd,KAAK29c,gBAEN,CACDr5c,IAAK,oBACL5I,MAAO,WACLsE,KAAK2xd,2BACL3xd,KAAK4xd,0BACL5xd,KAAK6xd,mCAEN,CACDvtd,IAAK,qBACL5I,MAAO,SAA4B2iH,EAAW4yJ,GAC5CjxQ,KAAK2xd,2BACL3xd,KAAK4xd,0BACL5xd,KAAK6xd,iCAED7xd,KAAKkqC,MAAM09Q,YAAcvpM,EAAUupM,WACrC5nT,KAAKyxd,8BAGR,CACDntd,IAAK,uBACL5I,MAAO,WACDsE,KAAK8xd,6BACP9Z,EAAuBh4c,KAAK8xd,+BAG/B,CACDxtd,IAAK,SACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETyrH,EAASzrH,KAAKkqC,MACdgza,EAAazxV,EAAOyxV,WACpBzK,EAAYhnV,EAAOgnV,UACnBsf,EAAoBtmW,EAAOsmW,kBAC3BtS,EAAeh0V,EAAOg0V,aACtBrmY,EAAYqyC,EAAOryC,UACnBm4C,EAAS9F,EAAO8F,OAChBtwF,EAAKwqF,EAAOxqF,GACZld,EAAY0nG,EAAO1nG,UACnBiuc,EAAmBvmW,EAAOumW,iBAC1Btwa,EAAO+pE,EAAO/pE,KACd45D,EAAQmQ,EAAOnQ,MACfgpB,EAAW7Y,EAAO6Y,SAClBhpD,EAAQmwC,EAAOnwC,MACf22Y,EAAexmW,EAAOwmW,aACtB3T,EAASt+c,KAAKgnC,MACdsya,EAAcgF,EAAOhF,YACrB1xJ,EAAY02J,EAAO12J,UAGnBthR,EAAW,GAEX4rb,EAAsBlyd,KAAKwxd,2BAE3BW,EAAqBnyd,KAAKixd,eAAekB,mBACzCC,EAAoBpyd,KAAKixd,eAAe77c,MAExCmrc,EAAa,EACbC,OAAY,EAyBhB,GAvBAxgd,KAAKixd,eAAex7R,MAAM14L,KAAKC,IAAI,EAAG4qT,EAAYoqK,GAAmBzgW,EAA4B,EAAnBygW,GAAsB,SAAU71d,EAAOoe,EAAM+5G,GACzH,IAAI62Q,EAEqB,qBAAdq1E,GACTD,EAAapkd,EACbqkd,EAAYrkd,IAEZokd,EAAaxjd,KAAKE,IAAIsjd,EAAYpkd,GAClCqkd,EAAYzjd,KAAKC,IAAIwjd,EAAWrkd,IAGlCmqC,EAASl6B,KAAKqzc,EAAa,CACzBtjd,MAAOA,EACPm9c,YAAaA,EACbh1c,IAAKyf,EAAU5nB,GACfugD,OAAQ0mE,EACR9H,OAAQ6vR,EAAS,CACf55Q,OAAQwgW,EAAkB7M,UAAU/od,IACnC64E,KAAgBm2T,EAAyB,QAAjB8mF,EAAyB,OAAS,QAAS13c,GAAOy6D,KAAgBm2T,EAAQ,WAAY,YAAan2T,KAAgBm2T,EAAQ,MAAO72Q,GAAMt/C,KAAgBm2T,EAAQ,QAAS4mF,EAAkB5M,SAAShpd,IAASgvY,SAKxOgnF,EAAqBvqK,EAAYr2L,EAASygW,GAAoBI,EAAoB3f,EAGpF,IAFA,IAAI4f,EAAYt1d,KAAKE,IAAIw1c,EAAY2f,EAAmBr1d,KAAKqjB,MAAMwnS,EAAYr2L,EAASygW,EAAmBG,GAAsBJ,EAAkBvO,cAAgBloY,EAAQy2Y,EAAkBtO,eAEpLr6D,EAASgpE,EAAmBhpE,EAASgpE,EAAoBC,EAAWjpE,IAC3Eo3D,EAAYp3D,EAEZ9iX,EAASl6B,KAAKqzc,EAAa,CACzBtjd,MAAOitZ,EACPkwD,YAAaA,EACbh1c,IAAKyf,EAAUqlY,GACf1sW,OAAQ18C,KACRs7G,MAAO,CACLhgC,MAAOy2Y,EAAkB5M,SAAS/7D,OAS1C,OAHAppZ,KAAKkxd,YAAc3Q,EACnBvgd,KAAKoxd,WAAa5Q,EAEX/7a,gBACL,MACA,CACEhpC,IAAKuE,KAAKs6c,0BACV,aAAct6c,KAAKkqC,MAAM,cACzBkvC,UAAW2B,kBAAK,4BAA6B3B,GAC7Cn4C,GAAIA,EACJu+a,SAAUx/c,KAAKw6c,UACf94Z,KAAMA,EACN45D,MAAOxxE,IAAS,CACdqxC,UAAW,aACXzB,UAAW,MACX63C,OAAQ2rV,EAAa,OAAS3rV,EAC9B0Y,UAAW,SACXs9K,UAAW2qK,EAAsB3gW,EAAS,SAAW,OACrDtU,SAAU,WACV3hC,MAAOA,EACPwpR,wBAAyB,QACzBk6G,WAAY,aACX1jW,GACHgpB,SAAUA,GACZ7/F,gBACE,MACA,CACE20C,UAAW,kDACXkiC,MAAO,CACLhgC,MAAO,OACPi2C,OAAQ2gW,EACR51Y,SAAU,OACVw6L,UAAWo7M,EACX7nW,SAAU,SACVgK,cAAeilV,EAAc,OAAS,GACtCr8V,SAAU,aAEd32E,MAIL,CACDhiC,IAAK,2BACL5I,MAAO,WACL,GAAkD,kBAAvCsE,KAAK+wd,8BAA4C,CAC1D,IAAIG,EAAclxd,KAAK+wd,8BACnBK,EAAapxd,KAAKgxd,6BAEtBhxd,KAAK+wd,8BAAgC,KACrC/wd,KAAKgxd,6BAA+B,KAGpChxd,KAAK0xd,uBAAuBR,EAAaE,GAEzCpxd,KAAK29c,iBAGR,CACDr5c,IAAK,4BACL5I,MAAO,WACL,IAAIsld,EAA6Bhhd,KAAKkqC,MAAM82a,2BAGxChhd,KAAK8xd,6BACP9Z,EAAuBh4c,KAAK8xd,6BAG9B9xd,KAAK8xd,4BAA8B7Z,EAAwBj4c,KAAKsxd,kCAAmCtQ,KAEpG,CACD18c,IAAK,2BACL5I,MAAO,WACL,IAAI6hd,EAAUv9c,KAAKkqC,MACfuoa,EAAY8K,EAAQ9K,UACpBsf,EAAoBxU,EAAQwU,kBAC5Bz2Y,EAAQiiY,EAAQjiY,MAGhBg3Y,EAAuBv1d,KAAKC,IAAI,EAAGD,KAAKwjB,MAAM+6D,EAAQy2Y,EAAkBtO,eAE5E,OAAOzjd,KAAKixd,eAAeiB,oBAAoBzf,EAAW6f,EAAsBP,EAAkBvO,iBAEnG,CACDl/c,IAAK,0BACL5I,MAAO,WACL,IAAIgid,EAAU19c,KAAKkqC,MACfqnF,EAASmsV,EAAQnsV,OACjBiuV,EAAW9B,EAAQ8B,SACnB53J,EAAY5nT,KAAKgnC,MAAM4gR,UAGvB5nT,KAAKuyd,oBAAsB3qK,IAC7B43J,EAAS,CACPvpK,aAAc1kL,EACdqkL,aAAc51S,KAAKwxd,2BACnB5pK,UAAWA,IAGb5nT,KAAKuyd,kBAAoB3qK,KAG5B,CACDtjT,IAAK,iCACL5I,MAAO,WACDsE,KAAKmxd,sBAAwBnxd,KAAKkxd,aAAelxd,KAAKqxd,qBAAuBrxd,KAAKoxd,cAIpFoB,EAHuBxyd,KAAKkqC,MAAMuob,iBAGjB,CACflS,WAAYvgd,KAAKkxd,YACjB1Q,UAAWxgd,KAAKoxd,aAGlBpxd,KAAKmxd,oBAAsBnxd,KAAKkxd,YAChClxd,KAAKqxd,mBAAqBrxd,KAAKoxd,cAGlC,CACD9sd,IAAK,yBACL5I,MAAO,SAAgC6kd,EAAYC,GAMjD,IALA,IAAI1C,EAAU99c,KAAKkqC,MACf6nb,EAAoBjU,EAAQiU,kBAC5BW,EAAiB5U,EAAQ4U,eAGpB3F,EAAUxM,EAAYwM,GAAWvM,EAAWuM,IAAW,CAC9D,IAAI4F,EAAkBD,EAAe3F,GACjC6F,EAAQD,EAAgBp4c,KACxBs4c,EAAOF,EAAgBr+V,IAE3Bt0H,KAAKixd,eAAe6B,YAAY/F,EAAS6F,EAAOC,EAAMd,EAAkB7M,UAAU6H,QAGpF,CAAC,CACHzod,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,YAA4Bn1Q,IAAxBunH,EAAUukM,WAA2B32C,EAAU22C,YAAcvkM,EAAUukM,UAClE,CACL0xJ,aAAa,EACb1xJ,UAAWvkM,EAAUukM,WAIlB,SAIJkpK,EAjVK,CAkVZrsb,iBAwDF,SAASgqH,MAtDTqiU,GAAQrvW,aAAe,CACrBy7V,YAAY,EACZn5b,UAgDF,SAAkBroB,GAChB,OAAOA,GAhDP+2d,gBAAiBhkU,GACjB+wT,SAAU/wT,GACVujU,iBAAkB,GAClBtwa,KAAM,OACNs/Z,2BA1XiD,IA2XjD1lW,MAjYgB,GAkYhBgpB,SAAU,EACV2tV,aAAc,OAEhBnB,GAAQhyM,UAAoD,KAoD5D+1J,mBAASi8C,ICncMA,ICIXiC,GAA6B,WAC/B,SAASA,IACP,IAAIp7a,EAAQ33C,KAER2yC,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAEjF0pB,IAAgBptB,KAAM+yd,GAEtB/yd,KAAK66c,YAAc,SAAUx0a,GAC3B,IAAIlqC,EAAQkqC,EAAKlqC,MAEjBw7C,EAAMq7a,mBAAmBnY,YAAY,CACnC1+c,MAAOA,EAAQw7C,EAAMs7a,sBAIzBjzd,KAAKwiY,UAAY,SAAU75V,GACzB,IAAIxsC,EAAQwsC,EAAMxsC,MAElBw7C,EAAMq7a,mBAAmBxwF,UAAU,CACjCrmY,MAAOA,EAAQw7C,EAAMu7a,mBAIzB,IAAInB,EAAoBp/a,EAAOo/a,kBAC3BoB,EAAwBxgb,EAAOygb,kBAC/BA,OAA8Ct3d,IAA1Bq3d,EAAsC,EAAIA,EAC9DE,EAAwB1gb,EAAO2gb,eAC/BA,OAA2Cx3d,IAA1Bu3d,EAAsC,EAAIA,EAG/Drzd,KAAKgzd,mBAAqBjB,EAC1B/xd,KAAKizd,mBAAqBG,EAC1Bpzd,KAAKkzd,gBAAkBI,EA6DzB,OA1DA77a,IAAas7a,EAA4B,CAAC,CACxCzud,IAAK,QACL5I,MAAO,SAAeipU,EAAU+3I,GAC9B18c,KAAKgzd,mBAAmB9/c,MAAMyxT,EAAW3kU,KAAKkzd,gBAAiBxW,EAAc18c,KAAKizd,sBAEnF,CACD3ud,IAAK,WACL5I,MAAO,WACLsE,KAAKgzd,mBAAmBlnR,aAEzB,CACDxnM,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKgzd,mBAAmBpS,mBAEhC,CACDt8c,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKgzd,mBAAmBnS,kBAEhC,CACDv8c,IAAK,YACL5I,MAAO,SAAmBipU,GACxB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEtF,OAAO1D,KAAKgzd,mBAAmB9N,UAAUvgJ,EAAW3kU,KAAKkzd,gBAAiBxW,EAAc18c,KAAKizd,sBAE9F,CACD3ud,IAAK,WACL5I,MAAO,SAAkBipU,GACvB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEtF,OAAO1D,KAAKgzd,mBAAmB7N,SAASxgJ,EAAW3kU,KAAKkzd,gBAAiBxW,EAAc18c,KAAKizd,sBAE7F,CACD3ud,IAAK,MACL5I,MAAO,SAAaipU,GAClB,IAAI+3I,EAAch5c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEtF,OAAO1D,KAAKgzd,mBAAmB/ud,IAAI0gU,EAAW3kU,KAAKkzd,gBAAiBxW,EAAc18c,KAAKizd,sBAExF,CACD3ud,IAAK,MACL5I,MAAO,SAAaipU,EAAU+3I,EAAaphY,EAAOi2C,GAChDvxH,KAAKgzd,mBAAmBtrd,IAAIi9T,EAAW3kU,KAAKkzd,gBAAiBxW,EAAc18c,KAAKizd,mBAAoB33Y,EAAOi2C,KAE5G,CACDjtH,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAKgzd,mBAAmBxP,gBAEhC,CACDl/c,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKgzd,mBAAmBvP,iBAI5BsP,EA9FwB,GAiGlBA,MCjFXQ,GAAY,SAAU7pK,GAGxB,SAAS6pK,EAAUrpb,EAAOhhC,GACxBkkB,IAAgBptB,KAAMuzd,GAEtB,IAAI57a,EAAQwqE,IAA2BniH,MAAOuzd,EAAUr1d,WAAak6c,IAAuBmb,IAAYvyd,KAAKhB,KAAMkqC,EAAOhhC,IAE1Hsqd,GAAiBxyd,KAAK22C,GAEtB,IAAIgoa,EAA2Bz1a,EAAMy1a,yBACjC8T,EAAmBvpb,EAAMupb,iBACzBC,EAAgBxpb,EAAMwpb,cAwB1B,OArBA/7a,EAAMg8a,6BAA4B,GAE9BhU,IACFhoa,EAAMi8a,wCAA0CF,EAAgB,EAAI,IAAIX,GAA2B,CACjGhB,kBAAmBpS,EACnByT,kBAAmB,EACnBE,eAAgBI,IACb/T,EAELhoa,EAAMk8a,yCAA2CJ,EAAmB,GAAKC,EAAgB,EAAI,IAAIX,GAA2B,CAC1HhB,kBAAmBpS,EACnByT,kBAAmBK,EACnBH,eAAgBI,IACb/T,EAELhoa,EAAMm8a,sCAAwCL,EAAmB,EAAI,IAAIV,GAA2B,CAClGhB,kBAAmBpS,EACnByT,kBAAmBK,EACnBH,eAAgB,IACb3T,GAEAhoa,EAkiBT,OArkBAkgC,IAAU07Y,EAAW7pK,GAsCrBjyQ,IAAa87a,EAAW,CAAC,CACvBjvd,IAAK,mBACL5I,MAAO,WACLsE,KAAK+zd,iBAAmB/zd,KAAK+zd,gBAAgBpW,cAC7C39c,KAAKg0d,kBAAoBh0d,KAAKg0d,iBAAiBrW,cAC/C39c,KAAKi0d,cAAgBj0d,KAAKi0d,aAAatW,cACvC39c,KAAKk0d,eAAiBl0d,KAAKk0d,cAAcvW,gBAK1C,CACDr5c,IAAK,gCACL5I,MAAO,WACL,IAAI2qC,EAAO3iC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC3E+4c,EAAmBp2a,EAAKq2a,YACxBA,OAAmC5gd,IAArB2gd,EAAiC,EAAIA,EACnDE,EAAgBt2a,EAAKs+R,SACrBA,OAA6B7oU,IAAlB6gd,EAA8B,EAAIA,EAEjD38c,KAAKu4c,+BAAgF,kBAAxCv4c,KAAKu4c,+BAA8Cx7c,KAAKE,IAAI+C,KAAKu4c,+BAAgCmE,GAAeA,EAC7J18c,KAAKw4c,4BAA0E,kBAArCx4c,KAAKw4c,4BAA2Cz7c,KAAKE,IAAI+C,KAAKw4c,4BAA6B7zI,GAAYA,IAKlJ,CACDrgU,IAAK,kBACL5I,MAAO,WACLsE,KAAK+zd,iBAAmB/zd,KAAK+zd,gBAAgBvG,kBAC7Cxtd,KAAKg0d,kBAAoBh0d,KAAKg0d,iBAAiBxG,kBAC/Cxtd,KAAKi0d,cAAgBj0d,KAAKi0d,aAAazG,kBACvCxtd,KAAKk0d,eAAiBl0d,KAAKk0d,cAAc1G,oBAK1C,CACDlpd,IAAK,oBACL5I,MAAO,WACL,IAAIitC,EAAQjlC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5Eywd,EAAoBxrb,EAAM+za,YAC1BA,OAAoC5gd,IAAtBq4d,EAAkC,EAAIA,EACpDC,EAAiBzrb,EAAMg8R,SACvBA,OAA8B7oU,IAAnBs4d,EAA+B,EAAIA,EAE9C3oW,EAASzrH,KAAKkqC,MACdupb,EAAmBhoW,EAAOgoW,iBAC1BC,EAAgBjoW,EAAOioW,cAGvBW,EAAsBt3d,KAAKC,IAAI,EAAG0/c,EAAc+W,GAChDa,EAAmBv3d,KAAKC,IAAI,EAAG2nU,EAAW+uJ,GAE9C1zd,KAAK+zd,iBAAmB/zd,KAAK+zd,gBAAgB9S,kBAAkB,CAC7DvE,YAAaA,EACb/3I,SAAU2vJ,IAEZt0d,KAAKg0d,kBAAoBh0d,KAAKg0d,iBAAiB/S,kBAAkB,CAC/DvE,YAAa2X,EACb1vJ,SAAU2vJ,IAEZt0d,KAAKi0d,cAAgBj0d,KAAKi0d,aAAahT,kBAAkB,CACvDvE,YAAaA,EACb/3I,SAAUA,IAEZ3kU,KAAKk0d,eAAiBl0d,KAAKk0d,cAAcjT,kBAAkB,CACzDvE,YAAa2X,EACb1vJ,SAAUA,IAGZ3kU,KAAKu0d,eAAiB,KACtBv0d,KAAKw0d,eAAiB,KACtBx0d,KAAK2zd,6BAA4B,KAElC,CACDrvd,IAAK,oBACL5I,MAAO,WACL,IAAI6hd,EAAUv9c,KAAKkqC,MACfy9Q,EAAa41J,EAAQ51J,WACrBC,EAAY21J,EAAQ31J,UAGxB,GAAID,EAAa,GAAKC,EAAY,EAAG,CACnC,IAAIv2L,EAAW,GAEXs2L,EAAa,IACft2L,EAASs2L,WAAaA,GAGpBC,EAAY,IACdv2L,EAASu2L,UAAYA,GAGvB5nT,KAAK4iH,SAASyO,GAEhBrxH,KAAKg+c,+BAEN,CACD15c,IAAK,qBACL5I,MAAO,WACLsE,KAAKg+c,+BAEN,CACD15c,IAAK,SACL5I,MAAO,WACL,IAAIgid,EAAU19c,KAAKkqC,MACfs1a,EAAW9B,EAAQ8B,SACnB/F,EAAoBiE,EAAQjE,kBAG5BgC,GAF4BiC,EAAQ0D,0BACnB1D,EAAQ/1J,WACR+1J,EAAQjC,gBAEzBE,GADgB+B,EAAQ91J,UACV81J,EAAQ/B,aACtBr3b,EAAO44B,IAAyBwga,EAAS,CAAC,WAAY,oBAAqB,4BAA6B,aAAc,iBAAkB,YAAa,gBAOzJ,GALA19c,KAAKy0d,oBAKoB,IAArBz0d,KAAKkqC,MAAMoxC,OAAqC,IAAtBt7E,KAAKkqC,MAAMqnF,OACvC,OAAO,KAKT,IAAI+sV,EAASt+c,KAAKgnC,MACd2gR,EAAa22J,EAAO32J,WACpBC,EAAY02J,EAAO12J,UAGvB,OAAOnjR,gBACL,MACA,CAAE62E,MAAOt7G,KAAK00d,sBACdjwb,gBACE,MACA,CAAE62E,MAAOt7G,KAAK20d,oBACd30d,KAAK40d,mBAAmBtwc,GACxBtkB,KAAK60d,oBAAoB/qb,IAAS,GAAIxlB,EAAM,CAC1Ck7b,SAAUA,EACV73J,WAAYA,MAGhBljR,gBACE,MACA,CAAE62E,MAAOt7G,KAAK80d,uBACd90d,KAAK+0d,sBAAsBjrb,IAAS,GAAIxlB,EAAM,CAC5Ck7b,SAAUA,EACV53J,UAAWA,KAEb5nT,KAAKg1d,uBAAuBlrb,IAAS,GAAIxlB,EAAM,CAC7Ck7b,SAAUA,EACV/F,kBAAmBA,EACnB9xJ,WAAYA,EACZ8zJ,eAAgBA,EAChBE,YAAaA,EACb/zJ,UAAWA,SAKlB,CACDtjT,IAAK,uBACL5I,MAAO,SAA8BwuC,GAMnC,OALaA,EAAMqnF,OAGCvxH,KAAKi1d,kBAAkB/qb,KAI5C,CACD5lC,IAAK,oBACL5I,MAAO,SAA2BwuC,GAChC,IAAIupb,EAAmBvpb,EAAMupb,iBACzB5Y,EAAc3wa,EAAM2wa,YAGxB,GAA2B,MAAvB76c,KAAKu0d,eACP,GAA2B,oBAAhB1Z,EAA4B,CAGrC,IAFA,IAAIqa,EAAgB,EAEX/4d,EAAQ,EAAGA,EAAQs3d,EAAkBt3d,IAC5C+4d,GAAiBra,EAAY,CAAE1+c,MAAOA,IAGxC6D,KAAKu0d,eAAiBW,OAEtBl1d,KAAKu0d,eAAiB1Z,EAAc4Y,EAIxC,OAAOzzd,KAAKu0d,iBAEb,CACDjwd,IAAK,qBACL5I,MAAO,SAA4BwuC,GAMjC,OALYA,EAAMoxC,MAGEt7E,KAAKm1d,kBAAkBjrb,KAI5C,CACD5lC,IAAK,oBACL5I,MAAO,SAA2BwuC,GAChC,IAAIwpb,EAAgBxpb,EAAMwpb,cACtBlxF,EAAYt4V,EAAMs4V,UAGtB,GAA2B,MAAvBxiY,KAAKw0d,eACP,GAAyB,oBAAdhyF,EAA0B,CAGnC,IAFA,IAAI4yF,EAAgB,EAEXj5d,EAAQ,EAAGA,EAAQu3d,EAAev3d,IACzCi5d,GAAiB5yF,EAAU,CAAErmY,MAAOA,IAGtC6D,KAAKw0d,eAAiBY,OAEtBp1d,KAAKw0d,eAAiBhyF,EAAYkxF,EAItC,OAAO1zd,KAAKw0d,iBAEb,CACDlwd,IAAK,6BACL5I,MAAO,WACL,GAAmD,kBAAxCsE,KAAKu4c,+BAA6C,CAC3D,IAAImE,EAAc18c,KAAKu4c,+BACnB5zI,EAAW3kU,KAAKw4c,4BAEpBx4c,KAAKu4c,+BAAiC,KACtCv4c,KAAKw4c,4BAA8B,KAEnCx4c,KAAKihd,kBAAkB,CACrBvE,YAAaA,EACb/3I,SAAUA,IAEZ3kU,KAAK29c,iBASR,CACDr5c,IAAK,8BACL5I,MAAO,SAAqC25d,GAC1C,IAAIvX,EAAU99c,KAAKkqC,MACf2wa,EAAciD,EAAQjD,YACtBya,EAA0BxX,EAAQwX,wBAClCC,EAAuBzX,EAAQyX,qBAC/BhkW,EAASusV,EAAQvsV,OACjBkiW,EAAmB3V,EAAQ2V,iBAC3BC,EAAgB5V,EAAQ4V,cACxBlxF,EAAYs7E,EAAQt7E,UACpBlnR,EAAQwiW,EAAQxiW,MAChBk6W,EAAsB1X,EAAQ0X,oBAC9BC,EAAuB3X,EAAQ2X,qBAC/BC,EAAmB5X,EAAQ4X,iBAC3BC,EAAoB7X,EAAQ6X,kBAC5Br6Y,EAAQwiY,EAAQxiY,MAGhBs6Y,EAAaP,GAAY9jW,IAAWvxH,KAAK61d,qBAAuBv6Y,IAAUt7E,KAAK81d,mBAC/EC,EAAiBV,GAAYxa,IAAgB76c,KAAKg2d,0BAA4BvC,IAAqBzzd,KAAKi2d,8BACxGC,EAAgBb,GAAY3B,IAAkB1zd,KAAKm2d,4BAA8B3zF,IAAcxiY,KAAKo2d,wBAEpGf,GAAYO,GAAct6W,IAAUt7G,KAAKq2d,sBAC3Cr2d,KAAK00d,qBAAuB5qb,IAAS,CACnCynF,OAAQA,EACRlH,SAAU,UACV/uC,MAAOA,GACNggC,KAGD+5W,GAAYO,GAAcM,KAC5Bl2d,KAAK20d,mBAAqB,CACxBpjW,OAAQvxH,KAAKi1d,kBAAkBj1d,KAAKkqC,OACpC+yE,SAAU,WACV3hC,MAAOA,GAGTt7E,KAAK80d,sBAAwB,CAC3BvjW,OAAQA,EAASvxH,KAAKi1d,kBAAkBj1d,KAAKkqC,OAC7CmgF,SAAU,UACVpN,SAAU,WACV3hC,MAAOA,KAIP+5Y,GAAYG,IAAwBx1d,KAAKs2d,oCAC3Ct2d,KAAKu2d,qBAAuBzsb,IAAS,CACnCvvB,KAAM,EACN0vH,UAAW,SACXs9K,UAAW+tK,EAA0B,OAAS,SAC9Cr4W,SAAU,YACTu4W,KAGDH,GAAYU,GAAkBN,IAAyBz1d,KAAKw2d,qCAC9Dx2d,KAAKy2d,sBAAwB3sb,IAAS,CACpCvvB,KAAMva,KAAKm1d,kBAAkBn1d,KAAKkqC,OAClC+yE,SAAU,YACTw4W,KAGDJ,GAAYK,IAAqB11d,KAAK02d,iCACxC12d,KAAK22d,kBAAoB7sb,IAAS,CAChCvvB,KAAM,EACN0vH,UAAW,SACXs9K,UAAW,SACXtqM,SAAU,WACVqX,IAAK,GACJohW,KAGDL,GAAYU,GAAkBJ,IAAsB31d,KAAK42d,kCAC3D52d,KAAK62d,mBAAqB/sb,IAAS,CACjCvvB,KAAMva,KAAKm1d,kBAAkBn1d,KAAKkqC,OAClC+/F,UAAWsrV,EAAuB,OAAS,SAC3ChuK,UAAW,SACXtqM,SAAU,WACVqX,IAAK,GACJqhW,IAGL31d,KAAKg2d,yBAA2Bnb,EAChC76c,KAAKi2d,8BAAgCxC,EACrCzzd,KAAKm2d,2BAA6BzC,EAClC1zd,KAAK61d,oBAAsBtkW,EAC3BvxH,KAAKo2d,uBAAyB5zF,EAC9BxiY,KAAKq2d,mBAAqB/6W,EAC1Bt7G,KAAKs2d,iCAAmCd,EACxCx1d,KAAKw2d,kCAAoCf,EACzCz1d,KAAK02d,8BAAgChB,EACrC11d,KAAK42d,+BAAiCjB,EACtC31d,KAAK81d,mBAAqBx6Y,IAE3B,CACDh3E,IAAK,oBACL5I,MAAO,WACDsE,KAAKg2d,2BAA6Bh2d,KAAKkqC,MAAM2wa,aAAe76c,KAAKi2d,gCAAkCj2d,KAAKkqC,MAAMupb,mBAChHzzd,KAAKu0d,eAAiB,MAGpBv0d,KAAKm2d,6BAA+Bn2d,KAAKkqC,MAAMwpb,eAAiB1zd,KAAKo2d,yBAA2Bp2d,KAAKkqC,MAAMs4V,YAC7GxiY,KAAKw0d,eAAiB,MAGxBx0d,KAAK2zd,8BAEL3zd,KAAKg2d,yBAA2Bh2d,KAAKkqC,MAAM2wa,YAC3C76c,KAAKi2d,8BAAgCj2d,KAAKkqC,MAAMupb,iBAChDzzd,KAAKm2d,2BAA6Bn2d,KAAKkqC,MAAMwpb,cAC7C1zd,KAAKo2d,uBAAyBp2d,KAAKkqC,MAAMs4V,YAE1C,CACDl+X,IAAK,wBACL5I,MAAO,SAA+BwuC,GACpC,IAAIorb,EAA0Bprb,EAAMorb,wBAChC7B,EAAmBvpb,EAAMupb,iBACzBC,EAAgBxpb,EAAMwpb,cACtB1Y,EAAW9wa,EAAM8wa,SACjB8b,EAA8B5sb,EAAM4sb,4BACpCC,EAAwB/2d,KAAKgnC,MAAM+vb,sBAGvC,IAAKtD,EACH,OAAO,KAGT,IAAIuD,EAAqBD,EAAwB,EAAI,EACjDxlW,EAASvxH,KAAKi3d,qBAAqB/sb,GACnCoxC,EAAQt7E,KAAKm1d,kBAAkBjrb,GAC/B4xa,EAAgB97c,KAAKgnC,MAAM+vb,sBAAwB/2d,KAAKgnC,MAAM80a,cAAgB,EAC9Eob,EAAYJ,EAA8Bx7Y,EAAQwgY,EAAgBxgY,EAElE67Y,EAAiB1yb,gBAAoBo0C,EAAM/uC,IAAS,GAAII,EAAO,CACjEu1a,aAAcz/c,KAAKo3d,4BACnBh+Y,UAAWp5E,KAAKkqC,MAAMmtb,wBACtB1c,YAAa8Y,EACb9T,yBAA0B3/c,KAAK4zd,wCAC/BriW,OAAQA,EACRiuV,SAAU8V,EAA0Bt1d,KAAKs3d,kBAAex7d,EACxDL,IAAKuE,KAAKu3d,mBACVvc,SAAUj+c,KAAKC,IAAI,EAAGg+c,EAAW0Y,GAAiBsD,EAClDx0F,UAAWxiY,KAAKw3d,qBAChBl8W,MAAOt7G,KAAKu2d,qBACZjyV,SAAU,KACVhpD,MAAO47Y,KAGT,OAAIJ,EACKryb,gBACL,MACA,CACE20C,UAAW,+BACXkiC,MAAOxxE,IAAS,GAAI9pC,KAAKu2d,qBAAsB,CAC7ChlW,OAAQA,EACRj2C,MAAOA,EACPisO,UAAW,YAEf4vK,GAGGA,IAER,CACD7yd,IAAK,yBACL5I,MAAO,SAAgCwuC,GACrC,IAAIywa,EAAczwa,EAAMywa,YACpB8Y,EAAmBvpb,EAAMupb,iBACzBC,EAAgBxpb,EAAMwpb,cACtB1Y,EAAW9wa,EAAM8wa,SACjBS,EAAiBvxa,EAAMuxa,eACvBE,EAAczxa,EAAMyxa,YAGxB,OAAOl3a,gBAAoBo0C,EAAM/uC,IAAS,GAAII,EAAO,CACnDu1a,aAAcz/c,KAAKy3d,6BACnBr+Y,UAAWp5E,KAAKkqC,MAAMwtb,yBACtB/c,YAAa59c,KAAKC,IAAI,EAAG29c,EAAc8Y,GACvC5Y,YAAa76c,KAAK23d,sBAClBhY,yBAA0B3/c,KAAK6zd,yCAC/BtiW,OAAQvxH,KAAKi3d,qBAAqB/sb,GAClCs1a,SAAUx/c,KAAKw6c,UACf4G,0BAA2Bphd,KAAKmhd,2BAChC1ld,IAAKuE,KAAK43d,oBACV5c,SAAUj+c,KAAKC,IAAI,EAAGg+c,EAAW0Y,GACjClxF,UAAWxiY,KAAKw3d,qBAChB/b,eAAgBA,EAAiBgY,EACjC9X,YAAaA,EAAc+X,EAC3Bp4W,MAAOt7G,KAAKy2d,sBACZn7Y,MAAOt7E,KAAK63d,mBAAmB3tb,QAGlC,CACD5lC,IAAK,qBACL5I,MAAO,SAA4BwuC,GACjC,IAAIupb,EAAmBvpb,EAAMupb,iBACzBC,EAAgBxpb,EAAMwpb,cAG1B,OAAKD,GAAqBC,EAInBjvb,gBAAoBo0C,EAAM/uC,IAAS,GAAII,EAAO,CACnDkvC,UAAWp5E,KAAKkqC,MAAM4tb,qBACtBnd,YAAa8Y,EACbliW,OAAQvxH,KAAKi1d,kBAAkB/qb,GAC/BzuC,IAAKuE,KAAK+3d,gBACV/c,SAAU0Y,EACVp4W,MAAOt7G,KAAK22d,kBACZryV,SAAU,KACVhpD,MAAOt7E,KAAKm1d,kBAAkBjrb,MAXvB,OAcV,CACD5lC,IAAK,sBACL5I,MAAO,SAA6BwuC,GAClC,IAAIywa,EAAczwa,EAAMywa,YACpB4a,EAAuBrrb,EAAMqrb,qBAC7B9B,EAAmBvpb,EAAMupb,iBACzBC,EAAgBxpb,EAAMwpb,cACtB/rK,EAAaz9Q,EAAMy9Q,WACnBqwK,EAA4B9tb,EAAM8tb,0BAClCnZ,EAAU7+c,KAAKgnC,MACfixb,EAA0BpZ,EAAQoZ,wBAClCnc,EAAgB+C,EAAQ/C,cAG5B,IAAK4X,EACH,OAAO,KAGT,IAAIwE,EAAwBD,EAA0B,EAAI,EACtD1mW,EAASvxH,KAAKi1d,kBAAkB/qb,GAChCoxC,EAAQt7E,KAAK63d,mBAAmB3tb,GAChCiub,EAAmBF,EAA0Bnc,EAAgB,EAE7Dsc,EAAa7mW,EACbjW,EAAQt7G,KAAK62d,mBAEbmB,IACFI,EAAa7mW,EAAS4mW,EACtB78W,EAAQxxE,IAAS,GAAI9pC,KAAK62d,mBAAoB,CAC5Ct8c,KAAM,KAIV,IAAI89c,EAAe5zb,gBAAoBo0C,EAAM/uC,IAAS,GAAII,EAAO,CAC/Du1a,aAAcz/c,KAAKs4d,0BACnBl/Y,UAAWp5E,KAAKkqC,MAAMqub,sBACtB5d,YAAa59c,KAAKC,IAAI,EAAG29c,EAAc8Y,GAAoByE,EAC3Drd,YAAa76c,KAAK23d,sBAClBhY,yBAA0B3/c,KAAK8zd,sCAC/BviW,OAAQ6mW,EACR5Y,SAAU+V,EAAuBv1d,KAAKw4d,mBAAgB18d,EACtDL,IAAKuE,KAAKy4d,iBACVzd,SAAU0Y,EACV/rK,WAAYA,EACZrsM,MAAOA,EACPgpB,SAAU,KACVhpD,MAAOA,KAGT,OAAI08Y,EACKvzb,gBACL,MACA,CACE20C,UAAW,6BACXkiC,MAAOxxE,IAAS,GAAI9pC,KAAK62d,mBAAoB,CAC3CtlW,OAAQA,EACRj2C,MAAOA,EACP2uD,UAAW,YAEfouV,GAGGA,KAEP,CAAC,CACH/zd,IAAK,2BACL5I,MAAO,SAAkC2nH,EAAW4tJ,GAClD,OAAI5tJ,EAAUskM,aAAe12C,EAAU02C,YAActkM,EAAUukM,YAAc32C,EAAU22C,UAC9E,CACLD,WAAoC,MAAxBtkM,EAAUskM,YAAsBtkM,EAAUskM,YAAc,EAAItkM,EAAUskM,WAAa12C,EAAU02C,WACzGC,UAAkC,MAAvBvkM,EAAUukM,WAAqBvkM,EAAUukM,WAAa,EAAIvkM,EAAUukM,UAAY32C,EAAU22C,WAIlG,SAIJ2rK,EAtkBO,CAukBd9ub,iBAEF8ub,GAAU9xW,aAAe,CACvB41W,wBAAyB,GACzBK,yBAA0B,GAC1BI,qBAAsB,GACtBS,sBAAuB,GACvBjD,yBAAyB,EACzBC,sBAAsB,EACtB9B,iBAAkB,EAClBC,cAAe,EACfjY,gBAAiB,EACjBE,aAAc,EACdrgW,MAAO,GACPk6W,oBAAqB,GACrBC,qBAAsB,GACtBC,iBAAkB,GAClBC,kBAAmB,GACnBqC,2BAA2B,EAC3BlB,6BAA6B,GAG/B,IAAItD,GAAmB,WACrB,IAAIpwW,EAASpjH,KAEbA,KAAKgnC,MAAQ,CACX2gR,WAAY,EACZC,UAAW,EACXk0J,cAAe,EACfmc,yBAAyB,EACzBlB,uBAAuB,GAEzB/2d,KAAKu4c,+BAAiC,KACtCv4c,KAAKw4c,4BAA8B,KAEnCx4c,KAAKu3d,mBAAqB,SAAU97d,GAClC2nH,EAAO2wW,gBAAkBt4d,GAG3BuE,KAAK43d,oBAAsB,SAAUn8d,GACnC2nH,EAAO4wW,iBAAmBv4d,GAG5BuE,KAAKo3d,4BAA8B,SAAU3nb,GAC3C,IAAIk1R,EAAWl1R,EAAMk1R,SACjBrgT,EAAO44B,IAAyBzN,EAAO,CAAC,aAExC4ua,EAAUj7V,EAAOl5E,MACjBu1a,EAAepB,EAAQoB,aACvBiU,EAAgBrV,EAAQqV,cAI5B,OAAI/uJ,IAHW05I,EAAQrD,SAGK0Y,EACnBjvb,gBAAoB,MAAO,CAChCngC,IAAKggB,EAAKhgB,IACVg3G,MAAOxxE,IAAS,GAAIxlB,EAAKg3F,MAAO,CAC9BiW,OA1oBkB,OA8oBfkuV,EAAa31a,IAAS,GAAIxlB,EAAM,CACrCo4B,OAAQ0mE,EACRuhN,SAAUA,EAAW+uJ,MAK3B1zd,KAAKy3d,6BAA+B,SAAUpzK,GAC5C,IAAIq4J,EAAcr4J,EAAMq4J,YACpB/3I,EAAWtgB,EAAMsgB,SACjBrgT,EAAO44B,IAAyBmnQ,EAAO,CAAC,cAAe,aAEvDm6J,EAAUp7V,EAAOl5E,MACjBu1a,EAAejB,EAAQiB,aACvBgU,EAAmBjV,EAAQiV,iBAC3BC,EAAgBlV,EAAQkV,cAG5B,OAAOjU,EAAa31a,IAAS,GAAIxlB,EAAM,CACrCo4b,YAAaA,EAAc+W,EAC3B/2a,OAAQ0mE,EACRuhN,SAAUA,EAAW+uJ,MAIzB1zd,KAAKs4d,0BAA4B,SAAUtzH,GACzC,IAAI03G,EAAc13G,EAAM03G,YACpBp4b,EAAO44B,IAAyB8nT,EAAO,CAAC,gBAExCk8G,EAAU99V,EAAOl5E,MACjBu1a,EAAeyB,EAAQzB,aACvB9E,EAAcuG,EAAQvG,YACtB8Y,EAAmBvS,EAAQuS,iBAG/B,OAAI/W,IAAgB/B,EAAc8Y,EACzBhvb,gBAAoB,MAAO,CAChCngC,IAAKggB,EAAKhgB,IACVg3G,MAAOxxE,IAAS,GAAIxlB,EAAKg3F,MAAO,CAC9BhgC,MArrBkB,OAyrBfmkY,EAAa31a,IAAS,GAAIxlB,EAAM,CACrCo4b,YAAaA,EAAc+W,EAC3B/2a,OAAQ0mE,MAKdpjH,KAAK23d,sBAAwB,SAAUnyH,GACrC,IAAIrpW,EAAQqpW,EAAMrpW,MACdu8d,EAAUt1W,EAAOl5E,MACjBywa,EAAc+d,EAAQ/d,YACtB8Y,EAAmBiF,EAAQjF,iBAC3B5Y,EAAc6d,EAAQ7d,YACtB8d,EAAUv1W,EAAOp8E,MACjB80a,EAAgB6c,EAAQ7c,cAQ5B,OAP8B6c,EAAQV,yBAOP97d,IAAUw+c,EAAc8Y,EAC9C3X,EAGqB,oBAAhBjB,EAA6BA,EAAY,CAAE1+c,MAAOA,EAAQs3d,IAAsB5Y,GAGhG76c,KAAKw6c,UAAY,SAAUoe,GACzB,IAAIjxK,EAAaixK,EAAWjxK,WACxBC,EAAYgxK,EAAWhxK,UAE3BxkM,EAAOR,SAAS,CACd+kM,WAAYA,EACZC,UAAWA,IAEb,IAAI43J,EAAWp8V,EAAOl5E,MAAMs1a,SACxBA,GACFA,EAASoZ,IAIb54d,KAAKmhd,2BAA6B,SAAUv7G,GAC1C,IAAIxlE,EAAawlE,EAAMxlE,WACnBrkS,EAAO6pW,EAAM7pW,KACbgkS,EAAW6lE,EAAM7lE,SACjB84L,EAAUz1W,EAAOp8E,MACjBixb,EAA0BY,EAAQZ,wBAClClB,EAAwB8B,EAAQ9B,sBAGpC,GAAI32L,IAAe63L,GAA2Bl4L,IAAag3L,EAAuB,CAChF3zW,EAAOR,SAAS,CACdk5V,cAAe//c,EACfk8d,wBAAyB73L,EACzB22L,sBAAuBh3L,IAGzB,IAAIqhL,EAA4Bh+V,EAAOl5E,MAAMk3a,0BAEJ,oBAA9BA,GACTA,EAA0B,CACxBhhL,WAAYA,EACZrkS,KAAMA,EACNgkS,SAAUA,MAMlB//R,KAAKw4d,cAAgB,SAAUI,GAC7B,IAAIjxK,EAAaixK,EAAWjxK,WAE5BvkM,EAAOo3V,UAAU,CACf7yJ,WAAYA,EACZC,UAAWxkM,EAAOp8E,MAAM4gR,aAI5B5nT,KAAKs3d,aAAe,SAAUsB,GAC5B,IAAIhxK,EAAYgxK,EAAWhxK,UAE3BxkM,EAAOo3V,UAAU,CACf5yJ,UAAWA,EACXD,WAAYvkM,EAAOp8E,MAAM2gR,cAI7B3nT,KAAKw3d,qBAAuB,SAAUnW,GACpC,IAAIlld,EAAQkld,EAAMlld,MACd28d,EAAU11W,EAAOl5E,MACjBwpb,EAAgBoF,EAAQpF,cACxB1Y,EAAW8d,EAAQ9d,SACnBx4E,EAAYs2F,EAAQt2F,UACpBu2F,EAAU31W,EAAOp8E,MACjB80a,EAAgBid,EAAQjd,cAQ5B,OAP4Bid,EAAQhC,uBAOP56d,IAAU6+c,EAAW0Y,EACzC5X,EAGmB,oBAAdt5E,EAA2BA,EAAU,CAAErmY,MAAOA,EAAQu3d,IAAmBlxF,GAGzFxiY,KAAK+3d,gBAAkB,SAAUt8d,GAC/B2nH,EAAO6wW,aAAex4d,GAGxBuE,KAAKy4d,iBAAmB,SAAUh9d,GAChC2nH,EAAO8wW,cAAgBz4d,IAI3B83d,GAAUz0M,UAiBN,GAGJ+1J,mBAAS0+C,IAEMA,ICx0BXyF,GAAa,SAAUtvK,GAGzB,SAASsvK,EAAW9ub,EAAOhhC,GACzBkkB,IAAgBptB,KAAMg5d,GAEtB,IAAIrhb,EAAQwqE,IAA2BniH,MAAOg5d,EAAW96d,WAAak6c,IAAuB4gB,IAAah4d,KAAKhB,KAAMkqC,EAAOhhC,IAY5H,OAVAyuC,EAAM3Q,MAAQ,CACZivQ,aAAc,EACd72K,YAAa,EACbw2K,aAAc,EACd+R,WAAY,EACZC,UAAW,EACX/R,YAAa,GAGfl+P,EAAM6ia,UAAY7ia,EAAM6ia,UAAU14b,KAAK61B,GAChCA,EA+CT,OAhEAkgC,IAAUmhZ,EAAYtvK,GAoBtBjyQ,IAAauhb,EAAY,CAAC,CACxB10d,IAAK,SACL5I,MAAO,WACL,IAAI4qC,EAAWtmC,KAAKkqC,MAAM5D,SACtBg4a,EAASt+c,KAAKgnC,MACdivQ,EAAeqoK,EAAOroK,aACtB72K,EAAck/U,EAAOl/U,YACrBw2K,EAAe0oK,EAAO1oK,aACtB+R,EAAa22J,EAAO32J,WACpBC,EAAY02J,EAAO12J,UACnB/R,EAAcyoK,EAAOzoK,YAGzB,OAAOvvQ,EAAS,CACd2vQ,aAAcA,EACd72K,YAAaA,EACbogV,SAAUx/c,KAAKw6c,UACf5kK,aAAcA,EACd+R,WAAYA,EACZC,UAAWA,EACX/R,YAAaA,MAGhB,CACDvxS,IAAK,YACL5I,MAAO,SAAmB2qC,GACxB,IAAI4vQ,EAAe5vQ,EAAK4vQ,aACpB72K,EAAc/4F,EAAK+4F,YACnBw2K,EAAevvQ,EAAKuvQ,aACpB+R,EAAathR,EAAKshR,WAClBC,EAAYvhR,EAAKuhR,UACjB/R,EAAcxvQ,EAAKwvQ,YAEvB71S,KAAK4iH,SAAS,CACZqzL,aAAcA,EACd72K,YAAaA,EACbw2K,aAAcA,EACd+R,WAAYA,EACZC,UAAWA,EACX/R,YAAaA,QAKZmjL,EAjEQ,CAkEfv0b,iBAGFu0b,GAAWl6M,UAOP,GCrFW,SAASm6M,GAAyB5yb,GAC/C,IAAI+yC,EAAY/yC,EAAK+yC,UACjBwtS,EAAUvgV,EAAKugV,QACftrQ,EAAQj1E,EAAKi1E,MAEjB,OAAO72E,gBACL,MACA,CAAE20C,UAAWA,EAAW13B,KAAM,MAAO45D,MAAOA,GAC5CsrQ,GAGJqyG,GAAyBn6M,UAAoD,KCd7E,IAceo6M,GAdK,CAKlBC,IAAK,MAMLC,KAAM,QCHO,SAASC,GAAchzb,GACpC,IAAI2oU,EAAgB3oU,EAAK2oU,cAErB/nP,EAAalsC,kBAAK,8CAA+C,CACnE,mDAAoDi0R,IAAkBkqH,GAAcC,IACpF,oDAAqDnqH,IAAkBkqH,GAAcE,OAGvF,OAAO30b,gBACL,MACA,CAAE20C,UAAW6tC,EAAY3rC,MAAO,GAAIi2C,OAAQ,GAAI+kJ,QAAS,aACzD04F,IAAkBkqH,GAAcC,IAAM10b,gBAAoB,OAAQ,CAAE3+B,EAAG,mBAAsB2+B,gBAAoB,OAAQ,CAAE3+B,EAAG,mBAC9H2+B,gBAAoB,OAAQ,CAAE3+B,EAAG,gBAAiB+iI,KAAM,UCb7C,SAASywV,GAAsBjzb,GAC5C,IAAI87V,EAAU97V,EAAK87V,QACfrhW,EAAQuF,EAAKvF,MACbztB,EAASgzB,EAAKhzB,OACd27V,EAAgB3oU,EAAK2oU,cAErBuqH,EAAoBlmd,IAAW8uX,EAC/B77V,EAAW,CAAC7B,gBACd,OACA,CACE20C,UAAW,+CACX90E,IAAK,QACL4lH,MAAwB,kBAAVppF,EAAqBA,EAAQ,MAC7CA,IAOF,OAJIy4b,GACFjzb,EAASl6B,KAAKq4B,gBAAoB40b,GAAe,CAAE/0d,IAAK,gBAAiB0qW,cAAeA,KAGnF1oU,ECpBM,SAASkzb,GAAmBnzb,GACzC,IAAI+yC,EAAY/yC,EAAK+yC,UACjBwtS,EAAUvgV,EAAKugV,QACfzqX,EAAQkqC,EAAKlqC,MACbmI,EAAM+hC,EAAK/hC,IACXm1d,EAAapzb,EAAKozb,WAClBC,EAAmBrzb,EAAKqzb,iBACxBC,EAAgBtzb,EAAKszb,cACrBC,EAAiBvzb,EAAKuzb,eACtBC,EAAkBxzb,EAAKwzb,gBACvBx3F,EAAUh8V,EAAKg8V,QACf/mR,EAAQj1E,EAAKi1E,MAEbw+W,EAAY,CAAE,gBAAiB39d,EAAQ,GAiC3C,OA/BIs9d,GAAcC,GAAoBC,GAAiBC,GAAkBC,KACvEC,EAAU,cAAgB,MAC1BA,EAAUx1V,SAAW,EAEjBm1V,IACFK,EAAUj1W,QAAU,SAAUsiB,GAC5B,OAAOsyV,EAAW,CAAEtyV,MAAOA,EAAOhrI,MAAOA,EAAOkmY,QAASA,MAGzDq3F,IACFI,EAAUC,cAAgB,SAAU5yV,GAClC,OAAOuyV,EAAiB,CAAEvyV,MAAOA,EAAOhrI,MAAOA,EAAOkmY,QAASA,MAG/Ds3F,IACFG,EAAUE,WAAa,SAAU7yV,GAC/B,OAAOwyV,EAAc,CAAExyV,MAAOA,EAAOhrI,MAAOA,EAAOkmY,QAASA,MAG5Du3F,IACFE,EAAUjxM,YAAc,SAAU1hJ,GAChC,OAAOyyV,EAAe,CAAEzyV,MAAOA,EAAOhrI,MAAOA,EAAOkmY,QAASA,MAG7Dw3F,IACFC,EAAUG,cAAgB,SAAU9yV,GAClC,OAAO0yV,EAAgB,CAAE1yV,MAAOA,EAAOhrI,MAAOA,EAAOkmY,QAASA,OAK7D59V,gBACL,MACAqF,IAAS,GAAIgwb,EAAW,CACtB1gZ,UAAWA,EACX90E,IAAKA,EACLo9C,KAAM,MACN45D,MAAOA,IACTsrQ,GFpCJyyG,GAAcv6M,UAEV,GCGJw6M,GAAsBx6M,UAAoD,KCkC1E06M,GAAmB16M,UAAoD,KChDvE,IAAIo7M,GAAS,SAAU/pN,GAGrB,SAAS+pN,IAGP,OAFA9sc,IAAgBptB,KAAMk6d,GAEf/3W,IAA2BniH,MAAOk6d,EAAOh8d,WAAak6c,IAAuB8hB,IAASjyd,MAAMjI,KAAM0D,YAG3G,OARAm0E,IAAUqiZ,EAAQ/pN,GAQX+pN,EATI,CAUXz1b,aAEFy1b,GAAOz4W,aAAe,CACpB04W,eCrBa,SAA+B9zb,GAC5C,IAAI87V,EAAU97V,EAAK87V,QACfE,EAAUh8V,EAAKg8V,QAEnB,MAA2B,oBAAhBA,EAAQt+X,IACVs+X,EAAQt+X,IAAIo+X,GAEZE,EAAQF,IDejBs9E,aEvBa,SAA6Bp5a,GAC1C,IAAI+zb,EAAW/zb,EAAK+zb,SAEpB,OAAgB,MAAZA,EACK,GAEAvrd,OAAOurd,IFkBhBC,qBAAsBnB,GAAcC,IACpC98Y,SAAU,EACV2sO,WAAY,EACZsxK,eAAgBhB,GAChBh+W,MAAO,IAEM4+W,UACfA,GAAOp7M,UAkEH,GG9EJ,IAAIw5K,GAAQ,SAAU5uI,GAGpB,SAAS4uI,EAAMpuZ,GACb9c,IAAgBptB,KAAMs4b,GAEtB,IAAI3gZ,EAAQwqE,IAA2BniH,MAAOs4b,EAAMp6b,WAAak6c,IAAuB9f,IAAQt3b,KAAKhB,KAAMkqC,IAW3G,OATAyN,EAAM3Q,MAAQ,CACZuzb,eAAgB,GAGlB5ib,EAAM6ib,cAAgB7ib,EAAM6ib,cAAc14c,KAAK61B,GAC/CA,EAAM8ib,WAAa9ib,EAAM8ib,WAAW34c,KAAK61B,GACzCA,EAAM6ia,UAAY7ia,EAAM6ia,UAAU14b,KAAK61B,GACvCA,EAAMwra,mBAAqBxra,EAAMwra,mBAAmBrhc,KAAK61B,GACzDA,EAAMwsa,QAAUxsa,EAAMwsa,QAAQric,KAAK61B,GAC5BA,EA2gBT,OA3hBAkgC,IAAUygX,EAAO5uI,GAmBjBjyQ,IAAa6gZ,EAAO,CAAC,CACnBh0b,IAAK,kBACL5I,MAAO,WACDsE,KAAK64E,MACP74E,KAAK64E,KAAK8kY,gBAMb,CACDr5c,IAAK,kBACL5I,MAAO,SAAyB2qC,GAC9B,IAAIm2a,EAAYn2a,EAAKm2a,UACjBrgd,EAAQkqC,EAAKlqC,MAEjB,OAAI6D,KAAK64E,KACqB74E,KAAK64E,KAAK00Y,iBAAiB,CACrD/Q,UAAWA,EACX73I,SAAUxoU,IAE0ByrT,UAIjC,IAKR,CACDtjT,IAAK,gCACL5I,MAAO,SAAuCitC,GAC5C,IAAI+za,EAAc/za,EAAM+za,YACpB/3I,EAAWh8R,EAAMg8R,SAEjB3kU,KAAK64E,MACP74E,KAAK64E,KAAK8sY,8BAA8B,CACtChhJ,SAAUA,EACV+3I,YAAaA,MAOlB,CACDp4c,IAAK,iBACL5I,MAAO,WACDsE,KAAK64E,MACP74E,KAAK64E,KAAK20Y,oBAMb,CACDlpd,IAAK,oBACL5I,MAAO,WACL,IAAI+zC,EAAQ/rC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5Eg3d,EAAoBjrb,EAAMita,YAC1BA,OAAoC5gd,IAAtB4+d,EAAkC,EAAIA,EACpDC,EAAiBlrb,EAAMk1R,SACvBA,OAA8B7oU,IAAnB6+d,EAA+B,EAAIA,EAE9C36d,KAAK64E,MACP74E,KAAK64E,KAAKooY,kBAAkB,CAC1Bt8I,SAAUA,EACV+3I,YAAaA,MAOlB,CACDp4c,IAAK,sBACL5I,MAAO,WACL,IAAIS,EAAQuH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAE5E1D,KAAK64E,MACP74E,KAAK64E,KAAKooY,kBAAkB,CAC1Bt8I,SAAUxoU,MAOf,CACDmI,IAAK,mBACL5I,MAAO,WACL,IAAIksT,EAAYlkT,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEhF1D,KAAK64E,MACP74E,KAAK64E,KAAK80Y,iBAAiB,CAAE/lK,UAAWA,MAM3C,CACDtjT,IAAK,cACL5I,MAAO,WACL,IAAIS,EAAQuH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAE5E1D,KAAK64E,MACP74E,KAAK64E,KAAK0uY,aAAa,CACrB7K,YAAa,EACb/3I,SAAUxoU,MAIf,CACDmI,IAAK,oBACL5I,MAAO,WACLsE,KAAK46d,uBAEN,CACDt2d,IAAK,qBACL5I,MAAO,WACLsE,KAAK46d,uBAEN,CACDt2d,IAAK,SACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETyrH,EAASzrH,KAAKkqC,MACd5D,EAAWmlF,EAAOnlF,SAClB8yC,EAAYqyC,EAAOryC,UACnBmpT,EAAgB92Q,EAAO82Q,cACvBs4F,EAAgBpvW,EAAOovW,cACvB9b,EAAYtzV,EAAOszV,UACnBt8E,EAAeh3Q,EAAOg3Q,aACtBq4F,EAAoBrvW,EAAOqvW,kBAC3BvpW,EAAS9F,EAAO8F,OAChBtwF,EAAKwqF,EAAOxqF,GACZ2sb,EAAiBniW,EAAOmiW,eACxBmN,EAAetvW,EAAOsvW,aACtBC,EAAWvvW,EAAOuvW,SAClBhoB,EAAgBvnV,EAAOunV,cACvB13V,EAAQmQ,EAAOnQ,MACfhgC,EAAQmwC,EAAOnwC,MACfi/Y,EAAiBv6d,KAAKgnC,MAAMuzb,eAG5BU,EAAsB14F,EAAgBhxQ,EAASA,EAASkxQ,EAExDy4F,EAAmC,oBAAjBH,EAA8BA,EAAa,CAAE5+d,OAAQ,IAAO4+d,EAC9EI,EAAqC,oBAAbH,EAA0BA,EAAS,CAAE7+d,OAAQ,IAAO6+d,EAehF,OAZAh7d,KAAKo7d,oBAAsB,GAC3B32b,WAAe7hC,QAAQ0jC,GAAU55B,SAAQ,SAAUqmZ,EAAQ52Z,GACzD,IAAIk/d,EAAaj4W,EAAOk4W,uBAAuBvoE,EAAQA,EAAO7oX,MAAMoxE,OAEpE8H,EAAOg4W,oBAAoBj/d,GAAS2tC,IAAS,GAAIuxb,EAAY,CAC3DhxW,SAAU,cAOP5lF,gBACL,MACA,CACE,aAAczkC,KAAKkqC,MAAM,cACzB,kBAAmBlqC,KAAKkqC,MAAM,mBAC9B,gBAAiBzF,WAAe7hC,QAAQ0jC,GAAUzkC,OAClD,gBAAiB7B,KAAKkqC,MAAM8wa,SAC5B5hY,UAAW2B,kBAAK,0BAA2B3B,GAC3Cn4C,GAAIA,EACJygB,KAAM,OACN45D,MAAOA,IACRinR,GAAiBu4F,EAAkB,CAClC1hZ,UAAW2B,kBAAK,qCAAsCmgZ,GACtDt0G,QAAS5mX,KAAKu7d,oBACdjgX,MAAOxxE,IAAS,CACdynF,OAAQkxQ,EACRp4Q,SAAU,SACVwJ,aAAc0mW,EACdj/Y,MAAOA,GACN6/Y,KAEL12b,gBAAoBo0C,EAAM/uC,IAAS,GAAI9pC,KAAKkqC,MAAO,CACjDu0a,oBAAoB,EACpBrlY,UAAW2B,kBAAK,gCAAiC8/Y,GACjDpb,aAAcz/c,KAAKy6d,WACnB5f,YAAav/X,EACbq/X,YAAa,EACbppV,OAAQ0pW,EACRh6b,QAAInlC,EACJ8id,kBAAmBgP,EACnBpO,SAAUx/c,KAAKw6c,UACff,kBAAmBz5c,KAAKmjd,mBACxB1nd,IAAKuE,KAAKmkd,QACVzia,KAAM,WACN64a,eAAgBA,EAChB5e,YAAa3I,EACb13V,MAAOxxE,IAAS,GAAIi1a,EAAW,CAC7B90U,UAAW,iBAKlB,CACD3lI,IAAK,gBACL5I,MAAO,SAAuB2oT,GAC5B,IAAI0uG,EAAS1uG,EAAM0uG,OACf2pD,EAAcr4J,EAAMq4J,YACpBpD,EAAcj1J,EAAMi1J,YACpB58Z,EAAS2nQ,EAAM3nQ,OACf2lV,EAAUh+E,EAAMg+E,QAChB19D,EAAWtgB,EAAMsgB,SACjB62J,EAAgBx7d,KAAKkqC,MAAMsxb,cAC3BC,EAAgB1oE,EAAO7oX,MACvBiwb,EAAiBsB,EAActB,eAC/B1a,EAAegc,EAAchc,aAC7BrmY,EAAYqiZ,EAAcriZ,UAC1BsiZ,EAAaD,EAAcC,WAC3Bv5F,EAAUs5F,EAAct5F,QACxBlhW,EAAKw6b,EAAcx6b,GAInBuhb,EAAe/C,EAAa,CAC9B2a,SAFaD,EAAe,CAAEuB,WAAYA,EAAYv5F,QAASA,EAASE,QAASA,IAGjFq5F,WAAYA,EACZhf,YAAaA,EACbv6E,QAASA,EACTm3E,YAAaA,EACb58Z,OAAQA,EACR2lV,QAASA,EACT19D,SAAUA,IAORrpN,EAAQt7G,KAAKo7d,oBAAoB1e,GAEjCxyV,EAAgC,kBAAjBs4V,EAA4BA,EAAe,KAK9D,OAAO/9a,gBACL,MACA,CACE,gBAAiBi4a,EAAc,EAC/B,mBAAoBz7a,EACpBm4C,UAAW2B,kBAAK,qCAAsC3B,GACtD90E,IAAK,MAAQqgU,EAAR,OAAiC+3I,EACtC73V,QAlBU,SAAiBsiB,GAC7Bq0V,GAAiBA,EAAc,CAAEE,WAAYA,EAAYv5F,QAASA,EAASh7P,MAAOA,KAkBhFzlF,KAAM,WACN45D,MAAOA,EACP4O,MAAOA,GACTs4V,KAGH,CACDl+c,IAAK,gBACL5I,MAAO,SAAuBspW,GAC5B,IAAI+tD,EAAS/tD,EAAM+tD,OACf52Z,EAAQ6oW,EAAM7oW,MACdohd,EAAUv9c,KAAKkqC,MACfyxb,EAAkBpe,EAAQoe,gBAC1BC,EAAcre,EAAQqe,YACtBC,EAAgBte,EAAQse,cACxBpvd,EAAO8wc,EAAQ9wc,KACf4G,EAASkqc,EAAQlqc,OACjB27V,EAAgBuuG,EAAQvuG,cACxB8sH,EAAiB/oE,EAAO7oX,MACxBwxb,EAAaI,EAAeJ,WAC5Bv5F,EAAU25F,EAAe35F,QACzBk4F,EAAuByB,EAAezB,qBACtC0B,EAAcD,EAAeC,YAC7BzB,EAAiBwB,EAAexB,eAChCr5b,EAAK66b,EAAe76b,GACpBH,EAAQg7b,EAAeh7b,MAEvBk7b,GAAeD,GAAetvd,EAE9Bw6G,EAAalsC,kBAAK,wCAAyC4gZ,EAAiB5oE,EAAO7oX,MAAMyxb,gBAAiB,CAC5GM,8CAA+CD,IAE7C1gX,EAAQt7G,KAAKs7d,uBAAuBvoE,EAAQjpX,IAAS,GAAI8xb,EAAa7oE,EAAO7oX,MAAM0xb,cAEnFM,EAAiB5B,EAAe,CAClCoB,WAAYA,EACZv5F,QAASA,EACT45F,YAAaA,EACbj7b,MAAOA,EACPztB,OAAQA,EACR27V,cAAeA,IAGbmtH,OAAgB,EAChBC,OAAkB,EAClBC,OAAiB,EACjBC,OAAiB,EACjBC,OAAkB,EAEtB,GAAIP,GAAeH,EAAe,CAEhC,IAIIW,EAJkBnpd,IAAW8uX,EAIQk4F,EAAuBrrH,IAAkBkqH,GAAcE,KAAOF,GAAcC,IAAMD,GAAcE,KAErIv0W,EAAU,SAAiBsiB,GAC7B60V,GAAevvd,EAAK,CAClB4td,qBAAsBA,EACtBlzV,MAAOA,EACP9zH,OAAQ8uX,EACRnzB,cAAewtH,IAEjBX,GAAiBA,EAAc,CAAEH,WAAYA,EAAYv5F,QAASA,EAASh7P,MAAOA,KASpFo1V,EAAkBxpE,EAAO7oX,MAAM,eAAiBpJ,GAASqhW,EACzDm6F,EAAiB,OACjBD,EAAiB,EACjBF,EAAgBt3W,EAChBu3W,EAVgB,SAAmBj1V,GACf,UAAdA,EAAM7iI,KAAiC,MAAd6iI,EAAM7iI,KACjCugH,EAAQsiB,IAkBd,OAPI9zH,IAAW8uX,IACbm6F,EAAiBttH,IAAkBkqH,GAAcC,IAAM,YAAc,cAMhE10b,gBACL,MACA,CACE,aAAc83b,EACd,YAAaD,EACbljZ,UAAW6tC,EACXhmF,GAAIA,EACJ38B,IAAK,aAAenI,EACpB0oH,QAASs3W,EACTh7V,UAAWi7V,EACX16a,KAAM,eACN45D,MAAOA,EACPgpB,SAAU+3V,GACZH,KAGH,CACD53d,IAAK,aACL5I,MAAO,SAAoB8pW,GACzB,IAAIjiP,EAASvjH,KAET7D,EAAQqpW,EAAM7gC,SACd20I,EAAc9zG,EAAM8zG,YACpBh1c,EAAMkhW,EAAMlhW,IACZo4C,EAAS8oT,EAAM9oT,OACf4+D,EAAQkqP,EAAMlqP,MACdoiW,EAAU19c,KAAKkqC,MACf5D,EAAWo3a,EAAQp3a,SACnBmzb,EAAa/b,EAAQ+b,WACrBC,EAAmBhc,EAAQgc,iBAC3BG,EAAkBnc,EAAQmc,gBAC1BD,EAAiBlc,EAAQkc,eACzBD,EAAgBjc,EAAQic,cACxBoB,EAAerd,EAAQqd,aACvB0B,EAAY/e,EAAQ+e,UACpBpP,EAAc3P,EAAQ2P,YACtB2N,EAAWtd,EAAQsd,SACnBT,EAAiBv6d,KAAKgnC,MAAMuzb,eAG5BW,EAAmC,oBAAjBH,EAA8BA,EAAa,CAAE5+d,MAAOA,IAAW4+d,EACjFI,EAAqC,oBAAbH,EAA0BA,EAAS,CAAE7+d,MAAOA,IAAW6+d,EAC/E34F,EAAUo6F,EAAU,CAAEtge,MAAOA,IAE7ByqX,EAAUniV,WAAe7hC,QAAQ0jC,GAAUt9B,KAAI,SAAU+pZ,EAAQ2pD,GACnE,OAAOn5V,EAAOi3W,cAAc,CAC1BznE,OAAQA,EACR2pD,YAAaA,EACbpD,YAAaA,EACb58Z,OAAQA,EACR2lV,QAASA,EACT19D,SAAUxoU,EACVo+d,eAAgBA,OAIhBnhZ,EAAY2B,kBAAK,+BAAgCmgZ,GACjDwB,EAAiB5yb,IAAS,GAAIwxE,EAAO,CACvCiW,OAAQvxH,KAAK28d,cAAcxge,GAC3BkuH,SAAU,SACVwJ,aAAc0mW,GACbY,GAEH,OAAO9N,EAAY,CACjBj0Y,UAAWA,EACXwtS,QAASA,EACTzqX,MAAOA,EACPm9c,YAAaA,EACbh1c,IAAKA,EACLm1d,WAAYA,EACZC,iBAAkBA,EAClBG,gBAAiBA,EACjBD,eAAgBA,EAChBD,cAAeA,EACft3F,QAASA,EACT/mR,MAAOohX,MAQV,CACDp4d,IAAK,yBACL5I,MAAO,SAAgCq3Z,GACrC,IAAI6pE,EAAcl5d,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAElFm5d,EAAY9pE,EAAO7oX,MAAMmyC,SAAW,IAAM02U,EAAO7oX,MAAM8+Q,WAAa,IAAM+pG,EAAO7oX,MAAMoxC,MAAQ,KAE/FggC,EAAQxxE,IAAS,GAAI8yb,EAAa,CACpC56V,KAAM66V,EACNC,OAAQD,EACRE,WAAYF,IAWd,OARI9pE,EAAO7oX,MAAMoyC,WACfg/B,EAAMh/B,SAAWy2U,EAAO7oX,MAAMoyC,UAG5By2U,EAAO7oX,MAAMsxC,WACf8/B,EAAM9/B,SAAWu3U,EAAO7oX,MAAMsxC,UAGzB8/B,IAER,CACDh3G,IAAK,oBACL5I,MAAO,WACL,IAAI8rJ,EAASxnJ,KAET89c,EAAU99c,KAAKkqC,MACf5D,EAAWw3a,EAAQx3a,SAKvB,OAJoBw3a,EAAQv7E,cAEA,GAAK99V,WAAe7hC,QAAQ0jC,IAE3Ct9B,KAAI,SAAU+pZ,EAAQ52Z,GACjC,OAAOqrJ,EAAOw1U,cAAc,CAAEjqE,OAAQA,EAAQ52Z,MAAOA,SAGxD,CACDmI,IAAK,gBACL5I,MAAO,SAAuBipU,GAC5B,IAAI69D,EAAYxiY,KAAKkqC,MAAMs4V,UAG3B,MAA4B,oBAAdA,EAA2BA,EAAU,CAAErmY,MAAOwoU,IAAc69D,IAE3E,CACDl+X,IAAK,YACL5I,MAAO,SAAmBkqW,GACxB,IAAI3vD,EAAe2vD,EAAM3vD,aACrBL,EAAegwD,EAAMhwD,aACrBgS,EAAYg+C,EAAMh+C,WAItB43J,EAHex/c,KAAKkqC,MAAMs1a,UAGjB,CAAEvpK,aAAcA,EAAcL,aAAcA,EAAcgS,UAAWA,MAE/E,CACDtjT,IAAK,qBACL5I,MAAO,SAA4B2ld,GACjC,IAAIrH,EAAwBqH,EAAMrH,sBAC9BE,EAAuBmH,EAAMnH,qBAC7BE,EAAgBiH,EAAMjH,cACtBC,EAAegH,EAAMhH,cAIzB0R,EAHqB/rd,KAAKkqC,MAAM6hb,gBAGjB,CACbrL,mBAAoB1G,EACpB2G,kBAAmBzG,EACnBqG,WAAYnG,EACZoG,UAAWnG,MAGd,CACD/1c,IAAK,UACL5I,MAAO,SAAiBD,GACtBuE,KAAK64E,KAAOp9E,IAEb,CACD6I,IAAK,qBACL5I,MAAO,WACL,GAAIsE,KAAK64E,KAAM,CACb,IAAIokZ,EAAQnzM,sBAAY9pR,KAAK64E,MACzBumD,EAAc69V,EAAM79V,aAAe,EAEnCm7V,GADc0C,EAAMpzI,aAAe,GACJzqN,EAEnCp/H,KAAK4iH,SAAS,CAAE23W,eAAgBA,SAK/BjiC,EA5hBG,CA6hBV7zZ,iBAEF6zZ,GAAM72U,aAAe,CACnB8gR,eAAe,EACfo/E,iBAAkB,GAClBl/E,aAAc,EACdm5F,YAAa,GACbhO,eAAgB,WACd,OAAO,MAET7B,eAAgB,WACd,OAAO,MAETvM,SAAU,WACR,OAAO,MAETK,sBAAuBgO,EACvB/N,iBAAkB,GAClBuN,YAAamM,GACbsB,kBAAmB7B,GACnB+B,SAAU,GACV9jB,kBAAmB,OACnBlE,eAAgB,EAChB13V,MAAO,IAEMg9U,UACfA,GAAMx5K,UAkNF,GCvxBWw5K,ICRX4kC,GAAmB,GACnBC,GAA4B,KAC5BC,GAAgC,KAEpC,SAASC,KACHD,KACFA,GAAgC,KAE5Bp3b,SAASywC,MAAqC,MAA7B0mZ,KACnBn3b,SAASywC,KAAK6kC,MAAM+Y,cAAgB8oW,IAGtCA,GAA4B,MAIhC,SAASG,KACPD,KACAH,GAAiBxwd,SAAQ,SAAU2gB,GACjC,OAAOA,EAASkwc,wBAiBpB,SAASC,GAAer2V,GAClBA,EAAMziB,gBAAkBh2F,QAAuC,MAA7Byuc,IAAqCn3b,SAASywC,OAClF0mZ,GAA4Bn3b,SAASywC,KAAK6kC,MAAM+Y,cAEhDruF,SAASywC,KAAK6kC,MAAM+Y,cAAgB,QAjBxC,WACM+oW,IACFplB,EAAuBolB,IAGzB,IAAIK,EAAiB,EACrBP,GAAiBxwd,SAAQ,SAAU2gB,GACjCowc,EAAiB1ge,KAAKC,IAAIyge,EAAgBpwc,EAAS6c,MAAM82a,+BAG3Doc,GAAgCnlB,EAAwBqlB,GAAuCG,GAS/FC,GACAR,GAAiBxwd,SAAQ,SAAU2gB,GAC7BA,EAAS6c,MAAMyzb,gBAAkBx2V,EAAMziB,eACzCr3F,EAASuwc,+BAKR,SAASC,GAAuBvkZ,EAAWwuH,GAC3Co1R,GAAiBzvd,MAAK,SAAU4f,GACnC,OAAOA,EAAS6c,MAAMyzb,gBAAkB71R,MAExCA,EAAQ9+F,iBAAiB,SAAUw0X,IAErCN,GAAiB9wd,KAAKktE,GAGjB,SAASwkZ,GAAyBxkZ,EAAWwuH,IAClDo1R,GAAmBA,GAAiB3xd,QAAO,SAAU8hB,GACnD,OAAOA,IAAaisD,MAEAz3E,SACpBimM,EAAQ7+F,oBAAoB,SAAUu0X,IAClCJ,KACFplB,EAAuBolB,IACvBC,OC/DN,IAAIU,GAAW,SAAkBj2R,GAC/B,OAAOA,IAAYp5K,QAMjBsvc,GAAiB,SAAwBl2R,GAC3C,OAAOA,EAAQmyF,yBAGV,SAASgkM,GAAcN,EAAezzb,GAC3C,GAAKyzb,EAKE,IAAII,GAASJ,GAAgB,CAClC,IAAIO,EAAUxvc,OACV86T,EAAc00I,EAAQ10I,YACtB20I,EAAaD,EAAQC,WAEzB,MAAO,CACL5sW,OAA+B,kBAAhBi4N,EAA2BA,EAAc,EACxDluQ,MAA6B,kBAAf6iZ,EAA0BA,EAAa,GAGvD,OAAOH,GAAeL,GAdtB,MAAO,CACLpsW,OAAQrnF,EAAMk0b,aACd9iZ,MAAOpxC,EAAMm0b,aAsBZ,SAASC,GAAkBx2R,EAAStuH,GACzC,GAAIukZ,GAASvkZ,IAAcxzC,SAASz+B,gBAAiB,CACnD,IAAIg3d,EAAmBv4b,SAASz+B,gBAC5Bi3d,EAAcR,GAAel2R,GAC7B22R,EAAgBT,GAAeO,GACnC,MAAO,CACLjqW,IAAKkqW,EAAYlqW,IAAMmqW,EAAcnqW,IACrC/5G,KAAMikd,EAAYjkd,KAAOkkd,EAAclkd,MAGzC,IAAI08b,EAAeynB,GAAgBllZ,GAC/BmlZ,EAAeX,GAAel2R,GAC9B82R,EAAiBZ,GAAexkZ,GACpC,MAAO,CACL86C,IAAKqqW,EAAarqW,IAAM2iV,EAAa3iV,IAAMsqW,EAAetqW,IAC1D/5G,KAAMokd,EAAapkd,KAAO08b,EAAa18b,KAAOqkd,EAAerkd,MAS5D,SAASmkd,GAAgB52R,GAC9B,OAAIi2R,GAASj2R,IAAY9hK,SAASz+B,gBACzB,CACL+sH,IAAK,YAAa5lG,OAASA,OAAO65T,QAAUviT,SAASz+B,gBAAgBqgT,UACrErtS,KAAM,YAAamU,OAASA,OAAOmwc,QAAU74b,SAASz+B,gBAAgBogT,YAGjE,CACLrzL,IAAKwzE,EAAQ8/G,UACbrtS,KAAMutL,EAAQ6/G,YC7Db,IAEH6mC,GAAY,WACd,MAAyB,qBAAX9/T,OAAyBA,YAAS5yB,GAG9Cgje,GAAiB,SAAUp1K,GAG7B,SAASo1K,IACP,IAAIz4b,EAEAsI,EAAOgJ,EAAOgra,EAElBv1b,IAAgBptB,KAAM8+d,GAEtB,IAAK,IAAI/zc,EAAOrnB,UAAU7B,OAAQmpB,EAAOvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC3ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAe0jB,EAASgJ,EAAQwqE,IAA2BniH,MAAOqmC,EAAOy4b,EAAe5ge,WAAak6c,IAAuB0mB,IAAiB99d,KAAKiH,MAAMo+B,EAAM,CAACrmC,MAAMsL,OAAO0f,KAAiB2sB,EAAMumb,QAAU1vI,KAAa72S,EAAM66N,YAAa,EAAO76N,EAAMonb,iBAAmB,EAAGpnb,EAAMqnb,kBAAoB,EAAGrnb,EAAM3Q,MAAQ8C,IAAS,GAAIm0b,GAActmb,EAAMzN,MAAMyzb,cAAehmb,EAAMzN,OAAQ,CAC7Xova,aAAa,EACb3xJ,WAAY,EACZC,UAAW,IACTjwQ,EAAMoza,eAAiB,SAAUjjR,IAC/BA,GAAaA,aAAmB24G,SAClCz4R,QAAQC,KAAK,qEAEf0vB,EAAMsnb,OAASn3R,EACfnwJ,EAAMunb,kBACLvnb,EAAMwnb,eAAiB,SAAUx2b,GAClC,IAAIi/Q,EAAYj/Q,EAAMi/Q,UAEtB,GAAIjwQ,EAAM3Q,MAAM4gR,YAAcA,EAA9B,CAIA,IAAI+1K,EAAgBhmb,EAAMzN,MAAMyzb,cAC5BA,IACoC,oBAA3BA,EAAcj6H,SACvBi6H,EAAcj6H,SAAS,EAAG97C,EAAYjwQ,EAAMonb,kBAE5CpB,EAAc/1K,UAAYA,EAAYjwQ,EAAMonb,oBAG/Cpnb,EAAMynb,wBAA0B,SAAUt3R,GACvCA,IAAYp5K,OACdA,OAAOs6E,iBAAiB,SAAUrxD,EAAM+ra,WAAW,GAEnD/ra,EAAM2sa,qBAAqBE,kBAAkB18Q,EAASnwJ,EAAM+ra,YAE7D/ra,EAAM0nb,0BAA4B,SAAUv3R,GACzCA,IAAYp5K,OACdA,OAAOu6E,oBAAoB,SAAUtxD,EAAM+ra,WAAW,GAC7C57Q,GACTnwJ,EAAM2sa,qBAAqBG,qBAAqB38Q,EAASnwJ,EAAM+ra,YAEhE/ra,EAAM+ra,UAAY,WACnB/ra,EAAMunb,kBACLvnb,EAAMimb,0BAA4B,WACnC,GAAKjmb,EAAM66N,WAAX,CAIA,IAAIgtM,EAAW7na,EAAMzN,MAAMs1a,SAGvBme,EAAgBhmb,EAAMzN,MAAMyzb,cAChC,GAAIA,EAAe,CACjB,IAAI1mB,EAAeynB,GAAgBf,GAC/B2B,EAAcvie,KAAKC,IAAI,EAAGi6c,EAAa18b,KAAOo9B,EAAMqnb,mBACpDO,EAAaxie,KAAKC,IAAI,EAAGi6c,EAAa3iV,IAAM38E,EAAMonb,kBAEtDpnb,EAAMirE,SAAS,CACb02V,aAAa,EACb3xJ,WAAY23K,EACZ13K,UAAW23K,IAGb/f,EAAS,CACP73J,WAAY23K,EACZ13K,UAAW23K,OAGd5nb,EAAM4lb,mBAAqB,WAC5B5lb,EAAMirE,SAAS,CACb02V,aAAa,KAlEVqJ,EAoEJh0a,EAAQwzE,IAA2BxqE,EAAOgra,GA0G/C,OA3LA9qY,IAAUinZ,EAAgBp1K,GAoF1BjyQ,IAAaqnb,EAAgB,CAAC,CAC5Bx6d,IAAK,iBACL5I,MAAO,WACL,IAAIiie,EAAgBj6d,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MAAMyzb,cAC/F9Z,EAAW7jd,KAAKkqC,MAAM25a,SACtBvF,EAASt+c,KAAKgnC,MACduqF,EAAS+sV,EAAO/sV,OAChBj2C,EAAQgjY,EAAOhjY,MAGfkkZ,EAAWx/d,KAAKi/d,QAAUp1M,cAAqB7pR,MACnD,GAAIw/d,aAAoB/+K,SAAWk9K,EAAe,CAChD,IAAI7vd,EAASwwd,GAAkBkB,EAAU7B,GACzC39d,KAAK++d,iBAAmBjxd,EAAOwmH,IAC/Bt0H,KAAKg/d,kBAAoBlxd,EAAOyM,KAGlC,IAAIiuR,EAAay1L,GAAcN,EAAe39d,KAAKkqC,OAC/CqnF,IAAWi3K,EAAWj3K,QAAUj2C,IAAUktN,EAAWltN,QACvDt7E,KAAK4iH,SAAS,CACZ2O,OAAQi3K,EAAWj3K,OACnBj2C,MAAOktN,EAAWltN,QAEpBuoY,EAAS,CACPtyV,OAAQi3K,EAAWj3K,OACnBj2C,MAAOktN,EAAWltN,WAIvB,CACDh3E,IAAK,oBACL5I,MAAO,WACL,IAAIiie,EAAgB39d,KAAKkqC,MAAMyzb,cAE/B39d,KAAKskd,qBAAuBC,cAE5Bvkd,KAAKk/d,eAAevB,GAEhBA,IACFE,GAAuB79d,KAAM29d,GAC7B39d,KAAKo/d,wBAAwBzB,IAG/B39d,KAAKwyQ,YAAa,IAEnB,CACDluQ,IAAK,qBACL5I,MAAO,SAA4B2iH,EAAW4yJ,GAC5C,IAAI0sN,EAAgB39d,KAAKkqC,MAAMyzb,cAC3B8B,EAAoBphX,EAAUs/W,cAG9B8B,IAAsB9B,GAAsC,MAArB8B,GAA8C,MAAjB9B,IACtE39d,KAAKk/d,eAAevB,GAEpBG,GAAyB99d,KAAMy/d,GAC/B5B,GAAuB79d,KAAM29d,GAE7B39d,KAAKq/d,0BAA0BI,GAC/Bz/d,KAAKo/d,wBAAwBzB,MAGhC,CACDr5d,IAAK,uBACL5I,MAAO,WACL,IAAIiie,EAAgB39d,KAAKkqC,MAAMyzb,cAC3BA,IACFG,GAAyB99d,KAAM29d,GAC/B39d,KAAKq/d,0BAA0B1B,IAGjC39d,KAAKwyQ,YAAa,IAEnB,CACDluQ,IAAK,SACL5I,MAAO,WACL,IAAI4qC,EAAWtmC,KAAKkqC,MAAM5D,SACtBu4a,EAAU7+c,KAAKgnC,MACfsya,EAAcuF,EAAQvF,YACtB1xJ,EAAYi3J,EAAQj3J,UACpBD,EAAak3J,EAAQl3J,WACrBp2L,EAASstV,EAAQttV,OACjBj2C,EAAQujY,EAAQvjY,MAGpB,OAAOh1C,EAAS,CACdo5b,cAAe1/d,KAAKm/d,eACpB5T,cAAevrd,KAAK+qd,eACpBx5V,OAAQA,EACR+nV,YAAaA,EACb3xJ,WAAYA,EACZC,UAAWA,EACXtsO,MAAOA,QAWNwjZ,EA5LY,CA6LnBr6b,iBAEFq6b,GAAer9W,aAAe,CAC5BoiW,SAAU,aACVrE,SAAU,aACVwB,2BAxMgC,IAyMhC2c,cAAenvI,KACf4vI,aAAc,EACdC,YAAa,GAEfS,GAAehgN,UAAoD,M,6BC7NnE,iHAGaj/N,EAAsB,QACtB8/a,EAAe,SAAC1+b,GAAD,gBAAmBrM,aAAnB,YAAiCqM,IAChD2+b,EAAmB,SAAC3+b,GAAD,gBAAmBrM,aAAnB,YAAiCqM,EAAjC,W,6BCLhC,uHAmEa4+b,EAA2B,qDAC3BC,EAA4B,QAC5BC,EAAiC,CAC5ChgM,SAAU,SACVK,WAAY,UAiCRh1B,EAAgBhiP,iBAAO,CAC3B42c,YAAa,GACbC,kBAAmB,GACnBC,sBAAuB,GACvBC,wBAAyB,GACzBC,6BAA8B,GAC9BC,mBAAoB,GACpBC,qBAAsB,GACtBC,cAAe,CACbC,8BAA8B,EAC9BC,yBAAyB,EACzBC,6BAA6B,GAE/B/wH,mBAAoB,CAClBh7R,aAAc,KACdgsZ,SAAU,KACVhwH,aAAa,EACbz8C,kBAAmB,KACnB08C,aAAc,KACdp+D,UAAW,MAEbo9D,kBAAkB,EAClBgxH,mBAAmB,EACnBC,cAAe,CACbC,gBAAgB,EAChBzvb,QAASwub,EACTj6X,SAAUk6X,EACVhkF,aAAcikF,EACd/6W,gBAAiB,MAEnB+7W,eAAgB,GAChBC,OAAQ,GACRC,eAAgB,GAChBC,qBAAsB,GACtBC,kBAAmB,GACnBC,aAAa,EACbC,cAAc,EACdh4C,aAAc,CACZpF,WAAY,EACZ/4Z,OAAQ,IAEVm/E,QAAS,GACTi3X,iBAAiB,IA2SJp/c,IAxSQ,WAAyF,IAAxF8kB,EAAuF,uDAAnCokO,EAAelgP,EAAoB,uCAC7G,OAAQA,EAAOhrB,MACb,KAAKkzC,IAAuBE,oBAAsB,IAAD,EAC/C,EAEIpoB,EADFgc,EADF,EACEA,QAEF,OAAOF,EAAMt/B,IAAI,kBAAV,iBAA6Bw/B,QAA7B,IAA6BA,OAA7B,EAA6BA,EAASq6b,kBAAtC,SAAqDv6b,EAAMjjC,IAAI,oBAExE,KAAKqvC,IAAuBI,gBAC1B,MAEItoB,EADFgc,EADF,EACEA,QAEF,OAAOF,EAAMt/B,IAAI,eAAgB0hB,iBAAO8d,IAE1C,KAAKkM,IAAuBM,iBAC1B,MAEIxoB,EADFgc,EADF,EACEA,QAIAyjE,EACEzjE,EADFyjE,KAEF,OAAO3jE,EAAMt/B,IAAI,eAAgBijG,GAEnC,KAAKv3D,IAAuBQ,gBAC1B,MAEI1oB,EADFgc,EADF,EACEA,QAIAs6b,EACEt6b,EADFs6b,YAEF,OAAOx6b,EAAMt/B,IAAI,iBAAkB85d,GAErC,KAAKx0Q,IAAiBU,qBACpB,MAEIxiM,EADFgc,EADF,EACEA,QAIAy9Y,EACEz9Y,EADFy9Y,QAEF,OAAO39Y,EAAMt/B,IAAI,iBAAkBi9a,GAErC,KAAKj5W,IAAe+D,gBAClB,OAAO27L,EAAcp6P,eAAc,SAACywd,GAEyB,CACzD,aACA,cACA,iBACA,WAEU/0d,SAAQ,SAACpI,GACnBm9d,EAAa/5d,IAAIpD,EAAK0iC,EAAMjjC,IAAIO,UAItC,KAAK8uC,IAAuBU,kBAC1B,MAEI5oB,EADFgc,EADF,EACEA,QAIO84b,EACL94b,EADFF,MAEF,OAAOA,EAAMt/B,IAAI,cAAes4d,GAElC,KAAK5sb,IAAuBY,gBAC1B,MAEI9oB,EADFgc,EADF,EACEA,QAIAgmX,EACEhmX,EADFgmX,WAEF,OAAOlmX,EAAMt/B,IAAI,aAAcwlZ,GAEjC,KAAKlgM,IAAiB8B,qBACpB,MAEI5jM,EADFgc,EADF,EACEA,QAIAhnC,EAGEgnC,EAHFhnC,KACAqY,EAEE2uB,EAFF3uB,KACAosa,EACEz9Y,EADFy9Y,QAGInnV,EAASt2D,EAAQ8T,KAAKwiD,OAE5B,OAAOx2D,EAAM92B,MAAM,CAAC,uBAAwBstF,EAAQt9F,EAAMykb,GAAUpsa,GAEtE,KAAKy0M,IAAiB00Q,qBACpB,MAEIx2c,EADFgc,EADF,EACEA,QAIAhnC,EACEgnC,EADFhnC,KAGIs9F,EAASt2D,EAAQ8T,KAAKwiD,OAEtBmkY,EAAuC36b,EAAMpmB,MAAM,CAAC,qBAAsB48E,KAAY3+F,gBACtF+ie,EAAwBD,EAAepid,SAASuoF,YAAc5nG,IAEpE,OAAO0he,EAAsBr/c,UAC3BykB,EAAM32B,SAAS,CAAC,qBAAsBmtF,IACtCx2D,EAAM92B,MAAM,CAAC,qBAAsBstF,GAASokY,GAEhD,KAAK50Q,IAAiBoC,sBACpB,MAEIlkM,EADFgc,EADF,EACEA,QAGImrL,EAAUnrL,EAAQtmB,MAAM,CAAC,OAAQ,YACjCrI,EAAO2uB,EAAQnjC,IAAI,QAEzB,OAAOijC,EAAM92B,MAAM,CAAC,kBAAmBmiN,GAAU95M,GAEnD,KAAKy0M,IAAiBsC,sBACpB,MAEIpkM,EADFgc,EADF,EACEA,QAGImrL,EAAUnrL,EAAQtmB,MAAM,CAAC,OAAQ,YACvC,OAAOomB,EAAM32B,SAAS,CAAC,gBAAiBgiN,IAE1C,KAAKj/K,IAAuBY,gBAC1B,MAEI9oB,EADFgc,EADF,EACEA,QAIAgmX,EACEhmX,EADFgmX,WAEF,OAAOlmX,EAAMt/B,IAAI,aAAcwlZ,GAEjC,KAAK95W,IAAuBc,2BAC1B,OAEIhpB,EADFgc,GADF,GACEA,QAEF,OAAOF,EAAMt/B,IAAI,uBAAwBw/B,IAE3C,KAAKkM,IAAuBgB,wBAC1B,OAEIlpB,EADFgc,GADF,GACEA,QAEF,OAAOF,EAAMt/B,IAAI,oBAAqBw/B,IAExC,KAAKkM,IAAuBoB,4BAC1B,OAEItpB,EADFgc,GADF,GACEA,QAIAgD,GAEEhD,GAFFgD,MACAjJ,GACEiG,GADFjG,GAEF,OAAU,MAANA,GACK+F,EAEFA,EAAM92B,MAAM,CAAC,wBAAyB+wB,IAAKiJ,IAEpD,KAAKkJ,IAAuBsB,8BAC1B,OAEIxpB,EADFgc,GADF,GACEA,QAIAyU,GAEEzU,GAFFyU,QACA1a,GACEiG,GADFjG,GAEF,OAAU,MAANA,GACK+F,EAEFA,EAAM92B,MAAM,CAAC,0BAA2B+wB,IAAK0a,IAEtD,KAAKvI,IAAuBkB,yBAC1B,OAEIppB,EADFgc,GADF,GACEA,QAIAyjE,GAEEzjE,GAFFyjE,KACA1pE,GACEiG,GADFjG,GAEF,GAAU,MAANA,GACF,OAAO+F,EAGT,GAAI2jE,GAAM,CACN,IAAMy1X,GAA+Bp5b,EAAMjjC,IAAI,gCAC/C,GAAIq8d,KAAiCn/b,KAAOm/b,GAC1C,OAAOp5b,EACJt/B,IAAI,+BAAgCu5B,IACpC/wB,MAAM,CAAC,oBAAqBkwd,KAA+B,GAC3D/wd,SAAS,CAAC,oBAAqB4xB,KAAK,GAAO,SAAChrB,GAAD,OAAiB,MAAR00F,GAAeA,IAAQ10F,KAGpF,OAAO+wB,EAAM33B,SAAS,CAAC,oBAAqB4xB,KAAK,GAAO,SAAChrB,GAAD,OAAiB,MAAR00F,GAAeA,IAAQ10F,KAE1F,KAAKm9B,IAAuBwB,kBAC1B,OAEI1pB,EADFgc,GADF,GACEA,QAIAyU,GAOEzU,GAPFyU,QADF,GAQIzU,GANFmK,gBAFF,OAEYwub,EAFZ,MAQI34b,GALF0+D,iBAHF,OAGak6X,EAHb,MAQI54b,GAJF89E,wBAJF,OAIoB,KAJpB,MAQI99E,GAHF40W,qBALF,OAKiBikF,EALjB,GAMEl6X,GAEE3+D,GAFF2+D,YACAmqV,GACE9oZ,GADF8oZ,UAEF,OAAOhpZ,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAIvxQ,MAAM,CAAC,gBAAiB,mBAAmB,GAC/CuxQ,EAAIvxQ,MAAM,CAAC,gBAAiB,WAAYyrC,IACxC8lO,EAAIvxQ,MAAM,CAAC,gBAAiB,WAAYmhC,IACxCowO,EAAIvxQ,MAAM,CAAC,gBAAiB,YAAa01F,IACzC67K,EAAIvxQ,MAAM,CAAC,gBAAiB,mBAAoB80G,IAChDy8J,EAAIvxQ,MAAM,CAAC,gBAAiB,gBAAiBkZ,iBAAO0yX,KACpDr6H,EAAIvxQ,MAAM,CAAC,gBAAiB,eAAgB21F,IAC5C47K,EAAIvxQ,MAAM,CAAC,gBAAiB,aAAc8/a,OAG9C,KAAK58Y,IAAuB0B,oBAC1B,OAAO9N,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAIvxQ,MAAM,CAAC,gBAAiB,mBAAmB,MAGnD,KAAKkjC,IAAuB8B,kCAC1B,OAEIhqB,EADFgc,GADF,GACEA,QAGF,OAAOF,EAAM92B,MAAM,CAAC,gBAAiB,gCAAiCg3B,IAExE,KAAKkM,IAAuBgC,2BAC1B,OAEIlqB,EADFgc,GADF,GACEA,QAGF,OAAOF,EAAM92B,MAAM,CAAC,gBAAiB,2BAA4Bg3B,IAEnE,KAAKkM,IAAuBkC,4BAC1B,OAKIpqB,EALJ,MACEgc,QACE5iC,GAFJ,GAEIA,IACA5I,GAHJ,GAGIA,MAIJ,OAAOsrC,EAAM92B,MAAM,CAAC,qBAAsB5L,IAAM5I,IAElD,KAAK03C,IAAuBoC,2BAC1B,OAAOxO,EAAM92B,MAAM,CAAC,sBAAuBk7P,EAAcrnQ,IAAI,uBAE/D,KAAKqvC,IAAuBsC,iBAC1B,OAAO1O,EAAM92B,MAAM,CAAC,qBAAqB,GAE3C,KAAKkjC,IAAuBwC,mBAC1B,OAAO5O,EAAM92B,MAAM,CAAC,qBAAqB,GAE3C,KAAKkjC,IAAuB0C,qBAC1B,OAAO9O,EAAM92B,MAAM,CAAC,sBAAsB,GAE5C,KAAKkjC,IAAuB4C,sBAC1B,OAAOhP,EAAM92B,MAAM,CAAC,sBAAsB,GAE5C,KAAKywN,IAAgBsC,oBACnB,OAAOj8L,EAAM92B,MAAM,CAAC,gBAAiB,gCAAgC,GAEvE,KAAKywN,IAAgBoC,2BACrB,KAAKpC,IAAgBkC,8BACnB,OAAO77L,EAAM92B,MAAM,CAAC,gBAAiB,gCAAgC,GAEvE,KAAKkjC,IAAuBgD,sBAC1B,OAAoBlrB,EAAZgc,GAAR,GAAQA,QACR,OAAOF,EAAM92B,MAAM,CAAC,UAAWg3B,IAEjC,KAAKkM,IAAuBkD,yBAC1B,OAA8BprB,EAAXy/E,GAAnB,GAAQzjE,QAAWyjE,KACnB,OAAO3jE,EAAMt/B,IAAI,cAAeijG,IAElC,KAAKv3D,IAAuBsD,mBAC1B,OAAO1P,EAAMt/B,IAAI,UAAWwjB,EAAOgc,QAAQmjE,SAE7C,QACE,OAAOrjE,K,6BCxbb,4HAeM66b,EAAmB,SAAC76b,GAAD,QAAc0Z,cAAkB1Z,IACnD86b,EAAkB,SAAC96b,GAAD,OAAWkmB,cAA4BlmB,IAClD+6b,EAAsB,kBAAMC,iCAAuB,CAE5D9pF,aAAc,SAAClxW,EAAOyF,GAAR,OAAqB3d,cAEnCmzc,mBAAmB,EAGnBC,uBAAwBJ,EACxBK,sBAAuBN,EACvBO,eAAgBxpZ,UAEhBypZ,mBAAoB,sBACpBC,wBAAyBC,KAGvBA,EAAiC,kBAAM,MAEvCC,EAAiBC,IAAsB,IAEhCC,EAAyB,SAACppZ,GAAD,OAAqB0oZ,iCAAuB,CAE9E9pF,aAAc,SAAClxW,EAAOyF,GAAR,OAAqB+1b,EAAeG,sBAAsBl2b,IAAaje,yBAErFyzc,mBAAmB,EAGnBC,uBAAwBJ,EACxBK,sBAAuB,SAACn7b,GAAD,OAAY66b,EAAiB76b,IACpDo7b,eAAgBxpZ,UAEhBypZ,mBAAoB,yBACpBC,wBAAyBhpZ,M,eCzB7B,IAAI53E,EAAUD,MAAMC,QAEpBxG,EAAOC,QAAUuG,G,yXCwBJ63M,EAAY,iBAEnBqpR,EAAY,CAChB,CACE1hc,UAAW,4BACXD,GAAI,SAEN,CACEC,UAAW,+BACXD,GAAI,SAEN,CACEC,UAAW,4BACXD,GAAI,OAIFgoU,EAAc,CAAE9hP,SAAU,SAE1B07W,EAA2B,SAACnne,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IAClFi3P,EAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,cAAexqF,IA4BhFyoX,E,4MAsBGxmK,SAAW,SAACnxT,GACjB,IACEknW,EACE,EAAKnoU,MADPmoU,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IAAMgne,EAAa53d,EAAOyV,MAAM,CAAC,WAAY,OACvC6oC,EAAWs5a,EAAa,CAAEzwH,QAAS,CAAErxU,GAAI8hc,IAAiB,GAqC1D7vC,EAnCkBtgb,gBAA2B5B,eAAc,SAAAywQ,GAC/D,IAAMntD,EAAenpN,EAAOpH,IAAI,gBAC1Bi/d,EAAuB1uQ,GAAgB48I,YAAsB58I,GAC/D0uQ,GACFvhN,EAAI/5Q,IAAI,eAAgBs7d,GAG1B,IAAM/uQ,EAAc9oN,EAAOpH,IAAI,eACzB6vW,EAAsB3/I,GAAei9I,YAAsBj9I,GAC7D2/I,GACFnyF,EAAI/5Q,IAAI,cAAeksW,GAGzB,IAAMqvH,EAAyB93d,EAAOyV,MAAM,CAAC,oBAAqB,UAC9Dqid,GACFxhN,EAAIvxQ,MAAM,CAAC,0BAA2B,MAAO+yd,GAG/C,IAAMC,EAAsB/3d,EAAOyV,MAAM,CAAC,iBAAkB,UACxDsid,GACFzhN,EAAIvxQ,MAAM,CAAC,uBAAwB,MAAOgzd,GAG5C,IAAM9rW,EAAWjsH,EAAOyV,MAAM,CAAC,eAAgB,UAC3Cw2G,IACFqqJ,EAAIvxQ,MAAM,CAAC,iCAAkC,MAAOknH,GACpDqqJ,EAAIvxQ,MAAM,CAAC,8BAA+B,MAAOknH,IAGnD,IAAM2lQ,EAAY5xX,EAAOyV,MAAM,CAAC,YAAa,SACzCm8W,GACFt7G,EAAIvxQ,MAAM,CAAC,UAAW,MAAO6sX,MAK9Bj3W,SAAQ,SAACxhB,GACR,OAAOA,EAAIs0E,QAAQ,IAAI99B,OAAO,eAAM,KAAM,QAE3CnvC,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBAELo6V,EAAuB,CACrB8wH,WAAYjwC,EAAqBn3b,KAAOm3b,EAAqB30a,OAAS,KACtEqtP,KAAM,EACNniN,WACA25a,YAAY,M,EAKXpvH,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACA40P,EAHF,EAGEA,uBACA4B,EAJF,EAIEA,aAGFtpU,EAASggC,YAAM8yC,GAAQ87F,IACvB06J,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrB8wH,WAAY,KACZv3N,KAAM,EACNniN,SAAU,KACV25a,YAAY,K,wDAnGhB,SAA0B/kX,EAAW4yJ,GACnC,MAMIjxQ,KAAKkqC,MALPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WACA8mN,EAHF,EAGEA,iBACAohK,EAJF,EAIEA,oBACArhK,EALF,EAKEA,cAGEr3N,GAASA,IAAS0T,EAAU1T,OAC9Bs3N,IACAohK,IACArhK,KAGE7mN,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAuFlB,WACE,MAcIn7G,KAAKkqC,MAbPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KAFF,IAGEwQ,kBAHF,MAGevoG,gBAHf,EAIE+vT,EAJF,EAIEA,aACAN,EALF,EAKEA,aACAvlL,EANF,EAMEA,cACAwmV,EAPF,EAOEA,iBACAlmW,EARF,EAQEA,WACAk3M,EATF,EASEA,UACA3nR,EAVF,EAUEA,YACAC,EAXF,EAWEA,eACA0oT,EAZF,EAYEA,UACAvpV,EAbF,EAaEA,EAGI8tW,EAAejtU,GAAkBD,GAAe,GAEhDgjH,EAAQ4oD,aAAWhtN,QAAO,SAAArL,GAAI,OAAIo0U,EAAU3yT,MAAK,SAAAq9U,GAAQ,OAAIA,EAASj7V,IAAI,WAAa7D,EAAKA,WAElG,OACE,cAACizb,EAAA,EAAD,CACE/5W,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAACoC,EAAA,EAAD,CACEO,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC2uG,EAAA,EAAD,CACE7V,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC9pP,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC69D,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBomX,GAC9BvpZ,UAAW6jC,QAIf,cAACtkC,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBomX,GAC9BvpZ,UAAW6jC,WAMjB,cAAC3D,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB60P,GAC9Bh4R,UAAW6jC,QAIf,cAACtkC,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB60P,GAC9Bh4R,UAAW6jC,WAMjB,cAAC3D,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4CAEL,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC/B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASs3b,EAAiB/kd,OAC1BysG,YAAaj/F,EAAE,sCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDgzX,qBAAsB,CACpBpzQ,MAAO2tP,GAETrvP,iBAAkB,CAChBC,WAAW,UAQrB,cAACL,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,6CAEL,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC/B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,iBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,sCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDgzX,qBAAsB,CACpBpzQ,MAAO2tP,GAETrvP,iBAAkB,CAChBC,WAAW,UAOrB,eAAChhC,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UAUE,eAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,UAIE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,yCAEL,cAAC,QAAD,CACEvd,KAAK,WACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS42b,EACT53W,YAAaj/F,EAAE,6CACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASz0F,EAAEy0F,EAAOt/E,WAAa,MACzDs3R,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAaztF,EAAEy0F,EAAOt/E,eAE1DwtV,qBAAsB,CACpBpzQ,MAAO2tP,GAETrvP,iBAAkB,CAChBC,WAAW,SAOnB,eAAChhC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,UAIE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,qCAEL,cAACk+F,EAAA,EAAD,CACEC,MAAO/O,EAAWv6F,MAAM,CAAC,eAAgB,WAAa,GACtDs4D,QAAS,CAAEsxM,OAAQtxM,EAAQ2qD,kBAF7B,SAIE,qBAAKvoB,MAAO,CAAEhgC,MAAO,QAArB,SACE,cAAC,QAAD,CACE9sE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASoxF,GAAcA,EAAW7+G,OAClCysG,YAAaj/F,EAAE,yCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDgzX,qBAAsB,CACpBpzQ,MAAO2tP,GAETrvP,iBAAkB,CAChBC,WAAW,gBAUzB,cAAChhC,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,eAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,UAIE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,0CAEL,cAAC,QAAD,CACEvd,KAAK,YACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS2jI,EACT3kD,YAAaj/F,EAAE,8CACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO8uJ,UAAY,MACtDkpD,aAAc,SAAAh4M,GAAM,OAAIA,GACtB,eAAC3nC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACGgnC,EAAOoR,KACR,cAACpY,EAAA,EAAD,CAAYpgC,UAAWF,EAAQwvD,YAA/B,SACGloB,EAAOtgH,OAASi6B,mBAAiB0wB,KAAO21D,EAAO8uJ,QAAQuqH,GAAgBr5Q,EAAO8uJ,iBAKvFo/G,qBAAsB,CACpBpzQ,MAAO2tP,GAETrvP,iBAAkB,CAChBC,WAAW,gBAtXlBy7P,S,GA1Ic7wU,a,GA+kBdwwC,kBACbgG,aAjEa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAS,GAAD,OAfa,IAeb,OAEV3gC,QAAS,CACP41E,OAAO,oBACPg2L,UAAW,QAEbrxL,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErC18I,YAAa,CACXA,YAAaxtD,EAAMZ,WAErBupD,iBAAkB,CAChBvP,IAAI,GAAD,OAAKp5C,EAAMZ,SAAS,GAApB,kBAELm8R,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,eAkCvCtI,mBA7BsB,SAAC73E,EAAOyF,GAC9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO87F,EACrD,OAAO,aACL97F,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1Bq/B,cAAeD,eACfymV,iBAAkBzkI,cAClBzhO,WAAY8f,cACZo3L,UAAWwqB,cACXnyS,YAAaivF,eACbhvF,eAAgBkvF,gBAPfhpG,CAQA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACA04b,oBAAqB,kBAAM14b,EAAS,IAAIopS,MACxC9R,iBAAkB,kBAAMt3R,EAAS,IAAIq0B,OACrCgjQ,cAAe,WACbr3R,EAAS,IAAI20B,UAQjBg4N,YAAmC,CAAEt2B,SAAUznD,IAC/CguH,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUb6tZ,G,OC1pBItzW,EAAYJ,aAAW,SAAAl0C,GAAK,MAAK,CACrC1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B+4C,aAAcn4C,EAAMZ,SAAS,MAE/Bs0P,KAAM,CACJnnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BlsC,OAAQL,EAAMZ,QAAQ,KACtBi3C,OAAQ,OACRz1C,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,QACPm8C,WAAY,UAEd8sW,SAAU,CACR9sW,WAAY,cA8dDxhD,sBACb91B,YAAgB,gBAChB0/D,mBAxBsB,SAAC73E,EAAYyF,GACnC,IAAQyrZ,EAAkBzrZ,EAAlByrZ,cACFsrC,EAAmBx8b,EAAMpmB,MAAM,CAAC,OAAQs3a,EAAe,qBAO7D,MAAO,CACLurC,WAPiBD,GAAoBA,EAAiB73d,QAAO,SAACutI,EAAK29G,GACnE,IAAM8zH,EAAY9zH,EAAM9yP,IAAI,QACtB2/d,EAAY/4G,EAAU5rU,MAAM,KAClC,OAAOm6F,EAAIxxI,IAAIijX,EAAW/3W,cAAI,CAACpE,KAAMm8W,EAAW+4G,iBAC/C9wd,iBAID+wd,kBAAmBvoX,wBAAc88U,EAAd98U,CAA6Bp0E,GAChDw2E,UAAWsB,cAAsB93E,GACjC+2E,UAAWgB,cAAsB/3E,GACjCm3E,OAAQa,cAAmBh4E,OAIJ,SAAC2D,GAAD,MAAe,CACxCA,eAGasqC,EArc2C,SAAC/qC,GAAW,IAAD,EAEjES,EAcET,EAdFS,SACA5e,EAaEme,EAbFne,EACAmsa,EAYEhuZ,EAZFguZ,cAHF,EAeIhuZ,EAXF8B,eAJF,MAIY,GAJZ,EAKEqmU,EAUEnoU,EAVFmoU,uBALF,EAeInoU,EATF+pU,oBANF,MAMiB,KANjB,EAOE0vH,EAQEz5b,EARFy5b,kBACAF,EAOEv5b,EAPFu5b,WACAjmX,EAMEtzE,EANFszE,UACAO,EAKE7zE,EALF6zE,UACAI,EAIEj0E,EAJFi0E,OAXF,EAeIj0E,EAHFy0a,sBAZF,MAYmB,GAZnB,IAeIz0a,EAFF05b,2CAbF,MAawC,KAbxC,IAeI15b,EADF25b,4BAdF,MAcyB,KAdzB,EAiBA,EAIIr0W,IAHFh2C,EADF,EACEA,UACAo1P,EAFF,EAEEA,KACA20J,EAHF,EAGEA,SAwTIO,EAAwB,CAC5B,oBACA,YACA,eACA,uBACA,cACA,WACA,kBACA,8CACA,YACA,+CACA,+BAEIC,EAAkBN,GAAcE,IAAd,UAAmCF,EAAW9ge,WAAWgJ,QAAO,SAACutI,EAAK3tI,GAC5F,IAAMo/W,EAAYp/W,EAAO,GAAGxH,IAAI,QAC1Bige,EAAiBz4d,EAAO,GAAGxH,IAAI,aAC/Bkge,EAAaN,EAAkB/id,MAAMojd,IA9JvB,SAACr5G,EAAmB+4G,GACxC,OAAQ/4G,GACN,IAAK,kBACL,IAAK,cACL,IAAK,0DACL,IAAK,eACL,IAAK,kBAAmB,OAAOg5G,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,YAAcq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WACjI,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,gBACL,IAAK,iBACL,IAAK,eACL,IAAK,6CACL,IAAK,8CACL,IAAK,gBACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,6BACL,IAAK,iCACL,IAAK,mDACL,IAAK,iCACL,IAAK,gCACL,IAAK,kCACL,IAAK,eACL,IAAK,oBACL,IAAK,iBACL,IAAK,gBAsGL,IAAK,cACL,IAAK,WAAY,OAAOq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WAtGlE,IAAK,WACL,IAAK,kBAAmB,OAAOq4d,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAIA,EAAEipB,OAASjpB,EAAEnc,SACxF,IAAK,eACL,IAAK,gBACL,IAAK,YACH,IAAMqne,EAAaY,EAAkB/id,MAAM8id,GAErCQ,GAD8B,iBAAdv5G,EAA+BntQ,EAA0B,kBAAdmtQ,EAAgC5sQ,EAAYI,GACtEx8F,MAAK,SAAC2wV,GAAD,OAAaA,EAAQvuW,IAAI,QAAUg/d,KAC/E,OAAOmB,GAAoBA,EAAiBnge,IAAI,SAElD,IAAK,oBACL,IAAK,qBACL,IAAK,0BA2FL,IAAK,eAAgB,OAAO4/d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WA1FtE,IAAK,kBACL,IAAK,kBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,mBACL,IAAK,uCACL,IAAK,uCACL,IAAK,0CACL,IAAK,0CACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,mBACL,IAAK,mBACL,IAAK,mBACL,IAAK,mBACL,IAAK,mBAAoB,OAAOi5T,YAAWo/J,EAAkB/id,MAAM8id,IACnE,IAAK,uBACL,IAAK,+CACL,IAAK,sBAAuB,OAAOC,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,gBAC7E,IAAK,oBAAqB,OAAOq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,UAC3E,IAAK,UACL,IAAK,WACL,IAAK,iBACL,IAAK,wBACL,IAAK,YACL,IAAK,cAAgB,OAAOq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KACtE,IAAK,gBACL,IAAK,mBACL,IAAK,oBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,gBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,YAoDL,IAAK,gBAAiB,OAAOq4d,EAAkB/id,MAAM8id,GAnDrD,IAAK,8CACL,IAAK,eAGL,IAAK,8BAAqB,OAAOC,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAIA,EAAEnc,SAF/E,IAAK,+CACL,IAAK,uBAAwB,OAAOioe,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAIA,EAAE00C,cAElF,IAAK,eAAgB,OAAOo3a,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WACtE,IAAK,cAAe,OAAOq4d,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAChE,IAAQsuG,EAAsCtuG,EAAtCsuG,UAAWC,EAA2BvuG,EAA3BuuG,SAAUF,EAAiBruG,EAAjBquG,aAC7B,OAAIC,GAAaC,EACRD,EAAY,IAAMC,EAEvBD,GAGGD,KAET,IAAK,YAAa,OAAOy9W,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAAtN,GAAK,OAAIqwB,EAAE,6BAAD,OAA8BrwB,EAA9B,cAA8C+lB,KAAK,OAAS,KACtI,IAAK,mBAAoB,OAAOkid,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,uBAAyB,KAC5G,IAAK,oBAAqB,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,yBAA2B,KAC/G,IAAK,YAAc,IAAD,EACVo4c,EAAeR,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KACzD84d,EAAeT,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WAC/D,OAAO64d,EACHp4c,EAAE,uBACU,OAAZq4c,QAAY,IAAZA,GAAA,UAAAA,EAAc97U,OAAO,UAArB,eAAyBje,gBAAzB,OAAyC+5V,QAAzC,IAAyCA,OAAzC,EAAyCA,EAAct0d,MAAM,IAEnE,IAAK,aAAc,OAAO6zd,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,wBAA0B,KACvG,IAAK,YAAa,OAAO43c,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAIA,EAAEqpB,UAAYnV,EAAElU,EAAEqpB,WAAasjG,qBAAW3sH,EAAEnc,UACjH,IAAK,YACL,IAAK,aAAc,OAAmD,IAA5Cioe,EAAkB/id,MAAM8id,GAAW3ne,KAC7D,IAAK,2DAAwC,OAAO4ne,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,mBAC9F,IAAK,oBAAqB,OAAOq4d,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAQkU,EAAJlU,EAAM,mCAAwC,qCAC3H,IAAK,oBACL,IAAK,gBACH,OAAQqgb,IACDmsC,IAAsCV,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,UACrEq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,YAAcq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WAGtH,IAAK,YAAa,OAAOq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,YAA1Cq4d,GACzB,IAAK,WACH,IAAMW,EAAuBX,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,eACvE,OAAOygB,EAAEu4c,GAEX,IAAK,OAAQ,MAAM,GAAN,OAAUX,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,iBAApD,aAAyEq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,QAAnH,KACb,IAAK,SAAU,MAAM,GAAN,OAAUq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,gBAApD,aAAwEq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,QAAlH,KACf,IAAK,cAAe,OAAOq4d,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,wBAA0B,KACxG,IAAK,eAAgB,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,0BAA4B,KAK3G,IAAK,mBAAoB,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,6CAA+C,KAClI,IAAK,oBAAqB,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,8CAAgD,KACpI,IAAK,yBAA0B,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,yDAA2D,KACpJ,IAAK,0BAA2B,OAAO43c,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,KAAOygB,EAAE,4DAA8D,KACxJ,QAAS,MAAO,IAoB4Cw4c,CAAc55G,EAAWq5G,GACvF,IAAKC,EACH,OAAO/qV,EAET,IAAM+9R,EApSY,SAACtsD,GACnB,OAAQA,GACN,IAAK,aACL,IAAK,eAAgB,MAAM,GAAN,OAAU5+V,EAAE,wBAAZ,YAAuCA,EAAE,wBAC9D,IAAK,cACL,IAAK,gBAAiB,MAAM,GAAN,OAAUA,EAAE,wBAAZ,YAAuCA,EAAE,8BAC/D,IAAK,UACL,IAAK,YAAa,MAAM,GAAN,OAAUA,EAAE,wBAAZ,YAAuCA,EAAE,qBAC3D,IAAK,oBAAqB,OAAOA,EAAE,4BACnC,IAAK,qBAAsB,OAAOA,EAAE,6BACpC,IAAK,kBACL,IAAK,uCACL,IAAK,gBAAiB,MAAM,GAAN,OAAUA,EAAE,2BAAZ,YAA0CA,EAAE,wBAClE,IAAK,mBACL,IAAK,0CACL,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,2BAAZ,YAA0CA,EAAE,wBACrE,IAAK,kBACL,IAAK,uCACL,IAAK,gBAAiB,MAAM,GAAN,OAAUA,EAAE,2BAAZ,YAA0CA,EAAE,sBAClE,IAAK,mBACL,IAAK,0CACL,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,2BAAZ,YAA0CA,EAAE,sBACrE,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,4BAAZ,YAA2CA,EAAE,wBACtE,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,4BAAZ,YAA2CA,EAAE,sBACtE,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,4BAAZ,YAA2CA,EAAE,wBACtE,IAAK,mBAAoB,MAAM,GAAN,OAAUA,EAAE,4BAAZ,YAA2CA,EAAE,sBACtE,IAAK,cAAe,MAAM,GAAN,OAAUA,EAAE,uBAAZ,YAAsCA,EAAE,wBAC5D,IAAK,cAAe,MAAM,GAAN,OAAUA,EAAE,uBAAZ,YAAsCA,EAAE,sBAC5D,IAAK,eACL,IAAK,6CACL,IAAK,eACH,OAAQmsa,GACN,KAAKssC,IACL,KAAKC,IAAyB,OAAO14c,EAAE,uBACvC,QAAS,OAAOA,EAAE,6BAGtB,IAAK,8BAAqB,OAAOA,EAAE,0BACnC,IAAK,8CACL,IAAK,8CACL,IAAK,gBAAiB,OAAOA,EAAE,yBAC/B,IAAK,uBACL,IAAK,+CACL,IAAK,+CACL,IAAK,uBAAwB,OAAOA,EAAE,+BACtC,IAAK,oBAAqB,OAAOA,EAAE,4BACnC,IAAK,UACH,OAAQmsa,IACDlnF,IAAoCjlV,EAAE,yBAC3BA,EAAE,sBAGtB,IAAK,WACH,OAAQmsa,IACDlnF,IAAoCjlV,EAAE,6BAC3BA,EAAE,0BAGtB,IAAK,gBAAiB,OAAOA,EAAE,uBAC/B,IAAK,mBAAoB,OAAOA,EAAE,2BAClC,IAAK,oBAAqB,OAAOA,EAAE,2BACnC,IAAK,YAAa,OAAOA,EAAE,2BAC3B,IAAK,cAAe,OAAOA,EAAE,sBAC7B,IAAK,gBAAiB,OAAOA,EAAE,gCAC/B,IAAK,iBAAkB,OAAOA,EAAE,iCAChC,IAAK,eAAgB,MAAM,GAAN,OAAUA,EAAE,gCAAZ,YAA+CA,EAAE,oBACtE,IAAK,eAAgB,MAAM,GAAN,OAAUA,EAAE,gCAAZ,YAA+CA,EAAE,oBACtE,IAAK,eAAgB,OAAOA,EAAE,4BAC9B,IAAK,gBAAiB,MAAM,GAAN,OAAUA,EAAE,gCAAZ,YAA+CA,EAAE,oBACvE,IAAK,gBAAiB,MAAM,GAAN,OAAUA,EAAE,gCAAZ,YAA+CA,EAAE,oBACvE,IAAK,sBAAuB,OAAOA,EAAE,+BACrC,IAAK,cAAe,OAAOA,EAAE,uBAC7B,IAAK,cAAe,OAAOA,EAAE,0BAC7B,IAAK,gBAAiB,OAAOA,EAAE,oBAC/B,IAAK,YAAa,OAAOA,EAAE,mCAC3B,IAAK,mBACL,IAAK,oBAAqB,OAAOA,EAAE,2BACnC,IAAK,iBAAkB,OAAOA,EAAE,wBAChC,IAAK,wBAAyB,OAAOA,EAAE,mCACvC,IAAK,WACL,IAAK,WACL,IAAK,oBACL,IAAK,mDAAgC,OAAOA,EAAE,4BAC9C,IAAK,kBACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,eAAgB,OAAOA,EAAE,wBAC9B,IAAK,YACL,IAAK,YACL,IAAK,aAAc,OAAOA,EAAE,sBAC5B,IAAK,YAAa,OAAOA,EAAE,uCAC3B,IAAK,aAAc,OAAOA,EAAE,gCAC5B,IAAK,kBAAmB,OAAOA,EAAE,2BACjC,IAAK,0BAAiB,OAAOA,EAAE,6BAC/B,IAAK,6BAAoB,OAAOA,EAAE,wBAClC,IAAK,iCAAwB,OAAOA,EAAE,+BACtC,IAAK,iCAAwB,OAAOA,EAAE,yBACtC,IAAK,gCAAuB,OAAOA,EAAE,wBACrC,IAAK,kCAAyB,OAAOA,EAAE,0BACvC,IAAK,0DAAuC,OAAOA,EAAE,+BACrD,IAAK,2DAAwC,OAAOA,EAAE,6BACtD,IAAK,yBAA0B,OAAOA,EAAE,6BACxC,IAAK,cAAe,OAAOA,EAAE,sBAC7B,IAAK,aAAc,OAAOA,EAAE,qCAC5B,IAAK,oBAAqB,OAAOA,EAAE,0BACnC,IAAK,eAAgB,OAAOA,EAAE,6BAC9B,IAAK,gBAAiB,OAAOA,EAAE,0BAC/B,IAAK,YAAc,OAAOA,EAAE,yBAC5B,IAAK,cAAgB,OAAOA,EAAE,2BAC9B,IAAK,oBAAqB,OAAOA,EAAE,6CACnC,IAAK,iBAAkB,OAAOA,EAAE,0CAChC,IAAK,YAAa,OAAOA,EAAE,yBAC3B,IAAK,WAAY,OAAOA,EAAE,wBAC1B,IAAK,OAAQ,OAAOA,EAAE,oBACtB,IAAK,SAAU,OAAOA,EAAE,sBACxB,IAAK,cACL,IAAK,eAAgB,OAAOA,EAAE,wBAC9B,IAAK,cACL,IAAK,WAAY,MAAO,oBACxB,IAAK,eAAgB,MAAO,gBAC5B,IAAK,gBAAiB,MAAO,OAC7B,IAAK,mBACL,IAAK,oBAAqB,OAAOA,EAAE,4CACnC,IAAK,yBACL,IAAK,0BAA2B,OAAOA,EAAE,iDACzC,QAAS,MAAO,IAsKD24c,CAAY/5G,GACvB7pV,EAA8B,mBAAfmjc,EAA2BhtD,EAAlC,UAAgDA,EAAhD,cAA8DgtD,GAE5E,GAAIH,EAAsBv6d,SAASohX,GAAY,CAC7C,IAAMg6G,EAAYV,EAAWj7d,KAAI,SAACtN,EAAOS,GAAR,MAAoB,CAACwuX,UAAU,GAAD,OAAKA,EAAL,YAAkBxuX,GAAS2kC,MAAM,GAAD,OAAKm2Y,EAAL,cAAmBv7a,GAASkpe,kBAAmBj6G,MAC9I,OAAOzxO,EAAI5tI,OAAOq5d,GAElB,OAAOzrV,EAAI9sI,KAAK,CAACu+W,YAAW7pV,YAE7B7oB,yBAhBqB,aAAmC,EAgB/CxL,MAAK,SAAC9G,EAAGC,GACnB,IAAci/d,EAAUl/d,EAAjBm7B,MACOgkc,EAAUl/d,EAAjBk7B,MACP,OAAI+jc,EAAOzrb,cAAgB0rb,EAAO1rb,eACxB,EAENyrb,EAAOzrb,cAAgB0rb,EAAO1rb,cACzB,EAEF,OACHnhC,iBAEN,OACE,eAAC4gE,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,WACXuB,KAAK,SACLpB,UAAWI,EACX8hC,MAAOqjW,EALT,UAOE,cAAC9lY,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,QAASrC,WAAW,SAA1D,SACE,cAACugC,EAAA,EAAD,UAAaztF,EAAE,kCAEjB,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAC0mB,KAAM,WAArC,SAEI+hW,EAAgB/6d,KAAI,SAACuC,GACnB,IAAOo/W,EAAuCp/W,EAAvCo/W,UAAW7pV,EAA4Bv1B,EAA5Bu1B,MAAO8jc,EAAqBr5d,EAArBq5d,kBACzB,OACE,cAAC/rZ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAACmsP,EAAA,EAAD,CACE3sP,UAAWw1P,EACX9tS,MAAOA,EACPolS,SAAU,WAER,GAAI0+J,GAAqBd,EAAsBv6d,SAASq7d,GAAoB,CAC1E,IAAMG,EAAiBp6G,EAAU5rU,MAAM,KAAK,GACtC2kb,EAAYkB,EAAkB7lb,MAAM,KAGpCimb,EAAoC,sBAAtBJ,EAChBjB,EAAkB/id,MAAM8id,GAAWl7W,OAAOu8W,GAC1CpB,EAAkB/id,MAAM8id,GAAWn4d,QAAO,SAAC7P,EAAOS,GAAR,OAAkBA,IAAUwF,OAAOoje,MACjFp6b,EAASu/B,YAAOguX,EAAe0sC,EAAmBI,SAEpDr6b,EAASu/B,YAAOguX,EAAevtE,EAAW,QAG5CzxS,QAAS,CACPp4C,MAAOyic,MApBU54G,QA4B/B,cAAC9xS,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,OAAQkmC,YAAa,IAA3D,SACE,cAACmD,EAAA,EAAD,CACEE,QA5Ya,WAEnBl6E,EACE8/B,YACEytX,EACA,KAGJvtZ,EAASggC,YAAMutX,IAEXjkF,GACFA,EAAalmV,KAAK+xB,OAIlBuyT,EADE6lF,IAAkB+sC,EACG,CACrB9B,WAAY,KACZv3N,KAAM,EACNniN,SAAU,KACV25a,YAAY,GAGS,CACrBp3b,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,IAINssL,IAAkBgtC,KAA2BtB,GAC/CA,EAAoCC,EAAsBjxd,kBA4WtDqzF,MAAM,UACNqV,MAAO,CAAC0tP,WAAY+6H,EAAgBhoe,KAAO,EAAI,UAAY,UAH7D,SAKGgwB,EAAE,gC,6BC5eb,IAAI46L,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mGACD,WAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,yLACD,eAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,kFAoFehvL,sBACbgG,aAzDa,SAACC,GAAD,OAAkB2zL,YAAa,CAC5Cu3D,IAAK,CACHtqP,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B2iC,SAAU,SACVsX,OAAQ,IACRwG,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,YAqDnC3pF,YAAgB,gBAFH81B,EA/CqC,SAAC,GAAD,IAClDiE,EADkD,EAClDA,QADkD,IAElDgkC,gBAFkD,aAGlDioX,qBAHkD,SAIlDC,EAJkD,EAIlDA,WACAC,EALkD,EAKlDA,SACAC,EANkD,EAMlDA,YACAC,EAPkD,EAOlDA,aACAC,EARkD,EAQlDA,iBACAt+V,EATkD,EASlDA,YACA4uO,EAVkD,EAUlDA,WACA/pV,EAXkD,EAWlDA,EAXkD,OAalD,eAAC,IAAD,CACEytD,WAAW,EACXJ,UAAWF,EAAQktP,IAFrB,UAKIm/J,EACI,eAAC,IAAD,CAAM/rZ,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,cAAC,IAAD,CAAkBz+E,KAAK,QAAQu/G,MAAO,CAAEkG,YAAa,MACrD,cAAC,IAAD,CAAY9H,QAAQ,QAAQzT,MAAM,cAAlC,SACIu/X,GAAoB,qBAG1B,qCACE,cAAC,IAAD,CACE3gX,QAASqiB,EACTjhC,MAAM,UACNiX,SAAUA,EAHZ,SAKIkoX,GAAcr5c,EAAE,wBAEpB,cAAC,IAAD,CACE84F,QAASixP,EACT51W,KAAK,SACL+lG,MAAM,UACNiX,SAAUioX,EAJZ,SAMIE,GAAYt5c,EAAE,yBAIxBu5c,GAAeA,S,8CChFrB,gCAsBA,IAAiDtqO,gBASxC,WACT,OAAiB,WACP,IAAIyqO,oBAAuB,EAG9B,SAACC,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQyqe,UAAYzqe,EAAQ0qe,4BAA8B1qe,EAAQ2qe,cAAgB3qe,EAAQ4qe,aAAe5qe,EAAQ6qe,cAAgB7qe,EAAQ8qe,WAAa9qe,EAAQ+qe,2BAA6B/qe,EAAQgre,cAAgBhre,EAAQire,iBAAmBjre,EAAQkre,0BAAuB,EAC7Qlre,EAAQmre,kBAwbR,SAA2Br8X,GACzB,IAAIo6M,EAAQ3gT,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E89F,EAAM6iN,EAAM7iN,IACZx0E,EAASq3R,EAAMr3R,OACfgiT,EAAM3qB,EAAM2qB,IACZu3J,EAAgBliL,EAAM/5B,QACtBA,OAA4B,IAAlBi8M,GAAkCA,GAEhD,EAAIC,EAAMC,QAAQjlY,GAAsB,kBAARA,EAAkB,6DAClD,IAAIklY,GAAiB,EAAIF,EAAMG,sBAAsBnlY,GAEjD8oL,EACFrgL,EAAKmjB,KAAOnjB,EAAKigB,MAAQw8W,GAEzBz8X,EAAKmjB,KAAO,GACZnjB,EAAKigB,MAAQ,aAAa5+G,OAAOo7d,GAEjCz8X,EAAKlE,QAAU,WACb,OAAO,IAIX,IAAI6gY,EAAY,GAEhB,OAAQ55c,GACN,KAAKi5c,EAAWY,KACd,MAEF,KAAKZ,EAAWa,KACdF,EAAY,QACZ,MAEF,KAAKX,EAAWc,MACdH,EAAY,SACZ,MAEF,KAAKX,EAAWe,OACdJ,EAAY,UACZ,MAEF,KAAKX,EAAWgB,IACdL,EAAY,OAIhB38X,EAAKj9E,OAAS45c,EACd38X,EAAK+kO,IAAqB,kBAARA,EAAmBA,EAAMk4J,GAre7C/re,EAAQgse,WA4oBR,SAAoB54S,GAClBvmK,QAAQijF,IAAI,yBAA2BsjF,IA5oBzCpzL,EAAQise,mBAsfR,SAA4B5lY,GAC1B,IAAIivJ,EAASjvJ,EAAIhhF,QAAQ,KACrB09G,EAAQ18B,EAAIhhF,QAAQ,KACpBhkB,EAAMO,KAAKE,IAAIwzP,EAAS,EAAIA,EAASjvJ,EAAI3/F,OAAQq8H,EAAQ,EAAIA,EAAQ18B,EAAI3/F,QAC7E,OAAO2/F,EAAI/uB,UAAU+uB,EAAI9gF,YAAY,IAAKlkB,GAAO,EAAGA,IAzftDrB,EAAQkse,sBA4fR,SAA+B7lY,GAC7B,IAAI8lY,EAAkB5je,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,eAE1F,GAAmB,kBAAR89F,EACT,OAAO8lY,EAGT,GAAIC,EAAa/lY,GAEf,OADA,EAAIglY,EAAMv+c,MAAM,sEACTq/c,EAGT,IAAIE,EAAQ,sDACRC,EAAa,gCACbC,EAAWF,EAAMz7U,KAAKvqD,GACtBmmY,EAAoBF,EAAW17U,KAAK27U,EAAS,KAAOD,EAAW17U,KAAK27U,EAAS,KAAOD,EAAW17U,KAAK27U,EAAS,IAEjH,GAAIC,IACFA,EAAoBA,EAAkB,IAEhBp+d,SAAS,KAC7B,IACEo+d,EAAoBF,EAAW17U,KAAK8Q,mBAAmB8qU,IAAoB,GAC3E,MAAO72J,IAIb,OAAO62J,GAAqBL,GAthB9Bnse,EAAQyse,mBAusBR,SAA4BC,EAASriI,GACnC,IAAIsiI,EAActiI,EAAM35C,MACpBA,OAAwB,IAAhBi8K,EAAyB,EAAIA,EACrCC,EAAiBviI,EAAMhnF,SACvBA,OAA8B,IAAnBupN,EAA4B,EAAIA,EAC3CC,EAAwBH,EAAQr2Q,WAAWl2G,MAC3ChgC,EAAQ0sZ,EAAsB1sZ,MAC9Bi2C,EAASy2W,EAAsBz2W,OAC/B+kJ,EAAU,CAAC,EAAG,EAAG16N,SAAS0/B,GAAQ1/B,SAAS21E,IAC/C,OAAO,IAAIw0W,EAAa,CACtBzvN,QAASA,EACTu1C,MAAOA,EACPrtC,SAAUA,KAltBdrjR,EAAQose,aAAeA,EACvBpse,EAAQ8se,UA8eR,SAAmBvzK,GACjB,MAA2B,kBAAbA,GAAyB,UAAU35Q,KAAK25Q,IA9exDv5T,EAAQ+se,gBAAkBA,EAC1B/se,EAAQgte,WA+mBR,SAAoB3hX,GAClB,IAAI4hX,EAAsB1ke,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACzF,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GACpC,IAAIkyZ,EAASric,SAASC,cAAc,UACpCoic,EAAO7hX,IAAMA,EAEb6hX,EAAOC,OAAS,SAAUl3W,GACpBg3W,GACFC,EAAOn5d,SAGTgwC,EAAQkyE,IAGVi3W,EAAOE,QAAU,WACfpyZ,EAAO,IAAIvuE,MAAM,0BAA0B0D,OAAO+8d,EAAO7hX,SAG1DxgF,SAAShpB,MAAQgpB,SAASz+B,iBAAiB21S,YAAYmrL,OA/nB5D,IAMgCvhe,EAN5B0he,GAM4B1he,EANU6+d,EAAoB,KAMT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAJrF0/d,EAAQb,EAAoB,GAE5B8C,EAAgB9C,EAAoB,KAIxC,SAAS1qO,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAASjmC,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASsxB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,SAASuqD,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,IAAI+ge,EAAmB,+BAEnBpB,EAAgB,CAClBhvI,IAAK,GACLiyI,IAAK,GAEDC,uBACF,OAAO,EAAIxC,EAAM1kW,QAAQ9hI,KAAM,mBAAoBA,KAAK82V,IAAM92V,KAAK+oe,OAIvE5te,EAAQ2qe,cAAgBA,EAExB,IAAIM,EAAgC,SAAU6C,GAC5CpxZ,EAAUuuZ,EAAkB6C,GAE5B,IAAI59M,EAASrzM,EAAaouZ,GAE1B,SAASA,IACP,IAAIzub,EAEAtR,EAAO3iC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC3Ewle,EAAqB7ic,EAAKg3Q,cAC1BA,OAAuC,IAAvB6rL,EAAgC9sJ,WAAWp2S,SAAWkjc,EAM1E,OAJA97c,EAAgBptB,KAAMome,IAEtBzub,EAAQ0zO,EAAOrqR,KAAKhB,OACdmpe,UAAY9rL,EACX1lQ,EAcT,OAXAF,EAAa2ub,EAAkB,CAAC,CAC9B9he,IAAK,gBACL5I,MAAO,SAAuB4/E,EAAOi2C,GACnC,IAAI63W,EAASppe,KAAKmpe,UAAUljc,cAAc,UAI1C,OAFAmjc,EAAO9tZ,MAAQA,EACf8tZ,EAAO73W,OAASA,EACT63W,MAIJhD,EA9B2B,CA+BlCqC,EAAcY,mBAIhB,SAASx1D,EAAUy1D,GACjB,OAAOC,EAAWthe,MAAMjI,KAAM0D,WAGhC,SAAS6le,IAmGP,OAlGAA,EAAansR,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,EAAQjoY,GACzF,IAAIkoY,EACA3gX,EACA4gX,EAAQjme,UACZ,OAAO8ke,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAGH,GAFA2pe,EAAeC,EAAM9ne,OAAS,QAAkB/F,IAAb6te,EAAM,IAAmBA,EAAM,IAE7DzB,EAAgB1mY,EAAKx7D,SAAS6jc,SAAU,CAC3CD,EAAS7pe,KAAO,GAChB,MAIF,OADA6pe,EAAS7pe,KAAO,EACToxT,MAAM3vN,GAEf,KAAK,EAGH,IAFAunB,EAAW6gX,EAAShzZ,MAEPwxB,GAAI,CACfwhY,EAAS7pe,KAAO,EAChB,MAGF,MAAM,IAAI6H,MAAMmhH,EAAS+gX,YAE3B,KAAK,EACH,IAAKJ,EAAc,CACjBE,EAAS7pe,KAAO,GAChB,MAKF,OAFA6pe,EAASG,GAAKv0U,WACdo0U,EAAS7pe,KAAO,GACTgpH,EAASw+D,cAElB,KAAK,GACHqiT,EAASI,GAAKJ,EAAShzZ,KACvBgzZ,EAASnyU,GAAK,IAAImyU,EAASG,GAAGH,EAASI,IACvCJ,EAAS7pe,KAAO,GAChB,MAEF,KAAK,GAGH,OAFA6pe,EAASK,GAAKzD,EAAM0D,cACpBN,EAAS7pe,KAAO,GACTgpH,EAAS8C,OAElB,KAAK,GACH+9W,EAASO,GAAKP,EAAShzZ,KACvBgzZ,EAASnyU,IAAK,EAAImyU,EAASK,IAAIL,EAASO,IAE1C,KAAK,GACH,OAAOP,EAASQ,OAAO,SAAUR,EAASnyU,IAE5C,KAAK,GACH,OAAOmyU,EAASQ,OAAO,SAAU,IAAInrb,SAAQ,SAAUC,EAASi3B,GAC9D,IAAIorB,EAAU,IAAIgzG,eAClBhzG,EAAQoJ,KAAK,MAAOnJ,GAAK,GAErBkoY,IACFnoY,EAAQ8oY,aAAe,eAGzB9oY,EAAQkzG,mBAAqB,WAC3B,GAAIlzG,EAAQmzG,aAAeH,eAAe76L,KAA1C,CAKE,IAAIshC,EADN,IAAuB,MAAnBumD,EAAQkE,QAAqC,IAAnBlE,EAAQkE,UAGhCikY,GAAgBnoY,EAAQwnB,SAC1B/tE,EAAO,IAAIw6G,WAAWj0D,EAAQwnB,WACpB2gX,GAAgBnoY,EAAQqzG,eAClC55J,GAAO,EAAIwrb,EAAM0D,eAAe3oY,EAAQqzG,eAGtC55J,GAEF,YADAkE,EAAQlE,GAKZm7B,EAAO,IAAIvuE,MAAM25F,EAAQuoY,eAG3BvoY,EAAQglD,KAAK,UAGjB,KAAK,GACL,IAAK,MACH,OAAOqjV,EAASj4L,UAGrB83L,OAEEF,EAAWthe,MAAMjI,KAAM0D,WAzGhCvI,EAAQire,iBAAmBA,EA4G3B,IAAIC,EAAoC,SAAUiE,GAChDzyZ,EAAUwuZ,EAAsBiE,GAEhC,IAAIC,EAAUvyZ,EAAaquZ,GAE3B,SAASA,IAGP,OAFAj5c,EAAgBptB,KAAMqme,GAEfkE,EAAQtie,MAAMjI,KAAM0D,WAe7B,OAZA+zC,EAAa4ub,EAAsB,CAAC,CAClC/he,IAAK,aACL5I,MAAO,SAAoB8lG,EAAKgpY,GAC9B,OAAO32D,EAAUryU,EAAKxhG,KAAKyqe,cAAcl0Z,MAAK,SAAUv7B,GACtD,MAAO,CACL0vb,SAAU1vb,EACVwvb,gBAAiBA,UAMlBnE,EAvB+B,CAwBtCoC,EAAckC,uBAEhBxve,EAAQkre,qBAAuBA,EAE/B,IAAIH,EAA0C,SAAU0E,GACtD/yZ,EAAUquZ,EAA4B0E,GAEtC,IAAIC,EAAU7yZ,EAAakuZ,GAE3B,SAASA,IAGP,OAFA94c,EAAgBptB,KAAMkme,GAEf2E,EAAQ5ie,MAAMjI,KAAM0D,WAU7B,OAPA+zC,EAAayub,EAA4B,CAAC,CACxC5he,IAAK,aACL5I,MAAO,SAAoB8lG,GACzB,OAAOqyU,EAAUryU,GAAK,OAInB0kY,EAlBqC,CAmB5CuC,EAAcqC,6BAEhB3ve,EAAQ+qe,2BAA6BA,EAErC,IAAIC,EAA6B,SAAU4E,GACzClzZ,EAAUsuZ,EAAe4E,GAEzB,IAAIC,EAAUhzZ,EAAamuZ,GAE3B,SAASA,IAGP,OAFA/4c,EAAgBptB,KAAMmme,GAEf6E,EAAQ/ie,MAAMjI,KAAM0D,WAU7B,OAPA+zC,EAAa0ub,EAAe,CAAC,CAC3B7he,IAAK,aACL5I,MAAO,SAAoBwE,GACzB,OAAO8lC,SAASilc,gBA1NT,6BA0NiC/qe,OAIrCime,EAlBwB,CAmB/BsC,EAAcyC,gBAEhB/ve,EAAQgre,cAAgBA,EAExB,IAAIJ,EAA4B,WAC9B,SAASA,EAAap9b,GACpB,IAAI2tO,EAAU3tO,EAAM2tO,QAChBu1C,EAAQljR,EAAMkjR,MACdrtC,EAAW71O,EAAM61O,SACjB2sN,EAAgBxic,EAAMyic,QACtBA,OAA4B,IAAlBD,EAA2B,EAAIA,EACzCE,EAAgB1ic,EAAM2ic,QACtBA,OAA4B,IAAlBD,EAA2B,EAAIA,EACzCE,EAAiB5ic,EAAM6ic,SACvBA,OAA8B,IAAnBD,GAAoCA,EAEnDn+c,EAAgBptB,KAAM+le,GAEtB/le,KAAKs2Q,QAAUA,EACft2Q,KAAK6rT,MAAQA,EACb7rT,KAAKw+Q,SAAWA,EAChBx+Q,KAAKore,QAAUA,EACfpre,KAAKsre,QAAUA,EACf,IAEIG,EAASC,EAASC,EAASC,EA6C3BC,EAAeC,EACfxwZ,EAAOi2C,EAhDPw6W,GAAWz1N,EAAQ,GAAKA,EAAQ,IAAM,EACtC01N,GAAW11N,EAAQ,GAAKA,EAAQ,IAAM,EAQ1C,QANAkI,GAAY,KAEG,IACbA,GAAY,KAGNA,GACN,KAAK,IACHitN,GAAW,EACXC,EAAU,EACVC,EAAU,EACVC,EAAU,EACV,MAEF,KAAK,GACHH,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EACV,MAEF,KAAK,IACHH,EAAU,EACVC,GAAW,EACXC,GAAW,EACXC,EAAU,EACV,MAEF,KAAK,EACHH,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,GAAW,EACX,MAEF,QACE,MAAM,IAAIhke,MAAM,qEAGhB4je,IACFG,GAAWA,EACXC,GAAWA,GAMG,IAAZH,GACFI,EAAgB9ue,KAAKijB,IAAIgsd,EAAU11N,EAAQ,IAAMu1C,EAAQu/K,EACzDU,EAAgB/ue,KAAKijB,IAAI+rd,EAAUz1N,EAAQ,IAAMu1C,EAAQy/K,EACzDhwZ,EAAQv+E,KAAKijB,IAAIs2P,EAAQ,GAAKA,EAAQ,IAAMu1C,EAC5Ct6L,EAASx0H,KAAKijB,IAAIs2P,EAAQ,GAAKA,EAAQ,IAAMu1C,IAE7CggL,EAAgB9ue,KAAKijB,IAAI+rd,EAAUz1N,EAAQ,IAAMu1C,EAAQu/K,EACzDU,EAAgB/ue,KAAKijB,IAAIgsd,EAAU11N,EAAQ,IAAMu1C,EAAQy/K,EACzDhwZ,EAAQv+E,KAAKijB,IAAIs2P,EAAQ,GAAKA,EAAQ,IAAMu1C,EAC5Ct6L,EAASx0H,KAAKijB,IAAIs2P,EAAQ,GAAKA,EAAQ,IAAMu1C,GAG/C7rT,KAAKq8H,UAAY,CAACovW,EAAU5/K,EAAO6/K,EAAU7/K,EAAO8/K,EAAU9/K,EAAO+/K,EAAU//K,EAAOggL,EAAgBJ,EAAU5/K,EAAQkgL,EAAUJ,EAAU9/K,EAAQmgL,EAASF,EAAgBJ,EAAU7/K,EAAQkgL,EAAUH,EAAU//K,EAAQmgL,GAC3Nhse,KAAKs7E,MAAQA,EACbt7E,KAAKuxH,OAASA,EAgDhB,OA7CA95E,EAAasub,EAAc,CAAC,CAC1Bzhe,IAAK,QACL5I,MAAO,WACL,IAAI+zC,EAAQ/rC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5Euoe,EAAcx8b,EAAMo8Q,MACpBA,OAAwB,IAAhBogL,EAAyBjse,KAAK6rT,MAAQogL,EAC9CC,EAAiBz8b,EAAM+uO,SACvBA,OAA8B,IAAnB0tN,EAA4Blse,KAAKw+Q,SAAW0tN,EACvDC,EAAgB18b,EAAM27b,QACtBA,OAA4B,IAAlBe,EAA2Bnse,KAAKore,QAAUe,EACpDC,EAAgB38b,EAAM67b,QACtBA,OAA4B,IAAlBc,EAA2Bpse,KAAKsre,QAAUc,EACpDC,EAAiB58b,EAAM+7b,SACvBA,OAA8B,IAAnBa,GAAoCA,EAEnD,OAAO,IAAItG,EAAa,CACtBzvN,QAASt2Q,KAAKs2Q,QAAQxmQ,QACtB+7S,MAAOA,EACPrtC,SAAUA,EACV4sN,QAASA,EACTE,QAASA,EACTE,SAAUA,MAGb,CACDlne,IAAK,yBACL5I,MAAO,SAAgCmc,EAAG2zB,GACxC,OAAOg7b,EAAM8F,KAAKC,eAAe,CAAC10d,EAAG2zB,GAAIxrC,KAAKq8H,aAE/C,CACD/3H,IAAK,6BACL5I,MAAO,SAAoCi6J,GACzC,IAAI62U,EAAUhG,EAAM8F,KAAKC,eAAe,CAAC52U,EAAK,GAAIA,EAAK,IAAK31J,KAAKq8H,WAE7DowW,EAAcjG,EAAM8F,KAAKC,eAAe,CAAC52U,EAAK,GAAIA,EAAK,IAAK31J,KAAKq8H,WAErE,MAAO,CAACmwW,EAAQ,GAAIA,EAAQ,GAAIC,EAAY,GAAIA,EAAY,MAE7D,CACDnoe,IAAK,oBACL5I,MAAO,SAA2Bmc,EAAG2zB,GACnC,OAAOg7b,EAAM8F,KAAKI,sBAAsB,CAAC70d,EAAG2zB,GAAIxrC,KAAKq8H,eAIlD0pW,EAnIuB,GAsIhC5qe,EAAQ4qe,aAAeA,EAEvB,IAAIF,EAA2C,SAAU8G,GACvD90Z,EAAUguZ,EAA6B8G,GAEvC,IAAIC,EAAU50Z,EAAa6tZ,GAE3B,SAASA,EAA4Bp1P,EAAKvwO,GACxC,IAAIkjH,EAMJ,OAJAh2F,EAAgBptB,KAAM6le,IAEtBziX,EAASwpX,EAAQ5re,KAAKhB,KAAMywO,EAAK,gCAC1BvwO,KAAOA,EACPkjH,EAGT,OAAOyiX,EAfsC,CAgB7CW,EAAMqG,eAER1xe,EAAQ0qe,4BAA8BA,EACtC,IAAII,EAAa,CACfY,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,IAAK,GAqDP,SAASM,EAAa/lY,GAIpB,IAHA,IAAIt9F,EAAKs9F,EAAI3/F,OACTmB,EAAI,EAEDA,EAAIkB,GAAwB,KAAlBs9F,EAAIx+F,GAAGw7H,QACtBx7H,IAGF,MAAiD,UAA1Cw+F,EAAI/uB,UAAUzvE,EAAGA,EAAI,GAAGo2C,cA3DjCj+C,EAAQ8qe,WAAaA,EAuGrB,IAoHI6G,EApHAlH,EAAyB,WAC3B,SAASA,IACPx4c,EAAgBptB,KAAM4le,GAEtB5le,KAAK+se,QAAU3ue,OAAOC,OAAO,MAC7B2B,KAAKkpB,MAAQ,GAqEf,OAlEAuuB,EAAamub,EAAW,CAAC,CACvBthe,IAAK,OACL5I,MAAO,SAAc8S,GACfA,KAAQxO,KAAK+se,UACf,EAAIvG,EAAMv+c,MAAM,gCAAgC3c,OAAOkD,IAGzDxO,KAAK+se,QAAQv+d,GAAQuf,KAAK+xB,QAE3B,CACDx7C,IAAK,UACL5I,MAAO,SAAiB8S,GAChBA,KAAQxO,KAAK+se,UACjB,EAAIvG,EAAMv+c,MAAM,kCAAkC3c,OAAOkD,IAG3DxO,KAAKkpB,MAAM9c,KAAK,CACdoC,KAAMA,EACNuR,MAAO/f,KAAK+se,QAAQv+d,GACpBhS,IAAKuxB,KAAK+xB,eAEL9/C,KAAK+se,QAAQv+d,KAErB,CACDlK,IAAK,WACL5I,MAAO,WACL,IAIIykB,EAJA6sd,EAAS,GACTC,EAAU,EAEVC,EAAYjyO,EAA2Bj7P,KAAKkpB,OAGhD,IACE,IAAKgkd,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IACIkO,EADO2R,EAAMzkB,MACD8S,KAEZA,EAAK3M,OAASore,IAChBA,EAAUz+d,EAAK3M,SAGnB,MAAOuvC,GACP87b,EAAU9ke,EAAEgpC,GAVd,QAYE87b,EAAUx2Z,IAGZ,IACIy2Z,EADAC,EAAanyO,EAA2Bj7P,KAAKkpB,OAGjD,IACE,IAAKkkd,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAAO,CACrD,IAAI+se,EAAQF,EAAOzxe,MACfg5H,EAAW24W,EAAM7we,IAAM6we,EAAMttd,MACjCitd,EAAO5ge,KAAK,GAAGd,OAAO+he,EAAM7+d,KAAKstL,OAAOmxS,GAAU,KAAK3he,OAAOopH,EAAU,UAE1E,MAAOtjF,GACPg8b,EAAWhle,EAAEgpC,GAPf,QASEg8b,EAAW12Z,IAGb,OAAOs2Z,EAAOvrd,KAAK,QAIhBmkd,EA1EoB,GA+E7B,SAASsC,EAAgB1mY,EAAK8rY,GAC5B,IACE,IACIC,GADQD,EAAU,IAAIjzR,IAAI74G,EAAK8rY,GAAW,IAAIjzR,IAAI74G,IACjC+rY,SAErB,MAAoB,UAAbA,GAAqC,WAAbA,EAC/B,MAAOz8J,GACP,OAAO,GATX31U,EAAQyqe,UAAYA,EAyCpB,IAAII,EAA6B,WAC/B,SAASA,IACP54c,EAAgBptB,KAAMgme,GAiDxB,OA9CAvub,EAAauub,EAAe,KAAM,CAAC,CACjC1he,IAAK,eACL5I,MAAO,SAAsB+oH,GAC3B,IAAKA,KAAU,EAAI+hX,EAAM5zS,UAAUnuE,GACjC,OAAO,KAGJqoX,IACHA,EAAqB,IAAIhyb,OAAO,6FAGlC,IAAI88I,EAAUk1S,EAAmB/gV,KAAKtnC,GAEtC,IAAKmzE,EACH,OAAO,KAGT,IAAIu+C,EAAOv6L,SAASg8I,EAAQ,GAAI,IAC5B++C,EAAQ/6L,SAASg8I,EAAQ,GAAI,IACjC++C,EAAQA,GAAS,GAAKA,GAAS,GAAKA,EAAQ,EAAI,EAChD,IAAI8I,EAAM7jM,SAASg8I,EAAQ,GAAI,IAC/B6nD,EAAMA,GAAO,GAAKA,GAAO,GAAKA,EAAM,EACpC,IAAIwJ,EAAOrtM,SAASg8I,EAAQ,GAAI,IAChCqxD,EAAOA,GAAQ,GAAKA,GAAQ,GAAKA,EAAO,EACxC,IAAIc,EAASnuM,SAASg8I,EAAQ,GAAI,IAClCmyD,EAASA,GAAU,GAAKA,GAAU,GAAKA,EAAS,EAChD,IAAIC,EAASpuM,SAASg8I,EAAQ,GAAI,IAClCoyD,EAASA,GAAU,GAAKA,GAAU,GAAKA,EAAS,EAChD,IAAIwjP,EAAwB51S,EAAQ,IAAM,IACtC61S,EAAa7xb,SAASg8I,EAAQ,GAAI,IACtC61S,EAAaA,GAAc,GAAKA,GAAc,GAAKA,EAAa,EAChE,IAAIC,EAAe9xb,SAASg8I,EAAQ,GAAI,KAAO,EAW/C,OAVA81S,EAAeA,GAAgB,GAAKA,GAAgB,GAAKA,EAAe,EAE1C,MAA1BF,GACFvkP,GAAQwkP,EACR1jP,GAAU2jP,GACyB,MAA1BF,IACTvkP,GAAQwkP,EACR1jP,GAAU2jP,GAGL,IAAI3/c,KAAKA,KAAK6uN,IAAIzG,EAAMQ,EAAO8I,EAAKwJ,EAAMc,EAAQC,QAItDg8O,EAnDwB,GAsDjC7qe,EAAQ6qe,cAAgBA,GAoBjB,SAAC9qe,EAAQyye,EAA0BhI,GAE1C,aAGAzqe,EAAOC,QAAUwqe,EAAoB,IAI9B,SAACzqe,EAAQyye,EAA0BhI,GAE1C,aAIA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX,IAAI8me,EAAU,SAAUzye,GAGtB,IAEIW,EAFA+xe,EAAKzve,OAAOD,UACZygN,EAASivR,EAAGtse,eAEZuse,EAA4B,oBAAXpue,OAAwBA,OAAS,GAClDque,EAAiBD,EAAQnue,UAAY,aACrCque,EAAsBF,EAAQrpO,eAAiB,kBAC/CwpO,EAAoBH,EAAQx4T,aAAe,gBAE/C,SAASuqB,EAAO/4L,EAAKxC,EAAK5I,GAOxB,OANA0C,OAAOyJ,eAAef,EAAKxC,EAAK,CAC9B5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAELlB,EAAIxC,GAGb,IACEu7L,EAAO,GAAI,IACX,MAAOzuJ,GACPyuJ,EAAS,SAAgB/4L,EAAKxC,EAAK5I,GACjC,OAAOoL,EAAIxC,GAAO5I,GAItB,SAAS8+E,EAAK0zZ,EAASC,EAAS/+T,EAAMg/T,GACpC,IAAIC,EAAiBF,GAAWA,EAAQhwe,qBAAqBmwe,EAAYH,EAAUG,EAC/Ep4Z,EAAY93E,OAAOC,OAAOgwe,EAAelwe,WACzC+K,EAAU,IAAI09B,EAAQwnc,GAAe,IAEzC,OADAl4Z,EAAUq4Z,QAwIZ,SAA0BL,EAAS9+T,EAAMlmK,GACvC,IAAI89B,EAAQwnc,EACZ,OAAO,SAAgBnnY,EAAQ38E,GAC7B,GAAIsc,IAAUync,EACZ,MAAM,IAAI7me,MAAM,gCAGlB,GAAIo/B,IAAU0nc,EAAmB,CAC/B,GAAe,UAAXrnY,EACF,MAAM38E,EAGR,OAAOikd,IAMT,IAHAzle,EAAQm+F,OAASA,EACjBn+F,EAAQwhB,IAAMA,IAED,CACX,IAAIkkd,EAAW1le,EAAQ0le,SAEvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAU1le,GAEnD,GAAI2le,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnB3le,EAAQm+F,OACVn+F,EAAQ0tE,KAAO1tE,EAAQ8le,MAAQ9le,EAAQwhB,SAClC,GAAuB,UAAnBxhB,EAAQm+F,OAAoB,CACrC,GAAIrgE,IAAUwnc,EAEZ,MADAxnc,EAAQ0nc,EACFxle,EAAQwhB,IAGhBxhB,EAAQ+le,kBAAkB/le,EAAQwhB,SACN,WAAnBxhB,EAAQm+F,QACjBn+F,EAAQkhe,OAAO,SAAUlhe,EAAQwhB,KAGnCsc,EAAQync,EACR,IAAI3ld,EAASomd,EAAShB,EAAS9+T,EAAMlmK,GAErC,GAAoB,WAAhB4f,EAAO5oB,KAAmB,CAG5B,GAFA8mC,EAAQ99B,EAAQ5I,KAAOoue,EAAoBS,EAEvCrmd,EAAO4B,MAAQqkd,EACjB,SAGF,MAAO,CACLrze,MAAOotB,EAAO4B,IACdpqB,KAAM4I,EAAQ5I,MAES,UAAhBwoB,EAAO5oB,OAChB8mC,EAAQ0nc,EACRxle,EAAQm+F,OAAS,QACjBn+F,EAAQwhB,IAAM5B,EAAO4B,OApMP0kd,CAAiBlB,EAAS9+T,EAAMlmK,GAC7CgtE,EAKT,SAASg5Z,EAASrse,EAAIiE,EAAK4jB,GACzB,IACE,MAAO,CACLxqB,KAAM,SACNwqB,IAAK7nB,EAAG7B,KAAK8F,EAAK4jB,IAEpB,MAAO0mB,GACP,MAAO,CACLlxC,KAAM,QACNwqB,IAAK0mB,IAXXj2C,EAAQq/E,KAAOA,EAgBf,IAAIg0Z,EAAyB,iBACzBW,EAAyB,iBACzBV,EAAoB,YACpBC,EAAoB,YACpBK,EAAmB,GAEvB,SAAST,KAET,SAASe,KAET,SAASC,KAET,IAAIC,EAAoB,GACxB1vS,EAAO0vS,EAAmBxB,GAAgB,WACxC,OAAO/te,QAET,IAAIwve,EAAWpxe,OAAO2qB,eAClB0md,EAA0BD,GAAYA,EAASA,EAASrke,EAAO,MAE/Dske,GAA2BA,IAA4B5B,GAAMjvR,EAAO59M,KAAKyue,EAAyB1B,KACpGwB,EAAoBE,GAGtB,IAAIC,EAAKJ,EAA2Bnxe,UAAYmwe,EAAUnwe,UAAYC,OAAOC,OAAOkxe,GAMpF,SAASI,EAAsBxxe,GAC7B,CAAC,OAAQ,QAAS,UAAUuO,SAAQ,SAAU26F,GAC5Cw4F,EAAO1hM,EAAWkpG,GAAQ,SAAU38E,GAClC,OAAO1qB,KAAKuue,QAAQlnY,EAAQ38E,SA4BlC,SAASkld,EAAc15Z,EAAW25Z,GAChC,SAASj8S,EAAOvsF,EAAQ38E,EAAKw0B,EAASi3B,GACpC,IAAIrtD,EAASomd,EAASh5Z,EAAUmxB,GAASnxB,EAAWxrD,GAEpD,GAAoB,UAAhB5B,EAAO5oB,KAEJ,CACL,IAAI0T,EAASkV,EAAO4B,IAChBhvB,EAAQkY,EAAOlY,MAEnB,OAAIA,GAA4B,WAAnB6+C,EAAQ7+C,IAAuBkjN,EAAO59M,KAAKtF,EAAO,WACtDm0e,EAAY3wb,QAAQxjD,EAAMo0e,SAASv5Z,MAAK,SAAU76E,GACvDk4L,EAAO,OAAQl4L,EAAOwjD,EAASi3B,MAC9B,SAAU/kC,GACXwiJ,EAAO,QAASxiJ,EAAK8N,EAASi3B,MAI3B05Z,EAAY3wb,QAAQxjD,GAAO66E,MAAK,SAAUw5Z,GAC/Cn8d,EAAOlY,MAAQq0e,EACf7wb,EAAQtrC,MACP,SAAUzF,GACX,OAAOylL,EAAO,QAASzlL,EAAO+wC,EAASi3B,MAjBzCA,EAAOrtD,EAAO4B,KAsBlB,IAAIsld,EAYJhwe,KAAKuue,QAVL,SAAiBlnY,EAAQ38E,GACvB,SAASuld,IACP,OAAO,IAAIJ,GAAY,SAAU3wb,EAASi3B,GACxCy9G,EAAOvsF,EAAQ38E,EAAKw0B,EAASi3B,MAIjC,OAAO65Z,EAAkBA,EAAkBA,EAAgBz5Z,KAAK05Z,EAA4BA,GAA8BA,KAsF9H,SAASnB,EAAoBF,EAAU1le,GACrC,IAAIm+F,EAASunY,EAASjve,SAASuJ,EAAQm+F,QAEvC,GAAIA,IAAWvrG,EAAW,CAGxB,GAFAoN,EAAQ0le,SAAW,KAEI,UAAnB1le,EAAQm+F,OAAoB,CAC9B,GAAIunY,EAASjve,SAAT,SACFuJ,EAAQm+F,OAAS,SACjBn+F,EAAQwhB,IAAM5uB,EACdgze,EAAoBF,EAAU1le,GAEP,UAAnBA,EAAQm+F,QACV,OAAO0nY,EAIX7le,EAAQm+F,OAAS,QACjBn+F,EAAQwhB,IAAM,IAAIroB,UAAU,kDAG9B,OAAO0se,EAGT,IAAIjmd,EAASomd,EAAS7nY,EAAQunY,EAASjve,SAAUuJ,EAAQwhB,KAEzD,GAAoB,UAAhB5B,EAAO5oB,KAIT,OAHAgJ,EAAQm+F,OAAS,QACjBn+F,EAAQwhB,IAAM5B,EAAO4B,IACrBxhB,EAAQ0le,SAAW,KACZG,EAGT,IAAI5xR,EAAOr0L,EAAO4B,IAElB,OAAKyyL,EAODA,EAAK78M,MACP4I,EAAQ0le,EAASsB,YAAc/yR,EAAKzhN,MACpCwN,EAAQnJ,KAAO6ue,EAASuB,QAED,WAAnBjne,EAAQm+F,SACVn+F,EAAQm+F,OAAS,OACjBn+F,EAAQwhB,IAAM5uB,GAMlBoN,EAAQ0le,SAAW,KACZG,GAJE5xR,GAfPj0M,EAAQm+F,OAAS,QACjBn+F,EAAQwhB,IAAM,IAAIroB,UAAU,oCAC5B6G,EAAQ0le,SAAW,KACZG,GA4BX,SAASqB,EAAaC,GACpB,IAAIpte,EAAQ,CACVqte,OAAQD,EAAK,IAGX,KAAKA,IACPpte,EAAMste,SAAWF,EAAK,IAGpB,KAAKA,IACPpte,EAAMute,WAAaH,EAAK,GACxBpte,EAAMwte,SAAWJ,EAAK,IAGxBrwe,KAAK0we,WAAWtke,KAAKnJ,GAGvB,SAAS0te,EAAc1te,GACrB,IAAI6lB,EAAS7lB,EAAM2te,YAAc,GACjC9nd,EAAO5oB,KAAO,gBACP4oB,EAAO4B,IACdznB,EAAM2te,WAAa9nd,EAGrB,SAAS8d,EAAQwnc,GACfpue,KAAK0we,WAAa,CAAC,CACjBJ,OAAQ,SAEVlC,EAAY1he,QAAQ0je,EAAcpwe,MAClCA,KAAK2qE,OAAM,GA2Bb,SAASx/D,EAAOrK,GACd,GAAIA,EAAU,CACZ,IAAI+ve,EAAiB/ve,EAASite,GAE9B,GAAI8C,EACF,OAAOA,EAAe7ve,KAAKF,GAG7B,GAA6B,oBAAlBA,EAASf,KAClB,OAAOe,EAGT,IAAKs7C,MAAMt7C,EAASe,QAAS,CAC3B,IAAImB,GAAK,EACLjD,EAAO,SAASA,IAClB,OAASiD,EAAIlC,EAASe,QACpB,GAAI+8M,EAAO59M,KAAKF,EAAUkC,GAGxB,OAFAjD,EAAKrE,MAAQoF,EAASkC,GACtBjD,EAAKO,MAAO,EACLP,EAMX,OAFAA,EAAKrE,MAAQI,EACbiE,EAAKO,MAAO,EACLP,GAGT,OAAOA,EAAKA,KAAOA,GAIvB,MAAO,CACLA,KAAM4ue,GAMV,SAASA,IACP,MAAO,CACLjze,MAAOI,EACPwE,MAAM,GA6KV,OAhfA+ue,EAAkBlxe,UAAYmxe,EAC9BzvS,EAAO6vS,EAAI,cAAeJ,GAC1BzvS,EAAOyvS,EAA4B,cAAeD,GAClDA,EAAkB9md,YAAcs3K,EAAOyvS,EAA4BrB,EAAmB,qBAUtF9ye,EAAQ21e,oBAAsB,SAAUC,GACtC,IAAI5yd,EAAyB,oBAAX4yd,GAAyBA,EAAOzye,YAClD,QAAO6f,IAAOA,IAASkxd,GAAyD,uBAAnClxd,EAAKoK,aAAepK,EAAK3P,QAGxErT,EAAQque,KAAO,SAAUuH,GASvB,OARI3ye,OAAOo3E,eACTp3E,OAAOo3E,eAAeu7Z,EAAQzB,IAE9ByB,EAAO7ye,UAAYoxe,EACnBzvS,EAAOkxS,EAAQ9C,EAAmB,sBAGpC8C,EAAO5ye,UAAYC,OAAOC,OAAOqxe,GAC1BqB,GAGT51e,EAAQ61e,MAAQ,SAAUtmd,GACxB,MAAO,CACLold,QAASpld,IA8Cbild,EAAsBC,EAAczxe,WACpC0hM,EAAO+vS,EAAczxe,UAAW6ve,GAAqB,WACnD,OAAOhue,QAET7E,EAAQy0e,cAAgBA,EAExBz0e,EAAQ00J,MAAQ,SAAUq+U,EAASC,EAAS/+T,EAAMg/T,EAAayB,QACzC,IAAhBA,IAAwBA,EAAc5wb,SAC1C,IAAIpjD,EAAO,IAAI+ze,EAAcp1Z,EAAK0zZ,EAASC,EAAS/+T,EAAMg/T,GAAcyB,GACxE,OAAO10e,EAAQ21e,oBAAoB3C,GAAWtye,EAAOA,EAAKkE,OAAOw2E,MAAK,SAAU3iE,GAC9E,OAAOA,EAAOtT,KAAOsT,EAAOlY,MAAQG,EAAKkE,WAgI7C4ve,EAAsBD,GACtB7vS,EAAO6vS,EAAIzB,EAAmB,aAC9BpuS,EAAO6vS,EAAI3B,GAAgB,WACzB,OAAO/te,QAET6/L,EAAO6vS,EAAI,YAAY,WACrB,MAAO,wBAmCTv0e,EAAQ2G,KAAO,SAAUqC,GACvB,IAAIrC,EAAO,GAEX,IAAK,IAAIwC,KAAOH,EACdrC,EAAKsK,KAAK9H,GAIZ,OADAxC,EAAKgB,UACE,SAAS/C,IACd,KAAO+B,EAAKD,QAAQ,CAClB,IAAIyC,EAAMxC,EAAKuK,MAEf,GAAI/H,KAAOH,EAGT,OAFApE,EAAKrE,MAAQ4I,EACbvE,EAAKO,MAAO,EACLP,EAKX,OADAA,EAAKO,MAAO,EACLP,IAyCX5E,EAAQgQ,OAASA,EASjBy7B,EAAQzoC,UAAY,CAClBG,YAAasoC,EACb+jC,MAAO,SAAesma,GAUpB,GATAjxe,KAAKsX,KAAO,EACZtX,KAAKD,KAAO,EACZC,KAAK42E,KAAO52E,KAAKgve,MAAQlze,EACzBkE,KAAKM,MAAO,EACZN,KAAK4ue,SAAW,KAChB5ue,KAAKqnG,OAAS,OACdrnG,KAAK0qB,IAAM5uB,EACXkE,KAAK0we,WAAWhke,QAAQike,IAEnBM,EACH,IAAK,IAAIzie,KAAQxO,KACQ,MAAnBwO,EAAK85I,OAAO,IAAcs2D,EAAO59M,KAAKhB,KAAMwO,KAAU4tC,OAAO5tC,EAAKsB,MAAM,MAC1E9P,KAAKwO,GAAQ1S,IAKrB61S,KAAM,WACJ3xS,KAAKM,MAAO,EACZ,IACI4we,EADYlxe,KAAK0we,WAAW,GACLE,WAE3B,GAAwB,UAApBM,EAAWhxe,KACb,MAAMgxe,EAAWxmd,IAGnB,OAAO1qB,KAAKmxe,MAEdlC,kBAAmB,SAA2Bl1I,GAC5C,GAAI/5V,KAAKM,KACP,MAAMy5V,EAGR,IAAI7wV,EAAUlJ,KAEd,SAAS8jJ,EAAOstV,EAAKC,GAUnB,OATAvod,EAAO5oB,KAAO,QACd4oB,EAAO4B,IAAMqvU,EACb7wV,EAAQnJ,KAAOqxe,EAEXC,IACFnoe,EAAQm+F,OAAS,OACjBn+F,EAAQwhB,IAAM5uB,KAGPu1e,EAGX,IAAK,IAAIrue,EAAIhD,KAAK0we,WAAW7ue,OAAS,EAAGmB,GAAK,IAAKA,EAAG,CACpD,IAAIC,EAAQjD,KAAK0we,WAAW1te,GACxB8lB,EAAS7lB,EAAM2te,WAEnB,GAAqB,SAAjB3te,EAAMqte,OACR,OAAOxsV,EAAO,OAGhB,GAAI7gJ,EAAMqte,QAAUtwe,KAAKsX,KAAM,CAC7B,IAAIg6d,EAAW1yR,EAAO59M,KAAKiC,EAAO,YAC9Bsue,EAAa3yR,EAAO59M,KAAKiC,EAAO,cAEpC,GAAIque,GAAYC,EAAY,CAC1B,GAAIvxe,KAAKsX,KAAOrU,EAAMste,SACpB,OAAOzsV,EAAO7gJ,EAAMste,UAAU,GACzB,GAAIvwe,KAAKsX,KAAOrU,EAAMute,WAC3B,OAAO1sV,EAAO7gJ,EAAMute,iBAEjB,GAAIc,GACT,GAAItxe,KAAKsX,KAAOrU,EAAMste,SACpB,OAAOzsV,EAAO7gJ,EAAMste,UAAU,OAE3B,KAAIgB,EAKT,MAAM,IAAI3pe,MAAM,0CAJhB,GAAI5H,KAAKsX,KAAOrU,EAAMute,WACpB,OAAO1sV,EAAO7gJ,EAAMute,gBAQ9BpG,OAAQ,SAAgBlqe,EAAMwqB,GAC5B,IAAK,IAAI1nB,EAAIhD,KAAK0we,WAAW7ue,OAAS,EAAGmB,GAAK,IAAKA,EAAG,CACpD,IAAIC,EAAQjD,KAAK0we,WAAW1te,GAE5B,GAAIC,EAAMqte,QAAUtwe,KAAKsX,MAAQsnM,EAAO59M,KAAKiC,EAAO,eAAiBjD,KAAKsX,KAAOrU,EAAMute,WAAY,CACjG,IAAIgB,EAAevue,EACnB,OAIAuue,IAA0B,UAATtxe,GAA6B,aAATA,IAAwBsxe,EAAalB,QAAU5ld,GAAOA,GAAO8md,EAAahB,aACjHgB,EAAe,MAGjB,IAAI1od,EAAS0od,EAAeA,EAAaZ,WAAa,GAItD,OAHA9nd,EAAO5oB,KAAOA,EACd4oB,EAAO4B,IAAMA,EAET8md,GACFxxe,KAAKqnG,OAAS,OACdrnG,KAAKD,KAAOyxe,EAAahB,WAClBzB,GAGF/ue,KAAKyxe,SAAS3od,IAEvB2od,SAAU,SAAkB3od,EAAQ2nd,GAClC,GAAoB,UAAhB3nd,EAAO5oB,KACT,MAAM4oB,EAAO4B,IAaf,MAVoB,UAAhB5B,EAAO5oB,MAAoC,aAAhB4oB,EAAO5oB,KACpCF,KAAKD,KAAO+oB,EAAO4B,IACM,WAAhB5B,EAAO5oB,MAChBF,KAAKmxe,KAAOnxe,KAAK0qB,IAAM5B,EAAO4B,IAC9B1qB,KAAKqnG,OAAS,SACdrnG,KAAKD,KAAO,OACa,WAAhB+oB,EAAO5oB,MAAqBuwe,IACrCzwe,KAAKD,KAAO0we,GAGP1B,GAEThtL,OAAQ,SAAgByuL,GACtB,IAAK,IAAIxte,EAAIhD,KAAK0we,WAAW7ue,OAAS,EAAGmB,GAAK,IAAKA,EAAG,CACpD,IAAIC,EAAQjD,KAAK0we,WAAW1te,GAE5B,GAAIC,EAAMute,aAAeA,EAGvB,OAFAxwe,KAAKyxe,SAASxue,EAAM2te,WAAY3te,EAAMwte,UACtCE,EAAc1te,GACP8re,IAIb,MAAS,SAAgBuB,GACvB,IAAK,IAAItte,EAAIhD,KAAK0we,WAAW7ue,OAAS,EAAGmB,GAAK,IAAKA,EAAG,CACpD,IAAIC,EAAQjD,KAAK0we,WAAW1te,GAE5B,GAAIC,EAAMqte,SAAWA,EAAQ,CAC3B,IAAIxnd,EAAS7lB,EAAM2te,WAEnB,GAAoB,UAAhB9nd,EAAO5oB,KAAkB,CAC3B,IAAIwxe,EAAS5od,EAAO4B,IACpBimd,EAAc1te,GAGhB,OAAOyue,GAIX,MAAM,IAAI9pe,MAAM,0BAElB+pe,cAAe,SAAuB7we,EAAUove,EAAYC,GAW1D,OAVAnwe,KAAK4ue,SAAW,CACdjve,SAAUwL,EAAOrK,GACjBove,WAAYA,EACZC,QAASA,GAGS,SAAhBnwe,KAAKqnG,SACPrnG,KAAK0qB,IAAM5uB,GAGNize,IAGJ5ze,EA7jBK,CA8jBuB,WAArBo/C,EAnkBOr/C,EAASyqe,EAAoBiM,IAAI12e,IAmkBRA,EAAOC,QAAU,IAEjE,IACE02e,mBAAqBjE,EACrB,MAAOkE,GACyE,YAArD,qBAAf11J,WAA6B,YAAc7hS,EAAQ6hS,aAC7DA,WAAWy1J,mBAAqBjE,EAEhCv+T,SAAS,IAAK,yBAAdA,CAAwCu+T,KAMrC,SAAClI,EAAyBvqe,EAASwqe,GAE1C,aAyCA,SAASjtX,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAAShZ,EAAmB9xF,GAAO,OAMnC,SAA4BA,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO86d,EAAkB96d,GAN1CouQ,CAAmBpuQ,IAI7D,SAA0BhS,GAAQ,GAAsB,qBAAX6D,QAAmD,MAAzB7D,EAAK6D,OAAOC,WAA2C,MAAtB9D,EAAK,cAAuB,OAAO4F,MAAMuN,KAAKnT,GAJjFqgR,CAAiBruQ,IAAQ+6d,EAA4B/6d,IAE1H,WAAgC,MAAM,IAAIxL,UAAU,wIAF8E85Q,GAQlI,SAAShpO,EAAetlC,EAAK7K,GAAK,OAMlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EANtBkke,CAAgBlke,IAIzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GAJzbE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAUzI,SAASxJ,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAASzoM,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX,SAASsmB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASw1E,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAhFxM/H,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQk3e,eAAiBl3e,EAAQmxe,KAAOnxe,EAAQm3e,sBAAwBn3e,EAAQo3e,4BAA8Bp3e,EAAQq3e,qBAAuBr3e,EAAQs3e,kBAAoBt3e,EAAQu3e,WAAav3e,EAAQw3e,oBAAsBx3e,EAAQy3e,eAAiBz3e,EAAQ03e,kBAAoB13e,EAAQ23e,kBAAoB33e,EAAQ43e,oBAAsB53e,EAAQ63e,IAAM73e,EAAQ83e,oBAAsB93e,EAAQ+3e,qBAAuB/3e,EAAQg4e,sBAAwBh4e,EAAQi4e,oBAAsBj4e,EAAQk4e,UAAYl4e,EAAQm4e,gBAAkBn4e,EAAQo4e,YAAcp4e,EAAQq4e,SAAWr4e,EAAQs4e,qBAAuBt4e,EAAQu4e,wBAA0Bv4e,EAAQw4e,oBAAsBx4e,EAAQ0xe,cAAgB1xe,EAAQy4e,eAAiBz4e,EAAQ04e,yBAA2B14e,EAAQ24e,sBAAwB34e,EAAQ44e,oBAAsB54e,EAAQ64e,eAAiB74e,EAAQ84e,sBAAwB94e,EAAQ+4e,eAAiB/4e,EAAQg5e,oBAAsBh5e,EAAQi5e,0BAA4Bj5e,EAAQk5e,0BAA4Bl5e,EAAQm5e,oBAAiB,EAC7+Bn5e,EAAQo5e,gBAAkBA,EAC1Bp5e,EAAQq5e,cA0tBR,SAAuB3me,GACrB,IAAIhM,EAASgM,EAAIhM,OAEjB,GAAe,IAAXA,GAAgBgM,EAAI,aAAc2nJ,WACpC,OAAO3nJ,EAAI,GAKb,IAFA,IAAI4me,EAAe,EAEVzxe,EAAI,EAAGA,EAAInB,EAAQmB,IAC1Byxe,GAAgBF,EAAgB1me,EAAI7K,IAMtC,IAHA,IAAI6xJ,EAAM,EACN75G,EAAO,IAAIw6G,WAAWi/U,GAEjBjga,EAAK,EAAGA,EAAK3yE,EAAQ2yE,IAAM,CAClC,IAAIoF,EAAO/rE,EAAI2mE,GAEToF,aAAgB47E,aAElB57E,EADkB,kBAATA,EACFswZ,EAActwZ,GAEd,IAAI47E,WAAW57E,IAI1B,IAAI86Z,EAAa96Z,EAAKssF,WACtBlrH,EAAKtzC,IAAIkyE,EAAMi7E,GACfA,GAAO6/U,EAGT,OAAO15b,GAzvBT7/C,EAAQsre,OAASA,EACjBtre,EAAQw5e,cA+qBR,SAAuB57X,GACrB0tX,EAAiB,OAAV1tX,GAAqC,WAAnBx+D,EAAQw+D,SAAwCj9G,IAAjBi9G,EAAMl3G,OAAsB,sCACpF,IAAIA,EAASk3G,EAAMl3G,OACf+ye,EAAqB,KAEzB,GAAI/ye,EAAS+ye,EACX,OAAO/le,OAAO6tJ,aAAaz0J,MAAM,KAAM8wG,GAKzC,IAFA,IAAI87X,EAAS,GAEJ7xe,EAAI,EAAGA,EAAInB,EAAQmB,GAAK4xe,EAAoB,CACnD,IAAIE,EAAW/3e,KAAKE,IAAI+F,EAAI4xe,EAAoB/ye,GAC5Cy0L,EAAQv9E,EAAMg8X,SAAS/xe,EAAG8xe,GAC9BD,EAAOzoe,KAAKyC,OAAO6tJ,aAAaz0J,MAAM,KAAMquL,IAG9C,OAAOu+S,EAAOpzd,KAAK,KA/rBrBtmB,EAAQq1W,gBA6mCR,SAAyBx1T,GACvB,IAAIitY,EAAcvkb,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAClFsxe,EAAkBtxe,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAErF,GAAI22M,IAAIm2J,iBAAmC,qBAATykI,OAAyBD,EACzD,OAAO36R,IAAIm2J,gBAAgB,IAAIykI,KAAK,CAACj6b,GAAO,CAC1C96C,KAAM+nb,KAOV,IAHA,IAAIitD,EAAS,oEACThiV,EAAS,QAAQ5nJ,OAAO28a,EAAa,YAEhCjlb,EAAI,EAAGkB,EAAK82C,EAAKn5C,OAAQmB,EAAIkB,EAAIlB,GAAK,EAAG,CAChD,IAAImye,EAAe,IAAVn6b,EAAKh4C,GACVoye,EAAmB,IAAdp6b,EAAKh4C,EAAI,GACdqye,EAAmB,IAAdr6b,EAAKh4C,EAAI,GACdgiK,EAAKmwU,GAAM,EACXlwU,GAAW,EAALkwU,IAAW,EAAIC,GAAM,EAC3BlwU,EAAKliK,EAAI,EAAIkB,GAAW,GAALkxe,IAAa,EAAIC,GAAM,EAAI,GAC9CC,EAAKtye,EAAI,EAAIkB,EAAU,GAALmxe,EAAY,GAClCniV,GAAUgiV,EAAOlwU,GAAMkwU,EAAOjwU,GAAMiwU,EAAOhwU,GAAMgwU,EAAOI,GAG1D,OAAOpiV,GApoCT/3J,EAAQo6e,wBAslCR,WACE,IAAIC,EAAap3e,OAAOC,OAAO,MAC3Bo3e,GAAY,EAiBhB,OAhBAr3e,OAAOyJ,eAAe2te,EAAY,UAAW,CAC3Czxe,IAAK,WACH,OAAO0xe,KAGXD,EAAWxzV,QAAU,IAAI/iG,SAAQ,SAAUC,EAASi3B,GAClDq/Z,EAAWt2b,QAAU,SAAUlE,GAC7By6b,GAAY,EACZv2b,EAAQlE,IAGVw6b,EAAWr/Z,OAAS,SAAUo1C,GAC5BkqX,GAAY,EACZt/Z,EAAOo1C,OAGJiqX,GAxmCTr6e,EAAQu6e,uBAieR,SAAgCl0Y,GAC9B,IAAI8rY,EAAU5pe,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAC9EsoC,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAElF,IAAK89F,EACH,OAAO,KAGT,IACE,GAAIx1D,GAA0B,kBAARw1D,EAAkB,CACtC,GAAIx1D,EAAQ2pc,oBAAsBn0Y,EAAIk7F,WAAW,QAAS,CACxD,IAAIk5S,EAAOp0Y,EAAIjzD,MAAM,OAEjBqnc,GAAQA,EAAK/ze,QAAU,IACzB2/F,EAAM,UAAUl2F,OAAOk2F,IAI3B,GAAIx1D,EAAQ6pc,mBACV,IACEr0Y,EAAMs0Y,EAAmBt0Y,GACzB,MAAOsvO,KAIb,IAAIilK,EAAczI,EAAU,IAAIjzR,IAAI74G,EAAK8rY,GAAW,IAAIjzR,IAAI74G,GAE5D,GAAIw0Y,EAAiBD,GACnB,OAAOA,EAET,MAAOjlK,IAET,OAAO,MAhgBT31U,EAAQ86e,aA4gCR,SAAsBztd,GACpB,OAAOA,EAAIowD,QAAQ,iBAAiB,SAAUrqC,GAC5C,MAAc,OAAVA,EACK,MACY,OAAVA,EACF,MAGF,KAAKjjC,OAAOijC,OAnhCvBpzC,EAAQ+6e,oBA6kCR,WACE,IAAInqX,EAAOroH,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,IAAIqqB,KAC/EmlI,EAAS,CAACnnC,EAAK8wH,iBAAiB57O,YAAa8qH,EAAK07H,cAAgB,GAAGxmP,WAAW86L,SAAS,EAAG,KAAMhwE,EAAK27H,aAAazmP,WAAW86L,SAAS,EAAG,KAAMhwE,EAAKoqX,cAAcl1e,WAAW86L,SAAS,EAAG,KAAMhwE,EAAKo7H,gBAAgBlmP,WAAW86L,SAAS,EAAG,KAAMhwE,EAAKqqX,gBAAgBn1e,WAAW86L,SAAS,EAAG,MACnS,OAAO7oC,EAAOzxI,KAAK,KA/kCrBtmB,EAAQk7e,kBAiaR,WACE,OAAOC,GAjaTn7e,EAAQgiN,KAoaR,SAAcszB,GACR6lQ,GAAajE,EAAekE,OAC9Bvud,QAAQijF,IAAI,SAAS3/F,OAAOmlO,KArahCt1O,EAAQ20K,cAwjCR,SAAuB1vK,GACrB,MAAsB,WAAfm6C,EAAQn6C,IAAyB,OAANA,QAA+BtE,IAAjBsE,EAAE8lK,YAxjCpD/qK,EAAQq7e,aA2jCR,SAAsBzzP,EAAMC,GAC1B,GAAID,EAAKlhP,SAAWmhP,EAAKnhP,OACvB,OAAO,EAGT,IAAK,IAAImB,EAAI,EAAGkB,EAAK6+O,EAAKlhP,OAAQmB,EAAIkB,EAAIlB,IACxC,GAAI+/O,EAAK//O,KAAOggP,EAAKhgP,GACnB,OAAO,EAIX,OAAO,GArkCT7H,EAAQs7e,QAkhCR,SAAiBjud,GACf,MAAO,iBAAiBuyB,KAAKvyB,IAlhC/BrtB,EAAQu7e,OAyiCR,SAAgBt2e,GACd,MAAoB,mBAANA,GAziChBjF,EAAQw7e,MA4iCR,SAAev2e,GACb,MAAoB,kBAANA,GA5iChBjF,EAAQy7e,aAobR,SAAsBtJ,EAASuJ,GAC7B,IAAIxoP,EAEJ,IAGE,KAFAA,EAAO,IAAIh0C,IAAIizR,IAELxyd,QAA0B,SAAhBuzO,EAAKvzO,OACvB,OAAO,EAET,MAAO1S,GACP,OAAO,EAGT,IAAIuY,EAAQ,IAAI05L,IAAIw8R,EAAUxoP,GAC9B,OAAOA,EAAKvzO,SAAW6F,EAAM7F,QAjc/B3f,EAAQy3L,SA8iCR,SAAkBxyL,GAChB,MAAoB,kBAANA,GA9iChBjF,EAAQ27e,cAovBR,SAAuB9te,GACrB,IAGImX,EAHArZ,EAAM1I,OAAOC,OAAO,MAEpB6ue,EAntBN,SAAoC/me,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,EAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAmtB/8B6pN,CAA2BjyP,GAG3C,IACE,IAAKkke,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAI02e,EAAc7jc,EAAehzB,EAAMzkB,MAAO,GAC1C4I,EAAM0ye,EAAY,GAClBt7e,EAAQs7e,EAAY,GAExBlwe,EAAIxC,GAAO5I,GAEb,MAAO01C,GACP87b,EAAU9ke,EAAEgpC,GATd,QAWE87b,EAAUx2Z,IAGZ,OAAO5vE,GAvwBT3L,EAAQ87e,WA+uBR,SAAoBnwe,GAClB,OAAO1I,OAAO0D,KAAKgF,GAAKjF,QA/uB1B1G,EAAQwre,qBA+oBR,SAA8Bn+c,GAC5B,IAAI0ud,EAAmBxze,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAEtF,MAAmB,kBAAR8kB,GACTP,EAAK,2DACEO,IAGL0ud,IACF1ud,EAAMA,EAAIowD,QAAQu+Z,EAA2B,MAGxC3ud,EAAIowD,QAAQw+Z,EAAsB,MA1pB3Cj8e,EAAQk8e,kBA+YR,SAA2Bx9d,GACrBlY,OAAOC,UAAUiY,KACnBy8d,EAAYz8d,IAhZhB1e,EAAQ2mI,OAASA,EACjB3mI,EAAQm8e,SAuuBR,SAAkB57e,GAChB,OAAOmT,OAAO6tJ,aAAahhK,GAAS,GAAK,IAAMA,GAAS,GAAK,IAAMA,GAAS,EAAI,IAAc,IAARA,IAvuBxFP,EAAQ+ue,cAAgBA,EACxB/ue,EAAQo8e,kBAo+BR,SAA2B/ud,GACzB,IAAI3mB,EAAS2mB,EAAI3mB,OACbgze,EAAS,GAEb,GAAe,SAAXrsd,EAAI,IAA4B,SAAXA,EAAI,GAC3B,IAAK,IAAIxlB,EAAI,EAAGA,EAAInB,EAAQmB,GAAK,EAC/B6xe,EAAOzoe,KAAKyC,OAAO6tJ,aAAal0I,EAAIrgB,WAAWnF,IAAM,EAAIwlB,EAAIrgB,WAAWnF,EAAI,UAEzE,GAAe,SAAXwlB,EAAI,IAA4B,SAAXA,EAAI,GAClC,IAAK,IAAIgvd,EAAM,EAAGA,EAAM31e,EAAQ21e,GAAO,EACrC3C,EAAOzoe,KAAKyC,OAAO6tJ,aAAal0I,EAAIrgB,WAAWqve,EAAM,IAAM,EAAIhvd,EAAIrgB,WAAWqve,UAGhF,IAAK,IAAIC,EAAM,EAAGA,EAAM51e,IAAU41e,EAAK,CACrC,IAAIzvY,EAAO0vY,EAAwBlvd,EAAIrgB,WAAWsve,IAClD5C,EAAOzoe,KAAK47F,EAAOn5F,OAAO6tJ,aAAa10D,GAAQx/E,EAAI8/H,OAAOmvV,IAI9D,OAAO5C,EAAOpzd,KAAK,KAt/BrBtmB,EAAQw8e,sBAygCR,SAA+Bnvd,GAG7B,IAFA,IAAI66I,EAAM,CAAC,YAEFrgK,EAAI,EAAGkB,EAAKskB,EAAI3mB,OAAQmB,EAAIkB,EAAIlB,IAAK,CAC5C,IAAI40e,EAAQpvd,EAAIrgB,WAAWnF,GAE3BqgK,EAAIj3J,KAAKyC,OAAO6tJ,aAAak7U,GAAS,EAAI,KAAO/oe,OAAO6tJ,aAAqB,IAARk7U,IAGvE,OAAOv0U,EAAI5hJ,KAAK,KAjhClBtmB,EAAQ26e,mBAAqBA,EAC7B36e,EAAQ08e,YAAcA,EACtB18e,EAAQ28e,mBAshCR,SAA4Btvd,GAC1B,OAAO21K,SAASyV,mBAAmBprL,KAthCrCrtB,EAAQ8sB,KAAOA,EAEf09c,EAAoB,GA+CpBxqe,EAAQm4e,gBADc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAGtCn4e,EAAQs4e,qBADmB,CAAC,KAAO,EAAG,EAAG,KAAO,EAAG,GAWnDt4e,EAAQw3e,oBATkB,CACxBoF,IAAK,EACLC,QAAS,EACTC,MAAO,EACPC,kBAAmB,GACnBC,oBAAqB,GACrBC,oBAAqB,GACrBC,OAAQ,KASVl9e,EAAQ64e,eANa,CACnBsE,QAAS,EACTC,OAAQ,EACRC,aAAc,EACdC,eAAgB,GAalBt9e,EAAQy3e,eAVa,CACnBqF,MAAO,EACPS,gBAAiB,EACjBC,KAAM,GACNC,mBAAoB,GACpBC,uBAAwB,IACxBC,uBAAwB,IACxBC,SAAU,KACVC,mBAAoB,MAetB79e,EAAQs3e,kBAZgB,CACtBwG,KAAM,EACNC,OAAQ,EACRC,YAAa,EACbC,UAAW,EACXC,iBAAkB,EAClBC,mBAAoB,EACpBC,wBAAyB,EACzBC,YAAa,EACbC,iBAAkB,EAClBC,iBAAkB,GAQpBv+e,EAAQk4e,UALQ,CACdsG,eAAgB,EAChBC,UAAW,EACXC,WAAY,GA+Bd1+e,EAAQy4e,eA5Ba,CACnBkG,KAAM,EACNC,KAAM,EACNC,SAAU,EACVC,KAAM,EACNC,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,SAAU,EACVC,UAAW,EACXC,UAAW,GACXC,SAAU,GACVC,UAAW,GACXC,MAAO,GACPC,MAAO,GACPC,IAAK,GACLC,MAAO,GACPC,eAAgB,GAChBC,MAAO,GACPC,MAAO,GACPC,OAAQ,GACRC,OAAQ,GACRC,YAAa,GACbC,QAAS,GACTC,UAAW,GACXC,OAAQ,GACRC,OAAQ,IAOVpgf,EAAQ04e,yBAJuB,CAC7B2H,OAAQ,SACRC,OAAQ,UAOVtgf,EAAQ84e,sBAJoB,CAC1BuH,OAAQ,SACRE,SAAU,YAUZvgf,EAAQ24e,sBAPoB,CAC1B6H,SAAU,WACVC,SAAU,WACV3zO,UAAW,YACX4zO,UAAW,YACXhV,KAAM,QAOR1re,EAAQ44e,oBAJkB,CACxB+H,MAAO,QACPC,MAAO,KAeT5gf,EAAQ+4e,eAZa,CACnBkF,UAAW,EACX4C,OAAQ,EACR/D,MAAO,EACPgE,OAAQ,EACRC,SAAU,GACVC,OAAQ,GACRC,SAAU,GACVC,OAAQ,IACRC,aAAc,IACdC,eAAgB,KAwBlBphf,EAAQg5e,oBArBkB,CACxBiI,SAAU,EACVI,SAAU,EACVC,SAAU,EACVC,UAAW,KACXC,SAAU,KACVC,cAAe,MACfC,MAAO,MACPC,WAAY,MACZC,MAAO,OACPC,KAAM,OACNC,KAAM,OACNC,WAAY,QACZC,YAAa,QACbC,gBAAiB,QACjBC,YAAa,QACbC,KAAM,SACNC,SAAU,SACVC,eAAgB,SAChBC,kBAAmB,UAUrBtif,EAAQi5e,0BAPwB,CAC9BsJ,MAAO,EACPC,OAAQ,EACRC,QAAS,EACTC,MAAO,EACPtD,UAAW,GAmBbp/e,EAAQk5e,0BAhBwB,CAC9B7rP,EAAG,cACHruF,EAAG,aACHS,EAAG,aACHkjV,EAAG,WACHC,GAAI,QACJC,GAAI,OACJC,GAAI,WACJC,GAAI,YACJC,GAAI,cACJC,GAAI,gBACJ1jV,EAAG,YACHygG,EAAG,SACH9gG,EAAG,WACHN,EAAG,aAUL5+J,EAAQu4e,wBAPsB,CAC5B2K,GAAI,YACJC,GAAI,WACJC,GAAI,UACJC,GAAI,YACJC,GAAI,YAONtjf,EAAQ43e,oBAJkB,CACxBpyO,EAAG,WACH5mG,EAAG,aAeL5+J,EAAQu3e,WAZS,CACfgM,QAAS,UACTC,MAAO,QACPC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,KAAM,OACNC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,OAiBPhkf,EAAQq4e,SAdO,CACbkL,QAAS,UACTU,MAAO,QACPC,cAAe,gBACfC,OAAQ,SACRC,aAAc,eACdC,cAAe,gBACfC,SAAU,WACVC,aAAc,eACdC,MAAO,QACPC,SAAU,WACVC,MAAO,QACPC,QAAS,WAGX,IAAIzN,EAAiB,CACnB0N,OAAQ,EACRC,SAAU,EACVzJ,MAAO,GAETp7e,EAAQk3e,eAAiBA,EAMzBl3e,EAAQw4e,oBALkB,CACxB9M,KAAM,EACNoZ,OAAQ,EACRC,OAAQ,GAgGV/kf,EAAQ63e,IA7FE,CACRmN,WAAY,EACZC,aAAc,EACdC,WAAY,EACZC,YAAa,EACbC,cAAe,EACfC,QAAS,EACTC,mBAAoB,EACpBC,YAAa,EACbC,UAAW,EACXC,KAAM,GACNC,QAAS,GACTxkX,UAAW,GACXg0K,OAAQ,GACRywM,OAAQ,GACRC,QAAS,GACTC,SAAU,GACVC,SAAU,GACVC,UAAW,GACXC,UAAW,GACXpqO,OAAQ,GACRqqO,YAAa,GACbv4W,KAAM,GACNw4W,OAAQ,GACRC,WAAY,GACZC,aAAc,GACdC,gBAAiB,GACjBC,kBAAmB,GACnBC,QAAS,GACTloO,KAAM,GACNmoO,OAAQ,GACRC,UAAW,GACXC,QAAS,GACTC,eAAgB,GAChBC,eAAgB,GAChBC,UAAW,GACXC,WAAY,GACZC,QAAS,GACTC,qBAAsB,GACtBC,YAAa,GACbC,SAAU,GACVC,mBAAoB,GACpBC,cAAe,GACfC,SAAU,GACVC,SAAU,GACVC,eAAgB,GAChBC,iBAAkB,GAClBC,2BAA4B,GAC5BC,aAAc,GACdC,sBAAuB,GACvBC,oBAAqB,GACrBC,kBAAmB,GACnBC,eAAgB,GAChBC,gBAAiB,GACjBC,aAAc,GACdC,cAAe,GACfC,cAAe,GACfC,YAAa,GACbC,kBAAmB,GACnBC,gBAAiB,GACjBC,mBAAoB,GACpBC,iBAAkB,GAClBC,YAAa,GACbC,iBAAkB,GAClBC,eAAgB,GAChBC,eAAgB,GAChBC,aAAc,GACdC,UAAW,GACXC,eAAgB,GAChBC,mBAAoB,GACpBC,wBAAyB,GACzBC,iBAAkB,GAClBC,YAAa,GACbC,UAAW,GACXC,sBAAuB,GACvBC,oBAAqB,GACrBC,WAAY,GACZC,SAAU,GACVC,iBAAkB,GAClBC,eAAgB,GAChBC,gBAAiB,GACjBC,cAAe,GACfC,iBAAkB,GAClBC,sBAAuB,GACvBC,2BAA4B,GAC5BC,kBAAmB,GACnBC,wBAAyB,GACzBC,6BAA8B,GAC9BC,wBAAyB,GACzBC,4BAA6B,GAC7BC,yBAA0B,GAC1BC,cAAe,IA2BjBrqf,EAAQq3e,qBAxBmB,CACzBiT,QAAS,UACTC,MAAO,QACPC,WAAY,aACZC,WAAY,aACZC,MAAO,QACPC,eAAgB,iBAChBC,KAAM,OACNC,mBAAoB,qBACpBC,eAAgB,iBAChBC,aAAc,eACdC,mBAAoB,qBACpBC,eAAgB,iBAChBC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,gBAAiB,kBACjBC,kBAAmB,oBACnBC,mBAAoB,qBACpBC,oBAAqB,sBACrBC,mBAAoB,qBACpBC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,sBAAuB,yBAOzB3rf,EAAQ03e,kBAJgB,CACtBkU,cAAe,EACfC,mBAAoB,GAGtB,IAAI1Q,EAAYjE,EAAe2N,SAkB/B,SAAS/3d,EAAKwoN,GACR6lQ,GAAajE,EAAe2N,UAC9Bh4d,QAAQijF,IAAI,YAAY3/F,OAAOmlO,IAInC,SAASonQ,EAAYpnQ,GACnB,MAAM,IAAI7oO,MAAM6oO,GAGlB,SAASg2P,EAAOjwS,EAAMi6C,GACfj6C,GACHqhT,EAAYpnQ,GAqBhB,SAASulQ,EAAiBx0Y,GACxB,IAAKA,EACH,OAAO,EAGT,OAAQA,EAAI+rY,UACV,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,OACH,OAAO,EAET,QACE,OAAO,GAuCb,SAASzrW,EAAOh7H,EAAK+7I,EAAMnnJ,GAOzB,OANA0C,OAAOyJ,eAAef,EAAK+7I,EAAM,CAC/BnnJ,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAELtM,EAGT,IAAImxe,EAAgB,WAClB,SAASA,EAAcx7b,EAAS7iC,GAC1BxO,KAAK1B,cAAgBuue,GACvBgL,EAAY,oCAGd73e,KAAKqxC,QAAUA,EACfrxC,KAAKwO,KAAOA,EAKd,OAFAq+d,EAAc1ue,UAAY,IAAIyJ,MAC9Bile,EAAcvue,YAAcuue,EACrBA,EAZW,GAepB1xe,EAAQ0xe,cAAgBA,EAExB,IAAIiG,EAAiC,SAAUnG,GAC7C90Z,EAAUi7Z,EAAmBnG,GAE7B,IAAIthN,EAASrzM,EAAa86Z,GAE1B,SAASA,EAAkBriQ,EAAKzoI,GAC9B,IAAIrwD,EAMJ,OAJAvqB,EAAgBptB,KAAM8ye,IAEtBn7b,EAAQ0zO,EAAOrqR,KAAKhB,KAAMywO,EAAK,sBACzBzoI,KAAOA,EACNrwD,EAGT,OAAOm7b,EAf4B,CAgBnCjG,GAEF1xe,EAAQ23e,kBAAoBA,EAE5B,IAAIR,EAAqC,SAAU2U,GACjDpva,EAAUy6Z,EAAuB2U,GAEjC,IAAI1c,EAAUvyZ,EAAas6Z,GAE3B,SAASA,EAAsB7hQ,EAAKliD,GAClC,IAAInrE,EAMJ,OAJAh2F,EAAgBptB,KAAMsye,IAEtBlvX,EAASmnX,EAAQvpe,KAAKhB,KAAMywO,EAAK,0BAC1BliD,QAAUA,EACVnrE,EAGT,OAAOkvX,EAfgC,CAgBvCzF,GAEF1xe,EAAQm3e,sBAAwBA,EAEhC,IAAIc,EAAmC,SAAU8T,GAC/Crva,EAAUu7Z,EAAqB8T,GAE/B,IAAIrc,EAAU7yZ,EAAao7Z,GAE3B,SAASA,EAAoB3iQ,GAG3B,OAFArjN,EAAgBptB,KAAMoze,GAEfvI,EAAQ7pe,KAAKhB,KAAMywO,EAAK,uBAGjC,OAAO2iQ,EAX8B,CAYrCvG,GAEF1xe,EAAQi4e,oBAAsBA,EAE9B,IAAIH,EAAmC,SAAUkU,GAC/Ctva,EAAUo7Z,EAAqBkU,GAE/B,IAAInc,EAAUhzZ,EAAai7Z,GAE3B,SAASA,EAAoBxiQ,GAG3B,OAFArjN,EAAgBptB,KAAMize,GAEfjI,EAAQhqe,KAAKhB,KAAMywO,EAAK,uBAGjC,OAAOwiQ,EAX8B,CAYrCpG,GAEF1xe,EAAQ83e,oBAAsBA,EAE9B,IAAIV,EAA2C,SAAU6U,GACvDvva,EAAU06Z,EAA6B6U,GAEvC,IAAIxa,EAAU50Z,EAAau6Z,GAE3B,SAASA,EAA4B9hQ,EAAKhrI,GACxC,IAAI8d,EAMJ,OAJAn2F,EAAgBptB,KAAMuye,IAEtBhvX,EAASqpX,EAAQ5re,KAAKhB,KAAMywO,EAAK,gCAC1BhrI,OAASA,EACT8d,EAGT,OAAOgvX,EAfsC,CAgB7C1F,GAEF1xe,EAAQo3e,4BAA8BA,EAEtC,IAAIgB,EAA2B,SAAU8T,GACvCxva,EAAU07Z,EAAa8T,GAEvB,IAAIC,EAAUtva,EAAau7Z,GAE3B,SAASA,EAAY9iQ,GAGnB,OAFArjN,EAAgBptB,KAAMuze,GAEf+T,EAAQtmf,KAAKhB,KAAMywO,EAAK,eAGjC,OAAO8iQ,EAXsB,CAY7B1G,GAEF1xe,EAAQo4e,YAAcA,EAEtB,IAAIe,EAA8B,SAAUiT,GAC1C1va,EAAUy8Z,EAAgBiT,GAE1B,IAAIC,EAAUxva,EAAas8Z,GAE3B,SAASA,EAAe7jQ,GAGtB,OAFArjN,EAAgBptB,KAAMs0e,GAEfkT,EAAQxmf,KAAKhB,KAAMywO,EAAK,kBAGjC,OAAO6jQ,EAXyB,CAYhCzH,GAEF1xe,EAAQm5e,eAAiBA,EACzB,IAAI8C,EAAuB,SACvBD,EAA4B,eAqChC,SAASjN,EAAc1hd,GACrBi+c,EAAsB,kBAARj+c,EAAkB,sCAIhC,IAHA,IAAI3mB,EAAS2mB,EAAI3mB,OACbk3G,EAAQ,IAAIy8C,WAAW3zJ,GAElBmB,EAAI,EAAGA,EAAInB,IAAUmB,EAC5B+1G,EAAM/1G,GAAyB,IAApBwlB,EAAIrgB,WAAWnF,GAG5B,OAAO+1G,EAGT,SAASw7X,EAAgB1me,GACvB,YAAmB/R,IAAf+R,EAAIhM,OACCgM,EAAIhM,QAGb4ke,OAA0B3qe,IAAnB+R,EAAIq4J,WAA0B,uCAC9Br4J,EAAIq4J,YA4Eb,IAAIgtU,EAAuB,CACrBx3e,YACF,OAAOomI,EAAO9hI,KAAM,QATxB,WACE,IAAIynf,EAAU,IAAIjyV,WAAW,GAG7B,OAFAiyV,EAAQ,GAAK,EAEQ,IADR,IAAI/wV,YAAY+wV,EAAQv0V,OAAQ,EAAG,GAClC,GAKiBw0V,MAIjCvsf,EAAQ+3e,qBAAuBA,EAW/B,IAAIC,EAAwB,CACtBz3e,YACF,OAAOomI,EAAO9hI,KAAM,QAXxB,WACE,IAEE,OADA,IAAIqvK,SAAS,KACN,EACP,MAAOjnK,GACP,OAAO,GAMsBu/e,MAIjCxsf,EAAQg4e,sBAAwBA,EAEhC,IAAIyU,EAAajoZ,EAAmBl+F,MAAM,KAAKK,QAAQkH,KAAI,SAAU5C,GACnE,OAAOA,EAAEnF,SAAS,IAAI86L,SAAS,EAAG,QAGhCuwS,EAAoB,WACtB,SAASA,IACPl/c,EAAgBptB,KAAMsse,GA/xB1B,IAAsBh/c,EAAasrF,EAAYC,EAm9B7C,OAn9BoBvrF,EAkyBPg/c,EAlyBgCzzX,EAkyBpB,CAAC,CACxBv0G,IAAK,eACL5I,MAAO,SAAsBy7E,EAAGR,EAAG/wE,GACjC,MAAO,IAAI0F,OAAOs8e,EAAWzwa,IAAI7rE,OAAOs8e,EAAWjxa,IAAIrrE,OAAOs8e,EAAWhif,MAE1E,CACDtB,IAAK,YACL5I,MAAO,SAAmB2pK,EAAIC,GAC5B,MAAO,CAACD,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAIA,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GAAKD,EAAG,MAE/M,CACD/gK,IAAK,iBACL5I,MAAO,SAAwB+5E,EAAGrjE,GAGhC,MAAO,CAFEqjE,EAAE,GAAKrjE,EAAE,GAAKqjE,EAAE,GAAKrjE,EAAE,GAAKA,EAAE,GAC9BqjE,EAAE,GAAKrjE,EAAE,GAAKqjE,EAAE,GAAKrjE,EAAE,GAAKA,EAAE,MAGxC,CACD9N,IAAK,wBACL5I,MAAO,SAA+B+5E,EAAGrjE,GACvC,IAAItM,EAAIsM,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAG/B,MAAO,EAFGqjE,EAAE,GAAKrjE,EAAE,GAAKqjE,EAAE,GAAKrjE,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMtM,IACxD2vE,EAAE,GAAKrjE,EAAE,GAAKqjE,EAAE,GAAKrjE,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMtM,KAGrE,CACDxB,IAAK,6BACL5I,MAAO,SAAoCy7E,EAAG/kE,GAC5C,IAAIomO,EAAK8zP,EAAKC,eAAep1Z,EAAG/kE,GAC5BqmO,EAAK6zP,EAAKC,eAAep1Z,EAAErnE,MAAM,EAAG,GAAIsC,GACxCsmO,EAAK4zP,EAAKC,eAAe,CAACp1Z,EAAE,GAAIA,EAAE,IAAK/kE,GACvCumO,EAAK2zP,EAAKC,eAAe,CAACp1Z,EAAE,GAAIA,EAAE,IAAK/kE,GAC3C,MAAO,CAACrV,KAAKE,IAAIu7O,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,IAAK57O,KAAKE,IAAIu7O,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,IAAK57O,KAAKC,IAAIw7O,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,IAAK57O,KAAKC,IAAIw7O,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,OAE5J,CACDr0O,IAAK,mBACL5I,MAAO,SAA0B0W,GAC/B,IAAItM,EAAIsM,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAC/B,MAAO,CAACA,EAAE,GAAKtM,GAAIsM,EAAE,GAAKtM,GAAIsM,EAAE,GAAKtM,EAAGsM,EAAE,GAAKtM,GAAIsM,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMtM,GAAIsM,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAAMtM,KAElH,CACDxB,IAAK,mBACL5I,MAAO,SAA0B0W,EAAGhS,GAClC,MAAO,CAACgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,GAAIgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,GAAIgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,GAAKgS,EAAE,GAAKhS,EAAE,MAEhI,CACDkE,IAAK,gCACL5I,MAAO,SAAuC0W,GAC5C,IAAIy1e,EAAY,CAACz1e,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IACjCzM,EAAIyM,EAAE,GAAKy1e,EAAU,GAAKz1e,EAAE,GAAKy1e,EAAU,GAC3Cjif,EAAIwM,EAAE,GAAKy1e,EAAU,GAAKz1e,EAAE,GAAKy1e,EAAU,GAC3Chif,EAAIuM,EAAE,GAAKy1e,EAAU,GAAKz1e,EAAE,GAAKy1e,EAAU,GAC3C/hf,EAAIsM,EAAE,GAAKy1e,EAAU,GAAKz1e,EAAE,GAAKy1e,EAAU,GAC3Czke,GAASzd,EAAIG,GAAK,EAClBkkP,EAASjtP,KAAK8oK,KAAK9oK,KAAKy1O,IAAI7sO,EAAIG,EAAG,GAAK,GAAKH,EAAIG,EAAID,EAAID,IAAM,EAC/Dkif,EAAK1ke,EAAQ4mO,GAAU,EACvB+9P,EAAK3ke,EAAQ4mO,GAAU,EAC3B,MAAO,CAACjtP,KAAK8oK,KAAKiiV,GAAK/qf,KAAK8oK,KAAKkiV,MAElC,CACDzjf,IAAK,gBACL5I,MAAO,SAAuBi6J,GAC5B,IAAIx+E,EAAIw+E,EAAK7lJ,MAAM,GAYnB,OAVI6lJ,EAAK,GAAKA,EAAK,KACjBx+E,EAAE,GAAKw+E,EAAK,GACZx+E,EAAE,GAAKw+E,EAAK,IAGVA,EAAK,GAAKA,EAAK,KACjBx+E,EAAE,GAAKw+E,EAAK,GACZx+E,EAAE,GAAKw+E,EAAK,IAGPx+E,IAER,CACD7yE,IAAK,YACL5I,MAAO,SAAmBw1V,EAAOC,GAC/B,SAASsqB,EAAQ91W,EAAGC,GAClB,OAAOD,EAAIC,EAGb,IAAIoif,EAAW,CAAC92J,EAAM,GAAIA,EAAM,GAAIC,EAAM,GAAIA,EAAM,IAAI1kV,KAAKgvW,GACzDwsI,EAAW,CAAC/2J,EAAM,GAAIA,EAAM,GAAIC,EAAM,GAAIA,EAAM,IAAI1kV,KAAKgvW,GACzD7nW,EAAS,GAIb,OAHAs9U,EAAQo7I,EAAK4b,cAAch3J,GAC3BC,EAAQm7I,EAAK4b,cAAc/2J,GAEvB62J,EAAS,KAAO92J,EAAM,IAAM82J,EAAS,KAAO72J,EAAM,IAAM62J,EAAS,KAAO72J,EAAM,IAAM62J,EAAS,KAAO92J,EAAM,IAC5Gt9U,EAAO,GAAKo0e,EAAS,GACrBp0e,EAAO,GAAKo0e,EAAS,GAKnBC,EAAS,KAAO/2J,EAAM,IAAM+2J,EAAS,KAAO92J,EAAM,IAAM82J,EAAS,KAAO92J,EAAM,IAAM82J,EAAS,KAAO/2J,EAAM,IAC5Gt9U,EAAO,GAAKq0e,EAAS,GACrBr0e,EAAO,GAAKq0e,EAAS,GAKhBr0e,GAHE,MAPA,OAYV,CACDtP,IAAK,oBACL5I,MAAO,SAA2Bysf,EAAIC,EAAIlwO,EAAIC,EAAIC,EAAIC,EAAIgwO,EAAIC,GAK5D,IAJA,IAEI3if,EAAGC,EAAGC,EAAGkmB,EAAGg+c,EAAIC,EAAIue,EAAMC,EAF1BC,EAAU,GACVz4B,EAAS,CAAC,GAAI,IAGThtd,EAAI,EAAGA,EAAI,IAAKA,EAWvB,GAVU,IAANA,GACF4C,EAAI,EAAIuif,EAAK,GAAKjwO,EAAK,EAAIE,EAC3BzyQ,GAAK,EAAIwif,EAAK,EAAIjwO,EAAK,EAAIE,EAAK,EAAIiwO,EACpCxif,EAAI,EAAIqyQ,EAAK,EAAIiwO,IAEjBvif,EAAI,EAAIwif,EAAK,GAAKjwO,EAAK,EAAIE,EAC3B1yQ,GAAK,EAAIyif,EAAK,EAAIjwO,EAAK,EAAIE,EAAK,EAAIiwO,EACpCzif,EAAI,EAAIsyQ,EAAK,EAAIiwO,GAGfrrf,KAAKijB,IAAIra,GAAK,MAAlB,CACE,GAAI5I,KAAKijB,IAAIpa,GAAK,MAChB,SAKE,GAFJmmB,GAAKlmB,EAAID,IAEImmB,EAAI,GACf08d,EAAQr8e,KAAK2f,QAMjBw8d,EAAO3if,EAAIA,EAAI,EAAIC,EAAIF,EACvB6if,EAAWzrf,KAAK8oK,KAAK0iV,GAEjBA,EAAO,IAMP,GAFJxe,IAAOnke,EAAI4if,IAAa,EAAI7if,KAEdoke,EAAK,GACjB0e,EAAQr8e,KAAK29d,GAKX,GAFJC,IAAOpke,EAAI4if,IAAa,EAAI7if,KAEdqke,EAAK,GACjBye,EAAQr8e,KAAK49d,IAQjB,IAJA,IACI0e,EADAlxa,EAAIixa,EAAQ5mf,OAEZ8mf,EAAOnxa,EAEJA,KAELkxa,EAAK,GADL38d,EAAI08d,EAAQjxa,IAEZw4Y,EAAO,GAAGx4Y,GAAKkxa,EAAKA,EAAKA,EAAKP,EAAK,EAAIO,EAAKA,EAAK38d,EAAImsP,EAAK,EAAIwwO,EAAK38d,EAAIA,EAAIqsP,EAAKrsP,EAAIA,EAAIA,EAAIs8d,EAC5Fr4B,EAAO,GAAGx4Y,GAAKkxa,EAAKA,EAAKA,EAAKN,EAAK,EAAIM,EAAKA,EAAK38d,EAAIosP,EAAK,EAAIuwO,EAAK38d,EAAIA,EAAIssP,EAAKtsP,EAAIA,EAAIA,EAAIu8d,EAQ9F,OALAt4B,EAAO,GAAG24B,GAAQR,EAClBn4B,EAAO,GAAG24B,GAAQP,EAClBp4B,EAAO,GAAG24B,EAAO,GAAKN,EACtBr4B,EAAO,GAAG24B,EAAO,GAAKL,EACtBt4B,EAAO,GAAGnud,OAASmud,EAAO,GAAGnud,OAAS8mf,EAAO,EACtC,CAAC5rf,KAAKE,IAAIgL,MAAMlL,KAAM4iG,EAAmBqwX,EAAO,KAAMjzd,KAAKE,IAAIgL,MAAMlL,KAAM4iG,EAAmBqwX,EAAO,KAAMjzd,KAAKC,IAAIiL,MAAMlL,KAAM4iG,EAAmBqwX,EAAO,KAAMjzd,KAAKC,IAAIiL,MAAMlL,KAAM4iG,EAAmBqwX,EAAO,UA/8BzLp3W,EAkyBd,OAlyByDF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAm9B3KyzX,EAtLe,GAyLxBnxe,EAAQmxe,KAAOA,EACf,IAAIoL,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,IAAO,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,IAAO,EAAG,MAoD/qB,SAAS5B,EAAmBttd,GAC1B,OAAOq0I,mBAAmB7Z,OAAOx6H,MA8F5B,SAACk9c,EAAyBiI,EAA0BhI,GAE3D,aAGA,IAAIijB,EAAWjjB,EAAoB,GAET,qBAAfvpJ,YAA+BA,WAAWysK,6BACzB,qBAAfzsK,YAA8BA,WAAWr/U,OAASA,OAC3Dq/U,WAAaupJ,EAAoB,IAGnCvpJ,WAAWysK,4BAA6B,GAGlCzsK,WAAWzoI,MAASi1S,EAASE,WAIjC1sK,WAAWzoI,KAAO,SAAUloB,GAC1B,OAAO3W,OAAO9lK,KAAKy8K,EAAO,UAAUxqL,SAAS,aAK3Cm7U,WAAW/oI,MAASu1S,EAASE,WAIjC1sK,WAAW/oI,KAAO,SAAU5uF,GAC1B,OAAOqwD,OAAO9lK,KAAKy1G,EAAO,UAAUxjH,SAAS,aAK3Cm7U,WAAW2sK,WAAcH,EAASE,WAItC1sK,WAAW2sK,UAAYpjB,EAAoB,KAIvCvne,OAAO4/Z,aAIX2nE,EAAoB,IAIhBvpJ,WAAWn9R,QAAQ+pc,aAIvB5sK,WAAWn9R,QAAU0mb,EAAoB,MAIrCvpJ,WAAW6sK,gBAAmBL,EAASE,WAI3C1sK,WAAW6sK,eAAkBtjB,EAAoB,KAAKsjB,kBAMnD,SAACvjB,EAAyBvqe,GAEjC,aAQA,SAASo/C,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GALnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ2tf,cAAW,EAInB,IAAIA,EAAiF,YAAlD,qBAAZ56d,QAA0B,YAAcqsB,EAAQrsB,WAA0BA,QAAU,KAAO,qBAAuBA,QAAQg7d,SAASpoV,MAAQ5yI,QAAQg7d,SAASC,UAAYj7d,QAAQhuB,MAAyB,YAAjBguB,QAAQhuB,MACvN/E,EAAQ2tf,SAAWA,GAIZ,SAAC5tf,EAAQyye,EAA0BhI,GAE1CA,EAAoB,GACpBzqe,EAAOC,QAAUwqe,EAAoB,KAI9B,SAACD,EAAyBiI,EAA0BhI,GAEnDA,EAAoB,EAE5B5qU,CAAE,CAAEmU,QAAQ,GAAQ,CAAEktK,WADTupJ,EAAoB,OAK1B,SAACzqe,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B74c,EAA4B64c,EAAoB,IAAIjvZ,EACpD0ya,EAA8BzjB,EAAoB,IAClD0jB,EAAW1jB,EAAoB,IAC/B2jB,EAAY3jB,EAAoB,IAChC4jB,EAA4B5jB,EAAoB,IAChD6jB,EAAW7jB,EAAoB,IACnCzqe,EAAOC,QAAU,SAAU6wC,EAAS/e,GACnC,IAGYD,EAAQ1oB,EAAKmlf,EAAgBC,EAAgB/wY,EAHrDgxY,EAAS39c,EAAQhf,OACjB48d,EAAS59c,EAAQkjI,OACjB26U,EAAS79c,EAAQ89c,KASrB,GANC98d,EADG48d,EACM16U,EACC26U,EACD36U,EAAOy6U,IAAWL,EAAUK,EAAQ,KAEnCz6U,EAAOy6U,IAAW,IAAIxrf,UAGhC,IAAKmG,KAAO2oB,EAAQ,CAQnB,GAPAy8d,EAAiBz8d,EAAO3oB,GAGvBmlf,EAFGz9c,EAAQ+9c,aACXpxY,EAAa7rF,EAAyBE,EAAQ1oB,KACfq0G,EAAWj9G,MAEzBsxB,EAAO1oB,IAChBklf,EAASI,EAAStlf,EAAMqlf,GAAUE,EAAS,IAAM,KAAOvlf,EAAK0nC,EAAQg+c,cAC5Cluf,IAAnB2tf,EAA8B,CAC5C,UAAWC,UAAyBD,EACnC,SACDF,EAA0BG,EAAgBD,IAEvCz9c,EAAQ68b,MAAQ4gB,GAAkBA,EAAe5gB,OACpDugB,EAA4BM,EAAgB,QAAQ,GAErDL,EAASr8d,EAAQ1oB,EAAKolf,EAAgB19c,MAMlC,SAAC9wC,GAER,IAAIwpQ,EAAQ,SAAUjjG,GACrB,OAAOA,GAAMA,EAAG1kK,MAAQA,MAAQ0kK,GAEjCvmK,EAAOC,QAAUupQ,EAA2B,iBAAd03E,YAA0BA,aAAe13E,EAAuB,iBAAVh2O,QAAsBA,SAAWg2O,EAAqB,iBAARt1F,MAAoBA,OAASs1F,EAAuB,iBAAVx1F,QAAsBA,SAAY,WAC7M,OAAOlvK,KADsM,IAEtMqvK,SAAS,cAATA,IAID,SAACq2T,EAAyBvqe,EAASwqe,GAE1C,IAAIskB,EAActkB,EAAoB,IAClC3ke,EAAO2ke,EAAoB,IAC3BukB,EAA6BvkB,EAAoB,IACjDwkB,EAA2BxkB,EAAoB,IAC/CykB,EAAkBzkB,EAAoB,IACtC0kB,EAAgB1kB,EAAoB,IACpC/mR,EAAS+mR,EAAoB,IAC7B2kB,EAAiB3kB,EAAoB,IACrC4kB,EAA4Bnsf,OAAO0uB,yBACvC3xB,EAAQu7E,EAAIuza,EAAcM,EAA4B,SAAkC5pP,EAAG1qL,GAG1F,GAFA0qL,EAAIypP,EAAgBzpP,GACpB1qL,EAAIo0a,EAAcp0a,GACdq0a,EACH,IACC,OAAOC,EAA0B5pP,EAAG1qL,GACnC,MAAO9nE,IAEV,GAAIywM,EAAO+hD,EAAG1qL,GACb,OAAOk0a,GAA0Bnpf,EAAKkpf,EAA2Bxza,EAAGiqL,EAAG1qL,GAAI0qL,EAAE1qL,MAKxE,SAAC/6E,EAAQyye,EAA0BhI,GAE1C,IAAI6kB,EAAQ7kB,EAAoB,IAChCzqe,EAAOC,SAAWqvf,GAAM,WACvB,OAIS,GAJFpsf,OAAOyJ,eAAe,GAAI,EAAG,CACnC9D,IAAK,WACJ,OAAO,KAEN,OAKG,SAAC7I,GAERA,EAAOC,QAAU,SAAU4wJ,GAC1B,IACC,QAASA,IACR,MAAO59I,GACR,OAAO,KAMF,SAACjT,GAER,IAAI8F,EAAOquK,SAASlxK,UAAU6C,KAC9B9F,EAAOC,QAAU6F,EAAK8gB,KAAO9gB,EAAK8gB,KAAK9gB,GAAQ,WAC9C,OAAOA,EAAKiH,MAAMjH,EAAM0C,aAKlB,SAACgie,EAAyBvqe,GAEjC,aAEA,IAAIsvf,EAAwB,GAAGtjf,qBAC3B2lB,EAA2B1uB,OAAO0uB,yBAClC49d,EAAc59d,IAA6B29d,EAAsBzpf,KAAK,CAAE,EAAG,GAAK,GACpF7F,EAAQu7E,EAAIg0a,EAAc,SAA8BrwV,GACvD,IAAI1hD,EAAa7rF,EAAyB9sB,KAAMq6J,GAChD,QAAS1hD,GAAcA,EAAW7wG,YAC/B2if,GAIG,SAACvvf,GAERA,EAAOC,QAAU,SAAUwZ,EAAQjZ,GAClC,MAAO,CACNoM,aAAuB,EAAT6M,GACd5M,eAAyB,EAAT4M,GAChB3M,WAAqB,EAAT2M,GACZjZ,MAAOA,KAMF,SAACR,EAAQyye,EAA0BhI,GAE1C,IAAIglB,EAAgBhlB,EAAoB,IACpCilB,EAAyBjlB,EAAoB,IACjDzqe,EAAOC,QAAU,SAAUsmK,GAC1B,OAAOkpV,EAAcC,EAAuBnpV,MAKtC,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BklB,EAAcllB,EAAoB,IAClC6kB,EAAQ7kB,EAAoB,IAC5BmlB,EAAUnlB,EAAoB,IAC9Bvne,EAAS8wK,EAAO9wK,OAChB2gD,EAAQ8rc,EAAY,GAAG9rc,OAC3B7jD,EAAOC,QAAUqvf,GAAM,WACtB,OAAQpsf,EAAO,KAAK+I,qBAAqB,MACrC,SAAUs6J,GACd,MAAsB,UAAfqpV,EAAQrpV,GAAkB1iH,EAAM0iH,EAAI,IAAMrjK,EAAOqjK,IACrDrjK,GAIG,SAAClD,GAER,IAAI6vf,EAAoB17U,SAASlxK,UAC7B2jB,EAAOipe,EAAkBjpe,KACzB9gB,EAAO+pf,EAAkB/pf,KACzBgqf,EAAWlpe,GAAQA,EAAKA,KAAK9gB,GACjC9F,EAAOC,QAAU2mB,EAAO,SAAUjf,GACjC,OAAOA,GAAMmof,EAAShqf,EAAM6B,IACzB,SAAUA,GACb,OAAOA,GAAM,WACZ,OAAO7B,EAAKiH,MAAMpF,EAAIa,cAMjB,SAACxI,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC1ke,EAAW4pf,EAAY,GAAG5pf,UAC1Bgqf,EAAcJ,EAAY,GAAG/6e,OACjC5U,EAAOC,QAAU,SAAUsmK,GAC1B,OAAOwpV,EAAYhqf,EAASwgK,GAAK,GAAI,KAK/B,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IACItje,EADSsje,EAAoB,IACVtje,UACvBnH,EAAOC,QAAU,SAAUsmK,GAC1B,QAAU3lK,GAAN2lK,EACH,MAAMp/J,EAAU,wBAA0Bo/J,GAC3C,OAAOA,IAKD,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAI9gJ,EAAc8gJ,EAAoB,IAClChoT,EAAWgoT,EAAoB,IACnCzqe,EAAOC,QAAU,SAAUqe,GAC1B,IAAIlV,EAAMugV,EAAYrrU,EAAU,UAChC,OAAOmkK,EAASr5K,GAAOA,EAAMA,EAAM,KAK7B,SAACpJ,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B3ke,EAAO2ke,EAAoB,IAC3BhuT,EAAWguT,EAAoB,IAC/BhoT,EAAWgoT,EAAoB,IAC/BulB,EAAYvlB,EAAoB,IAChCwlB,EAAsBxlB,EAAoB,IAC1CylB,EAAkBzlB,EAAoB,IACtCtje,EAAY6sK,EAAO7sK,UACnBgpf,EAAeD,EAAgB,eACnClwf,EAAOC,QAAU,SAAUspH,EAAO6mY,GACjC,IAAK3zU,EAASlzD,IAAUk5D,EAASl5D,GAChC,OAAOA,EACR,IACI7wG,EADA23e,EAAeL,EAAUzmY,EAAO4mY,GAEpC,GAAIE,EAAc,CAIjB,QAHazvf,IAATwvf,IACHA,EAAO,WACR13e,EAAS5S,EAAKuqf,EAAc9mY,EAAO6mY,IAC9B3zU,EAAS/jK,IAAW+pK,EAAS/pK,GACjC,OAAOA,EACR,MAAMvR,EAAU,2CAIjB,YAFavG,IAATwvf,IACHA,EAAO,UACDH,EAAoB1mY,EAAO6mY,KAK5B,SAACpwf,EAAQyye,EAA0BhI,GAE1C,IAAI6lB,EAAa7lB,EAAoB,IACrCzqe,EAAOC,QAAU,SAAUsmK,GAC1B,MAAoB,iBAANA,EAAwB,OAAPA,EAAc+pV,EAAW/pV,KAKlD,SAACvmK,GAERA,EAAOC,QAAU,SAAUqe,GAC1B,MAA0B,mBAAZA,IAKR,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B8lB,EAAa9lB,EAAoB,IACjC6lB,EAAa7lB,EAAoB,IACjC+lB,EAAgB/lB,EAAoB,IACpCgmB,EAAoBhmB,EAAoB,IACxCvne,EAAS8wK,EAAO9wK,OACpBlD,EAAOC,QAAUwwf,EAAoB,SAAUlqV,GAC9C,MAAoB,iBAANA,GACX,SAAUA,GACb,IAAIqsU,EAAU2d,EAAW,UACzB,OAAOD,EAAW1d,IAAY4d,EAAc5d,EAAQ3ve,UAAWC,EAAOqjK,MAKhE,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjCimB,EAAY,SAAUpye,GACzB,OAAOgye,EAAWhye,GAAYA,OAAW1d,GAE1CZ,EAAOC,QAAU,SAAUspJ,EAAWp9C,GACrC,OAAO3jG,UAAU7B,OAAS,EAAI+pf,EAAU18U,EAAOzqB,IAAcyqB,EAAOzqB,IAAcyqB,EAAOzqB,GAAWp9C,KAK9F,SAACnsG,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IACtCzqe,EAAOC,QAAU0vf,EAAY,GAAGa,gBAIzB,SAACxwf,EAAQyye,EAA0BhI,GAE1C,IAAIkmB,EAAgBlmB,EAAoB,IACxCzqe,EAAOC,QAAU0wf,IAAkBnsf,OAAOmpe,MAAkC,iBAAnBnpe,OAAOC,UAIzD,SAACzE,EAAQyye,EAA0BhI,GAE1C,IAAImmB,EAAanmB,EAAoB,IACjC6kB,EAAQ7kB,EAAoB,IAChCzqe,EAAOC,UAAYiD,OAAOkgB,wBAA0Bkse,GAAM,WACzD,IAAIruU,EAASz8K,SACb,OAAQmP,OAAOstK,MAAa/9K,OAAO+9K,aAAmBz8K,UAAYA,OAAOmpe,MAAQijB,GAAcA,EAAa,OAKtG,SAAC5wf,EAAQyye,EAA0BhI,GAE1C,IAMIp3b,EAAO7kB,EANPwlJ,EAASy2T,EAAoB,IAC7Bx0R,EAAYw0R,EAAoB,IAChCz3c,EAAUghJ,EAAOhhJ,QACjB69d,EAAO78U,EAAO68U,KACd7C,EAAWh7d,GAAWA,EAAQg7d,UAAY6C,GAAQA,EAAKrie,QACvDsie,EAAK9C,GAAYA,EAAS8C,GAE1BA,IAEHtie,GADA6kB,EAAQy9c,EAAGjtc,MAAM,MACD,GAAK,GAAKxQ,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAE5D7kB,GAAWynL,MACf5iK,EAAQ4iK,EAAU5iK,MAAM,iBACVA,EAAM,IAAM,MACzBA,EAAQ4iK,EAAU5iK,MAAM,oBAEvB7kB,GAAW6kB,EAAM,IAGpBrzC,EAAOC,QAAUuuB,GAIV,SAACxuB,EAAQyye,EAA0BhI,GAE1C,IAAI8lB,EAAa9lB,EAAoB,IACrCzqe,EAAOC,QAAUswf,EAAW,YAAa,cAAgB,IAIlD,SAACvwf,EAAQyye,EAA0BhI,GAE1C,IAAIsmB,EAAYtmB,EAAoB,IACpCzqe,EAAOC,QAAU,SAAUk/J,EAAGpkF,GAC7B,IAAI/rD,EAAOmwI,EAAEpkF,GACb,OAAe,MAAR/rD,OAAepuB,EAAYmwf,EAAU/he,KAKtC,SAAChvB,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjCumB,EAAcvmB,EAAoB,IAClCtje,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUqe,GAC1B,GAAIgye,EAAWhye,GACd,OAAOA,EACR,MAAMnX,EAAU6pf,EAAY1ye,GAAY,wBAKlC,SAACte,EAAQyye,EAA0BhI,GAE1C,IACI92d,EADS82d,EAAoB,IACb92d,OACpB3T,EAAOC,QAAU,SAAUqe,GAC1B,IACC,OAAO3K,EAAO2K,GACb,MAAOrL,GACR,MAAO,YAMF,SAACjT,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B3ke,EAAO2ke,EAAoB,IAC3B6lB,EAAa7lB,EAAoB,IACjChuT,EAAWguT,EAAoB,IAC/Btje,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUspH,EAAO6mY,GACjC,IAAIzof,EAAIoT,EACR,GAAa,WAATq1e,GAAqBE,EAAW3of,EAAK4hH,EAAMxjH,YAAc02K,EAAS1hK,EAAMjV,EAAK6B,EAAI4hH,IACpF,OAAOxuG,EACR,GAAIu1e,EAAW3of,EAAK4hH,EAAMh/G,WAAakyK,EAAS1hK,EAAMjV,EAAK6B,EAAI4hH,IAC9D,OAAOxuG,EACR,GAAa,WAATq1e,GAAqBE,EAAW3of,EAAK4hH,EAAMxjH,YAAc02K,EAAS1hK,EAAMjV,EAAK6B,EAAI4hH,IACpF,OAAOxuG,EACR,MAAM5T,EAAU,6CAKV,SAACnH,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B/qM,EAAS+qM,EAAoB,IAC7B/mR,EAAS+mR,EAAoB,IAC7B35a,EAAM25a,EAAoB,IAC1BkmB,EAAgBlmB,EAAoB,IACpCgmB,EAAoBhmB,EAAoB,IACxCwmB,EAAwBvxN,EAAO,OAC/Bl7R,EAASwvK,EAAOxvK,OAChB0sf,EAAY1sf,GAAUA,EAAM,IAC5B2sf,EAAwBV,EAAoBjsf,EAASA,GAAUA,EAAO4sf,eAAiBtgc,EAC3F9wD,EAAOC,QAAU,SAAUqT,GAC1B,IAAKowM,EAAOutS,EAAuB39e,KAAWq9e,GAAuD,iBAA/BM,EAAsB39e,GAAoB,CAC/G,IAAImyH,EAAc,UAAYnyH,EAC1Bq9e,GAAiBjtS,EAAOl/M,EAAQ8O,GACnC29e,EAAsB39e,GAAQ9O,EAAO8O,GAErC29e,EAAsB39e,GADZm9e,GAAqBS,EACDA,EAAUzrX,GAEV0rX,EAAsB1rX,GAGtD,OAAOwrX,EAAsB39e,KAKvB,SAACtT,EAAQyye,EAA0BhI,GAE1C,IAAI4mB,EAAU5mB,EAAoB,IAC9Btgc,EAAQsgc,EAAoB,KAC/Bzqe,EAAOC,QAAU,SAAUmJ,EAAK5I,GAChC,OAAO2pC,EAAM/gC,KAAS+gC,EAAM/gC,QAAiBxI,IAAVJ,EAAsBA,EAAQ,MAC/D,WAAY,IAAI0Q,KAAK,CACvBsd,QAAS,SACTsxG,KAAMuxX,EAAU,OAAS,SACzBC,UAAW,6CAKL,SAACtxf,GAERA,EAAOC,SAAU,GAIV,SAACD,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B2jB,EAAY3jB,EAAoB,IAChC8mB,EAAS,qBACTpnd,EAAQ6pI,EAAOu9U,IAAWnD,EAAUmD,EAAQ,IAChDvxf,EAAOC,QAAUkqC,GAIV,SAACnqC,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B99d,EAAiBzJ,OAAOyJ,eAC5B3M,EAAOC,QAAU,SAAUmJ,EAAK5I,GAC/B,IACCmM,EAAeqnK,EAAQ5qK,EAAK,CAC3B5I,MAAOA,EACPqM,cAAc,EACdC,UAAU,IAEV,MAAOmG,GACR+gK,EAAO5qK,GAAO5I,EAEf,OAAOA,IAKD,SAACR,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC3kd,EAAW2kd,EAAoB,IAC/Bpke,EAAiBspf,EAAY,GAAGtpf,gBACpCrG,EAAOC,QAAUiD,OAAOwgN,QAAU,SAAgBn9C,EAAIn9J,GACrD,OAAO/C,EAAeyf,EAASygJ,GAAKn9J,KAK9B,SAACpJ,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BilB,EAAyBjlB,EAAoB,IAC7Cvne,EAAS8wK,EAAO9wK,OACpBlD,EAAOC,QAAU,SAAUqe,GAC1B,OAAOpb,EAAOwsf,EAAuBpxe,MAK/B,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC1kc,EAAK,EACLyrd,EAAU3vf,KAAKy1E,SACfvxE,EAAW4pf,EAAY,GAAI5pf,UAC/B/F,EAAOC,QAAU,SAAUmJ,GAC1B,MAAO,gBAAqBxI,IAARwI,EAAoB,GAAKA,GAAO,KAAOrD,IAAWggC,EAAKyrd,EAAS,MAK9E,SAACxxf,EAAQyye,EAA0BhI,GAE1C,IAAIskB,EAActkB,EAAoB,IAClC6kB,EAAQ7kB,EAAoB,IAC5B1/b,EAAgB0/b,EAAoB,IACxCzqe,EAAOC,SAAW8uf,IAAgBO,GAAM,WACvC,OAIQ,GAJDpsf,OAAOyJ,eAAeo+B,EAAc,OAAQ,IAAK,CACvDliC,IAAK,WACJ,OAAO,KAEN4B,MAKG,SAACzK,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BhuT,EAAWguT,EAAoB,IAC/B3/b,EAAWkpI,EAAOlpI,SAClB2md,EAASh1U,EAAS3xI,IAAa2xI,EAAS3xI,EAASC,eACrD/qC,EAAOC,QAAU,SAAUsmK,GAC1B,OAAOkrV,EAAS3md,EAASC,cAAcw7H,GAAM,KAKvC,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAIskB,EAActkB,EAAoB,IAClCinB,EAAuBjnB,EAAoB,IAC3CwkB,EAA2BxkB,EAAoB,IACnDzqe,EAAOC,QAAU8uf,EAAc,SAAU9lf,EAAQG,EAAK5I,GACrD,OAAOkxf,EAAqBl2a,EAAEvyE,EAAQG,EAAK6lf,EAAyB,EAAGzuf,KACpE,SAAUyI,EAAQG,EAAK5I,GAE1B,OADAyI,EAAOG,GAAO5I,EACPyI,IAKD,SAACuhe,EAAyBvqe,EAASwqe,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BskB,EAActkB,EAAoB,IAClC2kB,EAAiB3kB,EAAoB,IACrCknB,EAAWlnB,EAAoB,IAC/B0kB,EAAgB1kB,EAAoB,IACpCtje,EAAY6sK,EAAO7sK,UACnByqf,EAAkB1uf,OAAOyJ,eAC7B1M,EAAQu7E,EAAIuza,EAAc6C,EAAkB,SAAwBnsP,EAAG1qL,EAAG82a,GAIzE,GAHAF,EAASlsP,GACT1qL,EAAIo0a,EAAcp0a,GAClB42a,EAASE,GACLzC,EACH,IACC,OAAOwC,EAAgBnsP,EAAG1qL,EAAG82a,GAC5B,MAAO5+e,IAEV,GAAI,QAAS4+e,GAAc,QAASA,EACnC,MAAM1qf,EAAU,2BAGjB,MAFI,UAAW0qf,IACdpsP,EAAE1qL,GAAK82a,EAAWrxf,OACZilQ,IAKD,SAACzlQ,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BhuT,EAAWguT,EAAoB,IAC/B92d,EAASqgK,EAAOrgK,OAChBxM,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUqe,GAC1B,GAAIm+J,EAASn+J,GACZ,OAAOA,EACR,MAAMnX,EAAUwM,EAAO2K,GAAY,uBAK7B,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjC/mR,EAAS+mR,EAAoB,IAC7ByjB,EAA8BzjB,EAAoB,IAClD2jB,EAAY3jB,EAAoB,IAChCqnB,EAAgBrnB,EAAoB,IACpCsnB,EAAsBtnB,EAAoB,IAC1CunB,EAA8BvnB,EAAoB,IAAIwnB,aACtDC,EAAmBH,EAAoBlpf,IACvCspf,EAAuBJ,EAAoBK,QAC3CC,EAAW1+e,OAAOA,QAAQkwC,MAAM,WACnC7jD,EAAOC,QAAU,SAAUwlQ,EAAGr8P,EAAK5I,EAAOswC,GAC1C,IAIIhF,EAJAwmd,IAASxhd,KAAYA,EAAQwhd,OAC7BC,IAASzhd,KAAYA,EAAQlkC,WAC7Biif,IAAc/9c,KAAYA,EAAQ+9c,YAClCv7e,EAAOw9B,QAA4BlwC,IAAjBkwC,EAAQx9B,KAAqBw9B,EAAQx9B,KAAOlK,EAE9Dknf,EAAW9vf,KACmB,YAA7BmT,OAAOL,GAAMsB,MAAM,EAAG,KACzBtB,EAAO,IAAMK,OAAOL,GAAMoqE,QAAQ,qBAAsB,MAAQ,OAE5DgmI,EAAOljN,EAAO,SAAWwxf,GAA8Bxxf,EAAM8S,OAASA,IAC1E46e,EAA4B1tf,EAAO,OAAQ8S,IAE5Cw4B,EAAQqmd,EAAqB3xf,IAClBuxB,SACV+Z,EAAM/Z,OAASsge,EAAS9re,KAAoB,iBAARjT,EAAmBA,EAAO,MAG5DmyP,IAAMzxF,GAMEs+U,GAEAzD,GAAeppP,EAAEr8P,KAC5Bmpf,GAAS,UAFF9sP,EAAEr8P,GAINmpf,EACH9sP,EAAEr8P,GAAO5I,EAET0tf,EAA4BzoP,EAAGr8P,EAAK5I,IAbhC+xf,EACH9sP,EAAEr8P,GAAO5I,EAET4tf,EAAUhlf,EAAK5I,KAWf2zK,SAASlxK,UAAW,YAAY,WAClC,OAAOqtf,EAAWxrf,OAASotf,EAAiBptf,MAAMitB,QAAU+/d,EAAchtf,UAKpE,SAAC9E,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC6lB,EAAa7lB,EAAoB,IACjCtgc,EAAQsgc,EAAoB,IAC5B+nB,EAAmB7C,EAAYx7U,SAASpuK,UACvCuqf,EAAWnmd,EAAM2nd,iBACrB3nd,EAAM2nd,cAAgB,SAAUvrV,GAC/B,OAAOisV,EAAiBjsV,KAG1BvmK,EAAOC,QAAUkqC,EAAM2nd,eAIhB,SAAC9xf,EAAQyye,EAA0BhI,GAE1C,IAYIj+d,EAAK3D,EAAKE,EAZV0pf,EAAkBhoB,EAAoB,IACtCz2T,EAASy2T,EAAoB,IAC7BklB,EAAcllB,EAAoB,IAClChuT,EAAWguT,EAAoB,IAC/ByjB,EAA8BzjB,EAAoB,IAClD/mR,EAAS+mR,EAAoB,IAC7B/qM,EAAS+qM,EAAoB,IAC7BioB,EAAYjoB,EAAoB,IAChCkoB,EAAaloB,EAAoB,IACjCmoB,EAA6B,6BAC7Bzrf,EAAY6sK,EAAO7sK,UACnBgG,EAAU6mK,EAAO7mK,QAcrB,GAAIslf,GAAmB/yN,EAAO5zP,MAAO,CACpC,IAAI3B,EAAQu1P,EAAO5zP,QAAU4zP,EAAO5zP,MAAQ,IAAI3+B,GAC5C0lf,EAAQlD,EAAYxld,EAAMthC,KAC1Biqf,EAAQnD,EAAYxld,EAAMphC,KAC1Bgqf,EAAQpD,EAAYxld,EAAM39B,KAC9BA,EAAM,SAAU+5J,EAAIysV,GACnB,GAAIF,EAAM3od,EAAOo8H,GAChB,MAAM,IAAIp/J,EAAUyrf,GAGrB,OAFAI,EAASC,OAAS1sV,EAClBwsV,EAAM5od,EAAOo8H,EAAIysV,GACVA,GAERnqf,EAAM,SAAU09J,GACf,OAAOssV,EAAM1od,EAAOo8H,IAAO,IAE5Bx9J,EAAM,SAAUw9J,GACf,OAAOusV,EAAM3od,EAAOo8H,QAEf,CACN,IAAI2sV,EAAQR,EAAU,SACtBC,EAAWO,IAAS,EACpB1mf,EAAM,SAAU+5J,EAAIysV,GACnB,GAAItvS,EAAOn9C,EAAI2sV,GACd,MAAM,IAAI/rf,EAAUyrf,GAGrB,OAFAI,EAASC,OAAS1sV,EAClB2nV,EAA4B3nV,EAAI2sV,EAAOF,GAChCA,GAERnqf,EAAM,SAAU09J,GACf,OAAOm9C,EAAOn9C,EAAI2sV,GAAS3sV,EAAG2sV,GAAS,IAExCnqf,EAAM,SAAUw9J,GACf,OAAOm9C,EAAOn9C,EAAI2sV,IAGpBlzf,EAAOC,QAAU,CAChBuM,IAAKA,EACL3D,IAAKA,EACLE,IAAKA,EACLqpf,QAnDa,SAAU7rV,GACvB,OAAOx9J,EAAIw9J,GAAM19J,EAAI09J,GAAM/5J,EAAI+5J,EAAI,KAmDnC4sV,UAjDe,SAAUC,GACzB,OAAO,SAAU7sV,GAChB,IAAIz6H,EACJ,IAAK2wI,EAASlW,KAAQz6H,EAAQjjC,EAAI09J,IAAKvhK,OAASouf,EAC/C,MAAMjsf,EAAU,0BAA4Bisf,EAAO,aAEpD,OAAOtnd,MAgDF,SAAC9rC,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjCqnB,EAAgBrnB,EAAoB,IACpCt9d,EAAU6mK,EAAO7mK,QACrBnN,EAAOC,QAAUqwf,EAAWnjf,IAAY,cAAc0yC,KAAKiyc,EAAc3kf,KAIlE,SAACnN,EAAQyye,EAA0BhI,GAE1C,IAAI/qM,EAAS+qM,EAAoB,IAC7B35a,EAAM25a,EAAoB,IAC1B7je,EAAO84R,EAAO,QAClB1/R,EAAOC,QAAU,SAAUmJ,GAC1B,OAAOxC,EAAKwC,KAASxC,EAAKwC,GAAO0nD,EAAI1nD,MAK/B,SAACpJ,GAERA,EAAOC,QAAU,IAIV,SAACD,EAAQyye,EAA0BhI,GAE1C,IAAIskB,EAActkB,EAAoB,IAClC/mR,EAAS+mR,EAAoB,IAC7BolB,EAAoB17U,SAASlxK,UAC7Bowf,EAAgBtE,GAAe7rf,OAAO0uB,yBACtC6/d,EAAS/tS,EAAOmsS,EAAmB,QACnCyD,EAAS7B,GACF,cADY,aACrBn+e,KACE2+e,EAAeR,KAAY1C,GAAeA,GAAesE,EAAcxD,EAAmB,QAAQhjf,cACtG7M,EAAOC,QAAU,CAChBwxf,OAAQA,EACR6B,OAAQA,EACRrB,aAAcA,IAKR,SAACjyf,EAAQyye,EAA0BhI,GAE1C,IAAI/mR,EAAS+mR,EAAoB,IAC7Bj5c,EAAUi5c,EAAoB,IAC9B8oB,EAAiC9oB,EAAoB,IACrDinB,EAAuBjnB,EAAoB,IAC/Czqe,EAAOC,QAAU,SAAU6xB,EAAQC,GAIlC,IAHA,IAAInrB,EAAO4qB,EAAQO,GACfplB,EAAiB+kf,EAAqBl2a,EACtC5pD,EAA2B2he,EAA+B/3a,EACrD1zE,EAAI,EAAGA,EAAIlB,EAAKD,OAAQmB,IAAK,CACrC,IAAIsB,EAAMxC,EAAKkB,GACV47M,EAAO5xL,EAAQ1oB,IACnBuD,EAAemlB,EAAQ1oB,EAAKwoB,EAAyBG,EAAQ3oB,OAMzD,SAACpJ,EAAQyye,EAA0BhI,GAE1C,IAAI8lB,EAAa9lB,EAAoB,IACjCklB,EAAcllB,EAAoB,IAClC+oB,EAA4B/oB,EAAoB,IAChDgpB,EAA8BhpB,EAAoB,IAClDknB,EAAWlnB,EAAoB,IAC/Br6d,EAASu/e,EAAY,GAAGv/e,QAC5BpQ,EAAOC,QAAUswf,EAAW,UAAW,YAAc,SAAiBhqV,GACrE,IAAI3/J,EAAO4sf,EAA0Bh4a,EAAEm2a,EAASprV,IAC5CnjJ,EAAwBqwe,EAA4Bj4a,EACxD,OAAOp4D,EAAwBhT,EAAOxJ,EAAMwc,EAAsBmjJ,IAAO3/J,IAKnE,SAAC4je,EAAyBvqe,EAASwqe,GAE1C,IAAIipB,EAAqBjpB,EAAoB,IAEzCkoB,EADcloB,EAAoB,IACTr6d,OAAO,SAAU,aAC9CnQ,EAAQu7E,EAAIt4E,OAAOsvO,qBAAuB,SAA6BizB,GACtE,OAAOiuP,EAAmBjuP,EAAGktP,KAKvB,SAAC3yf,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC/mR,EAAS+mR,EAAoB,IAC7BykB,EAAkBzkB,EAAoB,IACtCnld,EAAWmld,EAAoB,IAAInld,QACnCqte,EAAaloB,EAAoB,IACjCv5d,EAAOy+e,EAAY,GAAGz+e,MAC1BlR,EAAOC,QAAU,SAAUgJ,EAAQi/O,GAClC,IAGI9+O,EAHAq8P,EAAIypP,EAAgBjmf,GACpBnB,EAAI,EACJ4Q,EAAS,GAEb,IAAKtP,KAAOq8P,GACV/hD,EAAOivS,EAAYvpf,IAAQs6M,EAAO+hD,EAAGr8P,IAAQ8H,EAAKwH,EAAQtP,GAC5D,KAAO8+O,EAAMvhP,OAASmB,GACjB47M,EAAO+hD,EAAGr8P,EAAM8+O,EAAMpgP,SACxBwd,EAAQ5M,EAAQtP,IAAQ8H,EAAKwH,EAAQtP,IAExC,OAAOsP,IAKD,SAAC1Y,EAAQyye,EAA0BhI,GAE1C,IAAIykB,EAAkBzkB,EAAoB,IACtCkpB,EAAkBlpB,EAAoB,IACtCmpB,EAAoBnpB,EAAoB,IACxCopB,EAAe,SAAUC,GAC5B,OAAO,SAAUC,EAAOj1N,EAAIpoH,GAC3B,IAGIl2K,EAHAilQ,EAAIypP,EAAgB6E,GACpBptf,EAASitf,EAAkBnuP,GAC3BxkQ,EAAQ0yf,EAAgBj9U,EAAW/vK,GAEvC,GAAImtf,GAAeh1N,GAAMA,GACxB,KAAOn4R,EAAS1F,GAEf,IADAT,EAAQilQ,EAAExkQ,OACGT,EACZ,OAAO,OAGT,KAAOmG,EAAS1F,EAAOA,IACtB,IAAK6yf,GAAe7yf,KAASwkQ,IAAMA,EAAExkQ,KAAW69R,EAC/C,OAAOg1N,GAAe7yf,GAAS,EAElC,OAAQ6yf,IAAgB,IAG1B9zf,EAAOC,QAAU,CAChBoO,SAAUwlf,GAAa,GACvBvue,QAASuue,GAAa,KAKhB,SAAC7zf,EAAQyye,EAA0BhI,GAE1C,IAAIupB,EAAsBvpB,EAAoB,IAC1C3oe,EAAMD,KAAKC,IACXC,EAAMF,KAAKE,IACf/B,EAAOC,QAAU,SAAUgB,EAAO0F,GACjC,IAAI4zM,EAAUy5S,EAAoB/yf,GAClC,OAAOs5M,EAAU,EAAIz4M,EAAIy4M,EAAU5zM,EAAQ,GAAK5E,EAAIw4M,EAAS5zM,KAKvD,SAAC3G,GAER,IAAIklB,EAAOrjB,KAAKqjB,KACZG,EAAQxjB,KAAKwjB,MACjBrlB,EAAOC,QAAU,SAAUqe,GAC1B,IAAIghK,GAAUhhK,EACd,OAAOghK,IAAWA,GAAqB,IAAXA,EAAe,GAAKA,EAAS,EAAIj6J,EAAQH,GAAMo6J,KAKrE,SAACt/K,EAAQyye,EAA0BhI,GAE1C,IAAI1yS,EAAW0yS,EAAoB,IACnCzqe,EAAOC,QAAU,SAAU2L,GAC1B,OAAOmsL,EAASnsL,EAAIjF,UAKd,SAAC3G,EAAQyye,EAA0BhI,GAE1C,IAAIupB,EAAsBvpB,EAAoB,IAC1C1oe,EAAMF,KAAKE,IACf/B,EAAOC,QAAU,SAAUqe,GAC1B,OAAOA,EAAW,EAAIvc,EAAIiyf,EAAoB11e,GAAW,kBAAoB,IAKvE,SAACte,GAERA,EAAOC,QAAU,CAChB,cACA,iBACA,gBACA,uBACA,iBACA,WACA,YAKM,SAACuqe,EAAyBvqe,GAEjCA,EAAQu7E,EAAIt4E,OAAOkgB,uBAIZ,SAACpjB,EAAQyye,EAA0BhI,GAE1C,IAAI6kB,EAAQ7kB,EAAoB,IAC5B6lB,EAAa7lB,EAAoB,IACjCt+Q,EAAc,kBACdmiS,EAAW,SAAU2F,EAAS//V,GACjC,IAAI1zJ,EAAQs/C,EAAKgvK,EAAUmlS,IAC3B,OAAOzzf,GAAS0zf,GAAkB1zf,GAAS2zf,IAAiB7D,EAAWp8V,GAAao7V,EAAMp7V,KAAeA,IAEtG46D,EAAYw/R,EAASx/R,UAAY,SAAUzjN,GAC9C,OAAOsI,OAAOtI,GAAQqyE,QAAQyuI,EAAa,KAAKjuK,eAE7C4B,EAAOwuc,EAASxuc,KAAO,GACvBq0c,EAAS7F,EAAS6F,OAAS,IAC3BD,EAAW5F,EAAS4F,SAAW,IACnCl0f,EAAOC,QAAUquf,GAIV,SAACtuf,EAAQC,EAASwqe,GAEzB,aACA,IAAI2pB,EAAgCC,EAIjBv0P,EAFnB,SAASzgN,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEhWk0P,EAMR,WAGT,SAASw0P,EAAU3rf,GACjB,IAAIuO,EAAI,IAAIq9e,EACR9pf,EAAIlE,MAAMuN,KAAKnL,GAEnB,IAAK8B,EAAE4H,OAAM,SAAUnH,GACrB,OAAQzE,OAAOy6C,MAAMh2C,MAErB,MAAM/D,UAAU,eAAkBwB,EAAQ,6BAG5C,GAAiB,KAAb8B,EAAE9D,OAAe,CACnB,IAAI6tf,EAAM/pf,EAAE,GACRgqf,EAAMhqf,EAAE,GACRiqf,EAAMjqf,EAAE,GACRkqf,EAAMlqf,EAAE,GACRmqf,EAAMnqf,EAAE,GACRoqf,EAAMpqf,EAAE,GACRqqf,EAAMrqf,EAAE,GACRsqf,EAAMtqf,EAAE,GACRuqf,EAAMvqf,EAAE,GACRwqf,EAAMxqf,EAAE,GACRyqf,EAAMzqf,EAAE,IACR0qf,EAAM1qf,EAAE,IACR2qf,EAAM3qf,EAAE,IACR4qf,EAAM5qf,EAAE,IACR6qf,EAAM7qf,EAAE,IACR8qf,EAAM9qf,EAAE,IACZyM,EAAEs9e,IAAMA,EACRt9e,EAAEzM,EAAI+pf,EACNt9e,EAAE09e,IAAMA,EACR19e,EAAEvM,EAAIiqf,EACN19e,EAAE89e,IAAMA,EACR99e,EAAEk+e,IAAMA,EACRl+e,EAAEhK,EAAIkof,EACNl+e,EAAEu9e,IAAMA,EACRv9e,EAAExM,EAAI+pf,EACNv9e,EAAE29e,IAAMA,EACR39e,EAAEtM,EAAIiqf,EACN39e,EAAE+9e,IAAMA,EACR/9e,EAAEm+e,IAAMA,EACRn+e,EAAEskE,EAAI65a,EACNn+e,EAAEw9e,IAAMA,EACRx9e,EAAE49e,IAAMA,EACR59e,EAAEg+e,IAAMA,EACRh+e,EAAEo+e,IAAMA,EACRp+e,EAAEy9e,IAAMA,EACRz9e,EAAE69e,IAAMA,EACR79e,EAAEi+e,IAAMA,EACRj+e,EAAEq+e,IAAMA,MACH,IAAiB,IAAb9qf,EAAE9D,OAoBX,MAAM,IAAIQ,UAAU,iDAnBpB,IAAIquf,EAAM/qf,EAAE,GACRgrf,EAAMhrf,EAAE,GACRirf,EAAMjrf,EAAE,GACRkrf,EAAMlrf,EAAE,GACRmrf,EAAMnrf,EAAE,GACRorf,EAAMprf,EAAE,GACZyM,EAAEs9e,IAAMgB,EACRt+e,EAAEzM,EAAI+qf,EACNt+e,EAAEu9e,IAAMgB,EACRv+e,EAAExM,EAAI+qf,EACNv+e,EAAE09e,IAAMc,EACRx+e,EAAEvM,EAAI+qf,EACNx+e,EAAE29e,IAAMc,EACRz+e,EAAEtM,EAAI+qf,EACNz+e,EAAEk+e,IAAMQ,EACR1+e,EAAEhK,EAAI0of,EACN1+e,EAAEm+e,IAAMQ,EACR3+e,EAAEskE,EAAIq6a,EAKR,OAAO3+e,EAGT,SAAS4+e,EAAW5+e,GAClB,IAAItQ,EAAO1D,OAAO0D,KAAK,IAAI2tf,GAE3B,GAAmB,WAAfl1c,EAAQnoC,IAAmBtQ,EAAKyL,OAAM,SAAUpN,GAClD,OAAOA,KAAKiS,KAEZ,OAAOo9e,EAAU,CAACp9e,EAAEs9e,IAAKt9e,EAAEu9e,IAAKv9e,EAAEw9e,IAAKx9e,EAAEy9e,IAAKz9e,EAAE09e,IAAK19e,EAAE29e,IAAK39e,EAAE49e,IAAK59e,EAAE69e,IAAK79e,EAAE89e,IAAK99e,EAAE+9e,IAAK/9e,EAAEg+e,IAAKh+e,EAAEi+e,IAAKj+e,EAAEk+e,IAAKl+e,EAAEm+e,IAAKn+e,EAAEo+e,IAAKp+e,EAAEq+e,MAG/H,MAAMpuf,UAAU,eAAkB+P,EAAI,8DAGxC,SAAS6+e,EAAWhke,GAClB,GAAsB,kBAAXA,EACT,MAAM5qB,UAAU,eAAkB4qB,EAAS,sBAG7C,IAAIzE,EAAM3Z,OAAOoe,GAAQ2rD,QAAQ,MAAO,IACpCxmE,EAAI,IAAIq9e,EACRyB,EAAqB,wCAA2Cjke,EAAS,IA8E7E,OA7EAzE,EAAIu2B,MAAM,KAAKxzC,QAAO,SAAUmrE,GAC9B,OAAOA,KACNhqE,SAAQ,SAAUykf,GACnB,IAAI11f,EAAM01f,EAAGpyc,MAAM,KACf8jG,EAAOpnJ,EAAI,GACXC,EAAQD,EAAI,GAEhB,IAAKC,EACH,MAAM2G,UAAU6uf,GAGlB,IAAIp0c,EAAaphD,EAAMqjD,MAAM,KAAK/1C,KAAI,SAAU5C,GAC9C,OAAOA,EAAEmD,SAAS,OAASovE,WAAWvyE,IAAM,IAAMrJ,KAAKqhf,IAAMzla,WAAWvyE,MAEtEyR,EAAIilC,EAAW,GACftR,EAAIsR,EAAW,GACfg+G,EAAIh+G,EAAW,GACfn3C,EAAIm3C,EAAW,GACfs0c,EAAM,CAACv5e,EAAG2zB,EAAGsvH,GACbu2V,EAAO,CAACx5e,EAAG2zB,EAAGsvH,EAAGn1J,GAErB,GAAa,gBAATk9I,GAA0BhrI,GAAK,CAAC2zB,EAAGsvH,GAAGvtJ,OAAM,SAAUnH,GACxD,YAAatK,IAANsK,KAEPgM,EAAEi+e,KAAO,EAAIx4e,OACR,GAAIgrI,EAAKt5I,SAAS,WAAa,CAAC,EAAG,IAAIA,SAASuzC,EAAWj7C,SAAWi7C,EAAWvvC,OAAM,SAAUnH,GACtG,OAAQzE,OAAOy6C,OAAOh2C,MACpB,CACF,IAAI+E,EAAS2xC,EAAW9zC,KAAI,SAAU5C,GACpC,OAAOrJ,KAAKijB,IAAI5Z,GAAK,KAAO,EAAIA,KAElCgM,EAAIA,EAAE4jL,SAASw5T,EAAUrkf,SACpB,GAAa,gBAAT03I,GAA0BuuW,EAAI7jf,OAAM,SAAUnH,GACvD,OAAQzE,OAAOy6C,OAAOh2C,MAEtBgM,EAAIA,EAAEszI,UAAU7tI,EAAG2zB,EAAGsvH,QACjB,GAAa,cAATjY,GAAwBhrI,QAAW/b,IAANg/J,EACtC1oJ,EAAIA,EAAEszI,UAAU7tI,EAAG2zB,GAAK,EAAG,QACtB,GAAa,aAATq3G,GAAuBwuW,EAAK9jf,OAAM,SAAUnH,GACrD,OAAQzE,OAAOy6C,OAAOh2C,OAClBT,EACJyM,EAAIA,EAAEk/e,gBAAgBz5e,EAAG2zB,EAAGsvH,EAAGn1J,QAC1B,GAAa,WAATk9I,GAAqBhrI,GAAK,CAAC2zB,EAAGsvH,GAAGvtJ,OAAM,SAAUnH,GAC1D,YAAatK,IAANsK,KAEPgM,EAAIA,EAAEm/e,OAAO,EAAG,EAAG15e,QACd,GAAa,YAATgrI,GAAsBuuW,EAAI7jf,OAAM,SAAUnH,GACnD,OAAQzE,OAAOy6C,OAAOh2C,OAClBgrf,EAAI3jf,MAAK,SAAUrH,GACvB,OAAa,IAANA,KAEPgM,EAAIA,EAAEy5S,MAAMh0S,EAAG2zB,EAAGsvH,QACb,GAAa,UAATjY,GAAqBlhJ,OAAOy6C,MAAMvkC,IAAY,IAANA,QAAiB/b,IAANg/J,EAIvD,GAAa,SAATjY,GAAmBhrI,QAAW/b,IAANg/J,EACjC1oJ,EAAIA,EAAEo/e,MAAM35e,GACZzF,EAAIo5B,EAAIp5B,EAAEq/e,MAAMjmd,GAAKp5B,MAChB,MAAI,QAAQ2oC,KAAK8nG,IAAShrI,GAAK,CAAC2zB,EAAGsvH,GAAGvtJ,OAAM,SAAUnH,GAC3D,YAAatK,IAANsK,MACH,CAAC,YAAa,SAAU,QAAS,QAAQqH,MAAK,SAAUgoE,GAC5D,OAAOotE,EAAKt5I,SAASksE,OAYrB,MAAMpzE,UAAU6uf,GAVhB,GAAI,CAAC,QAAS,SAAS3nf,SAASs5I,GAC9BzwI,EAAIA,EAAEywI,GAAMhrI,OACP,CACL,IAAIhV,EAAKggJ,EAAKjqE,QAAQ,QAAS,IAC3BskN,EAAOr6I,EAAKjqE,QAAQ/1E,EAAI,IACxBsR,EAAM,CAAC,IAAK,IAAK,KAAKqM,QAAQ08Q,GAC9Bw0N,EAAY,CAAS,IAARv9e,EAAY0D,EAAI,EAAW,IAAR1D,EAAY0D,EAAI,EAAW,IAAR1D,EAAY0D,EAAI,GACvEzF,EAAIA,EAAEvP,GAAIoF,MAAMmK,EAAGs/e,QAnBwD,CAC7E,IACI3J,EADOpmf,OAAOy6C,OAAO5Q,GACT3zB,EAAI2zB,EACpBp5B,EAAIA,EAAEy5S,MAAMh0S,EAAGkwe,EAAI,OAsBhB31e,EAGT,SAASwtV,EAAU/nV,EAAG2zB,EAAGsvH,GACvB,IAAI1oJ,EAAI,IAAIq9e,EAMZ,OALAr9e,EAAEk+e,IAAMz4e,EACRzF,EAAEhK,EAAIyP,EACNzF,EAAEm+e,IAAM/kd,EACRp5B,EAAEskE,EAAIlrC,EACNp5B,EAAEo+e,IAAM11V,EACD1oJ,EAGT,SAASu/e,EAAOj7O,EAAIC,EAAIi7O,GACtB,IAAIx/e,EAAI,IAAIq9e,EACRoC,EAAW90f,KAAKqhf,GAAK,IACrB0T,EAAOp7O,EAAKm7O,EACZE,EAAOp7O,EAAKk7O,EACZG,EAAOJ,EAAKC,EACZI,EAAOl1f,KAAKm1f,IAAIJ,GAChBK,GAAQp1f,KAAKq1f,IAAIN,GACjBO,EAAOt1f,KAAKm1f,IAAIH,GAChBO,GAAQv1f,KAAKq1f,IAAIL,GACjBQ,EAAOx1f,KAAKm1f,IAAIF,GAChBQ,GAAQz1f,KAAKq1f,IAAIJ,GACjBtC,EAAM2C,EAAOE,EACb5C,GAAO0C,EAAOG,EAClBpgf,EAAEs9e,IAAMA,EACRt9e,EAAEzM,EAAI+pf,EACNt9e,EAAEu9e,IAAMA,EACRv9e,EAAExM,EAAI+pf,EACNv9e,EAAEw9e,IAAM0C,EACR,IAAIxC,EAAMqC,EAAOG,EAAOC,EAAON,EAAOO,EACtCpgf,EAAE09e,IAAMA,EACR19e,EAAEvM,EAAIiqf,EACN,IAAIC,EAAMkC,EAAOM,EAAOJ,EAAOG,EAAOE,EAOtC,OANApgf,EAAE29e,IAAMA,EACR39e,EAAEtM,EAAIiqf,EACN39e,EAAE49e,KAAOmC,EAAOE,EAChBjgf,EAAE89e,IAAMiC,EAAOK,EAAOP,EAAOK,EAAOC,EACpCngf,EAAE+9e,IAAMgC,EAAOI,EAAON,EAAOK,EAAOE,EACpCpgf,EAAEg+e,IAAM6B,EAAOI,EACRjgf,EAGT,SAASqgf,EAAgB56e,EAAG2zB,EAAGsvH,EAAG43V,GAChC,IAAItgf,EAAI,IAAIq9e,EACRkD,EAAQD,GAAS31f,KAAKqhf,GAAK,KAC3BwU,EAAO71f,KAAKq1f,IAAIO,GAChBE,EAAO91f,KAAKm1f,IAAIS,GAChBG,EAAQF,EAAOA,EACf/wf,EAAS9E,KAAK8oK,KAAKhuJ,EAAIA,EAAI2zB,EAAIA,EAAIsvH,EAAIA,GACvCX,EAAItiJ,EACJmjJ,EAAIxvH,EACJivH,EAAIK,EAEO,IAAXj5J,GACFs4J,EAAI,EACJa,EAAI,EACJP,EAAI,IAEJN,GAAKt4J,EACLm5J,GAAKn5J,EACL44J,GAAK54J,GAGP,IAAIu2Q,EAAKj+G,EAAIA,EACTk+G,EAAKr9G,EAAIA,EACT+3V,EAAKt4V,EAAIA,EACTi1V,EAAM,EAAI,GAAKr3O,EAAK06O,GAAMD,EAC9B1gf,EAAEs9e,IAAMA,EACRt9e,EAAEzM,EAAI+pf,EACN,IAAIC,EAAM,GAAKx1V,EAAIa,EAAI83V,EAAQr4V,EAAIm4V,EAAOC,GAC1Czgf,EAAEu9e,IAAMA,EACRv9e,EAAExM,EAAI+pf,EACNv9e,EAAEw9e,IAAM,GAAKz1V,EAAIM,EAAIq4V,EAAQ93V,EAAI43V,EAAOC,GACxC,IAAI/C,EAAM,GAAK90V,EAAIb,EAAI24V,EAAQr4V,EAAIm4V,EAAOC,GAC1Czgf,EAAE09e,IAAMA,EACR19e,EAAEvM,EAAIiqf,EACN,IAAIC,EAAM,EAAI,GAAKgD,EAAK36O,GAAM06O,EAO9B,OANA1gf,EAAE29e,IAAMA,EACR39e,EAAEtM,EAAIiqf,EACN39e,EAAE49e,IAAM,GAAKh1V,EAAIP,EAAIq4V,EAAQ34V,EAAIy4V,EAAOC,GACxCzgf,EAAE89e,IAAM,GAAKz1V,EAAIN,EAAI24V,EAAQ93V,EAAI43V,EAAOC,GACxCzgf,EAAE+9e,IAAM,GAAK11V,EAAIO,EAAI83V,EAAQ34V,EAAIy4V,EAAOC,GACxCzgf,EAAEg+e,IAAM,EAAI,GAAKh4O,EAAKC,GAAMy6O,EACrB1gf,EAGT,SAASytV,EAAMhoV,EAAG2zB,EAAGsvH,GACnB,IAAI1oJ,EAAI,IAAIq9e,EAMZ,OALAr9e,EAAEs9e,IAAM73e,EACRzF,EAAEzM,EAAIkS,EACNzF,EAAE29e,IAAMvkd,EACRp5B,EAAEtM,EAAI0lC,EACNp5B,EAAEg+e,IAAMt1V,EACD1oJ,EAGT,SAAS4gf,EAAML,GACb,IAAIvgf,EAAI,IAAIq9e,EACRwD,EAAON,EAAQ51f,KAAKqhf,GAAK,IACzBryd,EAAIhvB,KAAKm2f,IAAID,GAGjB,OAFA7gf,EAAE09e,IAAM/je,EACR3Z,EAAEvM,EAAIkmB,EACC3Z,EAGT,SAAS+gf,EAAMR,GACb,IAAIvgf,EAAI,IAAIq9e,EACRwD,EAAON,EAAQ51f,KAAKqhf,GAAK,IACzBryd,EAAIhvB,KAAKm2f,IAAID,GAGjB,OAFA7gf,EAAEu9e,IAAM5je,EACR3Z,EAAExM,EAAImmB,EACC3Z,EAGT,SAASghf,EAAS/tV,EAAIC,GAiBpB,OAAOkqV,EAAU,CAhBPlqV,EAAGoqV,IAAMrqV,EAAGqqV,IAAMpqV,EAAGqqV,IAAMtqV,EAAGyqV,IAAMxqV,EAAGsqV,IAAMvqV,EAAG6qV,IAAM5qV,EAAGuqV,IAAMxqV,EAAGirV,IAClEhrV,EAAGoqV,IAAMrqV,EAAGsqV,IAAMrqV,EAAGqqV,IAAMtqV,EAAG0qV,IAAMzqV,EAAGsqV,IAAMvqV,EAAG8qV,IAAM7qV,EAAGuqV,IAAMxqV,EAAGkrV,IAClEjrV,EAAGoqV,IAAMrqV,EAAGuqV,IAAMtqV,EAAGqqV,IAAMtqV,EAAG2qV,IAAM1qV,EAAGsqV,IAAMvqV,EAAG+qV,IAAM9qV,EAAGuqV,IAAMxqV,EAAGmrV,IAClElrV,EAAGoqV,IAAMrqV,EAAGwqV,IAAMvqV,EAAGqqV,IAAMtqV,EAAG4qV,IAAM3qV,EAAGsqV,IAAMvqV,EAAGgrV,IAAM/qV,EAAGuqV,IAAMxqV,EAAGorV,IAClEnrV,EAAGwqV,IAAMzqV,EAAGqqV,IAAMpqV,EAAGyqV,IAAM1qV,EAAGyqV,IAAMxqV,EAAG0qV,IAAM3qV,EAAG6qV,IAAM5qV,EAAG2qV,IAAM5qV,EAAGirV,IAClEhrV,EAAGwqV,IAAMzqV,EAAGsqV,IAAMrqV,EAAGyqV,IAAM1qV,EAAG0qV,IAAMzqV,EAAG0qV,IAAM3qV,EAAG8qV,IAAM7qV,EAAG2qV,IAAM5qV,EAAGkrV,IAClEjrV,EAAGwqV,IAAMzqV,EAAGuqV,IAAMtqV,EAAGyqV,IAAM1qV,EAAG2qV,IAAM1qV,EAAG0qV,IAAM3qV,EAAG+qV,IAAM9qV,EAAG2qV,IAAM5qV,EAAGmrV,IAClElrV,EAAGwqV,IAAMzqV,EAAGwqV,IAAMvqV,EAAGyqV,IAAM1qV,EAAG4qV,IAAM3qV,EAAG0qV,IAAM3qV,EAAGgrV,IAAM/qV,EAAG2qV,IAAM5qV,EAAGorV,IAClEnrV,EAAG4qV,IAAM7qV,EAAGqqV,IAAMpqV,EAAG6qV,IAAM9qV,EAAGyqV,IAAMxqV,EAAG8qV,IAAM/qV,EAAG6qV,IAAM5qV,EAAG+qV,IAAMhrV,EAAGirV,IAClEhrV,EAAG4qV,IAAM7qV,EAAGsqV,IAAMrqV,EAAG6qV,IAAM9qV,EAAG0qV,IAAMzqV,EAAG8qV,IAAM/qV,EAAG8qV,IAAM7qV,EAAG+qV,IAAMhrV,EAAGkrV,IAClEjrV,EAAG4qV,IAAM7qV,EAAGuqV,IAAMtqV,EAAG6qV,IAAM9qV,EAAG2qV,IAAM1qV,EAAG8qV,IAAM/qV,EAAG+qV,IAAM9qV,EAAG+qV,IAAMhrV,EAAGmrV,IAClElrV,EAAG4qV,IAAM7qV,EAAGwqV,IAAMvqV,EAAG6qV,IAAM9qV,EAAG4qV,IAAM3qV,EAAG8qV,IAAM/qV,EAAGgrV,IAAM/qV,EAAG+qV,IAAMhrV,EAAGorV,IAClEnrV,EAAGgrV,IAAMjrV,EAAGqqV,IAAMpqV,EAAGirV,IAAMlrV,EAAGyqV,IAAMxqV,EAAGkrV,IAAMnrV,EAAG6qV,IAAM5qV,EAAGmrV,IAAMprV,EAAGirV,IAClEhrV,EAAGgrV,IAAMjrV,EAAGsqV,IAAMrqV,EAAGirV,IAAMlrV,EAAG0qV,IAAMzqV,EAAGkrV,IAAMnrV,EAAG8qV,IAAM7qV,EAAGmrV,IAAMprV,EAAGkrV,IAClEjrV,EAAGgrV,IAAMjrV,EAAGuqV,IAAMtqV,EAAGirV,IAAMlrV,EAAG2qV,IAAM1qV,EAAGkrV,IAAMnrV,EAAG+qV,IAAM9qV,EAAGmrV,IAAMprV,EAAGmrV,IAClElrV,EAAGgrV,IAAMjrV,EAAGwqV,IAAMvqV,EAAGirV,IAAMlrV,EAAG4qV,IAAM3qV,EAAGkrV,IAAMnrV,EAAGgrV,IAAM/qV,EAAGmrV,IAAMprV,EAAGorV,MAI9E,IAAIhB,EAAY,WAId,IAHA,IAAIzke,EAAO,GACPjd,EAAMrK,UAAU7B,OAEbkM,KACLid,EAAKjd,GAAOrK,UAAUqK,GAGxB,IAAIqE,EAAIpS,KAwBR,GAvBAoS,EAAEzM,EAAI,EACNyM,EAAExM,EAAI,EACNwM,EAAEvM,EAAI,EACNuM,EAAEtM,EAAI,EACNsM,EAAEhK,EAAI,EACNgK,EAAEskE,EAAI,EACNtkE,EAAEs9e,IAAM,EACRt9e,EAAEu9e,IAAM,EACRv9e,EAAEw9e,IAAM,EACRx9e,EAAEy9e,IAAM,EACRz9e,EAAE09e,IAAM,EACR19e,EAAE29e,IAAM,EACR39e,EAAE49e,IAAM,EACR59e,EAAE69e,IAAM,EACR79e,EAAE89e,IAAM,EACR99e,EAAE+9e,IAAM,EACR/9e,EAAEg+e,IAAM,EACRh+e,EAAEi+e,IAAM,EACRj+e,EAAEk+e,IAAM,EACRl+e,EAAEm+e,IAAM,EACRn+e,EAAEo+e,IAAM,EACRp+e,EAAEq+e,IAAM,EAEJzle,GAAQA,EAAKnpB,OAAQ,CACvB,IAAIwxf,EAAO,CAAC,GAAI,GAAG5lf,MAAK,SAAU4a,GAChC,OAAOA,IAAM2C,EAAKnpB,UACfmpB,EAAOA,EAAK,GACjB,OAAO5Y,EAAEkhf,eAAeD,GAG1B,OAAOjhf,GAGLmhf,EAAqB,CACvBC,WAAY,CACVzrf,cAAc,GAEhB0rf,KAAM,CACJ1rf,cAAc,IA+LlB,OA3LAwrf,EAAmBC,WAAW9rf,IAAM,SAAUhM,GAC5CsE,KAAKwzf,WAAa93f,GAGpB63f,EAAmBC,WAAWzvf,IAAM,WAClC,IAAIqO,EAAIpS,KACR,OAAiB,IAAVoS,EAAEs9e,KAAuB,IAAVt9e,EAAEu9e,KAAuB,IAAVv9e,EAAEw9e,KAAuB,IAAVx9e,EAAEy9e,KAAuB,IAAVz9e,EAAE09e,KAAuB,IAAV19e,EAAE29e,KAAuB,IAAV39e,EAAE49e,KAAuB,IAAV59e,EAAE69e,KAAuB,IAAV79e,EAAE89e,KAAuB,IAAV99e,EAAE+9e,KAAuB,IAAV/9e,EAAEg+e,KAAuB,IAAVh+e,EAAEi+e,KAAuB,IAAVj+e,EAAEk+e,KAAuB,IAAVl+e,EAAEm+e,KAAuB,IAAVn+e,EAAEo+e,KAAuB,IAAVp+e,EAAEq+e,KAG5O8C,EAAmBE,KAAK1vf,IAAM,WAC5B,IAAIqO,EAAIpS,KACR,OAAiB,IAAVoS,EAAE89e,KAAuB,IAAV99e,EAAE+9e,KAAuB,IAAV/9e,EAAEg+e,KAAuB,IAAVh+e,EAAEi+e,KAAuB,IAAVj+e,EAAEo+e,KAAuB,IAAVp+e,EAAEq+e,KAGtF8C,EAAmBE,KAAK/rf,IAAM,SAAUhM,GACtCsE,KAAKyzf,KAAO/3f,GAGd+zf,EAAUtxf,UAAUm1f,eAAiB,SAAwBrme,GAG3D,MAAI,CAACxrB,MAAOiyf,aAAcC,cAAclmf,MAAK,SAAU9H,GACrD,OAAOsnB,aAAkBtnB,KAElB6pf,EAAUvie,GAGG,kBAAXA,GAAuBA,EAAOprB,QAAqB,SAAXorB,EAC1Cgke,EAAWhke,GAGI,WAApBstB,EAAQttB,GACH+je,EAAW/je,GAbZjtB,MAmBVyvf,EAAUtxf,UAAUyE,QAAU,WAC5B,IAAIwP,EAAIpS,KACJwyO,EAAMz1O,KAAKy1O,IAAI,GAAI,GASvB,OANIpgO,EAAEqhf,KACK,CAACrhf,EAAEzM,EAAGyM,EAAExM,EAAGwM,EAAEvM,EAAGuM,EAAEtM,EAAGsM,EAAEhK,EAAGgK,EAAEskE,GAE5B,CAACtkE,EAAEs9e,IAAKt9e,EAAEu9e,IAAKv9e,EAAEw9e,IAAKx9e,EAAEy9e,IAAKz9e,EAAE09e,IAAK19e,EAAE29e,IAAK39e,EAAE49e,IAAK59e,EAAE69e,IAAK79e,EAAE89e,IAAK99e,EAAE+9e,IAAK/9e,EAAEg+e,IAAKh+e,EAAEi+e,IAAKj+e,EAAEk+e,IAAKl+e,EAAEm+e,IAAKn+e,EAAEo+e,IAAKp+e,EAAEq+e,MAGzGznf,KAAI,SAAU5C,GAC1B,OAAOrJ,KAAKijB,IAAI5Z,GAAK,KAAO,GAAKA,EAAIosO,GAAO,GAAKA,MAIrDi9Q,EAAUtxf,UAAU8C,SAAW,WAC7B,IACIkK,EADInL,KACO4C,UAEf,OAHQ5C,KAEKyzf,KAAO,SAAW,YACjB,IAAMtof,EAAS,KAG/Bskf,EAAUtxf,UAAUunB,OAAS,WAC3B,IAAItT,EAAIpS,KACJyzf,EAAOrhf,EAAEqhf,KACTD,EAAaphf,EAAEohf,WACnB,OAAOp1f,OAAO+8C,OAAO,GAAI/oC,EAAG,CAC1Bqhf,KAAMA,EACND,WAAYA,KAIhB/D,EAAUtxf,UAAU63L,SAAW,SAAkB1wB,GAC/C,OAAO8tV,EAASpzf,KAAMslK,IAGxBmqV,EAAUtxf,UAAUunJ,UAAY,SAAmB7tI,EAAG2zB,EAAGsvH,GACvD,IACIE,EAAIxvH,EACJivH,EAAIK,EAUR,YARUh/J,IAAN2+J,IACFA,EAAI,QAGI3+J,IAANk/J,IACFA,EAAI,GAGCo4V,EAASpzf,KAAM4/V,EAZd/nV,EAY2BmjJ,EAAGP,KAGxCg1V,EAAUtxf,UAAU0tT,MAAQ,SAAeh0S,EAAG2zB,EAAGsvH,GAC/C,IACIE,EAAIxvH,EACJivH,EAAIK,EAUR,YARUh/J,IAANk/J,IACFA,EAAInjJ,QAGI/b,IAAN2+J,IACFA,EAAI,GAGC24V,EAASpzf,KAAM6/V,EAZdhoV,EAYuBmjJ,EAAGP,KAGpCg1V,EAAUtxf,UAAUozf,OAAS,SAAgB76O,EAAIC,EAAIi7O,GACnD,IAAIgC,EAAKl9O,EACLm9O,EAAKl9O,EACLm9O,EAAKlC,EAWT,YATW91f,IAAP+3f,IACFA,EAAK,QAGI/3f,IAAPg4f,IACFA,EAAKF,EACLA,EAAK,GAGAR,EAASpzf,KAAM2xf,EAAOiC,EAAIC,EAAIC,KAGvCrE,EAAUtxf,UAAUmzf,gBAAkB,SAAyBz5e,EAAG2zB,EAAGsvH,EAAG63V,GACtE,GAAI,CAAC96e,EAAG2zB,EAAGsvH,EAAG63V,GAAOllf,MAAK,SAAUrH,GAClC,OAAOzE,OAAOy6C,MAAMh2C,MAEpB,MAAM,IAAI/D,UAAU,iCAGtB,OAAO+wf,EAASpzf,KAAMyyf,EAAgB56e,EAAG2zB,EAAGsvH,EAAG63V,KAGjDlD,EAAUtxf,UAAUqzf,MAAQ,SAAemB,GACzC,OAAOS,EAASpzf,KAAMgzf,EAAML,KAG9BlD,EAAUtxf,UAAUszf,MAAQ,SAAekB,GACzC,OAAOS,EAASpzf,KAAMmzf,EAAMR,KAG9BlD,EAAUtxf,UAAU41f,eAAiB,SAAwB3zf,GAC3D,IACIgS,EAAIwtV,EAAUx/V,EAAEyX,EAAGzX,EAAEorC,EAAGprC,EAAE06J,GAG9B,OAFA1oJ,EAAEq+e,IAAMrwf,EAAE40J,GAAK,EAER,CACLn9I,GAFFzF,EAHQpS,KAGFg2L,SAAS5jL,IAERk+e,IACL9kd,EAAGp5B,EAAEm+e,IACLz1V,EAAG1oJ,EAAEo+e,IACLx7V,EAAG5iJ,EAAEq+e,MAIThB,EAAUtxf,UAAUk+H,UAAY,SAAmBtwG,GACjD,IAAI3Z,EAAIpS,KACJ6X,EAAIzF,EAAEs9e,IAAM3je,EAAElU,EAAIzF,EAAEu9e,IAAM5je,EAAEyf,EAAIp5B,EAAEw9e,IAAM7je,EAAE+uI,EAAI1oJ,EAAEy9e,IAAM9je,EAAEipI,EACxDxpH,EAAIp5B,EAAE09e,IAAM/je,EAAElU,EAAIzF,EAAE29e,IAAMhke,EAAEyf,EAAIp5B,EAAE49e,IAAMjke,EAAE+uI,EAAI1oJ,EAAE69e,IAAMlke,EAAEipI,EACxD8F,EAAI1oJ,EAAE89e,IAAMnke,EAAElU,EAAIzF,EAAE+9e,IAAMpke,EAAEyf,EAAIp5B,EAAEg+e,IAAMrke,EAAE+uI,EAAI1oJ,EAAEi+e,IAAMtke,EAAEipI,EACxDA,EAAI5iJ,EAAEk+e,IAAMvke,EAAElU,EAAIzF,EAAEm+e,IAAMxke,EAAEyf,EAAIp5B,EAAEo+e,IAAMzke,EAAE+uI,EAAI1oJ,EAAEq+e,IAAM1ke,EAAEipI,EAC5D,MAAO,CACLn9I,EAAGA,EAAIm9I,EACPxpH,EAAGA,EAAIwpH,EACP8F,EAAGA,EAAI9F,EACPA,EAAGA,IAIP52J,OAAO+uB,iBAAiBsie,EAAUtxf,UAAWo1f,GAC7Cn1f,OAAO+8C,OAAOs0c,EAAW,CACvB7vJ,UAAWA,EACX+xJ,OAAQA,EACRc,gBAAiBA,EACjB5yJ,MAAOA,EACPmzJ,MAAOA,EACPG,MAAOA,EACPC,SAAUA,EACV5D,UAAWA,EACXwB,WAAYA,EACZC,WAAYA,IAId7yf,OAAO+8C,OAAOs0c,EAAW,CACvBuE,QAHY,WAKPvE,GA3iB6B,WAAtBl1c,EAAQp/C,GAAqDD,EAAOC,QAAU6/P,SAI1Dl/P,KAHlCyzf,EAA2E,oBADuCD,EAAkCt0P,GAEnJs0P,EAA+Btuf,KAAK7F,EAASwqe,EAAqBxqe,EAASD,GAC5Eo0f,KACgDp0f,EAAOC,QAAUo0f,IA4iB5D,SAACr0f,EAAQyye,EAA0BhI,GAE1CA,EAAoB,IACpBA,EAAoB,IACpB,IAAI57W,EAAO47W,EAAoB,IAC/Bzqe,EAAOC,QAAU4uH,EAAK3rH,OAAO4/Z,aAItB,SAAC9ia,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAIykB,EAAkBzkB,EAAoB,IACtCsuB,EAAmBtuB,EAAoB,IACvCuuB,EAAYvuB,EAAoB,IAChCsnB,EAAsBtnB,EAAoB,IAC1CwuB,EAAiBxuB,EAAoB,IACrCyuB,EAAiB,iBACjBC,EAAmBpH,EAAoBvlf,IACvC0lf,EAAmBH,EAAoBoB,UAAU+F,GACrDl5f,EAAOC,QAAUg5f,EAAe1yf,MAAO,SAAS,SAAU6yf,EAAUlzG,GACnEizG,EAAiBr0f,KAAM,CACtBE,KAAMk0f,EACNpne,OAAQo9d,EAAgBkK,GACxBn4f,MAAO,EACPilZ,KAAMA,OAEL,WACF,IAAIp6W,EAAQomd,EAAiBptf,MACzBgtB,EAASga,EAAMha,OACfo0X,EAAOp6W,EAAMo6W,KACbjlZ,EAAQ6qC,EAAM7qC,QAClB,OAAK6wB,GAAU7wB,GAAS6wB,EAAOnrB,QAC9BmlC,EAAMha,YAASlxB,EACR,CACNJ,WAAOI,EACPwE,MAAM,IAGI,QAAR8gZ,EACI,CACN1lZ,MAAOS,EACPmE,MAAM,GAEI,UAAR8gZ,EACI,CACN1lZ,MAAOsxB,EAAO7wB,GACdmE,MAAM,GAED,CACN5E,MAAO,CACNS,EACA6wB,EAAO7wB,IAERmE,MAAM,KAEL,UACH4zf,EAAUK,UAAYL,EAAUzyf,MAChCwyf,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,YAIV,SAAC/4f,EAAQyye,EAA0BhI,GAE1C,IAAIylB,EAAkBzlB,EAAoB,IACtCtne,EAASsne,EAAoB,IAC7BinB,EAAuBjnB,EAAoB,IAC3C6uB,EAAcpJ,EAAgB,eAC9BqJ,EAAiBhzf,MAAMtD,eACQrC,GAA/B24f,EAAeD,IAClB5H,EAAqBl2a,EAAE+9a,EAAgBD,EAAa,CACnDzsf,cAAc,EACdrM,MAAO2C,EAAO,QAGhBnD,EAAOC,QAAU,SAAUmJ,GAC1Bmwf,EAAeD,GAAalwf,IAAO,IAK7B,SAACpJ,EAAQyye,EAA0BhI,GAE1C,IAqCI+uB,EArCA7H,EAAWlnB,EAAoB,IAC/Bx4c,EAAmBw4c,EAAoB,IACvCgvB,EAAchvB,EAAoB,IAClCkoB,EAAaloB,EAAoB,IACjCivB,EAAOjvB,EAAoB,IAC3BkvB,EAAwBlvB,EAAoB,IAC5CioB,EAAYjoB,EAAoB,IAKhClxT,EAAWm5U,EAAU,YACrBkH,EAAmB,aAEnBC,EAAY,SAAUp5c,GACzB,MAAO+3L,WAAmB/3L,EAAnB+3L,cAEJshR,EAA4B,SAAUN,GACzCA,EAAgBO,MAAMF,EAAU,KAChCL,EAAgBjrZ,QAChB,IAAIwiD,EAAOyoW,EAAgBQ,aAAa92f,OAExC,OADAs2f,EAAkB,KACXzoW,GAgBJkpW,EAAkB,WACrB,IACCT,EAAkB,IAAIU,cAAc,YACnC,MAAOjnf,IAETgnf,EAAqC,oBAAZnvd,SAA0BA,SAAS8tK,QAAU4gT,EAAkBM,EAA0BN,GAnBpF,WAC9B,IAEIW,EAFAC,EAAST,EAAsB,UAUnC,OAPAS,EAAOh6Y,MAAMlgC,QAAU,OACvBw5a,EAAK13M,YAAYo4M,GACjBA,EAAO9uY,IAAM33G,OAJJ,gBAKTwmf,EAAiBC,EAAOC,cAAcvvd,UACvB2kE,OACf0qZ,EAAeJ,MAAMF,EAAU,sBAC/BM,EAAe5rZ,QACR4rZ,EAAel6P,EAQ+Gq6P,GAA6BR,EAA0BN,GAE5L,IADA,IAAI7yf,EAAS8yf,EAAY9yf,OAClBA,YACCszf,EAAe,UAAYR,EAAY9yf,IAC/C,OAAOszf,KAERtH,EAAWp5U,IAAY,EACvBv5K,EAAOC,QAAUiD,OAAOC,QAAU,SAAgBsiQ,EAAG80P,GACpD,IAAI7hf,EAQJ,OAPU,OAAN+sP,GACHm0P,EAAgB,UAAcjI,EAASlsP,GACvC/sP,EAAS,IAAIkhf,EACbA,EAAgB,UAAc,KAC9Blhf,EAAO6gK,GAAYksF,GAEnB/sP,EAASuhf,SACYr5f,IAAf25f,EAA2B7hf,EAASuZ,EAAiBvZ,EAAQ6hf,KAK9D,SAACv6f,EAAQyye,EAA0BhI,GAE1C,IAAIskB,EAActkB,EAAoB,IAClCinB,EAAuBjnB,EAAoB,IAC3CknB,EAAWlnB,EAAoB,IAC/BykB,EAAkBzkB,EAAoB,IACtC1yb,EAAa0yb,EAAoB,IACrCzqe,EAAOC,QAAU8uf,EAAc7rf,OAAO+uB,iBAAmB,SAA0BwzO,EAAG80P,GACrF5I,EAASlsP,GAMT,IALA,IAIIr8P,EAJA4lC,EAAQkgd,EAAgBqL,GACxB3zf,EAAOmxC,EAAWwid,GAClB5zf,EAASC,EAAKD,OACd1F,EAAQ,EAEL0F,EAAS1F,GACfywf,EAAqBl2a,EAAEiqL,EAAGr8P,EAAMxC,EAAK3F,KAAU+tC,EAAM5lC,IACtD,OAAOq8P,IAKD,SAACzlQ,EAAQyye,EAA0BhI,GAE1C,IAAIipB,EAAqBjpB,EAAoB,IACzCgvB,EAAchvB,EAAoB,IACtCzqe,EAAOC,QAAUiD,OAAO0D,MAAQ,SAAc6+P,GAC7C,OAAOiuP,EAAmBjuP,EAAGg0P,KAKvB,SAACz5f,EAAQyye,EAA0BhI,GAE1C,IAAI8lB,EAAa9lB,EAAoB,IACrCzqe,EAAOC,QAAUswf,EAAW,WAAY,oBAIjC,SAACvwf,GAERA,EAAOC,QAAU,IAIV,SAACD,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAI5qU,EAAI4qU,EAAoB,GACxB3ke,EAAO2ke,EAAoB,IAC3B4mB,EAAU5mB,EAAoB,IAC9B+vB,EAAe/vB,EAAoB,IACnC6lB,EAAa7lB,EAAoB,IACjCgwB,EAA4BhwB,EAAoB,IAChD58c,EAAiB48c,EAAoB,IACrCnwZ,EAAiBmwZ,EAAoB,IACrCiwB,EAAiBjwB,EAAoB,IACrCyjB,EAA8BzjB,EAAoB,IAClD0jB,EAAW1jB,EAAoB,IAC/BylB,EAAkBzlB,EAAoB,IACtCuuB,EAAYvuB,EAAoB,IAChCkwB,EAAgBlwB,EAAoB,IACpCmwB,EAAuBJ,EAAalH,OACpCtB,EAA6BwI,EAAavI,aAC1C5d,EAAoBsmB,EAActmB,kBAClCwmB,EAAyBF,EAAcE,uBACvCC,EAAW5K,EAAgB,YAC3Blqf,EAAO,OACPC,EAAS,SACTC,EAAU,UACV60f,EAAa,WAChB,OAAOj2f,MAER9E,EAAOC,QAAU,SAAUyuB,EAAUsse,EAAMC,EAAqBp2f,EAAMq2f,EAASC,EAAQC,GACtFX,EAA0BQ,EAAqBD,EAAMn2f,GACrD,IA6BIw2f,EAA0Bn4e,EAASo4e,EA7BnCC,EAAqB,SAAUC,GAClC,GAAIA,IAASN,GAAWO,EACvB,OAAOA,EACR,IAAKZ,GAA0BW,KAAQE,EACtC,OAAOA,EAAkBF,GAC1B,OAAQA,GACR,KAAKx1f,EAIL,KAAKC,EAIL,KAAKC,EACJ,OAAO,WACN,OAAO,IAAI+0f,EAAoBn2f,KAAM02f,IAGvC,OAAO,WACN,OAAO,IAAIP,EAAoBn2f,QAG7B62f,EAAgBX,EAAO,YACvBY,GAAwB,EACxBF,EAAoBhte,EAASzrB,UAC7B44f,EAAiBH,EAAkBZ,IAAaY,EAAkB,eAAiBR,GAAWQ,EAAkBR,GAChHO,GAAmBZ,GAA0BgB,GAAkBN,EAAmBL,GAClFY,EAA4B,SAARd,GAAkBU,EAAkBjtf,SAA4Botf,EA2BxF,GAzBIC,IACHT,EAA2Bxte,EAAeiue,EAAkBh2f,KAAK,IAAI4oB,OACpCxrB,OAAOD,WAAao4f,EAAyBx2f,OACxEwsf,GAAWxje,EAAewte,KAA8BhnB,IACxD/5Z,EACHA,EAAe+gb,EAA0BhnB,GAC9Bic,EAAW+K,EAAyBP,KAC/C3M,EAASkN,EAA0BP,EAAUC,IAG/CL,EAAeW,EAA0BM,GAAe,GAAM,GAC1DtK,IACH2H,EAAU2C,GAAiBZ,IAG1BH,GAAwBM,GAAWj1f,GAAU41f,GAAkBA,EAAevof,OAASrN,KACrForf,GAAWW,EACf9D,EAA4BwN,EAAmB,OAAQz1f,IAEvD21f,GAAwB,EACxBH,EAAkB,WACjB,OAAO31f,EAAK+1f,EAAgB/2f,SAI3Bo2f,EAMH,GALAh4e,EAAU,CACTjT,OAAQsrf,EAAmBt1f,GAC3BW,KAAMu0f,EAASM,EAAkBF,EAAmBv1f,GACpDyI,QAAS8sf,EAAmBr1f,IAEzBk1f,EACH,IAAKE,KAAOp4e,GACP23e,GAA0Be,KAA2BN,KAAOI,KAC/DvN,EAASuN,EAAmBJ,EAAKp4e,EAAQo4e,SAI3Cz7V,EAAE,CACD/tI,OAAQkpe,EACRpjb,OAAO,EACPk3a,OAAQ+L,GAA0Be,GAChC14e,GAML,OAJMmue,IAAW+J,GAAWM,EAAkBZ,KAAcW,GAC3DtN,EAASuN,EAAmBZ,EAAUW,EAAiB,CAAEnof,KAAM4nf,IAEhElC,EAAUgC,GAAQS,EACXv4e,IAKD,SAACljB,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAI4J,EAAqB5J,EAAoB,IAAI4J,kBAC7Clxe,EAASsne,EAAoB,IAC7BwkB,EAA2BxkB,EAAoB,IAC/CiwB,EAAiBjwB,EAAoB,IACrCuuB,EAAYvuB,EAAoB,IAChCswB,EAAa,WAChB,OAAOj2f,MAER9E,EAAOC,QAAU,SAAUg7f,EAAqBD,EAAMn2f,EAAMk3f,GAC3D,IAAIJ,EAAgBX,EAAO,YAI3B,OAHAC,EAAoBh4f,UAAYE,EAAOkxe,EAAmB,CAAExve,KAAMoqf,IAA2B8M,EAAiBl3f,KAC9G61f,EAAeO,EAAqBU,GAAe,GAAO,GAC1D3C,EAAU2C,GAAiBZ,EACpBE,IAKD,SAACj7f,EAAQyye,EAA0BhI,GAE1C,aAEA,IASI4J,EAAmB2nB,EAAmCC,EATtD3M,EAAQ7kB,EAAoB,IAC5B6lB,EAAa7lB,EAAoB,IACjCtne,EAASsne,EAAoB,IAC7B58c,EAAiB48c,EAAoB,IACrC0jB,EAAW1jB,EAAoB,IAC/BylB,EAAkBzlB,EAAoB,IACtC4mB,EAAU5mB,EAAoB,IAC9BqwB,EAAW5K,EAAgB,YAC3B2K,GAAyB,EAEzB,GAAGj0f,OAEA,SADNq1f,EAAgB,GAAGr1f,SAIlBo1f,EAAoCnue,EAAeA,EAAeoue,OACxB/4f,OAAOD,YAChDoxe,EAAoB2nB,GAJrBnB,GAAyB,QAOuBj6f,GAArByze,GAAkCib,GAAM,WACpE,IAAIzvc,EAAO,GACX,OAAOw0b,EAAkBymB,GAAUh1f,KAAK+5C,KAAUA,KAGlDw0b,EAAoB,GACZgd,IACRhd,EAAoBlxe,EAAOkxe,IACvBic,EAAWjc,EAAkBymB,KACjC3M,EAAS9Z,EAAmBymB,GAAU,WACrC,OAAOh2f,QAGT9E,EAAOC,QAAU,CAChBo0e,kBAAmBA,EACnBwmB,uBAAwBA,IAKlB,SAAC76f,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B/mR,EAAS+mR,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjC3kd,EAAW2kd,EAAoB,IAC/BioB,EAAYjoB,EAAoB,IAChCyxB,EAA2BzxB,EAAoB,IAC/ClxT,EAAWm5U,EAAU,YACrBxvf,EAAS8wK,EAAO9wK,OAChBi5f,EAAkBj5f,EAAOD,UAC7BjD,EAAOC,QAAUi8f,EAA2Bh5f,EAAO2qB,eAAiB,SAAU43O,GAC7E,IAAIx8P,EAAS6c,EAAS2/O,GACtB,GAAI/hD,EAAOz6M,EAAQswK,GAClB,OAAOtwK,EAAOswK,GACf,IAAIn2K,EAAc6F,EAAO7F,YACzB,OAAIktf,EAAWltf,IAAgB6F,aAAkB7F,EACzCA,EAAYH,UAEbgG,aAAkB/F,EAASi5f,EAAkB,OAK9C,SAACn8f,EAAQyye,EAA0BhI,GAE1C,IAAI6kB,EAAQ7kB,EAAoB,IAChCzqe,EAAOC,SAAWqvf,GAAM,WACvB,SAASrvP,KAGT,OADAA,EAAEh9P,UAAUG,YAAc,KACnBF,OAAO2qB,eAAe,IAAIoyO,KAASA,EAAEh9P,cAKtC,SAACjD,EAAQyye,EAA0BhI,GAE1C,IAAI99d,EAAkB89d,EAAoB,IAAIjvZ,EAC1CkoI,EAAS+mR,EAAoB,IAE7BkxB,EADkBlxB,EAAoB,GACtBylB,CAAgB,eACpClwf,EAAOC,QAAU,SAAUsmK,EAAI61V,EAAKzN,GAC/BpoV,IAAOm9C,EAAOn9C,EAAKooV,EAASpoV,EAAKA,EAAGtjK,UAAW04f,IAClDhvf,EAAe45J,EAAIo1V,EAAe,CACjC9uf,cAAc,EACdrM,MAAO47f,MAOH,SAACp8f,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClCknB,EAAWlnB,EAAoB,IAC/B4xB,EAAqB5xB,EAAoB,IAC7Czqe,EAAOC,QAAUiD,OAAOo3E,iBAAmB,aAAe,GAAM,WAC/D,IAEIg7F,EAFAgnV,GAAiB,EACjBz8c,EAAO,GAEX,KACCy1H,EAASq6U,EAAYzsf,OAAO0uB,yBAAyB1uB,OAAOD,UAAW,aAAauJ,MAC7EqzC,EAAM,IACby8c,EAAiBz8c,aAAgBt5C,MAChC,MAAO0M,IAET,OAAO,SAAwBwyP,EAAG7tL,GAOjC,OANA+5a,EAASlsP,GACT42P,EAAmBzkb,GACf0kb,EACHhnV,EAAOmwF,EAAG7tL,GAEV6tL,EAAEziQ,UAAY40E,EACR6tL,GAjBuD,QAmBzD7kQ,IAIA,SAACZ,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B6lB,EAAa7lB,EAAoB,IACjC92d,EAASqgK,EAAOrgK,OAChBxM,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUqe,GAC1B,GAAuB,iBAAZA,GAAwBgye,EAAWhye,GAC7C,OAAOA,EACR,MAAMnX,EAAU,aAAewM,EAAO2K,GAAY,qBAK5C,SAACksd,EAAyBiI,EAA0BhI,GAE3D,IAAI5qU,EAAI4qU,EAAoB,GACxBpyd,EAAUoyd,EAAoB,IAC9B8xB,EAAiB9xB,EAAoB,IACzC5qU,EAAE,CACD/tI,OAAQ,SACR88d,MAAM,GACJ,CACF9rF,YAAa,SAAqBl9Z,GACjC,IAAIgG,EAAM,GAIV,OAHAyM,EAAQzS,GAAU,SAAUX,EAAGC,GAC9Bq3f,EAAe3wf,EAAK3G,EAAGC,KACrB,CAAEs3f,YAAY,IACV5wf,MAMF,SAAC5L,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B7jd,EAAO6jd,EAAoB,IAC3B3ke,EAAO2ke,EAAoB,IAC3BknB,EAAWlnB,EAAoB,IAC/BumB,EAAcvmB,EAAoB,IAClCgyB,EAAwBhyB,EAAoB,IAC5CmpB,EAAoBnpB,EAAoB,IACxC+lB,EAAgB/lB,EAAoB,IACpC9ke,EAAc8ke,EAAoB,IAClCiyB,EAAoBjyB,EAAoB,IACxCkyB,EAAgBlyB,EAAoB,IACpCtje,EAAY6sK,EAAO7sK,UACnBy1f,EAAS,SAAU9rf,EAAS4H,GAC/B5T,KAAKgM,QAAUA,EACfhM,KAAK4T,OAASA,GAEXmkf,EAAkBD,EAAO35f,UAC7BjD,EAAOC,QAAU,SAAU2F,EAAUk3f,EAAiBhsd,GACrD,IAKIrsC,EAAUs4f,EAAQ97f,EAAO0F,EAAQ+R,EAAQ7T,EAAM6E,EAL/CyrP,EAAOrkN,GAAWA,EAAQqkN,KAC1BqnQ,KAAgB1rd,IAAWA,EAAQ0rd,YACnCQ,KAAiBlsd,IAAWA,EAAQksd,aACpCC,KAAiBnsd,IAAWA,EAAQmsd,aACpCt1f,EAAKif,EAAKk2e,EAAiB3nQ,GAE3BshD,EAAO,SAAUzjS,GAGpB,OAFIvO,GACHk4f,EAAcl4f,EAAU,SAAUuO,GAC5B,IAAI4pf,GAAO,EAAM5pf,IAErBkqf,EAAS,SAAU18f,GACtB,OAAIg8f,GACH7K,EAASnxf,GACFy8f,EAAct1f,EAAGnH,EAAM,GAAIA,EAAM,GAAIi2S,GAAQ9uS,EAAGnH,EAAM,GAAIA,EAAM,KAEjEy8f,EAAct1f,EAAGnH,EAAOi2S,GAAQ9uS,EAAGnH,IAE3C,GAAIw8f,EACHv4f,EAAWmB,MACL,CAEN,KADAm3f,EAASL,EAAkB92f,IAE1B,MAAMuB,EAAU6pf,EAAYprf,GAAY,oBACzC,GAAI62f,EAAsBM,GAAS,CAClC,IAAK97f,EAAQ,EAAG0F,EAASitf,EAAkBhuf,GAAWe,EAAS1F,EAAOA,IAErE,IADAyX,EAASwkf,EAAOt3f,EAAS3E,MACXuvf,EAAcqM,EAAiBnkf,GAC5C,OAAOA,EAET,OAAO,IAAIkkf,GAAO,GAEnBn4f,EAAWkB,EAAYC,EAAUm3f,GAGlC,IADAl4f,EAAOJ,EAASI,OACP6E,EAAO5D,EAAKjB,EAAMJ,IAAWW,MAAM,CAC3C,IACCsT,EAASwkf,EAAOxzf,EAAKlJ,OACpB,MAAOyS,GACR0pf,EAAcl4f,EAAU,QAASwO,GAElC,GAAqB,iBAAVyF,GAAsBA,GAAU83e,EAAcqM,EAAiBnkf,GACzE,OAAOA,EAET,OAAO,IAAIkkf,GAAO,KAKZ,SAAC58f,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClCsmB,EAAYtmB,EAAoB,IAChC7jd,EAAO+oe,EAAYA,EAAY/oe,MACnC5mB,EAAOC,QAAU,SAAU0H,EAAIwtP,GAE9B,OADA47P,EAAUppf,QACM/G,IAATu0P,EAAqBxtP,EAAKif,EAAOA,EAAKjf,EAAIwtP,GAAQ,WACxD,OAAOxtP,EAAGoF,MAAMooP,EAAM3sP,cAMjB,SAACxI,EAAQyye,EAA0BhI,GAE1C,IAAIylB,EAAkBzlB,EAAoB,IACtCuuB,EAAYvuB,EAAoB,IAChCqwB,EAAW5K,EAAgB,YAC3BqJ,EAAiBhzf,MAAMtD,UAC3BjD,EAAOC,QAAU,SAAUsmK,GAC1B,YAAc3lK,IAAP2lK,IAAqByyV,EAAUzyf,QAAUggK,GAAMgzV,EAAeuB,KAAcv0V,KAK7E,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B3ke,EAAO2ke,EAAoB,IAC3BsmB,EAAYtmB,EAAoB,IAChCknB,EAAWlnB,EAAoB,IAC/BumB,EAAcvmB,EAAoB,IAClCiyB,EAAoBjyB,EAAoB,IACxCtje,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUqe,EAAU6+e,GACpC,IAAIxnB,EAAiBnte,UAAU7B,OAAS,EAAI+1f,EAAkBp+e,GAAY6+e,EAC1E,GAAIpM,EAAUpb,GACb,OAAOgc,EAAS7rf,EAAK6ve,EAAgBr3d,IACtC,MAAMnX,EAAU6pf,EAAY1ye,GAAY,sBAKlC,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAImlB,EAAUnlB,EAAoB,IAC9BulB,EAAYvlB,EAAoB,IAChCuuB,EAAYvuB,EAAoB,IAEhCqwB,EADkBrwB,EAAoB,GAC3BylB,CAAgB,YAC/Blwf,EAAOC,QAAU,SAAUsmK,GAC1B,QAAU3lK,GAAN2lK,EACH,OAAOypV,EAAUzpV,EAAIu0V,IAAa9K,EAAUzpV,EAAI,eAAiByyV,EAAUpJ,EAAQrpV,MAK9E,SAACvmK,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B2yB,EAAwB3yB,EAAoB,IAC5C6lB,EAAa7lB,EAAoB,IACjC4yB,EAAa5yB,EAAoB,IAEjCkxB,EADkBlxB,EAAoB,GACtBylB,CAAgB,eAChChtf,EAAS8wK,EAAO9wK,OAChBo6f,EAEK,aAFeD,EAAY,WACnC,OAAO70f,UAD4B,IASpCxI,EAAOC,QAAUm9f,EAAwBC,EAAa,SAAU92V,GAC/D,IAAIk/F,EAAGzlF,EAAKtnK,EACZ,YAAc9X,IAAP2lK,EAAmB,YAAqB,OAAPA,EAAc,OAAiE,iBAAhDyZ,EAR3D,SAAUzZ,EAAIn9J,GAC1B,IACC,OAAOm9J,EAAGn9J,GACT,MAAO6J,KAKoEsqf,CAAO93P,EAAIviQ,EAAOqjK,GAAKo1V,IAA8B37U,EAAMs9U,EAAoBD,EAAW53P,GAAiC,WAA3B/sP,EAAS2kf,EAAW53P,KAAmB6qP,EAAW7qP,EAAE46G,QAAU,YAAc3nW,IAKnP,SAAC1Y,EAAQyye,EAA0BhI,GAE1C,IAEI5qb,EAAO,GACXA,EAHsB4qb,EAAoB,GACtBylB,CAAgB,gBAEd,IACtBlwf,EAAOC,QAA2B,eAAjB0T,OAAOksC,IAIjB,SAAC7/C,EAAQyye,EAA0BhI,GAE1C,IAAI3ke,EAAO2ke,EAAoB,IAC3BknB,EAAWlnB,EAAoB,IAC/BulB,EAAYvlB,EAAoB,IACpCzqe,EAAOC,QAAU,SAAUwE,EAAUyhZ,EAAM1lZ,GAC1C,IAAIg9f,EAAaC,EACjB9L,EAASltf,GACT,IAEC,KADA+4f,EAAcxN,EAAUvrf,EAAU,WAChB,CACjB,GAAa,UAATyhZ,EACH,MAAM1lZ,EACP,OAAOA,EAERg9f,EAAc13f,EAAK03f,EAAa/4f,GAC/B,MAAOwO,GACRwqf,GAAa,EACbD,EAAcvqf,EAEf,GAAa,UAATizY,EACH,MAAM1lZ,EACP,GAAIi9f,EACH,MAAMD,EAEP,OADA7L,EAAS6L,GACFh9f,IAKD,SAACR,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAI0kB,EAAgB1kB,EAAoB,IACpCinB,EAAuBjnB,EAAoB,IAC3CwkB,EAA2BxkB,EAAoB,IACnDzqe,EAAOC,QAAU,SAAUgJ,EAAQG,EAAK5I,GACvC,IAAIk9f,EAAcvO,EAAc/lf,GAC5Bs0f,KAAez0f,EAClByof,EAAqBl2a,EAAEvyE,EAAQy0f,EAAazO,EAAyB,EAAGzuf,IAExEyI,EAAOy0f,GAAel9f,IAKjB,SAACR,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IACjCzqe,EAAOC,QAAU+zK,GAIV,SAACh0K,EAAQyye,EAA0BhI,GAE1CA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpB,IAAI57W,EAAO47W,EAAoB,IAC/Bzqe,EAAOC,QAAU4uH,EAAK9qE,SAIf,SAACymb,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAAI5qU,EAAI4qU,EAAoB,GACxBz2T,EAASy2T,EAAoB,IAC7B+lB,EAAgB/lB,EAAoB,IACpC58c,EAAiB48c,EAAoB,IACrCnwZ,EAAiBmwZ,EAAoB,IACrC4jB,EAA4B5jB,EAAoB,IAChDtne,EAASsne,EAAoB,IAC7ByjB,EAA8BzjB,EAAoB,IAClDwkB,EAA2BxkB,EAAoB,IAC/CkzB,EAAkBlzB,EAAoB,IACtCmzB,EAAoBnzB,EAAoB,KACxCpyd,EAAUoyd,EAAoB,IAC9BozB,EAA0BpzB,EAAoB,KAC9CylB,EAAkBzlB,EAAoB,IACtCqzB,EAA0BrzB,EAAoB,KAC9CkxB,EAAgBzL,EAAgB,eAChCxjf,EAAQsnK,EAAOtnK,MACfwE,EAAO,GAAGA,KACV6sf,EAAkB,SAAwBlsW,EAAQ17G,GACrD,IAEIg/M,EAFArkN,EAAUtoC,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAChDo9f,EAAaxN,EAAcyN,EAAyBn5f,MAEpDw1E,EACH66K,EAAO76K,EAAe,IAAI5tE,OAAM9L,GAAYo9f,EAAanwe,EAAe/oB,MAAQm5f,IAEhF9oQ,EAAO6oQ,EAAal5f,KAAO3B,EAAO86f,GAClC/P,EAA4B/4P,EAAMwmQ,EAAe,UAElDzN,EAA4B/4P,EAAM,UAAW0oQ,EAAwB1nd,EAAS,KAC1E2nd,GACH5P,EAA4B/4P,EAAM,QAASwoQ,EAAgBxoQ,EAAKlkP,MAAO,IACxE2sf,EAAkBzoQ,EAAMrkN,GACxB,IAAIotd,EAAc,GAGlB,OAFA7lf,EAAQw5I,EAAQ3gJ,EAAM,CAAEikP,KAAM+oQ,IAC9BhQ,EAA4B/4P,EAAM,SAAU+oQ,GACrC/oQ,GAEJ76K,EACHA,EAAeyjb,EAAiBrxf,GAEhC2hf,EAA0B0P,EAAiBrxf,GAC5C,IAAIuxf,EAA0BF,EAAgB96f,UAAYE,EAAOuJ,EAAMzJ,UAAW,CACjFG,YAAa6rf,EAAyB,EAAG8O,GACzC5nd,QAAS84c,EAAyB,EAAG,IACrC37e,KAAM27e,EAAyB,EAAG,oBAEnCpvV,EAAE,CAAEmU,QAAQ,GAAQ,CAAEmqV,eAAgBJ,KAI/B,SAAC/9f,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC2zB,EAAa3zB,EAAoB,KACjC/sZ,EAAUiya,EAAY,GAAGjya,SACzB75B,EAAQ8rc,EAAY,GAAG9rc,OACvBt9B,EAAOope,EAAY,GAAGppe,MACtB83e,EACI1qf,OAAOjH,MACb,UADwBuE,OAEtBqtf,EAA2B,uBAC3BC,EAAwBD,EAAyBz+c,KAAKw+c,GACtDG,EAA6B,YAAY3+c,KAAKw+c,KAAU,SAASx+c,KAAKw+c,GAC1Er+f,EAAOC,QAAU,SAAUgR,EAAOwtf,GACjC,GAAoB,iBAATxtf,EACV,OAAOA,EACR,GAAIstf,EACH,KAAOE,KACNxtf,EAAQysE,EAAQzsE,EAAOqtf,EAA0B,SAC5C,GAAIE,EACV,OAAOj4e,EAAK63e,EAAWv6c,EAAM5yC,EAAO,MAAOwtf,GAAc,MAE1D,OAAOxtf,IAKD,SAACjR,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BkpB,EAAkBlpB,EAAoB,IACtCmpB,EAAoBnpB,EAAoB,IACxC8xB,EAAiB9xB,EAAoB,IACrClke,EAAQytK,EAAOztK,MACfzE,EAAMD,KAAKC,IACf9B,EAAOC,QAAU,SAAUwlQ,EAAG5gP,EAAOvjB,GAKpC,IAJA,IAAIqF,EAASitf,EAAkBnuP,GAC3BxgQ,EAAI0uf,EAAgB9ue,EAAOle,GAC3B+3f,EAAM/K,OAAwB/yf,IAARU,EAAoBqF,EAASrF,EAAKqF,GACxD+R,EAASnS,EAAMzE,EAAI48f,EAAMz5f,EAAG,IACvBiG,EAAI,EAAGjG,EAAIy5f,EAAKz5f,IAAKiG,IAC7Bqxf,EAAe7jf,EAAQxN,EAAGu6P,EAAExgQ,IAE7B,OADAyT,EAAO/R,OAASuE,EACTwN,IAKD,SAAC1Y,EAAQyye,EAA0BhI,GAE1C,IAAIhuT,EAAWguT,EAAoB,IAC/ByjB,EAA8BzjB,EAAoB,IACtDzqe,EAAOC,QAAU,SAAUwlQ,EAAG30N,GACzB2rI,EAAS3rI,IAAY,UAAWA,GACnCo9c,EAA4BzoP,EAAG,QAAS30N,EAAQ6td,SAM3C,SAAC3+f,EAAQyye,EAA0BhI,GAE1C,IAAI1ke,EAAW0ke,EAAoB,KACnCzqe,EAAOC,QAAU,SAAUqe,EAAUsgf,GACpC,YAAoBh+f,IAAb0d,EAAyB9V,UAAU7B,OAAS,EAAI,GAAKi4f,EAAW74f,EAASuY,KAK1E,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7BmlB,EAAUnlB,EAAoB,IAC9B92d,EAASqgK,EAAOrgK,OACpB3T,EAAOC,QAAU,SAAUqe,GAC1B,GAA0B,WAAtBsxe,EAAQtxe,GACX,MAAMnX,UAAU,6CACjB,OAAOwM,EAAO2K,KAKR,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAI6kB,EAAQ7kB,EAAoB,IAC5BwkB,EAA2BxkB,EAAoB,IACnDzqe,EAAOC,SAAWqvf,GAAM,WACvB,IAAIr8e,EAAQvG,MAAM,KAClB,QAAM,UAAWuG,KAEjB/P,OAAOyJ,eAAesG,EAAO,QAASg8e,EAAyB,EAAG,IAC3C,IAAhBh8e,EAAMhC,WAKP,SAACu5d,EAAyBiI,EAA0BhI,GAE3D,IAAI2yB,EAAwB3yB,EAAoB,IAC5C0jB,EAAW1jB,EAAoB,IAC/B1ke,EAAW0ke,EAAoB,KAC9B2yB,GACJjP,EAASjrf,OAAOD,UAAW,WAAY8C,EAAU,CAAEusf,QAAQ,KAKrD,SAACtyf,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAI2yB,EAAwB3yB,EAAoB,IAC5CmlB,EAAUnlB,EAAoB,IAClCzqe,EAAOC,QAAUm9f,EAAwB,GAAGr3f,SAAW,WACtD,MAAO,WAAa6pf,EAAQ9qf,MAAQ,MAK9B,SAAC0le,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAsDIo0B,EAAUC,EAAsBC,EAAgBC,EAtDhDn/V,EAAI4qU,EAAoB,GACxB4mB,EAAU5mB,EAAoB,IAC9Bz2T,EAASy2T,EAAoB,IAC7B8lB,EAAa9lB,EAAoB,IACjC3ke,EAAO2ke,EAAoB,IAC3Bw0B,EAAgBx0B,EAAoB,KACpC0jB,EAAW1jB,EAAoB,IAC/By0B,EAAcz0B,EAAoB,KAClCnwZ,EAAiBmwZ,EAAoB,IACrCiwB,EAAiBjwB,EAAoB,IACrC00B,EAAa10B,EAAoB,KACjCsmB,EAAYtmB,EAAoB,IAChC6lB,EAAa7lB,EAAoB,IACjChuT,EAAWguT,EAAoB,IAC/B20B,EAAa30B,EAAoB,KACjCqnB,EAAgBrnB,EAAoB,IACpCpyd,EAAUoyd,EAAoB,IAC9B40B,EAA8B50B,EAAoB,KAClD60B,EAAqB70B,EAAoB,KACzCh6c,EAAQg6c,EAAoB,KAAKj+d,IACjC+yf,EAAY90B,EAAoB,KAChC+0B,EAAiB/0B,EAAoB,KACrCg1B,EAAmBh1B,EAAoB,KACvCi1B,EAA6Bj1B,EAAoB,KACjDk1B,EAAUl1B,EAAoB,KAC9BsnB,EAAsBtnB,EAAoB,IAC1C6jB,EAAW7jB,EAAoB,IAC/BylB,EAAkBzlB,EAAoB,IACtCm1B,EAAan1B,EAAoB,KACjCo1B,EAAUp1B,EAAoB,KAC9BmmB,EAAanmB,EAAoB,IACjCq1B,EAAU5P,EAAgB,WAC1B6P,EAAU,UACV7N,EAAmBH,EAAoBoB,UAAU4M,GACjD5G,EAAmBpH,EAAoBvlf,IACvCwzf,EAA0BjO,EAAoBoB,UAAU4M,GACxDE,EAAyBhB,GAAiBA,EAAch8f,UACxDi9f,EAAqBjB,EACrBkB,EAAmBF,EACnB94f,EAAY6sK,EAAO7sK,UACnB2jC,EAAWkpI,EAAOlpI,SAClB9X,EAAUghJ,EAAOhhJ,QACjBote,EAAuBV,EAA2Blkb,EAClD6kb,EAA8BD,EAC9BE,KAAoBx1d,GAAYA,EAASwvX,aAAetmP,EAAOusV,eAC/DC,EAAyBlQ,EAAWt8U,EAAOysV,uBAC3CC,EAAsB,qBAOtBC,IAAc,EAEdvF,GAAS9M,EAASyR,GAAS,WAC9B,IAAIa,EAA6B9O,EAAcoO,GAC3CW,EAAyBD,IAA+Bjtf,OAAOusf,GACnE,IAAKW,GAAyC,KAAfjQ,EAC9B,OAAO,EACR,GAAIS,IAAY8O,EAAgB,QAC/B,OAAO,EACR,GAAIvP,GAAc,IAAM,cAAc/wc,KAAK+gd,GAC1C,OAAO,EACR,IAAI95W,EAAU,IAAIo5W,GAAmB,SAAUl8c,GAC9CA,EAAQ,MAEL88c,EAAc,SAAUjwW,GAC3BA,GAAK,eACF,gBAOJ,OAJkB/J,EAAQ1jJ,YAAc,IAC5B08f,GAAWgB,IACvBH,GAAc75W,EAAQzrE,MAAK,yBACbylb,KAGND,GAA0BjB,IAAeY,KAE9CO,GAAsB3F,KAAWiE,GAA4B,SAAUz5f,GAC1Es6f,EAAmB30T,IAAI3lM,GAAvB,OAA0C,kBAGvCw4W,GAAa,SAAU73M,GAC1B,IAAIlrF,EACJ,SAAOohG,EAASlW,KAAO+pV,EAAWj1a,EAAOkrF,EAAGlrF,QAAQA,GAEjDzxC,GAAS,SAAUkC,EAAOk1d,GAC7B,IAAIl1d,EAAM8zK,SAAV,CAEA9zK,EAAM8zK,UAAW,EACjB,IAAIn1L,EAAQqhB,EAAMm1d,UAClB1B,GAAU,WAIT,IAHA,IAAI/+f,EAAQsrC,EAAMtrC,MACd0sG,EA9CU,GA8CLphE,EAAMA,MACX7qC,EAAQ,EACLwpB,EAAM9jB,OAAS1F,GAAO,CAC5B,IAKIyX,EAAQ2iE,EAAM6lb,EALdC,EAAW12e,EAAMxpB,KACjB88M,EAAU7wG,EAAKi0Z,EAASj0Z,GAAKi0Z,EAASC,KACtCp9c,EAAUm9c,EAASn9c,QACnBi3B,EAASkmb,EAASlmb,OAClB29H,EAASuoT,EAASvoT,OAEtB,IACKmF,GACE7wG,IAtDM,IAuDNphE,EAAMu1d,WACTC,GAAkBx1d,GACnBA,EAAMu1d,UA1DE,IA4DO,IAAZtjT,EACHrlM,EAASlY,GAELo4M,GACHA,EAAO7tE,QACRryH,EAASqlM,EAAQv9M,GACbo4M,IACHA,EAAO3tE,OACPi2X,GAAS,IAGPxof,IAAWyof,EAASr6W,QACvB7rE,EAAO9zE,EAAU,yBACPk0E,EAAO+iS,GAAW1lW,IAC5B5S,EAAKu1E,EAAM3iE,EAAQsrC,EAASi3B,GAE5Bj3B,EAAQtrC,IAETuiE,EAAOz6E,GACP,MAAOyS,GACJ2lM,IAAWsoT,GACdtoT,EAAO3tE,OACRhwD,EAAOhoE,IAGT64B,EAAMm1d,UAAY,GAClBn1d,EAAM8zK,UAAW,EACbohT,IAAal1d,EAAMu1d,WACtBE,GAAYz1d,QAGXy0d,GAAgB,SAAUjtf,EAAMwzI,EAASz2B,GAC5C,IAAI4b,EAAO8xE,EACPuiT,IACHr0X,EAAQnhG,EAASwvX,YAAY,UACvBxzQ,QAAUA,EAChB7a,EAAM5b,OAASA,EACf4b,EAAMu1X,UAAUluf,GAAM,GAAO,GAC7B0gK,EAAOusV,cAAct0X,IAErBA,EAAQ,CACP6a,QAASA,EACTz2B,OAAQA,IAELmwY,IAA2BziT,EAAU/pC,EAAO,KAAO1gK,IACvDyqM,EAAQ9xE,GACA34H,IAASotf,GACjBjB,EAAiB,8BAA+BpvY,IAE9CkxY,GAAc,SAAUz1d,GAC3BhmC,EAAK2qB,EAAMujJ,GAAQ,WAClB,IAGIt7J,EAHAouI,EAAUh7G,EAAMmnd,OAChBzyf,EAAQsrC,EAAMtrC,MAGlB,GAFmBihgB,GAAY31d,KAG9BpzB,EAASinf,GAAQ,WACZE,EACH7se,EAAQ06E,KAAK,qBAAsBltG,EAAOsmJ,GAE1Cy5W,GAAcG,EAAqB55W,EAAStmJ,MAE9CsrC,EAAMu1d,UAAYxB,GAAW4B,GAAY31d,GAzH5B,EADF,EA2HPpzB,EAAOzF,OACV,MAAMyF,EAAOlY,UAIbihgB,GAAc,SAAU31d,GAC3B,OAjIa,IAiINA,EAAMu1d,YAA0Bv1d,EAAM0V,QAE1C8/c,GAAoB,SAAUx1d,GACjChmC,EAAK2qB,EAAMujJ,GAAQ,WAClB,IAAIltB,EAAUh7G,EAAMmnd,OAChB4M,EACH7se,EAAQ06E,KAAK,mBAAoBo5C,GAEjCy5W,GA7IqB,mBA6IYz5W,EAASh7G,EAAMtrC,WAG/ComB,GAAO,SAAUjf,EAAImkC,EAAO41d,GAC/B,OAAO,SAAUlhgB,GAChBmH,EAAGmkC,EAAOtrC,EAAOkhgB,KAGfC,GAAiB,SAAU71d,EAAOtrC,EAAOkhgB,GACxC51d,EAAM1mC,OAEV0mC,EAAM1mC,MAAO,EACTs8f,IACH51d,EAAQ41d,GACT51d,EAAMtrC,MAAQA,EACdsrC,EAAMA,MAzJQ,EA0JdlC,GAAOkC,GAAO,KAEX81d,GAAkB,SAAlBA,EAA4B91d,EAAOtrC,EAAOkhgB,GAC7C,IAAI51d,EAAM1mC,KAAV,CAEA0mC,EAAM1mC,MAAO,EACTs8f,IACH51d,EAAQ41d,GACT,IACC,GAAI51d,EAAMmnd,SAAWzyf,EACpB,MAAM2G,EAAU,oCACjB,IAAIk0E,EAAO+iS,GAAW59W,GAClB66E,EACHkkb,GAAU,WACT,IAAI5wU,EAAU,CAAEvpL,MAAM,GACtB,IACCU,EAAKu1E,EAAM76E,EAAOomB,GAAKg7e,EAAiBjzU,EAAS7iJ,GAAQllB,GAAK+6e,GAAgBhzU,EAAS7iJ,IACtF,MAAO74B,GACR0uf,GAAehzU,EAAS17K,EAAO64B,QAIjCA,EAAMtrC,MAAQA,EACdsrC,EAAMA,MAlLO,EAmLblC,GAAOkC,GAAO,IAEd,MAAO74B,GACR0uf,GAAe,CAAEv8f,MAAM,GAAS6N,EAAO64B,MAGzC,GAAIsvd,KAYH+E,GAXAD,EAAqB,SAAiB2B,GACrCzC,EAAWt6f,KAAMq7f,GACjBpP,EAAU8Q,GACV/7f,EAAK+4f,EAAU/5f,MACf,IAAIgnC,EAAQomd,EAAiBptf,MAC7B,IACC+8f,EAASj7e,GAAKg7e,GAAiB91d,GAAQllB,GAAK+6e,GAAgB71d,IAC3D,MAAO74B,GACR0uf,GAAe71d,EAAO74B,MAGchQ,WACtC47f,EAAW,SAAiBgD,GAC3B1I,EAAiBr0f,KAAM,CACtBE,KAAM+6f,EACN36f,MAAM,EACNw6M,UAAU,EACVp+J,QAAQ,EACRy/c,UAAW,GACXI,WAAW,EACXv1d,MA/MW,EAgNXtrC,WAAOI,MAGAqC,UAAYi8f,EAAYiB,EAAkB,CAClD9kb,KAAM,SAAcymb,EAAaC,GAChC,IAAIj2d,EAAQk0d,EAAwBl7f,MAChCm8f,EAAYn1d,EAAMm1d,UAClBE,EAAWf,EAAqBd,EAAmBx6f,KAAMo7f,IAQ7D,OAPAiB,EAASj0Z,IAAKojZ,EAAWwR,IAAeA,EACxCX,EAASC,KAAO9Q,EAAWyR,IAAeA,EAC1CZ,EAASvoT,OAASinT,EAAU7se,EAAQ4lL,YAASh4M,EAC7CkrC,EAAM0V,QAAS,EACfy/c,EAAUA,EAAUt6f,QAAUw6f,EA5NnB,GA6NPr1d,EAAMA,OACTlC,GAAOkC,GAAO,GACRq1d,EAASr6W,SAEjB,MAAS,SAAUi7W,GAClB,OAAOj9f,KAAKu2E,UAAKz6E,EAAWmhgB,MAG9BjD,EAAuB,WACtB,IAAIh4W,EAAU,IAAI+3W,EACd/yd,EAAQomd,EAAiBprW,GAC7BhiJ,KAAKgiJ,QAAUA,EACfhiJ,KAAKk/C,QAAUp9B,GAAKg7e,GAAiB91d,GACrChnC,KAAKm2E,OAASr0D,GAAK+6e,GAAgB71d,IAEpC4zd,EAA2Blkb,EAAI4kb,EAAuB,SAAUvhW,GAC/D,OAAOA,IAAMqhW,GAAsBrhW,IAAMkgW,EAAiB,IAAID,EAAqBjgW,GAAKwhW,EAA4BxhW,KAEhHwyV,GAAWf,EAAW2O,IAAkBgB,IAA2B/8f,OAAOD,WAAW,CACzF+7f,EAAaiB,EAAuB5kb,KAC/Bslb,KACJxS,EAAS8R,EAAwB,QAAQ,SAAc6B,EAAaC,GACnE,IAAI5sQ,EAAOrwP,KACX,OAAO,IAAIo7f,GAAmB,SAAUl8c,EAASi3B,GAChDn1E,EAAKk5f,EAAY7pQ,EAAMnxM,EAASi3B,MAC9BI,KAAKymb,EAAaC,KACnB,CAAEzP,QAAQ,IACbnE,EAAS8R,EAAwB,QAASE,EAAgB,MAAW,CAAE7N,QAAQ,KAEhF,WACQ2N,EAAuB78f,YAC7B,MAAO6P,KAELqnE,GACHA,EAAe2lb,EAAwBE,GAI1CtgW,EAAE,CACDmU,QAAQ,EACR10F,MAAM,EACNwva,OAAQsM,IACN,CAAEr3c,QAASm8c,IACdxF,EAAewF,EAAoBH,GAAS,GAAO,GACnDZ,EAAWY,GACXhB,EAAiBxO,EAAWwP,GAC5BlgW,EAAE,CACD/tI,OAAQiue,EACRnR,MAAM,EACNE,OAAQsM,IACN,CACFngb,OAAQ,SAAgBgB,GACvB,IAAIq+Z,EAAa8lB,EAAqBt7f,MAEtC,OADAgB,EAAKw0e,EAAWr/Z,YAAQr6E,EAAWq7E,GAC5Bq+Z,EAAWxzV,WAGpB+Y,EAAE,CACD/tI,OAAQiue,EACRnR,MAAM,EACNE,OAAQuC,GAAW+J,IACjB,CACFp3c,QAAS,SAAiBrnC,GACzB,OAAO6if,EAAenO,GAAWvsf,OAASi6f,EAAiBmB,EAAqBp7f,KAAM6X,MAGxFkjJ,EAAE,CACD/tI,OAAQiue,EACRnR,MAAM,EACNE,OAAQiS,IACN,CACFx1T,IAAK,SAAa3lM,GACjB,IAAIi5J,EAAI/5J,KACJw1e,EAAa8lB,EAAqBvhW,GAClC76G,EAAUs2b,EAAWt2b,QACrBi3B,EAASq/Z,EAAWr/Z,OACpBviE,EAASinf,GAAQ,WACpB,IAAIqC,EAAkBjR,EAAUlyV,EAAE76G,SAC9B/zC,EAAS,GACTyga,EAAU,EACV/8O,EAAY,EAChBt7K,EAAQzS,GAAU,SAAUkhJ,GAC3B,IAAI7lJ,EAAQyva,IACRuxF,GAAgB,EACpBtuU,IACA7tL,EAAKk8f,EAAiBnjW,EAAG/X,GAASzrE,MAAK,SAAU76E,GAC5CyhgB,IAEJA,GAAgB,EAChBhyf,EAAOhP,GAAST,IACdmzL,GAAa3vI,EAAQ/zC,MACrBgrE,QAEF04G,GAAa3vI,EAAQ/zC,MAIxB,OAFIyI,EAAOzF,OACVgoE,EAAOviE,EAAOlY,OACR85e,EAAWxzV,SAEnB15C,KAAM,SAAcxnG,GACnB,IAAIi5J,EAAI/5J,KACJw1e,EAAa8lB,EAAqBvhW,GAClC5jF,EAASq/Z,EAAWr/Z,OACpBviE,EAASinf,GAAQ,WACpB,IAAIqC,EAAkBjR,EAAUlyV,EAAE76G,SAClC3rC,EAAQzS,GAAU,SAAUkhJ,GAC3BhhJ,EAAKk8f,EAAiBnjW,EAAG/X,GAASzrE,KAAKi/Z,EAAWt2b,QAASi3B,SAK7D,OAFIviE,EAAOzF,OACVgoE,EAAOviE,EAAOlY,OACR85e,EAAWxzV,YAMb,SAAC9mJ,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IACjCzqe,EAAOC,QAAU+zK,EAAOjwH,SAIjB,SAAC/jD,EAAQyye,EAA0BhI,GAE1C,IAAI0jB,EAAW1jB,EAAoB,IACnCzqe,EAAOC,QAAU,SAAU6xB,EAAQw5F,EAAKx6E,GACvC,IAAK,IAAI1nC,KAAOkiH,EACf6iY,EAASr8d,EAAQ1oB,EAAKkiH,EAAIliH,GAAM0nC,GACjC,OAAOhf,IAKD,SAAC9xB,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAI8lB,EAAa9lB,EAAoB,IACjCinB,EAAuBjnB,EAAoB,IAC3CylB,EAAkBzlB,EAAoB,IACtCskB,EAActkB,EAAoB,IAClCq1B,EAAU5P,EAAgB,WAC9Blwf,EAAOC,QAAU,SAAUiigB,GAC1B,IAAI9ve,EAAcm+d,EAAW2R,GACzBv1f,EAAiB+kf,EAAqBl2a,EACtCuza,GAAe38d,IAAgBA,EAAY0te,IAC9Cnzf,EAAeylB,EAAa0te,EAAS,CACpCjzf,cAAc,EACdhE,IAAK,WACJ,OAAO/D,UAQJ,SAAC9E,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7B+lB,EAAgB/lB,EAAoB,IACpCtje,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUsmK,EAAI47V,GAC9B,GAAI3R,EAAc2R,EAAW57V,GAC5B,OAAOA,EACR,MAAMp/J,EAAU,0BAKV,SAACnH,EAAQyye,EAA0BhI,GAE1C,IACIqwB,EADkBrwB,EAAoB,GAC3BylB,CAAgB,YAC3BkS,GAAe,EACnB,IACC,IAAI14P,EAAS,EACT24P,EAAqB,CACxBx9f,KAAM,WACL,MAAO,CAAEO,OAAQskQ,MAElB,OAAU,WACT04P,GAAe,IAGjBC,EAAmBvH,GAAY,WAC9B,OAAOh2f,MAERyB,MAAMuN,KAAKuuf,GAAoB,WAC9B,MAAM,KAEN,MAAOpvf,IAETjT,EAAOC,QAAU,SAAU4wJ,EAAMyxW,GAChC,IAAKA,IAAiBF,EACrB,OAAO,EACR,IAAIG,GAAoB,EACxB,IACC,IAAIt5f,EAAS,GACbA,EAAO6xf,GAAY,WAClB,MAAO,CACNj2f,KAAM,WACL,MAAO,CAAEO,KAAMm9f,GAAoB,MAItC1xW,EAAK5nJ,GACJ,MAAOgK,IAET,OAAOsvf,IAKD,SAACvigB,EAAQyye,EAA0BhI,GAE1C,IAAIknB,EAAWlnB,EAAoB,IAC/B+3B,EAAe/3B,EAAoB,KAEnCq1B,EADkBr1B,EAAoB,GAC5BylB,CAAgB,WAC9Blwf,EAAOC,QAAU,SAAUwlQ,EAAGg9P,GAC7B,IACIhjW,EADAZ,EAAI8yV,EAASlsP,GAAGriQ,YAEpB,YAAaxC,IAANi+J,QAAiDj+J,IAA7B6+J,EAAIkyV,EAAS9yV,GAAGihW,IAAyB2C,EAAqBD,EAAa/iW,KAKhG,SAACz/J,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IAC7Bi4B,EAAgBj4B,EAAoB,KACpCumB,EAAcvmB,EAAoB,IAClCtje,EAAY6sK,EAAO7sK,UACvBnH,EAAOC,QAAU,SAAUqe,GAC1B,GAAIokf,EAAcpkf,GACjB,OAAOA,EACR,MAAMnX,EAAU6pf,EAAY1ye,GAAY,2BAKlC,SAACte,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClC6kB,EAAQ7kB,EAAoB,IAC5B6lB,EAAa7lB,EAAoB,IACjCmlB,EAAUnlB,EAAoB,IAC9B8lB,EAAa9lB,EAAoB,IACjCqnB,EAAgBrnB,EAAoB,IACpCl3U,EAAO,aAEPt2I,EAAQ,GACRmgE,EAAYmza,EAAW,UAAW,aAClCoS,EAAoB,2BACpB9xW,EAAO8+V,EAAYgT,EAAkB9xW,MACrC+xW,GAAuBD,EAAkB9xW,KAAK0C,GAC9CsvW,EAAsB,SAAUvkf,GACnC,IAAKgye,EAAWhye,GACf,OAAO,EACR,IAEC,OADA8+D,EAAUm2E,EAAMt2I,EAAOqB,IAChB,EACN,MAAOrL,GACR,OAAO,IAcTjT,EAAOC,SAAWm9E,GAAakya,GAAM,WACpC,IAAI5lP,EACJ,OAAOm5P,EAAoBA,EAAoB/8f,QAAU+8f,EAAoB3/f,UAAY2/f,GAAoB,WAC5Gn5P,GAAS,MACJA,KAfmB,SAAUprP,GACnC,IAAKgye,EAAWhye,GACf,OAAO,EACR,OAAQsxe,EAAQtxe,IAChB,IAAK,gBACL,IAAK,oBACL,IAAK,yBACJ,OAAO,EAER,OAAOskf,KAAyB/xW,EAAK8xW,EAAmB7Q,EAAcxze,KAO5Cukf,GAIpB,SAAC7igB,EAAQyye,EAA0BhI,GAE1C,IAqBIl8a,EAAUo4F,EAAO73H,EAASg0e,EArB1B9uV,EAASy2T,EAAoB,IAC7B19d,EAAQ09d,EAAoB,KAC5B7jd,EAAO6jd,EAAoB,IAC3B6lB,EAAa7lB,EAAoB,IACjC/mR,EAAS+mR,EAAoB,IAC7B6kB,EAAQ7kB,EAAoB,IAC5BivB,EAAOjvB,EAAoB,IAC3B2zB,EAAa3zB,EAAoB,KACjC1/b,EAAgB0/b,EAAoB,IACpCs4B,EAASt4B,EAAoB,KAC7Bo1B,EAAUp1B,EAAoB,KAC9Bj+d,EAAMwnK,EAAOgvV,aACbhrf,EAAQg8J,EAAOivV,eACfjwe,EAAUghJ,EAAOhhJ,QACjBkwe,EAAWlvV,EAAOkvV,SAClB/uV,EAAWH,EAAOG,SAClBgvV,EAAiBnvV,EAAOmvV,eACxBxvf,EAASqgK,EAAOrgK,OAChB+8Z,EAAU,EACVr/Q,EAAQ,GACR+xW,EAAqB,qBAEzB,IACC70c,EAAWylH,EAAOzlH,SACjB,MAAOt7C,IAET,IAAIowf,EAAM,SAAUt9d,GACnB,GAAI29K,EAAOryD,EAAOtrH,GAAK,CACtB,IAAIp+B,EAAK0pJ,EAAMtrH,UACRsrH,EAAMtrH,GACbp+B,MAGE27f,EAAS,SAAUv9d,GACtB,OAAO,WACNs9d,EAAIt9d,KAGF+D,EAAW,SAAUmiG,GACxBo3X,EAAIp3X,EAAMnsF,OAEPu4X,EAAO,SAAUtyY,GACpBiuI,EAAOuvV,YAAY5vf,EAAOoyB,GAAKwoB,EAAS8jb,SAAW,KAAO9jb,EAASi1c,OAE/Dh3f,GAAQwL,IACZxL,EAAM,SAAsB7E,GAC3B,IAAImoB,EAAOsue,EAAW51f,UAAW,GAKjC,OAJA6oJ,IAAQq/Q,GAAW,WAClB3ja,EAAMujf,EAAW3of,GAAMA,EAAKwsK,EAASxsK,QAAK/G,EAAWkvB,IAEtD62H,EAAM+pR,GACCA,GAER14Z,EAAQ,SAAwB+tB,UACxBsrH,EAAMtrH,IAEV85d,EACHl5W,EAAQ,SAAU5gH,GACjB/S,EAAQywe,SAASH,EAAOv9d,KAEfm9d,GAAYA,EAASt+c,IAC/B+hG,EAAQ,SAAU5gH,GACjBm9d,EAASt+c,IAAI0+c,EAAOv9d,KAEXo9d,IAAmBJ,GAE7BD,GADAh0e,EAAU,IAAIq0e,GACCO,MACf50e,EAAQ60e,MAAMC,UAAY95d,EAC1B68G,EAAQ//H,EAAKk8e,EAAKS,YAAaT,IACrB9uV,EAAOlmE,kBAAoBwiZ,EAAWt8U,EAAOuvV,eAAiBvvV,EAAO6vV,eAAiBt1c,GAAkC,UAAtBA,EAAS8jb,WAAyBid,EAAMj3E,IACpJ1xR,EAAQ0xR,EACRrkQ,EAAOlmE,iBAAiB,UAAWhkE,GAAU,IAE7C68G,EADUy8W,KAAsBr4d,EAAc,UACtC,SAAUhF,GACjB2zd,EAAK13M,YAAYj3Q,EAAc,WAA/B,mBAAgE,WAC/D2ud,EAAKz3M,YAAYn9S,MACjBu+f,EAAIt9d,KAIE,SAAUA,GACjB4X,WAAW2ld,EAAOv9d,GAAK,KAI1B/lC,EAAOC,QAAU,CAChBuM,IAAKA,EACLwL,MAAOA,IAKD,SAAChY,GAER,IAAI6vf,EAAoB17U,SAASlxK,UAC7B8J,EAAQ8if,EAAkB9if,MAC1B6Z,EAAOipe,EAAkBjpe,KACzB9gB,EAAO+pf,EAAkB/pf,KAC7B9F,EAAOC,QAA4B,iBAAXk9E,SAAuBA,QAAQpwE,QAAU6Z,EAAO9gB,EAAK8gB,KAAK7Z,GAAS,WAC1F,OAAOjH,EAAKiH,MAAMA,EAAOvE,cAKnB,SAACxI,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IACtCzqe,EAAOC,QAAU0vf,EAAY,GAAG/6e,QAIzB,SAAC5U,EAAQyye,EAA0BhI,GAE1C,IAAIx0R,EAAYw0R,EAAoB,IACpCzqe,EAAOC,QAAU,qCAAqC4/C,KAAKo2J,IAIpD,SAACj2M,EAAQyye,EAA0BhI,GAE1C,IAAImlB,EAAUnlB,EAAoB,IAC9Bz2T,EAASy2T,EAAoB,IACjCzqe,EAAOC,QAAqC,WAA3B2vf,EAAQ57U,EAAOhhJ,UAIzB,SAAChzB,EAAQyye,EAA0BhI,GAE1C,IAcI7zS,EAAO90K,EAAMgH,EAAM8gB,EAAQq8X,EAAQ/5Z,EAAM46I,EAASzrE,EAdlD24F,EAASy2T,EAAoB,IAC7B7jd,EAAO6jd,EAAoB,IAC3B74c,EAA4B64c,EAAoB,IAAIjvZ,EACpDsob,EAAar5B,EAAoB,KAAKj+d,IACtCu2f,EAASt4B,EAAoB,KAC7Bs5B,EAAgBt5B,EAAoB,KACpCu5B,EAAkBv5B,EAAoB,KACtCo1B,EAAUp1B,EAAoB,KAC9BhsR,EAAmBzqC,EAAOyqC,kBAAoBzqC,EAAOiwV,uBACrDn5d,EAAWkpI,EAAOlpI,SAClB9X,EAAUghJ,EAAOhhJ,QACjB+wB,EAAUiwH,EAAOjwH,QACjBmgd,EAA2Btye,EAAyBoiJ,EAAQ,kBAC5DmwV,EAAiBD,GAA4BA,EAAyB1jgB,MAErE2jgB,IACJvtU,EAAQ,WACP,IAAIp1I,EAAQ75C,EAGZ,IAFIk4f,IAAYr+c,EAASxuB,EAAQ4lL,SAChCp3J,EAAOypF,OACDnpH,GAAM,CACZna,EAAKma,EAAKna,GACVma,EAAOA,EAAKjd,KACZ,IACC8C,IACC,MAAOsL,GAKR,MAJI6O,EACH8nB,IAEA9gB,OAAOloB,EACFqS,GAGR6V,OAAOloB,EACH4gD,GACHA,EAAOupF,SAEJg4X,GAAWlD,GAAYmE,IAAmBvlT,IAAoB3zK,GAOvDi5d,GAAiBhgd,GAAWA,EAAQC,UAC/C8iG,EAAU/iG,EAAQC,aAAQpjD,IAClBwC,YAAc2gD,EACtBs3B,EAAOz0D,EAAKkgI,EAAQzrE,KAAMyrE,GAC1Bl9G,EAAS,WACRyxC,EAAKu7G,KAEIipU,EACVj2d,EAAS,WACR5W,EAAQywe,SAAS7sU,KAGlBktU,EAAYl9e,EAAKk9e,EAAW9vV,GAC5BpqI,EAAS,WACRk6d,EAAUltU,MApBXqvO,GAAS,EACT/5Z,EAAO4+B,EAASs5d,eAAe,IAC/B,IAAI3lT,EAAiB7nB,GAAO7yD,QAAQ73H,EAAM,CAAEw3a,eAAe,IAC3D95Y,EAAS,WACR19B,EAAK4zC,KAAOmmX,GAAUA,KAoBzBjma,EAAOC,QAAUkkgB,GAAkB,SAAUx8f,GAC5C,IAAI8oB,EAAO,CACV9oB,GAAIA,EACJ9C,UAAMjE,GAEHkoB,IACHA,EAAKjkB,KAAO4rB,GACR3O,IACJA,EAAO2O,EACPmZ,KAED9gB,EAAO2H,IAKD,SAACzwB,EAAQyye,EAA0BhI,GAE1C,IAAIx0R,EAAYw0R,EAAoB,IAChCz2T,EAASy2T,EAAoB,IACjCzqe,EAAOC,QAAU,oBAAoB4/C,KAAKo2J,SAAgCr1M,IAAlBozK,EAAOqwV,QAIxD,SAACrkgB,EAAQyye,EAA0BhI,GAE1C,IAAIx0R,EAAYw0R,EAAoB,IACpCzqe,EAAOC,QAAU,qBAAqB4/C,KAAKo2J,IAIpC,SAACj2M,EAAQyye,EAA0BhI,GAE1C,IAAIknB,EAAWlnB,EAAoB,IAC/BhuT,EAAWguT,EAAoB,IAC/B21B,EAAuB31B,EAAoB,KAC/Czqe,EAAOC,QAAU,SAAU4+J,EAAGliJ,GAE7B,GADAg1e,EAAS9yV,GACL4d,EAAS9/J,IAAMA,EAAEvZ,cAAgBy7J,EACpC,OAAOliJ,EACR,IAAI2nf,EAAoBlE,EAAqB5kb,EAAEqjF,GAG/C,OADA76G,EADcsgd,EAAkBtgd,SACxBrnC,GACD2nf,EAAkBx9W,UAKnB,SAAC9mJ,EAAQyye,EAA0BhI,GAE1C,aAEA,IAAIsmB,EAAYtmB,EAAoB,IAChC85B,EAAoB,SAAU1lW,GACjC,IAAI76G,EAASi3B,EACbn2E,KAAKgiJ,QAAU,IAAI+X,GAAE,SAAU2lW,EAAWC,GACzC,QAAgB7jgB,IAAZojD,QAAoCpjD,IAAXq6E,EAC5B,MAAM9zE,UAAU,2BACjB68C,EAAUwgd,EACVvpb,EAASwpb,KAEV3/f,KAAKk/C,QAAU+sc,EAAU/sc,GACzBl/C,KAAKm2E,OAAS81a,EAAU91a,IAEzBj7E,EAAOC,QAAQu7E,EAAI,SAAUqjF,GAC5B,OAAO,IAAI0lW,EAAkB1lW,KAKvB,SAAC7+J,EAAQyye,EAA0BhI,GAE1C,IAAIz2T,EAASy2T,EAAoB,IACjCzqe,EAAOC,QAAU,SAAUwK,EAAGC,GAC7B,IAAIoiB,EAAUknJ,EAAOlnJ,QACjBA,GAAWA,EAAQ7Z,QACF,GAApBzK,UAAU7B,OAAcmmB,EAAQ7Z,MAAMxI,GAAKqiB,EAAQ7Z,MAAMxI,EAAGC,MAMvD,SAAC1K,GAERA,EAAOC,QAAU,SAAU4wJ,GAC1B,IACC,MAAO,CACN59I,OAAO,EACPzS,MAAOqwJ,KAEP,MAAO59I,GACR,MAAO,CACNA,OAAO,EACPzS,MAAOyS,MAOH,SAACjT,GAERA,EAAOC,QAA2B,iBAAVuzB,QAIjB,SAACg3c,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAAI5qU,EAAI4qU,EAAoB,GACxB3ke,EAAO2ke,EAAoB,IAC3BsmB,EAAYtmB,EAAoB,IAChCi1B,EAA6Bj1B,EAAoB,KACjDk1B,EAAUl1B,EAAoB,KAC9Bpyd,EAAUoyd,EAAoB,IAClC5qU,EAAE,CACD/tI,OAAQ,UACR88d,MAAM,GACJ,CACFd,WAAY,SAAoBlof,GAC/B,IAAIi5J,EAAI/5J,KACJw1e,EAAaolB,EAA2Blkb,EAAEqjF,GAC1C76G,EAAUs2b,EAAWt2b,QACrBi3B,EAASq/Z,EAAWr/Z,OACpBviE,EAASinf,GAAQ,WACpB,IAAIH,EAAiBzO,EAAUlyV,EAAE76G,SAC7B/zC,EAAS,GACTyga,EAAU,EACV/8O,EAAY,EAChBt7K,EAAQzS,GAAU,SAAUkhJ,GAC3B,IAAI7lJ,EAAQyva,IACRuxF,GAAgB,EACpBtuU,IACA7tL,EAAK05f,EAAgB3gW,EAAG/X,GAASzrE,MAAK,SAAU76E,GAC3CyhgB,IAEJA,GAAgB,EAChBhyf,EAAOhP,GAAS,CACfspG,OAAQ,YACR/pG,MAAOA,KAENmzL,GAAa3vI,EAAQ/zC,OACrB,SAAUgD,GACRgvf,IAEJA,GAAgB,EAChBhyf,EAAOhP,GAAS,CACfspG,OAAQ,WACR8lB,OAAQp9G,KAEP0gL,GAAa3vI,EAAQ/zC,YAGvB0jL,GAAa3vI,EAAQ/zC,MAIxB,OAFIyI,EAAOzF,OACVgoE,EAAOviE,EAAOlY,OACR85e,EAAWxzV,YAMb,SAAC0jV,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAAI5qU,EAAI4qU,EAAoB,GACxBsmB,EAAYtmB,EAAoB,IAChC8lB,EAAa9lB,EAAoB,IACjC3ke,EAAO2ke,EAAoB,IAC3Bi1B,EAA6Bj1B,EAAoB,KACjDk1B,EAAUl1B,EAAoB,KAC9Bpyd,EAAUoyd,EAAoB,IAC9Bi6B,EAAoB,0BACxB7kW,EAAE,CACD/tI,OAAQ,UACR88d,MAAM,GACJ,CACF+V,IAAK,SAAa/+f,GACjB,IAAIi5J,EAAI/5J,KACJq5f,EAAiB5N,EAAW,kBAC5BjW,EAAaolB,EAA2Blkb,EAAEqjF,GAC1C76G,EAAUs2b,EAAWt2b,QACrBi3B,EAASq/Z,EAAWr/Z,OACpBviE,EAASinf,GAAQ,WACpB,IAAIH,EAAiBzO,EAAUlyV,EAAE76G,SAC7B6tG,EAAS,GACT6+Q,EAAU,EACV/8O,EAAY,EACZixU,GAAkB,EACtBvsf,EAAQzS,GAAU,SAAUkhJ,GAC3B,IAAI7lJ,EAAQyva,IACRm0F,GAAkB,EACtBlxU,IACA7tL,EAAK05f,EAAgB3gW,EAAG/X,GAASzrE,MAAK,SAAU76E,GAC3CqkgB,GAAmBD,IAEvBA,GAAkB,EAClB5gd,EAAQxjD,OACN,SAAUyS,GACR4xf,GAAmBD,IAEvBC,GAAkB,EAClBhzW,EAAO5wJ,GAASgS,IACd0gL,GAAa14G,EAAO,IAAIkjb,EAAetsW,EAAQ6yW,aAGjD/wU,GAAa14G,EAAO,IAAIkjb,EAAetsW,EAAQ6yW,OAIlD,OAFIhsf,EAAOzF,OACVgoE,EAAOviE,EAAOlY,OACR85e,EAAWxzV,YAMb,SAAC0jV,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAAI5qU,EAAI4qU,EAAoB,GACxB4mB,EAAU5mB,EAAoB,IAC9Bw0B,EAAgBx0B,EAAoB,KACpC6kB,EAAQ7kB,EAAoB,IAC5B8lB,EAAa9lB,EAAoB,IACjC6lB,EAAa7lB,EAAoB,IACjC60B,EAAqB70B,EAAoB,KACzC+0B,EAAiB/0B,EAAoB,KACrC0jB,EAAW1jB,EAAoB,IA4BnC,GApBA5qU,EAAE,CACD/tI,OAAQ,UACR8lD,OAAO,EACPktb,MAAM,EACNhW,SAXmBmQ,GAAiB3P,GAAM,WAC1C2P,EAAch8f,UAAd,QAAmC6C,KAAK,CACvCu1E,KAAM,eAEJ,mBAQD,CACF,QAAW,SAAU4zU,GACpB,IAAIpwP,EAAIygW,EAAmBx6f,KAAMyrf,EAAW,YACxCrtU,EAAaotU,EAAWrhG,GAC5B,OAAOnqZ,KAAKu2E,KAAK6nG,EAAa,SAAUvmK,GACvC,OAAO6if,EAAe3gW,EAAGowP,KAAa5zU,MAAK,WAC1C,OAAO1+D,MAELsyY,EAAW/rO,EAAa,SAAUh2K,GACrC,OAAOsyf,EAAe3gW,EAAGowP,KAAa5zU,MAAK,WAC1C,MAAMnuE,MAEJ+hZ,OAGDoiG,GAAWf,EAAW2O,GAAgB,CAC1C,IAAI9yZ,EAASokZ,EAAW,WAAWttf,UAAtB,QACTg8f,EAAch8f,UAAd,UAAuCkpG,GAC1CgiZ,EAAS8Q,EAAch8f,UAAW,UAAWkpG,EAAQ,CAAEmmZ,QAAQ,MAM1D,SAAC9nB,EAAyBiI,EAA0BhI,GAE3D,aAEA,IAAIr9U,EAAUq9U,EAAoB,KAAKr9U,OACnCrnJ,EAAW0ke,EAAoB,KAC/BsnB,EAAsBtnB,EAAoB,IAC1CwuB,EAAiBxuB,EAAoB,IACrCs6B,EAAkB,kBAClB5L,EAAmBpH,EAAoBvlf,IACvC0lf,EAAmBH,EAAoBoB,UAAU4R,GACrD9L,EAAetlf,OAAQ,UAAU,SAAUylf,GAC1CD,EAAiBr0f,KAAM,CACtBE,KAAM+/f,EACN15f,OAAQtF,EAASqzf,GACjBn4f,MAAO,OAEN,WACF,IAGIggS,EAHAn1P,EAAQomd,EAAiBptf,MACzBuG,EAASygC,EAAMzgC,OACfpK,EAAQ6qC,EAAM7qC,MAElB,OAAIA,GAASoK,EAAO1E,OACZ,CACNnG,WAAOI,EACPwE,MAAM,IAER67R,EAAQ7zI,EAAO/hJ,EAAQpK,GACvB6qC,EAAM7qC,OAASggS,EAAMt6R,OACd,CACNnG,MAAOygS,EACP77R,MAAM,QAMD,SAACpF,EAAQyye,EAA0BhI,GAE1C,IAAIklB,EAAcllB,EAAoB,IAClCupB,EAAsBvpB,EAAoB,IAC1C1ke,EAAW0ke,EAAoB,KAC/BilB,EAAyBjlB,EAAoB,IAC7Cr9U,EAASuiW,EAAY,GAAGviW,QACxBngJ,EAAa0if,EAAY,GAAG1if,YAC5B8if,EAAcJ,EAAY,GAAG/6e,OAC7Bi/e,EAAe,SAAUmR,GAC5B,OAAO,SAAUjR,EAAOp6V,GACvB,IAGIzxI,EAAO4mO,EAHPrvF,EAAI15J,EAAS2pf,EAAuBqE,IACpChyY,EAAWiyY,EAAoBr6V,GAC/B94J,EAAO4+J,EAAE94J,OAEb,OAAIo7G,EAAW,GAAKA,GAAYlhH,EACxBmkgB,EAAoB,QAAKpkgB,GACjCsnB,EAAQjb,EAAWwyJ,EAAG19C,IACP,OAAU75F,EAAQ,OAAU65F,EAAW,IAAMlhH,IAASiuP,EAAS7hP,EAAWwyJ,EAAG19C,EAAW,IAAM,OAAU+sI,EAAS,MAASk2Q,EAAoB53W,EAAOqS,EAAG19C,GAAY75F,EAAQ88e,EAAoBjV,EAAYtwV,EAAG19C,EAAUA,EAAW,GAA+B+sI,EAAS,OAAlC5mO,EAAQ,OAAU,IAA0B,QAGvSloB,EAAOC,QAAU,CAChBglgB,OAAQpR,GAAa,GACrBzmW,OAAQymW,GAAa,KAKf,SAASrpB,EAAyBvqe,GAExC,IAAkB6/P,IAEX,SAAU7/P,GACjB,aACA,IAAIilgB,EAAmC,oBAAX1ggB,QAAoD,kBAApBA,OAAOC,SAAwBD,OAAS,SAAUihI,GAC7G,MAAO,UAAYA,EAAc,KAElC,SAAS8tB,KAaT,IAAI4xW,EATiB,qBAATjxV,KACHA,KACqB,qBAAX1gJ,OACVA,OACqB,qBAAXwgJ,OACVA,YADD,EAMR,SAASoxV,EAAazof,GACrB,MAAoB,kBAANA,GAAwB,OAANA,GAA2B,oBAANA,EAEtD,IAAI0of,EAAiC9xW,EACjC+xW,EAAkBvhd,QAClBwhd,EAAsBxhd,QAAQ9gD,UAAUo4E,KACxCmqb,EAAyBzhd,QAAQC,QAAQp9B,KAAK0+e,GAC9CG,EAAwB1hd,QAAQk3B,OAAOr0D,KAAK0+e,GAChD,SAASI,EAAW7D,GACnB,OAAO,IAAIyD,EAAgBzD,GAE5B,SAAS8D,EAAoBnlgB,GAC5B,OAAOglgB,EAAuBhlgB,GAE/B,SAASolgB,EAAoBv1Y,GAC5B,OAAOo1Y,EAAsBp1Y,GAE9B,SAASw1Y,EAAmB/+W,EAASg7W,EAAaC,GACjD,OAAOwD,EAAoBz/f,KAAKghJ,EAASg7W,EAAaC,GAEvD,SAAS+D,EAAYh/W,EAASg7W,EAAaC,GAC1C8D,EAAmBA,EAAmB/+W,EAASg7W,EAAaC,QAAanhgB,EAAWykgB,GAErF,SAASU,EAAgBj/W,EAASg7W,GACjCgE,EAAYh/W,EAASg7W,GAEtB,SAASkE,EAAcl/W,EAASi7W,GAC/B+D,EAAYh/W,OAASlmJ,EAAWmhgB,GAEjC,SAASkE,EAAqBn/W,EAASo/W,EAAoBC,GAC1D,OAAON,EAAmB/+W,EAASo/W,EAAoBC,GAExD,SAASC,EAA0Bt/W,GAClC++W,EAAmB/+W,OAASlmJ,EAAWykgB,GAExC,IAAIlB,EAAkB,WACrB,IAAIkC,EAAuBlB,GAAWA,EAAQhB,eAC9C,GAAoC,oBAAzBkC,EACV,OAAOA,EAER,IAAIC,EAAkBX,OAAoB/kgB,GAC1C,OAAO,SAAU+G,GAChB,OAAOk+f,EAAmBS,EAAiB3+f,IAPvB,GAUtB,SAAS4+f,EAAYtmQ,EAAG9gG,EAAGrvI,GAC1B,GAAiB,oBAANmwO,EACV,MAAM,IAAI94P,UAAU,8BAErB,OAAOgtK,SAASlxK,UAAU8J,MAAMjH,KAAKm6P,EAAG9gG,EAAGrvI,GAE5C,SAAS02e,EAAYvmQ,EAAG9gG,EAAGrvI,GAC1B,IACC,OAAO61e,EAAoBY,EAAYtmQ,EAAG9gG,EAAGrvI,IAC5C,MAAOtvB,OACR,OAAOolgB,EAAoBplgB,QAG7B,IACIimgB,EAAe,WAClB,SAASA,IACR3hgB,KAAK4hgB,QAAU,EACf5hgB,KAAK8zc,MAAQ,EACb9zc,KAAK6hgB,OAAS,CACbC,UAAW,GACX7kT,WAAOnhN,GAERkE,KAAK+hgB,MAAQ/hgB,KAAK6hgB,OAClB7hgB,KAAK4hgB,QAAU,EACf5hgB,KAAK8zc,MAAQ,EAkEd,OAhEA11c,OAAOyJ,eAAe85f,EAAYxjgB,UAAW,SAAU,CACtD4F,IAAK,WACJ,OAAO/D,KAAK8zc,OAEbhsc,YAAY,EACZC,cAAc,IAEf45f,EAAYxjgB,UAAUiO,KAAO,SAAU07L,GACtC,IAAIk6T,EAAUhigB,KAAK+hgB,MACfE,EAAUD,EACmBE,QAA7BF,EAAQF,UAAUjggB,SACrBoggB,EAAU,CACTH,UAAW,GACX7kT,WAAOnhN,IAGTkmgB,EAAQF,UAAU11f,KAAK07L,GACnBm6T,IAAYD,IACfhigB,KAAK+hgB,MAAQE,EACbD,EAAQ/kT,MAAQglT,KAEfjigB,KAAK8zc,OAER6tD,EAAYxjgB,UAAU2V,MAAQ,WAC7B,IAAIquf,EAAWnigB,KAAK6hgB,OAChBO,EAAWD,EACXE,EAAYrigB,KAAK4hgB,QACjBU,EAAYD,EAAY,EACxBzkL,EAAWukL,EAASL,UACpBh6T,EAAU81I,EAASykL,GAWvB,OArDyB,QA2CrBC,IACHF,EAAWD,EAASllT,MACpBqlT,EAAY,KAEXtigB,KAAK8zc,MACP9zc,KAAK4hgB,QAAUU,EACXH,IAAaC,IAChBpigB,KAAK6hgB,OAASO,GAEfxkL,EAASykL,QAAavmgB,EACfgsM,GAER65T,EAAYxjgB,UAAUuO,QAAU,SAAUk4B,GAIzC,IAHA,IAAI5hC,EAAIhD,KAAK4hgB,QACTx6f,EAAOpH,KAAK6hgB,OACZjkL,EAAWx2U,EAAK06f,WACb9+f,IAAM46U,EAAS/7U,aAAyB/F,IAAfsL,EAAK61M,SAChCj6M,IAAM46U,EAAS/7U,SAGlBmB,EAAI,EACoB,KAFxB46U,GADAx2U,EAAOA,EAAK61M,OACI6kT,WAEHjggB,UAId+iC,EAASg5S,EAAS56U,MAChBA,GAGJ2+f,EAAYxjgB,UAAU+e,KAAO,WAC5B,IAAIqlf,EAAQvigB,KAAK6hgB,OACbx8Y,EAASrlH,KAAK4hgB,QAClB,OAAOW,EAAMT,UAAUz8Y,IAEjBs8Y,EA5EW,GA8EnB,SAASa,EAAsCC,EAAQ96V,GACtD86V,EAAOC,qBAAuB/6V,EAC9BA,EAAOg7V,QAAUF,EACK,aAAlB96V,EAAO22S,OACVskD,EAAqCH,GACT,WAAlB96V,EAAO22S,OAgCnB,SAAwDmkD,GACvDG,EAAqCH,GACrCI,EAAkCJ,GAjCjCK,CAA+CL,GAE/CM,EAA+CN,EAAQ96V,EAAOq7V,cAGhE,SAASC,EAAkCR,EAAQl3Y,GAElD,OAAO23Y,GADMT,EAAOC,qBACgBn3Y,GAErC,SAAS43Y,EAAmCV,GACA,aAAvCA,EAAOC,qBAAqBpkD,OAC/B8kD,EAAiCX,EAAQ,IAAIpggB,UAAU,qFAiCzD,SAAmDoggB,EAAQl3Y,GAC1Dw3Y,EAA+CN,EAAQl3Y,GAhCtD83Y,CAA0CZ,EAAQ,IAAIpggB,UAAU,qFAEjEoggB,EAAOC,qBAAqBC,aAAU7mgB,EACtC2mgB,EAAOC,0BAAuB5mgB,EAE/B,SAASwngB,EAAoB90f,GAC5B,OAAO,IAAInM,UAAU,UAAYmM,EAAO,qCAEzC,SAASo0f,EAAqCH,GAC7CA,EAAOc,eAAiB3C,GAAW,SAAU1hd,EAASi3B,GACrDssb,EAAOe,uBAAyBtkd,EAChCujd,EAAOgB,sBAAwBttb,KAGjC,SAAS4sb,EAA+CN,EAAQl3Y,GAC/Dq3Y,EAAqCH,GACrCW,EAAiCX,EAAQl3Y,GAM1C,SAAS63Y,EAAiCX,EAAQl3Y,QACZzvH,IAAjC2mgB,EAAOgB,wBAGXnC,EAA0BmB,EAAOc,gBACjCd,EAAOgB,sBAAsBl4Y,GAC7Bk3Y,EAAOe,4BAAyB1ngB,EAChC2mgB,EAAOgB,2BAAwB3ngB,GAKhC,SAAS+mgB,EAAkCJ,QACJ3mgB,IAAlC2mgB,EAAOe,yBAGXf,EAAOe,4BAAuB1ngB,GAC9B2mgB,EAAOe,4BAAyB1ngB,EAChC2mgB,EAAOgB,2BAAwB3ngB,GAEhC,IAAI4ngB,EAAatD,EAAe,kBAC5BuD,EAAavD,EAAe,kBAC5BwD,EAAcxD,EAAe,mBAC7ByD,EAAYzD,EAAe,iBAC3B0D,EAAiBnigB,OAAOy/F,UAAY,SAAUvpF,GACjD,MAAoB,kBAANA,GAAkBupF,SAASvpF,IAEtCksf,EAAYhngB,KAAKingB,OAAS,SAAU5jgB,GACvC,OAAOA,EAAI,EAAIrD,KAAKqjB,KAAKhgB,GAAKrD,KAAKwjB,MAAMngB,IAK1C,SAAS6jgB,EAAiBn9f,EAAKoC,GAC9B,QAAYpN,IAARgL,GAHgB,kBADC+Q,EAIkB/Q,IAHM,oBAAN+Q,EAItC,MAAM,IAAIxV,UAAU6G,EAAU,sBALhC,IAAsB2O,EAQtB,SAASqsf,EAAersf,EAAG3O,GAC1B,GAAiB,oBAAN2O,EACV,MAAM,IAAIxV,UAAU6G,EAAU,uBAMhC,SAASi7f,EAAatsf,EAAG3O,GACxB,IAJD,SAAkB2O,GACjB,MAAoB,kBAANA,GAAwB,OAANA,GAA2B,oBAANA,EAGhD8/J,CAAS9/J,GACb,MAAM,IAAIxV,UAAU6G,EAAU,sBAGhC,SAASk7f,EAAuBvsf,EAAGolG,EAAU/zG,GAC5C,QAAUpN,IAAN+b,EACH,MAAM,IAAIxV,UAAU,aAAe46G,EAAW,oBAAsB/zG,EAAU,MAGhF,SAASm7f,EAAoBxsf,EAAGg/O,EAAO3tP,GACtC,QAAUpN,IAAN+b,EACH,MAAM,IAAIxV,UAAUw0P,EAAQ,oBAAsB3tP,EAAU,MAG9D,SAASo7f,EAA0B5ogB,GAClC,OAAOiG,OAAOjG,GAEf,SAAS6ogB,EAAmB1sf,GAC3B,OAAa,IAANA,EAAU,EAAIA,EAKtB,SAAS2sf,EAAwC9ogB,EAAOwN,GACvD,IACIo2R,EAAa39R,OAAO2mK,iBACpBzwJ,EAAIlW,OAAOjG,GAEf,GADAmc,EAAI0sf,EAAmB1sf,IAClBisf,EAAejsf,GACnB,MAAM,IAAIxV,UAAU6G,EAAU,2BAG/B,IADA2O,EAXD,SAAqBA,GACpB,OAAO0sf,EAAmBR,EAAUlsf,IAUhC4sf,CAAY5sf,IAPC,GAQKA,EAAIynR,EACzB,MAAM,IAAIj9R,UAAU6G,4CAAuEo2R,EAAa,eAEzG,OAAKwkO,EAAejsf,IAAY,IAANA,EAGnBA,EAFC,EAIT,SAAS6sf,EAAqB7sf,EAAG3O,GAChC,IAAKy7f,GAAiB9sf,GACrB,MAAM,IAAIxV,UAAU6G,EAAU,6BAGhC,SAAS07f,EAAmCj9V,GAC3C,OAAO,IAAIk9V,EAA4Bl9V,GAExC,SAASm9V,EAA6Bn9V,EAAQo9V,GAC7Cp9V,EAAOg7V,QAAQqC,cAAc54f,KAAK24f,GAEnC,SAASE,EAAiCt9V,EAAQ2uB,EAAOh2L,GACxD,IACIykgB,EADSp9V,EAAOg7V,QACKqC,cAAclxf,QACnCxT,EACHykgB,EAAYG,cAEZH,EAAYI,YAAY7uU,GAG1B,SAAS8uU,EAAiCz9V,GACzC,OAAOA,EAAOg7V,QAAQqC,cAAcnjgB,OAErC,SAASwjgB,EAA+B19V,GACvC,IAAI86V,EAAS96V,EAAOg7V,QACpB,YAAe7mgB,IAAX2mgB,KAGC6C,GAA8B7C,GAKpC,IAkHIvpR,EACAqsR,EAnHAV,EAA+B,WAClC,SAASA,EAA4Bl9V,GAGpC,GAFAy8V,EAAuBz8V,EAAQ,EAAG,+BAClC+8V,EAAqB/8V,EAAQ,mBACzB69V,GAAuB79V,GAC1B,MAAM,IAAItlK,UAAU,+EAErBmggB,EAAsCxigB,KAAM2nK,GAC5C3nK,KAAKglgB,cAAgB,IAAIrD,EAqE1B,OAnEAvjgB,OAAOyJ,eAAeg9f,EAA4B1mgB,UAAW,SAAU,CACtE4F,IAAK,WACJ,OAAKuhgB,GAA8BtlgB,MAG5BA,KAAKujgB,eAFJzC,EAAoB2E,GAAiC,YAI9D39f,YAAY,EACZC,cAAc,IAEf88f,EAA4B1mgB,UAAU0tB,OAAS,SAAU0/F,GAIxD,YAHe,IAAXA,IACHA,OAASzvH,GAELwpgB,GAA8BtlgB,WAGDlE,IAA9BkE,KAAK0igB,qBACD5B,EAAoBwC,EAAoB,WAEzCL,EAAkCjjgB,KAAMurH,GALvCu1Y,EAAoB2E,GAAiC,YAO9DZ,EAA4B1mgB,UAAUsvJ,KAAO,WAC5C,IAAK63W,GAA8BtlgB,MAClC,OAAO8ggB,EAAoB2E,GAAiC,SAE7D,QAAkC3pgB,IAA9BkE,KAAK0igB,qBACR,OAAO5B,EAAoBwC,EAAoB,cAEhD,IAAIoC,EACAC,EACA3jX,EAAU4+W,GAAW,SAAU1hd,EAASi3B,GAC3Cuvb,EAAiBxmd,EACjBymd,EAAgBxvb,KAoBjB,OADAyvb,GAAgC5lgB,KAjBd,CACjBmlgB,YAAa,SAAU7uU,GACtB,OAAOovU,EAAe,CACrBhqgB,MAAO46L,EACPh2L,MAAM,KAGR4kgB,YAAa,WACZ,OAAOQ,EAAe,CACrBhqgB,WAAOI,EACPwE,MAAM,KAGRulgB,YAAa,SAAUz9f,GACtB,OAAOu9f,EAAcv9f,MAIhB45I,GAER6iX,EAA4B1mgB,UAAU2ngB,YAAc,WACnD,IAAKR,GAA8BtlgB,MAClC,MAAMylgB,GAAiC,eAExC,QAAkC3pgB,IAA9BkE,KAAK0igB,qBAAT,CAGA,GAAI1igB,KAAKglgB,cAAcnjgB,OAAS,EAC/B,MAAM,IAAIQ,UAAU,uFAErB8ggB,EAAmCnjgB,QAE7B6kgB,EA7E2B,GA2FnC,SAASS,GAA8Bztf,GACtC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,kBAGtCA,aAAagtf,EAErB,SAASe,GAAgCnD,EAAQsC,GAChD,IAAIp9V,EAAS86V,EAAOC,qBACpB/6V,EAAOo+V,YAAa,EACE,WAAlBp+V,EAAO22S,OACVymD,EAAYG,cACgB,YAAlBv9V,EAAO22S,OACjBymD,EAAYc,YAAYl+V,EAAOq7V,cAE/Br7V,EAAOq+V,0BAA0BnC,GAAWkB,GAG9C,SAASU,GAAiCj3f,GACzC,OAAO,IAAInM,UAAU,yCAA2CmM,EAAO,sDAjCxEpQ,OAAO+uB,iBAAiB03e,EAA4B1mgB,UAAW,CAC9D0tB,OAAQ,CAAE/jB,YAAY,GACtB2lJ,KAAM,CAAE3lJ,YAAY,GACpBg+f,YAAa,CAAEh+f,YAAY,GAC3Bm+f,OAAQ,CAAEn+f,YAAY,KAEmB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAeg9f,EAA4B1mgB,UAAWiigB,EAAe9qV,YAAa,CACxF55K,MAAO,8BACPqM,cAAc,IA4B4B,kBAAjCq4f,EAAe37P,iBACCvrB,EAAK,IAAOknR,EAAe37P,eAAiB,WACrE,OAAOzkQ,MADRulgB,EAEGrsR,EACH96O,OAAOyJ,eAAe09f,EAAwBnF,EAAe37P,cAAe,CAAE38P,YAAY,KAE3F,IAAIo+f,GAAmC,WACtC,SAASA,EAAgCzD,EAAQ0D,GAChDnmgB,KAAKomgB,qBAAkBtqgB,EACvBkE,KAAKqmgB,aAAc,EACnBrmgB,KAAK2igB,QAAUF,EACfzigB,KAAKsmgB,eAAiBH,EA4FvB,OA1FAD,EAAgC/ngB,UAAU4B,KAAO,WAChD,IAAI43C,EAAQ33C,KACRumgB,EAAY,WACf,OAAO5ud,EAAM6ud,cAGd,OADAxmgB,KAAKomgB,gBAAkBpmgB,KAAKomgB,gBAAkBjF,EAAqBnhgB,KAAKomgB,gBAAiBG,EAAWA,GAAaA,IAC1GvmgB,KAAKomgB,iBAEbF,EAAgC/ngB,UAAU8mQ,OAAS,SAAUvpQ,GAC5D,IAAIi8C,EAAQ33C,KACRymgB,EAAc,WACjB,OAAO9ud,EAAM+ud,aAAahrgB,IAE3B,OAAOsE,KAAKomgB,gBAAkBjF,EAAqBnhgB,KAAKomgB,gBAAiBK,EAAaA,GAAeA,KAEtGP,EAAgC/ngB,UAAUqogB,WAAa,WACtD,IAAI7ud,EAAQ33C,KACZ,GAAIA,KAAKqmgB,YACR,OAAOpnd,QAAQC,QAAQ,CACtBxjD,WAAOI,EACPwE,MAAM,IAGR,IAIIolgB,EACAC,EALAlD,EAASzigB,KAAK2igB,QAClB,QAAoC7mgB,IAAhC2mgB,EAAOC,qBACV,OAAO5B,EAAoBwC,EAAoB,YAIhD,IAAIthX,EAAU4+W,GAAW,SAAU1hd,EAASi3B,GAC3Cuvb,EAAiBxmd,EACjBymd,EAAgBxvb,KA6BjB,OADAyvb,GAAgCnD,EA1Bd,CACjB0C,YAAa,SAAU7uU,GACtB3+I,EAAMyud,qBAAkBtqgB,EACxBujgB,GAAe,WACd,OAAOqG,EAAe,CACrBhqgB,MAAO46L,EACPh2L,MAAM,QAIT4kgB,YAAa,WACZvtd,EAAMyud,qBAAkBtqgB,EACxB67C,EAAM0ud,aAAc,EACpBlD,EAAmCV,GACnCiD,EAAe,CACdhqgB,WAAOI,EACPwE,MAAM,KAGRulgB,YAAa,SAAUt6Y,GACtB5zE,EAAMyud,qBAAkBtqgB,EACxB67C,EAAM0ud,aAAc,EACpBlD,EAAmCV,GACnCkD,EAAcp6Y,MAITy2B,GAERkkX,EAAgC/ngB,UAAUuogB,aAAe,SAAUhrgB,GAClE,GAAIsE,KAAKqmgB,YACR,OAAOpnd,QAAQC,QAAQ,CACtBxjD,MAAOA,EACP4E,MAAM,IAGRN,KAAKqmgB,aAAc,EACnB,IAAI5D,EAASzigB,KAAK2igB,QAClB,QAAoC7mgB,IAAhC2mgB,EAAOC,qBACV,OAAO5B,EAAoBwC,EAAoB,qBAEhD,IAAKtjgB,KAAKsmgB,eAAgB,CACzB,IAAI1yf,EAASqvf,EAAkCR,EAAQ/mgB,GAEvD,OADAyngB,EAAmCV,GAC5BtB,EAAqBvtf,GAAQ,WACnC,MAAO,CACNlY,MAAOA,EACP4E,MAAM,MAKT,OADA6igB,EAAmCV,GAC5B5B,EAAoB,CAC1BnlgB,MAAOA,EACP4E,MAAM,KAGD4lgB,EAjG+B,GAmGnCS,GAAuC,CAC1C5mgB,KAAM,WACL,OAAK6mgB,GAA8B5mgB,MAG5BA,KAAK6mgB,mBAAmB9mgB,OAFvB+ggB,EAAoBgG,GAAuC,UAIpE7hQ,OAAQ,SAAUvpQ,GACjB,OAAKkrgB,GAA8B5mgB,MAG5BA,KAAK6mgB,mBAAmB5hQ,OAAOvpQ,GAF9BolgB,EAAoBgG,GAAuC,aAerE,SAASF,GAA8B/uf,GACtC,IAAKyof,EAAazof,GACjB,OAAO,EAER,IAAKzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,sBAC5C,OAAO,EAER,IACC,OAAOA,EAAEgvf,8BAA8BX,GACtC,MAAOhtR,GACR,OAAO,GAGT,SAAS4tR,GAAuCt4f,GAC/C,OAAO,IAAInM,UAAU,+BAAiCmM,EAAO,0DAxB/B1S,IAA3BypgB,GACHnngB,OAAOo3E,eAAemxb,GAAsCpB,GAyB7D,IAAIwB,GAAcplgB,OAAOy6C,OAAS,SAAUvkC,GAC3C,OAAOA,IAAMA,GAEd,SAASmvf,GAAoBppL,GAC5B,OAAOA,EAAS9tU,QAEjB,SAASm3f,GAAmBC,EAAMC,EAAY3gZ,EAAK4gZ,EAAWhhgB,GAC7D,IAAIovJ,WAAW0xW,GAAMx/f,IAAI,IAAI8tJ,WAAWhvC,EAAK4gZ,EAAWhhgB,GAAI+ggB,GAQ7D,SAASE,GAAiBn0W,EAAQ32J,EAAOC,GACxC,GAAI02J,EAAOpjJ,MACV,OAAOojJ,EAAOpjJ,MAAMvT,EAAOC,GAE5B,IAAIqF,EAASrF,EAAMD,EACfuT,EAAQ,IAAIi+K,YAAYlsL,GAE5B,OADAolgB,GAAmBn3f,EAAO,EAAGojJ,EAAQ32J,EAAOsF,GACrCiO,EAcR,SAASw3f,GAAkB3mQ,GAC1B,IAAIztG,EAASm0W,GAAiB1mQ,EAAEztG,OAAQytG,EAAE1lG,WAAY0lG,EAAE1lG,WAAa0lG,EAAEz6F,YACvE,OAAO,IAAI1Q,WAAWtC,GAEvB,SAASq0W,GAAa/tb,GACrB,IAAI+yG,EAAO/yG,EAAUgub,OAAO1zf,QAK5B,OAJA0lE,EAAUiub,iBAAmBl7U,EAAKxwL,KAC9By9E,EAAUiub,gBAAkB,IAC/Bjub,EAAUiub,gBAAkB,GAEtBl7U,EAAK7wL,MAEb,SAASgsgB,GAAqBlub,EAAW99E,EAAOK,GAC/C,GAxBiB,kBADWqE,EAyBHrE,IArBrBgrgB,GAAY3mgB,IAGZA,EAAI,GAkB0BrE,IAASe,IAC1C,MAAM,IAAI6qgB,WAAW,wDA1BvB,IAA6BvngB,EA4B5Bo5E,EAAUgub,OAAOp7f,KAAK,CACrB1Q,MAAOA,EACPK,KAAMA,IAEPy9E,EAAUiub,iBAAmB1rgB,EAM9B,SAAS6rgB,GAAWpub,GACnBA,EAAUgub,OAAS,IAAI7F,EACvBnob,EAAUiub,gBAAkB,EAE7B,IAAII,GAA6B,WAChC,SAASA,IACR,MAAM,IAAIxlgB,UAAU,uBAsCrB,OApCAjE,OAAOyJ,eAAegggB,EAA0B1pgB,UAAW,OAAQ,CAClE4F,IAAK,WACJ,IAAK+jgB,GAA4B9ngB,MAChC,MAAM+ngB,GAA+B,QAEtC,OAAO/ngB,KAAKgogB,OAEblggB,YAAY,EACZC,cAAc,IAEf8/f,EAA0B1pgB,UAAU8pgB,QAAU,SAAUC,GACvD,IAAKJ,GAA4B9ngB,MAChC,MAAM+ngB,GAA+B,WAItC,GAFA3D,EAAuB8D,EAAc,EAAG,WACxCA,EAAe1D,EAAwC0D,EAAc,wBAChBpsgB,IAAjDkE,KAAKmogB,wCACR,MAAM,IAAI9lgB,UAAU,0CAEArC,KAAKgogB,MAAM90W,OAChCk1W,GAAoCpogB,KAAKmogB,wCAAyCD,IAEnFL,EAA0B1pgB,UAAUkqgB,mBAAqB,SAAU/oU,GAClE,IAAKwoU,GAA4B9ngB,MAChC,MAAM+ngB,GAA+B,sBAGtC,GADA3D,EAAuB9kU,EAAM,EAAG,uBAC3BvR,YAAYu6U,OAAOhpU,GACvB,MAAM,IAAIj9L,UAAU,gDAErB,QAAqDvG,IAAjDkE,KAAKmogB,wCACR,MAAM,IAAI9lgB,UAAU,0CAEAi9L,EAAKpsC,OAC1Bq1W,GAA+CvogB,KAAKmogB,wCAAyC7oU,IAEvFuoU,EAxCyB,GA0CjCzpgB,OAAO+uB,iBAAiB06e,GAA0B1pgB,UAAW,CAC5D8pgB,QAAS,CAAEnggB,YAAY,GACvBuggB,mBAAoB,CAAEvggB,YAAY,GAClCw3L,KAAM,CAAEx3L,YAAY,KAEqB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAegggB,GAA0B1pgB,UAAWiigB,EAAe9qV,YAAa,CACtF55K,MAAO,4BACPqM,cAAc,IAGhB,IAAIyggB,GAAgC,WACnC,SAASA,IACR,MAAM,IAAInmgB,UAAU,uBA4GrB,OA1GAjE,OAAOyJ,eAAe2ggB,EAA6BrqgB,UAAW,cAAe,CAC5E4F,IAAK,WACJ,IAAK0kgB,GAA+BzogB,MACnC,MAAM0ogB,GAAwC,eAE/C,OAAOC,GAA2C3ogB,OAEnD8H,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAe2ggB,EAA6BrqgB,UAAW,cAAe,CAC5E4F,IAAK,WACJ,IAAK0kgB,GAA+BzogB,MACnC,MAAM0ogB,GAAwC,eAE/C,OAAOE,GAA2C5ogB,OAEnD8H,YAAY,EACZC,cAAc,IAEfyggB,EAA6BrqgB,UAAUsrG,MAAQ,WAC9C,IAAKg/Z,GAA+BzogB,MACnC,MAAM0ogB,GAAwC,SAE/C,GAAI1ogB,KAAK6ogB,gBACR,MAAM,IAAIxmgB,UAAU,8DAErB,IAAI2kC,EAAQhnC,KAAK8ogB,8BAA8BxqD,OAC/C,GAAc,aAAVt3a,EACH,MAAM,IAAI3kC,UAAU,kBAAoB2kC,EAAQ,6DAEjD+he,GAAkC/ogB,OAEnCwogB,EAA6BrqgB,UAAU6qgB,QAAU,SAAU1yU,GAC1D,IAAKmyU,GAA+BzogB,MACnC,MAAM0ogB,GAAwC,WAG/C,GADAtE,EAAuB9tU,EAAO,EAAG,YAC5BvI,YAAYu6U,OAAOhyU,GACvB,MAAM,IAAIj0L,UAAU,sCAErB,GAAyB,IAArBi0L,EAAMpwB,WACT,MAAM,IAAI7jK,UAAU,uCAErB,GAAgC,IAA5Bi0L,EAAMpjC,OAAOgT,WAChB,MAAM,IAAI7jK,UAAU,gDAErB,GAAIrC,KAAK6ogB,gBACR,MAAM,IAAIxmgB,UAAU,gCAErB,IAAI2kC,EAAQhnC,KAAK8ogB,8BAA8BxqD,OAC/C,GAAc,aAAVt3a,EACH,MAAM,IAAI3kC,UAAU,kBAAoB2kC,EAAQ,kEAEjDiie,GAAoCjpgB,KAAMs2L,IAE3CkyU,EAA6BrqgB,UAAUgQ,MAAQ,SAAU/F,GAIxD,QAHU,IAANA,IACHA,OAAItM,IAEA2sgB,GAA+BzogB,MACnC,MAAM0ogB,GAAwC,SAE/CQ,GAAkClpgB,KAAMoI,IAEzCoggB,EAA6BrqgB,UAAUylgB,GAAe,SAAUr4Y,GAC/D49Y,GAAkDnpgB,MAClD4ngB,GAAW5ngB,MACX,IAAI4T,EAAS5T,KAAKopgB,iBAAiB79Y,GAEnC,OADA89Y,GAA4CrpgB,MACrC4T,GAER40f,EAA6BrqgB,UAAU0lgB,GAAa,SAAUkB,GAC7D,IAAIp9V,EAAS3nK,KAAK8ogB,8BAClB,GAAI9ogB,KAAKyngB,gBAAkB,EAA3B,CACC,IAAIxkgB,EAAQjD,KAAKwngB,OAAO1zf,QACxB9T,KAAKyngB,iBAAmBxkgB,EAAMijK,WAC9BojW,GAA6CtpgB,MAC7C,IAAIs/L,EAAO,IAAI9pC,WAAWvyJ,EAAMiwJ,OAAQjwJ,EAAMg4J,WAAYh4J,EAAMijK,YAChE6+V,EAAYI,YAAY7lU,OALzB,CAQA,IAAIiqU,EAAwBvpgB,KAAKwpgB,uBACjC,QAA8B1tgB,IAA1BytgB,EAAqC,CACxC,IAAIr2W,OAAS,EACb,IACCA,EAAS,IAAI66B,YAAYw7U,GACxB,MAAOE,GAER,YADA1E,EAAYc,YAAY4D,GAGzB,IAAIC,EAAqB,CACxBx2W,OAAQA,EACRy2W,iBAAkBJ,EAClBtuW,WAAY,EACZiL,WAAYqjW,EACZK,YAAa,EACbC,YAAa,EACbC,gBAAiBt0W,WACjBu0W,WAAY,WAEb/pgB,KAAKgqgB,kBAAkB59f,KAAKs9f,GAE7B5E,EAA6Bn9V,EAAQo9V,GACrCkF,GAA6CjqgB,QAEvCwogB,EA9G4B,GA6HpC,SAASC,GAA+B5wf,GACvC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,kCAGtCA,aAAa2wf,GAErB,SAASV,GAA4Bjwf,GACpC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,4CAGtCA,aAAagwf,GAErB,SAASoC,GAA6CvuP,GACrD,IAAIwuP,EAoML,SAAoDxuP,GACnD,IAAI/zG,EAAS+zG,EAAWotP,8BACxB,MAAsB,aAAlBnhW,EAAO22S,SAGP5iM,EAAWmtP,mBAGVntP,EAAWyuP,cAGZ9E,EAA+B19V,IAAWy9V,EAAiCz9V,GAAU,OAGrFyiW,GAA4BziW,IAAW0iW,GAAqC1iW,GAAU,IAGxEihW,GAA2CltP,GAC3C,GAtND4uP,CAA2C5uP,GACvDwuP,IAGDxuP,EAAW6uP,SACd7uP,EAAW8uP,YAAa,GAGzB9uP,EAAW6uP,UAAW,EAEtBvJ,EADkBtlP,EAAW+uP,kBACJ,WACxB/uP,EAAW6uP,UAAW,EAClB7uP,EAAW8uP,aACd9uP,EAAW8uP,YAAa,EACxBP,GAA6CvuP,OAE5C,SAAUtzQ,GACZ8ggB,GAAkCxtP,EAAYtzQ,QAGhD,SAAS+ggB,GAAkDztP,GAC1DgvP,GAAkDhvP,GAClDA,EAAWsuP,kBAAoB,IAAIrI,EAEpC,SAASgJ,GAAqDhjW,EAAQ+hW,GACrE,IAAIppgB,GAAO,EACW,WAAlBqnK,EAAO22S,SACVh+c,GAAO,GAER,IAAIsqgB,EAAaC,GAAsDnB,GACjC,YAAlCA,EAAmBK,WACtB9E,EAAiCt9V,EAAQijW,EAAYtqgB,GAqYvD,SAA8CqnK,EAAQ2uB,EAAOh2L,GAC5D,IACIwqgB,EADSnjW,EAAOg7V,QACSoI,kBAAkBj3f,QAC3CxT,EACHwqgB,EAAgB5F,YAAY5uU,GAE5Bw0U,EAAgB3F,YAAY7uU,GAzY5B00U,CAAqCrjW,EAAQijW,EAAYtqgB,GAG3D,SAASuqgB,GAAsDnB,GAC9D,IAAIE,EAAcF,EAAmBE,YACjCC,EAAcH,EAAmBG,YACrC,OAAO,IAAIH,EAAmBI,gBAAgBJ,EAAmBx2W,OAAQw2W,EAAmBzuW,WAAY2uW,EAAcC,GAEvH,SAASoB,GAAgDvvP,EAAYxoH,EAAQ+H,EAAYiL,GACxFw1G,EAAW8rP,OAAOp7f,KAAK,CACtB8mJ,OAAQA,EACR+H,WAAYA,EACZiL,WAAYA,IAEbw1G,EAAW+rP,iBAAmBvhW,EAE/B,SAASglW,GAA4DxvP,EAAYguP,GAChF,IAAIG,EAAcH,EAAmBG,YACjCsB,EAAsBzB,EAAmBE,YAAcF,EAAmBE,YAAcC,EACxFuB,EAAiBrugB,KAAKE,IAAIy+Q,EAAW+rP,gBAAiBiC,EAAmBxjW,WAAawjW,EAAmBE,aACzGyB,EAAiB3B,EAAmBE,YAAcwB,EAClDE,EAAkBD,EAAiBA,EAAiBxB,EACpD0B,EAA4BH,EAC5Bntd,GAAQ,EACRqtd,EAAkBH,IACrBI,EAA4BD,EAAkB5B,EAAmBE,YACjE3rd,GAAQ,GAGT,IADA,IAAIsuG,EAAQmvH,EAAW8rP,OAChB+D,EAA4B,GAAG,CACrC,IAAIC,EAAcj/W,EAAMrvI,OACpBuuf,EAAc1ugB,KAAKE,IAAIsugB,EAA2BC,EAAYtlW,YAC9DwlW,EAAYhC,EAAmBzuW,WAAayuW,EAAmBE,YACnE3C,GAAmByC,EAAmBx2W,OAAQw4W,EAAWF,EAAYt4W,OAAQs4W,EAAYvwW,WAAYwwW,GACjGD,EAAYtlW,aAAeulW,EAC9Bl/W,EAAMz4I,SAEN03f,EAAYvwW,YAAcwwW,EAC1BD,EAAYtlW,YAAculW,GAE3B/vP,EAAW+rP,iBAAmBgE,EAC9BE,GAAuDjwP,EAAY+vP,EAAa/B,GAChF6B,GAA6BE,EAE9B,OAAOxtd,EAER,SAAS0td,GAAuDjwP,EAAY3/Q,EAAM2tgB,GACjFA,EAAmBE,aAAe7tgB,EAEnC,SAASutgB,GAA6C5tP,GAClB,IAA/BA,EAAW+rP,iBAAyB/rP,EAAWmtP,iBAClDQ,GAA4C3tP,GAC5CkwP,GAAoBlwP,EAAWotP,gCAE/BmB,GAA6CvuP,GAG/C,SAASgvP,GAAkDhvP,GAC1B,OAA5BA,EAAWmwP,eAGfnwP,EAAWmwP,aAAa1D,6CAA0CrsgB,EAClE4/Q,EAAWmwP,aAAa7D,MAAQ,KAChCtsP,EAAWmwP,aAAe,MAE3B,SAASC,GAAiEpwP,GACzE,KAAOA,EAAWsuP,kBAAkBnogB,OAAS,GAAG,CAC/C,GAAmC,IAA/B65Q,EAAW+rP,gBACd,OAED,IAAIiC,EAAqBhuP,EAAWsuP,kBAAkB9sf,OAClDguf,GAA4DxvP,EAAYguP,KAC3EqC,GAAiDrwP,GACjDivP,GAAqDjvP,EAAWotP,8BAA+BY,KA2ElG,SAASsC,GAA4CtwP,EAAYwsP,GAChE,IAAI+D,EAAkBvwP,EAAWsuP,kBAAkB9sf,OACnDwtf,GAAkDhvP,GAEpC,WADFA,EAAWotP,8BAA8BxqD,OA5BtD,SAA0D5iM,EAAYuwP,GACrE,IAAItkW,EAAS+zG,EAAWotP,8BACxB,GAAIsB,GAA4BziW,GAC/B,KAAO0iW,GAAqC1iW,GAAU,GAErDgjW,GAAqDhjW,EAD5BokW,GAAiDrwP,IA0B3EwwP,CAAiDxwP,GArBnD,SAA4DA,EAAYwsP,EAAcwB,GAErF,GADAiC,GAAuDjwP,EAAYwsP,EAAcwB,KAC7EA,EAAmBE,YAAcF,EAAmBG,aAAxD,CAGAkC,GAAiDrwP,GACjD,IAAIywP,EAAgBzC,EAAmBE,YAAcF,EAAmBG,YACxE,GAAIsC,EAAgB,EAAG,CACtB,IAAI3vgB,EAAMktgB,EAAmBzuW,WAAayuW,EAAmBE,YACzD52U,EAAYq0U,GAAiBqC,EAAmBx2W,OAAQ12J,EAAM2vgB,EAAe3vgB,GACjFyugB,GAAgDvvP,EAAY1oF,EAAW,EAAGA,EAAU9sB,YAErFwjW,EAAmBE,aAAeuC,EAClCxB,GAAqDjvP,EAAWotP,8BAA+BY,GAC/FoC,GAAiEpwP,IAShE0wP,CAAmD1wP,EAAYwsP,EAAc+D,GAE9EhC,GAA6CvuP,GAE9C,SAASqwP,GAAiDrwP,GAEzD,OADiBA,EAAWsuP,kBAAkBl2f,QA0B/C,SAASu1f,GAA4C3tP,GACpDA,EAAW+uP,oBAAiB3ugB,EAC5B4/Q,EAAW0tP,sBAAmBttgB,EAE/B,SAASitgB,GAAkCrtP,GAC1C,IAAI/zG,EAAS+zG,EAAWotP,8BACxB,IAAIptP,EAAWmtP,iBAAqC,aAAlBlhW,EAAO22S,OAGzC,GAAI5iM,EAAW+rP,gBAAkB,EAChC/rP,EAAWmtP,iBAAkB,MAD9B,CAIA,GAAIntP,EAAWsuP,kBAAkBnogB,OAAS,GACd65Q,EAAWsuP,kBAAkB9sf,OAC/B0sf,YAAc,EAAG,CACzC,IAAIxhgB,EAAI,IAAI/F,UAAU,2DAEtB,MADA6mgB,GAAkCxtP,EAAYtzQ,GACxCA,EAGRihgB,GAA4C3tP,GAC5CkwP,GAAoBjkW,IAErB,SAASshW,GAAoCvtP,EAAYplF,GACxD,IAAI3uB,EAAS+zG,EAAWotP,8BACxB,IAAIptP,EAAWmtP,iBAAqC,aAAlBlhW,EAAO22S,OAAzC,CAGA,IAAIprT,EAASojC,EAAMpjC,OACf+H,EAAaq7B,EAAMr7B,WACnBiL,EAAaowB,EAAMpwB,WACnBmmW,EAAwCn5W,EAC5C,GAAIwoH,EAAWsuP,kBAAkBnogB,OAAS,EAAG,CAC5C,IAAIyqgB,EAAuB5wP,EAAWsuP,kBAAkB9sf,OACnCovf,EAAqBp5W,OAC1Co5W,EAAqBp5W,OAA6Bo5W,EAAqBp5W,OAExEw3W,GAAkDhvP,GAC9C2pP,EAA+B19V,GACe,IAA7Cy9V,EAAiCz9V,GACpCsjW,GAAgDvvP,EAAY2wP,EAAmBpxW,EAAYiL,IAEvFw1G,EAAWsuP,kBAAkBnogB,OAAS,GACzCkqgB,GAAiDrwP,GAGlDupP,EAAiCt9V,EADX,IAAInS,WAAW62W,EAAmBpxW,EAAYiL,IACV,IAEjDkkW,GAA4BziW,IACtCsjW,GAAgDvvP,EAAY2wP,EAAmBpxW,EAAYiL,GAC3F4lW,GAAiEpwP,IAEjEuvP,GAAgDvvP,EAAY2wP,EAAmBpxW,EAAYiL,GAE5F+jW,GAA6CvuP,IAE9C,SAASwtP,GAAkCxtP,EAAYtzQ,GACtD,IAAIu/J,EAAS+zG,EAAWotP,8BACF,aAAlBnhW,EAAO22S,SAGX6qD,GAAkDztP,GAClDksP,GAAWlsP,GACX2tP,GAA4C3tP,GAC5C6wP,GAAoB5kW,EAAQv/J,IAE7B,SAASuggB,GAA2CjtP,GACnD,GAAgC,OAA5BA,EAAWmwP,cAAyBnwP,EAAWsuP,kBAAkBnogB,OAAS,EAAG,CAChF,IAAIoqgB,EAAkBvwP,EAAWsuP,kBAAkB9sf,OAC/CoiL,EAAO,IAAI9pC,WAAWy2W,EAAgB/4W,OAAQ+4W,EAAgBhxW,WAAagxW,EAAgBrC,YAAaqC,EAAgB/lW,WAAa+lW,EAAgBrC,aACrJ4C,EAAcpugB,OAAOC,OAAOwpgB,GAA0B1pgB,YAkH5D,SAAwCojG,EAASm6K,EAAYp8E,GAC5D/9F,EAAQ4ma,wCAA0CzsP,EAClDn6K,EAAQyma,MAAQ1oU,EAnHfmtU,CAA+BD,EAAa9wP,EAAYp8E,GACxDo8E,EAAWmwP,aAAeW,EAE3B,OAAO9wP,EAAWmwP,aAEnB,SAASjD,GAA2CltP,GACnD,IAAI10O,EAAQ00O,EAAWotP,8BAA8BxqD,OACrD,MAAc,YAAVt3a,EACI,KAEM,WAAVA,EACI,EAED00O,EAAWgxP,aAAehxP,EAAW+rP,gBAE7C,SAASW,GAAoC1sP,EAAYwsP,GACxD,IAAI+D,EAAkBvwP,EAAWsuP,kBAAkB9sf,OAEnD,GAAc,WADFw+P,EAAWotP,8BAA8BxqD,QAEpD,GAAqB,IAAjB4pD,EACH,MAAM,IAAI7lgB,UAAU,wEAEf,CACN,GAAqB,IAAjB6lgB,EACH,MAAM,IAAI7lgB,UAAU,mFAErB,GAAI4pgB,EAAgBrC,YAAc1B,EAAe+D,EAAgB/lW,WAChE,MAAM,IAAIyhW,WAAW,6BAGvBsE,EAAgB/4W,OAA6B+4W,EAAgB/4W,OAC7D84W,GAA4CtwP,EAAYwsP,GAEzD,SAASK,GAA+C7sP,EAAYp8E,GACnE,IAAI2sU,EAAkBvwP,EAAWsuP,kBAAkB9sf,OAEnD,GAAc,WADFw+P,EAAWotP,8BAA8BxqD,QAEpD,GAAwB,IAApBh/Q,EAAKp5B,WACR,MAAM,IAAI7jK,UAAU,yFAGrB,GAAwB,IAApBi9L,EAAKp5B,WACR,MAAM,IAAI7jK,UAAU,mGAGtB,GAAI4pgB,EAAgBhxW,WAAagxW,EAAgBrC,cAAgBtqU,EAAKrkC,WACrE,MAAM,IAAI0sW,WAAW,2DAEtB,GAAIsE,EAAgBtC,mBAAqBrqU,EAAKpsC,OAAOgT,WACpD,MAAM,IAAIyhW,WAAW,8DAEtB,GAAIsE,EAAgBrC,YAActqU,EAAKp5B,WAAa+lW,EAAgB/lW,WACnE,MAAM,IAAIyhW,WAAW,2DAEtB,IAAIgF,EAAiBrtU,EAAKp5B,WAC1B+lW,EAAgB/4W,OAA6BosC,EAAKpsC,OAClD84W,GAA4CtwP,EAAYixP,GAEzD,SAASC,GAAkCjlW,EAAQ+zG,EAAYmxP,EAAgBC,EAAeC,EAAiBC,EAAezD,GAC7H7tP,EAAWotP,8BAAgCnhW,EAC3C+zG,EAAW8uP,YAAa,EACxB9uP,EAAW6uP,UAAW,EACtB7uP,EAAWmwP,aAAe,KAC1BnwP,EAAW8rP,OAAS9rP,EAAW+rP,qBAAkB3rgB,EACjD8rgB,GAAWlsP,GACXA,EAAWmtP,iBAAkB,EAC7BntP,EAAWyuP,UAAW,EACtBzuP,EAAWgxP,aAAeM,EAC1BtxP,EAAW+uP,eAAiBqC,EAC5BpxP,EAAW0tP,iBAAmB2D,EAC9BrxP,EAAW8tP,uBAAyBD,EACpC7tP,EAAWsuP,kBAAoB,IAAIrI,EACnCh6V,EAAOq+V,0BAA4BtqP,EAEnCslP,EAAYH,EADMgM,MAC4B,WAC7CnxP,EAAWyuP,UAAW,EACtBF,GAA6CvuP,MAC3C,SAAUvkM,GACZ+xb,GAAkCxtP,EAAYvkM,MAuChD,SAAS4wb,GAA+Bv5f,GACvC,OAAO,IAAInM,UAAU,uCAAyCmM,EAAO,oDAEtE,SAASk6f,GAAwCl6f,GAChD,OAAO,IAAInM,UAAU,0CAA4CmM,EAAO,uDAEzE,SAASy+f,GAAgCtlW,GACxC,OAAO,IAAIulW,GAAyBvlW,GAErC,SAASwlW,GAAiCxlW,EAAQmjW,GACjDnjW,EAAOg7V,QAAQoI,kBAAkB3+f,KAAK0+f,GAWvC,SAAST,GAAqC1iW,GAC7C,OAAOA,EAAOg7V,QAAQoI,kBAAkBlpgB,OAEzC,SAASuogB,GAA4BziW,GACpC,IAAI86V,EAAS96V,EAAOg7V,QACpB,YAAe7mgB,IAAX2mgB,KAGC2K,GAA2B3K,GArdjCrkgB,OAAO+uB,iBAAiBq7e,GAA6BrqgB,UAAW,CAC/DsrG,MAAO,CAAE3hG,YAAY,GACrBkhgB,QAAS,CAAElhgB,YAAY,GACvBqG,MAAO,CAAErG,YAAY,GACrB0kgB,YAAa,CAAE1kgB,YAAY,GAC3BulgB,YAAa,CAAEvlgB,YAAY,KAEc,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAe2ggB,GAA6BrqgB,UAAWiigB,EAAe9qV,YAAa,CACzF55K,MAAO,+BACPqM,cAAc,IAgdhB,IAAImlgB,GAA4B,WAC/B,SAASA,EAAyBvlW,GAGjC,GAFAy8V,EAAuBz8V,EAAQ,EAAG,4BAClC+8V,EAAqB/8V,EAAQ,mBACzB69V,GAAuB79V,GAC1B,MAAM,IAAItlK,UAAU,+EAErB,IAAKomgB,GAA+B9gW,EAAOq+V,2BAC1C,MAAM,IAAI3jgB,UAAU,+FAErBmggB,EAAsCxigB,KAAM2nK,GAC5C3nK,KAAK+qgB,kBAAoB,IAAIpJ,EA+E9B,OA7EAvjgB,OAAOyJ,eAAeqlgB,EAAyB/ugB,UAAW,SAAU,CACnE4F,IAAK,WACJ,OAAKqpgB,GAA2BptgB,MAGzBA,KAAKujgB,eAFJzC,EAAoBwM,GAA8B,YAI3DxlgB,YAAY,EACZC,cAAc,IAEfmlgB,EAAyB/ugB,UAAU0tB,OAAS,SAAU0/F,GAIrD,YAHe,IAAXA,IACHA,OAASzvH,GAELsxgB,GAA2BptgB,WAGElE,IAA9BkE,KAAK0igB,qBACD5B,EAAoBwC,EAAoB,WAEzCL,EAAkCjjgB,KAAMurH,GALvCu1Y,EAAoBwM,GAA8B,YAO3DJ,EAAyB/ugB,UAAUsvJ,KAAO,SAAU6xC,GACnD,IAAK8tU,GAA2BptgB,MAC/B,OAAO8ggB,EAAoBwM,GAA8B,SAE1D,IAAKv/U,YAAYu6U,OAAOhpU,GACvB,OAAOwhU,EAAoB,IAAIz+f,UAAU,sCAE1C,GAAwB,IAApBi9L,EAAKp5B,WACR,OAAO46V,EAAoB,IAAIz+f,UAAU,uCAE1C,GAA+B,IAA3Bi9L,EAAKpsC,OAAOgT,WACf,OAAO46V,EAAoB,IAAIz+f,UAAU,gDAG1C,GADqBi9L,EAAKpsC,YACQp3J,IAA9BkE,KAAK0igB,qBACR,OAAO5B,EAAoBwC,EAAoB,cAEhD,IAAIoC,EACAC,EACA3jX,EAAU4+W,GAAW,SAAU1hd,EAASi3B,GAC3Cuvb,EAAiBxmd,EACjBymd,EAAgBxvb,KAoBjB,OADAo3b,GAA6BvtgB,KAAMs/L,EAjBb,CACrB6lU,YAAa,SAAU7uU,GACtB,OAAOovU,EAAe,CACrBhqgB,MAAO46L,EACPh2L,MAAM,KAGR4kgB,YAAa,SAAU5uU,GACtB,OAAOovU,EAAe,CACrBhqgB,MAAO46L,EACPh2L,MAAM,KAGRulgB,YAAa,SAAUz9f,GACtB,OAAOu9f,EAAcv9f,MAIhB45I,GAERkrX,EAAyB/ugB,UAAU2ngB,YAAc,WAChD,IAAKsH,GAA2BptgB,MAC/B,MAAMstgB,GAA8B,eAErC,QAAkCxxgB,IAA9BkE,KAAK0igB,qBAAT,CAGA,GAAI1igB,KAAK+qgB,kBAAkBlpgB,OAAS,EACnC,MAAM,IAAIQ,UAAU,uFAErB8ggB,EAAmCnjgB,QAE7BktgB,EA1FwB,GAwGhC,SAASE,GAA2Bv1f,GACnC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,sBAGtCA,aAAaq1f,GAErB,SAASK,GAA6B9K,EAAQnjU,EAAMwrU,GACnD,IAAInjW,EAAS86V,EAAOC,qBACpB/6V,EAAOo+V,YAAa,EACE,YAAlBp+V,EAAO22S,OACVwsD,EAAgBjF,YAAYl+V,EAAOq7V,cAjcrC,SAA8CtnP,EAAYp8E,EAAMwrU,GAC/D,IAAInjW,EAAS+zG,EAAWotP,8BACpBe,EAAc,EACdvqU,EAAKhhM,cAAgBm4K,WACxBozV,EAAcvqU,EAAKhhM,YAAYkvgB,mBAEhC,IAAIrvf,EAAOmhL,EAAKhhM,YACZ40J,EAA6BosC,EAAKpsC,OAClCw2W,EAAqB,CACxBx2W,OAAQA,EACRy2W,iBAAkBz2W,EAAOgT,WACzBjL,WAAYqkC,EAAKrkC,WACjBiL,WAAYo5B,EAAKp5B,WACjB0jW,YAAa,EACbC,YAAaA,EACbC,gBAAiB3rf,EACjB4rf,WAAY,QAEb,GAAIruP,EAAWsuP,kBAAkBnogB,OAAS,EAGzC,OAFA65Q,EAAWsuP,kBAAkB59f,KAAKs9f,QAClCyD,GAAiCxlW,EAAQmjW,GAG1C,GAAsB,WAAlBnjW,EAAO22S,OAAX,CAKA,GAAI5iM,EAAW+rP,gBAAkB,EAAG,CACnC,GAAIyD,GAA4DxvP,EAAYguP,GAAqB,CAChG,IAAIkB,EAAaC,GAAsDnB,GAGvE,OAFAJ,GAA6C5tP,QAC7CovP,EAAgB3F,YAAYyF,GAG7B,GAAIlvP,EAAWmtP,gBAAiB,CAC/B,IAAIzggB,EAAI,IAAI/F,UAAU,2DAGtB,OAFA6mgB,GAAkCxtP,EAAYtzQ,QAC9C0igB,EAAgBjF,YAAYz9f,IAI9BszQ,EAAWsuP,kBAAkB59f,KAAKs9f,GAClCyD,GAAiCxlW,EAAQmjW,GACzCb,GAA6CvuP,OArB7C,CACC,IAAI+xP,EAAY,IAAItvf,EAAKurf,EAAmBx2W,OAAQw2W,EAAmBzuW,WAAY,GACnF6vW,EAAgB5F,YAAYuI,IA0a5BC,CAAqC/lW,EAAOq+V,0BAA2B1mU,EAAMwrU,GAG/E,SAASwC,GAA8B9+f,GACtC,OAAO,IAAInM,UAAU,sCAAwCmM,EAAO,mDAErE,SAASm/f,GAAqBphL,EAAUqhL,GACvC,IAAIZ,EAAgBzgL,EAASygL,cAC7B,QAAsBlxgB,IAAlBkxgB,EACH,OAAOY,EAER,GAAI7G,GAAYiG,IAAkBA,EAAgB,EACjD,MAAM,IAAIrF,WAAW,yBAEtB,OAAOqF,EAER,SAASa,GAAqBthL,GAC7B,IAAIxwV,EAAOwwV,EAASxwV,KACpB,OAAKA,GACG,WACN,OAAO,GAKV,SAAS+xgB,GAAuB/1d,EAAM7uC,GACrC+6f,EAAiBlsd,EAAM7uC,GACvB,IAAI8jgB,EAAyB,OAATj1d,QAA0B,IAATA,OAAkB,EAASA,EAAKi1d,cACjEjxgB,EAAgB,OAATg8C,QAA0B,IAATA,OAAkB,EAASA,EAAKh8C,KAC5D,MAAO,CACNixgB,mBAAiClxgB,IAAlBkxgB,OAA8BlxgB,EAAYwogB,EAA0B0I,GACnFjxgB,UAAeD,IAATC,OAAqBD,EAAYiygB,GAA2BhygB,EAAMmN,EAAU,4BAGpF,SAAS6kgB,GAA2BlrgB,EAAIqG,GAEvC,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUotL,GAChB,OAAOguU,EAA0BzhgB,EAAGyzL,KAkBtC,SAAS03U,GAAmCnrgB,EAAIs2R,EAAUjwR,GAEzD,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUqiH,GAChB,OAAOm2Y,EAAY7+f,EAAIs2R,EAAU,CAAC5tK,KAGpC,SAAS0iZ,GAAmCprgB,EAAIs2R,EAAUjwR,GAEzD,OADAg7f,EAAerhgB,EAAIqG,GACZ,WACN,OAAOw4f,EAAY7+f,EAAIs2R,EAAU,KAGnC,SAAS+0O,GAAmCrrgB,EAAIs2R,EAAUjwR,GAEzD,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUwyQ,GAChB,OAAO+lP,EAAY5+f,EAAIs2R,EAAU,CAACzd,KAGpC,SAASyyP,GAAmCtrgB,EAAIs2R,EAAUjwR,GAEzD,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUotL,EAAOolF,GACvB,OAAOgmP,EAAY7+f,EAAIs2R,EAAU,CAChC7iG,EACAolF,KAIH,SAAS0yP,GAAqBv2f,EAAG3O,GAChC,IAAKmlgB,GAAiBx2f,GACrB,MAAM,IAAIxV,UAAU6G,EAAU,6BA/GhC9K,OAAO+uB,iBAAiB+/e,GAAyB/ugB,UAAW,CAC3D0tB,OAAQ,CAAE/jB,YAAY,GACtB2lJ,KAAM,CAAE3lJ,YAAY,GACpBg+f,YAAa,CAAEh+f,YAAY,GAC3Bm+f,OAAQ,CAAEn+f,YAAY,KAEmB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAeqlgB,GAAyB/ugB,UAAWiigB,EAAe9qV,YAAa,CACrF55K,MAAO,2BACPqM,cAAc,IAmHhB,IAAIumgB,GAAqD,oBAApB3yP,gBAOjC4yP,GAAkB,WACrB,SAASA,EAAeC,EAAmBC,QAChB,IAAtBD,IACHA,EAAoB,SAED,IAAhBC,IACHA,EAAc,SAEW3ygB,IAAtB0ygB,EACHA,EAAoB,KAEpBrK,EAAaqK,EAAmB,mBAEjC,IAAIjiL,EAAWuhL,GAAuBW,EAAa,oBAC/CC,EA9EN,SAA+Bv1O,EAAUjwR,GACxC+6f,EAAiB9qO,EAAUjwR,GAC3B,IAAI2yQ,EAAqB,OAAbsd,QAAkC,IAAbA,OAAsB,EAASA,EAAStd,MACrEpyK,EAAqB,OAAb0vL,QAAkC,IAAbA,OAAsB,EAASA,EAAS1vL,MACrE1pF,EAAqB,OAAbo5Q,QAAkC,IAAbA,OAAsB,EAASA,EAASp5Q,MACrE7f,EAAoB,OAAbi5R,QAAkC,IAAbA,OAAsB,EAASA,EAASj5R,KACpE+0f,EAAqB,OAAb97N,QAAkC,IAAbA,OAAsB,EAASA,EAAS87N,MACzE,MAAO,CACNp5O,WAAiB//Q,IAAV+/Q,OAAsB//Q,EAAYkygB,GAAmCnyP,EAAOsd,EAAUjwR,EAAU,4BACvGugG,WAAiB3tG,IAAV2tG,OAAsB3tG,EAAYmygB,GAAmCxka,EAAO0vL,EAAUjwR,EAAU,4BACvG6W,WAAiBjkB,IAAVikB,OAAsBjkB,EAAYoygB,GAAmCnuf,EAAOo5Q,EAAUjwR,EAAU,4BACvG+rf,WAAiBn5f,IAAVm5f,OAAsBn5f,EAAYqygB,GAAmClZ,EAAO97N,EAAUjwR,EAAU,4BACvGhJ,KAAMA,GAkEeyugB,CAAsBH,EAAmB,mBAG9D,GAFAI,GAAyB5ugB,WAEZlE,IADF4ygB,EAAexugB,KAEzB,MAAM,IAAIyngB,WAAW,6BAEtB,IAAIkH,EAAgBhB,GAAqBthL,IAklB3C,SAAgE5kL,EAAQ+mW,EAAgB1B,EAAe6B,GACtG,IAAInzP,EAAat9Q,OAAOC,OAAOywgB,GAAgC3wgB,WAC3D0ugB,EAAiB,aAGjBkC,EAAiB,WACpB,OAAOlO,OAAoB/kgB,IAExBkzgB,EAAiB,WACpB,OAAOnO,OAAoB/kgB,IAExBmzgB,EAAiB,WACpB,OAAOpO,OAAoB/kgB,SAECA,IAAzB4ygB,EAAe3uf,QAClB8sf,EAAiB,WAChB,OAAO6B,EAAe3uf,MAAM27P,UAGD5/Q,IAAzB4ygB,EAAezZ,QAClB8Z,EAAiB,SAAUz4U,GAC1B,OAAOo4U,EAAezZ,MAAM3+T,EAAOolF,UAGR5/Q,IAAzB4ygB,EAAejla,QAClBula,EAAiB,WAChB,OAAON,EAAejla,eAGK3tG,IAAzB4ygB,EAAe7yP,QAClBozP,EAAiB,SAAU1jZ,GAC1B,OAAOmjZ,EAAe7yP,MAAMtwJ,KAG9B2jZ,GAAqCvnW,EAAQ+zG,EAAYmxP,EAAgBkC,EAAgBC,EAAgBC,EAAgBjC,EAAe6B,GAlnBvIM,CAAuDnvgB,KAAM0ugB,EADzCf,GAAqBphL,EAAU,GACyCsiL,GA0C7F,OAxCAzwgB,OAAOyJ,eAAe0mgB,EAAepwgB,UAAW,SAAU,CACzD4F,IAAK,WACJ,IAAKsqgB,GAAiBrugB,MACrB,MAAMovgB,GAA4B,UAEnC,OAAOC,GAAuBrvgB,OAE/B8H,YAAY,EACZC,cAAc,IAEfwmgB,EAAepwgB,UAAU09Q,MAAQ,SAAUtwJ,GAI1C,YAHe,IAAXA,IACHA,OAASzvH,GAELuygB,GAAiBrugB,MAGlBqvgB,GAAuBrvgB,MACnB8ggB,EAAoB,IAAIz+f,UAAU,oDAEnCitgB,GAAoBtvgB,KAAMurH,GALzBu1Y,EAAoBsO,GAA4B,WAOzDb,EAAepwgB,UAAUsrG,MAAQ,WAChC,OAAK4ka,GAAiBrugB,MAGlBqvgB,GAAuBrvgB,MACnB8ggB,EAAoB,IAAIz+f,UAAU,oDAEtCktgB,GAAoCvvgB,MAChC8ggB,EAAoB,IAAIz+f,UAAU,2CAEnCmtgB,GAAoBxvgB,MARnB8ggB,EAAoBsO,GAA4B,WAUzDb,EAAepwgB,UAAUsxgB,UAAY,WACpC,IAAKpB,GAAiBrugB,MACrB,MAAMovgB,GAA4B,aAEnC,OAAOM,GAAmC1vgB,OAEpCuugB,EAhEc,GA8EtB,SAASmB,GAAmC/nW,GAC3C,OAAO,IAAIgoW,GAA4BhoW,GAiBxC,SAASinW,GAAyBjnW,GACjCA,EAAO22S,OAAS,WAChB32S,EAAOq7V,kBAAelngB,EACtB6rK,EAAOioW,aAAU9zgB,EACjB6rK,EAAOkoW,+BAA4B/zgB,EACnC6rK,EAAOmoW,eAAiB,IAAInO,EAC5Bh6V,EAAOooW,2BAAwBj0gB,EAC/B6rK,EAAOqoW,mBAAgBl0gB,EACvB6rK,EAAOsoW,2BAAwBn0gB,EAC/B6rK,EAAOuoW,0BAAuBp0gB,EAC9B6rK,EAAOwoW,eAAgB,EAExB,SAAS9B,GAAiBx2f,GACzB,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,8BAGtCA,aAAa02f,GAErB,SAASc,GAAuB1nW,GAC/B,YAAuB7rK,IAAnB6rK,EAAOioW,QAKZ,SAASN,GAAoB3nW,EAAQp8C,GACpC,IAAI2tH,EACJ,GAAsB,WAAlBvxE,EAAO22S,QAAyC,YAAlB32S,EAAO22S,OACxC,OAAOuiD,OAAoB/kgB,GAE5B6rK,EAAOkoW,0BAA0BO,aAAe7kZ,EACa,QAA5D2tH,EAAKvxE,EAAOkoW,0BAA0BQ,wBAAqC,IAAPn3R,GAAyBA,EAAG2iC,QACjG,IAAI70O,EAAQ2gI,EAAO22S,OACnB,GAAc,WAAVt3a,GAAgC,YAAVA,EACzB,OAAO65d,OAAoB/kgB,GAE5B,QAAoCA,IAAhC6rK,EAAOuoW,qBACV,OAAOvoW,EAAOuoW,qBAAqBI,SAEpC,IAAIC,GAAqB,EACX,aAAVvpe,IACHupe,GAAqB,EACrBhlZ,OAASzvH,GAEV,IAAIkmJ,EAAU4+W,GAAW,SAAU1hd,EAASi3B,GAC3CwxF,EAAOuoW,qBAAuB,CAC7BI,cAAUx0gB,EACV00gB,SAAUtxd,EACVuxd,QAASt6b,EACTu6b,QAASnlZ,EACTolZ,oBAAqBJ,MAOvB,OAJA5oW,EAAOuoW,qBAAqBI,SAAWtuX,EAClCuuX,GACJK,GAA4BjpW,EAAQp8C,GAE9By2B,EAER,SAASwtX,GAAoB7nW,GAC5B,IAAI3gI,EAAQ2gI,EAAO22S,OACnB,GAAc,WAAVt3a,GAAgC,YAAVA,EACzB,OAAO85d,EAAoB,IAAIz+f,UAAU,kBAAoB2kC,EAAQ,8DAEtE,IA8e6C00O,EA9ezC15H,EAAU4+W,GAAW,SAAU1hd,EAASi3B,GAC3C,IAAI06b,EAAe,CAClBL,SAAUtxd,EACVuxd,QAASt6b,GAEVwxF,EAAOqoW,cAAgBa,KAEpBC,EAASnpW,EAAOioW,QAKpB,YAJe9zgB,IAAXg1gB,GAAwBnpW,EAAOwoW,eAA2B,aAAVnpe,GACnD+pe,GAAiCD,GAselCpJ,GAD6ChsP,EAneR/zG,EAAOkoW,0BAoeXmB,GAAe,GAChDC,GAAoDv1P,GApe7C15H,EAYR,SAASkvX,GAAgCvpW,EAAQx5J,GAElC,aADFw5J,EAAO22S,OAKnB6yD,GAA6BxpW,GAH5BipW,GAA4BjpW,EAAQx5J,GAKtC,SAASyigB,GAA4BjpW,EAAQp8C,GAC5C,IAAImwJ,EAAa/zG,EAAOkoW,0BACxBloW,EAAO22S,OAAS,WAChB32S,EAAOq7V,aAAez3Y,EACtB,IAAIulZ,EAASnpW,EAAOioW,aACL9zgB,IAAXg1gB,GACHM,GAAsDN,EAAQvlZ,IA2EhE,SAAkDo8C,GACjD,YAAqC7rK,IAAjC6rK,EAAOooW,4BAAwEj0gB,IAAjC6rK,EAAOsoW,sBA1EpDoB,CAAyC1pW,IAAW+zG,EAAWyuP,UACnEgH,GAA6BxpW,GAG/B,SAASwpW,GAA6BxpW,GACrCA,EAAO22S,OAAS,UAChB32S,EAAOkoW,0BAA0BlM,KACjC,IAAI2N,EAAc3pW,EAAOq7V,aAKzB,GAJAr7V,EAAOmoW,eAAepjgB,SAAQ,SAAU6kgB,GACvCA,EAAad,QAAQa,MAEtB3pW,EAAOmoW,eAAiB,IAAInO,OACQ7lgB,IAAhC6rK,EAAOuoW,qBAAX,CAIA,IAAIsB,EAAe7pW,EAAOuoW,qBAE1B,GADAvoW,EAAOuoW,0BAAuBp0gB,EAC1B01gB,EAAab,oBAGhB,OAFAa,EAAaf,QAAQa,QACrBG,GAAkD9pW,GAInDq5V,EADcr5V,EAAOkoW,0BAA0BnM,GAAY8N,EAAad,UACnD,WACpBc,EAAahB,WACbiB,GAAkD9pW,MAChD,SAAUp8C,GACZimZ,EAAaf,QAAQllZ,GACrBkmZ,GAAkD9pW,WAhBlD8pW,GAAkD9pW,GAsDpD,SAAS4nW,GAAoC5nW,GAC5C,YAA6B7rK,IAAzB6rK,EAAOqoW,oBAAgEl0gB,IAAjC6rK,EAAOsoW,sBAkBlD,SAASwB,GAAkD9pW,QAC7B7rK,IAAzB6rK,EAAOqoW,gBACVroW,EAAOqoW,cAAcS,QAAQ9oW,EAAOq7V,cACpCr7V,EAAOqoW,mBAAgBl0gB,GAExB,IAAIg1gB,EAASnpW,EAAOioW,aACL9zgB,IAAXg1gB,GACHY,GAAiCZ,EAAQnpW,EAAOq7V,cAGlD,SAAS2O,GAAiChqW,EAAQiqW,GACjD,IAAId,EAASnpW,EAAOioW,aACL9zgB,IAAXg1gB,GAAwBc,IAAiBjqW,EAAOwoW,gBAC/CyB,EA+gBN,SAAwCd,GACvCe,GAAoCf,GA/gBlCgB,CAA+BhB,GAE/BC,GAAiCD,IAGnCnpW,EAAOwoW,cAAgByB,EAjPxBxzgB,OAAO+uB,iBAAiBohf,GAAepwgB,UAAW,CACjD09Q,MAAO,CAAE/zQ,YAAY,GACrB2hG,MAAO,CAAE3hG,YAAY,GACrB2ngB,UAAW,CAAE3ngB,YAAY,GACzBiuN,OAAQ,CAAEjuN,YAAY,KAEmB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAe0mgB,GAAepwgB,UAAWiigB,EAAe9qV,YAAa,CAC3E55K,MAAO,iBACPqM,cAAc,IA0OhB,IAAI4ngB,GAA+B,WAClC,SAASA,EAA4BhoW,GAGpC,GAFAy8V,EAAuBz8V,EAAQ,EAAG,+BAClCymW,GAAqBzmW,EAAQ,mBACzB0nW,GAAuB1nW,GAC1B,MAAM,IAAItlK,UAAU,+EAErBrC,KAAK+xgB,qBAAuBpqW,EAC5BA,EAAOioW,QAAU5vgB,KACjB,IA2csD8wgB,EA3clD9pe,EAAQ2gI,EAAO22S,OACnB,GAAc,aAAVt3a,GACEuoe,GAAoC5nW,IAAWA,EAAOwoW,cAC1D0B,GAAoC7xgB,MAEpCgygB,GAA8ChygB,MAE/CiygB,GAAqCjygB,WAC/B,GAAc,aAAVgnC,EACVkre,GAA8ClygB,KAAM2nK,EAAOq7V,cAC3DiP,GAAqCjygB,WAC/B,GAAc,WAAVgnC,EACVgre,GAA8ChygB,MAgchDiygB,GADuDnB,EA9bN9wgB,MAgcjDmygB,GAAkCrB,OA/b1B,CACN,IAAIQ,EAAc3pW,EAAOq7V,aACzBkP,GAA8ClygB,KAAMsxgB,GACpDc,GAA+CpygB,KAAMsxgB,IAmFvD,OAhFAlzgB,OAAOyJ,eAAe8ngB,EAA4BxxgB,UAAW,SAAU,CACtE4F,IAAK,WACJ,OAAKsugB,GAA8BrygB,MAG5BA,KAAKujgB,eAFJzC,EAAoBwR,GAAiC,YAI9DxqgB,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAe8ngB,EAA4BxxgB,UAAW,cAAe,CAC3E4F,IAAK,WACJ,IAAKsugB,GAA8BrygB,MAClC,MAAMsygB,GAAiC,eAExC,QAAkCx2gB,IAA9BkE,KAAK+xgB,qBACR,MAAMQ,GAA2B,eAElC,OAyHH,SAAmDzB,GAClD,IAAInpW,EAASmpW,EAAOiB,qBAChB/qe,EAAQ2gI,EAAO22S,OACnB,MAAc,YAAVt3a,GAAiC,aAAVA,EACnB,KAEM,WAAVA,EACI,EAEDwre,GAA8C7qW,EAAOkoW,2BAlInD4C,CAA0CzygB,OAElD8H,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAe8ngB,EAA4BxxgB,UAAW,QAAS,CACrE4F,IAAK,WACJ,OAAKsugB,GAA8BrygB,MAG5BA,KAAK0ygB,cAFJ5R,EAAoBwR,GAAiC,WAI9DxqgB,YAAY,EACZC,cAAc,IAEf4ngB,EAA4BxxgB,UAAU09Q,MAAQ,SAAUtwJ,GAIvD,YAHe,IAAXA,IACHA,OAASzvH,GAELu2gB,GAA8BrygB,WAGDlE,IAA9BkE,KAAK+xgB,qBACDjR,EAAoByR,GAA2B,UAiEzD,SAA0CzB,EAAQvlZ,GAEjD,OAAO+jZ,GADMwB,EAAOiB,qBACexmZ,GAjE3BonZ,CAAiC3ygB,KAAMurH,GALtCu1Y,EAAoBwR,GAAiC,WAO9D3C,EAA4BxxgB,UAAUsrG,MAAQ,WAC7C,IAAK4oa,GAA8BrygB,MAClC,OAAO8ggB,EAAoBwR,GAAiC,UAE7D,IAAI3qW,EAAS3nK,KAAK+xgB,qBAClB,YAAej2gB,IAAX6rK,EACIm5V,EAAoByR,GAA2B,UAEnDhD,GAAoC5nW,GAChCm5V,EAAoB,IAAIz+f,UAAU,2CAEnCuwgB,GAAiC5ygB,OAEzC2vgB,EAA4BxxgB,UAAU2ngB,YAAc,WACnD,IAAKuM,GAA8BrygB,MAClC,MAAMsygB,GAAiC,oBAGzBx2gB,IADFkE,KAAK+xgB,sBAIlBc,GAAmC7ygB,OAEpC2vgB,EAA4BxxgB,UAAU82f,MAAQ,SAAU3+T,GAIvD,YAHc,IAAVA,IACHA,OAAQx6L,GAEJu2gB,GAA8BrygB,WAGDlE,IAA9BkE,KAAK+xgB,qBACDjR,EAAoByR,GAA2B,aAEhDO,GAAiC9ygB,KAAMs2L,GALtCwqU,EAAoBwR,GAAiC,WAOvD3C,EA7G2B,GA8HnC,SAAS0C,GAA8Bx6f,GACtC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,yBAGtCA,aAAa83f,GAMrB,SAASiD,GAAiC9B,GAEzC,OAAOtB,GADMsB,EAAOiB,sBAcrB,SAASgB,GAAuDjC,EAAQ3igB,GACpC,YAA/B2igB,EAAOkC,oBACVtB,GAAiCZ,EAAQ3igB,GAsU3C,SAAmD2igB,EAAQvlZ,GAC1D6mZ,GAA+CtB,EAAQvlZ,GArUtD0nZ,CAA0CnC,EAAQ3igB,GAGpD,SAASijgB,GAAsDN,EAAQ3igB,GACpC,YAA9B2igB,EAAOoC,mBACVC,GAAgCrC,EAAQ3igB,GAuW1C,SAAkD2igB,EAAQvlZ,GACzD2mZ,GAA8CpB,EAAQvlZ,GAtWrD6nZ,CAAyCtC,EAAQ3igB,GAcnD,SAAS0kgB,GAAmC/B,GAC3C,IAAInpW,EAASmpW,EAAOiB,qBAChBsB,EAAgB,IAAIhxgB,UAAU,oFAClC+ugB,GAAsDN,EAAQuC,GAC9DN,GAAuDjC,EAAQuC,GAC/D1rW,EAAOioW,aAAU9zgB,EACjBg1gB,EAAOiB,0BAAuBj2gB,EAE/B,SAASg3gB,GAAiChC,EAAQx6U,GACjD,IAAI3uB,EAASmpW,EAAOiB,qBAChBr2P,EAAa/zG,EAAOkoW,0BACpBhoU,EAiKL,SAAqD6zE,EAAYplF,GAChE,IACC,OAAOolF,EAAW43P,uBAAuBh9U,GACxC,MAAOi9U,GAER,OADAC,GAA6C93P,EAAY63P,GAClD,GAtKQE,CAA4C/3P,EAAYplF,GACxE,GAAI3uB,IAAWmpW,EAAOiB,qBACrB,OAAOjR,EAAoByR,GAA2B,aAEvD,IAAIvre,EAAQ2gI,EAAO22S,OACnB,GAAc,YAAVt3a,EACH,OAAO85d,EAAoBn5V,EAAOq7V,cAEnC,GAAIuM,GAAoC5nW,IAAqB,WAAV3gI,EAClD,OAAO85d,EAAoB,IAAIz+f,UAAU,6DAE1C,GAAc,aAAV2kC,EACH,OAAO85d,EAAoBn5V,EAAOq7V,cAEnC,IAAIhhX,EAjVL,SAAuC2lB,GAQtC,OAPci5V,GAAW,SAAU1hd,EAASi3B,GAC3C,IAAIo7b,EAAe,CAClBf,SAAUtxd,EACVuxd,QAASt6b,GAEVwxF,EAAOmoW,eAAe1jgB,KAAKmlgB,MA2UdmC,CAA8B/rW,GAE5C,OA4JD,SAA8C+zG,EAAYplF,EAAOuR,GAChE,IACC6/T,GAAqBhsP,EAAYplF,EAAOuR,GACvC,MAAO8rU,GAER,YADAH,GAA6C93P,EAAYi4P,GAG1D,IAAIhsW,EAAS+zG,EAAWk4P,0BACnBrE,GAAoC5nW,IAA6B,aAAlBA,EAAO22S,QAE1DqzD,GAAiChqW,EADdksW,GAA+Cn4P,IAGnEu1P,GAAoDv1P,GAzKpDo4P,CAAqCp4P,EAAYplF,EAAOuR,GACjD7lD,EA/FR5jJ,OAAO+uB,iBAAiBwif,GAA4BxxgB,UAAW,CAC9D09Q,MAAO,CAAE/zQ,YAAY,GACrB2hG,MAAO,CAAE3hG,YAAY,GACrBg+f,YAAa,CAAEh+f,YAAY,GAC3Bmtf,MAAO,CAAEntf,YAAY,GACrBm+f,OAAQ,CAAEn+f,YAAY,GACtBulgB,YAAa,CAAEvlgB,YAAY,GAC3Bm2C,MAAO,CAAEn2C,YAAY,KAEoB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAe8ngB,GAA4BxxgB,UAAWiigB,EAAe9qV,YAAa,CACxF55K,MAAO,8BACPqM,cAAc,IAqFhB,IAAIipgB,GAAgB,GAChBlC,GAAmC,WACtC,SAASA,IACR,MAAM,IAAIzsgB,UAAU,uBA8CrB,OA5CAjE,OAAOyJ,eAAeingB,EAAgC3wgB,UAAW,cAAe,CAC/E4F,IAAK,WACJ,IAAKgwgB,GAAkC/zgB,MACtC,MAAMg0gB,GAAuC,eAE9C,OAAOh0gB,KAAKowgB,cAEbtogB,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAeingB,EAAgC3wgB,UAAW,SAAU,CAC1E4F,IAAK,WACJ,IAAKgwgB,GAAkC/zgB,MACtC,MAAMg0gB,GAAuC,UAE9C,QAA8Bl4gB,IAA1BkE,KAAKqwgB,iBACR,MAAM,IAAIhugB,UAAU,qEAErB,OAAOrC,KAAKqwgB,iBAAiBz0P,QAE9B9zQ,YAAY,EACZC,cAAc,IAEf+mgB,EAAgC3wgB,UAAUgQ,MAAQ,SAAU/F,GAI3D,QAHU,IAANA,IACHA,OAAItM,IAEAi4gB,GAAkC/zgB,MACtC,MAAMg0gB,GAAuC,SAGhC,aADFh0gB,KAAK4zgB,0BAA0Bt1D,QAI3C21D,GAAqCj0gB,KAAMoI,IAE5C0mgB,EAAgC3wgB,UAAUulgB,GAAc,SAAUn4Y,GACjE,IAAI33G,EAAS5T,KAAKk0gB,gBAAgB3oZ,GAElC,OADA4oZ,GAA+Cn0gB,MACxC4T,GAERk7f,EAAgC3wgB,UAAUwlgB,GAAc,WACvDiE,GAAW5ngB,OAEL8ugB,EAhD+B,GA6DvC,SAASiF,GAAkCl8f,GAC1C,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,8BAGtCA,aAAai3f,GAErB,SAASI,GAAqCvnW,EAAQ+zG,EAAYmxP,EAAgBkC,EAAgBC,EAAgBC,EAAgBjC,EAAe6B,GAChJnzP,EAAWk4P,0BAA4BjsW,EACvCA,EAAOkoW,0BAA4Bn0P,EACnCA,EAAW8rP,YAAS1rgB,EACpB4/Q,EAAW+rP,qBAAkB3rgB,EAC7B8rgB,GAAWlsP,GACXA,EAAW00P,kBAAet0gB,EAC1B4/Q,EAAW20P,iBAzlBZ,WACC,GAAI/B,GACH,OAAO,IAAI3yP,gBAulBkBy4P,GAC9B14P,EAAWyuP,UAAW,EACtBzuP,EAAW43P,uBAAyBzE,EACpCnzP,EAAWgxP,aAAeM,EAC1BtxP,EAAW24P,gBAAkBtF,EAC7BrzP,EAAW44P,gBAAkBtF,EAC7BtzP,EAAWw4P,gBAAkBjF,EAC7B,IAAI2C,EAAeiC,GAA+Cn4P,GAClEi2P,GAAiChqW,EAAQiqW,GAGzC5Q,EADmBH,EADDgM,MAEQ,WACzBnxP,EAAWyuP,UAAW,EACtB8G,GAAoDv1P,MAClD,SAAUvkM,GACZukM,EAAWyuP,UAAW,EACtB+G,GAAgCvpW,EAAQxwF,MAuC1C,SAASg9b,GAA+Cz4P,GACvDA,EAAW24P,qBAAkBv4gB,EAC7B4/Q,EAAW44P,qBAAkBx4gB,EAC7B4/Q,EAAWw4P,qBAAkBp4gB,EAC7B4/Q,EAAW43P,4BAAyBx3gB,EAcrC,SAAS02gB,GAA8C92P,GACtD,OAAOA,EAAWgxP,aAAehxP,EAAW+rP,gBAgB7C,SAASwJ,GAAoDv1P,GAC5D,IAAI/zG,EAAS+zG,EAAWk4P,0BACxB,GAAKl4P,EAAWyuP,eAGqBrugB,IAAjC6rK,EAAOooW,sBAIX,GAAc,aADFpoW,EAAO22S,QAKnB,GAAiC,IAA7B5iM,EAAW8rP,OAAO3lgB,OAAtB,CAGA,IAAInG,EAAuBggR,EAliDN8rP,OAAOtqf,OAChBxhB,MAkiDRA,IAAUs1gB,GAWf,SAAqDt1P,GACpD,IAAI/zG,EAAS+zG,EAAWk4P,2BAjbzB,SAAgDjsW,GAC/CA,EAAOsoW,sBAAwBtoW,EAAOqoW,cACtCroW,EAAOqoW,mBAAgBl0gB,GAgbvBy4gB,CAAuC5sW,GACvC4/V,GAAa7rP,GACb,IAAI84P,EAAmB94P,EAAW44P,kBAClCH,GAA+Cz4P,GAC/CslP,EAAYwT,GAAkB,YA5d/B,SAA2C7sW,GAC1CA,EAAOsoW,sBAAsBO,cAAS10gB,GACtC6rK,EAAOsoW,2BAAwBn0gB,EAEjB,aADF6rK,EAAO22S,SAElB32S,EAAOq7V,kBAAelngB,OACcA,IAAhC6rK,EAAOuoW,uBACVvoW,EAAOuoW,qBAAqBM,WAC5B7oW,EAAOuoW,0BAAuBp0gB,IAGhC6rK,EAAO22S,OAAS,SAChB,IAAIwyD,EAASnpW,EAAOioW,aACL9zgB,IAAXg1gB,GACHqB,GAAkCrB,GA+clC2D,CAAkC9sW,MAChC,SAAUp8C,IA7cd,SAAoDo8C,EAAQx5J,GAC3Dw5J,EAAOsoW,sBAAsBQ,QAAQtigB,GACrCw5J,EAAOsoW,2BAAwBn0gB,OACKA,IAAhC6rK,EAAOuoW,uBACVvoW,EAAOuoW,qBAAqBO,QAAQtigB,GACpCw5J,EAAOuoW,0BAAuBp0gB,GAE/Bo1gB,GAAgCvpW,EAAQx5J,GAucvCumgB,CAA2C/sW,EAAQp8C,MAnBnDopZ,CAA4Cj5P,GAsB9C,SAAqDA,EAAYplF,GAChE,IAAI3uB,EAAS+zG,EAAWk4P,2BAzbzB,SAAqDjsW,GACpDA,EAAOooW,sBAAwBpoW,EAAOmoW,eAAeh8f,SAybrD8ggB,CAA4CjtW,GAE5Cq5V,EADuBtlP,EAAW24P,gBAAgB/9U,IACpB,YA/e/B,SAA2C3uB,GAC1CA,EAAOooW,sBAAsBS,cAAS10gB,GACtC6rK,EAAOooW,2BAAwBj0gB,EA8e9B+4gB,CAAkCltW,GAClC,IAAI3gI,EAAQ2gI,EAAO22S,OAEnB,GADAipD,GAAa7rP,IACR6zP,GAAoC5nW,IAAqB,aAAV3gI,EAAsB,CACzE,IAAI4qe,EAAeiC,GAA+Cn4P,GAClEi2P,GAAiChqW,EAAQiqW,GAE1CX,GAAoDv1P,MAClD,SAAUnwJ,GACU,aAAlBo8C,EAAO22S,QACV61D,GAA+Cz4P,GAtflD,SAAoD/zG,EAAQx5J,GAC3Dw5J,EAAOooW,sBAAsBU,QAAQtigB,GACrCw5J,EAAOooW,2BAAwBj0gB,EAC/Bo1gB,GAAgCvpW,EAAQx5J,GAqfvC2mgB,CAA2CntW,EAAQp8C,MArCnDwpZ,CAA4Cr5P,EAAYhgR,SAVxDy1gB,GAA6BxpW,GAa/B,SAAS6rW,GAA6C93P,EAAYvtQ,GACb,aAAhDutQ,EAAWk4P,0BAA0Bt1D,QACxC21D,GAAqCv4P,EAAYvtQ,GAmCnD,SAAS0lgB,GAA+Cn4P,GAEvD,OADkB82P,GAA8C92P,IAC1C,EAEvB,SAASu4P,GAAqCv4P,EAAYvtQ,GACzD,IAAIw5J,EAAS+zG,EAAWk4P,0BACxBO,GAA+Cz4P,GAC/Ck1P,GAA4BjpW,EAAQx5J,GAErC,SAASihgB,GAA4B5ggB,GACpC,OAAO,IAAInM,UAAU,4BAA8BmM,EAAO,yCAE3D,SAASwlgB,GAAuCxlgB,GAC/C,OAAO,IAAInM,UAAU,6CAA+CmM,EAAO,0DAE5E,SAAS8jgB,GAAiC9jgB,GACzC,OAAO,IAAInM,UAAU,yCAA2CmM,EAAO,sDAExE,SAAS+jgB,GAA2B/jgB,GACnC,OAAO,IAAInM,UAAU,UAAYmM,EAAO,qCAEzC,SAASyjgB,GAAqCnB,GAC7CA,EAAOvN,eAAiB3C,GAAW,SAAU1hd,EAASi3B,GACrD26b,EAAOtN,uBAAyBtkd,EAChC4xd,EAAOrN,sBAAwBttb,EAC/B26b,EAAOkC,oBAAsB,aAG/B,SAASZ,GAA+CtB,EAAQvlZ,GAC/D0mZ,GAAqCnB,GACrCY,GAAiCZ,EAAQvlZ,GAM1C,SAASmmZ,GAAiCZ,EAAQvlZ,QACZzvH,IAAjCg1gB,EAAOrN,wBAGXnC,EAA0BwP,EAAOvN,gBACjCuN,EAAOrN,sBAAsBl4Y,GAC7BulZ,EAAOtN,4BAAyB1ngB,EAChCg1gB,EAAOrN,2BAAwB3ngB,EAC/Bg1gB,EAAOkC,oBAAsB,YAK9B,SAASb,GAAkCrB,QACJh1gB,IAAlCg1gB,EAAOtN,yBAGXsN,EAAOtN,4BAAuB1ngB,GAC9Bg1gB,EAAOtN,4BAAyB1ngB,EAChCg1gB,EAAOrN,2BAAwB3ngB,EAC/Bg1gB,EAAOkC,oBAAsB,YAE9B,SAASnB,GAAoCf,GAC5CA,EAAO4B,cAAgB9R,GAAW,SAAU1hd,EAASi3B,GACpD26b,EAAOkE,sBAAwB91d,EAC/B4xd,EAAOmE,qBAAuB9+b,KAE/B26b,EAAOoC,mBAAqB,UAE7B,SAAShB,GAA8CpB,EAAQvlZ,GAC9DsmZ,GAAoCf,GACpCqC,GAAgCrC,EAAQvlZ,GAEzC,SAASymZ,GAA8ClB,GACtDe,GAAoCf,GACpCC,GAAiCD,GAElC,SAASqC,GAAgCrC,EAAQvlZ,QACZzvH,IAAhCg1gB,EAAOmE,uBAGX3T,EAA0BwP,EAAO4B,eACjC5B,EAAOmE,qBAAqB1pZ,GAC5BulZ,EAAOkE,2BAAwBl5gB,EAC/Bg1gB,EAAOmE,0BAAuBn5gB,EAC9Bg1gB,EAAOoC,mBAAqB,YAQ7B,SAASnC,GAAiCD,QACJh1gB,IAAjCg1gB,EAAOkE,wBAGXlE,EAAOkE,2BAAsBl5gB,GAC7Bg1gB,EAAOkE,2BAAwBl5gB,EAC/Bg1gB,EAAOmE,0BAAuBn5gB,EAC9Bg1gB,EAAOoC,mBAAqB,aAjR7B90gB,OAAO+uB,iBAAiB2hf,GAAgC3wgB,UAAW,CAClE+2gB,YAAa,CAAEptgB,YAAY,GAC3B8zQ,OAAQ,CAAE9zQ,YAAY,GACtBqG,MAAO,CAAErG,YAAY,KAEoB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAeingB,GAAgC3wgB,UAAWiigB,EAAe9qV,YAAa,CAC5F55K,MAAO,kCACPqM,cAAc,IA2QhB,IAAIotgB,GAA6C,qBAAjBC,aAA+BA,kBAAet5gB,EA4B1Eu5gB,GA3BJ,SAAmCl3f,GAClC,GAAsB,oBAATA,GAAuC,kBAATA,EAC1C,OAAO,EAER,IAEC,OADA,IAAIA,GACG,EACN,MAAO+6N,GACR,OAAO,GAmBYo8R,CAA0BH,IAAsBA,GAhBrE,WACC,IAAIh3f,EAAO,SAAsBkzB,EAAS7iC,GACzCxO,KAAKqxC,QAAUA,GAAW,GAC1BrxC,KAAKwO,KAAOA,GAAQ,QAChB5G,MAAM2tgB,mBACT3tgB,MAAM2tgB,kBAAkBv1gB,KAAMA,KAAK1B,cASrC,OANA6f,EAAKhgB,UAAYC,OAAOC,OAAOuJ,MAAMzJ,WACrCC,OAAOyJ,eAAesW,EAAKhgB,UAAW,cAAe,CACpDzC,MAAOyiB,EACPnW,UAAU,EACVD,cAAc,IAERoW,EAEkFq3f,GAC1F,SAASC,GAAqBxof,EAAQi6e,EAAMwO,EAAcC,EAAcxP,EAAevqP,GACtF,IAAI6mP,EAASmC,EAAmC33e,GAC5C6jf,EAASpB,GAAmCxI,GAChDj6e,EAAO84e,YAAa,EACpB,IAAI6P,GAAe,EACfC,EAAehV,OAAoB/kgB,GACvC,OAAO8kgB,GAAW,SAAU1hd,EAASi3B,GACpC,IAAI84b,EACJ,QAAenzgB,IAAX8/Q,EAAsB,CA0BzB,GAzBAqzP,EAAiB,WAChB,IAAI9ggB,EAAQ,IAAIkngB,GAAe,UAAW,cACtC9rc,EAAU,GACTosc,GACJpsc,EAAQn9D,MAAK,WACZ,MAAoB,aAAhB86f,EAAK5oD,OACDgxD,GAAoBpI,EAAM/4f,GAE3B0yf,OAAoB/kgB,MAGxBqqgB,GACJ58b,EAAQn9D,MAAK,WACZ,MAAsB,aAAlB6gB,EAAOqxb,OACH4kD,GAAqBj2e,EAAQ9e,GAE9B0yf,OAAoB/kgB,MAG7Bg6gB,GAAmB,WAClB,OAAO72d,QAAQwnJ,IAAIl9H,EAAQvgE,KAAI,SAAUkiB,GACxC,OAAOA,WAEN,EAAM/c,IAENytQ,EAAOm6P,QAEV,YADA9G,IAGDrzP,EAAO5yK,iBAAiB,QAASima,GA4DlC,GA3BA+G,EAAmB/of,EAAQw1e,EAAOc,gBAAgB,SAAU+N,GACtDqE,EAKJM,GAAS,EAAM3E,GAJfwE,GAAmB,WAClB,OAAOxG,GAAoBpI,EAAMoK,MAC/B,EAAMA,MAKX0E,EAAmB9O,EAAM4J,EAAOvN,gBAAgB,SAAU+N,GACpDnL,EAKJ8P,GAAS,EAAM3E,GAJfwE,GAAmB,WAClB,OAAO5S,GAAqBj2e,EAAQqkf,MAClC,EAAMA,MAsCX,SAA2B3pW,EAAQ3lB,EAAS92H,GACrB,WAAlBy8I,EAAO22S,OACVpzb,IAEA+1e,EAAgBj/W,EAAS92H,GArC3Bgrf,CAAkBjpf,EAAQw1e,EAAOc,gBAAgB,WAC3CmS,EAKJO,IAJAH,GAAmB,WAClB,OAhgBL,SAA8DhF,GAC7D,IAAInpW,EAASmpW,EAAOiB,qBAChB/qe,EAAQ2gI,EAAO22S,OACnB,OAAIixD,GAAoC5nW,IAAqB,WAAV3gI,EAC3C65d,OAAoB/kgB,GAEd,YAAVkrC,EACI85d,EAAoBn5V,EAAOq7V,cAE5B4P,GAAiC9B,GAuf7BqF,CAAqDrF,SAM3DvB,GAAoCrI,IAAyB,WAAhBA,EAAK5oD,OAAqB,CAC1E,IAAI83D,EAAe,IAAI/zgB,UAAU,+EAC5B8jgB,EAKJ8P,GAAS,EAAMG,GAJfN,GAAmB,WAClB,OAAO5S,GAAqBj2e,EAAQmpf,MAClC,EAAMA,GAMX,SAASC,IACR,IAAIC,EAAkBT,EACtB,OAAO9U,EAAmB8U,GAAc,WACvC,OAAOS,IAAoBT,EAAeQ,SAA0Bv6gB,KAGtE,SAASk6gB,EAAmBruW,EAAQ3lB,EAAS92H,GACtB,YAAlBy8I,EAAO22S,OACVpzb,EAAOy8I,EAAOq7V,cAEd9B,EAAcl/W,EAAS92H,GAUzB,SAAS4qf,EAAmB5qf,EAAQqrf,EAAiBC,GAUpD,SAASC,IACRzV,EAAY91e,KAAU,WACrB,OAAOwrf,EAASH,EAAiBC,MAC/B,SAAUG,GACZ,OAAOD,GAAS,EAAMC,MAbpBf,IAGJA,GAAe,EACK,aAAhB1O,EAAK5oD,QAA0BixD,GAAoCrI,GAGtEuP,IAFAxV,EAAgBoV,IAAyBI,IAY3C,SAASR,EAAStjV,EAASxkL,GACtByngB,IAGJA,GAAe,EACK,aAAhB1O,EAAK5oD,QAA0BixD,GAAoCrI,GAKtEwP,EAAS/jV,EAASxkL,GAJlB8yf,EAAgBoV,KAAyB,WACxC,OAAOK,EAAS/jV,EAASxkL,OAM5B,SAASuogB,EAAS/jV,EAASxkL,GAC1B0kgB,GAAmC/B,GACnC3N,EAAmCV,QACpB3mgB,IAAX8/Q,GACHA,EAAO3yK,oBAAoB,QAASgma,GAEjCt8U,EACHx8G,EAAOhoE,GAEP+wC,OAAQpjD,GA7DVwlgB,EAnEQV,GAAW,SAAUgW,EAAaC,IACxC,SAAS92gB,EAAKO,GACTA,EACHs2gB,IAEA7V,EAOC6U,EACI/U,GAAoB,GAErBE,EAAmB+P,EAAO4B,eAAe,WAC/C,OAAO9R,GAAW,SAAUkW,EAAaC,GACxCnR,GAAgCnD,EAAQ,CACvC0C,YAAa,SAAU7uU,GACtBu/U,EAAe9U,EAAmB+R,GAAiChC,EAAQx6U,QAAQx6L,EAAW2yJ,GAC9FqoX,GAAY,IAEb5R,YAAa,WACZ,OAAO4R,GAAY,IAEpBjR,YAAakR,UApBkBh3gB,EAAM82gB,GAGvC92gB,EAAK,UA6HT,IAAIi3gB,GAAmC,WACtC,SAASA,IACR,MAAM,IAAI30gB,UAAU,uBAgErB,OA9DAjE,OAAOyJ,eAAemvgB,EAAgC74gB,UAAW,cAAe,CAC/E4F,IAAK,WACJ,IAAKkzgB,GAAkCj3gB,MACtC,MAAMk3gB,GAAuC,eAE9C,OAAOC,GAA8Cn3gB,OAEtD8H,YAAY,EACZC,cAAc,IAEfivgB,EAAgC74gB,UAAUsrG,MAAQ,WACjD,IAAKwta,GAAkCj3gB,MACtC,MAAMk3gB,GAAuC,SAE9C,IAAKE,GAAiDp3gB,MACrD,MAAM,IAAIqC,UAAU,mDAErBg1gB,GAAqCr3gB,OAEtCg3gB,EAAgC74gB,UAAU6qgB,QAAU,SAAU1yU,GAI7D,QAHc,IAAVA,IACHA,OAAQx6L,IAEJm7gB,GAAkCj3gB,MACtC,MAAMk3gB,GAAuC,WAE9C,IAAKE,GAAiDp3gB,MACrD,MAAM,IAAIqC,UAAU,qDAErB,OAAOi1gB,GAAuCt3gB,KAAMs2L,IAErD0gV,EAAgC74gB,UAAUgQ,MAAQ,SAAU/F,GAI3D,QAHU,IAANA,IACHA,OAAItM,IAEAm7gB,GAAkCj3gB,MACtC,MAAMk3gB,GAAuC,SAE9CK,GAAqCv3gB,KAAMoI,IAE5C4ugB,EAAgC74gB,UAAUylgB,GAAe,SAAUr4Y,GAClEq8Y,GAAW5ngB,MACX,IAAI4T,EAAS5T,KAAKopgB,iBAAiB79Y,GAEnC,OADAisZ,GAA+Cx3gB,MACxC4T,GAERojgB,EAAgC74gB,UAAU0lgB,GAAa,SAAUkB,GAChE,IAAIp9V,EAAS3nK,KAAKy3gB,0BAClB,GAAIz3gB,KAAKwngB,OAAO3lgB,OAAS,EAAG,CAC3B,IAAIy0L,EAAQixU,GAAavngB,MACrBA,KAAK6ogB,iBAA0C,IAAvB7ogB,KAAKwngB,OAAO3lgB,QACvC21gB,GAA+Cx3gB,MAC/C4rgB,GAAoBjkW,IAEpB+vW,GAAgD13gB,MAEjD+kgB,EAAYI,YAAY7uU,QAExBwuU,EAA6Bn9V,EAAQo9V,GACrC2S,GAAgD13gB,OAG3Cg3gB,EAlE+B,GAgFvC,SAASC,GAAkCp/f,GAC1C,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,8BAGtCA,aAAam/f,GAErB,SAASU,GAAgDh8P,GACvCi8P,GAA8Cj8P,KAI3DA,EAAW6uP,SACd7uP,EAAW8uP,YAAa,GAGzB9uP,EAAW6uP,UAAW,EAEtBvJ,EADkBtlP,EAAW+uP,kBACJ,WACxB/uP,EAAW6uP,UAAW,EAClB7uP,EAAW8uP,aACd9uP,EAAW8uP,YAAa,EACxBkN,GAAgDh8P,OAE/C,SAAUtzQ,GACZmvgB,GAAqC77P,EAAYtzQ,QAGnD,SAASuvgB,GAA8Cj8P,GACtD,IAAI/zG,EAAS+zG,EAAW+7P,0BACxB,QAAKL,GAAiD17P,MAGjDA,EAAWyuP,cAGZ3E,GAAuB79V,IAAWy9V,EAAiCz9V,GAAU,IAG/DwvW,GAA8Cz7P,GAC9C,GAKnB,SAAS87P,GAA+C97P,GACvDA,EAAW+uP,oBAAiB3ugB,EAC5B4/Q,EAAW0tP,sBAAmBttgB,EAC9B4/Q,EAAW43P,4BAAyBx3gB,EAErC,SAASu7gB,GAAqC37P,GAC7C,GAAK07P,GAAiD17P,GAAtD,CAGA,IAAI/zG,EAAS+zG,EAAW+7P,0BACxB/7P,EAAWmtP,iBAAkB,EACI,IAA7BntP,EAAW8rP,OAAO3lgB,SACrB21gB,GAA+C97P,GAC/CkwP,GAAoBjkW,KAGtB,SAAS2vW,GAAuC57P,EAAYplF,GAC3D,GAAK8gV,GAAiD17P,GAAtD,CAGA,IAAI/zG,EAAS+zG,EAAW+7P,0BACxB,GAAIjS,GAAuB79V,IAAWy9V,EAAiCz9V,GAAU,EAChFs9V,EAAiCt9V,EAAQ2uB,GAAO,OAC1C,CACN,IAAIuR,OAAY,EAChB,IACCA,EAAY6zE,EAAW43P,uBAAuBh9U,GAC7C,MAAOi9U,GAER,MADAgE,GAAqC77P,EAAY63P,GAC3CA,EAEP,IACC7L,GAAqBhsP,EAAYplF,EAAOuR,GACvC,MAAO8rU,GAER,MADA4D,GAAqC77P,EAAYi4P,GAC3CA,GAGR+D,GAAgDh8P,IAEjD,SAAS67P,GAAqC77P,EAAYtzQ,GACzD,IAAIu/J,EAAS+zG,EAAW+7P,0BACF,aAAlB9vW,EAAO22S,SAGXspD,GAAWlsP,GACX87P,GAA+C97P,GAC/C6wP,GAAoB5kW,EAAQv/J,IAE7B,SAAS+ugB,GAA8Cz7P,GACtD,IAAI10O,EAAQ00O,EAAW+7P,0BAA0Bn5D,OACjD,MAAc,YAAVt3a,EACI,KAEM,WAAVA,EACI,EAED00O,EAAWgxP,aAAehxP,EAAW+rP,gBAQ7C,SAAS2P,GAAiD17P,GACzD,IAAI10O,EAAQ00O,EAAW+7P,0BAA0Bn5D,OACjD,OAAK5iM,EAAWmtP,iBAA6B,aAAV7he,EAKpC,SAAS4we,GAAqCjwW,EAAQ+zG,EAAYmxP,EAAgBC,EAAeC,EAAiBC,EAAe6B,GAChInzP,EAAW+7P,0BAA4B9vW,EACvC+zG,EAAW8rP,YAAS1rgB,EACpB4/Q,EAAW+rP,qBAAkB3rgB,EAC7B8rgB,GAAWlsP,GACXA,EAAWyuP,UAAW,EACtBzuP,EAAWmtP,iBAAkB,EAC7BntP,EAAW8uP,YAAa,EACxB9uP,EAAW6uP,UAAW,EACtB7uP,EAAW43P,uBAAyBzE,EACpCnzP,EAAWgxP,aAAeM,EAC1BtxP,EAAW+uP,eAAiBqC,EAC5BpxP,EAAW0tP,iBAAmB2D,EAC9BplW,EAAOq+V,0BAA4BtqP,EAEnCslP,EAAYH,EADMgM,MAC4B,WAC7CnxP,EAAWyuP,UAAW,EACtBuN,GAAgDh8P,MAC9C,SAAUvkM,GACZogc,GAAqC77P,EAAYvkM,MA+BnD,SAAS+/b,GAAuC1ogB,GAC/C,OAAO,IAAInM,UAAU,6CAA+CmM,EAAO,0DAE5E,SAASqpgB,GAAkBlwW,EAAQmwW,GAClC,OAAIrP,GAA+B9gW,EAAOq+V,2BAwG3C,SAA+Br+V,GAC9B,IAMIowW,EACAC,EACAC,EACAC,EACAC,EAVA1V,EAASmC,EAAmCj9V,GAC5CywW,GAAU,EACVC,GAAsB,EACtBC,GAAsB,EACtBC,GAAY,EACZC,GAAY,EAMZC,EAAgB7X,GAAW,SAAU1hd,GACxCi5d,EAAuBj5d,KAExB,SAASw5d,EAAmBC,GAC3BzX,EAAcyX,EAAWpV,gBAAgB,SAAUpsb,GAC9Cwhc,IAAelW,IAGnByG,GAAkC+O,EAAQjS,0BAA2B7ub,GACrE+xb,GAAkCgP,EAAQlS,0BAA2B7ub,GAChEohc,GAAcC,GAClBL,OAAqBr8gB,OAIxB,SAAS88gB,IACJxL,GAA2B3K,KAC9BU,EAAmCV,GAEnCiW,EADAjW,EAASmC,EAAmCj9V,KAwD7Ci+V,GAAgCnD,EArDd,CACjB0C,YAAa,SAAU7uU,GACtB+oU,GAAe,WACdgZ,GAAsB,EACtBC,GAAsB,EACtB,IAAIO,EAASviV,EACTwiV,EAASxiV,EACb,IAAKiiV,IAAcC,EAClB,IACCM,EAASxR,GAAkBhxU,GAC1B,MAAOyiV,GAIR,OAHA7P,GAAkC+O,EAAQjS,0BAA2B+S,GACrE7P,GAAkCgP,EAAQlS,0BAA2B+S,QACrEZ,EAAqBjV,GAAqBv7V,EAAQoxW,IAI/CR,GACJtP,GAAoCgP,EAAQjS,0BAA2B6S,GAEnEL,GACJvP,GAAoCiP,EAAQlS,0BAA2B8S,GAExEV,GAAU,EACNC,EACHW,IACUV,GACVW,QAIH/T,YAAa,WACZkT,GAAU,EACLG,GACJxP,GAAkCkP,EAAQjS,2BAEtCwS,GACJzP,GAAkCmP,EAAQlS,2BAEvCiS,EAAQjS,0BAA0BgE,kBAAkBnogB,OAAS,GAChEumgB,GAAoC6P,EAAQjS,0BAA2B,GAEpEkS,EAAQlS,0BAA0BgE,kBAAkBnogB,OAAS,GAChEumgB,GAAoC8P,EAAQlS,0BAA2B,GAEnEuS,GAAcC,GAClBL,OAAqBr8gB,IAGvB+pgB,YAAa,WACZuS,GAAU,KAKb,SAASc,EAAmB55U,EAAM65U,GAC7B7T,GAA8B7C,KACjCU,EAAmCV,GAEnCiW,EADAjW,EAASwK,GAAgCtlW,KAG1C,IAAIyxW,EAAaD,EAAajB,EAAUD,EACpCoB,EAAcF,EAAalB,EAAUC,EA2DzC3K,GAA6B9K,EAAQnjU,EA1Df,CACrB6lU,YAAa,SAAU7uU,GACtB+oU,GAAe,WACdgZ,GAAsB,EACtBC,GAAsB,EACtB,IAAIgB,EAAeH,EAAaX,EAAYD,EAE5C,GADoBY,EAAaZ,EAAYC,EAejCc,GACX/Q,GAA+C6Q,EAAWpT,0BAA2B1vU,OAflE,CACnB,IAAIijV,OAAc,EAClB,IACCA,EAAcjS,GAAkBhxU,GAC/B,MAAOyiV,GAIR,OAHA7P,GAAkCkQ,EAAWpT,0BAA2B+S,GACxE7P,GAAkCmQ,EAAYrT,0BAA2B+S,QACzEZ,EAAqBjV,GAAqBv7V,EAAQoxW,IAG9CO,GACJ/Q,GAA+C6Q,EAAWpT,0BAA2B1vU,GAEtF2yU,GAAoCoQ,EAAYrT,0BAA2BuT,GAI5EnB,GAAU,EACNC,EACHW,IACUV,GACVW,QAIH/T,YAAa,SAAU5uU,GACtB8hV,GAAU,EACV,IAAIkB,EAAeH,EAAaX,EAAYD,EACxCiB,EAAgBL,EAAaZ,EAAYC,EACxCc,GACJvQ,GAAkCqQ,EAAWpT,2BAEzCwT,GACJzQ,GAAkCsQ,EAAYrT,gCAEjClqgB,IAAVw6L,IACEgjV,GACJ/Q,GAA+C6Q,EAAWpT,0BAA2B1vU,IAEjFkjV,GAAiBH,EAAYrT,0BAA0BgE,kBAAkBnogB,OAAS,GACtFumgB,GAAoCiR,EAAYrT,0BAA2B,IAGxEsT,GAAiBE,GACrBrB,OAAqBr8gB,IAGvB+pgB,YAAa,WACZuS,GAAU,KAKb,SAASY,IACR,GAAIZ,EAEH,OADAC,GAAsB,EACfxX,OAAoB/kgB,GAE5Bs8gB,GAAU,EACV,IAAI5L,EAAc7D,GAA2CsP,EAAQjS,2BAMrE,OALoB,OAAhBwG,EACHoM,IAEAM,EAAmB1M,EAAYxE,OAAO,GAEhCnH,OAAoB/kgB,GAE5B,SAASm9gB,IACR,GAAIb,EAEH,OADAE,GAAsB,EACfzX,OAAoB/kgB,GAE5Bs8gB,GAAU,EACV,IAAI5L,EAAc7D,GAA2CuP,EAAQlS,2BAMrE,OALoB,OAAhBwG,EACHoM,IAEAM,EAAmB1M,EAAYxE,OAAO,GAEhCnH,OAAoB/kgB,GAE5B,SAAS29gB,EAAiBluZ,GAGzB,GAFAgtZ,GAAY,EACZR,EAAUxsZ,EACNitZ,EAAW,CACd,IAAIkB,EAAkB1S,GAAoB,CACzC+Q,EACAC,IAEG2B,EAAezW,GAAqBv7V,EAAQ+xW,GAChDvB,EAAqBwB,GAEtB,OAAOlB,EAER,SAASmB,EAAiBruZ,GAGzB,GAFAitZ,GAAY,EACZR,EAAUzsZ,EACNgtZ,EAAW,CACd,IAAImB,EAAkB1S,GAAoB,CACzC+Q,EACAC,IAEG2B,EAAezW,GAAqBv7V,EAAQ+xW,GAChDvB,EAAqBwB,GAEtB,OAAOlB,EAER,SAAS5L,KAKT,OAHAoL,EAAU4B,GAAyBhN,EAAgBmM,EAAgBS,GACnEvB,EAAU2B,GAAyBhN,EAAgBoM,EAAgBW,GACnElB,EAAmBjW,GACZ,CACNwV,EACAC,GAhUO4B,CAAsBnyW,GAI/B,SAAkCA,EAAQmwW,GACzC,IAKIC,EACAC,EACAC,EACAC,EACAC,EATA1V,EAASmC,EAAmCj9V,GAC5CywW,GAAU,EACV2B,GAAY,EACZxB,GAAY,EACZC,GAAY,EAMZC,EAAgB7X,GAAW,SAAU1hd,GACxCi5d,EAAuBj5d,KAExB,SAAS4td,IACR,OAAIsL,GACH2B,GAAY,EACLlZ,OAAoB/kgB,KAE5Bs8gB,GAAU,EAmCVxS,GAAgCnD,EAlCd,CACjB0C,YAAa,SAAU7uU,GACtB+oU,GAAe,WACd0a,GAAY,EACZ,IAAIlB,EAASviV,EACTwiV,EAASxiV,EACRiiV,GACJjB,GAAuCW,EAAQjS,0BAA2B6S,GAEtEL,GACJlB,GAAuCY,EAAQlS,0BAA2B8S,GAE3EV,GAAU,EACN2B,GACHjN,QAIH5H,YAAa,WACZkT,GAAU,EACLG,GACJlB,GAAqCY,EAAQjS,2BAEzCwS,GACJnB,GAAqCa,EAAQlS,2BAEzCuS,GAAcC,GAClBL,OAAqBr8gB,IAGvB+pgB,YAAa,WACZuS,GAAU,KAILvX,OAAoB/kgB,IAE5B,SAAS29gB,EAAiBluZ,GAGzB,GAFAgtZ,GAAY,EACZR,EAAUxsZ,EACNitZ,EAAW,CACd,IAAIkB,EAAkB1S,GAAoB,CACzC+Q,EACAC,IAEG2B,EAAezW,GAAqBv7V,EAAQ+xW,GAChDvB,EAAqBwB,GAEtB,OAAOlB,EAER,SAASmB,EAAiBruZ,GAGzB,GAFAitZ,GAAY,EACZR,EAAUzsZ,EACNgtZ,EAAW,CACd,IAAImB,EAAkB1S,GAAoB,CACzC+Q,EACAC,IAEG2B,EAAezW,GAAqBv7V,EAAQ+xW,GAChDvB,EAAqBwB,GAEtB,OAAOlB,EAER,SAAS5L,KAWT,OATAoL,EAAU+B,GAAqBnN,EAAgBC,EAAe2M,GAC9DvB,EAAU8B,GAAqBnN,EAAgBC,EAAe8M,GAC9D1Y,EAAcuB,EAAOc,gBAAgB,SAAUpsb,GAC9Cogc,GAAqCU,EAAQjS,0BAA2B7ub,GACxEogc,GAAqCW,EAAQlS,0BAA2B7ub,GACnEohc,GAAcC,GAClBL,OAAqBr8gB,MAGhB,CACNm8gB,EACAC,GAlGM+B,CAAyBtyW,GAiVjC,SAASuyW,GAAsCr3gB,EAAIs2R,EAAUjwR,GAE5D,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUqiH,GAChB,OAAOm2Y,EAAY7+f,EAAIs2R,EAAU,CAAC5tK,KAGpC,SAAS4uZ,GAAoCt3gB,EAAIs2R,EAAUjwR,GAE1D,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUwyQ,GAChB,OAAOgmP,EAAY7+f,EAAIs2R,EAAU,CAACzd,KAGpC,SAAS0+P,GAAqCv3gB,EAAIs2R,EAAUjwR,GAE3D,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUwyQ,GAChB,OAAO+lP,EAAY5+f,EAAIs2R,EAAU,CAACzd,KAGpC,SAAS2+P,GAA0Bn6gB,EAAMgJ,GAExC,GAAa,WADbhJ,EAAO,GAAKA,GAEX,MAAM,IAAImC,UAAU6G,EAAU,KAAOhJ,EAAO,6DAE7C,OAAOA,EAOR,SAASo6gB,GAAgCt/Y,EAAM9xH,GAE9C,GAAa,UADb8xH,EAAO,GAAKA,GAEX,MAAM,IAAI34H,UAAU6G,EAAU,KAAO8xH,EAAO,mEAE7C,OAAOA,EAOR,SAASu/Y,GAAmBvue,EAAS9iC,GACpC+6f,EAAiBj4d,EAAS9iC,GAC1B,IAAIysgB,EAA2B,OAAZ3pe,QAAgC,IAAZA,OAAqB,EAASA,EAAQ2pe,aACzExP,EAA4B,OAAZn6d,QAAgC,IAAZA,OAAqB,EAASA,EAAQm6d,cAC1EuP,EAA2B,OAAZ1pe,QAAgC,IAAZA,OAAqB,EAASA,EAAQ0pe,aACzE95P,EAAqB,OAAZ5vO,QAAgC,IAAZA,OAAqB,EAASA,EAAQ4vO,OAIvE,YAHe9/Q,IAAX8/Q,GAUL,SAA2BA,EAAQ1yQ,GAClC,IAnrDD,SAAuBxN,GACtB,GAAqB,kBAAVA,GAAgC,OAAVA,EAChC,OAAO,EAER,IACC,MAAgC,mBAAlBA,EAAMq6gB,QACnB,MAAO78R,GACR,OAAO,GA4qDHshS,CAAc5+P,GAClB,MAAM,IAAIv5Q,UAAU6G,EAAU,2BAX9BuxgB,CAAkB7+P,EAAQ1yQ,EAAU,6BAE9B,CACNysgB,aAAct4gB,QAAQs4gB,GACtBxP,cAAe9ogB,QAAQ8ogB,GACvBuP,aAAcr4gB,QAAQq4gB,GACtB95P,OAAQA,GApkBVx9Q,OAAO+uB,iBAAiB6pf,GAAgC74gB,UAAW,CAClEsrG,MAAO,CAAE3hG,YAAY,GACrBkhgB,QAAS,CAAElhgB,YAAY,GACvBqG,MAAO,CAAErG,YAAY,GACrBulgB,YAAa,CAAEvlgB,YAAY,KAEc,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAemvgB,GAAgC74gB,UAAWiigB,EAAe9qV,YAAa,CAC5F55K,MAAO,kCACPqM,cAAc,IAglBhB,IAAIkhf,GAAkB,WACrB,SAASA,EAAeyxB,EAAqBjM,QAChB,IAAxBiM,IACHA,EAAsB,SAEH,IAAhBjM,IACHA,EAAc,SAEa3ygB,IAAxB4+gB,EACHA,EAAsB,KAEtBvW,EAAauW,EAAqB,mBAEnC,IAAInuL,EAAWuhL,GAAuBW,EAAa,oBAC/CkM,EA1GN,SAA8C1tf,EAAQ/jB,GACrD+6f,EAAiBh3e,EAAQ/jB,GACzB,IAAIiwR,EAAWlsQ,EACXs8e,EAAqC,OAAbpwO,QAAkC,IAAbA,OAAsB,EAASA,EAASowO,sBACrF19e,EAAsB,OAAbstQ,QAAkC,IAAbA,OAAsB,EAASA,EAASttQ,OACtE2jK,EAAoB,OAAb2pG,QAAkC,IAAbA,OAAsB,EAASA,EAAS3pG,KACpEzvK,EAAqB,OAAbo5Q,QAAkC,IAAbA,OAAsB,EAASA,EAASp5Q,MACrE7f,EAAoB,OAAbi5R,QAAkC,IAAbA,OAAsB,EAASA,EAASj5R,KACxE,MAAO,CACNqpgB,2BAAiDztgB,IAA1BytgB,OAAsCztgB,EAAY0ogB,EAAwC+E,EAAuBrggB,EAAU,4CAClJ2iB,YAAmB/vB,IAAX+vB,OAAuB/vB,EAAYo+gB,GAAsCruf,EAAQstQ,EAAUjwR,EAAU,6BAC7GsmL,UAAe1zL,IAAT0zL,OAAqB1zL,EAAYq+gB,GAAoC3qV,EAAM2pG,EAAUjwR,EAAU,2BACrG6W,WAAiBjkB,IAAVikB,OAAsBjkB,EAAYs+gB,GAAqCr6f,EAAOo5Q,EAAUjwR,EAAU,4BACzGhJ,UAAepE,IAAToE,OAAqBpE,EAAYu+gB,GAA0Bn6gB,EAAMgJ,EAAU,4BA6F1D0xgB,CAAqCF,EAAqB,mBAEjF,GADAG,GAAyB76gB,MACK,UAA1B26gB,EAAiBz6gB,KAAkB,CACtC,QAAsBpE,IAAlBywV,EAASxwV,KACZ,MAAM,IAAI4rgB,WAAW,+DA1+DzB,SAA+DhgW,EAAQmzW,EAAsB9N,GAC5F,IAAItxP,EAAat9Q,OAAOC,OAAOmqgB,GAA6BrqgB,WACxD0ugB,EAAiB,aAGjBC,EAAgB,WACnB,OAAOjM,OAAoB/kgB,IAExBixgB,EAAkB,WACrB,OAAOlM,OAAoB/kgB,SAEOA,IAA/Bg/gB,EAAqB/6f,QACxB8sf,EAAiB,WAChB,OAAOiO,EAAqB/6f,MAAM27P,UAGF5/Q,IAA9Bg/gB,EAAqBtrV,OACxBs9U,EAAgB,WACf,OAAOgO,EAAqBtrV,KAAKksF,UAGC5/Q,IAAhCg/gB,EAAqBjvf,SACxBkhf,EAAkB,SAAUxhZ,GAC3B,OAAOuvZ,EAAqBjvf,OAAO0/F,KAGrC,IAAIg+Y,EAAwBuR,EAAqBvR,sBACjD,GAA8B,IAA1BA,EACH,MAAM,IAAIlngB,UAAU,gDAErBuqgB,GAAkCjlW,EAAQ+zG,EAAYmxP,EAAgBC,EAAeC,EAAiBC,EAAezD,GA+8DnHwR,CAAsD/6gB,KAAM26gB,EADxChN,GAAqBphL,EAAU,QAE7C,CACN,IAAIsiL,EAAgBhB,GAAqBthL,IAvd5C,SAAkE5kL,EAAQgzW,EAAkB3N,EAAe6B,GAC1G,IAAInzP,EAAat9Q,OAAOC,OAAO24gB,GAAgC74gB,WAC3D0ugB,EAAiB,aAGjBC,EAAgB,WACnB,OAAOjM,OAAoB/kgB,IAExBixgB,EAAkB,WACrB,OAAOlM,OAAoB/kgB,SAEGA,IAA3B6+gB,EAAiB56f,QACpB8sf,EAAiB,WAChB,OAAO8N,EAAiB56f,MAAM27P,UAGF5/Q,IAA1B6+gB,EAAiBnrV,OACpBs9U,EAAgB,WACf,OAAO6N,EAAiBnrV,KAAKksF,UAGC5/Q,IAA5B6+gB,EAAiB9uf,SACpBkhf,EAAkB,SAAUxhZ,GAC3B,OAAOovZ,EAAiB9uf,OAAO0/F,KAGjCqsZ,GAAqCjwW,EAAQ+zG,EAAYmxP,EAAgBC,EAAeC,EAAiBC,EAAe6B,GA+btHmM,CAAyDh7gB,KAAM26gB,EAD3ChN,GAAqBphL,EAAU,GAC6CsiL,IAsGlG,OAnGAzwgB,OAAOyJ,eAAeohf,EAAe9qf,UAAW,SAAU,CACzD4F,IAAK,WACJ,IAAK4ggB,GAAiB3kgB,MACrB,MAAMi7gB,GAA4B,UAEnC,OAAOzV,GAAuBxlgB,OAE/B8H,YAAY,EACZC,cAAc,IAEfkhf,EAAe9qf,UAAU0tB,OAAS,SAAU0/F,GAI3C,YAHe,IAAXA,IACHA,OAASzvH,GAEL6ogB,GAAiB3kgB,MAGlBwlgB,GAAuBxlgB,MACnB8ggB,EAAoB,IAAIz+f,UAAU,qDAEnC6ggB,GAAqBljgB,KAAMurH,GAL1Bu1Y,EAAoBma,GAA4B,YAOzDhyB,EAAe9qf,UAAU+8gB,UAAY,SAAUC,GAI9C,QAHmB,IAAfA,IACHA,OAAar/gB,IAET6ogB,GAAiB3kgB,MACrB,MAAMi7gB,GAA4B,aAGnC,YAAqBn/gB,IA7GvB,SAA8BkwC,EAAS9iC,GACtC+6f,EAAiBj4d,EAAS9iC,GAC1B,IAAI8xH,EAAmB,OAAZhvF,QAAgC,IAAZA,OAAqB,EAASA,EAAQgvF,KACrE,MAAO,CAAEA,UAAel/H,IAATk/H,OAAqBl/H,EAAYw+gB,GAAgCt/Y,EAAM9xH,EAAU,4BAyGjFkygB,CAAqBD,EAAY,mBACnCngZ,KACJ4pY,EAAmC5kgB,MAEpCitgB,GAAgCjtgB,OAExCipf,EAAe9qf,UAAUk9gB,YAAc,SAAUC,EAAcH,GAI9D,QAHmB,IAAfA,IACHA,EAAa,KAETxW,GAAiB3kgB,MACrB,MAAMi7gB,GAA4B,eAEnC7W,EAAuBkX,EAAc,EAAG,eACxC,IAAIj/Y,EApFN,SAAqCkwD,EAAMrjL,GAC1C+6f,EAAiB13U,EAAMrjL,GACvB,IAAIqygB,EAAoB,OAAThvV,QAA0B,IAATA,OAAkB,EAASA,EAAKgvV,SAChElX,EAAoBkX,EAAU,WAAY,wBAC1C7W,EAAqB6W,EAAUrygB,EAAU,+BACzC,IAAIlB,EAAoB,OAATukL,QAA0B,IAATA,OAAkB,EAASA,EAAKvkL,SAGhE,OAFAq8f,EAAoBr8f,EAAU,WAAY,wBAC1ComgB,GAAqBpmgB,EAAUkB,EAAU,+BAClC,CACNqygB,SAAUA,EACVvzgB,SAAUA,GA0EMwzgB,CAA4BF,EAAc,mBACtDtve,EAAUuue,GAAmBY,EAAY,oBAC7C,GAAI3V,GAAuBxlgB,MAC1B,MAAM,IAAIqC,UAAU,kFAErB,GAAIgtgB,GAAuBhzY,EAAUr0H,UACpC,MAAM,IAAI3F,UAAU,kFAIrB,OADAi/f,EADcmU,GAAqBz1gB,KAAMq8H,EAAUr0H,SAAUgkC,EAAQ0pe,aAAc1pe,EAAQ2pe,aAAc3pe,EAAQm6d,cAAen6d,EAAQ4vO,SAEjIv/I,EAAUk/Y,UAElBtyB,EAAe9qf,UAAUs9gB,OAAS,SAAU3tU,EAAaqtU,GAIxD,QAHmB,IAAfA,IACHA,EAAa,KAETxW,GAAiB3kgB,MACrB,OAAO8ggB,EAAoBma,GAA4B,WAExD,QAAoBn/gB,IAAhBgyM,EACH,OAAOgzT,EAAoB,wCAE5B,IAAKuN,GAAiBvgU,GACrB,OAAOgzT,EAAoB,IAAIz+f,UAAU,8EAE1C,IAAI2pC,EACJ,IACCA,EAAUuue,GAAmBY,EAAY,oBACxC,MAAO/ygB,GACR,OAAO04f,EAAoB14f,GAE5B,OAAIo9f,GAAuBxlgB,MACnB8ggB,EAAoB,IAAIz+f,UAAU,8EAEtCgtgB,GAAuBvhU,GACnBgzT,EAAoB,IAAIz+f,UAAU,8EAEnCozgB,GAAqBz1gB,KAAM8tM,EAAa9hK,EAAQ0pe,aAAc1pe,EAAQ2pe,aAAc3pe,EAAQm6d,cAAen6d,EAAQ4vO,SAE3HqtO,EAAe9qf,UAAUu9gB,IAAM,WAC9B,IAAK/W,GAAiB3kgB,MACrB,MAAMi7gB,GAA4B,OAGnC,OAAOjU,GADQ6Q,GAAkB73gB,QAGlCipf,EAAe9qf,UAAUgN,OAAS,SAAUgwgB,GAI3C,QAHmB,IAAfA,IACHA,OAAar/gB,IAET6ogB,GAAiB3kgB,MACrB,MAAMi7gB,GAA4B,UAGnC,OAvuFF,SAA4CtzW,EAAQw+V,GACnD,IAAI1D,EAASmC,EAAmCj9V,GAC5Cg0W,EAAO,IAAIzV,GAAgCzD,EAAQ0D,GACnDxmgB,EAAWvB,OAAOC,OAAOsogB,IAE7B,OADAhngB,EAASkngB,mBAAqB8U,EACvBh8gB,EAkuFCi8gB,CAAmC57gB,KApK5C,SAAgCgsC,EAAS9iC,GACxC+6f,EAAiBj4d,EAAS9iC,GAC1B,IAAIi9f,EAA4B,OAAZn6d,QAAgC,IAAZA,OAAqB,EAASA,EAAQm6d,cAC9E,MAAO,CAAEA,cAAe9ogB,QAAQ8ogB,IAgKjB0V,CAAuBV,EAAY,mBACOhV,gBAElDld,EA/Hc,GAuJtB,SAAS+wB,GAAqBnN,EAAgBC,EAAeC,EAAiBC,EAAe6B,QACtE,IAAlB7B,IACHA,EAAgB,QAEK,IAAlB6B,IACHA,EAAgB,WACf,OAAO,IAGT,IAAIlnW,EAASvpK,OAAOC,OAAO4qf,GAAe9qf,WAI1C,OAHA08gB,GAAyBlzW,GAEzBiwW,GAAqCjwW,EADpBvpK,OAAOC,OAAO24gB,GAAgC74gB,WACN0ugB,EAAgBC,EAAeC,EAAiBC,EAAe6B,GACjHlnW,EAER,SAASkyW,GAAyBhN,EAAgBC,EAAeC,GAChE,IAAIplW,EAASvpK,OAAOC,OAAO4qf,GAAe9qf,WAI1C,OAHA08gB,GAAyBlzW,GAEzBilW,GAAkCjlW,EADjBvpK,OAAOC,OAAOmqgB,GAA6BrqgB,WACN0ugB,EAAgBC,EAAeC,EAAiB,OAAGjxgB,GAClG6rK,EAER,SAASkzW,GAAyBlzW,GACjCA,EAAO22S,OAAS,WAChB32S,EAAOg7V,aAAU7mgB,EACjB6rK,EAAOq7V,kBAAelngB,EACtB6rK,EAAOo+V,YAAa,EAErB,SAASpB,GAAiB9sf,GACzB,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,8BAGtCA,aAAaoxe,GAErB,SAASuc,GAAuB79V,GAC/B,YAAuB7rK,IAAnB6rK,EAAOg7V,QAKZ,SAASO,GAAqBv7V,EAAQp8C,GAErC,GADAo8C,EAAOo+V,YAAa,EACE,WAAlBp+V,EAAO22S,OACV,OAAOuiD,OAAoB/kgB,GAE5B,GAAsB,YAAlB6rK,EAAO22S,OACV,OAAOwiD,EAAoBn5V,EAAOq7V,cAEnC4I,GAAoBjkW,GACpB,IAAI86V,EAAS96V,EAAOg7V,QAQpB,YAPe7mgB,IAAX2mgB,GAAwB2K,GAA2B3K,KACtDA,EAAOsI,kBAAkBr+f,SAAQ,SAAUo+f,GAC1CA,EAAgB5F,iBAAYppgB,MAE7B2mgB,EAAOsI,kBAAoB,IAAIpJ,GAGzBR,EADmBx5V,EAAOq+V,0BAA0BpC,GAAar4Y,GACvBkjC,GAElD,SAASm9W,GAAoBjkW,GAC5BA,EAAO22S,OAAS,SAChB,IAAImkD,EAAS96V,EAAOg7V,aACL7mgB,IAAX2mgB,IAGJI,EAAkCJ,GAC9B6C,GAA8B7C,KACjCA,EAAOuC,cAAct4f,SAAQ,SAAUq4f,GACtCA,EAAYG,iBAEbzC,EAAOuC,cAAgB,IAAIrD,IAG7B,SAAS4K,GAAoB5kW,EAAQv/J,GACpCu/J,EAAO22S,OAAS,UAChB32S,EAAOq7V,aAAe56f,EACtB,IAAIq6f,EAAS96V,EAAOg7V,aACL7mgB,IAAX2mgB,IAGJW,EAAiCX,EAAQr6f,GACrCk9f,GAA8B7C,IACjCA,EAAOuC,cAAct4f,SAAQ,SAAUq4f,GACtCA,EAAYc,YAAYz9f,MAEzBq6f,EAAOuC,cAAgB,IAAIrD,IAE3Bc,EAAOsI,kBAAkBr+f,SAAQ,SAAUo+f,GAC1CA,EAAgBjF,YAAYz9f,MAE7Bq6f,EAAOsI,kBAAoB,IAAIpJ,IAGjC,SAASsZ,GAA4BzsgB,GACpC,OAAO,IAAInM,UAAU,4BAA8BmM,EAAO,yCAE3D,SAASstgB,GAA2B/je,EAAM7uC,GACzC+6f,EAAiBlsd,EAAM7uC,GACvB,IAAI8jgB,EAAyB,OAATj1d,QAA0B,IAATA,OAAkB,EAASA,EAAKi1d,cAErE,OADA3I,EAAoB2I,EAAe,gBAAiB,uBAC7C,CAAEA,cAAe1I,EAA0B0I,IA7HnD5ugB,OAAO+uB,iBAAiB87d,GAAe9qf,UAAW,CACjD0tB,OAAQ,CAAE/jB,YAAY,GACtBozgB,UAAW,CAAEpzgB,YAAY,GACzBuzgB,YAAa,CAAEvzgB,YAAY,GAC3B2zgB,OAAQ,CAAE3zgB,YAAY,GACtB4zgB,IAAK,CAAE5zgB,YAAY,GACnBqD,OAAQ,CAAErD,YAAY,GACtBiuN,OAAQ,CAAEjuN,YAAY,KAEmB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAeohf,GAAe9qf,UAAWiigB,EAAe9qV,YAAa,CAC3E55K,MAAO,iBACPqM,cAAc,IAG4B,kBAAjCq4f,EAAe37P,eACzBrmQ,OAAOyJ,eAAeohf,GAAe9qf,UAAWiigB,EAAe37P,cAAe,CAC7E/oQ,MAAOutf,GAAe9qf,UAAUgN,OAChCnD,UAAU,EACVD,cAAc,IA4GhB,IAAIg0gB,GAAyB,SAAUzlV,GACtC,OAAOA,EAAMpwB,YAEd9nK,OAAOyJ,eAAek0gB,GAAwB,OAAQ,CACrDrghB,MAAO,OACPqM,cAAc,IAEf,IAAIi0gB,GAA6B,WAChC,SAASA,EAA0Bhwe,GAClCo4d,EAAuBp4d,EAAS,EAAG,6BACnCA,EAAU8ve,GAA2B9ve,EAAS,mBAC9ChsC,KAAKi8gB,wCAA0Cjwe,EAAQghe,cAsBxD,OApBA5ugB,OAAOyJ,eAAem0gB,EAA0B79gB,UAAW,gBAAiB,CAC3E4F,IAAK,WACJ,IAAKm4gB,GAA4Bl8gB,MAChC,MAAMm8gB,GAA8B,iBAErC,OAAOn8gB,KAAKi8gB,yCAEbn0gB,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAem0gB,EAA0B79gB,UAAW,OAAQ,CAClE4F,IAAK,WACJ,IAAKm4gB,GAA4Bl8gB,MAChC,MAAMm8gB,GAA8B,QAErC,OAAOJ,IAERj0gB,YAAY,EACZC,cAAc,IAERi0gB,EA1ByB,GAsCjC,SAASG,GAA8B3tgB,GACtC,OAAO,IAAInM,UAAU,uCAAyCmM,EAAO,oDAEtE,SAAS0tgB,GAA4BrkgB,GACpC,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,4CAGtCA,aAAamkgB,GApBrB59gB,OAAO+uB,iBAAiB6uf,GAA0B79gB,UAAW,CAC5D6ugB,cAAe,CAAEllgB,YAAY,GAC7B/L,KAAM,CAAE+L,YAAY,KAEqB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAem0gB,GAA0B79gB,UAAWiigB,EAAe9qV,YAAa,CACtF55K,MAAO,4BACPqM,cAAc,IAehB,IAAIq0gB,GAAoB,WACvB,OAAO,GAERh+gB,OAAOyJ,eAAeu0gB,GAAmB,OAAQ,CAChD1ghB,MAAO,OACPqM,cAAc,IAEf,IAAIs0gB,GAAwB,WAC3B,SAASA,EAAqBrwe,GAC7Bo4d,EAAuBp4d,EAAS,EAAG,wBACnCA,EAAU8ve,GAA2B9ve,EAAS,mBAC9ChsC,KAAKs8gB,mCAAqCtwe,EAAQghe,cAsBnD,OApBA5ugB,OAAOyJ,eAAew0gB,EAAqBl+gB,UAAW,gBAAiB,CACtE4F,IAAK,WACJ,IAAKw4gB,GAAuBv8gB,MAC3B,MAAMw8gB,GAAyB,iBAEhC,OAAOx8gB,KAAKs8gB,oCAEbx0gB,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAew0gB,EAAqBl+gB,UAAW,OAAQ,CAC7D4F,IAAK,WACJ,IAAKw4gB,GAAuBv8gB,MAC3B,MAAMw8gB,GAAyB,QAEhC,OAAOJ,IAERt0gB,YAAY,EACZC,cAAc,IAERs0gB,EA1BoB,GAsC5B,SAASG,GAAyBhugB,GACjC,OAAO,IAAInM,UAAU,kCAAoCmM,EAAO,+CAEjE,SAAS+tgB,GAAuB1kgB,GAC/B,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,uCAGtCA,aAAawkgB,GAiBrB,SAASI,GAAgC55gB,EAAIs2R,EAAUjwR,GAEtD,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUwyQ,GAChB,OAAOgmP,EAAY7+f,EAAIs2R,EAAU,CAACzd,KAGpC,SAASghQ,GAAgC75gB,EAAIs2R,EAAUjwR,GAEtD,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUwyQ,GAChB,OAAO+lP,EAAY5+f,EAAIs2R,EAAU,CAACzd,KAGpC,SAASihQ,GAAoC95gB,EAAIs2R,EAAUjwR,GAE1D,OADAg7f,EAAerhgB,EAAIqG,GACZ,SAAUotL,EAAOolF,GACvB,OAAOgmP,EAAY7+f,EAAIs2R,EAAU,CAChC7iG,EACAolF,KAtDHt9Q,OAAO+uB,iBAAiBkvf,GAAqBl+gB,UAAW,CACvD6ugB,cAAe,CAAEllgB,YAAY,GAC7B/L,KAAM,CAAE+L,YAAY,KAEqB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAew0gB,GAAqBl+gB,UAAWiigB,EAAe9qV,YAAa,CACjF55K,MAAO,uBACPqM,cAAc,IAmDhB,IAAI60gB,GAAmB,WACtB,SAASA,EAAgBC,EAAgBC,EAAqBC,QACtC,IAAnBF,IACHA,EAAiB,SAEU,IAAxBC,IACHA,EAAsB,SAEK,IAAxBC,IACHA,EAAsB,SAEAjhhB,IAAnB+ghB,IACHA,EAAiB,MAElB,IAAIG,EAAmBlP,GAAuBgP,EAAqB,oBAC/DG,EAAmBnP,GAAuBiP,EAAqB,mBAC/DG,EApDN,SAA4B/jP,EAAUjwR,GACrC+6f,EAAiB9qO,EAAUjwR,GAC3B,IAAI4oL,EAAqB,OAAbqnG,QAAkC,IAAbA,OAAsB,EAASA,EAASrnG,MACrEqrV,EAA4B,OAAbhkP,QAAkC,IAAbA,OAAsB,EAASA,EAASgkP,aAC5Ep9f,EAAqB,OAAbo5Q,QAAkC,IAAbA,OAAsB,EAASA,EAASp5Q,MACrEs8G,EAAyB,OAAb88J,QAAkC,IAAbA,OAAsB,EAASA,EAAS98J,UACzE+gZ,EAA4B,OAAbjkP,QAAkC,IAAbA,OAAsB,EAASA,EAASikP,aAChF,MAAO,CACNtrV,WAAiBh2L,IAAVg2L,OAAsBh2L,EAAY2ghB,GAAgC3qV,EAAOqnG,EAAUjwR,EAAU,4BACpGi0gB,aAAcA,EACdp9f,WAAiBjkB,IAAVikB,OAAsBjkB,EAAY4ghB,GAAgC38f,EAAOo5Q,EAAUjwR,EAAU,4BACpGmzH,eAAyBvgI,IAAdugI,OAA0BvgI,EAAY6ghB,GAAoCtgZ,EAAW88J,EAAUjwR,EAAU,gCACpHk0gB,aAAcA,GAwCIC,CAAmBR,EAAgB,mBACrD,QAAiC/ghB,IAA7BohhB,EAAYC,aACf,MAAM,IAAIxV,WAAW,kCAEtB,QAAiC7rgB,IAA7BohhB,EAAYE,aACf,MAAM,IAAIzV,WAAW,kCAEtB,IAII2V,EAJAC,EAAwB5P,GAAqBsP,EAAkB,GAC/DO,EAAwB3P,GAAqBoP,GAC7CQ,EAAwB9P,GAAqBqP,EAAkB,GAC/DU,EAAwB7P,GAAqBmP,IA6CnD,SAAmCr1W,EAAQg2W,EAAcF,EAAuBC,EAAuBH,EAAuBC,GAC7H,SAAS3Q,IACR,OAAO8Q,EAER,SAAS5O,EAAez4U,GACvB,OAuLF,SAAkD3uB,EAAQ2uB,GACzD,IAAIolF,EAAa/zG,EAAOi2W,2BACxB,OAAIj2W,EAAOwoW,cAEHhP,EADyBx5V,EAAOk2W,4BACgB,WACtD,IAAI71gB,EAAW2/J,EAAOm2W,UAEtB,GAAc,aADF91gB,EAASs2c,OAEpB,MAAMt2c,EAASg7f,aAEhB,OAAO+a,GAAiDriQ,EAAYplF,MAG/DynV,GAAiDriQ,EAAYplF,GApM5D0nV,CAAyCr2W,EAAQ2uB,GAEzD,SAAS24U,EAAe1jZ,GACvB,OAmMF,SAAkDo8C,EAAQp8C,GAEzD,OADA0yZ,GAAqBt2W,EAAQp8C,GACtBs1Y,OAAoB/kgB,GArMnBoihB,CAAyCv2W,EAAQp8C,GAEzD,SAASyjZ,IACR,OAoMF,SAAkDrnW,GACjD,IAAI4zW,EAAW5zW,EAAOw2W,UAClBziQ,EAAa/zG,EAAOi2W,2BACpBQ,EAAe1iQ,EAAW2iQ,kBAE9B,OADAC,GAAgD5iQ,GACzCylP,EAAqBid,GAAc,WACzC,GAAwB,YAApB7C,EAASj9D,OACZ,MAAMi9D,EAASvY,aAEhBqU,GAAqCkE,EAASvV,8BAC5C,SAAU7ub,GAEZ,MADA8mc,GAAqBt2W,EAAQxwF,GACvBokc,EAASvY,gBAhNRub,CAAyC52W,GAGjD,SAASmlW,IACR,OA+MF,SAAmDnlW,GAElD,OADA62W,GAA+B72W,GAAQ,GAChCA,EAAOk2W,2BAjNNY,CAA0C92W,GAElD,SAASolW,EAAgBxhZ,GAExB,OADAmzZ,GAA4C/2W,EAAQp8C,GAC7Cs1Y,OAAoB/kgB,GAN5B6rK,EAAOm2W,UA5kER,SAA8BjR,EAAgBkC,EAAgBC,EAAgBC,EAAgBjC,EAAe6B,QACtF,IAAlB7B,IACHA,EAAgB,QAEK,IAAlB6B,IACHA,EAAgB,WACf,OAAO,IAGT,IAAIlnW,EAASvpK,OAAOC,OAAOkwgB,GAAepwgB,WAI1C,OAHAywgB,GAAyBjnW,GAEzBunW,GAAqCvnW,EADpBvpK,OAAOC,OAAOywgB,GAAgC3wgB,WACN0ugB,EAAgBkC,EAAgBC,EAAgBC,EAAgBjC,EAAe6B,GACjIlnW,EA+jEYg3W,CAAqB9R,EAAgBkC,EAAgBC,EAAgBC,EAAgBwO,EAAuBC,GAQ/H/1W,EAAOw2W,UAAYnE,GAAqBnN,EAAgBC,EAAeC,EAAiBwQ,EAAuBC,GAC/G71W,EAAOwoW,mBAAgBr0gB,EACvB6rK,EAAOk2W,gCAA6B/hhB,EACpC6rK,EAAOi3W,wCAAqC9ihB,EAC5C0ihB,GAA+B72W,GAAQ,GACvCA,EAAOi2W,gCAA6B9hhB,EAlEnC+ihB,CAA0B7+gB,KAHP4ggB,GAAW,SAAU1hd,GACvCo+d,EAAuBp+d,KAEsBu+d,EAAuBC,EAAuBH,EAAuBC,GAqKrH,SAA8D71W,EAAQu1W,GACrE,IAAIxhQ,EAAat9Q,OAAOC,OAAOyghB,GAAiC3ghB,WAC5D4ghB,EAAqB,SAAUzoV,GAClC,IAEC,OADA0oV,GAAwCtjQ,EAAYplF,GAC7CuqU,OAAoB/kgB,GAC1B,MAAOmjhB,GACR,OAAOne,EAAoBme,KAGzBC,EAAiB,WACpB,OAAOre,OAAoB/kgB,SAEEA,IAA1BohhB,EAAY7gZ,YACf0iZ,EAAqB,SAAUzoV,GAC9B,OAAO4mV,EAAY7gZ,UAAUi6D,EAAOolF,UAGZ5/Q,IAAtBohhB,EAAYprV,QACfotV,EAAiB,WAChB,OAAOhC,EAAYprV,MAAM4pF,KA1B5B,SAA+C/zG,EAAQ+zG,EAAYqjQ,EAAoBG,GACtFxjQ,EAAWyjQ,2BAA6Bx3W,EACxCA,EAAOi2W,2BAA6BliQ,EACpCA,EAAW0jQ,oBAAsBL,EACjCrjQ,EAAW2iQ,gBAAkBa,EAyB7BG,CAAsC13W,EAAQ+zG,EAAYqjQ,EAAoBG,GA3L7EI,CAAqDt/gB,KAAMk9gB,QACjCphhB,IAAtBohhB,EAAYn9f,MACfu9f,EAAqBJ,EAAYn9f,MAAM/f,KAAK49gB,6BAE5CN,OAAqBxhhB,GAuBvB,OApBAsC,OAAOyJ,eAAe+0gB,EAAgBz+gB,UAAW,WAAY,CAC5D4F,IAAK,WACJ,IAAKw7gB,GAAkBv/gB,MACtB,MAAMw/gB,GAA0B,YAEjC,OAAOx/gB,KAAKm+gB,WAEbr2gB,YAAY,EACZC,cAAc,IAEf3J,OAAOyJ,eAAe+0gB,EAAgBz+gB,UAAW,WAAY,CAC5D4F,IAAK,WACJ,IAAKw7gB,GAAkBv/gB,MACtB,MAAMw/gB,GAA0B,YAEjC,OAAOx/gB,KAAK89gB,WAEbh2gB,YAAY,EACZC,cAAc,IAER60gB,EA3De,GAmGvB,SAAS2C,GAAkB1ngB,GAC1B,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,+BAGtCA,aAAa+kgB,GAErB,SAASqB,GAAqBt2W,EAAQv/J,GACrCmvgB,GAAqC5vW,EAAOw2W,UAAUnY,0BAA2B59f,GACjFs2gB,GAA4C/2W,EAAQv/J,GAErD,SAASs2gB,GAA4C/2W,EAAQv/J,GAC5Dk2gB,GAAgD32W,EAAOi2W,4BACvDpK,GAA6C7rW,EAAOm2W,UAAUjO,0BAA2BzngB,GACrFu/J,EAAOwoW,eACVqO,GAA+B72W,GAAQ,GAGzC,SAAS62W,GAA+B72W,EAAQiqW,QACL91gB,IAAtC6rK,EAAOk2W,4BACVl2W,EAAOi3W,qCAERj3W,EAAOk2W,2BAA6Bjd,GAAW,SAAU1hd,GACxDyoH,EAAOi3W,mCAAqC1/d,KAE7CyoH,EAAOwoW,cAAgByB,EAjExBxzgB,OAAO+uB,iBAAiByvf,GAAgBz+gB,UAAW,CAClDo9gB,SAAU,CAAEzzgB,YAAY,GACxBE,SAAU,CAAEF,YAAY,KAEiB,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAe+0gB,GAAgBz+gB,UAAWiigB,EAAe9qV,YAAa,CAC5E55K,MAAO,kBACPqM,cAAc,IA4DhB,IAAI+2gB,GAAoC,WACvC,SAASA,IACR,MAAM,IAAIz8gB,UAAU,uBAqCrB,OAnCAjE,OAAOyJ,eAAei3gB,EAAiC3ghB,UAAW,cAAe,CAChF4F,IAAK,WACJ,IAAK07gB,GAAmCz/gB,MACvC,MAAM0/gB,GAAqC,eAG5C,OAAOvI,GADkBn3gB,KAAKm/gB,2BAA2BhB,UAAUnY,4BAGpEl+f,YAAY,EACZC,cAAc,IAEf+2gB,EAAiC3ghB,UAAU6qgB,QAAU,SAAU1yU,GAI9D,QAHc,IAAVA,IACHA,OAAQx6L,IAEJ2jhB,GAAmCz/gB,MACvC,MAAM0/gB,GAAqC,WAE5CV,GAAwCh/gB,KAAMs2L,IAE/CwoV,EAAiC3ghB,UAAUgQ,MAAQ,SAAUo9G,GAI5D,QAHe,IAAXA,IACHA,OAASzvH,IAEL2jhB,GAAmCz/gB,MACvC,MAAM0/gB,GAAqC,SAqF9C,IAA2Dt3gB,IAnFbmjH,EAoF7C0yZ,GApFuCj+gB,KAoFPm/gB,2BAA4B/2gB,IAlF5D02gB,EAAiC3ghB,UAAUwhhB,UAAY,WACtD,IAAKF,GAAmCz/gB,MACvC,MAAM0/gB,GAAqC,cAyF9C,SAAmDhkQ,GAClD,IAAI/zG,EAAS+zG,EAAWyjQ,2BAExB9H,GADyB1vW,EAAOw2W,UAAUnY,2BAE1C,IAAI73f,EAAQ,IAAI9L,UAAU,8BAC1Bq8gB,GAA4C/2W,EAAQx5J,GA5FnDyxgB,CAA0C5/gB,OAEpC8+gB,EAvCgC,GAqDxC,SAASW,GAAmC5ngB,GAC3C,QAAKyof,EAAazof,MAGbzZ,OAAOD,UAAUoD,eAAeP,KAAK6W,EAAG,+BAGtCA,aAAaingB,GAiCrB,SAASR,GAAgD5iQ,GACxDA,EAAW0jQ,yBAAsBtjhB,EACjC4/Q,EAAW2iQ,qBAAkBvihB,EAE9B,SAASkjhB,GAAwCtjQ,EAAYplF,GAC5D,IAAI3uB,EAAS+zG,EAAWyjQ,2BACpBU,EAAqBl4W,EAAOw2W,UAAUnY,0BAC1C,IAAKoR,GAAiDyI,GACrD,MAAM,IAAIx9gB,UAAU,wDAErB,IACCi1gB,GAAuCuI,EAAoBvpV,GAC1D,MAAOluL,GAER,MADAs2gB,GAA4C/2W,EAAQv/J,GAC9Cu/J,EAAOw2W,UAAUnb,aAExB,IAAI4O,EAtmCL,SAAwDl2P,GACvD,OAAIi8P,GAA8Cj8P,GAqmC/BokQ,CAA+CD,GAC9DjO,IAAiBjqW,EAAOwoW,eAC3BqO,GAA+B72W,GAAQ,GAMzC,SAASo2W,GAAiDriQ,EAAYplF,GAErE,OAAO6qU,EADgBzlP,EAAW0jQ,oBAAoB9oV,QACRx6L,GAAW,SAAUq7E,GAElE,MADA8mc,GAAqBviQ,EAAWyjQ,2BAA4Bhoc,GACtDA,KAgDR,SAASuoc,GAAqClxgB,GAC7C,OAAO,IAAInM,UAAU,8CAAgDmM,EAAO,2DAE7E,SAASgxgB,GAA0BhxgB,GAClC,OAAO,IAAInM,UAAU,6BAA+BmM,EAAO,0CApI5DpQ,OAAO+uB,iBAAiB2xf,GAAiC3ghB,UAAW,CACnE6qgB,QAAS,CAAElhgB,YAAY,GACvBqG,MAAO,CAAErG,YAAY,GACrB63gB,UAAW,CAAE73gB,YAAY,GACzBulgB,YAAa,CAAEvlgB,YAAY,KAEc,kBAA/Bs4f,EAAe9qV,aACzBl3K,OAAOyJ,eAAei3gB,GAAiC3ghB,UAAWiigB,EAAe9qV,YAAa,CAC7F55K,MAAO,mCACPqM,cAAc,IA6HhB5M,EAAQ6ghB,0BAA4BA,GACpC7ghB,EAAQkhhB,qBAAuBA,GAC/BlhhB,EAAQqtgB,6BAA+BA,GACvCrtgB,EAAQ8tf,eAAiBA,GACzB9tf,EAAQ+xgB,yBAA2BA,GACnC/xgB,EAAQ0sgB,0BAA4BA,GACpC1sgB,EAAQ67gB,gCAAkCA,GAC1C77gB,EAAQ0pgB,4BAA8BA,EACtC1pgB,EAAQyhhB,gBAAkBA,GAC1BzhhB,EAAQ2jhB,iCAAmCA,GAC3C3jhB,EAAQozgB,eAAiBA,GACzBpzgB,EAAQ2zgB,gCAAkCA,GAC1C3zgB,EAAQw0gB,4BAA8BA,GACtCvxgB,OAAOyJ,eAAe1M,EAAS,aAAc,CAAEO,OAAO,KAx2H9Cs/P,EAAQ7/P,IA62HV,SAACuqe,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ2ve,4BAA8B3ve,EAAQ+ve,eAAiB/ve,EAAQkue,kBAAoBlue,EAAQwve,2BAAwB,EAE3H,IAIgC7je,EAJ5B0he,GAI4B1he,EAJU6+d,EAAoB,KAIT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAFrF0/d,EAAQb,EAAoB,GAIhC,SAAS5oR,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASsxB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,IAAI+7c,EAAiC,WACnC,SAASA,IACPj8c,EAAgBptB,KAAMqpe,GAElBrpe,KAAK1B,cAAgB+qe,IACvB,EAAI7C,EAAMqR,aAAa,wCAmD3B,OA/CApgc,EAAa4xb,EAAmB,CAAC,CAC/B/ke,IAAK,SACL5I,MAAO,SAAgB4/E,EAAOi2C,GAC5B,GAAIj2C,GAAS,GAAKi2C,GAAU,EAC1B,MAAM,IAAI3pH,MAAM,uBAGlB,IAAIwhe,EAASppe,KAAK+/gB,cAAczkc,EAAOi2C,GAEvC,MAAO,CACL63W,OAAQA,EACRlge,QAASkge,EAAO42C,WAAW,SAG9B,CACD17gB,IAAK,QACL5I,MAAO,SAAeukhB,EAAkB3kc,EAAOi2C,GAC7C,IAAK0uZ,EAAiB72C,OACpB,MAAM,IAAIxhe,MAAM,2BAGlB,GAAI0zE,GAAS,GAAKi2C,GAAU,EAC1B,MAAM,IAAI3pH,MAAM,uBAGlBq4gB,EAAiB72C,OAAO9tZ,MAAQA,EAChC2kc,EAAiB72C,OAAO73W,OAASA,IAElC,CACDjtH,IAAK,UACL5I,MAAO,SAAiBukhB,GACtB,IAAKA,EAAiB72C,OACpB,MAAM,IAAIxhe,MAAM,2BAGlBq4gB,EAAiB72C,OAAO9tZ,MAAQ,EAChC2kc,EAAiB72C,OAAO73W,OAAS,EACjC0uZ,EAAiB72C,OAAS,KAC1B62C,EAAiB/2gB,QAAU,OAE5B,CACD5E,IAAK,gBACL5I,MAAO,SAAuB4/E,EAAOi2C,IACnC,EAAIi1W,EAAMqR,aAAa,+CAIpBxO,EAxD4B,GA2DrClue,EAAQkue,kBAAoBA,EAE5B,IAAIsB,EAAqC,WACvC,SAASA,EAAsBtkc,GAC7B,IAAI65e,EAAe75e,EAAKinc,QACpBA,OAA2B,IAAjB4yC,EAA0B,KAAOA,EAC3CC,EAAoB95e,EAAKokc,aACzBA,OAAqC,IAAtB01C,GAAuCA,EAE1D/yf,EAAgBptB,KAAM2qe,GAElB3qe,KAAK1B,cAAgBqse,IACvB,EAAInE,EAAMqR,aAAa,4CAGzB73e,KAAKste,QAAUA,EACftte,KAAKyqe,aAAeA,EA2DtB,OAxDAhzb,EAAakzb,EAAuB,CAAC,CACnCrme,IAAK,QACL5I,MAAO,WACL,IAAI0khB,EAAShjU,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,EAAQ9gc,GACzF,IAEIn6B,EAAMgzF,EAAKgpY,EAFX7yb,EAAQ33C,KAGZ,OAAOwoe,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAGH,GAFAyO,EAAOm6B,EAAMn6B,KAETxO,KAAKste,QAAS,CAChB1D,EAAS7pe,KAAO,EAChB,MAGF,MAAM,IAAI6H,MAAM,2HAElB,KAAK,EACH,GAAI4G,EAAM,CACRo7d,EAAS7pe,KAAO,EAChB,MAGF,MAAM,IAAI6H,MAAM,gCAElB,KAAK,EAGH,OAFA45F,EAAMxhG,KAAKste,QAAU9+d,GAAQxO,KAAKyqe,aAAe,SAAW,IAC5DD,EAAkBxqe,KAAKyqe,aAAejE,EAAMmN,oBAAoBsM,OAASzZ,EAAMmN,oBAAoB9M,KAC5F+C,EAASQ,OAAO,SAAUpqe,KAAKupe,WAAW/nY,EAAKgpY,GAArB,OAA+C,SAAUj/W,GACxF,MAAM,IAAI3jH,MAAM,kBAAkB0D,OAAOqsC,EAAM8yb,aAAe,UAAY,GAAI,aAAan/d,OAAOk2F,QAGtG,KAAK,EACL,IAAK,MACH,OAAOooY,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,SAAespe,GACb,OAAO82C,EAAOn4gB,MAAMjI,KAAM0D,YA1CvB,IA+CN,CACDY,IAAK,aACL5I,MAAO,SAAoB8lG,EAAKgpY,IAC9B,EAAIhE,EAAMqR,aAAa,4CAIpBlN,EAzEgC,GA4EzCxve,EAAQwve,sBAAwBA,EAEhC,IAAIG,EAA2C,WAC7C,SAASA,EAA4Br7b,GACnC,IAAI4we,EAAgB5we,EAAM69b,QACtBA,OAA4B,IAAlB+yC,EAA2B,KAAOA,EAEhDjzf,EAAgBptB,KAAM8qe,GAElB9qe,KAAK1B,cAAgBwse,IACvB,EAAItE,EAAMqR,aAAa,kDAGzB73e,KAAKste,QAAUA,EAwDjB,OArDA71b,EAAaqzb,EAA6B,CAAC,CACzCxme,IAAK,QACL5I,MAAO,WACL,IAAI4khB,EAAUljU,EAAgCorR,EAAY,QAAYgB,MAAK,SAAS+2C,EAASl8N,GAC3F,IAAIqQ,EAAUlzN,EACd,OAAOgnY,EAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EAGH,GAFA20T,EAAWrQ,EAAMqQ,SAEb10T,KAAKste,QAAS,CAChBkzC,EAAUzghB,KAAO,EACjB,MAGF,MAAM,IAAI6H,MAAM,6HAElB,KAAK,EACH,GAAI8sT,EAAU,CACZ8rN,EAAUzghB,KAAO,EACjB,MAGF,MAAM,IAAI6H,MAAM,oCAElB,KAAK,EAEH,OADA45F,EAAM,GAAGl2F,OAAOtL,KAAKste,SAAShie,OAAOopT,GAC9B8rN,EAAUp2C,OAAO,SAAUpqe,KAAKupe,WAAW/nY,GAAhB,OAA8B,SAAU+pB,GACxE,MAAM,IAAI3jH,MAAM,gCAAgC0D,OAAOk2F,QAG3D,KAAK,EACL,IAAK,MACH,OAAOg/a,EAAU7uO,UAGtB4uO,EAAUvghB,UAOf,OAJA,SAAeyghB,GACb,OAAOH,EAAQr4gB,MAAMjI,KAAM0D,YAvCxB,IA4CN,CACDY,IAAK,aACL5I,MAAO,SAAoB8lG,IACzB,EAAIglY,EAAMqR,aAAa,4CAIpB/M,EAnEsC,GAsE/C3ve,EAAQ2ve,4BAA8BA,EAEtC,IAAII,EAA8B,WAChC,SAASA,IACP99c,EAAgBptB,KAAMkre,GAElBlre,KAAK1B,cAAgB4se,IACvB,EAAI1E,EAAMqR,aAAa,qCAoC3B,OAhCApgc,EAAayzb,EAAgB,CAAC,CAC5B5me,IAAK,SACL5I,MAAO,SAAgB4/E,EAAOi2C,GAC5B,GAAIj2C,GAAS,GAAKi2C,GAAU,EAC1B,MAAM,IAAI3pH,MAAM,0BAGlB,IAAIomH,EAAMhuH,KAAK0ghB,WAAW,WAO1B,OALA1yZ,EAAImuL,aAAa,UAAW,OAC5BnuL,EAAImuL,aAAa,QAAS,GAAG7wS,OAAOgwE,EAAO,OAC3C0yC,EAAImuL,aAAa,SAAU,GAAG7wS,OAAOimH,EAAQ,OAC7CvD,EAAImuL,aAAa,sBAAuB,QACxCnuL,EAAImuL,aAAa,UAAW,OAAO7wS,OAAOgwE,EAAO,KAAKhwE,OAAOimH,IACtDvD,IAER,CACD1pH,IAAK,gBACL5I,MAAO,SAAuBwE,GAC5B,GAAoB,kBAATA,EACT,MAAM,IAAI0H,MAAM,4BAGlB,OAAO5H,KAAK0ghB,WAAWxghB,KAExB,CACDoE,IAAK,aACL5I,MAAO,SAAoBwE,IACzB,EAAIsme,EAAMqR,aAAa,4CAIpB3M,EAzCyB,GA4ClC/ve,EAAQ+ve,eAAiBA,GAIlB,SAACxF,wBAAyBvqe,QAASwqe,qBAE1C,aAGAvne,OAAOyJ,eAAe1M,QAAS,aAAe,CAC5CO,OAAO,IAETP,QAAQwlhB,MAAQxlhB,QAAQylhB,WAAazlhB,QAAQ0lhB,UAAY1lhB,QAAQ2lhB,aAAe3lhB,QAAQ4lhB,iBAAmB5lhB,QAAQ6lhB,uBAAyB7lhB,QAAQ8lhB,sBAAwB9lhB,QAAQ+lhB,aAAe/lhB,QAAQgmhB,+BAAiChmhB,QAAQimhB,qBAAuBjmhB,QAAQkmhB,8BAA2B,EAC9SlmhB,QAAQmmhB,YAAcA,YACtBnmhB,QAAQomhB,2BAA6BA,2BACrCpmhB,QAAQuuB,aAAU,EAElB,IAAI8+c,aAAe7hR,uBAAuBg/Q,oBAAoB,IAE1Da,MAAQb,oBAAoB,GAE5B67C,eAAiB77C,oBAAoB,GAErC87C,aAAe97C,oBAAoB,KAEnC+7C,YAAc/7C,oBAAoB,KAElCg8C,oBAAsBh8C,oBAAoB,KAE1Ci8C,QAAUj8C,oBAAoB,KAE9Bk8C,gBAAkBl8C,oBAAoB,KAEtCijB,SAAWjjB,oBAAoB,GAE/Bm8C,iBAAmBn8C,oBAAoB,KAEvCo8C,UAAYp8C,oBAAoB,KAEhCq8C,yBAA2Br8C,oBAAoB,KAE/Cs8C,kBAAoBt8C,oBAAoB,KAExCu8C,UAAYv8C,oBAAoB,KAEpC,SAASh/Q,uBAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAEzF,SAASq7gB,2BAA2Br7gB,EAAKs7gB,EAAY1mhB,GAAS2mhB,2BAA2Bv7gB,EAAKs7gB,GAAaA,EAAW16gB,IAAIZ,EAAKpL,GAE/H,SAAS2mhB,2BAA2Bv7gB,EAAKw7gB,GAAqB,GAAIA,EAAkBr+gB,IAAI6C,GAAQ,MAAM,IAAIzE,UAAU,kEAEpH,SAASkghB,sBAAsBC,EAAUJ,EAAY1mhB,GAA4I,OAAvD+mhB,yBAAyBD,EAApFE,6BAA6BF,EAAUJ,EAAY,OAAuD1mhB,GAAeA,EAExM,SAAS+mhB,yBAAyBD,EAAU7pa,EAAYj9G,GAAS,GAAIi9G,EAAWjxG,IAAOixG,EAAWjxG,IAAI1G,KAAKwhhB,EAAU9mhB,OAAe,CAAE,IAAKi9G,EAAW3wG,SAAY,MAAM,IAAI3F,UAAU,4CAA+Cs2G,EAAWj9G,MAAQA,GAExP,SAASinhB,sBAAsBH,EAAUJ,GAA0F,OAAOQ,yBAAyBJ,EAA3FE,6BAA6BF,EAAUJ,EAAY,QAE3H,SAASM,6BAA6BF,EAAUJ,EAAYl3f,GAAU,IAAKk3f,EAAWn+gB,IAAIu+gB,GAAa,MAAM,IAAInghB,UAAU,gBAAkB6oB,EAAS,kCAAqC,OAAOk3f,EAAWr+gB,IAAIy+gB,GAEjN,SAASI,yBAAyBJ,EAAU7pa,GAAc,OAAIA,EAAW50G,IAAc40G,EAAW50G,IAAI/C,KAAKwhhB,GAAoB7pa,EAAWj9G,MAE1I,SAASikG,mBAAmB9xF,GAAO,OAAOouQ,mBAAmBpuQ,IAAQquQ,iBAAiBruQ,IAAQ+6d,4BAA4B/6d,IAAQsuQ,qBAElI,SAASA,qBAAuB,MAAM,IAAI95Q,UAAU,wIAEpD,SAAS65Q,iBAAiBrgR,GAAQ,GAAsB,qBAAX6D,QAAmD,MAAzB7D,EAAK6D,OAAOC,WAA2C,MAAtB9D,EAAK,cAAuB,OAAO4F,MAAMuN,KAAKnT,GAEtJ,SAASogR,mBAAmBpuQ,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO86d,kBAAkB96d,GAEpF,SAASotP,2BAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,4BAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAEj+B,SAAShkB,gBAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,kBAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,aAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,kBAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,kBAAkBprF,EAAaurF,GAAqBvrF,EAEzM,SAASyvL,mBAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,kBAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,mBAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,mBAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASq3C,eAAetlC,EAAK7K,GAAK,OAAO+ue,gBAAgBlke,IAAQske,sBAAsBtke,EAAK7K,IAAM4le,4BAA4B/6d,EAAK7K,IAAMove,mBAEzI,SAASA,mBAAqB,MAAM,IAAI/ve,UAAU,6IAElD,SAASume,4BAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,kBAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,kBAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,kBAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAASmvP,sBAAsBtke,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GAE1f,SAASF,gBAAgBlke,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAE/D,SAAS0sC,QAAQzzC,GAAmV,OAAtOyzC,QAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,QAAQzzC,GAEnX,IAAI+7gB,yBAA2B,MAC3BC,4BAA8B,IAC9B1B,qBAAuBx4B,SAASE,SAAW44B,YAAYqB,kBAAoBvB,eAAep7C,iBAC9Fjre,QAAQimhB,qBAAuBA,qBAC/B,IAAIC,yBAA2Bz4B,SAASE,SAAW44B,YAAYsB,sBAAwBxB,eAAen7C,qBACtGlre,QAAQkmhB,yBAA2BA,yBACnC,IAAIF,+BAAiCv4B,SAASE,SAAW44B,YAAYuB,4BAA8BzB,eAAet7C,2BAE9Gg9C,uBAEJ,SAAS3B,2BAA2B4B,GAClCD,uBAAyBC,EAG3B,SAAS7B,YAAY96Z,GACnB,IACIv5F,EADAtB,EAAO,IAAIq1f,uBAGf,GAAmB,kBAARx6Z,GAAoBA,aAAe6zF,IAC5CptL,EAAS,CACPu0E,IAAKglB,QAEF,IAAI,EAAIggX,MAAM12T,eAAetpD,GAClCv5F,EAAS,CACP+tB,KAAMwrE,QAEH,GAAIA,aAAey6Z,sBACxBh0f,EAAS,CACPwoK,MAAOjvE,OAEJ,CACL,GAAqB,WAAjBjsE,QAAQisE,GACV,MAAM,IAAI5+G,MAAM,+FAGlB,IAAK4+G,EAAIhlB,MAAQglB,EAAIxrE,OAASwrE,EAAIivE,MAChC,MAAM,IAAI7tL,MAAM,+DAGlBqlB,EAASu5F,EAGX,IAAI7zE,EAASv0C,OAAOC,OAAO,MACvB+khB,EAAiB,KACjBt4f,EAAS,KAEb,IAAK,IAAIxmB,KAAO2oB,EAAQ,CACtB,IAAIvxB,EAAQuxB,EAAO3oB,GAEnB,OAAQA,GACN,IAAK,MACH,GAAsB,qBAAXoqB,OACT,IACEikB,EAAOruC,GAAO,IAAI+1M,IAAI3+M,EAAOgzB,OAAO+6B,UAAU2jE,KAC9C,SACA,MAAO0jN,IACP,EAAI01J,MAAMv+c,MAAM,6BAA8B3c,OAAOwlU,EAAI,YAEtD,GAAqB,kBAAVp1U,GAAsBA,aAAiB2+M,IAAK,CAC5D1nK,EAAOruC,GAAO5I,EAAMuF,WACpB,SAGF,MAAM,IAAI2G,MAAM,sFAElB,IAAK,QACHw7gB,EAAiB1nhB,EACjB,SAEF,IAAK,SACHovB,EAASpvB,EACT,SAEF,IAAK,OACH,GAAIktf,SAASE,UAA8B,qBAAXh0U,QAA0Bp5K,aAAiBo5K,OACzEniI,EAAOruC,GAAO,IAAIkxJ,WAAW95J,OACxB,IAAIA,aAAiB85J,WAC1B,MACK,GAAqB,kBAAV95J,EAChBi3C,EAAOruC,IAAO,EAAIkie,MAAM0D,eAAexue,QAClC,GAAuB,WAAnB6+C,QAAQ7+C,IAAiC,OAAVA,GAAmB0gD,MAAM1gD,EAAMmG,QAElE,MAAI,EAAI2ke,MAAM12T,eAAep0K,GAGlC,MAAM,IAAIkM,MAAM,+GAFhB+qC,EAAOruC,GAAO,IAAIkxJ,WAAW95J,QAF7Bi3C,EAAOruC,GAAO,IAAIkxJ,WAAW95J,GAO/B,SAGJi3C,EAAOruC,GAAO5I,EAqDhB,GAlDAi3C,EAAO0we,eAAiB1we,EAAO0we,gBAAkBR,yBACjDlwe,EAAO2we,kBAAoB3we,EAAO2we,mBAAqBjC,yBACvD1ue,EAAO4we,wBAA0B5we,EAAO4we,yBAA2BpC,+BACnExue,EAAO6we,cAAuC,IAAxB7we,EAAO8we,aAC7B9we,EAAO+we,qBAAqD,IAA/B/we,EAAO+we,oBACpC/we,EAAOgxe,QAA2B,IAAlBhxe,EAAOgxe,OACvBhxe,EAAOixe,WAAiC,IAArBjxe,EAAOixe,WAEO,kBAAtBjxe,EAAOkxe,aAA2B,EAAIrC,eAAej6C,cAAc50b,EAAOkxe,eACnFlxe,EAAOkxe,WAAa,MAGjBlihB,OAAOC,UAAU+wC,EAAOmxe,gBAC3Bnxe,EAAOmxe,cAAgB,GAGY,mBAA1Bnxe,EAAOoxe,iBAChBpxe,EAAOoxe,eAAiBpxe,EAAO2we,oBAAsB9B,eAAen7C,sBAAwB1zb,EAAO4we,0BAA4B/B,eAAet7C,4BAG1G,mBAA3Bvzb,EAAOg1c,kBAChBh1c,EAAOg1c,iBAAkB,GAGW,mBAA3Bh1c,EAAOqxe,kBAChBrxe,EAAOqxe,gBAAkBp7B,SAASE,UAGC,mBAA1Bn2c,EAAOsxe,iBAChBtxe,EAAOsxe,gBAAkBr7B,SAASE,WAAan2c,EAAOqxe,iBAGpB,qBAAzBrxe,EAAO0qQ,gBAChB1qQ,EAAO0qQ,cAAgB++B,WAAWp2S,UAGD,mBAAxB2M,EAAOuxe,eAChBvxe,EAAOuxe,cAAe,GAGY,mBAAzBvxe,EAAOwxe,gBAChBxxe,EAAOwxe,eAAgB,GAGc,mBAA5Bxxe,EAAOyxe,mBAChBzxe,EAAOyxe,kBAAmB,IAG5B,EAAI59C,MAAM6Q,mBAAmB1kc,EAAO2jc,YAE/Bxrd,EAAQ,CACX,IAAIu5f,EAAe,CACjB/tC,UAAW3jc,EAAO2jc,UAClB0nB,KAAM6jB,gBAAgByC,oBAAoBC,YAE5Cz5f,EAASu5f,EAAarmB,KAAO6iB,UAAU2D,SAASH,GAAgB,IAAIxD,UAAUwD,GAC9E14f,EAAK84f,QAAU35f,EAGjB,IAAI45f,EAAQ/4f,EAAK+4f,MAiDjB,OAhDA55f,EAAOk3H,QAAQzrE,MAAK,WAClB,GAAI5qD,EAAKg5f,UACP,MAAM,IAAI/8gB,MAAM,mBAGlB,IAAIg9gB,EAAkBC,eAAe/5f,EAAQ6nB,EAAQywe,EAAgBsB,GAEjEI,EAAuB,IAAI7le,SAAQ,SAAUC,GAC/C,IAAI6le,EAEA3B,EACF2B,EAAgB,IAAI9C,kBAAkB+C,uBAAuB,CAC3DnjhB,OAAQ8wC,EAAO9wC,OACf4uU,YAAa99R,EAAO89R,YACpBw0M,gBAAiBtye,EAAOsye,gBACxBC,2BAA4Bvye,EAAOuye,2BACnChB,aAAcvxe,EAAOuxe,aACrBC,cAAexxe,EAAOwxe,eACrBf,GACOzwe,EAAOqI,OACjB+pe,EAAgB7B,uBAAuB,CACrC1hb,IAAK7uD,EAAO6uD,IACZ3/F,OAAQ8wC,EAAO9wC,OACfsjhB,YAAaxye,EAAOwye,YACpBC,gBAAiBzye,EAAOyye,gBACxB/B,eAAgB1we,EAAO0we,eACvBa,aAAcvxe,EAAOuxe,aACrBC,cAAexxe,EAAOwxe,iBAI1Bjle,EAAQ6le,MAEV,OAAO9le,QAAQwnJ,IAAI,CAACm+U,EAAiBE,IAAuBvuc,MAAK,SAAUlwC,GACzE,IAAIsC,EAAQwK,eAAe9M,EAAM,GAC7Bg/e,EAAW18e,EAAM,GACjBo8e,EAAgBp8e,EAAM,GAE1B,GAAIhd,EAAKg5f,UACP,MAAM,IAAI/8gB,MAAM,mBAGlB,IAAI09gB,EAAiB,IAAIxD,iBAAiByD,eAAeb,EAAOW,EAAUv6f,EAAOkze,MAC7ExhT,EAAY,IAAIgpU,gBAAgBF,EAAgB35f,EAAMo5f,EAAepye,GACzEhnB,EAAK85f,WAAajpU,EAClB8oU,EAAe/+X,KAAK,QAAS,YA7CjC,MA+CY56H,EAAK+5f,YAAYvvc,QACtBxqD,EAGT,SAASk5f,eAAev7C,EAAIm3C,EAAKkF,EAAKC,GACpC,OAAOC,gBAAgB59gB,MAAMjI,KAAM0D,WAGrC,SAASmihB,kBAkEP,OAjEAA,gBAAkBzoU,kBAAgCorR,aAAY,QAAYgB,MAAK,SAASs8C,EAASh7f,EAAQmC,EAAQ84f,EAAuBrB,GACtI,IAAIW,EACJ,OAAO78C,aAAY,QAAYhuZ,MAAK,SAAmBwrc,GACrD,OACE,OAAQA,EAAU1ugB,KAAO0ugB,EAAUjmhB,MACjC,KAAK,EACH,IAAK+qB,EAAO65f,UAAW,CACrBqB,EAAUjmhB,KAAO,EACjB,MAGF,MAAM,IAAI6H,MAAM,wBAElB,KAAK,EASH,OARIm+gB,IACF94f,EAAOprB,OAASkkhB,EAAsBlkhB,OACtCorB,EAAOwjT,YAAcs1M,EAAsBt1M,YAC3CxjT,EAAOg4f,gBAAkBc,EAAsBd,gBAC/Ch4f,EAAOi4f,2BAA6Ba,EAAsBb,4BAG5Dc,EAAUjmhB,KAAO,EACV+qB,EAAOw6f,eAAeW,gBAAgB,gBAAiB,CAC5DvB,MAAOA,EACPwB,WAAY,WACZj5f,OAAQ,CACN+tB,KAAM/tB,EAAO+tB,KACbwmD,IAAKv0E,EAAOu0E,IACZ+D,SAAUt4E,EAAOs4E,SACjB6+a,iBAAkBn3f,EAAOm3f,iBACzBf,eAAgBp2f,EAAOo2f,eACvBxhhB,OAAQorB,EAAOprB,QAEjBiihB,aAAc72f,EAAO62f,aACrBE,gBAAiB/2f,EAAO+2f,gBACxBH,WAAY52f,EAAO42f,WACnBL,aAAcv2f,EAAOu2f,aACrB77B,gBAAiB16d,EAAO06d,gBACxB+7B,oBAAqBz2f,EAAOy2f,oBAC5BE,UAAW32f,EAAO22f,UAClBK,eAAgBh3f,EAAOg3f,eACvBkC,QAASl5f,EAAO82f,eAAiB92f,EAAOk5f,QAAU,KAClDC,oBAAqBn5f,EAAO82f,eAAiB92f,EAAOm5f,oBAAsB,OAG9E,KAAK,EAGH,GAFAf,EAAWW,EAAUpvc,MAEhB9rD,EAAO65f,UAAW,CACrBqB,EAAUjmhB,KAAO,EACjB,MAGF,MAAM,IAAI6H,MAAM,wBAElB,KAAK,EACH,OAAOo+gB,EAAU57C,OAAO,SAAUi7C,GAEpC,KAAK,EACL,IAAK,MACH,OAAOW,EAAUr0O,UAGtBm0O,QAEkB79gB,MAAMjI,KAAM0D,WA5QrCvI,QAAQgmhB,+BAAiCA,+BA+QzC,IAAIH,uBAAsC,WACxC,SAASA,IACP5zf,gBAAgBptB,KAAMghhB,GAEtBhhhB,KAAK0lhB,aAAc,EAAIl/C,MAAM+O,2BAC7Bv1e,KAAKylhB,WAAa,KAClBzlhB,KAAKykhB,QAAU,KACfzkhB,KAAK0khB,MAAQ,IAAIp5gB,OAAO01gB,EAAuBqF,WAAWtwO,OAC1D/1S,KAAK2khB,WAAY,EACjB3khB,KAAKsmhB,WAAa,KAClBtmhB,KAAKumhB,WAAa,KAClBvmhB,KAAKwmhB,qBAAuB,KAsD9B,OAnDA/ue,aAAaupe,EAAwB,CAAC,CACpC18gB,IAAK,UACLP,IAAK,WACH,OAAO/D,KAAK0lhB,YAAY1jY,UAEzB,CACD19I,IAAK,UACL5I,MAAO,WACL,IAAI+qhB,EAAWrpU,kBAAgCorR,aAAY,QAAYgB,MAAK,SAASC,IACnF,IAAIi9C,EAEJ,OAAOl+C,aAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAGH,OAFAC,KAAK2khB,WAAY,EACjB/6C,EAAS7pe,KAAO,EACgC,QAAxC2mhB,EAAmB1mhB,KAAKylhB,kBAA6C,IAArBiB,OAA8B,EAASA,EAAiBl8c,UAElH,KAAK,EACHxqE,KAAKylhB,WAAa,KAEdzlhB,KAAKykhB,UACPzkhB,KAAKykhB,QAAQj6c,UAEbxqE,KAAKykhB,QAAU,MAGnB,KAAK,EACL,IAAK,MACH,OAAO76C,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,WACE,OAAOymhB,EAASx+gB,MAAMjI,KAAM0D,YA9BzB,KAmCL,CAAC,CACHY,IAAK,aACLP,IAAK,WACH,OAAO,EAAIyie,MAAM1kW,QAAQ9hI,KAAM,aAAc,CAC3C+1S,IAAK,QAKJirO,EAjEiC,GAoE1C7lhB,QAAQ6lhB,uBAAyBA,uBAEjC,IAAIC,sBAAqC,WACvC,SAASA,EAAsBp/gB,EAAQ4uU,GACrC,IAAIw0M,EAAkBvhhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACjFwhhB,EAA6BxhhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAErG0pB,gBAAgBptB,KAAMihhB,GAEtBjhhB,KAAK6B,OAASA,EACd7B,KAAKywU,YAAcA,EACnBzwU,KAAKilhB,gBAAkBA,EACvBjlhB,KAAKklhB,2BAA6BA,EAClCllhB,KAAK2mhB,gBAAkB,GACvB3mhB,KAAK4mhB,mBAAqB,GAC1B5mhB,KAAK6mhB,0BAA4B,GACjC7mhB,KAAK8mhB,0BAA4B,GACjC9mhB,KAAK+mhB,kBAAmB,EAAIvgD,MAAM+O,2BAsHpC,OAnHA99b,aAAawpe,EAAuB,CAAC,CACnC38gB,IAAK,mBACL5I,MAAO,SAA0BspC,GAC/BhlC,KAAK2mhB,gBAAgBv6gB,KAAK44B,KAE3B,CACD1gC,IAAK,sBACL5I,MAAO,SAA6BspC,GAClChlC,KAAK4mhB,mBAAmBx6gB,KAAK44B,KAE9B,CACD1gC,IAAK,6BACL5I,MAAO,SAAoCspC,GACzChlC,KAAK6mhB,0BAA0Bz6gB,KAAK44B,KAErC,CACD1gC,IAAK,6BACL5I,MAAO,SAAoCspC,GACzChlC,KAAK8mhB,0BAA0B16gB,KAAK44B,KAErC,CACD1gC,IAAK,cACL5I,MAAO,SAAqBa,EAAO+5L,GACjC,IACIn2K,EADA+sd,EAAYjyO,2BAA2Bj7P,KAAK2mhB,iBAGhD,IACE,IAAKz5C,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,OAE3C0kC,EADe7kB,EAAMzkB,OACZa,EAAO+5L,GAElB,MAAOllJ,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,OAGb,CACDpyE,IAAK,iBACL5I,MAAO,SAAwBoxJ,EAAQqtG,GACrC,IAAIxiN,EAAQ33C,KAEZA,KAAK+mhB,iBAAiB/kY,QAAQzrE,MAAK,WACjC,IACI42Z,EADAC,EAAanyO,2BAA2BtjN,EAAMive,oBAGlD,IACE,IAAKx5C,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,OAE9C0kC,EADemoc,EAAOzxe,OACboxJ,EAAQqtG,GAEnB,MAAO/oN,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,UAIhB,CACDpyE,IAAK,wBACL5I,MAAO,SAA+B46L,GACpC,IAAIlzE,EAASpjH,KAEbA,KAAK+mhB,iBAAiB/kY,QAAQzrE,MAAK,WACjC,IACIywc,EADAC,EAAahsR,2BAA2B73I,EAAOyja,2BAGnD,IACE,IAAKI,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,OAE9C0kC,EADegif,EAAOtrhB,OACb46L,GAEX,MAAOllJ,GACP61e,EAAW7+gB,EAAEgpC,GANf,QAQE61e,EAAWvwc,UAIhB,CACDpyE,IAAK,wBACL5I,MAAO,WACL,IAAI6nH,EAASvjH,KAEbA,KAAK+mhB,iBAAiB/kY,QAAQzrE,MAAK,WACjC,IACI2wc,EADAC,EAAalsR,2BAA2B13I,EAAOuja,2BAGnD,IACE,IAAKK,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,OAE9C0kC,EADekif,EAAOxrhB,SAGxB,MAAO01C,GACP+1e,EAAW/+gB,EAAEgpC,GANf,QAQE+1e,EAAWzwc,UAIhB,CACDpyE,IAAK,iBACL5I,MAAO,WACLsE,KAAK+mhB,iBAAiB7ne,YAEvB,CACD56C,IAAK,mBACL5I,MAAO,SAA0Ba,EAAOC,IACtC,EAAIgqe,MAAMqR,aAAa,4DAExB,CACDvze,IAAK,QACL5I,MAAO,gBAGFulhB,EArIgC,GAwIzC9lhB,QAAQ8lhB,sBAAwBA,sBAEhC,IAAIF,iBAAgC,WAClC,SAASA,EAAiBqG,EAAS5qU,GACjC,IAAIh1D,EAASxnJ,KAEbotB,gBAAgBptB,KAAM+ghB,GAEtB/ghB,KAAKqnhB,SAAWD,EAChBpnhB,KAAKylhB,WAAajpU,EAClBp+M,OAAOyJ,eAAe7H,KAAM,cAAe,CACzC+D,IAAK,WAEH,OADA,EAAIy9gB,eAAer6C,YAAY,uFACxBnne,KAAKsnhB,aAAa,MAG7BlphB,OAAOyJ,eAAe7H,KAAM,WAAY,CACtCtE,MAAO,WACL,IAAIytB,EAASi0L,kBAAgCorR,aAAY,QAAYgB,MAAK,SAAS+2C,IACjF,OAAO/3C,aAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EAEH,OADA,EAAIyhhB,eAAer6C,YAAY,wFACxBq5C,EAAUp2C,OAAO,SAAU5iV,EAAO0c,OAAS,CAChDqjX,YAAa,GACbC,UAAW,KAGf,KAAK,EACL,IAAK,MACH,OAAOhH,EAAU7uO,UAGtB4uO,OAOL,OAJA,WACE,OAAOp3f,EAAOlhB,MAAMjI,KAAM0D,YArBvB,KAyMX,OA5KA+zC,aAAaspe,EAAkB,CAAC,CAC9Bz8gB,IAAK,oBACLP,IAAK,WACH,OAAO/D,KAAKylhB,WAAWgC,oBAExB,CACDnjhB,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAKqnhB,SAASK,WAEtB,CACDpjhB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKqnhB,SAASC,eAEtB,CACDhjhB,IAAK,QACLP,IAAK,WACH,OAAO/D,KAAKylhB,WAAWvhX,QAExB,CACD5/J,IAAK,YACLP,IAAK,WACH,QAAS/D,KAAKylhB,WAAWkC,cAE1B,CACDrjhB,IAAK,aACLP,IAAK,WACH,OAAO/D,KAAKylhB,WAAWkC,cAExB,CACDrjhB,IAAK,UACL5I,MAAO,SAAiBkshB,GACtB,OAAO5nhB,KAAKylhB,WAAWoC,QAAQD,KAEhC,CACDtjhB,IAAK,eACL5I,MAAO,SAAsBD,GAC3B,OAAOuE,KAAKylhB,WAAWqC,aAAarshB,KAErC,CACD6I,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWsC,oBAExB,CACDzjhB,IAAK,iBACL5I,MAAO,SAAwBulC,GAC7B,OAAOjhC,KAAKylhB,WAAWuC,eAAe/mf,KAEvC,CACD38B,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWwC,kBAExB,CACD3jhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWyC,kBAExB,CACD5jhB,IAAK,cACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW0C,gBAExB,CACD7jhB,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW2C,yBAExB,CACD9jhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW4C,kBAExB,CACD/jhB,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW6C,mBAExB,CACDhkhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW8C,kBAExB,CACDjkhB,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW+C,oBAExB,CACDlkhB,IAAK,aACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWgD,eAExB,CACDnkhB,IAAK,2BACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWiD,6BAExB,CACDpkhB,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWkD,mBAExB,CACDrkhB,IAAK,cACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWmD,gBAExB,CACDtkhB,IAAK,cACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWoD,gBAExB,CACDvkhB,IAAK,UACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWxqe,YAExB,CACD32C,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAWqD,uBAAuB9mY,UAE/C,CACD19I,IAAK,UACL5I,MAAO,WACL,IAAIqthB,EAAkBrlhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACrF,OAAO1D,KAAKylhB,WAAWuD,aAAaD,GAAmB/ohB,KAAKiphB,aAE7D,CACD3khB,IAAK,UACL5I,MAAO,WACL,OAAOsE,KAAKkphB,YAAY1+c,YAEzB,CACDlmE,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAKylhB,WAAW0D,gBAExB,CACD7khB,IAAK,cACLP,IAAK,WACH,OAAO/D,KAAKylhB,WAAWyD,cAExB,CACD5khB,IAAK,eACL5I,MAAO,WAKL,OAJIsE,KAAKylhB,WAAWgC,kBAAkB1rhB,MAAQ,IAC5C,EAAIylhB,eAAer6C,YAAY,kGAG1Bnne,KAAKylhB,WAAW2D,iBAExB,CACD9khB,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW4D,oBAExB,CACD/khB,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW6D,iBAExB,CACDhlhB,IAAK,yBACL5I,MAAO,WACL,OAAOsE,KAAKylhB,WAAW8D,6BAIpBxI,EAxN2B,GA2NpC5lhB,QAAQ4lhB,iBAAmBA,iBAE3B,IAAID,aAA4B,WAC9B,SAASA,EAAa0I,EAAWC,EAAUjtU,EAAW6gG,GACpD,IAAIsmO,EAASjghB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAE5E0pB,gBAAgBptB,KAAM8ghB,GAEtB9ghB,KAAK0phB,WAAaF,EAClBxphB,KAAK2phB,UAAYF,EACjBzphB,KAAK4phB,eAAiBvsO,EACtBr9S,KAAKylhB,WAAajpU,EAClBx8M,KAAK6phB,OAASlG,EAAS,IAAInC,eAAe57C,UAAc,KACxD5le,KAAK8phB,QAAUnG,EACf3jhB,KAAK+phB,WAAavtU,EAAUutU,WAC5B/phB,KAAKgqhB,KAAO,IAAIC,WAChBjqhB,KAAKkqhB,oBAAqB,EAC1BlqhB,KAAKmqhB,gBAAiB,EACtBnqhB,KAAKoqhB,cAAgB,IAAIx3gB,IACzB5S,KAAKqqhB,oBAAsB,IAAIz3gB,IAC/B5S,KAAK2khB,WAAY,EAysBnB,OAtsBAlte,aAAaqpe,EAAc,CAAC,CAC1Bx8gB,IAAK,aACLP,IAAK,WACH,OAAO/D,KAAK0phB,WAAa,IAE1B,CACDplhB,IAAK,SACLP,IAAK,WACH,OAAO/D,KAAK2phB,UAAUp4B,SAEvB,CACDjtf,IAAK,MACLP,IAAK,WACH,OAAO/D,KAAK2phB,UAAUluhB,MAEvB,CACD6I,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAK2phB,UAAUW,WAEvB,CACDhmhB,IAAK,OACLP,IAAK,WACH,OAAO/D,KAAK2phB,UAAUrqV,OAEvB,CACDh7L,IAAK,cACL5I,MAAO,WACL,IAAI+zC,EAAQ/rC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5EmoT,EAAQp8Q,EAAMo8Q,MACdqgL,EAAiBz8b,EAAM+uO,SACvBA,OAA8B,IAAnB0tN,EAA4Blse,KAAKuxf,OAASrlB,EACrDC,EAAgB18b,EAAM27b,QACtBA,OAA4B,IAAlBe,EAA2B,EAAIA,EACzCC,EAAgB38b,EAAM67b,QACtBA,OAA4B,IAAlBc,EAA2B,EAAIA,EACzCC,EAAiB58b,EAAM+7b,SACvBA,OAA8B,IAAnBa,GAAoCA,EAEnD,OAAO,IAAIm1C,eAAez7C,aAAa,CACrCzvN,QAASt2Q,KAAKs/L,KACdusH,MAAOA,EACPrtC,SAAUA,EACV4sN,QAASA,EACTE,QAASA,EACTE,SAAUA,MAGb,CACDlne,IAAK,iBACL5I,MAAO,WACL,IAAI2oT,EAAQ3gT,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E6mhB,EAAelmO,EAAMmmO,OACrBA,OAA0B,IAAjBD,EAA0B,UAAYA,EAE/CE,EAAazqhB,KAAKylhB,WAAWiF,mBAAmBF,GAEhDxoY,EAAUhiJ,KAAKqqhB,oBAAoBtmhB,IAAI0mhB,EAAW/iU,UA+CtD,OA7CK1lE,IACHA,EAAUhiJ,KAAKylhB,WAAWkF,eAAe3qhB,KAAK0phB,WAAYe,EAAWG,iBAErE5qhB,KAAKqqhB,oBAAoB3ihB,IAAI+ihB,EAAW/iU,SAAU1lE,GAElDA,EAAUA,EAAQzrE,MAAK,SAAUs0c,GAC/B,IACIC,EADAC,EAAa9vR,2BAA2B4vR,GAG5C,IACE,IAAIG,EAAQ,WACV,IAAIC,EAAaH,EAAOpvhB,WAEII,IAAxBmvhB,EAAWC,UACb9shB,OAAOyJ,eAAeojhB,EAAY,QAAS,CACzClnhB,IAAK,WAEH,OADA,EAAIy9gB,eAAer6C,YAAY,kEACxB8jD,EAAWC,SAAS1igB,YAKF1sB,IAA3BmvhB,EAAWE,aACb/shB,OAAOyJ,eAAeojhB,EAAY,WAAY,CAC5ClnhB,IAAK,WAEH,OADA,EAAIy9gB,eAAer6C,YAAY,wEACxB8jD,EAAWE,YAAY3igB,QAMtC,IAAKuigB,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MAC9C0qhB,IAEF,MAAO55e,GACP25e,EAAW3ihB,EAAEgpC,GA3Bf,QA6BE25e,EAAWr0c,IAGb,OAAOm0c,MAIJ7oY,IAER,CACD19I,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKorhB,oBAAsBprhB,KAAKorhB,kBAAoBprhB,KAAKylhB,WAAW4F,iBAAiBrrhB,KAAK0phB,eAElG,CACDplhB,IAAK,SACL5I,MAAO,WACL,IAAI4vhB,EAAUluU,kBAAgCorR,aAAY,QAAYgB,MAAK,SAAS+hD,IAClF,IAAIC,EAEJ,OAAOhjD,aAAY,QAAYhuZ,MAAK,SAAmBixc,GACrD,OACE,OAAQA,EAAUn0gB,KAAOm0gB,EAAU1rhB,MACjC,KAAK,EACH,OAAO0rhB,EAAUrhD,OAAO,UAAqE,QAAzDohD,EAAwBxrhB,KAAKylhB,WAAWkC,mBAAmD,IAA1B6D,OAAmC,EAASA,EAAsBllf,SAAStmC,KAAK0phB,cAAgB,MAEvM,KAAK,EACL,IAAK,MACH,OAAO+B,EAAU95O,UAGtB45O,EAAUvrhB,UAOf,OAJA,WACE,OAAOsrhB,EAAQrjhB,MAAMjI,KAAM0D,YAnBxB,IAwBN,CACDY,IAAK,SACL5I,MAAO,SAAgBspW,GACrB,IAAI0mL,EACAC,EAEAC,EADA/9X,EAAS7tJ,KAGT6rhB,EAAgB7mL,EAAM6mL,cACtBtrP,EAAWykE,EAAMzkE,SACjBurP,EAAe9mL,EAAMwlL,OACrBA,OAA0B,IAAjBsB,EAA0B,UAAYA,EAC/CC,EAAuB/mL,EAAMgnL,eAC7BA,OAA0C,IAAzBD,EAAkCvlD,MAAMwN,eAAeuE,OAASwzC,EACjFE,EAAkBjnL,EAAM3oO,UACxBA,OAAgC,IAApB4vZ,EAA6B,KAAOA,EAChDC,EAAmBlnL,EAAMmnL,WACzBA,OAAkC,IAArBD,EAA8B,KAAOA,EAClDE,EAAsBpnL,EAAMqnL,cAC5BA,OAAwC,IAAxBD,EAAiC,KAAOA,EACxDE,EAAmBtnL,EAAMjqO,WACzBA,OAAkC,IAArBuxZ,EAA8B,KAAOA,EAClDC,EAAwBvnL,EAAMwnL,6BAC9BA,OAAyD,IAA1BD,EAAmC,KAAOA,EACzEE,EAAwBznL,EAAM0nL,oBAC9BA,OAAgD,IAA1BD,EAAmC,KAAOA,OAEoD3whB,KAAlF,QAAhC4vhB,EAAchohB,UAAU,UAAgC,IAAhBgohB,OAAyB,EAASA,EAAYiB,2BAC1F,EAAInL,eAAer6C,YAAY,kHAEa,IAAxCzje,UAAU,GAAGiphB,wBAAmCX,IAAmBxlD,MAAMwN,eAAeuE,SAC1FyzC,EAAiBxlD,MAAMwN,eAAewE,oBAImF18e,KAAtF,QAAjC6vhB,EAAejohB,UAAU,UAAiC,IAAjBiohB,OAA0B,EAASA,EAAaiB,6BAC7F,EAAIpL,eAAer6C,YAAY,oHAEe,IAA1Czje,UAAU,GAAGkphB,0BAAqCZ,IAAmBxlD,MAAMwN,eAAeuE,SAC5FyzC,EAAiBxlD,MAAMwN,eAAeyE,iBAItCz4e,KAAK6phB,QACP7phB,KAAK6phB,OAAO59d,KAAK,WAGnB,IAAIw+d,EAAazqhB,KAAKylhB,WAAWiF,mBAAmBF,EAAQwB,GAE5DhshB,KAAKmqhB,gBAAiB,EAEjBqC,IACHA,EAA+BxshB,KAAKylhB,WAAWiD,4BAGjD,IAAImE,EAAc7shB,KAAKoqhB,cAAcrmhB,IAAI0mhB,EAAW/iU,UAE/CmlU,IACHA,EAAczuhB,OAAOC,OAAO,MAE5B2B,KAAKoqhB,cAAc1ihB,IAAI+ihB,EAAW/iU,SAAUmlU,IAG1CA,EAAYC,4BACdvmZ,aAAasmZ,EAAYC,2BACzBD,EAAYC,0BAA4B,MAG1C,IAAIC,EAAwBV,GAAiB,IAAIjL,qBAAqB,CACpE/jO,cAAer9S,KAAK4phB,iBAElBoD,KAAiBvC,EAAWG,gBAAkBpkD,MAAMmM,oBAAoBsF,OAEvE40C,EAAYI,yBACfJ,EAAYI,wBAAyB,EAAIzmD,MAAM+O,2BAC/Cs3C,EAAYK,aAAe,CACzBC,QAAS,GACTC,UAAW,GACXC,WAAW,GAGTrthB,KAAK6phB,QACP7phB,KAAK6phB,OAAO59d,KAAK,gBAGnBjsD,KAAKsthB,kBAAkB7C,IAGzB,IAAIh5C,EAAW,SAAkBtje,GAC/B0+gB,EAAYU,YAAZ,OAAkCC,IAE9B3/X,EAAOq8X,oBAAsB8C,KAC/Bn/X,EAAOs8X,gBAAiB,GAG1Bt8X,EAAO4/X,cAEHt/gB,GACFq/gB,EAAmBh4C,WAAWr/Z,OAAOhoE,GAErC0/I,EAAO6/X,mBAAmB,CACxBb,YAAaA,EACbtha,OAAQp9G,aAAiBvG,MAAQuG,EAAQ,IAAIvG,MAAMuG,MAGrDq/gB,EAAmBh4C,WAAWt2b,UAG5B2uG,EAAOg8X,SACTh8X,EAAOg8X,OAAO8D,QAAQ,aAEtB9/X,EAAOg8X,OAAO8D,QAAQ,aAItBH,EAAqB,IAAII,mBAAmB,CAC9Chpf,SAAU6sc,EACV9+b,OAAQ,CACNk5e,cAAeA,EACftrP,SAAUA,EACVlkK,UAAWA,EACX8vZ,WAAYA,EACZpxZ,WAAYA,GAEdivZ,KAAMhqhB,KAAKgqhB,KACXD,WAAY/phB,KAAK+phB,WACjB2C,oBAAqBA,EACrBQ,aAAcL,EAAYK,aAC1B1D,UAAWxphB,KAAK0phB,WAChB2C,cAAeU,EACfc,0BAA2Bb,EAC3BrJ,OAAQ3jhB,KAAK8phB,YAEb8B,EAAeiB,GAAaU,cAAgB3B,EAAa2B,YAAc,IAAI1uhB,MAAQ8f,IAAI6ugB,GACzF,IAAIM,EAAaN,EAAmB7hgB,KAqBpC,OApBAszB,QAAQwnJ,IAAI,CAAComV,EAAYI,uBAAuBjrY,QAASwqY,IAA+Bj2c,MAAK,SAAUivR,GACrG,IAAII,EAAQzyT,eAAeqyT,EAAO,GAC9BuoL,EAAenoL,EAAM,GACrBooL,EAAwBpoL,EAAM,GAE9B/3M,EAAOs8X,eACT14C,KAIE5jV,EAAOg8X,QACTh8X,EAAOg8X,OAAO59d,KAAK,aAGrBuhe,EAAmBS,mBAAmB,CACpCF,aAAcA,EACdC,sBAAuBA,IAEzBR,EAAmBU,0BAlBrB,MAmBYz8C,GACLq8C,IAER,CACDxphB,IAAK,kBACL5I,MAAO,WACL,IAAI2ld,EAAQ39c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5EyqhB,EAAe9sE,EAAMmpE,OACrBA,OAA0B,IAAjB2D,EAA0B,UAAYA,EAC/CC,EAAuB/sE,EAAM2qE,eAC7BA,OAA0C,IAAzBoC,EAAkC5nD,MAAMwN,eAAeuE,OAAS61C,EAErF,SAASF,IACHrB,EAAYK,aAAaG,YAC3BR,EAAYwB,qBAAqBnve,QAAQ2te,EAAYK,cACrDL,EAAYU,YAAZ,OAAkCe,IAItC,IAUIA,EAGEC,EAbF9D,EAAazqhB,KAAKylhB,WAAWiF,mBAAmBF,EAAQwB,GAAgB,GAExEa,EAAc7shB,KAAKoqhB,cAAcrmhB,IAAI0mhB,EAAW/iU,UA8BpD,OA5BKmlU,IACHA,EAAczuhB,OAAOC,OAAO,MAE5B2B,KAAKoqhB,cAAc1ihB,IAAI+ihB,EAAW/iU,SAAUmlU,IAKzCA,EAAYwB,wBAGfC,EAAalwhB,OAAOC,OAAO,OAChB6vhB,oBAAsBA,EACjCrB,EAAYwB,sBAAuB,EAAI7nD,MAAM+O,6BAC3Cg5C,EAAgB1B,GAAaU,cAAgBgB,EAAchB,YAAc,IAAI1uhB,MAAQ8f,IAAI2vgB,GAC3FzB,EAAYK,aAAe,CACzBC,QAAS,GACTC,UAAW,GACXC,WAAW,GAGTrthB,KAAK6phB,QACP7phB,KAAK6phB,OAAO59d,KAAK,gBAGnBjsD,KAAKsthB,kBAAkB7C,IAGlBoC,EAAYwB,qBAAqBrsY,UAEzC,CACD19I,IAAK,oBACL5I,MAAO,WACL,IAAIkmd,EAAQl+c,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E8qhB,EAAwB5sE,EAAM6sE,oBAC9BA,OAAgD,IAA1BD,GAA2CA,EACjEE,EAAwB9sE,EAAM+sE,wBAC9BA,OAAoD,IAA1BD,GAA2CA,EACrEE,EAAwBhtE,EAAMitE,qBAC9BA,OAAiD,IAA1BD,GAA2CA,EAElEE,EAA0B,IAC9B,OAAO9uhB,KAAKylhB,WAAWH,eAAeyJ,eAAe,iBAAkB,CACrEvF,UAAWxphB,KAAK0phB,WAChB+E,qBAA6C,IAAxBA,EACrBO,kBAA8C,IAA5BL,EAClBE,sBAA+C,IAAzBA,GACrB,CACD7hB,cAAe8hB,EACf/yhB,KAAM,SAAcghT,GAClB,OAAOA,EAAY/1C,MAAMnlQ,YAI9B,CACDyC,IAAK,iBACL5I,MAAO,WACL,IAAIi3C,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAEjF,GAAI1D,KAAKylhB,WAAWkC,YAClB,OAAO3nhB,KAAKivhB,SAAS14c,MAAK,SAAU24c,GAClC,OAAOhN,UAAUiN,QAAQpyO,YAAYmyO,MAIzC,IAAIE,EAAiBpvhB,KAAKqvhB,kBAAkB18e,GAC5C,OAAO,IAAIsM,SAAQ,SAAUC,EAASi3B,GAqBpC,IAAIssb,EAAS2sB,EAAelU,YACxBn+N,EAAc,CAChB/1C,MAAO,GACPprL,OAAQx9E,OAAOC,OAAO,QAvBxB,SAASixhB,IACP7sB,EAAOh1W,OAAOl3E,MAAK,SAAUg5c,GAC3B,IAAIC,EAEA9zhB,EAAQ6zhB,EAAO7zhB,MACR6zhB,EAAOjvhB,KAGhB4+C,EAAQ69P,IAIV3+S,OAAO+8C,OAAO4hQ,EAAYnhO,OAAQlgF,EAAMkgF,SAEvC4zc,EAAqBzyO,EAAY/1C,OAAO56P,KAAKnE,MAAMunhB,EAAoB7vb,mBAAmBjkG,EAAMsrQ,QAEjGsoR,OACCn5c,GAQLm5c,QAGH,CACDhrhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKyvhB,qBAAuBzvhB,KAAKyvhB,mBAAqBzvhB,KAAKylhB,WAAWiK,cAAc1vhB,KAAK0phB,eAEjG,CACDplhB,IAAK,WACL5I,MAAO,WACLsE,KAAK2khB,WAAY,EACjB,IAGIgL,EAHAC,EAAS,GAETC,EAAa50R,2BAA2Bj7P,KAAKoqhB,cAAcj/gB,UAG/D,IACE,IAAK0khB,EAAWrihB,MAAOmihB,EAASE,EAAWzphB,KAAK9F,MAAO,CACrD,IAAIushB,EAAc8C,EAAOj0hB,MAQzB,GANAsE,KAAK0thB,mBAAmB,CACtBb,YAAaA,EACbtha,OAAQ,IAAI3jH,MAAM,uBAClBk8S,OAAO,KAGL+oO,EAAYwB,qBAAhB,CAIA,IACIyB,EADAC,EAAa90R,2BAA2B4xR,EAAYU,aAGxD,IACE,IAAKwC,EAAWvihB,MAAOsihB,EAASC,EAAW3phB,KAAK9F,MAAO,CACrD,IAAIkthB,EAAqBsC,EAAOp0hB,MAChCk0hB,EAAOxjhB,KAAKohhB,EAAmBvnR,WAC/BunR,EAAmB3hgB,UAErB,MAAOulB,GACP2+e,EAAW3nhB,EAAEgpC,GAPf,QASE2+e,EAAWr5c,OAGf,MAAOtlC,GACPy+e,EAAWznhB,EAAEgpC,GA9Bf,QAgCEy+e,EAAWn5c,IAUb,OAPA12E,KAAKgqhB,KAAK92gB,QAEVlT,KAAKqqhB,oBAAoBn3gB,QAEzBlT,KAAKorhB,kBAAoB,KACzBprhB,KAAKyvhB,mBAAqB,KAC1BzvhB,KAAKmqhB,gBAAiB,EACflre,QAAQwnJ,IAAImpV,KAEpB,CACDtrhB,IAAK,UACL5I,MAAO,WACL,IAAIs0hB,EAAatshB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAEhF,OADA1D,KAAKmqhB,gBAAiB,EACfnqhB,KAAKythB,YAAYuC,KAEzB,CACD1rhB,IAAK,cACL5I,MAAO,WACL,IAAIs0hB,EAAatshB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAEhF,IAAK1D,KAAKmqhB,eACR,OAAO,EAGT,IACI8F,EADAC,EAAaj1R,2BAA2Bj7P,KAAKoqhB,cAAcj/gB,UAG/D,IACE,IAAK+khB,EAAW1ihB,MAAOyihB,EAASC,EAAW9phB,KAAK9F,MAAO,CACrD,IAAI6vhB,EAAeF,EAAOv0hB,MACtB6xhB,EAAc4C,EAAa5C,YAC3BL,EAAeiD,EAAajD,aAEhC,GAAIK,EAAYxxhB,KAAO,IAAMmxhB,EAAaG,UACxC,OAAO,GAGX,MAAOj8e,GACP8+e,EAAW9nhB,EAAEgpC,GAXf,QAaE8+e,EAAWx5c,IAiBb,OAdA12E,KAAKoqhB,cAAcl3gB,QAEnBlT,KAAKgqhB,KAAK92gB,QAEVlT,KAAKqqhB,oBAAoBn3gB,QAEzBlT,KAAKorhB,kBAAoB,KACzBprhB,KAAKyvhB,mBAAqB,KAEtBO,GAAchwhB,KAAK6phB,SACrB7phB,KAAK6phB,OAAS,IAAIrI,eAAe57C,WAGnC5le,KAAKmqhB,gBAAiB,GACf,IAER,CACD7lhB,IAAK,mBACL5I,MAAO,SAA0BqyhB,EAAcrmU,GAC7C,IAAImlU,EAAc7shB,KAAKoqhB,cAAcrmhB,IAAI2jN,GAEpCmlU,IAID7shB,KAAK6phB,QACP7phB,KAAK6phB,OAAO8D,QAAQ,gBAGlBd,EAAYI,wBACdJ,EAAYI,uBAAuB/te,QAAQ6ue,MAG9C,CACDzphB,IAAK,mBACL5I,MAAO,SAA0B00hB,EAAmBvD,GAClD,IAAK,IAAI7phB,EAAI,EAAGkB,EAAKkshB,EAAkBvuhB,OAAQmB,EAAIkB,EAAIlB,IACrD6phB,EAAYK,aAAaC,QAAQ/ghB,KAAKgkhB,EAAkBjD,QAAQnqhB,IAChE6phB,EAAYK,aAAaE,UAAUhhhB,KAAKgkhB,EAAkBhD,UAAUpqhB,IAGtE6phB,EAAYK,aAAaG,UAAY+C,EAAkB/C,UAEvD,IACIgD,EADAC,EAAar1R,2BAA2B4xR,EAAYU,aAGxD,IACE,IAAK+C,EAAW9ihB,MAAO6ihB,EAASC,EAAWlqhB,KAAK9F,MACrB+vhB,EAAO30hB,MACbwyhB,sBAErB,MAAO98e,GACPk/e,EAAWlohB,EAAEgpC,GANf,QAQEk/e,EAAW55c,IAGT05c,EAAkB/C,WACpBrthB,KAAKythB,gBAGR,CACDnphB,IAAK,oBACL5I,MAAO,SAA2B60hB,GAChC,IAAIpgY,EAASnwJ,KAET4qhB,EAAkB2F,EAAO3F,gBACzBljU,EAAW6oU,EAAO7oU,SASlB+6S,EAPiBzigB,KAAKylhB,WAAWH,eAAeyJ,eAAe,kBAAmB,CACpFvF,UAAWxphB,KAAK0phB,WAChBc,OAAQI,EACRljU,SAAUA,EACV+/T,kBAAmBmD,EAAkBpkD,MAAMmM,oBAAoBwF,oBAAsBn4e,KAAKylhB,WAAWgC,kBAAkB+I,aAAe,OAG5GtV,YAExB2R,EAAc7shB,KAAKoqhB,cAAcrmhB,IAAI2jN,GAEzCmlU,EAAY4D,aAAehuB,EAEhB,SAAS6sB,IAClB7sB,EAAOh1W,OAAOl3E,MAAK,SAAUm6c,GAC3B,IAAIh1hB,EAAQg1hB,EAAOh1hB,MACRg1hB,EAAOpwhB,KAGhBushB,EAAY4D,aAAe,KAIzBtgY,EAAOs1X,WAAWd,YAItBx0X,EAAOwgY,iBAAiBj1hB,EAAOmxhB,GAE/ByC,QACC,SAAU/ja,GAGX,GAFAsha,EAAY4D,aAAe,MAEvBtgY,EAAOs1X,WAAWd,UAAtB,CAIA,GAAIkI,EAAYK,aAAc,CAC5BL,EAAYK,aAAaG,WAAY,EAErC,IACIuD,EADAC,EAAc51R,2BAA2B4xR,EAAYU,aAGzD,IACE,IAAKsD,EAAYrjhB,MAAOojhB,EAAUC,EAAYzqhB,KAAK9F,MACxBswhB,EAAQl1hB,MACdwyhB,sBAErB,MAAO98e,GACPy/e,EAAYzohB,EAAEgpC,GANhB,QAQEy/e,EAAYn6c,IAGdy5E,EAAOs9X,cAGT,GAAIZ,EAAYI,uBACdJ,EAAYI,uBAAuB92c,OAAOo1C,OACrC,KAAIsha,EAAYwB,qBAGrB,MAAM9ia,EAFNsha,EAAYwB,qBAAqBl4c,OAAOo1C,QAO9C+ja,KAED,CACDhrhB,IAAK,qBACL5I,MAAO,SAA4Bo1hB,GACjC,IAAIxgY,EAAStwJ,KAET6shB,EAAciE,EAAOjE,YACrBtha,EAASula,EAAOvla,OAChBwla,EAAeD,EAAOhtO,MACtBA,OAAyB,IAAjBitO,GAAkCA,EAE9C,GAAKlE,EAAY4D,aAAjB,CAIA,IAAK3sO,EAAO,CACV,GAAI+oO,EAAYU,YAAYxxhB,KAAO,EACjC,OAGF,GAAIwvH,aAAkBi2Z,eAAe37C,4BAUnC,YATAgnD,EAAYC,0BAA4Bj0e,YAAW,WACjDy3G,EAAOo9X,mBAAmB,CACxBb,YAAaA,EACbtha,OAAQA,EACRu4L,OAAO,IAGT+oO,EAAYC,0BAA4B,OACvChK,8BAQP,GAHA+J,EAAY4D,aAAa5kgB,OAAO,IAAI26c,MAAM8N,eAAe/oX,EAAOl6E,UAAhE,OAAmF,eACnFw7e,EAAY4D,aAAe,MAEvBzwhB,KAAKylhB,WAAWd,UAApB,CAIA,IACIqM,EADAC,EAAch2R,2BAA2Bj7P,KAAKoqhB,eAGlD,IACE,IAAK6G,EAAYzjhB,MAAOwjhB,EAAUC,EAAY7qhB,KAAK9F,MAAO,CACxD,IAAI4whB,EAAgB/9e,eAAe69e,EAAQt1hB,MAAO,GAC9Cy1hB,EAAcD,EAAc,GAGhC,GAFqBA,EAAc,KAEZrE,EAAa,CAClC7shB,KAAKoqhB,cAAL,OAA6B+G,GAE7B,QAGJ,MAAO//e,GACP6/e,EAAY7ohB,EAAEgpC,GAbhB,QAeE6/e,EAAYv6c,IAGd12E,KAAKgiT,cAEN,CACD19S,IAAK,QACLP,IAAK,WACH,OAAO/D,KAAK6phB,WAIT/I,EA3tBuB,GA8tBhC3lhB,QAAQ2lhB,aAAeA,aAEvB,IAAII,aAA4B,WAC9B,SAASA,IACP9zf,gBAAgBptB,KAAMkhhB,GAEtBlhhB,KAAKoxhB,WAAa,GAClBpxhB,KAAKqxhB,UAAYpye,QAAQC,UA0J3B,OAvJAzH,aAAaype,EAAc,CAAC,CAC1B58gB,IAAK,cACL5I,MAAO,SAAqBoL,EAAKwqhB,GAC/B,IAAIC,EAASvxhB,KA6GTmnI,EAAQ,CACVnsF,KA5GF,SAAoB72C,GAClB,GAAIi4U,WAAWo1M,gBACb,OAAOp1M,WAAWo1M,gBAAgBrthB,EAAQmthB,GAqG5C,IAAI3vY,EAAS,IAAIt5I,QACjB,OAnGA,SAASophB,EAAmB/1hB,GAC1B,GAAqB,oBAAVA,GAA2C,WAAnB6+C,QAAQ7+C,IAAuBA,aAAiB2+M,IACjF,MAAM,IAAIzyM,MAAM,4CAA4C0D,OAAiB,OAAV5P,QAA4B,IAAVA,OAAmB,EAASA,EAAMuF,aAGzH,GAAuB,WAAnBs5C,QAAQ7+C,IAAiC,OAAVA,EACjC,OAAOA,EAGT,GAAIimJ,EAAO19I,IAAIvI,GACb,OAAOimJ,EAAO59I,IAAIrI,GAGpB,IAAIw3J,EAAQt/I,EAEZ,IAAKs/I,EAASx3J,EAAMw3J,UAAW,EAAIszU,MAAM12T,eAAe5c,GAQtD,OANEt/I,EADgB,OAAd09gB,QAAoC,IAAdA,GAAwBA,EAAU/nhB,SAAS2pJ,GAC1D,IAAIx3J,EAAM4C,YAAY40J,EAAQx3J,EAAMu/J,WAAYv/J,EAAMwqK,YAEtD,IAAIxqK,EAAM4C,YAAY5C,GAGjCimJ,EAAOj6I,IAAIhM,EAAOkY,GACXA,EAGT,GAAIlY,aAAiBkX,IAAK,CACxBgB,EAAS,IAAIhB,IACb+uI,EAAOj6I,IAAIhM,EAAOkY,GAElB,IACI89gB,EADAC,EAAc12R,2BAA2Bv/P,GAG7C,IACE,IAAKi2hB,EAAYnkhB,MAAOkkhB,EAAUC,EAAYvrhB,KAAK9F,MAAO,CACxD,IAAIsxhB,EAAgBz+e,eAAeu+e,EAAQh2hB,MAAO,GAC9C4I,EAAMsthB,EAAc,GACpB37gB,EAAM27gB,EAAc,GAExBh+gB,EAAOlM,IAAIpD,EAAKmthB,EAAmBx7gB,KAErC,MAAOm7B,GACPugf,EAAYvphB,EAAEgpC,GAThB,QAWEugf,EAAYj7c,IAGd,OAAO9iE,EAGT,GAAIlY,aAAiBmD,IAAK,CACxB+U,EAAS,IAAI/U,IACb8iJ,EAAOj6I,IAAIhM,EAAOkY,GAElB,IACIi+gB,EADAC,EAAc72R,2BAA2Bv/P,GAG7C,IACE,IAAKo2hB,EAAYtkhB,MAAOqkhB,EAAUC,EAAY1rhB,KAAK9F,MAAO,CACxD,IAAIyxhB,EAAOF,EAAQn2hB,MACnBkY,EAAO+K,IAAI8ygB,EAAmBM,KAEhC,MAAO3gf,GACP0gf,EAAY1phB,EAAEgpC,GANhB,QAQE0gf,EAAYp7c,IAGd,OAAO9iE,EAMT,IAAK,IAAI5Q,KAHT4Q,EAASnS,MAAMC,QAAQhG,GAAS,GAAK0C,OAAOC,OAAO,MACnDsjJ,EAAOj6I,IAAIhM,EAAOkY,GAEJlY,EAAO,CAMnB,IALA,IAAIs2hB,EAEAC,OAAO,EACPx8c,EAAI/5E,IAECu2hB,EAAO7zhB,OAAO0uB,yBAAyB2oD,EAAGzyE,KACjDyyE,EAAIr3E,OAAO2qB,eAAe0sD,GAGF,qBAAfw8c,EAAKv2hB,QAIU,oBAAfu2hB,EAAKv2hB,OAA6E,QAAlDs2hB,EAAwBt2hB,EAAM6F,sBAAsD,IAA1BywhB,GAAoCA,EAAsBhxhB,KAAKtF,EAAOsH,MAI3K4Q,EAAO5Q,GAAKyuhB,EAAmBQ,EAAKv2hB,QAGtC,OAAOkY,EAIF69gB,CAAmBtthB,GAIpB+thB,CAAWprhB,IAGnB9G,KAAKqxhB,UAAU96c,MAAK,WAClB,IACI47c,EADAC,EAAcn3R,2BAA2Bs2R,EAAOH,YAGpD,IACE,IAAKgB,EAAY5khB,MAAO2khB,EAAUC,EAAYhshB,KAAK9F,MAClC6xhB,EAAQz2hB,MACdsF,KAAKuwhB,EAAQpqZ,GAExB,MAAO/1F,GACPghf,EAAYhqhB,EAAEgpC,GANhB,QAQEghf,EAAY17c,UAIjB,CACDpyE,IAAK,mBACL5I,MAAO,SAA0B8S,EAAMw2B,GACrChlC,KAAKoxhB,WAAWhlhB,KAAK44B,KAEtB,CACD1gC,IAAK,sBACL5I,MAAO,SAA6B8S,EAAMw2B,GACxC,IAAIhiC,EAAIhD,KAAKoxhB,WAAW5wgB,QAAQwkB,GAEhChlC,KAAKoxhB,WAAWhihB,OAAOpM,EAAG,KAE3B,CACDsB,IAAK,YACL5I,MAAO,WACLsE,KAAKoxhB,WAAWvvhB,OAAS,MAItBq/gB,EA/JuB,GAkKhC/lhB,QAAQ+lhB,aAAeA,aACvB,IAAImR,cAAgB,CAClBC,kBAAkB,EAClBC,kBAAmB,KACnBC,aAAc,GAGd,GAAI5pC,SAASE,SACXupC,cAAcC,kBAAmB,EACjCD,cAAcE,kBAAoB,uBAC7B,GAA4E,YAAnD,qBAAbvsf,SAA2B,YAAcuU,QAAQvU,WAAyB,CAC3F,IAAImjc,UAAWspD,sBAEXC,cAA2C,QAA1BvpD,UAAYnjc,gBAAoC,IAAdmjc,WAAsF,QAArDspD,sBAAwBtpD,UAAUwpD,qBAAqD,IAA1BF,2BAAvE,EAAmHA,sBAAsBjsa,IAEnNksa,gBACFL,cAAcE,kBAAoBG,cAAc95c,QAAQ,4BAA6B,gBAIzFy5c,cAAcO,iBAAmB,SAAUpxb,GACzC,IAAIqoF,EAAU,kBAAmBv+K,OAAOk2F,EAAK,OAC7C,OAAO64G,IAAIm2J,gBAAgB,IAAIykI,KAAK,CAACprT,MAIzC,IAAIg3V,UAAyB,WAC3B,SAASA,YACP,IAAIgS,EAASnvhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7EovhB,EAAcD,EAAOrkhB,KACrBA,OAAuB,IAAhBskhB,EAAyB,KAAOA,EACvCC,EAAcF,EAAO70B,KACrBA,OAAuB,IAAhB+0B,EAAyB,KAAOA,EACvCC,EAAmBH,EAAOv8C,UAC1BA,OAAiC,IAArB08C,GAA8B,EAAIxsD,MAAM6P,qBAAuB28C,EAI/E,GAFA5lgB,gBAAgBptB,KAAM6ghB,WAElB7iB,GAAQ6iB,UAAUoS,aAAahvhB,IAAI+5f,GACrC,MAAM,IAAIp2f,MAAM,gDAWlB,GARA5H,KAAKwO,KAAOA,EACZxO,KAAK2khB,WAAY,EACjB3khB,KAAKs2e,UAAYA,EACjBt2e,KAAK+mhB,kBAAmB,EAAIvgD,MAAM+O,2BAClCv1e,KAAKkzhB,MAAQ,KACblzhB,KAAKmzhB,WAAa,KAClBnzhB,KAAKozhB,gBAAkB,KAEnBp1B,EAKF,OAJA6iB,UAAUoS,aAAavrhB,IAAIs2f,EAAMh+f,WAEjCA,KAAKqzhB,oBAAoBr1B,GAK3Bh+f,KAAKszhB,cAuRP,OApRA77e,aAAaope,UAAW,CAAC,CACvBv8gB,IAAK,UACLP,IAAK,WACH,OAAO/D,KAAK+mhB,iBAAiB/kY,UAE9B,CACD19I,IAAK,OACLP,IAAK,WACH,OAAO/D,KAAKkzhB,QAEb,CACD5uhB,IAAK,iBACLP,IAAK,WACH,OAAO/D,KAAKozhB,kBAEb,CACD9uhB,IAAK,sBACL5I,MAAO,SAA6BsigB,GAClCh+f,KAAKkzhB,MAAQl1B,EACbh+f,KAAKozhB,gBAAkB,IAAItR,iBAAiByD,eAAe,OAAQ,SAAUvnB,GAE7Eh+f,KAAKozhB,gBAAgBz6e,GAAG,SAAS,eAEjC34C,KAAK+mhB,iBAAiB7ne,YAEvB,CACD56C,IAAK,cACL5I,MAAO,WACL,IAAI63hB,EAASvzhB,KAEb,GAAsB,qBAAXwzhB,SAA2BnB,cAAcC,mBAAqBzR,UAAU4S,gCAAiC,CAClH,IAAIC,EAAY7S,UAAU6S,UAE1B,KACO,EAAIltD,MAAMoQ,cAAclod,OAAO+6B,SAAS2jE,KAAMsma,KACjDA,EAAYrB,cAAcO,iBAAiB,IAAIv4U,IAAIq5U,EAAWhlgB,OAAO+6B,UAAU2jE,OAGjF,IAAItiG,EAAS,IAAI0ogB,OAAOE,GACpBpO,EAAiB,IAAIxD,iBAAiByD,eAAe,OAAQ,SAAUz6f,GAEvE6ogB,EAAiB,WACnB7ogB,EAAOm+E,oBAAoB,QAAS2qb,GACpCtO,EAAe96c,UACf1/C,EAAO60f,YAEH4T,EAAO5O,UACT4O,EAAOxM,iBAAiB5wc,OAAO,IAAIvuE,MAAM,yBAEzC2rhB,EAAOM,oBAIPD,EAAgB,WACbL,EAAOJ,YACVQ,KAIJ7ogB,EAAOk+E,iBAAiB,QAAS4qb,GACjCtO,EAAe3se,GAAG,QAAQ,SAAUqC,GAClClwB,EAAOm+E,oBAAoB,QAAS2qb,GAEhCL,EAAO5O,UACTgP,IAIE34e,GACFu4e,EAAOH,gBAAkB9N,EACzBiO,EAAOL,MAAQpogB,EACfyogB,EAAOJ,WAAarogB,EAEpByogB,EAAOxM,iBAAiB7ne,UAExBome,EAAe/+X,KAAK,YAAa,CAC/B+vV,UAAWi9C,EAAOj9C,cAGpBi9C,EAAOM,mBAEPvO,EAAe96c,UACf1/C,EAAO60f,gBAGX2F,EAAe3se,GAAG,SAAS,SAAUqC,GAGnC,GAFAlwB,EAAOm+E,oBAAoB,QAAS2qb,GAEhCL,EAAO5O,UACTgP,SAIF,IACEG,IACA,MAAO1rhB,GACPmrhB,EAAOM,uBAIX,IAAIC,EAAW,WACb,IAAIC,EAAU,IAAIv+X,WAAW,CAAC,MAE9B,IACE8vX,EAAe/+X,KAAK,OAAQwtY,EAAS,CAACA,EAAQ7gY,SAC9C,MAAO49K,IACP,EAAI01J,MAAMv+c,MAAM,qCAChB8rgB,EAAQ,GAAK,EACbzO,EAAe/+X,KAAK,OAAQwtY,KAKhC,YADAD,IAEA,MAAO1rhB,IACP,EAAIo+d,MAAMrpR,MAAM,kCAIpBn9M,KAAK6zhB,qBAEN,CACDvvhB,IAAK,mBACL5I,MAAO,WACL,IAAIs4hB,EAAUh0hB,KAETqyhB,cAAcC,oBACjB,EAAI9rD,MAAMv+c,MAAM,2BAChBoqgB,cAAcC,kBAAmB,GAGnCzR,UAAUoT,uBAAuB19c,MAAK,SAAU29c,GAC9C,GAAIF,EAAQrP,UACVqP,EAAQjN,iBAAiB5wc,OAAO,IAAIvuE,MAAM,6BAD5C,CAMA,IAAIo2f,EAAO,IAAIkjB,aACf8S,EAAQd,MAAQl1B,EAChB,IAAI/8d,EAAK,OAAO31B,OAAO+mhB,cAAcG,gBACjC2B,EAAgB,IAAIrS,iBAAiByD,eAAetkf,EAAK,UAAWA,EAAI+8d,GAC5Ek2B,EAAqB7tV,MAAM8tV,EAAen2B,GAC1C,IAAIsnB,EAAiB,IAAIxD,iBAAiByD,eAAetkf,EAAIA,EAAK,UAAW+8d,GAC7Eg2B,EAAQZ,gBAAkB9N,EAE1B0O,EAAQjN,iBAAiB7ne,UAEzBome,EAAe/+X,KAAK,YAAa,CAC/B+vV,UAAW09C,EAAQ19C,gBAlBvB,OAoBY,SAAU/qX,GACpByoa,EAAQjN,iBAAiB5wc,OAAO,IAAIvuE,MAAM,mCAAoC0D,OAAOigH,EAAOl6E,QAAS,aAGxG,CACD/sC,IAAK,UACL5I,MAAO,WACLsE,KAAK2khB,WAAY,EAEb3khB,KAAKmzhB,aACPnzhB,KAAKmzhB,WAAWxT,YAEhB3/gB,KAAKmzhB,WAAa,MAGpBtS,UAAUoS,aAAV,OAAiCjzhB,KAAKkzhB,OAEtClzhB,KAAKkzhB,MAAQ,KAETlzhB,KAAKozhB,kBACPpzhB,KAAKozhB,gBAAgB5od,UAErBxqE,KAAKozhB,gBAAkB,SAGzB,CAAC,CACH9uhB,IAAK,eACLP,IAAK,WACH,OAAO,EAAIyie,MAAM1kW,QAAQ9hI,KAAM,eAAgB,IAAIqI,WAEpD,CACD/D,IAAK,WACL5I,MAAO,SAAkBi3C,GACvB,GAAiB,OAAXA,QAA8B,IAAXA,IAAqBA,EAAOqrd,KACnD,MAAM,IAAIp2f,MAAM,kDAGlB,OAAI5H,KAAKizhB,aAAahvhB,IAAI0uC,EAAOqrd,MACxBh+f,KAAKizhB,aAAalvhB,IAAI4uC,EAAOqrd,MAG/B,IAAI6iB,UAAUlue,KAEtB,CACDruC,IAAK,YACLP,IAAK,WACH,GAAI89gB,gBAAgByC,oBAAoBoP,UACtC,OAAO7R,gBAAgByC,oBAAoBoP,UAG7C,GAAwC,OAApCrB,cAAcE,kBAKhB,OAJK3pC,SAASE,WACZ,EAAI04B,eAAer6C,YAAY,iDAG1BkrD,cAAcE,kBAGvB,MAAM,IAAI3qhB,MAAM,mDAEjB,CACDtD,IAAK,kCACLP,IAAK,WACH,IACE,IAAIqwhB,EAEJ,OAA6D,QAApDA,EAAwBh4M,WAAWi4M,mBAAmD,IAA1BD,OAAmC,EAASA,EAAsBF,uBAAyB,KAChK,MAAOpjN,GACP,OAAO,QAGV,CACDxsU,IAAK,yBACLP,IAAK,SAASA,MACZ,IAAIuwhB,QAAUt0hB,KAEVsjH,OAAsB,WACxB,IAAIixa,OAASn3U,kBAAgCorR,aAAY,QAAYgB,MAAK,SAASgrD,WACjF,IAAIC,yBAA0B3pgB,OAC9B,OAAO09c,aAAY,QAAYhuZ,MAAK,SAASk6c,UAAUC,WACrD,OACE,OAAQA,UAAUr9gB,KAAOq9gB,UAAU50hB,MACjC,KAAK,EAGH,GAFA00hB,yBAA2BH,QAAQb,iCAE9BgB,yBAA0B,CAC7BE,UAAU50hB,KAAO,EACjB,MAGF,OAAO40hB,UAAUvqD,OAAO,SAAUqqD,0BAEpC,KAAK,EACH,IAAM7rC,SAASE,SAA4C,CACzD6rC,UAAU50hB,KAAO,EACjB,MAIF,OADA+qB,OAAS8pgB,KAAK,UAALA,CAAgBN,QAAQZ,WAC1BiB,UAAUvqD,OAAO,SAAUt/c,OAAOopgB,sBAE3C,KAAK,EAEH,OADAS,UAAU50hB,KAAO,GACV,EAAIyhhB,eAAer5C,YAAYmsD,QAAQZ,WAEhD,KAAK,EACH,OAAOiB,UAAUvqD,OAAO,SAAU17c,OAAO2lgB,YAAYH,sBAEvD,KAAK,EACL,IAAK,MACH,OAAOS,UAAUhjP,UAGtB6iP,cAGL,OAAO,WACL,OAAOD,OAAOtshB,MAAMjI,KAAM0D,YAzCJ,GA6C1B,OAAO,EAAI8ie,MAAM1kW,QAAQ9hI,KAAM,yBAA0BsjH,cAItDu9Z,UAvToB,GA0T7B1lhB,QAAQ0lhB,UAAYA,UAElBA,UAAUgU,aAAe,WAEvB,OADA,EAAIrT,eAAer6C,YAAY,yEACxBnne,KAAK0zhB,WAIhB,IAAIoB,UAAyB,IAAIzshB,QAE7B0shB,WAA0B,IAAI1shB,QAE9B2shB,cAA6B,IAAI3shB,QAEjC4shB,iBAAgC,IAAI5shB,QAEpCm9gB,gBAA+B,WACjC,SAASA,EAAgBF,EAAgB4D,EAAanE,EAAepye,GACnEvlB,gBAAgBptB,KAAMwlhB,GAEtBrD,2BAA2BnihB,KAAM80hB,UAAW,CAC1C9shB,UAAU,EACVtM,MAAO,OAGTymhB,2BAA2BnihB,KAAM+0hB,WAAY,CAC3C/shB,UAAU,EACVtM,MAAO,IAAIkX,MAGbuvgB,2BAA2BnihB,KAAMg1hB,cAAe,CAC9ChthB,UAAU,EACVtM,MAAO,IAAIkX,MAGbuvgB,2BAA2BnihB,KAAMi1hB,iBAAkB,CACjDjthB,UAAU,EACVtM,MAAO,OAGTsE,KAAKslhB,eAAiBA,EACtBtlhB,KAAKkphB,YAAcA,EACnBlphB,KAAK+phB,WAAa,IAAIE,WACtBjqhB,KAAKk1hB,WAAa,IAAIzT,aAAa0T,WAAW,CAC5CzQ,MAAOwE,EAAYxE,MACnB8B,qBAAsBxmhB,KAAKo1hB,sBAAsBtzgB,KAAK9hB,MACtDq9S,cAAe1qQ,EAAO0qQ,cACtBg4O,aAAc1if,EAAO0if,eAEvBr1hB,KAAKs1hB,QAAU3if,EAEVA,EAAOoxe,iBACV/jhB,KAAKsjhB,kBAAoB,IAAI3we,EAAO2we,kBAAkB,CACpDh2C,QAAS36b,EAAOwze,QAChB17C,aAAc93b,EAAO4if,aAEvBv1hB,KAAKujhB,wBAA0B,IAAI5we,EAAO4we,wBAAwB,CAChEj2C,QAAS36b,EAAOyze,uBAIpBpmhB,KAAK2khB,WAAY,EACjB3khB,KAAKw1hB,kBAAoB,KACzBx1hB,KAAKy1hB,oBAAsB,KAC3Bz1hB,KAAK01hB,eAAiB3Q,EACtB/khB,KAAK21hB,YAAc,KACnB31hB,KAAK41hB,cAAgB,KACrB51hB,KAAK8ohB,wBAAyB,EAAItiD,MAAM+O,2BACxCv1e,KAAK61hB,sBAyxBP,OAtxBAp+e,aAAa+te,EAAiB,CAAC,CAC7BlhhB,IAAK,oBACLP,IAAK,WACH,OAAO,EAAIyie,MAAM1kW,QAAQ9hI,KAAM,oBAAqB,IAAI2hhB,oBAAoBmU,qBAE7E,CACDxxhB,IAAK,QACLP,IAAK,WACH,OAAO4+gB,sBAAsB3ihB,KAAM80hB,aAEpC,CACDxwhB,IAAK,qBACL5I,MAAO,SAA4B8uhB,GACjC,IAAIwB,EAAiBtohB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK8ie,MAAMwN,eAAeuE,OAC1Gw9C,EAAWryhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAC1EknhB,EAAkBpkD,MAAMmM,oBAAoBqF,QAC5Cg+C,EAAe,GAEnB,OAAQxL,GACN,IAAK,MACHI,EAAkBpkD,MAAMmM,oBAAoBoF,IAC5C,MAEF,IAAK,UACH,MAEF,IAAK,QACH6yC,EAAkBpkD,MAAMmM,oBAAoBsF,MAC5C,MAEF,SACE,EAAIzR,MAAMv+c,MAAM,wCAAwC3c,OAAOk/gB,IAGnE,OAAQwB,GACN,KAAKxlD,MAAMwN,eAAesE,QACxBsyC,GAAmBpkD,MAAMmM,oBAAoByF,oBAC7C,MAEF,KAAK5R,MAAMwN,eAAeuE,OACxB,MAEF,KAAK/R,MAAMwN,eAAewE,aACxBoyC,GAAmBpkD,MAAMmM,oBAAoBuF,kBAC7C,MAEF,KAAK1R,MAAMwN,eAAeyE,eACxBmyC,GAAmBpkD,MAAMmM,oBAAoBwF,oBAC7C69C,EAAeh2hB,KAAKynhB,kBAAkBuO,aACtC,MAEF,SACE,EAAIxvD,MAAMv+c,MAAM,gDAAgD3c,OAAO0ghB,IAO3E,OAJI+J,IACFnL,GAAmBpkD,MAAMmM,oBAAoB0F,QAGxC,CACLuyC,gBAAiBA,EACjBljU,SAAU,GAAGp8M,OAAOs/gB,EAAiB,KAAKt/gB,OAAO0qhB,MAGpD,CACD1xhB,IAAK,UACL5I,MAAO,WACL,IAAIu6hB,EAAUj2hB,KAEd,GAAIA,KAAKw1hB,kBACP,OAAOx1hB,KAAKw1hB,kBAAkBxzY,QAGhChiJ,KAAK2khB,WAAY,EACjB3khB,KAAKw1hB,mBAAoB,EAAIhvD,MAAM+O,2BAE/Bv1e,KAAKy1hB,qBACPz1hB,KAAKy1hB,oBAAoBt/c,OAAO,IAAIvuE,MAAM,oDAG5C,IAGIsuhB,EAHAtG,EAAS,GAETuG,EAAcl7R,2BAA2B0nR,sBAAsB3ihB,KAAM+0hB,YAAY5phB,UAGrF,IACE,IAAKgrhB,EAAY3ohB,MAAO0ohB,EAAUC,EAAY/vhB,KAAK9F,MAAO,CACxD,IAAIsrQ,EAAOsqR,EAAQx6hB,MACnBk0hB,EAAOxjhB,KAAKw/P,EAAK66Q,aAEnB,MAAOr1e,GACP+kf,EAAY/thB,EAAEgpC,GANhB,QAQE+kf,EAAYz/c,IAGdisc,sBAAsB3ihB,KAAM+0hB,YAAY7hhB,QAExCyvgB,sBAAsB3ihB,KAAMg1hB,eAAe9hhB,QAEvClT,KAAKuB,eAAe,sBACtBvB,KAAKynhB,kBAAkB2O,gBAGzB,IAAIC,EAAar2hB,KAAKslhB,eAAeW,gBAAgB,YAAa,MAwBlE,OAvBA2J,EAAOxjhB,KAAKiqhB,GACZp3e,QAAQwnJ,IAAImpV,GAAQr5c,MAAK,WACvB0/c,EAAQlM,WAAW72gB,QAEnB+ihB,EAAQf,WAAWhihB,QAEnBqvgB,sBAAsB0T,EAAShB,iBAAkB,MAEjDgB,EAAQK,wBAA0B,KAClCL,EAAQM,qBAAuB,KAE3BN,EAAQP,gBACVO,EAAQP,eAAec,kBAAkB,IAAIhwD,MAAM8N,eAAe,2BAGhE2hD,EAAQ3Q,iBACV2Q,EAAQ3Q,eAAe96c,UAEvByrd,EAAQ3Q,eAAiB,MAG3B2Q,EAAQT,kBAAkBt2e,YACzBl/C,KAAKw1hB,kBAAkBr/c,QACnBn2E,KAAKw1hB,kBAAkBxzY,UAE/B,CACD19I,IAAK,sBACL5I,MAAO,WACL,IAAI+6hB,EAAUz2hB,KAEVslhB,EAAiBtlhB,KAAKslhB,eACtB4D,EAAclphB,KAAKkphB,YACvB5D,EAAe3se,GAAG,aAAa,SAAUqC,EAAM07e,IAC7C,EAAIlwD,MAAMC,QAAQgwD,EAAQf,eAAgB,mDAC1Ce,EAAQd,YAAcc,EAAQf,eAAeiB,gBAE7CF,EAAQd,YAAYpP,WAAa,SAAUn1Z,GACzCqla,EAAQb,cAAgB,CACtB9oY,OAAQ17B,EAAI07B,OACZqtG,MAAO/oI,EAAI+oI,QAIfu8R,EAAKE,OAAS,WACZH,EAAQd,YAAYloY,OAAOl3E,MAAK,SAAUsgd,GACxC,IAAIn7hB,EAAQm7hB,EAAOn7hB,MACRm7hB,EAAOv2hB,KAGhBo2hB,EAAKjtb,UAIP,EAAI+8X,MAAMC,SAAQ,EAAID,MAAM12T,eAAep0K,GAAQ,wCACnDg7hB,EAAK1tB,QAAQ,IAAIxzW,WAAW95J,GAAQ,EAAG,CAACA,QAV1C,OAWY,SAAU6vH,GACpBmra,EAAKvohB,MAAMo9G,OAIfmra,EAAKnwN,SAAW,SAAUh7M,GACxBkra,EAAQd,YAAY9pgB,OAAO0/F,GAE3Bmra,EAAKz4e,MAAL,OAAoB,SAAU64e,GAC5B,IAAIL,EAAQ9R,UAIZ,MAAMmS,SAIZxR,EAAe3se,GAAG,sBAAsB,SAAUqC,GAChD,IAAI+7e,GAAoB,EAAIvwD,MAAM+O,2BAC9ByhD,EAAaP,EAAQd,YAyBzB,OAxBAqB,EAAWC,aAAa1gd,MAAK,WAGvB,IAAI2gd,EAFHF,EAAWG,sBAAyBH,EAAWI,mBAC9CX,EAAQb,gBAG2C,QAApDsB,EAAwBhO,EAAY3C,kBAAkD,IAA1B2Q,GAA4CA,EAAsBl2hB,KAAKkohB,EAAauN,EAAQb,gBAG3JoB,EAAWzQ,WAAa,SAAUn1Z,GAChC,IAAIima,EAEkD,QAArDA,EAAyBnO,EAAY3C,kBAAmD,IAA3B8Q,GAA6CA,EAAuBr2hB,KAAKkohB,EAAa,CAClJp8X,OAAQ17B,EAAI07B,OACZqtG,MAAO/oI,EAAI+oI,UAKjB48R,EAAkB73e,QAAQ,CACxBi4e,qBAAsBH,EAAWG,qBACjCC,iBAAkBJ,EAAWI,iBAC7BE,cAAeN,EAAWM,kBAE3BP,EAAkB5gd,QACd4gd,EAAkB/0Y,WAE3BsjY,EAAe3se,GAAG,kBAAkB,SAAUqC,EAAM07e,IAClD,EAAIlwD,MAAMC,QAAQgwD,EAAQf,eAAgB,wDAE1C,IAAI6B,EAAcd,EAAQf,eAAe8B,eAAex8e,EAAKz+C,MAAOy+C,EAAKx+C,KAEpE+6hB,GAKLb,EAAKE,OAAS,WACZW,EAAY9pY,OAAOl3E,MAAK,SAAUkhd,GAChC,IAAI/7hB,EAAQ+7hB,EAAO/7hB,MACR+7hB,EAAOn3hB,KAGhBo2hB,EAAKjtb,UAIP,EAAI+8X,MAAMC,SAAQ,EAAID,MAAM12T,eAAep0K,GAAQ,6CACnDg7hB,EAAK1tB,QAAQ,IAAIxzW,WAAW95J,GAAQ,EAAG,CAACA,QAV1C,OAWY,SAAU6vH,GACpBmra,EAAKvohB,MAAMo9G,OAIfmra,EAAKnwN,SAAW,SAAUh7M,GACxBgsa,EAAY1rgB,OAAO0/F,GACnBmra,EAAKz4e,MAAL,OAAoB,SAAU64e,GAC5B,IAAIL,EAAQ9R,UAIZ,MAAMmS,OA5BRJ,EAAKjtb,WAgCT67a,EAAe3se,GAAG,UAAU,SAAU++e,GACpC,IAAItQ,EAAUsQ,EAAOtQ,QACrBqP,EAAQkB,UAAYvQ,EAAQM,SAC5B+O,EAAQ9O,YAAcP,EAAQwQ,kBACvBxQ,EAAQwQ,WAEf1O,EAAYxD,YAAYxme,QAAQ,IAAI6he,iBAAiBqG,EAASqP,OAEhEnR,EAAe3se,GAAG,gBAAgB,SAAUm4R,GAC1C,IAAIvlN,EAEJ,OAAQulN,EAAGtiU,MACT,IAAK,oBACH+8G,EAAS,IAAIi7W,MAAMsM,kBAAkBhiK,EAAGz/R,QAASy/R,EAAG9oO,MACpD,MAEF,IAAK,sBACHujB,EAAS,IAAIi7W,MAAM4M,oBAAoBtiK,EAAGz/R,SAC1C,MAEF,IAAK,sBACHk6E,EAAS,IAAIi7W,MAAMyM,oBAAoBniK,EAAGz/R,SAC1C,MAEF,IAAK,8BACHk6E,EAAS,IAAIi7W,MAAM+L,4BAA4BzhK,EAAGz/R,QAASy/R,EAAGrrO,QAC9D,MAEF,IAAK,wBACH8lB,EAAS,IAAIi7W,MAAM8L,sBAAsBxhK,EAAGz/R,QAASy/R,EAAGviJ,SACxD,MAEF,SACE,EAAIi4S,MAAMqR,aAAa,0CAG3BqxC,EAAYxD,YAAYvvc,OAAOo1C,MAEjC+5Z,EAAe3se,GAAG,mBAAmB,SAAUohT,GAG7C,GAFA08L,EAAQhB,qBAAsB,EAAIjvD,MAAM+O,2BAEpC2zC,EAAY5C,WAOd,IACE4C,EAAY5C,YAPO,SAAwB/gb,GAC3Ckxb,EAAQhB,oBAAoBv2e,QAAQ,CAClCqmD,SAAUA,MAK2Bw0P,EAAU/xP,MACjD,MAAO8oO,GACP2lN,EAAQhB,oBAAoBt/c,OAAO26P,QAGrC2lN,EAAQhB,oBAAoBt/c,OAAO,IAAIqwZ,MAAMsM,kBAAkB/4I,EAAU1oT,QAAS0oT,EAAU/xP,OAG9F,OAAOyub,EAAQhB,oBAAoBzzY,WAErCsjY,EAAe3se,GAAG,cAAc,SAAUqC,GACxC,IAAI68e,EAEkD,QAArDA,EAAyB3O,EAAY3C,kBAAmD,IAA3BsR,GAA6CA,EAAuB72hB,KAAKkohB,EAAa,CAClJp8X,OAAQ9xG,EAAKn5C,OACbs4P,MAAOn/M,EAAKn5C,SAGd40hB,EAAQ3N,uBAAuB5pe,QAAQlE,MAEzCsqe,EAAe3se,GAAG,mBAAmB,SAAUqC,GACzCy7e,EAAQ9R,WAIDhC,sBAAsB8T,EAAS1B,YAAYhxhB,IAAIi3C,EAAKwue,WAE1DsO,iBAAiB98e,EAAK+ye,aAAc/ye,EAAK0sK,aAEhD49T,EAAe3se,GAAG,aAAa,SAAUo/e,GACvC,IAAIC,EAEAC,EAAS9kf,eAAe4kf,EAAQ,GAChC92f,EAAKg3f,EAAO,GACZ/3hB,EAAO+3hB,EAAO,GACdC,EAAeD,EAAO,GAE1B,IAAIxB,EAAQ9R,YAIR8R,EAAQ1M,WAAW9lhB,IAAIg9B,GAI3B,OAAQ/gC,GACN,IAAK,OACH,IAAIyyC,EAAS8jf,EAAQnB,QAErB,GAAI,UAAW4C,EAAc,CAC3B,IAAIC,EAAgBD,EAAa/phB,OACjC,EAAIq4d,MAAMv+c,MAAM,8BAA8B3c,OAAO6shB,IAErD1B,EAAQ1M,WAAW7qe,QAAQje,EAAIk3f,GAE/B,MAGF,IAAIC,EAAe,KAEfzlf,EAAOgxe,QAAiE,QAAtDqU,EAAwB57M,WAAWi8M,qBAAqD,IAA1BL,GAAoCA,EAAsB1tQ,UAC5I8tQ,EAAe,CACbE,aAAc,SAAsBvyC,EAAMvkZ,GACxC46O,WAAWi8M,cAAcE,UAAUxyC,EAAMvkZ,MAK/C,IAAIukZ,EAAO,IAAI07B,aAAa+W,eAAeN,EAAc,CACvDvwC,gBAAiBh1c,EAAOg1c,gBACxBq8B,gBAAiBrxe,EAAOqxe,gBACxBR,aAAc7we,EAAO6we,aACrBgD,qBAAsBiQ,EAAQrB,sBAAsBtzgB,KAAK20gB,GACzD2B,aAAcA,IAGhB3B,EAAQvB,WAAWpzgB,KAAKike,GAAxB,OAAuC,SAAUx6X,GAC/C,OAAO+5Z,EAAeW,gBAAgB,eAAgB,CACpDhlf,GAAIA,OAFR,SAIc,YACP0R,EAAO+we,qBAAuB39B,EAAK/qc,OACtC+qc,EAAK/qc,KAAO,MAGdy7e,EAAQ1M,WAAW7qe,QAAQje,EAAI8kd,MAGjC,MAEF,IAAK,WACL,IAAK,QACH0wC,EAAQ1M,WAAW7qe,QAAQje,EAAIi3f,GAE/B,MAEF,QACE,MAAM,IAAItwhB,MAAM,kCAAkC0D,OAAOpL,QAG/DolhB,EAAe3se,GAAG,OAAO,SAAU8/e,GACjC,IAAIC,EAEAC,EAASxlf,eAAeslf,EAAQ,GAChCx3f,EAAK03f,EAAO,GACZnP,EAAYmP,EAAO,GACnBz4hB,EAAOy4hB,EAAO,GACdC,EAAYD,EAAO,GAEvB,IAAIlC,EAAQ9R,UAAZ,CAIA,IAAIkU,EAAYlW,sBAAsB8T,EAAS1B,YAAYhxhB,IAAIylhB,GAE/D,IAAIqP,EAAU7O,KAAK/lhB,IAAIg9B,GAIvB,OAAQ/gC,GACN,IAAK,QACH24hB,EAAU7O,KAAK9qe,QAAQje,EAAI23f,IAGR,OAAdA,QAAoC,IAAdA,GAAuE,QAAtCF,EAAkBE,EAAU59e,YAAsC,IAApB09e,OAAxD,EAA8FA,EAAgB72hB,QAFlI,MAG5Bg3hB,EAAU3O,oBAAqB,GAGjC,MAEF,IAAK,UACH2O,EAAU7O,KAAK9qe,QAAQje,EAAI23f,GAC3B,MAEF,QACE,MAAM,IAAIhxhB,MAAM,2BAA2B0D,OAAOpL,SAGxDolhB,EAAe3se,GAAG,eAAe,SAAUqC,GACzC,IAAI89e,EAEArC,EAAQ9R,WAI0C,QAArDmU,EAAyB5P,EAAY3C,kBAAmD,IAA3BuS,GAA6CA,EAAuB93hB,KAAKkohB,EAAa,CAClJp8X,OAAQ9xG,EAAK8xG,OACbqtG,MAAOn/M,EAAKm/M,WAGhBmrR,EAAe3se,GAAG,YAAY,SAAUqC,GAClCy7e,EAAQ9R,WAIZpC,sBAAsBkU,EAAS3B,UAAW12hB,OAAO+hV,OAAO,CACtDonM,YAAanphB,OAAO+hV,OAAOnlS,EAAKuse,aAChCC,UAAWpphB,OAAO+hV,OAAOnlS,EAAKwse,iBAGlClC,EAAe3se,GAAG,qBAAsB34C,KAAKo1hB,sBAAsBtzgB,KAAK9hB,OACxEslhB,EAAe3se,GAAG,oBAAoB,SAAUqC,GAC9C,OAAIy7e,EAAQ9R,UACH1le,QAAQk3B,OAAO,IAAIvuE,MAAM,0BAG7B6uhB,EAAQnT,kBAINmT,EAAQnT,kBAAkBnyN,MAAMn2Q,GAH9BiE,QAAQk3B,OAAO,IAAIvuE,MAAM,8EAKpC09gB,EAAe3se,GAAG,yBAAyB,SAAUqC,GACnD,OAAIy7e,EAAQ9R,UACH1le,QAAQk3B,OAAO,IAAIvuE,MAAM,0BAG7B6uhB,EAAQlT,wBAINkT,EAAQlT,wBAAwBpyN,MAAMn2Q,GAHpCiE,QAAQk3B,OAAO,IAAIvuE,MAAM,sFAMrC,CACDtD,IAAK,wBACL5I,MAAO,SAA+Bq9hB,GACpC,IAAIC,EAAuBC,EAEvBC,EAAYH,EAAOG,UAEnBl5hB,KAAK2khB,WAIiF,QAAzFqU,GAAyBC,EAAoBj5hB,KAAKkphB,aAAa1C,4BAA4D,IAA1BwS,GAA4CA,EAAsBh4hB,KAAKi4hB,EAAmBC,KAE7L,CACD50hB,IAAK,UACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,UAAW,QAEvD,CACD3hhB,IAAK,UACL5I,MAAO,SAAiBkshB,GACtB,IAAIuR,EAAUn5hB,KAEd,IAAK2B,OAAOC,UAAUgmhB,IAAeA,GAAc,GAAKA,EAAa5nhB,KAAK23hB,UACxE,OAAO14e,QAAQk3B,OAAO,IAAIvuE,MAAM,yBAGlC,IAAI4hhB,EAAY5B,EAAa,EACzBwR,EAAgBzW,sBAAsB3ihB,KAAMg1hB,eAAejxhB,IAAIylhB,GAEnE,GAAI4P,EACF,OAAOA,EAGT,IAAIp3Y,EAAUhiJ,KAAKslhB,eAAeW,gBAAgB,UAAW,CAC3DuD,UAAWA,IACVjzc,MAAK,SAAUkzc,GAChB,GAAI0P,EAAQxU,UACV,MAAM,IAAI/8gB,MAAM,uBAGlB,IAAIgkQ,EAAO,IAAIk1Q,aAAa0I,EAAWC,EAAU0P,EAASA,EAAQ7D,QAAQj4O,cAAe87O,EAAQ7D,QAAQ3R,QAIzG,OAFAhB,sBAAsBwW,EAASpE,YAAYrthB,IAAI8hhB,EAAW59Q,GAEnDA,KAKT,OAFA+2Q,sBAAsB3ihB,KAAMg1hB,eAAetthB,IAAI8hhB,EAAWxnY,GAEnDA,IAER,CACD19I,IAAK,eACL5I,MAAO,SAAsBD,GAC3B,OAAOuE,KAAKslhB,eAAeW,gBAAgB,eAAgB,CACzDxqhB,IAAKA,MAGR,CACD6I,IAAK,iBACL5I,MAAO,SAAwB8thB,EAAWgB,GACxC,OAAOxqhB,KAAKslhB,eAAeW,gBAAgB,iBAAkB,CAC3DuD,UAAWA,EACXgB,OAAQA,MAGX,CACDlmhB,IAAK,eACL5I,MAAO,WACL,IAAI29hB,EACAC,EACAC,EAAUv5hB,KAEd,OAAOA,KAAKslhB,eAAeW,gBAAgB,eAAgB,CACzDgD,YAAajphB,KAAK2nhB,YAClBD,SAAU1nhB,KAAK23hB,UACflQ,kBAAmBznhB,KAAKynhB,kBAAkB+I,aAC1C97N,SAA8J,QAAnJ2kO,EAAmE,QAA1CC,EAAoBt5hB,KAAK21hB,mBAA+C,IAAtB2D,OAA+B,EAASA,EAAkB5kO,gBAAgD,IAA1B2kO,EAAmCA,EAAwB,OAJ5N,SAKO,WACZE,EAAQ9R,kBAAkB2O,qBAG7B,CACD9xhB,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKs2hB,0BAA4Bt2hB,KAAKs2hB,wBAA0Bt2hB,KAAKslhB,eAAeW,gBAAgB,kBAAmB,SAE/H,CACD3hhB,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKu2hB,uBAAyBv2hB,KAAKu2hB,qBAAuBv2hB,KAAKslhB,eAAeW,gBAAgB,eAAgB,SAEtH,CACD3hhB,IAAK,yBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,yBAA0B,QAEtE,CACD3hhB,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,kBAAmB,QAE/D,CACD3hhB,IAAK,iBACL5I,MAAO,SAAwBulC,GAC7B,MAAkB,kBAAPA,EACFge,QAAQk3B,OAAO,IAAIvuE,MAAM,iCAG3B5H,KAAKslhB,eAAeW,gBAAgB,iBAAkB,CAC3Dhlf,GAAIA,MAGP,CACD38B,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,gBAAiB,QAE7D,CACD3hhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,gBAAiB,QAE7D,CACD3hhB,IAAK,cACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,cAAe,QAE3D,CACD3hhB,IAAK,uBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,uBAAwB,QAEpE,CACD3hhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,gBAAiB,QAE7D,CACD3hhB,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,iBAAkB,QAE9D,CACD3hhB,IAAK,gBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,gBAAiB,QAE7D,CACD3hhB,IAAK,kBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,kBAAmB,QAE/D,CACD3hhB,IAAK,mBACL5I,MAAO,SAA0B8thB,GAC/B,OAAOxphB,KAAKslhB,eAAeW,gBAAgB,mBAAoB,CAC7DuD,UAAWA,MAGd,CACDllhB,IAAK,gBACL5I,MAAO,SAAuB8thB,GAC5B,OAAOxphB,KAAKslhB,eAAeW,gBAAgB,gBAAiB,CAC1DuD,UAAWA,MAGd,CACDllhB,IAAK,aACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,aAAc,QAE1D,CACD3hhB,IAAK,2BACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,2BAA4B,MAAM1vc,MAAK,SAAU4vL,GAC1F,OAAO,IAAI67Q,yBAAyBwX,sBAAsBrzR,QAG7D,CACD7hQ,IAAK,iBACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,iBAAkB,QAE9D,CACD3hhB,IAAK,cACL5I,MAAO,WACL,IAAI+9hB,EAAUz5hB,KAEd,OAAO2ihB,sBAAsB3ihB,KAAMi1hB,mBAAqB1S,sBAAsBvihB,KAAMi1hB,iBAAkBj1hB,KAAKslhB,eAAeW,gBAAgB,cAAe,MAAM1vc,MAAK,SAAU4vL,GAC5K,IAAIuzR,EAAuBC,EAAqBC,EAAuBC,EAEvE,MAAO,CACL18U,KAAMgpD,EAAQ,GACd+nP,SAAU/nP,EAAQ,GAAK,IAAI47Q,UAAU+X,SAAS3zR,EAAQ,IAAM,KAC5D++Q,2BAAyL,QAA5JwU,EAAwE,QAA/CC,EAAsBF,EAAQ9D,mBAAiD,IAAxBgE,OAAiC,EAASA,EAAoBjlO,gBAAgD,IAA1BglO,EAAmCA,EAAwB,KAC5PpC,cAAoL,QAApKsC,EAAyE,QAAhDC,EAAuBJ,EAAQ9D,mBAAkD,IAAzBkE,OAAkC,EAASA,EAAqBvC,qBAAqD,IAA1BsC,EAAmCA,EAAwB,YAI5P,CACDt1hB,IAAK,cACL5I,MAAO,WACL,OAAOsE,KAAKslhB,eAAeW,gBAAgB,cAAe,QAE3D,CACD3hhB,IAAK,eACL5I,MAAO,WACL,IAAIq+hB,EAAgB38U,kBAAgCorR,aAAY,QAAYgB,MAAK,SAASwwD,IACxF,IAAIjR,EACAkR,EACAC,EACAtuR,EAEAuuR,EAASz2hB,UAEb,OAAO8ke,aAAY,QAAYhuZ,MAAK,SAAmB4/c,GACrD,OACE,OAAQA,EAAU9ihB,KAAO8ihB,EAAUr6hB,MACjC,KAAK,EAGH,OAFAgphB,EAAkBoR,EAAOt4hB,OAAS,QAAmB/F,IAAdq+hB,EAAO,IAAmBA,EAAO,GACxEC,EAAUr6hB,KAAO,EACVC,KAAKslhB,eAAeW,gBAAgB,UAAW,MAExD,KAAK,EACH,IAAKjmhB,KAAK2khB,UAAW,CACnByV,EAAUr6hB,KAAO,EACjB,MAGF,OAAOq6hB,EAAUhwD,OAAO,UAE1B,KAAK,EACH6vD,EAAch/R,2BAA2B0nR,sBAAsB3ihB,KAAM+0hB,YAAY5phB,UACjFivhB,EAAU9ihB,KAAO,EAEjB2ihB,EAAYzshB,IAEd,KAAK,EACH,IAAK0shB,EAAUD,EAAY7zhB,KAAK9F,KAAM,CACpC85hB,EAAUr6hB,KAAO,GACjB,MAMF,IAHA6rQ,EAAOsuR,EAAQx+hB,OACUsmT,UAEF,CACrBo4O,EAAUr6hB,KAAO,GACjB,MAGF,MAAM,IAAI6H,MAAM,sBAAsB0D,OAAOsgQ,EAAKg8Q,WAAY,6BAEhE,KAAK,GACHwS,EAAUr6hB,KAAO,EACjB,MAEF,KAAK,GACHq6hB,EAAUr6hB,KAAO,GACjB,MAEF,KAAK,GACHq6hB,EAAU9ihB,KAAO,GACjB8ihB,EAAU3iY,GAAK2iY,EAAS,MAAU,GAElCH,EAAY7xhB,EAAEgyhB,EAAU3iY,IAE1B,KAAK,GAKH,OAJA2iY,EAAU9ihB,KAAO,GAEjB2ihB,EAAYvjd,IAEL0jd,EAAUr4O,OAAO,IAE1B,KAAK,GACH/hT,KAAK+phB,WAAW72gB,QAEX61gB,GACH/ohB,KAAKk1hB,WAAWhihB,QAGlBqvgB,sBAAsBvihB,KAAMi1hB,iBAAkB,MAE9Cj1hB,KAAKs2hB,wBAA0B,KAC/Bt2hB,KAAKu2hB,qBAAuB,KAE9B,KAAK,GACL,IAAK,MACH,OAAO6D,EAAUzoP,UAGtBqoP,EAAUh6hB,KAAM,CAAC,CAAC,EAAG,GAAI,GAAI,UAOlC,OAJA,WACE,OAAO+5hB,EAAc9xhB,MAAMjI,KAAM0D,YAzF9B,IA8FN,CACDY,IAAK,gBACLP,IAAK,WACH,IAAI4uC,EAAS3yC,KAAKs1hB,QAClB,OAAO,EAAI9uD,MAAM1kW,QAAQ9hI,KAAM,gBAAiB,CAC9CokhB,iBAAkBzxe,EAAOyxe,iBACzBR,UAAWjxe,EAAOixe,gBAKjB4B,EA70B0B,GAg1B/ByE,WAA0B,WAC5B,SAASA,IACP78f,gBAAgBptB,KAAMiqhB,GAEtBjqhB,KAAKq6hB,MAAQj8hB,OAAOC,OAAO,MAyD7B,OAtDAo5C,aAAawye,EAAY,CAAC,CACxB3lhB,IAAK,aACL5I,MAAO,SAAoB4+hB,GACzB,OAAIt6hB,KAAKq6hB,MAAMC,GACNt6hB,KAAKq6hB,MAAMC,GAGbt6hB,KAAKq6hB,MAAMC,GAAS,CACzB9kD,YAAY,EAAIhP,MAAM+O,2BACtBv6b,KAAM,KACNmpG,UAAU,KAGb,CACD7/I,IAAK,MACL5I,MAAO,SAAa4+hB,GAClB,IAAI11f,EAAWlhC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAEnF,GAAIkhC,EAGF,OAFA5kC,KAAKu6hB,WAAWD,GAAO9kD,WAAWxzV,QAAQzrE,KAAK3xC,GAExC,KAGT,IAAI99B,EAAM9G,KAAKq6hB,MAAMC,GAErB,IAAKxzhB,IAAQA,EAAIq9I,SACf,MAAM,IAAIv8I,MAAM,6CAA6C0D,OAAOgvhB,EAAO,MAG7E,OAAOxzhB,EAAIk0C,OAEZ,CACD12C,IAAK,MACL5I,MAAO,SAAa4+hB,GAClB,IAAIxzhB,EAAM9G,KAAKq6hB,MAAMC,GACrB,OAAgB,OAARxzhB,QAAwB,IAARA,OAAiB,EAASA,EAAIq9I,YAAa,IAEpE,CACD7/I,IAAK,UACL5I,MAAO,SAAiB4+hB,EAAOt/e,GAC7B,IAAIl0C,EAAM9G,KAAKu6hB,WAAWD,GAE1BxzhB,EAAIq9I,UAAW,EACfr9I,EAAIk0C,KAAOA,EACXl0C,EAAI0ue,WAAWt2b,QAAQlE,KAExB,CACD12C,IAAK,QACL5I,MAAO,WACLsE,KAAKq6hB,MAAQj8hB,OAAOC,OAAO,UAIxB4rhB,EA7DqB,GAgE1BrJ,WAA0B,WAC5B,SAASA,EAAW4M,GAClBpggB,gBAAgBptB,KAAM4ghB,GAEtB5ghB,KAAKw6hB,oBAAsBhN,EAC3BxthB,KAAKy6hB,WAAa,KAepB,OAZAhjf,aAAampe,EAAY,CAAC,CACxBt8gB,IAAK,UACLP,IAAK,WACH,OAAO/D,KAAKw6hB,oBAAoBhlD,WAAWxzV,UAE5C,CACD19I,IAAK,SACL5I,MAAO,WACLsE,KAAKw6hB,oBAAoB3ugB,aAItB+0f,EApBqB,GAuB9BzlhB,QAAQylhB,WAAaA,WAErB,IAAIgN,mBAAkC,WACpC,SAASA,EAAmB8M,GAC1B,IAAI91f,EAAW81f,EAAO91f,SAClB+N,EAAS+nf,EAAO/nf,OAChBq3e,EAAO0Q,EAAO1Q,KACdD,EAAa2Q,EAAO3Q,WACpB2C,EAAsBgO,EAAOhO,oBAC7BQ,EAAewN,EAAOxN,aACtB1D,EAAYkR,EAAOlR,UACnB6C,EAAgBqO,EAAOrO,cACvBsO,EAAwBD,EAAO7M,yBAC/BA,OAAqD,IAA1B8M,GAA2CA,EACtEC,EAAgBF,EAAO/W,OACvBA,OAA2B,IAAlBiX,GAAmCA,EAEhDxtgB,gBAAgBptB,KAAM4thB,GAEtB5thB,KAAK4kC,SAAWA,EAChB5kC,KAAK2yC,OAASA,EACd3yC,KAAKgqhB,KAAOA,EACZhqhB,KAAK+phB,WAAaA,EAClB/phB,KAAK0shB,oBAAsBA,EAC3B1shB,KAAK66hB,gBAAkB,KACvB76hB,KAAKkthB,aAAeA,EACpBlthB,KAAK0phB,WAAaF,EAClBxphB,KAAKqshB,cAAgBA,EACrBrshB,KAAK8phB,QAAUnG,EACf3jhB,KAAK86hB,SAAU,EACf96hB,KAAK+6hB,sBAAwB,KAC7B/6hB,KAAKg7hB,eAAgB,EACrBh7hB,KAAKi7hB,2BAAyD,IAA7BpN,GAAuD,qBAAXn/f,OAC7E1uB,KAAK4pQ,WAAY,EACjB5pQ,KAAKw1e,YAAa,EAAIhP,MAAM+O,2BAC5Bv1e,KAAK2rB,KAAO,IAAIi1f,WAAW5ghB,MAC3BA,KAAKk7hB,aAAel7hB,KAAK6rB,OAAO/J,KAAK9hB,MACrCA,KAAKm7hB,eAAiBn7hB,KAAKo7hB,UAAUt5gB,KAAK9hB,MAC1CA,KAAKq7hB,mBAAqBr7hB,KAAKs7hB,cAAcx5gB,KAAK9hB,MAClDA,KAAKu7hB,WAAav7hB,KAAKi9M,MAAMn7L,KAAK9hB,MAClCA,KAAK4hhB,QAAUjve,EAAOk5e,cAAcziD,OA8KtC,OA3KA3xb,aAAam2e,EAAoB,CAAC,CAChCtphB,IAAK,YACLP,IAAK,WACH,OAAO/D,KAAKw1e,WAAWxzV,QAAhB,OAAiC,iBAEzC,CACD19I,IAAK,qBACL5I,MAAO,SAA4B8/hB,GACjC,IAAIC,EAEAC,EAAsBF,EAAOzN,aAC7BA,OAAuC,IAAxB2N,GAAyCA,EACxD1N,EAAwBwN,EAAOxN,sBAEnC,IAAIhuhB,KAAK4pQ,UAAT,CAIA,GAAI5pQ,KAAK4hhB,QAAS,CAChB,GAAIgM,EAAmB+N,YAAY13hB,IAAIjE,KAAK4hhB,SAC1C,MAAM,IAAIh6gB,MAAM,mJAGlBgmhB,EAAmB+N,YAAYh9gB,IAAI3e,KAAK4hhB,SAGtC5hhB,KAAK8phB,SAAmE,QAAvD2R,EAAwBr/M,WAAWw/M,sBAAsD,IAA1BH,GAAoCA,EAAsBnxQ,UAC5ItqR,KAAKkyb,QAAU91G,WAAWw/M,eAAev9hB,OAAO2B,KAAK0phB,YACrD1phB,KAAKkyb,QAAQn6Y,KAAK/3C,KAAKkthB,cACvBlthB,KAAKkyb,QAAQ2pG,eAAiB77hB,KAAKkyb,QAAQ4pG,qBAG7C,IAAIC,EAAe/7hB,KAAK2yC,OACpBk5e,EAAgBkQ,EAAalQ,cAC7BtrP,EAAWw7P,EAAax7P,SACxBlkK,EAAY0/Z,EAAa1/Z,UACzB8vZ,EAAa4P,EAAa5P,WAC1BpxZ,EAAagha,EAAahha,WAC9B/6H,KAAKg8hB,IAAM,IAAIpa,QAAQqa,eAAepQ,EAAe7rhB,KAAK+phB,WAAY/phB,KAAKgqhB,KAAMhqhB,KAAKqshB,cAAeF,EAAY6B,EAAuBhuhB,KAAK0shB,qBAC7I1shB,KAAKg8hB,IAAIE,aAAa,CACpB7/Z,UAAWA,EACXkkK,SAAUA,EACVwtP,aAAcA,EACdhzZ,WAAYA,IAEd/6H,KAAK66hB,gBAAkB,EACvB76hB,KAAKg7hB,eAAgB,EAEjBh7hB,KAAK+6hB,uBACP/6hB,KAAK+6hB,2BAGR,CACDz2hB,IAAK,SACL5I,MAAO,WACL,IAAIyS,EAAQzK,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAChF1D,KAAK86hB,SAAU,EACf96hB,KAAK4pQ,WAAY,EAEb5pQ,KAAKg8hB,KACPh8hB,KAAKg8hB,IAAIG,aAGPn8hB,KAAK4hhB,SACPgM,EAAmB+N,YAAnB,OAAyC37hB,KAAK4hhB,SAGhD5hhB,KAAK4kC,SAASz2B,GAAS,IAAIqzgB,eAAe37C,4BAA4B,6BAA6Bv6d,OAAOtL,KAAK0phB,WAAa,GAAI,aAEjI,CACDplhB,IAAK,sBACL5I,MAAO,WACAsE,KAAKg7hB,eAQNh7hB,KAAKkyb,SACPlyb,KAAKkyb,QAAQkqG,mBAAmBp8hB,KAAKkthB,cAGnClthB,KAAK86hB,SAIT96hB,KAAKo7hB,aAfEp7hB,KAAK+6hB,wBACR/6hB,KAAK+6hB,sBAAwB/6hB,KAAKm7hB,kBAgBvC,CACD72hB,IAAK,YACL5I,MAAO,WACLsE,KAAK86hB,SAAU,EAEX96hB,KAAK4pQ,YAIL5pQ,KAAK2rB,KAAK8ugB,WACZz6hB,KAAK2rB,KAAK8ugB,WAAWz6hB,KAAKq7hB,oBAE1Br7hB,KAAKs7hB,mBAGR,CACDh3hB,IAAK,gBACL5I,MAAO,WACL,IAAI2giB,EAAUr8hB,KAEVA,KAAKi7hB,0BACPvsgB,OAAO4rQ,uBAAsB,WAC3B+hQ,EAAQd,aAAR,MAA8Bc,EAAQnB,iBAGxCj8e,QAAQC,UAAUq3B,KAAKv2E,KAAKu7hB,YAA5B,MAAiDv7hB,KAAKk7hB,gBAGzD,CACD52hB,IAAK,QACL5I,MAAO,WACL,IAAI4giB,EAASl/U,kBAAgCorR,aAAY,QAAYgB,MAAK,SAAS+yD,IACjF,OAAO/zD,aAAY,QAAYhuZ,MAAK,SAAmBgid,GACrD,OACE,OAAQA,EAAUllhB,KAAOklhB,EAAUz8hB,MACjC,KAAK,EACH,IAAKC,KAAK4pQ,UAAW,CACnB4yR,EAAUz8hB,KAAO,EACjB,MAGF,OAAOy8hB,EAAUpyD,OAAO,UAE1B,KAAK,EACHpqe,KAAK66hB,gBAAkB76hB,KAAKg8hB,IAAIS,oBAAoBz8hB,KAAKkthB,aAAclthB,KAAK66hB,gBAAiB76hB,KAAKm7hB,eAAgBn7hB,KAAKkyb,SAEnHlyb,KAAK66hB,kBAAoB76hB,KAAKkthB,aAAaE,UAAUvrhB,SACvD7B,KAAK86hB,SAAU,EAEX96hB,KAAKkthB,aAAaG,YACpBrthB,KAAKg8hB,IAAIG,aAELn8hB,KAAK4hhB,SACPgM,EAAmB+N,YAAnB,OAAyC37hB,KAAK4hhB,SAGhD5hhB,KAAK4kC,aAIX,KAAK,EACL,IAAK,MACH,OAAO43f,EAAU7qP,UAGtB4qP,EAAUv8hB,UAOf,OAJA,WACE,OAAOs8hB,EAAOr0hB,MAAMjI,KAAM0D,YAvCvB,KA4CL,CAAC,CACHY,IAAK,cACLP,IAAK,WACH,OAAO,EAAIyie,MAAM1kW,QAAQ9hI,KAAM,cAAe,IAAI08hB,aAI/C9O,EApN6B,GAuNlClkgB,QAAU,WACdvuB,QAAQuuB,QAAUA,QAClB,IAAIi3f,MAAQ,YACZxlhB,QAAQwlhB,MAAQA,OAIT,SAACj7C,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQg6hB,WAAah6hB,EAAQq9hB,oBAAiB,EAE9C,IAIgC1xhB,EAJ5B0he,GAI4B1he,EAJU6+d,EAAoB,KAIT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAFrF0/d,EAAQb,EAAoB,GAMhC,SAASztM,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,SAAS42M,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAI7P,SAAS+9C,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,IAsMI6ngB,EAtMAwH,EAA8B,WAChC,SAASA,EAAet2f,GACtB,IAAIq+e,EAAQr+e,EAAKq+e,MACb8B,EAAuBngf,EAAKmgf,qBAC5Bt9C,EAAqB7ic,EAAKg3Q,cAC1BA,OAAuC,IAAvB6rL,EAAgC9sJ,WAAWp2S,SAAWkjc,EAClD7ic,EAAKgvf,aAG7BjogB,EAAgBptB,KAAM28hB,GAElB38hB,KAAK1B,cAAgBq+hB,IACvB,EAAIn2D,EAAMqR,aAAa,qCAGzB73e,KAAK0khB,MAAQA,EACb1khB,KAAKo1hB,sBAAwB5O,EAC7BxmhB,KAAKmpe,UAAY9rL,EACjBr9S,KAAK48hB,gBAAkB,GACvB58hB,KAAKq1hB,aAAe,KAgLtB,OA7KA59e,EAAaklf,EAAgB,CAAC,CAC5Br4hB,IAAK,oBACL5I,MAAO,SAA2BmhiB,GAChC78hB,KAAK48hB,gBAAgBxwhB,KAAKywhB,GAE1B78hB,KAAKmpe,UAAU2zD,MAAMn+gB,IAAIk+gB,KAE1B,CACDv4hB,IAAK,aACL5I,MAAO,SAAoBquJ,GACzB,IAAIsrY,EAAer1hB,KAAKq1hB,aAEnBA,KACHA,EAAer1hB,KAAKq1hB,aAAer1hB,KAAKmpe,UAAUljc,cAAc,UACnDhF,GAAK,wBAAwB31B,OAAOtL,KAAK0khB,OAEtD1khB,KAAKmpe,UAAU5he,gBAAgBmyM,qBAAqB,QAAQ,GAAGwjG,YAAYm4O,IAG7E,IAAI0H,EAAa1H,EAAa3jN,MAC9BqrN,EAAWxwH,WAAWxiR,EAAMgzY,EAAWvuH,SAAS3sa,UAEjD,CACDyC,IAAK,QACL5I,MAAO,WACL,IACIykB,EADA+sd,EAAYjyO,EAA2Bj7P,KAAK48hB,iBAGhD,IACE,IAAK1vD,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAIu8hB,EAAiB18gB,EAAMzkB,MAE3BsE,KAAKmpe,UAAU2zD,MAAf,OAA+BD,IAEjC,MAAOzrf,GACP87b,EAAU9ke,EAAEgpC,GAPd,QASE87b,EAAUx2Z,IAGZ12E,KAAK48hB,gBAAgB/6hB,OAAS,EAE1B7B,KAAKq1hB,eACPr1hB,KAAKq1hB,aAAanmhB,SAClBlP,KAAKq1hB,aAAe,QAGvB,CACD/whB,IAAK,OACL5I,MAAO,WACL,IAtFqBmH,EAsFjBm6hB,GAtFiBn6hB,EAsFuB2le,EAAY,QAAYgB,MAAK,SAASC,EAAQsc,GACxF,IAEI82C,EAAgB9yY,EAFhBpyG,EAAQ33C,KAGZ,OAAOwoe,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EACH,IAAMgmf,EAAK78E,WAAY68E,EAAKk3C,YAAc,CACxCrzD,EAAS7pe,KAAO,EAChB,MAGF,OAAO6pe,EAASQ,OAAO,UAEzB,KAAK,EAGH,GAFA2b,EAAK78E,UAAW,GAEXlpa,KAAKk9hB,0BAA2B,CACnCtzD,EAAS7pe,KAAO,GAChB,MAKF,KAFA88hB,EAAiB92C,EAAKo3C,wBAED,CACnBvzD,EAAS7pe,KAAO,GAChB,MAMF,OAHAC,KAAKo9hB,kBAAkBP,GACvBjzD,EAAStyd,KAAO,EAChBsyd,EAAS7pe,KAAO,GACT88hB,EAAe/vY,OAExB,KAAK,GACH88U,EAAS7pe,KAAO,GAChB,MAEF,KAAK,GAUH,MATA6pe,EAAStyd,KAAO,GAChBsyd,EAASnyU,GAAKmyU,EAAQ,MAAU,GAEhC5pe,KAAKo1hB,sBAAsB,CACzB8D,UAAW1yD,EAAMgM,qBAAqBkU,uBAGxC,EAAIlgB,EAAMv+c,MAAM,wBAAwB3c,OAAOuxhB,EAAeQ,OAAQ,QAAQ/xhB,OAAOs+d,EAASnyU,GAAI,OAClGsuV,EAAKi+B,iBAAkB,EACjBp6C,EAASnyU,GAEjB,KAAK,GACH,OAAOmyU,EAASQ,OAAO,UAEzB,KAAK,GAGH,KAFArgV,EAAOg8V,EAAKu3C,sBAED,CACT1zD,EAAS7pe,KAAO,GAChB,MAKF,GAFAC,KAAKusa,WAAWxiR,IAEX/pJ,KAAKu9hB,2BAA4B,CACpC3zD,EAAS7pe,KAAO,GAChB,MAGF,OAAO6pe,EAASQ,OAAO,UAEzB,KAAK,GAEH,OADAR,EAAS7pe,KAAO,GACT,IAAIk/C,SAAQ,SAAUC,GAC3B,IAAIqiD,EAAU5pD,EAAM6lf,sBAAsBt+e,GAE1CvH,EAAM8lf,sBAAsB,CAAC1zY,GAAO,CAACg8V,GAAOxkZ,MAGhD,KAAK,GACL,IAAK,MACH,OAAOqoY,EAASj4L,UAGrB83L,EAASzpe,KAAM,CAAC,CAAC,EAAG,SA1KS,WAAc,IAAIovK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,QAiL3W,OAJA,SAAcwte,GACZ,OAAO0zD,EAAM/0hB,MAAMjI,KAAM0D,YAzFtB,IA8FN,CACDY,IAAK,wBACL5I,MAAO,SAA+BkpC,IACpC,EAAI4hc,EAAMqR,aAAa,8CAExB,CACDvze,IAAK,4BACLP,IAAK,WACH,IAAI25hB,EAEAC,IAAqD,QAAtCD,EAAkB19hB,KAAKmpe,iBAA2C,IAApBu0D,IAA8BA,EAAgBZ,OAC/G,OAAO,EAAIt2D,EAAM1kW,QAAQ9hI,KAAM,4BAA6B29hB,KAE7D,CACDr5hB,IAAK,6BACLP,IAAK,YACH,EAAIyie,EAAMqR,aAAa,mDAExB,CACDvze,IAAK,gBACLP,IAAK,YACH,EAAIyie,EAAMqR,aAAa,sCAExB,CACDvze,IAAK,wBACL5I,MAAO,SAA+BiuJ,EAAOi0Y,EAAar8b,IACxD,EAAIilY,EAAMqR,aAAa,gDAIpB8kD,EAnMyB,GAuMlCxhiB,EAAQg6hB,WAAaA,EAEnBh6hB,EAAQg6hB,WAAaA,EAA0B,SAAU0I,IAvO3D,SAAmB/ld,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAwO/WF,CAAUimd,EAAmBD,GAE7B,IAAIxyQ,EAASrzM,EAAa8ld,GAE1B,SAASA,EAAkBnrf,GACzB,IAAIywE,EAUJ,OARAh2F,EAAgBptB,KAAM89hB,IAEtB16a,EAASioK,EAAOrqR,KAAKhB,KAAM2yC,IACpBorf,eAAiB,CACtBC,SAAU,GACVC,cAAe,GAEjB76a,EAAO86a,eAAiB,EACjB96a,EA+JT,OA5JA3rE,EAAaqmf,EAAmB,CAAC,CAC/Bx5hB,IAAK,6BACLP,IAAK,WACH,IAAIo6hB,GAAY,EAEhB,GAAyB,qBAAdntV,UACTmtV,GAAY,MACP,CACL,IAAI/rhB,EAAI,mCAAmC25I,KAAKilD,UAAUG,YAE/C,OAAN/+L,QAAoB,IAANA,OAAe,EAASA,EAAE,KAAO,KAClD+rhB,GAAY,GAIhB,OAAO,EAAI33D,EAAM1kW,QAAQ9hI,KAAM,6BAA8Bm+hB,KAE9D,CACD75hB,IAAK,wBACL5I,MAAO,SAA+BkpC,GAWpC,IAAI17B,EAAUlJ,KAAK+9hB,eACfx8b,EAAU,CACZtgE,GAAI,sBAAsB31B,OAAOpC,EAAQ+0hB,iBACzC39hB,MAAM,EACNmxe,SAdF,WAIE,KAHA,EAAIjL,EAAMC,SAASllY,EAAQjhG,KAAM,6CACjCihG,EAAQjhG,MAAO,EAER4I,EAAQ80hB,SAASn8hB,OAAS,GAAKqH,EAAQ80hB,SAAS,GAAG19hB,MAAM,CAC9D,IAAI89hB,EAAel1hB,EAAQ80hB,SAASlqhB,QACpC+kC,WAAWulf,EAAax5f,SAAU,KASpCA,SAAUA,GAGZ,OADA17B,EAAQ80hB,SAAS5xhB,KAAKm1F,GACfA,IAER,CACDj9F,IAAK,gBACLP,IAAK,WAKH,OAAO,EAAIyie,EAAM1kW,QAAQ9hI,KAAM,gBAHtBqzM,KAAK,+9CAKf,CACD/uM,IAAK,wBACL5I,MAAO,SAA+BiuJ,EAAOmzY,EAAOv7b,GAClD,SAAS88b,EAAMrjf,EAAMltC,GACnB,OAAOktC,EAAK7yC,WAAW2F,IAAW,GAAKktC,EAAK7yC,WAAW2F,EAAS,IAAM,GAAKktC,EAAK7yC,WAAW2F,EAAS,IAAM,EAAkC,IAA9BktC,EAAK7yC,WAAW2F,EAAS,GAGzI,SAASwwhB,EAAa9whB,EAAGM,EAAQoB,EAAQiK,GAGvC,OAFa3L,EAAEilE,UAAU,EAAG3kE,GAEZqL,EADH3L,EAAEilE,UAAU3kE,EAASoB,GAIpC,IAAIlM,EAAGkB,EAEHkle,EAASppe,KAAKmpe,UAAUljc,cAAc,UAE1Cmjc,EAAO9tZ,MAAQ,EACf8tZ,EAAO73W,OAAS,EAChB,IAAIkwJ,EAAM2nN,EAAO42C,WAAW,MACxBp7Q,EAAS,EAuBTs5R,EAAiB,KAAK5yhB,OAAOyiB,KAAK+xB,OAAOx0C,OAAOtL,KAAKk+hB,kBACrDljf,EAAOh7C,KAAKu+hB,cAIZC,EAAa,WACbC,EAAWJ,EAHfrjf,EAAOsjf,EAAatjf,EADC,IACqBkjf,EAAer8hB,OAAQq8hB,GACvC,IAI1B,IAAKl7hB,EAAI,EAAGkB,EAAKg6hB,EAAer8hB,OAAS,EAAGmB,EAAIkB,EAAIlB,GAAK,EACvDy7hB,EAAWA,EAAWD,EAAaH,EAAMH,EAAgBl7hB,GAAK,EAG5DA,EAAIk7hB,EAAer8hB,SACrB48hB,EAAWA,EAAWD,EAAaH,EAAMH,EAAiB,MAAOl7hB,GAAK,GAGxEg4C,EAAOsjf,EAAatjf,EAZM,GAYqB,GAAG,EAAIwrb,EAAM8Q,UAAUmnD,IACtE,IAAIj9b,EAAM,iCAAiCl2F,OAAOqoM,KAAK34J,GAAO,MAC1D+uG,EAAO,4BAA6Bz+I,OAAO4yhB,EAAgB,UAAW5yhB,OAAOk2F,EAAK,KACtFxhG,KAAKusa,WAAWxiR,GAChB,IAGIojV,EAHA/pP,EAAQ,GAERgqP,EAAanyO,EAA2B6hS,GAG5C,IACE,IAAK1vD,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAAO,CACrD,IAAIylf,EAAO5Y,EAAOzxe,MAClB0nP,EAAMh3O,KAAK25e,EAAK24C,aAElB,MAAOttf,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,IAGb0sK,EAAMh3O,KAAK8xhB,GAEX,IAAIxld,EAAM14E,KAAKmpe,UAAUljc,cAAc,OAEvCyyC,EAAI4iC,MAAM0tP,WAAa,SACvBtwR,EAAI4iC,MAAMhgC,MAAQ5C,EAAI4iC,MAAMiW,OAAS,OACrC74C,EAAI4iC,MAAM2B,SAAW,WACrBvkC,EAAI4iC,MAAMgZ,IAAM57C,EAAI4iC,MAAM/gG,KAAO,MAEjC,IAAK,IAAIi6D,EAAK,EAAGmqd,EAASv7S,EAAO5uK,EAAKmqd,EAAO98hB,OAAQ2yE,IAAM,CACzD,IAAIhmE,EAAOmwhB,EAAOnqd,GAEdqjS,EAAO73W,KAAKmpe,UAAUljc,cAAc,QAExC4xU,EAAK96D,YAAc,KACnB86D,EAAKv8P,MAAM8+J,WAAa5rQ,EACxBkqE,EAAIwkO,YAAY26D,GAGlB73W,KAAKmpe,UAAU1yZ,KAAKymO,YAAYxkO,GA5EhC,SAASkmd,EAAYpwhB,EAAMo2B,GAGzB,KAFAggO,EAEa,GAGX,OAFA,EAAI4hO,EAAMv+c,MAAM,qCAChB2c,IAIF68O,EAAIskO,KAAO,QAAUv3e,EACrBizQ,EAAIo9Q,SAAS,IAAK,EAAG,IACLp9Q,EAAIq9Q,aAAa,EAAG,EAAG,EAAG,GAE5B9jf,KAAK,GAAK,EACtBpW,IAIFiU,WAAW+lf,EAAY98gB,KAAK,KAAMtT,EAAMo2B,IA4D1Cg6f,CAAYV,GAAgB,WAC1Bxld,EAAIxpE,SACJqyF,EAAQkwY,kBAKPqsD,EA/KsC,CAgL7CnB,GAGJ,IAAInE,EAA8B,WAChC,SAASA,EAAeuG,EAAgBp2f,GACtC,IAAIq2f,EAAwBr2f,EAAMg/c,gBAC9BA,OAA4C,IAA1Bq3C,GAA0CA,EAC5DC,EAAwBt2f,EAAMq7e,gBAC9BA,OAA4C,IAA1Bib,GAA2CA,EAC7DC,EAAqBv2f,EAAM66e,aAC3BA,OAAsC,IAAvB0b,GAAwCA,EACvD1Y,EAAuB79e,EAAM69e,qBAC7B2Y,EAAqBx2f,EAAMyvf,aAC3BA,OAAsC,IAAvB+G,EAAgC,KAAOA,EAM1D,IAAK,IAAIn8hB,KAJToqB,EAAgBptB,KAAMw4hB,GAEtBx4hB,KAAKo/hB,eAAiBhhiB,OAAOC,OAAO,MAEtB0giB,EACZ/+hB,KAAKgD,GAAK+7hB,EAAe/7hB,GAG3BhD,KAAK2nf,iBAAsC,IAApBA,EACvB3nf,KAAKgkhB,iBAAsC,IAApBA,EACvBhkhB,KAAKwjhB,cAAgC,IAAjBA,EACpBxjhB,KAAKo1hB,sBAAwB5O,EAC7BxmhB,KAAKo4hB,aAAeA,EAiItB,OA9HA3gf,EAAa+gf,EAAgB,CAAC,CAC5Bl0hB,IAAK,uBACL5I,MAAO,WACL,IAAKsE,KAAKg7C,MAAQh7C,KAAKgkhB,gBACrB,OAAO,KAGT,IAAI6Y,EAEJ,GAAK78hB,KAAKq/hB,YAEH,CACL,IAAIjtN,EAAM,CACRmN,OAAQv/U,KAAKq/hB,YAAY9ia,YAGvBv8H,KAAKq/hB,YAAYC,cACnBltN,EAAI92N,MAAQ,WAAWhwG,OAAOtL,KAAKq/hB,YAAYC,YAAa,QAG9DzC,EAAiB,IAAI0C,SAASv/hB,KAAKq/hB,YAAYjlR,WAAYp6Q,KAAKg7C,KAAMo3R,QAVtEyqN,EAAiB,IAAI0C,SAASv/hB,KAAK0+hB,WAAY1+hB,KAAKg7C,KAAM,IAiB5D,OAJIh7C,KAAKo4hB,cACPp4hB,KAAKo4hB,aAAaE,aAAat4hB,MAG1B68hB,IAER,CACDv4hB,IAAK,qBACL5I,MAAO,WACL,IAAKsE,KAAKg7C,MAAQh7C,KAAKgkhB,gBACrB,OAAO,KAGT,IAEIj6X,EAFA/uG,GAAO,EAAIwrb,EAAMmO,eAAe30e,KAAKg7C,MACrCwmD,EAAM,YAAYl2F,OAAOtL,KAAKw/hB,SAAU,YAAYl0hB,OAAOqoM,KAAK34J,GAAO,MAG3E,GAAKh7C,KAAKq/hB,YAEH,CACL,IAAIjtN,EAAM,gBAAgB9mU,OAAOtL,KAAKq/hB,YAAY9ia,WAAY,KAE1Dv8H,KAAKq/hB,YAAYC,cACnBltN,GAAO,uBAAuB9mU,OAAOtL,KAAKq/hB,YAAYC,YAAa,SAGrEv1Y,EAAO,4BAA6Bz+I,OAAOtL,KAAKq/hB,YAAYjlR,WAAY,MAAO9uQ,OAAO8mU,EAAK,QAAQ9mU,OAAOk2F,EAAK,UAR/GuoD,EAAO,4BAA6Bz+I,OAAOtL,KAAK0+hB,WAAY,UAAWpzhB,OAAOk2F,EAAK,KAerF,OAJIxhG,KAAKo4hB,cACPp4hB,KAAKo4hB,aAAaE,aAAat4hB,KAAMwhG,GAGhCuoD,IAER,CACDzlJ,IAAK,mBACL5I,MAAO,SAA0BsuhB,EAAMyV,GACrC,QAAuC3jiB,IAAnCkE,KAAKo/hB,eAAeK,GACtB,OAAOz/hB,KAAKo/hB,eAAeK,GAG7B,IAAIC,EAEJ,IACEA,EAAO1V,EAAKjmhB,IAAI/D,KAAK0+hB,WAAa,SAAWe,GAC7C,MAAO3uN,GACP,IAAK9wU,KAAKwjhB,aACR,MAAM1yM,EAQR,OALA9wU,KAAKo1hB,sBAAsB,CACzB8D,UAAW1yD,EAAMgM,qBAAqBoU,oBAGxC,EAAIpgB,EAAMv+c,MAAM,2CAA4C3c,OAAOwlU,EAAI,OAChE9wU,KAAKo/hB,eAAeK,GAAa,SAAU55hB,EAAG9J,KAGvD,GAAIiE,KAAK2nf,iBAAmBnhB,EAAM2M,sBAAsBz3e,MAAO,CAC7D,IAGIsrhB,EAHA2Y,EAAQ,GAER1Y,EAAahsR,EAA2BykS,GAG5C,IACE,IAAKzY,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MAAO,CACrD,IAAIwnC,EAAUk/e,EAAOtrhB,MACjBsvB,OAAwBlvB,IAAjBgsC,EAAQ9c,KAAqB8c,EAAQ9c,KAAKvJ,KAAK,KAAO,GACjEk+gB,EAAMvzhB,KAAK,KAAM07B,EAAQ83f,IAAK,IAAK50gB,EAAM,SAE3C,MAAOomB,GACP61e,EAAW7+gB,EAAEgpC,GAPf,QASE61e,EAAWvwc,IAGb,OAAO12E,KAAKo/hB,eAAeK,GAAa,IAAIpwX,SAAS,IAAK,OAAQswX,EAAMl+gB,KAAK,KAG/E,OAAOzhB,KAAKo/hB,eAAeK,GAAa,SAAU55hB,EAAG9J,GACnD,IACImrhB,EADAC,EAAalsR,EAA2BykS,GAG5C,IACE,IAAKvY,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MAAO,CACrD,IAAIu/hB,EAAW3Y,EAAOxrhB,MAED,UAAjBmkiB,EAASD,MACXC,EAAS70gB,KAAO,CAACjvB,GAAOA,IAG1B8J,EAAEg6hB,EAASD,KAAK33hB,MAAMpC,EAAGg6hB,EAAS70gB,OAEpC,MAAOomB,GACP+1e,EAAW/+gB,EAAEgpC,GAXf,QAaE+1e,EAAWzwc,UAMZ8hd,EAzJyB,GA4JlCr9hB,EAAQq9hB,eAAiBA,GAIlB,SAAC9yD,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ8nhB,4BAA8B9nhB,EAAQ4nhB,kBAAoB5nhB,EAAQ6nhB,2BAAwB,EAElG,IAAIv6C,EAAgB9C,EAAoB,KAEpCijB,EAAWjjB,EAAoB,GAE/Ba,EAAQb,EAAoB,GAEhC,SAASjtX,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,SAASuqD,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,SAASinB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,IAAI0ghB,EAAoB,SAASA,IAC/B31f,EAAgBptB,KAAM+ihB,IAEtB,EAAIv8C,EAAMqR,aAAa,uCAGzB18e,EAAQ4nhB,kBAAoBA,EAE5B,IAAIC,EAAwB,SAASA,IACnC51f,EAAgBptB,KAAMgjhB,IAEtB,EAAIx8C,EAAMqR,aAAa,2CAGzB18e,EAAQ6nhB,sBAAwBA,EAEhC,IAAIC,EAA8B,SAASA,IACzC71f,EAAgBptB,KAAMijhB,IAEtB,EAAIz8C,EAAMqR,aAAa,iDAKzB,GAFA18e,EAAQ8nhB,4BAA8BA,EAElCr6B,EAASE,SAAU,CACrB,IAAIj1E,EAAY,SAAmBryU,GACjC,OAAO,IAAIviD,SAAQ,SAAUC,EAASi3B,GAC3B/6E,oBAAQ,MAEd0kiB,SAASt+b,GAAK,SAAUrzF,EAAO6sC,IAC5B7sC,GAAU6sC,EAKdkE,EAAQ,IAAIs2G,WAAWx6G,IAJrBm7B,EAAO,IAAIvuE,MAAMuG,WASzBhT,EAAQ4nhB,kBAAoBA,EAAiC,SAAU95C,GACrEpxZ,EAAUkrc,EAAmB95C,GAE7B,IAAI59M,EAASrzM,EAAa+qc,GAE1B,SAASA,IAGP,OAFA31f,EAAgBptB,KAAM+ihB,GAEf13P,EAAOpjR,MAAMjI,KAAM0D,WAY5B,OATA+zC,EAAasre,EAAmB,CAAC,CAC/Bz+gB,IAAK,gBACL5I,MAAO,SAAuB4/E,EAAOi2C,GAGnC,OAFan2H,oBAAQ,MAEP2kiB,aAAazkd,EAAOi2C,OAI/BwxZ,EApBoD,CAqB3Dt6C,EAAcY,mBAEhBlue,EAAQ6nhB,sBAAwBA,EAAqC,SAAU14C,GAC7EzyZ,EAAUmrc,EAAuB14C,GAEjC,IAAIC,EAAUvyZ,EAAagrc,GAE3B,SAASA,IAGP,OAFA51f,EAAgBptB,KAAMgjhB,GAEfz4C,EAAQtie,MAAMjI,KAAM0D,WAe7B,OAZA+zC,EAAaure,EAAuB,CAAC,CACnC1+gB,IAAK,aACL5I,MAAO,SAAoB8lG,EAAKgpY,GAC9B,OAAO32D,EAAUryU,GAAKjrB,MAAK,SAAUv7B,GACnC,MAAO,CACL0vb,SAAU1vb,EACVwvb,gBAAiBA,UAMlBw4C,EAvB4D,CAwBnEv6C,EAAckC,uBAEhBxve,EAAQ8nhB,4BAA8BA,EAA2C,SAAUr4C,GACzF/yZ,EAAUorc,EAA6Br4C,GAEvC,IAAIC,EAAU7yZ,EAAairc,GAE3B,SAASA,IAGP,OAFA71f,EAAgBptB,KAAMijhB,GAEfp4C,EAAQ5ie,MAAMjI,KAAM0D,WAU7B,OAPA+zC,EAAawre,EAA6B,CAAC,CACzC3+gB,IAAK,aACL5I,MAAO,SAAoB8lG,GACzB,OAAOqyU,EAAUryU,OAIdyhb,EAlBwE,CAmB/Ex6C,EAAcqC,+BAKX,SAACpF,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ26hB,uBAAoB,EAE5B,IAAItvD,EAAQb,EAAoB,GAEhC,SAASxyb,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GARzbE,CAAsBtke,EAAK7K,IAI5F,SAAqCmD,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAJ3ME,CAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAMzI,SAASzJ,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAQhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,IAAIm9a,EAAiC,WACnC,SAASA,KAPX,SAAyBzogB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAQ5G+qB,CAAgBptB,KAAM81hB,GAEtB91hB,KAAKggiB,SAAW,IAAIpthB,IACpB5S,KAAKigiB,WAAalygB,KAAK+xB,MACvB9/C,KAAKkgiB,WAAY,EACjBlgiB,KAAKmgiB,cAAgB,KACrBngiB,KAAKogiB,gBAAkB,KAV3B,IAAsB9ygB,EAAasrF,EAAYC,EAkG7C,OAlGoBvrF,EAaPwogB,GAboBl9a,EAaD,CAAC,CAC/Bt0G,IAAK,WACL5I,MAAO,SAAkB4I,EAAKi5C,GAC5B,IAAI7hD,EAAQsE,KAAKggiB,SAASj8hB,IAAIO,GAE9B,YAAcxI,IAAVJ,EACK6hD,EAGFn/C,OAAO+8C,OAAOoC,EAAc7hD,KAEpC,CACD4I,IAAK,WACL5I,MAAO,SAAkB4I,EAAK5I,GAC5B,IAAIoL,EAAM9G,KAAKggiB,SAASj8hB,IAAIO,GAExBqpS,GAAW,EAEf,QAAY7xS,IAARgL,EACF,IAAK,IAAI0tE,EAAK,EAAG6rd,EAAkBjiiB,OAAOuL,QAAQjO,GAAQ84E,EAAK6rd,EAAgBx+hB,OAAQ2yE,IAAM,CAC3F,IAAI8rd,EAAqBntf,EAAektf,EAAgB7rd,GAAK,GACzDvxE,EAAQq9hB,EAAmB,GAC3BrqhB,EAAMqqhB,EAAmB,GAEzBx5hB,EAAI7D,KAAWgT,IACjB03R,GAAW,EACX7mS,EAAI7D,GAASgT,QAIjB03R,GAAW,EAEX3tS,KAAKggiB,SAASt4hB,IAAIpD,EAAK5I,GAGrBiyS,IACF3tS,KAAKigiB,WAAalygB,KAAK+xB,MAEvB9/C,KAAKugiB,kBAGR,CACDj8hB,IAAK,SACL5I,MAAO,WACL,OAAOsE,KAAKggiB,SAASjkiB,KAAO,GAAI,EAAIyqe,EAAMsQ,eAAe92e,KAAKggiB,UAAY,OAE3E,CACD17hB,IAAK,OACLP,IAAK,WACH,OAAO/D,KAAKggiB,SAASjkiB,OAEtB,CACDuI,IAAK,eACL5I,MAAO,WACAsE,KAAKkgiB,YACRlgiB,KAAKkgiB,WAAY,EAEiB,oBAAvBlgiB,KAAKmgiB,eACdngiB,KAAKmgiB,mBAIV,CACD77hB,IAAK,gBACL5I,MAAO,WACDsE,KAAKkgiB,YACPlgiB,KAAKkgiB,WAAY,EAEmB,oBAAzBlgiB,KAAKogiB,iBACdpgiB,KAAKogiB,qBAIV,CACD97hB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKggiB,SAASjkiB,KAAO,EAAIiE,KAAKggiB,SAAW,OAEjD,CACD17hB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKigiB,WAAWh/hB,gBA9FiDy3G,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAkG3Ki9a,EAhG4B,GAmGrC36hB,EAAQ26hB,kBAAoBA,GAIrB,SAACpwD,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ8giB,oBAAiB,EAEzB,IAAIz1D,EAAQb,EAAoB,GAE5B66D,EAAkB76D,EAAoB,KAEtC67C,EAAiB77C,EAAoB,GAEzC,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX,SAASm0P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,EAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAEj+B,SAAShkB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,SAAS6lB,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GARzbE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAIzI,SAASxJ,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAMhL,IAEIy9S,EAAiB,KAKjBC,EAAoB,GAsIxB,SAASC,EAA2Bl/Q,GAClC,IAAIA,EAAIm/Q,oBAAR,CAIAn/Q,EAAIo/Q,cAAgBp/Q,EAAIm/N,KACxBn/N,EAAIq/Q,iBAAmBr/Q,EAAIo/N,QAC3Bp/N,EAAIs/Q,gBAAkBt/Q,EAAI8vO,OAC1B9vO,EAAIu/Q,eAAiBv/Q,EAAIoqC,MACzBpqC,EAAIw/Q,mBAAqBx/Q,EAAI/7H,UAC7B+7H,EAAIy/Q,mBAAqBz/Q,EAAIplJ,UAC7BolJ,EAAI0/Q,sBAAwB1/Q,EAAI2/Q,aAChC3/Q,EAAI4/Q,wBAA0B5/Q,EAAI6/Q,eAClC7/Q,EAAI8/Q,iBAAmB9/Q,EAAI8/Q,kBAAoB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/D9/Q,EAAI+/Q,gBAAkB,GAEtB,IACE,IAAIvP,EAAO7zhB,OAAO0uB,yBAAyB1uB,OAAO2qB,eAAe04P,GAAM,aACvEA,EAAIggR,cAAgBxP,EAAKvqhB,IACzB+5Q,EAAIigR,cAAgBzP,EAAKluhB,IACzB3F,OAAOyJ,eAAe45Q,EAAK,YAAa,CACtC/5Q,IAAK,SAAsB4zE,GACzBt7E,KAAKyhiB,cA3JgB,SA2JFnmd,IAErBv3E,IAAK,WACH,OAAO/D,KAAK0hiB,mBAGhB,MAAO3jhB,IAET3f,OAAOyJ,eAAe45Q,EAAK,sBAAuB,CAChD19Q,IAAK,WACH,OAAO/D,KAAKuhiB,oBAGhBnjiB,OAAOyJ,eAAe45Q,EAAK,6BAA8B,CACvD19Q,IAAK,WACH,IAAI49hB,EAAwBxuf,EAAenzC,KAAKuhiB,iBAAkB,GAC9D57hB,EAAIg8hB,EAAsB,GAC1B/7hB,EAAI+7hB,EAAsB,GAC1B97hB,EAAI87hB,EAAsB,GAC1B77hB,EAAI67hB,EAAsB,GAC1Bv5hB,EAAIu5hB,EAAsB,GAC1Bjrd,EAAIird,EAAsB,GAE1BC,EAAQj8hB,EAAIG,EAAIF,EAAIC,EACpBg8hB,EAAQj8hB,EAAIC,EAAIF,EAAIG,EACxB,MAAO,CAACA,EAAI87hB,EAAOh8hB,EAAIi8hB,EAAOh8hB,EAAIg8hB,EAAOl8hB,EAAIi8hB,GAAQ97hB,EAAIsC,EAAIvC,EAAI6wE,GAAKmrd,GAAQj8hB,EAAIwC,EAAIzC,EAAI+wE,GAAKkrd,MAInGngR,EAAIm/N,KAAO,WACT,IAAIkhD,EAAM9hiB,KAAKuhiB,iBAEfvhiB,KAAKwhiB,gBAAgBp1hB,KAAK01hB,GAE1B9hiB,KAAKuhiB,iBAAmBO,EAAIhyhB,MAAM,EAAG,GAErC9P,KAAK6giB,iBAGPp/Q,EAAIo/N,QAAU,WACZ,IAAIvpe,EAAOtX,KAAKwhiB,gBAAgBn1hB,MAE5BiL,IACFtX,KAAKuhiB,iBAAmBjqhB,EAExBtX,KAAK8giB,qBAITr/Q,EAAI/7H,UAAY,SAAsB7tI,EAAG2zB,GACvC,IAAIp5B,EAAIpS,KAAKuhiB,iBACbnvhB,EAAE,GAAKA,EAAE,GAAKyF,EAAIzF,EAAE,GAAKo5B,EAAIp5B,EAAE,GAC/BA,EAAE,GAAKA,EAAE,GAAKyF,EAAIzF,EAAE,GAAKo5B,EAAIp5B,EAAE,GAE/BpS,KAAKihiB,mBAAmBpphB,EAAG2zB,IAG7Bi2O,EAAIoqC,MAAQ,SAAkBh0S,EAAG2zB,GAC/B,IAAIp5B,EAAIpS,KAAKuhiB,iBACbnvhB,EAAE,IAAMyF,EACRzF,EAAE,IAAMyF,EACRzF,EAAE,IAAMo5B,EACRp5B,EAAE,IAAMo5B,EAERxrC,KAAKghiB,eAAenphB,EAAG2zB,IAGzBi2O,EAAIplJ,UAAY,SAAsB12H,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACnD,IAAItkE,EAAIpS,KAAKuhiB,iBACbvhiB,KAAKuhiB,iBAAmB,CAACnvhB,EAAE,GAAKzM,EAAIyM,EAAE,GAAKxM,EAAGwM,EAAE,GAAKzM,EAAIyM,EAAE,GAAKxM,EAAGwM,EAAE,GAAKvM,EAAIuM,EAAE,GAAKtM,EAAGsM,EAAE,GAAKvM,EAAIuM,EAAE,GAAKtM,EAAGsM,EAAE,GAAKhK,EAAIgK,EAAE,GAAKskE,EAAItkE,EAAE,GAAIA,EAAE,GAAKhK,EAAIgK,EAAE,GAAKskE,EAAItkE,EAAE,IAEjKqvQ,EAAIy/Q,mBAAmBv7hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,IAGxC+qM,EAAI2/Q,aAAe,SAAyBz7hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACzD12E,KAAKuhiB,iBAAmB,CAAC57hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAExC+qM,EAAI0/Q,sBAAsBx7hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,IAG3C+qM,EAAI6/Q,eAAiB,WACnBthiB,KAAKuhiB,iBAAmB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAExC9/Q,EAAI4/Q,2BAGN5/Q,EAAI8vO,OAAS,SAAmBoB,GAC9B,IAAIovC,EAAWhliB,KAAKm1f,IAAIS,GACpBqvC,EAAWjliB,KAAKq1f,IAAIO,GACpBvgf,EAAIpS,KAAKuhiB,iBACbvhiB,KAAKuhiB,iBAAmB,CAACnvhB,EAAE,GAAK2vhB,EAAW3vhB,EAAE,GAAK4vhB,EAAU5vhB,EAAE,GAAK2vhB,EAAW3vhB,EAAE,GAAK4vhB,EAAU5vhB,EAAE,IAAM4vhB,EAAW5vhB,EAAE,GAAK2vhB,EAAU3vhB,EAAE,IAAM4vhB,EAAW5vhB,EAAE,GAAK2vhB,EAAU3vhB,EAAE,GAAIA,EAAE,IAE/KpS,KAAK+giB,gBAAgBpuC,KAIzB,IAAIsvC,EAA8B,WAChC,SAASA,EAAe5V,GACtBj/f,EAAgBptB,KAAMiiiB,GAEtBjiiB,KAAKqshB,cAAgBA,EACrBrshB,KAAK+C,MAAQ3E,OAAOC,OAAO,MAkC7B,OA/BAo5C,EAAawqf,EAAgB,CAAC,CAC5B39hB,IAAK,YACL5I,MAAO,SAAmBulC,EAAIq6C,EAAOi2C,EAAQ2wa,GAC3C,IAAIC,EAeJ,YAbuBrmiB,IAAnBkE,KAAK+C,MAAMk+B,IACbkhgB,EAAcniiB,KAAK+C,MAAMk+B,GACzBjhC,KAAKqshB,cAAc1hd,MAAMw3d,EAAa7md,EAAOi2C,GAC7C4wa,EAAYj5hB,QAAQk4hB,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,KAEhDe,EAAcniiB,KAAKqshB,cAAchuhB,OAAOi9E,EAAOi2C,GAC/CvxH,KAAK+C,MAAMk+B,GAAMkhgB,GAGfD,GACFvB,EAA2BwB,EAAYj5hB,SAGlCi5hB,IAER,CACD79hB,IAAK,QACL5I,MAAO,WACL,IAAK,IAAIulC,KAAMjhC,KAAK+C,MAAO,CACzB,IAAIo/hB,EAAcniiB,KAAK+C,MAAMk+B,GAC7BjhC,KAAKqshB,cAAc7hd,QAAQ23d,UACpBniiB,KAAK+C,MAAMk+B,QAKjBghgB,EAvCyB,GAuN9BG,EAAgC,WAClC,SAASA,EAAiB9md,EAAOi2C,GAC/BnkG,EAAgBptB,KAAMoiiB,GAEtBpiiB,KAAKqiiB,cAAe,EACpBriiB,KAAKmnH,SAAW,EAChBnnH,KAAKsiiB,cAAgB,EACrBtiiB,KAAKuiiB,WAAa/7D,EAAM8M,gBACxBtze,KAAKwiiB,gBAAkB,EACvBxiiB,KAAKyiiB,WAAaj8D,EAAMiN,qBACxBzze,KAAKkxL,QAAU,EACflxL,KAAK6X,EAAI,EACT7X,KAAKwrC,EAAI,EACTxrC,KAAK0iiB,MAAQ,EACb1iiB,KAAK2iiB,MAAQ,EACb3iiB,KAAK4iiB,YAAc,EACnB5iiB,KAAK6iiB,YAAc,EACnB7iiB,KAAK8iiB,WAAa,EAClB9iiB,KAAK+iiB,kBAAoBv8D,EAAMiM,kBAAkBwG,KACjDj5e,KAAKgjiB,SAAW,EAChBhjiB,KAAKijiB,UAAY,UACjBjjiB,KAAKkjiB,YAAc,UACnBljiB,KAAKmjiB,aAAc,EACnBnjiB,KAAKojiB,UAAY,EACjBpjiB,KAAKqjiB,YAAc,EACnBrjiB,KAAKsjiB,UAAY,EACjBtjiB,KAAKujiB,YAAc,KACnBvjiB,KAAKwjiB,aAAe,KACpBxjiB,KAAKyjiB,uBAAuB,CAAC,EAAG,EAAGnod,EAAOi2C,IAuF5C,OApFA95E,EAAa2qf,EAAkB,CAAC,CAC9B99hB,IAAK,QACL5I,MAAO,WACL,IAAI8+C,EAAQp8C,OAAOC,OAAO2B,MAE1B,OADAw6C,EAAMkpf,QAAU1jiB,KAAK0jiB,QAAQ5zhB,QACtB0qC,IAER,CACDl2C,IAAK,kBACL5I,MAAO,SAAyBmc,EAAG2zB,GACjCxrC,KAAK6X,EAAIA,EACT7X,KAAKwrC,EAAIA,IAEV,CACDlnC,IAAK,mBACL5I,MAAO,SAA0B2gI,EAAWxkH,EAAG2zB,GAC7C,IAEIm4f,EAAwBxwf,EAFDqzb,EAAM8F,KAAKC,eAAe,CAAC10d,EAAG2zB,GAAI6wF,GAEI,GAEjExkH,EAAI8rhB,EAAsB,GAC1Bn4f,EAAIm4f,EAAsB,GAC1B3jiB,KAAK4jiB,KAAO7miB,KAAKE,IAAI+C,KAAK4jiB,KAAM/rhB,GAChC7X,KAAK6jiB,KAAO9miB,KAAKE,IAAI+C,KAAK6jiB,KAAMr4f,GAChCxrC,KAAK8jiB,KAAO/miB,KAAKC,IAAIgD,KAAK8jiB,KAAMjshB,GAChC7X,KAAK+jiB,KAAOhniB,KAAKC,IAAIgD,KAAK+jiB,KAAMv4f,KAEjC,CACDlnC,IAAK,wBACL5I,MAAO,SAA+B2gI,EAAW8rX,EAAIC,EAAIlwO,EAAIC,EAAIC,EAAIC,EAAIgwO,EAAIC,GAC3E,IAAIjlN,EAAMmjM,EAAM8F,KAAK03D,kBAAkB77C,EAAIC,EAAIlwO,EAAIC,EAAIC,EAAIC,EAAIgwO,EAAIC,GAEnEtof,KAAKikiB,iBAAiB5na,EAAWgnK,EAAI,GAAIA,EAAI,IAC7CrjS,KAAKikiB,iBAAiB5na,EAAWgnK,EAAI,GAAIA,EAAI,MAE9C,CACD/+R,IAAK,qBACL5I,MAAO,WACL,IAAIwoiB,EAAWxgiB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK88hB,EAAgB2D,SAASlrD,KACxG58W,EAAY34H,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAChF2/R,EAAM,CAACrjS,KAAK4jiB,KAAM5jiB,KAAK6jiB,KAAM7jiB,KAAK8jiB,KAAM9jiB,KAAK+jiB,MAEjD,GAAIG,IAAa1D,EAAgB2D,SAASjrD,OAAQ,CAC3C78W,IACH,EAAImqW,EAAMqR,aAAa,+CAGzB,IAAIhsL,EAAQ26K,EAAM8F,KAAK83D,8BAA8B/na,GAEjDgoa,EAAax4O,EAAM,GAAK7rT,KAAKsjiB,UAAY,EACzCgB,EAAaz4O,EAAM,GAAK7rT,KAAKsjiB,UAAY,EAC7CjgQ,EAAI,IAAMghQ,EACVhhQ,EAAI,IAAMihQ,EACVjhQ,EAAI,IAAMghQ,EACVhhQ,EAAI,IAAMihQ,EAGZ,OAAOjhQ,IAER,CACD/+R,IAAK,qBACL5I,MAAO,WACL,IAAIojB,EAAY0nd,EAAM8F,KAAKxtd,UAAU9e,KAAK0jiB,QAAS1jiB,KAAKukiB,sBAExDvkiB,KAAKyjiB,uBAAuB3khB,GAAa,CAAC,EAAG,EAAG,EAAG,MAEpD,CACDxa,IAAK,yBACL5I,MAAO,SAAgC2nS,GACrCrjS,KAAK0jiB,QAAUrgQ,EACfrjS,KAAK4jiB,KAAO9miB,IACZkD,KAAK6jiB,KAAO/miB,IACZkD,KAAK8jiB,KAAO,EACZ9jiB,KAAK+jiB,KAAO,IAEb,CACDz/hB,IAAK,4BACL5I,MAAO,WACL,IAAIwoiB,EAAWxgiB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK88hB,EAAgB2D,SAASlrD,KACxG58W,EAAY34H,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KACpF,OAAO8ie,EAAM8F,KAAKxtd,UAAU9e,KAAK0jiB,QAAS1jiB,KAAKukiB,mBAAmBL,EAAU7na,QAIzE+la,EAnH2B,GAsHpC,SAASoC,EAAmB/iR,EAAKwoD,GAC/B,IAAIu5N,EAAe9/hB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAEvF,GAAyB,qBAAd+giB,WAA6Bx6N,aAAmBw6N,UACzDhjR,EAAIijR,aAAaz6N,EAAS,EAAG,OAD/B,CAKA,IAOI06N,EAGA3hiB,EAAGw0E,EAAGotd,EAAiBC,EACvBC,EAAgBC,EAAkBC,EAAiBC,EAXnD1za,EAAS04M,EAAQ14M,OACjBj2C,EAAQ2uP,EAAQ3uP,MAChB4pd,EAAqB3za,EAASmva,EAC9ByE,GAAc5za,EAAS2za,GAAsBxE,EAC7C0E,EAAqC,IAAvBF,EAA2BC,EAAaA,EAAa,EACnEE,EAAe5jR,EAAI6jR,gBAAgBhqd,EAAOold,GAC1C6E,EAAS,EAET/+a,EAAMyjN,EAAQjvR,KACdksd,EAAOm+B,EAAarqf,KAIxB,GAAIwof,EACF,OAAQA,EAAa3hiB,QACnB,KAAK,EACHijiB,EAAiBtB,EAAa,GAC9BuB,EAAmBvB,EAAa,GAChCwB,EAAkBxB,EAAa,GAC/ByB,EAAkBzB,EAAa,GAC/B,MAEF,KAAK,EACHsB,EAAiBtB,EAAa,GAC9BuB,EAAmBvB,EAAa,GAChCwB,EAAkBxB,EAAa,GAC/ByB,EAAkBzB,EAAa,GAKrC,GAAIv5N,EAAQm3E,OAASolF,EAAM6M,UAAUsG,eAAgB,CACnD,IAAI6rD,EAAYh/a,EAAI0/C,WAChBu/X,EAAS,IAAI/uY,YAAYwwW,EAAKh0W,OAAQ,EAAGg0W,EAAKhhW,YAAc,GAC5Dw/X,EAAmBD,EAAO5jiB,OAC1B8jiB,EAAcrqd,EAAQ,GAAK,EAC3BwtD,EAAQ,WACRljB,EAAQ4gX,EAAM0M,qBAAqBx3e,MAAQ,WAAa,IAE5D,GAAIupiB,GACyB,MAAvBA,EAAgB,IAAyC,IAA1BA,EAAgB,KAAa,CAC9D,IAAI5+f,EAAO,CAACu/E,EAAOkjB,GACnBA,EAAQziG,EAAK,GACbu/E,EAAQv/E,EAAK,GAIjB,IAAKrjC,EAAI,EAAGA,EAAIoiiB,EAAapiiB,IAAK,CAIhC,IAHA4hiB,EAAkB5hiB,EAAImiiB,EAAazE,EAAoBwE,EACvDP,EAAU,EAELntd,EAAI,EAAGA,EAAIotd,EAAiBptd,IAAK,CAQpC,IAPA,IAAIoud,EAAUJ,EAAYD,EACtBpliB,EAAI,EACJ0liB,EAAOD,EAAUD,EAAcrqd,EAAkB,EAAVsqd,EAAc,EACrDE,GAAsB,EAAPD,EACfvsR,EAAO,EACPysR,EAAU,EAEP5liB,EAAI2liB,EAAc3liB,GAAK,EAC5B4liB,EAAUv/a,EAAI++a,KACdE,EAAOd,KAAuB,IAAVoB,EAAgBj9Z,EAAQljB,EAC5C6/a,EAAOd,KAAuB,GAAVoB,EAAej9Z,EAAQljB,EAC3C6/a,EAAOd,KAAuB,GAAVoB,EAAej9Z,EAAQljB,EAC3C6/a,EAAOd,KAAuB,GAAVoB,EAAej9Z,EAAQljB,EAC3C6/a,EAAOd,KAAuB,EAAVoB,EAAcj9Z,EAAQljB,EAC1C6/a,EAAOd,KAAuB,EAAVoB,EAAcj9Z,EAAQljB,EAC1C6/a,EAAOd,KAAuB,EAAVoB,EAAcj9Z,EAAQljB,EAC1C6/a,EAAOd,KAAuB,EAAVoB,EAAcj9Z,EAAQljB,EAG5C,KAAOzlH,EAAI0liB,EAAM1liB,IACF,IAATm5Q,IACFysR,EAAUv/a,EAAI++a,KACdjsR,EAAO,KAGTmsR,EAAOd,KAAaoB,EAAUzsR,EAAOxwI,EAAQljB,EAC7C0zJ,IAAS,EAIb,KAAOqrR,EAAUe,GACfD,EAAOd,KAAa,EAGtBljR,EAAIijR,aAAaW,EAAc,EAAGriiB,EAAI09hB,SAEnC,GAAIz2N,EAAQm3E,OAASolF,EAAM6M,UAAUwG,WAAY,CACtD,IAAImsD,KAAqBlB,GAAkBC,GAAoBC,GAI/D,IAHAxtd,EAAI,EACJqtd,EAAmBvpd,EAAQold,EAAoB,EAE1C19hB,EAAI,EAAGA,EAAImiiB,EAAYniiB,IAAK,CAI/B,GAHAkkgB,EAAKx/f,IAAI8+G,EAAIuuX,SAASwwD,EAAQA,EAASV,IACvCU,GAAUV,EAENmB,EACF,IAAK,IAAIC,EAAK,EAAGA,EAAKpB,EAAkBoB,GAAM,EACxCnB,IACF59B,EAAK++B,EAAK,GAAKnB,EAAe59B,EAAK++B,EAAK,KAGtClB,IACF79B,EAAK++B,EAAK,GAAKlB,EAAiB79B,EAAK++B,EAAK,KAGxCjB,IACF99B,EAAK++B,EAAK,GAAKjB,EAAgB99B,EAAK++B,EAAK,KAK/CxkR,EAAIijR,aAAaW,EAAc,EAAG7td,GAClCA,GAAKkpd,EAGP,GAAI19hB,EAAIoiiB,EAAa,CAInB,GAHAP,EAAmBvpd,EAAQ4pd,EAAqB,EAChDh+B,EAAKx/f,IAAI8+G,EAAIuuX,SAASwwD,EAAQA,EAASV,IAEnCmB,EACF,IAAK,IAAIE,EAAM,EAAGA,EAAMrB,EAAkBqB,GAAO,EAC3CpB,IACF59B,EAAKg/B,EAAM,GAAKpB,EAAe59B,EAAKg/B,EAAM,KAGxCnB,IACF79B,EAAKg/B,EAAM,GAAKnB,EAAiB79B,EAAKg/B,EAAM,KAG1ClB,IACF99B,EAAKg/B,EAAM,GAAKlB,EAAgB99B,EAAKg/B,EAAM,KAKjDzkR,EAAIijR,aAAaW,EAAc,EAAG7td,QAE/B,IAAIyyP,EAAQm3E,OAASolF,EAAM6M,UAAUuG,UAwC1C,MAAM,IAAIhye,MAAM,mBAAmB0D,OAAO2+T,EAAQm3E,OAvClD,IAAI+kJ,KAAsBrB,GAAkBC,GAAoBC,GAKhE,IAFAH,EAAmBvpd,GADnBspd,EAAkBlE,GAGb19hB,EAAI,EAAGA,EAAIoiiB,EAAapiiB,IAAK,CAQhC,IAPIA,GAAKmiiB,IAEPN,EAAmBvpd,GADnBspd,EAAkBM,IAIpBP,EAAU,EAELntd,EAAIqtd,EAAkBrtd,KACzB0vb,EAAKy9B,KAAan+a,EAAI++a,KACtBr+B,EAAKy9B,KAAan+a,EAAI++a,KACtBr+B,EAAKy9B,KAAan+a,EAAI++a,KACtBr+B,EAAKy9B,KAAa,IAGpB,GAAIwB,EACF,IAAK,IAAIC,EAAM,EAAGA,EAAMzB,EAASyB,GAAO,EAClCtB,IACF59B,EAAKk/B,EAAM,GAAKtB,EAAe59B,EAAKk/B,EAAM,KAGxCrB,IACF79B,EAAKk/B,EAAM,GAAKrB,EAAiB79B,EAAKk/B,EAAM,KAG1CpB,IACF99B,EAAKk/B,EAAM,GAAKpB,EAAgB99B,EAAKk/B,EAAM,KAKjD3kR,EAAIijR,aAAaW,EAAc,EAAGriiB,EAAI09hB,MAO5C,SAAS2F,EAAmB5kR,EAAKwoD,GAW/B,IAVA,IAAI14M,EAAS04M,EAAQ14M,OACjBj2C,EAAQ2uP,EAAQ3uP,MAChB4pd,EAAqB3za,EAASmva,EAC9ByE,GAAc5za,EAAS2za,GAAsBxE,EAC7C0E,EAAqC,IAAvBF,EAA2BC,EAAaA,EAAa,EACnEE,EAAe5jR,EAAI6jR,gBAAgBhqd,EAAOold,GAC1C6E,EAAS,EACT/+a,EAAMyjN,EAAQjvR,KACdksd,EAAOm+B,EAAarqf,KAEfh4C,EAAI,EAAGA,EAAIoiiB,EAAapiiB,IAAK,CAIpC,IAHA,IAAI4hiB,EAAkB5hiB,EAAImiiB,EAAazE,EAAoBwE,EACvDP,EAAU,EAELntd,EAAI,EAAGA,EAAIotd,EAAiBptd,IAInC,IAHA,IAAI8ud,OAAO,EACPhtR,EAAO,EAEFn5Q,EAAI,EAAGA,EAAIm7E,EAAOn7E,IACpBm5Q,IACHgtR,EAAO9/a,EAAI++a,KACXjsR,EAAO,KAGT4tP,EAAKy9B,GAAW2B,EAAOhtR,EAAO,EAAI,IAClCqrR,GAAW,EACXrrR,IAAS,EAIbmI,EAAIijR,aAAaW,EAAc,EAAGriiB,EAAI09hB,IAI1C,SAAS6F,EAAaC,EAAWC,GAG/B,IAFA,IAAI9vW,EAAa,CAAC,cAAe,YAAa,WAAY,cAAe,YAAa,UAAW,WAAY,aAAc,2BAA4B,QAE9I3zL,EAAI,EAAGkB,EAAKyyL,EAAW90L,OAAQmB,EAAIkB,EAAIlB,IAAK,CACnD,IAAIi/K,EAAW0U,EAAW3zL,QAEElH,IAAxB0qiB,EAAUvkX,KACZwkX,EAAQxkX,GAAYukX,EAAUvkX,SAIJnmL,IAA1B0qiB,EAAUE,cACZD,EAAQC,YAAYF,EAAUG,eAC9BF,EAAQG,eAAiBJ,EAAUI,gBAIvC,SAASC,EAAkBplR,GACzBA,EAAIqlR,YAAc,UAClBrlR,EAAIslR,UAAY,UAChBtlR,EAAIrK,SAAW,UACfqK,EAAIulR,YAAc,EAClBvlR,EAAI6hR,UAAY,EAChB7hR,EAAIwlR,QAAU,OACdxlR,EAAIylR,SAAW,QACfzlR,EAAI0lR,WAAa,GACjB1lR,EAAI2lR,yBAA2B,cAC/B3lR,EAAIskO,KAAO,uBAEajqf,IAApB2lR,EAAIilR,cACNjlR,EAAIilR,YAAY,IAChBjlR,EAAImlR,eAAiB,GAIzB,SAASS,EAAqBtub,EAAOkpD,EAAIqlY,EAAIC,GAG3C,IAFA,IAAI1liB,EAASk3G,EAAMl3G,OAEVmB,EAAI,EAAGA,EAAInB,EAAQmB,GAAK,EAAG,CAClC,IAAI0vf,EAAQ35Y,EAAM/1G,GAElB,GAAc,IAAV0vf,EACF35Y,EAAM/1G,EAAI,GAAKi/J,EACflpD,EAAM/1G,EAAI,GAAKskiB,EACfvub,EAAM/1G,EAAI,GAAKukiB,OACV,GAAI70C,EAAQ,IAAK,CACtB,IAAI80C,EAAS,IAAM90C,EACnB35Y,EAAM/1G,EAAI,GAAK+1G,EAAM/1G,EAAI,GAAK0vf,EAAQzwV,EAAKulY,GAAU,EACrDzub,EAAM/1G,EAAI,GAAK+1G,EAAM/1G,EAAI,GAAK0vf,EAAQ40C,EAAKE,GAAU,EACrDzub,EAAM/1G,EAAI,GAAK+1G,EAAM/1G,EAAI,GAAK0vf,EAAQ60C,EAAKC,GAAU,IAK3D,SAASC,EAAkBC,EAAUC,EAAWC,GAI9C,IAHA,IAAI/liB,EAAS6liB,EAAS7liB,OAGbmB,EAAI,EAAGA,EAAInB,EAAQmB,GAAK,EAAG,CAClC,IAAI0vf,EAAQk1C,EAAcA,EAAYF,EAAS1kiB,IAAM0kiB,EAAS1kiB,GAC9D2kiB,EAAU3kiB,GAAK2kiB,EAAU3kiB,GAAK0vf,EAJpB,mBAIoC,GAIlD,SAASm1C,EAAuBH,EAAUC,EAAWC,GAGnD,IAFA,IAAI/liB,EAAS6liB,EAAS7liB,OAEbmB,EAAI,EAAGA,EAAInB,EAAQmB,GAAK,EAAG,CAClC,IAAIwoC,EAAsB,GAAlBk8f,EAAS1kiB,EAAI,GAA4B,IAAlB0kiB,EAAS1kiB,EAAI,GAA6B,GAAlB0kiB,EAAS1kiB,EAAI,GACpE2kiB,EAAU3kiB,GAAK4kiB,EAAcD,EAAU3kiB,GAAK4kiB,EAAYp8f,GAAK,IAAM,EAAIm8f,EAAU3kiB,GAAKwoC,GAAK,IAkC/F,SAASs8f,EAAarmR,EAAKokO,EAAOkiD,EAAUC,GAC1C,IAAIC,EAAeD,EAAS,GACxBE,EAAeF,EAAS,GACxBG,EAAaH,EAAS,GAAKC,EAC3BG,EAAcJ,EAAS,GAAKE,EAEb,IAAfC,GAAoC,IAAhBC,IApC1B,SAA6BC,EAASN,EAAUzsd,EAAOi2C,EAAQ+2a,EAASC,EAAUX,EAAaK,EAAcC,EAAcM,EAAaC,GACtI,IAIIC,EAJAC,IAAgBJ,EAChBtmY,EAAK0mY,EAAcJ,EAAS,GAAK,EACjCjB,EAAKqB,EAAcJ,EAAS,GAAK,EACjChB,EAAKoB,EAAcJ,EAAS,GAAK,EAInCG,EADc,eAAZJ,EACUT,EAEAJ,EAMd,IAHA,IACI5/V,EAAY9qM,KAAKE,IAAIs0H,EAAQx0H,KAAKqjB,KADd,QACuCk7D,IAEtD0gF,EAAM,EAAGA,EAAMzqC,EAAQyqC,GAAO6rC,EAAW,CAChD,IAAI+gW,EAAc7riB,KAAKE,IAAI4qM,EAAWt2E,EAASyqC,GAC3C0rY,EAAWW,EAAQvJ,aAAamJ,EAAeO,EAAaxsY,GAAOksY,EAAeO,GAAcntd,EAAOstd,GACvGjB,EAAYI,EAASjJ,aAAamJ,EAAcjsY,EAAMksY,EAAc5sd,EAAOstd,GAE3ED,GACFtB,EAAqBK,EAAS1sf,KAAMinH,EAAIqlY,EAAIC,GAG9CmB,EAAUhB,EAAS1sf,KAAM2sf,EAAU3sf,KAAM4sf,GACzCG,EAASrD,aAAaiD,EAAWM,EAAcjsY,EAAMksY,IAcvDW,CAAoBhjD,EAAM38e,QAAS6+hB,EAAUI,EAAYC,EAAaviD,EAAMyiD,QAASziD,EAAM0iD,SAAU1iD,EAAM+hD,YAAaK,EAAcC,EAAcriD,EAAMza,QAASya,EAAMva,SACzK7pN,EAAIm/N,OACJn/N,EAAIulR,YAAc,EAClBvlR,EAAI2lR,yBAA2B,cAC/B3lR,EAAI2/Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GAChC3/Q,EAAIqnR,UAAUf,EAAS3+D,OAAQ,EAAG,GAClC3nN,EAAIo/N,WAGN,SAASkoD,EAAyB1sa,EAAWhhF,GAC3C,IAAIwwQ,EAAQ26K,EAAM8F,KAAK83D,8BAA8B/na,GAErDwvL,EAAM,GAAK9uT,KAAKisiB,OAAOn9O,EAAM,IAC7BA,EAAM,GAAK9uT,KAAKisiB,OAAOn9O,EAAM,IAC7B,IAAIo9O,EAAclsiB,KAAKisiB,QAAQ5sN,WAAW8sN,kBAAoB,GAAK1nB,EAAe17C,cAAckD,kBAEhG,YAAoBlte,IAAhBu/C,EACKA,EACEwwQ,EAAM,IAAMo9O,GAAep9O,EAAM,IAAMo9O,EAOpD,IAAIE,EAAkB,CAAC,OAAQ,QAAS,UACpCC,EAAmB,CAAC,QAAS,QAAS,SACtCC,EAAc,GACdC,EAAU,GAEVrN,EAA8B,WAChC,SAASA,EAAesN,EAAWxf,EAAYC,EAAMqC,EAAeF,EAAY6B,EAAuBtB,GACrGt/f,EAAgBptB,KAAMi8hB,GAEtBj8hB,KAAKyhR,IAAM8nR,EACXvpiB,KAAK8nC,QAAU,IAAIs6f,EAAiBpiiB,KAAKyhR,IAAI2nN,OAAO9tZ,MAAOt7E,KAAKyhR,IAAI2nN,OAAO73W,QAC3EvxH,KAAKwpiB,WAAa,GAClBxpiB,KAAKypiB,YAAc,KACnBzpiB,KAAK0piB,eAAgB,EACrB1piB,KAAK8hJ,IAAM,KACX9hJ,KAAK2piB,MAAQ,KACb3piB,KAAK+phB,WAAaA,EAClB/phB,KAAKgqhB,KAAOA,EACZhqhB,KAAKqshB,cAAgBA,EACrBrshB,KAAKmshB,WAAaA,EAClBnshB,KAAK4piB,WAAa,GAClB5piB,KAAK6piB,gBAAkB,KACvB7piB,KAAK8piB,cAAgB,KACrB9piB,KAAK+piB,mBAAqB,GAC1B/piB,KAAKgqiB,WAAa,EAClBhqiB,KAAKiqiB,WAAa,GAClBjqiB,KAAKkqiB,aAAe,EACpBlqiB,KAAKmqiB,UAAY,KACjBnqiB,KAAKoqiB,aAAe,KACpBpqiB,KAAKqqiB,gBAAiB,EACtBrqiB,KAAKsqiB,mBAAqB,GAC1BtqiB,KAAKguhB,sBAAwBA,EAC7BhuhB,KAAKuqiB,eAAiB,IAAItI,EAAejiiB,KAAKqshB,eAC9CrshB,KAAKwqiB,eAAiB,IAAI53hB,IAC1B5S,KAAK0shB,oBAAsBA,EAC3B1shB,KAAKyqiB,cAAgB,EACrBzqiB,KAAK0qiB,aAAe,EACpB1qiB,KAAK2qiB,aAAe,EAEhBpB,GACF5I,EAA2B4I,GAG7BvpiB,KAAK4qiB,2BAA6B,KAqxDpC,OAlxDAnzf,EAAawkf,EAAgB,CAAC,CAC5B33hB,IAAK,eACL5I,MAAO,SAAsBitC,GAC3B,IAAI0zF,EAAY1zF,EAAM0zF,UAClBkkK,EAAW53P,EAAM43P,SACjBsqQ,EAAqBligB,EAAMolf,aAC3BA,OAAsC,IAAvB8c,GAAwCA,EACvDC,EAAmBnigB,EAAMoyF,WACzBA,OAAkC,IAArB+va,EAA8B,KAAOA,EAClDxvd,EAAQt7E,KAAKyhR,IAAI2nN,OAAO9tZ,MACxBi2C,EAASvxH,KAAKyhR,IAAI2nN,OAAO73W,OAM7B,GALAvxH,KAAKyhR,IAAIm/N,OACT5gf,KAAKyhR,IAAIslR,UAAYhsa,GAAc,qBACnC/6H,KAAKyhR,IAAIspR,SAAS,EAAG,EAAGzvd,EAAOi2C,GAC/BvxH,KAAKyhR,IAAIo/N,UAELktC,EAAc,CAChB,IAAIid,EAAoBhriB,KAAKuqiB,eAAeU,UAAU,cAAe3vd,EAAOi2C,GAAQ,GACpFvxH,KAAKkriB,aAAelriB,KAAKyhR,IACzBzhR,KAAKgriB,kBAAoBA,EAAkB5hE,OAC3Cppe,KAAKyhR,IAAMupR,EAAkB9hiB,QAC7BlJ,KAAKyhR,IAAIm/N,OACT5gf,KAAKyhR,IAAIplJ,UAAUp0H,MAAMjI,KAAKyhR,IAAKzhR,KAAKkriB,aAAatK,qBAGvD5giB,KAAKyhR,IAAIm/N,OACTimD,EAAkB7miB,KAAKyhR,KAEnBplJ,IACFr8H,KAAKyhR,IAAIplJ,UAAUp0H,MAAMjI,KAAKyhR,IAAKplJ,GACnCr8H,KAAK0qiB,aAAerua,EAAU,GAC9Br8H,KAAK2qiB,aAAetua,EAAU,IAGhCr8H,KAAKyhR,IAAIplJ,UAAUp0H,MAAMjI,KAAKyhR,IAAK8e,EAASlkK,WAC5Cr8H,KAAKyqiB,cAAgBlqQ,EAASsrB,MAC9B7rT,KAAK8piB,cAAgB9piB,KAAKyhR,IAAIm/Q,oBAAoB9whB,QAClD9P,KAAKmriB,qBAAuBpuiB,KAAKquiB,MAAMpriB,KAAK8piB,cAAc,GAAI9piB,KAAK8piB,cAAc,IAE7E9piB,KAAKmshB,YACPnshB,KAAKmshB,WAAWkf,gBAGnB,CACD/miB,IAAK,sBACL5I,MAAO,SAA6BwxhB,EAAcoe,EAAmBC,EAAkBr5G,GACrF,IAAIk7F,EAAYF,EAAaE,UACzBD,EAAUD,EAAaC,QACvBnqhB,EAAIsoiB,GAAqB,EACzBE,EAAepe,EAAUvrhB,OAE7B,GAAI2piB,IAAiBxoiB,EACnB,OAAOA,EAUT,IAPA,IAKIyoiB,EALAC,EAAkBF,EAAexoiB,EA7hCrB,IA6hCwE,oBAArBuoiB,EAC/D//G,EAAUkgH,EAAkB39gB,KAAK+xB,MA/hCtB,GA+hC+C,EAC1DxyC,EAAQ,EACRy8gB,EAAa/phB,KAAK+phB,WAClBC,EAAOhqhB,KAAKgqhB,OAGH,CACX,QAAgBluhB,IAAZo2b,GAAyBlvb,IAAMkvb,EAAQ2pG,eAEzC,OADA3pG,EAAQy5G,QAAQ3oiB,EAAGuoiB,GACZvoiB,EAKT,IAFAyoiB,EAAOte,EAAQnqhB,MAEFwje,EAAMwM,IAAImN,WACrBngf,KAAKyriB,GAAMxjiB,MAAMjI,KAAMothB,EAAUpqhB,QAC5B,CACL,IACImd,EADA+sd,EAAYjyO,EAA2BmyR,EAAUpqhB,IAGrD,IACE,IAAKkqe,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAIsriB,EAAWzrhB,EAAMzkB,MACjBmwiB,EAAWD,EAASlvW,WAAW,MAAQqtV,EAAaC,EAExD,IAAK6hB,EAAS5niB,IAAI2niB,GAEhB,OADAC,EAAS9niB,IAAI6niB,EAAUL,GAChBvoiB,GAGX,MAAOouC,GACP87b,EAAU9ke,EAAEgpC,GAXd,QAaE87b,EAAUx2Z,KAMd,KAFA1zE,IAEUwoiB,EACR,OAAOxoiB,EAGT,GAAI0oiB,KAAqBp+hB,EAzkCX,GAykCoC,CAChD,GAAIygB,KAAK+xB,MAAQ0rY,EAEf,OADA+/G,IACOvoiB,EAGTsK,EAAQ,MAIb,CACDhJ,IAAK,aACL5I,MAAO,WACL,KAAOsE,KAAKwpiB,WAAW3niB,QAAuC,OAA7B7B,KAAK8nC,QAAQy7f,aAC5CvjiB,KAAK6gf,UAGP7gf,KAAKyhR,IAAIo/N,UAEL7gf,KAAKgriB,oBACPhriB,KAAKyhR,IAAMzhR,KAAKkriB,aAChBlriB,KAAKyhR,IAAIm/N,OACT5gf,KAAKyhR,IAAI2/Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACrCphiB,KAAKyhR,IAAIqnR,UAAU9oiB,KAAKgriB,kBAAmB,EAAG,GAC9ChriB,KAAKyhR,IAAIo/N,UACT7gf,KAAKgriB,kBAAoB,MAG3BhriB,KAAKuqiB,eAAer3hB,QACpBlT,KAAKwqiB,eAAet3hB,QAEhBlT,KAAKmshB,YACPnshB,KAAKmshB,WAAW2f,cAGnB,CACDxniB,IAAK,cACL5I,MAAO,SAAqB65J,EAAKw2Y,GAU/B,IATA,IAOIC,EAAWC,EAPX3wd,EAAQi6E,EAAIj6E,MACZi2C,EAASgkC,EAAIhkC,OACb26a,EAAanviB,KAAKC,IAAID,KAAKquiB,MAAMW,EAAiB,GAAIA,EAAiB,IAAK,GAC5EI,EAAcpviB,KAAKC,IAAID,KAAKquiB,MAAMW,EAAiB,GAAIA,EAAiB,IAAK,GAC7EK,EAAa9wd,EACb+wd,EAAc96a,EACd+6a,EAAc,YAGXJ,EAAa,GAAKE,EAAa,GAAKD,EAAc,GAAKE,EAAc,GAAG,CAC7E,IAAInoF,EAAWkoF,EACXnoF,EAAYooF,EAEZH,EAAa,GAAKE,EAAa,IAEjCF,GAAcE,GADdloF,EAAWnnd,KAAKqjB,KAAKgshB,EAAa,KAIhCD,EAAc,GAAKE,EAAc,IAEnCF,GAAeE,GADfpoF,EAAYlnd,KAAKqjB,KAAKishB,EAAc,MAKtCJ,GADAD,EAAYhsiB,KAAKuqiB,eAAeU,UAAUqB,EAAapoF,EAAUD,IAC9C/6c,SACZqjiB,UAAU,EAAG,EAAGroF,EAAUD,GACjCgoF,EAAOnD,UAAUvzY,EAAK,EAAG,EAAG62Y,EAAYC,EAAa,EAAG,EAAGnoF,EAAUD,GACrE1uT,EAAMy2Y,EAAU5iE,OAChBgjE,EAAaloF,EACbmoF,EAAcpoF,EACdqoF,EAA8B,cAAhBA,EAA8B,YAAc,YAG5D,MAAO,CACL/2Y,IAAKA,EACL62Y,WAAYA,EACZC,YAAaA,KAGhB,CACD/niB,IAAK,oBACL5I,MAAO,SAA2B65J,GAChC,IAAIksH,EAAMzhR,KAAKyhR,IACXnmM,EAAQi6E,EAAIj6E,MACZi2C,EAASgkC,EAAIhkC,OACb0xa,EAAYjjiB,KAAK8nC,QAAQm7f,UACzBuJ,EAAgBxsiB,KAAK8nC,QAAQq7f,YAC7BsJ,EAAazsiB,KAAKuqiB,eAAeU,UAAU,aAAc3vd,EAAOi2C,GAEpE80a,EADcoG,EAAWvjiB,QACGqsJ,GAC5B,IAAIm3Y,EAAcjrR,EAAIm/Q,oBAElB+L,EAAenmE,EAAM8F,KAAKjwW,UAAUqwa,EAAa,CAAC,EAAIpxd,EAAO,EAAG,GAAI,EAAIi2C,EAAQ,EAAG,IAEvFo7a,EAAenmE,EAAM8F,KAAKjwW,UAAUswa,EAAc,CAAC,EAAG,EAAG,EAAG,EAAG,GAAIp7a,IAEnE,IAAIq7a,EAAQpmE,EAAM8F,KAAKC,eAAe,CAAC,EAAG,GAAIogE,GAE1CE,EAAQrmE,EAAM8F,KAAKC,eAAe,CAACjxZ,EAAOi2C,GAASo7a,GAEnDh3Y,EAAO6wU,EAAM8F,KAAK4b,cAAc,CAAC0kD,EAAM,GAAIA,EAAM,GAAIC,EAAM,GAAIA,EAAM,KAErEC,EAAa/viB,KAAKqjB,KAAKu1I,EAAK,GAAKA,EAAK,IACtCo3Y,EAAchwiB,KAAKqjB,KAAKu1I,EAAK,GAAKA,EAAK,IACvCq3Y,EAAahtiB,KAAKuqiB,eAAeU,UAAU,aAAc6B,EAAYC,GAAa,GAClFE,EAAUD,EAAW9jiB,QACrBkie,EAAUrue,KAAKE,IAAI2viB,EAAM,GAAIC,EAAM,IACnCvhE,EAAUvue,KAAKE,IAAI2viB,EAAM,GAAIC,EAAM,IACvCI,EAAQvnZ,WAAW0lV,GAAUE,GAC7B2hE,EAAQ5wa,UAAUp0H,MAAMgliB,EAASN,GAEjC,IAAIO,EAASltiB,KAAKmtiB,YAAYV,EAAWrjE,OAAQ6jE,EAAQG,4BAEzDH,EAAQI,sBAAwBtE,EAAyBkE,EAAQrM,oBAAqBrrY,EAAIl6G,aAC1F4xf,EAAQnE,UAAUoE,EAAO33Y,IAAK,EAAG,EAAG23Y,EAAO33Y,IAAIj6E,MAAO4xd,EAAO33Y,IAAIhkC,OAAQ,EAAG,EAAGj2C,EAAOi2C,GACtF07a,EAAQ7F,yBAA2B,YAEnC,IAAI9oR,EAAUkoN,EAAM8F,KAAKjwW,UAAU4wa,EAAQG,2BAA4B,CAAC,EAAG,EAAG,EAAG,GAAIhiE,GAAUE,IAI/F,OAFA2hE,EAAQlG,UAAYyF,EAAgBvJ,EAAUqK,WAAW7rR,EAAKzhR,KAAMs+Q,EAASkiR,EAAgB2D,SAASlrD,MAAQgqD,EAC9GgK,EAAQlC,SAAS,EAAG,EAAGzvd,EAAOi2C,GACvB,CACL63W,OAAQ4jE,EAAW5jE,OACnBgC,QAASrue,KAAKo/E,MAAMivZ,GACpBE,QAASvue,KAAKo/E,MAAMmvZ,MAGvB,CACDhne,IAAK,eACL5I,MAAO,SAAsB4/E,GAC3Bt7E,KAAK8nC,QAAQw7f,UAAYhod,EACzBt7E,KAAKyhR,IAAI6hR,UAAYhod,IAEtB,CACDh3E,IAAK,aACL5I,MAAO,SAAoB4/G,GACzBt7G,KAAKyhR,IAAIwlR,QAAUkC,EAAgB7tb,KAEpC,CACDh3G,IAAK,cACL5I,MAAO,SAAqB4/G,GAC1Bt7G,KAAKyhR,IAAIylR,SAAWkC,EAAiB9tb,KAEtC,CACDh3G,IAAK,gBACL5I,MAAO,SAAuB+tH,GAC5BzpH,KAAKyhR,IAAI0lR,WAAa19a,IAEvB,CACDnlH,IAAK,UACL5I,MAAO,SAAiB6xiB,EAAWC,GACjC,IAAI/rR,EAAMzhR,KAAKyhR,SAES3lR,IAApB2lR,EAAIilR,cACNjlR,EAAIilR,YAAY6G,GAChB9rR,EAAImlR,eAAiB4G,KAGxB,CACDlpiB,IAAK,qBACL5I,MAAO,SAA4B8uhB,MAClC,CACDlmhB,IAAK,cACL5I,MAAO,SAAqB+xiB,MAC3B,CACDnpiB,IAAK,YACL5I,MAAO,SAAmB8hN,GACxB,IAAK,IAAIx6M,EAAI,EAAGkB,EAAKs5M,EAAO37M,OAAQmB,EAAIkB,EAAIlB,IAAK,CAC/C,IAAIgkC,EAAQw2K,EAAOx6M,GACfsB,EAAM0iC,EAAM,GACZtrC,EAAQsrC,EAAM,GAElB,OAAQ1iC,GACN,IAAK,KACHtE,KAAKogf,aAAa1kf,GAClB,MAEF,IAAK,KACHsE,KAAKqgf,WAAW3kf,GAChB,MAEF,IAAK,KACHsE,KAAKsgf,YAAY5kf,GACjB,MAEF,IAAK,KACHsE,KAAKugf,cAAc7kf,GACnB,MAEF,IAAK,IACHsE,KAAKwgf,QAAQ9kf,EAAM,GAAIA,EAAM,IAC7B,MAEF,IAAK,KACHsE,KAAKygf,mBAAmB/kf,GACxB,MAEF,IAAK,KACHsE,KAAK0gf,YAAYhlf,GACjB,MAEF,IAAK,OACHsE,KAAKkif,QAAQxmf,EAAM,GAAIA,EAAM,IAC7B,MAEF,IAAK,KACHsE,KAAK8nC,QAAQu7f,YAAcr8f,EAAM,GACjC,MAEF,IAAK,KACHhnC,KAAK8nC,QAAQs7f,UAAYp8f,EAAM,GAC/BhnC,KAAKyhR,IAAIulR,YAAchggB,EAAM,GAC7B,MAEF,IAAK,KACHhnC,KAAKyhR,IAAI2lR,yBAA2B1riB,EACpC,MAEF,IAAK,QACHsE,KAAK8nC,QAAQy7f,YAAc7niB,EAAQsE,KAAKmqiB,UAAY,KACpDnqiB,KAAKmqiB,UAAY,KACjBnqiB,KAAK0tiB,kBACL,MAEF,IAAK,KACH1tiB,KAAK8nC,QAAQ07f,aAAe9niB,MAInC,CACD4I,IAAK,kBACL5I,MAAO,WACL,IAAIiyiB,IAAgB3tiB,KAAKoqiB,aAErBpqiB,KAAK8nC,QAAQy7f,cAAgBoK,EAC/B3tiB,KAAK4tiB,kBACK5tiB,KAAK8nC,QAAQy7f,aAAeoK,GACtC3tiB,KAAK6tiB,iBAGR,CACDvpiB,IAAK,iBACL5I,MAAO,WACL,GAAIsE,KAAKoqiB,aACP,MAAM,IAAIxiiB,MAAM,qDAGlB,IAAIkliB,EAAa9siB,KAAKyhR,IAAI2nN,OAAO9tZ,MAC7Byxd,EAAc/siB,KAAKyhR,IAAI2nN,OAAO73W,OAC9Bu8a,EAAU,eAAiB9tiB,KAAKgqiB,WAChC+D,EAAgB/tiB,KAAKuqiB,eAAeU,UAAU6C,EAAShB,EAAYC,GAAa,GACpF/siB,KAAKoqiB,aAAepqiB,KAAKyhR,IACzBzhR,KAAKyhR,IAAMssR,EAAc7kiB,QACzB,IAAIu4Q,EAAMzhR,KAAKyhR,IACfA,EAAI2/Q,aAAan5hB,MAAMw5Q,EAAKzhR,KAAKoqiB,aAAaxJ,qBAC9C2F,EAAavmiB,KAAKoqiB,aAAc3oR,GAh0CtC,SAAiCA,EAAKglR,GACpC,GAAIhlR,EAAIusR,iBACN,MAAM,IAAIpmiB,MAAM,6CAGlB65Q,EAAIwsR,eAAiBxsR,EAAIm/N,KACzBn/N,EAAIysR,kBAAoBzsR,EAAIo/N,QAC5Bp/N,EAAI0sR,iBAAmB1sR,EAAI8vO,OAC3B9vO,EAAI2sR,gBAAkB3sR,EAAIoqC,MAC1BpqC,EAAI4sR,oBAAsB5sR,EAAI/7H,UAC9B+7H,EAAI6sR,oBAAsB7sR,EAAIplJ,UAC9BolJ,EAAI8sR,uBAAyB9sR,EAAI2/Q,aACjC3/Q,EAAI+sR,yBAA2B/sR,EAAI6/Q,eACnC7/Q,EAAIgtR,eAAiBhtR,EAAIjI,KACzBiI,EAAIitR,iBAAmBjtR,EAAI4uB,OAC3B5uB,EAAIktR,iBAAmBltR,EAAIq/N,OAC3Br/N,EAAImtR,wBAA0BntR,EAAIotR,cAClCptR,EAAIqtR,eAAiBrtR,EAAI9rH,KACzB8rH,EAAIstR,oBAAsBttR,EAAIy/N,UAC9Bz/N,EAAIutR,oBAAsBvtR,EAAIwtR,UAE9BxtR,EAAIusR,iBAAmB,WACrBvsR,EAAIm/N,KAAOn/N,EAAIwsR,eACfxsR,EAAIo/N,QAAUp/N,EAAIysR,kBAClBzsR,EAAI8vO,OAAS9vO,EAAI0sR,iBACjB1sR,EAAIoqC,MAAQpqC,EAAI2sR,gBAChB3sR,EAAI/7H,UAAY+7H,EAAI4sR,oBACpB5sR,EAAIplJ,UAAYolJ,EAAI6sR,oBACpB7sR,EAAI2/Q,aAAe3/Q,EAAI8sR,uBACvB9sR,EAAI6/Q,eAAiB7/Q,EAAI+sR,yBACzB/sR,EAAIjI,KAAOiI,EAAIgtR,eACfhtR,EAAI4uB,OAAS5uB,EAAIitR,iBACjBjtR,EAAIq/N,OAASr/N,EAAIktR,iBACjBltR,EAAIotR,cAAgBptR,EAAImtR,wBACxBntR,EAAI9rH,KAAO8rH,EAAIqtR,eACfrtR,EAAIy/N,UAAYz/N,EAAIstR,oBACpBttR,EAAIwtR,UAAYxtR,EAAIutR,2BACbvtR,EAAIusR,kBAGbvsR,EAAIm/N,KAAO,WACT6lD,EAAQ7lD,OAER5gf,KAAKiuiB,kBAGPxsR,EAAIo/N,QAAU,WACZ4lD,EAAQ5lD,UAER7gf,KAAKkuiB,qBAGPzsR,EAAI/7H,UAAY,SAAsB7tI,EAAG2zB,GACvCi7f,EAAQ/gZ,UAAU7tI,EAAG2zB,GAErBxrC,KAAKquiB,oBAAoBx2hB,EAAG2zB,IAG9Bi2O,EAAIoqC,MAAQ,SAAkBh0S,EAAG2zB,GAC/Bi7f,EAAQ56O,MAAMh0S,EAAG2zB,GAEjBxrC,KAAKouiB,gBAAgBv2hB,EAAG2zB,IAG1Bi2O,EAAIplJ,UAAY,SAAsB12H,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACnD+vd,EAAQpqa,UAAU12H,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAEjC12E,KAAKsuiB,oBAAoB3oiB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,IAG1C+qM,EAAI2/Q,aAAe,SAAyBz7hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACzD+vd,EAAQrF,aAAaz7hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAEpC12E,KAAKuuiB,uBAAuB5oiB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,IAG7C+qM,EAAI6/Q,eAAiB,WACnBmF,EAAQnF,iBAERthiB,KAAKwuiB,4BAGP/sR,EAAI8vO,OAAS,SAAmBoB,GAC9B8zC,EAAQl1C,OAAOoB,GAEf3yf,KAAKmuiB,iBAAiBx7C,IAGxBlxO,EAAIjI,KAAO,SAAmBzvH,GAC5B08Y,EAAQjtR,KAAKzvH,GAEb/pJ,KAAKyuiB,eAAe1kZ,IAGtB03H,EAAI4uB,OAAS,SAAUx4R,EAAG2zB,GACxBi7f,EAAQp2P,OAAOx4R,EAAG2zB,GAElBxrC,KAAK0uiB,iBAAiB72hB,EAAG2zB,IAG3Bi2O,EAAIq/N,OAAS,SAAUjpe,EAAG2zB,GACxBi7f,EAAQ3lD,OAAOjpe,EAAG2zB,GAElBxrC,KAAK2uiB,iBAAiB92hB,EAAG2zB,IAG3Bi2O,EAAIotR,cAAgB,SAAUK,EAAMC,EAAMC,EAAMC,EAAMx3hB,EAAG2zB,GACvDi7f,EAAQoI,cAAcK,EAAMC,EAAMC,EAAMC,EAAMx3hB,EAAG2zB,GAEjDxrC,KAAK4uiB,wBAAwBM,EAAMC,EAAMC,EAAMC,EAAMx3hB,EAAG2zB,IAG1Di2O,EAAI9rH,KAAO,SAAU99I,EAAG2zB,EAAG8vC,EAAOi2C,GAChCk1a,EAAQ9wY,KAAK99I,EAAG2zB,EAAG8vC,EAAOi2C,GAE1BvxH,KAAK8uiB,eAAej3hB,EAAG2zB,EAAG8vC,EAAOi2C,IAGnCkwJ,EAAIy/N,UAAY,WACdulD,EAAQvlD,YAERlhf,KAAK+uiB,uBAGPttR,EAAIwtR,UAAY,WACdxI,EAAQwI,YAERjviB,KAAKgviB,uBAksCHM,CAAwB7tR,EAAKzhR,KAAKoqiB,cAClCpqiB,KAAK2gf,UAAU,CAAC,CAAC,KAAM,eAAgB,CAAC,KAAM,GAAI,CAAC,KAAM,OAE1D,CACDr8e,IAAK,eACL5I,MAAO,WACL,IAAKsE,KAAKoqiB,aACR,MAAM,IAAIxiiB,MAAM,+CAGlB5H,KAAKyhR,IAAIusR,mBAETzH,EAAavmiB,KAAKyhR,IAAKzhR,KAAKoqiB,cAC5BpqiB,KAAKyhR,IAAMzhR,KAAKoqiB,aAChBpqiB,KAAK8nC,QAAQy7f,YAAc,KAC3BvjiB,KAAKoqiB,aAAe,OAErB,CACD9liB,IAAK,UACL5I,MAAO,SAAiB6ziB,GACtB,GAAKvviB,KAAK8nC,QAAQy7f,YAAlB,CAIKgM,GAGHA,EAAS,GAAKxyiB,KAAKwjB,MAAMgvhB,EAAS,IAClCA,EAAS,GAAKxyiB,KAAKwjB,MAAMgvhB,EAAS,IAClCA,EAAS,GAAKxyiB,KAAKqjB,KAAKmvhB,EAAS,IACjCA,EAAS,GAAKxyiB,KAAKqjB,KAAKmvhB,EAAS,KALjCA,EAAW,CAAC,EAAG,EAAGvviB,KAAKyhR,IAAI2nN,OAAO9tZ,MAAOt7E,KAAKyhR,IAAI2nN,OAAO73W,QAQ3D,IAAIs0X,EAAQ7lf,KAAK8nC,QAAQy7f,YAEzBuE,EADmB9niB,KAAKoqiB,aACGvkD,EAAO7lf,KAAKyhR,IAAK8tR,GAC5CvviB,KAAKyhR,IAAIm/N,OACT5gf,KAAKyhR,IAAI2/Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACrCphiB,KAAKyhR,IAAI8qR,UAAU,EAAG,EAAGvsiB,KAAKyhR,IAAI2nN,OAAO9tZ,MAAOt7E,KAAKyhR,IAAI2nN,OAAO73W,QAChEvxH,KAAKyhR,IAAIo/N,aAEV,CACDv8e,IAAK,OACL5I,MAAO,WACLsE,KAAKyhR,IAAIm/N,OACT,IAAIkhD,EAAM9hiB,KAAK8nC,QACf9nC,KAAKwpiB,WAAWp9hB,KAAK01hB,GACrB9hiB,KAAK8nC,QAAUg6f,EAAItnf,UAEpB,CACDl2C,IAAK,UACL5I,MAAO,WAC0B,IAA3BsE,KAAKwpiB,WAAW3niB,QAAgB7B,KAAK8nC,QAAQy7f,aAC/CvjiB,KAAK6tiB,eAGwB,IAA3B7tiB,KAAKwpiB,WAAW3niB,SAClB7B,KAAK8nC,QAAU9nC,KAAKwpiB,WAAWn9hB,MAC/BrM,KAAKyhR,IAAIo/N,UACT7gf,KAAK0tiB,kBACL1tiB,KAAKypiB,YAAc,KACnBzpiB,KAAK4qiB,2BAA6B,QAGrC,CACDtmiB,IAAK,YACL5I,MAAO,SAAmBiK,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACvC12E,KAAKyhR,IAAIplJ,UAAU12H,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAClC12E,KAAK4qiB,2BAA6B,OAEnC,CACDtmiB,IAAK,gBACL5I,MAAO,SAAuBo7E,EAAK9rD,GAOjC,IANA,IAIIwkhB,EAAQC,EAJRhuR,EAAMzhR,KAAKyhR,IACX35O,EAAU9nC,KAAK8nC,QACfjwB,EAAIiwB,EAAQjwB,EACZ2zB,EAAI1D,EAAQ0D,EAGPxoC,EAAI,EAAGw0E,EAAI,EAAGtzE,EAAK4yE,EAAIj1E,OAAQmB,EAAIkB,EAAIlB,IAC9C,OAAiB,EAAT8zE,EAAI9zE,IACV,KAAKwje,EAAMwM,IAAImO,UACbtpe,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACT,IAAI8D,EAAQtwD,EAAKwsD,KACb+5C,EAASvmG,EAAKwsD,KACdk4d,EAAK73hB,EAAIyjE,EACTq0d,EAAKnkgB,EAAI+lF,EACbkwJ,EAAI4uB,OAAOx4R,EAAG2zB,GAEA,IAAV8vC,GAA0B,IAAXi2C,EACjBkwJ,EAAIq/N,OAAO4uD,EAAIC,IAEfluR,EAAIq/N,OAAO4uD,EAAIlkgB,GACfi2O,EAAIq/N,OAAO4uD,EAAIC,GACfluR,EAAIq/N,OAAOjpe,EAAG83hB,IAGhB7ngB,EAAQm8f,iBAAiBxiR,EAAIm/Q,oBAAqB/ohB,EAAG2zB,GACrD1D,EAAQm8f,iBAAiBxiR,EAAIm/Q,oBAAqB8O,EAAIC,GACtDluR,EAAIy/N,YACJ,MAEF,KAAK1a,EAAMwM,IAAI3iM,OACbx4R,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACTiqM,EAAI4uB,OAAOx4R,EAAG2zB,GACd1D,EAAQm8f,iBAAiBxiR,EAAIm/Q,oBAAqB/ohB,EAAG2zB,GACrD,MAEF,KAAKg7b,EAAMwM,IAAI8N,OACbjpe,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACTiqM,EAAIq/N,OAAOjpe,EAAG2zB,GACd1D,EAAQm8f,iBAAiBxiR,EAAIm/Q,oBAAqB/ohB,EAAG2zB,GACrD,MAEF,KAAKg7b,EAAMwM,IAAI+N,QACbyuD,EAAS33hB,EACT43hB,EAASjkgB,EACT3zB,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACbiqM,EAAIotR,cAAc7jhB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAI3/D,EAAG2zB,GACrE1D,EAAQ8ngB,sBAAsBnuR,EAAIm/Q,oBAAqB4O,EAAQC,EAAQzkhB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAI3/D,EAAG2zB,GAC1HgsC,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIgO,SACbwuD,EAAS33hB,EACT43hB,EAASjkgB,EACTi2O,EAAIotR,cAAch3hB,EAAG2zB,EAAGxgB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,IACpE1vC,EAAQ8ngB,sBAAsBnuR,EAAIm/Q,oBAAqB4O,EAAQC,EAAQ53hB,EAAG2zB,EAAGxgB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,GAAIxsD,EAAKwsD,EAAI,IACzH3/D,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACbA,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIiO,SACbuuD,EAAS33hB,EACT43hB,EAASjkgB,EACT3zB,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACbiqM,EAAIotR,cAAc7jhB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAI3/D,EAAG2zB,EAAG3zB,EAAG2zB,GACjD1D,EAAQ8ngB,sBAAsBnuR,EAAIm/Q,oBAAqB4O,EAAQC,EAAQzkhB,EAAKwsD,GAAIxsD,EAAKwsD,EAAI,GAAI3/D,EAAG2zB,EAAG3zB,EAAG2zB,GACtGgsC,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIkO,UACbz/N,EAAIy/N,YAKVp5c,EAAQ+ngB,gBAAgBh4hB,EAAG2zB,KAE5B,CACDlnC,IAAK,YACL5I,MAAO,WACLsE,KAAKyhR,IAAIy/N,cAEV,CACD58e,IAAK,SACL5I,MAAO,SAAgBo0iB,GACrBA,EAAqC,qBAAhBA,GAA8BA,EACnD,IAAIruR,EAAMzhR,KAAKyhR,IACXyhR,EAAcljiB,KAAK8nC,QAAQo7f,YAG/B,GAFAzhR,EAAIulR,YAAchniB,KAAK8nC,QAAQu7f,YAE3BrjiB,KAAKqqiB,eACP,GAA6B,WAAzB9vf,EAAQ2of,IAA6C,OAAhBA,QAAwC,IAAhBA,GAA0BA,EAAYoK,WAAY,CACjH,IAAIhK,EAAYtjiB,KAAK+viB,sBACrBtuR,EAAIm/N,OACJn/N,EAAIqlR,YAAc5D,EAAYoK,WAAW7rR,EAAKzhR,KAAMyhR,EAAI2rR,2BAA4B5M,EAAgB2D,SAASjrD,QAC7Gz3N,EAAI6hR,UAAYvmiB,KAAKC,IAAIsmiB,EAAWtjiB,KAAK8nC,QAAQw7f,WACjD7hR,EAAI1K,SACJ0K,EAAIo/N,cACC,CACL,IAAImvD,EAAahwiB,KAAK+viB,sBAElBC,EAAa,IAAMA,GAAchwiB,KAAK8nC,QAAQw7f,WAChD7hR,EAAIm/N,OACJn/N,EAAI6/Q,iBACJ7/Q,EAAI6hR,UAAYvmiB,KAAKo/E,MAAMn8E,KAAKmriB,sBAChC1pR,EAAI1K,SACJ0K,EAAIo/N,YAEJp/N,EAAI6hR,UAAYvmiB,KAAKC,IAAIgziB,EAAYhwiB,KAAK8nC,QAAQw7f,WAClD7hR,EAAI1K,UAKN+4R,GACF9viB,KAAK8viB,YAAY9viB,KAAK8nC,QAAQmogB,6BAGhCxuR,EAAIulR,YAAchniB,KAAK8nC,QAAQs7f,YAEhC,CACD9+hB,IAAK,cACL5I,MAAO,WACLsE,KAAKkhf,YACLlhf,KAAK+2Q,WAEN,CACDzyQ,IAAK,OACL5I,MAAO,SAAco0iB,GACnBA,EAAqC,qBAAhBA,GAA8BA,EACnD,IAAIruR,EAAMzhR,KAAKyhR,IACXwhR,EAAYjjiB,KAAK8nC,QAAQm7f,UAEzBiN,GAAc,EADElwiB,KAAK8nC,QAAQq7f,cAI/B1hR,EAAIm/N,OACJn/N,EAAIslR,UAAY9D,EAAUqK,WAAW7rR,EAAKzhR,KAAMyhR,EAAI2rR,2BAA4B5M,EAAgB2D,SAASlrD,MACzGi3D,GAAc,GAGhB,IAAIpxhB,EAAY9e,KAAK8nC,QAAQmogB,4BAEzBjwiB,KAAKqqiB,gBAAgC,OAAdvrhB,IACrB9e,KAAK0piB,eACPjoR,EAAI54I,KAAK,WACT7oI,KAAK0piB,eAAgB,GAErBjoR,EAAI54I,QAIJqna,GACFzuR,EAAIo/N,UAGFivD,GACF9viB,KAAK8viB,YAAYhxhB,KAGpB,CACDxa,IAAK,SACL5I,MAAO,WACLsE,KAAK0piB,eAAgB,EACrB1piB,KAAK6oI,SAEN,CACDvkI,IAAK,aACL5I,MAAO,WACLsE,KAAK6oI,MAAK,GACV7oI,KAAK+2Q,QAAO,GACZ/2Q,KAAK8viB,gBAEN,CACDxriB,IAAK,eACL5I,MAAO,WACLsE,KAAK0piB,eAAgB,EACrB1piB,KAAKshf,eAEN,CACDh9e,IAAK,kBACL5I,MAAO,WACLsE,KAAKkhf,YACLlhf,KAAKshf,eAEN,CACDh9e,IAAK,oBACL5I,MAAO,WACLsE,KAAK0piB,eAAgB,EACrB1piB,KAAKkhf,YACLlhf,KAAKshf,eAEN,CACDh9e,IAAK,UACL5I,MAAO,WACLsE,KAAK8viB,gBAEN,CACDxriB,IAAK,OACL5I,MAAO,WACLsE,KAAKypiB,YAAcJ,IAEpB,CACD/kiB,IAAK,SACL5I,MAAO,WACLsE,KAAKypiB,YAAcH,IAEpB,CACDhliB,IAAK,YACL5I,MAAO,WACLsE,KAAK8nC,QAAQy6f,WAAa/7D,EAAM8M,gBAChCtze,KAAK8nC,QAAQ06f,gBAAkB,EAC/BxiiB,KAAK8nC,QAAQjwB,EAAI7X,KAAK8nC,QAAQ46f,MAAQ,EACtC1iiB,KAAK8nC,QAAQ0D,EAAIxrC,KAAK8nC,QAAQ66f,MAAQ,IAEvC,CACDr+hB,IAAK,UACL5I,MAAO,WACL,IAAI6+K,EAAQv6K,KAAKmwiB,iBACb1uR,EAAMzhR,KAAKyhR,IAEf,QAAc3lR,IAAVy+K,EAAJ,CAKAknG,EAAIm/N,OACJn/N,EAAIwtR,YAEJ,IAAK,IAAIjsiB,EAAI,EAAGA,EAAIu3K,EAAM14K,OAAQmB,IAAK,CACrC,IAAI+mH,EAAOwwD,EAAMv3K,GACjBy+Q,EAAI2/Q,aAAan5hB,MAAMw5Q,EAAK13J,EAAKsS,WACjColJ,EAAI/7H,UAAU37B,EAAKlyG,EAAGkyG,EAAKv+E,GAC3Bu+E,EAAKqmb,UAAU3uR,EAAK13J,EAAK5C,UAG3Bs6J,EAAIo/N,UACJp/N,EAAIjI,OACJiI,EAAIwtR,mBACGjviB,KAAKmwiB,sBAjBV1uR,EAAIwtR,cAmBP,CACD3qiB,IAAK,iBACL5I,MAAO,SAAwB4+E,GAC7Bt6E,KAAK8nC,QAAQ86f,YAActod,IAE5B,CACDh2E,IAAK,iBACL5I,MAAO,SAAwB4+E,GAC7Bt6E,KAAK8nC,QAAQ+6f,YAAcvod,IAE5B,CACDh2E,IAAK,YACL5I,MAAO,SAAmBmwT,GACxB7rT,KAAK8nC,QAAQg7f,WAAaj3O,EAAQ,MAEnC,CACDvnT,IAAK,aACL5I,MAAO,SAAoBw1L,GACzBlxL,KAAK8nC,QAAQopJ,SAAWA,IAEzB,CACD5sL,IAAK,UACL5I,MAAO,SAAiB20iB,EAAat0iB,GACnC,IAAIu0iB,EAAUtwiB,KAAK+phB,WAAWhmhB,IAAIssiB,GAC9BvogB,EAAU9nC,KAAK8nC,QAEnB,IAAKwogB,EACH,MAAM,IAAI1oiB,MAAM,uBAAuB0D,OAAO+kiB,IAmBhD,GAhBAvogB,EAAQ26f,WAAa6N,EAAQ7N,YAAcj8D,EAAMiN,qBAEnB,IAA1B3rc,EAAQ26f,WAAW,IAAsC,IAA1B36f,EAAQ26f,WAAW,KACpD,EAAIj8D,EAAMv+c,MAAM,gCAAkCoohB,GAGhDt0iB,EAAO,GACTA,GAAQA,EACR+rC,EAAQyogB,eAAiB,GAEzBzogB,EAAQyogB,cAAgB,EAG1BvwiB,KAAK8nC,QAAQi+c,KAAOuqD,EACpBtwiB,KAAK8nC,QAAQq/E,SAAWprH,GAEpBu0iB,EAAQE,YAAZ,CAIA,IAAIhiiB,EAAO8hiB,EAAQ5R,YAAc,aAC7BzkK,EAAO,SAEPq2K,EAAQ1qb,MACVq0Q,EAAO,MACEq2K,EAAQr2K,OACjBA,EAAO,QAGT,IAAIw2K,EAASH,EAAQG,OAAS,SAAW,SACrCC,EAAW,IAAKpliB,OAAOkD,EAAM,OAAQlD,OAAOgliB,EAAQK,cACpDC,EAAkB70iB,EAElBA,EAzsDU,GA0sDZ60iB,EA1sDY,GA2sDH70iB,EA1sDG,MA2sDZ60iB,EA3sDY,KA8sDd5wiB,KAAK8nC,QAAQw6f,cAAgBvmiB,EAAO60iB,EACpC5wiB,KAAKyhR,IAAIskO,KAAO,GAAGz6e,OAAOmliB,EAAQ,KAAKnliB,OAAO2uX,EAAM,KAAK3uX,OAAOsliB,EAAiB,OAAOtliB,OAAOoliB,MAEhG,CACDpsiB,IAAK,uBACL5I,MAAO,SAA8Bs/H,GACnCh7H,KAAK8nC,QAAQi7f,kBAAoB/na,IAElC,CACD12H,IAAK,cACL5I,MAAO,SAAqBm1iB,GAC1B7wiB,KAAK8nC,QAAQk7f,SAAW6N,IAEzB,CACDvsiB,IAAK,WACL5I,MAAO,SAAkBmc,EAAG2zB,GAC1BxrC,KAAK8nC,QAAQjwB,EAAI7X,KAAK8nC,QAAQ46f,OAAS7qhB,EACvC7X,KAAK8nC,QAAQ0D,EAAIxrC,KAAK8nC,QAAQ66f,OAASn3f,IAExC,CACDlnC,IAAK,qBACL5I,MAAO,SAA4Bmc,EAAG2zB,GACpCxrC,KAAKiif,YAAYz2c,GACjBxrC,KAAKqif,SAASxqe,EAAG2zB,KAElB,CACDlnC,IAAK,gBACL5I,MAAO,SAAuBiK,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAC3C12E,KAAK8nC,QAAQy6f,WAAa,CAAC58hB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAC1C12E,KAAK8nC,QAAQ06f,gBAAkBzliB,KAAKquiB,MAAMzliB,EAAGC,GAC7C5F,KAAK8nC,QAAQjwB,EAAI7X,KAAK8nC,QAAQ46f,MAAQ,EACtC1iiB,KAAK8nC,QAAQ0D,EAAIxrC,KAAK8nC,QAAQ66f,MAAQ,IAEvC,CACDr+hB,IAAK,WACL5I,MAAO,WACLsE,KAAKqif,SAAS,EAAGrif,KAAK8nC,QAAQopJ,WAE/B,CACD5sL,IAAK,YACL5I,MAAO,SAAmB+jiB,EAAW5nhB,EAAG2zB,EAAGslgB,EAAkBC,GAC3D,IAQIX,EARA3uR,EAAMzhR,KAAKyhR,IACX35O,EAAU9nC,KAAK8nC,QACfi+c,EAAOj+c,EAAQi+c,KACfg9C,EAAoBj7f,EAAQi7f,kBAC5B57a,EAAWr/E,EAAQq/E,SAAWr/E,EAAQw6f,cACtC0O,EAAiBjO,EAAoBv8D,EAAMiM,kBAAkBgH,iBAC7Dw3D,KAAoBlO,EAAoBv8D,EAAMiM,kBAAkBiH,kBAChEypD,EAAcr7f,EAAQq7f,cAAgBp9C,EAAKk3C,aAG3Cl3C,EAAKi+B,iBAAmBitB,GAAkB9N,KAC5CiN,EAAYrqD,EAAKmrD,iBAAiBlxiB,KAAK+phB,WAAY0V,IAGjD15C,EAAKi+B,iBAAmBmf,GAC1B1hR,EAAIm/N,OACJn/N,EAAI/7H,UAAU7tI,EAAG2zB,GACjBi2O,EAAIwtR,YACJmB,EAAU3uR,EAAKt6J,GAEX2pb,GACFrvR,EAAI2/Q,aAAan5hB,MAAMw5Q,EAAKqvR,GAG1BE,IAAmBxqE,EAAMiM,kBAAkBwG,MAAQ+3D,IAAmBxqE,EAAMiM,kBAAkB0G,aAChG13N,EAAI54I,OAGFmoa,IAAmBxqE,EAAMiM,kBAAkByG,QAAU83D,IAAmBxqE,EAAMiM,kBAAkB0G,cAC9F43D,IACFtvR,EAAI6/Q,iBACJ7/Q,EAAI6hR,UAAYvmiB,KAAKo/E,MAAMn8E,KAAKmriB,uBAGlC1pR,EAAI1K,UAGN0K,EAAIo/N,YAEAmwD,IAAmBxqE,EAAMiM,kBAAkBwG,MAAQ+3D,IAAmBxqE,EAAMiM,kBAAkB0G,aAChG13N,EAAIo9Q,SAASY,EAAW5nhB,EAAG2zB,GAGzBwlgB,IAAmBxqE,EAAMiM,kBAAkByG,QAAU83D,IAAmBxqE,EAAMiM,kBAAkB0G,cAC9F43D,GACFtvR,EAAIm/N,OACJn/N,EAAI4uB,OAAOx4R,EAAG2zB,GACdi2O,EAAI6/Q,iBACJ7/Q,EAAI6hR,UAAYvmiB,KAAKo/E,MAAMn8E,KAAKmriB,sBAChC1pR,EAAI0vR,WAAW1R,EAAW,EAAG,GAC7Bh+Q,EAAIo/N,WAEJp/N,EAAI0vR,WAAW1R,EAAW5nhB,EAAG2zB,KAK/BylgB,IACUjxiB,KAAKmwiB,mBAAqBnwiB,KAAKmwiB,iBAAmB,KACxD/jiB,KAAK,CACTiwH,UAAWolJ,EAAIm/Q,oBACf/ohB,EAAGA,EACH2zB,EAAGA,EACH27E,SAAUA,EACVipb,UAAWA,MAIhB,CACD9riB,IAAK,0BACLP,IAAK,WACH,IACI09Q,EADwBzhR,KAAKuqiB,eAAeU,UAAU,0BAA2B,GAAI,IACzD/hiB,QAEhCu4Q,EAAIoqC,MAAM,IAAK,GACfpqC,EAAIo9Q,SAAS,IAAK,EAAG,IAIrB,IAHA,IAAI7jf,EAAOymO,EAAIq9Q,aAAa,EAAG,EAAG,GAAI,IAAI9jf,KACtCsvO,GAAU,EAELtnR,EAAI,EAAGA,EAAIg4C,EAAKn5C,OAAQmB,GAAK,EACpC,GAAIg4C,EAAKh4C,GAAK,GAAKg4C,EAAKh4C,GAAK,IAAK,CAChCsnR,GAAU,EACV,MAIJ,OAAO,EAAIk8M,EAAM1kW,QAAQ9hI,KAAM,0BAA2BsqR,KAE3D,CACDhmR,IAAK,WACL5I,MAAO,SAAkB01iB,GACvB,IAAItpgB,EAAU9nC,KAAK8nC,QACfi+c,EAAOj+c,EAAQi+c,KAEnB,GAAIA,EAAKyqD,YACP,OAAOxwiB,KAAKqxiB,cAAcD,GAG5B,IAAIjqb,EAAWr/E,EAAQq/E,SAEvB,GAAiB,IAAbA,EAAJ,CAIA,IAsBI2pb,EAtBArvR,EAAMzhR,KAAKyhR,IACX6gR,EAAgBx6f,EAAQw6f,cACxBM,EAAc96f,EAAQ86f,YACtBC,EAAc/6f,EAAQ+6f,YACtB0N,EAAgBzogB,EAAQyogB,cACxBzN,EAAah7f,EAAQg7f,WAAayN,EAClCe,EAAeF,EAAOvviB,OACtBk+R,EAAWgmN,EAAKhmN,SAChBwxQ,EAAaxxQ,EAAW,GAAK,EAC7ByxQ,EAAkBzrD,EAAKyrD,gBACvBC,EAAoBtqb,EAAWr/E,EAAQ26f,WAAW,GAClDiP,EAAiB5pgB,EAAQi7f,oBAAsBv8D,EAAMiM,kBAAkBwG,OAAS8M,EAAKi+B,kBAAoBl8e,EAAQq7f,YAarH,GAZA1hR,EAAIm/N,OACJn/N,EAAIplJ,UAAUp0H,MAAMw5Q,EAAK35O,EAAQy6f,YACjC9gR,EAAI/7H,UAAU59G,EAAQjwB,EAAGiwB,EAAQ0D,EAAI1D,EAAQk7f,UAEzCuN,EAAgB,EAClB9uR,EAAIoqC,MAAMi3O,GAAa,GAEvBrhR,EAAIoqC,MAAMi3O,EAAY,GAKpBh7f,EAAQq7f,YAAa,CACvB1hR,EAAIm/N,OACJ,IAAIjsT,EAAU7sJ,EAAQm7f,UAAUqK,WAAW7rR,EAAKzhR,KAAMyhR,EAAI2rR,2BAA4B5M,EAAgB2D,SAASlrD,MAC/G63D,EAAmBrvR,EAAIm/Q,oBACvBn/Q,EAAIo/N,UACJp/N,EAAIslR,UAAYpyW,EAGlB,IAAI2uW,EAAYx7f,EAAQw7f,UACpByN,GAAsB,EACtBllP,EAAQ/jR,EAAQ06f,gBAEpB,GAAc,IAAV32O,GAA6B,IAAdy3O,EAAiB,CAClC,IAAI0N,EAAiBlpgB,EAAQi7f,kBAAoBv8D,EAAMiM,kBAAkBgH,iBAErEu3D,IAAmBxqE,EAAMiM,kBAAkByG,QAAU83D,IAAmBxqE,EAAMiM,kBAAkB0G,cAClGn5e,KAAK4qiB,2BAA6B,KAElCmG,GADAzN,EAAYtjiB,KAAK+viB,uBACiB,QAGpCzM,GAAaz3O,EAGO,IAAlBy2O,IACF7gR,EAAIoqC,MAAMy2O,EAAeA,GACzBgB,GAAahB,GAGf7gR,EAAI6hR,UAAYA,EAChB,IACItgiB,EADA6U,EAAI,EAGR,IAAK7U,EAAI,EAAGA,EAAIsuiB,IAAgBtuiB,EAAG,CACjC,IAAIq4Q,EAAQ+1R,EAAOpuiB,GAEnB,IAAI,EAAIwje,EAAMmQ,OAAOt7N,GACnBxjQ,GAAK05hB,EAAal2R,EAAQl0J,EAAW,QADvC,CAKA,IAAIwqb,GAAgB,EAChBr3d,GAAW+gM,EAAMu2R,QAAU/O,EAAc,GAAKD,EAC9CnD,EAAYpkR,EAAMw2R,SAClBC,EAASz2R,EAAMy2R,OACfC,OAAU,EACVC,OAAU,EACV12d,EAAQ+/L,EAAM//L,MAElB,GAAIykN,EAAU,CACZ,IAAIkyQ,EAAU52R,EAAM42R,SAAWT,EAC3BU,IAAO72R,EAAM42R,QAAUA,EAAQ,GAAa,GAAR32d,GAAem2d,EACnDU,EAAKF,EAAQ,GAAKR,EACtBn2d,EAAQ22d,GAAWA,EAAQ,GAAK32d,EAChCy2d,EAAUG,EAAK5P,EACf0P,GAAWn6hB,EAAIs6hB,GAAM7P,OAErByP,EAAUl6hB,EAAIyqhB,EACd0P,EAAU,EAGZ,GAAIjsD,EAAKqsD,WAAa92d,EAAQ,EAAG,CAC/B,IAAI+2d,EAAmD,IAAnC5wR,EAAI6wR,YAAY7S,GAAWnkd,MAAe6rC,EAAWm7a,EAEzE,GAAIhnd,EAAQ+2d,GAAiBryiB,KAAKuyiB,wBAAyB,CACzD,IAAIC,EAAkBl3d,EAAQ+2d,EAC9BV,GAAgB,EAChBlwR,EAAIm/N,OACJn/N,EAAIoqC,MAAM2mP,EAAiB,GAC3BT,GAAWS,OACFl3d,IAAU+2d,IACnBN,IAAYz2d,EAAQ+2d,GAAiB,IAAOlrb,EAAWm7a,GAI3D,GAAItiiB,KAAKqqiB,iBAAmBhvR,EAAMo3R,UAAY1sD,EAAKk3C,aACjD,GAAIyU,IAAmBI,EACrBrwR,EAAIo9Q,SAASY,EAAWsS,EAASC,QAIjC,GAFAhyiB,KAAK0yiB,UAAUjT,EAAWsS,EAASC,EAASlB,EAAkBC,GAE1De,EAAQ,CACV,IAAIa,EAAgBZ,EAAU5qb,EAAW2qb,EAAOhkiB,OAAO+J,EAAIyqhB,EACvDsQ,EAAgBZ,EAAU7qb,EAAW2qb,EAAOhkiB,OAAO09B,EAAI82f,EAC3DtiiB,KAAK0yiB,UAAUZ,EAAOD,SAAUc,EAAeC,EAAe9B,EAAkBC,GAatFl5hB,GANIkoR,EACUzkN,EAAQm2d,EAAoBn3d,EAAUi2d,EAEtCj1d,EAAQm2d,EAAoBn3d,EAAUi2d,EAKhDoB,GACFlwR,EAAIo/N,WAIJ9gN,EACFj4P,EAAQ0D,GAAK3zB,EAEbiwB,EAAQjwB,GAAKA,EAAIirhB,EAGnBrhR,EAAIo/N,UACJ7gf,KAAKi1E,aAGN,CACD3wE,IAAK,gBACL5I,MAAO,SAAuB01iB,GAC5B,IAYIpuiB,EAAGq4Q,EAAO//L,EAAOu3d,EAZjBpxR,EAAMzhR,KAAKyhR,IACX35O,EAAU9nC,KAAK8nC,QACfi+c,EAAOj+c,EAAQi+c,KACf5+X,EAAWr/E,EAAQq/E,SACnBopb,EAAgBzogB,EAAQyogB,cACxBgB,EAAaxrD,EAAKhmN,SAAW,GAAK,EAClC6iQ,EAAc96f,EAAQ86f,YACtBC,EAAc/6f,EAAQ+6f,YACtBC,EAAah7f,EAAQg7f,WAAayN,EAClC9N,EAAa36f,EAAQ26f,YAAcj8D,EAAMiN,qBACzC69D,EAAeF,EAAOvviB,OAI1B,GAHsBimC,EAAQi7f,oBAAsBv8D,EAAMiM,kBAAkB2G,WAGxC,IAAbjyX,EAAvB,CAUA,IANAnnH,KAAK4qiB,2BAA6B,KAClCnpR,EAAIm/N,OACJn/N,EAAIplJ,UAAUp0H,MAAMw5Q,EAAK35O,EAAQy6f,YACjC9gR,EAAI/7H,UAAU59G,EAAQjwB,EAAGiwB,EAAQ0D,GACjCi2O,EAAIoqC,MAAMi3O,EAAYyN,GAEjBvtiB,EAAI,EAAGA,EAAIsuiB,IAAgBtuiB,EAG9B,GAFAq4Q,EAAQ+1R,EAAOpuiB,IAEX,EAAIwje,EAAMmQ,OAAOt7N,GACnBw3R,EAAgBtB,EAAal2R,EAAQl0J,EAAW,IAChDnnH,KAAKyhR,IAAI/7H,UAAUmtZ,EAAe,GAClC/qgB,EAAQjwB,GAAKg7hB,EAAgB/P,MAH/B,CAOA,IAAIxod,GAAW+gM,EAAMu2R,QAAU/O,EAAc,GAAKD,EAC9C1V,EAAennC,EAAK+sD,qBAAqBz3R,EAAM03R,gBAE9C7lB,GAKDlthB,KAAKqqiB,iBACPrqiB,KAAK6piB,gBAAkBxuR,EACvBr7Q,KAAK4gf,OACLn/N,EAAIoqC,MAAM1kM,EAAUA,GACpBs6J,EAAIplJ,UAAUp0H,MAAMw5Q,EAAKghR,GACzBziiB,KAAKy8hB,oBAAoBvP,GACzBlthB,KAAK6gf,WAKPvla,EAFkBkrZ,EAAM8F,KAAKC,eAAe,CAAClxN,EAAM//L,MAAO,GAAImnd,GAE1C,GAAKt7a,EAAW7sC,EACpCmnM,EAAI/7H,UAAUpqE,EAAO,GACrBxzC,EAAQjwB,GAAKyjE,EAAQwnd,IAjBnB,EAAIt8D,EAAMv+c,MAAM,oBAAqB3c,OAAO+vQ,EAAM03R,eAAgB,wBAoBtEtxR,EAAIo/N,UACJ7gf,KAAK6piB,gBAAkB,QAExB,CACDvliB,IAAK,eACL5I,MAAO,SAAsBs3iB,EAAQC,MACpC,CACD3uiB,IAAK,wBACL5I,MAAO,SAA+Bs3iB,EAAQC,EAAQC,EAAKC,EAAKC,EAAKC,GACnErziB,KAAKyhR,IAAI9rH,KAAKu9Y,EAAKC,EAAKC,EAAMF,EAAKG,EAAMF,GACzCnziB,KAAKw5Q,OACLx5Q,KAAK0hf,YAEN,CACDp9e,IAAK,oBACL5I,MAAO,SAA2B43iB,GAChC,IAEI3+W,EAFAh9I,EAAQ33C,KAIZ,GAAc,kBAAVsziB,EAAG,GAAwB,CAC7B,IAAIrtc,EAAQqtc,EAAG,GACXxJ,EAAgB9piB,KAAK8piB,eAAiB9piB,KAAKyhR,IAAIm/Q,oBAAoB9whB,QACnEyjiB,EAAwB,CAC1BC,qBAAsB,SAA8B/xR,GAClD,OAAO,IAAIw6Q,EAAex6Q,EAAK9pO,EAAMoye,WAAYpye,EAAMqye,KAAMrye,EAAM00e,iBAGvE13V,EAAU,IAAI6rW,EAAgBiT,cAAcH,EAAIrtc,EAAOjmG,KAAKyhR,IAAK8xR,EAAuBzJ,QAExFn1W,EAAU30L,KAAK0ziB,YAAYJ,EAAG,GAAIA,EAAG,IAGvC,OAAO3+W,IAER,CACDrwL,IAAK,kBACL5I,MAAO,WACLsE,KAAK8nC,QAAQo7f,YAAcljiB,KAAK2ziB,kBAAkBjwiB,aAEnD,CACDY,IAAK,gBACL5I,MAAO,WACLsE,KAAK8nC,QAAQm7f,UAAYjjiB,KAAK2ziB,kBAAkBjwiB,WAChD1D,KAAK8nC,QAAQq7f,aAAc,IAE5B,CACD7+hB,IAAK,oBACL5I,MAAO,SAA2By7E,EAAGR,EAAG/wE,GACtC,IAAIqgG,EAAQugY,EAAM8F,KAAKsnE,aAAaz8d,EAAGR,EAAG/wE,GAE1C5F,KAAKyhR,IAAIqlR,YAAc7gc,EACvBjmG,KAAK8nC,QAAQo7f,YAAcj9b,IAE5B,CACD3hG,IAAK,kBACL5I,MAAO,SAAyBy7E,EAAGR,EAAG/wE,GACpC,IAAIqgG,EAAQugY,EAAM8F,KAAKsnE,aAAaz8d,EAAGR,EAAG/wE,GAE1C5F,KAAKyhR,IAAIslR,UAAY9gc,EACrBjmG,KAAK8nC,QAAQm7f,UAAYh9b,EACzBjmG,KAAK8nC,QAAQq7f,aAAc,IAE5B,CACD7+hB,IAAK,cACL5I,MAAO,SAAqB4+hB,GAC1B,IACI3lW,EADAk/W,EAASnwiB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAcjF,OAXI1D,KAAKwqiB,eAAevmiB,IAAIq2hB,GAC1B3lW,EAAU30L,KAAKwqiB,eAAezmiB,IAAIu2hB,IAElC3lW,GAAU,EAAI6rW,EAAgBsT,mBAAmB9ziB,KAAKgqhB,KAAKjmhB,IAAIu2hB,IAC/Dt6hB,KAAKwqiB,eAAe9iiB,IAAI4yhB,EAAO3lW,IAG7Bk/W,IACFl/W,EAAQk/W,OAASA,GAGZl/W,IAER,CACDrwL,IAAK,cACL5I,MAAO,SAAqB4+hB,GAC1B,GAAKt6hB,KAAKqqiB,eAAV,CAIA,IAAI5oR,EAAMzhR,KAAKyhR,IACfzhR,KAAK4gf,OAEL,IAAIjsT,EAAU30L,KAAK0ziB,YAAYpZ,GAE/B74Q,EAAIslR,UAAYpyW,EAAQ24W,WAAW7rR,EAAKzhR,KAAMyhR,EAAI2rR,2BAA4B5M,EAAgB2D,SAAS4P,SACvG,IAAIC,EAAMvyR,EAAI2rR,2BAEd,GAAI4G,EAAK,CACP,IAAI5qE,EAAS3nN,EAAI2nN,OACb9tZ,EAAQ8tZ,EAAO9tZ,MACfi2C,EAAS63W,EAAO73W,OAEhB0ib,EAAKztE,EAAM8F,KAAKC,eAAe,CAAC,EAAG,GAAIynE,GAEvCx2Y,EAAKgpU,EAAM8F,KAAKC,eAAe,CAAC,EAAGh7W,GAASyib,GAE5CE,EAAK1tE,EAAM8F,KAAKC,eAAe,CAACjxZ,EAAO,GAAI04d,GAE3CG,EAAK3tE,EAAM8F,KAAKC,eAAe,CAACjxZ,EAAOi2C,GAASyib,GAEhD7rD,EAAKprf,KAAKE,IAAIg3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtC/rD,EAAKrrf,KAAKE,IAAIg3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtCj8R,EAAKn7Q,KAAKC,IAAIi3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtCh8R,EAAKp7Q,KAAKC,IAAIi3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IAC1Cn0iB,KAAKyhR,IAAIspR,SAAS5iD,EAAIC,EAAIlwO,EAAKiwO,EAAIhwO,EAAKiwO,QAExCpof,KAAKyhR,IAAIspR,UAAU,MAAO,KAAM,KAAM,MAGxC/qiB,KAAKi1E,QAAQj1E,KAAK8nC,QAAQmogB,6BAC1BjwiB,KAAK6gf,aAEN,CACDv8e,IAAK,mBACL5I,MAAO,YACL,EAAI8qe,EAAMqR,aAAa,sCAExB,CACDvze,IAAK,iBACL5I,MAAO,YACL,EAAI8qe,EAAMqR,aAAa,oCAExB,CACDvze,IAAK,wBACL5I,MAAO,SAA+Bm4iB,EAAQzzH,GAC5C,GAAKpgb,KAAKqqiB,iBAIVrqiB,KAAK4gf,OACL5gf,KAAK+piB,mBAAmB39hB,KAAKpM,KAAK8piB,eAE9BroiB,MAAMC,QAAQmyiB,IAA6B,IAAlBA,EAAOhyiB,QAClC7B,KAAKq8H,UAAUp0H,MAAMjI,KAAM6ziB,GAG7B7ziB,KAAK8piB,cAAgB9piB,KAAKyhR,IAAIm/Q,oBAE1BxgH,GAAM,CACR,IAAI9kW,EAAQ8kW,EAAK,GAAKA,EAAK,GACvB7uT,EAAS6uT,EAAK,GAAKA,EAAK,GAC5Bpgb,KAAKyhR,IAAI9rH,KAAKyqR,EAAK,GAAIA,EAAK,GAAI9kW,EAAOi2C,GACvCvxH,KAAK8nC,QAAQm8f,iBAAiBjkiB,KAAKyhR,IAAIm/Q,oBAAqBxgH,EAAK,GAAIA,EAAK,IAC1Epgb,KAAK8nC,QAAQm8f,iBAAiBjkiB,KAAKyhR,IAAIm/Q,oBAAqBxgH,EAAK,GAAIA,EAAK,IAC1Epgb,KAAKw5Q,OACLx5Q,KAAK0hf,aAGR,CACDp9e,IAAK,sBACL5I,MAAO,WACAsE,KAAKqqiB,iBAIVrqiB,KAAK6gf,UACL7gf,KAAK8piB,cAAgB9piB,KAAK+piB,mBAAmB19hB,SAE9C,CACD/H,IAAK,aACL5I,MAAO,SAAoB4kJ,GACzB,GAAKtgJ,KAAKqqiB,eAAV,CAIArqiB,KAAK4gf,OACL,IAAIwpD,EAAepqiB,KAAKoqiB,aAEpBpqiB,KAAK8nC,QAAQy7f,cACfvjiB,KAAKoqiB,aAAe,KACpBpqiB,KAAK8nC,QAAQy7f,YAAc,MAG7B,IAAI6Q,EAAap0iB,KAAKyhR,IAEjBnhI,EAAM+zZ,WACT,EAAI7tE,EAAMrpR,MAAM,sCAGd78D,EAAMg0Z,WACR,EAAI9tE,EAAMv+c,MAAM,kCAGlB,IAAIsshB,EAAmBH,EAAWxT,oBAMlC,GAJItgZ,EAAMuzZ,QACRO,EAAW/3a,UAAUp0H,MAAMmsiB,EAAY9zZ,EAAMuzZ,SAG1CvzZ,EAAM8/R,KACT,MAAM,IAAIx4a,MAAM,6BAGlB,IAAIood,EAASwW,EAAM8F,KAAKkoE,2BAA2Bl0Z,EAAM8/R,KAAMg0H,EAAWxT,qBAEtE6T,EAAe,CAAC,EAAG,EAAGL,EAAWhrE,OAAO9tZ,MAAO84d,EAAWhrE,OAAO73W,QACrEy+V,EAASwW,EAAM8F,KAAKxtd,UAAUkxc,EAAQykF,IAAiB,CAAC,EAAG,EAAG,EAAG,GACjE,IAAIrpE,EAAUrue,KAAKwjB,MAAMyvc,EAAO,IAC5Bsb,EAAUvue,KAAKwjB,MAAMyvc,EAAO,IAC5B88E,EAAa/viB,KAAKC,IAAID,KAAKqjB,KAAK4vc,EAAO,IAAMob,EAAS,GACtD2hE,EAAchwiB,KAAKC,IAAID,KAAKqjB,KAAK4vc,EAAO,IAAMsb,EAAS,GACvDv6I,EAAS,EACTC,EAAS,EAET87M,EAAarM,IACf1vM,EAAS+7M,EAAarM,EACtBqM,EAAarM,GAGXsM,EAActM,IAChBzvM,EAAS+7M,EAActM,EACvBsM,EAActM,GAGhBzgiB,KAAK8nC,QAAQ27f,uBAAuB,CAAC,EAAG,EAAGqJ,EAAYC,IACvD,IAAIe,EAAU,UAAY9tiB,KAAKgqiB,WAE3B1pZ,EAAMulW,QACRioD,GAAW,UAAY9tiB,KAAKkqiB,eAAiB,GAG/C,IAAI6D,EAAgB/tiB,KAAKuqiB,eAAeU,UAAU6C,EAAShB,EAAYC,GAAa,GAChF2H,EAAW3G,EAAc7kiB,QAC7BwriB,EAAS7oP,MAAM,EAAIklC,EAAQ,EAAIC,GAC/B0jN,EAAShvZ,WAAW0lV,GAAUE,GAC9BopE,EAASr4a,UAAUp0H,MAAMysiB,EAAUH,GAE/Bj0Z,EAAMulW,MACR7lf,KAAKiqiB,WAAW79hB,KAAK,CACnBg9d,OAAQ2kE,EAAc3kE,OACtBlge,QAASwriB,EACTtpE,QAASA,EACTE,QAASA,EACTv6I,OAAQA,EACRC,OAAQA,EACRs3M,QAAShoZ,EAAMulW,MAAMyiD,QACrBC,SAAUjoZ,EAAMulW,MAAM0iD,SACtBX,YAAatnZ,EAAMulW,MAAM+hD,aAAe,KACxC+M,sBAAuB,QAGzBP,EAAWhT,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GACvCgT,EAAW1uZ,UAAU0lV,EAASE,GAC9B8oE,EAAWvoP,MAAMklC,EAAQC,GACzBojN,EAAWxzD,QAGb2lD,EAAa6N,EAAYM,GACzB10iB,KAAKyhR,IAAMizR,EACX10iB,KAAK2gf,UAAU,CAAC,CAAC,KAAM,eAAgB,CAAC,KAAM,GAAI,CAAC,KAAM,KACzD3gf,KAAK4piB,WAAWx9hB,KAAK,CACnBq1Q,IAAK2yR,EACLhK,aAAcA,IAEhBpqiB,KAAKgqiB,gBAEN,CACD1liB,IAAK,WACL5I,MAAO,SAAkB4kJ,GACvB,GAAKtgJ,KAAKqqiB,eAAV,CAIArqiB,KAAKgqiB,aACL,IAAI0K,EAAW10iB,KAAKyhR,IAEhBmzR,EAAuB50iB,KAAK4piB,WAAWv9hB,MACvCo1Q,EAAMmzR,EAAqBnzR,IAC3B2oR,EAAewK,EAAqBxK,aASxC,GAPApqiB,KAAKyhR,IAAMA,EACXzhR,KAAKyhR,IAAI4rR,uBAAwB,EAE7BjD,IACFpqiB,KAAKoqiB,aAAeA,GAGlB9pZ,EAAMulW,MACR7lf,KAAKmqiB,UAAYnqiB,KAAKiqiB,WAAW59hB,MACjCrM,KAAK6gf,cACA,CACL7gf,KAAKyhR,IAAIo/N,UACT,IAAIg0D,EAAa70iB,KAAKyhR,IAAIm/Q,oBAC1B5giB,KAAK6gf,UACL7gf,KAAKyhR,IAAIm/N,OACT5gf,KAAKyhR,IAAI2/Q,aAAan5hB,MAAMjI,KAAKyhR,IAAKozR,GAEtC,IAAItF,EAAW/oE,EAAM8F,KAAKkoE,2BAA2B,CAAC,EAAG,EAAGE,EAAStrE,OAAO9tZ,MAAOo5d,EAAStrE,OAAO73W,QAASsjb,GAE5G70iB,KAAKyhR,IAAIqnR,UAAU4L,EAAStrE,OAAQ,EAAG,GACvCppe,KAAKyhR,IAAIo/N,UACT7gf,KAAKi1E,QAAQs6d,OAGhB,CACDjriB,IAAK,mBACL5I,MAAO,WACLsE,KAAK4gf,OAED5gf,KAAK8piB,eACP9piB,KAAKyhR,IAAI2/Q,aAAan5hB,MAAMjI,KAAKyhR,IAAKzhR,KAAK8piB,iBAG9C,CACDxliB,IAAK,iBACL5I,MAAO,WACLsE,KAAK6gf,YAEN,CACDv8e,IAAK,kBACL5I,MAAO,SAAyBulC,EAAI00H,EAAMt5B,EAAWw3a,EAAQiB,GAG3D,GAFA90iB,KAAK4gf,OAEDn/e,MAAMC,QAAQi0J,IAAyB,IAAhBA,EAAK9zJ,OAAc,CAC5C,IAAIy5E,EAAQq6E,EAAK,GAAKA,EAAK,GACvBpkC,EAASokC,EAAK,GAAKA,EAAK,GAE5B,GAAIm/Y,GAAgB90iB,KAAK0shB,oBAAqB,EAC5CrwZ,EAAYA,EAAUvsH,SACZ,IAAM6lJ,EAAK,GACrBt5B,EAAU,IAAMs5B,EAAK,IACrBA,EAAOA,EAAK7lJ,SACP,GAAK6lJ,EAAK,GAAK,EACpBA,EAAK,GAAKr6E,EACVq6E,EAAK,GAAKpkC,EAEV,IACIwjb,EAAyB5hgB,EADDqzb,EAAM8F,KAAK83D,8BAA8BpkiB,KAAKyhR,IAAIm/Q,qBACX,GAC/D7vM,EAASgkN,EAAuB,GAChC/jN,EAAS+jN,EAAuB,GAEhCtK,EAAgBzqiB,KAAKyqiB,cACrBuK,EAAcj4iB,KAAKqjB,KAAKk7D,EAAQt7E,KAAK0qiB,aAAeD,GACpDwK,EAAel4iB,KAAKqjB,KAAKmxG,EAASvxH,KAAK2qiB,aAAeF,GAC1DzqiB,KAAKk1iB,iBAAmBl1iB,KAAKqshB,cAAchuhB,OAAO22iB,EAAaC,GAC/D,IAAIE,EAAwBn1iB,KAAKk1iB,iBAC7B9rE,EAAS+rE,EAAsB/rE,OAC/Blge,EAAUisiB,EAAsBjsiB,QACpCkge,EAAO9tX,MAAMhgC,MAAQ,QAAQhwE,OAAOgwE,EAAO,sCAC3C8tZ,EAAO9tX,MAAMiW,OAAS,QAAQjmH,OAAOimH,EAAQ,sCAC7CvxH,KAAK0shB,oBAAoBhlhB,IAAIu5B,EAAImoc,GACjCppe,KAAKk1iB,iBAAiBE,SAAWp1iB,KAAKyhR,IACtCzhR,KAAKyhR,IAAMv4Q,EACXlJ,KAAKyhR,IAAI2/Q,aAAarwM,EAAQ,EAAG,GAAIC,EAAQ,EAAGz/N,EAASy/N,GACzD2vM,EAA2B3giB,KAAKyhR,KAChColR,EAAkB7miB,KAAKyhR,UAEvBolR,EAAkB7miB,KAAKyhR,KACvBzhR,KAAKyhR,IAAI9rH,KAAKA,EAAK,GAAIA,EAAK,GAAIr6E,EAAOi2C,GACvCvxH,KAAKw5Q,OACLx5Q,KAAK0hf,UAIT1hf,KAAK8nC,QAAU,IAAIs6f,EAAiBpiiB,KAAKyhR,IAAI2nN,OAAO9tZ,MAAOt7E,KAAKyhR,IAAI2nN,OAAO73W,QAC3EvxH,KAAKq8H,UAAUp0H,MAAMjI,KAAMq8H,GAC3Br8H,KAAKq8H,UAAUp0H,MAAMjI,KAAM6ziB,KAE5B,CACDvviB,IAAK,gBACL5I,MAAO,WACDsE,KAAKk1iB,mBACPl1iB,KAAKyhR,IAAMzhR,KAAKk1iB,iBAAiBE,gBAC1Bp1iB,KAAKk1iB,iBAAiBE,gBACtBp1iB,KAAKk1iB,kBAGdl1iB,KAAK6gf,YAEN,CACDv8e,IAAK,wBACL5I,MAAO,SAA+B65J,GACpC,GAAKv1J,KAAKqqiB,eAAV,CAIA,IAAI5oR,EAAMzhR,KAAKyhR,IACXnmM,EAAQi6E,EAAIj6E,MACZi2C,EAASgkC,EAAIhkC,OACb8pJ,EAAQr7Q,KAAK6piB,gBAcjB,GAZ4BxuR,QAA4Bv/Q,IAAnBu/Q,EAAMg6R,WAEvCh6R,EAAMg6R,SADJ/5d,GAz6Ec,KAy6EkBi2C,GAz6ElB,IAuS1B,SAA2B04M,GACzB,IAKIjnU,EAAGkB,EAAIszE,EAAG89d,EAJVC,EAAc,IAAI//Y,WAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAC5El6E,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OACjBikb,EAASl6d,EAAQ,EAEjB2/L,EAAS,IAAIzlH,WAAWggZ,GAAUjkb,EAAS,IAC3Ckkb,EAAWn6d,EAAQ,GAAI,EACvBo6d,EAAQzrO,EAAQjvR,KAChBA,EAAO,IAAIw6G,WAAWigZ,EAAWlkb,GACjCsjC,EAAM,EAEV,IAAK7xJ,EAAI,EAAGkB,EAAKwxiB,EAAM7ziB,OAAQmB,EAAIkB,EAAIlB,IAIrC,IAHA,IAAIsjiB,EAAOoP,EAAM1yiB,GACbs2Q,EAAO,IAEJA,EAAO,GACZt+N,EAAK65G,KAASyxY,EAAOhtR,EAAO,EAAI,IAChCA,IAAS,EAIb,IAAIlkQ,EAAQ,EAQZ,IALkB,IAAd4lC,EAFJ65G,EAAM,KAGJomH,EAAO,GAAK,IACV7lQ,GAGCoiE,EAAI,EAAGA,EAAI8D,EAAO9D,IACjBx8B,EAAK65G,KAAS75G,EAAK65G,EAAM,KAC3BomH,EAAOzjM,GAAKx8B,EAAK65G,GAAO,EAAI,IAC1Bz/I,GAGJy/I,IAQF,IALkB,IAAd75G,EAAK65G,KACPomH,EAAOzjM,GAAK,IACVpiE,GAGCpS,EAAI,EAAGA,EAAIuuH,EAAQvuH,IAAK,CAE3BsyiB,EAAKtyiB,EAAIwyiB,EAELx6f,GAHJ65G,EAAM7xJ,EAAIyyiB,GAGKA,KAAcz6f,EAAK65G,KAChComH,EAAOq6R,GAAMt6f,EAAK65G,GAAO,EAAI,IAC3Bz/I,GAGJ,IAAIxJ,GAAOovC,EAAK65G,GAAO,EAAI,IAAM75G,EAAK65G,EAAM4gZ,GAAY,EAAI,GAE5D,IAAKj+d,EAAI,EAAGA,EAAI8D,EAAO9D,IAGjB+9d,EAFJ3piB,GAAOA,GAAO,IAAMovC,EAAK65G,EAAM,GAAK,EAAI,IAAM75G,EAAK65G,EAAM4gZ,EAAW,GAAK,EAAI,MAG3Ex6R,EAAOq6R,EAAK99d,GAAK+9d,EAAY3piB,KAC3BwJ,GAGJy/I,IAQF,GALI75G,EAAK65G,EAAM4gZ,KAAcz6f,EAAK65G,KAChComH,EAAOq6R,EAAK99d,GAAKx8B,EAAK65G,GAAO,EAAI,IAC/Bz/I,GAGAA,EAvEuB,IAwEzB,OAAO,KAYX,IAPAkgiB,EAAKtyiB,EAAIwyiB,EAES,IAAdx6f,EAHJ65G,EAAM4gZ,GAAYlkb,EAAS,MAIzB0pJ,EAAOq6R,GAAM,IACXlgiB,GAGCoiE,EAAI,EAAGA,EAAI8D,EAAO9D,IACjBx8B,EAAK65G,KAAS75G,EAAK65G,EAAM,KAC3BomH,EAAOq6R,EAAK99d,GAAKx8B,EAAK65G,GAAO,EAAI,IAC/Bz/I,GAGJy/I,IAQF,GALkB,IAAd75G,EAAK65G,KACPomH,EAAOq6R,EAAK99d,GAAK,IACfpiE,GAGAA,EAlGyB,IAmG3B,OAAO,KAGT,IAAI9H,EAAQ,IAAIqoiB,WAAW,CAAC,EAAGH,GAAS,EAAG,GAAIA,EAAQ,EAAG,EAAG,EAAG,IAC5DI,EAAW,GAEf,IAAK5yiB,EAAI,EAAGoS,GAASpS,GAAKuuH,EAAQvuH,IAAK,CAIrC,IAHA,IAAIyyE,EAAIzyE,EAAIwyiB,EACRh5iB,EAAMi5E,EAAI6F,EAEP7F,EAAIj5E,IAAQy+Q,EAAOxlM,IACxBA,IAGF,GAAIA,IAAMj5E,EAAV,CAIA,IAAIq5iB,EAAS,CAACpge,EAAI+/d,EAAQxyiB,GACtB8yiB,EAAKrge,EACLv1E,EAAO+6Q,EAAOxlM,GAElB,EAAG,CACD,IAAI7wE,EAAO0I,EAAMpN,GAEjB,GACEu1E,GAAK7wE,SACGq2Q,EAAOxlM,IAEjB,IAAIsge,EAAK96R,EAAOxlM,GAEL,IAAPsge,GAAmB,KAAPA,GACd71iB,EAAO61iB,EACP96R,EAAOxlM,GAAK,IAEZv1E,EAAO61iB,EAAK,GAAO71iB,GAAQ,EAC3B+6Q,EAAOxlM,IAAMv1E,GAAQ,EAAIA,GAAQ,GAGnC21iB,EAAOzpiB,KAAKqpE,EAAI+/d,EAAQ//d,EAAI+/d,EAAS,GAEhCv6R,EAAOxlM,MACRrgE,QAEG0giB,IAAOrge,GAEhBmge,EAASxpiB,KAAKypiB,KACZ7yiB,GAuBJ,OApBkB,SAAqB6C,GACrCA,EAAE+6e,OACF/6e,EAAEgmT,MAAM,EAAIvwO,GAAQ,EAAIi2C,GACxB1rH,EAAE6/I,UAAU,GAAIn0B,GAChB1rH,EAAEopiB,YAEF,IAAK,IAAI9uiB,EAAI,EAAG61iB,EAAKJ,EAAS/ziB,OAAQ1B,EAAI61iB,EAAI71iB,IAAK,CACjD,IAAIgG,EAAIyviB,EAASz1iB,GACjB0F,EAAEwqS,OAAOlqS,EAAE,GAAIA,EAAE,IAEjB,IAAK,IAAIkiB,EAAI,EAAG4thB,EAAK9viB,EAAEtE,OAAQwmB,EAAI4thB,EAAI5thB,GAAK,EAC1CxiB,EAAEi7e,OAAO36e,EAAEkiB,GAAIliB,EAAEkiB,EAAI,IAIzBxiB,EAAEgjI,OACFhjI,EAAEopiB,YACFppiB,EAAEg7e,WA49DqBq1D,CAAkB,CACjCl7f,KAAMu6G,EAAIv6G,KACVsgC,MAAOA,EACPi2C,OAAQA,IAGO,MAIP,OAAV8pJ,QAA4B,IAAVA,GAAoBA,EAAMg6R,SAC9Ch6R,EAAMg6R,SAAS5zR,OADjB,CAKA,IAAInI,EAAOt5Q,KAAKm2iB,kBAAkB5gZ,GAE9Bk3Y,EAAanzR,EAAK8vN,OACtB3nN,EAAIm/N,OACJn/N,EAAI2/Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GAChC3/Q,EAAIqnR,UAAU2D,EAAYnzR,EAAK8xN,QAAS9xN,EAAKgyN,SAC7C7pN,EAAIo/N,UACJ7gf,KAAKi1E,cAEN,CACD3wE,IAAK,8BACL5I,MAAO,SAAqCuuU,EAAS8mB,GACnD,IAAIygK,EAAQ9tf,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC5E+tf,EAAQ/tf,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC5EstV,EAASttV,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAC/Cwjb,EAAY57a,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAEtD,GAAKkE,KAAKqqiB,eAAV,CAIA,IAAI5oR,EAAMzhR,KAAKyhR,IACfA,EAAIm/N,OACJ,IAAI2zD,EAAmB9yR,EAAIm/Q,oBAC3Bn/Q,EAAIplJ,UAAU00N,EAAQygK,EAAOC,EAAOzgK,EAAQ,EAAG,GAE/C,IAAI13E,EAAOt5Q,KAAKm2iB,kBAAkBlsO,GAElCxoD,EAAI2/Q,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,GAEhC,IAAK,IAAIp+hB,EAAI,EAAGkB,EAAKo7a,EAAUz9a,OAAQmB,EAAIkB,EAAIlB,GAAK,EAAG,CACrD,IAAIoziB,EAAQ5vE,EAAM8F,KAAKjwW,UAAUk4a,EAAkB,CAACxjN,EAAQygK,EAAOC,EAAOzgK,EAAQsuF,EAAUt8a,GAAIs8a,EAAUt8a,EAAI,KAE1GqziB,EAAwB7vE,EAAM8F,KAAKC,eAAe,CAAC,EAAG,GAAI6pE,GAC1DE,EAAwBnjgB,EAAekjgB,EAAuB,GAC9Dx+hB,EAAIy+hB,EAAsB,GAC1B9qgB,EAAI8qgB,EAAsB,GAE9B70R,EAAIqnR,UAAUxvR,EAAK8vN,OAAQvxd,EAAG2zB,GAGhCi2O,EAAIo/N,UACJ7gf,KAAKi1E,aAEN,CACD3wE,IAAK,6BACL5I,MAAO,SAAoCo8T,GACzC,GAAK93T,KAAKqqiB,eAAV,CAQA,IAJA,IAAI5oR,EAAMzhR,KAAKyhR,IACXwhR,EAAYjjiB,KAAK8nC,QAAQm7f,UACzBuJ,EAAgBxsiB,KAAK8nC,QAAQq7f,YAExBngiB,EAAI,EAAGkB,EAAK4zT,EAAOj2T,OAAQmB,EAAIkB,EAAIlB,IAAK,CAC/C,IAAIo3W,EAAQtiD,EAAO90T,GACfs4E,EAAQ8+R,EAAM9+R,MACdi2C,EAAS6oP,EAAM7oP,OACfk7a,EAAazsiB,KAAKuqiB,eAAeU,UAAU,aAAc3vd,EAAOi2C,GAChE82a,EAAUoE,EAAWvjiB,QACzBm/hB,EAAQznD,OACRylD,EAAmBgC,EAASjuL,GAC5BiuL,EAAQjB,yBAA2B,YACnCiB,EAAQtB,UAAYyF,EAAgBvJ,EAAUqK,WAAWjF,EAASroiB,KAAMyhR,EAAI2rR,2BAA4B5M,EAAgB2D,SAASlrD,MAAQgqD,EACzIoF,EAAQ0C,SAAS,EAAG,EAAGzvd,EAAOi2C,GAC9B82a,EAAQxnD,UACRp/N,EAAIm/N,OACJn/N,EAAIplJ,UAAUp0H,MAAMw5Q,EAAK24F,EAAM/9O,WAC/BolJ,EAAIoqC,MAAM,GAAI,GACdpqC,EAAIqnR,UAAU2D,EAAWrjE,OAAQ,EAAG,EAAG9tZ,EAAOi2C,EAAQ,GAAI,EAAG,EAAG,GAChEkwJ,EAAIo/N,UAGN7gf,KAAKi1E,aAEN,CACD3wE,IAAK,oBACL5I,MAAO,SAA2B4+hB,GAChC,GAAKt6hB,KAAKqqiB,eAAV,CAIA,IAAIpgO,EAAUqwN,EAAM59V,WAAW,MAAQ18L,KAAK+phB,WAAWhmhB,IAAIu2hB,GAASt6hB,KAAKgqhB,KAAKjmhB,IAAIu2hB,GAE7ErwN,EAKLjqU,KAAKmlf,wBAAwBl7K,IAJ3B,EAAIu8J,EAAMv+c,MAAM,sCAMnB,CACD3jB,IAAK,0BACL5I,MAAO,SAAiC4+hB,EAAOvpM,EAAQC,EAAQsuF,GAC7D,GAAKt/a,KAAKqqiB,eAAV,CAIA,IAAIpgO,EAAUqwN,EAAM59V,WAAW,MAAQ18L,KAAK+phB,WAAWhmhB,IAAIu2hB,GAASt6hB,KAAKgqhB,KAAKjmhB,IAAIu2hB,GAElF,GAAKrwN,EAAL,CASA,IAJA,IAAI3uP,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OACjBvoH,EAAM,GAEDhG,EAAI,EAAGkB,EAAKo7a,EAAUz9a,OAAQmB,EAAIkB,EAAIlB,GAAK,EAClDgG,EAAIoD,KAAK,CACPiwH,UAAW,CAAC00N,EAAQ,EAAG,EAAGC,EAAQsuF,EAAUt8a,GAAIs8a,EAAUt8a,EAAI,IAC9D6U,EAAG,EACH2zB,EAAG,EACHwpH,EAAG15E,EACHj2D,EAAGksG,IAIPvxH,KAAKolf,6BAA6Bn7K,EAASjhU,QAlBzC,EAAIw9d,EAAMv+c,MAAM,sCAoBnB,CACD3jB,IAAK,0BACL5I,MAAO,SAAiCuuU,GACtC,GAAKjqU,KAAKqqiB,eAAV,CAIA,IAKIkM,EALAj7d,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OACjBkwJ,EAAMzhR,KAAKyhR,IAKf,GAJAzhR,KAAK4gf,OACLn/N,EAAIoqC,MAAM,EAAIvwO,GAAQ,EAAIi2C,GAGC,oBAAhBisL,aAA8BysB,aAAmBzsB,cAAgBysB,EAAQjvR,KAClFu7f,EAAatsO,MACR,CACL,IAAI+hO,EAAYhsiB,KAAKuqiB,eAAeU,UAAU,cAAe3vd,EAAOi2C,GAEpEiza,EADawH,EAAU9iiB,QACI+gU,EAASjqU,KAAK8nC,QAAQ07f,cACjD+S,EAAavK,EAAU5iE,OAGzB,IAAI8jE,EAASltiB,KAAKmtiB,YAAYoJ,EAAY90R,EAAI2rR,4BAK9C,GAHA3rR,EAAI4rR,sBAAwBtE,EAAyBtnR,EAAIm/Q,oBAAqB32N,EAAQ5uR,aACtFomO,EAAIqnR,UAAUoE,EAAO33Y,IAAK,EAAG,EAAG23Y,EAAOd,WAAYc,EAAOb,YAAa,GAAI96a,EAAQj2C,EAAOi2C,GAEtFvxH,KAAKmshB,WAAY,CACnB,IAAIlva,EAAWj9G,KAAKw2iB,kBAAkB,GAAIjlb,GAC1CvxH,KAAKmshB,WAAWsqB,YAAY,CAC1BxsO,QAASA,EACT1vT,KAAM0iG,EAAS,GACfqX,IAAKrX,EAAS,GACd3hC,MAAOA,EAAQmmM,EAAI2rR,2BAA2B,GAC9C77a,OAAQA,EAASkwJ,EAAI2rR,2BAA2B,KAIpDptiB,KAAKi1E,UACLj1E,KAAK6gf,aAEN,CACDv8e,IAAK,+BACL5I,MAAO,SAAsCuuU,EAASjhU,GACpD,GAAKhJ,KAAKqqiB,eAAV,CAIA,IAAI5oR,EAAMzhR,KAAKyhR,IACXzsH,EAAIi1K,EAAQ3uP,MACZj2D,EAAI4kT,EAAQ14M,OACZy6a,EAAYhsiB,KAAKuqiB,eAAeU,UAAU,cAAej2Y,EAAG3vI,GAEhEm/gB,EADawH,EAAU9iiB,QACI+gU,EAASjqU,KAAK8nC,QAAQ07f,cAEjD,IAAK,IAAIxgiB,EAAI,EAAGkB,EAAK8E,EAAInH,OAAQmB,EAAIkB,EAAIlB,IAAK,CAC5C,IAAIC,EAAQ+F,EAAIhG,GAMhB,GALAy+Q,EAAIm/N,OACJn/N,EAAIplJ,UAAUp0H,MAAMw5Q,EAAKx+Q,EAAMo5H,WAC/BolJ,EAAIoqC,MAAM,GAAI,GACdpqC,EAAIqnR,UAAUkD,EAAU5iE,OAAQnme,EAAM4U,EAAG5U,EAAMuoC,EAAGvoC,EAAM+xJ,EAAG/xJ,EAAMoiB,EAAG,GAAI,EAAG,EAAG,GAE1ErlB,KAAKmshB,WAAY,CACnB,IAAIlva,EAAWj9G,KAAKw2iB,kBAAkBvziB,EAAM4U,EAAG5U,EAAMuoC,GACrDxrC,KAAKmshB,WAAWsqB,YAAY,CAC1BxsO,QAASA,EACT1vT,KAAM0iG,EAAS,GACfqX,IAAKrX,EAAS,GACd3hC,MAAO05E,EACPzjC,OAAQlsG,IAIZo8P,EAAIo/N,UAGN7gf,KAAKi1E,aAEN,CACD3wE,IAAK,2BACL5I,MAAO,WACAsE,KAAKqqiB,iBAIVrqiB,KAAKyhR,IAAIspR,SAAS,EAAG,EAAG,EAAG,GAC3B/qiB,KAAKi1E,aAEN,CACD3wE,IAAK,YACL5I,MAAO,SAAmBw/K,MACzB,CACD52K,IAAK,iBACL5I,MAAO,SAAwBw/K,EAAKyb,MACnC,CACDryL,IAAK,qBACL5I,MAAO,SAA4Bw/K,GACjCl7K,KAAKsqiB,mBAAmBl+hB,KAAK,CAC3B4yR,SAAS,MAGZ,CACD16R,IAAK,0BACL5I,MAAO,SAAiCw/K,EAAKyb,GAC/B,OAARzb,EACFl7K,KAAKsqiB,mBAAmBl+hB,KAAK,CAC3B4yR,QAASh/R,KAAKguhB,sBAAsB3tP,UAAU1pG,KAGhD32L,KAAKsqiB,mBAAmBl+hB,KAAK,CAC3B4yR,SAAS,IAIbh/R,KAAKqqiB,eAAiBrqiB,KAAK02iB,qBAE5B,CACDpyiB,IAAK,mBACL5I,MAAO,WACLsE,KAAKsqiB,mBAAmBj+hB,MACxBrM,KAAKqqiB,eAAiBrqiB,KAAK02iB,qBAE5B,CACDpyiB,IAAK,cACL5I,MAAO,cACN,CACD4I,IAAK,YACL5I,MAAO,cACN,CACD4I,IAAK,cACL5I,MAAO,SAAqBgoiB,GACtB1jiB,KAAKypiB,aACPzpiB,KAAK8nC,QAAQ6ugB,qBAGV32iB,KAAKypiB,aACRzpiB,KAAKi1E,QAAQyud,GAGf,IAAIjiR,EAAMzhR,KAAKyhR,IAEXzhR,KAAKypiB,cACHzpiB,KAAKypiB,cAAgBH,EACvB7nR,EAAIjI,KAAK,WAETiI,EAAIjI,OAGNx5Q,KAAKypiB,YAAc,MAGrBzpiB,KAAK8nC,QAAQ27f,uBAAuBzjiB,KAAK8nC,QAAQ47f,SACjDjiR,EAAIwtR,cAEL,CACD3qiB,IAAK,sBACL5I,MAAO,WACL,GAAwC,OAApCsE,KAAK4qiB,2BAAqC,CAC5C,IAAIx4hB,EAAIpS,KAAKyhR,IAAIm/Q,oBACbgW,EAAS75iB,KAAKijB,IAAI5N,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IACzCykiB,EAAU95iB,KAAKy1O,IAAIpgO,EAAE,GAAI,GAAKrV,KAAKy1O,IAAIpgO,EAAE,GAAI,GAC7C0kiB,EAAU/5iB,KAAKy1O,IAAIpgO,EAAE,GAAI,GAAKrV,KAAKy1O,IAAIpgO,EAAE,GAAI,GAC7C2kiB,EAAch6iB,KAAK8oK,KAAK9oK,KAAKC,IAAI65iB,EAASC,IAAYF,EAEtDC,IAAYC,GAAW92iB,KAAKmriB,qBAAuB4L,EAAc,EACnE/2iB,KAAK4qiB,4BAA+B5qiB,KAAKmriB,qBAAuB4L,EACvDH,EAASj1iB,OAAOq1iB,QACzBh3iB,KAAK4qiB,2BAA6BmM,EAElC/2iB,KAAK4qiB,2BAA6B,EAItC,OAAO5qiB,KAAK4qiB,6BAEb,CACDtmiB,IAAK,oBACL5I,MAAO,SAA2Bmc,EAAG2zB,GACnC,IAAI6wF,EAAYr8H,KAAKyhR,IAAIm/Q,oBACzB,MAAO,CAACvka,EAAU,GAAKxkH,EAAIwkH,EAAU,GAAK7wF,EAAI6wF,EAAU,GAAIA,EAAU,GAAKxkH,EAAIwkH,EAAU,GAAK7wF,EAAI6wF,EAAU,MAE7G,CACD/3H,IAAK,mBACL5I,MAAO,WACL,IAAK,IAAIsH,EAAIhD,KAAKsqiB,mBAAmBzoiB,OAAS,EAAGmB,GAAK,EAAGA,IACvD,IAAKhD,KAAKsqiB,mBAAmBtniB,GAAGg8R,QAC9B,OAAO,EAIX,OAAO,MAIJi9P,EA3zDyB,GAg0DlC,IAAK,IAAIjld,KAFT77E,EAAQ8giB,eAAiBA,EAEVz1D,EAAMwM,SACkBl3e,IAAjCmgiB,EAAe99hB,UAAU64E,KAC3Bild,EAAe99hB,UAAUqoe,EAAMwM,IAAIh8Z,IAAOild,EAAe99hB,UAAU64E,KAMhE,SAAC0uZ,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQs4iB,cAAgBt4iB,EAAQgpiB,cAAW,EAC3ChpiB,EAAQ24iB,kBA+cR,SAA2BR,GACzB,OAAQA,EAAG,IACT,IAAK,cACH,OAAO,IAAI2D,EAA0B3D,GAEvC,IAAK,OACH,OAAO,IAAI4D,EAAmB5D,GAEhC,IAAK,QACH,OAAO,IAAI6D,EAGf,MAAM,IAAIvviB,MAAM,oBAAoB0D,OAAOgoiB,EAAG,MAzdhD,IAAI9sE,EAAQb,EAAoB,GAEhC,SAAS1qO,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAASnrK,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,SAASinB,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,IAAI62gB,EAAW,CACblrD,KAAM,OACNC,OAAQ,SACR66D,QAAS,WAIX,SAASqD,EAAiB31R,EAAK2+J,GAC7B,GAAKA,GAA0B,qBAAXi3H,OAApB,CAIA,IAAI/7d,EAAQ8kW,EAAK,GAAKA,EAAK,GACvB7uT,EAAS6uT,EAAK,GAAKA,EAAK,GACxBjnH,EAAS,IAAIk+O,OACjBl+O,EAAOxjK,KAAKyqR,EAAK,GAAIA,EAAK,GAAI9kW,EAAOi2C,GACrCkwJ,EAAIjI,KAAK2/C,IAXXh+T,EAAQgpiB,SAAWA,EAcnB,IAAImT,EAAkC,WACpC,SAASA,IACPlqhB,EAAgBptB,KAAMs3iB,GAElBt3iB,KAAK1B,cAAgBg5iB,IACvB,EAAI9wE,EAAMqR,aAAa,yCAW3B,OAPApgc,EAAa6/f,EAAoB,CAAC,CAChChziB,IAAK,aACL5I,MAAO,YACL,EAAI8qe,EAAMqR,aAAa,4CAIpBy/D,EAhB6B,GAmBlCL,EAAyC,SAAUM,GACrD1/d,EAAUo/d,EAA2BM,GAErC,IAAIlsR,EAASrzM,EAAai/d,GAE1B,SAASA,EAA0B3D,GACjC,IAAI37f,EAaJ,OAXAvqB,EAAgBptB,KAAMi3iB,IAEtBt/f,EAAQ0zO,EAAOrqR,KAAKhB,OACd+W,MAAQu8hB,EAAG,GACjB37f,EAAM6/f,MAAQlE,EAAG,GACjB37f,EAAM8/f,YAAcnE,EAAG,GACvB37f,EAAM+/f,IAAMpE,EAAG,GACf37f,EAAMgggB,IAAMrE,EAAG,GACf37f,EAAMiggB,IAAMtE,EAAG,GACf37f,EAAMkggB,IAAMvE,EAAG,GACf37f,EAAMk8f,OAAS,KACRl8f,EAwET,OArEAF,EAAaw/f,EAA2B,CAAC,CACvC3yiB,IAAK,kBACL5I,MAAO,SAAyB+lR,GAC9B,IAAIq2R,EAEe,UAAf93iB,KAAK+W,MACP+giB,EAAOr2R,EAAIs2R,qBAAqB/3iB,KAAK03iB,IAAI,GAAI13iB,KAAK03iB,IAAI,GAAI13iB,KAAK23iB,IAAI,GAAI33iB,KAAK23iB,IAAI,IACxD,WAAf33iB,KAAK+W,QACd+giB,EAAOr2R,EAAIu2R,qBAAqBh4iB,KAAK03iB,IAAI,GAAI13iB,KAAK03iB,IAAI,GAAI13iB,KAAK43iB,IAAK53iB,KAAK23iB,IAAI,GAAI33iB,KAAK23iB,IAAI,GAAI33iB,KAAK63iB,MAGrG,IACI13hB,EADA+sd,EAAYjyO,EAA2Bj7P,KAAKy3iB,aAGhD,IACE,IAAKvqE,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAI23iB,EAAY93hB,EAAMzkB,MACtBo8iB,EAAKI,aAAaD,EAAU,GAAIA,EAAU,KAE5C,MAAO7mgB,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,IAGZ,OAAOohe,IAER,CACDxziB,IAAK,aACL5I,MAAO,SAAoB+lR,EAAKrmQ,EAAOkjQ,EAAS4lR,GAC9C,IAAIvvW,EAEJ,GAAIuvW,IAAaC,EAASjrD,QAAUgrD,IAAaC,EAASlrD,KAAM,CAC9D,IAAIk/D,EAAY/8hB,EAAM0sB,QAAQmogB,0BAA0B/L,EAAUziR,EAAIm/Q,sBAAwB,CAAC,EAAG,EAAG,EAAG,GACpGtld,EAAQv+E,KAAKqjB,KAAK+3hB,EAAU,GAAKA,EAAU,KAAO,EAClD5mb,EAASx0H,KAAKqjB,KAAK+3hB,EAAU,GAAKA,EAAU,KAAO,EACnDnM,EAAY5whB,EAAMmvhB,eAAeU,UAAU,UAAW3vd,EAAOi2C,GAAQ,GACrE06a,EAASD,EAAU9iiB,QACvB+iiB,EAAOM,UAAU,EAAG,EAAGN,EAAO7iE,OAAO9tZ,MAAO2wd,EAAO7iE,OAAO73W,QAC1D06a,EAAOgD,YACPhD,EAAOt2Y,KAAK,EAAG,EAAGs2Y,EAAO7iE,OAAO9tZ,MAAO2wd,EAAO7iE,OAAO73W,QACrD06a,EAAOvmZ,WAAWyyZ,EAAU,IAAKA,EAAU,IAC3C75R,EAAUkoN,EAAM8F,KAAKjwW,UAAUiiJ,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG65R,EAAU,GAAIA,EAAU,KAC7ElM,EAAO5va,UAAUp0H,MAAMgkiB,EAAQ7whB,EAAM0uhB,eAEjC9piB,KAAK6ziB,QACP5H,EAAO5va,UAAUp0H,MAAMgkiB,EAAQjsiB,KAAK6ziB,QAGtCuD,EAAiBnL,EAAQjsiB,KAAKw3iB,OAC9BvL,EAAOlF,UAAY/miB,KAAKo4iB,gBAAgBnM,GACxCA,EAAOpja,OACP8rD,EAAU8sF,EAAI42R,cAAcrM,EAAU5iE,OAAQ,aAC9C,IAAIkvE,EAAY,IAAIvvD,UAAUzqO,GAE9B,IACE3pF,EAAQysW,aAAakX,GACrB,MAAOxnO,IACP,EAAI01J,EAAMv+c,MAAM,0CAA2C3c,OAAc,OAAPwlU,QAAsB,IAAPA,OAAgB,EAASA,EAAGz/R,QAAS,aAGxH+lgB,EAAiB31R,EAAKzhR,KAAKw3iB,OAC3B7iX,EAAU30L,KAAKo4iB,gBAAgB32R,GAGjC,OAAO9sF,MAIJsiX,EA3FoC,CA4F3CK,GAEF,SAASiB,EAAav9f,EAAM9xC,EAASsvO,EAAIC,EAAIC,EAAI8/T,EAAIC,EAAIC,GACvD,IAII34W,EAJA81W,EAAS3siB,EAAQ2siB,OACjB7mR,EAAS9lR,EAAQ8lR,OACjBj2K,EAAQ/9D,EAAKA,KACb29f,EAAuB,EAAb39f,EAAKsgC,MAGfu6d,EAAOr9T,EAAK,GAAKq9T,EAAOp9T,EAAK,KAC/B14C,EAAMy4C,EACNA,EAAKC,EACLA,EAAK14C,EACLA,EAAMy4W,EACNA,EAAKC,EACLA,EAAK14W,GAGH81W,EAAOp9T,EAAK,GAAKo9T,EAAOn9T,EAAK,KAC/B34C,EAAM04C,EACNA,EAAKC,EACLA,EAAK34C,EACLA,EAAM04W,EACNA,EAAKC,EACLA,EAAK34W,GAGH81W,EAAOr9T,EAAK,GAAKq9T,EAAOp9T,EAAK,KAC/B14C,EAAMy4C,EACNA,EAAKC,EACLA,EAAK14C,EACLA,EAAMy4W,EACNA,EAAKC,EACLA,EAAK14W,GAGP,IAAIm4E,GAAM29R,EAAOr9T,GAAMtvO,EAAQkie,SAAWlie,EAAQ6nV,OAC9C54E,GAAM09R,EAAOr9T,EAAK,GAAKtvO,EAAQoie,SAAWpie,EAAQ8nV,OAClD54E,GAAMy9R,EAAOp9T,GAAMvvO,EAAQkie,SAAWlie,EAAQ6nV,OAC9C14E,GAAMw9R,EAAOp9T,EAAK,GAAKvvO,EAAQoie,SAAWpie,EAAQ8nV,OAClDq3J,GAAMwtD,EAAOn9T,GAAMxvO,EAAQkie,SAAWlie,EAAQ6nV,OAC9Cu3J,GAAMutD,EAAOn9T,EAAK,GAAKxvO,EAAQoie,SAAWpie,EAAQ8nV,OAEtD,KAAI74E,GAAMmwO,GAkBV,IAdA,IAWIswD,EAAIC,EAAKC,EAAKC,EACdC,EAAIC,EAAKC,EAAKC,EAZdC,EAAMpqR,EAAOwpR,GACba,EAAMrqR,EAAOwpR,EAAK,GAClBc,EAAMtqR,EAAOwpR,EAAK,GAClBe,EAAMvqR,EAAOypR,GACbe,EAAMxqR,EAAOypR,EAAK,GAClBgB,EAAMzqR,EAAOypR,EAAK,GAClBiB,EAAM1qR,EAAO0pR,GACbiB,EAAM3qR,EAAO0pR,EAAK,GAClBkB,EAAM5qR,EAAO0pR,EAAK,GAClB7U,EAAO9miB,KAAKo/E,MAAMg8L,GAClB4rR,EAAOhniB,KAAKo/E,MAAMmsa,GAIb98c,EAAIq4f,EAAMr4f,GAAKu4f,EAAMv4f,IAAK,CACjC,GAAIA,EAAI6sO,EAAI,CACV,IAAI4tR,OAAK,EAQT2S,EAAK1gS,GAAMA,EAAKE,IALd6tR,EADEz6f,EAAI2sO,EACD,GAECA,EAAK3sO,IAAM2sO,EAAKE,IAIxBwgS,EAAMO,GAAOA,EAAMG,GAAOtT,EAC1B6S,EAAMO,GAAOA,EAAMG,GAAOvT,EAC1B8S,EAAMO,GAAOA,EAAMG,GAAOxT,MACrB,CACL,IAAIC,OAAM,EAUV0S,EAAKxgS,GAAMA,EAAKiwO,IAPd69C,EADE16f,EAAI88c,EACA,EACGjwO,IAAOiwO,EACV,GAECjwO,EAAK7sO,IAAM6sO,EAAKiwO,IAIzBuwD,EAAMU,GAAOA,EAAMG,GAAOxT,EAC1B4S,EAAMU,GAAOA,EAAMG,GAAOzT,EAC1B6S,EAAMU,GAAOA,EAAMG,GAAO1T,EAG5B,IAAI/liB,OAAI,EAUR64iB,EAAK9gS,GAAMA,EAAKmwO,IAPdlof,EADEqrC,EAAI2sO,EACF,EACK3sO,EAAI88c,EACT,GAECnwO,EAAK3sO,IAAM2sO,EAAKmwO,IAIvB2wD,EAAMG,GAAOA,EAAMM,GAAOv5iB,EAC1B+4iB,EAAMG,GAAOA,EAAMM,GAAOx5iB,EAC1Bg5iB,EAAMG,GAAOA,EAAMM,GAAOz5iB,EAK1B,IAJA,IAAI05iB,EAAM98iB,KAAKo/E,MAAMp/E,KAAKE,IAAI27iB,EAAII,IAC9Bc,EAAM/8iB,KAAKo/E,MAAMp/E,KAAKC,IAAI47iB,EAAII,IAC9Bxhe,EAAImhe,EAAUntgB,EAAU,EAANqugB,EAEbhiiB,EAAIgiiB,EAAKhiiB,GAAKiiiB,EAAKjiiB,KAC1B1X,GAAKy4iB,EAAK/giB,IAAM+giB,EAAKI,IAEb,EACN74iB,EAAI,EACKA,EAAI,IACbA,EAAI,GAGN44G,EAAMvhC,KAAOqhe,GAAOA,EAAMI,GAAO94iB,EAAI,EACrC44G,EAAMvhC,KAAOshe,GAAOA,EAAMI,GAAO/4iB,EAAI,EACrC44G,EAAMvhC,KAAOuhe,GAAOA,EAAMI,GAAOh5iB,EAAI,EACrC44G,EAAMvhC,KAAO,KAKnB,SAASuie,EAAW/+f,EAAMg/f,EAAQ9wiB,GAChC,IAEIlG,EAAGkB,EAFH85J,EAAKg8Y,EAAOnE,OACZoE,EAAKD,EAAOhrR,OAGhB,OAAQgrR,EAAO95iB,MACb,IAAK,UACH,IAAIg6iB,EAAiBF,EAAOE,eACxB11O,EAAOznU,KAAKwjB,MAAMy9I,EAAGn8J,OAASq4iB,GAAkB,EAChDC,EAAOD,EAAiB,EAE5B,IAAKl3iB,EAAI,EAAGA,EAAIwhU,EAAMxhU,IAGpB,IAFA,IAAImqJ,EAAInqJ,EAAIk3iB,EAEH1ie,EAAI,EAAGA,EAAI2ie,EAAM3ie,IAAK21E,IAC7BorZ,EAAav9f,EAAM9xC,EAAS80J,EAAG7Q,GAAI6Q,EAAG7Q,EAAI,GAAI6Q,EAAG7Q,EAAI+sZ,GAAiBD,EAAG9sZ,GAAI8sZ,EAAG9sZ,EAAI,GAAI8sZ,EAAG9sZ,EAAI+sZ,IAC/F3B,EAAav9f,EAAM9xC,EAAS80J,EAAG7Q,EAAI+sZ,EAAiB,GAAIl8Y,EAAG7Q,EAAI,GAAI6Q,EAAG7Q,EAAI+sZ,GAAiBD,EAAG9sZ,EAAI+sZ,EAAiB,GAAID,EAAG9sZ,EAAI,GAAI8sZ,EAAG9sZ,EAAI+sZ,IAI7I,MAEF,IAAK,YACH,IAAKl3iB,EAAI,EAAGkB,EAAK85J,EAAGn8J,OAAQmB,EAAIkB,EAAIlB,GAAK,EACvCu1iB,EAAav9f,EAAM9xC,EAAS80J,EAAGh7J,GAAIg7J,EAAGh7J,EAAI,GAAIg7J,EAAGh7J,EAAI,GAAIi3iB,EAAGj3iB,GAAIi3iB,EAAGj3iB,EAAI,GAAIi3iB,EAAGj3iB,EAAI,IAGpF,MAEF,QACE,MAAM,IAAI4E,MAAM,mBAItB,IAAIsviB,EAAkC,SAAUkD,GAC9Cvie,EAAUq/d,EAAoBkD,GAE9B,IAAI7vE,EAAUvyZ,EAAak/d,GAE3B,SAASA,EAAmB5D,GAC1B,IAAIlwb,EAYJ,OAVAh2F,EAAgBptB,KAAMk3iB,IAEtB9zb,EAASmnX,EAAQvpe,KAAKhB,OACfq6iB,QAAU/G,EAAG,GACpBlwb,EAAOk3b,QAAUhH,EAAG,GACpBlwb,EAAOm3b,SAAWjH,EAAG,GACrBlwb,EAAOo3b,QAAUlH,EAAG,GACpBlwb,EAAOo0b,MAAQlE,EAAG,GAClBlwb,EAAOq3b,YAAcnH,EAAG,GACxBlwb,EAAOywb,OAAS,KACTzwb,EAoGT,OAjGA3rE,EAAay/f,EAAoB,CAAC,CAChC5yiB,IAAK,oBACL5I,MAAO,SAA2Bg/iB,EAAe11b,EAAiBulb,GAChE,IAGIn/D,EAAUrue,KAAKwjB,MAAMvgB,KAAKw6iB,QAAQ,IAClClvE,EAAUvue,KAAKwjB,MAAMvgB,KAAKw6iB,QAAQ,IAClCG,EAAc59iB,KAAKqjB,KAAKpgB,KAAKw6iB,QAAQ,IAAMpvE,EAC3CwvE,EAAe79iB,KAAKqjB,KAAKpgB,KAAKw6iB,QAAQ,IAAMlvE,EAC5ChwZ,EAAQv+E,KAAKE,IAAIF,KAAKqjB,KAAKrjB,KAAKijB,IAAI26hB,EAAcD,EAAc,GAP/C,MACE,KAOnBnpb,EAASx0H,KAAKE,IAAIF,KAAKqjB,KAAKrjB,KAAKijB,IAAI46hB,EAAeF,EAAc,GARjD,MACE,KAQnB3pN,EAAS4pN,EAAcr/d,EACvB01Q,EAAS4pN,EAAerpb,EACxBroH,EAAU,CACZ2siB,OAAQ71iB,KAAKq6iB,QACbrrR,OAAQhvR,KAAKs6iB,QACblvE,SAAUA,EACVE,SAAUA,EACVv6I,OAAQ,EAAIA,EACZC,OAAQ,EAAIA,GAEV6pN,EAAcv/d,EAAQw/d,EACtBC,EAAexpb,EAASupb,EACxB9O,EAAYzB,EAAeU,UAAU,OAAQ4P,EAAaE,GAAc,GACxE9O,EAASD,EAAU9iiB,QACnB8xC,EAAOixf,EAAO3G,gBAAgBhqd,EAAOi2C,GAEzC,GAAIvM,EAGF,IAFA,IAAIjM,EAAQ/9D,EAAKA,KAERh4C,EAAI,EAAGkB,EAAK60G,EAAMl3G,OAAQmB,EAAIkB,EAAIlB,GAAK,EAC9C+1G,EAAM/1G,GAAKgiH,EAAgB,GAC3BjM,EAAM/1G,EAAI,GAAKgiH,EAAgB,GAC/BjM,EAAM/1G,EAAI,GAAKgiH,EAAgB,GAC/BjM,EAAM/1G,EAAI,GAAK,IAInB,IACImqe,EADAC,EAAanyO,EAA2Bj7P,KAAKu6iB,UAGjD,IACE,IAAKntE,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAE9Cy5iB,EAAW/+f,EADEmyb,EAAOzxe,MACKwN,GAE3B,MAAOkoC,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,IAKb,OAFAu1d,EAAOvH,aAAa1pf,EAhDF,KAkDX,CACLoub,OAFW4iE,EAAU5iE,OAGrBgC,QAASA,EApDO,EAoDiBr6I,EACjCu6I,QAASA,EArDO,EAqDiBt6I,EACjCD,OAAQA,EACRC,OAAQA,KAGX,CACD1sV,IAAK,aACL5I,MAAO,SAAoB+lR,EAAKrmQ,EAAOkjQ,EAAS4lR,GAE9C,IAAIr4O,EAEJ,GAHAurP,EAAiB31R,EAAKzhR,KAAKw3iB,OAGvBtT,IAAaC,EAAS4P,QACxBloP,EAAQ26K,EAAM8F,KAAK83D,8BAA8B3iR,EAAIm/Q,0BAIrD,GAFA/0O,EAAQ26K,EAAM8F,KAAK83D,8BAA8BhphB,EAAM0uhB,eAEnD9piB,KAAK6ziB,OAAQ,CACf,IAAImH,EAAcx0E,EAAM8F,KAAK83D,8BAA8BpkiB,KAAK6ziB,QAEhEhoP,EAAQ,CAACA,EAAM,GAAKmvP,EAAY,GAAInvP,EAAM,GAAKmvP,EAAY,IAI/D,IAAIC,EAAyBj7iB,KAAKk7iB,kBAAkBrvP,EAAOq4O,IAAaC,EAAS4P,QAAU,KAAO/ziB,KAAKy6iB,YAAar/hB,EAAMmvhB,gBAY1H,OAVIrG,IAAaC,EAAS4P,UACxBtyR,EAAI2/Q,aAAan5hB,MAAMw5Q,EAAKrmQ,EAAM0uhB,eAE9B9piB,KAAK6ziB,QACPpyR,EAAIplJ,UAAUp0H,MAAMw5Q,EAAKzhR,KAAK6ziB,SAIlCpyR,EAAI/7H,UAAUu1Z,EAAuB7vE,QAAS6vE,EAAuB3vE,SACrE7pN,EAAIoqC,MAAMovP,EAAuBlqN,OAAQkqN,EAAuBjqN,QACzDvvE,EAAI42R,cAAc4C,EAAuB7xE,OAAQ,iBAIrD8tE,EAtH6B,CAuHpCI,GAEEH,EAAmC,SAAUgE,GAC/Ctje,EAAUs/d,EAAqBgE,GAE/B,IAAItwE,EAAU7yZ,EAAam/d,GAE3B,SAASA,IAGP,OAFA/phB,EAAgBptB,KAAMm3iB,GAEftsE,EAAQ5ie,MAAMjI,KAAM0D,WAU7B,OAPA+zC,EAAa0/f,EAAqB,CAAC,CACjC7yiB,IAAK,aACL5I,MAAO,WACL,MAAO,cAIJy7iB,EAlB8B,CAmBrCG,GAiBE8D,EACO,EADPA,EAES,EAGT3H,EAA6B,WAC/B,SAASA,EAAcH,EAAIrtc,EAAOw7K,EAAK8xR,EAAuBzJ,GAC5D18gB,EAAgBptB,KAAMyziB,GAEtBzziB,KAAKkthB,aAAeomB,EAAG,GACvBtziB,KAAK6ziB,OAASP,EAAG,IAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACvCtziB,KAAKogb,KAAOkzH,EAAG,GACftziB,KAAKq7iB,MAAQ/H,EAAG,GAChBtziB,KAAKs7iB,MAAQhI,EAAG,GAChBtziB,KAAKu7iB,UAAYjI,EAAG,GACpBtziB,KAAKw7iB,WAAalI,EAAG,GACrBtziB,KAAKimG,MAAQA,EACbjmG,KAAKyhR,IAAMA,EACXzhR,KAAKuziB,sBAAwBA,EAC7BvziB,KAAK8piB,cAAgBA,EAsJvB,OAnJAryf,EAAag8f,EAAe,CAAC,CAC3BnviB,IAAK,sBACL5I,MAAO,SAA6B0f,GAClC,IAAI8xgB,EAAelthB,KAAKkthB,aACpB9sG,EAAOpgb,KAAKogb,KACZi7H,EAAQr7iB,KAAKq7iB,MACbC,EAAQt7iB,KAAKs7iB,MACbC,EAAYv7iB,KAAKu7iB,UACjBC,EAAax7iB,KAAKw7iB,WAClBv1c,EAAQjmG,KAAKimG,MACbstc,EAAwBvziB,KAAKuziB,uBACjC,EAAI/sE,EAAMrpR,MAAM,eAAiBq+V,GACjC,IAAIrzD,EAAK/nE,EAAK,GACVgoE,EAAKhoE,EAAK,GACVloK,EAAKkoK,EAAK,GACVjoK,EAAKioK,EAAK,GAEV46H,EAAcx0E,EAAM8F,KAAK83D,8BAA8BpkiB,KAAK6ziB,QAE5D4H,EAAiBj1E,EAAM8F,KAAK83D,8BAA8BpkiB,KAAK8piB,eAE/D4Q,EAAgB,CAACM,EAAY,GAAKS,EAAe,GAAIT,EAAY,GAAKS,EAAe,IACrFC,EAAO17iB,KAAK27iB,gBAAgBN,EAAOr7iB,KAAKyhR,IAAI2nN,OAAO9tZ,MAAOo/d,EAAc,IACxEkB,EAAO57iB,KAAK27iB,gBAAgBL,EAAOt7iB,KAAKyhR,IAAI2nN,OAAO73W,OAAQmpb,EAAc,IACzE1O,EAAY5whB,EAAMmvhB,eAAeU,UAAU,UAAWyQ,EAAK3/iB,KAAM6/iB,EAAK7/iB,MAAM,GAC5EkwiB,EAASD,EAAU9iiB,QACnB2yiB,EAAWtI,EAAsBC,qBAAqBvH,GAC1D4P,EAAS7R,WAAa5uhB,EAAM4uhB,WAC5BhqiB,KAAK87iB,+BAA+BD,EAAUN,EAAWt1c,GACzD,IAAI81c,EAAa5zD,EACb6zD,EAAa5zD,EACb6zD,EAAa/jS,EACbgkS,EAAa/jS,EAkBjB,OAhBIgwO,EAAK,IACP4zD,EAAa,EACbE,GAAcl/iB,KAAKijB,IAAImoe,IAGrBC,EAAK,IACP4zD,EAAa,EACbE,GAAcn/iB,KAAKijB,IAAIooe,IAGzB6jD,EAAOvmZ,WAAYg2Z,EAAK7vP,MAAQkwP,GAAeH,EAAK/vP,MAAQmwP,GAC5DH,EAASx/a,UAAUq/a,EAAK7vP,MAAO,EAAG,EAAG+vP,EAAK/vP,MAAO,EAAG,GACpD7rT,KAAKm8iB,SAASN,EAAUE,EAAYC,EAAYC,EAAYC,GAC5DL,EAAS/R,cAAgB+R,EAASp6R,IAAIm/Q,oBAAoB9whB,QAC1D+riB,EAASpf,oBAAoBvP,GAC7B2uB,EAAS1f,aACF,CACL/yD,OAAQ4iE,EAAU5iE,OAClBr4I,OAAQ2qN,EAAK7vP,MACbmlC,OAAQ4qN,EAAK/vP,MACbu/K,QAAS2wE,EACTzwE,QAAS0wE,KAGZ,CACD13iB,IAAK,kBACL5I,MAAO,SAAyBkJ,EAAMw3iB,EAAgBvwP,GACpDjnT,EAAO7H,KAAKijB,IAAIpb,GAChB,IAAIy3iB,EAAUt/iB,KAAKC,IAAIy2iB,EAAc6I,iBAAkBF,GACnDrgjB,EAAOgB,KAAKqjB,KAAKxb,EAAOinT,GAQ5B,OANI9vT,GAAQsgjB,EACVtgjB,EAAOsgjB,EAEPxwP,EAAQ9vT,EAAO6I,EAGV,CACLinT,MAAOA,EACP9vT,KAAMA,KAGT,CACDuI,IAAK,WACL5I,MAAO,SAAkBmgjB,EAAU1zD,EAAIC,EAAIlwO,EAAIC,GAC7C,IAAIokS,EAAYrkS,EAAKiwO,EACjBq0D,EAAarkS,EAAKiwO,EACtByzD,EAASp6R,IAAI9rH,KAAKwyV,EAAIC,EAAIm0D,EAAWC,GACrCX,EAASriS,OACTqiS,EAASn6D,YAEV,CACDp9e,IAAK,iCACL5I,MAAO,SAAwCmgjB,EAAUN,EAAWt1c,GAClE,IAAI/8F,EAAU2yiB,EAASp6R,IACnB35O,EAAU+zgB,EAAS/zgB,QAEvB,OAAQyzgB,GACN,KAAKH,EACH,IAAI35R,EAAMzhR,KAAKyhR,IACfv4Q,EAAQ69hB,UAAYtlR,EAAIslR,UACxB79hB,EAAQ49hB,YAAcrlR,EAAIqlR,YAC1Bh/f,EAAQm7f,UAAYxhR,EAAIslR,UACxBj/f,EAAQo7f,YAAczhR,EAAIqlR,YAC1B,MAEF,KAAKsU,EACH,IAAIqB,EAAWj2E,EAAM8F,KAAKsnE,aAAa3tc,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAEjE/8F,EAAQ69hB,UAAY0V,EACpBvziB,EAAQ49hB,YAAc2V,EACtB30gB,EAAQm7f,UAAYwZ,EACpB30gB,EAAQo7f,YAAcuZ,EACtB,MAEF,QACE,MAAM,IAAIj2E,EAAM+M,YAAY,2BAA2Bjoe,OAAOiwiB,OAGnE,CACDj3iB,IAAK,aACL5I,MAAO,SAAoB+lR,EAAKrmQ,EAAOkjQ,EAAS4lR,GAC9C,IAAI2P,EAASv1R,EAET4lR,IAAaC,EAAS4P,UACxBF,EAASrtE,EAAM8F,KAAKjwW,UAAUw3a,EAAQz4hB,EAAM0uhB,eAExC9piB,KAAK6ziB,SACPA,EAASrtE,EAAM8F,KAAKjwW,UAAUw3a,EAAQ7ziB,KAAK6ziB,UAI/C,IAAIoH,EAAyBj7iB,KAAK08iB,oBAAoBthiB,GAClDk9hB,EAAY,IAAIvvD,UAAU8qD,GAE9ByE,GADAA,EAAYA,EAAU5yZ,UAAUu1Z,EAAuB7vE,QAAS6vE,EAAuB3vE,UACjEz/K,MAAM,EAAIovP,EAAuBlqN,OAAQ,EAAIkqN,EAAuBjqN,QAC1F,IAAIr8J,EAAU8sF,EAAI42R,cAAc4C,EAAuB7xE,OAAQ,UAE/D,IACEz0S,EAAQysW,aAAakX,GACrB,MAAOxnO,IACP,EAAI01J,EAAMv+c,MAAM,8BAA+B3c,OAAc,OAAPwlU,QAAsB,IAAPA,OAAgB,EAASA,EAAGz/R,QAAS,OAG5G,OAAOsjJ,KAEP,CAAC,CACHrwL,IAAK,mBACLP,IAAK,WACH,OAAO,EAAIyie,EAAM1kW,QAAQ9hI,KAAM,mBAAoB,SAIhDyziB,EApKwB,GAuKjCt4iB,EAAQs4iB,cAAgBA,GAIjB,SAAC/tE,EAAyBvqe,GAEjC,aAGAiD,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQmphB,yBAAsB,EAC9B,IAAIA,EAAsBlmhB,OAAOC,OAAO,MACxClD,EAAQmphB,oBAAsBA,EAC9BA,EAAoBC,gBAAgDzohB,IAAnCwohB,EAAoBC,WAA2B,KAAOD,EAAoBC,WAC3GD,EAAoBoP,eAA8C53hB,IAAlCwohB,EAAoBoP,UAA0B,GAAKpP,EAAoBoP,WAIhG,SAAChuD,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQoqhB,oBAAiB,EAEzB,IAIgCz+gB,EAJ5B0he,GAI4B1he,EAJU6+d,EAAoB,KAIT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAFrF0/d,EAAQb,EAAoB,GAIhC,SAAS5oR,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAM7P,SAASxkG,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAASp+D,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX,IAAI61iB,EAEI,EAFJA,EAGK,EAELC,EAEM,EAFNA,EAGe,EAHfA,EAIK,EAJLA,EAKO,EALPA,EAMK,EANLA,EAOI,EAPJA,EAQa,EARbA,EASc,EAGlB,SAASC,EAAWtxb,GAClB,KAAMA,aAAkB3jH,OAA6B,WAApB2yC,EAAQgxE,IAAmC,OAAXA,GAE/D,OADA,EAAIi7W,EAAMv+c,MAAM,kEACTsjG,EAGT,OAAQA,EAAO/8G,MACb,IAAK,iBACH,OAAO,IAAIg4d,EAAM8N,eAAe/oX,EAAOl6E,SAEzC,IAAK,sBACH,OAAO,IAAIm1b,EAAMyM,oBAAoB1nX,EAAOl6E,SAE9C,IAAK,oBACH,OAAO,IAAIm1b,EAAMsM,kBAAkBvnX,EAAOl6E,QAASk6E,EAAOvjB,MAE5D,IAAK,8BACH,OAAO,IAAIw+X,EAAM+L,4BAA4BhnX,EAAOl6E,QAASk6E,EAAO9lB,QAEtE,IAAK,wBACH,OAAO,IAAI+gY,EAAM8L,sBAAsB/mX,EAAOl6E,QAASk6E,EAAOgjE,SAEhE,QACE,OAAO,IAAIi4S,EAAM8L,sBAAsB/mX,EAAOl6E,QAASk6E,EAAOtqH,aAIpE,IAAIskhB,EAA8B,WAChC,SAASA,EAAejzU,EAAYwqW,EAAYC,GAC9C,IAAIplgB,EAAQ33C,MAtDhB,SAAyBqtB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAwD5G+qB,CAAgBptB,KAAMulhB,GAEtBvlhB,KAAKsyM,WAAaA,EAClBtyM,KAAK88iB,WAAaA,EAClB98iB,KAAK+8iB,OAASA,EACd/8iB,KAAKg9iB,WAAa,EAClBh9iB,KAAKi9iB,SAAW,EAChBj9iB,KAAKk9iB,YAAc9+iB,OAAOC,OAAO,MACjC2B,KAAKm9iB,kBAAoB/+iB,OAAOC,OAAO,MACvC2B,KAAKo9iB,qBAAuBh/iB,OAAOC,OAAO,MAC1C2B,KAAKq9iB,cAAgBj/iB,OAAOC,OAAO,MAEnC2B,KAAKs9iB,mBAAqB,SAAUn2a,GAClC,IAAInsF,EAAOmsF,EAAMnsF,KAEjB,GAAIA,EAAK8hgB,aAAenlgB,EAAM26J,WAI9B,GAAIt3J,EAAK2sH,OACPhwH,EAAM4lgB,sBAAsBvigB,QAK9B,GAAIA,EAAKpW,SAAT,CACE,IAAIo4gB,EAAahigB,EAAKgigB,WAClBxnE,EAAa79b,EAAMylgB,qBAAqBJ,GAE5C,IAAKxnE,EACH,MAAM,IAAI5te,MAAM,2BAA2B0D,OAAO0xiB,IAKpD,UAFOrlgB,EAAMylgB,qBAAqBJ,GAE9BhigB,EAAKpW,WAAa+3gB,EACpBnnE,EAAWt2b,QAAQlE,EAAKA,UACnB,IAAIA,EAAKpW,WAAa+3gB,EAG3B,MAAM,IAAI/0iB,MAAM,4BAFhB4te,EAAWr/Z,OAAO0me,EAAW7hgB,EAAKuwE,cAbtC,CAqBA,IAAIrgG,EAASysB,EAAM0lgB,cAAcrigB,EAAK9vB,QAEtC,IAAKA,EACH,MAAM,IAAItjB,MAAM,+BAA+B0D,OAAO0vC,EAAK9vB,SAG7D,GAAI8vB,EAAKgigB,WAAT,CACE,IAAIQ,EAAe7lgB,EAAM26J,WACrBmrW,EAAezigB,EAAKs3J,WACxB,IAAIrzJ,SAAQ,SAAUC,GACpBA,EAAQh0B,EAAO8vB,EAAKA,UACnBu7B,MAAK,SAAU3iE,GAChBmpiB,EAAOt+C,YAAY,CACjBnsT,WAAYkrW,EACZV,WAAYW,EACZ74gB,SAAU+3gB,EACVK,WAAYhigB,EAAKgigB,WACjBhigB,KAAMpnC,OAEP,SAAU23G,GACXwxb,EAAOt+C,YAAY,CACjBnsT,WAAYkrW,EACZV,WAAYW,EACZ74gB,SAAU+3gB,EACVK,WAAYhigB,EAAKgigB,WACjBzxb,OAAQsxb,EAAWtxb,aAMrBvwE,EAAKiigB,SACPtlgB,EAAM+lgB,kBAAkB1igB,GAK1B9vB,EAAO8vB,EAAKA,QAGd+hgB,EAAO/zc,iBAAiB,UAAWhpG,KAAKs9iB,oBA1I5C,IAAsBhwhB,EAAasrF,EAAYC,EAggB7C,OAhgBoBvrF,EA6IPi4f,EA7IoB3sa,EA6IJ,CAAC,CAC5Bt0G,IAAK,KACL5I,MAAO,SAAYiijB,EAAY1kW,GAC7B,IAAI2kW,EAAK59iB,KAAKq9iB,cAEd,GAAIO,EAAGD,GACL,MAAM,IAAI/1iB,MAAM,0CAA2C0D,OAAOqyiB,EAAY,MAGhFC,EAAGD,GAAc1kW,IAElB,CACD30M,IAAK,OACL5I,MAAO,SAAciijB,EAAY3igB,EAAMs2e,GACrCtxhB,KAAK+8iB,OAAOt+C,YAAY,CACtBnsT,WAAYtyM,KAAKsyM,WACjBwqW,WAAY98iB,KAAK88iB,WACjB5xhB,OAAQyyhB,EACR3igB,KAAMA,GACLs2e,KAEJ,CACDhthB,IAAK,kBACL5I,MAAO,SAAyBiijB,EAAY3igB,EAAMs2e,GAChD,IAAI0rB,EAAah9iB,KAAKg9iB,aAClBxnE,GAAa,EAAIhP,EAAM+O,2BAC3Bv1e,KAAKo9iB,qBAAqBJ,GAAcxnE,EAExC,IACEx1e,KAAK+8iB,OAAOt+C,YAAY,CACtBnsT,WAAYtyM,KAAKsyM,WACjBwqW,WAAY98iB,KAAK88iB,WACjB5xhB,OAAQyyhB,EACRX,WAAYA,EACZhigB,KAAMA,GACLs2e,GACH,MAAOxgN,GACP0kK,EAAWr/Z,OAAO26P,GAGpB,OAAO0kK,EAAWxzV,UAEnB,CACD19I,IAAK,iBACL5I,MAAO,SAAwBiijB,EAAY3igB,EAAM6igB,EAAkBvsB,GACjE,IAAIlua,EAASpjH,KAETi9iB,EAAWj9iB,KAAKi9iB,WAChB3qW,EAAatyM,KAAKsyM,WAClBwqW,EAAa98iB,KAAK88iB,WAClBC,EAAS/8iB,KAAK+8iB,OAClB,OAAO,IAAI9zD,eAAe,CACxBlpe,MAAO,SAAe27P,GACpB,IAAIoiS,GAAkB,EAAIt3E,EAAM+O,2BAgBhC,OAfAnyX,EAAO+5b,kBAAkBF,GAAY,CACnCvhS,WAAYA,EACZqiS,UAAWD,EACXE,SAAU,KACVC,WAAY,KACZC,UAAU,GAEZnB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZ5xhB,OAAQyyhB,EACRV,SAAUA,EACVjigB,KAAMA,EACNqyd,YAAa3xP,EAAW2xP,aACvBikB,GACIwsB,EAAgB97Z,SAEzBwtC,KAAM,SAAcksF,GAClB,IAAIyiS,GAAiB,EAAI33E,EAAM+O,2BAS/B,OARAnyX,EAAO+5b,kBAAkBF,GAAUe,SAAWG,EAC9CpB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV5vC,YAAa3xP,EAAW2xP,cAEnB8wC,EAAen8Z,SAExBn2H,OAAQ,SAAgB0/F,IACtB,EAAIi7W,EAAMC,QAAQl7W,aAAkB3jH,MAAO,mCAC3C,IAAIw2iB,GAAmB,EAAI53E,EAAM+O,2BAUjC,OATAnyX,EAAO+5b,kBAAkBF,GAAUgB,WAAaG,EAChDh7b,EAAO+5b,kBAAkBF,GAAUiB,UAAW,EAC9CnB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV1xb,OAAQsxb,EAAWtxb,KAEd6yb,EAAiBp8Z,UAEzB67Z,KAEJ,CACDv5iB,IAAK,oBACL5I,MAAO,SAA2Bs/C,GAChC,IAAIiigB,EAAWjigB,EAAKiigB,SAChB3qW,EAAatyM,KAAKsyM,WAClBwqW,EAAa9hgB,EAAKs3J,WAClByqW,EAAS/8iB,KAAK+8iB,OACd3tY,EAAOpvK,KACPkrB,EAASlrB,KAAKq9iB,cAAcrigB,EAAK9vB,QACjCmzhB,EAAa,CACfr1C,QAAS,SAAiB1yU,GACxB,IAAIv6L,EAAO2H,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC3E4thB,EAAY5thB,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAEtD,IAAIkE,KAAKs+iB,YAAT,CAIA,IAAIC,EAAkBv+iB,KAAKqtgB,YAC3BrtgB,KAAKqtgB,aAAetxgB,EAEhBwijB,EAAkB,GAAKv+iB,KAAKqtgB,aAAe,IAC7CrtgB,KAAKw+iB,gBAAiB,EAAIh4E,EAAM+O,2BAChCv1e,KAAKi+C,MAAQj+C,KAAKw+iB,eAAex8Z,SAGnC+6Z,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV3mX,MAAOA,GACNg7V,KAEL7nb,MAAO,WACDzpG,KAAKs+iB,cAITt+iB,KAAKs+iB,aAAc,EACnBvB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,WAEL7tY,EAAK8tY,YAAYD,KAE1B9uiB,MAAO,SAAeo9G,IACpB,EAAIi7W,EAAMC,QAAQl7W,aAAkB3jH,MAAO,kCAEvC5H,KAAKs+iB,cAITt+iB,KAAKs+iB,aAAc,EACnBvB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV1xb,OAAQsxb,EAAWtxb,OAGvBizb,gBAAgB,EAAIh4E,EAAM+O,2BAC1BqhD,OAAQ,KACRrwN,SAAU,KACV+3O,aAAa,EACbjxC,YAAaryd,EAAKqyd,YAClBpvd,MAAO,MAEToggB,EAAWG,eAAet/f,UAC1Bm/f,EAAWpggB,MAAQoggB,EAAWG,eAAex8Z,QAC7ChiJ,KAAKk9iB,YAAYD,GAAYoB,EAC7B,IAAIp/f,SAAQ,SAAUC,GACpBA,EAAQh0B,EAAO8vB,EAAKA,KAAMqjgB,OACzB9ne,MAAK,WACNwme,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV3rP,SAAS,OAEV,SAAU/lM,GACXwxb,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV1xb,OAAQsxb,EAAWtxb,UAIxB,CACDjnH,IAAK,wBACL5I,MAAO,SAA+Bs/C,GACpC,IAAIiigB,EAAWjigB,EAAKiigB,SAChB3qW,EAAatyM,KAAKsyM,WAClBwqW,EAAa9hgB,EAAKs3J,WAClByqW,EAAS/8iB,KAAK+8iB,OACd0B,EAAmBz+iB,KAAKm9iB,kBAAkBF,GAC1CoB,EAAar+iB,KAAKk9iB,YAAYD,GAElC,OAAQjigB,EAAK2sH,QACX,KAAKi1Y,EACC5hgB,EAAKs2Q,QACPmtP,EAAiBV,UAAU7+f,UAE3Bu/f,EAAiBV,UAAU5ne,OAAO0me,EAAW7hgB,EAAKuwE,SAGpD,MAEF,KAAKqxb,EACC5hgB,EAAKs2Q,QACPmtP,EAAiBT,SAAS9+f,UAE1Bu/f,EAAiBT,SAAS7ne,OAAO0me,EAAW7hgB,EAAKuwE,SAGnD,MAEF,KAAKqxb,EACH,IAAKyB,EAAY,CACftB,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV3rP,SAAS,IAEX,MAGE+sP,EAAWhxC,aAAe,GAAKryd,EAAKqyd,YAAc,GACpDgxC,EAAWG,eAAet/f,UAG5Bm/f,EAAWhxC,YAAcryd,EAAKqyd,YAC9B,IAAIpud,SAAQ,SAAUC,GACpBA,EAAQm/f,EAAWznB,QAAUynB,EAAWznB,aACvCrgd,MAAK,WACNwme,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV3rP,SAAS,OAEV,SAAU/lM,GACXwxb,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV1xb,OAAQsxb,EAAWtxb,QAGvB,MAEF,KAAKqxb,EAGH,IAFA,EAAIp2E,EAAMC,QAAQg4E,EAAkB,yCAEhCA,EAAiBP,SACnB,MAGFO,EAAiB/iS,WAAWstP,QAAQhud,EAAKs7I,OACzC,MAEF,KAAKsmX,EAGH,IAFA,EAAIp2E,EAAMC,QAAQg4E,EAAkB,uCAEhCA,EAAiBP,SACnB,MAGFO,EAAiBP,UAAW,EAC5BO,EAAiB/iS,WAAWjyK,QAE5BzpG,KAAK0+iB,wBAAwBD,EAAkBxB,GAE/C,MAEF,KAAKL,GACH,EAAIp2E,EAAMC,QAAQg4E,EAAkB,uCACpCA,EAAiB/iS,WAAWvtQ,MAAM0uiB,EAAW7hgB,EAAKuwE,SAElDvrH,KAAK0+iB,wBAAwBD,EAAkBxB,GAE/C,MAEF,KAAKL,EACC5hgB,EAAKs2Q,QACPmtP,EAAiBR,WAAW/+f,UAE5Bu/f,EAAiBR,WAAW9ne,OAAO0me,EAAW7hgB,EAAKuwE,SAGrDvrH,KAAK0+iB,wBAAwBD,EAAkBxB,GAE/C,MAEF,KAAKL,EACH,IAAKyB,EACH,MAGF,IAAIp/f,SAAQ,SAAUC,GACpBA,EAAQm/f,EAAW93O,UAAY83O,EAAW93O,SAASs2O,EAAW7hgB,EAAKuwE,aAClEh1C,MAAK,WACNwme,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV3rP,SAAS,OAEV,SAAU/lM,GACXwxb,EAAOt+C,YAAY,CACjBnsT,WAAYA,EACZwqW,WAAYA,EACZn1Y,OAAQi1Y,EACRK,SAAUA,EACV1xb,OAAQsxb,EAAWtxb,QAGvB8yb,EAAWG,eAAeroe,OAAO0me,EAAW7hgB,EAAKuwE,SACjD8yb,EAAWC,aAAc,SAClBt+iB,KAAKk9iB,YAAYD,GACxB,MAEF,QACE,MAAM,IAAIr1iB,MAAM,6BAGrB,CACDtD,IAAK,0BACL5I,MAAO,WACL,IAteqBmH,EAsejB87iB,GAteiB97iB,EAse0C2le,EAAY,QAAYgB,MAAK,SAASC,EAAQg1E,EAAkBxB,GAC7H,OAAOz0E,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAEH,OADA6pe,EAAS7pe,KAAO,EACTk/C,QAAQ+pc,WAAW,CAACy1D,EAAiBV,WAAaU,EAAiBV,UAAU/7Z,QAASy8Z,EAAiBT,UAAYS,EAAiBT,SAASh8Z,QAASy8Z,EAAiBR,YAAcQ,EAAiBR,WAAWj8Z,UAE1N,KAAK,SACIhiJ,KAAKm9iB,kBAAkBF,GAEhC,KAAK,EACL,IAAK,MACH,OAAOrzE,EAASj4L,UAGrB83L,EAASzpe,SAtfoB,WAAc,IAAIovK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,QA6f3W,OAJA,SAAiCwte,EAAIm3C,GACnC,OAAOk+B,EAAyB12iB,MAAMjI,KAAM0D,YArBzC,IA0BN,CACDY,IAAK,UACL5I,MAAO,WACLsE,KAAK+8iB,OAAO9zc,oBAAoB,UAAWjpG,KAAKs9iB,uBA5fY1kc,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAggB3K0sa,EAhdyB,GAmdlCpqhB,EAAQoqhB,eAAiBA,GAIlB,SAAC7/C,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ2+hB,cAAW,EAEnB,IAAItzD,EAAQb,EAAoB,GAIhC,SAASjtX,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAASwpa,EAA2Br7gB,EAAKs7gB,EAAY1mhB,IAErD,SAAoCoL,EAAKw7gB,GAAqB,GAAIA,EAAkBr+gB,IAAI6C,GAAQ,MAAM,IAAIzE,UAAU,kEAFtDgghB,CAA2Bv7gB,EAAKs7gB,GAAaA,EAAW16gB,IAAIZ,EAAKpL,GAI/H,SAASinhB,EAAsBH,EAAUJ,GAA0F,OAEnI,SAAkCI,EAAU7pa,GAAc,OAAIA,EAAW50G,IAAc40G,EAAW50G,IAAI/C,KAAKwhhB,GAAoB7pa,EAAWj9G,MAFAknhB,CAAyBJ,EAA3FE,EAA6BF,EAAUJ,EAAY,QAI3H,SAASG,EAAsBC,EAAUJ,EAAY1mhB,GAA4I,OAIjM,SAAkC8mhB,EAAU7pa,EAAYj9G,GAAS,GAAIi9G,EAAWjxG,IAAOixG,EAAWjxG,IAAI1G,KAAKwhhB,EAAU9mhB,OAAe,CAAE,IAAKi9G,EAAW3wG,SAAY,MAAM,IAAI3F,UAAU,4CAA+Cs2G,EAAWj9G,MAAQA,GAJ9G+mhB,CAAyBD,EAApFE,EAA6BF,EAAUJ,EAAY,OAAuD1mhB,GAAeA,EAExM,SAASgnhB,EAA6BF,EAAUJ,EAAYl3f,GAAU,IAAKk3f,EAAWn+gB,IAAIu+gB,GAAa,MAAM,IAAInghB,UAAU,gBAAkB6oB,EAAS,kCAAqC,OAAOk3f,EAAWr+gB,IAAIy+gB,GAIjN,IAAIo8B,EAA4B,IAAIv2iB,QAEhCykD,EAAqB,IAAIzkD,QAEzByxhB,EAAwB,WAC1B,SAASA,EAASzzf,GAChB,IAAIw4gB,EAAax4gB,EAAKw4gB,WAClB3xK,EAAU7mW,EAAK6mW,SA3BvB,SAAyB7/W,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCA6B5G+qB,CAAgBptB,KAAM85hB,GAEtB3X,EAA2BnihB,KAAM4+iB,EAAc,CAC7C52iB,UAAU,EACVtM,WAAO,IAGTymhB,EAA2BnihB,KAAM8sD,EAAO,CACtC9kD,UAAU,EACVtM,WAAO,IAGT6mhB,EAAsBvihB,KAAM4+iB,EAAcC,GAE1Ct8B,EAAsBvihB,KAAM8sD,EAAOogV,GAvCvC,IAAsB5/W,EAAasrF,EAAYC,EAkE7C,OAlEoBvrF,EA0CPwsgB,GA1CoBlhb,EA0CV,CAAC,CACtBt0G,IAAK,SACL5I,MAAO,WACL,OAAOinhB,EAAsB3ihB,KAAM8sD,KAEpC,CACDxoD,IAAK,MACL5I,MAAO,SAAa8S,GAClB,IAAIswiB,EAEJ,OAA0F,QAAlFA,EAAyBn8B,EAAsB3ihB,KAAM4+iB,GAAc76iB,IAAIyK,UAA8C,IAA3BswiB,EAAoCA,EAAyB,OAEhK,CACDx6iB,IAAK,SACL5I,MAAO,WACL,OAAO,EAAI8qe,EAAMsQ,eAAe6rC,EAAsB3ihB,KAAM4+iB,MAE7D,CACDt6iB,IAAK,MACL5I,MAAO,SAAa8S,GAClB,OAAOm0gB,EAAsB3ihB,KAAM4+iB,GAAc36iB,IAAIuK,QA9DmBkqG,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAkE3Kihb,EA9CmB,GAiD5B3+hB,EAAQ2+hB,SAAWA,GAIZ,SAACp0D,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQq+hB,2BAAwB,EAEhC,IAAIhzD,EAAQb,EAAoB,GAEhC,SAAS1qO,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAASvrF,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,IAAI08iB,EAAuB,SAASA,EAAqBvwiB,EAAMg8gB,GAC7Dp9f,EAAgBptB,KAAM++iB,GAEtB/+iB,KAAKg/R,SAAU,EACfh/R,KAAKwO,KAAOA,EACZxO,KAAKwqhB,OAASA,GAGZgP,EAAqC,WACvC,SAASA,EAAsBx+e,GAQ7B,GAPA5tB,EAAgBptB,KAAMw5hB,GAEtBx5hB,KAAKwO,KAAO,KACZxO,KAAKuqU,QAAU,KACfvqU,KAAKg/iB,OAAS,KACdh/iB,KAAKi/iB,QAAU,IAAIrsiB,IAEN,OAATooC,EAAJ,CAIAh7C,KAAKwO,KAAOwsC,EAAKxsC,KACjBxO,KAAKuqU,QAAUvvR,EAAKuvR,QACpBvqU,KAAKg/iB,OAAShkgB,EAAKmyL,MAEnB,IACIhtN,EADA+sd,EAAYjyO,EAA2BjgN,EAAKt4B,QAGhD,IACE,IAAKwqd,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAI4+iB,EAAS/+hB,EAAMzkB,MAEnBsE,KAAKi/iB,QAAQv3iB,IAAIw3iB,EAAOj+gB,GAAI,IAAI89gB,EAAqBG,EAAO1wiB,KAAM0wiB,EAAO10B,UAE3E,MAAOp5e,GACP87b,EAAU9ke,EAAEgpC,GAPd,QASE87b,EAAUx2Z,IAGZ,GAAuB,QAAnB17B,EAAKmkgB,UAAqB,CAC5B,IACIhyE,EADAC,EAAanyO,EAA2Bj7P,KAAKi/iB,SAGjD,IACE,IAAK7xE,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAClC6se,EAAOzxe,MACbsjS,SAAU,EAElB,MAAO5tP,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,KAIf,IACIswc,EADAC,EAAahsR,EAA2BjgN,EAAKrC,IAGjD,IACE,IAAKsue,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MAAO,CACrD,IAAIq4C,EAAKque,EAAOtrhB,MAChBsE,KAAKi/iB,QAAQl7iB,IAAI40C,GAAIqmP,SAAU,GAEjC,MAAO5tP,GACP61e,EAAW7+gB,EAAEgpC,GANf,QAQE61e,EAAWvwc,IAGb,IACIwwc,EADAC,EAAalsR,EAA2BjgN,EAAKlC,KAGjD,IACE,IAAKque,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MAAO,CACrD,IAAIw4C,EAAMoue,EAAOxrhB,MACjBsE,KAAKi/iB,QAAQl7iB,IAAI+0C,GAAKkmP,SAAU,GAElC,MAAO5tP,GACP+1e,EAAW/+gB,EAAEgpC,GANf,QAQE+1e,EAAWzwc,MArFjB,IAAsBppD,EAAasrF,EAAYC,EAgT7C,OAhToBvrF,EAyFPksgB,EAzFoB5gb,EAyFG,CAAC,CACnCt0G,IAAK,gCACL5I,MAAO,SAAuCmI,GAC5C,IAAIhC,EAASgC,EAAMhC,OAEnB,GAAIA,EAAS,EACX,OAAO,EAKT,IAFA,IAAIwpL,EAAWxnL,EAAM,GAEZb,EAAI,EAAGA,EAAInB,EAAQmB,IAAK,CAC/B,IAAI8kM,EAAUjkM,EAAMb,GAChBgkC,OAAQ,EAEZ,GAAIvlC,MAAMC,QAAQomM,GAChB9gK,EAAQhnC,KAAKo/iB,8BAA8Bt3W,OACtC,KAAI9nM,KAAKi/iB,QAAQh7iB,IAAI6jM,GAI1B,OADA,EAAI0+R,EAAMv+c,MAAM,qCAAqC3c,OAAOw8L,KACrD,EAHP9gK,EAAQhnC,KAAKi/iB,QAAQl7iB,IAAI+jM,GAASk3F,QAMpC,OAAQ3zG,GACN,IAAK,MACH,IAAKrkJ,EACH,OAAO,EAGT,MAEF,IAAK,KACH,GAAIA,EACF,OAAO,EAGT,MAEF,IAAK,MACH,OAAQA,EAEV,QACE,OAAO,GAIb,MAAoB,QAAbqkJ,IAER,CACD/mL,IAAK,YACL5I,MAAO,SAAmB4kJ,GACxB,GAA0B,IAAtBtgJ,KAAKi/iB,QAAQljjB,KACf,OAAO,EAGT,IAAKukJ,EAEH,OADA,EAAIkmV,EAAMv+c,MAAM,wCACT,EAGT,GAAmB,QAAfq4H,EAAMpgJ,KACR,OAAKF,KAAKi/iB,QAAQh7iB,IAAIq8I,EAAMr/G,IAKrBjhC,KAAKi/iB,QAAQl7iB,IAAIu8I,EAAMr/G,IAAI+9P,UAJhC,EAAIwnM,EAAMv+c,MAAM,qCAAqC3c,OAAOg1I,EAAMr/G,MAC3D,GAIJ,GAAmB,SAAfq/G,EAAMpgJ,KAAiB,CAChC,GAAIogJ,EAAM++Z,WACR,OAAOr/iB,KAAKo/iB,8BAA8B9+Z,EAAM++Z,YAGlD,IAAK/+Z,EAAMg/Z,QAA2B,UAAjBh/Z,EAAMg/Z,OAAoB,CAC7C,IACIx0B,EADAC,EAAa9vR,EAA2B36G,EAAMikJ,KAGlD,IACE,IAAKwmP,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MAAO,CACrD,IAAI2gC,EAAK6pf,EAAOpvhB,MAEhB,IAAKsE,KAAKi/iB,QAAQh7iB,IAAIg9B,GAEpB,OADA,EAAIulc,EAAMv+c,MAAM,qCAAqC3c,OAAO21B,KACrD,EAGT,GAAIjhC,KAAKi/iB,QAAQl7iB,IAAIk9B,GAAI+9P,QACvB,OAAO,GAGX,MAAO5tP,GACP25e,EAAW3ihB,EAAEgpC,GAdf,QAgBE25e,EAAWr0c,IAGb,OAAO,EACF,GAAqB,UAAjB4pE,EAAMg/Z,OAAoB,CACnC,IACI3vB,EADAE,EAAa50R,EAA2B36G,EAAMikJ,KAGlD,IACE,IAAKsrP,EAAWrihB,MAAOmihB,EAASE,EAAWzphB,KAAK9F,MAAO,CACrD,IAAIguS,EAAMqhP,EAAOj0hB,MAEjB,IAAKsE,KAAKi/iB,QAAQh7iB,IAAIqqS,GAEpB,OADA,EAAIk4L,EAAMv+c,MAAM,qCAAqC3c,OAAOgjS,KACrD,EAGT,IAAKtuS,KAAKi/iB,QAAQl7iB,IAAIuqS,GAAKtP,QACzB,OAAO,GAGX,MAAO5tP,GACPy+e,EAAWznhB,EAAEgpC,GAdf,QAgBEy+e,EAAWn5c,IAGb,OAAO,EACF,GAAqB,WAAjB4pE,EAAMg/Z,OAAqB,CACpC,IACIxvB,EADAC,EAAa90R,EAA2B36G,EAAMikJ,KAGlD,IACE,IAAKwrP,EAAWvihB,MAAOsihB,EAASC,EAAW3phB,KAAK9F,MAAO,CACrD,IAAImuS,EAAOqhP,EAAOp0hB,MAElB,IAAKsE,KAAKi/iB,QAAQh7iB,IAAIwqS,GAEpB,OADA,EAAI+3L,EAAMv+c,MAAM,qCAAqC3c,OAAOmjS,KACrD,EAGT,IAAKzuS,KAAKi/iB,QAAQl7iB,IAAI0qS,GAAMzP,QAC1B,OAAO,GAGX,MAAO5tP,GACP2+e,EAAW3nhB,EAAEgpC,GAdf,QAgBE2+e,EAAWr5c,IAGb,OAAO,EACF,GAAqB,WAAjB4pE,EAAMg/Z,OAAqB,CACpC,IACIrvB,EADAC,EAAaj1R,EAA2B36G,EAAMikJ,KAGlD,IACE,IAAK2rP,EAAW1ihB,MAAOyihB,EAASC,EAAW9phB,KAAK9F,MAAO,CACrD,IAAIi/iB,EAAOtvB,EAAOv0hB,MAElB,IAAKsE,KAAKi/iB,QAAQh7iB,IAAIs7iB,GAEpB,OADA,EAAI/4E,EAAMv+c,MAAM,qCAAqC3c,OAAOi0iB,KACrD,EAGT,GAAIv/iB,KAAKi/iB,QAAQl7iB,IAAIw7iB,GAAMvgR,QACzB,OAAO,GAGX,MAAO5tP,GACP8+e,EAAW9nhB,EAAEgpC,GAdf,QAgBE8+e,EAAWx5c,IAGb,OAAO,EAIT,OADA,EAAI8vZ,EAAMv+c,MAAM,mCAAmC3c,OAAOg1I,EAAMg/Z,OAAQ,OACjE,EAIT,OADA,EAAI94E,EAAMv+c,MAAM,sBAAsB3c,OAAOg1I,EAAMpgJ,KAAM,OAClD,IAER,CACDoE,IAAK,gBACL5I,MAAO,SAAuBulC,GAC5B,IAAI+9P,IAAUt7R,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,KAAmBA,UAAU,GAExE1D,KAAKi/iB,QAAQh7iB,IAAIg9B,GAKtBjhC,KAAKi/iB,QAAQl7iB,IAAIk9B,GAAI+9P,UAAYA,GAJ/B,EAAIwnM,EAAMv+c,MAAM,qCAAqC3c,OAAO21B,MAM/D,CACD38B,IAAK,WACL5I,MAAO,WACL,OAAKsE,KAAKi/iB,QAAQljjB,KAIdiE,KAAKg/iB,OACAh/iB,KAAKg/iB,OAAOlviB,QAGdrO,MAAMuN,KAAKhP,KAAKi/iB,QAAQn9iB,QAPtB,OASV,CACDwC,IAAK,YACL5I,MAAO,WACL,OAAOsE,KAAKi/iB,QAAQljjB,KAAO,GAAI,EAAIyqe,EAAMsQ,eAAe92e,KAAKi/iB,SAAW,OAEzE,CACD36iB,IAAK,WACL5I,MAAO,SAAkBulC,GACvB,OAAOjhC,KAAKi/iB,QAAQl7iB,IAAIk9B,IAAO,QA5S6B23E,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAgT3K2gb,EApSgC,GAuSzCr+hB,EAAQq+hB,sBAAwBA,GAIzB,SAAC9zD,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ6phB,4BAAyB,EAEjC,IAMgCl+gB,EAN5B0he,GAM4B1he,EANU6+d,EAAoB,KAMT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAJrF0/d,EAAQb,EAAoB,GAE5B67C,EAAiB77C,EAAoB,GAIzC,SAAS5oR,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASm/P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,IAAI03f,EAAsC,WACxC,SAASA,EAAuBrye,EAAQoze,GACtC,IAAIpue,EAAQ33C,KAEZotB,EAAgBptB,KAAMglhB,IAEtB,EAAIx+C,EAAMC,QAAQs/C,EAAuB,+EACzC/lhB,KAAKw/iB,cAAgB,GACrBx/iB,KAAKy/iB,iBAAmB9sgB,EAAOsye,kBAAmB,EAClDjlhB,KAAK0/iB,4BAA8B/sgB,EAAOuye,4BAA8B,KACxE,IAAIz0M,EAAc99R,EAAO89R,YAEzB,IAAqB,OAAhBA,QAAwC,IAAhBA,OAAyB,EAASA,EAAY5uU,QAAU,EAAG,CACtF,IAAIqxJ,EAAS,IAAIsC,WAAWi7K,GAAav9K,OAEzClzJ,KAAKw/iB,cAAcpziB,KAAK8mJ,GAG1BlzJ,KAAK2/iB,uBAAyB55B,EAC9B/lhB,KAAK4/iB,uBAAyBjtgB,EAAOwxe,cACrCnkhB,KAAK6/iB,mBAAqBltgB,EAAOuxe,aACjClkhB,KAAK8/iB,eAAiBntgB,EAAO9wC,OAC7B7B,KAAK+/iB,mBAAqB,KAC1B//iB,KAAKggjB,cAAgB,GAErBhgjB,KAAK2/iB,uBAAuBM,kBAAiB,SAAU1jjB,EAAO+5L,GAC5D3+I,EAAMuogB,eAAe,CACnB3jjB,MAAOA,EACP+5L,MAAOA,OAIXt2L,KAAK2/iB,uBAAuBQ,qBAAoB,SAAUrzZ,EAAQqtG,GAChExiN,EAAMyogB,YAAY,CAChBtzZ,OAAQA,EACRqtG,MAAOA,OAIXn6P,KAAK2/iB,uBAAuBU,4BAA2B,SAAU/pX,GAC/D3+I,EAAMuogB,eAAe,CACnB5pX,MAAOA,OAIXt2L,KAAK2/iB,uBAAuBW,4BAA2B,WACrD3ogB,EAAM4ogB,wBAGRvgjB,KAAK2/iB,uBAAuBa,iBA2H9B,OAxHA/ogB,EAAaute,EAAwB,CAAC,CACpC1ghB,IAAK,iBACL5I,MAAO,SAAwBsvB,GAC7B,IAAIkoI,EAAS,IAAIsC,WAAWxqI,EAAKsrK,OAAOpjC,OAExC,QAAmBp3J,IAAfkvB,EAAKzuB,MACHyD,KAAK+/iB,mBACP//iB,KAAK+/iB,mBAAmBU,SAASvtZ,GAEjClzJ,KAAKw/iB,cAAcpziB,KAAK8mJ,OAErB,CACL,IAAInwI,EAAQ/iB,KAAKggjB,cAAcvyiB,MAAK,SAAU8phB,GAC5C,OAAIA,EAAYmpB,SAAW11hB,EAAKzuB,QAIhCg7hB,EAAYkpB,SAASvtZ,IAEd,OAGT,EAAIszU,EAAMC,QAAQ1jd,EAAO,8EAG5B,CACDze,IAAK,yBACLP,IAAK,WACH,IAAI48iB,EAAuBC,EAE3B,OAAgL,QAAxKD,EAA+E,QAAtDC,EAAyB5gjB,KAAK+/iB,0BAA2D,IAA3Ba,OAAoC,EAASA,EAAuBC,eAA+C,IAA1BF,EAAmCA,EAAwB,IAEpP,CACDr8iB,IAAK,cACL5I,MAAO,SAAqB01H,GAC1B,QAAkBt1H,IAAds1H,EAAI+oI,MAAqB,CAC3B,IAAI2mT,EAAc9gjB,KAAKggjB,cAAc,GAEjB,OAAhBc,QAAwC,IAAhBA,GAA0BA,EAAYv6B,YAChEu6B,EAAYv6B,WAAW,CACrBz5X,OAAQ17B,EAAI07B,aAGX,CACL,IAAIkqY,EAAah3hB,KAAK+/iB,mBAEH,OAAf/oB,QAAsC,IAAfA,GAAyBA,EAAWzQ,YAC7DyQ,EAAWzQ,WAAW,CACpBz5X,OAAQ17B,EAAI07B,OACZqtG,MAAO/oI,EAAI+oI,WAKlB,CACD71P,IAAK,qBACL5I,MAAO,WACDsE,KAAK+/iB,oBACP//iB,KAAK+/iB,mBAAmB96B,kBAG1BjlhB,KAAKy/iB,kBAAmB,IAEzB,CACDn7iB,IAAK,qBACL5I,MAAO,SAA4B+mgB,GACjC,IAAIz/f,EAAIhD,KAAKggjB,cAAcx/hB,QAAQiif,GAE/Bz/f,GAAK,GACPhD,KAAKggjB,cAAc5wiB,OAAOpM,EAAG,KAGhC,CACDsB,IAAK,gBACL5I,MAAO,YACL,EAAI8qe,EAAMC,SAASzme,KAAK+/iB,mBAAoB,iEAC5C,IAAIgB,EAAe/gjB,KAAKw/iB,cAExB,OADAx/iB,KAAKw/iB,cAAgB,KACd,IAAIwB,EAA6BhhjB,KAAM+gjB,EAAc/gjB,KAAKy/iB,iBAAkBz/iB,KAAK0/iB,+BAEzF,CACDp7iB,IAAK,iBACL5I,MAAO,SAAwBa,EAAOC,GACpC,GAAIA,GAAOwD,KAAKihjB,uBACd,OAAO,KAGT,IAAIx+C,EAAS,IAAIy+C,EAAkClhjB,KAAMzD,EAAOC,GAMhE,OAJAwD,KAAK2/iB,uBAAuBwB,iBAAiB5kjB,EAAOC,GAEpDwD,KAAKggjB,cAAc5ziB,KAAKq2f,GAEjBA,IAER,CACDn+f,IAAK,oBACL5I,MAAO,SAA2B6vH,GAC5BvrH,KAAK+/iB,oBACP//iB,KAAK+/iB,mBAAmBl0hB,OAAO0/F,GAGjC,IACIprG,EADA+sd,EAAYjyO,EAA2Bj7P,KAAKggjB,cAAclwiB,MAAM,IAGpE,IACE,IAAKo9d,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAC9B6f,EAAMzkB,MACZmwB,OAAO0/F,GAEhB,MAAOn6E,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,IAGZ12E,KAAK2/iB,uBAAuB9jS,YAIzBmpQ,EA5KiC,GA+K1C7phB,EAAQ6phB,uBAAyBA,EAEjC,IAAIg8B,EAA4C,WAC9C,SAASA,EAA6Br5Y,EAAQo5Y,GAC5C,IAAI97B,EAAkBvhhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACjFwhhB,EAA6BxhhB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAErG0pB,EAAgBptB,KAAMghjB,GAEtBhhjB,KAAKohjB,QAAUz5Y,EACf3nK,KAAKqhjB,MAAQp8B,IAAmB,EAChCjlhB,KAAKshjB,WAAY,EAAI9/B,EAAev5C,WAAWi9C,GAA8BA,EAA6B,KAC1GllhB,KAAKw/iB,cAAgBuB,GAAgB,GACrC/gjB,KAAK6gjB,QAAU,EAEf,IACI1zE,EADAC,EAAanyO,EAA2Bj7P,KAAKw/iB,eAGjD,IACE,IAAKpyE,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAAO,CACrD,IAAIg2L,EAAQ62S,EAAOzxe,MACnBsE,KAAK6gjB,SAAWvqX,EAAMpwB,YAExB,MAAO90H,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,IAGb12E,KAAKuhjB,UAAY,GACjBvhjB,KAAKwhjB,cAAgBvigB,QAAQC,UAC7ByoH,EAAOo4Y,mBAAqB//iB,KAC5BA,KAAKumhB,WAAa,KAuIpB,OApIA9ue,EAAaupgB,EAA8B,CAAC,CAC1C18iB,IAAK,WACL5I,MAAO,SAAkB46L,GACnBt2L,KAAKqhjB,QAILrhjB,KAAKuhjB,UAAU1/iB,OAAS,EACF7B,KAAKuhjB,UAAUztiB,QAErBorC,QAAQ,CACxBxjD,MAAO46L,EACPh2L,MAAM,IAGRN,KAAKw/iB,cAAcpziB,KAAKkqL,GAG1Bt2L,KAAK6gjB,SAAWvqX,EAAMpwB,cAEvB,CACD5hK,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKwhjB,gBAEb,CACDl9iB,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAKshjB,YAEb,CACDh9iB,IAAK,mBACLP,IAAK,WACH,OAAO/D,KAAKohjB,QAAQvB,oBAErB,CACDv7iB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAKohjB,QAAQxB,wBAErB,CACDt7iB,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAKohjB,QAAQtB,iBAErB,CACDx7iB,IAAK,OACL5I,MAAO,WACL,IAAI+ljB,EAAQrkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,IAChF,IAAInzS,EAAOorX,EACX,OAAOl5E,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EACH,KAAMC,KAAKw/iB,cAAc39iB,OAAS,GAAI,CACpC+ne,EAAS7pe,KAAO,EAChB,MAIF,OADAu2L,EAAQt2L,KAAKw/iB,cAAc1riB,QACpB81d,EAASQ,OAAO,SAAU,CAC/B1ue,MAAO46L,EACPh2L,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKqhjB,MAAO,CACfz3E,EAAS7pe,KAAO,EAChB,MAGF,OAAO6pe,EAASQ,OAAO,SAAU,CAC/B1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EAKH,OAJAohjB,GAAoB,EAAIl7E,EAAM+O,2BAE9Bv1e,KAAKuhjB,UAAUn1iB,KAAKs1iB,GAEb93E,EAASQ,OAAO,SAAUs3E,EAAkB1/Z,SAErD,KAAK,EACL,IAAK,MACH,OAAO4nV,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,WACE,OAAOyhjB,EAAMx5iB,MAAMjI,KAAM0D,YA7CtB,IAkDN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKqhjB,OAAQ,EAEb,IACIr6B,EADAC,EAAahsR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKt6B,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MACtB0mhB,EAAOtrhB,MACbwjD,QAAQ,CACxBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP61e,EAAW7+gB,EAAEgpC,GATf,QAWE61e,EAAWvwc,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,IAEzB,CACDyC,IAAK,kBACL5I,MAAO,WACDsE,KAAKqhjB,QAITrhjB,KAAKqhjB,OAAQ,OAIVL,EArKuC,GAwK5CE,EAAiD,WACnD,SAASA,EAAkCv5Y,EAAQprK,EAAOC,GACxD4wB,EAAgBptB,KAAMkhjB,GAEtBlhjB,KAAKohjB,QAAUz5Y,EACf3nK,KAAK0gjB,OAASnkjB,EACdyD,KAAKkgB,KAAO1jB,EACZwD,KAAK2hjB,aAAe,KACpB3hjB,KAAKuhjB,UAAY,GACjBvhjB,KAAKqhjB,OAAQ,EACbrhjB,KAAKumhB,WAAa,KAkIpB,OA/HA9ue,EAAaypgB,EAAmC,CAAC,CAC/C58iB,IAAK,WACL5I,MAAO,SAAkB46L,GACvB,IAAIt2L,KAAKqhjB,MAAT,CAIA,GAA8B,IAA1BrhjB,KAAKuhjB,UAAU1/iB,OACjB7B,KAAK2hjB,aAAerrX,MACf,CACoBt2L,KAAKuhjB,UAAUztiB,QAErBorC,QAAQ,CACzBxjD,MAAO46L,EACPh2L,MAAM,IAGR,IACI4mhB,EADAC,EAAalsR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKp6B,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MACtB4mhB,EAAOxrhB,MACbwjD,QAAQ,CACxBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP+1e,EAAW/+gB,EAAEgpC,GATf,QAWE+1e,EAAWzwc,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EAG1B7B,KAAKqhjB,OAAQ,EAEbrhjB,KAAKohjB,QAAQQ,mBAAmB5hjB,SAEjC,CACDsE,IAAK,uBACLP,IAAK,WACH,OAAO,IAER,CACDO,IAAK,OACL5I,MAAO,WACL,IAAImmjB,EAASzkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAAS+2C,IACjF,IAAIjqV,EAAOorX,EACX,OAAOl5E,EAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EACH,IAAKC,KAAK2hjB,aAAc,CACtBnhC,EAAUzghB,KAAO,EACjB,MAKF,OAFAu2L,EAAQt2L,KAAK2hjB,aACb3hjB,KAAK2hjB,aAAe,KACbnhC,EAAUp2C,OAAO,SAAU,CAChC1ue,MAAO46L,EACPh2L,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKqhjB,MAAO,CACf7gC,EAAUzghB,KAAO,EACjB,MAGF,OAAOyghB,EAAUp2C,OAAO,SAAU,CAChC1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EAKH,OAJAohjB,GAAoB,EAAIl7E,EAAM+O,2BAE9Bv1e,KAAKuhjB,UAAUn1iB,KAAKs1iB,GAEblhC,EAAUp2C,OAAO,SAAUs3E,EAAkB1/Z,SAEtD,KAAK,EACL,IAAK,MACH,OAAOw+X,EAAU7uO,UAGtB4uO,EAAUvghB,UAOf,OAJA,WACE,OAAO6hjB,EAAO55iB,MAAMjI,KAAM0D,YA9CvB,IAmDN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKqhjB,OAAQ,EAEb,IACIv2B,EADAC,EAAa9vR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKx2B,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MACtBwqhB,EAAOpvhB,MACbwjD,QAAQ,CACxBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP25e,EAAW3ihB,EAAEgpC,GATf,QAWE25e,EAAWr0c,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EAExB7B,KAAKohjB,QAAQQ,mBAAmB5hjB,UAI7BkhjB,EA5I4C,IAiJ9C,SAACx7E,EAAyBvqe,GAEjC,aAQA,SAAS8/P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAIhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAb7Sv6G,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQg0hB,aAAU,EAclB,IAAIA,EAAuB,WACzB,SAASA,KAPX,SAAyB9hgB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAQ5G+qB,CAAgBptB,KAAMmvhB,GAJ1B,IAAsB7hgB,EAAasrF,EAAYC,EAuE7C,OAvEoBvrF,EAOP6hgB,EAPgCt2a,EAOjB,CAAC,CAC3Bv0G,IAAK,cACL5I,MAAO,SAAqBwzhB,GAC1B,IAAIloR,EAAQ,GACRnmH,EAAS,CACXmmH,MAAOA,EACPprL,OAAQx9E,OAAOC,OAAO,OAiDxB,OA9CA,SAASyjjB,EAAK16iB,GACZ,IAAI26iB,EAEJ,GAAK36iB,EAAL,CAIA,IAAIohB,EAAM,KACNha,EAAOpH,EAAKoH,KAEhB,GAAa,UAATA,EACFga,EAAMphB,EAAK1L,UACN,KAAKyzhB,EAAQ6yB,gBAAgBxziB,GAClC,OACkB,OAATpH,QAA0B,IAATA,GAA4D,QAAxC26iB,EAAmB36iB,EAAKoqN,kBAA6C,IAArBuwV,GAA+BA,EAAiBhlQ,YAC9Iv0R,EAAMphB,EAAKoqN,WAAWurF,YACb31S,EAAK1L,QACd8sB,EAAMphB,EAAK1L,OASb,GANY,OAAR8sB,GACFw+O,EAAM56P,KAAK,CACToc,IAAKA,IAIJphB,EAAKk/B,SAAV,CAIA,IACInmB,EADA+sd,EAAYjyO,EAA2B7zP,EAAKk/B,UAGhD,IACE,IAAK4mc,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAE3CwhjB,EADY3hiB,EAAMzkB,OAGpB,MAAO01C,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,OAIdore,CAAK5yB,GACEruY,IAER,CACDv8I,IAAK,kBACL5I,MAAO,SAAyB8S,GAC9B,QAAkB,aAATA,GAAgC,UAATA,GAA6B,WAATA,GAA8B,WAATA,OAnE5CoqG,EAOX,OAPsDF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAuE3Ks2a,EArEkB,GAwE3Bh0hB,EAAQg0hB,QAAUA,GAIX,SAACzpD,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ8mjB,qBAAkB,EAE1B,IAAIz7E,EAAQb,EAAoB,GAE5B67C,EAAiB77C,EAAoB,GAErCg8C,EAAsBh8C,EAAoB,KAE1Cu8E,EAAmBv8E,EAAoB,KAEvCw8E,EAAax8E,EAAoB,KAErC,SAASy8E,EAA6B5/B,EAAU6/B,EAAkBh7c,GAAsE,OAExI,SAAwCm7a,EAAU6/B,GAAoB,GAAI7/B,IAAa6/B,EAAoB,MAAM,IAAIhgjB,UAAU,6CAFnDigjB,CAA+B9/B,EAAU6/B,GAA0Bh7c,EAI/I,SAASk7c,EAAKv1hB,EAAQi1J,EAAUugW,GAAuV,OAAtR+/B,EAA9B,qBAAZlqe,SAA2BA,QAAQt0E,IAAcs0E,QAAQt0E,IAAqB,SAAcipB,EAAQi1J,EAAUugW,GAAY,IAAIn0R,EAErL,SAAwBlqP,EAAQ89K,GAAY,MAAQ7jL,OAAOD,UAAUoD,eAAeP,KAAKmD,EAAQ89K,IAA8D,QAAjD99K,EAASi+G,EAAgBj+G,MAAuC,OAAOA,EAFOq+iB,CAAex1hB,EAAQi1J,GAAW,GAAKosE,EAAL,CAAmB,IAAI4jS,EAAO7zhB,OAAO0uB,yBAAyBuhO,EAAMpsE,GAAW,OAAIgwW,EAAKluhB,IAAckuhB,EAAKluhB,IAAI/C,KAAKwhhB,GAAoByP,EAAKv2hB,QAAmB6mjB,EAAKv1hB,EAAQi1J,EAAUugW,GAAYx1f,GAIja,SAASgoD,EAAgBluE,EAAKxC,EAAK5I,GAAiK,OAApJ4I,KAAOwC,EAAO1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAAE5I,MAAOA,EAAOoM,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBlB,EAAIxC,GAAO5I,EAAgBoL,EAE3M,SAAS64F,EAAmB9xF,GAAO,OAMnC,SAA4BA,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO86d,EAAkB96d,GAN1CouQ,CAAmBpuQ,IAI7D,SAA0BhS,GAAQ,GAAsB,qBAAX6D,QAAmD,MAAzB7D,EAAK6D,OAAOC,WAA2C,MAAtB9D,EAAK,cAAuB,OAAO4F,MAAMuN,KAAKnT,GAJjFqgR,CAAiBruQ,IAAQ+6d,EAA4B/6d,IAE1H,WAAgC,MAAM,IAAIxL,UAAU,wIAF8E85Q,GAQlI,SAAStkM,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAAOggH,EAAuB+sD,GAExR,SAAS/sD,EAAuB+sD,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAI/J,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,SAAS80P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,EAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAEj+B,SAAS+B,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GARzbE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAIzI,SAASxJ,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAMhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,IAAIm1hB,EAAoB,IACpBC,EAAuB,IAAIhmB,QAE3BimB,EAAwC,WAC1C,SAASA,IACPv1hB,EAAgBptB,KAAM2ijB,GAwFxB,OArFAlrgB,EAAakrgB,EAA0B,KAAM,CAAC,CAC5Cr+iB,IAAK,SACL5I,MAAO,SAAgB4jH,GAGrB,OAFcA,EAAWtkE,KAAK4ngB,gBAG5B,KAAKp8E,EAAMoN,eAAemG,KACxB,OAAO,IAAI8oE,EAAsBvjc,GAEnC,KAAKknX,EAAMoN,eAAekG,KACxB,OAAO,IAAIgpE,EAAsBxjc,GAEnC,KAAKknX,EAAMoN,eAAeqH,OAGxB,OAFgB37X,EAAWtkE,KAAK6vU,WAG9B,IAAK,KACH,OAAO,IAAIk4L,EAA4Bzjc,GAEzC,IAAK,MACH,OAAIA,EAAWtkE,KAAKgogB,YACX,IAAIC,EAAmC3jc,GACrCA,EAAWtkE,KAAKkogB,SAClB,IAAIC,EAAgC7jc,GAGtC,IAAI8jc,EAAkC9jc,GAE/C,IAAK,KACH,OAAO,IAAI+jc,EAA8B/jc,GAG7C,OAAO,IAAIgkc,EAAwBhkc,GAErC,KAAKknX,EAAMoN,eAAeiH,MACxB,OAAO,IAAI0oE,EAAuBjkc,GAEpC,KAAKknX,EAAMoN,eAAeoG,SACxB,OAAO,IAAIwpE,EAA0Blkc,GAEvC,KAAKknX,EAAMoN,eAAeqG,KACxB,OAAO,IAAIwpE,EAAsBnkc,GAEnC,KAAKknX,EAAMoN,eAAesG,OACxB,OAAO,IAAIwpE,EAAwBpkc,GAErC,KAAKknX,EAAMoN,eAAeuG,OACxB,OAAO,IAAIwpE,EAAwBrkc,GAErC,KAAKknX,EAAMoN,eAAeyG,SACxB,OAAO,IAAIupE,EAA0Btkc,GAEvC,KAAKknX,EAAMoN,eAAe+G,MACxB,OAAO,IAAIkpE,EAAuBvkc,GAEpC,KAAKknX,EAAMoN,eAAegH,IACxB,OAAO,IAAIkpE,EAAqBxkc,GAElC,KAAKknX,EAAMoN,eAAewG,QACxB,OAAO,IAAI2pE,EAAyBzkc,GAEtC,KAAKknX,EAAMoN,eAAe0G,UACxB,OAAO,IAAI0pE,EAA2B1kc,GAExC,KAAKknX,EAAMoN,eAAe2G,UACxB,OAAO,IAAI0pE,EAA2B3kc,GAExC,KAAKknX,EAAMoN,eAAe4G,SACxB,OAAO,IAAI0pE,EAA0B5kc,GAEvC,KAAKknX,EAAMoN,eAAe6G,UACxB,OAAO,IAAI0pE,EAA2B7kc,GAExC,KAAKknX,EAAMoN,eAAe8G,MACxB,OAAO,IAAI0pE,EAAuB9kc,GAEpC,KAAKknX,EAAMoN,eAAekH,eACxB,OAAO,IAAIupE,EAAgC/kc,GAE7C,QACE,OAAO,IAAIglc,EAAkBhlc,QAK9Bqjc,EA1FmC,GA6FxC2B,EAAiC,WACnC,SAASA,EAAkBhlc,GACzB,IAAIj5E,EAAO3iC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC3E6gjB,EAAoBl+gB,EAAKm+gB,aACzBA,OAAqC,IAAtBD,GAAuCA,EACtDE,EAAoBp+gB,EAAKq+gB,aACzBA,OAAqC,IAAtBD,GAAuCA,EACtDE,EAAwBt+gB,EAAKu+gB,qBAC7BA,OAAiD,IAA1BD,GAA2CA,EAEtEv3hB,EAAgBptB,KAAMskjB,GAEtBtkjB,KAAKwkjB,aAAeA,EACpBxkjB,KAAKg7C,KAAOskE,EAAWtkE,KACvBh7C,KAAK6kjB,MAAQvlc,EAAWulc,MACxB7kjB,KAAK4rQ,KAAOtsJ,EAAWssJ,KACvB5rQ,KAAKugS,SAAWjhL,EAAWihL,SAC3BvgS,KAAK8kjB,YAAcxlc,EAAWwlc,YAC9B9kjB,KAAK+kjB,gBAAkBzlc,EAAWylc,gBAClC/kjB,KAAKgljB,mBAAqB1lc,EAAW0lc,mBACrChljB,KAAKiljB,YAAc3lc,EAAW2lc,YAC9BjljB,KAAKkljB,WAAa5lc,EAAW4lc,WAC7BlljB,KAAKynhB,kBAAoBnoa,EAAWmoa,kBACpCznhB,KAAKmljB,gBAAkB7lc,EAAW6lc,gBAClCnljB,KAAKsphB,aAAehqa,EAAWgqa,aAC/BtphB,KAAKoljB,cAAgB9lc,EAAW+lc,aAChCrljB,KAAKsljB,YAAchmc,EAAWimc,WAE1Bf,IACFxkjB,KAAKw5E,UAAYx5E,KAAKwljB,iBAAiBd,IAGrCE,IACF5kjB,KAAKyljB,eAAiBzljB,KAAK0ljB,sBAAsBhB,IA2RrD,OAvRAjtgB,EAAa6sgB,EAAmB,CAAC,CAC/BhgjB,IAAK,mBACL5I,MAAO,WACL,IAAIgpjB,EAAehhjB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAC9Es3C,EAAOh7C,KAAKg7C,KACZ4wN,EAAO5rQ,KAAK4rQ,KACZ20B,EAAWvgS,KAAKugS,SAChB/mN,EAAYxzC,SAASC,cAAc,WACnCq1C,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACtCn8E,EAAU2iO,aAAa,qBAAsBnhQ,EAAK/Z,IAElD,IAAI00H,EAAO6wU,EAAM8F,KAAK4b,cAAc,CAACltc,EAAK26G,KAAK,GAAIi2G,EAAKtsE,KAAK,GAAKtkJ,EAAK26G,KAAK,GAAKi2G,EAAKtsE,KAAK,GAAItkJ,EAAK26G,KAAK,GAAIi2G,EAAKtsE,KAAK,GAAKtkJ,EAAK26G,KAAK,GAAKi2G,EAAKtsE,KAAK,KAErJ,GAAItkJ,EAAK85f,aAAc,CACrB,IAAIz4a,EAAYkkK,EAASlkK,UAAUvsH,QAE/B61iB,EAAwBn/E,EAAM8F,KAAK83D,8BAA8B/na,GACjE04a,EAAyB5hgB,EAAewygB,EAAuB,GAC/D50N,EAASgkN,EAAuB,GAChC/jN,EAAS+jN,EAAuB,GAEpCz5d,EAAQv+E,KAAKqjB,KAAKk7D,EAAQy1Q,GAC1Bx/N,EAASx0H,KAAKqjB,KAAKmxG,EAASy/N,GAC5Br7L,EAAK,IAAMo7L,EACXp7L,EAAK,IAAMq7L,EAEX,IAAK,IAAIhuV,EAAI,EAAGA,EAAI,EAAGA,IACrBq5H,EAAUr5H,GAAKjG,KAAKsvP,KAAKhwH,EAAUr5H,IAGrCw2E,EAAU8hC,MAAM+gB,UAAY,UAAU/wH,OAAO+wH,EAAU56G,KAAK,KAAM,UAElE+3D,EAAU8hC,MAAM+gB,UAAY,UAAU/wH,OAAOi1R,EAASlkK,UAAU56G,KAAK,KAAM,KAK7E,GAFA+3D,EAAU8hC,MAAM2pB,gBAAkB,GAAG35H,QAAQqqJ,EAAK,GAAI,OAAOrqJ,QAAQqqJ,EAAK,GAAI,OAEzE+uZ,GAAgB1pgB,EAAK0sE,YAAYpsC,MAAQ,EAAG,CAC/C9B,EAAU8hC,MAAMqM,YAAc,GAAGr8G,OAAO0vC,EAAK0sE,YAAYpsC,MAAO,MAE5DtgC,EAAK0sE,YAAYpM,QAAUkrX,EAAM4N,0BAA0BmG,YAC7Dj/Z,GAAS,EAAItgC,EAAK0sE,YAAYpsC,MAC9Bi2C,GAAU,EAAIv2E,EAAK0sE,YAAYpsC,OAGjC,IAAIsqe,EAAmB5qgB,EAAK0sE,YAAYm+b,uBACpCC,EAAiB9qgB,EAAK0sE,YAAYq+b,qBAEtC,GAAIH,EAAmB,GAAKE,EAAiB,EAAG,CAC9C,IAAIE,EAAS,GAAG16iB,OAAOs6iB,EAAkB,SAASt6iB,OAAOw6iB,EAAgB,MACzEtse,EAAU8hC,MAAMmM,aAAeu+b,EAGjC,OAAQhrgB,EAAK0sE,YAAYpM,OACvB,KAAKkrX,EAAM4N,0BAA0BsJ,MACnClka,EAAU8hC,MAAMoM,YAAc,QAC9B,MAEF,KAAK8+W,EAAM4N,0BAA0BuJ,OACnCnka,EAAU8hC,MAAMoM,YAAc,SAC9B,MAEF,KAAK8+W,EAAM4N,0BAA0BwJ,SACnC,EAAIpX,EAAMv+c,MAAM,uCAChB,MAEF,KAAKu+c,EAAM4N,0BAA0ByJ,OACnC,EAAIrX,EAAMv+c,MAAM,qCAChB,MAEF,KAAKu+c,EAAM4N,0BAA0BmG,UACnC/ga,EAAU8hC,MAAMwyV,kBAAoB,QAOxC,IAAIpsU,EAAc1mF,EAAK0mF,aAAe1mF,EAAKirD,OAAS,KAEhDy7B,EACFloD,EAAU8hC,MAAMomB,YAAc8kW,EAAM8F,KAAKsnE,aAA6B,EAAhB54f,EAAKirD,MAAM,GAAwB,EAAhBjrD,EAAKirD,MAAM,GAAwB,EAAhBjrD,EAAKirD,MAAM,IAEvGzsB,EAAU8hC,MAAMqM,YAAc,EAclC,OAVAnuC,EAAU8hC,MAAM/gG,KAAO,GAAGjP,OAAOqqJ,EAAK,GAAI,MAC1Cn8E,EAAU8hC,MAAMgZ,IAAM,GAAGhpH,OAAOqqJ,EAAK,GAAI,MAErC36G,EAAK85f,aACPt7d,EAAU8hC,MAAMhgC,MAAQ9B,EAAU8hC,MAAMiW,OAAS,QAEjD/3C,EAAU8hC,MAAMhgC,MAAQ,GAAGhwE,OAAOgwE,EAAO,MACzC9B,EAAU8hC,MAAMiW,OAAS,GAAGjmH,OAAOimH,EAAQ,OAGtC/3C,IAER,CACDl1E,IAAK,wBACL5I,MAAO,WACL,IAAIgpjB,EAAehhjB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAElF,IAAK1D,KAAKg7C,KAAKirgB,WACb,OAAO,KAGT,IAII9liB,EAJAsliB,EAAiB,GACjBS,EAAYlmjB,KAAKg7C,KAAK26G,KAEtBu3U,EAAYjyO,EAA2Bj7P,KAAKg7C,KAAKirgB,YAGrD,IACE,IAAK/4E,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAI6ljB,EAAYhmiB,EAAMzkB,MACtBsE,KAAKg7C,KAAK26G,KAAO,CAACwwZ,EAAU,GAAGtuiB,EAAGsuiB,EAAU,GAAG36gB,EAAG26gB,EAAU,GAAGtuiB,EAAGsuiB,EAAU,GAAG36gB,GAC/Ei6gB,EAAer5iB,KAAKpM,KAAKwljB,iBAAiBd,KAE5C,MAAOtzgB,GACP87b,EAAU9ke,EAAEgpC,GAPd,QASE87b,EAAUx2Z,IAIZ,OADA12E,KAAKg7C,KAAK26G,KAAOuwZ,EACVT,IAER,CACDnhjB,IAAK,eACL5I,MAAO,SAAsB0qjB,EAASprgB,GACpC,IAAIw+B,EAAYx5E,KAAKw5E,UAEjBx5E,KAAKyljB,iBACPW,EAAUA,GAAWpmjB,KAAKyljB,eAC1Bjse,EAAYx5E,KAAKyljB,eAAe,IAG7BW,KACHA,EAAUpghB,SAASC,cAAc,QACzBq1E,MAAMiW,OAAS/3C,EAAU8hC,MAAMiW,OACvC60b,EAAQ9qc,MAAMhgC,MAAQ9B,EAAU8hC,MAAMhgC,MACtC9B,EAAU0jO,YAAYkpQ,IAGxB,IAUIC,EAVe,IAAIC,EAAa,CAClC9se,UAAWA,EACX4se,QAASA,EACTngd,MAAOjrD,EAAKirD,MACZilb,SAAUlwe,EAAKkwe,SACfq7B,iBAAkBvrgB,EAAKurgB,iBACvBp7B,YAAanwe,EAAKmwe,YAClBq7B,SAAUxrgB,EAAKwrgB,SACfC,aAAa,IAEUrkb,SACzBikb,EAAM/qc,MAAM/gG,KAAOi/D,EAAU8hC,MAAMhgC,MACnC9B,EAAU0jO,YAAYmpQ,KAEvB,CACD/hjB,IAAK,wBACL5I,MAAO,SAA+B09E,GACpC,IACI+zZ,EADAC,EAAanyO,EAA2Bj7P,KAAKyljB,gBAGjD,IACE,IAAKr4E,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAC1B6se,EAAOzxe,MACb09E,UAAYA,EAE5B,MAAOhoC,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,IAGb,OAAO12E,KAAKyljB,iBAEb,CACDnhjB,IAAK,SACL5I,MAAO,YACL,EAAI8qe,EAAMqR,aAAa,uDAExB,CACDvze,IAAK,qBACL5I,MAAO,SAA4B8S,GACjC,IAAIk4iB,EAAShjjB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAC7E0yU,EAAS,GAEb,GAAIp2U,KAAKoljB,cAAe,CACtB,IAAIuB,EAAW3mjB,KAAKoljB,cAAc52iB,GAElC,GAAIm4iB,EAAU,CACZ,IACI3/B,EADAC,EAAahsR,EAA2B0rT,GAG5C,IACE,IAAK1/B,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MAAO,CACrD,IAAIsmjB,EAAe5/B,EAAOtrhB,MACtBkwQ,EAAOg7S,EAAah7S,KACpB3qO,EAAK2lhB,EAAa3lhB,GAClB4lhB,EAAeD,EAAaC,aAEhC,IAAc,IAAVj7S,GAIA3qO,IAAOylhB,EAAX,CAIA,IAAII,EAAsC,kBAAjBD,EAA4BA,EAAe,KAChEE,EAAa/ghB,SAASghhB,eAAe/lhB,IAErC8lhB,GAAerE,EAAqBz+iB,IAAI8ijB,GAK5C3wO,EAAOhqU,KAAK,CACV60B,GAAIA,EACJ6lhB,YAAaA,EACbC,WAAYA,KAPZ,EAAIvgF,EAAMv+c,MAAM,6CAA6C3c,OAAO21B,MAUxE,MAAOmQ,GACP61e,EAAW7+gB,EAAEgpC,GA9Bf,QAgCE61e,EAAWvwc,KAIf,OAAO0/P,EAGT,IACI8wM,EADAC,EAAalsR,EAA2Bj1N,SAASihhB,kBAAkBz4iB,IAGvE,IACE,IAAK24gB,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MAAO,CACrD,IAAI4mjB,EAAchgC,EAAOxrhB,MACrB4yS,EAAM44Q,EAAYjmhB,GAClBkmhB,EAAeD,EAAYJ,YAE3Bx4Q,IAAQo4Q,GAIPhE,EAAqBz+iB,IAAIijjB,IAI9B9wO,EAAOhqU,KAAK,CACV60B,GAAIqtQ,EACJw4Q,YAAaK,EACbJ,WAAYG,KAGhB,MAAO91gB,GACP+1e,EAAW/+gB,EAAEgpC,GArBf,QAuBE+1e,EAAWzwc,IAGb,OAAO0/P,KAEP,CAAC,CACH9xU,IAAK,WACLP,IAAK,WACH,IAAI8tM,EAAgC,qBAAdb,UAA4BA,UAAUa,SAAW,GACvE,OAAO,EAAI20R,EAAM1kW,QAAQ9hI,KAAM,WAAY,CACzConjB,MAAOv1W,EAAStoM,SAAS,OACzB89iB,MAAOx1W,EAAStoM,SAAS,aAKxB+6iB,EA5T4B,GA+TjCzB,EAAqC,SAAUyE,GACjDzve,EAAUgre,EAAuByE,GAEjC,IAAIj8R,EAASrzM,EAAa6qe,GAE1B,SAASA,EAAsBvjc,GAC7B,IAAItzE,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KAElF0pB,EAAgBptB,KAAM6ijB,GAEtB,IAAI2B,KAAkBllc,EAAWtkE,KAAKwmD,KAAO8d,EAAWtkE,KAAKksd,MAAQ5nZ,EAAWtkE,KAAK9vB,QAAUo0F,EAAWtkE,KAAKusgB,eAAiBjoc,EAAWtkE,KAAKwsgB,WAAaloc,EAAWtkE,KAAKuuB,UAAY+1C,EAAWtkE,KAAKuuB,QAAQ+7Q,QAAUhmO,EAAWtkE,KAAKuuB,QAAQ,aAAe+1C,EAAWtkE,KAAKuuB,QAAQ,gBAC1R,OAAO8hN,EAAOrqR,KAAKhB,KAAMs/G,EAAY,CACnCklc,aAAcA,EACdE,eAA6B,OAAZ14gB,QAAgC,IAAZA,IAAsBA,EAAQ04gB,cACnEE,sBAAsB,IAuS1B,OAnSAntgB,EAAaorgB,EAAuB,CAAC,CACnCv+iB,IAAK,SACL5I,MAAO,WACL,IAKM+rjB,EALFzsgB,EAAOh7C,KAAKg7C,KACZ8pgB,EAAc9kjB,KAAK8kjB,YACnB76c,EAAOjkE,SAASC,cAAc,KAElC,GAAI+U,EAAKwmD,IAGFsjd,EAAYx+E,oBACf,EAAIE,EAAMv+c,MAAM,oGAG0C,QAA3Dw/hB,EAAwB3C,EAAYx+E,yBAAyD,IAA1BmhF,GAA4CA,EAAsBzmjB,KAAK8jjB,EAAa76c,EAAMjvD,EAAKwmD,IAAKxmD,EAAK0sgB,gBACxK,GAAI1sgB,EAAK9vB,OACdlrB,KAAK2njB,iBAAiB19c,EAAMjvD,EAAK9vB,aAC5B,GAAI8vB,EAAKksd,KACdlngB,KAAK4njB,UAAU39c,EAAMjvD,EAAKksd,UACrB,CACL,IAAI2gD,GAAiB,EAEjB7sgB,EAAKuuB,UAAYvuB,EAAKuuB,QAAQ+7Q,QAAUtqS,EAAKuuB,QAAQ,aAAevuB,EAAKuuB,QAAQ,gBAAkBvpE,KAAKmljB,iBAAmBnljB,KAAKsphB,eAClIu+B,GAAiB,EAEjB7njB,KAAK8njB,cAAc79c,EAAMjvD,IAGvBA,EAAKwsgB,UACPxnjB,KAAK+njB,qBAAqB99c,EAAMjvD,EAAKwsgB,WAC3BK,GACV7njB,KAAK4njB,UAAU39c,EAAM,IAIzB,OAAIjqG,KAAKyljB,eACAzljB,KAAKgojB,sBAAsB,kBAAkBh/iB,KAAI,SAAUi/iB,EAAe9rjB,GAC/E,IAAI+rjB,EAAwB,IAAV/rjB,EAAc8tG,EAAOA,EAAKk+c,YAE5C,OADAF,EAAc/qQ,YAAYgrQ,GACnBD,MAIXjojB,KAAKw5E,UAAUJ,UAAY,iBAC3Bp5E,KAAKw5E,UAAU0jO,YAAYjzM,GACpBjqG,KAAKw5E,aAEb,CACDl1E,IAAK,YACL5I,MAAO,SAAmBuuG,EAAM6jG,GAC9B,IAAIn2J,EAAQ33C,KAEZiqG,EAAKmjB,KAAOptH,KAAK8kjB,YAAYsD,mBAAmBt6W,GAEhD7jG,EAAKlE,QAAU,WAKb,OAJI+nG,GACFn2J,EAAMmtgB,YAAYuD,gBAAgBv6W,IAG7B,IAGLA,GAA+B,KAAhBA,KACjB7jG,EAAK7wB,UAAY,kBAGpB,CACD90E,IAAK,mBACL5I,MAAO,SAA0BuuG,EAAM/+E,GACrC,IAAIk4F,EAASpjH,KAEbiqG,EAAKmjB,KAAOptH,KAAK8kjB,YAAYwD,aAAa,IAE1Cr+c,EAAKlE,QAAU,WAGb,OAFAqd,EAAO0hc,YAAYyD,mBAAmBr9hB,IAE/B,GAGT++E,EAAK7wB,UAAY,iBAElB,CACD90E,IAAK,gBACL5I,MAAO,SAAuBuuG,EAAMjvD,GAClC,IAAIuoE,EAASvjH,KAEbiqG,EAAKmjB,KAAOptH,KAAK8kjB,YAAYwD,aAAa,IAyB1C,IAxBA,IAAIt/iB,EAAM,IAAI4J,IAAI,CAAC,CAAC,SAAU,WAAY,CAAC,WAAY,aAAc,CAAC,aAAc,iBAEhFo4gB,EAAQ,WACV,IAAIx8gB,EAAOuoS,EAAaygM,GACpBgxE,EAASx/iB,EAAIjF,IAAIyK,GAErB,IAAKg6iB,EACH,MAAO,WAGTv+c,EAAKu+c,GAAU,WACb,IAAIC,EASJ,OAP0D,QAAzDA,EAAwBllc,EAAOuhc,YAAY4D,gBAAgD,IAA1BD,GAA4CA,EAAsB99gB,SAAS,yBAA0B,CACrK1d,OAAQs2F,EACRolc,OAAQ,CACN1nhB,GAAI+Z,EAAK/Z,GACTzyB,KAAMA,MAGH,IAIFgpe,EAAM,EAAGzgM,EAAe34S,OAAO0D,KAAKk5C,EAAKuuB,SAAUiua,EAAMzgM,EAAal1S,OAAQ21e,IAC1EwzC,IAKR/gb,EAAKlE,UACRkE,EAAKlE,QAAU,WACb,OAAO,IAIXkE,EAAK7wB,UAAY,iBAElB,CACD90E,IAAK,uBACL5I,MAAO,SAA8BuuG,EAAMu9c,GACzC,IAAIhga,EAASxnJ,KAET4ojB,EAAmB3+c,EAAKlE,QAQ5B,GANK6id,IACH3+c,EAAKmjB,KAAOptH,KAAK8kjB,YAAYwD,aAAa,KAG5Cr+c,EAAK7wB,UAAY,gBAEZp5E,KAAKoljB,cASR,OARA,EAAI5+E,EAAMv+c,MAAM,uHAEX2giB,IACH3+c,EAAKlE,QAAU,WACb,OAAO,KAObkE,EAAKlE,QAAU,WACT6id,GACFA,IAGF,IAAIC,EAAkBrB,EAAUpxO,OAC5B0yO,EAAgBtB,EAAUnoN,KAC1B0pN,EAAUvB,EAAUuB,QACpBC,EAAY,GAEhB,GAA+B,IAA3BH,EAAgBhnjB,QAAyC,IAAzBinjB,EAAcjnjB,OAAc,CAC9D,IAGIiphB,EAHAm+B,EAAW,IAAIpqjB,IAAIiqjB,GAEnB/9B,EAAa9vR,EAA2B4tT,GAG5C,IACE,IAAK99B,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MAAO,CACrD,IAKIwvhB,EALAnlK,EAAYmgK,EAAOpvhB,MAInBq0hB,EAAa90R,EAFHzzG,EAAO49Z,cAAcz6L,IAAc,IAKjD,IACE,IAAKolK,EAAWvihB,MAAOsihB,EAASC,EAAW3phB,KAAK9F,MAAO,CACrD,IAAI2gC,EAAK6uf,EAAOp0hB,MAAMulC,GACtBgohB,EAAStqiB,IAAIsiB,IAEf,MAAOmQ,GACP2+e,EAAW3nhB,EAAEgpC,GANf,QAQE2+e,EAAWr5c,MAGf,MAAOtlC,GACP25e,EAAW3ihB,EAAEgpC,GArBf,QAuBE25e,EAAWr0c,IAGb,IAAK,IAAI+ga,EAAM,EAAG35M,EAAiB1/R,OAAO+M,OAAOq8I,EAAO49Z,eAAgB3tE,EAAM35M,EAAej8R,OAAQ41e,IAAO,CAC1G,IAGIk4C,EADAE,EAAa50R,EAFJ6iC,EAAe25M,IAK5B,IACE,IAAKo4C,EAAWrihB,MAAOmihB,EAASE,EAAWzphB,KAAK9F,MAAO,CACrD,IAAIu2P,EAAQ84R,EAAOj0hB,MAEfutjB,EAAShljB,IAAI4yP,EAAM51N,MAAQ8nhB,GAC7BC,EAAU58iB,KAAKyqP,IAGnB,MAAOzlN,GACPy+e,EAAWznhB,EAAEgpC,GATf,QAWEy+e,EAAWn5c,WAIf,IAAK,IAAIwye,EAAM,EAAGC,EAAkB/qjB,OAAO+M,OAAOq8I,EAAO49Z,eAAgB8D,EAAMC,EAAgBtnjB,OAAQqnjB,IAAO,CAC5G,IAAIE,EAAWD,EAAgBD,GAC/BF,EAAU58iB,KAAKnE,MAAM+gjB,EAAWrpd,EAAmBypd,IAOvD,IAHA,IAuDMC,EAvDFp1W,EAAUzsD,EAAOigY,kBACjB6hC,EAAS,GAEJC,EAAM,EAAGC,EAAaR,EAAWO,EAAMC,EAAW3njB,OAAQ0njB,IAAO,CACxE,IAAIE,EAASD,EAAWD,GACpB96Q,EAAOg7Q,EAAOxohB,GAGlB,OAFAqohB,EAAOl9iB,KAAKqiS,GAEJg7Q,EAAOvpjB,MACb,IAAK,OAED,IAAIxE,EAAQ+tjB,EAAOlsgB,cAAgB,GACnC02J,EAAQ09G,SAASljB,EAAM,CACrB/yS,MAAOA,EACPgujB,cAAehujB,IAEjB,MAGJ,IAAK,WACL,IAAK,cAED,IAAIytB,EAASsgiB,EAAOlsgB,eAAiBksgB,EAAO5C,aAE5C5yW,EAAQ09G,SAASljB,EAAM,CACrB/yS,MAAOytB,IAET,MAGJ,IAAK,WACL,IAAK,UAED,IAAIo/Y,EAAUkhJ,EAAOlsgB,cAAgB,GAErC02J,EAAQ09G,SAASljB,EAAM,CACrB/yS,MAAO6sa,IAET,MAGJ,QACE,SAGJ,IAAIw+I,EAAa/ghB,SAASghhB,eAAev4Q,GAEpCs4Q,GAAerE,EAAqBz+iB,IAAI8ijB,IAI7CA,EAAWtrD,cAAc,IAAIpiJ,MAAM,cAgBrC,OAbI7xN,EAAO29Z,kBAGiD,QAAzDkE,EAAwB7ha,EAAOs9Z,YAAY4D,gBAAgD,IAA1BW,GAA4CA,EAAsB1+gB,SAAS,yBAA0B,CACrK1d,OAAQu6H,EACRmha,OAAQ,CACN1nhB,GAAI,MACJsjQ,IAAK+kR,EACL96iB,KAAM,iBAKL,OAKNq0iB,EArTgC,CAsTvCyB,GAEExB,EAAqC,SAAU6G,GACjD9xe,EAAUire,EAAuB6G,GAEjC,IAAIp/E,EAAUvyZ,EAAa8qe,GAE3B,SAASA,EAAsBxjc,GAC7B,IAAIsqc,EAAuBC,EAAuBC,EAElD18hB,EAAgBptB,KAAM8ijB,GAEtB,IAAI0B,KAAkBllc,EAAWtkE,KAAK+ugB,UAAmE,QAAtDH,EAAwBtqc,EAAWtkE,KAAKkwe,gBAAgD,IAA1B0+B,GAAoCA,EAAsBphiB,KAAiE,QAAzDqhiB,EAAwBvqc,EAAWtkE,KAAKmwe,mBAAmD,IAA1B0+B,GAAoCA,EAAsBrhiB,KAA8D,QAAtDshiB,EAAwBxqc,EAAWtkE,KAAKwrgB,gBAAgD,IAA1BsD,GAAoCA,EAAsBthiB,KAC9a,OAAO+hd,EAAQvpe,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcA,IA2BlB,OAvBA/sgB,EAAaqrgB,EAAuB,CAAC,CACnCx+iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAY,iBAC3B,IAAIghS,EAAQp0U,SAASC,cAAc,OAenC,OAdAm0U,EAAM9+P,MAAMiW,OAASvxH,KAAKw5E,UAAU8hC,MAAMiW,OAC1C6oP,EAAM9+P,MAAMhgC,MAAQt7E,KAAKw5E,UAAU8hC,MAAMhgC,MACzC8+R,EAAM5zP,IAAMxmH,KAAKgljB,mBAAqB,cAAgBhljB,KAAKg7C,KAAKxsC,KAAK4qC,cAAgB,OACrFghU,EAAM/wO,IAAM,wBACZ+wO,EAAM4vM,QAAQC,OAAS,uBACvB7vM,EAAM4vM,QAAQE,SAAWv7iB,KAAKC,UAAU,CACtC1O,KAAMF,KAAKg7C,KAAKxsC,OAGbxO,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa/vM,EAAOp6W,KAAKg7C,MAGhCh7C,KAAKw5E,UAAU0jO,YAAYk9D,GACpBp6W,KAAKw5E,cAITspe,EAvCgC,CAwCvCwB,GAEEhB,EAAuC,SAAU8G,GACnDvye,EAAUyre,EAAyB8G,GAEnC,IAAIv/E,EAAU7yZ,EAAasre,GAE3B,SAASA,IAGP,OAFAl2hB,EAAgBptB,KAAMsjjB,GAEfz4E,EAAQ5ie,MAAMjI,KAAM0D,WA4K7B,OAzKA+zC,EAAa6rgB,EAAyB,CAAC,CACrCh/iB,IAAK,SACL5I,MAAO,WAKL,OAJIsE,KAAKg7C,KAAKqvgB,kBACZrqjB,KAAKw5E,UAAU0wC,MAAQlqH,KAAKg7C,KAAKqvgB,iBAG5BrqjB,KAAKw5E,YAEb,CACDl1E,IAAK,kBACL5I,MAAO,SAAyByrI,GAC9B,IAAImjb,EAAwBhG,EAAkBzyW,SAC1Cu1W,EAAQkD,EAAsBlD,MAC9BC,EAAQiD,EAAsBjD,MAClC,OAAOD,GAASjgb,EAAMw7K,SAAW0kQ,GAASlgb,EAAMy7K,UAEjD,CACDt+S,IAAK,oBACL5I,MAAO,SAA2BosM,EAASyiX,EAAUzvR,EAAW0vR,GAC9D,IAAI38Z,EAAS7tJ,KAETuqjB,EAAShhjB,SAAS,SACpBu+L,EAAQ9+F,iBAAiBuhd,GAAU,SAAUpjb,GAC3C,IAAIsjb,EAEsD,QAAzDA,EAAwB58Z,EAAOi3Z,YAAY4D,gBAAgD,IAA1B+B,GAA4CA,EAAsB9/gB,SAAS,yBAA0B,CACrK1d,OAAQ4gI,EACR86Z,OAAQ,CACN1nhB,GAAI4sH,EAAO7yG,KAAK/Z,GAChBzyB,KAAMssR,EACNp/R,MAAO8ujB,EAAYrjb,GACnBrzH,MAAOqzH,EAAM07K,SACb2kC,SAAU35L,EAAO68Z,gBAAgBvjb,SAKvC2gE,EAAQ9+F,iBAAiBuhd,GAAU,SAAUpjb,GAC3C,IAAIwjb,EAEuD,QAA1DA,EAAyB98Z,EAAOi3Z,YAAY4D,gBAAiD,IAA3BiC,GAA6CA,EAAuBhghB,SAAS,yBAA0B,CACxK1d,OAAQ4gI,EACR86Z,OAAQ,CACN1nhB,GAAI4sH,EAAO7yG,KAAK/Z,GAChBzyB,KAAMssR,EACNp/R,MAAOyrI,EAAMn6G,OAAOgvG,gBAM7B,CACD13H,IAAK,qBACL5I,MAAO,SAA4BosM,EAASs7C,EAAO8Q,GACjD,IACI+7R,EADAC,EAAaj1R,EAA2B7X,GAG5C,IACE,IAAK8sS,EAAW1ihB,MAAOyihB,EAASC,EAAW9phB,KAAK9F,MAAO,CACrD,IAAIsqjB,EAEAz6B,EAAeh9e,EAAe88e,EAAOv0hB,MAAO,GAC5C6ujB,EAAWp6B,EAAa,GACxBr1P,EAAYq1P,EAAa,IAEX,WAAdr1P,GAAuE,QAA5C8vR,EAAqB5qjB,KAAKg7C,KAAKuuB,eAA4C,IAAvBqhf,GAAiCA,EAAmB9vR,KACrI96R,KAAK6qjB,kBAAkB/iX,EAASyiX,EAAUzvR,EAAW5mC,IAGzD,MAAO9iN,GACP8+e,EAAW9nhB,EAAEgpC,GAbf,QAeE8+e,EAAWx5c,OAGd,CACDpyE,IAAK,sBACL5I,MAAO,SAA6BosM,GAClC,IAAI7hG,EAAQjmG,KAAKg7C,KAAKgqE,iBAAmB,KACzC8iF,EAAQxsF,MAAM0J,gBAA4B,OAAV/e,EAAiB,cAAgBugY,EAAM8F,KAAKsnE,aAAa3tc,EAAM,GAAIA,EAAM,GAAIA,EAAM,MAEpH,CACD3hG,IAAK,4BACL5I,MAAO,SAAmC6tE,EAASuhf,GA0EjD,IAzEA,IAAI36Z,EAASnwJ,KAET+qjB,EAAW,SAAkBvC,EAAQwC,EAAW7jb,GAClD,IAAIlhC,EAAQkhC,EAAMwhb,OAAOH,GACzBrhb,EAAMn6G,OAAOsuF,MAAM0vc,GAAa9I,EAAiB+I,gBAAgB,GAAG3/iB,OAAO26F,EAAM,GAAI,UAAUA,EAAMn2F,MAAM,KAGzGo7iB,EAAgB,CAClB9ve,QAAS,SAAiB+rD,GACxB,IAAI1B,EAAS0B,EAAMwhb,OAAOvte,QAAU,IAAM,EAC1C+rD,EAAMn6G,OAAOsuF,MAAM0tP,WAAavjO,EAAS,SAAW,UAEpD0qB,EAAOs3X,kBAAkB91N,SAASxhK,EAAOn1G,KAAK/Z,GAAI,CAChDwkG,OAAQA,EACR0lb,MAAgC,IAAzBhkb,EAAMwhb,OAAOvte,SAA0C,IAAzB+rD,EAAMwhb,OAAOvte,WAGtD+ve,MAAO,SAAehkb,GACpBgpB,EAAOs3X,kBAAkB91N,SAASxhK,EAAOn1G,KAAK/Z,GAAI,CAChDkqhB,MAAOhkb,EAAMwhb,OAAOwC,SAGxB1lb,OAAQ,SAAgB0B,GACtBA,EAAMn6G,OAAOsuF,MAAM0tP,WAAa7hO,EAAMwhb,OAAOljb,OAAS,SAAW,UAEjE0qB,EAAOs3X,kBAAkB91N,SAASxhK,EAAOn1G,KAAK/Z,GAAI,CAChDwkG,OAAQ0B,EAAMwhb,OAAOljb,UAGzB/6D,MAAO,SAAey8D,GACpBtuF,YAAW,WACT,OAAOsuF,EAAMn6G,OAAO09C,MAAM,CACxB0gf,eAAe,MAEhB,IAELtgP,SAAU,SAAkB3jM,GAC1BA,EAAMn6G,OAAOk9F,MAAQid,EAAMwhb,OAAO79O,UAEpCysF,SAAU,SAAkBpwR,GACtBA,EAAMwhb,OAAOpxJ,SACfpwR,EAAMn6G,OAAOmvR,aAAa,WAAY,IAEtCh1K,EAAMn6G,OAAO87P,gBAAgB,aAGjC9lF,SAAU,SAAkB77D,GACtBA,EAAMwhb,OAAO3lX,SACf77D,EAAMn6G,OAAOmvR,aAAa,WAAY,IAEtCh1K,EAAMn6G,OAAO87P,gBAAgB,aAGjCuiS,QAAS,SAAiBlkb,GACxB4jb,EAAS,UAAW,kBAAmB5jb,IAEzC87Z,UAAW,SAAmB97Z,GAC5B4jb,EAAS,YAAa,kBAAmB5jb,IAE3Cmkb,QAAS,SAAiBnkb,GACxB4jb,EAAS,UAAW,QAAS5jb,IAE/B+qL,UAAW,SAAmB/qL,GAC5B4jb,EAAS,YAAa,QAAS5jb,IAEjCzF,YAAa,SAAqByF,GAChC4jb,EAAS,cAAe,cAAe5jb,IAEzC+7Z,YAAa,SAAqB/7Z,GAChC4jb,EAAS,cAAe,cAAe5jb,KAIlCokb,EAAM,EAAGC,EAAgBptjB,OAAO0D,KAAKgpjB,EAAQnC,QAAS4C,EAAMC,EAAc3pjB,OAAQ0pjB,IAAO,CAChG,IAAI/8iB,EAAOg9iB,EAAcD,GACrBrgiB,EAASq+C,EAAQ/6D,IAAS08iB,EAAc18iB,GAExC0c,GACFA,EAAO4/hB,QAMRxH,EApLkC,CAqLzCgB,GAEEvB,EAA2C,SAAU0I,GACvD5ze,EAAUkre,EAA6B0I,GAEvC,IAAIzgF,EAAUhzZ,EAAa+qe,GAE3B,SAASA,EAA4Bzjc,GACnClyF,EAAgBptB,KAAM+ijB,GAEtB,IAAIyB,EAAellc,EAAW2lc,cAAgB3lc,EAAWtkE,KAAK0wgB,iBAAmBpsc,EAAWtkE,KAAKwjU,WACjG,OAAOwsH,EAAQhqe,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcA,IA2RlB,OAvRA/sgB,EAAasrgB,EAA6B,CAAC,CACzCz+iB,IAAK,wBACL5I,MAAO,SAA+B2yP,EAAM/pP,EAAK5I,EAAOiwjB,GACtD,IAGIt7B,EAHAp8U,EAAUj0M,KAAKynhB,kBAEf6I,EAAar1R,EAA2Bj7P,KAAK4rjB,mBAAmBv9T,EAAK7/O,KAAM6/O,EAAKptN,KAGpF,IACE,IAAKqvf,EAAW9ihB,MAAO6ihB,EAASC,EAAWlqhB,KAAK9F,MAAO,CACrD,IAAIwnM,EAAUuoV,EAAO30hB,MAEjBosM,EAAQi/W,aACVj/W,EAAQi/W,WAAWzijB,GAAO5I,GAG5Bu4M,EAAQ09G,SAAS7pH,EAAQ7mK,GAAI+zC,EAAgB,GAAI22e,EAAcjwjB,KAEjE,MAAO01C,GACPk/e,EAAWlohB,EAAEgpC,GAXf,QAaEk/e,EAAW55c,OAGd,CACDpyE,IAAK,SACL5I,MAAO,WACL,IAAI40J,EAAStwJ,KAETi0M,EAAUj0M,KAAKynhB,kBACfxmf,EAAKjhC,KAAKg7C,KAAK/Z,GACnBjhC,KAAKw5E,UAAUJ,UAAY,uBAC3B,IAAI0uH,EAAU,KAEd,GAAI9nM,KAAKiljB,YAAa,CACpB,IAAI4G,EAAa53W,EAAQvmB,SAASzsJ,EAAI,CACpCvlC,MAAOsE,KAAKg7C,KAAKwjU,WACjBkrM,cAAe1pjB,KAAKg7C,KAAKwjU,aAEvBzhE,EAAc8uQ,EAAWnC,eAAiBmC,EAAWnwjB,OAAS,GAC9DowjB,EAAc,CAChBC,UAAW,KACXrgM,eAAgB,KAChBsgM,0BAA2B,KAC3BC,iBAAkB,MAGhBjsjB,KAAKg7C,KAAKuqR,WACZz9H,EAAU9hK,SAASC,cAAc,aACzB82Q,YAAcA,IAEtBj1G,EAAU9hK,SAASC,cAAc,UACzB/lC,KAAO,OACf4nM,EAAQq0G,aAAa,QAASY,IAGhC2lQ,EAAqB/jiB,IAAImpL,GACzBA,EAAQ5qF,SAAWl9G,KAAKg7C,KAAKkxgB,SAC7BpkX,EAAQt5L,KAAOxO,KAAKg7C,KAAK2vU,UACzB7iL,EAAQxjE,SAAWm+a,EACnBqJ,EAAYC,UAAYhvQ,EACxBj1G,EAAQq0G,aAAa,KAAMl7Q,GAC3B6mK,EAAQ9+F,iBAAiB,SAAS,SAAUm+B,GAC1C8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOyrI,EAAMn6G,OAAOtxB,QAGtB40J,EAAO67Z,sBAAsBrkX,EAAS,QAAS3gE,EAAMn6G,OAAOtxB,MAAO,YAErEosM,EAAQ9+F,iBAAiB,aAAa,SAAUm+B,GAC9C,IAAI5pF,EAAe+yG,EAAOt1G,KAAKoxgB,mBAAqB,GACpDtkX,EAAQpsM,MAAQowjB,EAAYC,UAAYxugB,SACjCuugB,EAAYpgM,kBAGrB,IAAI2gM,EAAe,SAAsBllb,GACnC2kb,EAAYpgM,iBACdvkP,EAAMn6G,OAAOtxB,MAAQowjB,EAAYpgM,gBAGnCvkP,EAAMn6G,OAAO26R,WAAa,EAC1BmkQ,EAAYE,0BAA4B,MAG1C,GAAIhsjB,KAAKmljB,iBAAmBnljB,KAAKsphB,aAAc,CAC7C,IAAIgjC,EAEJxkX,EAAQ9+F,iBAAiB,SAAS,SAAUm+B,GACtC2kb,EAAYC,YACd5kb,EAAMn6G,OAAOtxB,MAAQowjB,EAAYC,cAGrCjkX,EAAQ9+F,iBAAiB,qBAAqB,SAAU8hd,GACtD,IAAIvhf,EAAU,CACZ7tE,MAAO,SAAeyrI,GACpB2kb,EAAYC,UAAY5kb,EAAMwhb,OAAOjtjB,OAAS,GAC9Cu4M,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOowjB,EAAYC,UAAU9qjB,aAG1B6qjB,EAAYpgM,iBACfvkP,EAAMn6G,OAAOtxB,MAAQowjB,EAAYC,YAGrCrC,cAAe,SAAuBvib,GACpC2kb,EAAYpgM,eAAiBvkP,EAAMwhb,OAAOe,eAAiB,GAEvDvib,EAAMn6G,SAAWgZ,SAASwgR,gBAC5Br/K,EAAMn6G,OAAOtxB,MAAQowjB,EAAYpgM,gBAGnCz3K,EAAQ09G,SAAS1wR,EAAI,CACnByqV,eAAgBogM,EAAYpgM,kBAGhC6gM,SAAU,SAAkBplb,GAC1B,IAAIqlb,EAAwBr5gB,EAAeg0F,EAAMwhb,OAAO4D,SAAU,GAC9DE,EAAWD,EAAsB,GACjCE,EAASF,EAAsB,GAE/BC,GAAY,GAAKC,EAASvlb,EAAMn6G,OAAOtxB,MAAMmG,QAC/CslI,EAAMn6G,OAAO2/hB,kBAAkBF,EAAUC,KAK/Cp8Z,EAAOs8Z,0BAA0Brjf,EAASuhf,MAE5ChjX,EAAQ9+F,iBAAiB,WAAW,SAAUm+B,GAC5C,IAAI0lb,EAEJf,EAAYG,iBAAmB9kb,EAAMn6G,OAAOtxB,MAC5C,IAAIoxjB,GAAa,EAEC,WAAd3lb,EAAM7iI,IACRwojB,EAAY,EACW,UAAd3lb,EAAM7iI,IACfwojB,EAAY,EACW,QAAd3lb,EAAM7iI,MACfwojB,EAAY,IAGK,IAAfA,IAIJhB,EAAYC,UAAY5kb,EAAMn6G,OAAOtxB,MACqB,QAAzDmxjB,EAAwBv8Z,EAAOw0Z,YAAY4D,gBAAgD,IAA1BmE,GAA4CA,EAAsBlihB,SAAS,yBAA0B,CACrK1d,OAAQqjI,EACRq4Z,OAAQ,CACN1nhB,GAAIA,EACJzyB,KAAM,YACN9S,MAAOyrI,EAAMn6G,OAAOtxB,MACpBqxjB,YAAY,EACZD,UAAWA,EACXL,SAAUtlb,EAAMn6G,OAAOggiB,eACvBN,OAAQvlb,EAAMn6G,OAAOigiB,oBAI3B,IAAIC,EAAgBb,EACpBA,EAAe,KACfvkX,EAAQ9+F,iBAAiB,QAAQ,SAAUm+B,GAEvC,IAAIgmb,EADF78Z,EAAOg1Z,YAAY8H,SAGrBtB,EAAYC,UAAY5kb,EAAMn6G,OAAOtxB,MACsB,QAA1DyxjB,EAAyB78Z,EAAOw0Z,YAAY4D,gBAAiD,IAA3ByE,GAA6CA,EAAuBxihB,SAAS,yBAA0B,CACxK1d,OAAQqjI,EACRq4Z,OAAQ,CACN1nhB,GAAIA,EACJzyB,KAAM,YACN9S,MAAOyrI,EAAMn6G,OAAOtxB,MACpBqxjB,YAAY,EACZD,UAAW,EACXL,SAAUtlb,EAAMn6G,OAAOggiB,eACvBN,OAAQvlb,EAAMn6G,OAAOigiB,iBAK3BC,EAAc/lb,MAEhB2gE,EAAQ9+F,iBAAiB,aAAa,SAAUm+B,GAC9C2kb,EAAYG,iBAAmB9kb,EAAMn6G,OAAOtxB,MAC5CowjB,EAAYE,0BAA4B,QAE1ClkX,EAAQ9+F,iBAAiB,SAAS,SAAUm+B,GACtCA,EAAMn6G,OAAOggiB,iBAAmB7lb,EAAMn6G,OAAOigiB,eAC/CnB,EAAYE,0BAA4B,SAG5ClkX,EAAQ9+F,iBAAiB,UAAU,SAAUm+B,GAC3C2kb,EAAYE,0BAA4B,CAAC7kb,EAAMn6G,OAAOggiB,eAAgB7lb,EAAMn6G,OAAOigiB,iBAGnC,QAA7CX,EAAsBtsjB,KAAKg7C,KAAKuuB,eAA6C,IAAxB+if,GAAkCA,EAAoBe,WAC9GvlX,EAAQ9+F,iBAAiB,SAAS,SAAUm+B,GAC1C,IAAImmb,EAEAb,GAAY,EACZC,GAAU,EAEd,GAAIZ,EAAYE,0BAA2B,CACzC,IAAIuB,EAAwBp6gB,EAAe24gB,EAAYE,0BAA2B,GAElFS,EAAWc,EAAsB,GACjCb,EAASa,EAAsB,GAG0B,QAA1DD,EAAyBh9Z,EAAOw0Z,YAAY4D,gBAAiD,IAA3B4E,GAA6CA,EAAuB3ihB,SAAS,yBAA0B,CACxK1d,OAAQqjI,EACRq4Z,OAAQ,CACN1nhB,GAAIA,EACJzyB,KAAM,YACN9S,MAAOowjB,EAAYG,iBACnB/hf,OAAQi9D,EAAMnsF,KACd+xgB,YAAY,EACZN,SAAUA,EACVC,OAAQA,QAMhB1sjB,KAAKwtjB,mBAAmB1lX,EAAS,CAAC,CAAC,QAAS,SAAU,CAAC,OAAQ,QAAS,CAAC,YAAa,cAAe,CAAC,aAAc,eAAgB,CAAC,aAAc,cAAe,CAAC,UAAW,cAAc,SAAU3gE,GACpM,OAAOA,EAAMn6G,OAAOtxB,SAYxB,GARI2wjB,GACFvkX,EAAQ9+F,iBAAiB,OAAQqjd,GAGV,OAArBrsjB,KAAKg7C,KAAKyygB,SACZ3lX,EAAQtoB,UAAYx/K,KAAKg7C,KAAKyygB,QAG5BztjB,KAAKg7C,KAAK0ygB,KAAM,CAClB,IACIC,GADa3tjB,KAAKg7C,KAAK26G,KAAK,GAAK31J,KAAKg7C,KAAK26G,KAAK,IACvB31J,KAAKg7C,KAAKyygB,OACvC3lX,EAAQ22E,UAAU9/P,IAAI,QACtBmpL,EAAQxsF,MAAMg/J,cAAgB,QAAQhvQ,OAAOqijB,EAAW,mBAG1D7lX,EAAU9hK,SAASC,cAAc,QACzB82Q,YAAc/8S,KAAKg7C,KAAKwjU,WAChC12K,EAAQxsF,MAAM8sP,cAAgB,SAC9BtgK,EAAQxsF,MAAMlgC,QAAU,aAQ1B,OALAp7E,KAAK4tjB,cAAc9lX,GAEnB9nM,KAAK6tjB,oBAAoB/lX,GAEzB9nM,KAAKw5E,UAAU0jO,YAAYp1G,GACpB9nM,KAAKw5E,YAEb,CACDl1E,IAAK,gBACL5I,MAAO,SAAuBosM,GAC5B,IACIgmX,EAAwB9tjB,KAAKg7C,KAAK+ygB,sBAClC5mc,EAAW2mc,EAAsB3mc,SACjC6mc,EAAYF,EAAsBE,UAClC1yc,EAAQwsF,EAAQxsF,MAEhB6L,IACF7L,EAAM6L,SAAW,GAAG77G,OAAO67G,EAAU,OAGvC7L,EAAMrV,MAAQugY,EAAM8F,KAAKsnE,aAAaoa,EAAU,GAAIA,EAAU,GAAIA,EAAU,IAE5C,OAA5BhujB,KAAKg7C,KAAKizgB,gBACZ3yc,EAAM2R,UAba,CAAC,OAAQ,SAAU,SAaLjtH,KAAKg7C,KAAKizgB,oBAK1ClL,EArSsC,CAsS7CO,GAEEH,EAA+C,SAAU+K,GAC3Dr2e,EAAUsre,EAAiC+K,GAE3C,IAAIthF,EAAU50Z,EAAamre,GAE3B,SAASA,EAAgC7jc,GAGvC,OAFAlyF,EAAgBptB,KAAMmjjB,GAEfv2E,EAAQ5re,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcllc,EAAW2lc,cAmG7B,OA/FAxtgB,EAAa0rgB,EAAiC,CAAC,CAC7C7+iB,IAAK,SACL5I,MAAO,WACL,IAAI61hB,EAASvxhB,KAETi0M,EAAUj0M,KAAKynhB,kBACfzse,EAAOh7C,KAAKg7C,KACZ/Z,EAAK+Z,EAAK/Z,GACVvlC,EAAQu4M,EAAQvmB,SAASzsJ,EAAI,CAC/BvlC,MAAOs/C,EAAK8rgB,cAAgB9rgB,EAAKwjU,aAChC9iX,MAEkB,kBAAVA,IACTA,EAAkB,QAAVA,EACRu4M,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOA,KAIXsE,KAAKw5E,UAAUJ,UAAY,kCAC3B,IAAI0uH,EAAU9hK,SAASC,cAAc,SAuErC,OAtEAy8gB,EAAqB/jiB,IAAImpL,GACzBA,EAAQ5qF,SAAWliE,EAAKkxgB,SACxBpkX,EAAQ5nM,KAAO,WACf4nM,EAAQt5L,KAAOwsC,EAAK2vU,UAEhBjvX,GACFosM,EAAQq0G,aAAa,WAAW,GAGlCr0G,EAAQq0G,aAAa,KAAMl7Q,GAC3B6mK,EAAQq0G,aAAa,cAAenhQ,EAAK8rgB,aACzCh/W,EAAQxjE,SAAWm+a,EACnB36W,EAAQ9+F,iBAAiB,UAAU,SAAUm+B,GAC3C,IAKIypZ,EALAu9B,EAAgBhnb,EAAMn6G,OACtBxe,EAAO2/iB,EAAc3/iB,KACrBwtH,EAAUmyb,EAAcnyb,QAExB60Z,EAAc51R,EAA2Bs2R,EAAOq6B,mBAAmBp9iB,EAAMyyB,IAG7E,IACE,IAAK4vf,EAAYrjhB,MAAOojhB,EAAUC,EAAYzqhB,KAAK9F,MAAO,CACxD,IAAIg3T,EAAWs5N,EAAQl1hB,MACnB0yjB,EAAapyb,GAAWs7L,EAASwvP,cAAgB9rgB,EAAK8rgB,YAEtDxvP,EAASyvP,aACXzvP,EAASyvP,WAAW/qb,QAAUoyb,GAGhCn6W,EAAQ09G,SAAS2F,EAASr2R,GAAI,CAC5BvlC,MAAO0yjB,KAGX,MAAOh9gB,GACPy/e,EAAYzohB,EAAEgpC,GAdhB,QAgBEy/e,EAAYn6c,IAGdu9H,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOsgI,OAGX8rE,EAAQ9+F,iBAAiB,aAAa,SAAUm+B,GAC9C,IAAI5pF,EAAevC,EAAKoxgB,mBAAqB,MAC7Cjlb,EAAMn6G,OAAOgvG,QAAUz+E,IAAiBvC,EAAK8rgB,eAG3C9mjB,KAAKmljB,iBAAmBnljB,KAAKsphB,eAC/BxhV,EAAQ9+F,iBAAiB,qBAAqB,SAAU8hd,GACtD,IAAIvhf,EAAU,CACZ7tE,MAAO,SAAeyrI,GACpBA,EAAMn6G,OAAOgvG,QAAiC,QAAvBmL,EAAMwhb,OAAOjtjB,MACpCu4M,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOyrI,EAAMn6G,OAAOgvG,YAK1Bu1Z,EAAOq7B,0BAA0Brjf,EAASuhf,MAG5C9qjB,KAAKwtjB,mBAAmB1lX,EAAS,CAAC,CAAC,SAAU,YAAa,CAAC,SAAU,UAAW,CAAC,QAAS,SAAU,CAAC,OAAQ,QAAS,CAAC,YAAa,cAAe,CAAC,aAAc,eAAgB,CAAC,aAAc,cAAe,CAAC,UAAW,cAAc,SAAU3gE,GAClP,OAAOA,EAAMn6G,OAAOgvG,YAIxBh8H,KAAK6tjB,oBAAoB/lX,GAEzB9nM,KAAKw5E,UAAU0jO,YAAYp1G,GACpB9nM,KAAKw5E,cAIT2pe,EA5G0C,CA6GjDG,GAEEL,EAAkD,SAAUoL,GAC9Dx2e,EAAUore,EAAoCoL,GAE9C,IAAI/mE,EAAUtva,EAAaire,GAE3B,SAASA,EAAmC3jc,GAG1C,OAFAlyF,EAAgBptB,KAAMijjB,GAEf37D,EAAQtmf,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcllc,EAAW2lc,cAgH7B,OA5GAxtgB,EAAawrgB,EAAoC,CAAC,CAChD3+iB,IAAK,SACL5I,MAAO,WACL,IAAI63hB,EAASvzhB,KAEbA,KAAKw5E,UAAUJ,UAAY,qCAC3B,IAAI66H,EAAUj0M,KAAKynhB,kBACfzse,EAAOh7C,KAAKg7C,KACZ/Z,EAAK+Z,EAAK/Z,GACVvlC,EAAQu4M,EAAQvmB,SAASzsJ,EAAI,CAC/BvlC,MAAOs/C,EAAKwjU,aAAexjU,EAAKszgB,cAC/B5yjB,MAEkB,kBAAVA,IACTA,EAAQA,IAAUs/C,EAAKszgB,YACvBr6W,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOA,KAIX,IAAIosM,EAAU9hK,SAASC,cAAc,SA0CrC,GAzCAy8gB,EAAqB/jiB,IAAImpL,GACzBA,EAAQ5qF,SAAWliE,EAAKkxgB,SACxBpkX,EAAQ5nM,KAAO,QACf4nM,EAAQt5L,KAAOwsC,EAAK2vU,UAEhBjvX,GACFosM,EAAQq0G,aAAa,WAAW,GAGlCr0G,EAAQq0G,aAAa,KAAMl7Q,GAC3B6mK,EAAQxjE,SAAWm+a,EACnB36W,EAAQ9+F,iBAAiB,UAAU,SAAUm+B,GAC3C,IAKI6pZ,EALAu9B,EAAiBpnb,EAAMn6G,OACvBxe,EAAO+/iB,EAAe//iB,KACtBwtH,EAAUuyb,EAAevyb,QAEzBi1Z,EAAch2R,EAA2Bs4R,EAAOq4B,mBAAmBp9iB,EAAMyyB,IAG7E,IACE,IAAKgwf,EAAYzjhB,MAAOwjhB,EAAUC,EAAY7qhB,KAAK9F,MAAO,CACxD,IAAIkujB,EAAQx9B,EAAQt1hB,MACpBu4M,EAAQ09G,SAAS68P,EAAMvthB,GAAI,CACzBvlC,OAAO,KAGX,MAAO01C,GACP6/e,EAAY7ohB,EAAEgpC,GARhB,QAUE6/e,EAAYv6c,IAGdu9H,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOsgI,OAGX8rE,EAAQ9+F,iBAAiB,aAAa,SAAUm+B,GAC9C,IAAI5pF,EAAevC,EAAKoxgB,kBACxBjlb,EAAMn6G,OAAOgvG,QAA2B,OAAjBz+E,QAA0CzhD,IAAjByhD,GAA8BA,IAAiBvC,EAAKszgB,eAGlGtujB,KAAKmljB,iBAAmBnljB,KAAKsphB,aAAc,CAC7C,IAAImlC,EAAiBzzgB,EAAKszgB,YAC1BxmX,EAAQ9+F,iBAAiB,qBAAqB,SAAU8hd,GACtD,IAAIvhf,EAAU,CACZ7tE,MAAO,SAAeyrI,GACpB,IAGIuqZ,EAHA11Z,EAAUyyb,IAAmBtnb,EAAMwhb,OAAOjtjB,MAE1Ci2hB,EAAc12R,EAA2Bs4R,EAAOq4B,mBAAmBzkb,EAAMn6G,OAAOxe,OAGpF,IACE,IAAKmjhB,EAAYnkhB,MAAOkkhB,EAAUC,EAAYvrhB,KAAK9F,MAAO,CACxD,IAAIkujB,EAAQ98B,EAAQh2hB,MAChB0yjB,EAAapyb,GAAWwyb,EAAMvthB,KAAOA,EAErCuthB,EAAMzH,aACRyH,EAAMzH,WAAW/qb,QAAUoyb,GAG7Bn6W,EAAQ09G,SAAS68P,EAAMvthB,GAAI,CACzBvlC,MAAO0yjB,KAGX,MAAOh9gB,GACPugf,EAAYvphB,EAAEgpC,GAdhB,QAgBEugf,EAAYj7c,OAKlB68c,EAAOq5B,0BAA0Brjf,EAASuhf,MAG5C9qjB,KAAKwtjB,mBAAmB1lX,EAAS,CAAC,CAAC,SAAU,YAAa,CAAC,SAAU,UAAW,CAAC,QAAS,SAAU,CAAC,OAAQ,QAAS,CAAC,YAAa,cAAe,CAAC,aAAc,eAAgB,CAAC,aAAc,cAAe,CAAC,UAAW,cAAc,SAAU3gE,GAClP,OAAOA,EAAMn6G,OAAOgvG,WAOxB,OAHAh8H,KAAK6tjB,oBAAoB/lX,GAEzB9nM,KAAKw5E,UAAU0jO,YAAYp1G,GACpB9nM,KAAKw5E,cAIType,EAzH6C,CA0HpDK,GAEEF,EAAiD,SAAUsL,GAC7D72e,EAAUure,EAAmCsL,GAE7C,IAAIlnE,EAAUxva,EAAaore,GAE3B,SAASA,EAAkC9jc,GAGzC,OAFAlyF,EAAgBptB,KAAMojjB,GAEf57D,EAAQxmf,KAAKhB,KAAMs/G,EAAY,CACpColc,aAAcplc,EAAWtkE,KAAK0wgB,gBAmBlC,OAfAj0gB,EAAa2rgB,EAAmC,CAAC,CAC/C9+iB,IAAK,SACL5I,MAAO,WACL,IAAI89E,EAAY+oe,EAAKngc,EAAgBghc,EAAkCjljB,WAAY,SAAU6B,MAAMgB,KAAKhB,MAQxG,OANAw5E,EAAUJ,UAAY,oCAElBp5E,KAAKg7C,KAAKqvgB,kBACZ7we,EAAU0wC,MAAQlqH,KAAKg7C,KAAKqvgB,iBAGvB7we,MAIJ4pe,EA5B4C,CA6BnDP,GAEEQ,EAA6C,SAAUsL,GACzD92e,EAAUwre,EAA+BsL,GAEzC,IAAIC,EAAU52e,EAAaqre,GAE3B,SAASA,EAA8B/jc,GAGrC,OAFAlyF,EAAgBptB,KAAMqjjB,GAEfuL,EAAQ5tjB,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcllc,EAAW2lc,cA2R7B,OAvRAxtgB,EAAa4rgB,EAA+B,CAAC,CAC3C/+iB,IAAK,SACL5I,MAAO,WACL,IAAIs4hB,EAAUh0hB,KAEdA,KAAKw5E,UAAUJ,UAAY,yBAC3B,IAAI66H,EAAUj0M,KAAKynhB,kBACfxmf,EAAKjhC,KAAKg7C,KAAK/Z,GACnBgzK,EAAQvmB,SAASzsJ,EAAI,CACnBvlC,MAAOsE,KAAKg7C,KAAKwjU,WAAW38W,OAAS,EAAI7B,KAAKg7C,KAAKwjU,WAAW,QAAK1iX,IAErE,IAAIqrH,EAAWnnH,KAAKg7C,KAAK+ygB,sBAAsB5mc,SAE1CA,IACHA,EAAW,GAGb,IAAI0nc,EAAgB,QAAQvjjB,OAAO67G,EAAU,4BACzC2nc,EAAgB9ohB,SAASC,cAAc,UAC3Cy8gB,EAAqB/jiB,IAAImwiB,GACzBA,EAAc5xc,SAAWl9G,KAAKg7C,KAAKkxgB,SACnC4C,EAActgjB,KAAOxO,KAAKg7C,KAAK2vU,UAC/BmkM,EAAc3yQ,aAAa,KAAMl7Q,GACjC6thB,EAAcxqb,SAAWm+a,EACzBqM,EAAcxzc,MAAM6L,SAAW,GAAG77G,OAAO67G,EAAU,MAE9CnnH,KAAKg7C,KAAK+zgB,QACbD,EAAc/yjB,KAAOiE,KAAKg7C,KAAKhP,QAAQnqC,OAEnC7B,KAAKg7C,KAAKg0gB,cACZF,EAAcnuc,UAAW,IAI7Bmuc,EAAc9ld,iBAAiB,aAAa,SAAUm+B,GACpD,IAGI0qZ,EAHAt0e,EAAey2e,EAAQh5e,KAAKoxgB,kBAE5Bt6B,EAAc72R,EAA2B6zT,EAAc9ihB,SAG3D,IACE,IAAK8lf,EAAYtkhB,MAAOqkhB,EAAUC,EAAY1rhB,KAAK9F,MAAO,CACxD,IAAIkgH,EAASqxa,EAAQn2hB,MACrB8kH,EAAO8E,SAAW9E,EAAO9kH,QAAU6hD,GAErC,MAAOnM,GACP0gf,EAAY1phB,EAAEgpC,GANhB,QAQE0gf,EAAYp7c,QAIhB,IACIy7c,EADAC,EAAcn3R,EAA2Bj7P,KAAKg7C,KAAKhP,SAGvD,IACE,IAAKomf,EAAY5khB,MAAO2khB,EAAUC,EAAYhshB,KAAK9F,MAAO,CACxD,IAAIkgH,EAAS2xa,EAAQz2hB,MACjBuzjB,EAAgBjphB,SAASC,cAAc,UAC3CgphB,EAAclyQ,YAAcv8L,EAAO0uc,aACnCD,EAAcvzjB,MAAQ8kH,EAAOsmc,YAEzB9mjB,KAAKg7C,KAAK+zgB,QACZE,EAAc3zc,MAAM6L,SAAW0nc,GAG7B7ujB,KAAKg7C,KAAKwjU,WAAWj1W,SAASi3G,EAAOsmc,cACvCmI,EAAc9yQ,aAAa,YAAY,GAGzC2yQ,EAAc5xQ,YAAY+xQ,IAE5B,MAAO79gB,GACPghf,EAAYhqhB,EAAEgpC,GAlBhB,QAoBEghf,EAAY17c,IAGd,IAAIg3G,EAAW,SAAkBvmD,EAAOgob,GACtC,IAAI3gjB,EAAO2gjB,EAAW,QAAU,cAC5BnjhB,EAAUm7F,EAAMn6G,OAAOgf,QAE3B,OAAKm7F,EAAMn6G,OAAO2zF,SAIXl/G,MAAMtD,UAAUoN,OAAOvK,KAAKgrC,GAAS,SAAUw0E,GACpD,OAAOA,EAAO8E,YACbt8G,KAAI,SAAUw3G,GACf,OAAOA,EAAOhyG,OANoB,IAA3Bw9B,EAAQkmV,cAAuB,KAAOlmV,EAAQA,EAAQkmV,eAAe1jX,IAU5E4gjB,EAAW,SAAkBjob,GAC/B,IAAIn7F,EAAUm7F,EAAMn6G,OAAOgf,QAC3B,OAAOvqC,MAAMtD,UAAU6K,IAAIhI,KAAKgrC,GAAS,SAAUw0E,GACjD,MAAO,CACL0uc,aAAc1uc,EAAOu8L,YACrB+pQ,YAAatmc,EAAO9kH,WAiL1B,OA5KIsE,KAAKmljB,iBAAmBnljB,KAAKsphB,cAC/BwlC,EAAc9ld,iBAAiB,qBAAqB,SAAU8hd,GAC5D,IAAIvhf,EAAU,CACZ7tE,MAAO,SAAeyrI,GACpB,IAII+uZ,EAJAx6hB,EAAQyrI,EAAMwhb,OAAOjtjB,MACrByP,EAAS,IAAItM,IAAI4C,MAAMC,QAAQhG,GAASA,EAAQ,CAACA,IAEjDy6hB,EAAcl7R,EAA2B6zT,EAAc9ihB,SAG3D,IACE,IAAKmqf,EAAY3ohB,MAAO0ohB,EAAUC,EAAY/vhB,KAAK9F,MAAO,CACxD,IAAIkgH,EAAS01a,EAAQx6hB,MACrB8kH,EAAO8E,SAAWn6G,EAAOlH,IAAIu8G,EAAO9kH,QAEtC,MAAO01C,GACP+kf,EAAY/thB,EAAEgpC,GANhB,QAQE+kf,EAAYz/c,IAGdu9H,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,GAAO,MAG3Bkob,kBAAmB,SAA2Blob,GAC5C2nb,EAAcnuc,UAAW,GAE3BzxG,OAAQ,SAAgBi4H,GACtB,IAAIn7F,EAAU8ihB,EAAc9ihB,QACxB7vC,EAAQgrI,EAAMwhb,OAAOz5iB,OAIzB,GAHA88B,EAAQ7vC,GAAOmpH,UAAW,EAC1Bwpc,EAAc5/iB,OAAO/S,GAEjB6vC,EAAQnqC,OAAS,EAAG,CACtB,IAAImB,EAAIvB,MAAMtD,UAAU6nB,UAAUhlB,KAAKgrC,GAAS,SAAUw0E,GACxD,OAAOA,EAAO8E,aAGL,IAAPtiH,IACFgpC,EAAQ,GAAGs5E,UAAW,GAI1B2uF,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,GAAO,GACvB6/H,MAAOooT,EAASjob,MAGpBj0H,MAAO,SAAei0H,GACpB,KAAgC,IAAzB2nb,EAAcjtjB,QACnBitjB,EAAc5/iB,OAAO,GAGvB+kM,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAO,KACPsrQ,MAAO,MAGX7tP,OAAQ,SAAgBguH,GACtB,IAAImob,EAAuBnob,EAAMwhb,OAAOxviB,OACpChd,EAAQmzjB,EAAqBnzjB,MAC7B+yjB,EAAeI,EAAqBJ,aACpCpI,EAAcwI,EAAqBxI,YACnCmI,EAAgBjphB,SAASC,cAAc,UAC3CgphB,EAAclyQ,YAAcmyQ,EAC5BD,EAAcvzjB,MAAQorjB,EACtBgI,EAAchgJ,aAAamgJ,EAAeH,EAAcxohB,SAASnqC,IACjE83M,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,GAAO,GACvB6/H,MAAOooT,EAASjob,MAGpB6/H,MAAO,SAAe7/H,GAGpB,IAFA,IAAI6/H,EAAQ7/H,EAAMwhb,OAAO3hT,MAEO,IAAzB8nT,EAAcjtjB,QACnBitjB,EAAc5/iB,OAAO,GAGvB,IACIgrhB,EADAD,EAAch/R,EAA2B+L,GAG7C,IACE,IAAKizR,EAAYzshB,MAAO0shB,EAAUD,EAAY7zhB,KAAK9F,MAAO,CACxD,IAAIs5E,EAAOsgd,EAAQx+hB,MACfwzjB,EAAet1e,EAAKs1e,aACpBpI,EAAclte,EAAKkte,YACnBmI,EAAgBjphB,SAASC,cAAc,UAC3CgphB,EAAclyQ,YAAcmyQ,EAC5BD,EAAcvzjB,MAAQorjB,EACtBgI,EAAc5xQ,YAAY+xQ,IAE5B,MAAO79gB,GACP6of,EAAY7xhB,EAAEgpC,GAXhB,QAaE6of,EAAYvjd,IAGVo4e,EAAc9ihB,QAAQnqC,OAAS,IACjCitjB,EAAc9ihB,QAAQ,GAAGs5E,UAAW,GAGtC2uF,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,GAAO,GACvB6/H,MAAOooT,EAASjob,MAGpBz/G,QAAS,SAAiBy/G,GACxB,IAGIoob,EAHA7niB,EAAU,IAAI7oB,IAAIsoI,EAAMwhb,OAAOjhiB,SAE/B8niB,EAAcv0T,EAA2B9zH,EAAMn6G,OAAOgf,SAG1D,IACE,IAAKwjhB,EAAYhijB,MAAO+hjB,EAAUC,EAAYppjB,KAAK9F,MAAO,CACxD,IAAIkgH,EAAS+uc,EAAQ7zjB,MACrB8kH,EAAO8E,SAAW59F,EAAQzjB,IAAIu8G,EAAOrkH,QAEvC,MAAOi1C,GACPo+gB,EAAYpnjB,EAAEgpC,GANhB,QAQEo+gB,EAAY94e,IAGdu9H,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,GAAO,MAG3BjtH,SAAU,SAAkBitH,GAC1BA,EAAMn6G,OAAOkwF,UAAYiqB,EAAMwhb,OAAOzuiB,WAI1C85gB,EAAQ44B,0BAA0Brjf,EAASuhf,MAE7CgE,EAAc9ld,iBAAiB,SAAS,SAAUm+B,GAChD,IAAIsob,EAEA3I,EAAcp5X,EAASvmD,GAAO,GAC9BzrI,EAAQgyL,EAASvmD,GAAO,GAC5B8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOorjB,IAEkD,QAA1D2I,EAAwBz7B,EAAQ8wB,YAAY4D,gBAAgD,IAA1B+G,GAA4CA,EAAsB9khB,SAAS,yBAA0B,CACtK1d,OAAQ+mgB,EACR20B,OAAQ,CACN1nhB,GAAIA,EACJzyB,KAAM,YACN9S,MAAOA,EACPg0jB,SAAU5I,EACViG,YAAY,EACZD,UAAW,EACX6C,SAAS,QAKf3vjB,KAAKwtjB,mBAAmBsB,EAAe,CAAC,CAAC,QAAS,SAAU,CAAC,OAAQ,QAAS,CAAC,YAAa,cAAe,CAAC,aAAc,eAAgB,CAAC,aAAc,cAAe,CAAC,UAAW,YAAa,CAAC,QAAS,YAAY,SAAU3nb,GAC/N,OAAOA,EAAMn6G,OAAOgvG,YAGtB8yb,EAAc9ld,iBAAiB,SAAS,SAAUm+B,GAChD8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOgyL,EAASvmD,QAKtBnnI,KAAK6tjB,oBAAoBiB,GAEzB9ujB,KAAKw5E,UAAU0jO,YAAY4xQ,GACpB9ujB,KAAKw5E,cAIT6pe,EApSwC,CAqS/CC,GAEEC,EAAsC,SAAUqM,GAClD/3e,EAAU0re,EAAwBqM,GAElC,IAAIC,EAAU73e,EAAaure,GAE3B,SAASA,EAAuBjkc,GAC9B,IAAIwwc,EAAwBC,EAAwBC,EAEpD5iiB,EAAgBptB,KAAMujjB,GAEtB,IAAIiB,KAA0E,QAAvDsL,EAAyBxwc,EAAWtkE,KAAKkwe,gBAAiD,IAA3B4kC,GAAqCA,EAAuBtniB,KAAkE,QAA1DuniB,EAAyBzwc,EAAWtkE,KAAKmwe,mBAAoD,IAA3B4kC,GAAqCA,EAAuBvniB,KAA+D,QAAvDwniB,EAAyB1wc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3BwJ,GAAqCA,EAAuBxniB,KAC3Z,OAAOqniB,EAAQ7ujB,KAAKhB,KAAMs/G,EAAY,CACpCklc,aAAcA,IA4ClB,OAxCA/sgB,EAAa8rgB,EAAwB,CAAC,CACpCj/iB,IAAK,SACL5I,MAAO,WAIL,GAFAsE,KAAKw5E,UAAUJ,UAAY,kBADR,CAAC,OAAQ,SAAU,SAAU,WAAY,UAAW,OAGtD7vE,SAASvJ,KAAKg7C,KAAKi1gB,YAClC,OAAOjwjB,KAAKw5E,UAGd,IAAI/oC,EAAW,wBAAyBnlC,OAAOtL,KAAKg7C,KAAK2+V,SAAU,MAC/Du2K,EAAiBlwjB,KAAK6kjB,MAAM7qW,iBAAiBvpK,GAEjD,GAA8B,IAA1By/gB,EAAerujB,OACjB,OAAO7B,KAAKw5E,UAGd,IAAI6se,EAAQ,IAAIC,EAAa,CAC3B9se,UAAWx5E,KAAKw5E,UAChB4se,QAAS3kjB,MAAMuN,KAAKkhjB,GACpBjqd,MAAOjmG,KAAKg7C,KAAKirD,MACjBilb,SAAUlrhB,KAAKg7C,KAAKkwe,SACpBq7B,iBAAkBvmjB,KAAKg7C,KAAKurgB,iBAC5Bp7B,YAAanrhB,KAAKg7C,KAAKmwe,YACvBq7B,SAAUxmjB,KAAKg7C,KAAKwrgB,WAElB56S,EAAO5rQ,KAAK4rQ,KAEZj2G,EAAO6wU,EAAM8F,KAAK4b,cAAc,CAAClof,KAAKg7C,KAAKm1gB,WAAW,GAAIvkT,EAAKtsE,KAAK,GAAKt/L,KAAKg7C,KAAKm1gB,WAAW,GAAKvkT,EAAKtsE,KAAK,GAAIt/L,KAAKg7C,KAAKm1gB,WAAW,GAAIvkT,EAAKtsE,KAAK,GAAKt/L,KAAKg7C,KAAKm1gB,WAAW,GAAKvkT,EAAKtsE,KAAK,KAE7L8wX,EAAYz6Z,EAAK,GAAK31J,KAAKg7C,KAAKm1gB,WAAW,GAAKnwjB,KAAKg7C,KAAKm1gB,WAAW,GACrEE,EAAW16Z,EAAK,GAKpB,OAJA31J,KAAKw5E,UAAU8hC,MAAM2pB,gBAAkB,GAAG35H,QAAQ8kjB,EAAW,OAAO9kjB,QAAQ+kjB,EAAU,MACtFrwjB,KAAKw5E,UAAU8hC,MAAM/gG,KAAO,GAAGjP,OAAO8kjB,EAAW,MACjDpwjB,KAAKw5E,UAAU8hC,MAAMgZ,IAAM,GAAGhpH,OAAO+kjB,EAAU,MAC/CrwjB,KAAKw5E,UAAU0jO,YAAYmpQ,EAAMjkb,UAC1BpiI,KAAKw5E,cAIT+pe,EAxDiC,CAyDxCe,GAEEgC,EAA4B,WAC9B,SAASA,EAAahnc,GACpBlyF,EAAgBptB,KAAMsmjB,GAEtBtmjB,KAAKw5E,UAAY8lC,EAAW9lC,UAC5Bx5E,KAAKomjB,QAAU9mc,EAAW8mc,QAC1BpmjB,KAAKimG,MAAQqZ,EAAWrZ,MACxBjmG,KAAKkrhB,SAAW5ra,EAAW4ra,SAC3BlrhB,KAAKumjB,iBAAmBjnc,EAAWinc,iBACnCvmjB,KAAKmrhB,YAAc7ra,EAAW6ra,YAC9BnrhB,KAAKwmjB,SAAWlnc,EAAWknc,SAC3BxmjB,KAAKymjB,YAAcnnc,EAAWmnc,cAAe,EAC7CzmjB,KAAKswjB,QAAS,EA6IhB,OA1IA74gB,EAAa6ugB,EAAc,CAAC,CAC1BhijB,IAAK,SACL5I,MAAO,WACL,IAAI60jB,EAAgBC,EAGhB3mY,EAAU7jJ,SAASC,cAAc,OACrC4jJ,EAAQzwG,UAAY,eACpBp5E,KAAKywjB,YAAczwjB,KAAKymjB,YAAc58X,EAAU7pL,KAAKw5E,UACrDx5E,KAAKywjB,YAAYhrb,QAAS,EAC1B,IAAI4gb,EAAQrghB,SAASC,cAAc,OACnCoghB,EAAMjte,UAAY,QAClB,IAAI6sB,EAAQjmG,KAAKimG,MAEjB,GAAIA,EAAO,CACT,IAAI9uB,EAVmB,IAUO,IAAM8uB,EAAM,IAAMA,EAAM,GAClDtvB,EAXmB,IAWO,IAAMsvB,EAAM,IAAMA,EAAM,GAClDrgG,EAZmB,IAYO,IAAMqgG,EAAM,IAAMA,EAAM,GACtDogd,EAAM/qc,MAAM0J,gBAAkBwhX,EAAM8F,KAAKsnE,aAAiB,EAAJz8d,EAAW,EAAJR,EAAW,EAAJ/wE,GAGtE,IAAIskH,EAAQlkF,SAASC,cAAc,MACnCikF,EAAMymC,IAAM3wJ,KAAKkrhB,SAASv6X,IAC1BzmC,EAAM6yL,YAAc/8S,KAAKkrhB,SAAS1igB,IAClC69hB,EAAMnpQ,YAAYhzL,GAElB,IAAIwmc,EAAalvC,EAAex7C,cAAc2qF,aAAa3wjB,KAAKumjB,kBAEhE,GAAImK,EAAY,CACd,IAAInK,EAAmBvghB,SAASC,cAAc,QAC9CsghB,EAAiBnte,UAAY,YAC7Bmte,EAAiBxpQ,YAAc,qBAC/BwpQ,EAAiByD,QAAQC,OAAS,yBAClC1D,EAAiByD,QAAQE,SAAWv7iB,KAAKC,UAAU,CACjDm9G,KAAM2kc,EAAWE,qBACjB3kgB,KAAMykgB,EAAWG,uBAEnBxK,EAAMnpQ,YAAYqpQ,GAGpB,GAAyC,QAApCgK,EAAiBvwjB,KAAKwmjB,gBAAyC,IAAnB+J,IAA6BA,EAAe/niB,KAAqD,QAA1CgoiB,EAAoBxwjB,KAAKmrhB,mBAA+C,IAAtBqlC,GAAgCA,EAAkBhoiB,KAAQxoB,KAAKmrhB,YAAY3igB,MAAQxoB,KAAKwmjB,SAASh+hB,IAQpP,CACL,IAAIsoiB,EAAW9wjB,KAAK+wjB,gBAAgB/wjB,KAAKmrhB,aAEzCk7B,EAAMnpQ,YAAY4zQ,QAVlB3O,EAAW6O,SAAS5ub,OAAO,CACzB6ub,QAASjxjB,KAAKwmjB,SAAS5xD,KACvB41B,OAAQ,WACR9xc,IAAK2te,IAGPA,EAAM6K,UAAU93e,UAAY,wBAOzB33E,MAAMC,QAAQ1B,KAAKomjB,WACtBpmjB,KAAKomjB,QAAU,CAACpmjB,KAAKomjB,UAGvB,IACI+K,EADAC,EAAcn2T,EAA2Bj7P,KAAKomjB,SAGlD,IACE,IAAKgL,EAAY5jjB,MAAO2jjB,EAAUC,EAAYhrjB,KAAK9F,MAAO,CACxD,IAAIwnM,EAAUqpX,EAAQz1jB,MACtBosM,EAAQ9+F,iBAAiB,QAAShpG,KAAKqxjB,QAAQvviB,KAAK9hB,OACpD8nM,EAAQ9+F,iBAAiB,YAAahpG,KAAKsxjB,MAAMxviB,KAAK9hB,MAAM,IAC5D8nM,EAAQ9+F,iBAAiB,WAAYhpG,KAAKuxjB,MAAMzviB,KAAK9hB,MAAM,KAE7D,MAAOoxC,GACPgghB,EAAYhpjB,EAAEgpC,GARhB,QAUEgghB,EAAY16e,IAKd,OAFA2ve,EAAMr9c,iBAAiB,QAAShpG,KAAKuxjB,MAAMzviB,KAAK9hB,MAAM,IACtD6pL,EAAQqzH,YAAYmpQ,GACbx8X,IAER,CACDvlL,IAAK,kBACL5I,MAAO,SAAyBitC,GAC9B,IAAIngB,EAAMmgB,EAAMngB,IACZmoI,EAAMhoH,EAAMgoH,IACZl7E,EAAIzvC,SAASC,cAAc,KAC/BwvC,EAAE2D,UAAY,eACd3D,EAAEk7E,IAAMA,EAGR,IAFA,IAAI6ga,EAAQhpiB,EAAIu2B,MAAM,gBAEb/7C,EAAI,EAAGkB,EAAKstjB,EAAM3vjB,OAAQmB,EAAIkB,IAAMlB,EAAG,CAC9C,IAAIq5R,EAAOm1R,EAAMxujB,GACjByyE,EAAEynO,YAAYl3Q,SAASs5d,eAAejjO,IAElCr5R,EAAIkB,EAAK,GACXuxE,EAAEynO,YAAYl3Q,SAASC,cAAc,OAIzC,OAAOwvC,IAER,CACDnxE,IAAK,UACL5I,MAAO,WACDsE,KAAKswjB,OACPtwjB,KAAKuxjB,OAAM,GAEXvxjB,KAAKsxjB,OAAM,KAGd,CACDhtjB,IAAK,QACL5I,MAAO,WACL,IAAI+1jB,EAAM/tjB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAErE+tjB,IACFzxjB,KAAKswjB,QAAS,GAGZtwjB,KAAKywjB,YAAYhrb,SACnBzlI,KAAKywjB,YAAYhrb,QAAS,EAC1BzlI,KAAKw5E,UAAU8hC,MAAM0lB,QAAU,KAGlC,CACD18H,IAAK,QACL5I,MAAO,WACL,IAAIg2jB,IAAQhujB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,KAAmBA,UAAU,GAEvEgujB,IACF1xjB,KAAKswjB,QAAS,GAGXtwjB,KAAKywjB,YAAYhrb,QAAWzlI,KAAKswjB,SACpCtwjB,KAAKywjB,YAAYhrb,QAAS,EAC1BzlI,KAAKw5E,UAAU8hC,MAAM0lB,QAAU,OAK9Bslb,EAzJuB,GA4J5B9C,EAAyC,SAAUmO,GACrD95e,EAAU2re,EAA2BmO,GAErC,IAAIC,EAAW55e,EAAawre,GAE5B,SAASA,EAA0Blkc,GACjC,IAAIuyc,EAAwBC,EAAwBC,EAEpD3kiB,EAAgBptB,KAAMwjjB,GAEtB,IAAIgB,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvD8H,EAAyBvyc,EAAWtkE,KAAKkwe,gBAAiD,IAA3B2mC,GAAqCA,EAAuBrpiB,KAAkE,QAA1DspiB,EAAyBxyc,EAAWtkE,KAAKmwe,mBAAoD,IAA3B2mC,GAAqCA,EAAuBtpiB,KAA+D,QAAvDupiB,EAAyBzyc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3BuL,GAAqCA,EAAuBvpiB,KACvb,OAAOopiB,EAAS5wjB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IAiBlB,OAbAjtgB,EAAa+rgB,EAA2B,CAAC,CACvCl/iB,IAAK,SACL5I,MAAO,WAOL,OANAsE,KAAKw5E,UAAUJ,UAAY,qBAEtBp5E,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAGxBh7C,KAAKw5E,cAITgqe,EA9BoC,CA+B3Cc,GAEEb,EAAqC,SAAUuO,GACjDn6e,EAAU4re,EAAuBuO,GAEjC,IAAIC,EAAWj6e,EAAayre,GAE5B,SAASA,EAAsBnkc,GAC7B,IAAI4yc,EAAwBC,EAAwBC,EAEpDhliB,EAAgBptB,KAAMyjjB,GAEtB,IAAIe,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvDmI,EAAyB5yc,EAAWtkE,KAAKkwe,gBAAiD,IAA3BgnC,GAAqCA,EAAuB1piB,KAAkE,QAA1D2piB,EAAyB7yc,EAAWtkE,KAAKmwe,mBAAoD,IAA3BgnC,GAAqCA,EAAuB3piB,KAA+D,QAAvD4piB,EAAyB9yc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3B4L,GAAqCA,EAAuB5piB,KACvb,OAAOypiB,EAASjxjB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IA6BlB,OAzBAjtgB,EAAagsgB,EAAuB,CAAC,CACnCn/iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAY,iBAC3B,IAAIp+B,EAAOh7C,KAAKg7C,KACZsgC,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GAClC3nC,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOi9E,EAAOi2C,GACpC8qK,EAAOr8R,KAAKkljB,WAAWj/gB,cAAc,YAazC,OAZAo2P,EAAK8f,aAAa,KAAMnhQ,EAAK26G,KAAK,GAAK36G,EAAKq3gB,gBAAgB,IAC5Dh2R,EAAK8f,aAAa,KAAMnhQ,EAAK26G,KAAK,GAAK36G,EAAKq3gB,gBAAgB,IAC5Dh2R,EAAK8f,aAAa,KAAMnhQ,EAAK26G,KAAK,GAAK36G,EAAKq3gB,gBAAgB,IAC5Dh2R,EAAK8f,aAAa,KAAMnhQ,EAAK26G,KAAK,GAAK36G,EAAKq3gB,gBAAgB,IAC5Dh2R,EAAK8f,aAAa,eAAgBnhQ,EAAK0sE,YAAYpsC,OAAS,GAC5D+gN,EAAK8f,aAAa,SAAU,eAC5B9f,EAAK8f,aAAa,OAAQ,eAC1BnuL,EAAIkvL,YAAY7gB,GAChBr8R,KAAKw5E,UAAUi2E,OAAOzhC,GAEtBhuH,KAAKmqjB,aAAa9tR,EAAMrhP,GAEjBh7C,KAAKw5E,cAITiqe,EA1CgC,CA2CvCa,GAEEZ,EAAuC,SAAU4O,GACnDz6e,EAAU6re,EAAyB4O,GAEnC,IAAIC,EAAWv6e,EAAa0re,GAE5B,SAASA,EAAwBpkc,GAC/B,IAAIkzc,EAAwBC,EAAwBC,EAEpDtliB,EAAgBptB,KAAM0jjB,GAEtB,IAAIc,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvDyI,EAAyBlzc,EAAWtkE,KAAKkwe,gBAAiD,IAA3BsnC,GAAqCA,EAAuBhqiB,KAAkE,QAA1DiqiB,EAAyBnzc,EAAWtkE,KAAKmwe,mBAAoD,IAA3BsnC,GAAqCA,EAAuBjqiB,KAA+D,QAAvDkqiB,EAAyBpzc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3BkM,GAAqCA,EAAuBlqiB,KACvb,OAAO+piB,EAASvxjB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IA8BlB,OA1BAjtgB,EAAaisgB,EAAyB,CAAC,CACrCp/iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAY,mBAC3B,IAAIp+B,EAAOh7C,KAAKg7C,KACZsgC,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GAClC3nC,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOi9E,EAAOi2C,GACpC5J,EAAc3sE,EAAK0sE,YAAYpsC,MAC/B4iQ,EAASl+U,KAAKkljB,WAAWj/gB,cAAc,YAa3C,OAZAi4S,EAAO/hC,aAAa,IAAKx0L,EAAc,GACvCu2N,EAAO/hC,aAAa,IAAKx0L,EAAc,GACvCu2N,EAAO/hC,aAAa,QAAS7gO,EAAQqsC,GACrCu2N,EAAO/hC,aAAa,SAAU5qL,EAAS5J,GACvCu2N,EAAO/hC,aAAa,eAAgBx0L,GAAe,GACnDu2N,EAAO/hC,aAAa,SAAU,eAC9B+hC,EAAO/hC,aAAa,OAAQ,eAC5BnuL,EAAIkvL,YAAYghC,GAChBl+U,KAAKw5E,UAAUi2E,OAAOzhC,GAEtBhuH,KAAKmqjB,aAAajsO,EAAQljS,GAEnBh7C,KAAKw5E,cAITkqe,EA3CkC,CA4CzCY,GAEEX,EAAuC,SAAUgP,GACnD96e,EAAU8re,EAAyBgP,GAEnC,IAAIC,EAAW56e,EAAa2re,GAE5B,SAASA,EAAwBrkc,GAC/B,IAAIuzc,EAAwBC,EAAwBC,EAEpD3liB,EAAgBptB,KAAM2jjB,GAEtB,IAAIa,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvD8I,EAAyBvzc,EAAWtkE,KAAKkwe,gBAAiD,IAA3B2nC,GAAqCA,EAAuBrqiB,KAAkE,QAA1DsqiB,EAAyBxzc,EAAWtkE,KAAKmwe,mBAAoD,IAA3B2nC,GAAqCA,EAAuBtqiB,KAA+D,QAAvDuqiB,EAAyBzzc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3BuM,GAAqCA,EAAuBvqiB,KACvb,OAAOoqiB,EAAS5xjB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IA8BlB,OA1BAjtgB,EAAaksgB,EAAyB,CAAC,CACrCr/iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAY,mBAC3B,IAAIp+B,EAAOh7C,KAAKg7C,KACZsgC,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GAClC3nC,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOi9E,EAAOi2C,GACpC5J,EAAc3sE,EAAK0sE,YAAYpsC,MAC/B03e,EAAShzjB,KAAKkljB,WAAWj/gB,cAAc,eAa3C,OAZA+shB,EAAO72Q,aAAa,KAAM7gO,EAAQ,GAClC03e,EAAO72Q,aAAa,KAAM5qL,EAAS,GACnCyhc,EAAO72Q,aAAa,KAAM7gO,EAAQ,EAAIqsC,EAAc,GACpDqrc,EAAO72Q,aAAa,KAAM5qL,EAAS,EAAI5J,EAAc,GACrDqrc,EAAO72Q,aAAa,eAAgBx0L,GAAe,GACnDqrc,EAAO72Q,aAAa,SAAU,eAC9B62Q,EAAO72Q,aAAa,OAAQ,eAC5BnuL,EAAIkvL,YAAY81Q,GAChBhzjB,KAAKw5E,UAAUi2E,OAAOzhC,GAEtBhuH,KAAKmqjB,aAAa6I,EAAQh4gB,GAEnBh7C,KAAKw5E,cAITmqe,EA3CkC,CA4CzCW,GAEEV,EAAyC,SAAUqP,GACrDp7e,EAAU+re,EAA2BqP,GAErC,IAAIC,EAAWl7e,EAAa4re,GAE5B,SAASA,EAA0Btkc,GACjC,IAAI6zc,EAAwBC,EAAwBC,EAEhD/+B,EAEJlngB,EAAgBptB,KAAM4jjB,GAEtB,IAAIY,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvDoJ,EAAyB7zc,EAAWtkE,KAAKkwe,gBAAiD,IAA3BioC,GAAqCA,EAAuB3qiB,KAAkE,QAA1D4qiB,EAAyB9zc,EAAWtkE,KAAKmwe,mBAAoD,IAA3BioC,GAAqCA,EAAuB5qiB,KAA+D,QAAvD6qiB,EAAyB/zc,EAAWtkE,KAAKwrgB,gBAAiD,IAA3B6M,GAAqCA,EAAuB7qiB,KAOvb,OANA8rgB,EAAU4+B,EAASlyjB,KAAKhB,KAAMs/G,EAAY,CACxCklc,aAAcA,EACdE,cAAc,KAER4O,mBAAqB,qBAC7Bh/B,EAAQi/B,eAAiB,eAClBj/B,EA4CT,OAzCA78e,EAAamsgB,EAA2B,CAAC,CACvCt/iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAYp5E,KAAKszjB,mBAChC,IAOIE,EAPAx4gB,EAAOh7C,KAAKg7C,KACZsgC,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GAClC3nC,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOi9E,EAAOi2C,GACpC0pJ,EAAS,GAETw4S,EAAcx4T,EAA2BjgN,EAAK04gB,UAGlD,IACE,IAAKD,EAAYjmjB,MAAOgmjB,EAAUC,EAAYrtjB,KAAK9F,MAAO,CACxD,IAAIqzjB,EAAaH,EAAQ93jB,MACrBmc,EAAI87iB,EAAW97iB,EAAImjC,EAAK26G,KAAK,GAC7BnqH,EAAIwP,EAAK26G,KAAK,GAAKg+Z,EAAWnohB,EAClCyvO,EAAO7uQ,KAAKyL,EAAI,IAAM2zB,IAExB,MAAO4F,GACPqihB,EAAYrrjB,EAAEgpC,GARhB,QAUEqihB,EAAY/8e,IAGdukM,EAASA,EAAOx5P,KAAK,KACrB,IAAImyiB,EAAW5zjB,KAAKkljB,WAAWj/gB,cAAcjmC,KAAKuzjB,gBAUlD,OATAK,EAASz3Q,aAAa,SAAUlhC,GAChC24S,EAASz3Q,aAAa,eAAgBnhQ,EAAK0sE,YAAYpsC,OAAS,GAChEs4e,EAASz3Q,aAAa,SAAU,eAChCy3Q,EAASz3Q,aAAa,OAAQ,eAC9BnuL,EAAIkvL,YAAY02Q,GAChB5zjB,KAAKw5E,UAAUi2E,OAAOzhC,GAEtBhuH,KAAKmqjB,aAAayJ,EAAU54gB,GAErBh7C,KAAKw5E,cAIToqe,EA/DoC,CAgE3CU,GAEEP,EAAwC,SAAU8P,GACpDh8e,EAAUkse,EAA0B8P,GAEpC,IAAIC,EAAW97e,EAAa+re,GAE5B,SAASA,EAAyBzkc,GAChC,IAAI22a,EAOJ,OALA7ogB,EAAgBptB,KAAM+jjB,IAEtB9tB,EAAU69B,EAAS9yjB,KAAKhB,KAAMs/G,IACtBg0c,mBAAqB,oBAC7Br9B,EAAQs9B,eAAiB,cAClBt9B,EAGT,OAAO8tB,EAhBmC,CAiB1CH,GAEEC,EAAsC,SAAUkQ,GAClDl8e,EAAUgse,EAAwBkQ,GAElC,IAAIC,EAAWh8e,EAAa6re,GAE5B,SAASA,EAAuBvkc,GAC9B,IAAI20c,EAAwBC,EAAwBC,EAEpD/miB,EAAgBptB,KAAM6jjB,GAEtB,IAAIW,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvDkK,EAAyB30c,EAAWtkE,KAAKkwe,gBAAiD,IAA3B+oC,GAAqCA,EAAuBzriB,KAAkE,QAA1D0riB,EAAyB50c,EAAWtkE,KAAKmwe,mBAAoD,IAA3B+oC,GAAqCA,EAAuB1riB,KAA+D,QAAvD2riB,EAAyB70c,EAAWtkE,KAAKwrgB,gBAAiD,IAA3B2N,GAAqCA,EAAuB3riB,KACvb,OAAOwriB,EAAShzjB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IAiBlB,OAbAjtgB,EAAaosgB,EAAwB,CAAC,CACpCv/iB,IAAK,SACL5I,MAAO,WAOL,OANAsE,KAAKw5E,UAAUJ,UAAY,kBAEtBp5E,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAGxBh7C,KAAKw5E,cAITqqe,EA9BiC,CA+BxCS,GAEER,EAAoC,SAAUsQ,GAChDv8e,EAAUise,EAAsBsQ,GAEhC,IAAIC,EAAWr8e,EAAa8re,GAE5B,SAASA,EAAqBxkc,GAC5B,IAAIg1c,EAAwBC,EAAwBC,EAEhD/9B,EAEJrpgB,EAAgBptB,KAAM8jjB,GAEtB,IAAIU,KAAkBllc,EAAWtkE,KAAK+ugB,UAAoE,QAAvDuK,EAAyBh1c,EAAWtkE,KAAKkwe,gBAAiD,IAA3BopC,GAAqCA,EAAuB9riB,KAAkE,QAA1D+riB,EAAyBj1c,EAAWtkE,KAAKmwe,mBAAoD,IAA3BopC,GAAqCA,EAAuB/riB,KAA+D,QAAvDgsiB,EAAyBl1c,EAAWtkE,KAAKwrgB,gBAAiD,IAA3BgO,GAAqCA,EAAuBhsiB,KAOvb,OANAiugB,EAAU49B,EAASrzjB,KAAKhB,KAAMs/G,EAAY,CACxCklc,aAAcA,EACdE,cAAc,KAER4O,mBAAqB,gBAC7B78B,EAAQ88B,eAAiB,eAClB98B,EA0DT,OAvDAh/e,EAAaqsgB,EAAsB,CAAC,CAClCx/iB,IAAK,SACL5I,MAAO,WACLsE,KAAKw5E,UAAUJ,UAAYp5E,KAAKszjB,mBAChC,IAMImB,EANAz5gB,EAAOh7C,KAAKg7C,KACZsgC,EAAQtgC,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GACjCpkC,EAASv2E,EAAK26G,KAAK,GAAK36G,EAAK26G,KAAK,GAClC3nC,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOi9E,EAAOi2C,GAEpCmjc,EAAcz5T,EAA2BjgN,EAAK25gB,UAGlD,IACE,IAAKD,EAAYlnjB,MAAOinjB,EAAUC,EAAYtujB,KAAK9F,MAAO,CACxD,IAIIs0jB,EAJAC,EAAUJ,EAAQ/4jB,MAClBu/Q,EAAS,GAET65S,EAAc75T,EAA2B45T,GAG7C,IACE,IAAKC,EAAYtnjB,MAAOonjB,EAAUE,EAAY1ujB,KAAK9F,MAAO,CACxD,IAAIqzjB,EAAaiB,EAAQl5jB,MACrBmc,EAAI87iB,EAAW97iB,EAAImjC,EAAK26G,KAAK,GAC7BnqH,EAAIwP,EAAK26G,KAAK,GAAKg+Z,EAAWnohB,EAClCyvO,EAAO7uQ,KAAK,GAAGd,OAAOuM,EAAG,KAAKvM,OAAOkgC,KAEvC,MAAO4F,GACP0jhB,EAAY1sjB,EAAEgpC,GARhB,QAUE0jhB,EAAYp+e,IAGdukM,EAASA,EAAOx5P,KAAK,KACrB,IAAImyiB,EAAW5zjB,KAAKkljB,WAAWj/gB,cAAcjmC,KAAKuzjB,gBAClDK,EAASz3Q,aAAa,SAAUlhC,GAChC24S,EAASz3Q,aAAa,eAAgBnhQ,EAAK0sE,YAAYpsC,OAAS,GAChEs4e,EAASz3Q,aAAa,SAAU,eAChCy3Q,EAASz3Q,aAAa,OAAQ,eAE9Bn8S,KAAKmqjB,aAAayJ,EAAU54gB,GAE5BgzE,EAAIkvL,YAAY02Q,IAElB,MAAOxihB,GACPsjhB,EAAYtsjB,EAAEgpC,GAjChB,QAmCEsjhB,EAAYh+e,IAId,OADA12E,KAAKw5E,UAAUi2E,OAAOzhC,GACfhuH,KAAKw5E,cAITsqe,EA7E+B,CA8EtCQ,GAEEN,EAA0C,SAAU+Q,GACtDl9e,EAAUmse,EAA4B+Q,GAEtC,IAAIC,EAAWh9e,EAAagse,GAE5B,SAASA,EAA2B1kc,GAClC,IAAI21c,EAAyBC,EAAyBC,EAEtD/niB,EAAgBptB,KAAMgkjB,GAEtB,IAAIQ,KAAkBllc,EAAWtkE,KAAK+ugB,UAAqE,QAAxDkL,EAA0B31c,EAAWtkE,KAAKkwe,gBAAkD,IAA5B+pC,GAAsCA,EAAwBzsiB,KAAmE,QAA3D0siB,EAA0B51c,EAAWtkE,KAAKmwe,mBAAqD,IAA5B+pC,GAAsCA,EAAwB1siB,KAAgE,QAAxD2siB,EAA0B71c,EAAWtkE,KAAKwrgB,gBAAkD,IAA5B2O,GAAsCA,EAAwB3siB,KAChc,OAAOwsiB,EAASh0jB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,EACdE,sBAAsB,IAoB1B,OAhBAntgB,EAAausgB,EAA4B,CAAC,CACxC1/iB,IAAK,SACL5I,MAAO,WAKL,OAJKsE,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAG3Bh7C,KAAKyljB,eACAzljB,KAAKgojB,sBAAsB,wBAGpChojB,KAAKw5E,UAAUJ,UAAY,sBACpBp5E,KAAKw5E,eAITwqe,EAlCqC,CAmC5CM,GAEEL,EAA0C,SAAUmR,GACtDv9e,EAAUose,EAA4BmR,GAEtC,IAAIC,EAAWr9e,EAAaise,GAE5B,SAASA,EAA2B3kc,GAClC,IAAIg2c,EAAyBC,EAAyBC,EAEtDpoiB,EAAgBptB,KAAMikjB,GAEtB,IAAIO,KAAkBllc,EAAWtkE,KAAK+ugB,UAAqE,QAAxDuL,EAA0Bh2c,EAAWtkE,KAAKkwe,gBAAkD,IAA5BoqC,GAAsCA,EAAwB9siB,KAAmE,QAA3D+siB,EAA0Bj2c,EAAWtkE,KAAKmwe,mBAAqD,IAA5BoqC,GAAsCA,EAAwB/siB,KAAgE,QAAxDgtiB,EAA0Bl2c,EAAWtkE,KAAKwrgB,gBAAkD,IAA5BgP,GAAsCA,EAAwBhtiB,KAChc,OAAO6siB,EAASr0jB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,EACdE,sBAAsB,IAoB1B,OAhBAntgB,EAAawsgB,EAA4B,CAAC,CACxC3/iB,IAAK,SACL5I,MAAO,WAKL,OAJKsE,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAG3Bh7C,KAAKyljB,eACAzljB,KAAKgojB,sBAAsB,wBAGpChojB,KAAKw5E,UAAUJ,UAAY,sBACpBp5E,KAAKw5E,eAITyqe,EAlCqC,CAmC5CK,GAEEJ,EAAyC,SAAUuR,GACrD59e,EAAUqse,EAA2BuR,GAErC,IAAIC,EAAW19e,EAAakse,GAE5B,SAASA,EAA0B5kc,GACjC,IAAIq2c,EAAyBC,EAAyBC,EAEtDzoiB,EAAgBptB,KAAMkkjB,GAEtB,IAAIM,KAAkBllc,EAAWtkE,KAAK+ugB,UAAqE,QAAxD4L,EAA0Br2c,EAAWtkE,KAAKkwe,gBAAkD,IAA5ByqC,GAAsCA,EAAwBntiB,KAAmE,QAA3DotiB,EAA0Bt2c,EAAWtkE,KAAKmwe,mBAAqD,IAA5ByqC,GAAsCA,EAAwBptiB,KAAgE,QAAxDqtiB,EAA0Bv2c,EAAWtkE,KAAKwrgB,gBAAkD,IAA5BqP,GAAsCA,EAAwBrtiB,KAChc,OAAOktiB,EAAS10jB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,EACdE,sBAAsB,IAoB1B,OAhBAntgB,EAAaysgB,EAA2B,CAAC,CACvC5/iB,IAAK,SACL5I,MAAO,WAKL,OAJKsE,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAG3Bh7C,KAAKyljB,eACAzljB,KAAKgojB,sBAAsB,uBAGpChojB,KAAKw5E,UAAUJ,UAAY,qBACpBp5E,KAAKw5E,eAIT0qe,EAlCoC,CAmC3CI,GAEEH,EAA0C,SAAU2R,GACtDj+e,EAAUsse,EAA4B2R,GAEtC,IAAIC,EAAW/9e,EAAamse,GAE5B,SAASA,EAA2B7kc,GAClC,IAAI02c,EAAyBC,EAAyBC,EAEtD9oiB,EAAgBptB,KAAMmkjB,GAEtB,IAAIK,KAAkBllc,EAAWtkE,KAAK+ugB,UAAqE,QAAxDiM,EAA0B12c,EAAWtkE,KAAKkwe,gBAAkD,IAA5B8qC,GAAsCA,EAAwBxtiB,KAAmE,QAA3DytiB,EAA0B32c,EAAWtkE,KAAKmwe,mBAAqD,IAA5B8qC,GAAsCA,EAAwBztiB,KAAgE,QAAxD0tiB,EAA0B52c,EAAWtkE,KAAKwrgB,gBAAkD,IAA5B0P,GAAsCA,EAAwB1tiB,KAChc,OAAOutiB,EAAS/0jB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,EACdE,sBAAsB,IAoB1B,OAhBAntgB,EAAa0sgB,EAA4B,CAAC,CACxC7/iB,IAAK,SACL5I,MAAO,WAKL,OAJKsE,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAG3Bh7C,KAAKyljB,eACAzljB,KAAKgojB,sBAAsB,wBAGpChojB,KAAKw5E,UAAUJ,UAAY,sBACpBp5E,KAAKw5E,eAIT2qe,EAlCqC,CAmC5CG,GAEEF,EAAsC,SAAU+R,GAClDt+e,EAAUuse,EAAwB+R,GAElC,IAAIC,EAAWp+e,EAAaose,GAE5B,SAASA,EAAuB9kc,GAC9B,IAAI+2c,EAAyBC,EAAyBC,EAEtDnpiB,EAAgBptB,KAAMokjB,GAEtB,IAAII,KAAkBllc,EAAWtkE,KAAK+ugB,UAAqE,QAAxDsM,EAA0B/2c,EAAWtkE,KAAKkwe,gBAAkD,IAA5BmrC,GAAsCA,EAAwB7tiB,KAAmE,QAA3D8tiB,EAA0Bh3c,EAAWtkE,KAAKmwe,mBAAqD,IAA5BmrC,GAAsCA,EAAwB9tiB,KAAgE,QAAxD+tiB,EAA0Bj3c,EAAWtkE,KAAKwrgB,gBAAkD,IAA5B+P,GAAsCA,EAAwB/tiB,KAChc,OAAO4tiB,EAASp1jB,KAAKhB,KAAMs/G,EAAY,CACrCklc,aAAcA,EACdE,cAAc,IAiBlB,OAbAjtgB,EAAa2sgB,EAAwB,CAAC,CACpC9/iB,IAAK,SACL5I,MAAO,WAOL,OANAsE,KAAKw5E,UAAUJ,UAAY,kBAEtBp5E,KAAKg7C,KAAK+ugB,UACb/pjB,KAAKmqjB,aAAa,KAAMnqjB,KAAKg7C,MAGxBh7C,KAAKw5E,cAIT4qe,EA9BiC,CA+BxCE,GAEED,EAA+C,SAAUmS,GAC3D3+e,EAAUwse,EAAiCmS,GAE3C,IAAIC,EAAWz+e,EAAaqse,GAE5B,SAASA,EAAgC/kc,GACvC,IAAIo3c,EAEAv9B,EAEJ/rgB,EAAgBptB,KAAMqkjB,GAKtB,IAAIsS,GAHJx9B,EAAUs9B,EAASz1jB,KAAKhB,KAAMs/G,EAAY,CACxCklc,cAAc,KAEgBxpgB,KAAKy4K,KACjCihG,EAAWiiQ,EAAkBjiQ,SAC7B/4Q,EAAUg7gB,EAAkBh7gB,QAShC,OARAw9e,EAAQzkO,UAAW,EAAI8sN,EAAep6C,oBAAoB1yK,GAC1DykO,EAAQx9e,QAAUA,EACyC,QAA1D+6gB,EAAwBv9B,EAAQ2rB,YAAY4D,gBAAgD,IAA1BgO,GAA4CA,EAAsB/rhB,SAAS,2BAA4B,CACxK1d,OAAQo1F,EAAuB82a,GAC/Bl4f,IAAI,EAAIulc,EAAM+Q,mBAAmB7iL,GACjCA,SAAUA,EACV/4Q,QAASA,IAEJw9e,EA8BT,OA3BA1hf,EAAa4sgB,EAAiC,CAAC,CAC7C//iB,IAAK,SACL5I,MAAO,WACL,IAAIk7jB,EAAqBC,EAEzB72jB,KAAKw5E,UAAUJ,UAAY,2BAC3B,IAAIgte,EAAUpghB,SAASC,cAAc,OAUrC,OATAmghB,EAAQ9qc,MAAMiW,OAASvxH,KAAKw5E,UAAU8hC,MAAMiW,OAC5C60b,EAAQ9qc,MAAMhgC,MAAQt7E,KAAKw5E,UAAU8hC,MAAMhgC,MAC3C8qe,EAAQp9c,iBAAiB,WAAYhpG,KAAK82jB,UAAUh1iB,KAAK9hB,QAEpDA,KAAKg7C,KAAK+ugB,WAA4D,QAA9C6M,EAAsB52jB,KAAKg7C,KAAKkwe,gBAA8C,IAAxB0rC,GAAkCA,EAAoBpuiB,KAA2D,QAAnDquiB,EAAwB72jB,KAAKg7C,KAAKmwe,mBAAmD,IAA1B0rC,GAAoCA,EAAsBruiB,KAAOxoB,KAAKg7C,KAAKwrgB,WACrRxmjB,KAAKmqjB,aAAa/D,EAASpmjB,KAAKg7C,MAGlCh7C,KAAKw5E,UAAU0jO,YAAYkpQ,GACpBpmjB,KAAKw5E,YAEb,CACDl1E,IAAK,YACL5I,MAAO,WACL,IAAIq7jB,EAE+C,QAAlDA,EAAwB/2jB,KAAK+kjB,uBAAuD,IAA1BgS,GAA4CA,EAAsBC,mBAAmBh3jB,KAAKw5E,UAAWx5E,KAAK27C,QAAS37C,KAAK00T,cAIhL2vP,EAxD0C,CAyDjDC,GAEErC,GAA+B,WACjC,SAASA,IACP70hB,EAAgBptB,KAAMiijB,GAoKxB,OAjKAxqgB,EAAawqgB,EAAiB,KAAM,CAAC,CACnC39iB,IAAK,SACL5I,MAAO,SAAgB4jH,GACrB,IAII23c,EAJAC,EAAoB,GACpBC,EAAmB,GAEnBC,EAAcn8T,EAA2B37I,EAAWura,aAGxD,IACE,IAAKusC,EAAY5pjB,MAAOypjB,EAAUG,EAAYhxjB,KAAK9F,MAAO,CACxD,IAAIwsD,EAAQmqgB,EAAQv7jB,MAEfoxD,IAIDA,EAAM81f,iBAAmBp8E,EAAMoN,eAAeiH,MAKlDq8E,EAAkB9qjB,KAAK0gD,GAJrBqqgB,EAAiB/qjB,KAAK0gD,KAM1B,MAAO1b,GACPgmhB,EAAYhvjB,EAAEgpC,GAhBhB,QAkBEgmhB,EAAY1gf,IAGVygf,EAAiBt1jB,QACnBq1jB,EAAkB9qjB,KAAKnE,MAAMivjB,EAAmBC,GAKlD,IAFA,IAAIz+e,EAAM4mC,EAAW5mC,IAEZ2+e,EAAM,EAAGC,EAAqBJ,EAAmBG,EAAMC,EAAmBz1jB,OAAQw1jB,IAAO,CAChG,IAAIr8gB,EAAOs8gB,EAAmBD,GAC1BvvX,EAAU66W,EAAyBtkjB,OAAO,CAC5C28C,KAAMA,EACN6pgB,MAAOnse,EACPkzL,KAAMtsJ,EAAWssJ,KACjB20B,SAAUjhL,EAAWihL,SACrBukR,YAAaxlc,EAAWwlc,YACxBC,gBAAiBzlc,EAAWylc,gBAC5BC,mBAAoB1lc,EAAW0lc,oBAAsB,GACrDC,aAAwC,IAA3B3lc,EAAW2lc,YACxBC,WAAY,IAAI1jC,EAAer7C,cAC/BshD,kBAAmBnoa,EAAWmoa,mBAAqB,IAAI9F,EAAoBmU,kBAC3EqvB,gBAAiB7lc,EAAW6lc,gBAC5B77B,aAAchqa,EAAWgqa,aACzB+7B,aAAc/lc,EAAW+lc,aACzBE,WAAYjmc,EAAWimc,YAAc,CACnC6H,QAAQ,KAIZ,GAAItlX,EAAQ08W,aAAc,CACxB,IAAI+S,EAAWzvX,EAAQ1lE,SAMvB,GAJIpnF,EAAKyqF,SACP8xb,EAASj8c,MAAM0tP,WAAa,UAG1BvnW,MAAMC,QAAQ61jB,GAAW,CAC3B,IACIC,EADAC,EAAcx8T,EAA2Bs8T,GAG7C,IACE,IAAKE,EAAYjqjB,MAAOgqjB,EAAUC,EAAYrxjB,KAAK9F,MAAO,CACxD,IAAIo3jB,EAAkBF,EAAQ97jB,MAC9Bg9E,EAAIwkO,YAAYw6Q,IAElB,MAAOtmhB,GACPqmhB,EAAYrvjB,EAAEgpC,GANhB,QAQEqmhB,EAAY/gf,UAGVoxH,aAAmBy7W,EACrB7qe,EAAI0xE,QAAQmta,GAEZ7+e,EAAIwkO,YAAYq6Q,IAMxBnV,EAA6BpijB,KAAMiijB,EAAiB0V,IAAyB32jB,KAAKhB,KAAM04E,EAAK4mC,EAAWota,uBAEzG,CACDpohB,IAAK,SACL5I,MAAO,SAAgB4jH,GACrB,IAOIusM,EAAO+rQ,EAGPC,EAVAjsT,EAAOtsJ,EAAWssJ,KAClB20B,EAAWjhL,EAAWihL,SACtBsqP,EAAcvra,EAAWura,YACzB6B,EAAsBpta,EAAWota,oBACjCh0c,EAAM4mC,EAAW5mC,IACjB2jD,EAAYkkK,EAASlkK,UACrBw3a,EAAS,UAAUvoiB,OAAO+wH,EAAU56G,KAAK,KAAM,KAG/Cq2iB,EAAc78T,EAA2B4vR,GAG7C,IACE,IAAKitC,EAAYtqjB,MAAOqqjB,EAAUC,EAAY1xjB,KAAK9F,MAAO,CACxD,IAAI06C,EAAO68gB,EAAQn8jB,MACfkiV,EAAWllQ,EAAIshI,iBAAiB,wBAAyB1uM,OAAO0vC,EAAK/Z,GAAI,OAE7E,GAAI28S,EAAU,CACZ,IACIm6O,EADAC,EAAc/8T,EAA2B2iF,GAG7C,IACE,IAAKo6O,EAAYxqjB,MAAOuqjB,EAAUC,EAAY5xjB,KAAK9F,MAAO,CACxD,IAAIwnM,EAAUiwX,EAAQr8jB,MAEtB,GAAIs/C,EAAK85f,aAAc,CACrB,IAAIn/Y,EAAO6wU,EAAM8F,KAAK4b,cAAc,CAACltc,EAAK26G,KAAK,GAAIi2G,EAAKtsE,KAAK,GAAKtkJ,EAAK26G,KAAK,GAAKi2G,EAAKtsE,KAAK,GAAItkJ,EAAK26G,KAAK,GAAIi2G,EAAKtsE,KAAK,GAAKtkJ,EAAK26G,KAAK,GAAKi2G,EAAKtsE,KAAK,KAErJ,IAAKs4X,EAAW,CACd/rQ,EAAQ9uT,KAAKijB,IAAIq8G,EAAU,IAAMA,EAAU,IAG3C,IAFA,IAAI47b,EAAe57b,EAAUvsH,QAEpB9M,EAAI,EAAGA,EAAI,EAAGA,IACrBi1jB,EAAaj1jB,GAAKjG,KAAKsvP,KAAK4rU,EAAaj1jB,IAG3C40jB,EAAY,UAAUtsjB,OAAO2sjB,EAAax2iB,KAAK,KAAM,KAGvD,IAAIlH,EAAOo7I,EAAK,GAAKk2J,EACjBv3L,EAAMqhC,EAAK,GAAKk2J,EACpB/jH,EAAQxsF,MAAM/gG,KAAO,GAAGjP,OAAOiP,EAAM,MACrCutL,EAAQxsF,MAAMgZ,IAAM,GAAGhpH,OAAOgpH,EAAK,MACnCwzE,EAAQxsF,MAAM2pB,gBAAkB,GAAG35H,QAAQiP,EAAM,OAAOjP,QAAQgpH,EAAK,MACrEwzE,EAAQxsF,MAAM+gB,UAAYu7b,OAE1B9vX,EAAQxsF,MAAM+gB,UAAYw3a,GAG9B,MAAOzigB,GACP4mhB,EAAY5vjB,EAAEgpC,GA7BhB,QA+BE4mhB,EAAYthf,OAIlB,MAAOtlC,GACP0mhB,EAAY1vjB,EAAEgpC,GA7ChB,QA+CE0mhB,EAAYphf,IAGd0re,EAA6BpijB,KAAMiijB,EAAiB0V,IAAyB32jB,KAAKhB,KAAM04E,EAAKg0c,GAE7Fh0c,EAAI+sD,QAAS,MAIVw8a,EAtK0B,GA2KnC,SAAS0V,GAAwBj/e,EAAKg0c,GACpC,GAAKA,EAAL,CAIA,IACIwrC,EADAC,EAAcl9T,EAA2ByxR,GAG7C,IACE,IAAKyrC,EAAY3qjB,MAAO0qjB,EAAUC,EAAY/xjB,KAAK9F,MAAO,CACxD,IAAI83jB,EAAgBjlhB,EAAe+khB,EAAQx8jB,MAAO,GAC9CulC,EAAKm3hB,EAAc,GACnBhvF,EAASgvF,EAAc,GAEvBtwX,EAAUpvH,EAAIsjO,cAAc,wBAAyB1wS,OAAO21B,EAAI,OAEpE,GAAK6mK,EAAL,CAIA,IAAIuwX,EAAavwX,EAAQuwX,WAEG,WAAxBA,EAAWt+W,SACbjS,EAAQwwX,aAAalvF,EAAQivF,GAE7BvwX,EAAQgnO,aAAas6D,EAAQivF,KAGjC,MAAOjnhB,GACP+mhB,EAAY/vjB,EAAEgpC,GArBhB,QAuBE+mhB,EAAYzhf,IAGdg2c,EAAoBx5gB,SApCtB/X,EAAQ8mjB,gBAAkBA,IAyCnB,SAACv8E,EAAyBvqe,GAEjC,aAQA,SAASg4C,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GARzbE,CAAsBtke,EAAK7K,IAI5F,SAAqCmD,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAJ3ME,CAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAMzI,SAASzJ,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAQhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAAS4/c,EAAcnyjB,GACrB,OAAOrJ,KAAKwjB,MAAoC,IAA9BxjB,KAAKC,IAAI,EAAGD,KAAKE,IAAI,EAAGmJ,KAAWnF,SAAS,IAAI86L,SAAS,EAAG,KAxBhF39L,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ8vjB,qBAAkB,EAwB1B,IAAIA,EAA+B,WACjC,SAASA,KAXX,SAAyB59hB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAY5G+qB,CAAgBptB,KAAMirjB,GAR1B,IAAsB39hB,EAAasrF,EAAYC,EA2G7C,OA3GoBvrF,EAWP29hB,EAXgCpyc,EAWT,CAAC,CACnCv0G,IAAK,SACL5I,MAAO,SAAgB2qC,GACrB,IAAIsC,EAAQwK,EAAe9M,EAAM,GAC7BxgC,EAAI8iC,EAAM,GACV6C,EAAI7C,EAAM,GACVv2B,EAAIu2B,EAAM,GACVxoC,EAAIwoC,EAAM,GAEd,MAAO,CAAC,IAAK,EAAI5rC,KAAKE,IAAI,EAAG,GAAM4I,EAAI,IAAOuM,EAAI,IAAOo5B,EAAIrrC,MAE9D,CACDmE,IAAK,SACL5I,MAAO,SAAgB+zC,GAIrB,MAAO,CAAC,OAAQ,EAAG,EAAG,EAAG,EAHb0D,EAAe1D,EAAO,GACpB,MAIf,CACDnrC,IAAK,QACL5I,MAAO,SAAespW,GACpB,IACIruR,EADQxjC,EAAe6xT,EAAO,GACpB,GAEd,MAAO,CAAC,MAAOruR,EAAGA,EAAGA,KAEtB,CACDryE,IAAK,SACL5I,MAAO,SAAgBkqW,GACrB,IAGI4yN,EAAID,EAHIplhB,EAAeyyT,EAAO,GACpB,IAGd,MAAO,IAAIt6V,OAAOktjB,GAAGltjB,OAAOktjB,GAAGltjB,OAAOktjB,KAEvC,CACDl0jB,IAAK,QACL5I,MAAO,SAAekmd,GACpB,IAAI2tE,EAASp8e,EAAeyua,EAAO,GAKnC,MAAO,CAAC,IAAK,GAJL2tE,EAAO,GAIQ,IAHfA,EAAO,GAGmB,IAF1BA,EAAO,MAIhB,CACDjrhB,IAAK,WACL5I,MAAO,SAAkB60hB,GACvB,IAAIG,EAASv9e,EAAeo9e,EAAQ,GAChCp5c,EAAIu5c,EAAO,GACX/5c,EAAI+5c,EAAO,GACX9qhB,EAAI8qhB,EAAO,GAEX12X,EAAIu+Z,EAAcphf,GAClBqhf,EAAID,EAAc5hf,GAClB8hf,EAAIF,EAAc3yjB,GACtB,MAAO,IAAI0F,OAAO0uJ,GAAG1uJ,OAAOktjB,GAAGltjB,OAAOmtjB,KAEvC,CACDn0jB,IAAK,SACL5I,MAAO,WACL,MAAO,cAER,CACD4I,IAAK,WACL5I,MAAO,SAAkBo1hB,GACvB,IAAI+B,EAAS1/e,EAAe29e,EAAQ,GAChCjrhB,EAAIgthB,EAAO,GACXrnf,EAAIqnf,EAAO,GACXzghB,EAAIyghB,EAAO,GACX1yhB,EAAI0yhB,EAAO,GAEf,MAAO,CAAC,MAAO,EAAI91hB,KAAKE,IAAI,EAAG4I,EAAI1F,GAAI,EAAIpD,KAAKE,IAAI,EAAGmV,EAAIjS,GAAI,EAAIpD,KAAKE,IAAI,EAAGuuC,EAAIrrC,MAEpF,CACDmE,IAAK,YACL5I,MAAO,SAAmBohD,GACxB,OAAO98C,KAAK04jB,SAAS14jB,KAAK24jB,SAAS77gB,MAEpC,CACDx4C,IAAK,WACL5I,MAAO,SAAkB64hB,GACvB,IAAIsC,EAAS1jf,EAAeohf,EAAQ,GAKhC1uhB,EAAI,EAJAgxhB,EAAO,GAKXzkhB,EAAI,EAJAykhB,EAAO,GAKXrrf,EAAI,EAJAqrf,EAAO,GAMf,MAAO,CAAC,OAAQhxhB,EAAGuM,EAAGo5B,EADdzuC,KAAKE,IAAI4I,EAAGuM,EAAGo5B,QAtGMotE,EAWH,OAX8CF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GA2G3Koyc,EArG0B,GAwGnC9vjB,EAAQ8vjB,gBAAkBA,GAInB,SAACvlF,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ61jB,cAAW,EAEnB,IAAIxqF,EAAQb,EAAoB,GAE5Bu8C,EAAYv8C,EAAoB,KAEpC,SAASxyb,EAAetlC,EAAK7K,GAAK,OAMlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EANtBkke,CAAgBlke,IAIzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GAJzbE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAQzI,SAASn3O,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,EAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAEj+B,SAASw3b,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAIhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,IAAIq4c,EAAwB,WAC1B,SAASA,KAPX,SAAyB3jiB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAQ5G+qB,CAAgBptB,KAAMgxjB,GAJ1B,IAAsB1jiB,EAAasrF,EAAYC,EAmR7C,OAnRoBvrF,EAOP0jiB,EAPgCn4c,EAOhB,CAAC,CAC5Bv0G,IAAK,eACL5I,MAAO,SAAsBk5f,EAAM3zd,EAAI6mK,EAASmM,EAASu2U,GACvD,IAAIqhC,EAAa53W,EAAQvmB,SAASzsJ,EAAI,CACpCvlC,MAAO,OAGT,OAAQosM,EAAQt5L,MACd,IAAK,WAKH,GAJyB,OAArBq9iB,EAAWnwjB,QACbk5f,EAAK73M,YAAc8uQ,EAAWnwjB,OAGjB,UAAX8uhB,EACF,MAGF51B,EAAK5rZ,iBAAiB,SAAS,SAAUm+B,GACvC8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOyrI,EAAMn6G,OAAOtxB,WAGxB,MAEF,IAAK,QACH,GAAgC,UAA5BosM,EAAQ0pB,WAAWtxN,MAAgD,aAA5B4nM,EAAQ0pB,WAAWtxN,KAAqB,CAOjF,GANI2rjB,EAAWnwjB,QAAUosM,EAAQ0pB,WAAWonW,MAC1ChkE,EAAKz4M,aAAa,WAAW,GACpB0vQ,EAAWnwjB,QAAUosM,EAAQ0pB,WAAWqnW,QACjDjkE,EAAK9rO,gBAAgB,WAGR,UAAX0hQ,EACF,MAGF51B,EAAK5rZ,iBAAiB,UAAU,SAAUm+B,GACxC8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOyrI,EAAMn6G,OAAOgvG,QAAUmL,EAAMn6G,OAAO2wR,aAAa,SAAWx2K,EAAMn6G,OAAO2wR,aAAa,mBAG5F,CAKL,GAJyB,OAArBkuQ,EAAWnwjB,OACbk5f,EAAKz4M,aAAa,QAAS0vQ,EAAWnwjB,OAGzB,UAAX8uhB,EACF,MAGF51B,EAAK5rZ,iBAAiB,SAAS,SAAUm+B,GACvC8sE,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOyrI,EAAMn6G,OAAOtxB,WAK1B,MAEF,IAAK,SACH,GAAyB,OAArBmwjB,EAAWnwjB,MAAgB,CAC7B,IACIykB,EADA+sd,EAAYjyO,EAA2BnzD,EAAQxhK,UAGnD,IACE,IAAK4mc,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAIkgH,EAASrgG,EAAMzkB,MAEf8kH,EAAOgxG,WAAW91N,QAAUmwjB,EAAWnwjB,QACzC8kH,EAAOgxG,WAAWlsG,UAAW,IAGjC,MAAOl0E,GACP87b,EAAU9ke,EAAEgpC,GATd,QAWE87b,EAAUx2Z,KAIdk+a,EAAK5rZ,iBAAiB,SAAS,SAAUm+B,GACvC,IAAIn7F,EAAUm7F,EAAMn6G,OAAOgf,QACvBtwC,GAAmC,IAA3BswC,EAAQkmV,cAAuB,GAAKlmV,EAAQA,EAAQkmV,eAAex2X,MAC/Eu4M,EAAQ09G,SAAS1wR,EAAI,CACnBvlC,MAAOA,UAMhB,CACD4I,IAAK,gBACL5I,MAAO,SAAuB2qC,GAC5B,IA0CMohhB,EA1CF7yD,EAAOvud,EAAKuud,KACZ9sT,EAAUzhK,EAAKyhK,QACfgxX,EAAezyhB,EAAK4tK,QACpBA,OAA2B,IAAjB6kX,EAA0B,KAAOA,EAC3CtuC,EAASnkf,EAAKmkf,OACds6B,EAAcz+gB,EAAKy+gB,YACnBtzV,EAAa1pB,EAAQ0pB,WACrBunW,EAAsBnkE,aAAgBokE,kBAElB,UAApBxnW,EAAWtxN,OACbsxN,EAAWhjN,KAAO,GAAGlD,OAAOkmN,EAAWhjN,KAAM,KAAKlD,OAAOk/gB,IAG3D,IAAK,IAAIh2c,EAAK,EAAG6rd,EAAkBjiiB,OAAOuL,QAAQ6nN,GAAah9I,EAAK6rd,EAAgBx+hB,OAAQ2yE,IAAM,CAChG,IAAI8rd,EAAqBntf,EAAektf,EAAgB7rd,GAAK,GACzDlwE,EAAMg8hB,EAAmB,GACzB5kiB,EAAQ4kiB,EAAmB,GAE/B,GAAc,OAAV5kiB,QAA4BI,IAAVJ,GAA+B,WAAR4I,EAI7C,GAAY,UAARA,EACF,GAAY,gBAARA,EACFswf,EAAK73M,YAAcrhT,OACd,GAAY,UAAR4I,EACL5I,EAAMmG,QACR+yf,EAAKz4M,aAAa73S,EAAK5I,EAAM+lB,KAAK,UAE/B,CACL,GAAIs3iB,IAAgC,SAARz0jB,GAA0B,cAARA,GAC5C,SAGFswf,EAAKz4M,aAAa73S,EAAK5I,QAGzB0C,OAAO+8C,OAAOy5c,EAAKt5Y,MAAO5/G,GAI1Bq9jB,IAGGjU,EAAYx+E,oBACf,EAAIE,EAAMv+c,MAAM,6FAG0C,QAA3Dw/hB,EAAwB3C,EAAYx+E,yBAAyD,IAA1BmhF,GAA4CA,EAAsBzmjB,KAAK8jjB,EAAalwD,EAAMpjS,EAAWpkG,KAAMokG,EAAWk2V,YAGxLzzW,GAAWud,EAAWynW,QACxBj5jB,KAAKk5jB,aAAatkE,EAAMpjS,EAAWynW,OAAQnxX,EAASmM,KAGvD,CACD3vM,IAAK,SACL5I,MAAO,SAAgB4jH,GACrB,IAAI20F,EAAU30F,EAAWmoa,kBACrBq9B,EAAcxlc,EAAWwlc,YACzBvtiB,EAAO+nG,EAAW2xc,QAClBzmC,EAASlra,EAAWkra,QAAU,UAC9B2uC,EAAWnzhB,SAASC,cAAc1uB,EAAK/I,MAEvC+I,EAAKi6M,YACPxxN,KAAKo5jB,cAAc,CACjBxkE,KAAMukE,EACNrxX,QAASvwL,EACTizgB,OAAQA,EACRs6B,YAAaA,IAIjB,IAAI34iB,EAAQ,CAAC,CAACoL,GAAO,EAAG4hjB,IACpBE,EAAU/5c,EAAW5mC,IAGzB,GAFA2gf,EAAQn8Q,YAAYi8Q,GAEhB75c,EAAWihL,SAAU,CACvB,IAAIlkK,EAAY,UAAU/wH,OAAOg0G,EAAWihL,SAASlkK,UAAU56G,KAAK,KAAM,KAC1E43iB,EAAQ/9c,MAAM+gB,UAAYA,EAGb,aAAXmuZ,GACF6uC,EAAQl9Q,aAAa,QAAS,oBAKhC,IAFA,IAAIm9Q,EAAW,GAERntjB,EAAMtK,OAAS,GAAG,CACvB,IAAI03jB,EAEAtijB,EAASk8B,EAAehnC,EAAMA,EAAMtK,OAAS,GAAI,GACjD66C,EAASzlC,EAAO,GAChBjU,EAAIiU,EAAO,GACX29e,EAAO39e,EAAO,GAElB,GAAIjU,EAAI,IAAM05C,EAAOpW,SAASzkC,OAA9B,CAKA,IAAIq4C,EAAQwC,EAAOpW,WAAWn6B,EAAMA,EAAMtK,OAAS,GAAG,IAEtD,GAAc,OAAVq4C,EAAJ,CAIA,IAAI1rC,EAAO0rC,EAAM1rC,KAEjB,GAAa,UAATA,EAAJ,CAOA,IAAIgrjB,OAAY,EAoBhB,GAjBEA,EADY,OAAVt/gB,QAA4B,IAAVA,GAA+D,QAA1Cq/gB,EAAoBr/gB,EAAMs3K,kBAA8C,IAAtB+nW,GAAgCA,EAAkBljT,MACjIrwO,SAASilc,gBAAgB/wb,EAAMs3K,WAAW6kD,MAAO7nQ,GAEjDw3B,SAASC,cAAcz3B,GAGrComf,EAAK13M,YAAYs8Q,GAEbt/gB,EAAMs3K,YACRxxN,KAAKo5jB,cAAc,CACjBxkE,KAAM4kE,EACN1xX,QAAS5tJ,EACT+5J,QAASA,EACTu2U,OAAQA,EACRs6B,YAAaA,IAIb5qgB,EAAM5T,UAAY4T,EAAM5T,SAASzkC,OAAS,EAC5CsK,EAAMC,KAAK,CAAC8tC,GAAQ,EAAGs/gB,SAClB,GAAIt/gB,EAAMx+C,MAAO,CACtB,IAAI+9jB,EAAQzzhB,SAASs5d,eAAepld,EAAMx+C,OAEtCwmhB,EAAUiN,QAAQ6yB,gBAAgBxziB,IACpC8qjB,EAASltjB,KAAKqtjB,GAGhBD,EAAUt8Q,YAAYu8Q,QApCxB,CACE,IAAIryjB,EAAO4+B,SAASs5d,eAAepld,EAAMx+C,OACzC49jB,EAASltjB,KAAKhF,GACdwtf,EAAK13M,YAAY91S,UAfjB+E,EAAME,MAoDV,IACI8ge,EADAC,EAAanyO,EAA2Bo+T,EAAQr/W,iBAAiB,0DAGrE,IACE,IAAKozR,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MACrC6se,EAAOzxe,MACbygT,aAAa,YAAY,GAE9B,MAAO/qQ,GACPg8b,EAAWhle,EAAEgpC,GANf,QAQEg8b,EAAW12Z,IAGb,MAAO,CACL4if,SAAUA,KAGb,CACDh1jB,IAAK,SACL5I,MAAO,SAAgB4jH,GACrB,IAAI+c,EAAY,UAAU/wH,OAAOg0G,EAAWihL,SAASlkK,UAAU56G,KAAK,KAAM,KAC1E69F,EAAW5mC,IAAI4iC,MAAM+gB,UAAYA,EACjC/c,EAAW5mC,IAAI+sD,QAAS,MA/QK7sB,EAOV,OAPqDF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAmR3Km4c,EAjRmB,GAoR5B71jB,EAAQ61jB,SAAWA,GAIZ,SAACtrF,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQu+jB,gBAozBR,SAAyBC,GACvB,IAAIhuiB,EAAO,IAAIiuiB,EAAoB,CACjC78Q,YAAa48Q,EAAiB58Q,YAC9B88Q,kBAAmBF,EAAiBE,kBACpCrgf,UAAWmgf,EAAiBngf,UAC5B+mN,SAAUo5R,EAAiBp5R,SAC3B+4R,SAAUK,EAAiBL,SAC3BQ,oBAAqBH,EAAiBG,oBACtCC,qBAAsBJ,EAAiBI,uBAKzC,OAFApuiB,EAAKgkP,QAAQgqT,EAAiBl1d,SAEvB94E,GA/zBT,IAAI66c,EAAQb,EAAoB,GAIhC,SAASjtX,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAI7S,SAASsiJ,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,IACIg3U,EAAoB,GAEpBC,EAAc,IAAIrnjB,IAClBsnjB,EAAsB,SA4D1B,SAASC,EAAWxuiB,EAAMyuiB,EAAMx+e,EAAQ6lM,GACtC,IAAI44S,EAAUr0hB,SAASC,cAAc,QACjCq0hB,EAAoB3uiB,EAAK4uiB,sBAAwB,CACnD5nE,MAAO,EACPqiD,YAAa,EACbwlB,QAAsB,KAAbJ,EAAK5xiB,IACdiyiB,OAAQL,EAAKK,OACbC,kBAAmB,KACnBxoc,cAAe,EACfwW,YAAa,EACb7U,aAAc,EACd5B,WAAY,EACZ45L,MAAO,GACL,CACF8mM,MAAO,EACPqiD,YAAa,EACbwlB,QAAsB,KAAbJ,EAAK5xiB,IACdiyiB,OAAQL,EAAKK,QAGf9uiB,EAAKgviB,UAAUvujB,KAAKiujB,GAEpB,IAAIO,EAAKp0F,EAAM8F,KAAKjwW,UAAU1wG,EAAKkjR,UAAUxyK,UAAW+9b,EAAK/9b,WAEzDs2X,EAAQ51f,KAAK89jB,MAAMD,EAAG,GAAIA,EAAG,IAC7Bt/c,EAAQ1/B,EAAOw+e,EAAKU,UAEpBx/c,EAAMykL,WACR4yN,GAAS51f,KAAKqhf,GAAK,GAGrB,IAEI7je,EAAM+5G,EAFNymc,EAAah+jB,KAAKquiB,MAAMwvB,EAAG,GAAIA,EAAG,IAClCI,EAAaD,EA1FnB,SAAmB3gT,EAAYqH,GAC7B,IAAIw5S,EAAehB,EAAYl2jB,IAAIq2Q,GAEnC,GAAI6gT,EACF,OAAOA,EAGTx5S,EAAIm/N,OACJn/N,EAAIskO,KAAO,GAAGz6e,OAAO0ujB,EAAmB,OAAO1ujB,OAAO8uQ,GACtD,IAAI8gT,EAAUz5S,EAAI6wR,YAAY,IAC1B6oB,EAASD,EAAQE,sBACjBC,EAAUt+jB,KAAKijB,IAAIk7iB,EAAQI,wBAE/B,GAAIH,EAAQ,CACV15S,EAAIo/N,UACJ,IAAI06E,EAAQJ,GAAUA,EAASE,GAE/B,OADApB,EAAYvyjB,IAAI0yQ,EAAYmhT,GACrBA,EAGT95S,EAAIqlR,YAAc,MAClBrlR,EAAI8qR,UAAU,EAAG,EAAGytB,EAAmBA,GACvCv4S,EAAI0vR,WAAW,IAAK,EAAG,GACvB,IAAIqqB,EAAS/5S,EAAIq9Q,aAAa,EAAG,EAAGk7B,EAAmBA,GAAmBh/gB,KAC1EqghB,EAAU,EAEV,IAAK,IAAIr4jB,EAAIw4jB,EAAO35jB,OAAS,EAAI,EAAGmB,GAAK,EAAGA,GAAK,EAC/C,GAAIw4jB,EAAOx4jB,GAAK,EAAG,CACjBq4jB,EAAUt+jB,KAAKqjB,KAAKpd,EAAI,EAAIg3jB,GAC5B,MAIJv4S,EAAI8qR,UAAU,EAAG,EAAGytB,EAAmBA,GACvCv4S,EAAI0vR,WAAW,IAAK,EAAG6oB,GAEvBmB,EAAS,EAET,IAAK,IAAI3mf,EAAK,EAAGtwE,GAHjBs3jB,EAAS/5S,EAAIq9Q,aAAa,EAAG,EAAGk7B,EAAmBA,GAAmBh/gB,MAGzCn5C,OAAQ2yE,EAAKtwE,EAAIswE,GAAM,EAClD,GAAIgnf,EAAOhnf,GAAM,EAAG,CAClB2mf,EAASnB,EAAoBj9jB,KAAKwjB,MAAMi0D,EAAK,EAAIwlf,GACjD,MAMJ,GAFAv4S,EAAIo/N,UAEAs6E,EAAQ,CACV,IAAIM,EAASN,GAAUA,EAASE,GAGhC,OADApB,EAAYvyjB,IAAI0yQ,EAAYqhT,GACrBA,EAIT,OADAxB,EAAYvyjB,IAAI0yQ,EA1DQ,OA8FMshT,CAAUpgd,EAAM8+J,WAAYqH,GAG5C,IAAVkxO,GACFp4e,EAAOqgjB,EAAG,GACVtmc,EAAMsmc,EAAG,GAAKI,IAEdzgjB,EAAOqgjB,EAAG,GAAKI,EAAaj+jB,KAAKq1f,IAAIO,GACrCr+X,EAAMsmc,EAAG,GAAKI,EAAaj+jB,KAAKm1f,IAAIS,IAGtC0nE,EAAQ/+c,MAAM/gG,KAAO,GAAGjP,OAAOiP,EAAM,MACrC8/iB,EAAQ/+c,MAAMgZ,IAAM,GAAGhpH,OAAOgpH,EAAK,MACnC+lc,EAAQ/+c,MAAM6L,SAAW,GAAG77G,OAAOyvjB,EAAY,MAC/CV,EAAQ/+c,MAAM8+J,WAAa9+J,EAAM8+J,WACjCigT,EAAQl+Q,aAAa,OAAQ,gBAC7Bk+Q,EAAQt9Q,YAAcq9Q,EAAK5xiB,IAC3B6xiB,EAAQ1pa,IAAMypa,EAAKzpa,IAEfhlI,EAAKgwiB,wBACPtB,EAAQrQ,QAAQ8Q,SAAWV,EAAKU,UAGpB,IAAVnoE,IACF2nE,EAAkB3nE,MAAQA,GAAS,IAAM51f,KAAKqhf,KAGhD,IAAIw9E,GAAkB,EAEtB,GAAIxB,EAAK5xiB,IAAI3mB,OAAS,GAAK8pB,EAAK4uiB,uBAAyBL,EAAoBn/gB,KAAKq/gB,EAAK5xiB,KACrFoziB,GAAkB,OACb,GAAiB,MAAbxB,EAAK5xiB,KAAe4xiB,EAAK/9b,UAAU,KAAO+9b,EAAK/9b,UAAU,GAAI,CACtE,IAAIw/b,EAAY9+jB,KAAKijB,IAAIo6iB,EAAK/9b,UAAU,IACpCy/b,EAAY/+jB,KAAKijB,IAAIo6iB,EAAK/9b,UAAU,IAEpCw/b,IAAcC,GAAa/+jB,KAAKC,IAAI6+jB,EAAWC,GAAa/+jB,KAAKE,IAAI4+jB,EAAWC,GAAa,MAC/FF,GAAkB,GAkBtB,GAdIA,IACEtgd,EAAMykL,SACRu6R,EAAkBtlB,YAAcolB,EAAK7oc,OAAS5lG,EAAKkjR,UAAUgd,MAE7DyuQ,EAAkBtlB,YAAcolB,EAAK9+e,MAAQ3vD,EAAKkjR,UAAUgd,OAIhElgS,EAAKowiB,mBAAmBr0jB,IAAI2yjB,EAASC,GAEjC3uiB,EAAKqwiB,oBACPrwiB,EAAKswiB,YAAY5B,GAGf1uiB,EAAK4uiB,uBAAyBD,EAAkBE,QAAS,CAC3D,IAAI0B,EAAW,EACXC,EAAW,EAED,IAAVxpE,IACFupE,EAAWn/jB,KAAKm1f,IAAIS,GACpBwpE,EAAWp/jB,KAAKq1f,IAAIO,IAGtB,IAEIvgf,EAAGxM,EAFHw2jB,GAAY9gd,EAAMykL,SAAWq6R,EAAK7oc,OAAS6oc,EAAK9+e,OAAS3vD,EAAKkjR,UAAUgd,MACxEwwQ,EAAYtB,EAGF,IAAVpoE,GACFvgf,EAAI,CAAC8pjB,EAAUC,GAAWA,EAAUD,EAAU3hjB,EAAM+5G,GACpD1uH,EAAI4ge,EAAM8F,KAAKkoE,2BAA2B,CAAC,EAAG,EAAG4nB,EAAUC,GAAYjqjB,IAEvExM,EAAI,CAAC2U,EAAM+5G,EAAK/5G,EAAO6hjB,EAAU9nc,EAAM+nc,GAGzC1wiB,EAAK6uhB,QAAQpuiB,KAAK,CAChBmO,KAAM3U,EAAE,GACR0uH,IAAK1uH,EAAE,GACP4U,MAAO5U,EAAE,GACT2uH,OAAQ3uH,EAAE,GACV8yE,IAAK2hf,EACLt+jB,KAAM,CAACqgkB,EAAUC,GACjBjqjB,EAAGA,KAKT,SAASgwH,EAAOz2G,GACd,IAAIA,EAAK2wiB,UAAT,CAIA,IAAIhD,EAAW3tiB,EAAKgviB,UAChBnlF,EAAa7pd,EAAK+5f,YAClB62C,EAAiBjD,EAASz3jB,OAE9B,GAAI06jB,EA/LwB,IAkM1B,OAFA5wiB,EAAK6wiB,gBAAiB,OACtBhnF,EAAWt2b,UAIb,IAAKvzB,EAAKqwiB,mBACR,IAAK,IAAIh5jB,EAAI,EAAGA,EAAIu5jB,EAAgBv5jB,IAClC2oB,EAAKswiB,YAAY3C,EAASt2jB,IAI9B2oB,EAAK6wiB,gBAAiB,EACtBhnF,EAAWt2b,WAGb,SAASu9gB,EAAgBzla,EAAIlpJ,EAAQsH,GAGnC,IAFA,IAAIxB,EAAS,EAEJ5Q,EAAI,EAAGA,EAAIoS,EAAOpS,IAAK,CAC9B,IAAI+oB,EAAIirI,EAAGlpJ,KAEPie,EAAI,IACNnY,EAASA,EAAS7W,KAAKE,IAAI8uB,EAAGnY,GAAUmY,GAI5C,OAAOnY,EAGT,SAASykR,EAAO1sQ,GAKd,IAJA,IAAIqkc,EAASrkc,EAAK6uhB,QACdj6Q,EAAW50Q,EAAKkjR,UAChB79K,EAyDN,SAAsB11C,EAAOi2C,EAAQmrc,GACnC,IAAI1sG,EAAS0sG,EAAM1zjB,KAAI,SAAUq6R,EAAKrgS,GACpC,MAAO,CACLk1Q,GAAImrB,EAAI9oR,KACR49P,GAAIkrB,EAAI/uK,IACR8jJ,GAAIirB,EAAI7oR,MACR69P,GAAIgrB,EAAI9uK,OACRp4H,MAAO6G,EACP25jB,WAAO7gkB,EACP8gkB,WAAO9gkB,MAGX+gkB,EAAgBvhf,EAAO00Y,GACvB,IAGI7vc,EAHA6wG,EAAW,IAAIvvH,MAAMi7jB,EAAM76jB,QAE3Bqre,EAAYjyO,EAA2B+0N,GAG3C,IACE,IAAKkd,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAIsF,EAAIua,EAAMzkB,MACVsH,EAAI4C,EAAEzJ,MACV60H,EAAShuH,GAAK,CACZuX,KAAM3U,EAAE+2jB,MACRroc,IAAK,EACL95G,MAAO5U,EAAEg3jB,MACTroc,OAAQ,IAGZ,MAAOnjF,GACP87b,EAAU9ke,EAAEgpC,GAZd,QAcE87b,EAAUx2Z,IAGZgmf,EAAM1zjB,KAAI,SAAUq6R,EAAKrgS,GACvB,IAAIoF,EAAI4oH,EAAShuH,GACb4C,EAAIoqd,EAAOhtd,GACf4C,EAAEsyQ,GAAKmrB,EAAI/uK,IACX1uH,EAAEuyQ,GAAK78L,EAAQlzE,EAAEoS,MACjB5U,EAAEwyQ,GAAKirB,EAAI9uK,OACX3uH,EAAEyyQ,GAAK/8L,EAAQlzE,EAAEmS,KACjB3U,EAAEzJ,MAAQ6G,EACV4C,EAAE+2jB,WAAQ7gkB,EACV8J,EAAEg3jB,WAAQ9gkB,KAEZ+gkB,EAAgBtrc,EAAQy+V,GAExB,IACImd,EADAC,EAAanyO,EAA2B+0N,GAG5C,IACE,IAAKod,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAAO,CACrD,IAAIu+a,EAAKsuD,EAAOzxe,MACZ87e,EAAM34D,EAAG1ib,MACb60H,EAASwmX,GAAKljX,IAAMuqT,EAAG89I,MACvB3rc,EAASwmX,GAAKjjX,OAASsqT,EAAG+9I,OAE5B,MAAOxrhB,GACPg8b,EAAWhle,EAAEgpC,GARf,QAUEg8b,EAAW12Z,IAGb,OAAOs6C,EAzHQ8rc,CAAav8R,EAASjlN,MAAOilN,EAAShvK,OAAQy+V,GAEpDhtd,EAAI,EAAGA,EAAIguH,EAASnvH,OAAQmB,IAAK,CACxC,IAAI01E,EAAMs3Y,EAAOhtd,GAAG01E,IAEhBqkf,EAAgBpxiB,EAAKowiB,mBAAmBh4jB,IAAI20E,GAEhD,GAA4B,IAAxBqkf,EAAcpqE,MAAlB,CAmBA,IARA,IAAIvqf,EAAI4oH,EAAShuH,GACb4C,EAAIoqd,EAAOhtd,GACXoP,EAAIxM,EAAEwM,EACNvM,EAAIuM,EAAE,GACN5E,EAAI4E,EAAE,GACN6oQ,EAAS,CAAC,CAAC,EAAG,GAAI,CAAC,EAAGr1Q,EAAE7J,KAAK,IAAK,CAAC6J,EAAE7J,KAAK,GAAI,GAAI6J,EAAE7J,MACpDi7J,EAAK,IAAI08V,aAAa,IAEjBl8a,EAAI,EAAGwlf,EAAK/hT,EAAOp5Q,OAAQ21E,EAAIwlf,EAAIxlf,IAAK,CAC/C,IAAIzrD,EAAIy6c,EAAM8F,KAAKC,eAAetxN,EAAOzjM,GAAIplE,GAE7C4kJ,EAAGx/E,EAAI,GAAK3xE,IAAMuC,EAAEmS,KAAOwR,EAAE,IAAMlmB,EACnCmxJ,EAAGx/E,EAAI,GAAKhqE,IAAMpF,EAAEksH,IAAMvoG,EAAE,IAAMve,EAClCwpJ,EAAGx/E,EAAI,GAAK3xE,IAAMuC,EAAEoS,MAAQuR,EAAE,IAAMlmB,EACpCmxJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEmsH,OAASxoG,EAAE,IAAMve,EACtCwpJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEmS,KAAOwR,EAAE,KAAOve,EACrCwpJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEksH,IAAMvoG,EAAE,IAAMlmB,EACnCmxJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEoS,MAAQuR,EAAE,KAAOve,EACtCwpJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEmsH,OAASxoG,EAAE,IAAMlmB,EACtCmxJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEmS,KAAOwR,EAAE,KAAOlmB,EACrCmxJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEksH,IAAMvoG,EAAE,KAAOve,EACpCwpJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEoS,MAAQuR,EAAE,KAAOlmB,EACtCmxJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEmsH,OAASxoG,EAAE,KAAOve,EACvCwpJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEmS,KAAOwR,EAAE,IAAMve,EACpCwpJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEksH,IAAMvoG,EAAE,KAAOlmB,EACpCmxJ,EAAGx/E,EAAI,IAAMhqE,IAAMpF,EAAEoS,MAAQuR,EAAE,IAAMve,EACrCwpJ,EAAGx/E,EAAI,IAAM3xE,IAAMuC,EAAEmsH,OAASxoG,EAAE,KAAOlmB,EAGzC,IAAIo3jB,EAAW,EAAIlgkB,KAAKE,IAAIF,KAAKijB,IAAIna,GAAI9I,KAAKijB,IAAIxS,IAClDuvjB,EAAcr0b,YAAc+zb,EAAgBzla,EAAI,GAAI,IAAMima,EAC1DF,EAAc9qc,WAAawqc,EAAgBzla,EAAI,GAAI,IAAMima,EACzDF,EAAclpc,aAAe4oc,EAAgBzla,EAAI,EAAG,IAAMima,EAC1DF,EAAc7qc,cAAgBuqc,EAAgBzla,EAAI,GAAI,IAAMima,EAE5DtxiB,EAAKowiB,mBAAmBr0jB,IAAIgxE,EAAKqkf,QA7C/BA,EAAcr0b,YAAcsnV,EAAOhtd,GAAGuX,KAAOy2G,EAAShuH,GAAGuX,KACzDwijB,EAAc9qc,WAAa+9V,EAAOhtd,GAAGsxH,IAAMtD,EAAShuH,GAAGsxH,IACvDyoc,EAAclpc,aAAe7C,EAAShuH,GAAGwX,MAAQw1c,EAAOhtd,GAAGwX,MAC3DuijB,EAAc7qc,cAAgBlB,EAAShuH,GAAGuxH,OAASy7V,EAAOhtd,GAAGuxH,OAE7D5oG,EAAKowiB,mBAAmBr0jB,IAAIgxE,EAAKqkf,IA+GvC,SAASF,EAAgBvhf,EAAO00Y,GAC9BA,EAAOvjd,MAAK,SAAU9G,EAAGC,GACvB,OAAOD,EAAEuyQ,GAAKtyQ,EAAEsyQ,IAAMvyQ,EAAExJ,MAAQyJ,EAAEzJ,SAEpC,IAgBI6qhB,EAPAk2C,EAAU,CAAC,CACbn9iB,OAAO,IACPvjB,IAAKM,IACLqgkB,SAZiB,CACjBjlT,IAAI,IACJC,IAAI,IACJC,GAAI,EACJC,GAAIv7Q,IACJX,OAAQ,EACRwgkB,MAAO,EACPC,MAAO,KAQL31C,EAAahsR,EAA2B+0N,GAG5C,IACE,IAAKi3D,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MAAO,CAIrD,IAHA,IAAI68jB,EAAWn2C,EAAOtrhB,MAClBsH,EAAI,EAEDA,EAAIk6jB,EAAQr7jB,QAAUq7jB,EAAQl6jB,GAAGxG,KAAO2gkB,EAAShlT,IACtDn1Q,IAKF,IAFA,IAAIw0E,EAAI0lf,EAAQr7jB,OAAS,EAElB21E,GAAK,GAAK0lf,EAAQ1lf,GAAGz3D,OAASo9iB,EAAS9kT,IAC5C7gM,IAGF,IAAI4lf,OAAe,EACfC,OAAoB,EAEpBlwa,OAAI,EACJhtJ,OAAI,EACJm9jB,GAAU,IAEd,IAAKnwa,EAAInqJ,EAAGmqJ,GAAK31E,EAAG21E,IAAK,CAEvBkwa,GADAD,EAAeF,EAAQ/va,IACUgwa,SACjC,IAAII,OAAO,GAGTA,EADEF,EAAkBjlT,GAAK+kT,EAASjlT,GAC3BmlT,EAAkBlhkB,MAAQghkB,EAAShhkB,MAAQkhkB,EAAkBV,MAAQQ,EAASjlT,QAChDp8Q,IAA5BuhkB,EAAkBT,OACnBS,EAAkBjlT,GAAK+kT,EAASjlT,IAAM,EAEvCmlT,EAAkBT,OAGhBU,IACTA,EAAUC,GAMd,IAFAJ,EAASR,MAAQW,EAEZnwa,EAAInqJ,EAAGmqJ,GAAK31E,EAAG21E,SAIcrxJ,KAFhCuhkB,GADAD,EAAeF,EAAQ/va,IACUgwa,UAEXP,MAChBS,EAAkBjlT,GAAK+kT,EAASjlT,GAC9BmlT,EAAkBlhkB,MAAQghkB,EAAShhkB,QACrCkhkB,EAAkBT,MAAQS,EAAkBjlT,IAG9CilT,EAAkBT,MAAQU,EAEnBD,EAAkBT,MAAQU,IACnCD,EAAkBT,MAAQ7/jB,KAAKC,IAAIsgkB,EAASD,EAAkBjlT,KAIlE,IAAIolT,EAAiB,GACjBC,EAAe,KAEnB,IAAKtwa,EAAInqJ,EAAGmqJ,GAAK31E,EAAG21E,IAAK,CAGvB,IAAIuwa,GADJL,GADAD,EAAeF,EAAQ/va,IACUgwa,UACG/kT,GAAK+kT,EAAS/kT,GAAKilT,EAAoBF,EAEvEM,IAAiBC,EACnBF,EAAeA,EAAe37jB,OAAS,GAAGrF,IAAM4gkB,EAAa5gkB,KAE7DghkB,EAAepxjB,KAAK,CAClB2T,MAAOq9iB,EAAar9iB,MACpBvjB,IAAK4gkB,EAAa5gkB,IAClB2gkB,SAAUO,IAEZD,EAAeC,GAsBnB,IAlBIR,EAAQl6jB,GAAG+c,MAAQo9iB,EAAShlT,KAC9BqlT,EAAe,GAAGz9iB,MAAQo9iB,EAAShlT,GACnCqlT,EAAenkjB,QAAQ,CACrB0G,MAAOm9iB,EAAQl6jB,GAAG+c,MAClBvjB,IAAK2gkB,EAAShlT,GACdglT,SAAUD,EAAQl6jB,GAAGm6jB,YAIrBA,EAAS9kT,GAAK6kT,EAAQ1lf,GAAGh7E,MAC3BghkB,EAAeA,EAAe37jB,OAAS,GAAGrF,IAAM2gkB,EAAS9kT,GACzDmlT,EAAepxjB,KAAK,CAClB2T,MAAOo9iB,EAAS9kT,GAChB77Q,IAAK0gkB,EAAQ1lf,GAAGh7E,IAChB2gkB,SAAUD,EAAQ1lf,GAAG2lf,YAIpBhwa,EAAInqJ,EAAGmqJ,GAAK31E,EAAG21E,IAIlB,QAAgCrxJ,KAFhCuhkB,GADAD,EAAeF,EAAQ/va,IACUgwa,UAEXP,MAAtB,CAIA,IAAIe,GAAO,EAEX,IAAKx9jB,EAAI6C,EAAI,GAAI26jB,GAAQx9jB,GAAK,GAAK+8jB,EAAQ/8jB,GAAG4f,OAASs9iB,EAAkBllT,GAAIh4Q,IAC3Ew9jB,EAAOT,EAAQ/8jB,GAAGg9jB,WAAaE,EAGjC,IAAKl9jB,EAAIq3E,EAAI,GAAImmf,GAAQx9jB,EAAI+8jB,EAAQr7jB,QAAUq7jB,EAAQ/8jB,GAAG3D,KAAO6gkB,EAAkBhlT,GAAIl4Q,IACrFw9jB,EAAOT,EAAQ/8jB,GAAGg9jB,WAAaE,EAGjC,IAAKl9jB,EAAI,GAAIw9jB,GAAQx9jB,EAAIq9jB,EAAe37jB,OAAQ1B,IAC9Cw9jB,EAAOH,EAAer9jB,GAAGg9jB,WAAaE,EAGnCM,IACHN,EAAkBT,MAAQU,GAI9B77jB,MAAMtD,UAAUiR,OAAOnH,MAAMi1jB,EAAS,CAACl6jB,EAAGw0E,EAAIx0E,EAAI,GAAGsI,OAAOkyjB,KAE9D,MAAOpshB,GACP61e,EAAW7+gB,EAAEgpC,GA/Hf,QAiIE61e,EAAWvwc,IAGb,IAAK,IAAI+ga,EAAM,EAAGmmF,EAAWV,EAASzlF,EAAMmmF,EAAS/7jB,OAAQ41e,IAAO,CAClE,IACIomF,EADcD,EAASnmF,GACQ0lF,cAEJrhkB,IAA3B+hkB,EAAiBjB,QACnBiB,EAAiBjB,MAAQ7/jB,KAAKC,IAAIs+E,EAAOuif,EAAiBzlT,MAKhE,IAAIwhT,EAAmC,WACrC,SAASA,EAAoBvzhB,GAC3B,IAAI2xf,EACArgf,EAAQ33C,KAER+8S,EAAc12Q,EAAK02Q,YACnB88Q,EAAoBxzhB,EAAKwzhB,kBACzBrgf,EAAYnzC,EAAKmzC,UACjB+mN,EAAWl6P,EAAKk6P,SAChB+4R,EAAWjzhB,EAAKizhB,SAChBQ,EAAsBzzhB,EAAKyzhB,oBAC3BC,EAAuB1zhB,EAAK0zhB,sBAvhBpC,SAAyB1siB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAyhB5G+qB,CAAgBptB,KAAM45jB,GAEtB55jB,KAAK89jB,aAAe/gR,EACpB/8S,KAAKg8jB,mBAAqBnC,EAC1B75jB,KAAK+9jB,WAAavkf,EAClBx5E,KAAKmpe,UAAY3vZ,EAAU6jO,cAC3Br9S,KAAK6uS,UAAYtO,EACjBvgS,KAAK26jB,UAAYrB,GAAY,GAC7Bt5jB,KAAKg+jB,qBAAuBlE,GAAuB,GACnD95jB,KAAKu6jB,wBAA0BR,EAC/B/5jB,KAAK27jB,wBAAkF,QAAtD3jC,EAAwB57M,WAAWi8M,qBAAqD,IAA1BL,IAAoCA,EAAsB1tQ,SACzJtqR,KAAK2igB,QAAU,KACf3igB,KAAKi+jB,wBAA0B,KAC/Bj+jB,KAAKk+jB,0BAA4B,KACjCl+jB,KAAKm+jB,eAAiB,KACtBn+jB,KAAK+7jB,mBAAqB,IAAI1zjB,QAC9BrI,KAAKw8jB,gBAAiB,EACtBx8jB,KAAKs8jB,WAAY,EACjBt8jB,KAAK0lhB,aAAc,EAAIl/C,EAAM+O,2BAC7Bv1e,KAAKo+jB,aAAe,KACpBp+jB,KAAKw6iB,QAAU,GAEfx6iB,KAAK0lhB,YAAY1jY,QAAjB,SAAoC,WAC7BrqG,EAAM4ihB,wBACT5ihB,EAAMokhB,mBAAqB,MAGzBpkhB,EAAMwmhB,iBACRxmhB,EAAMwmhB,eAAe/0F,OAAO9tZ,MAAQ,EACpC3jC,EAAMwmhB,eAAe/0F,OAAO73W,OAAS,EACrC55E,EAAMwmhB,eAAiB,SAR3B,OAUY,eArjBhB,IAAsB7wiB,EAAasrF,EAAYC,EAyyB7C,OAzyBoBvrF,EAwjBPssiB,EAxjBoBhhd,EAwjBC,CAAC,CACjCt0G,IAAK,UACLP,IAAK,WACH,OAAO/D,KAAK0lhB,YAAY1jY,UAEzB,CACD19I,IAAK,SACL5I,MAAO,WACLsE,KAAKs8jB,WAAY,EAEbt8jB,KAAK2igB,UACP3igB,KAAK2igB,QAAQ92e,OAAO,IAAI26c,EAAM8N,eAAe,8BAA7C,OAAoF,eAEpFt0e,KAAK2igB,QAAU,MAGS,OAAtB3igB,KAAKo+jB,eACP73b,aAAavmI,KAAKo+jB,cAClBp+jB,KAAKo+jB,aAAe,MAGtBp+jB,KAAK0lhB,YAAYvvc,OAAO,IAAIvuE,MAAM,gCAEnC,CACDtD,IAAK,gBACL5I,MAAO,SAAuBsrQ,EAAO+5M,GACnC,IAAK,IAAI/9c,EAAI,EAAG+K,EAAMi5P,EAAMnlQ,OAAQmB,EAAI+K,EAAK/K,IAC3C,QAAqBlH,IAAjBkrQ,EAAMhkQ,GAAGwlB,IAmBbxoB,KAAKg+jB,qBAAqB5xjB,KAAK46P,EAAMhkQ,GAAGwlB,KAExC2xiB,EAAWn6jB,KAAMgnQ,EAAMhkQ,GAAI+9c,EAAY/gd,KAAKm+jB,qBApB1C,GAAsB,4BAAlBn3T,EAAMhkQ,GAAG9C,MAAwD,uBAAlB8mQ,EAAMhkQ,GAAG9C,KAA+B,CACzF,IAAIw8C,EAAS18C,KAAK+9jB,WAClB/9jB,KAAK+9jB,WAAa/3hB,SAASC,cAAc,QAEzCjmC,KAAK+9jB,WAAWt/S,UAAU9/P,IAAI,iBAEV,OAAhBqoP,EAAMhkQ,GAAGi+B,IACXjhC,KAAK+9jB,WAAW5hR,aAAa,KAAM,GAAG7wS,OAAO07P,EAAMhkQ,GAAGi+B,KAGxDyb,EAAOwgQ,YAAYl9S,KAAK+9jB,gBACG,qBAAlB/2T,EAAMhkQ,GAAG9C,OAClBF,KAAK+9jB,WAAa/9jB,KAAK+9jB,WAAWjwJ,cAWzC,CACDxpa,IAAK,cACL5I,MAAO,SAAqB2+jB,GAC1B,IAAIC,EAAoBt6jB,KAAK+7jB,mBAAmBh4jB,IAAIs2jB,GAEhDh+b,EAAY,GAEhB,GAAsC,IAAlCi+b,EAAkBtlB,aAAqBslB,EAAkBE,QAAS,CACpE,IAAI6D,EAAiBhE,EAAQ/+c,MACzB6L,EAAWk3c,EAAel3c,SAC1BizJ,EAAaikT,EAAejkT,WAE5BjzJ,IAAannH,KAAKi+jB,yBAA2B7jT,IAAep6Q,KAAKk+jB,4BACnEl+jB,KAAKm+jB,eAAep4E,KAAO,GAAGz6e,OAAO67G,EAAU,KAAK77G,OAAO8uQ,GAC3Dp6Q,KAAKi+jB,wBAA0B92c,EAC/BnnH,KAAKk+jB,0BAA4B9jT,GAGnC,IACI9+L,EADwBt7E,KAAKm+jB,eAAe7rB,YAAY+nB,EAAQt9Q,aAClCzhO,MAElC,GAAIA,EAAQ,EAAG,CACb,IAAIuwO,EAAQyuQ,EAAkBtlB,YAAc15d,EAExCt7E,KAAKu6jB,wBACPD,EAAkBzuQ,MAAQA,GAG5BxvL,EAAY,UAAU/wH,OAAOugT,EAAO,MAoBxC,GAhBgC,IAA5ByuQ,EAAkB3nE,QACpBt2X,EAAY,UAAU/wH,OAAOgvjB,EAAkB3nE,MAAO,SAASrnf,OAAO+wH,IAGpEA,EAAUx6H,OAAS,IACjB7B,KAAKu6jB,wBACPD,EAAkBI,kBAAoBr+b,GAGxCg+b,EAAQ/+c,MAAM+gB,UAAYA,GAGxBi+b,EAAkBE,SACpBx6jB,KAAK+9jB,WAAW7gR,YAAYm9Q,GAG1BC,EAAkBG,OAAQ,CAC5B,IAAIj9Z,EAAKx3H,SAASC,cAAc,MAChCu3H,EAAG2+I,aAAa,OAAQ,gBAExBn8S,KAAK+9jB,WAAW7gR,YAAY1/I,MAG/B,CACDl5J,IAAK,UACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETykG,EAAU/gG,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC9E8xe,GAAa,EAAIhP,EAAM+O,2BACvBx0B,EAAa3id,OAAOC,OAAO,MAE3B+qe,EAASppe,KAAKmpe,UAAUljc,cAAc,UAQ1C,GANAmjc,EAAO73W,OAAS63W,EAAO9tZ,MAAQ0+e,EAC/B5wF,EAAOk1F,WAAY,EACnBt+jB,KAAKm+jB,eAAiB/0F,EAAO42C,WAAW,KAAM,CAC5CttB,OAAO,IAGL1yf,KAAK89jB,aAAc,CACrB,IAAIS,EAAYv+jB,KAAK89jB,aAAa92T,MAC9Bw3T,EAAax+jB,KAAK89jB,aAAalif,OAEnC57E,KAAKy+jB,cAAcF,EAAWC,GAE9BhpF,EAAWt2b,cACN,KAAIl/C,KAAKg8jB,mBAsBd,MAAM,IAAIp0jB,MAAM,uEArBhB,IAAI0nhB,EAAO,SAASA,IAClBlsa,EAAOu/Y,QAAQl1W,OAAOl3E,MAAK,SAAU5tC,GACnC,IAAIjtC,EAAQitC,EAAMjtC,MACPitC,EAAMroC,KAGfk1e,EAAWt2b,WAIb9gD,OAAO+8C,OAAO4la,EAAYrld,EAAMkgF,QAEhCwnC,EAAOq7c,cAAc/ikB,EAAMsrQ,MAAO+5M,GAElCuuE,OACC95C,EAAWr/Z,SAGhBn2E,KAAK2igB,QAAU3igB,KAAKg8jB,mBAAmB9gD,YACvCoU,IAKF95C,EAAWxzV,QAAQzrE,MAAK,WACtBwqY,EAAa,KAERt8W,EAGH2e,EAAOg7c,aAAevlhB,YAAW,WAC/BupF,EAAOhf,GACPA,EAAOg7c,aAAe,OACrB35d,GALH29B,EAAOhf,KAORpjH,KAAK0lhB,YAAYvvc,UAErB,CACD7xE,IAAK,iBACL5I,MAAO,WACL,IAAIgjkB,EAAah7jB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAEhF,GAAK1D,KAAKu6jB,uBAA0Bv6jB,KAAKw8jB,eAAzC,CAIqB,OAAjBx8jB,KAAKw6iB,UACPniR,EAAOr4R,MACPA,KAAKw6iB,QAAU,MAMjB,IAHA,IAAImkB,EAAe,GACfC,EAAa,GAER57jB,EAAI,EAAGkB,EAAKlE,KAAK26jB,UAAU94jB,OAAQmB,EAAIkB,EAAIlB,IAAK,CACvD,IAAI01E,EAAM14E,KAAK26jB,UAAU33jB,GAErB67jB,EAAW7+jB,KAAK+7jB,mBAAmBh4jB,IAAI20E,GAEtCmmf,EAASrE,UAIVkE,GACFC,EAAa98jB,OAAS,EACtB+8jB,EAAW/8jB,OAAS,EAEhBg9jB,EAASnE,mBACXiE,EAAavyjB,KAAKyyjB,EAASnE,mBAGzBmE,EAAS5sc,WAAa,GACxB2sc,EAAWxyjB,KAAK,GAAGd,OAAOuzjB,EAAS5sc,WAAY,OAC/C0sc,EAAavyjB,KAAK,cAAcd,QAAQuzjB,EAAS5sc,WAAY,SAE7D2sc,EAAWxyjB,KAAK,GAGdyyjB,EAAShrc,aAAe,EAC1B+qc,EAAWxyjB,KAAK,GAAGd,OAAOuzjB,EAAShrc,aAAegrc,EAAShzQ,MAAO,OAElE+yQ,EAAWxyjB,KAAK,GAGdyyjB,EAAS3sc,cAAgB,EAC3B0sc,EAAWxyjB,KAAK,GAAGd,OAAOuzjB,EAAS3sc,cAAe,OAElD0sc,EAAWxyjB,KAAK,GAGdyyjB,EAASn2b,YAAc,GACzBk2b,EAAWxyjB,KAAK,GAAGd,OAAOuzjB,EAASn2b,YAAcm2b,EAAShzQ,MAAO,OACjE8yQ,EAAavyjB,KAAK,cAAcd,QAAQuzjB,EAASn2b,YAAcm2b,EAAShzQ,MAAO,SAE/E+yQ,EAAWxyjB,KAAK,GAGlBssE,EAAI4iC,MAAMx/B,QAAU8if,EAAWn9iB,KAAK,KAEhCk9iB,EAAa98jB,SACf62E,EAAI4iC,MAAM+gB,UAAYsic,EAAal9iB,KAAK,QAG1Ci3D,EAAI4iC,MAAMx/B,QAAU,KACpBpD,EAAI4iC,MAAM+gB,UAAYwic,EAASnE,yBAnyByB9hd,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAyyB3K+gd,EAjS8B,IAsThC,SAACl0F,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ2jkB,iBAAc,EAEtB,IAAIt4F,EAAQb,EAAoB,GAE5B67C,EAAiB77C,EAAoB,GAErCijB,EAAWjjB,EAAoB,GAEnC,SAAShmY,EAAmB9xF,GAAO,OAMnC,SAA4BA,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO86d,EAAkB96d,GAN1CouQ,CAAmBpuQ,IAI7D,SAA0BhS,GAAQ,GAAsB,qBAAX6D,QAAmD,MAAzB7D,EAAK6D,OAAOC,WAA2C,MAAtB9D,EAAK,cAAuB,OAAO4F,MAAMuN,KAAKnT,GAJjFqgR,CAAiBruQ,IAAQ+6d,EAA4B/6d,IAE1H,WAAgC,MAAM,IAAIxL,UAAU,wIAF8E85Q,GAQlI,SAAShpO,EAAetlC,EAAK7K,GAAK,OAMlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EANtBkke,CAAgBlke,IAIzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GAJzbE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAQzI,SAASn3O,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAAKmnU,EAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWmzP,GAAO,MAAMA,GAAQ7kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAW2ue,GAAOz7O,GAAS,EAAMlqN,EAAM2lc,GAAQrga,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAEj+B,SAASw3b,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAStqI,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAEzM,SAASF,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,IAAIy8jB,EAAc,SAASA,IACzB1xiB,EAAgBptB,KAAM8+jB,IAEtB,EAAIt4F,EAAMqR,aAAa,iCAGzB18e,EAAQ2jkB,YAAcA,EAEpB,IAqCIC,EAAK,SAAYrjkB,GACnB,GAAIiG,OAAOC,UAAUlG,GACnB,OAAOA,EAAMuF,WAGf,IAAIuM,EAAI9R,EAAM0+P,QAAQ,IAClBp3P,EAAIwK,EAAE3L,OAAS,EAEnB,GAAa,MAAT2L,EAAExK,GACJ,OAAOwK,EAGT,GACExK,UACgB,MAATwK,EAAExK,IAEX,OAAOwK,EAAEilE,UAAU,EAAY,MAATjlE,EAAExK,GAAaA,EAAIA,EAAI,IAG3Cg8jB,EAAK,SAAY5sjB,GACnB,GAAa,IAATA,EAAE,IAAqB,IAATA,EAAE,GAAU,CAC5B,GAAa,IAATA,EAAE,IAAqB,IAATA,EAAE,GAClB,OAAa,IAATA,EAAE,IAAqB,IAATA,EAAE,GACX,GAGF,SAAS9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAGzD,GAAIA,EAAE,KAAOA,EAAE,IAAMA,EAAE,MAAQA,EAAE,GAAI,CACnC,IAAIzM,EAAsB,IAAlB5I,KAAKkikB,KAAK7sjB,EAAE,IAAYrV,KAAKqhf,GACrC,MAAO,UAAU9ye,OAAOyzjB,EAAGp5jB,GAAI,WAGjC,GAAa,IAATyM,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,GAC9C,MAAO,aAAa9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAI/D,MAAO,UAAU9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAK9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,KAAO,GAAG9G,OAAOyzjB,EAAG3sjB,EAAE,IAAK,MAGnJ8sjB,EAAe,CACjB1pc,UAAW,SACX+G,WAAY,SACZ0ma,UAAW,WAITkG,EAAkB,CAAC,OAAQ,QAAS,UACpCC,EAAmB,CAAC,QAAS,QAAS,SAEtC+1B,EAAsB,WAKxB,IAJA,IAAIC,EAAa,IAAI5pa,WAAW,CAAC,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAEvE6pa,EAAW,IAAI1pB,WAAW,KAErB3yiB,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAG5B,IAFA,IAAI6C,EAAI7C,EAECqiB,EAAI,EAAGA,EAAI,EAAGA,IAEnBxf,EADM,EAAJA,EACE,WAAaA,GAAK,EAAI,WAEtBA,GAAK,EAAI,WAIjBw5jB,EAASr8jB,GAAK6C,EAehB,SAASy5jB,EAAcp/jB,EAAMu2E,EAAMz7B,EAAMltC,GACvC,IAAI2nE,EAAI3nE,EACJC,EAAM0oE,EAAK50E,OACfm5C,EAAKy6B,GAAK1nE,GAAO,GAAK,IACtBitC,EAAKy6B,EAAI,GAAK1nE,GAAO,GAAK,IAC1BitC,EAAKy6B,EAAI,GAAK1nE,GAAO,EAAI,IACzBitC,EAAKy6B,EAAI,GAAW,IAAN1nE,EAEditC,EADAy6B,GAAK,GAC0B,IAArBv1E,EAAKiI,WAAW,GAC1B6yC,EAAKy6B,EAAI,GAA0B,IAArBv1E,EAAKiI,WAAW,GAC9B6yC,EAAKy6B,EAAI,GAA0B,IAArBv1E,EAAKiI,WAAW,GAC9B6yC,EAAKy6B,EAAI,GAA0B,IAArBv1E,EAAKiI,WAAW,GAC9BstE,GAAK,EACLz6B,EAAKtzC,IAAI+uE,EAAMhB,GAEf,IAAIgpF,EA3BN,SAAezjH,EAAMj7B,EAAOvjB,GAG1B,IAFA,IAAIiiK,GAAO,EAEFjqF,EAAKz0D,EAAOy0D,EAAKh4E,EAAKg4E,IAAM,CACnC,IAAI7uE,EAAuB,KAAlB84J,EAAMzjH,EAAKw5B,IAEpBiqF,EAAMA,IAAQ,EADN4ga,EAAS15jB,GAInB,OAAc,EAAP84J,EAkBG8ga,CAAMvkhB,EAAMltC,EAAS,EAD/B2nE,GAAKgB,EAAK50E,QAEVm5C,EAAKy6B,GAAKgpF,GAAO,GAAK,IACtBzjH,EAAKy6B,EAAI,GAAKgpF,GAAO,GAAK,IAC1BzjH,EAAKy6B,EAAI,GAAKgpF,GAAO,EAAI,IACzBzjH,EAAKy6B,EAAI,GAAW,IAANgpF,EAyChB,SAAS+ga,EAAwBC,GAC/B,IAAI1xjB,EAAM0xjB,EAAS59jB,OACf69jB,EAAiB,MACjBC,EAAgB5ikB,KAAKqjB,KAAKrS,EAAM2xjB,GAChCE,EAAO,IAAIpqa,WAAW,EAAIznJ,EAAsB,EAAhB4xjB,EAAoB,GACpDE,EAAK,EACTD,EAAKC,KAAQ,IACbD,EAAKC,KAAQ,IAGb,IAFA,IAAIhra,EAAM,EAEH9mJ,EAAM2xjB,GACXE,EAAKC,KAAQ,EACbD,EAAKC,KAAQ,IACbD,EAAKC,KAAQ,IACbD,EAAKC,KAAQ,EACbD,EAAKC,KAAQ,EACbD,EAAKl4jB,IAAI+3jB,EAAS1qF,SAASlgV,EAAKA,EAAM6qa,GAAiBG,GACvDA,GAAMH,EACN7qa,GAAO6qa,EACP3xjB,GAAO2xjB,EAGTE,EAAKC,KAAQ,EACbD,EAAKC,KAAc,IAAN9xjB,EACb6xjB,EAAKC,KAAQ9xjB,GAAO,EAAI,IACxB6xjB,EAAKC,KAAe,KAAN9xjB,EACd6xjB,EAAKC,MAAgB,OAAN9xjB,IAAiB,EAAI,IACpC6xjB,EAAKl4jB,IAAI+3jB,EAAS1qF,SAASlgV,GAAMgra,GACjCA,GAAMJ,EAAS59jB,OAASgzJ,EACxB,IAAIira,EAnEN,SAAiB9khB,EAAMj7B,EAAOvjB,GAI5B,IAHA,IAAImJ,EAAI,EACJC,EAAI,EAEC4xe,EAAMz3d,EAAOy3d,EAAMh7e,IAAOg7e,EAEjC5xe,GAAKA,GADLD,GAAKA,GAAiB,IAAZq1C,EAAKw8b,KAAgB,QACjB,MAGhB,OAAO5xe,GAAK,GAAKD,EA0DLo6jB,CAAQN,EAAU,EAAGA,EAAS59jB,QAK1C,OAJA+9jB,EAAKC,KAAQC,GAAS,GAAK,IAC3BF,EAAKC,KAAQC,GAAS,GAAK,IAC3BF,EAAKC,KAAQC,GAAS,EAAI,IAC1BF,EAAKC,KAAgB,IAARC,EACNF,EAGT,SAAS9ha,EAAOmsK,EAASm3E,EAAM4zF,EAAiBgrF,GAC9C,IAEIC,EAAUC,EAAWzqB,EAFrBn6d,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OAEjBxY,EAAQkxN,EAAQjvR,KAEpB,OAAQomW,GACN,KAAKolF,EAAM6M,UAAUsG,eACnBumF,EAAY,EACZD,EAAW,EACXxqB,EAAWn6d,EAAQ,GAAK,EACxB,MAEF,KAAKkrZ,EAAM6M,UAAUuG,UACnBsmF,EAAY,EACZD,EAAW,EACXxqB,EAAmB,EAARn6d,EACX,MAEF,KAAKkrZ,EAAM6M,UAAUwG,WACnBqmF,EAAY,EACZD,EAAW,EACXxqB,EAAmB,EAARn6d,EACX,MAEF,QACE,MAAM,IAAI1zE,MAAM,kBAOpB,IAJA,IAAI63jB,EAAW,IAAIjqa,YAAY,EAAIigZ,GAAYlkb,GAC3C4uc,EAAiB,EACjBC,EAAc,EAET50hB,EAAI,EAAGA,EAAI+lF,IAAU/lF,EAC5Bi0hB,EAASU,KAAoB,EAC7BV,EAAS/3jB,IAAIqxG,EAAMg8X,SAASqrF,EAAaA,EAAc3qB,GAAW0qB,GAClEC,GAAe3qB,EACf0qB,GAAkB1qB,EAGpB,GAAIr0J,IAASolF,EAAM6M,UAAUsG,gBAAkBqmF,EAAQ,CACrDG,EAAiB,EAEjB,IAAK,IAAIE,EAAK,EAAGA,EAAK9uc,EAAQ8uc,IAAM,CAClCF,IAEA,IAAK,IAAI1oF,EAAM,EAAGA,EAAMg+D,EAAUh+D,IAChCgoF,EAASU,MAAqB,KAKpC,IAAIG,EAAO,IAAI9qa,WAAW,CAACl6E,GAAS,GAAK,IAAMA,GAAS,GAAK,IAAMA,GAAS,EAAI,IAAc,IAARA,EAAci2C,GAAU,GAAK,IAAMA,GAAU,GAAK,IAAMA,GAAU,EAAI,IAAe,IAATA,EAAe0uc,EAAUC,EAAW,EAAM,EAAM,IAC9MN,EApHN,SAAqBH,GACnB,IAAK72E,EAASE,SACZ,OAAO02E,EAAwBC,GAGjC,IACE,IAAIh7c,EAGFA,EADE7oE,SAAS1tB,QAAQg7d,SAAS9hf,OAAS,EAC7Bq4jB,EAEA3qZ,OAAO9lK,KAAKywjB,GAGtB,IAAI5+a,EAASzlJ,oBAAQ,MAAQmlkB,YAAY97c,EAAO,CAC9C5qG,MAAO,IAGT,OAAOgnI,aAAkB2U,WAAa3U,EAAS,IAAI2U,WAAW3U,GAC9D,MAAOz4I,IACP,EAAIo+d,EAAMv+c,MAAM,gEAAkE7f,GAGpF,OAAOo3jB,EAAwBC,GA6FpBc,CAAYd,GACnBe,EAAYpB,EAAWv9jB,OAAS4+jB,GAAyBH,EAAKz+jB,OAAS+9jB,EAAK/9jB,OAC5Em5C,EAAO,IAAIw6G,WAAWgra,GACtB1yjB,EAAS,EAQb,OAPAktC,EAAKtzC,IAAI03jB,EAAYtxjB,GAErBwxjB,EAAc,OAAQgB,EAAMtlhB,EAD5BltC,GAAUsxjB,EAAWv9jB,QAGrBy9jB,EAAc,QAASM,EAAM5khB,EAD7BltC,GA1LuB,GA0LQwyjB,EAAKz+jB,QAEpCiM,GA5LuB,GA4LQ8xjB,EAAK/9jB,OACpCy9jB,EAAc,OAAQ,IAAI9pa,WAAW,GAAIx6G,EAAMltC,IACxC,EAAI04d,EAAMh2H,iBAAiBx1T,EAAM,YAAag6b,GAGvD,OAAO,SAA6B/qK,EAAS+qK,EAAiBgrF,GAE5D,OAAOlia,EAAOmsK,OADcnuU,IAAjBmuU,EAAQm3E,KAAqBolF,EAAM6M,UAAUsG,eAAiB1vK,EAAQm3E,KACpD4zF,EAAiBgrF,IArMxB,GAyMtBU,EAA6B,WAC/B,SAASA,IACPtziB,EAAgBptB,KAAM0gkB,GAEtB1gkB,KAAKsiiB,cAAgB,EACrBtiiB,KAAKu8H,WAAa2ic,EAAa3ic,WAC/Bv8H,KAAKmnH,SAAW,EAChBnnH,KAAKuiiB,WAAa/7D,EAAM8M,gBACxBtze,KAAKyiiB,WAAaj8D,EAAMiN,qBACxBzze,KAAKkxL,QAAU,EACflxL,KAAK+iiB,kBAAoBv8D,EAAMiM,kBAAkBwG,KACjDj5e,KAAKwiiB,gBAAkB,EACvBxiiB,KAAK6X,EAAI,EACT7X,KAAKwrC,EAAI,EACTxrC,KAAK0iiB,MAAQ,EACb1iiB,KAAK2iiB,MAAQ,EACb3iiB,KAAK4iiB,YAAc,EACnB5iiB,KAAK6iiB,YAAc,EACnB7iiB,KAAK8iiB,WAAa,EAClB9iiB,KAAKgjiB,SAAW,EAChBhjiB,KAAKijiB,UAAYi8B,EAAaj8B,UAC9BjjiB,KAAKkjiB,YAAc,UACnBljiB,KAAKojiB,UAAY,EACjBpjiB,KAAKqjiB,YAAc,EACnBrjiB,KAAKsjiB,UAAY,EACjBtjiB,KAAKkniB,SAAW,GAChBlniB,KAAKiniB,QAAU,GACfjniB,KAAKmniB,WAAa,EAClBnniB,KAAKutiB,UAAY,GACjBvtiB,KAAKwtiB,UAAY,EACjBxtiB,KAAKsnC,aAAe,GACpBtnC,KAAK2gkB,cAAgB,KACrB3gkB,KAAK4gkB,UAAY,KACjB5gkB,KAAK6gkB,OAAS,GAgBhB,OAbApphB,EAAaiphB,EAAe,CAAC,CAC3Bp8jB,IAAK,QACL5I,MAAO,WACL,OAAO0C,OAAOC,OAAO2B,QAEtB,CACDsE,IAAK,kBACL5I,MAAO,SAAyBmc,EAAG2zB,GACjCxrC,KAAK6X,EAAIA,EACT7X,KAAKwrC,EAAIA,MAINk1hB,EAjDwB,GAoD7BI,EAAY,EACZC,EAAY,EACZC,EAAe,EAEnB7lkB,EAAQ2jkB,YAAcA,EAA2B,WAC/C,SAASA,EAAY/0C,EAAYC,GAC/B,IAAIh1C,EAAkBtxe,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GAmBrF,IAAK,IAAIszE,KAjBT5pD,EAAgBptB,KAAM8+jB,GAEtB9+jB,KAAKkljB,WAAa,IAAI1jC,EAAer7C,cACrCnme,KAAK8nC,QAAU,IAAI44hB,EACnB1gkB,KAAKihkB,gBAAkBz6F,EAAM8M,gBAC7Btze,KAAKkhkB,eAAiB,GACtBlhkB,KAAKmhkB,WAAa,GAClBnhkB,KAAK+phB,WAAaA,EAClB/phB,KAAKgqhB,KAAOA,EACZhqhB,KAAKypiB,YAAc,KACnBzpiB,KAAK0piB,eAAgB,EACrB1piB,KAAKohkB,YAAa,EAClBphkB,KAAKqhkB,cAAgBjjkB,OAAOC,OAAO,MACnC2B,KAAKshkB,SAAW,KAChBthkB,KAAKg1e,kBAAoBA,EACzBh1e,KAAKuhkB,mBAAqB,GAEX/6F,EAAMwM,IACnBhze,KAAKuhkB,mBAAmB/6F,EAAMwM,IAAIh8Z,IAAOA,EA+yC7C,OA3yCAv/B,EAAaqnhB,EAAa,CAAC,CACzBx6jB,IAAK,OACL5I,MAAO,WACLsE,KAAKkhkB,eAAe90jB,KAAKpM,KAAKihkB,iBAC9B,IAAIn/B,EAAM9hiB,KAAK8nC,QACf9nC,KAAKmhkB,WAAW/0jB,KAAK01hB,GACrB9hiB,KAAK8nC,QAAUg6f,EAAItnf,UAEpB,CACDl2C,IAAK,UACL5I,MAAO,WACLsE,KAAKihkB,gBAAkBjhkB,KAAKkhkB,eAAe70jB,MAC3CrM,KAAK8nC,QAAU9nC,KAAKmhkB,WAAW90jB,MAC/BrM,KAAKypiB,YAAc,KACnBzpiB,KAAKwhkB,KAAO,OAEb,CACDl9jB,IAAK,QACL5I,MAAO,SAAesrQ,GACpBhnQ,KAAK4gf,OACL5gf,KAAKyhkB,cAAcz6T,GACnBhnQ,KAAK6gf,YAEN,CACDv8e,IAAK,mBACL5I,MAAO,SAA0BwxhB,GAM/B,IALA,IAAIv1e,EAAQ33C,KAERmthB,EAAUD,EAAaC,QACvBC,EAAYF,EAAaE,UAEpBpqhB,EAAI,EAAGkB,EAAKiphB,EAAQtrhB,OAAQmB,EAAIkB,EAAIlB,IAC3C,GAAImqhB,EAAQnqhB,KAAOwje,EAAMwM,IAAImN,WAA7B,CAIA,IACIhT,EADAC,EAAanyO,EAA2BmyR,EAAUpqhB,IAGtD,IACE,IAAIgohB,EAAQ,WACV,IAAIlkhB,EAAMqme,EAAOzxe,MACbmwiB,EAAW/kiB,EAAI41L,WAAW,MAAQ/kJ,EAAMoye,WAAapye,EAAMqye,KAC3DhoY,EAAU,IAAI/iG,SAAQ,SAAUC,GAClC2sf,EAAS9niB,IAAI+C,EAAKo4C,MAGpBvH,EAAM7P,QAAQR,aAAal7B,KAAK41I,IAGlC,IAAKorV,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MAC9C0qhB,IAEF,MAAO55e,GACPg8b,EAAWhle,EAAEgpC,GAff,QAiBEg8b,EAAW12Z,KAIf,OAAOz3B,QAAQwnJ,IAAIzmM,KAAK8nC,QAAQR,gBAEjC,CACDhjC,IAAK,YACL5I,MAAO,SAAmBiK,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACvC,IAAIuqf,EAAkB,CAACt7jB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACtC12E,KAAKihkB,gBAAkBz6F,EAAM8F,KAAKjwW,UAAUr8H,KAAKihkB,gBAAiBA,GAClEjhkB,KAAKwhkB,KAAO,OAEb,CACDl9jB,IAAK,SACL5I,MAAO,SAAgBwxhB,EAAc3sP,GACnC,IAAIn9K,EAASpjH,KAEbA,KAAKugS,SAAWA,EAEhB,IAAImhS,EAAa1hkB,KAAKszhB,YAAY/yP,GAElC,OAAOvgS,KAAK2hkB,iBAAiBz0C,GAAc32c,MAAK,WAK9C,OAJA6sC,EAAO69c,gBAAkBz6F,EAAM8M,gBAE/BlwX,EAAOq+c,cAAcr+c,EAAOw+c,cAAc10C,IAEnCw0C,OAGV,CACDp9jB,IAAK,gBACL5I,MAAO,SAAuBwxhB,GAM5B,IALA,IAAI20C,EAAoB7hkB,KAAKuhkB,mBACzBn0C,EAAYF,EAAaE,UACzBD,EAAUD,EAAaC,QACvB20C,EAAS,GAEJ9+jB,EAAI,EAAGkB,EAAKiphB,EAAQtrhB,OAAQmB,EAAIkB,EAAIlB,IAAK,CAChD,IAAIyoiB,EAAOte,EAAQnqhB,GACnB8+jB,EAAO11jB,KAAK,CACVq/hB,KAAMA,EACN5oiB,GAAIg/jB,EAAkBp2B,GACtBzghB,KAAMoigB,EAAUpqhB,KAIpB,OA3da,SAAsB8+jB,GACvC,IAII3hjB,EAJA4hjB,EAAS,GACThiY,EAAM,GAENmtS,EAAYjyO,EAA2B6mU,GAG3C,IACE,IAAK50F,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAAO,CAClD,IAAI0hkB,EAAgB7hjB,EAAMzkB,MAED,SAArBsmkB,EAAcn/jB,GAWO,YAArBm/jB,EAAcn/jB,GAChBk/jB,EAAShiY,EAAI1zL,MAEb01jB,EAAO31jB,KAAK41jB,IAbZD,EAAO31jB,KAAK,CACVq/hB,KAAM,GACN5oiB,GAAI,QACJmkQ,MAAO,KAETjnE,EAAI3zL,KAAK21jB,GACTA,EAASA,EAAOA,EAAOlgkB,OAAS,GAAGmlQ,QAUvC,MAAO51N,GACP87b,EAAU9ke,EAAEgpC,GAtBd,QAwBE87b,EAAUx2Z,IAGZ,OAAOqrf,EAybIE,CAAaH,KAErB,CACDx9jB,IAAK,gBACL5I,MAAO,SAAuBqmkB,GAC5B,IACI/6C,EADAC,EAAahsR,EAA2B8mU,GAG5C,IACE,IAAK96C,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MAAO,CACrD,IAAI4hkB,EAAgBl7C,EAAOtrhB,MACvBmH,EAAKq/jB,EAAcr/jB,GACnB4oiB,EAAOy2B,EAAcz2B,KACrBzghB,EAAOk3iB,EAAcl3iB,KAEzB,OAAe,EAAPyghB,GACN,KAAKjlE,EAAMwM,IAAI4O,UACb5hf,KAAK4hf,YACL,MAEF,KAAKpb,EAAMwM,IAAImN,WACb,MAEF,KAAK3Z,EAAMwM,IAAIiP,WACbjif,KAAKiif,WAAWj3d,GAChB,MAEF,KAAKw7c,EAAMwM,IAAIsP,mBACbtif,KAAKsif,mBAAmBt3d,EAAK,GAAIA,EAAK,IACtC,MAEF,KAAKw7c,EAAMwM,IAAIkP,QACblif,KAAKkif,QAAQl3d,GACb,MAEF,KAAKw7c,EAAMwM,IAAIyP,SAIf,KAAKjc,EAAMwM,IAAI0P,eACb1if,KAAKyif,SAASz3d,EAAK,IACnB,MAEF,KAAKw7c,EAAMwM,IAAI6O,QACb7hf,KAAK6hf,UACL,MAEF,KAAKrb,EAAMwM,IAAIqP,SACbrif,KAAKqif,SAASr3d,EAAK,GAAIA,EAAK,IAC5B,MAEF,KAAKw7c,EAAMwM,IAAI8O,eACb9hf,KAAK8hf,eAAe92d,EAAK,IACzB,MAEF,KAAKw7c,EAAMwM,IAAI+O,eACb/hf,KAAK+hf,eAAe/2d,EAAK,IACzB,MAEF,KAAKw7c,EAAMwM,IAAIgP,UACbhif,KAAKgif,UAAUh3d,EAAK,IACpB,MAEF,KAAKw7c,EAAMwM,IAAIuP,cACbvif,KAAKuif,cAAcv3d,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACrE,MAEF,KAAKw7c,EAAMwM,IAAIoP,YACbpif,KAAKoif,YAAYp3d,EAAK,IACtB,MAEF,KAAKw7c,EAAMwM,IAAImP,qBACbnif,KAAKmif,qBAAqBn3d,EAAK,IAC/B,MAEF,KAAKw7c,EAAMwM,IAAIoN,aACbpgf,KAAKogf,aAAap1d,EAAK,IACvB,MAEF,KAAKw7c,EAAMwM,IAAIsN,YACbtgf,KAAKsgf,YAAYt1d,EAAK,IACtB,MAEF,KAAKw7c,EAAMwM,IAAIqN,WACbrgf,KAAKqgf,WAAWr1d,EAAK,IACrB,MAEF,KAAKw7c,EAAMwM,IAAIuN,cACbvgf,KAAKugf,cAAcv1d,EAAK,IACxB,MAEF,KAAKw7c,EAAMwM,IAAIwQ,gBACbxjf,KAAKwjf,gBAAgBx4d,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC5C,MAEF,KAAKw7c,EAAMwM,IAAIuQ,kBACbvjf,KAAKujf,kBAAkBv4d,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC9C,MAEF,KAAKw7c,EAAMwM,IAAIkQ,gBACbljf,KAAKkjf,gBAAgBl4d,GACrB,MAEF,KAAKw7c,EAAMwM,IAAIoQ,cACbpjf,KAAKojf,cAAcp4d,GACnB,MAEF,KAAKw7c,EAAMwM,IAAI2Q,YACb3jf,KAAK2jf,YAAY34d,EAAK,IACtB,MAEF,KAAKw7c,EAAMwM,IAAIwN,QACbxgf,KAAKwgf,QAAQx1d,EAAK,GAAIA,EAAK,IAC3B,MAEF,KAAKw7c,EAAMwM,IAAIyN,mBACbzgf,KAAKygf,mBAAmBz1d,EAAK,IAC7B,MAEF,KAAKw7c,EAAMwM,IAAI0N,YACb1gf,KAAK0gf,YAAY11d,EAAK,IACtB,MAEF,KAAKw7c,EAAMwM,IAAI2N,UACb3gf,KAAK2gf,UAAU31d,EAAK,IACpB,MAEF,KAAKw7c,EAAMwM,IAAInqW,KACb7oI,KAAK6oI,OACL,MAEF,KAAK29V,EAAMwM,IAAIqO,OACbrhf,KAAKqhf,SACL,MAEF,KAAK7a,EAAMwM,IAAIj8N,OACb/2Q,KAAK+2Q,SACL,MAEF,KAAKyvN,EAAMwM,IAAIsO,WACbthf,KAAKshf,aACL,MAEF,KAAK9a,EAAMwM,IAAIuO,aACbvhf,KAAKuhf,eACL,MAEF,KAAK/a,EAAMwM,IAAIx5N,KACbx5Q,KAAKw5Q,KAAK,WACV,MAEF,KAAKgtN,EAAMwM,IAAI2O,OACb3hf,KAAKw5Q,KAAK,WACV,MAEF,KAAKgtN,EAAMwM,IAAIuS,yBACbvlf,KAAKulf,2BACL,MAEF,KAAK/e,EAAMwM,IAAIkS,kBACbllf,KAAKklf,kBAAkBl6d,EAAK,IAC5B,MAEF,KAAKw7c,EAAMwM,IAAImS,wBACbnlf,KAAKmlf,wBAAwBn6d,EAAK,IAClC,MAEF,KAAKw7c,EAAMwM,IAAIgS,sBACbhlf,KAAKglf,sBAAsBh6d,EAAK,IAChC,MAEF,KAAKw7c,EAAMwM,IAAIuR,sBACbvkf,KAAKukf,sBAAsBv5d,EAAK,GAAIA,EAAK,IACzC,MAEF,KAAKw7c,EAAMwM,IAAIwR,oBACbxkf,KAAKwkf,sBACL,MAEF,KAAKhe,EAAMwM,IAAIkO,UACblhf,KAAKkhf,YACL,MAEF,KAAK1a,EAAMwM,IAAIoO,YACbphf,KAAKohf,cACL,MAEF,KAAK5a,EAAMwM,IAAIwO,gBACbxhf,KAAKwhf,kBACL,MAEF,KAAKhb,EAAMwM,IAAIyO,kBACbzhf,KAAKyhf,oBACL,MAEF,KAAKjb,EAAMwM,IAAIwP,SACbxif,KAAKwif,WACL,MAEF,KAAKhc,EAAMwM,IAAI32W,UACbr8H,KAAKq8H,UAAUrxG,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,MAEF,KAAKw7c,EAAMwM,IAAIwS,cACbxlf,KAAKwlf,cAAcx6d,EAAK,GAAIA,EAAK,IACjC,MAEF,KAAKw7c,EAAMwM,IAAI0O,QACb1hf,KAAK0hf,UACL,MAEF,KAAK,GACH1hf,KAAKsgJ,MAAM4hb,EAAcl7T,OACzB,MAEF,SACE,EAAIw/N,EAAMv+c,MAAM,0BAA0B3c,OAAOzI,MAIvD,MAAOuuC,GACP61e,EAAW7+gB,EAAEgpC,GArNf,QAuNE61e,EAAWvwc,OAGd,CACDpyE,IAAK,iBACL5I,MAAO,SAAwBmniB,GAC7B7iiB,KAAK8nC,QAAQ+6f,YAAcA,IAE5B,CACDv+hB,IAAK,iBACL5I,MAAO,SAAwBkniB,GAC7B5iiB,KAAK8nC,QAAQ86f,YAAcA,IAE5B,CACDt+hB,IAAK,WACL5I,MAAO,WACLsE,KAAKqif,SAAS,EAAGrif,KAAK8nC,QAAQopJ,WAE/B,CACD5sL,IAAK,gBACL5I,MAAO,SAAuBiK,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAC3C,IAAI5uC,EAAU9nC,KAAK8nC,QACnBA,EAAQy6f,WAAaz6f,EAAQq6hB,WAAa,CAACx8jB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAC1D5uC,EAAQ06f,gBAAkBzliB,KAAKquiB,MAAMzliB,EAAGC,GACxCkiC,EAAQjwB,EAAIiwB,EAAQ46f,MAAQ,EAC5B56f,EAAQ0D,EAAI1D,EAAQ66f,MAAQ,EAC5B76f,EAAQs6hB,QAAU,GAClBt6hB,EAAQu6hB,QAAU,GAClBv6hB,EAAQw6hB,MAAQtikB,KAAKkljB,WAAWj/gB,cAAc,aAC9C6B,EAAQw6hB,MAAMC,eAAe,KAAM,cAAez6hB,EAAQsyO,YAC1DtyO,EAAQw6hB,MAAMC,eAAe,KAAM,YAAa,GAAGj3jB,OAAOyzjB,EAAGj3hB,EAAQq/E,UAAW,OAChFr/E,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKxD,GAAIj3hB,EAAQ0D,IACpD1D,EAAQ06hB,WAAaxikB,KAAKkljB,WAAWj/gB,cAAc,YACnD6B,EAAQ06hB,WAAWtlR,YAAYp1Q,EAAQw6hB,SAExC,CACDh+jB,IAAK,YACL5I,MAAO,WACL,IAAIosC,EAAU9nC,KAAK8nC,QACnBA,EAAQjwB,EAAIiwB,EAAQ46f,MAAQ,EAC5B56f,EAAQ0D,EAAI1D,EAAQ66f,MAAQ,EAC5B76f,EAAQy6f,WAAa/7D,EAAM8M,gBAC3Bxrc,EAAQq6hB,WAAa37F,EAAM8M,gBAC3Bxrc,EAAQ06f,gBAAkB,EAC1B16f,EAAQw6hB,MAAQtikB,KAAKkljB,WAAWj/gB,cAAc,aAC9C6B,EAAQ06hB,WAAaxikB,KAAKkljB,WAAWj/gB,cAAc,YACnD6B,EAAQ26hB,OAASzikB,KAAKkljB,WAAWj/gB,cAAc,SAC/C6B,EAAQs6hB,QAAU,GAClBt6hB,EAAQu6hB,QAAU,KAEnB,CACD/9jB,IAAK,WACL5I,MAAO,SAAkBmc,EAAG2zB,GAC1B,IAAI1D,EAAU9nC,KAAK8nC,QACnBA,EAAQjwB,EAAIiwB,EAAQ46f,OAAS7qhB,EAC7BiwB,EAAQ0D,EAAI1D,EAAQ66f,OAASn3f,EAC7B1D,EAAQs6hB,QAAU,GAClBt6hB,EAAQu6hB,QAAU,GAClBv6hB,EAAQw6hB,MAAQtikB,KAAKkljB,WAAWj/gB,cAAc,aAC9C6B,EAAQw6hB,MAAMC,eAAe,KAAM,cAAez6hB,EAAQsyO,YAC1DtyO,EAAQw6hB,MAAMC,eAAe,KAAM,YAAa,GAAGj3jB,OAAOyzjB,EAAGj3hB,EAAQq/E,UAAW,OAChFr/E,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKxD,GAAIj3hB,EAAQ0D,MAErD,CACDlnC,IAAK,WACL5I,MAAO,SAAkB01iB,GACvB,IAAItpgB,EAAU9nC,KAAK8nC,QACfi+c,EAAOj+c,EAAQi+c,KACf5+X,EAAWr/E,EAAQq/E,SAEvB,GAAiB,IAAbA,EAAJ,CAIA,IAYI+/Z,EAZAob,EAAgBx6f,EAAQw6f,cACxBM,EAAc96f,EAAQ86f,YACtBC,EAAc/6f,EAAQ+6f,YACtB0N,EAAgBzogB,EAAQyogB,cACxBzN,EAAah7f,EAAQg7f,WAAayN,EAClCxwQ,EAAWgmN,EAAKhmN,SAChBwxQ,EAAaxxQ,EAAW,GAAK,EAC7ByxQ,EAAkBzrD,EAAKyrD,gBACvBC,EAAoBtqb,EAAWr/E,EAAQ26f,WAAW,GAClD5qhB,EAAI,EAEJsvgB,EAAalsR,EAA2Bm2S,GAG5C,IACE,IAAKjqB,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MAAO,CACrD,IAAI+6Q,EAAQ6rQ,EAAOxrhB,MAEnB,GAAc,OAAV2/Q,EAGG,IAAI,EAAImrN,EAAMmQ,OAAOt7N,GAC1BxjQ,GAAK05hB,EAAal2R,EAAQl0J,EAAW,QADhC,CAKP,IAAI7sC,GAAW+gM,EAAMu2R,QAAU/O,EAAc,GAAKD,EAC9CnD,EAAYpkR,EAAMw2R,SAClBE,OAAU,EACVC,OAAU,EACV12d,EAAQ+/L,EAAM//L,MAElB,GAAIykN,EAAU,CACZ,IAAImyQ,OAAK,EACLD,EAAU52R,EAAM42R,SAAWT,EAE/BU,IADAA,EAAK72R,EAAM42R,QAAUA,EAAQ,GAAa,GAAR32d,GACvBm2d,EACX,IAAIU,EAAKF,EAAQ,GAAKR,EACtBn2d,EAAQ22d,GAAWA,EAAQ,GAAK32d,EAChCy2d,EAAUG,EAAK5P,EACf0P,GAAWn6hB,EAAIs6hB,GAAM7P,OAErByP,EAAUl6hB,EAAIyqhB,EACd0P,EAAU,GAGR32R,EAAMo3R,UAAY1sD,EAAKk3C,eACzBn1f,EAAQs6hB,QAAQh2jB,KAAK07B,EAAQjwB,EAAIk6hB,GAE7BhyQ,GACFj4P,EAAQu6hB,QAAQj2jB,MAAM07B,EAAQ0D,EAAIwmgB,GAGpClqgB,EAAQw6hB,MAAMvlR,aAAe0iP,GAW/B5nhB,GANIkoR,EACUzkN,EAAQm2d,EAAoBn3d,EAAUi2d,EAEtCj1d,EAAQm2d,EAAoBn3d,EAAUi2d,OA1ClD14hB,GAAK04hB,EAAgB1N,GA+CzB,MAAOzxf,GACP+1e,EAAW/+gB,EAAEgpC,GArDf,QAuDE+1e,EAAWzwc,IAGb5uC,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKz6hB,EAAQs6hB,QAAQp5jB,IAAI+1jB,GAAIt9iB,KAAK,MAEjEs+Q,EACFj4P,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKz6hB,EAAQu6hB,QAAQr5jB,IAAI+1jB,GAAIt9iB,KAAK,MAErEqmB,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKxD,GAAIj3hB,EAAQ0D,IAGlDu0P,EACFj4P,EAAQ0D,GAAK3zB,EAEbiwB,EAAQjwB,GAAKA,EAAIirhB,EAGnBh7f,EAAQw6hB,MAAMC,eAAe,KAAM,cAAez6hB,EAAQsyO,YAC1DtyO,EAAQw6hB,MAAMC,eAAe,KAAM,YAAa,GAAGj3jB,OAAOyzjB,EAAGj3hB,EAAQq/E,UAAW,OAE5Er/E,EAAQ0tF,YAAc0pc,EAAa1pc,WACrC1tF,EAAQw6hB,MAAMC,eAAe,KAAM,aAAcz6hB,EAAQ0tF,WAGvD1tF,EAAQy0F,aAAe2ic,EAAa3ic,YACtCz0F,EAAQw6hB,MAAMC,eAAe,KAAM,cAAez6hB,EAAQy0F,YAG5D,IAAIy0a,EAAiBlpgB,EAAQi7f,kBAAoBv8D,EAAMiM,kBAAkBgH,iBAgBzE,GAdIu3D,IAAmBxqE,EAAMiM,kBAAkBwG,MAAQ+3D,IAAmBxqE,EAAMiM,kBAAkB0G,aAC5Frxc,EAAQm7f,YAAci8B,EAAaj8B,WACrCn7f,EAAQw6hB,MAAMC,eAAe,KAAM,OAAQz6hB,EAAQm7f,WAGjDn7f,EAAQs7f,UAAY,GACtBt7f,EAAQw6hB,MAAMC,eAAe,KAAM,eAAgBz6hB,EAAQs7f,YAEpDt7f,EAAQi7f,oBAAsBv8D,EAAMiM,kBAAkB+G,YAC/D1xc,EAAQw6hB,MAAMC,eAAe,KAAM,OAAQ,eAE3Cz6hB,EAAQw6hB,MAAMC,eAAe,KAAM,OAAQ,QAGzCvxB,IAAmBxqE,EAAMiM,kBAAkByG,QAAU83D,IAAmBxqE,EAAMiM,kBAAkB0G,YAAa,CAC/G,IAAIupF,EAAiB,GAAK56hB,EAAQ06f,iBAAmB,GAErDxiiB,KAAK2ikB,qBAAqB76hB,EAAQw6hB,MAAOI,GAG3C,IAAIngC,EAAaz6f,EAAQy6f,WAEA,IAArBz6f,EAAQk7f,YACVT,EAAaA,EAAWzyhB,SACb,IAAMg4B,EAAQk7f,UAG3Bl7f,EAAQ06hB,WAAWD,eAAe,KAAM,YAAa,GAAGj3jB,OAAO0zjB,EAAGz8B,GAAa,WAAWj3hB,OAAOyzjB,EAAGj8B,GAAa,UACjHh7f,EAAQ06hB,WAAWD,eA/yBZ,uCA+yBmC,YAAa,YACvDz6hB,EAAQ06hB,WAAWtlR,YAAYp1Q,EAAQw6hB,OACvCx6hB,EAAQ26hB,OAAOvlR,YAAYp1Q,EAAQ06hB,YAEnCxikB,KAAK4ikB,wBAAwB1lR,YAAYp1Q,EAAQ06hB,eAElD,CACDl+jB,IAAK,qBACL5I,MAAO,SAA4Bmc,EAAG2zB,GACpCxrC,KAAKiif,YAAYz2c,GACjBxrC,KAAKqif,SAASxqe,EAAG2zB,KAElB,CACDlnC,IAAK,eACL5I,MAAO,SAAsB40iB,GAC3B,IAAKA,EAAQt1f,KACX,MAAM,IAAIpzC,MAAM,qGAGb5H,KAAKshkB,WACRthkB,KAAKshkB,SAAWthkB,KAAKkljB,WAAWj/gB,cAAc,aAC9CjmC,KAAKshkB,SAASiB,eAAe,KAAM,OAAQ,YAC3CvikB,KAAK6ikB,KAAK3lR,YAAYl9S,KAAKshkB,WAG7B,IAAI9/d,GAAM,EAAIglY,EAAMh2H,iBAAiB8/L,EAAQt1f,KAAMs1f,EAAQ9Q,SAAUx/hB,KAAKg1e,iBAC1Eh1e,KAAKshkB,SAASvkR,aAAe,8BAA+BzxS,OAAOgliB,EAAQ5R,WAAY,MAAS,aAAapzhB,OAAOk2F,EAAK,YAE1H,CACDl9F,IAAK,UACL5I,MAAO,SAAiB6yL,GACtB,IAAIzmJ,EAAU9nC,KAAK8nC,QACfwogB,EAAUtwiB,KAAK+phB,WAAWhmhB,IAAIwqL,EAAQ,IACtCxyL,EAAOwyL,EAAQ,GACnBzmJ,EAAQi+c,KAAOuqD,GAEXtwiB,KAAKohkB,YAAe9wB,EAAQrT,aAAgBj9hB,KAAKqhkB,cAAc/wB,EAAQ5R,cACzE1+hB,KAAK8ikB,aAAaxyB,GAClBtwiB,KAAKqhkB,cAAc/wB,EAAQ5R,YAAc4R,GAG3CxogB,EAAQ26f,WAAa6N,EAAQ7N,YAAcj8D,EAAMiN,qBACjD,IAAIx5G,EAAO,SAEPq2K,EAAQ1qb,MACVq0Q,EAAO,MACEq2K,EAAQr2K,OACjBA,EAAO,QAGT,IAAIw2K,EAASH,EAAQG,OAAS,SAAW,SAErC10iB,EAAO,GACTA,GAAQA,EACR+rC,EAAQyogB,eAAiB,GAEzBzogB,EAAQyogB,cAAgB,EAG1BzogB,EAAQq/E,SAAWprH,EACnB+rC,EAAQsyO,WAAak2R,EAAQ5R,WAC7B52f,EAAQy0F,WAAa09P,EACrBnyV,EAAQ0tF,UAAYi7a,EACpB3ogB,EAAQw6hB,MAAQtikB,KAAKkljB,WAAWj/gB,cAAc,aAC9C6B,EAAQw6hB,MAAMC,eAAe,KAAM,IAAKxD,GAAIj3hB,EAAQ0D,IACpD1D,EAAQs6hB,QAAU,GAClBt6hB,EAAQu6hB,QAAU,KAEnB,CACD/9jB,IAAK,UACL5I,MAAO,WACL,IAAIqnkB,EAEAj7hB,EAAU9nC,KAAK8nC,QAEfA,EAAQi7f,kBAAoBv8D,EAAMiM,kBAAkBiH,kBAAmE,QAA9CqpF,EAAsBj7hB,EAAQ06hB,kBAAgD,IAAxBO,GAAkCA,EAAoBC,kBACvLl7hB,EAAQggK,QAAUhgK,EAAQ06hB,WAC1BxikB,KAAKw5Q,KAAK,WACVx5Q,KAAK0hf,aAGR,CACDp9e,IAAK,eACL5I,MAAO,SAAsB4/E,GACvBA,EAAQ,IACVt7E,KAAK8nC,QAAQw7f,UAAYhod,KAG5B,CACDh3E,IAAK,aACL5I,MAAO,SAAoB4/G,GACzBt7G,KAAK8nC,QAAQm/f,QAAUkC,EAAgB7tb,KAExC,CACDh3G,IAAK,cACL5I,MAAO,SAAqB4/G,GAC1Bt7G,KAAK8nC,QAAQo/f,SAAWkC,EAAiB9tb,KAE1C,CACDh3G,IAAK,gBACL5I,MAAO,SAAuB+tH,GAC5BzpH,KAAK8nC,QAAQq/f,WAAa19a,IAE3B,CACDnlH,IAAK,iBACL5I,MAAO,SAAwB2niB,GAC7BrjiB,KAAK8nC,QAAQu7f,YAAcA,IAE5B,CACD/+hB,IAAK,oBACL5I,MAAO,SAA2By7E,EAAGR,EAAG/wE,GACtC5F,KAAK8nC,QAAQo7f,YAAc18D,EAAM8F,KAAKsnE,aAAaz8d,EAAGR,EAAG/wE,KAE1D,CACDtB,IAAK,eACL5I,MAAO,SAAsB0niB,GAC3BpjiB,KAAK8nC,QAAQs7f,UAAYA,IAE1B,CACD9+hB,IAAK,kBACL5I,MAAO,SAAyBy7E,EAAGR,EAAG/wE,GACpC5F,KAAK8nC,QAAQm7f,UAAYz8D,EAAM8F,KAAKsnE,aAAaz8d,EAAGR,EAAG/wE,GACvD5F,KAAK8nC,QAAQw6hB,MAAQtikB,KAAKkljB,WAAWj/gB,cAAc,aACnDjmC,KAAK8nC,QAAQs6hB,QAAU,GACvBpikB,KAAK8nC,QAAQu6hB,QAAU,KAExB,CACD/9jB,IAAK,kBACL5I,MAAO,SAAyBsvB,GAC9BhrB,KAAK8nC,QAAQo7f,YAAcljiB,KAAKijkB,oBAAoBj4iB,KAErD,CACD1mB,IAAK,gBACL5I,MAAO,SAAuBsvB,GAC5BhrB,KAAK8nC,QAAQm7f,UAAYjjiB,KAAKijkB,oBAAoBj4iB,KAEnD,CACD1mB,IAAK,cACL5I,MAAO,SAAqBsvB,GAC1B,IAAIswD,EAAQt7E,KAAKugS,SAASjlN,MACtBi2C,EAASvxH,KAAKugS,SAAShvK,OAEvByib,EAAMxtE,EAAM8F,KAAKy/D,iBAAiB/riB,KAAKihkB,iBAEvChtB,EAAKztE,EAAM8F,KAAKC,eAAe,CAAC,EAAG,GAAIynE,GAEvCx2Y,EAAKgpU,EAAM8F,KAAKC,eAAe,CAAC,EAAGh7W,GAASyib,GAE5CE,EAAK1tE,EAAM8F,KAAKC,eAAe,CAACjxZ,EAAO,GAAI04d,GAE3CG,EAAK3tE,EAAM8F,KAAKC,eAAe,CAACjxZ,EAAOi2C,GAASyib,GAEhD7rD,EAAKprf,KAAKE,IAAIg3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtC/rD,EAAKrrf,KAAKE,IAAIg3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtCj8R,EAAKn7Q,KAAKC,IAAIi3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtCh8R,EAAKp7Q,KAAKC,IAAIi3iB,EAAG,GAAIz2Y,EAAG,GAAI02Y,EAAG,GAAIC,EAAG,IACtCx+Y,EAAO31J,KAAKkljB,WAAWj/gB,cAAc,YACzC0vH,EAAK4sa,eAAe,KAAM,IAAKp6E,GAC/BxyV,EAAK4sa,eAAe,KAAM,IAAKn6E,GAC/BzyV,EAAK4sa,eAAe,KAAM,QAASrqT,EAAKiwO,GACxCxyV,EAAK4sa,eAAe,KAAM,SAAUpqT,EAAKiwO,GACzCzyV,EAAK4sa,eAAe,KAAM,OAAQvikB,KAAKkjkB,oBAAoBl4iB,IAEvDhrB,KAAK8nC,QAAQs7f,UAAY,GAC3BztY,EAAK4sa,eAAe,KAAM,eAAgBvikB,KAAK8nC,QAAQs7f,WAGzDpjiB,KAAK4ikB,wBAAwB1lR,YAAYvnJ,KAE1C,CACDrxJ,IAAK,sBACL5I,MAAO,SAA6BsvB,GAClC,MAAgB,kBAAZA,EAAK,GACAhrB,KAAKmjkB,mBAAmBn4iB,GAG1BhrB,KAAKkjkB,oBAAoBl4iB,KAEjC,CACD1mB,IAAK,qBACL5I,MAAO,SAA4BsvB,GACjC,IAAIi7E,EAAQj7E,EAAK,GACbkigB,EAAeligB,EAAK,GACpB6ohB,EAAS7ohB,EAAK,IAAMw7c,EAAM8M,gBAE1B8vF,EAASjwhB,EAAenoB,EAAK,GAAI,GACjCm9d,EAAKi7E,EAAO,GACZh7E,EAAKg7E,EAAO,GACZlrT,EAAKkrT,EAAO,GACZjrT,EAAKirT,EAAO,GAEZ/nB,EAAQrwhB,EAAK,GACbswhB,EAAQtwhB,EAAK,GACbuwhB,EAAYvwhB,EAAK,GACjBq4iB,EAAW,UAAU/3jB,OAAO01jB,KAG5BsC,EAAuBnwhB,EADDqzb,EAAM8F,KAAK4b,cAAc,GAAG58e,OAAOq0F,EAAmB6mY,EAAM8F,KAAKC,eAAe,CAAC4b,EAAIC,GAAKyrD,IAAUl0c,EAAmB6mY,EAAM8F,KAAKC,eAAe,CAACr0N,EAAIC,GAAK07R,MACtH,GAC3D0vB,EAAMD,EAAqB,GAC3BE,EAAMF,EAAqB,GAC3BG,EAAMH,EAAqB,GAC3BI,EAAMJ,EAAqB,GAG3BvuB,EAAyB5hgB,EADDqzb,EAAM8F,KAAK83D,8BAA8ByP,GACF,GAI/D8vB,EAAStoB,EAHAtG,EAAuB,GAIhC6uB,EAAStoB,EAHAvG,EAAuB,GAIhC8uB,EAAS7jkB,KAAKkljB,WAAWj/gB,cAAc,eAC3C49hB,EAAOtB,eAAe,KAAM,KAAMc,GAClCQ,EAAOtB,eAAe,KAAM,eAAgB,kBAC5CsB,EAAOtB,eAAe,KAAM,QAASoB,GACrCE,EAAOtB,eAAe,KAAM,SAAUqB,GACtCC,EAAOtB,eAAe,KAAM,IAAK,GAAGj3jB,OAAOi4jB,IAC3CM,EAAOtB,eAAe,KAAM,IAAK,GAAGj3jB,OAAOk4jB,IAC3C,IAAIx1c,EAAMhuH,KAAKguH,IACXizc,EAAkBjhkB,KAAKihkB,gBACvBh+B,EAAYjjiB,KAAK8nC,QAAQm7f,UACzBC,EAAcljiB,KAAK8nC,QAAQo7f,YAC3B9iH,EAAOpgb,KAAKkljB,WAAW7mjB,OAAOolkB,EAAMF,EAAKG,EAAMF,GAInD,GAHAxjkB,KAAKguH,IAAMoyT,EACXpgb,KAAKihkB,gBAAkBptB,EAEL,IAAd0H,EAAiB,CACnB,IAAIkB,EAAWj2E,EAAM8F,KAAKsnE,aAAa3riB,MAAMu+d,EAAM8F,KAAM3sY,EAAmBsG,IAE5EjmG,KAAK8nC,QAAQm7f,UAAYwZ,EACzBz8iB,KAAK8nC,QAAQo7f,YAAcuZ,EAU7B,OAPAz8iB,KAAKyhkB,cAAczhkB,KAAK4hkB,cAAc10C,IACtClthB,KAAKguH,IAAMA,EACXhuH,KAAKihkB,gBAAkBA,EACvBjhkB,KAAK8nC,QAAQm7f,UAAYA,EACzBjjiB,KAAK8nC,QAAQo7f,YAAcA,EAC3B2gC,EAAO3mR,YAAYkjI,EAAKlS,WAAW,IACnClua,KAAK6ikB,KAAK3lR,YAAY2mR,GACf,QAAQv4jB,OAAO+3jB,EAAU,OAEjC,CACD/+jB,IAAK,sBACL5I,MAAO,SAA6BsvB,GAKlC,OAJoB,kBAATA,IACTA,EAAOhrB,KAAKgqhB,KAAKjmhB,IAAIinB,IAGfA,EAAK,IACX,IAAK,cACH,IAEI84iB,EAFAC,EAAY,UAAUz4jB,OAAO01jB,KAC7BgD,EAAah5iB,EAAK,GAGtB,OAAQA,EAAK,IACX,IAAK,QACH,IAAIi5iB,EAASj5iB,EAAK,GACdixQ,EAASjxQ,EAAK,IAClB84iB,EAAW9jkB,KAAKkljB,WAAWj/gB,cAAc,uBAChCs8hB,eAAe,KAAM,KAAMwB,GACpCD,EAASvB,eAAe,KAAM,gBAAiB,kBAC/CuB,EAASvB,eAAe,KAAM,KAAM0B,EAAO,IAC3CH,EAASvB,eAAe,KAAM,KAAM0B,EAAO,IAC3CH,EAASvB,eAAe,KAAM,KAAMtmS,EAAO,IAC3C6nS,EAASvB,eAAe,KAAM,KAAMtmS,EAAO,IAC3C,MAEF,IAAK,SACH,IAAIioS,EAAal5iB,EAAK,GAClBm5iB,EAAcn5iB,EAAK,GACnBo5iB,EAAcp5iB,EAAK,GACnBq5iB,EAAer5iB,EAAK,IACxB84iB,EAAW9jkB,KAAKkljB,WAAWj/gB,cAAc,uBAChCs8hB,eAAe,KAAM,KAAMwB,GACpCD,EAASvB,eAAe,KAAM,gBAAiB,kBAC/CuB,EAASvB,eAAe,KAAM,KAAM4B,EAAY,IAChDL,EAASvB,eAAe,KAAM,KAAM4B,EAAY,IAChDL,EAASvB,eAAe,KAAM,IAAK8B,GACnCP,EAASvB,eAAe,KAAM,KAAM2B,EAAW,IAC/CJ,EAASvB,eAAe,KAAM,KAAM2B,EAAW,IAC/CJ,EAASvB,eAAe,KAAM,KAAM6B,GACpC,MAEF,QACE,MAAM,IAAIx8jB,MAAM,6BAA6B0D,OAAO0f,EAAK,KAG7D,IACI8/f,EADAC,EAAa9vR,EAA2B+oU,GAG5C,IACE,IAAKj5C,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MAAO,CACrD,IAAI23iB,EAAYntB,EAAOpvhB,MACnBi2S,EAAO3xS,KAAKkljB,WAAWj/gB,cAAc,YACzC0rQ,EAAK4wR,eAAe,KAAM,SAAUtqB,EAAU,IAC9CtmQ,EAAK4wR,eAAe,KAAM,aAActqB,EAAU,IAClD6rB,EAAS5mR,YAAYvL,IAEvB,MAAOvgQ,GACP25e,EAAW3ihB,EAAEgpC,GATf,QAWE25e,EAAWr0c,IAIb,OADA12E,KAAK6ikB,KAAK3lR,YAAY4mR,GACf,QAAQx4jB,OAAOy4jB,EAAW,KAEnC,IAAK,OAEH,OADA,EAAIv9F,EAAMv+c,MAAM,8BACT,KAET,IAAK,QACH,MAAO,UAET,QACE,MAAM,IAAIrgB,MAAM,oBAAoB0D,OAAO0f,EAAK,QAGrD,CACD1mB,IAAK,UACL5I,MAAO,SAAiB6xiB,EAAWC,GACjCxtiB,KAAK8nC,QAAQylgB,UAAYA,EACzBvtiB,KAAK8nC,QAAQ0lgB,UAAYA,IAE1B,CACDlpiB,IAAK,gBACL5I,MAAO,SAAuBo7E,EAAK9rD,GACjC,IAOI2kgB,EAPA7nf,EAAU9nC,KAAK8nC,QACfjwB,EAAIiwB,EAAQjwB,EACZ2zB,EAAI1D,EAAQ0D,EACZ1lC,EAAI,GACJ0xE,EAAI,EAEJq4c,EAAa50R,EAA2BnkL,GAG5C,IACE,IAAK+4c,EAAWrihB,MAAOmihB,EAASE,EAAWzphB,KAAK9F,MAG9C,OAAa,EAFJqvhB,EAAOj0hB,OAGd,KAAK8qe,EAAMwM,IAAImO,UACbtpe,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACT,IAAI8D,EAAQtwD,EAAKwsD,KACb+5C,EAASvmG,EAAKwsD,KACdk4d,EAAK73hB,EAAIyjE,EACTq0d,EAAKnkgB,EAAI+lF,EACbzrH,EAAEsG,KAAK,IAAK2yjB,EAAGlnjB,GAAIknjB,EAAGvzhB,GAAI,IAAKuzhB,EAAGrvB,GAAKqvB,EAAGvzhB,GAAI,IAAKuzhB,EAAGrvB,GAAKqvB,EAAGpvB,GAAK,IAAKovB,EAAGlnjB,GAAIknjB,EAAGpvB,GAAK,KACvF,MAEF,KAAKnpE,EAAMwM,IAAI3iM,OACbx4R,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACT1xE,EAAEsG,KAAK,IAAK2yjB,EAAGlnjB,GAAIknjB,EAAGvzhB,IACtB,MAEF,KAAKg7b,EAAMwM,IAAI8N,OACbjpe,EAAImT,EAAKwsD,KACThsC,EAAIxgB,EAAKwsD,KACT1xE,EAAEsG,KAAK,IAAK2yjB,EAAGlnjB,GAAIknjB,EAAGvzhB,IACtB,MAEF,KAAKg7b,EAAMwM,IAAI+N,QACblpe,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACb1xE,EAAEsG,KAAK,IAAK2yjB,EAAG/ziB,EAAKwsD,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAGlnjB,GAAIknjB,EAAGvzhB,IACtFgsC,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIgO,SACbl7e,EAAEsG,KAAK,IAAK2yjB,EAAGlnjB,GAAIknjB,EAAGvzhB,GAAIuzhB,EAAG/ziB,EAAKwsD,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,KACrF3/D,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACbA,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIiO,SACbppe,EAAImT,EAAKwsD,EAAI,GACbhsC,EAAIxgB,EAAKwsD,EAAI,GACb1xE,EAAEsG,KAAK,IAAK2yjB,EAAG/ziB,EAAKwsD,IAAKunf,EAAG/ziB,EAAKwsD,EAAI,IAAKunf,EAAGlnjB,GAAIknjB,EAAGvzhB,GAAIuzhB,EAAGlnjB,GAAIknjB,EAAGvzhB,IAClEgsC,GAAK,EACL,MAEF,KAAKgvZ,EAAMwM,IAAIkO,UACbp7e,EAAEsG,KAAK,MAIb,MAAOglC,GACPy+e,EAAWznhB,EAAEgpC,GAtDf,QAwDEy+e,EAAWn5c,IAGb5wE,EAAIA,EAAE2b,KAAK,KAEPqmB,EAAQiiF,MAAQjzC,EAAIj1E,OAAS,GAAKi1E,EAAI,KAAO0vZ,EAAMwM,IAAImO,WAAarqa,EAAI,KAAO0vZ,EAAMwM,IAAI3iM,OAC3FvqS,EAAIgiC,EAAQiiF,KAAKu6c,eAAe,KAAM,KAAOx+jB,GAE7CgiC,EAAQiiF,KAAO/pH,KAAKkljB,WAAWj/gB,cAAc,YAE7CjmC,KAAK4ikB,wBAAwB1lR,YAAYp1Q,EAAQiiF,OAGnDjiF,EAAQiiF,KAAKw4c,eAAe,KAAM,IAAKz8jB,GACvCgiC,EAAQiiF,KAAKw4c,eAAe,KAAM,OAAQ,QAC1Cz6hB,EAAQggK,QAAUhgK,EAAQiiF,KAC1BjiF,EAAQ+ngB,gBAAgBh4hB,EAAG2zB,KAE5B,CACDlnC,IAAK,UACL5I,MAAO,WACL,IAAIosC,EAAU9nC,KAAK8nC,QAGnB,GAFAA,EAAQiiF,KAAO,KAEV/pH,KAAKypiB,YAIV,GAAK3hgB,EAAQggK,QAAb,CAKA,IAAIy8X,EAAS,WAAWj5jB,OAAOw1jB,KAC3BvpT,EAAWv3Q,KAAKkljB,WAAWj/gB,cAAc,gBAC7CsxO,EAASgrT,eAAe,KAAM,KAAMgC,GACpChtT,EAASgrT,eAAe,KAAM,YAAavD,EAAGh/jB,KAAKihkB,kBACnD,IAAIuD,EAAc18hB,EAAQggK,QAAQqgX,WAAU,GAY5C,GAVyB,YAArBnojB,KAAKypiB,YACP+6B,EAAYjC,eAAe,KAAM,YAAa,WAE9CiC,EAAYjC,eAAe,KAAM,YAAa,WAGhDvikB,KAAKypiB,YAAc,KACnBlyR,EAAS2lC,YAAYsnR,GACrBxkkB,KAAK6ikB,KAAK3lR,YAAY3lC,GAElBzvO,EAAQ64hB,cAAe,CACzB74hB,EAAQ84hB,UAAY,KAEpB,IACI9wC,EADAC,EAAa90R,EAA2Bj7P,KAAKmhkB,YAGjD,IACE,IAAKpxC,EAAWvihB,MAAOsihB,EAASC,EAAW3phB,KAAK9F,MACnCwvhB,EAAOp0hB,MACbklkB,UAAY,KAEnB,MAAOxvhB,GACP2+e,EAAW3nhB,EAAEgpC,GANf,QAQE2+e,EAAWr5c,IAGb6gM,EAASgrT,eAAe,KAAM,YAAaz6hB,EAAQ64hB,eAGrD74hB,EAAQ64hB,cAAgB,QAAQr1jB,OAAOi5jB,EAAQ,KAC/CvkkB,KAAKwhkB,KAAO,UAzCVxhkB,KAAKypiB,YAAc,OA2CtB,CACDnliB,IAAK,OACL5I,MAAO,SAAcwE,GACnBF,KAAKypiB,YAAcvpiB,IAEpB,CACDoE,IAAK,YACL5I,MAAO,WACL,IAAIosC,EAAU9nC,KAAK8nC,QAEnB,GAAIA,EAAQiiF,KAAM,CAChB,IAAIjkH,EAAI,GAAGwF,OAAOw8B,EAAQiiF,KAAKu6c,eAAe,KAAM,KAAM,KAC1Dx8hB,EAAQiiF,KAAKw4c,eAAe,KAAM,IAAKz8jB,MAG1C,CACDxB,IAAK,aACL5I,MAAO,SAAoBw1L,GACzBlxL,KAAK8nC,QAAQopJ,SAAWA,IAEzB,CACD5sL,IAAK,cACL5I,MAAO,SAAqBsniB,GAC1BhjiB,KAAK8nC,QAAQk7f,SAAWA,IAEzB,CACD1+hB,IAAK,uBACL5I,MAAO,SAA8BqniB,GACnC/iiB,KAAK8nC,QAAQi7f,kBAAoBA,IAElC,CACDz+hB,IAAK,YACL5I,MAAO,SAAmBmwT,GACxB7rT,KAAK8nC,QAAQg7f,WAAaj3O,EAAQ,MAEnC,CACDvnT,IAAK,qBACL5I,MAAO,SAA4B8uhB,MAClC,CACDlmhB,IAAK,cACL5I,MAAO,SAAqB+xiB,MAC3B,CACDnpiB,IAAK,YACL5I,MAAO,SAAmB8hN,GACxB,IACIyyU,EADAC,EAAaj1R,EAA2Bz9C,GAG5C,IACE,IAAK0yU,EAAW1ihB,MAAOyihB,EAASC,EAAW9phB,KAAK9F,MAAO,CACrD,IAAI6vhB,EAAeh9e,EAAe88e,EAAOv0hB,MAAO,GAC5C4I,EAAM6rhB,EAAa,GACnBz0hB,EAAQy0hB,EAAa,GAEzB,OAAQ7rhB,GACN,IAAK,KACHtE,KAAKogf,aAAa1kf,GAClB,MAEF,IAAK,KACHsE,KAAKqgf,WAAW3kf,GAChB,MAEF,IAAK,KACHsE,KAAKsgf,YAAY5kf,GACjB,MAEF,IAAK,KACHsE,KAAKugf,cAAc7kf,GACnB,MAEF,IAAK,IACHsE,KAAKwgf,QAAQ9kf,EAAM,GAAIA,EAAM,IAC7B,MAEF,IAAK,KACHsE,KAAKygf,mBAAmB/kf,GACxB,MAEF,IAAK,KACHsE,KAAK0gf,YAAYhlf,GACjB,MAEF,IAAK,OACHsE,KAAKkif,QAAQxmf,GACb,MAEF,IAAK,KACHsE,KAAKykkB,eAAe/okB,GACpB,MAEF,IAAK,KACHsE,KAAK0kkB,aAAahpkB,GAClB,MAEF,SACE,EAAI8qe,EAAMv+c,MAAM,wCAAwC3c,OAAOhH,MAIrE,MAAO8sC,GACP8+e,EAAW9nhB,EAAEgpC,GArDf,QAuDE8+e,EAAWx5c,OAGd,CACDpyE,IAAK,OACL5I,MAAO,WACL,IAAIosC,EAAU9nC,KAAK8nC,QAEfA,EAAQggK,UACVhgK,EAAQggK,QAAQy6X,eAAe,KAAM,OAAQz6hB,EAAQm7f,WACrDn7f,EAAQggK,QAAQy6X,eAAe,KAAM,eAAgBz6hB,EAAQs7f,WAC7DpjiB,KAAK0hf,aAGR,CACDp9e,IAAK,SACL5I,MAAO,WACL,IAAIosC,EAAU9nC,KAAK8nC,QAEfA,EAAQggK,UACV9nM,KAAK2ikB,qBAAqB76hB,EAAQggK,SAElChgK,EAAQggK,QAAQy6X,eAAe,KAAM,OAAQ,QAC7CvikB,KAAK0hf,aAGR,CACDp9e,IAAK,uBACL5I,MAAO,SAA8BosM,GACnC,IAAI46X,EAAiBh/jB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EACrFokC,EAAU9nC,KAAK8nC,QACfylgB,EAAYzlgB,EAAQylgB,UAED,IAAnBm1B,GAAwBn1B,EAAU1riB,OAAS,IAC7C0riB,EAAYA,EAAUvkiB,KAAI,SAAUtN,GAClC,OAAOgnkB,EAAiBhnkB,MAI5BosM,EAAQy6X,eAAe,KAAM,SAAUz6hB,EAAQo7f,aAC/Cp7V,EAAQy6X,eAAe,KAAM,iBAAkBz6hB,EAAQu7f,aACvDv7V,EAAQy6X,eAAe,KAAM,oBAAqBxD,EAAGj3hB,EAAQq/f,aAC7Dr/V,EAAQy6X,eAAe,KAAM,iBAAkBz6hB,EAAQm/f,SACvDn/V,EAAQy6X,eAAe,KAAM,kBAAmBz6hB,EAAQo/f,UACxDp/V,EAAQy6X,eAAe,KAAM,eAAgBxD,EAAG2D,EAAiB56hB,EAAQw7f,WAAa,MACtFx7V,EAAQy6X,eAAe,KAAM,mBAAoBh1B,EAAUvkiB,IAAI+1jB,GAAIt9iB,KAAK,MACxEqmL,EAAQy6X,eAAe,KAAM,oBAAqBxD,EAAG2D,EAAiB56hB,EAAQ0lgB,WAAa,QAE5F,CACDlpiB,IAAK,SACL5I,MAAO,WACDsE,KAAK8nC,QAAQggK,SACf9nM,KAAK8nC,QAAQggK,QAAQy6X,eAAe,KAAM,YAAa,WAGzDvikB,KAAK6oI,SAEN,CACDvkI,IAAK,aACL5I,MAAO,WACLsE,KAAK+2Q,SACL/2Q,KAAK6oI,SAEN,CACDvkI,IAAK,eACL5I,MAAO,WACDsE,KAAK8nC,QAAQggK,SACf9nM,KAAK8nC,QAAQggK,QAAQy6X,eAAe,KAAM,YAAa,WAGzDvikB,KAAKshf,eAEN,CACDh9e,IAAK,cACL5I,MAAO,WACLsE,KAAKkhf,YACLlhf,KAAK+2Q,WAEN,CACDzyQ,IAAK,kBACL5I,MAAO,WACLsE,KAAKkhf,YACLlhf,KAAKshf,eAEN,CACDh9e,IAAK,oBACL5I,MAAO,WACLsE,KAAKkhf,YACLlhf,KAAKuhf,iBAEN,CACDj9e,IAAK,2BACL5I,MAAO,WACL,IAAIi6J,EAAO31J,KAAKkljB,WAAWj/gB,cAAc,YACzC0vH,EAAK4sa,eAAe,KAAM,IAAK,KAC/B5sa,EAAK4sa,eAAe,KAAM,IAAK,KAC/B5sa,EAAK4sa,eAAe,KAAM,QAAS,OACnC5sa,EAAK4sa,eAAe,KAAM,SAAU,OACpC5sa,EAAK4sa,eAAe,KAAM,OAAQvikB,KAAK8nC,QAAQm7f,WAE/CjjiB,KAAK4ikB,wBAAwB1lR,YAAYvnJ,KAE1C,CACDrxJ,IAAK,oBACL5I,MAAO,SAA2B4+hB,GAChC,IAAIrwN,EAAUqwN,EAAM59V,WAAW,MAAQ18L,KAAK+phB,WAAWhmhB,IAAIu2hB,GAASt6hB,KAAKgqhB,KAAKjmhB,IAAIu2hB,GAE7ErwN,EAKLjqU,KAAKmlf,wBAAwBl7K,IAJ3B,EAAIu8J,EAAMv+c,MAAM,kCAAkC3c,OAAOgvhB,EAAO,wBAMnE,CACDh2hB,IAAK,0BACL5I,MAAO,SAAiCuuU,EAAS3wD,GAC/C,IAAIh+L,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OACjBonS,EAASwmK,EAAoBl1P,EAASjqU,KAAKg1e,kBAAmB17N,GAC9DqrT,EAAW3kkB,KAAKkljB,WAAWj/gB,cAAc,YAC7C0+hB,EAASpC,eAAe,KAAM,IAAK,KACnCoC,EAASpC,eAAe,KAAM,IAAK,KACnCoC,EAASpC,eAAe,KAAM,QAASxD,EAAGzjf,IAC1Cqpf,EAASpC,eAAe,KAAM,SAAUxD,EAAGxtc,IAC3CvxH,KAAK8nC,QAAQggK,QAAU68X,EACvB3kkB,KAAKw5Q,KAAK,WACV,IAAIorT,EAAQ5kkB,KAAKkljB,WAAWj/gB,cAAc,aAC1C2+hB,EAAMrC,eAp+CG,+BAo+CsB,aAAc5pK,GAC7CisK,EAAMrC,eAAe,KAAM,IAAK,KAChCqC,EAAMrC,eAAe,KAAM,IAAKxD,GAAIxtc,IACpCqzc,EAAMrC,eAAe,KAAM,QAASxD,EAAGzjf,GAAS,MAChDspf,EAAMrC,eAAe,KAAM,SAAUxD,EAAGxtc,GAAU,MAClDqzc,EAAMrC,eAAe,KAAM,YAAa,SAASj3jB,OAAOyzjB,EAAG,EAAIzjf,GAAQ,KAAKhwE,OAAOyzjB,GAAI,EAAIxtc,GAAS,MAEhG+nJ,EACFA,EAAK4jC,YAAY0nR,GAEjB5kkB,KAAK4ikB,wBAAwB1lR,YAAY0nR,KAG5C,CACDtgkB,IAAK,wBACL5I,MAAO,SAA+BuuU,GACpC,IAAIniS,EAAU9nC,KAAK8nC,QACfwzC,EAAQ2uP,EAAQ3uP,MAChBi2C,EAAS04M,EAAQ14M,OACjB0xa,EAAYn7f,EAAQm7f,UACxBn7f,EAAQ+4hB,OAAS,OAAOv1jB,OAAOy1jB,KAC/B,IAAIznT,EAAOt5Q,KAAKkljB,WAAWj/gB,cAAc,YACzCqzO,EAAKipT,eAAe,KAAM,KAAMz6hB,EAAQ+4hB,QACxC,IAAIlra,EAAO31J,KAAKkljB,WAAWj/gB,cAAc,YACzC0vH,EAAK4sa,eAAe,KAAM,IAAK,KAC/B5sa,EAAK4sa,eAAe,KAAM,IAAK,KAC/B5sa,EAAK4sa,eAAe,KAAM,QAASxD,EAAGzjf,IACtCq6E,EAAK4sa,eAAe,KAAM,SAAUxD,EAAGxtc,IACvCokC,EAAK4sa,eAAe,KAAM,OAAQt/B,GAClCttY,EAAK4sa,eAAe,KAAM,OAAQ,QAAQj3jB,OAAOw8B,EAAQ+4hB,OAAQ,MACjE7gkB,KAAK6ikB,KAAK3lR,YAAY5jC,GAEtBt5Q,KAAK4ikB,wBAAwB1lR,YAAYvnJ,GAEzC31J,KAAKmlf,wBAAwBl7K,EAAS3wD,KAEvC,CACDh1Q,IAAK,wBACL5I,MAAO,SAA+Bm4iB,EAAQzzH,GAK5C,GAJI3+a,MAAMC,QAAQmyiB,IAA6B,IAAlBA,EAAOhyiB,QAClC7B,KAAKq8H,UAAUw3a,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,IAG3EzzH,EAAM,CACR,IAAI9kW,EAAQ8kW,EAAK,GAAKA,EAAK,GACvB7uT,EAAS6uT,EAAK,GAAKA,EAAK,GACxBukJ,EAAW3kkB,KAAKkljB,WAAWj/gB,cAAc,YAC7C0+hB,EAASpC,eAAe,KAAM,IAAKniJ,EAAK,IACxCukJ,EAASpC,eAAe,KAAM,IAAKniJ,EAAK,IACxCukJ,EAASpC,eAAe,KAAM,QAASxD,EAAGzjf,IAC1Cqpf,EAASpC,eAAe,KAAM,SAAUxD,EAAGxtc,IAC3CvxH,KAAK8nC,QAAQggK,QAAU68X,EACvB3kkB,KAAKw5Q,KAAK,WACVx5Q,KAAK0hf,aAGR,CACDp9e,IAAK,sBACL5I,MAAO,cACN,CACD4I,IAAK,cACL5I,MAAO,SAAqB6kS,GAC1B,IAAIvyK,EAAMhuH,KAAKkljB,WAAW7mjB,OAAOkiS,EAASjlN,MAAOilN,EAAShvK,QACtDszc,EAAc7kkB,KAAKkljB,WAAWj/gB,cAAc,YAChD+nF,EAAIkvL,YAAY2nR,GAChB7kkB,KAAK6ikB,KAAOgC,EACZ,IAAIC,EAAY9kkB,KAAKkljB,WAAWj/gB,cAAc,SAI9C,OAHA6+hB,EAAUvC,eAAe,KAAM,YAAavD,EAAGz+R,EAASlkK,YACxDrO,EAAIkvL,YAAY4nR,GAChB9kkB,KAAKguH,IAAM82c,EACJ92c,IAER,CACD1pH,IAAK,mBACL5I,MAAO,WACL,IAAKsE,KAAK8nC,QAAQ84hB,UAAW,CAC3B,IAAIA,EAAY5gkB,KAAKkljB,WAAWj/gB,cAAc,SAC9C26hB,EAAU2B,eAAe,KAAM,YAAavikB,KAAK8nC,QAAQ64hB,eACzD3gkB,KAAKguH,IAAIkvL,YAAY0jR,GACrB5gkB,KAAK8nC,QAAQ84hB,UAAYA,EAG3B,OAAO5gkB,KAAK8nC,QAAQ84hB,YAErB,CACDt8jB,IAAK,wBACL5I,MAAO,WAYL,OAXKsE,KAAKwhkB,OACRxhkB,KAAKwhkB,KAAOxhkB,KAAKkljB,WAAWj/gB,cAAc,SAC1CjmC,KAAKwhkB,KAAKe,eAAe,KAAM,YAAavD,EAAGh/jB,KAAKihkB,kBAEhDjhkB,KAAK8nC,QAAQ64hB,cACf3gkB,KAAK+kkB,mBAAmB7nR,YAAYl9S,KAAKwhkB,MAEzCxhkB,KAAKguH,IAAIkvL,YAAYl9S,KAAKwhkB,OAIvBxhkB,KAAKwhkB,SAIT1C,EAr0CwC,IA20C5C,SAACp5F,EAAyBvqe,EAASwqe,GAE1C,aAGA,SAASprb,EAAQzzC,GAAmV,OAAtOyzC,EAArD,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBmH,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiByzC,EAAQzzC,GAEnX1I,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQ6pkB,mBAAgB,EAExB,IAMgCl+jB,EAN5B0he,GAM4B1he,EANU6+d,EAAoB,KAMT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAJrF0/d,EAAQb,EAAoB,GAE5Bs/F,EAAiBt/F,EAAoB,KAIzC,SAAS9tZ,EAAUC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,sDAAyDy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAU9vE,UAAU,EAAMD,cAAc,KAAegwE,GAAYmgN,EAAgBpgN,EAAUC,GAEnX,SAASmgN,EAAgB/xR,EAAGsvE,GAA+G,OAA1GyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAAsB,OAAjBtvE,EAAEjI,UAAYu3E,EAAUtvE,GAAa+xR,EAAgB/xR,EAAGsvE,GAErK,SAASuC,EAAaC,GAAW,IAAIC,EAMrC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAN9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,EAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,EAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,EAA2BniH,KAAM4T,IAE5Z,SAASuuG,EAA2BitD,EAAMpuK,GAAQ,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAAwB,OAAOA,EAAa,QAAa,IAATA,EAAmB,MAAM,IAAIqB,UAAU,4DAA+D,OAE1P,SAAgC+sK,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAIutC,eAAe,6DAAgE,OAAOvtC,EAFkG/sD,CAAuB+sD,GAMxR,SAAShtD,EAAgBj8G,GAAwJ,OAAnJi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAAK,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAAci8G,EAAgBj8G,GAExM,SAAS42M,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASm/P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAIzM,IAAI43iB,EAAK9pkB,oBAAQ,MAEb+pkB,EAAO/pkB,oBAAQ,MAEfgqkB,EAAQhqkB,oBAAQ,MAEhBomG,EAAMpmG,oBAAQ,MAEdiqkB,EAAe,0BAoBfL,EAA6B,WAC/B,SAASA,EAAc/3iB,GACrBG,EAAgBptB,KAAMglkB,GAEtBhlkB,KAAKitB,OAASA,EACdjtB,KAAKwhG,IAvBT,SAAkB8je,GAChB,IAAIC,EAAY/je,EAAIhlD,MAAM8ohB,GAE1B,MAA2B,UAAvBC,EAAUh4F,UAAwBg4F,EAAU7mE,KACvC6mE,EAGL,gBAAgBxqhB,KAAKuqhB,GAChB9je,EAAIhlD,MAAM,WAAWlxC,OAAOg6jB,KAGhCC,EAAU7mE,OACb6mE,EAAUh4F,SAAW,SAGhBg4F,GAQMC,CAASv4iB,EAAOu0E,KAC3BxhG,KAAKylkB,OAA+B,UAAtBzlkB,KAAKwhG,IAAI+rY,UAA8C,WAAtBvte,KAAKwhG,IAAI+rY,SACxDvte,KAAK0lkB,QAAgC,UAAtB1lkB,KAAKwhG,IAAI+rY,SACxBvte,KAAKmlhB,YAAcnlhB,KAAKylkB,QAAUx4iB,EAAOk4f,aAAe,GACxDnlhB,KAAK+/iB,mBAAqB,KAC1B//iB,KAAK2lkB,qBAAuB,GAqD9B,OAlDAluhB,EAAauthB,EAAe,CAAC,CAC3B1gkB,IAAK,yBACLP,IAAK,WACH,IAAI48iB,EAAuBC,EAE3B,OAAgL,QAAxKD,EAA+E,QAAtDC,EAAyB5gjB,KAAK+/iB,0BAA2D,IAA3Ba,OAAoC,EAASA,EAAuBC,eAA+C,IAA1BF,EAAmCA,EAAwB,IAEpP,CACDr8iB,IAAK,gBACL5I,MAAO,WAGL,OAFA,EAAI8qe,EAAMC,SAASzme,KAAK+/iB,mBAAoB,wDAC5C//iB,KAAK+/iB,mBAAqB//iB,KAAK0lkB,QAAU,IAAIE,EAA0B5lkB,MAAQ,IAAI6lkB,EAAwB7lkB,MACpGA,KAAK+/iB,qBAEb,CACDz7iB,IAAK,iBACL5I,MAAO,SAAwBqkB,EAAOvjB,GACpC,GAAIA,GAAOwD,KAAKihjB,uBACd,OAAO,KAGT,IAAI1pB,EAAcv3hB,KAAK0lkB,QAAU,IAAII,EAA2B9lkB,KAAM+f,EAAOvjB,GAAO,IAAIupkB,EAAyB/lkB,KAAM+f,EAAOvjB,GAI9H,OAFAwD,KAAK2lkB,qBAAqBv5jB,KAAKmrhB,GAExBA,IAER,CACDjzhB,IAAK,oBACL5I,MAAO,SAA2B6vH,GAC5BvrH,KAAK+/iB,oBACP//iB,KAAK+/iB,mBAAmBl0hB,OAAO0/F,GAGjC,IACIprG,EADA+sd,EAAYjyO,EAA2Bj7P,KAAK2lkB,qBAAqB71jB,MAAM,IAG3E,IACE,IAAKo9d,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAC9B6f,EAAMzkB,MACZmwB,OAAO0/F,GAEhB,MAAOn6E,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,SAKTsuf,EA/DwB,GAkEjC7pkB,EAAQ6pkB,cAAgBA,EAExB,IAAIgB,EAA8B,WAChC,SAASA,EAAer+Z,GACtBv6I,EAAgBptB,KAAMgmkB,GAEtBhmkB,KAAKimkB,KAAOt+Z,EAAOnmE,IACnBxhG,KAAKqhjB,OAAQ,EACbrhjB,KAAKgjgB,aAAe,KACpBhjgB,KAAKumhB,WAAa,KAClB,IAAIt5f,EAAS06I,EAAO16I,OACpBjtB,KAAK8/iB,eAAiB7yhB,EAAOprB,OAC7B7B,KAAK6gjB,QAAU,EACf7gjB,KAAKshjB,UAAY,KACjBthjB,KAAKkmkB,cAAgBj5iB,EAAOi3f,eAAgB,EAC5ClkhB,KAAKmmkB,gBAAkBl5iB,EAAOo2f,eAEzBrjhB,KAAKmmkB,iBAAoBnmkB,KAAKkmkB,gBACjClmkB,KAAKkmkB,eAAgB,GAGvBlmkB,KAAK4/iB,uBAAyB3yhB,EAAOk3f,cACrCnkhB,KAAK6/iB,mBAAqB5yhB,EAAOi3f,aACjClkhB,KAAKomkB,gBAAkB,KACvBpmkB,KAAKqmkB,iBAAkB,EAAI7/F,EAAM+O,2BACjCv1e,KAAKsmkB,oBAAqB,EAAI9/F,EAAM+O,2BAmJtC,OAhJA99b,EAAauuhB,EAAgB,CAAC,CAC5B1hkB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKsmkB,mBAAmBtkb,UAEhC,CACD19I,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAKshjB,YAEb,CACDh9iB,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAK8/iB,iBAEb,CACDx7iB,IAAK,mBACLP,IAAK,WACH,OAAO/D,KAAK6/iB,oBAEb,CACDv7iB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAK4/iB,wBAEb,CACDt7iB,IAAK,OACL5I,MAAO,WACL,IAAI+ljB,EAAQrkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,IAChF,IAAInzS,EAAOpjC,EACX,OAAOs1U,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAEH,OADA6pe,EAAS7pe,KAAO,EACTC,KAAKqmkB,gBAAgBrkb,QAE9B,KAAK,EACH,IAAKhiJ,KAAKqhjB,MAAO,CACfz3E,EAAS7pe,KAAO,EAChB,MAGF,OAAO6pe,EAASQ,OAAO,SAAU,CAC/B1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKgjgB,aAAc,CACtBp5B,EAAS7pe,KAAO,EAChB,MAGF,MAAMC,KAAKgjgB,aAEb,KAAK,EAGH,GAAgB,QAFhB1sU,EAAQt2L,KAAKomkB,gBAAgB34a,QAEN,CACrBm8U,EAAS7pe,KAAO,GAChB,MAIF,OADAC,KAAKqmkB,iBAAkB,EAAI7/F,EAAM+O,2BAC1B3L,EAASQ,OAAO,SAAUpqe,KAAKytJ,QAExC,KAAK,GAWH,OAVAztJ,KAAK6gjB,SAAWvqX,EAAMz0L,OAElB7B,KAAKumhB,YACPvmhB,KAAKumhB,WAAW,CACdz5X,OAAQ9sJ,KAAK6gjB,QACb1mT,MAAOn6P,KAAK8/iB,iBAIhB5sZ,EAAS,IAAIsC,WAAW8gC,GAAOpjC,OACxB02U,EAASQ,OAAO,SAAU,CAC/B1ue,MAAOw3J,EACP5yJ,MAAM,IAGV,KAAK,GACL,IAAK,MACH,OAAOspe,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,WACE,OAAOyhjB,EAAMx5iB,MAAMjI,KAAM0D,YAjEtB,IAsEN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GAChBvrH,KAAKomkB,gBAMVpmkB,KAAKomkB,gBAAgB57f,QAAQ+gD,GAL3BvrH,KAAK6wa,OAAOtlT,KAOf,CACDjnH,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKgjgB,aAAez3Y,EAEpBvrH,KAAKqmkB,gBAAgBnnhB,YAEtB,CACD56C,IAAK,qBACL5I,MAAO,SAA4B0zhB,GACjC,IAAIz3e,EAAQ33C,KAEZA,KAAKomkB,gBAAkBh3C,EACvBA,EAAez2e,GAAG,YAAY,WAC5BhB,EAAM0uhB,gBAAgBnnhB,aAExBkwe,EAAez2e,GAAG,OAAO,WACvBy2e,EAAe5kd,UACf7yB,EAAM0pgB,OAAQ,EAEd1pgB,EAAM0uhB,gBAAgBnnhB,aAExBkwe,EAAez2e,GAAG,SAAS,SAAU4yE,GACnC5zE,EAAMk5X,OAAOtlT,OAGVvrH,KAAK4/iB,uBAAyB5/iB,KAAK6/iB,mBACtC7/iB,KAAK6wa,OAAO,IAAI21D,EAAM8N,eAAe,0BAGnCt0e,KAAKgjgB,cACPhjgB,KAAKomkB,gBAAgB57f,QAAQxqE,KAAKgjgB,kBAKjCgjE,EA1KyB,GA6K9BO,EAA+B,WACjC,SAASA,EAAgB5+Z,GACvBv6I,EAAgBptB,KAAMumkB,GAEtBvmkB,KAAKimkB,KAAOt+Z,EAAOnmE,IACnBxhG,KAAKqhjB,OAAQ,EACbrhjB,KAAKgjgB,aAAe,KACpBhjgB,KAAKumhB,WAAa,KAClBvmhB,KAAK6gjB,QAAU,EACf7gjB,KAAKomkB,gBAAkB,KACvBpmkB,KAAKqmkB,iBAAkB,EAAI7/F,EAAM+O,2BACjC,IAAItod,EAAS06I,EAAO16I,OACpBjtB,KAAK4/iB,uBAAyB3yhB,EAAOk3f,cA0HvC,OAvHA1se,EAAa8uhB,EAAiB,CAAC,CAC7BjikB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAK4/iB,wBAEb,CACDt7iB,IAAK,OACL5I,MAAO,WACL,IAAImmjB,EAASzkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAAS+2C,IACjF,IAAIjqV,EAAOpjC,EACX,OAAOs1U,EAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EAEH,OADAyghB,EAAUzghB,KAAO,EACVC,KAAKqmkB,gBAAgBrkb,QAE9B,KAAK,EACH,IAAKhiJ,KAAKqhjB,MAAO,CACf7gC,EAAUzghB,KAAO,EACjB,MAGF,OAAOyghB,EAAUp2C,OAAO,SAAU,CAChC1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKgjgB,aAAc,CACtBwd,EAAUzghB,KAAO,EACjB,MAGF,MAAMC,KAAKgjgB,aAEb,KAAK,EAGH,GAAgB,QAFhB1sU,EAAQt2L,KAAKomkB,gBAAgB34a,QAEN,CACrB+yX,EAAUzghB,KAAO,GACjB,MAIF,OADAC,KAAKqmkB,iBAAkB,EAAI7/F,EAAM+O,2BAC1BirC,EAAUp2C,OAAO,SAAUpqe,KAAKytJ,QAEzC,KAAK,GAUH,OATAztJ,KAAK6gjB,SAAWvqX,EAAMz0L,OAElB7B,KAAKumhB,YACPvmhB,KAAKumhB,WAAW,CACdz5X,OAAQ9sJ,KAAK6gjB,UAIjB3tZ,EAAS,IAAIsC,WAAW8gC,GAAOpjC,OACxBstX,EAAUp2C,OAAO,SAAU,CAChC1ue,MAAOw3J,EACP5yJ,MAAM,IAGV,KAAK,GACL,IAAK,MACH,OAAOkghB,EAAU7uO,UAGtB4uO,EAAUvghB,UAOf,OAJA,WACE,OAAO6hjB,EAAO55iB,MAAMjI,KAAM0D,YAhEvB,IAqEN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GAChBvrH,KAAKomkB,gBAMVpmkB,KAAKomkB,gBAAgB57f,QAAQ+gD,GAL3BvrH,KAAK6wa,OAAOtlT,KAOf,CACDjnH,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKgjgB,aAAez3Y,EAEpBvrH,KAAKqmkB,gBAAgBnnhB,YAEtB,CACD56C,IAAK,qBACL5I,MAAO,SAA4B0zhB,GACjC,IAAIhsa,EAASpjH,KAEbA,KAAKomkB,gBAAkBh3C,EACvBA,EAAez2e,GAAG,YAAY,WAC5ByqE,EAAOijd,gBAAgBnnhB,aAEzBkwe,EAAez2e,GAAG,OAAO,WACvBy2e,EAAe5kd,UACf44C,EAAOi+b,OAAQ,EAEfj+b,EAAOijd,gBAAgBnnhB,aAEzBkwe,EAAez2e,GAAG,SAAS,SAAU4yE,GACnCnI,EAAOytT,OAAOtlT,MAGZvrH,KAAKgjgB,cACPhjgB,KAAKomkB,gBAAgB57f,QAAQxqE,KAAKgjgB,kBAKjCujE,EAtI0B,GAyInC,SAASC,EAAqBjB,EAAWr0Q,GACvC,MAAO,CACLq8K,SAAUg4F,EAAUh4F,SACpB1mY,KAAM0+d,EAAU1+d,KAChB63Z,KAAM6mE,EAAUttX,SAChB+lT,KAAMunE,EAAUvnE,KAChBj0Y,KAAMw7c,EAAUx7c,KAChB1iB,OAAQ,MACR6pN,QAASA,GAIb,IAAI20Q,EAAuC,SAAUY,GACnD5uf,EAAUguf,EAAyBY,GAEnC,IAAIp7S,EAASrzM,EAAa6tf,GAE1B,SAASA,EAAwBl+Z,GAC/B,IAAIpkD,EAEJn2F,EAAgBptB,KAAM6lkB,GAItB,IAAIp9X,EAAiB,SAAwB1/E,GAC3C,GAA4B,MAAxBA,EAAS2/E,WAAoB,CAC/B,IAAIv6L,EAAQ,IAAIq4d,EAAMyM,oBAAoB,gBAAiB3ne,OAAOi4G,EAAO0id,KAAM,OAK/E,OAJA1id,EAAOy/Y,aAAe70f,OAEtBo1G,EAAO+id,mBAAmBnwf,OAAOhoE,GAKnCo1G,EAAO+id,mBAAmBpnhB,UAE1BqkE,EAAOmjd,mBAAmB39c,GAE1B,IAAI49c,EAAoB,SAA2Bn4jB,GACjD,OAAO+0G,EAAO6id,gBAAgBl1Q,QAAQ1iT,EAAK4qC,gBAGzCwthB,GAAwB,EAAI3B,EAAe4B,kCAAkC,CAC/EF,kBAAmBA,EACnBlB,OAAQ99Z,EAAO89Z,OACfpiD,eAAgB9/Z,EAAO4id,gBACvBjiD,aAAc3ga,EAAO2id,gBAEnBY,EAAqBF,EAAsBE,mBAC3CC,EAAkBH,EAAsBG,gBAE5Cxjd,EAAOs8b,kBAAoBinB,EAC3Bvjd,EAAOu8b,eAAiBinB,GAAmBxjd,EAAOu8b,eAClDv8b,EAAO+9b,WAAY,EAAI2jB,EAAe+B,2BAA2BL,IAmBnE,OAlDApjd,EAAS8nK,EAAOrqR,KAAKhB,KAAM2nK,IAkCpBs/Z,SAAW,KAEW,UAAzB1jd,EAAO0id,KAAK14F,SACdhqX,EAAO0jd,SAAW9B,EAAK5je,QAAQile,EAAqBjjd,EAAO0id,KAAMt+Z,EAAOw9W,aAAc18U,GAEtFllF,EAAO0jd,SAAW7B,EAAM7je,QAAQile,EAAqBjjd,EAAO0id,KAAMt+Z,EAAOw9W,aAAc18U,GAGzFllF,EAAO0jd,SAAStuhB,GAAG,SAAS,SAAU4yE,GACpChI,EAAOy/Y,aAAez3Y,EAEtBhI,EAAO+id,mBAAmBnwf,OAAOo1C,MAGnChI,EAAO0jd,SAASzqkB,MAET+mH,EAGT,OAAOsid,EA/DkC,CAgEzCG,GAEED,EAAwC,SAAUmB,GACpDrvf,EAAUkuf,EAA0BmB,GAEpC,IAAI38F,EAAUvyZ,EAAa+tf,GAE3B,SAASA,EAAyBp+Z,EAAQ5nJ,EAAOvjB,GAC/C,IAAIgrJ,EAOJ,IAAK,IAAIy6B,KALT70J,EAAgBptB,KAAM+lkB,IAEtBv+a,EAAS+iV,EAAQvpe,KAAKhB,KAAM2nK,IACrBw/Z,aAAe,GAEDx/Z,EAAOw9W,YAAa,CACvC,IAAIzphB,EAAQisK,EAAOw9W,YAAYljW,GAEV,qBAAVvmL,IAIX8rJ,EAAO2/a,aAAallZ,GAAYvmL,GAGlC8rJ,EAAO2/a,aAAarnjB,MAAQ,SAASxU,OAAOyU,EAAO,KAAKzU,OAAO9O,EAAM,GAErE,IAAIisM,EAAiB,SAAwB1/E,GAC3C,GAA4B,MAAxBA,EAAS2/E,WAMblhD,EAAOk/a,mBAAmB39c,OAN1B,CACE,IAAI56G,EAAQ,IAAIq4d,EAAMyM,oBAAoB,gBAAiB3ne,OAAOk8I,EAAOy+a,KAAM,OAC/Ez+a,EAAOw7W,aAAe70f,IAqB1B,OAdAq5I,EAAOy/a,SAAW,KAEW,UAAzBz/a,EAAOy+a,KAAK14F,SACd/lV,EAAOy/a,SAAW9B,EAAK5je,QAAQile,EAAqBh/a,EAAOy+a,KAAMz+a,EAAO2/a,cAAe1+X,GAEvFjhD,EAAOy/a,SAAW7B,EAAM7je,QAAQile,EAAqBh/a,EAAOy+a,KAAMz+a,EAAO2/a,cAAe1+X,GAG1FjhD,EAAOy/a,SAAStuhB,GAAG,SAAS,SAAU4yE,GACpCi8B,EAAOw7W,aAAez3Y,KAGxBi8B,EAAOy/a,SAASzqkB,MAETgrJ,EAGT,OAAOu+a,EApDmC,CAqD1CQ,GAEEX,EAAyC,SAAUwB,GACrDvvf,EAAU+tf,EAA2BwB,GAErC,IAAIv8F,EAAU7yZ,EAAa4tf,GAE3B,SAASA,EAA0Bj+Z,GACjC,IAAI9Z,EAEJzgI,EAAgBptB,KAAM4lkB,GAEtB/3a,EAASg9U,EAAQ7pe,KAAKhB,KAAM2nK,GAC5B,IAAI59C,EAAO8yC,mBAAmBhP,EAAOo4a,KAAKl8c,MAyB1C,OAvBIs7c,EAAatqhB,KAAK8yG,EAAOo4a,KAAK74c,QAChCrD,EAAOA,EAAKnxC,QAAQ,MAAO,KAG7Bssf,EAAGmC,MAAMt9c,GAAM,SAAU57G,EAAO27e,GAC9B,GAAI37e,EASF,MARmB,WAAfA,EAAM65F,OACR75F,EAAQ,IAAIq4d,EAAMyM,oBAAoB,gBAAiB3ne,OAAOy+G,EAAM,QAGtE8jC,EAAOm1W,aAAe70f,OAEtB0/I,EAAOy4a,mBAAmBnwf,OAAOhoE,GAKnC0/I,EAAOiyZ,eAAiBh2D,EAAK/tf,KAE7B8xJ,EAAO64a,mBAAmBxB,EAAGoC,iBAAiBv9c,IAE9C8jC,EAAOy4a,mBAAmBpnhB,aAErB2uG,EAGT,OAAO+3a,EAvCoC,CAwC3CI,GAEEF,EAA0C,SAAUyB,GACtD1vf,EAAUiuf,EAA4ByB,GAEtC,IAAIv8F,EAAUhzZ,EAAa8tf,GAE3B,SAASA,EAA2Bn+Z,EAAQ5nJ,EAAOvjB,GACjD,IAAI2zJ,EAEJ/iI,EAAgBptB,KAAM8lkB,GAEtB31a,EAAS66U,EAAQhqe,KAAKhB,KAAM2nK,GAC5B,IAAI59C,EAAO8yC,mBAAmB1M,EAAO81a,KAAKl8c,MAW1C,OATIs7c,EAAatqhB,KAAKo1G,EAAO81a,KAAK74c,QAChCrD,EAAOA,EAAKnxC,QAAQ,MAAO,KAG7Bu3E,EAAOu2a,mBAAmBxB,EAAGoC,iBAAiBv9c,EAAM,CAClDhqG,MAAOA,EACPvjB,IAAKA,EAAM,KAGN2zJ,EAGT,OAAO21a,EAzBqC,CA0B5CS,IAIK,SAAC7gG,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQqskB,0BAuER,SAAmC/he,EAAQjE,GACzC,OAAe,MAAXiE,GAA6B,IAAXA,GAAgBjE,EAAIk7F,WAAW,SAC5C,IAAI8pS,EAAMyM,oBAAoB,gBAAkBzxY,EAAM,MAGxD,IAAIglY,EAAM+L,4BAA4B,+BAA+Bjne,OAAOm6F,EAAQ,4BAA6Bn6F,OAAOk2F,EAAK,MAAQiE,IA3E9ItqG,EAAQ6rkB,0BAkDR,SAAmCL,GACjC,IAAIc,EAAqBd,EAAkB,uBAE3C,GAAIc,EAAoB,CACtB,IAAI/yQ,GAAW,EAAIgzQ,EAAqBC,yCAAyCF,GAEjF,GAAI/yQ,EAASnrT,SAAS,KACpB,IACEmrT,EAAW73J,mBAAmB63J,GAC9B,MAAOoc,IAGX,IAAI,EAAI0wM,EAAev5C,WAAWvzK,GAChC,OAAOA,EAIX,OAAO,MAlETv5T,EAAQ0rkB,iCASR,SAA0CxgiB,GACxC,IAAIsgiB,EAAoBtgiB,EAAKsgiB,kBACzBlB,EAASp/hB,EAAKo/hB,OACdpiD,EAAiBh9e,EAAKg9e,eACtBa,EAAe79e,EAAK69e,cACxB,EAAI19C,EAAMC,QAAQ48C,EAAiB,EAAG,6CACtC,IAAIukD,EAAe,CACjBd,oBAAoB,EACpBC,qBAAiBjrkB,GAEf+F,EAAS+5C,SAAS+qhB,EAAkB,kBAAmB,IAE3D,OAAKhlkB,OAAOC,UAAUC,IAItB+lkB,EAAab,gBAAkBllkB,EAE3BA,GAAU,EAAIwhhB,GAIda,IAAiBuhD,GAIsB,UAAvCkB,EAAkB,kBAME,cAFFA,EAAkB,qBAAuB,cAM/DiB,EAAad,oBAAqB,GAjBzBc,GANAA,GArBXzskB,EAAQ0skB,uBA4ER,SAAgCpie,GAC9B,OAAkB,MAAXA,GAA6B,MAAXA,GA3E3B,IAAI+gY,EAAQb,EAAoB,GAE5B+hG,EAAuB/hG,EAAoB,KAE3C67C,EAAiB77C,EAAoB,IA4ElC,SAACD,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQwskB,wCAgBR,SAAiDF,GAC/C,IAAIK,GAAqB,EACrB/nY,EAAMgoY,EAAc,cAAe,KAAKh8a,KAAK07a,GAEjD,GAAI1nY,EAAK,CAEP,IAAI20H,EAAWszQ,EADfjoY,EAAMA,EAAI,IAKV,OAAOkoY,EADPvzQ,EAAWwzQ,EADXxzQ,EAAWyzQ,EADXzzQ,EAAWv2H,SAASu2H,MAQtB,GAFA30H,EA6DA,SAAyBqoY,GAKvB,IAJA,IACI75hB,EADAqpJ,EAAU,GAEV/7L,EAAOkskB,EAAc,kCAAmC,MAEN,QAA9Cx5hB,EAAQ1yC,EAAKkwJ,KAAKq8a,KAAkC,CAC1D,IACIC,EAAUl1hB,EADD5E,EACwB,GACjCnoC,EAAIiikB,EAAQ,GACZC,EAAOD,EAAQ,GACfz/a,EAAOy/a,EAAQ,GAInB,IAFAjikB,EAAIw1C,SAASx1C,EAAG,OAEPwxL,GACP,GAAU,IAANxxL,EACF,WAMJwxL,EAAQxxL,GAAK,CAACkikB,EAAM1/a,GAKtB,IAFA,IAAIvE,EAAQ,GAEHkkb,EAAM,EAAGA,EAAM3wY,EAAQ/1L,QACxB0mkB,KAAO3wY,IAD2B2wY,EAAK,CAK7C,IAAIC,EAAcr1hB,EAAeykJ,EAAQ2wY,GAAM,GAC3CE,EAAQD,EAAY,GACpBE,EAAQF,EAAY,GAExBE,EAAQV,EAAeU,GAEnBD,IACFC,EAAQvqY,SAASuqY,GAEL,IAARH,IACFG,EAAQP,EAAcO,KAI1Brkb,EAAMj4I,KAAKs8jB,GAGb,OAAOrkb,EAAM5iI,KAAK,IA9GdknjB,CAAgBlB,GAKpB,OAAOQ,EAFSC,EAAcnoY,IAOhC,GAFAA,EAAMgoY,EAAc,WAAY,KAAKh8a,KAAK07a,GAEjC,CAGP,IAAImB,EAAaZ,EAFjBjoY,EAAMA,EAAI,IAKV,OAAOkoY,EADPW,EAAaV,EAAcU,IAI7B,SAASb,EAAcc,EAAkB55V,GACvC,OAAO,IAAIn0L,OAAO,cAAgB+thB,EAAhB,sDAAmH55V,GAGvI,SAAS65V,EAAWC,EAAUrtkB,GAC5B,GAAIqtkB,EAAU,CACZ,IAAK,iBAAiBhuhB,KAAKr/C,GACzB,OAAOA,EAGT,IACE,IAAIstkB,EAAU,IAAIC,YAAYF,EAAU,CACtCG,OAAO,IAELh2a,GAAS,EAAIszU,EAAM0D,eAAexue,GACtCA,EAAQstkB,EAAQ3ya,OAAOnD,GACvB40a,GAAqB,EACrB,MAAO1/jB,GACP,GAAI,YAAY2yC,KAAKguhB,GACnB,IACErtkB,EAAQmhK,mBAAmB7Z,OAAOtnJ,IAClCoskB,GAAqB,EACrB,MAAO12hB,MAKf,OAAO11C,EAGT,SAASuskB,EAAcvskB,GASrB,OARIoskB,GAAsB,cAAc/shB,KAAKr/C,KAC3CA,EAAQotkB,EAAW,QAASptkB,GAExBoskB,IACFpskB,EAAQotkB,EAAW,aAAcptkB,KAI9BA,EAuDT,SAASsskB,EAAetskB,GACtB,GAAIA,EAAMghM,WAAW,KAAM,CAGzB,IAFA,IAAIr4C,EAAQ3oJ,EAAMoU,MAAM,GAAGivC,MAAM,OAExB/7C,EAAI,EAAGA,EAAIqhJ,EAAMxiJ,SAAUmB,EAAG,CACrC,IAAImmkB,EAAY9kb,EAAMrhJ,GAAGwd,QAAQ,MAEd,IAAf2ojB,IACF9kb,EAAMrhJ,GAAKqhJ,EAAMrhJ,GAAG8M,MAAM,EAAGq5jB,GAC7B9kb,EAAMxiJ,OAASmB,EAAI,GAGrBqhJ,EAAMrhJ,GAAKqhJ,EAAMrhJ,GAAG41E,QAAQ,SAAU,MAGxCl9E,EAAQ2oJ,EAAM5iI,KAAK,KAGrB,OAAO/lB,EAGT,SAASyskB,EAAciB,GACrB,IAAIC,EAAcD,EAAS5ojB,QAAQ,KAEnC,OAAqB,IAAjB6ojB,EACKD,EAMFN,EAHQM,EAASt5jB,MAAM,EAAGu5jB,GACjBD,EAASt5jB,MAAMu5jB,EAAc,GACvBzwf,QAAQ,UAAW,KAI3C,SAASsvf,EAAcxskB,GACrB,OAAKA,EAAMghM,WAAW,OAAS,uBAAuB3hJ,KAAKr/C,GAClDA,EAGFA,EAAMk9E,QAAQ,kDAAkD,SAAUg/G,EAAS0xY,EAASP,EAAUl9c,GAC3G,GAAiB,MAAbk9c,GAAiC,MAAbA,EAKtB,OAAOD,EAAWQ,EAHlBz9c,GADAA,EAAOA,EAAKjzC,QAAQ,KAAM,MACdA,QAAQ,sBAAsB,SAAUrqC,EAAOg7hB,GACzD,OAAO16jB,OAAO6tJ,aAAa9gH,SAAS2thB,EAAK,SAK7C,IACE19c,EAAOwnF,KAAKxnF,GACZ,MAAOzjH,IAET,OAAO0gkB,EAAWQ,EAASz9c,MAI/B,MAAO,IApMT,IAAI26W,EAAQb,EAAoB,GAEhC,SAASxyb,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAAe,GAAU,MAAN2mE,EAAJ,CAAwB,IAAkDw9Z,EAAI52O,EAAlD62O,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAmB,IAAM,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAApK,QAAqL,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,GARzbE,CAAsBtke,EAAK7K,IAI5F,SAAqCmD,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAJ3ME,CAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAMzI,SAASzJ,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,IAiMzK,SAAC0iP,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQqukB,sBAAmB,EAE3B,IAMgC1ikB,EAN5B0he,GAM4B1he,EANU6+d,EAAoB,KAMT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAJrF0/d,EAAQb,EAAoB,GAE5Bs/F,EAAiBt/F,EAAoB,KAIzC,SAAS5oR,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASm/P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAiBzM,IAAIm8iB,EAA8B,WAChC,SAASA,EAAejoe,GACtB,IAAIx2E,EAAOtnB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE/E0pB,EAAgBptB,KAAMypkB,GAEtBzpkB,KAAKwhG,IAAMA,EACXxhG,KAAKylkB,OAAS,YAAY1qhB,KAAKymD,GAC/BxhG,KAAKmlhB,YAAcnlhB,KAAKylkB,QAAUz6iB,EAAKm6f,aAAe/mhB,OAAOC,OAAO,MACpE2B,KAAKolhB,gBAAkBp6f,EAAKo6f,kBAAmB,EAE/CplhB,KAAK0pkB,OAAS1+iB,EAAK0+iB,QAAU,WAC3B,OAAO,IAAIn1X,gBAGbv0M,KAAK2pkB,UAAY,EACjB3pkB,KAAK4pkB,gBAAkBxrkB,OAAOC,OAAO,MAkKvC,OA/JAo5C,EAAagyhB,EAAgB,CAAC,CAC5BnlkB,IAAK,eACL5I,MAAO,SAAsBa,EAAOC,EAAKyoC,GACvC,IAAIja,EAAO,CACTzuB,MAAOA,EACPC,IAAKA,GAGP,IAAK,IAAIqmJ,KAAQ59G,EACfja,EAAK63H,GAAQ59G,EAAU49G,GAGzB,OAAO7iJ,KAAKuhG,QAAQv2E,KAErB,CACD1mB,IAAK,cACL5I,MAAO,SAAqBupC,GAC1B,OAAOjlC,KAAKuhG,QAAQt8D,KAErB,CACD3gC,IAAK,UACL5I,MAAO,SAAiBsvB,GACtB,IAAIwpL,EAAMx0M,KAAK0pkB,SACXG,EAAQ7pkB,KAAK2pkB,YACbG,EAAiB9pkB,KAAK4pkB,gBAAgBC,GAAS,CACjDr1X,IAAKA,GAKP,IAAK,IAAIvyB,KAHTuyB,EAAI7pG,KAAK,MAAO3qG,KAAKwhG,KACrBgzG,EAAI4wU,gBAAkBplhB,KAAKolhB,gBAENplhB,KAAKmlhB,YAAa,CACrC,IAAIzphB,EAAQsE,KAAKmlhB,YAAYljW,GAER,qBAAVvmL,GAIX84M,EAAIO,iBAAiB9yB,EAAUvmL,GAyBjC,OAtBIsE,KAAKylkB,QAAU,UAAWz6iB,GAAQ,QAASA,GAC7CwpL,EAAIO,iBAAiB,QAAS,SAASzpM,OAAO0f,EAAKzuB,MAAO,KAAK+O,OAAO0f,EAAKxuB,IAAM,IACjFstkB,EAAeC,eA1EQ,KA4EvBD,EAAeC,eA7EL,IAgFZv1X,EAAI61R,aAAe,cAEfr/c,EAAKg/iB,UACPx1X,EAAI+zR,QAAU,SAAUn3W,GACtBpmG,EAAKg/iB,QAAQx1X,EAAI/uG,UAIrB+uG,EAAIC,mBAAqBz0M,KAAK6lC,cAAc/jB,KAAK9hB,KAAM6pkB,GACvDr1X,EAAIy1X,WAAajqkB,KAAKumhB,WAAWzkgB,KAAK9hB,KAAM6pkB,GAC5CC,EAAeI,kBAAoBl/iB,EAAKk/iB,kBACxCJ,EAAeK,OAASn/iB,EAAKm/iB,OAC7BL,EAAeE,QAAUh/iB,EAAKg/iB,QAC9BF,EAAevjD,WAAav7f,EAAKu7f,WACjC/xU,EAAIjuD,KAAK,MACFsjb,IAER,CACDvlkB,IAAK,aACL5I,MAAO,SAAoBmukB,EAAOz4c,GAChC,IAAIg5c,EAEAN,EAAiB9pkB,KAAK4pkB,gBAAgBC,GAErCC,IAImD,QAAvDM,EAAwBN,EAAevjD,kBAAkD,IAA1B6jD,GAA4CA,EAAsBppkB,KAAK8okB,EAAgB14c,MAExJ,CACD9sH,IAAK,gBACL5I,MAAO,SAAuBmukB,EAAOz4c,GACnC,IAAI04c,EAAiB9pkB,KAAK4pkB,gBAAgBC,GAE1C,GAAKC,EAAL,CAIA,IAAIt1X,EAAMs1X,EAAet1X,IAOzB,GALIA,EAAIE,YAAc,GAAKo1X,EAAeI,oBACxCJ,EAAeI,2BACRJ,EAAeI,mBAGD,IAAnB11X,EAAIE,YAIFm1X,KAAS7pkB,KAAK4pkB,gBAMpB,UAFO5pkB,KAAK4pkB,gBAAgBC,GAET,IAAfr1X,EAAI/uG,QAAgBzlG,KAAKylkB,OAA7B,CACE,IAAI4E,EAEiD,QAApDA,EAAwBP,EAAeE,eAA+C,IAA1BK,GAA4CA,EAAsBrpkB,KAAK8okB,EAAgBt1X,EAAI/uG,YAH1J,CAOA,IAAI6ke,EAAY91X,EAAI/uG,QA/IR,IAkJZ,GAlJY,MAgJuB6ke,GA/IV,MA+IuCR,EAAeC,gBAE1CO,IAAcR,EAAeC,eAAlE,CAOA,IAAIzzY,EAtJV,SAAwBke,GACtB,IAAIx5J,EAAOw5J,EAAIzrF,SAEf,MAAoB,kBAAT/tE,EACFA,GAGG,EAAIwrb,EAAM0D,eAAelvb,GACxBk4G,OA8IGq3a,CAAe/1X,GAE3B,GA1JyB,MA0JrB81X,EAAwC,CAC1C,IAAIE,EAAch2X,EAAImyX,kBAAkB,iBACpC/uY,EAAU,2BAA2B7rC,KAAKy+a,GAC9CV,EAAeK,OAAO,CACpB5tkB,MAAOq/C,SAASg8I,EAAQ,GAAI,IAC5BtB,MAAOA,SAEJ,GAAIA,EACTwzY,EAAeK,OAAO,CACpB5tkB,MAAO,EACP+5L,MAAOA,QAEJ,CACL,IAAIm0Y,EAEkD,QAArDA,EAAyBX,EAAeE,eAAgD,IAA3BS,GAA6CA,EAAuBzpkB,KAAK8okB,EAAgBt1X,EAAI/uG,aAxB7J,CACE,IAAIile,EAEkD,QAArDA,EAAyBZ,EAAeE,eAAgD,IAA3BU,GAA6CA,EAAuB1pkB,KAAK8okB,EAAgBt1X,EAAI/uG,aAwB9J,CACDnhG,IAAK,gBACL5I,MAAO,SAAuBmukB,GAC5B,OAAO7pkB,KAAK4pkB,gBAAgBC,GAAOr1X,MAEpC,CACDlwM,IAAK,mBACL5I,MAAO,SAA0BmukB,GAC/B,OAAOA,KAAS7pkB,KAAK4pkB,kBAEtB,CACDtlkB,IAAK,eACL5I,MAAO,SAAsBmukB,GAC3B,IAAIr1X,EAAMx0M,KAAK4pkB,gBAAgBC,GAAOr1X,WAC/Bx0M,KAAK4pkB,gBAAgBC,GAC5Br1X,EAAIqnE,YAID4tT,EAlLyB,GAqL9BD,EAAgC,WAClC,SAASA,EAAiBv8iB,GACxBG,EAAgBptB,KAAMwpkB,GAEtBxpkB,KAAK2qkB,QAAU19iB,EACfjtB,KAAK4qkB,SAAW,IAAInB,EAAex8iB,EAAOu0E,IAAK,CAC7C2jb,YAAal4f,EAAOk4f,YACpBC,gBAAiBn4f,EAAOm4f,kBAE1BplhB,KAAKmmkB,gBAAkBl5iB,EAAOo2f,eAC9BrjhB,KAAK+/iB,mBAAqB,KAC1B//iB,KAAK2lkB,qBAAuB,GAoD9B,OAjDAluhB,EAAa+xhB,EAAkB,CAAC,CAC9BllkB,IAAK,8BACL5I,MAAO,SAAqC+mgB,GAC1C,IAAIz/f,EAAIhD,KAAK2lkB,qBAAqBnljB,QAAQiif,GAEtCz/f,GAAK,GACPhD,KAAK2lkB,qBAAqBv2jB,OAAOpM,EAAG,KAGvC,CACDsB,IAAK,gBACL5I,MAAO,WAGL,OAFA,EAAI8qe,EAAMC,SAASzme,KAAK+/iB,mBAAoB,2DAC5C//iB,KAAK+/iB,mBAAqB,IAAI8qB,EAAkC7qkB,KAAK4qkB,SAAU5qkB,KAAK2qkB,SAC7E3qkB,KAAK+/iB,qBAEb,CACDz7iB,IAAK,iBACL5I,MAAO,SAAwBa,EAAOC,GACpC,IAAIimgB,EAAS,IAAIqoE,EAAmC9qkB,KAAK4qkB,SAAUrukB,EAAOC,GAK1E,OAJAimgB,EAAOsoE,SAAW/qkB,KAAKgrkB,4BAA4BlpjB,KAAK9hB,MAExDA,KAAK2lkB,qBAAqBv5jB,KAAKq2f,GAExBA,IAER,CACDn+f,IAAK,oBACL5I,MAAO,SAA2B6vH,GAChC,IAAIo1b,EAEkD,QAArDA,EAAwB3gjB,KAAK+/iB,0BAA0D,IAA1BY,GAA4CA,EAAsB90hB,OAAO0/F,GAEvI,IACIprG,EADA+sd,EAAYjyO,EAA2Bj7P,KAAK2lkB,qBAAqB71jB,MAAM,IAG3E,IACE,IAAKo9d,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAC9B6f,EAAMzkB,MACZmwB,OAAO0/F,GAEhB,MAAOn6E,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,SAKT8yf,EA/D2B,GAkEpCrukB,EAAQqukB,iBAAmBA,EAE3B,IAAIqB,EAAiD,WACnD,SAASA,EAAkCI,EAASh+iB,GAClDG,EAAgBptB,KAAM6qkB,GAEtB7qkB,KAAK4qkB,SAAWK,EAChB,IAAIjgjB,EAAO,CACTk/iB,kBAAmBlqkB,KAAKkrkB,mBAAmBppjB,KAAK9hB,MAChDmqkB,OAAQnqkB,KAAKmrkB,QAAQrpjB,KAAK9hB,MAC1BgqkB,QAAShqkB,KAAKorkB,SAAStpjB,KAAK9hB,MAC5BumhB,WAAYvmhB,KAAKogjB,YAAYt+hB,KAAK9hB,OAEpCA,KAAKimkB,KAAOh5iB,EAAOu0E,IACnBxhG,KAAKqrkB,eAAiBJ,EAAQK,YAAYtgjB,GAC1ChrB,KAAKurkB,4BAA6B,EAAI/kG,EAAM+O,2BAC5Cv1e,KAAKkmkB,cAAgBj5iB,EAAOi3f,eAAgB,EAC5ClkhB,KAAK8/iB,eAAiB7yhB,EAAOprB,OAC7B7B,KAAKmmkB,gBAAkBl5iB,EAAOo2f,eAEzBrjhB,KAAKmmkB,iBAAoBnmkB,KAAKkmkB,gBACjClmkB,KAAKkmkB,eAAgB,GAGvBlmkB,KAAK4/iB,uBAAwB,EAC7B5/iB,KAAK6/iB,mBAAoB,EACzB7/iB,KAAKwrkB,cAAgB,GACrBxrkB,KAAKuhjB,UAAY,GACjBvhjB,KAAKqhjB,OAAQ,EACbrhjB,KAAKgjgB,kBAAelngB,EACpBkE,KAAKshjB,UAAY,KACjBthjB,KAAKumhB,WAAa,KAuOpB,OApOA9ue,EAAaozhB,EAAmC,CAAC,CAC/CvmkB,IAAK,qBACL5I,MAAO,WACL,IAAI+vkB,EAAmBzrkB,KAAKqrkB,eAExBK,EAAiB1rkB,KAAK4qkB,SAASe,cAAcF,GAE7C9E,EAAoB,SAA2Bn4jB,GACjD,OAAOk9jB,EAAe/E,kBAAkBn4jB,IAGtCo4jB,GAAwB,EAAI3B,EAAe4B,kCAAkC,CAC/EF,kBAAmBA,EACnBlB,OAAQzlkB,KAAK4qkB,SAASnF,OACtBpiD,eAAgBrjhB,KAAKmmkB,gBACrBjiD,aAAclkhB,KAAKkmkB,gBAEjBY,EAAqBF,EAAsBE,mBAC3CC,EAAkBH,EAAsBG,gBAExCD,IACF9mkB,KAAK6/iB,mBAAoB,GAG3B7/iB,KAAK8/iB,eAAiBinB,GAAmB/mkB,KAAK8/iB,eAC9C9/iB,KAAKshjB,WAAY,EAAI2jB,EAAe+B,2BAA2BL,GAE3D3mkB,KAAK6/iB,mBACP7/iB,KAAK4qkB,SAASp5D,aAAai6D,GAG7BzrkB,KAAKurkB,2BAA2BrshB,YAEjC,CACD56C,IAAK,UACL5I,MAAO,SAAiBs/C,GAgBtB,GAfIA,IACEh7C,KAAKuhjB,UAAU1/iB,OAAS,EACF7B,KAAKuhjB,UAAUztiB,QAErBorC,QAAQ,CACxBxjD,MAAOs/C,EAAKs7I,MACZh2L,MAAM,IAGRN,KAAKwrkB,cAAcp/jB,KAAK4uC,EAAKs7I,QAIjCt2L,KAAKqhjB,OAAQ,IAETrhjB,KAAKwrkB,cAAc3pkB,OAAS,GAAhC,CAIA,IACIsre,EADAC,EAAanyO,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKn0E,EAAW5/d,MAAO2/d,EAASC,EAAWhne,KAAK9F,MACrB6se,EAAOzxe,MAEbwjD,QAAQ,CACzBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACPg8b,EAAWhle,EAAEgpC,GAVf,QAYEg8b,EAAW12Z,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,KAEzB,CACDyC,IAAK,WACL5I,MAAO,SAAkB+pG,GACvBzlG,KAAKgjgB,cAAe,EAAIiiE,EAAeuC,2BAA2B/he,EAAQzlG,KAAKimkB,MAE/EjmkB,KAAKurkB,2BAA2Bp1f,OAAOn2E,KAAKgjgB,cAE5C,IACIgkB,EADAC,EAAahsR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKt6B,EAAWz5gB,MAAOw5gB,EAASC,EAAW7ghB,KAAK9F,MACtB0mhB,EAAOtrhB,MACby6E,OAAOn2E,KAAKgjgB,cAEhC,MAAO5xd,GACP61e,EAAW7+gB,EAAEgpC,GANf,QAQE61e,EAAWvwc,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EACxB7B,KAAKwrkB,cAAc3pkB,OAAS,IAE7B,CACDyC,IAAK,cACL5I,MAAO,SAAqB01H,GAC1B,IAAIw6c,EAEqC,QAAxCA,EAAmB5rkB,KAAKumhB,kBAA6C,IAArBqlD,GAAuCA,EAAiB5qkB,KAAKhB,KAAM,CAClH8sJ,OAAQ17B,EAAI07B,OACZqtG,MAAO/oI,EAAIy6c,iBAAmBz6c,EAAI+oI,MAAQn6P,KAAK8/iB,mBAGlD,CACDx7iB,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAKshjB,YAEb,CACDh9iB,IAAK,mBACLP,IAAK,WACH,OAAO/D,KAAK6/iB,oBAEb,CACDv7iB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAK4/iB,wBAEb,CACDt7iB,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAK8/iB,iBAEb,CACDx7iB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKurkB,2BAA2Bvpb,UAExC,CACD19I,IAAK,OACL5I,MAAO,WACL,IAAI+ljB,EAAQrkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,IAChF,IAAInzS,EAAOorX,EACX,OAAOl5E,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EACH,IAAKC,KAAKgjgB,aAAc,CACtBp5B,EAAS7pe,KAAO,EAChB,MAGF,MAAMC,KAAKgjgB,aAEb,KAAK,EACH,KAAMhjgB,KAAKwrkB,cAAc3pkB,OAAS,GAAI,CACpC+ne,EAAS7pe,KAAO,EAChB,MAIF,OADAu2L,EAAQt2L,KAAKwrkB,cAAc13jB,QACpB81d,EAASQ,OAAO,SAAU,CAC/B1ue,MAAO46L,EACPh2L,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKqhjB,MAAO,CACfz3E,EAAS7pe,KAAO,EAChB,MAGF,OAAO6pe,EAASQ,OAAO,SAAU,CAC/B1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EAKH,OAJAohjB,GAAoB,EAAIl7E,EAAM+O,2BAE9Bv1e,KAAKuhjB,UAAUn1iB,KAAKs1iB,GAEb93E,EAASQ,OAAO,SAAUs3E,EAAkB1/Z,SAErD,KAAK,GACL,IAAK,MACH,OAAO4nV,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,WACE,OAAOyhjB,EAAMx5iB,MAAMjI,KAAM0D,YArDtB,IA0DN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKqhjB,OAAQ,EAEbrhjB,KAAKurkB,2BAA2Bp1f,OAAOo1C,GAEvC,IACI27Z,EADAC,EAAalsR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKp6B,EAAW35gB,MAAO05gB,EAASC,EAAW/ghB,KAAK9F,MACtB4mhB,EAAOxrhB,MACbwjD,QAAQ,CACxBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP+1e,EAAW/+gB,EAAEgpC,GATf,QAWE+1e,EAAWzwc,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EAEpB7B,KAAK4qkB,SAASkB,iBAAiB9rkB,KAAKqrkB,iBACtCrrkB,KAAK4qkB,SAASp5D,aAAaxxgB,KAAKqrkB,gBAGlCrrkB,KAAK+/iB,mBAAqB,SAIvB8qB,EApQ4C,GAuQjDC,EAAkD,WACpD,SAASA,EAAmCG,EAAS1ukB,EAAOC,GAC1D4wB,EAAgBptB,KAAM8qkB,GAEtB9qkB,KAAK4qkB,SAAWK,EAChB,IAAIjgjB,EAAO,CACTm/iB,OAAQnqkB,KAAKmrkB,QAAQrpjB,KAAK9hB,MAC1BgqkB,QAAShqkB,KAAKorkB,SAAStpjB,KAAK9hB,MAC5BumhB,WAAYvmhB,KAAKogjB,YAAYt+hB,KAAK9hB,OAEpCA,KAAKimkB,KAAOgF,EAAQzpe,IACpBxhG,KAAK+rkB,WAAad,EAAQe,aAAazvkB,EAAOC,EAAKwuB,GACnDhrB,KAAKuhjB,UAAY,GACjBvhjB,KAAK2hjB,aAAe,KACpB3hjB,KAAKqhjB,OAAQ,EACbrhjB,KAAKgjgB,kBAAelngB,EACpBkE,KAAKumhB,WAAa,KAClBvmhB,KAAK+qkB,SAAW,KAqLlB,OAlLAtzhB,EAAaqzhB,EAAoC,CAAC,CAChDxmkB,IAAK,SACL5I,MAAO,WACL,IAAIuwkB,EAEiC,QAApCA,EAAiBjskB,KAAK+qkB,gBAAyC,IAAnBkB,GAAqCA,EAAejrkB,KAAKhB,KAAMA,QAE7G,CACDsE,IAAK,UACL5I,MAAO,SAAiBs/C,GACtB,IAAIs7I,EAAQt7I,EAAKs7I,MAEbt2L,KAAKuhjB,UAAU1/iB,OAAS,EACF7B,KAAKuhjB,UAAUztiB,QAErBorC,QAAQ,CACxBxjD,MAAO46L,EACPh2L,MAAM,IAGRN,KAAK2hjB,aAAerrX,EAGtBt2L,KAAKqhjB,OAAQ,EAEb,IACIv2B,EADAC,EAAa9vR,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKx2B,EAAWv9gB,MAAOs9gB,EAASC,EAAW3khB,KAAK9F,MACpBwqhB,EAAOpvhB,MAEbwjD,QAAQ,CAC1BxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP25e,EAAW3ihB,EAAEgpC,GAVf,QAYE25e,EAAWr0c,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EAExB7B,KAAKkskB,WAEN,CACD5nkB,IAAK,WACL5I,MAAO,SAAkB+pG,GACvBzlG,KAAKgjgB,cAAe,EAAIiiE,EAAeuC,2BAA2B/he,EAAQzlG,KAAKimkB,MAE/E,IACIt2C,EADAE,EAAa50R,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAK1xB,EAAWrihB,MAAOmihB,EAASE,EAAWzphB,KAAK9F,MACtBqvhB,EAAOj0hB,MACby6E,OAAOn2E,KAAKgjgB,cAEhC,MAAO5xd,GACPy+e,EAAWznhB,EAAEgpC,GANf,QAQEy+e,EAAWn5c,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EACxB7B,KAAK2hjB,aAAe,OAErB,CACDr9iB,IAAK,cACL5I,MAAO,SAAqB01H,GAExB,IAAI+6c,EADDnskB,KAAKm3hB,sBAGkC,QAAzCg1C,EAAoBnskB,KAAKumhB,kBAA8C,IAAtB4lD,GAAwCA,EAAkBnrkB,KAAKhB,KAAM,CACrH8sJ,OAAQ17B,EAAI07B,WAIjB,CACDxoJ,IAAK,uBACLP,IAAK,WACH,OAAO,IAER,CACDO,IAAK,OACL5I,MAAO,WACL,IAAImmjB,EAASzkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAAS+2C,IACjF,IAAIjqV,EAAOorX,EACX,OAAOl5E,EAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EACH,IAAKC,KAAKgjgB,aAAc,CACtBwd,EAAUzghB,KAAO,EACjB,MAGF,MAAMC,KAAKgjgB,aAEb,KAAK,EACH,GAA4B,OAAtBhjgB,KAAK2hjB,aAAwB,CACjCnhC,EAAUzghB,KAAO,EACjB,MAKF,OAFAu2L,EAAQt2L,KAAK2hjB,aACb3hjB,KAAK2hjB,aAAe,KACbnhC,EAAUp2C,OAAO,SAAU,CAChC1ue,MAAO46L,EACPh2L,MAAM,IAGV,KAAK,EACH,IAAKN,KAAKqhjB,MAAO,CACf7gC,EAAUzghB,KAAO,EACjB,MAGF,OAAOyghB,EAAUp2C,OAAO,SAAU,CAChC1ue,WAAOI,EACPwE,MAAM,IAGV,KAAK,EAKH,OAJAohjB,GAAoB,EAAIl7E,EAAM+O,2BAE9Bv1e,KAAKuhjB,UAAUn1iB,KAAKs1iB,GAEblhC,EAAUp2C,OAAO,SAAUs3E,EAAkB1/Z,SAEtD,KAAK,GACL,IAAK,MACH,OAAOw+X,EAAU7uO,UAGtB4uO,EAAUvghB,UAOf,OAJA,WACE,OAAO6hjB,EAAO55iB,MAAMjI,KAAM0D,YAtDvB,IA2DN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACrBvrH,KAAKqhjB,OAAQ,EAEb,IACIvxB,EADAC,EAAa90R,EAA2Bj7P,KAAKuhjB,WAGjD,IACE,IAAKxxB,EAAWvihB,MAAOsihB,EAASC,EAAW3phB,KAAK9F,MACtBwvhB,EAAOp0hB,MACbwjD,QAAQ,CACxBxjD,WAAOI,EACPwE,MAAM,IAGV,MAAO8wC,GACP2+e,EAAW3nhB,EAAEgpC,GATf,QAWE2+e,EAAWr5c,IAGb12E,KAAKuhjB,UAAU1/iB,OAAS,EAEpB7B,KAAK4qkB,SAASkB,iBAAiB9rkB,KAAK+rkB,aACtC/rkB,KAAK4qkB,SAASp5D,aAAaxxgB,KAAK+rkB,YAGlC/rkB,KAAKkskB,aAIFpB,EAtM6C,IA2M/C,SAACplG,EAAyBvqe,EAASwqe,GAE1C,aAGAvne,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAETP,EAAQixkB,oBAAiB,EAEzB,IAMgCtlkB,EAN5B0he,GAM4B1he,EANU6+d,EAAoB,KAMT7+d,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAJrF0/d,EAAQb,EAAoB,GAE5Bs/F,EAAiBt/F,EAAoB,KAIzC,SAAS5oR,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ54M,EAAKomB,GAAO,IAAM,IAAIyyL,EAAOH,EAAI14M,GAAKomB,GAAUhvB,EAAQyhN,EAAKzhN,MAAS,MAAOyS,GAAwB,YAAfgoE,EAAOhoE,GAAsBgvM,EAAK78M,KAAQ4+C,EAAQxjD,GAAiBujD,QAAQC,QAAQxjD,GAAO66E,KAAK0mI,EAAOC,GAE7P,SAASE,EAAkBv6M,GAAM,OAAO,WAAc,IAAIusK,EAAOpvK,KAAMgrB,EAAOtnB,UAAW,OAAO,IAAIu7C,SAAQ,SAAUC,EAASi3B,GAAU,IAAI6mI,EAAMn6M,EAAGoF,MAAMmnK,EAAMpkJ,GAAO,SAASiyL,EAAMvhN,GAASqhN,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,OAAQxhN,GAAU,SAASwhN,EAAO9rK,GAAO2rK,EAAmBC,EAAK99J,EAASi3B,EAAQ8mI,EAAOC,EAAQ,QAAS9rK,GAAQ6rK,OAAMnhN,OAEjX,SAASm/P,EAA2B90P,EAAG+0P,GAAkB,IAAIz5F,EAAuB,qBAAX/hK,QAA0ByG,EAAEzG,OAAOC,WAAawG,EAAE,cAAe,IAAKs7J,EAAI,CAAE,GAAIhgK,MAAMC,QAAQyE,KAAOs7J,EAE9K,SAAqCt7J,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAF1HE,CAA4Bzie,KAAO+0P,GAAkB/0P,GAAyB,kBAAbA,EAAEtE,OAAqB,CAAM4/J,IAAIt7J,EAAIs7J,GAAI,IAAIz+J,EAAI,EAAOm4P,EAAI,aAAiB,MAAO,CAAE3tP,EAAG2tP,EAAG/0P,EAAG,WAAe,OAAIpD,GAAKmD,EAAEtE,OAAe,CAAEvB,MAAM,GAAe,CAAEA,MAAM,EAAO5E,MAAOyK,EAAEnD,OAAWoF,EAAG,SAAWgzP,GAAM,MAAMA,GAAO1kL,EAAGykL,GAAO,MAAM,IAAI94P,UAAU,yIAA4I,IAA6C+uC,EAAzCiqN,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAE9tP,EAAG,WAAei0J,EAAKA,EAAGzgK,KAAKmF,IAAOC,EAAG,WAAe,IAAIxB,EAAO68J,EAAG1hK,OAAsC,OAA9Bs7P,EAAmBz2P,EAAKtE,KAAasE,GAASwD,EAAG,SAAWmzP,GAAOD,GAAS,EAAMlqN,EAAMmqN,GAAQ7kL,EAAG,WAAe,IAAW2kL,GAAoC,MAAhB55F,EAAE,QAAoBA,EAAE,SAAvD,QAAiF,GAAI65F,EAAQ,MAAMlqN,KAI/9B,SAASu3b,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAEhL,SAAS51N,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAEhH,SAASq2G,EAAkB1rF,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAE7S,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAAmJ,OAAhID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GAAiBC,GAAaH,EAAkBprF,EAAaurF,GAAqBvrF,EAIzM,SAAS++iB,EAAmBn7Q,EAASk0N,EAAiBknD,GACpD,MAAO,CACLjle,OAAQ,MACR6pN,QAASA,EACTt1C,OAA4B,OAApB0wT,QAAgD,IAApBA,OAA6B,EAASA,EAAgB1wT,OAC1F5gJ,KAAM,OACNuxc,YAAannD,EAAkB,UAAY,cAC3ChqI,SAAU,UAId,SAASoxL,EAAcrnD,GACrB,IAAIj0N,EAAU,IAAIu7Q,QAElB,IAAK,IAAIxqZ,KAAYkjW,EAAa,CAChC,IAAIzphB,EAAQyphB,EAAYljW,GAEH,qBAAVvmL,GAIXw1T,EAAQzhK,OAAOwyB,EAAUvmL,GAG3B,OAAOw1T,EAGT,IAAIk7Q,EAA8B,WAChC,SAASA,EAAen/iB,GACtBG,EAAgBptB,KAAMoskB,GAEtBpskB,KAAKitB,OAASA,EACdjtB,KAAKylkB,OAAS,YAAY1qhB,KAAK9tB,EAAOu0E,KACtCxhG,KAAKmlhB,YAAcnlhB,KAAKylkB,QAAUx4iB,EAAOk4f,aAAe,GACxDnlhB,KAAK+/iB,mBAAqB,KAC1B//iB,KAAK2lkB,qBAAuB,GAqD9B,OAlDAluhB,EAAa20hB,EAAgB,CAAC,CAC5B9nkB,IAAK,yBACLP,IAAK,WACH,IAAI48iB,EAAuBC,EAE3B,OAAgL,QAAxKD,EAA+E,QAAtDC,EAAyB5gjB,KAAK+/iB,0BAA2D,IAA3Ba,OAAoC,EAASA,EAAuBC,eAA+C,IAA1BF,EAAmCA,EAAwB,IAEpP,CACDr8iB,IAAK,gBACL5I,MAAO,WAGL,OAFA,EAAI8qe,EAAMC,SAASzme,KAAK+/iB,mBAAoB,yDAC5C//iB,KAAK+/iB,mBAAqB,IAAI2sB,EAAqB1skB,MAC5CA,KAAK+/iB,qBAEb,CACDz7iB,IAAK,iBACL5I,MAAO,SAAwBa,EAAOC,GACpC,GAAIA,GAAOwD,KAAKihjB,uBACd,OAAO,KAGT,IAAIx+C,EAAS,IAAIkqE,EAA0B3skB,KAAMzD,EAAOC,GAIxD,OAFAwD,KAAK2lkB,qBAAqBv5jB,KAAKq2f,GAExBA,IAER,CACDn+f,IAAK,oBACL5I,MAAO,SAA2B6vH,GAC5BvrH,KAAK+/iB,oBACP//iB,KAAK+/iB,mBAAmBl0hB,OAAO0/F,GAGjC,IACIprG,EADA+sd,EAAYjyO,EAA2Bj7P,KAAK2lkB,qBAAqB71jB,MAAM,IAG3E,IACE,IAAKo9d,EAAU1/d,MAAO2S,EAAQ+sd,EAAU9me,KAAK9F,MAC9B6f,EAAMzkB,MACZmwB,OAAO0/F,GAEhB,MAAOn6E,GACP87b,EAAU9ke,EAAEgpC,GANd,QAQE87b,EAAUx2Z,SAKT01f,EA7DyB,GAgElCjxkB,EAAQixkB,eAAiBA,EAEzB,IAAIM,EAAoC,WACtC,SAASA,EAAqB/ka,GAC5B,IAAIhwH,EAAQ33C,KAEZotB,EAAgBptB,KAAM0skB,GAEtB1skB,KAAKohjB,QAAUz5Y,EACf3nK,KAAK2igB,QAAU,KACf3igB,KAAK6gjB,QAAU,EACf7gjB,KAAKshjB,UAAY,KACjB,IAAIr0hB,EAAS06I,EAAO16I,OACpBjtB,KAAK4skB,iBAAmB3/iB,EAAOm4f,kBAAmB,EAClDplhB,KAAK8/iB,eAAiB7yhB,EAAOprB,OAC7B7B,KAAKsmkB,oBAAqB,EAAI9/F,EAAM+O,2BACpCv1e,KAAKkmkB,cAAgBj5iB,EAAOi3f,eAAgB,EAC5ClkhB,KAAKmmkB,gBAAkBl5iB,EAAOo2f,eAEzBrjhB,KAAKmmkB,iBAAoBnmkB,KAAKkmkB,gBACjClmkB,KAAKkmkB,eAAgB,GAGQ,qBAApBvqT,kBACT37Q,KAAKqwgB,iBAAmB,IAAI10P,iBAG9B37Q,KAAK4/iB,uBAAyB3yhB,EAAOk3f,cACrCnkhB,KAAK6/iB,mBAAqB5yhB,EAAOi3f,aACjClkhB,KAAK6skB,SAAWL,EAAcxskB,KAAKohjB,QAAQj8B,aAC3C,IAAI3jb,EAAMv0E,EAAOu0E,IACjB2vN,MAAM3vN,EAAK6qe,EAAmBrskB,KAAK6skB,SAAU7skB,KAAK4skB,iBAAkB5skB,KAAKqwgB,mBAAmB95b,MAAK,SAAUwyC,GACzG,KAAK,EAAIk8c,EAAe4C,wBAAwB9+c,EAAStjB,QACvD,MAAM,EAAIw/d,EAAeuC,2BAA2Bz+c,EAAStjB,OAAQjE,GAGvE7pD,EAAMgrd,QAAU55Y,EAAStyC,KAAKykc,YAE9Bvje,EAAM2uhB,mBAAmBpnhB,UAEzB,IAAIynhB,EAAoB,SAA2Bn4jB,GACjD,OAAOu6G,EAASmoM,QAAQntT,IAAIyK,IAG1Bo4jB,GAAwB,EAAI3B,EAAe4B,kCAAkC,CAC/EF,kBAAmBA,EACnBlB,OAAQ9thB,EAAMypgB,QAAQqkB,OACtBpiD,eAAgB1re,EAAMwuhB,gBACtBjiD,aAAcvse,EAAMuuhB,gBAElBY,EAAqBF,EAAsBE,mBAC3CC,EAAkBH,EAAsBG,gBAE5CpvhB,EAAMkogB,kBAAoBinB,EAC1BnvhB,EAAMmogB,eAAiBinB,GAAmBpvhB,EAAMmogB,eAChDnogB,EAAM2pgB,WAAY,EAAI2jB,EAAe+B,2BAA2BL,IAE3DhvhB,EAAMiogB,uBAAyBjogB,EAAMkogB,mBACxClogB,EAAM9rB,OAAO,IAAI26c,EAAM8N,eAAe,8BA3B1C,MA6BYt0e,KAAKsmkB,mBAAmBnwf,QACpCn2E,KAAKumhB,WAAa,KAuGpB,OApGA9ue,EAAai1hB,EAAsB,CAAC,CAClCpokB,IAAK,eACLP,IAAK,WACH,OAAO/D,KAAKsmkB,mBAAmBtkb,UAEhC,CACD19I,IAAK,WACLP,IAAK,WACH,OAAO/D,KAAKshjB,YAEb,CACDh9iB,IAAK,gBACLP,IAAK,WACH,OAAO/D,KAAK8/iB,iBAEb,CACDx7iB,IAAK,mBACLP,IAAK,WACH,OAAO/D,KAAK6/iB,oBAEb,CACDv7iB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAK4/iB,wBAEb,CACDt7iB,IAAK,OACL5I,MAAO,WACL,IAAI+ljB,EAAQrkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAASC,IAChF,IAAIqjG,EAAuBpxkB,EAAO4E,EAAM4yJ,EAExC,OAAOs1U,EAAY,QAAYhuZ,MAAK,SAAkBovZ,GACpD,OACE,OAAQA,EAAStyd,KAAOsyd,EAAS7pe,MAC/B,KAAK,EAEH,OADA6pe,EAAS7pe,KAAO,EACTC,KAAKsmkB,mBAAmBtkb,QAEjC,KAAK,EAEH,OADA4nV,EAAS7pe,KAAO,EACTC,KAAK2igB,QAAQl1W,OAEtB,KAAK,EAKH,GAJAq/a,EAAwBljG,EAAShzZ,KACjCl7E,EAAQoxkB,EAAsBpxkB,QAC9B4E,EAAOwskB,EAAsBxskB,MAElB,CACTspe,EAAS7pe,KAAO,EAChB,MAGF,OAAO6pe,EAASQ,OAAO,SAAU,CAC/B1ue,MAAOA,EACP4E,KAAMA,IAGV,KAAK,EAWH,OAVAN,KAAK6gjB,SAAWnljB,EAAMwqK,WAElBlmK,KAAKumhB,YACPvmhB,KAAKumhB,WAAW,CACdz5X,OAAQ9sJ,KAAK6gjB,QACb1mT,MAAOn6P,KAAK8/iB,iBAIhB5sZ,EAAS,IAAIsC,WAAW95J,GAAOw3J,OACxB02U,EAASQ,OAAO,SAAU,CAC/B1ue,MAAOw3J,EACP5yJ,MAAM,IAGV,KAAK,GACL,IAAK,MACH,OAAOspe,EAASj4L,UAGrB83L,EAASzpe,UAOd,OAJA,WACE,OAAOyhjB,EAAMx5iB,MAAMjI,KAAM0D,YAvDtB,IA4DN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACjBvrH,KAAK2igB,SACP3igB,KAAK2igB,QAAQ92e,OAAO0/F,GAGlBvrH,KAAKqwgB,kBACPrwgB,KAAKqwgB,iBAAiBx0P,YAKrB6wT,EAlK+B,GAqKpCC,EAAyC,WAC3C,SAASA,EAA0Bhla,EAAQprK,EAAOC,GAChD,IAAI4mH,EAASpjH,KAEbotB,EAAgBptB,KAAM2skB,GAEtB3skB,KAAKohjB,QAAUz5Y,EACf3nK,KAAK2igB,QAAU,KACf3igB,KAAK6gjB,QAAU,EACf,IAAI5zhB,EAAS06I,EAAO16I,OACpBjtB,KAAK4skB,iBAAmB3/iB,EAAOm4f,kBAAmB,EAClDplhB,KAAKqmkB,iBAAkB,EAAI7/F,EAAM+O,2BACjCv1e,KAAK4/iB,uBAAyB3yhB,EAAOk3f,cAEN,qBAApBxoQ,kBACT37Q,KAAKqwgB,iBAAmB,IAAI10P,iBAG9B37Q,KAAK6skB,SAAWL,EAAcxskB,KAAKohjB,QAAQj8B,aAE3CnlhB,KAAK6skB,SAASp9a,OAAO,QAAS,SAASnkJ,OAAO/O,EAAO,KAAK+O,OAAO9O,EAAM,IAEvE,IAAIglG,EAAMv0E,EAAOu0E,IACjB2vN,MAAM3vN,EAAK6qe,EAAmBrskB,KAAK6skB,SAAU7skB,KAAK4skB,iBAAkB5skB,KAAKqwgB,mBAAmB95b,MAAK,SAAUwyC,GACzG,KAAK,EAAIk8c,EAAe4C,wBAAwB9+c,EAAStjB,QACvD,MAAM,EAAIw/d,EAAeuC,2BAA2Bz+c,EAAStjB,OAAQjE,GAGvE4hB,EAAOijd,gBAAgBnnhB,UAEvBkkE,EAAOu/Y,QAAU55Y,EAAStyC,KAAKykc,eAPjC,MAQYl7gB,KAAKqmkB,gBAAgBlwf,QACjCn2E,KAAKumhB,WAAa,KAkFpB,OA/EA9ue,EAAak1hB,EAA2B,CAAC,CACvCrokB,IAAK,uBACLP,IAAK,WACH,OAAO/D,KAAK4/iB,wBAEb,CACDt7iB,IAAK,OACL5I,MAAO,WACL,IAAImmjB,EAASzkW,EAAgCorR,EAAY,QAAYgB,MAAK,SAAS+2C,IACjF,IAAIwsD,EAAwBrxkB,EAAO4E,EAAM4yJ,EAEzC,OAAOs1U,EAAY,QAAYhuZ,MAAK,SAAmBgmc,GACrD,OACE,OAAQA,EAAUlpgB,KAAOkpgB,EAAUzghB,MACjC,KAAK,EAEH,OADAyghB,EAAUzghB,KAAO,EACVC,KAAKqmkB,gBAAgBrkb,QAE9B,KAAK,EAEH,OADAw+X,EAAUzghB,KAAO,EACVC,KAAK2igB,QAAQl1W,OAEtB,KAAK,EAKH,GAJAs/a,EAAyBvsD,EAAU5pc,KACnCl7E,EAAQqxkB,EAAuBrxkB,QAC/B4E,EAAOyskB,EAAuBzskB,MAEnB,CACTkghB,EAAUzghB,KAAO,EACjB,MAGF,OAAOyghB,EAAUp2C,OAAO,SAAU,CAChC1ue,MAAOA,EACP4E,KAAMA,IAGV,KAAK,EAUH,OATAN,KAAK6gjB,SAAWnljB,EAAMwqK,WAElBlmK,KAAKumhB,YACPvmhB,KAAKumhB,WAAW,CACdz5X,OAAQ9sJ,KAAK6gjB,UAIjB3tZ,EAAS,IAAIsC,WAAW95J,GAAOw3J,OACxBstX,EAAUp2C,OAAO,SAAU,CAChC1ue,MAAOw3J,EACP5yJ,MAAM,IAGV,KAAK,GACL,IAAK,MACH,OAAOkghB,EAAU7uO,UAGtB4uO,EAAUvghB,UAOf,OAJA,WACE,OAAO6hjB,EAAO55iB,MAAMjI,KAAM0D,YAtDvB,IA2DN,CACDY,IAAK,SACL5I,MAAO,SAAgB6vH,GACjBvrH,KAAK2igB,SACP3igB,KAAK2igB,QAAQ92e,OAAO0/F,GAGlBvrH,KAAKqwgB,kBACPrwgB,KAAKqwgB,iBAAiBx0P,YAKrB8wT,EAlHoC,KAyH/BK,yBAA2B,GAG/B,SAASrnG,oBAAoBz4D,GAE5B,IAAI+/J,EAAeD,yBAAyB9/J,GAC5C,QAAqBpxa,IAAjBmxkB,EACH,OAAOA,EAAa9xkB,QAGrB,IAAID,EAAS8xkB,yBAAyB9/J,GAAY,CACjDjsY,GAAIisY,EACJpgR,QAAQ,EACR3xJ,QAAS,IAUV,OANAsqe,oBAAoBv4D,GAAUlsa,KAAK9F,EAAOC,QAASD,EAAQA,EAAOC,QAASwqe,qBAG3Ezqe,EAAO4xJ,QAAS,EAGT5xJ,EAAOC,QAMdwqe,oBAAoBiM,IAAM,SAAC12e,GAG1B,OAFAA,EAAOq/K,MAAQ,GACVr/K,EAAOorC,WAAUprC,EAAOorC,SAAW,IACjCprC,GAKnB,IAAIgykB,oBAAsB,GAuRhB,OArRV,WACA,aACA,IAAI/xkB,EAAU+xkB,oBAGd9ukB,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5CO,OAAO,IAET0C,OAAOyJ,eAAe1M,EAAS,kBAAoB,CACjD2M,YAAY,EACZ/D,IAAK,WACH,OAAOopkB,EAAkBlrB,mBAG7B7jjB,OAAOyJ,eAAe1M,EAAS,iBAAmB,CAChD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMwN,kBAGjB51e,OAAOyJ,eAAe1M,EAAS,sBAAwB,CACrD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMmN,uBAGjBv1e,OAAOyJ,eAAe1M,EAAS,sBAAwB,CACrD2M,YAAY,EACZ/D,IAAK,WACH,OAAO89gB,EAAgByC,uBAG3BlmhB,OAAOyJ,eAAe1M,EAAS,sBAAwB,CACrD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM4M,uBAGjBh1e,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5C2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAev7C,cAG1B7ne,OAAOyJ,eAAe1M,EAAS,eAAiB,CAC9C2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAKlsD,gBAGhB9ihB,OAAOyJ,eAAe1M,EAAS,sBAAwB,CACrD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMyM,uBAGjB70e,OAAOyJ,eAAe1M,EAAS,MAAQ,CACrC2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMwM,OAGjB50e,OAAOyJ,eAAe1M,EAAS,wBAA0B,CACvD2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAKnsD,yBAGhB7ihB,OAAOyJ,eAAe1M,EAAS,gBAAkB,CAC/C2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAex7C,iBAG1B5ne,OAAOyJ,eAAe1M,EAAS,YAAc,CAC3C2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAKvsD,aAGhBzihB,OAAOyJ,eAAe1M,EAAS,oBAAsB,CACnD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMqM,qBAGjBz0e,OAAOyJ,eAAe1M,EAAS,iBAAmB,CAChD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMoM,kBAGjBx0e,OAAOyJ,eAAe1M,EAAS,gBAAkB,CAC/C2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAe17C,iBAG1B1ne,OAAOyJ,eAAe1M,EAAS,8BAAgC,CAC7D2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAe37C,+BAG1Bzne,OAAOyJ,eAAe1M,EAAS,cAAgB,CAC7C2M,YAAY,EACZ/D,IAAK,WACH,OAAOspkB,EAAKvO,eAGhB1gkB,OAAOyJ,eAAe1M,EAAS,uBAAyB,CACtD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMgM,wBAGjBp0e,OAAOyJ,eAAe1M,EAAS,8BAAgC,CAC7D2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM+L,+BAGjBn0e,OAAOyJ,eAAe1M,EAAS,OAAS,CACtC2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM8F,QAGjBlue,OAAOyJ,eAAe1M,EAAS,iBAAmB,CAChD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM6L,kBAGjBj0e,OAAOyJ,eAAe1M,EAAS,WAAa,CAC1C2M,YAAY,EACZ/D,IAAK,WACH,OAAOo+iB,EAAW6O,YAGtB5yjB,OAAOyJ,eAAe1M,EAAS,oBAAsB,CACnD2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAel7C,qBAG1Bloe,OAAOyJ,eAAe1M,EAAS,QAAU,CACvC2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAKzsD,SAGhBvihB,OAAOyJ,eAAe1M,EAAS,kBAAoB,CACjD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMh2H,mBAGjBpyW,OAAOyJ,eAAe1M,EAAS,0BAA4B,CACzD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM+O,2BAGjBn3e,OAAOyJ,eAAe1M,EAAS,yBAA2B,CACxD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMkP,0BAGjBt3e,OAAOyJ,eAAe1M,EAAS,cAAgB,CAC7C2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAK9rD,eAGhBljhB,OAAOyJ,eAAe1M,EAAS,qBAAuB,CACpD2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAep6C,sBAG1Bhpe,OAAOyJ,eAAe1M,EAAS,wBAA0B,CACvD2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAen6C,yBAG1Bjpe,OAAOyJ,eAAe1M,EAAS,qBAAuB,CACpD2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAe55C,sBAG1Bxpe,OAAOyJ,eAAe1M,EAAS,YAAc,CAC3C2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAev5C,aAG1B7pe,OAAOyJ,eAAe1M,EAAS,aAAe,CAC5C2M,YAAY,EACZ/D,IAAK,WACH,OAAOy9gB,EAAer5C,cAG1B/pe,OAAOyJ,eAAe1M,EAAS,uBAAyB,CACtD2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAMG,wBAGjBvoe,OAAOyJ,eAAe1M,EAAS,kBAAoB,CACjD2M,YAAY,EACZ/D,IAAK,WACH,OAAOupkB,EAAY5T,mBAGvBt7jB,OAAOyJ,eAAe1M,EAAS,SAAW,CACxC2M,YAAY,EACZ/D,IAAK,WACH,OAAOyie,EAAM1kW,UAGjB1jI,OAAOyJ,eAAe1M,EAAS,UAAY,CACzC2M,YAAY,EACZ/D,IAAK,WACH,OAAOqpkB,EAAK1jjB,WAIhB,IAAI83f,EAAiB77C,oBAAoB,GAErCa,EAAQb,oBAAoB,GAE5BynG,EAAOznG,oBAAoB,KAE3BwnG,EAAoBxnG,oBAAoB,KAExCk8C,EAAkBl8C,oBAAoB,KAEtCijB,EAAWjjB,oBAAoB,GAE/B2nG,EAAc3nG,oBAAoB,KAElC0nG,EAAO1nG,oBAAoB,KAE3Bw8E,EAAax8E,oBAAoB,KAKnC,GAAIijB,EAASE,SAAU,CACrB,IACIk8E,EADWr/F,oBAAoB,KACNq/F,eAE7B,EAAIoI,EAAK7rD,6BAA4B,SAAU5ue,GAC7C,OAAO,IAAIqyhB,EAAcryhB,UAEtB,CACL,IACI62hB,EADY7jG,oBAAoB,KACH6jG,iBAG7B4C,EADYzmG,oBAAoB,KACLymG,gBAE/B,EAAIgB,EAAK7rD,6BAA4B,SAAU5ue,GAC7C,OAAI,EAAI6ue,EAAet5C,iBAAiBv1b,EAAO6uD,KACtC,IAAI4qe,EAAez5hB,GAGrB,IAAI62hB,EAAiB72hB,OA/QlC,GAqRiBu6hB,oBA332BjB,IAREhykB,OAAOC,QAAU6/P,Y,4HCxBnB,gFAca2sI,EAAkC,SAC7C4lM,GAD6C,OAE1C,SAACpmc,GACJ,OAAOloF,QAAQC,QAAQquhB,EAAcpmc,IAAQ5wD,MAC3C,eACA,SAACgmb,GACC,GAAIA,aAAqB30f,MACvB,MAAM20f,OAWDixE,EAA6B,iBAAO,CAC/CphhB,MAAOu5C,IAAQ55E,EAAE,CAAC,uCAAwC,6D,wjBC+E7CkpD,qBACb91B,YAAgB,gBADH81B,EAxE+C,SAAC/qC,GAC7D,IACEqkS,EAMErkS,EANFqkS,WACAE,EAKEvkS,EALFukS,aACAg/P,EAIEvjiB,EAJFujiB,eACAC,EAGExjiB,EAHFwjiB,iBACA3hjB,EAEEme,EAFFne,EALF,EAOIme,EADFu7D,cANF,MAMW,WANX,EASM4tV,GADY3hZ,sBAAYyP,kBAAyBlpC,kBAC3B1O,SAASo4C,KAASC,UAC9C,OACE,qCACE,eAACouO,EAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,UACE,eAACmwC,EAAA,EAAD,CAASC,MAAoBn+F,EAAbwiT,EAAe,mBAAwB,4CAAvD,SACE,gCACE,eAAC7zM,EAAA,EAAD,CAAYxd,UAAWqxN,EAAY1pN,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBqqN,KAAzE,SACE,eAAC,IAAD,CAAUpnN,SAAS,iBAIvBksU,GAAa,eAACppU,EAAA,EAAD,CAASC,MAAsBn+F,EAAf0iT,EAAiB,qBAA0B,4CAA3D,SACb,gCACI,eAAC/zM,EAAA,EAAD,CACIxd,UAAWuxN,EACX5pN,QAAS,SAACz8G,GACRA,EAAE87G,kBACFuqN,KAJN,SAOE,eAAC,KAAD,CAAYtnN,SAAS,gBAK5BksU,GAAwB,WAAX5tV,GACV,eAACwkB,EAAA,EAAD,CAASC,MAA0Bn+F,EAAnB2hjB,EAAqB,0CAA+C,4CAApF,SACE,gCACE,eAAChzc,EAAA,EAAD,CACIxd,UAAWwwd,EACX7od,QAAS,SAACz8G,GACRA,EAAE87G,kBACFwpd,KAJN,SAOE,eAAC,IAAD,CAAkBvmd,SAAS,gBAKpCksU,GAAwB,aAAX5tV,GACV,eAACwkB,EAAA,EAAD,CAASC,MAAwBn+F,EAAjB0hjB,EAAmB,wCAA6C,4CAAhF,SACE,gCACE,eAAC/yc,EAAA,EAAD,CACIxd,UAAWuwd,EACX5od,QAAS,SAACz8G,GACRA,EAAE87G,kBACFupd,KAJN,SAOE,eAAC,KAAD,CAAatmd,SAAS,0B,kECR3BlyC,qBACXgG,aAnEW,SAACC,GAAD,MAA+B,CAC1Cyyf,OAAQ,CACJ17c,WAAY/2C,EAAMZ,QAAQ,KAC1B43C,cAAeh3C,EAAMZ,WAEzBy8O,mBAAoB,CAChBv1M,YAAatmC,EAAMZ,QAAQ,GAC3By6C,cAAe,aAEnB64P,eAAgB,CACZtxQ,UAAWphC,EAAMZ,eA0DrBn7B,YAAgB,gBAFL81B,EArDS,SAAC/qC,GACrB,IACIy6F,EAMAz6F,EANAy6F,QACAh6B,EAKAzgE,EALAygE,KACAqjR,EAIA9jV,EAJA8jV,SACA90S,EAGAhvC,EAHAgvC,QACAntD,EAEAme,EAFAne,EACAmrS,EACAhtR,EADAgtR,UAGJ,OACI,eAAClB,GAAA,EAAD,CACI,mBAAiB,iCACjBrrN,KAAMA,EACNg6B,QAAS,kBAAMA,KAHnB,SAKI,uBAAKvrD,UAAWF,EAAQy0f,OAAxB,UACI,gBAAC13Q,EAAA,EAAD,WACI,eAACylI,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2BglE,MAAM,cAAcyT,QAAQ,KAA7E,SACM3tF,EAAE,gCAER,eAAC2va,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2BglE,MAAM,cAAcyT,QAAQ,KAA7E,mBACSs0Q,EADT,OAGA,eAAC0tE,EAAA,EAAD,CAAmBtiX,UAAWF,EAAQ00S,eAAtC,SACK7hW,EAAE,wCAGX,gBAACqqS,EAAA,EAAD,WACI,eAACzxM,EAAA,EAAD,CACIE,QAAS,kBAAM8f,KACf1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,wBAGP,eAAC44F,EAAA,EAAD,CACIE,QAAS,SAACz8G,GACNA,EAAE87G,kBACFgzM,KAEJjxN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBANvB,SAQKhrS,EAAE,2CCKZkpD,qBACXgG,aAhEW,SAACC,GAAD,MAA+B,CAC1Cyyf,OAAQ,CACJ17c,WAAY/2C,EAAMZ,QAAQ,KAC1B43C,cAAeh3C,EAAMZ,WAEzBy8O,mBAAoB,CAChBv1M,YAAatmC,EAAMZ,QAAQ,GAC3By6C,cAAe,aAEnB64P,eAAgB,CACZtxQ,UAAWphC,EAAMZ,eAuDrBn7B,YAAgB,gBAFL81B,EAlDO,SAAC/qC,GACnB,IACIy6F,EAMAz6F,EANAy6F,QACAh6B,EAKAzgE,EALAygE,KACAqjR,EAIA9jV,EAJA8jV,SACA90S,EAGAhvC,EAHAgvC,QACAntD,EAEAme,EAFAne,EACAmrS,EACAhtR,EADAgtR,UAGJ,OACI,eAAClB,GAAA,EAAD,CACI,mBAAiB,+BACjBrrN,KAAMA,EACNg6B,QAAS,kBAAMA,KAHnB,SAKI,uBAAKvrD,UAAWF,EAAQy0f,OAAxB,UACI,gBAAC13Q,EAAA,EAAD,WACI,eAACylI,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2BglE,MAAM,cAAcyT,QAAQ,KAA7E,SACM3tF,EAAE,8BAER,eAAC2va,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2By4E,QAAQ,KAAzD,mBACSs0Q,EADT,UAIJ,gBAAC53D,EAAA,EAAD,WACI,eAACzxM,EAAA,EAAD,CACIE,QAAS,kBAAM8f,KACf1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,wBAGP,eAAC44F,EAAA,EAAD,CACIE,QAAS,SAACz8G,GACNA,EAAE87G,kBACFgzM,KAEJjxN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBANvB,SAQKhrS,EAAE,uC,4BCcd8qB,GAA8C,CACzD4yE,MAHmB,GAInB37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAIIkzZ,GAAmB,SAAC32T,EAAoBjU,GACnD,IAAKiU,KAAc,OAACjU,QAAD,IAACA,OAAD,EAACA,EAAS9nF,KAC3B,MAAO,GAGT,IASkB,EATZ2yZ,EAA0B,CAAE,IAAO,KAErC52T,GACF42T,EAAmB3yZ,IAAIr1B,KAAK,CAC1B,qBAAsB,CACpB,KAAQoxH,KAId,OAAIjU,QAAJ,IAAIA,OAAJ,EAAIA,EAAS9nF,OACX,EAAA2yZ,EAAmB3yZ,KAAIr1B,KAAvB,oBAA+Bm9G,EAAQ9nF,MAGzC,OAAO2yZ,GAwHHw5I,G,kDAiBJ,WAAY1jiB,GAAkC,IAAD,8BAC3C,cAAMA,IAhBDm4R,aAAezxI,oBAAS,SAACpzD,GAC9B,IACExxF,EACE,EAAKhF,MADPgF,QAGF,EAAKqmU,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV0vH,aACAouI,KAAM,MAEP,KAE0C,EA0CtCoF,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAKI,EAAK/mO,MAJP2jiB,EADF,EACEA,6BACAC,EAFF,EAEEA,kCACAl5I,EAHF,EAGEA,6BACAC,EAJF,EAIEA,eAEF,EAA0B,EAAK7tZ,MAAvBgF,EAAR,EAAQA,QAAR,EAAiB4/N,KAGjB,GAAIvtJ,EAAUwvd,6BAA6B9xkB,MAA8C,IAAtC8xkB,EAA6B9xkB,MAAc+xkB,EAAmC,CAC/H,IAAM/4I,EAAUh4b,KAAKwjB,MAAMutjB,EAAoC9hiB,EAAQy9E,QAAUqkd,EAAoC9hiB,EAAQy9E,MAAQ,EAAI,GACnIurU,EAAYhpZ,EAAQy9E,MAAQsrU,EAClC,EAAK1iF,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQknb,IAEVppL,KAAMmpL,IAINF,IAAmBD,GACrB,EAAK1qZ,MAAMS,SAASv+B,aAAKynB,qBAjEgB,EAqEtC6ha,WAAa,SAACq4I,GACnB,MAKI,EAAK7jiB,MAJPS,EADF,EACEA,SACAgrZ,EAFF,EAEEA,WACA9oY,EAHF,EAGEA,cACAwtY,EAJF,EAIEA,sBAGF1vZ,EAAS,IAAI61C,KAAqC,CAAEutf,yBACpDp4I,EAAW,CACTR,cAAe,SAAC64I,GACdvne,KAAmB9rE,mBAAgBsziB,gCAAiCphhB,EAAc,CAChFyoY,cAAe+E,EAAsBt2b,IAAI,QACzCmqkB,gBAAiBF,EAAuBjqkB,IAAI,eAC5CoqkB,cAAeH,EAAuBjqkB,IAAI,MAC1C0vT,WAAsD,OAA1C4mI,EAAsBt2b,IAAI,YACtCqqkB,wBAAyBL,EAAoBhqkB,IAAI,sBArFZ,EA2FtCmlU,aAAe,WAAO,IAAD,EAClBv+R,EAAa,EAAKT,MAAlBS,SACR,EAMI,EAAK3D,MALPqniB,EADF,EACEA,wBACAC,EAFF,EAEEA,wBACAtiiB,EAHF,EAGEA,QACAu9E,EAJF,EAIEA,QACAiU,EALF,EAKEA,WAGIw4T,EAAgBx4T,EAClB,CACE,IAAO,CACL,CACE,iBAAkB,CAChB,KAAQA,MAKhBjU,EACHA,GAAWiU,IAAe,EAAAw4T,EAASv0Z,KAAIr1B,KAAb,oBAAsBm9G,EAAgB9nF,MAEjE,EAAKmhF,SAAS,CAAEqzU,iBAAiB,IACjCtrZ,EAAS,IAAIi3C,KAAwC,CAAEo3D,aAAa,KACpEruG,EAAS,IAAIy1C,IAA0D,CACrE+sU,YAAakhL,EACbnnI,SAAUonI,EAAwBvqkB,IAAI,MACtCwlH,QAASysU,EACThqZ,cAxHyC,EA4HtCuiiB,eAAiB,WAAO,IAAD,EAC5B,EAMI,EAAKvniB,MALPsniB,EADF,EACEA,wBACAD,EAFF,EAEEA,wBACAriiB,EAHF,EAGEA,QACAu9E,EAJF,EAIEA,QACAiU,EALF,EAKEA,WAEF,EAAyE,EAAKtzF,MAAtEskiB,EAAR,EAAQA,gDAAiD7jiB,EAAzD,EAAyDA,SAAU5e,EAAnE,EAAmEA,EAE7Diqa,EAAgBx4T,EAClB,CACE,IAAO,CACL,CACE,iBAAkB,CAChB,KAAQA,MAKhBjU,EACHA,GAAWiU,IAAe,EAAAw4T,EAASv0Z,KAAIr1B,KAAb,oBAAsBm9G,EAAgB9nF,MAEjE,EAAKmhF,SAAS,CAAE6rd,mBAAmB,IAOnCD,EACIH,EACAC,EAAwBvqkB,IAAI,MAC5BuqkB,EAAwBt9jB,eAAc,SAAAywQ,GACpCA,EAAI/5Q,IAAI,SAAU,aAEpBskC,EACAgqZ,GAbc,WAChBrrZ,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,iCACX65E,SAAU,iBAvJ6B,EAqKtC8oe,iBAAmB,WAAO,IAAD,EAC9B,EAMI,EAAK1niB,MALPsniB,EADF,EACEA,wBACAD,EAFF,EAEEA,wBACAriiB,EAHF,EAGEA,QACAu9E,EAJF,EAIEA,QACAiU,EALF,EAKEA,WAEF,EAAyE,EAAKtzF,MAAtEskiB,EAAR,EAAQA,gDAAiD7jiB,EAAzD,EAAyDA,SAAU5e,EAAnE,EAAmEA,EAE7Diqa,EAAgBx4T,EAClB,CACE,IAAO,CACL,CACE,iBAAkB,CAChB,KAAQA,MAKhBjU,EACHA,GAAWiU,IAAe,EAAAw4T,EAASv0Z,KAAIr1B,KAAb,oBAAsBm9G,EAAgB9nF,MAEjE,EAAKmhF,SAAS,CAAE+rd,qBAAqB,IAOrCH,EACIH,EACAC,EAAwBvqkB,IAAI,MAC5BuqkB,EAAwBt9jB,eAAc,SAAAywQ,GACpCA,EAAI/5Q,IAAI,SAAU,eAEpBskC,EACAgqZ,GAbc,WAChBrrZ,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,mCACX65E,SAAU,iBAhM6B,EA8MtCqwV,gBAAkB,SAACq4I,GACxB,EAAK1rd,SAAS,CACZqzU,iBAAiB,EACjBq4I,6BAjNyC,EAqNtCG,kBAAoB,SAACH,GAC1B,EAAK1rd,SAAS,CACZ6rd,mBAAmB,EACnBH,6BAxNyC,EA2NtCK,oBAAsB,SAACL,GAC5B,EAAK1rd,SAAS,CACZ+rd,qBAAqB,EACrBL,6BA9NyC,EAiOtCp4I,mBAAqB,WAC1B,EAAKtzU,UAAS,SAAAquJ,GAAS,MAAK,CAC1BklL,kBAAmBllL,EAAUklL,sBAnOY,EAuOtC9jF,uBAAyB,SAACrnV,GAC/B,MAGI,EAAKkf,MAFP0kiB,EADF,EACEA,wBACAC,EAFF,EAEEA,0BAEF,EAKI,EAAK7niB,MAJEqvZ,EADX,EACErqZ,QACYsqZ,EAFd,EAEE94T,WACS+4T,EAHX,EAGEhtU,QACMitU,EAJR,EAIE5qL,KAGS6qL,EAIPzra,EAJFghB,QACY0qZ,EAGV1ra,EAHFwyG,WACSm5T,EAEP3ra,EAFFu+F,QACMwrU,EACJ/pa,EADF4gP,KAGF,EAAKhpJ,SACH,CACE52E,QAASyqZ,GAAcJ,EACvB74T,gBAA8B1hI,IAAlB46b,EAA8BA,EAAgBJ,EAC1D/sU,aAAwBztH,IAAf66b,EAA2BA,EAAaJ,EACjD3qL,UAAkB9vQ,IAAZi5b,EAAwBA,EAAUyB,IACvC,WACD,IAAMjtU,EAAkB4qU,GAAiB,EAAKntZ,MAAMw2F,WAAY,EAAKx2F,MAAMuiF,SAE3E,EAAKviF,MAAMmvZ,kBAAoBy4I,EAAwB,EAAK5niB,MAAMqniB,yBAClEQ,EACE,EAAK7niB,MAAMqniB,wBACX,EAAKrniB,MAAMgF,QACXu9E,OAtQqC,EA4QtCqtU,iBAAmB,SAACxub,EAAG2sb,GAC5B,IACE/oZ,EACE,EAAKhF,MADPgF,QAGMy9E,EAAUz9E,EAAVy9E,MACFgtU,EAAU,2BACXzqZ,GADW,IAEdl+B,OAAQinb,EAAUtrU,IAGpB,EAAK4oP,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmpL,KAvRb,EA0RtC8B,wBAA0B,SAACzub,GAChC,MAGI,EAAK4+B,MAFPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KAGIkrL,EAASn1b,OAAOyG,EAAE4kB,OAAOtxB,OACzBq7b,EAAeh6b,KAAKqjB,MAAQwrP,EAAQ5/N,EAAQy9E,MAAS,GAAKqtU,GAAU,EAEpEL,EAAU,2BACXzqZ,GADW,IAEdy9E,MAAOqtU,EACPhpb,OAAQgpb,EAASC,IAGnB,EAAK1kF,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmrL,KAzSb,EA4StC+3I,6BAA+B,WACpC,MAA6D,EAAK5kiB,MAA1DmwZ,EAAR,EAAQA,sBAAuB1E,EAA/B,EAA+BA,WAAY9oY,EAA3C,EAA2CA,cAC3C8oY,EAAW,CACTR,cAAe,SAAC45I,GACdtoe,KAAmB9rE,mBAAgBq0iB,gCAAiCnihB,EAAc,CAChFyoY,cAAe+E,EAAsBt2b,IAAI,QACzCmqkB,gBAAiBa,EAAmBhrkB,IAAI,eACxCoqkB,cAAeY,EAAmBhrkB,IAAI,MACtC0vT,WAAsD,OAA1C4mI,EAAsBt2b,IAAI,mBApTD,EA0TtCkzb,QAAU,SAAC82I,GAAoD,IAAD,EACnE,EAA2D,EAAK7jiB,MAAxDgtZ,EAAR,EAAQA,uBAAwBC,EAAhC,EAAgCA,uBAChC,iBAAO42I,EAAoBhqkB,IAAI,eAA/B,aAAO,EAAiCwH,QAAO,SAAC2vK,GAC9C,IAAMm8Q,EAAkBn8Q,EAAIt6J,MAAM,CAAC,eAAgB,OAC7C02a,EAAcp8Q,EAAIt6J,MAAM,CAAC,WAAY,OAC3C,OACgD,OAA5Cs2a,EAAuBG,IACtB51b,MAAMC,QAAQw1b,EAAuBG,KAAqBH,EAAuBG,GAAiB9tb,SAAS+tb,IACpE,OAAxCH,EAAuBG,IACtB71b,MAAMC,QAAQy1b,EAAuBG,KAAkBH,EAAuBG,GAAa/tb,SAAS8tb,MAExG1rb,QAAO,SAACkC,EAAKqtK,GACd,IAAMj6I,EAAE,UAAMi6I,EAAIt6J,MAAM,CAAC,eAAgB,OAAjC,YAA2Cs6J,EAAIt6J,MAAM,CAAC,WAAY,QAC1E,OAAK/S,EAAI9J,IAAIk9B,GAGNpzB,EAFEA,EAAInG,IAAIu5B,EAAR,UAAei6I,EAAIt6J,MAAM,CAAC,eAAgB,SAA1C,cAAwDs6J,EAAIt6J,MAAM,CAAC,WAAY,aAGvFhO,iBAAOrP,eAAeX,WA3UkB,EA8UtC20b,eAAiB,SAAC39W,GAAD,OAAoB,SAACxxE,GAC3C,EAAKw6G,SAAS,CACZ40U,YAAapvb,EAAEs8G,cACf+yU,cAAe79W,MAjV0B,EAqVtC89W,gBAAkB,SAACtvb,GAAO,IAAD,iBACH,OAADA,QAAC,IAADA,GAAA,UAAAA,EAAG4kB,cAAH,mBAAWwkM,kBAAX,mBAAuBmmO,gBAAvB,eAAiCj8b,SAAUk8b,OAA2B,OAADxvb,QAAC,IAADA,GAAA,UAAAA,EAAG4kB,cAAH,mBAAWu1U,oBAAX,mBAAyB/wI,kBAAzB,mBAAqCmmO,gBAArC,eAA+Cj8b,SAAUk8b,OACrI,EAAKh1U,SAAS,CAAE40U,YAAa,QArVhD,EAAKxwZ,MAAQ,CACXmsF,SAAU,KACV4lT,iBAAkB,CAChB,CAAE93Y,GAAI,cAAeH,MAAO,6CAA8CipF,KAAM,CAAC,eAAgB3uC,SAAS,EAAMi3U,UAAU,GAC1H,CAAEpxX,GAAI,OAAQH,MAAO,sCAAuCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GACrG,CAAEpxX,GAAI,QAASH,MAAO,uCAAwCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GACxG,CAAEpxX,GAAI,OAAQH,MAAO,sCAAuCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GACrG,CAAEpxX,GAAI,UAAWH,MAAO,yCAA0Cs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAEvHkpU,kBAAkB,EAClBvqL,KAAM,EACNpuI,WAAY,GACZjU,QAAS,KACTv9E,QAAS6K,GACTw3hB,yBAA0B,EAC1B72I,YAAa,KACbC,cAAe,GACf62I,wBAAyB17jB,gBACzBqjb,iBAAiB,EACjBw4I,mBAAmB,EACnBE,qBAAqB,EACrBM,gCAAiC,IAvBQ,E,qDA2B7C,WACE,MAA6FjvkB,KAAKkqC,MAA1FS,EAAR,EAAQA,SAAUikiB,EAAlB,EAAkBA,wBAAyBC,EAA3C,EAA2CA,0BAA2BtgiB,EAAtE,EAAsEA,MAAOupZ,EAA7E,EAA6EA,YACrE9rZ,EAAYhsC,KAAKgnC,MAAjBgF,QACFkjiB,EAAkBvtkB,OAAQ4sC,EAAMoE,OAAew6W,aAEjD/wW,MAAM8yhB,KAAqBvtkB,OAAOC,UAAUstkB,IAAoBA,EAAkB,EACpFvkiB,EAASv+B,aAAKynB,qBAEd7zB,KAAK4iH,SAAS,CAAEyrd,wBAAyBa,IACzCN,EAAwBM,GACxBL,EAA0BK,EAAiBljiB,GAC3C8rZ,O,oBAoTJ,WAAiB,IAAD,OACd,EAUI93b,KAAKkqC,MATPgvC,EADF,EACEA,QACAmhX,EAFF,EAEEA,sBACAwzI,EAHF,EAGEA,6BACAsB,EAJF,EAIEA,8BACArB,EALF,EAKEA,kCACAsB,EANF,EAMEA,mBACAC,EAPF,EAOEA,yBACAvqhB,EARF,EAQEA,UACA/4B,EATF,EASEA,EAEF,EAWI/rB,KAAKgnC,MAVPqniB,EADF,EACEA,wBACA7wc,EAFF,EAEEA,WACAxxF,EAHF,EAGEA,QACAu9E,EAJF,EAIEA,QACAqiJ,EALF,EAKEA,KACAuqL,EANF,EAMEA,iBACApd,EAPF,EAOEA,iBACA0e,EARF,EAQEA,cACAxB,EATF,EASEA,gBACAq4I,EAVF,EAUEA,wBAGIv2I,EAA2Bhf,EAAiBxta,QAAO,SAACwnZ,GAAD,OAAYA,EAAO33U,WAEtE0+T,EAAS,CACbx/B,kBAAmB,GACnBC,mBAAoB,GACpBI,aAAc5uV,EAAE,2BAChB6uV,kBAAmB7uV,EAAE,0CAGvB,OACE,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQM,UAHrB,UAKE,eAACw+W,EAAA,EAAD,CACEnc,oBAAqB77a,KAAKk2b,mBAC1Bna,WAAY/7a,KAAK8ukB,6BACjBtzJ,aAAc6zJ,EACd5zJ,WAAY4zJ,EAA2B,GAAK,gCAC5Ch0J,cAAetvZ,EAAE,qCACjBs2S,aAAcriU,KAAKqiU,aACnBi5G,YAAY,EACZW,cACE,eAACjqH,EAAA,EAAD,CACE54O,UAAWF,EAAQ+7E,KACnBv5J,MAAO,EACP8/G,SAAU,KACV02M,UAAU,UACVx4M,QAAQ,YACR,aAAY3tF,EAAE,gCACdmtD,QAAS,CACPsvR,UAAWtvR,EAAQsvR,WARvB,SAWE,eAACr2C,EAAA,EAAD,CACErxR,OAAoC,IAA7ButiB,EAAiC,GAAKh0I,EAAsBt2b,IAAI,QACvErI,MAAO,EACPk2H,KAAM,yBACN14C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,oBAM7B,eAACv3I,GAAA,EAAD,CACEC,cAAemsC,IACfhyH,uBAAwBryW,KAAKqyW,uBAC7BrmU,QAASA,EACTioU,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAEqsd,gCAAiC3qkB,OAE1E,gBAACu0E,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQi/W,iBACnB39W,KAAK,SAHP,UAKE,eAAC3B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKG+2I,EACG,eAAC92I,EAAA,EAAD,CACErtD,QAAS,eAAC,IAAD,IACTC,SAAU,eAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,IAElB,eAAC74Q,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,SAGyC,IAAtC8rM,EAA6B9xkB,KAC1B,uCACE,sBAAKu/G,MAAO,CAAE+O,SAAU,OAAQhuC,SAAU,GAA1C,SACE,gBAACi8W,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAE3hE,KAAM2hE,EAAQs/W,WAApC,SACE,eAACC,EAAA,EAAD,UACGV,EAAyB/ub,KAAI,SAAC0gI,EAAQvtI,GAAT,OAC5B,eAAC6zR,EAAA,EAAD,CAAuB92M,QAAS,CAAE3hE,KAAM2hE,EAAQw/W,YAAcp9U,MAAOouB,EAAOpuB,MAA5E,SACGvvF,EAAE29G,EAAO5oG,QADI3kC,UAMtB,eAACw8b,EAAA,EAAD,UACGk1I,GAAgCA,EAA6B7kkB,KAAI,SAAC+kkB,EAAgD5xkB,GAAjD,OAChE,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAA7C,SACGuwO,GAAuBh2I,EAAyB/ub,KAAI,SAAC+pZ,GACpD,OAAQA,EAAO9xX,IACb,IAAK,cACL,IAAK,OACL,IAAK,QAAS,OAAO,eAAC,IAAD,CAA6B4qF,KAAMkid,EAAoBntjB,MAAMmyY,EAAOhpS,OAArDgpS,EAAOjyX,OAC3C,IAAK,OAAQ,OAAO,eAACm4Z,GAAA,EAAD,CAAiCC,WAAY,EAAKjC,QAAQ82I,GAAsB13c,YAAa,EAAKkhU,gBAA/ExkC,EAAOjyX,OAC9C,IAAK,UAAW,OAAO,eAAC,GAAD,CAEnBytS,WAAY6gQ,EAAqB,kBAAM,EAAK15I,WAAWq4I,IAAuB,KAC9Et/P,aAAc2gQ,EAAqB,kBAAM,EAAKn5I,gBAAgB83I,IAAuB,KACrFN,eAAgB2B,GAAsBtqhB,EAAY,kBAAM,EAAK2phB,kBAAkBV,IAAuB,KACtGL,iBAAkB0B,GAAsBtqhB,EAAY,kBAAM,EAAK6phB,oBAAoBZ,IAAuB,KAC1Gtoe,OAAQsoe,EAAoBhqkB,IAAI,WAL3BgvZ,EAAOjyX,YARS3kC,aAsBvC,eAACg9b,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpButa,aAAct5b,KAAK42b,iBACnB2C,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCC,oBAAqBx5b,KAAK62b,wBAC1Bzhb,MAAO04jB,GAAqC,EAC5Cr0I,YAAaztZ,EAAQy9E,MACrBmiJ,KAAMA,EACN8tL,iBAAkBC,IAClBzgX,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,wBAIvB,eAACC,EAAA,EAAD,CACE1/E,MAAO2/E,IACP1/E,gBAAiBr6W,KAAK8ukB,6BACtBx0N,kBAAmBw/B,EAAOx/B,kBAC1BC,mBAAoBu/B,EAAOv/B,mBAC3BI,aAAcm/B,EAAOn/B,aACrBC,kBAAmBk/B,EAAOl/B,wBAMxC,eAAC/hS,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAU26W,EAAmB,QAAU,GAJ3C,SAOE,eAACs5I,EAAA,EAAD,CACE9sQ,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBkE,sBAAuBA,EACvBruZ,QAASA,EACTqmU,uBAAwBryW,KAAKqyW,uBAC7BiD,UAAWt1W,KAAKgnC,MAAMioiB,gCACtBh7N,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAEqsd,gCAAiC3qkB,YAI9E,eAAC01b,GAAA,EAAD,CAAW7mU,SAAUnzH,KAAKgnC,MAAMwwZ,YAAa0B,WAAYzB,EAAe9yT,QAAS3kI,KAAK03b,kBACtF,eAAC,GAAD,CACEvqC,YAAakhL,EACb7wc,WAAYA,EACZjU,QAASA,EACTv9E,QAASA,IAEX,eAAC,IAAD,CACE+hV,WAAYugN,EAAwBvqkB,IAAI,MACxC4mG,KAAMsrV,EACNjoE,SAAUsgN,EAAwBvqkB,IAAI,eACtCkqX,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAAEqzU,iBAAiB,KAC1D/sH,aAAclpU,KAAKkpU,aACnBolD,aAAa,IAEf,eAAC,GAAD,CACEp3D,UAAWl3T,KAAK0ukB,iBAChB/pc,QAAS,kBAAM,EAAK/hB,SAAS,CAAE+rd,qBAAqB,KACpDhke,KAAM3qG,KAAKgnC,MAAM2niB,oBACjB3gN,SAAUsgN,EAAwBvqkB,IAAI,iBAExC,eAAC,GAAD,CACEmzT,UAAWl3T,KAAKuukB,eAChB5pc,QAAS,kBAAM,EAAK/hB,SAAS,CAAE6rd,mBAAmB,KAClD9je,KAAM3qG,KAAKgnC,MAAMyniB,kBACjBzgN,SAAUsgN,EAAwBvqkB,IAAI,wB,GAzjBV0gC,aA2mBhCmI,GAAkBkG,YAAyB,CAC/CunZ,sBAAuB/7L,cACvBuvU,6BAA8BrvU,cAC9BsvU,kCAAmCrvU,cACnC0wU,8BAA+BzwU,cAC/B0wU,mBAAoB5ohB,eACpB6ohB,yBAA0B1shB,gBAC1Bu0Y,uBAAwBj4S,MACxBk4S,uBAAwBj4S,MACxB01S,6BAA8B3xY,eAC9B4xY,eAAgBj0Y,eAChBkE,UAAWrD,kB,IAGEwzB,kBACbgG,aAttBa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRx4C,aAAc,aACdisC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAO,OACPe,SAAU,EACVZ,cAAe,UAEjB28W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,OACR1J,UAAW3sC,EAAM6mD,QAAQ,GACzBta,aAAcvsC,EAAM4/C,MAAMrT,cAE5B0wU,iBAAkB,CAChB78W,MAAO,OACPi2C,OAAQ,MACRl1C,SAAU,EACVD,UAAW,OACXN,QAAS,QAEXimT,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACfC,eAAgB,SAChB61C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlBwxU,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,WAEZwvU,kBAAmB,CACjBxvU,SAAU,QAEZ4qC,KAAM,CACJ5qC,SAAU,UACVuJ,UAAW,UACXtX,UAAWphC,EAAMZ,QAAQ,MAE3Bg1f,WAAY,CACV7zf,cAAe,MACfg7C,WAAY,UAEd+4c,aAAc,CACZ57c,UAAW,UACX3B,WAAY,GAEdu2O,UAAW,CACTxjP,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,SAkpBtB,CAAE6J,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,kBAAQjyE,IA7DiB,SAACjC,GAC1B,MAAO,CACLA,WACAikiB,wBAAyB,SAACM,GACxBvkiB,EAAS,IAAIi4C,KAA0B,CACrC52C,QAAS,CAAEy9E,MAAO,GAClBF,QAAS,CAAE9nF,IAAK,CAAC,CAAE0rX,YAAa,CAAE3rX,GAAI0tiB,UAG1CL,0BAA2B,SAAC1hL,EAAqBnhX,EAAsCu9E,GACrF5+E,EAAS,IAAIq3C,KAAgC,CAC3CmrU,cACAnhX,UACAu9E,cAGJosU,WAAY,SAACxnE,GACXxjV,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,GACJxliB,MAAOikV,KAETxjV,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyuiB,GACJ/ke,MAAM,MAGVmtV,YAAa,WACXntZ,EAAS,IAAI63B,OAEfgsgB,gDAAiD,SAACrhL,EAAqB+5C,EAAkBF,EAAqDh7Z,EAAuCu9E,EAAkBkxU,EAAYk1I,GACjNhliB,EAAS,IAAIq1C,KAAsD,CACjEmtU,cACA+5C,WACAF,kBACAz9U,UACAv9E,QAASA,GAAoB6K,GAC7B4jZ,YACAk1I,mBAoBO16f,CAKb24f,I,2BC10BW8B,GAAwB,qBAkVtBz6f,yBACbgG,aAxTa,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN3L,YAA+B,EAAlBtmC,EAAMZ,WAErB/iE,KAAM,CACJ+jE,MAAO,SAoTTn8B,YAAgB,gBAChB0/D,mBA9EsB,SAAC73E,EAAOyF,GAC9B,IAAMmjiB,EAA8BrxU,eAAwCv3N,GACtEs3E,GAA2C,OAA3Bsxd,QAA2B,IAA3BA,OAAA,EAAAA,EAA6B3rkB,IAAI,OAAQ2rkB,EAA4BlokB,IAAI,QAASkokB,GAA6BrxjB,OAAS,GAE9I,OAAO,aACL+/F,gBACAsxd,+BACG98hB,YAAyB,CAC1BqoE,WAAYC,wBAAcs0d,IAC1Bp1I,qBAAsB9+T,aAA+Bk0c,IACrDE,4BAA6BrxU,gBAH5BzrN,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAkliB,sBAAuB,SAAC9B,EAAyD5gL,EAAqB3+B,EAAsBisE,EAAqEtF,GAC/LxqZ,EAAS,IAAI22C,IAAgC,CAC3Cysf,sBACA5gL,cACA3+B,aACAisE,YACAtF,oBAGJ26I,gDAAiD,SAAC/B,EAAyD5gL,EAAqBnhX,EAAsCu9E,EAAkB4rU,GACtLxqZ,EAAS,IAAIy2C,IAA8D,CACzE2sf,sBACA5gL,cACA5jS,UACAv9E,QAASA,GAAoB6K,GAC7Bs+Y,oBAGJ46I,iCAAkC,WAChCpliB,EAAS,IAAI61C,KAAqC,CAAEutf,oBAAqBn7jB,oBAE3EwpZ,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyuiB,GACJ/ke,MAAM,KAERhgE,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,GACJxliB,MAAO,MAETS,EAAS,IAAI61C,KAAqC,CAAEutf,oBAAqBn7jB,oBAE3Eo9jB,sBAAuB,SAAC7iL,EAAqB+5C,EAAkBF,EAAqDvM,EAAsEtF,GACxLxqZ,EAAS,IAAIu1C,KAA4B,CACvCitU,cACA+5C,WACAF,kBACAvM,YACAtF,oBAGJq5I,gDAAiD,SAACrhL,EAAqB+5C,EAAkBF,EAAqDh7Z,EAAsCu9E,EAAkB4rU,GACpMxqZ,EAAS,IAAIq1C,KAAsD,CACjEmtU,cACA+5C,WACAF,kBACAz9U,UACAv9E,QAASA,GAAoB6K,GAC7Bs+Y,oBAGJ86I,uBAAwB,SAAC9iL,EAAqBzxZ,GAC5CivC,EAAS,IAAIm1C,KAAsC,CAAEqtU,cAAazxZ,gBAStE6rU,oBAAU,CACR9pN,KAAMiyd,GACNloQ,kBAAkB,EAClBC,oBAAqB,IAPVxyP,EA9SW,SAACi7f,GAAuD,IAAD,EAE7E/iL,EAqBE+iL,EArBF/iL,YACAE,EAoBE6iL,EApBF7iL,aACAn0U,EAmBEg3f,EAnBFh3f,QAHF,EAsBIg3f,EAlBFjiL,mBAJF,SAKEzwR,EAiBE0yc,EAjBF1yc,WACAjU,EAgBE2md,EAhBF3md,QACAv9E,EAeEkkiB,EAfFlkiB,QAPF,EAsBIkkiB,EAdF/0d,kBARF,MAQevoG,gBARf,EASEg9jB,EAaEM,EAbFN,4BACAt1I,EAYE41I,EAZF51I,qBACA3vX,EAWEulgB,EAXFvlgB,MACAolgB,EAUEG,EAVFH,iCACA3zK,EASE8zK,EATF9zK,YACA6zK,EAQEC,EARFD,uBACAJ,EAOEK,EAPFL,sBACAC,EAMEI,EANFJ,gDACAE,EAKEE,EALFF,sBACAxB,EAIE0B,EAJF1B,gDACA7jiB,EAGEuliB,EAHFvliB,SACA03R,EAEE6tQ,EAFF7tQ,aACAt2S,EACEmkjB,EADFnkjB,EAGIokjB,EAAmB,OAAG71I,QAAH,IAAGA,OAAH,EAAGA,EAAsB35T,YAC5C85T,EAAS,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAsBG,UAClCtF,EAAa,OAAGmF,QAAH,IAAGA,OAAH,EAAGA,EAAsBnF,cACtC3mE,EAAU,OAAG8rE,QAAH,IAAGA,OAAH,EAAGA,EAAsB9rE,WAEzC,EAA8D/pV,WAAemriB,GAA7E,mBAAOtB,EAAP,KAAgC8B,EAAhC,KACA,EAAoC3riB,YAA0C,OAA3BmriB,QAA2B,IAA3BA,GAAA,UAAAA,EAA6B7rkB,IAAI,gBAAjC,eAA2C9C,aAAc,IAA5G,mBAAOovkB,EAAP,KAAmBC,EAAnB,KACA,EAAwC7riB,YAAe,GAAvD,mBAAO8vZ,EAAP,KAAqB4G,GAArB,KACA,GAA4B12Z,YAAe,GAA3C,qBAAOrwB,GAAP,MAAegnb,GAAf,MACA,GAAwB32Z,WAA2C4oX,GAAe6sC,aAAY7sC,IAAyBz6Y,iBAAvH,qBAAO+hN,GAAP,MAAasmI,GAAb,MACA,GAA0Cx2T,YAAe,GAAzD,qBAAO62Z,GAAP,MAAsBC,GAAtB,MAEMg1I,GAAyB,OAAGjC,QAAH,IAAGA,OAAH,EAAGA,EAAyBvqkB,IAAI,MAE/D0gC,aAAgB,WACV0riB,GACFxliB,EAASu/B,YAAOwlgB,GAAuB,cAAeS,MAEvD,CAACA,IAEJ1riB,aAAgB,WAAO,IAAD,EACpB2riB,EAA2BR,GAC3BU,GAAyC,OAA3BV,QAA2B,IAA3BA,GAAA,UAAAA,EAA6B7rkB,IAAI,gBAAjC,eAA2C9C,aAAc,IACvEg6V,GAAQk/F,aAAe,OAACy1I,QAAD,IAACA,OAAD,EAACA,EAA6B7rkB,IAAI,UAAY6O,mBACpE,CAACg9jB,IAEJnriB,aAAgB,WACdw2T,GAAQoyD,GAAe6sC,aAAY7sC,IAAyBz6Y,mBAC3D,CAACy6Y,IAEJ,IAAMpwQ,GAAe9hC,EAAWp3G,IAAI,gBAC9BqzH,GAAWjc,EAAWp3G,IAAI,YAE1ByskB,GAA0B5/Y,oBAAS,SAACxoL,EAAQ+gB,GAChDgya,IAAgB,GAChBxwZ,EAAS,IAAI6lC,IACX,CACEtpC,QAAS,CACPo/D,QAAS,MACTC,SAAU,gCACV5zD,OAAQ,CACNw6W,eAEF12U,KAAM,CACJ/6E,MAAOytB,MAIb,SAACq9E,GACC,IAAKA,EAAQp1D,IAAK,CAChB,IACMojZ,EADgBpra,iBAAOo9E,GACU5lF,MAAM,CAAC,OAAQ,UAAW,MAAO,WACxEw6a,GAAU5G,GACNA,GACF7pZ,EAASogC,YAAW2kgB,GAAuB,CAAEh0kB,MAAOqwB,EAAE,sDACtD4e,EAAS0gC,YAAMqkgB,GAAuB,WAEtC/kiB,EAAS2/B,YAAkBolgB,KAG/Bv0I,IAAgB,SAGnB,KAqFH,OACE,eAAC,IAAD,CACE7rU,SAAUogd,GACVrhJ,SAvDa,WACf1jX,IACAwwX,IAAgB,GAChBC,IAAU,GACVngG,GAAQoyD,EAAe6sC,aAAY7sC,GAAgBz6Y,iBACnD2ob,IAAiB,GACjB60I,EAA2Bx9jB,iBAC3Bm9jB,IACAO,EAAc,IACd3liB,EAAS,IAAIi1C,KAA+C,CAAE6wf,iBAAkBx4jB,qBA+C9EihE,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAJnB,SAOE,wBAAM+kT,SAAU+F,GAhDH,SAACl3T,GAAuB,IAAD,UAEtC,GAAKwpN,GAAKv/M,QAAV,CAKA,IAAMw8M,EAAI,UAAGzmN,EAAOyV,MAAM,CAAC,QAAS,WAA1B,iBAAG,EAA4B49G,cAA/B,aAAG,EAAoCplF,cAE3C20hB,EAAsBn7jB,cAAI,yBAC9B+tH,YAAax1H,EAAOpH,IAAI,gBACpB6tN,EAAO,CAAEA,QAAS,IAFO,IAG7Bl2N,OAAO,UAAAyP,EAAOyV,MAAM,CAAC,QAAS,iBAAvB,mBAAkC3f,kBAAlC,eAA8Cu9H,OAAOplF,iBAArD,OAAsEi3hB,QAAtE,IAAsEA,GAAtE,UAAsEA,EAAYpvkB,kBAAlF,aAAsE,EAAwBu9H,OAAOplF,gBAAiB,GAC7Hu7K,KAAMA,GAAKpxN,kBAGTgtkB,IACE91I,GACFu1I,EACE7iL,EACAojL,GACAxC,EACAtzI,EACAtF,GAGJq5I,EACErhL,EACAojL,GACAxC,EACA/hiB,EACAmoZ,GAAiB32T,EAAYjU,GAC7B4rU,IAGFlnC,EAAc6hL,EAAgD/B,EAAqB5gL,EAAanhX,EAASmoZ,GAAiB32T,EAAYjU,GAAU4rU,GAAiB06I,EAAsB9B,EAAqB5gL,EAAa3+B,EAAYisE,EAAWtF,GAElP/4B,SAlCEm/B,IAAiB,MA6CjB,UACE,gBAACtlI,EAAA,EAAD,WACE,eAACylI,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2BglE,MAAM,cAAcyT,QAAQ,KAA7E,SACgC3tF,EAA5BwkjB,GAA8B,sCAA2C,2CAG7E,eAAC13f,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,SAIE,eAACiiX,GAAA,EAAD,CACE1+S,aAAcA,GACd7lB,SAAUA,GACVu9F,KAAMvrM,iBAAOurM,IACb2mO,cAAeA,GACfM,aA1GS,WACnB3gG,GAAQtmI,GAAKjtN,IAAL,UAAYu1I,GAAah8G,GAAzB,YAA+Bm2F,GAASn2F,IAAM,CACpDg8G,aAAc,CAAEh8G,GAAIg8G,GAAah8G,GAAIzyB,KAAMyuI,GAAavhJ,OACxD07H,SAAU,CAAEn2F,GAAIm2F,GAASn2F,GAAIzyB,KAAM4oH,GAAS17H,UAE9C6/b,IAAiB,GACjB5wZ,EAASu/B,YAAOwlgB,GAAuB,eAAgB,OACvD/kiB,EAASu/B,YAAOwlgB,GAAuB,WAAY,QAoGzC7zI,gBAjGY,SAAC3gR,GACvB+/K,GAAQtmI,GAAKnsG,OAAL,UAAe0yD,EAAIj+B,aAAah8G,GAAhC,YAAsCi6I,EAAI9jD,SAASn2F,OAiGjDoviB,WAAU,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAYpvkB,WACxByvkB,kBAAgD,MAA7BH,GACnBI,+BAhG2B,SAACxpc,EAAelxH,EAAas1G,GAGvC,IAAD,EAFrBgld,KACHD,GAAiB,OAAHr6jB,QAAG,IAAHA,OAAA,EAAAA,EAAKhV,aAAc,IAClB,UAAXsqH,IACFild,GAAwB,KAAD,OAAOv6jB,QAAP,IAAOA,GAAP,UAAOA,EAAKhV,kBAAZ,aAAO,EAAiBu9H,QAC/Cyxc,EAAuB9iL,EAAD,OAAcl3Y,QAAd,IAAcA,OAAd,EAAcA,EAAKhV,eA4FnC2vkB,0BAvFsB,SAAC5pI,GACjCopI,EAA2BhnjB,iBAAO49a,IAClCr8Z,EAAS,IAAI61C,KAAqC,CAAEutf,oBAAqB3kjB,iBAAO49a,MAChFspI,EAAc,IACd3liB,EAAS2/B,YAAkBolgB,aAuFvB,gBAACt5Q,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAASu3S,EACTn2T,MAAM,UACN7sB,UAAWF,EAAQi0C,OAHrB,SAKIphG,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEzkH,KAAK,SACL+lG,MAAM,UACN7sB,UAAWF,EAAQi0C,OACnBjQ,SAAUq3U,GAAiBngb,KAAWm8jB,GAJxC,SAMgCxkjB,EAA5BwkjB,GAA8B,qBAA0B,iC,uIC7R1DM,E,iBAAAA,K,sCAAAA,E,mCAAAA,M,KAKL,IAAMl+M,EAAb,sCACkBzyX,KAAO2wkB,EAAsC/+M,mBAGlDc,EAEX,WACS1rV,GACN,yBADMA,UACP,KAHchnC,KAAO2wkB,EAAsCh/M,kB,yeCCzDriQ,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACR/nR,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpCurM,YAAa,CACXt3O,QAAS,QAEXklL,QAAS,CACP9+I,YAAatmC,EAAMZ,QAAQ,IAE7BqgD,WAAY,CACVr/C,MAAO,GACPi2C,OAAQ,IAEVu/c,cAAe,CACbx1f,MAAO,qBAETy1f,WAAY,CACVz1f,MAAO,IAET01f,GAAI,CACF3md,SAAU,SACVoM,WAAY,SACZd,aAAc,iBAiMH1gD,oBACb91B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MAGwB,SAAC2D,GAAD,MAAwC,CAAEA,eAEtDsqC,EA9K0D,SAAC,GAUnE,IAAD,IATJ2pU,wBASI,MATe,KASf,EARJ7rF,EAQI,EARJA,SACAjyR,EAOI,EAPJA,MACAkyR,EAMI,EANJA,OACA1jD,EAKI,EALJA,QACAn0J,EAII,EAJJA,WACA6lJ,EAGI,EAHJA,SACAr2N,EAEI,EAFJA,SACA5e,EACI,EADJA,EAGMk8E,EAAS8zK,cACT7iM,EAAUs2C,IACVyhd,EAAej+Q,EAAOvxS,KAAK,MAC3B+xS,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAE5EqjH,EAAQu9L,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkB7rF,GAAWngT,iBAC9D8gT,EAAM,OAAGz9L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,SAAU,IAEpC,EAQKgwT,YAAcf,GARnB,IACEgB,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAEFE,EAPF,EAOEA,QAGF7vR,aAAgB,WACd,GAAKwvR,EAAL,CAIA,IAAMQ,EAAkBjB,EAASxiT,eAAc,SAACywQ,GAC9CA,EAAIpyQ,SAAS,CAAC,QAASuvY,EAAkB7rF,IAAW,SAAC98S,GACnD,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,EAAalwT,IAAI,MACzB2wT,SAAUT,EAAalwT,IAAI,gBAC3B4wT,SAAUV,EAAalwT,IAAI,aAC3BhI,KAAMk4T,EAAalwT,IAAI,cAG3B09Q,EAAIpxQ,SAAS,CAAC,QAAS0iT,OAEzBpoR,EAASu/B,YAAO82L,EAAU,OAAQyzD,OACjC,CAACR,IAEJ,IAA0Bi9Q,EASpBx8Q,EAAQ,OAAGz+L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,WAAY,IAClCk7Y,EAAWvrF,IAVSw9Q,EAUkBx9Q,EATxBzrN,EAAOJ,QACvBqpe,EACA,CAAE5qe,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,KAS7G,OACE,qCACE,cAACmpG,EAAA,EAAD,CAAUs4K,OAAO,EAAjB,SACE,eAAC1xT,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqB,QAAS,EAApD,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B54E,MAE/B,cAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,SAEIgmU,EACI,qCACE,cAACpmU,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,EAAQ43f,cAAtD,SACE,cAAC7md,EAAA,EAAD,CAASC,MAAOwqM,EAAhB,SACE,cAACpnM,EAAA,EAAD,CAAMF,KAAM6xR,EAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD9pF,QAGxD,cAAC77O,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,SACE,cAACr2c,EAAA,EAAD,CACEthD,UAAWF,EAAQyhD,WACnB9V,QAAS,WACP,IAAM8lL,EAAU6oB,GAAYA,EAASxiT,eAAc,SAACywQ,GAC9CA,EAAI7gQ,MAAM,CAAC,QAASg+X,EAAkB7rF,EAAU,SAClDtxC,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkB7rF,EAAU,WACnDtxC,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkB7rF,EAAU,aACnDtxC,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkB7rF,EAAU,aACnDtxC,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkB7rF,EAAU,UAEnDtxC,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkB7rF,IAE3CtxC,EAAIpxQ,SAAS,CAAC,QAAS0iT,OAEzBpoR,EAASu/B,YAAO82L,EAAU,OAAQ2pC,KAdtC,SAiBE,cAAC,IAAD,WAIN,qCACE,cAAC9xN,EAAA,EAAD,CACEe,MAAM,EACNY,KAAK,SACLvB,WAAW,SACXO,WAAW,EACXJ,UAAWF,EAAQ43f,cALrB,SAQI38Q,EACI,eAACt7O,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC47O,EAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoBjuN,MAAM,UAAUqV,MAAO,CAAEj/B,SAAU,KAC3G,eAACm9B,EAAA,EAAD,WAAa06M,EAAb,UAEF,eAACr7O,EAAA,EAAD,WACE,cAAC2gC,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ83f,GAA/B,SAAqCjljB,EAAE,yBAEnCqoS,GACE,eAACv7O,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,cAAC,IAAD,CAAoByrB,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQonL,UACtE,cAAC9mJ,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,UAAlC,SAEI06M,IAAcU,IAAW/4T,KACrBgwB,EAAE,qCACFqoS,IAAcU,IAAW50T,KAAzB,UACK6rB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,0CAS9B,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,UACE,uBACE33f,UAAWF,EAAQw5O,YACnBxyT,KAAK,OACLsO,KAAK,OACLgtG,SAAU,SAACpzG,GAAD,OAAOksT,EAAQlsT,EAAE4kB,OAAO2wE,MAAM,KACxCq1N,OAAQi+Q,EACRhwiB,GAAI8xR,IAEN,uBAAOgC,QAAShC,EAAhB,SACE,cAAC9oM,EAAA,EAAD,CAASC,MAAOolJ,EAAhB,SACE,+BACE,cAAC50I,EAAA,EAAD,CACExd,SAAUi3M,EACV76O,UAAU,OACVF,UAAWF,EAAQyhD,WAHrB,SAKE,cAAC,IAAD,yBAWxB,cAAChE,EAAA,EAAD,CAASr9C,UAAU,a,yFC3MnBk2C,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACR/nR,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpCurM,YAAa,CACXt3O,QAAS,QAEXklL,QAAS,CACP9+I,YAAatmC,EAAMZ,QAAQ,IAE7BmqC,MAAO,CACL3oC,QAASZ,EAAMZ,QAAQ,GAAK,MAC5B6sC,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnCiuM,SAAU,CACRltM,WAAY,EACZ1G,YAAa,GAEfmZ,WAAY,CACVr/C,MAAO,GACPi2C,OAAQ,IAEVu/c,cAAe,CACbx1f,MAAO,qBAETy1f,WAAY,CACVz1f,MAAO,IAET01f,GAAI,CACF3md,SAAU,SACVoM,WAAY,SACZd,aAAc,iBA2VH1gD,oBACb91B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MAGwB,SAAC2D,GAAD,MAAwC,CAAEA,eAEtDsqC,EAxUwD,SAAC,GAUjE,IAAD,IATJ2pU,wBASI,MATe,KASf,EARJ7rF,EAQI,EARJA,SACAjyR,EAOI,EAPJA,MACAkyR,EAMI,EANJA,OACA1jD,EAKI,EALJA,QACAn0J,EAII,EAJJA,WACA6lJ,EAGI,EAHJA,SACAr2N,EAEI,EAFJA,SACA5e,EACI,EADJA,EAGMk8E,EAAS8zK,cACT7iM,EAAUs2C,IACVyhd,EAAej+Q,EAAOvxS,KAAK,MAC3B+xS,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAE5EqjH,EAAQu9L,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkB7rF,GAAWngT,iBAC9D8gT,EAAM,OAAGz9L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,SAAU,IAC9By9F,EAAG,OAAGy0B,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,MAAO,IAE9B,EAWKotkB,YAAmBn+Q,GAXxB,IACEgB,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAEFE,EAPF,EAOEA,QACA88Q,EARF,EAQEA,OACA/8Q,EATF,EASEA,aACAg9Q,EAVF,EAUEA,gBAGF,GAAkC5siB,WAAe,IAAjD,qBAAOqxR,GAAP,MAAkBC,GAAlB,MACA,GAAwCtxR,WAAe,IAAvD,qBAAO6siB,GAAP,MAAqBC,GAArB,MAEA9siB,aAAgB,WACd8siB,GAAgB/ve,GAAO,MACtB,CAACA,IAEJ/8D,aAAgB,WACd,GAAKwvR,EAAL,CAIA,IAAMQ,EAAkBjB,EAASxiT,eAAc,SAACywQ,GAC9CA,EAAIpyQ,SAAS,CAAC,QAASuvY,EAAkB7rF,IAAW,SAAC98S,GACnD,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,EAAalwT,IAAI,MACzB2wT,SAAUT,EAAalwT,IAAI,gBAC3B4wT,SAAUV,EAAalwT,IAAI,aAC3BhI,KAAMk4T,EAAalwT,IAAI,cAG3B09Q,EAAIpxQ,SAAS,CAAC,QAAS0iT,OAEzBpoR,EAASu/B,YAAO82L,EAAU,OAAQyzD,IAClC88Q,GAAgB,IAChBx7Q,GAAa,OACZ,CAAC9B,IAEJ,IAkD0Bi9Q,GAvBpBM,GAAwB,WAC5B,IAAMr8Q,EAAW3B,EAASnjT,SAAS,CAAC,QAASuuY,EAAkB7rF,IAAW1iT,SAAS,CAAC,QAAS0iT,IAC7FpoR,EAASu/B,YAAO82L,EAAU,OAAQm0D,IAClCd,EAAa,OA6BTK,GAAQ,OAAGz+L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,WAAY,IAClCk7Y,GAAWvrF,IAVSw9Q,GAUkBx9Q,EATxBzrN,EAAOJ,QACvBqpe,GACA,CAAE5qe,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,KASvG2od,KAAgB,OAACr9Q,QAAD,IAACA,OAAD,EAACA,EAAW7qT,SAAS,aAAc6qT,EACnDs9Q,IAAwB,OAATt9Q,QAAS,IAATA,OAAA,EAAAA,EAAW7qT,SAAS,aAAc6qT,EAEvD,OACE,qCACE,cAACniG,EAAA,EAAD,CAAUs4K,OAAO,EAAjB,SACE,eAAC1xT,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,QAAtB,UACE,eAACzC,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqB,QAAS,EAApD,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B54E,MAG5Bm+W,KAAa9qF,EACV,eAACt7O,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,UACE,cAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,EAAQ43f,cAAtD,SACE,cAAC7md,EAAA,EAAD,CAASC,MAAOwqM,GAAhB,SACE,cAACpnM,EAAA,EAAD,CAAMF,KAAM6xR,GAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD9pF,SAGxD,cAAC77O,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,SACE,cAAC9md,EAAA,EAAD,CAASC,MAAQ+0R,IAAYz9S,EAAOz1E,EAAE,2CAA6C,GAAnF,SACE,cAAC2uG,EAAA,EAAD,CACEthD,UAAWF,EAAQyhD,WACnB9V,QAAS2sd,GAFX,SAIE,cAAC,IAAD,aAKR,eAAC34f,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,UACE,cAACJ,EAAA,EAAD,CACEe,MAAM,EACNY,KAAK,SACLvB,WAAW,SACXO,WAAW,EACXJ,UAAWF,EAAQ43f,cALrB,SAQI38Q,EACI,eAACt7O,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC47O,EAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoBjuN,MAAM,UAAUqV,MAAO,CAAEj/B,SAAU,KAC3G,eAACm9B,EAAA,EAAD,WAAa06M,EAAb,OACA,cAAC0N,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAM,GAAIu/G,MAAO,CAAE4M,WAAY,QAEnE,eAACrvC,EAAA,EAAD,WACE,cAAC2gC,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ83f,GAA/B,SAAqCjljB,EAAE,yBAEnC0ljB,IACE,eAAC54f,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,cAAC,IAAD,CAAoByrB,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQonL,UACtE,cAAC9mJ,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,UAAlC,SAEI06M,IAAcU,IAAW/4T,KACrBgwB,EAAE,qCACFqoS,IAAcU,IAAW50T,KAAzB,UACK6rB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,0CAS9B,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,UACE,uBACE33f,UAAWF,EAAQw5O,YACnBxyT,KAAK,OACLsO,KAAK,OACLgtG,SAAU,SAACpzG,GAAD,OAAOksT,EAAQlsT,EAAE4kB,OAAO2wE,MAAM,KACxCq1N,OAAQi+Q,EACRhwiB,GAAI8xR,IAEN,uBAAOgC,QAAShC,EAAhB,SACE,cAAC9oM,EAAA,EAAD,CAASC,MAAO1oB,EAAMz1E,EAAE,yCAA2CujP,EAAnE,SACE,+BACE,cAAC50I,EAAA,EAAD,CACEphD,UAAU,OACV4jC,SAAUi3M,GAAe92T,QAAQmkG,GACjCpoB,UAAWF,EAAQyhD,WAHrB,SAKE,cAAC,IAAD,qBAUpB,eAAC9hD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGrB,WAAW,SAASuB,KAAK,SAA5D,UACE,cAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,IAEpB4mB,EACI,eAAC3oB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,EAAQ43f,cAAtD,UACE,cAAC7md,EAAA,EAAD,CAASC,MAAO1oB,EAAhB,SACE,cAAC8rB,EAAA,EAAD,CAAMF,KAAM5rB,EAAKpoB,UAAWF,EAAQslU,SAAUxxX,OAAO,SAASgiT,IAAI,WAAlE,SAA8ExtO,MAG9Ekwe,IACE,eAAC74f,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC,IAAD,CAAoBgtB,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQonL,UACtE,cAAC9mJ,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,UAAlC,SAEI06M,IAAcU,IAAW68Q,YACrB5ljB,EAAE,qCACFqoS,IAAcU,IAAW88Q,YAAzB,UACK7ljB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,wCAOpB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWU,KAAK,SAASpB,UAAWF,EAAQ63f,WAAvF,UACE,cAAC9md,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SACE,+BACE,cAAC2uG,EAAA,EAAD,CACEthD,UAAWF,EAAQyhD,WACnBzd,SAAUi3M,EACVtvM,QAAS,kBAAMwsd,EAAgB7ve,IAHjC,SAKE,cAAC,IAAD,UAIN,cAACyoB,EAAA,EAAD,CAASC,MAAQ+0R,IAAYz9S,EAAOz1E,EAAE,2CAA6C,GAAnF,SACE,+BACE,cAAC2uG,EAAA,EAAD,CACEthD,UAAWF,EAAQyhD,WACnBzd,SAAUi3M,EACVtvM,QAAS2sd,GAHX,SAKE,cAAC,IAAD,gBAMV,eAAC34f,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,UACE,cAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ43f,cAArC,SACE,cAAC7md,EAAA,EAAD,CAASC,MAAO+0R,GAAWlzX,EAAE,0CAA4C,GAAzE,SACE,cAAC+0G,EAAA,EAAD,CACEjnB,WAAW,EADb,SAGE,cAACq8M,EAAA,EAAD,CACEh2T,KAAK,OACLw5G,QAAQ,WACRsR,YAAaj/F,EAAE,mCACfrwB,MAAO41kB,GACP91d,SA3KT,SAACpzG,GAChBmpkB,GAAgBnpkB,EAAE4kB,OAAOtxB,QA2KDwhH,SAAUi3M,GAAe92T,QAAQ4hZ,IACjCniS,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQurC,QAGnB0xM,oBAAqB,CACnB56O,OAAQ,QACRrC,QAAS,CACP2rM,UAAW3rM,EAAQk8O,WAGvBjnT,MAAO9Q,QAAQy4T,IACfjpM,WAAYipM,WAKpB,cAACj9O,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,SACE,cAAC9md,EAAA,EAAD,CAASC,MAAkBn+F,EAAXkzX,GAAa,yCAA8C,2CAA3E,SACE,+BACE,cAACvkR,EAAA,EAAD,CACExd,SAAUi3M,GAAe92T,QAAQ4hZ,IACjCp6R,QAhNL,WAGnB,GAFAkxM,GAAa,IAETu7Q,IAAgBj7Q,YAAMi7Q,IAAe,CACvCF,EAAOE,IAEP,IAAM3mS,EAAU6oB,EAAStjT,MAAM,CAAC,QAAS0uY,EAAkB7rF,EAAU,OAAQu+Q,IAAcjhkB,SAAS,CAAC,QAAS0iT,IAC9GpoR,EAASu/B,YAAO82L,EAAU,OAAQ2pC,SACzB2mS,KAAiBj7Q,YAAMi7Q,KAChCv7Q,GAAahqS,EAAE,2BAwMOqtD,UAAWF,EAAQyhD,WAHrB,SAKE,cAAC,IAAD,uBAUtB,cAAChE,EAAA,EAAD,CAASr9C,UAAU,aCxXZ+yX,EAAa,CACxB,CACE/nc,IAAK,UACLw8B,MAAO,oBACPkyR,OAAQ,CAAC,OAAQ,QAAS,QAC1B1jD,QAAS,uCAEX,CACEhrQ,IAAK,wBACLw8B,MAAO,iCACPkyR,OAAQ,CAAC,QACT1jD,QAAS,oCACTw8L,YAAY,GAEd,CACExnc,IAAK,MACLw8B,MAAO,gBACPkyR,OAAQ,CAAC,QACT1jD,QAAS,oCACTg9L,oBAAoB,GAEtB,CACEhoc,IAAK,eACLw8B,MAAO,wBACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,2BACLw8B,MAAO,oCACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,kBACLw8B,MAAO,2BACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,iBACLw8B,MAAO,0BACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,mBACLw8B,MAAO,2BACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,kBACLw8B,MAAO,2BACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,sBACLw8B,MAAO,+BACPkyR,OAAQ,CAAC,QACT1jD,QAAS,sCAkBAq9L,EAAa,CACxB,CACEroc,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,mBACLw8B,MAAO,2BACPkyR,OAAQ,CAAC,OAAQ,OAAQ,OAAQ,QACjC1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,oBAEtB,CACExtkB,IAAK,eACLw8B,MAAO,wBACPkyR,OAAQ,CAAC,QACT1jD,QAAS,qCAEX,CACEhrQ,IAAK,aACLw8B,MAAO,sBACPkyR,OAAQ,CAAC,OAAQ,QAAS,QAC1B1jD,QAAS,uCAEX,CACEhrQ,IAAK,YACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QAAS,QAC1B1jD,QAAS,uCAEX,CACEhrQ,IAAK,iBACLw8B,MAAO,2BACPkyR,OAAQ,CAAC,OAAQ,QAAS,QAC1B1jD,QAAS,wCAIA48L,EAAkB,CAC7B,CACE5nc,IAAK,QACLw8B,MAAO,kBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,MACLw8B,MAAO,gBACPkyR,OAAQ,CAAC,OAAQ,OAAQ,QACzB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,gBAEtB,CACExtkB,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,YACLw8B,MAAO,sBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,YACLw8B,MAAO,sBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,WACLw8B,MAAO,qBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,YACLw8B,MAAO,sBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,YAEtB,CACExtkB,IAAK,YACLw8B,MAAO,sBACPkyR,OAAQ,CAAC,OAAQ,QACjB1jD,QAAS,qCACTuiU,MAAO,CAAEC,UAAW,aAIXC,EAAgB1lI,EAAW/gc,OAAOqhc,GAClCqlI,EAAeD,EAAczmkB,OAAO4gc,GAEpCW,EAAW,CAOtB,CACEvoc,IAAK,kBACLw8B,MAAO,4BAET,CACEx8B,IAAK,kBACLw8B,MAAO,6BA0BL0uF,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DojU,cAAe,CACb9qd,SAAUjsC,EAAM82C,WAAWu/B,MAAMpqC,eA6ItBlyC,sBACb91B,YAAgB,gBAChBwqE,cACA9K,mBAbsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,EAzIgC,SAAC/qC,GAC9C,IACEne,EAGEme,EAHFne,EACAi1O,EAEE92N,EAFF82N,SAFF,EAII92N,EADF00W,wBAHF,MAGqB,KAHrB,EAKM1lU,EAAUs2C,IAEV0id,EAAoB,SAACC,GACzB,OAAOA,EAAWnpkB,KAAI,YAAyD,IAAtD1E,EAAqD,EAArDA,IAAKw8B,EAAgD,EAAhDA,MAAOkyR,EAAyC,EAAzCA,OAAQ1jD,EAAiC,EAAjCA,QAASuiU,EAAwB,EAAxBA,MACpD,OAD4E,EAAjB/lI,WAGvD,cAAC,EAAD,CAEEltD,iBAAkBA,EAClB7rF,SAAUzuT,EACVw8B,MAAO/U,EAAE+U,GACTkyR,OAAQA,EACR1jD,QAASvjP,EAAEujP,EAASuiU,GACpB7wU,SAAUA,GANL18P,GAYT,cAAC,EAAD,CAEEs6Y,iBAAkBA,EAClB7rF,SAAUzuT,EACVw8B,MAAO/U,EAAE+U,GACTkyR,OAAQA,EACR1jD,QAASvjP,EAAEujP,EAASuiU,GACpB7wU,SAAUA,GANL18P,OAuFb,OACE,eAACu0E,EAAA,EAAD,CACE+B,GAAI,GACJpB,WAAW,EACXI,MAAM,EACNU,QAAS,EAJX,UA3EA,cAACzB,EAAA,EAAD,CACEmB,GAAI,EACJE,GAAI,GACJU,GAAI,GACJhB,MAAM,EAJR,SAME,cAAC,IAAD,CACEw4f,UAAW,cAACC,EAAA,EAAD,CAAej5f,UAAWF,EAAQ+4f,cAAehse,MAAM,UAAvD,SAAkEl6E,EAAE,4BADjF,SAGE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,cAACzB,EAAA,EAAD,CACEqB,GAAI,EACJU,GAAI,GACJhB,MAAM,EAHR,SAKGs4f,EAAkB7lI,KAErB,cAACxzX,EAAA,EAAD,CACEqB,GAAI,EACJU,GAAI,GACJhB,MAAM,EAHR,SAKGs4f,EAAkBvlI,YAQ3B,cAAC9zX,EAAA,EAAD,CACEmB,GAAI,EACJE,GAAI,GACJU,GAAI,GACJhB,MAAM,EAJR,SAME,cAAC,IAAD,CACEw4f,UAAW,cAACC,EAAA,EAAD,CAAej5f,UAAWF,EAAQ+4f,cAAehse,MAAM,UAAvD,SAAkEl6E,EAAE,kCADjF,SAGGmmjB,EAAkBhmI,OAMvB,cAACrzX,EAAA,EAAD,CACEmB,GAAI,EACJE,GAAI,GACJU,GAAI,GACJhB,MAAM,EAJR,SAME,cAAC,IAAD,CACEw4f,UAAW,cAACC,EAAA,EAAD,CAAej5f,UAAWF,EAAQ+4f,cAAehse,MAAM,UAAvD,SAAkEl6E,EAAE,4BADjF,SAII8gb,EAAS7jc,KAAI,YAAqB,IAAlB1E,EAAiB,EAAjBA,IAAKw8B,EAAY,EAAZA,MACnB,OACE,cAACwxiB,EAAA,EAAD,CAEE1zL,iBAAkBA,EAClB99W,MAAOA,EACPgsa,QAASxoc,EACT08P,SAAUA,GAJL18P,iB,6BC3WrB,mHAGaiukB,EAAsB,iBACtBxqQ,EAAwB,uBAExBH,EAAoB,iBACmB,SAAlD3iO,IAAiBC,QAAQqte,IAOdC,EAAoB,SAACxhd,GAChC/rB,IAAiBG,QAAQmte,EAAqB1jkB,OAAOmiH,IACrDtiG,OAAO+se,cAAc,IAAIpiJ,MAAMtxC,M,oJCKjC,SAAsB,EAAtB,KAAE,OAAF,wB,4CAAO,WAAwB,EAAoC,GAA5D,yEACG,EAAS,EAAO,YADnB,uBAGqB,EAAO,OAH5B,WAGM,EAHN,QAGoC,KAHpC,gBAIC,EAAQ,EAAO,OAJhB,2D,sBAqBD,SAAU,EAAS,GACnB,IAAE,EACA,EACA,EACA,GAAyB,EAG3B,OAAK,SAAiB,QACL,IAAX,GACA,EAAS,EACT,EAAW,EACX,GAAe,GAGf70K,EA4GZ,SAAgB,EAAe,GAC3B,IAAM,EAAM,IAAI,WAAW,EAAE,OAAS,EAAE,QAGxC,OAFA,EAAI,IAAI,GACR,EAAI,IAAI,EAAG,EAAE,QACN,EAhHU,CAAO,EAAQ,GAK5B,IAFA,IAAM,EAAY,EAAO,OACrB,EAAY,EACT,EAAW,GAAW,CACrB,IACoB,KAAhB,EAAO,KACP,IAAc,GAGlB,GAAyB,GAK7B,IADA,IAAI,GAAW,EACR,EAAW,IAA0B,IAAb,IAAkB,EAC7C,OAAQ,EAAO,IACX,SACyB,IAAjB,IACA,EAAc,EAAW,GAE7B,MAEJ,QACI,GAAyB,EAC7B,QACI,EAAU,EAKhB,IAAW,IAAb,EAGA,MAIJ,EAAO,EAAO,SAAS,EAAW,GAAU,GAC5C,EAAY,EACZ,GAAe,EAGf,IAAc,EACd,OAAS,EACY,IAAd,IAGP,EAAS,EAAO,SAAS,GACzB,GAAY,IAYlB,SAAU,EACZ,EACA,EACA,GAEA,IAAI,EAAU,IACR,EAAU,IAAI,YAGpB,OAAO,SAAgB,EAAkB,GACrC,GAAoB,IAAhB,EAAK,OAEI,OAAT,QAAS,IAAT,KAAY,GACZ,EAAU,SACP,GAAI,EAAc,EAAG,CAGxB,IAAM,EAAQ,EAAQ,OAAO,EAAK,SAAS,EAAG,IACxC,EAAc,GAAoC,KAArB,EAAK,EAAc,GAA4B,EAAI,GAChF,EAAQ,EAAQ,OAAO,EAAK,SAAS,IAE3C,OAAQ,GACJ,IAAK,OAGD,EAAQ,KAAO,EAAQ,KACjB,EAAQ,KAAO,KAAO,EACtB,EACN,MACJ,IAAK,QACD,EAAQ,MAAQ,EAChB,MACJ,IAAK,KACD,EAAK,EAAQ,GAAK,GAClB,MACJ,IAAK,QACD,IAAM,EAAQ,SAAS,EAAO,IACzB,MAAM,IACP,EAAQ,EAAQ,MAAQ,MAehD,SAAS,IAKL,MAAO,CACH,KAAM,GACN,MAAO,GACP,GAAI,GACJ,WAAO,G,iVClLF,EAAyB,oBAGhC,EAAc,gBA+IpB,SAAS,EAAc,GACnB,IAAM,EAAc,EAAS,QAAQ,IAAI,gBACzC,KAAgB,OAAX,QAAW,IAAX,OAAW,EAAX,EAAa,WAAW,IACzB,MAAM,IAAI,MAAJ,sCAAyC,EAAzC,qBAA4E,I,WClJ7Eu/a,EAAwB,kBAM/BC,EAAiB,eAwBhB,IAAMC,EAAb,iDACU1tiB,UAAY,IAAIryB,IAD1B,KAGUggkB,iBAAgD,KAH1D,KAIUl3T,WAAqC,KAJ/C,KAKUm3T,YAA6B,KALvC,KAMUC,eAAuD,KANjE,KASUC,eAAgB,EAT1B,KAYUC,gBAAiC,KAZ3C,8CAcE,SAAkB9ykB,EAAc+4M,GAA+B,IAAD,OAM5D,OALKj5M,KAAKilC,UAAUhhC,IAAI/D,IACtBF,KAAKilC,UAAUv9B,IAAIxH,EAAM,IAAIrB,KAE/BmB,KAAKilC,UAAUlhC,IAAI7D,GAAMye,IAAIs6L,GAC7Bj5M,KAAKizkB,iBACE,WACL,IAAMvrkB,EAAM,EAAKu9B,UAAUlhC,IAAI7D,GAC3BwH,GACFA,EAAI8gH,OAAOywF,GAEb,EAAKg6X,oBAzBX,0BA8BE,SAAoBtgiB,GAClB,IAAM5yC,EA7CV,SAA0B4yC,GACxB,QAASA,KAAYA,EAAOwtD,YAA+B,MAAjBxtD,EAAOqtD,UAAoBrtD,EAAOstD,MA4C7Dize,CAAiBvgiB,GAAUA,EAAS,KAG5C5yC,GAAQA,EAAKkgG,QAAUjgG,KAAKgzkB,kBAC/BhzkB,KAAKgzkB,gBAAkB,MAEzBhzkB,KAAK4ykB,iBAAmB7ykB,EACxBC,KAAKizkB,mBAtCT,6BAyCE,WACE,IAAI94U,EAAQ,EAEZ,OADAn6P,KAAKilC,UAAUv4B,SAAQ,SAAAhF,GAASyyP,GAASzyP,EAAI3L,QACtCo+P,IA5CX,kBA+CE,SAAaj6P,EAAc86C,GACzB,IAAMtzC,EAAM1H,KAAKilC,UAAUlhC,IAAI7D,GAC3BwH,GACFA,EAAIgF,SAAQ,SAAAusM,GAAO,OAAIA,EAAQj+J,QAlDrC,4BAyDE,WACE,IAlEqBioO,EAAuBljR,EAmE5C,GADuBC,KAAKmzkB,kBAAoB,GAA8B,MAAzBnzkB,KAAK4ykB,kBAO1D,GAAI5ykB,KAAK4ykB,iBAAiB3ye,QAAUjgG,KAAKgzkB,gBAGzC,OAAIhzkB,KAAK07Q,YA5EYuH,EA6ECjjR,KAAK6ykB,YA7EiB9ykB,EA6EJC,KAAK4ykB,iBAAiB3ye,WA5EvDgjL,GAAYljR,GAAQkjR,IAAWljR,IAgFlCC,KAAKozkB,iBAAgB,GACrBpzkB,KAAKqzkB,eAAerzkB,KAAK4ykB,0BAI7B5ykB,KAAKqzkB,eAAerzkB,KAAK4ykB,uBAlBvB5ykB,KAAKozkB,oBA5DX,4BAiFE,SAAuBzgiB,GAAqC,IAAD,OAE9B,MAAvB3yC,KAAK8ykB,iBACPvsc,aAAavmI,KAAK8ykB,gBAClB9ykB,KAAK8ykB,eAAiB,MAExB,IAAMp3T,EAAa,IAAIC,gBACvB37Q,KAAK07Q,WAAaA,EAClB17Q,KAAK6ykB,YAAclgiB,EAAOstD,MAE1B,IAAMgxN,EAAWx4R,mBAASrK,WAAa,eDvErC,SAA2B,EAAoB,OACzC,EAOS,EAPjB,OACS,EAMQ,EANjB,QACQ,EAKS,EALjB,OACA,EAIiB,EAJjB,UACA,EAGiB,EAHjB,QACA,EAEiB,EAFjB,QACA,EACiB,EADjB,eACO,EAAU,EAAjB,MACG,EAAI,IAT0C,wFAW/C,OAAK,IAAI,SAAc,SAAC,EAAS,GAE3B,IAKA,EALE,EAAO,iBAAQ,GAMjB,SAAK,IACC,EAAe,QAChB,SAAS,QACV,IARH,EAAQ,SACH,EAAE,OAAS,GAWhB,GACD,SAAS,iBAAiB,mBAAoB,GAGlD,IAAI,EAjFiB,IAkFjB,EAAa,EACjB,SAAS,IACL,SAAS,oBAAoB,mBAAoB,GACjD,OAAO,aAAa,GACpB,EAAqB,QAId,OAAX,QAAW,IAAX,KAAa,iBAAiB,SAAS,WACnC,IACA,OAGJ,IAAM,EAAkB,OAAV,QAAU,IAAV,IAAc,OAAO,MAC7B,EAAoB,OAAX,QAAW,IAAX,IAAe,EAlCW,SAmC1B,IAnC0B,mEAAAzoB,EAAA,MAmCzC,+FACI,EAAuB,IAAI,gBAD/B,kBAG+B,EAAM,EAAK,+BAC3B,GAAI,CACP,UACA,OAAQ,EAAqB,UANzC,cAGc,EAHd,gBASc,EAAO,GATrB,uBAWc,EAAS,EAAS,KAAM,EAAS,GAAY,YAC3C,EAEA,EAAQ,GAAe,SAGhB,EAAQ,MAEpB,YACC,EAAgB,IACjB,KArBX,OAuBe,OAAP,QAAO,IAAP,OACA,IACA,IAzBR,wBA2BQ,GA3BR,2BA2Ba,EAAqB,OAAO,QAE7B,IAEU,EAA8B,QAAd,EAAO,OAAP,QAAO,IAAP,OAAO,EAAP,EAAO,aAAO,QAAI,EACxC,OAAO,aAAa,GACpB,EAAa,OAAO,WAAW,EAAQ,GACzC,MAAO,GAEL,IACA,EAAO,GArCvB,0DAnCyC,wBA8EzC,QCfJ2tkB,CAFS,UAAM3giB,EAAOwtD,WAAb,6CAA4DxtD,EAAOqtD,QAEtD,CACpB47K,OAAQF,EAAWE,OACnB23T,gBAAgB,EAChBriR,QAAQ,eACLD,EAAWt+Q,EAAOstD,OAErBuze,OAAO,WAAD,4BAAE,WAAOzqd,GAAP,eAAApjH,EAAA,yDACkB,MAApBojH,EAAStjB,QAAsC,MAApBsjB,EAAStjB,OADlC,sBAEEr0D,EAAM,IAAIxpC,MAAJ,2BAA8BmhH,EAAStjB,UAC/Cj3F,KAAOkkkB,EACLthiB,EAJF,OAMF,EAAK2hiB,eACP,EAAKnqe,KAAK6pe,EAAuB,IAEnC,EAAKM,eAAgB,EATf,2CAAF,mDAAC,GAWPj0E,UAAW,SAAC33X,GACV,GAAKA,EAAMnsF,KAGX,IACE,IAAMgsU,EAASr4W,KAAK6tC,MAAM2qF,EAAMnsF,MAC1B96C,EAAO8mX,EAAO9mX,MAAQinI,EAAMA,MAC9BjnI,GACF,EAAK0oG,KAAK1oG,EAAM8mX,GAElB,YAIJuhH,QAAS,SAACn3b,GACR,GAAIA,aAAexpC,OAASwpC,EAAI5iC,OAASkkkB,EACvC,MAAMthiB,EAER,OA7JmB,OA+JpBmlC,MAAK,WAIF,EAAKmlM,aAAeA,IACtB,EAAKA,WAAa,KAClB,EAAKm3T,YAAc,KACnB,EAAKY,wBAEN9sY,OAAM,SAACv1J,GAGJ,EAAKsqO,aAAeA,IACtB,EAAKA,WAAa,KAClB,EAAKm3T,YAAc,KACfzhiB,aAAexpC,OAASwpC,EAAI5iC,OAASkkkB,IACvC,EAAKM,gBAAkBrgiB,EAAOstD,aAnJxC,+BAyJE,WAAmC,IAAD,OACL,MAAvBjgG,KAAK8ykB,iBAGT9ykB,KAAK8ykB,eAAiBj6hB,YAAW,WAC/B,EAAKi6hB,eAAiB,KACtB,EAAKG,mBA3LgB,QA4B3B,6BAsKE,WAA8D,IAAtCS,EAAqC,wDAChC,MAAvB1zkB,KAAK8ykB,iBACPvsc,aAAavmI,KAAK8ykB,gBAClB9ykB,KAAK8ykB,eAAiB,MAEpB9ykB,KAAK07Q,YACP17Q,KAAK07Q,WAAWG,QAElB77Q,KAAK07Q,WAAa,KAClB17Q,KAAK6ykB,YAAc,KACda,IACH1zkB,KAAK+ykB,eAAgB,OAjL3B,KAuLa1ye,EAAY,IAAIsye,G,6BCrNtB,IAAK57J,EAAZ,kC,SAAYA,K,gCAAAA,E,gBAAAA,E,qCAAAA,M,oCCHZ,wZACO,IAAMl3X,EAAsB,YAEtB8zhB,EAAsB,EACtBC,EAA0B,IAE1BC,EAA0B,UAC1BC,EAA6B,EAC7BC,EAAsC,GACtCC,EAA4B,OAC5BC,EAA6B,OAC7BC,EAAqC,GACrCC,EAAsB,EAEtBC,EAAsB,uBACtBC,EAAyB,2B,6BCjBtC,6JA8FMC,EAA0C,CAC9C,IAAQ,EACR,IAAQ,EACR,OAAQ,GACR,OAAQ,KAeGhpN,EAAsB,SAAC,GAUrB,IATb5vX,EASY,EATZA,MACA6vX,EAQY,EARZA,eACkBgpN,EAON,EAPZ/oN,iBAOY,IANZC,wBAMY,SACND,EAAgB,OAAG+oN,QAAH,IAAGA,IAAqB1hT,IAAkB2hT,IAEhE,IAAK94kB,EACH,OAAOA,EAGT,IAAMkxX,EAAWjrX,OAAOjG,GACxB,GAAI0gD,MAAMwwU,GACR,OAAOlxX,EAGT,IAAK6vX,EAAgB,CACnB,IAAMk4C,EAAW/na,EAAM8kB,QAAQ,KAE/B,QADoC,IAAdijZ,EAAkB,EAAI/na,EAAMmG,OAAS4ha,EAAW,GAC/Cj4C,EACnBoB,EAASxyH,QAAQoxH,GACjBC,EACEJ,YA/Bc,SAAC3vX,EAAe8vX,GAAhB,OACtB9vX,EAAM0+P,QAAQr9P,KAAKE,IAAIuuX,EARQ,EAQqC,KA8B1CipN,CAAgB7nN,EAAUpB,GAAmBA,GAC/D9vX,EAGR,IAAMg5kB,EAAiBJ,EAAgB/oN,GACjCopN,EAAa53kB,KAAKo/E,MAAiB,IAAXywS,GAGxBgoN,GAFe73kB,KAAKo/E,MAAMw4f,EAAaD,GAAkBA,EAE1B,KAAKt6U,QAAQoxH,GAElD,OAAIC,EACKJ,YAAkBupN,EAAcppN,GAGlCopN,GAGIC,EAAqB,SAAC,GAUpB,IATN1rjB,EASK,EATZztB,MACA6vX,EAQY,EARZA,eACkBgpN,EAON,EAPZ/oN,iBAOY,IANZspN,+BAMY,SACNp5kB,EAAQiG,OAAOwnB,GACfyrjB,EAAetpN,EAAoB,CACvC5vX,MAAO0gD,MAAM1gD,GAAS,IAAMA,EAAMuF,WAClCsqX,eAAc,OAAEA,QAAF,IAAEA,IAAkB34F,IAAiBmiT,aACnDvpN,iBAAgB,OAAE+oN,QAAF,IAAEA,IAAqB1hT,IAAkB2hT,IACzD/oN,kBAAkB,IAEpB,OAAOqpN,EAA0BtxK,YAAsBoxK,GAAgBA,GAG5DI,EAAmB,SAAC,GAQlB,IAPN7rjB,EAOK,EAPZztB,MACkB64kB,EAMN,EANZ/oN,iBAMY,IALZspN,+BAKY,SACNp5kB,EAAQiG,OAAOwnB,GACf8rjB,EAAE,OAAGV,QAAH,IAAGA,IAAqB1hT,IAAkB2hT,IAC5CI,EAAez4f,YAAM//B,MAAM1gD,GAAS,EAAIA,EAAOu5kB,GAAI76U,QAAQ66U,GACjE,OAAOH,EAA0BtxK,YAAsBoxK,GAAgBA,I,6BC/LzE,8CAmCa3zP,EAAqB,SAACL,GAA0C,IAAD,IACpE15S,EAAO,oBApBG,SAAC05S,GACjB,IACE,OAAOA,EAAIhsI,aAAejmM,KAAK6tC,MAAMokS,EAAIhsI,cAAgB,KACzD,MAAOxsM,GACP,OAAO,MAgBO8skB,CAAUt0P,UAAb,aAAG,EAAgB15S,eAAnB,QAA8B,KACrCiuiB,GAAmD,OAAPjuiB,QAAO,IAAPA,OAAA,EAAAA,EAAS/4B,QAAS,KAEpE,OAAIyyU,EAAIn7O,OAAS,KAAOm7O,EAAIn7O,QAAU,IAC7B,CACLv+D,UACA/4B,MAAOgnkB,GAAgB,CACrBhnkB,MAAsB,IAAfyyU,EAAIn7O,OACPE,IAAQ55E,EAAE,CAAC,uCAAwC,6EACnD45E,IAAQ55E,EAAE,CAAC,mCAAoC,yCACnD05E,OAAQm7O,EAAIn7O,SAKd0ve,EACK,CAAEjuiB,UAAS/4B,MAAOgnkB,GAGtBjuiB,EAUE,CAAEA,UAAS/4B,MAAO,MAThB,CACL+4B,QAAS,KACT/4B,MAAO,CACLA,MAAOw3F,IAAQ55E,EAAE,CAAC,mCAAoC,yCACtD05E,OAAQm7O,EAAIn7O,W,6BC1DpB,IAAIkhH,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,iQACD,cAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,kCAAO,IAAMmxU,EAAiB,SAACvpd,GAC3B,OAAOA,EAAKjzC,QAAQ,yBAAyB,SAACrqC,EAAOiqM,EAAIC,GACrD,OAAIA,EACOA,EAAGpuG,cAEPmuG,EAAGp/L,mB,iRCUX,SAASi9Q,EAAM7tS,GAEpB,OADgB,IAAIsyB,OAAO,6GACZC,KAAKvyB,EAAI4wB,eAG1B,IAAMo2E,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACR/nR,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpC1C,MAAO,CACL3oC,QAASZ,EAAMZ,QAAQ,GAAK,MAC5B6sC,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnCiuM,SAAU,CACRltM,WAAY,EACZ1G,YAAa,GAEfmZ,WAAY,CACVr/C,MAAO,GACPi2C,OAAQ,IAEVu/c,cAAe,CACbx1f,MAAO,qBAETy1f,WAAY,CACVz1f,MAAO,SAwIIrG,sBACb91B,YAAgB,gBAChB0/D,mBAPsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MARwB,SAAC2D,GAC1B,MAAO,CACLA,eASWsqC,EAxH8C,SAAC,GAQvD,IAPL63X,EAOI,EAPJA,QACAhsa,EAMI,EANJA,MACA6J,EAKI,EALJA,SACAwwE,EAII,EAJJA,WACA6lJ,EAGI,EAHJA,SAGI,IAFJ49I,wBAEI,MAFe,KAEf,EADJ7yX,EACI,EADJA,EAGA,EAAkC0Y,WAAe,IAAjD,mBAAOqxR,EAAP,KAAkBC,EAAlB,KACA,EAA0BtxR,WAAe,IAAzC,mBAAO/oC,EAAP,KAAci2T,EAAd,KAEMz4O,EAAUs2C,IACVikG,EAAOt4G,EAAWp3G,IAAI,SAAW6O,gBACjC4uF,EAAMiyH,EAAK7yM,MAAM,CAAC,QAASg+X,EAAkBkuD,EAAS,QAE5Droa,aAAgB,WACdktR,EAASnwN,GAAO,MACf,CAACA,EAAKo9S,IAiBT,OACE,eAAC,WAAD,WACE,cAAC,IAAD,CAAUrU,OAAO,EAAjB,SACE,eAAC,IAAD,CAAM/wT,WAAW,EAAMP,WAAW,SAAlC,UACE,cAAC,IAAD,CAAMW,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,IAAD,CAAY8+B,QAAQ,QAApB,SAA6B3tF,EAAE+U,OAEjC,cAAC,IAAD,CAAM84C,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,SAEEuoB,EACI,qCACE,cAAC,IAAD,CAAM5nB,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,EAAQ43f,cAAtD,SACE,cAAC,IAAD,CAAS5md,MAAO1oB,EAAhB,SACE,cAAC,IAAD,CAAM4rB,KAAM5rB,EAAKpoB,UAAWF,EAAQslU,SAAUxxX,OAAO,SAASgiT,IAAI,WAAlE,SAA8ExtO,QAGlF,cAAC,IAAD,CAAM5nB,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,SACE,cAAC,IAAD,CACE33f,UAAWF,EAAQyhD,WACnB9V,QAAS,WACP,IAAMswM,EAAW1hG,EAAKpjN,SAAS,CAAC,QAASuuY,EAAkBkuD,IAAUz8b,SAAS,CAAC,QAASy8b,IACxFnia,EAASu/B,YAAO82L,EAAU,OAAQm0D,KAJtC,SAOE,cAAC,IAAD,WAIN,qCACE,cAAC,IAAD,CAAMv7O,MAAM,EAAMR,UAAWF,EAAQ43f,cAArC,SACE,cAAC,IAAD,CACEj3d,WAAW,EADb,SAGE,cAAC,IAAD,CACE35G,KAAK,OACLw5G,QAAQ,WACRsR,YAAaj/F,EAAE,mCACfrwB,MAAOA,EACP8/G,SA1CL,SAACpzG,GAChBupT,EAASvpT,EAAE4kB,OAAOtxB,QA0CEohH,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQurC,QAGnB0xM,oBAAqB,CACnB56O,OAAQ,QACRrC,QAAS,CACP2rM,UAAW3rM,EAAQk8O,WAGvBjnT,MAAO9Q,QAAQy4T,GACfjpM,WAAYipM,QAIlB,cAAC,IAAD,CAAMl8O,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,WAAWV,UAAWF,EAAQ63f,WAAzE,SACE,cAAC,IAAD,CACElsd,QAxEC,WAGnB,GAFAkxM,EAAa,IAETr6T,GAAS26T,EAAM36T,GAAQ,CACzB,IAAMivS,EAAUl3E,EAAKvjN,MAAM,CAAC,QAAS0uY,EAAkBkuD,EAAS,OAAQpxc,GAAO2U,SAAS,CAAC,QAASy8b,IAClGnia,EAASu/B,YAAO82L,EAAU,OAAQ2pC,SACzBjvS,IAAU26T,EAAM36T,IACzBq6T,EAAahqS,EAAE,2BAkECqtD,UAAWF,EAAQyhD,WAFrB,SAIE,cAAC,IAAD,kBAQhB,cAAC,IAAD,CAASrhD,UAAU,SAnEAwzX,O,6BChGzB,oRAeIptZ,EAfJ,uBAiBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAGIyikB,EAAgC,SAACl5kB,GAAD,OAAmB02C,YAC9D8M,KACA,SAAC3Y,GACC,IAAM/F,EAAK+F,EAAMpmB,MAAM,CAAC,8BAA+BzkB,EAAO,OAC9D,OAAO6qC,EAAMpmB,MAAM,CAAC,gBAAiBqgB,QAS5Bq0iB,EAA0B,kBAAMziiB,YAC3C8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,qBAQhDwxkB,EAAqC,kBAAM1iiB,YACtD8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,mBAGhDyxkB,EAA+B,kBAAM3iiB,YAChD8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,aAGhD0xkB,EAAuC,kBAAM5iiB,YACxD8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,sBAGhD2xkB,EAA2B,kBAAM7iiB,YAC5C8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,mCAGhD4xkB,EAA8B,kBAAM9iiB,YAC/C8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,mB,6OCzDzD27C,E,cCtBSG,EAAsB,UDwBtBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAGIgjkB,EAAoC,kBAAM/iiB,YACrD8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,+BAG5C8xkB,EAAyB,kBAAMhjiB,YAC1C8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,eAAgBkU,sBAG5DqgI,EAA8B,kBAAMzlG,YAC/C8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,uBAG5C+xkB,EAA4B,kBAAMjjiB,YAC7C8M,IACAk2hB,KACA,SAAC7uiB,EACA+uiB,GADD,OAC+CA,EAAcp0jB,MAAK,SAAC0lG,GACjE,OAAOrgF,EAAMjjC,IAAI,mBAAqBsjH,EAAStjH,IAAI,QAAUijC,EAAMjjC,IAAI,wBAAqBjI,MACxFstB,iBAAO,QAGF4sjB,EAA8B,kBAAMnjiB,YAC/C8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,yBAG5CkykB,EAAsC,kBAAMpjiB,YACvDijiB,IACAE,KACA,SAACE,EAAiCC,GAAlC,OAAoED,EAAqBn6kB,KAAOm6kB,EAAqBnykB,IAAI,cAAiC,OAAlBoykB,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBpykB,IAAI,eAAgBkU,sB,6BE3ElL,8CACe,SAAS+/B,EAAchrB,GACpC,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAa5E,OAAOsF,UAAUV,IAAM,GACvD0pB,EAAUtuB,OAAO0D,KAAKmrB,GAEkB,oBAAjC7uB,OAAOkgB,uBAChBoO,EAAQtgB,KAAKnE,MAAMykB,EAAStuB,OAAOkgB,sBAAsB2O,GAAQ1hB,QAAO,SAAUshB,GAChF,OAAOzuB,OAAO0uB,yBAAyBG,EAAQJ,GAAK/kB,eAIxD4kB,EAAQhgB,SAAQ,SAAUpI,GACxB,YAAe0oB,EAAQ1oB,EAAK2oB,EAAO3oB,OAIvC,OAAO0oB,I,6BChBT,IAgBM0tS,EAAmB,CACvBC,iBAjBuB,SAAC3jM,GACxB,OAAc,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAAS0lP,4BAAT,OAAqC1lP,QAArC,IAAqCA,OAArC,EAAqCA,EAAS2lP,uBAiBrDy5N,gBAVsB,SAACp/c,GAAa,IAAD,EACnC,OAAc,OAAPA,QAAO,IAAPA,GAAA,UAAAA,EAAS8jM,oBAAT,eAAuBwoD,oBAAvB,OAA2CtsP,QAA3C,IAA2CA,OAA3C,EAA2CA,EAASusP,eAAgB,KAU3E8yN,gCAPsC,SAACt8Q,GACvC,OAAyB,OAAlBA,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB2iD,4BAApB,OAAgD3iD,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAoB4iD,uBAO3E25N,eAhBqB,SAACt/c,GACtB,OAAc,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAAS8tP,0BAAT,OAAmC9tP,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAS+tP,sBAiBtCrqD,O,mOChBF67Q,EAAiB,SAACC,GAAD,OAAqEp4kB,OAAO0D,KAAK00kB,GAAiBxtkB,KAAI,SAAAw0F,GAAM,MAAK,CAC3Iv8D,GAAI2a,SAAS4hD,EAAQ,IACrBw6H,SAAUw+W,EAAgBh5e,GAAQyvL,WAAWjkR,KAAI,SAAA8wH,GAAS,MAAK,CAAE74F,GAAI64F,WAE5D28c,EAAqC,SAACxpT,GAC/C,IAAMjsF,EAMF,GAYJ,OAXAisF,EAAWvgR,SAAQ,YAAiD,IAAD,mBAAnC8wF,GAAmC,WAA3Bs8B,EAA2B,KAAhBuzJ,EAAgB,KAC1DrsF,EAAMqsF,KACPrsF,EAAMqsF,GAAc,IAEnBrsF,EAAMqsF,GAAY7vL,KACnBwjG,EAAMqsF,GAAY7vL,GAAU,CACxByvL,WAAY,KAGpBjsF,EAAMqsF,GAAY7vL,GAAQyvL,WAAW7gR,KAAK0tH,MAEvCknE,GAME01Y,EAAgC,SAAC,GAUvC,IATHrthB,EASE,EATFA,KACAm1W,EAQE,EARFA,kBACAzyI,EAOE,EAPFA,YACAgnB,EAME,EANFA,UAOA,GAAK1pP,EAAL,CAGA,IAAMsthB,EAAoBp4K,YAAgCl1W,EAAMm1W,GAChEzrH,EAAU,CACNhnB,cACA9+P,OAAQ,CAAEm/P,YAAa,kCAAmCjwR,MAAO,GACjE2xM,YAAa,CACTs+E,YAAaH,YAA0B5iO,EAAKtlD,IAAI,MAAOslD,EAAKtlD,IAAI,SAChE5H,MAAOw6kB,EAAkB56kB,UAKxB66kB,EAAoB,SAAC,GAI3B,IAHFvthB,EAGC,EAHDA,KACAskO,EAEC,EAFDA,wBACAhjP,EACC,EADDA,SAEK6yD,EAASn0C,EAAKtlD,IAAI,MAClBi9L,EAAQ53K,iBAAO,IAAI1hB,IAAI81F,EAAQn0C,GACrC1e,EAAS,IAAI4J,IAA+B,CACxCtT,GAAI+sP,IACJ9jP,MAAO,CACHmjP,WAAY,WACZY,YAAaP,YAA8BC,GAC3CO,oBAAqB,CACjBb,WAAY,OACZc,SAAU9kO,EAAKtlD,IAAI,MACnBuuM,WAAYjpJ,EAAKtlD,IAAI,QACrBqqR,cAAeC,YAAoBV,GAAyB9rR,OAC5DysR,cAAeC,YAAoBZ,EAAyB3sF,GAAOn/L,YAI/E8oC,EAAS,IAAI0J,IAA6B,CACtCpT,GAAI+sP,IACJrjL,MAAM,O,6BCpFd,4DAQItvG,EAAO,GAMX,SAAS43Z,EAAQlnY,GAIf,OAHAA,EALF,SAA0BrwB,EAAOuB,EAAKD,GACpC,OAAQD,KAAKE,IAAIF,KAAKC,IAAIC,EAAKvB,GAAQsB,GAAOC,IAAQD,EAAMC,GAIxD45kB,CAAiB9qjB,EAAG,EAAG,GAE3BA,GAAKA,GAAK,GAAKA,EAAIA,EAAI,EAQlB,IAuFH61S,EAAmBn9R,IAAM8E,YAAW,SAA0BW,EAAOzuC,GACvE,IA5FcswB,EA4FVmtD,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cqlb,EAAuB5siB,EAAM6siB,cAC7BA,OAAyC,IAAzBD,GAA0CA,EAC1D5yT,EAAch6O,EAAMnuC,KACpBA,OAAuB,IAAhBmoR,EAAyB,GAAKA,EACrC5oK,EAAQpxE,EAAMoxE,MACd07d,EAAmB9siB,EAAM+siB,UACzBA,OAAiC,IAArBD,EAA8B,IAAMA,EAChDE,EAAehtiB,EAAMxuC,MACrBA,OAAyB,IAAjBw7kB,EAA0B,EAAIA,EACtCllb,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,gBAAkBA,EACxDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,QAAS,gBAAiB,OAAQ,QAAS,YAAa,QAAS,YAElIitiB,EAAc,GACdC,EAAY,GACZC,EAAY,GAEhB,GAAgB,gBAAZ39d,GAAyC,WAAZA,EAAsB,CACrD,IAAI49d,EAAgB,EAAIv6kB,KAAKqhf,KAAO/if,EAAO47kB,GAAa,GACxDE,EAAYp9T,gBAAkBu9T,EAAcl9U,QAAQ,GACpDi9U,EAAU,iBAAmBt6kB,KAAKo/E,MAAMzgF,GAExB,WAAZg+G,GACFy9d,EAAYI,iBAAmB,GAAGjskB,SAAS,IAAM5P,GAAS,IAAM47kB,GAAel9U,QAAQ,GAAI,MAC3Fg9U,EAAU/6c,UAAY,mBAEtB86c,EAAYI,iBAAmB,GAAGjskB,QA1HxBygB,GA0HwC,IAAMrwB,GAAS,IAzH9DqwB,EAAIA,EAyHiEurjB,GAAel9U,QAAQ,GAAI,MACnGg9U,EAAU/6c,UAAY,UAAU/wH,QAA8B,IAAtB2nZ,EAAQv3Z,EAAQ,KAAW0+P,QAAQ,GAAI,SAInF,OAAO31N,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAqB,YAAV6sB,GAAuB/sB,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAU,CAC1Guxe,cAAet+f,EAAQs+f,cACvBC,OAAQv+f,EAAQu+f,QAChB/9d,IACF4B,MAAOxxE,YAAS,CACdwxC,MAAOv/E,EACPw1H,OAAQx1H,GACPq7kB,EAAW,GAAI97d,GAClB7/G,IAAKA,EACLimD,KAAM,eACL21hB,EAAW12jB,GAAQ8jB,IAAMwB,cAAc,MAAO,CAC/CmzC,UAAWF,EAAQ80C,IACnBsoJ,QAAS,GAAGhrQ,OAAOjQ,GAAU,KAAKiQ,OAAOjQ,GAAU,KAAKiQ,OAAOjQ,EAAM,KAAKiQ,OAAOjQ,IAChFopC,IAAMwB,cAAc,SAAU,CAC/BmzC,UAAW2B,kBAAK7B,EAAQ85e,OAAQ+jB,GAAiB79f,EAAQw+f,oBAAqB,CAC5EF,cAAet+f,EAAQy+f,oBACvBF,OAAQv+f,EAAQ0+f,cAChBl+d,IACF4B,MAAO67d,EACP10a,GAAIpnK,EACJqnK,GAAIrnK,EACJ87E,GAAI97E,EAAO47kB,GAAa,EACxBpuc,KAAM,OACNouI,YAAaggU,SA6DFh8f,iBAhNK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ6jE,QAAS,gBAIXq8f,OAAQ,CACNjjd,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,cAIvCm5kB,cAAe,CACbjhU,UAAW,yCAIb5jH,aAAc,CACZ1sD,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAI/BswH,eAAgB,CACd3sD,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,MAIjC0rF,IAAK,CACH5yC,QAAS,SAKX43e,OAAQ,CACNj8S,OAAQ,gBAMV6gU,aAAc,CACZpjd,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,sBAIvCs5kB,oBAAqB,CACnBphU,UAAW,2CAEXwD,gBAAiB,cACjBw9T,iBAAkB,OAGpB,6BAA8B,CAC5B,OAAQ,CACNl7c,UAAW,mBAGf,2BAA4B,CAC1B,KAAM,CACJ09I,gBAAiB,aACjBw9T,iBAAkB,OAEpB,MAAO,CACLx9T,gBAAiB,eACjBw9T,iBAAkB,SAEpB,OAAQ,CACNx9T,gBAAiB,eACjBw9T,iBAAkB,WAKtBG,oBAAqB,CACnBnhU,UAAW,WAqIiB,CAChC/nQ,KAAM,sBACNvE,MAAM,GAFOgxE,CAGZ2mP,I,iBC5OH,IAAI1yJ,EAAS9zK,EAAQ,KACjBmlZ,EAAOnlZ,EAAQ,KACfqmR,EAAMrmR,EAAQ,KACdy8kB,EAAOz8kB,EAAQ,KACf6I,EAAM7I,EAAQ,KAGd08kB,EAAU,SAAVA,EAAoB53kB,EAAMsO,EAAMye,GAClC,IASI3oB,EAAKyzkB,EAAKhjb,EATVijb,EAAY93kB,EAAO43kB,EAAQ38U,EAC3B88U,EAAY/3kB,EAAO43kB,EAAQtf,EAC3B0f,EAAYh4kB,EAAO43kB,EAAQn9a,EAC3Bw9a,EAAWj4kB,EAAO43kB,EAAQ7hgB,EAC1BmigB,EAAUl4kB,EAAO43kB,EAAQrf,EACzB4f,EAAUn4kB,EAAO43kB,EAAQh+a,EACzB3+J,EAAU88kB,EAAY13L,EAAOA,EAAK/xY,KAAU+xY,EAAK/xY,GAAQ,IACzD8pkB,EAAWn9kB,EAAO,UAClB6xB,EAASirjB,EAAY/oa,EAASgpa,EAAYhpa,EAAO1gK,IAAS0gK,EAAO1gK,IAAS,IAAjB,UAG7D,IAAKlK,KADD2zkB,IAAWhrjB,EAASze,GACZye,GAEV8qjB,GAAOC,GAAahrjB,QAA0BlxB,IAAhBkxB,EAAO1oB,KAC1BL,EAAI9I,EAASmJ,KAExBywJ,EAAMgjb,EAAM/qjB,EAAO1oB,GAAO2oB,EAAO3oB,GAEjCnJ,EAAQmJ,GAAO2zkB,GAAmC,mBAAfjrjB,EAAO1oB,GAAqB2oB,EAAO3oB,GAEpE8zkB,GAAWL,EAAMt2T,EAAI1sH,EAAKma,GAE1Bmpa,GAAWrrjB,EAAO1oB,IAAQywJ,EAAO,SAAUgF,GAC3C,IAAIohG,EAAI,SAAUx1P,EAAGC,EAAGC,GACtB,GAAI7F,gBAAgB+5J,EAAG,CACrB,OAAQr2J,UAAU7B,QAChB,KAAK,EAAG,OAAO,IAAIk4J,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAEp0J,GACrB,KAAK,EAAG,OAAO,IAAIo0J,EAAEp0J,EAAGC,GACxB,OAAO,IAAIm0J,EAAEp0J,EAAGC,EAAGC,GACrB,OAAOk0J,EAAE9xJ,MAAMjI,KAAM0D,YAGzB,OADAy3P,EAAC,UAAcphG,EAAC,UACTohG,EAX0B,CAahCpmG,GAAOojb,GAA0B,mBAAPpjb,EAAoB0sH,EAAIpyG,SAASruK,KAAM+zJ,GAAOA,EAEvEojb,KACDh9kB,EAAQo9kB,UAAYp9kB,EAAQo9kB,QAAU,KAAKj0kB,GAAOywJ,EAE/C70J,EAAO43kB,EAAQ99a,GAAKs+a,IAAaA,EAASh0kB,IAAMuzkB,EAAKS,EAAUh0kB,EAAKywJ,MAK9E+ib,EAAQ38U,EAAI,EACZ28U,EAAQtf,EAAI,EACZsf,EAAQn9a,EAAI,EACZm9a,EAAQ7hgB,EAAI,EACZ6hgB,EAAQrf,EAAI,GACZqf,EAAQh+a,EAAI,GACZg+a,EAAQh6F,EAAI,GACZg6F,EAAQ99a,EAAI,IACZ9+J,EAAOC,QAAU28kB,G,cC5DjB,IAAI5oa,EAASh0K,EAAOC,QAA2B,oBAAVuzB,QAAyBA,OAAO3xB,MAAQA,KACzE2xB,OAAwB,oBAAR0gJ,MAAuBA,KAAKryK,MAAQA,KAAOqyK,KAE3DC,SAAS,cAATA,GACc,iBAAPmpa,MAAiBA,IAAMtpa,I,gBCLlC,IAAI7pI,EAAQjqC,EAAQ,KAARA,CAAqB,OAC7B4wD,EAAM5wD,EAAQ,KACdsE,EAAStE,EAAQ,KAAasE,OAC9B+4kB,EAA8B,mBAAV/4kB,GAETxE,EAAOC,QAAU,SAAUqT,GACxC,OAAO62B,EAAM72B,KAAU62B,EAAM72B,GAC3BiqkB,GAAc/4kB,EAAO8O,KAAUiqkB,EAAa/4kB,EAASssD,GAAK,UAAYx9C,MAGjE62B,MAAQA,G,6BCVjB,iJAQIq2E,EAAStgH,EAAQ,IAErB,SAASsyL,EAASgrZ,GAChB,IAAM7ud,EAAW6ud,EAAa30kB,IAAI,WAAa20kB,EACzCj5d,EAAci5d,EAAa30kB,IAAI,eACrC,OAAI07G,EACMoK,EAAQ9lH,IAAI07G,GAEfoK,EAAQ9lH,IAAI,SAGd,IAAMu2G,EAAkC,SAAC,GAAqB,IAAnBpwE,EAAkB,EAAlBA,MAAO17B,EAAW,EAAXA,KAGjD+/B,EADe,IAAIuM,OAAO,iBACLixG,KAAKv9I,GAEhC,GAAa,MAAT+/B,EAEF,OADAvmB,QAAQ7Z,MAAR,uCAA8CK,EAA9C,wBACO,KAGT,IAAMrS,EAAQoyC,EAAM,GAEpB,GAAqB,MAAjBrE,EAAMq/E,QAER,OADAvhG,QAAQ7Z,MAAM,gEACP,KAET,IAAK8J,OAAKF,OAAOmyB,EAAMq/E,SAErB,OADAvhG,QAAQ7Z,MAAM,kEAAmE+7B,EAAMq/E,SAChF,KAGT,IAAMjQ,EAAepvE,EAAMq/E,QAAQxlH,IAAI5H,GAKvC,OAHoB,MAAhBm9G,GACFtxF,QAAQ7Z,MAAR,mCAA0CK,IAErC8qG,GAIIq/d,EAAoC,SAACpvd,GAAyF,IAA3Dqvd,EAA0D,uDAAX3gkB,iBACvH4gkB,EAAiBD,EAAgBjtkB,QAAO,SAACutI,EAAK4/b,EAAgB1vL,GAClE,IAAM9kZ,EAAMw0kB,EAAe/0kB,IAAI,OAI/B,OAHIO,IACF40I,EAAI50I,GAAO8kZ,GAENlwQ,IACN,IAEH,OAAO3vB,EAAQ59G,QAAO,SAACutI,EAA0B3tI,GAA2B,IAAD,EACnEpP,EAAK,UAAG08kB,EAAettkB,EAAOxH,IAAI,eAA7B,QAAyCga,IAAEkiG,SAAS10G,EAAOxH,IAAI,gBAAajI,EAEjFi9kB,EAA4BxtkB,EAAOxH,IAAI,OAAOg7C,MAAM,KAE1D,EAAuDg6hB,EAAgBxvkB,SAAS,iBAC5E,CACEjF,IAAKy0kB,EAAgB,GACrBC,gBAAiBD,EAAgB,GACjCE,QAASF,EAAgB,GACzBh8P,SAAUg8P,EAAgB,IAE5B,CACAz0kB,IAAKy0kB,EAAgB,GACrBE,QAASF,EAAgB,GACzBh8P,SAAUg8P,EAAgB,IAVvBz0kB,EAAP,EAAOA,IAAK20kB,EAAZ,EAAYA,QAASl8P,EAArB,EAAqBA,SAarB,GAAY,MAARz4U,GAA2B,uBAAZ20kB,EACjB,OAAO//b,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MACf,CAAC,qBAAsB3E,EAAOxH,IAAI,YAClCqlB,iBAAO,CAAC7d,EAAOxH,IAAI,eAKzB,GAAY,cAARO,IAAwBilH,EAAQ5nG,MAAK,SAACpW,GAAD,MAAkC,SAAtBA,EAAOxH,IAAI,UAC9D,OAAOm1I,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MACf,CAAC,OAAQ,OACTkZ,iBAAO,EAAC,QAET9Y,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAClD,OAAO0qV,EAAU5jW,MACf,CAAC,OAAQ,MACTkZ,iBAAO,EAAC,QAKd,GAAY,SAAR9kB,GAA0B,eAARA,GAAgC,kBAARA,EAAyB,CACrE,IAAM5I,EAAQ6P,EAAOxH,IAAI,SACnBm1kB,EAAwB,SAAR50kB,GAA4C,OAA1BiH,EAAOxH,IAAI,aAAwBrI,EACrEy9kB,EAAiC,kBAAR70kB,GAAqD,OAA1BiH,EAAOxH,IAAI,aAAwBrI,EAC7F,OAAOw9I,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MACf,CAAC5L,EAAM40kB,GAAgBC,EAAyB,MAAQ5tkB,EAAOxH,IAAI,YAC3D,eAARO,GAAkC,IAAV5I,GAAgCw9kB,GAAgBC,EAAlC/vjB,iBAAO,EAAC,IAAoEA,iBAAO,CAAC1tB,QAKhI,MAAY,YAAR4I,GAAiC,aAAZ20kB,EAChB//b,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAIjE,eAARO,GAAgC,sBAARA,GAAuC,eAARA,GAAgC,gBAARA,GAAiC,aAARA,GAA8B,eAARA,GAAgC,aAARA,GAA8B,YAARA,EACvK40I,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAKiH,EAAOxH,IAAI,YAAaqlB,iBAAO,CAC1D1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAqB,eAARn7G,EAAuB,QAAU,KAC9CmkH,eAAgB,WAKV,aAARnkH,EACK40I,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAKiH,EAAOxH,IAAI,YAAaqlB,iBAAO,CAC1D1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,QACbgJ,eAAgB,WAIT,iBAARnkH,GAAkC,wBAARA,GAA6D,QAArB,OAANiH,QAAM,IAANA,OAAA,EAAAA,EAAQxH,IAAI,YAWhE,aAARO,GAAmC,aAAZ20kB,GAAsC,WAAZA,EAW1C,aAAR30kB,GAA+B,YAARA,GAAiC,aAAZ20kB,QAAsCn9kB,IAAZm9kB,EACjE//b,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAW5jW,MAAM,CAAC5L,EAAK20kB,EAASl8P,EAAUxxU,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAG5E,aAARO,EACK40I,EAAI5oI,OAAOnU,GAAM,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IACzD,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAASl8P,EAAUxxU,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAI3E,QAARO,EACc,YAAZ20kB,GAAqC,aAAZA,EACpB//b,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAaqlB,iBAAO,CACnE1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,KACbgJ,eAAgB,WAKfywB,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC3E,EAAOxH,IAAI,OAAQwH,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAOtE,UAARO,GAA+B,SAAZ20kB,EACd//b,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAaqlB,iBAAO,CACnE1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,KACbgJ,eAAgB,WAKV,MAARnkH,EACK40I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAE1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAIjE,aAARO,EACK40I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAASl8P,EAAUxxU,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAI3E,sBAARO,GAAuC,YAARA,GAA6B,gBAARA,GAAiC,cAARA,GAA+B,4BAARA,EAC/F40I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,GAA8B,QAA1B7d,EAAOxH,IAAI,YAAkD,QAA1BwH,EAAOxH,IAAI,WAEhD,OADA+vW,EAAYA,EAAU5jW,MAAM,CAAC3E,EAAOxH,IAAI,OAAQ,YAAag3B,gBAAcyhF,SAC1DtsG,MAAM,CAAC3E,EAAOxH,IAAI,OAAQwH,EAAOxH,IAAI,YAAa23G,EAAOoyH,IAAIviO,EAAOxH,IAAI,UAAU+nD,eAGnG,IAAMsthB,EAAW7tkB,EAAOxH,IAAI,OAAOg7C,MAAM,KACnCs8D,EAAW+9d,EAASA,EAASv3kB,OAAS,GAG5C,OADAiyW,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,YAAa+2G,GAAY,IACnDA,GACN,KAAKtgF,gBAAc0gF,MAEjBq4P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASC,QAAQ,OAAO7vD,gBAC5C57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASE,MAAM,OAAO9vD,eAChE,MACF,KAAK/wB,gBAAc8gF,UAEjBi4P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,QAAQo8F,QAAQ,OAAO7vD,gBAChE57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,QAAQq8F,MAAM,OAAO9vD,eACpF,MACF,KAAK/wB,gBAAc+gF,UAEjBg4P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASC,QAAQ,QAAQ7vD,gBAC7C57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASE,MAAM,QAAQ9vD,eACjE,MACF,KAAK/wB,gBAAcghF,UAEjB+3P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,QAAQo8F,QAAQ,QAAQ7vD,gBACjE57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,QAAQq8F,MAAM,QAAQ9vD,eACrF,MACF,KAAK/wB,gBAAcihF,WAEjB83P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASC,QAAQ,SAAS7vD,gBAC9C57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASE,MAAM,SAAS9vD,eAClE,MACF,KAAK/wB,gBAAckhF,WAEjB63P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,UAAUo8F,QAAQ,SAAS7vD,gBACpE57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,UAAUq8F,MAAM,SAAS9vD,eACxF,MACF,KAAK/wB,gBAAcmhF,aAEjB43P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASC,QAAQ,WAAW7vD,gBAChD57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASE,MAAM,WAAW9vD,eACpE,MACF,KAAK/wB,gBAAcohF,aAEjB23P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,YAAYo8F,QAAQ,WAAW7vD,gBACxE57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,YAAYq8F,MAAM,WAAW9vD,eAC5F,MACF,KAAK/wB,gBAAcqhF,UAEjB03P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASC,QAAQ,QAAQ7vD,gBAC7C57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASE,MAAM,QAAQ9vD,eACjE,MACF,KAAK/wB,gBAAcshF,UAEjBy3P,GADAA,EAAYA,EAAU5jW,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,SAASo8F,QAAQ,QAAQ7vD,gBAClE57C,MAAM,CAAC5L,EAAK,OAAQo3G,IAASn8F,SAAS,EAAG,SAASq8F,MAAM,QAAQ9vD,eAK1F,OAAOgoT,KAKD,cAARxvW,GAAmC,OAAZ20kB,EAClB//b,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAaqlB,iBAAO,CACnE1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,KACbgJ,eAAgB,WAKV,cAARnkH,EACc,WAAZ20kB,GAAoC,SAAZA,EACnB//b,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAASl8P,EAAUxxU,EAAOxH,IAAI,YAAaqlB,iBAAO,CAC7E1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAas9N,EACbt0N,eAAgB,WAIfywB,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAASl8P,EAAUxxU,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aAI3E,eAARO,EACK40I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAaqlB,iBAAO,CACnE1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAaw5d,EACbxwd,eAAgB,WAKV,mBAARnkH,EACK40I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC3E,EAAOxH,IAAI,OAAQwH,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,SAAW,EAAI,MAI1Fm1I,EAAI5oI,OAAOnU,GAAO,WAA6C,IAA5C23W,EAA2C,uDAAhB1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC3E,EAAOxH,IAAI,OAAQwH,EAAOxH,IAAI,YAAawH,EAAOxH,IAAI,aA1KvEm1I,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IACxD,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAK20kB,EAAS1tkB,EAAOxH,IAAI,YAAaqlB,iBAAO,CACnE1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,KACbgJ,eAAgB,WAhBfywB,EAAI5oI,OAAOnU,GAAO,WAA4C,IAA3C23W,EAA0C,uDAAf1qV,iBAAO,IAC1D,OAAO0qV,EAAU5jW,MAAM,CAAC5L,EAAKiH,EAAOxH,IAAI,YAAaqlB,iBAAO,CAC1D1tB,MAAO6P,EAAOxH,IAAI,iBAClBy8G,OAAQj1G,EAAOxH,IAAI,iBACnB07G,YAAa,KACbgJ,eAAgB,aAkLrBxwG,mBAGQohkB,EAAoC,SAAC9vd,GAChD,OAAOA,EAAUA,EAAQ59G,QAAO,SAAC2tkB,EAAa/tkB,EAAQgukB,GACpD,GAAc,MAAVhukB,GAAoC,kBAAXA,GAAyC,kBAAXA,EACzD,OAAO+tkB,EAET,IAAME,EAAc,CAAC,OAAQ,WAAY,WACnCC,EAAYlukB,EAAOI,QAAO,SAAC+tkB,EAAYC,EAAgBvwd,GAC3D,GAAsB,MAAlBuwd,EACF,OAAOD,EAET,IAAME,EAAcD,EAAehukB,QAAO,SAACkukB,EAAYnB,EAAcoB,GAEnE,GAAoB,MAAhBpB,GAAyC,KAAjBA,GAAwBj3kB,MAAMC,QAAQg3kB,IAAyC,IAAxBA,EAAa72kB,OAC9F,OAAOg4kB,EAGT,GAAmB,SAAdzwd,GAAsC,eAAdA,GAA4C,uBAAdA,GAAoD,kBAAdA,EAAgC,CAC/H,IAAM9kH,EAAoB,uBAAd8kH,EAAqC,uBAAyBA,EACpE2wd,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,MAAOo9kB,EACPN,QAASa,EACTp+kB,MAAqB,eAAd0tH,GAA8Bsvd,EAAa30kB,IAAI,GAAK,EAAI20kB,EAAa30kB,IAAI,KAElF,OAAO81kB,EAAWztkB,KAAK2tkB,GAGzB,GAAkB,YAAd3wd,GAA0C,aAAf0wd,EAA2B,CACxD,IAAMx1kB,EAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,EAAQo9kB,EACRN,EAAUP,EAAa75jB,SAAS9a,IAAI,GACpCrI,EAAQg9kB,EAAa30kB,IAAIk1kB,GAEzBc,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,UAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,GAGzB,GAAmB,aAAd3wd,IAA6Bowd,EAAYjwkB,SAASuwkB,IAA8B,YAAd1wd,GAA0C,SAAf0wd,EAAwB,CACxH,IAAM/8P,EAAW27P,EAAa75jB,SAAS9a,IAAI,GACrCO,EAAM,CAAC8kH,EAAW0wd,EAAY/8P,GAAUt7T,KAAK,KAC7CtlB,EAAQo9kB,EACRN,EAAUP,EAAa30kB,IAAIg5U,GAAUl+T,SAAS9a,IAAI,GAClDrI,EAAQg9kB,EAAa93jB,MAAM,CAACm8T,EAAUk8P,IAEtCc,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,UAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,GAGzB,GAAkB,aAAd3wd,GAA4Bowd,EAAYjwkB,SAASuwkB,GAAa,CAEhE,IAAM74iB,EAAKy3iB,EAAa75jB,SAAS9a,IAAI,GAC/Bk1kB,EAAUP,EAAa30kB,IAAIk9B,GAAIpiB,SAAS9a,IAAI,GAC5CO,EAAM,CAAC8kH,EAAW0wd,EAAY74iB,GAAIxf,KAAK,KACvCtlB,EAAQo9kB,EACR79kB,EAAQg9kB,EAAa93jB,MAAM,CAACqgB,EAAIg4iB,IAEtC,GAAIv9kB,EAAO,CACT,IAAMq+kB,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,UAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,GAEzB,OAAOF,EAGT,GAAkB,aAAdzwd,IAA4C,aAAf0wd,GAA4C,WAAfA,GAA0B,CACtF,IAAMx1kB,EAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,EAAQo9kB,EACRN,EAAUP,EAAa75jB,SAAS9a,IAAI,GACpC07G,EAAci5d,EAAa93jB,MAAM,CAACq4jB,EAAS,gBAC3Ce,EAAkBtB,EAAa93jB,MAAM,CAACq4jB,EAAS,UAC/Cv9kB,EAAQ+F,MAAMC,QAAQs4kB,IAAoBA,EAAgBn4kB,OAChEm4kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MACjCxnG,OAAKF,OAAOiikB,IAAoBA,EAAgBj+kB,KAChDi+kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MAAclhG,OAC/Cm6jB,EAAa30kB,IAAI07G,GAEfs6d,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,QACAu+kB,cAAeD,IAGjB,OAAOH,EAAWztkB,KAAK2tkB,GAGzB,GAAkB,aAAd3wd,GAA2C,OAAf0wd,EAAqB,CACnD,IAAMx1kB,EAAM8kH,EACNjtH,EAAQo9kB,EACRN,EAAUa,EACVr6d,EAAci5d,EAAa30kB,IAAI,eAC/Bi2kB,EAAkBtB,EAAa30kB,IAAI,SACnCrI,EAAQ+F,MAAMC,QAAQs4kB,IAAoBA,EAAgBn4kB,OAC5Dm4kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MACnCxnG,OAAKF,OAAOiikB,IAAoBA,EAAgBj+kB,KAC5Ci+kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MAAclhG,OACjDm6jB,EAAa30kB,IAAI07G,GAEnBs6d,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,QACAu+kB,cAAeD,IAEjB,OAAOH,EAAWztkB,KAAK2tkB,GAGzB,GAAkB,UAAd3wd,GAAwC,SAAf0wd,EAAuB,CAClD,IAAMx1kB,EAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,EAAQo9kB,EACRN,EAAUP,EAAa75jB,SAAS9a,IAAI,GACpC07G,EAAci5d,EAAa93jB,MAAM,CAACq4jB,EAAS,gBAC3Ce,EAAkBtB,EAAa93jB,MAAM,CAACq4jB,EAAS,UAC/Cv9kB,EAAQ+F,MAAMC,QAAQs4kB,IAAoBA,EAAgBn4kB,OAChEm4kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MACjCxnG,OAAKF,OAAOiikB,IAAoBA,EAAgBj+kB,KAChDi+kB,EAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,MAAclhG,OAC/Cm6jB,EAAa30kB,IAAI07G,GAEfs6d,EAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,UACAv9kB,QACAu+kB,cAAeD,IAGjB,OAAOH,EAAWztkB,KAAK2tkB,GAGzB,GAAkB,MAAd3wd,EAAmB,CACrB,IAAM9kH,EAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,EAAQo9kB,EACRN,GAAUP,EAAa75jB,SAAS9a,IAAI,GACpCrI,GAAQg9kB,EAAa30kB,IAAIk1kB,IAEzBc,GAAiB3wjB,iBAAO,CAC5B9kB,MACAnI,QACA88kB,WACAv9kB,WAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,YAAd3wd,GAAyC,sBAAdA,GAAmD,gBAAdA,GAA6C,cAAdA,GAA2C,4BAAdA,EAAyC,CACvK,IAAM8wd,GAAkC,kBAAjBxB,EAA4Bh9d,EAAOoyH,IAAI4qW,GAAgBA,EAC9E,GAAIwB,IAAuB,iBAAZA,GAA4B,CACzC,IAAMC,GAAcN,EAAWl4jB,MAAK,SAAApW,GAAM,OAAIA,EAAOxH,IAAI,OAAO24L,WAAWtzE,IAAc79G,EAAOxH,IAAI,SAAWqlH,KAC/G,GAAmB,aAAf0wd,GAA6BpB,GAAgBA,IAAiB39iB,gBAAcyhF,OAAQ,CACtF,IAAMu9d,GAAiB3wjB,iBAAO,CAC5B9kB,IAAI,GAAD,OAAK8kH,EAAL,YAAkBsvd,GACrBv8kB,MAAOo9kB,EACPN,QAAS,KACTv9kB,OAAO,IAIH0+kB,GAAgBP,EACnBtukB,QAAO,SAAAA,GAAM,OAAIA,EAAOxH,IAAI,SAAWqlH,KACvCh9G,KAAK2tkB,IAER,OAAOK,GACF,GAAmB,aAAfN,IAA8BK,GAAa,CACpD,IAAME,GAAUx4T,YAASq4T,GAAQpuhB,eAC3BiuhB,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,MAAOo9kB,EACPN,QAASa,EACTp+kB,MAAO2+kB,KAET,OAAOR,EAAWztkB,KAAK2tkB,KAI3B,OAAOF,EAGT,GAAkB,QAAdzwd,EAAqB,CACvB,GAAmB,YAAf0wd,GAA2C,aAAfA,EAA2B,CACzD,IAAMx1kB,GAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,GAAQo9kB,EACRN,GAAUP,EAAa75jB,SAAS9a,IAAI,GACpC07G,GAAci5d,EAAa93jB,MAAM,CAACq4jB,GAAS,gBAC3Ce,GAAkBtB,EAAa93jB,MAAM,CAACq4jB,GAAS,UAC/Cv9kB,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAChEm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OACjCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAChDi+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OAC/Cm6jB,EAAa30kB,IAAI07G,IAEfs6d,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,SACAu+kB,cAAeD,KAGjB,OAAOH,EAAWztkB,KAAK2tkB,IAGzB,IAAM59kB,GAAQo9kB,EACR79kB,GAAQg9kB,EACRqB,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,SACA88kB,QAASa,EACTp+kB,WAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,aAAd3wd,EAA0B,CAG5B,IAAMnoF,GAAKy3iB,EAAa75jB,SAAS9a,IAAI,GAG/Bk1kB,GAAUP,EAAa30kB,IAAIk9B,IAAIpiB,SAAS9a,IAAI,GAC5CO,GAAqB,kBAAfw1kB,EAAiC,CAAC1wd,EAAW,kBAAmB0wd,EAAY74iB,IAAIxf,KAAK,KAAO,CAAC2nG,EAAW0wd,EAAY74iB,IAAIxf,KAAK,KACnItlB,GAAQo9kB,EACR79kB,GAAQg9kB,EAAa93jB,MAAM,CAACqgB,GAAIg4iB,KAEhCc,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,WAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,cAAd3wd,EAA2B,CAC7B,IAAM6vd,GAAUP,EAAa75jB,SAAS9a,IAAI,GACpCO,GAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,GAAQo9kB,EACR95d,GAAci5d,EAAa93jB,MAAM,CAACq4jB,GAAS,gBAC3Ce,GAAkBtB,EAAa93jB,MAAM,CAACq4jB,GAAS,UAC/Cv9kB,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAC/Dm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAClCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAC/Ci+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OAChDm6jB,EAAa93jB,MAAM,CAACq4jB,GAASx5d,KAE3Bs6d,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,eAAd3wd,EAA4B,CAC9B,IAAMjtH,GAAQo9kB,EACR95d,GAAci5d,EAAa30kB,IAAI,eAC/Bi2kB,GAAkBtB,EAAa30kB,IAAI,SACnCrI,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAC/Dm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAClCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAC/Ci+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OAChDm6jB,EAAa30kB,IAAI07G,IAEfs6d,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,SACA88kB,QAASa,EACTp+kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAEzB,GAAkB,cAAd3wd,EAA2B,CAC7B,GAAmB,WAAf0wd,GAA0C,SAAfA,EAAuB,CACpD,IAAM74iB,GAAKy3iB,EAAa75jB,SAAS9a,IAAI,GAC/Bk1kB,GAAUP,EAAa30kB,IAAIk9B,IAAIpiB,SAAS9a,IAAI,GAC5CO,GAAM,CAAC8kH,EAAW0wd,EAAY74iB,IAAIxf,KAAK,KACvCtlB,GAAQo9kB,EACR95d,GAAci5d,EAAa93jB,MAAM,CAACqgB,GAAIg4iB,GAAS,gBAC/Ce,GAAkBtB,EAAa93jB,MAAM,CAACqgB,GAAIg4iB,GAAS,UACnDv9kB,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAChEm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAClCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAC/Ci+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OAChDm6jB,EAAa93jB,MAAM,CAACq4jB,GAASx5d,KAE1Bs6d,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAEzB,IAAMO,GAAc5B,EAAa75jB,SAAS9a,IAAI,GACxCk1kB,GAAUP,EAAa30kB,IAAIu2kB,IAAaz7jB,SAAS9a,IAAI,GACrDO,GAAM,CAAC8kH,EAAW0wd,EAAYQ,IAAa74jB,KAAK,KAChDtlB,GAAQo9kB,EACR79kB,GAAQg9kB,EAAa93jB,MAAM,CAAC05jB,GAAarB,KAEzCc,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,WAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,gBAAd3wd,GAA6C,aAAdA,GAA0C,eAAdA,GAA4C,aAAdA,GAA0C,YAAdA,GAAyC,sBAAdA,GAAmD,eAAdA,EAA4B,CACnN,IAAMjtH,GAAQo9kB,EACR95d,GAAci5d,EAAa30kB,IAAI,gBAAkB,KACjDi2kB,GAAkBtB,EAAa30kB,IAAI,SACnCrI,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAC5Dm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OACnCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAC9Ci+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OACjDm6jB,EAAa30kB,IAAI07G,IAEjBs6d,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,SACA88kB,QAASa,EACTp+kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAGzB,GAAkB,eAAd3wd,EAA4B,CAC9B,IAAMnoF,GAAK04iB,EAAe96jB,SAAS9a,IAAI,GACjCk1kB,GAAUU,EAAe51kB,IAAIk9B,IAAIpiB,SAAS9a,IAAI,GAC9CO,GAAM,CAAC8kH,EAAW0wd,GAAYr4jB,KAAK,KACnCtlB,GAAQo9kB,EACR95d,GAAcq6d,EACdE,GAAkBtB,EAAa93jB,MAAM,CAACq4jB,GAAS,UAC/Cv9kB,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAChEm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OACjCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAChDi+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OAC/Cm6jB,EAAa93jB,MAAM,CAACq4jB,GAASx5d,KAE3Bs6d,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAGzB,IAAmB,iBAAd3wd,GAA8C,wBAAdA,IAAuD,OAAf0wd,EAAqB,CAChG,IAAM39kB,GAAQo9kB,EACR95d,GAAci5d,EAAa30kB,IAAI,gBAAkB,KACjDi2kB,GAAkBtB,EAAa30kB,IAAI,SACnCrI,GAAQ+F,MAAMC,QAAQs4kB,KAAoBA,GAAgBn4kB,OAC5Dm4kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OACnCxnG,OAAKF,OAAOiikB,KAAoBA,GAAgBj+kB,KAC9Ci+kB,GAAgBhxkB,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI07G,OAAclhG,OACjDm6jB,EAAa30kB,IAAI07G,IAEjBs6d,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,SACA88kB,QAASa,EACTp+kB,SACAu+kB,cAAeD,KAEjB,OAAOH,EAAWztkB,KAAK2tkB,IAIzB,GAAkB,mBAAd3wd,EAAgC,CAClC,IAAM2wd,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,MAAOo9kB,EACPN,QAASa,EACTp+kB,MAAO2B,QAAQq7kB,KAGjB,OAAOmB,EAAWztkB,KAAK2tkB,IAIzB,GAAkB,wBAAd3wd,EAAqC,CACvC,IAAM2wd,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,MAAOo9kB,EACPN,QAASa,EACTp+kB,MAAOgyL,EAASgrZ,GAChBuB,cAAevB,IAEjB,OAAOmB,EAAWztkB,KAAK2tkB,IAIzB,GAAkB,aAAd3wd,GAA2C,aAAf0wd,EAA2B,CAEzD,IAAM74iB,GAAKy3iB,EAAa75jB,SAAS9a,IAAI,GAC/Bk1kB,GAAUP,EAAa30kB,IAAIk9B,IAAIpiB,SAAS9a,IAAI,GAC5CO,GAAM,CAAC8kH,EAAW0wd,EAAY74iB,IAAIxf,KAAK,KACvCtlB,GAAQo9kB,EACR79kB,GAAQg9kB,EAAa93jB,MAAM,CAACqgB,GAAIg4iB,KAEtC,GAAIv9kB,GAAO,CACT,IAAMq+kB,GAAiB3wjB,iBAAO,CAC5B9kB,OACAnI,SACA88kB,WACAv9kB,WAGF,OAAOm+kB,EAAWztkB,KAAK2tkB,IAEzB,OAAOF,EAGT,IAAME,GAAiB3wjB,iBAAO,CAC5B9kB,IAAK8kH,EACLjtH,MAAOo9kB,EACPN,QAASa,EACTp+kB,MAAOg9kB,IAGT,OAAOmB,EAAWztkB,KAAK2tkB,MACtB9hkB,kBAEH,OAAOyhkB,EAAWpukB,OAAOsukB,KACxB3hkB,kBAICsikB,EAAed,EAEbe,EAASf,EAAU93jB,MAAK,SAAA+0D,GAAC,MAAqB,SAAjBA,EAAE3yE,IAAI,QAA0C,OAArB2yE,EAAE3yE,IAAI,cAC9D02kB,EAAUhB,EAAU93jB,MAAK,SAAA+0D,GAAC,MAAqB,SAAjBA,EAAE3yE,IAAI,QAA0C,QAArB2yE,EAAE3yE,IAAI,cAC/D22kB,EAAYjB,EAAUj5jB,QAAQg6jB,GAC9BG,EAAalB,EAAUj5jB,QAAQi6jB,IAEhCD,GAAUE,GAAa,GAAOD,GAAWE,GAAc,KACtDH,IAAkC,IAAxBA,EAAOz2kB,IAAI,UAAqB02kB,IAAoC,IAAzBA,EAAQ12kB,IAAI,SACnEw2kB,EAAeA,EAAahvkB,QAAO,SAACmrE,GAClC,QAAqB,SAAjBA,EAAE3yE,IAAI,QAA0C,OAArB2yE,EAAE3yE,IAAI,YAAwC,SAAjB2yE,EAAE3yE,IAAI,QAA0C,QAArB2yE,EAAE3yE,IAAI,eAM3F22kB,GAAa,IAA8B,IAAxBF,EAAOz2kB,IAAI,SAChCw2kB,EAAeA,EAAarqkB,MAAM,CAACwqkB,EAAW,UAAU,GAC/CC,GAAc,IAA8B,IAAzBF,EAAQ12kB,IAAI,WAOxCw2kB,GANAA,EAAeA,EAAanukB,KAAKgd,iBAAO,CACtCjtB,MAAOs+kB,EAAQ12kB,IAAI,SACnBO,IAAK,OACL20kB,QAAS,KACTv9kB,OAAO,MAEmB8sH,OAAOmyd,KAInCH,GAAyC,mBAAxBA,EAAOz2kB,IAAI,UAA0B02kB,GAA2C,mBAAzBA,EAAQ12kB,IAAI,YACtFw2kB,EAAeA,EAAanukB,KAAKgd,iBAAO,CACtCjtB,MAAOq+kB,EAASA,EAAOz2kB,IAAI,SAAW02kB,EAAQ12kB,IAAI,SAClDO,IAAK,YACL20kB,QAAS,MACTv9kB,MAAO,OAKb,IAAMk/kB,EAAkBnB,EAAU93jB,MAAK,SAAA+0D,GAAC,MAAqB,kBAAjBA,EAAE3yE,IAAI,QAAmD,OAArB2yE,EAAE3yE,IAAI,cAChF82kB,EAAmBpB,EAAU93jB,MAAK,SAAA+0D,GAAC,MAAqB,kBAAjBA,EAAE3yE,IAAI,QAAmD,QAArB2yE,EAAE3yE,IAAI,cACjF+2kB,EAAqBrB,EAAUj5jB,QAAQo6jB,GACvCG,EAAsBtB,EAAUj5jB,QAAQq6jB,GAyB9C,OAvBKD,GAAmBE,GAAsB,GAAOD,GAAoBE,GAAuB,KAC1FH,IAAoD,IAAjCA,EAAgB72kB,IAAI,UAAqB82kB,IAAsD,IAAlCA,EAAiB92kB,IAAI,SACvGw2kB,EAAeA,EAAahvkB,QAAO,SAACmrE,GAClC,QAAqB,kBAAjBA,EAAE3yE,IAAI,QAAmD,OAArB2yE,EAAE3yE,IAAI,YAAwC,kBAAjB2yE,EAAE3yE,IAAI,QAAmD,QAArB2yE,EAAE3yE,IAAI,eAM7G+2kB,GAAsB,IAAuC,IAAjCF,EAAgB72kB,IAAI,SAClDw2kB,EAAeA,EAAarqkB,MAAM,CAAC4qkB,EAAoB,UAAU,GACxDC,GAAuB,IAAuC,IAAlCF,EAAiB92kB,IAAI,WAO1Dw2kB,GANAA,EAAeA,EAAanukB,KAAKgd,iBAAO,CACtCjtB,MAAO0+kB,EAAiB92kB,IAAI,SAC5BO,IAAK,gBACL20kB,QAAS,KACTv9kB,OAAO,MAEmB8sH,OAAOuyd,KAKlCzB,EAAYhukB,OAAOivkB,KACzBtikB,kBAAU,O,6BCl1Bf,IAAI0uM,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mDACD,cAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,+CACe,SAAS2kO,EAA4Bzie,EAAGuie,GACrD,GAAKvie,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAO,YAAiBA,EAAGuie,GACtD,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAEpD,MADU,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAC7C,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GACxC,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAW,YAAiBD,EAAGuie,QAAxG,K,6BCLF,IAAI/hR,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0GACD,SAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,kHACD,SAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,uEAGe,SAAStgJ,EAAcoG,EAAMxhG,GAC1C,IAAIoxB,EAAYlV,IAAM4G,KAAK5G,IAAM8E,YAAW,SAAUW,EAAOzuC,GAC3D,OAAOgpC,IAAMwB,cAAcwoP,IAAS3kP,YAAS,CAC3CruC,IAAKA,GACJyuC,GAAQ6/E,OAQb,OADApwE,EAAUotK,QAAU0nE,IAAQ1nE,QACrBptK,I,6BCbT,IAAIgtK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,kLACD,WAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,2DACD,eAEJ3K,EAAQywH,QAAUq4I,G,4NCCZ+2U,EAAsBh1iB,SAASC,cAAc,OAEnD,IAAKD,SAASywC,KACZ,MAAM,IAAI7uE,MAAM,uCAGlBo+B,SAASywC,KAAKymO,YAAY89R,GAW1B,IA0DeC,EA7C0C,SAAC/wiB,GACxD,IAdoBmxP,EAAY6/S,EAe9B1zd,EAKEt9E,EALFs9E,SACA2jM,EAIEjhR,EAJFihR,SACAnwQ,EAGE9Q,EAHF8Q,KAHF,EAMI9Q,EAFF2uY,uBAJF,MAIoB,GAJpB,EAKEha,EACE30X,EADF20X,SAGIs8K,EAAqBhwR,EAAS9vB,WAE9BnhP,EACJ,cAACqzW,EAAA,EAAD,CAASX,QAASplS,EAAS0lJ,SAA3B,SACE,eAACj7C,EAAA,EAAD,uCACMzqG,EAASqlM,gBACTrlM,EAASmlM,iBAFf,IAGErxM,OA7Bc+/K,EA8BZ8vB,EAAS9vB,WA9Be6/S,EA+BxB1zd,EAASqlM,eAAevxM,MA/Bb,aAEnB6uP,WAAY,OACZpvO,WAAYsgK,EAAa,YAAc,QACvC9/M,OAAQ,OACRqsC,aAAc,sBAEdxsC,QAAS,OACTM,eAAgB,gBAChBI,QAAS,QACNo/f,IAgBC,UAQE,eAACrigB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAEjgC,SAAU,UAA9D,UACE,cAAC+gD,EAAA,EAAD,CACEn2B,MAAM,UACNiX,SAAW27T,EAAgBtva,SAASyxC,EAAK/Z,IACzC4jF,QAAS,SAACz8G,GAAD,OAA6BA,EAAE87G,mBACxC1I,SAAUqjT,EACV7iS,QAAShhF,EAAKogC,UAEfuqB,IAAQ55E,EAAR,uBAA0BivB,EAAKla,WAElC,cAAC,IAAD,CAAYqmF,SAAS,gBAK3B,OAAKg0d,EAKEtxT,IAASkmC,aAAa71Q,EAAO8giB,GAJ3B9giB,G,uDCzDLs1E,EAAYJ,aAAW,SAACl0C,GAAD,MAAY,CACvCw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,QA8NrBrF,sBACb91B,YAAgB,gBADH81B,EAtM2C,SAAC,GAUpD,IATJ8jW,EASG,EATHA,iBACAF,EAQG,EARHA,gBAQG,IAPHY,qBAOG,MAPa,GAOb,EAPiBx9F,EAOjB,EAPiBA,OACpBs+F,EAMG,EANHA,WACAzB,EAKG,EALHA,eACAn0S,EAIG,EAJHA,QACAk1S,EAGG,EAHHA,oBACA9tZ,EAEG,EAFHA,EAEG,IADHqvjB,qBACG,SACEligB,EAAUs2C,IACV7kF,EAAW2F,wBAEX0tF,EAAmBtsF,sBAAYkP,eAC/B24X,EAAa7nY,sBAAY4jG,YAAqBilS,IAG9CZ,EAAU,OAAGJ,QAAH,IAAGA,OAAH,EAAGA,EAAY34Z,MAAM,CAAC,EAAG,eACnCg5Z,EAAmBD,EAAahra,KAAK6tC,MAAMm9X,GAAc,KAGzD0hK,EAAoBzhK,EAAmBA,EAAiBrua,QAAO,SAAC0wJ,GACpE,OAAO68Q,EAAen3Z,MAAK,SAACi4D,GAAD,OAAUA,EAAK34C,KAAOg7H,EAAIh7H,SAClD,KACCq6iB,EAA8B1hK,EAAmBd,EAAevta,QAAO,SAAC0wJ,GAC5E,OAAQ29Q,EAAiBj4Z,MAAK,SAACi4D,GAAD,OAAUA,EAAK34C,KAAOg7H,EAAIh7H,SACrD,GAEC2lV,EAAUy0N,EAAiB,YAAOA,GAAqB,KACzDz0N,GAAW00N,EAA4Bz5kB,OAAS,GAClDy5kB,EAA4B5ukB,SAAQ,SAACuvJ,GACnC,IAAMp/J,EAAei8a,EAAe9yZ,WAAU,SAAC4zD,GAAD,OAAUA,EAAK34C,KAAOg7H,EAAIh7H,MACxE,GAAqB,IAAjBpkC,EACF+pX,EAAQvtW,QAAQ4iJ,OACX,CACL,IAAMs/a,EAAiBziK,EAAej8a,EAAe,GAC/C2+kB,EAAmB50N,EAAQ5gW,WAAU,SAAC4zD,GAAD,OAAUA,EAAK34C,KAAOs6iB,EAAet6iB,OACtD,IAAtBu6iB,EACF50N,EAAQx3W,OAAOoskB,EAAmB,EAAG,EAAGv/a,GAExC2qN,EAAQx6W,KAAK6vJ,OAMrBx3H,aAAgB,WACd,GAAI81Y,IAAehB,QAEZ,GAAI3yD,EAAS,CAClB,IAAM60N,EAAa70N,EAAQ59W,KAAI,SAACizJ,GAC9B,IAAMy/a,EAAa3iK,EAAiBp3Z,MAAK,SAACi4D,GAAD,OAAUA,EAAK34C,KAAOg7H,EAAIh7H,MACnE,OAAIy6iB,EACK,2BAAKA,GAAez/a,GAEpBA,KAGX49Q,EAAoB4hK,MAErB,IAEHh3iB,aAAgB,WACd,GAAIk1Y,IAAej/O,kBAAQksL,EAASmyD,GAAmB,CACrD,IAAM0iK,EAAa70N,EAAQ59W,KAAI,SAACizJ,GAC9B,IAAMy/a,EAAa3iK,EAAiBp3Z,MAAK,SAACi4D,GAAD,OAAUA,EAAK34C,KAAOg7H,EAAIh7H,MACnE,OAAIy6iB,EACK,2BAAKA,GAAez/a,GAEpBA,KAGX49Q,EAAoB4hK,MAErB,CAAC9hK,IAEJ,IAAMgiK,EAAgB,SAACC,GACrB,IAAM36iB,EAAE,OAAGs4Y,QAAH,IAAGA,OAAH,EAAGA,EAAY34Z,MAAM,CAAC,EAAG,OAC7Bo9G,GAAoBu7S,IAAe6hK,GAEnCzwiB,EADE1J,EACO,IAAIyxB,KAAuB,CAAEmphB,SAAU56iB,EAAIi1U,WAAY,kBAAmBuhC,WAAYmkM,EAAqBrmc,WAAYglS,EAAYuX,WAAW,EAAMxqH,UAAW,kBAAM,MAAM6nF,OAAQ,kBAAM,QAEzL,IAAI77V,IAAmB,CAAE4iT,WAAY,kBAAmB3gO,WAAYglS,EAAY9iC,WAAYmkM,EAAqB9pJ,WAAW,EAAMxqH,UAAW,kBAAM,MAAM6nF,OAAQ,kBAAM,UAKhL0P,EAAgC,SAAC1ia,GAAD,OAAW,WAC/C,IAAMgla,EAAM,eAAO4X,EAAiB58a,IACpCgla,EAAO/lV,SAAW+lV,EAAO/lV,QACzB,IAAMwggB,EAAmB,YAAO7iK,GAChC6iK,EAAoBz/kB,GAASgla,EAE7B0Y,EAAoB+hK,GACpBD,EAAcC,KA6BV5wZ,EAAU,SAAC8wZ,EAA8Bv7H,EAAYziI,GACzD,IAAMlqU,EAASnS,MAAMuN,KAAK8skB,GAC1B,EAAkBlokB,EAAOxE,OAAOmxc,EAAY,GAArCrsc,EAAP,oBAGA,OAFAN,EAAOxE,OAAO0uU,EAAU,EAAG5pU,GAEpBN,GAGLmokB,EAA0B,EAG9B,OAFAhjK,EAAiBrsa,SAAQ,SAAAktE,GAAI,OAAKA,EAAKy4U,UAAa0pL,OAGlD,eAAC5oJ,EAAA,EAAD,CACEz5U,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMsxO,EACNt3M,QAASA,EACTvrD,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBr6P,MAAO,CACLhgC,MAAO2gQ,EAAS,UAAY,GAVhC,UAaE,eAACpjQ,EAAA,EAAD,CACEO,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,cAAC2uG,EAAA,EAAD,CACE7V,QAAS8f,EADX,SAGE,cAAC,IAAD,SAGJ,cAAC,IAAD,CAAiBouK,UApEH,SAACn/R,EAAoBookB,GAEpC,GAAKpokB,EAAOk6L,YAAZ,CAGD,IAAImuY,EAAiC,GAC/BC,EAAmC,GACzCnjK,EAAiBrsa,SAAQ,SAAAqmZ,GACnBA,EAAOV,SACT4pL,EAAgB7vkB,KAAK2mZ,GAErBmpL,EAAkB9vkB,KAAK2mZ,MAG3BkpL,EAAkBjxZ,EAChBixZ,EACArokB,EAAOqZ,OAAO9wB,MACdyX,EAAOk6L,YAAY3xM,OAGrB,IAAMy/kB,EAAmB,UAAOM,EAAP,YAA6BD,IAEtDpiK,EAAoB+hK,GACpBD,EAAcC,KA6CZ,SACE,cAAC,IAAD,CAAWxvT,YAAY,YAAvB,SACG,SAAC5kK,EAAU2jM,GAAX,OACC,cAACoiG,EAAA,EAAD,CAASX,QAASplS,EAAS0lJ,SAA3B,SACE,eAACj1P,EAAA,EAAD,2BACMuvG,EAASmoM,gBADf,IAEEr0M,OAAoB6vM,EAAS2C,eAhML,CACtChyO,QAAS,IA6LG,UAIGi9V,EAAiBxta,QAAO,SAAAquE,GAAI,OAAIA,EAAKy4U,WAAaonB,EAAclwa,SAASqwE,EAAK34C,OAAKj4B,KAAI,SAAC4wE,EAAMz9E,GAAP,OACpF,cAAC,IAAD,CAAuB4vR,YAAanyM,EAAK94C,MAAQ3kC,EAAOA,MAAOA,EAA/D,SACG,SAACgglB,EAAWC,GAAZ,OACC,cAAC,EAAD,CACEphiB,KAAM4+B,EACNi/V,gBAAiBA,EACjBrxT,SAAU20d,EACVhxR,SAAUixR,EACVv9K,SAAUA,EAAS1ia,EAAQ4/kB,OAPjB5/kB,MAanBqrH,EAASwD,8B,qpBC1Obq7Q,GAAa,uCAAG,WAAOl7X,EAA0Bw/B,EAA6BT,GAA9D,iBAAAvkC,EAAA,yDACrBymD,EAAQjhD,EAAOpH,IAAI,SACnBs4kB,EAAenyiB,EAAMo0E,eAAiBp0E,EAAMo0E,cAAcv6G,IAAI,SAChEqoD,IAAUiwhB,EAHa,yCAIlB,IAAIp9hB,SAAoC,SAACC,EAASi3B,GACvDxrC,EAAS,IAAI4mC,KAA8B,CACzCnlB,QACAlN,UACAi3B,eAEDI,MACD,YACE,IADqB,EAApBivB,cAEC,KAAM,CAAEp5C,MAAOu5C,KAAQ55E,EAAE,wDAG7B,WAGE,MAAMyhjB,mBAnBe,2CAAH,0D,wBCgCpB8O,GAA4B,+BA8DrB14Q,GAAuB,SAACloU,GACnC,IAAMK,EAAOL,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAChDwE,EAAOxE,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAMtD,MADgB,CAHKK,EAAOs9B,KAAP,UAA2BssE,KAAQ55E,EAAE,wDAArC,YAAgGsN,IAAa,QAA7G,QACKE,IAAoBhwB,SAASrJ,IAASA,GAAQylG,KAAQ55E,EAAE,wDAEjCxgB,QAAO,SAACsM,GAAD,OAAOA,KAAG4J,KAAK,aACrD3lB,GAGdyglB,G,4MACGv1iB,MAAQ,CACb0sR,OAAQ,GACRkI,QAAS,GACT4gR,qBAAsB,I,EA0CjBn6Q,a,uCAAe,WAAOl3T,GAAP,iCAAAxF,EAAA,+DAQhB,EAAKukC,MANP2wG,EAFkB,EAElBA,iBACAlwG,EAHkB,EAGlBA,SACA8xiB,EAJkB,EAIlBA,gBACAx0e,EALkB,EAKlBA,OALkB,EAMlBj8C,IACAhR,EAPkB,EAOlBA,KAPkB,SAUKoiR,YAAI,CAACn1N,SAAQtK,MAAOxyF,EAAOpH,IAAI,cAVpC,OAUds5T,EAVc,OAWdzB,EAAUh7S,gBAAMy8S,EAAY,CAAC,EAAG,MAAO,IACvCkrI,EAAep9b,EAAOI,QAAO,SAAC7P,EAAO4I,GAAR,MACjC,CAAC,WAAY,aAAc,WAAY,YAAa,WAAY,WAC9D,WAAY,QAAS,cAAe,YAAa,cAAe,cAAe,WAAWiF,SAASjF,MACpGoD,IAAI,UAAWk0T,GAAoBzwT,EAAOpH,IAAI,YAC3Ck9B,EAAK+Z,GAAQA,EAAKj3C,IAAI,MAE5B4mC,EAAS,IAAI4K,KACbkniB,EAAkBA,IAAoB,EAAKv1c,cAEtCqhU,EAAaxkc,IAAI,YAMpB,EAAK24kB,mBAAmBn0I,EAActna,GALtC,EAAKy7iB,mBACHn0I,EAAa7gc,IAAI,WAAYmzI,EAAiB92I,IAAI,qBAClDk9B,GAxBgB,4C,wDA+Bfy7iB,mBAAqB,SAACvye,EAA2BlpE,GACtD,MAYI,EAAKiJ,MAXPyyiB,EADF,EACEA,WACAC,EAFF,EAEEA,WACA/hc,EAHF,EAGEA,iBACAlwG,EAJF,EAIEA,SACAqhB,EALF,EAKEA,IACA6whB,EANF,EAMEA,mBACAC,EAPF,EAOEA,eACAz5hB,EARF,EAQEA,KACA83D,EATF,EASEA,WACAngE,EAVF,EAUEA,KACA+J,EAXF,EAWEA,YAGIuH,EAAWuuF,EAAiB92I,IAAI,oBAChCg5kB,EAAY5he,EAAWv6F,MAAM,CAAC,WAAY,WAAY,IACtDo8jB,EAAWv7kB,MAAMC,QAAQq7kB,GAAaA,EAAYA,EAAUn6kB,UAC5Dq6kB,EAAkBl4hB,GAAe1B,IAAS5pB,YAAS4vB,KAEzD,GAAKpoB,EAME,CAAC,IAAD,EACCi8iB,GAAmB,OAAJliiB,QAAI,IAAJA,GAAA,UAAAA,EAAMp6B,MAAM,CAAC,WAAY,mBAAzB,eAAsChe,YAAa,GAIxEg6kB,EAAW,CACTzye,OACAlpE,KACAklE,aAAcllE,IAAO+qB,EACrB6whB,qBACAM,aARmBF,EAAkBD,EAASzxkB,QAAO,SAAAm2C,GAAI,OAAKw7hB,EAAa3zkB,SAASm4C,MAAS,KAS7F07hB,cARoBH,EAAkBC,EAAa3xkB,QAAO,SAAAm2C,GAAI,OAAKs7hB,EAASzzkB,SAASm4C,MAAS,KAS9F4lR,WAAyB,IAAdh7Q,EAAkB,kBAAM3hB,EAAS,IAAIywB,KAA4B,CAAE9O,WAAUm5C,OAAQ,kBAAe3pG,QAlB1G,CACP,IAAMuhlB,EAAiBxic,EAAiB92I,IAAI,kBAI5C44kB,EAAW,CAAExye,KAHOA,EAAKziG,IAAI,SAAU21kB,GAAgB31kB,IAAI,YAAY,GAGvC27C,OAAM85hB,aAFjBF,EAAkBD,EAASzxkB,QAAO,SAAAm2C,GAAI,OAAIA,IAASC,IAAS27hB,UAAU,OAkBzFR,GACFA,EAAe3ye,I,EAIZ+8B,YAAc,WACnB,MAA2B,EAAKh9F,MAAxBygC,EAAR,EAAQA,MAAOhgC,EAAf,EAAeA,SACfggC,IACAhgC,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,IACJ9mL,MAAM,M,EAIHsxN,YAAc,WACnB,MAA2B,EAAK/xR,MAAxBS,EAAR,EAAQA,SAAU8yE,EAAlB,EAAkBA,KAClB9yE,EAAS,IAAI8K,KACb9K,EAASu/B,YAAOuzC,EAAM,UAAW,KACjC9yE,EAASu/B,YAAOuzC,EAAM,WAAY,KAClC,EAAKmF,SAAS,CAAEg5M,QAAS,M,EAGpB6H,YAAc,WACnB,IAAQ7H,EAAY,EAAK50R,MAAjB40R,QACR,EAII,EAAK1xR,MAHPgvC,EADF,EACEA,QACAiiC,EAFF,EAEEA,WACApvF,EAHF,EAGEA,EAEF,OACE,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVI,QAAQ,SACRV,UAAWF,EAAQuqP,YALrB,UAOE,gBAAC5qP,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRV,UAAWF,EAAQqkgB,YAHrB,UAKE,eAAC/je,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,gDAE5C6vS,GAAYzgN,GAAcA,EAAWp3G,IAAI,cAC1C,eAAC22H,EAAA,EAAD,CAAY7V,QAAS,EAAKo3M,YAAalgU,KAAK,QAA5C,SACE,eAAC,IAAD,CAAYorH,SAAS,eAI3B,eAAC,QAAD,CACE7tC,UAAWqqP,IACXn1T,KAAK,WACL07B,MAAO,CAAC25R,aAAcjI,GACtB5hN,SAAU4pN,S,EAMX45Q,SAAW,WAChB,MASI,EAAKtziB,MARPgvC,EADF,EACEA,QACA/tB,EAFF,EAEEA,QACAsyhB,EAHF,EAGEA,aACAC,EAJF,EAIEA,YACA34hB,EALF,EAKEA,YACA1B,EANF,EAMEA,KACAs6hB,EAPF,EAOEA,SACA5xjB,EARF,EAQEA,EAGI6xjB,EAAkBzyhB,EAAQxpC,MAAK,SAAAypC,GAAM,OAAIA,EAAOrnD,IAAI,QAAU05kB,KAC9DI,EAAuB94hB,GAAe1B,IAAS5pB,YAAS4vB,KACxDy0hB,EAAiB,IAAIj/kB,KAAoB,OAAR8+kB,QAAQ,IAARA,OAAA,EAAAA,EAAU30kB,KAAI,SAAC04C,GAAD,OAAUA,EAAK39C,IAAI,YAAUnB,YAAa,IAE/F,OACE,gBAACi2E,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVI,QAAQ,SAJV,UAME,eAAC0/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,4CAC/C,eAACymS,EAAA,EAAD,CACEhkT,KAAK,YACLygQ,QAAS,eAAC,IAAD,IACTj1J,SAAU,CAACmqF,KACXj6J,MAAO,CACLpJ,MAAO/U,EAAE,2CACT3wB,SAAS,KAGb,eAACo3T,EAAA,EAAD,CACEhkT,KAAK,WACLwrG,SAAU,CAACmqF,KACXj6J,MAAO,CACLpJ,MAAO/U,EAAE,0CACT3wB,SAAS,KAGb,eAACo3T,EAAA,EAAD,CACEhkT,KAAK,WACLwrG,SAAU,CAACmqF,KACXj6J,MAAO,CACLpJ,MAAO/U,EAAE,0CACT3wB,SAAS,KAGb,eAACo3T,EAAA,EAAD,CACEhkT,KAAK,QACLygQ,QAAS,eAAC,IAAD,IACTj1J,SAAU,CAACmqF,IAA0BE,KACrCn6J,MAAO,CACLpJ,MAAO/U,EAAE,uCACT3wB,SAAS,KAGb,eAACk9T,EAAA,EAAD,CAAWjpD,YAAY,EAAvB,SAEIquU,GAAe34hB,EACb,eAAC,QAAD,CACEv2C,KAAK,WACLwrG,SAAU,CAACgpF,KACX1pH,UAAWiiC,IACXrxE,MAAO,CACLpJ,MAAO/U,EAAE,8CACT3wB,SAAS,EACTimH,cAAc,EACd1H,WAAY,CACVE,WAAW,GAEbD,iBAAkB,CAChBxgC,UAAWm0C,KAAWr0C,EAAQ6kgB,qBAZpC,SAiBI5yhB,EAAQ5nD,eAAeX,UAAUoG,KAAI,SAACoiD,GAAD,OACnC,eAACmxD,EAAA,EAAD,CAEE7gH,MAAO0vD,EAAOrnD,IAAI,MAFpB,SAIGqnD,EAAOrnD,IAAI,eAAiBqnD,EAAOrnD,IAAI,aAHnCqnD,EAAOrnD,IAAI,YAOxB,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQ3sB,WAAnD,SACGqxhB,EAAgB75kB,IAAI,eAAiB65kB,EAAgB75kB,IAAI,gBAIlE,gBAACu0T,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTI,YAAY,EACZH,gBAAgB,gBAHlB,UAKE,eAACr2L,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWwgC,IACX5vE,MAAO,CACLpJ,MAAO/U,EAAE,4CACT6tF,iBAAkB,CAChBC,WAAW,QAKnB,eAAChhC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,YACL8qE,UAAWwgC,IACX5vE,MAAO,CACLpJ,MAAO/U,EAAE,2CACT6tF,iBAAkB,CAChBC,WAAW,WAMrB,eAAC24M,EAAA,EAAD,CACEhkT,KAAK,cACLygQ,QAAS,eAAC,IAAD,IACT/kO,MAAO,CACLpJ,MAAO/U,EAAE,2CAIX8xjB,GACE,eAACvlR,EAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAAC,QAAD,CACE7gQ,KAAK,mBACL8qE,UAAWi/O,KACXvuG,UAAW,SAACn6M,EAAUg9U,GAAmB,IAAD,EAChCmxP,EAA0Bv8kB,MAAMC,QAAQmrV,GAC1CA,GACc,OAAbA,QAAa,IAAbA,GAAA,UAAAA,EAAejqV,eAAf,oBAAAiqV,KAA8B,GAC7B/2U,EAAqBjG,GAAY,GACjCoukB,EAAgBD,EAAczykB,QAClC,SAAAm2C,GAAI,OAAK5rC,EAASvM,SAASm4C,MAAWo8hB,EAAe75kB,IAAIy9C,IAASA,IAASC,IAAS27hB,WAEtF,MAAM,GAAN,mBAAWxnkB,GAAX,YAAwBmokB,KAE1B/ziB,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACV7/E,MAAO/U,EAAE,0CACTigB,SAAiB,OAAR2xiB,QAAQ,IAARA,OAAA,EAAAA,EAAU30kB,KAAI,SAAC04C,GAAD,OAAUA,EAAK39C,IAAI,YAAUnB,YAAa,GACjEi/V,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,IAAW9kH,GACjDomW,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,GAAkB,MAC5Cg4M,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAChH,EAAA,EAAD,UAAagH,KAC/C09d,WAAY,SAACC,EAAoBC,GAArB,OACVD,EAASn1kB,KAAI,SAACw3G,EAAQrkH,GACpB,MAAkCiilB,EAAY,CAAEjilB,UAAxC+pU,EAAR,EAAQA,SAAam4Q,EAArB,kBACA,OACE,eAACp0d,EAAA,EAAD,CAAqBC,MAAO1J,EAA5B,SACE,eAACulN,EAAA,EAAD,yBACEjlS,MAAO0/E,GACH69d,GAFN,IAGEn4Q,SAAU43Q,EAAe75kB,IAAIu8G,IAAWA,IAAW7+D,IAAS27hB,OAASp3Q,OAAWpqU,MAJtEK,QAUtBy9G,iBAAkB,CAChBC,WAAW,Y,EAWtBv3E,KAAO,kBACZ,gBAACu2C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIG,EAAK+pP,cACL,EAAK+5Q,e,uDArWV,WACE,MAIIx9kB,KAAKkqC,MAHP8Q,EADF,EACEA,KACA2iiB,EAFF,EAEEA,SACAhziB,EAHF,EAGEA,SAEEqQ,GACFh7C,KAAK4iH,SAAS,CACZ45d,qBAAsBxhiB,EAAKj3C,IAAI,SAC/B63T,QAAS5gR,EAAKj3C,IAAI,aAGjB45kB,EAAS5hlB,MACZ4uC,EAAS,IAAI+mB,O,gCAIjB,SAA0B2sD,EAAW4yJ,GACnC,IACoBqtU,EAChBjge,EADFw8B,iBAEF,EAKI76I,KAAKkqC,MAJP2wG,EADF,EACEA,iBACAlwG,EAFF,EAEEA,SACAggC,EAHF,EAGEA,MACA8yC,EAJF,EAIEA,KAGAi2M,EACE1zT,KAAKgnC,MADP0sR,OAGEA,IAAWziD,EAAUyiD,QACvB/oR,EAASu/B,YAAOuzC,EAAM,UAAWi2M,IAE/B74K,EAAiB92I,IAAI,kBAAoBu6kB,EAAqBv6kB,IAAI,iBACpE4mE,M,oBAsUJ,WACE,MAII3qE,KAAKkqC,MAHPgvC,EADF,EACEA,QACAmpP,EAFF,EAEEA,aACAt2S,EAHF,EAGEA,EAEF,OACE,gBAAC8sD,EAAA,EAAD,WACE,eAAC0qP,GAAA,EAAD,CAAkBr5M,MAAOn+F,EAAE,wCAAyCm7G,YAAalnI,KAAKknI,cACtF,gBAAC,OAAD,CAAMo1L,SAAUqrE,aAAgCtlE,EAAariU,KAAKqiU,eAAgBjpP,UAAWF,EAAQzC,KAArG,UACGz2E,KAAKsiC,OACN,eAACi8iB,GAAA,EAAD,CAAer3c,YAAalnI,KAAKknI,wB,GA3XdziG,aAgddwwC,4BACb00C,cACA60d,IACAvjgB,aAxfa,SAACC,GAAD,MAA+B,CAC5CgvC,MAAO,CACLhC,WAAYhtC,EAAMZ,QAAQ,IAE5B7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B44d,kBAAmB,CACjBzigB,MAAO,QAETmoP,YAAa,CACXlyM,OAAQr2C,EAAMZ,QAAQ,IACtB+4C,aAAcn4C,EAAMZ,WAEtBijgB,YAAa,CACXlqd,aAAcn4C,EAAMZ,WAEtB/tB,WAAY,CACVuvB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,QAse/Bn7B,YAAgB,gBAChB0/D,mBAnFsB,SAAC73E,EAAOyF,GAAc,IAAD,IACrCouG,EAAmBD,eAA6B5zG,GAChD0f,EAASm0F,EAAiB92I,IAAI,kBAC9BonD,GAAsB,IAAZzE,EAAgBsE,cAAoBhkB,GAASg0G,aAAwB,CAAEt0F,UAA1Bs0F,CAAoCh0G,GAC3FslB,EAAQ,UAAGnB,EAAQxpC,MAAK,SAAAypC,GAAM,OAAIA,EAAOrnD,IAAI,QAAU0oC,EAASgxiB,uBAAxD,aAAG,EAAoE15kB,IAAI,MAEnF06kB,EAAsBhyiB,EAASuc,eAAiBsD,EAClDljC,iBAAO,CACLkjC,WACAqxhB,SAAU,CACR/xd,QAAS,CAAC,aAGdh5G,gBAEE8rkB,EAAa,UAAGjyiB,EAASuO,YAAZ,aAAG,EAAej3C,IAAI,YACrC46kB,EAAgBD,GAChB,OAACA,QAAD,IAACA,OAAD,EAACA,EAAe36kB,IAAI,YAO6B,kBAAxC26kB,EAAc36kB,IAAI,WAAWA,IAAI,KAC1C46kB,EAAgBD,EAAch3kB,IAAI,UAAWg3kB,EAAc36kB,IAAI,WAAWiF,KAAI,SAAA04C,GAAI,OAAIA,EAAK39C,IAAI,cAN/F46kB,GADF,OAAID,QAAJ,IAAIA,OAAJ,EAAIA,EAAe3ilB,MACD2ilB,EAAch3kB,IAAI,UAAWuQ,kBAE7BmR,iBAAO,CAAEwiG,QAAS,KAOtC,IAAMtN,EAAiC,MAAjB7xE,EAASuO,KAC3BvO,EAASuO,KAAKtzC,IAAI,WAAYi3kB,GAC9BF,EAEJ,OAAO,aACLnge,gBACAnzD,UACA0vF,oBACG/nG,YAAyB,CAC1BqoE,WAAYC,wBAAckhe,IAC1BtwhB,IAAKxB,cACLnH,KAAMF,cACNw6hB,SAAUz/b,eAJTprG,CAKA9L,OAIoB,SAAC2D,EAA6B8B,GACvD,IAAQ1gB,EAAM0gB,EAAN1gB,EACR,MAAO,CACL4wjB,WAAY,YAAuG,IAArGxye,EAAoG,EAApGA,KAAM9mD,EAA8F,EAA9FA,KAAM85hB,EAAwF,EAAxFA,aAsBxBxyiB,EAAS,IAAIm0B,IAAiB,CAAEqrC,OAAMgze,eAAc71Q,UArBlC,SAACs3Q,GACbA,GAAWv7hB,IAAS5pB,YAAS8vB,IAC/B5e,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,qDACX65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,SACZL,SAAU,UAEZl6L,YAAa,CACX/kE,MAAO/U,EAAE,qCACT+5E,iBAAkB,KAClBC,QAAS,kBAAMp7D,EAAS,IAAI8I,IAAqB,CAAEk3D,MAAM,MACzD3E,YAAa,CACXC,MAAO,QACPC,eAAgB,sBAQ5B02e,WAAY,YAAsQ,IAApQzye,EAAmQ,EAAnQA,KAAMlpE,EAA6P,EAA7PA,GAAIklE,EAAyP,EAAzPA,aAAc02e,EAA2O,EAA3OA,mBAAoBM,EAAuN,EAAvNA,aAAcC,EAAyM,EAAzMA,cAAe91Q,EAA0L,EAA1LA,UACrF38R,EAAS,IAAI6zB,KAAqB,CAAEv9B,KAAIkpE,OAAMhE,eAAc02e,qBAAoBM,eAAcC,gBAAe91Q,oBAWjHhwC,aAAmC,CAAEt2B,SAAUs7U,KAC/C/0Q,oBAAU,CACR9pN,KAAM6+d,GACN70Q,oBAAoB,EACpB4+D,iBACAC,gBAAiB,CAAC,WAXPrxT,CAabsngB,K,6BCrlBF,YAyBe,KACbsC,sBAxBmC,SAACh+hB,GACpC,OAAOA,IAA2G,IAA/FA,EAASjgC,MAAM,CAAC,mBAAmBoF,WAAU,SAAA07B,GAAI,OAAIA,IAASC,IAASm9hB,sBAwB1FC,uBArBoC,SAACl+hB,GACrC,GAAIA,EAEF,SADqG,IAApFA,EAASjgC,MAAM,CAAC,mBAAmBoF,WAAU,SAAA07B,GAAI,OAAIA,IAASC,IAAS27hB,YAIjD,iBAA9Bz8hB,EAAS98C,IAAI,cAgBxBi7kB,0BAXuC,WACvC,MAAO,WAWPC,kBAR+B,WAC/B,MAAO,CAAC,UAAW,c,yLCIRC,EAAwB,SAAC,GAM/B,IALLC,EAKI,EALJA,kBACAC,EAII,EAJJA,sBAKIC,EAAcj2jB,iBAAO,IAGzB,OAAI+1jB,IACDA,GAAqBlnkB,kBAAQvL,SAAQ,SAACu3G,GAAmB,IAAD,IACjDm8B,EAAc,UAAGn8B,EAASlgH,IAAI,yBAAhB,QAAqC,MACnD88B,EAAU,UAAGojF,EAASlgH,IAAI,qBAAhB,QAAiC,MAC3C7D,EAAO+jH,EAASlgH,IAAI,QACpBygB,EAASy/F,EAASlgH,IAAI,WAAa,EAEzC,GAAK7D,EAAL,CAEA,IACM6pH,EAAO,CAAC,MADL,UAAMq2B,EAAN,YAAwBv/G,GACP3gC,GAG1Bm/kB,EAAcA,EAAYnvkB,MAAM65G,EAAMvlG,OAEjC66jB,KAIRD,GAAyBnnkB,kBAAQvL,SAAQ,SAAC4ykB,GAA4B,IAAD,EAC9Dl/b,EAAc,UAAGk/b,EAAkB1+jB,MAAM,CAAC,eAAgB,cAA5C,QAAsD,OAC1D0+jB,EAAkBv7kB,IAAI,YAAckU,kBAE5CvL,SAAQ,SAACysT,GAAiB,IAAD,EACzBlsF,EAAWp+N,OAAM,UAACsqT,EAAOv4S,MAAM,CAAC,SAAU,cAAzB,QAAmC,YAC5Cu4S,EAAOp1T,IAAI,UAAYkU,kBAE/BvL,SAAQ,SAAC6ykB,GACb,IAAMC,EAAeD,EAAUx7kB,IAAI,QAC7BrI,EAAQ6jlB,EAAUx7kB,IAAI,UAAY,EAClCq5H,EAAamid,EAAUx7kB,IAAI,eAAiBkU,iBAElD,GAAKunkB,EAEL,GAAwB,IAApBpid,EAAWrhI,KAAY,CAEzB,IAAMuI,EAAG,UAAM87I,EAAN,QACHr2B,EAAO,CAACkjH,EAAU3oO,EAAKk7kB,GAE7BH,EAAcA,EAAYnvkB,MAAM65G,EAAMruH,QAGtC0hI,EAAW1wH,SAAQ,SAAC0qH,GAAmB,IAAD,EAC9Bv2F,EAAU,UAAGu2F,EAASrzH,IAAI,aAAhB,QAAyB,MACnCO,EAAG,UAAM87I,EAAN,YAAwBv/G,GAC3BkpF,EAAO,CAACkjH,EAAU3oO,EAAKk7kB,GAE7BH,EAAcA,EAAYnvkB,MAAM65G,EAAMruH,eAMzC2jlB,IAkFII,EAAyB,SAAC,GAYhC,IAXLzod,EAWI,EAXJA,QACAnT,EAUI,EAVJA,UACA67d,EASI,EATJA,iBASI,IARJC,+BAQI,MARsBv2jB,iBAAO,IAQ7B,MAPJw2jB,uBAOI,MAPc,UAOd,EACA9/N,EAAgB9oP,EAAQjzH,IAAI,gBAAiBqlB,iBAAO,KAElDg3H,EAAiBppB,EAAQjzH,IAAI,WAC7B88B,EAAam2F,EAAQjzH,IAAI,YAGzB87kB,EAAsBF,EAAwB57kB,IAAI,cA0BxD,YAzB4BjI,IAAxB+jlB,GAA6D,OAAxBA,IACvC//N,EAAgBA,EAAc5vW,MAAM,CAAC2vkB,EAAqB,cAAe,SAI3EF,EAAwBjzkB,SAAQ,SAACm4T,EAAmB26Q,GAClD,IAAMM,EA5F6B,SAAC,GAOjC,IAAD,IAPoCj8d,iBAOpC,MAPgDz6F,iBAAO,IAOvD,EAP4Ds2jB,EAO5D,EAP4DA,iBAO5D,IAP8EE,uBAO9E,MAPgG,UAOhG,EAP2GG,EAO3G,EAP2GA,gBAAiBC,EAO5H,EAP4HA,YAAaR,EAOzI,EAPyIA,aAQ7I,IAAK37d,GAAgC,IAAnBA,EAAU9nH,KAC1B,OAAO,KAWT,IARA,IACMkklB,EAAgB,CAACP,EADoB,aAArBA,EAAkC,eAAiB,YAEnEQ,EAAiB,CAACrxkB,OAAO+wkB,GAAkB,OAE3CO,EAAW,UAAMJ,EAAN,YAAyBC,GACpCI,EAAU,UAAML,EAAN,QAGhB,MAAuBE,EAAvB,eAAsC,CAAjC,IAAMl/iB,EAAQ,KACXs/iB,EAAoBx8d,EAAU9/G,IAAIg9B,GACxC,GAAKs/iB,EAAL,CAFoC,oBAIbH,GAJa,IAIpC,2BAAuC,CAAC,IAA7BjzW,EAA4B,QAC/BqzW,EAAkBD,EAAkBt8kB,IAAIkpO,GAC9C,GAAKqzW,EAAL,CAEA,IAAM5klB,EAAQ4klB,EAAgB1/jB,MAAM,CAACu/jB,EAAaX,IAClD,QAAc1jlB,IAAVJ,EACF,OAAOA,IAVyB,gCAgBtC,cAAuBuklB,EAAvB,eAAsC,CAAjC,IAAMl/iB,EAAQ,KACXs/iB,EAAoBx8d,EAAU9/G,IAAIg9B,GACxC,GAAKs/iB,EAAL,CAFoC,oBAIbH,GAJa,IAIpC,2BAAuC,CAAC,IAA7BjzW,EAA4B,QAC/BqzW,EAAkBD,EAAkBt8kB,IAAIkpO,GAC9C,GAAKqzW,EAAL,CAEA,IAAM5klB,EAAQ4klB,EAAgB1/jB,MAAM,CAACw/jB,EAAYZ,IACjD,QAAc1jlB,IAAVJ,EACF,OAAOA,IAVyB,gCAetC,OAAO,KAyCiB6klB,CAAwB,CAC5C18d,YACA67d,mBACAE,kBACAG,gBAAiB3/b,EACjB4/b,YAAan/iB,EACb2+iB,iBAGF,GAAsB,OAAlBM,EAAwB,CAC1B,IAAMv0N,EAAiBzL,EAAcl/V,MAAM,CAACikT,EAAW,mBACjD2mD,EAAmB1L,EAAcl/V,MAAM,CAACikT,EAAW,oBAAqBhyC,IAAkB2hT,KAC1Fv+jB,EAAMq1W,YAAoB,CAAE5vX,MAAOmT,OAAOixkB,GAAgBv0N,iBAAgBC,qBAChF1L,EAAgBA,EACb5vW,MAAM,CAAC20T,EAAW,cAAe5uT,GACjC/F,MAAM,CAAC20T,EAAW,kBAAmB5uT,OAIrC6pW,GAGH0gO,EAA8B,SAACxpd,EAAS2od,GAC5C,IAAM7/N,EAAgB9oP,EAAQjzH,IAAI,gBAAiBqlB,iBAAO,KAC1D,OAAOu2jB,EAAwBh0kB,QAAO,SAAC80kB,EAAOx8d,GAC5C,IAAMunQ,EAAmB1L,EAAcl/V,MAAM,CAACqjG,EAAU,oBAAqB4uK,IAAkB2hT,KAC/F,OAAOiM,EAAMvwkB,MAAM,CAAC+zG,EAAU,cAAyE,eAA1D+S,EAAQp2G,MAAM,CAAC,gBAAiBqjG,EAAU,YAAgC,GAAGm2I,QAAQoxH,GAAoB,MACrJ1L,IAGQ4gO,EAAkB,SAAC1pd,EAAS2pd,GACvC,IAAMC,EAA2BD,EAAOh/jB,MAAK,SAACvhB,GAC5C,OAAOA,EAAE2D,IAAI,kBAAoBizH,EAAQjzH,IAAI,UAAY3D,EAAE2D,IAAI,cAAgBizH,EAAQjzH,IAAI,mBAEvF88kB,EAAgBF,EAAOh/jB,MAAK,SAACvhB,GACjC,OAAOA,EAAE2D,IAAI,kBAAoBizH,EAAQjzH,IAAI,UAAkC,OAAtB3D,EAAE2D,IAAI,eAEjE,OAAO68kB,GAA4BC,GAsZxBC,EAA0C,SAAC,GAYjD,IAAD,IAXJj9d,EAWI,EAXJA,UACA67d,EAUI,EAVJA,iBACA5oX,EASI,EATJA,iBACAj/F,EAQI,EARJA,SAQI,IAPJo1G,gBAOI,MAPO,UAOP,EACJ,GAAsB,IAAlBp1G,EAAS97H,KACX,OAAO87H,EAGT,IAAMkpd,EAAelpd,EAASl2G,MAAK,SAAAq1G,GAAO,OAA2B,IAAvBA,EAAQjzH,IAAI,SAC1D,IAAKg9kB,EACH,OAAOlpd,EAGT,IAAM8nd,EAA0BoB,EAAah9kB,IAAI,iBAAiB4H,QAAO,SAACwuiB,EAAMpnJ,EAAQ5+Y,GACtF,MAAgC,eAA5B4+Y,EAAOhvZ,IAAI,cAA2D,aAA1BgvZ,EAAOhvZ,IAAI,WAClDo2iB,EAAKzyiB,IAAIqrZ,EAAOhvZ,IAAI,WAAYoQ,GAElCgmiB,IACN/whB,iBAAO,KAGV,OAAI0tM,EAAiB/yN,IAAI,gBAArB,OAAsC8/G,QAAtC,IAAsCA,GAAtC,UAAsCA,EAAW9/G,IAAI,mBAArD,aAAsC,EAA4BhI,QAAlE,OAA0E8nH,QAA1E,IAA0EA,GAA1E,UAA0EA,EAAW9/G,IAAI,uBAAzF,aAA0E,EAAgChI,MACpF87H,EAAS7uH,KAAI,SAACguH,GAAa,IAAD,EAChD,IAAKA,GAAWA,EAAQjzH,IAAI,MAAQ,EAClC,OAAOizH,EAGT,IAAI,UAAA8/F,EAAiB/yN,IAAI,qBAArB,eAAoChI,QAAS2klB,EAAgB1pd,EAAS8/F,EAAiB/yN,IAAI,eAC7F,OAAOizH,EAAQtvH,IAAI,gCAAgC,GAEnD,IAAMs5kB,EAAwBhqd,EAAQjzH,IAAI,iBACpCk9kB,EAAuBxB,EAAuB,CAACzod,UAASnT,YAAW67d,mBAAkBC,0BAAyBC,gBAAiB3yW,IACrI,OAAOj2G,EAAQhmH,eAAc,SAACywQ,GAC5BA,EAAI/5Q,IAAI,gCAAgC,GAGnCgzL,kBAAQumZ,EAAsBD,IACjCv/T,EAAI/5Q,IAAI,gBAAiB0hB,iBAAOghW,YAAsB,CAAEC,cAAe42N,EAAqB1ikB,iBAO5Es5G,EAAS7uH,KAAI,SAACguH,GACpC,IAAKA,IAAkC,IAAvBA,EAAQjzH,IAAI,MAC1B,OAAOizH,EAGT,IAAMkqd,EAAuBlqd,EAAQjzH,IAAI,iBACnCk9kB,EAAuBT,EAA4Bxpd,EAAS2od,GAClE,OAAO3od,EAAQhmH,eAAc,SAACywQ,GAC5BA,EAAI/5Q,IAAI,gCAAgC,GAGnCgzL,kBAAQumZ,EAAsBC,IACjCz/T,EAAI/5Q,IAAI,gBAAiB0hB,iBAAOghW,YAAsB,CAAEC,cAAe42N,EAAqB1ikB,mB,oFC5qBvF4ikB,EApBK,CAClBz5kB,IAAK,SAAa3E,EAAOq+kB,EAAMC,EAAM3llB,GACnC,IAAI4llB,EAAWv+kB,EAAMgB,IAAIq9kB,GAEpBE,IACHA,EAAW,IAAI1ukB,IACf7P,EAAM2E,IAAI05kB,EAAME,IAGlBA,EAAS55kB,IAAI25kB,EAAM3llB,IAErBqI,IAAK,SAAahB,EAAOq+kB,EAAMC,GAC7B,IAAIC,EAAWv+kB,EAAMgB,IAAIq9kB,GACzB,OAAOE,EAAWA,EAASv9kB,IAAIs9kB,QAAQvllB,GAEzC0sH,OAAQ,SAAiBzlH,EAAOq+kB,EAAMC,GACrBt+kB,EAAMgB,IAAIq9kB,GAChB54d,OAAO64d,K,kBCThBE,GAAgB,IACb,SAASxsL,IASd,OARAwsL,GAAgB,E,qBC2CHC,MAjDf,SAA0B5kY,GACxB,IAAI6kY,EAA4C,oBAApB7kY,EAQ5B,MAAO,CACLv+M,OAAQ,SAAgB68E,EAAO1sE,GAC7B,IAAIotE,EAEJ,IACEA,EAAS6lgB,EAAiB7kY,EAAgB1hI,GAAS0hI,EACnD,MAAOxrK,GAQP,MAAMA,EAGR,IAAK5iC,IAAS0sE,EAAMwmgB,YAAcxmgB,EAAMwmgB,UAAUlzkB,GAChD,OAAOotE,EAGT,IAAI8lgB,EAAYxmgB,EAAMwmgB,UAAUlzkB,GAE5BmzkB,EAAsB73iB,YAAS,GAAI8xC,GAWvC,OATAx9E,OAAO0D,KAAK4/kB,GAAWh1kB,SAAQ,SAAUpI,GAOvCq9kB,EAAoBr9kB,GAAOs9kB,YAAUD,EAAoBr9kB,GAAMo9kB,EAAUp9kB,OAEpEq9kB,GAET31iB,QAAS,KChDE61iB,EADC,GCWhB,SAASC,EAAWz7iB,EAAM6yC,EAASv/B,GACjC,IAAI3S,EAAQX,EAAKW,MAGjB,GAFoBX,EAAK07iB,cAEPC,kBAChB,OAAO9ogB,GAAW,GAGflyC,EAAMi7iB,eACTj7iB,EAAMi7iB,aAAe,CAEnBvmlB,MAAO,KAEPwmlB,SAAU,KAEVC,QAAS,KAMb,IAAIC,GAAW,EAoBf,OAlBIp7iB,EAAMkyC,UAAYlyC,EAAMi7iB,aAAaE,UACvCn7iB,EAAMi7iB,aAAaE,QAAUn7iB,EAAMkyC,QACnCkpgB,GAAW,GAGTlpgB,IAAYlyC,EAAMi7iB,aAAaC,WACjCl7iB,EAAMi7iB,aAAaC,SAAWhpgB,EAC9BkpgB,GAAW,GAGTA,IACFp7iB,EAAMi7iB,aAAavmlB,MAAQ2mlB,YAAa,CACtCC,YAAat7iB,EAAMi7iB,aAAaE,QAChCI,WAAYrpgB,EACZv/B,UAAWA,KAIR3S,EAAMi7iB,aAAavmlB,MAG5B,SAASizV,EAAOhmT,EAAOuB,GACrB,IAAIlD,EAAQ2B,EAAM3B,MACdk0C,EAAQvyC,EAAMuyC,MACd6mgB,EAAgBp5iB,EAAMo5iB,cACtBS,EAAgB75iB,EAAM65iB,cACtBh0kB,EAAOm6B,EAAMn6B,KAEjB,IAAIuzkB,EAAcC,kBAAlB,CAIA,IAAIS,EAAetB,EAAcp9kB,IAAIg+kB,EAAcx1U,cAAei2U,EAAetngB,GAE5EungB,IACHA,EAAe,CACbpjP,KAAM,EACNqjP,YAAa,KACbC,cAAe,MAEjBxB,EAAcz5kB,IAAIq6kB,EAAcx1U,cAAei2U,EAAetngB,EAAOungB,IAGvE,IAAIz2iB,EAAUlC,YAAS,GAAI04iB,EAAcx2iB,QAAS,GAAI+1iB,EAAe,CACnE7mgB,MAAOA,EACPjxE,KAAoC,mBAAvB83kB,EAAc93kB,KAAqB83kB,EAAc93kB,KAA2B,QAApBixE,EAAMxB,YAG7E1tC,EAAQs9X,WAAat9X,EAAQ6gO,yBAA2B7gO,EAAQ0gO,kBAChE,IAAIF,EAAiBu1U,EAAcv1U,eAEnC,GAA0B,IAAtBi2U,EAAapjP,KAAY,CAC3B,IAAIqjP,EAEAX,EAAca,cAChBF,EAAcvB,EAAcp9kB,IAAIg+kB,EAAca,YAAaJ,EAAetngB,IAG5E,IAAIU,EAAS4mgB,EAAcnklB,OAAO68E,EAAO1sE,GAEpCk0kB,KACHA,EAAcX,EAAcz6K,IAAIuI,iBAAiBj0V,EAAQ9xC,YAAS,CAChEmgE,MAAM,GACLj+D,KACS2iT,SAERozP,EAAca,aAChBzB,EAAcz5kB,IAAIq6kB,EAAca,YAAaJ,EAAetngB,EAAOwngB,IAInEl2U,GACFA,EAAe7tP,IAAI+jkB,GAGrBD,EAAaC,YAAcA,EAC3BD,EAAaE,cAAgB1yK,YAAiBr0V,GAGhD,GAAI6mgB,EAAaE,cAAe,CAC9B,IAAIE,EAAed,EAAcz6K,IAAIuI,iBAAiB4yK,EAAaE,cAAe74iB,YAAS,CACzFmgE,MAAM,GACLj+D,IACH62iB,EAAavykB,OAAO45B,GACpB24iB,EAAal0P,SACb3nT,EAAM67iB,aAAeA,EACrB77iB,EAAMkyC,QAAUmpgB,YAAa,CAC3BC,YAAaG,EAAaC,YAAYxpgB,QACtCqpgB,WAAYM,EAAa3pgB,UAGvBszL,GACFA,EAAe7tP,IAAIkkkB,QAGrB77iB,EAAMkyC,QAAUupgB,EAAaC,YAAYxpgB,QAG3CupgB,EAAapjP,MAAQ,GAGvB,SAAS/uV,EAAOm/B,EAAOvF,GACrB,IAAIlD,EAAQyI,EAAMzI,MAEdA,EAAM67iB,cACR77iB,EAAM67iB,aAAavykB,OAAO45B,GAI9B,SAASs+N,EAAO67C,GACd,IAAIr9Q,EAAQq9Q,EAAMr9Q,MACdk0C,EAAQmpO,EAAMnpO,MACd6mgB,EAAgB19R,EAAM09R,cACtBS,EAAgBn+R,EAAMm+R,cAE1B,IAAIT,EAAcC,kBAAlB,CAIA,IAAIS,EAAetB,EAAcp9kB,IAAIg+kB,EAAcx1U,cAAei2U,EAAetngB,GACjFungB,EAAapjP,MAAQ,EACrB,IAAI7yF,EAAiBu1U,EAAcv1U,eAET,IAAtBi2U,EAAapjP,OACf8hP,EAAc34d,OAAOu5d,EAAcx1U,cAAei2U,EAAetngB,GACjE6mgB,EAAcz6K,IAAIwI,iBAAiB2yK,EAAaC,aAE5Cl2U,GACFA,EAAet9P,OAAOuzkB,EAAaC,cAInC17iB,EAAM67iB,eACRd,EAAcz6K,IAAIwI,iBAAiB9oY,EAAM67iB,cAErCr2U,GACFA,EAAet9P,OAAO83B,EAAM67iB,gBAKlC,SAASC,EAAqB54jB,EAAM/e,GAClC,IACI01I,EADAv8I,EAAMmgC,IAAMyG,OAAO,IAGnB63iB,EAAat+iB,IAAM+B,SAAQ,WAC7B,MAAO,KACNr7B,GAGC7G,EAAIwjC,UAAYi7iB,IAClBz+kB,EAAIwjC,QAAUi7iB,EACdlic,EAAS32H,KAGXua,IAAM0B,WAAU,WACd,OAAO,WACD06G,GACFA,OAGH,CAACkic,IAwDS3zd,IApDf,SAAoBwtF,GAClB,IAAI5wK,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE9E8K,EAAOw9B,EAAQx9B,KACfw0kB,EAAwBh3iB,EAAQshY,gBAChC3zX,EAAY3N,EAAQ2N,UACpBspiB,EAAwBj3iB,EAAQ8wK,aAChCA,OAAyC,IAA1BmmY,EAAmCpB,EAAYoB,EAC9DC,EAAiBhmiB,YAAyBlR,EAAS,CAAC,OAAQ,kBAAmB,YAAa,iBAE5Fw2iB,EAAgBhB,EAAiB5kY,GACjC0wN,EAAkB9+Z,GAAQw0kB,GAAyB,aAOvD,OANAR,EAAcx2iB,QAAU,CACtB7vC,MAAO44Z,IACPvmZ,KAAMA,EACN63F,KAAMinU,EACNA,gBAAiBA,GAEZ,WACL,IAAIpjY,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5Ew3E,EAAQwjD,eAAco+E,EAEtBilY,EAAgBj4iB,YAAS,GAAIrF,IAAMgG,WAAW04iB,KAAgB,GAAID,GAElE71jB,EAAWoX,IAAMyG,SACjBk4iB,EAAe3+iB,IAAMyG,SAuBzB,OAtBA43iB,GAAqB,WACnB,IAAIh7iB,EAAU,CACZt5B,KAAMA,EACNw4B,MAAO,GACPw7iB,cAAeA,EACfT,cAAeA,EACf7mgB,MAAOA,GAKT,OAHAyzQ,EAAO7mT,EAASoC,GAChBk5iB,EAAat7iB,SAAU,EACvBza,EAASya,QAAUA,EACZ,WACL0gO,EAAO1gO,MAER,CAACozC,EAAOsngB,IACX/9iB,IAAM0B,WAAU,WACVi9iB,EAAat7iB,SACfx3B,EAAO+c,EAASya,QAASoC,GAG3Bk5iB,EAAat7iB,SAAU,KAElBg6iB,EAAWz0jB,EAASya,QAASoC,EAAMgvC,QAASv/B,M,6BCxPvD,qMA+DIx9C,GAFFw9C,YAEUkoE,YAAYC,MAET3lH,O,qGC3DHknlB,E,OAFG,O,SAEHA,K,+BAAAA,M,KAIL,IAAMC,EAGX,WACSp8iB,GACN,yBADMA,UACP,KAJchnC,KAAOmjlB,EAAoBE,gB,6BCX7C,iFAGa1jiB,EAAsB,wBAGtB2jiB,EAAiBv+e,IAAiBC,QAAQ,0BAAkB,M,6B/gBJzE,kCAKO,IAAMomL,EAAc,yD,6BghBL3B,IAAI3kE,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,qGACD,SAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,sDAEe,SAASkkB,EAAc9hP,GACpC,IAAI+hP,EAAa/hP,EAAK+hP,WAClBq7T,EAAcp9iB,EAAKulF,QAInBy3V,GAHOh9a,EAAK73B,KAEIi2B,IAAMyG,YAAsBpvC,IAAfssR,GACAtgP,SAE7Bi8F,EAAkBt/F,IAAMia,SAAS+kiB,GACjCC,EAAa3/c,EAAgB,GAC7B4tL,EAAW5tL,EAAgB,GA0B/B,MAAO,CAxBKs/U,EAAej7L,EAAas7T,EAmBXj/iB,IAAMykF,aAAY,SAAUr5G,GAClDwzc,GACH1xJ,EAAS9hT,KAEV,O,6BCrCL,+DAEe,SAASo1Z,IACtB,OAAOxgY,IAAMgG,WAAWyoY,O,6BCMX,SAASywK,IACtB,IAAK,IAAI54jB,EAAOrnB,UAAU7B,OAAQqwC,EAAQ,IAAIzwC,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAChFinB,EAAMjnB,GAAQvnB,UAAUunB,GAG1B,OAAOinB,EAAMvmC,QAAO,SAAUutI,EAAKhvH,GACjC,OAAY,MAARA,EACKgvH,EASF,WACL,IAAK,IAAI7sH,EAAQ3oB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM4qB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFtB,EAAKsB,GAAS5oB,UAAU4oB,GAG1B4sH,EAAIjxI,MAAMjI,KAAMgrB,GAChBd,EAAKjiB,MAAMjI,KAAMgrB,OAElB,eAjCL,mC,kKxtBUO,SAAS44jB,EAAY16kB,GAE1B,IAAM26kB,EAAe,cAEfx5e,EAAmB,CACvBy5e,IAAK,cACL/riB,MAAM,EACN4iT,UAAWkpP,EACX92G,QAAS82G,EACTnvd,SAAU,EACVjvB,OAAQ,KACRsnD,OAAQ,EACRg3b,gBAAgB,EAChBr+jB,OAAQ,kBAkHO,YACA,oBACA,qBACA,YAEA,8CACA,cAAAqI,KAAA,+BACA,gBACA,gBACA,6EACA,oBACA,wCACA,OACA,kBACA,YAAAs8E,EAAA,YACA,uBACA,0BAlID25e,CAAc35e,KAO9B,OAJInhG,GACF+6kB,EAAc55e,EAASnhG,GAGlBmhG,EAeF,SAAS45e,EAAc55e,GAAsD,IAApCnhG,EAAoC,uDAAV,GAiCvD,GAhCbA,EAAQihG,QACLE,EAAQynG,WAAa5oM,EAAQihG,KAAK+5e,aACrC75e,EAAQynG,UAAY5oM,EAAQihG,KAAK+5e,YAG9B75e,EAAQ85e,KAAQj7kB,EAAQi7kB,MAC3B95e,EAAQ85e,IAAMj7kB,EAAQihG,KAAKlpE,IAAM/3B,EAAQihG,KAAK/9C,OAASljD,EAAQihG,KAAK99C,WAIxEg+C,EAAQswP,UAAYzxV,EAAQyxV,WAAa,cAErCzxV,EAAQk7kB,qBACV/5e,EAAQ+5e,mBAAqBl7kB,EAAQk7kB,oBAGnCl7kB,EAAQ66kB,iBACV15e,EAAQ05e,eAAiB76kB,EAAQ66kB,gBAE/B76kB,EAAQ46kB,MAEVz5e,EAAQy5e,IAA6B,KAAvB56kB,EAAQ46kB,IAAIjilB,OAAgBqH,EAAQ46kB,IAAM,oBAErCholB,IAAjBoN,EAAQ6uC,OACVsyD,EAAQtyD,KAAO7uC,EAAQ6uC,OAEpBsyD,EAAQ85e,KAAOj7kB,EAAQi7kB,MAC1B95e,EAAQ85e,IAAR,UAAe,QAEA,8BACA,qBAEA,iBACA,uBACA,gCACA,0BACA,CACA,4BACA,oBAEA,YACA,qBAEA,gBACA,8BAEA,2BACA,0BAEA,2BACA,yBAEA,6BACA,mBAEA,WACA,mBAeA,gBACA,SACA,EACA,aACA,kBACA,qBAGA,S,6BytB7HnB,wCAsCe77Q,IAvBkC,SAAC,GAM3C,IALL9hN,EAKI,EALJA,IACAuwP,EAII,EAJJA,YACA1tO,EAGI,EAHJA,IAGI,IAFJ/tD,aAEI,MAFI,GAEJ,EADJg0L,EACI,EADJA,QAGA,OACE,cAAC,IAAD,CAASplJ,MAAOolJ,GAAW,GAA3B,SACE,eAAC,IAAD,CACE91L,WAAW,EACXE,UAAU,MACVT,WAAW,SACXqiC,MAAO,CAAChgC,MAAO,QAJjB,UAME,qBAAKkrC,IAAKA,EAAKlL,MAAO,CAAEhgC,SAAS+tD,IAAKA,IACpC0tO,GAAe,cAAC,IAAD,UAAaA,W,4LC9BhCstO,EAAgB3klB,SAChB4klB,EAAoB5klB,SAGpBqmC,EAF0B,qBAAXrX,QACjB,sBAAsBqsB,KAAKrsB,OAAOsiL,WAAatiL,OAAOsiL,UAAUG,WAC1BhrK,YAAYD,kBAEhDq+iB,EAAwBC,2BACxB,SAAC3hlB,GACC,IACI2hlB,mCAAgBC,0BAAgB5hlB,GAEpC,MAAOuF,GACH,GAAkB,qBAAdA,EAAEipC,QAIF,MAAMjpC,EAHNvF,MAOV,SAACA,GAAD,OAAQA,KAqDRg+C,EAAW,SAAChpC,GAAD,OAAOA,GASjB,SAAS6sB,EAAc6Y,GAC1B,IA9DoBmniB,EA8Ddx7kB,EAAUy7kB,wBAAkB,eAC7BN,EAAgB,CACKjklB,EAAG,CAAE0nC,QAASyV,GACdn3C,EAAG,CAAE0hC,SAAU,GACfzf,EAAG,IAAIxpB,IACPu7J,EAAG,SAAC1jF,GAAD,OAAOA,QAMpC,OAHAxtE,EAAQo7kB,GAAqBp7kB,EAAQk9B,SACrCl9B,EAAQk9B,UAvEYs+iB,EAuEcx7kB,EAAQk9B,SAtElB,SAAC,GAAyB,IAAvB1qC,EAAuB,EAAvBA,MAAO4qC,EAAgB,EAAhBA,SACxBo5T,EAAWx0T,iBAAOxvC,GAClBkplB,EAAa15iB,iBAAO,GAC1B,EAA8BwT,mBAAS,MAAvC,mBAAOQ,EAAP,KAAgB2liB,EAAhB,KACI3liB,IACAA,EAAQxjD,GACRmplB,EAAW,OAEf,IAAMt+iB,EAAe2E,mBACrB,IAAK3E,EAAauB,QAAS,CACvB,IAAM7C,EAAY,IAAIpmC,IAmBtB0nC,EAAauB,QAAb,eACKu8iB,EAAgB,CACKjklB,EAAGs/V,EACHt5V,EAAGw+kB,EACHv8jB,EAAG4c,EACHm1H,EAvBX,SAACv3J,EAAImpC,GAChB44iB,EAAW98iB,SAAW,EACtB,IAAM5c,EAAS,CACX9kB,EAAGw+kB,EAAW98iB,UAEF,OAAZkE,QAAgC,IAAZA,OAAqB,EAASA,EAAQ0lO,YAC1DxmP,EAAO9kB,IAAM,EACb8kB,EAAOuqD,EAAI,IAAIx2B,SAAQ,SAACk4B,GACpB0tgB,GAAW,kBAAM,SAACzklB,GACd8qB,EAAO9qB,EAAIA,SACJ8qB,EAAOuqD,EACd0B,EAAE/2E,WAId6kC,EAAUv4B,SAAQ,SAACs4B,GAAD,OAAcA,EAAS9Z,MACzCroB,OAoBR,OATAkjC,GAA0B,WACtB25T,EAAS53T,QAAUpsC,EACnBkplB,EAAW98iB,SAAW,EACtBy8iB,GAAsB,WAClBh+iB,EAAauB,QAAQu8iB,GAAeh8jB,EAAE3b,SAAQ,SAACs4B,GAC3CA,EAAS,CAAE5+B,EAAGw+kB,EAAW98iB,QAAS1nC,EAAG1E,YAG9C,CAACA,IACGuqC,wBAAcy+iB,EAAc,CAAEhplB,MAAO6qC,EAAauB,SAAWxB,YAwBjEp9B,EAAQqhC,SACRrhC,EAeJ,SAAS47kB,EAAmB57kB,EAASunC,GACxC,IAAMlK,EAAew+iB,qBAAe77kB,GAASm7kB,GAM7C,IACgC3olB,EAEI6qC,EAFlBnmC,EAAK0nC,QACSpe,EACI6c,EADlBngC,EAAK0hC,QACF7C,EAAesB,EAAlBle,EACZi9F,EAAW70E,EAAS/0C,GAC1B,EAA0BsvC,sBAAW,SAAC1zB,EAAM4T,GACxC,IAAKA,EAED,MAAO,CAACxvB,EAAO4pH,GAEnB,GAAI,MAAOp6F,EACP,MAAMA,EAAOuqD,EAEjB,GAAIvqD,EAAO9kB,IAAMsjB,EACb,OAAItrB,OAAOkH,GAAGgS,EAAK,GAAIguG,GACZhuG,EAEJ,CAAC5b,EAAO4pH,GAEnB,IACI,GAAI,MAAOp6F,EAAQ,CACf,GAAI9sB,OAAOkH,GAAGgS,EAAK,GAAI4T,EAAO9qB,GAC1B,OAAOkX,EAEX,IAAM0tkB,EAAev0iB,EAASvlB,EAAO9qB,GACrC,OAAIhC,OAAOkH,GAAGgS,EAAK,GAAI0tkB,GACZ1tkB,EAEJ,CAAC4T,EAAO9qB,EAAG4klB,IAG1B,MAAO5pV,IAGP,mBAAW9jP,KACZ,CAAC5b,EAAO4pH,IA9BX,mBAAOt+E,EAAP,KAAc2D,EAAd,KA0CA,OAXKvsC,OAAOkH,GAAG0hC,EAAM,GAAIs+E,IAGrB36E,IAEJ5E,GAA0B,WAEtB,OADAd,EAAUtmB,IAAIgsB,GACP,WACH1F,EAAUujF,OAAO79E,MAEtB,CAAC1F,IACG+B,EAAM,GAWV,SAASyD,EAAWvhC,GACvB,OAAO47kB,EAAmB57kB,EAAS23C,M,sKCzHlCokiB,E,kgBCtDUthe,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,0QACD,W,sBCFW69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,8VACD,e,6QCAE0pH,GAAYJ,cAAW,SAACl0C,GAAD,OAAkB2zL,aAAa,CAC1Dq2U,iCAAkC,CAChC5ogB,SAAU,IACVR,QAASZ,EAAMZ,WAEjB6qgB,YAAa,CACX9xd,aAAcn4C,EAAMZ,QAAQ,SAsEjB8qgB,GAvDoE,SAAC,GAK7E,IAJLz6e,EAII,EAJJA,KACAg6B,EAGI,EAHJA,QACA0gd,EAEI,EAFJA,qBACAC,EACI,EADJA,iBAGMpsgB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAER,OACE,gBAACiqS,EAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAASA,EACTzrD,QAAS,CACP64C,MAAO74C,EAAQgsgB,kCAJnB,UAOE,eAACjvR,EAAA,EAAD,UACE,gBAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,cAAc7sB,UAAWF,EAAQisgB,YAAhE,oCAGA,eAAC3re,EAAA,EAAD,CAAYE,QAAQ,QAApB,mFAGA,eAACF,EAAA,EAAD,CAAYE,QAAQ,QAApB,qGAKJ,gBAAC08M,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAAS8f,EACT1+B,MAAM,UAFR,SAIIl6E,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEE,QAASwge,EACTp/e,MAAM,UAFR,kCAMA,eAAC0e,EAAA,EAAD,CACEE,QAASyge,EACTr/e,MAAM,UAFR,qC,sCHtBKs/e,GAAuB,qBAE9BC,GAAW,IAEXC,GAAoB,MAEpBC,GAAoB,Q,SAGrBT,O,sBAAAA,I,qBAAAA,I,sBAAAA,M,KAyCL,IAkEM75U,GAAgB,CACpBu6U,qBAAsB,EACtB5iR,iBAAkB,MAClB67E,iBAAkB,KAClBhjF,QAAS,GACTgqR,yBAAyB,EACzBC,mBAAoB,GACpB37I,cAAc,EACd47I,2BAA2B,EAC3BC,iBAAkBd,EAAkBvtZ,QACpCp5E,cAAe1rG,gBACfozkB,oCAAoC,EACpCC,oBAAqB,EACrBC,uBAAwB,GAGpBC,G,oDAGJ,WAAYj8iB,GAAiC,IAAD,8BAC1C,cAAMA,IAHDk9Z,iBAAsD3ia,cAEjB,EAKrCusO,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAMI,EAAK/mO,MALPu1F,EADF,EACEA,OACA5H,EAFF,EAEEA,SACA5vB,EAHF,EAGEA,OACAm+e,EAJF,EAIEA,oBACAz7e,EALF,EAKEA,KAGEA,IAAS0T,EAAU1T,OACrB,EAAKiY,SAAS,CAAE+ie,qBAAsBS,EAAqBH,oBAAqBG,IAChF,EAAKC,wBAAwBD,KAE1Bz7e,GAAQ0T,EAAU1T,MACrB,EAAKiY,SAASwoJ,IAGhB,IAAMk7U,EAAkBzud,EAASj3G,MAAM,CAAC,EAAKomB,MAAM2+iB,qBAAsB,mBACzE,GAAIh7e,IAAS0T,EAAU1T,MAAQ27e,EAAiB,CAC9C,IAAM/ud,EAAWM,EAASj3G,MAAM,CAAC,EAAG,WAG9B2lkB,EAFoB1ud,EAASj3G,MAAM,CAAC,EAAG,eAAerV,QAAO,SAACmmN,GAAD,MAA2C,YAA5BA,EAAU3tN,IAAI,aAEnD4H,QAAO,SAACutI,EAAK14B,EAAQgme,GAChE,IAAM3uX,EAAer3G,EAAOz8G,IAAI,gBAChC,MAA6B,YAAzBy8G,EAAOz8G,IAAI,WAA2B07H,EAAO17H,IAAI,cAAcE,IAAI4zN,GACjE3+E,EAAIj1I,IAAI4zN,GACH3+E,EAAIhpI,MAAM,CAAC2nN,EAAc,UAAW3+E,EAAIt4H,MAAM,CAACi3M,EAAc,WAAWzrN,KAAKo0G,EAAO94G,IAAI,KAAM84G,EAAOz8G,IAAI,eAEzGm1I,EAAIxxI,IAAImwN,EAAcp4F,EAAO7+G,MAAM,CAAC,aAAci3M,IAAervG,OAAO,UAAU9gH,IAAI,SAAUuQ,eAAK,CAACuoG,EAAO94G,IAAI,KAAM84G,EAAOz8G,IAAI,iBAGtIm1I,IACNtmI,iBAEH,EAAKgwG,SAAS,CAAEgje,yBAAyB,IACxC39e,EAAOJ,QAAQ,CACdvB,QAAS,MACTC,SAAU,iBACVqiB,eAAgBz6F,iBAChB06F,WAAW,EACXC,WAAW,EACX5gB,QAAS,CACP7pG,QAAQ,GAEVo4E,KAAM,CACJ8gD,WACAi6F,WAAY+0X,KAEIhwgB,MAAK,SAACwyC,GAAc,IAAD,MAC/BmQ,EAAa,OAAGnQ,QAAH,IAAGA,GAAH,UAAGA,EAAU7hF,eAAb,iBAAG,EAAmBoc,WAAtB,iBAAG,EAAwB0zE,QAAQ,UAAnC,aAAG,EAAoCkC,cAI1D,EAAKtW,SAAS,CAAEije,mBAAoB3sd,OACnCytE,OAAM,SAACv1J,GACRppB,QAAQ7Z,MAAM,uBAAwB,CAAEijC,WACvCm4V,SAAQ,WACT,EAAK3mR,SAAS,CAAEgje,yBAAyB,SA9DH,EAmErC3pR,YAAc,WACnB,IAAQtxR,EAAa,EAAKT,MAAlBS,SACRA,EAAS,IAAI8K,KACb9K,EAASu/B,aAAOq7gB,GAAsB,0BAA2B,KACjE56iB,EAASu/B,aAAOq7gB,GAAsB,WAAY,KAClD,EAAK3ie,SAAS,CAAEg5M,QAAS,MAxEiB,EA2ErC6qR,sBAAwB,SAACr+kB,GAC9B,EAAKw6G,SAAS,CAAE+ie,qBAAsBv9kB,EAAE4kB,OAAOtxB,SA5EL,EA+ErCiwU,iBAAmB,SAACnC,EAAmB9V,GAC5C,IAAMptN,EAAUkjO,EAAUjgU,SAAS,SAAW,QAAU,OAClDg9F,EAAWijO,EAAUjgU,SAAS,SAAW,eAAiB,UAChE,OAAO,EAAK2gC,MAAM+9D,OAAOJ,QACvB6rN,EACA,CAAEptN,UAASC,WAAUo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAACiwgB,UAAU,MApFrE,EAwFrCC,gBAAkB,SAACjrlB,EAAes5T,GACvC,MAGI,EAAK9qR,MAFPS,EADF,EACEA,SACAwwE,EAFF,EAEEA,WAGAyjS,EACE,EAAK53W,MADP43W,iBAGF,IAAKljZ,EACH,GAAIy/G,EAAWv6F,MAAM,CAAC,OAAQ,QAASg+X,EAAkB5pF,EAAU,WAAY,CAC7E,IAAM4xR,EAAgBzre,EAAWjrG,MAAM,CAAC,OAAQ,QAAS0uY,EAAkB5pF,EAAU,OAAQ,IAC7FrqR,EAASu/B,aAAOq7gB,GAAD,qBAAqC3mM,GAAoBgoM,EAAchmkB,MAAM,CAAC,OAAQ,QAASg+X,MAIrF,OAArBA,GACFj0W,EAASu/B,aAAOq7gB,GAAD,aAAqCqB,EAAc12kB,MAAM,CAAC,OAAQ,QAAS8kT,EAAU,OAAQ,IAAIp0S,MAAM,CAAC,OAAQ,gBAE5H,CACL,IAAMgmkB,EAAgBzre,EAAW9qG,SAAS,CAAC,OAAQ,QAASuuY,EAAkB5pF,IAC9ErqR,EAASu/B,aAAOq7gB,GAAD,qBAAqC3mM,GAAoBgoM,EAAchmkB,MAAM,CAAC,OAAQ,QAASg+X,MAIrF,OAArBA,GACFj0W,EAASu/B,aAAOq7gB,GAAD,aAAqCqB,EAAcv2kB,SAAS,CAAC,OAAQ,QAAS2kT,IAAWp0S,MAAM,CAAC,OAAQ,cAlHnF,EAwHrCylkB,wBAA0B,SAAClqlB,GAChC,MAGI,EAAK+tC,MAFPS,EADF,EACEA,SAII4/U,EALN,EAEE1yP,SAG+B9zH,IAAT,OAAa5H,QAAb,IAAaA,IAAS,EAAK6qC,MAAM2+iB,sBACzDh7iB,EAAS,IAAImzC,KAA6B,CACxCk5C,QAAS5tG,iBAAO,CACdooM,WAAY+4J,EAAgBxmX,IAAI,cAChCm1H,cAAeqxP,EAAgBxmX,IAAI,iBACnC8ilB,oBAAqBt8N,EAAgBxmX,IAAI,uBACzC0yT,WAAY8zD,EAAgBxmX,IAAI,cAChCmvN,IAAKq3J,EAAgBxmX,IAAI,OACzByvN,IAAK+2J,EAAgBxmX,IAAI,OACzB48H,YAAa4pP,EAAgBxmX,IAAI,eACjCqoM,MAAOm+K,EAAgBxmX,IAAI,SAC3B0vN,KAAM82J,EAAgBxmX,IAAI,QAC1B+ilB,kBAAmB,IAAI/4jB,UAG3B,EAAKkuS,cACL,EAAKr5M,SAAS,CACZg5M,QAAS2uD,EAAgB3pW,MAAM,CAAC,OAAQ,SAAU,OAAQ,cA/IlB,EAmJrC07S,SAnJqC,uCAmJ1B,WAAOnxT,GAAP,yCAAAxF,EAAA,+DAQZ,EAAKukC,MANPS,EAFc,EAEdA,SACAg6F,EAHc,EAGdA,QACA18B,EAJc,EAIdA,OACAw3B,EALc,EAKdA,OACA5H,EANc,EAMdA,SACAhrE,EAPc,EAOdA,cAPc,EAaZ,EAAK7lB,MAHP40R,EAVc,EAUdA,QAVc,EAWd+pR,qBACAM,EAZc,EAYdA,oBAZc,SAcS7oR,aAAI,CAAEn1N,SAAQtK,MAAOxyF,EAAOpH,IAAI,cAdzC,OAcVs5T,EAdU,OAeV0pR,EAAcnmkB,gBAAMy8S,EAAY,CAAC,EAAG,MAAO,KAAOzB,EAElD2sI,EAAep9b,EAAO6F,eAAc,SAACywQ,GAAS,IAAD,YAEjDA,EAAIj5J,OAAO,cAEPu+d,GACFtlU,EAAIvxQ,MAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW62kB,GAChDtlU,EAAIj5J,OAAO,YACX79E,EAAS,IAAI4K,MAETksO,EAAI7gQ,MAAM,CAAC,OAAQ,SAAU,UAC/B6gQ,EAAIpxQ,SAAS,CAAC,OAAQ,SAAU,SAIpC,IAAM22kB,EAAmCvlU,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,KAAM,wBAAyB,QAChGomkB,GACFvlU,EAAIvxQ,MAAM,CAAC,OAAQ,QAAS,wBAAyB,OAAQ82kB,IAI/D,UAAIvlU,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,cAAhC,aAAI,EAAoC2B,YACtCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,QAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,cAAhC,aAAI,EAAoC2B,YACtCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,QAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,iBAAhC,aAAI,EAAuC2B,YACzCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,WAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,iBAAhC,aAAI,EAAuC2B,YACzCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,WAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,iBAAhC,aAAI,EAAuC2B,YACzCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,WAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,UAGM,KAA1BoxQ,EAAI19Q,IAAI,eACV09Q,EAAI/5Q,IAAI,aAAc,MAGD,KAAnB+5Q,EAAI19Q,IAAI,QACV09Q,EAAI/5Q,IAAI,MAAO,MAGM,KAAnB+5Q,EAAI19Q,IAAI,QACV09Q,EAAI/5Q,IAAI,MAAO,MAGjB,IAAMuhZ,EAAWxnI,EAAI19Q,IAAI,SACnBqoM,EAAQ68M,GAAYA,EAASj4Y,eAAc,SAAAmoT,GAC/CA,EAAOzsT,SAAQ,SAACw8Y,EAAgB/sZ,GAC9B+sZ,EAAex8Y,SAAQ,SAACy8Y,EAAUC,GAChCD,EAASz8Y,SAAQ,SAAC28Y,EAAaC,GAC7B,GAAoB,KAAhBD,EACF,OAAOlwF,EAAOjpT,MAAM,CAAC/T,EAAOitZ,EAAQE,GAAa,kBAMvDl9M,GACFq1E,EAAI/5Q,IAAI,QAAS0kM,GAInBq1E,EAAIj5J,OAAO,wBAGPy+d,EAAmBpvd,EAASj3G,MAAM,CAACqlkB,EAAqB,OAG9Dt7iB,EAAS,IAAIqzC,KAAoB,CAC/Bi7C,UAAWgud,EACXC,oBAAqBrvd,EAASlsH,QAAO,SAACutI,EAAKliB,EAAS76H,GAAf,OAAyB8qlB,IAAqBjwd,EAAQjzH,IAAI,MAAQm1I,EAAMA,EAAI9sI,KAAK4qH,EAAQjzH,IAAI,SAAQkU,kBAC1I4rX,YAAa0kE,EAAahqb,OAC1B+oT,UAAW,WAET7gO,KAAmB9rE,mBAAgBwsjB,cAAet6hB,EAAc,CAC9DktE,WAAY0F,EAAO17H,IAAI,QACvBu/W,iBAAkB7jP,EAAO17H,IAAI,SAC7B68B,aAAc6+F,EAAO17H,IAAI,gBACzBqjlB,uBAAwBvvd,EAAS97H,KACjCsrlB,uBAAwBxvd,EAAS7uH,KAAI,SAAAguH,GAAO,OAAIA,EAAQjzH,IAAI,oBAAkB0d,KAAK,MACnF6lkB,mBAAoBzvd,EAAS7uH,KAAI,SAAAguH,GAAO,OAAIA,EAAQjzH,IAAI,SAAO0d,KAAK,SAEtEkpB,EAAS,IAAI2zC,KAAqC,CAChDi5C,SAAUkI,EAAO17H,IAAI,SAEvB4gI,QA5GY,2CAnJ0B,wDAoQrC+6L,iBAAmB,SAAChkU,GAAD,OAAW6pM,aAAgB,GAAhBA,CAAoB7pM,IApQb,EAsQrC6rlB,gBAAkB,SAACtvd,GACxB,MAKI,EAAK/tF,MAJPgvC,EADF,EACEA,QACAgC,EAFF,EAEEA,MACAukD,EAHF,EAGEA,OACA1zG,EAJF,EAIEA,EAGEiib,EAA2C,OAAGvuU,QAAH,IAAGA,OAAH,EAAGA,EAC9C17H,IAAI,cACL4H,QAAO,SAACutI,EAAKw4E,GAAN,OAAqCA,EAAU3tN,IAAI,eACvDm1I,EACAA,EAAIxxI,IAAIgqN,EAAU3tN,IAAI,MAAO6O,cAAI,CAAEpE,KAAMkjN,EAAU3tN,IAAI,QAASugZ,UAAW5yL,EAAU3tN,IAAI,aAAcoH,OAAQ8M,sBACjH7E,wBAEC46b,EAAazrb,WACC,OAAjB01G,QAAiB,IAAjBA,KACIrvH,WACD8D,SAAQ,SAAAglN,GACP,IAAMzwL,EAAKt/B,OAAO+vN,EAAU3tN,IAAI,OAC5Biqc,EAAa/pc,IAAIg9B,KACnB+sa,EAAeA,EAAa99b,MAAM,CAAC+wB,EAAI,UAAW+sa,EAAaptb,MAAM,CAACqgB,EAAI,WAAW70B,KAAK,CACxFu0H,YAAa+wF,EAAU3tN,IAAI,eAC3B0hG,OAAQisH,EAAU3tN,IAAI,UACtByjlB,OAAQ91X,EAAU3tN,IAAI,iBAMhC,IAAM0jlB,EAAuBz5I,EAAaplc,WAAW2C,QAAO,SAAAi1G,GAAM,OAAIA,EAAOz8G,IAAI,UAAUqR,WAE3F,OACE,eAACyjE,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVY,QAAS,EAHX,SAMImtgB,EAAqBllkB,UACjB,eAACi3F,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAApC,SACGl6E,EAAE,wCAEL07jB,EAAqBz+kB,KAAI,SAACw3G,EAAarkH,GACrC,IAAMurlB,EAA8F,IAAzElne,EAAOz8G,IAAI,UAAUwH,QAAO,SAAA7P,GAAK,MAAqB,WAAjBA,EAAM+pG,UAAqB1pG,KAC3F,OACE,gBAAC88E,EAAA,EAAD,CAAMe,MAAM,EAAZ,UACE,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAc7qB,QAAQ,QAAQhC,UAAWF,EAAQ+gT,KAAM3+Q,MAAOose,EAAqB,CAACzhf,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,eAAgB5uR,cAAe,cAAgB,CAAEA,cAAe,cAA5O,UACGvU,EAAOz8G,IAAI,QADd,OAIEy8G,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOsvc,GAC/B,IAAMrqU,EAAcjlI,EAAMilI,YACpB2jR,EAAY9jS,EAAOz8G,IAAI,aACvBghZ,EAAWrpZ,EAAM8rlB,OACvB,OACE,+BACE,eAACv9d,EAAA,EAAD,CACEC,MAAyB,iBAAjBxuH,EAAM+pG,QAA8B6+S,IAAcS,EACtD,gBAAClsU,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6CinB,IAC5C2jR,IAAcS,GAAY,eAACvrS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,yCACxD,iBAAjBrwB,EAAM+pG,QAA6B,eAAC+T,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,4CAC3E,GANhB,SAQE,iCACCu4X,GACG,eAACzrU,EAAA,EAAD,CAAMyiC,MAAO,CAACuf,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MAAQ5pC,MAAO,IAAKi2C,OAAQ,IAAKtU,SAAU,YAAjG,SACC8nS,EACG,eAAC,IAAD,CACEv+R,IAAKu+R,GAAY,GACjBl+R,YAAa,OACbC,aAAa,EACb0kP,OAAO,IAET,eAACm8O,GAAD,CAASrse,MAAO,CAAC6L,SAAU,IAAKlK,SAAU,WAAYqX,KAAM,GAAI/5G,MAAO,GAAI0rF,MAAO/qB,EAAM+pC,QAAQC,KAAK,UAI7G,eAAC1L,EAAA,EAAD,CAEEE,QAAQ,UACRzT,MAAM,cACN7qB,QAAQ,QACRhC,UAAWF,EAAQ0ugB,qBACnBtse,MAAwB,iBAAjB5/G,EAAM+pG,OAA4B,CAACQ,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,gBAAkB,KANlH,SAQGhjR,GAPIqqU,SAxBDA,QAVK7uc,SApTK,EA4WrC0rlB,IAAM,WACX,MAII,EAAK39iB,MAHPne,EADF,EACEA,EACA44G,EAFF,EAEEA,QACAzrD,EAHF,EAGEA,QAMF,OAFI,EAAKlyC,MADP++iB,kBAIA,KAAKd,EAAkBvtZ,QACrB,OACE,uBAAKt+G,UAAWF,EAAQktP,IAAxB,UACE,eAACzhN,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAEmje,iBAAkBd,EAAkB6C,WACnE7hf,MAAM,UACNqV,MAAO,CAAEkG,YAAa,IAHxB,SAKIz1F,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAEmje,iBAAkBd,EAAkBzkJ,WACnEv6V,MAAM,UAFR,SAIGl6E,EAAE,2CAKX,KAAKk5jB,EAAkB6C,QACrB,OACE,uBAAK1ugB,UAAWF,EAAQktP,IAAxB,UACE,eAAC5sN,EAAA,EAAD,CAAYp+B,QAAQ,QAAQkgC,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,0CAEL,eAAC44F,EAAA,EAAD,CACEE,QAAS,WACP,EAAKjC,SAAS,CAAEmje,iBAAkBd,EAAkBvtZ,WAEtDzxF,MAAM,UACNqV,MAAO,CAAEkG,YAAa,IALxB,SAOIz1F,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACEE,QAAS8f,EACT1+B,MAAM,UAFR,SAIIl6E,EAAE,4BAKZ,KAAKk5jB,EAAkBzkJ,QACrB,OACE,uBAAKpnX,UAAWF,EAAQktP,IAAxB,UACE,eAAC5sN,EAAA,EAAD,CAAYp+B,QAAQ,QAAQkgC,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,2CAEL,eAAC44F,EAAA,EAAD,CACEE,QAAS,WACP,EAAKjC,SAAS,CAAEmje,iBAAkBd,EAAkBvtZ,WAEtDzxF,MAAM,UACNqV,MAAO,CAAEkG,YAAa,IALxB,SAOIz1F,EAAE,wBAEN,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN/lG,KAAK,SAFP,SAIG6rB,EAAE,sCArb6B,EA6brCg8jB,sBAAwB,SAACC,EAAuB1jlB,GAAiB,IAAD,EACrE,EAAiC,EAAK4lC,MAA9BS,EAAR,EAAQA,SAAUwwE,EAAlB,EAAkBA,gBAC+Br/G,KAAnC,OAAVq/G,QAAU,IAAVA,GAAA,UAAAA,EAAYv6F,MAAMonkB,UAAlB,eAAgCjklB,IAAIO,KACtCqmC,EAASu/B,aAAOq7gB,GAAsByC,EAAYvmkB,KAAK,KAAM05F,EAAWv6F,MAAMonkB,GAAax/d,OAAOlkH,MAhc1D,EAocrC2jlB,cAAgB,SAACC,EAAuBC,GAA6C,IAAtBC,EAAqB,uDAAT,KAChF,EAAyC,EAAKl+iB,MAAvCgvC,EAAP,EAAOA,QAAS2+C,EAAhB,EAAgBA,SAAUltF,EAA1B,EAA0BA,SAAU5e,EAApC,EAAoCA,EAC7B45jB,EAAwB,EAAK3+iB,MAA7B2+iB,qBACD0C,EAAaH,EAAc3+kB,SAAS,SACpC++kB,EAAczwd,EAASj3G,MAAT,CAAgB+kkB,GAAhB,mBAAyCwC,KACvDI,KAAWF,IAAcxwd,EAASj3G,MAAT,CAAgB+kkB,GAAhB,mBAAyCwC,MACxE,OACE,eAACtvgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQsvgB,YAA9D,SACE,eAACv+d,EAAA,EAAD,CAASC,MAAQo+d,GAAgBD,EAAkBt8jB,EAAE,6CAAP,GAA9C,SACE,+BACE,eAAC2uG,EAAA,EAAD,CACEpf,MAAO,CAAC4rP,UAAW,UACnBhqP,UAAWore,IAAgBD,EAC3Bxje,QAAS,WAEe,qBAAlBqje,IACF,EAAKjsR,cACL,EAAKr5M,SAAS,CACZg5M,QAAS/jM,EAASj3G,MAAM,CAAC+kkB,EAAsB,OAAQ,SAAU,OAAQ,cAK3Eh7iB,EADE09iB,EACOn+gB,aAAOq7gB,GAAsB2C,EAAeK,GAE5Cr+gB,aAAOq7gB,GAAsB2C,EAAeI,IAGnDF,GACFA,KAnBN,SAuBE,eAAC,KAAD,CAAenif,MAAM,qBAreW,EA6erCwif,kCAAoC,WACzC,EAAK7le,SAAS,CACZoje,oCAAoC,EACpCE,uBAAwB,KAhfgB,EAofrCwC,sBAAwB,SAACP,EAAuB7se,GACrD,MAAkD,EAAKpxE,MAAhDixE,EAAP,EAAOA,WAAY0c,EAAnB,EAAmBA,SAAU38C,EAA7B,EAA6BA,MAAOhC,EAApC,EAAoCA,QAASntD,EAA7C,EAA6CA,EACtC45jB,EAAwB,EAAK3+iB,MAA7B2+iB,qBAGP,OADyB,OAACxqe,QAAD,IAACA,OAAD,EAACA,EAAYv6F,MAAMunkB,MAAoBtwd,EAASj3G,MAAT,CAAgB+kkB,GAAhB,mBAAyCwC,MAEvG,OAAO,eAACtvgB,EAAA,EAAD,CAAMO,UAAWF,EAAQ63f,aAGlC,IAAM4X,EAA4B9wd,EAASl2G,MAAK,SAACq1G,GAAD,OAAaA,EAAQp2G,MAAMunkB,MAC3E,OAAO,eAACtvgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQ63f,WAAYz1d,MAAOA,GAAgB,GAAjG,SACJqte,GACC,eAAC1+d,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qDAAlB,SACE,eAAC,KAAD,CAAao7F,SAAS,QAAQ7L,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAAM4lF,WAAYhtC,EAAMZ,QAAQ,WAjgB/D,EAugBrCsugB,0CAA4C,WACjD,MAA+B,EAAK1+iB,MAA7BixE,EAAP,EAAOA,WAAY0c,EAAnB,EAAmBA,SACnB,EAAiD,EAAK7wF,MAA/C43W,EAAP,EAAOA,iBAEDiqM,GAFN,EAAyBlD,qBACI5mM,KAAmB/1Y,KAAI,SAACihD,GAAD,OAAYA,EAAOvuD,SAC3B6P,QAAO,SAAC+vC,GAAD,OAAcA,IAAasjW,MAExEkqM,EAA6BD,EAAet9kB,QAAO,SAAC+vC,GACxD,OAAOj+C,QAAQ20kB,KAAarwjB,MAAK,SAACoxS,EAAqB52T,GACrD,IAAM4slB,EAA2B,OAAG5te,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,QAAS06B,EAAUy3Q,EAASzuT,IAAK,WAC1F0klB,EAA8Bnxd,EAAStsH,QAAO,SAACyrH,GAAD,OAAaA,EAAQp2G,MAAM,CAAC,OAAQ,QAAS06B,EAAUy3Q,EAASzuT,IAAK,cAAYvI,KAAO,EAC5I,OAAOgtlB,GAA+BC,SAGpCC,EAA4BJ,EAAet9kB,QAAO,SAAC+vC,GACvD,OAAiB,OAAV6/D,QAAU,IAAVA,OAAA,EAAAA,EAAYv6F,MAAM,CAAC,OAAQ,QAAS06B,EAAU,wBAAyB,UAAWu8E,EAAStsH,QAAO,SAACyrH,GAAD,OAAaA,EAAQp2G,MAAM,CAAC,OAAQ,QAAS06B,EAAU,wBAAyB,WAASv/C,KAAO,KAErMmtlB,EAAuBL,EAAet9kB,QAAO,SAAC+vC,GAClD,OAAiB,OAAV6/D,QAAU,IAAVA,OAAA,EAAAA,EAAYv6F,MAAM,CAAC,OAAQ,QAAS06B,EAAU,kBAAmB,UAAWu8E,EAAStsH,QAAO,SAACyrH,GAAD,OAAaA,EAAQp2G,MAAM,CAAC,OAAQ,QAAS06B,EAAU,kBAAmB,WAASv/C,KAAO,KAE/L,OAAO,YAAI,IAAI8C,IAAJ,sBAAYiqlB,GAAZ,YAA2CG,GAA3C,YAAyEC,OA1hB1C,EAgiBrCC,oBAAsB,SAACp2R,EAAqB52T,EAAeitlB,GAChE,MAAiC,EAAKl/iB,MAA9BgvC,EAAR,EAAQA,QAAS2+C,EAAjB,EAAiBA,SAAU9rG,EAA3B,EAA2BA,EAC3B,EAAmD,EAAKib,MAAhD2+iB,EAAR,EAAQA,qBAAsB/mM,EAA9B,EAA8BA,iBACxByqM,EAAY,CAAC,OAAQ,QAASzqM,EAAkB7rF,EAASzuT,KACzDovT,EAAS77L,EAASj3G,MAAT,CAAgB+kkB,GAAhB,OAAyC0D,EAAzC,CAAoD,YAC7D12R,EAAW96L,EAASj3G,MAAT,CAAgB+kkB,GAAhB,OAAyC0D,EAAzC,CAAoD,cAC/D7nf,EAAMq2B,EAASj3G,MAAT,CAAgB+kkB,GAAhB,OAAyC0D,EAAzC,CAAoD,SAC1DC,EAAczxd,EAASj3G,MAAT,CAAgB+kkB,GAAhB,OAAyC0D,EAAzC,CAAoD,iBAClE7/Q,EAAY3xM,EAASj3G,MAAT,CAAgB+kkB,GAAhB,OAAyC0D,EAAzC,CAAoD,cAChEv9I,EAAa/4I,EAAS+4I,WAC5B,OACE,gBAACjzX,EAAA,EAAD,CAAkBW,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAE+X,aAAc,IAA9E,UACE,gBAACx6C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAajue,MAAO,CAAEotB,YAAag9c,GAAmBzoe,SAAU,YAAtH,UAEc,IAAV9gH,GAAe,eAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAEq9jB,KAEnE,EAAKV,sBAAL,UAA+BW,EAA/B,CAA0C,WAAW,CAACpse,SAAU,WAAY1iG,KAAM,WAErF,eAACs+D,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SAEI19I,EACI,eAACC,GAAA,EAAD,CAAiB/qM,SAAUukV,GAAsBxyR,SAAUA,EAAU6rF,iBAAkBA,IACvF,eAACotD,GAAA,EAAD,CAAahrM,SAAUukV,GAAsBxyR,SAAUA,EAAU6rF,iBAAkBA,MAG1F,EAAKqpM,cAAL,qBACerpM,EADf,YACmC7rF,EAASzuT,KAC3C,CAAC,OAAQ,QAASs6Y,EAAkB7rF,EAASzuT,KAC7C,EAAKyjlB,sBAAsB,CAAC,OAAQ,SAAUh1R,EAASzuT,MAEzD,gBAACu0E,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQswgB,WAAzE,UACE,eAAChwe,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAcqV,MAAO,CAAElgC,QAAS,SAApE,SACIrvD,EAAEgnS,EAASjyR,SAGb4yR,EACI,eAACzpM,EAAA,EAAD,CAASC,MAAOyoM,EAAhB,SACE,eAACrlM,GAAA,EAAD,CAAMF,KAAM,EAAKu+M,iBAAiBnC,EAAW9V,GAAS1mS,OAAO,SAASgiT,IAAI,WAAW51P,UAAWF,EAAQ+wB,KAAxG,SACG0oN,MAGL,eAACn5M,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACkB3tF,EAAdu9jB,EAAgB,6BAAkC,yBAI1Dx9I,EACItqW,EACI,eAACyoB,EAAA,EAAD,CAASC,MAAO1oB,EAAhB,SACE,eAAC8rB,GAAA,EAAD,CAAMF,KAAM5rB,EAAKx0E,OAAO,SAASgiT,IAAI,WAAW51P,UAAWF,EAAQ+wB,KAAnE,SACGzI,MAGL,eAACgY,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACI3tF,EAAE,yBAEV,UA7CC5vB,IAziBb,EAAK6qC,MAAQokO,GAF6B,E,2CA+lB5C,WAAiB,IAAD,OACd,EAcIprQ,KAAKkqC,MAbPgvC,EADF,EACEA,QACAuwgB,EAFF,EAEEA,gBACA5xd,EAHF,EAGEA,SACA6xd,EAJF,EAIEA,oBACA/+e,EALF,EAKEA,KACAg6B,EANF,EAMEA,QACA09L,EAPF,EAOEA,aACA13R,EARF,EAQEA,SACA5e,EATF,EASEA,EATF,IAUEovF,kBAVF,MAUevoG,gBAVf,EAWEyuV,EAXF,EAWEA,oBACAsoP,EAZF,EAYEA,kBACAzugB,EAbF,EAaEA,MAEF,EAYIl7E,KAAKgnC,MAXP2+iB,EADF,EACEA,qBAEA/mM,GAHF,EAEE77E,iBAFF,EAGE67E,kBACAhjF,EAJF,EAIEA,QACAgqR,EALF,EAKEA,wBACAC,EANF,EAMEA,mBACA37I,EAPF,EAOEA,aACA47I,EARF,EAQEA,0BACAE,EATF,EASEA,mCACAC,EAVF,EAUEA,oBACAC,EAXF,EAWEA,sBAGII,EAAkBzud,EAASj3G,MAAM,CAAC+kkB,EAAsB,mBAC/C9td,EAASj3G,MAAM,CAAC+kkB,EAAsB,OAAQ,QAAS/mM,EAAkB,kBAAmB,QAE3G,OAAI+qM,EAEA,eAAC3zR,EAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAASA,EAASzrD,QAAS,CAAE64C,MAAO74C,EAAQ3hE,MAAhE,SACE,gBAACshE,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASG,UAAWF,EAAQ0wgB,iBAA/E,UACE,eAAChoR,EAAA,EAAD,CAAkBtmN,MAAO,CAAEkG,YAAa,KACxC,eAAChI,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,wCAOzC,gBAACiqS,EAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAASA,EAASzrD,QAAS,CAAE64C,MAAO74C,EAAQ3hE,MAAhE,UACE,wBAAM+kT,SAAU+F,EAAariU,KAAKs8T,UAAlC,UACE,uBAAKljP,UAAWF,EAAQi/W,iBAAxB,UACE,eAAC3+U,EAAA,EAAD,CAAYE,QAAQ,KAAK4B,MAAO,CAAE+X,aAAc,IAAhD,SAAuDtnG,EAAE,iCAGzD,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,UACE,gBAACjB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQswgB,WANrB,UAQE,gBAAC3wgB,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,OAAQi2C,OAAQ,IAAKtE,UAAW,UAAtD,UACE,eAACzT,EAAA,EAAD,UAAaztF,EAAE,0CACf,eAAC+1F,GAAA,EAAD,CACEpmH,MAAOuqlB,EACPzqe,SAAU,SAACpzG,GACT,IAAMyhlB,EAAiBzhlB,EAAE4kB,OAAOtxB,MAC5BmulB,IAAmB5D,GAGvB,EAAKrje,SAAS,CAACoje,oCAAoC,EAAME,sBAAuB2D,KAElFvue,MAAO,CAAEhgC,MAAO,OAAQ+3C,aAAc,GAAI/W,UAAW,GATvD,SAYIub,EAAS7uH,KAAI,SAACguH,EAAS76H,GAAV,OAAoB,eAACogH,EAAA,EAAD,CAAsB7gH,MAAOS,EAA7B,SAC7B,eAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAACqa,aAAc,WAAYtL,SAAU,SAAUoM,WAAY,SAAUxJ,UAAW,QAAnH,SAA6H+J,EAAQjzH,IAAI,oBAD7F5H,WAOtD,gBAAC08E,EAAA,EAAD,CACEO,UAAWF,EAAQyxT,eADrB,UAGE,eAAC,SAAD,CACErxT,UAAWqqP,KACXn1T,KAAK,WACLwrG,SAAUimP,KACV/1T,MAAO,CACL25R,aAAcjI,EACd4lC,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,WAKD,OAAV7kP,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,cAAe63T,IAChC,eAAClhM,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS7kH,KAAKi8T,YAAa3gN,MAAO,CAAE2B,SAAU,WAAYsX,OAAQ,EAAG/5G,OAAQ,IAAtG,SACE,eAACyvG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,eAACq9a,GAAA,EAAD,CAAQjiV,SAAS,oBAM3B,gBAACtuC,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQsvgB,YAA1C,UACE,eAAC3vgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,aAAaqiC,MAAO,CAACiW,OAAQ,GAA/D,SACE,eAACtH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,gDAAlB,SACE,+BACE,eAAC2uG,EAAA,EAAD,CAAYxd,SAAU0oe,EAAyB/ge,QAAS,kBAAM,EAAKwhe,2BAAnE,SACE,eAAC,KAAD,YAKPrmlB,KAAKiolB,cAAc,mBAAoB,CAAC,OAAQ,SAAU,YAE7D,gBAACpvgB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQswgB,WANrB,UAQE,eAAC3wgB,EAAA,EAAD,CAAMyiC,MAAO,CAAEiW,OAAQ,KAAvB,SACE,eAAC/X,EAAA,EAAD,UAAaztF,EAAE,wCAEjB,eAAC,IAAD,CACEy6F,IAAG,UAAKqR,EAASj3G,MAAM,CAAC+kkB,EAAsB,OAAQ,SAAU,OAAQ,WAArE,gBAAuFH,GAAvF,YAAmGA,IACtGlqgB,MAAK,UAAKkqgB,GAAL,MACL3+d,YAAa,OACbC,aAAa,UAMnB,uCACE,gBAACjuC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAASpB,UAAWF,EAAQ4wgB,WAAhF,UACE,gBAACjxgB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,eAAvE,UACE,eAAC8uX,GAAA,EAAD,CAAMnkW,MAAM,SAAS7sB,UAAWF,EAAQ63f,aACxC,eAACv3d,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,qCAE9B,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAOmqgB,GAAoB/8c,YAAa,IAAnE,SACE,eAAClvB,EAAA,EAAD,UAAaztF,EAAE,gDAGnB,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAajue,MAAO,CAAEotB,YAAag9c,IAAxE,SACE,eAAClse,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,sCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACEh7kB,KAAK,gBACL07B,MAAO,CACL8gF,YAAaj/F,EAAE,kCACf3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVuD,SAAU0oe,GAA4BU,IAAoBnre,EAAWp3G,IAAI,uBACzEw9T,SAAUvhU,KAAKonc,mBASnB9tX,UAAWwgC,KACXE,SAAU,CAACmqF,UAGdnkM,KAAKiolB,cAAc,gBAAiB,CAAC,kBACtC,eAACpvgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC1ne,GAAA,EAAD,CACEpmH,MAAOiqlB,EACPnqe,SAAUx7G,KAAKymlB,sBACfnre,MAAO,CAAEhgC,MAAO,OAAQ+3C,aAAc,IACtCouR,YAAa,SAAC/lZ,GAAD,OAAWm8H,EAASj3G,MAAM,CAACllB,EAAO,mBAJjD,SAOIm8H,EAAS7uH,KAAI,SAACguH,EAAS76H,GACrB,IAAM8qlB,EAAmBpvd,EAASj3G,MAAM,CAACqlkB,EAAqB,OACxD8D,EAAmB9C,IAAqBjwd,EAAQjzH,IAAI,MACpDimlB,EAAoBnyd,EAASj3G,MAAM,CAAC+kkB,EAAsB,OAC1DsE,EAAuBpyd,EAAS97H,KAAO,EAC7C,OAAO,eAACwgH,EAAA,EAAD,CAAsB7gH,MAAOS,EAA7B,SACL,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,aAAaqiC,MAAO,CAACx/B,QAAS,SAAxF,UACE,eAACjD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,SACGmvgB,GAAoB,eAAC,KAAD,CAAc5ie,SAAS,YAE9C,gBAACtuC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,SAArD,UACE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAACihB,WAAYwtd,EAAmB,IAAM,KAAMvoe,YAAa,IAAhH,SAAsHwV,EAAQjzH,IAAI,mBAClI,gBAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAC2W,WAAY,GAAhD,2BAAmEsyM,aAAWvtM,EAAQjzH,IAAI,iBAAiB,SAE7G,eAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAGd,QAAQ,WAAlD,UACEiwgB,GACA,eAAC9/d,EAAA,EAAD,CAASC,MAA8Bn+F,EAAvBk+jB,EAAyB,sDAA2D,gDAApG,SACE,eAAC,KAAD,CACEhkf,MAAOgkf,EAAuB,WAAa,UAC3C9ie,SAAS,QACTtC,QAAS,SAACz8G,GAER,GADAA,EAAE87G,mBACE+le,EAAJ,CAIA,IAAMC,EAAkBryd,EAASrP,OAAOrsH,GAClCgulB,EAA8BD,EAAgBlkkB,WAAU,SAAC0xG,GAAD,OAAcA,EAAS3zH,IAAI,QAAUimlB,KAC7FI,EAA6BF,EAAgBlkkB,WAAU,SAAC0xG,GAAD,OAAcA,EAAS3zH,IAAI,QAAUkjlB,KAClGyC,EAAoBQ,GACpBT,EAAgBW,GAChB,EAAKxne,SAAS,CAAE+ie,sBAAuD,IAAjCwE,EAAqCA,EAA8BC,gBA1B/FjulB,aAwC9BmqlB,GACE,gBAACztgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQqwgB,cACrC,eAAC1wgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACEh7kB,KAAM,sBACN8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO,+BACP64E,WAAY,CACV1T,MAAO,UACPiX,SAAU0oe,EACVpqe,SAAU,SAACpzG,EAAG1M,GACRA,IAAUwuc,EACZ,EAAKtnV,SAAS,CACZsnV,cAAc,EACd47I,2BAA2B,IAG7Bn7iB,EAASu/B,aAAOq7gB,GAAsB,gBAAiBM,cAUzE,gBAAChtgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACGvplB,KAAK0olB,sBAAsB,CAAC,eAC7B,eAAClve,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,oCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACEh7kB,KAAK,aACL07B,MAAO,CACL8gF,YAAaj/F,EAAE,+BACf6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,SAGd95G,KAAKiolB,cAAc,aAAc,CAAC,eACnC,eAACpvgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,gBAAkB,WAGzE,gBAAC9sgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACGvplB,KAAK0olB,sBAAsB,CAAC,QAC7B,eAAClve,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,6BAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACEh7kB,KAAK,MACL07B,MAAO,CACL8gF,YAAaj/F,EAAE,wBACf6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,KACXE,SAAU,CAACh6G,KAAK0/T,sBAGnB1/T,KAAKiolB,cAAc,MAAO,CAAC,QAC5B,eAACpvgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,SAAW,WAGlE,gBAAC9sgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACGvplB,KAAK0olB,sBAAsB,CAAC,QAC7B,eAAClve,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,6BAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACIh7kB,KAAK,MACL07B,MAAO,CACL8gF,YAAaj/F,EAAE,wBACf6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,KACXE,SAAU,CAACh6G,KAAK0/T,sBAGrB1/T,KAAKiolB,cAAc,MAAO,CAAC,QAC5B,eAACpvgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,SAAW,WAGlE,gBAAC9sgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACGvplB,KAAK0olB,sBAAsB,CAAC,gBAC7B,eAAClve,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,4CAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC,SAAD,CACEh7kB,KAAK,cACL07B,MAAO,CACL8gF,YAAaj/F,EAAE,uCACf3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,KACXE,SAAU,CAACmqF,UAGdnkM,KAAKiolB,cAAc,cAAe,CAAC,gBACpC,eAACpvgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,iBAAmB,cAM5E,eAAC9sgB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQ4wgB,WAAxD,SACE,gBAACjxgB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,eAAvE,UACE,eAAC+ugB,GAAD,CAAapkf,MAAM,SAAS7sB,UAAWF,EAAQ63f,aAC/C,eAACv3d,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,0CAI9B,CAAC,MAAO,OAAO/iB,KAAI,SAAC6lZ,EAAa1yZ,GAC/B,IAAMmulB,EAAwB,QAAhBz7L,EACd,OACE,uBAAuBvzS,MAAO,CAACgB,UAAW,IAA1C,UACE,eAACzjC,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,SACE,eAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAatwgB,WAAW,SAASqiC,MAAO,CAAEotB,YAAag9c,IAA7G,SACE,gBAAC7sgB,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SAFP,UAIE,sBAAKgsC,IAAK8je,EAAQ/hR,KAAUC,KAAQpvP,UAAWF,EAAQqxgB,YAAalhd,IAAat9G,EAARu+jB,EAAU,uCAA4C,oCAC/H,eAAC9we,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAAqC3tF,EAARu+jB,EAAU,uBAA4B,iCAIzE,gBAACzxgB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAatwgB,WAAW,SAASuB,KAAK,SAA5F,UACG,EAAKkugB,sBAAsB,CAAC,QAAS,UAAW75L,EAAa,UAC9D,eAACr1S,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,uBACnC,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oDAAlB,SACE,eAACy+jB,GAAA,EAAD,CAAMrje,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,WAAY,EAAG7C,OAAQ,kBAGzE,eAACxsC,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAACv/d,EAAA,EAAD,CAASC,MAAOm3O,EAAsB,GAAKt1U,EAAE,mCAA7C,SACE,gCACE,eAAC,SAAD,CACEvd,KAAI,wBAAmBqgZ,EAAnB,UACJv1U,UAAWg5O,IACXpoR,MAAO,CACLyvE,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,YAOtB,EAAK4mP,cAAL,wBAAoCp5L,EAApC,UAAyD,CAAC,QAAS,UAAWA,EAAa,UAC5F,eAACh2U,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SAEI3xd,EAASj3G,MAAM,CAAC+kkB,EAAsB,QAAS,UAAW92L,EAAa,UAAY,eAAC47L,GAAA,EAAD,CAAOxkf,MAAM,YAAe,UAIrH,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACG,EAAKb,sBAAsB,CAAC,QAAS,UAAW75L,EAAa,SAC9D,eAACr1S,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,mCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAACv/d,EAAA,EAAD,CAASC,MAAOm3O,EAAsB,GAAKt1U,EAAE,mCAA7C,SACE,gCACE,eAAC,SAAD,CACEvd,KAAI,wBAAmBqgZ,EAAnB,SACJ3kX,MAAO,CACL8gF,YAAaj/F,EAAE,8BACf4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,GAEbznP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAKlB,EAAKmue,cAAL,wBAAoCp5L,EAApC,SAAwD,CAAC,QAAS,UAAWA,EAAa,SAC3F,eAACh2U,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,QAAS,UAAW92L,EAAa,UAAY,WAGpG,gBAACh2U,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACG,EAAKb,sBAAsB,CAAC,QAAS,UAAW75L,EAAa,SAC9D,eAACr1S,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,mCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAACv/d,EAAA,EAAD,CAASC,MAAOm3O,EAAsB,GAAKt1U,EAAE,mCAA7C,SACE,gCACE,eAAC,SAAD,CACEvd,KAAI,wBAAmBqgZ,EAAnB,SACJ3kX,MAAO,CACL8gF,YAAaj/F,EAAE,8BACf4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,GAEbznP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAKlB,EAAKmue,cAAL,wBAAoCp5L,EAApC,SAAwD,CAAC,QAAS,UAAWA,EAAa,SAC3F,eAACh2U,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,QAAS,UAAW92L,EAAa,UAAY,WAGpG,gBAACh2U,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAtD,UACG,EAAKb,sBAAsB,CAAC,QAAS,UAAW75L,EAAa,SAC9D,eAACr1S,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,8BAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAACv/d,EAAA,EAAD,CAASC,MAAOm3O,EAAsB,GAAKt1U,EAAE,mCAA7C,SACE,gCACE,eAAC,SAAD,CACEvd,KAAI,wBAAmBqgZ,EAAnB,SACJ3kX,MAAO,CACL8gF,YAAaj/F,EAAE,yBACf4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,GAEbznP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAKlB,EAAKmue,cAAL,wBAAoCp5L,EAApC,SAAwD,CAAC,QAAS,UAAWA,EAAa,SAC3F,eAACh2U,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAChwe,EAAA,EAAD,UAAaqe,EAASj3G,MAAM,CAAC+kkB,EAAsB,QAAS,UAAW92L,EAAa,UAAY,aAlI5FA,MA2IhB,uCACE,eAACh2U,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQ4wgB,WAAxD,SACE,gBAACjxgB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,eAAvE,UACE,eAAC+ugB,GAAD,CAAapkf,MAAM,SAAS7sB,UAAWF,EAAQ63f,aAC/C,eAACv3d,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,6CAGhC,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,WAAWU,KAAK,SAAnE,UAEE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACIxplB,KAAKunlB,gBAAgBpse,EAAWp3G,IAAI,iBAExC,eAAC80E,EAAA,EAAD,CAAMO,UAAWF,EAAQsvgB,cACzB,eAAC3vgB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACIxplB,KAAKunlB,gBAAL,OAAqB1vd,QAArB,IAAqBA,OAArB,EAAqBA,EAAUj3G,MAAM,CAAC+kkB,EAAsB,wBAMpE,uCACE,gBAAC9sgB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQ4wgB,WAAYxue,MAAO,CAAEhgC,MAAM,QAAD,OA9uCrE,MA8uCqE,cAAkCmqgB,GAAlC,MAAlF,UACE,gBAAC5sgB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAA9C,UACE,eAACkzX,GAAA,EAAD,CAAYlmW,MAAM,SAAS7sB,UAAWF,EAAQ63f,aAC9C,eAACv3d,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,oCAE9B,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,gBAAC3wgB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWb,WAAW,SAASuB,KAAK,SAAnE,UACGx6E,KAAK4olB,4CAA4C/mlB,OAAS,GACzD,eAACooH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2CAAlB,SACE,eAAC,KAAD,CAAao7F,SAAS,QAAQ7L,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAAMk/E,YAAatmC,EAAMZ,eAGhG,eAACk/B,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAEkG,YAAa,GAAtD,SAA4Dz1F,EAAE,+BAC9D,eAACy1X,GAAA,EAAD,CACErC,cAAc,EACdP,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuB,EAAKt8R,SAAS,CAAEg8R,iBAAkBM,KAC9EwC,0BAA2B,SAACgpM,GAAD,OACzB,eAACzge,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iDAAlB,SACE,eAAC,KAAD,CACEo7F,SAAS,QACT7L,MAAO,CACLrV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7B4lF,WAAYhtC,EAAMZ,UAClB0uR,WAAY,EAAK4/O,4CAA4Cr/kB,SAASmhlB,GAAkB,UAAY,yBAQlH3Y,KAAcxmkB,QAAO,SAAAmrE,GAAC,OAAKA,EAAE41X,sBAAoBtjc,KAAI,SAAC+pT,EAAqB52T,GAAtB,OACnD,EAAKgtlB,oBAAoBp2R,EAAU52T,EAAO,6BAI5C+vc,KAAgBljc,KAAI,SAAC+pT,EAAqB52T,GAAtB,OAClB,EAAKgtlB,oBAAoBp2R,EAAU52T,EAAO,mCAI5C0wc,KAAS7jc,KAAI,SAAC+pT,EAAqB52T,GACjC,IAAMqlG,EAAMq2B,EAASj3G,MAAM,CAAC+kkB,EAAsB,OAAQ,QAAS/mM,EAAkB7rF,EAASzuT,IAAK,QACnG,OACE,gBAACu0E,EAAA,EAAD,CAAkBW,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAE+X,aAAc,IAA9E,UACE,gBAACx6C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQqwgB,YAAajue,MAAO,CAAEotB,YAAag9c,GAAmBzoe,SAAU,YAAtH,UAEc,IAAV9gH,GAAe,eAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,4BAEnE,EAAK28jB,sBAAsB,CAAC,OAAQ,QAAS9pM,EAAkB,kBAAmB,OAAQ,CAAC3hS,SAAU,WAAY1iG,KAAM,WAE1H,eAACs+D,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,eAAC3wgB,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,eAACuzX,GAAA,EAAD,CACE/rM,SAAUukV,GACVxyR,SAAUA,EACV6rF,iBAAkBA,QAIvB,EAAKqpM,cAAL,qBACerpM,EADf,YACmC7rF,EAASzuT,KAC3C,CAAC,OAAQ,QAASs6Y,EAAkB7rF,EAASzuT,KAC7C,EAAKyjlB,sBAAsB,CAAC,OAAQ,SAAUh1R,EAASzuT,MAEzD,eAACu0E,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQswgB,WAArC,SACE,gBAAC3wgB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,gBAAC4+B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAcqV,MAAO,CAAEyZ,cAAe,aAAc35C,QAAS,SAAjG,UACIrvD,EAAEgnS,EAASjyR,OADf,OAIE0gE,EACI,eAACyoB,EAAA,EAAD,CAASC,MAAO1oB,EAAhB,SACE,eAAC8rB,GAAA,EAAD,CAAMF,KAAM5rB,EAAKx0E,OAAO,SAASgiT,IAAI,WAAW51P,UAAWF,EAAQ+wB,KAAnE,SACGzI,MAGL,eAACgY,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,gCAlCN5vB,YA8CnB6D,KAAK6nlB,SAET,eAAC19I,GAAA,EAAD,CACEx/V,KAAMm7e,EACNnhd,QAAS,WACPh6F,EAASu/B,aAAOq7gB,GAAsB,uBAAuB,IAC7D1siB,YAAW,oCAAM,EAAKuuZ,wBAAX,iBAAM,EAAuBt/Z,eAA7B,aAAM,EAAgCqiC,SAAQ,IACzD,EAAKy4C,SAAS,CAAEkje,2BAA2B,KAE7C5uR,UAAW,WACT,EAAKt0M,SAAS,CAAEkje,2BAA2B,OAG/C,eAAC,GAAD,CACEn7e,KAAMq7e,EACNrhd,QAAS3kI,KAAKyolB,kCACdpD,qBAAsB,WACpB,EAAKzie,SAAS,CAAEqje,oBAAqBC,IACrC,EAAKuC,qCAEPnD,iBAAkB,WAChB,EAAKe,wBAAwBH,GAC7B,EAAKtje,SAAS,CAAEqje,oBAAqBC,IACrC,EAAKuC,8C,GAjuCiBhkjB,aAqvCnBwwC,qBACb00C,eACA1uC,cAz0Ca,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+kE,SAAU,OACV+tC,SAAU,UAEZ8tU,iBAAkB,CAChB78W,MAAO,IACPw7L,UAAW,OACXywC,UAAW,OACXzrO,QAASZ,EAAMZ,QAAQ,IAEzBqwT,eAAgB,CACdvvT,QAAS,OACTE,MAAOkqgB,GACPj0d,OAAQi0d,GACRvoe,SAAU,YAEZ8zd,WAAY,CACVz1f,MAAOoqgB,IAET6D,YAAa,CACXjugB,MAlEuB,MAmEvBu4C,aAAc34C,EAAMZ,WAEtBkvgB,WAAY,CACVlugB,MAAOmqgB,GACP3pgB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BwvgB,WAAY,CACVxte,UAAWphC,EAAMZ,QAAQ,GACzB+4C,aAAcn4C,EAAMZ,WAEtBiwgB,YAAa,CACXjvgB,MAAO,IAETssgB,qBAAsB,CACpB1/d,WAAYhtC,EAAMZ,QAAQ,GAC1B2iC,SAAU,WACV,WAAY,CACVA,SAAU,WACVthE,QAAS,WACTphC,KAAM2gE,EAAMZ,SAAS,KAGzB2/S,KAAM,CACJ19P,WAAY,QAEdtyB,KAAM,CACJob,OAAQ,UACR8B,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,SACnC29M,UAAW,aAEbsB,IAAK,CACHnpN,SAAU,SACVsX,OAAQ,EACRwG,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,MACjChtD,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BsvgB,iBAAkB,CAChB9tgB,QAASZ,EAAMZ,QAAQ,IAEzBkugB,YAAa,CACXltgB,MAzGuB,SAo3CN,CAAC0zC,WAAW,IAC/B7vE,YAAgB,gBAChBgwE,KACAtQ,mBAjBsB,SAAC73E,EAAYyF,GACnC,IAAM6xE,EAAgBohJ,cAAgC14N,GACtD,OAAO,aACLs3E,iBACGxrE,YAAyB,CAC1BqoE,WAAYC,yBAAcmqe,IAC1BlkP,oBAAqB19S,cACrBgmiB,kBAAmBhqV,eAHlB7sN,CAIA9L,MASoB,MACzBugS,qBAAU,CACR9pN,KAAM8ne,GACN/9Q,kBAAkB,EAClBC,oBAAoB,IATTxyP,CAWbkxgB,I,qBIngCalxgB,qBACb4pC,mBAjCsB,SAAC73E,EAAYyF,GAAb,OAA+BqG,YAAyB,CAC9EqgS,YAAaurB,cACbisP,qBAAsB3liB,cACtBilZ,uBAAwBplZ,cACxB+liB,iCAAkC3rV,cAClC4rV,wBAAyB3rV,gBAL4BpsN,CAMpD9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLmgjB,qBAAsB,SAACvzd,EAAkBf,GACvC7rF,EAAS,IAAI25C,KAA2B,CACtCizC,WACA63R,WAAY,CACV54R,iBAINu0d,kBAAmB,WACjBpgjB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAI+pjB,IACJrgf,MAAM,MAGVsgf,+BAAgC,SAAC1zd,GAC/B5sF,EAAS,IAAI2zC,KAAqC,CAChDi5C,mBAQNt8C,aAlYa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT+B,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAE9Bm7C,WAAY,CACVhO,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACV4N,cAAe,YACfv5C,SAAU,QACVM,QAASZ,EAAMZ,QAAQ,IAAM,MAC7Bc,QAAS,OACTM,eAAgB,SAChBzC,WAAY,SACZosC,OAAQ,WAEV6le,wBAAyB,CACvB9vgB,QAAS,OACTnC,WAAY,UAEdkygB,eAAgB,CACdnme,gBAAiB,WAElBome,GAAI,CACHpme,gBAAiB,WAEnBqme,GAAI,CACFrme,gBAAiB,WAEnBsme,GAAI,CACFtme,gBAAiB,WAEnBume,GAAI,CACFvme,gBAAiB,WAEnBwme,GAAI,CACFxme,gBAAiBpkG,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,aAAc,SAEjEwme,WAAY,CACVzme,gBAAiB,WAEnB0me,WAAY,CACVpwgB,MAAO,GACPi2C,OAAQ,GAEVo6d,sBAAuB,CACrB3me,gBAAiB,WAEnB4me,wBAAyB,CACvB5me,gBAAiB,WAEnB4M,KAAM,CACJ1J,WAAYhtC,EAAMZ,WAEpBuxgB,YAAa,CACX/vgB,QAASZ,EAAMZ,QAAQ,IAEzBwxgB,kBAAmB,CACjBh1U,UAAW,IACXywC,UAAW,QAEbwkS,YAAa,CACXt1d,WAAY,SACZn7C,MAAO,kBAoUU,CAAC0zC,WAAW,IAC/B7vE,YAAgB,gBAHH81B,EA9TiD,SAAC,GAe7C,IAAD,EAdjBiE,EAciB,EAdjBA,QACAumD,EAaiB,EAbjBA,OACAlI,EAYiB,EAZjBA,SACAf,EAWiB,EAXjBA,UACAm4H,EAUiB,EAVjBA,QACAwkF,EASiB,EATjBA,YACA82H,EAQiB,EARjBA,uBACA0gJ,EAOiB,EAPjBA,qBACAC,EAMiB,EANjBA,iCACAC,EAKiB,EALjBA,wBACAC,EAIiB,EAJjBA,qBACAC,EAGiB,EAHjBA,kBACAE,EAEiB,EAFjBA,+BACAl/jB,EACiB,EADjBA,EAGA,EAA4D0Y,YAAe,GAA3E,mBAAOunjB,EAAP,KAA+BC,EAA/B,KACA,EAAsCxnjB,WAA6CxsB,kBAAnF,mBAAOi0kB,EAAP,KAAoBC,EAApB,KAEA,EAAkD1njB,YAAe,GAAjE,mBAAO2njB,EAAP,KAA0BC,EAA1B,KACA,EAAgD5njB,WAAexsB,kBAA/D,mBAAO+kW,EAAP,KAAyB0sO,EAAzB,KACA,EAAwCjljB,WAAe,MAAvD,mBAAO6njB,EAAP,KAAqB7C,EAArB,KAEMnyX,GAAiB73F,EAAO17H,IAAI,kBAC5BwolB,GAA4Bj1X,GAAc,UAC5C73F,EAAO17H,IAAI,qBADiC,aAC5C,EAA0B0J,MAAK,SAAAw5Y,GAAI,OAAIA,EAAKljZ,IAAI,uBAAgD,WAAvBkjZ,EAAKljZ,IAAI,aAClF2tC,sBAAYytN,eAEVqtV,GAAa7B,IAAyBh8V,GAAqC,aAApB,OAANlvH,QAAM,IAANA,OAAA,EAAAA,EAAQ17H,IAAI,cAA6BwolB,KAA8Bj1X,IAE9H7yL,aAAgB,WACdwmjB,EAA+B1zd,KAC9B,IAEH9yF,aAAgB,WAEZ0njB,EADEH,GAA0BnB,EACb5ykB,eAAKxW,MAAMoplB,EAAwB9ulB,MAAM8sI,KAAK5wH,mBAE9CA,oBAEhB,CAAC+zkB,IAEJvnjB,aAAgB,WACT2njB,IACH1C,EAAoBzxkB,kBACpBwxkB,EAAgB,SAEjB,CAAC2C,IAiDJ,OACE,gBAACvzgB,EAAA,EAAD,CACE+B,GAAI,GACJhB,MAAM,EACNJ,WAAW,EACXT,aAAa,SACbE,WAAW,SACXG,UAAWF,EAAQM,UANrB,UASI25P,GAAeA,EAAY9mU,MAAMrD,KAAI,SAACy8F,EAAsBtpG,GAC1D,IAAMswlB,EAAchnf,EAAO1hG,IAAI,SACzB2olB,EAAWjnf,EAAO1hG,IAAI,MACtB4olB,EAAYn2d,IAAci2d,EAC5BvzgB,EAAQ,IAAD,OAAKwzgB,IACRxzgB,EAAQ,IAAD,OAAKwzgB,IACZxzgB,EAAQuygB,WACZvygB,EAAQiygB,eACNyB,EAAkBp2d,IAAci2d,EAAcvzgB,EAAQyygB,sBAAwBzygB,EAAQ0ygB,wBAC5F,OACE,uBAAiBxygB,UAAWF,EAAQgygB,wBAApC,UACE,sBAAK9xgB,UAAWm0C,IAAWr0C,EAAQu8C,WAAYk3d,GAA/C,SACE,eAACnze,EAAA,EAAD,CAAYqL,QAAS,WAAOime,EAAqBvzd,EAAUk1d,IAA3D,SACGA,MAGL,sBAAKrzgB,UAAWm0C,IAAWr0C,EAAQwygB,WAAYkB,OANvCzwlB,MAWhB,eAAC8tH,EAAA,EAAD,CAASC,MACPyge,EACIh8V,EACE5iO,EAAE,yCACF,GACFA,EAAE,mCALR,SAOE,sBAAKqtD,UAAWF,EAAQgygB,wBAAxB,SACE,sBAAK9xgB,UAAWm0C,IAAWr0C,EAAQu8C,WAAYv8C,EAAQiygB,gBAAvD,SACE,eAAC3xe,EAAA,EAAD,CACE8B,MAAO,CAAErV,MAAOumf,GAAa,UAAY,sBACzC3ne,QAAS,kBAAM2ne,GAAazB,IAAsB,MAFpD,SAIG53Q,GAAeA,EAAYvyT,MAAM,EAAE,EAAG,kBAK9C+tO,GAAWs7M,GACV,eAAChgV,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qDAAlB,SACE,eAAC,IAAD,CAAUk6E,MAAM,QAAQ7sB,UAAWF,EAAQ04C,SAI7Cg5d,EACI,eAAChpR,EAAA,EAAD,CAAkB7lU,KAAK,QAAQq9E,UAAWF,EAAQ04C,OAClD,wCAE2B,OAAvBi5d,QAAuB,IAAvBA,OAAA,EAAAA,EAAyBz1kB,SACrB,eAAC60G,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SACE,eAAC2uG,EAAA,EAAD,CAAY3+H,KAAK,QAAQq9E,UAAWF,EAAQ04C,KAAM/M,QAAS,kBAAMone,GAA0B,IAA3F,SACE,eAAC,IAAD,CAAchmf,MAAM,cAGxB,KAGHsmf,KAA8Bj1X,IAC7B,eAACrtG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0DAAlB,SACE,eAAC,KAAD,CAAWo7F,SAAS,QAAQlhB,MAAM,QAAQ7sB,UAAWF,EAAQ04C,YAOxE26d,IAA6Bj1X,IAC5B,eAACrtG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4DAAlB,SACE,eAAC,KAAD,CAAao7F,SAAS,QAAQ/tC,UAAWF,EAAQ04C,KAAMtW,MAAO,CAAErV,MAAO,eAI7E,eAAC+vN,EAAA,EAAD,CAAQrrN,KAAMqhf,EAAwBrnd,QAAS,kBAAMsnd,GAA0B,IAA/E,SACE,uBAAK3we,MAAO,CAAEhgC,MAAO,KAArB,UACE,uBAAKlC,UAAWF,EAAQ2ygB,YAAxB,UACE,eAACrye,EAAA,EAAD,CAAYE,QAAQ,UAAUt+B,QAAQ,QAAtC,SACGrvD,EAAE,0DAEL,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,qDAGP,eAAC4qG,EAAA,EAAD,IACA,gBAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBV,UAAWF,EAAQ2ygB,YAAlE,UACE,eAACrye,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SACGl6E,EAAE,oCAEL,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SACGl6E,EAAE,kDAGP,sBAAKqtD,UAAWm0C,IAAWr0C,EAAQ4ygB,mBAAnC,gBAEIjB,QAFJ,IAEIA,OAFJ,EAEIA,EAAyB7hlB,KAAI,SAAC6jlB,EAA6Cxsc,GAAgB,IAAD,IAClFysc,EAAa,UAAGZ,EAAYnolB,IAAIs8I,UAAnB,aAAG,EAA6B90I,QAAO,SAAAywJ,GAAG,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAKj4J,IAAI,iBAAeqR,QACnF23kB,EAAU,UAAGb,EAAYnolB,IAAIs8I,UAAnB,aAAG,EAA6B1+H,MAAK,SAAAq6I,GAAG,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAKj4J,IAAI,gBAC/DiplB,EAA2BF,EAAgB,GAAKA,IAAkBD,EAAuBz3kB,QAC/F,OAAO,iCACL,eAACuhH,EAAA,EAAD,IACA,sBAAsBv9C,UAAWF,EAAQ2ygB,YAAzC,SACE,gBAAChzgB,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACE,eAACmjD,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAAS8wd,IAAkBD,EAAuBz3kB,QAClDoikB,cAAewV,EACfxxe,SAAU,SAACpzG,EAAG1M,GAAJ,OApKT,SAACA,EAAgB2kJ,EAAoBtkJ,GAG1DowlB,EAFEzwlB,EAEauc,eAAKxW,MAAMoplB,EAAwB9ulB,MAAM8sI,KAAK5wH,mBAASvQ,IAAI24I,EAAYpoI,eAAKxW,MAAM1F,GAAM8sI,KAAKz/G,iBAAO,CAAE68F,YAAY,EAAMgne,WAAW,MAAW/8kB,MAAM,CAAC,EAAG,cAAc,IAEtK,SAACg9kB,GAAD,OAAwBA,EAAmBxllB,IAAI24I,EAAYpoI,oBA+J9Bk1kB,EAAiBH,GAAmCtxlB,EAAO2kJ,EAAYwsc,EAAuBz3kB,YAExH,eAACokG,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACGl6E,EAAE,gDAIL8gkB,EAAuB7jlB,KAAI,SAACqzT,EAAiCpiM,GAC3D,IAAMmzd,EAAoB/vlB,QAAQ6ulB,EAAYtrkB,MAAM,CAACy/H,EAAYpmB,EAAc,gBAC/E,OACE,gBAACphD,EAAA,EAAD,CAAyBW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAnE,UACE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASZ,MAAM,EAAMgB,GAAI,GAAzE,UACE,eAACwhD,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASoxd,EACT5xe,SAAU,SAACpzG,EAAG1M,GAAJ,OA1Kf,SAACA,EAAgB2kJ,EAAoBpmB,GAC9D,IAAMozd,EAAgCnB,EAAYnolB,IAAIs8I,GAAY1+H,MAAK,SAAAq6I,GAAG,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAKj4J,IAAI,iBAErFoolB,EADEkB,EACa,SAACH,GAAD,OAAwBA,EAAmBh9kB,MAAM,CAACmwI,EAAYpmB,GAAe7wG,iBAAO,CAAE68F,WAAYvqH,EAAOuxlB,WAAW,MAGpHh1kB,eAAKxW,MAAMoplB,EAAwB9ulB,MAAM8sI,KAAK5wH,mBAAS/H,MAAM,CAACmwI,EAAYpmB,GAAe7wG,iBAAO,CAAE68F,WAAYvqH,EAAOuxlB,WAAW,MAoK3FK,CAAmB5xlB,EAAO2kJ,EAAYpmB,MAEhE,eAAChQ,EAAA,EAAD,CAASC,MAAOmyM,EAAiBt4T,IAAI,iBAArC,SACE,eAACy1G,EAAA,EAAD,CAAY+K,QAAQ,EAApB,SACG83M,EAAiBt4T,IAAI,wBAK1BqplB,GACE,eAACv0gB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACy3S,EAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAAS3+H,QAAQ6ulB,EAAYtrkB,MAAM,CAACy/H,EAAYpmB,EAAc,eAC9Dze,SAAU,kBA9KX,SAAC6kC,EAAoBpmB,GACtDkyd,GAAe,SAACe,GACd,IAAMK,EAAuBL,EAAmBnplB,IAAIs8I,GAAYr6H,WAAU,SAACg2I,EAAK7/J,GAAN,cAAgB6/J,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAKj4J,IAAI,gBAC7FyplB,EAAiBN,EAAmBh9kB,MAAM,CAACmwI,EAAYpmB,EAAc,cAAc,GACzF,OAA+B,IAA3Bszd,EACKC,EAAet9kB,MAAM,CAACmwI,EAAYktc,EAAsB,cAAc,GAExEC,KAuKyCC,CAA2Bptc,EAAYpmB,UAnBtDA,MA4BjB,eAACphD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,SACE,eAACmwC,EAAA,EAAD,CAASE,UAAU,MAAMD,MAAO+/U,EAAyB,GAAK,gCAA9D,SACE,gCACE,eAACtlV,EAAA,EAAD,CACE1e,MAAM,UACN7sB,UAAWF,EAAQ6ygB,YACnB7ue,UAAW+sV,GAA0B6iJ,EAAgB,IAAMC,EAC3Dloe,QAAS,kBAnLP,SAACw7B,GAC7B,IAAIqtc,EAAgB,EACdC,EAAoB9C,EACvB9mlB,IAAIs8I,GACJ10I,QAAO,SAACutI,EAAKliB,EAAS76H,GAIrB,OAHI+vlB,EAAYtrkB,MAAM,CAACy/H,EAAYlkJ,EAAO,gBACxCuxlB,EAAgBx0c,EAAI9jI,SAEf82kB,EAAYtrkB,MAAM,CAACy/H,EAAYlkJ,EAAO,eAAiB+8I,EAAI9sI,KAAK4qH,GAAWkiB,IACjFjhI,kBAELwxkB,EAAgBiE,GAChBhE,EAAoBiE,GACpB1B,GAA0B,GAC1BI,GAAqB,GAqKoBuB,CAAsBvtc,IAJvC,SAMGt0H,EAAE,2DAtDLs0H,KAFKA,aAqE3B,eAAC,GAAD,CACE5gB,OAAQA,EACR2md,oBAAqBkG,GAAgB,EACrC7C,gBAAiBA,EACjB5xd,SAAUmlP,EACV0sO,oBAAqBA,EACrB/+e,KAAMyhf,EACNznd,QAAS,kBAAM0nd,GAAqB,Y,mDC/R/BwB,GAAmB,SAACt2X,GAC/B,OAAQA,GACN,IAAK,UACH,MAAO,CACLvyG,gBAAiB,UACjB/e,MAAO,WAEX,IAAK,WACH,MAAO,CACL+e,gBAAiB,UACjB/e,MAAO,WAEX,IAAK,YACH,MAAO,CACL+e,gBAAiB,UACjB/e,MAAO,WAEX,IAAK,WACH,MAAO,CACL+e,gBAAiB,UACjB/e,MAAO,WAEX,QACE,MAAO,KCnCA0nO,IDiTE14P,kBACbgG,aA3Wa,SAACC,GAAD,MAA+B,CAC5C6/V,gBAAiB,CACfj/V,QAASZ,EAAMZ,QAAQ,EAAG,KAE5BwzgB,WAAY,CACVpld,YAAaxtD,EAAMZ,QAAQ,IAE7ByzgB,cAAe,CACb16d,aAAcn4C,EAAMZ,QAAQ,MAE9BqmD,YAAa,CACXplD,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,MAE9Bm7C,WAAY,CACVhO,aAAcvsC,EAAM4/C,MAAMrT,aAC1BsT,WAAY,UACZhG,cAAe,cAEjBi5d,WAAY,CACVhpe,gBAAiB,UACjB/e,MAAO,UACP3qB,MAAO,GACPmsC,aAAc,IACd3rC,QAAS,UACTqrC,SAAU,OACV8F,UAAW,UAEb0hN,cAAe,CACblnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACV4N,cAAe,YACfv5C,SAAU,QACVM,QAASZ,EAAMZ,QAAQ,IAAM,MAC7Bc,QAAS,OACTM,eAAgB,SAChBzC,WAAY,SACZ+rC,gBAAiB,SAEnBu8R,WAAY,CACVzlU,QAAS,kBAEXysd,SAAU,CACRvna,OAAQ9lD,EAAM8lD,OAAO00O,OAAS,EAC9BzvQ,MAAO,QAET2rB,KAAM,CACJ1J,WAAYhtC,EAAMZ,WAEpBuxgB,YAAa,CACX/vgB,QAASZ,EAAMZ,QAAQ,IAEzBwxgB,kBAAmB,CACjBh1U,UAAW,IACXywC,UAAW,QAEb+2F,UAAW,CACTrhS,SAAU,WACVqX,IAAK,EACL95G,MAAO,GAETyzkB,mBAAoB,CAClB3ygB,MAAO,EACPi2C,OAAQ,MACR21O,UAAW,SACXh/O,WAAYhtC,EAAMZ,QAAQ,GAC1BknC,YAAatmC,EAAMZ,QAAQ,QA2S7Bn7B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,GAAD,OAAgB8L,YAAyB,CAC/DkqG,kBAAmBv7F,eACnBwoZ,uBAAwBplZ,cACxBxB,KAAMF,eAHgCrQ,CAIrC9L,KAKwB,MAHZiuC,EA1QmC,SAAC,GAAwJ,IAAvJiE,EAAsJ,EAAtJA,QAAsJ,IAA7IumD,cAA6I,MAApI7sH,gBAAoI,EAA7GoqI,EAA6G,EAA7GA,kBAAmBitT,EAA0F,EAA1FA,uBAAwBlnI,EAAkE,EAAlEA,iBAAkBh3S,EAAgD,EAAhDA,EAAGo1U,EAA6C,EAA7CA,oBAAqB99S,EAAwB,EAAxBA,KAEhL,EAA4D5e,YAAe,GAA3E,mBAAOunjB,EAAP,KAA+BC,EAA/B,KACMrB,EAAmCl5iB,sBAAYutN,eAC/C4rV,EAA0Bn5iB,sBAAYwtN,gBAGtCgvV,EAASzud,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACjDutkB,EAAW1ud,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,aACnD0hB,EAAI,UAAM4rjB,EAAN,gBAHM,IAGN,YAHM,KAIV1/kB,EAAOixH,EAAO17H,IAAI,SAAW,GAC7B48H,EAAclB,EAAO17H,IAAI,gBAAkB,GAC3Co1H,EAAQsG,EAAO17H,IAAI,UAAY,GAC/B68B,EAAe6+F,EAAO17H,IAAI,iBAAmB,GAC7CgqlB,EAAgB50d,GAASv4F,EAAT,UAA2Bu4F,EAA3B,cAAsCv4F,GAAtC,UAA0Du4F,GAA1D,OAAkEv4F,GAClF02L,EAAiB73F,EAAO17H,IAAI,kBAC5BwzH,EAAWkI,EAAO17H,IAAI,MACtBqqlB,EAAU3ud,EAAO17H,IAAI,SACrBsqlB,EAAU5ud,EAAO17H,IAAI,WACrB41Y,EAAWl6Q,EAAO17H,IAAI,iBACtByyH,EAAYiJ,EAAO17H,IAAI,aACvBwzN,EAAa93F,EAAO17H,IAAI,cACxBuqlB,EAAgBT,GAAiBt2X,GACjCo3B,EAAUlvH,EAAO17H,IAAI,WAE3B,EAAwB0gC,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,GAAb,KAkBA,OACE,gBAAC13C,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXJ,UAAWF,EAAQ6hW,gBAHrB,UAKE,eAACwzK,GAAA,EAAD,CACE5jf,KAAMA,EACN4lB,QAASA,GACTmjM,OAAQw6R,EACRv7R,SAAUw7R,IAEZ,eAACt1gB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHP,SAKE,gBAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAA5B,UACE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+J,OAAQ,WAAnC,SACE,eAAC4E,EAAA,EAAD,CAASC,MAAOike,GAAY,GAA5B,SACE,sBAAKtpe,QAAS,kBAAM0L,IAAQ,IAA5B,SACE,eAAC,IAAD,CACE/J,IAAKlkF,EACLg5C,MAAK,UA5DL,IA4DK,MACLurC,YAAa,OACbC,aAAa,EACbvrC,OAAO,YAKf,gBAAC1C,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVI,QAAQ,eACRV,UAAWF,EAAQ40gB,WALrB,UAOE,gBAACj1gB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAAtE,UACE,eAACJ,EAAA,EAAD,UACE,eAAC2gC,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQ60gB,cAAnD,SAAmEA,MAEpE1qiB,IAAS5pB,YAAS6pB,KACjB,eAACu1B,EAAA,EAAD,CAAMe,MAAM,EAAZ,SA1DRy0gB,IAAYD,EAEZ,eAACzpe,EAAA,EAAD,CAAQ1e,MAAM,UAAUqV,MAAO,CAAEmb,WAAY,UAAY5R,QAAS,kBAAMn2F,OAAOi8E,KAAP,UAAej8E,OAAO+6B,SAAS3uC,QAA/B,OAAwCoc,yBAAxC,YAAiEm3jB,GAAW,WAApJ,SACGtikB,EAAE,qCAGE4tX,GAAYy0M,EAEnB,eAACzpe,EAAA,EAAD,CAAQ1e,MAAM,UAAUqV,MAAO,CAAEmb,WAAY,UAAY5R,QAAS,kBAAMn2F,OAAOi8E,KAAP,UAAej8E,OAAO+6B,SAAS3uC,QAA/B,OAAwCkc,0BAAxC,YAAkE2iX,GAAY,WAAtJ,SACG5tX,EAAE,gDAHF,OAyDC,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqB,QAAS,EAApD,UACGj3B,IAAS5pB,YAAS6pB,KACjB8qiB,GAAW,sBAAKh1gB,UAAWF,EAAQ80gB,WAAxB,SACPjikB,EAAE,iCAGR,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BlrG,MAE5B,eAACqqE,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACI09I,EACE,eAACrtG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iDAAlB,SACE,eAAC,IAAD,MAEF,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8CAAlB,SACE,eAAC,IAAD,QAIR,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACu4M,GAAA,EAAD,CAAa1yJ,OAAQA,MAEtBp8E,IAAS5pB,YAAS6pB,KACjB,eAACu1B,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,IAAD,CAAeoiF,IAAKv8B,EAAQvlH,SAAUk0kB,MAGzC/qiB,IAAS5pB,YAAS6pB,KACjB05F,GACE,eAACnkE,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,sBAAKR,UAAWF,EAAQy1P,cAAerzN,MAAO,CAAE0J,gBAAiBspe,EAActpe,iBAA/E,SACE,eAACxL,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAOqof,EAAcrof,OAA1D,SAAoEsxH,GAAc,WAKxF62X,GAAWz/V,GAAWs7M,GAA0B,eAAChgV,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qDAAlB,SAAwE,eAAC,IAAD,CAAUk6E,MAAM,YAEvImof,GAAW/qiB,IAAS5pB,YAAS8vB,GAC1B,KACAqhiB,EACI,eAAChpR,EAAA,EAAD,CAAkB7lU,KAAK,QAAQq9E,UAAWF,EAAQ04C,QAC3B,OAAvBi5d,QAAuB,IAAvBA,OAAA,EAAAA,EAAyBz1kB,SACrB,eAAC60G,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2CAAlB,SACE,eAAC2uG,EAAA,EAAD,CAAY3+H,KAAK,QAAQq9E,UAAWF,EAAQ04C,KAAM/M,QAAS,kBAAMone,GAA0B,IAA3F,SACE,eAAC,IAAD,CAAchmf,MAAM,cAGxB,QAGhB,eAACptB,EAAA,EAAD,CAAMO,UAAWF,EAAQynD,YAAzB,SACE,eAACnnB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiD06B,MAEnD,gBAAC9nD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,eAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAACowX,GAAA,EAAD,CACEtwV,QAAS,QACTqpN,iBAAkBA,EAClBo+B,oBAAqBA,EACrBl5O,YAAa,CACX/uC,QAAS,CAAE3hE,KAAM2hE,EAAQqoU,iBAK7B,CAAC,OAAQ,OAAQ,QAAQv4Y,KAAI,SAACupT,EAAWp2T,GACvC,IAAMwkW,EAAQlhO,EAAO7+G,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,UAC5DyrR,EAA4B,SAAdj8R,EACpB,OACE,gBAAC15O,EAAA,EAAD,CAAkBe,MAAM,EAAxB,UACE,eAAC4/B,EAAA,EAAD,CAAYvT,MAAM,cAAc2rD,cAAc,EAA9C,SAA4E7lI,EAAvB40U,GAAS6tP,EAAgB,sCAA2C,oBAAD,OAAqBj8R,MAC7I,eAAC/4M,EAAA,EAAD,CAAYvT,MAAM,gBAAgBqV,MAAO,CAAE2R,UAAY0zO,GAAS6tP,EAAe,SAAW,QAA1F,SAAqG7tP,GAAS6tP,EAAc,eAAC,KAAD,CAAWvof,MAAM,YAAcw5B,EAAO7+G,MAAM,CAAC,QAAS,UAAWmiT,EAAkBxQ,QAFtMp2T,MAQfknD,IAAS5pB,YAAS6pB,KAAO,uCACvB,eAACqzE,EAAA,EAAD,CAAS4/P,YAAY,WAAWn9S,UAAWF,EAAQ+0gB,qBAEjD,CACE,CACEntjB,MAAO/U,EAAE,6BACTg+F,KAAM,CAAC,YAAa,OAAQ,MAAO,aAErC,CACEjpF,MAAO/U,EAAE,kCACTg+F,KAAM,CAAC,YAAa,OAAQ,MAAO,UAErC,CACEjpF,MAAO/U,EAAE,8BACTg+F,KAAM,CAAC,YAAa,QAAS,MAAO,aAEtC,CACEjpF,MAAO/U,EAAE,mCACTg+F,KAAM,CAAC,YAAa,QAAS,MAAO,WAEtC/gH,KAAI,SAACulZ,EAAWpyZ,GAChB,OACE,gBAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,UACE,eAAC4/B,EAAA,EAAD,CAAYvT,MAAM,cAAc2rD,cAAc,EAA9C,SAAqD28P,EAAUztX,QAC/D,eAAC04E,EAAA,EAAD,CAAYvT,MAAM,gBAAgBqV,MAAO,CAAC2R,UAAW,UAArD,SAAiEwS,EAAO7+G,MAAM2tY,EAAUxkS,UAF/E5tH,oBAc3BiylB,GAAW/qiB,IAAS5pB,YAAS6pB,KAAO,eAAC,GAAD,CAAqBi0E,SAAUA,EAAUkI,OAAQA,EAAQjJ,UAAWA,EAAWm4H,QAASA,IAG9H,eAACqnE,EAAA,EAAD,CAAQrrN,KAAMqhf,EAAwBrnd,QAAS,kBAAMsnd,GAA0B,IAA/E,SACE,uBAAK3we,MAAO,CAAEhgC,MAAO,KAArB,UACE,uBAAKlC,UAAWF,EAAQ2ygB,YAAxB,UACE,eAACrye,EAAA,EAAD,CAAYE,QAAQ,UAAUt+B,QAAQ,QAAtC,SACGrvD,EAAE,0DAEL,eAAC2uG,EAAA,EAAD,CAAY7V,QAAS,kBAAMone,GAA0B,IAAQ7ygB,UAAWF,EAAQolU,UAAhF,SACE,eAAC,KAAD,SAGJ,eAAC3nR,EAAA,EAAD,IACA,eAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBV,UAAWF,EAAQ2ygB,YAAlE,SACE,eAACrye,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SACGl6E,EAAE,sCAGP,sBAAKqtD,UAAWF,EAAQ4ygB,kBAAxB,gBAEIjB,QAFJ,IAEIA,OAFJ,EAEIA,EAAyB7hlB,KAAI,SAAC6jlB,EAA6Cxsc,GACzE,OAAO,iCACL,eAAC1pB,EAAA,EAAD,IACA,sBAAsBv9C,UAAWF,EAAQ2ygB,YAAzC,SACE,eAAChzgB,EAAA,EAAD,CAAMW,WAAW,EAAjB,SAEIqzgB,EAAuB7jlB,KAAI,SAACqzT,EAAiCpiM,GAC3D,OACE,eAACphD,EAAA,EAAD,CAAyBW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAnE,SACE,eAAC3B,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASZ,MAAM,EAAMgB,GAAI,GAAzE,SACE,eAACqvC,EAAA,EAAD,CAASC,MAAOmyM,EAAiBt4T,IAAI,iBAArC,SACE,eAACy1G,EAAA,EAAD,CAAY+K,QAAQ,EAApB,SACG83M,EAAiBt4T,IAAI,wBAJnBk2H,SALXomB,KAFKA,mBC5QDj3H,iBAAO,CACrC,CACE6X,GAAI,EACJvlC,MAAO,SACPwlC,UAAW,iBAEb,CACED,GAAI,EACJvlC,MAAO,eACPwlC,UAAW,uBAMb,CACED,GAAI,EACJvlC,MAAO,UACPwlC,UAAW,iBACX22iB,MAAM,GAER,CACE52iB,GAAI,EACJvlC,MAAO,WACPwlC,UAAW,sBAIFusS,GAA0BrkT,iBAAO,CAC5C65P,OAAQ,CACNhiP,GAAI,EACJC,UAAW,iBAEbkhX,aAAc,CACZnhX,GAAI,EACJC,UAAW,uBAMbutjB,QAAS,CACPxtjB,GAAI,EACJC,UAAW,kBAEbwtjB,SAAU,CACRztjB,GAAI,EACJC,UAAW,qBA+NA+zC,4BACbgG,aArVa,SAACC,GAAD,MAA+B,CAC5CyzP,cAAe,CACblnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACV4N,cAAe,YACfz5C,MAAO,QACP2xC,UAAW,SACX8N,WAAY,SAEd6zM,KAAM,CACJ9yP,QAAS,WACTkpC,gBAAiB,WAEnB9H,SAAU,CACRjX,MAAO,sBAETkf,QAAS,CACP4P,cAAe,cAIjBg7M,IAAK,CACHh1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,cAAe,SAE7D+qN,IAAK,CACHj1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDgrN,IAAK,CACHl1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,YAAa,SAE3DirN,IAAK,CACHn1M,WAAY,WAkBdqwd,GAAI,CACFpme,gBAAiB,WAEnBqme,GAAI,CACFrme,gBAAiB,WAEnBsme,GAAI,CACFtme,gBAAiB,WAEnBume,GAAI,CACFvme,gBAAiB,WAEnBwme,GAAI,CACFxme,gBAAiBpkG,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,aAAc,SAGjE4oN,KAAM,CACJ7oN,gBAAiB,eAoRnB7lE,YAAgB,gBAChBgwE,KACAtQ,mBATsB,SAAC73E,EAAYyF,GAAb,OAA+BqG,YAAyB,CAC9EqgS,YAAaurB,cACbisP,qBAAsB3liB,eAF+BlS,CAGpD9L,MAjCwB,SAAC2D,GAC1B,MAAO,CACLmgjB,qBAAsB,SAACvzd,EAAkBo3d,EAAoBC,EAAmBtnR,EAAwBunR,GACtGlkjB,EAAS,IAAI25C,KAA2B,CACtCizC,WACAs3d,UACAz/L,WAAW,eACRu/L,EAAaC,GAEhBtnR,gBAGJ6gI,sBAAuB,SAAClvU,EAAmB01d,EAAoBC,EAAmBtnR,GAChF38R,EAAS,IAAIi5C,KAA4B,CACvCq1C,YACA4qQ,YAAY,eACT8qN,EAAaC,GAEhBtnR,gBAGJyjR,kBAAmB,WACjBpgjB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAI+pjB,IACJrgf,MAAM,UAWC11B,EAtMqC,SAAC/qC,GACnD,IACEgvC,EAgBEhvC,EAhBFgvC,QACA8iF,EAeE9xH,EAfF8xH,IACA8ub,EAcE5gjB,EAdF4gjB,qBACA3iJ,EAaEj+Z,EAbFi+Z,sBACA4iJ,EAYE7gjB,EAZF6gjB,kBALF,EAiBI7gjB,EAXFhqC,YANF,MAMS,SANT,IAiBIgqC,EAVFykjB,kBAPF,MAOe,SAPf,IAiBIzkjB,EATF4kjB,kBARF,SASE37Q,EAQEjpS,EARFipS,YACA47Q,EAOE7kjB,EAPF6kjB,iBAVF,EAiBI7kjB,EANFhwB,gBAXF,SAYEywkB,EAKEzgjB,EALFygjB,qBACAqE,EAIE9kjB,EAJF8kjB,oBACA74d,EAGEjsF,EAHFisF,aACApqG,EAEEme,EAFFne,EACA8gC,EACE3iB,EADF2iB,cAGF,EAAkCpoB,WAAe,MAAjD,mBAAOwqjB,EAAP,KAAkBC,EAAlB,KACA,EAAgDzqjB,YAAe,GAA/D,mBAAO0qjB,EAAP,KAAyBC,EAAzB,KACA,EAAsC3qjB,WAAe,MAArD,mBAAOgojB,EAAP,KAAoB4C,EAApB,KAEMC,EAA0B,WAAfX,EACXY,EAA8B,eAAfZ,EACfp2kB,EAAOw2kB,IAAqBO,EAAW3hR,GAAmBwF,GAE1Dq8Q,EAAyC,YAAjBr5d,EAExBo3M,EAAgBvxK,EAAIj4J,IAAI4qlB,GACxBjhR,EAAmBn1T,GAAQA,EAAKoJ,MAAK,SAAC8jF,GAAD,OAA0BA,EAAO1hG,IAAI,WAAawpU,KACvFK,EAAqBL,EACvBr0P,EAAQ,GAAD,OAAIo2gB,EAAW,KAAO,KAAtB,OAA4B5hR,GAAoBA,EAAiB3pU,IAAI,QAC5Em1E,EAAQ20P,KACNygR,GAAgBiB,EAAe1B,GAAiBtgR,GAAiB,GACjEkiR,GAAehiR,GAAwB7sT,MAAM,CAAC2sT,EAAe,cAC7DmiR,GAAcD,GAAe1jkB,EAAE0jkB,IAAgBliR,EAE/CoiR,GAAoC,SAACp4d,EAAkBq4d,EAAqBhB,EAAmBC,GACnG,IAAM/zT,EAA0B,YAAd8zT,EAA0Bj0jB,mBAAgBk1jB,cAA8B,iBAAdjB,EAA+Bj0jB,mBAAgBm1jB,mBAAqB,KAShJhF,EAAqBvzd,EAAUo3d,EAAYC,EARiB,WAAhBgB,GAA4B90T,EAAY,WAClFr0L,KAAmBq0L,EAAWjuO,EAAc,CAC1CktE,WAAYiiC,EAAIj4J,IAAI,QACpBwzH,SAAUykC,EAAIj4J,IAAI,MAClBu/W,iBAAkBtnN,EAAIj4J,IAAI,SAC1B68B,aAAco7H,EAAIj4J,IAAI,oBAEtB,KACuF8qlB,IAG7F,OACE,uCACE,sBAAKz1gB,UAAWF,EAAQy1P,cAAerzN,MAAO,CAAE//B,OAAQuzgB,EAAa,SAAW,UAAWzpe,OAAQnrG,EAAW,UAAY,WAA1H,SACGq1kB,EACG,sBAAKn2gB,UAAWF,EAAQ01P,KAAMtzN,MAAO,CAAE0J,gBAAiBspe,GAActpe,iBAAtE,SACE,eAACxL,EAAA,EAAD,CAAY8B,MAAO,CAAErV,MAAOqof,GAAcrof,OAA1C,SAAoDypf,IAAe,QAErE,sBACE7qe,QAAS,SAAAz8G,GAAC,OAAI8R,EAAWg1kB,EAAa9mlB,EAAEs8G,eAAiB,MACzD,YAAWuqe,EAAY,qBAAkBnzlB,EACzCs9E,UAAW6tC,IAAW/tC,EAAQ01P,KAAMhB,GACpCpM,YAAa,SAAAp5T,GAAC,OAAIA,EAAE87G,mBAJtB,SAME,eAAC1K,EAAA,EAAD,UACGk2e,IAAe,UAK1B,eAAC/+T,EAAA,EAAD,CACE1vP,GAAG,gBACHkyF,SAAU87d,EACVtkf,KAAMttG,QAAQ4xlB,GACdtqd,QAAS,SAAAv8H,GAAC,OAAI8mlB,EAAa,OAJ7B,SAMG32kB,EAAKhN,QAAO,SAACwklB,GAAD,OAAcA,EAAQhslB,IAAI,WAASiF,KAAI,SAACy8F,EAAQtpG,GAAT,OAClD,eAAC8tH,EAAA,EAAD,CAEEC,MAAQole,GAAiC,IAArB7pf,EAAO1hG,IAAI,MAMrB,GALC4mlB,EAECqE,EACEjjkB,EAAE,8BACF,GAHFA,EAAE,mCAJhB,SAUE,eAACwwF,EAAA,EAAD,CACEsI,QAAS,SAACz8G,GACR,GAAa,WAATlI,EACEovlB,GACFD,EAAe5pf,EAAO1hG,IAAI,UAC1BqrlB,GAAoB,IAEK,IAArB3pf,EAAO1hG,IAAI,OACT4mlB,GAAyBqE,GAAwBQ,GACnDzE,KAGFD,EAAqB9ub,EAAIj4J,IAAI,MAAO4qlB,EAAYlpf,EAAO1hG,IAAI,UAC3DqrlB,GAAoB,QAGnB,CACL,IAAMY,EAAgBvqf,EAAO1hG,IAAI,SAC3B+2R,EAA8B,YAAlBk1T,EAA8Br1jB,mBAAgBs1jB,eAAmC,iBAAlBD,EAAmCr1jB,mBAAgBu1jB,oBAAsB,KACpJC,EAAqD,WAAfxB,GAA2B7zT,EAAY,WACjFr0L,KAAmBq0L,EAAWjuO,EAAc,CAC1CktE,WAAYiiC,EAAIj4J,IAAI,cACpBwzH,SAAUykC,EAAIj4J,IAAI,UAClB2kc,YAAa1sS,EAAIj4J,IAAI,iBACrBk1H,UAAW+iC,EAAIj4J,IAAI,MACnBu/W,iBAAkBtnN,EAAIj4J,IAAI,SAC1B68B,aAAco7H,EAAIj4J,IAAI,oBAEtB,KACJokc,EAAsBnsS,EAAIj4J,IAAI,MAAO4qlB,EAAYqB,EAAeG,GAElEjB,EAAa,OA/BjB,SAkCE,eAAClwL,EAAA,EAAD,CAAc9lV,QAAS,CAACisC,QAAS8B,IAAW/tC,EAAQisC,QAAWwle,IAAwBqE,IAAuBQ,GAA+C,IAArB/pf,EAAO1hG,IAAI,OAAgBurlB,EAA8B,GAAnBp2gB,EAAQgkC,WACpLkze,OAAO,EACPjre,QAAS1f,EAAO1hG,IAAI,cA7CnB5H,QAmDX,gBAAC65T,EAAA,EAAD,CACErrN,KAAMwkf,EACNxqd,QAAS,kBAAMyqd,GAAoB,IACnC,kBAAgB,oCAChB,mBAAiB,8GAJnB,UAME,eAACn5R,EAAA,EAAD,UACE,eAACylI,EAAA,EAAD,CAAmBhiV,QAAQ,KAAKzT,MAAM,cAAtC,SACGN,IAAQ55E,EAAE,6DAGf,gBAACqqS,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS,WAC/B8qe,GAAkC3zb,EAAIj4J,IAAI,MAAO4qlB,EAAYlC,GAAa,GAC1E2C,GAAoB,IAFtB,SAIGzpf,IAAQ55E,EAAE,2CAEb,eAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS,WAC/B8qe,GAAkC3zb,EAAIj4J,IAAI,MAAO4qlB,EAAYlC,GAC7D2C,GAAoB,IAFtB,SAIGzpf,IAAQ55E,EAAE,0CAEb,eAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS,kBAAMuqe,GAAoB,IAA3D,SACGzpf,IAAQ55E,EAAE,kD,mECjUXskkB,E,kDAAAA,K,kBAAAA,E,yBAAAA,E,sBAAAA,E,qBAAAA,M,KAOsBl/X,IAOIA,K,gPCHzBm/X,GAAyD,mBACjEl5K,IAA4B,CACzBp2K,SAAUuvV,IACVpuN,QAAS,uBACT/rD,OAAQ,CAAC,6BAA8B,kBAAmB,sBAJI,cAMjEihG,IAA0B,CACvBr2K,SAAUwvV,IACVruN,QAAS,uBACT/rD,OAAQ,CAAC,mBATqD,GAczDq6Q,EAAqB,SAACh2iB,GAAD,OAA0CA,EAAOn2C,MAAQgza,KAErFo5K,EAAqB,SAACC,EAA+B31iB,GAAhC,OACvB21iB,EAAWv6Q,OAAO7qU,QAAO,SAACsrP,GAAD,aAAsD,KAAvC,OAAJ77M,QAAI,IAAJA,GAAA,UAAAA,EAAO21iB,EAAWxuN,gBAAlB,eAA4Bp+X,IAAI8yP,OAAiBh1P,QAE5E+ulB,EAAmB,SAACn2iB,EAA6BO,GAC1D,IAAM21iB,EAAaL,EAAoB71iB,EAAOn2C,KAC9C,OAAIqslB,EACOD,EAAmBC,EAAY31iB,KAAU21iB,EAAWv6Q,OAAOv0U,OAE/DxE,QAAQo9C,EAAO6qE,WAGbure,EAA4B,SAACp2iB,EAA6BO,GACnE,IAAM21iB,EAAaL,EAAoB71iB,EAAOn2C,KAC9C,IAAKqslB,EACD,OAAO,EAEX,IAAMG,EAAeJ,EAAmBC,EAAY31iB,GACpD,OAAO81iB,EAAe,GAAKA,EAAeH,EAAWv6Q,OAAOv0U,QAGnDkvlB,EAAqB,SAACt2iB,EAA6BO,GAA9B,OAC9B41iB,EAAiBn2iB,EAAQO,IAAS61iB,EAA0Bp2iB,EAAQO,K,6OCVpE,EC6DAg2iB,EACAC,EACAC,EACAC,EACAC,E,mCCvFSC,EAAe,SAC1BzsjB,EACA0sjB,EACAC,GAEA,IAAIC,EACAzjQ,EACJ,OAAO,SAAC0jQ,GACFH,EAAO51lB,OAAS,IACd+1lB,GAAeF,MACjBxjQ,EAAQujQ,EAAO51lB,OAAS81lB,GAAa,UAMV11lB,IAAd01lB,KACXA,EAAYF,EAAO51lB,MACnB41lB,EAAOvjQ,MAAQA,EACfnpT,EAAS0sjB,M,kBCnBN,EAAqB,WAChC,IAAMI,EAAW,OAAAC,EAAA,KACjB,OAAQD,GAAYA,EAASE,iBAAoB,GCEtC,EAAa,SAACpjlB,EAAsB9S,GAC/C,IAAMg2lB,EAAW,OAAAC,EAAA,KACbE,EAA2C,WAU/C,OARIH,IAEAG,EADG,IAAO7rjB,UAAY,IAAOA,SAAS8rjB,cAAiB,IAAuB,EAC7D,YAEAJ,EAASxxlB,KAAK04E,QAAQ,KAAM,MAI1C,CACLpqE,OACA9S,MAAwB,qBAAVA,GAAyB,EAAIA,EAC3Cq2lB,OAAQ,OACRhkQ,MAAO,EACPpkV,QAAS,GACTs3B,GClBF,aAAalT,KAAK+xB,MAAlB,YAA2B/iD,KAAKwjB,MAAM,cAAAxjB,KAAKy1E,UAAyB,MDmBlEq/gB,mB,OEAS,EAAU,SACrB3xlB,EACA0kC,EACAorH,GAEA,IACE,GAAIgic,oBAAoBC,oBAAoB1olB,SAASrJ,GAAO,CAC1D,IAAMgylB,EAAK,IAAIF,qBAAoB,SAAAz5kB,GACjCqsB,EAASrsB,EAAK45kB,iBAOhB,OALAD,EAAGjzd,QAAH,aACE/+H,OACAkylB,UAAU,GACPpic,IAEEkic,GAET,MAAO9plB,M,kBNjCPiqlB,EAA2B,EAC3BC,EAAwBx1lB,IACxBy1lB,EAAwB,EAEtBC,EAAiB,SAAC7olB,GACrBA,EAAqC+C,SAAQ,SAAAtE,GACxCA,EAAEqqlB,gBACJH,EAAwBv1lB,KAAKE,IAAIq1lB,EAAuBlqlB,EAAEqqlB,eAC1DF,EAAwBx1lB,KAAKC,IAAIu1lB,EAAuBnqlB,EAAEqqlB,eAE1DJ,EAA2BE,GAAyBA,EAAwBD,GAAyB,EAAI,EAAI,OOD7G,EAAmC,WACvC,OPYO,EAAKD,EAA2BK,YAAYC,kBAAoB,GOHnEC,EAAwC,GAIxCC,EAAkE,GAQlEC,EAAe,SAAC7vlB,GAEpB,IAAM8vlB,EAAwBH,EAAuBA,EAAuB/wlB,OAAS,GAG/EmxlB,EAAsBH,EAAsB5vlB,EAAMwvlB,eAIxD,GACEO,GACAJ,EAAuB/wlB,OA3BU,IA4BjCoB,EAAMyxH,SAAWq+d,EAAsBE,QACvC,CAEA,GAAID,EACFA,EAAoBrplB,QAAQyC,KAAKnJ,GACjC+vlB,EAAoBC,QAAUl2lB,KAAKC,IAAIg2lB,EAAoBC,QAAShwlB,EAAMyxH,cACrE,CACL,IAAMw+d,EAAc,CAElBjyjB,GAAIh+B,EAAMwvlB,cACVQ,QAAShwlB,EAAMyxH,SACf/qH,QAAS,CAAC1G,IAEZ4vlB,EAAsBK,EAAYjyjB,IAAMiyjB,EACxCN,EAAuBxmlB,KAAK8mlB,GAI9BN,EAAuBnmlB,MAAK,SAAC9G,EAAGC,GAAJ,OAAUA,EAAEqtlB,QAAUttlB,EAAEstlB,WACpDL,EAAuBxjlB,OA/CU,IA+C2B1C,SAAQ,SAAA1J,UAE3D6vlB,EAAsB7vlB,EAAEi+B,SA6CxB,EAAQ,SAACkyjB,EAA0Bnjc,GAG9CA,EAAOA,GAAQ,GPnFX,qBAAsB0ic,aAAe,IAEzC,EAAK,EAAQ,QAASF,EAAgB,CACpCtylB,KAAM,QACNkylB,UAAU,EACVgB,kBAAmB,KOsFrB,IAEIC,EAFE/B,EAAS,EAAW,OAIpBgC,EAAgB,SAAC3plB,GACrBA,EAAQ+C,SAAQ,SAAAzJ,IACVA,EAAMwvlB,eACRK,EAAa7vlB,GAWS,gBAApBA,EAAMswlB,cACiBX,EAAuBnllB,MAAK,SAAAyllB,GACnD,OAAOA,EAAYvplB,QAAQ8D,MAAK,SAAA+llB,GAC9B,OAAOvwlB,EAAMyxH,WAAa8+d,EAAU9+d,UAAYzxH,EAAMy8H,YAAc8zd,EAAU9zd,iBAIhFozd,EAAa7vlB,OAKnB,IAAMkrP,EA7E4B,WACpC,IAAMslW,EAA4B12lB,KAAKE,IACrC21lB,EAAuB/wlB,OAAS,EAChC9E,KAAKwjB,MAAM,IAAqC,KAGlD,OAAOqykB,EAAuBa,GAuEhBC,GAERvlW,GAAOA,EAAI8kW,UAAY3B,EAAO51lB,QAChC41lB,EAAO51lB,MAAQyyP,EAAI8kW,QACnB3B,EAAO3nlB,QAAUwkP,EAAIxkP,QACrB0plB,MAIEnB,EAAK,EAAQ,QAASoB,EAAe,CAOzCF,kBAAmBpjc,EAAKojc,mBAAqB,KAG/CC,EAAShC,EAAa8B,EAAU7B,EAAQthc,EAAKuhc,kBAEzCW,IAGFA,EAAGjzd,QAAQ,CAAE/+H,KAAM,cAAekylB,UAAU,IAE5C,OAAAuB,EAAA,IAAS,WACPL,EAAcpB,EAAG0B,eAIbtC,EAAO51lB,MAAQ,GAAK,IAAqC,IAC3D41lB,EAAO51lB,MAAQ,EACf41lB,EAAO3nlB,QAAU,IAGnB0plB,GAAO,QC1LPQ,EAA6C,GCG7C,EAAY,SAAZC,EAAalvjB,GACZ,IAAOoB,WAIR,IAAOA,SAAS8rjB,aAClB9of,iBAAiB,sBAAsB,kBAAM8qf,EAAUlvjB,MAAW,GAC1B,aAA/B,IAAOoB,SAAS0uK,WACzB1rG,iBAAiB,QAAQ,kBAAM8qf,EAAUlvjB,MAAW,GAGpDiU,WAAWjU,EAAU,KAmBZ,EAAS,SAACuujB,EAA0Bnjc,GAG/CA,EAAOA,GAAQ,GAKf,IAAMshc,EAAS,EAAW,QACpB+B,EAAShC,EAAa8B,EAAU7B,EAAQthc,EAAKuhc,kBAEnD,GAAU,WACR,IAAMG,EAAW,OAAAC,EAAA,KAEjB,GAAID,EAAU,CAWZ,GANAJ,EAAO51lB,MAAQqB,KAAKC,IAAI00lB,EAASqC,cAAgB,IAAsB,GAMnEzC,EAAO51lB,MAAQ,GAAK41lB,EAAO51lB,MAAQg3lB,YAAY5yiB,MAAO,OAE1DwxiB,EAAO3nlB,QAAU,CAAC+nlB,GAElB2B,GAAO,QRWPjmO,EAA6E,GAC7E3mH,EAA6D,GAe5D,SAASutV,EACdpvjB,GAEwB,IADxBqvjB,EACwB,wDACxB,OAAOC,EAAkB,MAAOtvjB,EAAUuvjB,EAAenD,EAAciD,GAUlE,SAASG,EACdxvjB,GAEwB,IADxBqvjB,EACwB,wDACxB,OAAOC,EAAkB,MAAOtvjB,EAAUyvjB,EAAenD,EAAc+C,GAMlE,SAASK,EAA8B1vjB,GAC5C,OAAOsvjB,EAAkB,OAAQtvjB,EAAU2vjB,EAAgBpD,GAOtD,SAASqD,EAA6B5vjB,GAC3C,OAAOsvjB,EAAkB,MAAOtvjB,EAAU6vjB,EAAexD,GAOpD,SAASyD,EACd9vjB,GAEA,OAAOsvjB,EAAkB,MAAOtvjB,EAAU+vjB,EAAevD,GAiBpD,SAASwD,EACd10lB,EACA0kC,GASA,OAPAyoV,EAAWntX,EAAM0kC,GAEZ6hO,EAAavmQ,MAoGpB,SAAuCA,GACrC,IAAM8rC,EAAmC,GAG5B,UAAT9rC,IACF8rC,EAAQonjB,kBAAoB,GAG9B,EACElzlB,GACA,SAAAyJ,GACE6jX,EAAgBttX,EAAM,CAAEyJ,cAE1BqiC,GAhHA6ojB,CAA8B30lB,GAC9BumQ,EAAavmQ,IAAQ,GAGhB40lB,EAAmB50lB,EAAM0kC,GAIlC,SAAS4oV,EAAgBttX,EAA6B86C,GACpD,IAAMyyU,EAAeL,EAASltX,GAE9B,GAAKutX,GAAiBA,EAAa5rX,OAAnC,CAHyE,oBAOnD4rX,GAPmD,IAOzE,2BAAoC,KAAzBx0K,EAAyB,QAClC,IACEA,EAAQj+J,GACR,MAAO5yC,GACP,KACE44I,EAAA,EAAO7yI,MAAP,iEAC4DjO,EAD5D,mBAC2E,YAAgB+4M,GAD3F,YAEE7wM,KAdiE,gCAoB3E,SAAS+rlB,IACP,OSvKmB,SACnBhB,GAE8B,IAE1BE,EAHJrnjB,EAC8B,uDADY,GAEpCsljB,EAAS,EAAW,MAAO,GAG7ByD,EAAe,EACfC,EAAqC,GAGnC1B,EAAgB,SAAC3plB,GACrBA,EAAQ+C,SAAQ,SAAAzJ,GAEd,IAAKA,EAAMgylB,eAAgB,CACzB,IAAMC,EAAoBF,EAAe,GACnCG,EAAmBH,EAAeA,EAAenzlB,OAAS,GAM9DkzlB,GAC0B,IAA1BC,EAAenzlB,QACfoB,EAAMy8H,UAAYy1d,EAAiBz1d,UAAY,KAC/Cz8H,EAAMy8H,UAAYw1d,EAAkBx1d,UAAY,KAEhDq1d,GAAgB9xlB,EAAMvH,MACtBs5lB,EAAe5olB,KAAKnJ,KAEpB8xlB,EAAe9xlB,EAAMvH,MACrBs5lB,EAAiB,CAAC/xlB,IAKhB8xlB,EAAezD,EAAO51lB,QACxB41lB,EAAO51lB,MAAQq5lB,EACfzD,EAAO3nlB,QAAUqrlB,EACb3B,GACFA,UAOJnB,EAAK,EAAQ,eAAgBoB,GACnC,GAAIpB,EAAI,CACNmB,EAAShC,EAAa8B,EAAU7B,EAAQtljB,EAAQuljB,kBAEhD,IAAM6D,EAAgB,WACpB9B,EAAcpB,EAAG0B,eACjBP,GAAO,IAKT,OAFA,OAAAM,EAAA,GAASyB,GAEFA,GT6GF,EACL,SAAA9D,GACE9jO,EAAgB,MAAO,CACrB8jO,WAEFN,EAAeM,IAEjB,CAAEC,kBAAkB,IAIxB,SAASkD,IACP,OU9LmB,SAACtB,GACpB,IAGIE,EAHEgC,EAAoB,OAAAC,EAAA,KACpBhE,EAAS,EAAW,OAIpBiE,EAAc,SAACtylB,GAEfA,EAAMy8H,UAAY21d,EAAkBG,kBACtClE,EAAO51lB,MAAQuH,EAAMwylB,gBAAkBxylB,EAAMy8H,UAC7C4xd,EAAO3nlB,QAAQyC,KAAKnJ,GACpBowlB,GAAO,KAILC,EAAgB,SAAC3plB,GACpBA,EAAqC+C,QAAQ6olB,IAG1CrD,EAAK,EAAQ,cAAeoB,GAClCD,EAAShC,EAAa8B,EAAU7B,GAE5BY,GACF,OAAAyB,EAAA,IAAS,WACPL,EAAcpB,EAAG0B,eACjB1B,EAAG/3Y,gBACF,GVoKE,EAAM,SAAAm3Y,GACX9jO,EAAgB,MAAO,CACrB8jO,WAEFL,EAAeK,KAInB,SAAS+C,IACP,OOtMmB,SAAClB,GACpB,IAEIE,EAFEgC,EAAoB,OAAAC,EAAA,KACpBhE,EAAS,EAAW,OAGpBgC,EAAgB,SAAC3plB,GACrB,IAAM+rlB,EAAY/rlB,EAAQA,EAAQ9H,OAAS,GAC3C,GAAI6zlB,EAAW,CAKb,IAAMh6lB,EAAQqB,KAAKC,IAAI04lB,EAAUh2d,UAAY,IAAsB,GAG/DhkI,EAAQ25lB,EAAkBG,kBAC5BlE,EAAO51lB,MAAQA,EACf41lB,EAAO3nlB,QAAU,CAAC+rlB,GAClBrC,OAKAnB,EAAK,EAAQ,2BAA4BoB,GAE/C,GAAIpB,EAAI,CACNmB,EAAShC,EAAa8B,EAAU7B,GAEhC,IAAM8D,EAAgB,WACfvB,EAAkBvC,EAAOrwjB,MAC5BqyjB,EAAcpB,EAAG0B,eACjB1B,EAAG/3Y,aACH05Y,EAAkBvC,EAAOrwjB,KAAM,EAC/BoyjB,GAAO,KAeX,MARA,CAAC,UAAW,SAAS3mlB,SAAQ,SAAAxM,GACvB,IAAO8lC,UACTgjE,iBAAiB9oG,EAAMk1lB,EAAe,CAAEp9Z,MAAM,EAAMy5G,SAAS,OAIjE,OAAAkiT,EAAA,GAASyB,GAAe,GAEjBA,GPsJF,EAAM,SAAA9D,GACX9jO,EAAgB,MAAO,CACrB8jO,WAEFJ,EAAeI,KAInB,SAASiD,IACP,OAAO,GAAO,SAAAjD,GACZ9jO,EAAgB,OAAQ,CACtB8jO,WAEFH,EAAgBG,KAIpB,SAASqD,IACP,OAAO,GAAM,SAAArD,GACX9jO,EAAgB,MAAO,CACrB8jO,WAEFF,EAAeE,KAInB,SAAS4C,EACPh0lB,EACA0kC,EACA2oV,EACA1gC,GAEwB,IAGpBuoQ,EAJJnB,EACwB,wDAcxB,OAbA5mO,EAAWntX,EAAM0kC,GAIZ6hO,EAAavmQ,KAChBk1lB,EAAgB7nO,IAChB9mH,EAAavmQ,IAAQ,GAGnB2sV,GACFjoT,EAAS,CAAE0sjB,OAAQzkQ,IAGdioQ,EAAmB50lB,EAAM0kC,EAAUqvjB,EAAiBmB,OAAgBt5lB,GAoB7E,SAASuxX,EAAWntX,EAA6B+4M,GAC/Cm0K,EAASltX,GAAQktX,EAASltX,IAAS,GAClCktX,EAASltX,GAAsCkM,KAAK6sM,GAIvD,SAAS67Y,EACP50lB,EACA0kC,EACAwwjB,GAEA,OAAO,WACDA,GACFA,IAGF,IAAM3nO,EAAeL,EAASltX,GAE9B,GAAKutX,EAAL,CAIA,IAAMtxX,EAAQsxX,EAAajtW,QAAQokB,IACpB,IAAXzoC,GACFsxX,EAAar+W,OAAOjT,EAAO,O,mGW5PlB8+E,iBAvDA,SAACC,GAAD,MAA+B,CAC5Cy6gB,YAAa,CACX75gB,QAASq4f,KAEXyhB,iBAAkB,CAChB5zd,KAAM,QACN1mD,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,OAgDZW,EA3CqC,SAAC/wC,GACnD,IACE5D,EAKE4D,EALF5D,SACAuvjB,EAIE3rjB,EAJF2rjB,UACAjpM,EAGE1iX,EAHF0iX,QACA1zU,EAEEhvC,EAFFgvC,QACA48gB,EACE5rjB,EADF4rjB,OAGIC,EACJ,cAAC,IAAD,yBACEn8gB,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVkB,GAAI,IACAi7gB,GALN,IAMEz8gB,UAAWF,EAAQy8gB,YANrB,SAQE,cAAC,IAAD,CACE1ke,UAAW,EACX/3C,QAAS,CACP3hE,KAAM2hE,EAAQ08gB,kBAEhBt6e,MAAK,eACAw6e,EAAS,CAAC9zd,KAAM,QAAU,IANjC,SASG17F,OAKP,OAAKsmX,EAKH,cAAC,IAAD,CAASA,QAASA,EAAlB,SACGmpM,IALIA,M,0bCQEC,EAA2B,qBAC3BC,EAAkC,2BAEzCC,EAA2B,SAACx6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,sCAA6BxqF,IAC/F87e,EAAwB,SAACz6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,mCAA0BxqF,IAmCzF+7e,E,4MACGpvjB,MAAQ,CACbqvjB,iBAAkB,KAClBC,oBAAqB,I,EAyBhBC,cAAgB,WAAO,IAAD,IAC3B,EAQI,EAAKrsjB,MAPPsqU,EADF,EACEA,YACAvyC,EAFF,EAEEA,iBACAD,EAHF,EAGEA,cACAw0R,EAJF,EAIEA,qBACAC,EALF,EAKEA,eACAt7e,EANF,EAMEA,WANF,EAOE6lJ,WAGeg1V,GACfxhP,EAAY,GAAIgiP,GAElBv0R,EAAiBw0R,GACjBz0R,EAAcy0R,EAAD,OAAiBt7e,QAAjB,IAAiBA,GAAjB,UAAiBA,EAAYv6F,MAAM,CAAC,QAAS,cAA7C,iBAAiB,EAAoC5X,KAAI,SAACmwH,GAAD,OAAWA,EAAMl4F,aAA1E,aAAiB,EAA8Dxf,KAAK,O,EAG5FkhT,aAAe,SAACh4N,GAAD,OAAU,WAC9B,EAAKiY,SAAS,CACZ8ze,eAAgB/rf,M,EAKb2xN,SAAW,SAACnxT,GACjB,MAII,EAAK++B,MAHP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBACAskP,EAHF,EAGEA,uBAGF,GAAIxrlB,EAAOpP,KAAM,CACf,IA+CMm3b,EA/CiB/nb,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAMptD,EAAaotD,EAAI7gQ,MAAM,CAAC,2CAAwB,OAChDk8H,EAAgB2kI,EAAI7gQ,MAAM,CAAC,QAAS,OACpCw8G,EAAaqkJ,EAAI7gQ,MAAM,CAAC,eAAgB,OACxC6kF,EAASg8K,EAAI7gQ,MAAM,CAAC,SAAU,QAEpC,OAAIyzM,QAAJ,IAAIA,OAAJ,EAAIA,EAAYxyN,QACd4/Q,EAAIvxQ,MAAM,CAAC,2CAAwB,MAAOmkN,EAAWrrN,KAAI,SAACy+Z,GAAD,OAAQA,EAAGxmY,OAEpEwgP,EAAIj5J,OAAO,6CAEb,OAAIs0B,QAAJ,IAAIA,OAAJ,EAAIA,EAAej7I,QACjB4/Q,EAAIvxQ,MAAM,CAAC,QAAS,MAAO4sI,EAAc9zI,KAAI,SAACi0I,GAAD,OAAkBA,EAAavhJ,UAE5E+lR,EAAIj5J,OAAO,UAEb,OAAI4U,QAAJ,IAAIA,OAAJ,EAAIA,EAAYv7H,QACd4/Q,EAAIvxQ,MAAM,CAAC,eAAgB,MAAOktH,EAAWp0H,KAAI,SAACouH,GAAD,OAAcA,EAAS17H,UAExE+lR,EAAIj5J,OAAO,iBAEb,OAAI/iB,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ5jG,QACV4/Q,EAAIvxQ,MAAM,CAAC,SAAU,MAAOu1F,EAAOz8F,KAAI,SAACwE,GAAD,OAAOA,EAAE9R,UAEhD+lR,EAAIj5J,OAAO,UAGb,IAAM8qG,EAAemuD,EAAI19Q,IAAI,uCACvB6ylB,EAAuBtjY,GAAgB49I,YAAsB59I,GAC/DsjY,EACFn1U,EAAI/5Q,IAAI,sCAA6BkvlB,GAC5BtjY,GACTmuD,EAAIj5J,OAAO,uCAGb,IAAM6qG,EAAYouD,EAAI19Q,IAAI,oCACpB8ylB,EAAoBxjY,GAAa69I,YAAsB79I,GACzDwjY,EACFp1U,EAAI/5Q,IAAI,mCAA0BmvlB,GACzBxjY,GACTouD,EAAIj5J,OAAO,oCAGbsue,YAA2Br1U,EAAK,iBAChCq1U,YAA2Br1U,EAAK,0BAI/B37P,SAAQ,SAACxhB,GACR,OAAOA,EAAIs0E,QAAQ,IAAI99B,OAAO,eAAM,KAAM,QAE3CnvC,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBACF1M,QAAO,SAAC7P,GAEP,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAuC,OAAhC7iB,EAAMklB,MAAM,CAACtc,EAAI,GAAI,UAG1BilH,EAAU2pU,EAAqBn3b,KACjB,CAAE,IAAOm3b,EAAqB30a,QAC9B,CAAE,IAAO,IAE7B8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,IAER+qV,M,EAIG3iP,gBAAkB,WACvB,MAOI,EAAK9pU,MANPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAqmU,EAHF,EAGEA,uBACAskP,EAJF,EAIEA,uBACA1iP,EALF,EAKEA,aACAjzG,EANF,EAMEA,SAGFr2N,EAASggC,YAAMq2L,GAAYg1V,IAC3B,EAAKpze,SAAS,CACZyze,iBAAkB,OAEpBpiP,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,IAER+qV,K,EAGKI,4BAA8B,SACnCC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAuB,EAAKltjB,MAApBgvC,EAAR,EAAQA,QAASntD,EAAjB,EAAiBA,EACjB,OACE,qCACE,cAAC,IAAD,CACE2tF,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAEirkB,KAEL,eAAC,IAAD,CACEx9gB,WAAW,EACXM,QAAQ,eACRF,MAAM,EACNgB,GAAI,GAJN,UAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAMyolB,EACN39gB,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAEmrkB,GACTjxf,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,gBAMxB,cAAC,IAAD,CACE19O,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM2olB,EACN79gB,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAEqrkB,GACTnxf,MAAO,UACP0T,WAAY,CACVzgC,QAAS,CACP3hE,KAAM2hE,EAAQo+O,uB,wDArNhC,SAA0Bj5M,EAAW4yJ,GAAY,IAAD,IAC9C,EAIIjxQ,KAAKkqC,MAHPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WACA6mN,EAHF,EAGEA,cAGEr3N,GAASA,IAAS0T,EAAU1T,MAC9B3qG,KAAKu2lB,gBAGHp7e,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,GAGhB,IAAMk8e,EAAY,OAAGl8e,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,QAAS,OACjD,IAAgB,OAAZy2kB,QAAY,IAAZA,OAAA,EAAAA,EAAcx1lB,WAAd,UAAyBw8G,EAAUlD,kBAAnC,iBAAyB,EAAsBv6F,MAAM,CAAC,QAAS,cAA/D,aAAyB,EAA8C/e,QAAQ,CAAC,IAAD,EAC3Ey1lB,EAAe,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAcrulB,KAAI,SAACmwH,GAAD,OAAWA,EAAMl4F,aAAtC,aAAG,EAAwCxf,KAAK,KACrEugT,EAAchiU,KAAKkqC,MAAMusjB,eAAgBa,M,oBA8M7C,WAAiB,IAAD,OACd,EAgBIt3lB,KAAKkqC,MAfPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KACAg4N,EAHF,EAGEA,aACA40R,EAJF,EAIEA,YACAl1R,EALF,EAKEA,aACAjlM,EANF,EAMEA,WACA0f,EAPF,EAOEA,cACA05c,EARF,EAQEA,qBACAhiP,EATF,EASEA,YACAc,EAVF,EAUEA,UACAkiP,EAXF,EAWEA,gCACA56R,EAZF,EAYEA,YACA/C,EAbF,EAaEA,YACA74D,EAdF,EAcEA,SACAj1O,EAfF,EAeEA,EAGI0rkB,EAAgBz2V,IAAag1V,EAG7B0B,EAAgBD,EAClBF,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GACzB,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GACpCA,EAAajwlB,IAAI,KAAMs4F,GACvB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAG5C,OAAO8yB,EAAI9sI,KAAKmyQ,KACftmQ,kBACDA,iBACJ,OACE,cAAC,WAAD,UACE,cAAC,IAAD,CACEmhE,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,aASH/F,GAAe/C,IAAgB49R,GAChCz3lB,KAAK+2lB,4BACH,2CACA,mBAAoB,4CACpB,oBAAqB,8CAMvB/1V,IAAai1V,GACbj2lB,KAAK+2lB,4BACH,gDACA,yBAA0B,wDAC1B,0BAA2B,4DAI/B,eAAC,IAAD,CACEn9gB,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACE+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,yCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,WACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,6CACfigB,QAAS8wG,EAAcv+H,OACvBsjV,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,qCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,kBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,yCACfigB,QAASwrjB,EAAkC,GAAH,OAAQp6d,QAAR,IAAQA,OAAR,EAAQA,EAAY7+G,OAC5D6oF,QAASowf,EACT31P,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAAUA,EAAO1/E,OAAS0/E,EAAO9kH,MAAS,MACpE88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO1/E,OAAS0/E,EAAO9kH,UAExEk+G,iBAAkB,CAChBC,WAAW,UASnB49e,GAAiB,qCACf,cAAC,IAAD,CACE/9e,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,0CACN07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,0CACN07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,uCACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,QACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB05e,GAC9B78gB,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,uCACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,MACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB05e,GAC9B78gB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,8CACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,0CACfigB,QAAS0rjB,EAAcn5kB,OACvBkkG,WAAYziH,KAAKgnC,MAAMsvjB,oBACvBz0P,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,SACtD8mH,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAC3B,UAAXA,GACFipP,EAAYv+V,EAAKuglB,IAGJ,UAAXjre,GAAkC,UAAXA,GAAsB4b,IAC/C,EAAKvkB,SAAS,CAAE0ze,oBAAqBrglB,MAI3C2jG,iBAAkB,CAChBC,WAAW,aAUzB,cAAC,IAAD,CACIH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIGnqG,EAAE,mCAEL,cAAC,IAAD,CACIytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJR,SAME,cAAC,IAAD,CACIhB,MAAM,EACNgB,GAAI,GAFR,SAIE,cAAC,QAAD,CACIpsE,KAAK,YACL8qE,UAAWi/O,IACXruR,MAAO,CACLwkV,qBAAsB,CACpBpzQ,MAAO,CAAEyZ,cAAe,eAE1Bpb,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,uCACfigB,QAAS2hS,mBAAiBpvT,OAAOhT,QAAO,SAAAk6F,GAAM,OAAkB,IAAdA,EAAOxkE,IAA0B,IAAdwkE,EAAOxkE,MAC5E4gU,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,OAAIA,EAASz0F,EAAEy0F,EAAOt/E,WAAa,MACzDs3R,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaz0F,EAAEy0F,EAAOt/E,eAE1D04E,iBAAkB,CAChBC,WAAW,eA3WpBy7P,W,GAtRgB7wU,iBA4tBlBwwC,4BACbgG,aA9Ea,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,oBACPlH,SAAU,QAEZ8sP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCqxF,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,cAiDpB,CAAC6H,WAAW,IAC/BnQ,mBA7CsB,SAAC73E,EAAYyF,GAEnC,IAAMgxE,EAA4B,MAArBhxE,EAASu0N,SAAmBv0N,EAASu0N,SAAWg1V,EACvDS,EAAiBhqjB,EAASgqjB,eAEhC,OAAO,aACLh5e,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACb8b,WAAYq5d,EAAiBt3P,cAA4Bl/F,cACzDnjH,cAAe25c,EAAiB53P,cAA+B7+F,cAC/Dw2V,qBAAsBptiB,eACtBwzQ,YAAax1Q,cACbyyQ,YAAaxyQ,cACbmwiB,gCAAiCt3V,eARhCptN,CASA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLq3R,cAAe,SAACy0R,EAAyBa,GAErC3sjB,EADE8rjB,EACO,IAAI/hR,IAEJ,IAAIt3P,KAA+B,CAAEk6gB,sBAGlDr1R,iBAAkB,SAACw0R,GAEf9rjB,EADE8rjB,EACO,IAAI1iR,IAEJ,IAAIv2P,OAGjBg3R,YAAa,SAACh3O,EAAoBlxE,GAChC3hB,EAAS,IAAImwB,KAAiC,CAAC0iE,aAAYlxE,eAE7D3hB,eAOF48R,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBARH81B,CASbmhhB,I,6BC/0BF,oHAoJIwB,EAA4B,CAC9B3xd,MAAOvR,IAASwR,eAChBC,KAAMzR,IAAS0R,eAMb4vL,EAASvxR,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAIo8lB,EAAgB3tjB,EAAM2tjB,cACtBvxjB,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClB0+gB,EAAwB5tjB,EAAMguY,qBAC9BA,OAAiD,IAA1B4/K,GAA2CA,EAClEC,EAAwB7tjB,EAAMiuY,qBAC9BA,OAAiD,IAA1B4/K,GAA2CA,EAClEC,EAAoB9tjB,EAAM0oZ,WAC1BA,OAAmC,IAAtBolK,GAAuCA,EACpD/zU,EAAmB/5O,EAAM2vE,UACzBA,OAAiC,IAArBoqK,GAAsCA,EAClDg0U,EAAkB/tjB,EAAMoyC,SACxBA,OAA+B,IAApB27gB,EAA6B,KAAOA,EAC/CC,EAAkBhujB,EAAMgujB,gBACxBvzd,EAAUz6F,EAAMy6F,QAChBwzd,EAAUjujB,EAAMiujB,QAChBh6L,EAAYj0X,EAAMi0X,UAClBi6L,EAAalujB,EAAMkujB,WACnBC,EAAkBnujB,EAAMmujB,gBACxBj6L,EAASl0X,EAAMk0X,OACfiwB,EAAWnkZ,EAAMmkZ,SACjBiqK,EAAYpujB,EAAMoujB,UAClB3tf,EAAOzgE,EAAMygE,KACb4tf,EAAwBrujB,EAAMk3R,eAC9BA,OAA2C,IAA1Bm3R,EAAmC1me,IAAQ0me,EAC5DC,EAAoBtujB,EAAM4pF,WAC1BA,OAAmC,IAAtB0ke,EAA+B,GAAKA,EACjDC,EAAgBvujB,EAAMqvP,OACtBA,OAA2B,IAAlBk/T,EAA2B,QAAUA,EAC9C9yd,EAAwBz7F,EAAM27F,oBAC9BA,OAAgD,IAA1BF,EAAmCm5P,IAAOn5P,EAChEI,EAAwB77F,EAAM87F,mBAC9BA,OAA+C,IAA1BD,EAAmC6xd,EAA4B7xd,EACpFM,EAAkBn8F,EAAMm8F,gBACxBqyd,EAAkBxujB,EAAM,oBACxByujB,EAAiBzujB,EAAM,mBACvBvpB,EAAQu8B,YAAyBhT,EAAO,CAAC,gBAAiB,WAAY,UAAW,YAAa,uBAAwB,uBAAwB,aAAc,YAAa,WAAY,kBAAmB,UAAW,UAAW,YAAa,aAAc,kBAAmB,SAAU,WAAY,YAAa,OAAQ,iBAAkB,aAAc,SAAU,sBAAuB,qBAAsB,kBAAmB,mBAAoB,oBAErb0ujB,EAAkBn0jB,IAAMyG,SA6B5B,OAAOzG,IAAMwB,cAAcmsV,IAAOtoV,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9By/gB,kBAAmBC,IACnBjB,cAAe/tjB,YAAS,CACtBk8F,mBAAoBA,GACnB6xd,GACHkB,sBAAsB,EACtB7gL,qBAAsBA,EACtBC,qBAAsBA,EACtBkgL,gBAAiBA,EACjB1zd,QAASA,EACTh6B,KAAMA,EACNlvG,IAAKA,GACJklB,GAAQ8jB,IAAMwB,cAAc4/F,EAAqB/7F,YAAS,CAC3DkvjB,QAAQ,EACRhxd,GAAIr9B,EACJlG,QAASuhC,EACTmyd,QAASA,EACTC,WAAYA,EACZj6L,UAAWA,EACXC,OAAQA,EACRk6L,UAAWA,EACXjqK,SAAUA,EACV3sY,KAAM,qBACL2kF,GAAkB5hG,IAAMwB,cAAc,MAAO,CAC9CmzC,UAAW2B,kBAAK7B,EAAQM,UAAWN,EAAQ,SAAS5tE,OAAOk5H,YAAW+0J,MACtE10K,QAjDwB,SAA6BsiB,GAGjDA,EAAMn6G,SAAWm6G,EAAMziB,eAKvByiB,EAAMn6G,SAAW4rkB,EAAgB9wjB,UAIrC8wjB,EAAgB9wjB,QAAU,KAEtBowjB,GACFA,EAAgB/wd,IAGb+wS,GAAwBvzS,GAC3BA,EAAQwC,EAAO,mBA+BjBq6L,YAtDoB,SAAyBr6L,GAC7Cyxd,EAAgB9wjB,QAAUq/F,EAAMn6G,SAsD/ByX,IAAMwB,cAAcm7R,EAAgBt3R,YAAS,CAC9CmnF,UAAW,GACXvvE,KAAM,SACN,mBAAoBg3iB,EACpB,kBAAmBC,GAClB7ke,EAAY,CACb16C,UAAW2B,kBAAK7B,EAAQ64C,MAAO74C,EAAQ,cAAc5tE,OAAOk5H,YAAW+0J,KAAWrgN,EAAQ,aAAa5tE,OAAOk5H,YAAW31H,OAAOytE,MAAcw3C,EAAW16C,UAAWw5W,GAAc15W,EAAQ+/gB,gBAAiBp/e,GAAa3gC,EAAQgghB,kBAC9N5yjB,SAwJS20C,iBA7YK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ,eAAgB,CAEd0lG,SAAU,wBAKdk8e,YAAa,CACX/9gB,QAAS,OACTM,eAAgB,SAChBzC,WAAY,UAIdmghB,WAAY,CACV7xS,UAAW,OACXt9K,UAAW,SACXhd,UAAW,SACX,UAAW,CACTtxE,QAAS,KACTy/B,QAAS,eACTgtR,cAAe,SACf72O,OAAQ,OACRj2C,MAAO,MAKX9B,UAAW,CACT+3C,OAAQ,OACR,eAAgB,CACdA,OAAQ,QAGVo3O,QAAS,GAIX52O,MAAO,CACLx2C,OAAQ,GACR0hC,SAAU,WACVsqM,UAAW,OAEX,eAAgB,CACdA,UAAW,UACX1/L,UAAW,SAKfwxe,iBAAkB,CAChBj+gB,QAAS,OACTK,cAAe,SACfq7L,UAAW,qBAIbwiV,gBAAiB,CACfl+gB,QAAS,eACTgtR,cAAe,SACfn7O,UAAW,QAKbsse,gBAAiB,CACfj9gB,SAAU,qBAIZk9gB,aAAc,CACZl9gB,SAAUv/E,KAAKC,IAAIk+E,EAAMc,YAAY7wE,OAAOyvE,GAAI,KAChD,oBAAqB5F,YAAgB,GAAIkG,EAAMc,YAAYy9gB,KAAK18lB,KAAKC,IAAIk+E,EAAMc,YAAY7wE,OAAOyvE,GAAI,KAAO,IAAS,CACpH0B,SAAU,uBAKdo9gB,aAAc,CACZp9gB,SAAUpB,EAAMc,YAAY7wE,OAAOivE,GACnC,oBAAqBpF,YAAgB,GAAIkG,EAAMc,YAAYy9gB,KAAKv+gB,EAAMc,YAAY7wE,OAAOivE,GAAK,IAAS,CACrGkC,SAAU,uBAKdq9gB,aAAc,CACZr9gB,SAAUpB,EAAMc,YAAY7wE,OAAO+uE,GACnC,oBAAqBlF,YAAgB,GAAIkG,EAAMc,YAAYy9gB,KAAKv+gB,EAAMc,YAAY7wE,OAAO+uE,GAAK,IAAS,CACrGoC,SAAU,uBAKds9gB,aAAc,CACZt9gB,SAAUpB,EAAMc,YAAY7wE,OAAO6uE,GACnC,oBAAqBhF,YAAgB,GAAIkG,EAAMc,YAAYy9gB,KAAKv+gB,EAAMc,YAAY7wE,OAAO6uE,GAAK,IAAS,CACrGsC,SAAU,uBAKdu9gB,aAAc,CACZv9gB,SAAUpB,EAAMc,YAAY7wE,OAAOuvE,GACnC,oBAAqB1F,YAAgB,GAAIkG,EAAMc,YAAYy9gB,KAAKv+gB,EAAMc,YAAY7wE,OAAOuvE,GAAK,IAAS,CACrG4B,SAAU,uBAKd48gB,eAAgB,CACd59gB,MAAO,qBAIT29gB,gBAAiB,CACf19gB,OAAQ,EACRD,MAAO,OACPgB,SAAU,OACVi1C,OAAQ,OACRulJ,UAAW,OACXrvJ,aAAc,EACd,oBAAqB,CACnBlsC,OAAQ,EACRe,SAAU,YA6QgB,CAChC9tE,KAAM,aADOysE,CAEZ+6O,I,6BC9ZH,oDA6BIC,EAAgBxxR,IAAM8E,YAAW,SAAuBW,EAAOzuC,GACjE,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClB0ghB,EAAkB5vjB,EAAM6vjB,SACxBA,OAA+B,IAApBD,GAAqCA,EAChDn5kB,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,aAErE,OAAOzF,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW2ghB,GAAY7ghB,EAAQ6ghB,UAC7Dt+lB,IAAKA,GACJklB,OAwBUs6D,iBAzDK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJyqH,KAAM,WACN8iO,wBAAyB,QAEzBv9C,UAAW,OACXzrO,QAAS,WACT,gBAAiB,CAEfm2C,WAAY,KAKhB8ne,SAAU,CACRj+gB,QAAS,YACTqgD,UAAW,aAAa7wH,OAAO4vE,EAAM+pC,QAAQsqP,SAC7C3nP,aAAc,aAAat8G,OAAO4vE,EAAM+pC,QAAQsqP,aAsCpB,CAChC/gW,KAAM,oBADOysE,CAEZg7O,I,6BCjEH,yKAYW+jS,EAAY,SAAmBr+gB,EAAYL,GACpD,IAAI2+gB,IAAYv2lB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,KAAmBA,UAAU,GAE/E,OAAIu2lB,EACKC,IAAe15kB,QAAQm7D,IAAeu+gB,IAAe15kB,QAAQ86D,GAG/D4+gB,IAAe15kB,QAAQm7D,GAAcu+gB,IAAe15kB,QAAQ86D,IAG1Dq3C,EAAc,SAAqBh3C,EAAYL,GACxD,IAAI2+gB,IAAYv2lB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,KAAmBA,UAAU,GAE/E,OAAIu2lB,EACKC,IAAe15kB,QAAQ86D,IAAU4+gB,IAAe15kB,QAAQm7D,GAG1Du+gB,IAAe15kB,QAAQ86D,GAAS4+gB,IAAe15kB,QAAQm7D,IAE5D+xS,EAAsC,qBAAXh/V,OAAyB+V,IAAM0B,UAAY1B,IAAMyB,gBAgGjEi0jB,IA9FC,WACd,IAAInujB,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAClF,OAAO,SAAUi2C,GACf,IAAIygjB,EAAqBpujB,EAAQgjF,UAC7Bqre,OAAyC,IAAvBD,GAAwCA,EAC1DE,EAAiBtujB,EAAQuujB,MACzBA,OAA2B,IAAnBD,GAAoCA,EAC5CE,EAAqBxujB,EAAQyujB,aAEjC,SAASC,EAAUxwjB,GACjB,IAAIywjB,EAAej8d,cACfxjD,EAAQhxC,EAAMgxC,OAASy/gB,EAEvBC,EAAiBC,YAAc,CACjC3/gB,MAAOA,EACP1sE,KAAM,eACN07B,MAAOJ,YAAS,GAAII,KAElBuwjB,EAAeG,EAAeH,aAC9Bn/gB,EAAQs/gB,EAAet/gB,MACvB36D,EAAQu8B,YAAyB09iB,EAAgB,CAAC,eAAgB,UAElE72d,EAAkBt/F,IAAMia,UAAS,GACjCo8iB,EAAe/2d,EAAgB,GAC/Bg3d,EAAkBh3d,EAAgB,GAEtC2pP,GAAkB,WAChBqtO,GAAgB,KACf,IAOH,IAEIC,EAFOr7f,YAAmBzkB,EAAMc,YAAYl6E,MAAMgB,UAE7B6I,QAAO,SAAUk1I,EAAQv8I,GAEhD,IAAIszL,EAAUnnE,YAAcv1C,EAAMc,YAAYO,GAAGj4E,IACjD,OAAQu8I,GAAU+2C,EAAUtzL,EAAMu8I,IACjC,MAECo6c,EAAOnxjB,YAAS,CAClBwxC,MAAOA,IAAUw/gB,GAAgBP,EAAQS,OAAgBl/lB,IAAc2+lB,GAAgBD,GACtFH,EAAkB,CACnBn/gB,MAAOA,GACL,GAAI,GAAIv6D,GAQZ,YAAmB7kB,IAAfm/lB,EAAK3/gB,MACA,KAGF72C,IAAMwB,cAAc0T,EAAWshjB,GA+BxC,OADA9tV,IAAqButV,EAAW/gjB,GACzB+gjB,K,6BC3HX,4CAWIh/J,EAAoBj3Z,IAAM8E,YAAW,SAA2BW,EAAOzuC,GACzE,OAAOgpC,IAAMwB,cAAcuzE,IAAY1vE,YAAS,CAC9CwvC,UAAW,IACXogC,QAAS,QACTzT,MAAO,gBACPxqG,IAAKA,GACJyuC,OAcU+wC,gBA1BK,CAElB1jE,KAAM,CACJ87G,aAAc,KAuBgB,CAChC7kH,KAAM,wBADOysE,CAEZygX,I,kBCjCH,IAAIxqR,EAAW91K,EAAQ,MACnBs+K,EAAYt+K,EAAQ,MACpBsG,EAAUtG,EAAQ,KAClBuiL,EAAWviL,EAAQ,KACnBgsL,EAAehsL,EAAQ,MACvBmjL,EAAQnjL,EAAQ,KAChB6F,EAAW7F,EAAQ,MA0BvBF,EAAOC,QAPP,SAAgBO,GACd,OAAIgG,EAAQhG,GACHw1K,EAASx1K,EAAO6iL,GAElBZ,EAASjiL,GAAS,CAACA,GAASg+K,EAAU0N,EAAanmL,EAASvF,O,gBC7BrE,IAAIw/lB,EAA+B,EAAQ,KAqB3ChgmB,EAAOC,QAnBP,SAAkC8xB,EAAQu4K,GACxC,GAAc,MAAVv4K,EAAgB,MAAO,GAC3B,IACI3oB,EAAKtB,EADLgqB,EAASkukB,EAA6BjukB,EAAQu4K,GAGlD,GAAIpnM,OAAOkgB,sBAAuB,CAChC,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAEpD,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IACvCsB,EAAMmhM,EAAiBziM,GACnBwiM,EAAShlL,QAAQlc,IAAQ,GACxBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KACxD0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAIzB,OAAO0oB,GAIT9xB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,qGChB5Dy+Y,E,OAFG,O,SAEHA,K,6BAAAA,M,KAIL,IAAMC,EAGX,WACSl0jB,GACN,yBADMA,UACP,KAJchnC,KAAOi7lB,EAAiBE,e,wNC8BpCxtN,E,4MACG3mQ,YAAc,WACnB,MAGI,EAAKh9F,MAFPoxjB,EADF,EACEA,gBACAp0d,EAFF,EAEEA,YAGFA,GAAeA,IAEfo0d,GAAgB,I,4CAIlB,WACE,MAQIt7lB,KAAKkqC,MAPP5D,EADF,EACEA,SACAqkE,EAFF,EAEEA,KAIAruB,GANF,EAGEgzC,SAHF,EAIE4X,YAJF,EAKEo0d,gBALF,EAMEh/gB,UACGh4D,EAPL,iBAUA,OACE,cAAC,IAAD,yBACEqmF,KAAMA,EACNg6B,QAAS3kI,KAAKknI,YACd5qD,SAAUA,GACNh4D,GAJN,aAMGgiB,S,GA/BqB7B,aA2DfwwC,sBACb4pC,mBAvBsB,SAACu7Q,EAAoBC,GAC3C,IACE/qQ,EACE+qQ,EADF/qQ,SAEF,OAAOx8E,YAAyB,CAC9B63D,KAAMmzG,YAA2BxuF,IAD5Bx8E,CAEJsnV,MAGsB,SAACzvV,EAAmC0vV,GAQ7D,MAAO,CACLihO,gBARsB,SAAC3wf,GACvBhgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIo5V,EAAiB/qQ,SACrB3kB,eASS11B,CAEb44T,I,6BCtGF,kCAsDen3Q,IAzCS,SAACxsF,GACvB,IAAQne,EAAM+xB,YAAe,gBAArB/xB,EAGNyqG,EACEtsF,EADFssF,UAGM+ke,EAAiB,WACrB,OAAQ/ke,GACN,IAAK,uBACH,OAAOzqG,EAAE,2BACX,IAAK,mBACH,OAAOA,EAAE,2BACX,IAAK,WACH,OAAOA,EAAE,4BACX,QACE,OAAOA,EAAE,0BATQ,GAajByvkB,EAAiB,WACrB,OAAQhle,GACN,IAAK,uBACH,MAAO,UACT,IAAK,mBACH,MAAO,UACT,IAAK,WACH,MAAO,UACT,QACE,MAAO,WATU,GAazB,OACE,cAAC,IAAD,CACElb,MAAO,CAAEmM,aAAc,MAAOsT,WAAYyge,GAC1C16jB,MAAOy6jB,M,6BCjDE,SAASrjU,EAAgB/xR,EAAGsvE,GAMzC,OALAyiN,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAErE,OADAtvE,EAAEjI,UAAYu3E,EACPtvE,GAGF+xR,EAAgB/xR,EAAGsvE,GAN5B,mC,gBCAA,IAAIkpG,EAAavjL,EAAQ,KACrBu8K,EAAWv8K,EAAQ,KAmCvBF,EAAOC,QAVP,SAAoBO,GAClB,IAAKi8K,EAASj8K,GACZ,OAAO,EAIT,IAAIw/K,EAAMyD,EAAWjjL,GACrB,MA5BY,qBA4BLw/K,GA3BI,8BA2BcA,GA7BZ,0BA6B6BA,GA1B7B,kBA0BgDA,I,6BCjChD,SAASiqP,EAAiB9+X,GACvC,IAAI6D,EAAQ7D,EAAK6D,MACbszK,EAASn3K,EAAKm3K,OACdwnN,EAAiB3+X,EAAK2+X,eAC1B,OAAOxnN,EAAO7xM,QAAO,SAAUutI,EAAKlyG,GASlC,OARAkyG,EAAIlyG,GAASkD,EAAMlD,GAEfg+X,GAC0B,qBAAjB96X,EAAMlD,KACfkyG,EAAIlyG,GAASg+X,EAAeh+X,IAIzBkyG,IACN,IAdL,mC,iMC6LejkE,sBACbgG,aAzIa,SAACC,GAAD,OAAkB2zL,YAAa,CAC5CnlI,OAAQ,CACNzjC,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5B/N,WAAW,2BAAD,OAA6B7/C,EAAM+pC,QAAQ+d,UAAU,KAArD,gBAAiE9nD,EAAM+pC,QAAQ+d,UAAU,KAAzF,UACV/V,UAAW,SACXiF,cAAeh3C,EAAMZ,QAAQ,GAC7Bs5C,UAAW,IAEbuxM,KAAM,CACJ7oN,UAAWphC,EAAMZ,SAAS,IAE5BmhhB,SAAU,CACRx1f,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B4yd,SAAU,CACRp/e,UAAWphC,EAAMZ,WAEnB8lU,MAAO,CACL3pR,WAAY,SACZjV,YAAatmC,EAAMZ,QAAQ,GAC3BgiC,UAAWphC,EAAMZ,QAAQ,IAE3Bs3C,KAAM,CACJ1J,WAAYhtC,EAAMZ,QAAQ,UAiHfrF,EA7G2C,SAAC,GAQpD,IAPLiE,EAOI,EAPJA,QACAm1P,EAMI,EANJA,WACAC,EAKI,EALJA,UACApkN,EAII,EAJJA,MAII,IAHJwkN,qBAGI,MAHY,KAGZ,MAFJ2xE,wBAEI,SADJn5Q,EACI,EADJA,YAGEgjM,EAGEmE,EAHFnE,kBACAG,EAEEgE,EAFFhE,SACAsxR,EACEttR,EADFstR,YAGF,EAAwBl3jB,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KAyBA,OACE,eAAC,IAAD,CACEn3C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAME,cAAC,IAAD,CACEmwB,KAAMA,EACN4lB,QAASA,EACTmjM,OAAQwW,GAAqBA,EAAkBC,MAC/CxX,SAAUuX,GAAqBA,EAAkB0xR,UAEnD,cAAC,IAAD,CACEpihB,WAAW,EACXM,QAAQ,WAFV,SAIE,uBAAMV,UAAWF,EAAQknU,MAAzB,UACIC,EAAmB,KAAO,cAAC,IAAD,IAC5B,cAAC,IAAD,CACEx7R,QAASqiB,EACTjhC,MAAM,UACNlqG,KAAK,QACLq9E,UAAWF,EAAQ04C,KAJrB,SAME,cAAC,IAAD,WAIN,cAAC,IAAD,CACEp4C,WAAW,EACXM,QAAQ,SACRwhC,MAAO4uN,GAAqBA,EAAkB0xR,QAAU,CAAEv2e,OAAQ,WAAc,GAHlF,SAnDF6kN,EACI,cAAC,IAAD,CAAShgN,MAAOggN,EAAkB0xR,SAAW,GAA7C,SACE,qBAAK/2e,QAASqlN,EAAkB0xR,QAAU,kBAAMrre,GAAQ,IAAQ,KAAhE,SACE,cAAC,IAAD,CACE/J,IAAK0jN,EAAkBC,MACvB7uP,MAAK,UAAK4uP,EAAkBE,QAAvB,MACL7uP,OAAO,IACPsrC,YAAa,OACbC,aAAa,EACb2kP,gBAAiBvhC,EAAkB2xR,UAAY,CAAEp0e,aAAc,MAAOikP,eAAgB,SAAY,SAIxGrhC,EACI,qBAAK7jN,IAAK6jN,EAAS7jN,IAAK6iB,IAAKghM,EAAShhM,MACtCsyd,EACE,cAAC,IAAD,CAAQvihB,UAAWuihB,EAAY10e,WAA/B,SACG00e,EAAYjka,UAEf,OAuCR,eAAC,IAAD,CAAMl+G,WAAW,EAAMJ,UAAWF,EAAQwihB,SAA1C,UACE,cAAC,IAAD,CAAM9hhB,MAAM,EAAMgB,GAAI,IACtB,cAAC,IAAD,CAAMhB,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,IAAD,CACEqrB,MAAM,UACNyT,QAAQ,KAFV,SAIIwQ,MAGN,cAAC,IAAD,CAAMtwC,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQisP,KAA5C,UAEa,OAATmJ,QAAS,IAATA,OAAA,EAAAA,EAAWzsU,QACP,cAAC,IAAD,CAAmBi6lB,aAAc,cAAC,IAAD,CAAc1ihB,UAAWF,EAAQuihB,WAAlE,SAEIntR,EAAUtlU,KAAI,SAAC4wE,EAAsBz9E,GAAvB,OACZ,cAAC,IAAD,CAAsB+gH,UAAWtjC,EAAKirC,QAASA,QAASjrC,EAAKirC,QAA7D,SACIjrC,EAAK1uD,QADM/uB,QAMrB,UAIV,cAAC,IAAD,CAAMq9E,WAAW,EAAMI,MAAM,EAAME,QAAQ,SAA3C,SACI40P,W,6BCrLV,IAAI/nH,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6PACD,gBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,8PACD,cAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,uFACD,gBAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,0DAyDe9kN,gBAAgB,eAAhBA,EA/CyD,SAACjV,GACvE,IACEne,EAIEme,EAJFne,EACAo6X,EAGEj8W,EAHFi8W,WACAthS,EAEE36E,EAFF26E,QAHF,EAKI36E,EADF6xjB,qBAJF,SAOA,OACE,eAAC,IAAD,CACEzgf,MAAO,CAAEiW,OAAQ,KACjB/3C,WAAW,EACXE,UAAU,SACVc,KAAK,SACLV,QAAQ,SACRb,WAAW,SACXqB,QAAS,EAPX,UASE,eAAC,IAAD,CACEV,MAAM,EADR,UAGE,cAAC,IAAD,UAAa7tD,EAAE,4BACf,cAAC,IAAD,UAAaA,EAAE,8BAGfo6X,GAActhS,GACZ,cAAC,IAAD,CAASqF,MAAO6xe,EAAgBhwkB,EAAE,yCAA2C,GAA7E,SACE,cAAC,IAAD,CACE6tD,MAAM,EADR,SAGE,cAAC,IAAD,CACEigC,WAAW,EACXH,QAAQ,OACRzT,MAAM,UACN4e,QAASA,EACT3H,SAAU6+e,EALZ,SAOG51M,e,yKC1BbzmW,E,cCpBSG,EAAsB,gBDsBtBF,G,MAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,2DAAqH,CACnH7Y,UAGGp0B,mBAGIu5P,EAA8B,kBAAMt5N,YAC/C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iBAAkB6O,qBAgBpE4wP,EAA0B,SAACw4V,GAAD,OAA0BnpjB,YAC/Ds5N,KACA,SAACC,GACC,YAA2BtwQ,IAApBkgmB,EAAgC5vV,EAAeroQ,IAAIpC,OAAOq6lB,SAAoBlgmB,MAI5EmgmB,EAAqC,kBAAMppjB,YACtD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,gCAGlDm4lB,EAAqC,kBAAMrpjB,YACtD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iC,6BEzE/D,0KAAO,IAAMo4lB,EAAK,2BAELC,EAAW,UAAMD,EAAN,gBACXE,EAAa,UAAMF,EAAN,kBACbG,EAAe,UAAMH,EAAN,oBACfI,EAAW,UAAMJ,EAAN,iB,kLCMjB,SAASp+Z,EAASv1K,GAAsC,IAAzBxrB,EAAyB,uDAAX,EAClD,MAAmB,kBAARwrB,GAA4B,IAARxrB,GAGxBwrB,EAAI3mB,QAAU7E,EAFZwrB,EAEF,UAA2B,aAA3B,OAW2B,gBACA,QACA,WACA,UACA,SAEA,MAEA,KAGA,uBACA,MACA,KAGA,wBAgBA,OAfA,QACA,KAEA,QACA,qBAGA,eACA,MACA,wBAEA,MACA,cAGA,EAUA,gBACA,qBACA,SAKA,IAFA,SAEAxlB,EAAA,EAAAA,EAAA,SAAAA,IAAA,CACA,WACA,IAMA,eACA,yBAEA,kBAEA,SACA,wCAIA,iBAWA,WACA,EACA,GAEA,IADA,EACA,wDACA,yBAIA,eACA,YAEA,iBACA,wBAgBA,WACA,GAGA,IAFA,EAEA,uDAFA,GACA,EACA,wDACA,gD,6GCzHrBw5lB,IAVG,SAAC,GAAuD,IAArDl2jB,EAAoD,EAApDA,SAAUkiU,EAA0C,EAA1CA,UAAWt2C,EAA+B,EAA/BA,UAAchoR,EAAiB,iBACvE,OAAO,cAAC,IAAD,2BACCA,GADD,IAEH+7D,MAAOisN,QAAwBp2T,EAC/B0sW,UAAWA,QAAwB1sW,EAHhC,SAKFwqC,O,uICLKsrV,E,iBAAAA,K,sCAAAA,E,mCAAAA,M,KAKL,IAAMe,EAAb,sCACkBzyX,KAAO0xX,EAAuCE,mBAGnDc,EAEX,WACS1rV,GACN,yBADMA,UACP,KAHchnC,KAAO0xX,EAAuCC,kB,6BClBhE,qHAcI4qO,EAAmB,CACrBrpM,SAAU5uS,IACVugT,OAAQ23L,IACRh4U,SAAUi4U,KAuCRzmS,EAAYzxR,IAAM8E,YAAW,SAAmBW,EAAOzuC,GACzD,IAAIkjH,EAAez0E,EAAMy0E,aACrB0mT,EAAmBn7X,EAAMitR,UACzBA,OAAiC,IAArBkuG,GAAsCA,EAClD/+X,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cl0G,EAAerT,EAAMqT,aACrBomO,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDuuJ,EAAehoY,EAAM/7B,MACrBA,OAAyB,IAAjB+ja,GAAkCA,EAC1C/7G,EAAsBjsR,EAAMisR,oBAC5BlyC,EAAmB/5O,EAAM2vE,UACzBA,OAAiC,IAArBoqK,GAAsCA,EAClDp3J,EAAa3iF,EAAM2iF,WACnBulT,EAAcloY,EAAMkoY,YACpBnxY,EAAKiJ,EAAMjJ,GACXyiP,EAAkBx5O,EAAMw5O,gBACxB/pK,EAAazvE,EAAMyvE,WACnBmD,EAAa5yE,EAAM4yE,WACnBykN,EAAWr3R,EAAMq3R,SACjBzgS,EAAQoJ,EAAMpJ,MACd87jB,EAAmB1yjB,EAAMi0T,UACzBA,OAAiC,IAArBy+P,GAAsCA,EAClDpulB,EAAO07B,EAAM17B,KACbk3H,EAASx7F,EAAMw7F,OACflqB,EAAWtxE,EAAMsxE,SACjBzS,EAAU7+D,EAAM6+D,QAChBiiB,EAAc9gF,EAAM8gF,YACpBsnT,EAAkBpoY,EAAM84J,SACxBA,OAA+B,IAApBsvO,GAAqCA,EAChD9tG,EAAOt6R,EAAMs6R,KACb45B,EAAUl0T,EAAMk0T,QAChBy+P,EAAgB3yjB,EAAM61D,OACtBA,OAA2B,IAAlB88f,GAAmCA,EAC5CC,EAAc5yjB,EAAM4yjB,YACpB58lB,EAAOgqC,EAAMhqC,KACbxE,EAAQwuC,EAAMxuC,MACds2J,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,WAAaA,EACnDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,eAAgB,YAAa,WAAY,UAAW,YAAa,QAAS,eAAgB,WAAY,QAAS,sBAAuB,YAAa,aAAc,cAAe,KAAM,kBAAmB,aAAc,aAAc,WAAY,QAAS,YAAa,OAAQ,SAAU,WAAY,UAAW,cAAe,WAAY,OAAQ,UAAW,SAAU,cAAe,OAAQ,QAAS,YAQrb,IAAI6yjB,GAAY,GAEA,aAAZrjf,IACEgqK,GAAqD,qBAA3BA,EAAgB6U,SAC5CwkU,GAAUC,QAAUt5U,EAAgB6U,QAGtCwkU,GAAUj8jB,MAAQA,EAAQ2D,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAMzpP,EAAOkiK,GAAY,SAAWliK,GAGhGi/D,IAEG+8f,GAAgBA,EAAYG,SAC/BF,GAAU97jB,QAAKnlC,GAGjBihmB,GAAU,yBAAsBjhmB,GAGlC,IAAIohmB,GAAerwe,GAAc5rF,EAAK,GAAG31B,OAAO21B,EAAI,qBAAkBnlC,EAClEqhmB,GAAer8jB,GAASG,EAAK,GAAG31B,OAAO21B,EAAI,eAAYnlC,EACvDshmB,GAAiBX,EAAiB/if,GAClC2jf,GAAe54jB,IAAMwB,cAAcm3jB,GAAgBtzjB,YAAS,CAC9D,mBAAoBozjB,GACpBv+e,aAAcA,EACdw4M,UAAWA,EACX55Q,aAAcA,EACds8D,UAAWA,EACXskP,UAAWA,EACX3vV,KAAMA,EACNg2T,KAAMA,EACN45B,QAASA,EACTl+V,KAAMA,EACNxE,MAAOA,EACPulC,GAAIA,EACJsgS,SAAUA,EACV77L,OAAQA,EACRlqB,SAAUA,EACVzS,QAASA,EACTiiB,YAAaA,EACbrR,WAAYA,GACXojf,GAAWjgf,IACd,OAAOr4E,IAAMwB,cAAc66F,IAAah3F,YAAS,CAC/CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9B8jC,SAAUA,EACV/uG,MAAOA,EACP0rG,UAAWA,EACXu4T,YAAaA,EACb32a,IAAKA,EACLunM,SAAUA,EACV/8F,MAAOA,EACPyT,QAASA,GACR/4F,GAAQmgB,GAAS2D,IAAMwB,cAAc2hW,IAAY99V,YAAS,CAC3DirR,QAAS9zR,EACTA,GAAIk8jB,IACHz5U,GAAkB5iP,GAAQi/D,EAASt7D,IAAMwB,cAAc67E,IAAQh4E,YAAS,CACzE,mBAAoBozjB,GACpBj8jB,GAAIA,EACJq8jB,QAASH,GACTzhmB,MAAOA,EACP+oH,MAAO44e,IACNP,GAAcx2jB,GAAY+2jB,GAAcxwe,GAAcpoF,IAAMwB,cAAc8hW,IAAgBj+V,YAAS,CACpG7I,GAAIi8jB,IACH/mS,GAAsBtpM,OA6LZ5xC,gBApVK,CAElB1jE,KAAM,IAkV0B,CAChC/I,KAAM,gBADOysE,CAEZi7O,I,6BCxWH,IAAYqnS,EADZ,kCACA,SAAYA,GAEV,oBAEA,oBAEA,oBAEA,yBAEA,sCAEA,oBAEA,kBAEA,oBAEA,4BAlBF,CAAYA,MAAM,M,6BCDlB,oDAuBInnS,EAAgB3xR,IAAM8E,YAAW,SAAuBW,EAAOzuC,GACjE,IAAI+hmB,EAAwBtzjB,EAAMuzjB,eAC9BA,OAA2C,IAA1BD,GAA2CA,EAC5DtkhB,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBz4D,EAAQu8B,YAAyBhT,EAAO,CAAC,iBAAkB,UAAW,cAE1E,OAAOzF,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAAYqkhB,GAAkBvkhB,EAAQoB,SACpE7+E,IAAKA,GACJklB,OAwBUs6D,gBAnDK,CAElB1jE,KAAM,CACJ6jE,QAAS,OACTnC,WAAY,SACZ6C,QAAS,EACTJ,eAAgB,WAChBsmD,KAAM,YAIR1nD,QAAS,CACP,yBAA0B,CACxB4tC,WAAY,KAsCgB,CAChC15G,KAAM,oBADOysE,CAEZm7O,I,gBC3DH,IAAInnJ,EAAa7zK,EAAQ,MAGrB+zK,EAA0B,iBAARC,MAAoBA,MAAQA,KAAKhxK,SAAWA,QAAUgxK,KAGxE73J,EAAO03J,GAAcE,GAAYE,SAAS,cAATA,GAErCn0K,EAAOC,QAAUoc,G,6BCNjBnZ,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQuimB,IAAMvimB,EAAQwimB,oBAAsBximB,EAAQyimB,WAAazimB,EAAQ0imB,QAAU1imB,EAAQ2imB,8BAA2BhimB,EAEtH,IAEIiimB,EAASp3Y,EAFDvrN,EAAQ,OAMhB4imB,EAAcr3Y,EAFDvrN,EAAQ,OAIzB,SAASurN,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAExD3L,EAAQ2imB,yBAA2B,SAAkC9ijB,GAClG,IACIghF,EAAU,EACViie,EAAS,EAeb,OAdA,EAAIF,EAAOnye,SAHO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAGrB,SAAUq7F,GACzC,GAAIjsK,EAAKisK,KACPjrF,GAAW,EACN5/E,MAAMpB,EAAKisK,MACdg3Y,GAAU,GAEG,MAAXh3Y,GAA6B,MAAXA,GAAgB,CAClB,SACFlsK,KAAKC,EAAKisK,MACxBg3Y,GAAU,OAKXjie,IAAYiie,GAASjjjB,GAlB9B,IAqBI6ijB,EAAU1imB,EAAQ0imB,QAAU,SAAiB7ijB,EAAMkjjB,GACrD,IAAIj4f,EAAQjrD,EAAKuuhB,KAAM,EAAIy0B,EAAYpye,SAAS5wE,EAAKuuhB,MAAO,EAAIy0B,EAAYpye,SAAS5wE,GACjFmjjB,EAAMl4f,EAAMm4f,QACZC,EAAMp4f,EAAMq4f,QACZ7uU,EAAMxpL,EAAMs4f,QACZh1B,EAAMtje,EAAMu4f,QAOhB,OANc,IAAVL,EAAI3wlB,IACN2wlB,EAAI94kB,EAAI64kB,GAAU,EAClBG,EAAIh5kB,EAAI64kB,GAAU,GAIb,CACLC,IAAKA,EACL50B,IAJwB,WAARA,GAA8B,IAAV95S,EAAI9pR,EAIrB,cAAgB,IAAM4jkB,EACzC95S,IAAKA,EACL4uU,IAAKA,EACLH,OAAQljjB,EAAK31B,GAAK64kB,GAAUC,EAAI94kB,EAChC4H,OAAQ+tB,EAAK/tB,SAIA9xB,EAAQyimB,WAAa,SAAoBr0B,GAExD,IAAIk1B,EAA+B,MAA1B5vlB,OAAO06jB,GAAKjhb,OAAO,GAAa,EAAI,EAC7C,OAAOihb,EAAI1nkB,SAAW,EAAI48lB,GAAMl1B,EAAI1nkB,OAAS,EAAI48lB,IAAM,EAAIT,EAAYpye,SAAS29c,GAAKrlY,WAG7D/oM,EAAQwimB,oBAAsB,SAA6B3ijB,GACnF,IAAKA,EACH,MAAO,OAET,IAAIihH,EAAM4hc,EAAQ7ijB,GAClB,MAAgB,gBAAZihH,EAAIsta,IACC,mBAEc,IAAZtta,EAAIwzH,IAAIt4M,EAAsB,IAAZ8kF,EAAIwzH,IAAI94M,EAAsB,IAAZslF,EAAIwzH,IAAI7pR,GAAW,KACpD,IAAM,OAAS,QAGrBzK,EAAQuimB,IAAM,CACtBS,IAAK,CAAEx4lB,EAAG,EAAG0f,EAAG,EAAGgD,EAAG,GAAK7a,EAAG,GAC9B+7jB,IAAK,UACL95S,IAAK,CAAEt4M,EAAG,IAAKR,EAAG,EAAG/wE,EAAG,EAAGD,EAAG,GAC9B04lB,IAAK,CAAEh5kB,EAAG,EAAG7X,EAAG,EAAGpN,EAAG,EAAGuF,EAAG,IAG9BxK,EAAQywH,QAAUzwH,G,6CCnFZykR,G,KAAen7O,qBAAoB3oC,IAU1B8jR,O,6BCZf,4IAsBIlgO,EAtBJ,uBAwBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,oDAA8G,CAC5G7Y,UAGGp0B,kBAmFI8rlB,EAA2B,kBAAM7rjB,YAC5C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,sBAG/C46lB,EAAiB,kBAAM9rjB,YArFCA,YACnC8M,KACA,SAAC3Y,GACC,OAAOA,EAAMjjC,IAAI,UAAY6O,mBAoF/B8rlB,KACA,SAACE,EAAgCC,GAC/B,OAAOD,EAAM76lB,IAAI86lB,OAIRC,EAAyB,kBAAMjsjB,YAC1C8rjB,KACA,SAAChzkB,GAAD,OAA+B,MAARA,GAAgBA,EAAK5nB,IAAI,aAAgBkU,sB,6SChG5DsnX,EAAmBn2W,iBAAO,CAC9B45K,UAAU,IAsENw8L,EAA4B5sX,gBAE5BitG,E,4MAEG74E,MAA+B,CACpC4R,aAAa,EAEb8mV,yBAA0B9sX,gBAC1B+/B,YAAQ72C,EACR6jY,kBAAc7jY,EACd8jY,gBAAiB,WAAO53W,QAAQ7Z,MAAM,yB,+DAGxC,WACE,IACE2xG,EACE9/G,KAAKkqC,MADP41E,kBAGIR,EAAaQ,EAAkB/7G,IAAI,cAGnC27X,GAFW5/Q,EAAkB/7G,IAAI,aAAe6O,iBAEZ5J,KAAI,SAACtN,EAAO4I,GACpD,OAAOzF,cAAIyF,EAAIy6C,MAAM,KAAK/1C,KAAI,SAAC62X,GAAD,OAAgBA,EAAWrhQ,cAG3D,EAIIx+H,KAAKgnC,MAHP2L,EADF,EACEA,OACAgtV,EAFF,EAEEA,aACAC,EAHF,EAGEA,gBAEgB,MAAdtgR,IACF3sE,EApFkC,WAAwL,IAAvLmtV,EAAsL,uDAAnE7nX,iBAU1J,OAREvW,YAAQo+X,GACLA,EAAmEn0X,QACpE,SAACutI,EAAK6mP,GACJ,OAAOntX,MAAI9N,MAAMi7X,GAAa7mP,EAAIxxI,IAAIq4X,EAAUh8X,IAAI,QAAU,aAAcw7X,EAAiBhuX,UAAUwuX,IAAc7mP,EAAIxxI,IAAJ,UAAWq4X,GAAaR,KAC5I3sX,iBAEHktX,GAEY92X,KAAI,SAACtN,EAAO4I,GAC1B,OAAO5I,EAAMgM,IAAI,MAAOpD,MAyEb07X,CAAgC1gR,GAEzCqgR,EAAehtV,EAAOlmC,MAAK,SAACwzX,EAAQC,GAClC,OArGQC,EAqGM,MArGI,SAACC,EAAMC,GAC/B,IAAMC,EAAYF,EAAKr8X,IAAIo8X,GACrBI,EAAYF,EAAKt8X,IAAIo8X,GAE3B,OAAIG,IAAcC,GACR,GACED,GAAaC,EAChB,EACED,IAAcC,EAChB,EAEFD,EAAYC,GAAa,EAAI,IA0FTN,EAAQC,GArGtB,IAACC,KAuGVP,EAAkBt4W,iBAAOq4W,EAAa32X,KAAI,kBAAM,QAAMuV,SAGxDve,KAAK4iH,SAAS,CACZ88Q,2BACA/sV,SACAgtV,eACAC,sB,+BAIJ,WAEE,MAII5/X,KAAKkqC,MAHPs2V,EADF,EACEA,oBACA71V,EAFF,EAEEA,SACA81V,EAHF,EAGEA,SAGFzgY,KAAK0gY,eAAe/1V,EAAU81V,EAA9BzgY,CAAwC,CAACwgY,0B,6BAG3C,YAAiG,IAAzEA,EAAwE,EAAxEA,oBAEpBb,EACE3/X,KAAKgnC,MADP24V,aAGF,OAAoB,MAAhBA,GAIGA,EAAa/2X,WAAW+C,QAAO,SAACg1X,EAAOR,GAC5C,OAAOQ,KAAWR,EAAMp8X,IAAI,aAAey8X,EAAoBv8X,IAAIk8X,EAAMp8X,IAAI,QAAU,QACtF,K,mCAGL,SAA6By8X,GAC3B,IACEb,EACE3/X,KAAKgnC,MADP24V,aAGF,OAAoB,MAAhBA,EACKa,EAAoB3hX,SAGtB8gX,EAAap0X,QAAO,SAAC7P,EAAO4I,GACjC,OAAOk8X,EAAoBv8X,IAAIK,MAC9Bua,W,8BAGL,YAAiE,IAAxC2hX,EAAuC,EAAvCA,oBACvB,EAGIxgY,KAAKkqC,MAFP41E,EADF,EACEA,kBACAkoG,EAFF,EAEEA,MAGI44K,EAAiCjyX,KAAKC,UAAU4xX,GAClD7tV,EAAS6sV,EAA0Bz7X,IAAI68X,GAE3C,GAAc,MAAVjuV,EACF,OAAOA,EAGT,IAAM4sE,EAAWO,EAAkB/7G,IAAI,aAAe6O,gBACtD+/B,EAAS,CACPzL,QAAS44E,EAAkB/7G,IAAI,YAEjC,IACE27X,EACE1/X,KAAKgnC,MADP04V,yBAGImB,EAAWhiY,cAAImB,KAAK8gY,sBAAsBN,IAE1CX,EAAaH,EAAyB18W,SAC1C,SAAC+9W,GACC,OAAO/4K,EACH+4K,EAAW37X,OAAOy7X,GAClBE,EAAWn9W,SAASi9W,MAI5B,GAAkB,MAAdhB,EAAoB,CACtB,IAAMmB,EAAmBzhR,EAASx7G,IAAI87X,GACd,MAApBmB,GAIoB,OAHtBruV,EAAS,CACPzL,QAAS85V,EAAiBj9X,IAAI,aAErBmjC,SACTlf,QAAQ08E,MAAM,kCAAmC,CAC/C/xD,SAAOquV,qBAQf,GAHAxB,EAA0B93X,IAAIk5X,EAAgCjuV,GAGxC,MAAlBA,EAAOzL,QAMT,OALAlf,QAAQ08E,MAAM,kCAAmC,CAC/C/xD,SACAmtE,oBACA0gR,wBAEK,CACLt5V,QAAS9d,iBAAO,KAIpB,IAAM63W,EAAgBn5R,YAAcn1D,EAAOzL,QAAQ3oB,OAAO2oB,SACpDg6V,EAAe,2BAChBD,EAAcnxX,OAAO,GAAG,IADR,IAEnB6iC,OAAQ6tV,EAAoBjiX,SAExB4iX,EAAgC,sBAAOF,EAAcnxX,MAAM,GAAI,IAA/B,CAAmCoxX,IAUzE,OAAO,2BACFvuV,GADL,IAEEzL,QAASyL,EAAOzL,QAAQx/B,IAAI,UAAWy5X,O,wBAI3C,YAA0C,IAAvBX,EAAsB,EAAtBA,oBACXY,EAAgBphY,KAAKqhY,iBAAiB,CAACb,wBAC7C,MAAO,CAAC,kBAAmB7xX,KAAKC,UAAUwyX,EAAcl6V,QAAQnjC,IAAI,YAAa4K,KAAKC,UAAU4xX,M,4BAGlG,SAAsB71V,EAAU81V,GAAW,IAAD,OACxC,OAAO,YAAqE,IAAnED,EAAkE,EAAlEA,oBACDl8X,EAAM,EAAKg9X,WAAW,CAACd,wBAI7B,GAA0B,MAFCC,EAAS7/W,MAAT,CAAgB,cAAhB,mBAAiCtc,MAE1B,EAAKi9X,gBAAgB,CAACf,wBAAuB,CAC7E,IAAMY,EAAgB,EAAKC,iBAAiB,CAACb,wBAC7C71V,EAAS,IAAI2lC,IAAJ,2BACH8wT,EAAcl6V,QAAQ3oB,QADnB,IAEPja,c,uCAMR,SAAiC++G,GAC/B,MAGIrjH,KAAKkqC,MAFcs3V,EADvB,EACEhB,oBACA71V,EAFF,EAEEA,SAIA61V,EAEEn9Q,EAFFm9Q,oBACAC,EACEp9Q,EADFo9Q,SAGGe,EAAwBp8X,OAAOo7X,IAClCxgY,KAAK0gY,eAAe/1V,EAAU81V,EAA9BzgY,CAAwC,CAACwgY,0B,oBAI7C,WACE,MAUIxgY,KAAKkqC,MATPs2V,EADF,EACEA,oBAGAC,GAJF,EAGE91V,SAHF,EAIE81V,UAJF,KAKE3gR,kBALF,EAMEL,oBANF,MAMgB,QANhB,MAOEgF,MAAQjJ,EAPV,EAOUA,SAAU9/G,EAPpB,EAOoBA,MAEf4oB,GATL,EAQEq1F,WARF,kBAYMr1G,EAAMtE,KAAKshY,WAAW,CAACd,wBACvBxlV,EAAOylV,EAAS7/W,MAAT,CAAgB,QAAhB,mBAA2Btc,IAAMzF,iBAAO0f,OAE/C+vT,EAAYtzR,GAAQA,EAAKhyC,IAAMgyC,EAAKhyC,KAAI,SAAClD,GAE7C,MACO,OADC25G,EAEI,cAAC,IAAD,CAAqB/jH,MAAOoK,EAAEm7B,GAA9B,SAAmCn7B,EAAEpK,OAAtBoK,EAAEm7B,IAIjB,cAAC,IAAD,CAAqBvlC,MAAOoK,EAAEpK,MAA9B,SAAsCoK,EAAEg7B,OAASh7B,EAAEpK,OAApCoK,EAAEm7B,OAG1B,GAEL,OACE,eAAC,IAAD,yBACEwjF,MAAK,2BACAzkH,KAAKkqC,MAAMu6E,OADX,IAEHjJ,SAAU,SAACvlG,GACLxU,MAAMC,QAAQuU,GACZA,EAAIpU,OACN25G,EAASvlG,GACe,IAAfA,EAAIpU,QACb25G,EAAS,MAGXA,EAASvlG,IAGbva,MAAQsE,KAAKkqC,MAAMy2E,WAAal/G,MAAMC,QAAQ1B,KAAKkqC,MAAMu6E,MAAM/oH,OAAvD,YAAoEsE,KAAKkqC,MAAMu6E,MAAM/oH,OAASsE,KAAKkqC,MAAMu6E,MAAM/oH,QAEzHi+G,WAAU,2BACL35G,KAAKkqC,MAAMyvE,YADN,IAERgoN,aAAejmU,GAASsE,KAAKkqC,MAAMy2E,UAAY,cAAC,IAAD,CAAYrF,MAAO,CAACkG,YAAa,IAAKqD,QAAS,kBAAMrJ,EAAS,OAA9D,SAAqE,cAAC,IAAD,SAElHl3F,GApBN,cAsBGtkB,KAAKkqC,MAAM5D,SACXgoS,U,GA7PqB7pS,aAyQ9B,IAAMmI,EAAkBkG,YAAyB,CAC/C2tV,SAAU9gV,iBAWGs1B,sBACb4pC,kBAAQjyE,GAnBH,SAA4BjC,GACjC,MAAO,CACLA,eAQG,SAAoBmC,EAAYC,EAAeN,GACpD,IAAM+zV,EAAsBphY,sBAAYqtC,EAAS6yE,YAAc7yE,EAAS6yE,WAAal2F,iBAAOqjB,EAAS6yE,YAAc,IAEnH,OAAOlhH,OAAO+8C,OAAO,GAAI1O,EAAUK,EAAYC,EAAe,CAC5DyzV,2BAIWvrT,CAEb4qC,I,6BCvYa,SAAS+wE,EAAS1mK,GAC/B,IACIu6E,EADA+oD,EAAO9pJ,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,IAG/E,SAASkuL,IACP,IAAK,IAAI7mK,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAIzB,IAAIolO,EAAOrwP,KAEP2nM,EAAQ,WACVz9K,EAAKjiB,MAAMooP,EAAMrlO,IAGnBu7G,aAAa9hC,GACbA,EAAU5rD,WAAW8uJ,EAAOn6C,GAO9B,OAJAokC,EAAU1+K,MAAQ,WAChBqzH,aAAa9hC,IAGRmtF,EA1BT,mC,6BCEA,IAAI+0B,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wSACD,iBAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,mBAuBe86V,IApBf,YAEI,IADArrS,EACD,EADCA,OAEMzrN,EAAS8zK,cACX2zD,EAAU,GACd,GAAIhc,EACA,IACIgc,EAAUznO,EAAOJ,QAAQ6rN,EAAQ,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,eAAgBz6F,gBAAe06F,WAAW,EAAMC,WAAW,IACrJ,MAAO1gH,GACL4f,QAAQ7Z,MAAM,eAAgB,CAC1B85F,WAEJjgF,QAAQ7Z,MAAM/F,GAGtB,MAAO,CACHsnU,a,8NCoIF9iS,EAAkBkG,YAAyB,CAC/CgjG,aAAcJ,cACdk1E,SAAUF,cACVgjL,kBAAmBnjL,cACnB1tF,gBAAiBhB,gBASbmje,EAA2B/phB,kBAC/BgG,aApCa,SAACC,GAAD,MAAmB,CAChCg/R,OAAQ,CACNj9P,SAAU,SACVqX,IAAK,IACL0M,OAAQ9lD,EAAM8lD,OAAOk5O,OAAS,EAC9Bn/O,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/B2O,aAAc34C,EAAMZ,QAAQ,GAC5BgB,MAAO,QAET2jhB,iBAAkB,CAChBz9e,YAAatmC,EAAMZ,WAErB4khB,UAAW,CACTh3e,WAAY,OACZ1G,YAAatmC,EAAMZ,QAAQ,IAE7B6khB,uBAAwB,CACtBl5f,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7B4lF,WAAYhtC,EAAMZ,QAAQ,OAkBT,CAAC00C,WAAW,IAC/BnQ,kBAAQjyE,GARiB,SAACjC,GAC1B,MAAO,CACLA,eAOFwU,YAAgB,gBAHe81B,EAvHS,SAAC/qC,GACzC,IACEgvC,EAMEhvC,EANFgvC,QACAntD,EAKEme,EALFne,EAFF,EAOIme,EAJFk1jB,mBAHF,MAGgB,KAHhB,EAIEvoO,EAGE3sV,EAHF2sV,QAJF,EAOI3sV,EAFFm1jB,kCALF,WAOIn1jB,EADFo1jB,oBANF,MAMiB,kBAAM,MANvB,EAQA,OACE,qBAAKlmhB,UAAWF,EAAQghS,OAAxB,SACE,cAAC,IAAD,CAASxgQ,QAAQ,QAAjB,SACE,eAAC,IAAD,CAAMlgC,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,cAAC,IAAD,CAAMhB,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,QAASrC,WAAW,SAA1D,SACGmmhB,GAAe,qCACd,cAAC,IAAD,UAEEA,GAAeA,EAAYp2lB,KAAI,SAACuxV,EAAYp+V,GAC1C,IAAMojmB,EAAoBpjmB,EAAQ,IAAOijmB,EAAYv9lB,OACrD,OACI,cAAC,IAAD,CAASqoH,MAAOqwO,EAAWz5T,MAA3B,SACE,cAAC,IAAD,yBAEIssF,KAAK,IACLvI,QACE,SAAAz8G,GACEA,EAAEg5H,iBACEm5N,EAAW11O,SAAW01O,EAAW11O,QAAQz8G,IAGjD69F,MAAOs5f,EAAmB,cAAgB,WACtChlQ,EAAWltO,WAVnB,aAYGktO,EAAWz5T,MAAMj/B,OAAS,GAA1B,UAAkC04V,EAAWz5T,MAAMhxB,MAAM,EAAG,IAA5D,OAAuEyqV,EAAWz5T,QAX5E3kC,IAF4BA,QAoB9CkjmB,EAA6B,cAAC,IAAD,CAASn1e,MAAOn+F,EAAE,+BAAlB,SAC5B,cAAC,IAAD,CAAaqtD,UAAWF,EAAQimhB,uBAAwBh4e,SAAS,YACtD,UAIjB,cAAC,IAAD,CAAM/tC,UAAWF,EAAQgmhB,UAAzB,SACGI,MAEH,cAAC,IAAD,UAEIzoO,GAAWA,EAAQ7tX,KAAI,SAACmkH,EAAQhxH,GAC9B,IAAMqjmB,EAAgBrjmB,EAAQ,IAAO06X,EAAQh1X,OAC7C,OACE,cAAC,IAAD,CAEEqoH,MAAOiD,EAAOsye,aAAetye,EAAOsye,YAAYvif,SAAWiQ,EAAOuye,gBAAkB,GAAKvye,EAAOwye,eAAiB,GAFnH,SAIE,+BACE,eAAC,IAAD,yBACE5jmB,KAAK,QACLq9E,UAAWF,EAAQ+lhB,iBACnBp6e,QAAS,SAAAz8G,GAAC,OAAI+kH,EAAOtI,SAAWsI,EAAOtI,QAAQz8G,IAC/C69F,MAAM,UACNyT,QAAS8lf,EAAe,YAAc,QAClCrye,EAAOsye,aANb,cASItye,EAAOpK,WAAa,cAAC,IAAD,CAAkBhnH,KAAK,MAAMu/G,MAAO,CAAEkG,YAAa,KAExE2L,EAAOrsF,aAfP3kC,mB,6BCjGzB,kCAAO,IAAMyjmB,EAAwB,SAACC,GACpC,OAAOA,EACGA,EAAO97lB,IAAI,aAAX,UACK87lB,EAAO97lB,IAAI,cADhB,OAC+B87lB,EAAO97lB,IAAI,YAAc,IAAM87lB,EAAO97lB,IAAI,YAAc,IACrF87lB,EAAO97lB,IAAI,gBACb,K,qeCLX2qB,OAAeoxkB,sCAAuC,EAEvD93kB,QAAQijF,IAAR,k3BA2FgB+9B,IAATmoL,MAAP,IA8FI4uS,EACAC,EACAC,EACAv7f,EACAw7f,EAtDSC,EAAwB,WAKnC,MAAO,CAAEC,yBAFuB,EAEEC,WAHrB3xkB,OAAO+6B,SAASi1c,KAEL3/c,MAAM,KAAK,KAwCpCrwB,OAAe4xkB,IAAM,CACpBr4f,WACApD,cAUF,IAAM07f,EAAcz3Y,cAEdmoG,GAAYx4R,mBAASrK,WAAa,eAAegrB,cAGjDonjB,GAEL,mBACEvvS,GAAW,SAACv1T,GAAD,OAAWskmB,EAAatkmB,KADrC,cAJgB,gBAMH,SAACA,GAAD,OAAWqkmB,EAAarkmB,KAFrC,cAGC,QAAQ,SAACA,GAAD,OAAWukmB,EAAYvkmB,KAHhC,cAIC,SAAS,SAACA,GAAD,OAAWwkmB,EAAaxkmB,KAJlC,cAKC,SAAS,SAACA,GAAD,OAAWgpG,EAAQ9oD,SAASlgD,EAAO,KAAO,KALpD,GAQD0C,OAAO0D,KACLy+lB,GACA7zlB,SACA,SAACpI,GACC,IAAMm8lB,EAAWn8lB,EAAI80C,cACf19C,EAAQ6kmB,EAAYj8lB,GACpBo8lB,EAAUF,EAAaC,GACd,MAAXC,GACFA,EAAQhlmB,MAKd,IAAMq8C,EAAI,uCAAG,WACX4ojB,EACA/7jB,GAFW,6DAAAj/B,EAAA,kEAKDupK,EAAe0xb,eALd,sBAMC,IAAIh5lB,MAAM,4LANX,cASPi5lB,cAEEC,EAGEH,EAHFG,WACAC,EAEEJ,EAFFI,QACMC,EACJL,EADFt9iB,KAIEqC,EAAwBt8B,iBAAO,CACjCi6B,KAAM,UAlBD,SAwB4CpE,QAAQwnJ,IAAI,CAC7Dz9D,IAAMznC,QAAN,UAAiBw/f,EAAjB,eAA+BjzkB,gBAC/Bk7G,IAAMznC,QAAN,UAAiBu/f,EAAjB,eAAkChzkB,kBA1B7B,6CAsBEmzkB,EAtBF,EAsBJjmjB,KAAoBkmjB,EAtBhB,EAsBW9vjB,IAtBX,OAuBE+vjB,EAvBF,EAuBJnmjB,KAAuBomjB,EAvBnB,EAuBchwjB,IAKP,MAAV8vjB,EA5BG,uBA6BE,IAAIt5lB,MAAJ,uDAA0Ds5lB,IA7B5D,WA+BU,MAAbE,EA/BG,uBAgCE,IAAIx5lB,MAAJ,0BAA6Bk5lB,IAhC/B,WAkCW,MAAdK,IACI1+W,EAAar5N,iBAAO+3kB,GAC1Bz7iB,EAAS+8L,EAAWlxO,UAAUkxO,EAAW1+O,IAAIi9lB,MAE3Ct7iB,EAAO9kC,MAAM,CAAC,gBAAiB,WAtC5B,wBAuCC0mF,EAvCD,2BAwCA25f,GAxCA,IAyCHt3f,QAAQ,IAGV03f,EAAqB,IAAIC,IAAI,CAC3Bh7Z,OAAQ66Z,EAAWI,cAAcj7Z,OACjCk7Z,iBAAkBL,EAAWI,cAAcC,mBA9CxC,UAiDwBH,EAC1BI,OAAOn6f,GACPO,QAAQ,CACPvB,QAAS,OACTC,SAAU,uBACV9vB,KAAM,CACJ+qB,IAAK9yE,OAAO+6B,SAAS2jE,QAvDtB,WAgGiB,OA/ChBs0e,EAjDD,+BAiGI,IAAI95lB,MAAM,2CAjGd,QAoGCygG,EAAgBj/E,iBAAOs4kB,GACvBC,EAAmBt5f,EAAcznF,MAAM,CAAC,UAAW,OAAQ,MAAO,IAClEghlB,EAAgBv5f,EAAcznF,MAAM,CAAC,UAAW,OAAQ,MAAO,IAC/DkzL,EAASzrG,EAAcznF,MAAM,CAAC,UAAW,OAAQ,WAEjDihlB,EAzGD,UAyGmB1B,WAzGnB,aAyGmB,EAAyBC,wBAE3C7zX,EAAkBlkI,EAAcznF,MAAM,CAAC,UAAW,OAAQ,oBACxC,MAApB+glB,GAA4BA,EAAiB5lmB,OAAS8lmB,IACxDn8iB,EAASi8iB,EAAiBpwlB,UAAUowlB,EAAiB59lB,IAAIi9lB,KAErDc,EA/GD,2BAgHAnB,GAhHA,IAiHHr5f,IAAI,2BACCA,GACAs6f,GAAiBA,EAAcrjlB,QAEpCmnC,SACAouJ,SACAy4B,oBAEFw1X,EACED,EACAl9jB,GA3HG,0DA+HP5c,QAAQ7Z,MAAR,MA/HO,0DAAH,wDAmIJ4zlB,EAAe,SACnBpB,EACA/7jB,GAGA5c,QAAQ08E,MAAM,OAAQ,CACpBi8f,aACA/7jB,aAGF,IACE8gB,EAYEi7iB,EAZFj7iB,OACA4hD,EAWEq5f,EAXFr5f,IACA06f,EAUErB,EAVFqB,aACAC,EASEtB,EATFsB,gBACOnlZ,EAQL6jZ,EARFzlhB,MALF,EAaIylhB,EAPF1shB,gBANF,MAMa,KANb,EAOWiuhB,EAMPvB,EANFrwe,QAPF,EAaIqwe,EALFwB,wBARF,MAQqB,GARrB,IAaIxB,EAJFyB,uBATF,MASoB,GATpB,IAaIzB,EAHF0B,oBAVF,MAUiB,GAVjB,EAWEvuZ,EAEE6sZ,EAFF7sZ,OACAy4B,EACEo0X,EADFp0X,gBAGI+1X,GAAwC58iB,EAAO3hD,IAAI,kBAAoB6O,iBAAoB2L,OAG3FgklB,EAAkE,IAArCnkmB,OAAO0D,KAAKugmB,GAAcxgmB,OACvD0/lB,EAAa,2BACXgB,EAA4BF,EAAe,IAC5CC,GAGDh8Z,EAAuB,MAAdy5Z,EAAqBA,EAAar6iB,EAAO9kC,MAAM,CAAC,gBAAiB,WAC1E4hlB,EAAkB,2BACnBjB,GADmB,IAEtBj7Z,SACA19E,eAAgB65e,kBAGZC,EAAiB,IAAIpB,IAAIkB,GAC/BE,EAAen1lB,MAAM,UAAWqjL,oBAAS,SAAC0xH,EAAKn7K,GAC7C9hG,EAAMsF,SAAS,IAAIkJ,IAAe,CAAC7M,MAAO5d,iBAAOk5R,EAAIt9M,cACpD,MAIH,IAAMsrB,EAAU4xe,GAAiBthK,cAC3Bv7Z,EAAQs9jB,YAAe,CAC3BX,eACA1xe,UACAr8C,WACAkuhB,mBACAC,oBAGF,YACKt6f,YAAcm6f,IACjBv1lB,SAAQ,SAAC6zQ,GAAD,OACRl7O,EAAMmjL,QAAQ+3D,MAEhB,IAAMrlM,EAAQ3pE,oBAAU,GAAIurM,EAAep3J,EAAO3hD,IAAI,UAAY2hD,EAAO3hD,IAAI,SAASwa,QAAW,IAC3F8kC,EAAOqC,EAAO3hD,IAAI,SAAWk8lB,EAC7Bn/jB,EAAQ4kB,EAAO3hD,IAAI,UAAYm8lB,EAGrCrnjB,YAAW,WACS,MAAdmnjB,GACF36jB,EAAMsF,SAAS,IAAIgnC,IAAkB,CAAEsuB,MAAO+/f,KAEnC,MAAT9khB,GACF71C,EAAMsF,SAAS,IAAIywjB,IAAkBlghB,IAG3B,MAAR73B,GACFhe,EAAMsF,SAAS,IAAI8iC,IAAiB,CAAEpqB,UAG3B,MAATviB,GACFuE,EAAMsF,SAAS,IAAIgjC,IAAkB,CAAC7sC,WAG3B,MAAT4jE,GACFr/D,EAAMsF,SAAS,IAAIi4jB,IAASl+f,IAGhB,MAAVh/C,GACFrgB,EAAMsF,SAAS,IAAI4iC,IAAmB,CAAC7nB,YAElB,MAAnB6mL,GACFlnM,EAAMsF,SAAS,IAAIohC,IAAyB,CAAEwgK,qBAIhDlnM,EAAMsF,SAAS,IAAIshC,IAAyB6nI,IAC5CzuK,EAAMsF,SAAS,IAAI0iC,IAAgB,CAACi6B,WACnC,KAGHu7f,cACAh+f,IAASn9F,IAAI,SAAUg7lB,GACvB79f,IAASn9F,IAAI,MAAO4/F,GACpBzC,IAASn9F,IAAI,QAAS29B,GACtBw/D,IAASn9F,IAAI,UAAW4oH,GAExB,IAAMwye,EAAiC,CACrCx7f,MACA5hD,SACA4qE,UACAjrF,QACA09jB,mBACA96f,OAAQy6f,GAOV,OAJgB,MAAZ99jB,GACFA,EAASk+jB,GAGJA,GAiBP95d,IAEOnkC,IACPt7B,IACAo5hB,M,yNC9Xa7of,IAzEuC,SAAC5vE,GACrD,IAkBI84jB,EAjBFv+e,EAgBEv6E,EAhBFu6E,MADF,EAiBIv6E,EAfFm8D,KACEl4F,GAHJ,aAMM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GATb,GAGIqS,MACAkyP,EAJJ,EAIIA,QACAC,EALJ,EAKIA,QAMFx/N,EAMEoJ,EANFpJ,MAXF,EAiBIoJ,EALF9uC,eAZF,WAiBI8uC,EAJFyvE,kBAbF,MAae,GAbf,IAiBIzvE,EAFF0vE,wBAfF,MAeqB,GAfrB,EAgBKt1F,EAhBL,YAiBI4lB,EAjBJ,GAmBMw2N,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAAEnkG,EAAcngH,IAAjB,mBAA0Bs8P,OAExD,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IACZu+e,EAAiBv+e,EAAM/oH,MACa,MAAhCglQ,EAAgBnjN,eAClByljB,EAA0C,MAAzBtiW,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,qBAEpFmjN,EAAgBhlQ,aAChBglQ,EAAgBnjN,aAEvB,IAAMi+D,EAAWklJ,EAAgBllJ,UAtDd,SAACA,GAAD,OAAc,WACjCA,EAAQ,WAAR,cAqD6CslJ,CAAaJ,EAAgBllJ,WAAaiJ,EAAMjJ,SAWvFynf,EAAiB/5e,sBAAY0nE,mBALV,SAACxoL,GACxBozG,EAASpzG,GACT86lB,EAAkB,QAG6C,kBAAM,MAAOxiW,EAAgB9vE,UAAY,KAAM,IAChH,EAAmCnsJ,WAAe,MAAlD,mBAAO/oC,EAAP,KAAcwnmB,EAAd,KAUMl4e,EAAc01I,EAAgB11I,aAAe01I,EAAgBtlQ,QAA/C,UAA4DslQ,EAAgB11I,YAA5E,MAA8F01I,EAAgB11I,YAClI,OACE,eAAC,IAAD,yBAAa78G,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAAC,IAAD,qCACE94E,MAAO1lC,EAAO,UAAM0lC,EAAN,MAAkBA,GAC5B4/N,GACAp8O,GAHN,IAIE5oB,MAAiB,OAAVA,EAAiBA,EAAQsnmB,EAChCxnf,SAfuB,SAAC2rB,GAC5BA,EAAMC,UACN,IAAM3kB,EAAa0kB,EAAMn6G,OAAOtxB,MAChCwnmB,EAAkBzgf,GAClBwgf,EAAe97d,IAYXnc,YAAaA,GAA4B,MAE3C,cAAC,IAAD,CAAgB/pF,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,W,6BC1G7D,IAAI35C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,ikBACD,wBAEJ3K,EAAQywH,QAAUq4I,G,0TCOLk/V,EAAkC,GAkCxC,SAASC,EAAuBp3jB,GACrC,IAAMq3jB,EAAsBr3jB,EAAQq3jB,qBAAuB,GACrDC,EAAmBt3jB,EAAQu3jB,aAGjCF,EAAoB32lB,SAAQ,SAAA+uV,GAC1BA,EAAY+nQ,mBAAoB,KAalC,IAAMC,EAxCR,SAA0BF,GACxB,IAAMG,EAAqD,GAgB3D,OAdAH,EAAa72lB,SAAQ,SAAAi3lB,GACnB,IAAQn1lB,EAASm1lB,EAATn1lB,KAEFo1lB,EAAmBF,EAAmBl1lB,GAIxCo1lB,IAAqBA,EAAiBJ,mBAAqBG,EAAgBH,oBAI/EE,EAAmBl1lB,GAAQm1lB,MAGtBvlmB,OAAO0D,KAAK4hmB,GAAoB16lB,KAAI,SAAA7I,GAAA,OAAKujmB,EAAmBvjmB,MAuBzC0jmB,CARtBpimB,MAAMC,QAAQ4hmB,GAChB,sBAAmBD,GAAnB,YAA2CC,IACN,oBAArBA,EACD,YAASA,EAAiBD,IAE1BA,GASXS,EA2FgG,cACA,2BACA,gBACA,SAIA,SAlGnF99kB,CAAUy9kB,GAAmB,SAAAhoQ,GAAY,MAAwB,UAArBA,EAAYjtV,QAC3E,IAAoB,IAAhBs1lB,EAAmB,CACrB,MAAwBL,EAAkBr0lB,OAAO00lB,EAAY,GAAtDC,EAAP,oBACAN,EAAkBr3lB,KAAK23lB,GAGzB,OAAON,EASF,SAAShqQ,EAAkBrsJ,EAAgBm2Z,GAChD,IAAMS,EAAqC,GAS3C,OAPAT,EAAa72lB,SAAQ,SAAA+uV,GAEfA,GACFwoQ,EAAiB72Z,EAAQquJ,EAAauoQ,MAInCA,EAMF,SAASE,EAAuB92Z,EAAgBm2Z,GAAmC,oBAC9DA,GAD8D,IACxF,2BAAwC,KAA7B9nQ,EAA6B,QAElCA,GAAeA,EAAY0oQ,eAC7B1oQ,EAAY0oQ,cAAc/2Z,IAJ0D,+BAUnF,SAAS62Z,EAAiB72Z,EAAgBquJ,EAA0BuoQ,GACzE,GAAIA,EAAiBvoQ,EAAYjtV,MAC/B,KAAe,IAAOy8F,IAAP,gEAAoEwwP,EAAYjtV,WADjG,CAkBsG,GAdA,aAGA,wBAEA,qBACA,gBAIA,sCACA,WAGA,6CACA,gCACA,yDAGA,4DACA,6BAEA,uBACA,UACA,YAEA,uBAGA,wDAgCA,WACA,EACA,GAEA,iBACA,kCAGA,OADA,OACA,EAOA,cACA,W,6B1wB9MxG,8OAAO,IAAM,EAAc,IACd,EAAmB,MACnB,EAAiB,UAAG,EAAgB,WACpC,EAAuB,uCACvB,EAA0B,yCAC1B,EAA6B,mCAC7B,EAAgC,sC,6B2wBN7C,wFAIW1M,EAAO,CAAC,KAAM,KAAM,KAAM,KAAM,MAE5B,SAASsimB,EAAkBpohB,GACxC,IAAIqohB,EAAsBrohB,EAAY7wE,OAClCA,OAAiC,IAAxBk5lB,EAAiC,CAC5CzphB,GAAI,EACJR,GAAI,IACJF,GAAI,IACJF,GAAI,KACJU,GAAI,MACF2phB,EACAC,EAAoBtohB,EAAY41I,KAChCA,OAA6B,IAAtB0yY,EAA+B,KAAOA,EAC7CC,EAAoBvohB,EAAYp3E,KAChCA,OAA6B,IAAtB2/lB,EAA+B,EAAIA,EAC1C5jlB,EAAQu8B,YAAyB8+B,EAAa,CAAC,SAAU,OAAQ,SAErE,SAASO,EAAGj4E,GACV,IAAI5I,EAA+B,kBAAhByP,EAAO7G,GAAoB6G,EAAO7G,GAAOA,EAC5D,MAAO,qBAAqBgH,OAAO5P,GAAO4P,OAAOsmN,EAAM,KAgBzD,SAAS4yY,EAAQzklB,EAAOvjB,GACtB,IAAIshV,EAAWh8U,EAAK0e,QAAQhkB,GAE5B,OAAIshV,IAAah8U,EAAKD,OAAS,EACtB06E,EAAGx8D,GAGL,qBAAqBzU,OAAgC,kBAAlBH,EAAO4U,GAAsB5U,EAAO4U,GAASA,GAAOzU,OAAOsmN,EAAM,UAAY,cAActmN,SAAsB,IAAdwyU,GAAyD,kBAA/B3yU,EAAOrJ,EAAKg8U,EAAW,IAAmB3yU,EAAOrJ,EAAKg8U,EAAW,IAAMthV,GAAOoI,EAAO,KAAK0G,OAAOsmN,EAAM,KAWhR,OAAO9nL,YAAS,CACdhoC,KAAMA,EACNqJ,OAAQA,EACRoxE,GAAIA,EACJk9gB,KAnCF,SAAcn1lB,GACZ,IAAIw5U,EAAWh8U,EAAK0e,QAAQlc,GAAO,EAC/BmgmB,EAAat5lB,EAAOrJ,EAAKg8U,IAE7B,OAAIA,IAAah8U,EAAKD,OAEb06E,EAAG,MAIL,qBAAqBjxE,QADM,kBAAfm5lB,GAA2B3mR,EAAW,EAAI2mR,EAAangmB,GAC/BM,EAAO,KAAK0G,OAAOsmN,EAAM,MA0BpE4yY,QAASA,EACTE,KAdF,SAAcpgmB,GACZ,OAAOkgmB,EAAQlgmB,EAAKA,IAcpBg3E,MAXF,SAAeh3E,GACb,OAAO6G,EAAO7G,KAWbqc,K,6BC/DL,kCAAO,IAAMgklB,EAGT,SAAIC,GAA2B,MAAC,CAClC5id,QAAS4id,GAAa3ljB,QAAQC,a,eCsBhChkD,EAAOC,QAJP,SAAsBO,GACpB,OAAgB,MAATA,GAAiC,iBAATA,I,gBCzBjC,IAAI6+C,EAAU,EAAQ,KAA0C,QAEhE,SAASsqjB,EAAyBC,GAChC,GAAuB,oBAAZz8lB,QAAwB,OAAO,KAC1C,IAAI08lB,EAAoB,IAAI18lB,QACxB28lB,EAAmB,IAAI38lB,QAC3B,OAAQw8lB,EAA2B,SAAkCC,GACnE,OAAOA,EAAcE,EAAmBD,IACvCD,GA4CL5pmB,EAAOC,QAzCP,SAAiC2L,EAAKg+lB,GACpC,IAAKA,GAAeh+lB,GAAOA,EAAI41M,WAC7B,OAAO51M,EAGT,GAAY,OAARA,GAAiC,WAAjByzC,EAAQzzC,IAAoC,oBAARA,EACtD,MAAO,CACL,QAAWA,GAIf,IAAI/D,EAAQ8hmB,EAAyBC,GAErC,GAAI/hmB,GAASA,EAAMkB,IAAI6C,GACrB,OAAO/D,EAAMgB,IAAI+C,GAGnB,IAAIutZ,EAAS,GACT4wM,EAAwB7mmB,OAAOyJ,gBAAkBzJ,OAAO0uB,yBAE5D,IAAK,IAAIxoB,KAAOwC,EACd,GAAY,YAARxC,GAAqBlG,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,GAAM,CACvE,IAAI2thB,EAAOgzE,EAAwB7mmB,OAAO0uB,yBAAyBhmB,EAAKxC,GAAO,KAE3E2thB,IAASA,EAAKluhB,KAAOkuhB,EAAKvqhB,KAC5BtJ,OAAOyJ,eAAewsZ,EAAQ/vZ,EAAK2thB,GAEnC59H,EAAO/vZ,GAAOwC,EAAIxC,GAWxB,OANA+vZ,EAAgB,QAAIvtZ,EAEhB/D,GACFA,EAAM2E,IAAIZ,EAAKutZ,GAGVA,GAITn5Z,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,gBCrDxE,IAAI/kC,EAAWv8K,EAAQ,KACvBF,EAAOC,QAAU,SAAUsmK,GACzB,IAAKkW,EAASlW,GAAK,MAAMp/J,UAAUo/J,EAAK,sBACxC,OAAOA,I,gBCFTvmK,EAAOC,SAAWC,EAAQ,IAARA,EAAoB,WACpC,OAA+E,GAAxEgD,OAAOyJ,eAAe,GAAI,IAAK,CAAE9D,IAAK,WAAc,OAAO,KAAQ4B,M,oFCwE7D64kB,IAtDa,SAAC3xX,GAmD3B,OAAOhuG,mBAlBiB,SAAC73E,EAAOyF,GAC9B,IAAMy4jB,EAAgB/jjB,eAAqBna,GACrC+d,EAAcmgjB,EAAc37lB,SAASo4C,IAASoC,YAC9CiF,EAAgBk8iB,EAAc37lB,SAASo4C,IAASsC,cAChDy5hB,EAAcwnB,EAAc37lB,SAASo4C,IAASwjjB,YACpD,OAAO,aACLD,gBACAngjB,cACAiE,gBACA00hB,eACG5qiB,YAAyB,CAC1BsyjB,WAAYpkjB,eACZ04W,WAAYjzW,eACZg3hB,aAAcr0hB,gBAHbtW,CAIA9L,MAIA63E,EAlDoB,SAAC30E,GAC1B,IACEk7jB,EAMEl7jB,EANFk7jB,WACA3nB,EAKEvziB,EALFuziB,aACA/jL,EAIExvX,EAJFwvX,WACA30W,EAGE7a,EAHF6a,YACAiE,EAEE9e,EAFF8e,cACA00hB,EACExziB,EADFwziB,YAiBF,OAAO,cAAC7wX,EAAD,aACLw4Y,0BAfgC,SAAC/4iB,GACjC,IAAMg5iB,EAAa7nB,IAAiBnxhB,EACpC,OAAOg5iB,GAAct8iB,GAAiB00hB,GAAe4nB,GAcrDC,wBAX8B,SAAC7+iB,GAC/B,IAAM8+iB,EAAW9rM,IAAehzW,EAChC,OAAO3B,GAAeygjB,GAAY9nB,GAAe8nB,GAUjDC,uBAP6B,SAACzlgB,GAC9B,OAAOolgB,IAAeplgB,IAOlB91D,S,6BCjDV,aAUekoS,IARf,WACE,IAAK,IAAIrnT,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAOonT,YAAgBrnT,K,qGCDb06kB,E,iBAAAA,K,oBAAAA,M,KAIL,IAAM9C,EAGX,WACS17jB,GACN,yBADMA,UACP,KAJchnC,KAAOwlmB,EAAiBC,Q,6BCT1C,IAAIh/Y,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6WACD,iBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,iJACD,iBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,gbACD,kBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sJACD,YAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,wEAkBIvkN,EAlBJ,uBAoBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,qDAA+G,CAC7G7Y,UAGGp0B,kBAGIgzlB,EAAe,kBAAM/yjB,YAChC8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,cAQ9C,KACb47C,qBACAimjB,eACAC,oBARiC,kBAAMhzjB,YACvC8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,uB,iGC3C9C,SAAS,EAAW+hmB,EAAQ96kB,EAAM+6kB,GAc/C,OAZE,EADE,OAAAC,EAAA,KACW3thB,QAAQC,UAER,SAAoBwthB,EAAQ96kB,EAAM+6kB,GAC7C,IAAIpgmB,EAAI,CAAC,MACTA,EAAEyG,KAAKnE,MAAMtC,EAAGqlB,GAChB,IACIqC,EAAW,IADGgiJ,SAASvtJ,KAAK7Z,MAAM69lB,EAAQngmB,IAG9C,OADIogmB,GAAO,OAAAvwhB,EAAA,GAAenoD,EAAU04kB,EAAM5nmB,WACnCkvB,GAIJ,EAAWplB,MAAM,KAAMvE,W,mGCU1BuimB,EAAW,sCAAIj7kB,EAAJ,yBAAIA,EAAJ,yBAAiB+uE,IAAkB/uE,IAC9Ck7kB,EAAiB,sCAAIl7kB,EAAJ,yBAAIA,EAAJ,yBAAiB8sE,IAAwB9sE,IAC1Dm7kB,EAAmB,sCAAIn7kB,EAAJ,yBAAIA,EAAJ,yBAAiBgtE,IAA0BhtE,IAC9Do7kB,EAAU,SAAC5ogB,GAAD,OAAoB,IAAI3D,KAAiB2D,IACnD6ogB,EAAgB,SAAC7ogB,GAAD,OAAoB,IAAItF,KAAuBsF,IAC/D8ogB,EAAkB,SAAC9ogB,GAAD,OAAoB,IAAInF,KAAyBmF,IACnE+ogB,EAAc,SAACvre,GAAD,OAAmB,IAAI5mC,KAAsB4mC,IAmQlDwre,IAtOI,wEAKI,GAJrBC,EADiB,EACjBA,SACAC,EAFiB,EAEjBA,OACAC,EAHiB,EAGjBA,qBAHiB,IAIjBC,uBAJiB,MAIC,aAJD,SAKW,SAAsDjtjB,GAA8E,IAa1JktjB,EAbyJ,6JAiB7J,SAAe5lkB,GACb,MAUIjhC,KAAKkqC,MATP+7jB,EADF,EACEA,SACAC,EAFF,EAEEA,eACAC,EAHF,EAGEA,iBACAC,EAJF,EAIEA,QACAC,EALF,EAKEA,cACAC,EANF,EAMEA,gBACAQ,EAPF,EAOEA,WACAC,EARF,EAQEA,SACAp8jB,EATF,EASEA,UAKS,MAAN1J,IAAsB,IAARA,IAAcmb,MAAMnb,IAAQylkB,KACzCK,IAAa1skB,YAAUgvB,MAAS09iB,EAOzBA,IAAa1skB,YAAUshG,eAChCwqe,EAAiBllkB,GAEjBilkB,EAAe,CAAE1ogB,OAAQv8D,IATzBglkB,EAAS,CACPzogB,OAAQv8D,EACR03W,SAAU,SAACxqY,GACTy4lB,EAAgB,CAAEj8jB,WAAUx8B,aAQ9B24lB,IAAe7lkB,IACb8lkB,IAAa1skB,YAAUgvB,MAAS09iB,EAEzBA,IAAa1skB,YAAUshG,eAChC2qe,EAAsB,MAANrlkB,EAAaA,GAAM,GAEnColkB,EAAoB,MAANplkB,EAAaA,GAAM,GAJjCmlkB,EAAc,MAANnlkB,EAAaA,GAAM,OA/C0H,kCAyD7J,SAA4B+lkB,GAC1B,MAIIhnmB,KAAKkqC,MAHP+8jB,EADF,EACEA,aACA14jB,EAFF,EAEEA,MACQyyX,EAHV,EAGExjU,OAGIA,EAAmB,MAAVwpgB,EAAiBA,EAAShmM,EAEzC,GAAoB,MAAhBimM,IAAoC,IAAZzpgB,EAM5B,GAHa,MAATjvD,GACFvmB,QAAQ08E,MAAR,iEAAgF,CAAEn2D,UAE/EA,EAAMoE,OAAOpxC,eAAe,UAAjC,CAKA,IAAM22Y,EAAe1kI,uBAAajlO,EAAMw7E,KAAP,YAAC,eAAiBx7E,EAAMoE,QAAxB,IAAgC6qD,YACjE5kB,YAAQs/T,QALNlwX,QAAQ08E,MAAR,wDAA+Dn2D,EAAMw7E,KAArE,sCAzEyJ,+BAiF7J,WACE,MAGI/pH,KAAKkqC,MAFP+8jB,EADF,EACEA,aADF,EAEE59iB,KAGEs9iB,GACF3mmB,KAAK2mmB,uBAEP3mmB,KAAKi7C,QAAQgsjB,KA1F8I,iCA6F7J,SAA2B5jf,EAAgB54F,GACzC,IACgBy8kB,EAIZ7jf,EAJF4jf,aACQE,EAGN9jf,EAHF7lB,OACc4pgB,EAEZ/jf,EAFFgkf,aACMC,EACJjkf,EADFh6D,KAGF,EAKIrpD,KAAKkqC,MAJP+8jB,EADF,EACEA,aACAI,EAFF,EAEEA,aAEAd,GAJF,EAGEl9iB,KAHF,EAIEk9iB,aAGEa,IAAqBC,GACvBC,GAAYf,EAAYa,GAGtBT,GACF3mmB,KAAK2mmB,qBAAqBQ,GAEvBF,IAAiBC,QAAuCprmB,IAAjBmrmB,GAC1CjnmB,KAAKi7C,QAAQisjB,KApH4I,oBAwH7J,WACE,MAGIlnmB,KAAKkqC,MAFPunO,EADF,EACEA,aAIIntP,EALN,iBAOA,OACE,cAACq1B,EAAD,aACEl+C,IAAKg2Q,GACDntP,QAnImJ,GAajImgB,aAwMxB8ikB,EAAyBtyhB,kBAC7B4pC,mBA7EsB,SAAC73E,EAAYkD,GACnC,IAUI68jB,EACAD,EAVFv4jB,EAEErE,EAFFqE,MACQi5jB,EACNt9jB,EADFszD,OAUF,OAHay9B,cAAiBj0F,IAI5B,KAAKvM,OAAKghG,OACRsre,EAAW1skB,YAAU07G,WACrB+wd,EAAazre,cAAiCr0F,GAC9C,MAEF,KAAKvM,OAAKkhG,eACRore,EAAW1skB,YAAUshG,eACrBmre,EAAavre,cAAmCv0F,GAChD,MAEF,QACE+/jB,EAAW1skB,YAAUgvB,KACrBy9iB,EAAa3re,cAA2Bn0F,GAG5C,IAAMygkB,EAAW7mlB,gBAAM2tB,EAAO,CAAC,SAAU,eAAWzyC,GAG9CmrmB,EAA6B,MAAdO,EACjBA,EACY,MAAZC,EACE7rjB,SAAS6rjB,EAAU,SACnB3rmB,EACAund,EAA+B,MAAhB4jJ,EACfzpgB,EAAyB,MAAhBypgB,EACXA,EACAH,EACAz9iB,EAAO,KACX,GAAIo9iB,EACF,OAAQM,GACN,KAAK1skB,YAAU07G,WACb1sF,EAAOssF,YAA4B,CAAEn4C,UAA9Bm4C,CAAwC3uG,GAC/C,MAEF,KAAK3M,YAAUshG,eACbtyE,EAAOusF,YAA8B,CAAEp4C,UAAhCo4C,CAA0C5uG,GACjD,MAEF,QACEqiB,EAAOqsF,YAAe,CAAEl4C,UAAjBk4C,CAA2B1uG,GAIxC,IAAMqgkB,EAAeh+iB,GAAgC,SAAvBA,EAAKtlD,IAAI,UACvC,MAAO,CACL+imB,aACAG,eACA5jJ,eACA7lX,SACAn0C,OACA09iB,WACAM,mBAIuB,SAAC18jB,GAC1B,OAAO,2BACFgC,6BAAmB,CAAEisC,YAASqthB,WAAUC,iBAAgBC,mBAAkBC,UAASC,gBAAeC,kBAAiBC,eAAe57jB,IADvI,IAEEA,gBAI2BsqC,CAE7B4xhB,GAEIa,EAAuB,SAACx9jB,EAAczuC,GAC1C,OAAO,cAAC8rmB,EAAD,2BAA4Br9jB,GAA5B,IAAmCunO,aAAch2Q,MAI1D,OADmBgpC,aAAmCijkB,M,4ECzQ3C/T,EAAW,SAACl7iB,EAAsBu/I,GAC7C,IAAM2va,EAAqB,SAArBA,EAAsBxge,GACP,aAAfA,EAAMjnI,MAA4D,WAArC,IAAO8lC,SAAU8iE,kBAChDrwD,EAAG0uF,GACC6wD,IACF/uF,oBAAoB,mBAAoB0+f,GAAoB,GAC5D1+f,oBAAoB,WAAY0+f,GAAoB,MAKtD,IAAO3hkB,WACTgjE,iBAAiB,mBAAoB2+f,GAAoB,GAGzD3+f,iBAAiB,WAAY2+f,GAAoB,M,6BCrCrD,kCACO,IAAM9njB,EAAsB,mB,6BCDnC,WAKIuvT,EALJ,OAKuB3qU,EAAMC,gBAMd0qU,O,6BCTf,IAAIzoJ,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1IngC,EAAG,6FACD8gN,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvC4iG,KAAM,OACN/iI,EAAG,mBACA,QAEL3K,EAAQywH,QAAUq4I,G,6BClBlB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,8VACD,eAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6CACD,WAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wJACD,UAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,6CAQM2jW,EAAgCnjkB,iBAAmD,eAE5EojkB,EAA4B,kBAAMpjkB,aAAiBmjkB,IAEjDA,O,6BCZf,wBAgBeE,IAbf,YAAsC,IAAbxhkB,EAAY,EAAZA,SACrB,OACI,cAAC,IAAD,CACIkzC,WAAW,EACXI,MAAM,EACN0hC,MAAO,CAAE0mB,KAAM,GACftoD,UAAU,SAJd,SAMKpzC,M,6KCgDDyhkB,E,0gBAHCC,GAAqC,mCACrCC,GAAoC,UAAMl3kB,kBAAN,OAAsBS,+C,SAE3Du2kB,K,YAAAA,E,aAAAA,M,SChCPG,GDuCCC,G,4MACGnhkB,MAAQ,CACbohkB,mBAAmB,EACnBx8V,KAAM,EACN6tL,YAAa,GACbj8T,WAAY,GACZ6qe,cAAe,EAAKn+jB,MAAMo+jB,8BAC1Bv6O,WAAY,KACZC,SAAU,I,EAeLu6O,iBAAmB,SAAC37U,GACzB,IAAOjiP,EAAY,EAAKT,MAAjBS,SACPA,EAAS,IAAIu7B,KAA4C0mN,IACzDjiP,EAASv+B,YAAK67lB,M,EAoQRn2N,gBAAkB,SAACt0Q,GACzB,IACMgre,EADoC,EAAKt+jB,MAAvCo+jB,8BACgD/8lB,QAAO,SAAAqxL,GAAQ,OAAIA,EAAS74L,IAAI,QAAQq1C,cAAc7vC,SAASi0H,EAAWpkF,kBAClI,EAAKwpE,SAAS,CAACylf,cAAeG,K,EAGxBC,iBAAmB,SAACthe,EAAOykI,GACjC,EAAKhpJ,SAAS,CAACgpJ,U,EAGTirL,wBAA0B,SAAA1vT,GAChC,EAAKvkB,SAAS,CAAC62U,YAAatyT,EAAMn6G,OAAOtxB,S,uDA9R3C,WACEsE,KAAKkqC,MAAMw+jB,+BACX1omB,KAAKkqC,MAAMy+jB,uC,gCAGb,SAA0Btqf,EAAW4yJ,GACnC,IAAOq3V,EAAiCtomB,KAAKkqC,MAAtCo+jB,8BACHA,IAAkCjqf,EAAUiqf,+BAC9CtomB,KAAK4iH,SAAS,CAACylf,cAAgBC,M,oBAUnC,WAAiB,IAAD,OACd,EAQItomB,KAAKkqC,MAPPgvC,EADF,EACEA,QACAvuC,EAFF,EAEEA,SACAoa,EAHF,EAGEA,YACA67T,EAJF,EAIEA,gBACAgoP,EALF,EAKEA,yBACA1thB,EANF,EAMEA,MACAnvD,EAPF,EAOEA,EAEF,EAQI/rB,KAAKgnC,MAPPohkB,EADF,EACEA,kBACAx8V,EAFF,EAEEA,KACA6tL,EAHF,EAGEA,YACAj8T,EAJF,EAIEA,WACA6qe,EALF,EAKEA,cACAt6O,EANF,EAMEA,WACAC,EAPF,EAOEA,SAGF,OACA,kCACE,eAACn8P,EAAA,EAAD,CACE34C,QAAS,CACP3hE,KAAM2hE,EAAQwxT,gBAFlB,SAKE,gBAAC7xT,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQM,UAA1C,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQ6hW,gBAA9D,UACE,gBAACliW,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAAlD,SACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,uCAGP,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,2CAGP,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMoB,GAAI,EAAIlB,UAAU,MAAMI,QAAQ,WAAWb,WAAW,SAAzF,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC+qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WACPl6E,EAASu/B,YAAO89hB,GAAD,oBAA0D,OACzEr9jB,EAAS,IAAI27B,KAA6C,CAACsmN,WAAY,QACnE7nO,IACFpa,EAASu/B,YAAO89hB,GAAD,sBAA4D,OAC3Er9jB,EAAS,IAAI67B,KAA6C,CAAComN,WAAY,UAP7E,SAWG7gQ,EAAE,yBAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACqwC,EAAA,EAAD,CAASC,MAAO0+e,EAA2B,GAAK78kB,EAAE,gDAAlD,SACE,gCACE,eAAC2uG,EAAA,EAAD,CACExd,UAAW0rf,EACX/jf,QAAS,WACPl6E,EAAS,IAAIq7B,IAAqC,CAAC6mN,aAAc9gQ,EAAE,qDAHvE,SAME,eAAC,KAAD,CAASo7F,SAAS,qBAM5B,eAACtuC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAGJ,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAC4M,WAAY,OAAQ1G,YAAatmC,EAAMZ,QAAQ,IAAnI,SACE,eAAC47O,EAAA,EAAD,CACElrM,YAAaj/F,EAAE,+CACfrwB,MAAO8hI,EACPhiB,SAAW,SAACpzG,GACV,IAAM1M,EAAQ0M,EAAE4kB,OAAOtxB,MACvB,EAAKknH,SAAS,CAAC4a,WAAY9hI,IAC3Bm9C,YAAW,kBAAM,EAAKi5V,gBAAgBp2Y,KAAQ,MAEhDohH,WAAY,CACVC,eACE,eAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACE,eAAC,IAAD,OAINpD,WAAW,SAIjB,eAAChhC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,KACvC,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIN,QAAS,EAApD,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC+7C,EAAA,EAAD,MAED5xE,GACC,eAAC8zB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAGd,QAAQ,SAASV,UAAWF,EAAQ2vhB,UAA9E,SACE,eAACrvf,EAAA,EAAD,CAAYE,QAAQ,UAAUD,MAAM,SAApC,SACG1tF,EAAE,kDAIT,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI71B,EAAc,EAAI,EAAG+0B,QAAQ,SAASV,UAAWF,EAAQ2vhB,UAAhG,SACE,eAACrvf,EAAA,EAAD,CAAYE,QAAQ,UAAUD,MAAM,SAApC,SACG1tF,EAAE,gDAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI71B,EAAc,EAAI,EAAGq0B,UAAWF,EAAQ2vhB,UAA9D,SACE,eAACrvf,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,oDAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQ2vhB,UAA5C,SACE,eAACrvf,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,wCAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC+7C,EAAA,EAAD,MAEF,eAAC99C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,IAAD,CAAS2vT,OAAO,EAAOu+N,gBAAgB,EAAvC,SAEIT,GAAiBA,EACdv4lB,MAAM87P,EAAO6tL,EAAa7tL,EAAO6tL,EAAcA,GAC/Czwb,KAAI,SAAC4zL,EAAUzgM,GACd,IAAM0wR,EAAejwF,EAAS74L,IAAI,QAC5B6oR,EAAahwF,EAAS74L,IAAI,MAC1BglmB,EAAgBnoP,EAAgBhgW,MAAM,CAAC,OAAQ,SAAWgsQ,EAChE,OACE,eAAC,WAAD,UACE,eAAC36D,EAAA,EAAD,CAAU74I,UAAWF,EAAQqlM,SAA7B,SACE,gBAAC1lM,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqB,QAAS,EAApD,UACGv1B,GACC,eAAC8zB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAAtE,SACE,eAAC,QAAD,CACEzqE,KAAK,sBACL8qE,UAAW8iS,KACXlyU,MAAO,CACL+7D,MAAO,UACPu6J,aAAcosB,EACd/nK,QAAS,kBAAMl6E,EAAS,IAAI67B,KAA6C,CAAComN,iBAC1E//J,YAAY,OAKpB,eAACh0C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI71B,EAAc,EAAI,EAAGy0B,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAAxF,SACE,eAAC,QAAD,CACEzqE,KAAK,oBACL8qE,UAAW8iS,KACXlyU,MAAO,CACL+7D,MAAO,UACPu6J,aAAcosB,EACd/nK,QAAS,kBAAMl6E,EAAS,IAAI27B,KAA6C,CAACsmN,iBAC1E//J,YAAY,OAIlB,gBAACh0C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI71B,EAAc,EAAI,EAAGu2D,MAAO,CAAC2B,SAAU,YAA7D,UACG8rf,IAAkBhkjB,GACjB,eAACklE,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6CAA8CuvF,MAAO,CAAC2B,SAAU,WAAY1iG,MAAO,IAArG,SACE,eAAC,IAAD,CAAc0rF,MAAM,cAGxB,eAACuT,EAAA,EAAD,CACEE,QAAQ,UACRzT,MAAM,UACN7sB,UAAWF,EAAQ2zM,aACnBhoK,QAAS,kBAAM,EAAK0jf,iBAAiB37U,IAJvC,SAMGC,OAGL,gBAACh0M,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQ8vhB,iBAA5C,UACE,eAAC/+e,EAAA,EAAD,CAASC,MAAO0+e,EAA2B,GAAK78kB,EAAE,gDAAlD,SACE,gCACE,eAAC2uG,EAAA,EAAD,CACE7V,QAAS,kBAAM,EAAK0jf,iBAAiB37U,IACrC1vK,UAAW0rf,EACX7smB,KAAK,QAHP,SAKE,eAAC,KAAD,CAAiBorH,SAAS,gBAIhC,eAAC8C,EAAA,EAAD,CAASC,MAAO0+e,EAA2B,GAAK78kB,EAAE,gDAAlD,SACE,gCACE,eAAC2uG,EAAA,EAAD,CACE7V,QAAS,WACP,EAAKjC,SAAS,CACZwlf,mBAAmB,EACnBr6O,WAAYnhG,EACZohG,SAAUnhG,KAGd3vK,UAAW0rf,EACX7smB,KAAK,QATP,SAWE,eAAC,KAAD,CAAmBorH,SAAS,yBArErBhrH,aAmFnC,eAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQ+vhB,oBAA7C,SACE,eAAC9vK,EAAA,EAAD,CACE7/W,UAAU,MACVlkE,MAAOizlB,GAAiBA,EAActsmB,KACtC09b,YAAaA,EACb7tL,KAAMA,EACNs9V,oBAAqB,CACnB,aAAc,iBAEhBC,oBAAqB,CACnB,aAAc,aAEhBC,mBAAoB,gBAAGp6lB,EAAH,EAAGA,KAAMC,EAAT,EAASA,GAAImG,EAAb,EAAaA,MAAb,OAAyB2W,EAAE,yBAA0B,CAAC/c,OAAMC,KAAImG,QAAOmoC,aAAa,GAAD,OAAKvuC,EAAL,YAAaC,EAAb,eAAsBmG,MAC7Hikb,iBAAiB,GACjBC,aAAct5b,KAAKyomB,iBACnBjvK,oBAAqBx5b,KAAK62b,iCAKlC,eAACwyK,GAAA,EAAD,CACE1+f,KAAMy9f,EACNp6O,SAAUA,EACVG,YAAa,CACX7xS,SAAU,KACVu9B,WAAW,GAEbo0Q,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAACwlf,mBAAmB,KAC3Dl/R,aAAc,WAEZ,GAAI6kD,EAAY,CAEdpjV,EAAS,IAAIy7B,KAAqC,CAACwmN,WAAYmhG,EAAYu7O,gBADnD,CAAC7jgB,OAAQ,cAEjC,EAAKmd,SAAS,CACZwlf,mBAAmB,MAIzB95O,aAAa,W,GAxRe7pV,iB,IA8WrBwwC,kBACbgG,aAlEa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,IAEzBygW,gBAAiB,CACf1nT,aAAcn4C,EAAMZ,QAAQ,IAE9B2uhB,oBAAqB,CACnB7thB,QAAS,OACTM,eAAgB,YAElBgvT,eAAgB,CACdnvT,OAAO,GAAD,OAAuB,EAAlBL,EAAMZ,UAAX,OAERuuhB,UAAW,CACT/shB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BikM,SAAU,CACRt4K,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BujB,YAAa,EACb7U,aAAc,EACd,UAAW,CACT7O,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAGxC8jf,iBAAkB,CAChBlyV,UAAW,OACX17L,QAAS,OACTnC,WAAY,UAEd4zM,aAAc,CACZxnK,OAAQ,UACR,UAAW,CACTnf,eAAgB,iBAiCD,CAAC8oB,WAAW,IAC/BnQ,mBAhBsB,SAAC73E,EAAYyF,GACnC,IAAMm0U,EAAkB5iO,eAA4Ch3G,GACpE,MAAO,CACL+d,YAAajB,eAA6B9c,GAC1CshkB,8BAA+Bvqd,eAAsC/2G,GACrE4hkB,yBAA0BjkjB,cAAqC3d,GAC/D45U,kBACAtiQ,cAAel1F,iBAAO,CACpBmkX,oBAAqB3sB,EAAgBhgW,MAAM,CAAC,OAAQ,QAAU,KAC9D2olB,kBAAmB3oP,EAAgBhgW,MAAM,CAAC,OAAQ,QAAU,WAtBvC,SAAC+pB,GAC1B,MAAO,CACL+9jB,6BAA8B,WAC5B/9jB,EAAS,IAAI26B,IAAmC,MAElDqjiB,mCAAoC,WAClCh+jB,EAAS,IAAI+7B,KAAyC,CAAC8iiB,gBAAiB,UACxE7+jB,EAAS,IAAI+7B,KAAyC,CAAC8iiB,gBAAiB,WAE1E7+jB,eAqBFwU,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMuqf,GACNxgS,kBAAkB,EAClBC,oBAAoB,IAPTxyP,CASbkzhB,I,mEEvbaxkf,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,+OACD,U,2IDuBCoimB,K,cAAAA,E,oBAAAA,E,oBAAAA,E,WAAAA,Q,KA2BL,IAsdejthB,iBAtdA,SAACC,GAAD,MAA+B,CAC5C62C,MAAO,CACLz1C,SAAU,IACVhB,MAAO,KAETszP,KAAM,CACJrzP,OAAQ,GAEVozP,cAAe,CACb73D,UAAW,IACXywC,UAAW,QAEbkiT,UAAW,CACT7hf,aAAc,oBACdtsC,MAAM,cAAD,OAAgBJ,EAAMZ,QAAQ,GAA9B,WAwcMW,EApcW,SAAC/wC,GACzB,IACEgvC,EAKEhvC,EALFgvC,QACAyxB,EAIEzgE,EAJFygE,KACAovC,EAGE7vG,EAHF6vG,iBACA2vd,EAEEx/jB,EAFFw/jB,aACA/ke,EACEz6F,EADFy6F,QAGIh6F,EAAW2F,wBACX4qC,EAAQwjD,eAERire,EAAoBj4jB,sBAAY8sG,gBAChCord,EAAqBl4jB,sBAAY4sG,gBACjCurd,EAAoBn4jB,sBAAY6sG,gBAEhCzB,EAAgBprG,sBAAYmtT,gBAC5BzhO,EAAa1rF,sBAAYwrG,gBAE/B,EAAkDz4G,WAAe,IAAjE,mBAAOqlkB,EAAP,KAA0BC,EAA1B,KACA,EAA0DtlkB,WAAexsB,kBAAzE,mBAAO+xlB,EAAP,KAA8BC,EAA9B,KAEA,EAA0CxlkB,WAAe,IAAzD,mBAAOylkB,EAAP,KAAsBC,EAAtB,KACA,EAAoD1lkB,WAAexsB,kBAAnE,mBAAOmylB,EAAP,KAA2BC,EAA3B,KACA,EAA0C5lkB,WAAe,IAAzD,mBAAO6lkB,EAAP,KAAsBC,EAAtB,KACA,EAAkD9lkB,WAAexsB,kBAAjE,mBAAOuylB,EAAP,KAA0BC,EAA1B,KAEA,EAA0ChmkB,WAAeyjkB,GAAcwC,OAAvE,mBAAOC,EAAP,KAAsBC,EAAtB,KACA,EAAsCnmkB,YAAe,GAArD,mBAAOomkB,EAAP,KAAoBC,GAApB,KACA,GAAoCrmkB,YAAe,GAAnD,qBAAOsmkB,GAAP,MAAmBC,GAAnB,MAEMvwP,KAAgBuvP,EAAsBjumB,MAAQqumB,EAAmBrumB,MAAQyumB,EAAkBzumB,MAGjG0oC,aAAgB,YACV,OAACklkB,QAAD,IAACA,OAAD,EAACA,EAAmB5tmB,OACtB4uC,EAAS,IAAIulB,OAEX,OAAC4sF,QAAD,IAACA,OAAD,EAACA,EAAe/gJ,OAClB4uC,EAAS,IAAIopS,OAEX,OAAC32M,QAAD,IAACA,OAAD,EAACA,EAAYrhI,OACf4uC,EAAS,IAAI20B,OAEd,IAEH76B,aAAgB,WACTkmE,IACHs/f,EAAyBhylB,kBACzBoylB,EAAsBpylB,kBACtBwylB,EAAqBxylB,kBACrB2ylB,EAAiB1C,GAAcwC,OAC/BI,IAAe,GACfE,IAAc,MAEf,CAACrggB,IAEJ,IAAMsggB,GAAY,WAChB,IAAIpB,EAAJ,CAIA,IAAMqB,EAAYL,EAAW,OAAGjB,QAAH,IAAGA,OAAH,EAAGA,EAAoB/qlB,SAAS0C,SAAWtJ,eAAK,CAACpJ,OAAOkrI,KACjFoxd,EAAelzlB,iBAEnB,GAAIuylB,EAAkBzumB,KAAM,CAE1B,IAAMqvmB,EAA2BZ,EAAkBxhmB,KAAI,SAACo+N,GAAD,OAAcA,EAASikY,sBAE9EH,EAAUx+lB,SAAQ,SAAC4/C,GACjB8+iB,EAAyB1+lB,SAAQ,SAAC2+lB,GAChCF,EAAeA,EAAa/+lB,KAAKgd,iBAAO,CACtCkjC,SAAU3qD,OAAO2qD,GACjB++iB,mBAAoB1pmB,OAAO0pmB,iBAK7BrB,EAAsBjumB,KAExBiumB,EAAsBt9lB,SAAQ,SAACuwI,GAC7Bkud,EAAeA,EAAa/+lB,KAAKgd,iBAAO,CACtC6zH,aAAcA,EAAal5I,IAAI,SAC/Bq8I,eAAgBnD,EAAal5I,IAAI,YAKrCqmmB,EAAmB19lB,SAAQ,SAAC0qH,GAC1B+ze,EAAeA,EAAa/+lB,KAAKgd,iBAAO,CACtCyX,WAAYu2F,EAASn2F,GACrBm2F,SAAUA,EAAS17H,YAMzByvmB,EAAeD,EAAUv/lB,QAAO,SAACutI,EAAK5sF,GACpC,IAAMg/iB,EAAkBH,EAAax/lB,QAAO,SAACiiR,EAAM29U,GAAiB,IAAD,EACjE,OAAI,UAAC3B,EAAmB7lmB,IAAI8K,OAAOy9C,WAA/B,aAAC,EAA0CroD,IAA1C,UAAiDsnmB,EAAYxnmB,IAAI,mBAAqB,EAAtF,YAA2FwnmB,EAAYxnmB,IAAI,eAAiB,KAGxH6pR,EAFAA,EAAKxhR,KAAKm/lB,EAAY7jmB,IAAI,WAAY/F,OAAO2qD,OAIrDr0C,kBACH,OAAOihI,EAAI5tI,OAAOggmB,KACjBrzlB,kBAGDkzlB,EAAapvmB,KACf4uC,EAAS,IAAIylB,IAAmB,CAC9Bo7iB,UAAWL,EACXM,WAAYpumB,QAAQmtmB,EAAkBzumB,MAEtCurU,UAAW,WACL4jS,EAAUnvmB,KAAO,EACnB4uC,EAAS,IAAIimB,KAAuB,CAAEs6iB,UAAWA,EAAU3slB,UAE3DosB,EAAS,IAAI+lB,KAAyB,CAAEpE,SAAU3qD,OAAOupmB,EAAUnnmB,IAAI,OAEzE4gI,QAIJA,MAiBE+me,GAA4B,SAACtjmB,GACjC,IAAMyH,EAAWzH,EAAE4kB,OAAOtxB,MAC1B,GAAImU,IAAa86lB,EAAe,CAC9B,OAAQ96lB,GACN,KAAKq4lB,GAAcwC,MACjBL,EAAsBpylB,kBACtBwylB,EAAqBxylB,kBACrB,MACF,KAAKiwlB,GAAc3oe,SACjB0qe,EAAyBhylB,kBACzBwylB,EAAqBxylB,kBACrB,MACF,KAAKiwlB,GAAcyD,SACjB1B,EAAyBhylB,kBACzBoylB,EAAsBpylB,kBACtB,MACF,KAAKiwlB,GAAc1gW,IACjByiW,EAAyBntd,GACzButd,EAAsBpylB,kBACtBwylB,EAAqBxylB,kBAQzB2ylB,EAAiB/6lB,KAIf+7lB,GAAsB,SAACC,EAAcpwmB,GACzC,OAAO,eAACqwmB,GAAA,EAAD,yBAAiBrwmB,IAAKA,GAASowmB,GAA/B,IAA6CE,UAAW,OAE3DC,GAAQvnkB,aAAiBmnkB,IAE/B,OACE,eAAC51S,GAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAASA,EACTzrD,QAAS,CACP64C,MAAO74C,EAAQ64C,OAJnB,SAOE,gBAACkkM,GAAA,EAAD,WACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,cAAcqV,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA/E,SACC,sBAED,eAACk/B,EAAA,EAAD,CAAY8B,MAAO,CAAE+X,aAAcn4C,EAAMZ,QAAQ,IAAjD,SACG,oCAmBH,gBAACzB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAACo5S,GAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAAS2ue,IAAkBzC,GAAcwC,MACzChvmB,MAAOwsmB,GAAcwC,MACrBxtf,SAAU6tf,GACVvvf,SAAUkwf,KAEZ,eAAClyf,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,mDAIH0kgB,IAAkBzC,GAAcwC,OAAS,uBAAKpvf,MAAO,CAAE4M,WAAY,GAAImL,aAAc,IAA5C,UACvC,eAAC0nS,GAAA,EAAD,CACE/uX,SAAsB,OAAb8wG,QAAa,IAAbA,OAAA,EAAAA,EAAev+H,SAAU,GAClC0tlB,iBAAkBD,GAClBtwmB,MAAO,KACP8/G,SAAU,SAACpzG,EAAG1M,GACZuumB,EAAyBD,EAAsB59lB,KAAKgd,iBAAO1tB,MAE7D+mH,WAAYqnf,EACZtnf,cAAe,SAACp6G,EAAG1M,EAAO6vH,GAEtBw+e,EADa,UAAXx+e,EACmB,GAEA7vH,IAGzBwwmB,cAAc,EACd7qe,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAY,sBAAsB1P,MAAO,CAAEhgC,MAAO,SAAc3oC,KACpG6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,WAGxDsumB,EAAsBjumB,KAAO,GAC3B,uCACE,eAACy9G,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE//B,OAAQL,EAAMZ,QAAQ,EAAG,IAAlE,mBACM0vhB,EAAsBjumB,KAD5B,YACmE,IAA/BiumB,EAAsBjumB,KAAa,eAAiB,gBADxF,YAGA,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SAEIq7R,EAAsBhhmB,KAAI,SAACi0I,EAAc9gJ,GAAf,OAAyB,eAAC4pU,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOm8G,EAAal5I,IAAI,SAAUmiU,SAAU,kBA1H7H,SAAC/pU,GAChC8tmB,EAAyBD,EAAsBxhf,OAAOrsH,IAyH4GgwmB,CAAyBhwmB,KAA3GA,cAU5E,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAACo5S,GAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAAS2ue,IAAkBzC,GAAc3oe,SACzC7jI,MAAOwsmB,GAAc3oe,SACrBriB,SAAU6tf,GACVvvf,SAAUkwf,KAEZ,eAAClyf,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,gDAIH0kgB,IAAkBzC,GAAc3oe,UAAY,uBAAKjkB,MAAO,CAAE4M,WAAY,GAAImL,aAAc,IAA5C,UAC1C,eAAC0nS,GAAA,EAAD,CACE/uX,SAAmB,OAAVoxF,QAAU,IAAVA,OAAA,EAAAA,EAAY7+G,SAAU,GAC/B0tlB,iBAAkBD,GAClBtwmB,MAAO,KAIP8/G,SAAU,SAACpzG,EAAG1M,GACZ2umB,EAAsBD,EAAmBh+lB,KAAK1Q,IAC1C8umB,EAAkBzumB,KAAO,GAC3B0umB,EAAqBxylB,mBAGzBwqG,WAAYynf,EACZ1nf,cAAe,SAACp6G,EAAG1M,EAAO6vH,GAEtB4+e,EADa,UAAX5+e,EACe,GAEA7vH,IAGrBwwmB,cAAc,EACd7qe,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAY,kBAAkB1P,MAAO,CAAEhgC,MAAO,SAAc3oC,KAChG6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,WAGxD0umB,EAAmBrumB,KAAO,GACxB,uCACE,eAACy9G,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE//B,OAAQL,EAAMZ,QAAQ,EAAG,IAAlE,mBACM8vhB,EAAmBrumB,KADzB,YAC6D,IAA5BqumB,EAAmBrumB,KAAa,WAAa,aAD9E,YAGA,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SAEIy7R,EAAmBphmB,KAAI,SAACouH,EAAUj7H,GAAX,OAAqB,eAAC4pU,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOs2F,EAAS17H,MAAOwqU,SAAU,kBAhL/G,SAAC/pU,GAC5BkumB,EAAsBD,EAAmB5hf,OAAOrsH,IA+KgGiwmB,CAAqBjwmB,KAA5FA,cAUrE,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAACo5S,GAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAAS2ue,IAAkBzC,GAAcyD,SACzCjwmB,MAAOwsmB,GAAcyD,SACrBzuf,SAAU6tf,GACVvvf,SAAUkwf,KAEZ,eAAClyf,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,+CAIH0kgB,IAAkBzC,GAAcyD,UAAY,uBAAKrwf,MAAO,CAAE4M,WAAY,GAAImL,aAAc,IAA5C,UAC1C,eAAC0nS,GAAA,EAAD,CACE/uX,SAA0B,OAAjB29jB,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBprlB,SAAU,GACtC0tlB,iBAAkBD,GAClBtwmB,MAAO,KAIP8/G,SAAU,SAACpzG,EAAG1M,GACZ+umB,EAAqBD,EAAkBp+lB,KAAK1Q,IACxCsumB,EAAsBjumB,KAAO,GAC/BkumB,EAAyBhylB,kBAEvBmylB,EAAmBrumB,KAAO,GAC5BsumB,EAAsBpylB,mBAG1BwqG,WAAY6nf,EACZ9nf,cAAe,SAACp6G,EAAG1M,EAAO6vH,GAEtBg/e,EADa,UAAXh/e,EACe,GAEA7vH,IAGrBwwmB,cAAc,EACd7qe,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAY,kBAAkB1P,MAAO,CAAEhgC,MAAO,SAAc3oC,KAChG6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,6BAAyBgH,EAAO6rf,sBAGpE7B,EAAkBzumB,KAAO,GACvB,uCACE,eAACy9G,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE//B,OAAQL,EAAMZ,QAAQ,EAAG,IAAlE,mBACMkwhB,EAAkBzumB,KADxB,YAC2D,IAA3ByumB,EAAkBzumB,KAAa,WAAa,YAD5E,YAGA,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SAEI67R,EAAkBxhmB,KAAI,SAACo+N,EAAUjrO,GAAX,OAAqB,eAAC4pU,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOsmM,EAASilY,gBAAiBnmS,SAAU,kBAzOxH,SAAC/pU,GAC5BsumB,EAAqBD,EAAkBhif,OAAOrsH,IAwO2GmwmB,CAAqBnwmB,KAAtGA,cASpE,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,eAACo5S,GAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAAS2ue,IAAkBzC,GAAc1gW,IACzC9rQ,MAAOwsmB,GAAc1gW,IACrBtqJ,SAAU6tf,GACVvvf,SAAUkwf,KAEZ,eAAClyf,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,0BAKHyjgB,GACE,gBAAC7whB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA3F,UACE,eAAC8hD,GAAA,EAAD,CAAUn2B,MAAM,UAAUiX,SAAU6tf,GAAYvvf,SAAU,SAACpzG,EAAG1M,GAAJ,OAAcovmB,GAAepvmB,MACvF,eAAC89G,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,2CAMT,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA5E,UACE,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS8f,EACTrpB,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IACpC4iC,SAAU6tf,IAAclB,EAJ1B,SAMI,WAEJ,eAACllf,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS8lf,IAAkBzC,GAAc1gW,IAAM,kBAAMwjW,IAAc,IAAQC,GAC3E/tf,SAAUu9P,IAAeswP,IAAclB,EACvCzlV,UAAWylV,GAAqB,eAACjoS,GAAA,EAAD,CAAkB7lU,KAAK,QAJzD,SAMI,WAKJgvmB,IAAc,uCACZ,eAACvxf,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,GAAI2yC,UAAW,SAAjF,SACG,iDAEH,gBAACp0C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA5E,UACE,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMmmf,IAAc,IAC7B1vf,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IACpC4iC,SAAU2sf,EAJZ,SAMI,WAEJ,eAACllf,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAASomf,GACT/tf,SAAU2sf,EACVzlV,UAAWylV,GAAqB,eAACjoS,GAAA,EAAD,CAAkB7lU,KAAK,QAJzD,SAMI,0BE1aHwwmB,GA3DM,SAACrikB,GACpB,IACEygE,EAIEzgE,EAJFygE,KACA++f,EAGEx/jB,EAHFw/jB,aACA/ke,EAEEz6F,EAFFy6F,QACAukM,EACEh/R,EADFg/R,aAGIhuP,EAAQwjD,eACd,EAAsCj6F,YAAe,GAArD,mBAAOomkB,EAAP,KAAoBC,EAApB,KAQA,OANArmkB,aAAgB,WACTkmE,GACHmggB,GAAe,KAEhB,CAACnggB,IAGF,eAACqrN,GAAA,EAAD,CACErxL,QAASA,EACT,mBAAiB,0BACjBh6B,KAAMA,EAHR,SAKE,gBAACsrN,GAAA,EAAD,WACE,eAACz8M,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,mEAIDyjgB,GACE,gBAAC7whB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA3F,UACE,eAAC8hD,GAAA,EAAD,CAAUn2B,MAAM,UAAUuV,SAAU,SAACpzG,EAAG1M,GAAJ,OAAcovmB,EAAepvmB,MACjE,eAAC89G,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,yCAMT,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA5E,UACE,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS8f,EACTrpB,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IAHtC,SAKI,WAEJ,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMqkN,EAAa2hS,IAF9B,SAII,oBCoEC5vhB,iBA5GA,SAACC,GAAD,MAA+B,CAK5C0zP,KAAM,CACJrzP,OAAQ,GAEVozP,cAAe,CACb73D,UAAW,IACXywC,UAAW,QAEbkiT,UAAW,CACT7hf,aAAc,oBACdtsC,MAAM,cAAD,OAAgBJ,EAAMZ,QAAQ,GAA9B,WA8FMW,EA1FS,SAAC/wC,GACvB,IACEgvC,EAMEhvC,EANFgvC,QACAyxB,EAKEzgE,EALFygE,KACAovC,EAIE7vG,EAJF6vG,iBACArzF,EAGExc,EAHFwc,OACAgjjB,EAEEx/jB,EAFFw/jB,aACA/ke,EACEz6F,EADFy6F,QAGIh6F,EAAW2F,wBACX4qC,EAAQwjD,eAER2f,EAAgB3sG,sBAAY0sG,gBAElC,EAAsC35G,YAAe,GAArD,mBAAOomkB,EAAP,KAAoBC,EAApB,KAEArmkB,aAAgB,WACdqmkB,GAAe,KACd,CAACnggB,IA2BJ,OACE,eAACqrN,GAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAASA,EACTzrD,QAAS,CACP64C,MAAO74C,EAAQ64C,OAJnB,SAOE,gBAACkkM,GAAA,EAAD,WACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,cAA/B,SACG,wEAIDyjgB,GACE,gBAAC7whB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA3F,UACE,eAAC8hD,GAAA,EAAD,CAAUn2B,MAAM,UAAU+1B,QAAS6ue,EAAarvf,SAAU,kBAAMsvf,GAAgBD,MAChF,eAACrxf,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,8CAMT,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEgB,UAAWphC,EAAMZ,QAAQ,IAA5E,UACE,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS8f,EACTrpB,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IAHtC,SAKI,WAEJ,eAACqqC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QA3Dc,WACtB,GAAIgmf,EAAa,CACf,IAAIK,EAAYjzlB,eAAa,IAChB,OAAbomI,QAAa,IAAbA,KAAe3xI,SAAQ,SAAC8/lB,EAAiBlgjB,GACvC4+iB,EAAYA,EAAU9+lB,KAAKzK,OAAO2qD,OAGpC3hB,EAAS,IAAI2lB,IAA0B,CACrCm8iB,QAASx0lB,eAAK,CAACyuC,IACf4gR,UAAW,WACT38R,EAAS,IAAIimB,KAAuB,CAAEs6iB,UAAWA,EAAU3slB,cAG/DomH,SAEAh6F,EAAS,IAAI2lB,IAA0B,CACrC46iB,UAAWjzlB,eAAK,CAAC8hI,IACjButL,UAAW,WACT38R,EAAS,IAAI+lB,KAAyB,CAAEpE,SAAUytF,SAGtDpV,KAoCI,SAII,uBCxHP,SAAS+ne,GAAmBC,GACjC,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAyBhhmB,QAAO,SAACutI,EAAK0zd,GAC3C,OAAO1zd,EAAIxxI,IAAJ,UAAWklmB,EAAShslB,MAAM,CAAC,eAAgB,QAAU,EAArD,YAA0DgslB,EAAShslB,MAAM,CAAC,WAAY,QAAU,GAAKgslB,KAC3Gh6lB,iBAuDE,IAUFqqe,I,SAAAA,K,6CAAAA,E,sBAAAA,Q,KAiRUhia,cApQA,SAACC,GAAD,MAA+B,CAC5C2xhB,oBAAqB,CACnB/whB,QAASZ,EAAMZ,WAEjB6iI,KAAM,CACJm7N,aAAc,WACd/7S,WAAY,QAEd9X,MAAO,CACLnpC,MAAO,KAETwxhB,eAAgB,CACdvxhB,OAAQL,EAAMZ,QAAQ,EAAG,GACzBw8L,UAAW,IACXywC,UAAW,QAEbqnB,KAAM,CACJrzP,OAAQ,GAEVq+W,QAAS,CACPlxT,YAAa,GAEfkgR,OAAQ,CACN5mR,KAAM,WA6OK/mD,EAzO6B,SAAC,GAAoE,IAAnE/B,EAAkE,EAAlEA,QAAS6gE,EAAyD,EAAzDA,iBAAkBrzF,EAAuC,EAAvCA,OAAQgjjB,EAA+B,EAA/BA,aACzE/+jB,EAAW2F,wBACX4qC,EAAQwjD,eAERkre,EAAqBl4jB,sBAAY4sG,gBACjCyud,EAAyBr7jB,sBAAY6sG,gBAErCoud,EAA0Bj7jB,sBAAYysG,aAA0BtvI,OAAOkrI,KAE7E,EAAgFt1G,WAAekokB,GAA/F,mBAAOK,EAAP,KAAyCC,EAAzC,KACA,EAAoCxokB,WAAe,IAAnD,mBAAO+4F,EAAP,KAAmB0ve,EAAnB,KACA,EAAwBzokB,WAAe,GAAvC,mBAAOmnO,EAAP,KAAauhW,EAAb,KAEA,EAA0D1okB,YAAe,GAAzE,mBAAO2okB,EAAP,KAA8BC,EAA9B,KACA,EAA8C5okB,YAAe,GAA7D,mBAAOwxZ,EAAP,KAAwBq3K,EAAxB,KACA,EAAgD7okB,WAAe,MAA/D,mBAAO8okB,EAAP,KAAyBC,EAAzB,KAEA,EAAsD/okB,YAAe,GAArE,mBAAOgpkB,EAAP,KAA4BC,EAA5B,KAEMC,EAAyC,OAAGX,QAAH,IAAGA,OAAH,EAAGA,EAAkCl9lB,MAjI/D,IAiIqE87P,EAjIrE,KAiI6FA,EAAO,IACnHgiW,EAA8C,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAA2C5xmB,KAElG0oC,aAAgB,WACyC,IAAnDmpkB,GAAwDhiW,EAAO,GACjEuhW,EAAQvhW,EAAO,KAEhB,CAACgiW,EAAgDhiW,IAEpDnnO,aAAgB,WACdwokB,EAAoCY,EAAsBrwe,MACzD,CAACmve,IAEJ,IAqCMkB,EAAwB,SAACC,GAC7B,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAatve,QACRmue,EAAwBhhmB,QAAO,SAACutI,EAAK0zd,GAC1C,IAAMtpP,EAAmBspP,EAAShslB,MAAM,CAAC,eAAgB,UAAY,KAC/DkyM,EAAe85Y,EAAShslB,MAAM,CAAC,WAAY,oBAAsB,KACjEggB,EAAegskB,EAAShslB,MAAM,CAAC,WAAY,UAAY,KAC7D,OAAoB,OAAhB0iW,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBlqU,cAAc7vC,SAASukmB,EAAY10jB,kBAArD,OAAuE05K,QAAvE,IAAuEA,OAAvE,EAAuEA,EAAc15K,cAAc7vC,SAASukmB,EAAY10jB,kBAAxH,OAA0IxY,QAA1I,IAA0IA,OAA1I,EAA0IA,EAAcwY,cAAc7vC,SAASukmB,EAAY10jB,gBACtL8/F,EAAI9sI,KAAKwgmB,GAET1zd,IAERjhI,kBAEI00lB,GAeLoB,EAAqB,kBACzB,eAACC,GAAA,EAAD,CACE5nN,WACE,eAACC,GAAA,EAAD,CACEpgT,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/B/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,KACrCg5C,MAAM,MACNi2C,OAAO,MACPjW,MAAO,CAACgB,UAAWphC,EAAMZ,QAAQ,GAAI4tC,WAAYhtC,EAAMZ,QAAQ,MAPrE,SAWE,eAACk/B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B,gCAI9B,OACE,gBAAC7gC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,eAACg/B,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE6L,SAAU,OAAnD,SACG,eAEH,gBAACtuC,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,WAAWwhC,MAAO,CAAEhgC,MAAO,KAAxE,WAE2B,OAAvBqxhB,QAAuB,IAAvBA,OAAA,EAAAA,EAAyB5wmB,MAAO,GAC9B,eAAC4oH,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAM6of,GAAuB,IAFxC,SAIG,eAIP,eAAC/of,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMwof,GAAyB,IAF1C,SAIG,kBAKP,eAACx0hB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWU,KAAK,SAA/C,SACE,eAACgqC,GAAA,EAAD,CACEwG,YAAY,yBACZtvH,MAAO8hI,EACPhiB,SAzDuB,SAACpzG,GAC9B,IAAMsub,EAAgBtub,EAAE4kB,OAAOtxB,MAC/BwxmB,EAAcx2K,GACdy2K,EAAQ,GACRF,EAAoCY,EAAsBn3K,KAsDpDx5U,UAAWyvf,EACXhrS,aACE,eAAC3kN,EAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,eAAC,GAAD,CAAQkK,SAAS,QAAQ7L,MAAO,CAAErV,MAAO,YAG7C/sB,QAAS,CACPurC,MAAOvrC,EAAQurC,WAMnBsof,EACI,sBAAKzxf,MAAO,CAAEiW,OAAQ,OAAQj2C,MAAO,QAArC,SACE,eAAC,KAAD,CACE0vT,QAAS,eAAC,KAAD,IACTC,SAAU,eAACp2E,GAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B,eACrCgxR,gBAAgB,MAGlBkjO,EACE,iCACE,sBAAKx0hB,UAAWF,EAAQ4zhB,eAAxB,gBAEIa,QAFJ,IAEIA,OAFJ,EAEIA,EAA2C3kmB,KAAI,SAAC4jmB,EAAUzwmB,GACxD,IAAMg9H,EAAQyze,EAAShslB,MAAM,CAAC,eAAgB,SACxCm/G,EAAM6se,EAAShslB,MAAM,CAAC,WAAY,SAClCkgB,EAAQq4F,IAAU4G,EACpB5G,EADU,UAEPA,GAAS,MAFF,cAEa4G,GAAO,OAClC,OACE,eAACgmM,GAAA,EAAD,CAEE3sP,UAAWF,EAAQ01P,KACnB9tS,MAAOA,EACPolS,SAAU,WACRsnS,EAAoBZ,GACpBU,GAAmB,KALhBnxmB,QAYf,eAACg9b,EAAA,EAAD,CACE7/W,UAAU,MACVlkE,MAAK,OAAE43lB,QAAF,IAAEA,OAAF,EAAEA,EAAkCjxmB,KACzCu9b,aApGO,SAACnyT,EAAgB4tT,GACxCo4K,EAAQp4K,IAoGQnpL,KAAMA,EACN6tL,YAjTG,IAkTHF,mBAAoB,GACpBG,iBAAkBC,KAClBvgX,UAAWF,EAAQkgX,WACnBlgX,QAAS,CACP0gX,QAAS1gX,EAAQ0gX,QACjBhxC,OAAQ1vU,EAAQ0vU,aAItB,eAACmlN,EAAD,IAGV,eAAC,GAAD,CACEpjgB,KAAMsrV,EACNyzK,aAAcA,EACd/ke,QAAS,kBAAM2oe,GAAmB,IAClCpkS,aApLe,SAAC2hS,GACpB,IAAMoD,EAAkB,UAAMV,EAAiB3slB,MAAM,CAAC,eAAgB,QAAU,EAAxD,YAA6D2slB,EAAiB3slB,MAAM,CAAC,WAAY,QAAU,GAG/HstlB,EAAcj2lB,eAAa,CAACs1lB,EAAiBxpmB,IAAI,gBAGjDmnmB,EAAYjzlB,eAAa,IACzB4ylB,GACFjB,EAAmBl9lB,SAAQ,SAACyhmB,EAAsB7hjB,GAEhD,GADA4+iB,EAAYA,EAAU9+lB,KAAKzK,OAAO2qD,IAC9BA,IAAaz9C,OAAOkrI,GAAmB,CACzC,IAAM6yd,EAAWuB,EAAqBpqmB,IAAIkqmB,GACtCrB,IACFsB,EAAcA,EAAY9hmB,KAAKwgmB,EAAS7omB,IAAI,oBAKlD4mC,EAAS,IAAI2lB,IAA0B,CACrC89iB,YAAaF,EACb5mS,UAAW,WACT38R,EAAS,IAAIimB,KAAuB,CAAEs6iB,UAAWA,EAAU3slB,cAG/D+ulB,GAAmB,KAEnB3ikB,EAAS,IAAI2lB,IAA0B,CACrC89iB,YAAaF,EACb5mS,UAAW,WACT38R,EAAS,IAAI+lB,KAAyB,CAAEpE,SAAUytF,SAGtDuzd,GAAmB,OAsJnB,eAAC,GAAD,CACE3igB,KAAMyigB,EACNrzd,iBAAkBA,EAClB2vd,aAAcA,EACd/ke,QAAS,kBAAM0oe,GAAyB,MAG1C,eAAC,GAAD,CACE1igB,KAAM8igB,EACN1zd,iBAAkBA,EAClBrzF,OAAQA,EACRgjjB,aAAcA,EACd/ke,QAAS,kBAAM+oe,GAAuB,YCtV/BW,OAbf,SAAsB1yjB,EAAS+4Q,EAAUuzH,GAErC,IAAMqmL,EAAO,IAAIr5H,KAAK,CAACt5b,GAAU,CAAEz7C,KAAM+nb,IACnCzmV,EAAM64G,IAAIm2J,gBAAgB89P,GAG1BC,EAAMvokB,SAASC,cAAc,KACnCsokB,EAAInhf,KAAO5rB,EACX+sgB,EAAIpyT,aAAa,WAAYuY,GAC7B65S,EAAIC,QACJD,EAAIr/lB,U,wGCGFsgH,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC2gV,SAAU,CACRvgV,MAAO,MACPC,OAAQ,cAINkzhB,GAA+D,SAAC,GAO/D,IANLC,EAMI,EANJA,SAMI,IALJC,qBAKI,MALY,IAKZ,MAJJC,sBAII,aAHJ/yM,gBAGI,MAHO,EAGP,MAFJ/6X,aAEI,MAFI,GAEJ,MADJmlE,aACI,MADI,YACJ,EAEE/sB,EAAUs2C,KAShB,OACE,gBAAColM,GAAA,EAAD,CACE33M,SAAS,WACT7hC,QAAQ,cACRK,cAAc,SAHhB,UAKE,eAACmmP,GAAA,EAAD,CAAkBxoP,UAAWF,EAAQ2iV,SAAU51T,MAAOA,EAAOyT,QAAQ,SAAS39G,KAAM,IAAKL,MAAOmga,EAAUzyG,gBAAiB,SAAChhT,GACtHyzZ,GAAY,KACdhjX,YAAW,WACT61jB,MACCC,MAILC,GACE,eAACh6S,GAAA,EAAD,CACEtgM,IAAK,EACL/5G,KAAM,EACNg6G,OAAQ,EACR/5G,MAAO,EACPyiG,SAAS,WACT7hC,QAAQ,OACRnC,WAAW,SACXyC,eAAe,SARjB,SAUE,eAAC89B,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBAA6BmiT,EAA7B,SAKJ/6X,GACE,eAAC8zR,GAAA,EAAD,CACEtgM,IAAK,IACL/5G,KAAM,EACNg6G,OAAQ,EACR/5G,MAAO,EACPyiG,SAAS,WACT7hC,QAAQ,OACRnC,WAAW,SACXyC,eAAe,SARjB,SAUE,eAAC89B,EAAA,EAAD,CAAYE,QAAQ,KAAKD,MAAM,SAA/B,SA/CJ17F,KAAErc,QAAQo/B,GACLA,EAAM+6X,GAER/6X,UAoDI2D,OAAM4G,KAAKojkB,I,oDC1Ebl1kB,GAAsB,CACjC,WACA,qEAGWqqS,GAAuB,SAACloU,GACnC,IAAMK,EAAOL,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAChDwE,EAAOxE,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAMtD,MADgB,CAHKK,EAAOs9B,kBAAP,UAA2BssE,IAAQ55E,EAAE,wDAArC,YAAgGsN,iBAAa,QAA7G,QACKE,GAAoBhwB,SAASrJ,IAASA,GAAQylG,IAAQ55E,EAAE,wDAEjCxgB,QAAO,SAACsM,GAAD,OAAOA,KAAG4J,KAAK,aACrD3lB,GASd0zH,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,MAmE1B2zhB,GA/DsD,SAAC,GAG/D,IAAD,EAFJ7tW,EAEI,EAFJA,SAEI,IADJ8tW,qBACI,MADY,GACZ,EAGEnkkB,GADU6kF,KACCl/E,yBACX6qE,EAAazpE,sBAAY0pE,wBAAc4lJ,IACvCvtC,EAAI,OAAGt4G,QAAH,IAAGA,GAAH,UAAGA,EAAYp3G,IAAI,eAAnB,aAAG,EAA0B,GAMvC,OACE,gBAAC6wT,GAAA,EAAD,CACE33M,SAAS,WACT7hC,QAAQ,cACRK,cAAc,SAHhB,UAKE,eAAC,QAAD,CACEnC,UAAWqqP,KACXn1T,KAAK,OACLwrG,SAAU4pN,GACV15R,MAAO,CACLmmU,kBAAmB,CACjB/0P,MAAO,CAAEhgC,MAAO,QAASi2C,OAAQ,aAMrCkiG,GACA,eAAC56I,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACf,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,SACE,eAACo8O,EAAA,EAAD,CACE56M,MAAO,CAAEhgC,MAAO,SAChB4hC,UAAU,EACVxhH,MAAK,OAAE+3N,QAAF,IAAEA,OAAF,EAAEA,EAAMjlN,KACbsuG,WAAY,CACVC,eAAgB02G,GAAQ,eAACz2G,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACtB,eAAC,KAAD,MAEF0kN,aAAc,eAAC3kN,EAAA,EAAD,CAAgBC,SAAS,MAAzB,SACZ,eAACyd,EAAA,EAAD,CAAY7V,QAlCR,WAClBl6E,EAASu/B,YAAO82L,EAAU,OAAQ,QAiCpB,SAAkC,eAAC,KAAD,eAS5C8tW,GACE,eAACl6S,GAAA,EAAD,CAAK3iM,WAAY,EAAjB,SACG68e,Q,iGCvEPt/e,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC6zhB,kBAAmB,CACjB5nf,SAAU,QACVkM,aAAcn4C,EAAMZ,WAEtB00hB,mBAAoB,CAClB7nf,SAAU,QACVkM,aAAcn4C,EAAMZ,WAEtB20hB,qBAAsB,CACpBztf,YAAatmC,EAAMZ,QAAQ,IAE7B40hB,eAAgB,CACd1tf,YAAatmC,EAAMZ,QAAQ,GAC3B2rB,MAAO,SAETknB,OAAQ,CACN7xC,MAAO,QACPC,OAAQL,EAAMZ,QAAQ,IAExB3F,aAAc,CACZ0+C,aAAcn4C,EAAMZ,QAAQ,IAE9B6oF,MAAO,CACL7nF,MAAO,QACPisO,UAAW,OACXt9K,UAAW,OACX5W,aAAc,OACdyjJ,UAAW,aAUTq4V,GAAmC,SAACjlkB,GAExC,IAAMgvC,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACAqjlB,EAA6BllkB,EAA7BklkB,gBAAiB7gb,EAAYrkJ,EAAZqkJ,QACnBruL,EAAI,OAAGquL,QAAH,IAAGA,OAAH,EAAGA,EAASxqL,IAAI,QAEpBsrmB,GAAsB,OAAP9gb,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,aAAb,OAA0BwqL,QAA1B,IAA0BA,OAA1B,EAA0BA,EAASxqL,IAAI,YACtDurmB,GAAoB,OAAP/gb,QAAO,IAAPA,OAAA,EAAAA,EAASxqL,IAAI,UAAWsrmB,EAS3C,OACE,gBAACz6S,GAAA,EAAD,CAAKx5O,QAAQ,OAAOK,cAAc,SAASxC,WAAW,SAASyC,eAAe,SAAS61C,OAAO,OAA9F,UAEa,YAATrxH,EACE,eAACqvmB,GAAA,EAAD,CAAwBn2hB,UAAWF,EAAQ61hB,kBAAmBS,UAAU,YAExE,eAACC,GAAA,EAAD,CAAkBr2hB,UAAWF,EAAQ81hB,mBAAoB/ogB,MAAM,YAGxD,YAAT/lG,EAAqB,eAACs5G,EAAA,EAAD,CAAYpgC,UAAWF,EAAQvE,aAAc+kC,QAAQ,KAArD,SAA2D3tF,EAAE,mCAEhF,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQvE,aAAc+kC,QAAQ,KAArD,SAA2D3tF,EAAE,qCAG/DsjlB,EAAe,EACb,gBAACz6S,GAAA,EAAD,CAAKt4O,SAAS,QAAd,UACE,gBAACs4O,GAAA,EAAD,CACEx5O,QAAQ,OACRnC,WAAW,SACXo6C,aAAa,OAHf,UAIE,eAACq8e,GAAA,EAAD,CAAiBt2hB,UAAWF,EAAQg2hB,eAAgB/nf,SAAS,UAC7D,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,+CAAgD,CAAE40W,MAAO2uO,EAAYn1W,MAAK,OAAE5rE,QAAF,IAAEA,OAAF,EAAEA,EAASxqL,IAAI,gBAGvH,gBAAC6wT,GAAA,EAAD,CACEx5O,QAAQ,OACRnC,WAAW,SACXo6C,aAAa,OAHf,UAKE,eAACzrH,GAAA,EAAD,CAAWwxE,UAAWF,EAAQ+1hB,qBAAsBhpgB,MAAM,UAAUkhB,SAAS,UAC7E,gBAACytM,GAAA,EAAD,CACEt5O,MAAM,OACNF,QAAQ,OACRnC,WAAW,SACXyC,eAAe,gBAJjB,UAME,eAAC89B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4CAA6C,CAAE3W,MAAOi6lB,MAClF,eAAC1qf,EAAA,EAAD,CAAQzH,WAAU,OAACqxE,QAAD,IAACA,OAAD,EAACA,EAASxqL,IAAI,YAAY8gH,QA5C5B,YAC5B,OAAI0pE,QAAJ,IAAIA,OAAJ,EAAIA,EAASxqL,IAAI,aA2GrB,SAAoB8nH,GAClB,IAAMi8E,EAAU9hK,SAASC,cAAc,KACjCwtL,EAAO,IAAIwhR,KAAK,CAACppX,GAAO,CAAE3rH,KAAM,eACtC4nM,EAAQ16E,KAAOitF,IAAIm2J,gBAAgB/8I,GACnC3rB,EAAQ4+Y,SAAW,oBACnB1gjB,SAASywC,KAAKymO,YAAYp1G,GAC1BA,EAAQ0ma,QA/GJmB,CADaphb,EAAQxqL,IAAI,WAAWiF,KAAI,SAAA2/iB,GAAM,oBAAWA,EAAO5kjB,IAAI,OAAtB,aAAiC4kjB,EAAO5kjB,IAAI,WAAW0d,KAAK,UAASA,KAAK,QA0ClCwkF,MAAM,UAAlF,SAA6Fl6E,EAAE,yCAInG,eAAC6oS,GAAA,EAAD,CACEx5O,QAAQ,OACRK,cAAc,SACd43C,aAAa,OACbnL,WAAW,OACX4uJ,UAAU,QACVzsJ,SAAS,OANX,gBASIkkE,QATJ,IASIA,OATJ,EASIA,EAASxqL,IAAI,WAAWiF,KAAI,SAACgyC,EAAMh4C,GAAP,OAC1B,gBAACw2G,EAAA,EAAD,CAAoBE,QAAQ,KAA5B,UAAkC3tF,EAAE,sBAAuB,CAAEiwI,IAAG,OAAEhhH,QAAF,IAAEA,OAAF,EAAEA,EAAMj3C,IAAI,SAA5E,OAEE,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B1+D,EAAKj3C,IAAI,WAAW0d,KAAK,UAFzCze,QAOvB,eAACw2G,EAAA,EAAD,CAAYE,QAAQ,KAAK4B,MAAO,CAAE4M,WAAY,OAAQ5L,UAAW,QAAjE,SAA4EvwF,EAAE,wCAGhF,eAAC6oS,GAAA,EAAD,CAAKx7O,UAAWF,EAAQiqF,MAAxB,SACE,gBAACm1R,GAAA,EAAD,WACE,gBAACC,GAAA,EAAD,WACE,eAACvoK,GAAA,EAAD,UAAYjkQ,EAAE,qCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,oCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,oCAGhB,eAAC4sa,GAAA,EAAD,iBACGpqQ,QADH,IACGA,OADH,EACGA,EAASxqL,IAAI,WAAWiF,KAAI,SAACgyC,EAAMh4C,GAAP,OAC3B,gBAACy1b,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,UAAYh1O,EAAKj3C,IAAI,eACrB,eAACisR,GAAA,EAAD,UAAYh1O,EAAKj3C,IAAI,cACrB,eAACisR,GAAA,EAAD,UAAYh1O,EAAKj3C,IAAI,aAHRf,aAYhB,YAAT9C,EACE,eAACykH,EAAA,EAAD,CAAQvrC,UAAWF,EAAQi0C,OAAQlnB,MAAM,UAAUyT,QAAQ,YAAYmL,QAASuqf,EAAhF,SACGrjlB,EAAE,uCAGL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQi0C,OAAQlnB,MAAM,UAAUyT,QAAQ,YAAYmL,QAASuqf,EAAhF,SACGrjlB,EAAE,kCAUA0Y,OAAM4G,KAAK8jkB,IC/J1B,IAAM3/e,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC1B,UAAW,CACT+3C,OAAQ,MACRn2C,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChB2uC,SAAU,QAEZk0J,SAAU,CACR,aAAc,CAAE5iO,QAAS,SAAKwrE,SAAU,aAItCyof,GAAiB,SAACnqgB,EAAQ15E,GAC9B,OAAQ05E,GACN,IAAK,QAAS,OAAO15E,EAAE,6BACvB,IAAK,WACL,IAAK,WAAY,OAAOA,EAAE,4BAC1B,IAAK,aAAc,OAAOA,EAAE,8BAC5B,IAAK,WACL,IAAK,SAAU,OAAOA,EAAE,4BACxB,QAAS,MAAO,KA2EL8jlB,GAvEqD,SAAC,GAIjD,IAHlBjrmB,EAGiB,EAHjBA,KACAkrmB,EAEiB,EAFjBA,gBACAV,EACiB,EADjBA,gBAEMl2hB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAEFgklB,EAAiBr+jB,sBAAY+sG,iBAC7Bm5J,EAAam4T,EAAehsmB,IAAI,cAChC0hG,EAASsqgB,EAAehsmB,IAAI,UAC5BwqL,EAAUwhb,EAAehsmB,IAAI,WAqDnC,OACE,eAAC8tH,EAAA,EAAD,CAAOz4C,UAAWF,EAAQM,UAAWy3C,UAAW,EAAhD,SAZwB,WACxB,OAAQrsH,GACN,KAAK,EACH,OA3CsB,WAC1B,OAAQ6gG,GACN,IAAK,UACH,OAAO,eAAC,GAAD,CACLu7J,SAAUgvW,GACVlB,cACE,uCACE,eAACt1f,EAAA,EAAD,UAAaztF,EAAE,+BACf,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,SACE,gCACE,8BAAI,eAAC8/B,EAAA,EAAD,UAAaztF,EAAE,uCACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,sCACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,mCACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,uCAIvB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,SACE,gCACE,8BAAI,eAAC8/B,EAAA,EAAD,UAAaztF,EAAE,gDACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,gDACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,oCACnB,8BAAI,eAACytF,EAAA,EAAD,UAAaztF,EAAE,mDAOjC,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,aACL,IAAK,WACL,IAAK,SAAU,OAAO,eAAC,GAAD,CAA4B8vY,SAAUjkH,EAAY92Q,MAAO8ukB,GAAenqgB,EAAQ15E,GAAI2ilB,SAAUoB,IACpH,QAAS,QAOAG,GACT,KAAK,EACH,OAAO,eAAC,GAAD,CAAS1hb,QAASA,EAAS6gb,gBAAiBA,IACrD,QACE,QAMDc,M,oBC1FMF,GAAyB,sBAChCG,GAAc,CAAC,SAAU,WAEzB3gf,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvCk1hB,cAAe,CACb90hB,MAAO,QACPi2C,OAAQ,OACRwJ,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/BppC,QAAS,GAEXu0hB,eAAgB,CACd3ne,YAAa,GAEfwra,GAAI,CACF34d,OAAQ,EACR2sC,WAAY,GACZwgB,YAAa,WAEf4ne,kBAAmB,CACjBx0hB,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bi3C,OAAQ,OACRwJ,WAAY7/C,EAAM+pC,QAAQC,KAAK,MAEjCqrf,cAAe,CACbrof,WAAY,GACZ5sC,MAAO,SAETi/S,cAAe,CACbn/S,QAAS,OACTnC,WAAY,SACZo6C,aAAc,Q,IAyIHp+C,kBACbqiN,aAAmC,CAAEt2B,SAAUgvW,KAC/CzoS,oBAAU,CACR9pN,KAAMuyf,GACNxoS,kBAAkB,EAClBC,oBAAoB,EACpBnpN,cAAe,CACbm1G,KAAM,KACN+8Y,UAAW,QARFv7hB,EArIkB,WAAO,IAAD,EAE/BiE,EAAUs2C,KACV7kF,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EAER,EAAoC2yB,mBAAS,GAA7C,mBAAO6zU,EAAP,KAAmBmW,EAAnB,KACA,EAAgChqV,mBAA6B,MAA7D,mBAAOy0E,EAAP,KAAiBs9J,EAAjB,KAEMt1K,EAAazpE,sBAAY0pE,wBAAc40f,KACvCv8Y,EAAI,OAAGt4G,QAAH,IAAGA,GAAH,UAAGA,EAAYp3G,IAAI,eAAnB,aAAG,EAA0B,GACjC0smB,EAAe1R,aAAW,CAAErrS,OAAQvxR,4CAA0CutS,QAC9EghS,EAAgB3R,aAAW,CAAErrS,OAAQtxR,6CAA2CstS,QAGhFjqO,EADiB/zD,sBAAY+sG,iBACL16I,IAAI,UAElC0gC,IAAM0B,WAAU,WACd,OAAO,WACLwE,EAAS,IAAI68B,KAAuB,CAAEi+B,OAAQ,UAAWmyM,WAAY,EAAGrpH,QAAS,QACjF5jJ,EAASu/B,YAAO8liB,GAAwB,OAAQ,UAEjD,IAEH,IAcMW,EAAqB,SAACzwmB,GAC1B,OAAQA,GACN,IAAK,MAAO,OAAOwuB,OAAO+6B,SAASmvB,QAAQ63hB,GAC3C,IAAK,OAAQ,OAAO/hlB,OAAO+6B,SAASmvB,QAAQ83hB,KAgB1CE,EAAiB,WACrBjmkB,EAASv+B,YAAKkjB,qBAOhB,OACE,uCACE,eAAC0oa,GAAA,EAAD,CACErc,iBAAiB,EACjBL,YAAY,EACZI,YAAY,EACZH,SAAS,EACTU,cACE,eAAC3lD,GAAA,EAAD,CAASl9S,UAAWF,EAAQk3hB,cAAe79O,WAAYA,EAAvD,SACG49O,GAAYnnmB,KAAI,SAACpE,EAAM5B,GAAP,OACf,eAACwzX,GAAA,EAAD,CAAMp9S,UAA0B,IAAfm5S,GAAoBr5S,EAAQm3hB,eAA7C,SACE,eAAC55O,GAAA,EAAD,CAAWn7Q,MAAO,CAAE4M,WAAY,IAAMoqU,cAAe,CAAEh3U,MAAO,CAAE6L,SAAU,KAA1E,SAAmFviH,KADnBA,EAAO5B,QAK/Es5a,eACa,YAAX72U,GAAuC,IAAf8sR,EACtB,uCACE,eAAC5tQ,EAAA,EAAD,CACEvrC,UAAWF,EAAQq3hB,cACnBtqgB,MAAM,UACNyT,QAAQ,YACRmL,QAAS+rf,EAJX,SAMG7klB,EAAE,4BAEL,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQq3hB,cACnBtqgB,MAAM,UACNyT,QAAQ,YACRmL,QAlCQ,WACpBl6E,EAAS,IAAI28B,MAkCD41C,UAAW7/G,QAAQo2N,KAAUl6L,GAAoBhwB,SAASkqN,EAAKvzN,MALjE,SAMG6rB,EAAE,+BAII,aAAX05E,GAAwC,IAAf8sR,EACvB,eAAC5tQ,EAAA,EAAD,CACEvrC,UAAWF,EAAQq3hB,cACnBtqgB,MAAM,UACNyT,QAAQ,YACRmL,QAAS+rf,EAJX,SAKG7klB,EAAE,8BAGL,KAENs2S,aAAc,OAEhB,uBAAKjpP,UAAWF,EAAQo3hB,kBAAxB,UA1FmB,WACrB,GACO,IADC/9O,EAEJ,MAAkB,YAAX9sR,EAAuB,uBAAKrsB,UAAWF,EAAQqhT,cAAxB,UAC5B,eAAC/gR,EAAA,EAAD,UAAaztF,EAAE,0CACf,eAAC44F,EAAA,EAAD,CAAQE,QAAS,SAACz8G,GAAD,OAAOqoR,EAAYroR,EAAEs8G,gBAAgBze,MAAM,UAA5D,SAAuEl6E,EAAE,yCAGzE,eAACytF,EAAA,EAAD,UAAaztF,EAAE,gCAmFhB8klB,GACD,eAAC,GAAD,CAAuBjsmB,KAAM2tX,EAAYu9O,gBAvEvB,WACP,aAAXrqgB,GAAoC,WAAXA,GAC3BijS,EAAc,IAqE+D0mO,gBAjEzD,WACtBzkkB,EAAS,IAAI68B,KAAuB,CAAEi+B,OAAQ,UAAWmyM,WAAY,EAAGrpH,QAAS,QACjF5jJ,EAASu/B,YAAO8liB,GAAwB,OAAQ,OAChDtnO,EAAc,SAiEZ,gBAAC/3G,GAAA,EAAD,CACEx9J,SAAUA,EACV0pT,mBAAoB,KACpB/gC,aAAc,CAAE/7G,SAAU,SAAUK,WAAY,UAChDn7J,gBAAiB,CAAE86J,SAAU,MAAOK,WAAY,UAChDz1L,KAAMttG,QAAQ81H,GACdwR,QAAS,kBAAM8rJ,EAAY,OAN7B,UAQE,eAACl0K,GAAA,EAAD,CAAUsI,QAAS,kBAAM8rf,EAAmB,QAA5C,SAAqD5klB,EAAE,iCACvD,eAACwwF,GAAA,EAAD,CAAUsI,QAAS,kBAAM8rf,EAAmB,SAA5C,SAAsD5klB,EAAE,2C,2DCyMvC+klB,I,YA+JfC,I,YA8CAC,I,YA2CAC,I,YAiDAC,I,YA0CAC,I,YA0CAC,I,YA0CAC,I,YA0CAC,I,YA2CAC,I,YA8CAC,I,YA2COC,I,YAkCAC,I,YAyDAC,I,YA0DAC,I,YAgDAC,I,YA2CAC,I,YAwDAC,I,YAwDAC,I,YAsCAC,I,YA8BAC,I,YAkCAC,I,YAkCPC,I,YAqEAC,I,YAuCAn+P,I,YA+BAo+P,I,YAkEAC,I,YAiCOC,I,YAmCAC,I,YAiCP1xf,I,YAiCAozP,I,YAiCAC,I,YAiCAs+P,I,YAmCAC,I,YA2CAC,I,YA+CAC,I,YAiDAC,I,YAiEAC,I,YAkCAC,I,YAsBAC,I,YAiDAC,I,YA4CAC,I,YAiCAC,I,YA0CAC,I,YAsCAC,I,YAuCAC,I,YAgCAC,I,YAiEAC,I,YAsCAC,I,YAgCAC,I,YAwCAj/P,I,YAgDAk/P,I,YAiCAC,I,YAiCO35N,I,YAmCA45N,I,YA8CPC,I,YAsFAC,I,YAkEAC,I,YA+DAC,I,YAsCAC,I,YA2CAC,I,YAiDA5/P,I,YA8BA6/P,I,YA0BAC,I,YA4CAC,I,YAuCAC,I,YA0CAC,I,YAyCAC,I,YAiCAC,I,YAmBAC,I,YA6CAC,I,YA+BAC,I,YAgCAC,I,YAoEAC,I,YAyDAC,I,YAwCAC,I,YAiCAC,I,YA8CAC,I,YA0BAC,I,YAiEAC,I,YA2EAC,I,YAqEAC,I,YAsBAC,I,YAiGA94B,I,YAoFO16Q,I,YA+BA8+B,I,YA+BA/+B,I,YA+BA0zS,I,YAkCAC,I,YAgCAC,I,YAkCAC,I,YAgCAC,I,YA6BPnhQ,I,YA+CAohQ,I,YAwCAC,I,YAoBAC,I,YAwCAC,I,YAiBAC,I,YAeAC,I,YAyBAC,I,YA2BAC,I,YAyBAC,I,YA8BAC,I,YA8DAC,I,YA6DAC,I,YAiEAC,I,YAkDA7+K,I,YA2BA8+K,I,YAkDAC,I,YA8BAC,I,YA+BAC,I,YA0BAC,I,YA0BAC,I,YAkCAC,I,YAmCAC,I,YAsDAzO,I,YAuDA0O,I,YAuCAC,I,YAoDAC,I,YA4CAC,I,YAkEAC,I,YA0DAC,I,YAkDAC,I,YA+CAC,I,YA+CAhP,I,YA0CAiP,I,YAuBAC,I,YA2BAC,I,YAmCAC,I,YAgBAC,I,YA+BAC,I,YAoBOC,I,YAsIAC,I,YAmCAC,I,YAmCA7zL,I,YAsCA8zL,I,YAiDAC,I,YAcAn8N,I,YA8CAo8N,I,YAqCPC,IA73LJC,GAA6B,SAACj7e,GAAD,MAAyB,CAC1D,GAAM,CACJ,CACE,MAAS,CACP,KAAQA,IAGZ,CACE,UAAa,CACX,KAAQA,IAGZ,CACE,SAAY,CACV,KAAQA,IAGZ,CACE,iCAAoC,CAClC,KAAQA,IAGZ,CACE,aAAgB,CACd,KAAQA,IAGZ,CACE,WAAc,CACZ,KAAQA,IAGZ,CACE,eAAkB,CAChB,KAAQA,OAOD,SAAUsze,KAAV,iEAKb,OALa,SAKPpllB,YAAWyhC,IAAmBurjB,aAAcnF,IALrC,OAMb,OANa,SAMP7nlB,YAAWyhC,IAAmBwrjB,kBAAmBxF,IAN1C,OAOb,OAPa,SAOPznlB,YAAWyhC,IAAmB0I,qBAAsBk9iB,IAP7C,OAQb,OARa,SAQPrnlB,YAAWyhC,IAAmBkJ,oBAAqBy8iB,IAR5C,OASb,OATa,UASPpnlB,YAAWyhC,IAAmBsI,YAAao9iB,IATpC,QAUb,OAVa,UAUPnnlB,YAAWyhC,IAAmBwI,aAAci9iB,IAVrC,QAWb,OAXa,UAWPlnlB,YAAWyhC,IAAmB8J,oBAAqBu8iB,IAX5C,QAYb,OAZa,UAYP9nlB,YAAWyhC,IAAmBkK,kBAAmB+7iB,IAZ1C,QAab,OAba,UAaP1nlB,YAAWyhC,IAAmByrjB,iBAAkBnF,IAbzC,QAcb,OAda,UAcP/nlB,YAAWyhC,IAAmBwK,iBAAkB+7iB,IAdzC,QAeb,OAfa,UAePholB,YAAWyhC,IAAmB4K,iBAAkB47iB,IAfzC,QAiBb,OAjBa,UAiBPjolB,YAAWyhC,IAAmB8O,iBAAkBq4iB,IAjBzC,QAkBb,OAlBa,UAkBP5olB,YAAWyhC,IAAmBkP,kBAAmBk4iB,IAlB1C,QAmBb,OAnBa,UAmBP7olB,YAAWyhC,IAAmB0rjB,wCAAyCrE,IAnBhE,QAoBb,OApBa,UAoBP9olB,YAAWyhC,IAAmB2rjB,eAAgBhF,IApBvC,QAqBb,OArBa,UAqBPpolB,YAAWyhC,IAAmBsL,cAAeyhV,IArBtC,QAsBb,OAtBa,UAsBPxuX,YAAWyhC,IAAmB0L,oCAAqCw7iB,IAtB5D,QAuBb,OAvBa,UAuBP3olB,YAAWyhC,IAAmBwO,iBAAkB84iB,IAvBzC,QAwBb,OAxBa,UAwBP/olB,YAAWyhC,IAAmBoO,aAAci5S,IAxBrC,QAyBb,OAzBa,UAyBP9oV,YAAWyhC,IAAmB0N,mBAAoBk5iB,IAzB3C,QA0Bb,OA1Ba,UA0BProlB,YAAWyhC,IAAmB4N,gCAAiCi5iB,IA1BxD,QA2Bb,OA3Ba,UA2BPnplB,YAAUsiC,IAAmBkO,0BAA2B+4iB,IA3BjD,QA4Bb,OA5Ba,UA4BPvplB,YAAUsiC,IAAmB4P,eAAgB63iB,IA5BtC,QA6Bb,OA7Ba,UA6BPlplB,YAAWyhC,IAAmB4rjB,wBAAyB5E,IA7BhD,QA8Bb,OA9Ba,UA8BPzolB,YAAWyhC,IAAmB6rjB,kBAAmB9E,IA9B1C,QA+Bb,OA/Ba,UA+BPxolB,YAAWyhC,IAAmB8rjB,yBAA0BnE,IA/BjD,QAgCb,OAhCa,UAgCPpplB,YAAWyhC,IAAmBkM,YAAa07iB,IAhCpC,QAiCb,OAjCa,UAiCPrplB,YAAWyhC,IAAmBsM,uBAAwBi7S,IAjC/C,QAkCb,OAlCa,UAkCPhpV,YAAWyhC,IAAmB+rjB,0BAA2BtF,IAlClD,QAmCb,OAnCa,UAmCPlolB,YAAWyhC,IAAmBsQ,UAAWu3iB,IAnClC,QAoCb,OApCa,UAoCPnqlB,YAAUsiC,IAAmB4Q,gBAAiBk3iB,IApCvC,QAqCb,OArCa,UAqCPvplB,YAAWyhC,IAAmBgsjB,qCAAsCjE,IArC7D,QAsCb,OAtCa,UAsCPxplB,YAAWyhC,IAAmBgR,gBAAiBg3iB,IAtCxC,QAuCb,OAvCa,UAuCPzplB,YAAWyhC,IAAmBisjB,iBAAkBhE,IAvCzC,QAwCb,OAxCa,UAwCP1plB,YAAWyhC,IAAmBkR,oBAAqBg3iB,IAxC5C,QAyCb,OAzCa,UAyCP3plB,YAAWyhC,IAAmBoR,cAAe+2iB,IAzCtC,QA0Cb,OA1Ca,UA0CP5plB,YAAWyhC,IAAmBsR,kBAAmBg3iB,IA1C1C,QA2Cb,OA3Ca,UA2CP/plB,YAAWyhC,IAAmBksjB,gBAAiB9D,IA3CxC,QA4Cb,OA5Ca,UA4CP7plB,YAAWyhC,IAAmB4R,YAAa49gB,IA5CpC,QA6Cb,OA7Ca,UA6CPjxjB,YAAWyhC,IAAmBkS,yBAA0B0hS,IA7CjD,QA8Cb,OA9Ca,UA8CPr1U,YAAWyhC,IAAmBoS,eAAgByiQ,IA9CvC,QA+Cb,OA/Ca,UA+CPt2S,YAAWyhC,IAAmB8R,kBAAmBgjQ,IA/C1C,QAgDb,OAhDa,UAgDPv2S,YAAWyhC,IAAmB4S,8BAA+B21iB,IAhDtD,QAiDb,OAjDa,UAiDPhqlB,YAAWyhC,IAAmBgT,4BAA6B21iB,IAjDpD,QAkDb,OAlDa,UAkDPpqlB,YAAWyhC,IAAmBoT,sBAAuBo1iB,IAlD9C,QAmDb,OAnDa,UAmDPjqlB,YAAWyhC,IAAmBsT,uBAAwBm1iB,IAnD/C,QAoDb,OApDa,UAoDPlqlB,YAAWyhC,IAAmBwT,yBAA0Bk1iB,IApDjD,QAqDb,OArDa,UAqDPnqlB,YAAWyhC,IAAmBmsjB,iBAAkB3G,IArDzC,QAsDb,OAtDa,UAsDPjnlB,YAAWyhC,IAAmBgL,iBAAkB07iB,IAtDzC,QAuDb,OAvDa,WAuDPnolB,YAAWyhC,IAAmB8I,kBAAmBg9iB,IAvD1C,SAwDb,OAxDa,WAwDPvnlB,YAAWyhC,IAAmBosjB,uCAAwCrG,IAxD/D,SAyDb,OAzDa,WAyDPxnlB,YAAWyhC,IAAmBwH,uBAAwBw/S,IAzD/C,SA0Db,OA1Da,WA0DPzoV,YAAWyhC,IAAmB0H,yBAA0Bu/S,IA1DjD,SA2Db,OA3Da,WA2DP1oV,YAAWyhC,IAAmBgU,gBAAiBwzS,IA3DxC,SA4Db,OA5Da,WA4DPjpV,YAAWyhC,IAAmBqsjB,2BAA4BvD,IA5DnD,SA6Db,OA7Da,WA6DPvqlB,YAAWyhC,IAAmB4J,mCAAoCi/iB,IA7D3D,SA8Db,OA9Da,WA8DPtqlB,YAAWyhC,IAAmBsH,eAAgBssD,IA9DvC,SA+Db,OA/Da,WA+DPr1F,YAAWyhC,IAAmB8H,oBAAqBy9iB,IA/D5C,SAgEb,OAhEa,WAgEPhnlB,YAAWyhC,IAAmB8G,gBAAiBu+iB,IAhExC,SAiEb,OAjEa,WAiEP9mlB,YAAWyhC,IAAmBoH,aAAck+iB,IAjErC,SAkEb,OAlEa,WAkEP/mlB,YAAWyhC,IAAmB4G,mBAAoBw+iB,IAlE3C,SAmEb,OAnEa,WAmEP7mlB,YAAWyhC,IAAmB4T,+BAAgCg1iB,IAnEvD,SAoEb,OApEa,WAoEPrqlB,YAAWyhC,IAAmBoG,cAAe++iB,IApEtC,SAqEb,OArEa,WAqEPznlB,YAAUsiC,IAAmB8F,oBAAqBihT,IArE3C,SAsEb,OAtEa,WAsEPxoV,YAAWyhC,IAAmB4F,oBAAqBs/iB,IAtE5C,SAuEb,OAvEa,WAuEP3mlB,YAAWyhC,IAAmBwF,oBAAqBy/iB,IAvE5C,SAwEb,OAxEa,WAwEP1mlB,YAAWyhC,IAAmBwU,yBAA0Bu0iB,IAxEjD,SAyEb,OAzEa,WAyEPxqlB,YAAWyhC,IAAmB0U,4BAA6Bs0iB,IAzEpD,SA0Eb,OA1Ea,WA0EPzqlB,YAAWyhC,IAAmBssjB,iBAAkBrD,IA1EzC,SA2Eb,OA3Ea,WA2EP1qlB,YAAWyhC,IAAmBusjB,kBAAmBrD,IA3E1C,SA4Eb,OA5Ea,WA4EP3qlB,YAAWyhC,IAAmBwsjB,oBAAqBrD,IA5E5C,SA6Eb,OA7Ea,WA6EP5qlB,YAAWyhC,IAAmBysjB,kCAAmCrD,IA7E1D,SA8Eb,OA9Ea,WA8EP7qlB,YAAWyhC,IAAmB0sjB,uBAAwBrD,IA9E/C,SA+Eb,OA/Ea,WA+EP9qlB,YAAWyhC,IAAmBoF,wBAAyB2/iB,IA/EhD,SAgFb,OAhFa,WAgFPxmlB,YAAWyhC,IAAmBkF,0BAA2B8/iB,IAhFlD,SAiFb,OAjFa,WAiFPzmlB,YAAWyhC,IAAmB2sjB,YAAarD,IAjFpC,SAkFb,OAlFa,WAkFP/qlB,YAAWyhC,IAAmB4sjB,kBAAmBrD,IAlF1C,SAmFb,OAnFa,WAmFPhrlB,YAAWyhC,IAAmB6sjB,wBAAyBrD,IAnFhD,SAoFb,OApFa,WAoFPjrlB,YAAWyhC,IAAmB8sjB,mBAAoBhG,IApF3C,SAqFb,OArFa,WAqFPvolB,YAAWyhC,IAAmBsV,cAAeq1X,IArFtC,SAsFb,OAtFa,WAsFPpsa,YAAWyhC,IAAmB+sjB,wBAAyBrF,IAtFhD,SAwFb,OAxFa,WAwFPnplB,YAAWyhC,IAAmB4V,6BAA8B6ziB,IAxFrD,SAyFb,OAzFa,WAyFPlrlB,YAAWyhC,IAAmBkW,+BAAgCwziB,IAzFvD,SA0Fb,OA1Fa,WA0FPnrlB,YAAWyhC,IAAmBwW,+BAAgCmziB,IA1FvD,SA2Fb,OA3Fa,WA2FPprlB,YAAWyhC,IAAmB8W,+BAAgC8yiB,IA3FvD,SA6Fb,OA7Fa,WA6FPrrlB,YAAWyhC,IAAmBoX,0BAA2ByyiB,IA7FlD,SA8Fb,OA9Fa,WA8FPtrlB,YAAWyhC,IAAmBwX,4BAA6BsyiB,IA9FpD,SA+Fb,OA/Fa,WA+FPvrlB,YAAWyhC,IAAmB4X,4BAA6BmyiB,IA/FpD,SAgGb,OAhGa,WAgGPxrlB,YAAWyhC,IAAmB8X,4BAA6BkyiB,IAhGpD,SAkGb,OAlGa,WAkGPzrlB,YAAWyhC,IAAmBgtjB,gBAAiBvC,IAlGxC,SAmGb,OAnGa,WAmGPlslB,YAAWyhC,IAAmBitjB,gBAAiBvC,IAnGxC,SAqGb,OArGa,WAqGPnslB,YAAWyhC,IAAmBoY,gCAAiCmjiB,IArGxD,SAsGb,OAtGa,WAsGPh9kB,YAAWyhC,IAAmB0Y,4CAA6CuxiB,IAtGpE,SAuGb,OAvGa,WAuGP1rlB,YAAWyhC,IAAmB8Y,kCAAmCoxiB,IAvG1D,SAwGb,OAxGa,WAwGP3rlB,YAAWyhC,IAAmBkZ,kCAAmCixiB,IAxG1D,SAyGb,OAzGa,WAyGP5rlB,YAAWyhC,IAAmBktjB,uBAAwB9C,IAzG/C,SA0Gb,OA1Ga,WA0GP7rlB,YAAWyhC,IAAmBmtjB,uBAAwB9C,IA1G/C,SA2Gb,OA3Ga,WA2GP9rlB,YAAWyhC,IAAmBotjB,uBAAwB9C,IA3G/C,SA4Gb,OA5Ga,WA4GP/rlB,YAAWyhC,IAAmBoZ,4CAA6CmxiB,IA5GpE,SA6Gb,OA7Ga,WA6GPhslB,YAAWyhC,IAAmBsZ,4CAA6CkxiB,IA7GpE,SA8Gb,OA9Ga,WA8GP9slB,YAAUsiC,IAAmBwZ,uCAAwCgiiB,IA9G9D,SA+Gb,OA/Ga,WA+GPj9kB,YAAWyhC,IAAmB4Z,yBAA0B+wiB,IA/GjD,SAgHb,OAhHa,WAgHPpslB,YAAWyhC,IAAmBka,yBAA0B2wiB,IAhHjD,SAiHb,OAjHa,WAiHPtslB,YAAWyhC,IAAmBqtjB,6BAA8BzC,IAjHrD,SAmHb,OAnHa,WAmHPrslB,YAAWyhC,IAAmBstjB,SAAUxI,IAnHjC,SAoHb,OApHa,WAoHPvmlB,YAAWyhC,IAAmBwE,cAAeqgjB,IApHtC,SAqHb,OArHa,WAqHPtmlB,YAAWyhC,IAAmBoE,aAAcwgjB,IArHrC,SAsHb,OAtHa,WAsHPrmlB,YAAWyhC,IAAmBgE,gBAAiB2gjB,IAtHxC,SAwHb,OAxHa,WAwHPpmlB,YAAWyhC,IAAmB0D,oBAAqBghjB,IAxH5C,SAyHb,OAzHa,WAyHPnmlB,YAAWyhC,IAAmBwD,sBAAuBihjB,IAzH9C,SA0Hb,OA1Ha,WA0HPlmlB,YAAWyhC,IAAmBoD,wBAAyBohjB,IA1HhD,SA2Hb,OA3Ha,WA2HPjmlB,YAAWyhC,IAAmBkD,eAAgBqhjB,IA3HvC,SA4Hb,OA5Ha,WA4HPhmlB,YAAWyhC,IAAmBgD,wBAAyBshjB,IA5HhD,SA6Hb,OA7Ha,WA6HP/llB,YAAWyhC,IAAmButjB,aAAczC,IA7HrC,SAgIb,OAhIa,WAgIPvslB,YAAWyhC,IAAmBoa,kBAAmB2wiB,IAhI1C,SAkIb,OAlIa,WAkIPxslB,YAAWyhC,IAAmBwtjB,+BAAgCvJ,IAlIvD,SAoIb,OApIa,WAoIP1llB,YAAWyhC,IAAmBytjB,yCAA0CzJ,IApIjE,SAsIb,OAtIa,WAsIPzllB,YAAWyhC,IAAmBoC,mCAAoC2hjB,IAtI3D,SAuIb,OAvIa,WAuIPxllB,YAAWyhC,IAAmB0tjB,sCAAuC5J,IAvI9D,SAwIb,OAxIa,WAwIPvllB,YAAWyhC,IAAmB4a,0CAA2CspiB,IAxIlE,SAyIb,OAzIa,WAyIP3llB,YAAWyhC,IAAmB2tjB,mCAAoCxJ,IAzI3D,SA0Ib,OA1Ia,WA0IP5llB,YAAWyhC,IAAmB4tjB,6BAA8BxJ,IA1IrD,SA2Ib,OA3Ia,WA2IP7llB,YAAWyhC,IAAmB6tjB,+BAAgCxJ,IA3IvD,SA6Ib,OA7Ia,WA6IP9llB,YAAWyhC,IAAmBY,sBAAuBoqjB,IA7I9C,SA+Ib,OA/Ia,WA+IPzslB,YAAWyhC,IAAmBgB,wBAAyBiqjB,IA/IhD,SAiJb,OAjJa,WAiJP1slB,YAAWyhC,IAAmBoB,uBAAwBg2X,IAjJ/C,SAmJb,OAnJa,WAmJP74Z,YAAWyhC,IAAmBwB,+BAAgCwtV,IAnJvD,SAoJb,OApJa,WAoJPzwX,YAAWyhC,IAAmB8tjB,+BAAgC1C,IApJvD,SAsJb,OAtJa,WAsJP7slB,YAAWyhC,IAAmB0b,8BAA+BwviB,IAtJtD,SAuJb,OAvJa,WAuJP3slB,YAAWyhC,IAAmBU,sDAAuDyqjB,IAvJ9E,SAyJb,OAzJa,WAyJP5slB,YAAWyhC,IAAmBgc,uBAAwBqviB,IAzJ/C,SA2Jb,OA3Ja,WA2JP9slB,YAAWyhC,IAAmBE,+BAAgC2jjB,IA3JvD,SA4Jb,OA5Ja,WA4JPtllB,YAAWyhC,IAAmB+tjB,kCAAmCnK,IA5J1D,0CA+Jf,SAAUA,GACR7llB,GADF,mFAcM,OAdN,EAMMA,EAAOgc,QAFgBi0kB,EAJ7B,EAIIC,wBAJJ,EAKI9zS,UALJ,SAcYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,iBAEd/gS,KAAI,OAAE0kiB,QAAF,IAAEA,OAAF,EAAEA,EAAe58lB,WAtB3B,mBASIy8B,EATJ,EASIA,KACA5J,EAVJ,EAUIA,KAeE4J,EAzBN,oBA0BUq8V,EAAWjuX,iBAAO4xB,GAEO,OADzBogkB,EAA0D/jO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,mBA3BxH,iBA6BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7BxC,wBA+BM,OA/BN,UA+BYsqD,YAAI,IAAI93C,KAA6C,CAAE4tjB,6BA/BnE,gCAmCI,OADApzlB,QAAQ7Z,MAAM,sCAAuC,CAAEijC,QAlC3D,UAmCUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,4DACnB65E,SAAU,WArChB,iCAwCS,CACL5qD,OACA5J,QA1CJ,yCA8CA,SAAU4/jB,GACR9llB,GADF,6EASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,qBAfpB,mBAIIx8T,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,IAcIiqkB,EAAiDrgkB,EACnD5xB,iBAAO4xB,GAAMp6B,MAAM,CAAC,UAAW,UAAW,aAAc,kBACxD,KAECo6B,EAvBP,iBAyBI,OADAhzB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QAxBxD,UAyBUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,2DACnB65E,SAAU,WA3BhB,gCA6BwB,MAAXy1gB,GACTrzlB,QAAQ7Z,MAAM,mBAAoB6sC,GA9BtC,QAiCE,OAjCF,UAiCQsqD,YAAI,IAAIh4C,KAA0C,CACtD8tjB,wBAAuB,OAAEC,QAAF,IAAEA,IAAWjylB,iBAAOmnW,QAlC/C,iCAqCS,CACLv1U,OACA5J,QAvCJ,yCA2CA,SAAU6/jB,GACR/llB,GADF,qFAQE,OARF,EAMMA,EAAOgc,QAFTo0kB,EAJJ,EAIIA,4BACAh0S,EALJ,EAKIA,UALJ,SAQQhiO,YAAI,IAAIx2C,KAA+C,CAAEysjB,uCAAuC,KARxG,OAeM,OAfN,SAeYv6mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,sBAEd/gS,KAAI,OAAE6kiB,QAAF,IAAEA,OAAF,EAAEA,EAA6B/8lB,WAvBzC,mBAUIy8B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BUq8V,EAAWjuX,iBAAO4xB,GAEc,OADhCwgkB,EAAwEnkO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,wBA5BtI,iBA8BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BxC,wBAgCM,OAhCN,UAgCYsqD,YAAI,IAAIt2C,KAAiD,CAAEssjB,4BAA6BE,KAhCpG,QAiCe,OAATl0S,QAAS,IAATA,OAjCN,gCAqCI,OADAt/S,QAAQ7Z,MAAM,yCAA0C,CAAEijC,QApC9D,UAqCUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,uEACnB65E,SAAU,WAvChB,QA0CE,OA1CF,UA0CQN,YAAI,IAAIx2C,KAA+C,CAAEysjB,uCAAuC,KA1CxG,iCA2CS,CACLvgkB,OACA5J,QA7CJ,yCAiDA,SAAU8/jB,GACRhmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAIp2C,KAA8C,CAAEusjB,sCAAsC,KAHtG,OAUM,OAVN,SAUYz6mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,0BAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEW,OAD7BsgkB,EAAqEjkO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,wBAtBnI,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAIl2C,KAA8C,CAAEksjB,iCA1BpE,gCA8BI,OADAtzlB,QAAQ7Z,MAAM,sCAAuC,CAAEijC,QA7B3D,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,oEACnB65E,SAAU,WAhChB,QAmCE,OAnCF,UAmCQN,YAAI,IAAIp2C,KAA8C,CAAEusjB,sCAAsC,KAnCtG,iCAoCS,CACLzgkB,OACA5J,QAtCJ,yCA0CA,SAAU+/jB,GACRjmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAI51C,KAAoD,CAAEgsjB,oCAAoC,KAH1G,OAUM,OAVN,SAUY16mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,yCAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEA,OADlB2gkB,EAA4BtkO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,uCAtB1F,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAI91C,KAAoD,CAAEmsjB,sBA1B1E,gCA8BI,OADA3zlB,QAAQ7Z,MAAM,6CAA8C,CAAEijC,QA7BlE,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,4DACnB65E,SAAU,WAhChB,QAmCE,OAnCF,UAmCQN,YAAI,IAAI51C,KAAoD,CAAEgsjB,oCAAoC,KAnC1G,iCAoCS,CACL1gkB,OACA5J,QAtCJ,yCA0CA,SAAUggkB,GACRlmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAI11C,KAA6C,CAAEgsjB,kCAAkC,KAHjG,OAUM,OAVN,SAUY56mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,yBAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEC,OADnB6gkB,EAA6BxkO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,uBAtB3F,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAIx1C,IAA6C,CAAE+rjB,uBA1BnE,gCA8BI,OADA7zlB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA7BxD,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,WAhChB,QAmCE,OAnCF,UAmCQN,YAAI,IAAI11C,KAA6C,CAAEgsjB,kCAAkC,KAnCjG,iCAoCS,CACL5gkB,OACA5J,QAtCJ,yCA0CA,SAAUigkB,GACRnmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAI59B,KAAoD,CAAEo0iB,4CAA4C,KAHlH,OAUM,OAVN,SAUY96mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,kCAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEU,OAD5B+gkB,EAAsC1kO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,gCAtBpG,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAI19B,KAAoD,CAAEm0iB,gCA1B1E,gCA8BI,OADA/zlB,QAAQ7Z,MAAM,6CAA8C,CAAEijC,QA7BlE,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,8DACnB65E,SAAU,WAhChB,QAmCE,OAnCF,UAmCQN,YAAI,IAAI59B,KAAoD,CAAEo0iB,4CAA4C,KAnClH,iCAoCS,CACL9gkB,OACA5J,QAtCJ,yCA0CA,SAAUkgkB,GACRpmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAIt9B,KAA+C,CAAEg0iB,uCAAuC,KAHxG,OAUM,OAVN,SAUYh7mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,oCAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEY,OAD9BihkB,EAAoC5kO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,kCAtBlG,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAIp9B,KAA+C,CAAE+ziB,kCA1BrE,gCA8BI,OADAj0lB,QAAQ7Z,MAAM,wCAAyC,CAAEijC,QA7B7D,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,+DACnB65E,SAAU,WAhChB,QAoCE,OApCF,UAoCQN,YAAI,IAAIt9B,KAA+C,CAAEg0iB,uCAAuC,KApCxG,iCAqCS,CACLhhkB,OACA5J,QAvCJ,yCA2CA,SAAUmgkB,GACRrmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAIl9B,KAAwC,CAAE8ziB,gCAAgC,KAH1F,OAUM,OAVN,SAUYl7mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,6BAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,IACpBmhkB,EAAwB9kO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,6BAE9Eu7lB,EAAwBA,EAAsB59lB,QAEnB,MAAzB49lB,EA1BR,iBA2BMn0lB,QAAQ7Z,MAAM,mBAAoB6sC,GA3BxC,wBA6BM,OA7BN,UA6BYsqD,YAAI,IAAIh9B,KAAwC,CAAE6ziB,2BA7B9D,gCAiCI,OADAn0lB,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QAhCtD,UAiCUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,yDACnB65E,SAAU,WAnChB,QAuCE,OAvCF,UAuCQN,YAAI,IAAIl9B,KAAwC,CAAE8ziB,gCAAgC,KAvC1F,iCAwCS,CACLlhkB,OACA5J,QA1CJ,yCA8CA,SAAUogkB,GACRtmlB,GADF,+EAGE,OAHF,SAGQo6E,YAAI,IAAI98B,KAA0C,CAAE4ziB,kCAAkC,KAH9F,OAUM,OAVN,SAUYp7mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ8gS,SAAU,OACVC,WAAY,+BAhBpB,mBAKIx8T,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAEO,OADzBqhkB,EAA0BhlO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,6BAtBxF,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAI58B,KAA0C,CAAE2ziB,6BA1BhE,gCA8BI,OADAr0lB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA7BxD,UA8BUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,2DACnB65E,SAAU,WAhChB,QAoCE,OApCF,UAoCQN,YAAI,IAAI98B,KAA0C,CAAE4ziB,kCAAkC,KApC9F,iCAqCS,CACLphkB,OACA5J,QAvCJ,yCA2CO,SAAUqgkB,GACfvmlB,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,2BAZT,mBAIHvrD,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAUE4J,EAfC,oBAgBGqtD,EAAgBj/E,iBAAO4xB,GAEJ,OADnB2ujB,EAAkDthgB,EAAcznF,MAAM,CAAC,UAAW,UAAW,uBAjBhG,iBAmBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAnBjC,wBAqBD,OArBC,UAqBKsqD,YAAI,IAAIt1C,KAAoC,CAAE25iB,kBAAmBA,EAAkBt2lB,QAAO,SAAC+zN,GAAD,OAAcA,EAASrjO,IAAI,4BArB1H,gCAyBH,OADAikB,QAAQ7Z,MAAM,8BAA+BijC,GAxB1C,UAyBGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,uDACTu0D,SAAU,WA3BT,QA+BL,OA/BK,UA+BCN,YAAI,IAAIt0C,MAAgC,IA/BzC,yCAkCA,SAAU0gjB,GACfxmlB,GADK,uFASL,OATK,EAODA,EAAOgc,QAHTskkB,EAJG,EAIHA,UACAC,EALG,EAKHA,WACAnkS,EANG,EAMHA,UANG,SASChiO,YAAI,IAAIt0C,MAAgC,IATzC,OAmBD,OAREu1C,EAAWklgB,EAAa,wBAA0B,cAXnD,SAmBKzqmB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,WACA9vB,KAAM,CACJ+0hB,iBAxBD,mBAcHxwjB,EAdG,EAcHA,KACA5J,EAfG,EAeHA,KAaE4J,EA5BC,oBA6BGqtD,EAAgBj/E,iBAAO4xB,GACLqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,WA9BhE,iBAiCD,OADAoH,QAAQ7Z,MAAM,mBAAoB6sC,GAhCjC,UAiCKsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,oDACTu0D,SAAU,WAnCX,gCAsCD,OAtCC,UAsCKN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,2CACTu0D,SAAU,aAxCX,QA0CG0hO,GACFA,IA3CD,gCAgDH,OADAt/S,QAAQ7Z,MAAM,sBAAuBijC,GA/ClC,UAgDGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,oDACTu0D,SAAU,WAlDT,QAsDL,OAtDK,UAsDCN,YAAI,IAAIt0C,MAAgC,IAtDzC,yCAyDA,SAAU2gjB,GACfzmlB,GADK,uFAUL,OAVK,EAQDA,EAAOgc,QAJTknkB,EAJG,EAIHA,YACAlD,EALG,EAKHA,UACAuB,EANG,EAMHA,QACAnlS,EAPG,EAOHA,UAPG,SAUChiO,YAAI,IAAIt0C,MAAgC,IAVzC,OAkBD,OAlBC,SAkBKhwD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAK,uCACA23hB,EAAc,CAAEA,eAAgB,IAChClD,EAAY,CAAEA,aAAc,IAC5BuB,EAAU,CAAEA,WAAY,QAzB5B,mBAaHzxjB,EAbG,EAaHA,KACA5J,EAdG,EAcHA,KAeE4J,EA7BC,oBA8BGqtD,EAAgBj/E,iBAAO4xB,GACLqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,WA/BhE,iBAkCD,OADAoH,QAAQ7Z,MAAM,mBAAoB6sC,GAjCjC,UAkCKsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,uDACTu0D,SAAU,WApCX,gCAuCD,OAvCC,UAuCKN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,6CACTu0D,SAAU,aAzCX,QA2CG0hO,GACFA,IA5CD,gCAiDH,OADAt/S,QAAQ7Z,MAAM,6BAA8BijC,GAhDzC,UAiDGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,uDACTu0D,SAAU,WAnDT,QAuDL,OAvDK,UAuDCN,YAAI,IAAIt0C,MAAgC,IAvDzC,yCA0DA,SAAU4gjB,GACf1mlB,GADK,iFAOL,OAHEohC,EACEphC,EAAOgc,QADTolB,SAJG,SAOCg5C,YAAI,IAAIt0C,MAAgC,IAPzC,OAeD,OAfC,SAeKhwD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV2B,QAAS,CACP57C,gBApBD,mBAUHtR,EAVG,EAUHA,KACA5J,EAXG,EAWHA,KAaE4J,EAxBC,oBAyBGqtD,EAAgBj/E,iBAAO4xB,GAEZ,OADXshkB,EAAkCj0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cA1BhF,iBA4BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA5BjC,wBA8BD,OA9BC,UA8BKsqD,YAAI,IAAI90C,KAAkC,CAC9ClE,WAEAkgjB,gBAAiB8P,EACjBnO,qBAAsBzB,GAAmB4P,MAlC1C,gCAuCH,OADAt0lB,QAAQ7Z,MAAM,4BAA6BijC,GAtCxC,UAuCGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,6DACTu0D,SAAU,WAzCT,QA6CL,OA7CK,UA6CCN,YAAI,IAAIt0C,MAAgC,IA7CzC,yCAgDA,SAAU6gjB,GACf3mlB,GADK,+EAOL,OAHEgglB,EACEhglB,EAAOgc,QADTgkkB,UAJG,SAOC5lgB,YAAI,IAAIt0C,MAAgC,IAPzC,OAmBe,OAVdgte,EAAWktE,EAAUlimB,KAAI,SAACsjD,GAAD,OAActrD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC9FtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV2B,QAAS,CACP57C,mBAdD,kBAmBqBm6I,YAAIu3V,GAnBzB,OA6BH,OAVMu+E,EAnBH,OAqBCl+d,EAAgBj1H,iBAAO,IACvBwglB,EAAqBxglB,iBAAO,IAChCA,iBAAOmzlB,GAAW7vmB,SAAQ,SAACq8G,EAAU5sH,GACnC,IAAMqwmB,EAAkBzjf,EAASnoG,MAAM,CAAC,OAAQ,UAAW,UAAW,aAEtEy9H,EAAgBA,EAAc32I,IAAImH,OAAOq8lB,EAAU/umB,IAASqwmB,GAC5D5C,EAAqBA,EAAmBlimB,IAAImH,OAAOq8lB,EAAU/umB,IAASuwmB,GAAmBF,OA3BxF,UA6BGlngB,YAAI,IAAIx0C,KAAgC,CAC5CutF,gBACAurd,wBA/BC,gCAkCH,OAlCG,oCAkCGtkgB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,sDACRu0D,SAAU,WApCT,QAsCH59E,QAAQ7Z,MAAM,0BAtCX,QAwCL,OAxCK,UAwCCm3F,YAAI,IAAIt0C,MAAgC,IAxCzC,uDA2CA,SAAU8gjB,GACf5mlB,GADK,uFASL,OATK,EAODA,EAAOgc,QAHT84D,EAJG,EAIHA,OACA29e,EALG,EAKHA,SACAx3e,EANG,EAMHA,aANG,SASCb,YAAI,IAAIl0C,MAA2B,IATpC,OAgBD,OAhBC,SAgBKpwD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBACV5zD,OAAQ,CACNqtD,UAEFvpB,KAAMkngB,MAvBL,mBAWH3iiB,EAXG,EAWHA,KACA5J,EAZG,EAYHA,KAcE4J,EA1BC,oBA2BGqtD,EAAgBj/E,iBAAO4xB,GAEjB,OADNmvD,EAAmB9B,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,KA5BzE,iBA8BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BjC,4BAgCGmrD,EAhCH,iBAiCC,OAjCD,UAiCOb,YAAI,IAAIz3B,IAAmB,KAjClC,QAmCD,OAnCC,UAmCKy3B,YAAI,IAAIpoC,KAA2BitC,IAnCxC,QAoCD,OApCC,UAoCK7E,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,2DACRu0D,SAAU,aAtCX,gCA2CH,OADA59E,QAAQ7Z,MAAM,uBAAwBijC,GA1CnC,UA2CGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,+FACRu0D,SAAU,WA7CT,QAgDL,OAhDK,UAgDCN,YAAI,IAAIl0C,MAA2B,IAhDpC,iCAkDE,CACLpW,OACA5J,QApDG,yCAwDA,SAAU2gkB,GACf7mlB,GADK,uFASL,OATK,EAODA,EAAOgc,QAHT84D,EAJG,EAIHA,OACA29e,EALG,EAKHA,SACAx3e,EANG,EAMHA,aANG,SASCb,YAAI,IAAI9zC,MAAyB,IATlC,OAgBD,OAhBC,SAgBKxwD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,qBACV5zD,OAAQ,CACNqtD,UAEFvpB,KAAMkngB,MAvBL,mBAWH3iiB,EAXG,EAWHA,KACA5J,EAZG,EAYHA,KAcE4J,EA1BC,oBA2BGqtD,EAAgBj/E,iBAAO4xB,GAEjB,OADNmvD,EAAmB9B,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,KA5BzE,iBA8BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BjC,4BAgCGmrD,EAhCH,iBAiCC,OAjCD,UAiCOb,YAAI,IAAIz3B,IAAmB,KAjClC,QAmCD,OAnCC,UAmCKy3B,YAAI,IAAIpoC,KAA2BitC,IAnCxC,QAoCD,OApCC,UAoCK7E,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,yDACRu0D,SAAU,aAtCX,gCA2CH,OADA59E,QAAQ7Z,MAAM,oBAAqBijC,GA1ChC,UA2CGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,6FACRu0D,SAAU,WA7CT,QAgDL,OAhDK,UAgDCN,YAAI,IAAI9zC,MAAyB,IAhDlC,iCAkDE,CACLxW,OACA5J,QApDG,yCAwDA,SAAU4gkB,GACf9mlB,GADK,+EAGL,OAHK,SAGCo6E,YAAI,IAAIxzC,MAA2B,IAHpC,OAUD,OAVC,SAUK9wD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBAbT,mBAKHvrD,EALG,EAKHA,KACA5J,EANG,EAMHA,KAUE4J,EAhBC,oBAiBGqtD,EAAgBj/E,iBAAO4xB,GAEb,OADV2iiB,EAAgCt1e,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAAW,KAlBzF,iBAqBD,OADAoH,QAAQ7Z,MAAM,mBAAoB6sC,GApBjC,UAqBKsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,qDACTu0D,SAAU,WAvBX,gCA0BD,OA1BC,UA0BKN,YAAI,IAAI1zC,IAA2B,CAAE+rhB,cA1B1C,gCA8BH,OADA31jB,QAAQ7Z,MAAM,qBAAsBijC,GA7BjC,UA8BGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,qDACTu0D,SAAU,WAhCT,QAmCL,OAnCK,UAmCCN,YAAI,IAAIxzC,MAA2B,IAnCpC,yCAsCA,SAAUmgjB,GACf/mlB,GADK,+EAGL,OAHK,SAGCo6E,YAAI,IAAIpzC,MAAuB,IAHhC,OAUD,OAVC,SAUKlxD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBAbT,mBAKHvrD,EALG,EAKHA,KACA5J,EANG,EAMHA,KAUE4J,EAhBC,oBAiBGqtD,EAAgBj/E,iBAAO4xB,GAEjB,OADNwhkB,EAA6Bn0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAlB3E,iBAoBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GApBjC,wBAsBD,OAtBC,UAsBKsqD,YAAI,IAAItzC,IAAuB,CAAEwqjB,UAtBtC,gCAyBHx0lB,QAAQ7Z,MAAM,iBAAkBijC,GAzB7B,QA2BL,OA3BK,UA2BCk0D,YAAI,IAAIpzC,MAAuB,IA3BhC,yCA8BA,SAAUggjB,GACfhnlB,GADK,+EAUD,OAPI2V,EAAe3V,EAAOgc,QAAtBrG,WAHH,SAUK7/B,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV9vB,KAAM,GAEN9jC,OAAQ,CACN9R,kBAjBD,mBAKHma,EALG,EAKHA,KACA5J,EANG,EAMHA,KAeE4J,EArBC,oBAsBGqtD,EAAgBj/E,iBAAO4xB,GAEC,MADCqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBAvBvE,iBAyBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBjC,wBA2BD,OA3BC,UA2BKsqD,YAAI,IAAI4uC,IAA2B,CAAEuoe,2BAA2B,KA3BrE,gCA8BHz0lB,QAAQ7Z,MAAM,iCAAkCijC,GA9B7C,yCAkCA,SAAU+gkB,GACfjnlB,GADK,+EAUD,OAPI2V,EAAe3V,EAAOgc,QAAtBrG,WAHH,SAUK7/B,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV9vB,KAAM,GAEN9jC,OAAQ,CACN9R,kBAjBD,mBAKHma,EALG,EAKHA,KACA5J,EANG,EAMHA,KAeE4J,EArBC,oBAsBGqtD,EAAgBj/E,iBAAO4xB,GAEG,MADCqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBAvBzE,iBAyBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBjC,wBA2BD,OA3BC,UA2BKsqD,YAAI,IAAI4uC,IAA2B,CAAEuoe,2BAA2B,KA3BrE,gCA8BHz0lB,QAAQ7Z,MAAM,mCAAoCijC,GA9B/C,yCAkCP,SAAUghkB,GAAV,oGAmBM,OAlBFlrkB,EADJ,EACIA,QAGA20iB,EAQE30iB,EARF20iB,SACA3lO,EAOEhvU,EAPFgvU,WACAuhC,EAMEvwW,EANFuwW,WACAliQ,EAKEruG,EALFquG,WACAp5I,EAIE+qC,EAJF/qC,MACA21b,EAGE5qZ,EAHF4qZ,UACAxqH,EAEEpgS,EAFFogS,UACA6nF,EACEjoX,EADFioX,OAXJ,SAmBYnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAK,qCACHolgB,YACG3lO,EAAa,CAAEA,cAAe,IAC9BuhC,EAAa,CAAEA,cAAe,IAH/B,IAIFq6C,kBA3BR,mBAcI92Y,EAdJ,EAcIA,KACA5J,EAfJ,EAeIA,KAgBE4J,EA/BN,oBAiCUqtD,EAAgBj/E,iBAAO4xB,KACvB0hkB,EAAiCr0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAAU,KAlChG,iBAoCM,OApCN,UAoCY0kF,YAAI,IAAI9yC,KAAgC,CAAEkqjB,cAAa7gC,WAAUtmc,aAAYp5I,QAAO21b,eApChG,YAqCUxqH,EArCV,iBAsCQA,IAtCR,wBAwCQ,OAxCR,UAwCchiO,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,aA1CpB,mCA8CM59E,QAAQ7Z,MAAM,gCAAiCk6F,IAC3C8mT,EA/CV,iBAgDQA,IAhDR,wBAkDQ,OAlDR,UAkDc7pT,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kDACnB65E,SAAU,WApDpB,mCAyDI59E,QAAQ7Z,MAAM,6BAA8B,CAAEijC,SAC1C+9W,EA1DR,iBA2DMA,IA3DN,wBA6DM,OA7DN,UA6DY7pT,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kDACnB65E,SAAU,WA/DlB,yCAqEA,SAAUysgB,GAAV,oFASM,OARFnrkB,EADJ,EACIA,QADJ,SASYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJolgB,SAAU30iB,EAAQjG,QAd1B,mBAII+Z,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAaE4J,EAlBN,oBAmBUqtD,EAAgBj/E,iBAAO4xB,KACvB/Z,EAAaonE,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAAU,EAAG,QApB/E,iBAsBM,OAtBN,UAsBY0kF,YAAI,IAAI1yC,IAAgC,CAAE3xB,KAAIs0G,WAAYruG,EAAQquG,cAtB9E,QAuBM,OAvBN,UAuBYjwC,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,aAzBlB,gCA6BM,OADA59E,QAAQ7Z,MAAM,gCAAiCk6F,GA5BrD,UA6BY/C,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kDACnB65E,SAAU,WA/BlB,gCAmCI59E,QAAQ7Z,MAAM,6BAA8B,CAAEijC,QAnClD,yCAuCA,SAAU8iU,GAAV,oFASM,OARFhtU,EADJ,EACIA,QADJ,SASYlmC,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV9vB,KAAK,eACAvvC,OAdX,mBAII8T,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAaE4J,EAlBN,oBAmBUqtD,EAAgBj/E,iBAAO4xB,KACvB0+hB,EAAsCrxe,EAAcznF,MAAM,CAAC,UAAW,UAAW,YApB3F,iBAsBM,OAtBN,UAsBY0kF,YAAI,IAAIpyC,KAAgC,CAAEwmhB,aAAYnkc,WAAYruG,EAAQquG,cAtBtF,gCAwBMvtH,QAAQ7Z,MAAM,+BAAgCk6F,GAxBpD,gCA2BIrgF,QAAQ7Z,MAAM,4BAA6B,CAAEijC,QA3BjD,yCA+BA,SAAUkhkB,GAAV,gGAiBM,OAhBFprkB,EADJ,EACIA,QAGAgvU,EAMEhvU,EANFgvU,WACA3gO,EAKEruG,EALFquG,WACAkiQ,EAIEvwW,EAJFuwW,WACAq6C,EAGE5qZ,EAHF4qZ,UACAxqH,EAEEpgS,EAFFogS,UACA6nF,EACEjoX,EADFioX,OATJ,SAiBYnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJy/R,aACA3gO,aACAkiQ,aACAq6C,iBAzBR,mBAYI92Y,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,oBA8BUqtD,EAAgBj/E,iBAAO4xB,KACvB0hkB,EAAiCr0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAAU,KA/BhG,iBAiCM,OAjCN,UAiCY0kF,YAAI,IAAIlyC,IAA4B,CAAEspjB,cAAanne,WAAYruG,EAAQquG,cAjCnF,YAkCU+xL,EAlCV,iBAmCQA,IAnCR,wBAqCQ,OArCR,UAqCchiO,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,aAvCpB,mCA2CM59E,QAAQ7Z,MAAM,gCAAiCk6F,IAC3C8mT,EA5CV,iBA6CQA,IA7CR,wBA+CQ,OA/CR,UA+Cc7pT,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kDACnB65E,SAAU,aAjDpB,mCAsDI59E,QAAQ7Z,MAAM,yBAA0B,CAAEijC,SACtC+9W,EAvDR,iBAwDMA,IAxDN,wBA0DM,OA1DN,UA0DY7pT,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,kDACnB65E,SAAU,aA5DlB,yCAkEA,SAAU2sgB,GACRrnlB,GADF,+EAUM,OAVN,SAUYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV9vB,KAAM,GAEN9jC,OAAQ,OAhBd,mBAKIqI,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUqtD,EAAgBj/E,iBAAO4xB,GACvBm6T,EAA8B9sQ,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAtBnF,iBAwBMoH,QAAQ7Z,MAAM,+BAAgCk6F,GAxBpD,wBA0BM,OA1BN,UA0BY/C,YAAI,IAAI1xC,KAA+BuhT,IA1BnD,gCA6BIntV,QAAQ7Z,MAAM,4BAA6B,CAAEijC,QA7BjD,yCAiCO,SAAUohkB,GAAV,0FAcD,OAbJtrkB,EADK,EACLA,QAGEq+D,EAGEr+D,EAHFq+D,SACArmD,EAEEhY,EAFFgY,QACAi3B,EACEjvC,EADFivC,OANG,SAcKn1E,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QACA,CACEo/D,QAAS,OACTC,SAAU,iBACV9vB,KAAM,CACJ8uB,gBApBD,mBASHvqD,EATG,EASHA,KACA5J,EAVG,EAUHA,KAeE4J,EAzBC,wBA0BGqtD,EAAgBj/E,iBAAO4xB,GACvB2hkB,EAA2Bt0gB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,aA3BtE,kBA4BIs+B,EAAQ,CAAEy9jB,qBA5Bd,QA8BH30lB,QAAQ7Z,MAAM,uBAAwBijC,GA9BnC,QAgCL+kC,EAAO/kC,GAhCF,yCAmCA,SAAUqhkB,GAAV,oFAaD,OAZJvrkB,EADK,EACLA,QAGEq+D,EAEEr+D,EAFFq+D,SACAq3gB,EACE11kB,EADF01kB,YALG,SAaK57mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QACA,CACEo/D,QAAS,OACTC,SAAU,cACV9vB,KAAM,CACJ8uB,WACAq3gB,mBApBD,mBAQH5hkB,EARG,EAQHA,KACA5J,EATG,EASHA,KAgBE4J,EAzBC,iBA0BH,OA1BG,UA0BGsqD,YAAI,IAAIlxC,MA1BX,gCA6BH,OADApsC,QAAQ7Z,MAAM,oBAAqB,CAAEijC,QA5BlC,UA6BGk0D,YAAI,IAAIpxC,MA7BX,yCAiCP,SAAU6sD,GACR71F,GADF,+EAUM,OAVN,SAUYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,eACV9vB,KAAM,GAEN9jC,OAAQ,OAhBd,mBAKIqI,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAtB/E,iBAwBMoH,QAAQ7Z,MAAM,4BAA6Bk6F,GAxBjD,wBA0BM,OA1BN,UA0BY/C,YAAI,IAAIhpC,KAAwB0kD,IA1B5C,gCA6BIh5F,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QA7B9C,yCAiCA,SAAU+iU,GACRjpV,GADF,+EAUM,OAVN,SAUYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,GAEN9jC,OAAQ,OAhBd,mBAKIqI,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUqtD,EAAgBj/E,iBAAO4xB,GAEJ,OADnB6hkB,EAAkDx0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBAtBvG,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAIxwC,KAAoC,CAAE+njB,uBA1B1D,gCA6BI70lB,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QA7BtD,yCAiCA,SAAUgjU,GACRlpV,GADF,+EAUM,OAVN,SAUYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV9vB,KAAM,GAEN9jC,OAAQ,OAhBd,mBAKIqI,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUqtD,EAAgBj/E,iBAAO4xB,GAEF,OADrB8hkB,EAAqDz0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,uBAtB1G,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,wBA0BM,OA1BN,UA0BYsqD,YAAI,IAAIlwC,KAAsC,CAAE0njB,yBA1B5D,gCA6BI90lB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA7BxD,yCAiCA,SAAUshkB,GACRxnlB,GADF,iFAUM,OAPE2lT,EAAa3lT,EAAOgc,QAH5B,SAUYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV9vB,KAAM,GACN9jC,OAAQ,CACN1R,GAAI4vS,EACJ3wU,KAAM,eAjBd,mBAKI86C,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAeE4J,EArBN,oBAsBUqtD,EAAgBj/E,iBAAO4xB,GAGF,OAFrB+hkB,EAAsD10gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,oBAvB3G,iBA0BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA1BxC,wBA4BM,OA5BN,UA4BYsqD,YAAI,IAAIpwC,KAAiC,CAAE6njB,yBA5BvD,gCA+BI/0lB,QAAQ7Z,MAAM,6BAA8B,CAAEijC,QA/BlD,yCAmCA,SAAUuhkB,GACRznlB,GADF,qFAkBM,OAdFgc,EACEhc,EADFgc,QAIAqwU,EAEErwU,EAFFqwU,SACAC,EACEtwU,EADFswU,WATJ,SAkBYx2W,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV9vB,KAAM,GAEN9jC,OAAQ,CACN4kU,WACAC,kBA1BR,mBAaIx8T,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAgBE4J,EA9BN,oBA+BUqtD,EAAgBj/E,iBAAO4xB,GAET,OADdy5K,EAAyCpsH,EAAcznF,MAAM,CAAC,UAAW,UAAW,aAAc,kBAhC5G,iBAkCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAlCxC,wBAoCM,OApCN,UAoCYsqD,YAAI,IAAIhwC,KAA+Bm/J,IApCnD,gCAuCI,OAvCJ,UAuCUnvH,YAAI,IAAI0O,KAAoB,CAAE5iE,SAvCxC,yCA2CA,SAAUwhkB,GAAV,0GAqBM,OAnBF1rkB,EAFJ,EAEIA,QAIAmxG,EAOEnxG,EAPFmxG,UACS2ke,EAMP91kB,EANF+wG,QAPJ,EAaM/wG,EALF+1kB,kBARJ,WAaM/1kB,EAJFs2F,kBATJ,MASiB,GATjB,IAaMt2F,EAHFqiF,eAVJ,MAUc,KAVd,IAaMriF,EAFF8E,eAXJ,MAWc,KAXd,EAYIs7R,EACEpgS,EADFogS,UAZJ,SAqBYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV5zD,OAAQ,CACN0lG,aAEF5hE,KAAK,eACAumiB,OA7BX,mBAgBIhikB,EAhBJ,EAgBIA,KACA5J,EAjBJ,EAiBIA,KAgBE4J,EAjCN,oBAkCUqtD,EAAgBj/E,iBAAO4xB,GACvBi9F,EAAyB5vC,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAAW,OACjFq8lB,EApCR,iBAqCM,OArCN,UAqCY33gB,YAAI,IAAIpkC,KAAqB,CAAEs8D,aAAYjU,UAASv9E,aArChE,QAuCQs7R,GACFA,EAAUrvL,GAxChB,wBA2CIjwH,QAAQ7Z,MAAM,2BAA4B,CAAEijC,QA3ChD,yCA+CA,SAAUyhkB,GAAV,0GAoBM,OAlBF3rkB,EAFJ,EAEIA,QAIS81kB,EAMP91kB,EANF+wG,QANJ,EAYM/wG,EALFs2F,kBAPJ,MAOiB,GAPjB,IAYMt2F,EAJFqiF,eARJ,MAQc,KARd,IAYMriF,EAHF8E,eATJ,MASc,KATd,IAYM9E,EAFF28E,iBAVJ,MAUgB,KAVhB,EAWIyjN,EACEpgS,EADFogS,UAXJ,SAoBYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,aACV9vB,KAAK,eACAumiB,OAzBX,mBAeIhikB,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAaE4J,EA7BN,iBAiCI,OAHMqtD,EAAgBj/E,iBAAO4xB,GACvBi9F,EAAyB5vC,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAAW,MA/BzF,UAiCU0kF,YAAI,IAAIpkC,KAAqB,CAAEs8D,aAAYjU,UAASv9E,aAjC9D,YAkCQ63E,EAlCR,iBAsCM,OAFMq5f,EAAqBvumB,KAAK6tC,MAAM7tC,KAAKC,UAAUi1G,IAClD76G,KAAI,SAAAi7G,GAAQ,kCAAUA,GAAV,IAAoB4sN,WAAY71R,EAAK9T,QAAQi2kB,QAAQlle,QAAQ,GAAGh3G,QArCrF,UAsCYqkE,YAAI,IAAIhlC,IAA0B,CAAEujD,UAAWq5f,KAtC3D,QAyCQ51S,GACFA,EAAUrvL,GA1ChB,wBA6CIjwH,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QA7C/C,yCAiDA,SAAU0hkB,GAAV,gGAiBM,OAfF5rkB,EAFJ,EAEIA,QAIAolB,EAGEplB,EAHFolB,SACAg7Q,EAEEpgS,EAFFogS,UACA6nF,EACEjoX,EADFioX,OARJ,SAiBYnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,GAEN9jC,OAAQ,CACN2Z,gBAxBR,mBAYItR,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAeE4J,EA5BN,oBA6BUqtD,EAAgBj/E,iBAAO4xB,GAGN,OAFjBoikB,EAA0B/0gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAAU,IAAK,QA9B9F,iBAiCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAC9Bm0W,GACFA,IAnCR,wBAyCM,OAHI7nF,GACFA,IAvCR,UAyCYhiO,YAAI,IAAIhvC,IAAgC,CAAEhK,SAAU8wjB,KAzChE,mCA4CUt2gB,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EA/CR,iBAgDM,OAhDN,UAgDYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OAlDlB,gCAqDM,OArDN,UAqDYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WAvDlB,QA0DI59E,QAAQ7Z,MAAM,0BAA2BijC,GACrC+9W,GACFA,IA5DN,yCAiEA,SAAU4jN,GACR7nlB,GADF,+EAWM,OAREmtH,EAAYntH,EAAOgc,QAAQmxG,UAHnC,SAWYr3I,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV9vB,KAAM,GAEN9jC,OAAQ,CACN0lG,iBAlBR,mBAMIr9F,EANJ,EAMIA,KANJ,EAOI5J,KAeE4J,EAtBN,oBAuBUqtD,EAAgBj/E,iBAAO4xB,GAGL,OAFlBqikB,EAA2Bh1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAAW,IAAK,QAxBhG,iBA2BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA3BxC,wBA6BM,OA7BN,UA6BYsqD,YAAI,IAAIxvC,IAAkC,CAAEuiF,UAAWgle,KA7BnE,yCAkCA,SAAUrK,GAAkBhzgB,GAA5B,2EAOM,OAPN,SAOYh/F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,aACV5zD,OAAQ,CACNqtD,cAZR,uBAEIhlD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,IAHJ,kBAgBS,CACL4J,OACA5J,QAlBJ,wCAsBA,SAAU6hkB,GACR/nlB,GADF,6FAcM,OAdN,EAMMA,EAAOgc,QAFT84D,EAJJ,EAIIA,OACAsnO,EALJ,EAKIA,UALJ,SAcYtmU,YAAKgymB,GAAmBhzgB,GAdpC,mBASIhlD,EATJ,EASIA,KACA5J,EAVJ,EAUIA,KAKE4J,EAfN,oBAgBUqtD,EAAgBj/E,iBAAO4xB,GAGR,OAFfsikB,EAAwBj1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IAAK,QAjB1F,iBAoBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApBxC,wBAsBM,OAtBN,UAsBYsqD,YAAI,IAAIpvC,IAA8B,CAAE8pC,OAAQs9gB,KAtB5D,QAwB2B,OAxB3B,UAwBiCv9gB,YAAOk6C,iBAxBxC,QAyBM,OADM0D,EAxBZ,iBAyBYr4C,YAAI,IAAIptC,KAAoB,CAAE5L,SAAUqxF,KAzBpD,QA0BU2pL,GACFA,IA3BR,mCA+BUxgO,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EAlCR,iBAmCM,OAnCN,UAmCYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OArClB,gCAwCM,OAxCN,UAwCYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WA1ClB,QA6CI59E,QAAQ7Z,MAAM,oBAAqBijC,GA7CvC,yCAiDA,SAAU8hkB,GACRholB,GADF,2FAkBM,OAlBN,EAUMA,EAAOgc,QANT84D,EAJJ,EAIIA,OACAupB,EALJ,EAKIA,QACAv9E,EANJ,EAMIA,QACAk8D,EAPJ,EAOIA,QACAo/N,EARJ,EAQIA,UACA6nF,EATJ,EASIA,OATJ,SAkBYnuZ,YAAKgymB,GAAmBhzgB,GAlBpC,mBAaIhlD,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAKE4J,EAnBN,oBAoBUqtD,EAAgBj/E,iBAAO4xB,GAGR,MAFSqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IAAK,OArB1F,iBAyBM,OADAoH,QAAQ7Z,MAAM,qDAAsD6sC,GAxB1E,UAyBYsqD,YAAI,IAAI9pC,MAA6B,IAzBjD,QA0BU2zV,GACFA,IA3BR,wBA8BM,OA9BN,UA8BY7pT,YAAI,IAAI5pC,KAAqB,CAAE6tD,UAASv9E,UAASk8D,aA9B7D,QA+BUo/N,GACFA,IAhCR,gCAqCI,OADAt/S,QAAQ7Z,MAAM,yCAA0CijC,GApC5D,UAqCUk0D,YAAI,IAAI9pC,MAA6B,IArC/C,QAsCQ2zV,GACFA,IAvCN,yCA4CA,SAAUgkN,GAAV,oFAcM,OAZFjskB,EAFJ,EAEIA,QACAtC,EAHJ,EAGIA,SAGIyzG,EAAYnxG,EAAQmxG,UAN5B,SAcYr3I,YAAKuhG,IAAyB,IAAI/xB,IAC1C,CACEtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,GAEN9jC,OAAQ,CACN0lG,eAINzzG,IA1BJ,gBASIoW,EATJ,EASIA,KACA5J,EAVJ,EAUIA,IAkBG4J,GACHhzB,QAAQ7Z,MAAM,qBAAsB,CAAEijC,QA7B1C,wCAiCA,SAAUgikB,GACRlolB,GADF,+EASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,GAEN9jC,OAAQ,OAfd,mBAIIqI,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAcE4J,EAnBN,oBAoBUqtD,EAAgBj/E,iBAAO4xB,GAER,OADf84K,EAA0CzrH,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBArB/F,iBAuBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvBxC,wBAyBM,OAzBN,UAyBYsqD,YAAI,IAAIhuC,KAAuC,CAAEw8J,mBAzB7D,gCAmCI9rM,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QAnC/C,QAsCE,OAtCF,UAsCQpwC,YAAKqymB,GAA4BnolB,GAtCzC,QAuCE,OAvCF,UAuCQlqB,YAAKsymB,GAA8BpolB,GAvC3C,yCA0CA,SAAUmolB,GACRnolB,GADF,mFAGmC,OAHnC,SAGyC60E,YAAOn/C,eAHhD,UAKkB,OAFVC,EAHR,yBAaQ,OAPE6F,EAAS7F,EAAS98C,IAAI,WANhC,SAac/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,cApBV,mBAQM1L,EARN,EAQMA,KACA5J,EATN,EASMA,KAeE4J,EAxBR,oBAyBYqtD,EAAgBj/E,iBAAO4xB,GAER,OADf84K,EAA0CzrH,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBA1BjG,iBA4BQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA5B1C,wBA8BQ,OA9BR,UA8BcsqD,YAAI,IAAI9tC,KAAoC,CAAEs8J,mBA9B5D,gCAiCM9rM,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QAjCjD,yCAsCA,SAAUkikB,GACRpolB,GADF,mFAImC,OAJnC,SAIyC60E,YAAOn/C,eAJhD,UAMkB,OAFVC,EAJR,yBAcQ,OAPE6F,EAAS7F,EAAS98C,IAAI,WAPhC,SAcc/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,cArBV,mBASM1L,EATN,EASMA,KACA5J,EAVN,EAUMA,KAeE4J,EAzBR,oBA0BYqtD,EAAgBj/E,iBAAO4xB,GAER,OADf84K,EAA0CzrH,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBA3BjG,iBA6BQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7B1C,wBA+BQ,OA/BR,UA+BcsqD,YAAI,IAAI9tC,KAAoC,CAAEs8J,mBA/B5D,gCAkCM9rM,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QAlCjD,yCAuCA,SAAUmikB,GACRrolB,GADF,+EASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,GAEN9jC,OAAQ,OAfd,mBAIIqI,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAcE4J,EAnBN,oBAoBUqtD,EAAgBj/E,iBAAO4xB,GAEb,OADVg9F,EAAgC3vC,EAAcznF,MAAM,CAAC,UAAW,UAAW,aArBrF,iBAuBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvBxC,wBAyBM,OAzBN,UAyBYsqD,YAAI,IAAI9uC,KAA2B,CAAEwhF,cAzBjD,gCA4BIhwH,QAAQ7Z,MAAM,qBAAsB,CAAEijC,QA5B1C,yCAgCA,SAAUoikB,GACRtskB,GADF,mFAIE,OAJF,SAIQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,oBALb,OAQoB,OADZmsF,EAAat2F,EAAQA,QAP7B,SAQ0B64D,YAAO7+C,gBARjC,OAeM,OAPEq8jB,EARR,gBAeYv8mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ,QAAW,CACT,IAAO,CACL,CACE,GAAM,CACJ,CACE,MAAS,CACP,KAAQ+mD,IAGZ,CACE,SAAY,CACV,KAAQA,MAKhB,CACE,MAAS,CACP,IAAO+/e,OAMjB5qkB,OAAQ,OA5Cd,mBAUIqI,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAqCE4J,EAhDN,oBAiDUqtD,EAAgBj/E,iBAAO4xB,GAEhB,OADPgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAlD/E,iBAoDMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApDxC,wBAsDM,OAtDN,UAsDYsqD,YAAI,IAAIpuC,KAA+B,CAAE8pD,WAtDrD,gCAyDIh5F,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QAzD9C,QA2DE,OA3DF,UA2DQk0D,YAAI,IAAI5qC,MAAiC,IA3DjD,yCAiEA,SAAU+4iB,GAAV,gFAkBM,OAhBO+J,EAFb,EAEIt2kB,QAFJ,SAkBYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,wBACV9vB,KAAK,eACA+miB,GAEL7qkB,OAAQ,OAzBd,mBAaIqI,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAiBE4J,EA/BN,iBAgCI,OAhCJ,SAgCUsqD,YAAI,IAAIluC,MAhClB,+BAkCIpvC,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QAlCrD,yCAsCA,SAAUsikB,GACRxolB,GADF,+EASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV9vB,KAAM,GAEN9jC,OAAQ,OAfd,mBAIIqI,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAcE4J,EAnBN,oBAoBUqtD,EAAgBj/E,iBAAO4xB,GAET,OADdyikB,EAAoBp1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,iBArBzE,iBAuBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvBxC,wBAyBM,OAzBN,UAyBYsqD,YAAI,IAAI1tC,KAA+B,CAAE6ljB,kBAzBrD,gCA4BIz1lB,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QA5B9C,yCAgCA,SAAUuikB,GAAV,4FAaM,OAXFzskB,EAFJ,EAEIA,QAGIwe,EAASxe,EAAQwe,OACjBg4jB,EAAgBx2kB,EAAQw2kB,cANhC,SAaY18mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV9vB,KAAM,CACJ/wB,UAEF/S,OAAQ,CACN+qkB,qBArBR,mBAQI1ikB,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAgBE4J,EAzBN,oBA0BUqtD,EAAgBj/E,iBAAO4xB,GAEV,OADb2ikB,EAAmBt1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cAAe,KA3BvF,iBA6BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7BxC,wBAiCM,OAFM4ikB,EAAaD,EAAY55mB,IAAI,UAC7B85mB,EAAoBF,EAAY55mB,IAAI,MAhChD,UAiCYuhG,YAAI,IAAIttC,KAA+B,CAAEtS,OAAQk4jB,EAAYF,cAAeG,KAjCxF,gCAoCI71lB,QAAQ7Z,MAAM,kBAAmB,CAAEijC,QApCvC,yCAwCA,SAAUsjU,GAAV,0FAQqB,OAPjBxtU,EADJ,EACIA,QAIAwf,EAEExf,EAFFwf,OACA4gR,EACEpgS,EADFogS,UANJ,SAQ2BvnO,YAAOt5C,gBARlC,OAeM,OAPEo1F,EARR,gBAeY76I,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,OAAQA,GAAUm1F,OAtB1B,mBAUI7gG,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BUqtD,EAAgBj/E,iBAAO4xB,GAGX,OADZ8ikB,EAAiCz1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,YA7BtF,iBA+BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BxC,wBAiCM,OAjCN,UAiCYsqD,YAAI,IAAIhsC,KAA0BwkjB,IAjC9C,QAkCM,OAlCN,UAkCYx4gB,YAAI,IAAI5rC,KAAkC,CAC9ChT,OAAQA,GAAUm1F,EAClBiie,gBApCR,QAsCM,OAtCN,UAsCYx4gB,YAAI,IAAI9qC,KAA6BsjjB,IAtCjD,QAuCUx2S,GACFA,EAAUw2S,GAxClB,gCA4CI91lB,QAAQ7Z,MAAM,+BAAgC,CAAEijC,QA5CpD,yCAgDA,SAAUwikB,GAAV,kFASM,OATN,EACI1skB,QADJ,SASYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,4BAZhB,mBAIIvrD,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAUE4J,EAfN,oBAgBUqtD,EAAgBj/E,iBAAO4xB,GAGX,OADZ8ikB,EAAiCz1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAlBtF,iBAoBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApBxC,wBAuBM,OAvBN,UAuBYsqD,YAAI,IAAI1rC,KAAqC,CACjDkkjB,gBAxBR,gCA6BI91lB,QAAQ7Z,MAAM,kCAAmC,CAAEijC,QA7BvD,yCAiCA,SAAUyikB,GAAV,sFAYM,OAXF3skB,EADJ,EACIA,QAGMolB,EAAaplB,EAAbolB,SAJV,SAYYtrD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,GAEN9jC,OAAQ,CACN2Z,gBAnBR,mBAOItR,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAeE4J,EAvBN,iBA2BI,OAHMqtD,EAAgBj/E,iBAAO4xB,GAEvB8ikB,EAAiCz1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,WA1BtF,UA2BU0kF,YAAI,IAAIhsC,KAA0BwkjB,IA3B5C,gCA6BI91lB,QAAQ7Z,MAAM,+BAAgC,CAAEijC,QA7BpD,yCAiCO,SAAU8oW,GAAV,sFAWD,OAVFhzW,EADG,EACHA,QAEMwf,EAAWxf,EAAXwf,OAHH,SAWK1lD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,cAlBD,mBAMH1L,EANG,EAMHA,KACA5J,EAPG,EAOHA,KAeE4J,EAtBC,oBAuBGqtD,EAAgBj/E,iBAAO4xB,GAEjB,OADN6P,EAAmBw9C,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,KAxBzE,iBA0BDoH,QAAQ7Z,MAAM,mBAAoB6sC,GA1BjC,wBA4BD,OA5BC,UA4BKsqD,YAAI,IAAI5sC,KAA2B7N,IA5BxC,gCA+BH7iC,QAAQ7Z,MAAM,oBAAqB,CAAEijC,QA/BlC,yCAmCA,SAAU0ikB,GAAV,6FACH5skB,EADG,EACHA,QAGAwf,EAEExf,EAFFwf,OAJG,EAMDxf,EADFonV,qBALG,0BASH,OATG,SASGhpR,YAAI,IAAIltC,MAAyB,IATpC,OAkBD,OAlBC,SAkBKp3D,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,cAzBD,mBAaH1L,EAbG,EAaHA,KACA5J,EAdG,EAcHA,KAeE4J,EA7BC,oBA8BGqtD,EAAgBj/E,iBAAO4xB,GAEjB,OADN6P,EAAmBw9C,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,KA/BzE,iBAiCDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAjCjC,wBAmCD,OAnCC,UAmCKsqD,YAAI,IAAIhtC,KAA2BzN,IAnCxC,gCAsCH7iC,QAAQ7Z,MAAM,oBAAqB,CAAEijC,QAtClC,YAyCDk9U,EAzCC,iBA0CH,OA1CG,UA0CGhpR,YAAI,IAAIltC,MAAyB,IA1CpC,yCA8CP,SAAU27iB,GAAV,mGAA6B7skB,EAA7B,EAA6BA,QAEzBs2F,EAMEt2F,EANFs2F,WACA92E,EAKExf,EALFwf,OACA4F,EAIEplB,EAJFolB,SACAyxjB,EAGE72kB,EAHF62kB,gBACA71gB,EAEEhhE,EAFFghE,QANJ,EAQMhhE,EADFy9D,aAPJ,0BAUI,OAVJ,SAUU3jG,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,qBAXf,OAoBM,OApBN,SAoBYrwC,YAAK0zmB,GAAgB,IAAIp5iB,KAAkB,CACnDiuD,QAAS,IAAIonB,IAAO,CAClB,IAAM,CACJ,CACE,OAAU,CACR,GAAM,WAGV,CACE,GAAM,CACJ,CACE,MAAS,CACP,KAAQnT,IAGZ,CACE,SAAY,CACV,KAAQA,OAflB,mBAoBM92E,GAAU4F,GAAYyxjB,EAAmB,CAAC,CAC5C,GAAK,GAAL,mBACMr3jB,EAAS,CACX,CACE,OAAU,CACR,GAAMA,KAGR,IAPN,YAQM4F,EAAW,CACb,CACE,cAAe,CACb,GAAMA,KAGR,IAdN,YAeMyxjB,EAAkB,CACpB,CACE,OAAU,CACR,GAAM,WAGR,OAEH,OAENt9jB,cACHynD,aArEJ,mBAeIltD,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAuDE4J,EAvEN,oBAwEUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAzE/E,iBA2EMoH,QAAQ7Z,MAAM,8BAA+Bk6F,GA3EnD,wBA6EM,OA7EN,UA6EY/C,YAAI,IAAIhpC,KAAwB0kD,IA7E5C,QA8EM,OA9EN,UA8EY1b,YAAI,IAAI9oC,KAA0BwkD,EAAMh4G,KAAI,SAACmhG,GAAD,OAAUA,EAAKpmG,IAAI,SAAiBqd,iBA9E5F,gCAkFI,OADA4G,QAAQ7Z,MAAM,wBAAyB,CAAEijC,QAjF7C,UAkFUk0D,YAAI,IAAI9oC,KAA0Bh9C,yBAlF5C,yCAsFA,SAAUw0lB,GACR9olB,GADF,qFAYE,OAREgc,EACEhc,EADFgc,QAIAs2F,EAEEt2F,EAFFs2F,WACAlxE,EACEplB,EADFolB,SATJ,SAYQtrD,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,+BAbb,OAqBM,OArBN,SAqBYrwC,YAAK0zmB,GAAgB,IAAIp5iB,KAAkB,CACnDiuD,QAAS,IAAIonB,IAAO,CAClB,IAAO,CACL,CACE,OAAU,CACR,GAAM,WAGV,CACE,GAAM,CACJ,CACE,MAAS,CACP,KAAQnT,IAGZ,CACE,SAAY,CACV,KAAQA,MAKhB,CACE,cAAe,CACb,GAAMlxE,OAIX7L,iBAjDP,mBAgBIzF,EAhBJ,EAgBIA,KACA5J,EAjBJ,EAiBIA,KAkCE4J,EAnDN,oBAoDUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SArD/E,iBAuDMoH,QAAQ7Z,MAAM,gDAAiDk6F,GAvDrE,wBAyDM,OAzDN,UAyDY/C,YAAI,IAAIhpC,KAAwB0kD,IAzD5C,QA0DM,OA1DN,UA0DY1b,YAAI,IAAI9oC,KAA0BwkD,EAAMh4G,KAAI,SAACmhG,GAAD,OAAUA,EAAKpmG,IAAI,SAAiBqd,iBA1D5F,gCA8DI,OADA4G,QAAQ7Z,MAAM,0CAA2C,CAAEijC,QA7D/D,UA8DUk0D,YAAI,IAAI9oC,KAA0Bh9C,yBA9D5C,yCAkEA,SAAUy0lB,GACR/olB,GADF,qFA4BE,OAvBEgc,EACEhc,EADFgc,QAGEqiF,EAAwB,KACxBriF,GAAWA,EAAQs2F,aACbA,EAAet2F,EAAfs2F,WAERjU,EAAU,IAAIonB,IAAO,CACnB,GAAM,CACJ,CACE,MAAS,CACP,KAAQnT,IAGZ,CACE,SAAY,CACV,KAAQA,OAIb/8E,eAzBP,SA4BQz/C,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,qBA7Bb,OAsCM,OAtCN,SAsCYrwC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJ8yC,eA3CR,mBAiCIvuE,EAjCJ,EAiCIA,KACA5J,EAlCJ,EAkCIA,KAcE4J,EAhDN,oBAiDUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAlD/E,iBAoDMoH,QAAQ7Z,MAAM,sCAAuCk6F,GApD3D,wBAsDM,OAtDN,UAsDY/C,YAAI,IAAIhpC,KAAwB0kD,IAtD5C,QAuDM,OAvDN,UAuDY1b,YAAI,IAAI9oC,KAA0BwkD,EAAMh4G,KAAI,SAACmhG,GAAD,OAAUA,EAAKpmG,IAAI,SAAiBqd,iBAvD5F,gCA2DI,OADA4G,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QA1DrD,UA2DUk0D,YAAI,IAAI9oC,KAA0Bh9C,yBA3D5C,yCA+DA,SAAU00lB,GAAV,sFACE,OAD0BhtkB,EAA5B,EAA4BA,QAA5B,SACQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,oBAFb,OAcM,OARF2skB,EACE92kB,EADF82kB,QANJ,SAcYh9mB,YAAK0zmB,GAAgB,IAAIp5iB,KAAkB,CACnDiuD,QAAS,IAAIonB,IAAO,CAClB,IAAO,CACL,CACE,GAAM,CACJ,GAAMqte,OAIXv9jB,iBAvBP,mBASIzF,EATJ,EASIA,KACA5J,EAVJ,EAUIA,KAeE4J,EAzBN,oBA0BUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SA3B/E,iBA6BMoH,QAAQ7Z,MAAM,+BAAgCk6F,GA7BpD,wBA+BM,OA/BN,UA+BY/C,YAAI,IAAItqC,KAA+BgmD,IA/BnD,gCAkCIh5F,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QAlC9C,yCAsCA,SAAU+ikB,GAAV,sFACE,OAD8BjtkB,EAAhC,EAAgCA,QAAhC,SACQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,wBAFb,OAcM,OARF2skB,EACE92kB,EADF82kB,QANJ,SAcYh9mB,YAAK0zmB,GAAgB,IAAIp5iB,KAAkB,CACnDiuD,QAAS,IAAIonB,IAAO,CAClB,IAAO,CACL,CACE,GAAM,CACJ,GAAMqte,IAGV,CACE,OAAU,CACR,GAAM,cAIXv9jB,iBA5BP,mBASIzF,EATJ,EASIA,KACA5J,EAVJ,EAUIA,KAoBE4J,EA9BN,oBA+BUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAhC/E,iBAkCMoH,QAAQ7Z,MAAM,mCAAoCk6F,GAlCxD,wBAoCM,OApCN,UAoCY/C,YAAI,IAAIpqC,KAAkC8lD,IApCtD,gCAuCIh5F,QAAQ7Z,MAAM,6BAA8B,CAAEijC,QAvClD,yCA2CA,SAAUgjkB,GAAV,wFACE,OADgCltkB,EAAlC,EAAkCA,QAAlC,SACQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,0BAFb,OAeM,OATFib,EAEEplB,EAFFolB,SACAm5C,EACEv+D,EADFu+D,OAPJ,SAeYzkG,YAAK0zmB,GAAgB,IAAIp5iB,KAAkB,CACnDiuD,QAAS,IAAIonB,IAAO,CAClB,IAAM,CACJ,CACE,UAAa,CACX,GAAMrkF,KAHZ,mBAMKm5C,EAAS,CAAC,CACX,OAAU,CACR,GAAMA,KAEL,OAENhlD,iBA7BP,mBAUIzF,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAoBE4J,EA/BN,oBAgCUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAjC/E,iBAmCMoH,QAAQ7Z,MAAM,qCAAsCk6F,GAnC1D,wBAqCM,OArCN,UAqCY/C,YAAI,IAAIhpC,KAAwB0kD,IArC5C,QAsCM,OAtCN,UAsCY1b,YAAI,IAAI5oC,KAAoC,CAChDpQ,WACA2xjB,WAAYj9f,EAAMh4G,KAAI,SAACmhG,GAAD,OAAUA,EAAKpmG,IAAI,SAAiBqd,kBAxClE,gCA4CI4G,QAAQ7Z,MAAM,+BAAgC,CAAEijC,QA5CpD,yCAiDA,SAAUojU,GAAYtpV,GAAtB,+EACE,OADF,SACQlqB,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,gBAFb,OAUM,OAVN,SAUYrwC,YAAK0zmB,GAAgBxplB,GAVjC,mBAKI8vB,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAKE4J,EAXN,oBAYUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAb/E,iBAeMoH,QAAQ7Z,MAAM,2BAA4B,CACxC6sC,OACA5J,QAjBR,wBAoBM,OApBN,UAoBYk0D,YAAI,IAAIhpC,KAAwB0kD,IApB5C,gCAuBIh5F,QAAQ7Z,MAAM,qBAAsB,CAClC6sC,OACA5J,QAzBN,yCA8BA,SAAUijkB,GAA8BnplB,GAAxC,+EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,qBAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAUE4J,EAbN,oBAcUqtD,EAAgBj/E,iBAAO4xB,GACvB2gG,EAA0BtzC,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAf/E,iBAiBMoH,QAAQ7Z,MAAM,6CAA8Ck6F,GAjBlE,wBAmBM,OAnBN,UAmBY/C,YAAI,IAAIxsC,KAA6C,CAAEoljB,SAAUvie,KAnB7E,gCAsBI3zH,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QAtBrD,yCA0BA,SAAUkjkB,GAAV,4FAME,OANyBptkB,EAA3B,EAA2BA,QAEvBqiF,EAEEriF,EAFFqiF,QACAv9E,EACE9E,EADF8E,QAHJ,SAMQs5D,YAAI,IAAIxpC,MAA6B,IAN7C,OAcM,OAdN,SAcY96D,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ8yC,UACAv9E,eApBR,mBASIgP,EATJ,EASIA,KACA5J,EAVJ,EAUIA,KAcE4J,EAxBN,oBAyBUqtD,EAAgBj/E,iBAAO4xB,GACvB2gG,EAA0BtzC,EAAcznF,MAAM,CAAC,UAAW,UAAW,SACrEu9lB,EA3BV,UA2B+B91gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,iBA3B1E,QA2BuF,GAC9E+6H,EA5BT,iBA6BM3zH,QAAQ7Z,MAAM,8BAA+Bk6F,GA7BnD,wBA+BM,OA/BN,UA+BY/C,YAAI,IAAIppC,KAAiC,CAAEy/E,QAAOwie,gBA/B9D,gCAkCIn2lB,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QAlC5C,QAoCE,OApCF,UAoCQk0D,YAAI,IAAIxpC,MAA6B,IApC7C,iCAsCS,CACL9gB,OACA5J,QAxCJ,yCA4CA,SAAUmjkB,GAAV,sFAaM,OAbqBrtkB,EAA3B,EAA2BA,QAEvBwf,EAGExf,EAHFwf,OACA4gR,EAEEpgS,EAFFogS,UACA6nF,EACEjoX,EADFioX,OAJJ,SAaYnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV5zD,OAAQ,CACN+T,cAlBR,uBAQI1L,EARJ,EAQIA,KACA5J,EATJ,EASIA,IAaE4J,EACEssR,GACFA,KAGE6nF,GACFA,IAEFnnY,QAAQ7Z,MAAM,uBAAwB,CAAEijC,SA9B5C,kBAiCS,CACL4J,OACA5J,QAnCJ,wCAuCA,SAAUojkB,GACRtplB,GADF,qFAeM,OAfN,EAOMA,EAAOgc,QAHTwf,EAJJ,EAIIA,OACA6iE,EALJ,EAKIA,QACAv9E,EANJ,EAMIA,QANJ,SAeYhrC,YAAKuzmB,GAAgB,IAAIn4iB,IAAqB,CAAE1V,YAf5D,mBAUI1L,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAME4J,EAjBN,iBAkBI,OAlBJ,SAkBUsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,aApBhB,OA6BQ,OA7BR,UA6Bc5kG,YAAKszmB,GAAgB,IAAIt4iB,KAAqB,CACtDhwB,UACAu9E,aA/BN,mBAwBMvuE,KAxBN,EAyBM5J,IAzBN,wBAkCI,OAlCJ,UAkCUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,oDACTu0D,SAAU,WApChB,QAsCI59E,QAAQ7Z,MAAM,yCAA0C,CAAEijC,QAtC9D,yCA0CA,SAAUqjkB,GAAV,gGAOE,OAPyBvtkB,EAA3B,EAA2BA,QAEvBqiF,EAGEriF,EAHFqiF,QACAv9E,EAEE9E,EAFF8E,QAHJ,EAKM9E,EADFghE,eAJJ,MAIct1F,gBAJd,WAOQ0yF,YAAI,IAAI9pC,MAA6B,IAP7C,OAeM,OAfN,SAeYx6D,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,CACJ8yC,UACAv9E,WAEFk8D,QAASA,EAAQ3pF,WAvBvB,mBAUIy8B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SACrEw9lB,EA7BV,UA6B+B/1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,iBA7B1E,QA6BuF,GAC9EogG,EA9BT,iBA+BMh5F,QAAQ7Z,MAAM,8BAA+Bk6F,GA/BnD,wBAiCM,OAjCN,UAiCY/C,YAAI,IAAI1pC,KAAiC,CAAEolD,QAAOo9f,gBAjC9D,gCAoCIp2lB,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QApC5C,QAsCE,OAtCF,UAsCQk0D,YAAI,IAAI9pC,MAA6B,IAtC7C,yCAyCA,SAAUk5iB,GAAV,wFAeM,OAfqBxtkB,EAA3B,EAA2BA,QAEd8uZ,EAEP9uZ,EAFFqiF,QAFJ,EAIMriF,EADFghE,eAHJ,MAGct1F,gBAHd,EAMQ22G,EAAsB,MAAZysU,EACZA,EAASz3a,OACT,GARN,SAeYvd,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,CACJ8yC,WAEF52E,OAAQ,GAERu1D,QAASA,EAAQ3pF,WAxBvB,uBAUIy8B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAXJ,kBA2BS,CACL4J,OACA5J,QA7BJ,wCAiCA,SAAUujkB,GAAe30gB,GAAzB,2EAOM,OAPN,SAOYh/F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV5zD,OAAQ,CACNqtD,cAZR,uBAEIhlD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,IAHJ,kBAgBS,CAAE4J,OAAM5J,QAhBjB,wCAmBA,SAAUwjkB,GAAV,gGAQM,OARkB1tkB,EAAxB,EAAwBA,QACdjG,EAA0BiG,EAA1BjG,GADV,EACoCiG,EAAtBm3kB,iBADd,kBAQYr9mB,YAAK2zmB,GAAgB1zkB,GARjC,mBAGI+Z,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAKE4J,EATN,oBAUUqtD,EAAgBj/E,iBAAO4xB,GACvB+qE,EAAW1d,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IAXxE,iBAcMoH,QAAQ7Z,MAAM,gBAAiB,CAC7B6sC,OACA5J,QAhBR,2BAmBYsV,EAASq/D,EAAShiH,IAAI,WACxBs6mB,EApBV,iBAqBQ,OArBR,UAqBc/4gB,YAAI,IAAIloC,KAAgC2oD,IArBtD,gCAuBQ,OAvBR,UAuBczgB,YAAI,IAAIpoC,KAA2B6oD,IAvBjD,WAwBsB,MAAVr/D,EAxBZ,iBAyBU,OAzBV,UAyBgB4+C,YAAI,IAAI9sC,KAAkB,CAAE9R,YAzB5C,2CA8BI1+B,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QACG,OAAvC,OAACA,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,MA/BtC,iBAgCM,OAhCN,UAgCY1C,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,yDACRu0D,SAAU,WAlClB,QAqCM,OArCN,UAqCYN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,qDACRu0D,SAAU,WAvClB,yCA6CA,SAAUivgB,KAAV,iFACa,OADb,SACmB90gB,YAAO/+C,gBAD1B,UACQ/f,EADR,wDAYM,OAZN,SAYYjgC,YAAK2zmB,GAAgB1zkB,GAZjC,mBAOI+Z,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAKE4J,EAbN,oBAcUqtD,EAAgBj/E,iBAAO4xB,GACvBmvD,EAAO9B,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IAfpE,iBAkBMoH,QAAQ7Z,MAAM,gBAAiB,CAC7B6sC,OACA5J,QApBR,wBAuBM,OAvBN,UAuBYk0D,YAAI,IAAI53C,KAAmC,CAAEy8C,UAvBzD,gCA0BIniF,QAAQ7Z,MAAM,4BAA6B,CAAEijC,QA1BjD,yCA+BA,SAAU0jkB,GAAV,sFAUM,OAV6B5tkB,EAAnC,EAAmCA,QAE3Bwf,EAASxf,EAFjB,SAUYlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CACN+T,cAfR,mBAKI1L,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAaE4J,EAnBN,oBAoBUqtD,EAAgBj/E,iBAAO4xB,GAEF,OADrBsjkB,EAA0Cj2gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBArB/F,iBAuBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvBxC,wBAyBM,OAzBN,UAyBYsqD,YAAI,IAAIhoC,KAAsCghjB,IAzB1D,gCA4BIt2lB,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QA5BtD,yCAgCA,SAAU2jkB,GACR7plB,GADF,8FAKkB,OAFVohC,EAA+BphC,EAAOgc,SAH9C,iBAYQ,OAZR,SAYclmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,GAEN9jC,OAAQ,CACN2Z,gBAnBV,mBAOMtR,EAPN,EAOMA,KACA5J,EARN,EAQMA,KAeE4J,EAvBR,oBAwBYqtD,EAAgBj/E,iBAAO4xB,GAEd,OADTmQ,EAAUk9C,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAzBjE,iBA2BQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA3B1C,wBA6BQ,OA7BR,UA6BcsqD,YAAI,IAAIhsC,KAA0BnO,IA7BhD,mCAgCMnjC,QAAQ7Z,MAAM,6BAA8BijC,GACD,OAAvC,OAACA,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,MAjCxC,iBAkCQ,OAlCR,UAkCc1C,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,2DACRu0D,SAAU,WApCpB,gCAuCQ,OAvCR,UAuCcN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,uDACRu0D,SAAU,WAzCpB,gCAoDQ,OApDR,UAoDc5kG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBAvDlB,iBA+CMvrD,EA/CN,EA+CMA,KACA5J,EAhDN,EAgDMA,IAUE4J,EACoB5xB,iBAAO4xB,GAI7BhzB,QAAQ7Z,MAAM,sBAAuB,CAAEijC,QA/D7C,yCAoEA,SAAU4jkB,GACR9plB,GADF,0FAKgB,OAFRw7B,EAA6Bx7B,EAAOgc,SAH5C,iBAYQ,OAZR,SAYclmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,cACV9vB,KAAM,GAEN9jC,OAAQ,CACN+T,cAnBV,mBAOM1L,EAPN,EAOMA,KACA5J,EARN,EAQMA,KAeE4J,EAvBR,oBAwBYqtD,EAAgBj/E,iBAAO4xB,GAEhB,OADP2gG,EAA0BtzC,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAzBjF,iBA2BQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA3B1C,wBA6BQ,OA7BR,UA6BcsqD,YAAI,IAAI5nC,KAAwBi+E,IA7B9C,gCAgCM3zH,QAAQ7Z,MAAM,qBAAsBijC,GAhC1C,gCAyCQ,OAzCR,UAyCcpwC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,eA5ClB,iBAoCMvrD,EApCN,EAoCMA,KACA5J,EArCN,EAqCMA,IAUE4J,EACoB5xB,iBAAO4xB,GAI7BhzB,QAAQ7Z,MAAM,oBAAqB,CAAEijC,QApD3C,yCAyDA,SAAU6jkB,GACR/plB,GADF,qFAiBM,OAbFgc,EACEhc,EADFgc,QAGAqwU,EAEErwU,EAFFqwU,SACAC,EACEtwU,EADFswU,WARJ,SAiBYx2W,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,WACAC,kBAvBR,mBAYIx8T,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAcE4J,EA3BN,iBA+BI,OAHAhzB,QAAQ08E,MAAM,8BAA+B1pD,GACvCqtD,EAAgBj/E,iBAAO4xB,GACvBihG,EAAc5zC,EAAcznF,MAAM,CAAC,UAAW,UAAW,eA9BnE,UA+BU0kF,YAAI,IAAItnC,KAA8B,CAC1Cw5S,aACAv7N,iBAjCN,gCAoCIj0H,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QApC9C,yCAwCA,SAAU8jkB,GACRhqlB,GADF,iFASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,OAbd,mBAIIqI,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAYE4J,EAjBN,iBAsBI,OAJAhzB,QAAQ08E,MAAM,qCAAsC1pD,GAC9CqtD,EAAgBj/E,iBAAO4xB,GACvBihG,EAAc5zC,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBACzD42V,EAAat7N,IAAeK,kBArBtC,UAsBUj3C,YAAI,IAAItnC,KAA8B,CAC1Cw5S,aACAv7N,YAAa,IAAIilQ,IAAJ,eACV1pC,EAAav7N,IACbx7F,iBA1BT,gCA6BIz4B,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QA7B9C,yCAiCA,SAAU+jkB,GACRjqlB,GADF,yFAuBM,OAnBFgc,EACEhc,EADFgc,QAGAqwU,EAGErwU,EAHFqwU,SACAC,EAEEtwU,EAFFswU,WACAv7N,EACE/0G,EADF+0G,YAMIsie,EAActie,EAAY19H,OAflC,SAuBYvd,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM8niB,EACN5rkB,OAAQ,CACN4kU,WACAC,kBA9BR,mBAkBIx8T,EAlBJ,EAkBIA,KACA5J,EAnBJ,EAmBIA,KAeE4J,EAlCN,iBAqCI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBwjkB,EAAiBn2gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,eApCtE,UAqCU0kF,YAAI,IAAItnC,KAA8B,CAC1Cw5S,aACAv7N,YAAauie,KAvCnB,gCA0CIx2lB,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QA1C9C,yCA8CA,SAAUgkkB,GACRlqlB,GADF,6EAYE,OAREgc,EACEhc,EADFgc,QAGAqwU,EAGErwU,EAHFqwU,SACAC,EAEEtwU,EAFFswU,WACAv7N,EACE/0G,EADF+0G,YATJ,SAYQ32C,YAAI,IAAItnC,KAA8B,CAC1Cw5S,aACAv7N,YAAa,IAAIilQ,IAAJ,eACV1pC,EAAav7N,IACbx7F,iBAhBP,OAmBE,OAnBF,SAmBQ6kD,YAAI,IAAIpnC,KAAqB,CACjCq5S,WACAC,aACAv7N,iBAtBJ,wCA0BA,SAAUo5d,GACRnqlB,GADF,mGAeM,OAfN,EAKMA,EADFgc,QAAWjG,EAJf,EAIeA,GAAImqB,EAJnB,EAImBA,OAAQk8Q,EAJ3B,EAI2BA,UAAW6nF,EAJtC,EAIsCA,OAG9BovN,EAAcnzjB,EAAO7sC,OAP7B,SAeYvd,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAK,eACA8niB,GAEL5rkB,OAAQ,CACN2Z,SAAUrrB,OAvBlB,mBAUI+Z,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAgBE4J,EA3BN,oBA4BUqtD,EAAgBj/E,iBAAO4xB,GAEX,OADZ8ikB,EAAiCz1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,YA7BtF,iBA+BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAC9Bm0W,GACFA,IAjCR,wBAqCM,OADMzoW,EAASo3jB,EAAWl9lB,MAAM,CAAC,EAAG,WApC1C,UAqCY0kF,YAAI,IAAIhsC,KAA0BwkjB,IArC9C,QAsCM,OAtCN,UAsCYx4gB,YAAI,IAAI9rC,KAAyB,CAAE9S,YAtC/C,QAuCU4gR,GACFA,IAxCR,mCA4CIt/S,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QAClC01D,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EAhDR,iBAiDM,OAjDN,UAiDYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OAnDlB,gCAsDM,OAtDN,UAsDYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WAxDlB,QA2DQupT,GACFA,IA5DN,yCAiEA,SAAUmmN,GACRpqlB,GADF,iGAeM,OAfN,EAKMA,EADFgc,QAAWkkB,EAJf,EAIeA,OAAQk8Q,EAJvB,EAIuBA,UAAW6nF,EAJlC,EAIkCA,OAG1BovN,EAAcnzjB,EAAO7sC,OAP7B,SAeYvd,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,eACV9vB,KAAK,eACA8niB,GAEL5rkB,OAAQ,OAtBd,mBAUIqI,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BIhzB,QAAQ08E,MAAM,4BAA6B1pD,GAErCqtD,EAAgBj/E,iBAAO4xB,GAEX,OADZ8ikB,EAAiCz1gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,YA9BtF,iBAgCMoH,QAAQ7Z,MAAM,gCAAiC,CAC7C6sC,OACA5J,QAEE+9W,GACFA,IArCR,wBAyCM,OADMzoW,EAASo3jB,EAAWl9lB,MAAM,CAAC,EAAG,WAxC1C,UAyCY0kF,YAAI,IAAIhsC,KAA0BwkjB,IAzC9C,QA0CM,OA1CN,UA0CYx4gB,YAAI,IAAI9rC,KAAyB,CAAE9S,YA1C/C,QAgDM,OALI4gR,GACFA,EAAUw2S,EAAWl9lB,MAAM,CAAC,EAAG,QA5CvC,UAgDY0kF,YAAI,IAAIl2C,KAA8C,CAAEksjB,4BAA6B1omB,mBAhDjG,mCAmDUk0F,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EAtDR,iBAuDM,OAvDN,UAuDYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OAzDlB,gCA4DM,OA5DN,UA4DYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WA9DlB,QAiEI59E,QAAQ7Z,MAAM,sBAAuB,CACnC6sC,OACA5J,QAEE+9W,GACFA,IAtEN,yCA2EA,SAAUomN,GACRrqlB,GADF,yFAaM,OAbN,EAKMA,EADFgc,QAAW84D,EAJf,EAIeA,OAAQy+gB,EAJvB,EAIuBA,YAAan3S,EAJpC,EAIoCA,UAAW6nF,EAJ/C,EAI+CA,OAJ/C,SAaYnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,2BACV9vB,KAAM,CACJgoiB,eAEF9rkB,OAAQ,CACNqtD,cArBR,gBAQIhlD,EARJ,EAQIA,KACA5J,EATJ,EASIA,IAgBE4J,GACIqtD,EAAgBj/E,iBAAO4xB,IACvB0jkB,EAAoBr2gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,KAevE0mT,GACFA,EAAUo3S,IAdZ12lB,QAAQ7Z,MAAM,4BAA6Bk6F,GACvC8mT,GACFA,EAAO/9W,MA+BXppB,QAAQ7Z,MAAM,sBAAuB,CAAEijC,QACnC+9W,GACFA,EAAO/9W,IAhEb,wCAqEA,SAAUokkB,GAAV,kFAOM,OAPwBrrgB,EAA9B,EAA8BA,KAAMnK,EAApC,EAAoCA,OAApC,SAOYh/F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAK,eACA0zB,EAAK5rF,QAEVo0B,OAAQ,CACNqtD,cAfR,uBAEIhlD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,IAHJ,kBAmBS,CAAE4J,OAAM5J,QAnBjB,wCAsBA,SAAUqkkB,GACRvqlB,GADF,uHAsBM,OAtBN,EAcMA,EAVFgc,QACEjG,EALN,EAKMA,GACAkpE,EANN,EAMMA,KACAgze,EAPN,EAOMA,aACAC,EARN,EAQMA,cACAj3e,EATN,EASMA,aACA02e,EAVN,EAUMA,mBACAv1Q,EAXN,EAWMA,UACA6nF,EAZN,EAYMA,OAZN,SAsBYnuZ,YAAKw0mB,GAAmB,CAAErrgB,OAAMnK,OAAQ/+D,IAtBpD,mBAiBI+Z,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAKE4J,EAvBN,oBAyBUqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SA1B/E,iBA4BMoH,QAAQ7Z,MAAM,8BAA+Bk6F,GACzC8mT,GACFA,IA9BR,oCAmCUguL,QAnCV,IAmCUA,OAnCV,EAmCUA,EAAct7kB,QAnCxB,iBAoC+C,OApC/C,UAoCqDb,YAAK+wmB,GAAY,IAAIzgjB,IAAiB,CACjF0uC,OAAQ/+D,EACR08iB,SAAUR,EAAan0kB,KAAI,SAAC21mB,GAAD,MAAc,CACvC53jB,MAAO,UACP63jB,YAAaD,SAxCzB,iBAoCsBE,EApCtB,EAoCgB7jkB,KAAoB8jkB,EApCpC,EAoC+B1tkB,IAOvB66I,EAAU4yb,EACDC,EA5CjB,oBA8CU1hC,QA9CV,IA8CUA,OA9CV,EA8CUA,EAAev7kB,QA9CzB,iBA+CqD,OA/CrD,UA+C2Db,YAAK8wmB,GAAe,IAAI5gjB,IAAoB,CAC7F8uC,OAAQ/+D,EACR08iB,SAAUP,EAAcp0kB,KAAI,SAAC21mB,GAAD,MAAc,CACxC53jB,MAAO,UACP63jB,YAAaD,SAnDzB,iBA+CsBI,EA/CtB,EA+CgB/jkB,KAAuBgkkB,EA/CvC,EA+CkC5tkB,IAO1B66I,EAAU8yb,EACDC,EAvDjB,QA2DM,OADMC,EAAahzb,EAAU7iK,iBAAO6iK,GAASrrK,MAAM,CAAC,UAAW,UAAW,SAAWogG,EA1D3F,UA2DY1b,YAAI,IAAIpoC,KAA2B+hjB,EAAWl7mB,IAAI,KA3D9D,QA4DM,OA5DN,UA4DYuhG,YAAI,IAAIhpC,KAAwB2ijB,IA5D5C,QA6DM,OA7DN,UA6DY35gB,YAAI,IAAI5mC,MA7DpB,QA+DM,OA/DN,UA+DY4mC,YAAI,IAAIptC,KAAoB,CAAE5L,SAAU2yjB,EAAWr+lB,MAAM,CAAC,EAAG,gBA/DzE,YAgEUulF,EAhEV,iBAiEQ,OAjER,UAiEcb,YAAI,IAAIz3B,IAAmB,KAjEzC,YAmEUgvgB,EAnEV,iBAoEQ,OApER,UAoEcv3e,YAAI,IAAIxoC,KAAkB,CAAE77B,QApE1C,QAsEUqmS,GACFA,EAAU23S,EAAWr+lB,MAAM,CAAC,EAAG,QAvEvC,mCA2EUkmF,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EA9ER,iBA+EM,OA/EN,UA+EYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OAjFlB,gCAoFM,OApFN,UAoFYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WAtFlB,QAyFI,OAzFJ,UAyFUN,YAAI,IAAI1mC,MAzFlB,QA0FQuwV,GACFA,IAEFnnY,QAAQ7Z,MAAM,qBAAsB,CAAEijC,QA7F1C,yCAiGA,SAAUuriB,GACRzxjB,GADF,6GAqBM,OArBN,EAWMA,EAPFgc,QACEijE,EALN,EAKMA,KACA+0gB,EANN,EAMMA,WACA/hC,EAPN,EAOMA,aACA71Q,EARN,EAQMA,UACA6nF,EATN,EASMA,OAIEovN,EAAcp0gB,EAAK5rF,OAb3B,SAqBYvd,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,aACV9vB,KAAK,2BACAyoiB,EAAa,CAAEA,cAAe,IAC9BX,OA3BX,mBAgBIvjkB,EAhBJ,EAgBIA,KACA5J,EAjBJ,EAiBIA,KAcE4J,EA/BN,oBAgCIhzB,QAAQ08E,MAAM,0BAA2B1pD,GACnCqtD,EAAgBj/E,iBAAO4xB,GACvBgmE,EAA0B3Y,EAAcznF,MAAM,CAAC,UAAW,UAAW,SAlC/E,iBAoCMoH,QAAQ7Z,MAAM,0BAA2Bk6F,GACrC8mT,GACFA,IAtCR,oCA2CUguL,QA3CV,IA2CUA,OA3CV,EA2CUA,EAAct7kB,QA3CxB,iBA4C+C,OA5C/C,UA4CqDb,YAAK+wmB,GAAY,IAAIzgjB,IAAiB,CACjF0uC,OAAQghB,EAAMpgG,MAAM,CAAC,EAAG,OACxB+8jB,SAAUR,EAAan0kB,KAAI,SAAC21mB,GAAD,MAAc,CACvC53jB,MAAO,UACP63jB,YAAaD,SAhDzB,iBA4CsBE,EA5CtB,EA4CgB7jkB,KAAoB8jkB,EA5CpC,EA4C+B1tkB,IAOvB66I,EAAU4yb,EACDC,EApDjB,QAuDM,OADMG,EAAahzb,EAAU7iK,iBAAO6iK,GAASrrK,MAAM,CAAC,UAAW,UAAW,SAAWogG,EAtD3F,UAuDY1b,YAAI,IAAIhpC,KAAwB2ijB,IAvD5C,QAyDM,OAzDN,UAyDY35gB,YAAI,IAAIptC,KAAoB,CAAE5L,SAAU2yjB,EAAWr+lB,MAAM,CAAC,EAAG,gBAzDzE,QA0DU0mT,GACFA,EAAU23S,EAAWr+lB,MAAM,CAAC,EAAG,QA3DvC,mCA+DUkmF,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,EAlER,iBAmEM,OAnEN,UAmEYzyS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASwub,IACTj6X,SAAUk6X,OArElB,gCAwEM,OAxEN,UAwEYx6X,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASsjC,EACTixB,SAAU,WA1ElB,QA6EQupT,GACFA,IAEFnnY,QAAQ7Z,MAAM,qBAAsBijC,GAhFxC,yCAoFO,SAAU6wR,GACf/2S,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,OAbL,mBAIHz7B,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAYE4J,EAjBC,oBAkBGqtD,EAAgBj/E,iBAAO4xB,GAEL,OADlBmkkB,EAA6C92gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAnB3F,iBAqBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GArBjC,wBAuBD,OAvBC,UAuBKsqD,YAAI,IAAIpmC,KAAgC,CAAEigjB,sBAvB/C,gCA2BHn3lB,QAAQ7Z,MAAM,uCAAwCijC,GA3BnD,yCA+BA,SAAU2vT,GACf71U,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBACV9vB,KAAM,OAbL,mBAIHz7B,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAYE4J,EAjBC,oBAkBGqtD,EAAgBj/E,iBAAO4xB,GAET,OADdokkB,EAAqC/2gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cAnBnF,iBAqBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GArBjC,wBAuBD,OAvBC,UAuBKsqD,YAAI,IAAI9lC,IAA6B,CAAE4/iB,kBAvB5C,gCA2BHp3lB,QAAQ7Z,MAAM,qCAAsCijC,GA3BjD,yCA+BA,SAAU4wR,GACf92S,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,OAbL,mBAIHz7B,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAYE4J,EAjBC,oBAkBGqtD,EAAgBj/E,iBAAO4xB,GAET,OADdokkB,EAAqC/2gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cAnBnF,iBAqBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GArBjC,wBAuBD,OAvBC,UAuBKsqD,YAAI,IAAI9lC,IAA6B,CAAE4/iB,kBAvB5C,gCA2BHp3lB,QAAQ7Z,MAAM,qCAAsCijC,GA3BjD,yCA+BA,SAAUskkB,GACfxqlB,GADK,iFAUD,OAPI2lT,EAAe3lT,EAAOgc,QAAtB2pS,WAHH,SAUK7vU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV9vB,KAAM,GAEN9jC,OAAQ,CACNk+R,kBAjBD,mBAKH71R,EALG,EAKHA,KACA5J,EANG,EAMHA,KAeE4J,EArBC,oBAsBGqtD,EAAgBj/E,iBAAO4xB,GAEZ,OADX6oE,EAA0Cxb,EAAcznF,MAAM,CAAC,UAAW,UAAW,eAvBxF,iBAyBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBjC,wBA2BD,OA3BC,UA2BKsqD,YAAI,IAAItlC,KAAmC,CAAE6jD,eA3BlD,gCA8BH77F,QAAQ7Z,MAAM,8CAA+CijC,GA9B1D,yCAkCA,SAAUukkB,GACfzqlB,GADK,+EAUD,OAPI24F,EAAc34F,EAAOgc,QAArB28E,UAHH,SAUK7iH,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,sBACV9vB,KAAM,CACJ,SAAYotC,GAEdlxE,OAAQ,OAjBP,gBAKHqI,EALG,EAKHA,KACA5J,EANG,EAMHA,IAeE4J,GACIqtD,EAAgBj/E,iBAAO4xB,GACLqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAEjEoH,QAAQ7Z,MAAM,mBAAoB6sC,IAGpChzB,QAAQ7Z,MAAM,sBAAuBijC,GA5BlC,wCAgCA,SAAUwkkB,GACf1qlB,GADK,+EAYD,OARF24F,EACE34F,EAAOgc,QADT28E,UAJG,SAYK7iH,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,uBACV9vB,KAAM,CACJ,SAAYotC,GAEdlxE,OAAQ,OAnBP,gBAOHqI,EAPG,EAOHA,KACA5J,EARG,EAQHA,IAeE4J,GACIqtD,EAAgBj/E,iBAAO4xB,GACLqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAEjEoH,QAAQ7Z,MAAM,mBAAoB6sC,IAGpChzB,QAAQ7Z,MAAM,uBAAwBijC,GA9BnC,wCAkCA,SAAUykkB,GACf3qlB,GADK,+EAUD,OAPIm0lB,EAAen0lB,EAAOgc,QAAtBm4kB,WAHH,SAUKr+mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,yBACV9vB,KAAM,CACJ4oiB,cAEF1skB,OAAQ,OAjBP,gBAKHqI,EALG,EAKHA,KACA5J,EANG,EAMHA,IAeE4J,GACIqtD,EAAgBj/E,iBAAO4xB,GACdqtD,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAExDoH,QAAQ7Z,MAAM,mBAAoB6sC,IAGpChzB,QAAQ7Z,MAAM,iCAAkCijC,GA5B7C,wCAgCA,SAAU0kkB,GACf5qlB,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,wBAZT,mBAIHvrD,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAUE4J,EAfC,oBAgBGqtD,EAAgBj/E,iBAAO4xB,GAEZ,OADX6oE,EAAkCxb,EAAcznF,MAAM,CAAC,UAAW,UAAW,eAjBhF,iBAmBDoH,QAAQ7Z,MAAM,mBAAoB6sC,GAnBjC,wBAqBD,OArBC,UAqBKsqD,YAAI,IAAIllC,KAAiC,CAAEyjD,eArBhD,gCAyBH77F,QAAQ7Z,MAAM,8CAA+CijC,GAzB1D,yCA6BP,SAAUujU,GACRztU,GADF,6FAUE,OAVF,EAQMA,EAAQA,QAJVs2F,EAJJ,EAIIA,WACAjU,EALJ,EAKIA,QACAv9E,EANJ,EAMIA,QACAszkB,EAPJ,EAOIA,gBAPJ,SAUQh6gB,YAAI,IAAI9jC,MAAyB89iB,IAVzC,OAYE,OAZF,SAYQt+mB,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,yBAbb,OAsBM,OAtBN,SAsBYrwC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ,QAAW8yC,GAAWkvf,GAA2Bj7e,GACjDxxF,WAEF2G,OAAQ,OA9Bd,mBAiBIqI,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAiBE4J,EAnCN,iBAwCI,OAJMqtD,EAAgBj/E,iBAAO4xB,GACvBg9F,EAAgC3vC,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAC3E02X,EAAuBjvS,EAAcznF,MAAM,CAAC,UAAW,UAAW,gBAClExL,EAAgBizF,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAvCrE,UAwCU0kF,YAAI,IAAIlkC,KAA8B,CAAE42E,WAAUs/P,cAAaliY,WAxCzE,gCA0CI4S,QAAQ7Z,MAAM,wBAAyB,CAAEijC,QA1C7C,QA4CE,OA5CF,UA4CQk0D,YAAI,IAAI9jC,MAAyB,IA5CzC,yCA+CA,SAAUu0iB,GACR7ukB,GADF,iFAIE,OAJF,SAIQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,qCALb,OAoBM,OAXFmsF,EACEt2F,EAAQA,QADVs2F,WATJ,SAoBYx8H,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ,QAAWgiiB,GAA2Bj7e,QAzB9C,mBAeIxiF,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAcE4J,EA9BN,iBAiCI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBg9F,EAAgC3vC,EAAcznF,MAAM,CAAC,UAAW,UAAW,YAhCrF,UAiCU0kF,YAAI,IAAItkC,KAA0C,CAAEg3E,cAjC9D,gCAmCIhwH,QAAQ7Z,MAAM,uCAAwC,CAAEijC,QAnC5D,yCAwCA,SAAU4kkB,GACR9qlB,GADF,iFAGE,OAHF,SAGQo6E,YAAI,IAAI9jC,MAAyB,IAHzC,OAYE,OAZF,EAUMt2C,EAAOgc,QAVb,IAMIs2F,kBANJ,MAMiB,GANjB,EAOI6a,EAPJ,EAOIA,UACArsG,EARJ,EAQIA,QACAu9E,EATJ,EASIA,QATJ,SAYQvoH,YAAK+xmB,GAAoB,CAAE7rkB,QAAS,CAAEmxG,eAZ9C,OAcE,OAdF,SAcQr3I,YAAK2zW,GAAgB,CAAEztU,QAAS,CAAEs2F,aAAYjU,UAASv9E,aAd/D,OAgBE,OAhBF,SAgBQs5D,YAAI,IAAI9jC,MAAyB,IAhBzC,wCAoBA,SAAUy0iB,GACR/ukB,GADF,mFAIE,OAJF,SAIQlmC,YAAKygG,IAAa,IAAK,CAC3BpwD,QAAS,4BALb,OAiBM,OATEmsF,EAAat2F,EAAQA,QAAQs2F,YAAc,KAC3C+hf,EAAcr4kB,EAAQA,QAAQq4kB,YATtC,SAiBYv+mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPq4kB,EACA,CACEj5gB,QAAS,UACTC,SAAU,sBACV9vB,KAAM,CACJ,QAAWgiiB,GAA2Bj7e,IAExC7qF,OAAQ,QA1BhB,mBAYIqI,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAkBE4J,EA/BN,iBAkCI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBwkkB,EAAwBn3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAjC7E,UAkCU0kF,YAAI,IAAIhkC,KAAuCk+iB,IAlCzD,gCAoCIx3lB,QAAQ7Z,MAAM,wCAAyC,CAAEijC,QApC7D,yCAwCA,SAAU8kkB,GAAV,gFAQwB,OARxB,IAEIhvkB,QACE6lH,EAHN,EAGMA,OACA+tI,EAJN,EAIMA,UAJN,SAQ8B/6L,YAAOj1C,eARrC,OAQQ+B,EARR,OAUE45C,IAAmBq0L,EAAnB,yBACEw2B,SAAS,GACNzkQ,GAFL,IAGEkgG,YAbJ,wCAiBA,SAAUopd,GAAV,4EAOwB,OAJlBr7U,EAHN,EAEI5zP,QACE4zP,UAHN,SAO8B/6L,YAAOj1C,eAPrC,OAOQ+B,EAPR,OASE45C,IAAmBq0L,EAAnB,aACEw2B,SAAS,GACNzkQ,IAXP,wCAeA,SAAUupjB,KAAV,+EAQM,OARN,SAQYp1mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,mBAXhB,mBAGIvrD,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAUE4J,EAdN,iBAiBI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBykkB,EAAYp3gB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,cAhB9D,UAiBU0kF,YAAI,IAAItjC,KAA6B,CACzCy9iB,eAlBN,gCAqBIz3lB,QAAQ7Z,MAAM,sBAAuB,CAAEijC,QArB3C,yCAyBA,SAAUilkB,GACRnrlB,GADF,+EASM,OATN,SASYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,uBACV2B,QAASh9E,EAAOgc,QAAQw4kB,eAb9B,mBAII1kkB,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAWE4J,EAhBN,iBAmBI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBoiF,EAAa/0B,EAAcznF,MAAM,CAAC,UAAW,OAAQ,sBAlB/D,UAmBU0kF,YAAI,IAAIxjC,KAAqC,CACjDs7D,gBApBN,gCAuBIp1G,QAAQ7Z,MAAM,+BAAgC,CAAEijC,QAvBpD,yCA2BA,SAAUklkB,GAAoBprlB,GAA9B,+EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,mBACV2B,QAASh9E,EAAOgc,QAAQw4kB,eAX9B,mBAEI1kkB,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAWE4J,EAdN,iBAiBI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvB8hG,EAAgBz0C,EAAcznF,MAAM,CAAC,UAAW,OAAQ,kBAhBlE,UAiBU0kF,YAAI,IAAIpjC,KAAiC,CAC7C46E,mBAlBN,gCAqBI90H,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QArB/C,yCAyBA,SAAUmlkB,KAAV,qFAOM,OAPN,SAOYv1mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,4BAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAUE4J,EAbN,iBAmBI,OALMqtD,EAAgBj/E,iBAAO4xB,GACvBs8iB,EAAkBjvf,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAAkB5X,KAAI,SAAAi0I,GAAY,OAAIA,EAAal5I,IAAI,SACpH47mB,EAAct3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cACzDg/lB,EAAqBv3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBAAsB5X,KAAI,SAAAg3H,GAAe,OAAIA,EAAgBj8H,IAAI,SACjI8V,EAAQwuF,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAlB7D,UAmBU0kF,YAAI,IAAIljC,KAAoC,CAChDk1hB,kBACAqoB,cACAC,qBACA/lmB,WAvBN,gCA0BImO,QAAQ7Z,MAAM,uBAAwB,CAAEijC,QA1B5C,yCA8BA,SAAUolkB,GAAqBtrlB,GAA/B,yFAgCM,OA9BFo8S,EACEp8S,EAAOgc,QADTogS,UAGIpgS,EAA0E,CAC9Eo/D,QAAS,UACTC,SAAU,2BACV9vB,KAAM,CACJ6ghB,gBAAiBpskB,EAAOgc,QAAQowjB,gBAChCqoB,YAAaz0lB,EAAOgc,QAAQy4kB,YAC5BC,mBAAoB10lB,EAAOgc,QAAQ04kB,oBAErC13gB,QAAS,IAGyB,mBAAzBh9E,EAAOgc,QAAQ24kB,QACxB34kB,EAAQghE,QAAQ23gB,MAAQ30lB,EAAOgc,QAAQ24kB,OAErC30lB,EAAOgc,QAAQl4B,OACjBk4B,EAAQghE,QAAQl5F,KAAOkc,EAAOgc,QAAQl4B,MAEI,IAAxC5Q,OAAO0D,KAAKolC,EAAQghE,SAASrmG,SAC/BqlC,EAAQghE,QAAU,MAvBtB,SAgCYlnG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAAEtpC,aAhCjE,mBA2BI8T,EA3BJ,EA2BIA,KACA5J,EA5BJ,EA4BIA,KAME4J,EAlCN,iBAwCI,OALMqtD,EAAgBj/E,iBAAO4xB,GACvBs8iB,EAAkBjvf,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAAkB5X,KAAI,SAAAi0I,GAAY,OAAIA,EAAal5I,IAAI,SACpH47mB,EAAct3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,cACzDg/lB,EAAqBv3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,sBAAsB5X,KAAI,SAAAg3H,GAAe,OAAIA,EAAgBj8H,IAAI,SACjI8V,EAAQwuF,EAAcznF,MAAM,CAAC,UAAW,UAAW,UAvC7D,UAwCU0kF,YAAI,IAAIhjC,KAAkC,CAC9Cg1hB,kBACAqoB,cACAC,qBACA/lmB,WA5CN,QA8CI,OA9CJ,UA8CUyrF,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,oDACnB65E,SAAU,aAhDhB,QAkDQ0hO,GACFA,IAnDN,wBAuDI,OADAt/S,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QAtD/C,UAuDUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,mDACnB65E,SAAU,WAzDhB,yCA8DA,SAAU6wgB,GACRvrlB,GADF,uFASE,OATF,EAOMA,EAAOgc,QAHT2jB,EAJJ,EAIIA,KACAy8Q,EALJ,EAKIA,UACA6nF,EANJ,EAMIA,OANJ,SASQ7pT,YAAI,IAAIltC,MAAyB,IATzC,OAiBM,OAjBN,SAiBYp3D,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,aACV9vB,KAAK,eACA5rB,EAAKtsC,YAtBhB,mBAYIy8B,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAaE4J,EA1BN,oBA2BUqtD,EAAgBj/E,iBAAO4xB,GACvB8kkB,EAAUz3gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IA5BvE,iBA+BM,OADAoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BxC,UA+BYsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,WAjClB,QAmCUupT,GACFA,IApCR,wBAuCM,OAvCN,UAuCY7pT,YAAI,IAAIhtC,KAA2BwnjB,IAvC/C,QAwCM,OAxCN,UAwCYx6gB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,aA1ClB,QA4CU0hO,GACFA,EAAUw4S,EAAQ/7mB,IAAI,OA7C9B,gCAkDI,OADAikB,QAAQ7Z,MAAM,mBAAoBijC,GAjDtC,UAkDUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,WApDhB,QAsDQupT,GACFA,IAvDN,QA0DE,OA1DF,UA0DQ7pT,YAAI,IAAIltC,MAAyB,IA1DzC,yCA6DA,SAAUs+iB,GACRxrlB,GADF,yFAUE,OAVF,EAQMA,EAAOgc,QAJTwf,EAJJ,EAIIA,OACAmE,EALJ,EAKIA,KACAy8Q,EANJ,EAMIA,UACA6nF,EAPJ,EAOIA,OAPJ,SAUQ7pT,YAAI,IAAIltC,MAAyB,IAVzC,OAkBM,OAlBN,SAkBYp3D,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAK,eACA5rB,EAAKtsC,QAEVo0B,OAAQ,CACN+T,cA1BR,mBAaI1L,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAgBE4J,EA9BN,oBA+BUqtD,EAAgBj/E,iBAAO4xB,GACvB+kkB,EAAc13gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IAhC3E,iBAmCM,OADAoH,QAAQ7Z,MAAM,mBAAoB6sC,GAlCxC,UAmCYsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,WArClB,QAuCUupT,GACFA,IAxCR,wBA2CM,OA3CN,UA2CY7pT,YAAI,IAAIhtC,KAA2BynjB,IA3C/C,QA4CM,OA5CN,UA4CYz6gB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,2BACTu0D,SAAU,aA9ClB,QAgDU0hO,GACFA,EAAUy4S,EAAYh8mB,IAAI,OAjDlC,gCAsDI,OADAikB,QAAQ7Z,MAAM,uBAAwBijC,GArD1C,UAsDUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAS,4BACTu0D,SAAU,WAxDhB,QA0DQupT,GACFA,IA3DN,QA8DE,OA9DF,UA8DQ7pT,YAAI,IAAIltC,MAAyB,IA9DzC,yCAiEA,SAAUu+iB,GAAoBzrlB,GAA9B,yFACE,OADF,SACQo6E,YAAI,IAAItsC,MAA+B,IAD/C,OAGqB,OAHrB,SAG2B+mC,YAAOt5C,gBAHlC,OA2BM,OAxBEo1F,EAHR,SAOM3wH,EAAOgc,QAFT84kB,EALJ,EAKIA,YACAn6O,EANJ,EAMIA,cAGIo6O,EAGF,QAEgBnknB,IAAhBkknB,IACFC,EAAaD,YAAcA,QAEPlknB,IAAlB+pY,IACFo6O,EAAap6O,cAAgBA,GAlBjC,UA2BY7kY,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iBACV9vB,KAAK,eACAwpiB,GAELttkB,OAAQ,CACN+T,OAAQm1F,OAnChB,oBAsBI7gG,EAtBJ,EAsBIA,KACA5J,EAvBJ,EAuBIA,KAiBE4J,EAxCN,iBA2CI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvB6P,EAAOw9C,EAAcznF,MAAM,CAAC,UAAW,UAAW,OAAQ,IA1CpE,UA2CU0kF,YAAI,IAAIpsC,KAAmCrO,IA3CrD,gCA6CI7iC,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QA7C/C,QA+CE,OA/CF,UA+CQk0D,YAAI,IAAItsC,MAA+B,IA/C/C,yCAkDA,SAAU8+X,GAAY5sa,GAAtB,+EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAWE4J,EAdN,iBAiBI,OAFMklkB,EAA4B92lB,iBAAO4xB,GACnCmlkB,EAAqCD,EAA0Bt/lB,MAAM,CAAC,UAAW,UAAW,YAAa3I,kBAhBnH,UAiBUqtF,YAAI,IAAI5iC,IAA2B,CACvCy9iB,cAlBN,gCAqBI,OArBJ,UAqBU76gB,YAAI,IAAI1iC,KArBlB,QAsBI56C,QAAQ7Z,MAAM,sBAAuB,CAAEijC,QAtB3C,yCA2BA,SAAUwlkB,GAA8B1rlB,GAAxC,+EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,iCAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAWE4J,EAdN,iBAiBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3BqlkB,EAA8DD,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,2BAA4B3I,kBAhBhJ,UAiBUqtF,YAAI,IAAItiC,KAAyC,CAAEq9iB,6BAjB7D,gCAmBI,OAnBJ,UAmBU/6gB,YAAI,IAAIpiC,MAnBlB,QAoBIl7C,QAAQ7Z,MAAM,uCAAwC,CAAEijC,QApB5D,yCAkDA,SAAUylkB,GAA6B3rlB,GAAvC,iFAQM,OAPIm1lB,EAA4Bn1lB,EAAOgc,QAAnCm5kB,wBADV,SAQYr/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,+BACV9vB,KAAM4piB,EAAwB9hmB,WAZpC,mBAGIy8B,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAYE4J,EAhBN,iBAmBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3BslkB,EAAiEF,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,2BAA4B3I,kBAlBnJ,UAmBUqtF,YAAI,IAAIhiC,IAA4C,CAAE+8iB,wBAAyBC,KAnBzF,gCAyBI,OAzBJ,UAyBUh7gB,YAAI,IAAI9hC,KAzBlB,QA0BIx7C,QAAQ7Z,MAAM,wCAAyC,CAAEijC,QA1B7D,yCA8BA,SAAU0lkB,GAA6B5rlB,GAAvC,iFAQM,OAPIq1lB,EAA2Br1lB,EAAOgc,QAAlCq5kB,uBADV,SAQYv/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,+BACV5zD,OAAQ,CACN6tkB,aAAcD,EAAuBx8mB,IAAI,OAE3C0yE,KAAM8piB,EAAuBhimB,WAfnC,mBAGIy8B,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAeE4J,EAnBN,iBAsBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3BylkB,EAA0DL,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,yBAA0B,GAAIhO,iBArB9I,UAsBU0yF,YAAI,IAAI1hC,KAA4C,CACxD28iB,uBAAwBE,KAvB9B,gCA0BI,OA1BJ,UA0BUn7gB,YAAI,IAAIxhC,MA1BlB,QA2BI97C,QAAQ7Z,MAAM,wCAAyC,CAAEijC,QA3B7D,yCA+BA,SAAU2lkB,GAA6B7rlB,GAAvC,iFAQM,OAPIs1lB,EAAiBt1lB,EAAOgc,QAAxBs5kB,aADV,SAQYx/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,+BACV5zD,OAAQ,CAAE6tkB,oBAZhB,mBAGIxlkB,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAYE4J,EAhBN,iBAmBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3B0lkB,EAAsBN,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,yBAA0B,OAlBtG,UAmBU0kF,YAAI,IAAIphC,IAA4C,CAAEs8iB,aAAcE,KAnB9E,gCAqBI,OArBJ,UAqBUp7gB,YAAI,IAAIlhC,KArBlB,QAsBIp8C,QAAQ7Z,MAAM,wCAAyC,CAAEijC,QAtB7D,yCA0BA,SAAU4lkB,GAAwB9rlB,GAAlC,+EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,6CAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAWE4J,EAdN,iBAiBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3B2lkB,EAA4CP,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,YAAa3I,kBAhB/G,UAiBUqtF,YAAI,IAAI9gC,KAAuC,CACnDm8iB,cAlBN,gCAqBI,OArBJ,UAqBUr7gB,YAAI,IAAI1iC,KArBlB,QAsBI56C,QAAQ7Z,MAAM,iCAAkC,CAAEijC,QAtBtD,yCA0BA,SAAU6lkB,GAA0B/rlB,GAApC,iFAQM,OAPI01lB,EAAY11lB,EAAOgc,QAAnB05kB,QADV,SAQY5/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2CACV9vB,KAAM,CACJoqiB,QAAS,CACPC,OAAQ,CACNF,EAAQrimB,cAfpB,mBAGIy8B,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAkBE4J,EAtBN,iBAyBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3B2lkB,EAA4CP,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,YAAa3I,kBAxB/G,UAyBUqtF,YAAI,IAAI1gC,IAAyC,CACrD+7iB,cA1BN,gCA8BI34lB,QAAQ7Z,MAAM,wBAAyB,CAAEijC,QA9B7C,yCAkCA,SAAU8lkB,GAA0BhslB,GAApC,iFAQM,OAPI01lB,EAAY11lB,EAAOgc,QAAnB05kB,QADV,SAQY5/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2CACV9vB,KAAM,CACJoqiB,QAAS,CACPC,OAAQ,CACNF,EAAQrimB,cAfpB,mBAGIy8B,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAkBE4J,EAtBN,iBA0BI,OAHMolkB,EAAoBh3lB,iBAAO4xB,GAE3B2lkB,EAA4CP,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,YAAa3I,kBAzB/G,UA0BUqtF,YAAI,IAAI1gC,IAAyC,CACrD+7iB,cA3BN,gCA+BI34lB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA/BxD,yCAmCA,SAAU+lkB,GAA0BjslB,GAApC,iGAQM,OARN,EAC+CA,EAAOgc,QAA5C05kB,EADV,EACUA,QAASP,EADnB,EACmBA,wBADnB,SAQYr/mB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2CACV9vB,KAAM,CACJoqiB,QAAS,CACPr4f,OAAQ,CAACo4f,EAAQrimB,cAd3B,mBAGIy8B,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAgBE4J,EApBN,iBAuBI,OAFMolkB,EAAoBh3lB,iBAAO4xB,GAC3B2lkB,EAA4CP,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,YAAa3I,kBAtB/G,UAuBUqtF,YAAI,IAAIpgC,IAAyC,CACrDy7iB,cAxBN,QAkCQ,OAPEnC,EAAiB6B,EAAwB90mB,QAAO,SAACw1mB,GAAD,OAAQA,EAAGh9mB,IAAI,kBAAoB68mB,EAAQ78mB,IAAI,2BA3BzG,UAkCc/C,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,+BACV9vB,KAAM+niB,EAAejgmB,WAtC7B,oBA6BYuuC,EA7BZ,EA6BM9R,KACKgmkB,EA9BX,EA8BM5vkB,KAYE0b,EA1CR,iBA6CM,OAFMm0jB,EAAqB73lB,iBAAO0jC,GAC5BwzjB,EAAiEW,EAAmBrgmB,MAAM,CAAC,UAAW,OAAQ,2BAA4B3I,kBA5CtJ,UA6CYqtF,YAAI,IAAIhiC,IAA4C,CAAE+8iB,wBAAyBC,KA7C3F,gCA+CMt4lB,QAAQ7Z,MAAM,4BAA6B,CAAE6ymB,SA/CnD,gCAkDIh5lB,QAAQ7Z,MAAM,wBAAyB,CAAEijC,QAlD7C,yCAsDA,SAAUs3jB,GACRx9kB,GADF,qFAKE,OALF,EAG8BA,EAAOgc,QAA3Bs2F,kBAHV,MAGuB,GAHvB,WAKQl4B,YAAI,IAAI9/B,MAAoC,IALpD,OAgCM,OA1BE+jD,EAAUiU,EACZ,CACA/7F,IAAK,CACH,CACEgkE,OAAQ,CACNjkE,GAAI,WAGR,CACEhzB,KAAM,CACJkzB,KAAM87F,MAKZ,CACA/3B,OAAQ,CACNjkE,GAAI,WAvBZ,SAgCYxgC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,2BACV9vB,KAAM,CACJ8yC,eArCR,OAyCE,OAzCF,SA2BIvuE,EA3BJ,EA2BIA,KACA5J,EA5BJ,EA4BIA,IA5BJ,UAyCQk0D,YAAI,IAAI9/B,MAAoC,IAzCpD,YA0CMxqB,EA1CN,oBA2CUq8V,EAAWjuX,iBAAO4xB,GAEP,OADXoxK,EAAYirL,EAASz2X,MAAM,CAAC,UAAW,UAAW,yBA5C5D,iBA8CMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9CxC,wBAgDM,OAhDN,UAgDYsqD,YAAI,IAAI5/B,IAA4C,CAAE0mJ,eAhDlE,gCAmDIpkM,QAAQ7Z,MAAM,sCAAuC,CAAEijC,QAnD3D,yCAuDA,SAAUgmkB,GACRlslB,GADF,iFAUM,OAPIg2lB,EAAwBh2lB,EAAOgc,QAA/Bg6kB,oBAHV,SAUYlgnB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,4BACV5zD,OAAQ,CACNuukB,2BAfR,mBAKIlmkB,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAcE4J,EApBN,oBAqBUq8V,EAAWjuX,iBAAO4xB,GAED,OADjBmmkB,EAAkB9pO,EAASz2X,MAAM,CAAC,UAAW,UAAW,UAtBlE,iBAwBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxBxC,4BA0BUmmkB,EAAgBp9mB,IAAI,QA1B9B,iBA4BQ,OA5BR,UA4BcuhG,YAAI,IAAIx/B,IAAsD,CAAEq7iB,gBAAiBA,EAAgBp9mB,IAAI,WA5BnH,gCA+BQ,OA/BR,UA+BcuhG,YAAI,IAAIx/B,IAAsD,CAAEq7iB,qBA/B9E,gCAmCIn5lB,QAAQ7Z,MAAM,qCAAsC,CAAEijC,QAnC1D,yCAuCA,SAAUimkB,GACRnslB,GADF,iFAIE,OADQ2hQ,EAAiB3hQ,EAAOgc,QAAxB2lP,aAHV,SAIQvnL,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,oBACJh6N,MAAO,CAAEhf,OAAQ,wBANrB,OAQE,OARF,SAQQo6E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAVV,OAkBM,OAlBN,SAkBY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,0BACV5zD,OAAQ,CACNyukB,eAAgB,QAElB3qiB,KAAM,CACJ4qiB,kBAAmB,CACjB7ymB,KAAMq+Q,QA3BhB,mBAaI7xO,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAmBE4J,EAjCN,oBAkCUq8V,EAAWjuX,iBAAO4xB,GAEH,OADfsmkB,EAAwBjqO,EAASz2X,MAAM,CAAC,UAAW,UAAW,uBAAwB,QAnChG,iBAqCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GArCxC,wBAuCM,OAvCN,UAuCYsqD,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAzCd,QA4CM,OA5CN,UA4CYrF,YAAI,IAAIp/B,KAA4Co7iB,IA5ChE,QA6CM,OA7CN,UA6CYh8gB,YAAIl5F,YAAK67lB,KA7CrB,gCAgDIjglB,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QAhDxD,yCAoDA,SAAUkmkB,GACRpslB,GADF,mFAUM,OAVN,EAG0CA,EAAOgc,QAAvC0lP,EAHV,EAGUA,WAAY08U,EAHtB,EAGsBA,gBAHtB,SAUYtomB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,8BACV5zD,OAAQ,CACNyukB,eAAgB,OAChBF,oBAAqBt0V,GAEvBn2M,KAAM,CACJ4qiB,kBAAmB/X,OAnB3B,mBAKItujB,EALJ,EAKIA,KACA5J,EANJ,EAMIA,KAkBE4J,EAxBN,oBAyBUq8V,EAAWjuX,iBAAO4xB,GAEE,MADSq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,sBA1B7E,iBA4BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA5BxC,wBA+BM,OA/BN,UA+BYsqD,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAjCd,QAoCM,OApCN,UAoCYrF,YAAI,IAAIhgC,IAAmC,KApCvD,QAqCM,OArCN,UAqCYggC,YAAI,IAAI1/B,IAA6C,CAAEs7iB,oBAAqBt0V,KArCxF,gCAwCI5kQ,QAAQ7Z,MAAM,2CAA4C,CAAEijC,QAxChE,yCA4CA,SAAUmmkB,GACRrslB,GADF,2FAWE,OAXF,EASMA,EAAOgc,QALT0lP,EAJJ,EAIIA,WACA+sH,EALJ,EAKIA,SACAE,EANJ,EAMIA,WACAvlB,EAPJ,EAOIA,WAPJ,IAQIwlB,cARJ,MAQa,GARb,WAWQx0S,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,oBACJh6N,MAAO,CAAEhf,OAAQ,sBAbrB,OAeE,OAfF,SAeQo6E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAjBV,OA0BM,OA1BN,SA0BY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,8BACV5zD,OAAQ,CACNuukB,oBAAqBt0V,GAEvBn2M,KAAM,CACJknB,MAAO,CACLr7D,KAAM,CACJ,CACEq3W,WACAE,aACAvlB,aACAwlB,OAAO,YAAKA,WAxC1B,mBAqBI9+V,EArBJ,EAqBIA,KACA5J,EAtBJ,EAsBIA,KA0BE4J,EAhDN,oBAiDUq8V,EAAWjuX,iBAAO4xB,GAEP,MADCq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,OAAQ,OAAQ,IAlD5E,iBAoDMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApDxC,wBAuDM,OAvDN,UAuDYsqD,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAzDd,QA2DM,OA3DN,UA2DYrF,YAAI,IAAI1/B,IAA6C,CAAEs7iB,oBAAqBt0V,KA3DxF,gCA8DI5kQ,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QA9DrD,yCAkEA,SAAUomkB,GACRtslB,GADF,qFASE,OATF,EAOMA,EAAOgc,QAHT0lP,EAJJ,EAIIA,WACA+tH,EALJ,EAKIA,SACA4mO,EANJ,EAMIA,cANJ,SASQj8gB,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,oBACJh6N,MAAO,CAAEhf,OAAQ,sBAXrB,OAaE,OAbF,SAaQo6E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAfV,OAwBM,OAxBN,SAwBY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,8BACV5zD,OAAQ,CACNuukB,oBAAqBt0V,EACrB6sH,aAAckB,GAEhBlkU,KAAM8qiB,MAhCZ,mBAmBIvmkB,EAnBJ,EAmBIA,KACA5J,EApBJ,EAoBIA,KAgBE4J,EApCN,oBAqCUq8V,EAAWjuX,iBAAO4xB,GAEP,MADCq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,SAtC5D,iBAwCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAxCxC,wBA0CM,OA1CN,UA0CYsqD,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KA5Cd,QA+CM,OA/CN,UA+CYrF,YAAI,IAAI1/B,IAA6C,CAAEs7iB,oBAAqBt0V,KA/CxF,QAgDM,OAhDN,UAgDYtnL,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,wDACnB65E,SAAU,aAlDlB,gCAsDI59E,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QAtDrD,yCA0DA,SAAUqmkB,GACRvslB,GADF,mFAOE,OAPF,EAMMA,EAAOgc,QAFT0lP,EAJJ,EAIIA,WACA+tH,EALJ,EAKIA,SALJ,SAOQr1S,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,oBACJh6N,MAAO,CAAEhf,OAAQ,sBATrB,OAWE,OAXF,SAWQo6E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAbV,OAqBM,OArBN,SAqBY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,8BACV5zD,OAAQ,CACNuukB,oBAAqBt0V,EACrB6sH,aAAckB,OA3BtB,mBAgBI3/V,EAhBJ,EAgBIA,KACA5J,EAjBJ,EAiBIA,KAeE4J,EAhCN,oBAiCUq8V,EAAWjuX,iBAAO4xB,GAEH,MADCq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,OAAQ,IAlCxE,iBAoCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GApCxC,wBAuCM,OAvCN,UAuCYsqD,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,oBACJv5J,MAAM,KAzCd,QA2CM,OA3CN,UA2CYrF,YAAI,IAAI1/B,IAA6C,CAAEs7iB,oBAAqBt0V,KA3CxF,gCA8CI5kQ,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QA9CrD,yCAkDA,SAAUsmkB,GACRxslB,GADF,mFAeM,OAXF0hQ,EACE1hQ,EAAOgc,QADT0lP,WAGIrmL,EAAWqmL,EAAa,kCAAoC,oCAC5Dn2M,EAAOm2M,EAAa,CAAEA,cAAe,GAR7C,SAeY5rR,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,WACA5zD,OAAQ,CACNzyC,KAAM,WAERu2E,WAtBN,mBAUIz7B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BUq8V,EAAWjuX,iBAAO4xB,GAER,OADCq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,qBAAuBy2X,EAASz2X,MAAM,CAAC,UAAW,UAAW,iBA5BxH,iBA8BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BxC,wBAgCM,OAhCN,UAgCYsqD,YAAI,IAAI5+B,KAAyC,CAAE8iiB,gBAAiB,UAhChF,QAiCM,OAjCN,UAiCYlkgB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,yDACnB65E,SAAU,aAnClB,gCAuCI,OAvCJ,UAuCUN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,8DACnB65E,SAAU,WAzChB,QA2CI59E,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA3CxD,yCA+CA,SAAUumkB,GACRzslB,GADF,mFAeM,OAXF0hQ,EACE1hQ,EAAOgc,QADT0lP,WAGIrmL,EAAWqmL,EAAa,kCAAoC,oCAC5Dn2M,EAAOm2M,EAAa,CAAEA,cAAe,GAR7C,SAeY5rR,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,WACA5zD,OAAQ,CACNzyC,KAAM,WAERu2E,WAtBN,mBAUIz7B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAeE4J,EA1BN,oBA2BUq8V,EAAWjuX,iBAAO4xB,GAER,OADCq8V,EAASz2X,MAAM,CAAC,UAAW,UAAW,qBAAuBy2X,EAASz2X,MAAM,CAAC,UAAW,UAAW,iBA5BxH,iBA8BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA9BxC,wBAgCM,OAhCN,UAgCYsqD,YAAI,IAAI5+B,KAAyC,CAAE8iiB,gBAAiB,UAhChF,QAiCM,OAjCN,UAiCYlkgB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,2DACnB65E,SAAU,aAnClB,gCAuCI,OAvCJ,UAuCUN,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,gEACnB65E,SAAU,WAzChB,QA2CI59E,QAAQ7Z,MAAM,mCAAoC,CAAEijC,QA3CxD,yCA+CA,SAAUu3jB,GACRz9kB,GADF,yFAWM,OARIs+kB,EAAoBt+kB,EAAOgc,QAA3BsikB,gBACFjjgB,EAAWijgB,IAAoBzB,EAA6CyZ,KAAO,kCAAoC,kCAJ/H,SAWYxgnB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,WACA5zD,OAAQ,CACNzyC,KAAM,eAhBd,mBAMI86C,EANJ,EAMIA,KACA5J,EAPJ,EAOIA,KAcE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAED,OADjB4lU,EAAkBy2B,EAASz2X,MAAM,CAAC,UAAW,UAAW,qBAvBlE,iBAyBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA2BM,OA3BN,UA2BYsqD,YAAI,IAAI1+B,KAAkD,CAAE4iiB,kBAAiB5oP,qBA3BzF,mCA+BU95Q,EAAe19E,iBAAOgoB,GACtB2mW,EAAYjxS,EAAalmF,MAAM,CAAC,UAAW,QAAS,SACpD+zD,EAAemyB,EAAalmF,MAAM,CAAC,UAAW,QAAS,UAC3C,MAAdm3X,GAAsC,uCAAjBpjU,EAlC7B,iBAmCM,OAnCN,UAmCY2wB,YAAI,IAAI1+B,KAAkD,CAAE4iiB,kBAAiB5oP,gBAAiBx3V,iBAAO,OAnCjH,gCAqCMpB,QAAQ7Z,MAAM,8BAA+B,CAAEijC,QArCrD,yCA0CA,SAAUwmkB,GAAc1slB,GAAxB,6EAOM,OAPN,SAOYlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,iCAVhB,mBAEIvrD,EAFJ,EAEIA,KACA5J,EAHJ,EAGIA,KAUE4J,EAbN,iBAeI,OADMqtD,EAAgBj/E,iBAAO4xB,GAdjC,SAeUsqD,YAAI,IAAIlgC,KAAqB,CACjCq8iB,WAAYp5gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAhB7D,+BAmBIoH,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QAnB9C,yCAuBA,SAAUymkB,GAAc3slB,GAAxB,+EAQM,OAPIu2lB,EAAev2lB,EAAOgc,QAAtBu6kB,WADV,SAQYzgnB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gCACV9vB,KAAM,CACJ+gS,WAAYiqQ,OAbpB,mBAGIzmkB,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAaE4J,EAjBN,iBAmBI,OADMqtD,EAAgBj/E,iBAAO4xB,GAlBjC,UAmBUsqD,YAAI,IAAIlgC,KAAqB,CACjCq8iB,WAAYp5gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBApB7D,gCAuBIoH,QAAQ7Z,MAAM,yBAA0B,CAAEijC,QAvB9C,yCA2BA,SAAU0mkB,KAAV,+EACsE,OADtE,SAC4Erxa,YAAI,CAC5EzlM,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ+gS,WAAY,qBACZD,SAAU,YAIhBv2W,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV9vB,KAAM,CACJ+gS,WAAY,wBACZD,SAAU,cAlBpB,sCACSmqQ,EADT,KACqCC,EADrC,MAuBMD,EAA2B1mkB,OAAQ2mkB,EAA8B3mkB,KAvBvE,iBAwBI,OAxBJ,SAwBUsqD,YAAI,IAAIt+B,KAA6B,CACzC46iB,mBAAoBx4lB,iBAAOs4lB,EAA2B1mkB,MAAMp6B,MAAM,CAAC,UAAW,UAAW,aAAc,uBACvGihmB,sBAAuBz4lB,iBAAOu4lB,EAA8B3mkB,MAAMp6B,MAAM,CAAC,UAAW,UAAW,aAAc,6BA1BnH,+BA8BI,OADMwwB,EAAMswkB,EAA2BtwkB,KAAOuwkB,EAA8BvwkB,IA7BhF,UA8BUk0D,YAAI,IAAIp+B,KAA4B91B,IA9B9C,QA+BIppB,QAAQ7Z,MAAM,oCAAqC,CAAEijC,QA/BzD,yCAmCA,SAAU2mkB,GAAyB7slB,GAAnC,yEAIE,OAJF,EAGMA,EADFgc,eAFJ,kBAIQlmC,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACvDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJ+gS,WAAY,wBACZD,SAAU,OACVsqQ,sBAAuB36kB,OAX/B,wCAgBA,SAAU8wkB,GAAsB9slB,GAAhC,iFAaM,OAbN,EAMMA,EAJFgc,QACEklB,EAHN,EAGMA,MACAk7Q,EAJN,EAIMA,UAJN,SAaYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV9vB,KAAM,CACJ+gS,WAAY,qBACZD,SAAU,OACVnrT,aApBR,gBAQIpR,EARJ,EAQIA,KACA5J,EATJ,EASIA,IAeE4J,EACO,OAATssR,QAAS,IAATA,OAEAt/S,QAAQ7Z,MAAM,oCAAqC,CAAEijC,QA3BzD,wCA+BA,SAAU6mkB,GAAY/slB,GAAtB,mFAE0B,OAF1B,EACwCA,EAAOgc,QAArCqiF,EADV,EACUA,QAASv9E,EADnB,EACmBA,QAASk8D,EAD5B,EAC4BA,QAD5B,SAEgClnG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC/EtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,oBACV9vB,KAAM,CACJ8yC,UACAv9E,WAEFk8D,QAAO,OAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAS3pF,WAVxB,gBAEUy8B,EAFV,EAEUA,KAAM7sC,EAFhB,EAEgBA,MAWV6sC,EACFqzjB,GAAarzjB,EAAM,YAAa,YAEhChzB,QAAQ7Z,MAAM,sBAAuB,CAAEA,UAhB3C,wCAoBO,SAAU+pmB,GACfhtlB,GADK,6FAGa,OAHb,SAGmB60E,YAAOqb,wBAAc40f,KAHxC,OAMiB,OAHhB8R,EAHD,OAICruZ,EAAaquZ,EAAUlhmB,MAAM,CAAC,OAAQ,IAJvC,SAMuB5f,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAC1EtpC,QAAS,CACP,CACEo/D,QAAS,OACTC,SAAU,aACVo6O,SAAS,EACT93N,WAAW,EACXC,WAAW,OAbZ,UAMC43N,EAND,QAkBDjtH,EAlBC,iBAmByC,OAnBzC,UAmB+CzyN,YAAKy/U,GAAYC,EAAc1lS,KAAMy4K,GAnBpF,QAoBH,OADMwgG,EAnBH,iBAoBG3uN,YAAI,IAAI99B,KAAuB,CACnCowO,WAAY,GACZnyM,OAAQ,gBAtBP,QA+BC,OA/BD,UA+BOzkG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kBACV9vB,KAAM,CACJi9O,OAAQO,EAAalwT,IAAI,WApC5B,oBA0BDi3C,EA1BC,EA0BDA,KACA5J,EA3BC,EA2BDA,KAcE4J,EAzCD,iBA6CD,OAHMqtD,EAAgBj/E,iBAAO4xB,GACvB+mkB,EAAa15gB,EAAcznF,MAAM,CAAC,UAAW,UAAW,kBAAmB,IAC3E+ja,EAAkBo9L,EAAWh+mB,IAAI,MA5CtC,UA6CKuhG,YAAI,IAAI99B,KAAuB,CACnCowO,WAAY,GACZnyM,OAAQ,gBA/CT,QAiDD,OAjDC,UAiDKzkG,YAAKwhb,KAAW,IAAI70N,KAAgB,CACxCg3N,UACAzkb,KAAM6hnB,EAAWh+mB,IAAI,WAnDtB,gCAsDD,OAtDC,UAsDKuhG,YAAI,IAAI99B,KAAuB,CACnCowO,WAAY,IACZnyM,OAAQ,YAxDT,WA0DDz9E,QAAQ7Z,MAAM,2BAA4B,CAAEijC,QACtC2mW,EAAY3mW,EAAIlK,QAAQ/4B,MAAM65F,KAC9BrzB,EAAevjC,EAAIlK,QAAQ/4B,MAAMA,OACnC4pY,IAAapjU,EA7DhB,iBA8DC,OA9DD,UA8DO2wB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,UAAD,OAAY0mW,EAAZ,YAAyBpjU,GAChCixB,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,SACZL,SAAU,aAnEf,gCAyEH,OAzEG,UAyEGz6L,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,gDACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,SACZL,SAAU,aA9EX,yCAoFP,SAAS0gD,GAAWj/O,EAAaiyH,GAC/B,IACE9oL,EACEtF,KAAMthC,IAAI,SADZ4mC,SAGF,OAAO62D,GAAOiyH,GAAQ,IAAIx0K,SAAQ,SAACC,EAASi3B,GAC1C,IAAMyqQ,EAAM,IAAIrsI,eACVv5J,EAAO,IAAI6lS,SAEjB7lS,EAAKy0G,OAAO,OAAQgkE,GACpBz4K,EAAKy0G,OAAO,OAAQ,QAEpBmxL,EAAIj2O,KAAK,OAAQnJ,GAEjBo/O,EAAII,YAAc,SAAC54U,GACjBuiC,EAAS,IAAI68B,KAAuB,CAClCowO,WAAY,EACZnyM,OAAQ,YAIZm7O,EAAIE,OAAO93O,iBAAiB,YAAY,SAACm+B,GACvC,IAAMywK,EAAa76S,KAAKo/E,MAAOgrD,EAAM2lB,OAAS3lB,EAAMgzH,MAAS,KAAO,EACpExvN,EAAS,IAAI68B,KAAuB,CAClCowO,aACAnyM,OAAQ,iBAIZm7O,EAAI53O,iBAAiB,WAAW,SAAC5gG,GAC/B,MAA2B64U,aAAmBL,GAAtC15S,EAAR,EAAQA,QAAS/4B,EAAjB,EAAiBA,MACbA,GACF6Z,QAAQ7Z,MAAM,uBAAwBA,GACtCgoE,EAAOhoE,GACPw8B,EAAS,IAAI68B,KAAuB,CAClCowO,WAAY,IACZnyM,OAAQ,cAGVvmD,EAAQ91B,iBAAO8d,EAAQusL,KAAK91H,MAAM,KAClChzD,EAAS,IAAI68B,KAAuB,CAClCowO,WAAY,GACZnyM,OAAQ,kBAIdm7O,EAAIr6L,KAAKvrG,MAIN,SAAUm9jB,GACfjtlB,GADK,iFASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,wBAfb,mBAIHx8T,EAJG,EAIHA,KACA5J,EALG,EAKHA,IAcEsuiB,EAAmB,YACnB1kiB,EApBC,iBAwBH,OAHMq8V,EAAWjuX,iBAAO4xB,GAClBgnkB,EAAsB3qO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,qBAChF8+jB,EAA4C,aAAxBsiC,GAA8D,iBAAxBA,EAA0CA,EAAsB,WAvBvH,UAwBG18gB,YAAI,IAAIt3C,KAAmC,CAAE0xhB,sBAxBhD,gCA0BH13jB,QAAQ7Z,MAAM,4BAA6B,CAAEijC,QA1B1C,iCA4BE,CACLsuiB,mBACA1kiB,OACA5J,QA/BG,yCAmCA,SAAUgnkB,GACfltlB,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAUoZ,IACVnZ,WAAYkZ,SAfb,mBAIH11U,EAJG,EAIHA,KACA5J,EALG,EAKHA,IAcE6wkB,EAAwDhqmB,kBACxD+iC,EApBC,iBAwBH,OAHMknkB,EAAuB94lB,iBAAO4xB,GAAMp6B,MAAM,CAAC,UAAW,UAAW,aAAc8vW,MAErFuxP,EAAoBhqmB,OAAKF,OAAOmqmB,GAAwBA,EAAuBjqmB,iBAvB5E,UAwBGqtF,YAAI,IAAIl3C,KAAoC,CAAE6zjB,uBAxBjD,gCA0BHj6lB,QAAQ7Z,MAAM,6BAA8B,CAAEijC,QA1B3C,iCA4BE,CACL6wkB,oBACAjnkB,OACA5J,QA/BG,yCAmCA,SAAUmzY,GACfr5Z,GADK,+EASD,OATC,SASKlqB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,mBAfb,mBAIHx8T,EAJG,EAIHA,KACA5J,EALG,EAKHA,KAeE4J,EApBC,iBAuBH,OAFMq8V,EAAWjuX,iBAAO4xB,GACxBmnkB,EAAmB9qO,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,cAAe,UAtBnF,UAuBG0kF,YAAI,IAAI92C,KAAmC,CAAE2zjB,sBAvBhD,gCA0BH,OADAn6lB,QAAQ7Z,MAAM,4BAA6B,CAAEijC,QAzB1C,UA0BGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,oDACnB65E,SAAU,WA5BT,iCA+BE,CACLu8gB,mBACAnnkB,OACA5J,QAlCG,yCAsCA,SAAUinkB,GACfntlB,GADK,iFAGL,OAHK,SAGCo6E,YAAI,IAAIx8B,KAA0C,CAAEs5iB,kCAAkC,KAHvF,OAUD,OAVC,SAUKphnB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,kCAbT,mBAKHvrD,EALG,EAKHA,KACA5J,EANG,EAMHA,KAUE4J,EAhBC,iBAkCH,OAjBMq8V,EAAWjuX,iBAAO4xB,GAClBokiB,EAAyC/nM,EAASz2X,MAAM,CAAC,UAAW,UAAW,cAAgB3I,iBAC/FoqmB,EAA8BjjC,EACjCp2kB,KAAI,SAACkxE,GAEJ,IACMooiB,GADUpoiB,EAAGn2E,IAAI,YAAiCkU,kBAErDjP,KAAI,SAACmwT,GAEJ,IACMopT,GADQppT,EAAOp1T,IAAI,UAA+BkU,kBAC9B5E,QAAO,SAAC0Y,GAAD,OAAQA,EAAEhoB,IAAI,SAAW,IAAIq1C,iBAC9D,OAAO+/Q,EAAOzxT,IAAI,QAAS66mB,MAE5BlvmB,QAAO,SAAC8jE,GAAD,OAASA,EAAEv2D,MAAM,CAAC,SAAU,WAAwB,IAAIw4B,iBAClE,OAAO8gC,EAAGxyE,IAAI,UAAW46mB,MAE1BjvmB,QAAO,SAAC6mE,GAAD,OAAUA,EAAGt5D,MAAM,CAAC,eAAgB,WAAwB,IAAIw4B,iBAjCvE,UAkCGksD,YAAI,IAAIt8B,KAA2C,CAAEo2gB,sBAAuBijC,KAlC/E,gCAqCH,OADAr6lB,QAAQ7Z,MAAM,oCAAqC,CAAEijC,QApClD,UAqCGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,sDACnB65E,SAAU,WAvCT,QA0CL,OA1CK,UA0CCN,YAAI,IAAIx8B,KAA0C,CAAEs5iB,kCAAkC,KA1CvF,iCA2CE,CACLpnkB,OACA5J,QA7CG,yCAiDA,SAAUknkB,GACfptlB,GADK,iEAG8B,OAH9B,SAGoC60E,YAAOq/C,gBAH3C,iCAKH,OALG,SAKGp+I,YAAKm3mB,GAAqB,IAAIrqjB,MALjC,OAQ0C,OAR1C,SAQgDiyC,YAAO2/C,gBARvD,kCAUH,OAVG,UAUG1+I,YAAKq3mB,GAA6B,IAAIzviB,MAVzC,yCAcA,SAAUuzU,GACfjxX,GADK,yFAYD,OATEo8S,EAHD,UAGap8S,EAAOgc,eAHpB,aAGa,EAAgBogS,UAC5B6nF,EAJD,UAIUjkY,EAAOgc,eAJjB,aAIU,EAAgBioX,OAJ1B,SAYKnuZ,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,gCAlBb,mBAOHx8T,EAPG,EAOHA,KACA5J,EARG,EAQHA,KAcE4J,EAtBC,iBA0BH,OAHMq8V,EAAWjuX,iBAAO4xB,GAClBk+O,EAAMm+G,EAASz2X,MAAM,CAAC,UAAW,UAAW,aAAc,6BAC1D4hmB,EAA4BtpV,IAAQo3F,IAAkBmyP,QAAUvpV,IAAQo3F,IAAkBoyP,WAAaxpV,IAAQo3F,IAAkBqyP,YAAezpV,EAAMo3F,IAAkBmyP,OAzB3K,UA0BGn9gB,YAAI,IAAI12C,KAA2C,CAAE4zjB,8BA1BxD,QA2BCl7S,GACFA,IA5BC,wBAgCH,OADAt/S,QAAQ7Z,MAAM,oCAAqC,CAAEijC,QA/BlD,UAgCGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,WAlCT,QAoCCupT,GACFA,EAAO/9W,GArCN,iCAwCE,CACL4J,OACA5J,QA1CG,yCA8CA,SAAUmnkB,GACfrtlB,GADK,6EAWD,OARIs3lB,EAA6Bt3lB,EAAOgc,QAApCs7kB,yBAHH,SAWKxhnB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAU,mBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,4BAEd/gS,KAAM,CAAE+riB,gCAnBP,mBAMHxnkB,EANG,EAMHA,KACA5J,EAPG,EAOHA,KAeE4J,EAtBC,iBAuBH,OAvBG,SAuBGsqD,YAAI,IAAI12C,KAA2C,CAAE4zjB,8BAvBxD,OAwBH,OAxBG,UAwBGl9gB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,iDACnB65E,SAAU,aA1BT,gCA8BH,OADA59E,QAAQ7Z,MAAM,oCAAqC,CAAEijC,QA7BlD,UA8BGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,sDACnB65E,SAAU,WAhCT,yCAqCP,SAAU4ygB,GAAoBttlB,GAA9B,6EAEgB,OAFhB,kBAEsB60E,YAAOj2C,eAF7B,OAGkB,OADRw9C,EAFV,gBAGwBvH,YAAOj5C,eAH/B,OAKmB,OAFTC,EAHV,OAIYL,EAAWx7B,EAAOgc,QAAlBwf,OAJZ,UAKyB1lD,YAAK4hnB,KAAkBC,gBAAiBv7gB,EAAKvgD,EAAOL,GAL7E,QAMI,OADM9yC,EALV,iBAMU0xF,YAAI,IAAIl8B,KAAmCx1D,IANrD,0DAQIoU,QAAQ7Z,MAAM,4BAAd,MARJ,yD,6BCltMA,sDAKI+ka,EAAqBzuY,IAAMC,gBAMxB,SAASugY,IACd,OAAOxgY,IAAMgG,WAAWyoY,GAEXA,O,6BCdf,WAKIlN,EALJ,OAKkBvhY,EAAMC,cAAc,IAMvBshY,O,sLCsCT88M,E,4MAEG97kB,MAAQ,CAAEgqF,UAAU,G,EAEpB+xf,kBAAoB,WACzB,EAAKnggB,SAAS,CAAEoO,UAAW,EAAKhqF,MAAMgqF,Y,4CAGxC,WACE,MAA+ChxH,KAAKkqC,MAA5CgvC,EAAR,EAAQA,QAAS5yC,EAAjB,EAAiBA,SAAU08kB,EAA3B,EAA2BA,gBAE3B,OACE,eAAC,IAAD,WACE,cAAC,IAAD,aACE93lB,OACE,cAAC,IAAD,CACEkuD,UAAWm0C,IAAWr0C,EAAQm/M,OAAT,eAClBn/M,EAAQ+piB,WAAajjnB,KAAKgnC,MAAMgqF,WAEnCnM,QAAS7kH,KAAK+inB,kBACd,gBAAe/inB,KAAKgnC,MAAMgqF,SAC1B,aAAW,YANb,SAQE,cAAC,IAAD,OAGAgyf,IAEN,cAAC,IAAD,CAAUh7e,GAAIhoI,KAAKgnC,MAAMgqF,SAAUvsB,QAAQ,OAAOwjC,eAAe,EAAjE,SACE,cAAC,IAAD,UACG3hG,a,GA9BiB7B,aAsCfw2C,iBAlEA,SAACC,GAAD,MAA+B,CAC5Cm9M,OAAQ,CACNh8J,UAAW,eACX7H,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,YAAa,CAChDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,YAGzC05V,WAAY,CACV5mf,UAAW,qBA0DAphD,CAAmB6niB,I,qXChFtBI,E,iBAAAA,K,oCAAAA,E,oDAAAA,E,wDAAAA,E,gCAAAA,E,kEAAAA,E,sDAAAA,E,0EAAAA,E,gCAAAA,E,oDAAAA,E,0CAAAA,E,8DAAAA,E,8DAAAA,E,4BAAAA,E,8DAAAA,E,sDAAAA,E,0EAAAA,E,gFAAAA,E,4DAAAA,E,iDAAAA,M,KAsBL,IAoBMC,EAGX,WACSj8kB,GACN,yBADMA,UACP,KAJchnC,KAAOgjnB,EAAmBE,kBAuB/BC,EAGX,WACSn8kB,GAIN,yBAJMA,UAIP,KAPchnC,KAAOgjnB,EAAmBI,gBAU/BC,EAGX,WACSr8kB,GAKN,yBALMA,UAKP,KARchnC,KAAOgjnB,EAAmBM,iCAwB/BC,EAGX,WACSv8kB,GAKN,yBALMA,UAKP,KARchnC,KAAOgjnB,EAAmBQ,cAW/BC,EAGX,WACSz8kB,GAMN,yBANMA,UAMP,KATchnC,KAAOgjnB,EAAmBU,+BAY/Br2Q,EAGX,WACSrmU,GAGN,yBAHMA,UAGP,KANchnC,KAAOgjnB,EAAmBW,gBAmB/BC,EAGX,WACS58kB,GAKN,yBALMA,UAKP,KARchnC,KAAOgjnB,EAAmBa,qBAuB/BC,EAGX,WACS98kB,GAKN,yBALMA,UAKP,KARchnC,KAAOgjnB,EAAmBe,2BAwB/BC,EAGX,WACSh9kB,GAKN,yBALMA,UAKP,KARchnC,KAAOgjnB,EAAmBiB,wCAW/BC,EAGX,WACSl9kB,GACN,yBADMA,UACP,KAJchnC,KAAOgjnB,EAAmBmB,+B,6BCxN5C,6LA6Bar5B,EAAoB,iBAoIlB/1gB,sBACbgG,aAjHa,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN3L,YAA+B,EAAlBtmC,EAAMZ,WAErB/iE,KAAM,CACJ+jE,MAAO,SA6GTn8B,YAAgB,gBAChB0/D,mBA7BsB,SAAC73E,GAAD,OAAgB8L,YAAyB,CAC/DwxkB,aAAc7mX,eADwB3qN,CAErC9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,WACA45kB,mBAAoB,SAAC9kf,EAAsB+kf,EAA4Bj7f,EAAkBv9E,GACvFrB,EAAS,IAAI64C,KAAyB,CACpC74C,WACA80F,SACA+kf,mBACAj7f,UACAv9E,cAGJowX,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAI+pjB,EACJrgf,MAAM,UAOC11B,EAxGO,SAACwviB,GACrB,IACEhlf,EAUEglf,EAVFhlf,OACAvmD,EASEuriB,EATFvriB,QACAoriB,EAQEG,EARFH,aACAE,EAOEC,EAPFD,iBAJF,EAWIC,EANFjnf,kBALF,MAKe,GALf,EAMEjU,EAKEk7f,EALFl7f,QACAv9E,EAIEy4kB,EAJFz4kB,QACAowX,EAGEqoN,EAHFroN,YACAmoN,EAEEE,EAFFF,mBACAx4lB,EACE04lB,EADF14lB,EAGIixH,EAAoBtrG,sBAAY+P,gBAOtC,OACE,cAAC,IAAD,CACE6tE,SAAU07d,EACV9xgB,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAEjB2vH,YAAak1R,EALf,SAQIkoN,EAEI,cAAC,IAAD,UACE,eAAC,IAAD,CACE9qiB,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SAJb,UAME,cAAC,IAAD,IACA,cAAC,IAAD,CAAmBh4C,GAAG,uBAAuBy4E,QAAQ,KAArD,SACI3tF,EAAE,8CAKV,qCACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAmBkV,GAAG,2BAA2By4E,QAAQ,KAAzD,SACI3tF,EAAE,0CAEN,cAAC,IAAD,CAAmBkV,GAAG,2BAA2By4E,QAAQ,QAAzD,SACI3tF,EAAE,mDAGR,eAAC,IAAD,WACE,cAAC,IAAD,CACE84F,QAzCM,WACpB,IAAM6/f,EAAwBvwL,YAAiB5qU,EAASiU,GAAawf,GACrEune,EAAmB9kf,EAAQ+kf,EAAkBE,EAAkB14kB,IAwCjDi6D,MAAM,UACN7sB,UAAWF,EAAQi0C,OAHrB,SAKIphG,EAAE,sCAGN,cAAC,IAAD,CACE84F,QAASu3S,EACTn2T,MAAM,UACN7sB,UAAWF,EAAQi0C,OAHrB,SAKIphG,EAAE,oC,6BC5HtB,IAAI46L,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0QACD,WAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,yGACD,aAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,gHACD,UAEJ3K,EAAQywH,QAAUq4I,G,+RC8FLimI,EAAwB,yBAG/BT,E,4MAuBGnsR,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAKI,EAAKg3B,MAJPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAC,EAHF,EAGEA,KACA5wD,EAJF,EAIEA,cAGI6wD,EAAY/7G,OAAO47G,GACP,MAAdA,GACF5yE,EAAS,IAAIgzE,IAAkBJ,IAC/B5yE,EAAS,IAAIizE,IAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAOuzC,EAAM,mBAAoBD,EAAU77F,MAAK,SAAC2wV,GACxD,OAAOA,EAAQvuW,IAAI,QAAUw5G,OAG/B9W,IAAmB9rE,kBAAgBgqlB,aAAc93jB,OAEjDliB,EAASu/B,YAAOuzC,EAAM,YAAa,KACnC9yE,EAASu/B,YAAOuzC,EAAM,mBAAoB,QAExCvqG,GACF,EAAK2qG,kB,EAIFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAKI,EAAKg3B,MAJPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAN,EAHF,EAGEA,KACA5wD,EAJF,EAIEA,cAEgB,MAAdixD,GACFnzE,EAAS,IAAIqzE,IAAcF,IAC3BnzE,EAASu/B,YAAOuzC,EAAM,oBAAqBM,EAAUp8F,MAAK,SAACuwV,GACzD,OAAOA,EAASnuW,IAAI,QAAU+5G,OAGhCrX,IAAmB9rE,kBAAgBiqlB,mBAAoB/3jB,OAEvDliB,EAASu/B,YAAOuzC,EAAM,aAAc,KACpC9yE,EAASu/B,YAAOuzC,EAAM,oBAAqB,QAEzCvqG,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAKI,EAAKh0E,MAJPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OACAV,EAHF,EAGEA,KACA5wD,EAJF,EAIEA,cAEY,MAAVqxD,GACFvzE,EAASu/B,YAAOuzC,EAAM,gBAAiBU,EAAOx8F,MAAK,SAACwwV,GAClD,OAAOA,EAAKpuW,IAAI,QAAUm6G,OAG5BzX,IAAmB9rE,kBAAgBkqlB,UAAWh4jB,OAE9CliB,EAASu/B,YAAOuzC,EAAM,SAAU,KAChC9yE,EAASu/B,YAAOuzC,EAAM,gBAAiB,S,EAIpC6+M,SAAW,SAACnxT,IAKjBu+X,EAFI,EAAKx/V,MADPw/V,a,EAMGo7O,YAAc,SAAChqV,GAAD,OAAgC,SAAC1yR,GACpD,IAAQykD,EAAkB,EAAK3iB,MAAvB2iB,cACJzkD,EAAE4kB,OAAOtxB,OACX+qG,IAAmBq0L,EAAWjuO,O,uDApGlC,WACE,MAII7sD,KAAKkqC,MAHPk0E,EADF,EACEA,aACAjD,EAFF,EAEEA,WACAhX,EAHF,EAGEA,aAMF,GAHAia,IACAja,IAEkB,MAAdgX,EAAoB,CACtB,IAAMuC,EAAYvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OAC1C,MAAb88F,GACF19G,KAAKs9G,cAAcI,GAAW,GAEhC,IAAMI,EAAa3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OAC3C,MAAdk9F,GACF99G,KAAK69G,eAAeC,GAAY,M,oBAuFtC,WACE,MAWI99G,KAAKkqC,MAVPm4R,EADF,EACEA,aACAt2S,EAFF,EAEEA,EACAyxF,EAHF,EAGEA,UACAO,EAJF,EAIEA,UACAI,EALF,EAKEA,OACAjlC,EANF,EAMEA,QACAiiC,EAPF,EAOEA,WACAtQ,EARF,EAQEA,UACAh+C,EATF,EASEA,cACA88U,EAVF,EAUEA,oBAGIpsR,EAA2B,MAAdpC,EAAqBA,EAAWv6F,MAAM,CAAC,WAAY,UAAW,QAAU,EACnD,MAAd28F,GAAqB57G,OAAO47G,GAEtD,OACE,uBACE++M,SAAU+F,EAAariU,KAAKs8T,UAC5BhhN,MAAO,CACLx/B,QAAS,UAHb,UAME,eAAC,IAAD,CACEtC,WAAW,EACXM,QAAQ,aACRb,WAAW,SACXqB,QAAS,EAJX,UAME,cAAC,IAAD,CACEd,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACE1vC,MAAO,CACLpJ,MAAO/U,EAAE,qBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,KACd+mB,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBoqlB,oBAG7Cv2mB,KAAK,cACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,QAGf,cAAC,IAAD,CACEtgC,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACE1vC,MAAO,CACLpJ,MAAO/U,EAAE,wBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,KACd+mB,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBqqlB,uBAG7Cx2mB,KAAK,WACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,QAGf,cAAC,IAAD,CACElgC,MAAM,EACNI,GAAI,EACJE,GAAI,EACJU,GAAI,GAJN,SAME,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAO/U,EAAE,4BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,iBACnBgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,cACfp9G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,OAGlBnwG,KAAK,sBACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNI,GAAI,EACJE,GAAI,EACJU,GAAI,GAJN,SAME,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAO/U,EAAE,kCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAiB,CAEfC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,iBACnBgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAW,CACT6B,SAAUx7G,KAAK69G,eACf39G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,OAGlBnwG,KAAK,uBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,SAIN,cAAC,IAAD,CACEvpH,MAAM,EACNI,GAAI,EACJE,GAAI,EACJU,GAAI,GAJN,SAME,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,iBACnBgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,WACf/9G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,OAGlBnwG,KAAK,mBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,SAIN,cAAC,IAAD,CACEvpH,MAAM,EACNI,GAAI,EACJE,GAAI,EACJU,GAAI,GAJN,SAME,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,kCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,KACd+mB,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBsqlB,mBAG7Cz2mB,KAAK,YACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,QAGf,cAAC,IAAD,CACEtgC,WAAW,EACXJ,UAAWF,EAAQm/O,SAFrB,SAIE,cAAC,QAAD,CACEnuR,MAAO,CACLpJ,MAAO/U,EAAE,0BACT3wB,SAAS,EACTimH,cAAc,EACdzH,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACV6B,SAAU,WACR/U,IAAmB9rE,kBAAgBuqlB,sBAAuBr4jB,QAIhEr+C,KAAK,aACLwrG,SAAU,CAACgpF,KACX1pH,UAAWiiC,IAhBb,SAkBG1Q,GAAaA,EAAU7hG,KAAI,SAAC6hD,GAC3B,OAAO,cAAC,IAAD,CAA+BnvD,MAAOmvD,EAAK9mD,IAAI,MAA/C,SAAuD8mD,EAAK9mD,IAAI,UAAjD8mD,EAAK9mD,IAAI,iBAKvC,cAAC,IAAD,CACEy1E,WAAW,EACXJ,UAAWF,EAAQisiB,WAFrB,SAIGx7O,a,GAzW0BllW,iBA8YtBwwC,sBACbgG,aArba,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAEN8gT,SAAU,CACRv8O,QAASZ,EAAMZ,QAAQ,MAEzB6qiB,WAAY,CACV7ogB,UAAWphC,EAAMZ,QAAQ,IAE3B6yC,OAAQ,CACNlnB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,WA4a9B3pF,YAAgB,gBAChB0/D,mBAjCsB,SAAC73E,EAAYyF,GAEnC,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACTysR,EAEJ,OAAO,aACLzsR,QACG3qE,YAAyB,CAC1B0qE,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR8zG,aAAcy4D,cACdpwK,WAAYC,wBAAcqC,GAC1B5S,UAAW5qD,eANVnN,CAOA9L,OAGoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEf9a,aAAc,WACZx5D,EAAS,IAAIgiC,MAEfhiC,eAQF48R,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,EAClB++D,aAAc,SAACx5O,EAAQpiH,GAAT,OAAsBA,EAAS,IAAI+2B,KAA4B,CAC3EqrF,SACA+tI,UAAWngQ,kBAAgB2qlB,eAE7B7+O,gBAAiB,SAAC7yX,EAAQ+2B,GAAT,OAAsBA,EAAS,IAAIi3B,KAA+B,CACjFk5N,UAAWngQ,kBAAgB2qlB,iBAG/Bn2f,IAlBal6C,CAmBbw0T,I,6BCnhBK,IAAK87O,EAAZ,kC,SAAYA,K,gCAAAA,E,0BAAAA,E,+BAAAA,M,+KCQAC,E,iBAAAA,K,sCAAAA,E,sDAAAA,E,gDAAAA,E,gCAAAA,E,gEAAAA,E,4DAAAA,E,sDAAAA,E,4CAAAA,E,iEAAAA,M,KAkBL,IAIMC,EAGX,WACSv+kB,GACN,yBADMA,UACP,KAJchnC,KAAOslnB,EAAaE,2BAmBzBC,EAGX,WACSz+kB,GAIN,yBAJMA,UAIP,KAPchnC,KAAOslnB,EAAaI,gBAWzBC,EAGX,WACS3+kB,GAGN,yBAHMA,UAGP,KANchnC,KAAOslnB,EAAaM,sBAoCzBC,EAGX,WACS7+kB,GAGN,yBAHMA,UAGP,KANchnC,KAAOslnB,EAAaQ,iC,6YCuKvBC,EA7LkB,wEAIK,GAHpCC,EAD+B,EAC/BA,uBACAxf,EAF+B,EAE/BA,OACAC,EAH+B,EAG/BA,qBAH+B,OAIY,SAA2ChtjB,GAAqD,IAErIwskB,EAFoI,6JAMxI,SAAelllB,GACb,MAOIjhC,KAAKkqC,MANPmZ,EADF,EACEA,KACA25F,EAFF,EAEEA,kBACAope,EAHF,EAGEA,UACAn5N,EAJF,EAIEA,eACAo5N,EALF,EAKEA,kBACA17kB,EANF,EAMEA,SAKF,GAAU,MAAN1J,GAAcylkB,EAEhB,GADA2f,EAAkBpllB,GACdoiB,IAAS5pB,WAAS8vB,GACpB68jB,EAAUnllB,OACL,CAiBLgsX,EAAehsX,GAhBG,SAACw+F,GACZud,GAAqB35F,IAAS5pB,WAAS6pB,KAAiC,MAA1Bm8E,EAAO17H,IAAI,YAC5D4mC,EAAS,IAAIgK,IAAsB,CACjCtD,QAAS,qCACTu0D,SAAU,cAKD,WACbj7D,EAAS,IAAIgK,IAAsB,CACjCtD,QAAS,gCACTu0D,SAAU,iBAnCoH,kCA4CxI,SAA4BohgB,GAC1B,MAKIhnmB,KAAKkqC,MAJP+8jB,EADF,EACEA,aACA14jB,EAFF,EAEEA,MACU+3kB,EAHZ,EAGE/uf,SACA5sF,EAJF,EAIEA,SAGI4sF,EAAqB,MAAVyve,EAAiBA,EAASsf,EAE3C,GAAoB,MAAhBrf,IAAsC,IAAd1ve,EAG5B,GAAa,MAAThpF,EAIJ,GAAKA,EAAMoE,OAAOpxC,eAAe,YAAjC,CAKA,IAAM22Y,EAAe1kI,uBAAajlO,EAAMw7E,KAAP,YAAC,eAAiBx7E,EAAMoE,QAAxB,IAAgC4kF,cACjE5sF,EAASiuC,YAAQs/T,SALflwX,QAAQ08E,MAAR,wDAA+Dn2D,EAAMw7E,KAArE,2CAJA/hG,QAAQ08E,MAAR,iEAAgF,CAAEn2D,YA1DkD,+BAsExI,WACE,IACE04jB,EACEjnmB,KAAKkqC,MADP+8jB,aAIEN,GACF3mmB,KAAK2mmB,uBAEP3mmB,KAAKi7C,QAAQgsjB,KA/EyH,iCAkFxI,SAA2B5jf,EAAgB54F,GACzC,IACgBy8kB,EAEZ7jf,EAFF4jf,aACUsf,EACRljgB,EADFkU,SAKEv3H,KAAKkqC,MADP+8jB,eAGmBC,IACfP,GACF3mmB,KAAK2mmB,qBAAqB4f,GAE5BvmnB,KAAKi7C,QAAQisjB,MAhGuH,oBAoGxI,WACE,MAGIlnmB,KAAKkqC,MAFPunO,EADF,EACEA,aACGx1I,EAFL,iBAKA,OACE,cAACtiF,EAAD,aACEl+C,IAAKg2Q,GACDx1I,QA7G8H,GAE9Fx3F,aA2KtC+hlB,EAAuCvxiB,kBAC3C4pC,mBA3DsB,SAAC73E,EAAYkD,GACnC,IACEqE,EAEErE,EAFFqE,MACUi5jB,EACRt9jB,EADFqtF,SAGIl0E,EAAOF,cAAiBnc,GACxB8/jB,EAAatrW,eAAiCx0N,GAC9CygkB,EAAW7mlB,gBAAM2tB,EAAO,CAAC,SAAU,iBAAazyC,GAChDoE,EAAO0gB,gBAAM2tB,EAAO,CAAC,SAAU,aAASzyC,GACxCmrmB,EAA6B,MAAdO,EACjBA,EACY,MAAZC,EACE7rjB,SAAS6rjB,EAAU,SACnB3rmB,EAcN,MAAO,CACLunD,OACAyjjB,aACAG,eACA5jJ,aAhBmC,MAAhB4jJ,EAiBnB1ve,SAhB+B,MAAhB0ve,EACbA,EACAH,EAeFrne,OAdaymf,EACX7ikB,IAAS5pB,WAAS8vB,GAChBkyM,eAA+Bz0N,GAC/Bo2N,eAA8Bp2N,GAChC,KAWF9mC,OACA88I,kBAVwBv7F,eAA0Bza,OAc3B,SAAC2D,GAC1B,MAAO,CACLy7kB,UAAW,SAAC7uf,GACV5sF,EAAS,IAAI07C,KAAoB,CAC/BkxC,WACA+/F,gBAAgB,MAGpB21L,eAAgB,SAAC11R,EAAkB+vM,EAA4C6nF,GAC7ExkX,EAAS,IAAI48C,KAAyB,CAAEgwC,WAAU+vM,YAAW6nF,aAE/Dk3N,kBAAmB,SAAC9uf,GAClB5sF,EAAS,IAAIw7C,KAA8BoxC,KAE7C5sF,eAIyCsqC,CAE3CkxiB,GAEIze,EAAuB,SAACx9jB,EAAczuC,GAC1C,OAAO,cAAC+qnB,EAAD,2BAA0Ct8kB,GAA1C,IAAiDunO,aAAch2Q,MAIxE,OADiCgpC,aAAmCijkB,K,4NCvMhEl4e,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dr1L,UAAW,CACT8iC,UAAWphC,EAAMZ,WAEnBmmR,oBAAqB,CACnBptO,aAAcn4C,EAAMZ,UACpBi3C,OAAQr2C,EAAMZ,QAAQ,UAsbXrF,qBACb91B,YAAgB,gBAChB0/D,mBAVsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1DqoE,WAAYC,wBAAcqrgB,IAC1B3pe,cAAeD,eACfzf,WAAY8f,cACZmkN,oBAAqB19S,cACrBo5F,UAAWzzF,eALsBxW,CAMhC9L,MAtBwB,SAAC2D,GAAD,MAAoC,CAC7DA,WACAs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEf+hS,sBAAuB,WACrBp2T,EAAS,IAAIy0B,MAEf4hS,4BAA6B,YAA2M,IAAxMngU,EAAuM,EAAvMA,WAAYoyL,EAA2L,EAA3LA,QAAS17F,EAAkL,EAAlLA,SAAU+vM,EAAwK,EAAxKA,UAC7D38R,EAAS,IAAI09C,KAAkC,CAACxnD,aAAYoyL,UAAS17F,WAAU+vM,gBAEjF25B,kBAAmB,SAACpgU,GAClB8J,EAAS,IAAI4lG,KAAwB,CAAC1vG,qBAY3Bo0C,EAlbkD,SAAC/qC,GAChE,IACEqtF,EAcErtF,EAdFqtF,SACAulB,EAaE5yG,EAbF4yG,cACA1f,EAYElzF,EAZFkzF,WACAjiB,EAWEjxE,EAXFixE,WACA4nN,EAUE74R,EAVF64R,iBACAs+B,EASEn3T,EATFm3T,oBACAtkN,EAQE7yG,EARF6yG,UACApyG,EAOET,EAPFS,SACAs3R,EAME/3R,EANF+3R,iBACA8+B,EAKE72T,EALF62T,sBACAC,EAIE92T,EAJF82T,4BACAC,EAGE/2T,EAHF+2T,kBACAl1U,EAEEme,EAFFne,EACA26lB,EACEx8kB,EADFw8kB,iBAGF,EAAsFjilB,YAAe,GAArG,mBAAOkilB,EAAP,KAA4CC,EAA5C,KAEMxlR,EAAajmP,GAAcA,EAAWp3G,IAAI,cAC1C88B,EAAas6E,GAAcA,EAAWv6F,MAAM,CAAC,eAAgB,OAC7DqyM,EAAU93G,GAAcA,EAAWv6F,MAAM,CAAC,eAAgB,OAE1Ds4D,EAAUs2C,KAEhB/qF,aAAgB,WACdw9R,IACA8+B,MACC,IAEHt8T,aAAgB,WACd,IAAKkilB,GAAuC1zZ,GAAWpyL,EAAY,CAIjE+llB,GAAuC,GACvC5lR,EAA4B,CAAEngU,aAAYoyL,UAAS17F,WAAU+vM,UAJ3C,SAACi6B,GACjB52T,EAASu/B,YAAOu8iB,GAAqB,6BAAtB,OAAoDllR,QAApD,IAAoDA,OAApD,EAAoDA,EAAgCx9V,IAAI,iBAIzGk9V,EAAkBpgU,MAEnB,CAACoyL,IAEJ,IAwBMgpG,EAAc,WAClBtxR,EAAS,IAAI8K,KACb9K,EAASu/B,YAAOu8iB,GAAqB,aAAc,KACnD97kB,EAASu/B,YAAOu8iB,GAAqB,WAAY,MAiC7C5pS,EAAc,SAAC,GAAqG,IAApG9gV,EAAmG,EAAnGA,KAAM+kC,EAA6F,EAA7FA,MAAOtyB,EAAsF,EAAtFA,KAAsF,IAAhF8gQ,eAAgF,MAAtE,GAAsE,EAAlE31J,EAAkE,EAAlEA,WAAYv+G,EAAsD,EAAtDA,QAAsD,IAA7C4+G,gBAA6C,MAAlC,GAAkC,EAEjH4mP,EAAmBpyV,EAAKjF,SAAS,QACjCo3V,EAAQxlP,GAAcA,EAAWv6F,MAAM,CAAC,QAAS,UAAWmiT,EAAkB,UACpF,OACE,eAAClqP,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI7+E,EAFN,UAIE,cAACy9G,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAYzT,MAAM,cAAnD,SACInlE,IAEH8/T,GAAoBD,EACnB,cAACnnP,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAY4B,MAAO,CAACrV,MAAO,YAA5D,SACInlE,IAEJ,cAACmpF,EAAA,EAAD,CAASC,MAAOolJ,EAAhB,SACE,8BACE,cAAC,QAAD,CACE9gQ,KAAMA,EACNwrG,SAAUA,EACV9vE,MAAO,CACL9uC,UAASA,EACTu+G,aACAC,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,cASzB,OACE,eAACjhC,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EACTR,QAASijE,EAAY,gBAAkB,SACvC3jE,UAAWF,EAAQM,UANrB,UASIujE,GACE,cAAClkE,EAAA,EAAD,CAAMe,MAAM,EAAMI,GAAI,EAAGE,GAAI,EAAGU,GAAI,GAApC,SA5EJ,eAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAASN,UAAWF,EAAQunR,oBAAqBjmR,KAAK,SAASI,GAAI,GAAhH,UACE,cAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAME,QAAQ,gBAA3C,UAEKsnR,GAAejmP,GAAcA,EAAWp3G,IAAI,cAC7C,cAAC22H,EAAA,EAAD,CACE7V,QAASo3M,EACTlgU,KAAK,QAFP,SAIE,cAAC,KAAD,CAAYorH,SAAS,cAI3B,cAAC,QAAD,CACE7tC,UAAWqqP,IACXn1T,KAAK,WACLwrG,SAAUimP,KACV/1T,MAAO,CACL25R,aAAcu9B,EACdI,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,cA6DhB,cAACnnR,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNI,GAAI+iE,EAAY,EAAI,GACpB7iE,GAAI6iE,EAAY,EAAI,GACpBniE,GAAI,GACJN,QAAS,EACTR,QAAQ,SAPV,SASE,eAACjB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNU,QAAS,EAHX,UAKGuiQ,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,mCACTvd,KAAM,OACNpT,SAAS,EACTu+G,WAAY,CACVz5G,KAAM,OACN8qH,YAAaj/F,EAAE,0CAEjBiuF,SAAUmqF,OAEX04I,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,qCACTvd,KAAM,cACNpT,SAAS,EACTu+G,WAAY,CACVz5G,KAAM,OACN8qH,YAAaj/F,EAAE,sCAEjBiuF,SAAUmqF,OAEZ,eAACtrH,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,UAIE,cAAC/B,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAYzT,MAAM,cAAnD,SACGl6E,EAAE,0CAGP,cAAC,QAAD,CACEvd,KAAK,eACL8qE,UAAWi/O,KACXv+M,SAAU,CAACgpF,MACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,sCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,OAAS,GAAK,MACxD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,SACtD8/G,SAzKM,SAACvlG,GAErB,IAAMyrV,EAAiBzrV,GAAOA,EAAIgrB,GAClC,GAAIgyL,IAAYyuI,EAEd,OADA/2T,EAASu/B,YAAOu8iB,GAAqB,eAAgB,KAC9C97kB,EAAS,IAAI8jD,KAAoB,qCAsK9BmrB,iBAAkB,CAChBC,WAAW,SAKnB,eAAChhC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,UAIE,cAAC/B,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAYzT,MAAM,cAAnD,SACGl6E,EAAE,sCAGP,cAAC,QAAD,CACEvd,KAAK,eACL8qE,UAAWi/O,KACXv+M,SAAU,CAACgpF,MACX94J,MAAO,CACL9uC,SAAS,EACTu+G,WAAY,CACV3tE,QAASoxF,EAAW7+G,OACpBysG,YAAaj/F,EAAE,kCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO1/E,OAAS0/E,EAAO9kH,OAAS,GAAK,MACxE88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO1/E,OAAS0/E,EAAO9kH,SACtE8/G,SA5LS,SAACvlG,GAKxB,IAAM0rV,EAAoB1rV,GAAOA,EAAIgrB,GACrC,GAAI0gU,GAAqB1uI,EAAS,CAIhC+tI,EAA4B,CAAEngU,WAAY8gU,EAAmB1uI,UAAS17F,WAAU+vM,UAH9D,SAACi6B,GACjB52T,EAASu/B,YAAOu8iB,GAAqB,6BAAtB,OAAoDllR,QAApD,IAAoDA,OAApD,EAAoDA,EAAgCx9V,IAAI,iBAI3Gk9V,EAAkBU,KAkLN/nP,iBAAkB,CAChBC,WAAW,SAOhBkjC,EAAa,eAAClkE,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIJ,KAAK,SAAhD,UACZ,eAACg/B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,YAAY4B,MAAO,CAAEmb,WAAY,UAAzE,UACI1qG,EAAE,qCADN,QAGA,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJ0gC,MAAO,CAAEotB,YAAa,GAHxB,SAMI,cAAC,QAAD,CACEl6H,KAAK,yBACL8qE,UAAWi/O,KACXv+M,SAAU,CAACipF,MACX/4J,MAAO,CACLyvE,WAAY,CACVgH,UAAU,EACVqK,YAAaj/F,EAAE,2CACfigB,QAAS41T,KACTC,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1D6gU,uBAAuB,EACvBzgO,eAAgB,SAAA7gB,GAAM,aAAIA,EAASA,EAAO9kH,QAAP,UAAgBqmW,KAAiBvhP,EAAOv/E,WAAxC,aAAgB,EAA6BvlC,OAAQ,MACxF88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,WAMb,KAGZ,eAAChhC,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXP,WAAW,SACXqiC,MAAO,CAAE2W,WAAY,GAJvB,UAME,cAAChI,EAAA,EAAD,CAASC,MAAO6yB,IAAcskN,EAAsBt1U,EAAE,mCAAqC,GAA3F,SACE,+BACE,cAAC,QAAD,CACEvd,KAAI,wBAAmBu0T,EAAnB,UACJzpP,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,6CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWmkP,GAAuBtkN,UAM5C,cAAC9yB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oDAAlB,SACE,cAAC,KAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,YAAa,EAAG7C,OAAQ,kBAG9E,cAACxsC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAACovX,GAAA,EAAD,CACEjnI,iBAAkBA,EAClBo+B,oBAAqBulR,EACrBz+f,YAAa,CACXpO,WAAW,OAIhBgjO,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,mCACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAASvyH,IAAcskN,EAAsBt1U,EAAE,mCAAqC,GACpF4tF,WAAY,CACVz5G,KAAM,SACN8qH,YAAaj/F,EAAE,mCACfmxF,UAAWmkP,GAAuBtkN,KAGrC8/L,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,mCACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAASvyH,IAAcskN,EAAsBt1U,EAAE,mCAAqC,GACpF4tF,WAAY,CACVz5G,KAAM,SACN8qH,YAAaj/F,EAAE,mCACfmxF,UAAWmkP,GAAuBtkN,KAGrC8/L,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,mCACTvd,KAAK,iBAAD,OAAmBu0T,EAAnB,SACJzzD,QAASvyH,IAAcskN,EAAsBt1U,EAAE,mCAAqC,GACpF4tF,WAAY,CACVz5G,KAAM,SACN8qH,YAAaj/F,EAAE,mCACfmxF,UAAWmkP,GAAuBtkN,KAMpCA,GAAa,qCACV8/L,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,6BACTvd,KAAK,8BACL8gQ,QAAU+xF,EAA6D,GAAvCt1U,EAAE,mCAClC4tF,WAAY,CACVqR,YAAaj/F,EAAE,6BACfmxF,UAAWmkP,GAEbrnP,SAAU,CAACkmP,KAA+BE,KAAgBG,QAE3D1jB,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,kCACTvd,KAAK,2BACL8gQ,QAAU+xF,EAA6D,GAAvCt1U,EAAE,mCAClC4tF,WAAY,CACVqR,YAAaj/F,EAAE,kCACfmxF,UAAWmkP,GAEbrnP,SAAU,CAACmmP,KAA6BI,QAEzC1jB,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,8BACTvd,KAAK,+BACL8gQ,QAAU+xF,EAA6D,GAAvCt1U,EAAE,mCAClC4tF,WAAY,CACVqR,YAAaj/F,EAAE,8BACfmxF,UAAWmkP,GAEbrnP,SAAU,CAACkmP,KAA+BG,KAAeG,QAE1D3jB,EAAY,CACX9gV,KAAM,EACN+kC,MAAO/U,EAAE,mCACTvd,KAAK,4BACL8gQ,QAAU+xF,EAA6D,GAAvCt1U,EAAE,mCAClC4tF,WAAY,CACVqR,YAAaj/F,EAAE,mCACfmxF,UAAWmkP,GAEbrnP,SAAU,CAACmmP,KAA6BK,sB,4HC1alDhxO,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dg4W,qBAAsB,CACpBxzf,aAAcn4C,EAAMZ,QAAQ,GAC5BgB,MAAO,QAETwriB,0BAA2B,CACzBzzf,aAAcn4C,EAAMZ,WAEtBysiB,iBAAkB,CAChBjriB,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAA0BY,EAAMZ,QAAQ,GAAxC,MACPygD,WAAY,UACZrT,YAAa,SACbmT,OAAO,oCAETmsf,UAAW,CACTlriB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,KAAnB,cAA6BY,EAAMZ,QAAQ,KAA3C,MACPmtC,aAAc,MACdlsC,OAAO,KAAD,OAAOL,EAAMZ,UAAb,cAA4BY,EAAMZ,UAAlC,QACN+qC,OAAQ,UACR0V,WAAY,mBAEdtW,MAAO,CACLnpC,MAAO,UAqQIn8B,eAAgB,eAAhBA,EAjQ0E,SAACjV,GACxF,IACEgxC,EAMEhxC,EANFgxC,MACA+riB,EAKE/8kB,EALF+8kB,KACA9rgB,EAIEjxE,EAJFixE,WACA+rgB,EAGEh9kB,EAHFg9kB,YACAC,EAEEj9kB,EAFFi9kB,eACAp7lB,EACEme,EADFne,EAGImtD,EAAUs2C,KAEVihd,EAAwFt1d,GAAcA,EAAWv6F,MAAM,CAAC,oBAAqBxN,wBAAc7H,QAAO,SAACmmN,GAIvK,KAFeA,EAAU3tN,IAAI,WAAakU,kBACC1K,OAAM,SAAC25Y,GAAD,MAA2D,YAApCA,EAAkBnjZ,IAAI,aAE5F,OAAO2tN,KAIL01Z,EAAkBjsgB,GAAcA,EAAWp3G,IAAI,SAAW,kBAE1DsjnB,EAAgB52C,GAAoBA,EAAiB9kkB,QAAO,SAACutI,EAAK8tT,EAAiB7qc,GACvF,IAAMmrnB,EAAsBtgL,EAAgBpmb,MAAM,CAAC,SAC7C2mmB,EAAqBvgL,EAAgBpmb,MAAM,CAAC,iBAElD,OAAOs4H,EAAI9sI,KACT,cAACysE,EAAA,EAAD,CACEO,UAAWF,EAAQ8tiB,UAEnBnigB,QAAS,kBAAM2igB,EAAoB,CACjCljnB,IAAKijnB,EACLzmlB,MAAOwmlB,EACPj5X,MAAM,EACNmnI,UAAU,KAPd,SAUE,cAACh8Q,EAAA,EAAD,CACEE,QAAQ,QADV,SAGG4tgB,KAXEnrnB,MAeR8b,kBAAQoB,QAET,cAACw/D,EAAA,EAAD,CACEO,UAAWF,EAAQ8tiB,UAEnBnigB,QAAS,kBAAM2igB,EAAoB,CACjCljnB,IAAK8inB,EACLtmlB,MAAOsmlB,EACP/4X,MAAM,EACNmnI,UAAU,KAPd,SAUE,cAACh8Q,EAAA,EAAD,CACEE,QAAQ,QADV,SAGG3tF,EAAE,2CAXA0kjB,EAAiB10kB,KAAO,IAgB3ByrnB,EAAsB,SAACC,GAC3BN,EAAe,GAAD,mBAAKD,GAAL,CAAkBO,MAiE5BC,EAAsB,SAACvrnB,GAAD,OAAmB,SAACgrI,GAE9C,IAAMwgf,EAAe,YAAOT,GAC5BS,EAAgBxrnB,GAAOmI,IAAM6iI,EAAMn6G,OAAOtxB,MAC1CisnB,EAAgBxrnB,GAAO2kC,MAAQqmG,EAAMn6G,OAAOtxB,MAE5CyrnB,EAAeQ,KAGXC,EACJ,eAAC/uiB,EAAA,EAAD,WACE,cAACA,EAAA,EAAD,CACEO,UAAWF,EAAQ4tiB,0BADrB,SAGE,cAACttgB,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,cAFR,SAIGl6E,EAAE,6DAILm7lB,EAAYrlnB,OAAS,EACnB,cAAC,KAAD,CAAiBkxS,UA3DP,SAACn/R,GAEjB,GAAKA,EAAOk6L,YAAZ,CAIA,IAAM+5a,EAdQ,SAACtvmB,EAAmBgoc,EAAYziI,GAC9C,IAAMlqU,EAASnS,MAAMuN,KAAKuJ,GAC1B,EAAkB3E,EAAOxE,OAAOmxc,EAAY,GAArCrsc,EAAP,oBAGA,OAFAN,EAAOxE,OAAO0uU,EAAU,EAAG5pU,GAEpBN,EASgBo3K,CACrBk8b,EACAtzmB,EAAOqZ,OAAO9wB,MACdyX,EAAOk6L,YAAY3xM,OAGrBgrnB,EAAeU,KA+CT,SACE,cAAC,KAAD,CAAWz7V,YAAY,YAAY1yM,UAAU,aAA7C,SACG,SAAC8tC,EAAU2jM,GAAX,OACC,8CACE1vT,IAAK+rH,EAAS0lJ,SACd5xJ,OAnCKwyM,EAmCe3C,EAAS2C,eAnCL,CACtC/yL,WAAY+yL,EAAiB,YAAc,UAC3C1yO,QAAS,OACTU,QAASZ,EAAMZ,UACf+vC,SAAU,UAgCQ7C,EAASmoM,gBAHf,cAKGu3T,EAAYl+mB,KAAI,SAAC4wE,EAAMz9E,GAAP,OACf,cAAC,KAAD,CAAuB4vR,YAAanyM,EAAKt1E,IAAMnI,EAAOA,MAAOA,EAA7D,SACG,SAAC2rnB,EAAWt5T,GAAZ,OACC,cAAC31O,EAAA,EAAD,qCACEp9E,IAAKqsnB,EAAU56W,UACX46W,EAAUj7T,gBACVi7T,EAAUn7T,iBAHhB,IAIErxM,OA3DF+/K,EA4DImzB,EAAUnzB,WA5DF6/S,EA6DR4sC,EAAUj7T,eAAevxM,MA7D9B,aACnBx/B,QAASZ,EAAMZ,UACfmtC,aAAc,MACdlsC,OAAO,KAAD,OAAOL,EAAMZ,UAAb,UACNc,QAAS,OAGT2/C,WAAYksf,EAAO/riB,EAAM+pC,QAAQ+d,UAAU,KAAO,qBAClDvB,WAAY45J,EAAa,oBAAsB,MAG5C6/S,IA4CiB,SASE,eAACrigB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SACLF,QAAS,EAJX,UAME,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAElgC,QAAS,QAApC,SACE,cAAC,KAAD,MAEF,cAACvC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEIA,EAAK47S,SACD,cAACt/D,GAAA,EAAD,CACEx6T,MAAOwrnB,EAAY/qnB,GAAOmI,IAC1Bk3G,SAAUksgB,EAAoBvrnB,GAC9Bi9E,UAAWF,EAAQurC,QAErB,cAACjL,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B9/B,EAAK94C,UAG1C,cAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEIA,EAAKy0K,KACD,cAAC3zH,EAAA,EAAD,CACE7V,QAAS,kBAxHhB,SAAC1oH,GAC5B,GAAIA,GAAS,EAAG,CACd,IAAMwrnB,EAAe,YAAOT,GAC5BS,EAAgBxrnB,GAAOq5X,UAAYmyP,EAAgBxrnB,GAAOq5X,SAE1D2xP,EAAeQ,IAmHgCI,CAAqB5rnB,IACpCJ,KAAK,QAFP,SAKI69E,EAAK47S,SACD,cAAC,KAAD,IACA,cAAC,KAAD,MAGR,OAGR,cAAC96P,EAAA,EAAD,CACE7V,QAAS,kBA9IhB,SAAC1oH,GACpB,GAAIA,GAAS,EAAG,CACd,IAAMwrnB,EAAe,YAAOT,GAC5BS,EAAgBv4mB,OAAOjT,EAAO,GAE9BgrnB,EAAeQ,IAyIwBK,CAAa7rnB,IAC5BJ,KAAK,QAFP,SAIE,cAAC,KAAD,YAxGP,IAACs/R,EAAY6/S,IAqDA/+kB,MA0DjBqrH,EAASwD,gBAjGL,IAAA8iM,OAsGb,cAACj1O,EAAA,EAAD,CACEO,UAAWF,EAAQ6tiB,iBADrB,SAGE,cAACvtgB,EAAA,EAAD,CACEE,QAAQ,UADV,SAGG3tF,EAAE,6DAOf,OACE,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAACX,EAAA,EAAD,CACEO,UAAWF,EAAQ2tiB,qBACnBrtiB,WAAW,EAFb,SAII6tiB,IAGJ,cAACxuiB,EAAA,EAAD,CACEO,UAAWF,EAAQ2tiB,qBADrB,SAGIe,U,iSCtTGK,GAAqB,SAACx3C,EAAoCnskB,GAArC,QAC9BA,GAAOsO,MAAI9N,MAAM2rkB,IAAqBA,EAAiBxskB,IAAIK,ICGlD4jnB,GAA+B,4BAkBtC14f,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Ds5W,eAAgB,CACdrsiB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC8tiB,aAAc,CACZ7siB,OAAQL,EAAMZ,QAAQ,EAAG,EAAI,SAuclBrF,qBACb4pC,mBAnBsB,SAAC73E,GACvB,OAAO,eACF8L,YAAyB,CAC1BqoE,WAAYC,wBAAc8sgB,IAC1BG,iBAAkBjtgB,wBAAcqrgB,KAF/B3zkB,CAGA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACA29kB,uBAAwB,SAACn7N,GACvBxiX,EAAS,IAAI47C,KAA6B4mU,SAO9ChuW,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMyqgB,GACNzgT,oBAAoB,EACpBD,kBAAkB,IANPvyP,EAncyC,SAAA/qC,GACtD,MAUIA,EATFixE,kBADF,MACevoG,gBADf,IAUIs3B,EARFm+kB,wBAFF,MAEqBz1mB,gBAFrB,EAGE21mB,EAOEr+kB,EAPFq+kB,oBACAC,EAMEt+kB,EANFs+kB,kCACAC,EAKEv+kB,EALFu+kB,sCACAH,EAIEp+kB,EAJFo+kB,uBACAI,EAGEx+kB,EAHFw+kB,qBACA/9kB,EAEET,EAFFS,SACA5e,EACEme,EADFne,EAGImtD,EAAUs2C,KAEVm5f,EAAuBN,EAAiBznmB,MAAM,CAAC,kBAAmB,gBAElE6vjB,EAAmB43C,EAAiBtknB,IAAI,mBAAoBkU,kBAE5D2wmB,EAAmBztgB,EAAWp3G,IAAI,mBAAoBkU,kBACtD4wmB,EAAkC1tgB,EAAWv6F,MAAM,CAAC,eAAgB,gBACpEkomB,EAAmC3tgB,EAAWv6F,MAAM,CAAC,eAAgB,iBAEvEmomB,EAAuBV,EAAiBtknB,IAAI,mBAAoBkU,kBACpE2wmB,EAAiBl8mB,SAAQ,SAAAs8mB,GACnBA,IACFD,EAAuBA,EAAqBvggB,OAAOppH,sBAAY4pnB,GAAaA,EAAUjlnB,IAAI,gBAAkBilnB,EAAUnxZ,kBAGtHixZ,IACFC,EAAuBA,EAAqBvggB,OAAOsggB,IAMrD,IAAMG,EAAyBF,GAAwBA,EAAqBp9mB,QAAO,SAACutI,EAAK8tT,GAGvF,OAAO9tT,EAAI9sI,KAAK46b,EAAgBx+U,OAAO,aACtCvwG,kBAEGixmB,EAAyCz4C,GAAoBA,EAAiB9kkB,QAAO,SAACutI,EAAK8tT,GAE/F,OAD0BA,EAAgBpmb,MAAM,CAAC,kBACpBiomB,EAAkC3ve,EAAI9sI,KAAK46b,GAAmB9tT,IAC1FjhI,kBAEGkxmB,EAAkD/pnB,sBAAY8pnB,GAA0CA,EAAyC9/lB,iBAAO8/lB,GAExJE,EAA+CD,GAAmDA,EAAgDvomB,MAAM,CAAC,EAAG,WAC9JyomB,EAAyBb,IAAsCrtgB,EAAWv6F,MAAM,CAAC,eAAgB,iBACjGwomB,EAA6C5ggB,OAAOiggB,GACpDW,EAE6BjugB,EAAWv6F,MAAM,CAAC,eAAgB,UAAW3I,kBAErDvL,SAAQ,SAAA48mB,GAC/B,IAAMC,EAAgBF,EAAuBrjmB,WAAU,SAACklb,GAAD,OAAiBA,EAAYnnc,IAAI,cAAgBulnB,EAAevlnB,IAAI,gBACpG,IAAnBwlnB,IACFF,EAAyBA,EAAuB7ggB,OAAO+ggB,OAI3D,IAAMC,EAAcrugB,EAAWv6F,MAAM,CAAC,eAAgB,UAAW3I,kBAAQsG,OAEzE,OACE,eAACy3S,GAAA,EAAD,CACErrN,KAAM49gB,EACN5jf,QAAS+jf,EACT,kBAAgB,8BAChB7ugB,WAAW,EACX0/K,OAAO,OALT,UAOE,cAAC6+I,GAAA,EAAD,CAAan3Y,GAAG,8BAAhB,SACGlV,EAAE,yDAEL,cAACkqS,GAAA,EAAD,UACE,eAACp9O,EAAA,EAAD,WACE,cAACA,EAAA,EAAD,UAGI+viB,GAAoBA,EAAiB5/mB,KAAI,SAACggnB,EAAWS,GACnD,IAAMC,EAAkBvugB,EAAWv6F,MAAM,CAAC,mBAAoB6omB,EAAmB,UAAWxxmB,kBAAQsG,OAC9FormB,EAAqCxugB,EAAWv6F,MAAM,CAAC,mBAAoB6omB,EAAmB,gBAE9FG,EAA8Bn5C,EAAiB9kkB,QAAO,SAACutI,EAAK8tT,GAEhE,OAD0BA,EAAgBpmb,MAAM,CAAC,kBACpB+omB,EAAqCzwe,EAAI9sI,KAAK46b,GAAmB9tT,IAC7FjhI,kBAEG4xmB,EAAsCzqnB,sBAAYwqnB,GAA+BA,EAA8BxgmB,iBAAOwgmB,GACtHE,EAAuDD,GACxDA,EAAoCjpmB,MAAM,CAAC,EAAG,YAAc3I,iBAC3D8xmB,EAAqB3qnB,sBAAY4pnB,GAAaA,EAAY5/lB,iBAAO4/lB,GAEnEgB,EAA8BD,GAAsBA,EAAmBhmnB,IAAI,kBAAoByknB,EAC/FsB,EAAqDthgB,OAAOiggB,GAC5DqB,EASJ,OAPAJ,EAAgBh9mB,SAAQ,SAAA48mB,GACtB,IAAMC,EAAgBS,EAA4BhkmB,WAAU,SAACklb,GAAD,OAAiBA,EAAYnnc,IAAI,cAAgBulnB,EAAepiL,aACrG,IAAnBqiL,IACFS,EAA8BA,EAA4BxhgB,OAAO+ggB,OAKnE,eAAC1wiB,EAAA,EAAD,CAEEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SAJP,UAME,cAAC3B,EAAA,EAAD,CACEO,UAAWF,EAAQiviB,eACnBvuiB,MAAM,EACNI,GAAI,EACJE,GAAI,EAJN,SAME,cAAC,QAAD,CACE1rE,KAAI,2BAAsBi7mB,EAAtB,KACJnwiB,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASi9kB,GAA0BA,EAAuB1qmB,OAC1DuiB,MAAO/U,EAAE,sDACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOhyG,MAAQ,GAAK,MACvDgqT,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAOhyG,QACtDo2H,OAAQ,WACN0jf,EAAuBK,KAG3B97f,YAAY,OAIlB,cAACh0C,EAAA,EAAD,CACEO,UAAWF,EAAQiviB,eACnBvuiB,MAAM,EACNI,GAAI,EACJE,GAAI,EAJN,SAME,cAAC6gV,GAAA,EAAD,CACEp6S,UAAU,EACV30E,QAASg+kB,GAA+BA,EAA4BzrmB,OACpE8iH,eAAgB,SAAC7gB,GAAD,OAAiBA,EAASA,EAAOmgB,aAAe,GAAK,MACrEjlI,MAAOgunB,EACPlugB,SAAU,SAAC2rB,EAA8Bt3H,GACvC86B,EAASu/B,YAAOg+iB,GAAD,2BAAmDuB,EAAnD,YAAgFrgmB,iBAAOvZ,MAExG+0H,OAAQ,WACN0jf,EAAuBK,IAEzB9rS,YAAa,SAAClqS,GAAD,OACX,cAACujR,GAAA,EAAD,yBACEr8M,WAAW,GACPlnE,GAFN,IAGE7R,MAAO/U,EAAE,4DAGbmyjB,WAAY,SAACC,EAAUC,GAAX,OACVD,EAASn1kB,KAAI,SAACw3G,EAAQrkH,GAAT,OACX,cAAC8tH,EAAA,EAAD,CAAqBC,MAAO1J,EAAOmgB,YAAnC,SACE,cAAColM,GAAA,EAAD,aACEjlS,MAAO0/E,EAAOmgB,aACVy9c,EAAY,CAAEjilB,aAHRA,WAUtB,cAAC08E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXW,MAAM,EACNI,GAAI,EACJE,GAAI,EANN,SAQE,cAACwgD,EAAA,EAAD,CACE7V,QAAS,WACP,IAAMolgB,EAAsBrB,EAAiBpggB,OAAOihgB,GACpD9+kB,EAASu/B,YAAOg+iB,GAA8B,mBAAoB+B,KAHtE,SAME,cAAC,KAAD,UA9ECR,QAuFf,eAAC5wiB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CACEO,UAAWF,EAAQiviB,eACnBvuiB,MAAM,EACNI,GAAI,EACJE,GAAI,EAJN,SAME,cAAC,QAAD,CACE1rE,KAAI,eACJ8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CAEV3tE,QAASi9kB,GAA0BA,EAAuB1qmB,OAC1DuiB,MAAO/U,EAAE,sDACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOhyG,MAAQ,GAAK,MACvDgqT,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAChH,EAAA,EAAD,UAAagH,EAAOhyG,QACtDo2H,OAAQ,WACN0jf,EAAuBK,KAG3B97f,YAAY,OAIlB,cAACh0C,EAAA,EAAD,CACEO,UAAWF,EAAQiviB,eACnBvuiB,MAAM,EACNI,GAAI,EACJE,GAAI,EAJN,SAME,cAAC6gV,GAAA,EAAD,CACEp6S,UAAU,EACV30E,QAASq9kB,GAA0BA,EAAuB9qmB,OAC1D8iH,eAAgB,SAAC7gB,GAAD,OAAiBA,EAASA,EAAOmgB,aAAe,GAAK,MACrEjlI,MAAO8tnB,EACPhugB,SAAU,SAAC2rB,EAA8Bt3H,GACvC86B,EAASu/B,YAAOg+iB,GAA8B,sBAAuB9+lB,iBAAOvZ,MAE9E+0H,OAAS,WACP0jf,EAAuBK,IAEzB9rS,YAAa,SAAClqS,GAAD,OACX,cAACujR,GAAA,EAAD,yBACEr8M,WAAW,GACPlnE,GAFN,IAGE7R,MAAO/U,EAAE,4DAGbmyjB,WAAY,SAACC,EAAUC,GAAX,OACVD,EAASn1kB,KAAI,SAACw3G,EAAQrkH,GAAT,OACX,cAAC8tH,EAAA,EAAD,CAAqBC,MAAO1J,EAAOmgB,YAAnC,SACE,cAAColM,GAAA,EAAD,aACEjlS,MAAO0/E,EAAOmgB,aACVy9c,EAAY,CAAEjilB,aAHRA,cAWxB,cAAC08E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WAFV,SAIE,cAAC6qC,GAAA,EAAD,CACE1e,MAAM,UACN7sB,UAAWF,EAAQkviB,aACnBvjgB,QAAS,WACP,IAAMqlgB,EAAqB/ugB,EAAWp3G,IAAI,gBACpComnB,EAAyBhvgB,EAAWp3G,IAAI,mBAAoBkU,kBAAQ1M,QAAO,SAAAsM,GAAC,OAAS,MAALA,MAAcI,iBAE9FmymB,EAA8BhrnB,sBAAY8qnB,GAAsBA,EAAqB9gmB,iBAAO8gmB,GAE5FD,EAAsBE,EAAuB/9mB,KAAKg+mB,GAExDz/kB,EAASu/B,YAAOg+iB,GAA8B,mBAAoB+B,IAClEt/kB,EAASu/B,YAAOg+iB,GAA8B,eAAgB,QAZlE,SAgBGn8lB,EAAE,iEAMX,eAACqqS,GAAA,EAAD,WACE,cAACzxM,GAAA,EAAD,CACEE,QAAS6jgB,EACTzihB,MAAM,UAFR,SAIGl6E,EAAE,wBAEL,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WAGP,GDtU2B,SAAC4rd,EAAoCnskB,EAAanI,GAAlD,OACrC8rnB,GAAmBx3C,EAAkBnskB,IAAQnI,GAAS,GAAKs0kB,EAAiB1vjB,MAAM,CAACzc,EAAK,SAAUnI,ICqUnFkunB,CAAwB55C,EAAkB+3C,EAAmCC,GAAlF,CAKA,IAAM6B,EAAenvgB,EAAWp3G,IAAI,gBAC9BwmnB,EAAwBnrnB,sBAAYkrnB,GAAgBA,EAAelhmB,iBAAOkhmB,GAC1EH,EAAyBhvgB,EAAWp3G,IAAI,mBAAoBkU,kBAU5DuymB,EAAgB/5C,EAAiB7vjB,MAAM,CAAC4nmB,EAAmC,SAAUC,IAGrFgC,EAAkDF,EACpDJ,EAAuB/9mB,KAAKm+mB,GAC5BJ,EAGEO,EAAuBF,GAAiBA,EAAczmnB,IAAI,YAAekU,iBAGzE0ymB,EAAoB,SAACC,GACzB,OAAOA,EAAWj/mB,QAAO,SAACutI,EAAK8ve,GAC7B,IAAKA,EACH,OAAO9ve,EAET,IAAM6we,EAAqB3qnB,sBAAY4pnB,GAAaA,EAAY5/lB,iBAAO4/lB,GACjE77N,EAAc48N,EAAmBhmnB,IAAI,eACrC8mnB,GAAed,EAAmBhmnB,IAAI,WAAakU,kBAAQtM,QAAO,SAACiiR,EAAMlyR,GAC7E,IAAMwrc,EAAWxrc,EAAMqI,IAAI,YAC3B,OAAO6pR,EAAKlmR,IAAIw/b,EAAUxrc,KACzBkX,iBAEGk4mB,EAAef,EAAmBrinB,IAAI,SAAUmjnB,GACtD,OAAO3xe,EAAIxxI,IAAIylZ,EAAa29N,KAC3Bl4mB,kBAGCm4mB,EAAwBJ,EAAkBF,GAC1CO,EAAyBL,EAAkBD,GAK3CO,EAAuCD,EAAuBr/mB,QAAO,SAACutI,EAAK8ve,GAC/E,IAAM77N,EAAc67N,EAAUjlnB,IAAI,eAC5B8zN,EAAemxZ,EAAUjlnB,IAAI,gBAE7BmnnB,EAAsBlC,EAAUjlnB,IAAI,UACpConnB,EAAqBJ,EAAwBA,EAAsBnqmB,MAAM,CAACusY,EAAa,WAAa,KAE1G,OAAKg+N,EAQEjye,EAAIxxI,IAAImwN,EAAcqzZ,EAC1Bj4mB,UAAUk4mB,EAAmBrpnB,QAC7B+c,SACA0C,UAVM23H,EAAIxxI,IAAImwN,EAAcmzZ,EAC1BpqmB,MAAM,CAACusY,EAAa,WACpBtuY,SACA0C,YASJ3O,iBAAyBrH,QAAO,SAAAsM,GAAC,OAAe,IAAXA,EAAE9b,QAEpCqvnB,EAAuDX,EAC1Dl/mB,QAAO,SAAAy9mB,GACN,IAAMe,EAAqB3qnB,sBAAY4pnB,GAAaA,EAAY5/lB,iBAAO4/lB,GACvE,OAAOe,GAAsBA,EAAmBhmnB,IAAI,WAAagmnB,EAAmBhmnB,IAAI,UAAUqR,WAOhGi2mB,EAJsB56C,EAAiBvgkB,MAAM,CAACs4mB,EAAmC,SAAUC,EAAuC,WAAY2C,GAI/EpinB,KAAI,SAACg+b,EAAiB1ic,GACzF,GAAI2mnB,EAAchnnB,IAAIK,GAAM,CAC1B,IAAMgnnB,EAAwBtkL,EAAgBjjc,IAAI,UAC5CwnnB,EAAkBf,EAAczmnB,IAAI,YAEpCynnB,EAA2BF,EAAsBtinB,KAAI,SAACi+b,GAC1D,IAAMC,EAAWD,EAAqBljc,IAAI,YAG1C,IAAoB,IAFDknnB,EAAclnnB,IAAIO,GAAKkc,QAAQ0mb,GAE3B,CACrB,IAKMukL,EALWxkL,EAAqBljc,IAAI,UAAWkU,kBAKvB+N,WAAU,SAAA0lmB,GACtC,OAAOA,EAAQ3nnB,IAAI,kBAAoByknB,KAGnCmD,EAAgB1kL,EAAqBrmb,MAAM,CAAC,UAAW6qmB,EAAc,WACrEG,EAAmBD,EAAgBA,EAAcpgnB,QAAO,SAAAsM,GAAC,OAAIA,EAAE9T,IAAI,cAAgBwnnB,KAAmB34mB,gBAS5G,OAJ0D,IAA1Bg5mB,EAAiB7vnB,KAC/Ckrc,EAAqB52b,SAAS,CAAC,UAAWo7mB,IAC1CxkL,EAAqB/2b,MAAM,CAAC,UAAWu7mB,EAAc,UAAWG,GAIpE,OAAO3kL,KAGT,OAAOD,EAAgBt/b,IAAI,SAAU8jnB,GAEvC,OAAOxkL,KAGTr8Z,EAASu/B,YAAOu8iB,GAAqB,mBAAoB4E,IACzD1glB,EAASu/B,YAAOg+iB,GAA8B,mBAAoBjwmB,mBAClEywmB,SA3HEA,KANN,SAoIG38lB,EAAE,+B,oBC7bPyjG,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dg9W,cAAe,CACbvwiB,MAAO,UA2IIrG,qBACb4pC,mBAfsB,SAAC73E,GACvB,OAAO,eACF8L,YAAyB,CAC1BqoE,WAAYC,wBAAcqrgB,KADzB3zkB,CAEA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAMFwU,YAAgB,gBAFH81B,EAvIyC,SAAA/qC,GACtD,IACES,EAMET,EANFS,SACA5e,EAKEme,EALFne,EACA+/lB,EAIE5hlB,EAJF4hlB,0BAHF,EAOI5hlB,EAHFixE,kBAJF,MAIevoG,gBAJf,EAKEm5mB,EAEE7hlB,EAFF6hlB,+BACAC,EACE9hlB,EADF8hlB,uCAGI9yiB,EAAUs2C,KAEVihd,EAAmBt1d,EAAWp3G,IAAI,mBAAoB6O,iBACtDq5mB,EAAax7C,EAAiB7vjB,MAAM,CAACormB,EAAwC,WAAY/zmB,kBAC/F,EAAgDwsB,WAAewnlB,GAA/D,mBAAOC,EAAP,KAAyBC,EAAzB,KAEA1nlB,aAAgB,WACd0nlB,EAAoBF,KACnB,CAACA,IAEJ,IAwBMv9R,EAAe,WACnBo9R,IACAK,EAAoBF,IAGhBG,EAA2B37C,EAAiBllkB,QAAO,SAAAsM,GACvD,OAAOA,EAAE9T,IAAI,kBAAoBionB,KAK7BK,EAAaL,GAA0CI,EAAyBpjnB,KAAI,SAACg+b,EAAiB7qc,GAC1G,IAAMqS,EAAOw4b,EAAgBjjc,IAAI,QAC3BopZ,EAAc65C,EAAgBjjc,IAAI,eAClC8zN,EAAemvO,EAAgBjjc,IAAI,gBAEnCi4H,EAAUkwf,EAAiBvqmB,MAAK,SAAC+pmB,GAAD,OAAaA,EAAQ3nnB,IAAI,iBAAmBopZ,KAC5EzxZ,EAAQ0tB,iBAAO,CACnB+jY,cACAt1L,eACArpN,SAGF,OACE,cAACqqE,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,SAKE,cAACq+O,GAAA,EAAD,CACExwM,QACE,cAAC6U,GAAA,EAAD,CACEJ,UAASA,EACTxgB,SAAU,SAACpzG,GAAD,OAzDD,SAAC++H,EAAOzrI,GAC3B,IAEM4wnB,EAFUnlf,EAAMn6G,OAAOgvG,QAGzBkwf,EAAiB9/mB,KAAK1Q,GACtBwwnB,EAAiB3gnB,QAAO,SAAAsM,GACxB,OAAOA,EAAE9T,IAAI,iBAAmBrI,EAAMqI,IAAI,kBAG9CoonB,EAAoBG,GAgDOxrX,CAAa14P,EAAG1M,IACjCA,MAAOA,IAGXolC,MAAOtyB,KAVJrS,MAcRyM,WAAWhG,UAEd,OACE,eAACozT,GAAA,EAAD,CACErrN,KAAMohhB,EACNpnf,QAAS+pN,EACT,kBAAgB,8BAChBn1D,OAAO,OAJT,UAME,cAAC6+I,GAAA,EAAD,CAAan3Y,GAAG,8BAAhB,SACGlV,EAAE,yDAEL,cAACkqS,GAAA,EAAD,CACE78O,UAAWF,EAAQ2yiB,cADrB,SAGGQ,IAGH,eAACj2T,GAAA,EAAD,WACE,cAACzxM,GAAA,EAAD,CACEE,QAAS6pO,EACTzoP,MAAM,UAFR,SAIGl6E,EAAE,wBAEL,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACN4e,QAhFW,WAGjB,IAAM0ngB,EFtCyB,SACjC97C,EACA54W,EACA20Z,EACAC,GAEA,OAAKxE,GAAmBx3C,EAAkB54W,IAIlB20Z,GAAoBv0mB,kBAAQ1M,QAAO,SAACy9mB,GAAD,QAAiByD,GAAgBx0mB,kBAAQ1O,SAASy/mB,MAE9Dr9mB,QAAO,SAACutI,EAAKwze,GAC1D,IAAMC,EAAmBD,EAAc3onB,IAAI,gBAC3C,IAAKm1I,EAAIj1I,IAAI0onB,GAEX,OAAOzze,EAET,IAAM0ze,EAAsB1ze,EAAIt4H,MAAM,CAAC+rmB,EAAkB,aAAe10mB,iBACxE,OAAOihI,EAAIhpI,MAAM,CAACy8mB,EAAkB,WAAYC,EAASrhnB,QAAO,SAACsM,GAAD,OAAOA,EAAE9T,IAAI,kBAAoB8zN,QAChG44W,GAE4BvgkB,MAAM,CAAC2nN,EAAc,WAAY40Z,GAAgBx0mB,kBAfvE,KE+BuB40mB,CAAoBp8C,EAAkBu7C,EAAwCC,EAAYC,GAExHJ,IACAK,EAAoBF,GAChBM,GACF5hlB,EAASu/B,YAAOu8iB,GAAD,mBAA0C8F,KAsEvD,SAIGxgmB,EAAE,+B,qGClIPyjG,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Di+W,oBAAqB,CACnBhxiB,QAASZ,EAAMZ,QAAQ,EAAG,SA2HxB1tC,GAAkBkG,YAAyB,CAC/CqoE,WAAYC,wBAAc2xgB,IAC1B1pkB,KAAMF,cACNk+S,oBAAqB19S,gBAGRsxB,qBACb91B,YAAgB,gBAChB0/D,kBAAQjyE,GAAgB,MAFXqoC,EAhHyC,SAAC/qC,GACvD,IACE8ilB,EAOE9ilB,EAPF8ilB,WACAC,EAME/ilB,EANF+ilB,WACAC,EAKEhjlB,EALFgjlB,qBACA/xgB,EAIEjxE,EAJFixE,WACA93D,EAGEnZ,EAHFmZ,KACAg+S,EAEEn3T,EAFFm3T,oBACAt1U,EACEme,EADFne,EAGImtD,EAAUs2C,KACV29f,EAAsBF,EAAW1jnB,SAAS,UAAY0jnB,EAAWr0iB,QAAQ,IAAK,KAAKA,QAAQ,IAAK,IAAMq0iB,EACtGG,EAAS,sBAAOD,EAAoBpukB,MAAM,MAAjC,CAAuC,UAChD4hT,EAAQxlP,GAAcA,EAAWv6F,MAAMwsmB,GACvClwgB,EAAW75D,IAAS5pB,WAAS6pB,MAAQ+9S,EAErCgsR,EAAa,CACjB,CAAEvslB,MAAO/U,EAAE,iDAAkD7rB,KAAM,QACnE,CAAE4gC,MAAO/U,EAAE,iDAAkD7rB,KAAM,QACnE,CAAE4gC,MAAO/U,EAAE,iDAAkD7rB,KAAM,SAGrE,OACE,eAAC24E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAAC,QAAD,CACEhrE,KAAI,UAAKw+mB,EAAL,WACJ9ilB,MAAO,CACLyvE,WAAY,CACVuD,UAAUgwgB,EACVhtnB,KAAM,OACN8qH,YAAaj/F,EAAE,+CAEjB6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,MAEb,eAACjhC,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASG,UAAWF,EAAQ4ziB,oBAA1E,UACE,cAAC7igB,EAAA,EAAD,CAASC,MAAOhN,EAAWnxF,EAAE,mCAAqC,GAAlE,SACE,+BACE,cAAC,QAAD,CACEvd,KAAI,UAAKy+mB,EAAL,UACJ3ziB,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,6CACT4tF,WAAY,CACVuD,YAAUA,GAAagwgB,GACvBjnhB,MAAO,kBAMjB,cAACgkB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oDAAlB,SACE,cAAC,KAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,YAAa,EAAG7C,OAAQ,kBAG9E,cAACxsC,EAAA,EAAD,CAAMW,WAAW,EAAjB,SAEI6ziB,EAAWrknB,KAAI,SAACojM,EAAOjwM,GAAR,OACb,eAAC08E,EAAA,EAAD,CAEEe,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQ4ziB,oBAJrB,UAME,cAACj0iB,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAjC,SACI0yF,EAAMtrK,UAGZ,cAAC+3C,EAAA,EAAD,UACkB,SAAfuzH,EAAMlsM,MAAmBygW,EACxB,cAACnnP,EAAA,EAAD,CAAYC,MAAM,OAAOC,QAAQ,YAAY4B,MAAO,CAACrV,MAAO,YAA5D,SACImmG,EAAMtrK,QAEV,cAACmpF,EAAA,EAAD,CAASC,MAAOhN,EAAWnxF,EAAE,mCAAqC,GAAlE,SACE,+BACE,cAAC,QAAD,CACEvd,KAAI,UAAKy+mB,EAAL,YAAmB7gb,EAAMlsM,MAC7BgqC,MAAO,CACLyvE,WAAY,CACVuD,YAAUA,GAAagwgB,GACvBhtnB,KAAM,SACN8qH,YAAaohF,EAAMtrK,OAErB84E,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,cA7BhB39G,c,mDClEbqzH,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dy+W,sBAAuB,CACrBpmR,UAAW,YAEb2Q,KAAM,CACJriP,UAAW,SACXvvB,MAAO,uBAETwgO,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,YA6ZtBjwC,qBACb4pC,mBAVsB,SAAC73E,EAAOyF,GAC9B,OAAO,eACFqG,YAAyB,CAC1BqoE,WAAYC,wBAAc2xgB,IAC1BhpO,0BAA2BxgW,gBAF1BzQ,CAGA9L,MAKoB,MACzBmY,YAAgB,gBAFH81B,EAtX2D,SAAC/qC,GACzE,IACEqjlB,EA2BErjlB,EA3BFqjlB,2BACAC,EA0BEtjlB,EA1BFsjlB,oBACA7E,EAyBEz+kB,EAzBFy+kB,qBACA8E,EAwBEvjlB,EAxBFujlB,yBACAC,EAuBExjlB,EAvBFwjlB,0BACAC,EAsBEzjlB,EAtBFyjlB,mCACAC,EAqBE1jlB,EArBF0jlB,yBACA/slB,EAoBEqJ,EApBFrJ,WACAgtlB,EAmBE3jlB,EAnBF2jlB,WACAC,EAkBE5jlB,EAlBF4jlB,YACA/qT,EAiBE74R,EAjBF64R,iBACAhmL,EAgBE7yG,EAhBF6yG,UACAgxe,EAeE7jlB,EAfF6jlB,oCACAp4L,EAcEzrZ,EAdFyrZ,WACAq4L,EAaE9jlB,EAbF8jlB,oBACA1F,EAYEp+kB,EAZFo+kB,uBACA2F,EAWE/jlB,EAXF+jlB,wBACA9ygB,EAUEjxE,EAVFixE,WACA4oS,EASE75W,EATF65W,0BACA6wC,EAQE1qZ,EARF0qZ,6BACAs5L,EAOEhklB,EAPFgklB,cACAC,EAMEjklB,EANFiklB,aACAC,EAKElklB,EALFkklB,YACAxvO,EAIE10W,EAJF00W,iBACAD,EAGEz0W,EAHFy0W,oBACA0vO,EAEEnklB,EAFFmklB,iBACAtimB,EACEme,EADFne,EAGImtD,EAAUs2C,KACVt0C,EAAQwjD,eACR/zF,EAAW2F,wBAEjB,EAA0D7L,WAAe,IAAzE,mBAAO6plB,EAAP,KAA8BC,EAA9B,KAEMC,EAA0BrzgB,GAAcA,EAAWp3G,IAAI,qBAEvD0qnB,EAAqB,CAAC,CAC1B,cAAe,CACb,GAAM,YAkDV,OACE,eAAC51iB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAAC8/B,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,mDAEL,cAAC,QAAD,CACEvd,KAAM,oBACN8qE,UAAW2nD,IACXtnB,WAAY,CACV3tE,QAASuhlB,EAA6B,GAAMC,GAAuBA,EAAoBjsmB,SACvFi6F,SAAU,SAACgF,GACT,IAAMkugB,EAAevzgB,EAAWv6F,MAAM,CAAC,oBAAqB,UACtD+tmB,EAAgBxzgB,EAAWv6F,MAAM,CAAC,oBAAqB,WACvDgumB,EAAiBzzgB,EAAWv6F,MAAM,CAAC,oBAAqB,YACxDiumB,EAA0B1zgB,EAAWv6F,MAAM,CAAC,oBAAqB,4BACnEiumB,GACFlklB,EAASu/B,YAAO6ijB,GAAD,4CAAyE8B,IAE1FlklB,EAASu/B,YAAO6ijB,GAAD,0BAAuD2B,IACtE/jlB,EAASu/B,YAAO6ijB,GAAD,2BAAwD4B,IACvEhklB,EAASu/B,YAAO6ijB,GAAD,4BAAyD6B,KAE1E3lgB,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,cAACyJ,EAAA,EAAD,CAASC,MAAO,CAAC1J,EAAOz8G,IAAI,eAAgBy8G,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,OAApH,SACE,gCACG++F,EAAOz8G,IAAI,eADd,MACgC,sBAAMq1E,UAAWF,EAAQ2+R,KAAzB,SAAgC,CAACr3P,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,eAI7IkgG,aAAc,SAACnB,EAAQiC,GAErB,OADcjC,EAAO1/E,MAAMoJ,MAAMggF,MAAM9wE,cAC1B7vC,SAASk5G,EAAWrpE,gBAEnC4xE,YAAaj/F,EAAE,iDACf+wB,WAAY,CACVykF,OAAQ,YAAuC,IAArC7lI,EAAoC,EAApCA,MAAOo6H,EAA6B,EAA7BA,WAAY96E,EAAiB,EAAjBA,KAAMla,EAAW,EAAXA,MAC3BgulB,EAAc,OAAGf,QAAH,IAAGA,OAAH,EAAGA,EAAqCxknB,SAASyxC,EAAKj3C,IAAI,aACxEm5G,EAAW7/G,QAAQyxnB,IAAc,OAAIN,QAAJ,IAAIA,OAAJ,EAAIA,EAAyB5tmB,MAAM,CAAC,8BAC3E,OACE,cAACqxM,GAAA,EAAD,yBACEv2N,MAAOA,EACPwhH,SAAUA,EACVktR,gBAAgB,GACZt0Q,GAJN,IAKE18C,UAAWF,EAAQutP,oBACnBnrN,MAAO,CAAE+J,OAAQnI,EAAW,UAAY,WACxC2H,QAAS3H,EAAW,SAAC90G,GAAD,OAAOA,EAAE87G,mBAAoB4R,EAAWjR,QAP9D,SASE,eAAChsC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACG15C,EAECgulB,GACE,cAAC7kgB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+DAAlB,SACE,cAAC,KAAD,CAAak6E,MAAM,qBASnCrqB,OAAQqnQ,aAAuB/nQ,GAC/BowC,aAAa,EACbi5O,aAAc,QACdn5O,0BAA0B,EAC1B4K,YAAY2yf,EACZ5lgB,UAAWwqgB,EACXrigB,eAAgB,kBACd,eAACryC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAASyB,KAAK,SAAnE,UACE,cAAConP,GAAA,EAAD,CAAkB7lU,KAAK,UAAUu/G,MAAO,CAAEkG,YAAa,KACtDz1F,EAAE,gCAGPy2F,cAAe,SAACvsG,GACds4mB,EAAyBt4mB,IAE3Bg1G,iBAAkB,kBAAM,cAACo6O,GAAA,EAAD,CAAkB8gD,WAAYp6X,EAAE,mCAAoCgwkB,cAAesyB,EAAkBxpgB,QAAS+vU,EAA+B,WACnKjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,KACJxliB,MAAO,CACLy2F,YAAa2tf,EACb7zL,UAAW,SAACs0I,GAAmD,IAAD,EACtDggD,EAAuBhgD,EAAmBhrkB,IAAI,MAG9CirnB,EAA2B5lmB,iBAAO,CACtC89a,SAAU6nL,EACVtugB,UAAWsud,EAAmBhrkB,IAAI,OAClC48H,YAAaouc,EAAmBhrkB,IAAI,eACpC6tN,KAAMm9W,EAAmBhrkB,IAAI,QAC7BrI,MAAOqzkB,EAAmBhrkB,IAAI,SAC9B8qnB,wBAAuB,UAAE1zgB,EAAWv6F,MAAM,CAAC,oBAAqB,mCAAzC,QAAwE,OAIjG+pB,EAASu/B,YAAO6ijB,GAA2B,oBAAqBiC,SAKtEr5L,KACE,QACJ5sV,QAAS,kBA1JgB,WAC/B,IAAMkmhB,EAAqBxB,EAAyBzknB,KAAI,SAACw3G,GACvD,GAAc,MAAVA,EAAJ,CAGA,IACM0mV,GADkB9nc,sBAAYohH,GAAUA,EAASp3F,iBAAOo3F,IAC7Bz8G,IAAI,YAErC,OAAOmjc,IAAawmL,EAA4B,KAAOxmL,MACtD37b,QAAO,SAAAsM,GAAC,OAAS,MAALA,KAET0xG,EAAkBkkgB,GAA4B,CAClD,IAAM,CACJ,CACE,SAAY,CACV,IAAOwB,EAAmB1wmB,UAHhC,mBAMKuvmB,GACAW,IAIHZ,GACFtkgB,EAAQ9nF,IAAIr1B,KAAK,CACf,UAAa,CACX,IAAO,QAKb4hnB,EAAoBntlB,EAAY8nlB,EAAsBsG,EAAmBlznB,KAAO,EAAIwtH,EAAU,CAC5F,IAAM,GAAN,mBAAWukgB,GAAgBW,KAE7BnG,EAAuBK,GAwHFuG,KAEjBt1gB,iBAAkB,CAChBC,WAAW,KAIdkqS,GAA6BhnQ,GAC5B,eAAClkE,EAAA,EAAD,CACEe,MAAM,EADR,UAGE,cAAC,QAAD,CACEprE,KAAK,4CACL8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,4CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAU7/G,QAAQqwnB,OAIvBc,GAA2BA,EAAwBzqnB,IAAI,4BACtD,eAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAAxE,UACE,cAACugC,EAAA,EAAD,UAAaztF,EAAE,uCACf,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAASu/B,YAAO6ijB,GAA2B,yCAA0C,QACpG7vgB,UAAWsxgB,EAAwB5tmB,MAAM,CAAC,mBAAoB,QAHhE,SAIEmL,EAAE,0BAEN,cAAC,QAAD,CACEvd,KAAK,yCACL07B,MAAO,CACLyvE,WAAY,CACVz5G,KAAM,OACNi+V,WAAW,GAEbvkP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,YAMrB,cAAC,GAAD,CACEkzgB,WAAY,oBACZC,WAAU,0CAAqClqT,GAC/CmqT,qBAAsB7vnB,QAAQqwnB,KAI/BQ,GAAiB7wnB,QAAQqwnB,IACxB,eAAC70iB,EAAA,EAAD,CACEe,MAAM,EACN0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAFtC,UAIE,cAAC7Z,EAAA,EAAD,UAAaztF,EAAE,kDACf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,cAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,cAAC,QAAD,CACEj4C,UAAWqqP,IACXn1T,KAAI,mCACJwrG,SAAUimP,KACV/1T,MAAO,CACLs3T,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,MAEVkQ,cAAe,CACbC,eAAgB,SAACU,EAAkB1pO,GAAnB,OAA6B8mf,GAAwB,SAACz8B,GAAD,OAAeA,EAAUpllB,KAAKykW,EAAU,GAAG/rP,cAElHwrP,eAAe,OAIrB,cAAC51O,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBApM1Cl6E,EAASu/B,YAAO6ijB,GAAD,2BAAwD,YACvEpilB,EAASu/B,YAAO6ijB,GAAD,mCAAgE,QAmMvE,SACE,cAAC9igB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,cAAC,KAAD,cAOToimB,GAAgBpxe,GAAa1/I,QAAQqwnB,IACpC,eAAC70iB,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAAtD,UACE,cAAC7Z,EAAA,EAAD,UAAaztF,EAAE,wDACf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,cAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,cAAC,QAAD,CACEj4C,UAAWqqP,IACXn1T,KAAI,kCACJwrG,SAAUimP,KACV/1T,MAAO,CACLs3T,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,WAKhB,cAACtlO,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAzN1Cl6E,EAASu/B,YAAO6ijB,GAAD,0BAAuD,YACtEpilB,EAASu/B,YAAO6ijB,GAAD,kCAA+D,QAwNtE,SACE,cAAC9igB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,cAAC,KAAD,cAOTqimB,GAAerxe,GAAa1/I,QAAQqwnB,IACnC,eAAC70iB,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAAtD,UACE,cAACx6C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGrB,WAAW,SAASa,QAAQ,gBAA/D,SACE,cAACq1iB,GAAA,EAAD,CACEnuX,SAAU+rX,GACVqC,kBAAmB,CAAC,oBAAqB,mCACzCC,mBAAkB,oDAClBzwO,iBAAkBA,EAClBziZ,OAAQ,MAGZ,cAACw6H,GAAA,EAAD,IACA,cAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,WAA3C,SACE,cAAC0nU,GAAA,EAAD,CACE5C,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuBP,EAAoBO,IAChE1lU,WAAW,EACXE,UAAW,MACXI,QAAS,WACTmsB,MAAO,gBACPyT,QAAS,UACT0pO,WAAY,CAAC5hO,YAAa,WAMlC,cAAC3oC,EAAA,EAAD,CACEO,UAAWF,EAAQo0iB,sBADrB,SAGE,cAAC3ogB,GAAA,EAAD,CACEzH,UAAUwwgB,EACVznhB,MAAM,UACN4e,QAAS,WACP,IAAM2mgB,EAA2BiC,GAA8D,IAAlCA,EAAyB1xnB,KACpF0xnB,EAAyBrhnB,KAAKuhnB,GAC9B11mB,iBAAO7L,KAAKuhnB,GAER5+C,EAAqB6+C,EAAyBlmnB,IAAI,SAAU8jnB,GAGlE7glB,EAASu/B,YAAO6ijB,GAA2B,kBAAmBh+C,IAC9DpkiB,EAASu/B,YAAO6ijB,GAA2B,oBAAqB,QAZpE,SAeGhhmB,EAAE,+D,6BC1YAghmB,GAA4B,yBAEnC/xC,GAAsBh1iB,SAASC,cAAc,OAEnD,IAAKD,SAASywC,KACZ,MAAM,IAAI7uE,MAAM,uCAGlBo+B,SAASywC,KAAKymO,YAAY89R,IAE1B,IC8KYs0C,GD9KNC,GAAoB,GA+BpB//f,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2gX,kBAAmB,CACjB1ziB,QAASZ,EAAMZ,UACfgiC,UAAWphC,EAAMZ,UACjB,cAAc,aAAd,OAA4BY,EAAM+pC,QAAQ+d,UAAUysf,QAEtDC,aAAc,CACZ5ziB,QAASZ,EAAMZ,UACfgiC,UAAWphC,EAAMZ,WAEnBu9R,KAAM,CACJriP,UAAW,SACXvvB,MAAO,uBAETwgO,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,OAGnC8/R,sBAAuB,CACrBluI,UAAW,QACXywC,UAAW,OACXhsO,OAAQL,EAAMZ,QAAQ,IAAK,IAE7BgmL,QAAS,CACPr6J,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,gBA20CRrF,qBACb4pC,mBA/EsB,SAAC73E,EAAOyF,GAAc,IAAD,QACrC00b,EAAoB5iR,cAA8Bv3K,GAElDsniB,GAA2C,OAAjBntG,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBp9d,IAAI,eAAgB,KACjE4rnB,GAAqC,OAAjBxuJ,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBp9d,IAAI,WAAW,EAEtD6rnB,EAA+B,OAAGthD,QAAH,IAAGA,OAAH,EAAGA,EAAyB5mkB,IAAI,SAA7B,iBAAuC4mkB,QAAvC,IAAuCA,GAAvC,UAAuCA,EAAyBvqkB,IAAI,iBAApE,aAAuC,EAAwCwH,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,oBAA3G,QAAuIkU,kBAEzK43mB,EAAqCD,GAAmCA,EAAgC5+mB,eAAe,SAAAywQ,GAC3HA,EAAI19Q,IAAI,UAAU2I,SAAS,SAAChR,EAAOS,GAEjC,IAAMiwM,EAAQ1wM,EAAMqI,IAAI,SAClB0qZ,EAAwBriN,GAASA,EAAMzgM,QAAO,SAACutI,EAAKw1Q,EAAaC,GACrE,IAAMC,EAA4BF,EAAY/iZ,QAAO,SAACiiR,EAAM1gD,EAAU2hL,GACpE,IAAMC,EAAoBzxZ,QAAQ6vO,EAASnpO,IAAI,UACzCgrZ,EAAmB7hL,EAASxlO,IAAI,QAASonZ,GAC/C,OAAOlhI,EAAKlmR,IAAImnZ,EAAaE,KAC5Bn8Y,iBACH,OAAOsmI,EAAIxxI,IAAIinZ,EAAgBC,KAC9Bh8Y,iBACH6uQ,EAAIvxQ,MAAM,CAAC,SAAU/T,EAAO,SAAUsyZ,GAAyB77Y,iBAGzB,OAAlClX,EAAMqI,IAAI,qBACZ09Q,EAAIvxQ,MAAM,CAAC,SAAU/T,EAAO,oBAAqByW,uBAIjD0rG,EAAgBsxgB,EAClBxmmB,iBAAO,CACL,gBAAmBymmB,EACnB,qBAAcD,EAAgC7rnB,IAAI,mBAAlD,SACA,iCAA0B6rnB,EAAgC7rnB,IAAI,kBAA9D,WAEFqlB,iBAAO,CACP,gBAAmB,KACnB,YAAc,EACd,wBAA0B,IAG9B,OAAO,aACLummB,oBACArxgB,iBACGxrE,YAAyB,CAC1Bg9kB,cAAe9zX,cACfwxX,oBAAqB3xX,cACrB0xX,2BAA4BxxX,cAC5B5gJ,WAAYC,wBAAc2xgB,IAC1B1E,iBAAkBjtgB,wBAAcqrgB,IAChC1iO,0BAA2BxgW,eAC3Bw5F,UAAWzzF,cACXsrY,6BAA8B3xY,cAC9B+gW,yBAA2Bp+V,eAC3Bq+V,4BAA6Bn+V,eAC7BiqkB,eAAgB7ye,eAXfpqG,CAYA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAqllB,cAAe,SAACnvlB,EAAoB0oF,GAClC5+E,EAAS,IAAIs8C,KAAuB,CAACpmD,aAAY0oF,cAEnDykgB,oBAAqB,SAACntlB,EAAoBssX,EAAqB5jS,GAC7D5+E,EAAS,IAAIg8C,KAA6B,CACxC9lD,aACAssX,cACA5jS,cAGJ++f,uBAAwB,SAACn7N,GACvBxiX,EAAS,IAAI47C,KAA6B4mU,SAO9CxjS,eACAxqE,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMsvgB,GACNtlT,oBAAoB,EACpBD,kBAAkB,IAPPvyP,EAt0CqC,SAAA/qC,GAAU,IAAD,UAEzDu1F,EAuBEv1F,EAvBFu1F,OADF,EAwBIv1F,EAtBFixE,kBAFF,MAEevoG,gBAFf,IAwBIs3B,EArBFm+kB,wBAHF,MAGqBz1mB,gBAHrB,EAIEmwT,EAoBE74R,EApBF64R,iBACA4sT,EAmBEzllB,EAnBFyllB,kBACAG,EAkBE5llB,EAlBF4llB,cACAtC,EAiBEtjlB,EAjBFsjlB,oBACAD,EAgBErjlB,EAhBFqjlB,2BACAxpO,EAeE75W,EAfF65W,0BACAhnQ,EAcE7yG,EAdF6yG,UACA90C,EAaE/9D,EAbF+9D,OACAgohB,EAYE/llB,EAZF+llB,wCACAr7L,EAWE1qZ,EAXF0qZ,6BACAs7L,EAUEhmlB,EAVFgmlB,2CACAF,EASE9llB,EATF8llB,cACAhC,EAQE9jlB,EARF8jlB,oBACA1F,EAOEp+kB,EAPFo+kB,uBACA39kB,EAMET,EANFS,SACA03R,EAKEn4R,EALFm4R,aACA2hF,EAIE95W,EAJF85W,yBACAC,EAGE/5W,EAHF+5W,4BACA8rO,EAEE7llB,EAFF6llB,eACAhkmB,EACEme,EADFne,EAGF,EAAsD0Y,WAAe,IAArE,mBAAO0rlB,EAAP,KAA4BC,EAA5B,KACA,EAA0D3rlB,WAAe,IAAzE,oBAAO6plB,GAAP,MAA8BC,GAA9B,MACA,GAAoD9plB,WAAe,IAAnE,qBAAO4rlB,GAAP,MAA2BC,GAA3B,MACA,GAAoD7rlB,WAAe,MAAnE,qBAAO8rlB,GAAP,MAA2BC,GAA3B,MACA,GAAmE/rlB,YAAe,GAAlF,qBAAOgslB,GAAP,MAAmCC,GAAnC,MACA,GAAkFjslB,WAAe,IAAjG,qBAAOqhX,GAAP,MAA0C1B,GAA1C,MACA,GAA8C3/W,WAAe,MAA7D,qBAAOkslB,GAAP,MAAwBC,GAAxB,MACA,GAAwDnslB,WAAexsB,kBAAvE,qBAAO44mB,GAAP,MAA6B5C,GAA7B,MACA,GAAoExplB,WAAe,IAAnF,qBAAOqslB,GAAP,MAAmCC,GAAnC,MACA,GAAgDtslB,WAAyB,MAAzE,qBAAOm6W,GAAP,MAAyBD,GAAzB,MACA,GAAwDl6W,YAAe,GAAvE,qBAAOuslB,GAAP,MAA6BC,GAA7B,MAEAxslB,aAAgB,WACVkrlB,GACFa,GAAsB7H,IACtBuI,KACAvyO,GAAoB,QAGpBkyO,GAAqB7nnB,KAAI,SAACw4F,GAAD,OAAS64G,IAAIq2J,gBAAgBlvQ,MACtDgvhB,GAAsB,SAExB,CAACb,IAEHlrlB,aAAgB,WACdyslB,OACC,CAACX,KAEJ,IAQMr3iB,GAAUs2C,KACVt0C,GAAQwjD,eAERyyf,GAAuBp0e,EAEvBu4S,GAAa,iBAAGn6U,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,kBAAmB,gBAAzC,QAAqD,GAElEi3M,GAAY,OAAG18G,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,kBAAmB,iBACrDwwmB,GAA6Bv5Z,KAAY,OAAIp4F,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ7+G,MAAM,CAAC,aAAci3M,GAAc,YACxFk2Z,GAAmC,OAAGqD,SAAH,IAAGA,IAAH,UAAGA,GAA4B7lnB,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,oBAA3D,aAAG,EAAkFiF,KAAI,SAACtN,GAAD,OAAWA,EAAMqI,IAAI,SAEjJ88B,GAAawnlB,EAAiBznmB,MAAM,CAAC,eAAgB,OACrDytmB,GAAgB,UAAG0B,EAAepumB,MAAK,SAAAy1G,GAAQ,OAAIA,EAASrzH,IAAI,QAAU88B,aAA1D,aAAG,EAAoE98B,IAAI,YAC3Fq8I,GAAiBioe,EAAiBznmB,MAAM,CAAC,eAAgB,OAEzD+nmB,GAAuBxtgB,EAAWv6F,MAAM,CAAC,kBAAmB,gBAC5D6smB,GAAwD,UAAGtygB,EAAWv6F,MAAM,CAAC,kBAAmB,UAAW3I,yBAAnD,aAAG,EAAyD1M,QAAQ,SAAA7P,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,aAC/IstnB,GAAwC5D,GAA2BA,GAAyBr4mB,QAAU,EACtGs4mB,GAAoCvygB,EAAWv6F,MAAM,CAAC,oBAAqB,aAE3E0wmB,GAA4Bn2gB,EAAWp3G,IAAI,sBAAwBo3G,EAAWp3G,IAAI,qBAAqB2D,IAAI,SAAU,UACrHimnB,GAAqCvunB,sBAAYkynB,IACnDA,GACAlomB,iBAAOkomB,IAELtqL,GAAkB7rV,EAAWv6F,MAAM,CAAC,oBACpCgtmB,GAA2BxunB,sBAAY4nc,IAAmBA,GAAkB59a,iBAAO49a,IAEnF6mL,GAAa1ygB,EAAWp3G,IAAI,cAC5B3I,GAAU+/G,EAAWp3G,IAAI,0BACzBwtnB,GAAsB,UAAGp2gB,EAAWv6F,MAAM,CAAC,kBAAmB,8BAAxC,SACtBstmB,GAAgB/ygB,EAAWv6F,MAAM,CAAC,kBAAmB,eAAiBuwmB,GACtEhD,GAAehzgB,EAAWv6F,MAAM,CAAC,kBAAmB,mCAAqCojY,EACzFoqO,GAAcjzgB,EAAWv6F,MAAM,CAAC,kBAAmB,2CAA6CqjY,EAChGutO,GAAwBr2gB,EAAWv6F,MAAM,CAAC,kBAAmB,0CAC7D6wmB,GAAuBt2gB,EAAWv6F,MAAM,CAAC,kBAAmB,kDAC5Dinb,GAAyBwgL,EAAiBtknB,IAAI,qBAAuB6O,gBACrE8+mB,GAA2C7pL,GAAuBlmb,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,0CAA4CkjZ,EAAKljZ,IAAI,iBAAmB4knB,MAChKgJ,GAA8C9pL,GAAuBlmb,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,kDAAoDkjZ,EAAKljZ,IAAI,iBAAmB4knB,MAE3KiJ,GAA6BN,IAA6BD,GAAiCA,GAAgC,KAC3HQ,IAAwCx0nB,QAAQg0nB,GAAgC,GAAKO,IAErF9D,GAAc1te,GAChB,CAAC,CACC,eAAkB,CAChB,GAAMA,MAGV,GAMEque,GAAqB,CAAC,CAC1B,cAAe,CACb,GAAM,YAGJqD,IAAoBrE,IAA4Bx1mB,kBAAQ1M,QAAO,SAAAo1H,GAAW,OAAIA,KAAavrH,SAAWs4mB,GAA4B,EAAI,GAEtIqE,GAtEc,SAAoBr2nB,GACtC,IAAMD,EAAMgpC,WAIZ,OAHAA,aAAgB,WACdhpC,EAAIqsC,QAAUpsC,IACb,CAACA,IACGD,EAAIqsC,QAiEM42Q,CAAY,CAAEmvU,cAAYiE,oBAAkBrE,4BAA0BC,6BAA2B/E,0BACpHlklB,aAAgB,WAEZstlB,MACGA,GAAWpJ,sBAAwBA,KACjCoJ,GAAWlE,YAAcA,KACzBA,IAAckE,GAAWD,iBAAmB,GAAKA,IAAoB,GACtEjE,IAAckE,GAAWD,iBAAmB,GAAKA,IAAoB,IAEzExB,GAAsB,MAEvB,CAACzC,GAAYiE,GAAkBrE,GAA0BC,GAA2B/E,KAEvFlklB,aAAgB,WACd,GAAI4plB,IAAoB1F,IAAwBmH,EAAe,CAC7D,IAAM/5L,EAAoB+5L,EAAcnumB,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,iBAAmB4knB,OACjF,OAAI5yL,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBhyb,IAAI,mBACzBktnB,IAAwB,QAG1BA,IAAwB,KAEzB,CAACtI,GAAsBmH,IAE1B,IAAMkC,GAAoB,WACxB1B,GAAsB,IACtBJ,EAA2C,IAC3CvllB,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,MAERy5S,GAAqC,IACrCwsO,GAAmB,MACnBjmlB,EAASggC,YAAMoijB,MAgDXmE,GAAmB,SAACj7mB,GACxB,GAAI4qB,GAAY,CACd,IAAM2wL,EAAa62Z,EAAiBznmB,MAAM,CAAC,eACrC6vjB,EAAmB43C,EAAiBznmB,MAAM,CAAC,qBAC3C2wM,EAAWp2G,EAAWv6F,MAAM,CAAC,kBAAmB,aAEhDqxmB,EAAezga,GAAcA,EAChCjmN,QAAO,SAAC07Y,GAAD,uBAAUA,EAAKljZ,IAAI,iBAAnB,aAAU,EAAoB0J,MAAK,SAAC/R,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,gBAC/D4H,QAAO,SAACutI,EAAKw4E,GACZ,OAAOx4E,EAAI9sI,KAAKslN,EAAU9wM,MAAM,CAAC,QAAU8wM,EAAU9wM,MAAM,CAAC,mBAC3D3I,kBAECi6mB,EAAqBzhD,GAAoBA,EAAiB9kkB,QAAO,SAACutI,EAAKi5e,GAC3E,IAAMC,EAAuCD,EAAiBpunB,IAAI,UAAU4d,MAAK,SAAAjmB,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,aAC9FsunB,EAAqBF,EAAiBvxmB,MAAM,CAAC,gBACnD,OAAIwxmB,GAAwCC,IAAuB9B,IAAsB8B,IAAuB1J,GACvGzve,EAAI9sI,KAAK+lnB,EAAiBvxmB,MAAM,CAAC,iBAEjCs4H,IAERjhI,kBAEGsxG,EAAe,CACnB,CACE,eAAkB,CACd,GAAM62B,MAKd,GAAK6xe,GAAsC,IAAtBA,EAAal2nB,MAAgBm2nB,GAAkD,IAA5BA,EAAmBn2nB,KAAa,CACtG,IAAMu2nB,EAAY,sBACZL,EAAeA,EAAa1zmB,OAAS,IADzB,YAEZ2zmB,EAAqBA,EAAmB3zmB,OAAS,KAGvDgrG,EAAQn9G,KAAK,CACX,YAAe,CACb,IAAOkmnB,KAKT/ga,GACFhoG,EAAQn9G,KAAK,CACX,UAAa,CACX,IAAO,QAKT6J,GACFszG,EAAQn9G,KAAK,CACX,GAAM,CACJ,CACE,aAAgB,CACZ,KAAQ6J,IAGd,CACE,KAAQ,CACN,KAAQA,OAOlB+5mB,EAAcnvlB,GAAY,CAAEY,IAAK8nF,MA+D/BgpgB,GAAgB,uCAAG,WAAOpnnB,GAAP,+DAAAxF,EAAA,yDACa,kBAAzBgjnB,GADY,uBAErB2H,GAAsB,0DACtB3llB,EAAS0gC,YAAM0hjB,GAA2B,oBAC1CpilB,EAASogC,YACPgijB,KALmB,0CAUe9tkB,QAAQwnJ,IAAR,UAAYt7L,EAC/CyV,MAAM,CAAC,kBAAmB,UAAW3I,kBACrC1M,QAAQ,SAAA7P,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,oBAFQ,iBAAY,EAG9CiN,eAAe,SAAAywQ,GACfA,EAAI/0Q,SAAS,SAAChR,EAAOS,GAEnBslR,EAAIpxQ,SAAS,CAAClU,EAAO,4BAEhBT,EAAMklB,MAAM,CAAC,mBAAoB,SACpC6gQ,EAAIvxQ,MAAM,CAAC/T,EAAO,oBAAqB,mBATT,aAAY,EAa9C6M,IAb8C,uCAa1C,WAAOtN,GAAP,yBAAAiK,EAAA,0DAEAjK,EAAMqI,IAAI,kBAFV,gCAGkBq5T,YAAI,CAAEn1N,SAAQtK,MAAOjiG,EAAMqI,IAAI,oBAHjD,OAGFyunB,EAHE,iBAKE52T,EAAUh7S,gBAAM4xmB,EAAa,CAAC,EAAG,MAAO,KAAO92nB,EAAMqI,IAAI,WAE3DrI,EAAMqI,IAAI,iBAPV,gCAQyBq5T,YAAI,CAAEn1N,SAAQtK,MAAOjiG,EAAMqI,IAAI,mBARxD,OAQF0unB,EARE,qBAUE/zO,EAAiB99X,gBAAM6xmB,EAAoB,CAAC,EAAG,MAAO,KAAO/2nB,EAAMqI,IAAI,2BACvE2unB,EAAyB92T,EAAkBlgU,EAAM8sH,OAAO,kBAAkB9gH,IAAI,SAAUk0T,GAAW,MAAhElgU,EACnCi3nB,EAAqCj0O,EAAyCg0O,EAAsBlqgB,OAAO,iBAAiB9gH,IAAI,0BAA2Bg3Y,GAAkB,MAAvHg0O,EAC5D/nlB,EAAS,IAAI4K,KAbT,kBAcG75C,EAAMqI,IAAI,UAAY4unB,EAAoCA,EAAkCjrnB,IAAI,SAAU,WAd7G,4CAb0C,wDAV3B,UAUjB8mnB,EAViB,OAuCjBoE,EAAmCxznB,sBAAYovnB,GACjDA,EACAplmB,iBAAOolmB,GAELqE,EAA2CD,EAC9CrnnB,QAAO,SAAAsM,GAAC,OAAS,MAALA,KACZ7O,KAAI,SAAA23H,GAAW,OAAKA,EAAY58H,IAAI,SAAyB48H,EAAYj5H,IAAI,QAASi5H,EAAY58H,IAAI,SAASiN,eAAc,SAAAmoT,GAC5HA,EAAOzsT,SAAQ,SAACw8Y,EAAgB/sZ,GAC9B+sZ,EAAex8Y,SAAQ,SAACy8Y,EAAUC,GAChCD,EAASz8Y,SAAQ,SAAC28Y,EAAaC,GAC7B,GAAoB,KAAhBD,EACF,OAAOlwF,EAAOjpT,MAAM,CAAC/T,EAAOitZ,EAAQE,GAAa,mBALX3oR,KAa9Cmyf,EAAiEnF,IACjEA,KAAuCA,GAAmC5pnB,IAAI,oBAAqB4pnB,GAAmC5pnB,IAAI,iBA3DvH,kCA4DIq5T,YAAI,CAAEn1N,SAAQtK,MAAK,OAAEgwhB,SAAF,IAAEA,QAAF,EAAEA,GAAoC5pnB,IAAI,oBA5DjE,eA4Dfs5T,EA5De,OA6DfzB,EAAUh7S,gBAAMy8S,EAAY,CAAC,EAAG,MAAO,MAA7B,OAAoCswT,SAApC,IAAoCA,QAApC,EAAoCA,GAAoC5pnB,IAAI,WA7DvE,UA8DWq5T,YAAI,CAAEn1N,SAAQtK,MAAK,OAAEgwhB,SAAF,IAAEA,QAAF,EAAEA,GAAoC5pnB,IAAI,mBA9DxE,QA8DfgvnB,EA9De,OA+Dfr0O,EAAiB99X,gBAAMmymB,EAAmB,CAAC,EAAG,MAAO,MAApC,OAA2CpF,SAA3C,IAA2CA,QAA3C,EAA2CA,GAAoC5pnB,IAAI,4BACpGivnB,EAAsDp3T,EAAD,OAAgD+xT,SAAhD,IAAgDA,IAAhD,UAAgDA,GAAoCnlgB,OAAO,yBAA3F,aAAgD,EAA8D9gH,IAAI,SAAUk0T,GAAW,MAA5H+xT,GACtEmF,EAAkEp0O,EAAD,OAAuEs0O,QAAvE,IAAuEA,GAAvE,UAAuEA,EAAoDxqgB,OAAO,wBAAlI,aAAuE,EAA6E9gH,IAAI,0BAA2Bg3Y,GAAkB,MAAnLs0O,EACnFrolB,EAAS,IAAI4K,KAlEQ,WAqEjB09kB,EAAyEtF,GAC3EkF,EAAyCzmnB,KAAK0mnB,GAC9CD,EAEEpiD,EAAyE43C,EAAiBtknB,IAAI,mBAAoBqP,wBAClHm0mB,EAAqBqG,GAAyB7pnB,IAAI,gBAElDgrkB,EAAqB6+C,GACxBlmnB,IAAI,SAAUurnB,GACdvrnB,IAAI,WAAYmmnB,IAEbqF,EAAgCnkD,EAAmBrnkB,IAAI,UAAWtM,IAElE+3nB,EAA8CD,EAA8BnvnB,IAAI,UAAUwH,QAAO,SAAA2/b,GAErG,SADiB9rc,sBAAY8rc,GAAeA,EAAYnnc,IAAI,YAAcmnc,EAAYhE,aAIlFksL,EAAwCF,EAA8BxrnB,IAAI,SAAUyrnB,GAEpFE,EAAsBpD,EACxBx/C,EAAiB/okB,IAAIuonB,EAAyCmD,GAC9D3iD,EAAiB/okB,IAAI6/mB,EAAoB6L,MAEvCE,EAA8BrD,EAChCoD,EAAoBxtmB,YAAW,WAAe1pB,GAAW,IAAD,mBAAvBmI,EAAuB,KAAlB5I,EAAkB,KACtD,OAAI4I,IAAQ2rnB,EACH,CAAC1I,EAAoB7rnB,GAErB,CAAC4I,EAAK5I,MAGjB23nB,GAC4BzymB,MAAM,CAAC2mmB,EAAoB,WAAWxrnB,MAAQ,IAAoB,IAAf8xnB,IAtG5D,wBAuGrByC,GAAsB,2DAvGD,8BAyG+D,IAA3EgD,EAA4B1ymB,MAAM,CAAC2mmB,EAAoB,WAAWxrnB,OAA6B,IAAf8xnB,GAzGpE,wBA0GrByC,GAAsB,8DA1GD,2BA+GnBiD,EAAmCD,EACjCE,EAAwCronB,EAAOyV,MAAM,CAAC,kBAAmB,0CACzE6ymB,EAAgDtonB,EAAOyV,MAAM,CAAC,kBAAmB,mDAClF4ymB,GAAyC9B,IAA8C+B,GAAiD9B,MAC3I4B,EAAmCD,EAA4BtinB,eAAc,SAAAywQ,GAC3E,GAAI+xW,GAAyC9B,GAA0C,CACrF,IAAMgC,EAA8BhC,GAAyC3tnB,IAAI,gBACjF09Q,EAAIvxQ,MAAM,CAACwjnB,EAA6B,0CAA0C,GAEpF,GAAID,GAAiD9B,GAA6C,CAChG,IAAMgC,EAAiChC,GAA4C5tnB,IAAI,gBACvF09Q,EAAIvxQ,MAAM,CAACyjnB,EAAgC,kDAAkD,QAInGC,GAA4BL,GA9HL,4CAAH,sDAiIhBK,GAA8B,SAACC,GAEnC,IAAMC,EAAY,OAAG34gB,QAAH,IAAGA,OAAH,EAAGA,EACGv6F,MAAM,CAAC,kBAAmB,UAAW3I,kBACtC3M,OAAOqinB,GAAqC,CAACA,IAAsC,IACnFpinB,QAAO,SAAA7P,GAAK,OAAIA,GAAiC,YAAxBA,EAAMqI,IAAI,aACnCiF,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI,eAAawa,OAEjDw1mB,EADqB1L,EAAiBznmB,MAAM,CAAC,mBAAoBi3M,GAAc,UAAW,IAC/ClsN,QAAO,SAACutI,EAAKgyT,GAC5D,IAAMhE,EAAWgE,EAAYnnc,IAAI,aAAemnc,EAAYnnc,IAAI,MAC1DiwnB,EAA0C,YAA9B9oL,EAAYnnc,IAAI,UAClC,OAAI+vnB,EAAavqnB,SAAS29b,IAAa8sL,EAC9B96e,GAEPkrQ,IAAqC,SAAAt8W,GAAO,4BAASA,GAAT,CAAkBoja,EAAYtqb,MAAM,CAAC,qBAC1Es4H,EAAI5tI,OAAO,CAAC47b,OAEpB,IAEH0pL,GAAmBiD,GACfE,EAAsBlynB,OACxB6unB,IAA6B,GAE7Bp0T,GAASu3T,IAIPv3T,GAAW,SAAC23T,GAChBtplB,EAASu/B,YAAOu8iB,GAAqB,mBAAtB,OAA0CwN,QAA1C,IAA0CA,IAAoBtD,KAC7EqB,MAQIr8L,GAAa,SAAC10Z,GAAD,OAAgB,WACjC0J,EAAS,IAAI0J,IAA6B,CACxCpT,KACA0pE,MAAM,OAIJuphB,GAAoB,SAACx4nB,GACzB,IAAImU,EAAW,KACf,GAAInU,EAAO,CACT,IAAMyxZ,EAAczxZ,EAAMqI,IAAI,eAC9BiqnB,EAAoBntlB,GAAYssX,EAAa,CAC3C,IAAM,GAAN,OAAW2gO,GAAgBW,MAE7BnG,EAAuBn7N,GACvBt9Y,EAAWnU,EACRgM,IAAI,eAAe,GACnBA,IAAI,WAAYmmnB,IAChBnmnB,IAAI,UAAWtM,IACfsM,IAAI,UAAWuQ,kBAGpB0yB,EAASu/B,YAAO6ijB,GAA2B,oBAAqB,OAChEpilB,EAASu/B,YAAO6ijB,GAA2B,kBAAmBl9mB,KAG1DsknB,GAAqB,SAACC,GAC1BzplB,EAASu/B,YAAO6ijB,GAA2B,aAAcqH,IACrDA,GAAcptL,KAChBr8Z,EAASu/B,YAAO6ijB,GAA2B,iDAAiD,IAC5FpilB,EAASu/B,YAAO6ijB,GAA2B,yDAAyD,IACpGpilB,EAASu/B,YAAO6ijB,GAA2B,yDAAyD,IACpGpilB,EAASu/B,YAAO6ijB,GAA2B,iEAAiE,MAI1GsH,GAAgB,kBACpB,cAAC,GAAD,CACE9G,2BAA4BA,EAC5BC,oBAAqBA,EACrB7E,qBAAsBA,GACtB8E,yBAA0BA,GAC1BC,0BAA2BA,GAC3BC,mCAAoCA,GACpCC,yBAA0BA,GAC1B/slB,WAAYA,GACZgtlB,WAAYA,GACZC,YAAaA,GACb/qT,iBAAkBA,EAClBirT,oBAAqBA,EACrB1F,uBAAwBA,EACxB2F,wBAAyBA,GACzBt4L,WAAYA,GAAW+5I,MACvB3yb,UAAWA,EACX63S,6BAA8BA,EAC9Bm5L,oCAAqCA,GACrCG,cAAeA,GACfC,aAAcA,GACdC,YAAaA,GACbC,iBAAkBA,KAAqB2C,GACvCpyO,iBAAkBA,GAClBD,oBAAqBA,MAIzB,OACE,cAAC3oF,GAAA,EAAD,CACErrN,KAAMglhB,EACNhrf,QAASqtf,GACT,kBAAgB,6BAChBn4gB,WAAW,EACX0/K,OAAO,OALT,SAOE,uBAAM+iC,SAAU+F,EAAa/F,IAA7B,UACE,cAAC87G,GAAA,EAAD,CAAan3Y,GAAG,6BAA6Bq6E,MAAO,CAAE4M,WAAYqngB,IAAlE,SAC6CxjmB,EAA1CkkmB,EAA4C,wDAA6D,0DAE5G,cAACh6T,GAAA,EAAD,UACE,eAACp9O,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,eAACb,EAAA,EAAD,CAAMyiC,MAAO,CAAE4M,WAAYqngB,IAA3B,UACE,cAAC/1gB,EAAA,EAAD,CACEE,QAAQ,UADV,SAGG3tF,EAAE,+CAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MAFZ,UAIE,cAAC,QAAD,CACElrE,KAAK,aACL8qE,UAAW8iS,IACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,kDACTk6E,MAAO,UACPu6J,cAAc,EACd3zI,YAAY,EACZrR,SAAU,SAAC2rB,GAAD,OAAWgtf,IAAmB,OAG5C,cAAC,QAAD,CACE3lnB,KAAK,aACL8qE,UAAW8iS,IACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,+CACTk6E,MAAO,UACPu6J,cAAc,EACd3zI,YAAY,EACZrR,SAAU,SAAC2rB,GAAD,OAAWgtf,IAAmB,IACxCz4nB,MAAOmynB,SAIb,cAACh1iB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,aAFV,SAIE,cAACmwC,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8DAAlB,SACE,cAAC8sD,EAAA,EAAD,UACE,cAAC,QAAD,CACErqE,KAAK,yBACL8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,4DACT4tF,WAAY,CACV1T,MAAO,uBASrB,eAACptB,EAAA,EAAD,CAAMyiC,MAAO,CAAE4M,WAAYqngB,IAA3B,UACE,cAAC/1gB,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,iDAEL,cAAC,QAAD,CACEvd,KAAK,kBACL8qE,UAAW2nD,KACXjnB,SAAUgpF,KACVrpF,WAAY,CACV3tE,QAAS8jlB,GAAiBA,EAAcvumB,SACxC0nG,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,gCACGA,GAAUA,EAAOz8G,IAAI,QADxB,MACmC,sBAAMq1E,UAAWF,GAAQ2+R,KAAzB,SAAgCr3P,GAAUA,EAAOz8G,IAAI,sBAG1F49G,aAAc,WAAWc,GAAwB,IAAhCznE,EAA+B,EAA/BA,KACTxsC,EAAewsC,EAAKj3C,IAAI,QAAQq1C,cAChCk7kB,EAAwBt5kB,EAAKj3C,IAAI,gBAAgBq1C,cACvD,OAAO5qC,EAAKjF,SAASk5G,EAAWrpE,gBAAkBk7kB,EAAc/qnB,SAASk5G,EAAWrpE,gBAEtF4xE,YAAaj/F,EAAE,+CACf+wB,WAAY,CACVykF,OAAQ,SAAA/gB,GAAM,OACZ,cAACyxG,GAAA,EAAD,yBAAUv2N,MAAO8kH,EAAO9kH,MAAO0uY,gBAAgB,GAAW5pR,EAAOsV,YAAjE,IAA6E18C,UAAWF,GAAQutP,oBAAhG,SACGjmN,EAAO1/E,WAId86C,OAAQqnQ,aAAuB/nQ,IAC/BowC,aAAa,EACbi5O,aAAc,QACdn5O,0BAA0B,EAC1B5I,cAAe,SAACvsG,EAAaqsG,GAC3B8tgB,EAAuBn6mB,GACG,iBAAtBqsG,EAAWp3F,QAAmD,eAAtBo3F,EAAWp3F,QACrDgmmB,GAAiBj7mB,IAGrBulG,SAAU,SAAC9/G,GACTw4nB,GAAkBx4nB,IAEpBuvH,iBAAkB,kBAAM,cAACo6O,GAAA,EAAD,CAAkB8gD,WAAYp6X,EAAE,iCAAkCgwkB,cAAesyB,GAAkBxpgB,QAAS+vU,EAA+B,WACjKjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIg5Z,KACJ/vZ,MAAO,CACL17B,KAAM2hnB,EACN11L,UAAW,SAACrF,GACV,IAAMm/L,EAAiBn/L,EAAarxb,IAAI,MACxCmtnB,KAEA,IAAMsD,EAAqBprmB,iBAAO,CAChC+jY,YAAaonO,EACb18Z,aAAcu9N,EAAarxb,IAAI,OAC/ByK,KAAM4mb,EAAarxb,IAAI,QACvBq3E,QAAS,OAEX84iB,GAAkBM,QAIxB7+L,GAAWsE,KAAXtE,IACE,QACJ3/T,aAAYn1F,IAAcu/G,KAAmB6ve,IAE/Cr2gB,iBAAkB,CAChBC,WAAW,QAMfkjC,GAAa,qCACX,cAAClkE,EAAA,EAAD,CAAMyiC,MAAO,CAAE4M,WAAYqngB,IAA3B,SACE,cAAC,QAAD,CACE/gnB,KAAI,qCACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,2DACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW8pV,SAMjBuqL,IAA0B,qCACxB,eAAC14iB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAAS8gC,MAAO,CAAEotB,YAAa6mf,IAA3D,UACE,cAAC,KAAD,CAAapogB,SAAS,QAAQ/tC,UAAWF,GAAQonL,UACjD,cAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,qEAGP,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAAS8gC,MAAO,CAAEotB,YAAa6mf,IAA3D,UACE,cAAC,KAAD,CAAapogB,SAAS,QAAQ/tC,UAAWF,GAAQonL,UACjD,cAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,4EAOdolmB,IACC,cAACt4iB,EAAA,EAAD,CAAMyiC,MAAO,CAAE4M,WAAYqngB,IAA3B,SACE,cAAC,QAAD,CACE/gnB,KAAI,4BACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,yDACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW8pV,SAMpBA,KAAoB6mL,IAAc7pO,GAA4BjnQ,GAC7D,eAAClkE,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAEotB,YAAa6mf,GAAmBl8f,aAAc,GAA9E,UACE,cAACx6C,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,SACE,cAAC,QAAD,CACEprE,KAAI,gDACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,uDACT4tF,WAAY,CACV1T,MAAO,UACPuV,SAAU,SAACpzG,GACOA,EAAE4kB,OAAOgvG,SAEvBrxF,EAASu/B,YAAO6ijB,GAA2B,yDAAyD,WAOhH,eAACl0iB,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,UACE,cAAC,QAAD,CACEprE,KAAI,wDACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,yDACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWixgB,OAIhBqD,IAAyBE,IAC1B,eAAC74iB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,aAAauB,KAAK,SAAS8gC,MAAO,CAAC4W,cAAe,GAApF,UACE,cAAC,KAAD,CAAa94C,UAAWF,GAAQonL,UAChC,cAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,yEAMxCi7a,KAAoB6mL,IAAc5pO,GAA+BlnQ,GAChE,eAAClkE,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAEotB,YAAa6mf,GAAmBl8f,aAAc,GAA9E,UACE,cAACx6C,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,SACE,cAAC,QAAD,CACEprE,KAAI,wDACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,+DACT4tF,WAAY,CACV1T,MAAO,UACPuV,SAAU,SAACpzG,GACOA,EAAE4kB,OAAOgvG,SAEvBrxF,EAASu/B,YAAO6ijB,GAA2B,iEAAiE,WAOxH,eAACl0iB,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,UACE,cAAC,QAAD,CACEprE,KAAI,gEACJ8qE,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,wEACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWkxgB,OAIhBqD,IAAwBE,IACzB,eAAC94iB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,aAAauB,KAAK,SAAS8gC,MAAO,CAAC2W,WAAY,GAAjF,UACE,cAAC,KAAD,CAAa74C,UAAWF,GAAQonL,UAChC,cAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,4EAOzC,cAAC,KAAD,CAAiBgnR,UA/pBT,SAACn/R,EAAoBookB,GACrC,GAAKpokB,EAAOk6L,aAGRl6L,EAAOk6L,YAAY3xM,QAAUyX,EAAOqZ,OAAO9wB,MAI/C,GAAIyX,EAAOqZ,OAAO9wB,QAAUy1nB,GAAmB,CAC7C,IAAM6C,EAA8BhH,GACGt0mB,OAAOvF,EAAOk6L,YAAY3xM,MAAOm1nB,IACjCjlnB,MACjCqonB,EAA+BjH,GAAyB1pnB,KAAK,GAEnE4mC,EAASu/B,YAAO6ijB,GAA2B,yBAA0B0H,IACrE9plB,EAASu/B,YAAO6ijB,GAA2B,oBAAqB2H,SAE3D,GAAI9gnB,EAAOk6L,YAAY3xM,QAAUy1nB,GAAmB,CACzD,IAAM8C,EAA+BjH,GAAyB1pnB,IAAI6P,EAAOqZ,OAAO9wB,OAC1Es4nB,EAA8BhH,GACGr+mB,OAAOwE,EAAOqZ,OAAO9wB,MAAO,GAC5BiQ,KAAKklnB,IAE5C3mlB,EAASu/B,YAAO6ijB,GAA2B,yBAA0B0H,IACrE9plB,EAASu/B,YAAO6ijB,GAA2B,oBAAqB2H,QAE3D,CACL,IAAMxgnB,EAAUu5mB,GAAyB1pnB,IAAI6P,EAAOqZ,OAAO9wB,OAErDs4nB,EADyChH,GAAyBr+mB,OAAOwE,EAAOqZ,OAAO9wB,MAAO,GACzBiT,OAAOwE,EAAOk6L,YAAY3xM,MAAO,EAAG+X,GAE/Gy2B,EAASu/B,YAAO6ijB,GAA2B,yBAA0B0H,MAgoB/D,SACE,cAAC,KAAD,CAAWroW,YAAY,YAAvB,SAEI,SAAA5kK,GAAQ,OACN,8CAAK/rH,IAAK+rH,EAAS0lJ,UAAc1lJ,EAASmoM,gBAA1C,IAA0Dr0M,MAAO,CAAEhgC,MAAO,QAA1E,iBAEImyiB,SAFJ,IAEIA,QAFJ,EAEIA,GAA0BzknB,KAAI,SAACmpnB,EAAkBh2nB,GAC/C,OACE,cAAC,KAAD,CAAuB+wT,eAAgB2kU,GAA6B9lW,YAAa,IAAM5vR,EAAOA,MAAOA,EAArG,SAEI,SAACgglB,EAAWC,GACV,IAAMliiB,EACJ,eAAC2+B,EAAA,EAAD,qCACEp9E,IAAK0glB,EAAUjvU,UACXivU,EAAUtvR,gBACVsvR,EAAUxvR,iBAHhB,IAIEnzO,WAAW,EACXP,WAAW,SACXuB,KAAK,SANP,UAQE,cAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAOi0iB,GAAmBn0iB,QAAS,SAA9D,SACE,cAAC,KAAD,CAAY6qB,MAAQ4rhB,GAA8B,WAAa,aAEjE,cAAChggB,GAAA,EAAD,CAEEZ,UAAW,EACX73C,UAAWF,GAAQs2iB,kBAHrB,SAKE,eAAC32iB,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SAFP,UAIE,eAAC3B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,eAACb,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACV4hC,MAAO,CACLhgC,MAAO,QAJX,UAOE,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,qDAEL,cAAC,QAAD,CACEvd,KAAI,iCAA4BrS,EAA5B,KACJm9E,UAAW2nD,KACXtnB,WAAY,CACV3tE,QAASuhlB,EAA6B,GAAKC,GAAuBA,EAAoBjsmB,SACtFi6F,SAAU,SAACgF,GACT,IAAMkugB,EAAevzgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,UACrEwynB,EAAgBxzgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,WACtEyynB,EAAiBzzgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,YACvE0ynB,EAA0B1zgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,4BAClF0ynB,GACFlklB,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,4BAAuF0ynB,IAExGlklB,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,UAAqEuynB,IACpF/jlB,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,WAAsEwynB,IACrFhklB,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,YAAuEyynB,KAExF3lgB,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,cAACyJ,EAAA,EAAD,CAASC,MAAO,CAAC1J,EAAOz8G,IAAI,eAAgBy8G,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,OAApH,SACE,gCACG++F,EAAOz8G,IAAI,eADd,MACgC,sBAAMq1E,UAAWF,GAAQ2+R,KAAzB,SAAgC,CAACr3P,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,eAI7IkgG,aAAc,SAACnB,EAAQiC,GAErB,OADcjC,EAAO1/E,MAAMoJ,MAAMggF,MAAM9wE,cAC1B7vC,SAASk5G,EAAWrpE,gBAEnC4xE,YAAaj/F,EAAE,mDACf+wB,WAAY,CACVykF,OAAQ,YAAuC,IAArC7lI,EAAoC,EAApCA,MAAOo6H,EAA6B,EAA7BA,WAAY96E,EAAiB,EAAjBA,KAAMla,EAAW,EAAXA,MAC3BgulB,EAAc,OAAGf,SAAH,IAAGA,QAAH,EAAGA,GAAqCxknB,SAASyxC,EAAKj3C,IAAI,aACxE4wnB,EAA8B7D,GAA2BvnnB,SAASyxC,EAAKj3C,IAAI,cAAgBo3G,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,4BACjJ+gH,EAAW7/G,QAAQyxnB,GAAkB3zgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,8BAAgCkB,QAAQs3nB,GACzI,OACE,cAAC1ia,GAAA,EAAD,yBACEv2N,MAAOA,EACPwhH,SAAUA,EACVktR,gBAAgB,GACZt0Q,GAJN,IAKE18C,UAAWF,GAAQutP,oBACnBnrN,MAAO,CAAE+J,OAAQnI,EAAW,UAAY,WACxC2H,QAAS3H,EAAW,SAAC90G,GAAD,OAAOA,EAAE87G,mBAAoB4R,EAAWjR,QAP9D,SASE,eAAChsC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACG15C,EAECgulB,GACE,cAAC7kgB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+DAAlB,SACE,cAAC,KAAD,CAAak6E,MAAM,qBASnCrqB,OAAQqnQ,aAAuB/nQ,IAC/BowC,aAAa,EACbi5O,aAAc,QACdn5O,0BAA0B,EAC1BrI,UAAWwqgB,EACXrigB,eAAgB,kBACd,eAACryC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAASyB,KAAK,SAAnE,UACE,cAAConP,GAAA,EAAD,CAAkB7lU,KAAK,UAAUu/G,MAAO,CAAEkG,YAAa,KACtDz1F,EAAE,gCAGPy2F,cAAe,SAACvsG,GACds4mB,GAAyBt4mB,IAE3Bg1G,iBAAkB,kBAAM,cAACo6O,GAAA,EAAD,CAAkB8gD,WAAYp6X,EAAE,mCAAoCgwkB,cAAesyB,KAAqB2C,GAAsBnsgB,QAAS+vU,EAA+B,WAC5LjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,KACJxliB,MAAO,CACLy2F,YAAa2tf,GACb7zL,UAAW,SAACs0I,GAAmD,IAAD,EACtDggD,EAAuBhgD,EAAmBhrkB,IAAI,MAG9CirnB,EAA2B5lmB,iBAAO,CACtC89a,SAAU6nL,EACVtugB,UAAWsud,EAAmBhrkB,IAAI,OAClC48H,YAAaouc,EAAmBhrkB,IAAI,eACpC6tN,KAAMm9W,EAAmBhrkB,IAAI,QAC7BrI,MAAOqzkB,EAAmBhrkB,IAAI,SAC9B8qnB,wBAAuB,UAAE1zgB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,mCAAxD,QAAuF,OAIhHwuC,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,KAAgE6ynB,SAKrFr5L,GAAW+5I,KAAX/5I,IACE,QACJ5sV,QAAS,kBAvrB9B,SAAC5sG,GAC1B,IAAMy4nB,EAAwBnH,GAAyB1pnB,IAAI5H,GACrD04nB,EAAiCz1nB,sBAAYw1nB,GAAyBA,EAAwBxrmB,iBAAOwrmB,GACrGE,EAA0BD,GAAkCA,EAA+B9wnB,IAAI,YAK/FgxnB,EAAiEpH,GACnEF,GAAyBrhnB,KAAKuhnB,IAC9BF,GAEEwB,EAAqB8F,GAAkEA,EAA+D/rnB,KAAI,SAACw3G,GAC/J,IAAMw0gB,EAAkB51nB,sBAAYohH,GAAUA,EAASp3F,iBAAOo3F,GACxD0mV,EAAW8tL,GAAmBA,EAAgBjxnB,IAAI,YAExD,OAAOmjc,IAAa4tL,EAA0B,KAAO5tL,KACpD37b,QAAO,SAAAsM,GAAC,OAAS,MAALA,KAET0xG,EAAkBkkgB,IAA4B,CAClD,IAAM,CACJ,CACE,SAAY,CACV,IAAOwB,EAAmB1wmB,UAHhC,OAMKuvmB,GACAW,KAIHZ,IACFtkgB,EAAQ9nF,IAAIr1B,KAAK,CACf,UAAa,CACX,IAAO,QAKb4hnB,EAAoBntlB,GAAY8nlB,GAAsBsG,EAAmBlznB,KAAO,EAAIwtH,EAAU,CAC5F,IAAM,GAAN,OAAWukgB,GAAgBW,MAE7BnG,EAAuBK,IA6oBsCsM,CAAmB94nB,KAEpCy9G,iBAAkB,CAChBC,WAAW,QAIhBkqS,GAA6BhnQ,GAC5B,eAAClkE,EAAA,EAAD,CACEe,MAAM,EADR,UAGE,cAAC,QAAD,CACEprE,KAAI,iCAA4BrS,EAA5B,6BACJm9E,UAAWg5O,KACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,4CACT4tF,WAAY,CACV1T,MAAO,cAIXkV,GAAcA,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,6BACpE,eAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAAxE,UACE,cAACugC,EAAA,EAAD,UAAaztF,EAAE,uCACf,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,0BAAqF,QACnH+gH,UAAW/B,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,mBAAoB,QAHvF,SAIE4vB,EAAE,0BAEN,cAAC,QAAD,CACEvd,KAAI,iCAA4BrS,EAA5B,0BACJ+tC,MAAO,CACLyvE,WAAY,CACVz5G,KAAM,OACNi+V,WAAW,GAEbvkP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAMrB,cAAC,GAAD,CACEkzgB,WAAU,iCAA4B7wnB,EAA5B,KACV8wnB,WAAU,iCAA4B9wnB,EAA5B,2BAAoD4mU,GAC9DmqT,qBAAsB7vnB,QAAQ80nB,KAG/BjE,IACC,eAACr1iB,EAAA,EAAD,CACEe,MAAM,EACN0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAFtC,UAIE,cAAC7Z,EAAA,EAAD,UAAaztF,EAAE,kDACf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,cAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,cAAC,QAAD,CACEj4C,UAAWqqP,IACXn1T,KAAI,iCAA4BrS,EAA5B,oBACJ69G,SAAUimP,KACV/1T,MAAO,CACL25R,aAAc1oN,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,WACpEqlW,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,MACVkQ,cAAe,CACbC,eAAgB,SAACU,EAAkB1pO,GAAnB,OAA6B8mf,IAAwB,SAACz8B,GAAD,OAAeA,EAAUpllB,KAAKykW,EAAU,GAAG/rP,cAElHwrP,eAAe,OAIrB,cAAC51O,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAx4B7D,SAAC1oH,GACpBwuC,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,YAAuE,OACtFwuC,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,oBAA+E,OAs4BR+4nB,CAAa/4nB,IAArD,SACE,cAAC8tH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,cAAC,KAAD,cAOToimB,IAAiBpxe,GAChB,eAAClkE,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAAtD,UACE,cAAC7Z,EAAA,EAAD,UAAaztF,EAAE,wDACf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,cAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,cAAC,QAAD,CACEj4C,UAAWqqP,IACXn1T,KAAI,iCAA4BrS,EAA5B,mBACJ69G,SAAUimP,KACV/1T,MAAO,CACL25R,aAAc1oN,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,4BACpEqlW,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,WAKhB,cAACtlO,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBA95B9D,SAAC1oH,GACnBwuC,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,6BAAwF,OACvGwuC,EAASu/B,YAAO6ijB,GAAD,iCAAsD5wnB,EAAtD,mBAA8E,OA45BPg5nB,CAAYh5nB,IAApD,SACE,cAAC8tH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,cAAC,KAAD,cAOTqimB,IAAgBrxe,GACf,eAAClkE,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAAtD,UACE,cAACx6C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGrB,WAAW,SAASa,QAAQ,gBAA/D,SACE,cAACq1iB,GAAA,EAAD,CACEnuX,SAAU+rX,GACVqC,kBAAmB,CAAC,kBAAmB,SAAUjznB,EAAO,mCACxDkznB,mBAAkB,iCAA4BlznB,EAA5B,qCAClByiZ,iBAAkBA,GAClBziZ,MAAOA,MAGX,cAACw6H,GAAA,EAAD,IACA,cAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,WAA3C,SACE,cAAC0nU,GAAA,EAAD,CACE5C,iBAAkBA,GAClBD,oBAAqB,SAACO,GAAD,OAAuBP,GAAoBO,IAChE1lU,WAAW,EACXE,UAAW,MACXI,QAAS,WACTmsB,MAAO,gBACPyT,QAAS,UACT0pO,WAAY,CAAC5hO,YAAa,cAMpC,cAAC3oC,EAAA,EAAD,UACE,cAAC6hD,EAAA,EAAD,CACE7V,QAAS,kBAp1BjB,SAAC1oH,GACnC,IAAM4ykB,EAAqB5zd,EACEv6F,MAAM,CAAC,oBACPvQ,SAAS,CAAC,SAAUlU,IAEjDwuC,EAASu/B,YAAO6ijB,GAA2B,kBAAmBh+C,KAGjB,OAAGqiD,SAAH,IAAGA,QAAH,EAAGA,GAA4BzvmB,MAAK,SAACupb,GAAD,OAAiBA,EAAYnnc,IAAI,QAAUo3G,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,kBAEhL40nB,GAA8B,GAAD,mBAAKD,IAAL,CAAiC31gB,EAAWv6F,MAAM,CAAC,kBAAmB,SAAUzkB,EAAO,gBA00B7Di5nB,CAA4Bj5nB,IAD7C,SAGE,cAAC,KAAD,YA1QDA,OAiRX,OAAIiglB,EAAU/gT,WACLxR,KAASkmC,aAAa71Q,EAAO8giB,IAE7B9giB,IApSC/9C,MA8SpBy1nB,IACE,cAAC,KAAD,CAAW7lW,YAAa,KAAO6lW,GAAmBz1nB,MAAOy1nB,GAAzD,SAEI,SAACyD,EAAWC,GACV,IAAMp7kB,EACJ,eAAC2+B,EAAA,EAAD,qCACEp9E,IAAK45nB,EAAUnoX,UACXmoX,EAAUxoU,gBACVwoU,EAAU1oU,iBAHhB,IAIEnzO,WAAW,EACXP,WAAW,SACXuB,KAAK,SANP,UAQE,cAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAOi0iB,GAAmBn0iB,QAAS,SAA9D,SACE,cAAC,KAAD,CAAY6qB,MAAQ,aAEtB,cAAC4rB,GAAA,EAAD,CACEz4C,UAAWF,GAAQw2iB,aADrB,SAGI2E,WAIR,OAAIiB,EAAUj6V,WACLxR,KAASkmC,aAAa71Q,EAAO8giB,IAE7B9giB,KAMjBstE,EAASwD,sBAQlB4mgB,IACC,eAAC/4iB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,cAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAOi0iB,GAAmBn0iB,QAAS,SAA9D,SACE,cAAC,KAAD,CAAY6qB,MAAO,eAErB,cAAC4rB,GAAA,EAAD,CACEz4C,UAAWF,GAAQw2iB,aADrB,SAGI2E,UAMRhE,GACI,cAACx3iB,EAAA,EAAD,CACEyiC,MAAO,CACLgB,UAAWphC,GAAMZ,UACjB4tC,WAAYqngB,IAHhB,SAME,cAAC/1gB,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,QAFR,SAIGl6E,EAAEskmB,QAGP,UAKV,eAACj6T,GAAA,EAAD,WACE,cAACzxM,GAAA,EAAD,CACEE,QAASmtgB,GACT/rhB,MAAM,UAFR,SAIGl6E,EAAE,wBAEL,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,kBAAM0tgB,GAAiBp3gB,IAFlC,SAIGpvF,EAAE,yBAIP,cAAC,IAAD,CACE4+E,KAAM8lhB,GACN90kB,QACE,eAACk9B,EAAA,EAAD,WACE,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,2CAA4C,CAAEupa,sBAEtD,cAACz8W,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASY,QAAS,EAAGlB,UAAWF,GAAQ8rU,sBAAzE,SAEIc,GAAkC98Y,KAAI,SAAC23H,EAAqBxkI,GAAtB,OACpC,cAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,SACE,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACIinB,KAFKxkI,QAQjB,cAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,+CAITsiW,SAAUtiW,EAAE,uBACZkiW,kBAAmB,WAAQyiQ,IAA6B,GAAQtsO,GAAqC,KACrGl7E,aA/vBa,WACnBwnT,IAA6B,GAC7Bp0T,MA8vBMgyD,aAAa,Y,iDE3yCjB9+P,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D0mX,gBAAiB,CACfz5iB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5Bk7iB,cAAe,CACb36f,OAAO,oBACP/+C,QAASZ,EAAMZ,QAAQ,GACvBmtC,aAAc,EACdlsC,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bm7iB,UAAW,CACTl6iB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bo7iB,aAAc,CACZ7hgB,aAAc34C,EAAMZ,QAAQ,IAE9Bq7iB,kBAAmB,CACjBn0gB,YAAatmC,EAAMZ,QAAQ,IAE7BgpU,oBAAqB,CACnBr9S,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B0wgB,iBAAkB,CAChB95iB,QAAS,cACTmqB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,MAE/B0wgB,cAAe,CACbr0gB,YAAatmC,EAAMZ,WAErBw7iB,aAAc,CACZzrgB,SAAU,QAEZq5R,gBAAiB,CACfz9S,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1By+R,mBAAoB,gBAEtBqB,sBAAuB,CACrBluI,UAAW,QACXywC,UAAW,OACXhsO,OAAQL,EAAMZ,QAAQ,IAAK,IAE7ByoM,eAAgB,CACdzmK,UAAWphC,EAAMZ,QAAQ,MAE3B4qU,uBAAwB,CACtBppU,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B0qC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzCvb,aAAc,GACdnsC,MAAO,cACP4sC,WAAY,OACZ9sC,QAAS,OACT+pU,YAAa,iBAIJ4wO,GAAuB,SAAC1ta,GACnC,OAAOA,EAAYxmN,OAAS,GAAKwmN,EAAY51I,UAAU,EAAG,IAAM,MAAQ41I,GA0zB3DpzI,qBACb4pC,mBAzB0B,WAC1B,IAAM+kS,EAAsCrgW,eACtCyykB,EAAa7ykB,cACb0gW,EAAqCj+V,eACrCk+V,EAAwCh+V,eAC9C,OAAO,SAAyB9e,GAC9B,MAAQ,CACN+8W,0BAA2BH,EAAoC58W,GAC/Dqc,KAAM2ykB,EAAWhvlB,GACjBg9W,yBAA0BH,EAAmC78W,GAC7Di9W,4BAA6BH,EAAsC98W,QAK9C,SAAC2D,GAC1B,MAAO,CACLA,WACA29kB,uBAAwB,SAACn7N,GACvBxiX,EAAS,IAAI47C,KAA6B4mU,SAO9ChuW,YAAgB,gBAFH81B,EAvzB4C,SAAC/qC,GAC1D,IACE64R,EAWE74R,EAXF64R,iBACA5nN,EAUEjxE,EAVFixE,WACAskB,EASEv1F,EATFu1F,OACAw2f,EAQE/rlB,EARF+rlB,iBACAlqmB,EAOEme,EAPFne,EACA4e,EAMET,EANFS,SACA29kB,EAKEp+kB,EALFo+kB,uBACAvkO,EAIE75W,EAJF65W,0BACA1gW,EAGEnZ,EAHFmZ,KACA2gW,EAEE95W,EAFF85W,yBACAC,EACE/5W,EADF+5W,4BAGF,EAAyDx/W,YAAe,GAAxE,mBAAO4gX,EAAP,KAA8BC,EAA9B,KACA,EAA8F7gX,WAAe,IAA7G,mBAAOwrlB,EAAP,KAAgDC,EAAhD,KACA,EAAsDzrlB,YAAe,GAArE,mBAAO8jlB,EAAP,KAA4B2N,EAA5B,KACA,EAA4EzxlB,YAAe,GAA3F,mBAAOsnlB,EAAP,KAAuCoK,EAAvC,KACA,EAA4F1xlB,WAAe,IAA3G,mBAAOunlB,EAAP,KAA+CoK,EAA/C,KACA,EAAkF3xlB,WAAe,IAAjG,mBAAO+jlB,EAAP,KAA0C6N,EAA1C,KACA,EAA0F5xlB,YAAgB,GAA1G,mBAAOgklB,EAAP,KAA8C6N,EAA9C,KACA,EAA2D7xlB,WAAe,CAACkmE,MAAM,EAAO46S,YAAY,IAApG,mBAAOC,GAAP,KAA6BC,GAA7B,KACA,GAAsChhX,WAAe,MAArD,qBAAOihX,GAAP,MAAoBC,GAApB,MACA,GAAoDlhX,WAAe,MAAnE,qBAAOmhX,GAAP,MAA2BC,GAA3B,MACA,GAAkFphX,WAAe,IAAjG,qBAAOqhX,GAAP,MAA0C1B,GAA1C,MAEMlpU,GAAQwjD,eACRxlD,GAAUs2C,KACVutB,GAAY15F,IAAS5pB,WAAS6pB,IAE9BizkB,GAA+Ep7gB,GAAcA,EAAWp3G,IAAI,mBAAoBqP,yBAAiBA,uBAEjJojnB,GAAsB,CAC1B,CAAEz6nB,KAAM,EAAG+kC,MAAO/U,EAAE,oDACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,+CACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,kDACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,sDACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,kDACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,kDACpB,CAAEhwB,KAAM,EAAG+kC,MAAO/U,EAAE,mDAehBo4X,GAA0B,SAAC1jS,EAAmBtkH,EAAespG,GAClD,iBAAXA,EACFggT,GAA2B,CAAC96S,MAAM,EAAM46S,YAAY,KAEpD56W,EAASu/B,YAAOu8iB,GAAD,2BAA0ChmgB,EAA1C,mBAA8DtkH,EAA9D,WAA8E,WAC7FwpZ,GAAe,MACfE,GAAsB,MACtBzB,GAAqC,MAInC4B,GAAmB,SAACvlS,EAAWhb,GACnC,IAAM+a,EAAS+1gB,GAAuBxynB,IAAI08G,IACvBD,GAAUA,EAAOz8G,IAAI,WAAckU,kBAC5CjP,KAAI,SAACtN,EAAOS,GACpBwuC,EAASu/B,YAAOu8iB,GAAD,2BAA0ChmgB,EAA1C,mBAA8DtkH,EAA9D,WAA8EspG,OAE/FkgT,GAAe,MACfvB,GAAqC,KAGjCyC,GAAgC,SAACrmS,EAAQ/a,GAC7C,IAAMgb,EAAYD,EAAOz8G,IAAI,gBACvBs2G,EAAYmG,EAAOz8G,IAAI,WAAakU,iBAC1C0tY,GAAellS,GACf2jS,GAAqC/pS,EAAU1uG,QAAO,SAACutI,EAAKx9I,GAAN,OAAgBw9I,EAAI5tI,OAAO,CAAC5P,EAAMqI,IAAI,mBAAkB,KAC/F,iBAAX0hG,EACFggT,GAA2B,CAAC96S,MAAM,EAAM46S,YAAY,IAEpDS,GAAiBvlS,EAAW,WA0B1BwlS,GAA4BswO,IAEtB,IAFgDA,GAAuBhrnB,QAAQ,SAAAi1G,GACzF,OAAQA,EAAOz8G,IAAI,WAAakU,kBAAQ0J,MAAM,SAAAjmB,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,gBAChEhI,KAEH,OACE,sBAAKu/G,MAAO,CAAEhgC,MAAO,QAArB,UAEIi7iB,IAA2D,IAAhCA,GAAuBx6nB,OAAekqZ,GAC7D,eAACptU,EAAA,EAAD,WACE,eAACA,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SACLpB,UAAWF,GAAQq8iB,gBAHrB,UAKE,cAAC18iB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,GAJN,SAOI47iB,GAAoBxtnB,KAAI,SAAC+pZ,EAAQ52Z,GAAT,OACtB,cAAC08E,EAAA,EAAD,CAEEe,MAAM,EACNgB,GAAIm4U,EAAOh3Z,KAHb,SAKE,cAACy9G,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,cAFR,SAII8sT,EAAOjyX,SARN3kC,QAcb,cAAC08E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,eACRF,MAAM,EACNgB,GAAI,EAJN,SAME,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,YACRzT,MAAM,cAFR,SAIGl6E,EAAE,sDAKPwqmB,GAAuBvtnB,KAAI,SAACytnB,EAAuBC,GAAkC,IAAD,EAC5E1vL,EAAoDyvL,EACpDnL,EAAwBmL,EAAsB71mB,MAAM,CAAC,UAAW3I,kBAChEsvmB,EAAqBkP,EAAsB1ynB,IAAI,gBAC/CujnB,EAAsBmP,EAAsB1ynB,IAAI,QAChDwtN,EAAWkla,EAAsB1ynB,IAAI,YACrCsgZ,EAAYoyO,EAAsB1ynB,IAAI,WACtCuiZ,EAAqBmwO,EAAsB1ynB,IAAI,sBAC/CotnB,EAAuBp0e,GACvBunQ,EAAYmyO,EAAsB1ynB,IAAI,cAAgBotnB,EACtD5sO,EAAWkyO,EAAsB1ynB,IAAI,kCAAoCigZ,EACzEQ,EAAUiyO,EAAsB1ynB,IAAI,0CAA4CkgZ,EAChF0yO,EAAkBF,EAAsB1ynB,IAAI,WAC5C6ynB,EAAe,iBAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAiBhrnB,QAAO,SAACutI,EAAKwye,GACpD,IAAMl9mB,EAAOk9mB,EAAQ3nnB,IAAI,QACzB,OAAOm1I,EAAMA,EAAI5tI,OAAJ,YAAgBkD,IAAU0qI,EAAI5tI,OAAJ,UAAckD,MACpD,WAHkB,QAGX,GAEJqonB,EAAyBD,GAAmBb,GAAqBa,GAEjEv8gB,EAAYo8gB,GAAyBA,EAAsB1ynB,IAAI,UAC/DwiZ,EAAqBlsS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,iBAAxBA,EAAMqI,IAAI,aACzDyiZ,EAAensS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,WAAxBA,EAAMqI,IAAI,aACnD0iZ,EAAgBpsS,EAAU9uG,QAAO,SAAA7P,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,aACpD2iZ,EAA2BH,EAAmBxqZ,OAASs+G,EAAUt+G,KACjE4qZ,EAAqBH,EAAazqZ,OAASs+G,EAAUt+G,KACrD6qZ,EAAsBH,EAAc1qZ,OAASs+G,EAAUt+G,KACvD0oZ,EAAapqS,EAAU9uG,QAAO,SAAC7P,GAAD,MAAmC,WAAxBA,EAAMqI,IAAI,aAAwBqR,SAAW,EAE5F,OAAQwxY,GACN,eAAC/tU,EAAA,EAAD,CAEEO,UAAWF,GAAQs8iB,cAFrB,UAIE,eAAC38iB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXqB,QAAS,EAHX,UAKE,cAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,gBAAkBgD,IAJ/B,mBAOO4gO,GAPP,OAO6BjjO,EAAY,KAAO,QAIlD,cAACxrU,EAAA,EAAD,CACEe,MAAM,EADR,SAII,cAAC+qC,GAAA,EAAD,CACAvrC,UAAWF,GAAQ08iB,iBACnB/wgB,QAAS,SAACz8G,GACR+tnB,GAAkC,GAClCC,EAA0C7O,IAE5CrqgB,SAAUwpS,EANV,SASIiwO,GAA4C,IAAzBA,EAAgB56nB,KACjC,CACE,cAAC,KAAD,CAEEq9E,UAAWF,GAAQ28iB,eADd,GAGP,cAACr8gB,EAAA,EAAD,CAEEvT,MAAOygT,EAA2B,UAAY,UAFhD,SAIGmwO,GAHI,IAMT,CACE,cAAC,KAAD,CAEEz9iB,UAAWF,GAAQ28iB,eADd,GAGP,cAACr8gB,EAAA,EAAD,CAEEvT,MAAOygT,EAA2B,UAAY,UAFhD,SAIG36X,EAAE,kDAHE,QAUnB,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACN0hC,MAAO,CAAC4M,WAAY,QAFtB,SAIE,eAACrvC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,WACRU,KAAK,SAJP,UAME,cAACyvC,EAAA,EAAD,CAASC,MAAOm6R,EAAYt4X,EAAE,2DAA6D,GAA3F,SACE,+BACE,cAAC2uG,EAAA,EAAD,CACE7V,QAAS,SAACz8G,GACRy+Y,GAA8B4vO,EAAuB,iBAEvDv5gB,SAAUmnS,GAAaqC,GAA4BE,EAJrD,SAME,cAAC38R,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SAA+D,cAAC,KAAD,YAIrE,cAAC2uG,EAAA,EAAD,CACE7V,QAAS,SAACz8G,GACRy+Y,GAA8B4vO,EAAuB,WAEvDv5gB,SAAUypS,GAAsBC,EAJlC,SAME,cAAC38R,EAAA,EAAD,CAASC,MAAOn+F,EAAE,yCAAlB,SAA4D,cAAC,KAAD,QAE9D,cAAC2uG,EAAA,EAAD,CACE7V,QAAS,SAACz8G,GACR8nnB,EAA2C3I,GAC3Ce,EAAuBthL,EAAgBjjc,IAAI,gBAC3C4mC,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,EACN+mH,UAAWs1O,OANjB,SAUE,cAAC,KAAD,MAEF,cAACtsU,EAAA,EAAD,CACE7V,QAAS,WACP8gS,GAAe4hO,GACfjiO,GAAwB,IAH5B,SAME,cAAC,KAAD,cAMNvoQ,IAAaupQ,GACX,cAAC9sS,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,GAAQgsU,uBAAnD,SACGn5X,EAAE,yCAIT,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SAFP,SAIE,cAAC3B,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJlB,UAAU,SACVc,KAAK,SALP,SAQI8wiB,GAAyBA,EAAsBtinB,KAAI,SAACk+Y,EAAmB4vO,GAAoC,IAAD,gBAClGC,EAA6B33nB,sBAAY8nZ,GAAqBA,EAAoB99X,iBAAO89X,GACzF8vO,EAAyBD,EAA2BhznB,IAAI,eACxDkznB,EAAoBF,EAA2BhznB,IAAI,UACnDghZ,EAAWgyO,EAA2BhznB,IAAI,UAC1C63T,EAAUm7T,EAA2BhznB,IAAI,2BACzC66T,EAAWm4T,EAA2BhznB,IAAI,mCAC1C2gZ,EAAsBqyO,EAA2Bn2mB,MAAM,CAAC,mBAAoB,QAC5EgqmB,EAAamM,EAA2BhznB,IAAI,WAC5CmznB,EAAyBtM,GAAU,UAAOA,EAAWhqmB,MAAM,CAAC,EAAG,SAA5B,aAAyCgqmB,EAAWhqmB,MAAM,CAAC,EAAG,SAAU,EAAG,kBAAqB,GACnIg1mB,EAAmBG,GAAqBmB,GACxCh+T,EAAW69T,EAA2Bn2mB,MAAM,CAAC,QAAS,UAAWmiT,GAAmBnwT,iBACpF82b,EAAS,CAACxwI,EAASn1T,IAAI,QAASm1T,EAASn1T,IAAI,QAASm1T,EAASn1T,IAAI,SACnE6gZ,EAA8D,WAA7CmyO,EAA2BhznB,IAAI,UAChD8gZ,EAA+D,YAA7CkyO,EAA2BhznB,IAAI,UACjD+gZ,EAAsBT,GAAaI,GAAcG,EAEvD,OAAQC,GACN,eAAChsU,EAAA,EAAD,CAEEW,WAAW,EACXgB,KAAK,SACLV,QAAQ,gBACRb,WAAW,SACXG,UAAWF,GAAQu8iB,UANrB,UASInxO,EACI,eAACzrU,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXW,MAAM,EACNgB,GAAI,EACJxB,UAAWF,GAAQw8iB,aALrB,UAOE,eAAC78iB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAY,SACZuB,KAAK,SAHP,UAKE,cAACyvC,EAAA,EAAD,CACEC,MACE,eAACrxC,EAAA,EAAD,WACE,cAAC2gC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6Cs9gB,KAC3CjyO,GAAY,cAACvrS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,0CAC3D64X,GAAkB,cAACprS,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,QAApC,SAA6C3tF,EAAE,4CALzE,SASE,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAACuf,OAAQ,oBAAC+pR,EAAuE1pU,GAAM+pC,QAAQC,KAAK,KAA5DhqC,GAAM+pC,QAAQC,KAAK,MAAiD1pC,SAAU,GAAI+1C,OAAQ,GAAItU,SAAU,WAAYuE,YAAa,GAAlM,WAEIojS,GACA,qBAAKtpS,MAAO,CAAChgC,MAAO,OAAQi2C,OAAQ,OAAQtU,SAAU,WAAY+jB,OAAQ,GAA1E,SACE,sBAAMk3I,GAAG,OAAOC,GAAG,OAAOC,GAAG,IAAIC,GAAG,IAAI/8J,MAAO,CAACy7J,OAAQ77L,GAAM+pC,QAAQC,KAAK,KAAM+xJ,YAAa,OAGjG8tI,EACG,cAAC,IAAD,CACEv+R,IAAKu+R,GAAY,GACjBl+R,YAAa,OACbC,aAAa,EACb0kP,OAAO,EACPlwP,MAAO,CAAC4R,QAAS03R,EAAiB,EAAI,MAExC,cAAC,KAAD,CAAatpS,MAAO,CAAC6L,SAAU,GAAIlK,SAAU,WAAYqX,KAAM,EAAG/5G,MAAO,EAAG0rF,MAAQ2+S,EAA2C1pU,GAAM+pC,QAAQC,KAAK,KAA7ChqC,GAAM+pC,QAAQC,KAAK,QAE3H6/R,GAAYH,GACX,cAAClqR,EAAA,EAAD,CACEpf,MAAO,CAACx/B,QAAS,EAAGmhC,SAAU,WAAYziG,MAAO,EAAG+5G,OAAQ,GAC5D1P,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,YAAaq2f,EACbp7T,QAASmpF,MAGbp6W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAVtF,SAaE,cAAC,KAAD,CAAYwc,SAAS,QAAQ7L,MAAO,CAACrV,MAAO,QAAS+e,gBAAiB9pC,GAAM+pC,QAAQC,KAAK,eAKjG,eAACrsC,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAST,WAAW,aAAaqiC,MAAO,CAAChgC,MAAO,QAA7F,UACGopU,GAAuBX,GAA6BhnQ,IACnD,cAACp4B,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,MAAU,oBAClB/tC,GAAQ48iB,cAAe,GADL,eAElB58iB,GAAQwqU,iBAAmBkB,GAFT,IAIrB//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,YAAaq2f,EACbv4O,iBAAkBiG,MAGtB/5W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBb,SAmBG74X,EAAE,wCAGJw4X,GAAY3oF,GAAa4oF,IAAmB,OAAR5lF,QAAQ,IAARA,OAAA,EAAAA,EAAU7iU,MAAO,IAAOghJ,IAC7D,cAACp4B,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,YAAaq2f,EACbt4O,eAAgB9iF,EAChBgD,eAGJj0R,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBb,SAmBG74X,EAAE,2CAKX,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,MAAU,oBAClB/tC,GAAQ48iB,cAAe,GADL,eAElB58iB,GAAQwqU,iBAAmBkB,GAFT,IAIrBtpS,MAAO,CAAEgB,UAAW,GAPtB,SASG06gB,SAIP,eAACn+iB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,EACJxB,UAAWF,GAAQw8iB,aANrB,UASInka,EACI,cAAC,KAAD,CAActrH,MAAM,UAAU7sB,UAAW6tC,MAAU,oBAChD/tC,GAAQy8iB,mBAAoB,GADoB,eAEhDz8iB,GAAQoqU,qBAAuBsB,GAFiB,MAInD,cAAC,KAAD,CAAwB3+S,MAAM,UAAU7sB,UAAW6tC,MAAU,oBAC1D/tC,GAAQy8iB,mBAAoB,GAD8B,eAE1Dz8iB,GAAQoqU,qBAAuBsB,GAF2B,MAKnE,eAAC/rU,EAAA,EAAD,CACEW,WAAW,EACXE,UAAW,SACXT,WAAY,aAHd,UAKE,cAACJ,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,MAAU,oBAClB/tC,GAAQ48iB,cAAe,GADL,eAElB58iB,GAAQwqU,iBAAmBkB,GAFT,IAHvB,SAQGoyO,MAGJtyO,GAAuBX,GAA6BhnQ,IACnD,cAACp4B,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,MAAU,oBAClB/tC,GAAQ48iB,cAAe,GADL,eAElB58iB,GAAQwqU,iBAAmBkB,GAFT,IAIrB//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,YAAaq2f,EACbv4O,iBAAkBiG,MAGtB/5W,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBb,SAmBG74X,EAAE,wCAGJw4X,GAAY3oF,GAAa4oF,IAAmB,OAAR5lF,QAAQ,IAARA,OAAA,EAAAA,EAAU7iU,MAAO,IAAOghJ,IAC7D,cAACp4B,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLq9E,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAE9B//R,QAAS,WACPl6E,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIo9W,8BACJn0W,MAAO,CACLy2F,YAAaq2f,EACbt4O,eAAgB9iF,EAChBgD,eAGJj0R,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIo9W,8BAA4B1zS,MAAM,MAEpFuS,UAAW0nS,EAjBb,SAmBG74X,EAAE,2CAMjB,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAJhC,SAOGqyO,MAGL,cAACp+iB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAKIgwiB,GAAkC,IAApBA,EAAW7unB,KACrB,eAAC4oH,GAAA,EAAD,CACEE,QAAS,SAACz8G,GACRuiC,EAASu/B,YAAOg+iB,GAA8B,mBAAoB0C,IAClEsL,GAAuB,GACvBG,EAAqC9O,GACrC+O,EAAyCQ,IAE3C19iB,UAAWF,GAAQ08iB,iBACnB14gB,UAAW0nS,EARb,UAUE,cAAC,KAAD,CAAgBxrU,UAAW6tC,MAAU,oBAClC/tC,GAAQ28iB,eAAgB,GADU,eAElC38iB,GAAQoqU,qBAAuBsB,GAFG,MAIrC,cAACprS,EAAA,EAAD,CACEvT,MAAM,UACN7sB,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAHhC,SAMGgxO,OAGL,eAACjxgB,GAAA,EAAD,CACEvrC,UAAWF,GAAQ08iB,iBACnB/wgB,QAAS,SAACz8G,GACR8tnB,GAAuB,GACvBG,EAAqC9O,GACrC+O,EAAyCQ,IAE3C55gB,UAAW0nS,EAPb,UASE,cAAC,KAAD,CAAexrU,UAAW6tC,MAAU,oBACjC/tC,GAAQ28iB,eAAgB,GADS,eAEjC38iB,GAAQoqU,qBAAuBsB,GAFE,MAIpC,cAACprS,EAAA,EAAD,CACEvT,MAAM,UACN7sB,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAHhC,SAMG74X,EAAE,gEAKf,cAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cAFR,SAIGizN,EAASn1T,IAAI,SACV,cAAC,KAAD,CAAWkiG,MAAM,UAAU7sB,UAAW6tC,KAAW,gBAC9C/tC,GAAQoqU,qBAAuBsB,MAElC,SAIN8kD,EAAO1gc,KAAI,SAACojM,EAAOjwM,GACjB,IAAMwkW,EAAQznC,EAASn1T,IAAI,SACrByqlB,EAAwB,IAAVrylB,EACpB,OACE,cAAC08E,EAAA,EAAD,CAEEe,MAAM,EACNgB,GAAI,EAHN,SAKE,cAAC4+B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACN7sB,UAAW6tC,KAAW,gBACnB/tC,GAAQwqU,iBAAmBkB,IAJhC,SAOGjkD,GAAS6tP,EAAc,KAAOpiZ,KAX5BjwM,MAiBb,cAAC08E,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,EACJd,QAAQ,eAJV,SAMG8qU,EACG,cAAC36R,EAAA,EAAD,CAASC,MAAO46R,EAAsB/4X,EAAE,0DAA4D,GAApG,SACE,+BACE,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACLmhH,SAAU4nS,EACVjgS,QAAS,WACP8gS,GAAe4hO,GACf1hO,GAAsBixO,GACtB1yO,GAAqC,CAAC4yO,IACtC7yO,GAAwBojO,EAAoBuP,EAAwB,iBARxE,SAWG/qmB,EAAE,sCAIT,cAAC44F,GAAA,EAAD,CACE1e,MAAM,UACNlqG,KAAK,QACL8oH,QAAS,WACPs/R,GAAwBojO,EAAoBuP,EAAwB,WAJxE,SAME/qmB,EAAE,mCA7VL+qmB,EAAyBJ,YA3JrCA,MAogBR9tnB,WAAWhG,aAGlB,cAACsjZ,GAAA,EAAD,CACEh8R,MAAOn+F,EAAE,8BACTmqG,SAAUnqG,EAAE,sCACZo6X,WAAYp6X,EAAE,8BACdq6X,WAAY,cAACC,GAAA,EAAD,CAA4B/qU,MAAM,KAAKi2C,OAAO,KAAKtrB,MAAO/qB,GAAM+pC,QAAQ+d,UAAU,KAAM/U,YAAa/yC,GAAM+pC,QAAQ+d,UAAU1gG,OACzIuiF,QAAS,WACPl6E,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,SAKlB,cAAC,GAAD,CACE80B,OAAQA,EACRsjM,iBAAkBA,EAClBktT,wCAAyCA,EACzCC,2CAA4CA,IAE9C,cAAC,GAAD,CACE3H,oBAAqBA,EACrBG,qBAjrBuB,WAC3B2N,EAAqC,IACrCC,GAA0C,GAC1CJ,GAAuB,GACvBvrlB,EAASggC,YAAMu9iB,MA8qBXM,kCAAmCA,EACnCC,sCAAuCA,IAEzC,cAAC0O,GAAD,CACErL,0BA/qB4B,WAChCsK,EAA0C,IAC1CD,GAAkC,IA8qB9BpK,+BAAgCA,EAChCC,uCAAwCA,IAE1C,cAAC,IAAD,CACErhhB,KAAM06S,GAAyBG,GAAqB76S,KACpDhvD,QACE,eAACk9B,EAAA,EAAD,WACIwsU,GACA,cAAC7rS,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,uCADR,YACkDwqmB,GAAuB31mB,MAAM,CAAC8kY,GAAa,SAD7F,OAIAF,GAAqB76S,MACrB,qCACA,cAAC6O,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,4CADR,YACuDwqmB,GAAuB31mB,MAAM,CAAC8kY,GAAa,SADlG,OAGA,cAAC7sU,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASY,QAAS,EAAGlB,UAAWF,GAAQ8rU,sBAAzE,SAEIc,GAAkC98Y,KAAI,SAAC23H,EAAqBxkI,GAAtB,OACpC,cAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,SACE,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACIinB,KAFKxkI,WAUjBkpZ,GACA,cAAC7rS,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,GAAQ6pM,eAAnE,SACGh3P,EAAE,4CAGLy5X,GAAqB76S,MACrB,cAAC6O,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,GAAQ6pM,eAAnE,SACGh3P,EAAE,oDAKXkiW,kBAAmB,WACjBq3B,GAAwB,GACxBG,GAA2B,CAAC96S,MAAM,EAAO46S,YAAY,KAEvDr8E,aAAc,WACRm8E,GA7qBS,SAAC/gZ,GACpB2xnB,EAAiB3xnB,GAEjB,IAAM+unB,EAAsBkD,GAAuBhrnB,QAAO,SAAC+1H,EAAKwlR,GAAN,OAAiBA,IAAWxiZ,KAGtFqmC,EAASu/B,YAAOu8iB,GAAqB,mBAAoB4M,IACzD/tO,GAAwB,GAuqBhByB,CAAarB,IAEXF,GAAqB76S,OA3rB3B66S,GAAqBD,WACvBS,GAAiBN,GAAa,gBAE9B/6W,EAASu/B,YAAOu8iB,GAAD,2BAA0C/gO,GAA1C,mBAAgEE,GAAhE,WAA6F,iBAE9GH,GAA2B,CAAC96S,MAAM,EAAO46S,YAAY,IACrDI,GAAe,MACfE,GAAsB,MACtBzB,GAAqC,MAurBjC91B,aAAa,EACbD,SAAUm3B,GAAqB76S,KAAO5+E,EAAE,gCAAkC,aC90BnEozB,IAjDGiwE,aAAW,SAACl0C,GAAD,MAAY,MAiD1B/7B,YAAgB,eAAhBA,EA9CiE,SAACjV,GAC/E,IACEne,EAKEme,EALFne,EACAkqmB,EAIE/rlB,EAJF+rlB,iBACAlzT,EAGE74R,EAHF64R,iBACA5nN,EAEEjxE,EAFFixE,WACAskB,EACEv1F,EADFu1F,OAGI90F,EAAW2F,wBAQjB,OACE,cAAC,KAAD,CACEq5F,QAAQ,EACRD,OACE,eAAC7wD,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,cAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAM3B,WAAW,SAAxD,SACE,cAAC,KAAD,UACGltD,EAAE,yDAGP,cAAC,KAAD,UACE,cAAC2uG,EAAA,EAAD,CAAY7V,QAnBI,WACxBl6E,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,OAiBA,SACE,cAAC,KAAD,CAASwc,SAAS,cAGtB,cAAC,GAAD,CACE47M,iBAAkBA,EAClB5nN,WAAYA,EACZskB,OAAQA,EACRw2f,iBAAkBA,a,qEFuCjBmB,GAAgB,WAS3B,IATkF,IAAtDC,EAAqD,uDAA3B,GAAIC,EAAuB,uCAC3EzznB,EAAQ,GACV08c,EAAa,EAEXg3K,EAA0BF,GAAmBA,EAAgBt4kB,MAAM,IAKhE++R,EAAW,EAAGA,EAAWy5S,EAAwB11nB,OAAQi8U,IAAY,CAC1E,IAAM05S,EAAiBD,EACpBznnB,MAAqB,IAAfywc,EACHA,EAAa,EAEU,MAAvB82K,EAAgB,GAAa,EAAI,EACnCv5S,GACDr8T,KAAK,IAEFg2mB,EAAiBH,EAAmB12mB,MAAM,CAAC42mB,EAAgB,SA4BjE,GAxBKD,EAAwBhunB,SAAS,OACjB,KAAnBiunB,GACI3znB,EAAMuI,KAAK,CACP9H,IAAKiznB,EAAwB91mB,KAAK,IAClCqf,MAAOy2lB,EAAwB91mB,KAAK,IACpC4sO,MAAM,EACNmnI,UAAU,IAGlB+qF,EAAaziI,GAG2B,MAAtCy5S,EAAwBz5S,KACP,KAAnB05S,GACI3znB,EAAMuI,KAAK,CACP9H,IAAKkznB,EACL12lB,MAAO02lB,EACPnpY,MAAM,EACNmnI,UAAU,IAGlB+qF,EAAaziI,GAG2B,MAAtCy5S,EAAwBz5S,GAAmB,CAM7C25S,GAAiB5znB,EAAMuI,KAAK,CACxB9H,IAAKkznB,EACL12lB,MAAO22lB,EACPppY,MAAM,EACNmnI,UAAU,IAEd+qF,EAAaziI,EAKb,IAAM45S,EAAWH,EAAwBznnB,MAAMguU,EAAW,EAAGy5S,EAAwB11nB,QAErF,IAAK61nB,EAASnunB,SAAS,MAA4B,IAApBmunB,EAAS71nB,OAAc,CACpD,IAAM81nB,EAAaD,EAASj2mB,KAAK,IACjC5d,EAAMuI,KAAK,CACT9H,IAAKqznB,EACL72lB,MAAO62lB,EACPtpY,MAAM,EACNmnI,UAAU,MAMpB,OAAO3xX,GAQI4inB,GAAsB,uB,SA8CvB6I,K,YAAAA,E,gBAAAA,E,uBAAAA,Q,SAONsI,G,4MAEG5wlB,MAAuC,CAC5CmsF,SAAU,KACV+zf,YAAa,GACbnkT,iBAAkB,MAClB67E,iBAAkB,KAClBuJ,UAAU,G,EAGJh1R,c,IAGAk1R,cAAgB5jX,c,EAChB6jX,sBAAwB7jX,c,EACxB8jX,YAAc9jX,c,EACd+jX,WAAa/jX,c,EACbozlB,gBAAkBpzlB,c,EAClBgkX,cAAgBhkX,c,EAkFjBiilB,iBAAmB,SAACx5Y,GACzB,EAAKtqH,SAAS,CACZmgN,iBAAkB71F,K,EAIfovF,S,uCAAW,WAAOnxT,GAAP,yGAAAxF,EAAA,+DAYZ,EAAKukC,MAVP4tlB,EAFc,EAEdA,qBACAC,EAHc,EAGdA,kBACAt4f,EAJc,EAIdA,OACAv/H,EALc,EAKdA,KACA+nG,EANc,EAMdA,OACAp7C,EAPc,EAOdA,cACAm8V,EARc,EAQdA,oBACA3lW,EATc,EASdA,KACA05F,EAVc,EAUdA,UACAi7e,EAXc,EAWdA,YAIA9Q,EACE,EAAKlglB,MADPkglB,YAGF,EAAKtkgB,SAAS,CACZulS,UAAU,IAnBI,SAsBY/qF,YAAI,CAAEn1N,SAAQtK,MAAOxyF,EAAOpH,IAAI,cAtB5C,OAsBV+qX,EAtBU,OAuBVlzD,EAAUh7S,gBAAMkuW,EAAe,CAAC,IAAK,MAAO,KAAO3jX,EAAOpH,IAAI,cAE9Dk0nB,EAAa/Q,GAAeA,EAAYv7mB,QAAO,SAACutI,EAAag/e,EAAuB/7nB,GACxF,IAAMg8nB,EAAmBD,EAAW7pY,KAC9B+pY,EAAUF,EAAW5znB,IACrB+znB,EAAgBF,EAAmBC,EAAH,WAAiBA,EAAjB,KAEtC,OAAOl/e,EAAI5tI,OAAO+snB,KACjB,IAEGl/f,EAAQhuH,EAAOyV,MAAM,CAAC,eAAgB,UACtCqyM,EAAU9nN,EAAOyV,MAAM,CAAC,eAAgB,OAExCw2G,EAAWjsH,EAAOyV,MAAM,CAAC,eAAgB,OACzCggB,EAAez1B,EAAOyV,MAAM,CAAC,eAAgB,UAE7C+/G,EAAcx1H,EAAOpH,IAAI,eACzBqoM,EAAQjhM,EAAOpH,IAAI,SAEnBu0nB,EAAsBlsb,GAASA,EAAMp7L,eAAc,SAAAmoT,GACvDA,EAAOzsT,SAAQ,SAACw8Y,EAAgB/sZ,GAC9B+sZ,EAAex8Y,SAAQ,SAACy8Y,EAAUC,GAChCD,EAASz8Y,SAAQ,SAAC28Y,EAAaC,GAC7B,GAAoB,KAAhBD,EACF,OAAOlwF,EAAOjpT,MAAM,CAAC/T,EAAOitZ,EAAQE,GAAa,kBAOrD96Y,EAAOrD,EAAOpH,IAAI,QAElB0vN,EAAOtoN,EAAOpH,IAAI,SAAW6O,gBAE7B2lnB,EAAiBptnB,EAAOpH,IAAI,cAE5BioC,EAAU7gC,EAAOpH,IAAI,oBAErBy0nB,EA9DU,UA8DiBp5nB,sBAAYm5nB,GAAkBA,EAAiBnvmB,iBAAOmvmB,UA9DvE,aA8DgB,EAAyEhtnB,QAAO,SAAA07Y,GAAI,MAA2B,YAAvBA,EAAKljZ,IAAI,aAC3H00nB,IAAqBr5nB,sBAAY4sC,GAAWA,EAAU5iB,iBAAO4iB,KAAap5B,iBAAOrH,QAAO,SAAAi1G,GAAM,MAA6B,YAAzBA,EAAOz8G,IAAI,aAE7G20nB,EAAuBF,EACzBA,EAAwB/nnB,MAAMgonB,GAC9BA,EAEEE,EAAkCD,GAAwBA,EAAqB/snB,QAAO,SAACutI,EAAK0/e,GAEhG,IAAMC,EAAiBD,EACpBlxnB,IAAI,KAAMkxnB,EAAW70nB,IAAI,OAAS60nB,EAAW70nB,IAAI,gBACjDykH,OAAO,eACP9gH,IAAI,MAAOkxnB,EAAW70nB,IAAI,QAAU60nB,EAAW70nB,IAAI,iBACnDykH,OAAO,gBAIJswgB,EAFmBF,EAAW70nB,IAAI,SAAUkU,kBAENtM,QAAO,SAACiiR,EAAMptK,GACxD,IAAMw0gB,EAAkB51nB,sBAAYohH,GAAUA,EAASp3F,iBAAOo3F,GACxDv/E,EAAK+zlB,EAAgBjxnB,IAAI,OAASixnB,EAAgBjxnB,IAAI,YACtDO,EAAM0wnB,EAAgBjxnB,IAAI,QAAUixnB,EAAgBjxnB,IAAI,aACxDg1nB,EAAmB/D,EACtBttnB,IAAI,KAAMu5B,GACVunF,OAAO,YACP9gH,IAAI,MAAOpD,GACXkkH,OAAO,aAEV,OAAOolK,EAAKxhR,KAAK2snB,KAEhB9gnB,kBAEG+gnB,EAAiBH,EAAenxnB,IAAI,SAAUoxnB,GAC9CG,EAAoBD,EAAej1nB,IAAI,OAE7C,OAAOm1I,EAAIxxI,IAAIuxnB,EAAmBD,KACjCpmnB,iBAGCsmnB,EAAmBjhnB,iBAEnB/X,IAASovnB,GAAwB6J,SAC7BC,EAAiBT,GAAmCA,EAAgCptnB,QAAO,SAAC07Y,GAAD,OAAWA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAC1Is1nB,EAAuB55f,EAAO17H,IAAI,cAAcwH,QAAO,SAAC07Y,GAAD,OAAWA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAC5Gm1nB,EAAmBE,EAAeztnB,QAAO,SAACutI,EAAK14B,EAAQC,GACrD,IAAMkwgB,EAAkBnwgB,EAAOz8G,IAAI,UAC7Bu1nB,EAA4BD,EAAqBz4mB,MAAM,CAAC6/F,EAAW,WACnE84gB,EAAe5I,EAAgBhlnB,QAAO,SAACiiR,EAAK4rW,GAChD,IAAMC,EAAgB,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAA2B33mB,MAAK,SAAC+3mB,GAAD,OAAwBA,EAAmB31nB,IAAI,6BAA+By1nB,EAAez1nB,IAAI,4BAA8B21nB,EAAmB31nB,IAAI,QAAUy1nB,EAAez1nB,IAAI,SAC5O,IAAoB,OAAhB01nB,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB19nB,MAAO,EAAG,CAC9B,IAAM49nB,EAAkBvwmB,iBAAO,CAC7Bi+L,YAAY,GAAD,OAAK5mG,EAAL,YAAkB+4gB,EAAez1nB,IAAI,OAChD2zL,QAAQ,GAAD,OAAKj3E,EAAL,YAAkBg5gB,EAAiB11nB,IAAI,SAEhD,OAAO6pR,EAAKxhR,KAAKutnB,GAEjB,OAAO/rW,IAER31Q,kBACH,OAAOshnB,EAAax9nB,KAAO,EAAIm9I,EAAI9sI,KAAKmtnB,GAAgBrgf,IACvDjhI,kBAAQvM,QAAQ,IAIfkunB,EAAkBn6f,EAAO7+G,MAAM,CAAC,eAAgB,UAAW,oBAC3Di5mB,EAAyBX,EAAiBn9nB,KAAO,GAAK69nB,EAAgB79nB,KAAO,EAC/E69nB,EAAgB5wnB,KAAI,SAACs3I,GACnB,IAAMorF,EAAgBprF,EAAMv8I,IAAI,UAAUiF,KAAI,SAAC8wnB,GAC7C,IAAMzya,EAAc6xa,EAAiBv3mB,MAAK,SAACo4mB,GAAD,OAAuBA,EAAkBh2nB,IAAI,aAAe+1nB,KACtG,OAAOzya,EAAcA,EAAYtjN,IAAI,eAAiB+1nB,KAExD,OAAOx5e,EAAM54I,IAAI,SAAUgkO,MAE7BkuZ,EAIEI,EAAcv6f,EAAO7+G,MAAM,CAAC,eAAgB,UAAW,gBACvDq5mB,EAAqBf,EAAiBn9nB,KAAO,GAAKi+nB,EAAYj+nB,KAAO,EACvEi+nB,EAAYhxnB,KAAI,SAACs3I,GACf,IAAMorF,EAAgBprF,EAAMv8I,IAAI,UAAUiF,KAAI,SAACkxnB,GAC7C,IAAM7ya,EAAc6xa,EAAiBv3mB,MAAK,SAACo4mB,GAAD,OAAuBA,EAAkBh2nB,IAAI,aAAem2nB,KACtG,OAAO7ya,EAAcA,EAAYtjN,IAAI,eAAiBm2nB,KAExD,OAAO55e,EAAM54I,IAAI,SAAUgkO,MAE7BsuZ,EAEEzwO,EAAqBp+Y,EAAOpH,IAAI,kBAEhCylZ,EAAWr+Y,EAAOyV,MAAM,CAAC,YAAa,OAAQ,QAC9C6oY,EAAYt+Y,EAAOyV,MAAM,CAAC,YAAa,QAAS,QAMhDu5mB,EAAavnnB,gBAAmB5B,eAAc,SAACywQ,GAAS,IAAD,MAC3DA,EACG/5Q,IAAI,QAASyxH,GACbzxH,IAAI,UAAWurN,GACfvrN,IAAI,WAAY0vH,GAChB1vH,IAAI,eAAgBk5B,GACpBl5B,IAAI,cAAei5H,GACnBj5H,IAAI,QAAS4wnB,GACb5wnB,IAAI,OAAQ8G,GACZ9G,IAAI,kBAAkB,GACtBA,IAAI,aAAcixnB,GAClBjxnB,IAAI,OAAQuwnB,GAGX/3nB,IAASovnB,GAAwB6J,QACnC13W,EACGvxQ,MAAM,CAAC,eAAgB,UAAW,mBAAoB2pnB,GACtD3pnB,MAAM,CAAC,eAAgB,UAAW,eAAgB+pnB,GAGnD/5nB,IAASovnB,GAAwB6J,QAAUnB,EAC7Cv2W,EAAI/5Q,IAAI,OAAQ+3H,EAAO17H,IAAI,SAAW6O,iBAEtC6uQ,EAAI/5Q,IAAI,OAAQ+rN,GAGd12E,IACE6+K,EACFn6C,EAAIvxQ,MAAM,CAAC,OAAO,SAAU,OAAQ,UAAW0rT,GAE/Cn6C,EAAIpxQ,SAAS,CAAC,OAAQ,aAK1B,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,cAAhC,aAAI,EAAoC2B,YACtCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,QAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,QAAS,cAAhC,aAAI,EAAoC2B,YACtCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,QAAS,QAEjC,UAAIoxQ,EAAI7gQ,MAAM,CAAC,OAAQ,iBAAvB,aAAI,EAA8B2B,YAChCk/P,EAAIpxQ,SAAS,CAAC,OAAQ,WAGpB,OAACk5Y,QAAD,IAACA,OAAD,EAACA,EAAoBxlZ,IAAI,YAO3B09Q,EAAI/5Q,IAAI,iBAAkB6hZ,GANtByuO,EACFv2W,EAAI/5Q,IAAI,iBAAkB0hB,iBAAO,CAAEkpV,QAAS,CAAC,CAAErxU,GAAI9B,iBAAekB,OAAQ3kC,MAAO,IAAM,CAAEulC,GAAI9B,iBAAemB,IAAK5kC,MAAO,QAExH+lR,EAAIvxQ,MAAM,CAAC,iBAAkB,WAAY+H,kBAM7C,IAAM0xY,GAAuB,OAARH,QAAQ,IAARA,OAAA,EAAAA,EAAUzlZ,IAAI,aAAcpC,OAAO6nZ,EAASzlZ,IAAI,aAAe,KAC9E6lZ,GAAoB,OAARJ,QAAQ,IAARA,OAAA,EAAAA,EAAUzlZ,IAAI,UAAWpC,OAAO6nZ,EAASzlZ,IAAI,UAAU9C,WAAa,KAChF4oZ,GAAyB,OAATJ,QAAS,IAATA,OAAA,EAAAA,EAAW1lZ,IAAI,aAAcpC,OAAO8nZ,EAAU1lZ,IAAI,aAAe,KACjF+lZ,GAAsB,OAATL,QAAS,IAATA,OAAA,EAAAA,EAAW1lZ,IAAI,UAAWpC,OAAO8nZ,EAAU1lZ,IAAI,UAAU9C,WAAa,KAEzF,GAAK0oZ,GAAiBC,GAAcC,GAAkBC,EAE/C,CACL,GAAIH,GAAgBC,EAAW,CAC7B,IAAMG,EAAO,CACX59M,SAAUw9M,EACVv9M,MAAOw9M,GAETnoI,EAAIvxQ,MAAM,CAAC,YAAa,QAASkZ,iBAAO,CACtC4V,IAAK+qX,EACL9qX,IAAK8qX,KAGT,GAAIF,GAAiBC,EAAY,CAC/B,IAAME,EAAQ,CACZ79M,SAAU09M,EACVz9M,MAAO09M,GAETroI,EAAIvxQ,MAAM,CAAC,YAAa,SAAUkZ,iBAAO,CACvC4V,IAAKgrX,EACL/qX,IAAK+qX,WAnBTvoI,EAAI/5Q,IAAI,YAAakL,oBA2BnBwnnB,EAAsB36f,EAAO17H,IAAI,MAGjCkmZ,EAA6BrC,aAAoEoB,EAAqB2vO,GAGtHzuO,EAAiBD,EAA2B1rY,OAE5C4rY,EAAY,WAChB,EAAKvnS,SAAS,CACZulS,UAAU,KAId,IACMjoZ,IAASovnB,GAAwBtyI,KAwCnC86I,EAAqBqC,EAAYC,EAAqB/2kB,EAAM6mW,GAvC1C,SAACt2Y,GACjB6yF,KAAmB9rE,kBAAgByvX,mBAAoBv9V,EAAc,CACnEktE,WAAYnmH,EAAO7P,IAAI,QACvBwzH,SAAU3jH,EAAO7P,IAAI,MACrBu/W,iBAAkB1vW,EAAO7P,IAAI,SAC7B68B,aAAchtB,EAAO7P,IAAI,gBACzBsmZ,gBAAiBz2Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACvHuuZ,WAAY,UACZC,4BAA6B32Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,WAAvBkjZ,EAAKljZ,IAAI,aAAwBhI,KAClIyuZ,kCAAmC52Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,iBAAvBkjZ,EAAKljZ,IAAI,aAA8BhI,KAC9I0uZ,6BAA8B72Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACpI2uZ,uCAAwC1D,aAAwCpzY,EAAO7P,IAAI,cAAe,UAC1G4mZ,6CAA8C3D,aAAwCpzY,EAAO7P,IAAI,cAAe,gBAChH6mZ,wCAAyC5D,aAAwCpzY,EAAO7P,IAAI,cAAe,WAC3G8mZ,6BAA8Bj3Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAIA,EAAKljZ,IAAI,gBAAyC,WAAvBkjZ,EAAKljZ,IAAI,aAAwBhI,KAClI+uZ,8BAA+Bl3Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAIA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACpIgvZ,oBAAqBtrR,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,eAAiBhN,EAAOgN,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAehN,EAAOgN,MAAM,CAAC,OAAQ,SAAU,OAAQ,aAAe,KAC5LoqY,mBAAoBvrR,EAAO17H,IAAI,UAAY6P,EAAO7P,IAAI,QAAU6P,EAAO7P,IAAI,QAAU,KACrFknZ,0BAA2BxrR,EAAO17H,IAAI,iBAAmB6P,EAAO7P,IAAI,eAAiB6P,EAAO7P,IAAI,eAAiB,KACjHmnZ,yBAA0BzrR,EAAO17H,IAAI,WAAa6P,EAAO7P,IAAI,SAAW6P,EAAO7P,IAAI,SAAW,KAC9FonZ,qBAAsB1rR,EAAO17H,IAAI,kBAAoB6P,EAAO7P,IAAI,gBAAkB6P,EAAO7P,IAAI,gBAAkB,KAC/GqnZ,kBAAmBC,aAAmB5rR,EAAQ7rH,EAAQ,QACtD03Y,kBAAmBD,aAAmB5rR,EAAQ7rH,EAAQ,QACtD23Y,kBAAmBF,aAAmB5rR,EAAQ7rH,EAAQ,QACtD43Y,sBAAuBC,aAAuBhsR,EAAQ7rH,EAAQ,OAAQ,YACtE83Y,mBAAoBD,aAAuBhsR,EAAQ7rH,EAAQ,OAAQ,SACnE+3Y,uBAAwBF,aAAuBhsR,EAAQ7rH,EAAQ,QAAS,YACxEg4Y,oBAAqBH,aAAuBhsR,EAAQ7rH,EAAQ,QAAS,SACrEi4Y,uBAAwBC,aAA4BrsR,EAAQ7rH,GAC5Dm4Y,iCAAkC5E,aAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,SAAU,UAC5HioZ,oCAAqC7E,aAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,eAAgB,UACrIkoZ,+BAAgC9E,aAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UAAW,UAC3HmoZ,4CAA6CzE,aAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UACxIooZ,+CAAgD1E,aAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,gBAC3IqoZ,0CAA2C3E,aAAuChoR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,WACtIsoZ,kCAAmClF,aAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,SAAU,WAC7HuoZ,gCAAiCnF,aAA4B1nR,EAAO17H,IAAI,cAAe6P,EAAO7P,IAAI,cAAe,UAAW,gBAGzComZ,GAYvF4tO,EAAkBoC,EAAY92kB,EAAM6mW,GAVlB,SAACt2Y,GACjB6yF,KAAmB9rE,kBAAgB8xX,mBAAoB5/V,EAAc,CACnEktE,WAAYnmH,EAAO7P,IAAI,QACvBwzH,SAAU3jH,EAAO7P,IAAI,MACrBu/W,iBAAkB1vW,EAAO7P,IAAI,SAC7B68B,aAAchtB,EAAO7P,IAAI,gBACzBsmZ,gBAAiBz2Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACvHuuZ,WAAY12Y,EAAO7P,IAAI,kBAAoB,UAAY,aAGIomZ,GAEjE,MAAOh8Y,GACPg8Y,IA5Tc,4C,wDAgUXxB,wBAA0B,WAC/B,MAA0E,EAAKz+W,MAAvEgvC,EAAR,EAAQA,QAASmhjB,EAAjB,EAAiBA,oBAAqBn6nB,EAAtC,EAAsCA,KAAMyqC,EAA5C,EAA4CA,SAAU5e,EAAtD,EAAsDA,EAAG0zG,EAAzD,EAAyDA,OAAQp8E,EAAjE,EAAiEA,KACzD8kW,EAAa,EAAKnhX,MAAlBmhX,SAEFmyO,EAAcD,GAAuBn6nB,IAASovnB,GAAwBtyI,MAAQ35b,IAAS5pB,WAAS8vB,GAEtG,MAAO,CACL,cAAC,IAAD,CAAqC6vB,UAAWF,EAAQ0vU,QAApC,mBAClBt9Y,OAAO,CACT,cAAC,IAAD,CAEEouG,QAAQ,OACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK+rH,SAAW/rH,GAElB,gBAAc,OACdy9G,QAAS,WACP,IAAM0S,EAAWkI,EAAO17H,IAAI,MACxBs/C,IAAS5pB,WAAS8vB,GAEhB5e,EADJ4sF,EACanrH,YAAK,GAAD,OAAI4qB,yBAAJ,YAA8BugG,IAClCnrH,YAAK4oB,gBAAe,CAAEulmB,gBAAiBC,IAAoCC,WAGpF9vlB,EADJ4sF,EACanrH,YAAK,GAAD,OAAI8qB,wBAAJ,YAA6BqgG,IACjCnrH,YAAK6qB,yBAGtBmiD,UAAWF,EAAQ2vU,gBApBrB,SAsBG98X,EAAE,uBArBC,kBAuBN,cAAC2umB,GAAA,EAAD,CAA+BxwgB,MAAOowgB,EAAcvumB,EAAE,wCAA0C,GAAhG,SACE,8BACE,cAAC,IAAD,CACA2tF,QAAQ,YACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK+rH,SAAW/rH,GAElB,gBAAc,OACdgyE,UAAWF,EAAQ2vU,gBACnB3rS,SAAUo9gB,GAAenyO,EACzBjoZ,KAAK,SATL,SAWC6rB,EAAE,yBAbS,mB,EAoBb2gY,iBAAmB,wBACxB,cAACC,EAAA,EAAD,CACEC,QAAS,EAAKvE,cADhB,SAGE,cAAC,KAAD,CACE1+Q,QAAQ,EACRD,OACE,eAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAM3B,WAAW,SAAxD,SACE,cAAC,KAAD,UACG,EAAK/uC,MAAMne,EAAE,mCAGlB,cAAC,GAAD,CACEwrG,SAAQ,UAAE,EAAKrtF,MAAMu1F,cAAb,aAAE,EAAmB17H,IAAI,MACjCg/T,iBAAkB,EAAK/7R,MAAM+7R,iBAC7B2jT,iBAAkB,EAAKA,2B,EAQ5BiU,+BAAiC,kBACtC,cAAChuO,EAAA,EAAD,CACEC,QAAS,EAAKtE,sBADhB,SAGE,cAACmF,GAAA,EAAD,CACEzsJ,SAAUylX,GACVn8N,WAAYoD,KAAWktO,c,EAKtBC,qBAAuB,kBAC5B,cAACluO,EAAA,EAAD,CACEC,QAAS,EAAKrE,YADhB,SAGE,cAACqF,GAAA,EAAD,CACE5sJ,SAAUylX,Q,EAKTqU,oBAAsB,kBAC3B,cAACnuO,EAAA,EAAD,CACEC,QAAS,EAAKpE,WADhB,SAGE,cAAC,GAAD,CACEzlF,iBAAkB,EAAK/7R,MAAM+7R,iBAC7B5nN,WAAY,EAAKjxE,MAAMixE,WACvBskB,OAAQ,EAAKv1F,MAAMu1F,OACnBw2f,iBAAkB,EAAKA,sB,EAKtBA,iBAAmB,SAAC3xnB,GACzB,IAAQ4inB,EAAgB,EAAKlglB,MAArBkglB,YAEFqC,EAAgBrC,EAAYlhmB,WAAU,SAAAkymB,GAAU,OAAIA,EAAW5znB,MAAQA,KAE7E,GAAIilnB,GAAiB,EAAG,CACtB,IAAM5B,EAAe,YAAOT,GAC5BS,EAAgBv4mB,OAAOm6mB,EAAe,GAEtC,EAAKpC,eAAeQ,K,EAIjBR,eAAiB,SAACU,GAAD,OAAiC,EAAKjlgB,SAAS,CAAEskgB,YAAaW,K,EAE/EkT,sBAAwB,WAC7B,MAMI,EAAK7wlB,MALPne,EADF,EACEA,EACAs3B,EAFF,EAEEA,KACA61B,EAHF,EAGEA,QACAgC,EAJF,EAIEA,MACAigC,EALF,EAKEA,WAGA+rgB,EACE,EAAKlglB,MADPkglB,YAGF,OACE,cAACv6N,EAAA,EAAD,CACEC,QAAS,EAAKirO,gBADhB,SAGE,cAAC,KAAD,CACEluf,QAAQ,EACRD,OACE,eAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,cAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAM3B,WAAW,SAASG,UAAWF,EAAQupS,aAApF,SACE,cAAC,KAAD,UACIp/T,IAAS5pB,WAAS6pB,IAAMv3B,EAAE,2CAA6C,2BAG7E,cAAC,GAAD,CACEk7lB,KAAM5jkB,IAAS5pB,WAAS8vB,GACxB2xB,MAAOA,EACPigC,WAAYA,EACZ+rgB,YAAaA,EACbC,eAAgB,EAAKA,yB,EAS5Bp6N,iBAAmB,WACxB,MAGI,EAAK7iX,MAFPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QAEM0lU,EAAqB,EAAK53W,MAA1B43W,iBAER,OACE,cAAC+N,EAAA,EAAD,CACEC,QAAS,EAAKnE,cADhB,SAGE,cAAC,KAAD,CACE9+Q,QAAQ,EACRD,OACE,eAAC7wD,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,IAAI,EAAMd,QAAQ,gBAAgBb,WAAW,SAASG,UAAWF,EAAQupS,aAA5G,UACE,cAAC,KAAD,UACG12V,EAAE,iCAEL,cAACy1X,GAAA,EAAD,CACE5C,iBAAkBA,EAClBD,oBAAqB,SAACO,GAAD,OAAuB,EAAKt8R,SAAS,CAAEg8R,iBAAkBM,UAGlF,cAAC8N,EAAA,EAAD,CACEhsJ,SAAUylX,GACV7nO,iBAAkBA,Y,uDArlBhC,WACE,MAKI5+Y,KAAKkqC,MAJP+3R,EADF,EACEA,iBACAi/B,EAFF,EAEEA,yBACAvjN,EAHF,EAGEA,aACAvyF,EAJF,EAIEA,OAGF62Q,KACsB,IAAlBtkL,KAAyBvyF,GAAWA,GAAUA,EAAOrnD,IAAI,QAAU45I,GACrEujN,EAAyBvjN,GAErBvyF,GAA0D,UAAhDA,EAAOxqC,MAAM,CAAC,WAAY,UAAW,QACjD5gB,KAAK4iH,SAAS,CAAEmgN,iBAAkB,U,gCAKxC,SAA0B1kN,GACxB,MASIr+G,KAAKkqC,MARP83R,EADF,EACEA,cAEAk/B,EAHF,EAGEA,yBACAJ,EAJF,EAIEA,gBACAnjN,EALF,EAKEA,aACAvyF,EANF,EAMEA,OACA+vD,EAPF,EAOEA,WACAskB,EARF,EAQEA,OAGI2gB,EAAiBjlC,GAAcA,EAAWv6F,MAAM,CAAC,eAAgB,OACjEo6mB,EAAqB38gB,EAAUlD,YAAckD,EAAUlD,WAAWv6F,MAAM,CAAC,eAAgB,OAkB/F,GAhBKkgV,IAAqC,IAAlBnjN,GAAyBvyF,KAAWA,GAAUA,EAAOrnD,IAAI,QAAU45I,IACzFujN,EAAyBvjN,GAGvBvyF,IAAWizD,EAAUjzD,QAC6B,UAAhDA,EAAOxqC,MAAM,CAAC,WAAY,UAAW,QACvC5gB,KAAK4iH,SAAS,CAAEmgN,iBAAkB,QAIlC3iL,IAAmB46e,GAGrBh5T,IAGEviM,IAAWphB,EAAUohB,OAAQ,CAC/B,IAAM63f,EAAqB73f,EAAO17H,IAAI,cAChCu1Q,EAAO75I,EAAO17H,IAAI,QAExB,GAAoB,IAAhB07H,EAAO1jI,KACT,OAGFiE,KAAK4iH,SAAS,CACZskgB,YAAakQ,GAAc99W,EAAMg+W,Q,kCAKvC,WACE,MAGIt3nB,KAAKkqC,MAFP+wlB,EADF,EACEA,YACAtwlB,EAFF,EAEEA,SAGFswlB,GAAa,GACbtwlB,EAAS,IAAI8jD,KAAoB,mBACjC9jD,EAAS,IAAI8jD,KAAoB,sBACjC9jD,EAAS,IAAI8jD,KAAoB,uBACjC9jD,EAAS,IAAI8jD,KAAoB,mCACjC9jD,EAAU,IAAI4K,KACd5K,EAAS,IAAI49C,KAAyC31E,oB,oBAmhBxD,WACE,MAUI5S,KAAKkqC,MATPne,EADF,EACEA,EACAs2S,EAFF,EAEEA,aACAnpP,EAHF,EAGEA,QACAg0U,EAJF,EAIEA,WAJF,IAKE/xS,kBALF,MAKevoG,gBALf,EAMEu6Y,EANF,EAMEA,YAEAC,GARF,EAOE3tR,OAPF,EAQE2tR,wBACArwQ,EATF,EASEA,UAGIm+e,EAAU,CACd9rO,WAAYpvZ,KAAKqoZ,cACjB8yO,uBAAwBn7nB,KAAKsoZ,sBAC7B8yO,SAAUp7nB,KAAKuoZ,YACfv8W,QAAShsC,KAAKwoZ,WACdhxL,aAAcx3N,KAAK63nB,gBACnBwD,WAAYr7nB,KAAKyoZ,eAEb6yO,EAAU,CACd,CACEx6lB,MAAO/U,EAAE,+BACTtwB,IAAKy/nB,EAAQ9rO,aAHD,mBAMZryQ,EACI,CAAC,CACCj8G,MAAO,sBACPrlC,IAAKy/nB,EAAQC,yBAEf,IAXQ,CAad,CACEr6lB,MAAO/U,EAAE,wCACTtwB,IAAKy/nB,EAAQE,UAEf,CACEt6lB,MAAO/U,EAAE,qDACTtwB,IAAKy/nB,EAAQlvlB,SAEf,CACElL,MAAO/U,EAAE,sDACTtwB,IAAKy/nB,EAAQ1ja,eAvBD,YA0BZz6E,EACI,CAAC,CACCj8G,MAAO/U,EAAE,0CACTtwB,IAAKy/nB,EAAQG,aAEf,KAIFp+e,EAAeF,IAAcnqI,MAAI9N,MAAMq2G,EAAWp3G,IAAI,iBAAmBo3G,EAAWp3G,IAAI,gBAAgBwa,OAAS48F,EAAWp3G,IAAI,iBAChIqzH,EAAW2lB,IAAcnqI,MAAI9N,MAAMq2G,EAAWp3G,IAAI,iBAAmBo3G,EAAWp3G,IAAI,gBAAgBwa,OAAS48F,EAAWp3G,IAAI,iBAE5HspZ,EAAepwQ,GAAgB7lB,GAAY,CAC/C6lB,aAAc,CACZh8G,GAAE,OAAEg8G,QAAF,IAAEA,OAAF,EAAEA,EAAch8G,GAClBzyB,KAAI,OAAEyuI,QAAF,IAAEA,OAAF,EAAEA,EAAcvhJ,OAEtB07H,SAAU,CACRn2F,GAAE,OAAEm2F,QAAF,IAAEA,OAAF,EAAEA,EAAUn2F,GACdzyB,KAAI,OAAE4oH,QAAF,IAAEA,OAAF,EAAEA,EAAU17H,OAElBwhH,UAAU,GAGZ,OAAIkwS,EACK,mCACL,cAAC,IAAD,CACEniB,SAAU,cAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,cAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,EAChBM,QAAS,cAAC,KAAD,QAMb,eAACnyT,EAAA,EAAD,CAAMO,UAAWF,EAAQ3hE,KAAzB,UACE,sBACE+kT,SAAU+F,EAAariU,KAAKs8T,UAD9B,SAGE,cAAC,IAAD,CACE4wF,WAAYA,EACZpT,OAAQwhP,EACRhuO,qBAAsBttZ,KAAK2oZ,0BAH7B,SAKE,sBAAKvvU,UAAWF,EAAQM,UAAxB,UACE,mBAAMkzU,iBAAN,IAEE3vQ,GAAa,mBAAM49e,+BAAN,IAEf,mBAAME,qBAAN,IAEA,mBAAMC,oBAAN,IAEA,mBAAMC,sBAAN,IAEEh+e,GAAa,mBAAMgwQ,iBAAN,WAIrB,cAACc,GAAA,EAAD,CACE7sJ,SAAUylX,GACV34N,SAAU,eACV/wQ,UAAWA,IAGXA,GACE,qCACE,cAACixQ,GAAA,EAAD,CAAiBX,aAAcA,EAAcY,aAAa,IAC1D,cAACC,GAAA,EAAD,CAAmBf,YAAaA,EAAaE,aAAcA,EAAcY,aAAa,OAI5F,cAACE,GAAA,EAAD,W,GA1uB8B1pX,aAq8BvBwwC,kBACbgG,aAtNa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,GACvB0qC,gBAAiB,oBAEnB6jS,gBAAiB,CACfrtU,SAAU,IACVo4C,UAAW,OACXr4C,OAAQL,EAAMZ,QAAQ,EAAG,IAE3BsuU,OAAQ,CACNvsU,SAAU,GAEZk/iB,oBAAqB,CACnBhgjB,OAAQL,EAAMZ,QAAQ,IAExBmmR,oBAAqB,CACnBptO,aAAcn4C,EAAMZ,UACpBi3C,OAAQr2C,EAAMZ,QAAQ,KAExBmoS,aAAc,CACZpvP,aAAcn4C,EAAMZ,cAiMH,CAAE00C,WAAW,IAChCi3f,EAAyB,CAACC,wBAAwB,EAAMvf,sBAAsB,IAC9ExnjB,YAAgB,gBAChBgwE,IACAxF,cACA9K,mBA7FsB,SAACu7Q,EAAoBC,GAC3C,IAAMmhQ,EAAgBnhQ,EAAiB5wU,SAASziB,MAC1Cy0lB,EAAgBD,GAAkBA,EAAsBC,cAAiBphQ,EAAiB56P,OAC1F46f,EAAsBoB,GAAgD,OAA/BA,EAAa13nB,IAAI,UAExDu6G,EAAgB+7Q,EAAiBn6X,OAASovnB,GAAwB6J,OAASvmnB,gBAxGpD,SAAC6onB,GAAkB,IAAD,EACzCjtnB,EAAOitnB,EAAa13nB,IAAI,QACxB48H,EAAc86f,EAAa13nB,IAAI,eAE/Bo1H,EAAQsigB,EAAa13nB,IAAI,SACzBkvN,EAAUwoa,EAAa13nB,IAAI,WAG3BqzH,EAAWqkgB,EAAa13nB,IAAI,YAC5B68B,EAAe66lB,EAAa13nB,IAAI,gBAEhCu1Q,EAAOmiX,EAAa13nB,IAAI,QAExB23nB,EAA0BD,EAAa13nB,IAAI,cAE3CqoM,EAAQqvb,EAAa13nB,IAAI,SAEzB0qZ,EAAwBriN,GAASA,EAAMzgM,QAAO,SAACutI,EAAKw1Q,EAAaC,GACrE,IAAMC,EAA4BF,EAAY/iZ,QAAO,SAACiiR,EAAM1gD,EAAU2hL,GACpE,IAAMC,EAAoBzxZ,QAAQ6vO,EAASnpO,IAAI,UACzCgrZ,EAAmB7hL,EAASxlO,IAAI,QAASonZ,GAC/C,OAAOlhI,EAAKlmR,IAAImnZ,EAAaE,KAC5Bn8Y,iBACH,OAAOsmI,EAAIxxI,IAAIinZ,EAAgBC,KAC9Bh8Y,iBAEG27Y,GAAY,UAAAktO,EAAa13nB,IAAI,oBAAjB,eAA+BhI,MAAO0/nB,EAAa13nB,IAAI,aAAe6O,gBAElF6gN,EAAOgoa,EAAa13nB,IAAI,QACxBq9V,EAAaq6R,EAAa76mB,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAE3D4tY,EAAiBitO,EAAa13nB,IAAI,kBAQlC43nB,EAAa,SAAC10O,GAmBlB,OAlB4BA,EAC3Bv/Y,IAAI,eAAgBu/Y,EAAKljZ,IAAI,QAC7BykH,OAAO,OACP9gH,IAAI,cAAeu/Y,EAAKljZ,IAAI,OAC5BykH,OAAO,MACPl4G,OAAO,UAAU,SAACsrnB,GAUjB,OARsBA,EAAW5ynB,KAAI,SAAC6ynB,GACpC,OAAOA,EACJn0nB,IAAI,YAAam0nB,EAAK93nB,IAAI,QAC1BykH,OAAO,OACP9gH,IAAI,WAAYm0nB,EAAK93nB,IAAI,OACzBykH,OAAO,aASVkwgB,EAAuBtvmB,iBAAO,CAChCooM,WAAYp+M,uBACZq9jB,iBAAkBr9jB,yBACjBpC,eAAc,SAACywQ,GAChBi6W,GAA2BA,EAAwBhvnB,SAAQ,SAACu6Y,EAAMO,GAC5DP,EAAKljZ,IAAI,eACX09Q,EAAInxQ,OAAO,cAAc,SAACwrnB,GAAD,OAAaA,EAAQp0nB,IAAI8/Y,EAASm0O,EAAW10O,OAEtExlI,EAAInxQ,OAAO,oBAAoB,SAACwrnB,GAAD,OAAaA,EAAQp0nB,IAAI8/Y,EAASm0O,EAAW10O,aA2BpF,OAtB4Br0Y,gBAAmB5B,eAAc,SAACywQ,GAC5DA,EACG/5Q,IAAI,OAAQ8G,GACZ9G,IAAI,cAAei5H,GACnBj5H,IAAI,eAAgB0hB,iBAAO,CAC1B6X,GAAIm2F,EACJ17H,MAAOklC,KAERl5B,IAAI,eAAgB0hB,iBAAO,CAC1B6X,GAAIgyL,EACJv3N,MAAOy9H,KAERzxH,IAAI,OAAQ4xQ,GACZ5xQ,IAAI,aAAcgxnB,EAAqB30nB,IAAI,eAC3C2D,IAAI,QAAS+mZ,GACb/mZ,IAAI,YAAa6mZ,GACjB7mZ,IAAI,mBAAoBgxnB,EAAqB30nB,IAAI,qBACjD2D,IAAI,OAAQ+rN,GACZ/rN,IAAI,aAAc05V,GAClB15V,IAAI,kBAAgC,OAAd8mZ,QAAc,IAAdA,OAAA,EAAAA,EAAgBzyZ,MAAOyyZ,EAAiBplY,iBAAO,CAAEkpV,QAASr6V,uBAWI+2Y,CAAuBysO,GAE1GzD,EAAc39P,EAAiBh3U,OAAS5pB,WAAS8vB,GACjDwzF,EAAYs9O,EAAiBh3U,OAAS5pB,WAAS6pB,IAE/C6pW,EAAcpwQ,IACM3hC,wBAAc6zS,KAAd7zS,CAAqCg/Q,IAAsCxnX,iBAAOgO,MAAM,CAAC,YAAa,kBACtGw6F,wBAAc2xgB,GAAd3xgB,CAAyCg/Q,IAAsCxnX,iBAAOgO,MAAM,CAAC,kBAAmB,gBAEpIwsY,EAAyB/vZ,SAASg9X,EAAiBr9O,mBAAqBD,GAAa0+e,GAAgD,MAAhCA,EAAa13nB,IAAI,YAE5H,OAAO,aACLu6G,gBACA6uS,cACAktO,sBACAjtO,yBACArwQ,YACAi7e,eACGlllB,YAAyB,CAC1BqoE,WAAYC,wBAAcqrgB,IAC1Bv5N,WAAYxvM,cACZojJ,gBAAiBxnN,cACjBqE,aAAcv0F,eACdgC,OAAQkwF,cACR0tQ,oBAAqB1rJ,eANpBxqN,CAOAsnV,OAIoB,SAACzvV,EAAmC8B,GAE7D,MAAO,CACL9B,WACAs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfgjQ,cAAe,WACbr3R,EAAS,IAAI20B,MAKf4hS,yBAA0B,SAAC50S,GACzB3hB,EAAS,IAAIutB,KAAoB,CAAE5L,cACnC3hB,EAAS,IAAImvB,KAAmB,CAAExN,eAEpC2ukB,YAAa,SAAC1jgB,GACZ5sF,EAAS,IAAIw7C,KAA8BoxC,KAE7CuggB,qBAAsB,SAACqC,EAAmC4B,EAAsB14kB,EAAc6mW,EAA0B5iF,EAA4C6iF,GAC9J9mW,IAAS5pB,WAAS8vB,GACpB5e,EAAS,IAAIi7C,KAAkC,CAC7Cu0iB,aACA4B,eACA5xO,eAGFx/W,EAAS,IAAI25C,KAA2B,CACtCizC,SAAUwkgB,EACV3sO,WAAY+qO,EAAW57mB,OACvB25X,aAAa,GAAD,OAAKhhX,wBAAL,YAA8B6kmB,GAC1Cz0T,YACA4iF,iBACAC,gBAIN4tO,kBAAmB,SAACoC,EAA8B92kB,EAAc6mW,EAA0B5iF,EAA2C6iF,GAC/H9mW,IAAS5pB,WAAS8vB,GACpB5e,EAAS,IAAIo7C,IAA+B,CAACo0iB,aAAYhwO,eAEzDx/W,EAAS,IAAIi6C,IAAwB,CACnC66C,OAAQ06f,EACRjwO,iBACA5iF,YACA6iF,oBAcR5iF,oBAAU,CACR9pN,KAAMgpgB,GACNh/S,oBAAqB,EACrBD,kBAAkB,IAVPvyP,CAYb2ijB,K,mIGhrCF,I,sBAHInsc,EAAQ,mEAERuwc,EAAS,IAAIxme,WAAW,KACnBxyJ,EAAI,EAAGA,EAAIyoL,EAAM5pL,OAAQmB,IAC9Bg5nB,EAAOvwc,EAAMtjL,WAAWnF,IAAMA,EAE3B,ICcIi5nB,EDoBAC,EAAiB,SAAUC,GAClC,OARgB,SAAUt4nB,GAE1B,IADA,IAAI2kB,EAAM,GACDxlB,EAAI,EAAGA,EAAIa,EAAMhC,OAAQmB,IAC9BwlB,GAAO3Z,OAAO6tJ,aAAa74J,EAAMb,IAErC,OAAOwlB,EAGA4zmB,CAAcp5d,IAAKq5d,QAnCA,SAAUvjhB,GACpC,IAEI91G,EAEAs5nB,EACAC,EACAC,EACAC,EAPAC,EAA+B,IAAhB5jhB,EAAOj3G,OACtBkM,EAAM+qG,EAAOj3G,OAEb4zE,EAAI,EAK0B,MAA9BqjC,EAAOA,EAAOj3G,OAAS,KACvB66nB,IACkC,MAA9B5jhB,EAAOA,EAAOj3G,OAAS,IACvB66nB,KAGR,IAAI3jhB,EAAQ,IAAIy8C,WAAWkne,GAC3B,IAAK15nB,EAAI,EAAGA,EAAI+K,EAAK/K,GAAK,EACtBs5nB,EAAWN,EAAOljhB,EAAO3wG,WAAWnF,IACpCu5nB,EAAWP,EAAOljhB,EAAO3wG,WAAWnF,EAAI,IACxCw5nB,EAAWR,EAAOljhB,EAAO3wG,WAAWnF,EAAI,IACxCy5nB,EAAWT,EAAOljhB,EAAO3wG,WAAWnF,EAAI,IACxC+1G,EAAMtjC,KAAQ6mjB,GAAY,EAAMC,GAAY,EAC5CxjhB,EAAMtjC,MAAoB,GAAX8mjB,IAAkB,EAAMC,GAAY,EACnDzjhB,EAAMtjC,MAAoB,EAAX+mjB,IAAiB,EAAiB,GAAXC,EAE1C,OAAO1jhB,EAU2B4jhB,CAAiBR,M,8GCrCnDS,EAA4B,CAC5B,QAAWC,EACX,eAAgBC,EAChB,kBAAmBC,EACnB,sBAAuBC,EACvB,UAAaC,EACb,iBAAkBC,EAClB,oBAAqBC,EACrB,wBAAyBC,EACzB,c,QACA,aAAcC,EACd,eAAgBC,EAChB,mBAAoBC,EACpB,O,QACA,a,UAGJ,SAAWtB,GACPA,EAAS,QAAc,UACvBA,EAAS,YAAkB,eAC3BA,EAAS,eAAqB,kBAC9BA,EAAS,mBAAyB,sBAClCA,EAAS,UAAgB,YACzBA,EAAS,cAAoB,iBAC7BA,EAAS,iBAAuB,oBAChCA,EAAS,qBAA2B,wBACpCA,EAAS,WAAiB,cAC1BA,EAAS,eAAqB,aAC9BA,EAAS,iBAAuB,eAChCA,EAAS,qBAA2B,mBACpCA,EAAS,OAAa,SACtBA,EAAS,aAAmB,eAdhC,CAeGA,IAAcA,EAAY,KAC7B,IAAIuB,EAAY,GACZC,EAAsB,WACtB,SAASA,IACL,IAAI9llB,EAAQ33C,KACZA,KAAK09nB,gBAAkB,SAAUC,GAC7B,OAAOhmlB,EAAMimlB,WAAWD,IAE5B39nB,KAAK69nB,uBAAyB,SAAUC,EAAeC,GACnD,OAAQpmlB,EAAMqmlB,iBAAiBF,IAAkB,IAAIC,IAuB7D,OApBAN,EAAK30e,KAAO,SAAUgya,GAClB,IAAImjE,EAAaT,EAAU1iE,GAC3B,GAAImjE,EACA,OAAOA,EACX,IAAI5sU,EAAO6qU,EAAeU,EAA0B9hE,IAChD/0E,EAAO3nf,OAAO+8C,OAAO,IAAIsilB,EAAQ9unB,KAAK6tC,MAAM60Q,IAahD,OAZA00L,EAAK63I,WAAa73I,EAAKm4I,YAAYvynB,QAAO,SAAUutI,EAAKo4c,GAErD,OADAp4c,EAAIo4c,EAAOz3b,GAAKy3b,EAAO6sC,GAChBjlf,IACR,IACH6sW,EAAKi4I,iBAAmBj4I,EAAKq4I,UAAUzynB,QAAO,SAAUutI,EAAKggG,GACzD,IAAImlZ,EAAQnlZ,EAAG,GAAIolZ,EAAQplZ,EAAG,GAAI59J,EAAQ49J,EAAG,GAI7C,OAHKhgG,EAAImlf,KACLnlf,EAAImlf,GAAS,IACjBnlf,EAAImlf,GAAOC,GAAShjjB,EACb49D,IACR,IACHskf,EAAU1iE,GAAY/0E,EACfA,GAEJ03I,EA9Be,G,UC/CtBc,EAAwBrC,EAAesC,GACvCC,EAAqB9vnB,KAAK6tC,MAAM+hlB,GAChCG,EACA,SAAkBlwnB,EAAMmwnB,GACpB,IAAIhnlB,EAAQ33C,KACZA,KAAK4+nB,0BAA4B,SAAUC,GACvC,OAAOA,KAAalnlB,EAAMgnlB,iBAE9B3+nB,KAAK8+nB,uBAAyB,SAAUD,GACpC,IAAIx/mB,EAASs4B,EAAMgnlB,gBAAgBE,GACnC,IAAKx/mB,EAAQ,CACT,IAAImJ,EAAM3Z,OAAO6tJ,aAAamie,GAC1BE,EAAU,KFwCR,SAAUrjoB,EAAOmG,EAAQm9nB,GAE3C,IADA,IAAIljjB,EAAU,GACL3nE,EAAM,EAAGpG,EAAMlM,EAASnG,EAAMmG,OAAQsS,EAAMpG,EAAKoG,IACtD2nE,GAAWkjjB,EAEf,OAAOljjB,EAAUpgF,EE7CgBqgM,CAAS8ic,EAAU59nB,SAAS,IAAK,EAAG,KACrDwvO,EAAM94L,EAAMnpC,KAAO,mBAAsBga,EAAM,MAASu2mB,EAAU,IACtE,MAAM,IAAIn3nB,MAAM6oO,GAEpB,MAAO,CAAEzoI,KAAM3oF,EAAO,GAAI7Q,KAAM6Q,EAAO,KAE3Crf,KAAKwO,KAAOA,EACZxO,KAAKi/nB,oBAAsB7goB,OAAO0D,KAAK68nB,GAClC31nB,IAAIrH,QACJ8K,MAAK,SAAU9G,EAAGC,GAAK,OAAOD,EAAIC,KACvC5F,KAAK2+nB,gBAAkBA,GAIpBO,EAAY,CACnBx/nB,OAAQ,IAAIg/nB,EAAS,SAAUD,EAAmBtid,QAClDgjd,aAAc,IAAIT,EAAS,eAAgBD,EAAmBW,cAC9DC,QAAS,IAAIX,EAAS,UAAWD,EAAmBa,W,6cCucvCrhP,I,WA4yBAshP,G,WA0PA1hP,G,WAQAE,GA9iCV,SAAUE,EACf/yX,GADK,qFAiBD,OAbFgc,EACEhc,EADFgc,QAGAmrL,EAEEnrL,EAFFmrL,QACA2E,EACE9vL,EADF8vL,WARG,SAiBKh2N,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,YACTC,SAAU,mBACV5zD,OAAQ,CACN0/K,WAEF57I,KAAM,CACJugJ,kBAzBD,mBAYHh8K,EAZG,EAYHA,KACA5J,EAbG,EAaHA,KAgBE4J,EA7BC,iBAgCH,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBiuP,EAAgB5gM,EAAcznF,MAAM,CAAC,UAAW,YAAa,QAAS,EAAG,eA/B5E,UAgCG0kF,YAAI,IAAI26G,KAAgC,CAAEoS,UAAS2E,WAAYiyE,KAhClE,QAiCH,OAjCG,UAiCG3jM,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,4DACnB65E,SAAU,UACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UAtCX,gCA2CH,OADA/3Q,QAAQ7Z,MAAM,0BAA2B,CAAEijC,QA1CxC,UA2CGk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,wDACnB65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,QACZL,SAAU,UAhDX,iCAoDE,CAAE/kP,OAAM5J,QApDV,wCA4yBA,SAAUmulB,EAAV,sFAeD,OAbFr4lB,EAFG,EAEHA,QAIAmrL,EACEnrL,EADFmrL,QANG,SAeKrxN,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,YACTC,SAAU,kBACV5zD,OAAQ,CACN0/K,eApBD,mBAUHr3K,EAVG,EAUHA,KACA5J,EAXG,EAWHA,KAaE4J,EAxBC,iBA4BH,OAHMqtD,EAAgBj/E,iBAAO4xB,GACvBwklB,EAA0Cn3hB,EAAcznF,MAAM,CAAC,UAAW,YAAa,iBA1B1F,UA4BG0kF,YAAI,IAAIm8G,IAA+B+9a,IA5B1C,gCA8BHx3mB,QAAQ7Z,MAAM,gCAAiC,CAAEijC,QA9B9C,wCA0PA,SAAUysW,EAAuB3yX,GAAjC,0EACGmnM,EAAYnnM,EAAOgc,QAAnBmrL,SACJnnM,EAAOgc,QAAQ42W,gBAFd,gBAGH,OAHG,SAGGx4S,YAAI,IAAI+8G,IAAgB,CAAEgQ,aAH7B,OAKL,OALK,SAKC/sH,YAAIl5F,eAAKuzd,YAAattQ,KALvB,uCAQA,SAAU0rL,EAAoB7yX,GAA9B,0EACGmnM,EAAYnnM,EAAOgc,QAAnBmrL,SACJnnM,EAAOgc,QAAQ42W,gBAFd,gBAGH,OAHG,SAGGx4S,YAAI,IAAI+8G,IAAgB,CAAEgQ,aAH7B,OAKL,OALK,SAKC/sH,YAAIl5F,eAAKwzd,YAAiBvtQ,KAL3B,yC,gJC7/CA,SAASota,IACd,OAAO1xmB,KAAK+xB,MAvBW,IAkEZ,IAAA4/kB,EAlCb,WACE,IAAQhtC,EAAgB,IAAhBA,YACR,IAAKA,IAAgBA,EAAY5yiB,IAC/B,OAAO2/kB,EAKT,IAAME,EAA2B5xmB,KAAK+xB,MAAQ4yiB,EAAY5yiB,MACpD8/kB,OAAuC9joB,GAA1B42lB,EAAYktC,WAA0BD,EAA2BjtC,EAAYktC,WAWhG,OAAO,WACL,OAAQA,EAAaltC,EAAY5yiB,OArDZ,KAkES+/kB,GAmBrBC,EAAgC,WAK3C,IAAQptC,EAAgB,IAAhBA,YACR,GAAKA,GAAgBA,EAAY5yiB,IAAjC,CAKA,IAAM25M,EAAY,KACZsmY,EAAiBrtC,EAAY5yiB,MAC7BkglB,EAAUjymB,KAAK+xB,MAGfmglB,EAAkBvtC,EAAYktC,WAChC7ioB,KAAKijB,IAAI0ykB,EAAYktC,WAAaG,EAAiBC,GACnDvmY,EACEymY,EAAuBD,EAAkBxmY,EAQzC0mY,EAAkBztC,EAAYviT,QAAUuiT,EAAYviT,OAAOgwV,gBAG3DC,EAFgD,kBAApBD,EAEgBpjoB,KAAKijB,IAAImgnB,EAAkBJ,EAAiBC,GAAWvmY,EAGzG,OAAIymY,GAF8BE,EAAuB3mY,EAInDwmY,GAAmBG,GACe,aAC7B1tC,EAAYktC,aAEiB,kBAC7BO,IAKyB,UAC7BH,GAvC+B,OAPK,I,6BCvF7C,qHAkGIK,EAAoB,CACtB9lnB,KAAM,QACNC,MAAO,OACP85G,IAAK,OACLC,OAAQ,MAQV,IAAIqje,EAA4B,CAC9B3xd,MAAOvR,IAASwR,eAChBC,KAAMzR,IAAS0R,eAOb+sT,EAAS1uZ,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAI6koB,EAAgBp2lB,EAAMumN,OACtB8vY,OAA+B,IAAlBD,EAA2B,OAASA,EACjDzoC,EAAgB3tjB,EAAM2tjB,cACtBvxjB,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBk2U,EAAmBplX,EAAM+mF,UACzBA,OAAiC,IAArBq+R,EAA8B,GAAKA,EAC/CkxO,EAAoBt2lB,EAAMu2lB,WAG1BC,GAFJF,OAA0C,IAAtBA,EAA+B,GAAKA,GAEd3oC,cACtC4oC,EAAavjlB,YAAyBsjlB,EAAmB,CAAC,kBAC1D77f,EAAUz6F,EAAMy6F,QAChBg8f,EAAcz2lB,EAAMygE,KACpBA,OAAuB,IAAhBg2hB,GAAiCA,EACxCnoC,EAAoBtujB,EAAM4pF,WAC1BA,OAAmC,IAAtB0ke,EAA+B,GAAKA,EACjDooC,EAAa12lB,EAAM02lB,WACnB76f,EAAwB77F,EAAM87F,mBAC9BA,OAA+C,IAA1BD,EAAmC6xd,EAA4B7xd,EACpFisB,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,YAAcA,EACpDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,SAAU,gBAAiB,WAAY,UAAW,YAAa,YAAa,aAAc,UAAW,OAAQ,aAAc,aAAc,qBAAsB,YAExMgxC,EAAQwjD,cAIRvb,EAAU1+E,IAAMyG,QAAO,GAC3BzG,IAAM0B,WAAU,WACdg9E,EAAQr7E,SAAU,IACjB,IACH,IAAI2oN,EA9CC,SAAmBv1K,EAAOu1K,GAC/B,MAA2B,QAApBv1K,EAAMxB,WAJR,SAAsB+2K,GAC3B,OAA8C,IAAvC,CAAC,OAAQ,SAASjwO,QAAQiwO,GAGGowY,CAAapwY,GAAU4vY,EAAkB5vY,GAAUA,EA6C1EqwY,CAAU5ljB,EAAOqljB,GAC1B7qR,EAASjxU,IAAMwB,cAAc4rF,IAAO/nF,YAAS,CAC/CmnF,UAAuB,cAAZvX,EAA0BuX,EAAY,EACjDitN,QAAQ,GACPpqN,EAAY,CACb16C,UAAW2B,kBAAK7B,EAAQ64C,MAAO74C,EAAQ,cAAc5tE,OAAOk5H,YAAWisH,KAAW38H,EAAW16C,UAAuB,cAAZsgC,GAA2BxgC,EAAQ,oBAAoB5tE,OAAOk5H,YAAWisH,QAC/KnqN,GAEJ,GAAgB,cAAZozE,EACF,OAAOj1E,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ6njB,OAAQ3njB,GAC9C39E,IAAKA,GACJklB,GAAQ+0V,GAGb,IAAIsrR,EAAgBv8lB,IAAMwB,cAAcg7lB,IAAOn3lB,YAAS,CACtDk+F,GAAIr9B,EACJjxB,UAAW2mjB,EAAkB5vY,GAC7BhsJ,QAASuhC,EACTgzd,OAAQ71e,EAAQr7E,SACf84lB,GAAalrR,GAEhB,MAAgB,eAAZh8P,EACKj1E,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ6njB,OAAQ3njB,GAC9C39E,IAAKA,GACJklB,GAAQqgnB,GAINv8lB,IAAMwB,cAAcmsV,IAAOtoV,YAAS,CACzC+tjB,cAAe/tjB,YAAS,GAAI+tjB,EAAe,GAAI6oC,EAAmB,CAChE16f,mBAAoBA,IAEtB6yd,kBAAmBC,IACnB1/gB,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQgojB,MAAO9njB,GAC7CuxB,KAAMA,EACNg6B,QAASA,EACTlpI,IAAKA,GACJklB,EAAO8/mB,GAAaO,MA2EV/ljB,iBA9PK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,GAGNwpnB,OAAQ,CACN/+f,KAAM,YAIRjQ,MAAO,CACLw1L,UAAW,OACXnsO,QAAS,OACTK,cAAe,SACf81C,OAAQ,OACRyQ,KAAM,WACNhB,OAAQ9lD,EAAM8lD,OAAO00O,OACrB5Q,wBAAyB,QAGzB7nP,SAAU,QACVqX,IAAK,EAILq0O,QAAS,GAIXw4R,gBAAiB,CACf5mnB,KAAM,EACNC,MAAO,QAIT4mnB,iBAAkB,CAChB7mnB,KAAM,OACNC,MAAO,GAIT6mnB,eAAgB,CACd/sgB,IAAK,EACL/5G,KAAM,EACNg6G,OAAQ,OACR/5G,MAAO,EACP+2G,OAAQ,OACRulJ,UAAW,QAIbwqX,kBAAmB,CACjBhtgB,IAAK,OACL/5G,KAAM,EACNg6G,OAAQ,EACR/5G,MAAO,EACP+2G,OAAQ,OACRulJ,UAAW,QAIbyqX,sBAAuB,CACrB//f,YAAa,aAAal2H,OAAO4vE,EAAM+pC,QAAQsqP,UAIjDiyR,qBAAsB,CACpB55gB,aAAc,aAAat8G,OAAO4vE,EAAM+pC,QAAQsqP,UAIlDkyR,uBAAwB,CACtBhggB,WAAY,aAAan2H,OAAO4vE,EAAM+pC,QAAQsqP,UAIhDmyR,wBAAyB,CACvBvlgB,UAAW,aAAa7wH,OAAO4vE,EAAM+pC,QAAQsqP,UAI/C2xR,MAAO,MA4KuB,CAChC1ynB,KAAM,YACNvE,MAAM,GAFOgxE,CAGZk4W,I,+BC5QH,IAAIxsO,EAAyBvrN,EAAQ,IAErCD,EAAQuhN,YAAa,EACrBvhN,EAAO,aAAc,EAErB,IAAI4kZ,EAAUp5L,EAAuBvrN,EAAQ,OAEzC4kZ,EAASr5L,EAAuBvrN,EAAQ,OAExC0kZ,EAASn5L,EAAuBvrN,EAAQ,OAExCykZ,EAAal5L,EAAuBvrN,EAAQ,OAE5CumoB,EAAYh7a,EAAuBvrN,EAAQ,OAE3CiJ,EAAQsiN,EAAuBvrN,EAAQ,OAsCvC6oQ,EApCY,CACdg8I,mBAAmB,EACnB9nY,MAAO,GACPC,UAAW,GACXwI,MAAOo/X,EAAM,QACb9vY,MAAO4vY,EAAM,QACbliY,UAAWiiY,EAAU,QACrBxvY,SAAUsxnB,EAAS,QACnBj1nB,QAAS,SAAiBs6P,EAAOpiO,GAC/B,OAAOoiO,EAAMt6P,QAAQk4B,IAEvBxb,OAAQ,SAAgB1tB,GACtB,OAAOA,GAEToG,KAAMuC,EAAK,QACXtI,KAAM,SAAc8H,GAClB,OAAOA,EAAQA,EAAMhC,OAAS,GAEhC4L,KAAM,SAAcu5P,EAAOpiO,GACzB,OAAOoiO,EAAMv5P,KAAKm3B,IAEpBx1B,OAAQ2wY,EAAO,QACf36Y,OAAQ,SAAgBO,EAAGC,GACzB,OAAOA,EAAE2H,OAAM,SAAU0I,GACvB,OAAQtQ,EAAE6a,QAAQvK,OAGtBkqY,aAAc,SAAsBx6Y,EAAGC,GACrC,OAAOA,EAAE6H,MAAK,SAAUwI,EAAK9Z,GAC3B,OAAO8Z,IAAQtQ,EAAExJ,OAGrBoiB,KAAM,SAAc7iB,GAClB,OAAOA,IAIXP,EAAO,QAAc8oQ,G,gBCxDrB,IAAI4oP,EAAWzxf,EAAQ,KACnBkvf,EAAiBlvf,EAAQ,MACzBypV,EAAczpV,EAAQ,MACtBwmoB,EAAKxjoB,OAAOyJ,eAEhB1M,EAAQu7E,EAAIt7E,EAAQ,KAAoBgD,OAAOyJ,eAAiB,SAAwB84P,EAAG1qL,EAAG82a,GAI5F,GAHAF,EAASlsP,GACT1qL,EAAI4uQ,EAAY5uQ,GAAG,GACnB42a,EAASE,GACLzC,EAAgB,IAClB,OAAOs3I,EAAGjhY,EAAG1qL,EAAG82a,GAChB,MAAO3kf,IACT,GAAI,QAAS2kf,GAAc,QAASA,EAAY,MAAM1qf,UAAU,4BAEhE,MADI,UAAW0qf,IAAYpsP,EAAE1qL,GAAK82a,EAAWrxf,OACtCilQ,I,cCdTzlQ,EAAOC,QAAU,SAAUsmK,GACzB,MAAqB,kBAAPA,EAAyB,OAAPA,EAA4B,oBAAPA,I,0NC0CjDoge,EAAoB,SAAClolB,GAAD,OAA+B,YAElD,IADFzP,EACC,oBACJ,OACE,cAAC,IAAD,CAAYovC,UAAU,OAAtB,SACE,cAAC3/B,EAAD,eAAezP,QAKRy3E,EAAe2wf,YAAa,CACvCwvB,YAAY,EACZC,eAAe,EACfnznB,UAAW,SAAC4xG,GAEV,OADqB7xG,KAAKC,UAAU4xG,IAGtCge,MAAM,EACNwjgB,UAAW,QAGAC,EAAoB,CAC/Bh5gB,eAAgB,SAACzI,GACf,OAAIA,GAAUA,EAAOz8G,IACb,GAAN,OAAUy8G,EAAOz8G,IAAI,QAEvBikB,QAAQ7Z,MAAM,iBAAkB,CAC9BqyG,WAEKA,IAET6gB,eAAgB,SAAC7gB,GACf,OAAIA,GAAUA,EAAOz8G,IACZy8G,EAAOz8G,IAAI,UAEpBikB,QAAQ7Z,MAAM,iBAAkB,CAC9BqyG,WAEKA,IAET4H,kBAAmB,SAAC5H,EAAD,GAA6E,EAAtCt3G,QAAsC,EAA7Bu5G,WAA6B,EAAjBy/gB,YAAkB,IAC3FxmoB,EAAQ8kH,EAQZ,OAPIA,GAAUA,EAAOz8G,IACnBrI,EAAQ8kH,EAAOz8G,IAAI,SAEnBikB,QAAQ7Z,MAAM,iBAAkB,CAC9BqyG,WAGG,cAAC,IAAD,UAAa9kH,KAEtBwvH,eAAgB,kBAAMvlB,IAAQ55E,EAAE,wCAChCo2mB,aAAc,SAAC3hhB,KAKfhF,SAAU,SAACgF,KAKX4hhB,iBAAkB,SAAC5hhB,GACjB,OAAOA,EAAOz8G,IAAI,cAAe,GAEnC+4C,WAAY,CACVykF,OAzFkC,SAAC,GAOhC,IANLj7F,EAMI,EANJA,SACAyvF,EAKI,EALJA,UACAC,EAII,EAJJA,WACAF,EAGI,EAHJA,WAGI,iBAKJ,OACE,cAAC,IAAD,yBACExQ,SAAUyQ,EACV7Y,SAAU8Y,GACNF,GAHN,aAKGxvF,MAwEHk+E,MAAOq9gB,EAAkB/klB,IAAW0nE,OACpC6gP,iBAAkBw8R,EAAkB/klB,IAAWuoT,mBAGjD1jP,gBAeau9Q,IAZoD,SAAC,GAA6B,IAA3BvlR,EAA0B,EAA1BA,WAAer1F,EAAW,iBAC9F,OACE,cAAC,IAAD,aACEq1F,WAAU,2BACLsohB,GACAtohB,IAEDr1F,M,cCzHV,SAAS+9mB,EAAUv7nB,GACjB,QAASA,IAAuB,kBAARA,GAAmC,oBAARA,IAA2C,oBAAbA,EAAIyvE,KAJvFr7E,EAAOC,QAAUknoB,EACjBnnoB,EAAOC,QAAQywH,QAAUy2gB,G,6BCDzB,4OAmBIC,EAAa,CAAC,CAChBj0Y,KAAM,IACNk0Y,QAAS,mNACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,yBACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,mBACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6DACR,CACDl0Y,KAAM,IACNk0Y,QAAS,+EACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,KACNk0Y,QAAS,mBACR,CACDl0Y,KAAM,KACNk0Y,QAAS,mBACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2LACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2CACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iGACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,IACNk0Y,QAAS,+HACR,CACDl0Y,KAAM,IACNk0Y,QAAS,qCACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mHACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uDACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uGACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,yQACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mEACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2CACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6GACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6GACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iGACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mNACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uDACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mEACR,CACDl0Y,KAAM,IACNk0Y,QAAS,qCACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iGACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,IACNk0Y,QAAS,yNACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,yBACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,mBACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6DACR,CACDl0Y,KAAM,IACNk0Y,QAAS,qFACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,KACNk0Y,QAAS,mBACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iMACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2CACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iGACR,CACDl0Y,KAAM,IACNk0Y,QAAS,iGACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,+HACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2CACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2FACR,CACDl0Y,KAAM,IACNk0Y,QAAS,yHACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uDACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6GACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,yQACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mEACR,CACDl0Y,KAAM,IACNk0Y,QAAS,2CACR,CACDl0Y,KAAM,IACNk0Y,QAAS,6GACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mHACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uGACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,mNACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uDACR,CACDl0Y,KAAM,KACNk0Y,QAAS,aACR,CACDl0Y,KAAM,IACNk0Y,QAAS,yEACR,CACDl0Y,KAAM,IACNk0Y,QAAS,qCACR,CACDl0Y,KAAM,IACNk0Y,QAAS,uGACR,CACDl0Y,KAAM,IACNk0Y,QAAS,4FAEPC,EAAkB,SAAyBh6mB,GAC7C,IAAK,IAAIxlB,EAAI,EAAGA,EAAIs/nB,EAAWzgoB,OAAQmB,IACrCwlB,EAAMA,EAAIowD,QAAQ0pjB,EAAWt/nB,GAAGu/nB,QAASD,EAAWt/nB,GAAGqrP,MAGzD,OAAO7lO,GAGLi6mB,EAAa,SAAoBj6mB,GACnC,OAAOA,EAAIowD,QAAQ,aAAc,KAG/B8pjB,EAAmB,SAA0BlihB,GAC/C,MAAO,GAAGl1G,OAAOk1G,EAAO1/E,MAAO,KAAKx1B,OAAOk1G,EAAO9kH,QAGhD42mB,EAAe,SAAsB5sjB,GACvC,OAAO,SAAU86D,EAAQmihB,GACvB,IAAIC,EAAwB5qlB,YAAc,CACxC8plB,YAAY,EACZC,eAAe,EACfnznB,UAAW8znB,EACXlkgB,MAAM,EACNwjgB,UAAW,OACVt8kB,GACCo8kB,EAAac,EAAsBd,WACnCC,EAAgBa,EAAsBb,cACtCnznB,EAAYg0nB,EAAsBh0nB,UAClC4vH,EAAOokgB,EAAsBpkgB,KAC7BwjgB,EAAYY,EAAsBZ,UAElCv9gB,EAAQ+Z,EAAOikgB,EAAWE,GAAYA,EACtCn5a,EAAYhrF,EAAOikgB,EAAW7znB,EAAU4xG,IAAW5xG,EAAU4xG,GAYjE,OAVIshhB,IACFr9gB,EAAQA,EAAMrrE,cACdowK,EAAYA,EAAUpwK,eAGpB2olB,IACFt9gB,EAAQ+9gB,EAAgB/9gB,GACxB+kG,EAAYg5a,EAAgBh5a,IAGT,UAAdw4a,EAAwBx4a,EAAU76F,OAAO,EAAGlK,EAAM5iH,UAAY4iH,EAAQ+kG,EAAUhpM,QAAQikG,IAAU,IAIzGp+E,EAA+C,CACjD73B,KAAM,mBACNotE,OAAQ,2JAONinjB,EAAW,SAAkB34lB,GAC/B,OAAOqoS,YAAI,OAAQzoS,YAAS,CAC1BsoS,IAAK/rS,GACJ6D,KAGD44lB,EAEJ,SAAU5ghB,GAGR,SAAS4ghB,IAGP,OAFA11mB,YAAgBptB,KAAM8ioB,GAEf3ghB,YAA2BniH,KAAMoiH,YAAgB0ghB,GAAY76nB,MAAMjI,KAAM0D,YA4ClF,OAjDAm0E,YAAUirjB,EAAY5ghB,GAQtBzqE,YAAaqrlB,EAAY,CAAC,CACxBx+nB,IAAK,SACL5I,MAAO,WACL,IAAI6mH,EAAcviH,KAAKkqC,MAOnBgjO,GANS3qJ,EAAYylB,GACfzlB,EAAYwyC,IACPxyC,EAAY8rU,SACd9rU,EAAYy2e,OACbz2e,EAAY0jB,MACb1jB,EAAY4jB,KACR5jB,EAAY2qJ,UAEvBhjO,GADUq4E,EAAYwghB,QACd7llB,YAAyBqlE,EAAa,CAAC,KAAM,MAAO,WAAY,SAAU,QAAS,OAAQ,WAAY,aAEnH,OAAOgwN,YAAI,QAASzoS,YAAS,CAC3BruC,IAAKyxQ,GACJhjO,EAAO,CACRkoS,IAEAk2B,YAAK,CACHxnU,MAAO,aAEPi6F,WAAY,EACZF,OAAQ,EACR1T,SAAU,UACVwhP,QAAS,EACT7sR,QAAS,EAETR,MAAO,EAEP2qB,MAAO,cAEP1rF,MAAO,IACP2yG,QAAS,EACTjQ,SAAU,WACVof,UAAW,YAC8B,WAK1CymgB,EAlDT,CAmDEnplB,aAEEqplB,EAEJ,SAAU9ghB,GAGR,SAAS8ghB,IAGP,OAFA51mB,YAAgBptB,KAAMgjoB,GAEf7ghB,YAA2BniH,KAAMoiH,YAAgB4ghB,GAAc/6nB,MAAMjI,KAAM0D,YAoBpF,OAzBAm0E,YAAUmrjB,EAAc9ghB,GAQxBzqE,YAAaurlB,EAAc,CAAC,CAC1B1+nB,IAAK,oBACL5I,MAAO,WACLsE,KAAKkqC,MAAMgjO,SAAS4c,sBAAY9pR,SAEjC,CACDsE,IAAK,uBACL5I,MAAO,WACLsE,KAAKkqC,MAAMgjO,SAAS,QAErB,CACD5oQ,IAAK,SACL5I,MAAO,WACL,OAAOsE,KAAKkqC,MAAM5D,aAIf08lB,EA1BT,CA2BErplB,aAEEsplB,EAAa,CAAC,YAAa,SAAU,WAAY,eAAgB,YACjEC,EAAc,CAChB/njB,UAAW,aAEXkvC,SAAU,SACVpN,SAAU,WACVsU,OAAQ,QAGV,SAAS4xgB,EAAiB/6nB,GACxBA,EAAEg5H,iBAEJ,SAASgigB,EAAeh7nB,GACtBA,EAAE87G,kBAEJ,SAASm/gB,IACP,IAAI/ugB,EAAMt0H,KAAK4nT,UACX07U,EAActjoB,KAAK41S,aACnB2tV,EAAgBjvgB,EAAMt0H,KAAK8pV,aAEnB,IAARx1N,EACFt0H,KAAK4nT,UAAY,EACR27U,IAAkBD,IAC3BtjoB,KAAK4nT,UAAYtzL,EAAM,GAK3B,SAASkvgB,IACP,MAAO,iBAAkB90mB,QAAUsiL,UAAUyyb,eAG/C,IAAInkS,KAAe5wU,OAAOsX,WAAYtX,OAAOsX,SAASC,eAClDy9lB,EAAoB,EAEpBC,EAEJ,SAAUzhhB,GAGR,SAASyhhB,IACP,IAAIx/R,EAEAxsT,EAEJvqB,YAAgBptB,KAAM2joB,GAEtB,IAAK,IAAI54mB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAYzB,OATA0sB,EAAQwqE,YAA2BniH,MAAOmkW,EAAmB/hP,YAAgBuhhB,IAAa3ioB,KAAKiH,MAAMk8V,EAAkB,CAACnkW,MAAMsL,OAAO0f,KAErIgqD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,iBAAkB,IAEzFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAmB,CACxF85P,SAAS,EACTD,SAAS,IAGJ75P,EAgGT,OAtHAkgC,YAAU8rjB,EAAYzhhB,GAyBtBzqE,YAAakslB,EAAY,CAAC,CACxBr/nB,IAAK,oBACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAEb,GAAKs/V,EAAL,CACA,IAAI/8O,EAAcviH,KAAKkqC,MACnB05lB,EAAuBrhhB,EAAYqhhB,qBACnCC,EAAoBthhB,EAAYshhB,kBAChC72mB,EAASgZ,SAASywC,KAClBqtjB,EAAc92mB,GAAUA,EAAOsuF,MAWnC,GATIsohB,GAEFX,EAAWv2nB,SAAQ,SAAUpI,GAC3B,IAAI2R,EAAM6tnB,GAAeA,EAAYx/nB,GACrC8+G,EAAO2ghB,eAAez/nB,GAAO2R,KAK7B2tnB,GAAwBF,EAAoB,EAAG,CACjD,IAAIM,EAAiBpolB,SAAS57C,KAAK+joB,eAAelwgB,aAAc,KAAO,EACnEuL,EAAcp5F,SAASywC,KAAOzwC,SAASywC,KAAK2oD,YAAc,EAC1D6kgB,EAAkBv1mB,OAAOyvc,WAAa/+V,EAAc4kgB,GAAkB,EAC1E5loB,OAAO0D,KAAKohoB,GAAax2nB,SAAQ,SAAUpI,GACzC,IAAI2R,EAAMitnB,EAAY5+nB,GAElBw/nB,IACFA,EAAYx/nB,GAAO2R,MAInB6tnB,IACFA,EAAYjwgB,aAAe,GAAGvoH,OAAO24nB,EAAiB,OAKtDj3mB,GAAUw2mB,MAEZx2mB,EAAOg8E,iBAAiB,YAAam6hB,EAAkBnjoB,KAAKkkoB,iBAExDL,IACFA,EAAkB76hB,iBAAiB,aAAcq6hB,EAAsBrjoB,KAAKkkoB,iBAC5EL,EAAkB76hB,iBAAiB,YAAao6hB,EAAgBpjoB,KAAKkkoB,mBAKzER,GAAqB,KAEtB,CACDp/nB,IAAK,uBACL5I,MAAO,WACL,IAAI6nH,EAASvjH,KAEb,GAAKs/V,EAAL,CACA,IAAI97O,EAAexjH,KAAKkqC,MACpB05lB,EAAuBpghB,EAAaoghB,qBACpCC,EAAoBrghB,EAAaqghB,kBACjC72mB,EAASgZ,SAASywC,KAClBqtjB,EAAc92mB,GAAUA,EAAOsuF,MAEnCoohB,EAAoB3moB,KAAKC,IAAI0moB,EAAoB,EAAG,GAEhDE,GAAwBF,EAAoB,GAC9CT,EAAWv2nB,SAAQ,SAAUpI,GAC3B,IAAI2R,EAAMstG,EAAOwghB,eAAez/nB,GAE5Bw/nB,IACFA,EAAYx/nB,GAAO2R,MAMrB+W,GAAUw2mB,MACZx2mB,EAAOi8E,oBAAoB,YAAak6hB,EAAkBnjoB,KAAKkkoB,iBAE3DL,IACFA,EAAkB56hB,oBAAoB,aAAco6hB,EAAsBrjoB,KAAKkkoB,iBAC/EL,EAAkB56hB,oBAAoB,YAAam6hB,EAAgBpjoB,KAAKkkoB,sBAI7E,CACD5/nB,IAAK,SACL5I,MAAO,WACL,OAAO,SAIJiooB,EAvHT,CAwHEhqlB,aAEFq7B,YAAgB2ujB,EAAY,eAAgB,CAC1CC,sBAAsB,IAGxB,IAAIO,EAAiD,CACnD31nB,KAAM,UACNotE,OAAQ,iDAWNwojB,EAEJ,SAAUC,GAGR,SAASD,IACP,IAAIjgS,EAEAxsT,EAEJvqB,YAAgBptB,KAAMokoB,GAEtB,IAAK,IAAIr5mB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAuBzB,OApBA0sB,EAAQwqE,YAA2BniH,MAAOmkW,EAAmB/hP,YAAgBgihB,IAAcpjoB,KAAKiH,MAAMk8V,EAAkB,CAACnkW,MAAMsL,OAAO0f,KAEtIgqD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,QAAS,CAC9EkslB,kBAAmB,OAGrB7ujB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,SAAUl8C,GAC9FA,IAAQk8C,EAAM3Q,MAAM68lB,mBAExBlslB,EAAMirE,SAAS,CACbihhB,kBAAmBpooB,OAIvBu5E,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,WACpF3R,SAASwgR,eACXxgR,SAASwgR,cAAcr8O,UAIpBxyB,EAoCT,OArEAkgC,YAAUusjB,EAAaC,GAoCvB5slB,YAAa2slB,EAAa,CAAC,CACzB9/nB,IAAK,SACL5I,MAAO,WACL,IAAI6mH,EAAcviH,KAAKkqC,MACnB5D,EAAWi8E,EAAYj8E,SACvBqsK,EAAYpwF,EAAYowF,UACxBkxb,EAAoB7joB,KAAKgnC,MAAM68lB,kBAEnC,OAAKlxb,EAcE4/H,YAAI,MAAO,KAAMA,YAAI,MAAO,CACjC1tN,QAAS7kH,KAAKskoB,gBACdlyT,IAAK+xT,IACH5xT,YAAIywT,EAAc,CACpB91X,SAAUltQ,KAAKukoB,iBACdj+lB,GAAWu9lB,EAAoBtxT,YAAIoxT,EAAY,CAChDE,kBAAmBA,IAChB,MArBkBv9lB,MAyBpB89lB,EAtET,CAuEEz6U,iBAEE66U,EAEJ,SAAUtihB,GAGR,SAASsihB,IACP,IAAIrgS,EAEAxsT,EAEJvqB,YAAgBptB,KAAMwkoB,GAEtB,IAAK,IAAIz5mB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAuFzB,OApFA0sB,EAAQwqE,YAA2BniH,MAAOmkW,EAAmB/hP,YAAgBoihB,IAAexjoB,KAAKiH,MAAMk8V,EAAkB,CAACnkW,MAAMsL,OAAO0f,KAEvIgqD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,YAAY,GAEnFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,SAAS,GAEhFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,oBAAgB,GAEvFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAc,GAErFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAUwvF,GAC/FA,EAAM/F,iBACN+F,EAAMjjB,qBAGRlvC,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,oBAAoB,SAAUwvF,EAAO4mN,GAC1G,IAAIxrO,EAAc5qE,EAAMzN,MACpBu6lB,EAAiBlihB,EAAYkihB,eAC7BC,EAAgBnihB,EAAYmihB,cAC5BC,EAAcpihB,EAAYoihB,YAC1BC,EAAarihB,EAAYqihB,WACzBC,EAAqBltlB,EAAMmtlB,aAC3Bl9U,EAAYi9U,EAAmBj9U,UAC/BhS,EAAeivV,EAAmBjvV,aAClCK,EAAe4uV,EAAmB5uV,aAClCjpR,EAAS2qB,EAAMmtlB,aACfC,EAAkBh3S,EAAQ,EAC1Bi3S,EAAkBpvV,EAAeK,EAAe2R,EAChDq9U,GAAqB,EAErBD,EAAkBj3S,GAASp2S,EAAMkxS,WAC/B67S,GAAeA,EAAcv9f,GACjCxvF,EAAMkxS,UAAW,GAGfk8S,GAAmBptlB,EAAMgxS,QACvBi8S,GAAYA,EAAWz9f,GAC3BxvF,EAAMgxS,OAAQ,GAIZo8S,GAAmBh3S,EAAQi3S,GACzBP,IAAmB9slB,EAAMkxS,UAC3B47S,EAAet9f,GAGjBn6G,EAAO46R,UAAYhS,EACnBqvV,GAAqB,EACrBttlB,EAAMkxS,UAAW,IACPk8S,IAAoBh3S,EAAQnmC,IAClC+8U,IAAgBhtlB,EAAMgxS,OACxBg8S,EAAYx9f,GAGdn6G,EAAO46R,UAAY,EACnBq9U,GAAqB,EACrBttlB,EAAMgxS,OAAQ,GAIZs8S,GACFttlB,EAAMutlB,aAAa/9f,MAIvBnyD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,WAAW,SAAUwvF,GAC1FxvF,EAAMwtlB,iBAAiBh+f,EAAOA,EAAMi+f,WAGtCpwjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAUwvF,GAE/FxvF,EAAM0tlB,WAAal+f,EAAMm+f,eAAe,GAAGhmV,WAG7CtqO,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,SAAUwvF,GAC9F,IAAIi+f,EAASztlB,EAAM0tlB,WAAal+f,EAAMm+f,eAAe,GAAGhmV,QAExD3nQ,EAAMwtlB,iBAAiBh+f,EAAOi+f,MAGhCpwjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,SAAUl8C,GAClGk8C,EAAMmtlB,aAAerpoB,KAGhBk8C,EA2DT,OA5JAkgC,YAAU2sjB,EAActihB,GAoGxBzqE,YAAa+slB,EAAc,CAAC,CAC1BlgoB,IAAK,oBACL5I,MAAO,WACLsE,KAAKuloB,eAAevloB,KAAK8koB,gBAE1B,CACDxgoB,IAAK,uBACL5I,MAAO,WACLsE,KAAKo1lB,cAAcp1lB,KAAK8koB,gBAEzB,CACDxgoB,IAAK,iBACL5I,MAAO,SAAwBs+R,GAExBA,IACDA,EAAG4b,cAAgB5b,EAAGic,eAES,oBAAxBjc,EAAGhxL,kBACZgxL,EAAGhxL,iBAAiB,QAAShpG,KAAKwloB,SAAS,GAGV,oBAAxBxrW,EAAGhxL,kBACZgxL,EAAGhxL,iBAAiB,aAAchpG,KAAKiqR,cAAc,GAGpB,oBAAxB+P,EAAGhxL,kBACZgxL,EAAGhxL,iBAAiB,YAAahpG,KAAKyloB,aAAa,OAGtD,CACDnhoB,IAAK,gBACL5I,MAAO,SAAuBs+R,GAExBA,EAAG4b,cAAgB5b,EAAGic,eAEY,oBAA3Bjc,EAAG/wL,qBACZ+wL,EAAG/wL,oBAAoB,QAASjpG,KAAKwloB,SAAS,GAGV,oBAA3BxrW,EAAG/wL,qBACZ+wL,EAAG/wL,oBAAoB,aAAcjpG,KAAKiqR,cAAc,GAGpB,oBAA3B+P,EAAG/wL,qBACZ+wL,EAAG/wL,oBAAoB,YAAajpG,KAAKyloB,aAAa,MAGzD,CACDnhoB,IAAK,SACL5I,MAAO,WACL,OAAO+oC,IAAMwB,cAAc+8lB,EAAc,CACvC91X,SAAUltQ,KAAKukoB,iBACdvkoB,KAAKkqC,MAAM5D,cAIXk+lB,EA7JT,CA8JE7qlB,aAEE+rlB,EAEJ,SAAUhgS,GAGR,SAASggS,IAGP,OAFAt4mB,YAAgBptB,KAAM0loB,GAEfvjhB,YAA2BniH,KAAMoiH,YAAgBsjhB,GAAoBz9nB,MAAMjI,KAAM0D,YAc1F,OAnBAm0E,YAAU6tjB,EAAoBhgS,GAQ9BjuT,YAAaiulB,EAAoB,CAAC,CAChCphoB,IAAK,SACL5I,MAAO,WACL,IAAI8nH,EAAexjH,KAAKkqC,MACpByoK,EAAYnvF,EAAamvF,UACzBzoK,EAAQgT,YAAyBsmE,EAAc,CAAC,cAEpD,OAAOmvF,EAAYluK,IAAMwB,cAAcu+lB,EAAct6lB,GAASlqC,KAAKkqC,MAAM5D,aAItEo/lB,EApBT,CAqBE/rlB,aAEFq7B,YAAgB0wjB,EAAoB,eAAgB,CAClD/yb,WAAW,IAGb,IAAIgzb,EAA0B,SAAiCx+f,GAC7D,IAAIj+H,EAAUxF,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC9EkioB,EAAe18nB,EAAQ08nB,aACvB76gB,EAAU7hH,EAAQ6hH,QAClBjqF,EAAQ53B,EAAQ43B,MAChBk1F,EAAa9sH,EAAQ8sH,WAEzB,OAAQmR,GACN,IAAK,OACH,MAAO,oCAAoC77H,OAAO0qH,EAAa,GAAK,uDAAwD,sFAE9H,IAAK,QACH,MAAO,GAAG1qH,OAAOw1B,GAAgB,SAAU,gBAAgBx1B,OAAOs6nB,EAAe,uBAAyB,GAAI,mCAAmCt6nB,OAAOy/G,EAAU,uCAAyC,IAE7M,IAAK,QACH,MAAO,+GAGT86gB,EAAwB,SAA+B1+f,EAAOj+H,GAChE,IAAIxN,EAAQwN,EAAQxN,MAChBs6H,EAAa9sH,EAAQ8sH,WACzB,GAAKt6H,EAEL,OAAQyrI,GACN,IAAK,kBACL,IAAK,YACL,IAAK,eACH,MAAO,UAAU77H,OAAO5P,EAAO,iBAEjC,IAAK,gBACH,MAAoB,UAAU4P,OAAO5P,EAA9Bs6H,EAAqC,uCAAkE,iBA8BhHosgB,EAAmB,SAA0B5hhB,GAC/C,QAASA,EAAOwV,YAGdovM,EAAgB,CAClB0gU,eAAgBh+R,IAChBtuR,UAAWqtR,IACXt/O,QAAS6qN,IACTrqN,kBAAmB8/O,IACnBvnN,MAAOuoN,IACPk9R,aAAcj9R,IACdk9R,oBAAqB/+R,IACrB/jB,mBAAoB6kB,IACpBtjP,MAAOskP,IACPnnO,iBAAkBumO,IAClBj9O,eAAgBk6O,IAChBjgC,KAAM0+B,IACNoiS,SAAUrhS,IACVshS,WAAY3gS,IACZ4gS,WAAYh9R,IACZi9R,gBAAiBh9R,IACjBphP,iBAAkBshP,IAClBr+O,iBAAkBk6O,IAClB3kP,OAAQypP,IACRj/O,YAAas/O,IACbjlC,YAAamlC,IACb1iP,eAAgBi/O,KAuBlB,IA+BIjqJ,EAAe,CACjBr1F,aAbiB,EAcjBunK,OAjCW,CACX7pK,QAAS,UACTkhhB,UAAW,UACXh8R,UAAW,UACXH,UAAW,UACXV,OAAQ,UACRD,YAAa,UACbvF,SAAU,mBACV0E,SAAU,kBACVT,UAAW,kBACXN,UAAW,kBACXiB,UAAW,kBACX1D,UAAW,kBACXqF,UAAW,kBACX7C,UAAW,kBACX4+R,UAAW,kBACX1+R,UAAW,kBACX2+R,UAAW,mBAiBXjsjB,QARY,CACZuqR,SANa,EAObpB,cALkB,GAMlBQ,WAJeY,IAYbpjP,EAAe,CACjB04T,uBAAuB,EACvBqsN,kBAAmBjxO,cACnBkxO,mBAAoBlxO,cACpBmxO,mBAAmB,EACnBC,mBAAmB,EACnB7plB,WAAY,GACZs9X,0BAA0B,EAC1BwsN,mBAAmB,EACnBjlhB,aAAc2wf,IACdu0B,iBAzGqB,SAA0Bvmf,GAC/C,OAAOA,EAAMx/G,OAyGbugG,eAvGmB,SAAwB7gB,GAC3C,OAAOA,EAAO1/E,OAuGdmoF,eArGmB,SAAwBzI,GAC3C,OAAOA,EAAO9kH,OAqGds6H,YAAY,EACZjT,WAAW,EACXgI,SAAS,EACT+7O,OAAO,EACP8+R,cAAc,EACdxD,iBAAkBA,EAClBl3gB,eAAgB,WACd,MAAO,cAETk5O,cAAe,IACfC,cAAe,IACfz5O,YAAY,EACZ05O,cAAe,SACfC,aAAc,WACdl5O,uBAAuB,EACvBD,0BAA2BqqS,cAC3BxqS,iBAAkB,WAChB,MAAO,cAET67gB,iBAAiB,EACjBC,iBAAiB,EACjB/6lB,QAAS,GACTg7lB,SAAU,EACVh8gB,YAAa,YACbi8gB,mBAAoB,SAA4B5gmB,GAC9C,IAAIjxB,EAAQixB,EAAKjxB,MACjB,MAAO,GAAG9J,OAAO8J,EAAO,WAAW9J,OAAiB,IAAV8J,EAAc,IAAM,GAAI,eAEpEwmE,OAAQ,GACR0oD,SAAU,IACV4igB,iBAAiB,GAEfC,EAAa,EAEbrlhB,EAEJ,SAAUI,GAUR,SAASJ,EAAO2J,GACd,IAAI9zE,EAEJvqB,YAAgBptB,KAAM8hH,GAEtBnqE,EAAQwqE,YAA2BniH,KAAMoiH,YAAgBN,GAAQ9gH,KAAKhB,KAAMyrH,IAE5Ez2C,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,QAAS,CAC9EyvlB,kBAAmB,GACnBC,gBAAiB,GACjBC,cAAe,KACfC,aAAc,KACdC,eAAe,EACfzxgB,WAAW,EACX0xgB,YAAa,CACXrlgB,OAAQ,GACRilO,UAAW,IAEb66R,YAAa,KAGfltjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,oBAAoB,GAE3Fq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,GAEtFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,2BAA2B,GAElGq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAe,GAEtFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAc,GAErFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,aAAa,GAEpFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAiB,GAExFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAiB,GAExFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gCAA4B,GAEnGq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,iBAAkB,IAEzFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAkB,GAEzFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,iCAAiC,GAExGq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,sBAAkB,GAEzFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,aAAc,MAErFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,iBAAiB,SAAUl8C,GAChGk8C,EAAM+vlB,WAAajsoB,KAGrBu5E,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAoB,MAE3Fq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,uBAAuB,SAAUl8C,GACtGk8C,EAAMgwlB,iBAAmBlsoB,KAG3Bu5E,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,cAAe,MAEtFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAkB,SAAUl8C,GACjGk8C,EAAMiwlB,YAAcnsoB,KAGtBu5E,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,WAAY,MAEnFq9B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,SAAUl8C,GAC9Fk8C,EAAM4pR,SAAW9lU,KAGnBu5E,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,SAAUmF,GAClGnF,EAAMmF,WAAawuT,YAAkB,CACnCxuT,WAAYA,OAIhBk4B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,QAASA,EAAMkwlB,YAEtF7yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,OAAQA,EAAMmwlB,WAErF9yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,YAAY,SAAU9nC,EAAUyyG,GACrG,IAAIC,EAAc5qE,EAAMzN,MACpBsxE,EAAW+G,EAAY/G,SACvBhtG,EAAO+zG,EAAY/zG,KACvBgtG,EAAS3rG,EAAUmoC,YAAc,GAAIsqE,EAAY,CAC/C9zG,KAAMA,QAIVwmE,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,YAAY,SAAU9nC,GAC3F,IAAIqb,EAASxnB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,YAC7E88G,EAAS98G,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAC/C0nH,EAAe7rE,EAAMzN,MACrBw8lB,EAAoBljhB,EAAakjhB,kBACjC37gB,EAAUvH,EAAauH,QAE3BpzE,EAAM6qE,cAAc,GAAI,CACtBt3F,OAAQ,cAGNw7mB,IACF/ulB,EAAMowlB,0BAA4Bh9gB,EAElCpzE,EAAMqwlB,eAIRrwlB,EAAMswlB,yBAA0B,EAEhCtwlB,EAAM6jE,SAAS3rG,EAAU,CACvBqb,OAAQA,EACRs1F,OAAQA,OAIZxrC,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAU9nC,GAC/F,IAAI+3c,EAAejwa,EAAMzN,MACrBs8lB,EAAoB5+K,EAAa4+K,kBACjCz7gB,EAAU68V,EAAa78V,QACvBm3gB,EAAcvqlB,EAAM3Q,MAAMk7lB,YAE9B,GAAIn3gB,EACF,GAAIpzE,EAAMuwlB,iBAAiBr4nB,EAAUqynB,GAAc,CACjD,IAAI14a,EAAY7xK,EAAMsxE,eAAep5G,GAErC8nC,EAAMg6Q,SAASuwU,EAAY32nB,QAAO,SAAUvI,GAC1C,OAAO20C,EAAMsxE,eAAejmH,KAAOwmN,KACjC,kBAAmB35M,GAEvB8nC,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,kBACPj+H,QAAS,CACPxN,MAAOi8C,EAAM0pF,eAAexxH,WAI3B8nC,EAAMyqlB,iBAAiBvynB,EAAUqynB,GAWpCvqlB,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,gBACPj+H,QAAS,CACPxN,MAAOi8C,EAAM0pF,eAAexxH,GAC5BmmH,YAAY,MAdhBr+E,EAAMg6Q,SAAS,GAAGrmT,OAAOq0F,YAAmBuiiB,GAAc,CAACrynB,IAAY,gBAAiBA,GAExF8nC,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,gBACPj+H,QAAS,CACPxN,MAAOi8C,EAAM0pF,eAAexxH,YAe/B8nC,EAAMyqlB,iBAAiBvynB,EAAUqynB,GAWpCvqlB,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,gBACPj+H,QAAS,CACPxN,MAAOi8C,EAAM0pF,eAAexxH,GAC5BmmH,YAAY,MAdhBr+E,EAAMg6Q,SAAS9hT,EAAU,iBAEzB8nC,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,gBACPj+H,QAAS,CACPxN,MAAOi8C,EAAM0pF,eAAexxH,OAehC22nB,GACF7ulB,EAAMmwlB,eAIV9yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,SAAUywlB,GAC9F,IAAIlG,EAAcvqlB,EAAM3Q,MAAMk7lB,YAE1B14a,EAAY7xK,EAAMsxE,eAAem/gB,GAEjCv4nB,EAAWqynB,EAAY32nB,QAAO,SAAUvI,GAC1C,OAAO20C,EAAMsxE,eAAejmH,KAAOwmN,KAGrC7xK,EAAM6jE,SAAS3rG,EAAShO,OAASgO,EAAW,KAAM,CAChDqb,OAAQ,eACRk9mB,aAAcA,IAGhBzwlB,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,eACPj+H,QAAS,CACPxN,MAAO0soB,EAAezwlB,EAAM0pF,eAAe+mgB,GAAgB,MAI/DzwlB,EAAMkwlB,gBAGR7yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,cAAc,WACnF,IAAIozE,EAAUpzE,EAAMzN,MAAM6gF,QAE1BpzE,EAAM6jE,SAASuP,EAAU,GAAK,KAAM,CAClC7/F,OAAQ,aAIZ8pD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,YAAY,WACjF,IAAIuqlB,EAAcvqlB,EAAM3Q,MAAMk7lB,YAC1BmG,EAAoBnG,EAAYA,EAAYrgoB,OAAS,GACrDgO,EAAWqynB,EAAYpynB,MAAM,EAAGoynB,EAAYrgoB,OAAS,GAEzD81C,EAAMwwlB,0BAA0B,CAC9BhhgB,MAAO,YACPj+H,QAAS,CACPxN,MAAO2soB,EAAoB1wlB,EAAM0pF,eAAegngB,GAAqB,MAIzE1wlB,EAAM6jE,SAAS3rG,EAAShO,OAASgO,EAAW,KAAM,CAChDqb,OAAQ,YACRk9mB,aAAcC,OAIlBrzjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAkB,SAAUqD,GACjG,OAAOrD,EAAMzN,MAAMm3F,eAAermF,MAGpCg6B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,kBAAkB,SAAUqD,GACjG,OAAOrD,EAAMzN,MAAM++E,eAAejuE,MAGpCg6B,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,aAAa,SAAUrzC,EAAK4lC,GACjG,IAAImkN,EAAO+2E,EAAc9gU,GAAK4lC,GAC9BmkN,EAAKlzK,UAAY,aACjB,IAAImtjB,EAAS3wlB,EAAMzN,MAAM0xC,OAAOt3E,GAChC,OAAOgkoB,EAASA,EAAOj6Y,EAAMnkN,GAASmkN,KAGxCr5K,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAUmwJ,GAC/F,MAAO,GAAGx8L,OAAOqsC,EAAM4wlB,eAAgB,KAAKj9nB,OAAOw8L,MAGrD9yH,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,yBAAyB,WAC9F,IAAIizE,EAAajzE,EAAMzN,MAAM0gF,WACzBnH,EAAc9rE,EAAM3Q,MACpBygmB,EAAchkhB,EAAYgkhB,YAC1BH,EAAgB7jhB,EAAY6jhB,cAChC,GAAKA,GAAkB18gB,EAAvB,CACA,IAAIzuH,EAAQsroB,EAAYpgS,UAAU7mV,QAAQ8mnB,GACtC9mhB,EAASinhB,EAAYrlgB,OAAOjmI,GAChC,OAAOqkH,GAAUA,EAAOl8G,QAG1B0wE,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,6BAA6B,SAAUhP,GAC5G,IAAIw+F,EAAQx+F,EAAMw+F,MACdj+H,EAAUy/B,EAAMz/B,QAEpByuC,EAAMirE,SAAS,CACbwkhB,kBAAmBvB,EAAsB1+f,EAAOj+H,QAIpD8rE,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,2BAA2B,SAAUlI,GAC1G,IAAI03F,EAAQ13F,EAAM03F,MACdj+H,EAAUumC,EAAMvmC,QAEpByuC,EAAMirE,SAAS,CACbykhB,gBAAiB1B,EAAwBx+f,EAAOnvF,YAAc,GAAI9uC,EAAS,CACzE43B,MAAO6W,EAAMzN,MAAM,sBAKzB8qC,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,SAAUwvF,GAC7E,IAAjBA,EAAMha,SAIVga,EAAMjjB,kBACNijB,EAAM/F,iBAENzpF,EAAMkwlB,iBAGR7yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,mBAAmB,SAAUwvF,GAClGxvF,EAAM6wlB,kBAAmB,KAG3BxzjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,sBAAsB,SAAUwvF,GACrG,IAAI4/f,EAAkBpvlB,EAAMzN,MAAM68lB,gBAE7BpvlB,EAAM3Q,MAAM+uF,UAMLp+E,EAAMzN,MAAM0gF,WAMO,UAAzBuc,EAAMn6G,OAAOozR,SACfzoQ,EAAMqwlB,cANJjB,GACFpvlB,EAAM8wlB,SAAS,UAPb1B,IACFpvlB,EAAM+wlB,gBAAiB,GAGzB/wlB,EAAMkwlB,cAaqB,UAAzB1ggB,EAAMn6G,OAAOozR,SACfj5K,EAAM/F,oBAIVpsD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gCAAgC,SAAUwvF,GAE/G,KAAIA,GAAwB,cAAfA,EAAMjnI,MAAyC,IAAjBinI,EAAMha,UAI7Cx1E,EAAMzN,MAAM8rF,WAAhB,CACA,IAAI2ygB,EAAehxlB,EAAMzN,MACrB6gF,EAAU49gB,EAAa59gB,QACvBH,EAAa+9gB,EAAa/9gB,WAE9BjzE,EAAMkwlB,aAEFj9gB,GACFjzE,EAAMowlB,0BAA4Bh9gB,EAElCpzE,EAAMqwlB,eAENrwlB,EAAM8wlB,SAAS,SAGjBthgB,EAAM/F,iBACN+F,EAAMjjB,sBAGRlvC,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,6BAA6B,SAAUwvF,GAExGA,GAAwB,cAAfA,EAAMjnI,MAAyC,IAAjBinI,EAAMha,SAIjDx1E,EAAMixlB,aAENzhgB,EAAMjjB,kBACNvsE,EAAM+wlB,gBAAiB,EAEJ,aAAfvhgB,EAAMjnI,KACRy3C,EAAMkwlB,aAENhvlB,YAAW,WACT,OAAOlB,EAAMkwlB,oBAKnB7yjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,YAAY,SAAUwvF,GAC9C,mBAAlCxvF,EAAMzN,MAAMy8lB,kBACjBx/f,EAAMn6G,kBAAkBwwR,aAAek3G,YAAkBvtR,EAAMn6G,SACjE2qB,EAAMzN,MAAM89lB,cAEoC,oBAAlCrwlB,EAAMzN,MAAMy8lB,mBACxBhvlB,EAAMzN,MAAMy8lB,kBAAkBx/f,IAChCxvF,EAAMzN,MAAM89lB,iBAKlBhzjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,sBAAsB,WAC3FA,EAAMkxlB,aAAc,KAGtB7zjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,oBAAoB,WACzFA,EAAMkxlB,aAAc,KAGtB7zjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAU0sQ,GAC/F,IACIh5O,EADUg5O,EAAMZ,QACA7pO,KAAK,GAEpBvO,IAIL1zB,EAAMmxlB,cAAgBz9jB,EAAMg0O,QAC5B1nQ,EAAMoxlB,cAAgB19jB,EAAMi0O,QAC5B3nQ,EAAMqxlB,gBAAiB,MAGzBh0jB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,SAAUqtT,GAC9F,IACI35R,EADU25R,EAAMvhD,QACA7pO,KAAK,GAEzB,GAAKvO,EAAL,CAIA,IAAI49jB,EAASlsoB,KAAKijB,IAAIqrD,EAAMg0O,QAAU1nQ,EAAMmxlB,eACxC1D,EAASrooB,KAAKijB,IAAIqrD,EAAMi0O,QAAU3nQ,EAAMoxlB,eAE5CpxlB,EAAMqxlB,eAAiBC,EADH,GAC6B7D,EAD7B,MAItBpwjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,cAAc,SAAUwvF,GACzFxvF,EAAMqxlB,iBAINrxlB,EAAM+vlB,aAAe/vlB,EAAM+vlB,WAAW9hnB,SAASuhH,EAAMn6G,SAAW2qB,EAAMiwlB,cAAgBjwlB,EAAMiwlB,YAAYhinB,SAASuhH,EAAMn6G,SACzH2qB,EAAMmwlB,YAIRnwlB,EAAMmxlB,cAAgB,EACtBnxlB,EAAMoxlB,cAAgB,MAGxB/zjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,qBAAqB,SAAUwvF,GAChGxvF,EAAMqxlB,gBAEVrxlB,EAAMuxlB,mBAAmB/hgB,MAG3BnyD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,4BAA4B,SAAUwvF,GACvGxvF,EAAMqxlB,gBAEVrxlB,EAAMwxlB,0BAA0BhigB,MAGlCnyD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,+BAA+B,SAAUwvF,GAC1GxvF,EAAMqxlB,gBAEVrxlB,EAAMyxlB,6BAA6BjigB,MAGrCnyD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,qBAAqB,SAAUwvF,GACpG,IAAI1kB,EAAa0kB,EAAMziB,cAAchpH,MACrCi8C,EAAMowlB,0BAA2B,EAEjCpwlB,EAAM6qE,cAAcC,EAAY,CAC9Bv3F,OAAQ,iBAGVysB,EAAM0xlB,gBAGRr0jB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,gBAAgB,SAAUwvF,GAC/F,IAAImigB,EAAe3xlB,EAAMzN,MACrB07lB,EAAe0D,EAAa1D,aAC5B76gB,EAAUu+gB,EAAav+gB,QAEvBpzE,EAAMzN,MAAM6+D,SACdpxD,EAAMzN,MAAM6+D,QAAQo+B,GAGtBxvF,EAAMowlB,0BAA2B,EAEjCpwlB,EAAM4xlB,wBAAwB,CAC5BpigB,MAAO,QACPj+H,QAAS,CACP08nB,aAAcA,EACd76gB,QAASA,KAIbpzE,EAAMirE,SAAS,CACbmT,WAAW,KAGTp+E,EAAM+wlB,gBAAkB/wlB,EAAMzN,MAAM48lB,kBACtCnvlB,EAAM8wlB,SAAS,SAGjB9wlB,EAAM+wlB,gBAAiB,KAGzB1zjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,eAAe,SAAUwvF,GAC1FxvF,EAAMiwlB,aAAejwlB,EAAMiwlB,YAAYhinB,SAASogB,SAASwgR,eAC3D7uQ,EAAM4pR,SAAS72P,SAKb/yB,EAAMzN,MAAMw7F,QACd/tF,EAAMzN,MAAMw7F,OAAOyB,GAGrBxvF,EAAM6qE,cAAc,GAAI,CACtBt3F,OAAQ,eAGVysB,EAAMqwlB,cAENrwlB,EAAMirE,SAAS,CACb2khB,aAAc,KACdxxgB,WAAW,QAIf/gD,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,iBAAiB,SAAU2vlB,GAC5F3vlB,EAAM6wlB,kBAAoB7wlB,EAAM3Q,MAAMsgmB,gBAAkBA,GAI5D3vlB,EAAMirE,SAAS,CACb0khB,cAAeA,OAInBtyjB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,6BAA6B,WAClG,IAAI6xlB,EAAe7xlB,EAAMzN,MACrBu/lB,EAAsBD,EAAaC,oBACnC1+gB,EAAUy+gB,EAAaz+gB,QAC3B,YAA4BjvH,IAAxB2toB,EAA0C1+gB,EACvC0+gB,KAGTz0jB,YAAgBqtC,YAAuBA,YAAuB1qE,IAAS,aAAa,SAAUwvF,GAC5F,IAAIuigB,EAAe/xlB,EAAMzN,MACrB6gF,EAAU2+gB,EAAa3+gB,QACvBovT,EAAwBuvN,EAAavvN,sBACrCysN,EAAoB8C,EAAa9C,kBACjCnkhB,EAAainhB,EAAajnhB,WAC1B6I,EAAco+gB,EAAap+gB,YAC3B0K,EAAa0zgB,EAAa1zgB,WAC1BpL,EAAa8+gB,EAAa9+gB,WAC1BuW,EAAYuogB,EAAavogB,UACzB+lgB,EAAkBwC,EAAaxC,gBAC/BJ,EAAkB4C,EAAa5C,gBAC/B6C,EAAehylB,EAAM3Q,MACrBsgmB,EAAgBqC,EAAarC,cAC7BC,EAAeoC,EAAapC,aAC5BrF,EAAcyH,EAAazH,YAC/B,IAAIlsgB,IAEqB,oBAAdmL,IACTA,EAAUgG,IAENA,EAAMu7K,mBAHZ,CAWA,OAFA/qQ,EAAM6wlB,kBAAmB,EAEjBrhgB,EAAM7iI,KACZ,IAAK,YACH,IAAKymH,GAAWtI,EAAY,OAE5B9qE,EAAMiylB,WAAW,YAEjB,MAEF,IAAK,aACH,IAAK7+gB,GAAWtI,EAAY,OAE5B9qE,EAAMiylB,WAAW,QAEjB,MAEF,IAAK,SACL,IAAK,YACH,GAAInnhB,EAAY,OAEhB,GAAI8khB,EACF5vlB,EAAMkylB,YAAYtC,OACb,CACL,IAAKptN,EAAuB,OAExBpvT,EACFpzE,EAAMmylB,WACGx+gB,GACT3zE,EAAMixlB,aAIV,MAEF,IAAK,MACH,GAAIjxlB,EAAMkxlB,YAAa,OAEvB,GAAI1hgB,EAAM07K,WAAaj4L,IAAes8gB,IAAoBI,GAE1DR,GAAmBnvlB,EAAMuwlB,iBAAiBZ,EAAepF,GACvD,OAGFvqlB,EAAMwqlB,aAAamF,GAEnB,MAEF,IAAK,QACH,GAAsB,MAAlBnggB,EAAM23K,QAGR,MAGF,GAAIl0L,EAAY,CACd,IAAK08gB,EAAe,OACpB,GAAI3vlB,EAAMkxlB,YAAa,OAEvBlxlB,EAAMwqlB,aAAamF,GAEnB,MAGF,OAEF,IAAK,SACC18gB,GACFjzE,EAAMowlB,0BAA2B,EAEjCpwlB,EAAM6qE,cAAc,GAAI,CACtBt3F,OAAQ,eAGVysB,EAAMqwlB,eACG18gB,GAAes7gB,GACxBjvlB,EAAMixlB,aAGR,MAEF,IAAK,IAEH,GAAInmhB,EACF,OAGF,IAAKmI,EAAY,CACfjzE,EAAM8wlB,SAAS,SAEf,MAGF,IAAKnB,EAAe,OAEpB3vlB,EAAMwqlB,aAAamF,GAEnB,MAEF,IAAK,UACC18gB,EACFjzE,EAAMoylB,YAAY,MAElBpylB,EAAM8wlB,SAAS,QAGjB,MAEF,IAAK,YACC79gB,EACFjzE,EAAMoylB,YAAY,QAElBpylB,EAAM8wlB,SAAS,SAGjB,MAEF,IAAK,SACH,IAAK79gB,EAAY,OAEjBjzE,EAAMoylB,YAAY,UAElB,MAEF,IAAK,WACH,IAAKn/gB,EAAY,OAEjBjzE,EAAMoylB,YAAY,YAElB,MAEF,IAAK,OACH,IAAKn/gB,EAAY,OAEjBjzE,EAAMoylB,YAAY,SAElB,MAEF,IAAK,MACH,IAAKn/gB,EAAY,OAEjBjzE,EAAMoylB,YAAY,QAElB,MAEF,QACE,OAGJ5igB,EAAM/F,qBAGR,IAAI1lI,EAAQ+vH,EAAO/vH,MACnBi8C,EAAMqylB,gBAAkBhsW,YAAWrmP,EAAMqylB,gBAAiBpjS,KAAe9kV,KAAKugG,YAAuBA,YAAuB1qE,KAE5HA,EAAMqylB,gBAAgBv+gB,EAAO3uE,YAE7BnF,EAAM4wlB,eAAiB,iBAAmB5wlB,EAAMzN,MAAMi9lB,cAAgBA,GAEtE,IAAI8C,EAAex1O,YAAW/4Z,GAE1BwuoB,EAAez+gB,EAAOb,WAAajzE,EAAMwylB,iBAAiB1+gB,EAAQw+gB,GAAgB,CACpF7ngB,OAAQ,GACRilO,UAAW,IAKb,OAFA1vT,EAAM3Q,MAAMygmB,YAAcyC,EAC1BvylB,EAAM3Q,MAAMk7lB,YAAc+H,EACnBtylB,EA2gCT,OA1uDAkgC,YAAUiqC,EAAQI,GAkuBlBzqE,YAAaqqE,EAAQ,CAAC,CACpBx9G,IAAK,oBACL5I,MAAO,WACLsE,KAAKoqoB,4BACLpqoB,KAAKqqoB,wBAEDrqoB,KAAKkqC,MAAMy8lB,mBAAqB3gmB,UAAYA,SAASgjE,kBAEvDhjE,SAASgjE,iBAAiB,SAAUhpG,KAAKw/c,UAAU,GAGjDx/c,KAAKkqC,MAAMitR,WACbn3T,KAAK6noB,eAGR,CACDvjoB,IAAK,4BACL5I,MAAO,SAAmC2nH,GACxC,IAAIinhB,EAAetqoB,KAAKkqC,MACpB8B,EAAUs+lB,EAAat+lB,QACvBtwC,EAAQ4uoB,EAAa5uoB,MACrBkvH,EAAa0/gB,EAAa1/gB,WAC1BnI,EAAa6nhB,EAAa7nhB,WAI9B,GAFAziH,KAAKgqoB,gBAAgB3mhB,EAAUvmE,YAE3BumE,EAAU3nH,QAAUA,GAAS2nH,EAAUr3E,UAAYA,GAAWq3E,EAAUuH,aAAeA,GAAcvH,EAAUZ,aAAeA,EAAY,CAC5I,IAAIy/gB,EAAcztO,YAAWpxS,EAAU3nH,OACnC+roB,EAAcpkhB,EAAUuH,WAAa5qH,KAAKmqoB,iBAAiB9mhB,EAAW6+gB,GAAe,CACvF9/f,OAAQ,GACRilO,UAAW,IAETkgS,EAAevnoB,KAAKuqoB,oBAAoBrI,GACxCoF,EAAgBtnoB,KAAKwqoB,qBAAqB/C,EAAYpgS,WAC1DrnW,KAAK4iH,SAAS,CACZ6khB,YAAaA,EACbvF,YAAaA,EACboF,cAAeA,EACfC,aAAcA,IAKmB,MAAjCvnoB,KAAK+noB,2BACP/noB,KAAK4iH,SAAS,CACZ4khB,cAAexnoB,KAAK+noB,kCAEf/noB,KAAK+noB,4BAGf,CACDzjoB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIoshB,EAAezqoB,KAAKkqC,MACpB8rF,EAAay0gB,EAAaz0gB,WAC1BpL,EAAa6/gB,EAAa7/gB,WAC1BmL,EAAY/1H,KAAKgnC,MAAM+uF,WAG3BA,IAAcC,GAAc3X,EAAU2X,YACtCD,GAAanL,IAAevM,EAAUuM,aACpC5qH,KAAK6noB,aAIH7noB,KAAK4noB,aAAe5noB,KAAK2noB,kBAAoB3noB,KAAK0qoB,+BACpDx1O,YAAel1Z,KAAK4noB,YAAa5noB,KAAK2noB,kBAGxC3noB,KAAK0qoB,+BAAgC,IAEtC,CACDpmoB,IAAK,uBACL5I,MAAO,WACLsE,KAAK2qoB,2BACL3qoB,KAAK4qoB,uBACL5kmB,SAASijE,oBAAoB,SAAUjpG,KAAKw/c,UAAU,KAEvD,CACDl7c,IAAK,aAIL5I,MAAO,WACLsE,KAAKkqC,MAAMm/lB,eAEZ,CACD/koB,IAAK,cACL5I,MAAO,WACL,IAAImvoB,EAAgB7qoB,KAAKkqC,MACrB07lB,EAAeiF,EAAcjF,aAC7B76gB,EAAU8/gB,EAAc9/gB,QAC5B/qH,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,QACPj+H,QAAS,CACP08nB,aAAcA,EACd76gB,QAASA,KAGb/qH,KAAKwiH,cAAc,GAAI,CACrBt3F,OAAQ,eAEVlrB,KAAKkqC,MAAM89lB,gBAEZ,CACD1joB,IAAK,gBACL5I,MAAO,SAAuBmU,EAAUyyG,GACtCtiH,KAAKkqC,MAAMs4E,cAAc3yG,EAAUyyG,KAKpC,CACDh+G,IAAK,aACL5I,MAAO,WACAsE,KAAKuhU,UACVvhU,KAAKuhU,SAAS72P,UAEf,CACDpmE,IAAK,YACL5I,MAAO,WACAsE,KAAKuhU,UACVvhU,KAAKuhU,SAASp3P,SAGf,CACD7lE,IAAK,WACL5I,MAAO,SAAkBquoB,GACvB,IAAIe,EAAe9qoB,KAAKgnC,MACpBygmB,EAAcqD,EAAarD,YAC3BvF,EAAc4I,EAAa5I,YAC3BnsgB,EAAY+0gB,EAAa/0gB,UACzBhL,EAAU/qH,KAAKkqC,MAAM6gF,QACrBgghB,EAA8B,UAAhBhB,EAA0B,EAAItC,EAAYpgS,UAAUxlW,OAAS,EAE/E,IAAKkpH,EAAS,CACZ,IAAImnQ,EAAgBu1Q,EAAYpgS,UAAU7mV,QAAQ0hnB,EAAY,IAE1DhwQ,GAAiB,IACnB64Q,EAAc74Q,GAKlBlyX,KAAK0qoB,gCAAkC30gB,GAAa/1H,KAAK4noB,aACzD5noB,KAAK+noB,0BAA2B,EAChC/noB,KAAKqpoB,aACLrpoB,KAAK4iH,SAAS,CACZ2khB,aAAc,KACdD,cAAeG,EAAYpgS,UAAU0jS,KAEvC/qoB,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,WAGV,CACD7iI,IAAK,aACL5I,MAAO,SAAoBg+E,GACzB,IAAIsxjB,EAAgBhroB,KAAKkqC,MACrB6gF,EAAUighB,EAAcjghB,QACxB66gB,EAAeoF,EAAcpF,aAC7BqF,EAAejroB,KAAKgnC,MACpBk7lB,EAAc+I,EAAa/I,YAC3BqF,EAAe0D,EAAa1D,aAEhC,GAAKx8gB,EAAL,CACA/qH,KAAK4iH,SAAS,CACZ0khB,cAAe,OAEjB,IAAI4D,EAAehJ,EAAY1hnB,QAAQ+mnB,GAElCA,IACH2D,GAAgB,EAChBlroB,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,WAIX,IAAI6kB,EAAYk2e,EAAYrgoB,OAAS,EACjCspoB,GAAa,EACjB,GAAKjJ,EAAYrgoB,OAAjB,CAEA,OAAQ63E,GACN,IAAK,WAGDyxjB,EAFmB,IAAjBD,EAEU,GACe,IAAlBA,EAEGl/e,EAEAk/e,EAAe,EAG7B,MAEF,IAAK,OACCA,GAAgB,GAAKA,EAAel/e,IACtCm/e,EAAYD,EAAe,IAMd,IAAfC,GACFnroB,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,QACPj+H,QAAS,CACP08nB,aAAcA,EACd76gB,QAASA,KAKf/qH,KAAK4iH,SAAS,CACZ4khB,eAA8B,IAAf2D,EACf5D,aAAcrF,EAAYiJ,SAG7B,CACD7moB,IAAK,cACL5I,MAAO,WACL,IAAIg+E,EAAYh2E,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,QAChFsjoB,EAAWhnoB,KAAKkqC,MAAM88lB,SACtBoE,EAAeproB,KAAKgnC,MACpBsgmB,EAAgB8D,EAAa9D,cAC7BG,EAAc2D,EAAa3D,YAC3Bz7lB,EAAUy7lB,EAAYpgS,UAC1B,GAAKr7T,EAAQnqC,OAAb,CACA,IAAIspoB,EAAY,EAEZD,EAAel/lB,EAAQxrB,QAAQ8mnB,GAE9BA,IACH4D,GAAgB,EAChBlroB,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,UAIO,OAAdztD,EACFyxjB,EAAYD,EAAe,EAAIA,EAAe,EAAIl/lB,EAAQnqC,OAAS,EAC5C,SAAd63E,EACTyxjB,GAAaD,EAAe,GAAKl/lB,EAAQnqC,OAClB,WAAd63E,GACTyxjB,EAAYD,EAAelE,GACX,IAAGmE,EAAY,GACR,aAAdzxjB,GACTyxjB,EAAYD,EAAelE,GACXh7lB,EAAQnqC,OAAS,IAAGspoB,EAAYn/lB,EAAQnqC,OAAS,GAC1C,SAAd63E,IACTyxjB,EAAYn/lB,EAAQnqC,OAAS,GAG/B7B,KAAK0qoB,+BAAgC,EACrC1qoB,KAAK4iH,SAAS,CACZ0khB,cAAet7lB,EAAQm/lB,GACvB5D,aAAc,OAEhBvnoB,KAAKupoB,wBAAwB,CAC3BpigB,MAAO,OACPj+H,QAAS,CACP8sH,WAAYosgB,EAAiBp2lB,EAAQm/lB,UAI1C,CACD7moB,IAAK,WAIL5I,MAAO,WAEL,OAAKsE,KAAKkqC,MAAMgxC,MAOgB,oBAArBl7E,KAAKkqC,MAAMgxC,MACbl7E,KAAKkqC,MAAMgxC,MAAM4hI,GAKnB9kK,YAAc,GAAI8kK,EAAc98M,KAAKkqC,MAAMgxC,OAZzC4hI,IAcV,CACDx4M,IAAK,iBACL5I,MAAO,WACL,IAAIktoB,EAAa5ooB,KAAK4ooB,WAClB9sV,EAAY97S,KAAK87S,UACjB6V,EAAW3xT,KAAK2xT,SAChBwwU,EAAenioB,KAAKmioB,aACpBj4lB,EAAQlqC,KAAKkqC,MACbojY,EAAkBpjY,EAAMojY,gBACxBviT,EAAU7gF,EAAM6gF,QAChB+7O,EAAQ58T,EAAM48T,MACd96T,EAAU9B,EAAM8B,QAChBk2lB,EAAclioB,KAAKgnC,MAAMk7lB,YACzB1+S,EAAWxjV,KAAKwjV,WAOpB,MAAO,CACL/gL,GAFOx7C,IAAWnlG,KAAK,KAAMwrZ,GAG7Bs7N,WAAYA,EACZ9sV,UAAWA,EACXpuH,SATa,WACb,OAAOw0c,GASP1+S,SAAUA,EACVz4N,QAASA,EACT+7O,MAAOA,EACP96T,QAASA,EACTm2lB,aAAcA,EACdxwU,SAAUA,EACV1pM,YAAa/9E,EACbgxC,MAAOl7E,KAAKqroB,cAGf,CACD/moB,IAAK,sBACL5I,MAAO,SAA6B4voB,GAClC,GAAItroB,KAAKiooB,wBAEP,OADAjooB,KAAKiooB,yBAA0B,EACxB,KAGT,IAAIsD,EAAevroB,KAAKgnC,MACpBugmB,EAAegE,EAAahE,aAE5BiE,EADkBD,EAAarJ,YACI1hnB,QAAQ+mnB,GAE/C,GAAIiE,GAAoB,EAAG,CAGzB,GAFuBF,EAAgB9qnB,QAAQ+mnB,IAEvB,EAEtB,OAAOA,EACF,GAAIiE,EAAmBF,EAAgBzpoB,OAG5C,OAAOypoB,EAAgBE,GAI3B,OAAO,OAER,CACDlnoB,IAAK,uBACL5I,MAAO,SAA8BswC,GACnC,IAAIy/lB,EAAoBzroB,KAAKgnC,MAAMsgmB,cACnC,OAAOmE,GAAqBz/lB,EAAQxrB,QAAQirnB,IAAsB,EAAIA,EAAoBz/lB,EAAQ,KAEnG,CACD1nC,IAAK,WACL5I,MAAO,WAEL,OADkBsE,KAAKgnC,MAAMk7lB,YACVrgoB,OAAS,IAE7B,CACDyC,IAAK,aACL5I,MAAO,WACL,QAASsE,KAAKgnC,MAAMygmB,YAAYrlgB,OAAOvgI,SAExC,CACDyC,IAAK,eACL5I,MAAO,WACL,OAAOsE,KAAKgnC,MAAMygmB,YAAYpgS,UAAUxlW,SAEzC,CACDyC,IAAK,cACL5I,MAAO,WACL,IAAIgwoB,EAAgB1roB,KAAKkqC,MACrBohF,EAAcoghB,EAAcpghB,YAC5BP,EAAU2ghB,EAAc3ghB,QAG5B,YAAoBjvH,IAAhBwvH,EAAkCP,EAC/BO,IAER,CACDhnH,IAAK,mBACL5I,MAAO,SAA0B8kH,EAAQ0hhB,GACvC,MAA8C,oBAAhClioB,KAAKkqC,MAAMk4lB,kBAAkCpioB,KAAKkqC,MAAMk4lB,iBAAiB5hhB,EAAQ0hhB,KAEhG,CACD59nB,IAAK,mBACL5I,MAAO,SAA0B8kH,EAAQ0hhB,GACvC,IAAI9+gB,EAASpjH,KAEb,GAAIkioB,EAAY1hnB,QAAQggG,IAAW,EAAG,OAAO,EAE7C,GAA2C,oBAAhCxgH,KAAKkqC,MAAMg+lB,iBACpB,OAAOlooB,KAAKkqC,MAAMg+lB,iBAAiB1nhB,EAAQ0hhB,GAG7C,IAAI14a,EAAYxpN,KAAKipH,eAAezI,GACpC,OAAO0hhB,EAAYz0nB,MAAK,SAAUzK,GAChC,OAAOogH,EAAO6F,eAAejmH,KAAOwmN,OAGvC,CACDllN,IAAK,eACL5I,MAAO,SAAsB8kH,EAAQiC,GACnC,OAAOziH,KAAKkqC,MAAMy3E,cAAe3hH,KAAKkqC,MAAMy3E,aAAanB,EAAQiC,KAElE,CACDn+G,IAAK,oBACL5I,MAAO,SAA2Bs/C,EAAM9xC,GACtC,GAA4C,oBAAjClJ,KAAKkqC,MAAMk+E,kBAAkC,CACtD,IAAI3F,EAAaziH,KAAKkqC,MAAMu4E,WACxBy/gB,EAAclioB,KAAKgnC,MAAMk7lB,YAC7B,OAAOlioB,KAAKkqC,MAAMk+E,kBAAkBptE,EAAM,CACxC9xC,QAASA,EACTu5G,WAAYA,EACZy/gB,YAAaA,IAGf,OAAOlioB,KAAKqhI,eAAermF,KAG9B,CACD12C,IAAK,mBACL5I,MAAO,SAA0Bs/C,GAC/B,OAAOh7C,KAAKkqC,MAAM28lB,iBAAiB7rlB,KAKpC,CACD12C,IAAK,4BAIL5I,MAAO,WACDsqC,UAAYA,SAASgjE,mBACvBhjE,SAASgjE,iBAAiB,mBAAoBhpG,KAAK2roB,oBAAoB,GACvE3lmB,SAASgjE,iBAAiB,iBAAkBhpG,KAAK4roB,kBAAkB,MAGtE,CACDtnoB,IAAK,2BACL5I,MAAO,WACDsqC,UAAYA,SAASijE,sBACvBjjE,SAASijE,oBAAoB,mBAAoBjpG,KAAK2roB,oBACtD3lmB,SAASijE,oBAAoB,iBAAkBjpG,KAAK4roB,qBAGvD,CACDtnoB,IAAK,wBAIL5I,MAAO,WACDsqC,UAAYA,SAASgjE,mBACvBhjE,SAASgjE,iBAAiB,aAAchpG,KAAKiqR,cAAc,GAC3DjkP,SAASgjE,iBAAiB,YAAahpG,KAAKyloB,aAAa,GACzDz/lB,SAASgjE,iBAAiB,WAAYhpG,KAAKkqR,YAAY,MAG1D,CACD5lR,IAAK,uBACL5I,MAAO,WACDsqC,UAAYA,SAASijE,sBACvBjjE,SAASijE,oBAAoB,aAAcjpG,KAAKiqR,cAChDjkP,SAASijE,oBAAoB,YAAajpG,KAAKyloB,aAC/Cz/lB,SAASijE,oBAAoB,WAAYjpG,KAAKkqR,eAGjD,CACD5lR,IAAK,mBAIL5I,MAAO,SAA0BwuC,EAAOg4lB,GACtC,IAAI3+gB,EAASvjH,KAET6roB,EAAoB3hmB,EAAMu4E,WAC1BA,OAAmC,IAAtBophB,EAA+B,GAAKA,EACjD7/lB,EAAU9B,EAAM8B,QAEhB8/lB,EAAW,SAAkBtrhB,EAAQv/E,GACvC,IAAI+0F,EAAazS,EAAO6+gB,iBAAiB5hhB,EAAQ0hhB,GAE7Cj8gB,EAAa1C,EAAO2khB,iBAAiB1nhB,EAAQ0hhB,GAE7CphmB,EAAQyiF,EAAO8d,eAAe7gB,GAE9B9kH,EAAQ6nH,EAAO0F,eAAezI,GAElC,KAAI+C,EAAOwohB,6BAA+B9lhB,IAAe1C,EAAO5B,aAAa,CAC3E7gF,MAAOA,EACPplC,MAAOA,EACPs/C,KAAMwlE,GACLiC,IAJH,CAQA,IAAIuphB,EAAUh2gB,OAAal6H,EAAY,WACrC,OAAOynH,EAAO0ohB,cAAczrhB,IAE1Bq+S,EAAW7oS,OAAal6H,EAAY,WACtC,OAAOynH,EAAO4+gB,aAAa3hhB,IAEzB0mV,EAAW,GAAG57b,OAAOi4G,EAAO2ohB,aAAa,UAAW,KAAK5goB,OAAO21B,GACpE,MAAO,CACL60F,WAAY,CACV70F,GAAIima,EACJriV,QAASg6S,EACTstO,YAAaH,EACbnjX,YAAamjX,EACb1ngB,UAAW,GAEbtpF,KAAMwlE,EACNwV,WAAYA,EACZ/P,WAAYA,EACZ3hH,IAAK4ic,EACLpma,MAAOA,EACP5gC,KAAM,SACNxE,MAAOA,KAIX,OAAOswC,EAAQrgC,QAAO,SAAUutI,EAAKt/D,EAAMsoV,GACzC,GAAItoV,EAAK5tC,QAAS,CAEXu3E,EAAO6ohB,YAAW7ohB,EAAO6ohB,WAAY,GAC1C,IACI9lmB,EADQszC,EAAK5tC,QACIhjC,KAAI,SAAUkxC,EAAOl3C,GACxC,IAAIw9G,EAASsrhB,EAAS5xlB,EAAO,GAAG5uC,OAAO42Z,EAAW,KAAK52Z,OAAOtI,IAE9D,OADIw9G,GAAQ04B,EAAImuN,UAAUj7V,KAAK8tC,GACxBsmE,KACNj1G,OAAOlO,SAEV,GAAIipC,EAASzkC,OAAQ,CACnB,IAAIwqoB,EAAU,GAAG/goB,OAAOi4G,EAAO2ohB,aAAa,SAAU,KAAK5goB,OAAO42Z,GAClEhpR,EAAI9W,OAAOh2H,KAAK,CACdlM,KAAM,QACNoE,IAAK+noB,EACLrxlB,KAAM4+B,EACN5tC,QAAS1F,SAGR,CACL,IAAIk6E,EAASsrhB,EAASlyjB,EAAM,GAAGtuE,OAAO42Z,IAElC1hT,IACF04B,EAAI9W,OAAOh2H,KAAKo0G,GAChB04B,EAAImuN,UAAUj7V,KAAKwtE,IAIvB,OAAOs/D,IACN,CACD9W,OAAQ,GACRilO,UAAW,OAMd,CACD/iW,IAAK,2BACL5I,MAAO,WACL,IAAI4woB,EAAetsoB,KAAKgnC,MACpBqgmB,EAAkBiF,EAAajF,gBAC/BnF,EAAcoK,EAAapK,YAC3BqF,EAAe+E,EAAa/E,aAC5BD,EAAgBgF,EAAahF,cAC7BiF,EAAgBvsoB,KAAKkqC,MACrB8B,EAAUugmB,EAAcvgmB,QACxB4+E,EAAa2hhB,EAAc3hhB,WAC3BnI,EAAa8phB,EAAc9phB,WAC3BwkhB,EAAqBsF,EAActF,mBAEnCuF,EAAkBjF,EAx8CA,SAA+BlhmB,GACzD,IAAIkhmB,EAAelhmB,EAAKkhmB,aACpBlmgB,EAAiBh7F,EAAKg7F,eACtB6ggB,EAAc77lB,EAAK67lB,YACvB,MAAO,SAAS52nB,OAAO+1H,EAAekmgB,GAAe,cAAcj8nB,OAAO42nB,EAAY1hnB,QAAQ+mnB,GAAgB,EAAG,QAAQj8nB,OAAO42nB,EAAYrgoB,OAAQ,KAo8C3G4qoB,CAAsB,CACzDlF,aAAcA,EACdlmgB,eAAgBrhI,KAAKqhI,eACrB6ggB,YAAaA,IACV,GAEDwK,EAAmBpF,GAAiB18gB,EAx8CjB,SAAgCjiF,GAC3D,IAAI2+lB,EAAgB3+lB,EAAM2+lB,cACtBjmgB,EAAiB14F,EAAM04F,eACvBr1F,EAAUrD,EAAMqD,QACpB,MAAO,UAAU1gC,OAAO+1H,EAAeimgB,GAAgB,YAAYh8nB,OAAOg8nB,EAActxgB,WAAa,YAAc,GAAI,MAAM1qH,OAAO0gC,EAAQxrB,QAAQ8mnB,GAAiB,EAAG,QAAQh8nB,OAAO0gC,EAAQnqC,OAAQ,KAo8C9I8qoB,CAAuB,CAC1ErF,cAAeA,EACfjmgB,eAAgBrhI,KAAKqhI,eACrBr1F,QAASA,IACN,GAED4gmB,EAx8Ce,SAA4Bn9lB,GACnD,IAAIgzE,EAAahzE,EAAMgzE,WACnBoqhB,EAAsBp9lB,EAAMo9lB,oBAChC,MAAO,GAAGvhoB,OAAOuhoB,GAAqBvhoB,OAAOm3G,EAAa,oBAAsBA,EAAa,GAAI,KAq8C5EqqhB,CAAmB,CAClCrqhB,WAAYA,EACZoqhB,oBAAqB5F,EAAmB,CACtC7xnB,MAAOpV,KAAK+soB,mBAGhB,MAAO,GAAGzhoB,OAAOkhoB,EAAiB,KAAKlhoB,OAAOohoB,EAAkB,KAAKphoB,OAAOshoB,EAAY,KAAKthoB,OAAO+7nB,KAErG,CACD/ioB,IAAK,cACL5I,MAAO,WACL,IAAIsxoB,EAAgBhtoB,KAAKkqC,MACrB8rF,EAAag3gB,EAAch3gB,WAC3B4vgB,EAAeoH,EAAcpH,aAC7BqH,EAAUD,EAAcC,QACxBxqhB,EAAauqhB,EAAcvqhB,WAC3B6hB,EAAW0ogB,EAAc1ogB,SACzB9f,EAAQxkH,KAAK88C,WAAW0nE,MACxBgjhB,EAAgBxnoB,KAAKgnC,MAAMwgmB,cAC3BvmmB,EAAKgsmB,GAAWjtoB,KAAKksoB,aAAa,SAEtC,IAAKtG,EAEH,OAAOnhmB,IAAMwB,cAAc68lB,EAAY,CACrC7hmB,GAAIA,EACJisO,SAAUltQ,KAAKktoB,YACfxngB,OAAQ1lI,KAAKmtoB,YACb3xhB,SAAUizC,IACV1lD,QAAS/oG,KAAKotoB,aACdlhF,UAAU,EACVhvc,SAAU8Y,EACVsO,SAAUA,EACV5oI,MAAO,KAKX,IAAI2xoB,EAAiB,CACnB,oBAAqB,OACrB,aAAcrtoB,KAAKkqC,MAAM,cACzB,kBAAmBlqC,KAAKkqC,MAAM,oBAE5BojmB,EAAoBttoB,KAAKutoB,YACzB9qe,EAAK6qe,EAAkB7qe,GACvBvnF,EAAQoyjB,EAAkBpyjB,MAC1B+sC,EAAcqlhB,EAAkBrlhB,YACpC,OAAOxjF,IAAMwB,cAAcu+E,EAAO16E,YAAS,CACzC0jmB,eAAgB,OAChB7uhB,aAAc,MACd8uhB,YAAa,MACbhre,GAAIA,EACJq5I,UAAW97S,KAAK87S,UAChB76Q,GAAIA,EACJisO,SAAUltQ,KAAKktoB,YACfl3gB,WAAYA,EACZkzO,SAAUs+R,EACV9hgB,OAAQ1lI,KAAKmtoB,YACb3xhB,SAAUx7G,KAAK0iH,kBACf3Z,QAAS/oG,KAAKotoB,aACdnlhB,YAAaA,EACbylhB,WAAY,QACZppgB,SAAUA,EACVppD,MAAOA,EACPh7E,KAAM,OACNxE,MAAO+mH,GACN4qhB,MAEJ,CACD/ooB,IAAK,2BACL5I,MAAO,WACL,IAAI8rJ,EAASxnJ,KAET2toB,EAAmB3toB,KAAK88C,WACxB6sT,EAAagkS,EAAiBhkS,WAC9Bn+O,EAAsBmihB,EAAiBnihB,oBACvCE,EAAkBiihB,EAAiBjihB,gBACnCg+O,EAAmBikS,EAAiBjkS,iBACpC2B,EAAcsiS,EAAiBtiS,YAC/BF,EAAcwiS,EAAiBxiS,YAC/BoiS,EAAcvtoB,KAAKutoB,YACnBK,EAAgB5toB,KAAKkqC,MACrBkwY,EAA2BwzN,EAAcxzN,yBACzCpkT,EAAa43gB,EAAc53gB,WAC3BjL,EAAU6ihB,EAAc7ihB,QACxBtI,EAAamrhB,EAAcnrhB,WAC3BuI,EAAc4ihB,EAAc5ihB,YAC5B6ihB,EAAe7toB,KAAKgnC,MACpBk7lB,EAAc2L,EAAa3L,YAC3BqF,EAAesG,EAAatG,aAC5BxxgB,EAAY83gB,EAAa93gB,UAE7B,IAAK/1H,KAAKwjV,aAAe42F,EACvB,OAAO33T,EAAa,KAAOh+E,IAAMwB,cAAcklU,EAAarhU,YAAS,GAAIyjmB,EAAa,CACpFjpoB,IAAK,cACL0xH,WAAYA,EACZD,UAAWA,IACT/K,GAGN,GAAID,EA2BF,OA1BmBm3gB,EAAYl5nB,KAAI,SAAUs4H,GAC3C,IAAIwsgB,EAAkBxsgB,IAAQimgB,EAC9B,OAAO9imB,IAAMwB,cAAc0jU,EAAY7/T,YAAS,GAAIyjmB,EAAa,CAC/DzwlB,WAAY,CACV+sT,UAAWr+O,EACXs+O,MAAOp+O,EACPq+O,OAAQL,GAEV3zO,UAAW+3gB,EACX93gB,WAAYA,EACZ1xH,IAAKkjJ,EAAOv+B,eAAeqY,GAC3BsoO,YAAa,CACX/kP,QAAS,WACP,OAAO2iC,EAAOqif,YAAYvogB,IAE5B4oJ,WAAY,WACV,OAAO1iI,EAAOqif,YAAYvogB,IAE5BkgM,YAAa,SAAqBp5T,GAChCA,EAAEg5H,iBACFh5H,EAAE87G,oBAGNlpE,KAAMsmF,IACJkmB,EAAOp/B,kBAAkBkZ,EAAK,aAKtC,GAAI7e,EACF,OAAO,KAGT,IAAI4iN,EAAc68T,EAAY,GAC9B,OAAOz9lB,IAAMwB,cAAcolU,EAAavhU,YAAS,GAAIyjmB,EAAa,CAChEvylB,KAAMqqR,EACNrvM,WAAYA,IACVh2H,KAAKooH,kBAAkBi9M,EAAa,YAEzC,CACD/gU,IAAK,uBACL5I,MAAO,WACL,IAAI+uW,EAAiBzqW,KAAK88C,WAAW2tT,eACjC8iS,EAAcvtoB,KAAKutoB,YACnBQ,EAAgB/toB,KAAKkqC,MACrB8rF,EAAa+3gB,EAAc/3gB,WAC3BjT,EAAYgrhB,EAAchrhB,UAC1BgT,EAAY/1H,KAAKgnC,MAAM+uF,UAE3B,IAAK/1H,KAAKsrH,gBAAkBm/O,GAAkBz0O,IAAeh2H,KAAKwjV,YAAczgO,EAC9E,OAAO,KAGT,IAAI+S,EAAa,CACf0rM,YAAaxhU,KAAKmpoB,0BAClBj/W,WAAYlqR,KAAKguoB,yBACjB,cAAe,QAEjB,OAAOvpmB,IAAMwB,cAAcwkU,EAAgB3gU,YAAS,GAAIyjmB,EAAa,CACnEz3gB,WAAYA,EACZC,UAAWA,OAGd,CACDzxH,IAAK,yBACL5I,MAAO,WACL,IAAI6sW,EAAmBvoW,KAAK88C,WAAWyrT,iBACnCglS,EAAcvtoB,KAAKutoB,YACnBU,EAAgBjuoB,KAAKkqC,MACrB8rF,EAAai4gB,EAAcj4gB,WAC3BjT,EAAYkrhB,EAAclrhB,UAC1BgT,EAAY/1H,KAAKgnC,MAAM+uF,UAC3B,IAAKwyO,IAAqBxlP,EAAW,OAAO,KAI5C,OAAOt+E,IAAMwB,cAAcsiU,EAAkBz+T,YAAS,GAAIyjmB,EAAa,CACrEz3gB,WAJe,CACf,cAAe,QAIfE,WAAYA,EACZD,UAAWA,OAGd,CACDzxH,IAAK,2BACL5I,MAAO,WACL,IAAIwyoB,EAAoBluoB,KAAK88C,WACzB4tE,EAAoBwjhB,EAAkBxjhB,kBACtCD,EAAqByjhB,EAAkBzjhB,mBAE3C,IAAKC,IAAsBD,EAAoB,OAAO,KACtD,IAAI8ihB,EAAcvtoB,KAAKutoB,YACnBv3gB,EAAah2H,KAAKkqC,MAAM8rF,WACxBD,EAAY/1H,KAAKgnC,MAAM+uF,UAC3B,OAAOtxF,IAAMwB,cAAcwkF,EAAoB3gF,YAAS,GAAIyjmB,EAAa,CACvEv3gB,WAAYA,EACZD,UAAWA,OAGd,CACDzxH,IAAK,0BACL5I,MAAO,WACL,IAAIgvH,EAAoB1qH,KAAK88C,WAAW4tE,kBACxC,IAAKA,EAAmB,OAAO,KAC/B,IAAI6ihB,EAAcvtoB,KAAKutoB,YACnBv3gB,EAAah2H,KAAKkqC,MAAM8rF,WACxBD,EAAY/1H,KAAKgnC,MAAM+uF,UACvBD,EAAa,CACf0rM,YAAaxhU,KAAKopoB,6BAClBl/W,WAAYlqR,KAAKmuoB,4BACjB,cAAe,QAEjB,OAAO1pmB,IAAMwB,cAAcykF,EAAmB5gF,YAAS,GAAIyjmB,EAAa,CACtEz3gB,WAAYA,EACZE,WAAYA,EACZD,UAAWA,OAGd,CACDzxH,IAAK,aACL5I,MAAO,WACL,IAAImyJ,EAAS7tJ,KAETouoB,EAAoBpuoB,KAAK88C,WACzB6tT,EAAQyjS,EAAkBzjS,MAC1BG,EAAesjS,EAAkBtjS,aACjCn6E,EAAOy9W,EAAkBz9W,KACzBz0J,EAAWkygB,EAAkBlygB,SAC7BupO,EAAa2oS,EAAkB3oS,WAC/BH,EAAiB8oS,EAAkB9oS,eACnCD,EAAmB+oS,EAAkB/oS,iBACrC9jO,EAAS6sgB,EAAkB7sgB,OAC3BgsgB,EAAcvtoB,KAAKutoB,YACnBc,EAAeruoB,KAAKgnC,MACpBsgmB,EAAgB+G,EAAa/G,cAC7BG,EAAc4G,EAAa5G,YAC3B6G,EAAgBtuoB,KAAKkqC,MACrBu8lB,EAAoB6H,EAAc7H,kBAClChkhB,EAAa6rhB,EAAc7rhB,WAC3BM,EAAYurhB,EAAcvrhB,UAC1BmI,EAAiBojhB,EAAcpjhB,eAC/Bm5O,EAAgBiqS,EAAcjqS,cAC9BD,EAAgBkqS,EAAclqS,cAC9Bx5O,EAAa0jhB,EAAc1jhB,WAC3B05O,EAAgBgqS,EAAchqS,cAC9BC,EAAe+pS,EAAc/pS,aAC7Bp5O,EAAmBmjhB,EAAcnjhB,iBACjCE,EAAwBijhB,EAAcjjhB,sBACtCD,EAA2BkjhB,EAAcljhB,yBACzCH,EAAmBqjhB,EAAcrjhB,iBACjCsjhB,EAAoBD,EAAcC,kBAClCC,EAAuBF,EAAcE,qBACzC,IAAK5jhB,EAAY,OAAO,KAExB,IAUI6jhB,EAVArsgB,EAAS,SAAgBl4F,GAG3B,IAAI6rF,EAAYuxgB,IAAkBp9lB,EAAM8Q,KAExC,OADA9Q,EAAMgjO,SAAWn3I,EAAY83B,EAAO6gf,yBAAsB5yoB,EACnD2oC,IAAMwB,cAAcs7F,EAAQz3F,YAAS,GAAIyjmB,EAAarjmB,EAAO,CAClE6rF,UAAWA,IACT83B,EAAOzlC,kBAAkBl+E,EAAM8Q,KAAM,UAK3C,GAAIh7C,KAAK2uoB,aACPF,EAAShH,EAAYrlgB,OAAOp5H,KAAI,SAAU4wE,GACxC,GAAkB,UAAdA,EAAK15E,KAAkB,CACd05E,EAAK15E,KAAhB,IACIogJ,EAAQpjG,YAAyB08B,EAAM,CAAC,SAExCg1jB,EAAY,GAAGtjoB,OAAOsuE,EAAKt1E,IAAK,YACpC,OAAOmgC,IAAMwB,cAAc0kU,EAAO7gU,YAAS,GAAIyjmB,EAAajtf,EAAO,CACjEsqN,QAASE,EACTD,aAAc,CACZ5pU,GAAI2tmB,GAEN9tmB,MAAO+sH,EAAOg5e,iBAAiBjtjB,EAAK5+B,QAClC4+B,EAAK5tC,QAAQhjC,KAAI,SAAUw3G,GAC7B,OAAO4hB,EAAO5hB,OAEX,GAAkB,WAAd5mC,EAAK15E,KACd,OAAOkiI,EAAOxoD,WAGb,GAAImpC,EAAW,CACpB,IAAI1xE,EAAU65E,EAAe,CAC3BzI,WAAYA,IAEd,GAAgB,OAAZpxE,EAAkB,OAAO,KAC7Bo9lB,EAAShqmB,IAAMwB,cAAcq/T,EAAgBioS,EAAal8lB,OACrD,CACL,IAAIw9lB,EAAW5jhB,EAAiB,CAC9BxI,WAAYA,IAGd,GAAiB,OAAboshB,EAAmB,OAAO,KAC9BJ,EAAShqmB,IAAMwB,cAAco/T,EAAkBkoS,EAAasB,GAG9D,IAAIC,EAAqB,CACvBzqS,cAAeA,EACfD,cAAeA,EACfE,cAAeA,EACfC,aAAcA,EACdn5O,yBAA0BA,GAExB2jhB,EAActqmB,IAAMwB,cAAci+T,IAAYp6T,YAAS,GAAIyjmB,EAAauB,IAAqB,SAAUtpS,GACzG,IAAI/pW,EAAM+pW,EAAM/pW,IACZuzoB,EAAoBxpS,EAAMd,YAC1Bv6O,EAAY6khB,EAAkB7khB,UAC9B2sJ,EAAYk4X,EAAkBl4X,UAClC,OAAOryO,IAAMwB,cAAc0qP,EAAM7mP,YAAS,GAAIyjmB,EAAauB,EAAoB,CAC7E5hY,SAAUzxQ,EACVq6H,WAAY,CACV0rM,YAAa3zK,EAAOohf,gBACpB9C,YAAat+e,EAAOqhf,iBAEtBnshB,UAAWA,EACXoH,UAAWA,IACT1lF,IAAMwB,cAAcy/lB,EAAoB,CAC1C/yb,UAAW8zb,EACX9B,YAAa4J,EACb9J,eAAgB+J,GACf/pmB,IAAMwB,cAAcm+lB,EAAa,CAClCzxb,UAAWtnF,GACV5mF,IAAMwB,cAAci2F,EAAUpyF,YAAS,GAAIyjmB,EAAa,CACzDrgY,SAAUr/G,EAAOshf,eACjBpshB,UAAWA,EACX+zJ,UAAWA,IACT23X,SAKN,OAAOtjhB,GAAqC,UAAjBo5O,EAA2B9/T,IAAMwB,cAAcw/T,EAAY37T,YAAS,GAAIyjmB,EAAa,CAC9G1nS,SAAU16O,EACV26O,eAAgB9lW,KAAK0noB,WACrBpjS,cAAeA,EACfC,aAAcA,IACZwqS,GAAeA,IAEpB,CACDzqoB,IAAK,kBACL5I,MAAO,WACL,IAAIy0J,EAASnwJ,KAETovoB,EAAgBpvoB,KAAKkqC,MACrBmlmB,EAAYD,EAAcC,UAC1Br5gB,EAAao5gB,EAAcp5gB,WAC3BjL,EAAUqkhB,EAAcrkhB,QACxBv8G,EAAO4goB,EAAc5goB,KACrB0znB,EAAclioB,KAAKgnC,MAAMk7lB,YAC7B,GAAK1znB,IAAQwnH,EAAb,CAEA,GAAIjL,EAAS,CACX,GAAIskhB,EAAW,CACb,IAAI3zoB,EAAQwmoB,EAAYl5nB,KAAI,SAAUs4H,GACpC,OAAO6uB,EAAOlnC,eAAeqY,MAC5B7/G,KAAK4tnB,GACR,OAAO5qmB,IAAMwB,cAAc,QAAS,CAClCz3B,KAAMA,EACNtO,KAAM,SACNxE,MAAOA,IAGT,IAAI+oH,EAAQy9gB,EAAYrgoB,OAAS,EAAIqgoB,EAAYl5nB,KAAI,SAAUs4H,EAAKt+H,GAClE,OAAOyhC,IAAMwB,cAAc,QAAS,CAClC3hC,IAAK,KAAKgH,OAAOtI,GACjBwL,KAAMA,EACNtO,KAAM,SACNxE,MAAOy0J,EAAOlnC,eAAeqY,QAE5B78F,IAAMwB,cAAc,QAAS,CAChCz3B,KAAMA,EACNtO,KAAM,WAER,OAAOukC,IAAMwB,cAAc,MAAO,KAAMw+E,GAG1C,IAAIt7F,EAAS+4mB,EAAY,GAAKlioB,KAAKipH,eAAei5gB,EAAY,IAAM,GAEpE,OAAOz9lB,IAAMwB,cAAc,QAAS,CAClCz3B,KAAMA,EACNtO,KAAM,SACNxE,MAAOytB,OAIZ,CACD7kB,IAAK,mBACL5I,MAAO,WACL,OAAKsE,KAAKgnC,MAAM+uF,UACTtxF,IAAMwB,cAAc48lB,EAAU,CACnC,YAAa,UACZp+lB,IAAMwB,cAAc,IAAK,CAC1BhF,GAAI,wBACH,OAAQjhC,KAAKgnC,MAAMogmB,mBAAoB3imB,IAAMwB,cAAc,IAAK,CACjEhF,GAAI,gBACH,OAAQjhC,KAAKsvoB,6BAPkB,OASnC,CACDhroB,IAAK,SACL5I,MAAO,WACL,IAAI6zoB,EAAoBvvoB,KAAK88C,WACzB4tT,EAAU6kS,EAAkB7kS,QAC5BM,EAAsBukS,EAAkBvkS,oBACxCI,EAAkBmkS,EAAkBnkS,gBACpCpE,EAAiBuoS,EAAkBvoS,eACnCwoS,EAAgBxvoB,KAAKkqC,MACrBkvC,EAAYo2jB,EAAcp2jB,UAC1Bn4C,EAAKuumB,EAAcvumB,GACnB+0F,EAAaw5gB,EAAcx5gB,WAC3BpL,EAAa4khB,EAAc5khB,WAC3BmL,EAAY/1H,KAAKgnC,MAAM+uF,UACvBw3gB,EAAcvtoB,KAAKutoB,YAAcvtoB,KAAKyvoB,iBAC1C,OAAOhrmB,IAAMwB,cAAcmlU,EAAiBthU,YAAS,GAAIyjmB,EAAa,CACpEn0jB,UAAWA,EACX08C,WAAY,CACV70F,GAAIA,EACJkgG,UAAWnhI,KAAKmhI,WAElBnL,WAAYA,EACZD,UAAWA,IACT/1H,KAAK0voB,mBAAoBjrmB,IAAMwB,cAAcykU,EAAS5gU,YAAS,GAAIyjmB,EAAa,CAClFrgY,SAAUltQ,KAAK2voB,cACf75gB,WAAY,CACV0rM,YAAaxhU,KAAKkpoB,mBAClBh/W,WAAYlqR,KAAK4voB,mBAEnB55gB,WAAYA,EACZD,UAAWA,EACXnL,WAAYA,IACVnmF,IAAMwB,cAAc+gU,EAAgBl9T,YAAS,GAAIyjmB,EAAa,CAChEv3gB,WAAYA,IACVh2H,KAAK6voB,2BAA4B7voB,KAAK68U,eAAgBp4S,IAAMwB,cAAc+kU,EAAqBlhU,YAAS,GAAIyjmB,EAAa,CAC3Hv3gB,WAAYA,IACVh2H,KAAK8voB,uBAAwB9voB,KAAK+voB,yBAA0B/voB,KAAKgwoB,2BAA4BhwoB,KAAKiwoB,4BAA6BjwoB,KAAKkwoB,aAAclwoB,KAAKmwoB,uBAIxJruhB,EA3uDT,CA4uDEnoE,aAEFq7B,YAAgB8sC,EAAQ,eAAgBL,I,6BC9wFxC,kCACO,IAAM5hE,EAAsB,sB,oeC6OVmuV,I,WA8EfoiQ,I,WAqFOC,I,WASPC,I,WAIAC,I,WAiEAC,I,WA+FAC,I,WA2CAC,I,WA2CAC,I,WAuLAC,I,WA+BAC,I,WA+CAC,I,YA0CAz5O,I,YAsDAgF,I,YAsHA00O,I,YAmCAC,I,YA+DAC,I,YAMAC,I,YAOAC,I,YAaAC,I,YAcAC,I,YAsCAC,I,YAuCAC,I,YAaAC,I,YAaAC,I,YA+BAC,I,YAgCAC,I,YAmBAC,I,YAmBAC,I,YAyBAC,I,YAsBAC,I,YAmDO14P,I,YAsCP24P,I,YAyCAC,I,YAeAC,I,YAmFAC,I,YAuDAC,I,YAuOAC,I,YAyFAC,I,YAmJAC,I,YAgDOC,I,YA4JPC,I,YA2DAC,I,YAgCAC,I,YAgCAC,I,YAgCAC,I,YA6EAC,I,YAiDAC,I,YA6CAC,I,YA8CAC,I,YA4EAC,I,YA6CAC,I,YAiBAC,I,YAqBAC,I,YAmCAC,I,YAmCAC,I,YAsFAC,I,YA0BAC,I,YA8BAC,I,YAiEAC,I,YAuEO1tC,I,YAwEP2tC,I,YAyBAC,I,YA6BOC,I,YAiDAC,I,YAcPx1Q,I,YA6GAy1Q,I,YAoHAC,I,YA+CAC,I,YA8FAC,I,YAiBAC,I,YAcAC,I,YA8BAC,I,YA8DAC,I,YA8DAC,I,YA+EAtyf,I,YA+COuyf,I,YAoDPC,IAr8HK,SAAU1mQ,KAAV,iEACb,OADa,SACP/hX,YAAYgmE,KAAgBmH,YAAay5iB,IADlC,OAEb,OAFa,SAEPnnnB,YAAWumE,KAAgBqH,8BAA+B25iB,IAFnD,OAGb,OAHa,SAGPvnnB,YAAWumE,KAAgBuH,YAAa05iB,IAHjC,OAIb,OAJa,SAIPxnnB,YAAWumE,KAAgB0ijB,4BAA6BxB,IAJjD,OAKb,OALa,UAKPznnB,YAAWumE,KAAgByH,kCAAmC05iB,IALvD,QAMb,OANa,UAMP1nnB,YAAWumE,KAAgB2I,eAAgBk5iB,IANpC,QAOb,OAPa,UAOPponB,YAAWumE,KAAgB2ijB,wCAAyCnB,IAP7D,QAQb,OARa,UAQP/nnB,YAAWumE,KAAgB+H,UAAWisgB,IAR/B,QASb,OATa,UASPp7kB,YAAUonE,KAAgBiI,qBAAsB+rgB,IATzC,QAUb,OAVa,UAUPv6kB,YAAWumE,KAAgB2K,aAAcs3iB,IAVlC,QAWb,OAXa,UAWPxonB,YAAWumE,KAAgB6H,YAAa85iB,IAXjC,QAYb,OAZa,UAYPlonB,YAAWumE,KAAgBmG,mBAAoBy5iB,IAZxC,QAab,OAba,UAaPnmnB,YAAWumE,KAAgBqG,qBAAsBw5iB,IAb1C,QAcb,OAda,UAcPpmnB,YAAW,CACfumE,KAAgByI,aACf+3iB,IAhBU,QAiBb,OAjBa,UAiBP/mnB,YAAWumE,KAAgB6I,eAAgB+4iB,IAjBpC,QAkBb,OAlBa,UAkBPnonB,YAAWumE,KAAgBqJ,eAAgBk3iB,IAlBpC,QAmBb,OAnBa,UAmBP9mnB,YAAWumE,KAAgBmJ,eAAgBu4iB,IAnBpC,QAoBb,OApBa,UAoBPjonB,YAAWumE,KAAgBiJ,8BAA+Bw4iB,IApBnD,QAqBb,OArBa,UAqBPhonB,YAAWumE,KAAgByJ,kBAAmB63iB,IArBvC,QAsBb,OAtBa,UAsBP7nnB,YAAWumE,KAAgB4ijB,+BAAgCrB,IAtBpD,QAuBb,OAvBa,UAuBP9nnB,YAAWumE,KAAgB6ijB,kBAAmBlC,IAvBvC,QAwBb,OAxBa,UAwBPlnnB,YAAWumE,KAAgByK,gBAAiBu3iB,IAxBrC,QAyBb,OAzBa,UAyBPvonB,YAAWumE,KAAgB6K,iCAAkCq3iB,IAzBtD,QA0Bb,OA1Ba,UA0BPzonB,YAAWumE,KAAgBqL,wBAAyB82iB,IA1B7C,QA2Bb,OA3Ba,UA2BP1onB,YAAWumE,KAAgB6G,gCAAiCw5iB,IA3BrD,QA4Bb,OA5Ba,UA4BP5mnB,YAAWumE,KAAgByG,iBAAkB05iB,IA5BtC,QA6Bb,OA7Ba,UA6BP1mnB,YAAWumE,KAAgBuG,sBAAuB25iB,IA7B3C,QA8Bb,OA9Ba,UA8BPzmnB,YAAWumE,KAAgB2G,gCAAiCy5iB,IA9BrD,QA+Bb,OA/Ba,UA+BPxnnB,YAAUonE,KAAgB8F,sBAAuBi6iB,IA/B1C,QAgCb,OAhCa,UAgCPnnnB,YAAUonE,KAAgBgG,wBAAyBi6iB,IAhC5C,QAiCb,OAjCa,UAiCPxmnB,YAAW0/E,KAAmB2H,eAAgBw/hB,IAjCvC,QAkCb,OAlCa,UAkCP7mnB,YAAW0/E,KAAmBuB,sBAAuBoliB,IAlC9C,QAmCb,OAnCa,UAmCPrmnB,YAAW0/E,KAAmByB,wBAAyBwsS,IAnChD,QAoCb,OApCa,UAoCP3tX,YAAWi/G,IAAmBkG,gBAAiB0tP,IApCxC,QAqCb,OArCa,UAqCP7yW,YAAWi/G,IAAmBoG,8BAA+BijgB,IArCtD,QAsCb,OAtCa,UAsCPtonB,YAAWumE,KAAgBgF,4BAA6B88iB,IAtCjD,QAuCb,OAvCa,UAuCPronB,YAAWumE,KAAgBkF,mBAAoB27iB,IAvCxC,QAwCb,OAxCa,UAwCPpnnB,YAAWumE,KAAgBoF,gCAAiC07iB,IAxCrD,QAyCb,OAzCa,UAyCPrnnB,YAAWumE,KAAgBsF,kCAAmCy7iB,IAzCvD,QA0Cb,OA1Ca,UA0CPtnnB,YAAWumE,KAAgB4E,mBAAoBw8iB,IA1CxC,QA2Cb,OA3Ca,UA2CP3nnB,YAAWumE,KAAgBwE,gDAAiDk7iB,IA3CrE,QA4Cb,OA5Ca,UA4CPjmnB,YAAWumE,KAAgB0E,oDAAqDi7iB,IA5CzE,QA6Cb,OA7Ca,UA6CPlmnB,YAAWumE,KAAgBoE,sBAAuBo7iB,IA7C3C,QA8Cb,OA9Ca,UA8CP/lnB,YAAWumE,KAAgBsE,wBAAyBm7iB,IA9C7C,QA+Cb,OA/Ca,UA+CPhmnB,YAAWumE,KAAgBgE,0CAA2Cs7iB,IA/C/D,QAgDb,OAhDa,UAgDP7lnB,YAAWumE,KAAgBkE,8CAA+Cq7iB,IAhDnE,QAiDb,OAjDa,UAiDP3mnB,YAAUonE,KAAgB4D,sBAAuBw7iB,IAjD1C,QAkDb,OAlDa,UAkDPxmnB,YAAUonE,KAAgB8D,wBAAyBu7iB,IAlD5C,QAmDb,OAnDa,UAmDP5lnB,YAAWumE,KAAgB8ijB,0CAA2C9D,IAnD/D,QAoDb,OApDa,WAoDPvlnB,YAAWumE,KAAgB+ijB,8CAA+C9D,IApDnE,SAqDb,OArDa,WAqDPxlnB,YAAWumE,KAAgBwD,mBAAoBi9iB,IArDxC,SAsDb,OAtDa,WAsDPhnnB,YAAWumE,KAAgBoD,gCAAiC87iB,IAtDrD,SAuDb,OAvDa,WAuDPzlnB,YAAWumE,KAAgBsD,kCAAmC67iB,IAvDvD,SAwDb,OAxDa,WAwDP1lnB,YAAWumE,KAAgBwL,eAAgB42iB,IAxDpC,SAyDb,OAzDa,WAyDP3onB,YAAWumE,KAAgBgC,sBAAuB+8iB,IAzD3C,SA0Db,OA1Da,WA0DPtlnB,YAAWumE,KAAgBkC,sBAAuB48iB,IA1D3C,SA2Db,OA3Da,WA2DPrlnB,YAAWumE,KAAgBwB,0BAA2B4oU,IA3D/C,SA4Db,OA5Da,WA4DP3wY,YAAWumE,KAAgBoB,2BAA4BgkU,IA5DhD,SA6Db,OA7Da,WA6DP3rY,YAAWumE,KAAgBgjjB,kBAAmBnE,IA7DvC,SA8Db,OA9Da,WA8DPplnB,YAAWumE,KAAgBijjB,gCAAiCZ,IA9DrD,SA+Db,OA/Da,WA+DP5onB,YAAWumE,KAAgBkjjB,uBAAwBZ,IA/D5C,SAgEb,OAhEa,WAgEP7onB,YAAWumE,KAAgBmjjB,6BAA8BZ,IAhElD,SAiEb,OAjEa,WAiEP9onB,YAAWumE,KAAgB8C,YAAamtD,IAjEjC,SAkEb,OAlEa,WAkEPx2H,YAAWumE,KAAgB+L,uBAAwB6yiB,IAlE5C,SAmEb,OAnEa,WAmEPnlnB,YAAWumE,KAAgByM,wBAAyBkyiB,IAnE7C,SAoEb,OApEa,WAoEPllnB,YAAWumE,KAAgBiM,mBAAoByyiB,IApExC,SAqEb,OArEa,WAqEPjlnB,YAAWumE,KAAgBmN,gCAAiCq1iB,IArErD,SAsEb,OAtEa,WAsEP5pnB,YAAUonE,KAAgBU,0BAA2B89iB,IAtE9C,SAuEb,OAvEa,WAuEP5lnB,YAAUonE,KAAgBY,4BAA6B69iB,IAvEhD,SAwEb,OAxEa,WAwEP7lnB,YAAUonE,KAAgByN,6BAA8Bg1iB,IAxEjD,SAyEb,OAzEa,WAyEP7pnB,YAAUonE,KAAgBM,sBAAuBi+iB,IAzE1C,SA0Eb,OA1Ea,WA0EP9knB,YAAWumE,KAAgBI,oBAAqBg+iB,IA1EzC,SA2Eb,OA3Ea,WA2EP3knB,YAAWumE,KAAgBE,qBAAsBi+iB,IA3E1C,yCA8Ef,SAAUA,GAAmBllnB,GAA7B,2FACiCA,EAAOgc,QAA9BhnC,EADV,EACUA,KAAMm1oB,EADhB,EACgBA,aADhB,KAIUn1oB,EAJV,OAKS,YALT,OASS,WATT,OAaS,aAbT,8BAMMo1oB,EAAgB,UANtB,mCAUMA,EAAgB,gBAVtB,mCAcMA,EAAgB,wBAdtB,6BAyBM,OAzBN,UAyBYt0oB,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,qBACV9vB,KAAM4+jB,MA7BZ,oBAoBIr6lB,EApBJ,EAoBIA,KACA5J,EArBJ,EAqBIA,KAWE4J,EAhCN,iBAmCoB,OADVu6lB,EAAgB9zoB,MAAMuN,KAAK,IAAInQ,IAAIw2oB,EAAarsoB,KAAI,SAAAwsoB,GAAW,OAAIA,EAAYh4iB,YAlCzF,UAmC0BipG,YAAI8uc,EAAcvsoB,KAAI,SAACw0F,GAAD,OAAYx8F,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACtGtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU+uiB,EACV7+jB,KAAe,aAATv2E,EAAsB,CAAEu1oB,qBAAsBj4iB,GAAW,CAAEA,kBAvCzE,QAmCU2oK,EAnCV,OA2CUnlE,EAAQmlE,EAAQx6P,QAAO,SAACutI,EAAKtlI,GACjC,GAAIA,EAAOonC,KAAM,CACf,IAAMqO,EAAOjgC,iBAAOxV,EAAOonC,MAAMp6B,MAAM,CAAC,UAAW,OAAQ,OAAQ,IACnE,GAAIyoC,EACF,OAAO6vF,EAAI9sI,KAAKi9C,GAGpB,OAAO6vF,IACN9vH,iBAAO,KAnDd,KAqDYlpB,EArDZ,OAsDW,WAtDX,QA0DW,aA1DX,yBAuDQ,OAvDR,UAuDcolG,YAAI,IAAI5N,IAA8BspG,IAvDpD,4CA2DQ,OA3DR,UA2Dc17F,YAAI,IAAI1N,IAAgCopG,IA3DtD,4CA+DQ,OA/DR,UA+Dc17F,YAAI,IAAInL,IAAwB6mG,IA/D9C,QAoEI,OApEJ,UAoEUyF,YACJ4uc,EAAahynB,SAAQ,gBAAGm6E,EAAH,EAAGA,OAAH,SAAWyvL,WACnBjkR,KAAI,SAAC8wH,GAAD,OACbx0B,YAAI,IAAI4R,KAAoC,CAAE1Z,SAAQs8B,YAAW65gB,eAAe,YAvE1F,gCA4EI3rnB,QAAQ7Z,MAAM,4BAA6BijC,GA5E/C,QA+EE,OA/EF,UA+EQk0D,YAAK,IAAIjxD,IAA6B,CAC1CpT,GAAIijO,mBACJv5J,MAAM,KAjFV,wCAqFO,SAAU0liB,GACfnlnB,GADK,iEAGL,OAHK,SAGCo9E,YAAK,CACT65U,YAAanhb,YAAKuvoB,GAA0BrlnB,GAC5Ck6Z,aAAcpkb,YAAKsvoB,MALhB,uCASP,SAAUA,KAAV,iEACE,OADF,SACQ1rnB,YAAKqtE,KAAgByjjB,oBAD7B,uCAIA,SAAUnF,GAAyBrlnB,GAAnC,+FASmB,OATnB,EAOMA,EAAOgc,QALTs2D,EAFJ,EAEIA,OACAyvL,EAHJ,EAGIA,WACA43J,EAJJ,EAIIA,YACAI,EALJ,EAKIA,SACAS,EANJ,EAMIA,YANJ,SASyB3lV,YAAOy1C,eAThC,OAUe,OADP/rF,EATR,gBAUqBs2C,YAAOk7B,eAV5B,OAUQD,EAVR,YAaUA,EAbV,cAcSvgG,OAAKghG,OAdd,UAkBShhG,OAAKkhG,eAlBd,2BAeMp1B,EAAW,yBAfjB,oCAmBMA,EAAW,iCAnBjB,oCAuBMA,EAAW,mBAvBjB,6BAkCM,OAlCN,UAkCYvlG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,WACA5zD,OAAQ,CACN6qD,UAEF/mB,KAAM,CACJw2M,aACAxjO,gBA3CR,oBA6BIzO,EA7BJ,EA6BIA,KACA5J,EA9BJ,EA8BIA,KAiBE4J,EA/CN,iBAiDI,OADM2pY,EAAUv7Z,iBAAO4xB,GAAMp6B,MAAM,CAAC,UAAW,OAAQ,aAAc,EAAG,OAhD5E,UAiDU5f,YAAKwhb,IAAW,IAAI70N,IAAgB,CACxCg3N,UACAzkb,KAAMs6B,qBAAmB0uZ,WACzBrE,cACAI,WACAS,iBAtDN,gCAyDI19Z,QAAQ7Z,MAAM,kCAAmCijC,GAzDrD,iCA2DS,CACL4J,OACA5J,QA7DJ,wCAiEA,SAAUo/lB,GAAmBtlnB,GAA7B,+GAKuB,OALvB,EAGMA,EAAOgc,QADTyumB,6BAFJ,kBAK6B51iB,YAAOyiG,eALpC,OAMe,OADPozc,EALR,gBAMqB71iB,YAAOk7B,eAN5B,OAMQD,EANR,YAcUA,EAdV,cAeSvgG,OAAKghG,OAfd,UAsBShhG,OAAKkhG,eAtBd,oBAgBqB,OAhBrB,UAgB2B57B,YAAO41C,eAhBlC,QAiBwB,OADlBG,EAhBN,iBAiB8B/1C,YAAO27B,eAjBrC,eAiBMmB,EAjBN,OAkBMg5gB,EAAqB5hnB,qBACrBsyE,EAAW,sBAnBjB,6BAuBqB,OAvBrB,UAuB2BxG,YAAO61C,eAvBlC,QAwBwB,OADlBE,EAvBN,iBAwB8B/1C,YAAO67B,eAxBrC,eAwBMiB,EAxBN,OAyBMg5gB,EAAqB3hnB,uBACrBqyE,EAAW,8BA1BjB,6BA8BqB,OA9BrB,UA8B2BxG,YAAO21C,eA9BlC,QA+BwB,OADlBI,EA9BN,iBA+B8B/1C,YAAO87B,eA/BrC,QA+BMgB,EA/BN,OAgCMg5gB,EAAqB/hnB,sBACrBginB,EAAkB9hnB,mBAClBuyE,EAAW,gBAlCjB,WAsCQmnS,EAAoB53P,EAAa/xI,IAAI,cAAgB,GACrDgyoB,EAvCR,UAuCyBF,EAvCzB,YAuC+CnoQ,GACvCsoQ,EAxCR,UAwCsBF,EAxCtB,YAwCyChggB,EAAa/xI,IAAI,OAAS,KAG3C,IAAlB6xoB,IAAuB,UAAC/4gB,SAAD,aAAC,EAAiB94H,IAAI,YAA7C,UAAwD84H,SAAxD,iBAAwD,EAAiB94H,IAAI,mBAA7E,aAAwD,EAAkCqR,SA3ChG,iBAoDQ,OARE6goB,EAAiBC,YAA8Br5gB,EAAiBiZ,EAAa/xI,IAAI,aA5C3F,UAoDc/C,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,WACA9vB,KAAM,CACJjoE,KAAMynoB,GAERtjmB,OAAQ,CACN6qD,OAAQs4C,EAAa/xI,IAAI,MACzB+1H,UAAW+C,EAAgB94H,IAAI,WA7DzC,oBA+CMi3C,EA/CN,EA+CMA,KACA5J,EAhDN,EAgDMA,KAiBE4J,EAjER,oBAkEYq8V,EAAWjuX,iBAAO4xB,GAEN,OADZm7lB,EAAa9+P,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAAW,KAnEvE,iBAqEQoH,QAAQ7Z,MAAM,mBAAoB6sC,GArE1C,wBAuEQ,OAvER,UAuEcguN,YAAW,IAAIztK,KAA6B,CAAEu+B,UAAWq8gB,EAAWpyoB,IAAI,MAAOs8L,QAAS81c,KAvEtG,QAwEQ,OAxER,UAwEcntY,YAAW,IAAIh2K,MAAuB,IAxEpD,QAyEQ,OAzER,UAyEcg2K,YAAW,IAAIl2K,MAA2B,IAzExD,YA0EY6ijB,EA1EZ,iBA2EU,OA3EV,UA2EgBrwiB,YAAI,IAAItO,KAA+B,CAAE8iC,WAAY,EAAG/P,KAAM51F,2BA3E9E,gCA6EU,OA7EV,UA6EgBmxE,YAAIl5F,YAAK4uH,IAASvgG,OAAK4uB,KAAO2slB,EAAWD,IA7EzD,gCAiFM/tnB,QAAQ7Z,MAAM,qBAAsB,CAACijC,QAjF3C,oCAoF0B,IAAlBwkmB,EApFR,iBAqFM,OArFN,UAqFY5sY,YAAW,IAAIh2K,MAAuB,IArFlD,YAuFQ2ijB,EAvFR,iBAwFM,OAxFN,UAwFYrwiB,YAAI,IAAItO,KAA+B,CAAE8iC,WAAY,EAAG/P,KAAM51F,2BAxF1E,gCA0FM,OA1FN,UA0FYmxE,YAAIl5F,YAAK4uH,IAASvgG,OAAK4uB,KAAO2slB,EAAWD,IA1FrD,wCA+FA,SAAUtF,GAAuBvlnB,GAAjC,uFAQM,OARN,EACqDA,EAAOgc,QAAlDs2D,EADV,EACUA,OAAQs8B,EADlB,EACkBA,UAAWs8gB,EAD7B,EAC6BA,SAAU9uU,EADvC,EACuCA,UADvC,SAQYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,uBACV5zD,OAAQ,CACN6qD,SACAs8B,aAEFrjD,KAAM,CACJ2/jB,gBAjBR,mBAGIp7lB,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAiBE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAEZ,MADCq8V,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAAW,EAAG,OAvBlE,iBAyBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA4BM,OADS,OAATssR,QAAS,IAATA,KAAYtsR,GA3BlB,UA4BYsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WA/BzB,gCAmCIh9F,QAAQ7Z,MAAM,+BAAgC,CAACijC,QAnCnD,iCAqCS,CACL4J,OACA5J,QAvCJ,wCA2CA,SAAUs/lB,GAAyBxlnB,GAAnC,uFAQM,OARN,EACqDA,EAAOgc,QAAlDs2D,EADV,EACUA,OAAQs8B,EADlB,EACkBA,UAAWs8gB,EAD7B,EAC6BA,SAAU9uU,EADvC,EACuCA,UADvC,SAQYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2BACV5zD,OAAQ,CACN6qD,SACAs8B,aAEFrjD,KAAM,CACJ2/jB,gBAjBR,mBAGIp7lB,EAHJ,EAGIA,KACA5J,EAJJ,EAIIA,KAiBE4J,EArBN,oBAsBUq8V,EAAWjuX,iBAAO4xB,GAEZ,MADCq8V,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAAW,EAAG,OAvBlE,iBAyBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAzBxC,wBA4BM,OADS,OAATssR,QAAS,IAATA,KAAYtsR,GA3BlB,UA4BYsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WA/BzB,gCAmCIh9F,QAAQ7Z,MAAM,iCAAkC,CAACijC,QAnCrD,iCAqCS,CACL4J,OACA5J,QAvCJ,wCA2CA,SAAUu/lB,GAAiBzlnB,GAA3B,2JAC2B,OAD3B,SACiC60E,YAAO0iG,eADxC,UACQ4zc,EADR,OAEQC,EAAmBD,EAAiBtyoB,IAAI,oBACxCwyoB,EAAqBF,EAAiBtyoB,IAAI,sBAC1CyyoB,EAAmBH,EAAiBtyoB,IAAI,SAAShI,KACjD06oB,EAAoBJ,EAAiBtyoB,IAAI,qBACzC2yoB,EAAsBL,EAAiBtyoB,IAAI,uBANnD,EAQmDmnB,EAAOgc,QAAhDqiF,EARV,EAQUA,QAASv9E,EARnB,EAQmBA,QAAS2qmB,EAR5B,EAQ4BA,mBACpBpwiB,EAAW,CACfk1B,OAAQ,oBACRmhE,SAAU,6BAEP+5c,EAbP,iBAcyD,OAdzD,UAc+Dlwc,YAAI,CAC7DzlM,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASk1B,OACnBhlD,KAAM,CACJ8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,KAGZo6F,QAAS,CACP0uiB,UAAU,OAIhB51oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASq2F,SACnBnmH,KAAM,CACJ8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,KAGZo6F,QAAS,CACP0uiB,UAAU,SA3CtB,uCAcWC,EAdX,KAcgCC,EAdhC,KAiDkBC,EAAqBF,EAA3B77lB,KACMg8lB,EAAsBF,EAA5B97lB,MACJ+7lB,IAAoBC,EAnD5B,iBA6DM,OATMC,EAA4B7tnB,iBAAO2tnB,GAEnCT,EAAmBW,EAA0Br2nB,MAAM,CAAC,UAAW,OAAQ,UACvEqgL,EAAcg2c,EAA0Br2nB,MAAM,CAAC,UAAW,OAAQ,UAClEs2nB,EAA6B9tnB,iBAAO4tnB,GAEpCT,EAAqBW,EAA2Bt2nB,MAAM,CAAC,UAAW,OAAQ,UAC1EsgL,EAAgBg2c,EAA2Bt2nB,MAAM,CAAC,UAAW,OAAQ,UACrEo6B,EAAOimJ,EAAY31L,OAAO41L,GAAepxL,MAAM,EAAGk8B,EAAQy9E,OA5DtE,UA6DYnkB,YAAI,IAAInH,IAAgC,CAC5CnjD,OACAs7lB,mBACAC,qBACAE,kBAAmBx1c,EAAYllM,KAC/B26oB,oBAAqB17lB,EAAKj/C,KAAOklM,EAAYllM,KAC7Cu7Y,YAAat8V,EAAKj/C,KAAOu6oB,EAAmBC,EAC5CI,wBApER,qDAwEQH,EAAmBxqmB,EAAQy9E,OAAS6shB,GAxE5C,iBAyE2C,OAzE3C,UAyEiDt1oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACxFtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASk1B,OACnBhlD,KAAM,CACF8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ0ooB,KAGdtuiB,QAAS,CACP0uiB,UAAU,OArF1B,sBAyEsBG,EAzEtB,EAyEgB/7lB,MAzEhB,iBA4FY,OAFMi8lB,EAA4B7tnB,iBAAO2tnB,GACnC91c,EAAcg2c,EAA0Br2nB,MAAM,CAAC,UAAW,OAAQ,UA3FpF,UA4FkB0kF,YAAI,IAAInH,IAAgC,CAC5CnjD,KAAMimJ,EACNw1c,kBAAmBA,EAAoBx1c,EAAYllM,KACnDu7Y,YAAak/P,EAAmBv1c,EAAYllM,KAAOu6oB,EAAmBC,EACtEI,wBAhGd,aAoGUH,GAAoBF,GApG9B,iBAqG4C,OArG5C,UAqGkDt1oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3FtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASq2F,SACnBnmH,KAAM,CACJ8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ4ooB,KAGZxuiB,QAAS,CACP0uiB,UAAU,OAjHxB,sBAqGsBI,EArGtB,EAqGgBh8lB,MArGhB,iBAwHU,OAFMk8lB,EAA6B9tnB,iBAAO4tnB,GACpC91c,EAAgBg2c,EAA2Bt2nB,MAAM,CAAC,UAAW,OAAQ,UAvHrF,UAwHgB0kF,YAAI,IAAInH,IAAgC,CAC5CnjD,KAAMkmJ,EACNw1c,oBAAqBA,EAAsBx1c,EAAcnlM,KACzDu7Y,YAAak/P,EAAmBt1c,EAAcnlM,KAAOu6oB,EAAmBC,EACxEI,wBA5HZ,QAgI6D,OAhI7D,UAgImElwc,YAAI,CAC7DzlM,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASk1B,OACnBhlD,KAAM,CACJ8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ2ooB,KAGZvuiB,QAAS,CACP0uiB,UAAU,OAIhB51oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACjDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASq2F,SACnBnmH,KAAM,CACJ8yC,UACAv9E,QAAQ,2BACHA,GADE,IAELl+B,OAAQ4ooB,KAGZxuiB,QAAS,CACP0uiB,UAAU,SA7J1B,uCAgIeC,EAhIf,KAgIoCC,EAhIpC,KAmKsBC,EAAqBF,EAA3B77lB,KACMg8lB,EAAsBF,EAA5B97lB,MACJ+7lB,IAAoBC,EArKhC,iBA2KU,OALMC,EAA4B7tnB,iBAAO2tnB,GACnC91c,EAAcg2c,EAA0Br2nB,MAAM,CAAC,UAAW,OAAQ,UAClEs2nB,EAA6B9tnB,iBAAO4tnB,GACpC91c,EAAgBg2c,EAA2Bt2nB,MAAM,CAAC,UAAW,OAAQ,UACrEo6B,EAAOimJ,EAAY31L,OAAO41L,GAAepxL,MAAM,EAAGk8B,EAAQy9E,OA1K1E,UA2KgBnkB,YAAI,IAAInH,IAAgC,CAC5CnjD,OACAy7lB,kBAAmBA,EAAoBx1c,EAAYllM,KACnD26oB,oBAAqBA,EAAsB17lB,EAAKj/C,KAAOklM,EAAYllM,KACnEu7Y,YAAak/P,EAAmBx7lB,EAAKj/C,KAAOu6oB,EAAmBC,EAC/DI,wBAhLZ,wCAuLA,SAAU/F,GAAS1lnB,GAAnB,yFAaM,OAbN,EACsCA,EAAOgc,QAAnCgvE,EADV,EACUA,UAAW1Y,EADrB,EACqBA,OAAQt9F,EAD7B,EAC6BA,KACrBu2E,EAAgB,aAATv2E,EAAsB,CAAEu1oB,qBAAsBj4iB,GAAW,CAAEA,UAClE+I,EAAW,CACfk1B,OAAQ,gBACRmhE,SAAU,yBALd,SAaY57L,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASrmG,GACnBu2E,WAjBN,mBAQIz7B,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAWE4J,EApBN,iBAsBI,OADMq8V,EAAWjuX,iBAAO4xB,GArB5B,UAsBUsqD,YAAI,IAAI3G,KAAoC,CAChDuX,YACAh2G,OACAi3oB,SAAU9/P,EAASz2X,MAAM,CAAC,UAAW,OAAQ,OAAQ,OAzB3D,gCA4BIoH,QAAQ7Z,MAAM,eAAgB,CAACijC,QA5BnC,wCA+BA,SAAUy/lB,GAAoB3lnB,GAA9B,iGAYM,OAZN,EACoEA,EAAOgc,QAAjEqiF,EADV,EACUA,QAASv9E,EADnB,EACmBA,QAAS2qmB,EAD5B,EAC4BA,mBAAoBz2oB,EADhD,EACgDA,KAAMonU,EADtD,EACsDA,UAC9C/gO,EAAW,CACfk1B,OAAQ,uBACRmhE,SAAU,yBAJd,SAYY57L,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,UACTC,SAAUA,EAASrmG,GACnBu2E,KAAM,CACJ8yC,UACAv9E,eAlBR,mBAOIgP,EAPJ,EAOIA,KACA5J,EARJ,EAQIA,KAcE4J,EAtBN,oBAuBUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,UAAW,UACtD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,UAAW,gBAEpD,OADTqrM,EAA+BorL,EAASz2X,MAAM,CAAC,UAAW,UAAW,cA1B/E,iBA4BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA5BxC,wBA8BM,OA9BN,UA8BYsqD,YAAI,IAAIjH,IAAmC,CAC/CrjD,KAAMixK,EACN72M,QACAkiY,cACAp3Y,OACAy2oB,wBAnCR,QAqCe,OAATrvU,QAAS,IAATA,KAAYr7G,GArClB,gCAwCIjkM,QAAQ7Z,MAAM,kBAAmB,CAACijC,QAxCtC,iCA0CS,CACL4J,OACA5J,QA5CJ,wCA+CA,SAAU0/lB,GACR5lnB,GADF,iFAcM,OAdN,EAOOA,EAAOgc,QAFVs2D,EALJ,EAKIA,OACAs8B,EANJ,EAMIA,UANJ,SAcY94H,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,aACV5zD,OAAQ,CACN6qD,SACAs8B,iBApBR,uBASI9+E,EATJ,EASIA,KACA5J,EAVJ,EAUIA,IAcE4J,EACe5xB,iBAAO4xB,GAQxBhzB,QAAQ7Z,MAAM,wBAAyB,CAACijC,QAjC5C,kBAoCS,CACL4J,OACA5J,QAtCJ,uCA0CA,SAAUimX,GACRnsY,GADF,uFAGE,OAHF,SAGQo6E,YAAI,IAAIhS,KAAsC,CAAE8jjB,8BAA8B,KAHtF,OAiBM,OAjBN,EAUOlsnB,EAAOgc,QAJVs2D,EANJ,EAMIA,OACAs8B,EAPJ,EAOIA,UACAb,EARJ,EAQIA,UACAq+R,EATJ,EASIA,cATJ,SAiBYt2Z,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2BACV5zD,OAAQ,CACN6qD,SACAs8B,YACAb,YACAq+R,qBAzBR,mBAYIt8W,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,oBA8BUq8V,EAAWjuX,iBAAO4xB,GAEd,MADSq8V,EAASz2X,MAAM,CAAC,UAAW,OAAQ,qBAAsB,EAAG,OA/BnF,iBAiCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAjCxC,wBAmCM,OAnCN,UAmCYsqD,YAAI,IAAInI,KAnCpB,QAoCM,OApCN,UAoCYn8F,YAAKilmB,GAAU,IAAIlsgB,IAAe,CAACyD,YApC/C,QAqCM,OArCN,UAqCY8H,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,oEACnB65E,SAAU,UACVof,gBAAiB,WAxCzB,gCA4CIh9F,QAAQ7Z,MAAM,kCAAmC,CAACijC,QA5CtD,QA8CE,OA9CF,UA8CQk0D,YAAI,IAAIhS,KAAsC,CAAE8jjB,8BAA8B,KA9CtF,iCAgDS,CACLp8lB,OACA5J,QAlDJ,yCAsDA,SAAUirX,GACRnxY,GADF,6HAGE,OAHF,SAGQo6E,YAAI,IAAI5R,KAAqC,CAAEyoU,6BAA6B,KAHpF,OAoBM,OApBN,EAaOjxY,EAAOgc,QAPVs2D,EANJ,EAMIA,OACAs8B,EAPJ,EAOIA,UACAb,EARJ,EAQIA,UACA+9R,EATJ,EASIA,oBATJ,IAUIqgP,uBAVJ,aAWIC,uBAXJ,aAYIh7O,mBAZJ,MAYkB1pZ,gBAZlB,WAoBY5R,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2BACV5zD,OAAQ,CACN6qD,SACAs8B,YACAb,aAEFxiD,KAAMugV,EAAoBz4Y,WA7BhC,mBAeIy8B,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAgBE4J,EAhCN,iBAqDyB,OApBfq8V,EAAWjuX,iBAAO4xB,GAClBu8lB,EAAuDlgQ,EAASz2X,MAAM,CAAC,UAAW,OAAQ,wBAK1F42nB,EAvCV,OAuCwCD,QAvCxC,IAuCwCA,OAvCxC,EAuCwCA,EAAsBvuoB,KAAI,SAACovZ,EAAoBj8Z,GAArB,MAAgC,CAC5F88H,UAAWm/R,EAAmBr0Z,IAAI,cAAgB,KAClDwzH,SAAU6gS,EAAmBr0Z,IAAI,aAAe,KAChDm1H,cAAek/R,EAAmBr0Z,IAAI,kBAAoB,KAC1Dg2H,WAAYq+R,EAAmBr0Z,IAAI,eAAiB,KACpDk5I,aAAcm7Q,EAAmBr0Z,IAAI,iBAAmB,KACxDq8I,eAAgBg4Q,EAAmBr0Z,IAAI,mBAAqB,KAC5D68B,aAAcw3X,EAAmBr0Z,IAAI,iBAAmB,KACxD09W,KAAM22C,EAAmBr0Z,IAAI,QAC7B0zoB,YAAar/O,EAAmBx3Y,MAAM,CAAC,YAAa,OAAQ,SAC5D82nB,cAAet/O,EAAmBx3Y,MAAM,CAAC,YAAa,SAAU,SAChE+2nB,YAAav/O,EAAmBx3Y,MAAM,CAAC,YAAa,OAAQ,aAlDlE,UAqD+Bm/E,YAAOuhG,YAAuB,CAAE9jG,YArD/D,QAuE0B,OAlBhBs4C,EArDV,OAsDU5/B,EAtDV,OAsDsB4/B,QAtDtB,IAsDsBA,OAtDtB,EAsDsBA,EAAc/xI,IAAI,aAC9BmoR,EAvDV,OAuDwBp2I,QAvDxB,IAuDwBA,OAvDxB,EAuDwBA,EAAc/xI,IAAI,gBAChCm0N,EAxDV,OAwDqBpiF,QAxDrB,IAwDqBA,OAxDrB,EAwDqBA,EAAc/xI,IAAI,YAC7B6zoB,EAzDV,OAyD6B9hgB,QAzD7B,IAyD6BA,OAzD7B,EAyD6BA,EAAc/xI,IAAI,oBACrC2wX,EAAgBx+Q,IAAcgiH,IAAa0/a,GAAoD,UAApB,OAAZ9hgB,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,WACjF8zoB,EAAY3hiB,IAAcgiH,IAAa0/a,GAAoD,UAApB,OAAZ9hgB,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,WAC/E+wX,EAAc,OACd+iR,EACF/iR,EAAc,UACL58J,EACT48J,EAAc,SACL8iR,EACT9iR,EAAc,WACLJ,IACTI,EAAc,gBApEpB,UAuEgC/0R,YAAOj1C,eAvEvC,QA4FI,OArBM+B,EAvEV,OAwEUwuU,EAxEV,aAyEMy9B,eAAgBwD,EAAYv4Z,IAAI,MAChCm2H,mBAAoBoiS,EAAYv4Z,IAAI,iBACpCo2H,WAAYmiS,EAAYv4Z,IAAI,SAC5Bq2H,aAAckiS,EAAYv4Z,IAAI,WAC9B+zoB,kBAAmBx7O,EAAYv4Z,IAAI,gBACnCu2H,gBAAiBgiS,EAAYv4Z,IAAI,YACjCizZ,oBAAmB,iBAAEwgP,QAAF,IAAEA,OAAF,EAAEA,EAA6Bj5nB,cAA/B,QAAyC,GAC5Di/E,SACA0hU,UAAsB,OAAZppR,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,UAAW,GACvCmyG,YACAg2K,cACA4oG,eACGjoU,GAGL45C,IAAmB9rE,kBAAgBo9mB,iBAAkB18Q,GAxFzD,UA4FU/1R,YAAI,IAAInI,KA5FlB,QA6FI,OA7FJ,UA6FUn8F,YAAKilmB,GAAU,IAAIlsgB,IAAe,CAACyD,YA7F7C,YA8FQ65iB,EA9FR,iBA+FM,OA/FN,UA+FY/xiB,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIq4X,IACJ3uT,MAAM,KAjGd,YAoGQ2siB,EApGR,iBAqGM,OArGN,UAqGYhyiB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,0DACnB65E,SAAU,UACVof,gBAAiB,WAxGzB,gCA4GIh9F,QAAQ7Z,MAAM,kCAAmC,CAACijC,QA5GtD,QA8GE,OA9GF,UA8GQk0D,YAAI,IAAI5R,KAAqC,CAAEyoU,6BAA6B,KA9GpF,iCAgHS,CACLnhX,OACA5J,QAlHJ,yCAsHA,SAAU2/lB,GACR7lnB,GADF,mFAcM,OAdN,EAOOA,EAAOgc,QAHVs2D,EAJJ,EAIIA,OACAt9F,EALJ,EAKIA,KACAwlD,EANJ,EAMIA,OANJ,SAcY1kD,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,qBACV5zD,OAAQ,CACN6qD,SACAt9F,QAEFu2E,KAAK,eACA/wB,EAAOnnC,YAvBlB,gBASIy8B,EATJ,EASIA,KACA5J,EAVJ,EAUIA,IAiBE4J,EACoB5xB,iBAAO4xB,GAG7BhzB,QAAQ7Z,MAAM,kCAAmC,CAACijC,QA/BtD,wCAmCA,SAAU4/lB,GACR9lnB,GADF,yFAaM,OAbN,EAMOA,EAAOgc,QAFVs2D,EAJJ,EAIIA,OACAt9F,EALJ,EAKIA,KALJ,SAaYc,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,qBACV5zD,OAAQ,CACN6qD,SACAt9F,QAEFu2E,KAAM,OArBZ,mBAQIz7B,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAgBE4J,EAzBN,oBA0BUqtD,EAAgBj/E,iBAAO4xB,GACvB0K,EAA2B2iD,EAAcznF,MAAM,CAAC,UAAW,OAAQ,YACnEo3nB,EAAgBtylB,EAAO3hD,IAAI,mBAEa,IAAvBi0oB,EAAcj8oB,KA9BzC,iBA+BM,OA/BN,UA+BYupG,YAAI,IAAI6nH,KAAiC,IA/BrD,WAkCwB,IAAhBznK,EAAO3pD,KAlCf,sBAoCY80U,EAAanrR,EAAO3hD,IAAI,aApCpC,iBAsCQ,OAtCR,UAsCcuhG,YAAI,IAAIpkC,KAAqB,CACjCs8D,WAAY,GACZjU,QAAS,CACP9nF,IAAK,CACH,CACER,GAAI,CACFO,GAAIqvS,SA5CtB,QAoDM,OApDN,UAoDYvrO,YAAI,IAAIxR,IAAkC,CAC9C0J,SACA93C,YAtDR,gCA2DI19B,QAAQ7Z,MAAM,kCAAmC,CAACijC,QA3DtD,yCA+DA,SAAU6/lB,GACR/lnB,GADF,iEAGE,OAHF,SAGQlqB,YAAKqwoB,GAAqB,IAAIz7iB,KAA0B1qE,EAAOgc,UAHvE,OAIE,OAJF,SAIQo+D,YAAI,IAAIxN,IAAqB,CAAE0F,OAAQtyE,EAAOgc,QAAQs2D,OAAQ8wR,aAAa,KAJnF,wCAMA,SAAU4iR,GACNhmnB,GADJ,iEAGE,OAHF,SAGQlqB,YAAKswoB,GAAuB,IAAIx7iB,KAA4B5qE,EAAOgc,UAH3E,OAIE,OAJF,SAIQo+D,YAAI,IAAItN,IAAuB9sE,EAAOgc,QAAQs2D,OAAQ,CAAC8wR,aAAa,KAJ5E,wCAOA,SAAU6iR,GACRjmnB,GADF,yEAQ0B,OAR1B,EAMMA,EAAOgc,QANb,EAIIs2D,OAJJ,EAKI/mB,KALJ,SAQgCspB,YAAO4rH,eARvC,OASE,OADMssb,EARR,gBASQj3oB,YAAK0xoB,GAAkB,IAAIl9iB,KAAuBtqE,EAAOgc,UATjE,OAUE,OAVF,SAUQo+D,YAAI,IAAI0J,IAA2B,CAAE/tE,GAAIg3mB,KAVjD,OAWE,OAXF,UAWQ3yiB,YAAIl5F,YAAK,GAAD,OAAI6nB,qBAAJ,YAA0BgknB,KAX1C,yCAaA,SAAU7G,GACNlmnB,GADJ,yEAQ4B,OAR5B,EAMMA,EAAOgc,QANb,EAIIs2D,OAJJ,EAKI/mB,KALJ,SAQkCspB,YAAO6rH,eARzC,OASE,OADMssb,EARR,gBASQl3oB,YAAK2xoB,GAAoB,IAAIj9iB,KAAyBxqE,EAAOgc,UATrE,OAUE,OAVF,SAUQo+D,YAAI,IAAI4J,IAA6B,CAAEjuE,GAAIi3mB,KAVnD,OAWE,OAXF,UAWQ5yiB,YAAIl5F,YAAK,GAAD,OAAI8nB,uBAAJ,YAA4BgknB,KAX5C,yCAcA,SAAU7G,GACRnmnB,GADF,uFAgBM,OAhBN,EAQMA,EAAOgc,QAJTs2D,EAJJ,EAIIA,OACAs8B,EALJ,EAKIA,UALJ,IAMIumE,QAAS5pH,OANb,MAMoB,GANpB,EAOI6wP,EAPJ,EAOIA,UAPJ,SAgBYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,sBACV5zD,OAAQ,CACN6qD,SACAs8B,aAEFrjD,WAxBN,mBAWIz7B,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,IAeG4J,EA3BP,iBA4BIhzB,QAAQ7Z,MAAM,+BAAgC,CAACijC,QA5BnD,4BA6Ba4J,EA7Bb,iBA+BI,OADS,OAATssR,QAAS,IAATA,KAAYtsR,GA9BhB,UA+BUsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WAlCvB,yCAsCA,SAAUsshB,GACNpmnB,GADJ,uFAgBM,OAhBN,EAQMA,EAAOgc,QAJTs2D,EAJJ,EAIIA,OACAs8B,EALJ,EAKIA,UALJ,IAMIumE,QAAS5pH,OANb,MAMoB,GANpB,EAOI6wP,EAPJ,EAOIA,UAPJ,SAgBYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,8BACV5zD,OAAQ,CACN6qD,SACAs8B,aAEFrjD,WAxBN,mBAWIz7B,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,IAeG4J,EA3BP,iBA4BIhzB,QAAQ7Z,MAAM,wCAAyC,CAACijC,QA5B5D,4BA6Ba4J,EA7Bb,iBA+BI,OADS,OAATssR,QAAS,IAATA,KAAYtsR,GA9BhB,UA+BUsqD,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WAlCvB,yCAuCA,SAAUushB,GACRrmnB,GADF,+EAUE,OAVF,EAQMA,EAAOgc,QAJTixmB,EAJJ,EAIIA,YACAC,EALJ,EAKIA,cACAt+gB,EANJ,EAMIA,UACAu+gB,EAPJ,EAOIA,gBAPJ,SAUQr3oB,YAAKywoB,GAAqB,IAAIr7iB,IAA0B,CAAC0jC,YAAWt8B,OAAQ46iB,EAAeC,qBAVnG,OAWE,OAXF,SAWQ/yiB,YAAI,IAAIxN,IAAqB,CAAE0F,OAAQ26iB,KAX/C,wCAaA,SAAU3G,GACNtmnB,GADJ,+EAUE,OAVF,EAQMA,EAAOgc,QAJTixmB,EAJJ,EAIIA,YACAC,EALJ,EAKIA,cACAt+gB,EANJ,EAMIA,UACAu+gB,EAPJ,EAOIA,gBAPJ,SAUQr3oB,YAAK0woB,GAAuB,IAAIp7iB,IAA4B,CAACwjC,YAAWt8B,OAAQ46iB,EAAeC,qBAVvG,OAWE,OAXF,SAWQ/yiB,YAAI,IAAItN,IAAuBmgjB,IAXvC,wCAaA,SAAU1G,GACRvmnB,GADF,mFAeM,OAfN,EAOMA,EAAOgc,QAHTs2D,EAJJ,EAIIA,OACAs8B,EALJ,EAKIA,UACAu+gB,EANJ,EAMIA,gBANJ,SAeYr3oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,sBACV5zD,OAAQ,CACN6qD,SACAs8B,iBArBR,gBAUI9+E,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAcG4J,EAGY,OAAfq9lB,QAAe,IAAfA,OAFArwnB,QAAQ7Z,MAAM,+BAAgC,CAACijC,QA1BnD,wCA+BA,SAAUsgmB,GACNxmnB,GADJ,mFAeM,OAfN,EAOMA,EAAOgc,QAHTs2D,EAJJ,EAIIA,OACAs8B,EALJ,EAKIA,UACAu+gB,EANJ,EAMIA,gBANJ,SAeYr3oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,8BACV5zD,OAAQ,CACN6qD,SACAs8B,iBArBR,gBAUI9+E,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAcG4J,EAGY,OAAfq9lB,QAAe,IAAfA,OAFArwnB,QAAQ7Z,MAAM,wCAAyC,CAACijC,QA1B5D,wCAgCA,SAAUugmB,GACRzmnB,GADF,iFAQkC,OARlC,EAMMA,EAAOgc,QAFToxmB,EAJJ,EAIIA,SACA7yV,EALJ,EAKIA,MALJ,SAQwC1lN,YAAO4rH,eAR/C,OAYM,OAJE4sb,EARR,gBAYYv3oB,YAAKqyoB,GAAkB,IAAIz8iB,IAAuB,CAAE4G,OAAQ86iB,KAZxE,mBAUIt9lB,EAVJ,EAUIA,KAVJ,EAWI5J,KAEE4J,EAbN,iBAcI,OAdJ,UAcUsqD,YAAI,IAAIgS,IAA4C,CAAE9Z,OAAQ86iB,KAdxE,QAeI,OAfJ,UAeUhziB,YAAI,IAAI0J,IAA2B,CAAE/tE,GAAIwkR,GAAS8yV,KAf5D,yCAmBA,SAAU3G,GACN1mnB,GADJ,iFAQoC,OARpC,EAMMA,EAAOgc,QAFToxmB,EAJJ,EAIIA,SACA7yV,EALJ,EAKIA,MALJ,SAQ0C1lN,YAAO6rH,eARjD,OAYM,OAJE4sb,EARR,gBAYYx3oB,YAAKsyoB,GAAoB,IAAIx8iB,IAAyB,CAAE0G,OAAQ86iB,KAZ5E,mBAUIt9lB,EAVJ,EAUIA,KAVJ,EAWI5J,KAEE4J,EAbN,iBAcI,OAdJ,UAcUsqD,YAAI,IAAIgS,IAA4C,CAAE9Z,OAAQ86iB,KAdxE,QAeI,OAfJ,UAeUhziB,YAAI,IAAI4J,IAA6B,CAAEjuE,GAAIwkR,GAAS+yV,KAf9D,yCAmBA,SAAU3G,GACR3mnB,GADF,iFAGoC,OAHpC,SAG0C60E,YAAOogG,eAHjD,OAMiC,OAHzBC,EAHR,OAIQjoG,EAJR,UAI6BjtE,EAAOitE,0BAJpC,SAKQqF,EAAiBtyE,EAAOgc,QALhC,SAMuC64D,YAAO41C,YAA4B,CAACn4C,YAN3E,UAMQu4C,EANR,QAQI59C,KACuB,MAArBioG,GAEErqD,GAGyF,IAFzFA,EACChyI,IAAI,WAAYkU,kBAChB1M,QAAO,SAAC80L,GAAD,OAA4BA,EAAQt8L,IAAI,QAAUq8L,KAAmBhrL,SAdrF,oBAmB0B,OADhBqjoB,EAAiB1igB,EAAWn1H,MAAM,CAAC,WAAY,EAAG,QAlB5D,iBAoBM,OApBN,UAoBY0kF,YAAI,IAAIzK,KAAoB49iB,IApBxC,yCAyBA,SAAU3G,GACN5mnB,GADJ,6EAGoC,OAHpC,SAG0C60E,YAAOogG,eAHjD,OAKmC,OAF3BC,EAHR,OAIQ5iG,EAAiBtyE,EAAOgc,QAJhC,SAKyC64D,YAAO61C,YAA8B,CAACp4C,YAL/E,UAKQw4C,EALR,SAO2B,MAArBoqD,GAEIpqD,GAG6F,IAF7FA,EACKjyI,IAAI,WAAYkU,kBAChB1M,QAAO,SAAC80L,GAAD,OAA4BA,EAAQt8L,IAAI,QAAUq8L,KAAmBhrL,SAZ3F,oBAgB0B,OADhBqjoB,EAAiBzigB,EAAap1H,MAAM,CAAC,WAAY,EAAG,QAf9D,iBAiBM,OAjBN,UAiBY0kF,YAAI,IAAIzK,KAAoB49iB,IAjBxC,yCAsBA,SAAU1G,GACR7mnB,GADF,2FASgC,OAThC,EAQMA,EAAOgc,QAJTgvE,EAJJ,EAIIA,UACA1Y,EALJ,EAKIA,OACArF,EANJ,EAMIA,mBACAmvO,EAPJ,EAOIA,UAPJ,SASsCvnO,YAAOgsH,YAAiB,CAAC71G,eAT/D,OAUyB,OADjBulB,EATR,gBAU+B17B,YAAOs7B,eAVtC,UAUQH,EAVR,OAac,MAAVO,GACa,MAAVj+B,IACuB,IAApB09B,IACgG,IAAhGO,EAAO13H,IAAI,SAASiiB,WAAU,SAAC0ynB,GAAD,OAAkBA,EAAa30oB,IAAI,QAAUm3H,KAhBrF,iBAwBI,OALM+lE,EAAcxlE,EAAO13H,IAAI,SACzBq1Y,EAAYn4M,EAAYl9L,IAAI,GAC5B40oB,EAA8B,MAAVn7iB,EACIA,EACa,MAAb47S,GAAqBA,EAAUr1Y,IAAI,MAvBrE,UAwBUuhG,YAAI,IAAI9N,KAAc/8D,OAAKghG,SAxBrC,WA0B6B,MAArBk9gB,EA1BR,iBA2CM,OAhBM97P,EAAiB57M,EAAYj4L,KAAI,SAAC4voB,GACtC,IAAMF,EAAeE,EAAmB70oB,IAAI,MAC5C,OAAI20oB,IAAiBC,EACZrziB,YAAI,IAAIxN,IAAqB,CAClC0F,OAAQ77F,OAAO+2oB,GACfpxU,UAAWA,EAAY,WACrBA,UACExrU,KAGCwpG,YAAI,IAAIxN,IAAqB,CAClC0F,OAAQ77F,OAAO+2oB,SAtC3B,UA2CYjyc,YAAIo2M,EAAej0Y,WAAWhG,WA3C1C,QA4CM,OA5CN,UA4CY0iG,YAAI,IAAIpN,KAAuBygjB,EAAmBxgjB,IA5C9D,gCA8CMnwE,QAAQ08E,MAAM,uBA9CpB,yCAmDO,SAAU20S,GACbnuX,GADG,uFAO2B,OAP3B,EAMDA,EAAOgc,QAFTgvE,EAJG,EAIHA,UACA1Y,EALG,EAKHA,OALG,SAOiCuC,YAAOmsH,YAAmB,CAACh2G,eAP5D,OAQkB,OADjB0mF,EAPD,gBAQwB78F,YAAOw7B,eAR/B,UAQCL,EARD,OAWW,MAAZ0hE,GACe,MAAVp/F,IACuB,IAApB09B,IACsG,IAAtG0hE,EAAS74L,IAAI,SAASiiB,WAAU,SAAC6ynB,GAAD,OAAoBA,EAAe90oB,IAAI,QAAUm3H,KAdxF,iBAoBH,OAHMgmE,EAAgBtE,EAAS74L,IAAI,SAC7Bq1Y,EAAYl4M,EAAcn9L,IAAI,GAC9B+0oB,EAAgC,MAAVt7iB,EAAiBA,EAAsB,MAAb47S,GAAqBA,EAAUr1Y,IAAI,MAnBtF,UAoBGuhG,YAAI,IAAI9N,KAAc/8D,OAAKkhG,iBApB9B,WAsBwB,MAAvBm9gB,EAtBD,oBAuB2B,KAAX,OAAb53c,QAAa,IAAbA,OAAA,EAAAA,EAAenlM,MAvBlB,iBAwBC,OAxBD,UAwBOiF,YAAKkxoB,GAAiB,IAAIl6iB,IAAuBr2F,OAAOm3oB,KAxB/D,gCA8BC,OAJMj8P,EAAiB37M,EAAcl4L,KAAI,SAAC+voB,GACxC,IAAMF,EAAiBE,EAAqBh1oB,IAAI,MAChD,OAAOuhG,YAAI,IAAItN,IAAuBr2F,OAAOk3oB,QA5BhD,UA8BOpyc,YAAIo2M,EAAej0Y,WAAWhG,WA9BrC,QAgCD,OAhCC,UAgCK0iG,YAAI,IAAIjN,KAAyBygjB,IAhCtC,gCAkCD9wnB,QAAQ08E,MAAM,uBAlCb,yCAsCP,SAAUstiB,GACR9mnB,GADF,0FAMMA,EAAOgc,QAFTs2D,EAJJ,EAIIA,OACA8pO,EALJ,EAKIA,UAEY,MAAV9pO,EAPN,iBAcQ,OAdR,SAccx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,gBACV9vB,KAAM,CACJ+mB,cAnBV,mBASMxiD,EATN,EASMA,KACA5J,EAVN,EAUMA,KAaE4J,EAvBR,oBAwBYq8V,EAAWjuX,iBAAO4xB,GAEX,OADPgmJ,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAzBvD,iBA2BQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA3B1C,wBA6BQ,OA7BR,UA6BcsqD,YAAI,IAAI5N,IAA8BspG,IA7BpD,QA8BiB,OAATsmI,QAAS,IAATA,OA9BR,gCAiCM,OAjCN,UAiCYhiO,YAAI,IAAIjL,KAjCpB,QAkCMryE,QAAQ7Z,MAAM,sBAAuB,CAACijC,QAlC5C,gCAqCI,OArCJ,UAqCUk0D,YAAI,IAAIjL,KArClB,QAsCIryE,QAAQ7Z,MAAM,qBAtClB,yCAyCA,SAAU8joB,GAAYlphB,GAAtB,gFACU/tE,EAAc+tE,EAAd/tE,KAAM5J,EAAQ23E,EAAR33E,KACV4J,EAFN,oBAGUq8V,EAAWjuX,iBAAO4xB,GAEX,OADPgmJ,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAJrD,gBAMMoH,QAAQ7Z,MAAM,mBAAoB6sC,GANxC,uBAQM,OARN,UAQYsqD,YAAI,IAAI1N,IAAgCopG,IARpD,gCAWI,OAXJ,UAWU17F,YAAI,IAAIjL,KAXlB,QAYIryE,QAAQ7Z,MAAM,+BAAgC,CAACijC,QAZnD,yCAeA,SAAU8gmB,GACNhnnB,GADJ,sFAGgC,kBAAnBA,EAAOgc,QAHpB,iBAUY,OAVZ,SAUkBlmC,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,wBACV9vB,KAAM,CACJg/jB,qBAAsBvqnB,EAAOgc,aAf3C,mBAKU8T,EALV,EAKUA,KACA5J,EANV,EAMUA,KAaE4J,EAnBZ,oBAoBgBq8V,EAAWjuX,iBAAO4xB,GAEX,OADPgmJ,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UArB3D,iBAuBYoH,QAAQ7Z,MAAM,mBAAoB6sC,GAvB9C,wBAyBY,OAzBZ,UAyBkBsqD,YAAI,IAAI1N,IAAgCopG,IAzB1D,gCA4BU,OA5BV,UA4BgB17F,YAAI,IAAIjL,KA5BxB,QA6BUryE,QAAQ7Z,MAAM,+BAAgC,CAACijC,QA7BzD,gCA0CwB,OAVd4sf,EAAW9ygB,EAAOgc,QAAQl+B,KAAI,SAACw0F,GAAD,OAAYx8F,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAC9FtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,wBACV9vB,KAAM,CACJg/jB,qBAAsBj4iB,UArChC,oBA0C8BipG,YAAIu3V,GA1ClC,QA2CM,OADMu+E,EA1CZ,iBA2CY91a,YAAI81a,EAAUvzmB,KAAI,SAAC+/G,GAAD,OAAcz9F,YAAK2mnB,GAAalphB,OA3C9D,QA4CM79F,EAAO8gB,QAAQs7R,UAAUi1S,EAAUvzmB,KAAI,SAAC+/G,GAAD,OAAc3/F,iBAAO2/F,EAAS/tE,MAAMp6B,MAAM,CAAC,UAAW,OAAQ,aA5C3G,wBA8CM,OA9CN,qCA8CY0kF,YAAI,IAAIjL,KA9CpB,QA+CMryE,QAAQ7Z,MAAM,8BA/CpB,wDAmFA,SAAUgkoB,GACRjnnB,GADF,2FAce,OAVXgc,EACEhc,EADFgc,QAIAs2D,EAIEt2D,EAJFs2D,OACAs8B,EAGE5yF,EAHF4yF,UACAnC,EAEEzwF,EAFFywF,yBACAE,EACE3wF,EADF2wF,SAXJ,SAcqB93B,YAAOk7B,eAd5B,OA6BM,OAfED,EAdR,0BAgBKvgG,OAAKghG,OAAS,yBAhBnB,cAiBKhhG,OAAKkhG,eAAiB,iCAjB3B,cAkBKlhG,OAAKszP,QAAU,mBAlBpB,cAmBKtzP,OAAKu+mB,YAAc,mBAnBxB,cAoBKv+mB,OAAK4uB,KAAO,mBApBjB,cAqBK5uB,OAAKw+mB,iBAAmB,mBANrB1yiB,EAfR,WA6BYvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CACJqjD,YACAjC,WACAF,4BAEFhlF,OAAQ,CACN6qD,cAvCR,mBAwBIxiD,EAxBJ,EAwBIA,KACA5J,EAzBJ,EAyBIA,IAmBG4J,EA5CP,iBA6CI,OA7CJ,UA6CUsqD,YAAI,IAAI/I,MA7ClB,QA8CIv0E,QAAQ7Z,MAAM,sBAAuB,CAACijC,QA9C1C,iCAiDS,CACL4J,OACA5J,QAnDJ,yCAuDA,SAAUghmB,GACRlnnB,GADF,uIAgBe,OAZXgc,EACEhc,EADFgc,QAIAs2D,EAKEt2D,EALFs2D,OACAm6B,EAIEzwF,EAJFywF,yBACAE,EAGE3wF,EAHF2wF,SACAT,EAEElwF,EAFFkwF,SACAU,EACE5wF,EADF4wF,kBAGIj3F,EAAau2F,EAASrzH,IAAI,MAflC,SAgBqBg8F,YAAOk7B,eAhB5B,OA+BM,OAfED,EAhBR,0BAkBKvgG,OAAKghG,OAAS,yBAlBnB,cAmBKhhG,OAAKkhG,eAAiB,iCAnB3B,cAoBKlhG,OAAKszP,QAAU,mBApBpB,cAqBKtzP,OAAKu+mB,YAAc,mBArBxB,cAsBKv+mB,OAAK4uB,KAAO,mBAtBjB,cAuBK5uB,OAAKw+mB,iBAAmB,mBANrB1yiB,EAjBR,WA+BYvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CAGJyikB,kBAAmBr4mB,EACnBg3F,WACAF,4BAEFhlF,OAAQ,CACN6qD,cA3CR,mBA0BIxiD,EA1BJ,EA0BIA,KACA5J,EA3BJ,EA2BIA,KAqBE4J,EAhDN,iBAgE8B,OAfpBqtD,EAAgBj/E,iBAAO4xB,GACvB2uG,EAA4BthD,EAAcznF,MAAM,CAAC,UAAW,SAC5Du4nB,EAAwBxogB,IAAOC,uBACnCxZ,GAEIgihB,EAAezvf,EAAM/oI,MAAM,CAAC,WAAY3I,kBACxCohoB,EAA0BD,EAAaztoB,QAAO,SAACutI,EAAK6Q,GACxD,IAAMuvf,EAAqBvvf,EAAKnpI,MAAM,CAAC,WAAY,OACnD,OAAOjf,OAAO23oB,KAAwB33oB,OAAOk/B,GAAckpH,EAAO7Q,IACjEtmI,iBAEG2moB,EAAmC,IAAIj5gB,IAAY,CACvD/W,QAAS4vhB,IACR14lB,cA9DP,UAgEoCs/C,YAAOgsI,eAhE3C,QAiE0B,OADhByta,EAhEV,iBAiEgCz5iB,YAAOupI,gBAjEvC,QAkE8B,OADpBgB,EAjEV,iBAkEoCvqI,YAAO8mI,eAlE3C,QAmEiC,OADvBxuG,EAlEV,iBAmEuCt4B,YAAO4mI,eAnE9C,QAoEoC,OAD1B8ya,EAnEV,iBAoE0C15iB,YAAO81C,eApEjD,QAqEmC,OADzB6zL,EApEV,iBAqEyC3pO,YAAOg+B,eArEhD,WAqEU27gB,EArEV,OAuEUC,EAA+B/moB,cACjC,CACE,GAAM,CACJ,CACEsmH,cAAe,CACb,KAAQsghB,IAGZ,CACEhroB,KAAM,CACJ,KAAQgroB,IAGZ,CACE74gB,YAAa,CACX,KAAQ64gB,OAWdI,EAA0D,IAAjCP,EAAwBt9oB,KAAas9oB,EAA0BE,EAExFM,EAAevva,EAAc3+N,QAAO,SAACutI,EAAK3tI,EAAQjH,GACtD,IAAKiH,GAA2B,KAAX,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQxP,MACrB,OAAOm9I,EAGT,GAAY,iBAAR50I,EAAwB,CAC1B,GAAoB,IAAhBiH,EAAOxP,KACT,OAAOm9I,EAEP,IAAMime,EAAmB5zmB,EAAOvC,KAAI,SAACi0I,GACnC,IAAMqnP,EAAoBrnP,EAAal5I,IAAI,SAC3C,OAAOqlB,iBAAO,CACZ+vG,MAAO,CACL,KAAQmrQ,QAIRw1Q,EAAqB1wnB,iBAAO,CAChCkY,GAAI69kB,IAEN,OAAOjme,EAAI9sI,KAAK0toB,GAIpB,IAAMC,EAAc,qBAAiBz1oB,EAAjB,iBACpB,IAAKiH,GAA2B,KAAX,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQxP,MACrB,OAAOm9I,EAIT,GAAY,QAAR50I,EAAe,CAGjB,IAAM01oB,EAAUzuoB,EACbA,QAAO,SAACulJ,GACP,GAC0B,UAArBA,EAAI/sJ,IAAI,UAAwBk2oB,IAAqC1woB,SAAS8uH,IACtD,cAArBy4B,EAAI/sJ,IAAI,UAA4Bm2oB,IAAkC3woB,SAAS8uH,GAErF,OAAOy4B,KAGV9nJ,KAAI,SAAC8nJ,GACJ,IAAMqpf,EAAWrpf,EAAI/sJ,IAAI,SACzB,OAAOqlB,iBAAO,eACX2wnB,EAAiB,CAChB,GAAMI,QAKd,GAAIH,EAAQ5koB,QAAS,CACnB,IAAMgloB,EAAYhxnB,iBAAO,CACvBqY,IAAKu4mB,IAEP,OAAO9ggB,EAAI9sI,KAAKguoB,IAKpB,IAAM1+oB,EAAQ6P,EAAO6X,QAAQrf,IAAI,SAC3Bs2oB,EAAepioB,OAAKF,OAAOrc,GAC7B4+oB,EAAkBD,GAAgB3+oB,EAAMqI,IAAI,GAC5Cw2oB,EAAkBF,GAAgB3+oB,EAAMqI,IAAI,GAEhD,GAAIs2oB,EAAc,CAChB,IAAMG,EAAsBf,EAAqB93nB,MAAK,SAAA+vM,GAAS,OAAIA,EAAU3tN,IAAI,WAAaO,KACxFm2oB,EAAmBD,EAAoB55nB,MAAM,CAAC,SAAU,EAAG,OAAQ,qBACnE85nB,EAAYF,EAAoB55nB,MAAM,CAAC,SAAU,EAAG,QAAS,IAC7D+5nB,EAAYH,EAAoB55nB,MAAM,CAAC,SAAU,EAAG,QAAS,IAC7Dg6nB,EAAcJ,EAAoB55nB,MAAM,CAAC,SAAU,EAAG,QAAS,IAC/Di6nB,EAAcL,EAAoB55nB,MAAM,CAAC,SAAU,EAAG,QAAS,IAC/Dk6nB,EAAepxU,EAAwB9oT,MAAM,CAAC,UAAW,SAAWue,iBAAemB,KACnDm6mB,GAAoBK,IAExDR,EAAkBA,GAAoBA,EAAkBM,IAAgBC,EAAcD,IAAgBD,EAAYD,GAAcA,EAAY,GAC5IH,EAAkBA,GAAoBA,EAAkBK,IAAgBC,EAAcD,IAAgBD,EAAYD,GAAcA,EAAY,IAIhJ,IAAMK,EAAeV,EAMjBjxnB,iBAAO,eACJ2wnB,EAAiB,CAChB,GAAMQ,EACN,GAAMD,KARVlxnB,iBAAO,eACJ2wnB,EAAiB,CAChB,GAAMr+oB,KASd,OAAOw9I,EAAI9sI,KAAK2uoB,KACf9ioB,kBAEG+ioB,EAAgBpB,EAAuBh5nB,MAAM,CAAC,UAAW,QACzDq6nB,EAAoBzB,EACtBI,EAAuB1poB,MAAM,CAAC,UAAW,OAAQ8qoB,EAAc5uoB,KAAKutoB,IACpEC,EAEE1va,EAAc+wa,EAAkBr6nB,MAAM,CAAC,UAAW,QAElDs6nB,EAAe,CACnB,OAAU,CACR,IAAM,CAAE,UAAW,YAAnB,mBAAkCxB,EAAyB,CAAC,gBAAkB,OAI5EyB,EAAyBF,EAAkB/qoB,MAAM,CAAC,UAAW,OAAQg6N,EAAY99N,KAAZ,MAAA89N,EAAW,YAAS2va,GAAT,QAAuBqB,MAEhG,MAATvxf,EAjNR,iBAkNM3hI,QAAQ7Z,MAAM,mBAAoB6sC,GAlNxC,wBAoNM,OApNN,UAoNYsqD,YAAI,IAAI8yB,KAAoB,CAChCC,kBAAmBx3F,KArN3B,QAwNM,OAxNN,UAwNYykE,YAAI,IAAIsyB,MAxNpB,QA0NM,OA1NN,UA0NYtyB,YAAI,IAAIgzB,IAAgB,CAC5BC,YAAa4ihB,EACbrjhB,uBA5NR,gCAiOI,OAjOJ,UAiOUxyB,YAAI,IAAI/I,MAjOlB,QAkOIv0E,QAAQ7Z,MAAM,wBAAyB,CAACijC,QAlO5C,yCAuOA,SAAUihmB,GACRnnnB,GADF,uGAOE,OAHEgc,EACEhc,EADFgc,QAJJ,SAOQo+D,YAAI,IAAI3J,MAAmC,IAPnD,OAmBe,OATX6B,EAMEt2D,EANFs2D,OACAm6B,EAKEzwF,EALFywF,yBACAE,EAIE3wF,EAJF2wF,SACAT,EAGElwF,EAHFkwF,SACAgkhB,EAEEl0mB,EAFFk0mB,qBACAx2mB,EACEsC,EADFtC,SAGI/D,EAAau2F,EAASrzH,IAAI,MAlBlC,SAmBqBg8F,YAAOk7B,eAnB5B,OAkCM,OAfED,EAnBR,0BAqBKvgG,OAAKghG,OAAS,yBArBnB,cAsBKhhG,OAAKkhG,eAAiB,iCAtB3B,cAuBKlhG,OAAKszP,QAAU,mBAvBpB,cAwBKtzP,OAAKu+mB,YAAc,mBAxBxB,cAyBKv+mB,OAAK4uB,KAAO,mBAzBjB,cA0BK5uB,OAAKw+mB,iBAAmB,mBANrB1yiB,EApBR,YAkCYvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CAGJ24F,MAAM,EAIN8pe,kBAAmBr4mB,EACnBg3F,WACAF,4BAEFhlF,OAAQ,CACN6qD,cAlDR,oBA6BIxiD,EA7BJ,EA6BIA,KACA5J,EA9BJ,EA8BIA,KAyBE4J,EAvDN,iBAwDI,OAxDJ,UAwDUsqD,YAAI,IAAI3J,MAAmC,IAxDrD,WA0DU0M,EAAgBj/E,iBAAO4xB,GACvB2uG,EAA4BthD,EAAcznF,MAAM,CAAC,UAAW,YAC5Dy6nB,EAAkB1xf,GAASA,EAAM5lJ,IAAI,gBAGnBs3oB,EAAgBt/oB,KAAO,GA/DnD,iBAgEM,OAhEN,UAgEYupG,YAAI,IAAIzJ,KAA4B,CAAC8tD,MAAO0xf,KAhExD,QAiEM,OAjEN,UAiEY/1iB,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIq6mB,IACJ3wiB,MAAM,KAnEd,QAqEM,OArEN,UAqEYrF,YAAI,IAAI/wD,IAA+B,CAAEtT,GAAIq6mB,IAAkBpxmB,MAAO,CAC1EtF,WACAw2mB,2BAvER,mCA0EMx2mB,KACIw2mB,EA3EV,iBA4EQ,OA5ER,UA4Ec91iB,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIq4X,IACJ3uT,MAAM,KA9EhB,gCAoFI,OApFJ,UAoFUrF,YAAI,IAAI3J,MAAmC,IApFrD,QAqFI3zE,QAAQ7Z,MAAM,oCAAqC,CAACijC,QArFxD,yCAyFA,SAAUkhmB,GACRpnnB,GADF,yHAOe,OAJPqwnB,EAHR,UAG2BrwnB,EAAOgc,eAHlC,aAG2B,EAAgBq0mB,iBACnC1jhB,EAJR,UAImB3sG,EAAOgc,eAJ1B,aAImB,EAAgB2wF,SAC3B2jhB,EALR,UAKsCtwnB,EAAOgc,eAL7C,aAKsC,EAAgBs0mB,4BALtD,SAOqBz7iB,YAAOk7B,eAP5B,OAOQD,EAPR,YAUUA,EAVV,cAWSvgG,OAAKghG,OAXd,SAeShhG,OAAKkhG,eAfd,UAmBSlhG,OAAKw+mB,iBAnBd,mBAYe,OAZf,UAYqBl5iB,YAAOs7B,eAZ5B,eAYM79B,EAZN,oCAgBe,OAhBf,UAgBqBuC,YAAOw7B,eAhB5B,eAgBM/9B,EAhBN,2CAoBMA,GAAU,EApBhB,6BAwBe,OAxBf,UAwBqBuC,YAAOo7B,eAxB5B,QAwBM39B,EAxBN,eA2B4B,OA3B5B,UA2BkCuC,YAAOogG,eA3BzC,QA6B6B,OAFrBrmE,EA3BR,iBA6BmC/5B,YAAO8mI,eA7B1C,QA8B2B,OADnBoyJ,EA7BR,iBA8BiCl5R,YAAOgnI,eA9BxC,QA+B0B,OA/B1B,iBA+BgChnI,YAAO87B,eA/BvC,QAgC2B,OADnBgB,EA/BR,iBAgCiC98B,YAAO2hG,eAhCxC,WAgCQvpE,EAhCR,QAkCkB,IAAZ36B,IAAgC,IAAfs8B,EAlCvB,oBAmCQkB,IAASvgG,OAAKw+mB,iBAnCtB,iBAoCM,OApCN,UAoCY3ziB,YAAI,IAAIsqC,IAA6B,CAAE4rgB,iCApCnD,0CAmDE,OAVMC,EAAY5+gB,GAAmBA,EAAgB94H,IAAI,WAAYkU,mBAAWA,iBAC1E0/G,EAA2BkF,GAAmBA,EAAgB94H,IAAI,4BAA4B,KAAU,EAGxG0zH,EAAwC,IAArBU,EACrB,IACsB,IAAtBA,EACEsjhB,EAAUjzhB,OAAO2P,GACjBsjhB,EAjDR,UAmDQn2iB,YAAI,IAAInJ,MAnDhB,QAoDE,OApDF,UAoDQmJ,YAAI,IAAIrJ,KAAkB,CAC9B69B,YACA6vB,MAAOvgI,iBAAO,CACZsynB,OAAQ,GACRC,OAAQ,GACRC,QAAS,QAzDf,QA0EM,OA1EN,mBA6DKnhnB,OAAKghG,OAAS,yBA7DnB,cA8DKhhG,OAAKkhG,eAAiB,iCA9D3B,cA+DKlhG,OAAKszP,QAAU,mBA/DpB,cAgEKtzP,OAAKu+mB,YAAc,mBAhExB,cAiEKv+mB,OAAK4uB,KAAO,mBAjEjB,cAkEK5uB,OAAKw+mB,iBAAmB,mBANrB1yiB,EA5DR,YA0EYvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAK,4BAGyB,IAAxBwiT,GAA6B,CAACigR,kBAAmBjgR,IAHnD,IAIFphQ,SAAUA,GAAYJ,EACtBE,4BACI4jhB,GAAoB,CAAEzhhB,cAE5BnnF,OAAQ,CACN6qD,cAvFR,oBAqEIxiD,EArEJ,EAqEIA,KACA5J,EAtEJ,EAsEIA,KAsBE4J,EA5FN,oBA6FUqtD,EAAgBj/E,iBAAO4xB,GAEhB,OADP2uG,EAA4BthD,EAAcznF,MAAM,CAAC,UAAW,UA9FtE,iBAgGMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAhGxC,wBAkGM,OAlGN,UAkGYsqD,YAAI,IAAIrJ,KAAkB,CAAE69B,YAAW6vB,WAlGnD,QAmGM,OAnGN,UAmGYrkD,YAAI,IAAIjJ,MAnGpB,WAqGY+8iB,EAAezvf,EAAM/oI,MAAM,CAAC,WAAY3I,kBAaxCohoB,GAAkD,IAAxBpgR,EAC5BmgR,EAAaztoB,QAAO,SAACutI,EAAK6Q,GAC1B,IAAMuvf,EAAqBvvf,EAAKnpI,MAAM,CAAC,WAAY,OACnD,OAAOjf,OAAO23oB,KAAwB33oB,OAAOs3X,GAAsBlvO,EAAO7Q,IACzEtmI,iBACDwmoB,EAAar1oB,IAAI,GAEfqzH,EAAWiihB,GAA2BA,EAAwBt1oB,IAAI,WAAY6O,mBAC9EiuB,EAAau2F,GAAYA,EAASrzH,IAAI,OA1HlD,iBA6HQ,OA7HR,UA6HcuhG,YAAI,IAAI8yB,KAAoB,CAAEC,kBAAmBx3F,KA7H/D,QAgIM,OAhIN,UAgIYykE,YAAI,IAAIsqC,IAA6B,CAAE4rgB,iCAhInD,gCAuII,OAvIJ,UAuIUl2iB,YAAI,IAAI/I,MAvIlB,QAwIIv0E,QAAQ7Z,MAAM,gDAAiD,CAACijC,QAxIpE,iCA2IS,CACL4J,OACA5J,QA7IJ,yCAmJA,SAAUmhmB,GACRrnnB,GADF,2FASiC,OATjC,EAQMA,EAAOgc,QAJTgvE,EAJJ,EAIIA,UACA1Y,EALJ,EAKIA,OACArF,EANJ,EAMIA,mBACAmvO,EAPJ,EAOIA,UAPJ,SASuCvnO,YAAO8qH,YAAkB,CAAC30G,eATjE,OAUyB,OADjB63K,EATR,gBAU+BhuL,YAAOo7B,eAVtC,UAUQD,EAVR,OAae,MAAX6yJ,GACa,MAAVvwL,IACuB,IAApB09B,IACmG,IAAnG6yJ,EAAQhqR,IAAI,SAASiiB,WAAU,SAAC82X,GAAD,OAAmBA,EAAc/4Y,IAAI,QAAUm3H,KAhBxF,iBAsBI,OAHMi+Q,EAAeprH,EAAQhqR,IAAI,SAC3Bq1Y,EAAYD,EAAap1Y,IAAI,GAC7B83oB,EAAwB,MAAVr+iB,EAAiBA,EAAsB,MAAb47S,GAAqBA,EAAUr1Y,IAAI,MArBrF,UAsBUuhG,YAAI,IAAI9N,KAAwC,SAA1Bu2L,EAAQhqR,IAAI,UAAuB02B,OAAKu+mB,YAAcv+mB,OAAKszP,UAtB3F,WAwBuB,MAAf8tX,EAxBR,iBAwCM,OAfMh/P,EAAiB1D,EAAanwY,KAAI,SAAC4zY,GACvC,IAAME,EAAgBF,EAAoB74Y,IAAI,MAC9C,OAAI+4Y,IAAkB++P,EACbv2iB,YAAI,IAAIrL,IAAwB,CACrCuD,OAAQ77F,OAAOm7Y,GACfx1E,UAAWA,EAAY,WACrBA,UACExrU,KAGCwpG,YAAI,IAAIrL,IAAwB,CACrCuD,OAAQ77F,OAAOm7Y,SApC3B,UAwCYr2M,YAAIo2M,EAAej0Y,WAAWhG,WAxC1C,QAyCM,OAzCN,UAyCY0iG,YAAI,IAAIzL,KAAiBgijB,EAAa1jjB,IAzClD,gCA2CMnwE,QAAQ08E,MAAM,uBA3CpB,yCAgDO,SAAU8tiB,GACftnnB,GADK,iIAGL,OAHK,SAGCo6E,YAAI,IAAIxS,MAA2B,IAHpC,OAKL,OALK,SAKC9xF,YAAKygG,IAAa,GALnB,OAML,OANK,SAMCzgG,YAAKygG,IAAa,IANnB,OAmBQ,OAZPq4B,EAAoB5uG,EAAOgc,QAAQ4yF,UACnCumE,EAAyBn1K,EAAOgc,QAAQm5J,QACxCy7c,EAAe5wnB,EAAOgc,QAAQ40mB,eAAgB,EAT/C,EAkBD5wnB,EAAOgc,QAlBN,IAWHk/kB,iBAXG,SAYH21B,EAZG,EAYHA,sBACA5jhB,EAbG,EAaHA,iBACA6+R,EAdG,EAcHA,oBACAukP,EAfG,EAeHA,iBACAS,EAhBG,EAgBHA,aAhBG,IAiBHC,qBAjBG,mBAmBcl8iB,YAAOk7B,eAnBrB,QAmBCD,EAnBD,YAqBGA,EArBH,cAsBEvgG,OAAKghG,OAtBP,UA0BEhhG,OAAKkhG,eA1BP,oBAuBM,OAvBN,UAuBY57B,YAAO41C,eAvBnB,eAuBDtsF,EAvBC,oCA2BM,OA3BN,UA2BY02C,YAAO61C,eA3BnB,eA2BDvsF,EA3BC,oCA+BM,OA/BN,UA+BY02C,YAAO21C,eA/BnB,QA+BDrsF,EA/BC,eAmCqB,OAnCrB,UAmC2B02C,YAAOr3C,gBAnClC,QAsCY,OAHXwzlB,EAnCD,OAoCCC,EAAwBF,GAAiBC,EApC1C,UAsCkBn8iB,YAAOy1C,eAtCzB,WAsCC/rF,EAtCD,OAwCO,MAARJ,GAA2B,MAAXg3I,EAxCf,0CAyCI,IAAIz4L,MAAJ,kCAAqCyhD,EAArC,gBAAiDg3I,KAzCrD,QA2DD,OAhBE7iG,EAASn0C,EAAKtlD,IAAI,MA3CnB,mBA8CF02B,OAAKghG,OAAS,uBA9CZ,cA+CFhhG,OAAKkhG,eAAiB,+BA/CpB,cAgDFlhG,OAAKszP,QAAU,iBAhDb,cAiDFtzP,OAAKu+mB,YAAc,iBAjDjB,cAkDFv+mB,OAAK4uB,KAAO,iBAlDV,cAmDF5uB,OAAKw+mB,iBAAmB,iBANrB1yiB,EA7CD,YA2DKvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPs2D,EACAs8B,EACA,CACExzB,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAK,2BACA4pH,EAAQ9hL,QADT,IAEFkrC,aAEFy+C,QAAS,CACP+ziB,cAAeE,QAvElB,oBAsDHnhmB,EAtDG,EAsDHA,KACA5J,EAvDG,EAuDHA,KAqBE4J,EA5EC,iBAiFH,OAJMqtD,EAAgBj/E,iBAAO4xB,GACvBohmB,EAAiC/ziB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,YACzEi3G,EA/EH,OA+EcukhB,QA/Ed,IA+EcA,OA/Ed,EA+EcA,EAAWx7nB,MAAM,CAAC,EAAG,aA/EnC,UAiFG0kF,YAAI,IAAIxS,MAA2B,IAjFtC,oBAqFCkkU,QArFD,IAqFCA,OArFD,EAqFCA,EAAqB5hZ,SArFtB,iBA8FD,OARM0oZ,EAA2B9G,EAAoBhuZ,KAAI,SAACovZ,EAAoBj8Z,GAC5E,OAAOi8Z,EAAmBr0Z,IAAI,aAC1B6O,cAAI,CAAEqmH,UAAWm/R,EAAmBr0Z,IAAI,eACxC6O,cAAI,CACFwtI,eAAgBg4Q,EAAmBr0Z,IAAI,kBACvC09W,KAAM22C,EAAmBr0Z,IAAI,aA3FpC,UA8FK/C,YAAKq7Z,GAAyB,IAAI7oU,KAA8B,CACpEgK,SACAs8B,YACAb,UAAWmjhB,EAAUx7nB,MAAM,CAAC,EAAG,WAAYu3G,EAAkB,kBAC7D6+R,oBAAqB8G,EACrBu5O,iBAAiB,EACjBC,iBAAiB,KApGlB,YA8GCwE,EA9GD,iBA+GD,OA/GC,UA+GKx2iB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WAlHlB,YAqHCohgB,EArHD,iBAsHD,OAtHC,UAsHK9ghB,YAAI,IAAIsyB,MAtHb,YAyHCmkhB,EAzHD,iBA0HD,OA1HC,UA0HKz2iB,YAAI,IAAI4qC,KA1Hb,WA6HEk2e,IAAam1B,EA7Hf,iBA8HD,OA9HC,UA8HKv6oB,YAAKmxoB,GAAqB,IAAI55iB,KAA0B,CAC5DiF,SACAs8B,YACAjC,SAAUA,GAAY5/G,iBACtB0/G,yBAA0BykhB,EAAUx7nB,MAAM,CAAC,EAAG,+BAAgC,KAlI/E,YAsICo7nB,EAtID,iBAyID,OAzIC,UAyIK12iB,YAAI,IAAI+pC,IAAyB,CAAClY,gBAAgB,KAzIvD,QA0ID,OA1IC,UA0IK7xB,YAAI,IAAI4xB,KAAwB,CAACC,gBAAgB,KA1ItD,YA6ICivf,EA7ID,iBA8ID,OA9IC,UA8IKplnB,YAAKsxoB,GAA8B,IAAIz5iB,IAAmC,CAAE0ijB,mBAAkB1jhB,cA9InG,QAkJH,OAlJG,UAkJG72H,YAAKilmB,GAAU,IAAIlsgB,IAAe,CAACyD,YAlJtC,gCAoJHx1E,QAAQ7Z,MAAM,sBAAuB,CAACijC,QApJnC,QAuJL,OAvJK,UAuJCk0D,YAAI,IAAIxS,MAA2B,IAvJpC,QAyJL,aAAA5nE,EAAOgc,SAAQijX,iBAAf,iBAzJK,yCA4JP,SAAUsoP,GACRvnnB,GADF,yFAGE,OAHF,SAGQlqB,YAAKygG,IAAa,GAH1B,OASE,OALMp4C,EAA4Bn+B,EAAOgc,QAAQmiB,KAC3Cm0C,EAAiBtyE,EAAOgc,QAAQs2D,OAChCs+iB,EAAe5wnB,EAAOgc,QAAQ40mB,eAAgB,EAC9Cx0U,EAAYp8S,EAAOgc,QAAQogS,UAC3B6nF,EAASjkY,EAAOgc,QAAQioX,OARhC,SASQnuZ,YAAKygG,IAAa,KAT1B,OAiBM,OAjBN,UAiBYzgG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPs2D,EACA,CACE8I,QAAS,OACTC,SAAU,aACV9vB,KAAK,eACAptB,EAAK9qC,aAxBlB,oBAYIy8B,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,oBA8BUq8V,EAAWjuX,iBAAO4xB,GAEJ,OADdqhmB,EAAehlQ,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UA/B5D,iBAiCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAC9Bm0W,GACFA,IAnCR,wBAsCM,OAtCN,UAsCY7pT,YAAI,IAAIzL,KAAiB2D,IAtCrC,QAuCM,OAvCN,UAuCY8H,YAAI,IAAInL,IAAwBkijB,IAvC5C,WAwCU/0U,GACFA,KAEEw0U,EA3CV,iBA4CQ,OA5CR,UA4Ccx2iB,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,qDACnB65E,SAAU,UACVof,gBAAiB,WA/C3B,gCAoDIh9F,QAAQ7Z,MAAM,oBAAqB,CAACijC,QAChC+9W,GACFA,IAtDN,yCA2DA,SAAUujP,GACRxnnB,GADF,mFAeM,OAfN,EAOMA,EAAOgc,QAFTuvC,EALJ,EAKIA,KACA+mB,EANJ,EAMIA,OANJ,SAeYx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPs2D,EACA,CACE8I,QAAS,OACTC,SAAU,mBACV9vB,YArBR,gBAUIz7B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAcE4J,GACIq8V,EAAWjuX,iBAAO4xB,GACHq8V,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAExDoH,QAAQ7Z,MAAM,2BAA4B,CAACijC,QA7B/C,wCAgCA,SAAUuhmB,GACNznnB,GADJ,mFAeM,OAfN,EAOMA,EAAOgc,QAFTuvC,EALJ,EAKIA,KACA+mB,EANJ,EAMIA,OANJ,SAeYx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPs2D,EACA,CACE8I,QAAS,OACTC,SAAU,2BACV9vB,YArBR,gBAUIz7B,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAcE4J,GACIq8V,EAAWjuX,iBAAO4xB,GACHq8V,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UAExDoH,QAAQ7Z,MAAM,6BAA8B,CAACijC,QA7BjD,wCAgCA,SAAUwhmB,KAAV,+EAEE,OAFF,SAEQ5xoB,YAAKygG,IAAa,KAF1B,OASM,OATN,SASYzgG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,sBAZhB,mBAIIvrD,EAJJ,EAIIA,KACA5J,EALJ,EAKIA,KAUE4J,EAfN,oBAgBIhzB,QAAQ7Z,MAAM,sBAAuB,CACnC6sC,SAEIolkB,EAAoBh3lB,iBAAO4xB,GAEjB,OADVshmB,EAAwCl8B,EAAkBx/lB,MAAM,CAAC,UAAW,OAAQ,kBApB9F,iBAsBMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAtBxC,wBAwBM,OAxBN,UAwBYsqD,YAAI,IAAIrM,IAA+BqjjB,IAxBnD,gCA4BI,OA5BJ,UA4BUh3iB,YAAI,IAAI3L,IAAuB,CAACvoD,SA5B1C,yCAgCA,SAAUyhmB,GACR3nnB,GADF,mGAOE,OAPF,SAOQlqB,YAAKygG,IAAa,KAP1B,OA2BM,OAlBFv6D,EACEhc,EADFgc,QAIMq1mB,EAIJr1mB,EAJFmiB,KAbJ,EAiBMniB,EAHFgvE,iBAdJ,OAciB,EAdjB,IAiBMhvE,EAFFm7X,kBAfJ,SAgBI/6F,EACEpgS,EADFogS,UAGI43F,EAAWq9O,EAAiBx4oB,IAAI,QAAUw4oB,EAAiBx4oB,IAAI,QAAU4hG,IAAQ55E,EAAE,6CAnB3F,SA2BY/qB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,aACV9vB,KAAK,uCACA8lkB,EAAiBh+nB,QADlB,IAEF/P,KAAM0wZ,GACFmD,EACA,CAAE58T,OAAQ,QACV,KAEe,IAAfyQ,EAAmB,CAAEA,aAAc,QAtC/C,mBAsBUsmiB,EAtBV,EAsBIxhmB,KACKyhmB,EAvBT,EAuBIrrmB,KAmBEormB,EA1CN,oBA2CUE,EAA0BtznB,iBAAOoznB,GAE3B,OADNnzlB,EAAyBqzlB,EAAwB97nB,MAAM,CAAC,UAAW,OAAQ,UA5CrF,iBA8CMoH,QAAQ7Z,MAAM,mBAAoBquoB,GA9CxC,wBAgDM,OAhDN,UAgDYl3iB,YAAI,IAAInL,IAAwB9wC,IAhD5C,WAiDYm0C,EAASn0C,EAAKzoC,MAAM,CAAC,EAAG,QACX,IAAfs1F,EAlDV,iBAmDQ,OAnDR,UAmDcl1G,YAAKuwY,IAAgB,IAAInhS,KAAqB,CAAC8F,YAAW1Y,YAnDxE,YAqDU8pO,EArDV,iBAsDiB,OAATA,QAAS,IAATA,KAAY9pO,EAAQn0C,EAAKzoC,MAAM,CAAC,EAAG,UAtD3C,wBAwDQ,OAxDR,UAwDc0kF,YAAI,IAAIwN,KAAoB,CAAEoD,YAAW1Y,YAxDvD,QAyDQ,OAzDR,UAyDc8H,YAAI,IAAIzL,KAAiB2D,IAzDvC,QA0DQ,OA1DR,UA0Dc8H,YAAI,IAAI/K,KA1DtB,QA6DuB,OA7DvB,UA6D6BwF,YAAO4uL,eA7DpC,YA6DYxiO,EA7DZ,QA8DqB5iD,SAAS,kBAAoB4iD,EAAS5iD,SAAS,iBAAmB4iD,EAAS5iD,SAAS,kBA9DzG,iBA+DQ,OA/DR,UA+Dc+7F,YAAI,IAAI9N,KAAc/8D,OAAK4uB,OA/DzC,gCAmEI,OAnEJ,UAmEUi8C,YAAI,IAAI3L,IAAuB,CAACvoD,IAAKqrmB,KAnE/C,YAqEqB,IAAfvmiB,EArEN,iBAsEI,OAtEJ,UAsEU5Q,YAAI,IAAI4K,KAA4B,CAAEgG,WAAY,KAtE5D,YAwEMmsT,EAxEN,iBAyEI,OAzEJ,UAyEU/8T,YAAI,IAAIlR,KAAsBiuU,IAzExC,yCA6EA,SAAUywO,GACR5nnB,GADF,2FAkBM,OAlBN,EAUMA,EALFgc,QACEgvE,EANN,EAMMA,UANN,IAOM7sD,YAPN,MAOaz2C,gBAPb,EAQM00T,EARN,EAQMA,UARN,SAkBYtmU,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CAEP,CACEo/D,QAAS,OACTC,SAAU,mBACV9vB,KAAK,2BACAptB,EAAK9qC,QADN,IAEF23F,mBA1BV,mBAaIl7D,EAbJ,EAaIA,KACA5J,EAdJ,EAcIA,KAgBE4J,EA9BN,oBA+BUqtD,EAAgBj/E,iBAAO4xB,GAGd,OAFT2hmB,EAAsBt0iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,OAAQ,KAhChF,iBAmCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAnCxC,wBAsCM,OADMwiD,EAASm/iB,EAAQ54oB,IAAI,MArCjC,UAsCYuhG,YAAI,IAAI0J,IAA2B,CAAC/tE,GAAIi1E,KAtCpD,QAuCM,OAvCN,UAuCYl1G,YAAK6woB,GAAkB,IAAI35iB,KAAuBsF,IAvC9D,QAwCU8pO,GACFA,EAAU9pO,GAzClB,gCA6CIx1E,QAAQ7Z,MAAM,QAASijC,GA7C3B,yCAiDA,SAAU2hmB,GACR7nnB,GADF,yFAiBM,OAjBN,EASMA,EAJFgc,QACEgvE,EANN,EAMMA,UANN,IAOM7sD,YAPN,MAOaz2C,gBAPb,WAiBY5R,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CAEP,CACEo/D,QAAS,OACTC,SAAU,mBACV9vB,KAAK,2BACAptB,EAAK9qC,QADN,IAEF23F,mBAzBV,mBAYIl7D,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,oBA8BUqtD,EAAgBj/E,iBAAO4xB,GAGd,OAFT2hmB,EAAsBt0iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,OAAQ,KA/BhF,iBAkCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAlCxC,wBAqCM,OADMwiD,EAASm/iB,EAAQ54oB,IAAI,MApCjC,UAqCYuhG,YAAI,IAAI0J,IAA2B,CAAC/tE,GAAIi1E,KArCpD,QAsCM,OAtCN,UAsCYl1G,YAAK6woB,GAAkB,IAAI35iB,KAAuBsF,IAtC9D,QAuCM,OAvCN,UAuCY8H,YAAIl5F,YAAK+nB,wBAAwB,IAAMqpE,IAvCnD,gCA0CIx1E,QAAQ7Z,MAAM,QAASijC,GA1C3B,yCA6CA,SAAU4hmB,GACN9nnB,GADJ,yFAiBM,OAjBN,EASMA,EAJFgc,QACEgvE,EANN,EAMMA,UANN,IAOM7sD,YAPN,MAOaz2C,gBAPb,WAiBY5R,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CAEP,CACEo/D,QAAS,OACTC,SAAU,2BACV9vB,KAAK,2BACAptB,EAAK9qC,QADN,IAEF23F,mBAzBV,mBAYIl7D,EAZJ,EAYIA,KACA5J,EAbJ,EAaIA,KAgBE4J,EA7BN,oBA8BUqtD,EAAgBj/E,iBAAO4xB,GAGd,OAFT2hmB,EAAsBt0iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,OAAQ,KA/BhF,iBAkCMoH,QAAQ7Z,MAAM,mBAAoB6sC,GAlCxC,wBAqCM,OADMwiD,EAASm/iB,EAAQ54oB,IAAI,MApCjC,UAqCYuhG,YAAI,IAAI4J,IAA6B,CAACjuE,GAAIi1E,KArCtD,QAsCM,OAtCN,UAsCYl1G,YAAK8woB,GAAoB,IAAIz5iB,KAAyBmF,IAtClE,QAuCM,OAvCN,UAuCY8H,YAAIl5F,YAAK+nB,wBAAwB,IAAMqpE,IAvCnD,gCA0CIx1E,QAAQ7Z,MAAM,QAASijC,GA1C3B,yCA8CA,SAAU6hmB,GACR/nnB,GADF,2FAQe,OARf,EAMOA,EAAOgc,QAFVgvE,EAJJ,EAIIA,UACA0miB,EALJ,EAKIA,WALJ,SAQqB78iB,YAAOk7B,eAR5B,OAsBM,OAdED,EARR,0BAUKvgG,OAAKghG,OAAS,qBAVnB,cAWKhhG,OAAKkhG,eAAiB,6BAX3B,cAYKlhG,OAAKszP,QAAU,eAZpB,cAaKtzP,OAAKu+mB,YAAc,eAJhBzyiB,EATR,WAsBYvlG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CACJi+I,QAASkob,OA3BjB,mBAiBI5hmB,EAjBJ,EAiBIA,KACA5J,EAlBJ,EAkBIA,KAaE4J,EA/BN,oBAgCUqtD,EAAgBj/E,iBAAO4xB,KACvB6hmB,EAAiBx0iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,aAjCnE,iBAmCM,OAnCN,UAmCY0kF,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,0DACnB65E,SAAU,UACVof,gBAAiB,WAtCzB,gCAyCM,OAzCN,UAyCY1f,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,yDACnB65E,SAAU,WA3ClB,QA8C0B,MAAlBi3iB,GACF70nB,QAAQ7Z,MAAM,mBAAoB6sC,GA/CxC,wBAmDI,OADAhzB,QAAQ7Z,MAAM,sBAAuB,CAACijC,QAlD1C,UAmDUk0D,YAAI,IAAI3wD,IAAsB,CAClCtD,QAASs0D,IAAQ55E,EAAE,yDACnB65E,SAAU,WArDhB,aAwDUo1B,EAxDV,cAyDSvgG,OAAKghG,OAzDd,UA6DShhG,OAAKkhG,eA7Dd,UAiESlhG,OAAKszP,SAjEd,OAkEStzP,OAAKu+mB,YAlEd,oBA0DM,OA1DN,UA0DY1ziB,YAAI,IAAI0J,IAA2B,CAAC/tE,GAAIi1E,KA1DpD,4DA8DM,OA9DN,UA8DY5Q,YAAI,IAAI4J,IAA6B,CAACjuE,GAAIi1E,KA9DtD,QAmEM,OAnEN,UAmEY5Q,YAAI,IAAIsO,IAAkB,CAAEsC,eAnExC,QAuEM,OAvEN,UAuEY5Q,YAAI,IAAIsO,IAAkB,CAAEsC,eAvExC,yCA4EA,SAAUg9hB,GACRhonB,GADF,yFAeM,OAfN,EAQOA,EAAOgc,QAJVs2D,EAJJ,EAIIA,OACA0hU,EALJ,EAKIA,SALJ,IAMI49O,yBANJ,OAMyB,EANzB,EAOI5kQ,EAPJ,EAOIA,aAPJ,SAeYl3Y,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,aACV9vB,KAAM,CACJ+mB,cApBR,OAwBwB,OAxBxB,SAUIxiD,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,IAXJ,SAwB8B2uD,YAAOj1C,eAxBrC,UAwBQ+B,EAxBR,OAyBE45C,IAAmB9rE,kBAAgBu4mB,WAAnC,aACE11iB,SACA0hU,YACGryW,KAED7R,EA9BN,iBA+BI,OA/BJ,UA+BUsqD,YAAI,IAAI9Q,KAAwBsojB,IA/B1C,YAgCQ5kQ,EAhCR,iBAiCM,OAjCN,UAiCY5yS,YAAIl5F,YAAK8rY,IAjCrB,gCAoCIlwX,QAAQ7Z,MAAM,qBAAsB,CAACijC,QApCzC,iCAuCS,CACL4J,OACA5J,QAzCJ,yCA6CA,SAAU+hmB,GACRjonB,GADF,6EASE,OATF,EAOMA,EAAOgc,QAHTs2D,EAJJ,EAIIA,OACA0hU,EALJ,EAKIA,SACAhpT,EANJ,EAMIA,UANJ,SASQl1G,YAAKkyoB,GAAY,IAAI35iB,IAAiB,CAAEiE,SAAQ0hU,cATxD,OAUE,OAVF,SAUQl+Z,YAAK4vY,IAAa,IAAIh9R,IAAkB,CAAEsC,eAVlD,OAWE,OAXF,SAWQ5Q,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAbV,wCAiBA,SAAUyoiB,GACRlonB,GADF,mFAcM,OAdN,EAQMA,EAAOgc,QAJTs2D,EAJJ,EAIIA,OACA0hU,EALJ,EAKIA,SACA49O,EANJ,EAMIA,kBACA5miB,EAPJ,EAOIA,UAPJ,SAcYl1G,YAAKkyoB,GAAY,IAAI35iB,IAAiB,CAAEiE,SAAQ0hU,WAAU49O,uBAdtE,mBAYI9hmB,EAZJ,EAYIA,KAZJ,EAaI5J,KAEE4J,EAfN,iBAgBI,OAhBJ,SAgBUsqD,YAAI,IAAIgS,IAA4C,CAAE9Z,YAhBhE,OAiBI,OAjBJ,UAiBU8H,YAAI,IAAIsO,IAAkB,CAAEsC,eAjBtC,yCAqBA,SAAUm9hB,GACRnonB,GADF,6EAaM,OATFsyE,EACEtyE,EAAOgc,QADTs2D,OAJJ,SAaYx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,mBACV5zD,OAAQ,CACN6qD,cAlBR,mBAQIxiD,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAcE4J,EAvBN,iBAwBI,OAxBJ,SAwBUsqD,YAAI,IAAI5Q,MAA+B,IAxBjD,+BA0BI1sE,QAAQ7Z,MAAM,4BAA6B,CAACijC,QA1BhD,iCA6BS,CACL4J,OACA5J,QA/BJ,yCAmCA,SAAUkimB,GACNponB,GADJ,6EAaM,OATFsyE,EACEtyE,EAAOgc,QADTs2D,OAJJ,SAaYx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2BACV5zD,OAAQ,CACN8imB,qBAAsBj4iB,OAlB9B,mBAQIxiD,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAcE4J,EAvBN,iBAwBI,OAxBJ,SAwBUsqD,YAAI,IAAI1Q,MAAiC,IAxBnD,+BA0BI5sE,QAAQ7Z,MAAM,8BAA+B,CAACijC,QA1BlD,iCA6BS,CACL4J,OACA5J,QA/BJ,yCAmCA,SAAUmimB,GACRronB,GADF,gHAMMA,EAAOgc,QAFTs2D,EAJJ,EAIIA,OACAs8B,EALJ,EAKIA,WAEc,IAAZt8B,IAAgC,IAAfs8B,EAPvB,iDAU6B,OAV7B,SAUmC/5B,YAAO8mI,eAV1C,OAW0B,OADlBoyJ,EAVR,gBAWgCl5R,YAAO87B,eAXvC,OAgBE,OALMgB,EAXR,OAaQhF,EAAWgF,GAAmBA,EAAgB94H,IAAI,aAAekU,iBACjE0/G,EAA2BkF,GAAmBA,EAAgB94H,IAAI,8BAA+B,EAdzG,UAgBQuhG,YAAI,IAAInJ,MAhBhB,QAiBE,OAjBF,UAiBQmJ,YAAI,IAAIrJ,KAAkB,CAC9B69B,YACA6vB,MAAOvgI,iBAAO,CACZsynB,OAAQ,GACRC,OAAQ,GACRC,QAAS,QAtBf,QAyBe,OAzBf,UAyBqB77iB,YAAOk7B,eAzB5B,QAwCM,OAfED,EAzBR,0BA2BKvgG,OAAKghG,OAAS,yBA3BnB,cA4BKhhG,OAAKkhG,eAAiB,iCA5B3B,cA6BKlhG,OAAKszP,QAAU,mBA7BpB,cA8BKtzP,OAAKu+mB,YAAc,mBA9BxB,cA+BKv+mB,OAAK4uB,KAAO,mBA/BjB,cAgCK5uB,OAAKw+mB,iBAAmB,mBANrB1yiB,EA1BR,YAwCYvlG,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAK,4BAGyB,IAAxBwiT,GAA6B,CAACigR,kBAAmBjgR,IAHnD,IAIFphQ,WACAF,6BAEFhlF,OAAQ,CACN6qD,cApDR,oBAmCIxiD,EAnCJ,EAmCIA,KACA5J,EApCJ,EAoCIA,KAqBE4J,EAzDN,oBA0DUqtD,EAAgBj/E,iBAAO4xB,GAEhB,OADP2uG,EAA4BthD,EAAcznF,MAAM,CAAC,UAAW,UA3DtE,iBA6DMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7DxC,wBA+DM,OA/DN,UA+DYsqD,YAAI,IAAIrJ,KAAkB,CAAE69B,YAAW6vB,WA/DnD,QAgEM,OAhEN,UAgEYrkD,YAAI,IAAIjJ,MAhEpB,QAiEuB,OAjEvB,UAiE6B0D,YAAO4pI,eAjEpC,WAiEYpyG,EAjEZ,OAkEYwlhB,EAAmBpzf,EAAM/oI,MAAM,CAAC,UAAW,IAC3C88G,EAAYrgI,QAAQk6H,KAA2B,IAAdA,EACjCgB,EAAcmF,EAAS,OACzBq/gB,QADyB,IACzBA,OADyB,EACzBA,EAAkB1toB,SAAS,CAAC,UAAW,QAAQ,SAAAwI,GAAC,OAAIA,EAAEzL,KAAKgd,iBAAO,CAAC6X,GAAI,CAAEO,GAAI+1F,SAC7EwlhB,EAEoB,MAApBA,EAxEV,iBAyEQ,OAzER,UAyEcz3iB,YAAI,IAAI+6B,KAAwB,CACpC9H,cACAmF,eA3EV,gCAiFI,OAjFJ,UAiFUp4B,YAAI,IAAI/I,MAjFlB,QAkFIv0E,QAAQ7Z,MAAM,6BAA8B,CAACijC,QAlFjD,yCAsFA,SAAUoimB,GACRtonB,GADF,6EAoBE,OAhBEgc,EACEhc,EADFgc,QAIAs2D,EAEEt2D,EAFFs2D,OACAs8B,EACE5yF,EADF4yF,UAGIkjhB,EAAoB,CACxBx/iB,SACAs8B,aAdJ,SAoBQ94H,YAAKuyoB,GAAiB,IAAI93iB,IAAsBuhjB,IApBxD,OAuBE,OAvBF,SAuBQh8oB,YAAKilmB,GAAU,IAAIlsgB,IAAe,CAACyD,YAvB3C,wCA0BA,SAAUi2iB,GAAV,0FAQe,OARf,IAEIvsmB,QACEs2D,EAHN,EAGMA,OACA49S,EAJN,EAIMA,SAJN,SAQqB9vX,YAAKwonB,GAAe,IAAIn5iB,IAAoB,CAAE6C,YARnE,OAeM,OAPE7xE,EARR,gBAeYlK,YAAKkK,GAfjB,mBAUIqvB,EAVJ,EAUIA,KACA5J,EAXJ,EAWIA,KAME4J,EAjBN,iBAoBI,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBiimB,EAAe50iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,UAAW,IAnB5E,UAoBU0kF,YAAI,IAAIzK,KAAoBoijB,EAAal5oB,IAAI,QApBvD,QAqBI,OArBJ,UAqBUilQ,YAAW,IAAIjvK,IAAe,CAACyD,YArBzC,WAsBoB,MAAZ49S,EAtBR,iBAuBM,OAvBN,UAuBY91S,YAAIl5F,YAAKgvY,IAvBrB,gCA0BIpzX,QAAQ7Z,MAAM,sDAAuD,CAACijC,QA1B1E,yCA8BA,SAAUsimB,GACRxonB,GADF,iGAIe,OADPgynB,EAAoBhynB,EAAOgc,QAHnC,SAIqB64D,YAAOk7B,eAJ5B,OAIQD,EAJR,YAMUA,EANV,cAOSvgG,OAAKghG,OAPd,SAWShhG,OAAKkhG,eAXd,mBAQa,OARb,SAQmB57B,YAAO41C,eAR1B,cAQMtsF,EARN,oCAYa,OAZb,UAYmB02C,YAAO61C,eAZ1B,eAYMvsF,EAZN,oCAgBa,OAhBb,UAgBmB02C,YAAO21C,eAhB1B,QAgBMrsF,EAhBN,kBAmBQm0C,EAASn0C,EAAKtlD,IAAI,MAClBi0N,EAAW3uK,EAAKtlD,IAAI,YAEH,OADjBo5oB,EAAkBnlb,EAASzsN,QAAO,SAACiqoB,GAAD,OAAgCA,EAAYzxoB,IAAI,QAAUm5oB,KAAmBn5oB,IAAI,IArB3H,iBAuBiB,OAvBjB,UAuBuBunB,YAAKwonB,GAAe,IAAIn5iB,IAAoB,CAAE6C,YAvBrE,QA+BQ,OARE7xE,EAvBV,iBA+BclK,YAAKkK,GA/BnB,oBA0BMqvB,EA1BN,EA0BMA,KACA5J,EA3BN,EA2BMA,KAKE4J,EAhCR,oBAiCYqtD,EAAgBj/E,iBAAO4xB,GAEL,OADlBoimB,EAAmB/0iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,UAAW,KAlClF,iBAoCQoH,QAAQ7Z,MAAM,mBAAoB6sC,GApC1C,wBAwCQ,OAFM46lB,EAAewH,EAAiBr5oB,IAAI,MACpCs5oB,EAAoBF,EAAgBz1oB,IAAI,KAAM01oB,EAAiBr5oB,IAAI,OAvCjF,UAwCc/C,YAAKwxoB,GAAe,IAAIn3iB,KAAoB,CAChDy+B,UAAW87gB,EACXv1c,QAASg9c,EACTj3B,WAAW,KA3CrB,QA6CQ,OA7CR,UA6Cc9ghB,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA/ChB,QAiDQ,OAjDR,UAiDcrF,YAAI,IAAI/wD,IAA+B,CAC3CtT,GAAIijO,mBACJh6N,MAAO,MAnDjB,gCAuDMliB,QAAQ7Z,MAAM,mCAAoC,CAACijC,QAvDzD,gCA0DIppB,QAAQ7Z,MAAM,aAAc,CAC1B+c,SACAm+B,SA5DN,yCAiEA,SAAUsqlB,GACRzonB,GADF,iGASiB,OATjB,EAOMA,EAAOgc,QAHT4yF,EAJJ,EAIIA,UAJJ,IAKIwjhB,gBALJ,SAMIjF,EANJ,EAMIA,gBANJ,SASuBt4iB,YAAOo7B,eAT9B,OAWE,OAFM39B,EATR,gBAWQx8F,YAAKygG,IAAa,IAX1B,UAYgB,MAAVjE,GAA+B,MAAbs8B,IAAiC,IAAZt8B,IAAgC,IAAfs8B,EAZ9D,yCAaW,IAAIlyH,MAAJ,kCAAqC41F,EAArC,gBAAmDs8B,KAb9D,OAqBM,OArBN,UAqBY94H,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPs2D,EACAs8B,EACA,CACExzB,QAAS,OACTC,SAAU,qBA3BlB,oBAgBIvrD,EAhBJ,EAgBIA,KACA5J,EAjBJ,EAiBIA,KAcE4J,EA/BN,oBAgCQq9lB,GACFA,KAEEiF,EAnCR,iBAoCM,OApCN,UAoCYh4iB,YAAI,IAAIvL,IAAe,CAACyD,YApCpC,gCAyCU,OAzCV,UAyCgBx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,UACV9vB,KAAM,CACJ+mB,cA9CZ,oBAuCc66S,EAvCd,EAuCQr9V,KACKs9V,EAxCb,EAwCQlnW,KAUEinW,EAlDV,oBAmDchB,EAAWjuX,iBAAOivX,GAEX,OADPr3M,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UApDzD,iBAsDUoH,QAAQ7Z,MAAM,mBAAoB6sC,GAtD5C,wBAwDU,OAxDV,UAwDgBsqD,YAAI,IAAInL,IAAwB6mG,IAxDhD,gCA2DQh5K,QAAQ7Z,MAAM,uDAAwD,CAACmqY,SA3D/E,gCA+DItwX,QAAQ7Z,MAAM,sBAAuB,CAACijC,QA/D1C,QAiEE,OAjEF,UAiEQk0D,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAnEV,yCAuEO,SAAUs7f,GACf/6kB,GADK,2GAQQ,OARR,EAODA,EAAOgc,QAHTs2D,EAJG,EAIHA,OACA8pO,EALG,EAKHA,UACAqxE,EANG,EAMHA,SANG,SAQc54S,YAAOk7B,eARrB,OAuBkB,OAfjBD,EARD,OAUCg3gB,EAAgB,CAACzviB,IAAyB,iBAC1Cg7iB,EAAwB,CAACj7iB,IAAsB,yBAC/Ck7iB,EAAU,CAACl7iB,IAAsB,WAZlC,mBAcF7nE,OAAKghG,OAASu2gB,GAdZ,cAeFv3mB,OAAKkhG,eAAiB4hhB,GAfpB,cAgBF9inB,OAAKszP,QAAUyvX,GAhBb,cAiBF/inB,OAAKu+mB,YAAcwE,GAjBjB,cAkBF/inB,OAAK4uB,KAAOm0lB,GAlBV,cAmBF/inB,OAAKw+mB,iBAAmBuE,GANrBj3iB,EAbD,EAsBC9vB,EAAOukD,IAASvgG,OAAKkhG,eAAiB,CAAE85gB,qBAAsBj4iB,GAAW,CAAEA,UAtB5E,UAuBwBuC,YAAOn/C,eAvB/B,QAyBW,OAFVi0Y,EAvBD,OAwBC9nY,GAAe8nY,EAxBhB,UAyBiB90V,YAAOqK,eAzBxB,WAyBCC,EAzBD,OA0BS,MAAV7M,EA1BC,iBAiCC,OAjCD,UAiCOx8F,YAAKulG,EAASy0B,GAAM,GAAI,IAAIxqD,IAAiB,CACrDtpC,QAAQ,aACNo/D,QAAS,OACTC,SAAUA,EAASy0B,GAAM,GACzBvkD,QACI1pB,GAAes9C,EAAW,CAAEH,UAAWG,EAAQtmG,IAAI,YAAe,OAtCvE,oBA4BDi3C,EA5BC,EA4BDA,KACA5J,EA7BC,EA6BDA,KAYE4J,EAzCD,oBA0CKq8V,EAAWjuX,iBAAO4xB,GAEX,OADPgmJ,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UA3ChD,iBA6CCoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7CnC,6BA+CSggF,EA/CT,cAgDQvgG,OAAKghG,OAhDb,UAoDQhhG,OAAKkhG,eApDb,oBAiDK,OAjDL,UAiDWr2B,YAAI,IAAI5N,IAA8BspG,IAjDjD,4CAqDK,OArDL,UAqDW17F,YAAI,IAAI1N,IAAgCopG,IArDnD,4CAyDK,OAzDL,UAyDW17F,YAAI,IAAInL,IAAwB6mG,IAzD3C,QA4DU,OAATsmI,QAAS,IAATA,KAAYtmI,GA5Db,gCA+DD,OA/DC,UA+DK17F,YAAI,IAAIjL,KA/Db,QAgEO,OAARs+S,QAAQ,IAARA,KAAWvnW,GACXppB,QAAQ7Z,MAAM,eAAgB,CAACijC,QAjE9B,gCAoEHppB,QAAQ7Z,MAAM,cAAeqvF,GApE1B,yCAwEP,SAAUo2iB,GACR1onB,GADF,iFAGoC,OAHpC,SAG0C60E,YAAOogG,eAHjD,OAM2B,OAHnBC,EAHR,OAIQjoG,EAJR,UAI6BjtE,EAAOitE,0BAJpC,SAKQqF,EAAiBtyE,EAAOgc,QALhC,SAMiC64D,YAAO21C,YAAe,CAACl4C,YANxD,UAMQn0C,EANR,QAQI8uC,KACuB,MAArBioG,GAEE/2I,GAGyF,IAFzFA,EACCtlD,IAAI,WAAYkU,kBAChB1M,QAAO,SAAC80L,GAAD,OAA4BA,EAAQt8L,IAAI,QAAUq8L,KAAmBhrL,SAdrF,oBAmB0B,OADhBqjoB,EAAiBpvlB,EAAKzoC,MAAM,CAAC,WAAY,EAAG,QAlBtD,iBAoBM,OApBN,UAoBY0kF,YAAI,IAAIzK,KAAoB49iB,IApBxC,yCAyBA,SAAU5E,GACR3onB,GADF,2EAIe,OADP4uG,EAAY5uG,EAAOgc,QAH3B,SAIqB64D,YAAOk7B,eAJ5B,OAIQD,EAJR,YAMUA,EANV,cAOSvgG,OAAKghG,OAPd,SAWShhG,OAAKkhG,eAXd,mBAQe,OARf,SAQqB57B,YAAOs7B,eAR5B,cAQM79B,EARN,oCAYe,OAZf,UAYqBuC,YAAOw7B,eAZ5B,eAYM/9B,EAZN,oCAgBe,OAhBf,UAgBqBuC,YAAOo7B,eAhB5B,QAgBM39B,EAhBN,mBAoBqB,IAAfs8B,IAAgC,IAAZt8B,EApB1B,mDAuBE,OAvBF,UAuBQ8H,YAAI,IAAI7J,IAAsB,CAClC+B,SACAs8B,eAzBJ,yCA6BO,SAAUg6gB,GAAV,oFAQQ,OALD9yO,EAHP,EAEH95X,QACEs2D,OAHC,SAQcuC,YAAOk7B,eARrB,OAQCD,EARD,0BAUFvgG,OAAKghG,OAAS,uBAVZ,cAWFhhG,OAAKkhG,eAAiB,+BAXpB,cAYFlhG,OAAKszP,QAAU,iBAZb,cAaFtzP,OAAKu+mB,YAAc,iBAbjB,cAcFv+mB,OAAK4uB,KAAO,iBAdV,cAeF5uB,OAAKw+mB,iBAAmB,iBANrB1yiB,EATD,OAkBGy0B,EAlBH,cAmBEvgG,OAAKghG,OAnBP,SAuBEhhG,OAAKkhG,eAvBP,mBAoBgB,OApBhB,UAoBsB57B,YAAOs7B,eApB7B,eAoBDH,EApBC,oCAwBgB,OAxBhB,UAwBsBn7B,YAAOw7B,eAxB7B,eAwBDL,EAxBC,oCA4BgB,OA5BhB,UA4BsBn7B,YAAOo7B,eA5B7B,QA4BDD,EA5BC,eAmCE,OAJD19B,EAA4B,MAAXwjU,EACnBA,EACA9lS,EAjCC,UAmCQl6H,YAAKshG,IAAsB,IAAI9xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CACJgnkB,gBAAiB,mBAEnB9qmB,OAAQ,CACN6qD,cA3CD,kFAiDA,SAAUu2iB,GACf7onB,GADK,2EAQL,OARK,EAMDA,EAAOgc,QAFT4yF,EAJG,EAIHA,UACA/P,EALG,EAKHA,KALG,SAQCi/I,YAAW,IAAIjuK,KAAgC++B,IARhD,OASL,OATK,SASCx0B,YAAIl5F,YAAK29G,IATV,wCAYP,IAAM2zhB,GAAwB,wBAE9B,SAAUn/Q,GACRrzW,GADF,+FAae,OARXgc,EACEhc,EADFgc,QAImBrG,EAEjBqG,EAFFmxF,kBACA+H,EACEl5F,EADFk5F,cAVJ,SAaqBrgC,YAAOk7B,eAb5B,UAaQD,EAbR,QAesB,IAAhBn6F,EAfN,iDAmBmC,OAnBnC,SAmByCk/D,YAAOinI,eAnBhD,mBA4BUhsG,EA5BV,cA6BSvgG,OAAKghG,OA7Bd,UAkCShhG,OAAKkhG,eAlCd,UAuCSlhG,OAAKw+mB,iBAvCd,oBA8Be,OA9Bf,UA8BqBl5iB,YAAOs7B,eA9B5B,QA+Ba,OADP79B,EA9BN,iBA+BmBuC,YAAO41C,eA/B1B,eA+BMtsF,EA/BN,oCAmCe,OAnCf,UAmCqB02C,YAAOw7B,eAnC5B,QAoCa,OADP/9B,EAnCN,iBAoCmBuC,YAAO61C,eApC1B,eAoCMvsF,EApCN,2CAwCMm0C,GAAU,EACVn0C,EAAO,KAzCb,6BA6Ce,OA7Cf,UA6CqB02C,YAAOo7B,eA7C5B,QA8Ca,OADP39B,EA7CN,iBA8CmBuC,YAAO21C,eA9C1B,QA8CMrsF,EA9CN,eAiD4B,OAjD5B,UAiDkC02C,YAAOogG,eAjDzC,WAiDQrmE,EAjDR,QAmDkB,IAAZt8B,EAnDN,iBAoDI,OApDJ,UAoDU8H,YAAI,IAAIc,IAAiB,CAC7BjqG,WAAOL,EACPmlC,GAAIy8mB,MAtDV,WA0Dc,MAARr0lB,IACe,IAAfywE,IAGQ,IAFRzwE,EAAKtlD,IAAI,YAAYiiB,WAAU,SAACwvnB,GAC9B,OAAOA,EAAYzxoB,IAAI,QAAU+1H,KA7DzC,iBAkEM,OAlEN,UAkEYx0B,YAAI,IAAInJ,MAlEpB,QAoEmB,OApEnB,UAoEyB7wE,YAAKwonB,GAAe,IAAIn5iB,IAAoB,CAAE6C,YApEvE,QA2EU,OAPE7xE,EApEZ,iBA2EgBlK,YAAKkK,GA3ErB,oBAsEQqvB,EAtER,EAsEQA,KACA5J,EAvER,EAuEQA,KAME4J,EA7EV,iBAkFQ,OAJMqtD,EAAgBj/E,iBAAO4xB,GACvBiimB,EAAe50iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,UAAW,IA/EhF,UAkFc0kF,YAAI,IAAIzK,KAAoBoijB,EAAal5oB,IAAI,QAlF3D,QAmFQ,OAnFR,UAmFcuhG,YAAI,IAAIvL,IAAe,CAACyD,YAnFtC,QAsFQ,OAtFR,UAsFc8H,YAAI,IAAItS,KAAsBiqjB,EAAal5oB,IAAI,QAtF7D,gCAyFQ,OADAikB,QAAQ7Z,MAAM,0CAA2C,CAACijC,QAxFlE,UAyFck0D,YAAI,IAAI/I,MAzFtB,oCA2F8B,IAAfu9B,IAAoBsG,EA3FnC,iBA4FM,OA5FN,UA4FY96B,YAAI,IAAIzK,KAAoBi/B,IA5FxC,gCAgGI,OADA9xG,QAAQ7Z,MAAM,qBA/FlB,UAgGUm3F,YAAI,IAAI2B,IAAe,CAC3B51D,QAAS,mBACTpQ,GAAIy8mB,GACJx2iB,iCAAiC,EACjCb,KAAM,CACJl4F,WAAOrS,MArGf,QAyGE,OAzGF,UAyGQwpG,YAAI,IAAI0rC,MAzGhB,yCA6GA,SAAUgjgB,GACR9onB,GADF,kGAIIgc,EACEhc,EADFgc,QAIA84F,EACE94F,EADF84F,iBAKkB,KADdn/F,EAAqBm/F,EAAgBj8H,IAAI,OAZjD,iDAiBmC,OAjBnC,SAiByCg8F,YAAOinI,eAjBhD,OAwBe,OAxBf,iBAwBqBjnI,YAAOk7B,eAxB5B,QAwBQD,EAxBR,YA2BUA,EA3BV,cA4BSvgG,OAAKghG,OA5Bd,UAiCShhG,OAAKkhG,eAjCd,oBA6Be,OA7Bf,UA6BqB57B,YAAOs7B,eA7B5B,QA8Ba,OADP79B,EA7BN,iBA8BmBuC,YAAO41C,eA9B1B,eA8BMtsF,EA9BN,oCAkCe,OAlCf,UAkCqB02C,YAAOw7B,eAlC5B,QAmCa,OADP/9B,EAlCN,iBAmCmBuC,YAAO61C,eAnC1B,eAmCMvsF,EAnCN,oCAuCe,OAvCf,UAuCqB02C,YAAOo7B,eAvC5B,QAwCa,OADP39B,EAvCN,iBAwCmBuC,YAAO21C,eAxC1B,QAwCMrsF,EAxCN,eA2C4B,OA3C5B,UA2CkC02C,YAAOogG,eA3CzC,WA2CQrmE,EA3CR,QA6CkB,IAAZt8B,EA7CN,iBA8CI,OA9CJ,UA8CU8H,YAAI,IAAIc,IAAiB,CAC7BjqG,WAAOL,EACPmlC,GAAIy8mB,MAhDV,WAqDc,MAARr0lB,IACe,IAAfywE,IAGQ,IAFRzwE,EAAKtlD,IAAI,YAAYiiB,WAAU,SAACwvnB,GAC9B,OAAOA,EAAYzxoB,IAAI,QAAU+1H,KAxDzC,iBA2DmB,OA3DnB,UA2DyBxuG,YAAKwonB,GAAe,IAAIn5iB,IAAoB,CAAE6C,YA3DvE,QAkEU,OAPE7xE,EA3DZ,iBAkEgBlK,YAAKkK,GAlErB,oBA6DQqvB,EA7DR,EA6DQA,KACA5J,EA9DR,EA8DQA,KAME4J,EApEV,iBAwEQ,OAHMqtD,EAAgBj/E,iBAAO4xB,GACvBiimB,EAAe50iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,UAAW,IAtEhF,UAwEc0kF,YAAI,IAAIvL,IAAe,CAACyD,YAxEtC,QAyEQ,OAzER,UAyEc8H,YAAI,IAAIvK,KAAgCkijB,EAAal5oB,IAAI,QAzEvE,QA0EQ,OA1ER,UA0EcuhG,YAAImhU,IAAcr6Z,KAAd,UAAsBgoB,4BA1ExC,QA4EQ,OA5ER,UA4EckxE,YAAI,IAAI8yB,KAAoB,CAChCC,kBAAmBx3F,KA7E7B,QAgFQ,OAhFR,UAgFcykE,YAAI,IAAIsyB,MAhFtB,QAiFQ,OAjFR,UAiFctyB,YAAI,IAAIzM,KAjFtB,QAoFQ,OApFR,UAoFcyM,YAAI,IAAItS,KAAsBiqjB,EAAal5oB,IAAI,QApF7D,gCAsFQikB,QAAQ7Z,MAAM,qDAAsD,CAACijC,QAtF7E,gCA2FM,OA3FN,UA2FYk0D,YAAI,IAAIvK,KAAgC++B,IA3FpD,QA4FM,OA5FN,UA4FYx0B,YAAImhU,IAAcr6Z,KAAd,UAAsBgoB,4BA5FtC,QA8FM,OA9FN,UA8FYkxE,YAAI,IAAI8yB,KAAoB,CAChCC,kBAAmBx3F,KA/F3B,QAkGM,OAlGN,UAkGYykE,YAAI,IAAIsyB,MAlGpB,QAmGM,OAnGN,UAmGYtyB,YAAI,IAAIzM,KAnGpB,gCAwGI,OADA7wE,QAAQ7Z,MAAM,qBAvGlB,UAwGUm3F,YAAI,IAAI2B,IAAe,CAC3B51D,QAAS,mBACTpQ,GAAIy8mB,GACJx2iB,iCAAiC,EACjCb,KAAM,CACJl4F,WAAOrS,MA7Gf,QAiHE,OAjHF,UAiHQwpG,YAAI,IAAI0rC,MAjHhB,yCAoHA,SAAUijgB,GACR/onB,GADF,uFAaM,OATE/f,EAAS+f,EAAOgc,QAAQ/7B,OACxBqyF,EAAStyE,EAAOgc,QAAQs2D,OALhC,SAaYx8F,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,aACV9vB,KAAMtrE,EAAOoT,OACbo0B,OAAQ,CACN6qD,cAnBR,mBAQIxiD,EARJ,EAQIA,KACA5J,EATJ,EASIA,KAeE4J,EAxBN,iBA2ByB,OAFfqtD,EAAgBj/E,iBAAO4xB,GACvB2imB,EAAct1iB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,SA1BhE,UA2B+Bm/E,YAAOqiG,eA3BtC,QA4BI,OADM81M,EA3BV,iBA4BU5yS,YAAI,IAAInL,IAAwBwjjB,IA5B1C,YA8BQzlQ,EA9BR,oBA+BY0lQ,EAAa1lQ,EAAan5V,MAAM,KAClC,WAAI6+lB,EAAW,MAAS9pnB,wBAAuB8pnB,EAAW,GAhCpE,iBAmCQ,OAnCR,UAmCct4iB,YAAI,IAAIsO,IAAkB,CAAEsC,UAAWv0G,OAAOi8oB,EAAW,OAnCvE,QAqCM,OArCN,UAqCYt4iB,YAAIl5F,YAAK8rY,IArCrB,QAsCM,OAtCN,UAsCY5yS,YAAI,IAAIhR,MAtCpB,gCAwCM,OAxCN,UAwCYgR,YAAIl5F,YAAK,GAAD,OAAK4nB,mBAAL,YAAyBwpE,KAxC7C,gCA2CIx1E,QAAQ7Z,MAAMijC,GA3ClB,yCA+CA,SAAU8imB,GACRhpnB,GADF,2HAWM,OAXN,EAG+BA,EAAOgc,QAA5BqiF,EAHV,EAGUA,QAASv9E,EAHnB,EAGmBA,QACXjsB,EAAQgO,KAAK+xB,MAJrB,SAWY9+C,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,cACV9vB,KAAM,CACJ8yC,UACAv9E,eAjBR,mBAMIgP,EANJ,EAMIA,KACA5J,EAPJ,EAOIA,IAcI50C,EAAMuxB,KAAK+xB,OACb9E,EAtBN,oBAuBUq8V,EAAWjuX,iBAAO4xB,GAClB5lC,EAAgBiiY,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UACnD02X,EAAuBD,EAASz2X,MAAM,CAAC,UAAW,OAAQ,gBAEnD,OADPogL,EAA0Bq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,WA1BvE,iBA4BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA5BxC,wBA8BM,OA9BN,UA8BYsqD,YAAI,IAAIvI,KAA2B,CACvCikG,QACA5rL,QACAkiY,iBAjCR,QAmCM,OAnCN,UAmCYhyS,YAAI,IAAIrwD,KAAmC,IAnCvD,gCAsCI,OAtCJ,UAsCUqwD,YAAI,IAAIrI,KAAwB7rD,IAtC1C,QAuCI,OAvCJ,UAuCUk0D,YAAI,IAAIrwD,KAAmC,IAvCrD,QAwCIjtB,QAAQ7Z,MAAM,gBAAiB,CAACijC,QAxCpC,QA4EwB,OAjChBmmW,EAAen5Y,OAAO+8C,OAAP,MAAA/8C,OAAM,CAAQ,IAAR,oBAAgB,OAACmrH,QAAD,IAACA,OAAD,EAACA,EAAiB9nF,MAAO,MAC9D+1W,EAAmBpuX,iBAAOmuX,GAC1BE,EAAa,CACjBynB,SAAU1nB,EAAiB52X,MAAM,CAAC,OAAQ,UAAY,KACtDi9nB,kBAAmBrmQ,EAAiB52X,MAAM,CAAC,oBAAqB,UAAY,KAC5E82X,gBAAiBF,EAAiB52X,MAAM,CAAC,oBAAqB,QAAU,KACxE2xV,kBAAmBilC,EAAiB52X,MAAM,CAAC,sBAAuB,QAAU,KAC5E+2X,eAAgBH,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEg3X,eAAgBJ,EAAiB52X,MAAM,CAAC,cAAe,SAAW,KAClEi3X,gBAAiBL,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpEk3X,gBAAiBN,EAAiB52X,MAAM,CAAC,eAAgB,SAAW,KACpEi9H,UAAiD/hJ,IAA3C07Y,EAAiB52X,MAAM,CAAC,OAAQ,OAAuB42X,EAAiB52X,MAAM,CAAC,OAAQ,OAAS,MAGpGm3X,GAAY,OAAC3mW,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8B65F,OAAQ,KAClDrzB,GAAe,OAACvjC,QAAD,IAACA,GAAD,UAACA,EAAalK,eAAd,mBAAuB/4B,aAAvB,eAA8BA,QAAS,KAErD4pY,GAAc/8V,IACbx+C,EAAMujB,EAAQ8N,kBAChBkqX,EAAY,IACZpjU,EAAe,mBAEfojU,EAAY,IACZpjU,EAAe,sBAIb0xB,GAAO,UAACrrD,GAAQ5J,SAAT,eAAsBi1D,OAAQ,GACrC+7B,EAASzgI,OAAM,UAAC0kG,EAAK+7B,cAAN,aAAC,EAAarjF,MAAM,KAAK,KAAO,KAC/Ci5V,EAAiB3xS,EAAK2xS,eAAL,eAA2B3xS,EAAK2xS,gBAAmB,UACnE3xS,EAAK2xS,sBACL3xS,EAAK+7B,OA1Ed,UA4E8BriC,YAAOj1C,eA5ErC,eA4EQ+B,EA5ER,OA8EE45C,IAAmB9rE,kBAAgBmjnB,WAAnC,iDACE/lQ,YACApjU,eACAytD,UACGq1Q,GACApxS,GACA2xS,GACAnrV,IArFP,kBAwFS,CACL7R,OACA5J,QA1FJ,yCA8FA,SAAU+imB,GACRjpnB,GADF,2EAME,OANF,EAI+BA,EAAOgc,QAA5BqiF,EAJV,EAIUA,QAASv9E,EAJnB,EAImBA,QAJnB,SAMQs5D,YAAI,IAAIrwD,KAAmC,IANnD,OAQE,OARF,SAQQj0C,YAAKkzoB,GAAa,IAAIv3iB,KAAkB,CAC5C4sB,UACAv9E,aAVJ,OAaE,OAbF,SAaQs5D,YAAI,IAAIrwD,KAAmC,IAbnD,wCAiBA,SAAUm/lB,GACRlpnB,GADF,+EAME,OANF,EAIyCA,EAAOgc,QAAtCjG,EAJV,EAIUA,GAAIzyB,EAJd,EAIcA,KAAM+6G,EAJpB,EAIoBA,QAASv9E,EAJ7B,EAI6BA,QAJ7B,SAMQhrC,YAAKkyoB,GAAY,IAAI35iB,IAAiB,CAAEiE,OAAQv8D,EAAIi+X,SAAU1wZ,KANtE,OAOE,OAPF,SAOQxN,YAAKkzoB,GAAa,IAAIv3iB,KAAkB,CAC1C3wD,UACAu9E,aATN,wCAcA,SAAU8qhB,GACRnpnB,GADF,iFAWM,OAPIsyE,EAAWtyE,EAAXsyE,OAJV,SAWYx8F,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,eACV5zD,OAAQ,CACN6qD,cAhBR,mBAMIxiD,EANJ,EAMIA,KACA5J,EAPJ,EAOIA,KAcE4J,EArBN,iBAwBI,OAFMq8V,EAAWjuX,iBAAO4xB,GAClB2iD,EAAQ05S,EAASz2X,MAAM,CAAC,UAAW,OAAQ,SAvBrD,UAwBU0kF,YAAI,IAAI5H,IAA4BC,IAxB9C,gCA0BI31E,QAAQ7Z,MAAM,uBAAwB,CAACijC,QA1B3C,yCA8BA,SAAUkjmB,GACNppnB,GADJ,qFAGE,OAHF,SAGQo6E,YAAI,IAAIzH,MAAyC,IAHzD,OAIE,OAJF,SAIQyH,YAAI,IAAI/wD,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEhf,OAAQy6E,IAAQ55E,EAAE,2CAJlG,OAKE,OALF,SAKQu5E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAPV,OAaM,OAbN,SAaY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,8BACV9vB,KAAM,CACJwmE,aAAc/xH,EAAOgc,QAAQ+1G,aAC7B/jB,cAAehuG,EAAOgc,QAAQgyF,eAEhCvmF,OAAQ,CACNsmF,UAAW/tG,EAAOgc,QAAQ+xF,UAC1Bz7B,OAAQtyE,EAAOgc,QAAQs2D,YAvB/B,mBAWIxiD,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAeE4J,EA3BN,iBA4BI,OA5BJ,UA4BUsqD,YAAI,IAAIzY,KAAgC,CAAEs5K,QAASluP,oBA5B7D,QAgCQ,OAhCR,UAgCcjX,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,UACV9vB,KAAM,CACJ+mB,OAAQtyE,EAAOgc,QAAQs2D,YArCjC,oBA8BY66S,EA9BZ,EA8BMr9V,KACKs9V,EA/BX,EA+BMlnW,KAUEinW,EAzCR,oBA0CYhB,EAAWjuX,iBAAOivX,GAEX,OADPr3M,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UA3CvD,iBA6CQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7C1C,wBA+CQ,OA/CR,UA+CcsqD,YAAI,IAAInL,IAAwB6mG,IA/C9C,gCAkDMh5K,QAAQ7Z,MAAM,uDAAwD,CAACmqY,SAlD7E,gCAqDItwX,QAAQ7Z,MAAM,yCAA0C,CAACijC,QArD7D,QAuDE,OAvDF,UAuDQk0D,YAAI,IAAIzH,MAAyC,IAvDzD,QAwDE,OAxDF,UAwDQyH,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA1DV,yCA8DA,SAAU4piB,GACNrpnB,GADJ,qFAGE,OAHF,SAGQo6E,YAAI,IAAIzH,MAAyC,IAHzD,OAIE,OAJF,SAIQyH,YAAI,IAAI/wD,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEhf,OAAQy6E,IAAQ55E,EAAE,6CAJlG,OAKE,OALF,SAKQu5E,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KAPV,OAaM,OAbN,SAaY3pG,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,2BACV9vB,KAAM,CACJsnkB,gBAAiB7ynB,EAAOgc,QAAQ62mB,gBAChCC,wBAAyB9ynB,EAAOgc,QAAQ82mB,yBAE1CrrmB,OAAQ,CACNsmF,UAAW/tG,EAAOgc,QAAQ+xF,UAC1Bz7B,OAAQtyE,EAAOgc,QAAQs2D,YAvB/B,mBAWIxiD,EAXJ,EAWIA,KACA5J,EAZJ,EAYIA,KAeE4J,EA3BN,iBA4BI,OA5BJ,UA4BUsqD,YAAI,IAAIzY,KAAgC,CAAEs5K,QAASluP,oBA5B7D,QAgCQ,OAhCR,UAgCcjX,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,UACV9vB,KAAM,CACJ+mB,OAAQtyE,EAAOgc,QAAQs2D,YArCjC,oBA8BY66S,EA9BZ,EA8BMr9V,KACKs9V,EA/BX,EA+BMlnW,KAUEinW,EAzCR,oBA0CYhB,EAAWjuX,iBAAOivX,GAEX,OADPr3M,EAAQq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,UA3CvD,iBA6CQoH,QAAQ7Z,MAAM,mBAAoB6sC,GA7C1C,wBA+CQ,OA/CR,UA+CcsqD,YAAI,IAAInL,IAAwB6mG,IA/C9C,gCAkDMh5K,QAAQ7Z,MAAM,yDAA0D,CAACmqY,SAlD/E,gCAqDItwX,QAAQ7Z,MAAM,gCAAiC,CAACijC,QArDpD,QAuDE,OAvDF,UAuDQk0D,YAAI,IAAIzH,MAAyC,IAvDzD,QAwDE,OAxDF,UAwDQyH,YAAI,IAAIjxD,IAA6B,CACzCpT,GAAIijO,mBACJv5J,MAAM,KA1DV,yCA8DA,SAAU6piB,GACRtpnB,GADF,+FAIE,OAJF,EAG4CA,EAAOgc,QAAzCmiB,EAHV,EAGUA,KAAM40lB,EAHhB,EAGgBA,YAAa3pR,EAH7B,EAG6BA,WAH7B,SAIQhvR,YAAI,IAAIpS,KAA0B,IAJ1C,UAMQsK,EAASn0C,EAAKtlD,IAAI,MAClBm7Z,EAAW71W,EAAKtlD,IAAI,QACpBmyG,EAAY7sD,EAAKtlD,IAAI,aACrBmoR,EAAc7iO,EAAKtlD,IAAI,gBACvBm6oB,EAAsB5pR,EAAWl7U,cACjC+kmB,EAAkBF,GAAeA,EAAY1/nB,SAC/C0/nB,EAAYlipB,KAAO,GAZzB,iBAasB,OAbtB,UAa4B0qM,YAAI03c,EAAgBn1oB,KAAI,SAACwwY,GAC/C,IAAMC,EAAeD,EAAWv4W,GAC1Bm9mB,EAAiB,2BAAO5kQ,GAAP,IAAmBllB,WAAY4pR,IACtD,OAAOl9oB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,iBACV5zD,OAAQ,CACN6qD,SACAi8S,gBAEFhjU,KAAM2nkB,UAxBhB,aAaU7hC,EAbV,4BA6BgCA,EAAUvzmB,KAAI,SAAC84I,GACvC,IAAQ9mG,EAAsC8mG,EAAtC9mG,KAAM5J,EAAgC0wG,EAAhC1wG,IACd,GAAI4J,EAAM,CACR,IACMqjmB,EADgBj1nB,iBAAO4xB,GACOp6B,MAAM,CAAC,UAAW,OAAQ,SAC9D,GAAqB,MAAjBy9nB,EAGF,OAAOA,EAFPr2nB,QAAQ7Z,MAAM,mBAAoB6sC,QAKpChzB,QAAQ7Z,MAAM,0BAA2B,CAACijC,WAGvB,GA3C7B,iBA6CQ,OADAppB,QAAQ7Z,MAAM,0BAA2B,CAACoumB,cA5ClD,UA6Ccj3gB,YAAI,IAAIpS,KAA0B,IA7ChD,QA8CQ,OA9CR,UA8CcoS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,GAAD,OAAKs0D,IAAQ55E,EAAR,mDAAsDuoW,KAClE1uR,SAAU,WAhDpB,gCAmD8B,OAnD9B,UAmDoC7F,YAAOj1C,eAnD3C,QA8DQ,OAXM+B,EAnDd,OAoDcwuU,EApDd,aAqDU79R,SACA0hU,WACAhpT,UAAWA,GAAa,IACxBg2K,YAAaA,GAAe,IAC5B88E,WAAYsrB,GACTznU,GAEL45C,IAAmB9rE,kBAAgB2jnB,yBAA0BjjR,GA5DrE,UA8Dcr6X,YAAKqzoB,GAAc,IAAI92iB,IAAmBC,IA9DxD,QA+DQ,OA/DR,UA+Dc8H,YAAI,IAAIpS,KAA0B,IA/DhD,QAgEQ,OAhER,UAgEcoS,YAAI,IAAI3wD,IAAsB,CAClCtD,QAAQ,GAAD,OAAKs0D,IAAQ55E,EAAR,qDAAwDuoW,KACpE1uR,SAAU,aAlEpB,gCAuEI59E,QAAQ7Z,MAAM,oBAAqB,CACjC+c,WAxEN,yCA8EA,IAAMujI,GAAO,aACb,SAAUvM,GACNh3H,GADJ,6FAoBM,OApBN,EAOMA,EAAOgc,QAPb,IAIKogS,iBAJL,MAIiB74K,GAJjB,MAKKkqP,gBALL,MAKgBlqP,GALhB,EAMQnqI,EANR,iBAUImyD,EADE,SAAUvrD,EAAOgc,QACZhc,EAAOgc,QAAQuvC,KAEfnyD,EAZX,SAoBYtjB,YAAKuhG,IAAyB,IAAI/xB,IAAiB,CAC3DtpC,QAAS,CACPo/D,QAAS,OACTC,SAAU,cACV9vB,KAAM9nE,KAAK6tC,MAAM7tC,KAAKC,UAAU6nE,QAxBtC,mBAeIz7B,EAfJ,EAeIA,KACA5J,EAhBJ,EAgBIA,KAWE4J,EA3BN,oBA4BUq8V,EAAWjuX,iBAAO4xB,GAEX,OADPgmJ,EAA0Bq2M,EAASz2X,MAAM,CAAC,UAAW,OAAQ,WA7BvE,iBA+BMoH,QAAQ7Z,MAAM,mBAAoB6sC,GA/BxC,wBAiCM,OAjCN,UAiCYsqD,YAAI,IAAItQ,KAjCpB,QAkCMsyO,EAAUtmI,GAlChB,gCAqCI,OArCJ,UAqCU17F,YAAI,IAAIpQ,KArClB,QAsCIyjT,IACA3wX,QAAQ7Z,MAAM,uBAAwB,CAACijC,QAvC3C,iCAyCS,CACL4J,OACA5J,QA3CJ,yCA+CO,SAAUqjmB,GACfvpnB,GADK,2FAgBD,OAhBC,EAQDA,EAAOgc,QAJTs2D,EAJG,EAIHA,OACAupgB,EALG,EAKHA,SALG,IAMH7wf,iBANG,MAMS,KANT,EAOHoxN,EAPG,EAOHA,UAPG,SAgBKtmU,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,OACTC,SAAuB,WAAbwggB,EAAwB,sBAAwB,gBAC1DtwhB,KAAM,CACJgnkB,gBAAiB,mBAEnB9qmB,OAAQ,CACN6qD,cAxBD,mBAWHxiD,EAXG,EAWHA,KACA5J,EAZG,EAYHA,KAgBE4J,EA5BC,iBA+BH,OAFMqtD,EAAgBj/E,iBAAO4xB,GACvBm7lB,EAAa9tiB,EAAcznF,MAAM,CAAC,UAAW,OAAQ,UAAW,IA9BnE,UA+BG0kF,YAAI,IAAItS,KAAsBmjjB,EAAWpyoB,IAAI,QA/BhD,QAgCH,OAhCG,UAgCGuhG,YAAI,IAAIzK,KAAoBs7iB,EAAWpyoB,IAAI,QAhC9C,QAkCH,OAlCG,UAkCGuhG,YAAI,IAAI9N,KAAcuvgB,IAlCzB,QAmCH,OAnCG,UAmCG/lmB,YAAKilmB,GAAU,IAAIlsgB,IAAe,CAACyD,YAnCtC,WAoCc,WAAbupgB,EApCD,iBAqCD,OArCC,UAqCKzhgB,YAAI,IAAI5Q,KAA8B8I,IArC3C,gCAuCD,OAvCC,UAuCK8H,YAAI,IAAIzL,KAAiB2D,IAvC9B,WAyCgB,YAAbupgB,EAzCH,iBA0CC,OA1CD,UA0CO/lmB,YAAK4vY,IAAa,IAAIh9R,IAAkB,CAACsC,eA1ChD,QA2CC,OA3CD,UA2CO5Q,YAAI,IAAIwN,KAAoB,CAACoD,YAAW1Y,YA3C/C,QA8CH8pO,IA9CG,wBAgDHt/S,QAAQ7Z,MAAM,8CAA+C,CAACijC,QAhD3D,yCAoDP,SAAUsjmB,GACNxpnB,GADJ,6EAUM,OAVN,EAGiCA,EAAOgc,QAA9Bs2D,EAHV,EAGUA,OAAQ+gjB,EAHlB,EAGkBA,WAHlB,SAUYv9oB,YAAKshG,IAAsB,IAAI9xB,IAAiB,CACxDtpC,QAAS,CACPo/D,QAAS,SACTC,SAAU,uBACV9vB,KAAM,CACJ85H,UAAW,uBACXlnJ,KAAM,CACJpoB,GAAIu8D,EACJ+gjB,mBAlBV,kBAKIvjmB,KALJ,EAMI5J,IANJ,0C,uGCx+HKotmB,E,gdCpIUvpkB,qBACbgG,aA5Da,SAACC,GAAD,MAA+B,CAC5CujkB,eAAgB,CACdlihB,WAAY,OACZt2B,MAAO/qB,EAAM82C,WAAWq/B,GAAGprD,OAE7By4iB,mBAAoB,CAClBtjkB,QAAS,eACTG,OAAQ,UACRD,MAAO,QAETqjkB,cAAe,CACbjlhB,WAAW,GAAD,OAAKx+C,EAAMZ,QAAQ,MAAnB,MACVgB,MAAO,YA+CIrG,EA3CqC,SAAC/qC,GACnD,IACE00mB,EAIE10mB,EAJF00mB,SACAC,EAGE30mB,EAHF20mB,gBACAC,EAEE50mB,EAFF40mB,UACA5lkB,EACEhvC,EADFgvC,QAGF,OACE,gBAACL,EAAA,EAAD,CACEO,UAAWF,EAAQwlkB,mBADrB,UAGE,eAAClliB,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQulkB,eAFrB,SAIGG,IAEH,gBAAC/lkB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SAFb,UAIE,eAACugC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQylkB,cAFrB,SAIGE,SAGa/ipB,IAAdgjpB,EACI,eAAC,IAAD,CACAt4hB,IAAKs4hB,GAAa,GAClBxjkB,MAAO,QACPurC,YAAa,OACbC,aAAa,IAEb,c,yJCvDDi4hB,GAAiB,OAqCjBC,GAAyB,SAAC,GAMV,IAL3BhkhB,EAK0B,EAL1BA,KACA3xE,EAI0B,EAJ1BA,KAKM41lB,EAzBqB,SAACjkhB,GAC5B,OAAQA,GACN,KAAKvgG,QAAK4uB,KACR,MAAO,OACT,KAAK5uB,QAAKszP,QACV,KAAKtzP,QAAKu+mB,YACR,MAAO,UACT,KAAKv+mB,QAAKghG,OACR,MAAO,SACT,KAAKhhG,QAAKkhG,eACR,MAAO,WACT,QACE,OAAO,MAaYujhB,CAAqBlkhB,GAC5C,GAAsB,MAAlBikhB,GAAkC,MAAR51lB,GAAkC,MAAlBA,EAAKtlD,IAAI,MACrD,MAAO,CAAEo7oB,WAAY,KAAMF,eAAgB,MAE7C,IAAME,EAAgC,YAAnBF,EAA+B51lB,EAAKtlD,IAAI,aAAeslD,EAAKtlD,IAAI,MACnF,MAAO,CACLo7oB,WAA0B,MAAdA,EAAqBA,EAAa,KAC9CF,mBA4CSG,GAAuB,SAAC,GAAD,IAClCC,EADkC,EAClCA,mBACA9nhB,EAFkC,EAElCA,SACAxwE,EAHkC,EAGlCA,MACAi0E,EAJkC,EAIlCA,KACA3xE,EALkC,EAKlCA,KALkC,OAnBH,SAACm4C,EAAa7uD,GAC7C,IAAM+sZ,EAAYl+V,EAAIhhF,QAAQ,KACxBta,GAAsB,IAAfw5b,EAAmB,GAAKl+V,EAAI1xF,MAAM4vb,GACzC4/M,GAAgC,IAAf5/M,EAAmBl+V,EAAMA,EAAI1xF,MAAM,EAAG4vb,GAEvD6/M,EAAaD,EAAe9+nB,QAAQ,KACpC6tO,GAAuB,IAAhBkxZ,EAAoBD,EAAiBA,EAAexvoB,MAAM,EAAGyvoB,GACpEjiS,EAAe,IAAIkiS,iBAAgC,IAAhBD,EAAoB,GAAKD,EAAexvoB,MAAMyvoB,EAAa,IAEpGnhpB,OAAO0D,KAAK6wC,GAAQjmC,SAAQ,SAACpI,GAC3Bg5W,EAAa51W,IAAIpD,EAAKquC,EAAOruC,OAG/B,IAAM45H,EAAQo/O,EAAar8W,WAC3B,MAAM,GAAN,OAAUotP,GAAV,OAAiBnwH,EAAK,WAAOA,GAAU,IAAvC,OAA4Ch4H,GAiBhCu5oB,CAAkB,GAAD,OAAIJ,GAAJ,OAAyB9nhB,GApDjB,SAAC,GAQZ,IAP1BxwE,EAOyB,EAPzBA,MACAi0E,EAMyB,EANzBA,KACA3xE,EAKyB,EALzBA,KAMA,EAAuC21lB,GAAuB,CAAEhkhB,OAAM3xE,SAA9D81lB,EAAR,EAAQA,WAAYF,EAApB,EAAoBA,eACpB,MAAO,CACLlpc,WAtEmC,eAuEnCD,WAtEmC,eAuEnCH,aAAa,GAAD,OAtEiC,kBAsEjC,OAAyC5uJ,GACrD6uJ,YAA2B,MAAdupc,EAAqBtwoB,OAAOswoB,GAAcJ,GACvDW,iBAAoC,MAAlBT,EAAyBA,EAAiBF,IAqCIY,CAAwB,CAAE54lB,QAAOi0E,OAAM3xE,W,8QCtH5F,OAA0B,4C,6DCwBnCmmE,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Cv/B,QAAS,CACPmgC,QAASZ,EAAMZ,QAAQ,GACvBgB,MAAO,IACPgB,SAAU,qBACVnB,UAAW,kBAIT+oC,GAAkB,SAAC97G,GAAD,OAA6BA,EAAE87G,mBAiFxC07hB,GA3EwC,SAAC,GAA+D,IAA7DC,EAA4D,EAA5DA,QAASvwY,EAAmD,EAAnDA,QAASwwY,EAA0C,EAA1CA,SAAUC,EAAgC,EAAhCA,gBAAiBz5mB,EAAe,EAAfA,SAC/F4yC,EAAUs2C,KACV7kF,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAgC0Y,WAAqC,MAArE,mBAAO6lO,EAAP,KAAiB01Y,EAAjB,KACMz+U,EAAW98R,SAA+B,MA4B1Cw7mB,EAAgB,kBAAMD,EAAY,OAExC,OACE,uCACE,eAAC/1hB,EAAA,EAAD,CAASC,MAAOolJ,EAAhB,SACE,eAAC50I,GAAA,EAAD,2BAAgBqlhB,GAAhB,IAAiCl7hB,QA/BnB,SAACz8G,GAEnBA,EAAE87G,kBACF97G,EAAEg5H,iBAEF,IAAMjO,EAAW/qH,EAAEs8G,cACbza,EAAO41iB,IACbK,aAAgBj2iB,GAAM1zB,MAAK,SAAC4pkB,GACtBA,GACFx1mB,EAAS,IAAIgK,KAAsB,CAAEtD,QAAStlB,EAAE,mBAAoB65E,SAAU,aAC1Ek6iB,GACFA,EAAS71iB,IAGX+1iB,EAAY,CAAE7shB,WAAUlpB,aAiBxB,SACG3jE,OAGL,eAAC85mB,GAAA,EAAD,CACEz1iB,KAAMttG,QAAQitQ,GACdn3I,SAAUm3I,EAAWA,EAASn3I,SAAW,KACzCwR,QAASs7gB,EACT9hP,UApBa,WACb58F,EAASz5R,UACXy5R,EAASz5R,QAAQ4iC,QACjB62P,EAASz5R,QAAQi4D,WAkBf+7S,aAAc,CAAE/7G,SAAU,SAAUK,WAAY,QAChDn7J,gBAAiB,CAAE86J,SAAU,MAAOK,WAAY,QAEhDv7K,QAASX,GACTs9M,YAAat9M,GACbid,UAAWjd,GAVb,SAYE,uBAAK9qC,UAAWF,EAAQv9B,QAAxB,UACE,eAAC69D,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,2BAC/B,eAACmqS,GAAA,EAAD,CACEx6T,MAAO4uQ,EAAWA,EAASrgK,KAAO,GAClCs3N,SAAUA,EACVzkN,WAAY,CAAEovc,UAAU,GACxBvyc,WAAY,CAAE5Q,QAAS,SAAC3gG,GAAD,OAA2CA,EAAE4kB,OAAO+yE,WAC3E2Z,QAAQ,WACRn+B,OAAO,QACPs+B,WAAW,IAEb,gBAAChhC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,eAACg/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,gBAApC,SAAqDl6E,EAAE,uBACvD,eAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAASo7hB,EAAjC,SAAiDl0nB,EAAE,mC,kJJmG1DyynB,K,oBAAAA,E,kBAAAA,E,iBAAAA,M,KAME,IAAM6B,GAA0B,SAACn2mB,GACtC,IAAQo2mB,EAAsCp2mB,EAAtCo2mB,UAAR,EAA8Cp2mB,EAA3Bq2mB,gBAAnB,SAAoCjlkB,EAAUpxC,EAAVoxC,MAEpC,OAAOl7C,aACJ70B,QAAO,SAAAmyG,GAAS,cAAI4iiB,QAAJ,IAAIA,OAAJ,EAAIA,EAAW/2oB,SAASm0G,MACxC10G,KAAI,SAAC00G,EAAmBvhH,GAAmB,IAAD,kBACzC,OAAQuhH,GACN,KAAKv+E,kBAAekB,OAClB,OAAO,eAACioS,GAAA,EAAD,CAELj/L,IAAG,UAAE04N,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,MAClCq7W,YAAawpS,EAAQ,UAAGx+S,KAAiBrkP,UAApB,aAAG,EAA6BhiH,MAAQ,GAC7D8qH,IAAK+hN,KACLjtP,MAAOA,EACPg0L,QAAO,UAAEyyF,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,OALjCgiH,GAOT,KAAKv+E,kBAAemB,IAClB,OAAO,eAACgoS,GAAA,EAAD,CAELj/L,IAAG,UAAE04N,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,MAClCq7W,YAAawpS,EAAQ,UAAGx+S,KAAiBrkP,UAApB,aAAG,EAA6BhiH,MAAQ,GAC7D8qH,IAAKgiN,KACLltP,MAAOA,EACPg0L,QAAO,UAAEyyF,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,OALjCgiH,GAOT,KAAKv+E,kBAAeoB,OAClB,OAAO,eAAC+nS,GAAA,EAAD,CAELj/L,IAAG,UAAE04N,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,MAClCq7W,YAAawpS,EAAQ,UAAGx+S,KAAiBrkP,UAApB,aAAG,EAA6BhiH,MAAQ,GAC7D8qH,IAAKg6hB,KACLllkB,MAAOA,EACPg0L,QAAO,UAAEyyF,KAAiBrkP,UAAnB,aAAE,EAA6BhiH,OALjCgiH,GAOT,QACE,OAAO,UAqOJ49hB,GAAmB,uBAI1BmF,G,4MACGz5mB,MAAQ,CACb4iK,MAAO,EACPvrM,QAAQ,EACRqipB,gBAAiBlC,EAAUmC,QAC3BziO,UAAWnwZ,KAAK+xB,MAChB8gmB,gBAAiB,EACjBC,iBAAkB,EAClBC,eAAgB,EAChBC,WAAW,EACXC,YAAY,EACZC,mBAAmB,EACnBC,+BAA+B,EAC/BC,uBAAuB,G,EAGlBC,8BAAgC38mB,c,EAChC48mB,8BAAgC58mB,c,EAIhC68mB,0BAAoD,K,EA0JpDC,uBAAyB,WAC9B,MAII,EAAKr3mB,MAHPu1F,EADF,EACEA,OACA+nU,EAFF,EAEEA,gBACA36Y,EAHF,EAGEA,cAEF,EAMI,EAAK7lB,MALP45mB,EADF,EACEA,gBACAC,EAFF,EAEEA,iBACAC,EAHF,EAGEA,eACAJ,EAJF,EAIEA,gBACAxiO,EALF,EAKEA,UAGIsjO,EADUzznB,KAAK+xB,MACeo+X,EAEhCujO,EAAyBb,EACzBc,EAA0Bb,EAC1Bc,EAAwBb,EACxBJ,IAAoBlC,EAAUoD,WAChCF,EAA0Bb,EAAmBW,GAE3Cd,IAAoBlC,EAAUmC,UAChCc,EAAyBb,EAAkBY,GAEzCd,IAAoBlC,EAAUqD,SAChCF,EAAwBb,EAAiBU,GAE3C,IAAM9mQ,EAAc,CAClBonQ,aAAcJ,EAA0B,IACxCK,YAAaN,EAAyB,IACtCO,aAAcL,EAAwB,IACtCpqhB,SAAUkI,EAAO17H,IAAI,MACrBg2H,WAAY0F,EAAO17H,IAAI,QACvBk1H,UAAWuuU,EAAgB5mb,MAAM,CAAC,UAAW,EAAG,QAAU,IAC1Ds4G,cAAesuU,EAAgB5mb,MAAM,CAAC,UAAW,EAAG,mBAAqB,KAE3E6lF,KAAmB9rE,mBAAgBsnnB,oBAAqBp1lB,EAAc6tV,IAEtE,EAAK93R,SAAL,2BAAkB,EAAK57E,OAAvB,IAA8B45mB,gBAAiB,EAAGC,iBAAkB,EAAGC,eAAgB,M,EAGlF9khB,QAAU,SAAC13H,EAAa5I,EAAYwmpB,EAAgBphnB,EAAey2F,EAAkBotR,GAA3E,OAAqG,SAACv8Y,EAAkC4zH,IAOvJrxF,EAJI,EAAKT,MADPS,UAKO,IAFcviC,GAAMA,EAAE4kB,OAA4BgvG,SAAYA,EAAUuS,KAAgCE,MAEtF,CACzBllB,QAAS,CAAC,CAAEjlH,MAAK5I,QAAOwmpB,QAAOphnB,QAAO6jX,kBACtCptR,aAC0B,6BAAxB,EAAKrtF,MAAM68jB,UAAmE,oCAAxB,EAAK78jB,MAAM68jB,WAAmD,EAAK78jB,MAAMu1F,W,EAG9Hu8gB,aAAe,SAACzkhB,GAAD,OAAsB,SAACnvH,GAC3C,MAII,EAAK8hC,MAHPS,EADF,EACEA,SACAo8jB,EAFF,EAEEA,SACAtne,EAHF,EAGEA,OAIF90F,EAAS,IAAIgkG,KAA6D,CAAEpX,aAA0B,6BAAbwve,GAAwD,oCAAbA,IAAmDtne,IAIvL90F,EAAS,IAAIioG,IAAyD,CAAErb,cAGvD,6BAAbwve,GACHp8jB,EAAS,IAAI+mG,IAAuC,CAACywgB,aAAc,U,EAI/DC,aAAe,SAACprhB,GAAD,OAA4B,SAAC5uH,GACjD,MAUI,EAAK8hC,MATPS,EADF,EACEA,SACA0e,EAFF,EAEEA,KACAwzE,EAHF,EAGEA,gBAEA1E,GALF,EAIEkqhB,0BAJF,EAKElqhB,kBACAsH,EANF,EAMEA,OACAsne,EAPF,EAOEA,SACAl6iB,EARF,EAQEA,cACAy1lB,EATF,EASEA,wBAGI/qhB,EAAWkI,EAAO17H,IAAI,MAEtB+1H,GADqB9C,EAAQjzH,IAAI,YACb84H,EAAgB94H,IAAI,OACxCk1H,EAAYjC,EAAQjzH,IAAI,MACxBw+oB,EAAuBD,EAAwB1hoB,MAAM,CAAC22G,EAAU,UAAW,OAGjF,GAAiB,6BAAbwve,GAAwD,oCAAbA,GAAkD9te,IAAcsphB,EAAsB,CACnI,IAAM7nQ,EAAc,CAClBz5W,GAAIg4F,EACJC,cAAelC,EAAQjzH,IAAI,iBAC3B0yT,WAAYz/L,EAAQjzH,IAAI,eAAiB,IACzCmvN,IAAKl8F,EAAQjzH,IAAI,QAAU,IAC3B8ilB,oBAAqB7vd,EAAQjzH,IAAI,uBACjCkvN,QAASj8F,EAAQjzH,IAAI,WACrBo1H,MAAOnC,EAAQjzH,IAAI,SACnBqzH,SAAUJ,EAAQjzH,IAAI,YACtB68B,aAAco2F,EAAQjzH,IAAI,gBAC1B07H,OAAQzI,EAAQjzH,IAAI,UACpBy+oB,MAAOxrhB,EAAQjzH,IAAI,SACnBuzN,eAAgBtgG,EAAQjzH,IAAI,kBAC5B0hG,OAAQuxB,EAAQjzH,IAAI,UACpByyH,UAAWQ,EAAQjzH,IAAI,cAAgB,IACvCwzN,WAAYvgG,EAAQjzH,IAAI,eAE1B0iG,KAAmB9rE,mBAAgB8nnB,kCAAmC51lB,EAAc6tV,IAGtF/vW,EAAS,IAAIwxD,MACbxxD,EAAS,IAAIojG,IAA6C,CAAE1kF,OAAMywE,YAAW+C,kBAAiB1E,sBAE/C,IAAI8H,IAAgB,CAAEh/F,IAAK,EAAGzyB,KAAM,KAAMiyC,cACzF9V,EAAS,IAAIw1F,KAAqB,CAAE9H,mBAAoB,KAExD1tF,EAAS,IAAI+pG,MACb/pG,EAASggC,YAAMkhK,MAGflhM,EAAS,IAAI41F,MAAqB,M,EAG7BmihB,uCAAyC,SAACC,EAAiC5vV,GAChF,MAAoD,EAAK7oR,MAAlD+f,EAAP,EAAOA,OAAQuiL,EAAf,EAAeA,qBAAsBz/K,EAArC,EAAqCA,YAC/B61lB,EAAkB,OAAX34lB,EAEPk6X,EADiC33M,EAAqB5rN,MAAM,CAAC,UAAW,SAC1Bue,kBAAekB,OAGnE,GAAiB,0BAAb0yR,EAAsC,CACxC,GAAIhmQ,EACF,OAAI61lB,EACKD,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,SAClH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QAE1G4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QAIzH,IAAM8vV,EAAa1+N,EACfw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,SACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,SAC9G4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,SAC3G4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QAQrH,OAPe6vV,EACXC,EACA1+N,EACEw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,SACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,SACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,QAGvH,GAAIhmQ,EACF,OAAI61lB,GACKD,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAEhD4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,WAI3D,IAAM8vV,EAAa1+N,EACfw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,WAC/K4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,WAMlH,OALe6vV,EACXC,EACA1+N,EACEw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,WACjH4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAASmyS,EAAU,YAAc4vV,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAMmyS,EAAU,Y,EAKpH+vV,wBAA0B,WAC/B,IACEl5c,EACE,EAAK5iK,MADP4iK,MAEF,EAMI,EAAK1/J,MALPu1F,EADF,EACEA,OACAx3B,EAFF,EAEEA,OACAytR,EAHF,EAGEA,eACA8xE,EAJF,EAIEA,gBAIIu7M,GARN,EAKE94lB,OAG6Bu9Y,EAAgB5mb,MAAM,CAAC,UAAW,KAAO,EAAK8hoB,uCAAuCl7M,EAAgB5mb,MAAM,CAAC,UAAW,IAAK,0BAC1H,EAAK8hoB,uCAAuCjjhB,EAAQ,0BACrF,IAAKsjhB,EACH,OAAO,KAET,GAAIA,EAAqBx5oB,SAAS,QAChC,OAAOw5oB,EAET,IACE,OAAOrtR,GAAkBztR,EAAOJ,QAAQk7iB,EAAsB,CAAEz8iB,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAAEiwgB,UAAU,KAC/L,MAAOt+kB,GAWP,OAVIwhM,EAAQ,GACV/wJ,YAAW,WACT,EAAK+pE,SAAS,CAAEgnF,MAAOA,EAAQ,MAC9B,KAEL5hL,QAAQ08E,MAAM,iDAAmD,CAC/Dt8F,IACAwhM,QACA3hG,WAEK,O,EAIJ+6iB,mBAAqB,SAAChshB,EAASokhB,GACpC,MAOI,EAAKlxmB,MANPmomB,EADF,EACEA,4BAEAhplB,GAHF,EAEE1e,SAFF,EAGE0e,MACAghD,EAJF,EAIEA,QACAwyB,EALF,EAKEA,gBACA9vE,EANF,EAMEA,YAGI4qE,EAA2BkF,GAAmBA,EAAgB94H,IAAI,4BAClEk/oB,EAA0BpmhB,GAAmBA,EAAgB94H,IAAI,YAIvEsuoB,EAHetllB,EAAcs9C,EAAQtmG,IAAI,eAAiBslD,EAAKtlD,IAAI,MAClDszH,IAAQC,uBAAuBN,GAK9CW,EACAsrhB,EAAwB72oB,KAAK4qH,GAC7BokhB,EACA,EAAKgH,aAAaprhB,K,EAIfkshB,uCAAyC,SAAClshB,EAASmshB,GACxD,MAII,EAAKj5mB,MAHPmf,EADF,EACEA,KACAwzE,EAFF,EAEEA,gBACAlyF,EAHF,EAGEA,SAEF,EAAKq4mB,mBAAmBhshB,GAAS,GACjCrsF,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIq4X,KACJpvX,MAAO,CACLszD,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,UAAW+C,EAAgB94H,IAAI,MAC/Bk1H,UAAWjC,EAAQjzH,IAAI,MACvBk2H,aAAckphB,EACdnshB,e,EASC6B,8BAAgC,SAAC7B,GACtC,IACEnqE,EACE,EAAK3iB,MADP2iB,cAGF45C,KAAmB9rE,mBAAgBm+F,yBAA0BjsE,EAAc,CACzEksE,2BAA4B,MAC5BC,YAAa,iBACbC,UAAWjC,EAAQjzH,IAAI,MACvBm1H,cAAelC,EAAQjzH,IAAI,iBAC3Bo1H,MAAOnC,EAAQjzH,IAAI,SACnB68B,aAAco2F,EAAQjzH,IAAI,gBAC1B0hG,OAAQuxB,EAAQjzH,IAAI,UACpByyH,UAAWQ,EAAQjzH,IAAI,iB,EAIpBq/oB,gCAAkC,WACvC,IAAO1C,EAAmB,EAAK15mB,MAAxB05mB,gBACD2C,EAAkC,WACtC,EAAKzgiB,SAAS,CAAC89hB,gBAAiBlC,EAAUmC,UAAU,WAClD,EAAKS,8BAA8Bt5mB,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,eAGrFgwY,EAAkC,WACtC,EAAK1giB,SAAS,CAAC89hB,gBAAiBlC,EAAUqD,SAAS,WACjD,EAAKR,8BAA8Bv5mB,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,eAIvFotY,IAAoBlC,EAAUoD,WAChC,EAAKR,8BAA8Bt5mB,QACjCu7mB,IACAC,KAEA5C,IAAoBlC,EAAUmC,UAChC,EAAKS,8BAA8Bt5mB,QACjC,EAAKs5mB,8BAA8Bt5mB,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,WACvFgwY,KAEA5C,IAAoBlC,EAAUqD,SAChC,EAAKR,8BAA8Bv5mB,QACjC,EAAKu5mB,8BAA8Bv5mB,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,WACvF+vY,M,EAyiCEviZ,aAAe,SAACrhI,GAAD,OAA0B,SAAC0H,EAAsCnW,GACtF,MAII,EAAK9mF,MAHPS,EADF,EACEA,SACA44mB,EAFF,EAEEA,eACAv5a,EAHF,EAGEA,sBAOF,GAJAr/L,EAAS,IAAIgxD,MAAmC,IAChDhxD,EAAS,IAAIotF,KAAmB/G,EAAWyO,EAAO17H,IAAI,OAAS,IAG3DitH,EAAU,CACZ,IAAMwyhB,EAAmB/jhB,EAAO17H,IAAI,MAC9BwlH,EAAWg6hB,EAAev6oB,KAAI,SAACuC,EAAQ69G,GAAe,IAAD,QACnDq6hB,EAAuB,UAAGz5a,EAAsBppN,MAAM,CAAC4ioB,EAAkBp6hB,WAAlD,iBAAG,EAA4DhmG,eAA/D,aAAG,EAAqErf,IAAI,SACnG2/oB,EAAajkhB,EAAO7+G,MAAM,CAAC,aAAcwoG,EAAW,gBACpDu6hB,EAAoBp4oB,EAAO6X,QACjC,IAAIsgoB,GAAeC,IAAqBF,EAGxC,MAAO,CACLvB,MAAOyB,EAAkB5/oB,IAAI,SAC7BO,IAAKq/oB,EAAkB5/oB,IAAI,OAC3BrI,MAAOiopB,EAAkB5/oB,IAAI,SAC7B+8B,MAAO6inB,EAAkB5/oB,IAAI,SAC7B4gZ,cAAa,UAAEllR,EAAO7+G,MAAM,CAAC,aAAcwoG,EAAW,kBAAzC,iBAAE,EAAmDznG,MAAK,SAAAupb,GAAW,OAAIA,EAAYnnc,IAAI,WAAa4/oB,EAAkB5/oB,IAAI,mBAA5H,aAAE,EAAqIA,IAAI,UAEzJ6E,WAAW2V,OAAOhT,QAAO,SAAAsM,GAAC,OAAIA,KACjC8yB,EAAS,IAAI4jG,KAA8B,CACzChlB,UACAgO,SAAUishB,Q,uDAphDhB,WAA4B,IAAD,EACzB,EAAqExjpB,KAAKkqC,MAAnEu1F,EAAP,EAAOA,OAAQmqG,EAAf,EAAeA,iBAAkBm9X,EAAjC,EAAiCA,SAAUp8jB,EAA3C,EAA2CA,SAErCqB,GAFN,EAAqDqX,KAArD,EAA2D4kD,OAE9C,UAAGw3B,EAAO17H,IAAI,qBAAd,aAAG,EAA0BwH,QAAO,SAAAmmN,GAAS,OAAKA,EAAU3tN,IAAI,mBACvE6/oB,EAA6B,OAAG53mB,QAAH,IAAGA,OAAH,EAAGA,EAASrqB,MAAK,SAAC6+F,GAAD,OAAaA,EAAOz8G,IAAI,iBAExE,OAACioC,QAAD,IAACA,OAAD,EAACA,EAAS52B,SAEFwuoB,GACV5jpB,KAAK4iH,SAAS,CAAC89hB,gBAAiBlC,EAAUqD,SAF1C7hpB,KAAK4iH,SAAS,CAAC89hB,gBAAiBlC,EAAUoD,YAUlB,IAAtBh4a,IACFj/L,EAAS,IAAIiqG,KACb/7F,YAAW,kBAAMlO,EAAS,IAAImqG,OAA+C,MAI9D,6BAAbiyd,GACF/mmB,KAAK4iH,SAAS,CAACm+hB,WAAW,M,gCAI9B,SAA0B1iiB,EAAW4yJ,GAAY,IAAD,SAC9C,EAYIjxQ,KAAKkqC,MAXPS,EADF,EACEA,SACAqmF,EAFF,EAEEA,SACAw2U,EAHF,EAGEA,gBACAu/J,EAJF,EAIEA,SACA88C,EALF,EAKEA,aACAC,EANF,EAMEA,qCACArkhB,EAPF,EAOEA,OACAx3B,EARF,EAQEA,OACAl7C,EATF,EASEA,YACAy/K,EAVF,EAUEA,qBACAnpL,EAXF,EAWEA,KAEF,EAQIrjD,KAAKgnC,MAPP3oC,EADF,EACEA,OACAuipB,EAFF,EAEEA,gBACAC,EAHF,EAGEA,iBACAC,EAJF,EAIEA,eACAJ,EALF,EAKEA,gBACAxiO,EANF,EAMEA,UAIIlnT,GAVN,EAOEkqhB,8BAGc15M,EAAgB5mb,MAAM,CAAC,UAAW,KAC5Cq4G,EAAYuuU,EAAgB5mb,MAAM,CAAC,UAAW,EAAG,OACjD81S,EAAgB8wI,EAAgB5mb,MAAM,CAAC,UAAW,EAAG,kBAa3D,GAXiB,6BAAbmmlB,IAAsD,IAAX1omB,GAAmBq4T,GAAiBz9L,IACjF4qhB,EAAa7shB,GACbh3H,KAAK4iH,SAAS,CAAEvkH,QAAQ,KAET,oCAAb0omB,IAA6D,IAAX1omB,GAAmB46H,IACvE4qhB,EAAa7shB,GACbh3H,KAAK4iH,SAAS,CAAEvkH,QAAQ,KAKtB2yH,IAAa3S,EAAU2S,SAAU,CACnC,GAAIA,EAAU,CAEZ,IAAM0O,EAAY3xG,KAAK+xB,MACvB9/C,KAAK4iH,SAAS,CAACs7T,UAAWx+S,IAEvB1O,GAEHhxH,KAAKuhpB,yBAoBT,GAhBIvwhB,GAAY8yhB,IAAyCA,EAAqCvhoB,YAC5FooB,EAAS,IAAI+nG,KAAsD,CAAEjT,SAAQqkhB,0CAC7En5mB,EAAS,IAAI0jG,IAAmD,CAAE5O,aAKjEmhhB,IAAoB3vY,EAAU2vY,iBAC5BC,IAAqB5vY,EAAU4vY,kBAC/BC,IAAmB7vY,EAAU6vY,gBAC7BJ,IAAoBzvY,EAAUyvY,iBAC9BxiO,IAAcjtK,EAAUitK,WAEzBxvZ,OAAOs6E,iBAAiB,eAAgBhpG,KAAKuhpB,wBAI/Cl+lB,IAAS5pB,YAAS4vB,OACd0D,GACDy/K,EAAqB5rN,MAAM,CAAC,UAAW,SAAWue,kBAAekB,QACjE22F,IACCA,EAAQ5xH,OAAR,UAAei5G,EAAUmpV,uBAAzB,aAAe,EAA2B5mb,MAAM,CAAC,UAAW,KAChE,CAGI5gB,KAAKshpB,2BACPthpB,KAAKshpB,0BAA0BzlY,QAEjC,IAAMH,EAAa,IAAIC,gBACvB37Q,KAAKshpB,0BAA4B5lY,EAChCzzK,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CAAEzyC,KAAM,SAChBu2E,KAAM,CAAEohD,SAAU,CAACb,EAAQz4G,SAC3Bq9P,OAAQF,EAAWE,SACVrlM,MAAK,SAACurE,GAAS,IAAD,MAGvB,GAAI,EAAKw/f,4BAA8B5lY,EAAvC,CAKA,IAAMqoY,EAAW,OAAGjigB,QAAH,IAAGA,GAAH,UAAGA,EAAK56G,eAAR,iBAAG,EAAc8vF,eAAjB,iBAAG,EAAuBgthB,kBAA1B,aAAG,EAAoC,GACxD,EAAKphiB,SAAS,CAAEu+hB,uBAAuC,IAAhB4C,QACtCp9c,OAAM,SAACv1J,GAEJ,EAAKkwmB,4BAA8B5lY,GAGvC,EAAK94J,SAAS,CAAEu+hB,uBAAuB,U,kCAK7C,WACE,MAAqCnhpB,KAAKkqC,MAAlCu1F,EAAR,EAAQA,OAAR,EAAgBmqG,mBAISnqG,EAAO17H,IAAI,OAClC/D,KAAKuhpB,yBAGP7ynB,OAAOu6E,oBAAoB,eAAgBjpG,KAAKuhpB,wBAG5CvhpB,KAAKshpB,2BACPthpB,KAAKshpB,0BAA0BzlY,U,oBA6TnC,WAAiB,IAAD,gBAiGVooY,EAjGU,OAEd,EAsCIjkpB,KAAKkqC,MArCPne,EADF,EACEA,EACA4e,EAFF,EAEEA,SACAqmF,EAHF,EAGEA,SACAuyhB,EAJF,EAIEA,eACArqkB,EALF,EAKEA,QACAsuX,EANF,EAMEA,gBACA/nU,EAPF,EAOEA,OACA5C,EARF,EAQEA,gBACAqnhB,EATF,EASEA,4BAEAC,GAXF,EAUEl6lB,OAVF,EAWEk6lB,mCACAC,EAZF,EAYEA,gCACAC,EAbF,EAaEA,yBACAC,EAdF,EAcEA,gCAEAv9C,GAhBF,EAeErhjB,OAfF,EAgBEqhjB,UACAw9C,EAjBF,EAiBEA,aACA/3a,EAlBF,EAkBEA,qBACAD,EAnBF,EAmBEA,gBACAljL,EApBF,EAoBEA,KACAm7lB,EArBF,EAqBEA,uBACArshB,EAtBF,EAsBEA,iBAEAsshB,IAxBF,EAuBEC,eAvBF,EAwBED,eACA53lB,GAzBF,EAyBEA,cAEAmuE,GA3BF,EA2BEA,KACAjuE,GA5BF,EA4BEA,YACAs9C,GA7BF,EA6BEA,QACAhnD,GA9BF,EA8BEA,KACAuF,GA/BF,EA+BEA,iBACA+7lB,GAhCF,EAgCEA,kBACAj7gB,GAjCF,EAiCEA,OACAk1R,GAlCF,EAkCEA,eAlCF,KAmCEgmP,mCAnCF,OAmC+B,GAnC/B,GAoCE79lB,GApCF,EAoCEA,MACA89lB,GArCF,EAqCEA,6CAGA1D,GACEnhpB,KAAKgnC,MADPm6mB,sBAGI5/lB,GAAa8B,KAAS5pB,YAAS4vB,KAErC,GAAkIrpD,KAAKgnC,MAAhI05mB,GAAP,GAAOA,gBAAiBxiO,GAAxB,GAAwBA,UAAW2iO,GAAnC,GAAmCA,iBAAkBD,GAArD,GAAqDA,gBAAiBG,GAAtE,GAAsEA,UAAWC,GAAjF,GAAiFA,WAAYF,GAA7F,GAA6FA,eAAgBG,GAA7G,GAA6GA,kBACvGrvV,GAAW,SAAC,GAAmE,IAAjEtrR,EAAgE,EAAhEA,SAAUw+mB,EAAsD,EAAtDA,eAAgBpppB,EAAsC,EAAtCA,MAAUilB,EAA4B,kBAClF,OACE,eAACk4D,EAAA,EAAD,yBACE4sD,OAAQq/gB,IAAmBpppB,GACvBilB,GAFN,aAIG2lB,MAKDixF,GAAQ,OAAGkI,QAAH,IAAGA,OAAH,EAAGA,EAAQ17H,IAAI,MACvBoyH,GAAY,OAAGsJ,QAAH,IAAGA,OAAH,EAAGA,EAAQ17H,IAAI,UAC3BghpB,GAAoBX,EAAgC7hoB,UAKtD,CACA0jF,MAAO,UACPiX,UAAU,GANV,CACAjX,MAAO,UACPiX,UAAU,GAMR8Z,GAAyBwwU,EAAgB5mb,MAAM,CAAC,UAAW,IAC3D6kF,GAASuxB,IAAWA,GAAQjzH,IAAI,UAChCwxH,GAAyB,WAAX9vB,GAEdu/iB,GAA8B,MAAXhuhB,GACrBh3H,KAAK0ipB,uCAAuC1rhB,GAAS,cACrDh3H,KAAK0ipB,uCAAuCjjhB,EAAQ,cAElDwlhB,GAA6B,MAAXjuhB,GACpBh3H,KAAK0ipB,uCAAuC1rhB,GAAS,aACrDh3H,KAAK0ipB,uCAAuCjjhB,EAAQ,aAElDylhB,GAAuB,MAAXluhB,GACdh3H,KAAK0ipB,uCAAuC1rhB,GAAS,OACrDh3H,KAAK0ipB,uCAAuCjjhB,EAAQ,OAElD0lhB,GAAkC,MAAXnuhB,GACzBh3H,KAAK0ipB,uCAAuC1rhB,GAAS,kBACrDh3H,KAAK0ipB,uCAAuCjjhB,EAAQ,kBAElD2lhB,GAAoC,MAAXpuhB,GAAkBA,GAAQp2G,MAAM,CAAC,aAAc,eAAiB6+G,EAAO7+G,MAAM,CAAC,aAAc,eAErHykoB,GAAqB79M,EAAgBzjc,IAAI,aAO7CkgpB,EADe,oCAAbl9C,EAC+Bo9C,GAAqCK,EAClE,CACEv+iB,MAAO,UACPiX,UAAU,GAEZl9G,KAAKohpB,8BAA8Bt5mB,SAAW9nC,KAAKqhpB,8BAA8Bv5mB,SAK/EkvF,GAJA,CACE/wB,MAAO,UACPiX,UAAU,GAOV,CACEjX,MAAO,UACPiX,UAAU,GAGainiB,GAAqCK,EAClE,CACEv+iB,MAAO,UACPiX,UAAU,GAEZl9G,KAAKohpB,8BAA8Bt5mB,SAAW9nC,KAAKqhpB,8BAA8Bv5mB,QAC/E,CACEm+D,MAAO,UACPiX,UAAU,GAEA,MAAX8Z,IAAiC,6BAAb+ve,GAA2C/re,KAASvgG,QAAKw+mB,kBAAuC,MAAnBp8gB,GAA4BtH,IAAuD,WAAjBY,GAClK,CACElwB,MAAO,UACPiX,UAAU,GAEZ,CACEjX,MAAO,UACPiX,UAAU,GAItB,IACIooiB,GAAkC,+BACf,MAAnBzohB,GAC+B,oCACjCyohB,GAAkC,yCACd,MAAXtuhB,IACwB,oCACjCsuhB,GAAkC,yCACd,iBAAX7/iB,GACT6/iB,GAAkC,qDACd,YAAX7/iB,GACT6/iB,GAAkC,gDACd,aAAX7/iB,KACT6/iB,GAAkC,kDAKpC,IA0DIC,GAeAC,GAzEEx6a,GAAmBvrG,EAAO17H,IAAI,cAC9B0hpB,GAAkCvB,IAAgCA,EAA4B3hoB,UAChGnP,uBAAsCpC,eAAc,SAAC00oB,GACrDxB,EAA4Bx3oB,SAAQ,SAACm0B,GAEZ,OADCmqM,IAAoBA,GAAiBjnO,IAAI88B,KAE/D6knB,EAAOh+oB,IAAIm5B,EAAYmqM,GAAiBjnO,IAAI88B,UAIhDmqM,GAOE0tZ,GAAqDtvmB,iBAAO,CAAEooM,WAAYp+M,uBAAuC44B,QAAS54B,yBAAyEpC,eACvM,SAAC20oB,GACCF,IAAmCA,GAAgC/4oB,SACjE,SACEu6Y,EACAO,GAEIP,EAAKljZ,IAAI,eACX4hpB,EAAwBr1oB,OAAO,cAAc,SAACwrnB,GAAD,OAAaA,EAAQp0nB,IAAI8/Y,EAASP,MAE/E0+P,EAAwBr1oB,OAAO,WAAW,SAACwrnB,GAAD,OAAaA,EAAQp0nB,IAAI8/Y,EAASP,SAIlFj8K,IAAoBA,GAAiBt+N,SAAQ,SAACu6Y,EAAMO,GAC7CP,EAAKljZ,IAAI,gBACZ4hpB,EAAwBr1oB,OAAO,UAAW8C,wBAAuC,SAAC0onB,GAChF,OAAQA,EAAQ73nB,IAAIujZ,GAAwCs0O,EAA7BA,EAAQp0nB,IAAI8/Y,EAASP,YAQxDhxR,IACO,MAAXe,GACIA,GAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WACzC6+G,EAAO7+G,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAHhC,eADE,GACF,YADE,IAOVioC,GAAgB9B,KAAU9rB,gBAC1Bq+F,GAA2BzwE,KAAkBkE,GAE7C64lB,GAAsB5uhB,IAAWA,GAAQp2G,MAAM,CAAC,iBAAkBmmC,GAAO,YACzE8+lB,GAAgC7uhB,IAAWA,GAAQp2G,MAAM,CAAC,iBAAkB,UAAW,YAEvFkloB,GAAqB,UAAIF,IAA4CC,UAAhD,QAAkF5toB,iBAEvG8toB,GAAwB/uhB,IAAWA,GAAQp2G,MAAM,CAAC,iBAAkB,YAIxE2koB,GADe,2BAAbx+C,EAC2B,CAC3B91e,UAAW,GAES,6BAAb81e,GAAwD,oCAAbA,EACvB,CAC3Bvrf,SAAUx7G,KAAK8gQ,aAAarhI,IAGD,CAC3BxO,UAAW,GAMbu0hB,GADe,2BAAbz+C,EACkC,CAClC51e,WAAY,eAAC,IAAD,CAAiB7V,MAAO,CAAEhgC,MAAO,UAAYs2C,KAAK,iBAC9D/M,QAAS+5S,IAGW,6BAAbmoM,GAAwD,oCAAbA,EAChB,CAClC51e,WAAY,eAAC,IAAD,CAAiB7V,MAAO,CAAEhgC,MAAO,UAAYs2C,KAAK,kBAG5B,CAClCx4C,UAAWF,EAAQ8skB,uBAKvB,IAAMC,GAAuB,SAAA3hpB,GAC3B,MAAqB,QAAjBigpB,GAA2C,QAAjBA,GAED,MAAXvthB,GAAkBA,GAAUyI,GAAQ7+G,MAAM,CAAC,QAAS,UAAW2joB,EAAc,WACvE,SAARjgpB,EACL,UAEY,MAAX0yH,GAAkBA,GAAUyI,GAAQ7+G,MAAM,CAAC,QAAS,UAAW2joB,EAAcjgpB,KAAS,IAGzF,KAIL4hpB,GAAe,kCAAOn6nB,EAAE,mBAAmB,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAA+BmtD,QAAS,CAACsxM,OAAQtxM,EAAQo2L,SAA3E,SAAqF,eAAC,KAAD,CAAUl2L,UAAWF,EAAQ8qP,gBAC7JmiV,IAA0C,MAAXnvhB,GAAkBA,GAAUyI,GAAQ17H,IAAI,SAUvE25G,GAAY8uH,EAAqB5rN,MAAM,CAAC,UAAW,OACnD6rN,GAA+B1/K,GAAcw/K,EAAkB7uH,KAAcv+E,kBAAekB,OAAS,MAAQ,MAC7GsgU,GAAQwlT,GAA4BvloB,MAAM,CAAC,UAAW6rN,GAA8B,UACpF25a,GAAmBjnnB,kBAAekB,OAClCgmnB,GAAgBlnnB,kBAAemB,IAC/BgmnB,GAA2B,SAAAhipB,GAC/B,GAAIo5G,KAAc0oiB,IAAoB1oiB,KAAc2oiB,IAAiBt5lB,GAAa,CAEhF,IAAMq/I,EAAQu0J,GACEulT,GACAC,GAA4BvloB,MAAM,CAAC,UAAW6rN,GAA8BnoO,IAC5F,OAAO8nM,GAAgB,IAGvB,MAAO,KAgFLm6c,GAAevvhB,IAAWA,GAAQjzH,IAAI,SACtCyipB,GAAc/mhB,GAAUA,EAAO17H,IAAI,SACnC0ipB,GAAkBhnhB,GAAUA,EAAO17H,IAAI,aACvC2ipB,GAAmB1vhB,IAAWA,GAAQjzH,IAAI,aAC1CyyH,GAAYkwhB,IAAsCD,GAGlDE,GAAgB3vhB,IAAWA,GAAQjzH,IAAI,UACvC6ipB,GAAqBD,IAAgCxwhB,GAGrD0whB,IAA6B,UAAAnuB,GAAqB30nB,IAAI,kBAAzB,mBAAqC4d,MAAK,SAAA6+F,GAAM,OAAIA,EAAOz8G,IAAI,aAAey8G,EAAOz8G,IAAI,uBAAzF,eAAwGhI,MAAO,EAC5I+qpB,IAA6B,UAAApuB,GAAqB30nB,IAAI,kBAAzB,mBAAqC4d,MAAK,SAAA6+F,GAAM,OAAIA,EAAOz8G,IAAI,YAAcy8G,EAAOz8G,IAAI,uBAAxF,eAAuGhI,MAAO,EAC3IgrpB,GAA8G,KAA1F,UAAAruB,GAAqB30nB,IAAI,kBAAzB,mBAAqCwH,QAAO,SAAAi1G,GAAM,OAAKA,EAAOz8G,IAAI,uBAAlE,eAAiFhI,MACrGirpB,QAA2GlrpB,KAAjF,UAAA48nB,GAAqB30nB,IAAI,kBAAzB,eAAqC4d,MAAK,SAAA6+F,GAAM,OAAIA,EAAOz8G,IAAI,iBAEzFkjpB,GAAyC,6BAAblgD,GAAwD,oCAAbA,EACvEmgD,GAA8BlnpB,KAAKohpB,8BAA8Bt5mB,SAAW9nC,KAAKqhpB,8BAA8Bv5mB,QAE/Gq/mB,GAAkB,WACtB,EAAKvkiB,SAAS,CAACm+hB,WAAY,EAAK/5mB,MAAM+5mB,aAOlCqG,GAAqB,SAAC,GAAD,MAAG11b,EAAH,EAAGA,UAC5BptN,EADyB,EACzBA,IACA5I,EAFyB,EAEzBA,MAFyB,OAEb2rpB,GAAc,CACxB9D,iBACAa,kCACAiB,sBACAhB,2BACAC,kCACAH,oCACAmD,YAAa,EAAKtrhB,QAClBzE,YACApB,gBACAu7F,YACAptN,MACA5I,QACA6rpB,aAAY,OAAE1C,SAAF,IAAEA,IAAF,UAAEA,GAA8C9gpB,IAAI2tN,EAAU3tN,IAAI,eAAlE,aAAE,EAAyEwF,SAAS7N,EAAMqI,IAAI,aAG9G,OACE,gBAACgtH,EAAA,EAAD,yBAEEC,SAAUA,GACNu0hB,IAHN,IAIEjqiB,MAAO0V,EAAW,CAAEz1C,OAAQ,UAAa,KACzC8qD,gBAAiB,CAAE4B,eAAe,EAAMu/gB,cAAc,GALxD,UAOE,eAACt2hB,EAAA,EAAD,2BAA2Bs0hB,IAA3B,aAEI97gB,IAGM,gBAAC7wD,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SAFP,UAIE,eAAC3B,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EAFN,SAIE,eAAC,IAAD,CACEssC,IAAKyP,GACL36C,MAAK,UA7OT,GA6OS,MACLurC,YAAa,OACbC,aAAa,MAGjB,gBAACjuC,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EAFN,UAIE,eAACs/B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQuukB,QAA/B,SACGhohB,EAAO17H,IAAI,WAGd,gBAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,eAACg/B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ6gD,WAA/B,SACG0F,EAAO17H,IAAI,UAGZw9C,IACE,eAAC,GAAD,CACE+tN,QAASvjP,EAAE,qCACXg0nB,gBAAiB,CAAEhkpB,KAAM,QAASu/G,MAAO,CAAE4M,WAAY,IACvD23hB,QAAS,kBAAMT,GAAqB,CAClCC,mBAAoBuF,GACpBrthB,YACAxwE,SACAi0E,QACA3xE,UAGFy2lB,SAAU,SAAC4H,GACT,IAAM9pV,EAAa,CACjBrmM,YACAwC,WAAY0F,EAAO17H,IAAI,QACvBkvN,QAASxzF,EAAO17H,IAAI,WACpBqga,UAAW3kS,EAAO17H,IAAI,SACtB88B,WAAY4+F,EAAO17H,IAAI,YACvB68B,aAAc6+F,EAAO17H,IAAI,gBACzB2jpB,cAGFjhjB,KAAmB9rE,mBAAgBgtnB,sBAAuB96lB,GAAc+wQ,IAExE,IAAMy9D,EAAe,CACnB9qL,UAAW31K,aAAU+snB,sBACrB57lB,YAAac,KACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,mBA9BN,SAkCE,eAAC,KAAD,CAAWl0Q,SAAS,eAM5B,eAAC3N,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo4E,UAA/B,SACc,MAAXt6B,GAAkBA,GAAQjzH,IAAI,eAAiB07H,EAAO17H,IAAI,oBAG/D,gBAAC80E,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EAFN,UAIE,gBAACrB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SAHP,UAMe,MAAXw8C,GACI,uBAAK1b,MAAO,CAAE+O,SAAU,UAAxB,UACE,eAAC7Q,EAAA,EAAD,CAAYp+B,QAAQ,SAApB,SAA8BrvD,EAAE,8BADlC,IAC6E,eAACytF,EAAA,EAAD,CAAYvT,MAAM,UAAU7qB,QAAQ,SAApC,SAA8C47C,GAAQjzH,IAAI,sBAEvI,uBAAKu3G,MAAO,CAAE+O,SAAU,UAAxB,UACE,eAAC7Q,EAAA,EAAD,CAAYp+B,QAAQ,SAApB,SAA8BrvD,EAAE,6BADlC,IAC4E,eAACytF,EAAA,EAAD,CAAYvT,MAAM,UAAU7qB,QAAQ,SAApC,SAA8CqkD,EAAO17H,IAAI,uBAIxIwipB,IAAgBC,KACjB,eAAC3tkB,EAAA,EAAD,CACEO,UAAWF,EAAQu8C,WADrB,SAGE,eAACiB,GAAA,EAAD,CACEF,UAAWA,OAKS,WAAvBowhB,IACD,eAAC/tkB,EAAA,EAAD,CACEO,UAAWF,EAAQu8C,WADrB,SAGE,eAACswM,EAAA,EAAD,CACEzqN,MAAO,CAAEmM,aAAc,OACvB3mF,MAAO/U,EAAE,UAAD,OAAW66nB,KACnB1piB,UAAU,EACVnhH,KAAK,eApPV,WACnB,UAAI4opB,SAAJ,IAAIA,QAAJ,EAAIA,GAAmB5gpB,KAAKizH,IAAWyI,GAAQ17H,IAAI,YACjD,OAAO,KAGT,GAAiB,6BAAbgjmB,EACF,OAAO,gBAACvtf,EAAA,EAAD,WAAaztF,EAAE,qBAAf,KAAuCA,EAAE,oBAAzC,IAAgG,WAAjCk6nB,GAAqB,QAAuBl6nB,EAAE,mBAAqBk6nB,GAAqB,QAAvJ,KAAkKl6nB,EAAE,oBAApK,IAA0Lk6nB,GAAqB,QAA/M,KAA0Nl6nB,EAAE,oBAA5N,IAAkPk6nB,GAAqB,WACzQ,GAAiB,oCAAbl/C,EACT,OAAO,gBAACvtf,EAAA,EAAD,WAAaztF,EAAE,yBAAf,KAA2Cu6nB,GAAyB,QAApE,IAA8ElqmB,MAAMkqmB,GAAyB,SAAW,KAAO75a,MAEtI,GAAIz1G,GAAS,CACX,IAAMotM,EAAYkiV,GAAyB,QACrC19U,GAAgC,MAAX5xM,GAAkBA,GAAUyI,GAAQ7+G,MAAM,CAAC,QAAS,UAAW6rN,GAA8B,sBACxH,OAAIk0H,GACK,gBAACnnP,EAAA,EAAD,WAAaztF,EAAE,yBAAf,KAA2Cm6nB,MAGlD,eAACj8hB,EAAA,EAAD,CAASC,MAAOvoH,OAAOyiU,GAAa,EAAIr4S,EAAE,+BAAgC,CAAEggG,KAAM68M,EAAoBrE,aAAWqE,GAAqB,MAAU78S,EAAE,iCAAlJ,SACE,gBAACytF,EAAA,EAAD,WAAaztF,EAAE,yBAAf,KAA2CpqB,OAAOyiU,GAAa,EAApB,UAA2BA,EAA3B,YAAwC33F,IAAiC,SAIxH,IAAMm7a,EAAenohB,EAAO7+G,MAAM,CAAC,WAAY,UAAW6rN,GAA8B,SAClFo7a,EAAoBlmpB,OAAOimpB,GAAgB,EAC3CE,EAA4BrohB,EAAO7+G,MAAM,CAAC,WAAY,UAAW6rN,GAA8B,kBAC/F1gH,EAAO87hB,EACTC,EACEvjV,aAAWujV,GACX,IACF,GACE59hB,EAAQ29hB,EAAoB97nB,EAAE,+BAAgC,CAAEggG,SAAUhgG,EAAE,iCAC5EqgL,EAAQy7c,EAAiB,UACxBD,EADwB,YACRn7a,IACnB,IAEJ,OAAIk0H,KAAUknT,EACL,gBAACruiB,EAAA,EAAD,WAAaztF,EAAE,yBAAf,KAA2Cm6nB,MAGlD,eAACj8hB,EAAA,EAAD,CAASC,MAAOA,EAAhB,SACE,gBAAC1Q,EAAA,EAAD,WAAaztF,EAAE,yBAAf,KAA2CqgL,OAiNlC27c,IAEExmmB,IACC,gBAACs3B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SAHP,UAKE,gBAACg/B,EAAA,EAAD,CAAY8B,MAAO,CAAEkG,YAAa,GAAlC,UAAwCz1F,EAAE,uBAA1C,QACA,eAAComQ,GAAA,EAAD,CACE1yJ,OAAQzI,IAAWyI,EACnB3lD,QAAQ,aACRkukB,UAAW,QArN9BzmmB,GAKH,gBAACs3B,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,GAA/E,UAEI8oiB,IACE,eAACn7hB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iCAAlB,SACE,sBAAKy6F,IAAKyhiB,GAAgB5+gB,IAAI,mBAAmB/tB,MAAO,CAAEkG,YAAa,QAK3E0jiB,IACE,eAACj7hB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0BAAlB,SACE,eAACg6S,EAAA,EAAD,CACEn0M,KAAM,eAAC,KAAD,CAASzK,SAAS,UACxBrmF,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,qBACtChwB,KAAM,eAlBT,QA2NK,gBAAC88E,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNM,GAAI,EACJjB,WAAW,SACX4rC,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBALpB,UAOE,gBAACS,EAAA,EAAD,CACE1e,MAAM,UACNmnB,KAAMptH,KAAK8ipB,0BACX91nB,OAAQ,SACRkwF,WAAY8Z,IAAWh3H,KAAK0ipB,uCAAuC1rhB,GAAS,0BAC7Dh3H,KAAK0ipB,uCAAuCjjhB,EAAQ,0BALrE,UAUE,eAAC,IAAD,CACE7N,KAAK,WACLx4C,UAAWF,EAAQgvkB,gBAEpBn8nB,EAAE,gCAEHw1B,IAAcyjmB,IACd,gBAACrgiB,EAAA,EAAD,CACE1e,MAAM,UACNqV,MAAO,CAAC2R,UAAW,QACnBpI,QAAS,WACPpe,KAAmB9rE,mBAAgBwtnB,qBAAsBt7lB,GAAc,CACrE0qE,YACAwC,WAAY0F,EAAO17H,IAAI,WAEzB4mC,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAImnnB,0BACJl+mB,MAAO,CACLpJ,MAAO/U,EAAE,gCACTs8nB,YAAarxhB,GAAUA,GAAQjzH,IAAI,iBAAmB07H,EAAO17H,IAAI,iBACjE63T,QAASopV,OAGbr6mB,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAImnnB,8BAhB/D,UAmBE,eAAC,KAAD,CAAehvkB,UAAWF,EAAQgvkB,cAAe5siB,MAAO,CAACkG,YAAa,KACrEz1F,EAAE,gCAGLw1B,IAAc0jmB,IACd,gBAACtgiB,EAAA,EAAD,CACE1e,MAAM,UACNqV,MAAO,CAAC2R,UAAW,QACnBpI,QAAS,WACPpe,KAAmB9rE,mBAAgB2tnB,oBAAqBz7lB,GAAc,CACpE0qE,YACAwC,WAAY0F,EAAO17H,IAAI,WAEzB4mC,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAImnnB,0BACJl+mB,MAAO,CACLpJ,MAAO/U,EAAE,+BACTs8nB,YAAarxhB,GAAUA,GAAQjzH,IAAI,iBAAmB07H,EAAO17H,IAAI,iBACjE63T,QAASqpV,OAGbt6mB,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAImnnB,8BAhB/D,UAmBE,eAAC,KAAD,CAAehvkB,UAAWF,EAAQgvkB,cAAe5siB,MAAO,CAACkG,YAAa,KACrEz1F,EAAE,+BAGLw1B,IAAc4jmB,IACd,gBAACxgiB,EAAA,EAAD,CACE1e,MAAM,UACNqV,MAAO,CAAC2R,UAAW,QACnBpI,QAAS,WACPpe,KAAmB9rE,mBAAgB4tnB,0BAA2B17lB,GAAc,CAC1E0qE,YACAwC,WAAY0F,EAAO17H,IAAI,WAEzB4mC,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAImnnB,0BACJl+mB,MAAO,CACLpJ,MAAO/U,EAAE,kCACTs8nB,YAAarxhB,GAAUA,GAAQjzH,IAAI,iBAAmB07H,EAAO17H,IAAI,iBACjE63T,QAASupV,OAGbx6mB,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAImnnB,8BAhB/D,UAmBE,eAAC,KAAD,CAAahvkB,UAAWF,EAAQgvkB,cAAe5siB,MAAO,CAACkG,YAAa,KACnEz1F,EAAE,8CAQrB,gBAACskG,EAAA,EAAD,CAAuBn3C,QAAS,CAC9B3hE,KAAM2hE,EAAQ85C,2BADhB,UAIKzxE,IAAc4/lB,IACb,gBAACtokB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,SAASb,WAAW,SAASG,UAAWF,EAAQsvkB,6BAA7F,UACE,eAAC,KAAD,CAAoBpvkB,UAAWF,EAAQuvkB,0BACvC,eAACjviB,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAxC,SACG3tF,EAAE,iDAKX,eAAC4qG,EAAA,EAAD,CAAS84f,OAAO,IACd,gBAACz9T,EAAA,EAAD,CACEt2T,MAAOglpB,GACPlliB,SAAU,SAAC2rB,EAAOq2T,GAEhB,IAAMkrN,EAAoB36nB,KAAK+xB,MACzB6omB,EAAgBD,EAAoBxqO,GAC1C,EAAKt7T,SAAL,2BACK,EAAK57E,OADV,IAEE05mB,gBAAiBljN,EACjBtf,UAAWwqO,EACX7H,iBAAsC,aAApBH,GAAiCG,GAAmB8H,EAAgB9H,GACtFD,gBAAqC,YAApBF,GAAgCE,GAAkB+H,EAAgB/H,GACnFE,eAAoC,YAApBJ,GAAgCI,GAAiB6H,EAAgB7H,OAGrF5uV,UAAU,UACVh5O,QAAS,CACP3hE,KAAM2hE,EAAQ+7E,KACd2zf,MAAO1vkB,EAAQ+7E,MAEjB35C,MAAO,CACLsM,aAAc,uBAEhBihiB,kBAAmB,CACjBvtiB,MAAO,CACL0J,gBAAiB,UACjBuM,OAAQ,EACRgD,QAAS,IA3Bf,UA+BE,eAAC49L,EAAA,EAAD,CACErxR,MAAO/U,EAAE,wBACTrwB,MAAO8ipB,EAAUoD,SACjB1okB,QAAS,CACPosC,SAAUpsC,EAAQskX,eAGtB,eAACrrI,EAAA,EAAD,CACErxR,MAAO,eAACmpF,EAAA,EAAD,CAASC,MAAO68hB,GAAoBh7nB,EAAE,kCAAoC,GAA1E,SAA8E,gCAAOA,EAAE,wBAA0B86nB,GAA6B,KAAO,QAC5JvriB,MAAO,CAAC+Y,cAAe,QACvBnX,SAAU6piB,GACVrrpB,MAAO8ipB,EAAUmC,QACjBznkB,QAAS,CACPosC,SAAUpsC,EAAQskX,eAInBwpN,GAWD,KAVA,eAAC70V,EAAA,EAAD,CACErxR,MAAO,eAACmpF,EAAA,EAAD,CAASC,MAAO88hB,GAA0Bj7nB,EAAE,kCAAoC,GAAhF,SAAoF,gCAAOA,EAAE,+BAAiCi7nB,IAA2BF,GAA6B,KAAO,QACpMxriB,MAAO,CAAC+Y,cAAe,QACvBnX,SAAU8piB,GACVtrpB,MAAO8ipB,EAAUqD,OACjB3okB,QAAS,CACPosC,SAAUpsC,EAAQskX,kBAO1B,gBAAC5rI,GAAD,CAAUkzV,eAAgBpE,GAAiBhlpB,MAAO8ipB,EAAUoD,SAAUxokB,UAAWF,EAAQ4vkB,oBAAzF,UACE,eAACtviB,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ6vkB,gBAA5C,SACGh9nB,EAAE,0BAEL,eAAC8sD,EAAA,EAAD,CACEO,UAAWF,EAAQ8vkB,iBADrB,SAIItwB,GAAqB30nB,IAAI,cAAciF,KAAI,SAAC0oN,EAAWptN,GACrD,IAAMs6oB,EAAWltb,EAAU3tN,IAAI,QACzBklpB,EAAuCv3b,EAAU9wM,MAAM,CAAC,SAAU,GAAIhO,iBACtEisoB,EAAkBoK,EAAellpB,IAAI,eACrC+6oB,EAAYmK,EAAerooB,MAAM,CAAC,QAAS,SAAU,SAGzD,OACE,eAAC,GAAD,CAEEg+nB,SAAUA,EACVC,gBAAiBA,EACjBC,UAAWA,GAHNx6oB,MAOVsE,gBAIT,eAACgpT,GAAD,CAAUkzV,eAAgBpE,GAAiBhlpB,MAAO8ipB,EAAUmC,QAASvnkB,UAAWF,EAAQ4vkB,oBAAxF,SACgD,IAA7CpwB,GAAqB30nB,IAAI,WAAWhI,MAAc,eAAC88E,EAAA,EAAD,CACjDW,WAAW,EACXJ,UAAWF,EAAQgwkB,iBACnB5ukB,QAAS,EACTghC,MAAO,CAAC2W,WAAY,IAJ6B,SAMjD,eAAC,GAAD,CACEjmF,QAAS0slB,GAAqB30nB,IAAI,WAClCqjpB,mBAAoBA,GACpB+B,iBAA+B,6BAAbpiD,EAClBw9C,aAAcA,EACd9khB,OAAQA,EACRlI,SAAUA,GACV6xhB,mBAAoBhF,EACpBiB,mBAAoBA,GACpBnlhB,WAAY7iI,QAAQ25H,IACpBushB,eAAgBA,EAChBxC,UAAWA,GACXoG,gBAAiBA,GACjBnG,WAAYA,GACZqI,iBA1YW,WACvB,EAAKzmiB,SAAS,CAACo+hB,YAAa,EAAKh6mB,MAAMg6mB,cA0Y3BI,8BAA+BphpB,KAAKohpB,8BACpCr6C,SAAUA,EACVkgD,0BAA2BA,SAK9BD,GAqCC,KApCA,eAACp1V,GAAD,CAAUkzV,eAAgBpE,GAAiBhlpB,MAAO8ipB,EAAUqD,OAAQzokB,UAAWF,EAAQ4vkB,oBAAvF,SACgD,IAA7CpwB,GAAqB30nB,IAAI,WAAWhI,MAAc,gBAAC88E,EAAA,EAAD,CACjDW,WAAW,EACXJ,UAAWF,EAAQgwkB,iBACnB5ukB,QAAS,EACTghC,MAAO,CAAC2W,WAAY,IAJ6B,UAMjD,eAACp5C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEgB,UAAW,IAA9D,SACgB,6BAAbyqf,GAA2C,eAAChvS,EAAA,EAAD,CAC1Cz8M,MAAO,CAAC4R,QAAS6zhB,GAAY,EAAI,IACjCx5hB,QAAS,eAAC0uJ,EAAA,EAAD,CACThwK,MAAM,UACN+1B,QAAS+khB,GACTrlpB,MAAOqlpB,GACPvliB,SAAU,WACR2riB,QAGFrmnB,MAAmB/U,EAAZg1nB,GAAc,qCAA0C,0CAGnE,eAAC,GAAD,CACE/0mB,QAAS0slB,GAAqB30nB,IAAI,WAClCqjpB,mBAAoBA,GACpBgC,mBAAoBhF,EACpBiB,mBAAoBA,GACpBnlhB,WAAY7iI,QAAQ25H,IACpBushB,eAAgBA,EAChBxC,UAAWA,GACXwD,aAAcA,EACdlD,8BAA+BrhpB,KAAKqhpB,8BACpC4F,0BAA2BA,UAOzB,6BAAblgD,GAA2Cg6C,IAC5C,eAAClokB,EAAA,EAAD,CAAMO,UAAWF,EAAQowkB,wBAAzB,SACE,eAAC,GAAD,CACE7phB,OAAQA,EACRzI,QAASA,GACTuthB,aAAcA,MAIlB,eAAC5thB,EAAA,EAAD,CAAS84f,OAAO,IAED,2BAAb1oB,EAEI,gBAACluhB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLV,QAASotkB,GAA8B,gBAAkB,WACzD9tkB,UAAWF,EAAQqwkB,gCALrB,UAQIrC,GACE,wBAAM9tkB,UAAWF,EAAQswkB,0BAAzB,UACE,eAAC,KAAD,CAAUvjjB,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,KAChD,eAAChI,EAAA,EAAD,UACG,wEAGH,KAEN,eAACmL,EAAA,EAAD,yBACEE,QAAS7kH,KAAKg8oB,aAAazkhB,IAC3Bjc,MAAOzyD,GAAgB,KAAO,CAAE24D,YAAa,KACzCujiB,IAHN,aAKGh5nB,EAAE,2BAKP,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,OACLV,QAAQ,WACRV,UAAWF,EAAQqwkB,gCALrB,UAOE,eAAC5kiB,EAAA,EAAD,yBACEE,QAAS7kH,KAAKg8oB,aAAazkhB,IAC3Bjc,MAAOzyD,GAAgB,KAAO,CAAE24D,YAAa,KACzCujiB,IAHN,aAKGh5nB,EAAE,wBAGHghC,GAAem6lB,GAyBX,eAACj9hB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,0CAAlB,SACE,eAAC8sD,EAAA,EAAD,UACE,gBAAC8rC,EAAA,EAAD,yBACIvrC,UAAWF,EAAQuwkB,gBACnB5kiB,QAAS,SAACz8G,GACR,EAAKg7oB,mCAEP1piB,QAAQ,WACRzT,MAAM,WACFg+iB,GAPR,cASGE,GAAqCK,EAAyB,eAAC5iV,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQwwkB,wBAA4B,KAC1J39nB,EAAE,2CApCX,gBAAC44F,EAAA,EAAD,yBACErJ,MAAO,CAAE4M,WAAY,GAAI1G,YAAa,IACtCqD,QAAS,SAACz8G,GACR,GAAIy0H,EACF,EAAKmmhB,mBAAmBhshB,QACnB,CACL,IAAMx5B,EAAS6M,GAAQtmG,IAAI,eAC3B4mC,EAAS,IAAIw0D,KAAoC,CAC/C3B,SACAupgB,SAAU,OACVz/R,UAAW,WACT,EAAK07U,mBAAmBhshB,UAKhCtd,QAAQ,WACRzT,MAAM,WACFg+iB,GAlBN,cAoBGE,GAAqCK,EAAyB,eAAC5iV,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQwwkB,wBAA4B,KAC1J39nB,EAAE,kCAoBH,uCACI88B,KAAkBD,IACpB,eAACqhE,EAAA,EAAD,CAASC,MAAOoP,GAA2B,GAAKvtG,EAAE,sDAAlD,SACE,gCACE,eAACgsS,EAAA,EAAD,CACIxwM,QACE,eAAC6U,EAAA,EAAD,CACIJ,QAASilhB,GACTzliB,SAAU,SAAC2rB,GAAD,OAAW,EAAKvkB,SAAS,CAAEq+hB,kBAAmB95gB,EAAMn6G,OAAOgvG,WACrE/1B,MAAM,YAGZiX,UAAWoc,GACXx4F,MAAO/U,EAAE,yCACTqtD,UAAWF,EAAQ+nkB,wBAK3B,eAACh3hB,EAAA,EAAD,CACIC,MACEg9hB,GACMn7nB,EAAE,0CACW,6BAAbg7kB,EACIo9C,EAAoCp4nB,EAAE,mCAAqCy7a,EAAgB5mb,MAAM,CAAC,UAAW,IAAMmL,EAAE,6CAA+CA,EAAEu5nB,IACzJ,oCAAbv+C,EACIo9C,EAAoCp4nB,EAAE,mCAAqCy7a,EAAgB5mb,MAAM,CAAC,UAAW,IAAM6joB,IAAiB,cAAgB14nB,EAAEu5nB,IACtJnB,EAAoCp4nB,EAAE,mCAAgG,GAR1J,SAWE,eAAC8sD,EAAA,EAAD,UAEiB,6BAAbkuhB,EAEQ,gBAACpif,EAAA,EAAD,yBACIvrC,UAAWF,EAAQuwkB,gBACnB5kiB,QAAS,SAACz8G,GACJ,EAAKg5oB,8BAA8Bt5mB,SAAW,EAAKu5mB,8BAA8Bv5mB,QACnF,EAAKs7mB,mCAEL,EAAKl5mB,MAAMS,SAAS,IAAI4jG,KAA8B,CAAEhlB,QAAS,GAAIgO,aAAakI,GAAQ,IAC1F,EAAK7c,SAAS,CAAEvkH,QAAQ,MAG5Bq7G,QAAQ,WACRzT,MAAM,WACFg+iB,GAZR,cAcGE,GAAqCK,EAAyB,eAAC5iV,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQwwkB,wBAA4B,KAC5H39nB,EAA9Bm7nB,GAAgC,kCAAuC,iDAG/D,oCAAbngD,EAEM,gBAACpif,EAAA,EAAD,yBACIvrC,UAAWF,EAAQuwkB,gBACnB5kiB,QAAS,SAACz8G,GACJ,EAAKg5oB,8BAA8Bt5mB,SAAW,EAAKu5mB,8BAA8Bv5mB,QACnF,EAAKs7mB,mCAEL,EAAKl5mB,MAAMS,SAAS,IAAI4jG,KAA8B,CAAEhlB,QAAS,GAAIgO,aAAakI,GAAQ,IAC1F,EAAK7c,SAAS,CAAEvkH,QAAQ,MAG5Bq7G,QAAQ,WACRzT,MAAM,WACFg+iB,GAZR,cAcGE,GAAqCK,EAAyB,eAAC5iV,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQwwkB,wBAA4B,KAC1JxC,GAA8Bn7nB,EAAE,mCAAqC04nB,IAAiB,kBAIzF,gBAAC9/hB,EAAA,EAAD,yBACIvrC,UAAWF,EAAQuwkB,gBACnB5kiB,QAAS,SAACz8G,GACJ8+oB,GACF,EAAK9D,kCACIpohB,KAASvgG,QAAKw+mB,kBAEvBtumB,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAI0onB,KACJz/mB,MAAO,CACL8sF,WACAiqhB,qBACA+B,mBAAoB,EAAKA,mBACzBE,uCAAwC,EAAKA,uCAC7C4C,yBACAC,6BAGJp7mB,EAAS,IAAI0J,KAA6B,CACxCpT,GAAI0onB,KACJh/iB,MAAM,MAGJs2iB,IACF,EAAKpohB,8BAA8B7B,IACnC,EAAKkshB,uCAAuClshB,GAASmB,IAErD,EAAK6qhB,mBAAmBhshB,KAI9Btd,QAAQ,WACRzT,MAAM,WACFg+iB,GAjCR,cAmCGE,GAAqCK,EAAyB,eAAC5iV,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQwwkB,wBAA4B,KAC5H39nB,EAA9Bm7nB,GAAgC,kCAAuC,kCAM9E,6BAAbngD,GAA4E,WAAjCk/C,GAAqB,SACjE,gBAACptkB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMN,UAAWF,EAAQ6pM,eAA1D,UACE,eAAC,KAAD,CAAoB3pM,UAAWF,EAAQonL,UACvC,eAAC9mJ,EAAA,EAAD,CAAYpgC,UAAWF,EAAQonL,QAA/B,SAAyCv0O,EAAE,2CAxnB1DwrG,Q,GAv4BW9yF,aA+oDlB+qF,IARSv6C,sBACb00C,eACA1uC,aAhzDa,SAACC,GAAD,YAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAO,QAETmskB,QAAS,CACPrrkB,UAAW,SACX4sO,WAAY,EACZ7hM,SAAsC,IAA5BjsC,EAAM82C,WAAW7K,UAE7BvmF,aAAc,CACZqlE,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BymnB,gBAAiB,CACfxtkB,OAAO,GAAD,OAAuB,EAAlBL,EAAMZ,UAAX,cAAgD,EAAlBY,EAAMZ,UAApC,OAERmkkB,eAAgB,CACdlihB,WAAY,OACZxH,cAAe,aACf9uB,MAAO,qBACPyzB,WAAW,GAAD,OAAuB,KAAlBx+C,EAAMZ,UAAX,MACVgB,MAAO,OAET4qT,YAAa,CACX5qT,MAAO,QAET6mjB,aAAc,CACZ7lhB,UAAWphC,EAAMZ,UACjB+4C,aAAcn4C,EAAMZ,WAEtBsvkB,aAAc,CACZ33hB,WAAY,EACZC,cAAe,EACfg1O,UAAW,YAEb2iT,kBAAmB,CACjB5jjB,MAAO,WAETsjjB,gCAAiC,CAC/BhukB,OAAO,GAAD,OAAuB,IAAlBL,EAAMZ,UAAX,SAERkvkB,0BAA2B,CACzBpukB,QAAS,OACTnC,WAAY,SACZivC,WAAYhtC,EAAMZ,QAAQ,IAE5B04C,0BAA2B,CACzBl3C,QAAS,EACTg2C,SAAU,UAEZo2hB,cAAe,CACb1miB,YAAY,GAAD,OAAKtmC,EAAMZ,QAAQ,KAAnB,MACX6sC,SAAU,SACVlhB,MAAO,sBAETg7iB,kBAAmB,CACjB/4hB,WAAY,IAEduhiB,gBAAiB,CACfjoiB,YAAY,GAAD,OAAuB,EAAlBtmC,EAAMZ,UAAX,OAEbovkB,sBAAuB,CACrBloiB,YAAatmC,EAAMZ,WAErBy/C,WAAY,CACV9zB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/B0mnB,kBAAgB,GACdltkB,QAAQ,KAAD,OAAOZ,EAAMZ,QAAQ,GAArB,cAA6BY,EAAMZ,QAAQ,GAA3C,cAAmDY,EAAMZ,QAAQ,GAAjE,MACPqgY,YAAa,EACbmvM,UAAW,OAHG,cAIb5ukB,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9B9+I,YAAa,EACb7+X,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,MACP4tC,WAAY,QAPA,cASbhtC,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9B9+I,YAAa,EACb7+X,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,MACP4tC,WAAY,QAZA,GAehBghiB,iBAAkB,CAChBptkB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC4tC,WAAY,EACZ1G,YAAa,EACblmC,MAAO,QAET0qkB,sBAAuB,CAErB3giB,OAAQ,sBAEVvkF,MAAO,CACLw6C,MAAO,QAETklC,OAAQ,CACNllC,MAAO,OAETyukB,cAAe,CACbzukB,MAAOJ,EAAMZ,QAAQ,IACrBm8C,WAAY,SACZpM,SAAU,SACVsL,aAAc,WACdZ,cAAe,cAEjBU,WAAY,CACVvN,WAAYhtC,EAAMZ,WAEpBokkB,mBAAoB,CAClBrikB,SAAU,EACVf,MAAO,MACPE,SAAU,QACVy2C,WAAY/2C,EAAMZ,QAAQ,GAC1B43C,cAAeh3C,EAAMZ,QAAQ,IAE/B0vkB,UAAW,CACT1ukB,MAAO,OACP+3C,aAAcn4C,EAAMZ,WAEtByoM,eAAgB,CACdrnM,eAAgB,MAChB4gC,UAAWphC,EAAMZ,QAAQ,GACzBknC,YAAatmC,EAAMZ,QAAQ,IAE7BgmL,QAAS,CACPp4I,WAAYhtC,EAAMZ,UAClB2rB,MAAO,OAET+9N,SAAU,CACR78M,SAAU,OACVlhB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1BjI,SAAU,WACVqX,IAAKp5C,EAAMZ,QAAQ,IACnB//D,KAAM2gE,EAAMZ,QAAQ,MAEtBg1L,QAAS,CACPh0L,MAAO,KAET25E,KAAM,CACJ5qC,SAAU,sBAEZy+hB,oBAAqB,CACnB9jiB,gBAAiB,WAEnBw4U,YAAa,CACXx4U,gBAAiB,UACjByc,WAAY,sBACZtF,UAAW,sBACXqF,YAAa,uBAEf8nhB,wBAAyB,CACvBtkiB,gBAAiB,UACjBlpC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAE,IAEjCkukB,6BAA8B,CAC5BxjiB,gBAAiB,UACjBlpC,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BmukB,wBAAyB,CACvBxijB,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,QAAQ,QAkpD7B60C,KACAhwE,YAAgB,gBAChB0/D,mBA3FsB,SAAC73E,EAAYkD,GACnC,IAQI2yF,EACAiZ,EATErW,EAASv1F,EAAMu1F,OACflI,EAAWkI,EAAO17H,IAAI,MACtBkmpB,EAA4C,6BAAnB//mB,EAAM68jB,UAA8D,oCAAnB78jB,EAAM68jB,UAAqE,2BAAnB78jB,EAAM68jB,SAC1Ij+X,YAAyC,CAAErpG,WAC3C6oG,YAA2C,CAAE/wG,aAMjD,OAAQrtF,EAAM68jB,UACZ,KAAK1skB,aAAU07G,WACblZ,EAAkBnB,cAA0B10F,GAC5C8uG,EAAeH,cACf,MAEF,KAAKt7G,aAAUshG,eACbkB,EAAkBjB,cAA4B50F,GAC9C8uG,EAAeF,cACf,MAEF,QACE/Y,EAAkBhB,cAAoB70F,GACtC8uG,EAAeJ,cAInB,IACM3oF,GADyBnM,cACVspmB,CAAuBljnB,GAC5C,OAAO,aACL61F,kBACA9vE,eACGja,YAAyB,CAC1Bu3D,QAASD,eACToiI,qBAAsBh3F,eACtB+2F,gBAAiBt/K,eACjBhD,OAAQD,eACRu5lB,eAAgB/5a,cAChBg+N,gBAAiByiN,EACjB5H,0BAA2Bvgd,cAC3Boid,4BAA6Bt9a,cAC7B8uJ,eAAgBn4K,aAAsB,aACtCplF,iBAAkBupE,cAClByid,kCAAmCn4a,cACnCo4a,gCAAiC16a,cACjC26a,yBAA0Bt6a,cAC1Bu6a,gCAAiCr6a,cACjC65a,qCAAsCj6a,cACtCg7a,6CAA8C/6a,cAC9CpkL,OAAQF,eACR6D,KAAMysF,EACN0ugB,uBAAwBlkd,cACxBokd,eAAgB5mc,aAA2Bw9b,IAC3CgH,wBAAyB77a,cACzBmD,iBAAkBD,cAClBK,sBAAuBP,cACvBzuG,KAAMC,cACN53E,KAAMF,eACNyF,iBAAkBN,gBAClBq8lB,kBAAmBvkZ,eACnBwkZ,2BAA4B76lB,eAC5BhD,MAAOD,gBA7BNhU,CA8BA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACA6/Z,eAAgB,WACd7/Z,EAAS,IAAIiqG,MAEfy9f,4BAA6B,SAAC70iB,EAAQ45B,EAAUO,EAA0BE,EAAUujhB,EAAsBx2mB,GACxG+F,EAAS,IAAIguD,KAAkC,CAC7C6E,SACA45B,WACAO,2BACAE,WACAujhB,uBACAx2mB,mBAMOqwC,CAMbwrkB,IAEgBrxhB,cAAW,SAACl0C,GAAD,OAC3B2zL,aAAa,CACXt5G,IAAK,CACHj5E,SAAU,OACVw6L,UAAW,QAEbl9L,KAAM,CACJqjC,SAAU,WACV3hC,MAAO,OACPi2C,OAAQ,OACRsJ,OAAQ,YACR6G,YAAa,UACb,UAAW,CACTrc,OAAQ,WAEVlqC,UAAW,aACXW,QAAS,OAEXqukB,aAAc,CACZltiB,SAAU,WACV3hC,MAAO,OACPi2C,OAAQ,OACRsJ,OAAQ,oBACR1/C,UAAW,aACXW,QAAS,OAEXsukB,WAAY,CACVntiB,SAAU,WACVsX,QAAS,EACT/5G,OAAQ,EACRwmH,OAAQ,EACR1lD,MAAO,kBACPi2C,OAAQ,kBACRvM,gBAAiB,qBACjB/e,MAAO,SAETokjB,aAAc,CACZptiB,SAAU,WACVqX,KAAM,EACN/5G,MAAO,EACPymH,OAAQ,EACR1lD,MAAO,kBACPi2C,OAAQ,kBACRsJ,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ7iF,MAC3C64C,UAAW,cAEbmvkB,uBAAwB,CACtBzvhB,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQ4G,KAAK3O,WAE1CqtiB,gBAAiB,CACfjvkB,MAAO,OACPi2C,OAAQ,MACRtU,SAAU,WACVqX,IAAK,OACL/5G,KAAM,QACNymH,OAAQ,EACR7E,UAAW,oBACXE,UAAW,iBAEbmuhB,oBAAqB,CACnBlukB,SAAU,QACV+tC,SAAU,UAEZogiB,mBAAoB,CAClBxtiB,SAAU,WACV3hC,MAAO,QACPi2C,OAAQ,QACRh2C,OAAQ,QAEVmvkB,WAAY,CACVztiB,SAAU,WACVqX,KAAM,GACN/5G,MAAO,GACP4sG,SAAU,IAAKlhB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE3CyliB,WAAY,CACVr2hB,KAAM,EACN/5G,MAAO,EACP4sG,SAAU,GACVlK,SAAU,YAEZ2tiB,eAAgB,CACdruhB,WAAY,QAEdsuhB,4BAA6B,CAC3Bx3hB,aAAcn4C,EAAMZ,QAAQ,IAE9BwwkB,yBAA0B,CACxBz3hB,aAAcn4C,EAAMZ,WAEtBywkB,2BAA4B,CAC1BrihB,YAAaxtD,EAAMZ,QAAQ,YAM3B0wkB,GAAsB,SAAC,GAAqC,IAApCvrhB,EAAmC,EAAnCA,OAAQzI,EAA2B,EAA3BA,QAASuthB,EAAkB,EAAlBA,aACvCrrkB,EAAUs2C,KAETzjG,GADO2yG,eACF5gF,YAAe,gBAApB/xB,GACDk/nB,EAA8Bv5mB,sBAAY22L,eAI1CpvG,EAAYjC,EACQ,OAAtBA,EAAQjzH,IAAI,MAAiB,EAAIizH,EAAQjzH,IAAI,MAC7C,KACEmnpB,EAAU,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAA6BrqoB,MAAM,CAAC/R,OAAOoqH,GAAY,aAAc,UAAWsrhB,EAAc,IAC3G4G,EAAY,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAA6BrqoB,MAAM,CAAC/R,OAAOoqH,GAAY,eAAgB,UAAWsrhB,IACjG6G,EAAW,OAAGH,QAAH,IAAGA,OAAH,EAAGA,EAA6BrqoB,MAAM,CAAC/R,OAAOoqH,GAAY,cAAe,UAAWsrhB,IAE/F8G,EAAc,SAACC,EAAWhnpB,GAC9B,OAAKgnpB,EAGSA,EAAUvnpB,IAAI,UACP,SAARO,EACJ,SAEAgnpB,EAAUvnpB,IAAIO,IAAQ,IANtB,KASLinpB,EAAoB,SAACjnpB,GAAD,OAAS0yH,EAAUq0hB,EAAYr0hB,EAAQp2G,MAAM,CAAC,QAAS,UAAW2joB,IAAiBjgpB,GAAO,KAEpH,OACE,uCACE,eAACqyH,EAAA,EAAD,CAAS84f,OAAO,EAAMr2iB,UAAWF,EAAQ2xkB,8BACzC,gBAAChykB,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACggC,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,KAAKtgC,UAAWF,EAAQ2xkB,4BAAhE,SAA8F9+nB,EAAE,8BAChG,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ2xkB,4BAA1C,UACE,eAAChykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAQtgC,UAAWF,EAAQ0xkB,eAAnE,SAAoF7+nB,EAAE,8BAE7E,OAAVm/nB,QAAU,IAAVA,OAAA,EAAAA,EAAYnvpB,MAAO,GACpB,gBAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYH,EAAY,eAEnH,eAACrykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYH,EAAY,eAEnH,eAACrykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYH,EAAY,qBAKvH,gBAACrykB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ2xkB,4BAA1C,UACE,gBAAChykB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,UACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAQtgC,UAAWF,EAAQ0xkB,eAAnE,SAAoF7+nB,EAAE,iCACtF,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sCAAlB,SACE,eAAC,KAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAC4M,WAAY,WAGtD,OAAXkjiB,QAAW,IAAXA,OAAA,EAAAA,EAAarvpB,MAAO,GACnB,uCACE,gBAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAACgB,UAAW,GAAI+W,aAAc,IAA5D,UACE,eAACx6C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,2BAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,gCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQ0xkB,eAAnD,SAAoE7+nB,EAAE,4BAGzEq/nB,EAAYpipB,KAAI,SAACwipB,EAAYC,GAC5B,IAAMpf,EAAUmf,EAAWznpB,IAAI,gBACzB2npB,EAA2BjshB,EAAO7+G,MAAM,CAAC,eAAgB,UAAW,gBAAgBe,MAAK,SAAA2+H,GAAK,OAAIA,EAAMv8I,IAAI,QAAUsooB,KACtHlhoB,GAAiC,OAAxBugpB,QAAwB,IAAxBA,OAAA,EAAAA,EAA0B3npB,IAAI,YAAakU,iBAC1D,OACE,eAAC4gE,EAAA,EAAD,CAAMW,WAAW,EAAoBJ,UAAWF,EAAQ4xkB,yBAAxD,SACG3/oB,EAAOpP,KAAO,GAAKoP,EAAOnC,KAAI,SAACtN,EAAOsvc,GACrC,IAAMvqV,EAAY/kH,EAAMqjD,MAAM,KAAK,GAC7Bu2Y,EAAgBt+T,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,SACxDkgB,EAAc3J,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,gBACtD8wG,EAAWv6F,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,aACzD,OACE,gBAAC5nC,EAAA,EAAD,CAAMW,WAAW,EAAsBJ,UAAWF,EAAQ4xkB,yBAA1D,UACE,eAACjykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,UAAa87U,MAEf,gBAACz8W,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACG22I,EACG,eAAC,KAAD,CAActrH,MAAM,YACpB,eAAC,KAAD,CAAwBA,MAAM,YAElC,eAACuT,EAAA,EAAD,CAAY8B,MAAO,CAAC4M,WAAY,GAAhC,SAAqCyY,OAEvB,IAAfqqU,GACD,gBAACnyX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYG,EAAY,eAEnH,eAAC3ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYG,EAAY,eAEnH,eAAC3ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYG,EAAY,oBApB3F/qiB,OAPN4rhB,YAwCtC,gBAACxzjB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ2xkB,4BAA1C,UACE,eAAChykB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,QAAQtgC,UAAWF,EAAQ0xkB,eAAnE,SAAoF7+nB,EAAE,sCAE3E,OAAZo/nB,QAAY,IAAZA,OAAA,EAAAA,EAAcpvpB,MAAO,GACtB,uCACE,gBAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAACgB,UAAW,GAAI+W,aAAc,IAA5D,UACE,eAACx6C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,2BAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SAAiCl6E,EAAE,gCAErC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQ0xkB,eAAnD,SAAoE7+nB,EAAE,4BAGzEo/nB,EAAanipB,KAAI,SAAC2ipB,EAAiBC,GACbD,EAAgB5npB,IAAI,gBAAzC,IACM08G,EAAYkriB,EAAgB5npB,IAAI,aAChCuxb,EAAgBt+T,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,SACxDkgB,EAAc3J,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,gBACtD8wG,EAAWv6F,EAAQp2G,MAAM,CAAC,aAAc6/F,EAAW,aACzD,OACE,gBAAC5nC,EAAA,EAAD,CAAMW,WAAW,EAAsBJ,UAAWF,EAAQ4xkB,yBAA1D,UACE,eAACjykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,UAAa87U,MAEf,gBAACz8W,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACG22I,EACG,eAAC,KAAD,CAActrH,MAAM,YACpB,eAAC,KAAD,CAAwBA,MAAM,YAElC,eAACuT,EAAA,EAAD,CAAY8B,MAAO,CAAC4M,WAAY,GAAhC,SAAqCyY,OAEvC,gBAAC9nD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYM,EAAiB,eAExH,eAAC9ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYM,EAAiB,eAExH,eAAC9ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDM,EAAYM,EAAiB,oBAnBhGlriB,eA6BtC,eAACkW,EAAA,EAAD,CAAS84f,OAAO,EAAMr2iB,UAAWF,EAAQ2xkB,8BACzC,gBAAChykB,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,IACtB,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYvT,MAAM,cAAc7sB,UAAWF,EAAQ0xkB,eAAnD,SAAoE7+nB,EAAE,8BAEvEirG,GACD,gBAACn+C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAvC,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDQ,EAAkB,eAE7G,eAAC1ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDQ,EAAkB,eAE7G,eAAC1ykB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC4+B,EAAA,EAAD,WAAaztF,EAAE,oBAAoB,uBAAMqtD,UAAWF,EAAQ6xkB,2BAAzB,SAAsDQ,EAAkB,yBAUjHM,GAAa,SAAC,GAAsM,IAA3L7iiB,EAA0L,EAAnMh9E,QAAmBo7mB,EAAgL,EAAhLA,mBAAoBgC,EAA4J,EAA5JA,mBAAoB/D,EAAwI,EAAxIA,mBAAoBnlhB,EAAoH,EAApHA,WAA4BqkhB,GAAwF,EAAxGhB,eAAwG,EAAxFgB,cAAcxD,EAA0E,EAA1EA,UAAWM,EAA+D,EAA/DA,8BAA+B4F,EAAgC,EAAhCA,0BACjL/tkB,EAAUs2C,KAChB,EAAwB/qF,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KACMz9G,EAAYk2G,EAASrmH,WAAW4e,SAChCyqB,EAAUl5B,EAAU9J,KAAI,uDACvB+iB,EAAK+xB,YAAe,gBAApB/xB,EACDmvD,EAAQwjD,eAEd,EAAkDj6F,WAAe,MAAjE,mBAAOqnnB,EAAP,KAA0BC,EAA1B,KACA,EAA0CtnnB,WAAe,MAAzD,mBAAOunnB,EAAP,KAAuBC,EAAvB,KAEMC,EAAe,SAACvyiB,EAAY3+D,GAAb,OAAsB,SAAC5yC,GAC1CmoH,GAAQ,GACRw7hB,EAAqBpyiB,GACrBsyiB,EAAgBjxmB,KAGZmxmB,EAAiB,YAErBtniB,EAD6BiniB,EAArBjniB,SACA,MADqBiniB,EAAZ9vhB,SAEjBzL,GAAQ,IAGV,OAAOvkF,EAAQ5/B,KAAR,MAAA4/B,EAAO,YAASvqC,MAAMuN,KAAK,CAAEnN,OAAuC,EAA9B9E,KAAKqjB,KAAK4rB,EAAQjwC,KAAO,GAAUiwC,EAAQjwC,SAAS4P,QAAO,SAACygpB,EAAOtknB,EAASy6P,GACvH,IAAMpmS,EAAQY,KAAKwjB,MAAMgiR,EAAe,GAExC,OADA6pX,EAAMjwpB,GAAN,sBAAoBiwpB,EAAMjwpB,IAAU,IAApC,CAAyC2rC,IAClCsknB,IACN,IAAIpjpB,KAAI,SAACgzJ,EAAK2oK,GACf,OAAO3oK,EAAIhzJ,KAAI,SAACw3G,EAAQx9G,GAAO,IAAD,QACtBshZ,EAAkB,OAAG9jS,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,aACjCyK,EAAI,OAAGgyG,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,QACnB08G,GAAkB,OAAND,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,SAAU,GAClC6jlB,EAAoB,OAAGpne,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,eACnCsopB,EAAc,OAAG7riB,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,WAC7BuopB,GACHpshB,IAAD,OACGmlhB,QADH,IACGA,GADH,UACGA,EAAoBzkoB,MAAM,CAAC6/F,EAAW,kBADzC,aACG,EAAkD1kH,SAClD,UAACqtpB,EAAmBrlpB,IAAI08G,UAAxB,aAAC,EAAmC1kH,MACnCwwpB,EAA6B,UAAGvgnB,EAAQrqB,MAAK,SAAAkoG,GAAY,IAAD,EACpDm5E,EAAWn5E,EAAQ9lH,IAAI,WACvByopB,EAAS3iiB,EAAQ9lH,IAAI,OAC3B,OAAO8lH,EAAQ9lH,IAAI,cAAgBi/L,KAAY,UAAComd,EAAmBrlpB,IAAIyopB,UAAxB,aAAC,EAAgCzwpB,gBAHjD,aAAG,EAIhCgI,IAAI,OACJ0opB,EAA+BJ,KAAkB,UAACjD,EAAmBrlpB,IAAI08G,UAAxB,aAAC,EAAmC1kH,MAC3F,GAAIuoZ,EACF,OACA,uBAAahpS,MAAO,CAAChgC,MAAO,OAAQghC,UAAW,QAA/C,UACE,gBAACzjC,EAAA,EAAD,CACEW,WAAW,EACXT,aAAa,SACbE,WAAW,SACXuB,KAAK,SAJP,UAMIyskB,GAA6Br/D,EAC7B,eAAC39d,EAAA,EAAD,CAASC,MAAO09d,EAAhB,SACE,eAAC,KAAD,CAAiBzge,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAEkG,YAAa,OAEvE,KACJ,eAAChI,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACNqV,MAAO,CACLhgC,MAAO,cACPihD,WAAY+vhB,EAAiB,OAAS,UACtCpmjB,eAAgBomjB,EAAiB,YAAc,OAC/CnliB,SAAU,WAPd,SAUG34G,IAGDi+oB,GACE,eAACjziB,EAAA,EAAD,CACEE,QAAQ,UACR4B,MAAO,CACLrV,MAAO,QACPiiB,WAAY,GACZlD,gBAAiB,UACjByC,aAAc,GACd3rC,QAAS,YAEXrgF,IAAK8wpB,IAAkC9riB,EAAY4giB,EAAgC,KATrF,SAWGt1nB,EAAE,6BAKX,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMU,QAAS,EAAGghC,MAAO,CAAE//B,OAAQ,EAAG2sC,YAAa,IAAhF,SAEI1H,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOmc,GAC/B,IAAM8hG,EAAaytiB,EAAmB,CAAE11b,UAAWlxG,EAAQl8G,IAAKwO,EAAU8N,MAAM,CAAa,EAAX+jT,EAAgB3hU,EAAG,IAAKtH,UAClGsgI,EAAsBriB,EAAtBqiB,QAAS9e,EAAavD,EAAbuD,SACXwviB,EAAuD,iBAAxBhxpB,EAAMqI,IAAI,UACzCyjlB,EAAiB9rlB,EAAMqI,IAAI,UAC3B48H,EAAsBjlI,EAAMqI,IAAI,eAEhCy4C,EAAQ,SAAA08D,GACZ,YAAgBp9G,IAARo9G,GAA6B,OAARA,GAAiBn8G,KAAKo/E,MAAY,IAAN+8B,GAAa,KAAKkhJ,QAAQ,GAAK,IAIpF7hP,EADQ7c,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,YAAa,EACrDx4nB,EAAE,mBAAqBywB,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAC3FjpV,EAAO9+Q,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAC5D/oV,EAAOh/Q,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAE5DoI,EAAgB,SAAC,GAAD,IAAE3xmB,EAAF,EAAEA,KAAS12B,EAAX,yBACpB,gDAASA,GAAT,aACG02B,EAAKhyC,KAAI,SAAC4wE,EAAMgzkB,GAAP,OAAqB,eAACpziB,EAAA,EAAD,CAEGlgC,UAAU,MACVogC,QAAQ,UACR6K,QAAQ,EACRjJ,MAAOoxiB,EAAsB,CAACzmjB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,gBAAkB,KALvG,SAMG/pU,GALKgzkB,UAQ3C,OACE,gBAAC/zkB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,EACJlB,UAAU,SACVT,WAAW,SALb,UAQE,eAACgxC,EAAA,EAAD,CAASC,MACP,gBAACrxC,EAAA,EAAD,CAAMa,UAAU,SAASF,WAAW,EAAMc,QAAS,EAAGR,QAAQ,SAASb,WAAW,SAAlF,UACG0nD,EAAc,eAAC9nD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAAkB,gCAAO+mD,MAA6B,KACnE6md,EAAqG,KAA5F,eAAC3ugB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAAkB,gCAAO7tD,EAAE,oDACrC2goB,EAAsB,eAAC7zkB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAAkB,gCAAO7tD,EAAE,6CAA0D,QAJhH,SAOE,uBAAKqtD,UAAW8jC,EAAWhkC,EAAQixkB,aAAejxkB,EAAQU,KAAMirC,QAAS3H,EAAW,KAAOgviB,EAAavyiB,EAAYj+G,GAApH,UAEI8rlB,EACA,eAAC,IAAD,CACApugB,UAAWF,EAAQq8E,IACnB/uC,IAAG,UAAKghe,EAAL,WAAsB,KAAtB,IAA8B,MACjClsgB,MAAU,KAAL,aACLurC,YAAa,OACbC,aAAa,EACbvrC,OAAO,OACP+/B,MAAO,CAAC4R,QAAShQ,GAAYwviB,EAAsB,GAAM,KAGzD,eAAC,KAAD,CACAtzkB,UAAWF,EAAQyxkB,WACnBrviB,MAAO,CAACrV,MAAOiX,GAAYwviB,EAAsBxxkB,EAAM+pC,QAAQC,KAAK,KAAOhqC,EAAM+pC,QAAQC,KAAK,QAG9FwniB,EAAsE,KAAhD,eAAC,KAAD,CAAYtzkB,UAAWF,EAAQkxkB,aACtDpuhB,EAAU,eAAC,KAAD,CAAW5iD,UAAWm0C,KAAWr0C,EAAQmxkB,aAAT,eAAyBnxkB,EAAQoxkB,uBAAyBoC,IAAuBzmjB,MAAOymjB,EAAsB,WAAa,YAAgB,KACrLA,EAAsB,eAAC93V,EAAA,EAAD,CAAKx7O,UAAWF,EAAQqxkB,kBAAsB,UAGzE,eAAC/wiB,EAAA,EAAD,CACE8B,MAAO,CACLrV,MAAOiX,GAAYwviB,EAAsBxxkB,EAAM+pC,QAAQC,KAAK,KAAO,KACnEy+R,mBAAoB+oQ,EAAsB,eAAiB,KAC3DpwiB,UAAW,EACX2Q,UAAW,UALf,SAOE0T,IAEAoghB,GAAa,eAAClokB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,SAA7C,SACX,uBAAKwhC,MAAO,CAAClgC,QAAS,QAAtB,UACE,eAACuxkB,EAAD,CAAe3xmB,KAAM,CAACziC,GAAQ,OAAQ+iT,GAAQ,OAAQE,GAAQ,QAASlgN,MAAO,CAACkG,YAAatmC,EAAMZ,aAClG,eAACqykB,EAAD,CAAe3xmB,KAAM,CAACziC,EAAM+iT,EAAME,GAAOlgN,MAAO,CAAC2R,UAAW,gBA5C7Dp1G,QAqDf,eAACm+S,EAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAAS,kBAAMpU,GAAQ,IAA3C,SACE,uBAAKn3C,UAAWF,EAAQsxkB,oBAAxB,WAEgB,OAAdwB,QAAc,IAAdA,OAAA,EAAAA,EAAgBjopB,IAAI,WAClB,eAAC,IAAD,CACEyiH,IAAG,iBAAKwliB,QAAL,IAAKA,OAAL,EAAKA,EAAgBjopB,IAAI,WAC5Bu3E,MAAU,MAAL,aACLurC,YAAa,OACbC,aAAa,EACbvrC,OAAO,SAGT,sBAAKnC,UAAWF,EAAQuxkB,mBAAxB,SACE,eAAC,KAAD,CAAarxkB,UAAWF,EAAQwxkB,eAGtC,eAACz0V,EAAA,EAAD,UACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,KAApB,gBAA0BsyiB,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAgBjopB,IAAI,mBAGhD,gBAACqyT,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQE,QAAS,kBAAM0L,GAAQ,IAAQtqB,MAAM,UAA7C,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CAAQE,QAASsniB,EAAgBlmjB,MAAM,UAAvC,UACoB,OAAjB6ljB,QAAiB,IAAjBA,OAAA,EAAAA,EAAmB9vhB,SAAUjwG,EAAE,wBAA0BA,EAAE,kCA5J1D/oB,UAwKZ6ppB,GAAe,SAAC,GAA2S,IAAhS7jiB,EAA+R,EAAxSh9E,QAAmBo7mB,EAAqR,EAArRA,mBAAqR,IAAjQ+B,wBAAiQ,SAAvO5E,EAAuO,EAAvOA,aAAc9khB,EAAyN,EAAzNA,OAAQlI,EAAiN,EAAjNA,SAAU6xhB,EAAuM,EAAvMA,mBAAoB/D,EAAmL,EAAnLA,mBAAoBnlhB,EAA+J,EAA/JA,WAA4B6ghB,GAAmI,EAAnJwC,eAAmJ,EAAnIxC,WAAWoG,EAAwH,EAAxHA,gBAAiBnG,EAAuG,EAAvGA,WAAYqI,EAA2F,EAA3FA,iBAAkBjI,EAAyE,EAAzEA,8BAA+Br6C,EAA0C,EAA1CA,SAAUkgD,EAAgC,EAAhCA,0BACxRn0oB,EAAYk2G,EAASrmH,WAAW4e,SAAShW,QAAO,SAACuhpB,GAAD,OAAeA,EAAS,GAAG/opB,IAAI,gBAC/EioC,EAAUl5B,EAAU9J,KAAI,uDAC9B,EAA8By7B,WAAoB,IAAlD,mBAAOsonB,EAAP,KAAgBC,EAAhB,KAEQjhoB,EAAM+xB,YAAe,gBAArB/xB,EACFmvD,EAAQwjD,eACR/zF,EAAW2F,wBACX8wb,EAAc1vb,sBAAY8sK,gBAC1Byuc,EAA8Bv7mB,sBAAY80L,eAC1C0mb,EAAmC,6BAAbnmD,EACtBomD,EAAgBD,EAAsB,EAAI,EAiBhD,GAA0BzonB,WAAe,GAAzC,qBAAO62C,GAAP,MAAc8xkB,GAAd,MAEMponB,GAAW4rJ,qBAAS,WAAO,IAAD,EAClB,UAAG5qJ,SAASghhB,eAAe,4BAA3B,OAAG,EAA8C/sR,wBAAwB3+M,MACrF0xkB,EAAW,IACXI,IAAS,SAAAv1oB,GAAC,OAAIA,EAAI,OACjB,KAEH4sB,mBAAsB,WAEpB,OADA/V,OAAOs6E,iBAAiB,SAAUhkE,IAC3B,kBAAMtW,OAAOu6E,oBAAoB,SAAUjkE,OACjD,IAEHP,aAAgB,WACduonB,EA7B0BhhnB,EAAQ5/B,KAAR,MAAA4/B,EAAO,YAASvqC,MAAMuN,KAAK,CAAEnN,OAAS9E,KAAKqjB,KAAK4rB,EAAQjwC,KAAOoxpB,GAAiBA,EAAiBnhnB,EAAQjwC,SAAS4P,QAAO,SAACygpB,EAAOtknB,EAASy6P,GAAkB,IAAD,IAC/KpmS,EAAQY,KAAKwjB,MAAMgiR,EAAe4qX,GAClCE,EAAS9qX,EAAe4qX,EAExBr3oB,EAAQ,OAAGgyB,QAAH,IAAGA,GAAH,UAAGA,EAAS/jC,IAAI,iBAAhB,iBAAG,EAAwBnB,iBAA3B,aAAG,EAAmCoG,KAAI,SAACw3G,EAAQ8siB,GAAY,IAAD,MAEpEC,EAAW,UAAGvnnB,SAASghhB,eAAe,iBAAmB7qjB,EAAQ,IAAMkxpB,EAAjC,UAAgEC,EAAS,IAAM/1hB,UAA1G,aAAG,EAAkH0iK,wBAAwB1oK,OACxJi8hB,EAAiB,UAAGxnnB,SAASghhB,eAAe,iBAAmB7qjB,EAAQ,IAAMkxpB,EAAjC,gBAAsEC,EAAS,IAAM/1hB,UAAhH,aAAG,EAAwH0iK,wBAAwB1oK,OACpKk8hB,EAAkB1M,EAAS,UAAG/6mB,SAASghhB,eAAe,iBAAmB7qjB,EAAQ,IAAMkxpB,EAAjC,cAAoEC,EAAS,IAAM/1hB,UAA9G,aAAG,EAAsH0iK,wBAAwB1oK,OAAS,EAE3L,OAAOx0H,KAAKC,IAAIuwpB,EAAaC,EAAmBC,MAGlD,OADArB,EAAMjwpB,GAAN,sBAAoBiwpB,EAAMjwpB,IAAU,IAApC,CAAyC2Z,IAClCs2oB,IACN,OAgBA,CAACpjiB,EAAU+3hB,EAAWC,EAAY1lkB,GAAO8rkB,EAAoB+B,IAEhE1knB,mBAAsB,WAAO,IAAD,EACd,UAAGuB,SAASghhB,eAAe,4BAA3B,OAAG,EAA8C/sR,wBAAwB3+M,MACrF0xkB,EAAW,IACXI,IAAS,SAAAv1oB,GAAC,OAAIA,EAAI,OACjB,CAACupd,IAEJ,IAKMssL,GAAwB,CAC5Br6hB,aAAc65hB,EAAsBhykB,EAAMZ,QAAQ,KAAOY,EAAMZ,QAAQ,IAGzE,OAAO,gBAACzB,EAAA,EAAD,CAAMW,WAAW,EAAMv4C,GAAG,oBAAoBq6E,MAAO,CAAC4W,cAAeh3C,EAAMZ,QAAQ,IAAnF,UACL,gBAACzB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASqiC,MAAO,CAAC+X,aAAcn4C,EAAMZ,QAAQ,GAAIgiC,UAAWphC,EAAMZ,QAAQ,IAApI,UACE,eAACk/B,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,yBAEHo9nB,GAA6C,WAAzB1phB,EAAO17H,IAAI,WAAuC,2BAAbgjmB,GACvD,eAAC98e,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sCAAlB,SACE,eAAC44F,EAAA,EAAD,CACEE,QAnBwB,WAClCl6E,EAAS,IAAIihG,MAAyC,IACtDjhG,EAAS,IAAIqhG,IAAgC,CAAEvM,SAAQkuhB,sBAAoC,oCAAb5mD,MAkBpE9ggB,MAAM,UACNyT,QAAQ,WACR39G,KAAK,QACLu/G,MAAO,CAAE6L,SAAU,OAAQ5rC,OAAO,YAAD,OAAcL,EAAMZ,QAAQ,GAA5B,OACjC8pM,UAAW6oY,EAA8B,eAACrrV,EAAA,EAAD,CAAkB7lU,KAAK,QAAU,eAAC,KAAD,IAN5E,SAQGgwB,EAAE,mCAIX,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,QAAvE,UACG4xkB,GAAuB,eAACn1V,EAAA,EAAD,CACtBz8M,MAAO,CAAC4R,QAAS8zhB,EAAa,EAAI,IAClCz5hB,QAAS,eAAC0uJ,EAAA,EAAD,CACThwK,MAAM,UACN+1B,QAASglhB,EACTtlpB,MAAOslpB,EACPxliB,SAAU,WACRwxiB,EAAW,IACX3D,OAGFvonB,MAAoB/U,EAAbi1nB,EAAe,sCAA2C,0CAEjEmI,GAAoB,eAACpxV,EAAA,EAAD,CACpBz8M,MAAO,CAAC4R,QAAS6zhB,EAAY,EAAI,IACjCx5hB,QAAS,eAAC0uJ,EAAA,EAAD,CACThwK,MAAM,UACN+1B,QAAS+khB,EACTrlpB,MAAOqlpB,EACPvliB,SAAU,WACRwxiB,EAAW,IACX7F,OAGFrmnB,MAAmB/U,EAAZg1nB,EAAc,qCAA0C,8CAIrE,eAACzoN,EAAA,EAAD,UACCtsZ,EAAQ5/B,KAAR,MAAA4/B,EAAO,YAASvqC,MAAMuN,KAAK,CAAEnN,OAAS9E,KAAKqjB,KAAK4rB,EAAQjwC,KAAOoxpB,GAAiBA,EAAiBnhnB,EAAQjwC,SAAS4P,QAAO,SAACygpB,EAAOtknB,EAASy6P,GACzI,IAAMpmS,EAAQY,KAAKwjB,MAAMgiR,EAAe4qX,GAExC,OADAf,EAAMjwpB,GAAN,sBAAoBiwpB,EAAMjwpB,IAAU,IAApC,CAAyC2rC,IAClCsknB,IACN,IAAIpjpB,KAAI,SAACgzJ,EAAK2oK,GAEf,OAAO,gBAAC,WAAD,WACLA,EAAW,eAACg0H,EAAA,EAAD,CAAWr9U,MAAO,CAAEiW,OAAQ,MAAW,KACpD,eAACgnU,EAAA,EAAD,UACE,eAACE,EAAA,EAAD,CAAUn9U,MAAO,CAAE8sP,cAAe,OAAlC,SACGpsM,EAAIhzJ,KAAI,SAACw3G,EAAQx9G,GAAO,IAAD,QACtB,YAAIw9G,QAAJ,IAAIA,OAAJ,EAAIA,EAAQz8G,IAAI,cAAhB,CAGA,IAAMyK,EAAI,OAAGgyG,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,QACnB08G,GAAkB,OAAND,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,SAAU,GAClC6jlB,EAAoB,OAAGpne,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,eACnCsopB,EAAc,OAAG7riB,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,WAC7BuopB,GACHpshB,IAAD,OACGmlhB,QADH,IACGA,GADH,UACGA,EAAoBzkoB,MAAM,CAAC6/F,EAAW,kBADzC,aACG,EAAkD1kH,SAClD,UAACqtpB,EAAmBrlpB,IAAI08G,UAAxB,aAAC,EAAmC1kH,MACnC6xpB,EAA6B,UAAG5hnB,EAAQrqB,MAAK,SAAAkoG,GAAY,IAAD,EAClDm5E,EAAWn5E,EAAQ9lH,IAAI,WACvByopB,EAAS3iiB,EAAQ9lH,IAAI,OAC3B,OAAOi/L,KAAY,UAAComd,EAAmBrlpB,IAAIyopB,UAAxB,aAAC,EAAgCzwpB,gBAHvB,aAAG,EAI9BgI,IAAI,OACN0opB,EAA+BJ,KAAkB,UAACjD,EAAmBrlpB,IAAI08G,UAAxB,aAAC,EAAmC1kH,MAE3F,OAAO,gBAAC,WAAD,WACL,eAACi0R,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,OAAQsK,cAAeh3C,EAAMZ,QAAQ,OAChG,eAAC01M,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEsM,aAAc,OAAQsK,cAAeh3C,EAAMZ,QAAQ,KAAtF,SACE,gBAACzB,EAAA,EAAD,CACEW,WAAW,EACXT,aAAa,aACbE,WAAW,aACXa,QAAQ,gBACRU,KAAK,SACL8gC,MAAO,CACL4M,YAAa,GACb1G,YAAa,IARjB,UAWE,gBAAC3oC,EAAA,EAAD,CACEW,WAAW,EACXT,aAAa,aACbE,WAAW,aACXuB,KAAK,SAJP,UAMIyskB,GAA6Br/D,EAC7B,eAAC39d,EAAA,EAAD,CAASC,MAAO09d,EAAhB,SACE,eAAC,KAAD,CAAiBzge,SAAS,QAAQlhB,MAAM,SAASqV,MAAO,CAAEkG,YAAa,OAEvE,KACJ,eAAChI,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,cACNqV,MAAO,CACLhgC,MAAO,cACPihD,WAAY+vhB,EAAiB,OAAS,UACtCpmjB,eAAgBomjB,EAAiB,YAAc,OAC/CnliB,SAAU,WAPd,SAUG34G,OAIHi+oB,GACE,eAACjziB,EAAA,EAAD,CACEE,QAAQ,UACR4B,MAAO,CACLrV,MAAO,QACPiiB,WAAY,GACZlD,gBAAiB,UACjByC,aAAc,GACd3rC,QAAS,WACTy1C,OAAQ,eAEV91H,IAAKmypB,IAAkCntiB,EAAY2giB,EAAgC,KAVrF,SAYGr1nB,EAAE,+BAOXmhoB,GAAuB,eAACl9X,EAAA,EAAD,CAAW10K,MAAO,CAAEsM,aAAc,OAAQqK,WAAY,EAAGC,cAAeh3C,EAAMZ,QAAQ,IAAMouD,YAAa,GAAI7U,aAAc,GAAIv3C,SAAU,KAAzI,SACpB0kkB,GAAcxgiB,GAAU,eAAChH,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAACihB,WAAY,SAAUt2B,MAAO/qB,EAAM82C,WAAWq/B,GAAGprD,MAAOkhB,SAAU,WAAtG,SAAmHp7F,EAAE,kDAIhJmhoB,EACI,eAACl9X,EAAA,EAAD,CAAW10K,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,OAAQqK,WAAY,EAAGC,cAAeh3C,EAAMZ,QAAQ,IAAMouD,YAAa,GAAI7U,aAAc,IAArI,SACGkthB,GAAavgiB,GAAU,eAAChH,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAACihB,WAAY,SAAUt2B,MAAO/qB,EAAM82C,WAAWq/B,GAAGprD,MAAOkhB,SAAU,WAAtG,SAAmHp7F,EAAE,sCAE/Ig1nB,GAAa,eAAC/wX,EAAA,EAAD,CAAW10K,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,OAAQqK,WAAY,EAAGC,cAAeh3C,EAAMZ,QAAQ,KAAhG,SACVkmC,GAAU,eAAChH,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAACihB,WAAY,OAAQt2B,MAAO/qB,EAAM82C,WAAWq/B,GAAGprD,MAAOkhB,SAAU,WAApG,SAAiHp7F,EAAE,wCArE5G/oB,WA4EhC,eAAC21b,EAAA,EAAD,UACE,eAACF,EAAA,EAAD,CAAUn9U,MAAO,CAAE8sP,cAAe,OAAlC,SACGpsM,EAAIhzJ,KAAI,SAACw3G,EAAQx9G,GAEhB,IACM6qpB,GADK,OAAGrtiB,QAAH,IAAGA,OAAH,EAAGA,EAAQz8G,IAAI,aACAq4H,IAAWi2P,IAErC,YAAI7xQ,QAAJ,IAAIA,OAAJ,EAAIA,EAAQz8G,IAAI,cAIhB,YAAkBjI,IAAX0kH,EACH,gBAAC,WAAD,WACA,eAACwvK,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,QAA3D,SACGpH,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOmc,GAAO,IAAD,IAChC05G,EAAM,UAAGw7hB,EAAQpoV,UAAX,iBAAG,EAAoB3hU,UAAvB,aAAG,EAAyB6U,GAClCu3b,EAAc,mBAAqBzqI,EAAW,IAAM3hU,EAAtC,UAAgE6U,EAAI,IAAM0/G,EACxFu2hB,EAAY,iBAAmBnpV,EAAW,IAAM3hU,EAApC,UAA8D6U,EAAI,IAAM0/G,EAE1F,OAAO,eAAC1+C,EAAA,EAAD,CAAMyiC,MAAK,aAAIlgC,QAAS,OAAQnC,WAAY,SAAUs4C,SAAQ/P,YAAatmC,EAAMZ,QAAQ,KAASozkB,IAAyBzsnB,GAAImua,EAA/H,SACL,eAACy+M,EAAD,yBAAW5snB,GAAI6snB,GAAe1G,EAAmB,CAAE11b,UAAWlxG,EAAQl8G,IAAKwO,EAAU8N,MAAM,CAAE+jT,EAAWwoV,EAAiBnqpB,EAAG,IAAKtH,WAAjI,IAA2IuqG,MAAM,UAAUqV,MAAO,CAAEx/B,QAAS,OADvBjkE,QAK5J,eAACm4Q,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEsM,aAAc,OAAQtsC,MAAO,OAAhE,SACGklC,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOmc,GAAO,IAAD,IAChCk2oB,EAA8C,iBAAxBrypB,EAAMqI,IAAI,UAChCwtH,EAAM,UAAGw7hB,EAAQpoV,UAAX,iBAAG,EAAoB3hU,UAAvB,aAAG,EAAyB6U,GAClCu3b,EAAc,mBAAqBzqI,EAAW,IAAM3hU,EAAtC,gBAAsE6U,EAAI,IAAM0/G,EAC9Fu2hB,EAAY,iBAAmBnpV,EAAW,IAAM3hU,EAApC,gBAAoE6U,EAAI,IAAM0/G,EAChG,OAAO,eAAC1+C,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAK,aAAIiW,UAAWm8hB,IAAyBzsnB,GAAImua,EAAqBn2X,WAAW,SAAxG,SACL,eAACgxC,EAAA,EAAD,CAASC,MAAO6jiB,EAAsBhioB,EAAE,gCAAkC,GAA1E,SACE,eAACytF,EAAA,EAAD,CACEp+B,QAAQ,QACRn6C,GAAI6snB,EACJp0iB,QAAQ,UACR4B,MAAOyyiB,EAAsB,CAAC9njB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,eAAgBrnS,UAAWiV,EAAS,GAAK,UAAY,GAAK,CAAEjV,UAAWiV,EAAS,GAAK,UAAY,GAJrL,SAKE71H,EAAMqI,IAAI,oBAPiF8T,QAYpGq1oB,GAAuB,eAACl9X,EAAA,EAAD,CAAW10K,MAAO,CAAEsM,aAAc,OAAQqK,WAAY,EAAGC,cAAe,EAAGwW,YAAa,GAAI7U,aAAc,GAAIv3C,SAAU,KAAxH,SACrB0kkB,GAAcxgiB,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOmc,GAAO,IAAD,IAC9Ck2oB,EAA8C,iBAAxBrypB,EAAMqI,IAAI,UAChCwtH,EAAM,UAAGw7hB,EAAQpoV,UAAX,iBAAG,EAAoB3hU,UAAvB,aAAG,EAAyB6U,GAClC+lC,EAASliD,EAAMqI,IAAI,UACzB,OAAO,eAACkmH,EAAA,EAAD,CAASC,MAAOtsE,GAAU,GAA1B,SACL,eAACi7B,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAK,aAAIiW,UAAWm8hB,IAA7E,SACE,eAACl0iB,EAAA,EAAD,CACEE,QAAQ,UACR6K,QAAQ,EACRjJ,MAAK,aAAI+O,SAAU,SAAUsL,aAAc,WAAYr5C,SAAU,QAAYyxkB,EAAsB,CAAC9njB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,gBAAkB,MAH5K,SAIE/lW,OANoC/lC,SAW5Cq1oB,GAAuBnM,IAAc,eAAC/wX,EAAA,EAAD,CAAW10K,MAAK,aAAIhgC,MAAO,EAAGssC,aAAc,OAAQqK,WAAY,EAAGC,cAAe,GAAOg7hB,GAAuB,CAAExkhB,YAAa,GAAI7U,aAAc,KAAjJ,SACpCkthB,GAAavgiB,EAAOz8G,IAAI,UAAUiF,KAAI,SAACtN,EAAOmc,GAAO,IAAD,IAC7Ck2oB,EAA8C,iBAAxBrypB,EAAMqI,IAAI,UAChCwtH,EAAM,UAAGw7hB,EAAQpoV,UAAX,iBAAG,EAAoB3hU,UAAvB,aAAG,EAAyB6U,GAClCu3b,EAAc,mBAAqBzqI,EAAW,IAAM3hU,EAAtC,cAAoE6U,EAAI,IAAM0/G,EAC5Fu2hB,EAAY,iBAAmBnpV,EAAW,IAAM3hU,EAApC,cAAkE6U,EAAI,IAAM0/G,EAExF/6E,EAAQ,SAAA08D,GACZ,YAAgBp9G,IAARo9G,GAA6B,OAARA,GAAiBn8G,KAAKo/E,MAAY,IAAN+8B,GAAa,KAAKkhJ,QAAQ,GAAK,IAIpF7hP,EADQ7c,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,YAAa,EACrDx4nB,EAAE,mBAAqBywB,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAC3FjpV,EAAO9+Q,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAC5D/oV,EAAOh/Q,EAAM9gD,EAAMklB,MAAM,CAAC,QAAS,UAAW2joB,EAAc,UAE5DoI,EAAgB,SAAC,GAAD,IAAE3xmB,EAAF,EAAEA,KAAS12B,EAAX,yBACpB,gDAASA,GAAT,aACG02B,EAAKhyC,KAAI,SAAC4wE,EAAMgzkB,GAAP,OAAqB,eAACpziB,EAAA,EAAD,CAEGlgC,UAAU,MACVogC,QAAQ,UACR6K,QAAQ,EACRjJ,MAAOyyiB,EAAsB,CAAC9njB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAAMy+R,mBAAoB,gBAAkB,KALvG,SAMG/pU,GALKgzkB,UAQ3C,OAAO,eAAC/zkB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBwhC,MAAK,aAAIiW,UAAWm8hB,IAAyBzsnB,GAAImua,EAA9G,SACL,uBAAKnua,GAAI6snB,EAAWxyiB,MAAO,CAAClgC,QAAS,QAArC,UACE,eAACuxkB,EAAD,CAAe3xmB,KAAM,CAACziC,GAAQ,OAAQ+iT,GAAQ,OAAQE,GAAQ,QAASlgN,MAAO,CAACkG,YAAatmC,EAAMZ,aAClG,eAACqykB,EAAD,CAAe3xmB,KAAM,CAACziC,EAAM+iT,EAAME,GAAOlgN,MAAO,CAAC2R,UAAW,aAHuEp1G,UAzEtH7U,GAkFrB,gBAAC,WAAD,WACA,eAACgtR,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,UAC3D,eAACooK,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEsM,aAAc,UAChDsliB,GAAuB,eAACl9X,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEsM,aAAc,WACvEsliB,GAAuBnM,IAAc,eAAC/wX,EAAA,EAAD,CAAWl0M,QAAQ,OAAOw/B,MAAO,CAAEhgC,MAAO,EAAGssC,aAAc,YAJ7E5kH,YAjML2hU,YAoN5B0iV,GAAgB,SAAC,GAcjB,EAbJ9D,eAaK,IAZLa,EAYI,EAZJA,gCACAiB,EAWI,EAXJA,mBACAhB,EAUI,EAVJA,yBACAC,EASI,EATJA,gCACAH,EAQI,EARJA,kCACAmD,EAOI,EAPJA,YACA/vhB,EAMI,EANJA,SACApB,EAKI,EALJA,aACAu7F,EAII,EAJJA,UACAptN,EAGI,EAHJA,IACA5I,EAEI,EAFJA,MACA6rpB,EACI,EADJA,aAIMrF,EAAQxwb,EAAU3tN,IAAI,YAMtBiqpB,EADkC5J,EAAgCrgpB,IAAIO,EAAKzF,iBACH0iB,SAASvY,KAAI,SAACuC,GAC1F,OAAOA,EAAOxH,IAAI,YAGdkqpB,EAA+B5I,GAAuBA,EAAmBzkoB,MAAM,CAACtc,EAAK,UAAWsO,iBAAO5J,KAAI,SAACklpB,GAAD,OAAmBA,EAASnqpB,IAAI,YAAUsd,QAErJ8soB,EAAazypB,EAAMqI,IAAI,SACvBqqpB,EAAe1ypB,EAAMqI,IAAI,eACzB4gZ,EAAgBjpZ,EAAMqI,IAAI,MAG1BsqpB,EAAehK,EAAyB96oB,SAASjF,GAMjDgqpB,EAAuCN,EAAsCzkpB,SAAS4kpB,GACtFI,EAAgBF,GAAgBC,EAChCE,EAAYlK,EAAgC3ioB,MAAK,SAAC8soB,GACtD,IAAMC,EAAiBD,EAAW1qpB,IAAI,iBAChCmnc,EAAcujN,EAAW1qpB,IAAI,SACnC,OAAK2qpB,IAAmB/pQ,GAAmBumD,IAAgBijN,KAMvDQ,EAAeH,GAAiC,IAAnBA,EAAUzypB,KAOvCigI,EAAUkmhB,IAJQA,GACpByM,EAGsCJ,EACpCK,EAAeL,EACfzpR,EAAgBq/Q,GAAuG,MAA/B8J,IAAwCA,EAA4BhqpB,IAAIkqpB,GAChKzB,EAA8C,iBAAxBhxpB,EAAMqI,IAAI,UAChCm5G,EAAWqqiB,IAAkBqH,GAAgB9pR,GAAkB4nR,GAAwC,WAAjBv2hB,EAU5F,MARqB,CACnBlwB,MAAO,YACPvqG,MAAOyypB,EACPtpiB,QAASyiiB,EAAYhjpB,EAAK6ppB,EAAYjM,EAAOkM,EAAc72hB,EAAUotR,GACrE3oR,QAASA,IAAoB,EAC7B9e,c,kJKx+FG,SAAS2xiB,EACd52S,EACA7qK,EACA4rJ,GAEA,IAAMhtT,EAAUohK,EAAOotJ,aAEJs0T,GAAe1hd,EAAO2hd,UAAY,IAA7CC,UAGSC,GAAkBj2T,GAASA,EAAMmD,WAAc,IAAxD+yT,QAEFC,EAAM,YAAkB,CAC5BjzT,YAAalwT,EAAQkwT,aAAe,IACpC3oF,QAASvnO,EAAQunO,QACjB07Y,eACAH,aACA72S,aAKF,OAFA7qK,EAAOxkG,MAAQwkG,EAAOxkG,KAAK,YAAaumjB,GAEjCA,EAeF,SAASC,EAAkCv3S,GAChD,IAAMzqK,EAAS,cACf,IAAKA,EACH,MAAO,GAIT,IAAM+hd,EAAMN,EAAoC,YAAWh3S,GAAMI,UAAY,GAAI7qK,EAAQ,eAGnFiid,EAAM,YAAYx3S,GACxB,IAAKw3S,EACH,OAAOF,EAMT,IAAMG,EAAcD,GAAOA,EAAIE,8BAC/B,GAAID,EACF,OAAOA,EAMT,MAAgDD,EAAInhK,SAAhCshK,EAApB,EAAQC,WAA6BxioB,EAArC,EAAqCA,OACd,MAAnBuioB,IACFL,EAAIO,YAAJ,UAAmB,IAIA,qBAWA,OARA,eACA,6BAGA,iCAEA,8BAEA,I,6BC7FR,SAASttiB,EAAgBj8G,GAItC,OAHAi8G,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GACzF,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAEvCi8G,EAAgBj8G,GAJzB,mC,gBCAA,IAAIo0C,EAAU,EAAQ,KAA0C,QAE5Do1mB,EAAwB,EAAQ,KAYpCz0pB,EAAOC,QAVP,SAAoCi0K,EAAMpuK,GACxC,GAAIA,IAA2B,WAAlBu5C,EAAQv5C,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIqB,UAAU,4DAGtB,OAAOstpB,EAAsBvgf,IAI/Bl0K,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,gBCfxE,IAAIkzc,EAAiB,EAAQ,MAEzBC,EAAuB,EAAQ,MAE/BC,EAA6B,EAAQ,MAErCC,EAAkB,EAAQ,MAM9B70pB,EAAOC,QAJP,SAAwB0S,EAAK7K,GAC3B,OAAO4spB,EAAe/hpB,IAAQgipB,EAAqBhipB,EAAK7K,IAAM8spB,EAA2BjipB,EAAK7K,IAAM+spB,KAItG70pB,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BCXxE,IAAIiK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,KAAM2gL,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACrLhF,GAAI,IACJn7B,EAAG,qBACA8gN,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACxCngC,EAAG,gTACA,UAEL3K,EAAQywH,QAAUq4I,G,uQCwLL1qD,EAAY,qBAGnBo9K,E,4MAkCGr5Q,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAMI,EAAKg3B,MALPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAC,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QACA1e,EALF,EAKEA,cAEI6wD,EAAY/7G,OAAO47G,GACP,MAAdA,GACEnhE,MAAMshE,IACRjX,IAAmB,sBAAuB55C,EAAc,CACtD6wD,UAAWH,EACXr9G,YAAaq9G,EACbtwF,OAAQ,eACR+tB,KAAI,OAAEwiE,QAAF,IAAEA,OAAF,EAAEA,EAAWj/F,UAGrBosB,EAAS,IAAIgzE,IAAkBD,IAC/B/yE,EAAS,IAAIizE,IAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAOuzC,EAAM,mBAAoBD,EAAU77F,MAAK,SAAC2wV,GACxD,OAAOA,EAAQvuW,IAAI,QAAUw5G,QAG/B5yE,EAASu/B,YAAOuzC,EAAM,mBAAoB,OAE5ClyC,EAAQ,wBACRA,EAAQ,oBACJr4D,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAKI,EAAKg3B,MAJPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAN,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QAEgB,MAAduyC,GACFnzE,EAAS,IAAIqzE,IAAcF,IAC3BnzE,EAASu/B,YAAOuzC,EAAM,oBAAqBM,EAAUp8F,MAAK,SAACuwV,GACzD,OAAOA,EAASnuW,IAAI,QAAU+5G,QAGhCnzE,EAASu/B,YAAOuzC,EAAM,oBAAqB,OAE7ClyC,EAAQ,oBACJr4D,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAII,EAAKh0E,MAHPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OACAV,EAHF,EAGEA,KAGA9yE,EADY,MAAVuzE,EACOh0C,YAAOuzC,EAAM,gBAAiBU,EAAOx8F,MAAK,SAACwwV,GAClD,OAAOA,EAAKpuW,IAAI,QAAUm6G,MAGnBh0C,YAAOuzC,EAAM,gBAAiB,Q,uDA/F3C,YAIEW,EADIp+G,KAAKkqC,MADPk0E,kB,gCAKJ,SAA0BC,GACxB,IACc2xiB,EACV3xiB,EADFlD,WAEF,EAGIn7G,KAAKkqC,MAFPixE,EADF,EACEA,WACAmD,EAFF,EAEEA,cAGF,GAAkB,MAAdnD,EAAoB,CACtB,IAAMuC,EAAYvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OACrC,MAAlBovoB,GAA0BtyiB,IAAcsyiB,EAAepvoB,MAAM,CAAC,WAAY,UAAW,QACvF5gB,KAAKs9G,cAAcI,GAAW,GAEhC,IAAMI,EAAa3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OACvC,MAAlBovoB,GAA0BlyiB,IAAekyiB,EAAepvoB,MAAM,CAAC,WAAY,WAAY,QACzF5gB,KAAK69G,eAAeC,GAAY,GAIhCQ,IAAoBh5G,aAAGg5G,EAAeD,EAAUC,gBAClDt+G,KAAKkqC,MAAMygC,U,oBAuEf,WAAiB,IAAD,OACd,EAUI3qE,KAAKkqC,MATPm4R,EADF,EACEA,aACA/F,EAFF,EAEEA,SACAvwS,EAHF,EAGEA,EACAyxF,EAJF,EAIEA,UACAO,EALF,EAKEA,UACAI,EANF,EAMEA,OACA73E,EAPF,EAOEA,SAPF,IAQE60E,kBARF,MAQevoG,gBARf,EASEijX,EATF,EASEA,kBAGIvjB,EAAUn3P,EAAWv6F,MAAM,CAAC,WAAY,aAAehO,gBACvDs/V,EAAW/2P,EAAWv6F,MAAM,CAAC,WAAY,cAAgBhO,gBAE/D,OACE,uBACE0pT,SAAU+F,EAAa/F,GACvBhhN,MAAO,CACLx/B,QAAS,UAHb,UAME,eAAC,IAAD,CACEtC,WAAW,EACXM,QAAQ,aACRb,WAAW,SACXqB,QAAS,EAJX,UAME,cAAC,IAAD,CACEV,MAAM,EACNQ,GAAI,GACJF,GAAI,GACJF,GAAI,GAJN,SAME,cAAC,QAAD,CACE9vC,MAAO,CACLpJ,MAAO/U,EAAE,+BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,OACLwrG,SAAU,CAACmqF,KACX7qH,UAAWwgC,QAGf,cAAC,IAAD,CACElgC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,4BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,yBAEjCkzC,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,GAETu+N,sBAAuBgzU,YAA4Bp6R,IAErDl8Q,WAAY,CACV6B,SAAUx7G,KAAKs9G,cACfp9G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,sBACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACLpJ,MAAO/U,EAAE,kCACT6tF,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,0BAEjCkzC,iBAAiB,CAEfC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAW,CACT6B,SAAUx7G,KAAK69G,eACf39G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,YAGtB/T,KAAK,uBACL8qE,UAAWslC,QAOf,cAAC,IAAD,CACEhlC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,sBAEjCkzC,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,WACf/9G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,WAAa2vV,EAAS3vV,YAG5C/T,KAAK,mBACL8qE,UAAWslC,WAQhBt4E,S,GArQyB7B,iBAoTnBwwC,sBACbgG,aA5ba,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ8kE,SAAU,EACVk1C,OAAQ,KAEVq9M,KAAM,CACJrzP,OAAQL,EAAMZ,UAAY,GAM5B,UAAW,CACT,kBAAmB,CACjBc,QAAS,OACTnC,WAAY,SACZ4hD,OAAQ,EACRtJ,OAAQ,OACRwJ,WAAY,cACZ,UAAW,CACTlT,UAAW,SAGf,8BAA+B,CAC7BxrC,SAAU,EACVjB,QAAS,OACTC,SAAU,QAEZ,+BAAgC,CAC9BE,OAAQ,GAEV,gFAAiF,CAC/EO,QAAS,GAEX,oBAAqB,CACnBA,QAA2B,EAAlBZ,EAAMZ,WAEjB,gBAAiB,CACfc,QAAS,yBACTU,QAAS,EACTy1C,OAAQ,OACRj2C,MAAO,IACPqtR,QAAS,OACT9tO,OAAQ,QAEV,sBAAuB,CACrBE,WAAY,cACZF,OAAQ,EACR/+C,QAAS,EACTupC,OAAQ,UACRjqC,QAAS,eACTg/L,WAAY,UACZjzJ,SAAU,UACV5rC,OAAQ,EACRotR,QAAS,GAEX,qDAAsD,CACpD1rP,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACNC,MAAO,EACP+5G,OAAQ,EACRn5C,QAAS,OACTnC,WAAY,SACZmhM,WAAYl/L,EAAM82C,WAAWooJ,WAC7BjzJ,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCtpM,QAAS,GAEX,sBAAuB,CACrBoxC,QAAS,IACTjnB,MAAO/qB,EAAM+pC,QAAQU,OAAOC,MAC5BtqC,MAAO,QAET,qBAAsB,CACpB0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzB9kB,SAAU,WACV1iG,KAAM,EACN+5G,IAAI,eAAD,OAAiBp5C,EAAMZ,UAAvB,OACHgB,MAAO,OACP0lD,OAAQ,EACR81I,UAAWo5Y,IAEb,qDAAsD,CACpDroiB,UAAW,QAEb,eAAgB,CACdivJ,UAAWo5Y,GACX3oW,UAAW,QAEb,mBAAoB,CAClBpsO,UAAW,eAEb,yCAA0C,CACxC8qB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5B59J,OAAQ,UACRkM,OAAQ,GACRj2C,MAAO,GACP0lD,OAAQ,GAGV,oBAAqB,CACnB/jB,SAAU,WACVoN,SAAU,SACVmvJ,KAAM,gBACNjoJ,OAAQ,EACRj2C,MAAO,EACPC,QAAS,QAkVbp8B,YAAgB,gBAChBgwE,IACAtQ,mBA7CsB,SAAC73E,EAAYyF,GAEnC,IAAM+oV,EAAW/oV,EAASgoV,WAAWxwX,IAAIkspB,IAA+B94R,gBAIlE/4Q,EADwB,MAAjB7xE,EAASuO,KAAevO,EAASuO,KAAOpoC,gBAG/C6qG,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACT+3Q,EAAQ,UACHj8K,EADG,QAENA,EAEA62c,EAAmBtxiB,cAAsB93E,GACzCw2E,EAAY6yiB,YAAuBD,EAAkB,CACzDv6R,kBAAmBppV,EAASopV,kBAC5BD,oBAAqBnpV,EAASmpV,sBAGhC,OAAO,aACLn4Q,OACAa,gBACAk3Q,WACAh4Q,aACG1qE,YAAyB,CAC1BirE,UAAWgB,cACXZ,OAAQa,cACR7D,WAAYC,wBAAcqC,IAHzB3qE,CAIA9L,OAGoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEft0E,eASF48R,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IAVPvyP,CAYb0hT,I,6BC/gBF,6FASaihE,EAAyB,uBAUhCpoU,EAAYJ,aAAW,SAACl0C,GAAD,MAAY,CACvC0zP,KAAM,CACJ9yP,QAASZ,EAAMZ,QAAQ,EAAG,MAC1B0qC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC3pC,OAAQL,EAAMZ,QAAQ,EAAG,KACzBm8C,WAAY,SACZhP,aAAcvsC,EAAM4/C,MAAMrT,kBA0FfwxU,IAtFoC,SAAC/uZ,GAClD,MAMIA,EALFgvZ,kBADF,MACe,GADf,EAEE7iU,EAIEnsF,EAJFmsF,YAFF,EAMInsF,EAHFomnB,4BAHF,MAGyB,EAHzB,IAMIpmnB,EAFFhqC,YAJF,MAIS,QAJT,IAMIgqC,EADFqmnB,mBALF,SAQMr1kB,EAAQwjD,cACRxlD,EAAUs2C,EAAUt0C,GAEpBr5E,EAASq3b,EAAWr3b,OACpB2upB,EAAiB3upB,EAASyupB,EAEhC,MACO,SADCpwpB,EAEJ,eAAC,IAAD,CACE2kH,QAAS2riB,EAAiBn6hB,EAAY6iU,EAAWppb,MAAMwgpB,IAAyB,KAChF92kB,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAC1C8gC,MAAO,CAAE+J,OAAQmriB,EAAiB,UAAY,WAHhD,UAMI3upB,EAEIq3b,EAAWppb,MAAM,EAAGwgpB,GAAsBtnpB,KAAI,SAACtN,EAAeS,GAAhB,OAC5Co0pB,EACE,cAAC,IAAD,CAASrmiB,MAAOxuH,EAAhB,SACE,sBAAM09E,UAAWF,EAAQ01P,KAAzB,SACGlzU,KAFuBS,GAQ5B,sBAAkBi9E,UAAWF,EAAQ01P,KAArC,SACGlzU,GADQS,MAMf,IAGJq0pB,EAAiB,0CAAW3upB,EAASyupB,EAApB,SAAwD,QAM7E,cAAC,IAAD,CACEzriB,QAAS2riB,EAAiBn6hB,EAAY6iU,EAAWppb,MAAMwgpB,IAAyB,KAChF34N,SAAU64N,EAAiB54N,EAAyB,GACpDt8U,MAAO,CAAE+J,OAAQmriB,EAAiB,UAAY,WAHhD,SAKE,eAAC,IAAD,CAAMh3kB,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UAEI34E,EAEIq3b,EAAWppb,MAAM,EAAGwgpB,GAAsBtnpB,KAAI,SAACtN,EAAeS,GAAhB,OAC5Co0pB,EACE,cAAC,IAAD,CAASrmiB,MAAOxuH,EAAhB,SACE,sBAAM09E,UAAWF,EAAQ01P,KAAzB,SACGlzU,KAFuBS,GAQ5B,sBAAkBi9E,UAAWF,EAAQ01P,KAArC,SACGlzU,GADQS,MAMf,IAGJq0pB,EAAiB,0CAAW3upB,EAASyupB,EAApB,SAAwD,Y,2FC1G/El9O,EAAc,oBACdq9O,EAAkB,sBAMlBC,EAAmB,uCAAG,WAAO3niB,GAAP,yBAAApjH,EAAA,sFAELojH,QAFK,IAELA,GAFK,UAELA,EAAU/tE,YAFL,iBAEL,EAAgBq2Q,YAFX,aAEL,UAFK,UAElB56O,EAFkB,OAGlBtoE,EAHkB,OAGVsoE,QAHU,IAGVA,GAHU,UAGVA,EAAMvvC,eAHI,iBAGV,EAAe/4B,aAHL,aAGV,EAAsBA,OAChC1M,MAAMC,QAAQyM,GAJM,yCAKfA,EAAMsT,KAAK,OAAS,oBALL,gCAOjBtT,GAAS,oBAPQ,2DASjB,oBATiB,0DAAH,sDAanBy0mB,EAAoB,CAElB+tC,gBAFkB,SAEFrpjB,EAAUvgD,EAAeywT,GAAmC,OAAD,oIAEvExmD,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHoC,SAItDusX,EAAUO,UAAV,2BAAwCr8D,IAJc,oBAIvEzuP,EAJuE,kBAKzEA,GALyE,UAKzEA,EAAU7hF,eAL+D,iBAKzE,EAAmBi2kB,eALsD,iBAKzE,EAA4B3lQ,kBAL6C,aAKzE,EAAyCA,IALgC,0CAMpEzuP,EAAS7hF,QAAQi2kB,QAAQ3lQ,WAAWA,IANgC,iCAQpE,MARoE,gEAY7ExvV,QAAQ7Z,MAAM,wBAAd,MAZ6E,kEAiB3EyipB,eAnBkB,SAmBHtpjB,EAAUvgD,EAAeywT,EAAiBx8T,GAA0B,OAAD,oIAE9Eg2Q,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACzC/L,EAAI,eACDw8T,EAAa7oW,KAAKC,UAAUosC,IALqD,SAO7Ds4X,EAAUhuU,IAAV,2BAAkCkyQ,GAAcx8T,GAPa,oBAO9E+tE,EAP8E,kBAQhFA,GARgF,UAQhFA,EAAU7hF,eARsE,iBAQhF,EAAmBi2kB,eAR6D,iBAQhF,EAA4B3lQ,kBARoD,aAQhF,EAAyCA,IARuC,0CAS3EzuP,EAAS7hF,QAAQi2kB,QAAQ3lQ,WAAWA,IATuC,iCAW3E,MAX2E,gEAepFxvV,QAAQ7Z,MAAM,wBAAd,MAfoF,kEAyBlF0ipB,kBA5CkB,SA4CAvpjB,EAAUvgD,EAAeywT,EAAoBD,EAA2Bv8T,GAA0B,OAAD,oIAE/Gg2Q,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH4E,SAI9FusX,EAAUhuU,IAAV,sBAA6BiyQ,EAA7B,YAAyCC,GAAcx8T,GAJuC,oBAI/G+tE,EAJ+G,kBAKjHA,GALiH,UAKjHA,EAAU7hF,eALuG,iBAKjH,EAAmBi2kB,eAL8F,iBAKjH,EAA4B3lQ,kBALqF,aAKjH,EAAyCA,IALwE,0CAM5GzuP,EAAS7hF,QAAQi2kB,QAAQ3lQ,WAAWA,IANwE,iCAQ5G,MAR4G,gEAYrHxvV,QAAQ7Z,MAAM,6BAAd,MAZqH,kEAiBnH6zT,cA7DkB,SA6DJ16N,EAAUvgD,GAA8B,OAAD,sIAEjDiqQ,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHc,SAIhCusX,EAAUO,UAAV,eAJgC,oBAIjD9qT,EAJiD,kBAKnDA,GALmD,UAKnDA,EAAU7hF,eALyC,iBAKnD,EAAmBi2kB,eALgC,aAKnD,EAA4B/lf,UALuB,iDAM9CrO,QAN8C,IAM9CA,GAN8C,UAM9CA,EAAU7hF,eANoC,iBAM9C,EAAmBi2kB,eAN2B,aAM9C,EAA4B/lf,UANkB,iCAQ9C,IAR8C,gEAYvDpvG,QAAQ7Z,MAAM,wBAAd,MAZuD,kEAiBrD8zT,iBA9EkB,SA8ED36N,EAAUvgD,GAA8B,OAAD,sIAEpDiqQ,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHiB,SAInCusX,EAAUO,UAAV,kBAJmC,oBAIpD9qT,EAJoD,kBAKtDA,GALsD,UAKtDA,EAAU7hF,eAL4C,iBAKtD,EAAmBi2kB,eALmC,aAKtD,EAA4Blge,cAL0B,iDAMjDl0B,QANiD,IAMjDA,GANiD,UAMjDA,EAAU7hF,eANuC,iBAMjD,EAAmBi2kB,eAN8B,aAMjD,EAA4Blge,cANqB,iCAQjD,IARiD,gEAY1Dj1H,QAAQ7Z,MAAM,2BAAd,MAZ0D,kEAiBxD00mB,gBA/FkB,SA+FFv7gB,EAAUvgD,EAAeL,GAA+B,OAAD,gIAEnEsqQ,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHgC,SAIlDusX,EAAUO,UAAV,uDAAoEntX,IAJlB,cAInEqiE,EAJmE,0BAK1D,OAARA,QAAQ,IAARA,GAAA,UAAAA,EAAU7hF,eAAV,eAAmB4pnB,YAAa,MALkC,sCAQzE9ooB,QAAQ7Z,MAAM,2BAAd,MARyE,iEAavE4ipB,mBA5GkB,SA4GCzpjB,EAAUvgD,EAAe/L,GAA0E,OAAD,kIAEjHg2Q,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH8E,SAIhGusX,EAAUC,KAAV,uCAAuDv4X,GAJyC,cAIjH+tE,EAJiH,0BAKxG,OAARA,QAAQ,IAARA,GAAA,UAAAA,EAAU/tE,YAAV,mBAAgB9T,eAAhB,eAAyB4pnB,YAAa,MAL0E,sCAQvH9ooB,QAAQ7Z,MAAM,8BAAd,MARuH,iEAarH6ipB,mBAzHkB,SAyHC1pjB,EAAUvgD,EAAe/L,GAAuE,OAAD,sIAE9Gg2Q,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GACjC9lB,EAAsB+Z,EAAtB/Z,GAAOgwnB,EAJqG,YAItFj2mB,EAJsF,YAK7Fs4X,EAAUhja,OAAV,uCAAyD2wB,EAAIgwnB,GALgC,cAK9GloiB,EAL8G,0BAMrG,OAARA,QAAQ,IAARA,GAAA,UAAAA,EAAU/tE,YAAV,mBAAgB9T,eAAhB,eAAyB4pnB,YAAa,MANuE,wCASpH9ooB,QAAQ7Z,MAAM,8BAAd,MAToH,kEAiBlH+ipB,uBA1IkB,SA2ItB5pjB,EACAvgD,EACA/L,GASe,OAAD,kIAENg2Q,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH7B,SAIWusX,EAAUC,KAAV,uCAAuDv4X,GAJlE,cAIN+tE,EAJM,0BAKG,OAARA,QAAQ,IAARA,GAAA,UAAAA,EAAU/tE,YAAV,mBAAgB9T,eAAhB,eAAyB4pnB,YAAa,MALjC,sCAQZ9ooB,QAAQ7Z,MAAM,mCAAd,MARY,iEAeVgjpB,oBArKkB,SAqKE7pjB,EAAUvgD,EAAeL,GAAiC,OAAD,2HAC3EsqQ,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAFwC,SAG1DusX,EAAU89O,qBAAV,8CAAsE1qmB,IAHZ,kBAG3EqiE,EAH2E,kBAI5EA,OAJ4E,EAI5EA,EAAUuoM,QAJkE,yBAKrE1pT,MALqE,YAK/DmhH,QAL+D,IAK/DA,OAL+D,EAK/DA,EAAU56G,MALqD,uCAKtCuipB,EAAoB3niB,GALkB,sEAO3E4gC,EAP2E,UAOnE5gC,EAAS/tE,YAP0D,iBAOnE,EAAe9T,eAPoD,aAOnE,EAAwB4pnB,UACjCrvpB,MAAMC,QAAQioJ,GAR8D,uBASzE,IAAI/hJ,MAAM,qCAT+D,iCAW1E+hJ,GAX0E,+CAkB7E0ngB,qBAvLkB,SAwLtB/pjB,EACAvgD,EACA/L,GAKiB,OAAD,2HACVg2Q,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAFzB,SAGOusX,EAAUC,KAAV,+BAA+Cv4X,GAHtD,kBAGV+tE,EAHU,kBAIXA,OAJW,EAIXA,EAAUuoM,QAJC,yBAKRlzT,OALQ,KAKUwJ,MALV,YAKgBmhH,QALhB,IAKgBA,OALhB,EAKgBA,EAAU56G,MAL1B,uCAKyCuipB,EAAoB3niB,GAL7D,qEAKyE,CAAEtjB,OAAM,OAAEsjB,QAAF,IAAEA,OAAF,EAAEA,EAAUtjB,QAL7F,KAKDtqD,OALC,gCAOVwuG,EAPU,UAOF5gC,EAAS/tE,YAPP,iBAOF,EAAe9T,eAPb,aAOF,EAAwB4pnB,UACjCrvpB,MAAMC,QAAQioJ,GARH,uBASR,IAAI/hJ,MAAM,qCATF,iCAWT+hJ,GAXS,gDAeLi5d,O,6BCjOf,IAAIj8Z,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mDACD,mBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,4DACD,qBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,gGACD,UAEJ3K,EAAQywH,QAAUq4I,G,gOCfH9gI,eAAQ,kBAAM,oC,uECSvB3T,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DyiZ,UAAW,CACT1piB,aAAc,aAgEH2piB,EA5DuE,SAAC,GAAuB,IAArBC,EAAoB,EAApBA,cACjFt4kB,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAER,OAAKyloB,EAAc3vpB,OAKjB,cAACg3E,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,eAAC/B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,cAACg/B,EAAA,EAAD,UAAaztF,EAAE,8DACf,cAAC8sD,EAAA,EAAD,UACE,cAACy/W,EAAA,EAAD,UACE,cAACK,EAAA,EAAD,UAEI64N,EAAcxopB,KAAI,SAACyopB,EAAyCt1pB,GAC1D,OAAO,eAACs8b,EAAA,EAAD,WACL,cAACzoK,EAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SAEI,CACEG,EAAgB7woB,MAAM,CAAC,UAAW,cAClC6woB,EAAgB7woB,MAAM,CAAC,UAAW,cAClCrV,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,MACnBgwoB,EAAgB7woB,MAAM,CAAC,UAAW,kBAClC,YAGP,cAACovQ,EAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SACGG,EAAgB7woB,MAAM,CAAC,UAAW,WAAamL,EAAE,6CAEpD,cAACikQ,EAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SACGG,EAAgB7woB,MAAM,CAAC,UAAW,iBAAmBmL,EAAE,kDAE1D,cAACikQ,EAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SAEI,CACEG,EAAgB7woB,MAAM,CAAC,UAAW,aAClC6woB,EAAgB7woB,MAAM,CAAC,UAAW,cAClCrV,QAAO,SAAC0K,GAAD,OAASA,KAAKwL,KAAK,OAASsK,EAAE,iDAtBvB5vB,iBAnB7B,M,SCgDEo9M,EAAY,4BAWZm4c,EAAoB,gBACpBC,EAA2B,0CAgBlC36R,E,4MAEGhwV,MAAQ,CACb46V,sBAAuBhvX,iB,EAGlBg/oB,mBAAqB,SAAClmb,EAAsCmmb,GAIjE,EAAKjviB,SAAS,CACZkviB,iBAAkBpmb,K,EAIfqmb,kBAAoB,WACzB,IAGMC,EADF,EAAK9nnB,MADP+nnB,kBAEgDlupB,IAAI,gBAAkB,GAClEmupB,EAAwCF,EAE3CzmpB,QAAO,SAACmoX,GAAD,OAA2CA,EAAW3vX,IAAI,aAAe2vX,EAAW3vX,IAAI,cAclG,OAAO3E,sBAAY4ypB,GAA0BE,EAAsCtvpB,UAAYsvpB,G,4CAGjG,WACE,MAKIlypB,KAAKkqC,MAJPm4R,EADF,EACEA,aACA/F,EAFF,EAEEA,SACAh2R,EAHF,EAGEA,SACA4yC,EAJF,EAIEA,QAGIs4kB,EAAgBxxpB,KAAK+xpB,oBAE3B,OACE,eAACl5kB,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,cAAC,IAAD,CACE81C,SAAUoiiB,EACVS,cAAe,cAAC,IAAD,CAA0BC,SAAUV,MAErD,uBACEp1V,SAAU+F,EAAa/F,GACvBljP,UAAWF,EAAQm5kB,cAFrB,UAIE,eAACx5kB,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,cAACg4kB,EAAD,CAAgBd,cAAeA,IAC/B,cAAC,EAAD,CAA2BA,cAAeA,OAG3ClrnB,Y,GArE6B7B,aAiFlC8tnB,EAL+BlgnB,YACnCP,IACAxsC,KAGsBktpB,EACtB,SAAC/lnB,GAAD,OAA2CA,EAASwqV,eACpD,SAAClpG,GACC,OAAOn7Q,gBAAmB5B,eAAc,SAACyoI,GACvCA,EAAW/xI,IAAI,eAAgBqmR,GAAW,IAAIn6D,IAAQ,CAAE3yL,IAAK,IAAKwf,eAAe18C,IAAI,sBAY5EkxE,sBACbgG,aA1Ha,SAACC,GAAD,MAA+B,CAC5Cm3kB,cAAe,CACb92kB,OAA0B,EAAlBL,EAAMZ,UACdgB,MAAO,WAuHU,CAAE0zC,WAAW,IAChCnQ,mBATsB,SAAC73E,EAAYyF,GACnC,MAAO,CACL6xE,cAAei0iB,EAAgB9lnB,GAC/BwlnB,kBAAmB72iB,wBAAcm+F,EAAdn+F,CAAyBp0E,IAAUp0B,oBAOxDusC,YAAgB,gBAChBm4O,YAAmC,CAAEt2B,SAAUznD,IAC/CguH,oBAAU,CACR9pN,KAAM87F,EACNk+J,eAAe,EACfhwC,oBAAoB,EACpB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IAXPvyP,CAab+hT,I,4EC/Ma,SAAS,EAAKhqW,EAAQi1J,EAAUugW,GAiB7C,OAfE,EADqB,qBAAZnqc,SAA2BA,QAAQt0E,IACrCs0E,QAAQt0E,IAER,SAAcipB,EAAQi1J,EAAUugW,GACrC,IAAIn0R,ECLK,SAAwBlqP,EAAQ89K,GAC7C,MAAQ7jL,OAAOD,UAAUoD,eAAeP,KAAKmD,EAAQ89K,IAEpC,QADf99K,EAAS,OAAA4kB,EAAA,GAAe5kB,MAI1B,OAAOA,EDDQ,CAAc6oB,EAAQi1J,GACjC,GAAKosE,EAAL,CACA,IAAI4jS,EAAO7zhB,OAAO0uB,yBAAyBuhO,EAAMpsE,GAEjD,OAAIgwW,EAAKluhB,IACAkuhB,EAAKluhB,IAAI/C,KAAKwhhB,GAGhByP,EAAKv2hB,QAIT,EAAKsxB,EAAQi1J,EAAUugW,GAAYx1f,K,qGEIxC0yB,E,cCrBSG,EAAsB,YDuBtBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,2DAAqH,CACnH7Y,UAGGp0B,kBAGI6/oB,EAA6B,kBAAM5/mB,YAC9C8M,KACA,SAAC3Y,GAAD,OAA8CA,EAAMjjC,IAAI,mBAAoBkU,sBAQjEy6oB,EAAmC,SAACxypB,GAAD,OAAkB2yC,YAChE8M,KACA,SAAC3Y,GAAD,OAA8CA,EAAMpmB,MAAM,CAAC,mBAAoB1gB,S,6BEpDjF/E,EAAQuhN,YAAa,EAErBvhN,EAAQywH,QAAU,SAAU9kH,EAAKhF,GAC/B,IAAIkrB,EAAS,GAEb,IAAK,IAAIhqB,KAAK8D,EACRhF,EAAK0e,QAAQxd,IAAM,GAClB5E,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAK9D,KAC/CgqB,EAAOhqB,GAAK8D,EAAI9D,IAGlB,OAAOgqB,I,gBCbT9xB,EAAOC,QAAU,CAAE,QAAWC,EAAQ,MAAmCshN,YAAY,I,4VC+CxEwoR,EAA0B,oBAEjCgxH,EAA2B,SAACx6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IAClFi3P,EAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,YAAaxqF,IAoC9Es4iB,E,4MAiCGr2V,SAAW,SAACnxT,GACjB,MAKI,EAAK++B,MAJP8B,EADF,EACEA,QACAoijB,EAFF,EAEEA,QACA/7O,EAHF,EAGEA,uBACAugT,EAJF,EAIEA,wBAGF,GAAIznpB,EAAOpP,KAAM,CACf,IA2EMm3b,EA3EkB/nb,EAAO6F,eAAc,SAAAywQ,GAC3C,IAAM9yB,EAAU8yB,EAAI7gQ,MAAM,CAAC,UAAW,OAChCozM,EAAYytD,EAAI19Q,IAAI,2CACpBswN,EAAaotD,EAAI19Q,IAAI,4CACrB0hG,EAASg8K,EAAI19Q,IAAI,UACjByyH,EAAYirJ,EAAI19Q,IAAI,aACpBwzN,EAAakqD,EAAI19Q,IAAI,cACrBk5I,EAAewkI,EAAI19Q,IAAI,SACvBqzH,EAAWqqJ,EAAI19Q,IAAI,YACnBumZ,EAAa7oI,EAAI7gQ,MAAM,CAAC,iBAAkB,OAE3C+tO,GACH8yB,EAAIj5J,OAAO,WAGT8hS,GAAqC,IAAvBA,EAAWl1Y,QAC3BqsQ,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAOo6Y,EAAWvmZ,IAAI,IAC1CumZ,GACT7oI,EAAIj5J,OAAO,kBAGb,IAAM6qG,EAAYouD,EAAI19Q,IAAI,aACpB8upB,EAAqBx/b,GAAa69I,YAAsB79I,GAC1Dw/b,EACFpxY,EAAI/5Q,IAAI,YAAamrpB,GACZx/b,GACTouD,EAAIj5J,OAAO,aAGb,IAAM8qG,EAAemuD,EAAI19Q,IAAI,gBACvB+upB,EAAwBx/b,GAAgB49I,YAAsB59I,GAChEw/b,EACFrxY,EAAI/5Q,IAAI,eAAgBorpB,GACfx/b,GACTmuD,EAAIj5J,OAAO,gBAGTwrG,IACFA,EAAUpzM,MAAM,CAAC,KAAM,OACnB6gQ,EAAIvxQ,MAAM,CAAC,0CAAuB,MAAO8jN,EAAUpzM,MAAM,CAAC,KAAM,QAChE6gQ,EAAIj5J,OAAO,4CAGb6rG,IACFA,EAAWzzM,MAAM,CAAC,KAAM,OACpB6gQ,EAAIvxQ,MAAM,CAAC,2CAAwB,MAAOmkN,EAAWzzM,MAAM,CAAC,KAAM,QAClE6gQ,EAAIj5J,OAAO,6CAEb/iB,IACFA,EAAO7kF,MAAM,CAAC,KAAM,UAChB6gQ,EAAIvxQ,MAAM,CAAC,SAAU,MAAOu1F,EAAO7kF,MAAM,CAAC,KAAM,WAChD6gQ,EAAIj5J,OAAO,WAEbgO,IACFA,EAAU51G,MAAM,CAAC,KAAM,UACnB6gQ,EAAIvxQ,MAAM,CAAC,YAAa,MAAOsmH,EAAU51G,MAAM,CAAC,KAAM,WACtD6gQ,EAAIj5J,OAAO,cAEb+uG,IACFA,EAAW32M,MAAM,CAAC,KAAM,UACpB6gQ,EAAIvxQ,MAAM,CAAC,aAAc,MAAOqnN,EAAW32M,MAAM,CAAC,KAAM,QACxD6gQ,EAAIj5J,OAAO,eAEby0B,IACFA,EAAar8H,MAAM,CAAC,KAAM,UACxB6gQ,EAAIvxQ,MAAM,CAAC,QAAS,MAAO+sI,EAAar8H,MAAM,CAAC,KAAM,WACrD6gQ,EAAIj5J,OAAO,UAEX4O,IACFA,EAASx2G,MAAM,CAAC,KAAM,UACpB6gQ,EAAIvxQ,MAAM,CAAC,WAAY,MAAOknH,EAASx2G,MAAM,CAAC,KAAM,QACpD6gQ,EAAIj5J,OAAO,gBAKd1iG,SAAQ,SAACxhB,GACR,OAAOA,EAAIs0E,QAAQ,IAAI99B,OAAO,eAAM,KAAM,QAE3CnvC,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBAEGsxG,EAAU2pU,EAAqBn3b,KACjC,CAAE,IAAOm3b,EAAqB30a,QAC9B,GAEN8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,IAERgnZ,EAAwBxkE,EAASjjlB,K,EAI9B6oW,gBAAkB,WACvB,MAOI,EAAK9pU,MANPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAoijB,EAHF,EAGEA,QACA/7O,EAJF,EAIEA,uBACAugT,EALF,EAKEA,wBACA3+S,EANF,EAMEA,aAGFtpU,EACE8/B,YACEy6Z,EACA,KAIJv6b,EAASggC,YAAMu6Z,IACfjxH,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,IAERgnZ,EAAwBxkE,EAASx7kB,kB,wDA1KnC,SAA0ByrG,EAAW4yJ,GACnC,MAUIjxQ,KAAKkqC,MATPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WACAq5P,EAHF,EAGEA,YACAgiP,EAJF,EAIEA,qBACAu8D,EALF,EAKEA,qBACAr+S,EANF,EAMEA,mBACAQ,EAPF,EAOEA,cACAjzC,EARF,EAQEA,iBACAD,EATF,EASEA,cAGEr3N,GAASA,IAAS0T,EAAU1T,OAC9B6pQ,EAAY,GAAIgiP,GAChBv0R,IACAD,IACA+wV,EAAqBv8D,IAGnBx2lB,KAAKkqC,MAAM8onB,qBAAuBhzpB,KAAKkqC,MAAM8onB,mBAAmB5tpB,OAAOi5G,EAAU20iB,qBAA8C,IAAvB99S,EAAcn5W,MACxH24W,EAAmB10W,KAAKkqC,MAAM8onB,mBAAmBjvpB,IAAI,WAGnDo3G,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,YAChEn7G,KAAKs8T,SAASnhN,IACJA,GAAckD,EAAUlD,YAClCn7G,KAAKg0W,oB,oBAkJT,WACE,MAkBIh0W,KAAKkqC,MAjBPS,EADF,EACEA,SACAuuC,EAFF,EAEEA,QACAyxB,EAHF,EAGEA,KACAg4N,EAJF,EAIEA,aACA40R,EALF,EAKEA,YACAl1R,EANF,EAMEA,aACAm0R,EAPF,EAOEA,qBACAhiP,EARF,EAQEA,YACA13N,EATF,EASEA,cACA1f,EAVF,EAUEA,WACArxG,EAXF,EAWEA,EACAonT,EAZF,EAYEA,YACAK,EAbF,EAaEA,aACA46Q,EAdF,EAcEA,QACAnkJ,EAfF,EAeEA,uBACA30F,EAhBF,EAgBEA,UACA29S,EAjBF,EAiBEA,UAGIv7D,EAAgBH,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GAC7C,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GACpCA,EAAajwlB,IAAI,KAAMs4F,GACvB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAG5C,OAAO8yB,EAAI9sI,KAAKmyQ,KACftmQ,kBAEGi7oB,EAAqB//U,EAAcl7T,eAAK,CAACmR,iBAAO,CAAE6X,GAAI,KAAMvlC,MAAO,QAAS4P,OAAO6nU,EAAY9mU,OAAS4L,eAAK,CAACmR,iBAAO,CAAE6X,GAAI,KAAMvlC,MAAO,QACxIy3pB,EAAiB/kE,EAAUzgR,mBAAmBA,mBAAiBpiU,QAAO,SAAAk6F,GAAM,OAAyB,IAArBA,EAAO1hG,IAAI,SAEjG,OACE,cAAC,IAAD,CACEq1E,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC,IAAD,CACE/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKGsuZ,GACC,cAAC,IAAD,CACEzwX,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,aACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO,2BACP44E,QAAS,SACTC,WAAY,CACV1T,MAAO,kBASnB,cAAC,IAAD,CACEyT,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,oCAEL,eAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk6kB,+BAJrB,UAME,cAAC,IAAD,CACEx5kB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,wCACTy0O,cAAc,EACd7mJ,WAAY,CACV1T,MAAO,gBAKf,cAAC,IAAD,CACErsB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,qCACTy0O,cAAc,EACd7mJ,WAAY,CACV1T,MAAO,mBAQjB,cAAC,IAAD,CACEyT,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,gCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACk8e,EAA0Bz5e,KACrCnjC,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACk8e,EAA0Bz5e,KACrCnjC,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,gBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,EAAyB70P,KACpCnjC,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,gBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,EAAyB70P,KACpCnjC,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,6CACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,6BACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,8BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,8CACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,6BACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,2BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,YACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASmnnB,EAAe50oB,OACxBysG,YAAaj/F,EAAE,+BACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UASnBu0e,GACE,qCACE,cAAC,IAAD,CACE10e,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,kCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASknnB,EAAmB30oB,OAC5BysG,YAAaj/F,EAAE,sCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,aAUzBu0e,GAAW6kE,EAAU1ppB,SAASo4C,IAASC,WACvC,qCACE,cAAC,IAAD,CACE83D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAO,OAAEwnS,QAAF,IAAEA,OAAF,EAAEA,EAAcj1T,OACvBysG,YAAaj/F,EAAE,mCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,aAUzB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,WACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,qCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,6BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASoxF,EAAW7+G,OACpBysG,YAAaj/F,EAAE,iCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,2BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,cACL07B,MAAO,CACLpJ,MAAO/U,EAAE,yBACT4tF,WAAY,CACVz5G,KAAM,OACNs7G,SAAU,SAACpzG,GACJA,EAAE4kB,OAAOtxB,OACZivC,EAASu/B,YAAOg7Z,EAAyB,SAAU,OAIzDtrX,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,eAhiBdw7P,S,GA/NgB7wU,aA61BhBwwC,sBACbgG,aAlFa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAS,GAAD,OAfa,IAeb,OAEV3gC,QAAS,CACP41E,OAAO,oBACPg2L,UAAW,QAEb4vD,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCgyF,gBAAiB,CACf96P,UAAW,GAEb82iB,+BAAgC,CAC9B92iB,UAAWphC,EAAMZ,WAEnBm8R,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,eAgDvCtI,mBA3CsB,SAAC73E,EAAOyF,GAC9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOynX,EACrD,OAAO,aACLznX,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACbk1e,qBAAsBptiB,eACtB8rT,cAAen6N,cACf5vF,QAASH,cACT8xF,cAAeD,eACfzf,WAAY8f,cACZi2L,YAAaurB,cACblrB,aAAcmrB,cACdsrG,uBAAyBplZ,cACzBoumB,UAAW9xmB,gBAXVrO,CAYA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACL6pU,YAAa,SAACh3O,EAAoBlxE,GAChC3hB,EAAS,IAAImwB,KAAiC,CAAC0iE,aAAYlxE,eAE7D21Q,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfgjQ,cAAe,WACbr3R,EAAS,IAAIy0B,MAEf2zlB,qBAAsB,SAACzmmB,GACrB3hB,EAAS,IAAIutB,KAAoB,CAAC5L,eAEpCooT,mBAAoB,SAAChuT,GACnB/b,EAAS,IAAI6uB,KAAyB,CAAC9S,aAEzC/b,eAOF2sP,YAAmC,CAAEt2B,SAAUkkO,IAC/C39J,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUb09kB,I,8BC77BF,yBAGIrjf,EAAgC,iBAAXn0K,SAAuBA,UAAYA,QAAQkM,UAAYlM,QAG5Eo0K,EAAaD,GAAgC,iBAAVp0K,GAAsBA,IAAWA,EAAOmM,UAAYnM,EAMvFu0K,EAHgBF,GAAcA,EAAWp0K,UAAYm0K,GAGtBL,IAAW/gJ,QAG1CwhJ,EAAY,WACd,IAEE,IAAIC,EAAQJ,GAAcA,EAAWn0K,SAAWm0K,EAAWn0K,QAAQ,QAAQu0K,MAE3E,OAAIA,GAKGF,GAAeA,EAAYG,SAAWH,EAAYG,QAAQ,QACjE,MAAOxnK,KAXK,GAcDsnK,Q,2iBCkGFj3C,EAAgB,SAAC,GAKvB,IAJLzB,EAII,EAJJA,QACArsF,EAGI,EAHJA,SACA01J,EAEI,EAFJA,QACAgzd,EACI,EADJA,qBAEAA,GAAqB,GACrB,IAAMp5hB,EAA0B,MAAXjD,EACfqpE,EAAQt8L,IAAI,YAAYiiB,WACtB,SAACstoB,GAAD,OAAmCA,EAAevvpB,IAAI,QAAUizH,EAAQjzH,IAAI,UAE7E,GAEe,IAAlBk2H,IACFtvF,EACI,IAAI0wD,KAAoB,CACtBy+B,UAAWumE,EAAQt8L,IAAI,MACvBs8L,QAASA,EAAQ/vL,OAAO,WAAY2H,kBAChC,SAAC00V,GAAD,OAEIA,EAAYz9V,OAAO+qH,MAE3Bmsf,WAAW,EACXm1B,kBAAkB,EAClBpxP,UAAW,WACTkpQ,GAAqB,OAI7B1onB,EAAS,IAAIwyD,OAGJuljB,EAAyC,SAACl5U,EAAD,GAM/C,IALLv/Q,EAKI,EALJA,OACAyzD,EAII,EAJJA,UACAsZ,EAGI,EAHJA,QAGI,IAFJjqE,mBAEI,aADJwmmB,kBACI,SACE3Q,EAAkB,OAAX34lB,EACPk6X,EAAWzmU,IAAcv+E,iBAAekB,OAE9C,GAAkB,0BAAdmpS,GAAyC+pV,EAAY,CACvD,GAAIxmmB,EACF,OAAI61lB,EACK5rhB,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,SACpHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QAE5GxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QAI3H,IAAMq5U,EAAa1+N,EACjBntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,SACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,SAChHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,SAC7GxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QAQrH,OAPyBo5U,EACrBC,EACA1+N,EACEntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,SACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,SACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,QAGzH,GAAIz8Q,EACF,OAAI61lB,GACK5rhB,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAEjDxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAI5D,IAAMgqV,EAAWrvO,EACbntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAClLxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAMpH,OALeo5U,EACX4Q,EACArvO,EACEntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAKhHiqV,EAAc,SAAC,GAAuD,IAArD5mmB,EAAoD,EAApDA,cAAemqE,EAAqC,EAArCA,QAAS+2J,EAA4B,EAA5BA,QAASvwL,EAAmB,EAAnBA,OAAQn0C,EAAW,EAAXA,KACrEo9C,IAAmB9rE,kBAAgB+4nB,qBAAsB7mmB,EAAc,CACrEmoQ,SAAU,QACV97L,cAAelC,EAAQjzH,IAAI,iBAC3BqzH,SAAUJ,EAAQjzH,IAAI,gBACtB8gX,oBAAqB7tP,EAAQjzH,IAAI,SACjCy5F,SACA0hU,SAAU71W,EAAKtlD,IAAI,QACnBmyG,UAAW63K,EAAQhqR,IAAI,MACvBmoR,YAAa6B,EAAQhqR,IAAI,QACzB4vpB,eAAgB5lY,EAAQhqR,IAAI,WAC5B6vpB,kBAAkB,MAGhBC,G,4MACG7snB,MAAQ,CACbw2T,OAAO,EACP5zJ,OAAQ,EACRkqd,iBAAiB,G,EAGZ7lS,kBAAoB,WACzB,EAAKrrQ,SAAS,CAACkxiB,iBAAkB,EAAK9snB,MAAM8snB,mB,EAGvCl7hB,WAAa,SAACL,IAInB5tF,EADI,EAAKT,MADPS,UAEO,IAAI01F,KAAwB,CAAC9H,kB,EAGjCw7hB,eAAiB,WACtB,MAKI,EAAK7pnB,MAJP8sF,EADF,EACEA,QACArsF,EAFF,EAEEA,SACA01J,EAHF,EAGEA,QACAgzd,EAJF,EAIEA,qBAEF56hB,EAAc,CAAEzB,UAASrsF,WAAU01J,UAASgzd,0B,EAGvCW,QAAU,WACf,EAAKpxiB,SAAS,CAAC46O,OAAO,K,EAGjBy2T,SAAW,WAChB,EAAKrxiB,SAAS,CAAC46O,OAAO,K,EAGjB02T,aAAe,WACpB,MAA0D,EAAKhqnB,MAAvD2iB,EAAR,EAAQA,cAAemqE,EAAvB,EAAuBA,QAAS+2J,EAAhC,EAAgCA,QAASvwL,EAAzC,EAAyCA,OAAQn0C,EAAjD,EAAiDA,KACjDoqmB,EAAY,CAAE5mmB,gBAAemqE,UAAS+2J,UAASvwL,SAAQn0C,U,EAGlDwvE,8BAAgC,WACrC,MAGI,EAAK3uF,MAFP8sF,EADF,EACEA,QACAnqE,EAFF,EAEEA,cAGF45C,IAAmB9rE,kBAAgBm+F,yBAA0BjsE,EAAc,CACzEksE,2BAA4B,MAC5BC,YAAa,cACbC,UAAWjC,EAAQjzH,IAAI,MACvBm1H,cAAelC,EAAQjzH,IAAI,iBAC3Bo1H,MAAOnC,EAAQjzH,IAAI,SACnB68B,aAAco2F,EAAQjzH,IAAI,gBAC1B0hG,OAAQuxB,EAAQjzH,IAAI,UACpByyH,UAAWQ,EAAQjzH,IAAI,iB,EAIpB2+oB,uCAAyC,SAACl5U,GAC/C,MAAsE,EAAKt/R,MAApE+f,EAAP,EAAOA,OAAQZ,EAAf,EAAeA,KAAM2tE,EAArB,EAAqBA,QAAS0yM,EAA9B,EAA8BA,wBAExBk5U,EAAkB,OAAX34lB,EAEb,GAJA,EAAuD8C,YAKrD,OAAI61lB,GACK5rhB,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAEjDxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAI5D,IACM26G,GADiC96X,EAAKzoC,MAAM,CAAC,UAAW,UAAW,QAAU8oT,EAAwB9oT,MAAM,CAAC,UAAW,UACzEue,iBAAekB,OAE7DwinB,EAAa1+N,EACfntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAClLxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WAMpH,OALeo5U,EACXC,EACA1+N,EACEntT,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,WACnHxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,QAAS4oT,EAAW,YAAcxyM,EAAQp2G,MAAM,CAAC,OAAQ,QAAS,KAAM4oT,EAAW,Y,4CAI3H,WAAiB,IAAD,OACd,EAGIxpU,KAAKgnC,MAFPw2T,EADF,EACEA,MACA5zJ,EAFF,EAEEA,MAGF,EAoBI5pM,KAAKkqC,MAnBPmf,EADF,EACEA,KACAg3I,EAFF,EAEEA,QACArpE,EAHF,EAGEA,QACA99C,EAJF,EAIEA,QACAyzO,EALF,EAKEA,gBACA1kN,EANF,EAMEA,OACAytR,EAPF,EAOEA,eACAy+R,EARF,EAQEA,YACAl6hB,EATF,EASEA,aACAZ,EAVF,EAUEA,sBACAttG,EAXF,EAWEA,EACAysG,EAZF,EAYEA,YACA47hB,EAbF,EAaEA,iCACAzpnB,EAdF,EAcEA,SACA0pnB,EAfF,EAeEA,kBAEAxrmB,GAjBF,EAgBEoB,OAhBF,EAiBEpB,eAEAkE,GAnBF,EAkBE28Q,wBAlBF,EAmBE38Q,aAIA+mmB,EACE9zpB,KAAKgnC,MADP8snB,gBAGF,GAAe,MAAX98hB,EACF,OAAO,mDAKT,IAAMsC,EAA2BzwE,IAAkBkE,EAE7C8wF,EAAI,OAAGx0F,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,QACjBw1H,EAAwC,cAApB,OAAPvC,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,WAG1B2rU,EAEF,GAEJ,IALmC,CAAC,MAAO,QAAS,yBAMxChjU,SAAQ,SAACsoT,GACjB,IAAMtB,EAAS,EAAKgvV,uCAAuC1tV,GAC7C,MAAVtB,IACFgc,EAAQ1a,GAAY0gE,GAAkBztR,EAAOJ,QAAQ6rN,EAAQ,CAC3DptN,QAAS,OACTC,SAAU,UACVo6O,SAAS,EACT/3N,gBAAgB,EAChBC,WAAW,EACXC,WAAW,QAIjB,MAAO1gH,GACHwhM,EAAQ,GACV/wJ,YAAW,WACT,EAAK+pE,SAAS,CAACgnF,MAAOA,EAAQ,MAC7B,KAEL5hL,QAAQ08E,MAAM,iDAAmD,CAC/Dt8F,IACAwhM,QACA3hG,WAIJ,IAAMqsjB,EAAQ,WACZ,OAAK92T,EAIH,eAAC,IAAD,CAAMliP,MAAO,CAAC2B,SAAU,WAAYqX,IAAK,EAAG95G,MAAO,GAAnD,UACG25oB,GACD,cAAC,IAAD,CAASjqiB,MAAcn+F,EAAP8xH,EAAS,mCAAwC,8BAAjE,SACE,+BACE,cAAC,IAAD,2BACM8uK,GADN,IAEErzO,UAAU,MACVv9E,KAAK,QACLmhH,SAAU2gC,GAAQw2gB,EAJpB,SAME,cAAC,IAAD,CAAoBltiB,SAAS,iBAKnC,cAAC,IAAD,CAAS+C,MAAcn+F,EAAP8xH,EAAS,mCAAsCu2gB,EAAqC,qCAA0C,8BAA9I,SACE,uBAAM94iB,MAAO,CAAC+J,OAAQ,WAAtB,cACE,cAAC,IAAD,CACER,QAAS,kBAAM2T,EAAYxB,EAASiD,IACpC/c,SAAU2gC,GAAQu2gB,GAAoCC,EACtDt4pB,KAAK,QAHP,SAKE,cAAC,IAAD,CAAiBorH,SAAS,iBAIhC,cAAC,IAAD,CAAS+C,MAAcn+F,EAAP8xH,EAAS,mCAAwC,gCAAjE,SACE,+BACE,cAAC,IAAD,CACEh5B,QAAS,EAAKopQ,kBACdlyX,KAAK,QACLmhH,SAAU2gC,GAAQw2gB,EAHpB,SAKE,cAAC,IAAD,CAAYltiB,SAAS,gBAI3B,cAAC,IAAD,CACExc,KAAMmpjB,EACN7lS,kBAAmB,EAAKA,kBACxBD,SAAUh3P,EAAQjzH,IAAI,iBAAZ,UAAkCgoB,EAAE,yCAApC,YAAgFirG,EAAQjzH,IAAI,kBAAqB,kBAC3HmlU,aAAc,EAAK6qV,eACnBzlS,aAAa,OA7CV,MAoDLr4P,EAAQe,EAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAAzC,kBADE,GACF,YADE,IAGV21G,EAAcS,EAAQjzH,IAAI,SAC1ByyH,EAAYQ,EAAQjzH,IAAI,aAE9B,OACE,cAAC,IAAD,CACEm1E,QAAS,CACP3hE,KAAM2hE,EAAQqgV,eAEhBtoS,UAAWusO,EAAQ,EAAI,EACvBnoO,aAAcr1H,KAAKg0pB,QACnB1+hB,aAAct1H,KAAKi0pB,SANrB,SAQE,eAAC,IAAD,CAAa76kB,UAAWF,EAAQqsC,YAAhC,UACE,cAAC+uiB,EAAD,IACA,eAAC,IAAD,CACE96kB,WAAW,EACXP,WAAW,aACXuB,KAAK,SACLF,QAAS,EACTlB,UAAWF,EAAQqhT,cALrB,UAOE,cAAC,IAAD,CAAM3gT,MAAM,EAAZ,SACE,cAAC,IAAD,CACE4sC,IAAKyP,GAAS,GACd36C,MAAK,UA3BD,GA2BC,MACLurC,YAAa,OACbC,aAAa,MAGjB,eAAC,IAAD,CACEltC,MAAM,EACN0hC,MAAO,CAAC+O,SAAU,QAFpB,UAKIkM,GACE,cAAC,IAAD,CAAMn9C,UAAWF,EAAQu8C,WAAzB,SACE,cAAC,IAAD,CACEe,UAAWA,MAInB,cAAC,IAAD,CACEtM,MAAO8M,EAAQjzH,IAAI,SACnBomH,UAAU,YAFZ,SAIE,cAAC,IAAD,CACEzQ,QAAQ,QACRzT,MAAM,UACNse,QAAQ,EAHV,SAKGyS,EAAQjzH,IAAI,aAIjB,cAAC,IAAD,CACEmmH,MAAO8M,EAAQjzH,IAAI,iBACnBomH,UAAU,YAFZ,SAIE,cAAC,IAAD,CACEzQ,QAAQ,QACR6K,QAAQ,EAFV,SAIGyS,EAAQjzH,IAAI,qBAIjB,cAAC,IAAD,CACEmmH,MAAO8M,EAAQjzH,IAAI,gBACnBomH,UAAU,YAFZ,SAIE,cAAC,IAAD,CACEzQ,QAAQ,QACR6K,QAAQ,EAFV,SAIGyS,EAAQjzH,IAAI,oBAGjB,eAAC,IAAD,CAAage,UAAU,IAAvB,UACG2tT,EAAO,OACR,cAAC,IAAD,CAAMtiN,KAAMsiN,EAAO,MAAW7qN,QAAS7kH,KAAKk0pB,aAA5C,SAA2DnooB,EAAE,0BAC5D2jT,EAAO,KAAW,cAAC,IAAD,CAAMtiN,KAAMsiN,EAAO,IAAnB,SAA6B3jT,EAAE,wBACjD2jT,EAAO,uBACR,cAAC,IAAD,CAAMtiN,KAAMsiN,EAAO,sBAAnB,SAA+C3jT,EAAE,sCAKrD88B,IAAkBkE,GAChB,sBAAK83D,QAAS7kH,KAAK64H,8BAAnB,UACE,cAAC,IAAD,CAASz/C,UAAWF,EAAQq2R,UAC5B,cAAC,IAAD,CAASrlP,MAAOoP,EAA2B,GAAKvtG,EAAE,sDAAlD,SACE,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,SACRf,aAAa,SACbK,UAAWF,EAAQq7kB,qBACnBj5iB,MAAO,CACL+J,OAAQiU,EAA2B,UAAY,OAC/CrzB,MAAOqzB,EAA2B,GAAK,aAEzCzU,QAAS,SAACz8G,GACJkxH,IACF3uF,EAAS,IAAIowD,KAAgCslG,EAAQt8L,IAAI,QACzD4mC,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAI44F,IACJ3vF,MAAO,CACLszD,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,UAAWumE,EAAQt8L,IAAI,MACvBk1H,UAAWjC,EAAQjzH,IAAI,MACvBg2H,WAAY/C,EAAQjzH,IAAI,cACxBi2H,cAAehD,EAAQjzH,IAAI,iBAC3Bk2H,aAAcA,EACd9G,SAAU/qH,EAAEs8G,cACZwV,mBAAoBlD,EAAQjzH,IAAI,iBAChCo2H,WAAYnD,EAAQjzH,IAAI,SACxBq2H,aAAcpD,EAAQjzH,IAAI,WAC1Bs2H,kBAAmBrD,EAAQjzH,IAAI,gBAC/Bu2H,gBAAiBtD,EAAQjzH,IAAI,YAC7Bw2H,eAAgBhB,EAChBiB,+BAAgCjB,QA5B1C,UAkCI,cAAC,IAAD,CAAYtzB,MAAOqzB,EAA2B,UAAY,UAA1D,SACGvtG,EAAE,wCAGHirG,EAAQjzH,IAAI,mBAAqBs1H,EAC3B,cAAC,IAAD,CAAgBpzB,MAAM,YACtB,cAAC,IAAD,CAAgBA,MAAOqzB,EAA2B,UAAY,6B,GA5V9C70F,aAmd/BwwC,sBACb00C,cACA1uC,aA5Ga,SAACC,GAAD,MAA+B,CAC5Cs5kB,YAAa,CACXxrT,WAAY,UAEdruO,WAAY,CACVr/C,MAAO,MACPi2C,OAAQ,OAEV/3C,UAAW,CACTsC,QAAS,QAEXypC,YAAa,CACXtI,SAAU,WACV3hC,MAAO,IACPQ,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B43C,cAAc,iBACd92C,QAAS,OACTK,cAAe,SACfC,eAAgB,iBAElB+4kB,iBAAkB,CAChB34kB,QAASZ,EAAMZ,UACfe,SAAU,SACVC,MAAO,QAETotX,YAAa,CACXr1U,aAAgC,EAAlBn4C,EAAMZ,WAEtB4+C,cAAe,CACb/R,SAAU,QAEZutiB,8BAA+B,CAC7BxtT,UAAW,aACX9rR,QAAS,OACTK,cAAe,MACfC,eAAgB,YAElB89C,iBAAkB,CAChBj+C,OAA0B,KAAlBL,EAAMZ,UACdkB,SAAU,QACVF,MAAO,QACPgB,SAAU,QACV,gBAAiB,CACf4rC,WAAY,GAEd,eAAgB,CACd1G,YAAa,EACb6R,aAAc,IAGlBkmS,cAAe,CACbh+U,OAAQL,EAAMZ,QAAQ,GACtBugD,OAAQ,+BACR/+C,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7Bc,QAAS,QAEXm/S,cAAe,CACblnQ,aAAcn4C,EAAMZ,QAAQ,IAE9Bi1R,QAAS,CACPl8O,aAAcn4C,EAAMZ,QAAQ,IAE9Bi6kB,qBAAsB,CACpBriiB,cAAeh3C,EAAMZ,WAEvBm7C,WAAY,CACVpC,aAAcn4C,EAAMZ,eA2CtBn7B,YAAgB,gBAChBgwE,IACAtQ,mBAzC0B,WAC1B,IAAM81iB,EAAoBp3c,YAAsB,aAC1Cq3c,EAAgBjqc,cAChBipb,EAAal+f,cACbm/gB,EAA0Bl/gB,cAC1Bm/gB,EAAa75hB,cACb85hB,EAAa/2X,aAAW,SAAC38F,EAAWvnE,GACxC,OAAOunE,GAAaA,EACjBt9L,IAAI,WAAYkU,kBAChB0J,MAAK,SAAC0+K,GAAD,OAA4BA,EAAQt8L,IAAI,QAAU+1H,QAEtD+yQ,EAAqBrxQ,YAA+B3B,KACpDm7hB,EAAehrmB,cACfirmB,EAAmCp/gB,cACnCq/gB,EAAsBvsmB,cACtBwsmB,EAAiBv0mB,cACvB,OAAO,SAAyB5Z,EAAzB,GAA8F,IAA7D8yF,EAA4D,EAA5DA,UAEhCunE,EADOyzd,EAAW9tnB,KACGvM,OAAKghG,OAASo5hB,EAAwB7tnB,GAAS4smB,EAAW5smB,GAE/EqyF,EADewzQ,EAAmB7lW,GACGgzF,cACrCjtE,GAAeoomB,EAAenunB,GACpC,MAAQ,CACN0uV,eAAgBi/R,EAAkB3tnB,GAClCq5J,QAAS00d,EAAW1zd,EAAWvnE,GAC/Bi0J,QAAS6mY,EAAc5tnB,IAAU5d,iBAAO,IACxCigC,KAAMuqlB,EAAW5smB,GACjBqyF,wBACApvE,OAAQ+qmB,EAAahunB,GACrB0iS,wBAAyBurV,EAAiCjunB,GAC1D6hB,cAAeqsmB,EAAoBlunB,GACnC+lB,mBAKSkoB,CAMb4+kB,K,uGClnBUnpD,E,qJC3EG,MAA0B,8C,8HCE1Bvne,eAAQ,kBAAM,oC,qECFd,MAA0B,oC,yECwB5BiyhB,GAA2B,wBA0ClCC,G,4MACGrunB,MAAQ,CACbsunB,YAAY,EACZC,iBAAkB,G,EAebC,YAAc,WACnB,MAOI,EAAKtrnB,MANPm4R,EADF,EACEA,aACAnpP,EAFF,EAEEA,QACAgC,EAHF,EAGEA,MACAnvD,EAJF,EAIEA,EACAovF,EALF,EAKEA,WACA8iN,EANF,EAMEA,YAGIw3V,EAAWt6iB,GAAcA,EAAWp3G,IAAI,YACxCowT,IAAuBshW,GAAWA,EAASthW,YAEjD,OACE,uBAAMmI,SAAU+F,EAAa,EAAKmyD,YAAap7S,UAAWF,EAAQzC,KAAlE,SACE,gBAACoC,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACE,gBAACb,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+X,aAAcn4C,EAAMZ,QAAQ,IAAvD,UACE,eAACk/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAAU7sB,UAAWF,EAAQgxC,MAAjE,SAAyEn+F,EAAE,qCAC3E,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVc,KAAK,SACLV,QAAQ,SACRwhC,MAAO,CAACiW,OAAQr2C,EAAMZ,QAAQ,KANhC,SAQE,eAAC,QAAD,CACEhB,UAAWqqP,IACXn1T,KAAK,WACL07B,MAAQ,CACNgmU,cAAe,CACbl9C,OAAQ,YAGZh5M,SAAU4pN,+BAIhB,eAAC26Q,EAAA,EAAD,CACEl5G,SAAUt5c,EAAE,8BACZmxF,SAAUi3M,EACVgxK,cAAehxK,EACfjtL,YAAa+2L,U,EAOhBu2D,W,uCAAa,WAAOkhS,GAAP,mCAAA/vpB,EAAA,2DAMd,EAAKukC,MAJP+9D,EAFgB,EAEhBA,OACA0tjB,EAHgB,EAGhBA,wBACA5poB,EAJgB,EAIhBA,EACA+1Z,EALgB,EAKhBA,iBAGI2zO,EAAYC,EAAS3xpB,IAAI,YARb,sBAUV,IAAI6xpB,IAAgB,CACxBH,SAAU1poB,EAAE,wCAXE,uBAeOqxS,YAAI,CAACn1N,SAAQtK,MAAO83jB,IAf3B,OAeZp4V,EAfY,OAgBZ5pG,EAAO4pG,EAAW,GAClB3J,EAASjgG,EAAKxyL,GACd0iZ,EAAYjqZ,kBAAgB6vZ,YAC5Br/T,EAAQupG,EAAKoic,aAEnB/zO,EAAiB6B,EAAWz5T,EAAOwpM,GACnCiiW,IACA,EAAK/yiB,SAAS,CACZ0yiB,YAAY,EACZC,iBAAkB,EAAKvunB,MAAMuunB,iBAAmB,IAzBhC,4C,wDA6BbO,iBAAmB,WACxB,MAII,EAAK5rnB,MAHPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACA4+C,EAHF,EAGEA,MAGM4qlB,EAAqB,EAAKvunB,MAA1BuunB,iBAEFQ,EAD2B,IACDR,GAAiDA,EADhD,EAEjC,OACE,gBAAC18kB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAASG,UAAWF,EAAQ88kB,iBAAjF,UACE,sBAAKxviB,IAAK8qM,IACV,eAAC93M,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,yCAC5B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,iCACjC,eAACk+F,EAAA,EAAD,CACEC,MAAO6riB,EAA0B,sDAAwD,GACzF5riB,UAAU,SACV7O,MAAO,CAAC+J,OAAQ,WAHlB,SAKE,+BACE,eAACV,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WACPl6C,IACA,EAAKi4C,SAAS,CAAE0yiB,YAAY,KAE9Bp4iB,SAAU64iB,EANZ,SAQGhqoB,EAAE,4C,uDAvHf,WACE/rB,KAAK4iH,SAAS,CACZ2yiB,iBAAkBv1pB,KAAKkqC,MAAMqrnB,qB,gCAIjC,SAA0Bl3iB,GACpBr+G,KAAKkqC,MAAMqrnB,mBAAqBl3iB,EAAUk3iB,kBAC5Cv1pB,KAAK4iH,SAAS,CAAC2yiB,iBAAkBv1pB,KAAKkqC,MAAMqrnB,qB,oBAwHhD,WACE,MAIIv1pB,KAAKkqC,MAFPixE,GAFF,EACEpvF,EADF,EAEEovF,YACA8iN,EAHF,EAGEA,YAIAq3V,EACEt1pB,KAAKgnC,MADPsunB,WAGIG,EAAWt6iB,GAAcA,EAAWp3G,IAAI,YACxCowT,IAAuBshW,GAAWA,EAASthW,YACjD,OACE,uCACE,eAACoP,EAAA,EAAD,CACEr5M,MAAM,mBACNm2R,kBAAkB,EAClBC,mBAAoBnsF,EACpBjtL,YAAa+2L,IAGbq3V,EACE,oBAAMQ,iBAAN,IACA,oBAAMN,YAAN,W,GA9JoB/wnB,aAqK1BmI,GAAkBkG,YAAyB,CAC/CqoE,WAAYC,wBAAcg6iB,MAoBbnglB,qBACb00C,eACA1uC,aApNa,SAACC,GAAD,MAAmB,CAChC+6kB,oBAAqB,CACnB/tiB,WAAYhtC,EAAMZ,UAClB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B1uC,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B+E,MAAO,CACLmJ,aAAcn4C,EAAMZ,UACpBc,QAAS,SAEX86kB,eAAgB,CACd75kB,SAAU,GAEZ25kB,iBAAkB,CAChBl6kB,QAASZ,EAAMZ,QAAQ,IAEzB00L,iBAAkB,CAChB/oK,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,YAgMT,CAAE6J,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQjyE,IArBiB,SAACjC,GAAD,MAAwC,CACjEA,WACAgrnB,wBAAyB,WACvBhrnB,EAAS,IAAI4K,MAEf0oR,YAAa,WACXtzR,EAAS,IAAI0J,IAA6B,CAAEs2D,MAAM,EAAO1pE,GAAIk1nB,OAE/Dr0O,iBAAkB,SAAC6B,EAA4Bz5T,EAAewpM,GAC5D/oR,EAAS,IAAI4iL,IAAuB,CAClCo2N,YACAz5T,QACAwpM,iBAUJp8B,YAAmC,CAAEt2B,SAAUo0Z,KAC/C7tV,oBAAU,CACR9pN,KAAM23iB,GACN5tV,kBAAkB,EAClBC,oBAAoB,EACpBnpN,cAAe,CACbm3iB,SAAU,QAXDxglB,CAcboglB,I,mBCxQalyhB,gBAAQ,kBAAM,oCCAdA,gBAAQ,kBAAM,oC,+BNuEhBizhB,GAAyB,mBACzBD,GAAsB,uB,SACvBzrD,K,cAAAA,E,UAAAA,E,UAAAA,E,eAAAA,M,KA4BZ,IACM2rD,G,4MACGrvnB,MAAQ,CACbsvnB,UAAW,G,EAqCNC,iBAAmB,YAKxB5rnB,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIu1nB,IACJ7rjB,MAAM,M,uDAzCV,WACE,MASI3qG,KAAKkqC,MARP83Y,EADF,EACEA,eACA7lF,EAFF,EAEEA,QACAs6T,EAHF,EAGEA,UACAzlB,EAJF,EAIEA,mBACAxziB,EALF,EAKEA,OACAn0C,EANF,EAMEA,KACA+7iB,EAPF,EAOEA,WACA3nB,EARF,EAQEA,aAGIi5E,EAAsBrtmB,EAAKzoC,MAAM,CAAC,YAAa,SAAU,OAE3DwklB,GACFjpQ,EAAQipQ,GAEN3nB,GACFg5E,EAAUh5E,GAGZg5E,EAAUC,GACV10O,IACAgvN,EAAmBxziB,EAAQ9jE,kBAAgB6vZ,e,kCAG7C,YAKEotO,EAFI32pB,KAAKkqC,MADPysnB,6BAGyB,K,oBAc7B,WAAiB,IAAD,OACd,EAOI32pB,KAAKkqC,MANPgvC,EADF,EACEA,QADF,KAEEgC,MAFF,EAGEvwC,SAHF,EAIEm5Y,oBAJF,MAIgB7ra,iBAJhB,EAKE2+oB,EALF,EAKEA,SACA7qoB,EANF,EAMEA,EAIAuqoB,EACEt2pB,KAAKgnC,MADPsvnB,UAIIO,EAAoB/yO,EAAYv4a,QAAO,SAAAurpB,GAAU,OAAIA,EAAW/ypB,IAAI,eACpEgzpB,EAF2B,IAEFF,EAAkB96pB,MAAqC86pB,EAAkB96pB,KAFvE,EAIjC,OACE,uCACE,uBAAMu/G,MAAO,CAAEh/B,SAAU,QAAzB,SACE,gBAAC,IAAD,WACE,eAAC06kB,EAAA,EAAD,CACE9siB,MAAOn+F,EAAE,yCACT40G,YAAa50G,EAAE,gCACfwiV,SAAU,CAAC,MAAO,aAClBH,eA7ES,4BA8ETE,UAAWviV,EAAE,mCACbsiV,UAAW4oT,IAGb,gBAACp+kB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SAFb,UAIE,eAAC0rC,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAC0ziB,UAAW,KACzCl9kB,UAAyB,IAAdk9kB,EAAkBp9kB,EAAQg+kB,kBAAoBh+kB,EAAQi+kB,0BAFnE,SAIE,gBAACt+kB,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYE,QAAQ,SAAStgC,UAAWF,EAAQk+kB,gBAAhD,SAAkErroB,EAAE,4BACpE,eAACytF,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQm+kB,mBAAnD,SAAwEtroB,EAAE,2CAG9E,eAAC,IAAD,CACEqtD,UAAyB,IAAdk9kB,EAAkBp9kB,EAAQo+kB,WAAap+kB,EAAQq+kB,iBAC1Dj8iB,MAAO,CAAC+gB,UAAW,qBAErB,eAAC,IAAD,CACEjjD,UAAyB,IAAdk9kB,EAAkBp9kB,EAAQo+kB,WAAap+kB,EAAQq+kB,iBAC1Dj8iB,MAAO,CAAC+gB,UAAW,sBAErB,eAAC1X,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAC0ziB,UAAW,KACzCl9kB,UAAyB,IAAdk9kB,EAAkBp9kB,EAAQs+kB,WAAYt+kB,EAAQg+kB,kBAF3D,SAIE,gBAACr+kB,EAAA,EAAD,WACE,eAACktP,EAAA,EAAD,CAAMjlS,MAAO/U,EAAE,wBAAyBk6E,MAAM,UAAU7sB,UAAWF,EAAQu+kB,UAC3E,eAACj+iB,EAAA,EAAD,CAAYE,QAAQ,SAAStgC,UAAWF,EAAQk+kB,gBAAhD,SAAkErroB,EAAE,4BACpE,eAACytF,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQm+kB,mBAAnD,SAAwEtroB,EAAE,6CAIhE,IAAduqoB,EACE,gBAACz9kB,EAAA,EAAD,CAAMyiC,MAAO,CAACx/B,QAAS,OAAvB,UACE,eAAC47kB,EAAA,EAAD,CACE5zO,YAAaA,EACb9iL,SAAUo1Z,GACVuB,kBAAmBZ,EACnBpzO,UAAWjqZ,kBAAgB6vZ,cAI7B,gBAAC1wW,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ0+kB,UAArC,UACE,eAACp+iB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,iCAC/C,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,eAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO,QACPmlE,MAAO,UACPu6J,aAAckqW,EAAMmtD,WAI1B,eAACh/kB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO,MACPmlE,MAAO,UACPu6J,aAAckqW,EAAMotD,SAI1B,eAACj/kB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO,MACPmlE,MAAO,UACPu6J,aAAckqW,EAAMqtD,SAI1B,eAACl/kB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO,QACPmlE,MAAO,UACPu6J,aAAckqW,EAAMstD,iBAQ9B,gBAACn/kB,EAAA,EAAD,CAAMe,MAAM,EAAZ,UACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,sCAC/C,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,SAIE,eAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,2CACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,YAQtB,gBAACh0C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQ0+kB,UAA7C,UACE,eAACp+iB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,qCAC/C,gBAAC,QAAD,CACEvd,KAAK,iBACL8qE,UAAWiiC,IACXrxE,MAAO,CACLyvE,WAAY,CACVs+iB,cAAe,kBAAM,eAAC,KAAD,CAA8B7+kB,UAAWF,EAAQg/kB,aACtE58iB,MAAO,CACLgB,UAAW,OAEb67iB,kBAAkB,EAClBj/kB,QAAS,CACP3hE,KAAM2hE,EAAQ61P,aAXtB,UAgBE,eAACxyN,EAAA,EAAD,CAAU7gH,MAAO,iBAAjB,SAAoCqwB,EAAE,oCACtC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,kBAAjB,SAAqCqwB,EAAE,qCACvC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,eAAjB,SAAkCqwB,EAAE,kCACpC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,aAAjB,SAAgCqwB,EAAE,gCAClC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,qBAAjB,SAAwCqwB,EAAE,wCAC1C,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,gBAAjB,SAAmCqwB,EAAE,mCACrC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,uBAAjB,SAA0CqwB,EAAE,0CAC5C,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,mBAAjB,SAAsCqwB,EAAE,sCACxC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,iBAAjB,SAAoCqwB,EAAE,0CAK1C,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ0+kB,UAArC,UACE,eAACp+iB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,yCAC/C,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,eAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,iBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,6BACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,OAIlB,eAACh0C,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,qBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,2BACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,OAIlB,eAACh0C,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,mBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,yBACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,OAIlB,eAACh0C,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,kBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,6BACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,OAIlB,eAACh0C,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,kBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,8CACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAET4mB,YAAY,aAQtB,gBAACh0C,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ0+kB,UAArC,UACE,eAACp+iB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAC+X,aAAa,GAAjE,SAAsEtnG,EAAE,8CACxE,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,gBAAgBb,WAAW,aAAaqiC,MAAO,CAAC+X,aAAc,KAA7G,UACE,eAACx6C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQk/kB,kBAAtD,SACE,eAACC,GAAD,CAAiBzB,SAAUA,MAE7B,eAAC/9kB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQk/kB,kBAAtD,SACE,eAACE,GAAD,CAAoB1B,SAAUA,eAKtC,eAAC2B,EAAD,SAIR,eAAC,IAAD,CACEjpiB,SAAUkniB,IACVrE,cAAe,eAACqG,EAAA,EAAD,CAA0BpG,SAAUoE,IAAgB9nU,aAAc1uV,KAAKu2pB,iBAAkBkC,eAAe,MAEzH,eAAC,IAAD,CACEnpiB,SAAUoiiB,KACVS,cACE,eAAC,IAAD,CACEC,SAAUV,SAIhB,sBAAKp2iB,MAAO,CAAChgC,MAAO,EAAG+uC,SAAU,UAAjC,SACE,eAAC,IAAD,CACEiF,SAAU6miB,GACV91Q,kBAAkB,EAClB8xQ,cAAe,eAAC,GAAD,CAAmBoD,iBAAkBsB,EAAkB96pB,kB,GA5W3C0oC,aA8lBxBwwC,sBACbupgB,IACA3/d,mBA1FsB,SAAC73E,EAAOyF,GAC9B,IAAMq3Y,EAActtB,YAAsB98X,kBAAgB6vZ,YAAtC/yB,CAAmDxvX,GACjE0xnB,EAAap9gB,YAAiB,CAAEhvF,SAAU7f,EAASgxiB,cAAtCnic,CAAsDt0G,GACnE4vnB,EAAWp8gB,eAAqBxzG,GAChCw2D,EAAS29B,eAA2Bn0F,GACpCqiB,EAAOqsF,eAAiB1uG,GACxB2xnB,EAAmB14d,eAA4Cj5J,GAE/Do/E,EAAWwwiB,GAAYA,EAAS7ypB,IAAI,aAAe,GAEnD60pB,EAAgB,CADJhC,GAAYA,EAAS7ypB,IAAI,cAAgB,GACzBqiH,GAAU76G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,KAO1Do3oB,EAAkCF,GAAoBA,EAAiB58pB,KAAO,GAAK48pB,EAAiB3npB,eAAc,SAAAywQ,GAGtH,IAAMq3Y,EAAkBr3Y,EAAI19Q,IAAI,gBAEhC,QAAwBjI,KADAgob,GAAeA,EAAYnia,MAAK,SAAAy4V,GAAK,OAAIA,EAAMr2W,IAAI,QAAU+0pB,MAClD,CACjC,IAAMC,EAAoBj1O,GAAeA,EAAYlja,MAAM,CAAC,IAAK,OACjE6gQ,EAAI/5Q,IAAI,eAAgBqxpB,GAG1Bt3Y,EAAIj5J,OAAO,iBAEXi5J,EAAI/5Q,IAAI,UAAW0hB,iBAAO,CACxB6X,GAAIwL,EAAS24jB,WACbtkkB,MAAO83nB,EACPl9pB,MAAOk7pB,KAGTn1Y,EAAI/5Q,IAAI,qBAAqB,GAE7B,IAAMsxpB,EAAev3Y,EAAI7gQ,MAAM,CAAC,gBAAiB,KAAO,QAClDq4oB,EAAgBx3Y,EAAI7gQ,MAAM,CAAC,iBAAkB,KAAO,iBAI1D,GAHA6gQ,EAAI/5Q,IAAI,gBAAiBsxpB,GACzBv3Y,EAAI/5Q,IAAI,iBAAkBuxpB,GAEtBx3Y,EAAI19Q,IAAI,YAAa,CACvB,IAAM8sU,EAAapvD,EAAI19Q,IAAI,YACrBi0I,EAAWP,eAA6BzwG,GACxCk/E,EAAe8xB,GAAYA,EAASp3H,MAAM,CAAC,EAAE,iBAC7CulG,EAAY6xB,GAAYA,EAASp3H,MAAM,CAAC,EAAE,cAC1CwlG,EAAW4xB,GAAYA,EAASp3H,MAAM,CAAC,EAAE,aACzCs4oB,EAAgBhziB,GAAgB,CAACC,EAAWC,GAAU76G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,MAAQ,GAClFukG,EAAegyB,GAAYA,EAASj0I,IAAI,GAC9C09Q,EAAI/5Q,IAAI,WAAY0hB,iBAAO,CACzB6X,GAAI4vS,EACJ/vS,MAAOo4nB,EACPx9pB,MAAOsqH,SAKP1H,EAAgBq6iB,GAAoBA,EAAiB58pB,KAAO,EAC9D88pB,EACAzvoB,iBAAO,CACL+voB,aAAcr1O,GAAeA,EAAYlja,MAAM,CAAC,IAAK,OACrDw4oB,mBAAmB,EACnBC,gBAAgB,EAChBC,oBAAoB,EACpBC,iBAAiB,EACjBthhB,QAAS7uH,iBAAO,CACd6X,GAAIwL,EAAS24jB,WACbtkkB,MAAO83nB,EACPl9pB,MAAOk7pB,IAET4C,cAAe,QACfC,eAAgB,mBAEtB,OAAO,aACLn7iB,gBACAwlU,cACA40O,aACA9B,WACAp5jB,SACAn0C,OACAsvmB,oBACG7lnB,YAAyB,CAC1BqoE,WAAYC,wBAAcg7iB,KADzBtjnB,CAEA9L,OA7GoB,SAAC2D,GAC1B,MAAO,CACLA,WACAq3Y,eAAgB,WACdr3Y,EAAS,IAAI8jL,IAAqB/0L,kBAAgB6vZ,eAEpDptF,QAAS,SAACl7T,GACR0J,EAAS,IAAImyB,KAAkB,CAAE77B,SAEnCw1nB,UAAW,SAACnqmB,GACV3hB,EAAS,IAAIyuB,KAAiB9M,KAEhC0klB,mBAAoB,SAACxziB,EAAgBt9F,GACnCyqC,EAAS,IAAIqpD,IAAyB,CACpCwJ,SACAt9F,WAGJy2pB,2BAA4B,SAACzvnB,GAC3ByD,EAAS,IAAIwiL,IAAiCjmL,SAiGlDqgS,oBAAU,CACR9pN,KAAM24iB,GACN5uV,kBAAkB,EAClBC,oBAAoB,EACpB29S,yBAAyB,EACzBs0C,0BAA0B,IAE5Bv6mB,YAAgB,gBAChB87B,aArPa,SAACC,GAAD,MAA+B,CAC5Cs8kB,WAAY,CACVl8kB,MAAO,QACP0pC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzCnI,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQ+d,UAAU,MAC7Cvb,aAAcvsC,EAAMZ,QAAQ,IAC5BwB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,cAA6BY,EAAMZ,QAAQ,GAA3C,MACPiB,OAAQL,EAAMZ,QAAQ,GACtB6sC,SAAU,SACVlhB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/B,UAAW,CACThe,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KAAO,OAGlD+xiB,kBAAmB,CACjB57kB,MAAO,QACP0pC,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KAAO,KAC9C0V,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3CsC,aAAcvsC,EAAMZ,QAAQ,IAC5BwB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,cAA6BY,EAAMZ,QAAQ,GAA3C,MACPiB,OAAQL,EAAMZ,QAAQ,GACtB6sC,SAAU,SACV4N,cAAe,YACf9uB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7B,UAAW,CACTH,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KAAO,OAGlDgyiB,0BAA2B,CACzB77kB,MAAO,QACP0pC,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KAAO,KAC9C0V,OAAQ,wBACRpT,aAAcvsC,EAAMZ,QAAQ,IAC5BwB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,cAA6BY,EAAMZ,QAAQ,GAA3C,MACPiB,OAAQL,EAAMZ,QAAQ,GACtB6sC,SAAU,SACV4N,cAAe,YACf9uB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7B,UAAW,CACTH,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KAAO,OAGlDiyiB,gBAAiB,CACfjwiB,SAAU,SACVoV,WAAY,IACZt2B,MAAO,WAEToxjB,mBAAoB,CAClBpxjB,MAAO,WAETqxjB,WAAY,CACVnwiB,SAAU,SACVlhB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,MAEjCu0hB,iBAAkB,CAEhBtxjB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,MAE/BsyiB,QAAS,CACPx6iB,SAAU,WACVkK,SAAU,SACVoK,OAAQr2C,EAAMZ,QAAQ,GACtBi6C,OAAQ,MACR/5G,MAAO,QAETm/oB,YAAa,CACXjxhB,YAAaxtD,EAAMZ,QAAQ,IAE7B8qC,KAAM,CACJC,OAAQ,UACR9pC,OAAQL,EAAMZ,WAEhBirC,YAAa,CACXtI,SAAU,WAEVnhC,QAAS,EACTo2C,cAAc,gBAEhB0niB,WAAY,CACV99kB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5Bu/kB,aAAc,CACZpjiB,WAAY,SACZd,aAAc,WACdtL,SAAU,UAEZutiB,UAAW,CACTt7iB,UAAWphC,EAAMZ,QAAQ,IAE3BqhV,QAAS,CACPx0S,SAAU,OACVlhB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,MAEjCo1hB,kBAAmB,CACjB78kB,OAAQ,iBACRymD,KAAM,UACNxmD,SAAU,KAEZuzP,UAAW,CACTvtN,YAAa,QACbhmC,SAAU,IACZosC,aAAc,kBACZvC,OAAQ,UACR2b,OAAQ,GACR,UAAW,CACTpZ,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQE,QAAQ,OAEnD,UAAW,CACTH,gBAAiB,eAGnB,eAAgB,CACd/e,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,OAGnCk1hB,UAAW,CACTjyjB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/BhC,OAAQ,MAgIS,CAAChS,WAAU,IAXjB/5C,CAYbohlB,K,iBOltBWn7pB,EAAOC,QAAUC,EAAQ,OAC/BynR,GAAG/5H,KAAK1tJ,EAAQ,Q,iBCGf,SAAUD,EAASspC,EAAOs6O,EAAW+6Y,GAAY,aAIxD,SAASx9Y,EAAqBz5Q,EAAI3H,GACjC,OAAiC2H,EAA1B3H,EAAS,CAAEC,QAAS,IAAiBD,EAAOC,SAAUD,EAAOC,QAHrE4jR,EAAYA,GAAaA,EAAUx9Q,eAAe,WAAaw9Q,EAAS,QAAcA,EAMtF,IAAIg7Y,EAAaz9Y,GAAqB,SAAUphR,GAChD,SAAS4uC,IAeP,OAdA5uC,EAAOC,QAAU2uC,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GACrD,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAASvpB,UAAUV,GAEvB,IAAK,IAAIsB,KAAO2oB,EACV7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAC/C0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAK3B,OAAO0oB,GAGF8c,EAAS7hC,MAAMjI,KAAM0D,WAG9BxI,EAAOC,QAAU2uC,KAGjB,SAASioc,EAAgBlke,GACvB,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAGjC,IAAI+hpB,EAAiB79K,EAErB,SAASI,EAAsBtke,EAAK7K,GAClC,IAAIive,EAAO,GACPC,GAAK,EACL9iQ,GAAK,EACLgsB,OAAKt/P,EAET,IACE,IAAK,IAAiCk2e,EAA7Bx9Z,EAAK3mE,EAAInO,OAAOC,cAAmBuye,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAChE2xe,EAAK7le,KAAK4le,EAAGt2e,QAETsH,GAAKive,EAAKpwe,SAAWmB,GAH8Ckve,GAAK,IAK9E,MAAO9gc,GACPg+L,GAAK,EACLgsB,EAAKhqN,EARP,QAUE,IACO8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SADrC,QAGE,GAAI46J,EAAI,MAAMgsB,GAIlB,OAAO62O,EAGT,IAAI49K,EAAuB19K,EAE3B,SAASC,IACP,MAAM,IAAI/ve,UAAU,wDAGtB,IAAI0tpB,EAAkB39K,EAEtB,SAASj/b,EAAetlC,EAAK7K,GAC3B,OAAO4spB,EAAe/hpB,IAAQgipB,EAAqBhipB,EAAK7K,IAAM+spB,IAGhE,IAAIiK,EAAgB7mnB,EAEpB,SAAS6hC,EAAgBluE,EAAKxC,EAAK5I,GAYjC,OAXI4I,KAAOwC,EACT1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAC9B5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZlB,EAAIxC,GAAO5I,EAGNoL,EAGT,IAAIe,EAAiBmtE,EAErB,SAASh9B,EAAchrB,GACrB,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAaU,UAAUV,GAAK,GAC/C0pB,EAAUtuB,OAAO0D,KAAKmrB,GAEkB,oBAAjC7uB,OAAOkgB,wBAChBoO,EAAUA,EAAQphB,OAAOlN,OAAOkgB,sBAAsB2O,GAAQ1hB,QAAO,SAAUshB,GAC7E,OAAOzuB,OAAO0uB,yBAAyBG,EAAQJ,GAAK/kB,gBAIxD4kB,EAAQhgB,SAAQ,SAAUpI,GACxBuD,EAAemlB,EAAQ1oB,EAAK2oB,EAAO3oB,OAIvC,OAAO0oB,EAGT,IAAIitoB,EAAejinB,EAEnB,SAAS5qB,EAAgBC,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIjrB,UAAU,qCAIxB,IAAI63pB,EAAiB9soB,EAErB,SAASsrF,EAAkB1rF,EAAQkd,GACjC,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CACrC,IAAI21G,EAAazuE,EAAMlnC,GACvB21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EACjD6wG,EAAW5wG,cAAe,EACtB,UAAW4wG,IAAYA,EAAW3wG,UAAW,GACjD5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAIlD,SAASlhE,EAAanqB,EAAasrF,EAAYC,GAG7C,OAFID,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GACrDC,GAAaH,EAAkBprF,EAAaurF,GACzCvrF,EAGT,IAAI6soB,EAAc1inB,EAEd2inB,EAAY99Y,GAAqB,SAAUphR,GAC/C,SAAS2yW,EAAS/mW,GAA4T,OAA1O+mW,EAArD,oBAAXnuW,QAAoD,kBAApBA,OAAOC,SAAoC,SAAkBmH,GAAO,cAAcA,GAA4B,SAAkBA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAiB+mW,EAAS/mW,GAE9V,SAASyzC,EAAQzzC,GAWf,MAVsB,oBAAXpH,QAAuD,WAA9BmuW,EAASnuW,OAAOC,UAClDzE,EAAOC,QAAUo/C,EAAU,SAAiBzzC,GAC1C,OAAO+mW,EAAS/mW,IAGlB5L,EAAOC,QAAUo/C,EAAU,SAAiBzzC,GAC1C,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,SAAW0vW,EAAS/mW,IAIxHyzC,EAAQzzC,GAGjB5L,EAAOC,QAAUo/C,KAGjB,SAAS8nE,EAAuB+sD,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIutC,eAAe,6DAG3B,OAAOvtC,EAGT,IAAIugf,EAAwBttiB,EAE5B,SAASF,EAA2BitD,EAAMpuK,GACxC,OAAIA,GAA6B,WAApBo5pB,EAAUp5pB,IAAsC,oBAATA,EAI7C2upB,EAAsBvgf,GAHpBpuK,EAMX,IAAIq5pB,EAA4Bl4iB,EAE5Bp5F,EAAiBuzP,GAAqB,SAAUphR,GACpD,SAASknH,EAAgBj8G,GAIvB,OAHAjL,EAAOC,QAAUinH,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAC1G,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAEvCi8G,EAAgBj8G,GAGzBjL,EAAOC,QAAUinH,KAGb5sC,EAAiB8mM,GAAqB,SAAUphR,GACpD,SAASg9R,EAAgB/xR,EAAGsvE,GAM1B,OALAv6E,EAAOC,QAAU+8R,EAAkB95R,OAAOo3E,gBAAkB,SAAyBrvE,EAAGsvE,GAEtF,OADAtvE,EAAEjI,UAAYu3E,EACPtvE,GAGF+xR,EAAgB/xR,EAAGsvE,GAG5Bv6E,EAAOC,QAAU+8R,KAGjB,SAASrgN,EAAUC,EAAUC,GAC3B,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI11E,UAAU,sDAGtBy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CACrEG,YAAa,CACX5C,MAAOo8E,EACP9vE,UAAU,EACVD,cAAc,KAGdgwE,GAAYvC,EAAesC,EAAUC,GAG3C,IAAIuilB,EAAWzilB,EAqCX0ilB,EA5BY,SAASrspB,EAAWusC,EAAQ90C,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GAEvD,QAAe56E,IAAX2+C,EACF,MAAM,IAAI7yC,MAAM,gDAIpB,IAAKsG,EAAW,CACd,IAAIC,EACJ,QAAerS,IAAX2+C,EACFtsC,EAAQ,IAAIvG,MACV,qIAGG,CACL,IAAIojB,EAAO,CAACrlB,EAAGC,EAAGC,EAAGC,EAAGsC,EAAGsuE,GACvB49V,EAAW,GACfnma,EAAQ,IAAIvG,MACV6yC,EAAOm+B,QAAQ,OAAO,WAAa,OAAO5tD,EAAKspZ,UAE3C9la,KAAO,sBAIf,MADAL,EAAMqhQ,YAAc,EACdrhQ,IAMNqspB,EAAU,WACZ,SAASA,IACPN,EAAel6pB,KAAMw6pB,GAErB3ypB,EAAe7H,KAAM,OAAQ,IAiD/B,OA9CAm6pB,EAAYK,EAAS,CAAC,CACpBl2pB,IAAK,MACL5I,MAAO,SAAa+I,EAAYhJ,GACzBuE,KAAKq/V,KAAK56V,KACbzE,KAAKq/V,KAAK56V,GAAc,IAG1BzE,KAAKq/V,KAAK56V,GAAY2H,KAAK3Q,KAE5B,CACD6I,IAAK,SACL5I,MAAO,SAAgB+I,EAAYhJ,GACjC,IAAIU,EAAQ6D,KAAKg9a,SAASv4a,EAAYhJ,IAEvB,IAAXU,GACF6D,KAAKq/V,KAAK56V,GAAY2K,OAAOjT,EAAO,KAGvC,CACDmI,IAAK,WACL5I,MAAO,WACL,OAAOsE,KAAKijR,SAEb,CACD3+Q,IAAK,YACL5I,MAAO,WACL,IAAIi8C,EAAQ33C,KAEZ,OAAOA,KAAKq/V,KAAKr/V,KAAKijR,OAAOx+Q,YAAYkd,MAAK,SAAU0kB,GAEtD,OADWA,EAAKj/B,KACJqzpB,aAAat+pB,OAASw7C,EAAMsrO,OAAO9mR,WAGlD,CACDmI,IAAK,WACL5I,MAAO,SAAkB+I,EAAYhJ,GACnC,OAAOuE,KAAKq/V,KAAK56V,GAAY+b,QAAQ/kB,KAEtC,CACD6I,IAAK,iBACL5I,MAAO,WACL,IAAI+I,EAAaf,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKijR,OAAOx+Q,WACjG,OAAOzE,KAAKq/V,KAAK56V,GAAYgI,KAAKiupB,OAI/BF,EArDK,GAwDd,SAASE,EAAY/xnB,EAAO8G,GAG1B,OAFa9G,EAAMvhC,KAAKqzpB,aAAat+pB,MACxBszC,EAAMroC,KAAKqzpB,aAAat+pB,MAIvC,SAAS8/Q,EAAmBpuQ,GAC1B,GAAIpM,MAAMC,QAAQmM,GAAM,CACtB,IAAK,IAAI7K,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMoM,EAAIhM,QAASmB,EAAI6K,EAAIhM,OAAQmB,IAC5DggP,EAAKhgP,GAAK6K,EAAI7K,GAGhB,OAAOggP,GAIX,IAAI23a,EAAoB1+Y,EAExB,SAASC,EAAiBrgR,GACxB,GAAI6D,OAAOC,YAAYvB,OAAOvC,IAAkD,uBAAzCuC,OAAOD,UAAU8C,SAASD,KAAKnF,GAAgC,OAAO4F,MAAMuN,KAAKnT,GAG1H,IAAI++pB,EAAkB1+Y,EAEtB,SAASC,IACP,MAAM,IAAI95Q,UAAU,mDAGtB,IAAIw4pB,EAAoB1+Y,EAExB,SAASx8K,EAAmB9xF,GAC1B,OAAO8spB,EAAkB9spB,IAAQ+spB,EAAgB/spB,IAAQgtpB,IAG3D,IAAIC,EAAoBn7jB,EAExB,SAASn2B,EAAU3lE,EAAOmL,EAAMC,GAS9B,MAPyB,qBAAZ+Y,SACTA,QAAQC,KAAK,mNAIjBpkB,EAAQA,EAAMiM,SACRV,OAAOH,EAAK,EAAIpL,EAAMhC,OAASoN,EAAKA,EAAI,EAAGpL,EAAMuL,OAAOJ,EAAM,GAAG,IAChEnL,EAET,SAASgwL,EAAK/sL,GACZ,IAAK,IAAIikB,EAAOrnB,UAAU7B,OAAQk5pB,EAAa,IAAIt5pB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IACxG8voB,EAAW9voB,EAAO,GAAKvnB,UAAUunB,GAGnC,OAAO7sB,OAAO0D,KAAKgF,GAAK6E,QAAO,SAAUutI,EAAK50I,GAK5C,OAJiC,IAA7By2pB,EAAWv6oB,QAAQlc,KACrB40I,EAAI50I,GAAOwC,EAAIxC,IAGV40I,IACN,IAEL,IAAIwI,EAAS,CACXllJ,IAAK,CAAC,WAAY,cAAe,WACjC+yS,KAAM,CAAC,YAAa,aACpBxvR,MAAO,CAAC,aAAc,cAEpBi7oB,EAAe,WACjB,GAAsB,qBAAXtsoB,QAA8C,qBAAbsX,SAC1C,MAAO,GAGT,IAAI41C,EAASltD,OAAOwrQ,iBAAiBl0P,SAASz+B,gBAAiB,KAAO,CAAC,sBACnE0zpB,GAAOx5pB,MAAMtD,UAAU2R,MAAM9O,KAAK46E,GAAQn6D,KAAK,IAAI8sB,MAAM,sBAAyC,KAAjBqtC,EAAOs/kB,OAAgB,CAAC,GAAI,MAAM,GAEvH,MACO,OADCD,EAEG,KAGAA,GAAOA,EAAIp5pB,OAASo5pB,EAAI,GAAG5whB,cAAgB4whB,EAAItsiB,OAAO,GAAK,GAbrD,GAgBnB,SAASwsiB,EAAgB/zpB,EAAMw0E,GAC7Bx9E,OAAO0D,KAAK85E,GAAQlvE,SAAQ,SAAUpI,GACpC8C,EAAKk0G,MAAMh3G,GAAOs3E,EAAOt3E,MAG7B,SAAS82pB,EAAeh0pB,EAAMs+I,GAC5Bt+I,EAAKk0G,MAAM,GAAGhwG,OAAO0vpB,EAAc,cAA6B,MAAbt1gB,EAAoB,GAAK,eAAep6I,OAAOo6I,EAAU7tI,EAAG,OAAOvM,OAAOo6I,EAAUl6G,EAAG,SAE5I,SAAS6vnB,EAAsBj0pB,EAAMstH,GACnCttH,EAAKk0G,MAAM,GAAGhwG,OAAO0vpB,EAAc,uBAAqC,MAAZtmiB,EAAmB,GAAK,GAAGppH,OAAOopH,EAAU,MAE1G,SAAS8nK,EAAQxC,EAAIn3R,GACnB,KAAOm3R,GAAI,CACT,GAAIn3R,EAAGm3R,GACL,OAAOA,EAGTA,EAAKA,EAAG8zI,WAGV,OAAO,KAET,SAASrkT,EAAMxsH,EAAKD,EAAKtB,GACvB,OAAOqB,KAAKC,IAAIC,EAAKF,KAAKE,IAAIvB,EAAOsB,IAGvC,SAASs+pB,EAAcjzc,GACrB,MAA+B,OAA3BA,EAAY15F,QAAQ,GACfh2C,WAAW0vI,GAGb,EAGT,SAASkzc,EAAiBzzd,GACxB,IAAIxsF,EAAQ5sF,OAAOwrQ,iBAAiBpyF,GACpC,MAAO,CACLvzE,OAAQ+miB,EAAchgjB,EAAM+X,cAC5B94G,KAAM+gpB,EAAchgjB,EAAM4M,YAC1B1tG,MAAO8gpB,EAAchgjB,EAAMkG,aAC3B8S,IAAKgniB,EAAchgjB,EAAMgB,YAG7B,SAASk/iB,GAAmB79mB,EAAQhE,GAClC,IAAIigS,EAAgBjgS,EAAUpxB,aAAeoxB,EAAUnrC,KACvD,OAAOorU,EAAgB,GAAGtuU,OAAOqyC,EAAQ,KAAKryC,OAAOsuU,EAAe,KAAOj8R,EAE7E,SAAS89mB,GAAoCr0pB,EAAM8nV,GACjD,IAAIwsU,EAAqBt0pB,EAAK6yR,wBAC9B,MAAO,CACL3lK,IAAKoniB,EAAmBpniB,IAAM46N,EAAY56N,IAC1C/5G,KAAMmhpB,EAAmBnhpB,KAAO20U,EAAY30U,MAGhD,SAASohpB,GAAYx0hB,GACnB,OAAIA,EAAMs8K,SAAWt8K,EAAMs8K,QAAQ5hT,OAC1B,CACLgW,EAAGsvH,EAAMs8K,QAAQ,GAAGm4W,MACpBpwnB,EAAG27F,EAAMs8K,QAAQ,GAAGo4W,OAEb10hB,EAAMm+f,gBAAkBn+f,EAAMm+f,eAAezjoB,OAC/C,CACLgW,EAAGsvH,EAAMm+f,eAAe,GAAGs2B,MAC3BpwnB,EAAG27F,EAAMm+f,eAAe,GAAGu2B,OAGtB,CACLhkpB,EAAGsvH,EAAMy0hB,MACTpwnB,EAAG27F,EAAM00hB,OAIf,SAASh1U,GAAa1/M,GACpB,OAAOA,EAAMs8K,SAAWt8K,EAAMs8K,QAAQ5hT,QAAUslI,EAAMm+f,gBAAkBn+f,EAAMm+f,eAAezjoB,OAE/F,SAAS6nV,GAActiV,EAAMs1C,GAC3B,IAAI5uC,EAASpK,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,CAC/E6W,KAAM,EACN+5G,IAAK,GAGP,GAAKltH,EAAL,CAIA,IAAIuiV,EAAa,CACfpvU,KAAMzM,EAAOyM,KAAOnT,EAAKugV,WACzBrzN,IAAKxmH,EAAOwmH,IAAMltH,EAAKwgV,WAGzB,OAAIxgV,EAAK0ma,aAAepxX,EACfitS,EAGFD,GAActiV,EAAK0ma,WAAYpxX,EAAQitS,IAEhD,SAASmyU,GAAer6X,EAAUghK,EAAWs5N,GAC3C,OAAIt6X,EAAWs6X,GAAYt6X,EAAWghK,EAC7BhhK,EAAW,EACTA,EAAWs6X,GAAYt6X,EAAWghK,EACpChhK,EAAW,EAEXA,EAGX,SAASu6X,GAAmB31nB,GAC1B,IAAI41nB,EAAa51nB,EAAK41nB,WAClB3glB,EAAQj1C,EAAKi1C,MACbi2C,EAASlrF,EAAKkrF,OACd65W,EAAU6wL,EACV3wL,EAAU2wL,EACVrqc,EAAO,KAEX,GAA0B,kBAAfqqc,EAAyB,CAClC,IAAI1tnB,EAAQ,6BAA6Bw9G,KAAKkwgB,GAC9C1B,EAAsB,OAAVhsnB,EAAgB,gGAAsG0tnB,GAClI7wL,EAAUzyZ,WAAWsjlB,GACrB3wL,EAAU3yZ,WAAWsjlB,GACrBrqc,EAAOrjL,EAAM,GAUf,OAPAgsnB,EAAYn5jB,SAASgqY,IAAYhqY,SAASkqY,GAAU,gDAAiD2wL,GAExF,MAATrqc,IACFw5Q,EAAUA,EAAU9vZ,EAAQ,IAC5BgwZ,EAAUA,EAAU/5W,EAAS,KAGxB,CACL15G,EAAGuzd,EACH5/b,EAAG8/b,GAGP,SAAS4wL,GAAoBvznB,GAC3B,IAAI4oF,EAAS5oF,EAAM4oF,OACfj2C,EAAQ3yC,EAAM2yC,MACd2glB,EAAatznB,EAAMsznB,WACnBE,EAAU16pB,MAAMC,QAAQu6pB,GAAcA,EAAa,CAACA,EAAYA,GACpE1B,EAA+B,IAAnB4B,EAAQt6pB,OAAc,4GAAkHo6pB,GAEpJ,IAAIG,EAAWpC,EAAcmC,EAAS,GAClCE,EAAgBD,EAAS,GACzBE,EAAgBF,EAAS,GAE7B,MAAO,CAACJ,GAAmB,CACzBzqiB,OAAQA,EACR0qiB,WAAYI,EACZ/glB,MAAOA,IACL0glB,GAAmB,CACrBzqiB,OAAQA,EACR0qiB,WAAYK,EACZhhlB,MAAOA,KAIX,SAAS6sQ,GAAanuD,GACpB,IAAIiuD,EAAgBv5T,OAAOwrQ,iBAAiBF,GACxCkuD,EAAgB,gBAEpB,MADiB,CAAC,WAAY,YAAa,aACzBvmU,MAAK,SAAUsgK,GAC/B,OAAOimK,EAAcntS,KAAKktS,EAAchmK,OAI5C,SAASs6e,GAAmBviY,GAC1B,OAAMA,aAAcwjB,YAET2qC,GAAanuD,GACfA,EAEAuiY,GAAmBviY,EAAG8zI,YAJtB,KAOX,IAAI0uP,GAAU,CACZC,IAAK,EACLC,IAAK,GACLC,MAAO,GACPC,KAAM,GACNC,GAAI,GACJC,MAAO,GACPC,KAAM,IAEJC,GAAW,CACbC,OAAQ,IACRt4iB,OAAQ,SACRu4iB,OAAQ,SACR14iB,MAAO,QACP+c,OAAQ,SACR47hB,SAAU,WACVr7iB,OAAQ,UAEV,SAASqmc,GAAU/gjB,GACjB,IAAIqpC,EAAW,qDACX2lS,EAAShvU,EAAK4yM,iBAAiBvpK,GAC/B2snB,EAAah2pB,EAAK+gjB,WAAU,GAkBhC,OAhBmB2yG,EAAkBsC,EAAWpjd,iBAAiBvpK,IAEpD/jC,SAAQ,SAAUmqP,EAAO7zP,GACjB,SAAf6zP,EAAM32P,OACR22P,EAAMn7P,MAAQ06U,EAAOpzU,GAAGtH,OAGP,UAAfm7P,EAAM32P,MAAoB22P,EAAMroP,OAClCqoP,EAAMroP,KAAO,oBAAoBlD,OAAOurP,EAAMroP,OAG5CqoP,EAAMupD,UAAY48W,GAASE,QAAU9mV,EAAOpzU,GAAGs4E,MAAQ,GAAK86P,EAAOpzU,GAAGuuH,OAAS,GACnEslI,EAAMmpR,WAAW,MACvB8oB,UAAU1yN,EAAOpzU,GAAI,EAAG,MAG7Bo6pB,EAGT,SAASC,GAAe1znB,GACtB,IAAIs4E,EAAQtzE,EAER+W,EAAShiD,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,CAC/E4lC,SAAS,GAEX,OAAOqF,EAAQszE,EAAS,SAAUkuJ,GAGhC,SAASmtZ,IAGP,OAFApD,EAAel6pB,KAAMs9pB,GAEdjD,EAA0Br6pB,KAAM+oB,EAAeu0oB,GAAoBr1pB,MAAMjI,KAAM0D,YAyBxF,OA9BA42pB,EAASgD,EAAoBntZ,GAQ7BgqZ,EAAYmD,EAAoB,CAAC,CAC/Bh5pB,IAAK,oBACL5I,MAAO,WACMo+pB,EAAShwY,YAAY9pR,MAC3Bq9pB,gBAAiB,IAEvB,CACD/4pB,IAAK,qBACL5I,MAAO,WAEL,OADA6+pB,EAAY70mB,EAAOpc,QAAS,2HACrBtpC,KAAKq/V,KAAKk+T,kBAElB,CACDj5pB,IAAK,SACL5I,MAAO,WACL,IAAID,EAAMiqD,EAAOpc,QAAU,kBAAoB,KAC/C,OAAO7E,EAAMwB,cAAc0D,EAAkBownB,EAAW,CACtDt+pB,IAAKA,GACJuE,KAAKkqC,YAILoznB,EA/Be,CAgCtB74nB,EAAMkV,WAAY9xC,EAAeo6G,EAAQ,cAAeu5iB,GAAmB,iBAAkB7xnB,IAAoBgF,EAErH,SAAS6unB,GAAiBp2pB,GACxB,OAA8B,MAAvBA,EAAKi2pB,eAGd,IAAII,GAAe,WACjB,SAASA,EAAajklB,EAAWkklB,GAC/BxD,EAAel6pB,KAAMy9pB,GAErBz9pB,KAAKw5E,UAAYA,EACjBx5E,KAAK09pB,iBAAmBA,EA8E1B,OA3EAvD,EAAYsD,EAAc,CAAC,CACzBn5pB,IAAK,QACL5I,MAAO,WACL+jW,cAAcz/V,KAAKq7G,UACnBr7G,KAAKq7G,SAAW,OAEjB,CACD/2G,IAAK,SACL5I,MAAO,SAAgB2qC,GACrB,IAAIsR,EAAQ33C,KAER0lJ,EAAYr/G,EAAKq/G,UACjBi4gB,EAAet3nB,EAAKs3nB,aACpBC,EAAev3nB,EAAKu3nB,aACpBtilB,EAAQj1C,EAAKi1C,MACbi2C,EAASlrF,EAAKkrF,OACd73C,EAAY,CACd7hE,EAAG,EACH2zB,EAAG,GAED89S,EAAQ,CACVzxU,EAAG,EACH2zB,EAAG,GAED29S,EAAe,CACjBtxU,EAAG,GACH2zB,EAAG,IAEDqynB,EAAkB79pB,KAAKw5E,UACvBouO,EAAYi2W,EAAgBj2W,UAC5BD,EAAak2W,EAAgBl2W,WAC7B/R,EAAeioX,EAAgBjoX,aAC/BC,EAAcgoX,EAAgBhoX,YAG9B8yC,EAAsB,IAAd/gC,EACRihC,EAAWjzC,EAAegS,EAHXi2W,EAAgB5nX,eAGwB,EACvD2yC,EAAwB,IAAfjhC,EACTtoH,EAAUw2G,EAAc8R,EAJVk2W,EAAgBz+hB,cAIuB,EAErDsmB,EAAUl6G,GAAKoynB,EAAapynB,EAAI+lF,EAAS,IAAMs3N,GACjDnvQ,EAAUluC,EAAI,EACd89S,EAAM99S,EAAI29S,EAAa39S,EAAIzuC,KAAKijB,KAAK49oB,EAAapynB,EAAI+lF,EAAS,EAAIm0B,EAAUl6G,GAAK+lF,IACzEm0B,EAAU7tI,GAAK+lpB,EAAa/lpB,EAAIyjE,EAAQ,IAAM+jH,GACvD3lH,EAAU7hE,EAAI,EACdyxU,EAAMzxU,EAAIsxU,EAAatxU,EAAI9a,KAAKijB,KAAK49oB,EAAa/lpB,EAAIyjE,EAAQ,EAAIoqE,EAAU7tI,GAAKyjE,IACxEoqE,EAAUl6G,GAAKmynB,EAAanynB,EAAI+lF,EAAS,IAAMo3N,GACxDjvQ,EAAUluC,GAAK,EACf89S,EAAM99S,EAAI29S,EAAa39S,EAAIzuC,KAAKijB,KAAK0lI,EAAUl6G,EAAI+lF,EAAS,EAAIosiB,EAAanynB,GAAK+lF,IACzEm0B,EAAU7tI,GAAK8lpB,EAAa9lpB,EAAIyjE,EAAQ,IAAMstQ,IACvDlvQ,EAAU7hE,GAAK,EACfyxU,EAAMzxU,EAAIsxU,EAAatxU,EAAI9a,KAAKijB,KAAK0lI,EAAU7tI,EAAIyjE,EAAQ,EAAIqilB,EAAa9lpB,GAAKyjE,IAG/Et7E,KAAKq7G,WACPr7G,KAAKkT,QACLlT,KAAK89pB,iBAAkB,GAGL,IAAhBpklB,EAAU7hE,GAA2B,IAAhB6hE,EAAUluC,IACjCxrC,KAAKq7G,SAAWmkP,aAAY,WAC1B7nT,EAAMmmnB,iBAAkB,EACxB,IAAIhwpB,EAAS,CACXyM,KAAM+uU,EAAMzxU,EAAI6hE,EAAU7hE,EAC1By8G,IAAKg1N,EAAM99S,EAAIkuC,EAAUluC,GAE3BmM,EAAM6hC,UAAUouO,WAAa95S,EAAOwmH,IACpC38E,EAAM6hC,UAAUmuO,YAAc75S,EAAOyM,KAErCo9B,EAAM+lnB,iBAAiB5vpB,KACtB,QAKF2vpB,EAnFU,GAsFnB,SAASM,GAA2B13nB,GAClC,IAAIj/B,EAAOi/B,EAAKj/B,KAChB,MAAO,CACLmqH,OAAQnqH,EAAK0iV,aACbxuQ,MAAOl0E,EAAKyiV,aAIhB,SAASm0U,GAAyB72hB,GAGhC,OAA2D,IAFjC,CAAC61hB,GAASx4iB,MAAOw4iB,GAASG,SAAUH,GAASl7iB,OAAQk7iB,GAASz7hB,OAAQy7hB,GAASr4iB,QAEjFnkG,QAAQ2mH,EAAMn6G,OAAOozR,YAIzC5jB,EAAQr1J,EAAMn6G,QAAQ,SAAUgtQ,GAClC,MAA8B,SAAvBA,EAAGikY,mBAQd,IAAIn/Y,GAAY,CACdoe,KAAMne,EAAUE,MAAM,CAAC,IAAK,IAAK,OACjCs2O,cAAex2O,EAAU8gP,IACzBq+J,kBAAmBn/Y,EAAU99H,KAC7Bs7I,SAAUxd,EAAUvkG,OACpB2jf,aAAcp/Y,EAAU70P,KACxBk0oB,oBAAqBr/Y,EAAU70P,KAC/Bm0oB,YAAat/Y,EAAUx4Q,OACvB+3pB,gBAAiBv/Y,EAAUC,UAAU,CAACD,EAAU70P,KAA6B,qBAAhBszR,YAA8Bz+B,EAAU8gP,IAAM9gP,EAAUw/Y,WAAW/gX,eAChIghX,kBAAmBz/Y,EAAU99H,KAC7Bw9gB,kCAAmC1/Y,EAAUvkG,OAC7Ckkf,SAAU3/Y,EAAUx4Q,OACpB01pB,WAAYl9Y,EAAUC,UAAU,CAACD,EAAUvkG,OAAQukG,EAAUx4Q,OAAQw4Q,EAAU4/Y,QAAQ5/Y,EAAUC,UAAU,CAACD,EAAUvkG,OAAQukG,EAAUx4Q,YACxIq4pB,qBAAsB7/Y,EAAU99H,KAChC49gB,UAAW9/Y,EAAU70P,KACrB40oB,WAAY//Y,EAAU70P,KACtB60oB,WAAYhgZ,EAAU70P,KACtB80oB,YAAajgZ,EAAU70P,KACvB+0oB,WAAYlgZ,EAAUvkG,OACtB0kf,eAAgBngZ,EAAUvkG,OAC1B2kf,kBAAmBpgZ,EAAU70P,KAC7B87G,mBAAoB+4I,EAAUvkG,OAC9B4kf,sBAAuBrgZ,EAAU70P,KACjCm1oB,cAAetgZ,EAAU99H,KACzBq+gB,2BAA4BvgZ,EAAU99H,MAEpCx/B,GAAe,CACjBy7K,KAAM,IACNghY,mBAAmB,EACnB3hY,SAAU,EACV6hY,oBAAqBL,GACrBS,mBAAmB,EACnBvC,WAAY,MACZ2C,sBAAsB,EACtBK,WAAY,EACZC,eAAgB,EAChBC,kBAAmBnB,GACnBh4hB,mBAAoB,IACpBs5hB,4BAA4B,GAE1BC,GAAenhqB,OAAO0D,KAAKg9Q,IAC/B,SAAS0gZ,GAAct1nB,GACrBqwnB,IAAcrwnB,EAAMqyP,UAAYryP,EAAM+0nB,YAAa,yIAGrD,SAASQ,GAAiBhplB,EAAMiplB,GAC9B,IACE,IAAI9rpB,EAAS6iE,IACb,MAAOruE,GACP,OAAOs3pB,GAAU,EAAMt3pB,GAGzB,OAAIwL,GAAUA,EAAO2iE,KACZ3iE,EAAO2iE,KAAKmplB,EAAU59oB,KAAK,MAAM,GAAQ49oB,EAAU59oB,KAAK,MAAM,IAGhE49oB,GAAU,EAAOhkqB,OAE1B,SAASikqB,GAAkBh2nB,GACzB,IAAIs4E,EAAQtzE,EAER+W,EAAShiD,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,CAC/E4lC,SAAS,GAEX,OAAOqF,EAAQszE,EAAS,SAAUkuJ,GAGhC,SAASyvZ,EAAsB11nB,GAC7B,IAAIyN,EAwjBJ,OAtjBAuinB,EAAel6pB,KAAM4/pB,GAErBjonB,EAAQ0inB,EAA0Br6pB,KAAM+oB,EAAe62oB,GAAuB5+pB,KAAKhB,KAAMkqC,IAEzFriC,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,eAAe,SAAUwvF,GAC3F,IAAI5kB,EAAc5qE,EAAMzN,MACpBqyP,EAAWh6K,EAAYg6K,SACvB4iY,EAAoB58iB,EAAY48iB,kBAEpC,GAAqB,IAAjBh4hB,EAAMha,SAAgBgyiB,EAAkBh4hB,GAA5C,CAIAxvF,EAAM0oN,SAAU,EAChB1oN,EAAMslE,SAAW0+iB,GAAYx0hB,GAC7B,IAAI//H,EAAOo1R,EAAQr1J,EAAMn6G,QAAQ,SAAUgtQ,GACzC,OAA0B,MAAnBA,EAAGygY,gBAGZ,GAAIrzpB,GAAQA,EAAKqzpB,cAAgB9inB,EAAMkonB,YAAYz4pB,KAAUuwC,EAAM3Q,MAAMyrX,QAAS,CAChF,IAAI4sQ,EAAgB1nnB,EAAMzN,MAAMm1nB,cAC5BS,EAAqB14pB,EAAKqzpB,aAC1Bt+pB,EAAQ2jqB,EAAmB3jqB,MAC3BsI,EAAaq7pB,EAAmBr7pB,WAGpC,GAFeq7pB,EAAmB5ijB,SAGhC,OAGF,GAAImijB,IAAkB7iY,EAAQr1J,EAAMn6G,OAAQwwoB,IAC1C,OAGF7lnB,EAAMszhB,QAAQhoT,OAAS,CACrBx+Q,WAAYA,EACZtI,MAAOA,GAGJ0qV,GAAa1/M,IAAUA,EAAMn6G,OAAOozR,UAAY48W,GAASC,QAC5D91hB,EAAM/F,iBAGHm7J,IAC4B,IAA3B5kP,EAAMzN,MAAM+0nB,WACdtnnB,EAAMoonB,YAAY54hB,GAElBxvF,EAAMqonB,WAAannnB,YAAW,WAC5B,OAAOlB,EAAMoonB,YAAY54hB,KACxBxvF,EAAMzN,MAAM+0nB,kBAMvBp3pB,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,eAAe,SAAUvwC,GAC3F,OAAOA,EAAKqzpB,aAAaxvF,UAAYtzhB,EAAMszhB,WAG7CpjkB,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,cAAc,SAAUwvF,GAC1F,IAAI3jB,EAAe7rE,EAAMzN,MACrBqyP,EAAW/4K,EAAa+4K,SACxB2iY,EAAiB17iB,EAAa07iB,eAElC,IAAKvnnB,EAAM3Q,MAAMyrX,SAAW96W,EAAM0oN,UAAY1oN,EAAMsonB,+BAAgC,CAClF,IAAIhjjB,EAAW0+iB,GAAYx0hB,GACvB4mN,EAAQ,CACVl2U,EAAG8/B,EAAMslE,SAASplG,EAAIolG,EAASplG,EAC/B2zB,EAAGmM,EAAMslE,SAASzxE,EAAIyxE,EAASzxE,GAE7B00nB,EAAgBnjqB,KAAKijB,IAAI+tU,EAAMl2U,GAAK9a,KAAKijB,IAAI+tU,EAAMviT,GACvDmM,EAAMo2S,MAAQA,EAETxxD,GAAc2iY,KAAkBgB,GAAiBhB,GAG3C3iY,GAAY2jY,GAAiB3jY,GAAY5kP,EAAMszhB,QAAQv5R,YAChE/5P,EAAMoonB,YAAY54hB,IAHlBZ,aAAa5uF,EAAMwonB,aACnBxonB,EAAMwonB,YAActnnB,WAAWlB,EAAM9rB,OAAQ,QAOnDhkB,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,aAAa,WAC/EA,EAAM0oN,SAAU,EAEhB1oN,EAAM9rB,YAGRhkB,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,UAAU,WAC5E,IAAI4kP,EAAW5kP,EAAMzN,MAAMqyP,SACb5kP,EAAM3Q,MAAMyrX,UAGnBl2H,GACHh2J,aAAa5uF,EAAMqonB,YAGrBronB,EAAMszhB,QAAQhoT,OAAS,SAI3Bp7Q,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,eAAe,SAAUwvF,GAC3F,IACE,IAAI87I,EAAStrO,EAAMszhB,QAAQm1F,YAEvBC,EAAS,WACX,GAAIp9Y,EAAQ,CACV,IAAIq9Y,EAAS,WACX,IAAInkqB,EAAQs9jB,EAAMghG,aAAat+pB,MAC3Bo/E,EAASgglB,EAAiB9hG,GAE1B8mG,EAAwB5onB,EAAMkkQ,gBAAgB5hB,wBAE9CuO,EAAag4X,EAAqB,CACpC/7pB,WAAYC,EACZvI,MAAOA,EACPiL,KAAMqyjB,IAgER,GA7DA9hhB,EAAMvwC,KAAOqyjB,EACb9hhB,EAAM4jC,OAASA,EACf5jC,EAAM2jC,MAAQktN,EAAWltN,MACzB3jC,EAAM45E,OAASi3K,EAAWj3K,OAC1B55E,EAAM8onB,aAAe,CACnB5opB,EAAG8/B,EAAM4jC,OAAOhhE,KAAOo9B,EAAM4jC,OAAO/gE,MACpCgxB,EAAGzuC,KAAKC,IAAI26C,EAAM4jC,OAAO+4C,IAAK38E,EAAM4jC,OAAOg5C,SAE7C58E,EAAM+jnB,mBAAqBjiG,EAAMx/R,wBACjCtiP,EAAM4onB,sBAAwBA,EAC9B5onB,EAAMx7C,MAAQA,EACdw7C,EAAM8pP,SAAWtlS,EACjBw7C,EAAMulP,KAAO,CACXrlR,EAAG6opB,EAAMlgpB,QAAQ,MAAQ,EACzBgrB,EAAGk1nB,EAAMlgpB,QAAQ,MAAQ,GAE3Bm3B,EAAMgpnB,WAAaj3U,GAAc+vO,EAAO9hhB,EAAM6hC,WAG5C7hC,EAAMipnB,cAAgBjF,GADpBkF,EACgC5G,EAAa,GAAI9yhB,EAAO,CACxDy0hB,MAAOjknB,EAAM+jnB,mBAAmBnhpB,KAChCshpB,MAAOlknB,EAAM+jnB,mBAAmBpniB,MAGA6S,GAGpCxvF,EAAMmpnB,cAAgB,CACpBvmpB,KAAMo9B,EAAMkkQ,gBAAgB8L,WAC5BrzL,IAAK38E,EAAMkkQ,gBAAgB+L,WAE7BjwQ,EAAM+0P,oBAAsB,CAC1BnyR,KAAMmU,OAAO8qQ,YACbllK,IAAK5lG,OAAO+qQ,aAEd9hP,EAAMopnB,OAASppnB,EAAM2mnB,gBAAgBphX,YAAYirQ,GAAUsR,IAC3D0hG,EAAgBxjnB,EAAMopnB,OAAQ,CAC5B5llB,UAAW,aACXo2C,OAAQ,GAAGjmH,OAAOqsC,EAAM45E,OAAQ,MAChCh3G,KAAM,GAAGjP,OAAOqsC,EAAM+jnB,mBAAmBnhpB,KAAOghE,EAAOhhE,KAAM,MAC7D85G,cAAe,OACfpX,SAAU,QACVqX,IAAK,GAAGhpH,OAAOqsC,EAAM+jnB,mBAAmBpniB,IAAM/4C,EAAO+4C,IAAK,MAC1Dh5C,MAAO,GAAGhwE,OAAOqsC,EAAM2jC,MAAO,QAG5BullB,GACFlpnB,EAAMopnB,OAAOr2lB,QAGXs2lB,IACFrpnB,EAAMspnB,cAAgBxnG,EACtB0hG,EAAgB1hG,EAAO,CACrBvsc,QAAS,EACT87O,WAAY,YAIhBrxT,EAAMgmnB,aAAe,GACrBhmnB,EAAMimnB,aAAe,GAEjBiD,EAAe,CACjB,IAAIx6nB,EAAO66nB,EAA8B,CACvC5siB,IAAK,EACL/5G,KAAM,EACN+gE,MAAO3jC,EAAM49c,cAAcp3B,WAC3B5sW,OAAQ55E,EAAM49c,cAAc/rK,aAC1B7xS,EAAM4onB,sBACN39T,EAAev8T,EAAKiuF,IACpB6siB,EAAgB96nB,EAAK9rB,KACrB6mpB,EAAiB/6nB,EAAKi1C,MAGtB+llB,EAAkBz+T,EAFAv8T,EAAKkrF,OAGvB+viB,EAAiBH,EAAgBC,EAEjCzpnB,EAAMulP,KAAKrlR,IACb8/B,EAAMgmnB,aAAa9lpB,EAAIsppB,EAAgBxpnB,EAAM+jnB,mBAAmBnhpB,KAChEo9B,EAAMimnB,aAAa/lpB,EAAIyppB,GAAkB3pnB,EAAM+jnB,mBAAmBnhpB,KAAOo9B,EAAM2jC,QAG7E3jC,EAAMulP,KAAK1xP,IACbmM,EAAMgmnB,aAAanynB,EAAIo3T,EAAejrT,EAAM+jnB,mBAAmBpniB,IAC/D38E,EAAMimnB,aAAapynB,EAAI61nB,GAAmB1pnB,EAAM+jnB,mBAAmBpniB,IAAM38E,EAAM45E,cAG7E55E,EAAMulP,KAAKrlR,IACb8/B,EAAMgmnB,aAAa9lpB,GAAKqppB,EAA8B,EAAIX,EAAsBhmpB,MAAQo9B,EAAM+jnB,mBAAmBnhpB,KAAOo9B,EAAM2jC,MAAQ,EACtI3jC,EAAMimnB,aAAa/lpB,GAAKqppB,EAA8BvpnB,EAAM49c,cAAcp3B,WAAaoiM,EAAsBhmpB,KAAOgmpB,EAAsBjllB,OAAS3jC,EAAM+jnB,mBAAmBnhpB,KAAOo9B,EAAM2jC,MAAQ,GAG/L3jC,EAAMulP,KAAK1xP,IACbmM,EAAMgmnB,aAAanynB,GAAK01nB,EAA8B,EAAIX,EAAsBjsiB,KAAO38E,EAAM+jnB,mBAAmBpniB,IAAM38E,EAAM45E,OAAS,EACrI55E,EAAMimnB,aAAapynB,GAAK01nB,EAA8BvpnB,EAAM49c,cAAc/rK,YAAc+2U,EAAsBjsiB,IAAMisiB,EAAsBhviB,QAAU55E,EAAM+jnB,mBAAmBpniB,IAAM38E,EAAM45E,OAAS,GAIlMgwiB,GACFA,EAAaxinB,MAAM,KAAKryC,SAAQ,SAAU0sE,GACxC,OAAOzhC,EAAMopnB,OAAOtiZ,UAAU9/P,IAAIy6D,MAItCzhC,EAAM6pnB,aAAer6hB,EAAMs8K,QAAUg2Q,EAAQ9hhB,EAAM49c,cAE/CsrK,GACFlpnB,EAAM6pnB,aAAax4jB,iBAAiB,QAASrxD,EAAM8pnB,cAAc,GAEjE9pnB,EAAM6pnB,aAAax4jB,iBAAiB,YAAarxD,EAAM8pnB,cAAc,GAErE9pnB,EAAM6pnB,aAAax4jB,iBAAiB,UAAWrxD,EAAM82S,iBAErD/sM,EAAO6tJ,KAAK7iS,SAAQ,SAAUouR,GAC5B,OAAOnjP,EAAM6pnB,aAAax4jB,iBAAiB8xL,EAAWnjP,EAAM+pnB,gBAAgB,MAE9EhghB,EAAOllJ,IAAIkQ,SAAQ,SAAUouR,GAC3B,OAAOnjP,EAAM6pnB,aAAax4jB,iBAAiB8xL,EAAWnjP,EAAMgqnB,eAAe,OAI/EhqnB,EAAMirE,SAAS,CACb6vS,SAAS,EACTmvQ,aAAczlqB,IAGZ0lqB,GACFA,EAAa,CACXz6pB,KAAMqyjB,EACNt9jB,MAAOA,EACPsI,WAAYC,EACZo9pB,aAAcjB,GACb15hB,GAGD05hB,GACFlpnB,EAAMoqnB,QAAQ,IAIdn6M,EAAejwa,EAAMzN,MACrBw2nB,EAAQ94M,EAAa1qL,KACrBsjY,EAAuB54M,EAAaw2M,oBACpCmD,EAAe35M,EAAay2M,YAC5B2C,EAAqBp5M,EAAa42M,kBAClCY,EAAwBx3M,EAAaw3M,sBACrCyC,EAAej6M,EAAao3M,YAC5BkC,EAA8Bt5M,EAAa03M,2BAC3C7lG,EAAQx2S,EAAO77Q,KACf1C,EAAcu+Q,EAAOx+Q,WACrBo8pB,EAAgBlpnB,EAAMszhB,QAAQ62F,aAE9BE,EAAS,WACX,GAAqC,oBAA1B5C,EAAsC,CAC/CznnB,EAAMsonB,gCAAiC,EAEvC,IAAIgC,EAASxC,IAAiB,WAC5B,IAAItjqB,EAAQs9jB,EAAMghG,aAAat+pB,MAC/B,OAAO8iD,QAAQC,QAAQkgnB,EAAsB,CAC3C36pB,WAAYC,EACZvI,MAAOA,EACPiL,KAAMqyjB,EACNqoG,aAAcjB,GACb15hB,IAAQ5wD,MAAK,kBACf,SAAU2rlB,EAAYlxP,GAEvB,GADAr5X,EAAMsonB,gCAAiC,EACnCiC,EAAY,MAAMlxP,EACtB,OAAOA,KAGT,GAAIixP,GAAUA,EAAO1rlB,KAAM,OAAO0rlB,EAAO1rlB,MAAK,gBAlBrC,GAsBb,OAAOyrlB,GAAUA,EAAOzrlB,KAAOyrlB,EAAOzrlB,KAAK+plB,GAAUA,EAAO0B,IA3LnD,GA+Lb,OAAO/inB,QAAQC,QAAQmhnB,GAAUA,EAAO9plB,KAAO8plB,EAAO9plB,MAAK,oBAAkB,GAC7E,MAAOnuE,GACP,OAAO62C,QAAQk3B,OAAO/tE,OAI1BP,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,kBAAkB,SAAUwvF,GAC9F,IAAI23hB,EAAannnB,EAAMzN,MAAM40nB,WAEO,oBAAzB33hB,EAAM/F,gBACf+F,EAAM/F,iBAGRzpF,EAAMwqnB,qBAAqBh7hB,GAE3BxvF,EAAMyqnB,eAENzqnB,EAAM0qnB,aAEFvD,GACFA,EAAW33hB,MAIft/H,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,iBAAiB,SAAUwvF,GAC7F,IAAIwhgB,EAAehxlB,EAAMzN,MACrBs0nB,EAAoB71B,EAAa61B,kBACjCK,EAAYl2B,EAAak2B,UACzByD,EAAgB3qnB,EAAMszhB,QACtBxmkB,EAAa69pB,EAAcr/Y,OAAOx+Q,WAClCq9pB,EAAeQ,EAAcR,aAC7BltpB,EAAQ+iC,EAAMszhB,QAAQ5rO,KAAK56V,GAE3BkzC,EAAM6pnB,eACJM,GACFnqnB,EAAM6pnB,aAAav4jB,oBAAoB,QAAStxD,EAAM8pnB,cAAc,GAEpE9pnB,EAAM6pnB,aAAav4jB,oBAAoB,YAAatxD,EAAM8pnB,cAAc,GAExE9pnB,EAAM6pnB,aAAav4jB,oBAAoB,UAAWtxD,EAAM82S,iBAExD/sM,EAAO6tJ,KAAK7iS,SAAQ,SAAUouR,GAC5B,OAAOnjP,EAAM6pnB,aAAav4jB,oBAAoB6xL,EAAWnjP,EAAM+pnB,mBAEjEhghB,EAAOllJ,IAAIkQ,SAAQ,SAAUouR,GAC3B,OAAOnjP,EAAM6pnB,aAAav4jB,oBAAoB6xL,EAAWnjP,EAAMgqnB,oBAKrEhqnB,EAAMopnB,OAAOjzP,WAAW3wH,YAAYxlQ,EAAMopnB,QAEtCvC,GAAqB7mnB,EAAMspnB,eAC7B9F,EAAgBxjnB,EAAMspnB,cAAe,CACnC/ziB,QAAS,GACT87O,WAAY,KAIhB,IAAK,IAAIhmW,EAAI,EAAG+K,EAAM6G,EAAM/S,OAAQmB,EAAI+K,EAAK/K,IAAK,CAChD,IAAIu/pB,EAAS3tpB,EAAM5R,GACfg3R,EAAKuoY,EAAOn7pB,KAChBm7pB,EAAOC,WAAa,KACpBD,EAAO7G,mBAAqB,KAC5BN,EAAephY,EAAI,MACnBqhY,EAAsBrhY,EAAI,MAC1BuoY,EAAO78gB,UAAY,KAGrB/tG,EAAM+8P,aAAaxhS,QAEnBykC,EAAMszhB,QAAQhoT,OAAS,KACvBtrO,EAAMszhB,QAAQ62F,cAAe,EAE7BnqnB,EAAMirE,SAAS,CACb6vS,SAAS,EACTmvQ,aAAc,OAGS,oBAAd/C,GACTA,EAAU,CACRp6pB,WAAYA,EACZg9R,SAAU9pP,EAAM8pP,SAChBs6X,SAAUpknB,EAAMx7C,MAChB2lqB,aAAcA,GACb36hB,GAGLxvF,EAAM0oN,SAAU,KAGlBx4P,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,cAAc,WAChF,IAAIumnB,EAAoBvmnB,EAAMzN,MAAMg0nB,kBAChC4D,EAAenqnB,EAAMszhB,QAAQ62F,aAEjC,IAAI5D,EAAJ,CAIA,GAAI4D,EAAc,CAChB,IAAIp8gB,EAAYu0gB,EAAa,GAAItinB,EAAM+tG,WAEnCm5U,EAAU,EACVt2I,EAAU,EAgBd,OAdI5wS,EAAMulP,KAAKrlR,IACb6tI,EAAU7tI,EAAI9a,KAAKE,IAAI06C,EAAMimnB,aAAa/lpB,EAAG9a,KAAKC,IAAI26C,EAAMgmnB,aAAa9lpB,EAAG8/B,EAAM+tG,UAAU7tI,IAC5Fgnd,EAAUlnb,EAAM+tG,UAAU7tI,EAAI6tI,EAAU7tI,GAGtC8/B,EAAMulP,KAAK1xP,IACbk6G,EAAUl6G,EAAIzuC,KAAKE,IAAI06C,EAAMimnB,aAAapynB,EAAGzuC,KAAKC,IAAI26C,EAAMgmnB,aAAanynB,EAAGmM,EAAM+tG,UAAUl6G,IAC5F+8S,EAAU5wS,EAAM+tG,UAAUl6G,EAAIk6G,EAAUl6G,GAG1CmM,EAAM+tG,UAAYA,EAClB01gB,EAAezjnB,EAAMopnB,OAAQppnB,EAAM+tG,WACnC/tG,EAAMkkQ,gBAAgB8L,YAAck3K,OACpClnb,EAAMkkQ,gBAAgB+L,WAAa2gC,GAIrC5wS,EAAM+8P,aAAapkS,OAAO,CACxBihH,OAAQ55E,EAAM45E,OACdqsiB,aAAcjmnB,EAAMimnB,aACpBD,aAAchmnB,EAAMgmnB,aACpBj4gB,UAAW/tG,EAAM+tG,UACjBpqE,MAAO3jC,EAAM2jC,YAIjBzzE,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,gBAAgB,SAAU7pC,GAC5F6pC,EAAM+tG,UAAU7tI,GAAK/J,EAAOyM,KAC5Bo9B,EAAM+tG,UAAUl6G,GAAK19B,EAAOwmH,IAE5B38E,EAAMyqnB,kBAGRv6pB,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,iBAAiB,SAAUwvF,GAC7F,IAAI23K,EAAU33K,EAAM23K,QAChBqgX,EAAoBxnnB,EAAMzN,MAAMi1nB,kBAEpC,KAAIxnnB,EAAMszhB,QAAQhoT,QAAWtrO,EAAMszhB,QAAQ62F,gBAAiBnqnB,EAAMszhB,QAAQhoT,QAAW67B,IAAY09W,GAAQG,QAASwC,EAAkBh4hB,IAAWxvF,EAAM8qnB,qBAAqBt7hB,IAO1K,OAHAA,EAAMjjB,kBACNijB,EAAM/F,iBAEE09K,GACN,KAAK09W,GAAQG,MACPhlnB,EAAMszhB,QAAQhoT,OAChBtrO,EAAM+qnB,QAAQv7hB,GAEdxvF,EAAMgrnB,QAAQx7hB,GAGhB,MAEF,KAAKq1hB,GAAQO,KACb,KAAKP,GAAQM,MACXnlnB,EAAMoqnB,QAAQ,GAEd,MAEF,KAAKvF,GAAQK,GACb,KAAKL,GAAQI,KACXjlnB,EAAMoqnB,SAAS,GAEf,MAEF,KAAKvF,GAAQE,IACX/knB,EAAM8pP,SAAW9pP,EAAMszhB,QAAQhoT,OAAO9mR,MAEtCw7C,EAAM+qnB,QAAQv7hB,OAKpBt/H,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,WAAW,SAAUwvF,GACvF,IAAIn6G,EAASm6G,EAAMn6G,OAIf41oB,EAHOpmY,EAAQxvQ,GAAQ,SAAUgtQ,GACnC,OAA0B,MAAnBA,EAAGygY,gBAEmBA,aAC3Bt+pB,EAAQymqB,EAAoBzmqB,MAC5BsI,EAAam+pB,EAAoBn+pB,WACrCkzC,EAAMkrnB,mBAAqB71oB,EAC3B2qB,EAAMszhB,QAAQ62F,cAAe,EAC7BnqnB,EAAMszhB,QAAQhoT,OAAS,CACrB9mR,MAAOA,EACPsI,WAAYA,GAGdkzC,EAAMoonB,YAAY54hB,MAGpBt/H,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,WAAW,SAAU7jC,GACvF,IAAIc,EAAQ+iC,EAAMszhB,QAAQ63F,iBAEtB92gB,EAAYp3I,EAAMA,EAAM/S,OAAS,GAAGuF,KAAKqzpB,aAAat+pB,MACtDslS,EAAW9pP,EAAM8pP,SAAW3tR,EAC5B2ub,EAAY9qZ,EAAM8pP,SAEtB,KAAIA,EAAW,GAAKA,EAAWz1I,GAA/B,CAIAr0G,EAAM8qZ,UAAYA,EAClB9qZ,EAAM8pP,SAAWA,EACjB,IAAI2yK,EAAc0nN,GAAenknB,EAAM8pP,SAAU9pP,EAAM8qZ,UAAW9qZ,EAAMx7C,OACpE6wB,EAASpY,EAAM+M,MAAK,SAAUgnB,GAEhC,OADWA,EAAMvhC,KACLqzpB,aAAat+pB,QAAUi4c,KAEjC2uN,EAAa/1oB,EAAO5lB,KACpB8nV,EAAcv3S,EAAMqrnB,qBACpBC,EAA2Bj2oB,EAAO0uoB,oBAAsBD,GAAoCsH,EAAY7zU,GACxGg0U,EAAkBl2oB,EAAO04H,WAAa,CACxC7tI,EAAG,EACH2zB,EAAG,GAED23nB,EAAiB,CACnB7uiB,IAAK2uiB,EAAyB3uiB,IAAM4uiB,EAAgB13nB,EAAI0jT,EAAY56N,IACpE/5G,KAAM0opB,EAAyB1opB,KAAO2opB,EAAgBrrpB,EAAIq3U,EAAY30U,MAEpE6opB,EAAsB3gO,EAAYhhK,EAClC4hY,EAAiB,CACnBxrpB,EAAGurpB,GAAuBzrnB,EAAMulP,KAAKrlR,EAAIkrpB,EAAWl5U,YAAclyS,EAAM2jC,MAAQ,EAChF9vC,EAAG43nB,GAAuBzrnB,EAAMulP,KAAK1xP,EAAIu3nB,EAAWj5U,aAAenyS,EAAM45E,OAAS,GAGpF55E,EAAM+pnB,eAAe,CACnB9F,MAAOuH,EAAe5opB,KAAO8opB,EAAexrpB,EAC5CgkpB,MAAOsH,EAAe7uiB,IAAM+uiB,EAAe73nB,EAC3C83nB,iBAA4B,IAAVxvpB,QAItBjM,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,WAAW,SAAUwvF,GACvFxvF,EAAMgqnB,cAAcx6hB,GAEhBxvF,EAAMkrnB,oBACRlrnB,EAAMkrnB,mBAAmBn4lB,WAI7B7iE,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,gBAAgB,SAAUwvF,GACxFxvF,EAAMszhB,QAAQhoT,QAChBtrO,EAAM+qnB,QAAQv7hB,MAIlBt/H,EAAe8npB,EAAsBA,EAAsBh4mB,IAAS,wBAAwB,SAAUwvF,GACpG,IAAIk4hB,EAAgB1nnB,EAAMzN,MAAMm1nB,cAC5BryoB,EAASm6G,EAAMn6G,OACf5lB,EAAOo1R,EAAQxvQ,GAAQ,SAAUgtQ,GACnC,OAA0B,MAAnBA,EAAGygY,gBAEZ,OAAOrzpB,GAAQA,EAAKqzpB,eAAiBrzpB,EAAKqzpB,aAAav9iB,WAAamijB,EAAgB7B,GAAiBxwoB,GAAUA,EAAOytoB,iBAGxH+E,GAAct1nB,GACdyN,EAAM3Q,MAAQ,GACd2Q,EAAMszhB,QAAU,IAAIuvF,EACpB7inB,EAAM+pG,OAAS,CACbllJ,IAAKm7C,EAAMk4S,UACXtgD,KAAM53P,EAAMg4S,WACZ5vU,MAAO43B,EAAMi3S,aAERj3S,EA8TT,OAz3BA2inB,EAASsF,EAAuBzvZ,GA8jBhCgqZ,EAAYyF,EAAuB,CAAC,CAClCt7pB,IAAK,kBACL5I,MAAO,WACL,MAAO,CACLuvkB,QAASjrkB,KAAKirkB,WAGjB,CACD3mkB,IAAK,oBACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETs/pB,EAA6Bt/pB,KAAKkqC,MAAMo1nB,2BACxC9llB,EAAYx5E,KAAKm+pB,eACrBl/mB,QAAQC,QAAQs6B,GAAWjD,MAAK,SAAUgtlB,GACxCngjB,EAAO5pC,UAAY+plB,EACnBngjB,EAAOp9E,SAAWo9E,EAAO5pC,UAAU6jO,eAAiBr3Q,SACpD,IAAIuvd,EAAgBnyY,EAAOl5E,MAAMqrd,eAAiBnyY,EAAOp9E,SAASs3Q,aAAe5uR,OACjF00F,EAAOmyY,cAAyC,oBAAlBA,EAA+BA,IAAkBA,EAC/EnyY,EAAOy4L,gBAAkByjX,EAA6Bl8iB,EAAOp9E,SAASotT,kBAAoBhwO,EAAOp9E,SAASz+B,gBAAkBg1pB,GAAmBn5iB,EAAO5pC,YAAc4pC,EAAO5pC,UAC3K4pC,EAAOsxL,aAAe,IAAI+oX,GAAar6iB,EAAOy4L,gBAAiBz4L,EAAOogjB,cACtEplqB,OAAO0D,KAAKshH,EAAOs+B,QAAQh1I,SAAQ,SAAUpI,GAC3C,OAAOo9I,EAAOp9I,GAAKoI,SAAQ,SAAUouR,GACnC,OAAO13K,EAAO5pC,UAAUwvB,iBAAiB8xL,EAAW13K,EAAOs+B,OAAOp9I,IAAM,SAI5E8+G,EAAO5pC,UAAUwvB,iBAAiB,UAAWoa,EAAOqrO,oBAGvD,CACDnqV,IAAK,uBACL5I,MAAO,WACL,IAAI6nH,EAASvjH,KAETA,KAAK+gqB,QAAU/gqB,KAAK+gqB,OAAOjzP,YAC7B9ta,KAAK+gqB,OAAOjzP,WAAW3wH,YAAYn9S,KAAK+gqB,QAGrC/gqB,KAAKw5E,YAIVp7E,OAAO0D,KAAK9B,KAAK0hJ,QAAQh1I,SAAQ,SAAUpI,GACzC,OAAOo9I,EAAOp9I,GAAKoI,SAAQ,SAAUouR,GACnC,OAAOv3K,EAAO/pC,UAAUyvB,oBAAoB6xL,EAAWv3K,EAAOm+B,OAAOp9I,UAGzEtE,KAAKw5E,UAAUyvB,oBAAoB,UAAWjpG,KAAKyuV,kBAEpD,CACDnqV,IAAK,uBACL5I,MAAO,SAA8ByrI,GACnC,IAAImigB,EAAetpoB,KAAKkqC,MACpBw0nB,EAAWp1B,EAAao1B,SACxBzC,EAAa3yB,EAAa2yB,WAC1B2C,EAAuBt1B,EAAas1B,qBACpC54hB,EAAqBsjgB,EAAatjgB,mBAClCy9hB,EAAwBn6B,EAAam1B,kCACrCA,OAA8D,IAA1BgF,EAAmCz9hB,EAAqBy9hB,EAC5F3B,EAAe9hqB,KAAKirkB,QAAQ62F,aAC5BwB,EAAmBn8hB,EAAMm8hB,iBACzBx1pB,EAAS6tpB,GAAYx0hB,GACrBue,EAAY,CACd7tI,EAAG/J,EAAO+J,EAAI7X,KAAK4gqB,cAAc/opB,EACjC2zB,EAAG19B,EAAO09B,EAAIxrC,KAAK4gqB,cAAcp1nB,GAMnC,GAJAk6G,EAAUl6G,GAAK9c,OAAO+qQ,YAAcz5R,KAAK0sS,oBAAoBp4K,IAC7DoxB,EAAU7tI,GAAK6W,OAAO8qQ,YAAcx5R,KAAK0sS,oBAAoBnyR,KAC7Dva,KAAK0lJ,UAAYA,EAEbk5gB,EAAsB,CACxB,IAAI8E,EAAuBxH,GAAoB,CAC7C3qiB,OAAQvxH,KAAKuxH,OACb0qiB,WAAYA,EACZ3glB,MAAOt7E,KAAKs7E,QAEVqolB,EAAwB3J,EAAc0J,EAAsB,GAC5DrH,EAAgBsH,EAAsB,GACtCrH,EAAgBqH,EAAsB,GAEtCnvN,EAAY,CACd38b,EAAG7X,KAAKs7E,MAAQ,EAAI+glB,EAAcxkpB,EAClC2zB,EAAGxrC,KAAKuxH,OAAS,EAAI8qiB,EAAc7wnB,GAEjC+oa,EAAY,CACd18b,EAAG7X,KAAKs7E,MAAQ,EAAIghlB,EAAczkpB,EAClC2zB,EAAGxrC,KAAKuxH,OAAS,EAAI+qiB,EAAc9wnB,GAErCk6G,EAAU7tI,EAAI4xG,EAAMzpH,KAAK29pB,aAAa9lpB,EAAI28b,EAAU38b,EAAG7X,KAAK49pB,aAAa/lpB,EAAI08b,EAAU18b,EAAG6tI,EAAU7tI,GACpG6tI,EAAUl6G,EAAIi+E,EAAMzpH,KAAK29pB,aAAanynB,EAAIgpa,EAAUhpa,EAAGxrC,KAAK49pB,aAAapynB,EAAI+oa,EAAU/oa,EAAGk6G,EAAUl6G,GAGrF,MAAbkznB,EACFh5gB,EAAUl6G,EAAI,EACQ,MAAbkznB,IACTh5gB,EAAU7tI,EAAI,GAGZiqpB,GAAgBrD,IAAsC6E,GACxDjI,EAAsBr7pB,KAAK+gqB,OAAQtC,GAGrCrD,EAAep7pB,KAAK+gqB,OAAQr7gB,KAE7B,CACDphJ,IAAK,eACL5I,MAAO,WACL,IAAI8toB,EAAexpoB,KAAKkqC,MACpB87F,EAAqBwjgB,EAAaxjgB,mBAClCw4hB,EAAoBh1B,EAAag1B,kBACjCO,EAAav1B,EAAau1B,WAC1BiE,EAAuBhjqB,KAAKgjqB,qBAC5BY,EAAoB5jqB,KAAK4jqB,kBACzBhvpB,EAAQ5U,KAAKirkB,QAAQ63F,iBACrBe,EAAgB,CAClBtppB,KAAMva,KAAK2gqB,WAAWpmpB,KAAOva,KAAK0lJ,UAAU7tI,EAAImrpB,EAAqBzopB,KACrE+5G,IAAKt0H,KAAK2gqB,WAAWrsiB,IAAMt0H,KAAK0lJ,UAAUl6G,EAAIw3nB,EAAqB1uiB,KAEjEwtiB,EAAe9hqB,KAAKirkB,QAAQ62F,aAC5Br/N,EAAYzic,KAAKyhS,SACrBzhS,KAAKyhS,SAAW,KAEhB,IAAK,IAAIz+R,EAAI,EAAG+K,EAAM6G,EAAM/S,OAAQmB,EAAI+K,EAAK/K,IAAK,CAChD,IAAI8gqB,EAASlvpB,EAAM5R,GAAGoE,KAClBjL,EAAQ2nqB,EAAOrJ,aAAat+pB,MAC5Bm/E,EAAQwolB,EAAOj6U,YACft4N,EAASuyiB,EAAOh6U,aAChBh8U,EAAS,CACXyjH,OAAQvxH,KAAKuxH,OAASA,EAASA,EAAS,EAAIvxH,KAAKuxH,OAAS,EAC1Dj2C,MAAOt7E,KAAKs7E,MAAQA,EAAQA,EAAQ,EAAIt7E,KAAKs7E,MAAQ,GAEnDyolB,EAAoBjC,GAAgB3lqB,EAAQ6D,KAAK7D,OAASA,GAASsmc,EACnEuhO,EAAmBlC,GAAgB3lqB,EAAQ6D,KAAK7D,OAASA,GAASsmc,EAClE/8S,EAAY,CACd7tI,EAAG,EACH2zB,EAAG,GAEDg3nB,EAAa5tpB,EAAM5R,GAAGw/pB,WAErBA,IACHA,EAAa94U,GAAco6U,EAAQ9jqB,KAAKw5E,WACxC5kE,EAAM5R,GAAGw/pB,WAAaA,EAElBV,IACFltpB,EAAM5R,GAAG04pB,mBAAqBD,GAAoCqI,EAAQd,KAI9E,IAAIn0P,EAAW7ra,EAAI4R,EAAM/S,OAAS,GAAK+S,EAAM5R,EAAI,GAC7CihqB,EAAWjhqB,EAAI,GAAK4R,EAAM5R,EAAI,GAE9B6ra,IAAaA,EAAS2zP,aACxB3zP,EAAS2zP,WAAa94U,GAAcmlF,EAASzna,KAAMpH,KAAKw5E,WAEpDsolB,IACFjzP,EAAS6sP,mBAAqBD,GAAoC5sP,EAASzna,KAAM47pB,KAIjF7mqB,IAAU6D,KAAK7D,OAYf6pI,GACFq1hB,EAAsByI,EAAQ99hB,GAG5BhmI,KAAKk9R,KAAKrlR,EACR7X,KAAKk9R,KAAK1xP,EACRw4nB,GAAoB7nqB,EAAQ6D,KAAK7D,QAAU0nqB,EAActppB,KAAOqppB,EAAkBrppB,KAAOzM,EAAOwtE,OAASknlB,EAAWjopB,MAAQsppB,EAAcvviB,IAAMsviB,EAAkBtviB,KAAOkuiB,EAAWluiB,IAAMxmH,EAAOyjH,QAAUsyiB,EAAcvviB,IAAMsviB,EAAkBtviB,IAAMxmH,EAAOyjH,QAAUixiB,EAAWluiB,MACrRoxB,EAAU7tI,EAAI7X,KAAKs7E,MAAQt7E,KAAKygqB,aAAa5opB,EAEzC2qpB,EAAWjopB,KAAOmrI,EAAU7tI,EAAI7X,KAAKugqB,sBAAsBjllB,MAAQxtE,EAAOwtE,OACxEuzV,IACFnpR,EAAU7tI,EAAIg3Z,EAAS2zP,WAAWjopB,KAAOiopB,EAAWjopB,KACpDmrI,EAAUl6G,EAAIqjY,EAAS2zP,WAAWluiB,IAAMkuiB,EAAWluiB,KAIjC,OAAlBt0H,KAAKyhS,WACPzhS,KAAKyhS,SAAWtlS,KAET4nqB,GAAqB5nqB,EAAQ6D,KAAK7D,QAAU0nqB,EAActppB,KAAOqppB,EAAkBrppB,KAAOzM,EAAOwtE,OAASknlB,EAAWjopB,MAAQsppB,EAAcvviB,IAAMsviB,EAAkBtviB,IAAMxmH,EAAOyjH,QAAUixiB,EAAWluiB,KAAOuviB,EAAcvviB,IAAMsviB,EAAkBtviB,IAAMxmH,EAAOyjH,QAAUixiB,EAAWluiB,IAAM/C,MACnSm0B,EAAU7tI,IAAM7X,KAAKs7E,MAAQt7E,KAAKygqB,aAAa5opB,GAE3C2qpB,EAAWjopB,KAAOmrI,EAAU7tI,EAAI7X,KAAKugqB,sBAAsBhmpB,KAAOzM,EAAOwtE,OACvE2olB,IACFv+gB,EAAU7tI,EAAIospB,EAASzB,WAAWjopB,KAAOiopB,EAAWjopB,KACpDmrI,EAAUl6G,EAAIy4nB,EAASzB,WAAWluiB,IAAMkuiB,EAAWluiB,KAIvDt0H,KAAKyhS,SAAWtlS,GAGd4nqB,GAAqB5nqB,EAAQ6D,KAAK7D,OAAS0nqB,EAActppB,KAAOqppB,EAAkBrppB,KAAOzM,EAAOwtE,OAASknlB,EAAWjopB,MACtHmrI,EAAU7tI,IAAM7X,KAAKs7E,MAAQt7E,KAAKygqB,aAAa5opB,GAC/C7X,KAAKyhS,SAAWtlS,IACP6nqB,GAAoB7nqB,EAAQ6D,KAAK7D,OAAS0nqB,EAActppB,KAAOqppB,EAAkBrppB,MAAQiopB,EAAWjopB,KAAOzM,EAAOwtE,SAC3HoqE,EAAU7tI,EAAI7X,KAAKs7E,MAAQt7E,KAAKygqB,aAAa5opB,EAExB,MAAjB7X,KAAKyhS,WACPzhS,KAAKyhS,SAAWtlS,IAIb6D,KAAKk9R,KAAK1xP,IACfu4nB,GAAqB5nqB,EAAQ6D,KAAK7D,OAAS0nqB,EAAcvviB,IAAMsviB,EAAkBtviB,IAAMxmH,EAAOyjH,QAAUixiB,EAAWluiB,KACrHoxB,EAAUl6G,IAAMxrC,KAAKuxH,OAASvxH,KAAKygqB,aAAaj1nB,GAChDxrC,KAAKyhS,SAAWtlS,IACP6nqB,GAAoB7nqB,EAAQ6D,KAAK7D,OAAS0nqB,EAAcvviB,IAAMsviB,EAAkBtviB,KAAOkuiB,EAAWluiB,IAAMxmH,EAAOyjH,UACxHm0B,EAAUl6G,EAAIxrC,KAAKuxH,OAASvxH,KAAKygqB,aAAaj1nB,EAEzB,MAAjBxrC,KAAKyhS,WACPzhS,KAAKyhS,SAAWtlS,KAKtBi/pB,EAAe0I,EAAQp+gB,GACvB9wI,EAAM5R,GAAG0iJ,UAAYA,GApEf84gB,IACFx+pB,KAAKihqB,cAAgB6C,EACrB3I,EAAgB2I,EAAQ,CACtB52iB,QAAS,EACT87O,WAAY,YAmEC,MAAjBhpW,KAAKyhS,WACPzhS,KAAKyhS,SAAWzhS,KAAK7D,OAGnB2lqB,IACF9hqB,KAAKyhS,SAAWghK,GAGlB,IAAIs5N,EAAW+F,EAAe9hqB,KAAKyic,UAAYA,EAE3Cs8N,GAAc/+pB,KAAKyhS,WAAas6X,GAClCgD,EAAW,CACTt6pB,WAAYzE,KAAKirkB,QAAQhoT,OAAOx+Q,WAChCtI,MAAO6D,KAAK7D,MACZslS,SAAUzhS,KAAKyhS,SACfs6X,SAAUA,EACV+F,aAAcA,MAInB,CACDx9pB,IAAK,qBACL5I,MAAO,WAEL,OADA6+pB,EAAY70mB,EAAOpc,QAAS,8HACrBtpC,KAAKq/V,KAAKk+T,kBAElB,CACDj5pB,IAAK,eACL5I,MAAO,WACL,IAAIyiqB,EAAen+pB,KAAKkqC,MAAMi0nB,aAE9B,MAA4B,oBAAjBA,EACFrE,EAAShwY,YAAY9pR,MAGvBm+pB,EAAaz4mB,EAAOpc,QAAUtpC,KAAKkkqB,0BAAuBpoqB,KAElE,CACDwI,IAAK,SACL5I,MAAO,WACL,IAAID,EAAMiqD,EAAOpc,QAAU,kBAAoB,KAC/C,OAAO7E,EAAMwB,cAAc0D,EAAkBownB,EAAW,CACtDt+pB,IAAKA,GACJo4L,EAAK7zL,KAAKkqC,MAAOq1nB,QAErB,CACDj7pB,IAAK,kBACLP,IAAK,WACH,IAAIu6pB,EAAkBt+pB,KAAKkqC,MAAMo0nB,gBAEjC,MAA+B,oBAApBA,EACFA,IAGFt+pB,KAAKkqC,MAAMo0nB,iBAAmBt+pB,KAAKgmC,SAASywC,OAEpD,CACDnyE,IAAK,uBACLP,IAAK,WAGH,OAFiC/D,KAAKkqC,MAAMo1nB,2BAGnC,CACL/kpB,KAAM,EACN+5G,IAAK,GAIF,CACL/5G,KAAMva,KAAK67S,gBAAgB8L,WAAa3nT,KAAK8gqB,cAAcvmpB,KAC3D+5G,IAAKt0H,KAAK67S,gBAAgB+L,UAAY5nT,KAAK8gqB,cAAcxsiB,OAG5D,CACDhwH,IAAK,oBACLP,IAAK,WACH,MAAO,CACLwW,KAAMva,KAAKu1f,cAAc/7N,YAAcx5R,KAAK0sS,oBAAoBnyR,KAChE+5G,IAAKt0H,KAAKu1f,cAAc97N,YAAcz5R,KAAK0sS,oBAAoBp4K,SAK9DsriB,EA13Be,CA23BtBn7nB,EAAMkV,WAAY9xC,EAAeo6G,EAAQ,cAAeu5iB,GAAmB,eAAgB7xnB,IAAoB9hC,EAAeo6G,EAAQ,eAAgBR,IAAe55G,EAAeo6G,EAAQ,YAAa68J,IAAYj3Q,EAAeo6G,EAAQ,oBAAqB,CACjQgpd,QAASlsT,EAAU56Q,OAAO00U,aACxBlqS,EAGN,IAAIw1nB,GAAc,CAChBhoqB,MAAO4iR,EAAUvkG,OAAOq+J,WACxBp0U,WAAYs6Q,EAAUC,UAAU,CAACD,EAAUvkG,OAAQukG,EAAUx4Q,SAC7D22G,SAAU6hK,EAAU99H,MAElBmjhB,GAAiBhmqB,OAAO0D,KAAKqiqB,IACjC,SAASE,GAAgB16nB,GACvB,IAAIs4E,EAAQtzE,EAER+W,EAAShiD,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,CAC/E4lC,SAAS,GAEX,OAAOqF,EAAQszE,EAAS,SAAUkuJ,GAGhC,SAASm0Z,IAGP,OAFApK,EAAel6pB,KAAMskqB,GAEdjK,EAA0Br6pB,KAAM+oB,EAAeu7oB,GAAqBr8pB,MAAMjI,KAAM0D,YAyEzF,OA9EA42pB,EAASgK,EAAqBn0Z,GAQ9BgqZ,EAAYmK,EAAqB,CAAC,CAChChgqB,IAAK,oBACL5I,MAAO,WACLsE,KAAKutM,aAEN,CACDjpM,IAAK,qBACL5I,MAAO,SAA4B2iH,GAC7Br+G,KAAKoH,OACHi3G,EAAUliH,QAAU6D,KAAKkqC,MAAM/tC,QACjC6D,KAAKoH,KAAKqzpB,aAAat+pB,MAAQ6D,KAAKkqC,MAAM/tC,OAGxCkiH,EAAUnB,WAAal9G,KAAKkqC,MAAMgzE,WACpCl9G,KAAKoH,KAAKqzpB,aAAav9iB,SAAWl9G,KAAKkqC,MAAMgzE,WAI7CmB,EAAU55G,aAAezE,KAAKkqC,MAAMzlC,aACtCzE,KAAKg+S,WAAW3/L,EAAU55G,YAC1BzE,KAAKutM,cAGR,CACDjpM,IAAK,uBACL5I,MAAO,WACLsE,KAAKg+S,eAEN,CACD15S,IAAK,WACL5I,MAAO,WACL,IAAI6mH,EAAcviH,KAAKkqC,MACnBzlC,EAAa89G,EAAY99G,WACzBy4G,EAAWqF,EAAYrF,SACvB/gH,EAAQomH,EAAYpmH,MACpBiL,EAAO0ypB,EAAShwY,YAAY9pR,MAChCoH,EAAKqzpB,aAAe,CAClBh2pB,WAAYA,EACZy4G,SAAUA,EACV/gH,MAAOA,EACP8ukB,QAASjrkB,KAAKkJ,QAAQ+hkB,SAExBjrkB,KAAKoH,KAAOA,EACZpH,KAAKvE,IAAM,CACT2L,KAAMA,GAERpH,KAAKkJ,QAAQ+hkB,QAAQtsjB,IAAIla,EAAYzE,KAAKvE,OAE3C,CACD6I,IAAK,aACL5I,MAAO,WACL,IAAI+I,EAAaf,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MAAMzlC,WAChGzE,KAAKkJ,QAAQ+hkB,QAAQ/7jB,OAAOzK,EAAYzE,KAAKvE,OAE9C,CACD6I,IAAK,qBACL5I,MAAO,WAEL,OADA6+pB,EAAY70mB,EAAOpc,QAAS,4HACrBtpC,KAAKq/V,KAAKk+T,kBAElB,CACDj5pB,IAAK,SACL5I,MAAO,WACL,IAAID,EAAMiqD,EAAOpc,QAAU,kBAAoB,KAC/C,OAAO7E,EAAMwB,cAAc0D,EAAkBownB,EAAW,CACtDt+pB,IAAKA,GACJo4L,EAAK7zL,KAAKkqC,MAAOk6nB,UAIjBE,EA/Ee,CAgFtB7/nB,EAAMkV,WAAY9xC,EAAeo6G,EAAQ,cAAeu5iB,GAAmB,kBAAmB7xnB,IAAoB9hC,EAAeo6G,EAAQ,eAAgB,CACzJgpd,QAASlsT,EAAU56Q,OAAO00U,aACxBhxU,EAAeo6G,EAAQ,YAAakijB,IAAct8pB,EAAeo6G,EAAQ,eAAgB,CAC3Fx9G,WAAY,IACVkqC,EAGNxzC,EAAQopqB,kBAAoB5E,GAC5BxkqB,EAAQwkqB,kBAAoBA,GAC5BxkqB,EAAQqpqB,gBAAkBH,GAC1BlpqB,EAAQkpqB,gBAAkBA,GAC1BlpqB,EAAQspqB,eAAiBpH,GACzBliqB,EAAQkiqB,eAAiBA,GACzBliqB,EAAQquE,UAAYA,EAEpBprE,OAAOyJ,eAAe1M,EAAS,aAAc,CAAEO,OAAO,IA1yDSs/P,CAAQ7/P,EAASC,EAAQ,GAAUA,EAAQ,IAAeA,EAAQ,M,6BCDlI,kFA2He6/E,IA/GE,SAAoB2hI,GACnC,IAAI5wK,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAClF,OAAO,SAAUi2C,GACf,IAAImjK,EAAe9wK,EAAQ8wK,aACvBs9Y,EAAqBpujB,EAAQgjF,UAC7BA,OAAmC,IAAvBore,GAAwCA,EACpD5rlB,EAAOw9B,EAAQx9B,KACfuzkB,EAAgB7kiB,YAAyBlR,EAAS,CAAC,eAAgB,YAAa,SAQpF,IAAIshY,EAAkB9+Z,EAalBghH,EAAYJ,YAAWwtF,EAAiB9yK,YAAS,CACnDgzK,aAAcA,EACdnjK,UAAWA,EACXnrC,KAAMA,GAAQmrC,EAAUpxB,YACxB+kZ,gBAAiBA,GAChBy0K,IACC2iF,EAAajgoB,IAAM8E,YAAW,SAAoBW,EAAOzuC,GACzCyuC,EAAMgvC,QAAxB,IAKIgC,EAJAgyL,EAAWhjO,EAAMgjO,SACjBvsP,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,aAEpDgvC,EAAUs2C,EAAUtlF,GAEpB+wjB,EAAOt6kB,EAsBX,OApBoB,kBAATnS,GAAqBwgH,KAG9B9zC,EAAQwjD,eAAco+E,EAElBtuM,IACFyslB,EAAOJ,YAAc,CACnB3/gB,MAAOA,EACP1sE,KAAMA,EACN07B,MAAOvpB,KAMPquG,IAAcise,EAAK//gB,QACrB+/gB,EAAK//gB,MAAQA,IAIVz2C,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CruC,IAAKyxQ,GAAYzxQ,EACjBy9E,QAASA,GACR+hhB,OAyCL,OAfAypE,EAAWjjjB,aAAe9nE,EAAU8nE,aAMpC0rJ,IAAqBu3Z,EAAY/qnB,GAS1B+qnB,K,6BCvHX,6DA8BIzspB,EAAOwsB,IAAM8E,YAAW,SAAcW,EAAOzuC,GAC/C,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,KAAOA,EACjDwsV,EAAe37X,EAAMqgW,MACrBA,OAAyB,IAAjBs7B,GAAkCA,EAC1C8+P,EAAwBz6nB,EAAM4+jB,eAC9BA,OAA2C,IAA1B67D,GAA2CA,EAC5DvyF,EAAYloiB,EAAMkoiB,UAClBzxjB,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,YAAa,QAAS,iBAAkB,cAErHhhC,EAAUu7B,IAAM+B,SAAQ,WAC1B,MAAO,CACL+jW,MAAOA,KAER,CAACA,IACJ,OAAO9lW,IAAMwB,cAAc+/X,IAAY5/X,SAAU,CAC/C1qC,MAAOwN,GACNu7B,IAAMwB,cAAc0T,EAAW7P,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAWmxT,GAASrxT,EAAQqxT,OAAQu+N,GAAkB5vhB,EAAQ4C,QAASs2f,GAAal5f,EAAQk5f,WAC1H32kB,IAAKA,GACJklB,GAAQyxjB,EAAW9riB,OA0CT20C,gBAxFK,CAElB1jE,KAAM,CACJqtpB,UAAW,OACXrplB,OAAQ,EACRO,QAAS,EACTmhC,SAAU,YAIZnhC,QAAS,CACPm2C,WAAY,EACZC,cAAe,GAIjBq4Q,MAAO,GAGP6nM,UAAW,CACTngd,WAAY,IAoEkB,CAChCzjH,KAAM,WADOysE,CAEZhjE,I,6B1exFH,IAAY,EAAZ,2CAAY,GACV,mBACA,qBACE,EAAF,iBACA,yBACA,qBALF,CAAY,MAAQ,M,mK2eOpB,SAAS4spB,EAAel/pB,EAAGC,GACzB,MAAmB,WAAf20C,YAAQ30C,IAAyB,OAANA,EACtBD,IAAMC,EAGRiJ,OAAOlJ,KAAOkJ,OAAOjJ,GAW9B,IA6eek/pB,EA7eGrgoB,IAAM8E,YAAW,SAAqBW,EAAOzuC,GAC7D,IAAI07T,EAAYjtR,EAAMitR,UAClBgmJ,EAAYjza,EAAMiza,UAClB72a,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClB77B,EAAerT,EAAMqT,aACrB2/D,EAAWhzE,EAAMgzE,SACjB6njB,EAAe76nB,EAAM66nB,aACrB9M,EAAgB/tnB,EAAM+tnB,cACtB+M,EAAe96nB,EAAMq3R,SACrB+7R,EAAUpzjB,EAAMozjB,QAChB2nE,EAAmB/6nB,EAAMg7nB,UACzBA,OAAiC,IAArBD,EAA8B,GAAKA,EAC/CtkjB,EAAWz2E,EAAMy2E,SACjBnyG,EAAO07B,EAAM17B,KACbk3H,EAASx7F,EAAMw7F,OACflqB,EAAWtxE,EAAMsxE,SACjBmpB,EAAUz6F,EAAMy6F,QAChB57B,EAAU7+D,EAAM6+D,QAChB67B,EAAS16F,EAAM06F,OACfwiJ,EAAWl9O,EAAMygE,KACjBuhd,EAAWhihB,EAAMgihB,SACjBzqK,EAAcv3W,EAAMu3W,YAEpB0jR,GADWj7nB,EAAM84J,SACO94J,EAAMk7nB,oBAC9BA,OAA+C,IAA1BD,EAAmC,GAAKA,EAC7D76R,EAAepgW,EAAMo6F,SAErB+giB,GADOn7nB,EAAMhqC,KACDgqC,EAAMxuC,OAClBs2J,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,WAAaA,EACnDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,YAAa,YAAa,WAAY,UAAW,YAAa,eAAgB,WAAY,eAAgB,gBAAiB,WAAY,UAAW,YAAa,WAAY,OAAQ,SAAU,WAAY,UAAW,UAAW,SAAU,OAAQ,WAAY,cAAe,WAAY,qBAAsB,WAAY,OAAQ,QAAS,YAEpXg+O,EAAiBC,YAAc,CACjCC,WAAYi9Y,EACZz5iB,QAASruE,EACT/uC,KAAM,gBAEJ65Q,EAAkBl1O,YAAe+0O,EAAgB,GACjDxsR,EAAQ2sR,EAAgB,GACxBspC,EAAWtpC,EAAgB,GAE3Bk5C,EAAW98R,IAAMyG,OAAO,MAExB64F,EAAkBt/F,IAAMia,SAAS,MACjC4mnB,EAAcvhiB,EAAgB,GAC9BwhiB,EAAiBxhiB,EAAgB,GAGjCyhiB,EADgB/goB,IAAMyG,OAAmB,MAAZk8O,GACIt/O,QAEjC4/O,EAAmBjjP,IAAMia,WACzB+mnB,GAAoB/9Y,EAAiB,GACrCg+Y,GAAuBh+Y,EAAiB,GAExCc,GAAmB/jP,IAAMia,UAAS,GAClC4pO,GAAYE,GAAiB,GAC7BD,GAAeC,GAAiB,GAEhCuB,GAAYljJ,YAAWprI,EAAKupqB,GAChCvgoB,IAAMkhoB,oBAAoB57Y,IAAW,WACnC,MAAO,CACLr/M,MAAO,WACL46lB,EAAY56lB,SAEdtjE,KAAMm6T,EAASz5R,QACfpsC,MAAOA,KAER,CAAC4pqB,EAAa5pqB,IACjB+oC,IAAM0B,WAAU,WACVgxR,GAAamuW,GACfA,EAAY56lB,UAEb,CAACysP,EAAWmuW,IAEf,IAgGIlqlB,GACAwqlB,GAjGAt1pB,GAAS,SAAgBq6F,EAAMw8B,GAC7Bx8B,EACEi6B,GACFA,EAAOuC,GAEAxC,GACTA,EAAQwC,GAGLq+hB,IACHE,GAAqBvoN,EAAY,KAAOmoN,EAAYlmiB,aACpDmpJ,GAAa59K,KAebk7jB,GAAkB,SAAyB3rnB,GAC7C,OAAO,SAAUitF,GAKf,IAAIt3H,EAEJ,GANK8wG,GACHrwG,IAAO,EAAO62H,GAKZxmB,EAAU,CACZ9wG,EAAWpO,MAAMC,QAAQhG,GAASikG,YAAmBjkG,GAAS,GAC9D,IAAIwma,EAAYxma,EAAM8kB,QAAQ05B,EAAMhQ,MAAMxuC,QAEvB,IAAfwma,EACFryZ,EAASzD,KAAK8tC,EAAMhQ,MAAMxuC,OAE1BmU,EAAST,OAAO8yZ,EAAW,QAG7BryZ,EAAWqqC,EAAMhQ,MAAMxuC,MAGzBi2T,EAAS9hT,GAEL2rG,IACF2rB,EAAMC,UAENhpI,OAAOyJ,eAAes/H,EAAO,SAAU,CACrCn/H,UAAU,EACVtM,MAAO,CACLA,MAAOmU,EACPrB,KAAMA,KAGVgtG,EAAS2rB,EAAOjtF,MAkBlBywD,GAAuB,OAAhB26jB,IAAyBE,EAAmBp+Y,EAAWkB,WAkB3D3nQ,EAAM,gBAGb,IAAImlpB,GAAkB,GAClBC,IAAiB,GAGjBnzP,YAAS,CACXl3a,MAAOA,KACHqpqB,KACAtjR,EACFrmU,GAAUqmU,EAAY/lZ,GAEtBqqqB,IAAiB,GAIrB,IAAI/+Z,GAAQviO,IAAM+iG,SAASx+H,IAAIs9B,GAAU,SAAU4T,GACjD,IAAKzV,IAAM6V,eAAeJ,GACxB,OAAO,KAST,IAAIorE,EAEJ,GAAI3E,EAAU,CACZ,IAAKl/G,MAAMC,QAAQhG,GACjB,MAAM,IAAIkM,MAAM,sGAGlB09G,EAAW5pH,EAAM+R,MAAK,SAAUrN,GAC9B,OAAOykqB,EAAezkqB,EAAG85C,EAAMhQ,MAAMxuC,YAGvBqqqB,IACdD,GAAgB15pB,KAAK8tC,EAAMhQ,MAAM5D,eAGnCg/E,EAAWu/iB,EAAenpqB,EAAOw+C,EAAMhQ,MAAMxuC,SAE7BqqqB,KACdH,GAAgB1rnB,EAAMhQ,MAAM5D,UAQhC,OAJIg/E,IACW,EAGR7gF,IAAMyX,aAAahC,EAAO,CAC/B,gBAAiBorE,EAAW,YAASxpH,EACrC+oH,QAASghjB,GAAgB3rnB,GACzB8rnB,QAAS,SAAiB7+hB,GACN,MAAdA,EAAM7iI,KAIR6iI,EAAM/F,iBAGR,IAAI4kiB,EAAU9rnB,EAAMhQ,MAAM87nB,QAEH,oBAAZA,GACTA,EAAQ7+hB,IAGZzlF,KAAM,SACN4jE,SAAUA,EACV5pH,WAAOI,EAEP,aAAco+C,EAAMhQ,MAAMxuC,WAqB1BqqqB,KACF3qlB,GAAUulC,EAAWmljB,GAAgBrkpB,KAAK,MAAQmkpB,IAIpD,IAMIthiB,GANA2hiB,GAAeR,IAEdtoN,GAAaqoN,GAAoBF,IACpCW,GAAeX,EAAYlmiB,aAM3BkF,GAD0B,qBAAjBgmQ,EACEA,EAEAptR,EAAW,KAAO,EAG/B,IAAIgpjB,GAAWd,EAAmBnkoB,KAAOzyB,EAAO,wBAAwBlD,OAAOkD,QAAQ1S,GACvF,OAAO2oC,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,MAAO6D,YAAS,CACnFsvC,UAAW2B,kBAAK7B,EAAQ3hE,KACxB2hE,EAAQ6mB,OAAQ7mB,EAAQwzT,WAAYxzT,EAAQwgC,GAAUtgC,EAAW8jC,GAAYhkC,EAAQgkC,UACrFzhH,IAAK8pqB,EACLjhiB,SAAUA,GACV5iF,KAAM,SACN,gBAAiBipD,GAAO,YAAS7uG,EACjC,kBAAmB,GAAGwP,OAAOgylB,GAAW,GAAI,KAAKhylB,OAAO46pB,IAAY,IACpE,gBAAiB,UACjB/kiB,UA5JkB,SAAuBgG,GACzC,IAAK+kb,EAAU,EAKyB,IAJtB,CAAC,IAAK,UAAW,YAEjC,SAEc1riB,QAAQ2mH,EAAM7iI,OAC1B6iI,EAAM/F,iBACN9wH,IAAO,EAAM62H,MAqJjBq6L,YAAatkN,GAAYgvc,EAAW,KA9MhB,SAAyB/kb,GAE7CA,EAAM/F,iBACNkkiB,EAAY56lB,QACZp6D,IAAO,EAAM62H,IA2MbzB,OA/Ie,SAAoByB,IAE9Bx8B,IAAQ+6B,IACXyB,EAAMC,UAENhpI,OAAOyJ,eAAes/H,EAAO,SAAU,CACrCn/H,UAAU,EACVtM,MAAO,CACLA,MAAOA,EACP8S,KAAMA,KAGVk3H,EAAOyB,KAoITp+B,QAASA,GACRq8jB,EAAoB,CAErBnkoB,GAAIiloB,KAtTR,SAAiB9qlB,GACf,OAAkB,MAAXA,GAAsC,kBAAZA,IAAyBA,EAAQojD,OAsT9Dj8G,CAAQ64D,IACZ32C,IAAMwB,cAAc,OAAQ,CAC1B6mO,wBAAyB,CACvBC,OAAQ,aAEP3xL,IAAU32C,IAAMwB,cAAc,QAAS6D,YAAS,CACnDpuC,MAAO+F,MAAMC,QAAQhG,GAASA,EAAM+lB,KAAK,KAAO/lB,EAChD8S,KAAMA,EACN/S,IAAK8lU,EACLrhU,KAAM,SACNi3T,UAAWA,GACVx2S,IAAS8jB,IAAMwB,cAAcgynB,EAAe,CAC7C7+kB,UAAW2B,kBAAK7B,EAAQ04C,KAAM14C,EAAQ,OAAO5tE,OAAOk5H,YAAW9qB,KAAY/O,IAAQzxB,EAAQitlB,YACzF1hoB,IAAMwB,cAAc0qP,IAAM7mP,YAAS,CACrC7I,GAAI,QAAQ31B,OAAOkD,GAAQ,IAC3B2kH,SAAUmyiB,EACV36jB,KAAMA,GACNg6B,QA9NgB,SAAqBwC,GACrC72H,IAAO,EAAO62H,KA8Nb+9hB,EAAW,CACZkB,cAAet8nB,YAAS,CACtB,kBAAmBwzjB,EACnB57iB,KAAM,UACN2knB,iBAAiB,GAChBnB,EAAUkB,eACbtyiB,WAAYhqF,YAAS,GAAIo7nB,EAAUpxiB,WAAY,CAC7CxY,MAAOxxE,YAAS,CACd0xC,SAAUyqlB,IACe,MAAxBf,EAAUpxiB,WAAqBoxiB,EAAUpxiB,WAAWxY,MAAQ,UAE/D0rJ,Q,mCCtWSrjJ,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mBACD,iB,SCoFWwgqB,EAjFS7hoB,IAAM8E,YAAW,SAA2BW,EAAOzuC,GACzE,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClB8jC,EAAWhzE,EAAMgzE,SACjB+6iB,EAAgB/tnB,EAAM+tnB,cACtB12V,EAAWr3R,EAAMq3R,SACjBvvK,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,WAAaA,EACnDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,WAAY,gBAAiB,WAAY,YAE9G,OAAOzF,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,SAAU6D,YAAS,CACtFsvC,UAAW2B,kBAAK7B,EAAQ3hE,KACxB2hE,EAAQ6mB,OAAQ7mB,EAAQwgC,GAAUtgC,EAAW8jC,GAAYhkC,EAAQgkC,UACjEA,SAAUA,EACVzhH,IAAK8lU,GAAY9lU,GAChBklB,IAASupB,EAAMy2E,SAAW,KAAOl8E,IAAMwB,cAAcgynB,EAAe,CACrE7+kB,UAAW2B,kBAAK7B,EAAQ04C,KAAM14C,EAAQ,OAAO5tE,OAAOk5H,YAAW9qB,YCjBxD99B,EAAS,SAAgBV,GAClC,MAAO,CAEL3jE,KAAM,GAGNwoF,OAAQ,CACN,kBAAmB,OAEnB,qBAAsB,OAItBoqQ,WAAY,OACZ1iP,aAAc,EAEdjsC,SAAU,GAEV6pC,OAAQ,UACR,UAAW,CAETL,gBAAwC,UAAvB9pC,EAAM+pC,QAAQ/kH,KAAmB,sBAAwB,4BAC1EunH,aAAc,GAIhB,gBAAiB,CACfrsC,QAAS,QAEX,aAAc,CACZiqC,OAAQ,WAEV,cAAe,CACbkM,OAAQ,QAEV,uDAAwD,CACtDvM,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,OAE5C,KAAM,CACJ8B,aAAc,KAKlBkxS,OAAQ,CACN,KAAM,CACJlxS,aAAc,KAKlB6wJ,SAAU,CACRj9J,aAAcvsC,EAAM4/C,MAAMrT,aAC1B,KAAM,CACJoM,aAAc,KAKlB64Q,WAAY,CACVn7Q,OAAQ,OAERoE,aAAc,WACdc,WAAY,SACZpM,SAAU,UAIZnN,SAAU,GAGV0U,KAAM,CAGJ3U,SAAU,WACVziG,MAAO,EACP85G,IAAK,mBAELruB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5B5uJ,cAAe,QAKjB8xiB,SAAU,CACR9piB,UAAW,kBAIbkqiB,WAAY,CACV/rpB,MAAO,GAITgspB,aAAc,CACZhspB,MAAO,KAITispB,EAAehioB,IAAMwB,cAAcu+E,IAAO,MAK1CkijB,EAAejioB,IAAM8E,YAAW,SAAsBW,EAAOzuC,GAC/D,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBytlB,EAAuBz8nB,EAAM+tnB,cAC7BA,OAAyC,IAAzB0O,EAAkCC,EAAoBD,EACtEE,EAAe38nB,EAAMu6E,MACrBA,OAAyB,IAAjBoijB,EAA0BJ,EAAeI,EACjDltjB,EAAazvE,EAAMyvE,WAEnBh5F,GADUupB,EAAMwvE,QACRx8D,YAAyBhT,EAAO,CAAC,WAAY,UAAW,gBAAiB,QAAS,aAAc,aAExG86X,EAAiBC,cACjBC,EAAMC,YAAiB,CACzBj7X,MAAOA,EACP86X,eAAgBA,EAChBxnN,OAAQ,CAAC,aAEX,OAAO/4K,IAAMyX,aAAauoE,EAAO36E,YAAS,CAGxCg9nB,eAAgBR,EAChB3sjB,WAAY7vE,YAAS,CACnBxD,SAAUA,EACV4yC,QAASA,EACT++kB,cAAeA,EACfv+iB,QAASwrT,EAAIxrT,QACbx5G,UAAMpE,GACL69G,EAAY,GAAI8K,EAAQA,EAAMv6E,MAAMyvE,WAAa,IACpDl+G,IAAKA,GACJklB,OAgDL+lpB,EAAa3/c,QAAU,SACR9rI,YAAWW,EAAQ,CAChCptE,KAAM,mBADOysE,CAEZyrlB,GAFYzrlB,I,oBCjLJW,EAASmrlB,EAEhB1goB,EAAO5B,IAAMwB,cAAcu+E,IAAO,MAElC77E,EAAQlE,IAAMwB,cAAcy2jB,IAAa,MAEzC56e,EAASr9E,IAAM8E,YAAW,SAASu4E,EAAO53E,EAAOzuC,GACnD,IAAIurqB,EAAmB98nB,EAAMiza,UACzBA,OAAiC,IAArB6pN,GAAsCA,EAClD1goB,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChB+tlB,EAAsB/8nB,EAAM66nB,aAC5BA,OAAuC,IAAxBkC,GAAyCA,EACxDN,EAAuBz8nB,EAAM+tnB,cAC7BA,OAAyC,IAAzB0O,EAAkCC,EAAoBD,EACtE1loB,EAAKiJ,EAAMjJ,GACXwjF,EAAQv6E,EAAMu6E,MACd9K,EAAazvE,EAAMyvE,WACnB74E,EAAQoJ,EAAMpJ,MACdw8jB,EAAUpzjB,EAAMozjB,QAChB4pE,EAAoBh9nB,EAAMi9nB,WAC1BA,OAAmC,IAAtBD,EAA+B,EAAIA,EAChDhC,EAAYh7nB,EAAMg7nB,UAClBkC,EAAkBl9nB,EAAMy2E,SACxBA,OAA+B,IAApBymjB,GAAqCA,EAChDC,EAAgBn9nB,EAAM+yjB,OACtBA,OAA2B,IAAlBoqE,GAAmCA,EAC5C1iiB,EAAUz6F,EAAMy6F,QAChBC,EAAS16F,EAAM06F,OACfj6B,EAAOzgE,EAAMygE,KACb82S,EAAcv3W,EAAMu3W,YACpB2jR,EAAqBl7nB,EAAMk7nB,mBAC3BpzgB,EAAiB9nH,EAAMwvE,QACvB4tjB,OAAkC,IAAnBt1gB,EAA4B,WAAaA,EACxDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,YAAa,WAAY,UAAW,eAAgB,gBAAiB,KAAM,QAAS,aAAc,QAAS,UAAW,aAAc,YAAa,WAAY,SAAU,UAAW,SAAU,OAAQ,cAAe,qBAAsB,YAElR48nB,EAAiB7pE,EAASqpE,EAAoBxB,EAC9C9/P,EAAiBC,cAMjBvrT,EALMyrT,YAAiB,CACzBj7X,MAAOA,EACP86X,eAAgBA,EAChBxnN,OAAQ,CAAC,aAEO9jG,SAAW4tjB,EACzBlqE,EAAiB34e,GAAS,CAC5B2uS,SAAU/sX,EACVq+O,SAAUjgP,IAAMwB,cAAc02jB,IAAe,CAC3C77jB,MAAOA,EACPqmoB,WAAYA,IAEdpiQ,OAAQp8X,GACR+wE,GACF,OAAOj1E,IAAMyX,aAAakhjB,EAAgBtzjB,YAAS,CAGjDg9nB,eAAgBA,EAChBntjB,WAAY7vE,YAAS,CACnBxD,SAAUA,EACV2xnB,cAAeA,EACfv+iB,QAASA,EACTx5G,UAAMpE,EAEN6kH,SAAUA,GACTs8e,EAAS,CACVh8jB,GAAIA,GACF,CACFk8a,UAAWA,EACX4nN,aAAcA,EACdznE,QAASA,EACT4nE,UAAWA,EACXvgiB,QAASA,EACTC,OAAQA,EACRj6B,KAAMA,EACN82S,YAAaA,EACb2jR,mBAAoBt7nB,YAAS,CAC3B7I,GAAIA,GACHmkoB,IACF,GAAIzrjB,EAAY,CACjBzgC,QAASygC,EAAa0oe,YAAa,CACjCC,YAAappgB,EACbqpgB,WAAY5oe,EAAWzgC,QACvBv/B,UAAWmoE,IACR5oC,GACJurC,EAAQA,EAAMv6E,MAAMyvE,WAAa,IACpCl+G,IAAKA,GACJklB,OAoJLmhG,EAAOilG,QAAU,SACF9rI,gBAAWW,EAAQ,CAChCptE,KAAM,aADOysE,CAEZ6mC,I,8BCzPH,IAAIqyS,EAA0B/4Z,EAAQ,KAElCurN,EAAyBvrN,EAAQ,IAErCD,EAAQuhN,YAAa,EACrBvhN,EAAQosqB,cAAgBpsqB,EAAQqsqB,sBAAmB,EAEnD,IAAI1gd,EAAYH,EAAuBvrN,EAAQ,MAE3CqsqB,EAAiC9gd,EAAuBvrN,EAAQ,MAEhEssqB,EAAkB/gd,EAAuBvrN,EAAQ,MAEjDqpC,EAAQ0vX,EAAwB/4Z,EAAQ,IAExCosqB,EAAmB/ioB,EAAMC,cAAc,MAC3CvpC,EAAQqsqB,iBAAmBA,EAwC3BrsqB,EAAQosqB,cAtCY,SAAuB5tnB,GACzC,IAAIgunB,EAEJ,SAAUx3Z,GAGR,SAASw3Z,IACP,OAAOx3Z,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAmBpD,OAtBA,EAAI0nqB,EAAe,SAAaC,EAAKx3Z,GAMxBw3Z,EAAIxpqB,UAEVikI,OAAS,WACd,IAAI7f,EAAcviH,KAAKkqC,MACnBunO,EAAelvJ,EAAYkvJ,aAC3BntP,GAAO,EAAImjpB,EAA8B,SAAalljB,EAAa,CAAC,iBACxE,OAAO99E,EAAMwB,cAAcuhoB,EAAiBj9nB,SAAU,CACpDjE,SAAU,SAAkBshoB,GAC1B,OAAOnjoB,EAAMwB,cAAc0T,GAAW,EAAImtK,EAAS,SAAa,CAC9D8gd,WAAYA,EACZnsqB,IAAKg2Q,GACJntP,QAKFqjpB,EAvBT,CAwBEljoB,EAAMkV,WAEJl+C,EAAMgpC,EAAM8E,YAAW,SAAUW,EAAOzuC,GAC1C,OAAOgpC,EAAMwB,cAAc0hoB,GAAK,EAAI7gd,EAAS,SAAa,GAAI58K,EAAO,CACnEunO,aAAch2Q,QAIlB,OADAA,EAAI8sB,YAAcoxB,EAAUpxB,aAAeoxB,EAAUnrC,MAAQ,YACtD/S,I,6BCvDT,+D,gBCCA,IAAIosqB,EAAUzsqB,EAAQ,MAClB0sqB,EAAU1sqB,EAAQ,MACtBF,EAAOC,QAAU,SAAUsmK,GACzB,OAAOomgB,EAAQC,EAAQrmgB,M,6BCDzB,IAAIsmgB,EAAmC,qBAAfvygB,YACgB,qBAAhB0F,aACe,qBAAfy6Y,WAExB,SAASqyH,EAAKlhqB,EAAKxC,GACjB,OAAOlG,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,GAGnDnJ,EAAQggD,OAAS,SAAUr0C,GAEzB,IADA,IAAIsK,EAAU3P,MAAMtD,UAAU2R,MAAM9O,KAAK0C,UAAW,GAC7C0N,EAAQvP,QAAQ,CACrB,IAAIorB,EAAS7b,EAAQ0C,QACrB,GAAKmZ,EAAL,CAEA,GAAsB,kBAAXA,EACT,MAAM,IAAI5qB,UAAU4qB,EAAS,sBAG/B,IAAK,IAAIwoD,KAAKxoD,EACR+6oB,EAAK/6oB,EAAQwoD,KACf3uE,EAAI2uE,GAAKxoD,EAAOwoD,KAKtB,OAAO3uE,GAKT3L,EAAQ8sqB,UAAY,SAAU5kgB,EAAKtnK,GACjC,OAAIsnK,EAAIxhK,SAAW9F,EAAesnK,EAC9BA,EAAI0xU,SAAmB1xU,EAAI0xU,SAAS,EAAGh5e,IAC3CsnK,EAAIxhK,OAAS9F,EACNsnK,IAIT,IAAI6kgB,EAAU,CACZC,SAAU,SAAUjhK,EAAM1gZ,EAAK4hjB,EAAUr6pB,EAAKs6pB,GAC5C,GAAI7hjB,EAAIuuX,UAAYmyB,EAAKnyB,SACvBmyB,EAAKx/f,IAAI8+G,EAAIuuX,SAASqzL,EAAUA,EAAWr6pB,GAAMs6pB,QAInD,IAAK,IAAIrlqB,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBkkgB,EAAKmhK,EAAYrlqB,GAAKwjH,EAAI4hjB,EAAWplqB,IAIzCslqB,cAAe,SAAUx+iB,GACvB,IAAI9mH,EAAGqlB,EAAGta,EAAK8mJ,EAAKyhC,EAAO1iL,EAI3B,IADA7F,EAAM,EACD/K,EAAI,EAAGqlB,EAAIyhG,EAAOjoH,OAAQmB,EAAIqlB,EAAGrlB,IACpC+K,GAAO+7G,EAAO9mH,GAAGnB,OAMnB,IAFA+R,EAAS,IAAI4hJ,WAAWznJ,GACxB8mJ,EAAM,EACD7xJ,EAAI,EAAGqlB,EAAIyhG,EAAOjoH,OAAQmB,EAAIqlB,EAAGrlB,IACpCszL,EAAQxsE,EAAO9mH,GACf4Q,EAAOlM,IAAI4uL,EAAOzhC,GAClBA,GAAOyhC,EAAMz0L,OAGf,OAAO+R,IAIP20pB,EAAY,CACdJ,SAAU,SAAUjhK,EAAM1gZ,EAAK4hjB,EAAUr6pB,EAAKs6pB,GAC5C,IAAK,IAAIrlqB,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBkkgB,EAAKmhK,EAAYrlqB,GAAKwjH,EAAI4hjB,EAAWplqB,IAIzCslqB,cAAe,SAAUx+iB,GACvB,MAAO,GAAGx+G,OAAOrD,MAAM,GAAI6hH,KAO/B3uH,EAAQqtqB,SAAW,SAAU7vnB,GACvBA,GACFx9C,EAAQstqB,KAAQjzgB,WAChBr6J,EAAQutqB,MAAQxtgB,YAChB//J,EAAQwtqB,MAAQhzH,WAChBx6iB,EAAQggD,OAAOhgD,EAAS+sqB,KAExB/sqB,EAAQstqB,KAAQhnqB,MAChBtG,EAAQutqB,MAAQjnqB,MAChBtG,EAAQwtqB,MAAQlnqB,MAChBtG,EAAQggD,OAAOhgD,EAASotqB,KAI5BptqB,EAAQqtqB,SAAST,I,gBCxGjB,IAAI72f,EAAW91K,EAAQ,MACnB0mL,EAAe1mL,EAAQ,MACvBonL,EAAUpnL,EAAQ,MAClBsG,EAAUtG,EAAQ,KAiDtBF,EAAOC,QALP,SAAasJ,EAAYgsK,GAEvB,OADW/uK,EAAQ+C,GAAcysK,EAAWsR,GAChC/9K,EAAYq9K,EAAarR,EAAU,M,yjBCgC3Cm4f,G,4MAEG5hoB,MAAQ,CACb6hoB,iBAAiB,G,EAGZlmW,aAAe,YAKpBh4R,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIwwP,Q,EAIDq3Y,YAAc,YAKnBn+nB,EAFI,EAAKT,MADPS,UAGO,IAAI8J,IAAiC,CAC5CxT,GAAIwwP,IACJ91O,QAASotnB,O,EAINC,cAAgB,SAAC3whB,GACtB,MAGI,EAAKnuG,MAFPS,EADF,EACEA,SACAs+nB,EAFF,EAEEA,iBAGE,WAAIv6oB,OAAO+6B,SAAS0C,SAASysB,QAAQnqD,4BAAmB,IAAIswB,MAAM,KAAK,MAASjpB,mBAClF6U,EAAS,IAAImsB,IAAqC,CAChDuhF,YACArsG,QAASi9nB,EAAiBj9nB,QAC1Bu9E,QAAS0/iB,EAAiB1/iB,WAG5B5+E,EAAS,IAAIirB,IAAyB,CAACyiF,eAEzC1tG,EAAS,IAAIisB,IAAoByhF,IACjC1tG,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,Q,EAIDy3Y,2BAA6B,SAACjshB,EAAc7lB,GACjD,OAAK6lB,EAGA7lB,EAGE6lB,EAAe,MAAQ7lB,EAFrB6lB,EAHA7lB,G,EAQJ+xiB,qBAAuB,SAAClljB,EAAUz/F,GACvC,IAAQuH,EAAM,EAAKme,MAAXne,EACR,OAAKk4F,EAGEl4F,EAAE,qBAAD,OAAsBk4F,IAAc,MAAQz/F,EAF3CuH,EAAE,wBAA0B,MAAQvH,G,EAKxCypW,kBAAoB,WACzB,EAAKrrQ,SAAS,CACZimjB,iBAAkB,EAAK7hoB,MAAM6hoB,mB,4CAIjC,WAAiB,IAAD,eACd,EASI7oqB,KAAKkqC,MARPgvC,EADF,EACEA,QACA8jiB,EAFF,EAEEA,YACA79B,EAHF,EAGEA,kBACA97hB,EAJF,EAIEA,KAJF,IAKEnpC,gBALF,aAMEkvpB,iBANF,aAOEC,wBAPF,MAOqB,GAPrB,EAQEt9oB,EARF,EAQEA,EAGF,GAAmB,MAAfixlB,EACF,OAAO,eAACxjgB,EAAA,EAAD,UACJztF,EAAE,iCAIP,IAAMo6F,EAAY62f,EAAYj5mB,IAAI,cAAgB,GAC5CqiH,EAAW42f,EAAYj5mB,IAAI,aAAe,GAC1CmiH,EAAe82f,EAAYj5mB,IAAI,iBAAmB,GAClDulqB,EAAiBtsD,EAAYj5mB,IAAI,eAAiB,GAElDyK,EAAO,UAAG23G,EAAH,YAAgBC,GAAWoY,OAClCjY,EAAYJ,GAAaC,EAAd,UAA6BD,EAAU,IAAM,IAA7C,OAAkDC,EAAS,IAAM,IAAjE,UAA2EF,EAAa,IACnGgE,EAAQ8yf,EAAYj5mB,IAAI,QAAS,IAEjC2yW,GADYsmQ,EAAYj5mB,IAAI,YAAa,IAC3Bi5mB,EAAYj5mB,IAAI,cAAe,KAC7CqoD,EAAQ4wjB,EAAYj5mB,IAAI,QAAS,IAEnCwlqB,EAAgBvsD,EAAYj5mB,IAAI,iBAAmB,GACvD,EAAmCwlqB,EAAyBxqnB,MAAM,KAAlE,mBAAOyqnB,EAAP,KAAqBC,GAArB,KACAF,EAAgBE,GAAYD,EAAe,WAAaC,GAAYD,EAEpE,IAAME,GAAc,CAClB1sD,EAAYj5mB,IAAI,YAChBi5mB,EAAYj5mB,IAAI,YAChBi5mB,EAAYj5mB,IAAI,gBAChBi5mB,EAAYj5mB,IAAI,aAChBi5mB,EAAYj5mB,IAAI,gBAChBwH,QAAO,SAAAk+C,GAAQ,OAAIA,KAAUhoC,KAAK,MAC9BkopB,GAAe3sD,EAAYj5mB,IAAI,gBAC/Bs0I,GAAY2ke,EAAYj5mB,IAAI,MAC5B63T,GAAUohT,EAAYj5mB,IAAI,WAG1B6lqB,IAAY,UAAA5sD,EAAYj5mB,IAAI,oBAAhB,mBAA8B4H,QAAO,SAACutI,EAAK/uC,GAAN,OAAe+uC,EAAI9sI,KAAK+9F,EAAKpmG,IAAI,WAAUkU,yBAAhF,eAAyFwJ,KAAK,QAAS,GACnHoopB,GAAe7sD,EAAYj5mB,IAAI,iBAAmB,GAElD+lqB,GAAW9sD,EAAYj5mB,IAAI,aAAe,GAC1CgmqB,GAAa,oBAAG/sD,EAAYp8lB,MAAM,CAAC,SAAU,iBAAhC,QAA6Co8lB,EAAYp8lB,MAAM,CAAC,SAAU,iBAA1E,QAAuF,GACpGoppB,GAAShtD,EAAYj5mB,IAAI,mBAAqB,GAC9CkmqB,GAASjtD,EAAYj5mB,IAAI,mBAAqB,GAC9CmmqB,GAAcltD,EAAYj5mB,IAAI,gBAAkB,GAEtD,OACE,gBAAC80E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,eAAC4zP,EAAA,EAAD,CACEC,WAAU,eACJzS,GACA,CACEsO,kBAAmB,CACjBC,MAAOvO,GACPwO,QAvBA,IAwBAyxR,WAAW,IAGf,CACEF,YAAa,CACX10e,WAAY/tC,EAAQ84R,OACpBt6K,QAASnxE,KAKnB+nN,UACEp0T,EAAQ,CAEJ,CAAEgR,OAAQa,EAAE,oBAAqB84F,QAAS7kH,KAAK8oqB,cAF3C,mBAGAM,EAAY,CAAC,CAAEl+oB,OAAQa,EAAE,sBAAuB84F,QAAS7kH,KAAKiuX,oBAAuB,KAG3F,KAEJ/jQ,MAAO17G,EACPkgU,cACE,qCACE,eAACl1N,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQgxC,MAFrB,SAIGA,MAIPgd,YAAalnI,KAAK2iU,eAGpB,gBAAC9pP,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAGL,eAACusS,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAMy9iB,EACNh6Z,QAAO,UAAKvjP,EAAE,4CAAP,aAAuDu9oB,KAGhE,eAAChxW,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAM3F,EACNopJ,QAAO,UAAKvjP,EAAE,kCAAP,aAA6Cm6F,KAGtD,eAACoyM,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAM6qP,EACNpnG,QAAO,UAAKvjP,EAAE,iCAAP,aAA4C2qV,KAGrD,eAACp+C,EAAA,EAAD,CAAWrpD,QAAS,eAAC,IAAD,IAApB,SACE,eAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,2BAAP,aAAsCqgC,GAAS+9D,UAAU,SAAvE,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEwpN,UAAW,aAAhE,SACE,oBAAG13M,KAAM,UAAYhhE,EAArB,SACGA,UAMT,eAACksQ,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAM69iB,GACNp6Z,QAAO,UAAKvjP,EAAE,6BAAP,aAAwC29oB,IAC/CzwlB,WAAW,eAGb,eAACq/O,EAAA,EAAD,CAAWrpD,QAAS,eAAC,IAAD,IAApB,SACE,eAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,sCAAP,aAAiDy9oB,GAAgBr/iB,UAAU,SAAzF,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACE,oBAAGmnB,KAAM,OAASo8iB,EAAlB,SACGD,UAMT,eAACjxW,EAAA,EAAD,CAAWrpD,QAAS,eAAC,IAAD,IAApB,SACE,eAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,sCAAP,aAAiD49oB,IAAgBx/iB,UAAU,SAAzF,SACE,eAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACE,oBAAGmnB,KAAM,OAASu8iB,GAAlB,SACGA,WAOT,eAACrxW,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAM+9iB,GACNt6Z,QAAO,UAAKvjP,EAAE,oCAAP,aAA+C69oB,IACtD3wlB,WAAW,eAKX51B,IAAS5pB,WAAS8vB,IAChB,eAAC+uQ,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAMi+iB,GACNx6Z,QAAO,UAAKvjP,EAAE,8BAAP,aAAyC+9oB,MAKtD,eAACxxW,EAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAMk+iB,GACNz6Z,QAAO,UAAKvjP,EAAE,+BAAP,aAA0Cg+oB,IACjD9wlB,WAAW,kBAIf,eAAC09C,EAAA,EAAD,IAEA,gBAAC99C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,oCAEL,eAACusS,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTh2L,WAAW,aAFb,SAIE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEg9T,aAAc,YAAnE,SACGuxP,UAIP,eAAClziB,EAAA,EAAD,IAIEtzE,IAAS5pB,WAAS8vB,IAAM,uCACtB,eAACotE,EAAA,EAAD,IACA,gBAAC99C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+CAEL,eAACusS,EAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTh2L,WAAW,aAFb,SAIE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEg9T,aAAc,YAAnE,SACG0xP,OAGL,eAAC1xW,EAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTh2L,WAAW,aAFb,SAIE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEg9T,aAAc,YAAnE,SACG2xP,aAST5mnB,IAAS5pB,WAAS8vB,IAAM,uCACtB,eAACotE,EAAA,EAAD,IACA,gBAAC99C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQg9C,SACnB5a,MAAO,CAAEwpN,UAAW,cAHtB,SAKGukW,GAAoBt9oB,EAAE,gDAEzB,eAACusS,EAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTh2L,WAAW,aAFb,SAIE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEg9T,aAAc,YAAnE,SACG4xP,UAIP,eAACvziB,EAAA,EAAD,OAKHtzE,IAAS5pB,WAAS4vB,MACnB,gBAACwvB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,wCAEHozjB,EAAkBpjlB,KAAO,GAAKojlB,EAAkBn2kB,KAAI,SAACi7G,EAAUjhH,GAAX,OACpD,gBAACs1T,EAAA,EAAD,CAEErpD,QAASjsQ,EAAI,KAAO,eAAC,IAAD,IACpBi2E,WAAW,aAHb,UAME,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEhgC,MAAO,QAA5D,SACG,EAAK4tlB,2BAA2BjljB,EAASlgH,IAAI,gBAAiBkgH,EAASlgH,IAAI,eAE9E,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACG,EAAKkjkB,qBAAqBlljB,EAASlgH,IAAI,QAASkgH,EAASlgH,IAAI,eAT3Df,SAgBX,eAAC,IAAD,CACE+qX,WAAY11O,GACZ1tC,KAAM3qG,KAAKgnC,MAAM6hoB,gBACjB76S,SAAUx/W,GAAQ03G,EAClB+nQ,kBAAmBjuX,KAAKiuX,kBACxB/kD,aAAc,kBAAM,EAAK8/V,cAAc3whB,KACvCi2O,aAAa,W,GAzYuB7pV,aAqc/BwwC,qBACbgG,aAtDa,SAACC,GAAD,MAA+B,CAC5C82R,OAAQ,CACN7qP,SAAU,OACV7rC,MAAO,IACPi2C,OAAQ,IACRh2C,OAAQ,EACR0qB,MAAO,UACP+e,gBAAiB,UACjB+P,cAAe,aAEjB7K,MAAO,CACLjkB,MAAO,2BAETkkkB,UAAW,CACThjjB,SAAU,QACV/rC,QAAS,eACTkhC,UAAWphC,EAAMZ,QAAQ,GACzB+4C,aAAcn4C,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,IAAK,KAC5BmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BxhB,MAAO,UACP+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,MAE3CvsD,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1B,MAAO,CACLlf,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4jE,eAAgB,SAGpBgwB,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BkO,aAAcn4C,EAAMZ,QAAQ,OAE9B8vlB,kBAAmB,CACjBnkkB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,WAmB9B3pF,YAAgB,gBAChB0/D,mBAVsB,SAAA73E,GAAK,MAAK,CAChCm4iB,kBAAmB9hc,cAA8Br2G,GACjDqc,KAAMF,cAAiBnc,GACvBiioB,iBAAkBztiB,YAA+Bi2J,IAA/Bj2J,CAA0Cx0F,GAC5DqioB,iBAAkBrthB,eAA6Bh1G,OAVtB,SAAC2D,GAC1B,MAAO,CACLA,eAWWsqC,CAIb2zlB,I,sCC/cWG,GAAmB,0CAG1BsB,G,4MAEGh0iB,YAAc,SAACy3hB,GAAD,OAAwB,WAC3C,MAGI,EAAK5jnB,MAFPkonB,EADF,EACEA,UAGFznnB,EAJA,EAEEA,UAEO,IAAI8J,IAAiC,CAC5CxT,GAAImxnB,EACJz2mB,QAASmymB,O,EAINj9Y,kBAAoB,WACzB,MAOI,EAAK3mO,MANPS,EADF,EACEA,SACAstG,EAFF,EAEEA,QACA50F,EAHF,EAGEA,KACAg8Q,EAJF,EAIEA,eACAwmE,EALF,EAKEA,cACAj1D,EANF,EAMEA,qBAEI3vS,EAAKg3G,GAAWA,EAAQl0I,IAAI,MAE9Bs/C,IAAS5pB,WAAS4vB,MAAQpoB,GAC5B2vS,EAAqB3vS,GAEvB0J,EAAS,IAAIm8B,MAERu4P,EAAetjU,MAClB4uC,EAAS,IAAI+qP,KAAiB,CAAEx1R,KAAM2lY,EAAgB,OAAS,SAAUx+D,WAAY,Q,EAiBlFn2D,qBAAuB,WAC5B,EAAKhnO,MAAMS,SAAS,IAAIq1B,KAAmC,CAAE6jD,UAAW5rG,qB,wDAd1E,SAA0BomG,GACxB,MAIIr+G,KAAKkqC,MAHP+tG,EADF,EACEA,QACA50F,EAFF,EAEEA,KACAutR,EAHF,EAGEA,qBAEI3vS,EAAKg3G,GAAWA,EAAQl0I,IAAI,MAE9Bs/C,IAAS5pB,WAAS4vB,MAAQpoB,GAAMA,GAAMrgB,gBAAMy9F,EAAW,CAAC,UAAW,MAAO,OAC5EuyN,EAAqB3vS,K,oBAQzB,WAAiB,IAAD,OACd,EAUIjhC,KAAKkqC,MATP+tG,EADF,EACEA,QACSs4L,EAFX,EAEE50R,QACA2Q,EAHF,EAGEA,SACYg+mB,EAJd,EAIE95V,WACAjnN,EALF,EAKEA,QACAv9E,EANF,EAMEA,QACA41kB,EAPF,EAOEA,mBACApzf,EARF,EAQEA,4BACA+7iB,EATF,EASEA,YAGI/5V,EAAU,aACdg6V,QAASl+mB,EACT69mB,UAAW,UACRG,GAEC3unB,EACI40R,IACDw4V,GACI,eAAC0B,GAAA,EAAD,aACL7oD,mBAAoBA,EAAmBhhmB,MAAM,CAAC,OAAQ,uBACtDo8lB,YAAa/ke,EACbyyhB,aAAc,EAAKr0iB,cACnBrqF,QAASA,EACTu9E,QAASA,GACLinN,IAIC,eAAC,GAAD,CACLwsS,YAAa/ke,EACb/9H,WAAYs0G,GAA+B+7iB,IAAgBtyhB,EAAQl0I,IAAI,kBACvEqlqB,UAAS,OAAGkB,QAAH,IAAGA,OAAH,EAAGA,EAAqBlB,YAOzC,OAAO,eAACvwlB,EAAA,EAAD,UAEHl9B,Q,GA9F+BlX,aAqIxBwwC,sBACbgG,aAlCa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ6jE,QAAS,YAiCXj8B,YAAgB,gBAChB0/D,mBA9BsB,SAAC73E,EAAOkD,GAC9B,IACEkonB,EACElonB,EADFkonB,SAEF,OAAOt/mB,aAAyB,CAC9BwZ,SAAUlD,eACVonR,WAAYh1M,YAA+B42hB,GAC3Cn6gB,QAASE,cACType,mBAAoB3je,cACpBtiG,QAASiiK,YAAkCw0c,GAC3C/umB,KAAMF,cACNqrE,4BAA6B7mE,cAC7B4inB,YAAavpnB,eACb6kV,cAAelrP,eACf0kL,eAAgBumE,gBAVX9yV,CAWJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACLA,WACAimS,qBAAsB,SAACC,GACrBlmS,EAAS,IAAIm1B,KAA0B,CAAC+wQ,qBAK/B57P,CAIbo1lB,K,iJCvKIM,E,4JACJ,WACE,MAKI3qqB,KAAKkqC,MAJPgxC,EADF,EACEA,MACA0vlB,EAFF,EAEEA,YACA9td,EAHF,EAGEA,aACAx2K,EAJF,EAIEA,SAEIukoB,EAAWC,YAAeF,GAAe1vlB,GAAS4hI,GAMxD,OALA90L,QAAQ08E,MAAM,cAAe,CAC3BmmkB,WACA3vlB,QACA4hI,iBAGA,cAAC,IAAD,CAAwB5hI,MAAO2vlB,EAA/B,SACE,cAAC,IAAD,CAAkB3vlB,MAAO2vlB,EAAzB,SACGpmoB,WAAeigkB,KAAKp+jB,W,GAjBH7B,iBAuBtBmI,EAAkBkG,YAAyB,CAC/CooC,MAAO6vlB,gBAOM91lB,sBACb4pC,kBAAQjyE,GANV,SAA4BjC,GAC1B,MAAO,CACLA,eAGWsqC,CAEb01lB,I,gBCjFF,IAAI/qf,EAAcxkL,EAAQ,KAwC1BF,EAAOC,QANP,SAAqBO,EAAOilB,EAAOk6J,GAEjC,IAAIjnK,GADJinK,EAAkC,mBAAdA,EAA2BA,OAAa/+K,GAClC++K,EAAWn/K,EAAOilB,QAAS7kB,EACrD,YAAkBA,IAAX8X,EAAuBgsK,EAAYlkL,EAAOilB,OAAO7kB,EAAW++K,KAAgBjnK,I,6BCrCrF,wEAiBI8rC,EAjBJ,uBAmBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,qDAA+G,CAC7G7Y,UAGGp0B,kBAGIi+S,EAAuB,kBAAMh+Q,YACxC8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,c,sLCqQ9CinqB,IA3OO,wEAII,GAHxBC,EADoB,EACpBA,YACAtkE,EAFoB,EAEpBA,qBACAukE,EAHoB,EAGpBA,mBAHoB,OAIW,SAAsDvxnB,GAA8E,IAQ7JwxnB,EAR4J,6JAYhK,SAAelqoB,EAAa/gC,GAC1B,MAOIF,KAAKkqC,MANP0mW,EADF,EACEA,YACAhC,EAFF,EAEEA,kBACAC,EAHF,EAGEA,oBACAlkW,EAJF,EAIEA,SACAmqV,EALF,EAKEA,YACArrU,EANF,EAMEA,SAIEvpD,EACS,MAAN+gC,IAAsB,IAARA,IACb/gC,IAASk6B,eAAagxoB,gBACxBv8R,EAAoB5tW,GACX/gC,IAASk6B,eAAam/W,cAC/B3K,EAAkB3tW,IAElB,OAAIwoB,QAAJ,IAAIA,OAAJ,EAAIA,EAAU7oC,MAAM,CAAC,QAAS,2BAC5BgwX,EAAY,CACV16R,UAAWj1E,EACXw7W,sBAAqB,OAAEhzV,QAAF,IAAEA,OAAF,EAAEA,EAAU7oC,MAAM,CAAC,QAAS,0BACjD+3X,SAAUuyR,EAAqB,kBAAMA,EAAmB,CAAEvgoB,mBAAc7uC,IAG1E80Y,EAAY,CACV16R,UAAWj1E,EACX03W,SAAUuyR,EAAqB,kBAAMA,EAAmB,CAAEvgoB,mBAAc7uC,KAUvE,MAANmlC,IAAsB,IAARA,IACb6zV,IAAgB16V,eAAam/W,cAC/B3K,EAAkB3tW,GACT6zV,IAAgB16V,eAAagxoB,gBACtCv8R,EAAoB5tW,IAEpB,OAAIwoB,QAAJ,IAAIA,OAAJ,EAAIA,EAAU7oC,MAAM,CAAC,QAAS,2BAC5BgwX,EAAY,CACV16R,UAAWj1E,EACXw7W,sBAAqB,OAAEhzV,QAAF,IAAEA,OAAF,EAAEA,EAAU7oC,MAAM,CAAC,QAAS,0BACjD+3X,SAAUuyR,EAAqB,kBAAMA,EAAmB,CAAEvgoB,mBAAc7uC,IAG1E80Y,EAAY,CACV16R,UAAWj1E,EACX03W,SAAUuyR,EAAqB,kBAAMA,EAAmB,CAAEvgoB,mBAAc7uC,OAhE8E,kCAuEhK,SAA4BkrmB,GAC1B,MAKIhnmB,KAAKkqC,MAJP+8jB,EADF,EACEA,aACA14jB,EAFF,EAEEA,MACWgqW,EAHb,EAGEriS,UACAvrE,EAJF,EAIEA,SAGIurE,EAAsB,MAAV8wf,EAAiBA,EAASzuN,EAC5C,GAAoB,MAAhB0uN,IAAuC,IAAf/wf,EAG5B,GAAa,MAAT3nE,EAIJ,GAAKA,EAAMoE,OAAOpxC,eAAe,aAAjC,CAKA,IAAM22Y,EAAe1kI,uBAAajlO,EAAMw7E,KAAP,YAAC,eAAiBx7E,EAAMoE,QAAxB,IAAgCujE,eACjEvrE,EAASiuC,YAAQs/T,SALflwX,QAAQ08E,MAAR,wDAA+Dn2D,EAAMw7E,KAArE,4CAJA/hG,QAAQ08E,MAAR,iEAAgF,CAAEn2D,YApF0E,+BAgGhK,WACE,IACE04jB,EACEjnmB,KAAKkqC,MADP+8jB,aAEEN,GACF3mmB,KAAK2mmB,uBAEP3mmB,KAAKi7C,QAAQgsjB,KAvGiJ,iCA0GhK,SAA2B5jf,EAAgB54F,GACzC,IACgBy8kB,EAGZ7jf,EAHF4jf,aACWokE,EAEThojB,EAFFnN,UACao1jB,EACXjojB,EADFyxQ,YAKE90X,KAAKkqC,MADP+8jB,eAGmBC,IACfP,GACF3mmB,KAAK2mmB,qBAAqB0kE,GAE5BrrqB,KAAKi7C,QAAQisjB,EAAkBokE,MAzH6H,oBA6HhK,WACE,MAGItrqB,KAAKkqC,MAFPunO,EADF,EACEA,aAIIntP,EALN,iBAOA,OACE,cAACq1B,EAAD,aACEl+C,IAAKg2Q,GACDntP,QAxIsJ,GAQjImgB,aAmN3B8moB,EAA4Bt2lB,kBAChC4pC,mBA9EsB,SAAC73E,EAAYkD,GACnC,IAaI4qV,EAQAgyO,EApBFv4jB,EAEErE,EAFFqE,MACWi5jB,EACTt9jB,EADFgsE,UAOIs1jB,EAAiB5qpB,gBAAM2tB,EAAO,CAAC,SAAU,iBAAazyC,GACtD2vqB,EAAkB7qpB,gBAAM2tB,EAAO,CAAC,SAAU,kBAAczyC,GACxD4vqB,EAAmB9qpB,gBAAM2tB,EAAO,CAAC,SAAU,mBAAezyC,GAC1D2rmB,EAAW+jE,GAAkBC,GAAmBC,EAWpD5kE,GARAhyO,EADE02S,EACYpxoB,eAAam/W,cAClBmyR,EACKtxoB,eAAagxoB,gBAEbhxoB,eAAa2zP,WAGT3zP,eAAam/W,cAClB5tL,cAAoC3kL,GACxC8tV,IAAgB16V,eAAagxoB,gBACzBx/c,cAAsC5kL,GAEtCujL,cAA8BvjL,GAG7C,IAAMigkB,EAA6B,MAAdO,EACjBA,EACY,MAAZC,EACE7rjB,SAAS6rjB,EAAU,SACnB3rmB,EACAund,EAA+B,MAAhB4jJ,EACf/wf,EAA4B,MAAhB+wf,EACdA,EACAH,EACA/4U,EAAU,KAWd,OAVIk9Y,IAEAl9Y,EADE+mG,IAAgB16V,eAAam/W,cACrBxtL,YAAiB,CAAE71G,aAAnB61G,CAAgC/kL,GACjC8tV,IAAgB16V,eAAagxoB,gBAC5Bl/c,YAAmB,CAAEh2G,aAArBg2G,CAAkCllL,GAElC6jL,YAAkB,CAAE30G,aAApB20G,CAAiC7jL,IAIxC,CACL8/jB,aACAG,eACA5jJ,eACAntW,YACA63K,UACA+mG,cACArrU,SAAUs/E,cAAqB/hG,OAIR,SAAC2D,GAC1B,MAAO,CACLimW,YAAa,YAA+H,IAA7H16R,EAA4H,EAA5HA,UAAWumS,EAAiH,EAAjHA,sBAAuB9D,EAA0F,EAA1FA,SAC/ChuW,EAAS,IAAIipE,IAAkB,CAACsC,YAAWumS,wBAAuB9D,eAEpE/J,kBAAmB,SAAC14R,GAClBvrE,EAAS,IAAImhE,IAAwBoK,KAEvC24R,oBAAqB,SAAC34R,GACpBvrE,EAAS,IAAIqhE,IAA0BkK,KAEzCvrE,eAI8BsqC,CAEhCk2lB,GAEIzjE,EAAuB,SAACx9jB,EAAczuC,GAC1C,OAAO,cAAC8vqB,EAAD,2BAA+BrhoB,GAA/B,IAAsCunO,aAAch2Q,MAI7D,OADsBgpC,aAAmCijkB,M,6BCtS3D,IAAI/gZ,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6OACD,sBAEJ3K,EAAQywH,QAAUq4I,G,kHCYZ0na,EAAyC,SAAC,GAAD,IAAErloB,EAAF,EAAEA,SAAF,OAC7C,cAAC,IAAD,CACEg1E,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAOGrvF,KA+EU2uC,sBACb91B,YAAgB,gBADH81B,EAzEmC,SAAC/qC,GACjD,IACEjJ,EASEiJ,EATFjJ,GACAzyB,EAQE07B,EARF17B,KACA8/T,EAOEpkS,EAPFokS,UACAs9V,EAME1hoB,EANF0hoB,eACAC,EAKE3hoB,EALF2hoB,WALF,EAUI3hoB,EAJF4hoB,6BANF,MAM0BH,EAN1B,EAOEr9S,EAGEpkV,EAHFokV,YAPF,EAUIpkV,EAFFgzE,gBARF,WAUIhzE,EADFolO,eATF,MASY,GATZ,EAYA,EAAgC7qO,WAAe,MAA/C,mBAAO0uF,EAAP,KAAiBs9J,EAAjB,KACA,EAA8ChsP,YAAe,GAA7D,mBAAOokoB,EAAP,KAAwBkD,EAAxB,KACA,EAA4CtnoB,WAAe,IAA3D,mBAAOunoB,EAAP,KAAuBC,EAAvB,KAEAxnoB,aAAgB,WACVmnoB,IACFA,EAAe/mjB,QAAU,kBAAMopQ,KAC/B3/C,EAAUliU,KAAKw/pB,IAEjBK,EAAkB39V,KACjB,CAACA,IAEJ,IAaM2/C,EAAoB,WACxB89S,GAAoBlD,IAGtB,OACE,eAACiD,EAAD,WACE,cAAC,IAAD,CAAS5hjB,MAAOolJ,EAAhB,SACE,+BACE,cAAC,IAAD,CACIrpK,MAAM,UACN4e,QAnBO,SAACz8G,GAClBqoR,EAAYroR,EAAEs8G,gBAmBJxH,SAAUA,EAHd,wBASJ,cAAC,IAAD,CACEiW,SAAUA,EACVxoB,KAAMttG,QAAQ81H,GACdwR,QAjCc,WAClB8rJ,EAAY,OAiCR69C,UAAW09V,IAEb,cAAC,IAAD,CACEj+S,WAAY9sV,EACZ0pE,KAAMk+jB,EACN76S,SAAUx/W,EACVy/W,kBAAmBA,EACnB/kD,aAjCe,SAAC6kD,GACpB89S,IACA59S,KAgCIK,YAAaA,W,6BC5GrB,IAAI3nK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,8DACD,gBAEJ3K,EAAQywH,QAAUq4I,G,iGCbZioa,EAAM,SAAC,GAA4B,IAA1BlxnB,EAAyB,EAAzBA,KAAM7+C,EAAmB,EAAnBA,MAAOm/G,EAAY,EAAZA,MACpBgrb,EAAOtrf,EAAK7+C,GAClB,OACE,qBAAKm/G,MAAOA,EAAZ,SACE,cAAC,WAAD,UAAiBgrb,OAejB6lI,EAAsB1noB,gBAAoB,IAE1C2noB,EAAmB3noB,cAAiC,SAACyF,EAAOzuC,GAChE,IAAM4wqB,EAAa5noB,aAAiB0noB,GACpC,OAAO,6CAAK1wqB,IAAKA,GAASyuC,GAAWmioB,OAG1BvgE,EAAkBrnkB,cAAiB,SAACyF,EAAYzuC,GAC3D,IAAMsma,EAAY73X,EAAM5D,SAASzkC,OAC3ByqqB,EAnBc,SAACtxnB,GACrB,IAAMv/C,EAAMgpC,SAA+B,MAM3C,OALAA,aAAgB,WACM,OAAhBhpC,EAAIqsC,SACNrsC,EAAIqsC,QAAQykoB,gBAAgB,GAAG,KAEhC,CAACvxnB,IACGv/C,EAYS+wqB,CAAczqQ,GACxBsqQ,EAAU,eAAQnioB,GAExB,cADOmioB,EAAW/loB,SAEhB,qBAAK7qC,IAAKA,EAAV,SACE,cAAC0wqB,EAAoB/loB,SAArB,CAA8B1qC,MAAO2wqB,EAArC,SACE,cAAC,IAAD,CACE5wqB,IAAK6wqB,EACLG,iBAAkBL,EAClBhzlB,UAAU,OACVm4C,OAAQwwS,EAAY,EAAK,GAAKA,EAAa,GAAK,IAChDA,UAAWA,EACXC,SAAU,kBAAM93X,EAAM6hkB,WACtB2gE,cAAe,EACfC,SAAQ,eAAOzioB,EAAM5D,UARvB,SAUG4loB,Y,6BC9CX,IAAIvld,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,8yBACD,YAEJ3K,EAAQywH,QAAUq4I,G,6BCjBH,SAASiY,EAAiBrgR,GACvC,GAAsB,qBAAX6D,QAAmD,MAAzB7D,EAAK6D,OAAOC,WAA2C,MAAtB9D,EAAK,cAAuB,OAAO4F,MAAMuN,KAAKnT,GADtH,mC,6BCAe,SAASk2e,EAAgBlke,GACtC,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EADjC,mC,6BCAe,SAASuke,IACtB,MAAM,IAAI/ve,UAAU,6IADtB,mC,6Bp5BAO,sCAAM,EAAsB,c,4Eq5BwCtBsvlB,EAAqB,WAChC,OAAI,IAAOi7E,wBAEP,IAAOl6E,cACLA,YAAYm6E,kBAAoBn6E,YAAYm6E,iBAAiB,cAAc,IAzBnC,WAE9C,IAAM18X,EAAS,IAAOuiT,YAAYviT,OAE5BjwS,EAAO,IAAOwylB,YAAYo6E,WAAW5sqB,KAErC6sqB,EAAsD,CAC1Dx5E,UAAW,aACX7zd,UAAW,EACXx/H,KAAc,GAARA,EAAY,eAA0B,IAATA,EAAa,SAAW,YAG7D,IAAK,IAAMoE,KAAO6rS,EACJ,oBAAR7rS,GAAqC,WAARA,IAE/ByoqB,EAAgBzoqB,GAAOvH,KAAKC,IAAKmzS,EAAO7rS,GAA6C6rS,EAAOgwV,gBAAiB,IAGjH,OAAO4sC,EAQDC,IAGG,IAAOt6E,aAAeA,YAAYm6E,kBAAoBn6E,YAAYm6E,iBAAiB,cAAc,K,cChD5G,SAASzqjB,EAAgBj8G,GAKvB,OAJAjL,EAAOC,QAAUinH,EAAkBhkH,OAAOo3E,eAAiBp3E,OAAO2qB,eAAiB,SAAyB5iB,GAC1G,OAAOA,EAAEjI,WAAaE,OAAO2qB,eAAe5iB,IAE9CjL,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,EACjEt6F,EAAgBj8G,GAGzBjL,EAAOC,QAAUinH,EACjBlnH,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,gBCTxE,IAAIlnI,EAAiB,EAAQ,MAiB7Bt6E,EAAOC,QAfP,SAAmB28E,EAAUC,GAC3B,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI11E,UAAU,sDAGtBy1E,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CACrEG,YAAa,CACX5C,MAAOo8E,EACP9vE,UAAU,EACVD,cAAc,KAGdgwE,GAAYvC,EAAesC,EAAUC,IAI3C78E,EAAOC,QAAiB,QAAID,EAAOC,QAASD,EAAOC,QAAQuhN,YAAa,G,6BChBxE,kCACO,IAAM78J,EAAsB,W,mECWvBotnB,E,kDAAAA,K,YAAAA,E,kBAAAA,E,aAAAA,M,KAYsB97c,K,6BCxBlC,kCACO,IAAMtxK,EAAsB,e,6BCDnC,kCACO,IAAMA,EAAsB,Q,6BCHnC,cACIi9J,EAAegud,cACJhud,O,6BCFf,+CACe,SAASowd,EAAY9lqB,GAElC,OADUi2S,YAAcj2S,GACbk2S,aAAe5uR,S,6BCH5B,uEAGIy+oB,GAAmB,EACnBC,GAA0B,EAC1BC,EAAiC,KACjCC,EAAsB,CACxBzhjB,MAAM,EACNoyE,QAAQ,EACRz8F,KAAK,EACL+rkB,KAAK,EACLnhnB,OAAO,EACPm5C,UAAU,EACVi1E,QAAQ,EACRzuD,MAAM,EACN4qH,OAAO,EACP0G,MAAM,EACNpxL,MAAM,EACN2kM,UAAU,EACV,kBAAkB,GAqCpB,SAAS69F,EAActnN,GACjBA,EAAMy7K,SAAWz7K,EAAM27K,QAAU37K,EAAMw7K,UAI3CwqX,GAAmB,GAWrB,SAASK,IACPL,GAAmB,EAGrB,SAASM,IACsB,WAAzBztqB,KAAK8oG,iBAKHskkB,IACFD,GAAmB,GAqBzB,SAASlkZ,EAAe9hJ,GACtB,IAAIn6G,EAASm6G,EAAMn6G,OAEnB,IACE,OAAOA,EAAO4qK,QAAQ,kBACtB,MAAOzpL,IAQT,OAAOg/pB,GAxFT,SAAuC/lqB,GACrC,IAAIlH,EAAOkH,EAAKlH,KACZkgT,EAAUh5S,EAAKg5S,QAEnB,QAAgB,UAAZA,IAAuBktX,EAAoBptqB,IAAUkH,EAAK8kjB,WAI9C,aAAZ9rQ,IAA2Bh5S,EAAK8kjB,YAIhC9kjB,EAAKsmqB,kBA4EkBC,CAA8B3gpB,GAO3D,SAAS4gpB,IAKPR,GAA0B,EAC1B1+oB,OAAO63G,aAAa8miB,GACpBA,EAAiC3+oB,OAAOmqB,YAAW,WACjDu0nB,GAA0B,IACzB,KAGE,SAASpkZ,IAQd,MAAO,CACLC,eAAgBA,EAChBC,cAAe0kZ,EACfnyqB,IAVQgpC,IAAMykF,aAAY,SAAU77F,GACpC,IAlDa0oR,EAkDT3uS,EAAOyiR,IAASC,YAAYz8P,GAEpB,MAARjmB,KApDS2uS,EAqDH3uS,EAAKi2S,eApDbr0M,iBAAiB,UAAWylP,GAAe,GAC/C14C,EAAI/sM,iBAAiB,YAAawkkB,GAAmB,GACrDz3X,EAAI/sM,iBAAiB,cAAewkkB,GAAmB,GACvDz3X,EAAI/sM,iBAAiB,aAAcwkkB,GAAmB,GACtDz3X,EAAI/sM,iBAAiB,mBAAoBykkB,GAAwB,MAkD9D,O,6BC/IL,+CAEarve,EAAWojL,G,6BCFxB,kCACO,IAAM3hU,EAAsB,Y,kHC6FpBo1B,sBACb44lB,cACA5ylB,aA3Ea,SAACC,GAAD,MAAwB,CACrCZ,QAAS,CACPknC,YAActmC,EAAMZ,QAAQ,GAAM65f,SAuEvBl/f,EArDyD,SAAuE/qC,GAC7I,IACEgvC,EAUEhvC,EAVFgvC,QACAs4C,EASEtnF,EATFsnF,SACAlrF,EAQE4D,EARF5D,SACA8mF,EAOEljF,EAPFkjF,KACAn+G,EAMEi7B,EANFj7B,GACA41G,EAKE36E,EALF26E,QACAipjB,EAIE5joB,EAJF4joB,UACAC,EAGE7joB,EAHF6joB,cACAjyE,EAEE5xjB,EAFF4xjB,aACArqV,EACEvnO,EADFunO,aAGEpkJ,EAAY,GAsBhB,OAnBID,IACFC,EAAY,CACV/zC,UAAW,IACX8zC,OACApgG,OAAQ,SAGR/d,IACFo+G,EAAY,CACV/zC,UAAWg0C,IACXr+G,OAGA41G,IACFwI,EAAY,CACVxI,YAKF,eAAC,IAAD,iDACEppH,IAAKg2Q,GACDpkJ,GACA0gjB,GACCD,GAAa,CAACA,cAJrB,cAMGt8iB,GAAY,cAAC,IAAD,CACXp4C,UAAWF,EAAQoB,QACnBs3C,KAAMJ,IAEPsqe,EACAx1jB,U,6BCvFP,kCACO,IAAMuZ,EAAsB,Q,6BCHnC,gGAaa06D,EAAgB3nG,cAAI,CAC/BkuB,MAAO,SAGLo+E,EAAiBtsG,gBAERonG,EAAW,SAACG,GACvB,IAAMC,EAAeD,EAmCrB,OAjCK+E,EAAej7G,IAAIm2G,KACtB8E,EAAiBA,EAAex3G,IAAI0yG,GAClC,WAAyC,IAAxC1+G,EAAuC,uDAA/B,GAAewuC,EAAgB,uCAAT17B,EAAS,uCAChC8qG,EAAea,GAAiBG,YAAgC,CAACpwE,QAAO17B,UAAUoE,gBAClF8yC,EAAS60D,EAAc9pG,MAAM6oG,EAAa14F,MAAM,CAAC,iBAAkB,cACnEkgB,EAAQ4kB,EAAO3hD,IAAI,SAEnBi/L,EAAWt9I,EAAO3hD,IAAI,YAEtBy2G,EAAaC,YAAU/+G,GAAO,GAEpC,GAAkB,MAAd8+G,GACF,GAAIwoF,EACF,MAAM,GAAN,OAAUliK,EAAV,oBAEG,CACL,IAAM7jC,EAAMw9G,YAAU/0D,EAAO3hD,IAAI,QAAQ,GAEzC,GAAIg/L,YAAY9lM,IAAQu9G,EAAav9G,EACnC,MAAM,GAAN,OAAU6jC,EAAV,kCAAyC4kB,EAAO3hD,IAAI,QAGtD,IAAM/G,EAAMy9G,YAAU/0D,EAAO3hD,IAAI,QAAQ,GAEzC,GAAIg/L,YAAY/lM,IAAQw9G,EAAax9G,EACnC,MAAM,GAAN,OAAU8jC,EAAV,gCAAuC4kB,EAAO3hD,IAAI,QAItD,OAAO,SAINm7G,EAAen7G,IAAIq2G,IAGbJ,O,6BCzDf,kCACO,IAAMn6D,EAAsB,mB,6BCFnC,uEAOa06D,EAAgB3nG,cAAI,CAC/BkuB,MAAO,WAELktoB,EAAuBp7pB,gBAyCZq7pB,IAvCe,SAAC9zjB,GAC7B,IAAMC,EAAeD,EAmCrB,OAjCK6zjB,EAAqB/pqB,IAAIm2G,KAC5B4zjB,EAAuBA,EAAqBtmqB,IAAI0yG,GAC9C,WAAyC,IAAxC1+G,EAAuC,uDAA/B,GAAewuC,EAAgB,uCAAT17B,EAAS,uCAChC8qG,EAAea,GAAiBG,YAAgC,CAACpwE,QAAO17B,UAAUoE,gBAClF8yC,EAAS60D,EAAc9pG,MAAM6oG,EAAa14F,MAAM,CAAC,iBAAkB,cAEnEkgB,EAAQ4kB,EAAO3hD,IAAI,SACnBmqqB,EAAcnwpB,IAAEkiG,SAASvkH,GAE/B,GAAc,KAAVA,GAAyB,MAATA,GAClB,GAAIgqD,EAAO3hD,IAAI,YACb,MAAM,GAAN,OAAU+8B,EAAV,oBAEG,CACL,IAAK/iB,IAAEmiG,SAASgujB,IAAgBnwpB,IAAEq+B,MAAM8xnB,GACtC,MAAM,GAAN,OAAUxyqB,EAAV,oBAEF,IAAMuB,EAAM8gB,IAAEkiG,SAASv6D,EAAO3hD,IAAI,QAElC,GAAIga,IAAEmiG,SAASjjH,KAAS8gB,IAAEq+B,MAAMn/C,IAAQixqB,EAAcjxqB,EACpD,MAAM,GAAN,OAAU6jC,EAAV,+BAAsC7jC,GAExC,IAAMD,EAAM+gB,IAAEkiG,SAASv6D,EAAO3hD,IAAI,QAElC,GAAIga,IAAEmiG,SAASljH,KAAS+gB,IAAEq+B,MAAMn/C,IAAQixqB,EAAclxqB,EACpD,MAAM,GAAN,OAAU8jC,EAAV,kCAAyC9jC,GAI7C,OAAO,SAINgxqB,EAAqBjqqB,IAAIq2G,K,6BC9ClC,IAAIusG,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,+JACD,QAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,mTAuCa1rC,EAAkC,CAC7C,CACEr4N,KAAMi6B,mBAAiB0wB,KACvB+mE,KAAM,cAAC,IAAD,CAAU3rB,MAAM,SAASkhB,SAAS,UACxCmoJ,QAAS,SAAC6qI,GAAD,gBAA0BA,EAA1B,YAAsCx0S,IAAQ55E,EAAE,2CACzDoipB,mBAAoB,SAACh0R,GAAD,gBAA0BA,EAA1B,YAAsCx0S,IAAQ55E,EAAE,mDAEtE,CACE7rB,KAAMi6B,mBAAiB0yM,YACvBj7G,KAAM,cAAC,IAAD,CAAa3rB,MAAM,SAASkhB,SAAS,UAC3CmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,iDAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,yDAEvD,CACE7rB,KAAMi6B,mBAAiBoiW,SACvB3qQ,KAAM,cAAC,IAAD,CAAW3rB,MAAM,SAASkhB,SAAS,UACzCmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,8CAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,sDAEvD,CACE7rB,KAAMi6B,mBAAiBz+B,MACvBk2H,KAAM,cAAC,IAAD,CAAiB3rB,MAAM,SAASkhB,SAAS,UAC/CmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,2CAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,mDAEvD,CACE7rB,KAAMi6B,mBAAiB4nR,OACvBnwL,KAAM,cAAC,IAAD,CAAW3rB,MAAM,SAASkhB,SAAS,UACzCmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,4CAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,oDAEvD,CACE7rB,KAAMi6B,mBAAiBwiW,aACvB/qQ,KAAM,cAAC,IAAD,CAAa3rB,MAAM,SAASkhB,SAAS,UAC3CmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,kDAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,0DAEvD,CACE7rB,KAAMi6B,mBAAiB0iW,WACvBjrQ,KAAM,cAAC,IAAD,CAAgB3rB,MAAM,SAASkhB,SAAS,UAC9CmoJ,QAAS,SAAC6qI,GAAD,OAAuBx0S,IAAQ55E,EAAE,gDAC1CoipB,mBAAoB,SAACh0R,GAAD,OAAuBx0S,IAAQ55E,EAAE,yDAsK1CkpD,4BACb91B,YAAgB,gBAChB87B,aAnJa,SAACC,GAAD,MAA+B,CAC5Co0L,QAAS,CACPtqJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,IAE3BmkJ,MAAO,CACL/+J,SAAU,GACVlhB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5Bze,SAAU,SACViK,IAAI,kBACJ,YAAa,CACXzM,UAAW3sC,EAAM6mD,QAAQ,GACzB/c,gBAAiB,eACjBqX,UAAW,gBACX,mBAAoB,cAGxB+xiB,SAAU,CACRjnjB,SAAU,GACVlhB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5Bze,SAAU,SACViK,IAAI,kBACJ,YAAa,CACXzM,UAAW3sC,EAAM6mD,QAAQ,GACzB/c,gBAAiB,eACjBqX,UAAW,gBACX,mBAAoB,UAGxBmuJ,OAAQ,CACNjwQ,KAAK,GAAD,OAAK2gE,EAAMZ,UAAX,kBAEN++U,eAAgB,CACdv9U,QAASZ,EAAMZ,QAAQ,KAEzB+zlB,cAAe,CACb9ylB,OAAQL,EAAMZ,QAAQ,IAAM,IAE9Bg0lB,WAAY,CACV/xiB,WAAY,OACZlJ,aAAcn4C,EAAMZ,WAEtBouD,YAAa,CACXA,YAAaxtD,EAAMZ,cAwGF,CAAE00C,WAAW,IAChCnQ,mBAhC0B,WAC1B,IAAM0vjB,EAAmB9nnB,eACnB+nnB,EAAoB5yhB,eACpB6yhB,EAAuB3yhB,eACvB4yhB,EAAkB5vU,cAClB6vU,EAAc7nnB,cACpB,OAAO,SAAyB9f,GAC9B,MAAQ,CACN60G,WAAY0yhB,EAAiBvnoB,GAC7B2lB,YAAa6hnB,EAAkBxnoB,GAC/B4lB,eAAgB6hnB,EAAqBznoB,GACrCstS,UAAWo6V,EAAgB1noB,GAC3B+f,MAAO4nnB,EAAY3noB,QAKE,SAAC2D,GAC1B,MAAO,CACLA,WACAikoB,aAAc,WACZjkoB,EAAS,IAAIwpS,MAEf06V,QAAS,SAACnonB,GACR/b,EAAS,IAAI6yB,KAAe9W,SAKnBuuB,EAlGmE,SAAC,GAY5E,IAXLlpD,EAWI,EAXJA,EACAmtD,EAUI,EAVJA,QACAQ,EASI,EATJA,UACAmiE,EAQI,EARJA,WACAlvF,EAOI,EAPJA,YACAC,EAMI,EANJA,eACA0nR,EAKI,EALJA,UACAhuS,EAII,EAJJA,SACAuooB,EAGI,EAHJA,QACAD,EAEI,EAFJA,aACA7nnB,EACI,EADJA,MAGAtiB,aAAgB,WACVo3G,IAA8B,IAAhBA,GAChBgzhB,EAAQhzhB,GAEV+yhB,MACC,IAEH,IAAM/0S,EAAejtU,GAAkBD,GAAe,GAChD0sU,EAAUtyU,IAAU/oB,gBAC1B,OACE,cAAC,IAAD,UACE,cAAC,IAAD,CACEkoP,OAAO,EACPa,aAAa,EACb58J,UAAWzwC,GAAa,QACxBR,QAAS,CACPo2L,QAASp2L,EAAQo2L,QACjB4W,MAAqB,SAAdxsM,EAAuBR,EAAQk1lB,SAAWl1lB,EAAQgtM,MACzDsE,OAAQtxM,EAAQsxM,QAElBtgK,MACE,eAAC,IAAD,CAAM9wC,UAAWF,EAAQmgV,eAAzB,UACE,cAAC,IAAD,CAAY3/S,QAAQ,KAAKzT,MAAM,cAAc7sB,UAAWF,EAAQo1lB,WAAhE,SACavipB,EAAVstW,EAAY,wCAA6C,wCAE5D,cAAC,IAAD,CAAM7/S,WAAW,EAAMJ,UAAWF,EAAQm1lB,cAA1C,SAEI/5V,GAAaA,EAAUtrU,KAAI,SAAAg2V,GACzB,IAAMtjW,EAAQsjW,EAASj7V,IAAI,SACrBgf,EAAQw1M,EAAW52M,MAAK,qBAAGzhB,OAAoBxE,KAErD,GAAKqnB,EAIL,OACE,eAAC,IAAD,CAAMy2D,WAAW,EAAMJ,UAAWF,EAAQm1lB,cAA1C,UACGtrpB,EAAM6uG,KACP,cAAC,IAAD,CAAYlY,QAAQ,KAAKzT,MAAM,cAAc7sB,UAAWF,EAAQwvD,YAAhE,SACGhtI,IAAUy+B,mBAAiB0wB,KAAO9nC,EAAMusP,QAAQuqH,GAAgB92W,EAAMusP,cAHb5zQ,WAzB5E,SAsCI4qC,U,6BCnNV,sCAAI6kW,EAAQ2jS,EAAO1jS,EAAnB,OAEIiB,EAAY,CAAC,QAAS,WAE1B,SAASviW,IAA2Q,OAA9PA,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAASvpB,UAAUV,GAAI,IAAK,IAAIsB,KAAO2oB,EAAc7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAAQ0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAY,OAAO0oB,GAAkB8c,EAAS7hC,MAAMjI,KAAM0D,WAEhT,SAASw5C,EAAyBjwB,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAAkE3oB,EAAKtB,EAAnEgqB,EAEzF,SAAuCC,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAA2D3oB,EAAKtB,EAA5DgqB,EAAS,GAAQgvP,EAAa59Q,OAAO0D,KAAKmrB,GAAqB,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IAAOsB,EAAM03Q,EAAWh5Q,GAAQwiM,EAAShlL,QAAQlc,IAAQ,IAAa0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAQ,OAAO0oB,EAFxM0c,CAA8Bzc,EAAQu4K,GAAuB,GAAIpnM,OAAOkgB,sBAAuB,CAAE,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAAS,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IAAOsB,EAAMmhM,EAAiBziM,GAAQwiM,EAAShlL,QAAQlc,IAAQ,GAAkBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KAAgB0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAU,OAAO0oB,EAMne,SAAS+hpB,EAAe1ooB,EAAMkmW,GAC5B,IAAIriR,EAAQ7jF,EAAK6jF,MACbsiR,EAAUnmW,EAAKmmW,QACftiW,EAAQgT,EAAyB7W,EAAMgmW,GAE3C,OAAoB,gBAAoB,MAAOviW,EAAS,CACtDusO,MAAO,6BACP/6L,MAAO,QACPi2C,OAAQ,QACR+kJ,QAAS,cACT76Q,IAAK8wY,EACL,kBAAmBC,GAClBtiW,GAAQggF,EAAqB,gBAAoB,QAAS,CAC3DjpF,GAAIurW,GACHtiR,GAAS,KAAMihR,IAAWA,EAAsB,gBAAoB,QAAS,KAAM,09EAA29E2jS,IAAUA,EAAqB,gBAAoB,OAAQ,KAAM,yBAA0B1jS,IAAUA,EAAqB,gBAAoB,OAAQ,CACrsFnqW,GAAI,gBACJn7B,EAAG,qOACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,KACG,gBAAoB,OAAQ,CAC5Ch2O,GAAI,WACJ4nG,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACbnxQ,EAAG,oIACHu2H,UAAW,8CACX/gB,MAAO,CACLi7J,UAAW,0CAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,WACJ4nG,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACbnxQ,EAAG,sJACHu2H,UAAW,4CACX/gB,MAAO,CACLi7J,UAAW,0CAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,WACJ4nG,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACbnxQ,EAAG,mJACHu2H,UAAW,4CACX/gB,MAAO,CACLi7J,UAAW,0CAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,SACJn7B,EAAG,iNACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACb/pJ,QAAS,EACTmP,UAAW,6DACX/gB,MAAO,CACLi7J,UAAW,wCAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,SACJn7B,EAAG,8NACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACb/pJ,QAAS,EACTmP,UAAW,6DACX/gB,MAAO,CACLi7J,UAAW,wCAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,SACJn7B,EAAG,qNACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACb/pJ,QAAS,EACTmP,UAAW,6DACX/gB,MAAO,CACLi7J,UAAW,wCAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,SACJn7B,EAAG,gNACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACb/pJ,QAAS,EACTmP,UAAW,6DACX/gB,MAAO,CACLi7J,UAAW,wCAEE,gBAAoB,OAAQ,CAC3Ct1O,GAAI,aACJn7B,EAAG,0PACH+iI,KAAM,UACNuuI,SAAU,UACVL,OAAQ,OACRE,YAAa,EACb56I,UAAW,2EACX/gB,MAAO,CACLi7J,UAAW,6CAKjB,IAAIkjE,EAA0B,aAAiBs1V,GAChC,K,6BC/Hf,IAAIpod,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1I4iG,KAAM,OACN/iI,EAAG,kBACHonH,QAAS,QACP05F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCngC,EAAG,mVACA,iBAEL3K,EAAQywH,QAAUq4I,G,6BCnBlB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,8TACD,oBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,oIACD,gBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,kCACO,IAAMpkN,EAAsB,O,6BCDnC,kCAMO,IAAMm+Q,EAA0B,SAAChnM,EAAoBtwE,GAArB,aACrCrpD,QAAO,UAAC25H,EAAQjzH,IAAI,yBAAb,aAAC,EAA+B4d,MAAK,SAACqtpB,GAAD,OAAaA,EAAQjrqB,IAAI,YAAc2iD,Q,6BCPrF,IAAIigK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mBACD,iBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1IngC,EAAG,+OACD8gN,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCngC,EAAG,uCACA,UAEL3K,EAAQywH,QAAUq4I,G,kECjBZmvK,EAAc,sBAQd67P,EAAe,CACbp9R,cADa,SACCvqS,EAAUvgD,EAAemvD,EAAmBvY,GAA2B,OAAD,8HAEhFqzN,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH6C,SAI/DusX,EAAUC,KAAV,4CAAoDr9T,GAAa,CAAEvY,UAJJ,cAIhForB,EAJgF,yBAK/EA,GAL+E,sCAQtF/gG,QAAQ7Z,MAAM,mCAAd,MARsF,iEAapF+gqB,aAda,SAcA5nkB,EAAUvgD,EAAeoonB,GAAmE,OAAD,gIAEpGn+W,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACrCw/C,EAJsG,wBAKtG4okB,IACF5okB,GAAQ,kBAAe53F,KAAKC,UAAUugqB,KANkE,SAQnF77P,EAAUO,UAAUttU,GAR+D,cAQpGwiB,EARoG,yBASnGA,GATmG,wCAY1G/gG,QAAQ7Z,MAAM,mCAAd,MAZ0G,kEAiBxGihqB,aA/Ba,SA+BA9nkB,EAAUvgD,EAAe9lB,GAA4B,OAAD,8HAE7D+vR,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH0B,SAI5CusX,EAAUC,KAAK,wBAAyB,CAAEtyY,OAJE,cAI7D8nF,EAJ6D,yBAK5DA,GAL4D,sCAQnE/gG,QAAQ7Z,MAAM,mCAAd,MARmE,iEAajEkhqB,wBA5Ca,SA4CW/nkB,EAAUvgD,EAAe2sQ,EAAgBx4I,GAA4B,OAAD,8HAExF81I,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHqD,SAIlEusX,EAAUC,KAAV,0BAA0C,CAAE7/G,SAAQx4I,QAJc,cAIxFnyD,EAJwF,yBAKvFA,GALuF,sCAQ9F/gG,QAAQ7Z,MAAM,8CAAd,MAR8F,iEAa5FmhqB,yBAzDa,SAyDYhokB,EAAUvgD,EAAe9lB,GAA2B,OAAD,gIAExE+vR,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACnCw/C,EAJwE,0CAI1BtlE,GAJ0B,SAKvDqyY,EAAUO,UAAUttU,GALmC,cAKxEwiB,EALwE,yBAMvEA,GANuE,wCAS9E/gG,QAAQ7Z,MAAM,+CAAd,MAT8E,mEAerE8gqB,O,6BClFR,IAAK9e,EAAZ,kC,SAAYA,K,gCAAAA,E,uCAAAA,M,mSCwINof,EAAyB,CAC7B,EAAG,WACH,EAAG,iBACH,EAAG,WACH,EAAG,MACH,EAAG,WACH,EAAG,QACH,EAAG,YACH,EAAG,aACH,EAAG,SACH,GAAI,OACJ,GAAI,OACJ,GAAI,UA0BA34S,E,4MACG5vV,MAAQ,CACb74B,MAAO,I,EAqPDqhqB,gBAAkB,SAACx6S,GAAD,OAAgD,SAAC7tP,GACzE,MAKI,EAAKj9F,MAJPrmC,EADF,EACEA,MACA4rqB,EAFF,EAEEA,wBACA1kjB,EAHF,EAGEA,QACApgF,EAJF,EAIEA,SAEIyoU,EAAkB4hB,EAAcjxX,IAAI,MACpC2rqB,EAAqBD,EAAwBzppB,WAAU,SAAC2ppB,GAAD,OAA2BA,EAAsB5rqB,IAAI,QAAUqvW,KACxHroP,GAC0B,IAAxB2kjB,EACF7rqB,EAAMsV,OAAOmlV,IAAoC,EAAG02B,GAEpDnxX,EAAMqL,OAAOovV,IAAoCoxU,GAGxB,IAAvBA,GACF7rqB,EAAMqL,OAAOovV,IAAoCoxU,GACjD7rqB,EAAMsV,OAAOmlV,IAAoC,EAAG02B,IAEpDnxX,EAAM8P,UAAU2qV,KAIpB3zT,EAAS,IAAI65S,IAAuBwwC,EAAcjxX,IAAI,QACtD,EAAK6+G,SAAS,CAACz0G,MAAO,O,8DA3QxB,WACE,MAGInO,KAAKkqC,MAFPS,EADF,EACEA,SADF,EAEE8koB,wBAGsB/iqB,SAAQ,SAACsoX,GAC/BrqV,EAAS,IAAI65S,IAAuBwwC,EAAcjxX,IAAI,a,+BAI1D,YAIE4mC,EADI3qC,KAAKkqC,MADPS,UAEO,IAAIq5S,KAEbhkV,KAAK4vqB,6B,gCAGP,SAA0BvxjB,IACnBA,EAAUoxjB,wBAAwB1zqB,MAAQiE,KAAKkqC,MAAMuloB,wBAAwB1zqB,MAChFiE,KAAK4vqB,6B,+BAIT,SAAyBtzW,GAAkC,IAAD,OACxD,EAIIt8T,KAAKkqC,MAHP8qU,EADF,EACEA,cAEA66T,GAHF,EAEEtkmB,QAFF,EAGEskmB,YAEF,OAAO,SAAC1kqB,GAEN,IAAM4/G,EAAU1tH,QAAQ8N,EAAOpH,IAAI,YAG7B+rqB,EAAc/kjB,EAAU,EAAI,EAC5B8oG,EA3DoB,WAA0I,IAAzIk8c,EAAwI,uDAApH93pB,iBAAqC+3pB,EAA+E,uDAA5Dp9pB,gBAAgDm4G,EAAY,uCAEjK8oG,EAAkBk8c,EAAkBxkqB,QAAO,SAACypX,GAChD,OAAOjqQ,EAAUiqQ,EAAcjxX,IAAI,WAAaixX,EAAcjxX,IAAI,eACjEiF,KAAI,SAACgsX,GACN,IAAMi7S,EAA0BphqB,OAAOmmX,EAAcjxX,IAAI,OACnDixW,EAAgBjqP,EACpBiljB,EAAiBpvpB,MAAM,CAACqvpB,EAAyBxxU,OAAoBxmV,iBACrEA,eAAK,CAAC+3pB,EAAiBpvpB,MAAM,CAACqvpB,EAAyBzxU,OAAmBjzV,QAAO,SAACrL,GAAD,OAAkB,MAARA,MAC7F,OAAO80X,EAActtX,IAAI,gBACvBstW,MAGJ,OAAOnhJ,EA8CqBq8c,CAHE/kqB,EAAOpH,IAAIu6V,KACZnzV,EAAOpH,IAAIw6V,KAEiDxzO,GAC/EoljB,EAA0Bt8c,EAAgB7iN,eAAc,SAAAsB,GAC5DA,EAAQtJ,KAAI,SAAAgsX,GAAa,OAAIA,EAAcxsQ,OAAO,WAAWA,OAAO,kBAIhE6sQ,EAAqBxhK,EAAgB7qN,KAAI,SAACgsX,GAAD,OAAmBA,EAAcjxX,IAAI,iBAAiBhI,QAAM4P,QAAO,SAACC,EAAKstG,GAAN,OAActtG,EAAMstG,IAAK,GAErIk3jB,EAA0Bv8c,EAAgB7qN,KAAI,SAACgsX,GAAD,OAAmBhgB,EAAcjxW,IAAIixX,EAAcjxX,IAAI,UAAQwH,QAAO,SAAC8kqB,GAAD,OAA4C,MAArBA,GAAwD,IAA3BA,EAAkBt0qB,QAAYA,KAEtMu0qB,EAAmBR,EAAcM,EAEvC,GAAMP,KAH0Bx6S,EAAqB+6S,EAGPN,GAK5C,OAAO1xf,qBAAWk+I,IAAaA,EAAS1pT,cAAI,CAC1Cq5G,SAAU,CACR4nG,gBAAiBs8c,MANrBpljB,EACI,EAAKnI,SAAS,CAACz0G,MAAM,wDAAD,OAA0DmiqB,EAA1D,yBAA2FA,EAAmB,EAAI,IAAM,MAC5I,EAAK1tjB,SAAS,CAACz0G,MAAO,0D,oBAWhC,WAAiB,IAAD,OAEZA,EACEnO,KAAKgnC,MADP74B,MAEF,EAeInO,KAAKkqC,MAdPm4R,EADF,EACEA,aACA/F,EAFF,EAEEA,SACAh2R,EAHF,EAGEA,SACA4yC,EAJF,EAIEA,QACAntD,EALF,EAKEA,EAEAovF,EAPF,EAOEA,WACA04G,EARF,EAQEA,gBACAmhJ,EATF,EASEA,cACAjqP,EAVF,EAUEA,QACA0kjB,EAXF,EAWEA,wBACA9koB,EAZF,EAYEA,SACA8yE,EAbF,EAaEA,KACAoyjB,EAdF,EAcEA,WAGIU,EAAkCd,EAAwBlkqB,QAAO,SAACypX,GACtE,OAAOjqQ,EAAUiqQ,EAAcjxX,IAAI,WAAaixX,EAAcjxX,IAAI,eAE9DysqB,EAAiCzljB,EAAUwljB,EAAkCA,EAAgCzgqB,MAAM,EAAG,GAE5H,OACE,uBACEwsT,SAAU+F,EAAariU,KAAKywqB,kBAAkBn0W,IAC9ChhN,MAAO,CAACx/B,QAAS,UAFnB,UAIE,eAAC,IAAD,CACEtC,WAAW,EACXc,QAAS,EACTZ,UAAU,SACVc,KAAK,SAJP,UAME,cAAC,IAAD,CACEo2O,WAAY,EACZL,cAAe,WACb,OAAO,cAAC,WAAD,UACH3vL,YAAczlB,EAAW58F,aAIjC,eAAC,IAAD,CACEi7D,WAAW,EACXP,WAAW,SAFb,UAIE,cAAC,QAAD,CACEzqE,KAAK,UACL8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,wCACT4tF,WAAY,CACVp8D,cAAc,EACd0oD,MAAO,UACPuV,SAAU,WACR,EAAKoH,SAAS,CAACz0G,MAAO,KACtBw8B,EAASu/B,YAAOuzC,EAAM6gP,IAAoCrmV,mBAC1D0yB,EAASu/B,YAAOuzC,EAAM8gP,IAAkCtmV,wBAKhE,cAAC,IAAD,CACEiyG,MAAOn+F,EAAE,+CAAgD,qGAD3D,SAGE,cAAC,IAAD,YAKN,eAAC,IAAD,CACEytD,WAAW,EACXc,QAAS,EAFX,UAIE,cAAC,IAAD,CACEd,WAAW,EADb,SAGE,eAAC,IAAD,CAAYJ,UAAWF,EAAQw3lB,oBAA/B,UACG3kpB,EAAE,oDAAqD8jpB,GAAc,UAIxEh8c,EAAgBtoN,QAAO,SAAColqB,GACtB,OAAO5ljB,EAAU4ljB,EAAsB5sqB,IAAI,WAAa4sqB,EAAsB5sqB,IAAI,eACjFiF,KAAI,SAAC2nqB,EAAoDv9T,GAC1D,IAAMw9T,EAA0BD,EAAsB5sqB,IAAI,MACpDkiH,GAAmI,IAAtHuqjB,EAA+BxqpB,WAAU,SAACgvW,GAAD,OAAmBA,EAAcjxX,IAAI,QAAU6sqB,KAC3G,OACE,cAAC,IAAD,CAEEh3lB,MAAM,EACNgB,GAAI,GACJR,GAAI,EACJF,GAAI,EACJF,GAAI,EANN,SAQE,cAAC,IAAD,CACE6qC,QAAS,EAAK2qjB,gBAAgBmB,GAC9BrrjB,SAAUW,EACV2L,KAAM29iB,EAAkBn8T,GACxBtyU,MAAO6voB,EAAsB5sqB,IAAI,YAX9B4sqB,EAAsB5sqB,IAAI,UAelC6E,WAAWhG,aAGlB,eAAC,IAAD,CACE42E,WAAW,EACXc,QAAS,EAFX,WAKKm1lB,EAAwBltpB,WACzB,eAAC,IAAD,CAAY62D,UAAWF,EAAQ23lB,mBAA/B,UACG9kpB,EAAE,mDAAoD8jpB,GAAc,QAGzE,cAAC,IAAD,CACEr2lB,WAAW,EACXE,UAAU,MACVN,UAAWF,EAAQ23lB,mBAHrB,SAMIL,EAA+BxnqB,KAAI,SAACgsX,GAClC,IAAM5hB,EAAkB4hB,EAAcjxX,IAAI,MACpC+sqB,EAA8B97T,EAAcjxW,IAAIqvW,EAAiBn7V,kBACvE,OACE,eAAC,IAAD,CAAMuhE,WAAW,EAAME,UAAU,SAASc,KAAK,SAA+BZ,MAAM,EAAMQ,GAAI,EAA9F,UACE,cAAC,IAAD,UACI46S,EAAcjxX,IAAI,WAGpB+sqB,EAAM9nqB,KAAI,SAACisX,GACT,IAAM87S,EAAahmjB,EACf,CACEv8G,KAAK,GAAD,OAAK+vV,IAAL,YAAyC6U,EAAzC,YAA4D3U,KAChEnlR,UAAWszC,IACXjT,WAAY,CACV6B,SAAU,SAACvlG,GACTA,EAAIla,KAAO,GAAK,EAAK6mH,SAAS,CAACz0G,MAAO,QAI5C,CACEK,KAAK,GAAD,OAAK+vV,IAAL,YAAyC6U,EAAzC,YAA4D5U,KAChEllR,UAAW8iS,IACXziQ,WAAY,CACV6B,SAAU,SAACvlG,GACTA,EAAIla,MAAQ,EAAK6mH,SAAS,CAACz0G,MAAO,QAI5C,OAAO,cAAC,QAAD,aAEL+7B,MAAO,CACLpJ,MAAOm0V,EAAalxX,IAAI,SACxBy8P,aAAcy0H,EACdhvR,MAAO,YAEL8qkB,GANC97S,EAAalxX,IAAI,YA1B+BqvW,WA0CvE,cAAC,IAAD,CAAgBnyU,GAAG,cAAc9yB,QAASA,EAAOirE,UAAWjrE,EAAQ,GAAK+qE,EAAQ/qE,MAAjF,SAAyFA,IACxFm4B,S,GAlPqC7B,aA4V/BwwC,sBACbgG,aA1Za,SAACC,GAAD,MAA+B,CAC5C62C,MAAO,CACL9U,SAAU,WACV3hC,MAAOJ,EAAMZ,QAAQ,IACrB0qC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzBjmD,QAASZ,EAAMZ,QAAQ,IAEzB02lB,aAAc,CACZ/3lB,WAAY,SACZyC,eAAgB,UAElBg1lB,oBAAqB,CACnBn1lB,OAAQL,EAAMZ,QAAQ,IAExBu2lB,mBAAoB,CAClBt1lB,OAAQL,EAAMZ,QAAQ,IAExBnsE,MAAO,CACLitE,QAAS,YAwYXj8B,YAAgB,gBAChB0/D,mBA3EsB,SAAC73E,EAAYyF,GAEnC,IAAM+oV,EAAW/oV,EAASgoV,WAAWxwX,IAAImoW,IAAuCirB,gBAC1Er8U,EAAgD,MAAjBvO,EAASuO,KAAevO,EAASuO,KAAOpoC,gBACvE6qG,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACT+3Q,EAAQ,UACHn3B,IADG,QAENA,IAGAxqI,EAAkByjJ,cAA4BtwU,GAC9CguU,EAAgBqC,cAA0BrwU,GAE1Cm0E,EAAcC,wBAAcqC,EAAdrC,CAAoBp0E,IAAUp0B,gBAC5Cm4G,EAAU5P,EAAWp3G,IAAI,WAAW,GACpC0rqB,EAA0Bt0jB,EAAWp3G,IAAIu6V,IAAoCrmV,kBAiCnF,MAAO,CACLqmG,cAhCoBtjE,EAAKp6B,MAAM,CAAC,WAAY,mBAAoBhO,iBAAOwC,QAAUxC,gBAAmB5B,eAAc,SAACigqB,GACnH,IAAMC,EAAyBl2nB,EAAKp6B,MAAM,CAAC,WAAY,oBAMjDuwpB,EALqBD,EAAuBloqB,KAAI,SAACgsX,GAAD,OAAoBA,EAAcjxX,IAAI,kBAAoBkU,kBAAQlc,QAAM4P,QAAO,SAACC,EAAKstG,GAAN,OAActtG,EAAMstG,IAAK,GAE9Hg4jB,EAAuBloqB,KAAI,SAACgsX,GAAD,OAAmBhgB,EAAcjxW,IAAIixX,EAAcjxX,IAAI,UAAQwH,QAAO,SAAC8kqB,GAAD,OAA4C,MAArBA,GAAwD,IAA3BA,EAAkBt0qB,QAAYA,KAGvK,EAC5Ck1qB,EAAoBvpqB,IAAI,UAAWypqB,GACnC,IAAMC,EAA8BF,EAAuBloqB,KAAI,SAACgsX,GAC9D,OAAOnhK,EAAgB9vN,IAAIixX,EAAcjxX,IAAI,UAC5CwH,QAAO,SAACypX,GAAD,OAAoC,MAAjBA,KAC7Bi8S,EAAoBvpqB,IAAI42V,IAAoC8yU,GAC5DF,EAAuBxkqB,SAAQ,SAACsoX,GAE9B,IAAMi7S,EAA0BphqB,OAAOmmX,EAAcjxX,IAAI,OACnDstqB,GAAiCr8T,EAAcp0V,MAAM,CAACo0W,EAAcjxX,IAAI,SAAWkU,kBAAQtM,QAAO,SAAC3C,EAAKisX,GAC5G,OAAOjsX,EAAItB,IAAIutX,EAAalxX,IAAI,MAAOkxX,KACtCriX,kBAAkDA,gBAC/C0+pB,EAAyBt8S,EAAcjxX,IAAI,iBAAiBiF,KAAI,SAACisX,GACrE,OAAOo8S,EAA8BttqB,IAAIkxX,EAAalxX,IAAI,UACzDwH,QAAO,SAAC0pX,GAAD,OAAkC,MAAhBA,MAAyBh9W,iBACrD,GAAmC,IAA/Bq5pB,EAAsBv1qB,KAAY,CACpC,IAAMw1qB,EAAkBJ,EAAiB1yU,IAAiBD,IAC1DyyU,EAAoB/gqB,MAClB,CAACquV,IAAkC0xU,EAAyBsB,GAC5DJ,EAAiBG,EAAwBA,EAAsBlupB,gBAIlExQ,cAAI,CAACm4G,SAAS,IAGjBtN,OACAtC,aACA4P,UACA0kjB,0BACAj6S,WACA3hK,kBACAmhJ,oBAGuB,SAACrqU,GAC1B,MAAO,CACLA,eAcF48R,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,EAClBxtN,SAhBa,WACf,OAAO,eA9Wc,sBA+WDl+G,MAIPm5E,CAYb2hT,I,qJC7gBIpnQ,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D0yI,WAAY,CACVzlU,QAAS,kBAEXyugB,YAAa,CACXjvgB,MAAO,SAsEI0uX,IA1DuC,SAAC,GAMhD,IAAD,IALJtwV,eAKI,MALM,YAKN,MAJJuO,mBAII,MAJU,GAIV,MAHJk3R,oBAGI,SAFJp8E,EAEI,EAFJA,iBACAo+B,EACI,EADJA,oBAEA,EAAsD18T,YAAe,GAArE,mBAAO+soB,EAAP,KAA4BC,EAA5B,KACMv4lB,EAAUs2C,IAEhB,OACE,qCAEI2vR,GAAgB,cAAC,IAAD,CAAYzlS,QAASA,EAASzT,MAAM,cAApC,SACbN,IAAQ55E,EAAE,iDAGf,eAAC,IAAD,yBACE4+E,KAAM6mkB,EACN7siB,QAAS,kBAAM8siB,GAAuB,IACtC7siB,OAAQ,kBAAM6siB,GAAuB,IACrC/1qB,MAAOqnU,EACPvnN,SAAU,SAAC2rB,GAAD,OAAgBg6N,EAAoBh6N,EAAMn6G,OAAOtxB,QAC3Dw9E,QAAS+uC,EAAY/uC,QAAU+uC,EAAY/uC,QAAU,CAAE3hE,KAAM2hE,EAAQqoU,aACjEt5R,GAPN,cASE,cAAC,IAAD,CAAUvsH,MAAM,MAAhB,SACE,eAAC,IAAD,CACE89E,WAAW,EACXgB,KAAK,SAFP,UAIE,qBAAKgsC,IAAK+hN,IAASnvP,UAAWF,EAAQqxgB,YAAalhd,IAAK1jC,IAAQ55E,EAAE,uDAClE,cAAC,IAAD,CAAY2tF,QAAQ,QAApB,SAA6B/T,IAAQ55E,EAAE,oCAAqC,cAGhF,cAAC,IAAD,CAAUrwB,MAAM,MAAhB,SACE,eAAC,IAAD,CACE89E,WAAW,EACXgB,KAAK,SAFP,UAIE,qBAAKgsC,IAAKgiN,IAAQpvP,UAAWF,EAAQqxgB,YAAalhd,IAAK1jC,IAAQ55E,EAAE,iDACjE,cAAC,IAAD,CAAY2tF,QAAQ,QAApB,SAA6B/T,IAAQ55E,EAAE,oCAAqC,cAGhF,cAAC,IAAD,CAAUrwB,MAAM,MAAhB,SACE,eAAC,IAAD,CACE89E,WAAW,EACXgB,KAAK,SAFP,UAIE,qBAAKgsC,IAAKg6hB,IAAYpnkB,UAAWF,EAAQqxgB,YAAalhd,IAAK1jC,IAAQ55E,EAAE,qDACrE,cAAC,IAAD,CAAY2tF,QAAQ,QAApB,SAA6B/T,IAAQ55E,EAAE,oCAAqC,uB,6BC5ExF,qEAIMyjG,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dr1L,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,IAEzB6yC,OAAQ,CACN7Q,UAAWphC,EAAMZ,QAAQ,SAuDd4rU,IA1CyC,SAAC,GAOlD,IANL9rC,EAMI,EANJA,MACAlwP,EAKI,EALJA,MACAgM,EAII,EAJJA,SACAiwR,EAGI,EAHJA,WACAthS,EAEI,EAFJA,QACAuhS,EACI,EADJA,WAGMltU,EAAUs2C,IAEhB,OACE,cAAC,IAAD,CAAMp2C,UAAWF,EAAQM,UAAzB,SACE,eAAC,IAAD,CACE4gS,MAAOA,EACPgsC,WAAYA,EAFd,UAIE,cAAC,IAAD,CAAYx0P,cAAc,EAAMl4C,QAAQ,KAAxC,SACGwQ,IAGDi8R,GACE,qCACE,cAAC,IAAD,CAAYv0P,cAAc,EAAMl4C,QAAQ,QAAxC,SACGwc,IAEH,cAAC,IAAD,CACE98C,UAAWF,EAAQi0C,OACnBzT,QAAQ,YACRzT,MAAM,UACN4e,QAASA,EAJX,SAMGshS,c,6BCpDjB,IAAIx/L,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sDACD,UAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,yCACD,QAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,uLACD,iBAEJ3K,EAAQywH,QAAUq4I,G,6BCdlB,IAMIjhG,EAAO,IAEX7nH,EARgB//C,EAAQ,KAAsB+/C,QAQvC6nH,EANS5nK,EAAQ,MACRA,EAAQ,MACRA,EAAQ,OAMxBF,EAAOC,QAAU6nK,G,scC4CX0ugB,EAAmB76iB,aAVC,SAAC3sF,GACzB,IACEynoB,EAGEznoB,EAHFynoB,YAEGrtpB,GACD4lB,EAFFsoF,gBAFF,YAIItoF,EAJJ,IAMA,OAAO,cAAC,IAAD,2BAAY5lB,GAAUqtpB,MAGN96iB,EAA0B,gBAAE37C,EAAF,EAAEA,MAAOs3C,EAAT,EAASA,gBAAT,mBAAC,yBAClD3K,UAAU,GAAD,OAAK,CAAC3sC,EAAM6mD,QAAQ,IAAK7mD,EAAM6mD,QAAQ,KAAKtgH,KAAK,MAC1Du/G,OAAQ9lD,EAAM8lD,OAAO00O,OACrBl0O,YAAY,GAAD,OAAKtmD,EAAM+pC,QAAQE,QAAQ,MACtC8kB,UAAW,SACXzV,WAAW,SAAD,OAAWkrR,IAAX,KACVpkU,MAAM,GAAD,OAAKJ,EAAMZ,UAAYilU,IAAvB,OACF5sR,YAAY,KAAMH,IAChB,CACDl3C,MAAM,GAAD,OAAKJ,EAAMZ,UAAYklU,IAAvB,QAEN7sR,YAAY,KAAMH,IAChB,CACDl3C,MAAM,GAAD,OAAKJ,EAAMZ,UAAYmlU,IAAvB,QAbwC,IAejDrkU,QAAS,OACT02C,SAAU,gBACV7U,SAAU,WACVsU,OAAQ,OAERlH,SAAU,0BAWNunjB,EAAgB/6iB,aARI,SAAC3sF,GAIrBA,EAFFsoF,gBADF,IAEKluG,EAFL,YAGI4lB,EAHJ,GAKA,OAAO,cAAC,IAAD,eAAY5lB,MAECuyG,EAA0B,gBAAE37C,EAAF,EAAEA,MAAOs3C,EAAT,EAASA,gBAAT,mBAAC,yBAC/CskJ,UAAU,GAAD,OAAK57L,EAAMZ,UAAY+kU,IAAvB,MACT7qR,WAAW,gBAAD,OAAkBkrR,IAAlB,KACVpkU,MAAO,OACPotD,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYilU,IAAvB,OAER5sR,YAAY,KAAMH,IAChB,CACDkW,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYklU,IAAvB,QAEZ7sR,YAAY,KAAMH,IAChB,CACDkW,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYmlU,IAAvB,QAEZu6M,YAAU,KAAMxne,IACd,CACDskJ,UAAU,GAAD,OAAK57L,EAAMZ,UAAYglU,IAAvB,WAKTuyR,EAAgB,SAAC3noB,GAKjBA,EAHF4noB,gBAGE5noB,EAFFsoF,gBAFF,IAGKluG,EAHL,YAII4lB,EAJJ,GAMA,OAAO,mCAAS5lB,KAYZytpB,EAA6Bl7iB,YAAOg7iB,EAAPh7iB,EAAsB,YAAmE,IAAjE37C,EAAgE,EAAhEA,MAAOs3C,EAAyD,EAAzDA,gBAC9D,OAAO,YAAC,aACRjB,OAAQ,OACRtU,SAAU,WACV1iG,KAAM,EACN4gE,UAAW,aACXC,QAAS,OACT02C,SAAU,aACV0C,WAAW,gBAAD,OAAkBkrR,IAAlB,KACVpkU,MAAO,OAEPotD,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYilU,IAAvB,OAER5sR,YAAY,KAAMH,IAChB,CACDkW,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYklU,IAAvB,QAIZ7sR,YAAY,KAAMH,IAChB,CACDkW,YAAY,GAAD,OAAKxtD,EAAMZ,UAAYmlU,IAAvB,WAKbuyR,EAAcn7iB,aApCC,SAAC3sF,GACpB,IACE+noB,EAGE/noB,EAHF+noB,kBAEG3tpB,GACD4lB,EAFFsoF,gBAFF,YAIItoF,EAJJ,IAMA,OAAO,cAAC,IAAD,2BAAY5lB,GAAU2tpB,MA6BXp7iB,EAAqB,gBAAE37C,EAAF,EAAEA,MAAOs3C,EAAT,EAASA,gBAAiBs/iB,EAA1B,EAA0BA,gBAA1B,mBAAC,aACxCt9iB,WAAW,OAAD,OAASkrR,IAAT,KACVtkU,QAAS,OACTI,SAAU,EACVy2C,WAAW,GAAD,OAAK/2C,EAAMZ,UAAY+kU,IAAvB,OACP1sR,YAAY,KAAMH,IAChB,CACDp3C,QAAS,OACTE,MAAO,EACP0mD,KAAM8viB,EAAkB,WAAa,UAEtC93E,YAAU,KAAMxne,IACd,CACDP,WAAW,GAAD,OAAK/2C,EAAMZ,UAAYglU,IAAvB,WAIV4yR,EAAiBr7iB,YAAOg7iB,EAAPh7iB,EAAsB,cAAE37C,MAAF,IAASs3C,EAAT,EAASA,gBAAiBs/iB,EAA1B,EAA0BA,gBAA1B,oBAC3C12lB,QAAS,OACTK,cAAe,SACf+4C,WAAW,OAAD,OAASkrR,IAAT,KACVr1R,SAAU,OACV2X,KAAM,GACHrP,YAAY,KAAMH,IAChB,CACDl3C,MAAO,EACP0mD,KAAM8viB,EAAkB,EAAI,OAkF5BK,E,4MACGnroB,MAA8B,CACnC2jE,MAAM,G,EA6HA0rB,YAAc,WACpB,MAGI,EAAKnsF,MAFPkooB,EADF,EACEA,mBACAznoB,EAFF,EAEEA,SAGF,EAAKi4E,UAAS,SAAAquJ,GAAS,MAAK,CAC1BtmK,MAAOsmK,EAAUtmK,SACf,WACFynkB,EAAmB,EAAKproB,MAAM2jE,MAC9B9xD,YAAW,kBAAMlO,EAAS,IAAI0L,IAAqB,CAAEs0D,KAAM,EAAK3jE,MAAM2jE,UAAU,IAAyB,IAAlB+0S,S,gDApI3F,SAAkByhB,GAChB,MAGInha,KAAKkqC,MAFPS,EADF,EACEA,SACAmnoB,EAFF,EAEEA,gBAEF,OAAO,WACannoB,EAAlBmnoB,EAA2B,IAAI/7nB,IAAqC,IAAIF,Q,uBAI5E,WACE,IACElL,EACE3qC,KAAKkqC,MADPS,SAEF,OAAO,kBAAMA,EAAS,IAAIoL,Q,oBAG5B,WACE,MAeI/1C,KAAKkqC,MAdPgvC,EADF,EACEA,QACA5yC,EAFF,EAEEA,SACAg1C,EAHF,EAGEA,MACiB+2lB,EAJnB,EAIE7/iB,gBACA8/iB,EALF,EAKEA,eACAC,EANF,EAMEA,eACAC,EAPF,EAOEA,qBACAb,EARF,EAQEA,YACAc,EATF,EASEA,YAEAX,GAXF,EAUEG,kBAVF,EAWEH,iBAEApsnB,GAbF,EAYE/a,SAZF,EAaE+a,QACA7E,EAdF,EAcEA,SAGA8pD,EACE3qG,KAAKgnC,MADP2jE,KAEI+nkB,EAAoBC,IAAiB5zF,uBAAuBl+hB,GAC5D+xnB,EAAS,OAAGltnB,QAAH,IAAGA,OAAH,EAAGA,EAAQ9kC,MAAM,CAAC,cAAe,gDAE1C4xG,EAAsC,MAApB6/iB,EAA2BA,EAAmB/2lB,EAEtE,OACE,sBAAKlC,UAAWF,EAAQ3hE,KAAxB,UACE,cAACq6pB,EAAD,yBACEp/iB,gBAAiB7nB,EAAO6nB,EAAkB,MACtCigjB,GAFN,aAIE,eAAC,IAAD,WACGF,EAEC5/iB,YAAY,KAAMH,IAClB,cAAC,IAAD,CAAY3N,QAAS7kH,KAAK6yqB,aAAc,aAAW,0BAAnD,SACE,cAAC,IAAD,CAAiBjhjB,KAAK,iBAK9B,eAAC8/iB,EAAD,yBACEl/iB,gBAAiB7nB,EAAO6nB,EAAkB,KAC1C9Y,QAAQ,YACRi4jB,YAAa,CACXz4lB,QAAS,CACP64C,MAAO74C,EAAQy8R,cAGnBllH,OAAO,QACHkhb,GATN,cAWGW,EAEsB,OAApB9/iB,GACwB,OAApBA,GACC,cAAC,IAAD,CACEh5C,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAS,UAAKs5lB,EAAoBx5lB,EAAQ45lB,2BAA6B55lB,EAAQ65lB,gBAC/Ez3jB,MAAK,eACAs3jB,EACC,CACE5tjB,gBAAiB4tjB,EACjB/qjB,UAAW,6CAEb,IAENhD,QAAS7kH,KAAKq2H,YAbhB,SAeG1rB,EAAO,cAAC,IAAD,IAAmB,cAAC,IAAD,UAIvC,eAAConkB,EAAD,CACEv/iB,gBAAiB7nB,EAAO6nB,EAAkB,KAD5C,UAGE,cAACw/iB,EAAD,CACErnkB,KAAMmnkB,EACNntiB,QAAS3kI,KAAK6yqB,aACdrgjB,gBAAiBA,EACjBqle,cAAe,CACb3+gB,QAAS,CACP3hE,KAAM2hE,EAAQ85lB,uBAGlBf,kBAAmB,CACjB/4lB,QAAS,CACP64C,MAAO74C,EAAQ+5lB,oBAXrB,SAeGT,IAEH,cAACN,EAAD,CACE1/iB,gBAAiBA,EADnB,SAGGlsF,c,GAxHgB7B,aA+IvBmI,EAAkBkG,YAAyB,CAC/Cg/nB,gBAAiB1zd,cACjB14J,OAAQF,gBASKyvB,sBACbgG,aAzOgB,SAACC,GAAD,MAA+B,CAC/C3jE,KAAM,CACJ+jE,MAAO,OACPF,QAAS,OACTG,OAAQ,EACRu2C,SAAU,YAEZ6jP,YAAa,CACX14P,SAAU,WACVsU,OAAQ,OACRj2C,MAAO,OACPy/C,WAAY,OACZiH,KAAM,UACN3X,SAAU,UACVwQ,OAAQ,QAEVm4iB,qBAAsB,CACpB1+iB,IAAKp5C,EAAMZ,QAAQ+kU,MAErB4zR,kBAAmB,SAAC/ooB,GAAD,mBAAC,eACfA,EAAM+noB,mBADQ,IAEjB39iB,IAAKp5C,EAAMZ,QAAQ+kU,KACnB9tR,OAAO,eAAD,OAAiBr2C,EAAMZ,QAAQ+kU,KAA/B,UAER0zR,eAAgB,CACdz3lB,MAAO,GACPi2C,OAAQ,IACRtrB,MAAO,QACP+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzCvb,aAAa,cACbxK,SAAU,WACVziG,OAAQ,GACR+5G,OAAQ,mBACRlP,OAAQ,WAEVytjB,2BAA4B,CAC1Bx3lB,MAAO,GACPi2C,OAAQ,IACRtrB,MAAO,QACP+e,gBAAiB,UACjByC,aAAa,cACbxK,SAAU,WACVziG,OAAQ,GACR+5G,OAAQ,mBACRlP,OAAQ,eA8LV80e,cACAt7e,kBAAQjyE,EAAiB,MAHZqoC,CAIbk9lB,I,6BCpaF,kCACO,IAAMtynB,EAAsB,gB,6BCCnC,kCACO,IAAMA,EAAsB,U,6BCmFpBq7B,IAtFM,CACnB+pC,QAAS,CACPxf,OAAQ,CACNytkB,WAAY,yBACZC,QAAS,wBACT98lB,SAAU,uBACV4vL,UAAW,uBACX2D,UAAW,wBACXwpa,QAAS,UACTC,gBAAiB,UACjBp1E,OAAQ,wBACRq1E,OAAQ,wBACRC,OAAQ,wBACRC,KAAM,yBACNC,IAAK,wBAGTzhjB,WAAY,CACV0hjB,iBAAiB,EACjBt5Z,WAAY,qBACZjzJ,SAAU,MACV6jK,kBAAmB,IACnBh6H,GAAI,CACF7pC,SAAU,UACVmzJ,cAAe,WACfr0K,MAAO,oBAETgrD,GAAI,CACF9pC,SAAU,UACVmzJ,cAAe,WACfr0K,MAAO,oBAETirD,GAAI,CACF/pC,SAAU,UACVmzJ,cAAe,EACfr0K,MAAO,oBAETkrD,GAAI,CACFhqC,SAAU,UACVmzJ,cAAe,UACfr0K,MAAO,oBAETmrD,GAAI,CACFjqC,SAAU,UACVmzJ,cAAe,MACfr0K,MAAO,uBAETorD,GAAI,CACFlqC,SAAU,UACVmzJ,cAAe,UACfr0K,MAAO,uBAETqrD,UAAW,CACTnqC,SAAU,UACVlhB,MAAO,qBACPq0K,cAAe,WAEjBv1I,MAAO,CACL5d,SAAU,UACVlhB,MAAO,qBACPq0K,cAAe,WAEjB/oH,MAAO,CACLpqC,SAAU,UACVlhB,MAAO,qBACPq0K,cAAe,WAEjBnoH,QAAS,CACPhrC,SAAU,UACVlhB,MAAO,qBACPq0K,cAAe,WAEjBntJ,OAAQ,CACNhG,SAAU,UACVlhB,MAAO,sBACPq0K,cAAe,YAGnBonU,UAAW,CACTiyF,YAAa,CACX9njB,KAAM,CACJ1E,SAAU,e,6BCjFX,IAAKysjB,EAAZ,kC,SAAYA,K,iCAAAA,M,mCCEZ,kCACO,IAAM/znB,EAAsB,S,6BCHnC,2BAGM2vE,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5Cg/R,OAAQ,CACJj9P,SAAU,SACVqX,IAAK,IACL0M,OAAQ9lD,EAAM8lD,OAAOk5O,OAAS,EAC9Bn/O,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/B5pC,MAAO,YAaAu4lB,IATA,SAAC,GAAkB,IAAhBvtoB,EAAe,EAAfA,SACR4yC,EAAUs2C,IAChB,OACI,qBAAKp2C,UAAWF,EAAQghS,OAAxB,SACK5zU,M,iFCsBEinZ,IA7BuB,SAAC,GAEhC,IADH6xK,EACE,EADFA,YAEA,OACC,cAAC,IAAD,UAEQA,EAAYp2lB,KAAI,SAACuxV,EAAYp+V,GACzB,IAAMojmB,EAAoBpjmB,EAAQ,IAAOijmB,EAAYv9lB,OACrD,OACI,cAAC,IAAD,CAAqBqoH,MAAOqwO,EAAWz5T,MAAvC,SACI,cAAC,IAAD,yBACIssF,KAAK,IACLvI,QAAS,SAACz8G,GAAO,IAAD,EACZA,EAAEg5H,iBACF,UAAAm5N,EAAW11O,eAAX,cAAA01O,EAAqBnyV,IAEzB69F,MAAOs5f,EAAmB,cAAgB,WACtChlQ,EAAWltO,WAPnB,aASKktO,EAAWz5T,MAAMj/B,OAAS,GAA1B,UAAkC04V,EAAWz5T,MAAMhxB,MAAM,EAAG,IAA5D,OAAuEyqV,EAAWz5T,UAV7E3kC,U,sKC+BpB23qB,IApC8B,SAAC,GAKvC,IAJHzqnB,EAIE,EAJFA,KACAoxT,EAGE,EAHFA,YACAC,EAEE,EAFFA,mBACGxwU,EACD,iBACMne,EAAM+xB,YAAe,gBAArB/xB,EACF8xH,EAAOx0F,EAAKtlD,IAAI,QAChBm3E,EAAQwjD,cACRnQ,EAAoB78E,sBAAY0Y,eACtC,OACI,cAAC,IAAD,CAAsBf,KAAMA,EAA5B,SACI,cAAC,IAAD,aACIkxT,mBAAoBxuV,EAAE,8BACtB0uV,YAAW,OAAEA,QAAF,IAAEA,IAAe58N,EAC5B68N,mBAAkB,OAAEA,QAAF,IAAEA,IAAsB3uV,EAAE,oCAC5C4uV,aAAc5uV,EAAE,2BAChB6uV,kBAAmB7uV,EAAE,oCACrB8uV,eAAgB,CAAEC,QAAQ,GAC1B9sP,IACI,cAAC,IAAD,aACI1yC,MAAM,MACNi2C,OAAO,MACPtrB,MAAO,CACH+e,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KACvC8I,YAAa/yC,EAAM+pC,QAAQE,QAAQ,OAEnCoJ,KAGRrkF,Q,6BC5CpB,4DAgBe6poB,IAVC,WACZ,IAAQhopB,EAAM+xB,YAAe,gBAArB/xB,EACR,OAAO,cAAC,IAAD,CACHi/W,QAAS,cAAC,IAAD,IACTC,SAAU,cAAC,IAAD,CAAgBhlS,MAAM,cAChC2kS,UAAW,cAAC,IAAD,CAAYlxR,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,M,iGCJlB9jW,EAAUlC,6BAAsC5oC,GAU/C,IAAMk4qB,EAAiB,WAC1B,QAAkCl4qB,IAA9B2oC,IAAMgG,WAAW7D,GACjB,MAAM,IAAIh/B,MAAM,oDAEpB,OAAO68B,IAAMgG,WAAW7D,IAEbqtoB,IAdf,SAAqB/poB,GAClB,OACI,cAACtD,EAAQR,SAAT,2BAAsB8D,GAAtB,aACGA,EAAM5D,c,6BCbhB,6CAMM4toB,EAAoBzvoB,iBAA6B,GAE1C0voB,EAAgB,kBAAM1voB,aAAiByvoB,IAErCA,O,00BCoGTE,GAAa,uCAAG,WAAOttqB,GAAP,SAAAnB,EAAA,+EACbmB,EAAIo9a,wBAA0B,IAAMp9a,EAAI+pU,YAD3B,2CAAH,sDAsGbwjW,GAAuB,CAC3BC,2BA9MiC,SAACprqB,GAClC,OAAQA,EAAQqpX,YACd,KCTyB,EDUvB,IAAQgiT,EAA0BrrqB,EAA1BqrqB,sBACR,QAA4B,OAArBA,QAAqB,IAArBA,OAAA,EAAAA,EAAuBtzoB,IAEhC,KCZ2B,EDazB,IACQuzoB,EAAmBtrqB,EAAnBsrqB,eAMR,OALIA,IACkC,YAA1BA,EAAe/ukB,QAAmD,aAA1B+ukB,EAAe/ukB,SAA0B+ukB,EAAeC,cAM9G,QACE,OAAO,IA8LXC,gCAzLsC,SAACx9c,EAAUinJ,GACjD,IAAIw2T,GAAwB,EACtBC,EAAuB19c,EAASlxM,WAAU,SAAC09O,GAC/C,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,aAAekU,eAAK,IAEjD,OAAiC,KADjC08pB,EAAuB98iB,EAAS7xG,WAAU,SAACgxG,GAAD,OAAaA,EAAQjzH,IAAI,oBAAsBo6W,SAG3F,OAA8B,IAA1By2T,IAAyD,IAA1BD,EACTz9c,EAASt2M,MAAM,CAACg0pB,EAAsB,WAAYD,IACnDjtqB,IAAI,eAAgBwvN,EAASt2M,MAAM,CAACg0pB,EAAsB,kBAE1E,MA+KTC,4BA3KkC,SAAC7lf,EAAO8lf,GAA4C,IAA9BjkW,EAA6B,uDAAhB,KAAM2xU,EAAU,uCACrF,IAAKxzd,IAAU8lf,EACb,OAAO,KAET,IAAMC,EAA6B,GAC7Bv1T,EAAgBxwL,EAAMjrL,IAAI,YAC1BixqB,EAA0BF,EAAal0pB,MAAM,CAAC,uBAAwB,aACtEq0pB,EAAmBH,EAAal0pB,MAAM,CAAC,0BAA2Bjf,OAAOkvU,GAAa,aAGtFqkW,EAAqBD,GAAoBD,GAA2Bx1T,GAAiBvnW,eAAK,IAgChG,OA9BAi9pB,EAAmBxoqB,SAAQ,SAACg3P,GAC1B,IAAMyxa,EAAqBzxa,EAAQ3/P,IAAI,aACjB,OAAlBoxqB,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBp5qB,MAAO,GAC7Bo5qB,EAAmBzoqB,SAAQ,SAAC0oqB,GAC1B,IAAMC,EAAkBD,EAAkBx0pB,MACxC,CAAC,eAA+B,OAAfiwT,EAAA,UAAyBA,GAAe,YAErDstC,EAAiBi3T,EAAkBrxqB,IAAI,kBAC7C,GAAIsxqB,GAAmBl3T,EAAgB,CACrC,IAAMnkP,EAAgBo7iB,EAAkBx0pB,MAAM,CAAC,oBAAqB,kBAEpE,UAAI4hoB,QAAJ,IAAIA,OAAJ,EAAIA,EAAO5/Y,sBAAuB,CAAC,IAAD,EAC1BS,EAAW,OAAGm/Y,QAAH,IAAGA,GAAH,UAAGA,EAAO5/Y,sBAAsB5oI,UAAhC,aAAG,EAA6CqpI,YAC7DA,KACa,OAAXA,QAAW,IAAXA,OAAA,EAAAA,EAAapiO,MAAO3B,4BACD+jO,EAAY26Y,wBAEZ36Y,EAAYnqI,eAIvC,IAAMo8iB,EAAe,CACnBn3T,iBACAnnP,QAASo+iB,GAEXL,EAA2B3oqB,KAAKkpqB,UAKjCP,GAkIPQ,aA/HmB,SAAC7gX,GAEpB,IAAMrwK,EAAQqwK,EAAS31Q,MAAM,KAG7B,OAAIslG,EAAMxiJ,QAAU,EAQX,CAAEskH,UANSk+B,EAAM,GAMJj+B,SAHHi+B,EAAM,IAOhB,CAAEl+B,UAAW,KAAMC,SAAU,OA+GtCgujB,iBACAoB,gBAxGsB,SAACrrkB,GACvB,OAAQ,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMgc,aAAN,OAAmBhc,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAMic,UACpB,WAAO,OAAJjc,QAAI,IAAJA,OAAA,EAAAA,EAAMgc,YAAa,GAAtB,aAAgC,OAAJhc,QAAI,IAAJA,OAAA,EAAAA,EAAMic,WAAY,IAAKoY,QAE5D,OAAIr0B,QAAJ,IAAIA,OAAJ,EAAIA,EAAM/9C,OACD+9C,EAAK/9C,WADd,GAqGAqpnB,uBAhG6B,SAAC71T,EAAc81T,EAAcl1jB,GAC1D,QAAgB,OAAZo/P,QAAY,IAAZA,OAAA,EAAAA,EAAc77W,IAAI,uBAAlB,OAAwC67W,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAc77W,IAAI,eAGzC3F,OAAO+M,OAAOuqqB,GAAcjoqB,MAAK,SAACupH,GAAD,OAAyB,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAAS2+iB,gBAAiBn1jB,EAAOv/E,OA6FzG20oB,8BAxFoC,SAACC,EAAsB7+iB,GAC3D,IAAMmnP,EAAc,OAAGnnP,QAAH,IAAGA,OAAH,EAAGA,EAASjzH,IAAI,kBACpC,SAAI8xqB,IAAwB13T,KAC1B,OAAO03T,QAAP,IAAOA,OAAP,EAAOA,EAAsBpoqB,MAAK,SAAAqoqB,GAChC,OAAOA,EAAe33T,iBAAmBA,OAqF7C43T,uBA/E6B,SAACxB,GAA2B,IAAD,IACxD,cAAOA,QAAP,IAAOA,GAAP,UAAOA,EAAuBtiR,qBAA9B,iBAAO,EAAsC+jR,mBAA7C,aAAO,EAAmDrqqB,QAAO,SAACutI,EAAKliB,GACrE,IAAMknP,EAAS,OAAGlnP,QAAH,IAAGA,OAAH,EAAGA,EAASknP,UAC3B,OAAQ7gX,QAAQ67I,EAAIv3H,MAAK,SAAC+hP,GAAD,OAAaA,EAAQziO,KAAOi9U,MAG/ChlO,EAH6DA,EAAI5tI,OAAO,CAAC,CAC7E21B,GAAIi9U,EACJuE,aAAczrP,EAAQyrP,kBAEvB,KAyEHwzT,uBAtE6B,SAACr2T,EAAcs2T,GAC5C,MAAO,CACL/3T,eAAgByB,EAAa77W,IAAI,kBACjCo9W,gBAAiBvB,EAAa77W,IAAI,mBAClCmpW,UAAW0S,EAAa77W,IAAI,aAC5B0+W,aAAcyzT,EACdC,aAAcv2T,EAAa77W,IAAI,WAiEjCqyqB,8BA7DoC,SAACpnf,EAAOqnf,GAAuB,IAAD,EAC5DC,EAAkB,GAClBp/c,EAAQ,OAAGloC,QAAH,IAAGA,GAAH,UAAGA,EAAOjrL,IAAI,mBAAd,aAAG,EAAwBwa,OACzC,IAAqB,OAAjB83pB,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBnzT,uBAA+B,OAARhsJ,QAAQ,IAARA,OAAA,EAAAA,EAAUr1N,QAAS,IAC/D,OAAIw0qB,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBE,eAAe,CAAC,IAAD,EAC9BA,EAAgB5nqB,KAAK6tC,MAAL,OAAW65nB,QAAX,IAAWA,OAAX,EAAWA,EAAmBE,gBACnC,OAAbA,QAAa,IAAbA,GAAA,UAAAA,EAAeC,8BAAf,eAAuC30qB,QAAS,GAClDkc,KAAErR,QAAF,OAAU2pqB,QAAV,IAAUA,OAAV,EAAUA,EAAmBnzT,qBAAqB,SAACC,GACjD,IADwE,EAClEszT,EAAY,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAeC,uBACjCnzpB,SAAQ,SAAAqgP,GAAO,uBAAIA,EAAQ7rI,gBAAZ,QAAwB,MACvCx0G,SAAQ,SAAA2zG,GAAO,uBAAIA,EAAQ0/iB,6BAAZ,QAAqC,MACpD/0pB,MAAK,SAAAnU,GAAC,OAAK,OAADA,QAAC,IAADA,OAAA,EAAAA,EAAGmpqB,6BAA8BxzT,EAAmBhF,kBAJO,cAKlDjnJ,GALkD,IAKxE,2BAAgC,CAAC,IAAtBwsC,EAAqB,QACxBkza,EAAY,OAAGlza,QAAH,IAAGA,OAAH,EAAGA,EAAS7rI,SAASl2G,MACrC,SAAA8zD,GAAC,OAAIA,EAAE0oS,iBAAmBgF,EAAmBhF,kBAE/C,GAAIy4T,GAAgBH,EAAc,CAChC,IAAMX,EAAiB,CACrB,sBAAkB3yT,QAAlB,IAAkBA,OAAlB,EAAkBA,EAAoBhF,eACtC,uBAAmBy4T,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAcz1T,gBACjC,iBAAay1T,QAAb,IAAaA,OAAb,EAAaA,EAAc1pU,UAC3B,qBAAiB0pU,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAc58iB,cAC/B,0BAAsBy8iB,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAcI,mBACpC,aAAgBnza,EAAQ++G,aACxB,aAAgBm0T,EAAa91oB,OAE/Bw1oB,EAAgBlqqB,KAAK0pqB,GACrB,QApBoE,kCA2BhF,OAAOQ,GA4BPQ,oBAzB0B,SAACT,GAAuB,IAAD,EACjD,IAAqB,OAAjBA,QAAiB,IAAjBA,GAAA,UAAAA,EAAmBnzT,2BAAnB,eAAwCrhX,QAAS,EAAG,CACtD,IAAMshX,EAAkB,OAAGkzT,QAAH,IAAGA,OAAH,EAAGA,EAAmBnzT,oBAAoB,GAClE,UAAIC,QAAJ,IAAIA,OAAJ,EAAIA,EAAoBgC,cAAe,CACrC,IAAMA,EAAgBx2W,KAAK6tC,MAAL,OAAW2mU,QAAX,IAAWA,OAAX,EAAWA,EAAoBgC,eACrD,GAAIA,EACF,OAAO/mX,OAAO+M,OAAOg6W,GAAen8W,KAAI,SAAA4wE,GAAI,OAAIA,EAAI,OAI1D,MAAO,KAiBMy6lB,M,+CE5MF0C,GAA0BryoB,aAAc,MACxCsyoB,GAA2BtyoB,aAAc,MAGhDuyoB,GAAkC,SAAC,GAA4C,IAA1Cjof,EAAyC,EAAzCA,MAAOkof,EAAkC,EAAlCA,WAAY5woB,EAAsB,EAAtBA,SAAUiI,EAAY,EAAZA,MAC9DxiB,EAAM+xB,YAAe,gBAArB/xB,EACFg7B,EAAQrV,sBAAYoV,gBACpBwgD,EAAM51D,sBAAYoY,gBAClBgrnB,EAAepjoB,sBAAYqvN,YAAiB,iBAE5C1uC,GADkB3gL,sBAAYywN,eACvB,OAAGnzE,QAAH,IAAGA,OAAH,EAAGA,EAAOjrL,IAAI,OACrB4mC,EAAW2F,wBAEjB,EAAoCoO,mBDnCT,GCmC3B,mBAAO6zU,EAAP,KAAmBmW,EAAnB,KACA,EAA0DhqV,mBAAiC,MAA3F,mBAAOy4nB,EAAP,KAA8BC,EAA9B,KAEA,EAA8D14nB,mBAAS,MAAvE,mBAAOwlY,EAAP,KAAgCmzP,EAAhC,KACA,EAA0D34nB,mBAAS,MAAnE,mBAAO61nB,EAAP,KAA8B+C,EAA9B,KAEA,EAA8D54nB,mBAAS,MAAvE,mBAAO64nB,EAAP,KAAgCC,EAAhC,KAEA,EAA4C94nB,oBAAS,GAArD,mBAAO+4nB,EAAP,KAAuBC,EAAvB,KACA,EAA4Ch5nB,mBAAS,MAArD,mBAAO81nB,EAAP,KAAuBmD,EAAvB,KACA,EAAgCj5nB,oBAAS,GAAzC,mBAAO+yb,EAAP,KAAiBmmM,EAAjB,KACA,EAA0Bl5nB,mBAAS,MAAnC,mBAAO8jmB,GAAP,KAAcq1B,GAAd,KAEMj2kB,GAAUsnB,sBAAW,uCAAC,WAAO4ujB,EAAa/jQ,GAApB,uBAAApua,EAAA,4DACT,KADS,SAEM0ta,KAAwBY,uBAAuB3sU,EAAKvgD,EAAOgtX,EAD1E,MADS,UAGQ,aAAb,QADfsiQ,EAFoB,cAGL,IAAjBA,OAAA,EAAAA,EAAmB5wkB,QAHG,iCAIwBm9gB,KAAkB+tC,gBAAgBrpjB,EAAKvgD,EAAO,+BAJtE,cAIlBgxnB,EAJkB,OAKxBP,EAA2BO,GALH,UAMIC,KAAgBC,SAAS3wkB,EAAKvgD,EAAOsrK,GANzC,QAMlB6ld,EANkB,OAOxBL,GAASK,GACTZ,EAAyBjB,GACnB8B,EAAiB9D,GAAqByC,oBAAoBT,GAC1DR,EAAuBxB,GAAqB+B,8BAA8B0B,EAAazB,GAC7Fe,EAAyB,CACvBn2oB,GAAI8yY,EACJqkQ,gBAAiB,KACjBvC,uBACAsC,iBACApD,2BAA4B,GAC5Bl4Y,QAAO,OAAEk7Y,QAAF,IAAEA,OAAF,EAAEA,EAAmCl7Y,QAC5Cl8J,YAAW,OAAEo3iB,QAAF,IAAEA,OAAF,EAAEA,EAAmCp3iB,YAChD03iB,iBAAkB,GAClBC,iCAAkC,KApBZ,4CAAD,wDAuBxB,CAACjmd,IAEJlsL,qBAAU,WDxEmB,ICyEvBosV,GACFgmT,GAAmBpB,EAAuB3C,KAE3C,CAACjiT,IAEJpsV,qBAAU,WAAO,IAAD,EAEU,EADpB4tY,EAAe,MACnB,OAAIxlY,QAAJ,IAAIA,GAAJ,UAAIA,EAAOoE,cAAX,aAAI,EAAe6loB,OACjBzkQ,EAAepya,OAAM,OAAC4sC,QAAD,IAACA,GAAD,UAACA,EAAOoE,cAAR,aAAC,EAAe6loB,MAEnCnmd,IACFgld,EAA2BtjQ,GAC3BnyU,GAAQotF,EAAO+kP,MAEhB,CAAC1hN,IAEJ,IAAMkmd,GAAqBrvjB,sBAAW,uCAAC,WAAO/N,EAAiBs9jB,GAAxB,mBAAA9yqB,EAAA,6DAC7B6yqB,EAAMr9jB,EAAWl6E,GACjBy3oB,EAAc,CAClBC,gBAAgB,EAChB9nW,WAAY11N,EAAWi9jB,gBACvBl0P,wBAAyBs0P,EACzB3C,qBAAsB16jB,EAAW06jB,qBACjCsC,eAAgBh9jB,EAAWg9jB,gBAPM,SASb9D,GAAqBD,cAAcsE,GATtB,OAS7BE,EAT6B,OAU/BH,EAEEA,EAAoBG,UAAYA,GAClCjB,GAAkB,SAAArgqB,GAChB,OAAIA,EAAKshqB,UAAYA,EACZthqB,EAEG,2BAAQA,GAAR,IAAcshqB,UAASF,cAAajE,aAAc,GAAI9hX,SAAU,GAAIltN,OAAQ,eAa5FkykB,EARgB,CACda,MACAI,UACAF,cACAjE,aAAc,GACd9hX,SAAU,GACVltN,OAAQ,YA5BuB,2CAAD,wDAiCnC,IAEGozkB,GAAmB3vjB,uBAAY,WACnCw/Q,GAAc,SAACpxX,GAAD,OAAUA,EAAO,OAC9B,IAEGwhqB,GAAmB5vjB,uBAAY,WACnCw/Q,GAAc,SAACpxX,GAAD,OAAUA,EAAO,OAC9B,IAEGyhqB,GAAiB7vjB,uBAAY,WACjCw/Q,EDtIyB,GCuIzB/9V,EAASv+B,aAAKunB,mCAA+B,WAAOuwZ,OACnD,CAACA,IAEE80P,GAA6B9vjB,uBAAY,WAC7C,IAAM+vjB,EAAe,CACnBN,gBAAgB,EAChB9nW,YAAiC,OAArBsmW,QAAqB,IAArBA,OAAA,EAAAA,EAAuBiB,kBAAmB,KACtDl0P,wBAAyBizP,EAAsBl2oB,GAC/C40oB,sBAA2C,OAArBsB,QAAqB,IAArBA,OAAA,EAAAA,EAAuBtB,uBAAwB,GACrEsC,gBAAqC,OAArBhB,QAAqB,IAArBA,OAAA,EAAAA,EAAuBgB,iBAAkB,IAE3DjB,EAAW+B,KACV,CAAC9B,EAAuBD,IAErBgC,GAAsBhwjB,uBAAY,WACtCkujB,GAAyB,SAAC9/pB,GAMxB,OALmB,2BACdA,GADc,IAEjB8gqB,gBAAiB,KACjBrD,2BAA4B,QAIhCoE,OACC,CAACnqf,EAAO8lf,EAActyB,KAEnB42B,GAAwBlwjB,uBAAY,SAAC2nN,GACzCA,EAAalvU,OAAOkvU,GACpB,IAAIkkW,EAA6B,GAC7BlkW,IACFkkW,EAA6BV,GAAqBQ,4BAA4B7lf,EAAO8lf,EAAcjkW,EAAY2xU,KAEjH40B,GAAyB,SAAC9/pB,GACxB,IAAM+hqB,EAAoBt7pB,KAAE67K,UAAUtiL,GACtC,KAAI,OAAC+hqB,QAAD,IAACA,OAAD,EAACA,EAAmBjB,kBAAmBiB,EAAkBjB,kBAAoBvnW,EAAY,CAC3F,GAAKikW,EAAal0pB,MAAM,CAAC,YAAajf,OAAOkvU,KAEtC,CACL,IAAMv/C,EAAgBwjZ,EAAa/wqB,IAAI,aAAaiiB,WAAW,SAAAszpB,GAAW,OAAIA,IAAgB33qB,OAAOkvU,OAC9E,IAAnBv/C,GACF3mP,EAASg/B,aAAY,eAAgB,YAAa2nN,SAJpD3mP,EAAS8+B,aAAU,eAAgB,YAAa9nE,OAAOkvU,KAYzD,OALmB,2BACdv5T,GADc,IAEjB8gqB,gBAAiBvnW,EACjBkkW,+BAIF,IAAMzjZ,EAAgBwjZ,EAAa/wqB,IAAI,aAAaiiB,WAAW,SAAAszpB,GAAW,OAAIA,IAAgBD,EAAkBjB,mBAKlH,OAJyB,IAAnB9mZ,GACF3mP,EAASg/B,aAAY,eAAgB,YAAa2nN,IAG/Ch6Q,KAET6hqB,OACC,CAACnqf,EAAO8lf,EAActyB,KAEnB+2B,GAA2BrwjB,uBAAY,SAAC2tI,EAAOn7P,GACnD07qB,GAAyB,SAAC9/pB,GAKxB,OAJmB,2BACdA,GADc,kBAEhBu/O,EAAQn7P,SAIZ,IAEGy9qB,GAAe,WACnBxB,EAAkB,MAClB6B,GAA8B,uBAAwB,KAUlDA,GAAgCtwjB,uBAAY,SAACh+F,EAAgBuupB,GACjErC,GAAyB,SAAC9/pB,GAAU,IAAD,EAC7BoiqB,EAAgC,iBAAGpiqB,QAAH,IAAGA,OAAH,EAAGA,EAAMghqB,wCAAT,QAA6C,GAmBjF,MAlBe,QAAXptpB,IAAA,OAAoBuupB,QAApB,IAAoBA,OAApB,EAAoBA,EAAiBhF,gBACvCiF,EAAmCA,EAAiCnuqB,QAAO,SAAC8vnB,GAAD,OAAgBA,EAAWo5C,eAAiBgF,EAAgBhF,iBACtGroqB,KAAKqtqB,GAEzB,WAAXvupB,IACFwupB,EAAmCA,EAAiCnuqB,QAAO,SAAC8vnB,GAAD,OAAgBA,EAAWo5C,eAAiBgF,MAE1G,yBAAXvupB,IAAA,OAAqCuupB,QAArC,IAAqCA,OAArC,EAAqCA,EAAiBhF,gBACxDiF,EAAmCA,EAAiCnuqB,QAAO,SAAC8vnB,GAAD,OAAgBA,EAAWn7nB,OAAS4xa,SAC9E1la,KAAKqtqB,GAEzB,yBAAXvupB,IACFwupB,EAAmCA,EAAiCnuqB,QAAO,SAAC8vnB,GAAD,OAAgBA,EAAWn7nB,OAAS4xa,SAE1F,2BAClBx6Z,GADkB,IAErBghqB,iCAAkCoB,SAIrC,IAEGC,GAAmBzwjB,uBAAY,WACnCv+E,EAASv+B,aAAK,UAAD,OAAWimN,OACvB,CAACA,EAAS1nL,IAGPivoB,GAAiB1wjB,sBAAW,sBAAC,4CAAAvjH,EAAA,6DACjC+xqB,GAAkB,GACZ76Y,EAAUs6Y,EAAsBt6Y,SAAW,KAC3Cl8J,EAAcw2iB,EAAsBx2iB,aAAe,KACnDk5iB,EAAetC,EAA0B5oqB,KAAKC,UAAU2oqB,GAA2B,KACnFmC,EAAmCvC,EAAsBmB,kCAAoC,GAE7F1kqB,EAAS,CACbkmqB,mBAAoB,GACpBC,aAAc,GACdC,SAAU,GACVn9Y,QAASA,GAAW,GACpBl8J,YAAaA,GAAe,GAC5Bk5iB,aAAcA,GAAgB,KAC9BvB,iCAAkCoB,EAClCj0kB,OAAQ,aAEJy3Q,EAAsB,GAC5Bn/V,KAAErR,QAAF,OAAU6nqB,QAAV,IAAUA,OAAV,EAAUA,EAAuBrxT,qBAAqB,SAACtpS,GACrD,IAAMgmS,EAAeq6T,GAAgD1zoB,GAAD,OAAe4woB,QAAf,IAAeA,OAAf,EAAeA,EAAuBiB,gBAAiBx+lB,EAAKukS,gBAChI,GAAIyB,EAAc,CAChB,IAAMu4T,EAAiBxpqB,KAAK6tC,MAAL,OAAWo9B,QAAX,IAAWA,OAAX,EAAWA,EAAMurS,eAClCA,EAAgB/mX,OAAO+M,OAAOgtqB,GAAgBxsqB,QAAO,SAACutI,EAA6B29G,GAAgB,IAAD,MAChGipH,EAAgBF,EAAa77W,IAAI,iBACjCrI,GAAqB,OAAbokX,QAAa,IAAbA,GAAA,UAAAA,EAAen+V,MAAK,SAACijT,GAAD,OAAUA,EAAK7gU,IAAI,QAAU8yP,EAAM51N,aAAvD,eAA4Dl9B,IAAI,gBAAiB,KACzFyK,GAAoB,OAAbsxW,QAAa,IAAbA,GAAA,UAAAA,EAAen+V,MAAK,SAACijT,GAAD,OAAUA,EAAK7gU,IAAI,QAAU8yP,EAAM51N,aAAvD,eAA4Dl9B,IAAI,UAAW,KAClFO,GAAmB,OAAbw7W,QAAa,IAAbA,GAAA,UAAAA,EAAen+V,MAAK,SAACijT,GAAD,OAAUA,EAAK7gU,IAAI,QAAU8yP,EAAM51N,aAAvD,eAA4Dl9B,IAAI,eAAgB,KAC5F,OAAK+7W,GAAkBx7W,GAGvB40I,EAAI50I,GAAO,CACTkK,OACA9S,SAEKw9I,GANEA,IAOR,IACGiqO,EAAqB,CACzB+2T,uBAAwBtgmB,EAAKsgmB,uBAC7BjhjB,UAAWt3H,OAAOi4E,EAAKq/C,WACvBklP,eAAgBvkS,EAAKukS,eACrBx9O,aAAiB,OAAJ/mD,QAAI,IAAJA,OAAA,EAAAA,EAAM+mD,cAAe,GAClC8gP,MAAU,OAAJ7nS,QAAI,IAAJA,OAAA,EAAAA,EAAM6nS,OAAQ,GACpB0D,cAAex2W,KAAKC,UAAUu2W,IAEhCjI,EAAoB9wW,KAAK+2W,OAG7BvvW,EAAM,oBAA0BspW,EA/CC,UAgDRm2D,KAAwB/ia,OAAOg3F,EAAKvgD,EAAOplD,OAAOuib,GAA0Btwa,GAhDpE,QAgD3BumqB,EAhD2B,QAiDjC,UAAIA,EAAU,eAAd,iBAAI,EAAuBrmQ,sBAA3B,aAAI,EAAuC7yY,IACzC22oB,GAAY,GAEZjtoB,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,8CACX65E,SAAU,QACVk2S,aAAc,CACZ/7G,SAAU,SACVK,WAAY,aAIlBs3Y,GAAkB,GA7De,4CA8DhC,CAACP,EAAuBnof,EAAOuof,IAE5BhxoB,GAAe,CACnBkrc,WACAl/G,aACAvjM,QACA8lf,eACAtyB,SACAt+N,0BACAizP,wBACA5C,wBACAC,iBACAiD,iBACAF,2BAGI6C,GAAgB,CACpBC,WAAYxB,GACZyB,WAAYxB,GACZvyW,SAAUwyW,GACVz8W,SAAUs9W,GACVW,mBAAoBhB,GACpBiB,wBAAyBhB,GACzB5gQ,gBAAiBwgQ,GACjBqB,qBAAsBzB,GACtB0B,gBAAiBxB,GACjByB,0BA7HgC,SAACC,GACjCjD,GAAkB,SAAArgqB,GAEhB,OADoB,2BAAQA,GAASsjqB,OA4HvCC,WAAYlB,IAGd,OACE,eAAC5C,GAAwB3woB,SAAzB,CAAkC1qC,MAAO6qC,GAAzC,SACE,eAACywoB,GAAyB5woB,SAA1B,CAAmC1qC,MAAO0+qB,GAA1C,SACG9zoB,OAMM+E,kBAAK4roB,IAEb,SAAS6D,GAAiB5xqB,GAC/B,OAAc,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASuoe,YAAY,EAGvB,SAASspM,GAA8B7xqB,GAC5C,OAAOA,EAAQquqB,wBAGV,SAASyD,GAA4B9xqB,GAC1C,OAAOmrqB,GAAqBC,2BAA2BprqB,GAKlD,SAAS+xqB,GAAqB/xqB,GACnC,OAAOA,EAAQuuqB,eAGV,SAASyD,GAAiBhyqB,GAC/B,OAAOA,EAAQqpX,WAIV,SAAS4oT,GAAmCjyqB,EAAS2tP,GAAQ,IAAD,EACjE,OAAO,UAAA3tP,EAAQiuqB,6BAAR,eAAgCtgb,KAAU,KAG5C,SAASukb,GAA4BlyqB,GAC1C,OAAOA,EAAQiuqB,uBAAyB,KAOnC,SAASkE,GAA4BnyqB,GAC1C,OAAOA,EAAQqrqB,uBAAyB,KAOnC,SAAS0F,GAAgD/wqB,EAAS2nU,EAAYstC,GACnF,IAAMqB,EAAgBt2W,EAAQ8lL,MAAMjrL,IAAI,YAClCixqB,EAA0B9rqB,EAAQ4rqB,aAAal0pB,MAAM,CAAC,uBAAwB,aAG9Es2M,EAFmBhuN,EAAQ4rqB,aAAal0pB,MAAM,CAAC,0BAA2Bjf,OAAOkvU,GAAa,cAE/DmkW,GAA2Bx1T,GAAiBvnW,eAAK,IACtF,OAAOo8pB,GAAqBK,gCAAgCx9c,EAAUinJ,IAAmB,KAGpF,SAASm9T,GAAmC7qoB,GACjD,OAAOq0iB,aAAmBiyF,GAAyBtmoB,GCpYrD,IAAM++E,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvCg/R,OAAQ,CACN5+R,MAAO,OACP2hC,SAAU,SACV+H,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC9pC,QAAS,OACTK,cAAe,MACfC,eAAgB,gBAChBzC,WAAY,UAEdi5W,QAAS,CACPp7K,UAAW,GACXx7L,MAAO,MACP0pC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCiI,OAAQ,CACN3L,YAAatmC,EAAMZ,QAAQ,IAE7B11E,KAAM,CACJw2E,QAAS,OACTK,cAAe,MACfxC,WAAY,SACZyC,eAAgB,qBAId6/lB,GAAa,WACjB,IAAQxvpB,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAoCyjG,KAA5B0qP,EAAR,EAAQA,OAAQg4E,EAAhB,EAAgBA,QAAS/kU,EAAzB,EAAyBA,OACnBqujB,EAAa,CACjBzvpB,EAAE,mDACFA,EAAE,wCAEEwopB,EAAwB+G,IAAmC,SAAApyqB,GAAO,OAAImyqB,GAA4BnyqB,MAElGqpX,EAAa+oT,GAAmCJ,IAChDzD,EAAiB6D,GAAmCL,IAC1D,EAAmEn2F,aAAmBkyF,IAA0B,SAAA9tqB,GAAO,OAAIA,KAAnHmxqB,EAAR,EAAQA,WAAYC,EAApB,EAAoBA,WAAY/zW,EAAhC,EAAgCA,SAAUjK,EAA1C,EAA0CA,SAAUu+W,EAApD,EAAoDA,WAC9CY,EAAalpT,IAAeipT,EAAW35qB,OAAS,EAChD65qB,EAAuBJ,GAAmCN,IAC1D1lB,EAAagmB,GAAmCR,IAEtD,OACE,qCACIvG,GACA,gBAAC1yS,GAAA,EAAD,CACE3oT,QAAS,CAAE3hE,KAAM2iW,GACjBjpP,UAAW,EACXhwF,GAAG,cAHL,WAMGq0nB,GACD,eAACh/R,GAAA,EAAD,CAAS/D,WAAYA,EAAYr5S,QAAS,CAAE3hE,KAAM26a,GAAlD,SACGspP,EAAWxyqB,KAAI,SAAC83B,EAAO3kC,GACtB,OACE,eAACq6X,GAAA,EAAD,UACE,eAACC,GAAA,EAAD,UAAY+kT,EAAWr/qB,MADd2kC,QASjB,gBAAC8zR,GAAA,EAAD,CAAKt5O,MAAOg6kB,EAAa,OAAS,KAAM75kB,cAAe,MAAOL,QAAQ,OAAOM,eAAe,WAAWzC,WAAW,SAAlH,WAEKq8kB,GACC,eAAC3wiB,EAAA,EAAD,CACFzrC,QAAS,CAAE3hE,KAAM41G,GACjBzT,QAAQ,OACRzT,MAAM,UACN4e,QAAS0hN,EAJP,SAMGx6S,EAAE,yBAKNupoB,GAA6B,IAAf/iS,GACb,eAAC5tQ,EAAA,EAAD,CACEzrC,QAAS,CAAE3hE,KAAM41G,GACjBzT,QAAQ,OACRzT,MAAM,UACN4e,QAASy1jB,EAJX,SAMGvupB,EAAE,sBAIT,eAAC44F,EAAA,EAAD,CACEzrC,QAAS,CAAE3hE,KAAM41G,GACjBzT,QAAQ,YACRzT,MAAM,UACN4e,QAASywiB,EAAaulB,EAAaY,EAAan/W,EAAW+9W,EAC3Dn9jB,UAAUo4iB,IAAsBmiB,GAAkBiE,GAClDt3Z,UAAWqzZ,GAAkB,eAAC71W,EAAA,EAAD,CAAkB7lU,KAAM,KANvD,SASiBgwB,EAAbupoB,EAAe,2BAA8BmmB,EAAe,wBAA6B,+BAW1FpwoB,kBAAKkwoB,I,+LCvGd/rjB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C3jE,KAAM,CACJwjH,WAAY7V,KAAK,KACjB2V,OAAO,GAAD,OAAK3/C,EAAMZ,QAAQ,KAAnB,qBAAqC4qC,KAAK,MAChDppC,QAASZ,EAAMZ,QAAQ,GACvBi3C,OAAQ,EACRqC,UAAW,IACXv3C,SAAU,EACVgpC,OAAQ,WAEVyqP,aAAc,CACZh5F,UAAW,OACXx6L,SAAU,QAEZ9C,UAAW,CACT6C,SAAU,GAEZwnP,aAAc,CACZtyM,OAAQ,QAEVw+O,SAAU,CACR9pQ,MAAO,uBAET+pQ,WAAY,CACVj7O,cAAe,aAEjBgvM,WAAY,CACV99N,MAAO,kBACPgnB,UAAW,UAEbwoiB,SAAU,CACRn6kB,MAAO,OACP0mD,KAAM,IACN5mD,QAAS,OACTw4C,UAAW,IACXkjJ,UAAW,IACXr7L,cAAe,SACfxC,WAAY,SACZ0uC,YAA+B,IAAlBzsC,EAAMZ,UACnBonD,YAAa,UACbha,YAAa,SACb1C,gBAAiB,UACjB/e,MAAO,UACP0iQ,QAAS,OACTn0O,WAAY,2BAEdmnjB,uBAAwB,CACtBtxjB,SAAU,SACV/uC,MAAO,YA8HKsgmB,GAzHiC,SAAC,GAM3C,IAL6C/7V,EAK9C,EAL8CA,YACA+vB,EAI9C,EAJ8CA,iBACAisU,EAG9C,EAH8CA,cACAC,EAE9C,EAF8CA,gBACAC,EAC9C,EAD8CA,mBAE5C7imB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACjB,EAAwCoO,mBAAS,MAAjD,mBAAOkyT,EAAP,KACA,GADA,KAC4BlyT,mBAAS,OAArC,mBAAOg1Q,EAAP,KAAesoX,EAAf,KACA,EAA0Bt9nB,mBAAS,MAAnC,mBAAOvwC,EAAP,KAEA,GAFA,KAWI4lT,aAAc+nX,IATlB,IACE9nX,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAGFE,GARF,EAOED,aAPF,EAQEC,SAGFnuR,qBAAU,WACJypU,GACEisU,GACFG,EAAUH,KAGb,CAACA,IAEJ11oB,qBAAU,WACR,GAAI8tR,EAAc,CAChB,IAAMgoX,EAAehoX,EAAalwT,IAAI,MAChC8xpB,EAAe5hW,EAAalwT,IAAI,gBAClCk4qB,IACFD,EAAUC,GACVF,EAAmBE,EAAcpmB,EAAcl0pB,OAAOsyT,EAAalwT,IAAI,eAAYjI,OAGtF,CAACm4T,IAEJ9tR,qBAAU,WACJiuR,GACFzpR,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,sCACX65E,SAAU,aAGb,CAACwuN,IAMJ,OACE,gBAACv7O,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASb,WAAW,SAASG,UAAWF,EAAQM,UAAlG,UACI26O,GACA,uCACE,eAACU,GAAA,EAAD,CACEn7M,QAAQ,cACRh+G,MAAOiG,OAAOuyT,GACdjuN,MAAM,YACNqV,MAAO,CAACj/B,SAAU,KAEpB,gBAACm9B,EAAA,EAAD,WAAa06M,EAAb,UAGe,eAAjB08C,GACA,eAACp3P,EAAA,EAAD,UAAaztF,EAAE,4BAGjB,eAAC,KAAD,CACEokV,eAtBwB,SAACU,EAAmB1pO,GAChDmtL,EAAQu8C,EAAU,KAsBdlwP,UAAU,EAFZ,SAIG,gBAAGmwP,EAAH,EAAGA,aAAcC,EAAjB,EAAiBA,cAAjB,OACC,gBAACl4R,EAAA,EAAD,yBAAMO,UAAWF,EAAQ3hE,KAAMiiE,WAAW,EAAMP,WAAW,SAASa,QAAQ,SAASU,KAAK,UAAas2R,KAAvG,cACE,sCAAWC,MACTnB,GAAoBl8C,GACpB,eAAC,KAAD,CACEltM,IAAKktM,EACL5sM,aAAa,EACb1tC,UAAWF,EAAQ2qP,iBAGpBnQ,IAAWk8C,IACZ,gBAAC/2R,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAArD,UACE,eAACF,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,KAAD,CAAiButC,SAAS,QAAQlhB,MAAM,eAE1C,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAAST,WAAW,SAAjE,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ62R,SAA/B,SAA0ChkV,EAAE,4BAE9C,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC0zC,GAAA,EAAD,CAAMyhN,UAAU,OAAO9oO,MAAM,UAAU7sB,UAAWF,EAAQ82R,WAA1D,SACGjkV,EAAE,8BAGN8zT,EAAY72U,KAAI,SAACw4V,EAAarlW,GAAd,OACf,eAAC08E,EAAA,EAAD,CAA+Be,MAAM,EAArC,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQ6qP,WAAjD,SAA8Dy9B,KADhE,kBAAsBrlW,oBAUnCgS,GACC,eAACqrG,EAAA,EAAD,CAAYvT,MAAM,QAAlB,SAA2B93F,Q,SCvJ7BqhH,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC0+W,QAAS,CACP99W,QAAS,EACTu3C,aAAcn4C,EAAMZ,QAAQ,IAE9B4hmB,WAAY,CACV16jB,YAAatmC,EAAMZ,QAAQ,IAE7B6qiB,WAAY,CACVj9f,WAAYhtC,EAAMZ,QAAQ,IAE5B6hmB,WAAY,CACV36iB,YAAa,qBAEf46iB,gBAAgB,aACd5gmB,SAAU,OACVF,MAAM,eAAD,OAAiBJ,EAAMZ,QAAQ,IAA/B,QACJY,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9Bn+gB,MAAO,SAGX+gmB,qBAAsB,CACpBpqjB,WAAY/2C,EAAMZ,UAClB43C,cAAeh3C,EAAMZ,UACrBgB,MAAOJ,EAAMZ,QAAQ,KAEvBmpP,YAAa,CACXlyM,OAAQr2C,EAAMZ,QAAQ,IACtBgB,MAAOJ,EAAMZ,QAAQ,KAEvBgimB,oBAAqB,CACnBrvjB,UAAW,QACXnzC,QAAS,SAEXyhjB,oBAAqB,CACnBtpgB,WAA8B,EAAlB/2C,EAAMZ,UAClBgC,SAAU,KAEZigmB,gBAAiB,CACft2kB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4vF,cAAeh3C,EAAMZ,QAAQ,QAI3BkimB,GAAyB,SAAC,GAAoB,IAAD,YAAjBtF,EAAiB,EAAjBA,WACxBnrpB,EAAM+xB,YAAe,gBAArB/xB,EAEFmtD,EAAUs2C,KACVvnB,EAAS8zK,eAETpxO,GADiB+G,sBAAY6rK,aAAsB,aACxCjtK,yBACXmsoB,EAAkB/qoB,sBAAYywN,eAE9Bo1a,EAA0B+D,GAAmCP,IAC7DR,EAAqBz1F,aAAmBkyF,IAA0B,SAAA9tqB,GAAO,OAAIA,EAAQqxqB,sBACrFC,EAA0B11F,aAAmBkyF,IAA0B,SAAA9tqB,GAAO,OAAIA,EAAQsxqB,2BAC1FG,EAA4B71F,aAAmBkyF,IAA0B,SAAA9tqB,GAAO,OAAIA,EAAQyxqB,6BAE5FpG,EAAwB+G,IAAmC,SAAApyqB,GAAO,OAAImyqB,GAA4BnyqB,MAClGiuqB,EAAwBmE,IAAmC,SAAApyqB,GAAO,OAAIkyqB,GAA4BlyqB,MAElGsrqB,EAAiB8G,IAAmC,SAAApyqB,GAAO,OHmS5D,SAA8BA,GACnC,OAAOA,EAAQsrqB,eGpSsDkI,CAAqBxzqB,MAEpF2zR,GAA+B,OAArBs6Y,QAAqB,IAArBA,OAAA,EAAAA,EAAuBt6Y,UAAW,GAC5Cl8J,GAAmC,OAArBw2iB,QAAqB,IAArBA,OAAA,EAAAA,EAAuBx2iB,cAAe,GACpDgrU,GAAmC,OAArBwrO,QAAqB,IAArBA,OAAA,EAAAA,EAAuBmB,mCAAoC,GAC/E,EAA0C55nB,mBAAS,IAAnD,mBAAOi+nB,EAAP,KAAsBC,EAAtB,KACM9xW,GAAgC,OAArBypW,QAAqB,IAArBA,GAAA,UAAAA,EAAuBtiR,qBAAvB,mBAAsC4qR,YAAtC,eAA4C12jB,WAAY,KAAxD,OAA8DoujB,QAA9D,IAA8DA,GAA9D,UAA8DA,EAAuBtiR,qBAArF,iBAA8D,EAAsC4qR,YAApG,aAA8D,EAA4Cz2jB,WAAY,IACjIm3f,GAAiC,OAArBg3D,QAAqB,IAArBA,GAAA,UAAAA,EAAuBtiR,qBAAvB,mBAAsC4qR,YAAtC,eAA4CzwnB,QAAS,IAEvEjmB,qBAAU,WACJquoB,IACgB,OAAdA,QAAc,IAAdA,OAAA,EAAAA,EAAgBkE,gBAAe,OAAClE,QAAD,IAACA,OAAD,EAACA,EAAgBC,eAA2C,WAAb,OAAdD,QAAc,IAAdA,OAAA,EAAAA,EAAgB/ukB,UAC7Ek3kB,EAAcpzqB,SAASirqB,EAAeoE,WACzCgE,GAAiB,SAAAtlqB,GAAI,4BAAQA,GAAR,CAAck9pB,EAAeoE,aAClD1B,EAAU,OAAC1C,QAAD,IAACA,OAAD,EAACA,EAAgBkE,iBAIhC,CAAClE,IAEJruoB,qBAAU,WACR,GAAIs2oB,EAAgB1grB,KAAO,GAAKy4qB,EAAgB,CAC9C,IAAM9gX,EAAS+oX,EAAgB77pB,MAAM,CAAC4zpB,EAAegE,IAAK,SAAU,EAAG,WACjE7lX,EAAW8pX,EAAgB77pB,MAAM,CAAC4zpB,EAAegE,IAAK,SAAU,EAAG,aACnEsE,EAAcL,EAAgB77pB,MAAM,CAAC4zpB,EAAegE,IAAK,SAAU,EAAG,WACxEuE,GAAgB,EAIpB,IAHoB,OAAdvI,QAAc,IAAdA,OAAA,EAAAA,EAAgBC,gBAAiB/gX,GAAqC,WAAb,OAAd8gX,QAAc,IAAdA,OAAA,EAAAA,EAAgB/ukB,UAC/Ds3kB,GAAgB,GAEdA,GAAiBrpX,GAAUf,GAA4B,aAAhBmqX,EAA4B,CACrE,IAAME,EAAgB,CACpBvI,aAAc/gX,EACdxzT,KAAM4xa,KACN+jP,aAAcljW,GAEhB6nX,EAAwB,uBAAwBwC,GAChD,IAAI/9R,EAAW,GACf,IACEA,EAAWh3S,EAAOJ,QAAQ6rN,EAAQ,CAChCptN,QAAS,OACTC,SAAU,UACVo6O,SAAS,EACT/3N,eAAgBz6F,iBAChB06F,WAAW,EACXC,WAAW,IAEb,MAAO1gH,GACP4f,QAAQ7Z,MAAM,eAAgB,CAC5B85F,WAEFjgF,QAAQ7Z,MAAM/F,GAEhB,IAAMwyqB,EAAkB,CACtBpC,IAAKhE,EAAegE,IACpB/D,aAAc/gX,EACdf,WACAssF,WACAx5S,OAAQ,YAEVk1kB,EAA0BC,GAC1BjwoB,EAAS,IAAIskL,KAAiC,CAACi1N,wBAAyBswP,EAAegE,WAG1F,CAACiE,IAEJ,IAYMQ,EAAsB/zjB,uBAAY,SAACie,GACvCoziB,EAAmB,UAAWpziB,EAAMn6G,OAAOtxB,SAC1C,IAEGwhrB,EAA0Bh0jB,uBAAY,SAACie,GAC3CoziB,EAAmB,cAAepziB,EAAMn6G,OAAOtxB,SAC9C,IAEGyhrB,EAAoBj0jB,uBAAY,SAACurjB,EAAcmE,GACnD4B,EAAwB,uBAAwB/F,GAChD,IAAMmG,EAAkB,CACtBpC,IAAKjE,EAAsBtzoB,GAC3BwzoB,eACA9hX,SAAU,GACVssF,SAAU,GACVx5S,OAAQ,SAEVk1kB,EAA0BC,GAC1BgC,GAAiB,SAAAtlqB,GAAI,4BAAQA,GAAR,CAAcshqB,SAClC,IAWGwE,EAAsB,uCAAG,WAAO3I,GAAP,SAAA9uqB,EAAA,sDAC7B60qB,EAAwB,SAAU/F,GADL,2CAAH,sDAI5B,OACE,uCACE,eAAC5hP,GAAA,EAAD,CAASz5W,UAAWF,EAAQ0gX,QAA5B,SACE,gBAAC/gX,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,UACGztF,EAAE,8CAIP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAACmsC,GAAA,EAAD,CAAQzL,MAAO,CAAEhgC,MAAO,OAAQi2C,OAAQ,YAE1C,eAAC14C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACGoxN,MAGL,eAACjyP,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,YAApB,SACG6jgB,gBAQb,eAACrnT,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,mCACTrwB,MAAOmhS,GAAW,GAClBhjL,WAAW,EACX2B,SAAUyhkB,IAGZ,eAAC/mX,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,uCACTrwB,MAAOilI,GAAe,GACtB9mB,WAAW,EACXskP,WAAW,EACXC,QAAS,EACT5iP,SAAU0hkB,IAGZ,gBAAC1jkB,EAAA,EAAD,CAAY8B,MAAO,CAAEgB,UAAW,IAAM5C,QAAQ,YAA9C,UACG3tF,EAAE,2BADL,OAIA,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,eAAeb,WAAW,SAAzD,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAMxB,UAAWF,EAAQijmB,WAA/C,SACE,eAAC,KAAD,CACE31jB,KAA4B,OAAvB+wjB,QAAuB,IAAvBA,OAAA,EAAAA,EAAyB37W,UAAW,YACzCtgP,MAAO,SACPC,OAAQ,MACRurC,aAAa,EACbD,YAAY,WAIhB,eAAChuC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBQ,QAAS,EAAxD,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAS,KAArB,gBACG69jB,QADH,IACGA,OADH,EACGA,EAAyB/oqB,SAG9B,eAACqqE,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAS,QAArB,gBACG69jB,QADH,IACGA,OADH,EACGA,EAAyB71nB,SAI9B,eAACm3B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAS,QAAS4B,MAAO,CAAEmb,WAAY,YAAnD,gBACG8gjB,QADH,IACGA,OADH,EACGA,EAAyBp6d,iBAOpC,eAACtkI,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,aAAaQ,QAAS,EAArD,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQmjmB,qBAArC,SACE,eAAC7ikB,EAAA,EAAD,UACGztF,EAAE,qCAIT,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGZ,UAAU,SAA7C,SACE,eAACb,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQmjmB,qBAArC,SACE,eAAC,GAAD,CAEEx8V,YAAa,GACb+vB,kBAAkB,EAClBisU,cAAe,KACfC,gBAAiB,GACjBC,mBA/GiB,SAACroX,GAA+B,IAAvBmiW,EAAsB,uDAAP,GAC3Cp1U,EAAa,CACjBg0V,aAAc/gX,EACdmiW,eACA31pB,KAAM2xa,MAER2oQ,EAAwB,MAAO/5V,KAoGlB,mBASX,eAAC5nQ,EAAA,EAAD,CAAMW,WAAW,EAAOP,WAAW,aAAaa,QAAQ,gBAAgBV,UAAWF,EAAQqijB,oBAA3F,SACG5vL,GAAeA,EAAYpgc,QAAO,SAAC8vnB,GAAD,OAAgBA,EAAWn7nB,OAAS2xa,QACpE7oa,KAAI,SAACqynB,GAAD,OACH,gBAAC,IAAM9wW,SAAP,WACE,eAAC1xM,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,YAAazT,MAAM,cAAc7sB,UAAWF,EAAQqjmB,gBAAxE,gBAA0FlhD,QAA1F,IAA0FA,OAA1F,EAA0FA,EAAYw6B,iBAExG,eAACh9kB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC8/C,GAAA,EAAD,CAAY7V,QAAS,kBAAMu4jB,EAAuB/hD,EAAWo5C,eAAe14qB,KAAK,QAAjF,SACE,eAAC,KAAD,CAAYorH,SAAS,gBANN,eAAiBk0gB,EAAWo5C,mBAavD,eAACj7jB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,kCAEHyopB,GACA,uCAC8B,aAA1BA,EAAe/ukB,QAAyB+ukB,EAAeC,cACvD,uCACE,eAACnnjB,GAAA,EAAD,CAAMF,KAAI,OAAEonjB,QAAF,IAAEA,OAAF,EAAEA,EAAgBv1R,SAAUjyX,OAAO,SAA7C,gBAAuDwnpB,QAAvD,IAAuDA,OAAvD,EAAuDA,EAAgB7hX,WACvE,eAACj4L,GAAA,EAAD,CAAY7V,QAAS,kBAAMs4jB,EAAkB3I,EAAeC,aAAcD,EAAeoE,UAAzF,SACE,eAAC,KAAD,SAIsB,YAA1BpE,EAAe/ukB,QACf,qCACE,gBAACmvN,GAAA,EAAD,CAAKx5O,QAAQ,OAAOK,cAAc,MAAMxC,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,GAAhF,UACE,eAACslN,EAAA,EAAD,CAAkB7lU,KAAM,KACxB,gBAACy9G,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAC4M,WAAY,GAAhD,cAAsDn8F,EAAE,sCAAxD,cAIsB,UAA1ByopB,EAAe/ukB,QACf,eAACkf,EAAA,EAAD,CACErJ,MAAO,CAAEgB,UAAW,GACpB5C,QAAQ,YACRzT,MAAM,UACN4e,QAAS,kBA9LO,WAC1B,IAAM+1jB,EAAkB,CACtBpC,IAAKjE,EAAsBtzoB,GAC3BwzoB,aAAc,KACdhvkB,OAAQ,WAEVk1kB,EAA0BC,IAC1B,OAAIpG,QAAJ,IAAIA,OAAJ,EAAIA,EAAgBkE,cAClBxB,EAAU,OAAC1C,QAAD,IAACA,OAAD,EAACA,EAAgBkE,aAsLJ2E,IAJjB,SAMGtxpB,EAAE,4CASFsf,kBAAKmxoB,I,qBC5VdhtjB,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,MAGnCoimB,GAAwB,SAAC,GAAS,gBAEtC,MAAY9tjB,KAAZ,gBACA,IAAQzjG,EAAM+xB,YAAe,gBAArB/xB,EAGFmoM,EADQond,IAAmC,SAACpyqB,GAAD,OAAaA,EAAQ8lL,SAC9CjrL,IAAI,aACtBozqB,EAAwBmE,IAAmC,SAAApyqB,GAAO,OAAIkyqB,GAA4BlyqB,MAClGkvqB,EAAkBkD,IAAmC,SAAApyqB,GAAO,OAAIiyqB,GAAmCjyqB,EAAS,sBAC1GwxqB,EAAoBjwoB,aAAWusoB,IAA/B0D,gBAEA9hQ,EAAoBnuY,aAAWusoB,IAA/Bp+P,gBAER,EAA4Cl6X,oBAAS,GAArD,mBAAO6+nB,EAAP,KAAuBC,EAAvB,KAEAr3oB,qBAAU,WAERq3oB,IAAkBpF,KACjB,IAEH,IAAMqF,EAAmBvpd,GAAaA,EAAUlrN,KAAI,SAACq+G,EAAyBlrH,GAC5E,IAAMgqH,EAAYkB,EAAStjH,IAAI,aACzBqiH,EAAWiB,EAAStjH,IAAI,YACxBmiH,EAAemB,EAAStjH,IAAI,gBAC5ByK,EAAO,CAAC23G,EAAWC,GAAU76G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,KAAK+8G,OACtDy5S,EAAezpa,EAAO,CAACA,EAAM03G,GAAc36G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,OAASykG,EACxE2qN,EAAaxpN,EAAStjH,IAAI,MAEhC,OACE,eAAC80E,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAACm+O,EAAA,EAAD,CACE76M,UAAWqgkB,EACXh2jB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MAAOm3Y,EACPv8a,MAAOm1U,EACP70M,QAASo8iB,IAAoBvnW,EAC7BhsN,QAAS,SAACsiB,GACR,IAAQzrI,EAAUyrI,EAAMn6G,OAAhBtxB,MACJA,GACFk9a,EAAgBl9a,OAXjBS,EAAQ,gBAiBhByM,WAAWhG,UAkBd,OACE,qCACEu0qB,GACA,wCACa,OAATjjd,QAAS,IAATA,OAAA,EAAAA,EAAWn4N,MAAO,GAClB,uCACE,eAACg8T,EAAA,EAAD,CACExwM,QAAS,eAAC6U,EAAA,EAAD,CAAUn2B,MAAM,YACzBnlE,MAAO/U,EAAE,mDACTiwG,QAASuhjB,EACT/hkB,SA1BuB,SAAC2rB,GAClC,IAAQnL,EAAYmL,EAAMn6G,OAAlBgvG,QAGR,GAFAwhjB,EAAkBxhjB,GAEbA,EAGE,CAEL,IAAM0hjB,EAAkBxpd,EAAUtzM,MAAM,CAAC,EAAG,OACxC88pB,GACF9kQ,EAAgB8kQ,QALlBhD,OAsBM,eAAC7hmB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGghC,MAAO,CAAEgB,UAAW,IAAvD,SACGmhkB,OAIe,KAAX,OAATvpd,QAAS,IAATA,OAAA,EAAAA,EAAWn4N,OACX,eAACy9G,EAAA,EAAD,CAAY8B,MAAO,CAAEgB,UAAW,IAAM5C,QAAQ,YAA9C,SACG3tF,EAAE,yDASAsf,kBAAKiyoB,I,0CCpGd9tjB,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC63C,SAAU,CACR33C,QAAS,OACTM,eAAgB,gBAChBI,QAAS,YAEX6hmB,eAAgB,CACdrimB,MAAO,OACP0pC,gBAAiB,cACjB6V,OAAQ,OACR/+C,QAAS,GAEX8hmB,sBAAuB,CACrBximB,QAAS,OACTK,cAAe,SACfK,QAAS,EACTR,MAAO,OACPu/C,OAAQ,QAEVmrhB,sBAAuB,CACrBlqkB,QAAS,EACTR,MAAO,OACPu/C,OAAQ,QAEVgjjB,6BAA8B,CAC5B5kmB,WAAY,UAEd6kmB,6BAA8B,CAC5B1imB,QAAS,OACTK,cAAe,SACfK,QAAS,EACTR,MAAO,OACPu/C,OAAQ,QAEVkjjB,eAAgB,CACd93kB,MAAO,eAIL+3kB,GAAwB,WAC5B,MAA+JxujB,KAAvJuD,EAAR,EAAQA,SAAU4qjB,EAAlB,EAAkBA,eAAgBC,EAAlC,EAAkCA,sBAAuB53B,EAAzD,EAAyDA,sBAAuB83B,EAAhF,EAAgFA,6BAA8BD,EAA9G,EAA8GA,6BAA8BE,EAA5I,EAA4IA,eAEtIxrT,EAAa+oT,GAAmCJ,IAChD3G,EAAwB+G,IAAmC,SAAApyqB,GAAO,OAAImyqB,GAA4BnyqB,MAClGyic,EAAc2vO,IAAmC,SAAApyqB,GAAO,OAAIiyqB,GAAmCjyqB,EAAS,uCAExG2zR,EAAUy+Y,IAAmC,SAAApyqB,GAAO,OAAIiyqB,GAAmCjyqB,EAAS,cACpGy3H,EAAc26iB,IAAmC,SAAApyqB,GAAO,OAAIiyqB,GAAmCjyqB,EAAS,kBAC9G,EAAgCw1C,oBAAS,GAAzC,mBAAOsyE,EAAP,KAAiB62M,EAAjB,KAoBA,OACE,qCACE0sW,GACE,eAACh4jB,EAAA,EAAD,CACEnjC,UAAW25C,EACXzX,MAAO,CACL0J,gBAA6B,UAC7BvpC,cAAe,SACfxC,WAAY,aACZuoD,YAAyB,oBACzB5Z,aAAc,qBAPlB,SAUE,gBAACmJ,EAAA,EAAD,CACE33C,UAAWukmB,EACX3sjB,SAAUA,EACVC,UAAW,EACXoV,gBAAiB,CAACmhhB,cAAc,GAChC3iiB,QAxBgB,WN1EG,IM2EvB0tQ,GACF1qD,GAAY,SAAAvwT,GAAI,OAAKA,MAiBjB,UAOE,gBAAC45G,EAAA,EAAD,CACEh4C,QAAS,CAACv9B,QAASkioB,GACnBzkmB,UAAW4skB,EACX70hB,WNvGiB,IMwGfohQ,GACE,eAAC73P,GAAA,EAAD,UACE,eAAC,KAAD,MANR,UAWE,uBAAKthD,UAAW0kmB,EAAhB,UACE,eAACtkkB,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAhDe,WAC3B,UAAI66jB,QAAJ,IAAIA,OAAJ,EAAIA,EAAuBtzoB,GACzB,MAAO,cAAQszoB,QAAR,IAAQA,OAAR,EAAQA,EAAuBtzoB,IA+CzBg9oB,KAEH,eAACzkkB,EAAA,EAAD,CAAYE,QAAQ,YAApB,SA9CM,WAAO,IAAD,EACwB,EAAhD,UAAI66jB,QAAJ,IAAIA,GAAJ,UAAIA,EAAuBtiR,qBAA3B,aAAI,EAAsC4qR,KACxC,OAAOxI,GAAqBmB,gBAArB,OAAqCjB,QAArC,IAAqCA,GAArC,UAAqCA,EAAuBtiR,qBAA5D,aAAqC,EAAsC4qR,MA6CrEqB,QNpHY,IMuHhB3rT,GAAkCo5E,EAAY9pc,OAAS,GACtD,eAAC,KAAD,CAAgBu3E,UAAW2kmB,OAI/B,gBAAC1tjB,EAAA,EAAD,CAAuBj3C,UAAWwkmB,EAAlC,UACE,eAACpkkB,EAAA,EAAD,CAAYE,QAAQ,KAAKk4C,cAAc,EAAMrtC,QAAQ,EAArD,SACGs4K,IAEH,eAACrjL,EAAA,EAAD,CAAYE,QAAQ,QAAQk4C,cAAc,EAAMrtC,QAAQ,EAAMnpC,QAAQ,QAAtE,SACGulD,eAUFt1F,kBAAK2yoB,ICvIdG,GAAoB,SAAC,GAAS,gBAElC,IAAMhH,EAAwBmE,IAAmC,SAAApyqB,GAAO,OAAIkyqB,GAA4BlyqB,MAExG,OACE,qCACIiuqB,GACA,eAACj7iB,EAAA,EAAD,CACE5gB,MAAO,CAAE+O,SAAU,OAAQmX,YAAa,oBAAqBjQ,OAAQ,OAAQj2C,MAAO,QACpFr6C,GAAG,eAFL,SAIE,eAAC,GAAD,SAOKoK,kBAAK8yoB,I,UCXd3ujB,GAAYJ,cAAW,SAACl0C,GAAD,MAAY,CACvC1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,QAEV2oP,OAAQ,CACN5+R,MAAO,OACP2hC,SAAU,SACV+H,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCE,KAAM,CACJtpC,QAASZ,EAAMZ,QAAQ,GACvBiB,OAAQL,EAAMZ,QAAQ,GACtB0qC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1Cz2C,MAAO,OACPi2C,OAAQ,QAEV6sjB,aAAc,CACZhjmB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBJ,MAAO,OACPi2C,OAAQ,sBACRz1C,QAASZ,EAAMZ,QAAQ,GACvBiB,OAAQL,EAAMZ,QAAQ,GACtB0qC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,WAIxCssjB,GAAmB,SAAC,GAAkC,IAAhCrvf,EAA+B,EAA/BA,MAAOkof,EAAwB,EAAxBA,WAAY3ooB,EAAY,EAAZA,MAErC62E,EAASoK,KAATpK,KAER,OACE,gBAAC,GAAD,CAAiC4pE,MAAOA,EAAOkof,WAAYA,EAAY3ooB,MAAOA,EAA9E,UACE,eAAC,GAAD,IACA,gBAACy4E,GAAA,EAAD,CAAM5tC,UAAWgsC,EAAjB,UACE,eAAC,GAAD,IACA,gBAACvsC,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,gBAA3C,UACE,eAAC,GAAD,IACA,eAAC,GAAD,CAAao9lB,WAAYA,cAO7BoH,GAAS,WACb,IAAQvypB,EAAM+xB,YAAe,gBAArB/xB,EAEFwmW,EAAa+oT,GAAmCJ,IAChD5lB,EAAagmB,GAAmCR,IAChDyD,EAAa,CACjB,CACEr0jB,MAAOn+F,EAAE,yCACT40G,YAAa50G,EAAE,qDAEjB,CACEm+F,MAAOn+F,EAAE,uCACT40G,YAAa50G,EAAE,oDAGnB,OAAQupoB,GACN,uCACE,eAAC97iB,EAAA,EAAD,CAAYE,QAAQ,KAAKk4C,cAAc,EAAvC,SACG2shB,EAAWhsT,GAAYroQ,QAE1B,eAAC1Q,EAAA,EAAD,CAAYE,QAAQ,QAAQk4C,cAAc,EAA1C,SACG2shB,EAAWhsT,GAAY5xP,kBAM1B69iB,GAAW,WAGf,OAFmBlD,GAAmCR,KAGpD,eAACjimB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,GAAD,OAKA87S,GAAc,SAAC,GAAoB,IAAlBwgT,EAAiB,EAAjBA,WACbnrpB,EAAM+xB,YAAe,gBAArB/xB,EACAqypB,EAAiB5ujB,KAAjB4ujB,aACFljmB,EAAQwjD,eACR6zP,EAAa+oT,GAAmCJ,IAGtD,GAFmBI,GAAmCR,IAGpD,OACE,gBAACjimB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWglmB,EAArC,UACE,eAACK,GAAA,EAAD,CACEx4kB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/B/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,KACrCg5E,MAAO,CAAE//B,OAAQL,EAAMZ,QAAQ,MAEjC,gBAACk/B,EAAA,EAAD,CAAYE,QAAQ,KAAKk4C,cAAc,EAAvC,UACG7lI,EAAE,+BADL,OAGA,gBAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQk4C,cAAc,EAA1C,UACG7lI,EAAE,4CADL,UAiBN,OACE,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAXqB,SAACh2E,GACtB,OAAQA,GACN,KR5HuB,EQ6HrB,OAAO,eAAC,GAAD,IACT,KR7HyB,EQ8HvB,OAAO,eAAC,GAAD,CAAwBsyqB,WAAYA,IAC7C,QACE,MAAO,WAKRhoP,CAAe38D,MAKPlnV,kBAAKgzoB,ICxIPK,GAAyB,SAACxnd,GACrC,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAU3rN,QAAO,SAACm4P,GAAD,OAAaA,EAAQ3/P,IAAI,SAAY2/P,EAAQ3/P,IAAI,YAAYhI,MAAQ2nQ,EAAQ3/P,IAAI,YAAY0J,MAAK,SAACupH,GAAD,OAAaA,EAAQjzH,IAAI,MAAQ,SAGhJ46qB,GAAyB,SAACt3jB,GACrC,IAAKA,EACH,MAAO,GAET,IAAMlB,EAAYkB,EAAStjH,IAAI,aACzBqiH,EAAWiB,EAAStjH,IAAI,YACxBmiH,EAAemB,EAAStjH,IAAI,gBAC5ByK,EAAO,CAAC23G,EAAWC,GAAU76G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,KAAK+8G,OAG5D,OAFoBhwH,EAAO,CAACA,EAAM03G,GAAc36G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,OAASykG,IAEvDr3G,OAAOw4G,EAAStjH,IAAI,QCgE/Bw1M,GAAY,eA4DZqle,GACE,CACX,aAAc,WAAY,cAAe,UAAW,aACpD,gBAAiB,iBAAkB,eAAgB,iBACnD,kBAAmB,qBAJVA,GAMA,CAAC,iBANDA,GAOF,CAAC,UAAW,sBAPVA,GAQD,CAAC,YAAa,YARbA,GAWK,CAAC,mBAXNA,GAiBD,CAAC,oBAAqB,6BAjBrBA,GAkBE,CACX,sBAAuB,eAAgB,mBAAoB,aAAc,YAnBhEA,GAsBF,CAAC,aAAc,aAAc,YAAa,kBAtBxCA,GAuBH,CAAC,eAAgB,eAAgB,WAAY,sBAIjDC,G,kDAuBJ,WAAY30oB,GAAQ,IAAD,8BACjB,cAAMA,IAtBDlD,MAAQ,CACb83oB,oBAAoB,EACpBC,wBAAwB,EACxBC,gBAAiB,GACjB7wqB,MAAO,KACP8wqB,UAAW,KACXC,8BAA+B91pB,iBAAO,IACtC+1pB,0BAA0B,EAC1BC,yBAAyB,EACzBC,4BAA6BpnqB,iBAC7Bs8M,OAAQ,GACR+qd,4BAA6B,EAC7BC,2BAA4B,EAC5BC,2BAA4B,EAC5BC,mBAAmB,EACnBC,cAAe9sqB,iBAME,EAFZ+sqB,qBAAsB,EAEV,EAIZC,0BAA4B,WACjC,IAWyC,EAXzC,EAKI,EAAK11oB,MAJPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAuxE,EAHF,EAGEA,MACA7zE,EAJF,EAIEA,WAEI+7G,EAAWloC,EAAMjrL,IAAI,YAErBgykB,EAAgB/mZ,EAAMjrL,IAAI,aAC1B87qB,EAAsB7wf,EAAMjrL,IAAI,oBAElCgykB,GAAiBA,EAAch6kB,OAC7BsB,QAAQ04kB,EAAch6kB,OAASo/G,GAAc99G,QAAO,UAAC89G,EAAWp3G,IAAI,oBAAhB,aAAC,EAA6BhI,OACpF,EAAK6mH,SAAS,CAAE68jB,mBAAmB,IAErC90oB,EAAS,IAAI86kB,KAAuB,CAAEltmB,KAAMw9jB,MAG9C,IAAI+pG,EAAc,EACd5od,EAASn7N,MAAQg6kB,EAAch6kB,MAAQ,EACzC4uC,EAAS,IAAI0xL,MAA4B,CACvCrtC,QACA9uL,KAAM,WACN6/qB,UAAU,EACVC,iBAAkB,SAACC,EAAehqd,GAChC,IAAMypd,EAAgB1wf,EAAMh+K,eAAc,SAACywQ,GACzCA,EAAI/5Q,IAAI,cAAeuuN,GACvBwrD,EAAI/5Q,IAAI,WAAR,OAAoBu4qB,QAApB,IAAoBA,OAApB,EAAoBA,EAAej3qB,KAAI,SAAC06P,GACtC,OAAOA,EAAQh8P,IAAI,oBAAoB,UAGrCwsN,EAAYwrd,EAAc37qB,IAAI,aAQpC4mC,EAASu/B,aACPuzC,EACA,uBACA7qG,gBACGlL,IAAI,WAAYg4qB,EAAc37qB,IAAI,aAClC2D,IAAI,cAAeg4qB,EAAc37qB,IAAI,kBAG1CmwN,EAAUxnN,SAAQ,SAAA26G,GAChB,IAAM64jB,EAA0BL,IAAwBx4jB,EAAStjH,IAAI,MACrE4mC,EAAS,IAAI0xL,MAA4B,CACvCrtC,QACA6hJ,WAAYxpN,EAAStjH,IAAI,MACzB7D,KAAMggrB,EAA0B,KAAO,WACvCH,UAAU,EACVI,WAAYD,EACZF,iBAAkB,SAACI,EAAiBC,EAAcC,GAChD,IAAMC,EAA0B,EAAKr2oB,MAAMixE,WAAWp3G,IAAI,2BACpDy8qB,EAAqBn5jB,EAAStjH,IAAI,MAClC08qB,EAAmBL,EAAgBp3qB,KAAI,SAAA06P,GAAY,IAAD,EAChDg9a,EAAuBR,GACzB,UAAAx8a,EAAQ3/P,IAAI,mBAAZ,eAAyBwH,QAAO,SAACyrH,GAAD,OAAcA,EAAQjzH,IAAI,qCAAoC2/P,EAAQ3/P,IAAI,YAC1G48qB,aAAsB,CAAEL,iBAAgB58a,UAAS88a,uBACjC98a,EAAQ3/P,IAAI,QAEhC,OAAO2/P,EAAQ1yP,eAAc,SAACywQ,GAC5BA,EAAI/5Q,IAAI,WAAYg5qB,GACpBj/Z,EAAI/5Q,IAAI,oBAAoB,SAI5B64qB,GACF51oB,EAASu/B,aACPuzC,EACA,0BACA8ikB,EAAwB74qB,IACtB84qB,EACA5tqB,gBACGlL,IAAI,WAAY+4qB,GAChB/4qB,IAAI,mBAAoB84qB,GACxB94qB,IAAI,cAAe24qB,OAK5BP,GAAe,KACK5rd,EAAUn4N,MAC5B,EAAK6mH,SAAS,CAAEm8jB,wBAAwB,eAQpD,EAAKn8jB,SAAS,CAAEm8jB,wBAAwB,IAqB1C,EAAKn8jB,SAAS,CAEZy8jB,4BAA6BpnqB,eAAKxW,MAAMy1N,EAAS9hN,SAASyzH,MAAK,IAC/Dy2iB,4BAA6Btwf,GAASA,EAAMjrL,IAAI,oBAAsBirL,EAAMjrL,IAAI,oBAAsB,EACtGw7qB,2BAA4Bvwf,GAASA,EAAMjrL,IAAI,oBAAsBirL,EAAMjrL,IAAI,oBAAsB,EACrGy7qB,2BAA4Bxwf,GAASA,EAAMjrL,IAAI,oBAAsBirL,EAAMjrL,IAAI,oBAAsB,KA7HtF,EAmIZ68qB,sBAAwB,WAC7B,MAKI,EAAK12oB,MAJPS,EADF,EACEA,SACAqkJ,EAFF,EAEEA,MACA/mF,EAHF,EAGEA,OACAwV,EAJF,EAIEA,MAGF,OAAIuxE,QAAJ,IAAIA,OAAJ,EAAIA,EAAOjrL,IAAI,QACZkkG,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,gBACV5zD,OAAQ,CACN4kU,SAAU,OACVC,WAAY,gBAELjhS,MAAK,SAAAurE,GAAQ,IAAD,QACf++hB,EAAgBz3pB,iBAAM,OAAC04H,QAAD,IAACA,GAAD,UAACA,EAAK56G,eAAN,iBAAC,EAAci2kB,eAAf,iBAAC,EAAuB3lQ,kBAAxB,iBAAC,EAAmCspU,kBAApC,aAAC,EAA+CD,eACxEjuqB,MAAI9N,MAAM+7qB,IACZl2oB,EAASu/B,aAAOuzC,EAAM,gBAAiBojkB,OAExCl6e,OAAM,SAACv1J,GAERppB,QAAQC,KAAK,2CAA4CmpB,OA1J5C,EA+JZ2voB,uBAAyB,WAC9B,MAKI,EAAK72oB,MAJPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAuxE,EAHF,EAGEA,MACA7zE,EAJF,EAIEA,WAGI0lkB,EAAgB1lkB,EAAWp3G,IAAI,iBACrC,GAAK6O,MAAI9N,MAAM+7qB,GAcf,GADkC,EAAK32oB,MAAc82oB,yBACrD,CACE,IAAMC,EAAiB,SAACpqb,GAClBgqb,EAAc58qB,IAAI4yP,SAAuC/6P,IAA7B+krB,EAAc98qB,IAAI8yP,IAChDlsN,EAASu/B,aAAOuzC,EAAMo5I,EAAOgqb,EAAc98qB,IAAI8yP,MAGnDlyN,iBAAM,WAAO,IAAD,UACVs8oB,EAAe,eACf,UAAIjyf,EAAMjrL,IAAI,wBAAd,aAAI,EAA4BhI,OAAQklrB,EAAe,YACvDA,EAAe,eACfA,EAAe,WACfA,EAAe,eACf,UAAIjyf,EAAMjrL,IAAI,wBAAd,aAAI,EAA4BhI,OAAQklrB,EAAe,kBACvD,UAAIjyf,EAAMjrL,IAAI,uBAAd,aAAI,EAA2BhI,OAAQklrB,EAAe,iBACtD,UAAIjyf,EAAMjrL,IAAI,yBAAd,aAAI,EAA6BhI,OAAQklrB,EAAe,kBACd,KAAtC,UAAA9lkB,EAAWp3G,IAAI,oBAAf,eAA6BhI,OAAcklrB,EAAe,kBAC9DA,EAAe,mBACfA,EAAe,iBACfA,EAAe,WACfA,EAAe,sBACfA,EAAe,gBACfA,EAAe,gBACfA,EAAe,YACfA,EAAe,8BAMnBt8oB,iBAAM,WAAO,IAAD,UACVgG,EAASu/B,aAAOuzC,EAAM,aAAcojkB,EAAc98qB,IAAI,iBAClD,UAAAirL,EAAMjrL,IAAI,wBAAV,eAA4BhI,OAAQ8krB,EAAc58qB,IAAI,aACxD0mC,EAASu/B,aAAOuzC,EAAM,WAAYojkB,EAAc98qB,IAAI,cAEtD4mC,EAASu/B,aAAOuzC,EAAM,cAAeojkB,EAAc98qB,IAAI,iBACvD4mC,EAASu/B,aAAOuzC,EAAM,UAAWojkB,EAAc98qB,IAAI,aACnD4mC,EAASu/B,aAAOuzC,EAAM,aAAcojkB,EAAc98qB,IAAI,iBAClD,UAAAirL,EAAMjrL,IAAI,wBAAV,eAA4BhI,OAAQ8krB,EAAc58qB,IAAI,kBACxD0mC,EAASu/B,aAAOuzC,EAAM,gBAAiBojkB,EAAc98qB,IAAI,oBAEvD,UAAAirL,EAAMjrL,IAAI,uBAAV,eAA2BhI,OAAQ8krB,EAAc58qB,IAAI,iBACvD0mC,EAASu/B,aAAOuzC,EAAM,eAAgBojkB,EAAc98qB,IAAI,mBAEtD,UAAAirL,EAAMjrL,IAAI,yBAAV,eAA6BhI,OAAQ8krB,EAAc58qB,IAAI,mBACzD0mC,EAASu/B,aAAOuzC,EAAM,iBAAkBojkB,EAAc98qB,IAAI,oBAElB,KAAtC,UAAAo3G,EAAWp3G,IAAI,oBAAf,eAA6BhI,OAAc8krB,EAAc58qB,IAAI,mBAC/D0mC,EAASu/B,aAAOuzC,EAAM,iBAAkBojkB,EAAc98qB,IAAI,oBAE5D4mC,EAASu/B,aAAOuzC,EAAM,kBAAmBojkB,EAAc98qB,IAAI,qBAC3D4mC,EAASu/B,aAAOuzC,EAAM,gBAAiBojkB,EAAc98qB,IAAI,mBACzD4mC,EAASu/B,aAAOuzC,EAAM,UAAWojkB,EAAc98qB,IAAI,aACnD4mC,EAASu/B,aAAOuzC,EAAM,qBAAsBojkB,EAAc98qB,IAAI,wBAA0B,MACxF4mC,EAASu/B,aAAOuzC,EAAM,eAAgBojkB,EAAc98qB,IAAI,kBACxD4mC,EAASu/B,aAAOuzC,EAAM,eAAgBojkB,EAAc98qB,IAAI,kBACxD4mC,EAASu/B,aAAOuzC,EAAM,WAAYojkB,EAAc98qB,IAAI,cACpD4mC,EAASu/B,aAAOuzC,EAAM,qBAAsBojkB,EAAc98qB,IAAI,4BA9O/C,EAofZm9qB,6BAA+B,SAAC/lkB,GACrC,MAGI,EAAKjxE,MAFP8kJ,EADF,EACEA,MACAmyf,EAFF,EAEEA,mCAGIC,GAAqB,OAALpyf,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,eAAgBkU,iBAC3CopqB,EAAclmkB,GAAcA,EAAWp3G,IAAI,aAE3Cu9qB,EAAiBnmkB,GAAcA,EAAWp3G,IAAI,YAChDw9qB,EAAmCn4pB,iBAAO,IAE9Ck4pB,IAAiBrpqB,OAAKF,OAAOupqB,GAAkBA,EAAe50qB,SAAQ,SAACg3P,EAASvnQ,GAG9E,GAFeunQ,EAAQ3/P,IAAI,SAAU6O,iBAE1B7W,KAtkBc,EAskBiB,CAAC,IAAD,EAClCmiX,EAAS,UAAGx6G,EAAQ3/P,IAAI,oBAAf,QAA+B8K,OAAO1S,GAGnDolrB,GAFFA,EAAmCA,EAAiC75qB,IAAI,iBAAiB,IACpDzD,IAAI,WACJs9qB,EAAiCjxqB,OAAO,WAAW,SAAC5U,GAAD,OAAWA,EAAMgM,IAAIw2W,GAAW,MAEnFqjU,EAAiC75qB,IAAI,UAAW0hB,iBAAO,eAAG80V,GAAY,SAT9F,OAafojU,QAbe,IAafA,KAAgB50qB,SAAQ,SAAC80qB,EAAiBC,GAExC,IAAM5wW,EAAalvU,OAAO8/qB,EAAmB7omB,QAAQ,QAAS,KAC9D,GAAI,OAACyomB,QAAD,IAACA,OAAD,EAACA,EAAa93qB,SAASsnU,GAA3B,CAIA,IAAI6wW,GAA2B,EAiB/B,GAhBAF,EAAgB90qB,SAAQ,SAACg3P,EAAS0lJ,GAGhC,GAFe1lJ,EAAQ3/P,IAAI,SAAU6O,iBAE1B7W,KA3lBU,EA2lBqB,CAAC,IAAD,EACxCwlrB,EAAmCA,EAAiC75qB,IAAI,iBAAiB,GACzFg6qB,GAA2B,EAE3B,IAAMxjU,EAAS,UAAGx6G,EAAQ3/P,IAAI,oBAAf,QAA+B8K,OAAOu6Y,GAEnDm4R,EADEA,EAAiCt9qB,IAAIw9qB,GACJF,EAAiCjxqB,OAAOmxqB,GAAoB,SAAC/lrB,GAAD,OAAWA,EAAMgM,IAAIw2W,GAAW,MAE5FqjU,EAAiC75qB,IAAI+5qB,EAAoBr4pB,iBAAO,eAAG80V,GAAY,SAKpHwjU,EAA0B,CAC5B,IAAMzpQ,EAAe0mQ,GAAuByC,EAAcz/pB,MAAK,SAAA9b,GAAC,OAAIA,EAAE9B,IAAI,QAAU8sU,MAElF0wW,EADEA,EAAiCt9qB,IAAI,8BACJs9qB,EAAiCjxqB,OAAO,8BAA8B,SAAC5U,GAAD,OAAWA,EAAM0Q,KAAK6ra,MAE5FspQ,EAAiC75qB,IAAI,6BAA8B0hB,iBAAO,CAAC6uZ,WAMtH,EAAKr1T,SAAS,CACZs8jB,8BAA+BqC,IAGjCA,EAAiCx9qB,IAAI,iBACjCo9qB,GAAmC,GACnCA,GAAmC,IAtjBtB,EA0jBZQ,gBAAkB,SAACxmkB,EAAiBioJ,EAAsBvM,GAC/D,IAAM3/B,EAAQ,OAAG/7G,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,YACjC,GAAKmzN,EACL,OAAIj/M,OAAKF,OAAOm/M,GACPA,EAASt2M,MAAM,CAACwiP,EAAcvM,IAEnC3/B,EAASjzN,IAAI,WACRizN,EAASt2M,MAAM,CAAC,UAAWwiP,EAAcvM,IAE3C3/B,EAASt2M,MAAM,CAACwiP,EAAcvM,KAnkBpB,EAukBZ+qb,mBAAqB,SAACzmkB,EAAiBioJ,GAC5C,IAAMlsC,EAAQ,OAAG/7G,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,YACjC,OAAI6O,MAAI9N,MAAMoyN,IAAaA,EAASjzN,IAAI,WAChC,oBAAN,OAA2Bm/P,EAA3B,KAEI,YAAN,OAAmBA,EAAnB,MA5kBiB,EAglBZy+a,uBAAyB,SAAC/qd,GAA2B,IAAD,EACjD37G,EAAe,EAAKjxE,MAApBixE,WAER,OADiB,EAAKjxE,MAAcqsJ,UAE7BugC,IAAgB,OAAI37G,QAAJ,IAAIA,OAAJ,EAAIA,EAAYp3G,IAAI,eAAyB,OAAVo3G,QAAU,IAAVA,GAAA,UAAAA,EAAYp3G,IAAI,oBAAhB,eAA8BhI,OAAQ,IAplB/E,EAwlBZ+lrB,mBAAqB,SAAChrd,EAAuBssC,EAAsBvM,GACxE,OAAI,EAAKgrb,uBAAuB/qd,GACxB,iBAAN,OAAwBA,EAAxB,YAA4CssC,EAA5C,YAA4DvM,EAAQ,IAAMA,EAAQ,IAE9E,GAAN,OAAU,EAAK+qb,mBAAmB,EAAK13oB,MAAMixE,WAAYioJ,IAAzD,OAAyEvM,EAAQ,IAAMA,EAAQ,KA5lB9E,EAgmBZkrb,oBAAsB,SAACjrd,EAAuBssC,EAAsBvM,GACzE,IAAQ17I,EAAe,EAAKjxE,MAApBixE,WACR,OAAI,EAAK0mkB,uBAAuB/qd,GACvB37G,EAAWv6F,MAAM,CAAC,WAAD,eAAqBk2M,GAAoBssC,EAAcvM,IAE1E,EAAK8qb,gBAAgBxmkB,EAAYioJ,EAAcvM,IArmBrC,EAwmBZmrb,mBAAqB,SAACC,EAAmBC,EAAuBC,GACrE,MAA8C,EAAKj4oB,MAA3CqsJ,EAAR,EAAQA,QAAS6rf,EAAjB,EAAiBA,aAAcr2pB,EAA/B,EAA+BA,EAAGmtD,EAAlC,EAAkCA,QAClC,OAAIq9G,GAAW6rf,IAAiBD,EAE5B,uBAAK7mkB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,gBAAiBzC,WAAY,SAAUqC,MAAO,QAA7F,UACE,eAACk+B,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQgxC,MAAO5O,MAAO,CAAE0mB,KAAM,GAAlE,SAAwEigjB,IACxE,eAACh4jB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iCAAlB,SACE,eAAC44F,EAAA,EAAD,CAAQjL,QAAQ,OAAOtgC,UAAWF,EAAQmpmB,iBAAkBx9jB,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBk+jB,EAAaF,IAAhH,SACGn2pB,EAAE,iCAMN,eAACytF,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQgxC,MAA5C,SAAoD+3jB,KAtnB1C,EAynBZK,YAAc,WAAO,IAAD,IACzB,EAKI,EAAKp4oB,MAJPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACAjjK,EAHF,EAGEA,EACAovF,EAJF,EAIEA,WAGF,OAAK6zE,EAKH,gBAACj+D,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,+BAA1B,YAA8D6ypB,KAC/D,eAACvujB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,eAACX,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,aACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,8BACTk6E,MAAO,eAkBX+oF,EAAMjrL,IAAI,kBAAoBirL,EAAMjrL,IAAI,iBAAiBhI,KACrD,eAAC88E,EAAA,EAAD,CACAe,MAAM,EADN,SAGA,eAAC,QAAD,CACEprE,KAAK,WACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,4BACTk6E,MAAO,eAIX,KAEN,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,cACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,UACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,2BACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,aACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,kCACTk6E,MAAO,eAKX+oF,EAAMjrL,IAAI,kBAAoBirL,EAAMjrL,IAAI,iBAAiBhI,KACrD,eAAC88E,EAAA,EAAD,CACAe,MAAM,EADN,SAGA,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,6BACTk6E,MAAO,eAIX,KAGJ+oF,EAAMjrL,IAAI,mBAAqBirL,EAAMjrL,IAAI,kBAAkBhI,KACvD,eAAC88E,EAAA,EAAD,CACAe,MAAM,EADN,SAGA,eAAC,QAAD,CACEprE,KAAK,iBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,8BACTk6E,MAAO,eAIX,KAGJ+oF,EAAMjrL,IAAI,iBAAmBirL,EAAMjrL,IAAI,gBAAgBhI,KACnD,eAAC88E,EAAA,EAAD,CACAe,MAAM,EADN,SAGA,eAAC,QAAD,CACEprE,KAAK,eACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,4BACTk6E,MAAO,eAIX,KAGJ+oF,EAAMjrL,IAAI,eAAV,UAA0BirL,EAAMjrL,IAAI,oBAApC,aAA0B,EAAwBhI,MAC9C,eAAC88E,EAAA,EAAD,CACAe,MAAM,EADN,SAGA,eAAC,QAAD,CACEprE,KAAK,iBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uBACTk6E,MAAO,UACPiX,SAAU7/G,QAAQ89G,IAAsD,KAAvC,UAAAA,EAAWp3G,IAAI,oBAAf,eAA6BhI,YAIlE,KAEN,eAAC88E,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,kBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,kCACTk6E,MAAO,uBAvKZ,MAloBQ,EAmzBZw8kB,kBAAoB,WACzB,MAGI,EAAKv4oB,MAFPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAGF,OACE,gBAACglG,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,6BAA1B,YAA4D6ypB,KAC7D,eAACvujB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,eAACX,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,wBACTk6E,MAAO,UACPu6J,aAAc,YAIpB,eAAC3nL,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,gBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,0BACTk6E,MAAO,UACPu6J,aAAc,uBA71BX,EAu2BZkib,YAAc,WACnB,MAMI,EAAKx4oB,MALPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAEAovF,GAJF,EAGEsC,KAHF,EAIEtC,YAIIwnkB,GARN,EAKEh4oB,SAGmE,YAArB,OAAVwwE,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,aAYtD,OACE,gBAACgtH,EAAA,EAAD,CAAgB33C,UAAWF,EAAQqpmB,MAAOryjB,iBAAiB,EAA3D,UACG,EAAK8xjB,mBAAmBj2pB,EAAE,2BAA1B,YAA0D6ypB,KAC3D,eAACvujB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAZ,UACE,eAAC,QAAD,CACEprE,KAAK,UACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,mBACTk6E,MAAO,UACPu6J,aAAc,UAGlB,eAAC,QAAD,CACEhyP,KAAK,UACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,2BACTk6E,MAAO,UACPu6J,aAAc,aAGlB,eAAC,QAAD,CACEhyP,KAAK,UACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,UACPu6J,aAAc,eAKlBmib,GACA,eAAC9pmB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAM,qBACN07B,MAAO,CACLyvE,WAAY,CACVz5G,KAAM,SAGVo5E,UAAWwgC,kBA56BR,EAs7BZ8okB,iBAAmB,WAAO,IAAD,QAC9B,EAOI,EAAK14oB,MANPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACAvxE,EAHF,EAGEA,KACAtC,EAJF,EAIEA,WACApvF,EALF,EAKEA,EACA4e,EANF,EAMEA,SAGIupL,EAAiCllC,GAASA,EAAMjrL,IAAI,aACpD8+qB,EAAiB3ud,GAAaA,EAAUlrN,KAAI,SAAAq+G,GAAQ,OAAIA,EAAStjH,IAAI,SAErE05qB,EAAmBvpd,GAAaA,EAAUlrN,KAAI,SAACq+G,EAAyBlrH,GAC5E,IAAM87a,EAAe0mQ,GAAuBt3jB,GACtCwpN,EAAaxpN,EAAStjH,IAAI,MAEhC,OACE,eAAC80E,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAAC,QAAD,CACEprE,KAAK,YACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAOm3Y,EACPhyU,MAAO,UACPu6J,aAAcqwE,MARb10U,EAAQ,gBAahBkd,QACD,eAACw/D,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAAC,QAAD,CACEprE,KAAK,YACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,wBACTk6E,MAAO,UACPuV,SAAU,WAAO,IAAD,GACV,UAAAL,EAAWp3G,IAAI,oBAAf,eAA6BhI,QAAS8mrB,EAAe9mrB,KACvD4uC,EAASu/B,aAAOuzC,EAAM,YAAar0F,iBAAO,MAE1CuhB,EAASu/B,aAAOuzC,EAAM,YAAaolkB,KAGvC7mjB,QAAS3+H,QAAO,UAAC2xL,EAAMjrL,IAAI,oBAAX,aAAC,EAAwBhI,OAASsB,QAAQ89G,KAAe,UAAAA,EAAWp3G,IAAI,oBAAf,eAA6BhI,QAAS8mrB,EAAe9mrB,KAC9HmhH,UAAW7/G,QAAO,UAAC2xL,EAAMjrL,IAAI,oBAAX,aAAC,EAAwBhI,UAhB1C,cAqBN6M,WAAWhG,UAEd,OACE,gBAACmuH,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,kCAA1B,YAAiE6ypB,KAClE,gBAAC/lmB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQ4pmB,aAAjD,SAAgE/2pB,EAAE,sCAClE,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQ4pmB,aAAjD,SAAgE/2pB,EAAE,yCAEpE,eAACskG,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQ0kmB,uBAFlB,SAKE,gBAAC/kmB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACE,eAACq+O,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAAS3+H,QAAQ89G,GAAcA,EAAWp3G,IAAI,aAC9Cy3G,SAAU,SAACpzG,GAAD,OAAOuiC,EAASu/B,aAAOuzC,EAAM,WAAYr1G,EAAEs8G,cAAcsX,WACnE9e,UAAW,EAAKhzE,MAAcqsJ,UAAmBl5L,QAAQ89G,IAAU,UAAIA,EAAWp3G,IAAI,oBAAnB,aAAI,EAA6BhI,SAGxG+kC,MAAO/U,EAAE,uCAER,EAAKme,MAAcqsJ,SACpB,eAAC19G,EAAA,EAAD,CACEW,WAAW,EADb,SAGGikmB,aAhhCI,EA0hCZsF,oBAAsB,SAAC3/a,EAAcvrI,EAAUmE,GACpD,MAII,EAAK9xF,MAHPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAKA6hkB,GAPF,EAGEnkkB,WAKE,EAAKn0E,MADPs4oB,6BAGI0D,EAAQ,UAAM,EAAKlB,mBAAmBxC,EAA6Bl8a,EAAc,aAGjFinL,EAAaxyT,EAAS7uH,KAAI,SAACguH,EAAwB76H,GACvD,OAAO66H,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAAe,IAAMjnQ,EAA1D,mBAGJ6/H,GAIHrxF,EAASu/B,aAAOuzC,EAAMulkB,EAAU34P,IAChC1/Y,EAASu/B,aAAOuzC,EAAMulkB,EAASpqmB,QAAQ,YAAa,qBAAqB,MAJzEjuC,EAASu/B,aAAOuzC,EAAMulkB,EAAU55pB,iBAAO,MACvCuhB,EAASu/B,aAAOuzC,EAAMulkB,EAASpqmB,QAAQ,YAAa,qBAAqB,MA9iC1D,EAqjCZqqmB,6BAA+B,SAAC7/a,EAAcvrI,EAAUi/F,GAC7D,IACE37G,EACE,EAAKjxE,MADPixE,WAGIkvU,EAAaxyT,EAAS7uH,KAAI,SAACguH,GAC/B,OAAOA,EAAQjzH,IAAI,MAAQ,KAG7B,IAAKsmb,EAAWtub,KAAM,CACpB,IAAMmnrB,IAAmB/nkB,GACrB,EAAK4mkB,oBAAoBjrd,EAAkBssC,EAAc,oBAE7D,cAAO8/a,QAAP,IAAOA,KAGT,IAAMC,EAAoBhokB,EACtB,EAAK4mkB,oBAAoBjrd,EAAkBssC,EAAc,YACzDnrP,iBAEJ,QAAIkrqB,GACEA,EAAkBpnrB,OAASsub,EAAWtub,MA1kC3B,EAklCZqnrB,0BAA4B,SAACvsb,EAA6Cwsb,GAC/E,MAKI,EAAKn5oB,MAJP8kJ,EADF,EACEA,MACArkJ,EAFF,EAEEA,SACA8yE,EAHF,EAGEA,KACAtC,EAJF,EAIEA,WAIAokkB,EACE,EAAKv4oB,MADPu4oB,2BAGIhpf,EAAW,EAAKrsJ,MAAcqsJ,QAC9B+sf,EAAoB,EAAKp5oB,MAAco5oB,iBACvC/ud,EAASp5G,GAAcA,EAAWp3G,IAAI,2BAItCw/qB,GAA4B,OAAVpokB,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,eAAhB,OAA+BwwN,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAQxwN,IAAIu/qB,IAC7DE,EAAgBjtf,EACjBgtf,GAAmBv0f,EACnB7zE,GAAcA,EAAWp3G,IAAI,aAAew7qB,GAA8Bhrd,GAAUA,EAAOxwN,IAAIw7qB,GAA+Bhrd,EAAOxwN,IAAIw7qB,GAA+BpkkB,GAAcA,EAAWp3G,IAAI,yBAA2BirL,EAE/NkoC,EAAWwnd,GAAsB,OAAC8E,QAAD,IAACA,OAAD,EAACA,EAAez/qB,IAAI,aACrDq6W,EAAUvnH,EAAM9yP,IAAI,MAG1B,GAAK,EAAK0/qB,0BAA0B5sb,EAAOwsb,GAwBpC,CAEL,IAAMK,EAAiB,EAAKC,kCAAkCzsd,EAAUmsd,GAChE,OAARnsd,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAC1B,GAAIsgb,EAAen6qB,SAAS65P,GAAe,CACzC,IAAM09G,EAAap9G,EAAQ9iP,MAAM,CAAC,kBAAmB,eAC/CgjqB,GAAsBzokB,EAAa,EAAK4mkB,oBAAoBxC,EAA4Bn8a,EAAc,UAAY,OAASnrP,iBAE3H4rqB,EAAmB,EAAK/B,mBAAmBvC,EAA4Bn8a,GAE7E09G,GAAcA,EAAWp0W,SAAQ,SAAC+8iB,GAEhC,GADiBA,EAAO1ljB,IAAI,QACXq6W,GACXwlU,EAAmBr6qB,SAAS60W,GAAU,CACxC,IAAM11V,EAAYk7pB,EAAmBr4qB,QAAO,SAAA7P,GAAK,OAAIA,IAAU0iX,KAC/DzzU,EAASu/B,aAAOuzC,EAAD,UAAUomkB,EAAV,WAAqCn7pB,gBAvCD,CAC7D,IAAMg7pB,EAAiB,EAAKC,kCAAkCzsd,EAAUmsd,GAEhE,OAARnsd,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAC1B,GAAIsgb,EAAen6qB,SAAS65P,GAAe,CACzC,IAAM09G,EAAap9G,EAAQ9iP,MAAM,CAAC,kBAAmB,eAE/CgjqB,GAAsBzokB,EACE,EAAK4mkB,oBAAoBxC,EAA4Bn8a,EAAc,UACnE,OAASnrP,iBAEjC6rqB,EAAkB,EAAKhC,mBAAmBvC,EAA4Bn8a,GAE5E09G,GAAcA,EAAWp0W,SAAQ,SAAC+8iB,GAEhC,GADiBA,EAAO1ljB,IAAI,QACXq6W,IACVwlU,EAAmBr6qB,SAAS60W,GAAU,CACzC,IAAM11V,EAAYk7pB,EAAmBx3qB,KAAKgyW,GAC1CzzU,EAASu/B,aAAOuzC,EAAD,UAAUqmkB,EAAV,WAAoCp7pB,cA/nC9C,EA6pCZ+6pB,0BAA4B,SAAC5sb,EAA6Cwsb,GAC/E,MAGI,EAAKn5oB,MAFPixE,EADF,EACEA,WACA6zE,EAFF,EAEEA,MAIAuwf,EACE,EAAKv4oB,MADPu4oB,2BAIIhpf,EAAW,EAAKrsJ,MAAcqsJ,QAC9B+sf,EAAoB,EAAKp5oB,MAAco5oB,iBACvC/ud,EAASp5G,GAAcA,EAAWp3G,IAAI,2BAEtCw/qB,GAA4B,OAAVpokB,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,eAAhB,OAA+BwwN,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAQxwN,IAAIu/qB,IAC7DE,EAAgBjtf,EACjBgtf,GAAmBv0f,EACnB7zE,GAAcA,EAAWp3G,IAAI,aAAew7qB,GAA8Bhrd,GAAUA,EAAOxwN,IAAIw7qB,GAA+Bhrd,EAAOxwN,IAAIw7qB,GAA+BpkkB,GAAcA,EAAWp3G,IAAI,yBAA2BirL,EAE/NovL,EAAUvnH,EAAM9yP,IAAI,MACpBmzN,EAAWwnd,GAAsB,OAAC8E,QAAD,IAACA,OAAD,EAACA,EAAez/qB,IAAI,aACrDggrB,EAAiB,OAAG7sd,QAAH,IAAGA,OAAH,EAAGA,EAAUluN,KAAI,SAAC06P,GAEvC,GAD4BA,EAAQ9iP,MAAM,CAAC,kBAAmB,SAClCyiqB,EAC1B,OAAO3/a,EAAQ9iP,MAAM,CAAC,kBAAmB,kBAE1CrV,QAAO,SAAAsM,GAAC,YAAU/b,IAAN+b,KAGTmsqB,EAA6BD,GAAqBA,EAAkB/6qB,KAAI,SAACotU,GAC7E,OAAOA,EAAOptU,KAAI,SAAAygjB,GAAM,OAAIA,EAAO1ljB,IAAI,YAEtCiF,KAAI,SAAAi7qB,GACH,IAAM9nrB,EAAQ8nrB,EAAUzjqB,QAAQ49V,GAChC,OAAkB,IAAXjiX,EAAe8nrB,EAAUlgrB,IAAI5H,GAAS,QAE9CoP,QAAO,SAAAsM,GAAC,OAAU,OAANA,KAGXqsqB,EAAoB/okB,EAAa,EAAK0mkB,uBAAuBtC,GAA8BpkkB,EAAWv6F,MAAM,CAAC,WAAD,eAAqB2+pB,KAAiCpkkB,EAAWp3G,IAAI,YAAckU,iBAE/LrF,MAAI9N,MAAMo/qB,IAAsBA,EAAkBjgrB,IAAI,aACxDigrB,EAAoBA,EAAkBngrB,IAAI,YAG5C,IAAMogrB,EAAkCD,GAAqBA,EAAkBl7qB,KAAI,SAAC06P,EAASN,GAC3F,GAAI,EAAKugb,kCAAkCzsd,EAAUmsd,GAAmB95qB,SAAS65P,GAAe,CAC9F,IAAM6lT,EAAWvlT,EAAQ3/P,IAAI,SAAUkU,kBACjC9b,EAAQ8sjB,EAASzoiB,QAAQ49V,GAC/B,OAAkB,IAAXjiX,EAAe8sjB,EAASlljB,IAAI5H,GAAS,KAE5C,OAAO,QAERoP,QAAO,SAAAsM,GAAC,OAAU,OAANA,KACf,SAAIssqB,IAAmCH,IACKG,EAAgCporB,OAASiorB,EAA2BjorB,MArtC/F,EA4tCZ4nrB,kCAAoC,SAACzsd,EAAUmsd,GAOpD,OANoD,OAAGnsd,QAAH,IAAGA,OAAH,EAAGA,EAAUluN,KAAI,SAAC06P,EAASvnQ,GAE7E,GAD4BunQ,EAAQ9iP,MAAM,CAAC,kBAAmB,SAClCyiqB,EAC1B,OAAOlnrB,KAERoP,QAAO,SAAAsM,GAAC,YAAU/b,IAAN+b,MAluCE,EAsuCZusqB,aAAe,SAACh8qB,GACrB,MAKI,EAAK8hC,MAJPuzE,EADF,EACEA,KACA9yE,EAFF,EAEEA,SACAqkJ,EAHF,EAGEA,MACAuH,EAJF,EAIEA,QAGI87B,EAAUrjC,EAAMjrL,IAAI,MACpBi4H,EAAU5zH,EAAE4kB,OAAOgvG,QACnBtgI,EAAQsgI,EAAU,aAAe,QAEvCrxF,EAASu/B,aAAOuzC,EAAM,OAAQ/hH,IAEzB66L,GAEC5rJ,EADJqxF,EACa5vH,gBAAK,YAAD,OAAaimN,EAAb,gBACJjmN,gBAAK,YAAD,OAAaimN,MAvvCf,EA2vCZgyd,eAAiB,WAAO,IAAD,IAC5B,EAQI,EAAKn6oB,MAPP8kJ,EADF,EACEA,MACA91G,EAFF,EAEEA,QACAyqW,EAHF,EAGEA,UACA53Z,EAJF,EAIEA,EACAovF,EALF,EAKEA,WACAxwE,EANF,EAMEA,SACA8yE,EAPF,EAOEA,KAGF,EAKI,EAAKz2E,MAJPk4oB,EADF,EACEA,8BACAC,EAFF,EAEEA,yBACAI,EAHF,EAGEA,2BACAE,EAJF,EAIEA,kBAGIvrd,EAAYllC,GAASA,EAAMjrL,IAAI,aAC/BwyL,EAAW,EAAKrsJ,MAAcqsJ,QAC9B+sf,EAAoB,EAAKp5oB,MAAco5oB,iBACvC/ud,EAASp5G,GAAcA,EAAWp3G,IAAI,2BAGtCw/qB,GAA4B,OAAVpokB,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,eAAhB,OAA+BwwN,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAQxwN,IAAIu/qB,IAC7DE,EAAgBjtf,EACjBgtf,GAAmBv0f,EACnB7zE,GAAcA,EAAWp3G,IAAI,aAAew7qB,GAA8Bhrd,GAAUA,EAAOxwN,IAAIw7qB,GAA+Bhrd,EAAOxwN,IAAIw7qB,GAA+BpkkB,GAAcA,EAAWp3G,IAAI,yBAA2BirL,EAE/NkoC,EAAWwnd,GAAuBzmqB,OAAKF,OAAL,OAAYyrqB,QAAZ,IAAYA,OAAZ,EAAYA,EAAez/qB,IAAI,aAA/B,OAA8Cy/qB,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAez/qB,IAAI,YAAckU,kBAEjHqsqB,EAAoBpwd,GAAa72N,QAAQ62N,EAAUn4N,OAASm4N,EAAUlrN,KAAI,SAACq+G,GAC/E,IAAMpmF,EAAKomF,EAAStjH,IAAI,MAClByK,EAAOmwqB,GAAuBt3jB,GAE9BoxT,EAAoBt9T,GAAcA,EAAWp3G,IAAI,aAEvD,IAAI00a,GAAsBA,EAAkBlva,SAAS03B,GAIrD,OAAO,eAACs7E,EAAA,EAAD,CAAmB7gH,MAAOulC,EAA1B,SAA+BzyB,GAAhByyB,MAGlBsjpB,EAAyBrtd,GAAYA,EAASluN,KAAI,SAAC06P,EAASN,GAChE,IAAM09G,EAAap9G,EAAQ9iP,MAAM,CAAC,kBAAmB,cAAe3I,kBAC9DwqW,EAAe/+G,EAAQ3/P,IAAI,gBAC3BygrB,EAAgB9gb,EAAQ9iP,MAAM,CAAC,kBAAmB,iBAAkB,IACpEi3G,EAAW6rI,EAAQ3/P,IAAI,YAAYwH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KACzE0grB,EAAc/gb,EAAQ3/P,IAAI,QAEhC,GAAK1G,QAAQw6H,EAAS97H,OAAUsB,QAAQonrB,GAAxC,CAIA,IAAMC,EAAuB5jU,EAAW93W,KAAI,SAAC6tP,EAA6C16P,GACxF,GAAI06P,EAAM9yP,IAAI,aACZ,OAAO,KAET,IAAM4mX,EAAY9zH,EAAM9yP,IAAI,QACtBq6W,EAAUvnH,EAAM9yP,IAAI,MAE1B,OACE,eAAC80E,EAAA,EAAD,CACEW,WAAW,EADb,SAIE,eAAC,QAAD,CACEhrE,KAAM,EAAKszqB,mBAAmBvC,EAA4Bn8a,EAAc,UAExE9pL,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAM,GAAD,OAAK6pV,GACV1kR,MAAO,UACPu6J,aAAc49G,MATbjiX,MAgBX,OACE,gBAAC08E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAEVN,UAAWF,EAAQyrmB,cACnBrpkB,MAAO,CAAEhgC,MAAO,QALlB,UAOE,eAACk+B,EAAA,EAAD,UAAaipQ,IACb,gBAACjpQ,EAAA,EAAD,eAAcgrkB,EAAd,OAEGtF,EAA8Bt+pB,MAAM,CAAC,UAAW8iP,EAAQ3/P,IAAI,gBAAkBm7qB,EAA8Bt+pB,MAAM,CAAC,QAAD,OAAS2+pB,GAA8B77a,EAAQ3/P,IAAI,eAClK,eAACy1G,EAAA,EAAD,CACAvT,MAAM,QACNyT,QAAQ,UAFR,SAIC3tF,EAAE,sCAEH,KAEL24pB,IAhBIthb,OAqBLwhb,EAAmB1td,GAAYA,EAASluN,KAAI,SAAC06P,GACjD,OAAOA,EAAQ3/P,IAAI,sBAClBwH,QAAO,SAAAsM,GAAC,OAAIA,KAETgtqB,EAAkCD,GAAoBA,EACzDj5qB,QAAO,SAACutI,EAAKwqH,GACZ,IAAMw6G,EAAYx6G,EAAQ3/P,IAAI,MAQ9B,OAAmB,IANLm1I,EAAI3tI,QAAO,SAACu5qB,GACxB,GAAIA,EAAS/grB,IAAI,QAAUm6W,EACzB,OAAO4mU,KAID/orB,KACDm9I,EAAI9sI,KAAKs3P,GAEXxqH,IACNjhI,kBAEC8sqB,EAAuBF,GAAmCA,EAAgC77qB,KAAI,SAAC05W,EAA6CvmX,GAChJ,IAAMqorB,EAAgB9hU,EAAgB3+W,IAAI,iBACpC+8W,EAAa4B,EAAgB3+W,IAAI,aAAckU,kBAC/CorqB,EAAoB3gU,EAAgB3+W,IAAI,MACxCihrB,EAAelkU,EAAW93W,KAAI,SAAC6tP,EAA6CuyJ,GAChF,GAAIvyJ,EAAM9yP,IAAI,aACZ,OAAO,KAET,IAAM4mX,EAAY9zH,EAAM9yP,IAAI,QACtBq6W,EAAUvnH,EAAM9yP,IAAI,MAE1B,OACE,eAAC80E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAEVN,UAAWF,EAAQyrmB,cACnBrpkB,MAAO,CAAEhgC,MAAO,QALlB,SAOE,eAACy8O,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAAS,EAAKynjB,0BAA0B5sb,EAAOwsb,GAC/C7nkB,SAAU,SAACpzG,GAAD,OAAO,EAAKg7qB,0BAA0Bvsb,EAAOwsb,MAG3DvipB,MAAO6pV,KAZJy+B,EAAShrC,MAmBpB,OAAO,gBAACvlS,EAAA,EAAD,CAELW,WAAW,EACXE,UAAU,SAHL,UAKL,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQg9C,SAAnD,SAA8DsujB,IAC9D,eAAC3rmB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MAFZ,SAIGsrmB,MATE7orB,MAcH8orB,EAAyB,iBAAGJ,QAAH,IAAGA,OAAH,EAAGA,EAAiCt3qB,OAAM,SAACm1W,EAA6CvmX,GACrH,IAAM2kX,EAAa4B,EAAgB3+W,IAAI,aAAckU,kBAC/CorqB,EAAoB3gU,EAAgB3+W,IAAI,MAC9C,OAAO+8W,EAAWvzW,OAAM,SAACspP,EAA6CuyJ,GACpE,QAAIvyJ,EAAM9yP,IAAI,cAGP,EAAK0/qB,0BAA0B5sb,EAAOwsb,gBAPlB,SAUzB6B,EAAkB,eAACntX,EAAA,EAAD,CACtBz8M,MAAO,CAAE+X,aAAc,QACvB9L,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASipjB,EACTzpkB,SAAU,SAACpzG,GACL68qB,EACF/td,EAASxqN,SAAQ,SAACg3P,EAASvnQ,GACzBwuC,EAASu/B,aAAOuzC,EAAM,EAAKqkkB,mBAAmBvC,EAA4BpjrB,EAAO,UAAW8b,sBAG9Fi/M,EAASxqN,SAAQ,SAACg3P,EAASvnQ,GAAW,IAAD,EAC7B2kX,EAAap9G,EAAQ9iP,MAAM,CAAC,kBAAmB,cAAe3I,kBAC9DgxiB,EAAQ,iBAAGnoM,QAAH,IAAGA,OAAH,EAAGA,EAAYv1W,QAAO,SAACsrP,GAAD,OAAkDA,EAAM9yP,IAAI,gBAAciF,KAAI,SAAC6tP,GAAD,OAAiDA,EAAM9yP,IAAI,gBAA/J,QAAyKkU,iBACvL0yB,EAASu/B,aAAOuzC,EAAM,EAAKqkkB,mBAAmBvC,EAA4BpjrB,EAAO,UAAW8sjB,UAMtGnohB,MAAO/U,EAAE,0BAELo5pB,EAAiBjG,EAA8BnjrB,KAAO,EAC5D,OACE,gBAACg1H,EAAA,EAAD,CACE33C,UAAW+rmB,EAAiBjsmB,EAAQksmB,WAAalsmB,EAAQqpmB,MACzDryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,kCAA1B,YAAiE6ypB,IAA4CvhrB,QAAO,OAAC89G,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,cACtI,eAACssH,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SAJb,UAME,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACm+O,EAAA,EAAD,CACE3+O,UAAWF,EAAQmsmB,WACnB99jB,QACE,eAAC0uJ,EAAA,EAAD,CACEhwK,MAAM,UACNuV,SAAU,SAACpzG,GAAD,OAAO,EAAKg8qB,aAAah8qB,IACnC4zH,QAAU,EAAK9xF,MAAcqsJ,QAAsC,gBAAlB,OAAVp7E,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,SAAyC,eAAd4/a,EAClFzmU,SAAU7/G,QAAQ89G,IAAc,UAAAA,EAAWp3G,IAAI,oBAAf,eAA6BhI,MAAO,KAGxE+kC,MAAO/U,EAAE,8BACTu5pB,eAAe,aAOf,EAAKp7oB,MAAcqsJ,SAAWkpf,GAChC,eAAC5mmB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,gBAACf,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWb,WAAW,SAASG,UAAWF,EAAQgxC,MAAjF,UACE,eAAC1Q,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,yBACjC,gBAAC+1F,EAAA,EAAD,CACExG,MAAO,CAAE9/B,SAAU,IAAK0sC,WAAY,IACpCxsH,MAAO6jrB,EACP/jkB,SAAU,EAAK+pkB,iCACfrgB,UAAW,CACTppR,aAAc,CACZ/7G,SAAU,SACVK,WAAY,QAEdy8I,mBAAoB,MATxB,UAYE,eAACtgU,EAAA,EAAD,CAAU7gH,MAAO,EAAGwhH,UAAU,EAA9B,SAAqCnxF,EAAE,2BACtCu4pB,WAOsB,OAA7BpF,QAA6B,IAA7BA,OAAA,EAAAA,EAA+Bj7qB,IAAI,gCACjC,gBAAC40E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACggC,EAAA,EAAD,CACEvT,MAAM,QACNyT,QAAQ,UACRtgC,UAAWF,EAAQssmB,oBAHrB,UAKGz5pB,EAAE,oCALL,OAOA,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,8BAEI0lmB,EAA8Bn7qB,IAAI,8BAA8BiF,KAAI,SAACuf,EAAapsB,GAChF,OACE,qBAAgBm/G,MAAO,CAAErV,MAAO,WAAhC,SACE,eAACuT,EAAA,EAAD,CACAvT,MAAM,QACNyT,QAAQ,UAFR,SAICnxF,KALMpsB,aAiBzB,eAAC08E,EAAA,EAAD,CACEW,WAAW,EADb,SAGE,gBAACu3C,EAAA,EAAD,CACE73C,QAAS,CACP3hE,KAAM2hE,EAAQusmB,qBAEhBv1jB,iBAAiB,EAJnB,UAME,eAACgB,EAAA,EAAD,CACEh4C,QAAS,CACP3hE,KAAM2hE,EAAQwsmB,2BACd/poB,QAASu9B,EAAQysmB,mCAEnBx0jB,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBATL,SAWE,eAACu4E,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ0smB,0BAA5C,SAAwE75pB,EAAE,sCAG5E,gBAACskG,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQ2smB,+BAFlB,WAKuB,OAApBd,QAAoB,IAApBA,OAAA,EAAAA,EAAsBhprB,MAAO,EAAImprB,EAAkB,KACnDH,GAA8C,eAACvrkB,EAAA,EAAD,UAAaztF,EAAE,oCAMpE,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,aAFV,UAKE,gBAACi3C,EAAA,EAAD,CACE73C,QAAS,CACP3hE,KAAM2hE,EAAQusmB,qBAGhBz0jB,SAAUmujB,EACV3jkB,SAAU,EAAKsqkB,6BANjB,UAQE,eAAC50jB,EAAA,EAAD,CACEh4C,QAAS,CACP3hE,KAAM2hE,EAAQwsmB,2BACd/poB,QAASu9B,EAAQysmB,mCAEnBx0jB,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBATL,SAWE,eAACu4E,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ0smB,0BAA5C,SAAwE75pB,EAAE,qCAG5E,gBAACskG,EAAA,EAAD,CAAuB/U,MAAO,CAAE7/B,cAAe,UAA/C,UACE,gCACW,OAARy7I,QAAQ,IAARA,OAAA,EAAAA,EAAUn7N,MAAO,EAAImprB,EAAkB,OAE1C,sBAAK9rmB,UAAWF,EAAQ6smB,qBAAxB,SACG7ud,EAAWqtd,EAAyB,eAAC/qkB,EAAA,EAAD,UAAaztF,EAAE,qCAKvDozpB,GAA4BoF,GAA0BrF,EAA8Bn7qB,IAAI,iBACrF,eAACy1G,EAAA,EAAD,CACAvT,MAAM,QACNyT,QAAQ,UACRtgC,UAAWF,EAAQssmB,oBAHnB,SAKCz5pB,EAAE,sCAEH,iBAvnDC,EAgoDZ+5pB,6BAA+B,SAAC3+iB,EAA8Bw3R,GACnE,EAAK/7S,UAAS,SAAAquJ,GAAS,MAAK,CAC1Bkua,0BAA2Blua,EAAUkua,8BAloDtB,EAsoDZ6G,kCAAoC,SAAC7+iB,EAAoEjtF,GAC9G,EAAK0oE,SAAS,CAAE08jB,4BAA6Bn4iB,EAAMn6G,OAAOtxB,SAvoDzC,EA0oDZ6prB,iCAAmC,SAACp+iB,EAAoEjtF,GAC7G,EAAK0oE,SAAS,CAAE28jB,2BAA4Bp4iB,EAAMn6G,OAAOtxB,SA3oDxC,EA8oDZuqrB,iCAAmC,SAAC9+iB,EAAoEjtF,GAC7G,EAAK0oE,SAAS,CAAE48jB,2BAA4Br4iB,EAAMn6G,OAAOtxB,SA/oDxC,EAkpDZwqrB,aAAe,WACpB,MAOI,EAAKh8oB,MANPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACAjjK,EAHF,EAGEA,EACA4e,EAJF,EAIEA,SACA8yE,EALF,EAKEA,KACAtC,EANF,EAMEA,WAGF,EAMI,EAAKn0E,MAJPo4oB,GAFF,EACEJ,gBADF,EAEEI,yBACAC,EAHF,EAGEA,4BACAC,EAJF,EAIEA,4BACAG,EALF,EAKEA,kBAGIvrd,EAAYllC,GAASA,EAAMjrL,IAAI,aAC/BwwN,EAASp5G,GAAcA,EAAWp3G,IAAI,2BAGtCy/qB,EAAiBrokB,GAAcA,EAAWp3G,IAAI,aAAeu7qB,GAA+B/qd,GAAUA,EAAOxwN,IAAIu7qB,GAAgC/qd,EAAOxwN,IAAIu7qB,GAAgCnkkB,GAAcA,EAAWp3G,IAAI,yBAA2BirL,EAEpPkoC,EAAWwnd,GAAuBzmqB,OAAKF,OAAL,OAAYyrqB,QAAZ,IAAYA,OAAZ,EAAYA,EAAez/qB,IAAI,aAA/B,OAA8Cy/qB,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAez/qB,IAAI,YAAckU,kBACjH0zP,EAAgBz0C,GAAYA,EAAS9hN,QACrC+wqB,EAAgBjvd,EACnB3pN,OAAM,SAACm2P,EAASN,GACf,IAAMvrI,EAAW6rI,EAAQ3/P,IAAI,YAAYwH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KAC/E,OAAO,EAAKk/qB,6BAA6B7/a,EAAcvrI,EAAUynjB,MAG/DgF,EAAoBpwd,GAAa72N,QAAQ62N,EAAUn4N,OAASm4N,EAAUlrN,KAAI,SAACq+G,GAC/E,IAAMpmF,EAAKomF,EAAStjH,IAAI,MAClByK,EAAOmwqB,GAAuBt3jB,GAE9BoxT,EAAoBt9T,GAAcA,EAAWp3G,IAAI,aAEvD,IAAI00a,GAAsBA,EAAkBlva,SAAS03B,GAIrD,OAAO,eAACs7E,EAAA,EAAD,CAAmB7gH,MAAOulC,EAA1B,SAA+BzyB,GAAhByyB,MAGlBmlpB,EAAgBlvd,GAAYA,EAASluN,KAAI,SAAC06P,EAASN,GACvD,IAAMvrI,EAAW6rI,EAAQ3/P,IAAI,YAAYwH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KACzE0+W,EAAe/+G,EAAQ3/P,IAAI,gBAC3B0grB,EAAc/gb,EAAQ3/P,IAAI,QAC1BsirB,EAAiBhprB,QAAQw6H,EAASziH,UAAYyiH,EAASpqH,MAAK,SAAAupH,GAAO,OAAKA,EAAQjzH,IAAI,gBAE1F,GAAK1G,QAAQw6H,EAAS97H,OAAU0orB,EAAhC,CAIA,IAAM6B,EAAoBzujB,EAAStsH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KAAGiF,KAAI,SAACguH,EAAwBiD,GACvG,IAAMlQ,EAAO,EAAK+3jB,mBAAmBxC,EAA6Bl8a,GAClE,OACE,eAACvqL,EAAA,EAAD,CAEEW,WAAW,EACXE,UAAU,SAHZ,SAKE,gBAACb,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SACLvB,WAAW,SAEXG,UAAWF,EAAQqtmB,oBALrB,UAOE,eAAC,QAAD,CACE/3qB,KAAI,UAAKu7G,EAAL,aACJzwC,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAM,GAAD,OAAKk2F,EAAQjzH,IAAI,kBACtBkiG,MAAO,UACPu6J,aAAcxpI,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAAe,IAAMnpI,EAA1D,gBACdtgB,WAAY,CACV6B,SAAU,SAACgrkB,GAAD,OAAmB77oB,EAASu/B,aAAOuzC,EAAD,UAAUsM,EAAV,qBAAmC1sH,QAAO,OAACmprB,QAAD,IAACA,OAAD,EAACA,EAAezqrB,UAiBxG8wH,YAAY,MAIZw5jB,GAAkBrvjB,EAAQjzH,IAAI,aAChC,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oCAAlB,SACE,eAAC,KAAD,CAAkBk6E,MAAM,gBAlCvBg0B,EAAe,YARjBA,MAkDX,OAGE58H,QAAQw6H,EAAS97H,OAASsB,QAAQonrB,GAC9B,eAAC5rmB,EAAA,EAAD,CAEAW,WAAW,EACXJ,UAAWF,EAAQutmB,iBAHnB,SAKA,gBAAC11jB,EAAA,EAAD,CAEEC,SAAU3zH,QAAQgirB,EAA4Bt7qB,IAAIq/P,IAClD5nJ,SAAU,SAAC2rB,EAA8BnW,GACvC,EAAKpO,SAAS,CAAEy8jB,4BAA6BA,EAA4B33qB,IAAI07P,EAAcpyI,KAAa,WACtG,IAAM01jB,EAAwB,EAAK1/oB,MAAMq4oB,4BAA4B9zqB,QAAO,SAAAo7qB,GAAe,OAAIA,KAAiBvxqB,QAC5G47G,GAAY01jB,IAA0B/6a,EACxC,EAAK/oJ,SAAS,CAAEw8jB,yBAAyB,IAC/BpujB,GAAY01jB,IAA0B/6a,GAChD,EAAK/oJ,SAAS,CAAEw8jB,yBAAyB,QAK/ClmmB,QAAS,CACP3hE,KAAM2hE,EAAQ0tmB,kCAflB,UAkBE,eAAC11jB,EAAA,EAAD,CACE53C,UAAW,MACX63C,WACE,eAAC,KAAD,IAIFlwF,GAAIpyB,OAAOu0P,GACXhqL,UAAWF,EAAQ2tmB,qCARrB,SAUE,gBAAChumB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,eAACu9O,EAAA,EAAD,CACE,aAAW,cACXlzM,QAAS,SAAAsiB,GAAK,OAAIA,EAAMjjB,mBACxBnb,QAAS,SAAAo+B,GAAK,OAAIA,EAAMjjB,mBACxBqD,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,UAAS,EAAKinjB,6BAA6B7/a,EAAcvrI,EAAUynjB,GACnE9jkB,SAAU,SAACpzG,EAAG4zH,GAAJ,OAAgB,EAAK+mjB,oBAAoB3/a,EAAcvrI,EAAUmE,MAG/El7F,MAAO2hV,EACPvpS,QAAS,CACPp4C,MAAOo4C,EAAQg9C,YAIjBmwjB,GACA,eAACp8jB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oCAAlB,SACE,eAAC,KAAD,CAAkBk6E,MAAM,mBAKhC,eAACoqB,EAAA,EAAD,UACE,eAACx3C,EAAA,EAAD,CACEW,WAAW,EADb,SAGG8smB,QA5CAljb,EAAe,YAjBjBA,GAkEL,SAIR,OACE,gBAACryI,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIE,gBAACr3C,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAASG,UAAWF,EAAQgxC,MAApG,UACE,eAAC1Q,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,8BAC5B,uBAAKuvF,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,UAA3C,UACI,EAAK/uC,MAAcqsJ,SAAY,EAAKrsJ,MAAck4oB,gBAAgB,OAACjnkB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,cACnF,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iCAAlB,SACE,eAAC44F,EAAA,EAAD,CAAQjL,QAAQ,OAAOtgC,UAAWF,EAAQmpmB,iBAAkBx9jB,QAAS,kBAAO,EAAK36E,MAAck4oB,aAAnB,YAAoCxD,MAAhH,SACG7ypB,EAAE,8BAIT,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN2zB,QAAS,eAAC,KAAD,CAA8BxgD,UAAWgmmB,EAA0BlmmB,EAAQ4tmB,YAAc,KAClGjikB,QAAS,WACP,EAAKjC,SAAS,CACZw8jB,yBAA0BA,EAC1BC,4BAA6BpnqB,eAAKxW,MAAMkqQ,GAAe9iI,MAAMu2iB,OANnE,SAUGrzpB,EAAE,qCAUL,EAAKme,MAAcqsJ,SAAWkpf,GAChC,gBAAC5mmB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,WAAWb,WAAW,SAASG,UAAWF,EAAQgxC,MAA/F,UACE,eAAC1Q,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,yBACjC,gBAAC+1F,EAAA,EAAD,CACExG,MAAO,CAAE9/B,SAAU,IAAK0sC,WAAY,IACpCxsH,MAAO4jrB,EACP9jkB,SAAU,EAAKwqkB,kCACf9gB,UAAW,CACTppR,aAAc,CACZ/7G,SAAU,SACVK,WAAY,QAEdy8I,mBAAoB,MATxB,UAYE,eAACtgU,EAAA,EAAD,CAAU7gH,MAAO,EAAGwhH,UAAU,EAA9B,SAAqCnxF,EAAE,2BACtCu4pB,QAIP,eAACj0jB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UAEI0smB,EAAcrqrB,KAAO,EAAI,eAACg8T,EAAA,EAAD,CACvBz8M,MAAO,CAAE+X,aAAc,QACvB9L,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASmqjB,EACT3qkB,SAAU,SAACpzG,GACL+9qB,EAIFjvd,EAASxqN,SAAQ,SAACg3P,EAASN,GACzB,IAAMr5I,EAAO,EAAK+3jB,mBAAmBxC,EAA6Bl8a,GAElEz4N,EAASu/B,aAAOuzC,EAAD,UAAUsM,EAAV,aAA2B9xG,mBAC1C0yB,EAASu/B,aAAOuzC,EAAD,UAAUsM,EAAV,sBAAmC,OAMpDmtG,EAASxqN,SAAQ,SAACg3P,EAASN,GACzB,IACMmhC,EADW7gC,EAAQ3/P,IAAI,YAAYwH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KAC1DiF,KAAI,SAACguH,EAASiD,GAAV,OAA2BjD,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAAe,IAAMnpI,EAA1D,mBAC9ClQ,EAAO,EAAK+3jB,mBAAmBxC,EAA6Bl8a,GAElEz4N,EAASu/B,aAAOuzC,EAAD,UAAUsM,EAAV,aAA2Bw6K,IAC1C55P,EAASu/B,aAAOuzC,EAAD,UAAUsM,EAAV,sBAAmC,UAM5DjpF,MAAO/U,EAAE,0BACN,KAEP,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,aACRV,UAAWF,EAAQ6tmB,0BAHrB,SAMGX,aAl7DM,EA07DZY,cAAgB,WACrB,MAII,EAAK98oB,MAHPgvC,EADF,EACEA,QAEAntD,GAHF,EAEEijK,MAFF,EAGEjjK,GAGF,OACE,gBAACglG,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,iCAA1B,YAAgE6ypB,KACjE,eAACvujB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQ6tmB,0BACnBjtmB,QAAQ,aAHV,UAKE,eAACjB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,SAKE,eAAC,QAAD,CACElrE,KAAK,sBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,sCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,SAKE,eAAC,QAAD,CACElrE,KAAK,eACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,SAKE,eAAC,QAAD,CACElrE,KAAK,mBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,wCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,SAKE,eAAC,QAAD,CACElrE,KAAK,aACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,yCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,SAKE,eAAC,QAAD,CACElrE,KAAK,WACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,kCACTk6E,MAAO,wBAnhEJ,EA6hEZghlB,aAAe,WAAO,IAAD,EAC1B,EAOI,EAAK/8oB,MANPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACAjjK,EAHF,EAGEA,EACAovF,EAJF,EAIEA,WACAsC,EALF,EAKEA,KACA9yE,EANF,EAMEA,SAGF,EAGI,EAAK3D,MAFPw4oB,EADF,EACEA,2BACAC,EAFF,EAEEA,kBAGIvrd,EAAYllC,GAASA,EAAMjrL,IAAI,aAC/BwwN,EAASp5G,GAAcA,EAAWp3G,IAAI,2BACtCy/qB,EAAiBrokB,GAAcA,GAAcA,EAAWp3G,IAAI,aAAey7qB,GAA8Bjrd,GAAUA,EAAOxwN,IAAIy7qB,GAA+Bjrd,EAAOxwN,IAAIy7qB,GAA+BrkkB,GAAcA,EAAWp3G,IAAI,yBAA2BirL,EAE/Ps1f,EAAoBpwd,GAAa72N,QAAQ62N,EAAUn4N,OAASm4N,EAAUlrN,KAAI,SAACq+G,GAC/E,IAAMpmF,EAAKomF,EAAStjH,IAAI,MAClByK,EAAOmwqB,GAAuBt3jB,GAE9BoxT,EAAoBt9T,GAAcA,EAAWp3G,IAAI,aAEvD,IAAI00a,GAAsBA,EAAkBlva,SAAS03B,GAIrD,OAAO,eAACs7E,EAAA,EAAD,CAAmB7gH,MAAOulC,EAA1B,SAA+BzyB,GAAhByyB,MAGlBi2L,EAAWwnd,GAAuBzmqB,OAAKF,OAAL,OAAYyrqB,QAAZ,IAAYA,OAAZ,EAAYA,EAAez/qB,IAAI,aAA/B,OAA8Cy/qB,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAez/qB,IAAI,YAAckU,kBACjHg/M,EAAY,OAAGusd,QAAH,IAAGA,OAAH,EAAGA,EAAez/qB,IAAI,gBAClCkyN,EAAW,OAAGutd,QAAH,IAAGA,OAAH,EAAGA,EAAez/qB,IAAI,eACjCmjrB,EAAoB,iBAAGhwd,QAAH,IAAGA,OAAH,EAAGA,EAAU3pN,OAAM,SAACm2P,EAASN,GAGrD,OAFwBM,EAAQ3/P,IAAI,kBAAmB6O,iBACX7O,IAAI,sBAAuBkU,kBAC5C1K,OAAM,SAAC45qB,EAAaC,GAAsB,IAAD,EAClE,iBAAQ,EAAKrF,oBAAoBvC,EAA4Bp8a,EAAc,gBAA3E,aAAO,EAA+E75P,SAAS49qB,EAAYpjrB,IAAI,sBAJzF,SAgBpBsjrB,EAA4Bnwd,GAAYA,EAASluN,KAAI,SAAC06P,EAASN,GACnE,IACMkkb,EADkB5jb,EAAQ3/P,IAAI,kBAAmB6O,iBACX7O,IAAI,sBAAuBkU,kBACjEwqW,EAAe/+G,EAAQ3/P,IAAI,gBAC3B8zH,EAAW6rI,EAAQ3/P,IAAI,YAAYwH,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KACzE0grB,EAAc/gb,EAAQ3/P,IAAI,QAEhC,GAAK1G,QAAQw6H,EAAS97H,OAAUsB,QAAQonrB,GAAxC,CAIA,IAAM8C,EAAwBD,EAAoBt+qB,KAAI,SAACm+qB,EAAaC,GAClE,OACE,eAACvumB,EAAA,EAAD,UAGE,eAACA,EAAA,EAAD,UAGE,eAAC,QAAD,CACErqE,KAAM,EAAKszqB,mBAAmBtC,EAA4Bp8a,EAAc,SACxE9pL,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAM,GAAD,OAAKqmpB,EAAYpjrB,IAAI,SAC1BkiG,MAAO,UACPu6J,aAAc2mb,EAAYpjrB,IAAI,YAR7BqjrB,EAAmB,gBAHrBA,MAiBRx+qB,WAAWhG,UAEd,OACE,gBAACi2E,EAAA,EAAD,CAEEW,WAAW,EACXE,UAAU,SAHZ,UAKE,eAAC8/B,EAAA,EAAD,UAAaipQ,IACZ8kU,IALInkb,OAULokb,EAAavxd,GAAeA,EAAYjtN,KAAI,SAACy+qB,EAAatrrB,GAC9D,IAAMurrB,EAAYD,EAAY1jrB,IAAI,QAClC,OACE,eAAC80E,EAAA,EAAD,UAGE,eAAC,QAAD,CACErqE,KAAM,aACN8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO4mpB,EACPzhlB,MAAO,UACPu6J,aAAcknb,MARbvrrB,MAaRyM,WAAWhG,UAER+krB,EAAsB1xd,GAAeA,EAAYjtN,KAAI,SAACy+qB,EAAatrrB,GACvE,IAAMyrrB,EAAaH,EAAY1jrB,IAAI,QACnC,OACE,eAAC80E,EAAA,EAAD,UAGE,eAAC,QAAD,CACErqE,KAAI,aACJ8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO8mpB,EACP3hlB,MAAO,UACPu6J,aAAconb,MARbzrrB,MAaRyM,WAAWhG,UAERilrB,EAAe5wd,GAAgBA,EAAajuN,KAAI,SAAC8+qB,EAAkB3rrB,GACvE,IAAM2kC,EAAQgnpB,EAAiB/jrB,IAAI,SAEnC,OAAO,eAAC80E,EAAA,EAAD,CACLW,WAAW,EACXE,UAAU,SAFL,SAKL,eAAC,QAAD,CACElrE,KAAI,YACJ8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,QACAmlE,MAAO,UACPu6J,aAAc1/N,MARb3kC,MAcH4rrB,GAAoC,OAAZF,QAAY,IAAZA,OAAA,EAAAA,EAAc9rrB,MAAO,IAAe,OAAVyrrB,QAAU,IAAVA,OAAA,EAAAA,EAAYzrrB,MAAO,IAAwB,OAAnB4rrB,QAAmB,IAAnBA,OAAA,EAAAA,EAAqB5rrB,MAAO,IAA9E,OAAmFm7N,QAAnF,IAAmFA,OAAnF,EAAmFA,EAAUzpN,MAAK,SAACi2P,GAC/H,OAAOA,EAAQ9iP,MAAM,CAAC,kBAAmB,uBAAwB3I,kBAAQlc,KAAO,MAGlF,OACE,gBAACg1H,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,2BAA1B,YAA0D6ypB,MAKvD,EAAK10oB,MAAcqsJ,SAAWkpf,GAChC,gBAAC5mmB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,WAAWb,WAAW,SAASG,UAAWF,EAAQgxC,MAA/F,UACE,eAAC1Q,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,yBACjC,gBAAC+1F,EAAA,EAAD,CACExG,MAAO,CAAE9/B,SAAU,IAAK0sC,WAAY,IACpCxsH,MAAO8jrB,EACPhkkB,SAAU,EAAKyqkB,iCACf/gB,UAAW,CACTppR,aAAc,CACZ/7G,SAAU,SACVK,WAAY,QAEdy8I,mBAAoB,MATxB,UAYE,eAACtgU,EAAA,EAAD,CAAU7gH,MAAO,EAAGwhH,UAAU,EAA9B,SAAqCnxF,EAAE,2BACtCu4pB,QAIP,eAACj0jB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UAEIqumB,EAAwB,eAAChwX,EAAA,EAAD,CACtBz8M,MAAO,CAAE+X,aAAc,QACvB9L,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASkrjB,EACT1rkB,SAAU,SAACpzG,GACL8+qB,EACM,OAARhwd,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAC1B,IAAM4/a,EAAW,EAAKlB,mBAAmBtC,EAA4Bp8a,EAAc,SACnFz4N,EAASu/B,aAAOuzC,EAAMulkB,EAAU/qqB,sBAM1B,OAARi/M,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAAkB,IAAD,IACrCs/G,EAAkBh/G,EAAQ3/P,IAAI,kBAAmB6O,iBACjD00qB,EAAmB,iBAAG5kU,QAAH,IAAGA,OAAH,EAAGA,EAAiB3+W,IAAI,sBAAuBkU,yBAA/C,QAA0DA,iBAC7Evc,EAAK,iBAAG4rrB,QAAH,IAAGA,OAAH,EAAGA,EAAqB37qB,QAAO,SAAC81Q,EAAK0la,EAAaC,GAE3D,OADA3la,EAAMA,EAAIr1Q,KAAK+6qB,EAAYpjrB,IAAI,WAE9BkU,yBAHQ,QAGGA,iBACR+qqB,EAAW,EAAKlB,mBAAmBtC,EAA4Bp8a,EAAc,SACnFz4N,EAASu/B,aAAOuzC,EAAMulkB,EAAUtnrB,UAmB1ColC,MAAO/U,EAAE,0BACN,KAEP,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQ6tmB,0BACnBjtmB,QAAQ,aAHV,UAKE,gBAACjB,EAAA,EAAD,CACE+B,GAAI,GACJhB,MAAM,EACNJ,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,OAAQ+3C,aAAc,IACtC35C,UAAU,SALZ,UAOE,eAAC8/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ8umB,kBADrB,SAGGj8pB,EAAE,kCAEJs7pB,KAEH,gBAACxumB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,UAKE,eAAC8/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ8umB,kBADrB,SAGGj8pB,EAAE,gCAEJy7pB,KAEH,gBAAC3umB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,UAKE,eAAC8/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ8umB,kBADrB,SAGGj8pB,EAAE,gCAEJ47pB,KAEH,gBAAC9umB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAEhgC,MAAO,QAChB5B,UAAU,SAHZ,UAKE,eAAC8/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ8umB,kBADrB,SAGGj8pB,EAAE,kCAEJ87pB,iBAn0EI,EA40EZI,OAAS,WACd,MAGI,EAAK/9oB,MAFPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAGF,OACE,gBAACglG,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIG,EAAK8xjB,mBAAmBj2pB,EAAE,0BAA1B,YAAyD6ypB,KAC1D,gBAACvujB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,UAKE,eAAC3pmB,EAAA,EAAD,CACEW,WAAW,EADb,SAGE,gBAACX,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,eAAC8/B,EAAA,EAAD,UAAaztF,EAAE,sCACf,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,eACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,gCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,eACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,gCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,WACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,iCACTk6E,MAAO,oBAOjB,gBAACptB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,eAAC8/B,EAAA,EAAD,UAAaztF,EAAE,qCACf,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,qBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,mCACTk6E,MAAO,yBAz5EJ,E,qDAkPnB,WACE,MAKIjmG,KAAKkqC,MAJPS,EADF,EACEA,SACAwwE,EAFF,EAEEA,WACA6zE,EAHF,EAGEA,MACA0sb,EAJF,EAIEA,mCAGF/wkB,EAAS,IAAIm8B,QAIR40iB,GAAsC1sb,IACzChvL,KAAK4/qB,4BACL5/qB,KAAK4grB,yBAEP5grB,KAAKkhrB,6BAA6B/lkB,K,gCAGpC,SAA0BkD,EAAgB4yJ,GAAkC,IAAD,kBACzE,EAQIjxQ,KAAKkqC,MAPP8kJ,EADF,EACEA,MACAvxE,EAFF,EAEEA,KACAtC,EAHF,EAGEA,WAGAxwE,GANF,EAIEu9oB,kBAJF,EAKE5H,eALF,EAME31oB,UACA+wkB,EAPF,EAOEA,mCAEF,EAGI17mB,KAAKgnC,MAFP83oB,EADF,EACEA,mBACAC,EAFF,EAEEA,uBAGE/vf,IAAU0L,mBAAQr8E,EAAU2wE,MAAOA,IACrChvL,KAAK4iH,SAAS,CAAEk8jB,oBAAoB,IAcN9+qB,KAAKkqC,MAAcqsJ,SAC9Cl4E,EAAUq9f,qCACTA,GACwB1sb,IAAU8vf,GACtC9+qB,KAAK4iH,SAAS,CAAEk8jB,oBAAoB,IAGlCA,IAAuBpjE,IACzB17mB,KAAK4iH,SAAS,CAAEk8jB,oBAAoB,IACpC9+qB,KAAK4/qB,4BACL5/qB,KAAK4grB,0BAGF,UAACvikB,EAAUlD,kBAAX,aAAC,EAAsBp3G,IAAI,mBAAqBktQ,EAAU8ta,0BAA3D,OAAsF5jkB,QAAtF,IAAsFA,OAAtF,EAAsFA,EAAYp3G,IAAI,oBAAoBg7qB,GAGtH/+qB,KAAKkqC,MAAcqsJ,SAAYv2L,KAAK2/qB,sBACxC3/qB,KAAK2/qB,qBAAsB,EAC3B3/qB,KAAK+grB,0BAKNoH,aAAW,OAAChtkB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,YAAjB,UAA8Bs6G,EAAUlD,kBAAxC,aAA8B,EAAsBp3G,IAAI,cAChEokrB,aAAW,OAAChtkB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,aAAjB,UAA+Bs6G,EAAUlD,kBAAzC,aAA+B,EAAsBp3G,IAAI,eAExE/D,KAAKkhrB,6BAA6B/lkB,GAGpC,IAAMo7E,EAAWv2L,KAAKkqC,MAAcqsJ,QAC9B+sf,EAAoBtjrB,KAAKkqC,MAAco5oB,iBAMvC8E,GAAmBD,aAAW,OAAChtkB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,YAAjB,UAA8Bs6G,EAAUlD,kBAAxC,aAA8B,EAAsBp3G,IAAI,aAOtFskrB,EAAa,OAAGltkB,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,2BAChCukrB,EAAU,UAAGjqkB,EAAUlD,kBAAb,aAAG,EAAsBp3G,IAAI,2BACvCwkrB,EAAiBjF,KACJ,OAAb+E,QAAa,IAAbA,GAAA,UAAAA,EAAetkrB,WAAf,oBAAAskrB,EAAqB/E,MAArB,OAA0C+E,QAA1C,IAA0CA,GAA1C,UAA0CA,EAAetkrB,WAAzD,aAA0C,OAAAskrB,EAAa,UAAW/E,MAClEkF,EAAqBlF,KACX,OAAVgF,QAAU,IAAVA,GAAA,UAAAA,EAAYvkrB,WAAZ,oBAAAukrB,EAAkBhF,MAAlB,OAAuCgF,QAAvC,IAAuCA,GAAvC,UAAuCA,EAAYvkrB,WAAnD,aAAuC,OAAAukrB,EAAU,UAAWhF,MAC5DmF,EAAgBlyf,IAAO,OAAIp7E,QAAJ,IAAIA,OAAJ,EAAIA,EAAYp3G,IAAI,cAC5CwkrB,IAAmBC,EAClBE,EAAkCrqkB,EAAkBilkB,iBAE1D,GAAI/sf,GAAW+sf,GAAoBt0f,GAAS7zE,IACpCitkB,GAAmBK,GAFalyf,GAAWmyf,IAAmCpF,GAER,CAC5E,IAAMqF,EAAaxtkB,EAAWp3G,IAAI,YAC5B6krB,EAAYztkB,EAAWp3G,IAAI,2BAC3B8krB,EAAWF,GAAuB,OAATC,QAAS,IAATA,OAAA,EAAAA,EAAW7krB,IAAIu/qB,MAAf,OAAoCsF,QAApC,IAAoCA,OAApC,EAAoCA,EAAW7krB,IAAX,UAAkBu/qB,KAAuB,KACtGwF,GAAyB,OAARD,QAAQ,IAARA,OAAA,EAAAA,EAAU9krB,IAAI,cAAeirL,EAAMjrL,IAAI,YAExDglrB,EAAe5tkB,EAAWp3G,IAAI,YACpC,GAAI+krB,GAAkBC,GAAgB9wqB,OAAKF,OAAOgxqB,GAAe,CAM/D,IAAMC,EAAiBF,EAAev9qB,QAAO,SAACiC,GAAD,aAC1C,UAAAA,EAAEzJ,IAAI,mBAAN,eAAmBhI,OAAQyR,EAAEzJ,IAAI,YAAY0J,MAAK,SAACgoE,GAAD,OAAYA,EAAE1xE,IAAI,MAAQ,MAAOyJ,EAAEzJ,IAAI,WAEtFklrB,EAA2C,GACjDF,EAAar8qB,SAAQ,SAACw4jB,GACpB,IAAMjkiB,EAAKikiB,EAAGnhkB,IAAI,aACdk9B,IAAMgopB,EAAoBhopB,GAAMikiB,MAEtC,IAAMgkH,EAAcF,EAAehgrB,KAAI,SAACmgrB,EAAoB/lb,GAC1D,IAAM86G,EAAYirU,EAAcplrB,IAAI,aAC9B8zH,GAAYsxjB,EAAcplrB,IAAI,aAAekU,kBAAQ1M,QAAO,SAACkqE,GAAD,OAAYA,EAAE1xE,IAAI,MAAQ,KACtFsmb,EAAaxyT,EAAS7uH,KAAI,SAACguH,EAAciD,GAAf,OAC9BjD,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAArC,YAAqDnpI,EAArD,mBAEIipjB,EAAmB7lrB,QAAQgtb,EAAWtub,OAAU87H,EAAS97H,MAAQotrB,EAAcplrB,IAAI,SACnF2L,EAAWu5qB,EAAoB/qU,GACrC,GAAIxuW,EACF,OAAOA,EACJhI,IAAI,WAAY2ib,GAChB3ib,IAAI,mBAAoBw7qB,GAE7B,IAAM9sW,EAAS+yW,EAAcvoqB,MAAM,CAAC,kBAAmB,cAAe3I,kBACnE1M,QAAO,SAACmrE,GAAD,OAAYA,EAAE3yE,IAAI,iBAAmB2yE,EAAE3yE,IAAI,gBAClDiF,KAAI,SAAC0tE,GAAD,OAAYA,EAAE3yE,IAAI,SACnBo2P,EAAQgvb,EAAcvoqB,MAAM,CAAC,kBAAmB,uBAAwB3I,kBAC3E1M,QAAO,SAAC1F,GAAD,uBAAYA,EAAE9B,IAAI,sBAAlB,YACPiF,KAAI,SAACnD,GAAD,OAAYA,EAAE9B,IAAI,WACzB,OAAOqlB,iBAAO,CACZyuG,SAAUwyT,EACVj0G,SACAj8E,QACA+jH,YACAuE,aAAc0mU,EAAcplrB,IAAI,gBAChC09W,KAAM0nU,EAAcplrB,IAAI,QACxBm/qB,wBAGJv4oB,EAASu/B,aAAOuzC,EAAM,WAAYyrkB,KAMtC,GAAI3yf,GAAW+sf,GAAoBnokB,EAAY,CAC7C,IAAMiukB,EAAmBjukB,EAAWp3G,IAAI,aACnCqlrB,GAA8C,IAA1BA,EAAiBrtrB,MAAcqtrB,EAAiBhmqB,UAAYkgqB,GACnF34oB,EAASu/B,aAAOuzC,EAAM,YAAar0F,iBAAO,CAACk6pB,MAExCnokB,EAAWv6F,MAAM,CAAC,iBAAkB,KACvC+pB,EAASu/B,aAAOuzC,EAAM,iBAAkBr0F,iBAAO,EAAC,MAIpD,GAAI4lK,GAAS3wE,EAAUlD,YAAcA,IAAeu/E,mBAAQv/E,EAAYkD,EAAUlD,YAAa,CAAC,IAAD,UAaT,EAMD,EAMA,EAUrE,IAtBd,IANI,UAAAA,EAAWp3G,IAAI,oBAAf,eAA6BhI,MAAO,GAAKo/G,EAAWp3G,IAAI,UAAYk2B,oBAAiB+0J,QACvFrkJ,EAASu/B,aAAOuzC,EAAM,OAAQxjF,oBAAiB+0J,QAC/CrkJ,EAASv+B,gBAAK,YAAD,OAAa4iL,EAAMjrL,IAAI,YAIlC,UAACo3G,EAAWp3G,IAAI,oBAAhB,aAAC,EAA6BwF,SAASvJ,KAAKgnC,MAAMs4oB,8BACpDt/qB,KAAK4iH,SAAS,CACZ08jB,6BAA6B,UAAAnkkB,EAAWp3G,IAAI,oBAAf,eAA6Bqf,UAAW,IAIzE,KAAI,UAAC+3F,EAAWp3G,IAAI,oBAAhB,aAAC,EAA6BwF,SAASvJ,KAAKgnC,MAAMu4oB,6BACpDv/qB,KAAK4iH,SAAS,CACZ28jB,4BAA4B,UAAApkkB,EAAWp3G,IAAI,oBAAf,eAA6Bqf,UAAW,IAIxE,KAAI,UAAC+3F,EAAWp3G,IAAI,oBAAhB,aAAC,EAA6BwF,SAASvJ,KAAKgnC,MAAMw4oB,6BACpDx/qB,KAAK4iH,SAAS,CACZ48jB,4BAA4B,UAAArkkB,EAAWp3G,IAAI,oBAAf,eAA6Bqf,UAAW,IAQxE,IAJI,UAAA+3F,EAAWp3G,IAAI,oBAAf,eAA6BhI,MAAO,IAAMo/G,EAAWv6F,MAAM,CAAC,iBAAkB,KAChF+pB,EAASu/B,aAAOuzC,EAAM,iBAAkBr0F,iBAAO,EAAC,OAG7CmtK,EACH,IAAI,UAAAp7E,EAAWp3G,IAAI,oBAAf,eAA6BhI,OAAQ,GAAMkc,OAAKF,OAAOojG,EAAWp3G,IAAI,cAAgBo3G,EAAWp3G,IAAI,YAAc,CAAC,IAAD,EAC/GwwN,EAASp5G,EAAWp3G,IAAI,2BAC9B,IAAU,OAANwwN,QAAM,IAANA,OAAA,EAAAA,EAAQx4N,SAAR,UAAiBizL,EAAMjrL,IAAI,oBAA3B,aAAiB,EAAwBhI,MAAM,CAAC,IAAD,SAG3CstrB,GAAY,UAAGhrkB,EAAUlD,WAAWp3G,IAAI,oBAA5B,aAAG,EAAuCqf,QAGxDg9pB,IAFiBnoqB,OAAKF,OAAOojG,EAAWp3G,IAAI,aAAes6G,EAAUlD,WAAWp3G,IAAI,YAAcs6G,EAAUlD,WAAWv6F,MAAM,CAAC,WAAD,eAAqByoqB,MAEhIz2qB,iBAChB,OAAN2hN,QAAM,IAANA,KAAQ7nN,SAAQ,SAAC48qB,EAAehlrB,GAC9B,IAAM6/G,EAAgBhJ,EAAWp3G,IAAI,YAC/BwlrB,EAAuBpukB,EAAWp3G,IAAI,wBACtCmzN,EAAW/yG,EAAgBmlkB,EAAcvlrB,IAAI,aAAgBwlrB,GAAwBv6f,GAAOjrL,IAAI,YAChG2nO,EAAgBvnH,EAAgBqlkB,GAA0Btyd,EAAU5yN,GAAOklrB,GAA0Btyd,GAC3Gkpd,GAAkBA,GAAgB14qB,IAAhB,eAA4BpD,GAAOonO,MAEvD/gM,EAASu/B,aAAOuzC,EAAM,WAAY2ikB,KAClCpgrB,KAAK4iH,SAAS,CACZ08jB,4BAA2B,UAAEnkkB,EAAWp3G,IAAI,oBAAjB,aAAE,EAA6Bqf,QAC1Dm8pB,2BAA0B,UAAEpkkB,EAAWp3G,IAAI,oBAAjB,aAAE,EAA6Bqf,QACzDo8pB,2BAA0B,WAAErkkB,EAAWp3G,IAAI,oBAAjB,cAAE,GAA6Bqf,QACzDq8pB,kBAAmBpirB,QAAQ89G,EAAWp3G,IAAI,qBAGzC,GAAMo3G,EAAWp3G,IAAI,aAAqD,KAAtC,UAAAo3G,EAAWp3G,IAAI,oBAAf,eAA6BhI,QAAe6W,MAAI9N,MAAOq2G,EAAWp3G,IAAI,cAQ1G,IAAK1G,QAAQ89G,EAAWp3G,IAAI,aAAc,CAAC,IAAD,YAC/C/D,KAAK4iH,SAAS,CAAE68jB,mBAAmB,KAC9B/kf,mBAAO,WAACr8E,EAAUlD,WAAWp3G,IAAI,oBAA1B,cAAC,GAAuChI,KAAxC,WAA8Co/G,EAAWp3G,IAAI,oBAA7D,cAA8C,GAA6BhI,QAAS,WAAAo/G,EAAWp3G,IAAI,oBAAf,iBAA6BhI,OAAQ,EACnI4uC,EAASu/B,aAAOuzC,EAAM,iBAAkBr0F,iBAAO,EAAC,MACD,KAAtC,WAAA+xF,EAAWp3G,IAAI,oBAAf,iBAA6BhI,OACtC4uC,EAASu/B,aAAOuzC,EAAM,iBAAkBr0F,iBAAO,WAb6E,CAG9H,IACMqgqB,GAAiBD,GADNx6f,EAAMjrL,IAAI,aAE3B4mC,EAASu/B,aAAOuzC,EAAM,WAAYgskB,KAClC9+oB,EAASu/B,aAAOuzC,EAAM,YAAY,IAClCz9G,KAAK4iH,SAAS,CAAE68jB,mBAAmB,Q,kCAa3C,WACE,MAGIz/qB,KAAKkqC,MAHT,EACES,UAIFw2oB,EALA,EAEEA,qCAGiC,K,oBAm7DrC,WACE,MAMInhrB,KAAKkqC,MALPgvC,EADF,EACEA,QACA3qC,EAFF,EAEEA,MACAygJ,EAHF,EAGEA,MACAkof,EAJF,EAIEA,WACA3gf,EALF,EAKEA,QAKF,OAF6BhoJ,EAAMw7E,KAAKxgH,SAAS+rB,4BAIxC,eAAC,GAAD,CAAkB05J,MAAOA,EAAOkof,WAAYA,EAAY3ooB,MAAOA,IAItE,eAACsqC,EAAA,EAAD,CACEO,UAAWm9G,EAAO,UAAMr9G,EAAQ3hE,KAAd,YAAsB2hE,EAAQq9G,SAAYr9G,EAAQ3hE,KADtE,SAGE,kCAEGvX,KAAKsirB,cAGLtirB,KAAKyirB,oBAGLzirB,KAAK0irB,eAQH1irB,KAAKkqC,MAAcw/oB,sBAAwB1prB,KAAK4irB,mBAGlD5irB,KAAKqkrB,iBAGLrkrB,KAAKkmrB,eAGLlmrB,KAAKgnrB,gBAILhnrB,KAAKinrB,eAGLjnrB,KAAKiorB,kB,GA/+ESxjpB,iBA60FVwwC,qBACb00C,eACA1uC,aAzVa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,IAEzB4vC,MAAO,CACLpuC,QAASZ,EAAMZ,QAAQ,IAAK,IAE9BqvmB,cAAe,CACb13jB,WAAY/2C,EAAMZ,QAAQ,KAC1BwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BwomB,aAAc,CACZhnmB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BoX,WAAY,QAEdqtjB,uBAAwB,CACtB9tmB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B+nmB,iBAAkB,CAChBp8kB,MAAO,UACPs2B,WAAY,IACZpV,SAAU,GACVsP,WAAY,SACZjV,YAAa,EACbuT,cAAe,YACf,UAAW,CACT/P,gBAAiB,YAGrBw9jB,iCAAkC,CAChC1mmB,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAA0BY,EAAMZ,QAAQ,GAAxC,cAAgDY,EAAMZ,UAAtD,OAETssmB,iCAAkC,CAChC/+jB,UAAW,OACXvsC,MAAO,QAETinmB,MAAO,CACLhnmB,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,SAER8qmB,WAAY,CACV7pmB,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,QACNugD,OAAQ,qBAEV0rjB,oBAAqB,CACnB79iB,YAAaxtD,EAAMZ,QAAQ,GAC3B43C,cAAeh3C,EAAMZ,QAAQ,IAE/BmsmB,iBAAkB,CAChBnrmB,MAAO,OACP0mD,KAAM,aAER+kjB,0BAA2B,GAE3BpC,cAAe,CACbppmB,OAAQL,EAAMZ,QAAQ,EAAG,GAAI,EAAG,GAChC6sC,SAAU,YAEZ0/jB,qCAAsC,CACpC/qmB,QAAS,EACT0lC,YAAatmC,EAAMZ,QAAQ,IAE7B0tmB,kBAAmB,CACjB30jB,aAAcn4C,EAAMZ,QAAQ,GAC5BknC,YAAatmC,EAAMZ,QAAQ,IAC3B2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BoX,WAAY,QAEd8ojB,WAAY,CACV9pmB,OAAO,OAAD,OAASL,EAAMZ,UAAf,SAERsrmB,0BAA2B,CACzB7wjB,cAAe,YACf5N,SAAU,GACVlhB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,MAE/BsgkB,oBAAqB,CACnB59jB,UAAW,QAEb69jB,2BAA4B,CAC1B5pmB,QAAS,EACTJ,eAAgB,cAElBiqmB,kCAAmC,CACjCtpmB,SAAU,GAEZwpmB,8BAA+B,CAC7BpqmB,cAAe,UAEjBsqmB,qBAAsB,CACpB3qmB,QAAS,OACTC,SAAU,QAEZmqmB,oBAAqB,CACnBpqmB,QAAS,OACTnC,WAAY,UAEd6tmB,YAAa,CACXzqjB,UAAW,kBAEbk6D,QAAS,CACPz6G,QAASZ,EAAMZ,QAAQ,GACvB,WAAY,CACVwB,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B6sC,SAAU,IAEZ,+DAAgE,CAC9DrrC,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B,mBAAoB,CAClBiB,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAEjC,uBAAwB,CACtBknC,YAAatmC,EAAMZ,QAAQ,GAC3B+4C,aAAcn4C,EAAMZ,QAAQ,KAE9B,yBAA0B,CACxBouD,YAAaxtD,EAAMZ,QAAQ,GAC3B43C,cAAeh3C,EAAMZ,QAAQ,KAE/B,sBAAuB,CACrB0nD,KAAM,aAER,sCAAuC,CACrClmD,QAASZ,EAAMZ,QAAQ,GAAK,IAE9B,4BAA6B,CAC3BiB,OAAQ,gBAEV,mCAAoC,CAClCq4C,UAAW,GACX93C,QAAS,SAEX,sCAAuC,CACrCP,OAAQ,QACRc,SAAU,GAEZ,yCAA0C,CACxCP,QAAS,GAEX,mCAAoC,CAClCA,QAAS,aAEX,8BAA+B,CAC7B0lC,YAAa,EACb6R,cAAe,EACf/W,WAAY,GAEd,+BAAgC,CAC9B6K,SAAU,IAEZ,cAAe,CACbA,SAAU,IAEZ,wCAAyC,CACvCrrC,QAAS,GAEX,oBAAqB,CACnBA,QAAS,OAwLM,CAAEkzC,WAAW,IAChCW,cACAxwE,YAAgB,gBAChB0/D,mBArLsB,SAAC73E,EAAOyF,GAC9B,IAIMk3Y,EAFFl3Y,EADF8B,MAGsBoE,OAAOzyC,KAEzBu9G,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO87F,GAC/Cqoa,EAAqB3je,eAA+Bj3G,GAIpDg6oB,EAA2B58nB,gBAAyCpd,GAC1E,OAAO,aACLy2E,OACAkmU,YACAi+L,qBACAo/D,4BACGluoB,YAAyB,CAC1BqoE,WAAYC,wBAAcm+F,IAC1B+me,eAAgB1oiB,gBAChB8je,mCAAoC/8d,gBAHnC7rG,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAu9oB,kBAAmB,SAAA1H,GAAkB,OAAI71oB,EAAS,IAAIqqB,MAAwBwrnB,SAI/D,SAAC1zoB,EAAYC,EAAeN,GAAc,IAAD,UACpDuiJ,EAAQviJ,EAASuiJ,OAASp8K,cAAI,CAAEskN,SAAUtkN,kBAC1C0tqB,EAAiBxzoB,EAAWwzoB,eAC5Bpsd,EAAYllC,EAAMjrL,IAAI,cAAgBkU,iBACtCuoqB,EAAqBxxf,EAAMjrL,IAAI,oBAG/B8lrB,EAA8BxsrB,QAAQmjrB,GAAsBtsd,EAAUzmN,MAAK,SAAC45G,GAAD,OAAcA,EAAStjH,IAAI,QAAUy8qB,MAChHtpd,EAAWloC,EAAMjrL,IAAI,YAAYiF,KAAI,SAAA06P,GACzC,OAAOA,EAAQh8P,IAAI,WAAYi5qB,aAAsB,CAAEL,iBAAgB58a,UAAS88a,2BAE5EsJ,EAA2B96f,EAAMtnL,IAAI,WAAYwvN,GAEjDsoJ,EAAgBtrJ,EAAUn4N,MAAQ,EAAIizL,EAAMjrL,IAAI,YAAc+lrB,EAAyB/lrB,IAAI,YAI3FgmrB,EAAoBt9oB,EAAS8pJ,SAAYiqf,IAAuB/zoB,EAAS62oB,iBACzE0G,EAAkB,UAAGl9oB,EAAWquE,kBAAd,aAAG,EAAuBp3G,IAAI,2BAChDkmrB,EAAmBF,GACF,OAAlBC,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBjmrB,IAAI0oC,EAAS62oB,qBAAjC,OAAsD0G,QAAtD,IAAsDA,OAAtD,EAAsDA,EAAoBjmrB,IAApB,UAA2B0oC,EAAS62oB,oBAC3F,KACE4G,GAAsC,OAAhBD,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBlmrB,IAAI,cAAey7W,EAC3D2qU,EAAsB19oB,EAAS8pJ,SAAW9pJ,EAAS62oB,iBACrDkG,GAA0BU,EAAqBz9oB,EAAS62oB,kBACxDkG,GAA0BhqU,GAExB4qU,EAA4C5qU,EAAc7zW,QAAO,SAACutI,EAAKwqH,EAASN,GAEpF,OAD4BM,EAAQ9iP,MAAM,CAAC,kBAAmB,uBAAwB3I,kBAC3D1M,QAAO,SAAC8+qB,GAAD,uBAAUA,EAAKtmrB,IAAI,sBAAnB,YAA2C4H,QAAO,SAACiiR,EAAMy8Z,EAAMlurB,GAC/F,OAAOyxR,EAAKlmR,IAAI2irB,EAAKtmrB,IAAI,WACxBm1I,KACFtmI,iBAEGqjN,EAAcjnC,EAAMjrL,IAAI,eAExBumrB,EAAiBr0d,IAAW,UAAIA,EAAYtqN,QAAO,SAAC44R,EAAKpqC,EAAOh+P,GACpE,IAAMqrrB,EAAartb,EAAMp2P,IAAI,QAC7B,OAAOwgS,EAAIn4R,KAAKo7qB,KACfvvqB,yBAH+B,aAAI,EAG1B1M,QAAO,SAAC4uP,GAAD,OAAWiwb,EAA0CnmrB,IAAIk2P,OAEtEljC,EAAejoC,EAAMjrL,IAAI,gBAEzBwmrB,EAAqBtzd,GAAgBA,EAAajuN,KAAI,SAACi7G,GAC3D,OAAOA,EAASlgH,IAAI,YAGhBymrB,EAA8B,UAAG19oB,EAAWquE,kBAAd,aAAG,EAAuBp3G,IAAI,2BAC5D0mrB,EAA2B,UAAG39oB,EAAWquE,kBAAd,aAAG,EAAuBp3G,IAAI,wBACzD2mrB,EAAoB,UAAG59oB,EAAWquE,kBAAd,aAAG,EAAuBp3G,IAAI,iBAKlD4mrB,EAAwB79oB,EAAWquE,YAAcruE,EAAWquE,WAAWp/G,KAAO,EAc9E6urB,EAAY,SAAC/zb,EAAeyT,GAChC,OAAKx9N,EAAWk0oB,0BACZpuqB,MAAI9N,MAAM4lrB,IAAyBA,EAAqBzmrB,IAAI4yP,GACvD6zb,EAAqB3mrB,IAAI8yP,GAFiByT,GAO/Cugb,EAAuBzhqB,iBAAO,CAClC0hqB,WAAYF,EAAU,aAAc,EAAC,IACrCG,kBAAmB,EAAC,GACpBt1d,gBAAiBm1d,EAAU,kBAAmB,EAAC,IAC/CryiB,SAAUqyiB,EAAU,WAAY57f,EAAMjrL,IAAI,kBAAoBirL,EAAMjrL,IAAI,iBAAiBhI,KAAO,EAAC,GAAQ,IACzGk4N,YAAa22d,EAAU,cAAe,EAAC,IACvCt1d,WAAYs1d,EAAU,aAAc,EAAC,IACrC71d,QAAS61d,EAAU,UAAW,EAAC,IAC/B11d,cAAe01d,EAAU,gBAAiB57f,EAAMjrL,IAAI,kBAAoBirL,EAAMjrL,IAAI,iBAAiBhI,KAAO,EAAC,GAAQ,IACnH06N,aAAcm0d,EAAU,eAAgB57f,EAAMjrL,IAAI,iBAAmBirL,EAAMjrL,IAAI,gBAAgBhI,KAAO,EAAC,GAAQ,IAC/GivrB,eAAgBJ,EAAU,iBAAkB57f,EAAMjrL,IAAI,mBAAqBirL,EAAMjrL,IAAI,kBAAkBhI,KAAO,EAAC,GAAQ,IACvH+9qB,mBAAoB8Q,EAAU,qBAAsB,EAAC,IACrD5Q,SAAU4Q,EAAU,WAAY,EAAC,IACjCK,aAAcL,EAAU,eAAgB,EAAC,IACzCM,aAAcN,EAAU,eAAgB,EAAC,IACzC1zd,SAAUizd,EACVtmkB,UAAW0mkB,EACXrqrB,KAAM,QACNirrB,cAAeP,EAAU,gBAAiB,QAC1C/lU,oBAAqB71L,EAAMpuK,MAAM,CAAC,WAAY,EAAG,kBAAmB,WAAY,gBAAiB,wBAA0B,EAAC,GAAQ,GACpIwqqB,aAAcp8f,EAAMpuK,MAAM,CAAC,WAAY,EAAG,kBAAmB,WAAY,gBAAiB,iBAAmB,EAAC,GAAQ,GACtHyqqB,iBAAkBr8f,EAAMpuK,MAAM,CAAC,WAAY,EAAG,kBAAmB,WAAY,gBAAiB,qBAAuB,EAAC,GAAQ,GAC9H61S,WAAYznI,EAAMpuK,MAAM,CAAC,WAAY,EAAG,kBAAmB,WAAY,gBAAiB,eAAiB,EAAC,GAAQ,GAClHssN,SAAU,EAAC,GAGXs6c,WAAY8C,EACZ1C,WAAY0C,EAGZ//W,QAASqgX,EAAU,UAAW99oB,EAAW80kB,mBAAmBhhmB,MAAM,CAAC,OAAQ,0BAA4B,SAAW,QAClH0qqB,mBAAoBV,EAAU,qBAAsB99oB,EAAW80kB,mBAAmBhhmB,MAAM,CAAC,OAAQ,0BAA4BksB,EAAW80kB,mBAAmBhhmB,MAAM,CAAC,OAAQ,uBAAyB,MAGnM2qqB,eAAgBX,EAAU,iBAAkBf,EAA8B,EAAC,GAAQ,IACnF31d,UAAW21d,EAA8B5xqB,eAAK,CAACuoqB,IAAuBvoqB,iBACtEsoqB,yBAAuD,OAA9BiK,QAA8B,IAA9BA,OAAA,EAAAA,EAAgCzurB,MAAOyurB,EAAiC,GAIjGjB,qBAAoB,OAAEkB,QAAF,IAAEA,IAA+B,KACrDxmkB,SAAUx3E,EAAS8pJ,QAAWiqf,IAAuB/zoB,EAAS62oB,iBAAoBuG,EAGlFhJ,cAAe6J,GAAwB,OAMnCpskB,EAAiB7xE,EAAS8pJ,SAAWo0f,EACvCE,EAAqBp6qB,MAAMq8B,EAAWquE,YACtC0vkB,EAKJ,OAAO,mDACFp+oB,GACAK,GACAC,GAHL,IAIEiiJ,MAAOklC,EAAUn4N,KAAO,EAAIizL,EAAQ86f,EACpCxrkB,gBACA4pkB,kBARwB,SAACr3W,GAAD,OAAgBA,GAAc9jS,EAAcm7oB,kBAAkBr3W,SAkBxFtJ,oBAAU,CAIRC,kBAAkB,EAClBC,oBAAoB,IAXTxyP,CAab4pmB,IAGF,SAAS2K,GAA0Btyd,EAAU25G,GAC3C,OAAO35G,GAAYA,EAAS3rN,QAAO,SAACm4P,GAAD,OAAcA,EAAQ3/P,IAAI,YAAYhI,MAAQ2nQ,EAAQ3/P,IAAI,YAAY0J,MAAK,SAACupH,GAAD,OAAaA,EAAQjzH,IAAI,MAAQ,MAAO2/P,EAAQ3/P,IAAI,WAAS4H,QAAO,SAACutI,EAAKwqH,EAASN,GAE/L,IAAMvrI,GAAY6rI,EAAQ3/P,IAAI,aAAekU,kBAAQ1M,QAAO,SAAAyrH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,KAErFynrB,EAAyB3zjB,EAAS7uH,KAAI,SAACguH,EAAoCiD,GAC/E,IAAMynP,EAAoB1qP,EAAQjzH,IAAI,gBAEtC,GAAI6O,MAAI9N,MAAM48W,GAAe,CAC3B,IAAM+pU,EAAwB/pU,EAAa39W,IAAI,WACzC2nrB,EAAyBhqU,EAAa39W,IAAb,UAAoB8sU,IACnD,GAAuC,mBAA3B66W,GAAwCA,GAA8D,mBAA3BA,GAAwCD,EAC7H,OAAOz0jB,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAAe,IAAMnpI,EAA1D,qBAEJ,GAAIynP,EACT,OAAO1qP,EAAQjzH,IAAI,kBAAZ,sBAAqCq/P,EAAe,IAAMnpI,EAA1D,mBAGR1uH,QAAO,SAAAsM,GAAC,YAAU/b,IAAN+b,KAIT8zqB,EADSjob,EAAQ9iP,MAAM,CAAC,kBAAmB,cAAe3I,kBACvCjP,KAAI,SAAC6tP,EAAOk1H,GACnC,GAAIl1H,EAAM9yP,IAAI,iBAAmB8yP,EAAM9yP,IAAI,aACzC,OAAO8yP,EAAM9yP,IAAI,SAElBwH,QAAO,SAAAsM,GAAC,YAAU/b,IAAN+b,KAIT+zqB,EADsBlob,EAAQ9iP,MAAM,CAAC,kBAAmB,uBAAwB3I,kBACpC1M,QAAO,SAAC8+qB,GAAD,uBAAUA,EAAKtmrB,IAAI,sBAAnB,YAA2CiF,KAAI,SAACqhrB,EAAMlurB,GAC7G,OAAOkurB,EAAKtmrB,IAAI,WAGZm6W,EAAYx6G,EAAQ3/P,IAAI,aACxB0+W,EAAe/+G,EAAQ3/P,IAAI,gBAEjC,OAAOm1I,EAAI9sI,KAAKgd,iBAAO,CACrByuG,SAAU2zjB,EACVp1W,OAAQu1W,EACRxxb,MAAOyxb,EACP1tU,YACAuE,eACAhB,KAAM/9G,EAAQ3/P,IAAI,QAClBm/qB,iBAAkB7lrB,SAA8B,OAAtBmurB,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBzvrB,SAAS,OAAC87H,QAAD,IAACA,OAAD,EAACA,EAAU97H,OAAQ2nQ,EAAQ3/P,IAAI,cAG3FkU,kB,IC98FO4zqB,G,uJCpGGlokB,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,yLACD,e,sBCKE0pH,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAG5CsvM,OAAQ,CACJxpJ,OAAQ9lD,EAAM8lD,OAAOkggB,MAAQ,OA8GtB4qD,GALI,CACfC,KAtGkB,SAAC,GAA0E,IAAxE9+C,EAAuE,EAAvEA,QAAS++C,EAA8D,EAA9DA,oBAAqBC,EAAyC,EAAzCA,mCAC7C/ymB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAwB0Y,IAAMia,UAAS,GAAvC,mBAAOisD,EAAP,KAAa4lB,EAAb,KACM27jB,EAAYznpB,IAAMyG,OAA0B,MAK5Cg8F,EAAc,SAACC,GAGb+kjB,EAAUpkpB,SAAWokpB,EAAUpkpB,QAAQliB,SAASuhH,EAAMn6G,SAG1DujG,GAAQ,IAGZ,OAAKy7jB,EAaD,kCACI,eAACtxjB,GAAA,EAAD,CAAY3+H,KAAK,QAAQN,IAAKywrB,EAAWrnkB,QA1B5B,WACjB0L,GAAQ,SAAC47jB,GAAD,OAAeA,MAyBnB,SACE,eAAC,KAAD,MAEF,eAACj5jB,EAAA,EAAD,CACI95C,UAAWF,EAAQsxM,OACnBr3J,SAAU+4jB,EAAUpkpB,QACpB6iE,KAAMA,EACNwf,UAAU,aACVqK,YAAY,EACZ61J,UAAW,CACPpgR,KAAM,CAAEqgR,SAAS,GACjB8ha,gBAAiB,CAAE9ha,SAAS,EAAM+ha,kBAAmB,aAR7D,SAWK,gBAAGhmjB,EAAH,EAAGA,gBAAH,OACG,eAACkhJ,EAAA,EAAD,2BAAUlhJ,GAAV,aACI,eAACxU,EAAA,EAAD,CAAOZ,UAAW,EAAlB,SACI,eAAC+vM,EAAA,EAAD,CAAmBC,YAAa/5L,EAAhC,SACI,gBAAChL,EAAA,EAAD,CAAUowjB,cAAe3hlB,EAAzB,UACI,eAAC4R,EAAA,EAAD,CAAUsI,QAAS,kBAAM0L,GAAQ,IAAjC,SACI,eAACtG,EAAA,EAAD,CAASC,MAAOn+F,EAAE,mCAAlB,SACI,wBAAOgpS,QAASk4U,EAAS3xhB,MAAO,CAAE8+J,WAAY,sBAA9C,SAAuEruP,EAAE,kCAGjF,eAACwwF,EAAA,EAAD,CACIsI,QAAS,WACPonkB,IACA17jB,GAAQ,IAHd,SAMOxkG,EAAE,gEA1CrC,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,mCAAoC,aAAYA,EAAE,mCAAoCo+F,UAAU,MAAlH,SACE,wBAAO4qM,QAASk4U,EAAhB,SACE,eAACvygB,GAAA,EAAD,CAAY3+H,KAAK,QAAQu9E,UAAU,OAAnC,SACE,eAAC,KAAD,WAgFVwnQ,OA9BW,SAAC,GAAiB,IAAfmsT,EAAc,EAAdA,QACNlhnB,EAAM+xB,YAAe,gBAArB/xB,EACR,OACI,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qCAAsC,aAAYA,EAAE,qCAAsCo+F,UAAU,MAAtH,SACE,wBAAO4qM,QAASk4U,EAAhB,SACE,eAACvygB,GAAA,EAAD,CAAY3+H,KAAK,QAAQu9E,UAAU,OAAnC,SACE,eAAC,GAAD,WAyBVkvC,OAlBW,SAAC,GAA4B,IAA1BtL,EAAyB,EAAzBA,SAAUgpN,EAAe,EAAfA,SAChBn6S,EAAM+xB,YAAe,gBAArB/xB,EAGR,OACI,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,kCAAmC,aAAYA,EAAE,kCAAmCo+F,UAAU,MAAhH,SACE,gCACE,eAACuQ,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAUA,EAAU5B,MAAO,CAAE4M,WAAY,GAAKrD,QAASqhN,EAAhF,SACE,eAAC,KAAD,YC7GCviN,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,uDACD,W,8BCiBE0pH,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC5CqxmB,iBAAkB,CACd52jB,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEhBssJ,eAAgB,CACZ98K,MAAO/qB,EAAM+pC,QAAQ92G,MAAM6zQ,MAE/Bg9G,YAAa,CACTx9Q,YAAa,IAEjB00iB,eAAgB,CACZ75kB,SAAU,OA0FHmwmB,GAvFoB,SAAC,GAS7B,IARHzpkB,EAQE,EARFA,UACAk8R,EAOE,EAPFA,SACAtsF,EAME,EANFA,SACA85X,EAKE,EALFA,iBACA1wrB,EAIE,EAJFA,KACA2wrB,EAGE,EAHFA,iBACAx4X,EAEE,EAFFA,kBACAy4X,EACE,EADFA,UAEQ5gqB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KAyBVo9jB,EAAc7pkB,IAAc2pkB,EAC5B,gBAAC7zmB,EAAA,EAAD,CACEW,WAAW,EACXoB,GAAI,EACJJ,KAAK,SACLvB,WAAW,SACXW,MAAM,EALR,UAOE,eAACi7O,GAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoB96O,UAAWF,EAAQg9kB,iBAC1FhiW,GAAqB,gBAAC16M,EAAA,EAAD,WAAa06M,EAAkB95D,QAAQ,GAAvC,UAExB,KACAyyb,EAAeH,GAAoB3pkB,EACnC,gBAAClqC,EAAA,EAAD,CACEO,UAAWF,EAAQ6pM,eACnBvpM,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXW,MAAM,EALR,UAOE,eAACkzmB,GAAD,CAAS1zmB,UAAWF,EAAQ8lT,cAC5B,eAACxlR,EAAA,EAAD,CAAYvT,MAAM,UAAlB,mBAAgCymlB,EAAhC,YAAoD3gqB,EAAE,kCAExD,KACAghqB,EAAe9tS,GAAYljZ,GAAS,gBAACy9G,EAAA,EAAD,YAAc73G,OAAO5F,GAAQg9B,iBAAcqhO,QAAQ,GAAnD,QAC1C,OACI,gBAAC41B,GAAA,EAAD,CAAWgpE,MAAM,MAAjB,UACKj2O,EAAY6pkB,EACP,uBAAKxzmB,UAAWF,EAAQqzmB,iBAAxB,UACGttS,EArDS,SAACr1E,GACvB,OAAQA,GACN,IAAK,QACH,OAAO,gBAAC/wP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACP,eAAC4uP,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,0BACPy6F,IAAK+hN,OAEP,eAAC/uN,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAAUqV,MAAO,CAAC4M,WAAY,GAAlE,SAAuEn8F,EAAE,yBAE3E,IAAK,QACH,OAAO,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACL,eAAC4uP,GAAA,EAAD,CACEj/L,IAAKt9G,EAAE,oBACPy6F,IAAKgiN,OAEP,eAAChvN,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAAUqV,MAAO,CAAC4M,WAAY,GAAlE,SAAuEn8F,EAAE,yBAI7E,QACE,OAAO,MAgCa49S,CAAkB8iX,GAAoB,KAE9C95X,EACA,eAACrlM,GAAA,EAAD,CACItgG,OAAO,SACPogG,KAAM6xR,EACNlwE,UAAU,OACV9oO,MAAM,UACNyT,QAAQ,QALZ,SAOKi5M,IACK,MAEbo6X,EACAp6X,EAAW,eAACn5M,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQqzmB,iBAAjD,SAAgFxgqB,EAAZ4gqB,EAAc,iCAAsC,yCAAuD,QAGlME,M,+EJ/BAtze,GAAY,wBAQZyze,GACE,CAAC,aAAc,cAAe,aADhCA,GAEK,CAAC,cAAe,YAAa,mBAFlCA,GAGO,CAAC,WAAY,wB,SAGrBnB,K,oBAAAA,E,6BAAAA,Q,SAsENoB,G,kDAgBJ,WAAY/ipB,GAAQ,IAAD,8BACjB,cAAMA,IAfDlD,MAAQ,CACbg4oB,gBAAiB,GACjB7wqB,MAAO,KACPwiW,aAAa,EACbz8C,kBAAmB,KACnB+qX,UAAW,KACXiO,iBAAkB,GAClBR,iBAAkB,GAClBS,oBAAqB,GACrBC,sBAAuB,GACvBnkX,eAAe,EACfwG,YAAax3T,kBAGI,EAIZ+pqB,mBAAqB,SAACC,EAAmBC,GAC9C,MAAqC,EAAKh4oB,MAAlCk4oB,EAAR,EAAQA,aAAcr2pB,EAAtB,EAAsBA,EAAGmtD,EAAzB,EAAyBA,QAEzB,OAAIkpmB,IAA+B,IAAfF,EAEhB,uBAAK5mkB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,gBAAiBzC,WAAY,SAAUqC,MAAO,QAA7F,UACE,eAACk+B,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQuukB,QAA5C,SAAsDw6B,IACtD,eAACh4jB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iCAAlB,SACE,eAAC44F,EAAA,EAAD,CAAQjL,QAAQ,OAAOtgC,UAAWF,EAAQmpmB,iBAAkBx9jB,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBk+jB,EAAa3grB,MAAMC,QAAQwgrB,GAAcA,OAAapmrB,IAAzJ,SACGiwB,EAAE,iCAMN,eAACytF,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQuukB,QAA5C,SAAsDw6B,KAnB5C,EAgKZoL,wCAA0C,SAAC9jX,EAA2BC,EAAmB8jX,GAC9F,MAA2D,EAAKpjpB,MAAxDqjpB,EAAR,EAAQA,sBAAuB7jX,EAA/B,EAA+BA,wBAKzBzzM,IAFyC,OAArBs3jB,QAAqB,IAArBA,OAAA,EAAAA,EAAuB3sqB,MAAM,CAAC,UAAW,SAAU8oT,EAAwB9oT,MAAM,CAAC,UAAW,UAChFue,kBAAekB,OAElDkpS,EAAW3oT,MAAM,CAAC,eAAgB,QAAS4oT,KAAeD,EAAW3oT,MAAM,CAAC,eAAgB,KAAM4oT,IAClGD,EAAW3oT,MAAM,CAAC,eAAgB,QAAS4oT,KAAeD,EAAW3oT,MAAM,CAAC,eAAgB,KAAM4oT,IAChGgkX,EAAYF,IAAY,OAAIr3jB,QAAJ,IAAIA,OAAJ,EAAIA,EAAOlyH,IAAIuprB,IAC7C,OAAOA,EAAeE,EAAYv3jB,GA1KjB,EA6KZqsjB,YAAc,WACnB,MAGI,EAAKp4oB,MAFPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAGF,OACE,gBAACglG,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIE,eAACgB,EAAA,EAAD,CACEC,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBALL,SAOG,EAAK+gpB,mBAAmBj2pB,EAAE,qCAA1B,YAAoEihqB,OAEvE,eAAC38jB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,eAACX,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,aACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,cACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,gCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,YACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,8BACTk6E,MAAO,wBAzOJ,EAwRZwnlB,eAAiB,WACtB,MAGI,EAAKvjpB,MAFPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAGF,OACE,gBAACglG,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIE,eAACgB,EAAA,EAAD,CACEC,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBALL,SAOG,EAAK+gpB,mBAAmBj2pB,EAAE,wCAA1B,YAAuEihqB,OAE1E,eAAC38jB,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQspmB,kCAFlB,SAKE,gBAAC3pmB,EAAA,EAAD,CACEW,WAAW,EADb,UAGE,eAACX,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,cACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,YACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,qCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC,QAAD,CACEprE,KAAK,kBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,2CACTk6E,MAAO,wBApVJ,EA8VZynlB,iBAAmB,WACxB,MAII,EAAKxjpB,MAHPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACAjjK,EAHF,EAGEA,EAGI4hqB,EAAoC3+f,GAASA,EAAMjrL,IAAI,aAC7D,EAAsC,EAAKmmC,MAAnCqsJ,EAAR,EAAQA,QAAS+sf,EAAjB,EAAiBA,iBAEXpvd,EAAa39B,GAAW+sf,GAAoBqK,EAC9CA,EAAapirB,QAAO,SAAC1F,GAAD,OAAsBA,EAAE9B,IAAI,QAAUu/qB,KAC1DqK,EAEEC,EAAiB15d,GAAaA,EAAUlrN,KAAI,SAACq+G,EAAyBlrH,GAC1E,IAAMgqH,EAAYkB,EAAStjH,IAAI,aACzBqiH,EAAWiB,EAAStjH,IAAI,YACxBmiH,EAAemB,EAAStjH,IAAI,gBAC5ByK,EAAO,CAAC23G,EAAWC,GAAU76G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,KAAK+8G,OACtDy5S,EAAezpa,EAAO,CAACA,EAAM03G,GAAc36G,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,OAASykG,EACxE2qN,EAAaxpN,EAAStjH,IAAI,MAEhC,OACE,eAAC80E,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAAC,QAAD,CACEprE,KAAK,WACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAOm3Y,EACPhyU,MAAO,UACPu6J,aAAcqwE,EACdhkN,YAAY,MATX1wH,EAAQ,eAchBiQ,KACD,eAACysE,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAAC,QAAD,CACEprE,KAAK,WACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE,+BACTk6E,MAAO,UACPu6J,aAAc,GACd3zI,YAAY,OATV,IAaRjkH,WAAWhG,UAOPirrB,EAAYt3f,EAAU,uCAAyC,kCAC/Du3f,EAAmBv3f,EACrB,2CACA,8CACEw3f,EAAax3f,EACf,8CACA,iDAEJ,OACE,gBAACxlE,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIE,eAACgB,EAAA,EAAD,CACEC,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBALL,SAOG,EAAK+gpB,mBAAmBj2pB,EAAE8hqB,GAA1B,YAA0Cb,OAE7C,eAAC38jB,EAAA,EAAD,UAEE,gBAACx3C,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAAC,QAAD,CACEhrE,KAAK,sBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAE+hqB,GACT7nlB,MAAO,UACPu6J,aAAcqrb,GAA6BmC,SAC3CnhkB,YAAY,KAGhB,eAAC,QAAD,CACEr+G,KAAK,sBACL8qE,UAAW8iS,KACXlyU,MAAO,CACLpJ,MAAO/U,EAAEgiqB,GACT9nlB,MAAO,UACPu6J,aAAcqrb,GAA6BoC,aAC3CphkB,YAAY,SAIhB0pE,GACA,gBAAC,WAAD,WACE,eAAC5/D,GAAA,EAAD,CAASrb,MAAO,CAAEhgC,MAAO,OAAQC,OAAQ,cACxCqymB,cA9cI,EAudZ7K,oBAAsB,SAAC3/a,EAAcvrI,EAAUzvH,GACpD,MAGI,EAAK8hC,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAIAuhkB,EACE,EAAKh4oB,MADPg4oB,gBAII30P,EAAaxyT,EAAS7uH,KAAI,SAACguH,EAAwB76H,GACvD,OAAO66H,EAAQjzH,IAAI,iBAAZ,sBAAoCq/P,EAAe,IAAMjnQ,EAAzD,mBAIT,GAAI6irB,EAAgBz1qB,SAAS65P,GAAe,CAC1C,IAAM8qb,EAA0BlP,EAAgBzzqB,QAAO,SAAC4irB,GACtD,OAAOA,IAAmB/qb,KAG5B,EAAKxgJ,SAAS,CACZo8jB,gBAAiBkP,IAEnBvjpB,EAASu/B,aAAOuzC,EAAD,mBAAmB2lJ,EAAnB,cAA6C,UAE5D47a,EAAgB5yqB,KAAKg3P,GACrB,EAAKxgJ,SAAS,CACZo8jB,oBAEFr0oB,EAASu/B,aAAOuzC,EAAD,mBAAmB2lJ,EAAnB,cAA6CinL,KArf7C,EAyfZ44P,6BAA+B,SAAC7/a,EAAcvrI,GACnD,IACE1c,EACE,EAAKjxE,MADPixE,WAGIkvU,EAAaxyT,EAAS7uH,KAAI,SAACguH,GAC/B,OAAOA,EAAQjzH,IAAI,SAGfo/qB,EAAoBhokB,GAAcA,EAAWv6F,MAAM,CAAC,WAAYwiP,EAAc,aAGpF,GAAI+/a,EACF,OAAIA,EAAkBpnrB,OAASsub,EAAWtub,MAtgB3B,EA8gBZqyrB,aAAe,SAAChmrB,EAAQsuT,EAAuBy2X,EAA6B3jX,GACjF,MAQI,EAAKt/R,MAPP+9D,EADF,EACEA,OACAt9D,EAFF,EAEEA,SACAqkJ,EAHF,EAGEA,MACAu+f,EAJF,EAIEA,sBACA7jX,EALF,EAKEA,wBACA39S,EANF,EAMEA,EAKAmhqB,GAXF,EAOErgoB,cAKE,EAAK7lB,MADPkmpB,kBAGImB,EAAWjmrB,EAAE4kB,OAAO2wE,MAAM,GAChC,GAAK0wlB,EAAL,CAIA,IAAM//E,EAAO+/E,EAASv+qB,MAAM,EAAG,GAEzBw+qB,EAAa,IAAIC,WACvBD,EAAWE,UAAY,SAACthT,GACtB,GAAIA,EAAQlgX,OAAOpZ,kBAAkBm6K,YAKnC,GAAe,eAJF,IAAIv4B,WAAW03O,EAAQlgX,OAAOpZ,QAASmhe,SAAS,EAAG,GAC7Cppe,QAAO,SAACutI,EAAKx9I,GAAN,OAAgBw9I,EAAMx9I,EAAMuF,SAAS,MAAK,IAGvC,CAC3B,IAAMlF,EAAOsyrB,EAAStyrB,KAChB42T,EAAW07X,EAAS7/qB,KACpB6jN,EAAUrjC,EAAMjrL,IAAI,MAE1B,GAAIhI,EAAOq9B,uBAKT,YAJA,EAAKwpF,SAAS,CACZ8pkB,iBAAkB/5X,EAClBw6X,wBAIF,EAAKvqkB,SAAS,CACZ8pkB,iBAAkB,GAClBS,wBAIJ,IAAMzsW,EAAgBz4O,EAAOJ,QAAQ,CACnCvB,QAAS,OACTC,SAAU,aACVo6O,SAAS,EACT93N,WAAW,EACXC,WAAW,IAEP83N,EAAM,IAAIrsI,eACVv5J,EAAO,IAAI6lS,SAEjB7lS,EAAKy0G,OAAO,OAAQ4+hB,GAEpBztW,EAAIj2O,KAAK,OAAQ+1O,GAEjBE,EAAIE,OAAO93O,iBAAiB,YAAY,SAACm+B,GACvC,IAAM45M,EAAUhkV,KAAKo/E,MAAOgrD,EAAM2lB,OAAS3lB,EAAMgzH,MAAS,KAE1D+yb,EAAiB9grB,KAAKsqT,GACtB,EAAK9zM,SAAS,CACZsxM,kBAAmB6sB,EACnBmsW,wBAIJtsW,EAAII,YAAc,WAChB,EAAKp+N,SAAS,CAAE+tP,aAAa,KAG/B/vB,EAAI53O,iBAAiB,WAAW,WAC9Bu9B,aAAa,EAAKv/F,MAAMi4oB,WACxB,MAA2Bh+V,aAAmBL,GAAtC15S,EAAR,EAAQA,QAAS/4B,EAAjB,EAAiBA,MACjB,GAAIA,EACF6Z,QAAQ7Z,MAAM,uBAAwBA,GACtC,EAAKy0G,SAAS,CAAEz0G,MAAM,UAAD,OAAYA,EAAMA,MAAQA,EAAMA,MAAQ,iBAAmB+lT,kBAAmB,EAAGi5X,oBAAqB,SACtH,CACL,EAAKvqkB,SAAS,CACZsxM,kBAAmB,EACnBi5X,oBAAqB,KAEvB,IACMz5X,EAD2CxsR,EAAQusL,KAAK91H,MAAM,GACxC18D,GAGtBwtpB,IAF6C,OAArBlB,QAAqB,IAArBA,OAAA,EAAAA,EAAuB3sqB,MAAM,CAAC,UAAW,SAAU8oT,EAAwB9oT,MAAM,CAAC,UAAW,UAEtEue,kBAAekB,OAAS,QAAU,QACvFsK,EAAS,IAAIk/C,KAAoC,CAC/C6sO,gBACAhD,SACArhG,UACA2iG,SAAUwU,EACVI,aAAc6kX,SAKpB7tW,EAAIr6L,KAAKvrG,QAETrQ,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,2BACX65E,SAAU,YAMlB0olB,EAAWI,kBAAkBpgF,GAC7BlmmB,EAAE4kB,OAAOtxB,MAAQ,OA9nBA,EAioBZizrB,sBAAwB,SAAC92jB,GAC9B,IACE+2jB,EACE,EAAK1kpB,MADP0kpB,aAEF,OAAO/2jB,EAAS7uH,KAAI,SAACguH,GACnB,IAAM0/L,EAAgB1/L,EAAQjzH,IAAI,iBAC5B8qrB,EAA6BD,EAAa7qrB,IAAI8K,OAAO6nT,IAC3D,OAAO1/L,EAAQtvH,IAAI,eAAgBmnrB,MAClCtjrB,QAAO,SAAAsM,GAAC,OAAS,MAALA,MAzoBE,EA4oBZi3qB,wBAA0B,WAC/B,IAIMC,EAFF,EAAK/npB,MADPompB,sBAGmDzhrB,QAAO,SAACutI,EAAKn9I,GAChE,OAAOm9I,EAAMv3I,QAAQ5F,EAAOg9B,iBAAcqhO,QAAQ,MACjD,GAEG40b,EAAyBrtrB,OAAO,IAAMotrB,GAAwB30b,QAAQ,GAE5E,OAAOr9P,KAAKsvP,KAAK1qP,OAAOqtrB,KAvpBP,EA0pBZ9I,aAAe,WAAO,IAAD,MAC1B,EAQI,EAAKh8oB,MAPPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MACA/mF,EAHF,EAGEA,OACAl8E,EAJF,EAIEA,EACAovF,EALF,EAKEA,WACA0nN,EANF,EAMEA,oBACAkH,EAPF,EAOEA,4BAGF,EAMI,EAAK/iS,MALPktR,EADF,EACEA,kBACAw4X,EAFF,EAEEA,iBACAS,EAHF,EAGEA,oBACAC,EAJF,EAIEA,sBACApO,EALF,EAKEA,gBAGIiQ,EAAc5xrB,QAAO,OAAC89G,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,gBAEtCmrrB,EAA6B9B,EAAsBvrrB,OACnDktrB,EAAyB3B,EAAsBzhrB,QAAO,SAACutI,EAAKn9I,GAChE,OAAOm9I,EAAMv3I,QAAQ5F,EAAOg9B,iBAAcqhO,QAAQ,MACjD,GAGG40b,EAAyBrtrB,OAAO,IAAMotrB,GAAwB30b,QAAQ,GACtEljC,EAAWloC,GAASA,EAAMjrL,IAAI,YAE9BorrB,EAA6C,EAAKjlpB,MAAcilpB,sBAChE/I,EAAgBlvd,GAAYA,EAASluN,KAAI,SAAC06P,EAASN,GAAkB,IAAD,YAClEvrI,EAAW6rI,EAAQ3/P,IAAI,YACvBqrrB,EAAiB,EAAKT,sBAAsB92jB,GAAUtsH,QAAO,SAACyrH,GAClE,OAA2B,IAAvBA,EAAQjzH,IAAI,QACZorrB,EAEKA,EAAsBlrrB,IAAI+yH,EAAQjzH,IAAI,mBAEvC1G,QAAQ25H,EAAQjzH,IAAI,qCAG9B,GAAK1G,QAAQ+xrB,EAAerzrB,MAA5B,CAOA,IAAM0mX,EAAe/+G,EAAQ3/P,IAAI,gBAE3BsrrB,EAAkBJ,EAAcG,EAAe7jrB,QAAO,SAACyrH,EAAkC76H,GAE7F,QADoB66H,GAAW,EAAKq2jB,wCAAwCr2jB,EAAS,oBAElFo4jB,EAECxoU,EAAe,CACnB,CACEtiX,IAAK,UACLg3E,MAAO,IACPg0mB,WAAYvjqB,EAAE,4BACdwjqB,WAAY,YAA0E,IAAvEv4jB,EAAsE,EAAtEA,QAASiD,EAA6D,EAA7DA,aAA4Bu1jB,EAAiC,EAA/Cpsb,aAA6Bs5M,EAAkB,EAAlBA,YACjE,OAAO,eAAC1sL,GAAA,EAAD,CAAWgpE,MAAM,MAAjB,SACL,eAAC,QAAD,CACExqV,KAAI,mBAAcghrB,EAAd,cACJl2mB,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAM,GAAD,OAAKk2F,EAAQjzH,IAAI,kBACtBkiG,MAAO,UACPu6J,aAAcxpI,EAAQjzH,IAAI,iBAAZ,sBAAoCyrrB,EAAgB,IAAMv1jB,EAA1D,gBACdtgB,WAAY,CACV6B,SAAU,SAACgrkB,GAET,GAAI6I,EAAgBxtrB,SAAW2krB,EAAczqrB,KAAM,CACjD,IAAMmyrB,EAA0BlP,EAAgBzzqB,QAAO,SAAC4irB,EAAgBhyrB,GACtE,OAAOgyrB,IAAmBqB,KAG5B,EAAK5skB,SAAS,CACZo8jB,gBAAiBkP,WAjBIxxO,MA4BnC+yO,EAAiB,SAAC,GAA8E,IAA5Ez4jB,EAA2E,EAA3EA,QAASiD,EAAkE,EAAlEA,aAA4Bu1jB,EAAsC,EAApDpsb,aAA6B9+P,EAAuB,EAAvBA,IAAKo4c,EAAkB,EAAlBA,YAC3EzmV,EAAQ,EAAKo3jB,wCAAwCr2jB,EAAS1yH,GAC9DquT,EAAQ,OAAG18L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,YACtBhI,EAAI,OAAGk6H,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,QAClB2vT,EAAM,OAAGz9L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,UACpB0orB,EAAgB,OAAGx2jB,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,gBAC9Bk7Y,EAAWvrF,GAAUzrN,EAAOJ,QAAQ6rN,EAAQ,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAAEiwgB,UAAU,KAE7K3je,EAAYoqkB,IADUlzjB,EAAe,UAAYu1jB,EAAgBlrrB,EAEjEqorB,GAAyC,KAAxB,OAAL12jB,QAAK,IAALA,OAAA,EAAAA,EAAOlyH,IAAI,eAC7B,OAAO,eAAC,GAAD,CAELg/G,UAAWA,EACXk8R,SAAUA,EACVtsF,SAAUA,EACV85X,iBAAkBA,EAClB1wrB,KAAMA,EACN2wrB,iBAAkBA,EAClBx4X,kBAAmBA,EACnBy4X,UAAWA,GARNjwO,IAWHgzO,EAAmB,SAAC,GAA8E,IAA5E14jB,EAA2E,EAA3EA,QAASiD,EAAkE,EAAlEA,aAA4Bu1jB,EAAsC,EAApDpsb,aAA6B9+P,EAAuB,EAAvBA,IAAKo4c,EAAkB,EAAlBA,YAC7EzmV,EAAQ,EAAKo3jB,wCAAwCr2jB,EAAS1yH,GAC9DslU,EAAY,OAAG3zM,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,gBAC1B2vT,EAAM,OAAGz9L,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,UACpB4rrB,EAAsB11jB,EAAe,UAAYu1jB,EAAgBlrrB,EAEjEsrrB,EAA6B,iBADrB,OAAG35jB,QAAH,IAAGA,OAAH,EAAGA,EAAOlyH,IAAI,SAEtB2yT,EAAgB1/L,EAAQjzH,IAAI,iBAC5B8rrB,GAA0BD,IAAkBl8X,EAC5Cu5U,EAAO,cAAU0iD,GACjB/wX,EAAW,EAAKyuX,wCAAwCr2jB,EAAS,yBACjE84jB,EAAc,OAAGlxX,QAAH,IAAGA,OAAH,EAAGA,EAAU76T,IAAI,UAC/BgsrB,EAAuBhmX,GAAuC,iBAARzlU,GAA0BwrrB,EAChFE,EAAyCD,GAAwBr8X,EACjEu8X,EAAgBF,IAAyBr8X,EAE/C,OACE,gBAAC1jC,GAAA,EAAD,CAAWgpE,MAAM,MAAwB19O,MAAO,CAAEmb,WAAY,UAA9D,UACE,wBAAOr9C,UAAWF,EAAQw5O,YAAaxyT,KAAK,OAAO8yT,OAAO,OAAOxkT,KAAK,OAAOyyB,GAAIgsmB,EAAS3ogB,UAAW,EAAG9oB,SAAU,SAACpzG,GAAD,OAAO,EAAKgmrB,aAAahmrB,EAAGsuT,EAAei5X,EAAqBrrrB,MAEhLovT,EACI,eAAC,GAAWq4X,KAAZ,CACE9+C,QAASA,EACT++C,oBAAqB3urB,QAAQ2yrB,GAC7B/D,mCAAoC,kBAAM,EAAKiE,wBAAwBl5jB,EAAS4nM,EAAUgL,MAE5F,eAAC,GAAWkX,OAAZ,CAAmBmsT,QAASA,IAGhCgjD,EACE,eAAChmkB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,mDAAoD,aAAYA,EAAE,mDAAoDo+F,UAAU,MAAlJ,SACE,eAACuQ,GAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,kBAAM,EAAKqrkB,wBAAwBl5jB,EAAS4nM,IACrDtjN,MAAO,CAAE4M,WAAY,GAHvB,SAKE,eAAC,KAAD,QAGF,KAGJwrM,EACE,eAAC,GAAWlrM,OAAZ,CACEtL,SAAU2ykB,EACV3pX,SAAU,kBAAM,EAAKiqX,iBAAiBz5X,EAAepyT,EAAKslU,MAE1D,OA9BoB8yI,IAsHhC,OAnFA,OAAIvhW,QAAJ,IAAIA,GAAJ,UAAIA,EAAYp3G,IAAI,sBAApB,aAAI,EAAgCwF,UAAS,MAC3Cq9W,EAAQx6W,KAAK,CACX9H,IAAK,eACLgrrB,WAAYvjqB,EAAE,gCACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,eACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,MAIhB,OAAIv0kB,QAAJ,IAAIA,OAAJ,EAAIA,EAAYp3G,IAAI,kBAClB6iX,EAAQx6W,KAAK,CACX9H,IAAK,wBACLgrrB,WAAYvjqB,EAAE,qCACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,wBACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,MAIhB,OAAIv0kB,QAAJ,IAAIA,GAAJ,UAAIA,EAAYp3G,IAAI,yBAApB,aAAI,EAAmCwF,UAAS,MAC9Cq9W,EAAQx6W,KAAK,CACX9H,IAAK,kBACLgrrB,WAAYvjqB,EAAE,mCACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,kBACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,MAIhB,OAAIv0kB,QAAJ,IAAIA,GAAJ,UAAIA,EAAYp3G,IAAI,6BAApB,aAAI,EAAuCwF,UAAS,MAClDq9W,EAAQx6W,KAAK,CACX9H,IAAK,sBACLgrrB,WAAYvjqB,EAAE,uCACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,sBACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,MAIhB,OAAIv0kB,QAAJ,IAAIA,GAAJ,UAAIA,EAAYp3G,IAAI,mBAApB,aAAI,EAA6BwF,UAAS,MACxCq9W,EAAQx6W,KAAK,CACX9H,IAAK,WACLgrrB,WAAYvjqB,EAAE,6BACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,WACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,MAGhB,OAAIv0kB,QAAJ,IAAIA,GAAJ,UAAIA,EAAYp3G,IAAI,gBAApB,aAAI,EAA0BwF,UAAS,MACrCq9W,EAAQx6W,KAAK,CACX9H,IAAK,QACLgrrB,WAAYvjqB,EAAE,0BACdwjqB,WAAYE,IAEd7oU,EAAQx6W,KAAK,CACX9H,IAAK,QACLgrrB,WAAY,GACZh0mB,MAAO,GACPi0mB,WAAYG,KAKd,gBAAC3+jB,EAAA,EAAD,CACEb,iBAAiB,EAEjBh3C,QAAS,CAAE3hE,KAAM2hE,EAAQ0tmB,kCACzBtrkB,MAAO,CAAE//B,OAAQ,GAJnB,UAME,eAAC21C,EAAA,EAAD,CACEoC,gBAAiB,CACf8kN,KAAM,QACNl7N,SAAmC,IAAzBmykB,EAAgBtzrB,MAE5Bu/G,MAAO,CACL7/B,cAAe,eAEjB01C,WACE,eAAC,KAAD,IAEF,aAAW,SACX,gBAAeiyI,EACfniO,GAAImiO,EAEJgtb,eAAgB,SAAAjpjB,GAAK,OAAI9pI,SAASgyrB,EAAgBtzrB,MAAQorI,EAAMjjB,kBAAoB,MAftF,SAiBE,eAAC6zM,EAAA,EAAD,CACE,aAAW,cACXlzM,QAAS,SAAAsiB,GAAK,OAAIA,EAAMjjB,mBACxBnb,QAAS,SAAAo+B,GAAK,OAAIA,EAAMjjB,mBACxBqD,QACE,eAAC6U,EAAA,EAAD,CAEEJ,QAAO,UAAE,EAAKinjB,6BAA6B7/a,EAAcgsb,UAAlD,SACPlykB,SAA4B,IAAlB2a,EAAS97H,KACnBy/G,SAAU,SAACpzG,GAAD,OAAO,EAAK26qB,oBAAoB3/a,EAAcgsb,EAAgBhnrB,IACxE69F,MAAM,YAGVnlE,MAAO2hV,OAIM,OAAf4sU,QAAe,IAAfA,OAAA,EAAAA,EAAiBtzrB,MAAO,GACtB,eAACs0H,EAAA,EAAD,UACE,eAACggkB,GAAA,EAAD,UACE,gBAAC/3P,GAAA,EAAD,CAAOh9U,MAAO,CAAEg1kB,YAAa,SAA7B,UACE,eAAC/3P,GAAA,EAAD,UACE,eAACE,GAAA,EAAD,UACG7xE,EAAQ59W,KAAI,WAA6B7M,GAAW,IAArCmzrB,EAAoC,EAApCA,WAAoC,EAAxBhrrB,IAAwB,EAAnBg3E,MAC/B,OACE,eAAC00M,GAAA,EAAD,UACGs/Z,GADanzrB,UAOxB,eAACw8b,GAAA,EAAD,UAEI02P,EAAgBrmrB,KAAI,SAACguH,EAASiD,GAC5B,OACE,eAACw+T,GAAA,EAAD,UACG7xE,EAAQ59W,KAAI,WAAsB0zc,GAAiB,IAApCp4c,EAAmC,EAAnCA,IACd,OAAOirrB,EAD0C,EAA9BA,YACD,CAAEv4jB,UAASiD,eAAcmpI,eAAc9+P,MAAKo4c,oBAFlE,UAAkBziV,EAAlB,YAAkCmpI,kBAzD/CA,EAAe,eA2EpBmtb,EAAuB,WAC3B,IAAKr5d,EACH,OAAOj/M,iBAET,IAAMu4qB,EAAuB,IAAI3xrB,IAC7B4xrB,EAAiBx4qB,iBAkDrB,OAhDAi/M,EAASxqN,SAAQ,SAACg3P,GAChB,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,GAAK8zH,EAAL,CAIA,IAAM64jB,EAAwB74jB,EAAStsH,QAAO,SAACyrH,GAC7C,OAA2B,IAAvBA,EAAQjzH,IAAI,QAAgBysrB,EAAqBvsrB,IAAI+yH,EAAQjzH,IAAI,oBAGjEorrB,IACEA,EAAsBlrrB,IAAI+yH,EAAQjzH,IAAI,oBACxCysrB,EAAqB7xqB,IAAIq4G,EAAQjzH,IAAI,mBAC9B,IAIN1G,QAAQ25H,EAAQjzH,IAAI,mCACvBysrB,EAAqB7xqB,IAAIq4G,EAAQjzH,IAAI,mBAC9B,OAKX,GAAmC,IAA/B2srB,EAAsB30rB,KAA1B,CAIA,IAIM40rB,EAJiB,EAAKhC,sBAAsB+B,GAIH/krB,QAAO,SAACutI,EAAKliB,GAC1D,IAAM+rhB,EAAuB,EAAKsqC,wCAAwCr2jB,EAAS,yBAC7E6nM,EAAc7nM,GAAW,EAAKq2jB,wCAAwCr2jB,EAAS,gBAIrF,OAHwB,OAApB+rhB,QAAoB,IAApBA,OAAA,EAAAA,EAAsBh/oB,IAAI,cAAa,OAAC86T,QAAD,IAACA,OAAD,EAACA,EAAa96T,IAAI,aAC3Dm1I,EAAMA,EAAI9sI,KAAKgd,iBAAO,EAAKwnqB,gBAAgB55jB,EAAS+rhB,MAE/C7pgB,IACNjhI,kBAEkC,IAAjC04qB,EAAwB50rB,OAI5B00rB,EAAiBA,EAAenlrB,OAAOqlrB,SAGlCF,GAGT,OACE,eAAC53mB,EAAA,EAAD,UACE,gBAACk4C,EAAA,EAAD,CACE33C,UAAWF,EAAQqpmB,MACnBryjB,iBAAiB,EAFnB,UAIE,eAACgB,EAAA,EAAD,CACEC,WACE,eAAC,KAAD,IAEF,gBAAc,kBACdlwF,GAAG,iBALL,SAOG,EAAK+gpB,mBAAmBj2pB,EAAE,oCAAoC,KAEjE,eAACskG,EAAA,EAAD,CACEn3C,QAAS,CACP3hE,KAAM2hE,EAAQ23mB,qCAFlB,SAKE,gBAACh4mB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,gBAACb,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXG,UAAWF,EAAQ43mB,iBAJrB,UAMGjuX,EAAsB,eAAChqP,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACrB,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,uCACzB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,IAEtB,eAACf,EAAA,EAAD,CACEe,MAAM,EADR,SAIuC,IAAnC,EAAKk1mB,0BACD,eAACt1kB,EAAA,EAAD,CACAE,QAAQ,UADR,mBAGIw1kB,EAHJ,aAGkE,IAA/BA,EAAmC,OAAS,QAH/E,YAG0FnjqB,EAAE,0BAH5F,YAGyHijqB,EAHzH,YAGmJjjqB,EAAE,mCAErJ,eAACytF,EAAA,EAAD,CACAE,QAAQ,UACRzT,MAAM,QAFN,mBAIIiplB,EAJJ,YAIkCnjqB,EAAE,0CAM5C82S,EAAsB,gBAAChqP,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ43mB,iBAA1C,UACpB,eAACj4mB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,cACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,gCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,iBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,mCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,qBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uCACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,WACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,6BACTk6E,MAAO,eAIb,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,QACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,0BACTk6E,MAAO,kBAIL,KAEZ,gBAACptB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ43mB,iBAA1C,UACE,gBAACj4mB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAACm9O,EAAA,EAAD,CACE3+O,UAAWF,EAAQk8O,SACnB7tM,QACE,eAAC0uJ,EAAA,EAAD,CACEj6I,QAAS3+H,QAAO,UAAC,EAAK6sC,MAAMixE,kBAAZ,aAAC,EAAuBp3G,IAAI,gBAC5Cy3G,SAAU,SAACpzG,GAAD,OAAO,EAAKg8qB,aAAah8qB,IACnC69F,MAAM,YAGVnlE,MAAO/U,EAAE,uCACTu5pB,eAAe,UAGfjorB,QAAQ0sU,IAA2B,UAAI,EAAK7/R,MAAMixE,kBAAf,aAAI,EAAuBp3G,IAAI,kBAA1D,OAA4EqirB,QAA5E,IAA4EA,OAA5E,EAA4EA,EAAerqrB,QACjG,eAAC4oH,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,WACR4B,MAAO,CAAE4M,WAAY,GACrBrD,QAAS,kBAAM,EAAKjC,SAAS,CAC3BqmN,eAAe,EACfwG,YAAa8gX,OANjB,SASGxkqB,EAAE,kDAKX,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,QAAD,CACEtB,UAAWg5O,KACX9jT,KAAK,cACL07B,MAAO,CACLpJ,MAAO/U,EAAE,0DACT4tF,WAAY,CACV1T,MAAO,UACPiX,WAAU,OAAC/B,QAAD,IAACA,GAAD,UAACA,EAAYp3G,IAAI,sBAAjB,aAAC,EAAgCwF,UAAS,KAEtDg3P,sBAAuB,CACrB+kb,eAAgB,QAChBlsmB,UAAWF,EAAQk8O,kBAO5BgxX,aArrCM,EA6rCZhC,aAAe,SAACh8qB,GACrB,MAA2B,EAAK8hC,MAAxBS,EAAR,EAAQA,SAAU8yE,EAAlB,EAAkBA,KACZue,EAAU5zH,EAAE4kB,OAAOgvG,QACzBrxF,EAASu/B,aAAOuzC,EAAM,cAAeue,KAhsCpB,EAmsCZm0jB,iBAAmB,SAACl3jB,EAAmBuwM,EAAmBI,GAC/D,MAGI,EAAK1/R,MAFPS,EADF,EACEA,SAII0nL,EALN,EAEErjC,MAGoBjrL,IAAI,MAE1B4mC,EAAS,IAAIo/C,KAAuC,CAClD2sO,cAAez9L,EACfo5F,UACA2iG,SAAUwU,EACVI,aAAcA,GAAgB,SA/sCf,EAwtCZgnX,gBAAkB,SAAC55jB,EAAoB4nM,EAAqBgL,GAA1C,MAAqE,CAC5F3wM,UAAWjC,EAAQjzH,IAAI,iBACvBm1H,cAAelC,EAAQjzH,IAAI,iBAC3BimU,SAAUhzM,EAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAAc,GACjEu4G,MAAOnC,EAAQjzH,IAAI,SACnBqzH,SAAUJ,EAAQjzH,IAAI,gBACtB2rU,QAAS/D,aAAiB/M,EAAS76T,IAAI,WACvC4uT,SAAUiM,EAAS76T,IAAI,aAAe,GACtC6lU,aAAcA,GAAgBhL,EAAS76T,IAAI,iBAAmB,KAhuC7C,EAsuCZmsrB,wBAA0B,SAACl5jB,EAAwB4nM,EAAqBgL,GAC7E,EAAKhnN,SAAS,CACZqmN,eAAe,EACfwG,YAAarmT,iBAAO,CAAC,EAAKwnqB,gBAAgB55jB,EAAS4nM,EAAUgL,QAzuC9C,EA6uCZmnX,eAAiB,WACtB,MAII,EAAK7mpB,MAHP8mpB,EADF,EACEA,kBACAC,EAFF,EAEEA,2BACAllqB,EAHF,EAGEA,EAGF,OACE,gBAACiqS,EAAA,EAAD,CACErrN,KAAMqmlB,EACNrsjB,QAASssjB,EAFX,UAIE,eAAC74Q,GAAA,EAAD,UACGrsZ,EAAE,yCAEL,eAACkqS,GAAA,EAAD,UACE,eAACylI,GAAA,EAAD,UACG3va,EAAE,sDAGP,eAACqqS,GAAA,EAAD,UACE,eAACzxM,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAASoskB,EAFX,SAIGllqB,EAAE,0BAtwCM,E,qDAsBnB,WACE,MAKI/rB,KAAKkqC,MAJPS,EADF,EACEA,SACA40lB,EAFF,EAEEA,gBACAvwc,EAHF,EAGEA,MACAkigB,EAJF,EAIEA,gBAGF,GAAIligB,EAAO,CAETuwc,EADgBvwc,EAAMjrL,IAAI,OAE1B,IAAMmzN,EAAWloC,EAAMjrL,IAAI,YACvBmzN,GACFl3N,KAAK4iH,SAAS,CAAEo8jB,gBAAiB9nd,EAASr4M,SAASjc,YAIlDsurB,GACHvmpB,EAAS,IAAI2jB,S,gCAIjB,SAA0B+vD,EAAgB4yJ,GAAwC,IAAD,eAC/E,EAMIjxQ,KAAKkqC,MALP8kJ,EADF,EACEA,MACAuwc,EAFF,EAEEA,gBACA4hD,EAHF,EAGEA,mCACAx2oB,EAJF,EAIEA,SACAwwE,EALF,EAKEA,WAYF,GAPIn7G,KAAKgnC,MADPompB,wBAG4Bn8a,EAAUm8a,uBAEtCjM,EAAsE,IAAnCnhrB,KAAK8urB,2BAGtC9/f,GAAS3wE,EAAU2wE,QAAUA,EAAO,CACtC,IAGMmigB,EAHWnigB,EAAMjrL,IAAI,YAGU8a,SAASjc,UAC9C5C,KAAK4iH,SAAS,CACZo8jB,gBAAiBmS,IAGnB5xD,EAAgBv/nB,KAAKkqC,MAAM8kJ,MAAMjrL,IAAI,OAQvC,KALI,UAAC/D,KAAKkqC,MAAMixE,kBAAZ,iBAAC,EAAuBp3G,IAAI,sBAA5B,aAAC,EAA2CwF,UAAS,MAArD,UAA8D80G,EAAUlD,kBAAxE,iBAA8D,EAAsBp3G,IAAI,sBAAxF,aAA8D,EAA0CwF,UAAS,KACnHohC,EAASu/B,aAAOlqE,KAAKkqC,MAAMuzE,KAAM,eAAe,IAI9CuxE,GAAS3wE,EAAUlD,aAAen7G,KAAKkqC,MAAMixE,YAAckD,EAAUuwkB,eAAiB5urB,KAAKkqC,MAAM0kpB,aAAc,CAAC,IAAD,EAC3GwC,EAAgB,UAAGpxrB,KAAKkqC,MAAMixE,kBAAd,aAAG,EAAuBp3G,IAAI,YAC9CstrB,EAAoBrigB,GAASA,EAAMjrL,IAAI,YAG7C,GAAIqtrB,GAAoBC,EAAmB,CACzC,IAAMC,EAAqBF,EACxBporB,KAAI,SAAC06P,GAEJ,OADmBA,EAAQ3/P,IAAI,eAGhC2H,UACA1C,KAAI,SAACiwH,GACJ,OAAOA,KAGLm2jB,EAAiBiC,EAAkBrorB,KAAI,SAAC06P,GAC5C,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAAYwH,QAAO,SAACyrH,GAAD,OAAmD,IAAvBA,EAAQjzH,IAAI,SACxF,OAAO,EAAK4qrB,sBAAsB92jB,MAE9B05jB,EAAyC,GACzCC,EAAgBpC,EACnBzjrB,QAAO,SAACutI,EAAKwqH,EAASN,GA6CrB,OA5CAM,EAAQ16P,KAAI,SAACyorB,EAAkCx3jB,GAC7C,IAAMy3jB,EAAsBD,EAAkB1trB,IAAI,iBAAtB,sBAA8Cq/P,EAAe,IAAMnpI,EAAnE,gBAC5B,GAAIq3jB,EAAmB/nrB,SAASmorB,GAAsB,CAAC,IAAD,UAC9CC,EAAc,EAAKtE,wCAAwCoE,EAAmB,gBAC9EG,GAA6B,OAAXD,QAAW,IAAXA,OAAA,EAAAA,EAAa5trB,IAAI,UAAW,EACpD,GAAwB,IAApB6trB,IAAA,OAAyBz2kB,QAAzB,IAAyBA,GAAzB,UAAyBA,EAAYp3G,IAAI,sBAAzC,aAAyB,EAAgCwF,UAAS,IAAO,CAC3E2vI,EAAI9sI,KAAKwlrB,GACT,IAAMC,EAAsBlwrB,QAAQiwrB,EAAkB74pB,iBAAcqhO,QAAQ,IAC5Em3b,EAAsC,YAAkBA,EAAsC,YAAkBA,EAAsC,YAAkBM,EAAsBA,EAEhM,IAAc,OAAV12kB,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,mBAAkB,OAAC4trB,QAAD,IAACA,OAAD,EAACA,EAAa5trB,IAAI,WAAW,CACjE,IAAM+trB,EAAe,EAAKzE,wCAAwCoE,EAAmB,wBAAyB,SAAW,EACzH,GAAqB,IAAjBK,EAAoB,CACtB54iB,EAAI9sI,KAAK0lrB,GACT,IAAMC,EAAmBpwrB,QAAQmwrB,EAAe/4pB,iBAAcqhO,QAAQ,IACtEm3b,EAAsC,iBAAuBA,EAAsC,iBAAuBA,EAAsC,iBAAuBQ,EAAmBA,GAG9M,IAAMC,EAAqB,EAAK3E,wCAAwCoE,EAAmB,kBAAmB,SAAW,EACzH,GAA2B,IAAvBO,IAAA,OAA4B72kB,QAA5B,IAA4BA,GAA5B,UAA4BA,EAAYp3G,IAAI,yBAA5C,aAA4B,EAAmCwF,UAAS,IAAO,CACjF2vI,EAAI9sI,KAAK4lrB,GACT,IAAMC,EAAyBtwrB,QAAQqwrB,EAAqBj5pB,iBAAcqhO,QAAQ,IAClFm3b,EAAsC,eAAqBA,EAAsC,eAAqBA,EAAsC,eAAqBU,EAAyBA,EAE5M,IAAMC,EAAyB,EAAK7E,wCAAwCoE,EAAmB,sBAAuB,SAAW,EACjI,GAA+B,IAA3BS,IAAA,OAAgC/2kB,QAAhC,IAAgCA,GAAhC,UAAgCA,EAAYp3G,IAAI,6BAAhD,aAAgC,EAAuCwF,UAAS,IAAO,CACzF2vI,EAAI9sI,KAAK8lrB,GACT,IAAMC,EAA6BxwrB,QAAQuwrB,EAAyBn5pB,iBAAcqhO,QAAQ,IAC1Fm3b,EAAsC,mBAAyBA,EAAsC,mBAAyBA,EAAsC,mBAAyBY,EAA6BA,EAE5N,IAAMC,EAAe,EAAK/E,wCAAwCoE,EAAmB,WAAY,SAAW,EAC5G,GAAqB,IAAjBW,IAAA,OAAsBj3kB,QAAtB,IAAsBA,GAAtB,UAAsBA,EAAYp3G,IAAI,mBAAtC,aAAsB,EAA6BwF,UAAS,IAAO,CACrE2vI,EAAI9sI,KAAKgmrB,GACT,IAAMC,EAAmB1wrB,QAAQywrB,EAAer5pB,iBAAcqhO,QAAQ,IACtEm3b,EAAsC,SAAeA,EAAsC,SAAeA,EAAsC,SAAec,EAAmBA,EAEpL,IAAMC,EAAY,EAAKjF,wCAAwCoE,EAAmB,QAAS,SAAW,EACtG,GAAkB,IAAda,IAAA,OAAmBn3kB,QAAnB,IAAmBA,GAAnB,UAAmBA,EAAYp3G,IAAI,gBAAnC,aAAmB,EAA0BwF,UAAS,IAAO,CAC/D2vI,EAAI9sI,KAAKkmrB,GACT,IAAMC,EAAgB5wrB,QAAQ2wrB,EAAYv5pB,iBAAcqhO,QAAQ,IAChEm3b,EAAsC,MAAYA,EAAsC,MAAYA,EAAsC,MAAYgB,EAAgBA,OAIrKr5iB,IACN,IAELl5I,KAAK4iH,SAAS,CACZwqkB,sBAAuBoE,IAEzB,IAAMgB,EAAiBppqB,iBAAOmoqB,GAAwC5lrB,QAAO,SAACutI,EAAKn9I,EAAMytU,GACvF,OAAOtwL,EAAIxxI,IAAI8hU,EAAWztU,EAAKq+P,QAAQ,MACtCxnP,iBAAO2L,OACVve,KAAKkqC,MAAMuopB,iCAAiCD,O,oBAknClD,WAAiB,IAAD,OACd,EAIIxyrB,KAAKkqC,MAHPq1lB,EADF,EACEA,gBACArmjB,EAFF,EAEEA,QACA81G,EAHF,EAGEA,MAGF,OAME,eALA,CAKCn2G,EAAA,EAAD,CACEO,UAAWF,EAAQ3hE,KACnB+jG,MAAQt7G,KAAKkqC,MAAcqsJ,QAAU,CAAEz6G,QAAS,QAAMhgF,EAFxD,UAKGkE,KAAK+wrB,iBACN,kCAGG/wrB,KAAKytrB,iBAGLztrB,KAAKsirB,gBAKFtirB,KAAKkqC,MAAcqsJ,UAAav2L,KAAKkqC,MAAco5oB,mBAAqBtjrB,KAAK0trB,mBAGhF1trB,KAAKkmrB,kBAER,eAAC12W,GAAA,EAAD,CACE7kO,KAAM3qG,KAAKgnC,MAAMiiS,cACjBtkM,QAAS,kBAAM,EAAK/hB,SAAS,CAAEqmN,eAAe,KAC9CwG,YAAazvU,KAAKgnC,MAAMyoS,YACxBE,WAAY,WACV4vT,EAAgBvwc,EAAMjrL,IAAI,iB,GAr0CP0gC,aAm8ChBwwC,qBACb00C,eACA1uC,aAxHa,SAACC,GAAD,MAA+B,CAC5CmnmB,iBAAkB,CAChBp8kB,MAAO,UACPs2B,WAAY,IACZpV,SAAU,GACVsP,WAAY,SACZ1B,cAAe,YACf,UAAW,CACT/P,gBAAiB,YAGrBztG,KAAM,CACJ+jE,MAAO,OAQPQ,QAASZ,EAAMZ,QAAQ,IAEzBt9D,KAAM,CACJ0rH,YAAaxtD,EAAMZ,QAAQ,GAC3B2rB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5B/N,WAAW,0BAAD,OAA4B7/C,EAAM+pC,QAAQ+d,UAAU,KAApD,aAA6D9nD,EAAM+pC,QAAQ+d,UAAU,KAArF,MAEZkzhB,eAAgB,CACd75kB,SAAU,GAEZmmmB,iCAAkC,CAChC1mmB,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAA0BY,EAAMZ,QAAQ,GAAxC,cAAgDY,EAAMZ,UAAtD,OAETssmB,iCAAkC,CAChC/+jB,UAAW,QAEbgpkB,oCAAqC,CACnC/0mB,QAAS,GAEX42O,YAAa,CACXp3O,MAAO,GACPi2C,OAAQ,GACRrE,QAAS,EACT7C,SAAU,SACVpN,SAAU,WACV+jB,QAAS,GAEX0xjB,eAAgB,CACdn3mB,OAAO,GAAD,OAAKL,EAAMZ,UAAX,OAERiomB,MAAO,CACLhnmB,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,SAERq4mB,MAAO,CACLr3mB,MAAO,OACP+pC,OAAQ,WAEVutkB,cAAe,CACblqjB,YAAaxtD,EAAMZ,QAAQ,IAE7Bu4mB,iBAAkB,CAChBt3mB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3ByoM,eAAgB,CACd98K,MAAO/qB,EAAM+pC,QAAQ92G,MAAM6zQ,MAE7Bg9G,YAAa,CACXx9Q,YAAa,IAEf4zM,SAAU,CACR75O,OAAQ,GAEVu1mB,iBAAkB,CAChBh1mB,QAAQ,KAAD,OAAOZ,EAAMZ,QAAQ,GAArB,OAETiymB,iBAAkB,CAChB52jB,aAAc,WACdtL,SAAU,SACVoM,WAAY,aA0CK,CAAEzH,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,mBAxCsB,SAAC73E,EAAOyF,GAE9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO87F,GAC/CvqB,EAAQviJ,EAASuiJ,MACjB8jgB,EAAkB9jgB,GAASA,EAAMjrL,IAAI,aACrCgvrB,EAAgBD,EAAkBjoe,aAAkB,CAAE30G,UAAW48kB,GAA/Bjoe,CAAkD7jL,GAAS,KAC7FumpB,EAAwBwF,GAAiBA,EAAchvrB,IAAI,YACjE,OAAO,yBACL05G,OACA8vkB,wBACAjvkB,cAAe7xE,EAAS6xE,eACrBxrE,YAAyB,CAC1B87oB,aAAcztb,cACd6vb,kBAAmBh0b,eACnB6lE,oBAAqBp/Q,gBACrBimR,wBAAyB7zL,eACzBq7iB,gBAAiBzxiB,eACjBsqL,4BAA6B7gR,iBAN5BpW,CAOA9L,IAXL,IAYEm0E,WAAYC,wBAAcqC,EAAdrC,CAAoBp0E,QAIT,SAAC2D,GAC1B,MAAO,CACLA,WACA40lB,gBAAiB,SAAClta,GAChB1nL,EAAS,IAAI42K,KAAsB,CAAE8Q,cAEvC4+d,2BAA4B,WAC1BtmpB,EAAS,IAAI0/C,YAWjBk9O,oBAAU,CACRC,kBAAkB,EAClBC,oBAAoB,IARTxyP,CAUbg4mB,I,oBKnnDI+F,GAAyB,SAAC97d,GAC9B,OAAKA,EACEA,EAASluN,KAAI,SAAC06P,GACnB,GAAIzrP,OAAKF,OAAO2rP,GACd,OAAOA,EAAQ16P,KAAI,SAAC87qB,GAClB,IACMmO,EADWnO,EAAS/grB,IAAI,YACDiF,KAAI,SAACiwH,GAChC,OAAOA,EAAUl6E,MAAM,gBAAM,MAE/B,OAAO+loB,EAASp9qB,IAAI,WAAYurrB,MAGlC,IAAMp7jB,EAAW6rI,EAAQ3/P,IAAI,YAC7B,IAAK8zH,EAAY,OAAO6rI,EACxB,IAAMuvb,EAAcp7jB,EAAS7uH,KAAI,SAACiwH,GAChC,MAA4B,kBAAdA,EAAyBA,EAAUl6E,MAAM,gBAAM,GAAKk6E,KAEpE,OAAOyqI,EAAQh8P,IAAI,WAAYurrB,MAhBX/7d,GAwBpBg8d,GAA6B,SAAC/nrB,EAAa6jL,GAC/C,IAAMmkgB,EAAqBhorB,EAAOpH,IAAI,YAChCstrB,EAAiB,OAAGrigB,QAAH,IAAGA,OAAH,EAAGA,EAAOjrL,IAAI,YACrC,IAAKovrB,IAAuB9B,EAAqB,OAAOlmrB,EAExD,IAAMiorB,EAA2BD,EAAmBnqrB,KAAI,SAACqqrB,EAAqBl3rB,GAC5E,GAAuB,OAAnBk3rB,EAAJ,CACA,IAAM5wU,EAAe4uU,EAAkBzwqB,MAAM,CAACzkB,EAAO,iBAC/C+hX,EAAYmzU,EAAkBzwqB,MAAM,CAACzkB,EAAO,cAClD,OAAOk3rB,EAAenjrB,MAAM,CAAC,gBAAiBuyW,GAAcvyW,MAAM,CAAC,aAAcguW,OAGnF,OAAO/yW,EAAOzD,IAAI,WAAY0rrB,IA6L1BE,GAA2B,CAC/BN,0BACAE,8BACAK,uBA1L6B,SAACp4kB,EAAiB6zE,EAAYwkgB,GAA+E,IAArDC,EAAoD,wDACnIC,EAAgBV,GAAuB73kB,EAAWp3G,IAAI,aACxD0uX,EAAoBt3Q,EAAWzzG,IAAI,WAAYgsrB,GAE/CF,IACF/gU,EAAoBygU,GAA2BzgU,EAAmBzjM,IAGpE,IAAM2kgB,EAAcF,EAChB,SAAC/vb,GAAD,OAAkBA,GAAWA,EAAQ3/P,IAAI,qBACzC,SAAC2/P,GAAD,OAAkBA,GAAWA,EAAQ3/P,IAAI,aAAe2/P,EAAQ3/P,IAAI,YAAYhI,MAEpF,OAAI6W,MAAI9N,MAAM2tX,EAAkB1uX,IAAI,aAC3B0uX,EAAkB1uX,IAAI,YAC1B+hB,SAAQ,SAACxhB,GAAD,OAAiBA,EAAIy6C,MAAM,SAAS,MAC5C/1C,KAAI,SAACsgrB,GAAD,OACHA,EAAc/9qB,QAAO,SAACm4P,GAAD,OAAkBiwb,EAAYjwb,SACnDn4P,QAAO,SAACm4P,EAAcp/P,GAAf,OAA+B62G,EAAWp3G,IAAI,aAAawF,SAAS5H,OAAO2C,KAASo/P,EAAQ3nQ,QAEhG02X,EACJ1uX,IAAI,YACJwH,QAAO,SAACm4P,GAAD,OAAkBiwb,EAAYjwb,OAsK1Ckwb,8BA9JoC,SAACC,EAAkB7kgB,EAAY8kgB,GACnE,IAAIC,EAAe/kgB,GAASp8K,gBACtBuxG,EAAgB9mH,QAAO,OAACy2rB,QAAD,IAACA,OAAD,EAACA,EAAsB/vrB,IAAI,aAExD,GAAI6O,MAAI9N,MAAM+urB,GAAc,CAC1B,IAAMt/d,EAAM,OAAGu/d,QAAH,IAAGA,OAAH,EAAGA,EAAsB/vrB,IAAI,2BACzC,OAAKwwN,GAELA,EAAO7nN,SAAQ,SAACsnrB,EAAa1vrB,GAC3B,IAAM6kd,EAAY4qO,EAAahwrB,IAAI,aAAekU,iBAE5Cg8qB,EAAa9qO,EAAUx9c,QAAO,SAACutI,EAAUwqH,EAAcvnQ,GAC3D,IAAM+3rB,EAAkB/qO,EAAUpld,IAAI5H,GAChCg4rB,EAAiBN,EAAY9vrB,IAAI,GAAKO,GAE5C,GAAIo/P,EAAQ3/P,IAAI,gBAAZ,OAA6BmwrB,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAiBnwrB,IAAI,gBAAiB1G,QAAQ82rB,GAC7E,OAAOj7iB,EAAI9sI,KAAKs3P,GAElB,IAAMw6G,EAAYx6G,EAAQ3/P,IAAI,aACxB8zH,EAAW6rI,EAAQ3/P,IAAI,WAAYkU,kBAEnCm8qB,EAAoBD,EAAexyqB,MAAK,SAAC9J,GAAD,OAAYA,EAAE9T,IAAI,eAAiBm6W,KAC3Em2U,EAA4BD,EAAoBA,EAAkBrwrB,IAAI,YAAckU,iBAEpFq8qB,EAA2Bz8jB,EAASlsH,QAAO,SAACiiR,EAAW52J,GAC3D,IAAMmnP,EAAiBnnP,EAAQjzH,IAAI,kBAC7B29W,EAAe1qP,EAAQjzH,IAAI,gBAEjC,OAAIswrB,EAA0B9qrB,SAAS40W,GACjCvrW,MAAI9N,MAAM48W,GACL9zF,EAAKxhR,KAAK4qH,EAAQ9mH,MAAM,CAAC,eAAD,UAAoBi0G,EAAgB7/G,EAAM,aAAc,IAEhFspR,EAAKxhR,KAAK4qH,EAAQtvH,IAAI,eAAgBkL,cAAI,aAAEg5G,QAAS81P,GAAev9P,EAAgB7/G,EAAM,WAAY,MAG3GsO,MAAI9N,MAAM48W,GACL9zF,EAAKxhR,KAAK4qH,EAAQ9mH,MAAM,CAAC,eAAD,UAAoBi0G,EAAgB7/G,EAAM,aAAc,IAEhFspR,EAAKxhR,KAAK4qH,EAAQtvH,IAAI,eAAgBkL,cAAI,aAAEg5G,QAAS81P,GAAev9P,EAAgB7/G,EAAM,WAAY,QAGhH2T,kBAEGs8qB,EAA6B7wb,EAAQh8P,IAAI,WAAY4srB,GAC3D,OAAOp7iB,EAAI9sI,KAAKmorB,KACft8qB,kBACH87qB,EAAeA,EAAarsrB,IAAI,WAAYusrB,MAGvCF,GA3CeA,EA6CtB,IACME,IADgB,OAALjlgB,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,cAAekU,kBACftM,QAAO,SAACutI,EAAUwqH,GAC5C,IAAMw6G,EAAYx6G,EAAQ3/P,IAAI,aACxB8zH,EAAW6rI,EAAQ3/P,IAAI,WAAYkU,kBAEnCm8qB,EAAoBP,EAAYlyqB,MAAK,SAAC9J,GAAD,OAAYA,EAAE9T,IAAI,eAAiBm6W,KACxEm2U,EAA4BD,EAAoBA,EAAkBrwrB,IAAI,YAAckU,iBAEpFq8qB,EAA2Bz8jB,EAASlsH,QAAO,SAACiiR,EAAW52J,GAC3D,IAAMmnP,EAAiBnnP,EAAQjzH,IAAI,kBAC7B29W,EAAe1qP,EAAQjzH,IAAI,gBACjC,OAAIswrB,EAA0B9qrB,SAAS40W,GACjCvrW,MAAI9N,MAAM48W,GACL9zF,EAAKxhR,KAAK4qH,EAAQ9mH,MAAM,CAAC,eAAgB,YAAY,IAErD09Q,EAAKxhR,KAAK4qH,EAAQtvH,IAAI,eAAgBkL,cAAI,CAAEg5G,SAAS,MAG1Dh5G,MAAI9N,MAAM48W,GACL9zF,EAAKxhR,KAAK4qH,EAAQ9mH,MAAM,CAAC,eAAgB,YAAY,IAErD09Q,EAAKxhR,KAAK4qH,EAAQtvH,IAAI,eAAgBkL,cAAI,CAAEg5G,SAAS,QAG/D3zG,kBAEGs8qB,EAA6B7wb,EAAQh8P,IAAI,WAAY4srB,GAC3D,OAAOp7iB,EAAI9sI,KAAKmorB,KACft8qB,kBAEH,OAAO+2K,EAAMtnL,IAAI,WAAYusrB,IA8E/BO,sBAvE4B,SAACr5kB,GAC7B,OAAKA,EACEA,EAAWnqG,eAAc,SAACywQ,GAC/B,IAAMgza,EAAehza,EAAI19Q,IAAI,WACzBwmU,EAAiB,GACjB+gX,EAA6B,KAC7B,CAAC,UAAW,UAAU/hrB,SAASkrrB,KACjClqX,EAAU,EAAC,IAEQ,WAAjBkqX,IACFnJ,EAAqB7pa,EAAI19Q,IAAI,wBAC2B,kBAAvBunrB,IAC/BA,EAAqBA,EAAmB9sjB,QAG5CijJ,EAAI/5Q,IAAI,UAAW6iU,GACnB9oD,EAAI/5Q,IAAI,qBAAsB4jrB,MAfNnwkB,GAuE1Bu5kB,4BAhDkC,SAACC,GAAiD,IAAvCC,EAAsC,wDACnF,OAAKD,GAAQ/hrB,MAAI9N,MAAM6vrB,IAAqB,IAAbA,EAAI54rB,KAE5B44rB,EAAI3rrB,KAAI,SAACgrrB,GACd,IAAIxQ,EAAgBwQ,EAyBpB,GAtBAxQ,EAAgBA,EAAc97qB,IAAI,WAChC87qB,EAAcz/qB,IAAI,YAAYiF,KAAI,SAAC06P,GACjC,IAAImxb,EAAenxb,EAAQ3/P,IAAI,sBAAuBkU,kBAItD,OAHI28qB,GAAehirB,MAAI9N,MAAM+vrB,KAC3BA,EAAeA,EAAa7rrB,KAAI,SAACqhrB,GAAD,OAAeA,EAAK3irB,IAAI,QAAS,GAAGA,IAAI,4BAA6B,OAEhG0hB,iBAAO,CACZ80V,UAAWx6G,EAAQ3/P,IAAI,aACvBujrB,oBAAqBuN,EACrBh9jB,UAAW6rI,EAAQ3/P,IAAI,aAAekU,kBAAQjP,KAAI,SAACguH,GACjD,MAAuB,kBAAZA,GAAyBA,EAAQjzH,IACrCqlB,iBAAO,CACZ+0V,eAAgBnnP,EAAQjzH,IAAI,kBAC5ByhM,SAAUxuE,EAAQjzH,IAAI,YACtB+7W,cAAe9oP,EAAQjzH,IAAI,gBAAiBkU,oBAJY++G,WAY9D49jB,EAAa,CACf,IAAM3+d,EAAcutd,EAAcz/qB,IAAI,eAClCkyN,GAAerjN,MAAI9N,MAAMmxN,KAC3Butd,EAAgBA,EAAc97qB,IAAI,cAChCuuN,EAAYjtN,KAAI,SAACypL,GAAD,OAAaA,EAAG/qL,IAAI,QAAS,GAAGA,IAAI,4BAA6B,GAAGA,IAAI,kBAAmB,QAKjH,OAAO87qB,KArC+C,OAkD3C8P,MC4BTwB,GAAe,SAAC1ooB,GACpB,MAAO,6BAA6BrR,KAAKqR,IAyB5B2ooB,GAZQ,CACrBC,uBArI6B,SAAC3tkB,GAa9B,MAAO,CAAEwpN,WAZUxpN,EAAStjH,IAAI,MAYXyK,KATR,CAFK64G,EAAStjH,IAAI,cAAgB,GAC9BsjH,EAAStjH,IAAI,aAAe,IACVwH,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,KAAK+8G,OASjCpyE,MARbi7D,EAAStjH,IAAI,UAAY,GAQLmiH,aAPbmB,EAAStjH,IAAI,iBAAmB,GAOL2iH,QANhC,CACdW,EAAStjH,IAAI,YACbsjH,EAAStjH,IAAI,YACbsjH,EAAStjH,IAAI,iBACbwH,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,QA2HtBwzqB,YAtHkB,SAACp0oB,GACnB,IAAKA,EAAY,MAAO,GACxB,IAAMq0oB,EAAYr0oB,EAAS98C,IAAI,cACzBoxrB,EAAat0oB,EAAS98C,IAAI,eAChC,OAAKmxrB,GAAcC,EAGZ,UAAGD,GAAa,GAAhB,YAAsBC,GAAc,IAAK32jB,OAFvC39E,EAAS98C,IAAI,uBAAyB,IAkH/CqxrB,gBA7GsB,SAAC1gY,GACvB,IAAKA,EAAY,MAAO,UACxB,IAAMp6G,EAAMo6G,EAASt7Q,cAAc2F,MAAM,KAAK1yC,MAC9C,MAAY,QAARiuM,EAAwB,MACxB,CAAC,MAAO,OAAQ,MAAO,MAAO,MAAO,MAAO,QAAQ/wM,SAAS+wM,GAAe,QAC5E,CAAC,MAAO,QAAQ/wM,SAAS+wM,GAAe,OACxC,CAAC,MAAO,OAAQ,OAAO/wM,SAAS+wM,GAAe,QAC5C,WAuGP+6e,qBAlF2B,SAC3BC,EACAC,EACAzqX,EACA0qX,EACAC,EACA1uoB,GAEA,IADuB,EACjBpU,EAA6B,GADZ,cAEE2ipB,GAFF,+BAEZzkX,EAFY,QAGf71R,EAAOu6oB,EAAU1kX,GACvB,IAAK71R,GAA2B,IAAnBA,EAAK/rC,GAAGpN,OAAgB,iBACrC,IAAM6zrB,EAAW16oB,EAAK/rC,GAAGwS,KAAK,MACxB4vB,EAAU2J,EAAK3J,SAAW,GAG5BskpB,EAAoB,GACxB,GAAIH,GAAQC,GAAe1uoB,EAAO,CAChC,IAAM6uoB,EAAeJ,EAAKjqrB,QAAO,SAAAisE,GAAC,OAAIA,EAAEq5P,aAAeA,GAA2B,aAAbr5P,EAAEiuB,QAAyBjuB,EAAEk8O,UAClG,GAAIkiY,EAAa/zrB,OAAS,EAKxB8zrB,EAJcC,EAAa5srB,KAAI,SAAAwuE,GAC7B,IAAMgqB,EAAG,UAAMi0lB,EAAN,iBAA0Bj+mB,EAAEk8O,OAA5B,yBAAmD3sQ,GAC5D,MAAM,YAAN,OAAmBy6C,EAAnB,+DAA6EhqB,EAAE+kmB,gBAA/E,iBAEwB96pB,KAAK,mBAKnC,IAAMo0qB,EAAcxkpB,EAAQunC,QAAQ,MAAO,QACrCk9mB,EAAa,8BAA0BhrX,GACvCirX,EAAeJ,EAAiB,kBAAcA,GAAsB,GAEpEK,EAAW,kFACVH,GADU,UAEVC,GAFU,UAGVC,GAHU,SAMXE,EAA+B,CACnChnrB,GAAIymrB,EACJ74Z,QAAS7hP,EAAK6hP,QACdpmN,KAAMu/mB,IAEJ,UAAAh7oB,EAAK8gH,UAAL,eAASj6J,QAAS,IACpBo0rB,EAAWn6hB,GAAK9gH,EAAK8gH,GAAGr6I,KAAK,QAE3B,UAAAu5B,EAAKk7oB,WAAL,eAAUr0rB,QAAS,IACrBo0rB,EAAWC,IAAMl7oB,EAAKk7oB,IAAIz0qB,KAAK,QAE7B,UAAAu5B,EAAK2wZ,mBAAL,eAAkB9pc,QAAS,IAC7Bo0rB,EAAWtqP,YAAc3wZ,EAAK2wZ,YAAY3ic,KAAI,SAACmtrB,GAAD,MAAe,CAAEziY,OAAQyiY,EAAI1hB,kBAE7E9hoB,EAAOvmC,KAAK6prB,IA5Cd,2BAA8C,IAFvB,8BAgDvB,OAAOtjpB,GA4BPyjpB,wBAxR8B,SAACj7kB,EAAiBk3G,EAAcrjC,GAC9D,OAAK7zE,EAGem4kB,GAAyBkB,sBAAsBr5kB,GAEhDnqG,eAAc,SAACywQ,GAAc,IAAD,IAC7CA,EAAI/5Q,IAAI,UAAW2qN,GACnBovD,EAAI/5Q,IAAI,eAAgB,SAGxB,UAAI+5Q,EAAI19Q,IAAI,yBAAZ,iBAAI,EAA2BwF,gBAA/B,aAAI,UAAsC,IACxCk4Q,EAAI/5Q,IAAI,kBAAkB,GAE1B+5Q,EAAI/5Q,IAAI,kBAAkB,GAI5B,IAAMwvN,EAAWuqD,EAAI19Q,IAAI,YACrBmzN,GACFuqD,EAAI/5Q,IAAI,WAAY4rrB,GAAyBN,uBAAuB97d,IAItE,IAAMy9d,EAAMlza,EAAI19Q,IAAI,2BACdsyrB,EAAa/C,GAAyBoB,4BAA4BC,GAAK,GACzE0B,EACF50a,EAAI/5Q,IAAI,0BAA2B2urB,GAEnC50a,EAAIj5J,OAAO,2BAIb,IAAM8tkB,EAAkB70a,EAAI19Q,IAAI,YAChC,GAAIuyrB,EAAiB,CACnB,IAAMC,EAAsBjD,GAAyBC,uBACnD9xa,EAAI/5Q,IAAI,WAAY4urB,GACpBtngB,GACA,GACA,GAKIwwL,EAAa,OAAGxwL,QAAH,IAAGA,OAAH,EAAGA,EAAOjrL,IAAI,YAC3ByyrB,EAAoB,SAACC,GACzB,OAAKA,GAASj3U,EACPi3U,EAAKztrB,KAAI,SAAC06P,GACf,IAAMw6G,EAAYx6G,EAAQ3/P,IAAI,aACxB0/W,EAAejE,EAAc79V,MAAK,SAAC0nM,GAAD,OAAaA,EAAGtlN,IAAI,eAAiBm6W,KAC7E,GAAIuF,EAAc,CAChB,IAAMizU,EAAgBjzU,EAAa1/W,IAAI,uBACvC,GAAI2yrB,EAAe,CAEjB,IAAMC,EAAa/jrB,MAAI9N,MAAM4xrB,GACzBA,EAAc1trB,KAAI,SAACqhrB,GAAD,OAAeA,EAAK3irB,IAAI,QAAS,GAAGA,IAAI,4BAA6B,MACvFgvrB,EACJ,OAAOhzb,EAAQh8P,IAAI,sBAAuBivrB,GAE5C,IACMC,EADgBnzU,EAAa7iW,MAAM,CAAC,kBAAmB,uBAAwBwI,iBAAO,KAEzF7d,QAAO,SAAC8+qB,GAAD,uBAAeA,EAAKtmrB,IAAI,sBAAxB,YACP4H,QAAO,SAACutI,EAAUmxiB,GAAX,OAAyBnxiB,EAAIxxI,IAAI2irB,EAAKtmrB,IAAI,QAASsmrB,EAAK3irB,IAAI,QAAS,GAAGA,IAAI,4BAA6B,MAAKkL,iBACxH,OAAO8wP,EAAQh8P,IAAI,sBAAuBkvrB,GAE5C,OAAOlzb,KAnB6B+yb,GAuBpC7jrB,MAAI9N,MAAMyxrB,GACZ90a,EAAI/5Q,IAAI,WAAY6urB,EAAoBvtrB,KAAI,SAACytrB,GAAD,OAAeD,EAAkBC,OAG7Eh1a,EAAI/5Q,IAAI,WAAY8urB,EAAkBD,IAK1C,IAAMtge,EAAW,OAAGjnC,QAAH,IAAGA,OAAH,EAAGA,EAAOjrL,IAAI,eAC/B,GAAIkyN,EAAa,CACf,IAAM4ge,EAAmBjkrB,MAAI9N,MAAMmxN,GAC/BA,EAAYjtN,KAAI,SAACypL,GAAD,OAAaA,EAAG/qL,IAAI,QAAS,GAAGA,IAAI,4BAA6B,GAAGA,IAAI,kBAAmB,MAC3GuuN,EACJwrD,EAAI/5Q,IAAI,cAAekL,cAAI,CAAEg5G,QAASirkB,KAIxCp1a,EAAIj5J,OAAO,iBACXi5J,EAAIj5J,OAAO,wBACXi5J,EAAIj5J,OAAO,eAxFap/F,iBAAO,CAAEipM,aAwRnCyke,8BAxLoC,SAAC37kB,EAAiBk3G,EAAcrjC,GACpE,OAAK7zE,EAEEA,EAAWnqG,eAAc,SAACywQ,GAAc,IAAD,oBAC5CA,EAAI/5Q,IAAI,UAAW2qN,GAGnBovD,EAAI/5Q,IAAI,oBAAqB,EAAC,IAG9B,IAAMwvN,EAAWuqD,EAAI19Q,IAAI,YAMzB,GALImzN,GACFuqD,EAAI/5Q,IAAI,WAAY4rrB,GAAyBN,uBAAuB97d,IAIlEloC,EAAO,CACT,IAAMungB,EAAsBjD,GAAyBC,uBAAuB9xa,EAAKzyF,GAAO,GACxFyyF,EAAI/5Q,IAAI,WAAY6urB,GAItB,IAAMQ,EAAuB,IAC7B,UAAIt1a,EAAI19Q,IAAI,sBAAZ,iBAAI,EAAwBwF,gBAA5B,aAAI,UAAmC,KAASwtrB,EAAW3qrB,KAAK,iBAChE,UAAIq1Q,EAAI19Q,IAAI,yBAAZ,iBAAI,EAA2BwF,gBAA/B,aAAI,UAAsC,KAASwtrB,EAAW3qrB,KAAK,oBACnE,UAAIq1Q,EAAI19Q,IAAI,6BAAZ,iBAAI,EAA+BwF,gBAAnC,aAAI,UAA0C,KAASwtrB,EAAW3qrB,KAAK,wBACvE,UAAIq1Q,EAAI19Q,IAAI,mBAAZ,iBAAI,EAAqBwF,gBAAzB,aAAI,UAAgC,KAASwtrB,EAAW3qrB,KAAK,aAC7D,UAAIq1Q,EAAI19Q,IAAI,gBAAZ,iBAAI,EAAkBwF,gBAAtB,aAAI,UAA6B,KAASwtrB,EAAW3qrB,KAAK,SAC1Dq1Q,EAAI/5Q,IAAI,aAAc0hB,iBAAO2tqB,IAG7Bt1a,EAAIj5J,OAAO,eACXi5J,EAAIj5J,OAAO,kBACXi5J,EAAIj5J,OAAO,sBACXi5J,EAAIj5J,OAAO,YACXi5J,EAAIj5J,OAAO,SAGPi5J,EAAI19Q,IAAI,eACV09Q,EAAI/5Q,IAAI,cAAe,EAAC,IAExB+5Q,EAAIj5J,OAAO,kBAxCWp/F,iBAAO,CAAEipM,aAwLnC2ke,eA3BqB,SAACj+kB,GACtB,OAAIA,EAAQ,KAAc,GAAN,OAAUA,EAAV,KAChBA,EAAQ,QAAqB,GAAN,QAAWA,EAAQ,MAAMqhJ,QAAQ,GAAjC,KACrB,GAAN,QAAWrhJ,EAAK,SAAkBqhJ,QAAQ,GAA1C,MAyBA06b,gBACAmC,iBAnBuB,SAAC3B,EAA+BC,GACvD,OAAOD,EAAoB7nrB,MAAK,SAAAyprB,GAC9B,IAAMl8oB,EAAOu6oB,EAAU2B,GACvB,QAAKl8oB,IACEA,EAAK/rC,GAAGxB,MAAK,SAACrF,GAAD,OAAgB0srB,GAAa1srB,OAC5C4yC,EAAK8gH,GAAGruJ,MAAK,SAACrF,GAAD,OAAgB0srB,GAAa1srB,OAC1C4yC,EAAKk7oB,IAAIzorB,MAAK,SAACrF,GAAD,OAAgB0srB,GAAa1srB,YCpNvC+urB,GAAoB1ypB,gBAAwC,MAE5D2ypB,GAAgB,WAC3B,IAAMlurB,EAAUu7B,aAAiB0ypB,IACjC,IAAKjurB,EACH,MAAM,IAAItB,MAAM,wDAElB,OAAOsB,GC/CHmurB,GAAe,eAGfC,GAA2B,CAAC,QAAS,cAAe,SA0I7CC,GAA0B,CACrCC,gBAAiB,CAAExogB,OAAO,EAAM6vI,aAAa,EAAMylH,OAAO,EAAMmzQ,UAAU,GAC1EC,iBAAkB,CAAE5M,YAAY,EAAMr1d,iBAAiB,EAAMkie,gBAAgB,EAAM5ie,SAAS,GAC5F6ie,aAAc,OACdC,YAAa,OACbC,uBAAuB,EACvBC,qBAAqB,EACrBC,uBAAwB,CAAEC,aAAa,EAAMC,WAAW,EAAMC,iBAAiB,GAC/EC,uBAAwB,CAAEtN,YAAY,EAAMx4d,aAAa,EAAM+le,WAAW,GAC1EC,+BAAgC,WAChCC,sBAAuB,GACvBC,qBAAsB,CAAE35X,aAAa,EAAMC,gBAAgB,EAAOC,oBAAoB,EAAO97R,UAAU,EAAOtiB,OAAO,IAiwBxGs6D,gBAl5BA,SAACC,GAAD,MAA+B,CAC5CiqgB,YAAa,CACX/pgB,QAAS,OACTM,eAAgB,gBAChBzC,WAAY,SACZ6C,QAAS,aAEXmmmB,UAAW,CACT96jB,SAAU,GACVoV,WAAY,KAEd5gF,QAAS,CACPmgC,QAAS,cAITmuD,UAAW,UAEbwujB,UAAW,CACTj3jB,YAAa,oBACb3N,aAAc,GACdijJ,UAAW,IACXywC,UAAW,QAEbmxY,YAAa,CACXl3jB,YAAa,oBACbkH,YAAa,GACb7U,aAAc,IAEhB8kkB,WAAY,CACVjwjB,YAAa,GACbouI,UAAW,IACXywC,UAAW,OACXt9K,UAAW,UAEb2ujB,aAAc,CACZx9mB,QAAS,OACTK,cAAe,SACfK,QAAS,QACT8rC,aAAc,qBAEhBqwT,aAAc,CACZhyU,MAAO,UACPs2B,WAAY,IACZpV,SAAU,IAEZ0xkB,cAAe,CACb1xkB,SAAU,GACVlhB,MAAO,OACPC,eAAgB,aAElB4ylB,YAAa,CACX3xkB,SAAU,GACVlhB,MAAO,QAET8ylB,gBAAiB,CACf5xkB,SAAU,GACVlhB,MAAO,QAET+ylB,gBAAiB,CACfn+jB,OAAQ,oBACRpT,aAAc,EACd3rC,QAAS,GACTu3C,aAAc,GACdpW,SAAU,YAEZg8kB,qBAAsB,CACpB18jB,WAAY,IACZlJ,aAAc,GAEhB6lkB,WAAY,CACVjzlB,MAAO,UACPs2B,WAAY,IACZpV,SAAU,GACV9B,OAAQ,UACRpI,SAAU,WACVziG,MAAO,GACP85G,IAAK,IAEP6kkB,aAAc,CACZt+jB,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,QAEjBowf,WAAY,CACVnggB,gBAAiB,UACjB/e,MAAO,OACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,OACf,UAAW,CACT/P,gBAAiB,YAGrBo0kB,cAAe,CACbt9mB,QAAS,YACTJ,eAAgB,YAElB29mB,kBAAmB,CACjBr0kB,gBAAiB,UACjByc,WAAY,qBAEd63jB,oBAAqB,CACnB73jB,WAAY,yBAEdg8iB,iBAAkB,CAChBxrjB,WAAY,GAEdsnkB,oBAAqB,CACnBpykB,SAAU,IAEZqykB,kBAAmB,CACjBvzlB,MAAO,OACPotB,aAAc,GAEhBomkB,aAAc,CACZxzlB,MAAO,QAETyzlB,YAAa,CACXt+mB,QAAS,OACTnC,WAAY,aACZosC,OAAQ,UACRvpC,QAAS,QACTuuC,SAAU,UAEZsvkB,kBAAmB,CACjBv+mB,QAAS,OACTnC,WAAY,SACZosC,OAAQ,cAgxBGpqC,EAxvBkD,SAAC,GAAyB,IAAvB2+mB,EAAsB,EAAtBA,OAAQ1gnB,EAAc,EAAdA,QAClEntD,EAAM+xB,YAAe,gBAArB/xB,EACR,EAmBIqrqB,KAlBFlje,EADF,EACEA,UACAohe,EAFF,EAEEA,oBACAuE,EAHF,EAGEA,uBACAC,EAJF,EAIEA,mBACAC,EALF,EAKEA,sBACAzW,EANF,EAMEA,iBACA0W,EAPF,EAOEA,oBACAC,EARF,EAQEA,iBACAC,EATF,EASEA,oBACAC,EAVF,EAUEA,eACAC,EAXF,EAWEA,qBACAC,EAZF,EAYEA,qBACAC,EAbF,EAaEA,wBACAz3X,EAdF,EAcEA,oBACAl+L,EAfF,EAeEA,QACA0tF,EAhBF,EAgBEA,QACAkoe,EAjBF,EAiBEA,wBACAC,EAlBF,EAkBEA,2BAEI7vpB,EAAW2F,wBACX0+I,EAAQt9I,sBAAYmwN,YAAgBhzP,OAAOwjN,KACjD,EAA0D5tL,WAAwC,IAAlG,mBAAOg2pB,EAAP,KAA8BC,EAA9B,KAGA,EAA4Dj2pB,WAAwC,CAAEuqJ,OAAO,IAA7G,mBAAO2rgB,EAAP,KAA+BC,EAA/B,KACA,EAA4Dn2pB,WAA8B,MAA1F,mBAAOo2pB,EAAP,KAA+BC,EAA/B,KACAr2pB,aAAgB,WACV41pB,IAAyBM,EAAuBN,IAAyBQ,IAA2BR,IACtGS,EAA0BT,GAE1B//Z,uBAAsB,WACpBsga,GAA0B,SAAAtjrB,GAAI,kCAAUA,GAAV,kBAAiB+irB,GAAuB,OACtES,EAA0B,YAG7B,CAACT,IAIJ,IAAMU,EAAa5qpB,qBACb6qpB,GAAyBv2pB,eAAkB,WAC/C,IAAMuC,EAAQ+zpB,EAAWp0pB,WACzB,MAAO,CACLm6oB,WAAY1lkB,wBAAc6/kB,GAAd7/kB,CAAqCp0E,GACjD63R,YAAazjN,wBAAc8/kB,GAAd9/kB,CAAsCp0E,GACnDs9Y,MAAOlpU,wBAAci8kB,GAAdj8kB,CAA4Bp0E,MAEpC,CAAC+zpB,IAMExa,GAA0B7uoB,uBAAY,SAAC1K,GAAgB,IAAD,EACpDm0pB,EAAY//kB,wBAAc6/kB,GAAd7/kB,CAAqCp0E,GACvD,cAAOm0pB,QAAP,IAAOA,GAAP,UAAOA,EAAMp3rB,WAAb,aAAO,OAAAo3rB,EAAY,8BAMfC,GAAsC32pB,WAAc,WACxD,IAAK6+oB,IAAqB/C,GAA2B,OAAO,KAC5D,IAAM8a,EAAc9a,GAAwBx8qB,IAAIu/qB,GAC1CgY,EAAW,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAat3rB,IAAI,YACrC,IAAKu3rB,EAAe,OAAO,KAC3B,IAAM/2Z,EAAM,IAAI1lS,IAOhB,OANAy8rB,EAAY5urB,SAAQ,SAACg3P,GAAkB,IAAD,EACpC,UAAAA,EAAQ3/P,IAAI,mBAAZ,SAAyB2I,SAAQ,SAAC+oE,GAAY,IAAD,EACrC8lnB,EAAG,OAAG9lnB,QAAH,IAAGA,GAAH,UAAGA,EAAG1xE,WAAN,aAAG,OAAA0xE,EAAS,iBACV,MAAP8lnB,GAAeh3Z,EAAI5lR,IAAI48qB,SAGxBh3Z,IACN,CAAC++Y,EAAkB/C,KAMhBib,GAA2B/2pB,eAAkB,SAAC0qpB,GAA+C,IAAD,EAChG,OAAY,OAALnggB,QAAK,IAALA,GAAA,UAAAA,EAAOjrL,IAAI,mBAAX,eAAwB4H,QAAO,SAACutI,EAAUwqH,EAAcN,GAC7D,IAAMvrI,GAAY6rI,EAAQ3/P,IAAI,aAAeqlB,iBAAO,KAAK7d,QAAO,SAACkqE,GAC/D,OAAqB,IAAjBA,EAAE1xE,IAAI,QACNorrB,EACKA,EAAsBlrrB,IAAIwxE,EAAE1xE,IAAI,mBAEjC1G,QAAQo4E,EAAE1xE,IAAI,qCAExB,OAAOm1I,EAAI9sI,KAAKgd,iBAAO,CACrByuG,SAAUA,EAAS7uH,KAAI,SAACysE,EAAQwkD,GAAT,OACrBxkD,EAAE1xE,IAAI,iBAAN,sBAA8Bq/P,EAAe,IAAMnpI,EAAnD,mBACFikP,UAAWx6G,EAAQ3/P,IAAI,aACvB0+W,aAAc/+G,EAAQ3/P,IAAI,iBAAmB,QAE9CqlB,iBAAO,OAAQA,iBAAO,MACxB,CAAC4lK,IAGEysgB,GAAsCh3pB,eAAkB,SAACosS,GAA4C,IAAD,EACxG,IAAK0vW,GAA2B,OAAO,KACvC,IAAM+a,EAAW,UAAG/a,GAAwBx8qB,IAAI8sU,UAA/B,aAAG,EAAyC9sU,IAAI,YACjE,IAAKu3rB,EAAe,OAAO,KAC3B,IAAM/2Z,EAAM,IAAI1lS,IAOhB,OANAy8rB,EAAY5urB,SAAQ,SAACg3P,GAAkB,IAAD,EACpC,UAAAA,EAAQ3/P,IAAI,mBAAZ,SAAyB2I,SAAQ,SAAC+oE,GAAY,IAAD,EACrC8lnB,EAAG,OAAG9lnB,QAAH,IAAGA,GAAH,UAAGA,EAAG1xE,WAAN,aAAG,OAAA0xE,EAAS,iBACV,MAAP8lnB,GAAeh3Z,EAAI5lR,IAAI48qB,SAGxBh3Z,IACN,CAACg8Y,KAEEmb,GAA2Bj3pB,WAAc,WAC7C,OAAOrb,iBAAO,CACZ0hqB,WAAY,EAAC,GACbuN,UAAW,EAAC,GACZhxkB,SAAUi8jB,GAAoB,GAC9Bpsd,SAAUske,GAAyBJ,IACnCnD,YAAa,EAAC,GACd3le,YAAa,EAAC,GACdqpe,oBAAqB9P,GAA6BmC,SAClDmK,gBAAiB,EAAC,GAClBD,UAAW,EAAC,OAEb,CAACsD,GAA0BJ,GAAqC9X,IAE7DsY,GAAgCn3pB,WAAc,kBAClDi3pB,GAAyBjrrB,MAAM2Y,iBAAO,CAAEy1S,YAAa,EAAC,GAAOC,eAAgB,EAAC,GAAQC,mBAAoB,EAAC,GAAQ97R,SAAU,EAAC,GAAQtiB,MAAO,EAAC,QAChJ,CAAC+6qB,KAEKG,GAAgCp3pB,WAAc,kBAClDi3pB,GAAyBjrrB,MAAM2Y,iBAAO,CAAEy1S,YAAa,EAAC,GAAQC,eAAgB,EAAC,GAAOC,mBAAoB,EAAC,GAAQ97R,SAAU,EAAC,GAAQtiB,MAAO,EAAC,QAChJ,CAAC+6qB,KAGKI,GAAgCr3pB,eAAkB,WACtD,GAAK6+oB,EAAL,CACA,MAA2C0X,KAAnCla,EAAR,EAAQA,WAAYjiX,EAApB,EAAoBA,YAAaylH,EAAjC,EAAiCA,MACjCk2Q,GAA2B,SAAAljrB,GAAI,kCAC1BA,GAD0B,kBAE5BgsqB,EAAmB,CAAExC,aAAYjiX,cAAaylH,iBAEhD,CAACg/P,EAAkB0X,KAIhBe,GAAuBt3pB,SAAgE,MAC7FA,aAAgB,WACd,IAAKs3pB,GAAqBj0pB,QAAS,EACnB,SAAR48N,IACJ,IAAMy2b,EAAOH,KACTG,EAAKra,WACPib,GAAqBj0pB,QAAUqzpB,EAE/BtipB,WAAW6rN,EAAO,KAGtBA,MAED,CAACs2b,KAGwBv2pB,SAAa6+oB,GACrBx7oB,QAAUw7oB,EAE9B,IAAM0Y,GAAiBv3pB,UAAa,GAO9Bw3pB,GAA4Bx3pB,eAAkB,SAACosS,GAAwB,IAAD,IAKtDqrX,EAA4BlB,KAAxCla,WACFqb,EAAU,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAyBn4rB,IAAI,2BAC1Cq4rB,EAAU,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAyBn4rB,IAAI,wBAE1Cs4rB,EAAQ9B,EAAwB1pX,GAChCh0R,EAAWk/oB,GAAqBj0pB,QAClCw0pB,GAAqB,OAALD,QAAK,IAALA,OAAA,EAAAA,EAAOvb,cAAP,OAAqBjkoB,QAArB,IAAqBA,OAArB,EAAqBA,EAAUikoB,YAKnD,OAHkB,OAACub,QAAD,IAACA,OAAD,EAACA,EAAOvb,aAGTwb,EAAe,CAC9B,IAAM5R,EAAoB,OAAGwR,QAAH,IAAGA,OAAH,EAAGA,EAAyBn4rB,IAAI,iBACtD2mrB,IACF4R,EAAgBA,EAAc50rB,IAAI,gBAAiBgjrB,GACnDA,EAAqBh+qB,SAAQ,SAAChR,EAAY4I,GACxCg4rB,EAAgBA,EAAc50rB,IAAIpD,EAAK5I,OAI3C,IAAM6gsB,GAA2B,OAALvtgB,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,uBAAwB8sU,EAC/DyrX,EAAgBA,EACb50rB,IAAI,WAAY60rB,GAChB70rB,IAAI,iBAAkB0hB,iBAAO,EAAC,KAQnC,GAAIkzqB,EAAe,CAAC,IAAD,IAEXzT,EADkBxrrB,QAAQi/rB,EAAcv4rB,IAAI,cAEtB,OAAvBm4rB,QAAuB,IAAvBA,GAAA,UAAAA,EAAyBn4rB,IAAI,kCAA7B,eAAyDA,IAAI8sU,MAA7D,OACEqrX,QADF,IACEA,GADF,UACEA,EAAyBn4rB,IAAI,kCAD/B,aACE,EAAyDA,IAAzD,UAAgE8sU,KACnE,KACE2rX,GAAgC,OAAR3T,QAAQ,IAARA,OAAA,EAAAA,EAAU9krB,IAAI,eAAd,OAA6BirL,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAOjrL,IAAI,aAChEglrB,EAAeuT,EAAcv4rB,IAAI,YACvC,GAAIy4rB,GAAyBzT,EAAc,CAOzC,IAAMC,EAAiBwT,EAAsBjxrB,QAAO,SAACiC,GAAD,aACjD,UAAAA,EAAEzJ,IAAI,mBAAN,eAAmBhI,OAAQyR,EAAEzJ,IAAI,YAAY0J,MAAK,SAACgoE,GAAD,OAA6B,IAAjBA,EAAE1xE,IAAI,UAAkByJ,EAAEzJ,IAAI,WAGzFklrB,EAA2C,GACjDF,EAAar8qB,SAAQ,SAACw4jB,GACpB,IAAMjkiB,EAAKikiB,EAAGnhkB,IAAI,aACdk9B,IAAMgopB,EAAoBhopB,GAAMikiB,MAEtC,IAAMgkH,EAAcF,EAAehgrB,KAAI,SAACmgrB,EAAoB/lb,GAC1D,IAAM86G,EAAYirU,EAAcplrB,IAAI,aAC9B8zH,GAAYsxjB,EAAcplrB,IAAI,aAAekU,kBAAQ1M,QAAO,SAACkqE,GAAD,OAA6B,IAAjBA,EAAE1xE,IAAI,SAC9Esmb,EAAaxyT,EAAS7uH,KAAI,SAACguH,EAAciD,GAAf,OAC9BjD,EAAQjzH,IAAI,kBAAZ,sBAA4Cq/P,EAA5C,YAA4DnpI,EAA5D,mBAEIipjB,EAAmB7lrB,QAAQgtb,EAAWtub,OAAU87H,EAAS97H,MAAQotrB,EAAcplrB,IAAI,SACnF2L,EAAWu5qB,EAAoB/qU,GACrC,GAAIxuW,EACF,OAAOA,EACJhI,IAAI,WAAY2ib,GAChB3ib,IAAI,mBAAoBw7qB,GAG7B,IAAM9sW,EAAS+yW,EAAcvoqB,MAAM,CAAC,kBAAmB,cAAe3I,kBACnE1M,QAAO,SAACmrE,GAAD,OAAYA,EAAE3yE,IAAI,kBACzBiF,KAAI,SAAC0tE,GAAD,OAAYA,EAAE3yE,IAAI,SACnBo2P,EAAQgvb,EAAcvoqB,MAAM,CAAC,kBAAmB,uBAAwB3I,kBAC3E1M,QAAO,SAAC1F,GAAD,uBAAYA,EAAE9B,IAAI,sBAAlB,YACPiF,KAAI,SAACnD,GAAD,OAAYA,EAAE9B,IAAI,WACzB,OAAOqlB,iBAAO,CACZyuG,SAAUwyT,EACVj0G,SACAj8E,QACA+jH,YACAuE,aAAc0mU,EAAcplrB,IAAI,gBAChC09W,KAAM0nU,EAAcplrB,IAAI,QACxBm/qB,wBAGJoZ,EAAgBA,EAAc50rB,IAAI,WAAYwhrB,IAIlDv+oB,EAAS8/B,aAAWwwnB,GAAuBqB,KAG3C,OAAIH,QAAJ,IAAIA,OAAJ,EAAIA,EAAYpgsB,OACd4uC,EAASu/B,aAAO+wnB,GAAuB,0BAA2BkB,IAEhEC,GACFzxpB,EAASu/B,aAAO+wnB,GAAuB,uBAAwBmB,IAOjE,IAAMK,EAAsBjB,GAAyBC,GAAoC5qX,IACnF6rX,KAAgB,UAAC3B,EAAWp0pB,WAAW82E,YAAvB,aAAC,yBACvB,UAAI4+kB,QAAJ,IAAIA,OAAJ,EAAIA,EAAOx9X,YACTl0R,EAAS8/B,aAAWywnB,GAAwBmB,EAAMx9X,cAClDl0R,EAASu/B,aAAOgxnB,GAAwB,WAAYrqX,SAC/C,GAAI6rX,EAAc,CACvB,IACMC,IADe,OAAR9/oB,QAAQ,IAARA,OAAA,EAAAA,EAAUgiR,cAAe68X,IACd1qrB,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAI,WAAY+0rB,GACpBh7a,EAAI/5Q,IAAI,WAAYmpU,MAEtBlmS,EAAS8/B,aAAWywnB,GAAwByB,IAE9C,IAAMC,KAAgB,UAAC7B,EAAWp0pB,WAAW82E,YAAvB,aAAC,gBACvB,UAAI4+kB,QAAJ,IAAIA,OAAJ,EAAIA,EAAO/3Q,MACT35Y,EAAS8/B,aAAW4snB,GAAcgF,EAAM/3Q,QACxC35Y,EAASu/B,aAAOmtnB,GAAc,WAAYxmX,SACrC,GAAI+rX,EAAc,CACvB,IACMC,IADiB,OAARhgpB,QAAQ,IAARA,OAAA,EAAAA,EAAUynY,QAASo3Q,IACR1qrB,eAAc,SAACywQ,GACvCA,EAAI/5Q,IAAI,WAAY+0rB,GACpBh7a,EAAI/5Q,IAAI,WAAYmpU,MAEtBlmS,EAAS8/B,aAAW4snB,GAAcwF,OAEnC,CAACtC,EAAyB5vpB,EAAUqwpB,GAAwB9me,EAAWsne,GAA0BC,GAAqCC,GAA0BX,IAG7J+B,GAAsBr4pB,eAAkB,SAACosS,GACzCA,IAAeyyW,IACnBwY,KACAE,GAAel0pB,SAAU,EACzBkypB,EAAoBnpX,GAEpBh4R,YAAW,WACTojpB,GAA0BprX,GAE1Bh4R,YAAW,WAAQmjpB,GAAel0pB,SAAU,IAAU,MACrD,MACF,CAACw7oB,EAAkBwY,GAA+BG,KAQ/Cc,GAAmBt4pB,eAAkB,SACzCy9oB,GAEI,IADJ8a,EACG,uDAD+C,aAElD,GAAK1Z,EAAL,CAEAwY,KACA,MAA6Fd,KAAzEiC,EAApB,EAAQnc,WAA4Coc,EAApD,EAAuCr+X,YAAwCs+X,EAA/E,EAAwE74Q,MAClE84Q,EAAkBnD,EAAiB3W,IAAqBiU,GACxD8F,EAAW57rB,MAAMC,QAAQwgrB,IAAeA,EAAWrgrB,OAAS,EAE5DghrB,EAAiB3ud,EAAUlrN,KAAI,SAACnD,GAAD,OAAYA,EAAE9B,IAAI,SAAOwa,OACxD++qB,EAAe,eAAQrD,GACvB5gB,EAAiB,eAAQkhB,GAEzBgD,EAAgB,SAACvwqB,EAAaC,EAAampT,GAC/C,IAAKnpT,EAAU,OAAOD,EACtB,IAAMqhO,EAAOrhO,GAAUC,EAEjBuwqB,EAA2B,GAC3BC,EAAgC,GAQtC,OAPArnX,EAAO1pU,SAAQ,SAACgqE,GACVA,EAAEgmH,WAAW,aACf+ggB,EAAoBrxrB,KAAKsqE,EAAE5mE,MAAM,YAAYjO,SAE7C27rB,EAAepxrB,KAAKsqE,MAGjB23K,EAAKr9O,eAAc,SAACywQ,GAUzB,GARA+7a,EAAe9wrB,SAAQ,SAACi+W,GACtB,IAAM10W,EAAMgX,EAAOlpB,IAAI4mX,QACX7uX,IAARma,GACFwrQ,EAAI/5Q,IAAIijX,EAAW10W,MAKnBwnrB,EAAoB57rB,OAAS,EAAG,CAClC,IAAMinrB,EAAiB77pB,EAAOlpB,IAAI,YAC5B25rB,EAAiBj8a,EAAI19Q,IAAI,YAC/B,GAAI+krB,GAAkB4U,GAAkB5U,EAAep8qB,SAAWgxrB,EAAe10rB,IAAK,CACpF,IAAM20rB,EAAyC,GAC/C7U,EAAep8qB,SAAQ,SAACc,GAAY,IAAD,EAC3ByzB,EAAE,UAAGzzB,EAAEzJ,WAAL,aAAG,OAAAyJ,EAAQ,aACfyzB,IAAM08pB,EAAkB18pB,GAAMzzB,MAEpC,IAAM4yqB,EAAkBsd,EAAe10rB,KAAI,SAAC40rB,GAAwB,IAAD,EAC3D1/U,EAAS,UAAG0/U,EAAc75rB,WAAjB,aAAG,OAAA65rB,EAAoB,aAChCzU,EAAgBjrU,EAAYy/U,EAAkBz/U,GAAa,KACjE,OAAKirU,EACEyU,EAAc5srB,eAAc,SAAC6srB,GAClCJ,EAAoB/wrB,SAAQ,SAACoxrB,GAC3B,IAAM7nrB,EAAMkzqB,EAAcplrB,IAAI+5rB,QAClBhisB,IAARma,GACF4nrB,EAAKn2rB,IAAIo2rB,EAAU7nrB,SALI2nrB,KAU/Bn8a,EAAI/5Q,IAAI,WAAY04qB,SAStB2d,EAAwBV,GAAwB,eAAZL,GACrCv7rB,MAAMC,QAAQwgrB,IAAqC,IAAtBA,EAAWrgrB,QAAkC,oBAAlBqgrB,EAAW,GAClE8b,EAA4B,SAAC/8pB,GAAgB,IAAD,IAC1Co7pB,EAAK,UAAGhjB,EAAkBp4oB,UAArB,iBAAG,EAAuB6/oB,kBAA1B,aAAG,EAAmC/8qB,IAAI,YACrD,YAAcjI,IAAVugsB,EAA8Bh/rB,QAAQg/rB,IAC9B,OAALrtgB,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,uBAAwBk9B,GAiE5C,GA9DA4hpB,EAAen2qB,SAAQ,SAACu0B,GACtB,GAAIA,IAAOqipB,KAEPya,IAAyBC,EAA0B/8pB,IAAvD,CAEKo8pB,IACHC,EAAgBr8pB,GAAhB,eAA2Bm8pB,IAE7B,IAIIa,EAaAC,EAeAC,EAhCET,EAAiBlC,GAAyBC,GAAoCx6pB,IAC9EvxB,EAAW2pqB,EAAkBp4oB,IAAO,GAKxCg9pB,EADEZ,GAAwB,eAAZL,EACMO,EAAc7trB,EAASoxqB,WAAYmc,EAAmB/a,GACjEmb,EAEW3trB,EAASoxqB,WAETmc,EAChBA,EAAkBv1rB,IAAI,YAAa0hB,iBAAO,CAAC6X,KAC3CvxB,EAASoxqB,WAMbod,EADEb,GAAwB,gBAAZL,EACOO,EAAc7trB,EAASmvT,YAAaq+X,EAAoBhb,GACpEmb,EACY3trB,EAASmvT,YACrBq+X,EACYA,EAAmBlsrB,eAAc,SAACywQ,GACrDA,EAAI/5Q,IAAI,WAAYu5B,GACpBwgP,EAAI/5Q,IAAI,WAAYg2rB,MAGDhurB,EAASmvT,YAM9Bs/X,EADEd,GAAwB,UAAZL,EACFO,EAAc7trB,EAAS40a,MAAO64Q,EAAWjb,GAC5Cmb,EACG3trB,EAAS40a,MACZ64Q,EACGA,EAAUnsrB,eAAc,SAACywQ,GACnCA,EAAI/5Q,IAAI,WAAYu5B,GACpBwgP,EAAI/5Q,IAAI,WAAYg2rB,MAGVhurB,EAAS40a,MAGvB+0P,EAAkBp4oB,GAAM,CACtB6/oB,WAAYmd,EACZp/X,YAAaq/X,EACb55Q,MAAO65Q,OAGXjE,EAAoBoD,GACpB9C,EAA2BnhB,IACtBgkB,EAAU,CACb,IAAMe,EAAc3D,EAAsBnX,KAAqB,EACzD+a,EAAa,eAAQ5D,GAC3B5X,EAAen2qB,SAAQ,SAACu0B,GAClBA,IAAOqipB,IACX+a,EAAcp9pB,GAAMm9pB,MAEtB1D,EAAyB2D,OAE1B,CAAC/a,EAAkBpvd,EAAW+le,EAAkBM,EAAyBE,EAAuBqB,GAA+Bd,GAAwBQ,GAA0BC,GAAqCzsgB,IAEnNsvgB,GAAuBhH,GAAyB/prB,OAAM,SAAAjJ,GAAG,OAAI61rB,EAAe3C,gBAAgBlzrB,MAiDlG,OACE,uCAEE,uBAAK80E,UAAWF,EAAQisgB,YAAxB,UACE,eAAC3re,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+omB,UAA/B,SACGl2pB,EAAE,qCAEL,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS8f,EAAS5oI,KAAK,QAAnC,SACE,eAAC,KAAD,SAKJ,eAACk6T,GAAA,EAAD,CAAe78O,UAAWF,EAAQv9B,QAAlC,SACE,gBAACk9B,EAAA,EAAD,CAAMW,WAAW,EAAjB,UAEE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQu/mB,UAA5C,UACE,eAAC1gY,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAAS89jB,EACTt+kB,SAAU,SAACpzG,GAAD,OArEQ4zH,EAqEwB5zH,EAAE4kB,OAAOgvG,QApEjE+9jB,EAAsB/9jB,QAEpB69jB,EADE79jB,EACqBk4F,EAAUlrN,KAAI,SAACnD,GAAD,OAAYA,EAAE9B,IAAI,SAAOwa,OAEvC,IALM,IAACy9G,KAwEtBl7F,MAAO/U,EAAE,kCAEVmoM,EAAUlrN,KAAI,SAACq+G,EAAelrH,GAC7B,MAA2D44rB,GAAeC,uBAAuB3tkB,GAAzFwpN,EAAR,EAAQA,WAAYriU,EAApB,EAAoBA,KAAM49C,EAA1B,EAA0BA,MAAO85D,EAAjC,EAAiCA,aAAcQ,EAA/C,EAA+CA,QAE/C,OACE,uBAEEttC,UAAS,UAAKF,EAAQwgnB,YAAb,YAA4BpW,IAAqBzyW,EAAa33P,EAAQmgnB,kBAAoBngnB,EAAQognB,qBAC3Gz0kB,QAAS,kBAAMi4kB,GAAoBjsX,IAHrC,UAKE,eAACz0M,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASs5jB,EAAoB/rrB,SAASsnU,GACtCr1N,SAAU,kBA7EC,SAACq1N,GAC5BgpX,GAAuB,SAAAvirB,GACrB,IAAMqzR,EAAUrzR,EAAK/N,SAASsnU,GAC1Bv5T,EAAK/L,QAAO,SAAA01B,GAAE,OAAIA,IAAO4vS,KADb,sBAERv5T,GAFQ,CAEFu5T,IAYd,OAXAkpX,EAAsBpvZ,EAAQ9oS,SAAWqyN,EAAUn4N,MAE/C4uS,EAAQphS,SAASsnU,IAAeA,IAAeyyW,IACjDwY,KACAE,GAAel0pB,SAAU,EACzBkypB,EAAoBnpX,GACpBh4R,YAAW,WACTojpB,GAA0BprX,GAC1Bh4R,YAAW,WAAQmjpB,GAAel0pB,SAAU,IAAU,MACrD,IAEE6iQ,KA6DuB4zZ,CAAqB1tX,IACrChsN,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBAClB9qC,UAAWF,EAAQukmB,mBAErB,uBAAKrkmB,UAAWF,EAAQ0/mB,aAAxB,UACGpqrB,GAAQ,eAACgrG,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ++V,aAA/B,SAA8Czpa,IACtD49C,GAAS,eAACotD,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ2/mB,cAA/B,SAA+CzsoB,IACxD85D,GAAgB,eAAC1M,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ4/mB,YAA/B,SAA6C5ykB,IAC7DQ,GAAW,eAAClN,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ6/mB,gBAA/B,SAAiDrykB,SAf1DvqH,MAmBRyG,aAIL,gBAACi2E,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQw/mB,YAArC,UACE,eAAC3gY,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASsikB,GACT9ilB,SAAU,SAACpzG,GAAD,OA/EU4zH,EA+EwB5zH,EAAE4kB,OAAOgvG,aA9EnEo+jB,GAAqB,SAAA9irB,GAAI,kCACpBA,GADoB,IAEvBkgrB,gBAAgB,2BACXlgrB,EAAKkgrB,iBACLF,GAAyB3rrB,QAAO,SAACutI,EAAK50I,GAA8B,OAApB40I,EAAI50I,GAAO03H,EAAgBkd,IAAQ,UALzD,IAACld,KAkFxBl7F,MAAO/U,EAAE,kCAEV,CACC,CAAEznB,IAAK,QAASw8B,MAAO/U,EAAE,4CACzB,CAAEznB,IAAK,cAAew8B,MAAO/U,EAAE,mDAFhC,mBAGK82S,EAAsB,CAAC,CAAEv+T,IAAK,QAASw8B,MAAO/U,EAAE,2CAA8C,IAHnG,CAIC,CAAEznB,IAAK,WAAYw8B,MAAO/U,EAAE,iDAC5BxgB,QAAO,SAAAquE,GAAI,OAAI09mB,GAAyB/trB,SAASqwE,EAAKt1E,QAAM0E,KAAI,SAAA4wE,GAAI,OACpE,uBAEER,UAAWF,EAAQygnB,kBACnBr+kB,MAAO,CACL0J,gBAAiBq1kB,IAAyBzgnB,EAAKt1E,IAAM,UAAY,cACjEk9H,YAAa64jB,IAAyBzgnB,EAAKt1E,IAAM,oBAAsB,yBAEzEugH,QAAS,kBAAMy1kB,EAAwB1gnB,EAAKt1E,MAP9C,UASE,eAAC83H,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASm+jB,EAAe3C,gBAAgB59mB,EAAKt1E,KAC7Ck3G,SAAU,SAACpzG,GAAD,OA5FM9D,EA4FwBs1E,EAAKt1E,IA5FhB03H,EA4FqB5zH,EAAE4kB,OAAOgvG,aA3FzEo+jB,GAAqB,SAAA9irB,GAAI,kCACpBA,GADoB,IAEvBkgrB,gBAAgB,2BAAMlgrB,EAAKkgrB,iBAAZ,kBAA8BlzrB,EAAM03H,SAHxB,IAAC13H,EAAa03H,GA6F7BnX,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,qBAEpB,eAAC1K,EAAA,EAAD,CAAYpgC,UAAWF,EAAQqgnB,oBAA/B,SAAqD3/mB,EAAK94C,UAdrD84C,EAAKt1E,WAoBhB,gBAACu0E,EAAA,EAAD,CACEe,MAAM,EACNgB,IAAI,EACJxB,UAAWF,EAAQy/mB,WACnBzrb,SAAU,SAAC8sB,GACLA,IAAQA,EAAWwka,0BACpBxka,EAAWwka,yBAA0B,EAKtCxka,EAAGhxL,iBAAiB,UAAU,WACN,IAAlBgxL,EAAG2tB,aACL3tB,EAAG2tB,WAAa,QAb1B,UAmBE,eAACnuM,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQsgnB,kBAA/C,SACGztqB,EAAE,qCAGL,sBAAKuvF,MAAO,CAAElgC,QAAkC,UAAzBi/mB,EAAmC,QAAU,QAApE,SACE,eAAC,gBAAD,CAAct2P,eAAgB,CAAC,YAAD,OAAa1xO,EAAb,WAA9B,SACE,eAAC,SAAD,CAAOtoG,KAAK,qBAAZ,SACE,eAAC,GAAD,CACEilE,MAAOA,EACPuH,SAAS,EACT+sf,iBAAkBA,EAClBlB,aAAckT,EAAoBzzrB,OAAS,EAAIk7rB,QAAmBjhsB,EAClEqlrB,mCAAoC,SAAChzqB,GAC/Bm1qB,GACFoX,GAAyB,SAAApjrB,GAAI,kCAAUA,GAAV,kBAAiBgsqB,EAAmBn1qB,QAGrE+oqB,WAAY,qBAOnB2jB,GACC,sBAAKv/kB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,SAAUzC,WAAY,SAAU26C,UAAW,KAA1F,SACE,eAACguM,EAAA,EAAD,CAAkB7lU,KAAM,GAAIu/G,MAAO,CAAErV,MAAO,eAK/C00lB,EAAuB97X,aACxB,sBAAKvjN,MAAO,CAAElgC,QAAkC,gBAAzBi/mB,EAAyC,QAAU,QAA1E,SACE,eAAC,gBAAD,CAAct2P,eAAgB,CAAC,YAAD,OAAa1xO,EAAb,iBAA9B,SACE,eAAC,SAAD,CAAOtoG,KAAK,qBAAZ,SACE,eAAClxC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,SACE,eAAC,GAAD,CACEy8G,SAAS,EACT+sf,iBAAkBA,EAClB6L,sBAAuBiM,GACvBhZ,aAAckT,EAAoBzzrB,OAAS,EAAI,SAACu0U,GAAD,OAAuB2mX,GAAiB3mX,EAAQ,qBAAiBt6U,EAChHwiH,cAAes9kB,GACf5sgB,MAAOA,EACPmyf,mCAAoC,aACpCsd,gCAAiC,GACjChM,iCAAkC,uBAS3CkI,EAAuBr2Q,OACxB,sBAAKhpU,MAAO,CAAElgC,QAAkC,UAAzBi/mB,EAAmC,QAAU,QAApE,SACE,eAAC,gBAAD,CAAct2P,eAAgB,CAAC,YAAD,OAAa1xO,EAAb,WAA9B,SACE,eAAC,SAAD,CAAOtoG,KAAK,qBAAZ,SACE,eAAClxC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,SACE,eAAC,GAAD,CACEy8G,SAAS,EACT+sf,iBAAkBA,EAClB6L,sBAAuBiM,GACvB39kB,KAAM45kB,GACNjV,aAAckT,EAAoBzzrB,OAAS,EAAI,SAACu0U,GAAD,OAAuB2mX,GAAiB3mX,EAAQ,eAAWt6U,EAC1GwiH,cAAeu9kB,GACf7sgB,MAAOA,EACPmyf,mCAAoC,aACpCsd,gCAAiC,GACjChM,iCAAkC,uBAS3C6E,GAAyB/trB,SAAS,aACjC,sBAAK+xG,MAAO,CAAElgC,QAAkC,aAAzBi/mB,EAAsC,QAAU,QAAvE,SACE,sBAAKjhnB,UAAWF,EAAQ8/mB,gBAAxB,SACE,eAACx/kB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQugnB,aAA/C,SACG1tqB,EAAE,gDAUjB,gBAACqqS,GAAA,EAAD,CAAeh9O,UAAWF,EAAQkgnB,cAAlC,UACE,eAACz0kB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQignB,aAAct0kB,QAAS8f,EAAlD,SACG54G,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQisiB,WACnBtggB,QAAS,kBAAM+0kB,KACf18kB,SACiC,IAA/Bo4kB,EAAoBzzrB,SACnByzrB,EAAoB7nrB,MAAK,SAAAwzB,GACxB,IAAM47J,EAAWo9f,EAAiBh5pB,IAAOs2pB,GACzC,OAAOn5rB,OAAO+M,OAAO0xL,EAAS26f,iBAAiB/prB,MAAK,SAAArN,GAAC,OAAIA,SAE3Dk1rB,EAAoB7nrB,MAAK,SAAAwzB,GAEvB,OADiBg5pB,EAAiBh5pB,IAAOs2pB,IACzBC,gBAAgBxogB,OAASyrgB,EAAsBx5pB,MAXrE,SAeGlV,EAAE,+B,UC76BE,OAA0B,4CCA1B,OAA0B,0CCmR1BkvD,gBArPA,SAACC,GAAD,MAA+B,CAC5CwjnB,iBAAkB,CAChBtjnB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBI,QAAS,YACT83C,UAAW,KAEb+qkB,aAAc,CACZrjnB,MAAO,IACP+3C,aAAc,IAEhBurkB,YAAa,CACX34lB,MAAO,OACPotB,aAAc,IAEhBwrkB,iBAAkB,CAChBzjnB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZ6C,QAAS,YACT83C,UAAW,KAEbkrkB,aAAc,CACZxjnB,MAAO,IACP+3C,aAAc,IAEhB0rkB,mBAAoB,CAClB94lB,MAAO,OACPotB,aAAc,GACdpG,UAAW,UAEb+xQ,YAAa,CACX/4R,MAAO,UACPub,YAAa,GAEfw9kB,mBAAoB,CAClBnkkB,OAAQ,oBACRpT,aAAc,EACd3rC,QAAS,GACTu3C,aAAc,GACd/3C,MAAO,OACPgB,SAAU,KAEZ2inB,mBAAoB,CAClBh5lB,MAAO,UACPs2B,WAAY,IACZlJ,aAAc,GAEhB6rkB,aAAc,CACZ9jnB,QAAS,OACTnC,WAAY,SACZo6C,aAAc,GAEhB8rkB,cAAe,CACbl5lB,MAAO,UACPub,YAAa,EACb+a,WAAY,QAEd6ikB,wBAAyB,CACvBp6kB,gBAAiB,UACjByC,aAAc,EACd3rC,QAAS,GACTwgC,UAAW,GACX2Q,UAAW,SACX3wC,SAAU,IACVhB,MAAO,QAET+jnB,mBAAoB,CAClBp5lB,MAAO,WAETq5lB,kBAAmB,CACjBlknB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZ6C,QAAS,YACT83C,UAAW,KAEb2rkB,cAAe,CACbjknB,MAAO,IACP+3C,aAAc,IAEhBmskB,aAAc,CACZv5lB,MAAO,OACPotB,aAAc,IAEhBoskB,gBAAiB,CACfrknB,QAAS,OACTnC,WAAY,SACZo6C,aAAc,GAEhBqskB,iBAAkB,CAChBz5lB,MAAO,UACPub,YAAa,EACb+a,WAAY,QAEdojkB,kBAAmB,CACjBn+kB,YAAa,GAEfo+kB,aAAc,CACZ35lB,MAAO,UACPkhB,SAAU,IAEZiykB,cAAe,CACbt9mB,QAAS,YACTJ,eAAgB,YAElBusT,WAAY,CACVptQ,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,OACfvT,YAAa,GAEf2jgB,WAAY,CACVl/gB,MAAO,OACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,WA6HJ95C,EAzH2C,SAAC,GAAiB,IAAf/B,EAAc,EAAdA,QACnDntD,EAAM+xB,YAAe,gBAArB/xB,EACR,EAA2DqrqB,KAAnDyI,EAAR,EAAQA,aAAc3re,EAAtB,EAAsBA,UAAWshe,EAAjC,EAAiCA,KAAMsK,EAAvC,EAAuCA,gBAEjCC,GAAiB,OAAJvK,QAAI,IAAJA,OAAA,EAAAA,EAAMjqrB,QAAO,SAAAisE,GAAC,MAAiB,WAAbA,EAAEiuB,YAAwB,GACzDu6lB,GAAoB,OAAJxK,QAAI,IAAJA,OAAA,EAAAA,EAAMjqrB,QAAO,SAAAisE,GAAC,MAAiB,aAAbA,EAAEiuB,YAA0B,GAC9Dw6lB,GAAkB,OAAJzK,QAAI,IAAJA,OAAA,EAAAA,EAAM3zrB,QAAS,GAAK2zrB,EAAKjorB,OAAM,SAAAiqE,GAAC,MAAiB,aAAbA,EAAEiuB,QAAsC,WAAbjuB,EAAEiuB,UAC/Ey6lB,EAAcH,EAAWl+rB,OAAS,EAClCs+rB,GAAaF,EAEnBx7pB,aAAgB,WACVw7pB,IAAgBC,GAClBL,EAAa,WAEd,CAACI,EAAaC,EAAaL,IAG9B,IAAMO,EAA8D,GACpEL,EAAWrzrB,SAAQ,SAAAwgb,GACZkzQ,EAAiBlzQ,EAAIr8G,cAAeuvX,EAAiBlzQ,EAAIr8G,YAAc,IAC5EuvX,EAAiBlzQ,EAAIr8G,YAAYzkU,KAAK8gb,MAGxC,IAAMmzQ,EAAkB,SAACxvX,GACvB,IAAMxpN,EAAQ,OAAG6sG,QAAH,IAAGA,OAAH,EAAGA,EAAWvyM,MAAK,SAAC9b,GAAD,OAAYA,EAAE9B,IAAI,QAAU8sU,KAC7D,IAAKxpN,EAAY,MAAO,GACxB,MAA+B0tkB,GAAeC,uBAAuB3tkB,GAA7D74G,EAAR,EAAQA,KAAM03G,EAAd,EAAcA,aACd,OAAO13G,GAAQ03G,GAAgB,IAGjC,OACE,uCACE,eAAC+vM,GAAA,EAAD,UACGkqY,EACC,uBAAK/mnB,UAAWF,EAAQwlnB,iBAAxB,UACE,sBAAKl4kB,IAAK85kB,GAAsBlnnB,UAAWF,EAAQylnB,eACnD,eAACnllB,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ0lnB,YAA5C,SACG7yqB,EAAE,oCAEL,eAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAExBi6lB,EACF,uBAAK9mnB,UAAWF,EAAQ2lnB,iBAAxB,UACE,sBAAKr4kB,IAAK+5kB,GAAoBnnnB,UAAWF,EAAQ4lnB,eACjD,gBAACtllB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ6lnB,mBAA/C,UACE,uBAAM3lnB,UAAWF,EAAQ8lT,YAAzB,oBACCjzW,EAAE,qCAGJ3tB,OAAOuL,QAAQy2rB,GAAkBp3rB,KAAI,mCAAEw3rB,EAAF,KAAiB5K,EAAjB,YACpC,uBAEEx8mB,UAAWF,EAAQ8lnB,mBAFrB,UAIE,eAACxllB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+lnB,mBAA/B,SACGoB,EAAgB1+rB,OAAO6+rB,MAEzB5K,EAAa5srB,KAAI,SAACkkb,EAAK/4a,GAAN,OAChB,uBAAeilE,UAAWF,EAAQgmnB,aAAlC,UACE,uBAAM9lnB,UAAWF,EAAQimnB,cAAzB,oBACA,eAAC3llB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6BwzU,EAAIqvP,oBAFzBpoqB,QAPPqsrB,MAeT,sBAAKpnnB,UAAWF,EAAQkmnB,wBAAxB,SACE,eAAC5llB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQmmnB,mBAA/C,SACGtzqB,EAAE,0CAKT,uBAAKqtD,UAAWF,EAAQomnB,kBAAxB,UACE,sBAAK94kB,IAAK+5kB,GAAoBnnnB,UAAWF,EAAQqmnB,gBACjD,eAAC/llB,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQsmnB,aAA5C,SACGzzqB,EAAE,kCAEJi0qB,EAAch3rB,KAAI,SAACkkb,EAAK/4a,GAAN,OACjB,uBAAeilE,UAAWF,EAAQumnB,gBAAlC,UACE,uBAAMrmnB,UAAWF,EAAQwmnB,iBAAzB,oBACA,gBAAClmlB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQymnB,kBAA/C,UACGU,EAAgBnzQ,EAAIr8G,YADvB,WACuCq8G,EAAIqvP,mBAE1CrvP,EAAIx5H,QACH,oBACEtmM,KAAI,gBAAW8/T,EAAIx5H,QACnB1mS,OAAO,SACPgiT,IAAI,sBACJ51P,UAAWF,EAAQ0mnB,aAJrB,SAMG1yQ,EAAIx4H,UAAY,eAZbvgT,WAoBlB,gBAACiiT,GAAA,EAAD,CAAeh9O,UAAWF,EAAQkgnB,cAAlC,UACE,eAACz0kB,EAAA,EAAD,CACEvrC,UAAWF,EAAQ+uT,WACnBpjR,QAAS,WAAQi7kB,EAAgB,IAAKD,EAAa,aAFrD,SAIG9zqB,EAAE,sBAEL,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQisiB,WACnB7pgB,MAAO,CACL0J,gBAAiBm7kB,EAAY,OAAS,WAExCjjlB,SAAUijlB,EACVt7kB,QAAS,kBAAMg7kB,EAAa,UAN9B,SAQG9zqB,EAAE,+B,sJC5OE00qB,GAfgB,CACvBC,UADuB,SACbp5lB,EAAUvgD,EAAepU,GAAyC,OAAD,8HAEvEq+Q,EAAU1pN,EAAIvjG,IAnBN,uBAoBRuva,EAAY,IAAIviH,KAAUC,EAASjqQ,GAHoC,SAItDusX,EAAUC,KAAK,yCAA0C5gY,GAJH,cAIvEo2E,EAJuE,yBAKtEA,GALsE,sCAQ7E/gG,QAAQ7Z,MAAM,uBAAd,MAR6E,kECmR7EwyrB,GAA4B,SAE5BC,GAA0B,WAAsC,IAArCj1P,EAAoC,uDAAf,GACpD,OAAOA,EAAYhgc,QAAO,SAACC,EAAKuqrB,GAAN,OAAcvqrB,IAAU,OAAHuqrB,QAAG,IAAHA,OAAA,EAAAA,EAAKp6rB,OAAQ,KAAI,IAG5D8ksB,GAAc,SAACnsY,EAAkBx7O,GAErC,OADa67mB,GAAeK,gBAAgB1gY,IAE1C,IAAK,MAAO,OAAO,eAAC,KAAD,CAAkBt7O,UAAWF,EAAQ4nnB,cACxD,IAAK,QAAS,OAAO,eAAC,KAAD,CAAW1nnB,UAAWF,EAAQ6nnB,gBACnD,IAAK,OAAQ,OAAO,eAAC,KAAD,CAAiB3nnB,UAAWF,EAAQ8nnB,eACxD,IAAK,QAAS,OAAO,eAAC,KAAD,CAAY5nnB,UAAWF,EAAQ+nnB,gBACpD,QAAS,OAAO,eAAC,KAAD,CAAqB7nnB,UAAWF,EAAQgonB,oBAKtDC,GAAY,SAAC,GAMZ,IANcrgqB,EAMf,EANeA,MAAO31B,EAMtB,EANsBA,OAAQi2rB,EAM9B,EAN8BA,MAAOC,EAMrC,EANqCA,SAAUnonB,EAM/C,EAN+CA,QAOnD,EAAoCz0C,WAAe,IAAnD,mBAAOg+E,EAAP,KAAmB6H,EAAnB,KAoBA,OACE,uBAAKlxC,UAAWF,EAAQoonB,SAAxB,UACE,eAAC9nlB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQqonB,WAA/B,SAA4CzgqB,IAC5C,uBAAKs4C,UAAS,UAAKF,EAAQsonB,WAAb,YAA2BtonB,EAAQuonB,oBAAjD,UACGt2rB,EAAOnC,KAAI,SAACojD,EAAOj4C,GAClB,IAAMw6O,GAAWomc,GAAeD,aAAa1ooB,GAC7C,OACA,eAAC25Q,GAAA,EAAD,CAEEjlS,MAAOsrB,EACP85Q,SAAU,kBAAMm7X,EAASltrB,IACzBilE,UAAWu1K,EAAO,UAAMz1K,EAAQ01P,KAAd,YAAsB11P,EAAQwonB,kBAAqBxonB,EAAQ01P,KAC7E11P,QAAS,CAAEyonB,WAAYzonB,EAAQ0onB,gBAC/B7lsB,KAAK,SALAoY,MAST,wBACEzY,MAAO+mH,EACPjH,SAAU,SAACpzG,GAAD,OAAOkiH,EAAcliH,EAAE4kB,OAAOtxB,QACxCylI,UAtCc,SAAC/4H,GACN,UAAVA,EAAE9D,KAA6B,QAAV8D,EAAE9D,KAA2B,MAAV8D,EAAE9D,KAAyB,MAAV8D,EAAE9D,MAAgBm+G,EAAW+b,SACzFp2H,EAAEg5H,iBACFggkB,EAAM3+kB,EAAW+b,QACjBlU,EAAc,KAEF,cAAVliH,EAAE9D,MAAwBm+G,GAAct3G,EAAOtJ,OAAS,GAC1Dw/rB,EAASl2rB,EAAOtJ,OAAS,IAgCrB6jI,OA5BW,WACbjjB,EAAW+b,SACb4ikB,EAAM3+kB,EAAW+b,QACjBlU,EAAc,MA0BVlxC,UAAWF,EAAQ2onB,wBAiZd5mnB,gBAvtBA,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACTsC,QAAS,eAEXqpgB,YAAa,CACX/pgB,QAAS,OACTM,eAAgB,gBAChBzC,WAAY,SACZ6C,QAAS,aAEXmmmB,UAAW,CACT96jB,SAAU,GACVoV,WAAY,KAEdk8jB,UAAW,CACTj3jB,YAAa,oBACb3N,aAAc,GACdijJ,UAAW,IACXywC,UAAW,QAEboxY,WAAY,CACVjwjB,YAAa,IAEfkwjB,aAAc,CACZx9mB,QAAS,OACTK,cAAe,SACfK,QAAS,QACT8rC,aAAc,qBAEhBqwT,aAAc,CACZhyU,MAAO,UACPs2B,WAAY,IACZpV,SAAU,IAEZ0xkB,cAAe,CACb1xkB,SAAU,GACVlhB,MAAO,OACPC,eAAgB,aAElB4ylB,YAAa,CACX3xkB,SAAU,GACVlhB,MAAO,QAET8ylB,gBAAiB,CACf5xkB,SAAU,GACVlhB,MAAO,QAET67lB,gBAAiB,CACf36kB,SAAU,GACVlhB,MAAO,UACP7qB,QAAS,OACTnC,WAAY,SACZqjC,UAAW,GAEbgllB,SAAU,CACRlmnB,QAAS,OACTnC,WAAY,SACZo6C,aAAc,IAEhBkukB,WAAY,CACVjmnB,MAAO,GACPihD,WAAY,IACZpV,SAAU,GACVlhB,MAAO,QAETu7lB,WAAY,CACVx/jB,KAAM,GAER4sM,KAAM,CACJrzP,OAAQ,cACRypC,gBAAiB,UACjB/e,MAAO,QAET27lB,eAAgB,CACd37lB,MAAO,QAET87lB,aAAc,CACZ1ukB,aAAc,IAEhB2ukB,aAAc,CACZ3ukB,aAAc,IAEhB4ukB,eAAgB,CACd5ukB,aAAc,IAEhBppB,KAAM,CACJhE,MAAO,UACPC,eAAgB,YAChBmf,OAAQ,UACR7D,YAAa,GAEf+5gB,oBAAqB,CACnB1ggB,OAAQ,oBACRpT,aAAc,EACd3rC,QAAS,GACTu3C,aAAc,IAEhB6ukB,eAAgB,CACd9mnB,QAAS,OACTnC,WAAY,SACZo6C,aAAc,GAEhB0qjB,eAAgB,CACd93kB,MAAO,UACPub,YAAa,EACb2F,SAAU,IAEZg7kB,eAAgB,CACd5mnB,OAAQ,cACRksC,aAAc,GACd8J,OAAQ,IAEVkwkB,mBAAoB,CAClBrmnB,QAAS,OACTC,SAAU,OACVpC,WAAY,SACZ4hD,OAAQ,oBACRpT,aAAc,EACd3rC,QAAS,UACT83C,UAAW,IAEb8tkB,iBAAkB,CAChB18kB,gBAAiB,UACjB6V,OAAQ,oBACR50B,MAAO,WAET47lB,eAAgB,CACdhnkB,OAAQ,OACR8tO,QAAS,OACT3mO,KAAM,EACNxmD,SAAU,IACV2rC,SAAU,GACVrrC,QAAS,SAEXu9mB,kBAAmB,CACjBr0kB,gBAAiB,UACjByc,WAAY,qBAEd63jB,oBAAqB,CACnB73jB,WAAY,yBAEdg8iB,iBAAkB,CAChBxrjB,WAAY,GAEdmwkB,gBAAiB,CACf5glB,YAAa,GAEf6glB,iBAAkB,CAChB7glB,YAAa,EACbvb,MAAO,OACPwwB,WAAY,UAEd6rkB,mBAAoB,CAClBjvkB,aAAc,IAEhBkvkB,oBAAqB,CACnBnnnB,QAAS,OACTnC,WAAY,SACZo6C,aAAc,GAEhBmvkB,qBAAsB,CACpBr7kB,SAAU,GACV3F,YAAa,EACbvb,MAAO,QAETw8lB,qBAAsB,CACpBlmkB,WAAY,KAEdmmkB,mBAAoB,CAClBv7kB,SAAU,GACVlhB,MAAO,OACPiiB,WAAY,GAEdy6kB,oBAAqB,CACnBx7kB,SAAU,GACVlhB,MAAO,UACP7qB,QAAS,OACTnC,WAAY,SACZqjC,UAAW,GAEbsmlB,wBAAyB,CACvBphlB,YAAa,GAEfqhlB,oBAAqB,CACnBvmnB,SAAU,KAEZo9mB,YAAa,CACXt+mB,QAAS,OACTnC,WAAY,aACZosC,OAAQ,UACRvpC,QAAS,SAEXglnB,YAAa,CACX35kB,SAAU,GACVlhB,MAAO,WAET86lB,cAAe,CACb55kB,SAAU,GACVlhB,MAAO,WAET+6lB,aAAc,CACZ75kB,SAAU,GACVlhB,MAAO,WAETg7lB,cAAe,CACb95kB,SAAU,GACVlhB,MAAO,WAETi7lB,gBAAiB,CACf/5kB,SAAU,GACVlhB,MAAO,QAETgiS,WAAY,CACVptQ,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,OACfvT,YAAa,GAEf2jgB,WAAY,CACVnggB,gBAAiB,UACjB/e,MAAO,OACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,OACf,UAAW,CACT/P,gBAAiB,YAGrBo0kB,cAAe,CACbt9mB,QAAS,YACTJ,eAAgB,YAElBy9mB,aAAc,CACZlzlB,MAAO,UACP8uB,cAAe,aAEjB+tkB,mBAAoB,CAClBhnnB,QAAS,iBACTmxC,UAAW,UAEb81kB,gBAAiB,CACf57kB,SAAU,GACVlhB,MAAO,QAET+8lB,mBAAoB,CAClBtnnB,eAAgB,SAChBI,QAAS,iBAEXmnnB,eAAgB,CACdpokB,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,gBAwdJ95C,EA1Y4C,SAAC,GAAiB,IAAD,EAAd/B,EAAc,EAAdA,QACpDntD,EAAM+xB,YAAe,gBAArB/xB,EACF80B,EAAWnP,sBAAYkP,gBAC7B,EASIw2oB,KARFyI,EADF,EACEA,aACA3re,EAFF,EAEEA,UACAohe,EAHF,EAGEA,oBACAE,EAJF,EAIEA,KACA7wjB,EALF,EAKEA,QACA0tF,EANF,EAMEA,QACAkje,EAPF,EAOEA,UACA2N,EARF,EAQEA,aAEI57lB,EAAM51D,sBAAYoY,gBAClB/C,EAAQrV,sBAAYoV,gBACpBkoI,EAAQt9I,sBAAYmwN,YAAgBhzP,OAAOwjN,KAC3C8we,GAAiB,OAALn0gB,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,UAAW,GAKlCi9qB,EAA2BtvoB,sBAAY0S,iBAEvC0mR,EAAWiqX,GAAeE,YAAYp0oB,GACtC40oB,GAAiB,OAAHnulB,QAAG,IAAHA,OAAA,EAAAA,EAAKvjG,IAAI,mBAAoB,GAOjD,EAA8C0gC,YAAe,GAA7D,mBAAO2+pB,EAAP,KAAwBC,EAAxB,KAEA,EAA0D5+pB,WACxD6wpB,EAAoBzzrB,OAAS,EAAIyzrB,EAAoB,GAAK,MAD5D,mBAAOgO,EAAP,KAA8BC,EAA9B,KAGA,EAA8B9+pB,YAAe,GAA7C,mBAAO++pB,EAAP,KAAgBC,EAAhB,KACA,EAA0Dh/pB,YAAwC,WAChG,IAAMizJ,EAAmC,GAEzC,OADA49f,EAAoB5orB,SAAQ,SAAAu0B,GAAQy2J,EAAQz2J,IAAM,KAC3Cy2J,KAHT,mBAAOgsgB,EAAP,KAA8BC,EAA9B,KAOAl/pB,aAAgB,WACd,GAAI6wpB,EAAoBzzrB,OAAS,EAAG,CAClC,IAAM+hsB,EAAatO,EAAoB/prB,QAAO,SAAA01B,GAAE,OAAKs0pB,EAAUt0pB,MAC/D,GAAI2iqB,EAAW/hsB,OAAS,EAAG,CACzB,IAAMm5C,EAAsB,eAAQu6oB,GACpCqO,EAAWl3rB,SAAQ,SAAAmkU,GACjB,IAAMxpN,EAAQ,OAAG6sG,QAAH,IAAGA,OAAH,EAAGA,EAAWvyM,MAAK,SAAC9b,GAAD,OAAYA,EAAE9B,IAAI,QAAU8sU,KACvDzkR,GAAgB,OAARi7D,QAAQ,IAARA,OAAA,EAAAA,EAAUtjH,IAAI,WAAY,GACxCi3C,EAAK61R,GAAc,CACjB5hU,GAAIm9C,EAAQ,CAACA,GAAS,GACtB0vG,GAAI,GACJo6hB,IAAK,GACLr5Z,QAASsma,EACT9xpB,QAAS,GACTs6Z,YAAa,OAGjBu3P,EAAalopB,IAGbs6oB,EAAoBzzrB,OAAS,IAAMyhsB,GACrCC,EAAyBjO,EAAoB,MAE9C,CAACA,IAEJ,IAMkCzkX,GAN5BgzX,GAAcP,EAAwB/N,EAAU+N,GAAyB,KAUzEQ,GAAmB,SAACjtc,EAAen7P,GAClC4nsB,GACLJ,GAAa,SAAA5rrB,GAAI,kCACZA,GADY,kBAEdgsrB,EAFc,2BAEehsrB,EAAKgsrB,IAFpB,kBAE6Czsc,EAAQn7P,UAIlEqosB,GAAmB,SAACltc,EAAe16P,GACvC,GAAK0nsB,GAAL,CACA,IAAMl5Z,EAAO,YAAOk5Z,GAAYhtc,IAChC8zC,EAAQv7R,OAAOjT,EAAO,GACtB2nsB,GAAiBjtc,EAAO8zC,KA8BpBssZ,GAAmBlC,GAAekC,iBAAiB3B,EAAqBC,GAGxEyO,IAD6BH,GAAcjD,GAAwBiD,GAAYl4P,aAAe,GAClCg1P,GAC5DsD,GAAiC3O,EAAoB7nrB,MAAK,SAAAwzB,GAC9D,IAAkC,IAA9ByiqB,EAAsBziqB,GAAiB,OAAO,EAClD,IAAM+Z,EAAOu6oB,EAAUt0pB,GACvB,QAAK+Z,GACE4lpB,GAAwB5lpB,EAAK2wZ,aAAeg1P,MAG/CuD,GAAgB,uCAAG,wCAAAv+rB,EAAA,sDACvB89rB,GAAW,GADY,SAGfU,EAAa7O,EAAoB/prB,QAAO,SAAA01B,GAAE,OAAkC,IAA9ByiqB,EAAsBziqB,MACpEmjqB,EAAcrP,GAAeM,qBAAqB8O,EAAY5O,EAAWzqX,EAAU0qX,EAAMC,EAAa1uoB,GACxG45a,GAAW,EALM,cAMAyjO,GANA,gEAMVzxpB,EANU,kBAOI8tpB,GAAuBC,UAAUp5lB,EAAKvgD,EAAOpU,GAPjD,mBAObo2E,EAPa,kBAQdA,OARc,EAQdA,EAAUuoM,QARI,wBASjBqvK,GAAW,EATM,oKAcnBk/N,EADEl/N,EACW,QAEA,QAhBM,kDAmBrBk/N,EAAa,SAnBQ,yBAqBrB4D,GAAW,GArBU,0FAAH,qDAyBhBY,GAAgB,SAACxtc,EAAen7P,GAC/BmosB,IAAgBnosB,EAAM8iI,QAC3BslkB,GAAiBjtc,EAAD,sBAAYgtc,GAAYhtc,IAAxB,CAAgCn7P,EAAM8iI,WAGxD,OACE,uCAEE,uBAAKplD,UAAWF,EAAQisgB,YAAxB,UACE,eAAC3re,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+omB,UAA/B,SACGl2pB,EAAE,+BAEL,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS,kBAAMw+kB,GAAmB,IAAOtnsB,KAAK,QAA1D,SACE,eAAC,KAAD,SAIJ,eAACk6T,GAAA,EAAD,CAAe78O,UAAWF,EAAQM,UAAlC,SACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAjB,UAEE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQu/mB,UAA5C,UACE,eAAC1gY,EAAA,EAAD,CACExwM,QAAS,eAAC6U,EAAA,EAAD,CAAUn2B,MAAM,UACvB+1B,QAASs5jB,EAAoB/nrB,OAAM,SAAA0zB,GAAE,OAAkC,IAA9ByiqB,EAAsBziqB,MAC/Du6E,SAAU,WACR,IAAM8olB,EAAahP,EAAoB/nrB,OAAM,SAAA0zB,GAAE,OAAkC,IAA9ByiqB,EAAsBziqB,MACnE0pQ,EAAmC,GACzC2qZ,EAAoB5orB,SAAQ,SAAAu0B,GAAQ0pQ,EAAQ1pQ,IAAOqjqB,KACnDX,EAAyBh5Z,MAG7B7pQ,MAAO/U,EAAE,kCAEVmoM,EAAUlrN,KAAI,SAACq+G,EAAelrH,GAC7B,MAA2D44rB,GAAeC,uBAAuB3tkB,GAAzFwpN,EAAR,EAAQA,WAAYriU,EAApB,EAAoBA,KAAM49C,EAA1B,EAA0BA,MAAO85D,EAAjC,EAAiCA,aAAcQ,EAA/C,EAA+CA,QAE/C,IADmB4ukB,EAAoB/rrB,SAASsnU,GAC7B,OAAO,KAC1B,IAAM0zX,EA3HY,SAAC1zX,GAC7B,OAAW,OAAJ2kX,QAAI,IAAJA,OAAA,EAAAA,EAAMjqrB,QAAO,SAAAisE,GAAC,OAAIA,EAAEq5P,aAAeA,GAA2B,WAAbr5P,EAAEiuB,YAAwB,GA0HtD++lB,CAAsB3zX,GAAYhvU,OAAS,EACvD4isB,GAAYF,IAA0D,IAAtCb,EAAsB7yX,GAE5D,OACE,uBAEEz3P,UAAS,UAAKF,EAAQwgnB,YAAb,YAA4B4J,IAA0BzyX,EAAa33P,EAAQmgnB,kBAAoBngnB,EAAQognB,qBAChHh+kB,MAAO,CAAE4R,QAASu3kB,EAAY,EAAI,IAClC5/kB,QAAS,kBAAM0+kB,EAAyB1yX,IAJ1C,UAME,eAACz0M,EAAA,EAAD,CACEn2B,MAAM,UACN+1B,QAASyokB,EACTvnlB,SAAUqnlB,EACV/olB,SAAU,SAACpzG,GACTA,EAAE87G,kBACFy/kB,GAAyB,SAAArsrB,GAAI,kCAAUA,GAAV,kBAAiBu5T,GAAcv5T,EAAKu5T,SAEnEz3P,UAAWF,EAAQukmB,mBAErB,uBAAKrkmB,UAAWF,EAAQ0/mB,aAAxB,UACGpqrB,GAAQ,eAACgrG,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ++V,aAA/B,SAA8Czpa,IACtD49C,GAAS,eAACotD,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ2/mB,cAA/B,SAA+CzsoB,IACxD85D,GAAgB,eAAC1M,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ4/mB,YAA/B,SAA6C5ykB,IAC7DQ,GAAW,eAAClN,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ6/mB,gBAA/B,SAAiDrykB,IAC5D69kB,GACC,gBAAC/qlB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ4onB,gBAA/B,UACE,uBAAM1onB,UAAWF,EAAQkpnB,gBAAzB,oBACCr2qB,EAAE,iDAvBJ5vB,MA6BRyG,aAIL,eAACi2E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQy/mB,WAA5C,SACGkL,IACC,uCAEE,uBAAKzqnB,UAAWF,EAAQoonB,SAAxB,UACE,eAAC9nlB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQqonB,WAA/B,SAA4Cx1qB,EAAE,sCAC9C,eAACg6S,GAAA,EAAD,CAAMjlS,MAAOgqS,GAAY/+S,EAAE,gCAAiC2tF,QAAQ,WAAW39G,KAAK,aAItF,eAAC,GAAD,CACE+kC,MAAO/U,EAAE,mCACT5gB,OAAQ04rB,GAAY50rB,GACpBmyrB,MAAO,SAACnrrB,GAAD,OAASourB,GAAc,KAAMpurB,IACpCorrB,SAAU,SAACltrB,GAAD,OAAS4vrB,GAAiB,KAAM5vrB,IAC1C+kE,QAASA,IAIX,eAAC,GAAD,CACEp4C,MAAO/U,EAAE,uBACT5gB,OAAQ04rB,GAAY/niB,GACpBsliB,MAAO,SAACnrrB,GAAD,OAASourB,GAAc,KAAMpurB,IACpCorrB,SAAU,SAACltrB,GAAD,OAAS4vrB,GAAiB,KAAM5vrB,IAC1C+kE,QAASA,IAIX,eAAC,GAAD,CACEp4C,MAAO/U,EAAE,wBACT5gB,OAAQ04rB,GAAY3N,IACpBkL,MAAO,SAACnrrB,GAAD,OAASourB,GAAc,MAAOpurB,IACrCorrB,SAAU,SAACltrB,GAAD,OAAS4vrB,GAAiB,MAAO5vrB,IAC3C+kE,QAASA,IAIX,sBAAKE,UAAWF,EAAQ6onB,aAAxB,SACE,eAAC7rY,GAAA,EAAD,CACEr8M,WAAW,EACXH,QAAQ,WACRsR,YAAaj/F,EAAE,uCACfrwB,MAAOmosB,GAAYhna,QACnBrhL,SAAU,SAACpzG,GAAD,OAAO07rB,GAAiB,UAAW17rB,EAAE4kB,OAAOtxB,QACtDohH,WAAY,CACVC,eAAgB,eAACvD,EAAA,EAAD,CAAYpgC,UAAWF,EAAQmpnB,iBAA/B,2BAMtB,eAACnsY,GAAA,EAAD,CACEr8M,WAAW,EACXskP,WAAW,EACX35B,KAAM,EACN9qN,QAAQ,WACRsR,YAAaj/F,EAAE,uCACfrwB,MAAOmosB,GAAYxypB,QACnBmqE,SAAU,SAACpzG,GAAD,OAAO07rB,GAAiB,UAAW17rB,EAAE4kB,OAAOtxB,QACtD09E,UAAWF,EAAQ8onB,gBAQnBhhB,GACA,uBAAK5nmB,UAAWF,EAAQopnB,mBAAxB,UACE,eAAC9olB,EAAA,EAAD,CAAYE,QAAQ,QAApB,sBACA,eAACF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6BoxN,OAKhCw4X,GACC,sBAAKlqnB,UAAWF,EAAQ+onB,eAAxB,UAzOkBpxX,GA0OUyyX,GAzO/B,OAAJ9N,QAAI,IAAJA,OAAA,EAAAA,EAAMjqrB,QAAO,SAAAisE,GAAC,OAAIA,EAAEq5P,aAAeA,IAA2B,aAAbr5P,EAAEiuB,YAA0B,IAyOnBz8F,KAAI,SAACkkb,EAAK/4a,GAAN,OACnD,kCACGA,EAAM,GAAK,MACZ,qBAAGi5G,KAAM8/T,EAAIx5H,QA9RfA,EA8RmCw5H,EAAIx5H,OA7RpDA,GAAW+hY,EACV,GAAN,OAAUA,EAAV,iBAA8B/hY,EAA9B,yBAAqD3sQ,GADf,IA6R6B,IAAK/5B,OAAO,SAASgiT,IAAI,sBAAsB51P,UAAWF,EAAQ+wB,KAAjH,cAAyHijV,EAAIqvP,gBAA7H,cAFSpoqB,GA5RZ,IAACu/S,OAsSN,uBAAKt6O,UAAWF,EAAQqijB,oBAAxB,UACE,uBAAKnijB,UAAWF,EAAQqpnB,oBAAxB,UACE,eAAC,KAAD,CAAgBnpnB,UAAWF,EAAQspnB,uBACnC,eAAChplB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQupnB,qBAA/C,yBACA,eAACjplB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQwpnB,mBAA/C,SACG32qB,EAAE,2CALT,OAQG83qB,SARH,IAQGA,IARH,UAQGA,GAAal4P,mBARhB,aAQG,EAA0B3ic,KAAI,SAACqynB,EAAYlnnB,GAC1C,OACE,eAAC4xT,GAAA,EAAD,CAEEjlS,MAAOu6lB,EAAWw6B,cAAgBx6B,EAAWt/nB,KAAX,YAAuBg5rB,GAAeiC,eAAe37D,EAAWt/nB,MAAhE,KAA2E,IAC7GmqU,SAAU,kBAjOA/pU,EAiO6BgY,OAhOtDmvrB,GACLJ,GAAa,SAAA5rrB,GACX,IAAMwwB,EAAUxwB,EAAKgsrB,GACf34Z,EAAO,YAAO7iQ,EAAQ6ja,aAE5B,OADAhhK,EAAQv7R,OAAOjT,EAAO,GACf,2BACFmb,GADL,kBAEGgsrB,EAFH,2BAEgCx7pB,GAFhC,IAEyC6ja,YAAahhK,UAR3B,IAACxuS,GAkOVu9G,QAAQ,WACRkY,KAAMivkB,GAAYxlE,EAAWw6B,aAAc38kB,GAC3CE,UAAWF,EAAQipnB,gBANrB,iBACiBhurB,OASpB6vrB,IACC,gBAACxqlB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQypnB,oBAA/B,UACE,uBAAMvpnB,UAAWF,EAAQ0pnB,wBAAzB,oBACC72qB,EAAE,4CAMT,sBAAKqtD,UAAWF,EAAQ2pnB,oBAAxB,SACE,eAAC,GAAD,CACEhjX,YAAa,GACb+vB,kBAAkB,EAClBisU,cAAe,KACfC,gBAAiB,GACjBC,mBArQO,SAACroX,GAAkE,IAAlDmiW,EAAiD,uDAA1B,GAAI6uC,EAAsB,uCACpFpB,GACLJ,GAAa,SAAA5rrB,GACX,IAAMwwB,EAAUxwB,EAAKgsrB,GACrB,OAAO,2BACFhsrB,GADL,kBAEGgsrB,EAFH,2BAGOx7pB,GAHP,IAII6ja,YAAY,GAAD,mBAAM7ja,EAAQ6ja,aAAd,CAA2B,CAAE8oO,aAAc/gX,EAAQmiW,eAAc95pB,KAAM2osB,2BAuQtF,gBAACtuY,GAAA,EAAD,CAAeh9O,UAAWF,EAAQkgnB,cAAlC,UACE,eAACz0kB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQ+uT,WAAYpjR,QAAS,kBAAMg7kB,EAAa,aAAnE,SACG9zqB,EAAE,sBAEL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQisiB,WAAYtggB,QAASq/kB,GAAkBhnlB,SAAUsmlB,GAAWvM,IAAoBgN,GAA3G,SACGl4qB,EAAE,yBAKP,gBAACiqS,EAAA,EAAD,CAAQrrN,KAAMy4lB,EAAiBz+jB,QAAS,kBAAM0+jB,GAAmB,IAAjE,UACE,eAACptY,GAAA,EAAD,CAAe78O,UAAWF,EAAQ4pnB,mBAAlC,SACE,eAACtplB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ6pnB,gBAA/B,SACGh3qB,EAAE,oCAGP,gBAACqqS,GAAA,EAAD,CAAeh9O,UAAWF,EAAQ8pnB,mBAAlC,UACE,eAACr+kB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQignB,aAAct0kB,QAAS,kBAAMw+kB,GAAmB,IAA3E,SACGt3qB,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQ+pnB,eAAgBp+kB,QAAS,WAAQw+kB,GAAmB,GAAQ1+jB,KAAvF,SACG54G,EAAE,iCChrBAkvD,gBAlDA,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBI,QAAS,YACT83C,UAAW,KAEbwmP,MAAO,CACL9+R,MAAO,IACP+3C,aAAc,IAEhBhiF,QAAS,CACP40D,MAAO,OACPotB,aAAc,IAEhBsxkB,WAAY,CACV9pkB,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,WA4BJ95C,EAxBwC,SAAC,GAAiB,IAAf/B,EAAc,EAAdA,QAChDntD,EAAM+xB,YAAe,gBAArB/xB,EACA44G,EAAYyyjB,KAAZzyjB,QAER,OACE,qCACE,eAACsxL,GAAA,EAAD,UACE,uBAAK78O,UAAWF,EAAQM,UAAxB,UACE,sBAAKgtC,IAAK+5kB,GAAoBnnnB,UAAWF,EAAQkhS,QACjD,eAAC5gQ,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ7nC,QAA5C,SACGtlB,EAAE,kCAEL,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQyrnB,WACnB9/kB,QAAS8f,EAFX,SAIG54G,EAAE,2C,UCcAkvD,gBAvDA,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBI,QAAS,YACT83C,UAAW,KAEbwmP,MAAO,CACL9+R,MAAO,IACP+3C,aAAc,IAEhBhiF,QAAS,CACP40D,MAAO,OACPotB,aAAc,IAEhBuxkB,eAAgB,CACd/pkB,OAAQ,oBACR50B,MAAO,UACPwhB,aAAc,GACd3rC,QAAS,WACTi5C,cAAe,WAiCJ95C,EA7ByC,SAAC,GAAiB,IAAf/B,EAAc,EAAdA,QACjDntD,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAkCqrqB,KAA1ByI,EAAR,EAAQA,aAAcl7jB,EAAtB,EAAsBA,QAEtB,OACE,uCACE,sBAAKrpB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,WAAYI,QAAS,eAApE,SACE,eAAC4+C,GAAA,EAAD,CAAY7V,QAAS8f,EAAS5oI,KAAK,QAAnC,SACE,eAAC,KAAD,QAGJ,eAACk6T,GAAA,EAAD,UACE,uBAAK78O,UAAWF,EAAQM,UAAxB,UACE,sBAAKgtC,IAAKq+kB,KAAYzrnB,UAAWF,EAAQkhS,QACzC,eAAC5gQ,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQ7nC,QAA5C,SACGtlB,EAAE,iCAEL,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQ0rnB,eACnB//kB,QAAS,kBAAMg7kB,EAAa,UAF9B,SAIG9zqB,EAAE,qCCxBT+4qB,GAAgC,SACpC91gB,EACA6hJ,EACAk0X,GAGI,IAAD,EAFHC,EAEG,uDAFmC,cACtC7V,EACG,uCACGj4d,GAAgB,OAALloC,QAAK,IAALA,GAAA,UAAAA,EAAOjrL,IAAI,mBAAX,eAAwB4H,QAAO,SAACutI,EAAUwqH,EAAcN,GACvE,IAAMvrI,GAAY6rI,EAAQ3/P,IAAI,aAAeqlB,iBAAO,KAAK7d,QAAO,SAACkqE,GAC/D,OAAqB,IAAjBA,EAAE1xE,IAAI,QAINorrB,EACKA,EAAsBlrrB,IAAIwxE,EAAE1xE,IAAI,kBAErCghsB,GACMA,EAAmBhpsB,MAAQsB,QAAQqjlB,aAAgBjrgB,EAAGsvnB,KAExD1nsB,QAAQo4E,EAAE1xE,IAAI,qCAExB,OAAOm1I,EAAI9sI,KAAKgd,iBAAO,CACrByuG,SAAUA,EAAS7uH,KAAI,SAACysE,EAAQwkD,GAAT,OACrBxkD,EAAE1xE,IAAI,iBAAN,sBAA8Bq/P,EAAe,IAAMnpI,EAAnD,mBACFikP,UAAWx6G,EAAQ3/P,IAAI,aACvB0+W,aAAc/+G,EAAQ3/P,IAAI,iBAAmB,QAE9CqlB,iBAAO,OAAQA,iBAAO,IACzB,OAAOA,iBAAO,CACZ0hqB,WAAY,EAAC,GACbuN,UAAW,EAAC,GACZhxkB,SAAUwpN,EACV35G,WACA+ge,YAAa,EAAC,GACd3le,YAAa,EAAC,GACdqpe,oBAAqB,WACrBxD,gBAAiB,EAAC,GAClBD,UAAW,EAAC,GACZr5X,YAAa,CAAgB,gBAAfmmY,GACdlmY,eAAgB,CAAgB,UAAfkmY,GACjBjmY,mBAAoB,EAAC,GACrB97R,SAAU,EAAC,GACXtiB,MAAO,EAAC,MAINskrB,GAAyB,CAC7Bj2gB,MAAO,CAAE20P,UAAW/pZ,sBAAmBo1J,MAAO+0P,YAAa7pZ,4BAAyBgrqB,iBAAkBpkqB,MAAO,SAC7G+9R,YAAa,CAAE8kH,UAAW/pZ,sBAAmBilS,YAAaklH,YAAa7pZ,4BAAyBirqB,kBAAmBrkqB,MAAO,gBAC1HwjZ,MAAO,CAAEX,UAAW/pZ,sBAAmB0qZ,MAAOP,YAAa7pZ,4BAAyBkrqB,YAAatkqB,MAAO,SACxG22pB,SAAU,CAAE9zQ,UAAW/pZ,sBAAmBosZ,WAAYjC,YAAa7pZ,4BAAyBmrqB,sBAAuBvkqB,MAAO,gBA0mB7Gm6C,gBAvmBA,SAACC,GAAD,MAA+B,CAC5CoqnB,YAAa,CACXhpnB,SAAU,KACVhB,MAAO,OACPs4C,UAAW,IAKXqW,UAAW,aA8lBAhvD,EAplB0C,SAAC,GAAyC,IAAvC0vB,EAAsC,EAAtCA,KAAMg6B,EAAgC,EAAhCA,QAAS0tF,EAAuB,EAAvBA,QAASn5I,EAAc,EAAdA,QAC5EvuC,EAAW2F,wBACX0+I,EAAQt9I,sBAAYmwN,YAAgBhzP,OAAOwjN,KAC3CwwG,EAAsBnxR,sBAAY+R,iBAClCsqO,EAAUr8O,sBAAYm5K,gBACtB6+G,EAA0Bh4R,sBAAYmkG,gBACtC4miB,EAAkB/qoB,sBAAYywN,eAC9B2xb,EAA4BpipB,sBAAY0pE,wBAAc6/kB,KACtDsK,EAA6B7zpB,sBAAY0pE,wBAAc8/kB,KACvDsK,EAAoB9zpB,sBAAY0pE,wBAAc,iBAE9C84G,GAAiB,OAALllC,QAAK,IAALA,OAAA,EAAAA,EAAOjrL,IAAI,eAAgBkU,iBAG7C,EAAkCwsB,WAA0B,YAA5D,mBAAOghqB,EAAP,KAAkB5F,EAAlB,KAGA,EAAsDp7pB,WAAyB,IAA/E,mBAAO6wpB,EAAP,KAA4BuE,EAA5B,KACA,EAAoDp1pB,YAAe,GAAnE,mBAAOq1pB,EAAP,KAA2BC,EAA3B,KACA,EAAgDt1pB,WAA8B,MAA9E,mBAAO6+oB,EAAP,KAAyB0W,EAAzB,KAGA,EAAgDv1pB,WAAiD,IAAjG,mBAAOw1pB,EAAP,KAAyBC,EAAzB,KAGA,EAAwDz1pB,WAAuB,SAA/E,mBAAO41pB,EAAP,KAA6BC,EAA7B,KAGA,EAAwC71pB,WAAgC,IAAxE,mBAAOihqB,GAAP,KAAqB5F,GAArB,KAGA,GAAkCr7pB,WAA2C,IAA7E,qBAAO8wpB,GAAP,MAAkB2N,GAAlB,MAGA,GAA8Dz+pB,WAAqF,IAAnJ,qBAAO81pB,GAAP,MAAgCC,GAAhC,MAGA,GAAkE/1pB,WAAuB,IAAzF,qBAAOkhqB,GAAP,MAAkCC,GAAlC,MAIA,GAAwDnhqB,WAAsC,IAA9F,qBAAOohqB,GAAP,MAA6BC,GAA7B,MAGM3L,GAAkB7W,GAAoB2W,EAAiB3W,GACzD2W,EAAiB3W,GADE,eAEdiU,IAYHwO,GAAyBthqB,SAAkB,MAMjDA,aAAgB,WACd,GAAKkmE,EAAL,CACA,IAAMq7lB,EAAoBhgqB,SAASywC,KAAK6kC,MAAM2uB,UACxCg8jB,EAAoBjgqB,SAASz+B,gBAAgB+zG,MAAM2uB,UAGzD,OAFAjkG,SAASywC,KAAK6kC,MAAM2uB,UAAY,SAChCjkG,SAASz+B,gBAAgB+zG,MAAM2uB,UAAY,SACpC,WACLjkG,SAASywC,KAAK6kC,MAAM2uB,UAAY+7jB,EAChChgqB,SAASz+B,gBAAgB+zG,MAAM2uB,UAAYg8jB,MAE5C,CAACt7lB,IAEJlmE,aAAgB,WACc,IAAxBihqB,GAAa7jsB,QAAiB46qB,IAGlB,YAAO,IAAI59qB,IAAI6msB,GAAa18rB,KAAI,SAAAwuE,GAAC,aAAIA,EAAEmsW,YAAF,UAAeshR,GAAuBztnB,EAAE0unB,uBAAxC,aAAe,EAA0CviR,cAAWp4a,OAAOlO,WAErHqP,SAAQ,SAAAi3a,GAAc,IAAD,MACxBK,EAAS,OAAGy4P,QAAH,IAAGA,OAAH,EAAGA,EAAiB77pB,MAAM,CAACyxM,EAASsxN,GAAY,IAC/D,GAAKK,EAAL,CACA,IAAMv+U,EAASu+U,EAAUjgb,IAAI,UACvB2vT,EAASswH,EAAUjgb,IAAI,UACvB2wT,EAAWsvH,EAAUjgb,IAAI,YACzB4gb,EAAUX,EAAUjgb,IAAI,MAE9B,GAAK0hG,GAAqB,YAAXA,EAAf,CAGA,IAAM0gmB,EAAQ,UAAGJ,GAAuBj+pB,eAA1B,iBAAG,EAAgClnB,aAAnC,aAAG,SAAwC,CAACyxM,EAASsxN,GAAY,IACzEyiR,EAAW,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAUpisB,WAAb,aAAG,OAAAoisB,EAAgB,MAChCxhR,GAAWA,IAAYyhR,GAG3BtG,IAAgB,SAAAxorB,GACd,IAAMqzR,EAAO,YAAOrzR,GACd+urB,EAAa17Z,EAAQ3kR,WAAU,SAAAwxD,GAAC,aACnCA,EAAEmsW,YAAF,UAAeshR,GAAuBztnB,EAAE0unB,uBAAxC,aAAe,EAA0CviR,cAAeA,GAC5D,YAAbnsW,EAAEiuB,UAUJ,OARI4gmB,GAAc,IAChB17Z,EAAQ07Z,GAAR,2BACK17Z,EAAQ07Z,IADb,IAEE5gmB,OAAmB,aAAXA,EAAwB,WAAa,SAC7CiuN,OAAQA,QAAU53T,EAClB44T,SAAUA,QAAY54T,KAGnB6uS,UAIXo7Z,GAAuBj+pB,QAAU20oB,KAChC,CAACA,EAAiBipB,GAAa7jsB,SAKlC4iC,aAAgB,WACd,GAAKrmC,OAAO0D,KAAK+jsB,IAAsBhksB,OAAvC,CAEA,IAAI8oS,GAAU,EACR27Z,EAAQ,eAAQT,IAEtBznsB,OAAOuL,QAAQ28rB,GAAU55rB,SAAQ,YAAyB,IAAD,mBAAtBi3a,EAAsB,KAAXp3R,EAAW,MAClDA,GAASA,EAAM1qJ,QAAU,KAEX6jsB,GAAa/jrB,MAAK,SAAA61D,GAAC,OACpCA,EAAEmsW,YAAcA,GAA0B,YAAbnsW,EAAEiuB,WAGdigmB,GAAan6rB,QAAO,SAAAisE,GAAC,OAAIA,EAAEmsW,YAAcA,GAA0B,YAAbnsW,EAAEiuB,UAAsB5jG,OAAS0qJ,EAAM1qJ,UAC9G0qJ,EAAMz4I,QACFy4I,EAAM1qJ,OAAS,GACjB8oC,EAAS,IAAI4jL,KAAwBhiE,EAAM,KAE7Co+I,GAAU,MAKdvsS,OAAO0D,KAAKwksB,GAAU55rB,SAAQ,SAAApI,KACvBgisB,EAAShisB,IAAQgisB,EAAShisB,GAAKzC,QAAU,WAAYyksB,EAAShisB,MAGjEqmS,GACFm7Z,GAAwBQ,MAEzB,CAACZ,GAAcG,GAAsBl7pB,IAGxC,IAAM6qpB,GAAwB/wpB,WAAc,WAC1C,OAA4B,IAAxBihqB,GAAa7jsB,OAAuB,GACjC6jsB,GAAa18rB,KAAI,SAAAkkb,GAAQ,IAAD,EAC7B,GAAmB,YAAfA,EAAIznV,OAAwB,OAAOynV,EAEvC,IAAMvJ,EAAYuJ,EAAIvJ,YAAJ,UAAiBshR,GAAuB/3Q,EAAIg5Q,uBAA5C,aAAiB,EAA4CviR,WAC/E,IAAKA,EAAa,OAAOuJ,EACzB,IAAMlJ,EAAS,OAAGy4P,QAAH,IAAGA,OAAH,EAAGA,EAAiB77pB,MAAM,CAACyxM,EAASsxN,GAAY,IAC/D,IAAKK,EAAa,OAAOkJ,EACzB,IAAMznV,EAASu+U,EAAUjgb,IAAI,UACvB2vT,EAASswH,EAAUjgb,IAAI,UACvB2wT,EAAWsvH,EAAUjgb,IAAI,YAC/B,MAAe,aAAX0hG,EACK,2BAAKynV,GAAZ,IAAiBznV,OAAQ,WAAqBiuN,SAAQgB,aAEzC,WAAXjvN,EACK,2BAAKynV,GAAZ,IAAiBznV,OAAQ,WAEpBynV,OAER,CAACw4Q,GAAcjpB,EAAiBpqd,IAGnC5tL,aAAgB,WACd,GAAIkmE,GAAQupH,EAAUn4N,KAAO,EAAG,CAC9B,IAAMutjB,EAASp1V,EAAUlrN,KAAI,SAACnD,GAAD,OAAYA,EAAE9B,IAAI,SAAOwa,OACtDs7qB,EAAuBvwI,GACvBywI,GAAsB,GACtBC,EAAoB1wI,EAAO,IAC3B,IAAMzsX,EAA6C,GACnDysX,EAAO58iB,SAAQ,SAACu0B,GAAiB47J,EAAS57J,GAAT,eAAoBs2pB,OACrD2C,EAAoBr9f,GACpBgjgB,EAAa,YACbC,GAAgB,IAChBoD,GAAa,IACb5I,EAAwB,SACxBE,GAA2B,IAC3BoL,GAA6B,IAC7BE,GAAwB,IACxBC,GAAuBj+pB,QAAU,QAElC,CAAC6iE,EAAMupH,EAAUn4N,OAGpB,IAAM0zb,GAAU,uCAAG,4CAAA9pb,EAAA,yDAEX4gsB,EAFW,eAE2BhM,IACxCjX,IACFijB,EAA+BjjB,GAAoB,CACjDxC,WAAYgT,EACZj1X,YAAa0mY,EACbjhR,MAAOkhR,GAEThL,GAA2B+L,IAGvBC,EAAc73rB,KAAKC,UAAU,CACjC0mrB,sBACA2E,mBACAwM,mBAAoBrosB,OAAO0D,KAAKyksB,GAAgC56rB,QAAO,SAACutI,EAAK50I,GAAS,IAAD,kBAMnF,OALA40I,EAAI50I,GAAO,CACTw8qB,WAAU,UAAEylB,EAA+BjisB,UAAjC,iBAAE,EAAqCw8qB,kBAAvC,iBAAE,EAAiDviqB,YAAnD,aAAE,UACZsgT,YAAW,UAAE0nY,EAA+BjisB,UAAjC,iBAAE,EAAqCu6T,mBAAvC,iBAAE,EAAkDtgT,YAApD,aAAE,UACb+la,MAAK,UAAEiiR,EAA+BjisB,UAAjC,iBAAE,EAAqCggb,aAAvC,iBAAE,EAA4C/la,YAA9C,aAAE,WAEF26H,IACN,QAEDysjB,KAA8Ba,GAAed,GAAa7jsB,OAAS,GAxBtD,uBAyBfg+rB,EAAa,SAzBE,0BAkCjBC,GAAgB,IAChBD,EAAa,YACb+F,GAA6BY,GAE7B77pB,EAAS,IAAI46K,MAEP7nG,GAAmB,OAAPqwK,QAAO,IAAPA,OAAA,EAAAA,EAASntQ,MAAM,CAAC,WAAY,UAAW,UAAvC,OAAiD8oT,QAAjD,IAAiDA,OAAjD,EAAiDA,EAAyB9oT,MAAM,CAAC,UAAW,QACxG8lrB,EAAU34qB,KAAK+xB,MACf6mpB,EAA2B,GAC3BC,EAAuC,GA3C5B,cA6CQtR,GA7CR,cAAA3vrB,EAAA,0CAAAA,EAAA,yDA6CNkrU,EA7CM,QA8CTh0I,EAAWo9f,EAAiBppX,GA9CnB,gEAAAlrU,EAAA,qHAAAA,EAAA,+EAiDHq/rB,EAjDG,yEAoDM,UAAfA,GAA2BniY,EApDlB,+DAqDPn9Q,EAASu/oB,GAAuBD,GArDzB,+DAwDThhR,OAxDS,EA+DP6iR,EAAgBN,EAA+B11X,GAC/Ci2X,EAAc,SAAC1msB,GAAD,aAAYA,GAAKA,EAAE2D,MAAO,UAAA3D,EAAE2D,IAAI,mBAAN,eAAmBhI,MAAO,GAClEgrsB,EAAc7ye,EAAUvyM,MAAK,SAAC9b,GAAD,OAAYA,EAAE9B,IAAI,QAAU8sU,KACzDk0X,GAAgC,OAAXgC,QAAW,IAAXA,OAAA,EAAAA,EAAahjsB,IAAI,gBAAiB,KACvDijsB,GAAwC,OAAbH,QAAa,IAAbA,OAAA,EAAAA,EAAe/lB,aAAcgT,EAGxDmT,EAtEO,OAsEkBnT,QAtElB,IAsEkBA,GAtElB,UAsEkBA,EAAsB/vrB,IAAI,kCAtE5C,aAsEkB,EAAsDA,IAAI8sU,GACrFq2X,EAAoD,MAClDC,EAxEO,OAwEkBF,QAxElB,IAwEkBA,OAxElB,EAwEkBA,EAAwBljsB,IAAI,eAEnDwgS,EAAM,IAAI1lS,IAChBsosB,EAAuBz6rB,SAAQ,SAACc,GAAY,IAAD,EACzC,UAAAA,EAAEzJ,IAAI,mBAAN,SAAmB2I,SAAQ,SAAC+oE,GAAY,IAAD,EAC/B8lnB,EAAG,OAAG9lnB,QAAH,IAAGA,GAAH,UAAGA,EAAG1xE,WAAN,aAAG,OAAA0xE,EAAS,iBACV,MAAP8lnB,GAAeh3Z,EAAI5lR,IAAI48qB,SAG/B2L,EAAgC3ia,GAE5B6ia,GAA6BN,EAAW,OAACD,QAAD,IAACA,OAAD,EAACA,EAAehoY,aAAegoY,EAAchoY,YAAc,OACpGimY,GAA8B91gB,EAAO6hJ,EAAYk0X,EAAoB,cAAemC,GACnFG,GAAoBP,EAAW,OAACD,QAAD,IAACA,OAAD,EAACA,EAAeviR,OAASuiR,EAAcviR,MAAQ,OAC/EwgR,GAA8B91gB,EAAO6hJ,EAAYk0X,EAAoB,QAASmC,GAC7EI,EAAaz4rB,OAAOgiU,GACP,aAAfm0X,EAxFS,iBAyFXhhR,EAAY56Z,iBAAO,CAAEipM,YAzFV,2BA0Fa,UAAf2ye,EA1FE,oBA6FXhhR,GADAA,GADAA,EAAY+wQ,GAAeqB,wBAAwB4Q,EAA0B30e,EAASrjC,IAChEtnL,IAAI,YAAa0hB,iBAAO,CAACynT,MACzBnpU,IAAI,kBAAkB,GAExCwvN,EAAW8sN,EAAUjgb,IAAI,YAEzB6O,MAAI9N,MAAMoyN,IAAaA,EAASjzN,IAAI,aACtCizN,EAAWA,EAASnzN,IAAI,YAKpBwjsB,EAvGK,OAuGKzT,QAvGL,IAuGKA,OAvGL,EAuGKA,EAAsB/vrB,IAAI,2BACpCyjsB,EAAc34rB,OAAOgiU,IAKrB1sN,EA7GK,OA6GW6ilB,QA7GX,IA6GWA,OA7GX,EA6GWA,EAA0BjjsB,IAAI,eACnC,OAAIwjsB,QAAJ,IAAIA,OAAJ,EAAIA,EAASxrsB,OAAQkc,OAAKF,OAAOm/M,IAC1Cuwe,EAAmBF,EAAQxjsB,IAAI8sU,IAAe02X,EAAQxjsB,IAAIyjsB,OAExDlM,EAAcmM,EAAiB1jsB,IAAI,eAEvCmzN,EAAWA,EAASluN,KAAI,SAAC06P,GACvB,IAAMgkc,EAAapM,EAAY35qB,MAAK,SAAC0nM,GAAD,OAAaA,EAAGtlN,IAAI,eAAiB2/P,EAAQ3/P,IAAI,gBACrF,IAAK2jsB,EAAc,OAAOhkc,EAC1B,IAAMikc,EAAcD,EAAW3jsB,IAAI,aAAekU,iBAE5C2vrB,EAAqC,GAC3CD,EAAYj7rB,SAAQ,SAAC+oE,IAAa,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAG1xE,OAAO6jsB,EAAcnynB,EAAE1xE,IAAI,mBAAqB0xE,MAEzF,IAAMy0gB,GAAmBxmV,EAAQ3/P,IAAI,aAAekU,kBACjD1M,QAAO,SAACyrH,GACP,MAAuB,kBAAZA,KAAwB,OAACA,QAAD,IAACA,OAAD,EAACA,EAASjzH,MACtC6jsB,EAAc5wkB,EAAQjzH,IAAI,sBAElCiF,KAAI,SAACguH,GACJ,GAAuB,kBAAZA,KAAwB,OAACA,QAAD,IAACA,OAAD,EAACA,EAASjzH,KAAO,OAAOizH,EAC3D,IAAM6wkB,EAAaD,EAAc5wkB,EAAQjzH,IAAI,mBAC7C,OAAO8jsB,EAAa7wkB,EAAQtvH,IAAI,gBAAiBmgsB,EAAW9jsB,IAAI,kBAAoBizH,KAExF,OAAO0sI,EAAQh8P,IAAI,WAAYwilB,QAI7B49G,EAAiBL,EAAiB1jsB,IAAI,kBAE1Cigb,EAAYA,EAAUt8a,IAAI,cAAekL,cAAI,eAAG00rB,EAAaQ,OAGvD3jlB,IAIJ4jlB,EAJmB,OAIbjU,QAJa,IAIbA,OAJa,EAIbA,EAAsB/vrB,IAAI,4BAE9BiksB,EAAcD,EAAIhksB,IAAI,cACTkU,OAAKF,OAAOm/M,KAC7BA,EAAWA,EAASluN,KAAI,SAAC06P,GACvB,IAAMukc,EAAaD,EAAYrmrB,MAAK,SAAC0nM,GAAD,OAAaA,EAAGtlN,IAAI,eAAiB2/P,EAAQ3/P,IAAI,gBACrF,IAAKkksB,EAAc,OAAOvkc,EAE1B,IAAMwkc,EAAWD,EAAWlksB,IAAI,uBAChC,OAAOmksB,EAAWxkc,EAAQh8P,IAAI,sBAAuBwgsB,GAAYxkc,OAG/Dykc,EAAiBJ,EAAIhksB,IAAI,kBAE7Bigb,EAAYA,EAAUt8a,IAAI,cAAekL,cAAI,eAAG00rB,EAAaa,OAQ7DC,EAAuB,IAAIvpsB,IAC7BoZ,OAAKF,OAAOm/M,IACdA,EAASxqN,SAAQ,SAACg3P,IACfA,EAAQ3/P,IAAI,aAAekU,kBAAQvL,SAAQ,SAAC+oE,GAC1B,kBAANA,EAAkB2ynB,EAAqBzprB,IAAI82D,IACjD,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAG1xE,MAAOqksB,EAAqBzprB,IAAI82D,EAAE1xE,IAAI,yBAIlDsksB,EAAalklB,GACP,OAAPojlB,QAAO,IAAPA,OAAA,EAAAA,EAASxjsB,IAAI8sU,MAAb,OAA4B02X,QAA5B,IAA4BA,OAA5B,EAA4BA,EAASxjsB,IAAIyjsB,IADd,OAE5B1T,QAF4B,IAE5BA,OAF4B,EAE5BA,EAAsB/vrB,IAAI,wBAC1BuksB,EAAwB,KACxBC,EAAyB,MACzBF,IAAcD,EAAqBrssB,KAtL5B,sBAuLHyssB,EAAeH,EAAWtksB,IAAI,aAvL3B,wBAyLD0ksB,EAAuBD,EAAax/rB,KAAI,SAAC06P,GAC7C,IAAM7rI,GAAY6rI,EAAQ3/P,IAAI,aAAekU,kBAAQ1M,QAAO,SAACyrH,GAC3D,IAAM/1F,GAAY,OAAP+1F,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,KAAMizH,EAAQjzH,IAAI,kBAAoB,KAC1D,QAAOk9B,GAAKmnqB,EAAqBnksB,IAAIg9B,MAEvC,OAAOyiO,EAAQh8P,IAAI,WAAYmwH,MA9L1B,UAgMD,IAAI54E,SAAc,SAACC,GACvBvU,EAAS,IAAI0xL,MAA4B,CACvCrtC,MAAOA,EAAMtnL,IAAI,WAAY+gsB,GAC7BvosB,KAAM,KACN6/qB,UAAU,EACVC,iBAAkB,SAAC0oB,EAA4BC,GAC7CJ,EAAoBI,EACpBL,EAAmBI,EAAsB/8rB,QAAO,SAACutI,EAAU1rI,GAAX,OAC9C0rI,EAAIxxI,IAAI8F,EAAEzJ,IAAI,aAAcyJ,EAAEzJ,IAAI,0BAAyB6O,iBAC7DssC,WAzMC,QA+MPoppB,GAAoBrwrB,OAAKF,OAAOm/M,KAClCA,EAAWA,EAASluN,KAAI,SAAC06P,GACvB,IAAMklc,EAAQN,EAAiBvksB,IAAI2/P,EAAQ3/P,IAAI,cAC/C,OAAO6ksB,EAAQllc,EAAQh8P,IAAI,sBAAuBkhsB,GAASllc,MAG3D6kc,IACFvkR,EAAYA,EAAUt8a,IAAI,cAAekL,cAAI,eAAG00rB,EAAaiB,MAG/DvkR,EAAYA,EAAUt8a,IAAI,WAAYkL,cAAI,eAAG00rB,EAAapwe,MAEpDjB,EAAc+tN,EAAUjgb,IAAI,kBACdkyN,EAAYhyN,IAAIqjsB,IAAerxe,EAAYhyN,IAAI,aACjE+/a,EAAYA,EAAUt8a,IAAI,cAAekL,cAAI,eAAG00rB,EAAarxe,EAAYlyN,IAAI,eAYzE8ksB,EAAa,WACjB,GAAI1klB,EACF,OAAc,OAAPojlB,QAAO,IAAPA,OAAA,EAAAA,EAASxrsB,MAAOwrsB,EAAUvjR,EAAUjgb,IAAI,2BAEjD,IAAM+ksB,EAAsBzrsB,QAAQ2xL,EAAMjrL,IAAI,qBACxCgksB,EAAG,OAAGjU,QAAH,IAAGA,OAAH,EAAGA,EAAsB/vrB,IAAI,wBACtC,GAAI+ksB,GAAuBf,EACzB,OAAOn1rB,cAAI,eAAGi+T,EAAak3X,IAI7B,IAAMgB,EAAiBn2rB,gBACpBlL,IAAI,WAAYsnL,EAAMjrL,IAAI,aAC1B2D,IAAI,cAAesnL,EAAMjrL,IAAI,gBAChC,OAAO6O,cAAI,eAAGi+T,EAAak4X,IAdV,IAgBb1S,IAAsB,OAATwS,QAAS,IAATA,OAAA,EAAAA,EAAW9ssB,MAAOu3rB,GAAyBoB,4BAA4BmU,GAAW,GAAQ,OAC3Fj2rB,MAAI9N,MAAMuxrB,KAGxBryQ,EADEqyQ,GAAWpyrB,IAAI4sU,GACLmzG,EAAUt8a,IAAI,0BAA2BkL,cAAI,eAAG40rB,EAAcnR,GAAWtyrB,IAAI8sU,MAChFwlX,GAAWpyrB,IAAIujsB,GACZxjR,EAAUt8a,IAAI,0BAA2BkL,cAAI,eAAG40rB,EAAcnR,GAAWtyrB,IAAIyjsB,MAChFnR,GAAWpyrB,IAAI,WACZ+/a,EAAUt8a,IAAI,0BAA2BkL,cAAI,eAAG40rB,EAAcnR,GAAWtyrB,IAAI,cAE7Eigb,EAAUt8a,IAAI,0BAA2BkL,cAAI,eAAG40rB,EAAcnR,GAAWjzqB,YAKnFklrB,GAAoBC,KAChBpM,GAAan4Q,EAAUjgb,IAAI,6BACf6O,MAAI9N,MAAMq3rB,MACpB6M,GAAW7M,GAAWnzrB,KAAI,SAACmkJ,GAC/B,IAAI87iB,EAAO97iB,EACX,GAAIm7iB,EAAkB,CAAC,IAAD,EACdloB,EAAe,UAAGjzhB,EAAEppJ,IAAI,mBAAT,aAAG,EAAmBiF,KAAI,SAACwE,GAC9C,IAAMo7rB,EAAQN,EAAiBvksB,IAAIyJ,EAAEzJ,IAAI,cACzC,OAAO6ksB,EAAQp7rB,EAAE9F,IAAI,sBAAuBkhsB,GAASp7rB,KAEnD4yqB,IAAmB6oB,EAAOA,EAAKvhsB,IAAI,WAAY04qB,IAGrD,OADImoB,IAAqBU,EAAOA,EAAKvhsB,IAAI,cAAe6gsB,IACjDU,KAETjlR,EAAYA,EAAUt8a,IAAI,0BAA2BshsB,MAIzDhlR,EAAYA,EAAUx7T,OAAO,2BA3RpB,wBA6Ra,gBAAfw8kB,EAIThhR,EAAY+wQ,GAAe+B,8BAA8BsQ,EAA2B/0e,EAASrjC,GAKrE,UAAfg2gB,IACThhR,EAAY+wQ,GAAe+B,8BAA8BuQ,EAAkBh1e,EAASrjC,IAvSzE,QA2ST+0P,GAAcr+X,EAAOq+X,YACrBJ,GAAYj+X,EAAOi+X,UACJ,UAAfqhR,GAAoE,gBAAlB,OAAxBgC,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BjjsB,IAAI,WAC1Dggb,GAAc7pZ,4BAAyBgvqB,sBACvCvlR,GAAY/pZ,sBAAmBmsZ,YAGjC4gR,EAAQv6rB,KAAK,CACXykU,aACAq1X,eAAgBlB,EAChBzoB,gBAAiB72nB,EAAO5kB,MACxB2kE,OAAQ,UACRk+U,eAKGijR,EAAcjjR,MAAcijR,EAAcjjR,IAAa,IAC5DijR,EAAcjjR,IAAWv3a,KAAK,CAC5B23a,eACAJ,aACAtxN,UACA30G,YACAsmU,YACAC,WAAYyiR,IAnUD,iDAiDwBtosB,OAAOuL,QAAQkzL,EAAS26f,iBAjDhD,ihBAwUjBsI,GAAgB6G,GAIhBvosB,OAAO+M,OAAOy7rB,GAAel6rB,SAAQ,SAAC6/I,GAChCA,EAAM1qJ,OAAS,GACjB8oC,EAAS,IAAI4jL,KAAwBhiE,EAAM,QAG/Cu5iB,GAAwBc,GAjVP,iEAAH,qDAoVVrgqB,GAAe,CACnBk/pB,YACA5F,eACA3re,YACAohe,sBACAuE,yBACAC,qBACAC,wBACAzW,mBACA0W,sBACAC,mBACAC,sBACAC,kBACAC,qBAxf2B,SAAC9qrB,GACvBg0qB,GACL4W,GAAoB,SAAA5irB,GAAI,kCACnBA,GADmB,kBAErBgsqB,EAAmBh0qB,EAAQgI,EAAKgsqB,IAAqBiU,UAqfxD8C,uBACAC,0BACAz3X,sBACA2yX,QACAkQ,gBACA5F,mBACAvK,aACA2N,gBACA3I,2BACAC,8BACAnoe,UACA1tF,WAGF,OACE,eAACwyjB,GAAkB/wpB,SAAnB,CAA4B1qC,MAAO6qC,GAAnC,SACE,gBAACyvR,EAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAASA,EACTuzS,sBAAsB,EACtBh/V,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAC1BhpnB,UAAU,EALZ,UAOE,sBAAKg/B,MAAO,CAAElgC,QAAuB,aAAdqqnB,EAA2B,QAAU,QAA5D,SACE,eAAC,GAAD,CAAqB7L,OAAQnqQ,OAEhB,aAAdg2Q,GACC,eAAC,GAAD,IAEa,UAAdA,GACC,eAAC,GAAD,IAEa,SAAdA,GACC,eAAC,GAAD,IAEa,UAAdA,GACC,eAAC,GAAD,Y,SCxqBK0D,GALU,CACvBC,mBAPyB,SAACC,EAAuBC,GACjD,QAAKD,GAV4B,KAWlBA,EAAiBtlsB,IAAMslsB,EAAiBtlsB,IAAI,UAA5C,OAAwDslsB,QAAxD,IAAwDA,OAAxD,EAAwDA,EAAkB5jmB,SAMzF8jmB,oBAjBiC,G,wLCMtBC,GAA8B,2BAgC5BC,GAzBkC,WAC/C,IAAM9+pB,EAAW2F,wBACXq6D,EAAOj5D,sBAAYosK,aAA2B0rf,KAC9Crlc,EAAoBzyN,sBAAY8pF,aAA+BgukB,KAE/DhjY,EAAY/hS,eAAkB,WAClCkG,EAAS,IAAIwyL,QACZ,CAACxyL,IAEE47R,EAAW9hS,eAAkB,WACjCkG,EAAS,IAAI0yL,QACZ,CAAC1yL,IAEJ,OACE,eAAC27R,GAAA,EAAD,CACE37N,KAAMA,EACNuuB,cAAeirI,EAAajrI,cAC5Bu9L,WAAYtyD,EAAasyD,WACzBt9L,MAAOgrI,EAAahrI,MACpBotM,SAAUA,EACVC,UAAWA,K,gDC/BFrjM,iBAAQ,kBAAM,4C,6ECwEdumkB,OAxEf,YAKG,IAJD16gB,EAIA,EAJAA,MACAwzd,EAGA,EAHAA,MACA5hS,EAEA,EAFAA,gBAgDM+oV,GA3CyBnnD,GAASA,EAAMz+oB,IAAI,YAAY4H,QAAO,SAACi+rB,EAAYlmc,EAASmmc,GACzF,IAAMC,EAAuB96gB,EAAMpuK,MAAM,CAAC,WAAYiprB,EAAc,cAAgB5xrB,iBAChF8xrB,EAA6B,EAC3B9W,EAAcvvb,EAAQ3/P,IAAI,YAAY4H,QAAO,SAACiiR,EAAMo8a,EAAqB/vkB,GAC7E,IAAMgwkB,EAAmBD,EAAoBjmsB,IAAI,gBACjD,IAAKkmsB,EAKH,OAAOr8a,EAAKxhR,KAAKwG,cAAI,CAAEquB,IAAK,EAAGmgV,kBAAmB4oV,EAAoBxhlB,OAAO,mBAS/E,IAAM0hlB,EAAoBJ,EAAqBlprB,MAAM,CAACmprB,EAA4B,iBAC5EI,EAAmBL,EAAqBlprB,MAAM,CAACmprB,EAA4B,gBAEjF,OADAA,GAA8B,EACvBn8a,EAAKxhR,KAAL,OACL69rB,QADK,IACLA,OADK,EACLA,EACIvisB,IAAI,eAAgBwisB,IAAqB,GAC1CxisB,IAAI,cAAeyisB,GAAoB,IACvCzisB,IAAI,oBAAsBuisB,EAAiBlmsB,IAAI,oBAA+D,IAAzCkmsB,EAAiBlmsB,IAAI,gBAAqEimsB,EAAoBxhlB,OAAO,gBAAgBA,OAAO,eAA/FwhlB,EAAoBxhlB,OAAO,oBAEjJvwG,kBAGGwrW,EAAez0L,EAAMpuK,MAAM,CAAC,WAAYiprB,IAG9C,IAAKpmV,EAEH,OADAz7V,QAAQ7Z,MAAM,wDAAyD6gL,EAAMjrL,IAAI,YAAay+oB,EAAMz+oB,IAAI,aACjG6lsB,EAGT,IAAM3V,EAAaxwU,EAAa/7W,IAAI,WAAYurrB,GAAavrrB,IAAI,SAAUg8P,EAAQ3/P,IAAI,SAAW,IAClG,OAAO6lsB,EAAWx9rB,KAAK6nrB,KACtBh8qB,mBAGAtM,QAAO,SAACutI,EAAKkxjB,EAAqBjusB,GACjC,IAAMkusB,EAAyBD,EAAermsB,IAAI,YAAYiF,KAAI,SAACguH,GACjE,OAA2B,IAAvBA,EAAQjzH,IAAI,MACPizH,EAEF5tG,iBAAO4tG,MAIV0rP,GAFW1zL,EAAMjrL,IAAI,YACM4d,MAAK,SAAA+hP,GAAO,OAAIA,EAAQ3/P,IAAI,eAAiBqmsB,EAAermsB,IAAI,iBACrD6O,iBAAO7O,IAAI,mBAEvD,OAAOm1I,EAAI9sI,KAAKg+rB,EACb1isB,IAAI,WAAY2isB,GAChB3isB,IAAI,OAAQsnL,EAAMpuK,MAAM,CAAC,WAAYzkB,EAAO,UAC5CuL,IAAI,kBAAmBg7W,GAAmB9B,MAC5C3oW,kBAEL,OAAO+2K,EAAMtnL,IAAI,WAAYiisB,I,gHC5DzBW,GAAY,CAChB70f,QAAS,CACPv1M,KAAM,SACNy0L,QAAS,UAEX41gB,QAAS,CACPrqsB,KAAM,SACNy0L,QAAS,sBAEXijH,WAAY,CACV13S,KAAM,SACNy0L,QAAS,sBAEX9oE,KAAM,CACJ3rH,KAAM,OACNy0L,QAAS,IAEXyX,MAAO,CACLlsM,KAAM,SACNy0L,QAAS,uBAGPy2L,GAAY,CAChBygM,WAAY,CACVj6b,KAAM,YAER44kB,UAAW,CACT54kB,KAAM,aAER3lF,SAAU,CACR2lF,KAAM,OAERg5P,QAAS,CACPh5P,KAAM,cAERu1jB,YAAa,CACXv1jB,KAAM,eAYJ64kB,G,4MACGzjqB,MAAQ,CACb0jqB,WAAW,EACX9+U,UAAU,eACL,EAAK1hV,MAAM0hV,Y,EAIV++U,mBAA0B,EAAKzgqB,MAAM0hV,UACzC,EAAK1hV,MAAM0hV,UAAUpN,gBACrB1iX,E,EAqBG8usB,aAAe,kBAAM,EAAK5jqB,MAAM4kV,W,EA4E/Bi/U,eAAiB,SAACzisB,EAAQusL,GAChCvsL,EAAEg/H,UACF,EAAK0jkB,gBAAgB1isB,GACrB,IAAM4kB,EAAc5kB,EAAEs8G,cAChBimQ,EAAoByqN,aAAepojB,EAAOxe,MAC1CgwW,EAAkBxxV,EAAOzrB,eAAe,WAAayrB,EAAOgvG,QAAUhvG,EAAOtxB,MACnF,OAAO,EAAKknH,SAAS,CACnBgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,kBAENjB,EAAYnM,O,EAIXusV,kBAAoB,SAAC3isB,GAC3B,EAAKuisB,mBAAqB,EAAK3jqB,MAAM4kV,UAAUpN,WAC/C,EAAKt0U,MAAM8gqB,mBAAmB,EAAKhkqB,MAAM4kV,Y,EAGnCk/U,gBAAkBl6gB,oBAAS,EAAKm6gB,kBAAmB,K,EAEnD11kB,aAAe,WACrB,EAAKzS,SAAS,CAAE8nlB,WAAW,K,EAGrBp1kB,aAAe,WACrB,EAAK1S,SAAS,CAAE8nlB,WAAW,K,wDAxH7B,SAA0BrslB,GACxB,GACEr+G,KAAKkqC,MAAM0hV,WAAavtQ,EAAUutQ,YACjClxL,mBAAQr8E,EAAUutQ,UAAW5rX,KAAKkqC,MAAM0hV,WACzC,CACA,IAAMq/U,EAAWjrsB,KAAKkqC,MAAM0hV,UACtBs/U,EAAsBD,EAASzsV,aAAex+W,KAAK2qsB,mBACzD3qsB,KAAK2qsB,mBAAqBM,EAASzsV,WACnCx+W,KAAK4iH,SAAS,CACZgpQ,UAAU,2BACLq/U,GADI,IAEPzsV,WAAY0sV,EACRlrsB,KAAKgnC,MAAM4kV,UAAUpN,WACrBysV,EAASzsV,kB,oBAQrB,WAAiB,IAAD,OACd,EAAiDx+W,KAAKkqC,MAA9CgvC,EAAR,EAAQA,QAASmonB,EAAjB,EAAiBA,SAAU8J,EAA3B,EAA2BA,OAAQv/U,EAAnC,EAAmCA,UACnC,EAAiD5rX,KAAKgnC,MAA9C0jqB,EAAR,EAAQA,UAAsBU,EAA9B,EAAmBx/U,UAEnB,GAAKA,EAIL,OACE,gBAAC/yS,EAAA,EAAD,CAAMO,UAAWF,EAAQ65U,OAAQv5U,WAAW,EAAMI,MAAM,EAAxD,UACE,gBAACf,EAAA,EAAD,CACEO,UAAWF,EAAQmynB,aACnBzxnB,MAAM,EACNgB,GAAI,GACJy6C,aAAcr1H,KAAKq1H,aACnBC,aAAct1H,KAAKs1H,aALrB,UAOE,uBAAKl8C,UAAWF,EAAQoynB,iBAAxB,UACE,eAAC,KAAD,CAAiBlynB,UAAWF,EAAQqynB,cACnB35kB,KAAMw5P,GAAUQ,EAAUR,WAAaQ,EAAU1rX,MAAM0xH,OACxE,uBAAMx4C,UAAWF,EAAQsynB,mBAAzB,SAA8C5/U,EAAUp9W,UAE1D,uBAAK4qE,UAAWF,EAAQuynB,wBAAxB,UACGf,GAAa9+U,EAAU08Q,QACxB,eAAC3jhB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQwynB,cAAe7mlB,QAAS,kBAAMsmlB,EAAOv/U,EAAU3qV,KAA1E,SACE,eAAC,KAAD,CACEm4C,UAAWF,EAAQ04C,KACnBA,KAAK,iBAIP84kB,GAAgC,mBAAnB9+U,EAAUp9W,MACzB,eAACm2G,EAAA,EAAD,CAAQvrC,UAAWF,EAAQwynB,cAAe7mlB,QAAS,kBAAMw8kB,EAASz1U,EAAU3qV,KAA5E,SACE,eAAC,KAAD,CACEm4C,UAAWF,EAAQ04C,KACnBA,KAAK,iBAIP84kB,GAAa9+U,EAAU7sF,WACzB,eAAC,KAAD,CACE3lN,UAAWF,EAAQ04C,KACnBA,KAAK,oBAKX,eAAC/4C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAACk/B,GAAA,EAAD,CAEEF,iBAAkB,CAChBxgC,UAAWF,EAAQyynB,YAErB7qqB,MAAM,QACN2jF,MAAO,GACPpe,KAAM,GACNsT,WAAY,CACVmD,WAAY,CACV6kN,aAAsC,eAAxBiqD,EAAUf,UACpB,eAAC7tQ,GAAA,EAAD,CAAgBC,SAAS,MAAzB,oBACAnhH,GAEN0S,KAAM,aACNw8G,YAAa,QACbtvH,MAAoC,MAA7B0vsB,EAAe5sV,WAAqB4sV,EAAe5sV,WAAa,GACvEhjQ,SAAU,SAACpzG,GAAD,OAAY,EAAKyisB,eAAezisB,EAAGkisB,GAAU1+U,EAAUf,WAAWl2L,UAC5Ez0L,KAAMoqsB,GAAU1+U,EAAUf,WAAW3qX,OAjBlC0rX,EAAU3qV,a,GAlFEwD,aAwIdgmqB,MCzJTmB,G,4MAYG5kqB,MAAQ,CACbw9oB,cAAe,GACf8C,oBAAqB,GACrBukB,kBAAmB,GACnBhvgB,SAAU,CACRivgB,cAAe,CAAEjnV,qBAAqB,EAAOumU,cAAc,EAAOC,kBAAkB,EAAO50X,YAAY,GACvGvpF,SAAU,Q,EAIN6+d,UAAmB,G,EACnBC,uBAAgC,G,EAGhCC,aAAeznC,4BAAgB,SAAC5qlB,GACtC,IAAQl+E,EAAqCk+E,EAArCl+E,MAAO2lsB,EAA8BznnB,EAA9BynnB,SAAU8J,EAAoBvxnB,EAApBuxnB,OAAQjynB,EAAYU,EAAZV,QACjC,OACE,eAAC,GAAD,CACE0yS,UAAWlwX,EACXw9E,QAASA,EACTiynB,OAAQA,EACR9J,SAAUA,EACV2J,mBAAoB,EAAKkB,oBACzBzwsB,IAAK,SAAAu+R,GAAE,OAAIA,GAAM,EAAK+xa,UAAU3/rB,KAAK4tR,S,EAMnCmya,aAAe5nC,8BAAkB,SAAChspB,GACxC,IAAQyuP,EAAUzuP,EAAVyuP,MACR,EAAgC,EAAK98N,MAA7BgvC,EAAR,EAAQA,QAASkznB,EAAjB,EAAiBA,WACjB,EAAKL,UAAY,GACjB,IAAME,EAAe,EAAKA,aAE1B,OACE,eAACpznB,EAAA,EAAD,CACEO,UAAWF,EAAQmznB,gBACnB7ynB,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EACTgynB,OAAQ,EAAKA,OACblnX,WAAY,EAAKA,WAPnB,SASGp+E,EAAMh+P,KAAI,SAACtN,EAAYS,GAAb,OACT,eAAC8vsB,EAAD,CAEEvwsB,MAAOA,EACPS,MAAOA,EACP+8E,QAASA,EACTiynB,OAAQiB,EACR/K,SAAU,EAAKkL,cANjB,sBACe7wsB,QADf,IACeA,OADf,EACeA,EAAOulC,GADtB,YAC4B9kC,Y,EAgB7B8+C,QAAU,WACf,MAAoC,EAAKjU,MAAjCw9oB,EAAR,EAAQA,cAAe3nf,EAAvB,EAAuBA,SACfivgB,EAA4BjvgB,EAA5BivgB,cAAe5+d,EAAarwC,EAAbqwC,SAMvB,MAAO,CAAEs3c,gBAAe1jU,WALL,EAAKirV,UAAUpgsB,QAAO,SAAC2L,EAAMvX,GAE9C,OADAuX,EAAKlL,KAAKrM,EAAK6qsB,gBACRtzrB,IACN,IAEiCulL,SAAU,CAAEivgB,gBAAe5+d,c,EA6GzDo6c,oBAAsB,WAC5B,MAAmD,EAAKp9oB,MAAhDgvC,EAAR,EAAQA,QAASkznB,EAAjB,EAAiBA,WAAYI,EAA7B,EAA6BA,kBAE7B,OADgC,EAAKxlqB,MAA7BsgpB,oBACmBt+qB,KAAI,SAACqhrB,EAAWlurB,GAAZ,OAC7B,eAAC,GAAD,CAEEyvX,UAAWy+T,EACXnxmB,QAASA,EACTiynB,OAAQiB,EACR/K,SAAUmL,EACVxB,mBAAoB,EAAKkB,oBACzBzwsB,IAAK,SAAAu+R,GAAE,OAAIA,GAAM,EAAKgya,uBAAuB5/rB,KAAK4tR,KAN7C79R,O,EAWHowsB,aAAe,SAACtrqB,GACtB,IAAM2lV,EAAU,EAAK5/U,MAAM6kqB,kBAAkB/7rB,QACvC4sc,EAAc91F,EAAQ5gW,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAOA,KACjE2lV,EAAQx3W,OAAOstc,EAAa,GAE5B,EAAKxya,MAAMoiqB,OAAO1lV,I,EAGZ0lV,OAAS,SAAClksB,GAChB,IAAMkxE,EAAYlxE,EAAEyhN,aAAa5uK,QAAQ,aACzC,GAAKq+B,EAAL,CAIA,IAAIu9K,EACJ,IACEA,EAAQloP,KAAK6tC,MAAM88B,GACnB,MAAOloC,GAEP,OAEF,IAAMglS,EAAgB,EAAKpvS,MAAM6kqB,kBAAkB/7rB,QAChC,YAAf+mP,EAAM32P,OACR22P,EAAM2nH,WAAiC,eAApB3nH,EAAMg0H,UACrBI,aAAa,CAAC70C,SAAQw0C,QAAS/zH,EAAM+zH,UADtB,UAE6C,IAAzDjpX,OAAOspX,aAAa,CAAC70C,SAAQw0C,QAAS/zH,EAAM+zH,aAErDx0C,EAAOhqU,KAAKyqP,GACZ,EAAK3sN,MAAMoiqB,OAAOl2X,K,EAGZgP,WAAa,SAACh9U,GACpBA,EAAEg5H,kB,EAGIy9hB,UAAY,SAACv6e,GAEnB,IAAQy3e,EAAuBz3e,EAAvBy3e,SAAUt6X,EAAan9G,EAAbm9G,SACZiI,EAASlgO,qBAAU,EAAKxiC,MAAM6kqB,kBAAmB9vC,EAAUt6X,GAEjE,EAAKv3P,MAAMoiqB,OAAO5ia,I,EAGZwia,oBAAsB,SAACtgV,GAG7B,IAAMigV,EAAoBlgV,aAAmB,CAAEtB,cAAe,EAAKrjV,MAAM6kqB,kBAAkB/7rB,QAAS87W,cAEpG,EAAK1hV,MAAMsxE,SAAS,CAAEqwlB,uB,EAGhBY,cAAgB,SAACrksB,GACvB,IAAM4kB,EAAS5kB,EAAEs8G,cACTm4E,EAAa,EAAK3yJ,MAAMwiqB,aAAxB7vgB,SACAivgB,EAAkBjvgB,EAAlBivgB,cAER,GAAoB,kBAAhB9+qB,EAAOxe,KAA0B,CACnC,IAAMgwW,EAAaxxV,EAAOtxB,MAC1B,EAAKwuC,MAAMsxE,SAAS,CAAEgpkB,cAAehmU,SAChC,GAAoB,aAAhBxxV,EAAOxe,KAAqB,CACrC,IAAMgwW,EAAaxxV,EAAOtxB,MAC1B,EAAKwuC,MAAMsxE,SAAS,CAClBqhF,SAAS,2BACJA,GADG,IAENqwC,SAAUsxI,WAGT,GAAoB,wBAAhBxxV,EAAOxe,MAAkD,iBAAhBwe,EAAOxe,MAA2C,qBAAhBwe,EAAOxe,MAA+C,eAAhBwe,EAAOxe,KAAuB,CACxJ,IAAMgwW,EAAaxxV,EAAOgvG,QAC1B,EAAK9xF,MAAMsxE,SAAS,CAClBqhF,SAAS,2BACJA,GADG,IAENivgB,cAAe,CACbjnV,oBAAqC,wBAAhB73V,EAAOxe,KAAiCgwW,EAAastV,EAAcjnV,oBACxFumU,aAA8B,iBAAhBp+pB,EAAOxe,KAA0BgwW,EAAastV,EAAc1gB,aAC1EC,iBAAkC,qBAAhBr+pB,EAAOxe,KAA8BgwW,EAAastV,EAAczgB,iBAClF50X,WAA4B,eAAhBzpS,EAAOxe,KAAwBgwW,EAAastV,EAAcr1Y,kB,uDArNhF,WACEz2T,KAAKkqC,MAAMyiqB,MAAM3ssB,Q,oBAcnB,WAAiB,IAAD,QACd,EAAuCA,KAAKkqC,MAApCgvC,EAAR,EAAQA,QAAS0znB,EAAjB,EAAiBA,eAAgB7grB,EAAjC,EAAiCA,EACjC,EAAuD/rB,KAAKgnC,MAApDw9oB,EAAR,EAAQA,cAAeqnB,EAAvB,EAAuBA,kBAAmBhvgB,EAA1C,EAA0CA,SAClCivgB,EAA4BjvgB,EAA5BivgB,cAAe5+d,EAAarwC,EAAbqwC,SAEvB,OACE,gBAACr0J,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,UACE,eAACf,EAAA,EAAD,CAAMO,UAAWF,EAAQ2znB,eAAgBjznB,MAAM,EAAMgB,GAAI,EAAzD,SACE,eAACk/B,GAAA,EAAD,CAEEF,iBAAkB,CAChBxgC,UAAWF,EAAQyynB,YAErB7qqB,MAAO/U,EAAE,oCACT4tF,WAAY,CACVnrG,KAAM,gBACNw8G,YAAaj/F,EAAE,0CACfrwB,MAAO8orB,EACPhpkB,SAAUx7G,KAAKyssB,cACfvssB,KAAM,QAERukH,MAAO,GACPpe,KAAM,IAbF,mCAiBR,gBAACxtB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ4znB,uBAAwBlznB,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,SAASI,QAAQ,gBAAjH,UACE,gBAAC0/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ6znB,mBAAnE,UACGhhrB,EAAE,oCACH,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2CAAlB,SACE,eAAC,KAAD,CAAUo7F,SAAS,QAAQlhB,MAAM,gBAGrC,gBAAC+mmB,GAAA,EAAD,WACE,eAACj1Y,EAAA,EAAD,CACExwM,QAAS,eAAC0uJ,EAAA,EAAD,CAAQhwK,MAAM,UAAU+1B,QAAO,UAAE8vkB,EAAcjnV,2BAAhB,SAA8CrpQ,SAAUx7G,KAAKyssB,cAAej+rB,KAAK,wBACzHsyB,MAAO/U,EAAE,2CAEX,eAACgsS,EAAA,EAAD,CACExwM,QAAS,eAAC0uJ,EAAA,EAAD,CAAQhwK,MAAM,UAAU+1B,QAAO,UAAE8vkB,EAAc1gB,oBAAhB,SAAuC5vkB,SAAUx7G,KAAKyssB,cAAej+rB,KAAK,iBAClHsyB,MAAO/U,EAAE,oCAEX,eAACgsS,EAAA,EAAD,CACExwM,QAAS,eAAC0uJ,EAAA,EAAD,CAAQhwK,MAAM,UAAU+1B,QAAO,UAAE8vkB,EAAczgB,wBAAhB,SAA2C7vkB,SAAUx7G,KAAKyssB,cAAej+rB,KAAK,qBACtHsyB,MAAO/U,EAAE,6CAEX,eAACgsS,EAAA,EAAD,CACExwM,QAAS,eAAC0uJ,EAAA,EAAD,CAAQhwK,MAAM,UAAU+1B,QAAO,UAAE8vkB,EAAcr1Y,kBAAhB,SAAqCj7M,SAAUx7G,KAAKyssB,cAAej+rB,KAAK,eAChHsyB,MAAO/U,EAAE,oDAKf,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ4znB,uBAAwBlznB,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,SAASI,QAAQ,gBAAjH,UACE,eAAC0/B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAC7BvzlB,QAAQ,QADV,SACmB3tF,EAAE,wCACrB,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,WACL4qE,UAAWF,EAAQg0nB,qBACnBxxsB,MAAOwxO,EACP1xH,SAAUx7G,KAAKyssB,cALjB,UAOE,eAAC10Y,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,qBACTrwB,MAAM,MACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,qBACTrwB,MAAM,MACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAMzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQ2znB,eAAgBjznB,MAAM,EAAMgB,GAAI,GAAzD,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,kCAErD,eAAC8sD,EAAA,EAAD,UACE,eAAC2gC,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SAAmDl6E,EAAE,qCAEvD,oBAAMogrB,aAAN,CACEnlc,MAAO6kc,EACP3ua,KAAK,KACLX,SAAU,EACVsiY,UAAW7+pB,KAAK6+pB,YAElB,gBAAChmlB,EAAA,EAAD,CAAMO,UAAWF,EAAQi0nB,eAAgBvznB,MAAM,EAAMgB,GAAI,GAAzD,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQk0nB,cAAnE,SAAmFrhrB,EAAE,sCACrF,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,SACG56E,KAAKsnrB,wBAER,eAAC3ikB,EAAA,EAAD,CACEvrC,UAAWF,EAAQm0nB,YACnB3zlB,QAAQ,YACRmL,QAAS+nlB,EAHX,SAKG7grB,EAAE,oD,uCAxLb,SAAuCs3F,EAAgB4tJ,GACrD,IAAQy7b,EAAiBrplB,EAAjBqplB,aACR,OAAKhygB,mBAAQgygB,EAAcz7b,GAMpB,KALE,eACFy7b,O,GALwBjoqB,aAmapBwwC,qBACbgG,aAhIa,SAACC,GAAD,MAA+B,CAC5C2xnB,eAAgB,CACdzxnB,QAAS,OACTM,eAAgB,gBAChBJ,MAAO,QAET6xnB,eAAgB,CACd/xnB,QAAS,OACTK,cAAe,SACfxC,WAAY,cAEdq0nB,sBAAuB,CACrBlynB,QAAS,OACTK,cAAe,MACfxC,WAAY,cAEd0ynB,WAAY,CACVrwnB,MAAO,OACP+3C,aAAc,QAEhBk6kB,UAAW,CACTjynB,MAAO,MACPi2C,OAAQ,MACRvM,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvC,UAAW,CACT0iF,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,OAG3CknlB,gBAAiB,CACf/wnB,MAAO,OACPs4C,UAAW,IACXr4C,OAAQ,EACRgsO,UAAW,UAEbhvS,KAAM,CACJ6iE,QAAS,OACT4kQ,cAAe,QAEjB+yE,OAAQ,CACNh6U,aAAc,aACduC,MAAO,QACPi2C,OAAQ,cACRh2C,OAAQ,QACRO,QAAS,GACTo2C,cAAe,eACfiK,UAAW,QACXqxkB,eAAgBtynB,EAAM+pC,QAAQE,QAAQ,KACtCH,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCmmlB,aAAc,CACZjwnB,QAAS,cACTnC,WAAY,aACZyC,eAAgB,gBAChB61C,OAAQ,MACRz1C,QAAS,GAEXwvnB,iBAAkB,CAChBlwnB,QAAS,OACT,QAAS,CACP6qB,MAAO,WAET,UAAW,CACT,2BAA8B,CAC5B7qB,QAAS,QAEX,8BAAiC,CAC/B+rC,SAAU,QACVsP,WAAY,YAIlB+0kB,mBAAoB,CAClBpwnB,QAAS,OACTnC,WAAY,SACZkuC,SAAU,QACVsP,WAAY,SACZiS,YAAa,GACb7U,aAAc,IAEhB03kB,cAAe,CACbtlmB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1BqM,OAAQ,GACR/P,aAAc,GAEhBiqlB,wBAAyB,CACvBrwnB,QAAS,QAEXswnB,cAAe,CACbn6kB,OAAQ,EACR/1C,SAAU,EACVo4C,UAAW,EACX93C,QAAS,EACT0lC,YAAa,GAEfoQ,KAAM,CACJ3rB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1BG,OAAQ,WAEVgolB,YAAa,CACXxllB,UAAW,OACX5hB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7BolF,YAAa,SACbga,YAAaxmD,EAAM+pC,QAAQC,KAAK,KAChCyC,YAAa,SACb3C,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtC,UAAW,CACT9jB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,OAGxCkolB,cAAe,CACb7xnB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3BwynB,uBAAwB,CACtBxxnB,MAAO,OACP+3C,aAAcn4C,EAAMZ,QAAQ,IAE9ByynB,mBAAoB,CAClB3xnB,QAAS,OACTnC,WAAY,UAEdu1e,MAAO,CACLlze,MAAO,GACPi2C,OAAQ,GACRtrB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,KAA3B,oBAMPhmE,YAAgB,gBAFH81B,CAGb22nB,I,yBChcIxgV,GAAY,CAChBygM,WAAY,CACVj6b,KAAM,YAER44kB,UAAW,CACT54kB,KAAM,aAER3lF,SAAU,CACR2lF,KAAM,OAERg5P,QAAS,CACPh5P,KAAM,eAeJ67kB,GAA2B,SAACvjqB,GAI5BA,EAFFwjqB,kBADF,IAEKpprB,EAFL,YAGI4lB,EAHJ,IAKA,OAAO,eAAC,KAAD,eAAqB5lB,KAGxBqprB,G,4MACG3mqB,MAAQ,CACb4mqB,gBAAiB,EAAK1jqB,MAAM0jqB,gBAC5BC,wBAAyB,EAAK3jqB,MAAM0jqB,iB,EAkE9BE,iBAAmB,SAAC5tsB,GAC1B,MAAoD,EAAKgqC,MAAjDgvC,EAAR,EAAQA,QAAS60nB,EAAjB,EAAiBA,gBAAiBC,EAAlC,EAAkCA,cAGlC,OAFoC,EAAKhnqB,MAAjC6mqB,wBAGLtisB,QAAO,SAACsB,EAAW1Q,GAAZ,OAA8B0Q,EAAK3M,OAASA,KACnD8I,KAAI,SAAC6D,EAAW1Q,GAAZ,OACH,eAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,SACE,eAACmsP,GAAA,EAAD,CACE3sP,UAAWF,EAAQ+0nB,cACnB,YAAWphsB,EAAK2B,KAChB,iBAAgB3B,EAAK89W,UACrBpsF,WAAW,EACXgV,YAAa,SAAAnrS,GAAC,OAAI,EAAKmrS,YAAYnrS,EAAGyE,IACtCi0B,MAAOj0B,EAAK2B,KACZmzrB,WAAY90rB,EAAKy7nB,OACf,eAAC,KAAD,CAAiBlvjB,UAAWF,EAAQyonB,WAAY/vkB,KAAK,eAAe71H,KAAK,YAASD,EACpFoqU,SAAUr5T,EAAKy7nB,OAAS,kBAAMylE,EAAgBlhsB,EAAKo0B,UAAMnlC,EACzDk2W,OAAQ,eAAC,GAAD,CAA0B54R,UAAWF,EAAQ2lT,WAAYjtQ,KAAMw5P,GAAUv+W,EAAKu+W,WAAWx5P,OACjG/M,QAASh4G,EAAKy7nB,OAAS,kBAAM0lE,EAAcnhsB,EAAKo0B,UAAMnlC,KAZ/CK,O,EAkBTq/G,SAAW,SAACpzG,GAClBA,EAAEg/H,UACF,EAAK44R,gBAAgB53Z,I,EAGf8lsB,kBAAoB,SAAC9lsB,GAC3B,IACMylsB,EADsB,EAAK7mqB,MAAzB4mqB,gBACwCrisB,QAC9C,SAACsB,GAAD,OAAeA,EAAK2B,KAAK4qC,cAAc7vC,SAASnB,EAAE4kB,OAAOtxB,MAAM09C,kBAEjE,EAAKwpE,SAAS,CAAEirlB,6B,EAGV7tS,gBAAkBpvO,oBAAS,EAAKs9gB,kBAAmB,K,EAEnD36Z,YAAc,SAACnrS,EAAQyE,GAC7BzE,EAAEyhN,aAAa39B,QAAQ,YAAav9K,KAAKC,UAAU/B,IACnDzE,EAAEyhN,aAAa39B,QAAQ,gBAAiB9jL,EAAEs8G,cAAcyplB,Y,4CA/F1D,WACE,MAA6CnusB,KAAKkqC,MAA1CgvC,EAAR,EAAQA,QAASk1nB,EAAjB,EAAiBA,SAAUC,EAA3B,EAA2BA,WAAYtirB,EAAvC,EAAuCA,EACvC,OACE,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQo1nB,oBAAqB90nB,WAAW,EAAMI,MAAM,EAArE,UACE,eAACf,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAACk/B,GAAA,EAAD,CACEF,iBAAkB,CAChBxgC,UAAWF,EAAQq1nB,aAErB50lB,WAAY,CACVmD,WAAY,CACV6kN,aACE,eAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,eAAC,KAAD,CAAiB7jC,UAAWF,EAAQ2lT,WAAYjtQ,KAAK,cAI3DpjH,KAAM,kBACNw8G,YAAaj/F,EAAE,mCACfwxB,aAAc/uC,KACdgtG,SAAUx7G,KAAKw7G,SACft7G,KAAM,QAERukH,MAAO,GACPpe,KAAM,GACNvlE,MAAO/U,EAAE,iCAGb,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,SAArD,UACG15E,KAAK8tsB,iBAAiB,SACvB,eAACnplB,EAAA,EAAD,CACEvrC,UAAWF,EAAQs1nB,eACnB90lB,QAAQ,OACRmL,QAASuplB,EAHX,SAKGrirB,EAAE,oCAGP,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQu1nB,cAA7C,UACE,eAACj1lB,EAAA,EAAD,CAAYvT,MAAM,cAAcyT,QAAQ,UAAUtgC,UAAWF,EAAQw1nB,aAArE,SAAoF3irB,EAAE,gCACrF/rB,KAAK8tsB,iBAAiB,WACvB,eAACnplB,EAAA,EAAD,CACEvrC,UAAWF,EAAQs1nB,eACnB90lB,QAAQ,OACRmL,QAASwplB,EAHX,SAKGtirB,EAAE,4C,uCAxDb,SAAuCs3F,EAAgB4tJ,GACrD,IAAQ28b,EAAoBvqlB,EAApBuqlB,gBAER,OAAKlzgB,mBAAQr3E,EAAUuqlB,gBAAiB38b,EAAU28b,iBAI3C,KAHE,CAAEA,kBAAiBC,wBAAyBD,O,GAVpBnpqB,aAmHtB0a,eAAgB,eAAhBA,CAAgCwupB,I,uCCnIzCgB,G,4MAeG3nqB,M,aACL/F,GAAIm9J,eACJlkL,UAAU,EACV6kR,WAAW,EACX6va,aAAa,EACbpwV,WAAY,GACZqM,UAAW,UACXgkV,QAAS,GACTC,QAAS,GACTvjV,eAAgB34F,KAAiBm8a,YACjCvjV,iBAAkB34F,KAAkB2hT,IACpChmkB,KAAM,GACNm8W,UAAW,cACXS,UAAW,aACXlrX,KAAM,QACNoooB,QAAQ,EACR0mE,gBAAiB,EAAK9kqB,MAAM8kqB,gBAC5BC,mBAAmB,GAChB,EAAK/kqB,MAAM8kqB,iB,EAmbRE,oBAAsB,SAAC9msB,GAC7B,IAAO+msB,EAAsB,EAAKjlqB,MAA3BilqB,mBACDnirB,EAAc5kB,EAAE4kB,OAChBwxV,EAAkBxxV,EAAOtxB,MAM/B,GAL0ByzsB,EACvB5jsB,QAAO,SAAC+tE,GAAD,OAAoBA,EAAUr4C,KAAO,EAAK+F,MAAM/F,MACvDtf,MAAK,SAAC23D,GACL,OAAOA,EAAUqxS,YAAcyqN,aAAepojB,EAAOtxB,UAGvD,EAAKknH,SAAS,CACZqslB,mBAAmB,QAEhB,CACL,IAAMl+B,EAAa,CACjBviqB,KAAMgwW,EACNmM,UAAWyqN,aAAe52N,IAE5B,EAAK57P,SAAL,aACEqslB,mBAAmB,GAChBl+B,M,EAKDq+B,6BAA+Bx+gB,oBAAS,EAAKs+gB,oBAAqB,K,EAElErE,eAAiB,SAACzisB,GACxB,IAAM4kB,EAAc5kB,EAAEs8G,cAAcl2G,KAAOpG,EAAEs8G,cAAgBt8G,EAAE4kB,OACzD29V,EAAoByqN,aAAepojB,EAAOxe,MAC5CgwW,EAAkBxxV,EAAOzrB,eAAe,WAAayrB,EAAOgvG,QAAUhvG,EAAOtxB,MAE7EsxB,EAAOzrB,eAAe,YAAcyrB,EAAOtxB,MAAMmG,SACnD28W,EAAaxxV,EAAOtxB,OAEtB,IAAIq1qB,EAAU,eACXpmT,EAAYnM,GAsCf,GApCkB,SAAdmM,IACFomT,EAAU,2BACLA,GADK,IAERpmT,UAAWyqN,aAAe52N,MAGZ,YAAdmM,GAA2B,CAAC,OAAQ,OAAQ,QAAQphX,SAASi1W,KAC/DuyT,EAAU,2BACLA,GADK,IAERlmT,UAAW,WAGG,cAAdF,IACF,EAAK/nQ,SAAS,CACZqslB,mBAAmB,IAEF,eAAfzwV,IACFuyT,EAAU,QAAc,GACxBA,EAAU,QAAc,IAEP,aAAfvyT,IACFuyT,EAAU,WAAiB,GAC3BA,EAAU,eAAqB,IAEd,eAAfvyT,IACFuyT,EAAU,UAAgB,QAC1BA,EAAU,QAAc,OACxBA,EAAU,QAAc,GACxBA,EAAU,eAAqB,EAAK/poB,MAAMukV,gBAAkB34F,KAAiBm8a,YAC7Eh+B,EAAU,iBAAuB,EAAK/poB,MAAMwkV,kBAAoB34F,KAAkB2hT,MAIpE,mBAAd7pN,GAAmC39V,EAAOtxB,QAC5Cq1qB,EAAWpmT,GAAa/3F,KAAiBm8a,aAEzB,qBAAdpkV,EAAkC,CAAC,IAAD,EAC9B10W,EAAMtU,OAAM,UAACqrB,EAAOtxB,aAAR,QAAiBm3R,KAAkB2hT,KACrDu8F,EAAWpmT,GAAa10W,EAG1B,EAAK2sG,SAAL,aACE4oQ,iBAAkB,EAAKxkV,MAAMwkV,kBAAoB34F,KAAkB2hT,KAChEu8F,K,EAICs+B,eAAiB,SAACjnsB,GACxBA,EAAEg/H,UACF,EAAKgokB,6BAA6BhnsB,I,4CAvgBpC,WAAiB,IAAD,OACd,EAA8CpI,KAAKkqC,MAA5CgvC,EAAP,EAAOA,QAASo2nB,EAAhB,EAAgBA,UAAWC,EAA3B,EAA2BA,aAAcxjrB,EAAzC,EAAyCA,EACzC,EAAuL/rB,KAAKgnC,MAArL/F,EAAP,EAAOA,GAAI4pV,EAAX,EAAWA,UAAWO,EAAtB,EAAsBA,UAAWyjV,EAAjC,EAAiCA,QAAe30rB,GAAhD,EAA0C1L,KAA1C,EAAgD0L,UAAU6kR,EAA1D,EAA0DA,UAAWy/E,EAArE,EAAqEA,WAAYywV,EAAjF,EAAiFA,kBAAmBH,EAApG,EAAoGA,QAASF,EAA7G,EAA6GA,YAAarjV,EAA1H,EAA0HA,eAA1H,IAA0IC,wBAA1I,MAA6J34F,KAAkB2hT,IAA/K,EAEMg7H,EAAiD,eAAdpkV,GAA4C,YAAdP,EAEvE,OACE,eAAC7jQ,GAAA,EAAD,CAAM5tC,UAAWF,EAAQu2nB,gBAAzB,SACE,eAACvolB,GAAA,EAAD,UACE,gBAACruC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,yCAEjC,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QADpB,SAC6B3tF,EAAE,8CAC/B,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,YACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO0vX,EACP5vQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,sCACTrwB,MAAM,aACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,qCACTrwB,MAAM,YACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,oCACTrwB,MAAM,WACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAEX,eAAdlU,GACC,gBAACvyS,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACI,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QADpB,SAC6B3tF,EAAE,8CAC/B,gBAACw3Y,GAAA,EAAD,CACI,aAAW,cACX/0Z,KAAK,YACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOmvX,EACPrvQ,SAAUx7G,KAAK6qsB,eALnB,UAOI,eAAC9yY,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAM,QACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAEvC,eAACz2P,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAEvC,eAACz2P,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,6CACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAEvC,eAACz2P,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,sCACTrwB,MAAM,aACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAEvC,eAACz2P,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,gCACTrwB,MAAM,OACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAKlC,eAAdpjM,GACC,gBAACvyS,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAApC,UACE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACI,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QADpB,SAC6B3tF,EAAE,iCAC/B,eAAC+0G,GAAA,EAAD,CAAa1nD,UAAWF,EAAQ02nB,WAAhC,SACI,gBAAC9tlB,EAAA,EAAD,CACIpmH,MAAOozsB,EACPtzlB,SAAUx7G,KAAK6qsB,eACfr8rB,KAAM,UACNmrG,WAAY,CACVnrG,KAAM,WALZ,UAQI,eAAC+tG,EAAA,EAAD,CAAU7gH,MAAO,OAAjB,SAA0BqwB,EAAE,2BAC5B,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,OAAjB,SAA0BqwB,EAAE,2BAC5B,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,OAAjB,SAA0BqwB,EAAE,2BAC5B,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,WAAjB,SAA8BqwB,EAAE,0BAChC,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,SAAjB,SAA4BqwB,EAAE,wBAC9B,eAACwwF,EAAA,EAAD,CAAU7gH,MAAO,aAAjB,SAAgCqwB,EAAE,oCA8B7C+irB,IAAwB,aAAZA,GAAsC,WAAZA,GAAoC,eAAZA,IAC/D,gBAACj2nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QADpB,SAC6B3tF,EAAE,8CAC/B,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,YACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOmvX,EACPrvQ,SAAUx7G,KAAK6qsB,eALjB,UAOe,aAAZiE,GACC,eAAC/2Y,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAM,QACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAGvC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,6CACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,sCACTrwB,MAAM,aACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,gBAAC31e,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACI,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAAavzlB,QAAQ,QAApD,SAGQ3tF,EADQ,aAAZ+irB,EACM,wCACU,WAAZA,EACI,sCACA,6CAGZ,gBAACvrS,GAAA,EAAD,CACI,aAAW,cACX/0Z,KAAK,UACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOmzsB,EACPrzlB,SAAUx7G,KAAK6qsB,eALnB,UAOE,eAAC9yY,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,qCACTrwB,MAAM,SACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAEvC,eAACz2P,EAAA,EAAD,CACI3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,uCACTrwB,MAAM,WACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,yBAUnDghJ,GACE,gBAAC32nB,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,6CAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,iBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO6vX,EACP/vQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAOk3R,KAAiBm8a,YACxBxnlB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBmiT,aACxBxtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBi9a,eACxBtolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBk9a,aACxBvolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBm9a,eACxBxolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAE1B,gBAACzmT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,yCAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,mBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO8vX,EACPhwQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,6BACTrwB,MAAOm3R,KAAkB2hT,IACzBjtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,+BACTrwB,MAAOm3R,KAAkBm9a,MACzBzolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,8BACTrwB,MAAOm3R,KAAkBo9a,KACzB1olB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,mBAQ/B,aAAdpjM,EACE,eAACvyS,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,SACE,eAACkmD,GAAA,EAAD,CAAa3yH,MAAQ8gsB,EACR71nB,UAAWF,EAAQg3nB,kBACnB,mBAAiB,cAF9B,SAGE,eAACh6Y,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,kCACTvd,KAAM,OACN+uC,aAAcv9C,KAAKgnC,MAAMx4B,KACzBw8G,YAAaj/F,EAAE,wCACfyvF,SAAUx7G,KAAKqvsB,eACfxilB,WAAY,eAAC,WAAD,UAAiBoilB,GAAqBljrB,EAAE,6CACpDoqS,oBAAqB,CACnBhoT,MAAO8gsB,SAMf,gBAACp2nB,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACkmD,GAAA,EAAD,CAAa3yH,MAAQ8gsB,EACR71nB,UAAWF,EAAQg3nB,kBACnB,mBAAiB,cAF9B,SAGE,eAACh6Y,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,kCACTvd,KAAM,OACN+uC,aAAcv9C,KAAKgnC,MAAMx4B,KACzBw8G,YAAaj/F,EAAE,wCACfyvF,SAAUx7G,KAAKqvsB,eACfxilB,WAAY,eAAC,WAAD,UAAiBoilB,GAAqBljrB,EAAE,6CACpDoqS,oBAAqB,CACnBhoT,MAAO8gsB,SAKf,eAACp2nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,IACtB,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACk/B,GAAA,EAAD,CAEEF,iBAAkB,CAChBxgC,UAAWF,EAAQi3nB,qBAErBrvqB,MAAO/U,EAAE,oCACT04F,MAAO,GACPpe,KAAM,GACNsT,WAAY,CACVnrG,KAAM,aACNw8G,YAAaj/F,EAAE,0CACfwxB,aAAcihU,EACdhjQ,SAAUx7G,KAAK6qsB,iBAXZ5pqB,QAiBf,gBAAC43C,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,eAACm9O,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,WACLy3F,MAAM,UACN+1B,QAAS9hH,IAGb4mB,MAAO/U,EAAE,sCAEX,eAACgsS,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,YACLy3F,MAAM,UACN+1B,QAAS+iK,IAGbj+P,MAAO/U,EAAE,uCAEX,eAACgsS,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,cACLy3F,MAAM,UACN+1B,QAAS4ykB,IAGb9tqB,MAAO/U,EAAE,4CAGb,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQk3nB,4BAA6Bx2nB,MAAM,EAAMgB,GAAI,GAAIN,QAAS,EAAGd,WAAW,EAAMM,QAAQ,WAA/G,UACE,eAACjB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS0qlB,EACTn2nB,UAAWF,EAAQm3nB,WAHrB,SAKGtkrB,EAAE,0CAGP,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACEvrC,UAAWF,EAAQo3nB,gBACnB52lB,QAAQ,YACRwD,SAAUl9G,KAAKgnC,MAAMioqB,oBAAsBjvsB,KAAKgnC,MAAMx4B,KACtDq2G,QAAS,kBAAMyqlB,EAAU,EAAKtoqB,QAJhC,SAOIhnC,KAAKkqC,MAAM8kqB,gBACPjjrB,EAAE,oCACFA,EAAE,oD,uCAxcxB,SAAuCs3F,EAAgB4tJ,GACrD,IAAO+9b,EAAmB3rlB,EAAnB2rlB,gBAEP,OAAKt0gB,mBAAQr3E,EAAU2rlB,gBAAiB/9b,EAAU+9b,iBAQ3C,KAPDA,EACK,2BAAIA,GAAX,IAA4BA,gBAAiB3rlB,EAAU2rlB,kBAEhD,2BAAI/9b,GAAX,IAAsBhwO,GAAIm9J,qB,GATR35J,aA+iBX0a,eAAgB,eAAhBA,CAAgCwvpB,I,mFChjBzC3kV,GAAS,IAAIC,UACNsmV,GAAe,IAAIz1pB,OAAO,mBAC1B01pB,GAAkB,IAAI11pB,OAAO,gCACpCqvU,GAAe,IAAIrvU,OAAO,cAAe,KAClC21pB,GAAwB,IAAI31pB,OAAO,mCACnC41pB,GAAuB,IAAI51pB,OAAO,eAClC61pB,GAA8B,IAAI71pB,OAAO,2BACzC81pB,GAA6B,IAAI91pB,OAAO,mBACxC+1pB,GAAoB,CAC/B,CAAE/vqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,MAEVC,GAA8B,CACzC,CAAEjwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,SAAKgwqB,MAAO,MACrB,CAAEhwqB,MAAO,SAAKgwqB,MAAO,MACrB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,IAAMgwqB,MAAO,KACtB,CAAEhwqB,MAAO,IAAKgwqB,MAAO,KACrB,CAAEhwqB,MAAO,KAAMgwqB,MAAO,MACtB,CAAEhwqB,MAAO,OAAQgwqB,MAAO,SAEpBE,GAAgB,CACpB,UAAW,8BACX,UAAW,8BACX,SAAU,8BACV,OAAQ,8BACR,QAAS,8BACT,UAAW,+BAYPC,G,4MAmBGjqqB,MAAQ,CACb4kV,UAAU,aACR3qV,GAAIm9J,eACJlkL,UAAU,EACV6kR,WAAW,EACX6va,aAAa,EACbpwV,WAAY,GACZqM,UAAW,UACXU,eAAgB34F,KAAiBm8a,YACjCvjV,iBAAkB34F,KAAkB2hT,IACpChmkB,KAAM,GACNm8W,UAAW,cACXS,UAAW,UACXR,QAAS,GACT1qX,KAAM,UACNoooB,QAAQ,EACRx9Q,iBAAiB,GACd,EAAK5gV,MAAM8kqB,iBAEhBC,mBAAmB,EACnBD,gBAAiB,EAAK9kqB,MAAM8kqB,gBAC5BnvX,YAAa,EAAK31S,MAAM21S,YACxBqxX,gBAAiB,EAAKhnqB,MAAM21S,YAC5BsxX,sBAAsB,EACtBC,aAAc,M,EAERxmV,a,IACAymV,YAAsB,E,EACtBC,gB,IA6SAzG,eAAiB,SAACzisB,GACxB,IAAM4kB,EAAc5kB,EAAEs8G,cAChBimQ,EAAoByqN,aAAepojB,EAAOxe,MAC5CgwW,EAAkBxxV,EAAOzrB,eAAe,WAAayrB,EAAOgvG,QAAUhvG,EAAOtxB,MAE7EsxB,EAAOzrB,eAAe,YAAcyrB,EAAOtxB,MAAMmG,SACnD28W,EAAaxxV,EAAOtxB,OAEtB,IAAMq1qB,EAAU,eACbpmT,EAAYnM,GAMf,GAHkB,mBAAdmM,GAAmC39V,EAAOtxB,QAC5Cq1qB,EAAWpmT,GAAa/3F,KAAiBm8a,aAEzB,qBAAdpkV,EAAkC,CAAC,IAAD,EAC9B10W,EAAMtU,OAAM,UAACqrB,EAAOtxB,aAAR,QAAiBm3R,KAAkB2hT,KACrDu8F,EAAWpmT,GAAa10W,EAG1B,EAAK2sG,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WACXmlT,M,EAIDm+B,oBAAsB,SAAC9msB,GAC7B,IAAQ+msB,EAAuB,EAAKjlqB,MAA5BilqB,mBACFnirB,EAAc5kB,EAAE4kB,OAChBwxV,EAAkBxxV,EAAOtxB,MAM/B,GAL0ByzsB,EACvB5jsB,QAAO,SAAC+tE,GAAD,OAAoBA,EAAUr4C,KAAO,EAAK+F,MAAM4kV,UAAU3qV,MACjEtf,MAAK,SAAC23D,GACL,OAAOA,EAAUqxS,YAAcyqN,aAAepojB,EAAOtxB,UAGvD,EAAKknH,SAAS,CACZqslB,mBAAmB,QAEhB,CACL,IAAMl+B,EAAa,CACjBviqB,KAAMgwW,EACNmM,UAAWyqN,aAAe52N,IAE5B,EAAK57P,SAAS,CACZqslB,mBAAmB,EACnBrjV,UAAU,2BACL,EAAK5kV,MAAM4kV,WACXmlT,O,EAMHq+B,6BAA+Bx+gB,oBAAS,EAAKs+gB,oBAAqB,K,EAElEG,eAAiB,SAACjnsB,GACxBA,EAAEg/H,UACF,EAAKgokB,6BAA6BhnsB,I,EAG5BmpsB,gBAAkB,SAACnpsB,EAAQq6G,GACjC,IAAI+ulB,EACJ,GAA0B,UAAtB/ulB,EAAWpb,QAA4C,UAAtBob,EAAWpb,QAAuBj/F,EAAE4kB,OAAOtxB,MAU9E,EAAKkvX,QAAUxiX,EAAE4kB,OAAOtxB,UAV6D,CACrF,IAAMA,EAAQ+mH,EAAW5yG,SAErB0gsB,GAAax1pB,KAAK,EAAK6vU,UAAYlvX,EAAMmG,OAC3C,EAAK+oX,QAAU,EAAKA,QAAQhyS,QAAQ23nB,GAArB,YAA0C70sB,EAA1C,MAEf,EAAKkvX,QAAUlvX,EAEjB81sB,EAAqB,EAAKH,YAAc,YAAO31sB,EAAP,KAAiBmG,OAK3D,EAAKwvsB,YAAcG,GAAsBppsB,EAAE4kB,OAAOggiB,eAClD,EAAKpqc,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,QAAS,EAAKA,UAEhBwmV,aAAcK,GAAgB,EAAK7mV,QAAS,EAAK5jV,MAAM64S,gB,EAInD6xX,iBAAmB,WACzB,IACM9mV,EAAW,EAAK5jV,MAAMmqqB,qBAExB,EAAKnqqB,MAAM4kV,UAAUhB,QADrB+mV,GAAiB,EAAK3qqB,MAAM4kV,UAAUhB,QAFtB,sCAE4C,EAAKymV,aAErEO,GAAc,EAAKN,WAAW7slB,MAAOmmQ,GACrC,EAAK0mV,WAAW7slB,MAAM/5C,QACtB,EAAKk4C,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,YAEFumV,sBAAuB,EAAKnqqB,MAAMmqqB,wB,EAI9BA,qBAAuB,WAC7B,IAAQj4nB,EAAY,EAAKhvC,MAAjBgvC,QACR,GAAI,EAAKlyC,MAAMmqqB,qBACb,OAAOJ,GAA4B/nsB,KAAI,SAACguE,EAAI76E,GAAL,OACrC,eAACwoH,EAAA,EAAD,CAEEvrC,UAAWF,EAAQ24nB,kBACnBn4lB,QAAQ,OACRmL,QAAS,kBAAM,EAAKitlB,eAAe96nB,EAAG85nB,QAJxC,SAMG95nB,EAAGl2C,OALC3kC,O,EAYL21sB,eAAiB,SAACzmhB,GACxB,IAAMu/L,EAAU+mV,GAAiB,EAAK3qqB,MAAM4kV,UAAUhB,QAASv/L,EAAU,EAAKgmhB,aAC9EO,GAAc,EAAKN,WAAW7slB,MAAOmmQ,GACrC,EAAK0mV,WAAW7slB,MAAM/5C,QACtB,EAAKk4C,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,e,EAKEmnV,eAAiB,SAAC3psB,GACxB,GAAKA,EAAE4kB,OAAOtxB,MAAd,CAGA,EAAK21sB,YAAcjpsB,EAAE4kB,OAAOggiB,eAC5B,IAAMtxjB,EAAQ0M,EAAE4kB,OAAOtxB,MACjBsxjB,EAAiB5kjB,EAAE4kB,OAAOggiB,eAC1BglJ,EAAmBt2sB,EAAMoU,MAAM,EAAGk9iB,GAClCilJ,EAAeD,EAAiBzjqB,MAAMkiqB,KAA0BuB,EAAiBzjqB,MAAMoiqB,IACvFuB,EAAcx2sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMmiqB,KAClEh1sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMqiqB,IAClD,GAAIqB,GAAgBC,EAAa,CAC/B9psB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMiulB,EAAqBF,EAAa,GAAGpwsB,OACrCuwsB,EAAoBF,EAAY,GAAGrwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBmlJ,EAAoBnlJ,EAAiBolJ,M,EAI7EC,iBAAmB,SAACjqsB,GAC1B,OAAQA,EAAE9D,KACR,IAAK,YACH,IAAM0ojB,EAAiB5kjB,EAAE4kB,OAAOggiB,eAC1BtxjB,EAAQ0M,EAAE4kB,OAAOtxB,MACjBs2sB,EAAmBt2sB,EAAMoU,MAAM,EAAGk9iB,GAClCslJ,EAAiBN,EAAiBzjqB,MAAMiiqB,IACxC+B,EAAW72sB,EAAMoU,MAAMk9iB,EAAiB,EAAGA,GACjD,GAAIslJ,GAAkB,KAAKv3pB,KAAKw3pB,GAAW,CACzCnqsB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMsulB,EAAiBF,EAAe,GAAGzwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBwlJ,EAAgBxlJ,QACvD,IAAKslJ,EAAgB,CAC1B,IAAML,EAAeD,EAAiBzjqB,MAAMkiqB,IACtCyB,EAAcx2sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMmiqB,IACpE,GAAIuB,GAAgBC,EAAa,CAC/B9psB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMiulB,EAAqBF,EAAa,GAAGpwsB,OACrCuwsB,EAAoBF,EAAY,GAAGrwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBmlJ,EAAoBnlJ,EAAiBolJ,IAGrF,MACF,IAAK,YACH,EAAKf,YAAcjpsB,EAAE4kB,OAAOggiB,eAAiB,EAC7C,MACF,IAAK,aACH,EAAKqkJ,YAAcjpsB,EAAE4kB,OAAOigiB,aAAe,EAC3C,MACF,IAAK,QACH7kjB,EAAEg5H,iBACFh5H,EAAE87G,oB,EAuBA07N,qBAAuB,SAACjmO,GAC9B,MAAuB,EAAKzvE,MAApBgvC,EAAR,EAAQA,QAASntD,EAAjB,EAAiBA,EACjB,EAA4C,EAAKib,MAA5B/F,EAArB,EAAQ2qV,UAAa3qV,GAAMmwqB,EAA3B,EAA2BA,aAC3B,EAA+Cz3lB,EAAvC4nN,gBAAR,MAAmB,aAAnB,EAA6B9lU,EAAkBk+G,EAAlBl+G,IAAQklB,EAArC,YAA+Cg5F,EAA/C,IACA,OACE,eAACG,GAAA,EAAD,aAEE2K,MAAO,GACP7K,iBAAkB,CAChBxgC,UAAWF,EAAQg3nB,mBAErBv2lB,WAAY,CACVwkP,WAAW,EACX58B,SAAU,SAACn6T,GACT3L,EAAI2L,GACJm6T,EAASn6T,KAGbi/F,KAAM,CACJg6J,SAAS,EACTlyP,MAAO4d,EAAEqlrB,IAEXtwqB,MAAO/U,EAAE,mCACTvd,KAAK,UACLw8G,YAAaj/F,EAAE,yCACf8tF,WAAW,GACPl5F,GApBCsgB,I,EAyBH67S,iBAAmB,SAAC/Y,EAAiB/3R,GAC3C,IAAQkyF,EAAyBlyF,EAAzBkyF,MAAOi/M,EAAkBnxS,EAAlBmxS,cACTvlJ,EAAUrpJ,GAAMw1R,EAAW4mD,UAAWzsP,EAAMtlD,QAAQ,IAAK,KACzDyrE,EAAQ7nG,GAAMunR,EAAW4mD,UAAW/yL,GAC1C,OACE,eAACr7E,EAAA,EAAD,CAAU+I,SAAU63N,EAApB,SACE,+BACG94L,EAAMr7I,KAAI,SAAC4/I,EAAWzsJ,GACrB,OAAOysJ,EAAK00L,UACV,uBAA0BhiO,MAAO,CAAEihB,WAAY,KAA/C,SAAuDqsB,EAAK/8B,MAAjDh9G,OAAO1S,IAChB,yBAA4Bm/G,MAAO,CAAEihB,WAAY,KAAjD,SAAyDqsB,EAAK/8B,MAAjDh9G,OAAO1S,Y,EAO1B2jV,4BAA8B,SAACr7N,GACrC,EAAK7B,SAAS,CACZsulB,gBAAiB,EAAK9yX,eAAe35N,EAAM/oH,U,EAIvCqkV,4BAA8B,WACpC,EAAKn9N,SAAS,CACZsulB,gBAAiB,M,EAIb9yX,eAAiB,SAAC1iV,GAExB,OAAQ60sB,GAAax1pB,KAAKr/C,GAEtB,EAAKsrC,MAAM64S,YAAYt0U,QAAO,SAAAw4T,GAC9B,IAAM0uY,EAAkB,EAAK7nV,QAAQr8U,MAAMgiqB,IAC3C,OAAIxsY,EAAW9iS,KAAO,EAAK+F,MAAM4kV,UAAU3qV,KAGpC8iS,EAAW4mD,UAAUphX,SAASkpsB,EAAW,GAAG75nB,QAAQ,IAAK,MAAQmrP,MANxE,I,EAUEoa,mBAAqB,SAACpa,GAC5B,OAAOA,EAAW4mD,W,4CArkBpB,WAAiB,IAAD,OACd,EAAgD3qX,KAAKkqC,MAA7CgvC,EAAR,EAAQA,QAASo2nB,EAAjB,EAAiBA,UAAWC,EAA5B,EAA4BA,aAAcxjrB,EAA1C,EAA0CA,EAC1C,EAAyM/rB,KAAKgnC,MAA9M,IAAQ4kV,UAAa3qV,EAArB,EAAqBA,GAAI4pV,EAAzB,EAAyBA,UAAiB3wW,GAA1C,EAAoC1L,KAApC,EAA0C0L,UAAU6kR,EAApD,EAAoDA,UAAW6rF,EAA/D,EAA+DA,QAASgkV,EAAxE,EAAwEA,YAAa9jV,EAArF,EAAqFA,gBAAiBS,EAAtG,EAAsGA,eAAtG,IAAsHC,wBAAtH,MAAyI34F,KAAkB2hT,IAA3J,EAAkK08H,EAAlK,EAAkKA,gBAAiBjC,EAAnL,EAAmLA,kBACnL,OACE,eAACjolB,GAAA,EAAD,CAAM5tC,UAAWF,EAAQu2nB,gBAAzB,SACE,eAACvolB,GAAA,EAAD,UACE,gBAACruC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,qCAEjC,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAAcvzlB,QAAQ,QAArD,SAA8D3tF,EAAE,8CAChE,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,YACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOmvX,EACPrvQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAM,QACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,sCACTrwB,MAAM,aACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAE1B,gBAACzmT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,gBAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,UAIG3tF,EAAE,kCACH,eAACk+F,EAAA,EAAD,CACEC,MAAOn+F,EAAE,oCACTo+F,UAAU,YAFZ,SAIE,gCACE,eAAC,KAAD,CAAiB/wC,UAAWF,EAAQ8qP,SAAUpyM,KAAK,uBAIzD,gBAAC/4C,EAAA,EAAD,WAEIg4nB,GAAkB7nsB,KAAI,SAACguE,EAAI76E,GAAL,OACpB,eAACwoH,EAAA,EAAD,CAEEvrC,UAAWF,EAAQw5nB,gBACnBh5lB,QAAQ,OACRmL,QAAS,kBAAM,EAAKitlB,eAAe96nB,EAAG85nB,QAJxC,SAMG95nB,EAAGl2C,OALC3kC,MASX,eAACwoH,EAAA,EAAD,CACEvrC,UAAWF,EAAQw5nB,gBACnBh5lB,QAAQ,OACRmL,QAAS7kH,KAAK0xsB,iBAHhB,gBAOC1xsB,KAAKmxsB,gCAIZ,gBAACt4nB,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,6CAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,iBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO6vX,EACP/vQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAOk3R,KAAiBm8a,YACxBxnlB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBmiT,aACxBxtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBi9a,eACxBtolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBk9a,aACxBvolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBm9a,eACxBxolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAE1B,gBAACzmT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,yCAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,mBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO8vX,EACPhwQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,6BACTrwB,MAAOm3R,KAAkB2hT,IACzBjtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,+BACTrwB,MAAOm3R,KAAkBm9a,MACzBzolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,8BACTrwB,MAAOm3R,KAAkBo9a,KACzB1olB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,mBAK3C,gBAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACkmD,GAAA,EAAD,CAAa3yH,MAAQ8gsB,EACR71nB,UAAWF,EAAQg3nB,kBACnB,mBAAiB,cAF9B,SAGE,eAACh6Y,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,kCACTvd,KAAM,OACN+uC,aAAcv9C,KAAKgnC,MAAM4kV,UAAUp9W,KACnCw8G,YAAaj/F,EAAE,wCACfyvF,SAAUx7G,KAAKqvsB,eACfxilB,WAAY,eAAC,WAAD,UAAiBoilB,GAAqBljrB,EAAE,6CACpDoqS,oBAAqB,CACnBhoT,MAAO8gsB,SAKf,eAACp2nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,OAExB,eAAC/B,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,SACE,eAAC,KAAD,CAEEM,MAAOy3nB,GACP/yX,qBAAsB5/U,KAAK4/U,qBAC3BC,YAAaqxX,EACbpxX,4BAA6B9/U,KAAK8/U,4BAClCC,4BAA6B//U,KAAK+/U,4BAClC5B,mBAAoBn+U,KAAKm+U,mBACzBrB,iBAAkB98U,KAAK88U,iBACvB81X,0BAA0B,EAC1Bj5lB,WAAY,CACVj+G,MAAOkvX,EACPzpP,UAAWnhI,KAAKqysB,iBAChB72lB,SAAUx7G,KAAKuxsB,gBACf1slB,QAAS7kH,KAAK+xsB,gBAEhBh0X,2BAA4B,SAAA/xS,GAAO,OACjC,eAAC6lF,EAAA,EAAD,2BAAW7lF,EAAQiyS,gBAAnB,IAAmCC,QAAQ,EAA3C,SACGlyS,EAAQ1F,aAGb7qC,IAAK,SAACu+R,GAAD,OAAa,EAAKs3a,WAAat3a,IApB/B/4P,KAuBT,gBAAC43C,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,eAACm9O,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,WACLy3F,MAAM,UACN+1B,QAAS9hH,IAGb4mB,MAAO/U,EAAE,sCAEX,eAACgsS,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,YACLy3F,MAAM,UACN+1B,QAAS+iK,IAGbj+P,MAAO/U,EAAE,uCAEX,eAACgsS,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,cACLy3F,MAAM,UACN+1B,QAAS4ykB,IAGb9tqB,MAAO/U,EAAE,yCAEX,eAACgsS,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,kBACLy3F,MAAM,UACN+1B,QAAS8uP,IAGbhqV,MAAO/U,EAAE,qDAGb,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQk3nB,4BAA6Bx2nB,MAAM,EAAMgB,GAAI,GAAIN,QAAS,EAAGd,WAAW,EAAMM,QAAQ,WAA/G,UACE,eAACjB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS0qlB,EACTn2nB,UAAWF,EAAQm3nB,WAHrB,SAKGtkrB,EAAE,0CAGP,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACEvrC,UAAWF,EAAQo3nB,gBACnB52lB,QAAQ,YACRwD,SAAUl9G,KAAKgnC,MAAMioqB,oBAAsBjvsB,KAAKgnC,MAAM4kV,UAAUp9W,KAChEq2G,QAAS,kBAAMyqlB,EAAU,EAAKtoqB,MAAM4kV,YAJtC,SAOI5rX,KAAKkqC,MAAM8kqB,gBACPjjrB,EAAE,oCACFA,EAAE,oD,uCA/UxB,SAAuCs3F,EAAgB4tJ,GACrD,IAAQ+9b,EAAiC3rlB,EAAjC2rlB,gBAAiBnvX,EAAgBx8N,EAAhBw8N,YAEzB,OAAKnlJ,mBAAQr3E,EAAU2rlB,gBAAiB/9b,EAAU+9b,iBAQ7Ct0gB,mBAAQr3E,EAAUw8N,YAAa5uE,EAAU4uE,aAIvC,KAHE,CAAEA,eARLmvX,EACK,CAAEpjV,UAAU,eAAMojV,IAElB,CAAEpjV,UAAU,2BAAM36G,EAAU26G,WAAjB,IAA4B3qV,GAAIm9J,sB,GAT9B35J,aA4oBfktqB,GAAmB,SAACkB,EAAqBC,EAAoBj+iB,GAOxE,MANoB,qBAATA,IACTA,EAAM,GAEmB,qBAAhBi+iB,IACTA,EAAa,IAET,GAAN,OAAUD,EAAY/isB,MAAM,EAAG+kJ,IAA/B,OAAsCi+iB,GAAtC,OAAmDD,EAAY/isB,MAAM+kJ,KAG1D+8iB,GAAgB,SAACntlB,EAAY/oH,GACxC,IAAM01H,EAAM,IAAIioP,MAAM,QAAS,CAAE05V,SAAS,IACpCjrgB,EAA4B,aAAlBrjF,EAAM27L,QAAyB4yZ,oBAAsBC,iBAErE70sB,OAAO0uB,yBAAyBg7K,EAAQ3pM,UAAW,SAASuJ,IAAI1G,KAAKyjH,EAAO/oH,GAC5E+oH,EAAMg3Y,cAAcrqY,IAGTqglB,GAAkB,SAAC7mV,EAAiB/qC,GAC/C,IAAIosC,EAAmBrB,EAcvB,OAbIT,GAAapvU,KAAK6vU,IAEpBA,EAAQr8U,MAAM47U,IAAcz9W,SAAQ,SAAC+wL,GAEnC,IAAMyuL,EAAYzuL,EAASlvJ,MAAMiiqB,IAAiB,GAC/B3wX,EAAYl+T,MAAK,SAACqqW,GAAD,OAAcA,EAAIrB,YAAcuB,MAElElC,GAAOmC,YAAYD,EAAW,GAEhCD,EAAmBA,EAAiBrzS,QAAQ6kH,EAAUyuL,MAInD8kV,GAAchnV,GAAOxtU,MAAMyvU,GAAkB99W,QAGzCwksB,GAAwB,CACnCn5nB,UAAW,CACTyjC,SAAU,WACV3hC,MAAO,QAETokQ,yBAA0B,CACxBziO,SAAU,WACV+jB,OAAQ,IACRumL,UAAW,SACXhtS,KAAM,EACNC,MAAO,GAETupT,WAAY,CACV3oP,QAAS,SAEXukQ,gBAAiB,CACfvkQ,QAAS,OACTK,cAAe,SACfq7L,UAAW,IACXx7L,MAAO,OACPC,OAAQ,EACRO,QAAS,EACTyrO,UAAW,SACXy4B,cAAe,SAIJ7gS,eAAgB,eAAhBA,CAAgC8xpB,I,gCCtvBzCiC,GAAmB,CAEvB1ksB,KAAM,iBACNm8W,UAAW,gBACXE,UAAW,UACXrM,WAAY,GACZ20V,sBAAuB,SACvBC,gBAAiB,MACjBC,eAAgB,GAChBnzsB,KAAM,cACNoooB,QAAQ,EACRsmE,aAAa,EACbhkV,QAAS,GACTW,eAAgB34F,KAAiBmiT,aACjCvpN,iBAAkB34F,KAAkB2hT,KAahC8+H,G,4MACGtsqB,MAAQ,CACb4kV,UAAU,2BACLsnV,IADI,IAEPjyqB,GAAIm9J,gBACD,EAAKl0J,MAAM8kqB,iBAEhBA,gBAAiB,EAAK9kqB,MAAM8kqB,gBAC5BpoV,QAAS,EAAK18U,MAAM08U,QACpBqoV,mBAAmB,EAEnBpvX,YAAa,EAAK31S,MAAM08U,QACxBsqV,gBAAiB,EAAKhnqB,MAAM08U,QAC5BuqV,sBAAsB,EACtBC,aAAc,M,EAGRxmV,a,IACAymV,YAAsB,E,EACtBC,gB,IAsYAiC,QAAU,WACZ,EAAKC,qBAAqBp+H,aAAe,EAAKpuiB,MAAM4kV,UAAUp9W,OAChE,EAAKo0G,SAAS,CACZqslB,mBAAmB,IAGrB,EAAK/kqB,MAAMupqB,sBAAsB,EAAKzsqB,MAAM4kV,Y,EAIxChsC,qBAAuB,SAACjmO,GAC9B,MAAuB,EAAKzvE,MAApBgvC,EAAR,EAAQA,QAASntD,EAAjB,EAAiBA,EACjB,EAA4C,EAAKib,MAA5B/F,EAArB,EAAQ2qV,UAAa3qV,GAAMmwqB,EAA3B,EAA2BA,aAC3B,EAA+Cz3lB,EAAvC4nN,gBAAR,MAAmB,aAAnB,EAA6B9lU,EAAkBk+G,EAAlBl+G,IAAQklB,EAArC,YAA+Cg5F,EAA/C,IACA,OACE,eAACG,GAAA,EAAD,aAEE2K,MAAO,GACP7K,iBAAkB,CAChBxgC,UAAWF,EAAQg3nB,mBAErBv2lB,WAAY,CACVwkP,WAAW,EACX58B,SAAU,SAACn6T,GACT3L,EAAI2L,GACJm6T,EAASn6T,KAGbi/F,KAAM,CACJg6J,SAAS,EACTlyP,MAAO4d,EAAEqlrB,IAEXtwqB,MAAO/U,EAAE,mCACTvd,KAAK,UACLw8G,YAAaj/F,EAAE,yCACf8tF,WAAW,GACPl5F,GApBCsgB,I,EAyBH67S,iBAAmB,SAAC/Y,EAAiB/3R,GAC3C,IAAQkyF,EAAyBlyF,EAAzBkyF,MAAOi/M,EAAkBnxS,EAAlBmxS,cACTvlJ,EAAUrpJ,GAAMw1R,EAAW4mD,UAAWzsP,EAAMtlD,QAAQ,IAAK,KACzDyrE,EAAQ7nG,GAAMunR,EAAW4mD,UAAW/yL,GAC1C,OACE,eAACr7E,EAAA,EAAD,CAAU+I,SAAU63N,EAApB,SACE,+BACG94L,EAAMr7I,KAAI,SAAC4/I,EAAWzsJ,GACrB,OAAOysJ,EAAK00L,UACV,uBAA0BhiO,MAAO,CAAEihB,WAAY,KAA/C,SAAuDqsB,EAAK/8B,MAAjDh9G,OAAO1S,IAChB,yBAA4Bm/G,MAAO,CAAEihB,WAAY,KAAjD,SAAyDqsB,EAAK/8B,MAAjDh9G,OAAO1S,Y,EAO1B2jV,4BAA8B,SAACr7N,GACrC,EAAK7B,SAAS,CACZsulB,gBAAiB,EAAK9yX,eAAe35N,EAAM/oH,U,EAIvCqkV,4BAA8B,WACpC,EAAKn9N,SAAS,CACZsulB,gBAAiB,M,EAIb9yX,eAAiB,SAAC1iV,GACxB,OAAQ60sB,GAAax1pB,KAAKr/C,GAEtB,EAAKsrC,MAAM64S,YAAYt0U,QAAO,SAAAw4T,GAC9B,IAAM0uY,EAAkB,EAAK7nV,QAAQr8U,MAAMgiqB,IAC3C,OAAIxsY,EAAW9iS,KAAO,EAAK+F,MAAM4kV,UAAU3qV,KAGpC8iS,EAAW4mD,UAAUphX,SAASkpsB,EAAW,GAAG75nB,QAAQ,IAAK,MAAQmrP,MANxE,I,EAUEoa,mBAAqB,SAACpa,GAC5B,OAAOA,EAAW4mD,W,EAGZ6oV,qBAAuB,SAACE,GAC9B,IAAOpsB,EAAuB,EAAKp9oB,MAA5Bo9oB,oBACP,OAAOjqrB,QAAQiqrB,EACZ/7qB,QAAO,SAAC+tE,GAAD,OAAoBA,EAAUr4C,KAAO,EAAK+F,MAAM4kV,UAAU3qV,MACjEtf,MAAK,SAAC23D,GACL,OAAOA,EAAUqxS,YAAc+oV,O,EAI7B7I,eAAiB,SAACzisB,GACxB,IAGI6msB,EAHEjirB,EAAc5kB,EAAE4kB,OAChB29V,EAAoByqN,aAAepojB,EAAOxe,MAC5CgwW,EAAkBxxV,EAAOzrB,eAAe,WAAayrB,EAAOgvG,QAAUhvG,EAAOtxB,MAG7EsxB,EAAOzrB,eAAe,YAAcyrB,EAAOtxB,MAAMmG,SACnD28W,EAAaxxV,EAAOtxB,OAEtB,IAauE,EAbnEq1qB,EAAU,eACXpmT,EAAYnM,GAEf,GAAkB,SAAdmM,EAAsB,CAAC,IAAD,EAClB+oV,EAAet+H,aAAe52N,GAC1B,mBACPmM,EAAYnM,GADL,0BAEGk1V,GAFb3iC,EAAU,EAKVk+B,EAAoB,EAAKuE,qBAAqBE,GAG9B,0BAAd/oV,GAAwD,YAAfnM,IACjC,mBACPmM,EAAYnM,GADL,gCAES,OAFnBuyT,EAAU,GASZ,GAHkB,mBAAdpmT,GAAmC39V,EAAOtxB,QAC5Cq1qB,EAAWpmT,GAAa/3F,KAAiBm8a,aAEzB,qBAAdpkV,EAAkC,CAAC,IAAD,EAC9B10W,EAAMtU,OAAM,UAACqrB,EAAOtxB,aAAR,QAAiBm3R,KAAkB2hT,KACrDu8F,EAAWpmT,GAAa10W,EAG1B,EAAK2sG,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WACXmlT,GAELk+B,uB,EAIIsC,gBAAkB,SAACnpsB,EAAQq6G,GACjC,IAAI+ulB,EACJ,GAA0B,UAAtB/ulB,EAAWpb,QAA4C,UAAtBob,EAAWpb,QAAuBj/F,EAAE4kB,OAAOtxB,MAU9E,EAAKkvX,QAAUxiX,EAAE4kB,OAAOtxB,UAV6D,CACrF,IAAMA,EAAQ+mH,EAAW5yG,SAErB0gsB,GAAax1pB,KAAK,EAAK6vU,UAAYlvX,EAAMmG,OAC3C,EAAK+oX,QAAU,EAAKA,QAAQhyS,QAAQ23nB,GAArB,YAA0C70sB,EAA1C,MAEf,EAAKkvX,QAAUlvX,EAEjB81sB,EAAqB,EAAKH,YAAc,YAAO31sB,EAAP,KAAiBmG,OAK3D,EAAKwvsB,YAAcG,GAAsBppsB,EAAE4kB,OAAOggiB,eAClD,EAAKpqc,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,QAAS,EAAKA,UAEhBwmV,aAAcK,GAAgB,EAAK7mV,QAAS,EAAK5jV,MAAM64S,gB,EAInDkyX,eAAiB,SAAC3psB,GACxB,GAAKA,EAAE4kB,OAAOtxB,MAAd,CAGA,EAAK21sB,YAAcjpsB,EAAE4kB,OAAOggiB,eAC5B,IAAMtxjB,EAAQ0M,EAAE4kB,OAAOtxB,MACjBsxjB,EAAiB5kjB,EAAE4kB,OAAOggiB,eAC1BglJ,EAAmBt2sB,EAAMoU,MAAM,EAAGk9iB,GAClCilJ,EAAeD,EAAiBzjqB,MAAMkiqB,KAA0BuB,EAAiBzjqB,MAAMoiqB,IACvFuB,EAAcx2sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMmiqB,KAClEh1sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMqiqB,IAClD,GAAIqB,GAAgBC,EAAa,CAC/B9psB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMiulB,EAAqBF,EAAa,GAAGpwsB,OACrCuwsB,EAAoBF,EAAY,GAAGrwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBmlJ,EAAoBnlJ,EAAiBolJ,M,EAI7EC,iBAAmB,SAACjqsB,GAC1B,OAAQA,EAAE9D,KACR,IAAK,YACH,IAAM0ojB,EAAiB5kjB,EAAE4kB,OAAOggiB,eAC1BtxjB,EAAQ0M,EAAE4kB,OAAOtxB,MACjBs2sB,EAAmBt2sB,EAAMoU,MAAM,EAAGk9iB,GAClCslJ,EAAiBN,EAAiBzjqB,MAAMiiqB,IACxC+B,EAAW72sB,EAAMoU,MAAMk9iB,EAAiB,EAAGA,GACjD,GAAIslJ,GAAkB,KAAKv3pB,KAAKw3pB,GAAW,CACzCnqsB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMsulB,EAAiBF,EAAe,GAAGzwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBwlJ,EAAgBxlJ,QACvD,IAAKslJ,EAAgB,CAC1B,IAAML,EAAeD,EAAiBzjqB,MAAMkiqB,IACtCyB,EAAcx2sB,EAAMoU,MAAMk9iB,EAAgBtxjB,EAAMmG,QAAQ0sC,MAAMmiqB,IACpE,GAAIuB,GAAgBC,EAAa,CAC/B9psB,EAAEg5H,iBACFh5H,EAAE87G,kBACF,IAAMiulB,EAAqBF,EAAa,GAAGpwsB,OACrCuwsB,EAAoBF,EAAY,GAAGrwsB,OACzCuG,EAAE4kB,OAAO2/hB,kBAAkBK,EAAiBmlJ,EAAoBnlJ,EAAiBolJ,IAGrF,MACF,IAAK,YACH,EAAKf,YAAcjpsB,EAAE4kB,OAAOggiB,eAAiB,EAC7C,MACF,IAAK,aACH,EAAKqkJ,YAAcjpsB,EAAE4kB,OAAOigiB,aAAe,EAC3C,MACF,IAAK,QACH7kjB,EAAEg5H,iBACFh5H,EAAE87G,oB,EAKAwtlB,iBAAmB,WACzB,IACM9mV,EAAW,EAAK5jV,MAAMmqqB,qBAExB,EAAKnqqB,MAAM4kV,UAAUhB,QADrB+mV,GAAiB,EAAK3qqB,MAAM4kV,UAAUhB,QAFtB,sCAE4C,EAAKymV,aAErEO,GAAc,EAAKN,WAAW7slB,MAAOmmQ,GACrC,EAAK0mV,WAAW7slB,MAAM/5C,QACtB,EAAKk4C,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,YAEFumV,sBAAuB,EAAKnqqB,MAAMmqqB,wB,EAI9BA,qBAAuB,WAC7B,IAAQj4nB,EAAY,EAAKhvC,MAAjBgvC,QACR,GAAI,EAAKlyC,MAAMmqqB,qBACb,OAAOJ,GAA4B/nsB,KAAI,SAACguE,EAAI76E,GAAL,OACrC,eAACwoH,EAAA,EAAD,CAEEvrC,UAAWF,EAAQ24nB,kBACnBn4lB,QAAQ,OACRmL,QAAS,kBAAM,EAAKitlB,eAAe96nB,EAAG85nB,QAJxC,SAMG95nB,EAAGl2C,OALC3kC,O,EAYL21sB,eAAiB,SAACzmhB,GACxB,IAAMu/L,EAAU+mV,GAAiB,EAAK3qqB,MAAM4kV,UAAUhB,QAASv/L,EAAU,EAAKgmhB,aAC9EO,GAAc,EAAKN,WAAW7slB,MAAOmmQ,GACrC,EAAK0mV,WAAW7slB,MAAM/5C,QACtB,EAAKk4C,SAAS,CACZgpQ,UAAU,2BACL,EAAK5kV,MAAM4kV,WADP,IAEPhB,e,4CAlnBN,WAAiB,IAAD,OACd,EAAiD5qX,KAAKkqC,MAA9CgvC,EAAR,EAAQA,QAASy6nB,EAAjB,EAAiBA,yBAA0B5nrB,EAA3C,EAA2CA,EAC3C,EAMI/rB,KAAKgnC,MANT,IACE4kV,UAAa3qV,EADf,EACeA,GAAIzyB,EADnB,EACmBA,KAAMq8W,EADzB,EACyBA,UAAWsoV,EADpC,EACoCA,sBAAuBC,EAD3D,EAC2DA,gBAAiBC,EAD5E,EAC4EA,eAAgBzE,EAD5F,EAC4FA,YAAahkV,EADzG,EACyGA,QAASW,EADlH,EACkHA,eADlH,IACkIC,wBADlI,MACqJ34F,KAAkB2hT,IADvK,EAEE5tN,EAFF,EAEEA,QACAqoV,EAHF,EAGEA,kBAEAiC,EALF,EAKEA,gBAGA,OACA,eAAClqlB,GAAA,EAAD,CAAM5tC,UAAWF,EAAQu2nB,gBAAzB,SACE,eAACvolB,GAAA,EAAD,UACE,gBAACruC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,sCAEjC,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAAcvzlB,QAAQ,QAArD,SAA8D3tF,EAAE,oDAChE,gBAACw3Y,GAAA,EAAD,CACE,aAAW,yBACX/0Z,KAAK,wBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOy3sB,EACP33lB,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,wCACTrwB,MAAM,SACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,yCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,aAKX,YAA1B2kJ,GACA,uCACE,eAAC35lB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAAcvzlB,QAAQ,QAArD,SAA8D3tF,EAAE,8CAC9D,gBAACw3Y,GAAA,EAAD,CACE,aAAW,mBACX/0Z,KAAK,kBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO03sB,EACP53lB,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,8BACTrwB,MAAM,MACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,kCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,mBAM/C,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAE1B,gBAACzmT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ+znB,aAAcvzlB,QAAQ,QAArD,SAA8D3tF,EAAE,8CAChE,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,YACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAOmvX,EACPrvQ,SAAUx7G,KAAK6qsB,eALjB,UAOuB,QAApBuI,GACC,eAACr7Y,EAAA,EAAD,CACA3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAM,QACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAGrC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,mCACTrwB,MAAM,UACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,sCACTrwB,MAAM,aACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,aAKX,YAA1B2kJ,GAAuC,qCACrC,gBAACt6nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,gBAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,UAIG3tF,EAAE,kCACH,eAACk+F,EAAA,EAAD,CACEC,MAAOn+F,EAAE,oCACTo+F,UAAU,YAFZ,SAIE,gCACE,eAAC,KAAD,CAAiB/wC,UAAWF,EAAQ8qP,SAAUpyM,KAAK,uBAIzD,gBAAC/4C,EAAA,EAAD,WAEIg4nB,GAAkB7nsB,KAAI,SAACguE,EAAI76E,GAAL,OACpB,eAACwoH,EAAA,EAAD,CAEEvrC,UAAWF,EAAQw5nB,gBACnBh5lB,QAAQ,OACRmL,QAAS,kBAAM,EAAKitlB,eAAe96nB,EAAG85nB,QAJxC,SAMG95nB,EAAGl2C,OALC3kC,MASX,eAACwoH,EAAA,EAAD,CACEvrC,UAAWF,EAAQw5nB,gBACnBh5lB,QAAQ,OACRmL,QAAS7kH,KAAK0xsB,iBAHhB,gBAOC1xsB,KAAKmxsB,qCAOlB,gBAACt4nB,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkBtvkB,MAAM,EAAMgB,GAAI,GAA3D,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,6CAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,iBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAK,OAAE6vX,QAAF,IAAEA,IAAkB34F,KAAiBmiT,aAC1Cv5d,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,iCACTrwB,MAAOk3R,KAAiBm8a,YACxBxnlB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBmiT,aACxBxtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBi9a,eACxBtolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,0CACTrwB,MAAOk3R,KAAiBk9a,aACxBvolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,4CACTrwB,MAAOk3R,KAAiBm9a,eACxBxolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,gBAIzC,eAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQy2nB,iBAAkB/1nB,MAAM,EAAMgB,GAAI,EAA3D,SACE,sBAAKxB,UAAWF,EAAQomT,oBAE1B,gBAACzmT,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CACEpgC,UAAWF,EAAQ+znB,aACnBvzlB,QAAQ,QAFV,SAIG3tF,EAAE,yCAEL,gBAACw3Y,GAAA,EAAD,CACE,aAAW,cACX/0Z,KAAK,mBACL4qE,UAAWF,EAAQ+pV,WACnBvna,MAAO8vX,EACPhwQ,SAAUx7G,KAAK6qsB,eALjB,UAOE,eAAC9yY,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,6BACTrwB,MAAOm3R,KAAkB2hT,IACzBjtd,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,+BACTrwB,MAAOm3R,KAAkBm9a,MACzBzolB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,UAErC,eAACz2P,EAAA,EAAD,CACE3+O,UAAWF,EAAQw2nB,aACnB5uqB,MAAO/U,EAAE,8BACTrwB,MAAOm3R,KAAkBo9a,KACzB1olB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOj5S,UAAWF,EAAQs1e,mBAK3C,gBAAC31e,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAI0gC,MAAO,CAAEgB,UAAW,IAApG,UACE,eAACzjC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACkmD,GAAA,EAAD,CACE3yH,MAAQ8gsB,EACR71nB,UAAWF,EAAQg3nB,kBACnB,mBAAiB,cAHnB,SAKE,eAACh6Y,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,kCACTvd,KAAM,OAEN9S,MAAO8S,EACPw8G,YAAaj/F,EAAE,wCACfyvF,SAAUx7G,KAAK6qsB,eACfh+kB,WACE,eAAC,WAAD,UACKoilB,GAAqBljrB,EAAE,6CAAiDvd,GAAQ,aAGvF2nT,oBAAqB,CACnBhoT,MAAO8gsB,IAAsBzgsB,SAKrC,eAACqqE,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,IAEM,WAA1Bu4nB,GACA,eAACt6nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAACkmD,GAAA,EAAD,CAAa1nD,UAAWF,EAAQ06nB,eAAhC,UACE,eAAChsU,GAAA,EAAD,CAAY7yE,QAAQ,iBAApB,SAAsChpS,EAAE,uCACxC,eAAC+1F,EAAA,EAAD,CAEEpmH,MAAO23sB,EACP73lB,SAAUx7G,KAAK6qsB,eACflxlB,WAAY,CACVnrG,KAAM,iBACNyyB,GAAI,kBANR,SASG2lV,EAAQ59W,KAAI,SAAC+pZ,EAAa52Z,GAAd,OACX,eAACogH,EAAA,EAAD,CAAsB7gH,MAAOq3Z,EAAO9xX,GAApC,SAAyC8xX,EAAOvkZ,MAAjCrS,OATZ8kC,WAiBa,YAA1BkyqB,GAAuC,qCACrC,eAACt6nB,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAkB1vkB,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAA5E,SACE,eAAC,KAAD,CAEEM,MAAOy3nB,GACP/yX,qBAAsB5/U,KAAK4/U,qBAC3BC,YAAaqxX,EACbpxX,4BAA6B9/U,KAAK8/U,4BAClCC,4BAA6B//U,KAAK+/U,4BAClC5B,mBAAoBn+U,KAAKm+U,mBACzBrB,iBAAkB98U,KAAK88U,iBACvB81X,0BAA0B,EAC1Bj5lB,WAAY,CACVj+G,MAAOkvX,EACPzpP,UAAWnhI,KAAKqysB,iBAChB72lB,SAAUx7G,KAAKuxsB,gBACf1slB,QAAS7kH,KAAK+xsB,gBAEhBh0X,2BAA4B,SAAA/xS,GAAO,OACjC,eAAC6lF,EAAA,EAAD,2BAAW7lF,EAAQiyS,gBAAnB,IAAmCC,QAAQ,EAA3C,SACGlyS,EAAQ1F,aAGb7qC,IAAK,SAACu+R,GAAD,OAAa,EAAKs3a,WAAat3a,IApB/B/4P,OAyBb,eAAC43C,EAAA,EAAD,CAAMO,UAAWF,EAAQgwkB,iBAAzB,SACE,eAACnxV,EAAA,EAAD,CACExwM,QACE,eAAC0uJ,EAAA,EAAD,CACEz6J,SAAUx7G,KAAK6qsB,eACfr8rB,KAAK,cACLy3F,MAAM,UACN+1B,QAAO,OAAE4ykB,QAAF,IAAEA,IAAesE,GAAiBtE,cAG7C9tqB,MAAO/U,EAAE,2CAGb,gBAAC8sD,EAAA,EAAD,CAAMO,UAAWF,EAAQk3nB,4BAA6Bx2nB,MAAM,EAAMgB,GAAI,GAAIN,QAAS,EAAGd,WAAW,EAAMM,QAAQ,WAA/G,UACE,eAACjB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS8ulB,EACTv6nB,UAAWF,EAAQm3nB,WAHrB,SAKGtkrB,EAAE,0CAGP,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,eAAC+qC,EAAA,EAAD,CACEvrC,UAAWF,EAAQo3nB,gBACnB52lB,QAAQ,YACRwD,SAAU+xlB,IAAsBzgsB,EAChCq2G,QAAS7kH,KAAKuzsB,QAJhB,SAOIvzsB,KAAKkqC,MAAM8kqB,gBACPjjrB,EAAE,oCACFA,EAAE,oD,uCAzXxB,SAAuCs3F,EAAgB4tJ,GACrD,IAAQ21G,EAA6BvjQ,EAA7BujQ,QAASooV,EAAoB3rlB,EAApB2rlB,gBACjB,OAAKt0gB,mBAAQr3E,EAAU2rlB,gBAAiB/9b,EAAU+9b,iBAiB7Ct0gB,mBAAQr3E,EAAUujQ,QAAS31G,EAAU21G,SAInC,KAHE,CAAEA,WAjBLooV,EACK,CACLpjV,UAAU,aACRunV,sBAAuBD,GAAiBC,sBACxCvoV,QAASsoV,GAAiBtoV,QAC1BW,eAAgB2nV,GAAiB3nV,eACjCC,iBAAkB0nV,GAAiB1nV,kBAChCwjV,GAELA,gBAAiB3rlB,EAAU2rlB,iBAGtB,CAAEpjV,UAAU,2BAAMsnV,IAAP,IAAyBjyqB,GAAIm9J,iBAAe4wgB,kBAAiBC,mBAAmB,O,GApCzExqqB,aAuqBlB0a,eAAgB,eAAhBA,CAAgCm0pB,ICjrBlCO,GAAwB,UAAM9irB,kBAAN,OAAsBW,yCAkDrDorB,GAAa,GAkBbg3pB,G,4MACG9sqB,MAAQ,CACb4lP,WAAY,KACZ43Z,cAAe,GACfuvB,qBAAqB,EACrBC,uBAAuB,EACvBC,4BAA4B,EAC5B9E,mBAAoBrypB,GAAWhtC,QAC/Bw3qB,oBAAqB,GACrB0nB,qBAAiBlzsB,EACjB+vsB,kBAAmB,GACnBjvgB,SAAUhqL,cAAI,IACdshsB,qBAAqB,EACrBr3gB,SAAU,CAAEivgB,cAAe,CAAEjnV,qBAAqB,EAAOumU,cAAc,EAAOC,kBAAkB,EAAO50X,YAAY,GAASvpF,SAAU,Q,EAGhIine,sB,IAkJAC,aAAe,WACrB,IAAM1H,EAAY,2BACb,EAAKyH,iBAAiBl5pB,WADT,IAEhBqsoB,oBAAqB,EAAKtgpB,MAAMsgpB,oBAChCtrF,gBAAiB,EAAKh1jB,MAAM4lP,iBAAc9wR,EAC1Cu4sB,iBAAkB,EAAKrtqB,MAAM41J,SAAS74L,IAAI,sBAGxC2osB,EAAa5rV,aACf4rV,EAAa5rV,WAAa4rV,EAAa5rV,WAAW93W,KAAI,SAAC6tP,GAKrD,MAJwB,eAApBA,EAAMu0H,YACRv0H,EAAMg4c,QAAU,GAChBh4c,EAAMi4c,QAAU,IAEXj4c,MAIX,EAAKj0I,SAAS,CACZG,WAAW,IACV,kBAAM,EAAK74E,MAAMoqqB,kBAAkB5H,O,EAGhC6H,eAAiB,WACvB,EAAKrqqB,MAAMS,SAASv+B,aAAKynsB,M,EAGnBW,cAAgB,SAAC5tV,GACvB,EAAKhkQ,SAAS,CACZiplB,kBAAmBjlV,K,EAIf6tV,gBAAkB,SAAC/H,GACzB,IAAMb,EAAoBa,EAAab,kBAC/BrnB,EAA4BkoB,EAA5BloB,cAAe3nf,EAAa6vgB,EAAb7vgB,SACvB,GAAyB,MAArBgvgB,EAA2B,CAC7B,IAAMsD,EAA4B,EAAKnoqB,MAAMmoqB,mBAAmBr/rB,QAChE+7rB,EAAkBn/rB,SAAQ,SAACsuC,GACzB,IAAM7+C,EAAQgzsB,EAAmBnprB,WAAU,SAAAnZ,GAAI,OAAIA,EAAKo0B,KAAO+Z,EAAK/Z,MACpEkuqB,EAAmBhzsB,GAAS6+C,KAE9B,EAAK4nE,SAAS,CACZuslB,qBACAtD,sBAGiB,MAAjBrnB,GACF,EAAK5hkB,SAAS,CACZ4hkB,kBAGA3nf,GACF,EAAKj6E,SAAS,CACZi6E,SAAS,eAAMA,M,EAKb63gB,gBAAkB,SAACx0sB,GACzB,EAAK0iH,SAAS,CACZmxlB,oBAA8B,UAAT7zsB,EACrB8zsB,sBAAgC,YAAT9zsB,EACvB+zsB,2BAAqC,gBAAT/zsB,EAC5B8usB,qBAAiBlzsB,K,EAIbwzsB,UAAY,SAAC38pB,GACM,eAArBA,EAAOy4U,YACTz4U,EAAOk8pB,QAAU,GACjBl8pB,EAAOm8pB,QAAU,IAEM,cAArBn8pB,EAAOy4U,WAAkD,aAArBz4U,EAAOy4U,WACpB,YAArBz4U,EAAOk4U,YACTl4U,EAAO44U,eAAiB34F,KAAiBm8a,YACzCp8pB,EAAO64U,iBAAmB,aAIvB74U,EAAOq8pB,gBACd,IAGI2F,EAHAxF,EAA4B,EAAKnoqB,MAAMmoqB,mBAAmBr/rB,QAC1D+7rB,EAA2B,EAAK7kqB,MAAM6kqB,kBAAkB/7rB,QACtD8ksB,EAAiBzF,EAAmBnprB,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAO0R,EAAO1R,MAElF2zqB,GAAkB,GACpBD,EAAexF,EAAmByF,GAAgBjqV,UAClDwkV,EAAmByF,GAAkBjiqB,GAErCw8pB,EAAmB/isB,KAAKumC,GAE1B,IAAMkiqB,EAAgChJ,EAAkB7lrB,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAO0R,EAAO1R,MAChG4zqB,GAAyB,IAC3BhJ,EAAkBgJ,GAAyBliqB,GAEzCiiqB,GAAkB,IACpBzF,EAAqB,EAAK2F,wBAAwB3F,EAAoBwF,EAAchiqB,EAAOg4U,YAEzFkqV,GAAyB,IAC3BhJ,EAAoB,EAAKiJ,wBAAwBjJ,EAAmB8I,EAAchiqB,EAAOg4U,YAG3F,EAAK/nQ,SAAS,CACZuslB,qBACAtD,oBACAkI,qBAAqB,EACrBC,uBAAuB,EACvBhF,qBAAiBlzsB,K,EAIbg5sB,wBAA0B,SAACC,EAAcJ,EAAcK,GAC7D,OAAOD,EAAM/rsB,KAAI,SAAC6D,GAChB,MAAkB,YAAdA,EAAK3M,KACA,2BACF2M,GADL,IAEE+9W,QAAS/9W,EAAK+9W,QAAQhyS,QAAb,YAA2B+7nB,EAA3B,iBAAkDK,EAAlD,QAGNnosB,M,EAIH0isB,aAAe,WACrB,EAAK3slB,SAAS,CACZmxlB,qBAAqB,EACrBC,uBAAuB,EACvBC,4BAA4B,EAC5BjF,qBAAiBlzsB,K,EAIbkysB,cAAgB,SAAC/sqB,GACvB,IAAMkuqB,EAAqB,EAAKnoqB,MAAMmoqB,mBAAmBr/rB,QACnDw3qB,EAAsB,EAAKtgpB,MAAMsgpB,oBAAoBx3qB,QACrDk/rB,EACJG,EAAmBxtrB,MAAK,SAAC9U,GAAD,OAAeA,EAAKo0B,KAAOA,MACnDqmpB,EAAoB3lqB,MAAK,SAAC9U,GAAD,OAAeA,EAAKo0B,KAAOA,KACtD,EAAK2hF,SAAS,CACZmxlB,oBAA8C,UAAzB/E,EAAgB9usB,KACrC8zsB,sBAAgD,YAAzBhF,EAAgB9usB,KACvC+zsB,2BAAqD,gBAAzBjF,EAAgB9usB,KAC5C8usB,qB,EAIIjB,gBAAkB,SAAC9sqB,GACzB,IAAMkuqB,EAAqB,EAAKnoqB,MAAMmoqB,mBAAmBr/rB,QACnD8ksB,EAAiBzF,EAAmBnprB,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAOA,KAC/EkuqB,EAAmB//rB,OAAOwlsB,EAAgB,GAC1C,EAAKhylB,SAAS,CACZuslB,wB,EAII3C,kBAAoB,SAACvrqB,GAC3B,IAAMqmpB,EAAsB,EAAKtgpB,MAAMsgpB,oBAAoBx3qB,QACrD8ksB,EAAiBttB,EAAoBthqB,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAOA,KAChFqmpB,EAAoBl4qB,OAAOwlsB,EAAgB,GAC3C,EAAKhylB,SAAS,CACZ0kkB,yB,EAII2tB,wBAA+B,SAAC37nB,GAEtC,GAAI,EAAKtyC,MAAM+sqB,qBAAuB,EAAK/sqB,MAAMgtqB,sBAAuB,CAAC,IAAD,EAEhEr6pB,EAAY,EAAK3S,MAAM+sqB,oBAAsBpF,GAAcsC,GAEjE,OACE,eAACt3pB,EAAD,CAEEu/B,QAAS,EAAKhvC,MAAMgvC,QACf2mQ,YAAa,EAAK74S,MAAM6kqB,kBAC7ByD,UAAW,EAAKA,UAChBC,aAAc,EAAKA,aACnBJ,mBAAoB,EAAKnoqB,MAAMmoqB,mBAC/BH,gBAAiB11nB,GAPnB,iBACOA,QADP,IACOA,OADP,EACOA,EAAWr4C,UADlB,QACwB,WAWgB,IAAD,EAA3C,GAAI,EAAK+F,MAAMitqB,2BAEb,OACE,eAAC,GAAD,CAEE/6nB,QAAS,EAAKhvC,MAAMgvC,QACpB0tS,QAAS,EAAK5/U,MAAM6kqB,kBACpBvkB,oBAAqB,EAAKtgpB,MAAMsgpB,oBAChCmsB,sBAAuB,EAAKA,sBAC5BE,yBAA0B,EAAKpE,aAC/BP,gBAAiB11nB,GAPnB,iBACOA,QADP,IACOA,OADP,EACOA,EAAWr4C,UADlB,QACwB,Y,EActBwyqB,sBAAwB,SAAC9gqB,GAC/B,IAAM20oB,EAA2B,EAAKtgpB,MAAMsgpB,oBAAoBx3qB,QAC1D8ksB,EAAiBttB,EAAoBthqB,WAAU,SAACnZ,GAAD,OAAeA,EAAKo0B,KAAO0R,EAAO1R,MACnF2zqB,GAAkB,EACpBttB,EAAoBstB,GAAkBjiqB,EAEtC20oB,EAAoBl7qB,KAAKumC,GAG3B,EAAKiwE,SAAS,CACZ0kkB,sBACA2sB,4BAA4B,EAC5BjF,qBAAiBlzsB,K,uDAxUrB,WACE,MAIIkE,KAAKkqC,MAHPoxkB,EADF,EACEA,4BACAG,EAFF,EAEEA,qCACAy5F,EAHF,EAGEA,+BAGEl1sB,KAAKkqC,MAAMqE,OAASvuC,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,KAC9CjhC,KAAKkqC,MAAMirqB,iBAAiBn1sB,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,IACpDjhC,KAAK4iH,SAAS,CACZgqK,WAAY5sR,KAAKkqC,MAAMqE,MAAMoE,QAAU3yC,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,MAI9Dw6kB,GAAyCH,EAA4Bv/mB,MACxEm5sB,M,kCAIJ,WACEl1sB,KAAKkqC,MAAMkrqB,uB,oBAGb,WAAiB,IAAD,OACd,EAMIp1sB,KAAKkqC,MALPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAuiiB,EAHF,EAGEA,qCACAF,EAJF,EAIEA,sCACA85F,EALF,EAKEA,wBAEF,EAQIr1sB,KAAKgnC,MAPPw9oB,EADF,EACEA,cACA2qB,EAFF,EAEEA,mBACAH,EAHF,EAGEA,gBACAnD,EAJF,EAIEA,kBACAvkB,EALF,EAKEA,oBACAzqf,EANF,EAMEA,SACAD,EAPF,EAOEA,SAGIw+Y,GAAiBi6H,IAAoC,OAARz4gB,QAAQ,IAARA,OAAA,EAAAA,EAAU74L,IAAI,cAAe03mB,GAAwCF,GAExH,OACE,eAAC1pf,EAAA,EAAD,CAAOz4C,UAAWF,EAAQwxT,eAA1B,SACE,gBAAC7xT,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,UACE,gBAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo8nB,cAAe57lB,QAAQ,KAAtD,SAA4D3tF,EAAE,yBAC9D,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQgxC,MAAOxQ,QAAQ,UAA9C,SAAyD3tF,EAAE,+BAE7D,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMP,WAAW,SAASa,QAAQ,SAASQ,QAAS,EAAxF,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC+qC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS7kH,KAAKu0sB,eACdn7nB,UAAWF,EAAQm3nB,WAHrB,SAKGtkrB,EAAE,yCAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC+qC,EAAA,EAAD,CACEvrC,UAAWF,EAAQq8nB,WACnB77lB,QAAQ,YACRzT,MAAM,UACNiX,SAAUk+d,EACVv2d,QAAS7kH,KAAKo0sB,aALhB,SAOGrorB,EAAE,0CAIT,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC+7C,GAAA,EAAD,SAGJ,gBAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,UACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAGN,QAAS,EAAnD,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,GAAD,CACE+xnB,MAAO,SAAA3ya,GAAE,OAAI,EAAKm6a,iBAAmBn6a,GACrC0ya,aAAc,CAACloB,gBAAeqnB,oBAAmBvkB,sBAAqBzqf,YACtEyvgB,OAAQtssB,KAAKw0sB,cACbh5lB,SAAUx7G,KAAKy0sB,gBACfrI,WAAYpssB,KAAKgusB,cACjBpB,eAAgB,kBAAM,EAAK8H,gBAAgB,gBAC3ClI,kBAAmBxssB,KAAKwssB,sBAG5B,gBAAC3znB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC+7C,GAAA,EAAD,MAEF,eAAC99C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAI0gC,MAAO,CAAEgB,UAAW,IAA9C,SACGt8G,KAAKi1sB,wBAAwBjG,WAIpC,eAACn2nB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,GAAD,CACE1B,QAASA,EACT00nB,gBAAiBuB,EACjBf,SAAU,kBAAM,EAAKsG,gBAAgB,UACrCrG,WAAY,kBAAM,EAAKqG,gBAAgB,YACvC1G,cAAehusB,KAAKgusB,cACpBD,gBAAiB/tsB,KAAK+tsB,+B,uCAvIpC,SAAuC1qlB,EAAgB4tJ,GACrD,GAAI5tJ,EAAU6wlB,qBAAuB7wlB,EAAU6wlB,sBAAwBjjc,EAAUijc,oBAE/E,OADA7wlB,EAAU14E,SAASv+B,aAAKynsB,KACjB,KAET,GAAIxwlB,EAAUu5E,UAAYv5E,EAAUu5E,SAAS74L,IAAI,gBAAkB22L,mBAAQr3E,EAAUu5E,SAAUq0E,EAAUr0E,UAAW,CAAC,IAAD,EAC5GA,EAAWv5E,EAAUu5E,SAGrBiygB,IADiBjygB,EAAS74L,IAAI,eAAiB6O,iBAAO+O,MAAK,SAAAq4Q,GAAE,MAAiC,kBAAtBA,EAAGj2R,IAAI,aAAkD,QAAtBi2R,EAAGj2R,IAAI,YAA8C,QAAtBi2R,EAAGj2R,IAAI,gBAA0B6O,iBACnJ7O,IAAI,WAC5ByxsB,EAAkB54gB,EAASh8K,MAAM,CAAC,WAAY,cAAgBiurB,GAAW,MAE/E,MAAO,CACLjygB,WACAgwF,WAAYhwF,EAAS74L,IAAI,MACzBygrB,cAAe5nf,EAAS74L,IAAI,iBAC5B8nsB,kBAAmBjvgB,EAAS74L,IAAI,cAAcwa,OAC9C4wrB,mBAAoBsG,GAAqBxkc,EAAUk+b,mBAAoBvygB,EAAS74L,IAAI,cAAcwa,QAClG+oqB,oBAAqB1qf,EAAS74L,IAAI,wBAA0B64L,EAAS74L,IAAI,uBAAuBwa,QAAU,GAC1Gs+K,SAAU,CACRivgB,eAAe,UAAAlvgB,EAASh8K,MAAM,CAAC,WAAY,yBAA5B,eAA+CrC,SAAU,CAAEsmW,qBAAqB,EAAOumU,cAAc,EAAOC,kBAAkB,EAAO50X,YAAY,GAChKvpF,SAAUsoe,IAKhB,OAAO,S,GA5CiB/wqB,aA4XtBgxqB,GAAuB,SAACtG,EAA2BuG,GACvD,IAAMC,EAAUD,EAAenqsB,QAAQ,SAACsrP,GAAD,OAAgBA,EAAMyxY,UAC7D,MAAM,GAAN,mBAAW6mE,GAAX,YAAkCwG,K,IAmLrB1goB,kBACbgG,aAjLa,SAACC,GAAD,MAA+B,CAC5CwvT,eAAgB,CACdnvT,OAA0B,EAAlBL,EAAMZ,UACdwB,QAA2B,EAAlBZ,EAAMZ,WAEjBd,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRvM,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCowlB,cAAe,CACbh5lB,UAAW,OAEb4N,MAAO,CACLmJ,aAAc,OAEhBkilB,WAAY,CACVj6nB,MAAO,SAETgznB,oBAAqB,CACnB5lkB,YAAa,GACb7U,aAAc,IAEhB06kB,YAAa,CACXjznB,MAAO,QAETujT,WAAY,CACV54R,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B8+M,SAAU,CACR/9N,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1BgD,WAAY,IAEdy5kB,WAAY,CACVpwkB,OAAQ,GACRtrB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5BsplB,eAAgB,CACdlznB,MAAO,OACP2qB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7BolF,YAAa,SACbga,YAAaxmD,EAAM+pC,QAAQC,KAAK,KAChCyC,YAAa,SACb3C,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtC,UAAW,CACT9jB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,OAGxCuqlB,gBAAiB,CACf5nlB,UAAW,OACX7C,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCkrlB,4BAA6B,CAC3B1nkB,YAAa,GACb7U,aAAc,IAEhBo5kB,aAAc,CACZ3wlB,UAAW,GACX+W,aAAc,GAEhBq8kB,aAAc,CACZvolB,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnC87S,WAAY,CACV/6S,WAAY,GAEdgllB,qBAAsB,CACpB9xnB,QAAS,OACTC,SAAU,OACVI,cAAe,OAEjBm0nB,WAAY,CACVp0nB,SAAU,SAEZgze,MAAO,CACLlze,MAAO,GACPi2C,OAAQ,GACRtrB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,KAA3B,gBAEP+jiB,iBAAkB,CAChB9tkB,QAAS,QAIX80nB,kBAAmB,CACjB50nB,MAAO,QAET60nB,oBAAqB,CACnB70nB,MAAO,QAETq0nB,iBAAkB,CAChBv0nB,QAAS,OACTnC,WAAY,UAEdqmT,gBAAiB,CACf/tQ,OAAQ,MACRj2C,MAAO,MACPkmD,YAAa,QACb7Z,YAAa,EACb+Z,YAAaxmD,EAAM+pC,QAAQC,KAAK,KAElCwtlB,gBAAiB,CACfp3nB,MAAO,GACPE,SAAU,GACVo4C,UAAW,GACXrC,OAAQ,GACRz1C,QAAS,EACTP,OAAQ,EACR0qB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B0iF,gBAAiB,0BACjB0C,YAAa,QACbC,YAAa,OACb+Z,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,KACnC,UAAW,CACT0iF,gBAAiB,4BAGrB6slB,kBAAmB,CACjBv2nB,MAAO,OACPE,SAAU,GACVo4C,UAAW,GACXrC,OAAQ,GACRz1C,QAAS,EACTP,OAAQ,EACRypC,gBAAiB,cACjB0C,YAAa,QACbC,YAAa,OACb+Z,YAAaxmD,EAAM+pC,QAAQC,KAAK,KAElC0ulB,eAAgB,CACdx4nB,QAAS,QAEXi1nB,WAAY,GAEZpC,cAAe,CACb,QAAS,CACPhomB,MAAO,WAETnqB,QAAS,SACTu3C,aAAc,OAEhBq7kB,aAAc,CACZnznB,OAAQL,EAAMZ,QAAQ,EAAG,GACzBc,QAAS,aAmCXu0C,cACAxwE,YAAgB,gBAChB0/D,mBAjCsB,SAAC73E,EAAYkD,GAAgB,IAAD,EAC5C0iP,EAAa1iP,EAAMqE,MAAMoE,SAAZ,UAAsBzI,EAAMqE,MAAMoE,cAAlC,aAAsB,EAAoB1R,IAC7D,MAAO,CACL27J,SAAU4mE,aAAwBopB,EAAxBppB,CAAoCx8N,GAC9CktqB,oBAAqBj4G,eAAqCj1jB,GAC1Ds0kB,4BAA6Bx8d,gBAAwC93G,GACrEy0kB,qCAAsC78d,eAAiD53G,GACvFu0kB,sCAAuC18d,eAAkD73G,GACzFquqB,wBAAyB7wpB,gBAAqCxd,OAGvC,SAAC2D,GAC1B,MAAO,CACLwqqB,iBAAkB,SAACvob,GACjBjiP,EAAS,IAAIirqB,KAAiBhpb,KAEhCwob,mBAAoB,WAClBzqqB,EAAS,IAAIkrqB,OAEfvB,kBAAmB,SAAC5H,GAClB/hqB,EAAS,IAAImrqB,KAAkBpJ,KAEjCwI,+BAAgC,WAC9BvqqB,EAAS,IAAI2kB,QAEf3kB,eAIWsqC,CAKb6+nB,I,4BCnpBaiC,GAzBY,CAEnBC,cAFmB,SAEL1umB,EAAUvgD,EAAesrK,EAAiBgtJ,GAAuC,OAAD,kIAE1FruD,EAAU1pN,EAAIvjG,IANN,uBAORuva,EAAY,IAAIviH,KAAUC,EAASjqQ,GACnCw/C,EAAW84Q,EAAa,kDACiBhtJ,EADjB,0BAC0CgtJ,GAD1C,kDAEiBhtJ,GANiD,SAOzEihN,EAAUO,UAAUttU,GAPqD,oBAO1FwiB,EAP0F,kBAQ5FA,GAR4F,UAQ5FA,EAAU7hF,eARkF,aAQ5F,EAAmB4sY,gBARyE,0CASvF/qT,EAAS7hF,QAAQ4sY,gBATsE,iCAWvF,MAXuF,gEAehG9rZ,QAAQ7Z,MAAM,iCAAd,MAfgG,mE,0JC0RzF8nsB,GAAiB,SAAC/rqB,GAMzBA,EAJFs+T,UAIEt+T,EAHF2vE,UAGE3vE,EAFFgoR,UAHF,IAIK5tS,EAJL,YAKI4lB,EALJ,IAOA,OAAO,oCAAS5lB,KA4GZ4xrB,G,kDAgEJ,WAAYhsqB,GAAQ,IAAD,8BACjB,cAAMA,IAzCDlD,MAAQ,CACbi1S,QAAQ,EACRk6X,gBAAgB,EAChBC,aAAa,EACb/jf,QAAS,KACTgkf,0BAA0B,EAC1BC,SAAU,KACVztC,iBAAiB,EACjB0tC,uBAAwB,KAGxBC,qBAAqB,EAErBC,qBAAsB,EAEtBC,oBAAoB,EACpB/1V,YAAa,KACbg2V,aAAc,KACdC,iCAAiC,GAsBhB,EAlBXC,aAAepyqB,cAkBJ,EAjBXqyqB,eAAiBryqB,cAiBN,EAhBXsyqB,YAActyqB,cAgBH,EAfXuyqB,aAAevyqB,cAeJ,EAdXwyqB,iBAAmBxyqB,cAcR,EAbXyyqB,eAAiBzyqB,cAaN,EAZX0yqB,SAAW1yqB,cAYA,EAXXgkX,cAAgBhkX,cAWL,EAVX2yqB,QAAU3yqB,cAUC,EATX4yqB,UAAY5yqB,cASD,EARX6yqB,aAAe7yqB,cAQJ,EAPX8yqB,QAAU9yqB,cAOC,EANX+yqB,qBAAuB/yqB,cAMZ,EAHX0uF,cAGW,IAFX4uM,kBAEW,IAiXZ4mF,wBAA0B,WAAO,IAAD,MACrC,EAwBI,EAAKz+W,MAvBPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAijK,EAHF,EAGEA,MACAyohB,EAJF,EAIEA,aACAC,EALF,EAKEA,gBACAC,EANF,EAMEA,OACA9qpB,EAPF,EAOEA,cACA+qpB,EARF,EAQEA,oBACAv1Y,EATF,EASEA,aACAw1Y,EAVF,EAUEA,gBACAv1R,EAXF,EAWEA,eACAw1R,EAZF,EAYEA,gBACAC,EAbF,EAaEA,6BACAl8jB,EAdF,EAcEA,WACAgnL,EAfF,EAeEA,oBACAr0M,EAhBF,EAgBEA,4BAEAwplB,GAlBF,EAiBEC,cAjBF,EAkBED,oBACAE,EAnBF,EAmBEA,uBACA7O,EApBF,EAoBEA,iBACA9rF,EArBF,EAqBEA,UACAyjE,EAtBF,EAsBEA,yBACAm3B,EAvBF,EAuBEA,iBAEM5B,EAA2B,EAAKvvqB,MAAhCuvqB,uBAEFlkf,EAAUrjC,GAASA,EAAMjrL,IAAI,MAC7Bq0sB,EAAcpphB,GAASA,EAAMjrL,IAAI,UACjCs0sB,EAAgCrphB,GAAyC,IAAhCA,EAAMjrL,IAAI,aAAahI,MAAcyjC,0BAAuBj2B,SAASsyI,GAE9Gy8jB,EAAoBtphB,IAAUA,EAAMjrL,IAAI,iBAAmBirL,EAAMjrL,IAAI,gBAAkBwgU,aAAWv1I,EAAMjrL,IAAI,iBAAmBirL,EAAMjrL,IAAI,gBAAgB,GAAQ,GACjKw0sB,EAA4Bb,GAAmBI,EAC/CU,EAA6BR,EAEnC,MAAO,CACL,eAAC,GAAD,CAAqC5+nB,UAAWF,EAAQ0vU,QAApC,mBACpBt9Y,OAAO,EAAK07B,MAAMovqB,YAAX,EACN5nlB,GACD,eAACgue,EAAA,EAAD,CAEE9if,QAAQ,OACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK+rH,SAAW/rH,GAElB,YAAW,EAAK4/B,MAAMi1S,OAAS,sBAAmBngV,EAClD,gBAAc,OACd+oH,QAAS,EAAK4zlB,aACdr/nB,UAAWm0C,IAAWr0C,EAAQw/nB,oBAAqBx/nB,EAAQy/nB,mBAV7D,SAYG5srB,EAAE,mBAXC,iBAaLyiG,IACA4plB,EACG,eAAC19E,GAAA,EAAD,CAEAxwgB,MAAOn+F,EAAE,8BACTo+F,UAAU,SAHV,SAKA,+BACE,eAACqye,EAAA,EAAD,CAEE9if,QAAQ,OACRw4M,UAAU,UACV94O,UAAWF,EAAQ0/nB,4BAJrB,SAMG7srB,EAAE,mBALC,mBANJ,sBAeJ,eAACywkB,EAAA,EAAD,CAEA9if,QAAQ,OACRw4M,UAAU,UACVrtM,QAAS,SAACz8G,GAAD,OAAO,EAAKywsB,UAAUzwsB,EAAGiqN,IAClCj5I,UAAWm0C,IAAWr0C,EAAQw/nB,oBAAqBx/nB,EAAQy/nB,mBAC3Dz7lB,SAAUu6lB,EANV,SAQC1rrB,EAAE,mBAPC,kBAnCD,oBAkDFyiG,IACCwyjB,GACDmoB,GAAiBC,mBAAmBC,EAAkB9rF,IACtDvub,IAAS,UAAAA,EAAMjrL,IAAI,oBAAV,eAAwBhI,MAAO,EACzC,CAAC,eAACygmB,EAAA,EAAD,CAEC9if,QAAQ,WACRw4M,UAAU,UACV94O,UAAWm0C,IAAWr0C,EAAQw/nB,oBAAqBx/nB,EAAQ4/nB,cAC3Dj0lB,QAAS,kBAAM,EAAKk0lB,mBAClB,kBAAM,EAAKn2lB,SAAS,CAAE4zlB,qBAAqB,MAC3C,EAAKwC,cAPR,SAUEjtrB,EAAE,iCATC,iBAWN,IAlEG,CAmEP,eAACywkB,EAAA,EAAD,CAEEtqS,UAAU,UACVx4M,QAAQ,YACRtgC,UAAWm0C,IAAWr0C,EAAQ+/nB,oBAAqB//nB,EAAQggoB,sBAAuBhgoB,EAAQ4/nB,cAC1F5/nB,QAAS,CAAEp4C,MAAOysF,IAAWr0C,EAAQigoB,2BACrCt0lB,QAAS,EAAKu0lB,eANhB,SAcIjQ,GAAiBC,mBAAmBC,EAAkB9rF,IAAcyjE,EAClEj1pB,EAAE,oBACFA,EAAE,uBAfF,mBAiBN,eAAC,KAAD,CAEE4+E,KAAMttG,QAAQk5sB,GACdpjlB,SAAUojlB,EACV5xkB,QAAS,EAAK00kB,gBACdv9T,aAAc,CACZ17G,WAAY,SACZL,SAAU,UAEZ96J,gBAAiB,CACf86J,SAAU,MACVK,WAAY,UAEdkuC,UAAY,WAOV,IAAMgrY,EAAW3B,EACb,CAAEp4qB,uBAAoBh2B,SAASsyI,IAAex8G,+BAA4B91B,SAASsyI,GACjF,CACEv3I,IAAK,eACL6tJ,QAASpmI,EAAE,wBACXmxF,SAAU7/G,QAAQ+6sB,GAAeC,GACjCvkZ,gBAAiBskZ,EAAcrsrB,EAAE,iCAAmCssrB,EAAgCtsrB,EAAE,gDAAkD,GACxJ84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpCnB,IACAnxmB,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW,mBAEZ,EAAKq1R,eAEV,CACE10sB,IAAK,cACL6tJ,QAASpmI,EAAE,uBACXmxF,SAAU7/G,QAAQ+6sB,GAClBtkZ,gBAAiB/nS,EAAE,gCACnB84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpCz2R,EAAejwN,GACf5rH,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW,yBAEZ,EAAKq1R,gBAGZ,GACEQ,EAAuB,CAC3Bl1sB,IAAK,qBACL6tJ,QAASg3iB,GAAiBC,mBAAmBC,EAAkB9rF,GAC3DxxlB,EAAE,8BACFA,EAAE,sBACN84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WAAO,IAAD,IAC1C,EAAKM,kBACL5ymB,KAAmB9rE,mBAAgB8+qB,YAAa5spB,EAAc,KAC9D,EAAK3iB,MAAMS,SAASv+B,gBAAK,GAAD,OAAIwoB,cAAJ,sBAAkB,EAAKsV,MAAMqE,aAA7B,iBAAkB,EAAkBoE,cAApC,aAAkB,EAA0B1R,GAA5C,eACvB,EAAK+3qB,eAEJU,EAAc,CAClBp1sB,IAAK,oBACL6tJ,QAASpmI,EAAE,qBACX84F,QAAS,WAAQ,EAAKg/T,oBAElB81R,EAAgB,CACpBr1sB,IAAK,QACL6tJ,QAASpmI,EAAE,8CACX84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpC,EAAKa,cACLnzmB,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW/pZ,sBAAmBosZ,gBAE/B,EAAKgzR,eAEJa,EAAkB,CACtBv1sB,IAAK,UACL6tJ,QAASpmI,EAAE,2CACX84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpC,EAAKQ,gBACL9ymB,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW,aAEZ,EAAKq1R,eAEJc,EAAwB,CAC5Bx1sB,IAAK,gBACL6tJ,QAASpmI,EAAE,iDACX84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpC,EAAKgB,sBACLtzmB,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW,oBAEZ,EAAKq1R,eAEJgB,EAAen3Y,EAAsB,CAAC,CAC1Cv+T,IAAK,OACL6tJ,QAASpmI,EAAE,yCACX84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpC,EAAKkB,aACLxzmB,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW,WAEZ,EAAKq1R,gBACL,GAKCkB,EAAgB/B,EAAmB,CAAC,CACxC7zsB,IAAK,QACL6tJ,QAASpmI,EAAE,yCACX84F,QAAS,kBAAM,EAAKk0lB,mBAAkB,WACpC,EAAK7uqB,MAAMS,SAASv+B,gBAAK,YAAD,OAAaimN,EAAb,YAAwBz4L,sBAAmBqsZ,YACnEx/U,KAAmB9rE,mBAAgB4+qB,cAAe1spB,EAAc,CAC9D82X,UAAW/pZ,sBAAmBqsZ,cAE/B,EAAK+yR,gBACL,GAECmB,EAAiBhR,GAAiBC,mBAAmBC,EAAkB9rF,IAAcyjE,EAC3F,OAAIxyjB,EACK2rlB,EACH,CAACX,EAAsBE,GACvB,CAACC,EAAeD,GAOfS,EAAc,CAChBX,GADgB,OACSU,EAAkBZ,GAD3B,CAEhBO,EAAiBC,GAFD,OAE2BE,EAF3B,CAEyCL,GAAkBO,EAAkBZ,EAF7E,CAEuFI,IAvHlG,IAZR,iBAsIJ,IAAIpusB,OAAQ,EAAK07B,MAAMovqB,YAgFvB,GAhFqC,CACvC,eAAC17E,GAAA,EAAD,CAA4CxwgB,MAAOoulB,EAAoBvsrB,EAAE,6BAA8B,CAAE6kO,SAAU0nd,IAAuB,GAAInulB,UAAU,SAAxJ,SAEImulB,EACE,eAACz/nB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,cAAe2qB,MAAO,UAAWub,YAAa,IAAvH,SAEI+2lB,EACI,uCACE,eAAC32Y,EAAA,EAAD,CAAkB7lU,KAAK,QAAQkqG,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,KACrE,gCAAOz1F,EAAE,yBAEX,uCACE,eAAC,KAAD,CAAWk6E,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,KACjD,gCAAOz1F,EAAE,0BAIjB,gCAhBQ,6BAwBhB,eAAC2umB,GAAA,EAAD,CAA0CxwgB,MAAO,GAAjD,SACE,eAAC6tM,EAAA,EAAD,CACEutX,eAAe,MACf/9jB,QACE,eAAC0uJ,EAAA,EAAD,CACEhwK,MAAM,UACN+1B,QAAS3+H,QAAQ,EAAK6sC,MAAMkwqB,sBAI5Bl9lB,UAAW,EAAKhzE,MAAMmwqB,+BACtB7+lB,SAAU,SAAC4/I,EAAIp/H,GAAL,OAAiB,EAAK9xF,MAAMS,SACpCqxF,EAAU,IAAIy8F,KAAyB,IAAIE,SAIjD73L,MAAO/U,EAAE,oCAhBG,2BAmBhB,eAACywkB,EAAA,EAAD,CAEE9if,QAAQ,OACRw4M,UAAU,UACV94O,UAAWm0C,IAAWr0C,EAAQw/nB,oBAAqBx/nB,EAAQy/nB,mBAC3Dz/nB,QAAS,CACPp4C,MAAOo4C,EAAQigoB,0BAEjBt0lB,QAAS,kBAAM,EAAKjC,SAAS,CAAEuzlB,gBAAgB,IAAS,kBAAM,EAAKC,kBACnEhyb,UAAW,eAAC,KAAD,CAAen+K,MAAM,YATlC,SAWGl6E,EAAE,mBAVC,kBAYN,gBAACywkB,EAAA,EAAD,CAEE9if,QAAQ,OACRw4M,UAAU,UACVjrL,UAAW,SAAC7/H,GACV,EAAK26T,aAAe36T,GAEtB,YAAW,EAAK4/B,MAAMmvqB,eAAiB,2BAAwBr6sB,EAC/D,gBAAc,OACds9E,UAAWm0C,IAAWr0C,EAAQw/nB,oBAAqBx/nB,EAAQy/nB,mBAC3Dz/nB,QAAS,CACPp4C,MAAOo4C,EAAQigoB,0BAEjB79lB,MAAO,CAAEkG,YAAa,GACtBtE,SAAUq7lB,GAA6BV,GAAmBE,EAA6Bh0sB,IAAI,UAC3FqgR,UAAW,eAAC,KAAD,CAAUn+K,MAAM,YAC3B4e,QAAS,EAAKy1lB,iBAhBhB,WAmBKxC,GAAmBJ,IAAoB,uBAAMt+nB,UAAWF,EAAQqhoB,sBAAzB,SAAgD,eAAC34Y,EAAA,EAAD,CAAkB7lU,KAAK,YAEhHgwB,EAAE,oBApBC,kBAsBAzgB,QAAQ,EAAK07B,MAAMovqB,aAAeoC,EAA6B,CACrE,eAAC99E,GAAA,EAAD,CAAwDxwgB,MAAOn+F,EAAE,8CAAjE,SACE,sBAAKqtD,UAAWF,EAAQ4/nB,aAAxB,SACE,gBAACt8G,EAAA,EAAD,CACEtqS,UAAU,UACVx4M,QAAS,YACTtgC,UAAWF,EAAQ+/nB,oBACnB//nB,QAAS,CAAEp4C,MAAOo4C,EAAQigoB,0BAC1B79lB,MAAO,CAAEhgC,MAAO,cAAe4sC,WAAY,GAC3ChoH,KAAK,SACLg9G,SAAUq7lB,GAA6BV,GAAmBE,EAA6Bh0sB,IAAI,YAAcm0sB,EAIzGrzlB,QAAS,kBAAM,EAAKk0lB,mBAClB,kBAAM12Y,GAAa,kBAAM,EAAK/F,SAAS,CAAEigF,eAAe,EAAMi+T,SAAS,MAAjEn4Y,OAZV,UAgBIk2Y,GAA6B,uBAAMn/nB,UAAWF,EAAQqhoB,sBAAzB,SAAgD,eAAC34Y,EAAA,EAAD,CAAkB7lU,KAAK,YAErGgwB,EAAE,6CApBO,0CAwBd,IAAIzgB,QAAQ,EAAK07B,MAAMovqB,cAAZ,UAA2B,EAAKlsqB,MAAMqE,aAAtC,iBAA2B,EAAkBoE,cAA7C,aAA2B,EAA0B1R,KAAM,EAAKiJ,MAAMuwqB,eAAiB,EAAKvwqB,MAAMm1U,cAAgB,CAC/H,+BACE,eAACm9O,EAAA,EAAD,CACEtqS,UAAU,UACVx4M,QAAS,YACTtgC,UAAWF,EAAQ+/nB,oBACnB//nB,QAAS,CAAEp4C,MAAOo4C,EAAQigoB,0BAC1B79lB,MAAO,CAAEhgC,MAAO,cAAe4sC,WAAY,EAAGqJ,OAAQ,QACtDrxH,KAAK,SACLg9G,SAAUq7lB,GAA6BV,EACvChzlB,QAAS,WAAO,IAAD,IAGb,EAAK36E,MAAMS,SAAS,IAAI41L,KAA8B,CAAEm6e,qBAAoB,UAAE,EAAKxwqB,MAAMqE,aAAb,iBAAE,EAAkBoE,cAApB,aAAE,EAA0B1R,MACxG,EAAKiJ,MAAMS,SAASv+B,gBAAK,GAAD,OAAIunB,mCAAJ,YAAuC,EAAKuW,MAAMm1U,kBAZ9E,SAeGtzV,EAAE,4BAhBE,yBAmBP,KAhvBa,EAmvBZuwS,SAAW,YAAkH,IAO9HgL,EAPei1E,EAA8G,EAA9GA,cAAei+T,EAA+F,EAA/FA,QAASG,EAAsF,EAAtFA,WAC3C,EAII,EAAKzwqB,MAHPS,EADF,EACEA,SACAkiB,EAFF,EAEEA,cACA+1M,EAHF,EAGEA,sBAIE43c,IACFlzY,EAAY,SAACszY,GACX,IAAMvof,EAAUuof,EAAS72sB,IAAI,MACvBkpO,EAAW2te,EAASh6rB,MAAM,CAAC,SAAU,OACrC+0M,EAAoBilf,EAAS72sB,IAAI,qBACjCmzN,EAAW0jf,EAAS72sB,IAAI,YAC1B82sB,EAAczxrB,iBAAO,CAAEipM,UAASsD,oBAAmBsX,WAAU/V,SAAUj/M,mBAC3Ei/M,EAASxqN,SAAQ,SAACg3P,EAAoBN,GACpC,IAAM86G,EAAYx6G,EAAQ3/P,IAAI,aACxB+2sB,EAAkBrlS,aAAoB/xK,EAAQ3/P,IAAI,oBAClD8zH,EAAW6rI,EAAQ3/P,IAAI,aAAekU,iBACtCwqW,EAAe/+G,EAAQ3/P,IAAI,gBAE3Bg3sB,EAAyBljlB,EAASlsH,QAAO,SAACutI,EAAKliB,EAASiD,GAC5D,GAAIjD,EAAQjzH,IAAI,yBAA2BizH,EAAQjzH,IAAI,gBAAiB,CACtE,IAAMo6W,EAAiBnnP,EAAQjzH,IAAI,kBAC7Bi2H,EAAgBhD,EAAQp2G,MAAM,CAAC,oBAAqB,kBACpDyiP,EAAcT,EAAsBhiP,MAAM,CAAC/R,OAAOmrH,GAAgB,gBAClEghlB,EAAe,OAAG33c,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,MACnCk3sB,EAAgB59sB,QAAQ29sB,GAE1B9hlB,EAAa,OAAGmqI,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,iBACjCo1H,EAAK,OAAGkqI,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,SACzBkvN,EAAO,OAAGowC,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,WAC3BqzH,EAAQ,OAAGisI,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,YAC5B68B,EAAY,OAAGyiO,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,gBAChCk1H,EAAY+hlB,EAkBhB,OAhBIA,IAAoB17qB,6BACtB25F,EAAY,KACZC,EAAa,OAAGmqI,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,2BACjCo1H,EAAK,OAAGkqI,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,mBACzBkvN,EAAU,KACV77F,EAAW,KACXx2F,EAAY,OAAGyiO,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,uBACtBi3sB,IACV/hlB,EAAYjC,EAAQjzH,IAAI,iBACxBm1H,EAAgBlC,EAAQjzH,IAAI,iBAC5BkvN,EAAUj8F,EAAQjzH,IAAI,WACtBo1H,EAAQnC,EAAQjzH,IAAI,SACpBqzH,EAAWJ,EAAQjzH,IAAI,YACvB68B,EAAeo2F,EAAQjzH,IAAI,iBAGtBm1I,EAAI9sI,KAAKgd,iBAAO,CACrBq5V,eACAvE,YACA96G,eACAnpI,eACAD,gBACAmkP,iBACA88V,gBACAhilB,YACAC,gBACA+5F,UACA95F,QACA/B,WACAx2F,kBAGF,OAAOs4G,IAERjhI,mBAEH,OAAI8isB,QAAJ,IAAIA,OAAJ,EAAIA,EAAwBh/sB,QAC1B8+sB,EAAcA,EAAYvqsB,OAAO,YAAY,SAAC64c,GAAD,OAAeA,EAAU/8c,KAAKgd,iBAAO,CAChF80V,YACA48V,kBACAjjlB,SAAUkjlB,YAMhBpwqB,EAAS,IAAIs0K,KAA2B,CAAEi8f,kBAAmBL,KAE7DlwqB,EAASv+B,gBAAK+mB,sCAKdwnrB,IACFrzY,EAAY,SAACszY,GACXjwqB,EAASv+B,gBAAKwzd,aAAgB,OAACg7O,QAAD,IAACA,OAAD,EAACA,EAAU72sB,IAAI,SAC7C4mC,EAAS,IAAI8uL,QAIjBhzH,KAAmB9rE,mBAAgBwgrB,UAAWtupB,KAC9C,EAAKuupB,oBAAoB7+T,EAAej1E,EAAWjqU,QAAQs9sB,KAp1B1C,EAi2BZ5B,kBAAoB,SAACt+K,EAAwB4gL,GAAgC,IAAD,EACjF,EAA6B,EAAKnxqB,MAA1B8kJ,EAAR,EAAQA,MAAOkwL,EAAf,EAAeA,UACf,YAAKs4V,qBAAqB1vqB,eAA1B,SAAmCy2d,IAAnC,OAAuCvvU,QAAvC,IAAuCA,OAAvC,EAAuCA,EAAOjrL,IAAI,MAAO02hB,EAAY,CACnEvjU,SAAU,EAAKlwL,MAAMovqB,YAAX,OACNpnhB,QADM,IACNA,OADM,EACNA,EAAOjrL,IAAI,YADL,OAENm7W,QAFM,IAENA,OAFM,EAENA,EAAWt+V,MAAM,CAAC,SAAU,aAGhCy6rB,cAAeA,GAAkB,gBAz2BlB,EAynCZptV,kBAAoB,kBAAM,EAAKrrQ,SAAS,CAC7CimjB,iBAAkB,EAAK7hoB,MAAM6hoB,mBA1nCZ,EA6nCXyyC,kBAAoB,kBAAM,EAAK14lB,SAAS,CAC9CyzlB,0BAA2B,EAAKrvqB,MAAMqvqB,4BA9nCrB,EAmoCX2C,YAAc,WACpB,MAA4B,EAAK9uqB,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB,EAAKq0E,SAAS,CAAEwzlB,aAAa,IAC7BzrqB,EAASv+B,gBAAKwzd,aAAiBj+d,OAAO4sC,EAAMoE,OAAO1R,QAtoClC,EAyoCXm6qB,oBAzoCW,uCAyoCW,WAAO7+T,EAAej1E,GAAtB,+CAAA3hU,EAAA,yDAAkCg1sB,EAAlC,kCACmD,EAAKzwqB,MAA5EqE,EADoB,EACpBA,MAAOypqB,EADa,EACbA,mBAAoByC,EADP,EACOA,cADP,EACsBp7V,cAAeH,EADrC,EACqCA,UAC5D,EAAKh1U,MAAM6tS,WAFY,qBAGtB,EAAK7tS,MAAMqxqB,YAHW,oBAIxB,EAAKrxqB,MAAMsxqB,YAAYj/T,EAAej1E,EAAWqzY,IAC7C3C,EALoB,oBAMhByD,EAAyB,EAAKvxqB,MAAMwxqB,kBAAkB96rB,MAAM,CAAC,SAAU,UACvEu+V,EAAmC,EAAKj1U,MAAMwxqB,kBAAkB96rB,MAAM,CAAC,SAAU,iCAClF66rB,IAA0Bt8V,EART,uBAUqB,QADnCC,EAAwCvB,KAAcoB,sBAAsB,EAAK/0U,MAAMg1U,UAAWC,UAC/D,IAArCC,OAAA,EAAAA,EAAuCC,iBAAsD,OAArCD,QAAqC,IAArCA,GAAA,UAAAA,EAAuCE,kCAAvC,eAAmEz9W,QAAS,GAVpH,kCAWZ85sB,KAAwBt9sB,OAAO,EAAK6rC,MAAMo9D,IAAK,EAAKp9D,MAAM6c,MAAOq4T,EAAsCC,cAAeD,EAAsCE,4BAXhJ,aAadi3T,EAAgB,EAAKrsoB,MAAMwxqB,kBAAkB96rB,MAAM,CAAC,SAAU,mBAbhD,kCAeZyyZ,KAAwBW,cAAc,EAAK9pY,MAAMo9D,IAAK,EAAKp9D,MAAM6c,MAAOq4T,EAAsCC,cAAe,CACjIk3T,cAAe5nqB,KAAKC,UAAU2nqB,KAhBd,gCAqBfhooB,EAAMoE,OAAO6qD,QAEbi9mB,GACLv7V,EAAUt+V,MAAM,CAAC,SAAU,sBAF/B,EAAKspB,MAAM0xqB,2BAA2Br/T,EAAej1E,EAAWqzY,GAQhE,EAAKzwqB,MAAM2xqB,YAAYt/T,EAAej1E,EAAWqzY,GA9BzB,4CAzoCX,0DA4qCX92R,gBAAkB,WACxB,MAA4B,EAAK35Y,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB5D,EAASv+B,gBAAK,yBAAD,OAA0BmiC,EAAMoE,OAAO1R,GAAvC,aA9qCI,EAqrCXs4qB,cAAgB,WACtB,MAA4B,EAAKrvqB,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB5D,EAASv+B,gBAAK,YAAD,OAAamiC,EAAMoE,OAAO1R,OAvrCtB,EAyrCX84qB,oBAAsB,WAC5B,MAA4B,EAAK7vqB,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB5D,EAASv+B,gBAAK,YAAD,OAAamiC,EAAMoE,OAAO1R,GAA1B,mBA3rCI,EA6rCX24qB,YAAc,WACpB,MAA4B,EAAK1vqB,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB5D,EAASv+B,gBAAK,YAAD,OAAamiC,EAAMoE,OAAO1R,GAA1B,YAAgCrH,sBAAmBosZ,eA/rC/C,EAisCXi0R,WAAa,WACnB,MAA4B,EAAK/vqB,MAAzBS,EAAR,EAAQA,SAAU4D,EAAlB,EAAkBA,MAClB5D,EAASv+B,gBAAK,YAAD,OAAamiC,EAAMoE,OAAO1R,GAA1B,aAnsCI,EAssCX66qB,eAAiB,SAAC30kB,GACxB,MAAkC,EAAKj9F,MAA/B4xqB,EAAR,EAAQA,eAAgBvtqB,EAAxB,EAAwBA,MACxButqB,EAAen6sB,OAAO4sC,EAAMoE,OAAO1R,KACnC,EAAKimG,YAAYC,IAzsCA,EA4sCX40kB,cAAgB,SAAC50kB,GACvB,MAAiC,EAAKj9F,MAA9B6xqB,EAAR,EAAQA,cAAextqB,EAAvB,EAAuBA,MACvBwtqB,EAAcp6sB,OAAO4sC,EAAMoE,OAAO1R,KAClC,EAAKimG,YAAYC,IA/sCA,EAktCX60kB,eAAiB,SAAC70kB,GACxB,MAAkC,EAAKj9F,MAA/B8xqB,EAAR,EAAQA,eAAgBztqB,EAAxB,EAAwBA,MACxBytqB,EAAer6sB,OAAO4sC,EAAMoE,OAAO1R,KACnC,EAAKimG,YAAYC,IArtCA,EAwtCX0xkB,UAAY,SAAC1xkB,EAAYlmG,GAC/B,IAAQ0J,EAAa,EAAKT,MAAlBS,SACR,EAAKi4E,SAAS,CACZwzlB,aAAa,IAEfzrqB,EAASv+B,gBAAK,GAAD,OAAI60B,EAAJ,WACb,EAAKimG,YAAYC,IA9tCA,EAiuCX80kB,eAAiB,SAAC5pf,IAExB4pf,EAD2B,EAAK/xqB,MAAxB+xqB,gBACO5pf,IAnuCE,EAsuCXomf,aAAe,WACrB,EAAK71lB,UAAS,SAAA57E,GAAK,MAAK,CAAEi1S,QAASj1S,EAAMi1S,YAvuCxB,EA0uCX/0M,YAAc,SAACC,GACjB,EAAKhU,SAASvtG,SAASuhH,EAAMn6G,SAGjC,EAAK41F,SAAS,CAAEq5N,QAAQ,KA9uCP,EAivCXq+X,iBAAmB,WACzB,EAAK13lB,UAAS,SAAA57E,GAAK,MAAK,CAAEmvqB,gBAAiBnvqB,EAAMmvqB,oBAlvChC,EAqvCX+F,gBAAkB,SAAC/0kB,GACrB,EAAK46L,cAAgB,EAAKA,aAAan8S,SAASuhH,EAAMn6G,SAG1D,EAAK41F,SAAS,CAAEuzlB,gBAAgB,KAzvCf,EA4vCXiD,eAAiB,SAACjykB,GACxB,EAAKvkB,SAAS,CACZ2zlB,uBAAwBpvkB,EAAMziB,iBA9vCf,EAkwCX20lB,gBAAkB,WACxB,EAAKz2lB,SAAS,CACZ2zlB,uBAAwB,QApwCT,EAwwCXH,YAAc,SAACjvkB,GACrB,IAAQ54F,EAAU,EAAKrE,MAAfqE,MACR,EAII,EAAKrE,MAHPS,EADF,EACEA,SACAqtqB,EAFF,EAEEA,mBACAC,EAHF,EAGEA,cAGF,KAAI9wkB,GAAS,EAAKhU,UAAY,EAAKA,SAASvtG,SAASuhH,EAAMn6G,SAG3D,GAAIuhB,EAAMizD,IAAIj4F,SAAS8rB,oCACrBsV,EAASv+B,gBAAK,SAAD,OAAUmiC,EAAMoE,OAAO6qD,eAGtC,GAAIjvD,EAAMizD,MAAQ9sE,yBAAlB,CAIA,IAAMynrB,EAAkB5tqB,EAAMizD,IAAIjzD,MAAM,2BACxC,GAAI4tqB,EACFxxqB,EAASv+B,gBAAK,GAAD,OAAIypB,4BAAJ,YAAgCsmrB,EAAgB,UAD/D,CAKA,IAAM3D,EAA6BR,GAAsBC,EACzD,GAAI1pqB,EAAMizD,IAAIy4F,SAAS,QAAS,CAC1Bu+gB,GAEF7tqB,EAAS,IAAI81L,MAEf,IAAM12G,EAAO,EAAK7/E,MAAMqE,MAAMizD,IAAIziD,MAAM,KACxCgrE,EAAK19G,MACL,IAAMm1F,EAAcuoB,EAAKtoG,KAAK,KAC9BkpB,EAASv+B,gBAAKo1F,WAlBd72D,EAASv+B,gBAAKuoB,sBAxxCC,EAu1CXynrB,kBAv1CW,uCAu1CS,WAAO3B,EAAe4B,EAA2BC,EAAuBj9V,GAAxE,uBAAA15W,EAAA,+DACO,EAAKukC,MAA9BS,EADkB,EAClBA,SAAU28D,EADQ,EACRA,IAAKvgD,EADG,EACHA,MADG,SAEAgvpB,GAAmBC,cAAc1umB,EAAKvgD,EAAOplD,OAAO84sB,GAAgBp7V,GAFpE,QAG1B,QADMsB,EAFoB,cAG1B,IAAIA,OAAJ,EAAIA,EAAahrJ,qBACf0mf,EAA0B16sB,OAAO84sB,GAAgB,EAAK8B,eACtDD,EAAsB37V,EAAYhrJ,oBAEhCgrJ,GACFh2U,EAAS,IAAIw1L,KAAqB,CAACs6e,cAAa,OAAE95V,QAAF,IAAEA,OAAF,EAAEA,EAAa1/U,MAEjE,EAAK2hF,SAAS,CACZ+9P,cACAy1V,aAAa,EACb/jf,QAAS,KACTmqf,WAAW,IAda,2CAv1CT,4DAEjB,EAAKD,cAAgB,EAAKA,cAAcz6rB,KAAnB,gBAFJ,E,qDAKnB,WAA4B,IAAD,IACzB,EAuBI9hB,KAAKkqC,MAtBPS,EADF,EACEA,SACAqkJ,EAFF,EAEEA,MACAkwL,EAHF,EAGEA,UACAu9V,EAJF,EAIEA,WACA3mG,EALF,EAKEA,mBACAvnkB,EANF,EAMEA,MACAmuqB,EAPF,EAOEA,SACAC,EARF,EAQEA,cACAC,EATF,EASEA,0BACAN,EAVF,EAUEA,sBACAO,EAXF,EAWEA,gBACAC,EAZF,EAYEA,oBACAT,EAbF,EAaEA,0BACAU,EAdF,EAcEA,sCACA/E,EAfF,EAeEA,mBACAgF,EAhBF,EAgBEA,2CACAvC,EAjBF,EAiBEA,cACAp7V,EAlBF,EAkBEA,cACA/gQ,EAnBF,EAmBEA,cACA+7lB,EApBF,EAoBEA,+BACA4C,EArBF,EAqBEA,4BACAxzpB,EAtBF,EAsBEA,SA2CF,IApCA,OAAKA,QAAL,IAAKA,GAAL,UAAKA,EAAkBziB,aAAvB,aAAI,EAA0Bk2qB,aAC5BvyqB,EAASv+B,gBAAKq9C,EAAS0C,WAKzBxhB,EAAS,IAAI0uL,KAAsB,CAAE8jf,aAAcn9sB,KAAKgnC,MAAMovqB,gBAE7C,OAAb93lB,QAAa,IAAbA,OAAA,EAAAA,EAAev6G,IAAI,SAAUpC,OAAM,OAAC4sC,QAAD,IAACA,GAAD,UAACA,EAAOoE,cAAR,aAAC,EAAe1R,KACrD0J,EAAS8/B,aAAWs/L,KAAiBzrJ,IAGnC05lB,QAAqEl8sB,IAA/CkhtB,GACxBryqB,EAAS,IAAIm9B,OAGCv5B,GAASA,EAAMoE,OAAO1R,KAEpC27qB,EAA0B,cAGrBK,GACHtyqB,EAAS,IAAIujB,QAIjB0upB,EAA0B,uBAC1B9mG,IACA+mG,IAEAE,IAEK1C,GACH1vqB,EAAS,IAAIyiB,OAGX7e,GAASA,EAAMoE,OAAO1R,GAAI,CAC5By7qB,EAAS/6sB,OAAO4sC,EAAMoE,OAAO1R,KAC7B,IAAMm1qB,IAAgB7nqB,EAAMoE,OAAOo5oB,MAA8B,SAAtBx9oB,EAAMoE,OAAOo5oB,MACxD4wB,EAAch7sB,OAAO4sC,EAAMoE,OAAO1R,KAClCjhC,KAAK4iH,SAAS,CACZwzlB,cAEA/jf,QAAS9jL,EAAMoE,QAAUpE,EAAMoE,OAAO1R,GACtCu7qB,aAAcjuqB,EAAMoE,SAAUpE,EAAMoE,OAAO1R,MAG3Cw5qB,GACFz6sB,KAAKo8sB,kBAAkBz6sB,OAAO84sB,GAAgB4B,EAA2BC,EAAuBj9V,EAAgB19W,OAAO09W,GAAiB,MAItIA,GACF10U,EAAS,IAAI01L,KAAuB,CAAEg/I,mBAGxC,IAAM7hR,EAAiB77F,OAAO4sC,EAAMoE,OAAO6qD,SACvCA,GAAkC,SAAtBjvD,EAAMoE,OAAOo5oB,MAAmBx9oB,EAAMizD,IAAIjzD,MAAM,oBAAsBA,EAAMizD,IAAIjzD,MAAM,6BACpG5D,EAAS,IAAIkvD,MAAiB2D,IAC9B7yD,EAAS,IAAIovD,KAAe,CAAEyD,YAE9B8+mB,EAAsB9+mB,IAGxB,IAAMs1lB,EAAkB9jgB,GAASA,EAAMjrL,IAAI,cAAgBm7W,EAAUt+V,MAAM,CAAC,SAAU,cAClFkyqB,GACF2pB,EAAW3pB,GAGT9jgB,GAASA,EAAMjrL,IAAI,OACrB+4sB,EAAoBn7sB,OAAOqtL,EAAMjrL,IAAI,OAAQ/D,KAAKu8sB,eAGpD5xqB,EAAS,IAAIwpS,MAGb,IAAQt4L,EAAe77I,KAAKkqC,MAApB2xG,WACJA,GACFlxG,EAAS,IAAIu+B,MAA0B,CAAExiB,OAAQm1F,O,gCAIrD,SAA0Bx9B,EAA0C4yJ,EAA0Bk6C,GAAuB,IAAD,gBAClH,EAmCInrT,KAAKkqC,MAlCPmf,EADF,EACEA,KACA2lI,EAFF,EAEEA,MACAythB,EAHF,EAGEA,WACAluqB,EAJF,EAIEA,MACA5D,EALF,EAKEA,SACAk/R,EANF,EAMEA,yBACA62C,EAPF,EAOEA,oBACA08V,EARF,EAQEA,yBACAx8V,EATF,EASEA,gBACAP,EAVF,EAUEA,sBAEAC,GAZF,EAWEo/N,iBAXF,EAYEp/N,6CACAG,EAbF,EAaEA,oBAGA79G,GAhBF,EAcEy6c,kCAdF,EAeEC,qCAfF,EAgBE16c,uBACAs8G,EAjBF,EAiBEA,UACA4/T,EAlBF,EAkBEA,mBACAy+B,EAnBF,EAmBEA,iBACAT,EApBF,EAoBEA,oBAEA7E,GAtBF,EAqBEoE,0BArBF,EAsBEpE,eAEA73V,GAxBF,EAuBEo9V,iBAvBF,EAwBEp9V,kBACAjL,EAzBF,EAyBEA,QAEAppV,GA3BF,EA0BE8vH,WA1BF,EA2BE9vH,GACAisrB,EA5BF,EA4BEA,mBACAgF,EA7BF,EA6BEA,2CACAjF,EA9BF,EA8BEA,6BAGAvplB,GAjCF,EA+BEivlB,6BA/BF,EAgCEC,0BAhCF,EAiCElvlB,6BACA/kE,EAlCF,EAkCEA,UAOF,OAAKA,QAAL,IAAKA,GAAL,UAAKA,EAAkBziB,aAAvB,aAAI,EAA0Bk2qB,aAC5BvyqB,EAASv+B,gBAAKq9C,EAAS0C,WAGzB,IAAM+pD,EAAY84E,GAASA,EAAMjrL,IAAI,cAAgBm7W,EAAUt+V,MAAM,CAAC,SAAU,eAAiB,GAC3F+8rB,EAAgBt/lB,EAAU2wE,OAAS3wE,EAAU2wE,MAAMjrL,IAAI,cAAgBs6G,EAAU6gQ,UAAUt+V,MAAM,CAAC,SAAU,eAAiB,GAI7Ho2M,EAAU,OAAGhoC,QAAH,IAAGA,OAAH,EAAGA,EAAOjrL,IAAI,cAgB9B,GAfIyqH,GAA+BwoG,IAA8B,gBAAfA,GAA+C,qBAAfA,IAChFrsL,EAASv+B,gBAAKynB,oBAGX+sV,GAAoBw8V,IAA4B/+lB,EAAU++lB,2BAC7DzyqB,EAASv+B,gBAAKynsB,KACdlpqB,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,0CACX65E,SAAU,QACVC,YAAa,CACXC,iBAAkB,WAKnBmrK,EAAUmlc,aAAep2sB,KAAKgnC,MAAMovqB,aAAqC,SAAtB7nqB,EAAMoE,OAAOo5oB,KAAiB,CACpF,IAAMhikB,EAAO/pH,KAAKkqC,MAAMqE,MAAMizD,IAAIziD,MAAM,KACxCgrE,EAAK19G,MACL,IAAMm1F,EAAcuoB,EAAKtoG,KAAK,KAC9BkpB,EAASv+B,gBAAKo1F,IAwBhB,GAdIyvK,EAAUmlc,cAAgBp2sB,KAAKgnC,MAAMovqB,cACvCzrqB,EAAS,IAAI0uL,KAAsB,CAAE8jf,aAAcn9sB,KAAKgnC,MAAMovqB,eAC9DzrqB,EAAS,IAAIwuL,OAGXnqC,IAAkB,OAAT3wE,QAAS,IAATA,GAAA,UAAAA,EAAW2wE,aAAX,eAAkBjrL,IAAI,SAAUirL,EAAMjrL,IAAI,OAASirL,EAAMjrL,IAAI,OAASirL,EAAMjrL,IAAI,QAAUpC,OAAO4sC,EAAMoE,OAAO1R,MACrH+tJ,EAAMjrL,IAAI,WAAmC,SAAtBwqC,EAAMoE,OAAOo5oB,KACtC/rrB,KAAKo2sB,eAELmH,IACAT,EAAoBn7sB,OAAOqtL,EAAMjrL,IAAI,OAAQ/D,KAAKu8sB,kBAIlD,UAAAv8sB,KAAKgnC,MAAM25U,mBAAX,eAAwB1/U,MAAxB,UAA8BjhC,KAAKgnC,MAAM25U,mBAAzC,aAA8B,EAAwBhrJ,mBAAmB,CAAC,IAAD,MACrEwqJ,EAA8BngX,KAAKkqC,MAAM0zqB,yBAAX,UAAoC59sB,KAAKgnC,MAAM25U,mBAA/C,aAAoC,EAAwBhrJ,mBAEhG,IAAI,UAAA31N,KAAKgnC,MAAM25U,mBAAX,eAAwBzpJ,aACvB,UAACl3N,KAAKgnC,aAAN,aAAC,EAAY0vqB,sBACE,OAAf91V,QAAe,IAAfA,OAAA,EAAAA,EAAiB7kX,MAAO,IACG,OAA3BokX,QAA2B,IAA3BA,OAAA,EAAAA,EAA6BpkX,MAAO,KACpC,OAACg8sB,QAAD,IAACA,OAAD,EAACA,EAA8Bh0sB,IAAI,WACtC,CACA,IAAM48W,EAAc3gX,KAAKgnC,MAAM25U,YAE3BA,EAAY/9G,uBAAyB+9G,EAAYzpJ,UACnDypJ,EAAYzpJ,SAASxqN,SAAQ,SAACg3P,GAAa,IAAD,EACxC,UAAAA,EAAQ7rI,gBAAR,SAAkBnrH,SAAQ,SAACsqH,GAAa,IAAD,MAC/BgD,EAAgBnrH,OAAM,OAACmoH,QAAD,IAACA,GAAD,UAACA,EAASoqP,yBAAV,aAAC,EAA4BpnP,eACnDqoP,EAAY,OAAGrrP,QAAH,IAAGA,GAAH,UAAGA,EAASorP,uBAAZ,aAAG,EAA0BC,aAC3CroP,GAAiBqoP,IAAjB,UAAiC1B,EAAY/9G,sBAAsB5oI,UAAnE,aAAiC,EAAkDqpI,eAChFs9G,EAAY/9G,sBAAsB5oI,GAAeqpI,YAAYg/G,eAChE1B,EAAY/9G,sBAAsB5oI,GAAeqpI,YAAYg/G,aAAeA,UAOtF,IAAIw7V,EAAmB19V,EACvB,GAAIQ,EAAY/9G,sBAEdi7c,EADgBz0rB,iBAAOu3V,EAAY/9G,uBACRnyP,MAAM0vW,GACjCx1U,EAAS,IAAIg2K,KAAyC,CACpDnjH,OAAQmjR,EAAYhrJ,kBACpBitC,sBAAuB+9G,EAAY/9G,yBAGvC,IAAMk7c,EAAyBjgW,KAAcqC,gBAAgB,CAC3D72T,OACA82T,4BAA6B09V,EAC7BlnkB,gBAAiBuoO,EAAUn7W,IAAI,WAAa6O,gBAC5CwtW,mBACAjL,UACAkL,wBACAC,4CAA6CA,GAA+CroW,iBAC5FsoW,aAAc,GACdC,gBAAiB,GACjBC,sBACAC,sBACA72C,2BACA82C,cACAC,oBAEEk9V,EAAuB/5sB,IAAI,cAC7B4mC,EAAS8/B,aAAWs/L,KAAiB+zc,IAErCnzqB,EAAS,IAAI8xL,MAA0C,CAAEv8N,KAAM,gBAEjEF,KAAK4iH,SAAS,CAAE8zlB,oBAAoB,KAyBxC,IArBIr4lB,EAAU9vE,MAAMizD,IAAIy4F,SAAS,UAAY1rJ,EAAMizD,IAAIy4F,SAAS,SAAW57E,EAAU9vE,MAAMizD,IAAIj4F,SAAS8rB,sCAAqCkZ,EAAMizD,IAAIj4F,SAAS8rB,uCAC9JsV,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,KACtDm6c,IAIKl/lB,EAAU9vE,MAAMizD,IAAIj4F,SAAS8rB,qCAChCsV,EAASggC,aAAMo/L,OAEb/6E,GAASA,EAAMjrL,IAAI,OAASirL,EAAMjrL,IAAI,QAAUpC,OAAO4sC,EAAMoE,OAAO1R,KACtE67qB,EAAoBn7sB,OAAOqtL,EAAMjrL,IAAI,OAAQ/D,KAAKu8sB,gBAIjDrmmB,IAAcynmB,GAAkBznmB,GACnCummB,EAAWvmmB,GAMT3nE,EAAMizD,IAAIj4F,SAAS8rB,qCAAoC4irB,IAAkBjphB,IAAW3wE,EAAUygkB,qBAAuBA,GAAsBA,IAAuB,UAAAzgkB,EAAUukJ,6BAAV,eAAiC7mQ,SAAjC,OAA0C6mQ,QAA1C,IAA0CA,OAA1C,EAA0CA,EAAuB7mQ,OAAO,CAAC,IAAD,EACtO+htB,EAAyBC,aAAwB,CACrD10pB,OACAu5M,wBACAjsH,gBAAiBuoO,EAAUn7W,IAAI,WAAa6O,gBAC5CwtW,mBACAjL,UACAkL,wBACAC,4CAA6CA,GAA+CroW,iBAC5FsoW,aAAc,GACdC,gBAAiB,GACjBC,sBACAC,sBACAE,kBACA/2C,2BACAmzY,2CAA4ChF,GAAsBgF,IAEpEryqB,EAAS8/B,aAAWs/L,KAAiB+zc,EAAuBp2sB,IAAI,QAAQ,UAAAw3W,EAAUn7W,IAAI,iBAAd,eAAyBA,IAAI,UAAW6O,mBAEhH+3B,EAAS,IAAI8xL,MAA0C,CAAEv8N,KAAM,gBAItD,OAATg/W,QAAS,IAATA,GAAA,UAAAA,EAAWt+V,MAAM,CAAC,SAAU,yBAA5B,eAA+C7kB,QAC3CiE,KAAKgnC,MAAM4vqB,kCADf,OAEGzhW,QAFH,IAEGA,OAFH,EAEGA,EAASp5W,OACT6kX,GACAF,MAEC,OAACxB,QAAD,IAACA,OAAD,EAACA,EAAWt+V,MAAM,CAAC,SAAU,wBAChB,OAATs+V,QAAS,IAATA,OAAA,EAAAA,EAAWt+V,MAAM,CAAC,SAAU,wBAA5B,OAAoDs+V,QAApD,IAAoDA,OAApD,EAAoDA,EAAWt+V,MAAM,CAAC,SAAU,OAAQ,iDAG5F,OAACs+V,QAAD,IAACA,GAAD,UAACA,EAAWt+V,MAAM,CAAC,SAAU,YAAa,iCAA1C,aAAC,EAAoE7kB,QACxD,OAATmjX,QAAS,IAATA,GAAA,UAAAA,EAAWt+V,MAAM,CAAC,SAAU,YAAa,iCAAzC,eAAoE7kB,QAApE,OAA4EmjX,QAA5E,IAA4EA,OAA5E,EAA4EA,EAAWt+V,MAAM,CAAC,SAAU,OAAQ,wDAGxH5gB,KAAK4iH,SAAS,CAAEg0lB,iCAAiC,IACjDjsqB,EAAS,IAAIgvL,OAS0B,MAAvC35N,KAAKkqC,MAAM8zqB,0BACRh+sB,KAAKkqC,MAAM8zqB,2BAA6B3/lB,EAAU2/lB,0BAErDh+sB,KAAKs8T,SAAS,CAAEigF,eAAe,EAAOo+T,YAAY,M,kCAItD,WACE,MAKI36sB,KAAKkqC,MAJP+zqB,EADF,EACEA,cACAC,EAFF,EAEEA,gBACAX,EAHF,EAGEA,iBACA5yqB,EAJF,EAIEA,SAEFA,EAAS,IAAIguL,MACbslf,EAAc,MACdC,GAAiB,GACjBvzqB,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIijO,oBACJv5J,MAAM,KAERhgE,EAAS,IAAIkvD,OAAkB,IAC/BlvD,EAAS6/B,aAAQu/L,OACjBwzc,IACA5yqB,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,KACtDz4N,EAAS,IAAI+pE,MAA8B,CAAEk2G,SAAU3yM,iBAAQ7C,MAAO,KAEtEu1B,EAAS,IAAI01L,KAAuB,CAAEg/I,cAAe,U,oBA+fvD,WAAiB,IAAD,OACd,EAMIr/W,KAAKgnC,MALPovqB,EADF,EACEA,YACA/jf,EAFF,EAEEA,QAEAikf,GAJF,EAGED,yBAHF,EAIEC,UAGF,EAWIt2sB,KAAKkqC,MAVPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACA81G,EAHF,EAGEA,MACA1iI,EAJF,EAIEA,SACAymoB,EALF,EAKEA,cACA7lS,EANF,EAMEA,WACAvqF,EAPF,EAOEA,aACAw7Y,EARF,EAQEA,YACA97Y,EATF,EASEA,aACA2+W,EAVF,EAUEA,yBAEI9lD,EAAU,CACdkjF,UAAWp+sB,KAAK62sB,aAChBzhf,YAAap1N,KAAK82sB,eAClB9+jB,SAAUh4I,KAAK+2sB,YACflzlB,UAAW7jH,KAAKg3sB,aAChBqH,cAAer+sB,KAAKi3sB,iBACpBtqW,YAAa3sW,KAAKk3sB,eAClBoH,MAAOt+sB,KAAKm3sB,SACZ97E,WAAYr7nB,KAAKyoZ,cACjB98X,KAAM3rB,KAAKo3sB,QACX11jB,OAAQ1hJ,KAAKq3sB,UACbn4V,UAAWl/W,KAAKs3sB,cAEZh8E,EAAa,CAAC,CAClBx6lB,MAAO/U,EAAE,uBACTtwB,IAAKy/nB,EAAQkjF,YACZ9ysB,OAAQ8qsB,EAGN,GAHoB,CAAC,CACxBt1qB,MAAO/U,EAAE,yBACTtwB,IAAKy/nB,EAAQ9la,eACN9pN,OAAO8qsB,EAAc,GAAK,CAAC,CAClCt1qB,MAAO/U,EAAE,sBACTtwB,IAAKy/nB,EAAQljf,YACX1sI,OAAO,CAAC,CACVw1B,MAAO/U,EAAE,uBACTtwB,IAAKy/nB,EAAQr3gB,WACZ,CAGD/iF,MAAO/U,EAAE,uBACTtwB,IAAKy/nB,EAAQmjF,eACZ,CACDv9qB,MAAO/U,EAAE,yBACTtwB,IAAKy/nB,EAAQvuR,aACZ,CACD7rU,MAAO/U,EAAE,mBACTtwB,IAAKy/nB,EAAQojF,SAMf,OACE,uCACE,eAACC,GAAA,EAAD,IACA,eAAC,GAAD,IAEA,eAAC,KAAD,CACEjvlB,SAAUk9O,KACV2lT,cACE,eAAC3kT,GAAA,EAAD,CAAe3wC,uBAAuB,IAExC77L,OAAQ,OAEV,eAAC,KAAD,CACE1R,SAAU63M,KACVgrV,cACE,eAAC9hV,GAAA,EAAD,CAAexT,uBAAuB,IAExC77L,OAAQ,OAGV,eAAC,KAAD,CACE1R,SAAUoiiB,KACVS,cAAe,eAAC,KAAD,CAA0BC,SAAUV,SAErD,eAAC,KAAD,CACEpiiB,SAAUkniB,KACVrE,cAAe,eAAC,KAAD,CAA0BC,SAAUoE,KACjD9nU,aAAc,kBAAM/rB,EAAa6zV,MAAgB,QAErD,eAACgoD,GAAD,IACA,uBACEploB,UAAWF,EAAQM,UACnB/9E,IAAKuE,KAAKs3sB,aAFZ,SAKE,eAACz+nB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQM,UAA1C,SACE,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,gBAAC6joB,GAAA,QAAD,CACEvxT,WAAYA,EACZpT,OAAQwhP,EACRhuO,qBAAsBttZ,KAAK2oZ,0BAH7B,UAKE,eAACz1R,EAAA,EAAD,CACEvoB,KAAM3qG,KAAKgnC,MAAMi1S,OACjB9oN,SAAUnzH,KAAKmzH,SACfqB,YAAY,EACZrK,UAAU,eACV/wC,UAAWF,EAAQsxM,OALrB,SAMG,gBAAGnkJ,EAAH,EAAGA,gBAAH,OACC,eAACkhJ,EAAA,EAAD,2BACMlhJ,GADN,IAEQplG,GAAI,iBAFZ,SAIE,eAAC4wF,EAAA,EAAD,UACE,eAACmvM,EAAA,EAAD,CAAmBC,YAAa,EAAK/5L,YAArC,SACE,gBAAChL,EAAA,EAAD,WACE,gBAAC3f,EAAA,EAAD,CAAUsI,QAAS,EAAKi3lB,eAAxB,UACE,eAAC/8S,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,iCAE1BijK,GAA0C,IAAjCrtL,OAAOqtL,EAAMjrL,IAAI,YACvB,eAACkmH,EAAA,EAAD,CACAC,MAAOn+F,EAAE,mCACTo+F,UAAU,SAFV,SAIA,+BACE,gBAAC5N,EAAA,EAAD,CAAUW,UAAU,EAApB,UACE,eAAC6hT,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,oCAI7B,gBAACwwF,EAAA,EAAD,CAAUsI,QAAS,EAAKk3lB,cAAxB,UACA,eAACh9S,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,gCAG7B,gBAACwwF,EAAA,EAAD,CAAUsI,QAAS,EAAKm3lB,eAAxB,UACE,eAACj9S,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,4BAE1BijK,GAASA,EAAMjrL,IAAI,UAChB,eAACkmH,EAAA,EAAD,CACAC,MAAOn+F,EAAE,8BACTo+F,UAAU,SAFV,SAIA,+BACE,gBAAC5N,EAAA,EAAD,CAAUW,UAAU,EAApB,UACE,eAAC6hT,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,6BAI7B,gBAACwwF,EAAA,EAAD,CAAUsI,QAAS,EAAKopQ,kBAAxB,UACA,eAAC8wC,EAAA,EAAD,UACE,eAAC,KAAD,MAEF,eAACC,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,yBAG7B,eAAC,KAAD,CACEgiW,WAAY,EAAK/mV,MAAMqrL,QACvB27J,SAAUh/L,EAAQA,EAAMjrL,IAAI,QAAU,GACtCmlU,aAAc,SAACjoS,GACbk9qB,EAAYl9qB,GACZ,EAAKgtV,qBAEPtjR,KAAM,EAAK3jE,MAAM6hoB,gBACjB56S,kBAAmB,EAAKA,iCAgBtC,eAAC/6P,EAAA,EAAD,CACEvoB,KAAM3qG,KAAKgnC,MAAMmvqB,eACjBhjlB,SAAUnzH,KAAK+hU,aACf53M,UAAU,aAHZ,SAKE,eAAC0H,EAAA,EAAD,CAAO5wF,GAAG,sBAAV,SACE,eAAC+/R,EAAA,EAAD,CAAmBC,YAAajhU,KAAKk8sB,gBAArC,SACE,gBAAChglB,EAAA,EAAD,CAAUx6E,KAAK,OAAO,aAAW,mBAAjC,UACE,eAAC66D,EAAA,EAAD,CACEsI,QAAS,SAACsiB,GACR,EAAKvkB,SAAS,CAAEuzlB,gBAAgB,IAChC9zY,GAAa,kBAAM,EAAK/F,SAAS,CAAEigF,eAAe,MAAlDl6E,CAA2Dl7L,IAH/D,SAME,eAAC63R,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,6BAE3B,eAACwwF,EAAA,EAAD,CACEsI,QAAS,SAACsiB,GACR,EAAKvkB,SAAS,CAAEuzlB,gBAAgB,IAChC9zY,GAAa,kBAAM,EAAK/F,SAAS,CAAEigF,eAAe,MAAlDl6E,CAA4Dl7L,IAHhE,SAME,eAAC63R,EAAA,EAAD,CAAc75S,QAASp5F,EAAE,+BAMlCqqrB,GAAgBpnhB,GAASA,EAAMjrL,IAAI,OAClC,eAACwpZ,EAAA,EAAD,CAASX,QAAS5sZ,KAAKu3sB,QAAvB,SACE,eAACmH,EAAA,EAAD,CACE1vhB,MAAOsnhB,GAAYtnhB,EACnBqjC,QAASA,EACT0ge,cAAeA,EACfxkpB,MAAOvuC,KAAKkqC,MAAMqE,MAClBowqB,mBAAoB3+sB,KAAK64sB,UACzB+F,qBAAsB5+sB,KAAKi8sB,eAC3B/gF,QAASA,EACT5ukB,SAAUA,OAKd8ppB,GACA,eAAC7oT,EAAA,EAAD,CAASX,QAAS5sZ,KAAKu3sB,QAAvB,SACE,eAACsH,EAAA,EAAD,CACExsf,QAASA,EACTipf,kBAAmBt7sB,KAAKs7sB,kBACxBpgF,QAASA,eAQvB,eAAC4jF,GAAA,EAAD,KAKE99B,GACA,eAAC,GAAD,CACEr2kB,KAAM3qG,KAAKgnC,MAAMwvqB,oBACjB7xkB,QAAS,kBAAM,EAAK/hB,SAAS,CAAE4zlB,qBAAqB,KACpDnkf,QAASA,IAGb,eAAC0sf,GAAA,EAAD,CAA2BtjtB,IAAKuE,KAAKw3sB,4B,2BA0L3C,WAAyB,IAAD,EACtB,EAKIx3sB,KAAKkqC,MAJP8kJ,EADF,EACEA,MACA4xL,EAFF,EAEEA,gBACA48V,EAHF,EAGEA,iBACA7yqB,EAJF,EAIEA,SAGIo+oB,EAAY,UAAGy0B,EAAiB58rB,MAAM,CAAC,QAAS,wBAApC,aAAG,EAAmD5X,KAAI,SAAC06P,GAAa,IAAD,EAEjF7rI,EAAQ,OAAG6rI,QAAH,IAAGA,GAAH,UAAGA,EACb3/P,IAAI,mBADM,aAAG,EAEbiF,KAAI,SAACguH,GACL,OAAc,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASp2G,MAAM,CAAC,eAAgB,QACnCo2G,EAAQhmH,eAAc,SAACywQ,GAGlBzqJ,EAAQjzH,IAAI,gBACf09Q,EACGpxQ,SAAS,CAAC,eAAgB,kBAC1BA,SAAS,CAAC,eAAgB,kBAE1BA,SAAS,CAAC,eAAgB,iBAC1BA,SAAS,CAAC,eAAgB,uBAG/B2mH,EAAQtvH,IAAI,eAAgB,SAEpC,OAAOg8P,EAAQh8P,IAAI,WAAYmwH,MAEjC,GAAIkxjB,EAAc,CAChB,IAAMi2B,EAAwBpssB,gBAAMlL,IAAI,WAAYqhrB,GAC9CpyiB,EAAkB+yjB,GAA8C,CACpElnD,MAAOw8D,EACPhwhB,QACA4xL,oBAEFj2U,EAASu/B,aAAO6/L,KAAiB,WAAYpzH,EAAgB5yI,IAAI,kB,uCAj5CrE,SAAuCs/G,EAA0C4tJ,GAC/E,GAAI5tJ,EAAU90E,OAAS80E,EAAU90E,MAAMoE,OAAO1R,IAAMoiF,EAAU90E,MAAMoE,OAAO1R,KAAOgwO,EAAU5+C,QAAS,CACnGhvG,EAAUq5lB,SAAS/6sB,OAAO0hH,EAAU90E,MAAMoE,OAAO1R,KACjD,IAAMm1qB,IAAgB/ylB,EAAU90E,MAAMoE,OAAOo5oB,MAAwC,SAAhC1okB,EAAU90E,MAAMoE,OAAOo5oB,MAE5E,OADA1okB,EAAUs5lB,cAAch7sB,OAAO0hH,EAAU90E,MAAMoE,OAAO1R,KAC/C,CACLm1qB,cACA/jf,QAAShvG,EAAU90E,MAAMoE,QAAU0wE,EAAU90E,MAAMoE,OAAO1R,GAC1Du7qB,aAAcn5lB,EAAU90E,MAAMoE,SAAU0wE,EAAU90E,MAAMoE,OAAO1R,KAInE,OAAIoiF,EAAU90E,QAAU80E,EAAU90E,MAAMoE,OAAOo5oB,OAAS96a,EAAUmlc,aAAe/ylB,EAAU90E,MAAMoE,OAAO1R,GAC/F,CACLm1qB,aAAa,GAKV,S,GArBkB3xqB,iBA+hDvBg4K,GAAc,IAAI1uL,KAEjB,SAAS60V,GAAT,GAkBQ,IAjBbxC,EAiBY,EAjBZA,iBACAC,EAgBY,EAhBZA,sBACAlL,EAeY,EAfZA,QACA0N,EAcY,EAdZA,6BACAvC,EAaY,EAbZA,4CAGAG,GAUY,EAZZF,aAYY,EAXZC,gBAWY,EAVZC,qBAWMw+V,EAAsB5+V,GAAyBA,EAAsBt8W,IAAI,QACzE68W,EAAkBP,GAAyBA,EAAsBtkX,MAAQqtB,iBAAO,CACpF0X,MAAOu/U,EAAsBt8W,IAAI,OACjCrI,MAAO2kX,EAAsBt8W,IAAI,QACjCk9B,GAAIo/U,EAAsBt8W,IAAI,QAGhC,OAAO6O,gBAAmB5B,eAAc,SAACywQ,GACnC2+F,GACF3+F,EAAI/5Q,IAAI,aAAc04W,GAGxB3+F,EAAI/5Q,IAAI,SAAU,IACdytW,EAAQp5W,KACV0lR,EAAI/5Q,IAAI,SAAUytW,EAAQpxW,IAAI,IAE9B09Q,EAAI/5Q,IAAI,SAAU0hB,iBAAO,CACvB6X,GAAI,UACJvlC,MAAO,UACPolC,MAAO,aAIP2/U,GAAuBA,EAAoB1kX,MAC7C0lR,EAAI/5Q,IAAI,eAAgB+4W,GAG1Bh/F,EAAIvxQ,MAAM,CAAC,YAAa,yBAA0BowW,GAElD7+F,EAAIvxQ,MAAM,CAAC,oBAAqB,gBAAiB+usB,GACjDx9b,EAAIvxQ,MAAM,CAAC,oBAAqB,YAAa0wW,GAGzCiC,GACFphG,EAAI/5Q,IAAI,iBAAkBm6Q,aAASnmK,KAAOoyH,IAAIrxB,IAAa3wJ,mBAyMvCmpB,kBACxB00C,eACA1uC,aA19Da,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRvM,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCwzlB,oBAAqB,CACnBl9nB,SATqB,GAUrBwmD,KAAM,QAER42kB,4BAA6B,CAC3Bp9nB,SAbqB,GAcrB+1C,OAAQ,GACRtrB,MAAO,OACP+7B,KAAM,QAERi3kB,oBAAqB,CACnBz9nB,SAnBqB,GAoBrBgmC,YAAatmC,EAAMZ,QAAQ,GAC3ButC,UAAW,OACXma,KAAM,QAER82kB,aAAc,CACZ5wlB,WAAYhtC,EAAMZ,QAAQ,GAC1B4sR,UAAW,UAEbyxW,kBAAmB,CACjBzxW,UAAW,SAGX,KAAM,CACJ1rR,SAAU,SAGd29nB,yBAA0B,CACxBzwkB,YAAa,EACb7U,aAAc,GAEhBqllB,sBAAuB,CAErB19nB,SA1CqB,GA2CrBwmD,KAAM,QAERwoJ,OAAQ,CACNl2J,IAAK,kBAEPs0R,OAAQ,CACNvsU,SAAU,GAEZk+nB,sBAAuB,CACrB/4lB,YAAatmC,EAAMZ,UACnBc,QAAS,QAEX8joB,YAAa,CACXl6lB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCjI,SAAU,SACVqX,IAAK,EACL0M,OAAQ,GAEVm+kB,kBAAmB,CACjB3joB,SA9DqB,GA+DrB0sC,WAAY,GACZ1G,YAAa,GACbqG,UAAW,OACXma,KAAM,OACN1mD,MAAO,OACPm7C,WAAY,cAy5Dd5X,mBAvM0B,WAiM1B,OAhMwB,SAAC73E,EAAYyF,GAAmC,IAAD,IAC/D4lL,EAAU5lL,EAAS8B,MAAMoE,QAAUlG,EAAS8B,MAAMoE,OAAO1R,GACzDm+qB,EAAwBv9c,YAAgBxvC,EAAhBwvC,CAAyB76N,GACjD67U,EAA+B57T,gBAAsCjgB,GACrEq4qB,EAA4B,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAuBpusB,eAAc,SAAAsB,GACxE,IAAMmgW,EAAangW,EAAQvO,IAAI,cAC3BkU,OAAKF,OAAO06V,IAAeA,EAAW12W,KACxCuW,EAAQ5K,IAAI,aAAc+qW,EAAW1uW,IAAI,IAEzCuO,EAAQ5K,IAAI,aAAc,MAG5B,IAAM43sB,EAAYhtsB,EAAQvO,IAAI,iBACxBw7sB,EAAajtsB,EAAQvO,IAAI,kBACzBy7sB,EAAWltsB,EAAQvO,IAAI,gBACzBu7sB,GAAaA,EAAUvjtB,KACzBuW,EAAQ5K,IAAI,gBAAiB43sB,EAAUv7sB,IAAI,IAE3CuO,EAAQ5K,IAAI,gBAAiB,MAE3B63sB,GAAcA,EAAWxjtB,KAC3BuW,EAAQ5K,IAAI,iBAAkB63sB,EAAWx7sB,IAAI,IAE7CuO,EAAQ5K,IAAI,iBAAkB,MAE5B83sB,GAAYA,EAASzjtB,KACvBuW,EAAQ5K,IAAI,eAAgB83sB,EAASz7sB,IAAI,IAEzCuO,EAAQ5K,IAAI,eAAgB,MAG9B,IAAMovN,EAAmBsof,EAAsBr7sB,IAAI,oBAC7C8lrB,EAA8Bu1B,EAAsBr7sB,IAAI,aAAa0J,MAAK,SAAC45G,GAAD,OAAcA,EAAStjH,IAAI,QAAU+yN,KACrHxkN,EAAQ5K,IAAI,YAAZ,YAA6B03sB,EAAsBr7sB,IAAI,eACnD+yN,IAAqB+yd,GACvBv3qB,EAAQ5K,IAAI,mBAAoB,MAGlC4K,EAAQ5K,IAAI,SAAU,IACtB4K,EAAQ5K,IAAI,UAAWg0G,KAAOoyH,IAAIx7N,EAAQvO,IAAI,YAAY+nD,eAC1Dx5C,EAAQ5K,IAAI,aAAcg0G,KAAOoyH,IAAIx7N,EAAQvO,IAAI,eAAe+nD,eAC5D+2T,GACFvwW,EAAQ5K,IAAI,iBAAkBm6Q,aAASnmK,KAAOoyH,IAAIx7N,EAAQvO,IAAI,mBAAqBuO,EAAQvO,IAAI,gBAAgB+nD,gBAGjH,IAAMgunB,EAAqBxnqB,EAAQvO,IAAI,qBAClC6O,MAAI9N,MAAMg1qB,IACbxnqB,EAAQ5K,IAAI,oBAAqBkL,oBAI/BwtW,EAAmBhrO,eAA6BpuG,GAChD6iS,EAA2B9mR,gBAAkC/b,GAC7D05U,EAAsBgyS,aAAiC,sBAAjCA,CAAwD1rnB,GAC9Eq5U,EAA0CqyS,aAAiC,aAAjCA,CAA+C1rnB,GACzFmuU,EAAU/tC,eAAiCpgS,GAE3Cw2D,EAAS/wD,EAAS8B,MAAMoE,QAAUhxC,OAAO8qC,EAAS8B,MAAMoE,OAAO6qD,UAAtD,OAAiE6hnB,QAAjE,IAAiEA,OAAjE,EAAiEA,EAA8Bt7sB,IAAI,sBAC5GslD,EAAOqsF,aAAe,CAAEl4C,UAAjBk4C,CAA2B1uG,GAClC47N,EAAwBP,YAAwC7kK,EAAxC6kK,CAAgDr7N,GAExEy4qB,EAAgCngkB,eAAwCt4G,GACxEy5U,EAAsBlhO,gBAA8Bv4G,GAEpD04iB,EAAmBrgc,eAA6Br4G,GAChD04qB,EAA+Bn/jB,eAAyCv5G,GACxEs5U,GAA0E,OAA5Bo/V,QAA4B,IAA5BA,OAAA,EAAAA,EAA8B12sB,KAAI,SAACs3I,GAAD,OAAWA,EAAM1/H,MAAM,CAAC,eAAgB,YAAW3I,iBAMnI2oW,EAAkB10G,eAAiCllO,GACnD6jpB,EAAuBjoU,GAAwB,CACnDxC,mBACAC,wBACAlL,UACA0N,+BACAvC,8CACAC,aAZwC,GAaxCC,gBAZ2C,GAa3CC,wBAGIk/V,EAAqBtitB,QAAQ+htB,GAAyBC,EAA+Bx0B,EAErF3rU,EAAYj+G,YAAW8I,KAAX9I,CAA4Bj6N,GACxC44qB,GAAwB,OAAT1gW,QAAS,IAATA,GAAA,UAAAA,EAAWt+V,MAAM,CAAC,SAAU,oBAA5B,eAA0C7kB,OAAQ,EAEjEi8sB,EAAqBnwpB,gBAAmC7gB,GACxDg2qB,EAA6Cj+jB,gBAAuC/3G,GAEtFyzqB,EAAgB,KAChBp7V,EAAgB,KACdwgW,EAAkB,IAAIrgE,gBAAgB/ymB,EAASgd,SAASw0I,QAC1D4hhB,EAAgB97sB,IAAI,mBACtB02sB,EAAgBoF,EAAgB97sB,IAAI,kBAElC87sB,EAAgB97sB,IAAI,mBACtBs7W,EAAgBwgW,EAAgB97sB,IAAI,kBAItC,IAAM+7sB,EAAyBh0c,eAAwB9kO,GACjD+4qB,EAAyBh0c,eAA0B/kO,IACpDyzqB,GAAiBqF,IACpBrF,EAAgBqF,IAEbzgW,GAAiB0gW,IACpB1gW,EAAgB0gW,GAGlB,IAAMjhC,EACJzhrB,QAAQgsD,IACRhsD,QAAQgjX,KACPlL,EAAQ5yV,WACTllB,QAAQqjX,IACRrjX,QAAQujX,IACR6+V,KACEzH,GAAuBA,QAAqEl8sB,IAA/CkhtB,MAC7CvwqB,EAAS8B,MAAMizD,IAAIjzD,MAAM,qBAAuB9B,EAAS8B,MAAMizD,IAAIjzD,MAAM,4BAEzEmtqB,EAAoB,KAIxB,OAHI1D,IACF0D,EAAoBz6c,YAAWgJ,KAAXhJ,CAAqCj6N,IAEpD,CACLs3E,cAAeqhmB,EACf7gC,qBACAz1nB,OACAg3T,wBACAq/N,mBACAp/N,8CACA+8V,kCAlEwC,GAmExCC,qCAlE2C,GAmE3Cl9V,mBACAjL,UACAtrC,2BACA62C,sBACAE,kBACAh+G,wBACAs8G,YACA0gW,eACA5H,qBACAgF,6CACAI,yBAA0BlhH,eAAqCl1jB,GAC/Du0qB,YAAax7jB,YAAyB,CAAC,MAA1BA,CAAiC/4G,GAC9CgoJ,MAAO6yE,YAAgBxvC,EAAhBwvC,CAAyB76N,GAChCkmX,WAAYxvM,eAAuB12K,GACnC+rpB,cAAeloe,aAAkBp+K,EAASuiJ,OAASviJ,EAASuiJ,MAAMjrL,IAAI,aAAvD8mN,CAAqE7jL,GACpFg5qB,aAAch+c,cAAyBh7N,GACvCywqB,aAAcp2c,cAA0Br6N,GACxCslB,SAAUlD,gBAAyBpiB,GACnCi5D,MAAOv/C,eAAkB1Z,GACzBsgE,IAAKx9C,eAAgB9iB,GACrB+wS,WAAY72E,cAAgCl6N,GAC5C0wqB,gBAAiBt1c,cAA4Bp7N,GAC7C2wqB,OAAQ90pB,gBAAuB7b,GAC/B6wqB,gBAAiB3sc,eAAiClkO,GAClD60G,WAAYp1F,gBAAuBzf,GACnCqiqB,iBAAkB3ojB,eAA6B15G,GAC/Cu2kB,WAAW,UAAA38jB,eAA2B5Z,UAA3B,eAAmCjjC,IAAI,WAAY,GAE9Dy5sB,iBAAkB/6c,cAA6Bz7N,GAC/C8wqB,gBAAiBv1c,cAAuCv7N,GACxD+wqB,6BAA8Bv1c,cAA2Cx7N,GACzE67R,oBAAqBp/Q,gBAAoCzc,GAGzDmxqB,iBAAkBn0c,cAA6Bh9N,GAI/Cg6oB,yBAA0B58nB,gBAAyCpd,GACnE67U,+BACAo1V,cAAev1c,cAA0B17N,GACzCwnF,4BAA6B7mE,eAAwC3gB,GACrEkxqB,uBAAwBv0c,cAAmC38N,GAC3D+f,MAAOD,eAAkB9f,GACzB00qB,oBACAjB,gBACAp7V,gBACAo+V,6BAA8B59jB,cAAwCq/N,EAAUt+V,MAAM,CAAC,SAAU,YAAa,2BAA6B3I,iBAA7G4nI,CAAqH74G,GACnJ02qB,0BAA2BznI,eAAsCjviB,GACjE42qB,yBAA0B,SAACjH,GAAD,OAA0Bt0c,YAAwCs0c,EAAxCt0c,CAAsDr7N,IAC1GqzqB,+BAAgC15jB,gBAA2C35G,GAC3Ei2qB,4BAA6B39jB,eAAwCt4G,GACrEg3qB,yBAA0B/xc,eAAqCjlO,GAC/DozqB,qBAAsBpuc,eAA4BhlO,QAvW7B,SAAC2D,GAC1B,MAAO,CACLA,WACAixqB,2BAA4B,SAACr/T,EAAwBj1E,EAA6CqzY,GAChGhwqB,EAAS,IAAIw2K,KAAiC,CAAEo7L,gBAAej1E,YAAWqzY,iBAE5EkB,YAAa,SAACt/T,EAAwBj1E,EAA6CqzY,GACjFhwqB,EAAS,IAAIo4K,KAAkB,CAAEw5L,gBAAej1E,YAAWqzY,iBAE7Da,YAAa,SAACj/T,EAAwBj1E,EAA6CqzY,GACjFhwqB,EAAS,IAAIk5K,MAAkB,CAAE04L,gBAAej1E,YAAWqzY,iBAE7D+B,SAAU,SAACrqf,GACT1nL,EAAS,IAAI03K,KAAgB,CAAEgQ,UAASopE,cAAc,EAAMwkb,eAAe,MAE7E9B,YAAa,SAAC9rf,GACZ1nL,EAAS,IAAI04K,KAAkB,CAAEgP,UAASo0F,WAAY9xR,uBAExDqnrB,eAAgB,SAAC3pf,GACf1nL,EAAS,IAAIw4K,KAAqBkP,KAEpCypf,eAAgB,SAACzpf,GACf1nL,EAAS,IAAI44K,KAAqB8O,KAEpC0pf,cAAe,SAAC1pf,GACd1nL,EAAS,IAAI84K,KAAoB4O,KAEnC4rf,cAAe,SAACjvhB,GACdrkJ,EAAS,IAAIs4K,KAAyBj0B,KAExC2thB,cAAe,SAACtqf,GACd1nL,EAAS,IAAIk6K,KAAoB,CAAEwN,cAErC6rf,gBAAiB,SAAChomB,GAChBvrE,EAAS,IAAImoE,MAAoB,CAAEoD,gBAErC+lmB,eAAgB,SAAC5pf,GACf1nL,EAASv+B,gBAAK,UAAD,OAAWimN,KACxB1nL,EAAS,IAAIk6K,KAAoB,CAAEwN,SAAUA,MAE/Coqf,WAAY,SAACx7qB,GACX0J,EAAS,IAAIupE,KAAqC,CAAEgC,UAAWj1E,MAEjE60kB,mBAAoB,WAClBnrkB,EAAS,IAAIu1B,QAEfyiQ,aAAc,SAACyvV,EAAkBznjB,GAC/BhgE,EAAS,IAAI0J,KAA6B,CACxCpT,GAAImxnB,EACJznjB,WAGJitmB,oBAAqB,WACnBjtqB,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIi/qB,yBACJv1mB,MAAM,MAGViymB,0BAA2B,SAAC18sB,GAC1ByqC,EAAS,IAAIw1qB,KAAgC,CAAEjgtB,WAEjDoib,eAAgB,SAACjwN,GACf1nL,EAAS,IAAI8kL,KAAwB,CAAE9kL,WAAU0nL,cAEnDiqf,sBAAuB,SAAC9+mB,GACtB7yD,EAAS,IAAIk2K,KAA6B,CAAErjH,aAE9Cq/mB,gBAAiB,WACflyqB,EAAS,IAAIy1qB,OAEf7C,iBAAkB,WAChB5yqB,EAAS,IAAI6nD,OACb7nD,EAAS,IAAIkvD,OAAkB,IAC/BlvD,EAAS,IAAI47K,OAEfu2f,oBAAqB,SAACzqf,EAAiBztL,GACrC+F,EAAS,IAAIg1K,KAA0B,CACrC0S,UACAi1G,UAAW,SAAC+4Y,GACV11qB,EAAS,IAAIg7K,KAAmC,CAC9C0M,UACAmwb,MAAOp5nB,iBAAOza,KAAK6tC,MAAM6jqB,EAAkBt8sB,IAAI,cAE7C6gC,GACFA,SAMRy3qB,0BAA2B,SAAChqf,EAAiBztL,GAC3C+F,EAAS,IAAIg1K,KAA0B,CACrC0S,UACAi1G,UAAW,SAAC+4Y,GACV11qB,EAAS,IAAIk7K,KAAyC,CACpDwM,UACAmwb,MAAOp5nB,iBAAOza,KAAK6tC,MAAM6jqB,EAAkBt8sB,IAAI,cAE7C6gC,GACFA,SAKRm4qB,sCAAuC,WACrCpyqB,EAAS,IAAIijB,YAyQjBzO,YAAgB,gBAChBm4O,aAAmC,CAAEt2B,SAAU+I,OAC/Cw9D,oBAAU,CACR9pN,KAAMssJ,KACN09D,oBAAoB,EACpB29S,yBAAyB,EACzBs0C,0BAA0B,EAC1BpzR,gBAAiB,KAEnBn3Q,KAbwBl6C,CAcxBihoB,K,sJChsEa,MAA0B,sC,uGCArCx+nB,EAAgD,SAAUzoE,EAAID,EAAM2oE,GACpE,GAAIA,GAA6B,IAArBj0E,UAAU7B,OAAc,IAAK,IAA4Bu1E,EAAxBp0E,EAAI,EAAGqlB,EAAIrZ,EAAKnN,OAAYmB,EAAIqlB,EAAGrlB,KACxEo0E,GAAQp0E,KAAKgM,IACRooE,IAAIA,EAAK31E,MAAMtD,UAAU2R,MAAM9O,KAAKgO,EAAM,EAAGhM,IAClDo0E,EAAGp0E,GAAKgM,EAAKhM,IAGrB,OAAOiM,EAAG3D,OAAO8rE,GAAM31E,MAAMtD,UAAU2R,MAAM9O,KAAKgO,KAY3CsxsB,EAAiB,CAAC,YAAa,aAAc,WA0B7CC,EAAc,CACrB,UACA,gBACA,gBACA,cACA,eACA,eACA,cACA,aACA,cACA,aAaOC,EAAc,CAAC,gBAAiB,aAAc,cAAe,gBAuB7DC,EAAY/ooB,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAcA,EAAc,GAjFtP,CAAC,SAAU,QAAS,YAiFuP,GAhFzQ,CAC3B,mBACA,qBACA,wBA6E8T,GA3EzS,CAAC,UAAW,WA2EiT,GA1E9T,CAAC,UAAW,YAAa,UAAW,aA0E6S,GAzEhV,CAAC,SAAU,YAyEyV,GAAO4ooB,GAAgB,GAvE3X,CACrB,UACA,YACA,mBACA,mBACA,YACA,cACA,UACA,UACA,eACA,mBACA,cACA,UACA,SACA,YACA,aACA,eACA,WACA,YACA,YACA,YACA,eACA,iBACA,cAgDoa,GAAOC,GAAa,GAlCpa,CACpB,SACA,YACA,cACA,aACA,cACA,aACA,cACA,WA0B2c,GAxBlb,CAAC,aAwByc,GAAOC,GAAa,GAtBhe,CACvB,gBACA,gBACA,cACA,kBACA,sBACA,uBACA,iBACA,iBACA,gBACA,iBAY6gB,GAV3f,CAAC,aAU2gB,GATzgB,CAAC,YAS4hB,GARzhB,CACzB,mBACA,iBACA,yBAK0kB,GAHhjB,CAAC,oBAGwkB,GAD7kB,CAAC,aACimB,GAFnmB,CAAC,aAEsnB,GAOjoB,SAASE,EAAex2qB,EAAOy2qB,GAC1C,IAAIC,EAAa,GAejB,OAdAH,EAAU/zsB,SAAQ,SAAUouR,GACxB,IAAI+lb,EAAe32qB,EAAM4wP,GACpB+lb,IAIDD,EAAW9lb,GADX6lb,EACyB,SAAUx5kB,GAC/B,OAAO05kB,EAAa15kB,EAAOw5kB,EAAQ7lb,KAIf+lb,MAGzBD,EClHI,SAASE,EAAuB9+jB,GAC3C,IAAIs8Z,GAAc,EAMlB,MAAO,CACHt8Z,QANiB,IAAI/iG,SAAQ,SAAUC,EAASi3B,GAChD6rE,EACKzrE,MAAK,SAAU76E,GAAS,OAAQ4ijB,GAAep/f,EAAQxjD,MACvDirM,OAAM,SAAUx4L,GAAS,OAAQmwiB,GAAenoe,EAAOhoE,SAI5D0d,OAAQ,WACJyyhB,GAAc,ICVX,SAASyiK,IACtB,OAAOt/sB,MAAMtD,UAAU2R,MAAM9O,KAAK0C,WAAWiI,QAAO,SAAU8yQ,EAAW/zP,GACvE,OAAO+zP,EAAUnzQ,OAAOof,KACvB,IAAInf,QAAO,SAAUmf,GACtB,MAAsB,kBAARA,KACbjJ,KAAK,K,sBCJkBijB,0BAAc,MCC3B,SAASs8qB,EAAQ36qB,GAC9B,IAAIC,EAAWD,EAAKC,SAChBpmC,EAAOmmC,EAAKnmC,KAChB,OAAoBukC,IAAMwB,cAAc,MAAO,CAC7CmzC,UAAW,0CAA0C9tE,OAAOpL,IAC3DomC,GAEL06qB,EAAQlic,UAAY,CAClBx4O,SAAUy4O,IAAU33Q,KACpBlH,KAAM6+Q,IAAUE,MAAM,CAAC,QAAS,UAAW,YAAY45D,YCOzD,IAEIooY,EAA2B,WAC7B,SAASA,IACP7zrB,YAAgBptB,KAAMihtB,GAEtBjhtB,KAAKkhtB,mBAAqB,KAC1BlhtB,KAAKmhtB,gBAAkB,KAmIzB,OAhIA1pqB,YAAawpqB,EAAa,CAAC,CACzB38sB,IAAK,cACL5I,MAAO,SAAqB0ltB,GAC1BphtB,KAAKohtB,YAAcA,IAEpB,CACD98sB,IAAK,YACL5I,MAAO,SAAmB2ltB,GACxBrhtB,KAAKqhtB,UAAYA,IAElB,CACD/8sB,IAAK,qBACL5I,MAAO,SAA4ByltB,GACjCnhtB,KAAKmhtB,gBAAkBA,IAExB,CACD78sB,IAAK,wBACL5I,MAAO,SAA+BwltB,GACpClhtB,KAAKkhtB,mBAAqBA,IAE3B,CACD58sB,IAAK,aACL5I,MAAO,cACN,CACD4I,IAAK,aACLP,IAAK,WACH,OAAO/D,KAAKohtB,YAAcphtB,KAAKohtB,YAAY15L,SAAW,IAEvD,CACDpjhB,IAAK,OACLP,IAAK,WACH,OAAO/D,KAAKqhtB,UAAUC,mBAExB55sB,IAAK,SAAahM,GAChBsE,KAAKqhtB,UAAUC,kBAAoB5ltB,IAEpC,CACD4I,IAAK,WACLP,IAAK,WACH,OAAO,GAET2D,IAAK,SAAahM,MACjB,CACD4I,IAAK,kBACL5I,MAAO,SAAyBwrgB,GAC9B,IAAIvvd,EAAQ33C,KAEZ,IAAIi/C,SAAQ,SAAUC,GACA,kBAATgod,EACTvvd,EAAMypqB,YAAYp5L,eAAe9gB,GAAM3wb,KAAKr3B,GACnCz9C,MAAMC,QAAQwlgB,GACvBhod,EAAQgod,GAERA,EAAK3wb,KAAKr3B,MAEXq3B,MAAK,SAAUgroB,GAChBtzsB,YAAUxM,MAAMC,QAAQ6/sB,GAAe,IAAKj2sB,OAAOi2sB,EAAc,wCACjE,IAAIC,EAAUD,EAAa,GAC3B,IAAItiqB,SAAQ,SAAUC,GAChBsiqB,aAAmBpjtB,OACrBu5C,EAAMypqB,YAAYt5L,aAAa05L,GAASjroB,MAAK,SAAUizc,GACrDtqe,EAAQsqe,MADV,OAEY,WACVv7gB,aAAU,EAAO,IAAK3C,OAAOk2sB,EAAS,wCAEZ,kBAAZA,EAChBtiqB,EAAQsiqB,GAERvzsB,aAAU,EAAO,IAAK3C,OAAOk2sB,EAAS,+CAEvCjroB,MAAK,SAAUizc,GAChB,IAAI5B,EAAa4B,EAAY,EAC7Bv7gB,YAAU25gB,GAAc,GAAKA,GAAcjwe,EAAM8pqB,WAAY,IAAKn2sB,OAAOs8gB,EAAY,kCAErFjwe,EAAM0pqB,UAAUK,mBAAmB,CACjCx6M,KAAMA,EACNsiB,UAAWA,EACX5B,WAAYA,YAKnB,CACDtjhB,IAAK,aACL5I,MAAO,SAAoBwrgB,GACzBlngB,KAAKqojB,gBAAgBnhD,KAEtB,CACD5igB,IAAK,WACL5I,MAAO,cACN,CACD4I,IAAK,oBACL5I,MAAO,SAA2BuuG,EAAMzI,EAAKkmd,GAC3Cz9c,EAAKmjB,KAAO5rB,EACZyI,EAAK+kO,IAAMhvU,KAAKmhtB,iBAxGC,+BAyGjBl3mB,EAAKj9E,OAAS06hB,EAAY,SAAW1njB,KAAKkhtB,oBAAsB,KAEjE,CACD58sB,IAAK,qBACL5I,MAAO,WACL,MAAO,MAER,CACD4I,IAAK,eACL5I,MAAO,WACL,MAAO,MAER,CACD4I,IAAK,UACL5I,MAAO,cACN,CACD4I,IAAK,qBACL5I,MAAO,cACN,CACD4I,IAAK,eACL5I,MAAO,cACN,CACD4I,IAAK,gBACL5I,MAAO,WACL,OAAO,IAER,CACD4I,IAAK,eACL5I,MAAO,WACL,OAAO,MAIJultB,EAxIsB,GCfhBpuO,EAJS,CACtBkU,cAAe,EACfC,mBAAoB,G,SCIX7pE,EAA8B,qBAAXzuZ,OAKnBizrB,EAAoBxkS,GAA0C,UAA7BzuZ,OAAO+6B,SAAS8jb,SAOrD,SAASzkE,EAAUrrO,GACxB,MAA2B,qBAAbA,EAQT,SAASmkhB,EAAWnkhB,GACzB,OAAOqrO,EAAUrrO,IAA0B,OAAbA,EAiBzB,SAAS3tB,EAAc2tB,GAC5B,OAAOA,aAAoB1P,YAQtB,SAAS8zhB,EAAOpkhB,GAErB,OADAxvL,YAAUkva,EAAW,oDACd1/O,aAAoBw3S,KAQtB,SAAS6sO,EAAOrkhB,GAErB,OADAxvL,YAAUkva,EAAW,oDACd1/O,aAAoBskhB,KAQtB,SAASC,EAAUx5rB,GACxB,MAtC2B,kBAsCXA,GAAQ,SAASuyB,KAAKvyB,GAEjC,SAASy5rB,EAAoBC,GAClCj0sB,YAAU+zsB,EAAUE,GAAU,qBAE9B,IAAIC,EAAiBD,EAAQnjqB,MAAM,KAC/BqjqB,EAAkBjvqB,YAAegvqB,EAAgB,GACjDE,EAAgBD,EAAgB,GAChCE,EAAaF,EAAgB,GAIjC,OAAmC,IAFrBC,EAActjqB,MAAM,KAEtBv+B,QAAQ,UACX6yL,KAAKivgB,GAGPnkhB,SAASmkhB,GAKlB,IAAIC,EAA8B,sGAC3B,SAASC,IACdlid,aAASqhd,EAAmB,uFAAuFr2sB,OAAOi3sB,IAKrH,SAASE,EAAkBC,GAC5BA,GAAeA,EAAY72rB,QAAQ62rB,EAAY72rB,SAE9C,SAAS82rB,EAAiB/2c,EAAMigD,GAyBrC,OAxBAztT,OAAOyJ,eAAe+jQ,EAAM,QAAS,CACnC7nQ,IAAK,WACH,OAAO/D,KAAKs/L,KAAK,GAAKusH,GAExB9jT,cAAc,IAEhB3J,OAAOyJ,eAAe+jQ,EAAM,SAAU,CACpC7nQ,IAAK,WACH,OAAO/D,KAAKs/L,KAAK,GAAKusH,GAExB9jT,cAAc,IAEhB3J,OAAOyJ,eAAe+jQ,EAAM,gBAAiB,CAC3C7nQ,IAAK,WACH,OAAO/D,KAAKs/L,KAAK,IAEnBv3L,cAAc,IAEhB3J,OAAOyJ,eAAe+jQ,EAAM,iBAAkB,CAC5C7nQ,IAAK,WACH,OAAO/D,KAAKs/L,KAAK,IAEnBv3L,cAAc,IAET6jQ,EAEF,SAASg3c,GAAkBz0sB,GAChC,MAAsB,gCAAfA,EAAMK,KAER,SAASq0sB,GAAapvf,GAC3B,OAAO,IAAIx0K,SAAQ,SAAUC,EAASi3B,GACpC,IAAIssb,EAAS,IAAI8rL,WA0BjB,OAxBA9rL,EAAOn6B,OAAS,WACd,OAAOppb,EAAQ,IAAIs2G,WAAWitW,EAAO7uf,UAGvC6uf,EAAOl6B,QAAU,SAAUphW,GACzB,OAAQA,EAAMn6G,OAAO7e,MAAM65F,MACzB,KAAKm/B,EAAMn6G,OAAO7e,MAAM20sB,cACtB,OAAO3soB,EAAO,IAAIvuE,MAAM,gDAE1B,KAAKu/H,EAAMn6G,OAAO7e,MAAM40sB,iBACtB,OAAO5soB,EAAO,IAAIvuE,MAAM,mDAE1B,KAAKu/H,EAAMn6G,OAAO7e,MAAM60sB,aACtB,OAAO7soB,EAAO,IAAIvuE,MAAM,gDAE1B,KAAKu/H,EAAMn6G,OAAO7e,MAAM80sB,UACtB,OAAO9soB,EAAO,IAAIvuE,MAAM,yCAE1B,QACE,OAAOuuE,EAAO,IAAIvuE,MAAM,kCAI9B66f,EAAOisL,kBAAkBj7d,GAClB,Q,cC/JAmtf,GAAa,WACtB,IAAIhtsB,EAAS,GAIb,MAHA,GAAGtI,OAAOq0F,aAAmB4gnB,GAAc5gnB,aAAmB6gnB,GAAc7gnB,aAAmB2gnB,IAAiB5zsB,SAAQ,SAAUouR,GAChIlnR,EAAOknR,GAAa/b,IAAU70P,QAEzBtW,EALe,GAOpBk+jB,GAAY,CAAC/yT,IAAUx4Q,OAAQw4Q,IAAUw/Y,WAAWxwe,aAAcgxF,IAAUjkJ,MAAM,CACpF9/E,KAAM+jO,IAAUC,UAAU,CAACD,IAAU56Q,OAAQ46Q,IAAUx4Q,SACvD4+gB,YAAapmQ,IAAU56Q,OACvBsxL,MAAOspF,IAAU56Q,OACjBq9F,IAAKu9K,IAAUx4Q,OACf6+gB,gBAAiBrmQ,IAAU99H,QAGT,qBAAT8gkB,MACTjwI,GAAU1lkB,KAAK2yQ,IAAUw/Y,WAAWwjD,OAGlB,qBAAT9sO,MACT68F,GAAU1lkB,KAAK2yQ,IAAUw/Y,WAAWtpL,OAG/B,IAAIiuO,GAAcnkc,IAAUC,UAAU,CAACD,IAAUx4Q,OAAQw4Q,IAAU4/Y,QAAQ5/Y,IAAUx4Q,UACjFu7sB,GAAS/ic,IAAUC,UAAU8yT,IAC7BqxI,GAAgBpkc,IAAUw/Y,WAAW0iD,GAErCmC,IADerkc,IAAUE,MAAM,CAAC,QAAS,SAAU,UAAW,SACrDF,IAAUjkJ,MAAM,CAClC2qZ,WAAY1mQ,IAAUjkJ,MAAM,CAC1Bo6Z,WAAYn2Q,IAAU56Q,OAAO00U,aAC5BA,WACHkxM,WAAYhrQ,IAAUjkJ,MAAM,CAC1Bu/Z,MAAOt7Q,IAAU56Q,OAAO00U,aACvBA,WACH8xM,eAAgB5rQ,IAAU70P,KAAK2uT,WAC/BwqY,eAAgBtkc,IAAU70P,KAAK2uT,WAC/BziC,YAAar3B,IAAU70P,KAAK2uT,WAC5Bz2M,OAAQ28I,IAAU70P,KAAK2uT,cA8DdyqY,GAAQvkc,IAAUC,UAAU,CAACD,IAAUjkJ,MAAM,CACtDktZ,eAAgBjpQ,IAAU70P,KAAK2uT,WAC/B4vM,WAAY1pQ,IAAU70P,KAAK2uT,WAC3BgvM,QAAS9oQ,IAAU70P,KAAK2uT,WACxB6uM,SAAU3oQ,IAAUvkG,OAAOq+J,aACzB95D,IAAU99H,OACHsikB,GAAQxkc,IAAUC,UAAU,CAACD,IAAU70P,KAAM60P,IAAUjkJ,MAAM,CACtEhzF,QAASi3O,IAAU8gP,QAEV2jN,GAAezkc,IAAUE,MAAM,CAAC,SAAU,OAAQ,QAClDwkc,GAAW1kc,IAAUE,MAAM,CAAC,EAAG,GAAI,IAAK,MCzG/CotH,GAAY,CAAC,OAEjB,SAAS3/W,GAAQvoB,EAAQwoB,GAAkB,IAAI7qB,EAAO1D,OAAO0D,KAAKqC,GAAS,GAAI/F,OAAOkgB,sBAAuB,CAAE,IAAIsO,EAAUxuB,OAAOkgB,sBAAsBna,GAASwoB,IAAmBC,EAAUA,EAAQrhB,QAAO,SAAUshB,GAAO,OAAOzuB,OAAO0uB,yBAAyB3oB,EAAQ0oB,GAAK/kB,eAAiBhG,EAAKsK,KAAKnE,MAAMnG,EAAM8qB,GAAY,OAAO9qB,EAE9U,SAASk2C,GAAchrB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAAS,MAAQvpB,UAAUV,GAAKU,UAAUV,GAAK,GAAIA,EAAI,EAAI0pB,GAAQtuB,OAAO6uB,IAAS,GAAIvgB,SAAQ,SAAUpI,GAAO0wE,YAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAAYlG,OAAO8uB,0BAA4B9uB,OAAO+uB,iBAAiBH,EAAQ5uB,OAAO8uB,0BAA0BD,IAAWP,GAAQtuB,OAAO6uB,IAASvgB,SAAQ,SAAUpI,GAAOlG,OAAOyJ,eAAemlB,EAAQ1oB,EAAKlG,OAAO0uB,yBAAyBG,EAAQ3oB,OAAa,OAAO0oB,EAEjf,SAASgrD,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IAqB5Z,IAAIqtgB,GAAwByiM,wBAExBC,GAAwB,SAAUt/E,GACpCxsjB,YAAU8roB,EAAUt/E,GAEpB,IAAIh5W,EAASrzM,GAAa2roB,GAE1B,SAASA,IACP,IAAIhsqB,EAEJvqB,YAAgBptB,KAAM2jtB,GAEtB,IAAK,IAAI54rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GA+NzB,OA5NA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtDisqB,IAAK,OAGP5uoB,YAAgBqtC,YAAuB1qE,GAAQ,SAAU,CACvD+pqB,mBAAoB,SAA4Br7qB,GAC9C,IAAI6ge,EAAO7ge,EAAK6ge,KACZsiB,EAAYnjf,EAAKmjf,UACjB5B,EAAavhf,EAAKuhf,WAElBi8L,EAAclsqB,EAAMzN,MAAM25qB,YAE9B,GAAIA,EACFA,EAAY,CACV38M,KAAMA,EACNsiB,UAAWA,EACX5B,WAAYA,QAJhB,CAUA,IAAIh8Q,EAAOj0N,EAAMmsqB,MAAMt6L,GAEnB59Q,EAEFA,EAAKspJ,iBAIP50J,aAAQ,EAAO,oCAAoCh1P,OAAOs8gB,EAAY,+PAI1E5yc,YAAgBqtC,YAAuB1qE,GAAQ,cAAe,IAAIspqB,GAElEjsoB,YAAgBqtC,YAAuB1qE,GAAQ,gBAAgB,WAE7D8qqB,EAAkB9qqB,EAAM+qqB,aAEpB/qqB,EAAMuxe,aAAavxe,EAAMuxe,YAAY1+c,UACzC,IAAIu5oB,EAAcC,EAAgBrsqB,EAAMssqB,sBACxCtsqB,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUtpD,GAGjC,GAFA0qB,EAAMusqB,kBAEDj3rB,EAAL,CAIA0qB,EAAMirE,UAAS,SAAUquJ,GACvB,OAAKA,EAAU2yc,IAIR,CACLA,IAAK,MAJE,QAQX,IAAIrhmB,EAAc5qE,EAAMzN,MACpB8B,EAAUu2E,EAAYv2E,QACtBm4qB,EAAiB5hmB,EAAY4hmB,eAC7B79L,EAAa/ja,EAAY+ja,WAC7B3ue,EAAMuxe,YAAcw6L,cAAkB1rqB,GAAcA,GAAc,GAAI/qB,GAAS+e,IAC/E2L,EAAMuxe,YAAY5C,WAAaA,EAE3B69L,IACFxsqB,EAAMuxe,YAAY3C,WAAa49L,GAGjC,IAAIJ,EAAcC,EAAgBrsqB,EAAMuxe,YAAYlnY,SACpDrqG,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUqtoB,GACjCjsqB,EAAMirE,UAAS,SAAUquJ,GACvB,OAAIA,EAAU2yc,KAAO3yc,EAAU2yc,IAAIQ,cAAgBR,EAAIQ,YAC9C,KAGF,CACLR,IAAKA,KAENjsqB,EAAM0sqB,kBATX,OAUY,SAAUl2sB,GACpBwpC,EAAM2sqB,YAAYn2sB,UAzCtB,OA2CY,SAAUA,GACpBwpC,EAAM4sqB,cAAcp2sB,SAIxB6mE,YAAgBqtC,YAAuB1qE,GAAQ,oBAAoB,WACjE,IAAI6rE,EAAe7rE,EAAMzN,MACrBi3qB,EAAkB39lB,EAAa29lB,gBAC/BD,EAAqB19lB,EAAa09lB,mBAEtCvpqB,EAAMmtgB,YAAY0/J,UAAU7sqB,EAAM8sqB,QAElC9sqB,EAAMmtgB,YAAY4/J,mBAAmBvD,GAErCxpqB,EAAMmtgB,YAAY6/J,sBAAsBzD,MAG1ClsoB,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,WAChE,IAAIusqB,EAAkBvsqB,EAAMzN,MAAMg6qB,gBAC9BA,GAAiBA,OAGvBlvoB,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,SAAUxpC,GACxEmyP,YAAQnyP,GACR,IAAIo2sB,EAAgB5sqB,EAAMzN,MAAMq6qB,cAC5BA,GAAeA,EAAcp2sB,MAGnC6mE,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IAAI0sqB,EAAgB1sqB,EAAMzN,MAAMm6qB,cAC5BT,EAAMjsqB,EAAM3Q,MAAM48qB,IAClBS,GAAeA,EAAcT,GACjCjsqB,EAAMmsqB,MAAQ,IAAIritB,MAAMmitB,EAAIl8L,UAE5B/ve,EAAMmtgB,YAAY8/J,YAAYhB,MAGhC5uoB,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUxpC,GACtEwpC,EAAMirE,SAAS,CACbghmB,KAAK,IAGPtjd,YAAQnyP,GACR,IAAIm2sB,EAAc3sqB,EAAMzN,MAAMo6qB,YAC1BA,GAAaA,EAAYn2sB,MAG/B6mE,YAAgBqtC,YAAuB1qE,GAAQ,sBAAsB,WACnE,OAAO,IAAIsH,SAAQ,SAAUC,GAC3B,IAAIu0K,EAAO97K,EAAMzN,MAAMupL,KAOvB,GALKA,GACHv0K,EAAQ,MAIU,kBAATu0K,EAAmB,CAC5B,GAAIuuf,EAAUvuf,GAAO,CACnB,IAAIoxf,EAAiB5C,EAAoBxuf,GACzCv0K,EAAQ,CACNlE,KAAM6pqB,IAIVrC,IACAtjqB,EAAQ,CACNsiD,IAAKiyH,IAuBT,GAlBIA,aAAgBwtT,IAClB/he,EAAQ,CACNu2I,MAAOg+B,IAKP3jD,EAAc2jD,IAChBv0K,EAAQ,CACNlE,KAAMy4K,IASN0pN,IAEE0kS,EAAOpuf,IAASquf,EAAOruf,IACzBovf,GAAapvf,GAAMl9I,MAAK,SAAUv7B,GAChCkE,EAAQ,CACNlE,KAAMA,WALd,CAgBA,GAHA/sC,YAA4B,WAAlBssC,YAAQk5K,GAAoB,mFACtCxlN,YAAUwlN,EAAKjyH,KAAOiyH,EAAKz4K,MAAQy4K,EAAKh+B,MAAO,+DAEvB,kBAAbg+B,EAAKjyH,IAAkB,CAChC,GAAIwgnB,EAAUvuf,EAAKjyH,KAAM,CACvB,IAAIA,EAAMiyH,EAAKjyH,IACXsjnB,EAAc5nqB,YAAyBu2K,EAAM44K,IAE7C04U,EAAkB9C,EAAoBzgnB,GAE1CtiD,EAAQlH,GAAc,CACpBgD,KAAM+pqB,GACLD,IAGLtC,IAGFtjqB,EAAQu0K,UAIZz+I,YAAgBqtC,YAAuB1qE,GAAQ,gBAAgB,SAAU6xe,EAAW/thB,GAClFk8C,EAAMmsqB,MAAMt6L,GAAa/thB,KAG3Bu5E,YAAgBqtC,YAAuB1qE,GAAQ,kBAAkB,SAAU6xe,UAClE7xe,EAAMmsqB,MAAMt6L,MAGd7xe,EA8GT,OA3GAF,YAAaksqB,EAAU,CAAC,CACtBr/sB,IAAK,oBACL5I,MAAO,WACLsE,KAAKgltB,eACLhltB,KAAKiltB,qBAEN,CACD3gtB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACtBr+G,KAAKkqC,MAAMupL,OAETp1G,EAAUo1G,MACrBzzN,KAAKgltB,iBAGR,CACD1gtB,IAAK,uBACL5I,MAAO,WAEL+mtB,EAAkBzitB,KAAK0itB,aAEnB1itB,KAAKkphB,aAAalphB,KAAKkphB,YAAY1+c,YAExC,CACDlmE,IAAK,eACLP,IAAK,WACH,IAAI+gjB,EAAc9kjB,KAAK8kjB,YACnBogK,EAAelltB,KAAKkltB,aACpBC,EAAiBnltB,KAAKmltB,eACtBv9P,EAAe5nd,KAAKkqC,MACpB86gB,EAAqBp9F,EAAao9F,mBAClCogK,EAAax9P,EAAaw9P,WAC1B7zN,EAAS3pC,EAAa2pC,OAE1B,MAAO,CACLyzD,mBAAoBA,EACpBF,YAAaA,EACb8+J,IAJQ5jtB,KAAKgnC,MAAM48qB,IAKnBsB,aAAcA,EACdE,WAAYA,EACZ7zN,OAAQA,EACR4zN,eAAgBA,KAGnB,CACD7gtB,IAAK,aACLP,IAAK,WACH,IAAIq/G,EAASpjH,KAEb,OAAO0gtB,EAAe1gtB,KAAKkqC,OAAO,WAChC,OAAOk5E,EAAOp8E,MAAM48qB,SAOvB,CACDt/sB,IAAK,iBACL5I,MAAO,WACL,IAAI4qC,EAAWtmC,KAAKkqC,MAAM5D,SAC1B,OAAoB7B,IAAMwB,cAAco/qB,EAAgBj/qB,SAAU,CAChE1qC,MAAOsE,KAAKima,cACX3/X,KAEJ,CACDhiC,IAAK,gBACL5I,MAAO,WACL,IAAI+3N,EAAOzzN,KAAKkqC,MAAMupL,KAClBmwf,EAAM5jtB,KAAKgnC,MAAM48qB,IAErB,IAAKnwf,EAAM,CACT,IAAI6xf,EAAStltB,KAAKkqC,MAAMo7qB,OACxB,OAAoB7grB,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,WACa,oBAAXoltB,EAAwBA,IAAWA,GAG/C,GAAY,OAAR1B,EAAc,CAChB,IAAIx8mB,EAAUpnG,KAAKkqC,MAAMk9D,QACzB,OAAoB3iE,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,WACc,oBAAZknG,EAAyBA,IAAYA,GAGjD,IAAY,IAARw8mB,EAAe,CACjB,IAAIz1sB,EAAQnO,KAAKkqC,MAAM/7B,MACvB,OAAoBs2B,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,SACY,oBAAViO,EAAuBA,IAAUA,GAG7C,OAAOnO,KAAKultB,mBAEb,CACDjhtB,IAAK,SACL5I,MAAO,WACL,IAAIitoB,EAAe3ooB,KAAKkqC,MACpBkvC,EAAYuvjB,EAAavvjB,UACzBmoP,EAAWonU,EAAapnU,SAC5B,OAAoB98R,IAAMwB,cAAc,MAAO6D,YAAS,CACtDsvC,UAAW2noB,EAAgB,sBAAuB3noB,GAClD39E,IAAK8lU,GACJvhU,KAAK4gtB,YAAa5gtB,KAAKwltB,qBAIvB7B,EAxVmB,CAyV1Bh6Z,iBAGFg6Z,GAASlimB,aAAe,CACtBtzG,MAAO,2BACPi5F,QAAS,oBACTk+mB,OAAQ,yBACRh/L,WAAY,SAAoB1hf,EAAU2mF,GACxC,OAAQA,GACN,KAAKsnX,EAAkBkU,cAInBnid,EADeo7Z,OAAO,8CAEtB,MAGJ,KAAK6yC,EAAkBmU,mBAKnBpid,EAFgBo7Z,OAAO,2CAUjC,IAAIylR,GAAmB1mc,IAAUC,UAAU,CAACD,IAAU70P,KAAM60P,IAAU33Q,OACtEu8sB,GAAS7kc,UAAY9mO,GAAcA,GAAc,GAAI4oqB,IAAa,GAAI,CACpEt6qB,SAAUy4O,IAAU33Q,KACpBgyE,UAAW8poB,GACX/0sB,MAAOs3sB,GACPtE,gBAAiBpic,IAAUx4Q,OAC3B26sB,mBAAoBnic,IAAUx4Q,OAC9BktN,KAAMiyf,GACN1gK,mBAAoBjmS,IAAUx4Q,OAC9Bg7T,SAAUgiZ,GACVn8mB,QAASq+mB,GACTH,OAAQG,GACR5B,YAAa9kc,IAAU70P,KACvBo6rB,YAAavlc,IAAU70P,KACvBi6rB,eAAgBplc,IAAU70P,KAC1Bm6rB,cAAetlc,IAAU70P,KACzBo8f,WAAYvnQ,IAAU70P,KACtBq6rB,cAAexlc,IAAU70P,KACzBg6rB,gBAAiBnlc,IAAU70P,KAC3Bqne,OAAQxyO,IAAUvkG,SChbQ91I,+BAAc,MCEtCihrB,GAAmB,WACrB,SAASA,EAAIt/qB,GACX,IAAI6yE,EAAM7yE,EAAK6yE,IACX8jG,EAAM32K,EAAK22K,IAEf5vL,YAAgBptB,KAAM2ltB,GAEtB3ltB,KAAKk5G,IAAMA,EACXl5G,KAAKg9M,IAAMA,EAgBb,OAbAvlK,YAAakuqB,EAAK,CAAC,CACjBrhtB,IAAK,WACL5I,MAAO,WACL,IAAI8sB,EAAM,GAAGld,OAAOtL,KAAKk5G,IAAK,KAM9B,OAJiB,IAAbl5G,KAAKg9M,MACPx0L,GAAOxoB,KAAKg9M,KAGPx0L,MAIJm9rB,EAxBc,GCOnBt5U,GAAY,CAAC,QAEjB,SAASr0T,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IAWrZ,IAAIgysB,GAAmC,SAAUvhF,GACtDxsjB,YAAU+toB,EAAqBvhF,GAE/B,IAAIh5W,EAASrzM,GAAa4toB,GAE1B,SAASA,IACP,IAAIjuqB,EAEJvqB,YAAgBptB,KAAM4ltB,GAEtB,IAAK,IAAI76rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAuFzB,OApFA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,kBAAkB,WAC/D,OAAO,IAAIsH,SAAQ,SAAUC,EAASi3B,GACpC,IAAIosC,EAAc5qE,EAAMzN,MACpB0vC,EAAO2oC,EAAY3oC,KACnBgqoB,EAAMrhmB,EAAYqhmB,IAUtB,OARK96S,EAAUnxX,EAAMm2J,eACM,kBAAdl0H,EAAKstb,KACd08M,EAAI57L,eAAepuc,EAAKstb,MAAM3wb,KAAKr3B,GAAnC,MAAqDi3B,GAErDj3B,EAAQ06B,EAAKstb,OAIVvvd,EAAMm2J,eACZv3H,MAAK,SAAUu3H,GAEhB,OADAn2J,EAAMm2J,YAAcA,EACbA,QAIX94H,YAAgBqtC,YAAuB1qE,GAAQ,gBAAgB,WAC7D,OAAO,IAAIsH,SAAQ,SAAUC,EAASi3B,GACpC,IAAIytoB,EAAMjsqB,EAAMzN,MAAM05qB,IAElB96S,EAAUnxX,EAAM6xe,YAClBtqe,EAAQvH,EAAM6xe,WAGhB7xe,EAAMqwe,iBAAiBzxc,MAAK,SAAUu3H,GACpC,GAAKA,EAAL,CAIA,IACIryM,EADe03C,YAAe26J,EAAa,GACxB,GAEvB81gB,EAAI97L,aAAa,IAAI69L,GAAIlqtB,IAAM86E,KAAKr3B,GAApC,MAAsDi3B,UAEvDI,MAAK,SAAUizc,GAEhB,OADA7xe,EAAM6xe,UAAYA,EACX7xe,EAAM6xe,gBAIjBx0c,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,OAAO,IAAIsH,SAAQ,SAAUC,EAASi3B,GAChC2yV,EAAUnxX,EAAMiwe,aAClB1oe,EAAQvH,EAAMiwe,YAGhBjwe,EAAMmwe,eAAevxc,MAAK,SAAUizc,GAClCtqe,EAAQsqe,EAAY,MADtB,MAEYrzc,MACXI,MAAK,SAAUqxc,GAEhB,OADAjwe,EAAMiwe,WAAaA,EACZA,QAIX5yc,YAAgBqtC,YAAuB1qE,GAAQ,WAAW,SAAUwvF,GAClE,IAAItiB,EAAUltE,EAAMzN,MAAM26E,QAG1B,OAFAsiB,EAAM/F,mBAEDvc,GAIE5lE,QAAQwnJ,IAAI,CAAC9uJ,EAAMqwe,iBAAkBrwe,EAAMmwe,eAAgBnwe,EAAMkuqB,kBAAkBtvoB,MAAK,SAAUlwC,GACvG,IAAIsC,EAAQwK,YAAe9M,EAAM,GAC7B6ge,EAAOv+d,EAAM,GACb6gf,EAAY7gf,EAAM,GAClBi/e,EAAaj/e,EAAM,GAEvBk8E,EAAQ,CACNqiZ,KAAMA,EACNsiB,UAAWA,EACX5B,WAAYA,UAKXjwe,EAiCT,OA9BAF,YAAamuqB,EAAqB,CAAC,CACjCthtB,IAAK,iBACL5I,MAAO,WACL,IAAI8nH,EAAexjH,KAAKkqC,MACpB0vC,EAAO4pC,EAAa5pC,KACpBgrW,EAAa1nY,YAAyBsmE,EAAc6oR,IAExD,IAAKzyT,EAAKotL,QAAUptL,EAAKotL,MAAMnlQ,OAC7B,OAAO,KAGT,IAAIiktB,EAAWlsoB,EAAKotL,MACpB,OAAoBviO,IAAMwB,cAAc,KAAM,KAAM6/qB,EAAS98sB,KAAI,SAAU+8sB,EAASC,GAClF,OAAoBvhrB,IAAMwB,cAAc2/qB,EAAqB97qB,YAAS,CACpExlC,IAAoC,kBAAxByhtB,EAAQj4gB,YAA2Bi4gB,EAAQj4gB,YAAck4gB,EACrEpsoB,KAAMmsoB,GACLnhS,UAGN,CACDtgb,IAAK,SACL5I,MAAO,WACL,IAAIk+E,EAAO55E,KAAKkqC,MAAM0vC,KACtB,OAAoBn1C,IAAMwB,cAAc,KAAM,KAAmBxB,IAAMwB,cAAc,IAAK,CACxFmnF,KAAM,IACNvI,QAAS7kH,KAAK6kH,SACbjrC,EAAKswC,OAAQlqH,KAAKimtB,sBAIlBL,EAnIqC,CAoI5Cj8Z,iBACEu8Z,GAAgBnnc,IAAUC,UAAU,CAACD,IAAUx4Q,OAAQw4Q,IAAU4/Y,QAAQ5/Y,IAAU8gP,OACvF+lN,GAAoB9mc,UAAY,CAC9BllM,KAAMmlM,IAAUjkJ,MAAM,CACpBosY,KAAMg/M,GACNl/c,MAAO+X,IAAU4/Y,QAAQ5/Y,IAAUjkJ,MAAM,CACvCosY,KAAMg/M,GACNh8lB,MAAO60J,IAAUx4Q,UAEnB2jH,MAAO60J,IAAUx4Q,SAChBsyU,WACHh0N,QAASk6J,IAAU70P,KACnB05rB,IAAKN,GAAMzqY,YAGb,IAQestY,GARG,SAAqBj8qB,GACrC,OAAoBzF,IAAMwB,cAAco/qB,EAAgB96qB,SAAU,MAAM,SAAU67qB,GAChF,OAAoB3hrB,IAAMwB,cAAcogrB,GAAe97qB,SAAU,MAAM,SAAU+7qB,GAC/E,OAAoB7hrB,IAAMwB,cAAc2/qB,GAAqB97qB,YAAS,GAAIs8qB,EAAiBE,EAAgBp8qB,WCpKjH,SAASxd,GAAQvoB,EAAQwoB,GAAkB,IAAI7qB,EAAO1D,OAAO0D,KAAKqC,GAAS,GAAI/F,OAAOkgB,sBAAuB,CAAE,IAAIsO,EAAUxuB,OAAOkgB,sBAAsBna,GAASwoB,IAAmBC,EAAUA,EAAQrhB,QAAO,SAAUshB,GAAO,OAAOzuB,OAAO0uB,yBAAyB3oB,EAAQ0oB,GAAK/kB,eAAiBhG,EAAKsK,KAAKnE,MAAMnG,EAAM8qB,GAAY,OAAO9qB,EAI9U,SAASk2E,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IAgBrZ,IAAI2ysB,GAA+B,SAAUliF,GAClDxsjB,YAAU0uoB,EAAiBliF,GAE3B,IAAIh5W,EAASrzM,GAAauuoB,GAE1B,SAASA,IACP,IAAI5uqB,EAEJvqB,YAAgBptB,KAAMumtB,GAEtB,IAAK,IAAIx7rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAgEzB,OA7DA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtDgxT,QAAS,OAGX3zR,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,WAC5D,IAAIisqB,EAAMjsqB,EAAMzN,MAAM05qB,IAEtBjsqB,EAAMirE,UAAS,SAAUquJ,GACvB,OAAKA,EAAU03F,QAIR,CACLA,QAAS,MAJF,QAQX,IAAIo7W,EAAcC,EAAgBJ,EAAIn7L,cACtC9we,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUoyR,GACjChxT,EAAMirE,SAAS,CACb+lP,QAASA,GACRhxT,EAAM0sqB,kBAHX,OAIY,SAAUl2sB,GACpBwpC,EAAM2sqB,YAAYn2sB,SAItB6mE,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IAAI0sqB,EAAgB1sqB,EAAMzN,MAAMm6qB,cAC5B17W,EAAUhxT,EAAM3Q,MAAM2hU,QACtB07W,GAAeA,EAAc17W,MAGnC3zR,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUxpC,GACtEwpC,EAAMirE,SAAS,CACb+lP,SAAS,IAGXroG,YAAQnyP,GACR,IAAIm2sB,EAAc3sqB,EAAMzN,MAAMo6qB,YAC1BA,GAAaA,EAAYn2sB,MAG/B6mE,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUtR,GACtE,IAAI6ge,EAAO7ge,EAAK6ge,KACZsiB,EAAYnjf,EAAKmjf,UACjB5B,EAAavhf,EAAKuhf,WAClBi8L,EAAclsqB,EAAMzN,MAAM25qB,YAE1BA,GACFA,EAAY,CACV38M,KAAMA,EACNsiB,UAAWA,EACX5B,WAAYA,OAKXjwe,EA6ET,OA1EAF,YAAa8uqB,EAAiB,CAAC,CAC7BjitB,IAAK,oBACL5I,MAAO,WACL,IAAIkotB,EAAM5jtB,KAAKkqC,MAAM05qB,IACrB31sB,YAAU21sB,EAAK,gEACf5jtB,KAAKwmtB,gBAEN,CACDlitB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIulmB,EAAM5jtB,KAAKkqC,MAAM05qB,IAEjBvlmB,EAAUulmB,KAAOA,IAAQvlmB,EAAUulmB,KACrC5jtB,KAAKwmtB,gBAGR,CACDlitB,IAAK,uBACL5I,MAAO,WACL+mtB,EAAkBzitB,KAAK0itB,eAExB,CACDp+sB,IAAK,eACLP,IAAK,WACH,MAAO,CACL8gH,QAAS7kH,KAAK6jtB,eAGjB,CACDv/sB,IAAK,aACLP,IAAK,WACH,IAAIq/G,EAASpjH,KAEb,OAAO0gtB,EAAe1gtB,KAAKkqC,OAAO,WAChC,OAAOk5E,EAAOp8E,MAAM2hU,aAOvB,CACDrkW,IAAK,gBACL5I,MAAO,WACL,IAAIitW,EAAU3oW,KAAKgnC,MAAM2hU,QACzB,OAAoBlkU,IAAMwB,cAAc,KAAM,KAAM0iU,EAAQ3/V,KAAI,SAAU4wE,EAAMsoV,GAC9E,OAAoBz9X,IAAMwB,cAAckgrB,GAAa,CACnD7htB,IAAiC,kBAArBs1E,EAAKk0H,YAA2Bl0H,EAAKk0H,YAAco0N,EAC/DtoV,KAAMA,UAIX,CACDt1E,IAAK,SACL5I,MAAO,WACL,IAAIkotB,EAAM5jtB,KAAKkqC,MAAM05qB,IACjBj7W,EAAU3oW,KAAKgnC,MAAM2hU,QAEzB,IAAKi7W,IAAQj7W,EACX,OAAO,KAGT,IAAIpmP,EAAcviH,KAAKkqC,MACnBkvC,EAAYmpC,EAAYnpC,UACxBmoP,EAAWh/M,EAAYg/M,SAC3B,OAAoB98R,IAAMwB,cAAc,MAAO6D,YAAS,CACtDsvC,UAAW2noB,EAAgB,qBAAsB3noB,GACjD39E,IAAK8lU,GACJvhU,KAAK4gtB,YAA0Bn8qB,IAAMwB,cAAcogrB,GAAejgrB,SAAU,CAC7E1qC,MAAOsE,KAAKima,cACXjma,KAAKymtB,sBAILF,EAxJiC,CAyJxC58Z,iBACF48Z,GAAgBznc,UA5KhB,SAAuB9xP,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAAS,MAAQvpB,UAAUV,GAAKU,UAAUV,GAAK,GAAIA,EAAI,EAAI0pB,GAAQtuB,OAAO6uB,IAAS,GAAIvgB,SAAQ,SAAUpI,GAAO0wE,YAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAAYlG,OAAO8uB,0BAA4B9uB,OAAO+uB,iBAAiBH,EAAQ5uB,OAAO8uB,0BAA0BD,IAAWP,GAAQtuB,OAAO6uB,IAASvgB,SAAQ,SAAUpI,GAAOlG,OAAOyJ,eAAemlB,EAAQ1oB,EAAKlG,OAAO0uB,yBAAyBG,EAAQ3oB,OAAa,OAAO0oB,EA4KrdgrB,CAAc,CACxCohC,UAAW8poB,GACX3hZ,SAAUgiZ,GACVM,YAAa9kc,IAAU70P,KACvBo6rB,YAAavlc,IAAU70P,KACvBm6rB,cAAetlc,IAAU70P,KACzB05rB,IAAKN,IACJ1C,IClLY,SAAS8F,KAEpB,IADA,IAAIC,EAAY,GACPnyoB,EAAK,EAAGA,EAAK9wE,UAAU7B,OAAQ2yE,IACpCmyoB,EAAUnyoB,GAAM9wE,UAAU8wE,GAE9B,IAAIoyoB,EAAoBD,EAAUp7sB,OAAOlO,SACzC,GAAIuptB,EAAkB/ktB,QAAU,EAAG,CAC/B,IAAIgltB,EAAWD,EAAkB,GACjC,OAAOC,GAAY,KAEvB,OAAO,SAAoBprtB,GACvBmrtB,EAAkBl6sB,SAAQ,SAAU60T,GACR,oBAAbA,EACPA,EAAS9lU,GAEJ8lU,IACLA,EAASz5R,QAAUrsC,OC3BPipC,+BAAc,MCQ1C,SAASszC,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IAY5Z,IAAIkzsB,GAAkBpD,iBACXqD,GAAkC,SAAU1iF,GACrDxsjB,YAAUkvoB,EAAoB1iF,GAE9B,IAAIh5W,EAASrzM,GAAa+uoB,GAE1B,SAASA,IACP,IAAIpvqB,EAEJvqB,YAAgBptB,KAAM+mtB,GAEtB,IAAK,IAAIh8rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAkEzB,OA/DA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,gBAA8BqvqB,uBAE7EhyoB,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,WAChEA,EAAMkxX,SAAW,KACjB,IAAItmT,EAAc5qE,EAAMzN,MACpB+8qB,EAAkB1kmB,EAAY0kmB,gBAC9Br7c,EAAOrpJ,EAAYqpJ,KACnBigD,EAAQtpM,EAAYspM,MACpBo7Z,GAAiBA,EAAgBtE,EAAiB/2c,EAAMigD,OAG9D72O,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,SAAUxpC,GACxE,IAAIy0sB,GAAkBz0sB,GAAtB,CAIAmyP,YAAQnyP,GACR,IAAI+4sB,EAAgBvvqB,EAAMzN,MAAMg9qB,cAC5BA,GAAeA,EAAc/4sB,OAGnC6mE,YAAgBqtC,YAAuB1qE,GAAQ,oBAAoB,WACjE,IAAIyxb,EAASzxb,EAAMwvqB,cAAcr/qB,QAEjC,IAAKshc,EACH,OAAO,KAGT,IAAIg+O,EAAwB/kmB,YAAuB1qE,GAC/C0vqB,EAAiBD,EAAsBC,eACvC9mb,EAAW6mb,EAAsB7mb,SAEjC/8K,EAAe7rE,EAAMzN,MACrBo9qB,EAAmB9jmB,EAAa8jmB,iBAChC17c,EAAOpoJ,EAAaooJ,KACpBq5S,EAAczhc,EAAayhc,YAC/B77E,EAAO9tZ,MAAQ+roB,EAAe/roB,MAC9B8tZ,EAAO73W,OAAS81lB,EAAe91lB,OAC/B63W,EAAO9tX,MAAMhgC,MAAQ,GAAGhwE,OAAOvO,KAAKwjB,MAAMggR,EAASjlN,OAAQ,MAC3D8tZ,EAAO9tX,MAAMiW,OAAS,GAAGjmH,OAAOvO,KAAKwjB,MAAMggR,EAAShvK,QAAS,MAC7D,IAAIg2lB,EAAgB,CAClBv7L,eAAgBi5B,EAAc6hK,GAAgBtuO,aAAesuO,GAAgBvuO,OAEzEszC,oBACF,OAAOziD,EAAO42C,WAAW,OAG3Bz/O,SAAU8mb,GAWZ,OARIC,IACFC,EAAcxslB,WAAauslB,GAI7B3vqB,EAAM6vqB,sBAEN7vqB,EAAMkxX,SAAWj9J,EAAKxpI,OAAOmllB,GACtB5vqB,EAAMkxX,SAAS7mR,QAAQzrE,KAAK5+B,EAAMsvqB,iBAAlC,MAA4DtvqB,EAAMuvqB,kBAGpEvvqB,EA0FT,OAvFAF,YAAasvqB,EAAoB,CAAC,CAChCzitB,IAAK,oBACL5I,MAAO,WACLsE,KAAKyntB,qBAEN,CACDnjtB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIupW,EAAe5nd,KAAKkqC,MACpBo9qB,EAAmB1/P,EAAa0/P,iBAChC17c,EAAOg8M,EAAah8M,KACpBq5S,EAAcr9F,EAAaq9F,YAE3BqiK,IAAqBjpmB,EAAUipmB,kBAAoBriK,IAAgB5mc,EAAU4mc,cAE/Er5S,EAAKo2C,UACLhiT,KAAKyntB,sBAGR,CACDnjtB,IAAK,uBACL5I,MAAO,WACLsE,KAAKwntB,sBACL,IAAIp+O,EAASppe,KAAKmntB,cAAcr/qB,QAM5Bshc,IACFA,EAAO9tZ,MAAQ,EACf8tZ,EAAO73W,OAAS,KAGnB,CACDjtH,IAAK,sBACL5I,MAAO,WACDsE,KAAK6oa,WACP7oa,KAAK6oa,SAASh9Y,SACd7rB,KAAK6oa,SAAW,QAOnB,CACDvka,IAAK,iBACLP,IAAK,WACH,IAAI4koB,EAAe3ooB,KAAKkqC,MACpB0hO,EAAO+8X,EAAa/8X,KACpB2lP,EAASo3I,EAAap3I,OACtB1lM,EAAQ88U,EAAa98U,MACrB67Z,ET5DDvqS,GAAazuZ,OAAOw6gB,kBAAoB,ES6D3C,OAAOt9R,EAAKwqC,YAAY,CACtByV,MAAOA,EAAQ67Z,EACflpc,SAAU+yO,MAGb,CACDjtf,IAAK,WACLP,IAAK,WACH,IAAIuloB,EAAetpoB,KAAKkqC,MACpB0hO,EAAO09X,EAAa19X,KACpB2lP,EAAS+3I,EAAa/3I,OACtB1lM,EAAQy9U,EAAaz9U,MACzB,OAAOjgD,EAAKwqC,YAAY,CACtByV,MAAOA,EACPrtC,SAAU+yO,MAGb,CACDjtf,IAAK,SACL5I,MAAO,WACL,IAAIistB,EAAY3ntB,KAAKkqC,MAAMy9qB,UAC3B,OAAoBljrB,IAAMwB,cAAc,SAAU,CAChDmzC,UAAW,0BACXu3E,IAAK,MACLl1J,IAAKirtB,GAAUiB,EAAW3ntB,KAAKmntB,eAC/B7rmB,MAAO,CACLlgC,QAAS,QACT+uR,WAAY,cAMb48W,EAvKoC,CAwK3Cp9Z,iBAWa,SAASi+Z,GAAW19qB,GACjC,OAAoBzF,IAAMwB,cAAc4hrB,GAAYt9qB,SAAU,MAAM,SAAUrhC,GAC5E,OAAoBu7B,IAAMwB,cAAc8grB,GAAoBj9qB,YAAS,GAAI5gC,EAASghC,OClMtF,SAAS8tC,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IDsL5ZmzsB,GAAmBjoc,UAAY,CAC7Bwoc,iBAAkBvoc,IAAUx4Q,OAC5BohtB,UAAWpE,GACX2D,cAAenoc,IAAU70P,KACzB+8rB,gBAAiBloc,IAAU70P,KAC3B0hP,KAAMw3c,GAAOvqY,WACbosO,YAAalmS,IAAU99H,KACvBswW,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,OAAOq+J,YCnLnB,IAAIivY,GAA+B,SAAUzjF,GAClDxsjB,YAAUiwoB,EAAiBzjF,GAE3B,IAAIh5W,EAASrzM,GAAa8voB,GAE1B,SAASA,IACP,IAAInwqB,EAEJvqB,YAAgBptB,KAAM8ntB,GAEtB,IAAK,IAAI/8rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GA4DzB,OAzDA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtDq2E,IAAK,OAGPh5C,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,WAChEA,EAAMkxX,SAAW,KACjB,IAAItmT,EAAc5qE,EAAMzN,MACpB+8qB,EAAkB1kmB,EAAY0kmB,gBAC9Br7c,EAAOrpJ,EAAYqpJ,KACnBigD,EAAQtpM,EAAYspM,MACpBo7Z,GAAiBA,EAAgBtE,EAAiB/2c,EAAMigD,OAG9D72O,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,SAAUxpC,GACxE,IAAIy0sB,GAAkBz0sB,GAAtB,CAIAmyP,YAAQnyP,GACR,IAAI+4sB,EAAgBvvqB,EAAMzN,MAAMg9qB,cAC5BA,GAAeA,EAAc/4sB,OAGnC6mE,YAAgBqtC,YAAuB1qE,GAAQ,aAAa,WAC1D,IAAIi0N,EAAOj0N,EAAMzN,MAAM0hO,KAEvB,OADAj0N,EAAMkxX,SAAWj9J,EAAKm8c,kBACfpwqB,EAAMkxX,SAAStyV,MAAK,SAAU22c,GACnC,IAAI86L,EAAS,IAAItE,cAAkB93c,EAAKm+Q,WAAYn+Q,EAAKo+Q,MACzDrye,EAAMkxX,SAAWm/S,EAAOC,OAAO/6L,EAAcv1e,EAAM4oP,UAAUhqN,MAAK,SAAUy3C,GAC1Er2E,EAAMirE,SAAS,CACboL,IAAKA,GACJr2E,EAAMsvqB,oBAHM,MAILtvqB,EAAMuvqB,kBANb,MAOKvvqB,EAAMuvqB,kBAGpBlyoB,YAAgBqtC,YAAuB1qE,GAAQ,uBAAuB,SAAUmwJ,GAC9E,IAAI95E,EAAMr2E,EAAM3Q,MAAMgnF,IAEtB,GAAK85E,GAAY95E,EAAjB,CAKK85E,EAAQoghB,mBACXpghB,EAAQo1G,YAAYlvL,GAGtB,IAAIm6lB,EAAiBxwqB,EAAM4oP,SACvBjlN,EAAQ6soB,EAAe7soB,MACvBi2C,EAAS42lB,EAAe52lB,OAC5BvD,EAAImuL,aAAa,QAAS7gO,GAC1B0yC,EAAImuL,aAAa,SAAU5qL,OAGtB55E,EAkDT,OA/CAF,YAAaqwqB,EAAiB,CAAC,CAC7BxjtB,IAAK,oBACL5I,MAAO,WACLsE,KAAKootB,cAMN,CACD9jtB,IAAK,WACLP,IAAK,WACH,IAAIy/G,EAAexjH,KAAKkqC,MACpB0hO,EAAOpoJ,EAAaooJ,KACpB2lP,EAAS/tY,EAAa+tY,OACtB1lM,EAAQroM,EAAaqoM,MACzB,OAAOjgD,EAAKwqC,YAAY,CACtByV,MAAOA,EACPrtC,SAAU+yO,MAGb,CACDjtf,IAAK,SACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAETqotB,EAAkBrotB,KAAKugS,SACvBjlN,EAAQ+soB,EAAgB/soB,MACxBi2C,EAAS82lB,EAAgB92lB,OAC7B,OAAoB9sF,IAAMwB,cAAc,MAAO,CAC7CmzC,UAAW,uBAEX39E,IAAK,SAAa4qC,GAChB,OAAO+8E,EAAOklmB,oBAAoBjirB,IAEpCi1E,MAAO,CACLlgC,QAAS,QACT4pC,gBAAiB,QACjBqF,SAAU,SACV/uC,MAAOA,EACPi2C,OAAQA,EACR44O,WAAY,cAMb29W,EAzHiC,CA0HxCn+Z,iBAQa,SAAS4+Z,GAAQr+qB,GAC9B,OAAoBzF,IAAMwB,cAAc4hrB,GAAYt9qB,SAAU,MAAM,SAAUrhC,GAC5E,OAAoBu7B,IAAMwB,cAAc6hrB,GAAiBh+qB,YAAS,GAAI5gC,EAASghC,OC9InF,SAAS8tC,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IDqI5Zk0sB,GAAgBhpc,UAAY,CAC1Booc,cAAenoc,IAAU70P,KACzB+8rB,gBAAiBloc,IAAU70P,KAC3B0hP,KAAMw3c,GAAOvqY,WACb04K,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,OAAOq+J,YClInB,IAAI2vY,GAAqC,SAAUnkF,GACxDxsjB,YAAU2woB,EAAuBnkF,GAEjC,IAAIh5W,EAASrzM,GAAawwoB,GAE1B,SAASA,IACP,IAAI7wqB,EAEJvqB,YAAgBptB,KAAMwotB,GAEtB,IAAK,IAAIz9rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAczB,OAXA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,cAA4BqvqB,uBAE3EhyoB,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,SAAUmwJ,GAC1E,IACI2ghB,EADwBpmmB,YAAuB1qE,GACd8wqB,SAErC,OAAO3ghB,EAAQmyF,wBAAwBwub,EAAW,SAAW,YAGxD9wqB,EAqLT,OAlLAF,YAAa+wqB,EAAuB,CAAC,CACnClktB,IAAK,oBACL5I,MAAO,WACLsE,KAAK0otB,kBAEN,CACDpktB,IAAK,qBACL5I,MAAO,WACLsE,KAAK0otB,kBAEN,CACDpktB,IAAK,oBACLP,IAAK,WACH,IAAIw+G,EAAcviH,KAAKkqC,MACnB0hO,EAAOrpJ,EAAYqpJ,KACnBigD,EAAQtpM,EAAYspM,MACxB,OAAOjgD,EAAKwqC,YAAY,CACtByV,MAAOA,MAQV,CACDvnT,IAAK,SACLP,IAAK,WACH,IAAIy/G,EAAexjH,KAAKkqC,MACpB0hO,EAAOpoJ,EAAaooJ,KAExB,OADapoJ,EAAa+tY,OACV3lP,EAAK2lP,SAEtB,CACDjtf,IAAK,WACLP,IAAK,WAEH,OADa/D,KAAKuxf,OACF,MAAQ,IAEzB,CACDjtf,IAAK,kBACLP,IAAK,WAEH,OADe/D,KAAK2otB,kBAAkBnqc,SACpB,MAAQ,IAE3B,CACDl6Q,IAAK,WACLP,IAAK,WACH,IAAIs4H,EAAYr8H,KAAKkqC,MAAMmyF,UACvBuslB,EAAkB5otB,KAAK4otB,gBAEvBC,EAAa11qB,YAAekpF,EAAW,GACvCyslB,EAAeD,EAAW,GAC1BE,EAAcF,EAAW,GAE7B,OAAOD,EAAkBG,EAAcD,IAExC,CACDxktB,IAAK,MACLP,IAAK,WACH,IAAIs4H,EAAYr8H,KAAKkqC,MAAMmyF,UACvBkkK,EAAWvgS,KAAK2otB,kBAChBC,EAAkB5otB,KAAK4otB,gBAEvBI,EAAc71qB,YAAekpF,EAAW,GAK5C+uW,EAAU49O,EAAY,GAClB19O,EAAU09O,EAAY,GACtBnxsB,EAAImxsB,EAAY,GAChBx9qB,EAAIw9qB,EAAY,GAEhBC,EAAoB91qB,YAAeotP,EAASjqB,QAAS,GAGzD4yc,EAEED,EAAkB,GAChBE,EAAOF,EAAkB,GAE7B,OAAOL,EAAkB/wsB,EAAIuzd,EAAU89O,EAAOC,GAAQ39qB,EAAI8/b,KAE3D,CACDhne,IAAK,OACLP,IAAK,WACH,IAAIs4H,EAAYr8H,KAAKkqC,MAAMmyF,UACvBkkK,EAAWvgS,KAAK2otB,kBAChBC,EAAkB5otB,KAAK4otB,gBAEvBQ,EAAcj2qB,YAAekpF,EAAW,GAS5CxkH,EAAIuxsB,EAAY,GACZ59qB,EAAI49qB,EAAY,GAGhBC,EADqBl2qB,YAAeotP,EAASjqB,QAAS,GAC5B,GAE9B,OAAOsyc,EAAkBp9qB,EAAI69qB,EAAOxxsB,EAAIwxsB,IAEzC,CACD/ktB,IAAK,cACL5I,MAAO,SAAqBo/jB,GAC1B,IAAIlvT,EAAO5rQ,KAAKkqC,MAAM0hO,KACtB,OAAO,IAAI3sN,SAAQ,SAAUC,GAC3B0sN,EAAKm+Q,WAAWhmhB,IAAI+2jB,EAAU57gB,QAGjC,CACD56C,IAAK,gBACL5I,MAAO,WACL,IAAI0nH,EAASpjH,KAET8nM,EAAU9nM,KAAKsptB,YAAYxhrB,QAE/B,GAAKggK,EAAL,CAIAA,EAAQxsF,MAAM+gB,UAAY,GAC1B,IAAIurV,EAAe5nd,KAAKkqC,MACpB4whB,EAAWlzG,EAAakzG,SACxBjvQ,EAAQ+7J,EAAa/7J,MACrBvwO,EAAQssY,EAAatsY,MACzBwsH,EAAQxsF,MAAM8+J,WAAa,GAAG9uQ,OAAOwvjB,EAAU,gBAC/C96jB,KAAKuptB,YAAYzuJ,GAAUvkf,MAAK,SAAUizoB,GACxC,IAAIC,EAAmBD,EAAWA,EAAS74K,aAAe,aAC1D7oW,EAAQxsF,MAAM8+J,WAAa,GAAG9uQ,OAAOwvjB,EAAU,MAAMxvjB,OAAOm+sB,GAC5D,IAAIC,EAAcpuoB,EAAQuwO,EAEtB89Z,EAAcvmmB,EAAOwmmB,gBAAgB9hhB,GAErCzrE,EAAY,UAAU/wH,OAAOo+sB,EAAcC,EAAa,KACxDxuJ,EAASquJ,EAAWA,EAASruJ,OAAS,EAEtCA,IACF9+b,GAAa,eAAe/wH,OAAsB,KAAd,EAAI6vjB,GAAe,OAGzDrzX,EAAQxsF,MAAM+gB,UAAYA,EAC1ByrE,EAAQxsF,MAAMuumB,gBAAkBxtlB,QAGnC,CACD/3H,IAAK,SACL5I,MAAO,WACL,IAAIyrH,EAAWnnH,KAAKmnH,SAChBmN,EAAMt0H,KAAKs0H,IACX/5G,EAAOva,KAAKua,KACZounB,EAAe3ooB,KAAKkqC,MACpB4/qB,EAAqBnhF,EAAamhF,mBAClCj+Z,EAAQ88U,EAAa98U,MACrBhgM,EAAO88gB,EAAangnB,IACxB,OAAoBic,IAAMwB,cAAc,OAAQ,CAC9CxqC,IAAKuE,KAAKsptB,YACVhumB,MAAO,CACLiW,OAAQ,MACR6oJ,WAAY,aACZjzJ,SAAU,GAAG77G,OAAO67G,EAAW0kM,EAAO,MACtC5uM,SAAU,WACVqX,IAAK,GAAGhpH,OAAOgpH,EAAMu3L,EAAO,MAC5BtxS,KAAM,GAAGjP,OAAOiP,EAAOsxS,EAAO,MAC9B5mL,gBAAiB,cACjBxO,WAAY,MACZpC,cAAe,QAEhBy1lB,EAAqBA,EAAmB9ptB,KAAKkqC,OAAS2hF,OAItD28lB,EA9MuC,CA+M9C7+Z,iBAYa,SAASoga,GAAc7/qB,GACpC,OAAoBzF,IAAMwB,cAAc4hrB,GAAYt9qB,SAAU,MAAM,SAAUrhC,GAC5E,OAAoBu7B,IAAMwB,cAAcuirB,GAAuB1+qB,YAAS,GAAI5gC,EAASghC,OCtOzF,SAAS8tC,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IDyN5Z40sB,GAAsB1pc,UAAY,CAChCgrc,mBAAoB/qc,IAAU70P,KAC9B4wiB,SAAU/7S,IAAUx4Q,OAAOsyU,WAC3BqpF,UAAWnjJ,IAAUvkG,OAAOq+J,WAC5BjtE,KAAMw3c,GAAOvqY,WACb04K,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,OACjBhyJ,IAAKu2P,IAAUx4Q,OAAOsyU,WACtBx8M,UAAW0iJ,IAAU4/Y,QAAQ5/Y,IAAUvkG,QAAQq+J,WAC/Cv9P,MAAOyjM,IAAUvkG,OAAOq+J,YCrNnB,IAAImxY,GAAiC,SAAU3lF,GACpDxsjB,YAAUmyoB,EAAmB3lF,GAE7B,IAAIh5W,EAASrzM,GAAagyoB,GAE1B,SAASA,IACP,IAAIryqB,EAEJvqB,YAAgBptB,KAAMgqtB,GAEtB,IAAK,IAAIj/rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAwCzB,OArCA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtD4mhB,UAAW,OAGbvpf,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IACIosqB,EAAcC,EADPrsqB,EAAMzN,MAAM0hO,KACgBy3c,kBACvC1rqB,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUlwC,GACjC,IAAIk4hB,EAAYl4hB,EAAK2gO,MAErBrvN,EAAMirE,SAAS,CACb27c,UAAWA,GACV5mhB,EAAM0sqB,kBALX,OAMY,SAAUl2sB,GACpBwpC,EAAM2sqB,YAAYn2sB,SAItB6mE,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IAAIsyqB,EAAmBtyqB,EAAMzN,MAAM+/qB,iBAC/B1rJ,EAAY5mhB,EAAM3Q,MAAMu3hB,UACxB0rJ,GAAkBA,EAAiB1rJ,MAGzCvpf,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUxpC,GACtEwpC,EAAMirE,SAAS,CACb27c,WAAW,IAGbj+T,YAAQnyP,GACR,IAAI+7sB,EAAiBvyqB,EAAMzN,MAAMggrB,eAC7BA,GAAgBA,EAAe/7sB,MAG9BwpC,EAsFT,OAnFAF,YAAauyqB,EAAmB,CAAC,CAC/B1ltB,IAAK,oBACL5I,MAAO,WACL,IAAIkwQ,EAAO5rQ,KAAKkqC,MAAM0hO,KACtB39P,YAAU29P,EAAM,mEAChB5rQ,KAAKmqtB,kBAEN,CACD7ltB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIutJ,EAAO5rQ,KAAKkqC,MAAM0hO,KAElBvtJ,EAAUutJ,MAAQA,IAASvtJ,EAAUutJ,MACvC5rQ,KAAKmqtB,kBAGR,CACD7ltB,IAAK,uBACL5I,MAAO,WACL+mtB,EAAkBzitB,KAAK0itB,eAExB,CACDp+sB,IAAK,oBACLP,IAAK,WACH,IAAIw+G,EAAcviH,KAAKkqC,MACnB0hO,EAAOrpJ,EAAYqpJ,KACnBigD,EAAQtpM,EAAYspM,MACxB,OAAOjgD,EAAKwqC,YAAY,CACtByV,MAAOA,MAQV,CACDvnT,IAAK,SACLP,IAAK,WACH,IAAIy/G,EAAexjH,KAAKkqC,MACpB0hO,EAAOpoJ,EAAaooJ,KAExB,OADapoJ,EAAa+tY,OACV3lP,EAAK2lP,SAEtB,CACDjtf,IAAK,kBACL5I,MAAO,WACL,IAAI6ikB,EAAYv+jB,KAAKgnC,MAAMu3hB,UAE3B,OAAKA,EAIEA,EAAUv1jB,KAAI,SAAUohtB,EAAUloT,GACvC,OAAoBz9X,IAAMwB,cAAc8jrB,GACtCjgrB,YAAS,CACTxlC,IAAK49Z,EACLA,UAAWA,GACVkoT,OARI,OAWV,CACD9ltB,IAAK,SACL5I,MAAO,WACL,IAAI6kS,EAAWvgS,KAAK2otB,kBAChBp3N,EAASvxf,KAAKuxf,OAClB,OAAoB9sd,IAAMwB,cAAc,MAAO,CAC7CmzC,UAAW,+BACXkiC,MAAO,CACL2B,SAAU,WACVqX,IAAK,MACL/5G,KAAM,MACN+gE,MAAO,GAAGhwE,OAAOi1R,EAASjlN,MAAO,MACjCi2C,OAAQ,GAAGjmH,OAAOi1R,EAAShvK,OAAQ,MACnCtrB,MAAO,cACPo2B,UAAW,gCAAgC/wH,OAAOimf,EAAQ,QAC1Ds4N,gBAAiB,gCAAgCv+sB,OAAOimf,EAAQ,QAChEl9X,cAAe,SAEhBr0H,KAAKqqtB,uBAILL,EAzImC,CA0I1Crga,iBAQa,SAAS2ga,GAAUpgrB,GAChC,OAAoBzF,IAAMwB,cAAc4hrB,GAAYt9qB,SAAU,MAAM,SAAUrhC,GAC5E,OAAoBu7B,IAAMwB,cAAc+jrB,GAAmBlgrB,YAAS,GAAI5gC,EAASghC,OCjKrF,SAAS8tC,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IDwJ5Zo2sB,GAAkBlrc,UAAY,CAC5Borc,eAAgBnrc,IAAU70P,KAC1B+/rB,iBAAkBlrc,IAAU70P,KAC5B0hP,KAAMw3c,GAAOvqY,WACb04K,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,QC/IZ,IAAI+viB,GAAuC,SAAUlmF,GAC1DxsjB,YAAU0yoB,EAAyBlmF,GAEnC,IAAIh5W,EAASrzM,GAAauyoB,GAE1B,SAASA,IACP,IAAI5yqB,EAEJvqB,YAAgBptB,KAAMuqtB,GAEtB,IAAK,IAAIx/rB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAmDzB,OAhDA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtDkze,YAAa,OAGf71c,YAAgBqtC,YAAuB1qE,GAAQ,eAA6BqvqB,uBAE5EhyoB,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,WAChE,IACIosqB,EAAcC,EADPrsqB,EAAMzN,MAAM0hO,KACgB++Q,kBACvChze,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUs0c,GACjClze,EAAMirE,SAAS,CACbioa,YAAaA,GACZlze,EAAM0sqB,kBAHX,OAIY,SAAUl2sB,GACpBwpC,EAAM2sqB,YAAYn2sB,SAItB6mE,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IAAI6yqB,EAA0B7yqB,EAAMzN,MAAMsgrB,wBACtC3/L,EAAclze,EAAM3Q,MAAM6jf,YAC1B2/L,GAAyBA,EAAwB3/L,MAGvD71c,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUxpC,GACtEwpC,EAAMirE,SAAS,CACbioa,aAAa,IAGfvqR,YAAQnyP,GACR,IAAIs8sB,EAAwB9yqB,EAAMzN,MAAMugrB,sBACpCA,GAAuBA,EAAsBt8sB,MAGnD6mE,YAAgBqtC,YAAuB1qE,GAAQ,mBAAmB,WAChE,IAAI+yqB,EAAiC/yqB,EAAMzN,MAAMwgrB,+BAC7CA,GAAgCA,OAGtC11oB,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,SAAUxpC,GACxEmyP,YAAQnyP,GACR,IAAIw8sB,EAA+BhzqB,EAAMzN,MAAMygrB,6BAC3CA,GAA8BA,EAA6Bx8sB,MAG1DwpC,EAmFT,OAhFAF,YAAa8yqB,EAAyB,CAAC,CACrCjmtB,IAAK,oBACL5I,MAAO,WACL,IAAIkwQ,EAAO5rQ,KAAKkqC,MAAM0hO,KACtB39P,YAAU29P,EAAM,kEAChB5rQ,KAAK4qtB,oBAEN,CACDtmtB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIkE,EAAcviH,KAAKkqC,MACnB0hO,EAAOrpJ,EAAYqpJ,KACnBq5S,EAAc1ic,EAAY0ic,aAE1B5mc,EAAUutJ,MAAQA,IAASvtJ,EAAUutJ,MAAQq5S,IAAgB5mc,EAAU4mc,cACzEjljB,KAAK4qtB,oBAGR,CACDtmtB,IAAK,uBACL5I,MAAO,WACL+mtB,EAAkBzitB,KAAK0itB,eAExB,CACDp+sB,IAAK,WACLP,IAAK,WACH,IAAIy/G,EAAexjH,KAAKkqC,MACpB0hO,EAAOpoJ,EAAaooJ,KACpB2lP,EAAS/tY,EAAa+tY,OACtB1lM,EAAQroM,EAAaqoM,MACzB,OAAOjgD,EAAKwqC,YAAY,CACtByV,MAAOA,EACPrtC,SAAU+yO,MAGb,CACDjtf,IAAK,wBACL5I,MAAO,WACL,IAAImvhB,EAAc7qhB,KAAKgnC,MAAM6jf,YAE7B,GAAKA,EAAL,CAIA,IAAIjjE,EAAe5nd,KAAKkqC,MACpB86gB,EAAqBp9F,EAAao9F,mBAClCF,EAAcl9F,EAAak9F,YAC3Bl5S,EAAOg8M,EAAah8M,KACpBq5S,EAAcr9F,EAAaq9F,YAC3B1kR,EAAWvgS,KAAKugS,SAAS/lP,MAAM,CACjCgxb,UAAU,IAERlsX,EAAa,CACfura,YAAaA,EACbnyc,IAAK14E,KAAK6qtB,aAAa/irB,QACvBk9gB,mBAAoBA,EACpBF,YAAaA,EACbl5S,KAAMA,EACNq5S,YAAaA,EACb1kR,SAAUA,GAEZvgS,KAAK6qtB,aAAa/irB,QAAQqmqB,UAAY,GAEtC,IACEuV,kBAAsBthlB,OAAO9iB,GAC7Bt/G,KAAKintB,kBACL,MAAO94sB,GACPnO,KAAKkntB,cAAc/4sB,OAGtB,CACD7J,IAAK,SACL5I,MAAO,WACL,OAAoB+oC,IAAMwB,cAAc,MAAO,CAC7CmzC,UAAW,+CACX39E,IAAKuE,KAAK6qtB,cACT7qtB,KAAK8qtB,6BAILP,EAjJyC,CAkJhD5ga,iBACF4ga,GAAwBzrc,UAAY,CAClCkmS,mBAAoBjmS,IAAUx4Q,OAC9Bu+iB,YAAaq+J,GAActqY,WAC3B4xY,sBAAuB1rc,IAAU70P,KACjCsgsB,wBAAyBzrc,IAAU70P,KACnCygsB,6BAA8B5rc,IAAU70P,KACxCwgsB,+BAAgC3rc,IAAU70P,KAC1C0hP,KAAMw3c,GACNn+J,YAAalmS,IAAU99H,KACvBswW,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,QAGnB,IAQeynY,GARO,SAAyB/3gB,GAC7C,OAAoBzF,IAAMwB,cAAco/qB,EAAgB96qB,SAAU,MAAM,SAAU67qB,GAChF,OAAoB3hrB,IAAMwB,cAAc4hrB,GAAYt9qB,SAAU,MAAM,SAAUwgrB,GAC5E,OAAoBtmrB,IAAMwB,cAAcskrB,GAAyBzgrB,YAAS,GAAIs8qB,EAAiB2E,EAAa7grB,WCjLlH,SAASxd,GAAQvoB,EAAQwoB,GAAkB,IAAI7qB,EAAO1D,OAAO0D,KAAKqC,GAAS,GAAI/F,OAAOkgB,sBAAuB,CAAE,IAAIsO,EAAUxuB,OAAOkgB,sBAAsBna,GAASwoB,IAAmBC,EAAUA,EAAQrhB,QAAO,SAAUshB,GAAO,OAAOzuB,OAAO0uB,yBAAyB3oB,EAAQ0oB,GAAK/kB,eAAiBhG,EAAKsK,KAAKnE,MAAMnG,EAAM8qB,GAAY,OAAO9qB,EAE9U,SAASk2C,GAAchrB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAAS,MAAQvpB,UAAUV,GAAKU,UAAUV,GAAK,GAAIA,EAAI,EAAI0pB,GAAQtuB,OAAO6uB,IAAS,GAAIvgB,SAAQ,SAAUpI,GAAO0wE,YAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAAYlG,OAAO8uB,0BAA4B9uB,OAAO+uB,iBAAiBH,EAAQ5uB,OAAO8uB,0BAA0BD,IAAWP,GAAQtuB,OAAO6uB,IAASvgB,SAAQ,SAAUpI,GAAOlG,OAAOyJ,eAAemlB,EAAQ1oB,EAAKlG,OAAO0uB,yBAAyBG,EAAQ3oB,OAAa,OAAO0oB,EAEjf,SAASgrD,GAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,qBAAZG,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EAAO,GAAqB,oBAAVpwR,MAAsB,OAAO,EAAM,IAAsF,OAAhFp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBAAyB,EAAQ,MAAO+K,GAAK,OAAO,GAF9P0ge,GAA6B,OAAO,WAAkC,IAAsCl1d,EAAlCukE,EAAQiqC,YAAgBnqC,GAAkB,GAAIC,EAA2B,CAAE,IAAIE,EAAYgqC,YAAgBpiH,MAAM1B,YAAasV,EAASykE,QAAQC,UAAUH,EAAOz0E,UAAW00E,QAAqBxkE,EAASukE,EAAMlwE,MAAMjI,KAAM0D,WAAc,OAAOy+G,YAA2BniH,KAAM4T,IAqB5Z,IACWo3sB,GAA4B,SAAU3mF,GAC/CxsjB,YAAUmzoB,EAAc3mF,GAExB,IAAIh5W,EAASrzM,GAAagzoB,GAE1B,SAASA,IACP,IAAIrzqB,EAEJvqB,YAAgBptB,KAAMgrtB,GAEtB,IAAK,IAAIjgsB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GA4DzB,OAzDA0sB,EAAQ0zO,EAAOrqR,KAAKiH,MAAMojR,EAAQ,CAACrrR,MAAMsL,OAAO0f,IAEhDgqD,YAAgBqtC,YAAuB1qE,GAAQ,QAAS,CACtDi0N,KAAM,OAGR52L,YAAgBqtC,YAAuB1qE,GAAQ,cAA4BqvqB,uBAE3EhyoB,YAAgBqtC,YAAuB1qE,GAAQ,iBAAiB,WAC9D,IAAI4qE,EAAc5qE,EAAMzN,MACpBm6qB,EAAgB9hmB,EAAY8hmB,cAC5Ba,EAAe3imB,EAAY2imB,aAC3Bt5c,EAAOj0N,EAAM3Q,MAAM4kO,KACnBy4c,GAAeA,EAAc1B,EAAiB/2c,EAAMj0N,EAAMk0Q,QAC1Dq5Z,GAAcA,EAAavtqB,EAAM6xe,UAAW7xe,EAAMszqB,YAAYnjrB,YAGpEktC,YAAgBqtC,YAAuB1qE,GAAQ,eAAe,SAAUxpC,GACtEwpC,EAAMirE,SAAS,CACbgpJ,MAAM,IAGRtL,YAAQnyP,GACR,IAAIm2sB,EAAc3sqB,EAAMzN,MAAMo6qB,YAC1BA,GAAaA,EAAYn2sB,MAG/B6mE,YAAgBqtC,YAAuB1qE,GAAQ,YAAY,WACzD,IAAIisqB,EAAMjsqB,EAAMzN,MAAM05qB,IAElBh8L,EAAajwe,EAAMkuqB,gBAEvB,GAAKj+L,EAAL,CAIAjwe,EAAMirE,UAAS,SAAUquJ,GACvB,OAAKA,EAAUrF,KAIR,CACLA,KAAM,MAJC,QAQX,IAAIm4c,EAAcC,EAAgBJ,EAAI/7L,QAAQD,IAC9Cjwe,EAAM+qqB,YAAcqB,EACpBA,EAAY/hkB,QAAQzrE,MAAK,SAAUq1L,GACjCj0N,EAAMirE,SAAS,CACbgpJ,KAAMA,GACLj0N,EAAM0sqB,kBAHX,OAIY,SAAUl2sB,GACpBwpC,EAAM2sqB,YAAYn2sB,UAIfwpC,EAwST,OArSAF,YAAauzqB,EAAc,CAAC,CAC1B1mtB,IAAK,oBACL5I,MAAO,WACL,IAAIkotB,EAAM5jtB,KAAKkqC,MAAM05qB,IACrB31sB,YAAU21sB,EAAK,4DACf5jtB,KAAKkrtB,aAEN,CACD5mtB,IAAK,qBACL5I,MAAO,SAA4B2iH,GACjC,IAAIulmB,EAAM5jtB,KAAKkqC,MAAM05qB,IAErB,GAAIvlmB,EAAUulmB,KAAOA,IAAQvlmB,EAAUulmB,KAAO5jtB,KAAK6ltB,kBAAoB7ltB,KAAK6ltB,cAAcxnmB,GAAY,CACpG,IAAI8mmB,EAAiBnltB,KAAKkqC,MAAMi7qB,eAC5BA,GAAgBA,EAAenltB,KAAK8nhB,aAAazpa,IACrDr+G,KAAKkrtB,cAGR,CACD5mtB,IAAK,uBACL5I,MAAO,WACL,IAAIyptB,EAAiBnltB,KAAKkqC,MAAMi7qB,eAC5BA,GAAgBA,EAAenltB,KAAKwphB,WACxCi5L,EAAkBzitB,KAAK0itB,eAExB,CACDp+sB,IAAK,eACLP,IAAK,WACH,IAAI6nQ,EAAO5rQ,KAAKgnC,MAAM4kO,KAEtB,IAAKA,EACH,MAAO,GAGT,IAAIpoJ,EAAexjH,KAAKkqC,MACpBo9qB,EAAmB9jmB,EAAa8jmB,iBAChCwC,EAAqBtmmB,EAAasmmB,mBAClCW,EAAwBjnmB,EAAainmB,sBACrCD,EAA0BhnmB,EAAagnmB,wBACvCN,EAAiB1mmB,EAAa0mmB,eAC9BD,EAAmBzmmB,EAAaymmB,iBAChCU,EAA+BnnmB,EAAamnmB,6BAC5CD,EAAiClnmB,EAAaknmB,+BAC9CxD,EAAgB1jmB,EAAa0jmB,cAC7BD,EAAkBzjmB,EAAayjmB,gBAC/BhiK,EAAczhc,EAAayhc,YAC3Bt4B,EAAyBnpa,EAAampa,uBAC1C,MAAO,CACL26L,iBAAkBA,EAClBwC,mBAAoBA,EACpBW,sBAAuBA,EACvBD,wBAAyBA,EACzBN,eAAgBA,EAChBD,iBAAkBA,EAClBU,6BAA8BA,EAC9BD,+BAAgCA,EAChCxD,cAAeA,EACfD,gBAAiBA,EACjBr7c,KAAMA,EACNq5S,YAA6B,OAAhBA,QAAwC,IAAhBA,EAAyBA,EAAct4B,EAE5Ep7B,OAAQvxf,KAAKuxf,OACb1lM,MAAO7rT,KAAK6rT,SAOf,CACDvnT,IAAK,eACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MAErF,OAAI03qB,EAAW13qB,EAAM09e,YACZ19e,EAAM09e,WAAa,EAGxBg6L,EAAW13qB,EAAMs/e,WACZt/e,EAAMs/e,UAGR,OAER,CACDllhB,IAAK,gBACL5I,MAAO,WACL,IAAIwuC,EAAQxmC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK1D,KAAKkqC,MAErF,OAAI03qB,EAAW13qB,EAAM09e,YACZ19e,EAAM09e,WAGXg6L,EAAW13qB,EAAMs/e,WACZt/e,EAAMs/e,UAAY,EAGpB,OAER,CACDllhB,IAAK,YACLP,IAAK,WACH,OAAO/D,KAAK8nhB,iBAEb,CACDxjhB,IAAK,aACLP,IAAK,WACH,OAAO/D,KAAK6ltB,kBAEb,CACDvhtB,IAAK,SACLP,IAAK,WACH,IAAIwtf,EAASvxf,KAAKkqC,MAAMqnd,OAExB,GAAIqwN,EAAWrwN,GACb,OAAOA,EAGT,IAAI3lP,EAAO5rQ,KAAKgnC,MAAM4kO,KAEtB,OAAKA,EAIEA,EAAK2lP,OAHH,OAKV,CACDjtf,IAAK,QACLP,IAAK,WACH,IAAI6nQ,EAAO5rQ,KAAKgnC,MAAM4kO,KAEtB,IAAKA,EACH,OAAO,KAGT,IAAIg8M,EAAe5nd,KAAKkqC,MACpB2hR,EAAQ+7J,EAAa/7J,MACrBvwO,EAAQssY,EAAatsY,MACrBi2C,EAASq2V,EAAar2V,OACtBggY,EAASvxf,KAAKuxf,OAEd45N,EAAY,EAEZC,EAA6B,OAAVv/Z,EA1NV,EA0N0CA,EAEvD,GAAIvwO,GAASi2C,EAAQ,CACnB,IAAIgvK,EAAW30B,EAAKwqC,YAAY,CAC9ByV,MAAO,EACPrtC,SAAU+yO,IAEZ45N,EAAY7voB,EAAQA,EAAQilN,EAASjlN,MAAQi2C,EAASgvK,EAAShvK,OAGjE,OAAO65lB,EAAmBD,IAE3B,CACD7mtB,IAAK,aACLP,IAAK,WACH,IAAIq/G,EAASpjH,KAEb,OAAO0gtB,EAAe1gtB,KAAKkqC,OAAO,WAChC,IAAI0hO,EAAOxoJ,EAAOp8E,MAAM4kO,KAExB,OAAKA,EAIE+2c,EAAiB/2c,EAAMxoJ,EAAOyoM,OAH5BjgD,OAMZ,CACDtnQ,IAAK,UACLP,IAAK,WACH,IAAI6nQ,EAAO5rQ,KAAKgnC,MAAM4kO,KACtB,MAAO,GAAGtgQ,OAAOsgQ,EAAK49Q,UAAW,KAAKl+gB,OAAOtL,KAAK6rT,MAAO,KAAKvgT,OAAOtL,KAAKuxf,UAE3E,CACDjtf,IAAK,iBACLP,IAAK,WACH,IAAI6nQ,EAAO5rQ,KAAKgnC,MAAM4kO,KACtB,MAAO,GAAGtgQ,OAAOsgQ,EAAK49Q,UAAW,KAAKl+gB,OAAOtL,KAAKuxf,UAEnD,CACDjtf,IAAK,kBACL5I,MAAO,WACL,IAAIitoB,EAAe3ooB,KAAKkqC,MACpBy9qB,EAAYh/E,EAAag/E,UAG7B,OAFiBh/E,EAAay8E,YAG5B,IAAK,OACH,OAAO,KAET,IAAK,MACH,OAAoB3grB,IAAMwB,cAAcsirB,GAAS,CAC/CjktB,IAAK,GAAGgH,OAAOtL,KAAKqrtB,eAAgB,UAIxC,QACE,OAAoB5mrB,IAAMwB,cAAc2hrB,GAAY,CAClDtjtB,IAAK,GAAGgH,OAAOtL,KAAKsrtB,QAAS,WAC7B3D,UAAWA,OAIlB,CACDrjtB,IAAK,kBACL5I,MAAO,WACL,IAAIg+jB,EAAkB15jB,KAAKkqC,MAAMwvhB,gBAEjC,OAAKA,EAIej1hB,IAAMwB,cAAcqkrB,GAAW,CACjDhmtB,IAAK,GAAGgH,OAAOtL,KAAKsrtB,QAAS,WAJtB,OAOV,CACDhntB,IAAK,wBACL5I,MAAO,WACL,IAAIovtB,EAAwB9qtB,KAAKkqC,MAAM4grB,sBAEvC,OAAKA,EASermrB,IAAMwB,cAAcg8gB,GAAiB,CACvD39iB,IAAK,GAAGgH,OAAOtL,KAAKsrtB,QAAS,kBATtB,OAYV,CACDhntB,IAAK,iBACL5I,MAAO,WACL,IAAI4qC,EAAWtmC,KAAKkqC,MAAM5D,SAC1B,OAAoB7B,IAAMwB,cAAc4hrB,GAAYzhrB,SAAU,CAC5D1qC,MAAOsE,KAAKima,cACXjma,KAAKurtB,kBAAmBvrtB,KAAK05jB,kBAAmB15jB,KAAK8qtB,wBAAyBxkrB,KAElF,CACDhiC,IAAK,gBACL5I,MAAO,WACL,IAAIkshB,EAAa5nhB,KAAK4nhB,WAClBg8L,EAAM5jtB,KAAKkqC,MAAM05qB,IACjBh4c,EAAO5rQ,KAAKgnC,MAAM4kO,KAEtB,IAAKg8Q,EAAY,CACf,IAAI09L,EAAStltB,KAAKkqC,MAAMo7qB,OACxB,OAAoB7grB,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,WACa,oBAAXoltB,EAAwBA,IAAWA,GAG/C,GAAY,OAAR1B,GAAyB,OAATh4c,EAAe,CACjC,IAAIxkK,EAAUpnG,KAAKkqC,MAAMk9D,QACzB,OAAoB3iE,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,WACc,oBAAZknG,EAAyBA,IAAYA,GAGjD,IAAY,IAARw8mB,IAA0B,IAATh4c,EAAgB,CACnC,IAAIz9P,EAAQnO,KAAKkqC,MAAM/7B,MACvB,OAAoBs2B,IAAMwB,cAAc+6qB,EAAS,CAC/C9gtB,KAAM,SACY,oBAAViO,EAAuBA,IAAUA,GAG7C,OAAOnO,KAAKultB,mBAEb,CACDjhtB,IAAK,SACL5I,MAAO,WACL,IAAIkshB,EAAa5nhB,KAAK4nhB,WAClB0hH,EAAetpoB,KAAKkqC,MACpBkvC,EAAYkwjB,EAAalwjB,UACzBmoP,EAAW+nU,EAAa/nU,SAC5B,OAAoB98R,IAAMwB,cAAc,MAAO6D,YAAS,CACtDsvC,UAAW2noB,EAAgB,kBAAmB3noB,GAC9C,mBAAoBwuc,EACpBnshB,IAAKirtB,GAAUnlZ,EAAUvhU,KAAKirtB,aAC9B3vmB,MAAO,CACL2B,SAAU,aAEXj9G,KAAK4gtB,YAAa5gtB,KAAKwltB,qBAIvBwF,EA/W8B,CAgXrCrha,iBACFqha,GAAavpmB,aAAe,CAC1BtzG,MAAO,2BACPi5F,QAAS,qBACTk+mB,OAAQ,qBACRwF,uBAAuB,EACvB7lK,aAAa,EACbmgK,WAAY,SACZ1rJ,iBAAiB,EACjB7tQ,MA1XiB,GA4XnB,IAAI45Z,GAAmB1mc,IAAUC,UAAU,CAACD,IAAU70P,KAAM60P,IAAU33Q,OAkCtE,SAASoktB,GAAKthrB,EAAOzuC,GACnB,OAAoBgpC,IAAMwB,cAAco/qB,EAAgB96qB,SAAU,MAAM,SAAUrhC,GAChF,OAAoBu7B,IAAMwB,cAAc+krB,GAAclhrB,YAAS,CAC7DruC,IAAKA,GACJyN,EAASghC,OArChB8grB,GAAalsc,UAAY9mO,GAAcA,GAAc,GAAI4oqB,IAAa,GAAI,CACxE0G,iBAAkBvoc,IAAUx4Q,OAC5B+/B,SAAUy4O,IAAU33Q,KACpBgyE,UAAW8poB,GACX4G,mBAAoB/qc,IAAU70P,KAC9B/b,MAAOs3sB,GACPl0lB,OAAQwtJ,IAAUvkG,OAClBwqY,mBAAoBjmS,IAAUx4Q,OAC9Bg7T,SAAUgiZ,GACVn8mB,QAASq+mB,GACTH,OAAQG,GACRyE,eAAgBnrc,IAAU70P,KAC1B+/rB,iBAAkBlrc,IAAU70P,KAC5Bo6rB,YAAavlc,IAAU70P,KACvBm6rB,cAAetlc,IAAU70P,KACzBg9rB,cAAenoc,IAAU70P,KACzB+8rB,gBAAiBloc,IAAU70P,KAC3Bs/f,UbnYuB,SAAqBt/e,EAAOniB,EAAU6xT,GAC7D,IAAI4vM,EAAYt/e,EAAMniB,GAClB6/f,EAAa19e,EAAM09e,WACnBg8L,EAAM15qB,EAAM05qB,IAEhB,IAAK96S,EAAU86S,GACb,OAAO,KAGT,GAAI96S,EAAU0gH,GAAY,CACxB,GAAyB,kBAAdA,EACT,OAAO,IAAI5hhB,MAAM,IAAI0D,OAAOyc,EAAU,eAAezc,OAAOivC,YAAQive,GAAY,mBAAmBl+gB,OAAOsuU,EAAe,0BAG3H,GAAI4vM,EAAY,EACd,OAAO,IAAI5hhB,MAAM,aAAa0D,OAAOyc,EAAU,mCAGjD,IAAI2/f,EAAWk8L,EAAIl8L,SAEnB,GAAI8B,EAAY,EAAI9B,EAClB,OAAO,IAAI9/gB,MAAM,aAAa0D,OAAOyc,EAAU,6BAA6Bzc,OAAOo8gB,EAAW,EAAG,WAE9F,IAAK5+G,EAAU8+G,GACpB,OAAO,IAAIhghB,MAAM,IAAI0D,OAAOyc,EAAU,wEAAwEzc,OAAOsuU,EAAe,OAItI,OAAO,MawWPguM,WbtWwB,SAAsB19e,EAAOniB,EAAU6xT,GAC/D,IAAIguM,EAAa19e,EAAMniB,GACnByhgB,EAAYt/e,EAAMs/e,UAClBo6L,EAAM15qB,EAAM05qB,IAEhB,IAAK96S,EAAU86S,GACb,OAAO,KAGT,GAAI96S,EAAU8+G,GAAa,CACzB,GAA0B,kBAAfA,EACT,OAAO,IAAIhghB,MAAM,IAAI0D,OAAOyc,EAAU,eAAezc,OAAOivC,YAAQqte,GAAa,mBAAmBt8gB,OAAOsuU,EAAe,0BAG5H,GAAIguM,EAAa,EACf,OAAO,IAAIhghB,MAAM,aAAa0D,OAAOyc,EAAU,mCAGjD,IAAI2/f,EAAWk8L,EAAIl8L,SAEnB,GAAIE,EAAaF,EACf,OAAO,IAAI9/gB,MAAM,aAAa0D,OAAOyc,EAAU,6BAA6Bzc,OAAOo8gB,EAAU,WAE1F,IAAK5+G,EAAU0gH,GACpB,OAAO,IAAI5hhB,MAAM,IAAI0D,OAAOyc,EAAU,wEAAwEzc,OAAOsuU,EAAe,OAItI,OAAO,Ma2UPgqY,IAAKN,GACL4B,aAAcnmc,IAAU70P,KACxB4gsB,sBAAuB/rc,IAAU99H,KACjCgka,YAAalmS,IAAU99H,KACvB0rY,uBAAwB5tQ,IAAU99H,KAElCmkkB,WAAY5B,GACZ9pJ,gBAAiB36S,IAAU99H,KAC3BswW,OAAQkyN,GACR53Z,MAAO9sC,IAAUvkG,OACjB2qiB,eAAgBpmc,IAAU70P,KAC1BoxD,MAAOyjM,IAAUvkG,SAWS/1I,WAAM8E,WAAWiirB,IdlW3Clrd,aAASqhd,EAAmB,0EAA0Er2sB,OAAOi3sB,Ie9F/GmB,sBAA0BhwL,UAAYW,E,4MCMvBo3L,GAXG,WAChB,OACI,gBAACh9b,GAAA,EAAD,CAASpY,MAAM,6BAA6BC,QAAQ,YAApD,UACI,6BAAG,uBAAMztI,KAAK,OAAOtX,OAAO,KAAKj2C,MAAM,SACvC,6BACI,uBAAMx1E,EAAE,0P,yGCRT4ltB,GAAW,QAmBXC,GAAW,yCAAG,WACzBnqnB,EACAo6K,EACA2qQ,GAHyB,gDAAA5ghB,EAAA,sEAKFwrT,MAAM3vN,EAAK,CAAEo6K,WALX,WAKnB7yJ,EALmB,QAMX3gB,GANW,sBAOjB,IAAIxgG,MAAJ,yCAA4CmhH,EAAStjB,SAPpC,UASnB6xb,EAAgB31hB,OAAOonH,EAASmoM,QAAQntT,IAAI,mBAC5C6ntB,EAAiBt0L,EAAgB,EAAIA,EAAgB,KACtDvua,EAAStyC,MAASsyC,EAAStyC,KAAKykc,UAXZ,6BAYZ1lX,WAZY,UAYKzsC,EAASw+D,cAZd,qEAenBk7U,EAAS15Y,EAAStyC,KAAKykc,YACvBpxZ,EAAuB,GACzBgjC,EAAS,EACT++jB,EAAW,GAlBU,yBAoBOppN,EAAOh1W,OApBd,oBAoBfntJ,EApBe,EAoBfA,KAAM5E,EApBS,EAoBTA,OACV4E,EArBmB,qDAwBvBwpH,EAAO19G,KAAK1Q,GACZoxJ,GAAUpxJ,EAAMmG,OAGV+C,EAAiB,QADjBu1P,EAA2B,OAAnByxd,GAA2B9+jB,GAAU8+jB,EAAiBA,EAAiB,MACxE,UAAoB7utB,KAAKwjB,MAAe,IAATusI,EAAeqtG,GAA9C,eAA6Dp9P,KAAKwjB,MAAMusI,EAAS4+jB,IAAjF,MACTnlM,GAAc3hhB,IAASintB,IACzBA,EAAWjntB,EACX2hhB,EAAW,CAAEz5X,SAAQqtG,WA/BA,mCAmCH,IAAlBrwI,EAAOjoH,OAnCc,0CAoChBioH,EAAO,IApCS,QAwCzB,IAFM9uE,EAAO,IAAIw6G,WAAW1I,GACxBh/I,EAAS,EACb,MAAoBg8G,EAApB,eAAWwsE,EAAiB,KAC1Bt7I,EAAKtzC,IAAI4uL,EAAOxoL,GAChBA,GAAUwoL,EAAMz0L,OA1CO,yBA4ClBm5C,GA5CkB,4CAAH,0DCDlBw0E,GAAYJ,aAAW,iBAAO,CAChC73G,KAAM,CACJ+jE,MAAO,OACPi2C,OAAQ,OACRn2C,QAAS,OACTK,cAAe,UAEjBiuD,OAAQ,CACN1I,OAAQ,EACR/jB,SAAU,SACVnhC,QAAS,EACT4sD,YAAa,GACbuB,UAAW,QAEbnuD,QAAS,CACLA,QAAS,SAEbgwoB,WAAY,CACR1woB,QAAS,OACTM,eAAgB,SAChBzC,WAAY,UAEhB8yoB,UAAW,CACP3voB,UAAW,EACXC,SAAU,EACV2sO,WAAY,GAEhBgja,UAAW,CACP5voB,UAAW,EACXC,SAAU,EACV2sO,WAAY,GAEhBvkM,MAAO,CACH,uBAAwB,CACpB,kBAAmB,aAEvB,kDAAmD,CAC/C,qBAAsB,OACtBlpC,OAAQ,GAEZ,kDAAmD,CAC/C,qBAAsB,OACtBA,OAAQ,IAGhB0woB,eAAgB,CACZ7woB,QAAS,OACTM,eAAgB,YAEpB+pB,OAAQ,CACJrqB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChB61C,OAAQ,OACRz1C,QAAS,GACTmxC,UAAW,UAEf4uS,SAAU,CACNvgV,MAAO,MACPgB,SAAU,IACVggC,UAAW,IAEf4vmB,YAAa,CACT5vmB,UAAW,QAIb6vmB,GAAc,SAACpzmB,GAAD,OAAoBA,EAAQ2ymB,IAAUtxd,QAAQ,IA2VnDgyd,OA1Vf,YAUI,IATAC,EASD,EATCA,WACAC,EAQD,EARCA,WACAC,EAOD,EAPCA,UACA5nlB,EAMD,EANCA,QACA8uF,EAKD,EALCA,KACAk/F,EAID,EAJCA,SAID,IAHC65Z,yBAGD,MAHqB,EAGrB,EAFC9lY,EAED,EAFCA,mBAED,IADCgoH,oBACD,MADgB,IAChB,EACC,EAAoChwZ,mBAAS8tqB,GAA7C,mBAAO5kM,EAAP,KAAmB6kM,EAAnB,KACA,EAAwD/tqB,mBAAS,GAAD,OAAI8tqB,IAApE,mBAAOE,EAAP,KAA6BC,EAA7B,KACA,EAAgCjuqB,mBAAS,MAAzC,mBAAOgpe,EAAP,KAAiBklM,EAAjB,KACA,EAA0BluqB,mBAASgwZ,GAAnC,mBAAO7iJ,EAAP,KAAcgha,EAAd,KACA,EAA8CnuqB,mBAAS,GAAD,OAAmB,IAAfgwZ,IAA1D,mBAAOo+Q,EAAP,KAAwBC,EAAxB,KACA,EAAwDruqB,oBAAS,GAAjE,mBAAOsuqB,EAAP,KAA6BC,EAA7B,KACA,EAA8BvuqB,mBAA4B,MAA1D,mBAAOwuqB,EAAP,KAAgBC,EAAhB,KACA,EAAwCzuqB,mBAAkC,MAA1E,mBAAO0uqB,EAAP,KAAqBC,EAArB,KACA,EAAoC3uqB,oBAAS,GAA7C,mBAAO4uqB,EAAP,KAAmBC,EAAnB,KACA,EAAsC7uqB,mBAAS,GAA/C,mBAAO8uqB,EAAP,KAAoBC,EAApB,KACQ1hsB,GAAM+xB,aAAe,gBAArB/xB,EACF8gC,GAAgBkgK,eAChB7zI,GAAUs2C,KACVk+lB,GAAmBxirB,iBAAO,MAI1ByirB,GAAoB,WACtB,IAAMC,EAAyBhyqB,SAAS8wqB,EAAsB,KACzD/qtB,OAAOy6C,MAAMR,SAAS8wqB,EAAsB,MAAQkB,EAAyB,GAAKA,GAA0BlmM,EACzGkmM,IAA2BhmM,IAC3BimM,KACApB,EAAcmB,IAGlBjB,EAAwB,GAAD,OAAI/kM,KAW7BimM,GAAgB,WAClBpnnB,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,aAAe,MAGjBkhqB,GAAY,WACdtnnB,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,QAAU,MAGZmhqB,GAAa,WACfvnnB,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,SAAW,MAgBbohqB,GAAqB,WACvB,IAAMC,EAAwBtyqB,SAASkxqB,EAAiB,IACxD,GAAInrtB,OAAOy6C,MAAM8xqB,GACbnB,EAAmB,GAAD,OAAY,IAARlha,QAD1B,CASA,GALIqia,EAAgC,IAARria,EACxBkia,KACOG,EAAgC,IAARria,GAC/Bmia,KAEAE,GAAyB,GAGzB,OAFArB,EAAS,UACTE,EAAmB,MAGvB,GAAImB,GAAyB,IAGzB,OAFArB,EAAS,QACTE,EAAmB,OAGvBA,EAAmB,GAAD,OAAImB,IACtBrB,EAASqB,EAAwB,OAmC/BC,GAAsB,SAAChgtB,GACzBs4F,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,gBAAkB,MAGpBuhqB,GAAoC,IAAfxmM,EACrBymM,GAAqBzmM,IAAeF,EACpC4mM,GAAmBzia,GAAS,EAC5B0ia,GAAoB1ia,GAAS,IACnC1lR,qBAAU,WACNsgE,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,gBAAkB,OAEvB,IACH,IAAM6yE,GAAYx0F,kBAAO,IAAInd,MAAOC,WACpCmY,qBAAU,WACN,OAAO,WACH,IAAMqlZ,GAAU,IAAIz9Z,MAAOC,UAC3By4E,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,yBAA4B2+X,EAAU9rT,GAAU53F,SAAW,KAAMsyN,QAAQ,SAGlF,IAEHj0N,qBAAU,WACN,IAAMu1O,EAAa,IAAIC,gBAiBvB,OAhBAwxc,EAAW,MACXE,EAAgB,MAChBE,GAAc,GACd5B,GAAYl4f,EAAMioD,EAAWE,OAAQyxc,GAChC92oB,MAAK,SAACv7B,GACE0gO,EAAWE,OAAOm6P,SACnBo3M,EAAWnyqB,MAGlB2rJ,OAAM,SAACx4L,GACCutQ,EAAWE,OAAOm6P,UACnBw3M,GAAc,GACdY,SAIL,kBAAMzyc,EAAWG,WACzB,CAACpoD,EAAM+5f,IAEV,IAAMgB,GAAehorB,mBAAQ,kBAAO0mrB,EAAU,CAAElyqB,KAAMkyqB,GAAY,OAAO,CAACA,IAIpEuB,GAAgB,SAAC5yT,GACnB,IAAM6yT,EAAwB,OAAb7yT,GAAwC,OAAnBA,EAAS1hK,MAC/C,OACI,uBAAK/gL,UAAWF,GAAQusB,OAAxB,UACI,eAAC+T,GAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAlC,SAEQyonB,EACM3isB,GAAE,4BAA6B,CAAE+gI,OAAQq/jB,GAAYtwT,EAAS/uQ,QAASqtG,MAAOgyd,GAAYtwT,EAAS1hK,SACtF,OAAb0hK,EACI9vY,GAAE,8BAA+B,CAAE+gI,OAAQq/jB,GAAYtwT,EAAS/uQ,UAChE/gI,GAAE,uBAGpB,eAAC8oS,GAAA,EAAD,CACIz7O,UAAWF,GAAQ2iV,SACnBniT,QAASg1mB,EAAW,cAAgB,gBACpChztB,MAAOgztB,EAA6B,IAAlB7yT,EAAS/uQ,OAAe+uQ,EAAS1hK,WAAQr+P,QAKrE6ytB,GACF,uBAAKv1oB,UAAWF,GAAQusB,OAAxB,UACI,eAAC+T,GAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAlC,SACKl6E,GAAE,0BAEP,eAAC44F,GAAA,EAAD,CAAQvrC,UAAWF,GAAQgzoB,YAAanwtB,KAAK,QAAQ29G,QAAQ,WAAWzT,MAAM,UAAU4e,QA7B5E,WAChB4omB,GAAe,SAAC14hB,GAAD,OAAaA,EAAU,MA4BlC,SACKhpK,GAAE,wBAIf,OACI,uBAAKqtD,UAAWF,GAAQ3hE,KAAxB,UACI,gBAACs6G,GAAA,EAAD,CAAOZ,UAAW,EAAG73C,UAAW2B,mBAAK7B,GAAQwwD,OAAQxwD,GAAQ4yoB,YAA7D,UACI,eAACtymB,GAAA,EAAD,CAAYvT,MAAM,cAAc3sB,UAAU,MAAMirC,QAAQ,EAAMnrC,UAAW2B,mBAAK7B,GAAQ8yoB,WAAtF,SACKr5Z,IAEL,uBAAKv5O,UAAW2B,mBAAK7B,GAAQ4yoB,WAAY5yoB,GAAQ8yoB,WAAjD,UACI,uBAAK5yoB,UAAW2B,mBAAK7B,GAAQ4yoB,YAA7B,UACI,eAACpxlB,GAAA,EAAD,CAAY7V,QA9JT,WACnBgpmB,KACApB,EAAc7kM,EAAa,GAC3B+kM,EAAwB,GAAD,OAAI/kM,EAAa,KA2Ja1qa,SAAUkxmB,GAA/C,SACI,eAAC,KAAD,MAEJ,eAACl4Z,GAAA,EAAD,CACIh2T,KAAK,SACLo7G,MAAO,CAAEhgC,MAAO,QAChBlC,UAAWF,GAAQurC,MACnB/oH,MAAOgxtB,EACPlxmB,SA3ME,SAACpzG,GACvBuktB,EAAwBvktB,EAAE4kB,OAAOtxB,QA2MbgqI,OA9LA,SAACt9H,GACrBultB,MA8LoB1nZ,WA5LC,SAAC79T,GACR,UAAVA,EAAE9D,KACFqptB,MA2LgBh0mB,WAAY,CACR2B,MAAO,CACH2R,UAAW,aAIvB,uBAAM3R,MAAO,CAAE//B,OAAQ,UAAvB,eACA,eAACi+B,GAAA,EAAD,UAAakua,IACb,eAAChtZ,GAAA,EAAD,CAAY7V,QA5KT,WACnBgpmB,KACApB,EAAc7kM,EAAa,GAC3B+kM,EAAwB,GAAD,OAAI/kM,EAAa,KAyKa1qa,SAAUmxmB,GAA/C,SACI,eAAC,KAAD,SAGR,uBAAKj1oB,UAAW2B,mBAAK7B,GAAQ4yoB,YAAaxwmB,MAAO,CAAE4M,WAAY,QAA/D,UACI,eAACwS,GAAA,EAAD,CAAY7V,QA9HT,WACnBmpmB,KACA,IAAMY,EAA4B,KAAhB/ia,EAAQ,KACtB+ia,GAAY,IACZ7B,EAAmB,GAAD,OAAI6B,IACtB/B,EAAShha,EAAQ,OAEjBkha,EAAmB,MACnBF,EAAS,OAsHwC3vmB,SAAUqxmB,GAA/C,SACI,eAAC,KAAD,MAEJ,eAACr4Z,GAAA,EAAD,CACIh2T,KAAK,SACLo7G,MAAO,CAAEhgC,MAAO,QAChBlC,UAAWF,GAAQurC,MACnB/oH,MAAOoxtB,EACPtxmB,SApLG,SAACpzG,GACxB2ktB,EAAmB3ktB,EAAE4kB,OAAOtxB,QAoLRgqI,OA1JC,SAACt9H,GACtB6ltB,MA0JoBhoZ,WAxJE,SAAC79T,GACT,UAAVA,EAAE9D,KACF2ptB,MAuJgBnxmB,WAAY,CACR6kN,aAAc,KAElBhoN,WAAY,CACR2B,MAAO,CACH2R,UAAW,aAIvB,eAACyN,GAAA,EAAD,CAAY7V,QA7JV,WAClBkpmB,KACA,IAAMa,EAA4B,KAAhB/ia,EAAQ,KACtB+ia,GAAY,KACZ7B,EAAmB,GAAD,OAAI6B,IACtB/B,EAAShha,EAAQ,OAEjBkha,EAAmB,OACnBF,EAAS,KAqJuC3vmB,SAAUoxmB,GAA9C,SACI,eAAC,KAAD,YAIZ,uBAAKl1oB,UAAW2B,mBAAK7B,GAAQ8yoB,UAAW9yoB,GAAQ+yoB,gBAAhD,UACI,eAAChimB,GAAA,EAAD,CAASC,MAAOn+F,GAAE,0BAAlB,SACI,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS,WACjBpe,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,kBAAoB,KAExBn+B,OAAOi8E,KAAP,UAAe8oH,EAAf,iBAA4Bm0T,GAAc,WAJ9C,SAMI,eAAC,KAAD,QAGR,eAAC39Z,GAAA,EAAD,CAASC,MAAOn+F,GAAE,sBAAlB,SACI,gCACI,eAAC2uG,GAAA,EAAD,CAAYxd,UAAWqvmB,EAAW1nmB,QAAS,WACvCynmB,IACA7lnB,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,eAAiB,MAHzB,SAMI,eAAC,GAAD,UAIZ,eAACo9D,GAAA,EAAD,CAASC,MAAOn+F,GAAE,sBAAlB,SACA,gCACI,eAAC2uG,GAAA,EAAD,CAAYxd,SAAUqvmB,EAAW1nmB,QAAS,WACtCwnmB,IACA5lnB,KAAmB9rE,mBAAgBmzrB,eAAgBjhqB,GAAc,CAC7D,eAAiB,MAHzB,SAMI,eAAC,KAAD,UAIR,eAAC6tE,GAAA,EAAD,CAAY7V,QAAS8f,EAArB,SACI,eAAC,KAAD,YAIZ,sBAAKrpB,MAAO,CAAE0mB,KAAM,EAAG3X,SAAU,QAAU5uH,IAAKiytB,GAAhD,SAEQJ,EACMqB,GACiB,OAAjBH,GACIC,GAAcrB,GACd,eAAC,GAAD,CACE35f,KAAM+6f,GACNnK,cA5LE,SAACn9qB,GAC3B0lrB,EAAY1lrB,EAAQwgf,WA4LI48L,YAAa6J,GACb/mnB,QAASqnnB,GAAc,MACvBtgtB,MAAOwgtB,GACP3irB,QAAS,CACL27c,iBAAiB,GAPvB,SAUE,eAAC,GAAD,CACI97L,MAAOA,EACP+7N,WAAYA,EACZy8L,cAAe,WACX,IAAMwK,EAAgBnB,GAAiB5lrB,SAClCklrB,GAAwB6B,GAAiBnoY,IAC1CmoY,EAAcjna,YAA+B,OAAlB8+B,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB3iV,IAAI,KAAM,GAAK8nT,EAC9Dgja,EAAclna,aAAgC,OAAlB++B,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB3iV,IAAI,KAAM,GAAK8nT,EAC/Doha,GAAwB,KAGhCvzJ,iBAAiB,EACjBoxJ,uBAAuB,YCjarD/rH,GAAa,WACjB,IAAMrpO,EAAiBhkV,sBAAY6rK,YAAsB,aACnDt1G,EAAS8zK,cACf,EAA0Bt3O,IAAMia,SAAS,GAAzC,mBAAOkrJ,EAAP,KAAcklhB,EAAd,KAqBA,OApBgB,SAACp7Z,GACf,IAAKA,EACH,OAAO,KAET,IACE,OAAOgiE,GAAkBztR,EAAOJ,QAAQ6rN,EAAQ,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAAEiwgB,UAAU,KACjL,MAAOt+kB,GAWP,OAVIwhM,EAAQ,GACV/wJ,YAAW,WACTi2qB,EAASllhB,EAAQ,KAChB,KAEL5hL,QAAQ08E,MAAM,iDAAmD,CAC/Dt8F,IACAwhM,QACA3hG,WAEK,QAMP8mnB,GAAoB3/lB,aAAW,SAACl0C,GAAD,MAAmB,CACtD62C,MAAO,CACL9U,SAAU,WACV3hC,MAAO,SAACpxC,GAAD,OAAmCA,EAAMqirB,UAAY,MAAQ,OACpEh7lB,OAAQ,SAACrnF,GAAD,OAAmCA,EAAMqirB,UAAY,MAAQ,OACrEvnmB,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzBzN,IAAK,SAACpqF,GAAD,OAAmCA,EAAMqirB,UAAY,MAAQ,OAClEhysB,KAAM,SAAC2vB,GAAD,OAAmCA,EAAMqirB,UAAN,MAA0B,OACnElwlB,UAAU,6BAcR2ylB,GAA8B,SAAC,GAA4H,IAA1HrqlB,EAAyH,EAAzHA,QAAS+uL,EAAgH,EAAhHA,OAAQf,EAAwG,EAAxGA,SAAwG,IAA9Fs8Z,wBAA8F,aAApEzC,yBAAoE,MAAhD,EAAgD,EAA7C9lY,EAA6C,EAA7CA,mBAA6C,IAAzBgoH,oBAAyB,MAAV,IAAU,EAC9J,EAA8BhwZ,mBAAwB,MAAtD,mBAAOgxR,EAAP,KAAgBw/Y,EAAhB,KACA,EAAkCzqrB,IAAMia,SAASuwqB,GAAjD,mBAAO1C,EAAP,KAAkB4C,EAAlB,KACMj2oB,EAAU61oB,GAAkB,CAAExC,cAC9B6C,EAAarwH,KAMnB,OALAt6jB,IAAM0B,WAAU,WACVutR,GACFw7Z,EAAWE,EAAW17Z,MAEvB,CAACA,IAEF,eAAC0+D,EAAA,EAAD,yBACEznR,MAAM,EACNg6B,QAAS,kBAAMA,MACX4nlB,EAAY,GAAK,CAAE10H,cAAe,CAAEv8e,MAAO,CAAE0J,gBAAiB,kBAHpE,aAKE,sBAAK5rC,UAAWF,EAAQ64C,MAAxB,SAEI29M,EAAU,eAAC,GAAD,CAER68Y,UAAWA,EACXF,WAAY,kBAAM8C,GAAa,IAC/B7C,WAAY,kBAAM6C,GAAa,IAC/BxqlB,QAAS,kBAAMA,KACf8uF,KAAMi8G,EACN/c,SAAUA,EACV+7I,aAAcA,EACd89Q,kBAAmBA,EACnB9lY,mBAAoBA,GATfhX,GAUF,WAOT2/Y,GAAW5qrB,IAAM4G,KAAK2jrB,IAGbK,Q,olBCCFj9E,GAAkB,SAAC,GAAyE,EAAvE18Q,eAAwE,IAAD,EAAvDztR,EAAuD,EAAvDA,OAAQo4F,EAA+C,EAA/CA,QAASrlE,EAAsC,EAAtCA,KAAMx9B,EAAgC,EAAhCA,OAAQ8pO,EAAwB,EAAxBA,UAAW6nF,EAAa,EAAbA,OACpF5oT,GAAQ,mBACX9rE,QAAKghG,OAAS,yBADH,cAEXhhG,QAAKkhG,eAAiB,iCAFX,cAGXlhG,QAAKszP,QAAU,mBAHJ,cAIXtzP,QAAKu+mB,YAAc,mBAJR,cAKXv+mB,QAAK4uB,KAAO,mBALD,cAMX5uB,QAAKw+mB,iBAAmB,mBANb,GAQbhxiB,EAAOJ,QAAQ,CACdvB,QAAS,OACTC,SAAUA,EAASy0B,GACnBvkD,KAAM,CAMJohD,SAAUwoE,EAAQt8L,IAAI,YACtB4zH,yBAA0B0oE,EAAQt8L,IAAI,4BAA4B,IAEpE4uC,OAAQ,CACN6qD,YAGHjnB,KAAK+wP,GACL3gI,MAAMwoN,IAGImgU,GAAoB,SAAC53lB,EAAyB63lB,EAAuBC,EAAjD,GAI1B,IAHH7krB,EAGE,EAHFA,SACA01J,EAEE,EAFFA,QACA7iG,EACE,EADFA,OAEIs8B,EAAYumE,EAAQt8L,IAAI,MAE9B,GAAgB,MAAZ2zH,EAAkB,CAEpB,IAAIV,EAAUU,EACVuC,EAAes1lB,EACnB,GAA8B,aAA1Bv4lB,EAAQjzH,IAAI,WASC,OAPfizH,EAAUqpE,EAAQt8L,IAAI,YAAY4d,MAAK,SAAC8tsB,EAAqBtztB,GAC3D,GAA2B,aAAvBsztB,EAAK1rtB,IAAI,UAEX,OADAk2H,EAAe99H,GACR,OAIYqztB,EAErB,YADAA,IAKJ,IAAMp4lB,EAAWC,IAAQC,uBAAuBN,GAC1CO,EAAWP,EAAQjzH,IAAI,UACvByzH,EAAmBR,EAAQjzH,IAAI,MAE/B0zH,EAAoC,IAAjBwC,EACnBhiH,iBACAooL,EACGt8L,IAAI,YACJwH,QAAO,SAACkqE,GACP,OAAOA,EAAE1xE,IAAI,QAAUyzH,KAExBjsH,QAAO,SAAAsM,GAAC,OAAU,OAANA,KAEf8/G,EAA2B0oE,EAAQt8L,IAAI,4BAE7C4mC,EAAS,IAAIitF,OAMbjtF,EAAS,IAAI8tD,KAAsB,CACjC+E,SACA45B,WACAO,2BACAE,SAAUJ,EACVK,kBAAmBP,KAGrB5sF,EAAS,IAAIutF,MAA6B,CACxCC,iBAAkB8B,KAGpBtvF,EAAS,IAAIotF,MAAmBR,IAIhC5sF,EAAS,IAAIqtF,KAA2C,CACtDT,WACAU,kBAAmBjB,EAAQjzH,IAAI,iBAKjC4mC,EAAS,IAAIowD,KAAgC++B,IAC7CnvF,EAASv+B,eAAK,GAAD,OAAIgoB,+BAGRs7rB,GAAyB,SAAC,GAIhC,IAHJrvhB,EAGG,EAHHA,QACA11J,EAEG,EAFHA,SACA5e,EACG,EADHA,EAEK+tG,EAAYumE,EAAQt8L,IAAI,MACxB4rtB,EAActvhB,EAAQt8L,IAAI,SAAWgoB,EAAE,8BAC7C4e,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIijO,oBACJh6N,MAAO,CAAEhf,OAAQa,EAAE,8BAA+Bu4O,aAAcqrd,MAElEhlrB,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIijO,oBACJv5J,MAAM,KAERhgE,EAAS,IAAIswD,IAAiC6+B,KAE1C81lB,G,4MACGpmlB,KAAO,E,EAEPxiG,MAAQ,CACbggO,MAAO,GACPx4P,KAAM,GACNizW,KAAM,GACNt0I,MAAO,EACP2mb,iBAAiB,EACjBM,kCAAkC,EAClCy7D,UAAW,GACXC,cAAc,EACdz7D,mBAAmB,G,EAGd07D,kBAAoBn/hB,oBAAS,SAACpiL,EAAqB9S,GACxD,MAGI,EAAKwuC,MAFPS,EADF,EACEA,SACA01J,EAFF,EAEEA,QAEF,EAAKz9E,SAAS,CAACyxiB,mBAAmB,IAClC1pnB,EAAS,IAAI0wD,KAAoB,CAC/By+B,UAAWumE,EAAQt8L,IAAI,MACvBs8L,QAASA,EAAQ34L,IAAI8G,EAAM9S,GAC3BogpB,cAAc,EACd11B,WAAW,EACX4pG,6BAA6B,OAE9B,K,EAcIh/c,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAAsD,EAAK/mO,MAAnDm2J,EAAR,EAAQA,QAAS4vhB,EAAjB,EAAiBA,eAAgBzynB,EAAjC,EAAiCA,OAAQ7yD,EAAzC,EAAyCA,SACX,EAAK3D,MAA3BqtnB,mBAEiBh0d,EAAQt8L,IAAI,kBAAoBs6G,EAAUgiF,QAAQt8L,IAAI,iBAC7E,EAAK6+G,SAAS,CAACyxiB,mBAAmB,IAEhCh0d,EAAQt8L,IAAI,cAAgBs6G,EAAUgiF,QAAQt8L,IAAI,cACpD,EAAK6+G,SAAS,CAACokJ,MAAO3mE,EAAQt8L,IAAI,cAEG,IAAjCs8L,EAAQt8L,IAAI,YAAYhI,MAAck0tB,GACxCtlrB,EAAS,IAAIusE,KAAoC,CAAE1Z,SAAQs8B,UAAWumE,EAAQt8L,IAAI,MAAOi4H,SAAS,O,EAKjGo2gB,gBAAkB,WACvB,MAA0D,EAAKlomB,MAAvDm2J,EAAR,EAAQA,QAAS7iG,EAAjB,EAAiBA,OAAQk4R,EAAzB,EAAyBA,eAAgBztR,EAAzC,EAAyCA,OAAQ+yB,EAAjD,EAAiDA,KACjDo3gB,GAAgB,CACV18Q,iBACAztR,SACAo4F,UACArlE,OACAx9B,SACA8pO,UAAW,SAACxlL,GACV,IAAM9mG,EAAO8mG,EAAI56G,QAAQmiB,KAAKsylB,OACxBk0E,EAAYzxtB,OAAO0D,KAAKk5C,GAAMhyC,KAAI,SAAA1E,GAAG,OAAI02C,EAAK12C,MACpD,EAAKs+G,SAAS,CACZitmB,YACAC,cAAc,KAGlB3gU,OAAQ,WACN,EAAKvsS,SAAS,CACZktmB,cAAc,Q,EAMnBhvd,aAAe,SAAC14P,GACrB,MAKIA,EAJF4kB,OACExe,EAFJ,EAEIA,KACA9S,EAHJ,EAGIA,MAGJ,EAAKknH,SAAL,eAAgBp0G,EAAO9S,IACR,UAAT8S,GAA8B,KAAV9S,GACxB,EAAKq0tB,kBAAkBvhtB,EAAuB9S,I,EAI3Cw0tB,mBAAqB,SAACC,GAC3B,MAGI,EAAKjmrB,MAFPS,EADF,EACEA,SACA01J,EAFF,EAEEA,QAGF11J,EAAS,IAAI0wD,KAAoB,CAC/By+B,UAAWumE,EAAQt8L,IAAI,MACvBs8L,QAASA,EAAQ34L,IAAI,WAAYyotB,GACjC/pG,WAAW,EACX01B,cAAc,M,EAKX9wd,QAAU,SAACzyK,EAAWgoc,EAAiBziI,GAC5C,IAAMlqU,EAASnS,MAAMuN,KAAKuJ,GAC1B,EAAkB3E,EAAOxE,OAAOmxc,EAAY,GAArCrsc,EAAP,oBAGA,OAFAN,EAAOxE,OAAO0uU,EAAU,EAAG5pU,GAEpBN,G,EAGFm/R,UAAY,SAACn/R,EAAaozP,GAE/B,GAAKpzP,EAAOk6L,YAAZ,CAIA,IAAMqihB,EAAgB,EAAKnliB,QACzBg8E,EACApzP,EAAOqZ,OAAO9wB,MACdyX,EAAOk6L,YAAY3xM,OAGrB,EAAKymH,SAAS,CACZokJ,MAAOmpd,EACP97D,mBAAmB,IAGrB,EAAK67D,mBAAmBC,K,EAGnBC,aAAe,SAACtia,GAAD,MAA0B,CAC9C/yL,WAAY+yL,EAAiB,wBAA0B,UACvD1yO,QAAS,OACTU,QAAS,EACTuuC,SAAU,S,EAGL4jQ,kBAAoB,WACzB,EAAKrrQ,SAAS,CAAEkxiB,iBAAkB,EAAK9snB,MAAM8snB,mB,EAGxCt7hB,YAAc,SAACxB,EAAwBiD,GAC5C,MAII,EAAK/vF,MAHPS,EADF,EACEA,SACA01J,EAFF,EAEEA,QACA7iG,EAHF,EAGEA,OAGF8xnB,GAAkBt4lB,EAASiD,EAAc,EAAKo2lB,iBAAiB,CAC3D1lrB,WACA01J,UACA7iG,Y,EAIC8ynB,wBAA0B,SAACtpd,GAChC,MAKI,EAAK98N,MAJPm2J,EADF,EACEA,QACAkwhB,EAFF,EAEEA,oBACA/ynB,EAHF,EAGEA,OACAqgD,EAJF,EAIEA,KAGF,EAGI,EAAK72G,MAFPotnB,EADF,EACEA,iCACAC,EAFF,EAEEA,kBAGF,OAAOrtZ,EAAM5xP,QAAU,EACvB4xP,EAAMh+P,KACJ,SAACguH,EAAwB76H,GAAzB,OACE,eAAC,IAAD,CAEE4vR,YAAW,UAAK/0J,EAAQjzH,IAAI,MAAjB,YAA0B5H,GACrCA,MAAOA,EACP+wT,eAAgBrvK,GAAQw2gB,EAJ1B,SAMG,SAAC7siB,EAAe2jM,GAAhB,OACC,0DACE1vT,IAAK+rH,EAAS0lJ,UACV1lJ,EAASqlM,gBACTrlM,EAASmlM,iBAHf,IAIErxM,MAAK,yBACHlgC,QAAS,QACN+vO,EAAS9vB,YACT7zK,EAASqlM,eAAevxM,OAP/B,SAUE,eAACu4iB,EAAA,EAAD,CACEr7hB,YAAa,EAAKA,YAClBh7B,OAAQA,EACRs8B,UAAWumE,EAAQt8L,IAAI,MACvBizH,QAASA,EACT21L,gBAAiBnlM,EAASmlM,gBAE1B4ja,oBAAqBA,EACrBp8D,aAAa,EACbl6hB,aAAc99H,EACdi4pB,iCAAkCA,EAClCC,kBAAmBA,EACnBhB,qBAAsB,SAAC33pB,GAAD,OAAoB,EAAKknH,SAAS,CAACyxiB,kBAAmB34pB,MANvEs7H,EAAQjzH,IAAI,YAvBzB,UACUizH,EAAQjzH,IAAI,MADtB,YAC+B5H,OAmCjC6qQ,EAAMh+P,KACN,SAACguH,EAAwB76H,GAAzB,OACE,eAAC03pB,EAAA,EAAD,CACEr7hB,YAAa,EAAKA,YAClBh7B,OAAQA,EACRs8B,UAAWumE,EAAQt8L,IAAI,MACvBizH,QAASA,EACT21L,iBAAiB,EAEjB4ja,oBAAqBA,EACrBp8D,aAAa,EACbl6hB,aAAc99H,EACdi4pB,iCAAkCA,EAClCC,kBAAmBA,EACnBhB,qBAAsB,SAAC33pB,GAAD,OAAoB,EAAKknH,SAAS,CAACyxiB,kBAAmB34pB,MANvEs7H,EAAQjzH,IAAI,W,EA0BlBystB,oBAAsB,WAC3B,MAII,EAAKtmrB,MAHPm2J,EADF,EACEA,QACA11J,EAFF,EAEEA,SACA6yD,EAHF,EAGEA,OAGIs8B,EAAYumE,EAAQt8L,IAAI,MAC9B4mC,EAAS,IAAIwwD,IAAoB,CAC/B2+B,YACAu+gB,gBAAiB,kBAAM1tmB,EAAS,IAAIusE,KAAoC,CAAE1Z,SAAQs8B,YAAW65gB,eAAe,SAE9G,EAAK1lR,qB,EAGAoiW,iBAAmB,WACxB,MAII,EAAKnmrB,MAHPm2J,EADF,EACEA,QACA11J,EAFF,EAEEA,SACA4lrB,EAHF,EAGEA,oBAGIz2lB,EAAYumE,EAAQt8L,IAAI,MAC9B4mC,EAAS,IAAIowD,KAAgC++B,IAC7CnvF,EAASv+B,eAAKmktB,IAGd5lrB,EAAS,IAAI41F,OAAqB,K,EAG7BkwlB,oBAAsB,WAC3B,MAAkC,EAAKvmrB,MAA/B6iB,EAAR,EAAQA,YAAapiB,EAArB,EAAqBA,SACjBoiB,GACFpiB,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIymW,KACJ/8R,MAAM,M,uDA9PZ,WACE,IAAQ01F,EAAYrgM,KAAKkqC,MAAjBm2J,QACRrgM,KAAK4iH,SAAS,CACZp0G,KAAM6xL,EAAQt8L,IAAI,QAClB09W,KAAMphL,EAAQt8L,IAAI,QAClBopO,MAAO9sC,EAAQt8L,IAAI,SACnBqwpB,iCAAkC/zd,EAAQt8L,IAAI,YAAY0J,MAAK,SAAAupH,GAAO,OAAoC,IAAhCA,EAAQjzH,IAAI,mBACtF+rtB,cAAc,IAEhB9vtB,KAAKoyoB,oB,oBAyPP,WAAiB,IAAD,OACd,EAUIpyoB,KAAKkqC,MATPm2J,EADF,EACEA,QACAnnH,EAFF,EAEEA,QACAntD,EAHF,EAGEA,EACAkksB,EAJF,EAIEA,eACAzynB,EALF,EAKEA,OACA7yD,EANF,EAMEA,SACAuxX,EAPF,EAOEA,eACAr+Q,EARF,EAQEA,KACA9wF,EATF,EASEA,YAGF,EASI/sD,KAAKgnC,MARP8snB,EADF,EACEA,gBACAtlpB,EAFF,EAEEA,KACAizW,EAHF,EAGEA,KACAt0I,EAJF,EAIEA,MACA0if,EALF,EAKEA,UACAC,EANF,EAMEA,aACAz7D,EAPF,EAOEA,kBACAD,EARF,EAQEA,iCAGF,GAAe,MAAX/zd,EACF,OAAO,+BACJt0K,EAAE,2BAIP,IAAMi7O,EAAQhnQ,KAAKgnC,MAAMggO,MAAMnlQ,OAAS,EACpCunB,iBAAOppB,KAAKgnC,MAAMggO,OAClB3mE,EAAQt8L,IAAI,YAEV2stB,EAAsBrwhB,GAAWA,EAAQt8L,IAAI,eAAiBs8L,EAAQt8L,IAAI,4BAC1E4stB,EAA0BD,GAC9B,eAACzmmB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,kCAAmCo+F,UAAU,QAA/D,SACE,sBAAK3D,IAAKoqmB,KAAiBvnlB,IAAKt9G,EAAE,8BAA+BuvF,MAAO,CAAClgC,QAAS,aAGhF2lgB,EAAe1gZ,EAAQz/K,MAAM,CAAC,WAAY,IAC1CiwsB,EAAc,+BAClB,qBAAIv1mB,MAAO,CAACspjB,UAAW,OAAQ9olB,QAAS,GAAxC,SAEI+zoB,EAAU7mtB,KAAI,SAACszf,EAAWnggB,GACxB,OAAO,8BAAiBmggB,EAAKvyW,KAAKppB,aAAlBxkI,UAKxB,OACE,eAAC6qH,EAAA,EAAD,CAAMiK,UAAW,EAAGvX,QAAQ,WAA5B,SACE,gBAACwN,EAAA,EAAD,WACA,eAAC,IAAD,CACEvc,KAAMmpjB,EACN7lS,kBAAmBjuX,KAAKiuX,kBACxBD,SAAU3tL,EAAQt8L,IAAI,QAAUs8L,EAAQt8L,IAAI,QAAUgoB,EAAE,8BACxDm9S,aAAclpU,KAAKwwtB,sBAErB,gBAAC33oB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHP,UAKE,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMP,WAAW,WAAWqiC,MAAO,CAAEx/B,QAAS,EAAGR,MAAO,QAArF,SACE,eAAC2uC,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsC,GAA/D,SACE,gCACE,eAACqwG,EAAA,EAAD,CACEJ,QAASi0lB,EACThqnB,MAAM,UACNqV,MAAO,CAAEx/B,QAAS,GAClBohC,SAAU2gC,GAAyC,IAAjCwiD,EAAQt8L,IAAI,YAAYhI,KAC1Cy/G,SAAU,SAACpzG,EAAG0otB,GACZnmrB,EAAS,IAAIusE,KAAoC,CAAE1Z,SAAQs8B,UAAWumE,EAAQt8L,IAAI,MAAOi4H,QAAS80lB,cAM5G,eAACj4oB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACs8O,EAAA,EAAD,CACE1nT,KAAK,OACLsyB,MAAO/U,EAAE,iCACTi/F,YAAY,OACZxP,SAAUzuD,EAAc/sD,KAAKywtB,oBAAsBzwtB,KAAK8gQ,aACxDplQ,MAAO8S,EACPzS,KAAK,QACLu/G,MAAO,CAAChgC,MAAO,QACfwhC,WAAY,CACV6kN,aAAc50Q,EAAc,eAAC24U,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,UAIpF,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACs8O,EAAA,EAAD,CACE1nT,KAAK,QACLsyB,MAAO/U,EAAE,oCACT7rB,KAAK,SACLs7G,SAAUzuD,EAAc/sD,KAAKywtB,oBAAsBzwtB,KAAK8gQ,aACxDplQ,MAAOyxO,EACPpxO,KAAK,QACLu/G,MAAO,CAAChgC,MAAO,QACfwhC,WAAY,CACV6kN,aAAc50Q,EAAc,eAAC24U,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,UAIpF,gBAACptB,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXgB,KAAK,SACLV,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ63oB,qBANrB,UASI70T,EAAiB,eAACt6F,EAAA,EAAD,IAAuB8uZ,GACtC,eAAC73oB,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQ83oB,iBAFrB,SAIGL,IAKLb,EAAe,eAACluZ,EAAA,EAAD,IAAuBiuZ,EAAUhutB,OAAS,GAAM,eAACg3E,EAAA,EAAD,UAC7D,eAACoxC,EAAA,EAAD,CAASC,MAAO2mmB,EAAhB,SACE,eAAC,IAAD,cAMV,eAACh4oB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WACRb,WAAW,SACXuB,KAAK,SAJP,SAMG65kB,EACC,uCACE,eAACzyV,EAAA,EAAD,CAAkB7lU,KAAK,WACvB,eAACy9G,EAAA,EAAD,CACEE,QAAQ,SACRzT,MAAM,gBACNqV,MAAO,CAACmb,WAAY,SAAUiS,YAAa,GAAI7U,aAAc,GAH/D,SAKG9nG,EAAE,kCAGP,uCACE,eAACk+F,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsCqooB,EAAmCrooB,EAAE,0CAA4C,GAAhJ,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAK2T,YAAYuod,EAAc,IAC9C7je,WAAU2gC,MAAcu2gB,IAA0CrzE,GAClE38T,UAAW,eAAC,IAAD,IACXhrM,UAAWF,EAAQ+3oB,kBAJrB,SAMGllsB,EAAE,uCAIT,eAACk+F,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsC,GAA/D,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEE,QAAS,kBAAM6qmB,GAAuB,CACpCrvhB,UACA11J,WACA5e,OAEFq4P,UAAW,eAAC,KAAD,IACXhrM,UAAWF,EAAQ+3oB,kBACnB/zmB,SAAU2gC,EARZ,SAUG9xH,EAAE,+BAIT,eAACk+F,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsC,GAA/D,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEE,QAAS7kH,KAAKiuX,kBACd7pG,UAAW,eAAC,IAAD,IACXhrM,UAAWF,EAAQ+3oB,kBACnB/zmB,SAAU2gC,EAJZ,SAMG9xH,EAAE,iDAQjB,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVN,UAAWF,EAAQqiV,eAJrB,UAQmB,IAAfv0J,EAAMjrQ,KACH,eAAC88E,EAAA,EAAD,CACC+B,GAAI,GACJhB,MAAM,EACNR,UAAWF,EAAQsgD,iBAHpB,SAKC,eAAC,IAAD,CACEu5K,UAAW,SAAC3qS,GAAD,OAAO,EAAK2qS,UAAU3qS,EAAG4+P,IADtC,SAGE,eAAC,IAAD,CACEolB,YAAW,oBAAe/rF,EAAQt8L,IAAI,OACtC21E,UAAW,aAFb,SAIG,SAAC8tC,EAAe2jM,GAAhB,OACC,uBACE1vT,IAAK+rH,EAAS0lJ,SACd5xJ,MAAO,EAAK80mB,aAAajla,EAAS2C,gBAFpC,UAIG,EAAKwia,wBAAwBtpd,GAC7Bx/I,EAASwD,sBAMpB,eAACnyC,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQg4oB,kBAFrB,SAIE,eAACjnmB,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsC,GAA/D,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQi4oB,iBACnBtsmB,QAAS7kH,KAAKqwtB,iBACdnzmB,SAAU2gC,EAHZ,SAKG9xH,EAAE,wCAMf,eAACmqS,EAAA,EAAD,CACE1nT,KAAK,OACLqrG,WAAW,EACX3gC,QAAS,CAAE3hE,KAAM2hE,EAAQk4oB,WACzBtwrB,MAAO/U,EAAE,gCACTyvF,SAAUzuD,EAAc/sD,KAAKywtB,oBAAsBzwtB,KAAK8gQ,aACxDplQ,MAAO+lX,EACPtjB,WAAW,EACXpiW,KAAK,QACL+gH,WAAY,CACV6kN,aAAc50Q,EAAc,eAAC24U,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,oB,GApiBrDxhE,a,IA6mBxBwwC,kBACbgG,aAhEa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,MAEzBk/C,iBAAkB,CAChBnP,SAAU,OACV/tC,SAAU,OACVf,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAE9B22oB,kBAAmB,CACjBzvmB,YAAatmC,EAAMZ,UACnB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5Bu4R,eAAgB,CACd7yR,YAAa,EACbzrB,SAAU,YAEZwU,SAAU,CACRl2C,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,GAC5BgB,MAAOJ,EAAMZ,QAAQ,IAEvB62oB,iBAAkB,CAChB1pmB,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAQ,+BACR50B,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,MAChC7pC,MAAO,IACPi2C,OAAQ,IACRh2C,OAAQL,EAAMZ,QAAQ,EAAG,IAE3B02oB,iBAAkB,CAChBl1oB,QAASZ,EAAMZ,WAEjB42oB,kBAAmB,CACjB31oB,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAE9By2oB,qBAAsB,CACpBj1oB,QAAS,OACTmqB,MAAO,UACP3qB,MAAO,YA2BTn8B,YAAgB,gBAChBwqE,eACA9K,mBAzBsB,SAAC73E,EAAOkD,GAAW,IAAD,MAChCszD,EAAoBtzD,EAApBszD,OAAQ6iG,EAAYn2J,EAAZm2J,QAMhB,MAAO,CACLq1L,eANqBn4K,aAAsB,WAAtBA,CAAkCv2K,GAOvDg0F,KANWC,eAAiBj0F,GAO5BiprB,eANkB,qBAAI,EAAAvjgB,YAA4B,CAAElvH,SAAQs8B,UAAWumE,EAAQt8L,IAAI,OAA7D2oN,CAAsE1lL,IAAQjjC,WAAlF,aAAG,SAAqF,kBAAxF,SAOlBm4Z,eANqB/5N,eAA2Bn7J,GAOhD+lB,aANmBnM,eAA2B5Z,OAUvB,SAAC2D,GAC1B,MAAO,CACLA,eAGWsqC,CAKb26oB,I,iDC/zBIpgmB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5Cm2oB,mBAAoB,CAChBp0mB,SAAU,WACVqX,IAAKp5C,EAAMZ,QAAQ,GACnB9/D,MAAO0gE,EAAMZ,QAAQ,QAoBdg3oB,GAhBI7srB,IAAM8E,YAAoD,WAK1E9tC,GAAS,IAJVkpI,EAIS,EAJTA,QACAh6B,EAGS,EAHTA,KACAwoB,EAES,EAFTA,SACA7sF,EACS,EADTA,SAEQ4yC,EAAUs2C,KAChB,OACI,sBAAKp2C,UAAWF,EAAQm4oB,mBAAxB,SACI,eAAC1gc,GAAA,EAAD,CAAMx9J,SAAUA,EAAUxoB,KAAMA,EAAMg6B,QAASA,EAAS9f,QAAS,SAACsiB,GAAD,OAAWA,EAAMjjB,mBAAlF,SACK59E,S,+ECzBXkpF,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C3jE,KAAM,CACFkwG,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3Clf,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,MAChCgC,SAAU,GACVgjP,WAAY,OACZ7uR,MAAO,GACPi2C,OAAQ,GACRn2C,QAAS,OACTM,eAAgB,SAChBzC,WAAY,SACZ6C,QAAS,MACTN,SAAU,GACVyxC,UAAW,cAeJskmB,GAZY,SAACrnrB,GACxB,IAAMgvC,EAAUs2C,KAChB,OACI,eAAC7K,EAAA,EAAD,yBACIvrC,UAAWF,EAAQ3hE,MACf2yB,GAFR,qB,oBCZFslF,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C3jE,KAAM,CACFkwG,aAAcvsC,EAAM4/C,MAAMrT,aAE1BxhB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,MAChCgC,SAAU,GACVgjP,WAAY,OACZ7uR,MAAO,GACPi2C,OAAQ,GACRn2C,QAAS,OACTM,eAAgB,SAChBzC,WAAY,cAqELu4oB,GAxDwD,SAAC,GAOjE,IANHnoqB,EAME,EANFA,KACA2tE,EAKE,EALFA,QACAiD,EAIE,EAJFA,aACA+8R,EAGE,EAHFA,oBACAl9R,EAEE,EAFFA,UAGM3G,GADJ,EADFs+lB,aAEiBhtrB,IAAMyG,OAAO,OACxBguC,EAAUs2C,KACV4oS,EAA+CpB,EAAoB5zY,QACnEsusB,EAAmCt5T,EAAmBr0Z,IAAI,kBAE1D40Z,EADkBP,EAAmBr0Z,IAAI,qBACb,yBAC5Bs8L,EAAUh3I,EAAKtlD,IAAI,WAAYkU,kBAAQ0J,MAAK,SAAC0+K,GAAD,OAA4BA,EAAQt8L,IAAI,QAAU+1H,KAC9FnvF,EAAW2F,wBACjB,OACI,qCACI,sBACI70C,IAAK03H,EACJ/5C,UAAWF,EAAQ3hE,KACnB89G,aAAc,SAACjtH,GACXuiC,EAAS,IAAIowD,KAAgCslG,EAAQt8L,IAAI,QACzD4mC,EAAS,IAAI4J,KAA+B,CACxCtT,GAAI44F,KACJ3vF,MAAO,CACHszD,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,UAAWumE,EAAQt8L,IAAI,MACvBk1H,UAAWjC,EAAQjzH,IAAI,MACvBg2H,WAAY/C,EAAQjzH,IAAI,cACxBi2H,cAAehD,EAAQjzH,IAAI,iBAC3Bk2H,eACA9G,SAAU/qH,EAAEs8G,cACZwV,mBAAoBlD,EAAQjzH,IAAI,iBAChCo2H,WAAYnD,EAAQjzH,IAAI,SACxBq2H,aAAcpD,EAAQjzH,IAAI,WAC1Bs2H,kBAAmBrD,EAAQjzH,IAAI,gBAC/Bu2H,gBAAiBtD,EAAQjzH,IAAI,YAE7By2H,gCAAgC,EAChCD,eAA0C,aAA1BvD,EAAQjzH,IAAI,UAC5ByzZ,cAAek6T,OAvBhC,SA4BI,eAAC,KAAD,CACIlrmB,IAAKmyS,EACL7xS,aAAa,EACbD,YAAa,OACbvrC,MAAO,cCvCrBk0C,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5Cq+U,cAAe,GAGfh0S,YAAa,CACTtI,SAAU,WACVnhC,QAAS,eACTV,QAAS,OACTK,cAAe,SACfC,eAAgB,iBAEpB+5C,WAAY,CACVxY,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACN6gE,QAAS,QAEXu2oB,YAAa,CACX10mB,SAAU,WACVqX,IAAK,EACL95G,MAAO,EACP4gE,QAAS,QAEXm5kB,qBAAsB,CAClBriiB,cAAeh3C,EAAMZ,WAEzBs3oB,cAAe,CACXv+lB,aAAcn4C,EAAMZ,WAExB6iI,KAAM,CACFrhI,QAASZ,EAAMZ,QAAQ,KAAM,EAAG,IAGpCu3oB,gCAAiC,CAC9Bz2oB,QAAS,OACT2uT,IAAK7uT,EAAMZ,QAAQ,IAEtBw3oB,aAAc,CACVh2oB,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B0qC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCohT,eAAgB,eAEpBmiP,wBAAyB,CACvBxijB,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7B+iF,OAAQ,eAGR0smB,GAAc,SAAC,GAAiL,IAAD,MAA9K1xhB,EAA8K,EAA9KA,QAASh3I,EAAqK,EAArKA,KAAM2tE,EAA+J,EAA/JA,QAASiD,EAAsJ,EAAtJA,aAAco6hB,EAAwI,EAAxIA,kBAAmBhB,EAAqH,EAArHA,qBAAsB76hB,EAA+F,EAA/FA,YAA+F,IAAlFi5lB,oBAAkF,aAA5DO,2BAA4D,MAAtC,GAAsC,EAAlCntmB,EAAkC,EAAlCA,QAAkC,IAAzBk/hB,mBAAyB,SACjM,EAA8Ct/mB,IAAMia,UAAS,GAA7D,mBAAOo1mB,EAAP,KAAwBm+D,EAAxB,KACMhkW,EAAoB,kBAAMgkW,GAAmB,SAAC36sB,GAAD,OAAWA,MACtDyU,EAAM+xB,YAAe,gBAArB/xB,EACR,EAA0B0Y,IAAMia,SAAS,GAAzC,mBAAOkrJ,EAAP,KAAcklhB,EAAd,KACM51oB,EAAUs2C,KAEVyG,EAAQe,EAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAAzC,eADE,GACF,YADE,IAEV21G,EAAcS,EAAQjzH,IAAI,SAC1ByyH,EAAYQ,EAAQjzH,IAAI,aACxB0hG,EAASuxB,EAAQjzH,IAAI,UACrBw1H,EAAwB,aAAX9zB,EAEbiwR,EAAiBhkV,sBAAY6rK,aAAsB,aACnDtzJ,EAAUvY,sBAAYsY,gBACtB0/Q,GAA0Bh4R,sBAAYmkG,gBACtChpF,GAAgBkgK,eAChBghE,GAAO,UAAGr8O,sBAAYi5K,sBAAf,QAAwCvhM,iBAAO,IACtDy/B,GAAgBnX,sBAAYiX,gBAC5Bs/C,GAAS8zK,eACTpxO,GAAW2F,wBACXyc,IAAerb,sBAAYkP,gBAE3Bi9F,GAAI,OAAGx0F,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,QACjBqwpB,GAAmC/zd,EAAQt8L,IAAI,YAAY0J,MAAK,SAACupH,GAAD,OAA6C,IAAhCA,EAAQjzH,IAAI,mBACzF2rU,GAEF,GAEJ,IAjBmC,CAAC,MAAO,QAAS,yBAkBtChjU,SAAQ,SAACsoT,GACf,IAAMtB,EAASgvV,YAAuC1tV,EAAU,CAC5D/qQ,SACAyzD,UAAWr0D,EAAKzoC,MAAM,CAAC,UAAW,UAAW,QAAU8oT,GAAwB9oT,MAAM,CAAC,UAAW,OACjGo2G,UACAjqE,iBAEU,MAAV2mQ,IACAgc,GAAQ1a,GAAY0gE,GAAkBztR,GAAOJ,QAAQ6rN,EAAQ,CACzDptN,QAAS,OACTC,SAAU,UACVo6O,SAAS,EACT/3N,gBAAgB,EAChBC,WAAW,EACXC,WAAW,QAIzB,MAAO1gH,IACDwhM,EAAQ,GACR/wJ,YAAW,WACPi2qB,GAAS,SAACx3sB,GAAD,OAAUA,EAAO,OAC3B,KAEP0Q,QAAQ08E,MAAM,iDAAmD,CAC7Dt8F,KACAwhM,QACA3hG,YAGR,IAAMqxB,GAA2BzwE,KAAkBkE,GAC7CmlqB,GAAgC,WAClCvnrB,GAAS,IAAI4J,KAA+B,CACxCtT,GAAIq4X,KACJpvX,MAAO,CACHszD,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,UAAWumE,EAAQt8L,IAAI,MACvBk1H,UAAWjC,EAAQjzH,IAAI,MACvBk2H,mBAGRtvF,GAAS,IAAI0J,KAA6B,CACtCpT,GAAIq4X,KACJ3uT,MAAM,MAGRwnnB,GAAiF,iBAAGn7lB,QAAH,IAAGA,GAAH,UAAGA,EAASjzH,IAAI,8BAAhB,aAAG,EAAqC0f,SAAQ,SAACi6Y,GAAD,OAAiBA,EAAY35Z,IAAI,4BAAjF,QAAuGqlB,iBAAO,IACrM,OACI,eAAC49F,EAAA,EAAD,CAAMiK,UAAW,EAAG73C,UAAWF,EAAQqgV,cAAe10S,QAASA,EAA/D,SACI,gBAACqC,EAAA,EAAD,CAAa9tC,UAAWF,EAAQqsC,YAAhC,UACI,gBAAC1sC,EAAA,EAAD,CACIW,WAAW,EACXP,WAAW,aACXuB,KAAK,SACLF,QAAS,EACTlB,UAAWF,EAAQikI,KALvB,UAOI,eAACtkI,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACI,eAAC,KAAD,CACI4sC,IAAKyP,GAAS,GACd36C,MAAK,UApFb,GAoFa,MACLurC,YAAa,OACbC,aAAa,MAGrB,gBAACjuC,EAAA,EAAD,CACIe,MAAM,EACN0hC,MAAO,CAAC+O,SAAU,QAFtB,UAKMkP,GACE,sBAAKngD,UAAWF,EAAQu8C,WAAxB,SACE,eAACswM,GAAA,EAAD,CACEzqN,MAAO,CAAEmM,aAAc,OACvB3mF,MAAO/U,EAAE,UAAD,OAAW05E,IACnByX,UAAU,EACVnhH,KAAK,YAMV01tB,IAAiBO,EACdjuE,EACE,KACA,sBAAK3qkB,UAAWF,EAAQy4oB,YAAxB,SACE,eAAC1nmB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SACE,eAAC,IAAD,CAAoBqtD,UAAWF,EAAQuvkB,8BAI3C,uBAAKrvkB,UAAWF,EAAQy4oB,YAAxB,WACM5tE,GACA,eAAC95hB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SACE,eAAC,IAAD,CAAoBqtD,UAAWF,EAAQuvkB,4BAG3C,eAACx+hB,EAAA,EAAD,CAASC,MACP8nmB,GACOjmsB,EAAP8xH,GAAS,mCAAsCu2gB,GAAqC,qCAA0C,8BAFhI,SAII,wBAAM94iB,MAAO,CAAC+J,OAAQ,WAAtB,cACI,eAACqV,EAAA,EAAD,CACI7V,QAAS,SAACz8G,GACNA,EAAE87G,kBACFsU,KAEJtb,SAAUu0mB,GAAgB5zkB,IAAQu2gB,IAAoCC,GAAqB96hB,EAC3Fx9H,KAAK,QANT,SAQA,eAAC,IAAD,CAAiBorH,SAAS,iBAIlC,eAAC8C,EAAA,EAAD,CAASC,MACP8nmB,GACOjmsB,EAAP8xH,GAAS,mCAAwC,gCAFnD,SAII,gCACA,eAACnjB,EAAA,EAAD,CACI7V,QAAS,SAACz8G,GACNA,EAAE87G,kBACF+pQ,KAEJlyX,KAAK,QACLmhH,SAAUu0mB,GAAgB5zkB,IAAQw2gB,EANtC,SAQI,eAAC,IAAD,CAAYltiB,SAAS,gBAI7B,eAAC,KAAD,CACIgnQ,YAAa,CACTtpQ,QAAS,SAACz8G,GACNA,EAAE87G,oBAGVvZ,KAAMmpjB,EACN7lS,kBAAmBA,EACnBD,SAAUh3P,EAAQjzH,IAAI,iBAAZ,UAAkCgoB,EAAE,yCAApC,YAAgFirG,EAAQjzH,IAAI,kBAAqB,kBAC3HmlU,aAAc,kBAAMzwM,YAAc,CAC9BzB,UACArsF,YACA01J,UACAgzd,0BAEJ/kS,aAAa,OAOzB/3P,GACA,eAAC19C,EAAA,EAAD,CAAMO,UAAWF,EAAQ04oB,cAAzB,SACI,eAACl7lB,GAAA,EAAD,CACIF,UAAWA,MAKvB,eAACvM,EAAA,EAAD,CACIC,MAAO8M,EAAQjzH,IAAI,iBACnBomH,UAAU,YAFd,SAII,eAAC3Q,EAAA,EAAD,CACIE,QAAQ,QACRzT,MAAM,UACNse,QAAQ,EAHZ,SAKKyS,EAAQjzH,IAAI,qBAIrB,eAACkmH,EAAA,EAAD,CACIC,MAAO8M,EAAQjzH,IAAI,SACnBomH,UAAU,YAFd,SAII,eAAC3Q,EAAA,EAAD,CACIE,QAAQ,QACR6K,QAAQ,EAFZ,SAIKyS,EAAQjzH,IAAI,aAIrB,eAACkmH,EAAA,EAAD,CACIC,MAAO8M,EAAQjzH,IAAI,gBACnBomH,UAAU,YAFd,SAII,eAAC3Q,EAAA,EAAD,CACIE,QAAQ,QACR6K,QAAQ,EAFZ,SAIKyS,EAAQjzH,IAAI,oBAGrB,gBAACwpb,GAAA,EAAD,CAAaxra,UAAU,IAAIu5F,MAAO,CAAEsY,UAAW,IAA/C,UACK87M,GAAO,OAAa,eAACpiN,GAAA,EAAD,CAAMF,KAAMsiN,GAAO,MAAW7qN,QAAS,SAACz8G,GACzDA,EAAE87G,kBACFuviB,YAAY,CACR5mmB,iBACAmqE,UACA+2J,WACAvwL,OAAQn0C,EAAKtlD,IAAI,MACjBslD,UAPa,SAUhBt9B,EAAE,0BAEN2jT,GAAO,KAAW,eAACpiN,GAAA,EAAD,CAAMF,KAAMsiN,GAAO,IAAS7qN,QAAS,SAACz8G,GACrDA,EAAE87G,mBADa,SAEfn4F,EAAE,wBACL2jT,GAAO,uBAA6B,eAACpiN,GAAA,EAAD,CAAMF,KAAMsiN,GAAO,sBAA2B7qN,QAAS,SAACz8G,GACzFA,EAAE87G,mBAD+B,SAEjCn4F,EAAE,sCAKdutG,GAA2B,uCACvB,eAAC3C,EAAA,EAAD,IACA,uBAAKv9C,UAAWF,EAAQ44oB,aAAxB,UACI,uBAAKx2mB,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,gBAAiBzC,WAAY,UAA5E,UACI,eAACugC,EAAA,EAAD,CAAY8B,MAAO,CAAErV,MAAO,QAAU3sB,UAAU,OAAOogC,QAAQ,UAA/D,SAA0E3tF,EAAE,8BAC5E,eAACk+F,EAAA,EAAD,CAASC,MAAO8nmB,GAAwBn0kB,IAAQ9xH,EAAE,qCAAwC,GAA1F,SACE,gCACE,eAAC44F,EAAA,EAAD,CACIrJ,MAAO,CAAE4M,WAAY,OAAQ6M,cAAe,QAC5Crb,QAAQ,OACRzT,MAAM,UACNiX,SAAUu0mB,GAAgBl4lB,GAAcskB,GACxCh5B,QAAS,SAACz8G,GACNA,EAAE87G,kBACFgumB,MAEJn2tB,KAAK,QATT,SAWKgwB,EAAE,2CAMwB,IAAnComsB,GAA0Bp2tB,KACtBw9H,EACE,KACA,+BACE,eAACtP,EAAA,EAAD,CAASC,MAAO8nmB,GAAwBn0kB,IAAQ9xH,EAAE,qCAAwC,GAA1F,SACE,gCACE,eAAC,GAAD,CAAoBmxF,SAAUu0mB,GAAgB5zkB,GAAMh5B,QAAS,SAACz8G,GAC1DA,EAAE87G,kBACFgumB,cAKZ,sBAAK94oB,UAAWF,EAAQ24oB,gCAAxB,SACKM,GAA0BvptB,WAAWI,KAAI,SAACguZ,EAAqB76Z,GAC5D,OACI,eAAC,GAAD,CACIktD,KAAMA,EAEN2tE,QAASA,EACTiD,aAAcA,EACd+8R,oBAAqBA,EACrBl9R,UAAWumE,EAAQt8L,IAAI,MACvB0ttB,aAAcA,GAAgB5zkB,IALzB1hJ,cAY/B,WAOXsoC,OAAM4G,KAAK0mrB,I,+BCrZnB,SAASK,GAAKvutB,EAAOwutB,EAAWnwR,GASnC,IAAItoX,EAAO/1E,EAAMwutB,GACbxwtB,EAASgC,EAAMhC,OACfuzO,EAAOi9e,EAAYnwR,EACvB,GAAI9sN,EAAO,EAEP,OAAOk9e,KAAiBzutB,EAAMiM,MAAM,EAAGoyb,GAAU,CAC7CtoX,GACD/1E,EAAMiM,MAAMoyb,EAASmwR,GAAYxutB,EAAMiM,MAAMuitB,EAAY,EAAGxwtB,IAE9D,GAAIuzO,EAAO,EAAG,CAEf,IAAIg/N,EAAclS,EAAU,EAC5B,OAAOowR,KAAiBzutB,EAAMiM,MAAM,EAAGuitB,GAAYxutB,EAAMiM,MAAMuitB,EAAY,EAAGj+Q,GAAc,CACxFx6X,GACD/1E,EAAMiM,MAAMskc,EAAavyc,IAEhC,OAAOgC,ECDJ,SAAS0utB,GAAoBvvtB,EAAGk2O,EAAIs5e,GACvC,IAAIC,EAAcv5e,EAAGu5e,YAAajwV,EAAYtpJ,EAAGspJ,UAC7CrmY,EAAgC,iBAAjBq2tB,GAA6BxvtB,GAAKwvtB,EAAgBxvtB,EAAI,EAASA,EAGlF,MAAO,CACH0vtB,GAAI,CAHCv2tB,EAAQs2tB,EAFyDv5e,EAAG2hO,YAGrE99c,KAAKwjB,MAAMpkB,EAAQs2tB,GAAejwV,IAYvC,SAASmwV,GAAwB96sB,EAAG2zB,EAAG0tM,EAAI9jO,GAC9C,IAAIotX,EAAYtpJ,EAAGspJ,UAAWiwV,EAAcv5e,EAAGu5e,YAAa53Q,EAAc3hO,EAAG2hO,YACzE1+c,EAAQY,KAAKwjB,MAAMirB,EAAIg3V,GAAaiwV,EAAc11tB,KAAKwjB,MAAM1I,EAAIgjc,GACrE,OAAO1+c,GAASiZ,EAAQA,EAAQjZ,EAU7B,SAAS2/pB,GAAev7M,EAAY/2U,EAAMp0H,EAAO2iQ,EAAIC,GACxD,IAAI9+B,EAAKo5e,KA9CN,SAAyBn2tB,EAAOqtI,EAAMuuI,EAAIC,EAAIogB,GACjD,IAAIl/C,EAAKo5e,KAAeC,GAAoBp2tB,EAAOqtI,GAAMkplB,GAAI,GAAIn4sB,EAAO2+N,EAAG,GAAI5kH,EAAM4kH,EAAG,GACxF,MAAO,CACHw5e,GAAI,CACAn4sB,EAAOw9P,GAAMqgB,EAAS5uJ,EAAKqxU,YAAc,EAAI,GAC7CvmV,EAAM0jJ,GAAMogB,EAAS5uJ,EAAKg5P,UAAY,EAAI,KAyC1BowV,CAAgBryQ,EAAY/2U,EAAMuuI,EAAIC,GAAI,GAAM06c,GAAI,GAC5E,OAAOC,GAD8Ez5e,EAAG,GAASA,EAAG,GAC7D1vG,EAAMp0H,GCrDjD,IAAIq5I,GAAO,WACP,MAAM,IAAI7mJ,MAAM,qEAETirtB,GAAcpurB,gBAAoB,CACzC8oK,SAAU9+C,GACVv/I,OAAQu/I,GACRqkkB,gBAAiBrkkB,GACjBskkB,cAAetkkB,GACfukkB,WAAYvkkB,GACZwkkB,SAAU,KACVC,YAAazkkB,GACbjzC,SAAUizC,KAEP,SAAS0kkB,GAAoBj6e,GAChC,IAAI5yM,EAAW4yM,EAAG5yM,SAAUk1E,EAAW09H,EAAG19H,SACtCqjU,EAAKyzS,KAAe7trB,WAAe,MAAO,GAAIwurB,EAAWp0S,EAAG,GAAIu0S,EAAcv0S,EAAG,GACjFw0S,EAAW5urB,SAAa,IAAI7xB,KAsBhC,SAAS0gtB,EAAiBnlc,EAAUzX,EAAIC,GACpC,IAAI/8L,EAAOy5oB,EAASvrrB,QAAQ/jC,IAAIoqR,GAEhC,OAAKv0M,EAOE,CACH/hE,EAFO+hE,EAAKr/D,KAEFm8P,EACVlrO,EAHwBouC,EAAK06C,IAGpBqiJ,GARF,CACH9+P,EAAG6+P,EACHlrO,EAAGmrO,GA6If,OAAQlyO,gBAAoBourB,GAAYzsrB,SAAU,CAAE1qC,MAAO,CACnD6xM,SApKR,SAAkBtsK,EAAI+K,GAClBqnrB,EAASvrrB,QAAQpgC,IAAIu5B,EAAI+K,IAoKrB98B,OA9JR,SAAgB+xB,GACZoyrB,EAASvrrB,QAAQ0gF,OAAOvnF,IA8JpB6xrB,gBArGR,SAAyB3kc,EAAUt2Q,EAAG2zB,GAClC,IAAI+nrB,EAAKr6e,EACL2lM,EAAKy0S,EAAiBnlc,EAAUt2Q,EAAG2zB,GAAIkqH,EAAKmpR,EAAGhna,EAAG+9I,EAAKipR,EAAGrzY,EAC9D,IAEI,IAAK,IAAIgorB,EAAKlB,KAAiBe,EAASvrrB,QAAQn+B,WAAYylO,EAAKokf,EAAGzztB,QAASqvO,EAAG9uO,KAAM8uO,EAAKokf,EAAGzztB,OAAQ,CAClG,IAAIq7P,EAAKk3d,KAAeljf,EAAG1zO,MAAO,GAAI4I,EAAM82P,EAAG,GAAI40N,EAAS50N,EAAG,GAC/D,IAAK40N,EAAOyjQ,aACR/9jB,EAAKs6T,EAAOz1c,MACZm7I,EAAKs6T,EAAOx1c,OACZo7I,EAAKo6T,EAAO17V,KACZshC,EAAKo6T,EAAOz7V,OACZ,OAAOjwH,GAInB,MAAOovtB,GAASH,EAAM,CAAEpltB,MAAOultB,GAb/B,QAeI,IACQtkf,IAAOA,EAAG9uO,OAAS44O,EAAKs6e,EAAGvud,SAAS/rB,EAAGl4O,KAAKwytB,GADpD,QAGU,GAAID,EAAK,MAAMA,EAAIpltB,OAEjC,OAAO,MA+EH4ktB,cApER,SAAuB5kc,EAAUwlc,EAAU97sB,EAAG2zB,EAAGoorB,GAC7C,IAAI16e,EAAKo6e,EAAiBnlc,EAAUt2Q,EAAG2zB,GACnCqzY,EA/DR,SAA6B80S,EAAUj+jB,EAAIE,GACvC,IAAIsjF,EAAKm6e,EAASvrrB,QAAQ/jC,IAAI4vtB,GAC9B,MAAO,CACH97sB,EAAG69I,EAFyCwjF,EAAG3+N,KAG/CixB,EAAGoqH,EAHwDsjF,EAAG5kH,KA8DzDu/lB,CAAoBF,EADmBz6e,EAAGrhO,EAAQqhO,EAAG1tM,GACdkrO,EAAKmoK,EAAGhna,EAAG8+P,EAAKkoK,EAAGrzY,EAC/DgorB,EAAKH,EAASvrrB,QAAQ/jC,IAAI4vtB,GAAWG,EAAaN,EAAGhqlB,KAAMp0H,EAAQo+sB,EAAGp+sB,MACtEg/b,EAAcu+Q,GAAwBj8c,EAAKo9c,EAAWj5Q,YAAc,EAAGlkM,EAAKm9c,EAAWtxV,UAAY,EAAGsxV,EAAY1+sB,GAClHg6N,EAAKkjf,KAAeC,GAAoBn+Q,EAAa0/Q,GAAYpB,GAAI,GAAIqB,EAAK3kf,EAAG,GAAI4kf,EAAK5kf,EAAG,GAC7FgsB,EAtDR,SAAuB+yB,EAAUwlc,GAC7B,IAAIM,EAAUZ,EAASvrrB,QAAQ/jC,IAAIoqR,GAC/B+lc,EAAUb,EAASvrrB,QAAQ/jC,IAAI4vtB,GACnC,MAAO,CACH97sB,EAAGq8sB,EAAQ35sB,KAAO05sB,EAAQ15sB,KAC1BixB,EAAG0orB,EAAQ5/lB,IAAM2/lB,EAAQ3/lB,KAiDpB6/lB,CAAchmc,EAAUwlc,GAAW57c,EAAK3c,EAAGvjP,EAAGmgQ,EAAK5c,EAAG5vN,EAE1DynrB,GACCA,GACEA,EAAS7+Q,cAAgBA,GACzB6+Q,EAASU,WAAaA,GAC1BP,EAAY,CACR18c,GAAIq9c,EAAKh8c,EACTpB,GAAIq9c,EAAKh8c,EACT4iT,GAAIlkT,EACJ09c,GAAIz9c,EACJwX,SAAUA,EACVwlc,SAAUA,EACVC,YAAaA,EACbx/Q,YAAaA,KAiDjB6+Q,SAAUA,EACVD,WAXR,WACIK,EAASvrrB,QAAQp7B,SAAQ,SAAUjR,GAC/BA,EAAI22iB,gBAUJ8gL,YA5CR,WACIE,EAAY,OA4CR53mB,SArCR,SAAkB2yK,EAAUylc,EAAax/Q,EAAau/Q,GAqBlDP,EAAYd,KAAiB,GAAIW,EAAU,CAAEvshB,SAAS,KACtDlrF,EAAS2yK,EAAUylc,EAAax/Q,EAAau/Q,MAgBxCrtrB,G,cCpMb,IAGW+trB,GAAkB5vrB,gBAAoB,MCG1C,SAAS6vrB,GAAap7e,GACzB,IAAIj4M,EAAKi4M,EAAGj4M,GAAIwxrB,EAAcv5e,EAAGu5e,YAAansrB,EAAW4yM,EAAG5yM,SAAUg1E,EAAQ49H,EAAG59H,MAAOujU,EAAK3lM,EAAGq7e,YAAaA,OAAqB,IAAP11S,GAAwBA,EAAI20S,EAAKt6e,EAAGu6e,YAAaA,OAAqB,IAAPD,GAAwBA,EAAIhxV,EAAYtpJ,EAAGspJ,UAAW7hX,EAAQ2xsB,KAAep5e,EAAI,CAAC,KAAM,cAAe,WAAY,QAAS,cAAe,cAAe,cAChV9J,EAAK3qM,aAAiBourB,IAAcI,EAAW7jf,EAAG6jf,SAAUF,EAAgB3jf,EAAG2jf,cAAeG,EAAc9jf,EAAG8jf,YAAa3lhB,EAAW6hC,EAAG7hC,SAAUylhB,EAAa5jf,EAAG4jf,WAAYx3mB,EAAW4zH,EAAG5zH,SAAUtsG,EAASkgO,EAAGlgO,OAAQ4jtB,EAAkB1jf,EAAG0jf,gBACjPr3tB,EAAMgpC,SAAa,MACnB22N,ECRD,SAAoB3/P,GACvB,IAAIy9O,EAAKo5e,KAAe7trB,WAAe,CACnClqB,KAAM,EACN+5G,IAAK,EACLh5C,MAAO,EACPi2C,OAAQ,EACR/2G,MAAO,EACP+5G,OAAQ,IACR,GAAIy7V,EAAS92O,EAAG,GAAIs7e,EAAYt7e,EAAG,GACnC2lM,EAAKyzS,KAAe7trB,YAAe,WACnC,OAAO,IAAI06F,MAAe,SAAU+5G,GAChC,IAAgCj2O,EAAvBqvtB,KAAep5e,EAAI,GAAe,GAC3Cs7e,EAAUvxtB,EAAM+pB,OAAOitQ,+BAE3B,GAAItmN,EAAWkrW,EAAG,GAUtB,OATAp6Y,mBAAsB,WAIlB,OAHIhpC,EAAIqsC,SACJ6rC,EAASsrD,QAAQxjI,EAAIqsC,SAElB,WAAc,OAAO6rC,EAASwmI,gBACtC,CAAC1+M,EAAKk4E,IAIF,CAAEq8Y,OAAQA,EAAQoiF,UAHzB,WACIoiL,EAAU/4tB,EAAIqsC,QAAQmyP,2BDdjBw6b,CAAWh5tB,GAAMu0d,EAAS50N,EAAG40N,OAAQoiF,EAAYh3S,EAAGg3S,UACzDpiU,EAAKsif,KAAe7trB,WAAe,MAAO,GAAIiwrB,EAAgB1kf,EAAG,GAAI2kf,EAAmB3kf,EAAG,GAC3F4kf,EAAKtC,KAAe7trB,WAAe,MAAO,GAAIumF,EAAc4pmB,EAAG,GAAIC,EAAiBD,EAAG,GACvFpC,EAAgBS,IAAaA,EAASvshB,SAAWushB,EAASU,WAAa1yrB,EACrEgyrB,EAAS7+Q,YACT,KACF5qU,EAAO,CACPqxU,YAAamV,EAAO10Y,MAAQm3oB,EAC5BA,YAAaA,EACbjwV,UAAWA,GAEXsyV,EAAarwrB,WAAervB,MAAMkxB,GAItC7B,aAAgB,WACZ8oK,EAAStsK,EAAI,CACTqzF,IAAK07V,EAAO17V,IACZC,OAAQy7V,EAAOz7V,OACfh6G,KAAMy1c,EAAOz1c,KACbC,MAAOw1c,EAAOx1c,MACd8gE,MAAO00Y,EAAO10Y,MACdi2C,OAAQy+V,EAAOz+V,OACfn8G,MAAO0/sB,EACPtrlB,KAAMA,EACNiqlB,YAAaA,EACbrhL,UAAWA,MAEhB,CAAC0iL,EAAYrB,EAAazjQ,EAAQ/ub,EAAIuoG,IAIzC/kG,aAAgB,WACZ,OAAO,WAAc,OAAOv1B,EAAO+xB,MACpC,CAACA,IAGJ,IAAI8zrB,EAAetwrB,WAAez7B,IAAIs9B,GAAU,SAAUvoB,EAAG/a,GAAK,OAAOA,KACzE,OAAQyhC,gBAAoB,MAAO6trB,KAAiB,CAAE72tB,IAAKA,EAAK6/G,MAAOg3mB,KAAiB,CAAEr1mB,SAAU,YAAc3B,IAAU36F,GAA6B,IAArB6oH,EAAKqxU,YACnI,KACAp2a,WAAez7B,IAAIs9B,GAAU,SAAU4T,EAAOl3C,GAC5C,IAAIgytB,EAAmB/B,GACnBA,EAASU,WAAa1yrB,GACtBgyrB,EAAS7+Q,cAAgBpxc,EAIzB6xJ,EAAM09jB,IAHEvnmB,EACNonmB,GAAK2C,EAAc/pmB,EAAYu1V,WAAYv1V,EAAYopV,aACvD2gR,GAC8Bv0sB,QAAQxd,GAAIwmI,EAAMgplB,GAyDtD,OAAQ/trB,gBAAoB4vrB,GAAgBjurB,SAAU,CAAE1qC,MAAO,CACvD44H,IAAKugC,EAAI69jB,GAAG,GACZ6B,YAAaA,EACbrB,YAAaA,EACb+B,wBAAyBD,EACnB,CAAC/B,EAASr4J,GAAIq4J,EAASmB,SACvBt4tB,EACNye,KAAMs6I,EAAI69jB,GAAG,GACb1vtB,EAAGA,EACH4sV,OA3DR,SAAgB5oT,EAAOnvB,EAAG2zB,GACtB,GAAK/vC,EAAIqsC,QAAT,CAEI4srB,IAAkB1xtB,GAClB2xtB,EAAiB3xtB,GAErB,IAAIkytB,EAAepC,EAAgB7xrB,EAAIppB,EAAI2xH,EAAKqxU,YAAc,EAAGrva,EAAIg+F,EAAKg5P,UAAY,GAClF0yV,GAAgBA,IAAiBj0rB,EACjC8xrB,EAAc9xrB,EAAIi0rB,EAAcr9sB,EAAG2zB,EAAGxoC,GAGtCkwtB,IAEJ,IAAI9+Q,EAAc8gR,IAAiBj0rB,EAC7B6zrB,EACAh5D,GAAe94pB,EAAGwmI,EAAMsrlB,EAAY9trB,EAAM+mT,MAAM,GAAI/mT,EAAM+mT,MAAM,IAClEqmH,IAAgBpxc,GACXgoH,GAAeA,EAAYopV,cAAgBA,IAC3CppV,IACD6pmB,EAAe,CACXzgR,YAAaA,EACbmM,WAAYv9c,IAIfgoH,GACL6pmB,EAAe,QAkCf/kY,MA5BR,SAAe9oT,EAAOnvB,EAAG2zB,GACrB,IACI4oa,EADe0+Q,EAAgB7xrB,EAAIppB,EAAI2xH,EAAKqxU,YAAc,EAAGrva,EAAIg+F,EAAKg5P,UAAY,KACnDvhW,EAC7B6zrB,EACAh5D,GAAe94pB,EAAGwmI,EAAMsrlB,EAAY9trB,EAAM+mT,MAAM,GAAI/mT,EAAM+mT,MAAM,IAElEklY,EACAz3mB,EAASy3mB,EAAS9kc,SAAU8kc,EAASW,YAAaX,EAAS7+Q,YAAa6+Q,EAASU,UAGjFn4mB,EAASv6E,EAAIj+B,EAAGoxc,GAEpBygR,EAAe,MACfF,EAAiB,OAgBb9lY,QAdR,WACImkY,KAcIxplB,KAAMA,EACNspK,SAAU9vS,IAAM0xtB,IACfx6qB,OEjIrB,IAAIolT,KAAiC,qBAAX5wU,SACtBA,OAAOsX,WACPtX,OAAOsX,SAASC,eAChB0sK,IAAY,EAEZwihB,GAAqB,EAOzB,SAASC,KACLD,GAAqBpnsB,KAAK+xB,MACtB6yJ,KACAA,IAAY,GAQb,SAAS0ihB,KACZ,OAAO1ihB,GANP2sJ,KACAt5T,SAASgjE,iBAAiB,aAAcosnB,IAAc,GACtDpvrB,SAASgjE,iBAAiB,YAAaosnB,IAAc,GACrDpvrB,SAASgjE,iBAAiB,aAf9B,WACQ2pG,IAAa5kL,KAAK+xB,MAAQq1qB,GAHP,MAMvBxihB,IAAY,MAWwC,IClBxD,IAAIqvZ,GAAe,CACf/1iB,KAAMl+B,KAAK+xB,MACX4yqB,GAAI,CAAC,EAAG,GACR3kY,MAAO,CAAC,EAAG,GACXr2J,QAAS,CAAC,EAAG,GACbnT,SAAU,CAAC,EAAG,GACd7qG,UAAW,CAAC,EAAG,GACf47oB,iBAAkB,CAAC,EAAG,GACtB5oe,MAAO,CAAC,EAAG,GACX6oe,UAAW,CAAC,EAAG,GACfC,SAAU,EACVj5b,SAAU,GAEVhiL,GAAgB,CAChBk7mB,aAAa,GAEbC,GAAe,KACZ,SAASC,GAAoB3prB,EAAS0Z,QACzB,IAAZ1Z,IAAsBA,EAAU,SACrB,IAAX0Z,IAAqBA,EAAS,IAClC,IAAI1e,EAAQvC,SAAau9jB,IACrB9oX,EAAKo5e,KAAiB,GAAI/3mB,GAAe70D,GAASsG,EAAMktL,EAAGltL,IAAKypqB,EAAcv8e,EAAGu8e,YACjFx0rB,EAAKwD,SAAaunB,GAAOjvD,KAAKy1E,UAC9BojpB,EAAUnxrB,UAAa,GAEvBoxrB,EAAepxrB,SAAauH,GAOhC,SAAS8prB,EAAW1ttB,GACZsttB,IAAgBA,GAAaK,qBAAqB3ttB,KAClDsttB,GAAaM,YAAY5ttB,GACzBsttB,GAAe,MAEnBO,EAAa7ttB,GAMjB,SAAS6ttB,EAAa7ttB,GAEdsttB,KAGJA,GAAe,CACXz0rB,GAAIA,EAAG6G,QACPkurB,YAAaA,EACbD,qBAAsBA,GAgH9B,SAAiB3ttB,GACTyttB,EAAa/trB,QAAQourB,SACrBL,EAAa/trB,QAAQourB,QAAQlvrB,EAAMc,QAAS1/B,GAhHhD8ttB,CAAQ9ttB,IAOZ,SAAS+ttB,IACLznsB,OAAOu6E,oBAAoB,YAAamtnB,GAAiB,GACzD1nsB,OAAOu6E,oBAAoB,YAAaotnB,GAAwB,GAChE3nsB,OAAOu6E,oBAAoB,UAAWqtnB,GAE1C,SAASC,EAAmBnutB,GACxBoutB,EAAiBputB,GACjBwttB,EAAQ9trB,SAAU,EAClB,IAAI2urB,EAoER,SAAiCrutB,GAC7B,QAAOyttB,EAAa/trB,QAAQ4urB,yBACtBb,EAAa/trB,QAAQ4urB,wBAAwB1vrB,EAAMc,QAAS1/B,GAtEpDsutB,CAAwBtutB,GAClCqutB,GACAR,EAAa7ttB,GAGrB,SAASwmV,EAAYxmV,GACjBoutB,EAAiBputB,GACjBwttB,EAAQ9trB,SAAU,EAnBlBpZ,OAAOs6E,iBAAiB,YAAaotnB,GAAiB,GACtD1nsB,OAAOs6E,iBAAiB,YAAaqtnB,GAAwB,GAC7D3nsB,OAAOs6E,iBAAiB,UAAWstnB,GAmBnC,IAAIG,EAmDR,SAA0BrutB,GACtB,QAAOyttB,EAAa/trB,QAAQ6urB,kBACtBd,EAAa/trB,QAAQ6urB,iBAAiB3vrB,EAAMc,QAAS1/B,GArD7CuutB,CAAiBvutB,GAC3BqutB,GACAR,EAAa7ttB,GAGrB,SAASwutB,IACL,OAAOlB,IAAgBA,GAAaz0rB,KAAOA,EAAG6G,QAMlD,SAAS+nT,EAAUznV,GACfwttB,EAAQ9trB,SAAU,EAClBqurB,IACKS,MAILlB,GAAe,KAuHnB,SAAmBtttB,GACf,IAAIoF,EAAIw5B,EAAMc,QACdd,EAAMc,QAAUwqrB,KAAiB,GAAItrrB,EAAMc,QAAS,CAAEytrB,UAAW/ntB,EAAEk/O,QAC/Dmpe,EAAa/trB,QAAQ+urB,WACrBhB,EAAa/trB,QAAQ+urB,UAAU7vrB,EAAMc,QAAS1/B,GAElDsttB,GAAe,KA5HfmB,CAAUzutB,IAMd,SAAS0utB,EAAkB1utB,IA8E3B,SAAyBA,GACrB,IAAI8wO,EAAK9wO,EAAEq7S,SAAWr7S,EAAEq7S,QAAQ,GAAKr7S,EAAEq7S,QAAQ,GAAKr7S,EAAGwzpB,EAAQ1ib,EAAG0ib,MAAOC,EAAQ3ib,EAAG2ib,MAChFrupB,EAAIw5B,EAAMc,QACVmkB,EAAOl+B,KAAK+xB,MACZi3qB,EAASn7D,EAAQpupB,EAAEkltB,GAAG,GACtBsE,EAASn7D,EAAQrupB,EAAEkltB,GAAG,GACtBuE,EAAUr7D,EAAQpupB,EAAEkqL,QAAQ,GAC5Bw/hB,EAAUr7D,EAAQrupB,EAAEkqL,QAAQ,GAC5B6kG,EAAWx/R,KAAK8oK,KAAKoxjB,EAAUA,EAAUC,EAAUA,GACnDnptB,EAAMhR,KAAK8oK,KAAKkxjB,EAASA,EAASC,EAASA,GAC3CG,EAAS,GAAKpptB,GAAO,GACrByntB,EAAWzntB,GAAOk+C,EAAOz+C,EAAEy+C,MAC3BqpqB,EAA6C,IAA1B9ntB,EAAE8ntB,iBAAiB,IAAsC,IAA1B9ntB,EAAE8ntB,iBAAiB,GACnE9ntB,EAAE8ntB,iBACF,CAAC2B,EAAUE,EAAQD,EAAUC,GACnCnwrB,EAAMc,QAAUwqrB,KAAiB,GAAItrrB,EAAMc,QAAS,CAAEmkB,KAAMA,EAAMymqB,GAAI,CAAC92D,EAAOC,GAAQy5D,iBAAkBA,EAAkBvnY,MAAO,CAACkpY,EAASC,GAAUxqe,MAAO,CACpJl/O,EAAE+ntB,UAAU,GAAK35D,EAAQpupB,EAAEkqL,QAAQ,GACnClqL,EAAE+ntB,UAAU,GAAK15D,EAAQrupB,EAAEkqL,QAAQ,IACpC89hB,SAAUvpqB,EAAOz+C,EAAEy+C,OAAS,EAAIz+C,EAAEgotB,SAAWA,EAAUj5b,SAAUA,EAAU7iN,UAAW,CAACq9oB,EAASI,EAAQH,EAASG,GAAS5yiB,SAAU/2K,EAAEkltB,KA/F7I0E,CAAgBhvtB,GACZwutB,KAgDR,SAAgCxutB,GAC5B,QAAOyttB,EAAa/trB,QAAQuvrB,wBACtBxB,EAAa/trB,QAAQuvrB,uBAAuBrwrB,EAAMc,QAAS1/B,GA/C7DivtB,CAAuBjvtB,IACvB0ttB,EAAW1ttB,GAOnB,SAASunV,EAAWvnV,GACZwutB,IAwFR,SAAgBxutB,GACRwttB,EAAQ9trB,SAAW+trB,EAAa/trB,QAAQ8nT,QACxCimY,EAAa/trB,QAAQ8nT,OAAO5oT,EAAMc,QAAS1/B,GAzF3CwnV,CAAOxnV,GA0Bf,SAAyBA,GACrB,QAAOyttB,EAAa/trB,QAAQwvrB,iBACtBzB,EAAa/trB,QAAQwvrB,gBAAgBtwrB,EAAMc,QAAS1/B,GAzBtDkvtB,CAAgBlvtB,IAChB0ttB,EAAW1ttB,GAkDnB,SAASoutB,EAAiBputB,GACtB,IAAI8wO,EAAK9wO,EAAEq7S,SAAWr7S,EAAEq7S,QAAQ,GAAKr7S,EAAEq7S,QAAQ,GAAKr7S,EAAGwzpB,EAAQ1ib,EAAG0ib,MAAOC,EAAQ3ib,EAAG2ib,MAChFrupB,EAAIw5B,EAAMc,QACdd,EAAMc,QAAUwqrB,KAAiB,GAAItwH,GAAc,CAAEuzH,UAAW/ntB,EAAE+ntB,WAAavzH,GAAauzH,UAAW7C,GAAI,CAAC92D,EAAOC,GAAQnke,QAAS,CAACkke,EAAOC,GAAQt3e,SAAU,CAACq3e,EAAOC,GAAQ5vmB,KAAMl+B,KAAK+xB,QAwD7L,SAASi2qB,EAAqB3ttB,GAC1B,OAAOyttB,EAAa/trB,QAAQiurB,sBACtBF,EAAa/trB,QAAQiurB,qBAAqB/urB,EAAMc,QAAS1/B,GAMnE,SAAS4ttB,EAAY5ttB,GACjB,IAAIoF,EAAIw5B,EAAMc,QACdd,EAAMc,QAAUwqrB,KAAiB,GAAItrrB,EAAMc,QAAS,CAAEytrB,UAAW/ntB,EAAEk/O,QAC/Dmpe,EAAa/trB,QAAQkurB,aACrBH,EAAa/trB,QAAQkurB,YAAYhvrB,EAAMc,QAAS1/B,GAOxD,SAASgutB,EAAgBhutB,GACjBittB,MACA1lY,EAAWvnV,GAGnB,SAASiutB,EAAuBjutB,GACxBittB,MACAyB,EAAkB1utB,GAG1B,SAASkutB,EAAelutB,GAChBittB,MACAxlY,EAAUznV,GA5OlBq8B,aAAgB,WACZoxrB,EAAa/trB,QAAUkE,IACxB,CAACA,IA6OJvH,aAAgB,WAAc,OAAO0xrB,IAA4B,IAoBjE,IAAI3V,EAAc,CACdv2b,aAAc2kE,EACd1kE,WAAY2lE,EACZ41S,YAAa91S,EACb4nY,oBAAqBhB,EACrBiB,mBAAoBV,GAEpBvW,EAAckV,EACZ,CACEj0Z,YAAa,SAAUp5T,GACfittB,MACAzmY,EAAYxmV,IAGpBqvtB,mBAAoB,SAAUrvtB,GACtBittB,MACAkB,EAAmBnutB,KAI7B,GACN,MAAO,CACH0Z,KAAMwwsB,KAAiB,GAAI9R,EAAaD,GACxCmX,0BAvCJ,WACQhC,KACAA,GAAaM,cACbN,GAAe,OAqCnBiC,oBA9BJ,WACI,OAAOjC,K,cCtRR,SAASkC,GAAS1+e,GACrB,IAAI5yM,EAAW4yM,EAAG5yM,SAAUg1E,EAAQ49H,EAAG59H,MAAOliC,EAAY8/J,EAAG9/J,UAAWz4D,EAAQ2xsB,KAAep5e,EAAI,CAAC,WAAY,QAAS,cACrHhwO,EAAUu7B,aAAiB4vrB,IAC/B,IAAKnrtB,EACD,MAAMtB,MAAM,mGAEhB,IAAI0sH,EAAMprH,EAAQorH,IAAKigmB,EAAcrrtB,EAAQqrtB,YAAarB,EAAchqtB,EAAQgqtB,YAAarkY,EAAU3lV,EAAQ2lV,QAASomY,EAA0B/rtB,EAAQ+rtB,wBAAyB16sB,EAAOrR,EAAQqR,KAAMvX,EAAIkG,EAAQlG,EAAG4sV,EAAS1mV,EAAQ0mV,OAAQE,EAAQ5mV,EAAQ4mV,MAAOtmN,EAAOtgI,EAAQsgI,KAAM6xJ,EAAanyR,EAAQ4pS,SAC7S+nK,EAAcrxU,EAAKqxU,YAAar4E,EAAYh5P,EAAKg5P,UACjD1vF,EAAWruQ,UAAa,GACxBozrB,EAAcpzrB,SAAa,CAAClqB,EAAM+5G,IAClCuqT,EAAKyzS,KAAewF,cAAU,WAC9B,GAAI7C,EAAyB,CAGzB,IAAI8C,EAAU9C,EAEd,OADA/B,IACO,CACHR,GAAIqF,EACJ1va,WAAW,EACXrnL,OAAQ,IACR6qL,MAAO,IACP3+L,QAAS,IAGjB,MAAO,CACHwlmB,GAAI,CAACn4sB,EAAM+5G,GACX+zL,WAAW,EACXrnL,OAAQ,IACR6qL,MAAO,EACP3+L,QAAS,MAEb,GAAItxC,EAASijW,EAAG,GAAIn3a,EAAMm3a,EAAG,GAejC,SAAShvF,EAAU7oT,GACf,IAAInvB,EAAIggtB,EAAY/vrB,QAAQ,GAAKd,EAAM+mT,MAAM,GACzCviT,EAAIqsrB,EAAY/vrB,QAAQ,GAAKd,EAAM+mT,MAAM,GAC7Cj7C,EAAShrQ,SAAU,EACnBgoT,EAAM9oT,EAAOnvB,EAAG2zB,GAEpB,IAAI1pB,EAAO6zsB,GAAoB,CAC3B2B,gBAAiB,SAAUtwrB,GACvB,OAAIutrB,IAGJ1lY,IACAgpY,EAAY/vrB,QAAU,CAACvtB,EAAM+5G,GAC7Bw+K,EAAShrQ,SAAU,GACZ,IAEX8nT,OA7BJ,SAAoB5oT,EAAO5+B,GACvB,IAAIyP,EAAIggtB,EAAY/vrB,QAAQ,GAAKd,EAAM+mT,MAAM,GACzCviT,EAAIqsrB,EAAY/vrB,QAAQ,GAAKd,EAAM+mT,MAAM,GAC7CrmV,EAAI,CACAgrtB,GAAI,CAAC76sB,EAAG2zB,GACRw1F,OAAQ,IACRqnL,WAAW,EACXn7L,QAAS,GACT2+L,MAAO,MAEX+jC,EAAO5oT,EAAOnvB,EAAG2zB,IAoBjBuqrB,qBAAsB,WAClB,OAAIjjb,EAAShrQ,SAKjBkurB,YAAanmY,EACbgnY,UAAWhnY,GACZ,CACC4lY,aAAa,IACd3zsB,KAKH2iB,aAAgB,WACPquQ,EAAShrQ,SACVpgC,EAAI,CACAgrtB,GAAI,CAACn4sB,EAAM+5G,GACX0M,OAAQ,IACR9T,QAAS,EACT2+L,MAAO,EACPxD,WAAW,MAGpB,CAACvV,EAAShrQ,QAASvtB,EAAM+5G,IAC5B,IAAIpqF,EAAQoorB,KAAiB,CAAEl5oB,UAIrB,IAAMA,GACAt3D,EAAM,CAAEw5F,MAAOg3mB,KAAiB,CAAEjtmB,OAAUkvmB,EAAc,YAASz4tB,EAAWklI,OAAQplD,EAAOolD,OAAQ/jB,SAAU,WAAY3hC,MAAOu/X,EAAc,KAAM3tV,QAAStxC,EAAOsxC,QAASqE,OAAQixQ,EAAY,KAAMrnT,UAAW,aAAckhD,UAAWhhF,aAAY,CAACugC,EAAO82oB,GAAI92oB,EAAOiwO,QAAQ,SAAU6ma,EAAIlltB,GACtS,MAAO,eAAiBkltB,EAAG,GAAK,OAASA,EAAG,GAAK,gBAAkBlltB,EAAI,QACrE8tG,IAAU36F,GACxB,MAA2B,oBAAb2lB,EAA2BA,EAAS0xrB,KAASt/oB,IAAKxuC,EAAO,CACnE4oQ,SAAUzX,EACVn+K,WAAYq3mB,EACZvxtB,EAAGA,EACHwmI,KAAMA,IACH/kG,gBAAoBuzrB,KAASt/oB,IAAK45oB,KAAiB,GAAIporB,GAAQ5D,GCxC1E,IAAMkpF,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CkqC,KAAM,CACFtpC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCugD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,OAE5C6rmB,qBAAsB,CAClBj1oB,QAAS,OACTmqB,MAAO,UACP3qB,MAAO,QAEX01oB,iBAAkB,CACdl1oB,QAASZ,EAAMZ,WAEnBg6C,IAAK,CACDx4C,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,GAAnB,cAA2BY,EAAMZ,QAAQ,GAAzC,OAEX29oB,aAAc,CACVz2mB,YAAatmC,EAAMZ,QAAQ,IAE/B49oB,sBAAuB,CACnBp8oB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,GAAnB,cAA2BY,EAAMZ,QAAQ,GAAzC,OAEX69oB,wBAAyB,CACrB78oB,MAAO,oCACPmsC,aAAc,MACdnL,UAAWphC,EAAMZ,QAAQ,GACzB+4C,aAAcn4C,EAAMZ,QAAQ,GAC5BouD,YAAaxtD,EAAMZ,QAAQ,GAC3Bu5C,aAAc34C,EAAMZ,QAAQ,IAEhC89oB,eAAgB,CACZv9lB,OAAQ,oBACRpT,aAAc,MACd3rC,QAASZ,EAAMZ,QAAQ,IAE3B62oB,iBAAkB,CACd1pmB,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3Clf,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,MAChC7pC,MAAO,IACPi2C,OAAQ,KAEZ8mmB,cAAe,CACXhzmB,OAAQ,WAEZk3L,WAAY,CACRl3L,OAAQ,OACR,WAAY,CACRA,OAAQ,aAGhBizmB,uBAAwB,CACpBrynB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQ4G,KAAKmX,UAAxB,gBAETu1lB,uBAAwB,CACpBtynB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE9BoqP,QAAS,CACLvqP,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAM,eAAD,OAAiBJ,EAAMZ,QAAQ,GAA/B,OACL4tC,YAAahtC,EAAMZ,QAAQ,QAInC,SAASk+oB,GAAT,GAYY,IAAD,UAXNn4hB,EAWM,EAXNA,QACAh3I,EAUM,EAVNA,KACA2yE,EASM,EATNA,QACAy8lB,EAQM,EARNA,QACAznmB,EAOM,EAPNA,SACA0nmB,EAMM,EANNA,eACAC,EAKM,EALNA,gBACAlH,EAIM,EAJNA,aACAO,EAGM,EAHNA,oBAGM,IAFN4G,uBAEM,SADNC,EACM,EADNA,qBAEK9rqB,GAAerb,sBAAYkP,gBAC3B48C,EAASn0C,EAAKtlD,IAAI,MAClB85I,EAAOx0F,EAAKtlD,IAAI,QACtB,EAAkD26C,oBAAS,GAA3D,mBAAO21mB,EAAP,KAA0BhB,EAA1B,KACA,EAA8C30mB,oBAAS,GAAvD,mBAAOo1mB,EAAP,KAAwBm+D,GAAxB,KACMv8V,GAAiBhkV,sBAAY6rK,aAAsB,aACnDt1G,GAAS8zK,eACT7iM,GAAUs2C,KACVwL,GAAOtpF,sBAAYupF,gBACjBlvG,GAAM+xB,YAAe,gBAArB/xB,EACFmwY,GAA0BxqX,sBAAYywJ,gBACtC22hB,GAA4B5trB,kBAAO,GACnC6trB,GAAa7trB,iBAAO,MACpB8trB,GC3JK,SAAuBv9tB,GACpC,IAAMw9tB,EAAc/trB,iBAAoC,MACxD,EAAoCwT,oBAAS,GAA7C,mBAAOs6qB,EAAP,KAAmBE,EAAnB,KAgBA,OAdA/yrB,qBAAU,WACR8yrB,EAAYnxrB,QAAU,IAAIqxrB,sBAAqB,gBAAEl2tB,EAAF,2BAC7Ci2tB,EAAcj2tB,EAAMm2tB,qBAErB,IAEHjzrB,qBAAU,WAGR,OAFA8yrB,EAAYnxrB,QAAQm3F,QAAQxjI,EAAIqsC,SAEzB,WACLmxrB,EAAYnxrB,QAAQqyK,gBAErB,CAAC1+M,IAEGu9tB,EDyIcK,CAAcN,IAC3BrI,GAAsBrwhB,GAAWA,EAAQt8L,IAAI,eAAiBs8L,EAAQt8L,IAAI,4BAC1E4stB,GAA0BD,IAC5B,eAACzmmB,EAAA,EAAD,CAASC,MAAOn+F,GAAE,kCAAmCo+F,UAAU,QAA/D,SACI,sBAAK3D,IAAKoqmB,KAAiBvnlB,IAAKt9G,GAAE,8BAA+BuvF,MAAO,CAAClgC,QAAS,aAEpF0+C,GAAYumE,EAAQt8L,IAAI,MACxB4mC,GAAW2F,wBACjB,GAA0BoO,mBAAS,CAC/BsoN,MAAO/uP,eAAK,IACZzJ,KAAI,iBAAE6xL,QAAF,IAAEA,OAAF,EAAEA,EAASt8L,IAAI,eAAf,QAA0B,GAC9B09W,KAAI,iBAAEphL,QAAF,IAAEA,OAAF,EAAEA,EAASt8L,IAAI,eAAf,QAA0B,GAC9BopO,MAAK,iBAAE9sC,QAAF,IAAEA,OAAF,EAAEA,EAASt8L,IAAI,gBAAf,QAA2B,EAChC+vpB,iBAAiB,EACjB+7D,UAAW,GACXC,cAAc,EACdz7D,mBAAmB,IARvB,qBAAOrtnB,GAAP,MAAc47E,GAAd,MAWAz8E,qBAAU,WACNy8E,IAAS,SAACquJ,GAAD,yBAAC,eACHA,GADE,IAEL9jC,MAAK,iBAAE9sC,QAAF,IAAEA,OAAF,EAAEA,EAASt8L,IAAI,gBAAf,QAA2B,SAErC,CAACs8L,EAAQt8L,IAAI,WAChB,IAAM8stB,GAAc,+BAChB,qBAAIv1mB,MAAO,CAACspjB,UAAW,OAAQ9olB,QAAS,GAAxC,SAEQ90C,GAAM6orB,UAAU7mtB,KAAI,SAACszf,EAAWnggB,GAC5B,OAAO,8BAAiBmggB,EAAKvyW,KAAKppB,aAAlBxkI,UAK1B4ztB,GAAoBvprB,mBAAQ,WAC9B,OAAOoqJ,oBAAS,SAACpiL,EAAyB9S,GACtCknH,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAELojZ,mBAAmB,OAEvB1pnB,GAAS,IAAI0wD,KAAoB,CAC7By+B,UAAWumE,EAAQt8L,IAAI,MACvBs8L,QAASA,EAAQ34L,IAAI8G,EAAM9S,GAC3BogpB,cAAc,EACd11B,WAAW,EACX4pG,6BAA6B,OAElC,OACJ,CAAC3vhB,EAAS11J,KACPm2N,GAAe,SAAC14P,GAClB,MAKIA,EAJA4kB,OACIxe,EAFR,EAEQA,KACA9S,EAHR,EAGQA,MAGJqxD,EACApiB,GAAS,IAAI0J,KAA6B,CACtCpT,GAAIymW,KACJ/8R,MAAM,MAIdiY,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,kBAEJziQ,EAAO9S,OAEG,UAAT8S,GAA8B,KAAV9S,GACtBq0tB,GAAkBvhtB,EAA2B9S,KAG/CuyX,GAAoB,WACtBgkW,IAAmB,SAAChhd,GAAD,OAAgBA,MAMjCqod,GAAmB,WACrB,IAAMx/lB,EAAYumE,EAAQt8L,IAAI,MAC9B4mC,GAAS,IAAIowD,KAAgC++B,IAC7CnvF,GAASv+B,eAAK+nB,2BAGdwW,GAAS,IAAI41F,OAAqB,KAUtCr6F,2BAAgB,WACZ08E,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAELjK,MAAO3mE,EAAQt8L,IAAI,mBAExB,CAACs8L,EAAQt8L,IAAI,cAChBoiC,qBAAU,WAE+B,IAAjCk6J,EAAQt8L,IAAI,YAAYhI,MAAcigI,GACtCrxF,GAAS,IAAIusE,KAAoC,CAAE1Z,SAAQs8B,UAAWumE,EAAQt8L,IAAI,MAAOi4H,SAAS,OAEvG,CAACA,EAASqkE,EAAQt8L,IAAI,YAAYhI,OACrCmqC,2BAAgB,WACR8yrB,KAAeF,GAA0BhxrB,UACzCgxrB,GAA0BhxrB,SAAU,EACpC86E,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAEL6+c,cAAc,OAElB19E,GAAgB,CACZ18Q,kBACAztR,UACAo4F,UACArlE,QACAx9B,SACA8pO,UAAW,SAACxlL,GACR,IAAM9mG,EAAO8mG,EAAI56G,QAAQmiB,KAAKsylB,OACxBk0E,EAAYzxtB,OAAO0D,KAAKk5C,GAAMhyC,KAAI,SAAA1E,GAAG,OAAI02C,EAAK12C,MACpDs+G,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAEL4+c,YACAC,cAAc,QAGtB3gU,OAAQ,WACJvsS,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAEL6+c,cAAc,aAK/B,CAACkJ,KACJ,IAAMO,GAA+B,iBAAGl5hB,QAAH,IAAGA,GAAH,UAAGA,EAASt8L,IAAI,mBAAhB,aAAG,EAA0B0J,MAAK,SAAAupH,GAAO,aAAW,OAAPA,QAAO,IAAPA,GAAA,UAAAA,EAASjzH,IAAI,8BAAb,eAAqChI,MAAO,YAAzF,SAIrC,GAAoD2iD,mBAAiB,GAArE,qBAAO86qB,GAAP,MAA2BC,GAA3B,MACMC,GAAc1zrB,SAASghhB,eAAe,aAAeltb,IACrDkF,GAAiB,IAAIG,KAAeyxD,oBAAS,SAACjnL,GAChD,IAAM2xE,EAAQ3xE,EAAQ,GAAGqjB,OAAOoyG,YAC3B9jD,GAEDm+oB,GADAn+oB,EAAQ,IACc,EACfA,EAAQ,KACO,EAEA,OAG1Bo+oB,IAAe1omB,GAAYgO,GAAeC,QAAQy6lB,IAEtDvzrB,qBAAU,WACN,OAAO,WACH64F,GAAem7E,gBAEpB,IAGH,OAAgDz7J,mBAAiB,GAAjE,qBAAOi7qB,GAAP,MAAyBC,GAAzB,MACA1zrB,2BAAgB,WACZ,GAAK8qF,EAAL,CACA,IAAM6omB,EAAiBx5hB,EAAQz/K,MAAM,CAAC,WAAY,EAAG,OAC/Ck5sB,EAAmB9zrB,SAASghhB,eAAeltb,GAAY,IAAM+/lB,GAE/DD,GADAE,EACoBA,EAAiB7jb,aAEjB,QAEzB,CAACjlL,IAEJ,IAoBMojiB,GAA4C/zd,EAAQt8L,IAAI,YAAY0J,MAAK,SAAAupH,GAAO,OAAoC,IAAhCA,EAAQjzH,IAAI,mBAChGg9kB,GAAe1gZ,EAAQz/K,MAAM,CAAC,WAAY,IAIhD,OACI,uCACI,eAAC,IAAD,CACI+pF,KAAMmpjB,EACN7lS,kBAAmBA,GACnBD,SAAU3tL,EAAQt8L,IAAI,QAAUs8L,EAAQt8L,IAAI,QAAUgoB,GAAE,8BACxDm9S,aApIgB,WACxByvZ,EAAgBn7nB,EAAQs8B,IACxBm0P,QAoII,gBAACjnQ,EAAA,EAAD,CAAMiK,UAAW,EAAGx1H,IAAKs9tB,GAAY3/oB,UAAWF,GAAQksC,KAAM9J,MAAO,CAAEmM,aAAc,OAAS5C,QAAS,WAI/F6zmB,GAHC1nmB,IADT,UAOI,gBAACn4C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAASpB,UAAWF,GAAQo7C,IAAKrzF,GAAI,aAAe64F,GAAxG,UACI,gBAACjhD,EAAA,EAAD,CACIW,WAAW,EACXc,QAAS,EAFb,UAII,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAEx/B,QAAS,EAAGR,MAAO,QAAnF,SACI,eAAC2uC,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,GAAE,oCAAsC,GAA/D,SACA,gCACE,eAACqwG,EAAA,EAAD,CACIJ,QAASA,EACT/1B,MAAM,UACNqV,MAAO,CAAEx/B,QAAS,GAClBohC,SAAU2gC,GAAyC,IAAjCwiD,EAAQt8L,IAAI,YAAYhI,KAC1Cy/G,SAAU,SAACpzG,EAAGyH,GAAJ,OAAiB4otB,EAAQ5otB,IACnCg1G,QAAS,SAACz8G,GACNA,EAAE87G,2BAMhB,eAACrrC,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEj/B,SAAU,EAAGC,SAAU,KAAlD,SAEQw8oB,GAA0BhxrB,QACpB,eAACmiF,EAAA,EAAD,CAASC,MAAO8nmB,GAAuB,GAAvC,SACE,eAAC97Z,EAAA,EAAD,CACErxM,QAAS,SAACz8G,GACNA,EAAE87G,mBAEN11G,KAAK,OACLsyB,MAAO/U,GAAE,iCACTi/F,YAAY,OACZ9N,SAAUu0mB,EACVj2mB,SAAUslJ,GACVplQ,MAAOsrC,GAAMx4B,KACbzS,KAAK,QACLu/G,MAAO,CAAChgC,MAAO,QACfooM,gBAAiB,CACbxqM,QAAS,CACLgkC,SAAUhkC,GAAQo/oB,yBAG1Bx7mB,WAAY,CACR5jC,QAAS,CACLgkC,SAAUhkC,GAAQq/oB,wBAEtB52Z,aAAe50Q,IAAgB6rqB,EAAmB,eAAClzV,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,UAI1G,eAACuT,EAAA,EAAD,UAAaxyE,GAAMx4B,SAGnC,eAACqqE,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEQk/oB,GAA0BhxrB,QACpB,eAACmiF,EAAA,EAAD,CAASC,MAAO8nmB,GAAuB,GAAvC,SACE,eAAC97Z,EAAA,EAAD,CACErxM,QAAS,SAACz8G,GACNA,EAAE87G,mBAEN11G,KAAK,QACLsyB,MAAO/U,GAAE,oCACT7rB,KAAK,SACLg9G,SAAUu0mB,EACVj2mB,SAAUslJ,GACVplQ,MAAOsrC,GAAMmmM,MACbpxO,KAAK,QACLu/G,MAAO,CAAChgC,MAAO,IACfooM,gBAAiB,CACbxqM,QAAS,CACLgkC,SAAUhkC,GAAQo/oB,yBAG1Bx7mB,WAAY,CACR5jC,QAAS,CACLgkC,SAAUhkC,GAAQq/oB,wBAEtB52Z,aAAe50Q,IAAgB6rqB,EAAmB,eAAClzV,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,UAI1G,eAACuT,EAAA,EAAD,UAAaxyE,GAAMmmM,UAGnC,gBAACt0J,EAAA,EAAD,CACIe,MAAM,EACNJ,WAAW,EACXgB,KAAK,SACLV,QAAQ,SACRb,WAAW,SACXG,UAAWF,GAAQ63oB,qBANvB,UASQ70T,GAAiB,eAACt6F,EAAA,EAAD,IAAuB8uZ,IACpC,eAAC73oB,EAAA,EAAD,CACIe,MAAM,EACNR,UAAWF,GAAQ83oB,iBAFvB,SAIKL,KAKT3prB,GAAM8orB,aAAe,eAACluZ,EAAA,EAAD,IAAuB56R,GAAM6orB,UAAUhutB,OAAS,GAAM,eAACg3E,EAAA,EAAD,UACvE,eAACoxC,EAAA,EAAD,CAASC,MAAO2mmB,GAAhB,SACI,eAAC,IAAD,QAKR0I,GACI,eAAC1gpB,EAAA,EAAD,UACI,eAACoxC,EAAA,EAAD,CAASC,MAAOn+F,GAAE,0BAAlB,SACI,eAAC,KAAD,QAEE,WAI1B,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWb,WAAW,SAArD,UACI,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACqwC,EAAA,EAAD,CAASC,MAAO8nmB,GAAuB,GAAvC,SACE,gCACE,eAAC+H,GAAA,EAAD,CAAgB78mB,SAAUu0mB,GAAgB5zkB,EAAMm8kB,YAAan8kB,EAAO9xH,GAAE,oCAAsC,GAA5G,SACK,SAACme,GAAD,OAAW,gBAAC,GAAD,2BAAgBA,GAAhB,cACR,gBAACqyE,EAAA,EAAD,CACIsI,QAAS,kBAhQrB,WACtB,IAAMk8d,EAAe1gZ,EAAQz/K,MAAM,CAAC,WAAY,IAChD0usB,GAAkBvuI,EAAc,EAAGu4I,GAAkB,CACjD3urB,YACA01J,UACA7iG,WA2P6Cy8nB,IACfv+tB,MAAM,OACNwhH,SAAU2gC,GAAQu2gB,KAAqCrzE,GAH3D,UAKI,eAAC,IAAD,CAAiB3ngB,UAAWF,GAAQ++oB,aAAc9wmB,SAAS,UAC1Dp7F,GAAE,0BAEP,gBAACwwF,EAAA,EAAD,CACI7gH,MAAM,YACNmpH,QAAS,WACL6qmB,GAAuB,CACnB/krB,YACA01J,UACAt0K,OAEJme,EAAMy6F,WARd,UAWI,eAAC,KAAD,CAAcvrD,UAAWF,GAAQ++oB,aAAc9wmB,SAAS,UACvDp7F,GAAE,+BAEP,gBAACwwF,EAAA,EAAD,CACI7gH,MAAM,SACNmpH,QAAS,WACLopQ,KACA/jV,EAAMy6F,WAJd,UAOI,eAAC,IAAD,CAAYvrD,UAAWF,GAAQ++oB,aAAc9wmB,SAAS,UACrDp7F,GAAE,yCAOrB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEQo3C,EAAW,eAAC0J,EAAA,EAAD,CAAY7V,QAAS,kBAAM6zmB,GAAe,IAA1C,SACH,eAACwB,GAAA,EAAD,MAEJ,eAACx/lB,EAAA,EAAD,CAAY7V,QAAS,kBAAM6zmB,GAAe,IAA1C,SACI,eAACyB,GAAA,EAAD,cAMxB,eAACxjmB,EAAA,EAAD,CAASv9C,UAAWF,GAAQq2R,UAEvBupX,GAA0BhxrB,SAAWu4J,EAAQt8L,IAAI,YAAYhI,KAAO,EACjEi1H,EACE,eAACn4C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGlB,UAAWF,GAAQg/oB,sBAAtD,SACwB,IAArBlxrB,GAAMggO,MAAMjrQ,KACLirC,GAAMggO,MAAMh+P,KAAI,SAACguH,EAASiD,GAC1B,IAAMmgmB,EAAW,GAAKZ,IAAkC,EACxD,OAAS,eAAC3gpB,EAAA,EAAD,CACL+B,GAAIw/oB,EACJxgpB,MAAM,EACN0hC,MAAO,CAACx/B,QAAS,GAHZ,SAML,eAAC,GAAD,CACI+oC,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBAClBm8E,QAASA,EACTh3I,KAAMA,EACN2tE,QAASA,EACTiD,aAAcA,EACdw3lB,aAAcA,EACdO,oBAAqBA,EACrBjuE,YAAa80E,EAAqB90tB,IAAIizH,EAAQjzH,IAAI,OAClDswpB,kBAAmBA,EACnBhB,qBAAsB,SAAC33pB,GAAD,OAAoB23pB,EAAqB33pB,IAC/D88H,YAAa,kBAAM82lB,GAAkBt4lB,EAASiD,EAAcq/lB,GAAkB,CAC1E3urB,YACA01J,UACA7iG,eAhBHy8B,MAqBT,eAACk5lB,GAAD,CAAqB33mB,SA5OvB,SAAC2yK,EAAeylc,EAAkByG,EAAuBrwb,GACnF,GAAI4pb,IAAgByG,EAApB,CAGA,IAhByBC,EAgBnB1mtB,EAASw+sB,GAAKprrB,GAAMggO,MAAMzoP,OAAQq1sB,EAAayG,GAhB5BC,EAiBLlxsB,iBAAOxV,GAhB3BgvG,IAAS,SAACquJ,GAAD,mBAAC,eACHA,GADE,IAELjK,MAAOszd,OAEX3vrB,GAAS,IAAI0wD,KAAoB,CAC/By+B,UAAWumE,EAAQt8L,IAAI,MACvBs8L,QAASA,EAAQ34L,IAAI,WAAY4ytB,GACjCl0G,WAAW,EACX01B,cAAc,OA+OY,SACA,eAACjjkB,EAAA,EAAD,CACIyiC,MAAO,CACHhgC,MAAO,OACPi2C,OAAQ,QAHhB,SAKI,gBAAC+imB,GAAD,CACIrzrB,GAAIo/J,EAAQt8L,IAAI,MAAM9C,WACtBsztB,YAAa9C,EACbgB,YAAa+G,GACbh3V,UAAWm3V,GACXr+mB,MAAO,CAAEiW,OAAO,GAAD,OAAKoomB,GAAmB58tB,KAAKqjB,KAAK4mB,GAAMggO,MAAMjrQ,KAAOy9tB,IAArD,MAA8El+oB,MAAO,QALxG,UAOKt0C,GAAMggO,MAAMh+P,KAAI,SAACguH,EAASiD,GACvB,IAAMD,EAAgBhD,EAAQjzH,IAAI,iBAClC,OACI,eAAC6ztB,GAAD,UACI,sBACI32rB,GAAI+4F,EACJ1e,MAAO,CAACx/B,QAAS,GACjB1C,UAAWq4oB,EAAev4oB,GAAQm/oB,cAAgBn/oB,GAAQqjO,WAH9D,SAKI,eAAC,GAAD,CACI13L,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBAClBm8E,QAASA,EACTh3I,KAAMA,EACN2tE,QAASA,EACTiD,aAAcA,EAEdw3lB,aAAcA,EACdO,oBAAqBA,EACrBjuE,YAAa80E,EAAqB90tB,IAAIizH,EAAQjzH,IAAI,OAClDswpB,kBAAmBA,EACnBhB,qBAAsB,SAAC33pB,GAAD,OAAoB23pB,EAAqB33pB,IAC/D88H,YAAa,kBAAM82lB,GAAkBt4lB,EAASiD,EAAcq/lB,GAAiB,CACzE3urB,YACA01J,UACA7iG,aATCy8B,MAZFD,MA4BvB,wCAMlB,gBAACnhD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,GAAQi/oB,wBAA5E,UACE,eAACt/oB,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEkG,YAAa,OAAxC,SACI,eAAChI,EAAA,EAAD,CAAY+K,QAAQ,EAApB,SAA2Bx4F,GAAE,8BAEjC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,GAAQk/oB,eAAtD,SAEQ/3hB,EAAQt8L,IAAI,YAAYiF,KAAI,SAACguH,EAASoyR,GAClC,IAAMl/R,EACF,kCAAOn+F,GAAE,wBAAT,KAAoCirG,EAAQjzH,IAAI,SAAS,wBAAMgoB,GAAE,yBAAjE,KAA6FirG,EAAQjzH,IAAI,sBACrG,wBAAMgoB,GAAE,2BADZ,KAC0CirG,EAAQjzH,IAAI,mBAE1D,OACI,eAAC80E,EAAA,EAAD,CACIe,MAAM,EAEN0hC,MAAO,CAAEx/B,QAAS,UAHtB,SAKI,eAACmuC,EAAA,EAAD,CACIC,MAAOA,EACP5O,MAAO,CAACmb,WAAY,YAFxB,SAII,gCACI,eAAC,KAAD,CACIjQ,IAAKwQ,EAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAAzC,eAAsE,EAC3E06D,MAAM,OACNurC,YAAa,OACbC,aAAa,SAZpBsiS,WAsB7B,sBAAK9tS,MAAO,CAAE//B,OAAQ,QAAtB,SACE,eAAC0uC,EAAA,EAAD,CAASC,MAAO8nmB,GAAuB,GAAvC,SACE,gCACE,eAACrtmB,EAAA,EAAD,CAAQvrC,UAAWF,GAAQi4oB,iBAAkBj0mB,SAAUu0mB,EAAc5smB,QAAS,kBAAMy0mB,MAApF,SACKvtsB,GAAE,8BAOjBilG,EAAY,sBAAK1V,MAAO,CAAE//B,OAAQ,GAAtB,SAEJu9oB,GAA0BhxrB,QACpB,eAACmiF,EAAA,EAAD,CAASC,MAAO8nmB,GAAuB,GAAvC,SACE,eAAC97Z,EAAA,EAAD,CACErxM,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBAClB11G,KAAK,OACLqrG,WAAW,EACX/4E,MAAO/U,GAAE,gCACTmxF,SAAUu0mB,EACVj2mB,SAAUslJ,GACVplQ,MAAOsrC,GAAMy6U,KACbtjB,WAAW,EACXpiW,KAAK,QACL2nR,gBAAiB,CACbxqM,QAAS,CACLgkC,SAAUhkC,GAAQo/oB,yBAG1Bx7mB,WAAY,CACR5jC,QAAS,CACLgkC,SAAUhkC,GAAQq/oB,wBAEtB52Z,aAAe50Q,IAAgB6rqB,EAAmB,eAAClzV,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,UAI1G,eAACuT,EAAA,EAAD,UAAaxyE,GAAMy6U,SAE1B,WAOdh9U,WAAM4G,KAAKmtrB,I,6BEpqBX+B,GAxB4C,SAAC,GAOrD,IANHxuc,EAME,EANFA,YACAzlP,EAKE,EALFA,SACA+iB,EAIE,EAJFA,KACAg3I,EAGE,EAHFA,QACAlkM,EAEE,EAFFA,MAEE,IADFm/G,aACE,MADK,GACL,EACI9d,EAASn0C,EAAKtlD,IAAI,MAClB+1H,EAAYumE,EAAQt8L,IAAI,MACxBk0N,EAAe5uK,EAAKtlD,IAAI,gBAC9B,OACI,eAAC,IAAD,CAAWgoR,YAAaA,GAA4BQ,aAAsB/uL,EAAQs8B,EAAWm+F,GAAe97N,MAAOA,EAAO+wT,gBAAgB,EAA1I,SACK,SAAC2C,GACE,OACI,8CAAKp0T,IAAKo0T,EAAkB3iD,UAAc2iD,EAAkBhD,gBAA5D,IAA4EvxM,MAAK,uCAAOu0M,EAAkBhD,eAAevxM,OAAUA,GAAlD,IAAyDx/B,QAAS,UAAnJ,SACKx1C,S,4DCgFVk0rB,GAxF8C,SAAC,GAWvD,IAVHhzmB,EAUE,EAVFA,SACA6zK,EASE,EATFA,WASE,IARF6xB,sBAQE,aAPFuta,oBAOE,aANFn/mB,aAME,MANM,GAMN,EALFuJ,EAKE,EALFA,QACA3H,EAIE,EAJFA,SACA8e,EAGE,EAHFA,QACAl7F,EAEE,EAFFA,MACA5+B,EACE,EADFA,IAEQ6pB,EAAM+xB,YAAe,gBAArB/xB,EACFmvD,EAAQwjD,cACd,EAA4Cj6F,IAAMia,UAAS,GAA3D,mBAAOg8qB,EAAP,KAAuBC,EAAvB,KACA,OACI,0DACIl/tB,IAAK+rH,EAAS0lJ,UACV1lJ,EAASqlM,gBACTrlM,EAASmlM,iBAHjB,IAIIrxM,MAAK,yBACD0J,gBAAiBq2K,EAAa,sBAAwB,eACnD7zK,EAASqlM,eAAevxM,OACxBA,GAPX,SAWI,gBAAC22G,GAAA,EAAD,CACI9kG,QAAQ,EACRtI,QAASA,EACT3H,SAAUA,EACV5B,MAAO,CAAEx/B,QAAS,YAJtB,UAMI,eAACijV,GAAA,EAAD,CAAczjT,MAAO,CAAE9/B,SAAU,QAAjC,SACI,eAAC4gD,EAAA,EAAD,CACIn2B,MAAO,UACPmyO,KAAK,QACLp8M,QAASA,EACTsI,UAAW,EACX++P,eAAe,MAGvB,uBAAK/nR,MAAO,CACR0mB,KAAM,WACNxmD,SAAU,EACV8gC,UAAW,MACX+W,aAAc,MACd7R,YAAa,QALjB,UAOI,eAAChI,EAAA,EAAD,CAAY+K,QAAQ,EAAM7K,QAAQ,QAAlC,SAA2C54E,IAC3C,eAAC04E,EAAA,EAAD,CAAY+K,QAAQ,EAAM7K,QAAQ,UAAlC,uBAAoDx3G,QAExD,sBACIo5G,MAAO,CACHhgC,MAAO,GACPF,QAAS,OACTM,eAAgB,SAChBzC,WAAY,SACZiuR,UAAW,WAEf7xO,aAAc,WACdslmB,GAAkB,IACnBrlmB,aAAc,WACbqlmB,GAAkB,IAXtB,SAaMF,GAAgBC,EAAkB,eAACzwmB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2CAAlB,SAC5B,+BACI,eAAC25W,GAAA,EAAD,CACIpqR,MAAO,CACHrV,MAAOw0nB,EAAev/oB,EAAM+pC,QAAQC,KAAK,KAAO,iBAK7DgoM,EAMM,KANW,+BAChB,eAAC,KAAD,CAAY5xM,MAAO,CACfrV,MAAOw0nB,EAAev/oB,EAAM+pC,QAAQC,KAAK,KAAO,UAChD5pC,MAAO,GACPi2C,OAAQ,iB,oBCnDlC/B,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C0/oB,YAAa,CACX9+oB,QAASZ,EAAMZ,QAAQ,IAAK,EAAG,GAAK,IAEtCukT,WAAY,CACV54R,MAAO,WAETqxN,SAAU,CACRh8O,MAAO,eAETu/oB,gBAAiB,CACfz/oB,QAAS,OACTiB,SAAU,EACVD,UAAW,EACXiuC,SAAU,SACVvuC,QAASZ,EAAMZ,QAAQ,GAAK,EAAG,EAAG,IAGpCm+mB,UAAW,CACTj9mB,SAAU,IACVF,MAAO,MACPkmD,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,MAC7CqiM,UAAW,SACXt9K,UAAW,UAEbjI,KAAM,CACJ5mD,QAAS,OACTK,cAAe,UAEjBq/oB,QAAS,CACP94lB,KAAM,EACN3X,SAAU,UAEZsukB,WAAY,CACV32jB,KAAM,EACN3X,SAAU,OACVvuC,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B/hE,KAAM,CACJ+iE,MAAO,OACPgB,SAAU,IACV0oC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1Cj2C,QAAS,GAEXi/oB,YAAa,CACX3/oB,QAAS,OACTK,cAAe,SACfsuT,IAAK7uT,EAAMZ,QAAQ,GACnB23C,WAAY,EACZC,cAAe,EACfwW,YAAaxtD,EAAMZ,QAAQ,GAC3Bu5C,aAAc,EACdv4C,MAAO,OACP0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,OAE5CsuE,QAAS,CACPjlH,QAAS,QACTD,UAAW,aACX0/C,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MACxCuC,aAAcvsC,EAAM4/C,MAAMrT,aAC1B3rC,QAAS,GAEX2oC,MAAO,CACLnpC,MAAO,eAET/R,QAAS,CACP0zC,SAAU,WACVziG,MAAO,GACPi8G,WAAY,cAgYDukmB,IA5Xf,YAsBI,IAAD,EArBD3xqB,EAqBC,EArBDA,KACAooqB,EAoBC,EApBDA,aACAO,EAmBC,EAnBDA,oBACA2G,EAkBC,EAlBDA,gBACAsC,EAiBC,EAjBDA,oBACAC,EAgBC,EAhBDA,uBAgBC,IAfDhua,sBAeC,aAdDiua,gCAcC,SAbDC,EAaC,EAbDA,sBAaC,IAZDC,8BAYC,SACKtuqB,GAAerb,sBAAYkP,gBACjC,EAAoD8lV,eAA5C83B,EAAR,EAAQA,kBAAmB88T,EAA3B,EAA2BA,qBACnBvvsB,EAAM+xB,YAAe,gBAArB/xB,EACFmvD,EAAQwjD,cACRxlD,EAAUs2C,KACV7kF,EAAW2F,wBACX23D,EAAS8zK,eACT4R,EAA0Bj8O,sBAAYg7K,YAA4B,KAClEg9G,EAA0Bh4R,sBAAYmkG,gBACtC0llB,EAAcrwrB,iBAAO,MAC3B,EAA8DzG,IAAMia,UAAS,GAA7E,mBAAO88qB,EAAP,KAAgCC,EAAhC,KACA,EAAwDh3rB,IAAMia,SAAmCt1B,iBAAO,KAAxG,mBAAOyvsB,GAAP,KAA6B6C,GAA7B,KAEIC,GAAmC,KACjCC,GAAwB1wrB,iBAAuB,MAC/C2wrB,GAAiB3wrB,iBAAyB,MAC1C4wrB,GAAgC5wrB,iBAAuB,MAEvD2yG,GAAI,OAAGx0F,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,QACjBy5F,GAASn0C,EAAKtlD,IAAI,MAClBi0N,GAAWumM,YAAgCl1W,EAAMm1W,GACjDu9T,GAAmBpuc,EAAwB5pR,IAAIy5F,IAC/Cw+nB,IAAuC,OAAhBD,SAAgB,IAAhBA,QAAA,EAAAA,GAAkBxwtB,OAAOiiR,MAAuBp4Q,UAAW,EAElF6mtB,GAAqBjkgB,IAAYA,GAASzsN,QAAO,SAAC80L,GAAD,OAAaA,EAAQt8L,IAAI,YAAYhI,KAAO,KAE7Fg3X,GAAuC,IAAzBipW,IAA8BC,GAAmB1utB,OAAM,SAAA8yL,GACzE,OAAOmtF,aAAsBuuc,GAAiBh4tB,IAAIs8L,EAAQt8L,IAAI,WAG1Dm4tB,GAA8C,IAAzBF,IAA8BC,GAAmBxutB,MAAK,SAAA4yL,GAC/E,OAAOmtF,aAAsBuuc,GAAiBh4tB,IAAIs8L,EAAQt8L,IAAI,WAG1Do4tB,GAAqCpvqB,GAAe,GAAS,OAAJ1D,QAAI,IAAJA,OAAA,EAAAA,EAAMzoC,MAAM,CAAC,UAAW,UAAW,UAAnC,OAA6C8oT,QAA7C,IAA6CA,OAA7C,EAA6CA,EAAyB9oT,MAAM,CAAC,UAAW,UAAW,EAsClK,SAASw7sB,GAAgBtimB,GACvB,IAAMumE,EAAUg8hB,KAASt4tB,IAAI+1H,GACzBumE,GACFA,EAAQ60N,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,WAGxD,SAAS+od,KAIP,OAHKd,EAAYzzrB,UACfyzrB,EAAYzzrB,QAAU,IAAIl1B,KAErB2otB,EAAYzzrB,QA/CrBrD,IAAM0B,WAAU,WACd,GAAIg2rB,KAAuCh9rB,kBAAekB,OAAQ,CAEhE,IAAMi8rB,ECzK8B,SACxCjzqB,EACAkzqB,GACqB,IAAD,EACdC,EAAiB,OAAGnzqB,QAAH,IAAGA,GAAH,UAAGA,EAAMtlD,IAAI,mBAAb,aAAG,EAAuB4H,QAC/C,SAACutI,EAAKmnD,GAAN,OACEA,EAAQt8L,IAAI,YAAY4H,QAAO,SAAC8wtB,EAAYzlmB,GAC1C,IAAM/1F,EAAK+1F,EAAQjzH,IAAI,MACvB,OAAIw4tB,EAAet4tB,IAAIg9B,IAAOw7rB,EAAWx4tB,IAAIg9B,GACpCw7rB,EAEFA,EAAW/0tB,IAAIu5B,EAAI+1F,KACzBkiB,KACLwjlB,iBAGF,OAAwB,OAAjBF,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBj7sB,WAAYtJ,iBDyJP0ktB,CAA2BtzqB,EAAMwvqB,IAE5D,GAAIyD,EAAmBvguB,KAAO,EAAG,CAG/B,IAAM2/Q,EAAa,IAAIC,gBAsBvB,OArBC1zK,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,yBACV5zD,OAAQ,CAAEzyC,KAAM,SAChBu2E,KAAM,CAAEohD,SAAUykmB,EAAmBtztB,KAAI,SAACguH,GAAD,OAAaA,EAAQz4G,UAAQ3b,WACtEg5Q,OAAQF,EAAWE,SACVrlM,MAAK,SAACurE,GAAS,IAAD,IAGjBkigB,EAAU,OAAGligB,QAAH,IAAGA,GAAH,UAAGA,EAAK56G,eAAR,iBAAG,EAAc8vF,eAAjB,aAAG,EAAuBgthB,WACrCvipB,MAAMC,QAAQsipB,IAGnB03E,IAAwB,SAACpktB,GAAD,OCpKI,SACpC5H,EACAmoH,EACAmshB,GAHoC,OAKpCnshB,EAASlsH,QACP,SAACutI,EAAKliB,EAAS76H,GAAf,OAAyB+8I,EAAIxxI,IAAIsvH,EAAQjzH,IAAI,MAAOigpB,EAAW7npB,MAC/DuT,GD6JwCkttB,CAAuBtltB,EAAMgltB,EAAoBt4E,SAClFr9c,OAAM,SAACv1J,GAED,OAAHA,QAAG,IAAHA,KAAK5iC,QAKJ,WACLktQ,EAAWG,aAIhB,QAACxyN,QAAD,IAACA,OAAD,EAACA,EAAMtlD,IAAI,kBAed,IAMM84tB,GAAiB,WAAO,IAAD,IACrBC,EAAK,UAAGjB,GAAe/zrB,eAAlB,aAAG,EAAwBmyP,wBAChC8ic,EAAS,UAAGjB,GAA8Bh0rB,eAAjC,aAAG,EAAuCmyP,wBAGnD+ic,GAAiB,OAALF,QAAK,IAALA,OAAA,EAAAA,EAAOtitB,OAFD,IAEN,OAAiCuitB,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAWxitB,MAG5DkhtB,IADEuB,IAONv4rB,IAAM0B,WAAU,WAGd,OAtBKy1rB,GAAsB9zrB,UAC3B6zrB,GAAmC,IAAIx8lB,KAAe09lB,KACrB59lB,QAAQ28lB,GAAsB9zrB,SAmB/D+0rB,KACO,WACDlB,IACFA,GAAiCxhhB,aAEnCwhhB,GAAmC,QAEpC,IAEH,IAAMtuQ,GAAcnkW,uBAClB,YAA4B,IAAzB/sH,EAAwB,EAAxBA,MAAYm/G,GAAY,EAAjBh3G,IAAiB,EAAZg3G,OACP+kF,EAAU23B,GAASj0N,IAAI5H,GAC7B,IAAKkkM,EACH,OAAO,KAET,IAAMvmE,EAAYumE,EAAQt8L,IAAI,MACxB+8B,EAAQu/J,EAAQt8L,IAAI,QACpB7B,EAAMm+L,EAAQt8L,IAAI,SAClBi4H,EAAUwxJ,aAAqB,OAACuuc,SAAD,IAACA,QAAD,EAACA,GAAkBh4tB,IAAI+1H,IACtD5c,EAA4C,IAAjCmjF,EAAQt8L,IAAI,YAAYhI,MAAc8hJ,GACjDh5B,EAAU,WACdl6E,EAAS,IAAIusE,KAAoC,CAC/C1Z,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,YACAkC,SAAUA,KAEZogmB,GAAgBtimB,IAEZiyJ,EAAcS,aAAwBhvL,GAAQs8B,GACpD,OACE,eAAC,IAAD,CAA6BiyJ,YAAaA,EAAa5vR,MAAOA,EAAO+wT,eAAgBA,GAAwC,KAAtBsxG,GAA4BzxW,EAAnI,SACG,SAAC8iQ,EAAmB1E,GACnB,OACE,eAAC,GAAD,CACE3jM,SAAUqoM,EACVx0B,WAAY8vB,EAAS9vB,WACrBo/b,aAAY,OAAEW,QAAF,IAAEA,IAAyBruqB,EACvCmgQ,eAAgBiua,GAAkD,KAAtB38T,EAC5C35S,QAASA,EACTmX,QAASA,EACT9e,SAAUA,EACVp8E,MAAOA,EACP5+B,IAAKA,EACLo5G,MAAOA,MAbCywK,KAmBjB,CAAC/zD,KAEN,OACE,uCACE,gBAAC48F,EAAA,EAAD,CAAKqoa,QAAS,OAAQ7jpB,UAAWF,EAAQ0hpB,YAAat/mB,MAAO,CAAElgC,QAAS,QAAxE,UACE,sBAAKkgC,MAAO,CAAElgC,QAAS,OAAQE,MAAO,MAAOE,SAAU,KAAvD,SACE,eAACyuC,EAAA,EAAD,CAASC,MAAO2zB,GAAO9xH,EAAE,oCAAsC,GAA/D,SACE,uBAAMuvF,MAAO,CAAEhgC,MAAO,cAAe4sC,WAAY,GAAjD,SACE,eAAC6vM,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACNiX,SAAU2gC,IAA0B,IAAlBm6E,GAASj8N,KAC3BigI,QAAS+2P,IAAempW,GACxB1kJ,eAAgBzkN,IAAempW,KAGnCp7rB,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,KAAKpgC,UAAU,OAAOgiC,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IAA9E,SAAqFvuD,EAAE,kCAC9FqtD,UAAWF,EAAQo+O,SACnB97M,SAAU,SAACpzG,EAAG4zH,GAAa,IAAD,EAClB8kS,EAAkBz3W,GAAQ2uK,GAASrsN,QAAO,SAACutI,EAAKmnD,GACpD,OAAIA,EAAQt8L,IAAI,YAAYhI,KAAO,EAC1Bm9I,EAAI5oI,OAAOktF,GAAQvlF,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,UAE3Dm1I,IACN9vH,iBAAO,MACN,UAAA03Y,EAAgB/8Z,IAAIy5F,WAApB,eAA6BzhG,MAAO,GACtC4uC,EAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,sBAOpF,gBAACnjD,EAAA,EAAD,CAAMp9E,IAAKmguB,GAAuBpipB,WAAW,EAAMM,QAAQ,gBAAgBf,aAAa,SAASyB,KAAK,SAAS8gC,MAAO,CAAE0mB,KAAM,GAA9H,UACE,eAAC/X,EAAA,EAAD,CAASC,MAAOn+F,EAAE,kCAAlB,SACE,eAACy4F,EAAA,EAAD,CACE/oH,IAAKoguB,GACLrgnB,SAAU,SAACpzG,GACT,IAAMyH,EAAWzH,EAAE4kB,OAAOtxB,MAC1B4/tB,EAAqBzrtB,IAEvBm7G,YAAaj/F,EAAE,qCACfrwB,MAAO8ia,GAAqB,GAC5B78F,aACE,eAAC3kN,EAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,eAAC,IAAD,CAAYkK,SAAS,QAAQ/tC,UAAWF,EAAQ2lT,eAGpD3lT,QAAS,CAAEurC,MAAOvrC,EAAQurC,OAC1BnJ,MAAO,CACL4M,WAAY,QAIlB,uBAAM9uC,UAAWF,EAAQ3P,QAAzB,gBAAmC2xpB,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAyB,CAAEgC,UAAW1B,EAAyB2B,QAAQ,MAE1G,uBAAM/jpB,UAAWF,EAAQ3P,QAAS9tE,IAAKqguB,GAA+BxgnB,MAAO,CAAE0tP,WAAY,SAAU30O,cAAe,QAApH,gBAA+H6mmB,QAA/H,IAA+HA,OAA/H,EAA+HA,EAAyB,CAAEgC,UAAU,EAAMC,QAAQ,YAGtL,gBAACvoa,EAAA,EAAD,CAAKn/O,EAAG,EAAGwnpB,QAAS,OAAQ7jpB,UAAWF,EAAQ2hpB,gBAA/C,UACE,sBACEzhpB,UAAW2B,oBAAI,mBACZ7B,EAAQu/mB,WAAY,GADR,cAEZv/mB,EAAQ8oD,MAAO,GAFH,IADjB,SAME,eAAC,IAAD,CACEoqJ,YAAaC,aAA+B7uL,IAC5Cw9B,KAAK,UACLyyL,YAAa,SAACjmM,EAAU2jM,EAAU2B,GAChC,IAAMzsH,EAAU23B,GAASj0N,IAAI+oT,EAAO7/R,OAAO9wB,OACrC29H,EAAYumE,EAAQt8L,IAAI,MACxB+8B,EAAQu/J,EAAQt8L,IAAI,QACpB7B,EAAMm+L,EAAQt8L,IAAI,SAClBi4H,EAAUwxJ,aAAqB,OAACuuc,SAAD,IAACA,QAAD,EAACA,GAAkBh4tB,IAAI+1H,IACtD5c,EAA4C,IAAjCmjF,EAAQt8L,IAAI,YAAYhI,MAAc8hJ,GASvD,OACE,eAAC,GAAD,CACEr2B,SAAUA,EACV6zK,WAAY8vB,EAAS9vB,WACrBo/b,aAAY,OAAEW,QAAF,IAAEA,IAAyBruqB,EACvCmgQ,eAAgBiua,GAAkD,KAAtB38T,EAC5C35S,QAdY,WACdl6E,EAAS,IAAIusE,KAAoC,CAC/C1Z,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,YACAkC,SAAUA,KAEZogmB,GAAgBtimB,IASd5c,SAAUA,EACV8e,QAASA,EACTl7F,MAAOA,EACP5+B,IAAKA,KA5Bb,SAkCI,SAACk7tB,EAAmBjya,GAClB,OACE,sBAAK7vM,MAAO,CAAE0mB,KAAM,GAApB,SACE,eAAC,KAAD,CAAWq7lB,eAAe,EAA1B,SAEI,YAAwB,IAArB/hpB,EAAoB,EAApBA,MAAOi2C,EAAa,EAAbA,OACFwwS,EAAY52G,EAAS8C,mBACvBj2F,GAASj8N,KAAO,EAChBi8N,GAASj8N,KACb,OACE,eAAC,KAAD,CACEw1H,OAAQA,EACRypV,SAAUj5C,EACVv/B,UAAW,GACXlnT,MAAOA,EACP7/E,IAAK,SAACA,GAGJ,GAAIA,EAAK,CAEP,IAAM6huB,EAAsBzzc,KAASC,YAAYruR,GAC7C6huB,aAA+B9/a,aACjC4/a,EAAkBlwd,SAASowd,KAIjChinB,MAAO,CACL0J,gBAAiBmmM,EAAS2C,eAAiB,UAAY,cACvDjzL,OAAQswL,EAAS2C,eAAT,qBAAwC5yO,EAAM+pC,QAAQE,QAAQ,MAAS,QAEjF26V,iBAAkB,GAClBuN,YAAaA,eAYnC,sBAAKj0Y,UAAWF,EAAQy/mB,WAAxB,SAEsB,IAAlB3ge,GAASj8N,KAAT,OACIk/tB,QADJ,IACIA,OADJ,EACIA,IACA,eAACsC,GAAA,EAAD,CAAsBl0qB,KAAMA,EAA5B,SACC2uK,GAAShvN,KAAI,SAACq3L,EAASlkM,GAAW,IAAD,EAC1B29H,EAAYumE,EAAQt8L,IAAI,MACxB0pR,EAAa,OAAGsuc,SAAH,IAAGA,QAAH,EAAGA,GAAkBh4tB,IAAI+1H,GACtC9I,EAAQ,iBAAGy8J,QAAH,IAAGA,OAAH,EAAGA,EAAe1pR,IAAI,mBAAtB,SACd,OACE,eAAC,GAAD,CAAkCslD,KAAMA,EAAMg3I,QAASA,EAASlkM,MAAOA,EAAvE,SACE,sBAAKV,IAAK,SAAC2L,GACT,IAAM4B,EAAMqztB,KACRj1tB,EACF4B,EAAItB,IAAIoyH,EAAW1yH,GAEnB4B,EAAIw/G,OAAOsR,IALf,SASE,eAAC,GAAD,CACE8+lB,gBAAiByC,EACjBhyqB,KAAMA,EACNg3I,QAASA,EACToxhB,aAAcA,EACdO,oBAAqBA,EACrBhhmB,SAAUA,EACV6nmB,qBAAsBA,GACtBH,eAAgB,SAAC1nmB,GACfrmF,EAAS,IAAIusE,KAAoC,CAC/C1Z,OAAQn0C,EAAKtlD,IAAI,MACjB+1H,YACA9I,eAGJgL,QAASwxJ,aAAsBC,GAC/Bgrc,QAAS,SAAC5otB,GACR86B,EAAS,IAAIusE,KAAoC,CAC/C1Z,UACAs8B,UAAWumE,EAAQt8L,IAAI,MACvBi4H,QAASnsH,MAGb8otB,gBAAiBA,OAjCA7+lB,kB,uLE5b/B0jmB,EAKAC,E,yUCdG,MAA0B,0CCA1B,MAA0B,4C,gBCgD1BC,GA/B+C,SAAC,GAOxD,IANLC,EAMI,EANJA,aACA3hmB,EAKI,EALJA,QACAxgB,EAII,EAJJA,SACA9/G,EAGI,EAHJA,MACAwhH,EAEI,EAFJA,SACA9jC,EACI,EADJA,UAEA,OACE,cAAC6wC,EAAA,EAAD,CACEC,MAAOyzmB,EADT,SAGE,eAAC9kpB,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAChgC,MAAO,OAAQkmC,YAAa,IACpCvoC,WAAW,SACXG,UAAWA,GAAwB,KAJrC,UAME,qBAAKotC,IAAKoqmB,IAAiBvnlB,IAAI,uBAC/B,cAAC4sI,EAAA,EAAD,CACEj6I,QAASA,EACTxgB,SAAUA,EACV9/G,MAAOA,EACPwhH,SAAUA,EACVvD,WAAY,CAAE,aAAc,sB,2DCvCvBwpB,iBAAQ,kBAAM,4C,kDCAdA,iBAAQ,kBAAM,6C,SCChBy6lB,GAAqBx0sB,kBAAM,oBACrC6R,eAAe,CACd4isB,KAAM,CACJ,IAAO,CACLrvtB,KAAM,mBAJ0B,eAQrCgtB,WAAW,CACVqisB,KAAM,CACJ,IAAO,CACLrvtB,KAAM,iBAGVo9G,QAAS,CACP,IAAO,CACLp9G,KAAM,mBAhB0B,I,wNCG3BsvtB,GACD,iBADCA,GAEH,eAGGC,GAAuF,CAClGC,SAAU,CAAEC,QAAS,YAAaC,YAAa,oBAC/C5sI,OAAQ,CAAE2sI,QAAS,wBAAyBC,YAAa,kBAG9CC,GAAmB,mBAGnBC,GAA0D,CACrEH,QAAS,EACTC,YAAa,EACbG,SAAU,EACVt9Y,QAAS,GAGEu9Y,GAA2B,YAC3BC,GAAyB,YAGhCC,GAA4F,CAChGP,QAAS,CACPD,SAAU,SAACtiuB,GAAD,OAAWA,EAAQ4iuB,IAC7BhtI,OAAQ,SAAC51lB,GAAD,OAAWA,EAAQ4iuB,KAE7BJ,YAAa,CACXF,SAAU,SAACtiuB,GAAD,OAAoB,EAARA,EAAY,EAAK,IACvC41lB,OAAQ,SAAC51lB,GAAD,OAA0B,GAAdA,EAAQ,IAAU,IAExC2iuB,SAAU,CACRL,SAAU,SAACtiuB,GAAD,OAAWA,EAAQ6iuB,IAC7BjtI,OAAQ,SAAC51lB,GAAD,OAAWA,EAAQ6iuB,KAG7Bx9Y,QAAS,CACPi9Y,SAAU,SAACtiuB,GAAD,OAAWA,GACrB41lB,OAAQ,SAAC51lB,GAAD,OAAWA,KAMV+iuB,GAA4B,SACvC/iuB,EACAsyV,EACAv4G,GAEA,GAAa,MAAT/5O,GAA0C,KAAzBmT,OAAOnT,GAAO8iI,QAAiBpiF,MAAMz6C,OAAOjG,IAC/D,OAAOA,EAGT,IAAM+tB,EAAY+0sB,GAAgBxwY,GAAav4G,GAAO9zO,OAAOjG,IAC7D,OAAOmT,OAAOlN,OAAO8nB,EAAU2wO,QAAQgke,GAA2BpwY,OAIvD0wY,GAA4B,SAAC1wY,GAAD,OACtC,GAAG5zF,QAAQgke,GAA2BpwY,KC3D5B2wY,GAAkB,CAC7B,CAAEjjuB,MAAO,OAAQu7a,SAAU,6CAC3B,CAAEv7a,MAAO,gBAAiBu7a,SAAU,sDACpC,CAAEv7a,MAAO,MAAOu7a,SAAU,4CAC1B,CAAEv7a,MAAO,kBAAmBu7a,SAAU,sDACtC,CAAEv7a,MAAO,YAAau7a,SAAU,iDAChC,CAAEv7a,MAAO,kCAAmCu7a,SAAU,qEAG3C2nT,GAAe,CAC1B,CAAEljuB,MAAO,WAAYu7a,SAAU6mT,IAC/B,CAAEpiuB,MAAO,SAAUu7a,SAAU6mT,KAMlBe,GAA+E,CAC1FC,cAAe,UACfC,qBAAsB,WACtBC,eAAgB,UAChBC,sBAAuB,YAGZC,GAAwB9guB,OAAO0D,KAAK+8tB,IAWpCM,GAAgE,CAC3EC,YAAa,OACb3pf,MAAO,WACPqpf,cAAe,GACfC,qBAAsB,GACtBC,eAAgB,GAChBC,sBAAuB,IAGZI,GAA2EH,GAAsBvztB,QAC5G,SAAC2ztB,EAAch7tB,GAAf,mBAAC,eACIg7tB,GADL,mBAEGh7tB,EAAMo6tB,GAA0BG,GAA8Bv6tB,QAEjE,I,SCpDWi7tB,GAAoB77hB,aADN,IACiD06hB,GAA2BH,SAK1FuB,GAAoF,CAC/FxB,SAAUt6hB,aAJsB,IAI4B06hB,GAA2BC,UACvF/sI,OAAQ5tZ,aAA8B+7hB,YAA6CrB,GAA2BC,W,SCyC1GqB,GAAoB,SAAC7oe,EAAiCphB,GAAlC,MACiB,aAAzCopf,GAA8Bhoe,GAAwB2oe,GAAoB/pf,GAAS8pf,IAe/E/vmB,GAAYJ,cAA+B,SAACl0C,GAAD,MAAmB,CAClE62C,MAAO,CACLz2C,MAAO,KACPgB,SAAU,MACVR,QAAS,GACTg7L,UAAW,MACXzsJ,SAAU,UAEZi0R,UAAW,CACTrhS,SAAU,WACVziG,MAAO0gE,EAAMZ,SAAS,IACtBg6C,IAAKp5C,EAAMZ,SAAS,KAEtBqlpB,oBAAqB,CACnBrkpB,MAAO,GACPi2C,OAAQ,IAEVwpT,gBAAiB,CACfx/V,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,GAC5BwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BslpB,YAAa,CACX13mB,WAAYhtC,EAAMZ,QAAQ,MAE5B43W,QAAS,CACPp2W,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B0qC,gBAAiB,eAEnB66mB,UAAW,CACT,wBAAyB,CACvB14mB,SAAU,SAGd24mB,eAAgB,CACd75nB,MAAO,gBAAG85nB,EAAH,EAAGA,UAAH,gBAAsB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,KAA/C,iBAET09rB,kBAAmB,CACjB/5nB,MAAO,gBAAG85nB,EAAH,EAAGA,UAAH,gBAAsB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,KAA/C,iBAET4lW,YAAa,CACXj2Q,WAAY/2C,EAAMZ,QAAQ,IAE5B2lpB,cAAe,CACb5smB,aAAcn4C,EAAMZ,QAAQ,MAE9B4lpB,YAAa,CACX1+mB,YAAa,GAEf2+mB,oBAAqB,CACnB/kpB,QAAS,cACTy/C,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnC9nP,aAAc,EACd4C,SAAU,UAEZ+1mB,iBAAkB,CAChBtkpB,QAASZ,EAAMZ,QAAQ,IAAM,GAC7BkB,SAAU,GACVisC,aAAc,EACdsN,cAAe,OACfwH,WAAY,IACZt2B,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5Bq9lB,uBAAwB,CACtBr7mB,gBAAiB,gBAAG+6mB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,MAC7D2jE,MAAO,gBAAG85nB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWvsmB,cACnD,UAAW,CACTxO,gBAAiB,gBAAG+6mB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,QAGjEg+rB,WAAY,CACVzlmB,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnC9nP,aAAc,EACd3rC,QAASZ,EAAMZ,QAAQ,GACvBgiC,UAAWphC,EAAMZ,QAAQ,IAE3BimpB,iBAAkB,CAChB7+lB,YAAa,gBAAGq+lB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,OAE3Dk+rB,gBAAiB,CACfzrmB,cAAe,YACfwH,WAAY,IACZ+9I,cAAe,GACfjnJ,aAAcn4C,EAAMZ,QAAQ,IAE9BmmpB,eAAgB,CACdx6nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5B+4R,aAAc,CACZjgV,QAAS,EACTwgC,UAAWphC,EAAMZ,QAAQ,IAE3B8rP,IAAK,CACHtqP,QAASZ,EAAMZ,QAAQ,IAAM,GAC7BmtC,aAAc,IAEhBi5mB,eAAgB,CACdpknB,UAAWphC,EAAMZ,QAAQ,QAIhBqmpB,GAA0B,0BAuVxBC,GArVqD,WAClE,IAAMj2rB,EAAW2F,wBACX4qC,EAAQwjD,eACRz2B,EAAS8zK,eACPhwP,EAAM+xB,YAAe,gBAArB/xB,EACF88B,EAAgBnX,sBAAYiX,eAC5B+0E,EAAYhsF,sBAAYisF,eACxBhzB,EAAOj5D,sBAAYosK,aAA2B6ihB,KACpD,EAAoCl8rB,WAAe,GAAnD,oBAAO8tV,EAAP,KAAmBmW,EAAnB,KACA,EAA4BjkW,WAA4C06rB,IAAxE,oBAAOh0tB,EAAP,KAAe01tB,EAAf,KAEMd,EAAqCl3qB,EAAgB,YAAc,UACnEqwB,EAAUs2C,GAAU,CAAEuwmB,cAEtB37d,EAAa,WACjBz5N,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAI0/rB,GACJz2rB,MAAO,OAILo5X,EAAa,WACjB34X,EAAS,IAAI0J,KAA6B,CAAEs2D,MAAM,EAAO1pE,GAAI0/rB,OAQ/Dl8rB,aAAgB,WACVkmE,IALJ+9R,EAAc,GACdm4V,EAAU1B,KAOLx0nB,GACH9xD,WAAWurN,EAAY,OAExB,CAACz5J,IAEJ,IAAMm2nB,EAAsB,SAAC14tB,GAC3B,IAAM6ja,EAAY7ja,EAAE4kB,OAAOtxB,MAC3BmluB,GAAU,SAACvptB,GAAD,mBAAC,eAAeA,GAAhB,IAAsB8ntB,YAAanzT,QAGzC80T,EAAmB,SAACtrf,GAAD,OAA6B,WACpDorf,GAAU,SAACvptB,GAAD,OAAWA,EAAKm+N,QAAUA,EAChCn+N,EADiB,2BF3J2B,SAClDnM,EACAsqO,GAFkD,OAGlBypf,GAAsBvztB,QAAO,SAAC8d,EAAWnlB,GAAZ,mBAAC,eAC3DmlB,GAD0D,mBAE5DnlB,EAAMm6tB,GAA0BtztB,EAAO7G,GAAMu6tB,GAA8Bv6tB,GAAMmxO,OAChFtqO,GEuJS61tB,CAAqC1ptB,EAAMm+N,IAF/B,IAEuCA,eAIxDwrf,EAAoB,SAACpqe,GAAD,OAA8C,SAACzuP,GACvE,IAAM6ja,EAAY7ja,EAAE4kB,OAAOtxB,MAC3BmluB,GAAU,SAACvptB,GAAD,mBAAC,eAAeA,GAAhB,mBAAuBu/O,EAAQo1K,SAGrCi1T,EAAY,kBAAMx4V,EAAc,IAkDhCy4V,EAAa,CACjBlD,QAASlysB,EAAEgysB,GAAiB5ytB,EAAOsqO,OAAOwof,SAE1CI,SAAUtysB,EAAE,yBAAD,OAA0B5gB,EAAOsqO,MAAjC,eAGP2rf,EAAc38rB,WAAc,iBAAO,CACvCq6rB,cAAeY,GAAkB,gBAAiBv0tB,EAAOsqO,MAA1Ciqf,CAAiDv0tB,EAAO2ztB,eACvEC,qBAAsBW,GAAkB,uBAAwBv0tB,EAAOsqO,MAAjDiqf,CAAwDv0tB,EAAO4ztB,sBACrFC,eAAgBU,GAAkB,iBAAkBv0tB,EAAOsqO,MAA3Ciqf,CAAkDv0tB,EAAO6ztB,gBACzEC,sBAAuBS,GAAkB,wBAAyBv0tB,EAAOsqO,MAAlDiqf,CAAyDv0tB,EAAO8ztB,0BACrF,CAAC9ztB,EAAOsqO,MAAOtqO,EAAO2ztB,cAAe3ztB,EAAO4ztB,qBAAsB5ztB,EAAO6ztB,eAAgB7ztB,EAAO8ztB,wBAE9FoC,EAAiBjjuB,OAAO+M,OAAOi2tB,GAAa3ztB,MAAK,SAAC2jC,GAAD,OAAgB,MAAPA,KAE1DkwrB,EAA0D,KAAhCn2tB,EAAO2ztB,cAActgmB,QAAwD,KAAvCrzH,EAAO4ztB,qBAAqBvgmB,OAoD5F+imB,EAAqB,SACzB1qe,EACAogL,EACAuqT,GAEA,IAAMrztB,EAAQiztB,EAAYvqe,GAC1B,OACE,cAACq/D,GAAA,EAAD,CACEr8M,WAAW,EACX/4E,MAAO/U,EAAEkrZ,EAAU,CAAErlN,KAAM4vgB,IAC3B9luB,MAAOyP,EAAO0rP,GACdr7I,SAAUylnB,EAAkBpqe,GAC5B7rI,YAAaq0mB,GAA+Bxoe,GAC5C1oP,QAASA,EACT0+G,WAAY1+G,EACZu1Q,gBAAiB,CAAE6U,QAAQ,GAC3Bz7K,WAAY,CACV6kN,aACE,cAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAM7jC,UAAWF,EAAQunpB,eAAlD,SACGe,QA4Cb,OACE,mCACE,cAAC,IAAD,CACElymB,SAAUqxmB,GACVpnc,OAAO,OACPzlK,WAAY,CACV16C,UAAWF,EAAQ64C,OAJvB,SAOE,sBAAKzW,MAAO,CAAElgC,QAAS,OAAQK,cAAe,SAAU81C,OAAQ,OAAQtU,SAAU,YAAlF,UACE,eAACpkC,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNX,WAAW,SACXuB,KAAK,SACLV,QAAS,SACTV,UAAWF,EAAQ6hW,gBANrB,UAQE,qBAAK3hW,UAAWF,EAAQympB,oBAAxB,SACE,cAACt5U,GAAA,EAAD,CACE/qU,MAAO,KACPi2C,OAAQ,KACRtrB,MAAO,CAAE+e,gBAAiB9pC,EAAM+pC,QAAQ86mB,GAAW,KAAM9xmB,YAAa/yC,EAAM+pC,QAAQ86mB,GAAW,UAGnG,cAACvmnB,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQ0mpB,YAFrB,SAIG7zsB,EAAE,0CAGP,cAAC2uG,GAAA,EAAD,CACE7V,QAASy+S,EACTlqV,UAAWF,EAAQolU,UAFrB,SAIE,cAAC,KAAD,MAGF,eAAChoB,GAAA,EAAD,CACE/D,WAAYA,EACZgE,YAAY,WACZn9S,UAAWF,EAAQg5W,QAHrB,UAKE,eAAC17D,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CACEr9S,UAAWF,EAAQ2mpB,UACnBvtS,cAAe,CACbp5W,QAAS,CACP+pM,OAAQ/pM,EAAQ4mpB,eAChB75d,UAAW/sL,EAAQ8mpB,oBALzB,SASGj0sB,EAAE,sCAEL,cAAC2qW,GAAA,EAAD,UAxKV,sBAAKt9S,UAAWF,EAAQgvT,YAAxB,UACE,cAAC1uR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ+mpB,cAAnE,SACGl0sB,EAAE,yCAEL,cAACw3Y,GAAA,EAAD,CAAY7na,MAAOyP,EAAOi0tB,YAAa5jnB,SAAUslnB,EAAjD,SACE,cAACjopB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACGqkpB,GAAgB31tB,KAAI,SAACw3G,GAAD,OACnB,cAAC3nC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAACm9O,GAAA,EAAD,CACE3+O,UAAWF,EAAQgnpB,YACnBxkuB,MAAO8kH,EAAO9kH,MACd6rH,QAAS,cAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MAAO/U,EAAEy0F,EAAOy2T,aALUz2T,EAAO9kH,cAW3C,cAACm9E,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,SACE,cAAC6qC,EAAA,EAAD,CACEE,QAASq8mB,EACTxnnB,QAAQ,WACRzT,MAAM,UACN7sB,UAAS,UAAKF,EAAQktP,IAAb,YAAoBltP,EAAQwnpB,gBAJvC,SAMG30sB,EAAE,0CAmJD,eAACyqW,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CACEr9S,UAAWF,EAAQ2mpB,UACnBvtS,cAAe,CACbp5W,QAAS,CACP+pM,OAAQ/pM,EAAQ4mpB,eAChB75d,UAAW/sL,EAAQ8mpB,oBALzB,SASGj0sB,EAAE,sCAEL,cAAC2qW,GAAA,EAAD,UA3GV,sBAAKt9S,UAAWF,EAAQgvT,YAAxB,UACE,cAACrvT,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,SA9CF,qBAAKV,UAAWF,EAAQinpB,oBAAxB,SACGvB,GAAa51tB,KAAI,SAACw3G,GACjB,IAAMkxL,EAAWvmS,EAAOsqO,QAAUj1H,EAAO9kH,MACzC,OACE,cAACipH,EAAA,EAAD,CAEEE,QAASk8mB,EAAiBvgnB,EAAO9kH,OACjC09E,UAAS,UAAKF,EAAQknpB,iBAAb,YAAiC1ub,EAAWx4N,EAAQmnpB,uBAAyB,IACtFx8c,kBAAkB,EAJpB,SAMG93P,EAAEy0F,EAAOy2T,WALLz2T,EAAO9kH,cA6ClB,sBAAK09E,UAAS,UAAKF,EAAQonpB,WAAb,YAA2BpnpB,EAAQqnpB,kBAAjD,UACE,cAAC/mnB,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQsnpB,gBAAvE,SACGz0sB,EAAE,qCAEL,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG2mpB,EAAmB,gBAAiB,sCAAuCJ,EAAWlD,WAEzF,cAACplpB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG2mpB,EAAmB,uBAAwB,6CAA8CJ,EAAW9C,kBAK3G,sBAAKjlpB,UAAWF,EAAQonpB,WAAxB,UACE,cAAC9mnB,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQsnpB,gBAAvE,SACGz0sB,EAAE,sCAEL,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG2mpB,EAAmB,iBAAkB,uCAAwCJ,EAAWlD,WAE3F,cAACplpB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG2mpB,EAAmB,wBAAyB,8CAA+CJ,EAAW9C,6BAqFzG,eAACjoa,GAAA,EAAD,CAAeh9O,UAAWF,EAAQ6iV,aAAlC,UACkB,IAAfxpC,GACC,cAAC5tQ,EAAA,EAAD,CACEE,QApQI,kBAAM6jR,EAAc,IAqQxBhvR,QAAQ,WACRzT,MAAO,UACP7sB,UAAWF,EAAQktP,IAJrB,SAMGr6S,EAAE,gCAGP,cAAC44F,EAAA,EAAD,CACEE,QA3QQ,WAClB,IAAM39E,EAAU,CACdk4rB,YAAaj0tB,EAAOi0tB,YACpB3pf,MAAOtqO,EAAOsqO,MACdqpf,cAAen9tB,OAAOwJ,EAAO2ztB,eAAiB,EAAIn9tB,OAAOwJ,EAAO2ztB,eAAiB,EACjFC,qBAAsBp9tB,OAAOwJ,EAAO4ztB,sBAAwB,EAAIp9tB,OAAOwJ,EAAO4ztB,sBAAwB,EACtGC,eAAgBr9tB,OAAOwJ,EAAO6ztB,gBAAkB,EAAIr9tB,OAAOwJ,EAAO6ztB,qBAAkBljuB,EACpFmjuB,sBAAuBt9tB,OAAOwJ,EAAO8ztB,uBAAyB,EAAIt9tB,OAAOwJ,EAAO8ztB,4BAAyBnjuB,GAE1GmsG,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,4BACV5zD,OAAQ,CACNzyC,KAAM,aACN2gC,WAAY4gsB,IAEdhrpB,KAAMvvC,IACGqvC,MAAK,SAAAurE,GAAQ,IAAD,EACf9mG,EAAO5xB,iBAAM,OAAC04H,QAAD,IAACA,GAAD,UAACA,EAAK56G,eAAN,aAAC,EAAc8vF,SAC5BzN,EAAO,OAAGvuE,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,WACpB29tB,EAAY,OAAG1mrB,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,gBAE/B4mC,EAAS,IAAI6nG,KAAsC,CACjDmvlB,6BAA8BD,GAAgBt4sB,iBAAO,OAGvDuhB,EAAS,IAAIynG,KAAuC,CAClDhpB,UAAW8mM,IAAgCE,UAC3Cwxa,8BAA+Br4mB,GAAWngG,iBAAO,CAAE,IAAO,CAAC,CAAE,GAAM,CAAE,IAAO,UAE9EuhB,EAAS,IAAI+kG,KAAmC,CAC9CmylB,aAAc,CACZC,aAAc,KACdC,cAAe,MAEjBrkmB,kBAEDipE,OAAM,WACPh8J,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,kCACX65E,SAAU,cAId09T,KAgOU5pT,QAAQ,YACRzT,MAAO,UACPiX,SAAyB,IAAfq1Q,GAAoB8uW,IAAmBC,EACjDlopB,UAAWF,EAAQktP,IALrB,SAOGr6S,EAAE,yD,iGCzdXyjG,GAAYJ,cAA+B,SAACl0C,GAAD,MAAmB,CAClEqnmB,MAAO,CACLnnmB,QAAS,OACTnC,WAAY,SACZ+rC,gBAAiB,gBAAG/e,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAO3jE,MACrDmlF,aAAc,EACdmM,UAAW,GACX93C,QAASZ,EAAMZ,QAAQ,IAAK,IAE9BV,KAAM,CACJooD,KAAM,EACN5mD,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBI,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B,sBAAuB,CACrBmnD,WAAY,gBAAGx7B,EAAH,EAAGA,MAAH,0BAA4Bs+K,aAAKrpM,EAAM+pC,QAAQhf,GAAOutB,aAAc,QAGpF93H,MAAO,CACLuqG,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAOutB,cAC3CrM,SAAU,UACVuS,WAAY,KAEd54F,MAAO,CACLmlE,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAOutB,cAC3ClX,UAAWphC,EAAMZ,QAAQ,KAE3B0npB,QAAS,CACP/7nB,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAOutB,eAE7CyumB,eAAgB,CACdjgmB,KAAM,EACN5mD,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChBI,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B4npB,UAAW,CACTj8nB,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAOutB,cAC3CrM,SAAU,UACV3F,YAAatmC,EAAMZ,QAAQ,IAE7Bw7O,UAAW,CACT7vN,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAOutB,mBA+ChC2umB,GA3C4C,SAAC,GAAsC,IAApCl8nB,EAAmC,EAAnCA,MAAOmB,EAA4B,EAA5BA,QAASj5F,EAAmB,EAAnBA,MAAO64P,EAAY,EAAZA,MAC7E9tL,EAAUs2C,GAAU,CAAEvpB,UACpBl6E,EAAM+xB,YAAe,gBAArB/xB,EAER,OAAI5d,EAEA,qBAAKirE,UAAWF,EAAQqpmB,MAAxB,SACE,sBAAKnpmB,UAAWF,EAAQ+opB,eAAxB,UACE,cAAC,IAAD,CAAoB7opB,UAAWF,EAAQgppB,YACvC,cAAC1onB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ48O,UAA/C,SACG/pS,EAAE,oDAQX,qBAAKqtD,UAAWF,EAAQqpmB,MAAxB,SACGv7a,EAAMh+P,KAAI,SAAC4wE,EAAMz9E,GAAP,OACT,qBAAKi9E,UAAWF,EAAQU,KAAxB,SACGwtB,EACG,qCACE,cAACw6N,GAAA,EAAD,CAAkB7lU,KAAM,GAAIk7kB,UAAW,EAAG79f,UAAWF,EAAQ8opB,UAC7D,cAACxonB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQp4C,MAA/C,SACG/U,EAAE,wDAGP,qCACE,cAACytF,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQx9E,MAA5C,SACGk+E,EAAKl+E,QAER,cAAC89G,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQp4C,MAA/C,SACG84C,EAAK94C,YAbhB,UAAsC84C,EAAK94C,OAA3C,OAAmD3kC,W,SX1F/CqhuB,K,4BAAAA,E,yBAAAA,M,cAKAC,K,gBAAAA,E,iBAAAA,M,KAwCL,IAGM2E,GAAwB,OAExBC,GAAoB,IAQpBC,IAA6D,oBACvE9E,EAAmB+E,aAAe,eADqC,eAEvE/E,EAAmBgF,WAAa,iBAFuC,GAK7DC,IAAoE,oBAC9EjF,EAAmB+E,aAAe,yBAD4C,eAE9E/E,EAAmBgF,WAAa,mCAF8C,GAQpEE,IAA+E,oBACzFjF,EAAqBkF,OAAS,WAD2D,eAEzFlF,EAAqBmF,OAAS,aAF2D,GAK/EC,GAAiD,CAC5DpF,EAAqBkF,OACrBlF,EAAqBmF,QAGVE,GAA8B,CACzC,CAAEpnuB,MAAO,WAAmCu7a,SAAU6mT,IACtD,CAAEpiuB,MAAO,SAAiCu7a,SAAU6mT,KAGzCiF,GAA8B,CACzC,CACErnuB,MAAO8huB,EAAmB+E,aAC1BtrT,SAAU,6CACVuvK,eAAgB,iDAElB,CACE9qlB,MAAO8huB,EAAmBgF,WAC1BvrT,SAAU,6CACVuvK,eAAgB,kDAIPw8I,GAAoE,CAC/EC,UAAW,GACXC,UAAW,GACXC,SAAU,GACVC,SAAU,GACVC,YAAa,GACbC,cAAelB,IAGJmB,IAA+D,oBACzE/F,EAAmB+E,aAAe,CACjC,CAAEj+tB,IAAK,YAAak/tB,WAAY,iBAAkBvsT,SAAU,+CAAgDrlN,KAAM,cAAe5uB,UAAU,GAC3I,CAAE1+L,IAAK,YAAak/tB,WAAY,iBAAkBvsT,SAAU,+CAAgDrlN,KAAM,cAAe5uB,UAAU,GAC3I,CAAE1+L,IAAK,WAAYk/tB,WAAY,gBAAiBvsT,SAAU,8CAA+CrlN,KAAM,cAAe5uB,UAAU,GACxI,CAAE1+L,IAAK,WAAYk/tB,WAAY,4BAA6BvsT,SAAU,8CAA+CrlN,KAAM,UAAW5uB,UAAU,KALxE,eAOzEw6hB,EAAmBgF,WAAa,CAC/B,CAAEl+tB,IAAK,YAAak/tB,WAAY,iBAAkBvsT,SAAU,+CAAgDrlN,KAAM,cAAe5uB,UAAU,GAC3I,CAAE1+L,IAAK,YAAak/tB,WAAY,iBAAkBvsT,SAAU,+CAAgDrlN,KAAM,cAAe5uB,UAAU,GAC3I,CAAE1+L,IAAK,cAAek/tB,WAAY,iBAAkBvsT,SAAU,iDAAkDrlN,KAAM,cAAe5uB,UAAU,GAC/I,CAAE1+L,IAAK,WAAYk/tB,WAAY,gBAAiBvsT,SAAU,8CAA+CrlN,KAAM,cAAe5uB,UAAU,GACxI,CAAE1+L,IAAK,WAAYk/tB,WAAY,4BAA6BvsT,SAAU,8CAA+CrlN,KAAM,UAAW5uB,UAAU,KAZxE,GAgB/DygiB,GAA2D,CAAC,YAAa,aAEzEC,GAAmDX,GAA4Bp3tB,QAC1F,SAAC7J,EAAgC0+G,GAAjC,OAA4C1+G,EAAKwJ,OAC/Ci4tB,GAAY/inB,EAAO9kH,OAChB6P,QAAO,SAACsrP,GAAD,MAA0B,gBAAfA,EAAMjlC,OAAuD,IAA7B9vN,EAAK0e,QAAQq2O,EAAMvyP,QACrE0E,KAAI,SAAC6tP,GAAD,OAAWA,EAAMvyP,UAE1B,IAWWq/tB,GAAwB//hB,cA1FL,IACD,IAyFuDw6hB,GAA2BF,aACpG0F,GAAoBhgiB,aA/FA,EA+FkCy+hB,GAAmBjE,GAA2Br9Y,SAEpG8iZ,GAAsBnF,GAA0B,WAChDoF,GAAuE,CAClF5F,YAAaQ,GAA0B,eACvC39Y,QAAS29Y,GAA0B,YAGxBgB,GAAoB,SAAC9tgB,GAAD,MACtB,YAATA,EAAqBgygB,GAAoBD,IAG9BI,GAAU,SAACrouB,GAAD,MAAiE,KAA9CmT,OAAgB,MAATnT,EAAgB,GAAKA,GAAO8iI,QAEhEwlmB,GAAkB,SAAC/F,GAAD,OAAqBsB,GAAkBtB,IAYzDgG,GAAwB,SAACjpmB,EAA0B7vH,GAC9D,GAAI6vH,IAASwimB,EAAmB+E,aAGhC,OAAOwB,GAAQ54tB,EAAOm4tB,oBAAiBxnuB,EAAY8nuB,GAAkBz4tB,EAAOm4tB,gBAGjEY,GAAwB,SAAC/4tB,GACpC,OAAI44tB,GAAQ54tB,EAAO83tB,aAAcc,GAAQ54tB,EAAO+3tB,aAID,MAA3CS,GAAsBx4tB,EAAO83tB,YAAiE,MAA3CU,GAAsBx4tB,EAAO+3tB,YAG7EvhuB,OAAOwJ,EAAO+3tB,WAAavhuB,OAAOwJ,EAAO83tB,aAIrCkB,GAAqB,SAAC,GAInB,IAJqBnpmB,EAItB,EAJsBA,KAAMijmB,EAI5B,EAJ4BA,QAAS9ytB,EAIrC,EAJqCA,OAKlD,GAAI44tB,GAAQ9F,IAAwC,MAA5B+F,GAAgB/F,GACtC,OAAO,EAET,GAAIjjmB,IAASwimB,EAAmB+E,eAAiBwB,GAAQ54tB,EAAOm4tB,gBAAyD,MAAvCW,GAAsBjpmB,EAAM7vH,IAC5G,OAAO,EAGT,IAAMi2tB,EAzC4B,SAClCpmmB,EACA7vH,GAEA,OAAOo4tB,GAAYvomB,GAAMrvH,QAAO,SAACohJ,EAAQ8pG,GACvC,IAAM1oP,EAAQuxtB,GAAkB7oe,EAAMjlC,KAAxB8tgB,CAA8Bv0tB,EAAO0rP,EAAMvyP,MACzD,OAAO6J,EAAK,2BAAQ4+I,GAAR,mBAAiB8pG,EAAMvyP,IAAM6J,IAAU4+I,IAClD,IAkCiBq3kB,CAAqBppmB,EAAM7vH,GAC/C,OAAwC,IAApC/M,OAAO0D,KAAKs/tB,GAAav/tB,SAAgBqiuB,GAAsB/4tB,IAI5Do4tB,GAAYvomB,GAAMztH,OAAM,SAACspP,GAAD,OAAYA,EAAM7zD,WAAa+giB,GAAQ54tB,EAAO0rP,EAAMvyP,UASxE+/tB,GAAqB,SAAC3ouB,GACjC,IAAMsrX,EAASrlX,OAAOjG,GAEtB,OAAIqouB,GAAQrouB,IAAU0gD,MAAM4qU,GACnBo7W,GAELp7W,EAASq7W,GACJA,GAAkBjoe,QA1KS,GA4KhC4sH,EA/K2B,MAgLJ5sH,QA7KS,GA8JT,SAAC1+P,GAC5B,MAA0BA,EAAM0+P,QAAQkqe,GAA4BvlrB,MAAM,KAA1E,oBAAOwlrB,EAAP,KAAcl4W,EAAd,KACA,MAAM,GAAN,OAAUk4W,EAAV,YAAmBl4W,EAAS/jO,OAAO,IAe5Bk8kB,CAAqBx9W,IAGjBy9W,GAAwB,SAAC/ouB,GACpC,IAAMsrX,EAASrlX,OAAOjG,GACtB,OAAIqouB,GAAQrouB,IAAU0gD,MAAM4qU,GACnBrlX,OAAOyguB,IAETrluB,KAAKE,IAAIF,KAAKC,IAAIgqX,EA1LM,GA0LsBq7W,KAQ1CqC,GAAuB,SAAC,GAE9B,IAFgC1pmB,EAEjC,EAFiCA,KAAMy6G,EAEvC,EAFuCA,MAAOwof,EAE9C,EAF8CA,QAAS0G,EAEvD,EAFuDA,aAAcC,EAErE,EAFqEA,QAGnEnupB,EAAY,CAChBg/J,QACAwof,QAASt8tB,OAAOs8tB,IAoBlB,OAjBA2G,EAAQl4tB,SAAQ,SAACm4tB,GACf,IAAM15tB,EAASw5tB,EAAaE,GACtBC,EAAkB,GAExBvB,GAAYvomB,GAAMtuH,SAAQ,SAACmqP,GACpBkte,GAAQ54tB,EAAO0rP,EAAMvyP,QACxBwguB,EAAWjue,EAAM2se,YAAc7huB,OAAOwJ,EAAO0rP,EAAMvyP,UAInD02H,IAASwimB,EAAmB+E,eAC9BuC,EAAU,uBAA8BL,GAAsBt5tB,EAAOm4tB,gBAGvE7spB,EAAKoupB,GAAUC,KAGVrupB,GAIIsupB,GAAoB,SAACrpuB,GAAD,OAA2BmT,OAAOlN,OAAOjG,EAAM0+P,QA5N1C,MYLhC5qI,GAAYJ,cAA+B,SAACl0C,GAAD,MAAmB,CAClEwoL,QAAS,CACP7oI,OAAQ,gBAAG50B,EAAH,EAAGA,MAAH,0BAA4B/qB,EAAM+pC,QAAQhf,GAAO3jE,OACzDmlF,aAAc,EACdnL,UAAWphC,EAAMZ,QAAQ,IAE3BovD,OAAQ,CACNtuD,QAAS,OACTnC,WAAY,SACZ2uC,aAAc,gBAAG3hB,EAAH,EAAGA,MAAH,0BAA4B/qB,EAAM+pC,QAAQhf,GAAO3jE,OAC/Dw5C,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B0qpB,WAAY,CACV/+nB,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAO3jE,MAC3C6kF,SAAU,WACV3F,YAAatmC,EAAMZ,QAAQ,IAE7BslpB,YAAa,CACX7qmB,cAAe,YACfulJ,cAAe,IAEjB7jM,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,IAEzB2qpB,uBAAwB,CACtB3onB,UAAWphC,EAAMZ,QAAQ,IAE3B4qpB,mBAAoB,CAClB5ppB,MAAO,GACP,UAAW,CACT2xC,UAAW,UAGfk4mB,OAAQ,CACNl/nB,MAAO,gBAAGA,EAAH,EAAGA,MAAH,OAAe/qB,EAAM+pC,QAAQhf,GAAO3jE,MAC3Cw5C,QAASZ,EAAMZ,QAAQ,IAAK,IAE9B8qpB,aAAc,CACZn/nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5BqimB,YAAa,CACXtwmB,cAAe,YACfulJ,cAAe,GACf/+L,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAE9BmmpB,eAAgB,CACdx6nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5BsimB,WAAY,CACVr/nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,aAwJfognB,GApJsC,SAAC,GAW/C,IAVLV,EAUI,EAVJA,OACA7pmB,EASI,EATJA,KACA7vH,EAQI,EARJA,OACAq6tB,EAOI,EAPJA,gBACAp+nB,EAMI,EANJA,QACAj5F,EAKI,EALJA,MACAyF,EAII,EAJJA,OACA64rB,EAGI,EAHJA,cACAg5B,EAEI,EAFJA,sBACAC,EACI,EADJA,oBAEQ35sB,EAAM+xB,YAAe,gBAArB/xB,EACFk6E,EAAQy8nB,GAAsBmC,GAC9B3rpB,EAAUs2C,GAAU,CAAEvpB,UAEtB0/nB,EAAc55sB,EAAEoysB,IAChB/nZ,EAASmtZ,GAAYvomB,GACrB4qmB,EAAsB5qmB,IAASwimB,EAAmBgF,WAAa,EAAI,EACnEqD,EAAqB5B,GAAsBjpmB,EAAM7vH,GACjD26tB,EAAe5B,GAAsB/4tB,GACvC4gB,EAAE,+DACFjwB,EAEEiquB,EAAah6sB,EAAE,6CACfmjiB,EAAe,SAACxzjB,EAAek2N,GAAhB,gBACP,MAATl2N,EAAgBqquB,EAAahB,GAAkBrpuB,GAD/B,YACyCk2N,IA4F9D,OACE,sBAAKx4I,UAAWF,EAAQwqL,QAAxB,UACE,sBAAKtqL,UAAWF,EAAQwwD,OAAxB,UACGm7lB,IAAWpH,EAAqBkF,OAC7B,cAAC,KAAD,CAAavppB,UAAWF,EAAQ8rpB,aAChC,cAAC,KAAD,CAAY5rpB,UAAWF,EAAQ8rpB,aAEnC,cAACxrnB,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQ0mpB,YAAvE,SACG7zsB,EAAE,uCAAD,OAAwC84sB,SAG9C,sBAAKzrpB,UAAWF,EAAQzC,KAAxB,UACE,cAACoC,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACG87P,EAAOptU,KAjFI,SAAC6tP,GACnB,IAAM2qe,EAA2B,YAAf3qe,EAAMjlC,KAAqB+zgB,EAAcH,EACrDQ,EAAatG,GAAkB7oe,EAAMjlC,KAAxB8tgB,CAA8Bv0tB,EAAO0rP,EAAMvyP,SACD,IAAvDm/tB,GAA+BjjtB,QAAQq2O,EAAMvyP,KAAcwhuB,OAAehquB,GAEhF,OACE,cAAC+8E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAIgrpB,EAAtB,SACE,cAAC1va,GAAA,EAAD,CACEr8M,WAAW,EACX/4E,MAAK,UAAK/U,EAAE8qO,EAAMogL,WAAb,OAAyBpgL,EAAM7zD,SAAW,KAAO,IACtDtnM,MAAOyP,EAAO0rP,EAAMvyP,KACpBk3G,SAAUixlB,EAAc51c,EAAMvyP,KAC9B0mH,YAAa84mB,GAA4Bjte,EAAMjlC,MAC/CzjN,QAAS63tB,EACTn5mB,WAAYm5mB,EACZtid,gBAAiB,CAAE6U,QAAQ,EAAMn/M,UAAWF,EAAQospB,YACpDxonB,WAAY,CACV6kN,aACE,cAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAM7jC,UAAWF,EAAQunpB,eAAlD,SACGe,QAb8B3qe,EAAMvyP,UA6E5C02H,IAASwimB,EAAmB+E,cAtDjC,sBAAKnppB,UAAWF,EAAQ+rpB,uBAAxB,UACE,eAACpspB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,WAAWuB,KAAK,SAA1E,UACE,cAACg/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,sDAEL,cAACmqS,GAAA,EAAD,CACE98O,UAAWF,EAAQgspB,mBACnBxpuB,MAAOyP,EAAOm4tB,cACd9nnB,SAAU,SAACpzG,GAAD,OAAOq9tB,EAAsBr9tB,EAAE4kB,OAAOtxB,QAChDgqI,OAAQggmB,EACRv3tB,QAAS03tB,EACT/onB,WAAY,CACV6kN,aACE,cAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAM7jC,UAAWF,EAAQunpB,eAAlD,SACGkF,UAMX,cAACM,GAAA,EAAD,CACE7spB,UAAWF,EAAQispB,OACnBzpuB,MAAO+ouB,GAAsBt5tB,EAAOm4tB,eACpCrmuB,IZzJyB,EY0JzBD,IAAKqluB,GACLz9tB,KZzJ0B,EY0J1B42G,SAAU,SAACpzG,EAAG1M,GAAJ,OAAc+puB,EAAsB52tB,OAAOnT,OAEvD,eAACm9E,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAApD,UACE,cAACg/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQkspB,aAAjD,mBZ/JyB,GY+JzB,OAC0BO,KAE1B,cAACnsnB,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQkspB,aAAjD,mBACM/C,IADN,OAC0BsD,WAsB1B,cAACnsnB,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQmspB,YAAvE,SACGt5sB,EAAE,+CAEL,cAAC,GAAD,CACEk6E,MAAOA,EACPmB,QAASA,EACTj5F,MAAOA,EACP64P,MA/GFhsI,IAASwimB,EAAmBgF,WACvB,CAAC,CACN1hsB,MAAO/U,EAAE,qDACTrwB,MAAOwzjB,EAAY,OAACt7iB,QAAD,IAACA,OAAD,EAACA,EAAQsytB,gCAAiCP,KAI7Dd,IAAWpH,EAAqBmF,OAC3B,CAAC,CACN9hsB,MAAO/U,EAAE,sDACTrwB,MAAOwzjB,EAAY,OAACt7iB,QAAD,IAACA,OAAD,EAACA,EAAQuytB,sBAAuBX,KAIhD,CAAC,CACN1ksB,MAAO/U,EAAE,wDACTrwB,MAAOwzjB,EAAY,OAACt7iB,QAAD,IAACA,OAAD,EAACA,EAAQuytB,sBAAuBX,cCxEnDh2mB,GAAYJ,cAA+B,SAACl0C,GAAD,MAAmB,CAClE62C,MAAO,CACLz2C,MAAO,KACPgB,SAAU,MACVw6L,UAAW,MACXh7L,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bc,QAAS,OACTK,cAAe,SACf4uC,SAAU,SACVpN,SAAU,YAEZqhS,UAAW,CACTrhS,SAAU,WACVziG,MAAO0gE,EAAMZ,SAAS,IACtBg6C,IAAKp5C,EAAMZ,SAAS,KAEtBqlpB,oBAAqB,CACnBrkpB,MAAO,GACPi2C,OAAQ,IAEVwpT,gBAAiB,CACfx/V,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,GAC5BwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BslpB,YAAa,CACX13mB,WAAYhtC,EAAMZ,QAAQ,MAE5B6lpB,oBAAqB,CACnB/kpB,QAAS,cACTy/C,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnC9nP,aAAc,EACd4C,SAAU,UAEZ+1mB,iBAAkB,CAChBtkpB,QAASZ,EAAMZ,QAAQ,IAAM,GAC7BkB,SAAU,GACVisC,aAAc,EACdsN,cAAe,OACfwH,WAAY,IACZt2B,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5Bq9lB,uBAAwB,CACtBr7mB,gBAAiB,gBAAG+6mB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,MAC7D2jE,MAAO,gBAAG85nB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWvsmB,cACnD,UAAW,CACTxO,gBAAiB,gBAAG+6mB,EAAH,EAAGA,UAAH,OAAmB7kpB,EAAM+pC,QAAQ86mB,GAAWz9rB,QAGjE2yH,KAAM,CACJ34C,UAAWphC,EAAMZ,QAAQ,GACzBs5C,UAAW,IAEbwvC,IAAK,CACHxvC,UAAW,GACXp4C,SAAU,OACVM,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BugD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnCvqP,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCiC,SAAU,YACVlhB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B,sBAAuB,CACrBvB,WAAY,SAGhB2kmB,YAAa,CACXphnB,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtC7iC,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BqZ,QAAS,CACPqmF,KAAM,EACNulL,UAAW,OACX1sL,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnCzzR,QAASZ,EAAMZ,QAAQ,IAEzBqmD,YAAa,CACXtN,aAAcn4C,EAAMZ,QAAQ,IAE9BmmpB,eAAgB,CACdx6nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5BsimB,WAAY,CACVr/nB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5BqqP,OAAQ,CACNlzP,UAAWphC,EAAMZ,QAAQ,IAE3B+rpB,aAAc,CACZtxmB,cAAe,YACfulJ,cAAe,GACf94J,YAAatmC,EAAMZ,QAAQ,IAE7BgspB,YAAa,CACXlrpB,QAAS,cACTnC,WAAY,SACZ4hD,OAAQ,YACRpT,aAAc,EACdjG,YAAatmC,EAAMZ,QAAQ,GAC3BwB,QAASZ,EAAMZ,QAAQ,IAAM,IAE/BispB,cAAe,CACbxxmB,cAAe,YACfulJ,cAAe,GACf94J,YAAatmC,EAAMZ,QAAQ,IAE7ByhV,aAAc,CACZ7zS,WAAY,QAEdk+M,IAAK,CACHtqP,QAASZ,EAAMZ,QAAQ,IAAM,GAC7BmtC,aAAc,GACdgP,WAAY,cAIH+vmB,GAAgC,gCAEvCC,GAAiB,SAAgB/quB,GAAhB,iCACpB+huB,EAAqBkF,OAASjnuB,GADV,eAEpB+huB,EAAqBmF,OAASlnuB,GAFV,GAsZRgruB,GAjZiE,WAC9E,IAAM/7rB,EAAW2F,wBACX4qC,EAAQwjD,eACRz2B,EAAS8zK,eACPhwP,EAAM+xB,YAAe,gBAArB/xB,EACF88B,EAAgBnX,sBAAYiX,eAC5B+0E,EAAYhsF,sBAAYisF,eACxBhzB,EAAOj5D,sBAAYosK,aAA2B0ohB,KAEpD,EAAwB/hsB,WAAmC+4rB,EAAmB+E,cAA9E,oBAAOvnmB,EAAP,KAAa2rmB,EAAb,KACA,EAA0BlisB,WAAoC,YAA9D,oBAAOgxM,EAAP,KAAcmxf,EAAd,KACA,EAA8BnisB,WAAe,IAA7C,oBAAOw5rB,EAAP,KAAgB4I,EAAhB,KACA,EAAwCpisB,WAAgCgisB,GAAezD,KAAvF,oBAAO2B,EAAP,KAAqBmC,EAArB,KACA,EAA8BrisB,WAAiCgisB,GAAe,OAA9E,oBAAOtge,EAAP,KAAgB4ge,EAAhB,KACA,EAAsCtisB,WAA+BgisB,IAAe,IAApF,oBAAOO,EAAP,KAAoBC,EAApB,KACA,EAAoCxisB,WAAoB,MAAxD,oBAAOgzW,EAAP,KAAmByvV,EAAnB,KACA,EAAkDzisB,WAA+BgisB,IAAe,IAAhG,oBAAOU,GAAP,KAA0BC,GAA1B,KAEMC,GAAgB5isB,SAAkB,MAElC6isB,GAAkB7isB,SAAa,GAE/Bs7rB,GAAqCl3qB,EAAgB,YAAc,UACnEqwB,GAAUs2C,GAAU,CAAEuwmB,eAEtBoB,GAAa,CACjBlD,QAASlysB,EAAEgysB,GAAiBtof,GAAOwof,SACnCC,YAAanysB,EAAEgysB,GAAiBtof,GAAOyof,cAEnCyH,GAAc55sB,EAAEoysB,IAChBoJ,GAAex7sB,EAAE,oDACjBy7sB,GAAexD,GAAgB/F,GAC/BwJ,GAAa1E,GAA4BphtB,MAAK,SAAC6+F,GAAD,OAAYA,EAAO9kH,QAAUs/H,KAC3E0smB,GAA0D,MAAxCvhe,EAAQs3d,EAAqBmF,QAE/C+E,GAA6B,WACJ,MAAzBN,GAAcv/rB,UAChBy+F,aAAa8gmB,GAAcv/rB,SAC3Bu/rB,GAAcv/rB,QAAU,OAItB8/rB,GAAsB,SAACz8a,GAC3Bw8a,KACA,IAAME,EAAYP,GAAgBx/rB,QAAU,EAC5Cw/rB,GAAgBx/rB,QAAU+/rB,EAC1B,IAAMC,EAAkB,kBAAMR,GAAgBx/rB,UAAY+/rB,GAEpDjD,EbL0B,SAAC,GAAD,IAAG5pmB,EAAH,EAAGA,KAAMijmB,EAAT,EAASA,QAAS0G,EAAlB,EAAkBA,aAAlB,OAClC9B,GAAuBt3tB,QAAO,SAACs5tB,GAAD,OAAYV,GAAmB,CAAEnpmB,OAAMijmB,UAAS9ytB,OAAQw5tB,EAAaE,QaIjFkD,CAAqB58a,GAGrC47a,EAAWN,GAAe,OAC1BS,EAAc,MACdE,GAAqBX,IAAe,IACpCQ,EAAepE,GAAuBl3tB,QAAO,SAACsjO,EAAO41f,GAAR,mBAAC,eACzC51f,GADwC,mBAE1C41f,GAAsC,IAA7BD,EAAQpktB,QAAQqktB,OACxB4B,IAAe,KAEI,IAAnB7B,EAAQ/iuB,SAIZwluB,GAAcv/rB,QAAU+Q,YAAW,WAChCovD,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,4BACV5zD,OAAQ,CACN9R,WAAY4gsB,GACZvhuB,KAAMoiuB,GAA0Bn3a,EAASnwL,OAE3CvkD,KAAMiupB,GAAqB,2BAAKv5a,GAAN,IAAgBy5a,eACjCrupB,MAAK,SAACurE,GAAS,IAAD,EAClBgmlB,MAGLf,EbGkC,SAACh+mB,EAAeiS,GAAmF,IAAD,IACpImrI,EAAO,OAAGp9I,QAAH,IAAGA,GAAH,UAAGA,EAAU7hF,eAAb,iBAAG,EAAmB8vF,eAAtB,aAAG,EAA4BmvI,QACtC5+J,EAAYk7nB,GAAYznmB,GAE9B,OAAO6nmB,GAAuBl3tB,QAAO,SAACq7W,EAAQ69W,GAAY,IAAD,EACjDnpuB,EAAK,OAAGyqQ,QAAH,IAAGA,GAAH,UAAGA,EAAU0+d,UAAb,aAAG,EAAoBt9nB,GAElC,OAAO,2BACFy/Q,GADL,mBAEG69W,EAAmB,MAATnpuB,GAAiB0gD,MAAMz6C,OAAOjG,IAAW,KAA1C,gBAAoD6rG,EAAY5lG,OAAOjG,QAElF,IadcssuB,CAA2BlmlB,EAAKqpK,EAASnwL,OACpDksmB,EAAa,OAACpllB,QAAD,IAACA,GAAD,UAACA,EAAK56G,eAAN,aAAC,EAAc8vF,SAC5BiwmB,EAAeR,IAAe,QAC7B9/hB,OAAM,SAACv1J,GAAS,IAAD,IACX02rB,MAGLf,EAAWN,GAAe,OAC1BS,EAAc,MACdD,EAAeR,IAAe,IbzON,Oa2OjB,OAAHr1rB,QAAG,IAAHA,GAAA,UAAAA,EAAKlK,eAAL,mBAAc/4B,aAAd,eAAqB65F,MAQzBr9D,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,wCACX65E,SAAU,WATVwhoB,GAAqBvE,GAAuBl3tB,QAAO,SAACsjO,EAAO41f,GAAR,mBAAC,eAC/C51f,GAD8C,mBAEhD41f,GAAsC,IAA7BD,EAAQpktB,QAAQqktB,OACxB4B,IAAe,WbjPa,Oa0QxChisB,aAAgB,WACVkmE,IAbJg9nB,KACAL,GAAgBx/rB,SAAW,EAC3B6+rB,EAAQnJ,EAAmB+E,cAC3BqE,EAAS,YACTC,EAAW,IACXC,EAAgBL,GAAezD,KAC/B+D,EAAWN,GAAe,OAC1BS,EAAc,MACdE,GAAqBX,IAAe,IACpCQ,EAAeR,IAAe,OAO7B,CAAC97nB,IAEJlmE,aAAgB,WACd,OAAO,kBAAMkjsB,QACZ,IAEH,IAAMrkU,GAAa,WACjB34X,EAAS,IAAI0J,KAA6B,CAAEs2D,MAAM,EAAO1pE,GAAIulsB,OAQzDzF,GAAmB,SAACkH,GAAD,OAAoC,WAC3D,GAAIA,IAAcxyf,EAAlB,CAIA,IAAMyyf,EAAczJ,GAA0BR,EAAS,UAAWgK,GAC5DE,EAAmBtF,GAAuBl3tB,QAAO,SAAC8d,EAAWo7sB,GAAZ,mBAAC,eACnDp7sB,GADkD,mBAEpDo7sB,Eb3MmC,SACxC15tB,EACAsqO,GAFwC,OAGRiuf,GAAuB/3tB,QAAO,SAAC8d,EAAWnlB,GAAZ,mBAAC,eAC5DmlB,GAD2D,mBAE7DnlB,EAAMm6tB,GAA0BtztB,EAAO7G,GAAM,cAAemxO,OAC3DtqO,GaqMYi9tB,CAA2BzD,EAAaE,GAASoD,OACzD,IAEJrB,EAASqB,GACTpB,EAAWqB,GACXpB,EAAgBqB,GAChBP,GAAoB,CAAE5smB,OAAMy6G,MAAOwyf,EAAWhK,QAASiK,EAAavD,aAAcwD,OAS9EE,GAAqB,SAACxD,EAA8Bj+R,GACxD,IAAMuhS,EAAgB,2BAAQxD,GAAR,mBAAuBE,EAAvB,2BAAqCF,EAAaE,IAAYj+R,KACpFkgS,EAAgBqB,GAChBP,GAAoB,CAAE5smB,OAAMy6G,QAAOwof,UAAS0G,aAAcwD,KAGtDG,GAA0B,SAACzD,GAAD,OAAkC,SAAChue,GAAD,OAAmC,SAACzuP,GACpGiguB,GAAmBxD,EAAD,gBAAYhue,EAAQzuP,EAAE4kB,OAAOtxB,WAG3C6suB,GAA4B,SAAC1D,GAAD,OAAkC,SAACnpuB,GACnE2suB,GAAmBxD,EAAQ,CAAEvB,cAAe5nuB,MAGxC8suB,GAA0B,SAAC3D,GAAD,OAAkC,WAChE,IAAM/8rB,EAAU68rB,EAAaE,GAAQvB,cAC/BmF,EAAUpE,GAAmBv8rB,GAE/B2gsB,IAAY3gsB,IAKyC,MAArDm8rB,GAAsBjpmB,EAAM2pmB,EAAaE,KAAoBljuB,OAAO8muB,KAAa9muB,OAAOmmC,GAK5FugsB,GAAmBxD,EAAQ,CAAEvB,cAAemF,IAJ1C3B,GAAgB,SAACxvtB,GAAD,mBAAC,eAAeA,GAAhB,mBAAuButtB,EAAvB,YAAC,eAAoCvttB,EAAKuttB,IAA1C,IAAmDvB,cAAemF,YAkChFC,GAAgB,SAAC7D,GACrB,IAAMjxtB,EAASuyP,EAAQ0+d,GAEvB,OAAc,MAAVjxtB,EACK2ztB,GAGLvsmB,IAASwimB,EAAmBgF,WACmB,MAA1C5utB,EAAOsytB,gCAAP,UACAnB,GAAkBnxtB,EAAOsytB,kCADzB,OAC4DP,IAC/D4B,GAGiC,MAAhC3ztB,EAAOuytB,sBAAP,UACApB,GAAkBnxtB,EAAOuytB,wBADzB,OACkDhF,GAAWjD,YAD7D,aAC6EnysB,EAAE,0CAD/E,KAEHw7sB,IA8CN,OACE,eAAC,IAAD,CACEj4mB,SAAUk3mB,GACVjtc,OAAO,QACPzlK,WAAY,CACV16C,UAAWF,GAAQ64C,OAJvB,UAOE,eAACl5C,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNX,WAAW,SACXuB,KAAK,SACLV,QAAS,SACTV,UAAWF,GAAQ6hW,gBANrB,UAQE,qBAAK3hW,UAAWF,GAAQympB,oBAAxB,SACE,cAACt5U,GAAA,EAAD,CACE/qU,MAAO,KACPi2C,OAAQ,KACRtrB,MAAO,CAAE+e,gBAAiB9pC,EAAM+pC,QAAQ86mB,IAAW,KAAM9xmB,YAAa/yC,EAAM+pC,QAAQ86mB,IAAW,UAGnG,cAACvmnB,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,GAAQ0mpB,YAFrB,SAIG7zsB,EAAE,gDAGP,cAAC2uG,GAAA,EAAD,CACE7V,QAASy+S,GACTlqV,UAAWF,GAAQolU,UAFrB,SAIE,cAAC,KAAD,MAGF,cAACzlU,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,SA/EF,qBAAKV,UAAWF,GAAQinpB,oBAAxB,SACG2C,GAA4B95tB,KAAI,SAACw3G,GAChC,IAAMkxL,EAAWj8D,IAAUj1H,EAAO9kH,MAClC,OACE,cAACipH,EAAA,EAAD,CAEEE,QAASk8mB,GAAiBvgnB,EAAO9kH,OACjC09E,UAAS,UAAKF,GAAQknpB,iBAAb,YAAiC1ub,EAAWx4N,GAAQmnpB,uBAAyB,IACtFx8c,kBAAkB,EAJpB,SAMG93P,EAAEy0F,EAAOy2T,WALLz2T,EAAO9kH,cA8ElB,cAACs2T,GAAA,EAAD,CACEt2T,MAAOs/H,EACPxf,SA9LmB,SAACpzG,EAA0BuguB,GAClDhC,EAAQgC,GACRf,GAAoB,CAAE5smB,KAAM2tmB,EAAUlzf,QAAOwof,UAAS0G,kBA6LlDvrpB,UAAWF,GAAQ+7E,KACnB4zf,kBAAmB,CAAEvtiB,MAAO,CAAElgC,QAAS,SAJzC,SAMG2npB,GAA4B/5tB,KAAI,SAACw3G,GAAD,OAC/B,cAAC2xM,GAAA,EAAD,CAEEz2T,MAAO8kH,EAAO9kH,MACdolC,MAAO/U,EAAEy0F,EAAOy2T,UAChB/9V,QAAS,CACP3hE,KAAM2hE,GAAQkqF,IACd99C,SAAUpsC,GAAQktpB,cALf5lnB,EAAO9kH,YAWlB,sBAAK09E,UAAWF,GAAQv9B,QAAxB,UACE,cAAC69D,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,GAAQynD,YAAnE,SACG50G,EAAE07sB,GAAWjhJ,kBAGhB,cAAC3tgB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAACs7O,GAAA,EAAD,CACEr8M,WAAW,EACX/4E,MAAK,UAAK/U,EAAE,6CAA8C,CAAE6lM,KAAMuvgB,GAAWlD,UAAxE,MACLviuB,MAAOuiuB,EACPzinB,SApMgB,SAACpzG,GAC3B,IAAM8/tB,EAAc9/tB,EAAE4kB,OAAOtxB,MAC7BmruB,EAAWqB,GACXN,GAAoB,CAAE5smB,OAAMy6G,QAAOwof,QAASiK,EAAavD,kBAkM/C35mB,YAAa64mB,GACb11tB,QAASq5tB,GACT36mB,WAAY26mB,GACZ9jd,gBAAiB,CAAE6U,QAAQ,EAAMn/M,UAAWF,GAAQospB,YACpDxonB,WAAY,CACV6kN,aACE,cAAC3kN,GAAA,EAAD,CAAgBC,SAAS,MAAM7jC,UAAWF,GAAQunpB,eAAlD,SACGU,GAAWlD,iBAQvB4E,GAAuB75tB,KAAI,SAAC67tB,GAAD,OAC1B,cAAC,GAAD,CAEEA,OAAQA,EACR7pmB,KAAMA,EACN7vH,OAAQw5tB,EAAaE,GACrBW,gBAAiBrE,GAAWjD,YAC5B92nB,QAAS4/nB,EAAYnC,GACrB12tB,MAAOg5tB,GAAkBtC,GACzBjxtB,OAAQuyP,EAAQ0+d,GAChBp4B,cAAe67B,GAAwBzD,GACvCY,sBAAuB8C,GAA0B1D,GACjDa,oBAAqB8C,GAAwB3D,IAVxCA,SAeX,eAAChspB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,GAAQs2R,OAA5E,UAhIF,eAAC32R,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACE,cAACg/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAc7sB,UAAWF,GAAQmtpB,aAArE,SACGt6sB,EAAE,+CAEJ82sB,GAAuB75tB,KAAI,SAAC67tB,GAC3B,IAAM+D,EAAc1tpB,EAAM+pC,QAAQy9mB,GAAsBmC,IAASvisB,KACjE,OACE,sBAEE82C,UAAWF,GAAQotpB,YACnBhrnB,MAAO,CAAEomB,YAAaknmB,GAHxB,UAKE,cAACpvnB,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,GAAQqtpB,cAAejrnB,MAAO,CAAErV,MAAO2ioB,GAAhF,SACG78sB,EAAE,uCAAD,OAAwC84sB,MAE5C,cAACrrnB,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,gBAApC,SACGyioB,GAAc7D,OARZA,SA0HT,cAAC56mB,EAAA,EAAD,CAASC,MAAOw9mB,GAAkB,GAAK37sB,EAAE,qDAAzC,SACE,sBAAMqtD,UAAWF,GAAQ6iV,aAAzB,SACE,cAACp3S,EAAA,EAAD,CACEE,QArMQ,WAClB,IAAM7pE,EAAO5xB,iBAAOquX,GACdluR,EAAO,OAAGvuE,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,WACpB29tB,EAAY,OAAG1mrB,QAAH,IAAGA,OAAH,EAAGA,EAAMj3C,IAAI,gBAG3B6O,MAAI9N,MAAM48tB,KAAkBA,EAAan/sB,WAC3CooB,EAAS,IAAI6nG,KAAsC,CACjDmvlB,6BAA8BD,KAIlC/2rB,EAAS,IAAIynG,KAAuC,CAClDhpB,UAAW8mM,IAAgCG,eAC3Cuxa,8BAA+Br4mB,GAAWngG,iBAAO,CAAE,IAAO,CAAC,CAAE,GAAM,CAAE,IAAO,UAE9EuhB,EAAS,IAAI+kG,KAAmC,CAC9CmylB,aAAc,CACZC,aAAc,KACdC,cAAe,MAEjBrkmB,eAGF4lS,MA8KU5pT,QAAQ,YACRzT,MAAO,UACPiX,UAAWwqnB,GACXtupB,UAAWF,GAAQktP,IALrB,SAOGr6S,EAAE,0DC1aJ88sB,GAA6B,CAAC,MAC9B3uF,GAAoC,CAAC,GAAI,KACzCD,GAAuC,CAAC,GAAI,KAG5CwnF,GAAyB,KACzBqH,GAA2B,IAC3BC,GAA+B,uDAyFtCC,G,4MACGhisB,MAAQ,CACbiisB,kBAAmB,GACnBC,8BAA8B,EAC9B9vmB,qBAAsB,KACtB06hB,iBAAiB,EACjB1zd,kBAAmB,KACnB+oiB,oBAAqB,GACrBC,2BAA4B,M,EAiEvBC,sBAA6B5ksB,c,EAC7B6ksB,kBAAyB7ksB,c,EAEzB8ksB,6BAA+B,WAAO,IAAD,EAC1C,EAMI,EAAKr/rB,MALPne,EADF,EACEA,EACA4e,EAFF,EAEEA,SACAmrG,EAHF,EAGEA,aACApY,EAJF,EAIEA,UACAsC,EALF,EAKEA,gBAEI9pB,EAAS,OAAG4/B,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,aAC9ByluB,EAAqB,OAAG1zlB,QAAH,IAAGA,GAAH,UAAGA,EAAcl1H,MAAM,CAAC,WAAY,2BAApC,aAAG,EAAsDe,MAAK,SAACqzW,GACxF,OAAOA,EAAcjxX,IAAI,iBAAiB4d,MAAK,SAACszW,GAC9C,OAAkC,KAA3BA,EAAalxX,IAAI,YAIxBmyG,IAAS,OAAIsznB,QAAJ,IAAIA,OAAJ,EAAIA,EAAuBztuB,OAAQk+oB,GAAqC1woB,SAArC,OAA8Cy2H,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAiBj8H,IAAI,QACjH4mC,EAAS,IAAI+kG,KAAmC,CAC9CmylB,aAAc,CACZC,aAAcjwlB,KACdkwlB,cAAehzlB,KAEjB0hc,iBAAkB,CAAC,CAACnskB,IAAK,MAAO5I,MAAO,QAASwmpB,OAAO,EAAMphnB,MAAO/U,EAAE,+BACtE2xG,gB,EAKCq1K,UAAY,SAACn/R,GAMlB,GALAoU,QAAQ7Z,MAAM,YAAa,CACzByF,WAIGA,EAAOk6L,YAAZ,CAGA,MAGI,EAAK5jK,MAFP4rG,EADF,EACEA,aACAnrG,EAFF,EAEEA,SAGIinI,EAAYh+J,EAAOqZ,OAAO9wB,MAC1B+lc,EAAUtub,EAAOk6L,YAAY3xM,MAE7B67N,EAAWliF,EAAa/xI,IAAI,YAC5Bs8L,EAAU23B,EAASj0N,IAAI6tK,GAC7B,GAAc,MAAXyuB,EAAgB,CACjB,IAAM7iG,EAASs4C,EAAa/xI,IAAI,MAChC4mC,EAAS,IAAI8vD,KAAiB,CAC5B+C,SACAn0C,KAAM,IAAI0uK,IAAK,CAAC92L,GAAIu8D,EAAQw6H,SAAUA,EAASxvG,OAAOopD,GAAWz4J,OAAO+ob,EAAS7hQ,KAAW5/I,oB,EAK3Fu7lB,aAAe,YAIpBrxmB,EADI,EAAKT,MADPS,UAEO,IAAIusF,KAAwB,KACrC,EAAKhtF,MAAMygC,S,EAGN8tD,cAAgB,SAACwB,GAAD,OAA0B,WAC/C,MAII,EAAK/vF,MAHPS,EADF,EACEA,SAEAkyF,GAHF,EAEEiZ,aAFF,EAGEjZ,kBAEmB,IAAlB5C,IACDtvF,EAAS,IAAIulG,KACbvlG,EACE,IAAI0wD,KAAoB,CACtBy+B,UAAW+C,EAAgB94H,IAAI,MAC/Bs8L,QAASxjE,EAAgBvsH,OAAO,WAAY2H,kBAC5C,SAAC00V,GAAD,OACEA,EAAYz9V,OAAO+qH,MAErBshhB,kBAAkB,KAGtB5wmB,EAAS,IAAIotF,MAAoB,O,EAI9Ba,WAAa,kBAAM,SAACL,GACzB,MAGI,EAAKruF,MAFPS,EADF,EACEA,SADF,EAEEo8jB,SAEFp8jB,EAAS,IAAI01F,KAAwB,CAAC9H,mB,EAGjCI,kBAAoB,SAACM,GAC1BA,IAAc,EAAKjyF,MAAMoyF,qBACrB,EAAKxW,SAAS,CACdwW,qBAAsB,OAEtB,EAAKxW,SAAS,CACdwW,qBAAsBH,K,EAIrBwwmB,gBAAkB,SAAC/tuB,GACxB,MAGI,EAAKwuC,MAFPS,EADF,EACEA,SAIImvF,EALN,EAEE+C,gBAGgC94H,IAAI,MAEtC4mC,EAAS,IAAI0wD,KAAoB,CAC/By+B,YACAumE,QAASj3K,iBAAO,CACduuG,yBAA0Bj8H,IAE5B6/oB,kBAAkB,M,EAIfmuF,8BAAgC,YAQrC/+rB,EALI,EAAKT,MADPS,UAMO,IAAI41F,MAAqB,K,EAG7BvE,QAAU,SAAC13H,EAAa5I,EAAeolC,GAA7B,OAA+C,SAAC14B,GAC/D,MAGI,EAAK8hC,MAFPS,EADF,EACEA,SACA+yF,EAFF,EAEEA,UAGIzX,EAAc79G,EAAE4kB,OAA4BgvG,QAC5Cy0c,EAAmB,CAAC,CAACnskB,MAAK5I,QAAOwmpB,OAAO,EAAMphnB,UAEpD6J,EAAS,IAAIitF,MAIXjtF,EADFs7E,EACW,IAAIypB,KAAmC,CAC9CmylB,aAAc,CACZC,aAAcjwlB,KACdkwlB,cAAehzlB,KAEjB0hc,mBACA/yc,cAEO,IAAIgS,KAAmC,CAC9CmylB,aAAc,CACZC,aAAc7vlB,KACd8vlB,cAAe9ylB,KAEjBwhc,mBACA/yc,iB,EAICismB,uBAAyB,SAACvhuB,GAC/B,EAAKw6G,SAAS,CAACwmnB,2BAA4BhhuB,EAAEs8G,iB,EAGxCklnB,wBAA0B,WAC/B,EAAKhnnB,SAAS,CAACwmnB,2BAA4B,Q,EAGtCS,mBAAqB,SAACC,GAAD,OAAqB,WAC/C,IACEn/rB,EACE,EAAKT,MADPS,SAGF,EAAKi/rB,0BACLj/rB,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAI6osB,O,EAGtDC,cAAgB,WACrB,IAoHM9/nB,EApHN,EAQI,EAAK//D,MAPP81F,EADF,EACEA,gBACA8V,EAFF,EAEEA,aACAk0lB,EAHF,EAGEA,gCACAtkrB,EAJF,EAIEA,OACAmH,EALF,EAKEA,cACAliB,EANF,EAMEA,SACA5e,EAPF,EAOEA,EAGI8U,EAAU,OAAGm/F,QAAH,IAAGA,OAAH,EAAGA,EAAiBj8H,IAAI,MAClCkmuB,EAAa5suB,QAAQy4I,EAAa/xI,IAAI,cACtC25G,EAAYo4B,EAAal1H,MAAM,CAAC,UAAW,UAAW,OAEtD0lL,EAAS5gJ,EAAO9kC,MAAM,CAAC,gBAAiB,UAAW,MACnDsptB,EAAYtM,GAAmBh9sB,MAAM,CAAC0lL,EAAQ,OAAQz3L,OAAOgyB,KAEnE,GAAImpsB,GAAmC3suB,QAAQ6suB,GAC7C,OACE,cAACjgnB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,kDAAlB,SACE,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACNqV,MAAO,CAAC4M,WAAY,QACpBk8J,UAAW,cAAC,KAAD,IACXv/J,QAAS,WACPl6E,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIkpsB,KACJjgsB,MAAO,CACLrJ,iBAGJ8J,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAIkpsB,SAZ/D,SAeG,iBAMT,GAtY4B,MAsYxBtpsB,EACF,OACE,cAAC8jF,EAAA,EAAD,CACE1e,MAAM,UACNmnB,KAAM27mB,GACN/7sB,OAAO,SACPgiT,IAAI,WACJ1zN,MAAO,CAAC4M,WAAY,QACpB0R,QAAS,cAAC,KAAD,IACT/U,QAAS,WACPpe,KAAmB9rE,kBAAgByvsB,yBAA0Bv9qB,EAAc,CACzEhsB,WAAYA,EACZwpsB,YAAarqmB,EAAgBj8H,IAAI,QACjCy9F,IAAKunoB,OAXX,SAeGh9sB,EAAE,6CAGF,GAzZqB,MAyZjB8U,EACT,OACE,cAAC8jF,EAAA,EAAD,CACE1e,MAAM,UACNqV,MAAO,CAAC4M,WAAY,QACpBk8J,UAAW,cAAC,KAAD,IACXv/J,QAAS,WACPl6E,EAAS,IAAI0J,KAA6B,CAACs2D,MAAM,EAAM1pE,GAAIqpsB,yBAL/D,SAQGv+sB,EAAE,qCAGF,GAAI8U,IAAe4gsB,GAAwB,CAChD,IACE2H,EACE,EAAKpisB,MADPoisB,2BAGF,OACE,qCACE,cAACn/mB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,uDAAlB,SACE,cAAC44F,EAAA,EAAD,CACEy/J,UAAW,cAAC,KAAD,IACX1qK,QAAQ,YACRzT,MAAM,UACNqV,MAAO,CAAC4M,WAAY,QACpBrD,QAAS,EAAK8knB,uBALhB,SAOG59sB,EAAE,8DAGP,eAAC4kQ,EAAA,EAAD,CACEx9J,SAAUi2mB,EACVz+nB,KAAMttG,QAAQ+ruB,GACdzkmB,QAAS,EAAKilmB,wBACd/sT,mBAAoB,KACpB/gC,aAAc,CAAC/7G,SAAU,SAAUK,WAAY,QAC/Cn7J,gBAAiB,CAAC86J,SAAU,MAAOK,WAAY,QAC/CtsK,WAAY,CACVxY,MAAO,CACLmM,aAAc,EACdjsC,SAAU4tpB,EAA8BA,EAA2Cv/Y,iBAAc/tV,IAVvG,UAcE,cAACygH,EAAA,EAAD,CAAUsI,QAAS,EAAKglnB,mBAAmBlJ,IAA3C,SACG50sB,EAAE,uDAEL,cAACwwF,EAAA,EAAD,CAAUsI,QAAS,EAAKglnB,mBAAmBrD,IAA3C,SACGz6sB,EAAE,qEAKN,OAAI8U,IAAeiosB,IAA4BmB,GAGlDhgoB,EADEq8F,IAAW5qK,kBACNgiF,IAAcv+E,iBAAekB,OAAS,qCAAuC,qCAE7Eq9E,IAAcv+E,iBAAemB,IAAM,iDAAmD,+BAG7F,cAACqkF,EAAA,EAAD,CACE1e,MAAM,UACNmnB,KAAMnjB,EACNj9E,OAAO,SACPgiT,IAAI,WACJ1zN,MAAO,CAAC4M,WAAY,QACpB0R,QAAS,cAAC,KAAD,IACT/U,QAAS,WACPpe,KAAmB9rE,kBAAgByvsB,yBAA0Bv9qB,EAAc,CACzEhsB,WAAYA,EACZwpsB,YAAarqmB,EAAgBj8H,IAAI,QACjCy9F,IAAKyI,MAXX,SAeGl+E,EAAE,qDAKF,M,0DApYT,WACE,IACE4e,EACE3qC,KAAKkqC,MADPS,SAGFA,EAAS,IAAIulG,KACbvlG,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAI44F,KACJ3vF,MAAO,CACLipF,SAAU,SAGdnzH,KAAKg8oB,iB,+BAGP,WACE,MAMIh8oB,KAAKkqC,MALP8wF,EADF,EACEA,KACA8a,EAFF,EAEEA,aACAnrG,EAHF,EAGEA,SACAq1F,EAJF,EAIEA,gBACAnD,EALF,EAKEA,gBAGF78H,KAAKupuB,+BAEDvumB,IAASvgG,OAAKszP,UAAW,OAACj4I,QAAD,IAACA,OAAD,EAACA,EAAc/xI,IAAI,QAC9C4mC,EAASv+B,eAAKynB,oBAGG,OAAfgpG,QAAe,IAAfA,OAAA,EAAAA,EAAiB94H,IAAI,8BAA+B8kuB,GAA2Bt/tB,SAA3B,OAAoCy2H,QAApC,IAAoCA,OAApC,EAAoCA,EAAiBj8H,IAAI,QAC/G/D,KAAKypuB,iBAAgB,K,gCAIzB,SAA0BprnB,EAA4C4yJ,EAAyBk6C,GAAuB,IAAD,EACnH,EAKInrT,KAAKkqC,MAJPne,EADF,EACEA,EACA4e,EAFF,EAEEA,SACAq1F,EAHF,EAGEA,gBACAnD,EAJF,EAIEA,gBAGF,GAAImD,GAAmBA,EAAgBj8H,IAAI,SAApB,UAA8Bs6G,EAAU2hB,uBAAxC,aAA8B,EAA2Bj8H,IAAI,OAAO,CACzF,IAAKm2oB,GAAkC3woB,SAASy2H,EAAgBj8H,IAAI,OAAQ,CAC1E,IAAM0skB,EAAmB,CAAC,CAACnskB,IAAK,MAAO5I,MAAO,YAAawmpB,OAAO,EAAMphnB,MAAO/U,EAAE,6BACjF4e,EAAS,IAAIsnG,KAAyBw+b,IACtC9liB,EAAS,IAAIskG,IAA0Bwhc,IAEzC,GAAKwpE,GAAqC1woB,SAASy2H,EAAgBj8H,IAAI,OAKrE/D,KAAKupuB,mCALwE,CAC7E,IAAM94J,EAAmB,CAAC,CAACnskB,IAAK,MAAO5I,MAAO,QAASwmpB,OAAO,EAAMphnB,MAAO/U,EAAE,+BAC7E4e,EAAS,IAAIsnG,KAAyBw+b,IACtC9liB,EAAS,IAAIskG,IAA0Bwhc,KAItB,OAAf5zc,QAAe,IAAfA,OAAA,EAAAA,EAAiB94H,IAAI,8BAA+B8kuB,GAA2Bt/tB,SAASy2H,EAAgBj8H,IAAI,QAC9G/D,KAAKypuB,iBAAgB,M,oBA8U3B,WAAiB,IAAD,IAoGV1zF,EACAC,EArGU,OACd,EAuBIh2oB,KAAKkqC,MAtBPgvC,EADF,EACEA,QACA8mD,EAFF,EAEEA,gBAEAuqmB,GAJF,EAGEC,uCAHF,EAIED,+BACA1tmB,EALF,EAKEA,gBACAwlhB,EANF,EAMEA,0BACAooF,EAPF,EAOEA,kBACA1+sB,EARF,EAQEA,EACAwksB,EATF,EASEA,oBACA7qqB,EAVF,EAUEA,OACA/a,EAXF,EAWEA,SACAigL,EAZF,EAYEA,SACAm8Y,EAbF,EAaEA,SACA/re,EAdF,EAcEA,KACA8a,EAfF,EAeEA,aACAw0F,EAhBF,EAgBEA,cACAqrJ,EAjBF,EAiBEA,0BACA0+R,EAlBF,EAkBEA,kBAIAtnmB,GAtBF,EAmBE6olB,aAnBF,EAoBE3tiB,OApBF,EAqBEp7C,cArBF,EAsBEE,aAGI29qB,IAAS7tmB,GAAkBA,EAAgB94H,IAAI,4BAE/C4muB,GADsB9tmB,GAAmBA,EAAgB94H,IAAI,cACjC+xI,GAAgBA,EAAa/xI,IAAI,cAG7Di5W,EAAmBngP,EAAkBA,EAAgB94H,IAAI,YAAckU,iBAU7E,GAP6B+kW,EAAiB5nW,QAW1CpV,KAAKgnC,OAHPiisB,EADF,EACEA,kBAUI7oiB,GAXN,EAEE+oiB,oBAFF,EAGEr1E,iBAG6D,MAAhBh+gB,GAAwBA,EAAa1gI,QAAY0gI,EAAa/xI,IAAI,YAAckU,kBAC7E1M,QAAO,SAAC80L,GACxD,OAAmE,KAA3DA,EAAQt8L,IAAI,SAAW,IAAIyc,QAAQyotB,MAGXpsmB,EAAkBA,EAAgB94H,IAAI,OAAS,GAG3E6muB,EAAY5qmB,GAAmBA,EAAgBp/G,MAAM,CAAC,QAAS,SAAU,SACzEq1G,EAAK,UAAM20mB,EAAN,mBAFK,GAEL,YAFK,IAGVC,GAAY7qmB,GAAmBA,EAAgBj8H,IAAI,aAInDmyH,IAF+C,MAAjCq0mB,EAAwCA,EAA8BxmuB,IAAI,YAAckkO,IAAoBC,oBACtFD,IAAoBC,oBAC7CloG,GAAmBA,EAAgBj8H,IAAI,SAElD8rtB,GAAY4a,EACZ5Z,GAAc,qBAAKz3oB,UAAWF,EAAQ4xpB,kBAAxB,SAClB,oBAAIxvnB,MAAO,CAACspjB,UAAW,OAAQ9olB,QAAS,GAAxC,SAEI+zoB,GAAU7mtB,KAAI,SAACszf,EAAWh4f,GACxB,OAAO,6BAAeg4f,EAAK17e,MAAM,CAAC,OAAQ,iBAA1Btc,MACfsE,WAAWhG,cAKd0jM,GAAS5gJ,EAAO9kC,MAAM,CAAC,gBAAiB,UAAW,MAEnDmqtB,GAA6C,IAA7B/tX,EAAiB5nW,SAAiBy6sB,GAAUz6sB,QAAU,EACxE,cAAC60G,EAAA,EAAD,CACEC,MAAO2mmB,GADT,SAIKvqhB,KAAWrrK,gBAAgBqrK,KAAWprK,qBACrC,cAAC,IAAD,IACA,cAACsvjB,EAAA,EAAD,CAAMpxgB,UAAWF,EAAQ8xpB,qBAG/B,KAOEC,GAA+B,SAAC/gsB,GAAD,OAAgB,cAAC,IAAD,aAAM26E,QAAS,EAAK6knB,8BAA+Bz6tB,GAAIshtB,GAAyBrmrB,KAE/HghsB,GAAO,SAACnhnB,GACZp/E,EAASv+B,eAAK29G,KAGV2jR,GAAoB53P,EAAa/xI,IAAI,cAAgB,GAG3D,OAAOi3H,GACL,KAAKvgG,OAAKghG,OACRs6gB,EAAW,UAAM9hnB,qBAAN,YAA4By5W,IACvCsoQ,EAAQ,UAAM/hnB,qBAAN,YAA4By5W,IACpC,MAEF,KAAKjzW,OAAKkhG,eACRo6gB,EAAW,UAAM7hnB,uBAAN,YAA8Bw5W,IACzCsoQ,EAAQ,UAAM9hnB,uBAAN,YAA8Bw5W,IACtC,MAEF,QACEqoQ,EAAW,UAAMjinB,sBAAN,YAA6B45W,IACxCsoQ,EAAQ,UAAMhinB,mBAAN,YAA0B8hH,EAAa/xI,IAAI,OAAS,IAGhE,IAOIq7lB,GALE+rI,GAAuB,CAFRr1lB,EAAa/xI,IAAI,iBAAmB6mN,EAAShqM,MAAM,CAACk1H,EAAa/xI,IAAI,aAAc,SACtF+xI,EAAa/xI,IAAI,SAAWgoB,EAAE,6BACKxgB,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,OACnEkusB,GAAe9ylB,EAAkBA,EAAgB94H,IAAI,SAAWgoB,EAAE,4BAA8BA,EAAE,0DAClGq/sB,IAAyB/tuB,QAAQw/H,GAAmBA,EAAgB94H,IAAI,YAAYqR,UAAa,WAAIsZ,OAAO+6B,SAAS0C,SAASysB,QAAQnqD,4BAAmB,IAAIswB,MAAM,KAAK,MAAS3qB,yBACjLyM,GAAU,OAAGm/F,QAAH,IAAGA,OAAH,EAAGA,EAAiBj8H,IAAI,MAGxC,OAAOi3H,GACL,KAAKvgG,OAAKghG,OACR2je,GAAc,CACZ,CACEt+jB,MAAO/U,EAAE,sCACT84F,QAAS,kBAAMqmnB,GAAK12sB,sBAEtB22sB,IAAwB,CACtBrqsB,MAAOqqsB,GACPtmnB,QAAS,kBAAMqmnB,GAAKn1F,KAEtB45E,IAAe,CAAC7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,4BAE1D,MAEF,KAAKsG,OAAKkhG,eACRyje,GAAc,CACZ,CACEt+jB,MAAO/U,EAAE,uCAAwC4pW,GACjD9wQ,QAAS,kBAAMqmnB,GAAKz2sB,wBAEtB02sB,IAAwB,CACtBrqsB,MAAOqqsB,GACPtmnB,QAAS,kBAAMqmnB,GAAKn1F,KAEtB45E,IAAe,CAAC7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,4BAE1D,MAEF,QACEirkB,GAAW,sBAEPpke,IAASvgG,OAAKu+mB,YACV,CAAC,CAACl4mB,MAAO/U,EAAE,sDAAuD84F,QAAS,kBAAMqmnB,GAAK32sB,6BACtFymG,IAASvgG,OAAK4uB,KACR,CAAC,CAACvoB,MAAO/U,EAAE,6CAA8C84F,QAAS,kBAAMqmnB,GAAKn3sB,8BAC7E,CAAC,CAAC+M,MAAO/U,EAAE,uCAAwC84F,QAAS,kBAAMqmnB,GAAKt1sB,yBAN1E,CAQTu1sB,IAAwB,CAAErqsB,MAAOqqsB,GAAsBtmnB,QAAS,kBAAMqmnB,GAAKlwmB,IAASvgG,OAAK4uB,KAAO2slB,EAAWD,KAC3G45E,IAAe,CAAE7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,6BAK/D,IAUMk3sB,GAAyB,WAC7B1gsB,EAAS,IAAI2nD,IAAyB,MAGxC,OACE,mCACE,eAACuvS,EAAA,EAAD,CAAQ5kR,SAAS,SAAShX,MAAM,UAAUgrB,UAAW,EAAG73C,UAAWF,EAAQghS,OAA3E,UACGl/O,IAASvgG,OAAKw+mB,iBACX,cAACj6C,EAAA,EAAD,CACEnoO,QAAS,CACP,CACE/1V,MAAO/U,EAAE,oBACT84F,QAAS,kBAAMqmnB,GAAK/2sB,0BACpBsrkB,YAAa,CACX/lf,QAAS3sD,EAAc,WAAa,iBAK5C,cAACiyiB,EAAA,EAAD,CACEI,YAAaA,GACbvoO,QAAS,CACP,CACE/1V,MAjCD,WACb,OAAQk6F,GACN,KAAKvgG,OAAKghG,OAAS,OAAO1vG,EAAE,yCAC5B,KAAK0O,OAAKkhG,eAAiB,OAAO5vG,EAAE,0CAA2C4pW,GAC/E,KAAKl7V,OAAKu+mB,YAAc,OAAOjtnB,EAAE,8CACjC,KAAK0O,OAAKszP,QAAS,OAAOhiQ,EAAE,0CAC5B,QAAU,OAAOA,EAAE,wCA2BAu/sB,GACPzmnB,QAASwmnB,GACTtonB,UAAWsxiB,EACX50D,YAAa,CACXvif,SAAUm3iB,IAGd,CACEvznB,MAAO/U,EAAE,6BACT84F,QAASwmnB,GACTtonB,UAAWsxiB,EACX50D,YAAa,CACXvif,SAAUkunB,IAAyB/2E,EACnCj7kB,UAAW,yBACTsgC,QAAS3sD,EAAc,WAAa,iBAMlD,eAAC8lY,EAAA,EAAD,CAASz5W,UAAWF,EAAQ0gX,QAA5B,UACE,eAAC/gX,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EACJV,WAAW,EACXc,QAAS,EACTE,KAAK,SALP,UAOE,cAAC3B,EAAA,EAAD,CACEe,MAAM,EADR,SAKIgxpB,GAA4B,qBAAdC,GACZ,cAAC,IAAD,CACErknB,IAAKyP,GAAS,GACd36C,MAAK,UAzLP,GAyLO,MACLurC,YAAa,OACbC,aAAa,IAEf,sBAAM1tC,UAAWyxpB,GAAY,IAAM3xpB,EAAQm2C,aAGjD,eAACx2C,EAAA,EAAD,CACEe,MAAM,EADR,UAGE,eAACf,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLF,QAAS,EAJX,UAME,cAACzB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAACqxpB,GAAD,UACE,cAACzxnB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,2CAGnC,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,iBAEF,cAAC7gC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6Bwc,UAGjC,cAACr9C,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,cAACX,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXgB,KAAK,SACLV,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ63oB,qBANrB,SAQE,cAACl4oB,EAAA,EAAD,CACEO,UAAWF,EAAQqypB,kBADrB,SAGGR,eAMX,cAAClypB,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQsypB,qBAFrB,SAIE,cAAC3ypB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLV,QAAQ,eAJV,SAOuB,MAAnB+iD,GAA2B,eAAChkD,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACoB,IAA5C4jD,EAAgB94H,IAAI,YAAYqR,SAAiB,qBAAK3Z,IAAKuE,KAAKqpuB,wBAC/D,cAAC,IAAD,CACE/5mB,SAAQ,6CAAwC8wE,GAChDqriB,UAAW,EACXC,QAAS,EACTC,WAAY,CACV3ruB,KAAKqpuB,sBAAsBvhsB,SAE7B8jsB,OAAQ,CACN5ruB,KAAKspuB,kBAAkBxhsB,SAEzB+jsB,aAAc,GACdjviB,SAAU9lE,IACVg1mB,QACEjvmB,GAAmBA,EAAgB94H,IAAI,YAAYiF,KAAI,SAACguH,EAAwB76H,GAC9E,MAAO,CACLmI,IAAI,UAAD,OAAY0yH,EAAQjzH,IAAI,OAAxB,OAAgC5H,GACnCs8H,cAAe,EAAKA,cAAct8H,GAClCy8H,WAAY,EAAKA,aACjBQ,qBAAsB,EAAKpyF,MAAMoyF,qBACjCT,kBAAmB,EAAKA,kBACxB3B,UACA76H,YAGHolB,SAASjW,OACR+2oB,EAA0Br5oB,KAAI,SAAC4wE,EAAyBz9E,GACtD,MAAO,CACLmI,IAAI,OAAD,OAASnI,EAAT,KACHy8H,WAAY,EAAKA,aACjBh0H,KAAMg1E,OAGVhxE,WAAWhG,WAAa,GAE5BmpuB,gBAAiB,CACfhlI,cAGuC,IAA5Clqe,EAAgB94H,IAAI,YAAYqR,SAAiB,qBAAK3Z,IAAKuE,KAAKspuB,wBACxD,YAKnB,eAACzwpB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ8ypB,sBAAuB/ypB,WAAW,SAA5E,UACE,cAACJ,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EACJV,WAAW,EACXc,QAAS,EACTE,KAAK,SALP,SAOE,cAACyvC,EAAA,EAAD,CAASC,MAAsDn+F,EAA/C4+sB,GAA6B9tmB,EAAoB,yBAA8B,0BAA/F,SACE,cAACrjB,EAAA,EAAD,UAAaztF,EAAE,8BAIhB88sB,GAA2Bt/tB,SAASs3B,KACnC,cAAC,GAAD,CACE88rB,aAAc5xsB,EAAE,gCAChBo6X,WAAYp6X,EAAE,uBACdiwG,QAAS0umB,EACTlvnB,SAAU,kBAAM,EAAKiunB,iBAAiBiB,IACtChvuB,MAAOgvuB,EACPxtnB,UAAUytnB,IAA6B9tmB,EACvCzjD,UAAU,2BAKd8gkB,GAAkC3woB,SAASs3B,KACzC,cAACopF,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2BAAlB,SACE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAChgC,MAAO,OAAQkmC,YAAa,IACpCvoC,WAAW,SAHb,UAKE,qBAAKutC,IAAKylnB,EAAe5imB,IAAI,mBAC7B,cAAC4sI,EAAA,EAAD,CACEj6I,QAAS3+H,QAAO,UAACitO,EAAcvmO,IAAI,cAAnB,aAAC,EAA0B4d,MAAK,SAAA9J,GAAC,MAAuB,cAAnBA,EAAE9T,IAAI,aAC3Dy3G,SAAU,SAACpzG,GAAM,EAAK4zH,QAAQ,MAAO,YAAajwG,EAAE,2BAAnC,CAA+D3jB,IAChF1M,OAAO,EACPwhH,UAAUytnB,IAA6B9tmB,EACvCljB,WAAY,CAAE,aAAc,2BAOpCsgiB,GAAqC1woB,SAASs3B,KAC5C,cAACopF,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6BAAlB,SACA,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACX8hC,MAAO,CAAChgC,MAAO,OAAQkmC,YAAa,IACpCvoC,WAAW,SAHb,UAKE,qBAAKutC,IAAK0lnB,EAAiB7imB,IAAI,kBAC/B,cAAC4sI,EAAA,EAAD,CACEj6I,QAAS3+H,QAAO,UAACitO,EAAcvmO,IAAI,cAAnB,aAAC,EAA0B4d,MAAK,SAAA9J,GAAC,MAAuB,UAAnBA,EAAE9T,IAAI,aAC3Dy3G,SAAU,SAACpzG,GAAM,EAAK4zH,QAAQ,MAAO,QAASjwG,EAAE,6BAA/B,CAA6D3jB,IAC9E1M,OAAO,EACPwhH,UAAUytnB,IAA6B9tmB,EACvCljB,WAAY,CAAE,aAAc,8BAMnC35G,KAAK+puB,mBAER,cAACoC,GAAA,EAAD,IACA,cAACC,GAAD,IA14BsB,MA44BpBvrsB,IAAmC,cAACwrsB,GAAD,IAGnCxrsB,KAAe4gsB,IAA0B,qCACvC,cAAC,GAAD,IACA,cAAC,GAAD,gB,GArzBwBh9rB,aAi3BvBwwC,sBACb91B,YAAgB,gBAChBwqE,eACAwF,KACAtQ,mBAtDsB,SAAC73E,EAAOyF,GAC9B,IAAMuuF,EAAOC,cAAiBj0F,GACxBslsB,EAAa52lB,cAAiB1uG,GAC9B+uG,EAAaJ,cAA8B3uG,GAC3CgvG,EAAeJ,cAAgC5uG,GAE/C+lB,GADiBnM,cAA2B5Z,GAE9C8uG,EAAew2lB,GAAc15tB,gBAC7BiqH,EAAkBhB,cAAoB70F,GAC1C,OAAQg0F,GACN,KAAKvgG,OAAKghG,OACRqa,EAAeC,GAAcnjI,gBAC7BiqH,EAAkBnB,cAA0B10F,GAC5C,MAEF,KAAKvM,OAAKkhG,eACRma,EAAeE,GAAgBpjI,gBAC/BiqH,EAAkBjB,cAA4B50F,GAKlD,OAAO,aACLg0F,OACA8a,eACAjZ,kBACA9vE,eACGja,YAAyB,CAC1BktF,gBAAiB+mG,cACjBs7a,0BAA2Bvgd,cAC3BwoC,cAAehB,eACfmhgB,kBAAmBzoiB,cACnBwoiB,uCAAwChjgB,cACxC+igB,8BAA+BnvnB,wBAAcywH,KAC7CnmL,OAAQF,cACRolK,SAAUF,cACVhtF,UAAWC,cACXg4P,0BAA2B/qU,cAC3BypmB,kBAAmB9xd,cACnBqzc,aAAcpzc,cACdwniB,gCAAiC1lrB,gBAbhCxR,CAcA9L,OAGoB,SAAC2D,GAC1B,MAAO,CACLA,eASF48R,oBAAU,CACR9pN,KAAMouH,IACN27F,kBAAkB,IAEpBvsP,aAn7Ba,SAACC,GAAD,MAA+B,CAC5CqxpB,cAAe,CACbhxpB,OAAO,GAAD,OAAuB,EAAlBL,EAAMZ,UAAX,SAERwwpB,kBAAmB,GAEnB/Z,qBAAsB,CACpBj1oB,QAAS,OACTmqB,MAAO,UACP3qB,MAAO,QAETkxpB,SAAU,CACRrlnB,SAAU,QAEZslnB,eAAgB,CACd/wpB,eAAgB,iBAElB6zR,QAAS,CACPj0R,MAAM,eAAD,OAAmC,EAAlBJ,EAAMZ,UAAvB,OACLiB,OAAO,SACP0qB,MAAO/qB,EAAM+pC,QAAQE,QAAQ68J,MAE/BgnV,iBAAkB,CAChBhne,KAAM,EACN5mD,QAAS,OACTM,eAAgB,gBAElBgxpB,eAAgB,CACd3xmB,WAAY7/C,EAAM+pC,QAAQE,QAAQ7iF,KAClC2jE,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9BoxO,OAAQ,CACNl5O,OAAQ9lD,EAAM8lD,OAAOk5O,OAAS,GAEhC8wX,iBAAkB,CAChB/koB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B00U,QAAS,CACP3nU,WAAY/2C,EAAMZ,UAClB43C,cAAeh3C,EAAMZ,WAEvBkxpB,qBAAsB,CACpBnvpB,SAAU,GAEZkvpB,kBAAmB,CACjBhwpB,OAAQL,EAAMZ,WAEhB+0C,SAAU,CACRlI,SAAU,GACVlhB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,OAElC6mnB,sBAAuB,CACrBlwpB,QAASZ,EAAMZ,QAAQ,EAAG,QAs3BfrF,CAUb+zpB,K,0YC1gCWzvhB,EAAY,mBAGnBozhB,E,4MAEG3lsB,MAAQ,CACb+7E,WAAW,G,EAyBNu5M,SAAW,SAACnxT,GACjB,IAeI2pX,EAfJ,EAUI,EAAK5qV,MATPS,EADF,EACEA,SACAy3X,EAFF,EAEEA,yBACA5sC,EAHF,EAGEA,SACAyiR,EAJF,EAIEA,gBACAC,EALF,EAKEA,kBACAl9gB,EANF,EAMEA,KACA+yJ,EAPF,EAOEA,QACAlhO,EARF,EAQEA,cACAyvQ,EATF,EASEA,SAGIpwC,GAA4C,IAA9Bk2I,EAAkCr0I,EAAQhqR,IAAI,QAAU,KACtE2wX,GAA8C,IAA9B0tC,GAA4D,SAA1Br0I,EAAQhqR,IAAI,UAGpE,OAAQi3H,GACN,KAAKvgG,OAAKghG,OACRq5P,EAAc,SACd,MAEF,KAAKr6V,OAAKkhG,eACRm5P,EAAc,WACd,MAEF,QACEA,EAAc,UAalB,GAHA,EAAKlyQ,SAAS,CACZG,WAAW,IAETyyQ,EACF,EAAK21U,OAAOhgsB,OACP,CACL,GAAImxT,EACFA,EAASnxT,EAAQi3Z,EAA0B1tC,QAE3C,OAAQ15P,GACN,KAAKvgG,OAAKghG,OACR9wF,EAAS,IAAIysD,IAAkC,CAAC8e,UAAW+hiB,EAAiB5ulB,KAAMl+C,KAClF,MAEF,KAAKsvB,OAAKkhG,eACRhxF,EAAS,IAAI2sD,IAAoC,CAAC4e,UAAWgiiB,EAAmB7ulB,KAAMl+C,KACtF,MAEF,QACEw/B,EAAS,IAAIwuD,IAAiB,CAAE+c,UAAWksT,EAA0B/4W,KAAMl+C,EAAQk3Z,WAAY3tC,KAzBrGjuR,IAAmB9rE,kBAAgBiysB,YACjC//qB,EAAc,CACZq/N,YAAaA,EAAW,UAAMA,EAAN,YAAqB4oG,EAArB,KAAsC,S,EA+B/Dq2U,OAAS,SAAChgsB,GACf,MAII,EAAK++B,MAHPS,EADF,EACEA,SACAqQ,EAFF,EAEEA,KACAggF,EAHF,EAGEA,KAGIx9B,EAASxiD,EAAKj3C,IAAI,MACpBi3H,IAASvgG,OAAKghG,OAChB9wF,EAAS,IAAIyqD,KAAkC,CAACoI,SAAQ/mB,KAAMtrE,EAAOoT,UAC5Dy8G,IAASvgG,OAAKkhG,eACvBhxF,EAAS,IAAI2qD,KAAoC,CAACkI,SAAQ/mB,KAAMtrE,EAAOoT,UAEvEosB,EAAS,IAAI8xD,IAAoB,CAC/Be,SACAryF,a,wDAtGN,SAA0BkzG,GACxB,MAIIr+G,KAAKkqC,MAHPo0E,EADF,EACEA,cACA0c,EAFF,EAEEA,KACArwF,EAHF,EAGEA,SAGE2zE,IAAoBh5G,aAAGg5G,EAAeD,EAAUC,gBAClDt+G,KAAKkqC,MAAMygC,QAGTqwD,IAASvgG,OAAKghG,QAChB9wF,EAAS,IAAI6sD,KAAc/8D,OAAKghG,SAE9BT,IAASvgG,OAAKkhG,gBAChBhxF,EAAS,IAAI6sD,KAAc/8D,OAAKkhG,mB,kCAIpC,WACE37H,KAAKkqC,MAAMygC,U,oBAuFb,WACE,MAUI3qE,KAAKkqC,MATPm4R,EADF,EACEA,aACAt2S,EAFF,EAEEA,EACAypW,EAHF,EAGEA,SACAt8S,EAJF,EAIEA,QACAl+B,EALF,EAKEA,KACAkgC,EANF,EAMEA,MACAryB,EAPF,EAOEA,cACA0lE,EARF,EAQEA,kBARF,IASEs+mB,sBATF,SAYA,OACGr3W,GAAoB,MAARx6U,EACX,cAAC69B,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXqiC,MAAO,CAACiW,OAAQ,QAJlB,SAME,cAAC/X,EAAA,EAAD,UAAaztF,EAAE,8BAEjB,uBACAuwS,SAAU+F,EAAariU,KAAKs8T,UAD5B,UAGA,eAACzjP,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ2znB,eAJrB,UAME,cAACh0nB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAACysU,EAAA,EAAD,aACE/qU,MAAM,KACNi2C,OAAO,KACPtrB,MAAO,CACL+e,gBAAiBn8D,EAAgBqyB,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,KACtF8I,YAAaplE,EAAgBqyB,EAAM+pC,QAAQ+d,UAAU1gG,KAAO44C,EAAM+pC,QAAQE,QAAQ7iF,MAEpFi5C,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,KACzBi0C,MAGR,cAAC11C,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQgxC,MAFrB,SAOUn+F,EAFNypW,EACIq3W,EACI,sCACA,0BACJA,EACI,qCACA,iCAKhB,eAACh0pB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,SAHV,SAKE,eAACjB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQ4zpB,eAHrB,UAKE,cAAC,QAAD,CACExzpB,UAAWwgC,IACXtrG,KAAK,OACLwrG,SAAUmqF,IACVj6J,MAAO,CACLpJ,MAAwB/U,EAAjB8gtB,EAAmB,kCAAuC,uBACjEzxuB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,MAIjB,eAAChhC,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASqiC,MAAO,CAAEx/B,QAAS,gBAAiBiuT,IAAK,OAAQvvT,KAAK,SAAhG,UACE,cAAC,IAAD,CAAWpB,UAAWF,EAAQonL,QAASn5I,SAAS,UAChD,cAAC3N,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,mCAIvC,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,SACRb,WAAW,SAJb,UAME,cAAC0rC,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN7sB,UAAWF,EAAQ6zpB,aACnB7suB,KAAK,SACLg9G,SAAUl9G,KAAKgnC,MAAM+7E,UALvB,SAOGh3F,EAAE,wBAGH/rB,KAAKgnC,MAAM+7E,UACT,cAAC6+M,EAAA,EAAD,CAAkB37N,MAAM,UAAUqV,MAAO,CAAE4M,WAAY,IAAMnsH,KAAM,KACnE,kB,GApOe0oC,iBAkShBwwC,oBACbgG,aA1Va,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAENs1rB,eAAgB,CACdvwlB,UAA6B,EAAlBphC,EAAMZ,WAEnBs3C,KAAM,CACJr2C,OAA0B,EAAlBL,EAAMZ,UACd6sC,SAA4B,EAAlBjsC,EAAMZ,UAChBgB,MAAO,GACPi2C,OAAQ,IAEVu7mB,eAAgB,CACdxwpB,SAAU,KAEZywpB,aAAc,CACZjxpB,QAAQ,GAAD,OAAuB,GAAlBZ,EAAMZ,UAAX,cAAkD,EAAlBY,EAAMZ,UAAtC,OAETgmL,QAAS,CACPr6J,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,SAuUZ,CAAE0sF,WAAW,IAChC7vE,YAAgB,gBAChBgwE,IACAtQ,mBAzDsB,SAAC73E,EAAYyF,GACnC,IAAM+oV,EAAW/oV,EAASgoV,WAAWxwX,IAAIshnB,IAAqBluP,gBAC1Dr8P,EAAavgG,OAAKszP,QAChBi/c,EAAavgsB,EAASgoV,WAAWxwX,IAAIshnB,IAAqB0nH,aAC1DC,EAAezgsB,EAASgoV,WAAWxwX,IAAIshnB,IAAqB4nH,eAC9DH,IACFhymB,EAAOvgG,OAAKghG,QAEVyxmB,IACFlymB,EAAOvgG,OAAKkhG,gBAEd,IAAM3gF,EAAwB,MAAjBvO,EAASuO,KAAevO,EAASuO,KAAQ,IAAI+8K,IAAK,CAAC92L,IAAK,IAAIwf,cACnE2srB,EAAWvuuB,cAAY,CAAC,SACxBy/G,GAAiBk3Q,EAAWx6U,EAAKzvC,QAAO,SAAC7P,EAAO4I,GACpD,OAAO8ouB,EAASnpuB,IAAIK,WACjBxI,IAAc8W,gBAEb6qG,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACT+3Q,EAAQ,UACHj8K,EADG,QAENA,EAEA0+b,EAAkBtsb,cAAoC3kL,GACtDkxmB,EAAoBtsb,cAAsC5kL,GAC1Do7X,EAA2B53M,cAAqCxjL,GAItE,MAAO,CACLy2E,OACAa,gBACAk3Q,WACA4sC,2BACA61O,kBACAC,oBACAl9gB,OACA+yJ,QAXcljE,YAAkB,CAAC30G,UAAWksT,GAA9Bv3M,CAAyD7jL,GAYvEunF,kBAXwBnkE,cAA8BpjB,OAe/B,SAAC2D,GAC1B,MAAO,CACLA,eAcF48R,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,EAClBxtN,SAhBa,SAACmB,GAEhB,MADoB,MAIPlmC,CAab03pB,G,QC3XWpzhB,EAAY,gBAInBwmJ,EAAat7T,cAAsC,SAAwByF,EAAOzuC,GACtF,OAAO,cAACwloB,EAAA,EAAD,aAAOvnjB,UAAU,KAAKj+E,IAAKA,GAASyuC,OAsFvCi4X,E,4MAIGn7X,MAAQ,CACb2jE,MAAM,G,EAGDqmK,mBAAqB,SAAC3yJ,GAC3B,MAII,EAAKn0E,MAHPS,EADF,EACEA,SACA6yD,EAFF,EAEEA,OACA09B,EAHF,EAGEA,gBAGc,IAAZ19B,IAAqC,IAApB09B,GAAyB19B,IAAW09B,GAAkB7c,EAAU6c,iBAAmBA,GACtGvwF,EAASv+B,YAAKynB,oB,EAkFVw5sB,aAAe,SAAC1ioB,GAAD,OAAmB,WACxC,IACQ2ioB,EACJ,EAAKtmsB,MADP2jE,KAEF,EAAKiY,SAAS,CACZjY,KAAc,MAARA,EAAeA,GAAQ2ioB,M,4CAnFjC,WACE,IA9GgCnhrB,EA8GhC,EAaInsD,KAAKkqC,MAZPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACMwhtB,EAHR,EAGE5ioB,KAHF,IAIEw2T,cAJF,MAIWnha,KAAKqtuB,aAJhB,OAKEhra,aALF,EAMEoyD,mBANF,MAMe51X,gBANf,EAOEwqD,EAPF,EAOEA,KACA1e,EARF,EAQEA,SACAke,EATF,EASEA,cACAyzQ,EAVF,EAUEA,SACA7yQ,EAXF,EAWEA,SACAkpY,EAZF,EAYEA,YAIM26S,EACJttuB,KAAKgnC,MADP2jE,KAGIkioB,GAjI0B1grB,GAiImB,OAAR1C,QAAQ,IAARA,OAAA,EAAAA,EAAU0C,WAAY,GAjIZ,CAACr4B,sBAAqBG,qBAAoBC,wBAAsBzmB,MAAK,SAACglE,GAAD,OAAetmB,EAAS5iD,SAASkpE,OAmIrJk4B,EAD+B,MAAlB4ioB,EACOA,EAAiBD,EAErC93W,EAAWf,EAAWxwX,IAAIshnB,IAAqBluP,gBAC/C55Q,EAAO+3Q,EAAQ,UAAMj8K,EAAN,QAAwBA,EAE7C,OACE,eAACy8G,EAAA,EAAD,CACE48H,YAAY,EACZjoV,KAAMA,IAAQ,EACdg6B,QAASw8R,GAAO,GAChBt7R,oBAAqBk6N,EACrBytY,qBAAqB,EALvB,UAOE,cAAC3rW,EAAA,EAAD,CACEzoT,UAAWF,EAAQghS,OACnBj0Q,MAAO0sV,GAA4B,UAFrC,SAIE,eAACE,EAAA,EAAD,WACE,cAACn4T,EAAA,EAAD,CACEz0B,MAAM,UACN4e,QAAS,WACPl6E,EAAS,IAAI2pD,MACb6sU,GAAO,EAAPA,IAEF,aAAW,QANb,SAQE,cAAC,IAAD,MAEF,cAAC3nT,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQg9C,SAFrB,SAOUnqG,EAFNypW,EACIq3W,EACI,sCACA,0BACJA,EACI,qCACA,iCAKhB,cAAC,EAAD,CACIvwa,SAAUA,EACVm4D,WAAYA,EACZo4W,eAAgBA,EAChBpvnB,KAAMA,EACNziE,KAAMqO,EACNR,cAAeA,W,GA5FMpkB,aA4HlBwwC,sBACbgG,aAhNa,SAACC,GAAD,MAA+B,CAC5Cg/R,OAAQ,CACNj9P,SAAU,YAEZiZ,SAAU,CACR8L,KAAM,EACN/7B,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B5e,MAAO,CACL8X,KAAM,GAERpQ,KAAM,CACJr2C,OAA0B,EAAlBL,EAAMZ,UACd6sC,SAA4B,EAAlBjsC,EAAMZ,UAChBgB,MAAO,GACPi2C,OAAQ,IAEVlzH,OAAQ,CACN2mH,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvC2jE,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5BvX,OAAO,GAAD,OAAuB,EAAlBr2C,EAAMZ,UAAX,MACNiiD,WAAY,SACZxH,cAAe,YAEf,UAAW,CACT/P,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KACvClf,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,YAuLhC3pF,YAAgB,gBAChBqnjB,YAAW,CACTC,UAAU,IAEZ5nf,mBAtBsB,SAAC73E,EAAYyF,GACnC,OAAO,eACFqG,YAAyB,CAC1BooF,eAAgBC,cAChBtyE,cAAeF,cACfgqY,YAAaroY,eAHZxX,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,CAObktV,I,0FC1LasrU,EAJS,CACtBC,gBA5EsB,SAACC,GACvB,IAAMC,EAAa,CACjB7ynB,UAAW,KACXJ,QAAS,MAEX,OAAQgznB,EAAiBl/e,QACvB,KAAK1zN,gBAAc0gF,MACjBmynB,EAAW7ynB,UAAYW,MAASC,QAAQ,OAAO7vD,cAC/C8hrB,EAAWjznB,QAAUe,MAASE,MAAM,OAAO9vD,cAC3C,MACF,KAAK/wB,gBAAc8gF,UACjB+xnB,EAAW7ynB,UAAYW,MAASn8F,SAAS,EAAG,QAAQo8F,QAAQ,OAAO7vD,cACnE8hrB,EAAWjznB,QAAUe,MAASn8F,SAAS,EAAG,QAAQq8F,MAAM,OAAO9vD,cAC/D,MACF,KAAK/wB,gBAAc+gF,UACjB8xnB,EAAW7ynB,UAAYW,MAASC,QAAQ,QAAQ7vD,cAChD8hrB,EAAWjznB,QAAUe,MAASE,MAAM,QAAQ9vD,cAC5C,MACF,KAAK/wB,gBAAcghF,UACjB6xnB,EAAW7ynB,UAAYW,MAASn8F,SAAS,EAAG,QAAQo8F,QAAQ,QAAQ7vD,cACpE8hrB,EAAWjznB,QAAUe,MAASn8F,SAAS,EAAG,QAAQq8F,MAAM,QAAQ9vD,cAChE,MACF,KAAK/wB,gBAAcihF,WACjB4xnB,EAAW7ynB,UAAYW,MAASC,QAAQ,SAAS7vD,cACjD8hrB,EAAWjznB,QAAUe,MAASE,MAAM,SAAS9vD,cAC7C,MACF,KAAK/wB,gBAAckhF,WACjB2xnB,EAAW7ynB,UAAYW,MAASn8F,SAAS,EAAG,UAAUo8F,QAAQ,SAAS7vD,cACvE8hrB,EAAWjznB,QAAUe,MAASn8F,SAAS,EAAG,UAAUq8F,MAAM,SAAS9vD,cACnE,MACF,KAAK/wB,gBAAcmhF,aACjB0xnB,EAAW7ynB,UAAYW,MAASC,QAAQ,WAAW7vD,cACnD8hrB,EAAWjznB,QAAUe,MAASE,MAAM,WAAW9vD,cAC/C,MACF,KAAK/wB,gBAAcohF,aACjByxnB,EAAW7ynB,UAAYW,MAASn8F,SAAS,EAAG,YAAYo8F,QAAQ,WAAW7vD,cAC3E8hrB,EAAWjznB,QAAUe,MAASn8F,SAAS,EAAG,YAAYq8F,MAAM,WAAW9vD,cACvE,MACF,KAAK/wB,gBAAcqhF,UACjBwxnB,EAAW7ynB,UAAYW,MAASC,QAAQ,QAAQ7vD,cAChD8hrB,EAAWjznB,QAAUe,MAASE,MAAM,QAAQ9vD,cAC5C,MACF,KAAK/wB,gBAAcshF,UACjBuxnB,EAAW7ynB,UAAYW,MAASn8F,SAAS,EAAG,SAASo8F,QAAQ,QAAQ7vD,cACrE8hrB,EAAWjznB,QAAUe,MAASn8F,SAAS,EAAG,SAASq8F,MAAM,QAAQ9vD,cACjE,MACF,KAAK/wB,gBAAcyhF,OACjBoxnB,EAAW7ynB,UAAY4ynB,EAAiB5ynB,WAAa,KACrD6ynB,EAAWjznB,QAAUgznB,EAAiBhznB,SAAW,KAKrD,OAAOiznB,GAwBPC,mBArByB,SAACljX,EAAWmjX,GACrC,IAAI3lT,EAAW,KACf,GAAkB,cAAdx9D,GAA6BmjX,EAAWnznB,QAAS,CACnD,IAAMK,EAAkBP,YAAUqznB,EAAW/ynB,WAAW,GAClDH,EAAgBH,YAAUqznB,EAAWnznB,SAAS,GAC7B,MAAnBK,GAA2BJ,EAAgBI,IAC7CmtU,EAAWxiV,IAAQ55E,EAAE,mCAGzB,GAAkB,YAAd4+V,GAA2BmjX,EAAW/ynB,UAAW,CACnD,IAAMC,EAAkBP,YAAUqznB,EAAW/ynB,WAAW,GAClDH,EAAgBH,YAAUqznB,EAAWnznB,SAAS,GAC/B,MAAjBC,GAAyBI,EAAkBJ,IAC7CutU,EAAWxiV,IAAQ55E,EAAE,sCAGzB,OAAOo8Z,ICpBHtmK,EAAW,SAAC91J,GAChB,OAAOA,EAAKnzC,QAAQ,IAAK,KAAK9oE,MAAM,EAAG,KAGnCi+tB,EAAa,SAAChinB,GAElB,OADAA,EAAOrQ,IAAOqQ,GAAM2gI,QAAQ9wI,MAAM,OAAO9vD,cAClC+1N,EAAS91J,IAsDZmkS,EAAoB,CACxBC,iBApHuB,SAAC69U,GAAwB,IAAD,MAC/C,IAAsB,OAAlBA,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBj5gB,WAApB,OAA+Bi5gB,QAA/B,IAA+BA,GAA/B,UAA+BA,EAAoBj5gB,eAAnD,aAA+B,EAA6B05B,QAAQ,CACtE,IAAMw/e,EAAeR,EAAgBC,gBAAhB,OAAgCM,QAAhC,IAAgCA,OAAhC,EAAgCA,EAAoBj5gB,SACzEi5gB,EAAmBj5gB,QAAnB,UAA0Ck5gB,EAAalznB,UACvDiznB,EAAmBj5gB,QAAnB,QAAwCk5gB,EAAatznB,QAEvD,IAAsB,OAAlBqznB,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBj+U,aAApB,OAAiCi+U,QAAjC,IAAiCA,GAAjC,UAAiCA,EAAoBj5gB,eAArD,aAAiC,EAA6Bg7L,WAAW,CAC3E,IAAMk+U,EAAeR,EAAgBC,gBAAgBM,EAAmBj+U,WACxEi+U,EAAmBj+U,UAAnB,UAA4Ck+U,EAAalznB,UACzDiznB,EAAmBj+U,UAAnB,QAA0Ck+U,EAAatznB,QAEzD,IAAsB,OAAlBqznB,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBrja,aAApB,OAAiCqja,QAAjC,IAAiCA,GAAjC,UAAiCA,EAAoBj5gB,eAArD,aAAiC,EAA6B41G,WAAW,CAC3E,IAAMsja,EAAeR,EAAgBC,gBAAgBM,EAAmBrja,WACxEqja,EAAmBrja,UAAnB,UAA4Csja,EAAalznB,UACzDiznB,EAAmBrja,UAAnB,QAA0Csja,EAAatznB,QAEzD,OAAOqznB,GAqGP55T,YAlGkB,SAAdA,EAAetta,GACnB,MAAmB,kBAARA,GAA4B,OAARA,GAI/B1I,OAAO0D,KAAKgF,GAAK4F,SAAQ,SAAApI,GACX,WAARA,GAAiC,OAAbwC,EAAIxC,UACnBwC,EAAIxC,GACkB,kBAAbwC,EAAIxC,KACpBwC,EAAIxC,GAAO8va,EAAYtta,EAAIxC,IACU,IAAjClG,OAAO0D,KAAKgF,EAAIxC,IAAMzC,eACjBiF,EAAIxC,OATRwC,GAiGT4sa,iBAtDuB,SAACnoa,GAAY,IAAD,kBAmBnC,OAlBA,OAAIA,QAAJ,IAAIA,GAAJ,UAAIA,EAAQwpN,eAAZ,aAAI,EAAiBh6G,aACnBxvG,EAAOwpN,QAAQh6G,UAAY8mK,EAASt2Q,EAAOwpN,QAAQh6G,aAE3C,OAANxvG,QAAM,IAANA,GAAA,UAAAA,EAAQwpN,eAAR,eAAiBp6G,WAAjB,OAA4BpvG,QAA5B,IAA4BA,GAA5B,UAA4BA,EAAQwpN,eAApC,aAA4B,EAAiBp6G,QAAQpxG,SAAS,QAChEgC,EAAOwpN,QAAQp6G,QAAUoznB,EAAWxiuB,EAAOwpN,QAAQp6G,WAErD,OAAIpvG,QAAJ,IAAIA,GAAJ,UAAIA,EAAQwkZ,iBAAZ,aAAI,EAAmBh1S,aACrBxvG,EAAOwkZ,UAAUh1S,UAAY8mK,EAASt2Q,EAAOwkZ,UAAUh1S,aAE/C,OAANxvG,QAAM,IAANA,GAAA,UAAAA,EAAQwkZ,iBAAR,eAAmBp1S,WAAnB,OAA8BpvG,QAA9B,IAA8BA,GAA9B,UAA8BA,EAAQwkZ,iBAAtC,aAA8B,EAAmBp1S,QAAQpxG,SAAS,QACpEgC,EAAOwkZ,UAAUp1S,QAAUoznB,EAAWxiuB,EAAOwkZ,UAAUp1S,WAEzD,OAAIpvG,QAAJ,IAAIA,GAAJ,UAAIA,EAAQo/T,iBAAZ,aAAI,EAAmB5vN,aACrBxvG,EAAOo/T,UAAU5vN,UAAY8mK,EAASt2Q,EAAOo/T,UAAU5vN,aAE/C,OAANxvG,QAAM,IAANA,GAAA,UAAAA,EAAQo/T,iBAAR,eAAmBhwN,WAAnB,OAA8BpvG,QAA9B,IAA8BA,GAA9B,UAA8BA,EAAQo/T,iBAAtC,aAA8B,EAAmBhwN,QAAQpxG,SAAS,QACpEgC,EAAOo/T,UAAUhwN,QAAUoznB,EAAWxiuB,EAAOo/T,UAAUhwN,UAElDpvG,GAoCP2iuB,yBAjF+B,SAACC,GAChC,IAAMC,EAAoB,CAAC,UAAW,YAAa,aAanD,OAZArwtB,IAAErR,QAAQyhuB,GAAqB,SAACt3e,EAAO8zH,IACjC,OAAC9zH,QAAD,IAACA,OAAD,EAACA,EAAOpI,WAAgB,OAALoI,QAAK,IAALA,OAAA,EAAAA,EAAO97I,cAAP,OAAoB87I,QAApB,IAAoBA,OAApB,EAAoBA,EAAOl8I,UAChD58F,IAAErW,IAAImvP,EAAO,SAAU,UAErBu3e,EAAkB7kuB,SAASohX,MACzB,OAAC9zH,QAAD,IAACA,OAAD,EAACA,EAAO97I,aAAa,OAAC87I,QAAD,IAACA,OAAD,EAACA,EAAOl8I,UAC/B58F,IAAErW,IAAImvP,EAAO,SAAU,KAG3B94O,IAAEq7K,MAAMy9D,EAAO,kBACf94O,IAAEq7K,MAAMy9D,EAAO,mBAEVs3e,GAoEPE,qBAlC2B,SAACF,GAI5B,OADWV,EAAgBI,mBAAmB,YAAnC,OAAgDM,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAqBp5gB,YAIrE04gB,EAAgBI,mBAAmB,UAAnC,OAA8CM,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAqBp5gB,YAInE04gB,EAAgBI,mBAAmB,YAAnC,OAAgDM,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAqBp+U,cAIrE09U,EAAgBI,mBAAmB,UAAnC,OAA8CM,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAqBp+U,cAInE09U,EAAgBI,mBAAmB,YAAnC,OAAgDM,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAqBxja,aAIrE8ia,EAAgBI,mBAAmB,UAAnC,OAA8CM,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAqBxja,iBAcjEulF,O,sSCnHT1gS,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C3jE,KAAM,CACJ+jE,MAAO,KAGTgzpB,gBAAiB,CACfxypB,QAAS,UACTP,OAAQ,UACRw5C,cAAe,OACfv5C,SAAU,GAEZ2xC,OAAQ,CACN7xC,MAAO,IACPC,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAAK,IAEnC8pM,UAAW,CACTl8J,WAAY,EACZ1G,YAAa,OAkKF+snB,EA9JU,SAAC,GAKnB,IAAD,MAJJC,gBAII,aAHJvyF,qBAGI,SAFJ5ylB,EAEI,EAFJA,KACA0yqB,EACI,EADJA,iBAEMpxrB,EAAW2F,wBACX4qC,EAAQwjD,cACRxlD,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAoC0Y,IAAMia,UAAS,GAAnD,mBAAO+vrB,EAAP,KAAmBC,EAAnB,KACA,EAAsDjqsB,IAAMia,UAAS,GAArE,mBAAOiwrB,EAAP,KAA4BC,EAA5B,KAEM/wlB,EAAI,OAAGx0F,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,QACjB8quB,GAAUhxlB,GAAQxgJ,QAAO,OAAC0+tB,QAAD,IAACA,OAAD,EAACA,EAAkBxwtB,OAAOiiR,KAAuBp4Q,SAG1E05tB,EAASD,IAAM,OAAIxlrB,QAAJ,IAAIA,GAAJ,UAAIA,EAAMtlD,IAAI,mBAAd,aAAI,EAAuB0J,MAAK,SAAA4yL,GAAY,IAAD,EAC9D,QAAKmtF,YAAsBuuc,EAAiBh4tB,IAAIs8L,EAAQt8L,IAAI,UAG5D,UAAOs8L,EAAQt8L,IAAI,mBAAnB,aAAO,EAAyB0J,MAAK,SAAAupH,GAAO,aAAI,UAAAA,EAAQjzH,IAAI,8BAAZ,eAAoChI,MAAO,UAG7F,IAAKkgpB,EACH,OAAO,KAGT,IAAM8yF,EAA8B,WAAO,IAAD,EACxCH,GAAuB,GAEvB,IAAMpxoB,EAASn0C,EAAKtlD,IAAI,MAClBkpR,EAAU,UAAG8uc,EAAiBxwtB,OAAOiiR,YAA3B,aAAG,EAAgD7hR,QAAO,SAACutI,EAAK43kB,EAAUh3lB,GAIxF,OAHIg3lB,EAAS/stB,IAAI,YACfm1I,EAAI9sI,KAAK0tH,GAEJof,IACN,IAgBHvuG,EAAS,IAAIynD,KAAwB,CACnCoL,SACAyvL,aACA43J,YAjBkB,WAClBl6Y,EAAS,IAAIovD,IAAe,CAAEyD,aAiB9BynV,SAfe,WACft6Y,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,yCACX65E,SAAU,YAaZ8/U,YAVkB,WAClBgpT,GAAc,GACdE,GAAuB,QAgC3B,OACE,qCACE,cAAC3knB,EAAA,EAAD,CAASC,MAAOwtT,YAAQ,CAAC,CAAC3rZ,EAAE,oCAAqC8xH,GAAO,CAAC9xH,EAAE,kCAAmC8itB,GAAS,CAAC9itB,EAAE,oCAAqC8itB,KAA/J,SACE,qBAAKvznB,MAAO,CAAE4rP,UAAW,UAAzB,SACE,cAACviP,EAAA,EAAD,CACE5oH,KAAK,QAELkqG,MAAM,UACNm+K,UAAW,cAAC,IAAD,CAAO9oK,MAAO,CAAChgC,MAAO,QAASi2C,OAAQ,QAAStrB,MAAO4ooB,EAAS3zpB,EAAM+pC,QAAQE,QAAQ7iF,KAAO44C,EAAM+pC,QAAQC,KAAK,QAC3HL,QA7BgB,WACpBiqnB,EACFJ,GAAc,IAEdA,GAAc,GACdK,MAyBM7xnB,UAAW2xnB,EACXz1pB,UAAWF,EAAQo1pB,gBACnBp1pB,QAAS,CAAEkrM,UAAWlrM,EAAQkrM,WAC9B9oK,MAAO,CAAEyZ,cAAe,QAT1B,SAWGy5mB,EAAW,GAAKzitB,EAAE,iCAKzB,cAACiqS,EAAA,EAAD,CACErxL,QA5Bc,WACbgqmB,IACHD,GAAc,GACdE,GAAuB,KA0BrB,mBAAiB,qBACjBjkoB,KAAM8joB,EACNv1pB,QAAS,CACP64C,MAAO74C,EAAQ3hE,MALnB,SAQE,cAAC0+S,EAAA,EAAD,UAEI04a,EAEM,eAAC91pB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASb,WAAW,SAAtE,UACE,cAAC2oP,EAAA,EAAD,IACA,cAACpoN,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAEgB,UAAW,GAAI+W,aAAc,IAAM3Z,QAAQ,YAApF,SACI3tF,EAAE,uCAKR,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASb,WAAW,SAAtE,UACE,cAAC,IAAD,CAAakuC,SAAS,QAAQ7L,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,QACpE,cAACk3E,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAEgB,UAAW,GAAI+W,aAAc,GAAIpG,UAAW,UAAYvT,QAAQ,YAAzG,SACI3tF,EAAE,8CAEN,eAAC8sD,EAAA,EAAD,WACE,cAAC8rC,EAAA,EAAD,CACEE,QAAS,kBAAM6pnB,GAAc,IAC7BzooB,MAAM,UACNyT,QAAQ,WACRtgC,UAAWF,EAAQi0C,OAJrB,SAMIphG,EAAE,wBAEN,cAAC44F,EAAA,EAAD,CACEE,QAAS,SAACz8G,GACRA,EAAE87G,kBAlExB6qnB,KAqEoB9ooB,MAAM,UACNyT,QAAQ,YACRy9M,WAAW,EACX/9O,UAAWF,EAAQi0C,OARrB,SAUIphG,EAAE,mC,wGCpJtByjG,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C8zpB,mBAAoB,CAClB/xnB,SAAU,SACVsX,OAAQ,EACRyM,OAAQ,EACRhc,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,UACTV,QAAS,OACTM,eAAgB,SAChB61C,OAAQ,IAEV09mB,UAAW,CACT19mB,OAAQ,cACRqC,UAAW,GACXnM,aAAc,QACdlsC,OAAQ,UACRO,QAAS,UACT+rC,UAAW3sC,EAAM6mD,QAAQ,GACzB9kB,SAAU,WAEV9hC,UAAW,aACXG,MAAO,QAGT4zpB,uBAAwB,CACtBjynB,SAAU,WACV1iG,KAAM,MACN8hH,UAAW,mBACX5F,WAAY,UAEd63mB,gBAAiB,CACfxypB,QAAS,UACTP,OAAQ,UACRw5C,cAAe,OACfv5C,SAAU,GAEZ2zpB,oBAAqB,CACnBjnnB,WAAY,EACZ1G,YAAa,GAEf4tnB,uBAAwB,CACtBlnnB,WAAY,EACZ1G,YAAa,GAEf6tnB,iBAAkB,CAChB99mB,OAAQ,MACRvM,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvCi5C,OAAQ,WAEV+zpB,wBAAyB,CACvBrynB,SAAU,WACVziG,MAAO,EACPi8G,WAAY,cA2aD84mB,IAvaG,SAAC,GAYZ,IAAD,gFAXJrvuB,GAWI,EAXJA,KACA6tR,GAUI,EAVJA,QACA/sF,GASI,EATJA,MACAlrD,GAQI,EARJA,aACA05lB,GAOI,EAPJA,aAQQzjtB,GAAM+xB,YAAe,gBAArB/xB,EACFmvD,GAAQwjD,cACRxlD,GAAUs2C,IACV7kF,GAAW2F,wBACX2rmB,GAAgBvqmB,sBAAYgX,gBAC5BqE,IAAerb,sBAAYkP,eAC3B6urB,GAAiC/9rB,sBAAYmV,gBAC7CS,GAAyB5V,sBAAY+P,gBACrCksO,GAA0Bj8O,sBAAYg7K,YAA4B,KAClE02M,GAAuB1xX,sBAAYoX,gBAEzC,GAA6D49U,cAArD83B,GAAR,GAAQA,kBAAmBkxU,GAA3B,GAA2BA,8BAEvB/T,GAAmC,KACjCC,GAAwBn3rB,IAAMyG,OAAuB,MACrDyksB,GAA2BlrsB,IAAMyG,OAAuB,MACxD4wrB,GAAgCr3rB,IAAMyG,OAAuB,MAC7D0ksB,GAAiCnrsB,IAAMyG,OAAuB,MAC9D2ksB,GAA4BprsB,IAAMyG,OAAuB,MACzD4ksB,GAA6BrrsB,IAAMyG,OAAuB,MAEhE,GAA8DzG,IAAMia,UAAS,GAA7E,qBAAO88qB,GAAP,MAAgCC,GAAhC,MACA,GAAoDh3rB,IAAMia,UAAS,GAAnE,qBAAOqxrB,GAAP,MAA2BC,GAA3B,MACA,GAAgFvrsB,IAAMia,UAAS,GAA/F,qBAAOuxrB,GAAP,MAAyCC,GAAzC,MAEMC,GAA8BV,IAAyBnorB,GACvDk2C,GAAM,OAAGs4C,SAAH,IAAGA,QAAH,EAAGA,GAAc/xI,IAAI,MAC3B85I,GAAI,OAAG/H,SAAH,IAAGA,QAAH,EAAGA,GAAc/xI,IAAI,QACzBg4tB,GAAmBpuc,GAAwB5pR,IAAIy5F,IAC/C4jU,GAAmB38X,IAAM+B,SAAQ,kBAAM6nP,YAAoBV,MAA0B,CAACA,KACtFquc,GAAoB,OAAG56T,SAAH,IAAGA,QAAH,EAAGA,GAAkBv/Z,OAEzCq6tB,GAA8BF,GAAuB,EACrDoU,GAAkB3rsB,IAAM+B,SAAQ,kBAAMmvY,YAAsB,CAAEvU,oBAAkBpgO,SAAOlrD,oBAAiB,CAACsrR,GAAkBpgO,GAAOlrD,KAOlI+mlB,GAAiB,WAAO,IAAD,UACrBC,EAAK,UAAG6S,GAAyB7nsB,eAA5B,aAAG,EAAkCmyP,wBAC1C8ic,EAAS,UAAGjB,GAA8Bh0rB,eAAjC,aAAG,EAAuCmyP,wBACnDo2c,EAAS,UAAGT,GAA+B9nsB,eAAlC,aAAG,EAAwCmyP,wBAGpDq2c,GAAkB,OAALxT,QAAK,IAALA,OAAA,EAAAA,EAAOtitB,OAFF,IAEL,OAAiCuitB,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAWxitB,QAAiB,OAATwitB,QAAS,IAATA,OAAA,EAAAA,EAAWvitB,OAF1D,IAE+C,OAAqC61tB,QAArC,IAAqCA,OAArC,EAAqCA,EAAW91tB,MAGrHkhtB,KADE6U,GAMJ,IAAMC,EAAK,UAAGV,GAA0B/nsB,eAA7B,aAAG,EAAmCmyP,wBAC3Cu2c,EAAK,UAAGV,GAA2BhosB,eAA9B,aAAG,EAAoCmyP,wBAE5Cw2c,GAAwB,OAAL3T,QAAK,IAALA,OAAA,EAAAA,EAAOtitB,OAbR,IAaC,OAAiC+1tB,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAOh2tB,QAAa,OAALg2tB,QAAK,IAALA,OAAA,EAAAA,EAAO/1tB,OAbxD,IAaiD,OAAiCg2tB,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAOj2tB,MACjHs+B,YAAW,kBAAMm3rB,GAAsBM,GAAcG,KAAmB,MAG1EhssB,IAAM0B,WAAU,WAKd,OAJIy1rB,GAAsB9zrB,WA1B1B6zrB,GAAmC,IAAIx8lB,IAAe09lB,KACrB59lB,QAAQ28lB,GAAsB9zrB,SA2B7D+0rB,MAEK,WACDlB,IACFA,GAAiCxhhB,aAEnCwhhB,GAAmC,QAEpC,CAACO,KAEJ,IAAMwU,GAAqB,WAAO,IAAD,EACzB5vU,EAAe,UAAGuwC,YAAkBtjL,GAAS/sF,WAA9B,aAAG,EAAmCr1L,QAAO,SAACutI,EAAK6nR,EAAOC,GAE7E,OAD0BzC,YAAgCwC,EAAOvC,IACxC7yZ,QAAO,SAACiiR,EAAMvtF,GACrC,OAAIA,EAAQt8L,IAAI,YAAYhI,KAAO,EAC1B6xR,EAAKt9Q,OAAO0wZ,EAAS/oZ,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,UAE7D6pR,IACN10I,KACF9vH,iBAAO,MACS,OAAf03Y,QAAe,IAAfA,OAAA,EAAAA,EAAiB/ka,MAAO,GAC1B4uC,GAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,SAAS,MAI/E20mB,GAAc,CAClBlrmB,OAAmC,UAApB,OAAPsoJ,SAAO,IAAPA,QAAA,EAAAA,GAAShqR,IAAI,WAErBurQ,QAASvjP,GAAE,2CACXmxF,UAAWg/mB,GACXr3mB,QAAS,WACPipK,YAAyB,CACvBH,2BACAhjP,YACAojP,WACA/sF,SACAqsF,WAAYntR,OAKZ0wuB,GAAS,CACbvnrB,KAAM,CACJwnrB,YAAa,WAAO,IAAD,EACXC,EAAoBvyU,YAAgCzoR,GAAc0oR,IAClEsC,EAAkBhrR,IAAgBg7lB,EAAkBnluB,QAAO,SAACutI,EAAKmnD,GACrE,OAAIA,EAAQt8L,IAAI,YAAYhI,KAAO,EAC1Bm9I,EAAI5oI,OAAOktF,GAAQvlF,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,UAE3Dm1I,IACN9vH,iBAAO,MACN,UAAA03Y,EAAgB/8Z,IAAIy5F,WAApB,eAA6BzhG,MAAO,GACtC4uC,GAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,SAAS,MAGrFkmB,KAAM,CACJ6zE,OAAQhpK,GACR04E,OAAwC,UAApB,OAAZqQ,SAAY,IAAZA,QAAA,EAAAA,GAAc/xI,IAAI,WAC1Bm5G,SAAU2gC,KAASq+kB,GAEnB5sd,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,4CAA4C,KAChH84F,QAAS,WACH93D,GACFpiB,GAAS,IAAI0J,IAA6B,CACxCpT,GAAIymW,IACJ/8R,MAAM,KAGRise,YAAkB,CAAEvthB,KAAMysF,GAAc63I,2BAAyBhjP,gBAIvE69E,OAAQ,CACNtL,SAAU2gC,KAASq+kB,GACnB5sd,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,8CAA8C,KAClH84F,QAAS,WACPl6E,GAAS,IAAIunD,IAAyB,CAAEhyF,KAAM,UAAWm1oB,aAAcz/N,YAAoCxU,SAG/GslL,SAAU,CACRp3U,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,sCAAuCqktB,MAC3GlznB,SAAU2gC,KAASuylB,GACnBvrnB,QAAS,WACP2qnB,GAAa,aAEf91nB,QAAS3sD,GAAc,WAAa,cAGxCghO,QAAS,CACP8id,YAAaH,GACbxulB,KAAMyulB,GACNnonB,OAAQ,CACNtL,UAAWg/mB,GACX5sd,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,8CAA8C,KAClH84F,QAAS,WACPl6E,GAAS,IAAIunD,IAAyB,CAAEhyF,KAAM,UAAWm1oB,aAAcz/N,YAAoCxU,SAG/GslL,SAAU,CACRp3U,QAAU8ge,GAA2D,GAAzCrktB,GAAE,qCAC9BmxF,UAAWkznB,GACXvrnB,QAAS,WACHksnB,YAAyChjd,GAASJ,GAAyB3sF,IAC7E0uiB,IAA8B,GAE9BF,GAAa,aAGjB91nB,QAAS3sD,GAAc,WAAa,cAGxC0uE,OAAQ,CACNo1mB,YAAaH,GACbxulB,KAAMyulB,GACNnonB,OAAQ,CACNid,QAAS29R,GACTlmT,UAAWg/mB,KAAuB94T,GAClC9zJ,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,8CAA8C,KAClH84F,QAAS,WACPl6E,GAAS,IAAIunD,IAAyB,CAAEhyF,KAAM,SAAUm1oB,aAAcz/N,YAAoCxU,UAIhHxkO,SAAU,CACRi0iB,YAAaH,GACbxulB,KAAM,CACJ6zE,OAAQhpK,GAERuiN,QAASvjP,GAAE,2CACXmxF,UAAWg/mB,GACXr3mB,QAAS,WACH93D,GACFpiB,GAAS,IAAI0J,IAA6B,CACxCpT,GAAIymW,IACJ/8R,MAAM,KAGRmjL,YAAyB,CACvBH,2BACAhjP,YACAojP,WACA/sF,SACAqsF,WAAY,sBAKpB7kK,OAAQ,CACNid,QAAS0qmB,GACTjznB,UAAWg/mB,GACX5sd,QAASooK,YAAQ,CAAC,CAAC3rZ,GAAE,oCAAqC8xH,IAAO,CAAC9xH,GAAE,8CAA8C,KAClH84F,QAAS,WACPl6E,GAAS,IAAIunD,IAAyB,CAAEhyF,KAAM,WAAYm1oB,aAAcz/N,YAAoCxU,WAMpH,OAAK46T,GAKH,qCACE,qBAAKvguB,IAAKmguB,GAAuBxipB,UAAWF,GAAQ81pB,mBAApD,SACE,eAACn2pB,EAAA,EAAD,CACEW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,GAAQ+1pB,UAC9F3znB,MAAO,CACLh/B,SAAUyzpB,GAAqB,OAAS,iCACxCvunB,YAAauunB,GAAqB,GAAK,GAJ3C,UAOE,eAACl3pB,EAAA,EAAD,CAAMp9E,IAAKk0uB,GAA0B/1pB,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAO,cAAeF,QAAS,OAAQnC,WAAY,SAAUyvD,YAAa,GAApI,UACE,cAAClvB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAAEihB,WAAY,QAArE,SACGxwG,GAAE,uDAAwD,CAAE3W,MAAO4mtB,OAEtE,cAACr3mB,EAAA,EAAD,CACEjL,QAAQ,OACRtgC,UAAWF,GAAQo1pB,gBAEnBzpnB,QAAO,UAAE+rnB,GAAO1wuB,WAAT,aAAE,EAAc2wuB,YACvB5qoB,MAAM,UACN/sB,QAAS,CAAEkrM,UAAWlrM,GAAQi2pB,qBANhC,SAQGpjtB,GAAE,sDAIP,cAAC8sD,EAAA,EAAD,CAAMp9E,IAAKo0uB,GAA2Bj2pB,MAAM,EAAMR,UAAWF,GAAQg2pB,uBAArE,SACE,eAACr2pB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,WACG,UAAAo2pB,GAAO1wuB,WAAP,mBAAcgiJ,YAAd,eAAoBzc,QAAS,KAC5B,cAACxb,EAAA,EAAD,CAASC,OAAa,OAAN0mnB,SAAM,IAANA,IAAA,UAAAA,GAAS1wuB,WAAT,mBAAgBgiJ,YAAhB,eAAsBotH,UAAW,GAAjD,SACE,+BACE,cAAC3qJ,EAAA,EAAD,CACEvrC,UAAWF,GAAQo1pB,gBACnBpxnB,SAAQ,OAAE0znB,SAAF,IAAEA,IAAF,UAAEA,GAAS1wuB,WAAX,aAAE,EAAgBgiJ,KAAKhlC,SAC/B2H,QAAO,OAAE+rnB,SAAF,IAAEA,IAAF,UAAEA,GAAS1wuB,WAAX,aAAE,EAAgBgiJ,KAAKr9B,QAC9B5e,MAAM,UACNm+K,WACE,UAAAwsd,GAAO1wuB,WAAP,mBAAcgiJ,YAAd,eAAoB6zE,QAChB,cAAC2vK,EAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAChC,cAAC,IAAD,CAAckhB,SAAS,YAE7BjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBAVhC,SAYI5T,GAAwE,GAA9CzvsB,GAAE,iDAMrC,UAAA6ktB,GAAO1wuB,WAAP,mBAAcsoH,cAAd,eAAsBid,QAAS,KAC9B,cAACxb,EAAA,EAAD,CAASC,OAAO,UAAA0mnB,GAAO1wuB,WAAP,mBAAcsoH,cAAd,eAAsB8mJ,UAAW,GAAjD,SACE,+BACE,cAAC3qJ,EAAA,EAAD,CACEvrC,UAAWF,GAAQo1pB,gBACnBpxnB,SAAQ,OAAE0znB,SAAF,IAAEA,IAAF,UAAEA,GAAS1wuB,WAAX,iBAAE,EAAgBsoH,cAAlB,aAAE,EAAwBtL,SAElC2H,QAAS,kBAAMqrnB,IAAoC,IACnDjqoB,MAAM,UACNm+K,UAAW,cAAC,IAAD,CAAYj9J,SAAS,YAChCjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBAPhC,SASI5T,GAA0E,GAAhDzvsB,GAAE,kDAMtC,cAAC,EAAD,CACEyitB,SAAUhT,GACVv/E,cAAeA,GACf5ylB,KAAMysF,GACNimlB,iBAAkBA,UAMxB,cAACljpB,EAAA,EAAD,CAAMe,MAAM,EAAMn+E,IAAKqguB,GAA+B1ipB,UAAWF,GAAQg2pB,uBAAwB5znB,MAAO,CAAE0tP,WAAY,SAAU30O,cAAe,QAA/I,SACE,eAACx7C,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxF,WACG,UAAAo2pB,GAAO1wuB,WAAP,oBAAcgiJ,YAAd,iBAAoBzc,QAAS,KAC5B,cAAC9gB,EAAA,EAAD,CACEvrC,UAAWF,GAAQo1pB,gBACnBlqd,WACE,WAAAwsd,GAAO1wuB,WAAP,sBAAcgiJ,YAAd,iBAAoB6zE,QAChB,cAAC2vK,EAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAChC,cAAC,IAAD,CAAckhB,SAAS,YAE7BjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBAPhC,SASGrjtB,GAAE,6CAIN,WAAA6ktB,GAAO1wuB,WAAP,sBAAcsoH,cAAd,iBAAsBid,QAAS,KAC9B,cAAC9gB,EAAA,EAAD,CACEvrC,UAAWF,GAAQo1pB,gBACnBlqd,UAAW,cAAC,IAAD,CAAYj9J,SAAS,YAChCjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBAHhC,SAKGrjtB,GAAE,8CAIP,cAAC,EAAD,CACEkwnB,cAAeA,GACf5ylB,KAAMysF,GACNimlB,iBAAkBA,WAKvB,WAAA6U,GAAO1wuB,WAAP,iBAAcwmlB,UACb,cAAC7tgB,EAAA,EAAD,CAAMp9E,IAAKq0uB,GAA4Bl2pB,MAAM,EAAMR,UAAWF,GAAQo2pB,wBAAtE,SACE,cAACrlnB,EAAA,EAAD,CAASC,OAAa,OAAN0mnB,SAAM,IAANA,IAAA,WAAAA,GAAS1wuB,WAAT,sBAAgBwmlB,gBAAhB,iBAA0Bp3U,UAAW,GAArD,SACE,+BACE,cAAC3qJ,EAAA,EAAD,CACEjL,QAAO,WAAEk3nB,GAAO1wuB,WAAT,mBAAE,GAAcwmlB,gBAAhB,cAAE,GAAwBhte,QACjCtgC,UAAWF,GAAQo1pB,gBACnBhznB,MAAO,CAAEotB,YAAa,EAAG7U,aAAc,EAAG4C,WAAY,UACtDxwB,MAAM,UACNiX,SAAQ,WAAE0znB,GAAO1wuB,WAAT,mBAAE,GAAcwmlB,gBAAhB,cAAE,GAAwBxpe,SAClCknK,UAAW,cAAC,IAAD,CAAiBj9J,SAAS,YACrCjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBAC9BvqnB,QAAO,WAAE+rnB,GAAO1wuB,WAAT,mBAAE,GAAcwmlB,gBAAhB,cAAE,GAAwB7he,QARnC,SAWG94F,GAAE,0DAKT,KAGJ,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMn+E,IAAKm0uB,GAAgCx2pB,UAAWF,GAAQo2pB,wBAAyBh0nB,MAAO,CAAE0tP,WAAY,SAAU30O,cAAe,QAAjJ,SACE,cAAC1P,EAAA,EAAD,CACEjL,QAAO,WAAEk3nB,GAAO1wuB,WAAT,mBAAE,GAAcwmlB,gBAAhB,cAAE,GAAwBhte,QACjCtgC,UAAWF,GAAQo1pB,gBACnBhznB,MAAO,CAAEotB,YAAa,EAAG7U,aAAc,EAAG4C,WAAY,UACtD2tJ,UAAW,cAAC,IAAD,CAAiBj9J,SAAS,YACrCjuC,QAAS,CAAEkrM,UAAWlrM,GAAQk2pB,wBALhC,SAOGrjtB,GAAE,2DAMX,eAACiqS,EAAA,EAAD,CAAQrrN,KAAMsloB,GAAd,UACE,cAACh6a,EAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,WAAYn7C,MAAO,KAAvD,SACE,eAACzC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,UACE,cAAC,IAAD,CAAawhC,MAAO,CAAErV,MAAO/qB,GAAM+pC,QAAQq7I,QAAQh+N,KAAM6kF,SAAU,GAAIkM,aAAc,MACrF,cAAC7Z,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,GAAE,mDAIT,eAACqqS,EAAA,EAAD,WACE,cAACzxM,EAAA,EAAD,CACE1e,MAAM,UAEN4e,QAAS,kBAAMqrnB,IAAoC,IAHrD,SAIGnktB,GAAE,wBAEL,cAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WAAO,IAAD,IACbqrnB,IAAoC,GACpCvlsB,GAAS,IAAI4J,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEm6N,cAAet4O,GAAE,mDAC9F4e,GAAS,IAAI0J,IAA6B,CACxCpT,GAAIijO,mBACJv5J,MAAM,KAER,UAAAimoB,GAAO1wuB,WAAP,mBAAcsoH,cAAd,SAAsB3D,WAT1B,SAYG94F,GAAE,8BAnLJ,O,0LC1TJ,SAASiltB,IACd,OAAO,YAAqC,yBAAyB,iBAAM,MAOtE,SAASC,EAAwBrssB,GAEtCossB,IAA2B5kuB,KAAKw4B,GAM3B,SAASsssB,EACdttlB,EACAzc,EACAw9M,GAE2B,IAD3BxoV,EAC2B,uDADX,EAEhB,OAAO,IAAI,KAA0B,SAAC+iD,EAASi3B,GAC7C,IAAM6tE,EAAYJ,EAAWznJ,GAC7B,GAAc,OAAVgrI,GAAuC,oBAAd6c,EAC3B9kG,EAAQioF,OACH,CACL,IAAMvzH,EAASowI,EAAU,eAAK7c,GAASw9M,GAEvC,KAAe3gM,EAAU/iH,IAAiB,OAAXrtB,GAAmB,IAAOq3F,IAAP,2BAA+B+4C,EAAU/iH,GAAzC,oBAE9C,YAAWrtB,GACRA,EACF2iE,MAAK,SAAA46pB,GAAA,OAASD,EAAsBttlB,EAAYutlB,EAAOxsZ,EAAMxoV,EAAQ,GAAGo6E,KAAKr3B,MAC7Eq3B,KAAK,KAAMJ,GAET+6pB,EAAsBttlB,EAAYhwI,EAAQ+wU,EAAMxoV,EAAQ,GAC1Do6E,KAAKr3B,GACLq3B,KAAK,KAAMJ,S,6BC5CpBj7E,EAAOC,QAAUC,EAAQ,O,0HCqBZg2uB,IAT8C,SAAC,GAAD,IAAG5iuB,EAAH,EAAGA,KAAM+9C,EAAT,EAASA,WAAY05C,EAArB,EAAqBA,MAAOhtB,EAA5B,EAA4BA,WAA5B,OAC3D,eAAC,IAAD,CAAMO,WAAW,EAAME,UAAU,SAAST,WAAYA,EAAtD,UACmB,kBAATzqE,EACJ,cAAC,IAAD,CAAYkrG,QAAQ,QAAQzT,MAAOA,GAAS,cAA5C,SAA4Dz3F,IAC5DA,EACH+9C,EAAa,cAAC,IAAD,CAAYmtD,QAAQ,QAAQzT,MAAOA,EAAnC,SAA2C15C,IAA2B,SAQjF,IAAM8krB,EAAuB,SAACC,GAAD,OAA4B,SAAC51uB,EAAc0ilB,GAAf,OAC9D1ilB,EAAMsN,KAAI,SAACw3G,EAAQrkH,GAAT,OACR,cAAC,IAAD,CAAyB+tH,MAAO1J,EAAOj0D,YAAc,GAAI2sB,QAASo4pB,EAAlE,SACE,cAAC,IAAD,aAAMxwsB,MAAO0/E,EAAOw2P,UAAY,IAAQonO,EAAY,CAAEjilB,aAD1CqkH,EAAOv/E,U,yKCtBbswsB,E,iBAAAA,K,0CAAAA,E,8CAAAA,E,0DAAAA,E,oDAAAA,E,wCAAAA,E,wDAAAA,E,kDAAAA,E,0EAAAA,E,kDAAAA,E,kEAAAA,E,4DAAAA,E,8CAAAA,E,kDAAAA,E,4CAAAA,E,4DAAAA,E,uDAAAA,M,KAiCL,IAAMz7B,EAGX,WACS5uqB,GAGN,yBAHMA,UAGP,KANchnC,KAAOqxuB,EAAmBC,qBAU/B37B,EAAb,sCACkB31sB,KAAOqxuB,EAAmBE,uBAgC/B77B,EAGX,WACS1uqB,GACN,yBADMA,UACP,KAJchnC,KAAOqxuB,EAAmBG,oBAmB/BtxB,EAAb,sCACkBlgtB,KAAOqxuB,EAAmBI,0B,6BCxG5C,IAAIhrhB,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mIACD,cAEJ3K,EAAQywH,QAAUq4I,G,2MCNN2te,E,iBAAAA,K,sBAAAA,E,0CAAAA,E,gCAAAA,E,0BAAAA,E,8CAAAA,E,kDAAAA,E,sEAAAA,E,0CAAAA,E,8DAAAA,E,wDAAAA,E,4EAAAA,E,wBAAAA,E,0BAAAA,E,8CAAAA,E,uBAAAA,M,KAkBL,IAAMC,EAGX,WACS3qsB,GAIN,yBAJMA,UAIP,KAPchnC,KAAO0xuB,EAAgBE,WA+B5BC,EAGX,WACS7qsB,GAGN,yBAHMA,UAGP,KANchnC,KAAO0xuB,EAAgBI,aAmB5BC,EAGX,WACS/qsB,GAIN,yBAJMA,UAIP,KAPchnC,KAAO0xuB,EAAgBM,yBAiE5BC,EAGX,WACSjrsB,GAQN,yBARMA,UAQP,KAXchnC,KAAO0xuB,EAAgBQ,aA6C5BC,EAGX,WACSnrsB,GASN,yBATMA,UASP,KAZchnC,KAAO0xuB,EAAgBU,Y,+DC5I1BC,MAnDf,SAAiB/ptB,GAYf,IANA,IAEIroB,EAFAklB,EAAI,EAGJriB,EAAI,EACJ+K,EAAMya,EAAI3mB,OAEPkM,GAAO,IAAK/K,EAAG+K,GAAO,EAE3B5N,EAEe,YAAV,OAHLA,EAAwB,IAApBqoB,EAAIrgB,WAAWnF,IAAmC,IAAtBwlB,EAAIrgB,aAAanF,KAAc,GAA2B,IAAtBwlB,EAAIrgB,aAAanF,KAAc,IAA4B,IAAtBwlB,EAAIrgB,aAAanF,KAAc,MAG9F,OAAZ7C,IAAM,KAAgB,IAIpDklB,EAEe,YAAV,OALLllB,GAEAA,IAAM,MAGoC,OAAZA,IAAM,KAAgB,IAErC,YAAV,MAAJklB,IAAyC,OAAZA,IAAM,KAAgB,IAItD,OAAQtX,GACN,KAAK,EACHsX,IAA8B,IAAxBmD,EAAIrgB,WAAWnF,EAAI,KAAc,GAEzC,KAAK,EACHqiB,IAA8B,IAAxBmD,EAAIrgB,WAAWnF,EAAI,KAAc,EAEzC,KAAK,EAEHqiB,EAEe,YAAV,OAHLA,GAAyB,IAApBmD,EAAIrgB,WAAWnF,MAGsB,OAAZqiB,IAAM,KAAgB,IASxD,SAHAA,EAEe,YAAV,OAHLA,GAAKA,IAAM,MAG+B,OAAZA,IAAM,KAAgB,KACvCA,IAAM,MAAQ,GAAGpkB,SAAS,K,kBC7CrCuxuB,EAAiB,aACjBC,EAAiB,8BAEjBC,EAAmB,SAA0BzwjB,GAC/C,OAAkC,KAA3BA,EAAS95K,WAAW,IAGzBwquB,EAAqB,SAA4Bj3uB,GACnD,OAAgB,MAATA,GAAkC,mBAAVA,GAG7Bk3uB,EAAmBtgsB,aAAQ,SAAU04gB,GACvC,OAAO0nL,EAAiB1nL,GAAaA,EAAYA,EAAUpye,QAAQ45pB,EAAgB,OAAOp5rB,iBAGxFy5rB,EAAoB,SAA2BvuuB,EAAK5I,GACtD,OAAQ4I,GACN,IAAK,YACL,IAAK,gBAED,GAAqB,kBAAV5I,EACT,OAAOA,EAAMk9E,QAAQ65pB,GAAgB,SAAUlksB,EAAOiqM,EAAIC,GAMxD,OALApzH,EAAS,CACP72G,KAAMgqO,EACN58J,OAAQ68J,EACR14O,KAAMslH,GAEDmzH,KAMjB,OAAsB,IAAlBs6f,IAASxuuB,IAAeouuB,EAAiBpuuB,IAAyB,kBAAV5I,GAAgC,IAAVA,EAI3EA,EAHEA,EAAQ,MAoCnB,SAASq3uB,EAAoB9lsB,EAAakkS,EAAYzzR,EAAes1rB,GACnE,GAAqB,MAAjBt1rB,EACF,MAAO,GAGT,QAAuC5hD,IAAnC4hD,EAAcu1rB,iBAKhB,OAAOv1rB,EAGT,cAAeA,GACb,IAAK,UAED,MAAO,GAGX,IAAK,SAED,GAA2B,IAAvBA,EAAcmhH,KAMhB,OALAx5C,EAAS,CACP72G,KAAMkvC,EAAclvC,KACpBotE,OAAQl+B,EAAck+B,OACtB77E,KAAMslH,GAED3nE,EAAclvC,KAGvB,QAA6B1S,IAAzB4hD,EAAck+B,OAAsB,CACtC,IAAI77E,EAAO29C,EAAc39C,KAEzB,QAAajE,IAATiE,EAGF,UAAgBjE,IAATiE,GACLslH,EAAS,CACP72G,KAAMzO,EAAKyO,KACXotE,OAAQ77E,EAAK67E,OACb77E,KAAMslH,GAERtlH,EAAOA,EAAKA,KAUhB,OANa29C,EAAck+B,OAAS,IAStC,OAiDR,SAAgC3uC,EAAakkS,EAAYrqU,GACvD,IAAIP,EAAS,GAEb,GAAI9E,MAAMC,QAAQoF,GAChB,IAAK,IAAI9D,EAAI,EAAGA,EAAI8D,EAAIjF,OAAQmB,IAC9BuD,GAAUwsuB,EAAoB9lsB,EAAakkS,EAAYrqU,EAAI9D,IAAI,QAGjE,IAAK,IAAIioB,KAAQnkB,EAAK,CACpB,IAAIpL,EAAQoL,EAAImkB,GAEhB,GAAqB,kBAAVvvB,EACS,MAAdy1U,QAA4Cr1U,IAAtBq1U,EAAWz1U,GACnC6K,GAAU0kB,EAAO,IAAMkmT,EAAWz1U,GAAS,IAClCi3uB,EAAmBj3uB,KAC5B6K,GAAUqsuB,EAAiB3ntB,GAAQ,IAAM4ntB,EAAkB5ntB,EAAMvvB,GAAS,UAO5E,IAAI+F,MAAMC,QAAQhG,IAA8B,kBAAbA,EAAM,IAAkC,MAAdy1U,QAA+Cr1U,IAAzBq1U,EAAWz1U,EAAM,IAM7F,CACL,IAAIw3uB,EAAeH,EAAoB9lsB,EAAakkS,EAAYz1U,GAAO,GAEvE,OAAQuvB,GACN,IAAK,YACL,IAAK,gBAED1kB,GAAUqsuB,EAAiB3ntB,GAAQ,IAAMiotB,EAAe,IACxD,MAGJ,QAMI3suB,GAAU0kB,EAAO,IAAMiotB,EAAe,UAtB5C,IAAK,IAAI1+pB,EAAK,EAAGA,EAAK94E,EAAMmG,OAAQ2yE,IAC9Bm+pB,EAAmBj3uB,EAAM84E,MAC3BjuE,GAAUqsuB,EAAiB3ntB,GAAQ,IAAM4ntB,EAAkB5ntB,EAAMvvB,EAAM84E,IAAO,KA4B1F,OAAOjuE,EAtGM4suB,CAAuBlmsB,EAAakkS,EAAYzzR,GAG3D,IAAK,WAED,QAAoB5hD,IAAhBmxC,EAA2B,CAC7B,IAAImmsB,EAAiB/tnB,EACjBzxG,EAAS8pC,EAAczQ,GAE3B,OADAo4E,EAAS+tnB,EACFL,EAAoB9lsB,EAAakkS,EAAYv9T,EAAQo/tB,IA0BpE,GAAkB,MAAd7ha,EACF,OAAOzzR,EAGT,IAAI21rB,EAASlia,EAAWzzR,GAOxB,YAAkB5hD,IAAXu3uB,GAAyBL,EAAwCt1rB,EAAT21rB,EA2DjE,IASIhunB,EATAiunB,EAAe,6BAUnB,IAAIjha,EAAkB,SAAyBrnT,EAAMmmT,EAAYlkS,GAC/D,GAAoB,IAAhBjiB,EAAKnpB,QAAmC,kBAAZmpB,EAAK,IAA+B,OAAZA,EAAK,SAAkClvB,IAAnBkvB,EAAK,GAAG4wD,OAClF,OAAO5wD,EAAK,GAGd,IAAIuotB,GAAa,EACb33pB,EAAS,GACbypC,OAASvpH,EACT,IAAIokV,EAAUl1T,EAAK,GAEJ,MAAXk1T,QAAmCpkV,IAAhBokV,EAAQhnD,KAC7Bq6c,GAAa,EACb33pB,GAAUm3pB,EAAoB9lsB,EAAakkS,EAAY+O,GAAS,IAMhEtkQ,GAAUskQ,EAAQ,GAIpB,IAAK,IAAIl9U,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/B44E,GAAUm3pB,EAAoB9lsB,EAAakkS,EAAYnmT,EAAKhoB,GAA6C,KAAzC44E,EAAOzzE,WAAWyzE,EAAO/5E,OAAS,IAE9F0xuB,IAKF33pB,GAAUskQ,EAAQl9U,IActBswuB,EAAatnlB,UAAY,EAIzB,IAHA,IACIz9G,EADAilsB,EAAiB,GAG0B,QAAvCjlsB,EAAQ+ksB,EAAavnlB,KAAKnwE,KAChC43pB,GAAkB,IAClBjlsB,EAAM,GAkBR,MAAO,CACL//B,KAhBS9H,EAAWk1E,GAAU43pB,EAiB9B53pB,OAAQA,EACR77E,KAAMslH,K,6BC7TV,4DAgEIopK,EAAUhqP,IAAM8E,YAAW,SAAiBW,EAAOzuC,GACrD,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cp4E,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,MAAQA,EAClDo6pB,EAAkBvpsB,EAAMi9E,SACxBA,OAA+B,IAApBssnB,EAA6B,UAAYA,EACpDjkI,EAAYtlkB,EAAMslkB,UAClBkkI,EAAcxpsB,EAAMwpsB,YACpBC,EAAiBzpsB,EAAMosO,QACvBA,OAA6B,IAAnBq9d,EAA4B,YAAcA,EACpDhztB,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,QAAS,YAAa,WAAY,YAAa,cAAe,YAE/I,OAAOzF,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAqB,YAAV6sB,GAAuB/sB,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAuB,YAAbkhB,GAA0BjuC,EAAQ,WAAW5tE,OAAOk5H,YAAWrd,MAC3KkgP,UAAW,QACX/wF,QAASA,EACTrwK,MAAOupgB,EACP,cAAekkI,EAAc,KAAO,OACpChyrB,KAAMgyrB,EAAc,MAAQ,eAC5Bj4uB,IAAKA,GACJklB,GAAQ2lB,EAAUotsB,EAAcjvsB,IAAMwB,cAAc,QAAS,KAAMytsB,GAAe,SAoEvFjld,EAAQ1nE,QAAU,UACH9rI,iBAtJK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ4yV,WAAY,OACZ7uR,MAAO,MACPi2C,OAAQ,MACRn2C,QAAS,eACTytD,KAAM,eACNmgL,WAAY,EACZ7hM,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnC5wJ,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,OAAQ,CAC3Cq2H,SAAUx5C,EAAMu5C,YAAYC,SAASoQ,WAKzC6tB,aAAc,CACZ1sD,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAI/BswH,eAAgB,CACd3sD,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,MAIjCsxsB,YAAa,CACX3toB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,QAI9BlwH,WAAY,CACV9sD,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,MAI7BuxsB,cAAe,CACb5toB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,UAI9B42nB,gBAAiB,CACf3snB,SAAU,WAIZ4snB,cAAe,CACb5snB,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrC4ud,cAAe,CACb7snB,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,QAiGP,CAChC52Q,KAAM,cADOysE,CAEZwzM,I,8BC/JH,uBAASl0O,EAAQzzC,GAWf,OATEyzC,EADoB,oBAAX76C,QAAoD,kBAApBA,OAAOC,SACtC,SAAUmH,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAItHyzC,EAAQzzC,GASjB,SAAS4xG,EAAkB1rF,EAAQkd,GACjC,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CACrC,IAAI21G,EAAazuE,EAAMlnC,GACvB21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EACjD6wG,EAAW5wG,cAAe,EACtB,UAAW4wG,IAAYA,EAAW3wG,UAAW,GACjD5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAUlD,SAAS3jC,EAAgBluE,EAAKxC,EAAK5I,GAYjC,OAXI4I,KAAOwC,EACT1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAC9B5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZlB,EAAIxC,GAAO5I,EAGNoL,EAGT,SAASkxC,EAAchrB,GACrB,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CACzC,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAaU,UAAUV,GAAK,GAC/C0pB,EAAUtuB,OAAO0D,KAAKmrB,GAEkB,oBAAjC7uB,OAAOkgB,wBAChBoO,EAAUA,EAAQphB,OAAOlN,OAAOkgB,sBAAsB2O,GAAQ1hB,QAAO,SAAUshB,GAC7E,OAAOzuB,OAAO0uB,yBAAyBG,EAAQJ,GAAK/kB,gBAIxD4kB,EAAQhgB,SAAQ,SAAUpI,GACxB0wE,EAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAIxC,OAAO0oB,EAGT,SAASmmB,EAAetlC,EAAK7K,GAC3B,OAeF,SAAyB6K,GACvB,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAhBxBkke,CAAgBlke,IAuBzB,SAA+BA,EAAK7K,GAClC,IAAIive,EAAO,GACPC,GAAK,EACL9iQ,GAAK,EACLgsB,OAAKt/P,EAET,IACE,IAAK,IAAiCk2e,EAA7Bx9Z,EAAK3mE,EAAInO,OAAOC,cAAmBuye,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAChE2xe,EAAK7le,KAAK4le,EAAGt2e,QAETsH,GAAKive,EAAKpwe,SAAWmB,GAH8Ckve,GAAK,IAK9E,MAAO9gc,GACPg+L,GAAK,EACLgsB,EAAKhqN,EARP,QAUE,IACO8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SADrC,QAGE,GAAI46J,EAAI,MAAMgsB,GAIlB,OAAO62O,EA9CwBE,CAAsBtke,EAAK7K,IAqD5D,WACE,MAAM,IAAIX,UAAU,wDAtD4C+ve,GAGlE,SAASzyY,EAAmB9xF,GAC1B,OAGF,SAA4BA,GAC1B,GAAIpM,MAAMC,QAAQmM,GAAM,CACtB,IAAK,IAAI7K,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMoM,EAAIhM,QAASmB,EAAI6K,EAAIhM,OAAQmB,IAAKggP,EAAKhgP,GAAK6K,EAAI7K,GAEjF,OAAOggP,GAPFi5B,CAAmBpuQ,IAe5B,SAA0BhS,GACxB,GAAI6D,OAAOC,YAAYvB,OAAOvC,IAAkD,uBAAzCuC,OAAOD,UAAU8C,SAASD,KAAKnF,GAAgC,OAAO4F,MAAMuN,KAAKnT,GAhBtFqgR,CAAiBruQ,IA6CrD,WACE,MAAM,IAAIxL,UAAU,mDA9CuC85Q,GA3E7D,4IAgIA,IAAI1tH,EAAO,aAEPwllB,EAAU,GACVC,EAAY,GACZC,EAAqB,KACrBC,EAAe,CACjB5qQ,KAAM/6U,EACN42T,QAAS52T,GAGX,IACwB,qBAAX//H,SAAwBultB,EAAUvltB,QACrB,qBAAbsX,WAA0BkusB,EAAYlusB,UACjB,qBAArB2zK,mBAAkCw6hB,EAAqBx6hB,kBACvC,qBAAhB+4Y,cAA6B0hJ,EAAe1hJ,aACvD,MAAOtqlB,KAET,IACIisuB,GADOJ,EAAQjjiB,WAAa,IACNG,UACtBA,OAA+B,IAAnBkjiB,EAA4B,GAAKA,EAE7Cpja,EAASgja,EACTK,EAAWJ,EACXK,EAAoBJ,EACpBK,EAAcJ,EAEdK,GADexja,EAAOjrS,WACXsusB,EAAS/suB,mBAAqB+suB,EAASt3tB,MAA6C,oBAA9Bs3tB,EAAStroB,kBAAqE,oBAA3BsroB,EAASrusB,eAC7HyusB,GAASvjiB,EAAU3wL,QAAQ,UAAY2wL,EAAU3wL,QAAQ,YAKzDm0tB,EAA4B,iBAC5BC,EAAgB,gBAChBC,EAAyB,yBAIzBC,EAA8B,oBAE9BC,EAAsC,CAAC,OAAQ,OAAQ,QAAS,UAChEr3d,EAAa,WACf,IACE,OAAOxvP,EACP,MAAO9lB,IACP,OAAO,GAJM,GAOb4suB,EAAkB,CACpB,IAAO,QACP,IAAO,UACP,IAAO,QACP,IAAO,SACP,GAAM,SAEJC,EAAkB,CACpB,MAAS,MACT,QAAW,MACX,MAAS,MACT,OAAU,OAERC,EAAwB,iBACxBC,EAAsB,uDACtBC,EAAwB,CAC1B,IAAO,MACP,IAAO,MACP,OAAU,MACV,IAAO,OAELC,EAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACvCC,EAAcD,EAAS/puB,OAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KACnEiquB,EAAkC,CAAC,QAAS,cAAe,YAAa,oBAAqB,gBAC7FC,EAAmB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,SAAU,YAAa,aAAc,OAAQ,QAAS,YAAa,aAAc,aAAc,kBAAmB,gBAAiB,YAAa,QAAS,WAAY,WAAY,UAAW,SAAU,cAAe,kBAAkBlquB,OAAO+puB,EAASrsuB,KAAI,SAAU5C,GAC/T,MAAO,GAAGkF,OAAOlF,EAAG,SAClBkF,OAAOgquB,EAAYtsuB,KAAI,SAAU5C,GACnC,MAAO,KAAKkF,OAAOlF,OAGjBsxL,EAAUu5I,EAAOwka,mBAAqB,GAoB1C,GAAInB,GAA8C,oBAA3BA,EAASt4b,cAA8B,CAChD,CAAC,CAAC,qBAAsB,gBAAiB,CAAC,yBAA0B,oBAAqB,CAAC,wBAAyB,kBAAmB,CAAC,oBAAqB,cAAe,CAAC,iBAAkB,YAAa,CAAC,8BAA+B,wBAAyB,CAAC,yBAA0B,oBAAqB,CAAC,uBAAwB,kBAAmB,CAAC,4BAA6B,sBAAuB,CAAC,2BAA4B,sBAAuB,CAAC,0BAA2B,qBAC3etvS,SAAQ,SAAU25B,GACtB,IAAIsC,EAAQwK,EAAe9M,EAAM,GAC7B4gX,EAAOt+W,EAAM,GACbrkC,EAAMqkC,EAAM,GAEZ1yB,EAjBR,SAAgBA,GAId,MAAY,KAARA,GACQ,UAARA,IACQ,SAARA,GACGA,GAUKqN,CAzBd,SAAuB2jY,GACrB,IAAIn/M,EAAUwsiB,EAASt4b,cAAc,UAAYirG,EAAO,KAExD,GAAIn/M,EACF,OAAOA,EAAQ61G,aAAaspG,GAqBXyuV,CAAczuV,SAEnBnrZ,IAARma,GAA6B,OAARA,IACvByhL,EAAQpzL,GAAO2R,MAKrB,IAcIg7N,EAAUj5L,EAAc,GAdb,CACb29rB,aAnF0B,KAoF1BC,iBAAkBjB,EAClBkB,gBAAgB,EAChBC,YAAY,EACZC,UAAU,EACVC,sBAAsB,EACtBC,kBAAkB,EAClBC,eAAgB,QAChBC,oBAAoB,EACpBC,oBAAoB,EACpBC,kBAAkB,GAGsB3+iB,GAErCu5C,EAAQ4kgB,iBAAgB5kgB,EAAQglgB,kBAAmB,GAExD,IAAIvwrB,EAAS1N,EAAc,GAAIi5L,GAE/BggG,EAAOwka,kBAAoB/vrB,EAE3B,IAAIsvG,EAAIi8K,GAAU,GACbj8K,EAAC,qBAAwBA,EAAC,mBAAyB,IACnDA,EAAC,mBAAuBp5E,SAAQo5E,EAAC,mBAAuBp5E,OAAS,IACjEo5E,EAAC,mBAAuBs4E,QAAOt4E,EAAC,mBAAuBs4E,MAAQ,IAC/Dt4E,EAAC,mBAAuBshlB,QAAOthlB,EAAC,mBAAuBshlB,MAAQ,IACpE,IAAI7xlB,EAAYuQ,EAAC,mBAEbwiC,EAAY,GAUZ1qC,GAAS,EAOb,SAASyplB,EAAU1zuB,GACZ4xuB,IACL3nlB,EAASj0G,WAAWh2C,EAAI,GAAK20L,EAAUprL,KAAKvJ,IAP1C4xuB,KACF3nlB,GAAUwnlB,EAAS/suB,gBAAgBivuB,SAAW,aAAe,iBAAiBz7rB,KAAKu5rB,EAAS5/hB,cAC/E4/hB,EAAStroB,iBAAiB,oBAZ1B,SAAShkE,IACtBsvsB,EAASrroB,oBAAoB,mBAAoBjkE,GACjD8nH,EAAS,EACT0qC,EAAUxuL,KAAI,SAAUnG,GACtB,OAAOA,WAgBX,IAUI4zuB,EAVAC,EAAU,UACVC,EAAU,UACVC,EAAY,YACZh7P,EAAW,WAEXi7P,EAAO,aAEPtvhB,EAA2B,qBAAXr4C,GAAoD,qBAAnBA,EAAOhhJ,SAA0D,oBAAxBghJ,EAAOhhJ,QAAQ06E,KACzGkuoB,EAAwC,qBAAjB54O,EAA+Brld,WAAaqld,EACnE64O,GAAa,GAGjB,SAASC,KAEP,IAAK,IAAIh0uB,EAAI,EAAGA,EAAI+zuB,GAAWl1uB,OAAQmB,IACrC+zuB,GAAW/zuB,GAAG,GAAG+zuB,GAAW/zuB,GAAG,IAIjC+zuB,GAAa,GACbN,GAAa,EAGf,SAASQ,GAAUrysB,EAAUla,GAC3BqstB,GAAW3quB,KAAK,CAACw4B,EAAUla,IAEtB+rtB,IACHA,GAAa,EACbK,EAAcE,GAAY,IAoB9B,SAASE,GAAe//b,GACtB,IAAI/7R,EAAQ+7R,EAAW/7R,MACnB+7tB,EAAU/7tB,EAAMkjc,OAChB5id,EAAQ0f,EAAM0xC,MACdloB,EAAWuyQ,EAAWggc,GACtBn1lB,EAAUm1J,EAAW5gO,KAEzB,GAAwB,oBAAb3xC,EAAyB,CAClCuysB,EAAUP,EAEV,IACEl7uB,EAAQkpC,EAASlpC,GACjB,MAAO0M,IACP+tE,GAAO6rE,EAAS55I,KAIfgvuB,GAAep1lB,EAAStmJ,KACvBy7uB,IAAYP,GACd13rB,GAAQ8iG,EAAStmJ,GAGfy7uB,IAAYv7P,GACdzla,GAAO6rE,EAAStmJ,IAKtB,SAAS07uB,GAAep1lB,EAAStmJ,GAC/B,IAAIyoJ,EAEJ,IACE,GAAInC,IAAYtmJ,EACd,MAAM,IAAI2G,UAAU,wDAGtB,GAAI3G,IAA2B,oBAAVA,GAA2C,WAAnB6+C,EAAQ7+C,IAAsB,CAEzE,IAAI66E,EAAO76E,EAAM66E,KAEjB,GAAoB,oBAATA,EAiBT,OAhBAA,EAAKv1E,KAAKtF,GAAO,SAAUua,GACpBkuI,IACHA,GAAW,EAEPzoJ,IAAUua,EACZohuB,GAAQr1lB,EAAS/rI,GAEjBipC,GAAQ8iG,EAAS/rI,OAGpB,SAAUs1G,GACN44B,IACHA,GAAW,EACXhuE,GAAO6rE,EAASz2B,QAGb,GAGX,MAAOnjH,IAKP,OAJK+7I,GACHhuE,GAAO6rE,EAAS55I,KAGX,EAGT,OAAO,EAGT,SAAS82C,GAAQ8iG,EAAStmJ,GACpBsmJ,IAAYtmJ,GAAU07uB,GAAep1lB,EAAStmJ,IAChD27uB,GAAQr1lB,EAAStmJ,GAIrB,SAAS27uB,GAAQr1lB,EAAStmJ,GACpBsmJ,EAAQs8T,SAAWo4R,IACrB10lB,EAAQs8T,OAASq4R,EACjB30lB,EAAQl1F,MAAQpxD,EAChBu7uB,GAAUK,GAAoBt1lB,IAIlC,SAAS7rE,GAAO6rE,EAASz2B,GACnBy2B,EAAQs8T,SAAWo4R,IACrB10lB,EAAQs8T,OAASq4R,EACjB30lB,EAAQl1F,MAAQy+D,EAChB0rnB,GAAUM,GAAkBv1lB,IAIhC,SAASi1J,GAAQj1J,GACfA,EAAQw1lB,MAAQx1lB,EAAQw1lB,MAAM9quB,QAAQwquB,IAGxC,SAASI,GAAmBt1lB,GAC1BA,EAAQs8T,OAASs4R,EACjB3/b,GAAQj1J,GAGV,SAASu1lB,GAAiBv1lB,GACxBA,EAAQs8T,OAASs9B,EACjB3kM,GAAQj1J,IAEHA,EAAQy1lB,UAAYlwhB,GACvBr4C,EAAOhhJ,QAAQ06E,KAAK,qBAAsBo5C,EAAQl1F,MAAOk1F,GAI7D,SAAS01lB,GAAuB11lB,GAC9BktB,EAAOhhJ,QAAQ06E,KAAK,mBAAoBo5C,GAO1C,SAAS/rE,GAAE87G,GACT,GAAwB,oBAAbA,EACT,MAAM,IAAI1vL,UAAU,oBAAsB0vL,EAAW,sBAGvD,GAAI/xL,gBAAgBi2E,MAAM,EACxB,MAAM,IAAI5zE,UAAU,yHAGtBrC,KAAKw3uB,MAAQ,GAhJf,SAAwBzljB,EAAU/vC,GAKhC,SAAS2jX,EAAcp6Y,GACrBp1C,GAAO6rE,EAASz2B,GAGlB,IACEwmE,GATF,SAAwBr2L,GACtBwjD,GAAQ8iG,EAAStmJ,KAQQiqgB,GACzB,MAAOv9f,IACPu9f,EAAcv9f,KAqIhBuvuB,CAAe5ljB,EAAU/xL,MAG3Bi2E,GAAE93E,UAAY,CACZG,YAAa23E,GACbqoY,OAAQo4R,EACRc,MAAO,KACP1qrB,WAAOhxD,EACP27uB,UAAU,EACVlhqB,KAAM,SAAcqhqB,EAAeC,GACjC,IAAI1gc,EAAa,CACf/7R,MAAOpb,KACPu2E,KAAM,IAAIv2E,KAAK1B,YAAYu4uB,GAC3BzgqB,UAAWwhqB,EACXvhqB,SAAUwhqB,GAmBZ,OAhBKA,IAAeD,GAAmB53uB,KAAKy3uB,WAC1Cz3uB,KAAKy3uB,UAAW,EAEZz3uB,KAAKs+c,SAAWs9B,GAAYr0R,GAC9B0vhB,GAAUS,GAAwB13uB,OAIlCA,KAAKs+c,SAAWs4R,GAAa52uB,KAAKs+c,SAAWs9B,EAE/Cq7P,GAAUC,GAAgB//b,GAG1Bn3S,KAAKw3uB,MAAMpruB,KAAK+qS,GAGXA,EAAW5gO,MAEpBowH,MAAO,SAAgBkxiB,GACrB,OAAO73uB,KAAKu2E,KAAK,KAAMshqB,KAI3B5hqB,GAAEwwH,IAAM,SAAUqxiB,GAChB,IAAKr2uB,MAAMC,QAAQo2uB,GACjB,MAAM,IAAIz1uB,UAAU,4CAGtB,OAAO,IAAI4zE,IAAE,SAAU/2B,EAASi3B,GAC9B,IAAIgwL,EAAU,GACVt3E,EAAY,EAEhB,SAASkD,EAAS51L,GAEhB,OADA0yL,IACO,SAAUnzL,GACfyqQ,EAAQhqQ,GAAST,IAETmzL,GACN3vI,EAAQinN,IAKd,IAAK,IAAWnkH,EAAPh/I,EAAI,EAAYA,EAAI80uB,EAASj2uB,OAAQmB,KAC5Cg/I,EAAU81lB,EAAS90uB,KAEoB,oBAAjBg/I,EAAQzrE,KAC5ByrE,EAAQzrE,KAAKw7G,EAAS/uL,GAAImzE,GAE1BgwL,EAAQnjQ,GAAKg/I,EAIZ6sC,GACH3vI,EAAQinN,OAKdlwL,GAAEqyB,KAAO,SAAUwvoB,GACjB,IAAKr2uB,MAAMC,QAAQo2uB,GACjB,MAAM,IAAIz1uB,UAAU,6CAGtB,OAAO,IAAI4zE,IAAE,SAAU/2B,EAASi3B,GAC9B,IAAK,IAAW6rE,EAAPh/I,EAAI,EAAYA,EAAI80uB,EAASj2uB,OAAQmB,KAC5Cg/I,EAAU81lB,EAAS90uB,KAEoB,oBAAjBg/I,EAAQzrE,KAC5ByrE,EAAQzrE,KAAKr3B,EAASi3B,GAEtBj3B,EAAQ8iG,OAMhB/rE,GAAE/2B,QAAU,SAAUxjD,GACpB,OAAIA,GAA4B,WAAnB6+C,EAAQ7+C,IAAuBA,EAAM4C,cAAgB23E,GACzDv6E,EAGF,IAAIu6E,IAAE,SAAU/2B,GACrBA,EAAQxjD,OAIZu6E,GAAEE,OAAS,SAAUo1C,GACnB,OAAO,IAAIt1C,IAAE,SAAU/2B,EAASi3B,GAC9BA,EAAOo1C,OAIX,IAAIwsnB,GAA4B,oBAAZ94rB,QAAyBA,QAAUg3B,GAEnDnwE,GAvagB,GAwahBkyuB,GAAuB,CACzBj8uB,KAAM,GACN8b,EAAG,EACH2zB,EAAG,EACH+ld,OAAQ,EACR0mP,OAAO,EACPC,OAAO,GAMT,SAASC,GAAU/la,GACjB,GAAKA,GAAQqia,EAAb,CAIA,IAAIn5nB,EAAQg5nB,EAASrusB,cAAc,SACnCq1E,EAAM6gM,aAAa,OAAQ,YAC3B7gM,EAAM6ylB,UAAY/7X,EAIlB,IAHA,IAAIgma,EAAe9D,EAASt3tB,KAAKkxZ,WAC7BmqU,EAAc,KAETr1uB,EAAIo1uB,EAAav2uB,OAAS,EAAGmB,GAAK,EAAGA,IAAK,CACjD,IAAIk3C,EAAQk+rB,EAAap1uB,GACrBo9S,GAAWlmQ,EAAMkmQ,SAAW,IAAI/1K,cAEhC,CAAC,QAAS,QAAQ7pH,QAAQ4/R,IAAY,IACxCi4b,EAAcn+rB,GAKlB,OADAo6rB,EAASt3tB,KAAK8xZ,aAAaxzT,EAAO+8nB,GAC3Bjma,GAGT,SAASkma,KAIP,IAHA,IAAIv8uB,EAAO,GACPklC,EAAK,GAEFllC,KAAS,GACdklC,GANS,iEAMoB,GAAhBlkC,KAAKy1E,SAAgB,GAGpC,OAAOvxC,EAET,SAASr+B,GAAQkE,GAGf,IAFA,IAAIjD,EAAQ,GAEHb,GAAK8D,GAAO,IAAIjF,SAAW,EAAGmB,KACrCa,EAAMb,GAAK8D,EAAI9D,GAGjB,OAAOa,EAET,SAAS00uB,GAAWnxuB,GAClB,OAAIA,EAAKq3Q,UACA77Q,GAAQwE,EAAKq3Q,YAEZr3Q,EAAKu2S,aAAa,UAAY,IAAI5+P,MAAM,KAAKxzC,QAAO,SAAUvI,GACpE,OAAOA,KAIb,SAASw1uB,GAAY7C,EAAchja,GACjC,IAAItuL,EAAQsuL,EAAI5zR,MAAM,KAClBpB,EAAS0mG,EAAM,GACf7yB,EAAW6yB,EAAMv0I,MAAM,GAAG2R,KAAK,KAEnC,OAAIk8B,IAAWg4rB,GAA6B,KAAbnknB,GA5DjC,SAAoBhjH,GAClB,OAAQgnuB,EAAiBh1tB,QAAQhS,GA2DkBiquB,CAAWjnnB,GAGrD,KAFAA,EAKX,SAASknnB,GAAWlwtB,GAClB,MAAO,GAAGld,OAAOkd,GAAKowD,QAAQ,KAAM,SAASA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAOlI,SAAS+/pB,GAAW/8pB,GAClB,OAAOx9E,OAAO0D,KAAK85E,GAAU,IAAIjwE,QAAO,SAAUutI,EAAK8xa,GACrD,OAAO9xa,EAAM,GAAG5tI,OAAO0/iB,EAAW,MAAM1/iB,OAAOswE,EAAOove,GAAY,OACjE,IAEL,SAAS4tL,GAAsBv8mB,GAC7B,OAAOA,EAAUtgI,OAASi8uB,GAAqBj8uB,MAAQsgI,EAAUxkH,IAAMmguB,GAAqBnguB,GAAKwkH,EAAU7wF,IAAMwssB,GAAqBxssB,GAAK6wF,EAAUk1X,SAAWymP,GAAqBzmP,QAAUl1X,EAAU47mB,OAAS57mB,EAAU67mB,MAE9N,SAASW,GAAgBxysB,GACvB,IAAIg2F,EAAYh2F,EAAKg2F,UACjB+kiB,EAAiB/6nB,EAAK+6nB,eACtB03E,EAAYzysB,EAAKyysB,UACjBh8jB,EAAQ,CACVzgD,UAAW,aAAa/wH,OAAO81pB,EAAiB,EAAG,UAEjD23E,EAAiB,aAAaztuB,OAAqB,GAAd+wH,EAAUxkH,EAAQ,MAAMvM,OAAqB,GAAd+wH,EAAU7wF,EAAQ,MACtFwtsB,EAAa,SAAS1tuB,OAAO+wH,EAAUtgI,KAAO,IAAMsgI,EAAU47mB,OAAS,EAAI,GAAI,MAAM3suB,OAAO+wH,EAAUtgI,KAAO,IAAMsgI,EAAU67mB,OAAS,EAAI,GAAI,MAC9Ie,EAAc,UAAU3tuB,OAAO+wH,EAAUk1X,OAAQ,SAOrD,MAAO,CACLz0U,MAAOA,EACP/gI,MARU,CACVsgF,UAAW,GAAG/wH,OAAOytuB,EAAgB,KAAKztuB,OAAO0tuB,EAAY,KAAK1tuB,OAAO2tuB,IAQzElvnB,KANS,CACTsS,UAAW,aAAa/wH,OAAOwtuB,EAAY,GAAK,EAAG,YA+BvD,IAAII,GAAY,CACdrhuB,EAAG,EACH2zB,EAAG,EACH8vC,MAAO,OACPi2C,OAAQ,QAmKV,SAAS4nnB,GAAsBxmsB,GAC7B,IAAIymsB,EAAgBzmsB,EAAOytW,MACvB99W,EAAO82sB,EAAc92sB,KACrBg3O,EAAO8/d,EAAc9/d,KACrB37N,EAAShL,EAAOgL,OAChB6zE,EAAW7+E,EAAO6+E,SAClB6K,EAAY1pF,EAAO0pF,UACnB8/C,EAASxpI,EAAOwpI,OAChBjyD,EAAQv3E,EAAOu3E,MACfkxO,EAAQzoT,EAAOyoT,MACfi+Y,EAAoB1msB,EAAO2msB,UAC3BA,OAAkC,IAAtBD,GAAuCA,EAEnDhzsB,EAAOizO,EAAKv2P,MAAQu2P,EAAOh3O,EAC3Bg5C,EAAQj1C,EAAKi1C,MACbi2C,EAASlrF,EAAKkrF,OAEdgonB,EAAa,QAAQjuuB,OAAOvO,KAAKqjB,KAAKk7D,EAAQi2C,EAAS,KACvDionB,EAAY,CAAC9zrB,EAAOkwrB,iBAAkBpknB,EAAW,GAAGlmH,OAAOo6C,EAAOiwrB,aAAc,KAAKrquB,OAAOkmH,GAAY,GAAI+nnB,GAAYhuuB,QAAO,SAAU1F,GAC3I,OAAqC,IAA9Bu1V,EAAMliR,QAAQ14D,QAAQ3a,MAC5ByF,OAAO8vV,EAAMliR,SAASz3D,KAAK,KAC1Bk6B,EAAU,CACZrV,SAAU,GACVkrL,WAAYx5K,EAAc,GAAIojT,EAAM5pI,WAAY,CAC9C,cAAe7zK,EACf,YAAa6zE,EACb,MAASgonB,EACT,KAAQp+Y,EAAM5pI,WAAW9vK,MAAQ,MACjC,MAAS,6BACT,QAAW,OAAOp2C,OAAOgwE,EAAO,KAAKhwE,OAAOimH,MAI5C+nnB,IACF39rB,EAAQ61K,WAAWojhB,GAAiB,IAGlC1qnB,GAAOvuE,EAAQrV,SAASl6B,KAAK,CAC/B8uK,IAAK,QACLs2C,WAAY,CACVvwL,GAAI0a,EAAQ61K,WAAW,oBAAsB,SAASlmN,OAAOgtuB,OAE/DhysB,SAAU,CAAC4jF,KAGb,IAAIl/F,EAAOgtB,EAAc,GAAI2D,EAAS,CACpCgC,OAAQA,EACR6zE,SAAUA,EACVlvF,KAAMA,EACNg3O,KAAMA,EACNj9I,UAAWA,EACX8/C,OAAQA,EACRvgG,OAAQw/Q,EAAMx/Q,SAGZjzC,EAAQ2wO,EAAKv2P,OAASuf,EAAKvf,MAxNjC,SAA0BsjB,GACxB,IAAIC,EAAWD,EAAKC,SAChBkrL,EAAanrL,EAAKmrL,WAClBlvL,EAAO+D,EAAK/D,KACZg3O,EAAOjzO,EAAKizO,KACZj9I,EAAYh2F,EAAKg2F,UACjBo9mB,EAAYn3sB,EAAKg5C,MACjBo+pB,EAAWp3sB,EAAKsvF,KAChB+nnB,EAAYrge,EAAKh+L,MACjBs+pB,EAAWtge,EAAK1nJ,KAChBwkb,EAAQyiM,GAAgB,CAC1Bx8mB,UAAWA,EACX+kiB,eAAgBu4E,EAChBb,UAAWW,IAETI,EAAW,CACb3+jB,IAAK,OACLs2C,WAAYx5K,EAAc,GAAIkhsB,GAAW,CACvCrwmB,KAAM,WAGNixmB,EAAiB,CACnB5+jB,IAAK,IACLs2C,WAAYx5K,EAAc,GAAIo+f,EAAMr6f,OACpCzV,SAAU,CAAC,CACT40I,IAAK,OACLs2C,WAAYx5K,EAAc,GAAI0hsB,EAASlohB,WAAY4kV,EAAMrsb,KAAM,CAC7D8e,KAAM,aAIRkxmB,EAAiB,CACnB7+jB,IAAK,IACLs2C,WAAYx5K,EAAc,GAAIo+f,EAAMt5X,OACpCx2I,SAAU,CAACwzsB,IAETj5K,EAAS,QAAQv1jB,OAAOgtuB,MACxB/zK,EAAS,QAAQj5jB,OAAOgtuB,MAUxBz1K,EAAO,CACT3nZ,IAAK,OACL50I,SAAU,CAAC,CACT40I,IAAK,WACLs2C,WAAY,CACVvwL,GAAIsjiB,GAENj+hB,SAAU,CAACszsB,IAhBD,CACZ1+jB,IAAK,OACLs2C,WAAYx5K,EAAc,GAAIkhsB,GAAW,CACvCj4sB,GAAI4/hB,EACJ/mT,UAAW,iBACXD,iBAAkB,mBAEpBvzO,SAAU,CAACuzsB,EAAUE,MAoBvB,OARAzzsB,EAASl6B,KAAKy2jB,EAAM,CAClB3nZ,IAAK,OACLs2C,WAAYx5K,EAAc,CACxB6wF,KAAM,eACN,YAAa,QAAQv9H,OAAOi5jB,EAAQ,KACpCjrT,KAAM,QAAQhuQ,OAAOu1jB,EAAQ,MAC5Bq4K,MAEE,CACL5ysB,SAAUA,EACVkrL,WAAYA,GAqJyBwohB,CAAgBhvtB,GAjJzD,SAA2Bqb,GACzB,IAAIC,EAAWD,EAAKC,SAChBkrL,EAAanrL,EAAKmrL,WAClBlvL,EAAO+D,EAAK/D,KACZ+5F,EAAYh2F,EAAKg2F,UAEjB49mB,EAActB,GADLtysB,EAAKu1C,QAOlB,GAJIq+pB,EAAYp4uB,OAAS,IACvB2vN,EAAU,MAAYyohB,GAGpBrB,GAAsBv8mB,GAAY,CACpC,IAAI+5a,EAAQyiM,GAAgB,CAC1Bx8mB,UAAWA,EACX+kiB,eAAgB9+nB,EAAKg5C,MACrBw9pB,UAAWx2sB,EAAKg5C,QAElBh1C,EAASl6B,KAAK,CACZ8uK,IAAK,IACLs2C,WAAYx5K,EAAc,GAAIo+f,EAAMt5X,OACpCx2I,SAAU,CAAC,CACT40I,IAAK,IACLs2C,WAAYx5K,EAAc,GAAIo+f,EAAMr6f,OACpCzV,SAAU,CAAC,CACT40I,IAAK54I,EAAKsvF,KAAKspD,IACf50I,SAAUhE,EAAKsvF,KAAKtrF,SACpBkrL,WAAYx5K,EAAc,GAAI1V,EAAKsvF,KAAK4/F,WAAY4kV,EAAMrsb,iBAKhEzjF,EAASl6B,KAAKk2B,EAAKsvF,MAGrB,MAAO,CACLtrF,SAAUA,EACVkrL,WAAYA,GA4GiD0ohB,CAAiBlvtB,GAC5Esb,EAAWqC,EAAMrC,SACjBkrL,EAAa7oL,EAAM6oL,WAKvB,OAHAxmM,EAAKsb,SAAWA,EAChBtb,EAAKwmM,WAAaA,EAEdr1C,EApFN,SAAmB91I,GACjB,IAAIsX,EAAStX,EAAKsX,OACd6zE,EAAWnrF,EAAKmrF,SAChBlrF,EAAWD,EAAKC,SAChBkrL,EAAanrL,EAAKmrL,WAClBr1C,EAAS91I,EAAK81I,OAElB,MAAO,CAAC,CACNjB,IAAK,MACLs2C,WAAY,CACVl2G,MAAO,kBAETh1E,SAAU,CAAC,CACT40I,IAAK,SACLs2C,WAAYx5K,EAAc,GAAIw5K,EAAY,CACxCvwL,IATc,IAAXk7I,EAAkB,GAAG7wK,OAAOqyC,EAAQ,KAAKryC,OAAOo6C,EAAOiwrB,aAAc,KAAKrquB,OAAOkmH,GAAY2qD,IAWlG71I,SAAUA,MAoEL6zsB,CAASnvtB,GAhHpB,SAAiBqb,GACf,IAAIC,EAAWD,EAAKC,SAChBhE,EAAO+D,EAAK/D,KACZg3O,EAAOjzO,EAAKizO,KACZ9nD,EAAanrL,EAAKmrL,WAClB51I,EAASv1C,EAAKu1C,OACdygD,EAAYh2F,EAAKg2F,UAErB,GAAIu8mB,GAAsBv8mB,IAAc/5F,EAAKvf,QAAUu2P,EAAKv2P,MAAO,CACjE,IAEIjV,EAAS,CACX+J,EAHUyqB,EAAKg5C,MACJh5C,EAAKivF,OAEI,EACpB/lF,EAAG,IAELgmL,EAAU,MAAYmnhB,GAAW3gsB,EAAc,GAAI4jC,EAAQ,CACzD,mBAAoB,GAAGtwE,OAAOwC,EAAO+J,EAAIwkH,EAAUxkH,EAAI,GAAI,OAAOvM,OAAOwC,EAAO09B,EAAI6wF,EAAU7wF,EAAI,GAAI,SAI1G,MAAO,CAAC,CACN0vI,IAAK,MACLs2C,WAAYA,EACZlrL,SAAUA,IA2FH8zsB,CAAOpvtB,GAGlB,SAASqvtB,GAAuB1nsB,GAC9B,IAAIgJ,EAAUhJ,EAAOgJ,QACjB2/B,EAAQ3oC,EAAO2oC,MACfi2C,EAAS5+E,EAAO4+E,OAChB8K,EAAY1pF,EAAO0pF,UACnBnS,EAAQv3E,EAAOu3E,MACfkxO,EAAQzoT,EAAOyoT,MACfk/Y,EAAqB3nsB,EAAO2msB,UAC5BA,OAAmC,IAAvBgB,GAAwCA,EAEpD9ohB,EAAax5K,EAAc,GAAIojT,EAAM5pI,WAAYtnG,EAAQ,CAC3D,MAASA,GACP,GAAI,CACN,MAASkxO,EAAMliR,QAAQz3D,KAAK,OAG1B63tB,IACF9nhB,EAAWojhB,GAAiB,IAG9B,IAAIh5pB,EAAS5jC,EAAc,GAAIojT,EAAMx/Q,QAEjCg9pB,GAAsBv8mB,KACxBzgD,EAAM,UAzRV,SAAyBjzC,GACvB,IAAI0zF,EAAY1zF,EAAM0zF,UAClBk+mB,EAAc5xsB,EAAM2yC,MACpBA,OAAwB,IAAhBi/pB,EA5hBM,GA4hBmCA,EACjDC,EAAe7xsB,EAAM4oF,OACrBA,OAA0B,IAAjBipnB,EA9hBK,GA8hBqCA,EACnDC,EAAsB9xsB,EAAM+xsB,cAC5BA,OAAwC,IAAxBD,GAAyCA,EACzDxkuB,EAAM,GAYV,OATEA,GADEykuB,GAAiBhG,EACZ,aAAappuB,OAAO+wH,EAAUxkH,EAAI/R,GAAIw1E,EAAQ,EAAG,QAAQhwE,OAAO+wH,EAAU7wF,EAAI1lC,GAAIyrH,EAAS,EAAG,QAC5FmpnB,EACF,yBAAyBpvuB,OAAO+wH,EAAUxkH,EAAI/R,GAAG,qBAAqBwF,OAAO+wH,EAAU7wF,EAAI1lC,GAAG,SAE9F,aAAawF,OAAO+wH,EAAUxkH,EAAI/R,GAAG,QAAQwF,OAAO+wH,EAAU7wF,EAAI1lC,GAAG,QAG9EmQ,GAAO,SAAS3K,OAAO+wH,EAAUtgI,KAAO+J,IAAKu2H,EAAU47mB,OAAS,EAAI,GAAI,MAAM3suB,OAAO+wH,EAAUtgI,KAAO+J,IAAKu2H,EAAU67mB,OAAS,EAAI,GAAI,MACtIjiuB,EAAO,UAAU3K,OAAO+wH,EAAUk1X,OAAQ,SAsQlBopP,CAAgB,CACpCt+mB,UAAWA,EACXq+mB,eAAe,EACfp/pB,MAAOA,EACPi2C,OAAQA,IAEV31C,EAAO,qBAAuBA,EAAM,WAGtC,IAAIq+pB,EAActB,GAAW/8pB,GAEzBq+pB,EAAYp4uB,OAAS,IACvB2vN,EAAU,MAAYyohB,GAGxB,IAAIhkuB,EAAM,GAiBV,OAhBAA,EAAI7J,KAAK,CACP8uK,IAAK,OACLs2C,WAAYA,EACZlrL,SAAU,CAACqV,KAGTuuE,GACFj0G,EAAI7J,KAAK,CACP8uK,IAAK,OACLs2C,WAAY,CACVophB,MAAO,WAETt0sB,SAAU,CAAC4jF,KAIRj0G,EAET,SAAS4kuB,GAA0BlosB,GACjC,IAAIgJ,EAAUhJ,EAAOgJ,QACjBuuE,EAAQv3E,EAAOu3E,MACfkxO,EAAQzoT,EAAOyoT,MAEf5pI,EAAax5K,EAAc,GAAIojT,EAAM5pI,WAAYtnG,EAAQ,CAC3D,MAASA,GACP,GAAI,CACN,MAASkxO,EAAMliR,QAAQz3D,KAAK,OAG1Bw4tB,EAActB,GAAWv9Y,EAAMx/Q,QAE/Bq+pB,EAAYp4uB,OAAS,IACvB2vN,EAAU,MAAYyohB,GAGxB,IAAIhkuB,EAAM,GAiBV,OAhBAA,EAAI7J,KAAK,CACP8uK,IAAK,OACLs2C,WAAYA,EACZlrL,SAAU,CAACqV,KAGTuuE,GACFj0G,EAAI7J,KAAK,CACP8uK,IAAK,OACLs2C,WAAY,CACVophB,MAAO,WAETt0sB,SAAU,CAAC4jF,KAIRj0G,EAGT,IAAIypS,GAAS,aAETjqO,GAAI/vB,EAAO0wrB,oBAAsB5B,GAAeA,EAAYhrQ,MAAQgrQ,EAAYnvR,QAAUmvR,EAAc,CAC1GhrQ,KAAM9pL,GACN2lK,QAAS3lK,IAEPo7b,GAAW,aASXt+uB,GAAM,SAAagS,GACrBinE,GAAE+zZ,KAAK,GAAGl+d,OAAOwvuB,GAAU,KAAKxvuB,OAAOkD,EAAM,UAC7CinE,GAAE4vY,QAAQ,GAAG/5c,OAAOwvuB,GAAU,KAAKxvuB,OAAOkD,GAAO,GAAGlD,OAAOwvuB,GAAU,KAAKxvuB,OAAOkD,EAAM,WAAY,GAAGlD,OAAOwvuB,GAAU,KAAKxvuB,OAAOkD,EAAM,WAGvIusuB,GAZQ,SAAevsuB,GAEzB,OADAinE,GAAE+zZ,KAAK,GAAGl+d,OAAOwvuB,GAAU,KAAKxvuB,OAAOkD,EAAM,YACtC,WACL,OAAOhS,GAAIgS,KAsCX7C,GAAS,SAA0BkxR,EAASh6R,EAAIm4uB,EAAcC,GAChE,IAGIj4uB,EACAsB,EACAsP,EALA9R,EAAO1D,OAAO0D,KAAK+6R,GACnBh7R,EAASC,EAAKD,OACdlC,OAA2B7D,IAAhBm/uB,EAtBG,SAAuB/wtB,EAAM+wtB,GAC/C,OAAO,SAAUt1uB,EAAGC,EAAGC,EAAGC,GACxB,OAAOokB,EAAKlpB,KAAKi6uB,EAAat1uB,EAAGC,EAAGC,EAAGC,IAoBEo1uB,CAAcr4uB,EAAIo4uB,GAAep4uB,EAa5E,SARqB/G,IAAjBk/uB,GACFh4uB,EAAI,EACJ4Q,EAASipR,EAAQ/6R,EAAK,MAEtBkB,EAAI,EACJ4Q,EAASonuB,GAGJh4uB,EAAInB,EAAQmB,IAEjB4Q,EAASjU,EAASiU,EAAQipR,EAD1Bv4R,EAAMxC,EAAKkB,IAC6BsB,EAAKu4R,GAG/C,OAAOjpR,GAGT,SAAS4qlB,GAAM28I,GAGb,IAFA,IAAIvnuB,EAAS,GAEJ5Q,EAAI,EAAGA,EAAIm4uB,EAAQt5uB,OAAQmB,IAAK,CAEvC4Q,IAAW,MADDunuB,EAAQhzuB,WAAWnF,GAAG/B,SAAS,KACjB6O,OAAO,GAGjC,OAAO8D,EAGT,SAASwnuB,GAAYz9rB,EAAQyiW,GAC3B,IAAIztW,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7E23uB,EAAoB1osB,EAAO2osB,UAC3BA,OAAkC,IAAtBD,GAAuCA,EACnDE,EAAan9uB,OAAO0D,KAAKs+Y,GAAOz0Y,QAAO,SAAUutI,EAAK1nB,GACxD,IAAII,EAAOwuR,EAAM5uR,GASjB,QARiBI,EAAKA,KAGpBsnB,EAAItnB,EAAKJ,UAAYI,EAAKA,KAE1BsnB,EAAI1nB,GAAYI,EAGXsnB,IACN,IAEoC,oBAA5BuL,EAAU6oF,MAAMkugB,SAA2BF,EAGpD72lB,EAAU7oE,OAAOj+B,GAAU3F,EAAc,GAAIysG,EAAU7oE,OAAOj+B,IAAW,GAAI49rB,GAF7E92lB,EAAU6oF,MAAMkugB,QAAQ79rB,EAAQ49rB,GAYnB,QAAX59rB,GACFy9rB,GAAY,KAAMh7V,GAItB,IAAIxkU,GAAS6oE,EAAU7oE,OACnB06pB,GAAQ7xlB,EAAU6xlB,MAClBmF,GAAa,GACbC,GAAc,GACdC,GAAa,GACbh7N,GAAQ,WACV,IAAIq7G,EAAS,SAAgB95mB,GAC3B,OAAOvW,GAAOiwE,IAAQ,SAAUz1E,EAAGm1G,EAAO39D,GAExC,OADAx3C,EAAEw3C,GAAUhyC,GAAO2vG,EAAOp5F,EAAS,IAC5B/b,IACN,KAGLs1uB,GAAaz/G,GAAO,SAAU9if,EAAKtnB,EAAMJ,GAKvC,OAJII,EAAK,KACPsnB,EAAItnB,EAAK,IAAMJ,GAGV0nB,KAETwimB,GAAc1/G,GAAO,SAAU9if,EAAKtnB,EAAMJ,GACxC,IAAIoqnB,EAAYhqnB,EAAK,GAKrB,OAJAsnB,EAAI1nB,GAAYA,EAChBoqnB,EAAUlvuB,SAAQ,SAAUmvuB,GAC1B3imB,EAAI2imB,GAAYrqnB,KAEX0nB,KAET,IAAI4imB,EAAa,QAASlgqB,GAC1B+/pB,GAAahwuB,GAAO2quB,IAAO,SAAUp9lB,EAAK6imB,GACxC,IAAIC,EAAUD,EAAK,GACfp+rB,EAASo+rB,EAAK,GACdvqnB,EAAWuqnB,EAAK,GAUpB,MARe,QAAXp+rB,GAAqBm+rB,IACvBn+rB,EAAS,OAGXu7F,EAAI8imB,GAAW,CACbr+rB,OAAQA,EACR6zE,SAAUA,GAEL0nB,IACN,KAGL,SAAS+imB,GAAUt+rB,EAAQw9rB,GACzB,OAAQM,GAAW99rB,IAAW,IAAIw9rB,GAFpCx6N,KAcA,IAAIu7N,GAAWz3lB,EAAU7oE,OAQzB,SAASugqB,GAAiBhxuB,GACxB,OAAOA,EAAOQ,QAAO,SAAUutI,EAAKy5L,GAClC,IAAInhN,EAAWgnnB,GAAY9yrB,EAAOiwrB,aAAchja,GAEhD,GAAIupa,GAASvpa,GACXz5L,EAAIv7F,OAASg1R,OACR,GAAIjtR,EAAO02rB,cAAgB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAM57tB,QAAQmyT,IAAQ,EACnFz5L,EAAIv7F,OAASg1R,OACR,GAAInhN,EAAU,CACnB,IAAIuqnB,EAAsB,OAAf7imB,EAAIv7F,OAxBrB,SAAmBnvC,GACjB,OAAOmtuB,GAAWntuB,IAAS,CACzBmvC,OAAQ,KACR6zE,SAAU,MAqByB6qnB,CAAU7qnB,GAAY,GACvD0nB,EAAI1nB,SAAWuqnB,EAAKvqnB,UAAYA,EAChC0nB,EAAIv7F,OAASo+rB,EAAKp+rB,QAAUu7F,EAAIv7F,YACvBg1R,IAAQjtR,EAAOkwrB,kBAA6C,IAAzBjja,EAAInyT,QAAQ,UACxD04H,EAAI50H,KAAKlY,KAAKumU,GAGhB,OAAOz5L,IAtBF,CACLv7F,OAAQ,KACR6zE,SAAU,KACVltG,KAAM,KAsBV,SAASg4tB,GAAgB57I,EAAS/ijB,EAAQ6zE,GACxC,GAAIkve,GAAWA,EAAQ/ijB,IAAW+ijB,EAAQ/ijB,GAAQ6zE,GAChD,MAAO,CACL7zE,OAAQA,EACR6zE,SAAUA,EACVI,KAAM8ue,EAAQ/ijB,GAAQ6zE,IAK5B,SAAS+qnB,GAAOC,GACd,IAAIthkB,EAAMshkB,EAActhkB,IACpBuhkB,EAAwBD,EAAchrhB,WACtCA,OAAuC,IAA1BirhB,EAAmC,GAAKA,EACrDC,EAAwBF,EAAcl2sB,SACtCA,OAAqC,IAA1Bo2sB,EAAmC,GAAKA,EAEvD,MAA6B,kBAAlBF,EACF9D,GAAW8D,GAEX,IAAIlxuB,OAAO4vK,EAAK,KAAK5vK,OApmBhC,SAAwBkmN,GACtB,OAAOpzN,OAAO0D,KAAK0vN,GAAc,IAAI7lN,QAAO,SAAUutI,EAAKo8S,GACzD,OAAOp8S,EAAM,GAAG5tI,OAAOgqb,EAAe,MAAOhqb,OAAOotuB,GAAWlnhB,EAAW8jO,IAAiB,QAC1F,IAAI92T,OAimB8Bm+mB,CAAenrhB,GAAa,KAAKlmN,OAAOg7B,EAASt9B,IAAIuzuB,IAAQ96tB,KAAK,IAAK,MAAMnW,OAAO4vK,EAAK,KAIhI,IAAIytI,GAAS,aAEb,SAASi0b,GAAUx1uB,GAEjB,MAAwB,kBADZA,EAAKu2S,aAAev2S,EAAKu2S,aAAai3b,GAAiB,MAarE,IAAIiI,GAAW,CACbjkqB,QAAS,SAAiBihI,GACxB,IAAIzyM,EAAOyyM,EAAS,GAEhBijiB,EADWjjiB,EAAS,GACI7wM,KAAI,SAAUrD,GACxC,OAAO42uB,GAAO52uB,MACb8b,KAAK,MAER,GAAIra,EAAK0ma,YAAc1ma,EAAK21uB,UAC1B31uB,EAAK21uB,UAAYD,GAAgBp3rB,EAAOywrB,oBAAqD,QAA/B/uuB,EAAKg5S,QAAQhnQ,cAA0B,WAAQ9tC,OAAOlE,EAAK21uB,UAAW,WAAU,SACzI,GAAI31uB,EAAK0ma,WAAY,CAC1B,IAAI94Z,EAAUgxB,SAASC,cAAc,QACrC7+B,EAAK0ma,WAAWwqJ,aAAatjjB,EAAS5N,GACtC4N,EAAQ+nuB,UAAYD,IAGxB31lB,KAAM,SAAc0yD,GAClB,IAAIzyM,EAAOyyM,EAAS,GAChB8kE,EAAW9kE,EAAS,GAGxB,IAAK0+hB,GAAWnxuB,GAAMoZ,QAAQklC,EAAOkwrB,kBACnC,OAAOiH,GAASjkqB,QAAQihI,GAG1B,IAAImjiB,EAAS,IAAIlisB,OAAO,GAAGxvC,OAAOo6C,EAAOiwrB,aAAc,eAChDh3d,EAAS,GAAGntD,WAAWl2G,MAC9B,IAAI2hoB,EAAet+d,EAAS,GAAGntD,WAAWophB,MAAM77rB,MAAM,KAAKpzC,QAAO,SAAUutI,EAAKy5L,GAO/E,OANIA,IAAQjtR,EAAOkwrB,kBAAoBjja,EAAIpkS,MAAMyusB,GAC/C9jmB,EAAIgkmB,MAAM9wuB,KAAKumU,GAEfz5L,EAAIikmB,OAAO/wuB,KAAKumU,GAGXz5L,IACN,CACDikmB,OAAQ,GACRD,MAAO,KAETv+d,EAAS,GAAGntD,WAAWophB,MAAQqC,EAAaC,MAAMz7tB,KAAK,KACvD,IAAI27tB,EAAez+d,EAAS31Q,KAAI,SAAUrD,GACxC,OAAO42uB,GAAO52uB,MACb8b,KAAK,MACRra,EAAK+0S,aAAa,QAAS8gc,EAAaE,OAAO17tB,KAAK,MACpDra,EAAK+0S,aAAay4b,EAAe,IACjCxtuB,EAAK+msB,UAAYivC,IAIrB,SAASC,GAAqBrmqB,GAC5BA,IAGF,SAAS6jb,GAAQjhT,EAAWh1K,GAC1B,IAAI04sB,EAAuC,oBAAb14sB,EAA0BA,EAAW+jR,GAEnE,GAAyB,IAArB/uG,EAAU/3M,OACZy7uB,QACK,CACL,IAAI3gd,EAAQ0gd,GAhqCc,UAkqCtB33rB,EAAOwwrB,iBACTv5c,EAAQs0C,EAAO32C,uBAAyB+id,IAG1C1gd,GAAM,WACJ,IAAI4gd,GA1EsB,IAA1B73rB,EAAOmwrB,eACFgH,GAASjkqB,QAGJikqB,GAASn3rB,EAAOmwrB,iBACZgH,GAASjkqB,QAsEnB4wZ,EAAOuxQ,GAAW,UACtBnhiB,EAAU5wM,IAAIu0uB,GACd/zQ,IACA8zQ,QAIN,IAAIpgoB,IAAW,EAIf,SAASsgoB,KACPtgoB,IAAW,EAEb,IAAIugoB,GAAK,KACT,SAASx+mB,GAAQjzF,GACf,GAAKuosB,GAIA7urB,EAAOuwrB,iBAAZ,CAIA,IAAIyH,EAAe1xsB,EAAQ0xsB,aACvBC,EAAe3xsB,EAAQ2xsB,aACvBC,EAAyB5xsB,EAAQ4xsB,uBACjCC,EAAwB7xsB,EAAQ8xsB,qBAChCA,OAAiD,IAA1BD,EAAmCvJ,EAAWuJ,EACzEJ,GAAK,IAAIlJ,GAAkB,SAAUwJ,GAC/B7goB,IACJt6G,GAAQm7uB,GAASrxuB,SAAQ,SAAUsxuB,GAajC,GAZ4B,cAAxBA,EAAe99uB,MAAwB89uB,EAAelkiB,WAAWj4M,OAAS,IAAM+6uB,GAAUoB,EAAelkiB,WAAW,MAClHp0J,EAAOswrB,sBACT4H,EAAuBI,EAAehxtB,QAGxC0wtB,EAAaM,EAAehxtB,SAGF,eAAxBgxtB,EAAe99uB,MAAyB89uB,EAAehxtB,OAAO8gZ,YAAcpoX,EAAOswrB,sBACrF4H,EAAuBI,EAAehxtB,OAAO8gZ,YAGnB,eAAxBkwU,EAAe99uB,MAAyB08uB,GAAUoB,EAAehxtB,UAAYuotB,EAAgC/0tB,QAAQw9tB,EAAe1oT,eACtI,GAAqC,UAAjC0oT,EAAe1oT,cAA2B,CAC5C,IAAI2oT,EAAoB9B,GAAiB5D,GAAWyF,EAAehxtB,SAC/D2wB,EAASsgsB,EAAkBtgsB,OAC3B6zE,EAAWysnB,EAAkBzsnB,SAE7B7zE,GAAQqgsB,EAAehxtB,OAAOmvR,aAAa,cAAex+P,GAC1D6zE,GAAUwsnB,EAAehxtB,OAAOmvR,aAAa,YAAa3qL,QAE9DmsnB,EAAaK,EAAehxtB,cAK/ByntB,GACLgJ,GAAGx+mB,QAAQ6+mB,EAAsB,CAC/B5jiB,WAAW,EACXsX,YAAY,EACZotN,eAAe,EACf3kO,SAAS,KA6Bb,SAASikiB,GAAa92uB,GACpB,IA7OkBu2C,EAAQk+rB,EA6OtBsC,EAAiB/2uB,EAAKu2S,aAAa,eACnCygc,EAAmBh3uB,EAAKu2S,aAAa,aACrC0gc,OAA+BvivB,IAAnBsL,EAAKi3uB,UAA0Bj3uB,EAAKi3uB,UAAU7/mB,OAAS,GACnEvoH,EAAMkmuB,GAAiB5D,GAAWnxuB,IAatC,OAXI+2uB,GAAkBC,IACpBnouB,EAAI0nC,OAASwgsB,EACblouB,EAAIu7G,SAAW4snB,GAGbnouB,EAAI0nC,QAAU0gsB,EAAUx8uB,OAAS,EACnCoU,EAAIu7G,UAxPY7zE,EAwPU1nC,EAAI0nC,OAxPNk+rB,EAwPcz0uB,EAAKi3uB,WAvPrC3C,GAAY/9rB,IAAW,IAAIk+rB,IAwPxB5luB,EAAI0nC,QAA+B,IAArB0gsB,EAAUx8uB,SACjCoU,EAAIu7G,SAAWyqnB,GAAUhmuB,EAAI0nC,OAAQ6gjB,GAAMp3lB,EAAKi3uB,aAG3CpouB,EAGT,IAAIqouB,GAAuB,SAA8BC,GACvD,IAAIlinB,EAAY,CACdtgI,KAAM,GACN8b,EAAG,EACH2zB,EAAG,EACHyssB,OAAO,EACPC,OAAO,EACP3mP,OAAQ,GAGV,OAAKgtP,EAGIA,EAAgBnlsB,cAAc2F,MAAM,KAAKpzC,QAAO,SAAUutI,EAAK9yI,GACpE,IAAIi+I,EAAQj+I,EAAEgzC,cAAc2F,MAAM,KAC9B37B,EAAQihI,EAAM,GACd//H,EAAO+/H,EAAMv0I,MAAM,GAAG2R,KAAK,KAE/B,GAAI2B,GAAkB,MAATkB,EAEX,OADA40H,EAAI++lB,OAAQ,EACL/+lB,EAGT,GAAI91H,GAAkB,MAATkB,EAEX,OADA40H,EAAIg/lB,OAAQ,EACLh/lB,EAKT,GAFA50H,EAAOq0D,WAAWr0D,GAEd83B,MAAM93B,GACR,OAAO40H,EAGT,OAAQ91H,GACN,IAAK,OACH81H,EAAIn9I,KAAOm9I,EAAIn9I,KAAOuoB,EACtB,MAEF,IAAK,SACH40H,EAAIn9I,KAAOm9I,EAAIn9I,KAAOuoB,EACtB,MAEF,IAAK,OACH40H,EAAIrhI,EAAIqhI,EAAIrhI,EAAIyM,EAChB,MAEF,IAAK,QACH40H,EAAIrhI,EAAIqhI,EAAIrhI,EAAIyM,EAChB,MAEF,IAAK,KACH40H,EAAI1tG,EAAI0tG,EAAI1tG,EAAIlnB,EAChB,MAEF,IAAK,OACH40H,EAAI1tG,EAAI0tG,EAAI1tG,EAAIlnB,EAChB,MAEF,IAAK,SACH40H,EAAIq4W,OAASr4W,EAAIq4W,OAASjte,EAI9B,OAAO40H,IACN7c,GAtDIA,GAmHX,SAASminB,GAAUp3uB,GACjB,IAAIq3uB,EAAeP,GAAY92uB,GAC3BoqH,EAAWitnB,EAAajtnB,SACxB7zE,EAAS8gsB,EAAa9gsB,OACtB+gsB,EAAeD,EAAan6tB,KAE5Bq6tB,EA7KN,SAAsBv3uB,GACpB,IAAIk0G,EAAQl0G,EAAKu2S,aAAa,SAC1B1nS,EAAM,GAgBV,OAdIqlG,IACFrlG,EAAMqlG,EAAMv8D,MAAM,KAAKpzC,QAAO,SAAUutI,EAAK59B,GAC3C,IAAI1/B,EAAS0/B,EAAMv8D,MAAM,KACrB8jG,EAAOjnE,EAAO,GACdlgF,EAAQkgF,EAAO9rE,MAAM,GAMzB,OAJI+yI,GAAQnnJ,EAAMmG,OAAS,IACzBq3I,EAAI2J,GAAQnnJ,EAAM+lB,KAAK,KAAK+8G,QAGvB0a,IACN,KAGEjjI,EA2JW2ouB,CAAYx3uB,GAC1Bi1H,EAjEN,SAA0Bj1H,GACxB,OAAOk3uB,GAAqBl3uB,EAAKu2S,aAAa,sBAgE9Bkhc,CAAgBz3uB,GAC5B+0K,EA9DN,SAAuB/0K,GACrB,IAAI+0K,EAAS/0K,EAAKu2S,aAAa,kBAC/B,OAAkB,OAAXxhI,IAAqC,KAAXA,GAAuBA,GA4D3C2ikB,CAAa13uB,GACtB23uB,EA1DN,SAA2B33uB,GACzB,IAAI23uB,EAAkBn8uB,GAAQwE,EAAKoqN,YAAY7lN,QAAO,SAAUutI,EAAK+tQ,GAKnE,MAJiB,UAAb/tQ,EAAI1qI,MAAiC,UAAb0qI,EAAI1qI,OAC9B0qI,EAAI+tQ,EAAKz4Y,MAAQy4Y,EAAKvrZ,OAGjBw9I,IACN,IACChvB,EAAQ9iH,EAAKu2S,aAAa,SAW9B,OATIj4P,EAAOqwrB,WACL7rnB,EACF60nB,EAAgB,mBAAqB,GAAGzzuB,OAAOo6C,EAAOkwrB,iBAAkB,WAAWtquB,OAAOgtuB,OAE1FyG,EAAgB,eAAiB,OACjCA,EAAe,UAAgB,UAI5BA,EAuCeC,CAAiB53uB,GACnCkyQ,EArCN,SAAqBlyQ,GACnB,IAAIkyQ,EAAOlyQ,EAAKu2S,aAAa,gBAE7B,OAAKrkC,EAGI6ie,GAAiB7ie,EAAKv6N,MAAM,KAAK/1C,KAAI,SAAUhG,GACpD,OAAOA,EAAEw7H,WA9VN,CACL7gF,OAAQ,KACR6zE,SAAU,KACVltG,KAAM,IAyXG26tB,CAAW73uB,GACtB,MAAO,CACLoqH,SAAUA,EACVtH,MAAO9iH,EAAKu2S,aAAa,SACzBhgQ,OAAQA,EACR0+E,UAAWA,EACX8/C,OAAQA,EACRm9F,KAAMA,EACN8hF,MAAO,CACLliR,QAASwlqB,EACT9iqB,OAAQ+iqB,EACRnthB,WAAYuthB,IAKlB,SAASG,GAAY/wuB,GACnBnO,KAAKwO,KAAO,cACZxO,KAAKqxC,QAAUljC,GAAS,mBACxBnO,KAAKmM,OAAQ,IAAIvE,OAAQuE,MAE3B+yuB,GAAY/gvB,UAAYC,OAAOC,OAAOuJ,MAAMzJ,WAC5C+gvB,GAAY/gvB,UAAUG,YAAc4gvB,GAEpC,IAAIjmQ,GAAO,CACTpwW,KAAM,gBAEJs2mB,GAAiB,CACnB73V,cAAe,MACf83V,YAAa,aACbC,IAAK,MAEHC,GAAO,CACTpkkB,IAAK,OACLs2C,WAAYx5K,EAAc,GAAIihc,GAAM,CAClCnze,EAAG,s4CAIHy5uB,GAAkBvnsB,EAAc,GAAImnsB,GAAgB,CACtD7pT,cAAe,YAiDbsmN,GAAU,CACZ1ge,IAAK,IACL50I,SAAU,CAACg5sB,GAhDH,CACRpkkB,IAAK,SACLs2C,WAAYx5K,EAAc,GAAIihc,GAAM,CAClCx2U,GAAI,MACJC,GAAI,MACJvrF,EAAG,OAEL7wC,SAAU,CAAC,CACT40I,IAAK,UACLs2C,WAAYx5K,EAAc,GAAImnsB,GAAgB,CAC5C7pT,cAAe,IACfnqb,OAAQ,wBAET,CACD+vK,IAAK,UACLs2C,WAAYx5K,EAAc,GAAIunsB,GAAiB,CAC7Cp0uB,OAAQ,oBAIC,CACb+vK,IAAK,OACLs2C,WAAYx5K,EAAc,GAAIihc,GAAM,CAClC/rX,QAAS,IACTpnH,EAAG,ySAELwgC,SAAU,CAAC,CACT40I,IAAK,UACLs2C,WAAYx5K,EAAc,GAAIunsB,GAAiB,CAC7Cp0uB,OAAQ,oBAII,CAChB+vK,IAAK,OACLs2C,WAAYx5K,EAAc,GAAIihc,GAAM,CAClC/rX,QAAS,IACTpnH,EAAG,gJAELwgC,SAAU,CAAC,CACT40I,IAAK,UACLs2C,WAAYx5K,EAAc,GAAIunsB,GAAiB,CAC7Cp0uB,OAAQ,sBASVq0uB,GAAW/6lB,EAAU7oE,OACzB,SAAS6jqB,GAASjunB,EAAU7zE,GAC1B,OAAO,IAAIo6rB,IAAO,SAAU74rB,EAASi3B,GACnC,IAAIlgE,EAAM,CACR8M,OAAO,EACPu4D,MAAO,IACPi2C,OAAQ,IACRK,KAAMgqhB,IAGR,GAAIpqhB,GAAY7zE,GAAU6hsB,GAAS7hsB,IAAW6hsB,GAAS7hsB,GAAQ6zE,GAAW,CACxE,IAAII,EAAO4tnB,GAAS7hsB,GAAQ6zE,GAgB5B,OAAOtyE,EAZPjpC,EAAM,CACJ8M,OAAO,EACPu4D,MALUs2C,EAAK,GAMfL,OALWK,EAAK,GAMhBA,KAAM,CACJspD,IAAK,OACLs2C,WAAY,CACV3oF,KAAM,eACN/iI,EATW8rH,EAAK9hH,MAAM,GASR,OAOlB0hH,GAAY7zE,IAAW+H,EAAO2wrB,iBAChClgqB,EAAO,IAAI+oqB,GAAY,8BAA8B5zuB,OAAOqyC,EAAQ,oBAAoBryC,OAAOkmH,KAE/FtyE,EAAQjpC,MAKd,IAAIypuB,GAAWj7lB,EAAU7oE,OA+DzB,SAAS+jqB,GAAiBv4uB,GACxB,IAAIw4uB,EAAWpB,GAAUp3uB,GAEzB,OAAKw4uB,EAASxkZ,MAAMliR,QAAQ14D,QAAQ00tB,GAhCtC,SAA4B9tuB,EAAMw4uB,GAChC,IAAI11nB,EAAQ01nB,EAAS11nB,MACjBmS,EAAYujnB,EAASvjnB,UACrB++N,EAAQwkZ,EAASxkZ,MACjB9/Q,EAAQ,KACRi2C,EAAS,KAEb,GAAImjnB,EAAO,CACT,IAAImL,EAAmBjksB,SAASs+O,iBAAiB9yR,GAAM+/G,SAAU,IAC7Du0iB,EAAqBt0pB,EAAK6yR,wBAC9B3+M,EAAQoglB,EAAmBpglB,MAAQukqB,EACnCtunB,EAASmqiB,EAAmBnqiB,OAASsunB,EAOvC,OAJIn6rB,EAAOqwrB,WAAa7rnB,IACtBkxO,EAAM5pI,WAAW,eAAiB,QAG7BumhB,GAAO74rB,QAAQ,CAAC93C,EAAMizuB,GAAuB,CAClD1+rB,QAASv0C,EAAK+msB,UACd7ynB,MAAOA,EACPi2C,OAAQA,EACR8K,UAAWA,EACXnS,MAAOA,EACPkxO,MAAOA,EACPk+Y,WAAW,MAQJwG,CAAmB14uB,EAAMw4uB,GAjEpC,SAAwCx4uB,EAAMw4uB,GAC5C,IAAIpunB,EAAWounB,EAASpunB,SACpBtH,EAAQ01nB,EAAS11nB,MACjBvsE,EAASiisB,EAASjisB,OAClB0+E,EAAYujnB,EAASvjnB,UACrB8/C,EAASyjkB,EAASzjkB,OAClBm9F,EAAOsme,EAAStme,KAChB8hF,EAAQwkZ,EAASxkZ,MACrB,OAAO,IAAI28Y,IAAO,SAAU74rB,EAASi3B,GACnC4hqB,GAAOtxiB,IAAI,CAACg5iB,GAASjunB,EAAU7zE,GAAS8hsB,GAASnme,EAAK9nJ,SAAU8nJ,EAAK37N,UAAU44B,MAAK,SAAUlwC,GAC5F,IAAIsC,EAAQwK,EAAe9M,EAAM,GAC7B/D,EAAOqG,EAAM,GACb2wO,EAAO3wO,EAAM,GAEjBuW,EAAQ,CAAC93C,EAAM+xuB,GAAsB,CACnC/4V,MAAO,CACL99W,KAAMA,EACNg3O,KAAMA,GAER37N,OAAQA,EACR6zE,SAAUA,EACV6K,UAAWA,EACX8/C,OAAQA,EACRm9F,KAAMA,EACNpvJ,MAAOA,EACPkxO,MAAOA,EACPk+Y,WAAW,YAyCRyG,CAA+B34uB,EAAMw4uB,GAIhD,SAASI,GAAOzouB,GACd,IAAIqtB,EAAWlhC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KACnF,GAAK+wuB,EAAL,CACA,IAAIwL,EAAgB3L,EAAS/suB,gBAAgBk3Q,UAEzCyhe,EAAS,SAAgBtisB,GAC3B,OAAOqisB,EAActhuB,IAAI,GAAGrT,OAAOwpuB,EAA6B,KAAKxpuB,OAAOsyC,KAG1EuisB,EAAY,SAAmBvisB,GACjC,OAAOqisB,EAAc/wuB,OAAO,GAAG5D,OAAOwpuB,EAA6B,KAAKxpuB,OAAOsyC,KAG7EwisB,EAAW16rB,EAAO02rB,aAAeh+uB,OAAO0D,KAAKkzuB,GAAmB52uB,OAAO0D,KAAK49uB,IAC5EW,EAAmB,CAAC,IAAI/0uB,OAAO4puB,EAAuB,UAAU5puB,OAAOspuB,EAAe,OAAOtpuB,OAAO80uB,EAASp3uB,KAAI,SAAUysE,GAC7H,MAAO,IAAInqE,OAAOmqE,EAAG,UAAUnqE,OAAOspuB,EAAe,UACnDnztB,KAAK,MAET,GAAgC,IAA5B4+tB,EAAiBx+uB,OAArB,CAIA,IAAI0lS,EAAa,GAEjB,IACEA,EAAa3kS,GAAQ2U,EAAKyiM,iBAAiBqmiB,IAC3C,MAAOj4uB,KAGT,GAAIm/R,EAAW1lS,OAAS,EAAxB,CACEq+uB,EAAO,WACPC,EAAU,YAKZ,IAAI32Q,EAAOuxQ,GAAW,UAClBnhiB,EAAY2tF,EAAW57R,QAAO,SAAUutI,EAAK9xI,GAC/C,IACE,IAAIyyM,EAAW8liB,GAAiBv4uB,GAE5ByyM,GACF3gE,EAAI9sI,KAAKytM,GAEX,MAAOzxM,IACFs1Q,GACCt1Q,cAAa82uB,IACfl3tB,QAAQ7Z,MAAM/F,IAKpB,OAAO8wI,IACN,IACH,OAAO,IAAI6+lB,IAAO,SAAU74rB,EAASi3B,GACnC4hqB,GAAOtxiB,IAAImT,GAAWrjI,MAAK,SAAU+pqB,GACnCzlP,GAAQylP,GAAmB,WACzBJ,EAAO,UACPA,EAAO,YACPC,EAAU,WACc,oBAAbv7sB,GAAyBA,IACpC4kc,IACAtqb,UAEDynJ,OAAM,WACP6iS,IACArzZ,aAIN,SAASoqqB,GAAOn5uB,GACd,IAAIw9B,EAAWlhC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,KACnFi8uB,GAAiBv4uB,GAAMmvE,MAAK,SAAUsjI,GAChCA,GACFghT,GAAQ,CAAChhT,GAAWj1K,MAK1B,SAAS47sB,GAAmBp5uB,EAAM61G,GAChC,IAAIwjoB,EAAmB,GAAGn1uB,OAjsDS,kCAisD8BA,OAAO2xG,EAASrkC,QAAQ,IAAK,MAC9F,OAAO,IAAIm/pB,IAAO,SAAU74rB,EAASi3B,GACnC,GAA4C,OAAxC/uE,EAAKu2S,aAAa8ic,GAEpB,OAAOvhsB,IAGT,IACIwhsB,EADW99uB,GAAQwE,EAAKk/B,UACiB/6B,QAAO,SAAU1F,GAC5D,OAAOA,EAAE83S,aAAak3b,KAA4B53nB,KACjD,GACCrhC,EAASq1P,EAAO/2C,iBAAiB9yR,EAAM61G,GACvCm9J,EAAax+L,EAAO4xV,iBAAiB,eAAej/X,MAAM4msB,GAC1D54mB,EAAa3gD,EAAO4xV,iBAAiB,eAEzC,GAAIkzU,IAAkCtme,EAKpC,OADAhzQ,EAAK+1S,YAAYujc,GACVxhsB,IACF,GAAIk7N,EAAY,CACrB,IAAIz+N,EAAUigC,EAAO4xV,iBAAiB,WAClC7vX,GAAU,CAAC,QAAS,UAAW,QAAS,UAAUn9B,QAAQ45P,EAAW,IAAM66d,EAAgB76d,EAAW,GAAGhhO,eAAiBg8rB,EAAsB74mB,GAChJoknB,EAAWniJ,GAAyB,IAAnB7ijB,EAAQ95C,OAAe85C,EAAQgzE,OAAO,EAAG,GAAKhzE,GAC/D61E,EAAWyqnB,GAAUt+rB,EAAQgjsB,GAC7BC,EAAiBpvnB,EAGrB,IAAIA,GAAckvnB,GAAiCA,EAA8B/ic,aA7tDrE,iBA6tDmGhgQ,GAAU+isB,EAA8B/ic,aA5tD7I,eA4tDyKijc,EAqCjL1hsB,QArCkM,CAClM93C,EAAK+0S,aAAaskc,EAAkBG,GAEhCF,GAEFt5uB,EAAK+1S,YAAYujc,GAGnB,IAAIr6oB,EA1VH,CACLmrB,SAAU,KACVtH,MAAO,KACPvsE,OAAQ,KACR0+E,UAAW27mB,GACX77jB,QAAQ,EACRm9F,KAAM,KACN8hF,MAAO,CACLliR,QAAS,GACT0C,OAAQ,GACR41I,WAAY,KAiVN4pI,EAAQ/0P,EAAK+0P,MACjBA,EAAM5pI,WAAWqjhB,GAA0B53nB,EAC3CwioB,GAASjunB,EAAU7zE,GAAQ44B,MAAK,SAAUj0C,GACxC,IAAIq8O,EAAWw6d,GAAsBnhsB,EAAc,GAAIquD,EAAM,CAC3D+5S,MAAO,CACL99W,KAAMA,EACNg3O,KArsBL,CACL37N,OAAQ,KACR6zE,SAAU,KACVltG,KAAM,KAosBEq5B,OAAQA,EACR6zE,SAAUovnB,EACVxlZ,MAAOA,EACPk+Y,WAAW,KAETxxiB,EAAUwsiB,EAASrusB,cAAc,OAEpB,YAAbg3E,EACF71G,EAAK0na,aAAahnO,EAAS1gM,EAAKixjB,YAEhCjxjB,EAAK81S,YAAYp1G,GAGnBA,EAAQi1iB,UAAYp+d,EAAS31Q,KAAI,SAAUrD,GACzC,OAAO42uB,GAAO52uB,MACb8b,KAAK,MACRra,EAAK0hR,gBAAgB23d,GACrBvhsB,OACCynJ,MAAMxwH,SAKXj3B,OAKN,SAAS05B,GAAQxxE,GACf,OAAO2wuB,GAAOtxiB,IAAI,CAAC+5iB,GAAmBp5uB,EAAM,WAAYo5uB,GAAmBp5uB,EAAM,YAGnF,SAASy5uB,GAAYz5uB,GACnB,OAAOA,EAAK0ma,aAAe9nY,SAAShpB,QAAU+3tB,EAAoCv0tB,QAAQpZ,EAAKg5S,QAAQ/1K,iBAAmBjjI,EAAKu2S,aAAak3b,MAA6BztuB,EAAK0ma,YAA0C,QAA5B1ma,EAAK0ma,WAAW1tH,SAG9M,SAAS41b,GAAsBz+tB,GAC7B,GAAKk9tB,EACL,OAAO,IAAIsD,IAAO,SAAU74rB,EAASi3B,GACnC,IAAI2qqB,EAAal+uB,GAAQ2U,EAAKyiM,iBAAiB,MAAMzuM,OAAOs1uB,IAAa73uB,IAAI4vE,IACzEp8E,EAAMu+uB,GAAW,wBAlmBvB79nB,IAAW,EAomBT66nB,GAAOtxiB,IAAIq6iB,GAAYvqqB,MAAK,WAC1B/5E,IACAghvB,KACAt+rB,OACCynJ,OAAM,WACPnqM,IACAghvB,KACArnqB,UAON,SAASi8P,KACP,IACI2ua,EAAMpM,EACNh3X,EAAKj4T,EAAOiwrB,aACZqL,EAAKt7rB,EAAOkwrB,iBACZpouB,EAPW,+6OASf,GAlzD0B,OAkzDtBmwW,GAAcqjY,IAAOD,EAAK,CAC5B,IAAIE,EAAQ,IAAInmsB,OAAO,MAAMxvC,OAnzDL,KAmzDiB,OAAQ,KAC7C41uB,EAAQ,IAAIpmsB,OAAO,MAAMxvC,OAAOy1uB,GAAM,KAC1CvzuB,EAAIA,EAAEorE,QAAQqoqB,EAAO,IAAI31uB,OAAOqyW,EAAI,MAAM/kS,QAAQsoqB,EAAO,IAAI51uB,OAAO01uB,IAGtE,OAAOxzuB,EAGT,IAAI2zuB,GAEJ,WACE,SAASA,KA/8DX,SAAyB9ztB,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIjrB,UAAU,qCA88DpB+qB,CAAgBptB,KAAMmhvB,GAEtBnhvB,KAAK6kkB,YAAc,GAl8DvB,IAAsBv3iB,EAAasrF,EAAYC,EA4+D7C,OA5+DoBvrF,EAq8DP6ztB,EAr8DoBvooB,EAq8DX,CAAC,CACrBt0G,IAAK,MACL5I,MAAO,WAGL,IAFA,IAAIi8C,EAAQ33C,KAEH+qB,EAAOrnB,UAAU7B,OAAQgjkB,EAAc,IAAIpjkB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IACtF45iB,EAAY55iB,GAAQvnB,UAAUunB,GAGhC,IAAIkhR,EAAY04R,EAAYl5jB,OAAO3L,KAAKohvB,iBAAkB,IAC1DhjvB,OAAO0D,KAAKqqS,GAAWz/R,SAAQ,SAAUpI,GACvCqzC,EAAMkthB,YAAYvgkB,GAAO0zC,EAAc,GAAIL,EAAMkthB,YAAYvgkB,IAAQ,GAAI6nS,EAAU7nS,IACnF82uB,GAAY92uB,EAAK6nS,EAAU7nS,IAC3Bq8gB,UAGH,CACDr8gB,IAAK,QACL5I,MAAO,WACLsE,KAAK6kkB,YAAc,KAEpB,CACDvgkB,IAAK,mBACL5I,MAAO,SAA0BywS,EAAWk1c,GAC1C,IAAI9F,EAAa8F,EAAW1jsB,QAAU0jsB,EAAW7vnB,UAAY6vnB,EAAWzvnB,KAAO,CAC7E,EAAGyvnB,GACDA,EASJ,OARAjjvB,OAAO0D,KAAKy5uB,GAAYvyuB,KAAI,SAAU1E,GACpC,IAAIg9uB,EAAkB/F,EAAWj3uB,GAC7Bq5C,EAAS2jsB,EAAgB3jsB,OACzB6zE,EAAW8vnB,EAAgB9vnB,SAC3BI,EAAO0vnB,EAAgB1vnB,KACtBu6K,EAAUxuP,KAASwuP,EAAUxuP,GAAU,IAC5CwuP,EAAUxuP,GAAQ6zE,GAAYI,KAEzBu6K,KAv+DPvzL,GAAYF,EAAkBprF,EAAYnvB,UAAWy6G,GACrDC,GAAaH,EAAkBprF,EAAaurF,GA0+DzCsooB,EA9CT,GAiDA,SAASI,GAAS3vnB,GAIhB,MAAO,CACL7uG,OAAO,EACPu4D,MALUs2C,EAAK,GAMfL,OALWK,EAAK,GAMhBA,KAAM,CACJspD,IAAK,OACLs2C,WAAY,CACV3oF,KAAM,eACN/iI,EATW8rH,EAAK9hH,MAAM,GASR,MAMtB,SAAS0xuB,KACH97rB,EAAOowrB,aAAe2L,KACxBtJ,GAAU/la,MAEVqva,IAAe,GAInB,SAASC,GAAUzruB,EAAK0ruB,GAmBtB,OAlBAvjvB,OAAOyJ,eAAeoO,EAAK,WAAY,CACrClS,IAAK49uB,IAEPvjvB,OAAOyJ,eAAeoO,EAAK,OAAQ,CACjClS,IAAK,WACH,OAAOkS,EAAI0oQ,SAAS31Q,KAAI,SAAUrD,GAChC,OAAO42uB,GAAO52uB,SAIpBvH,OAAOyJ,eAAeoO,EAAK,OAAQ,CACjClS,IAAK,WACH,GAAK0wuB,EAAL,CACA,IAAIj7pB,EAAY86pB,EAASrusB,cAAc,OAEvC,OADAuzC,EAAU20nB,UAAYl4rB,EAAI2+e,KACnBp7a,EAAUlzC,aAGdrwB,EAGT,SAAS2ruB,GAAmB3je,GAC1B,IAAI4je,EAAqB5je,EAAWtgO,OAChCA,OAAgC,IAAvBkksB,EAAgC,KAAOA,EAChDrwnB,EAAWysJ,EAAWzsJ,SAC1B,GAAKA,EACL,OAAO8qnB,GAAgBpriB,GAAQ2zX,YAAalnhB,EAAQ6zE,IAAa8qnB,GAAgB73lB,EAAU7oE,OAAQj+B,EAAQ6zE,GAmB7G,IAhBsBzxH,GAgBlBmxM,GAAU,IAAIiwiB,GAMdM,IAAe,EACfK,GAAM,CACRC,MAAO,WACL,IAAIpvsB,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAEjF,GAAI+wuB,EAAQ,CACV+M,KACA,IAAIQ,EAAervsB,EAAOvrC,KACtBA,OAAwB,IAAjB46uB,EAA0B1N,EAAW0N,EAC5CC,EAAmBtvsB,EAAO/N,SAC1BA,OAAgC,IAArBq9sB,EAA8B,aAAiBA,EAM9D,OAJIv8rB,EAAOswrB,sBACTA,GAAqB5uuB,GAGhB44uB,GAAO54uB,EAAMw9B,GAEpB,OAAOmzsB,GAAO5hqB,OAAO,2CAGzBi8P,IAAKA,GACL+la,UAAW,WACJsJ,KACHtJ,GAAU/la,MAEVqva,IAAe,IAGnBS,MAAO,WACL,IAAIvvsB,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7Ey+uB,EAAqBxvsB,EAAOwvsB,mBAC5BrE,EAAuBnrsB,EAAOmrsB,sBAEJ,IAA1Bp4rB,EAAOmwrB,iBACTnwrB,EAAOmwrB,gBAAiB,GAG1BnwrB,EAAOuwrB,kBAAmB,EAC1BM,GAAS,WACP6L,GAAY,CACVD,mBAAoBA,IAEtBljnB,GAAQ,CACNy+mB,aAAcsC,GACdrC,aAAc4C,GACd3C,uBAAwB5H,GACxB8H,qBAAsBA,SAK1BthsB,GAAQ,CACV6/E,UAAW,SAAmBkinB,GAC5B,OAAOD,GAAqBC,KAG5B3snB,IA/EkB7xH,GA+EE,SAAUsivB,GAChC,IAAI1vsB,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7E4+uB,EAAoB3vsB,EAAO0pF,UAC3BA,OAAkC,IAAtBimnB,EAA+BtK,GAAuBsK,EAClEC,EAAiB5vsB,EAAOwpI,OACxBA,OAA4B,IAAnBomkB,GAAoCA,EAC7CC,EAAe7vsB,EAAO2mO,KACtBA,OAAwB,IAAjBkpe,EAA0B,KAAOA,EACxCC,EAAgB9vsB,EAAOu3E,MACvBA,OAA0B,IAAlBu4nB,EAA2B,KAAOA,EAC1CC,EAAkB/vsB,EAAOumC,QACzBA,OAA8B,IAApBwpqB,EAA6B,GAAKA,EAC5CC,EAAqBhwsB,EAAO6+K,WAC5BA,OAAoC,IAAvBmxhB,EAAgC,GAAKA,EAClDC,EAAiBjwsB,EAAOipC,OACxBA,OAA4B,IAAnBgnqB,EAA4B,GAAKA,EAC9C,GAAKP,EAAL,CACA,IAAI1ksB,EAAS0ksB,EAAe1ksB,OACxB6zE,EAAW6wnB,EAAe7wnB,SAC1BI,EAAOywnB,EAAezwnB,KAC1B,OAAO8vnB,GAAU1psB,EAAc,CAC7B93C,KAAM,QACLmivB,IAAiB,WAYlB,OAXAb,KAEI97rB,EAAOqwrB,WACL7rnB,EACFsnG,EAAW,mBAAqB,GAAGlmN,OAAOo6C,EAAOkwrB,iBAAkB,WAAWtquB,OAAOgtuB,OAErF9mhB,EAAW,eAAiB,OAC5BA,EAAU,UAAgB,UAIvB2nhB,GAAsB,CAC3B/4V,MAAO,CACL99W,KAAMi/sB,GAAS3vnB,GACf0nJ,KAAMA,EAAOioe,GAASjoe,EAAK1nJ,MAAQ,CACjC7uG,OAAO,EACPu4D,MAAO,KACPi2C,OAAQ,KACRK,KAAM,KAGVj0E,OAAQA,EACR6zE,SAAUA,EACV6K,UAAWrkF,EAAc,GAAIggsB,GAAsB37mB,GACnD8/C,OAAQA,EACRjyD,MAAOA,EACPkxO,MAAO,CACL5pI,WAAYA,EACZ51I,OAAQA,EACR1C,QAASA,UAlIR,SAAU2pqB,GACf,IAAIlwsB,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7E2+uB,GAAkBQ,GAAuB,IAAIjxnB,KAAOixnB,EAAsBjB,GAAmBiB,GAAuB,IACpHvpe,EAAO3mO,EAAO2mO,KAMlB,OAJIA,IACFA,GAAQA,GAAQ,IAAI1nJ,KAAO0nJ,EAAOsoe,GAAmBtoe,GAAQ,KAGxDv5Q,GAAKsivB,EAAgBrqsB,EAAc,GAAIrF,EAAQ,CACpD2mO,KAAMA,OAwMRgpC,GAAM,CACR34K,OAnMW,WACXjkF,EAAOmwrB,gBAAiB,EACxBnwrB,EAAOuwrB,kBAAmB,EAtsBrBwH,IACLA,GAAGtjiB,cAu4BHz0J,OAAQA,EACRo8rB,IAAKA,GACL5wiB,QAASA,GACT10J,MAAOA,GACPolsB,mBAAoBA,GACpBhwnB,KAAMA,GACN/F,KAnFS,SAAclwE,GACvB,IAAIhJ,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7Eo/uB,EAAqBnwsB,EAAO0pF,UAC5BA,OAAmC,IAAvBymnB,EAAgC9K,GAAuB8K,EACnEC,EAAiBpwsB,EAAOu3E,MACxBA,OAA2B,IAAnB64nB,EAA4B,KAAOA,EAC3CC,EAAmBrwsB,EAAOumC,QAC1BA,OAA+B,IAArB8pqB,EAA8B,GAAKA,EAC7CC,EAAsBtwsB,EAAO6+K,WAC7BA,OAAqC,IAAxByxhB,EAAiC,GAAKA,EACnDC,EAAkBvwsB,EAAOipC,OACzBA,OAA6B,IAApBsnqB,EAA6B,GAAKA,EAC/C,OAAOxB,GAAU,CACfxhvB,KAAM,OACNy7C,QAASA,IACR,WAED,OADA6lsB,KACOnH,GAAuB,CAC5B1+rB,QAASA,EACT0gF,UAAWrkF,EAAc,GAAIggsB,GAAsB37mB,GACnDnS,MAAOA,EACPkxO,MAAO,CACL5pI,WAAYA,EACZ51I,OAAQA,EACR1C,QAAS,CAAC,GAAG5tE,OAAOo6C,EAAOiwrB,aAAc,iBAAiBrquB,OAAOq0F,EAAmBzmB,WA4D1F0yV,QAvDY,SAAiBjwX,GAC7B,IAAIhJ,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7Ey/uB,EAAiBxwsB,EAAOu3E,MACxBA,OAA2B,IAAnBi5nB,EAA4B,KAAOA,EAC3CC,EAAmBzwsB,EAAOumC,QAC1BA,OAA+B,IAArBkqqB,EAA8B,GAAKA,EAC7CC,EAAsB1wsB,EAAO6+K,WAC7BA,OAAqC,IAAxB6xhB,EAAiC,GAAKA,EACnDC,EAAkB3wsB,EAAOipC,OACzBA,OAA6B,IAApB0nqB,EAA6B,GAAKA,EAC/C,OAAO5B,GAAU,CACfxhvB,KAAM,UACNy7C,QAASA,IACR,WAED,OADA6lsB,KACO3G,GAA0B,CAC/Bl/rB,QAASA,EAAQ16C,WACjBipH,MAAOA,EACPkxO,MAAO,CACL5pI,WAAYA,EACZ51I,OAAQA,EACR1C,QAAS,CAAC,GAAG5tE,OAAOo6C,EAAOiwrB,aAAc,oBAAoBrquB,OAAOq0F,EAAmBzmB,WAmC7F2re,MA9BU,SAAe0+L,GACzB,OAAO7B,GAAU,CACfxhvB,KAAM,UACL,WACDshvB,KACA,IAAIl7sB,EAAW,GAMf,OALAi9sB,GAAU,SAAUv4tB,GAClBvpB,MAAMC,QAAQspB,GAAQA,EAAKhiB,KAAI,SAAUrD,GACvC2gC,EAAWA,EAASh7B,OAAO3F,EAAEg5Q,aAC1Br4O,EAAWA,EAASh7B,OAAO0f,EAAK2zP,aAEhC,CAAC,CACNzjG,IAAK,OACLs2C,WAAY,CACVophB,MAAO,GAAGtvuB,OAAOo6C,EAAOiwrB,aAAc,YAExCrvsB,SAAUA,QAedi2sB,OAAQA,IAGN6F,GAAc,WAChB,IAAIzvsB,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC7E8/uB,EAAwB7wsB,EAAOwvsB,mBAC/BA,OAA+C,IAA1BqB,EAAmClP,EAAWkP,GAClEplvB,OAAO0D,KAAK2iJ,EAAU7oE,QAAQ/5E,OAAS,GAAK6jD,EAAO02rB,eAAiB3H,GAAU/urB,EAAOmwrB,gBAAgBvzb,GAAIw/b,IAAIC,MAAM,CACtH36uB,KAAM+6uB,O,qECzyEV,sGAWO,IAAMsB,EAAuB,SAClCC,EACA/4X,GACyB,IAAD,EACpBljO,EACEk8lB,EAAM,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAoBjitB,WAAvB,aAAG,EAAyBl2B,QAAO,SAACq4uB,GAI9C,OAHA,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAUj5X,MACZljO,EAAYm8lB,EAAQj5X,MAEf,OAACi5X,QAAD,IAACA,OAAD,EAACA,EAAUj5X,OAEpB,GAAIljO,EAEF,OADAi8lB,EAAmBjitB,IAAMkitB,IAChBl8lB,EAAUjmH,IAOVqitB,EAAyB,SAACH,GACrC,IAAMxoG,EAAe,CAAE,OAAU,CAAE,IAAO,aACtCwoG,EAAmBjitB,IACrBiitB,EAAmBjitB,IAAIr1B,KAAK8uoB,GAE5BwoG,EAAmBjitB,IAAM,CAACy5mB,IAMjBpkD,EAA6B,SAACr1U,EAAuBn9Q,GAC5Dm9Q,EAAI7gQ,MAAM,CAACtc,EAAK,KAAM,MAAQm9Q,EAAI7gQ,MAAM,CAACtc,EAAK,MAAO,IACvDm9Q,EAAIj5J,OAAOlkH,GACDm9Q,EAAI7gQ,MAAM,CAACtc,EAAK,KAAM,IAEtBm9Q,EAAI7gQ,MAAM,CAACtc,EAAK,MAAO,KACjCm9Q,EAAIpxQ,SAAS,CAAC/L,EAAK,QAFnBm9Q,EAAIpxQ,SAAS,CAAC/L,EAAK,S,sLCsCvB,IAoIau9W,EAAqB,SAACf,EAAY5zI,EAAU2zI,EAAe7pP,GACtE,OAAO8pP,EAAWn1W,QAAO,SAACutI,EAAK0rL,GAC7B,IAAM2/U,EAAgBr3a,GAAsB03F,EAAK7gU,IAAI,YAAe,MAEpE,GAA8B,QAA1B6gU,EAAK7gU,IAAI,aAAwB,CACnC,IAAMooM,EAAWn1E,EAAQjzH,IAAI,4BAC7B,MAAiB,KAAbooM,GAAgC,OAAbA,QAAkCrwM,IAAbqwM,EACnCjzD,EAEF9vH,iBAAOuiW,YAAmB,CAAEtB,cAAenxO,EAAI36H,OAAQqtW,UAAWhnD,EAAKl9T,IAAI,aAAeykM,GAAYt9L,OAAOs9L,IAAcy4H,EAAK7gU,IAAI,eAAewa,UAG5J,GAA8B,eAA1BqmT,EAAK7gU,IAAI,aAA+B,CAC1C,IAAM+/uB,EAAiC9snB,EAAQp2G,MAAM,CAAC,QAASigW,EAAe0jS,IAAiB1jS,EAAgB,UACzGnlD,EAAQ1kM,EAAQp2G,MAAM,CAAC,QAASkjuB,EAAgCv/F,EAAc,YAAa,EAC7FzkE,EAAgB9od,EAAQp2G,MAAM,CAAC,QAASkjuB,EAAgCv/F,EAAc3/U,EAAK7gU,IAAI,aAC7FggvB,EAAiBrob,GAAiC,SAAxBkJ,EAAK7gU,IAAI,WAGzC,GAAsB,MAFtB+7kB,EAAgBikK,GAAyC,IAAlBjkK,EAAN,IAAkCA,GAAgC,KAErD,OAAlBA,QAA4ChklB,IAAlBgklB,EACpD,OAAO5mc,EAGT,IAAM8qmB,EAAUD,EAAiBn/a,EAAKl9T,IAAI,iBAAiB,GAAQk9T,EACnE,OAAOx7S,iBAAOuiW,YAAmB,CAAEtB,cAAenxO,EAAI36H,OAAQqtW,UAAWo4X,EAAQt8uB,IAAI,aAAcmH,OAAOixkB,IAAgBvhkB,UAE5H,OAA+B,OAA3BqmT,EAAK7gU,IAAI,oBAAqDjI,IAA3B8oU,EAAK7gU,IAAI,eAA0D,KAA3B6gU,EAAK7gU,IAAI,cAC/Em1I,EAEF9vH,iBAAOuiW,YAAmB,CAAEtB,cAAenxO,EAAI36H,OAAQqtW,UAAWhnD,EAAKrmT,YAC7EuiW,IAoDQi9V,EAA0B,SAAC,GAejC,IAdL10pB,EAcI,EAdJA,KACAu5M,EAaI,EAbJA,sBACAjsH,EAYI,EAZJA,gBACAypO,EAWI,EAXJA,iBACAjL,EAUI,EAVJA,QACAkL,EASI,EATJA,sBACAC,EAQI,EARJA,4CACAG,EAOI,EAPJA,oBACAF,EAMI,EANJA,aACAC,EAKI,EALJA,gBACAE,EAII,EAJJA,oBACAE,EAGI,EAHJA,gBACA/2C,EAEI,EAFJA,yBAEI,IADJmzY,kDACI,SACEn8V,GAAuC,OAAflqO,QAAe,IAAfA,OAAA,EAAAA,EAAiB/1H,MAAM,CAAC,SAAU,SAAU,UACpEo3M,EAAQ,OAAG3uK,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,YACrB+8W,GAA4B,OAAfF,QAAe,IAAfA,OAAA,EAAAA,EAAiB78W,IAAI,gBAAiB6O,gBACnDs6N,EAAQ,OAAG0zI,QAAH,IAAGA,OAAH,EAAGA,EAAiBhgW,MAAM,CAAC,WAAY,aAE/CqjuB,EAAwCpiY,EAAmBf,EAAY5zI,EAAU2zI,EAAe/+U,mCAIhG09U,EAAa,OAAGxnJ,QAAH,IAAGA,OAAH,EAAGA,EAAUrsN,QAAO,SAACurN,EAAU72B,GAChD,IAAM6jjB,EAAe7jjB,EAAQt8L,IAAI,YAC3B47W,EAAa,OAAGukY,QAAH,IAAGA,OAAH,EAAGA,EAAcv4uB,QAAO,SAACksH,EAAUwrI,GACpD,IAAMpiO,EAAKpyB,OAAOw0P,EAAYt/P,IAAI,kBAC5BogvB,EAAyC,OAAGvhf,QAAH,IAAGA,OAAH,EAAGA,EAAuB3+P,IAAIg9B,GAEvEmjtB,EAAmCpnC,EACrCl7qB,kCAAgC9wB,eAAe,SAAAywQ,GAC7CA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,OAAQ,IACZA,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBACrB2D,IAAI,gBAAgB,GACpBA,IAAI,gBAAiB27P,EAAYt/P,IAAI,kBACrC2D,IAAI,uBAAwB27P,EAAYt/P,IAAI,kBAC5C2D,IAAI,gBAAiBu8uB,GACrBv8uB,IAAI,oBAAqB0hB,iBAAO,CAC/BmgkB,YAAalpZ,EAAQt8L,IAAI,SAAW,GACpCi2H,cAAeqpI,EAAYt/P,IAAI,iBAC/Bs/P,cACAghf,gBAAiBhhf,EAAYt/P,IAAI,SAAW,GAC5CugvB,QAAQ,EACRpkvB,KAAM,KACN+sB,OAAQ,KACRs3tB,0BAA2B,EAC3BC,SAAU,WAGhBp7tB,iBAAO,CACL6X,IAAK,EACLmgV,kBAAmB,CACjBmoO,YAAalpZ,EAAQt8L,IAAI,SAAW,GACpCi2H,cAAeqpI,EAAYt/P,IAAI,iBAC/Bs/P,cACAghf,gBAAiBhhf,EAAYt/P,IAAI,SAAW,GAC5CugvB,QAAQ,EACRpkvB,KAAM,KACN+sB,OAAQ,KACRs3tB,0BAA2B,EAC3BC,SAAU,QAMlB,GAAIL,EAA2C,CAC7C,IAAM9iY,EAA0Bz+G,EAAsB7+P,IAAIk9B,GACpD8hO,EAAkBs+G,EAAwBt9W,IAAI,mBAE9Cu9W,EAAkB,OAAGv+G,QAAH,IAAGA,OAAH,EAAGA,EAAiBh/P,IAAI,GAGhD,IAAKu9W,EACH,OAAOzpP,EAASzrH,KAAKg4uB,GAGvB,IAAMtiY,EAAkB,OAAGR,QAAH,IAAGA,OAAH,EAAGA,EAAoBv9W,IAAI,gBAE7Ci4T,EAAWqlD,EAAwBzgW,MAAM,CAAC,kBAAmB,EAAG,aAAeia,+BAA6BgoO,YAC5Gk/G,EAAoB,OAAGrB,QAAH,IAAGA,OAAH,EAAGA,EAAqB38W,IAAI,QAEtD,GAAwC,aAAlB,OAAlB+9W,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB/9W,IAAI,SAAuB,CAAC,IAAD,EAC3Ci+W,EAAkBF,EAAmB/9W,IAAI,YACzCo9W,EAAkBK,IAClBzU,EAAiB,UAAG+U,EAAmB/9W,IAAI,4BAA1B,QAAkDkU,iBAEzE,OAAI,OAAC+pW,QAAD,IAACA,OAAD,EAACA,EAAiB5sW,UAKP,OAAf4sW,QAAe,IAAfA,KAAiBt1W,SAAQ,SAACsqH,EAASiD,GAAkB,IAAD,MAC5C2jP,GAAqB,OAAP5mP,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,iBAAkB,KAC7Ck+W,EAAcrE,EAAY75W,IAAI,SAAW,KACzCm+W,EAAuBr4C,EACzBo4C,GAAeF,EACbE,EAAc,KAAOF,EACpBA,GACCE,EAEJA,EACE5yC,EAAS,UAAGuuC,EAAYh9V,MAAM,CAAC,cAAeigW,EAAe,qBAApD,QAAqEjD,EAAYh9V,MAAM,CAAC,cAAe,UAAW,cAC3HuhW,EAAwC,mBAAd9yC,EAE1B3jE,GADY10I,EAAQjzH,IAAI,OACR,UAAAizH,EAAQjzH,IAAI,mBAAZ,eAAyBqR,UAAW,GAEpDgsW,EAAsDC,EAAwBrwW,eAAc,SAACywQ,GAAD,OAEhGA,EACG/5Q,IAAI,SAAUs0T,GACdt0T,IAAI,cAAe24L,EAAQt8L,IAAI,SAAW,IAC1C2D,IAAI,OAAQ45W,EAAmBv9W,IAAI,SAAW,MAC9C2D,IAAI,SAAU45W,EAAmBv9W,IAAI,WAAa,MAClD2D,IAAI,2BAA4B25W,EAAwBt9W,IAAI,mBAAqB,GAAK,GACtF2D,IAAI,WAAY,MAChBA,IAAI,cAAe+5Q,EAAI19Q,IAAI,gBAC3B2D,IAAI,kBAAmB+5Q,EAAI19Q,IAAI,SAAW,IAC1CykH,OAAO,sBAGNi5P,EAAI,UAAIxnP,IAAiByxI,EAAgB,EAC7By2G,IAAqB9yC,EACnB6yC,EACAD,EACFE,IAAqB9yC,EACnB0yC,EACA,YANV,QAMmB,KAEvBnC,EAAehC,GAAeA,EAAY5sW,eAAc,SAACywQ,GAE7DA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,OAAQ+5W,GACZ/5W,IAAI,gBAAiB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBACnElZ,IAAI,uBAAwB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBAC1ElZ,IAAI,YAAao6W,EAAmB/9W,IAAI,OACxC2D,IAAI,kBAAmBy5W,GACvBz5W,IAAI,eAAgBuyH,GACpBvyH,IAAI,gBAAiBo6W,EAAmB/9W,IAAI,WAC5C2D,IAAI,0BAA2Bo6W,EAAmB/9W,IAAI,qBACtD2D,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBACrB2D,IAAI,iBAAiB,GACrBA,IAAI,2BAA4BqlW,EAAkBhpW,IAAIk2H,IAAiB,GAEvEvyH,IAAI,oBAAqB05W,GACzB15W,IAAI,gBAAiBm6W,EAAmBf,EAAY5zI,EAAU2zI,EAAejD,EAAYl2W,IAAI,2BAA4BqlW,EAAkBhpW,IAAIk2H,IAAiB,KAE/J+ilB,GAA+D,IAAjB/ilB,GAChDwnJ,EAAI/5Q,IAAI,uBAAuB,MAGnCmwH,EAAWA,EAASzrH,KAAKwzW,MAEpB/nP,GAlEEA,EAASzrH,KAAKg4uB,GAmElB,GAAI/mvB,QAAQykX,GAAqB,CAAC,IAAD,EAChCG,GAAgC,OAAlBH,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB/9W,IAAI,UAAW,KACjDm+W,EAAuBr4C,EACzBo4C,GAAeF,EACbE,EAAc,KAAOF,EACpBA,GACCE,EAEJA,EACE5yC,EAAS,UAAGyyC,EAAmBlhW,MAAM,CAAC,cAAeigW,EAAe,qBAA3D,QAA4EiB,EAAmBlhW,MAAM,CAAC,cAAe,UAAW,cACzIuhW,EAAwC,mBAAd9yC,EAE1B+xC,EAAsDC,GAA2BA,EAEpF35W,IAAI,SAAUs0T,GACdt0T,IAAI,cAAe24L,EAAQt8L,IAAI,SAAW,IAC1C2D,IAAI,OAAQ45W,EAAmBv9W,IAAI,SAAW,MAC9C2D,IAAI,SAAU45W,EAAmBv9W,IAAI,WAAa,MAClD2D,IAAI,2BAA4B25W,EAAwBt9W,IAAI,mBAAqB,GAAK,GACtF2D,IAAI,WAAY,MAChBA,IAAI,cAAe25W,EAAwBt9W,IAAI,gBAC/C2D,IAAI,kBAAmB25W,EAAwBzgW,MAAM,CAAC,cAAe,UAAY,IACjF4nG,OAAO,mBAEJo3P,EAAekC,EAAmB9wW,eAAc,SAAAywQ,GACpDA,EACG/5Q,IAAI,iBAAkB85W,KACtB95W,IAAI,OAAQy6W,IAAqB9yC,EAAY6yC,EAAuBD,GACpEv6W,IAAI,QAAS+5Q,EAAI19Q,IAAI,kBACrB2D,IAAI,gBAAgB,GACpBA,IAAI,iBAAiB,GACrBA,IAAI,gBAAiB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBACnElZ,IAAI,uBAAwB25W,EAAwBzgW,MAAM,CAAC,cAAe,mBAC1ElZ,IAAI,oBAAqB05W,GACzB15W,IAAI,gBAAiBm6W,EAAmBf,EAAY5zI,EAAU2zI,EAAeiB,IAE5Ek7V,GACFv7b,EAAI/5Q,IAAI,uBAAuB,MAGnC,OAAOmwH,EAASzrH,KAAKwzW,GAGrB,OAAO/nP,EAASzrH,KAAKg4uB,GAElB,OAAK/mvB,QAAQulQ,IAA0BA,EAAsBrgP,UAC3Ds1G,EAASzrH,KAAKg4uB,GAEhBvsnB,IACN5/G,kBAGH,IAAK5a,QAAQsiX,EAAc5jX,MACzB,OAAOm7N,EAGT,IAAMwrJ,EAAkB9B,EAAgB78W,IAAI,YAAc68W,EAAkBA,EAAgBl5W,IAAI,WAAYkL,cAAI,CAAE6xuB,aAAc,QAS1HC,EAAsB/+oB,IAAQ55E,EAAE,0CACtC,OAAOmrM,EAAS9qN,KAAKgd,iBAAO,CAC1B80V,UAAWsD,IACXiB,aAAcpiL,EAAQt8L,IAAI,SAAW2gvB,EACrC5qnB,UAAWumE,EAAQt8L,IAAI,MACvB4+W,OAAQtiL,EAAQt8L,IAAI,SAAW,GAC/B2+W,kBACA7qP,SAAU8nP,EACVglY,iBAAkB,EAElBr9D,oBAAqB,QAEtBrvqB,kBAEGulF,EAAM,OAAGn0C,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,MACnB6gvB,EAAoBv7rB,GAAQA,EAAKtlD,IAAI,gBAAjB,OACtBslD,QADsB,IACtBA,OADsB,EACtBA,EAAMtlD,IAAI,gBADY,OAEtBslD,QAFsB,IAEtBA,OAFsB,EAEtBA,EAAMtlD,IAAI,QACR+urB,EAAe,OAAGzpoB,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,aAC5B8gvB,EAAkB,OAAGx7rB,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,gBAC/B+gvB,EAAW,OAAGz7rB,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,WACxBghvB,EAAiBrpoB,IAAOopoB,GAAanmuB,IAAI,GAAI,QAAQ87B,OAAO,uBAC5DojG,GAAW,OAAJx0F,QAAI,IAAJA,OAAA,EAAAA,EAAMtlD,IAAI,WAAW,EAC5BihvB,GAAoB,OAAJ37rB,QAAI,IAAJA,OAAA,EAAAA,EAAMtlD,IAAI,oBAAoB,EAe9Cu6G,EAAgBl1F,iBAAO,uCACxButH,EAAgBp4H,QAEhBqkW,YAAwB,CACzBxC,mBACAC,wBACAlL,UACA0N,6BAA8Bh5C,EAC9By2C,8CACAC,eACAC,kBACAC,wBACCliW,QAZuB,IAa1Bi/E,SACAhvF,KAAMo2uB,GAAwC,WAC9C1thB,SAAUsoJ,EACVtpQ,UAAW48kB,EACX76d,aAAc4shB,EACd9vhB,QAAS+vhB,EACTxvhB,WAAYyvhB,EAEZ9uhB,YAAa,GACbN,kBAAmBn4H,EACnBqgD,OACAmnmB,mBAQI9whB,EAAY51G,EAAcv6G,IAAI,aACpC,OAAoB,MAAbmwN,EAAoB51G,EAAc52G,IAAI,YAAlB,YAAmCwsN,IAAc51G,I,4HCtjB7D2moB,G,SArBFC,E,8EAAf,WAAkCpjmB,GAAlC,eAAAn8I,EAAA,yDACiC,oBAA3B,OAAOm8I,QAAP,IAAOA,GAAP,UAAOA,EAAK9mG,YAAZ,aAAO,EAAWq2Q,MADxB,yCAGmBvvK,EAAI9mG,KAAKq2Q,OAH5B,wGAQS,CAAEnqR,QAAS,CAAE/4B,MAAO,CAAE65F,MAAS,OAAH85C,QAAG,IAAHA,OAAA,EAAAA,EAAKr8C,SAAU,KAAMt3F,OAAU,OAAH2zI,QAAG,IAAHA,OAAA,EAAAA,EAAK3zI,QAAL,sBAAsB2zI,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAKr8C,YAR5F,0D,sBAqBO,SAAUw/oB,EAAcE,EAAiB59oB,EAAgChG,GAAzE,qFACO,OADP,SACavgG,YAAKugG,GADlB,YAEE,QADDugD,EADD,cAEE,IAAHA,OAAA,EAAAA,EAAKwvK,WAAW7vT,MAAMC,QAAN,UAAcogJ,EAAI9mG,YAAlB,iBAAc,EAAU9T,eAAxB,iBAAc,EAAmBk+sB,gBAAjC,aAAc,EAA8B79oB,IAF3D,yCAGI,CAAEvsD,KAAM8mG,EAAI9mG,KAAM5J,SAAKt1C,IAH3B,mBAKOgmJ,QALP,IAKOA,OALP,EAKOA,EAAKwvK,SALZ,gDAMIxvK,EAAI9mG,MANR,IAMc9T,QAAS,CAAE/4B,MAAO,CAAE65F,KAAM85C,EAAIr8C,OAAQt3F,MAAM,yCAAD,OAA2Co5F,OANpG,uBAOD,OAPC,UAOKvmG,YAAKkkvB,EAAoBpjmB,GAP9B,4BAUL,OALM1wG,EALD,KAQCC,GAAa,OAAHD,QAAG,IAAHA,GAAA,UAAAA,EAAKlK,eAAL,mBAAc/4B,aAAd,eAAqBA,QAAS,gBAC9C6Z,QAAQ7Z,MAAR,qBAA4Bg3uB,EAA5B,WAA8C/zsB,GATzC,UAUCk0D,YAAI,IAAI3wD,IAAsB,CAAEtD,QAAQ,eAAD,OAAiB8zsB,EAAjB,cAA8B9zsB,GAAWu0D,SAAU,WAV3F,iCAWE,CAAE5qD,UAAMl/C,EAAWs1C,QAXrB,0C,iXC7BQ,MAA0B,mC,2ECqC5B0nY,EAAiB,CAC5B,CAAE73Y,GAAI,gBAAiBH,MAAO,uCAAwCipF,KAAM,CAAC,CAAC,YAAa,aAAc3uC,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,QAC/I,CAAEx4E,GAAI,eAAgBH,MAAO,uCAAwCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,QACnI,CAAEx4E,GAAI,eAAgBH,MAAO,sCAAuCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAOi3U,UAAU,EAAM54S,MAAO,QAC3H,CAAEx4E,GAAI,QAASH,MAAO,gCAAiCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,QAC9G,CAAEx4E,GAAI,gBAAiBH,MAAO,uCAAwCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAOi3U,UAAU,EAAM54S,MAAO,QACrI,CAAEx4E,GAAI,UAAWH,MAAO,kCAAmCipF,KAAM,CAAC,WAAY3uC,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,QACpH,CAAEx4E,GAAI,eAAgBH,MAAO,sCAAuCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAOi3U,UAAU,EAAM54S,MAAO,QACnI,CAAEx4E,GAAI,gBAAiBH,MAAO,uCAAwCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAOi3U,UAAU,EAAM54S,MAAO,QACrI,CAAEx4E,GAAI,qBAAsBH,MAAO,0CAA2Cs6C,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,UACpH,CAAEx4E,GAAI,iBAAkBH,MAAO,wCAAyCs6C,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,UAC9G,CAAEx4E,GAAI,SAAUH,MAAO,iCAAkCs6C,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,WAG3F+V,EAAYJ,aAAW,SAACl0C,GAAD,MAA+B,CAC1DmoT,cAAe,CACb,UAAW,CACTr+Q,gBAAiB,gBAGrBqgoB,sBAAuB,CACrB/pqB,MAAO,QACPrC,WAAY,cA6UD8gW,IAzUa,SAAC,GAMK,IAAD,IAL/Bj1T,eAK+B,SAJ/B8hQ,EAI+B,EAJ/BA,QACA1yJ,EAG+B,EAH/BA,UACA4lN,EAE+B,EAF/BA,mBACAlB,EAC+B,EAD/BA,gBAGMjuY,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,IAIVgxjB,GAHSzka,cACOhvD,cAEKr7K,sBAAY24N,YAAkB,CAAC,uBACpDh4C,EAAU3gL,sBAAY24N,YAAkB,CAAC,QACzCv2C,EAAgBpiL,sBAAY24N,YAAkB,CAAC,mBAC/Cp0C,GAAcvkL,sBAAY24N,YAAkB,CAAC,iBAC7Ci7e,GAA+C5zsB,sBAAYw4N,YAAgB,CAAC,iBAC5Eq7e,GAAyB7zsB,sBAAY24N,YAAkB,CAAC,cAAe,OAAQ,iBAC/EivK,GAAkB5nY,sBAAY24N,YAAkB,CAAC,cAAe,OAAQ,cACxEm7e,GAAuB9zsB,sBAAY24N,YAAkB,CAAC,OAAQ,0BAEpE,GAAgC5lO,IAAMia,SAA6B,MAAnE,qBAAOy0E,GAAP,MAAiBs9J,GAAjB,MACA,GAA8ChsP,IAAMia,UAAU,GAA9D,qBAAO06X,GAAP,MAAwBC,GAAxB,MACA,GAA8D50Y,IAAMia,SAAS,MAA7E,qBAAO+msB,GAAP,MAAgCC,GAAhC,MAEAjhtB,IAAM0B,WAAU,WAAO,IAAD,EAChBw/sB,EAAO1tuB,iBACW,OAAtBstuB,SAAsB,IAAtBA,OAAwBv8uB,KAAI,SAAC0qX,GAC3B,IAAMkyX,EAAiBx8tB,iBAAO,CAC5B6uH,QAAS,CACPh3G,GAAIyyV,EAAW3vX,IAAI,OAErBmuN,UAAWwhK,EAAW3vX,IAAI,aAC1BquN,QAASshK,EAAW3vX,IAAI,WACxBouN,SAAUuhK,EAAW3vX,IAAI,YACzBwuN,iBAAkBmhK,EAAW3vX,IAAI,oBACjCsuN,QAASqhK,EAAW3vX,IAAI,aAE1B4hvB,EAAOA,EAAKv5uB,KAAKw5uB,MAInB,QAAC,EAAA1xhB,GAAaj8M,wBAAd,SAAuBvL,SAAQ,SAAC26G,GAG3Bs+nB,EAAKhkuB,MAAK,SAAA62pB,GAAG,OAAIA,EAAI53pB,MAAM,CAAC,UAAW,SAAWymG,EAAStjH,IAAI,OAASy0qB,EAAIz0qB,IAAI,aAAesuN,OAEhGszhB,EAAOA,EAAKv5uB,KAAKgd,iBAAO,CACtB6uH,QAAS,CACPh3G,GAAIomF,EAAStjH,IAAI,OAEnBmuN,UAAW,KACXE,QAAS,KACTD,SAAU,YAKZwzhB,EAAK5pvB,KACP4uC,EAAS8/B,YAAW0/L,IAAe,CAAEn1C,YAAa2whB,KAElDh7sB,EAAS8/B,YAAW0/L,IAAe,CAAEn1C,YAAa/8M,sBAEnD,CAACqha,GAAiBisU,GAAwBC,KAE7C/gtB,IAAM0B,WAAU,WACd,IAAyB,IAArBizY,GAAwB,CAC1B,GAAuC,kBAA5BqsU,GAAsC,CAC/C,IAAMI,EAAkB1pqB,YAAMspqB,GAAyB,GAAGrrf,QAAQ,GAClEzvN,EAASu/B,YAAOigM,IAAD,sBAA+BivK,GAA/B,cAA4DysU,QAC/B,kBAA5BJ,IAChB96sB,EAASu/B,YAAOigM,IAAD,sBAA+BivK,GAA/B,cAA4DqsU,KAE7EpsU,IAAoB,GACpBqsU,GAA2B,SAE5B,CAACD,KAEJ,IAAMK,GAA0B,SAACjuU,GAAD,OAAc,SAACzva,GAE7C,GADAuiC,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,eAAsDzva,EAAE4kB,OAAOtxB,QACvD,OAAnB0M,EAAE4kB,OAAOtxB,MACXivC,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,cAAqD,UAC/D,GAAuB,YAAnBzva,EAAE4kB,OAAOtxB,QAAT,OAAgCu6N,SAAhC,IAAgCA,QAAhC,EAAgCA,GAAal6N,MACtD,GAAIk6N,GAAYl6N,KAAO,EACrBs9a,GAAmBxB,GACnBpnJ,GAAYroR,EAAEs8G,mBACT,CACL,IAAMqhoB,EAAsB9vhB,GAAY7yM,QAAQrf,IAAI,kBAC9C6jrB,EAAa3xd,GAAY7yM,QAAQrf,IAAI,UAAY,EACjD8hvB,EAAkB1pqB,YAAMxD,WAAWivmB,GAAa,GAAGxtb,QAAQ,GACjEzvN,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,qBAAqDkuU,QAArD,IAAqDA,IAAuBF,OAK3FG,GAAyB,SAACnuU,GAAD,OAAc,SAACzva,GAC5C,IACM1M,EAAQ0M,EAAE4kB,OAAOtxB,MACT,KAAVA,EACFivC,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,cAAqD,OAHxD,qBAIG98X,KAAKr/C,IACpBivC,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,cAAqDzva,EAAE4kB,OAAOtxB,UAI3EuqvB,GAAuB,SAACpuU,GAAD,OAAc,SAACzva,GAC1C,IAAM1M,EAAQ0M,EAAE4kB,OAAOtxB,MACnBA,IACE0gD,MAAM1gD,GACRivC,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,cAAqD,OAEpEltY,EAASu/B,YAAOigM,IAAD,sBAA+B0tK,EAA/B,cAAqDhpa,OAAOlN,OAAOjG,SAKlFwqvB,GAAyB,SAACruU,EAAUvmJ,GAAX,OAA6B,WAC1D,IAAM60d,EAAiB,OAAGjyhB,QAAH,IAAGA,OAAH,EAAGA,EAAWtzM,MAAM,CAAC0wQ,EAAe,OACvDkvZ,IAAuB2lE,IACzBx7sB,EAASu/B,YAAO6/L,IAAiB,mBAAoB,OACrDp/N,EAAS,IAAIozL,IAA0B,CAAE8yG,gBAAY/0U,MAGvD,IAAMsqvB,EAAgB,YAAOlyhB,EAAU9kN,OAAOkiR,EAAe,IAC7D3mP,EAASu/B,YAAO6/L,IAAiB,YAAaq8e,IAC9C,IACMC,EADiCnyhB,EAAUnwN,IAAIutR,GACZvtR,IAAI,aAEvCuivB,EAAoB,OAAGxyhB,QAAH,IAAGA,OAAH,EAAGA,EAAevoN,QAAO,SAAAgpX,GAAiB,IAAD,EAC3DJ,EAAiBI,EAAaxwX,IAAI,MAClCwivB,EAAgB,OAAGryhB,QAAH,IAAGA,GAAH,UAAGA,EAAW9kN,OAAOkiR,EAAe,UAApC,aAAG,EAAqCtoR,KAAI,SAAAq+G,GAAQ,OAAIA,EAAStjH,IAAI,gBAAc4H,QAAO,SAACutI,EAAU65D,GAAX,4BAAwB75D,GAAxB,YAAgC65D,OAC1IyziB,EAAmBH,EAAiB1kuB,MAAK,SAAA42H,GAAQ,OAAI47O,IAAmB57O,EAASx0I,IAAI,SAE3F,YAA4BjI,IAArB0qvB,GACLD,QAA6HzqvB,IAAzGyqvB,EAAiB5kuB,MAAK,SAAA8kuB,GAAM,OAAID,GAAoBC,EAAO1ivB,IAAI,QAAUyivB,EAAiBzivB,IAAI,YAGtH4mC,EAASu/B,YAAO6/L,IAAiB,gBAAiBu8e,IAElD37sB,EAASg/B,YAAYwgM,IAAD,cAA+B0tK,MAG/C6uU,GAAsB,SAACr/nB,GAAD,OAAc,WACxC18E,EAAS,IAAI6rB,KAA2B,CAAEwhF,SAAU//H,eAAK,CAACovG,OAC1D18E,EAAS,IAAI+rB,KAAoB2wD,EAAStjH,IAAI,QAC9C4mC,EAAS,IAAI4J,IAA+B,CAAEtT,GAAIwwP,IAAWvnP,MAAO,CAAEhwB,UAAU,MAChFywB,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIwwP,IAAW9mL,MAAM,KACjEhgE,EAAS,IAAI8J,IAAiC,CAC5CkH,QAAS,UACT1a,GAAIwwP,SAIR,OACE,eAAC6mK,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,cAACE,EAAA,EAAD,iBAEI7xE,QAFJ,IAEIA,OAFJ,EAEIA,EAAS59W,KAAI,SAAC+pZ,EAAqB52Z,GAAtB,OACX,cAAC6zR,EAAA,EAAD,CAEEv2K,MAAOs5S,EAAOt5S,MAFhB,SAKG1tF,EAAEgnY,EAAOjyX,QALZ,UACUiyX,EAAOjyX,MADjB,YAC0B3kC,WAUlC,cAACw8b,EAAA,EAAD,UAEGzkO,GAAaA,EAAUlrN,KAAI,SAACq+G,EAAUiqK,GACrC,IAAMu/C,EAAaxpN,EAAStjH,IAAI,MAC1BoiH,EAAYkB,EAAStjH,IAAI,aACzBqiH,EAAWiB,EAAStjH,IAAI,YACxB4yW,EAAWtvP,EAAStjH,IAAI,YACxB6yW,EAAWvvP,EAAStjH,IAAI,YACxByK,GAAQ23G,GAAaC,IAAa,CAACD,EAAWC,GAAU3kG,KAAK,KAG7Do2Z,EAAQ,OAAGytU,SAAH,IAAGA,QAAH,EAAGA,GAAiBt/tB,WAAU,SAAC+xZ,GAAD,OAC1CA,EAAen3Z,MAAM,CAAC,UAAW,SAAWiwT,IAAeknG,EAAe9za,IAAI,YAC9E8za,EAAen3Z,MAAM,CAAC,UAAW,SAAWiwT,GAAcknG,EAAeh0a,IAAI,aAAesuN,KAExFmmd,GAAoB,IAAd3gQ,IAAiC,OAAfytU,SAAe,IAAfA,QAAA,EAAAA,GAAiBvhvB,IAAI8za,KAAqBjla,gBAClEs/M,EAAYsmd,EAAIz0qB,IAAI,aACpBouN,EAAWqmd,EAAIz0qB,IAAI,YAEzB,OACE,cAAC00b,EAAA,EAAD,iBAEI7xE,QAFJ,IAEIA,OAFJ,EAEIA,EAAS59W,KAAI,SAAC+pZ,GACZ,OAAQA,EAAO9xX,IACb,IAAK,gBAAiB,OAAO,cAAC,IAAD,CAAUzyB,KAAMA,GAAQ,IAAqB2hR,cAAeu2d,GAAoBr/nB,IAA9C0rS,EAAO9xX,IACtE,IAAK,eAAgB,OAAQzyB,EAG3B,cAACwhR,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiD4N,EAAStjH,IAAI,iBAAmB,KAA5CgvZ,EAAO9xX,IAF5C,cAAC,IAAD,CAAUzyB,KAAM64G,EAAStjH,IAAI,iBAAmB,IAAqBosR,cAAeu2d,GAAoBr/nB,IAA9C0rS,EAAO9xX,IAGnE,IAAK,eAAgB,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiD4N,EAAStjH,IAAI,gBAAkB,KAA3CgvZ,EAAO9xX,IACxE,IAAK,QAAS,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiD4N,EAAStjH,IAAI,UAAY,KAArCgvZ,EAAO9xX,IACjE,IAAK,UAAW,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiDk9P,GAAYC,GAAY,KAApCm8C,EAAO9xX,IACnE,IAAK,eAAgB,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiD4N,EAAStjH,IAAI,iBAAmB,KAA5CgvZ,EAAO9xX,IACxE,IAAK,gBAAiB,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAAiD4N,EAAStjH,IAAI,iBAAmB,KAA5CgvZ,EAAO9xX,IACzE,IAAK,gBAAiB,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAuB6B,MAAO,CAAE9/B,SAAU,KAAnE,SAA2E6rC,EAAStjH,IAAI,iBAAmB,KAAtEgvZ,EAAO9xX,IACzE,IAAK,qBAAsB,OAAO,cAAC+uP,EAAA,EAAD,CAA2B52M,UAAWF,EAAQmsqB,sBAA9C,SAChC,eAACzwb,EAAA,EAAD,CAAKx5O,QAAQ,OAAOurqB,aAAa,SAAS1tqB,WAAW,SAASqC,MAAO,IAAKi2C,OAAO,OAAjF,UAEIzM,EACE,eAAC8vM,EAAA,EAAD,CAAKt5O,MAAM,OAAOF,QAAQ,OAAOK,cAAc,SAASwxC,UAAU,SAAlE,UACE,cAACzT,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAEoV,2BAAyB+wL,KAAe,MAE7C,cAAC14G,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACuB,kBAAby4G,EAAwBA,EAAWA,GAAY,SAI3D,eAACyiG,EAAA,EAAD,CAAKt5O,MAAM,OAAX,UACE,eAACwmC,EAAA,EAAD,CACEjI,WAAW,EACXn+G,MAAOw2N,GAAa,GACpB6yc,cAAc,EACdvpjB,SAAUsqoB,GAAwBjuU,GAJpC,UAME,cAACt7T,EAAA,EAAD,CAAU7gH,MAAO,KAAjB,eACCslC,kBAAgBh4B,KAAI,gBAAGtN,EAAH,EAAGA,MAAOulC,EAAV,EAAUA,GAAIC,EAAd,EAAcA,UAAd,OACnB,cAACq7E,EAAA,EAAD,CAAmB7gH,MAAOA,EAA1B,SACE,cAAC89G,EAAA,EAAD,CACEE,QAAQ,UACRzT,MAAM,UAFR,SAIGl6E,EAAEmV,MALQD,SAUnB,cAACi1R,EAAA,EAAD,CACEx6T,MAAK,OAAEy2N,QAAF,IAAEA,IAAY,GACnBj1G,UAAWg1G,EACXr4G,WAAW,EACX2B,SAAUwqoB,GAAuBnuU,GACjCnyS,OAAQugnB,GAAqBpuU,QAMnC/yT,GAAyB,YAAdotG,GAA2B,cAACtrG,EAAA,EAAD,CAAOtL,MAAO,CAAEiW,OAAQ,GAAIj2C,MAAO,GAAI4sC,YAAa,IAAM1B,IAAKogoB,EAAQ//nB,YAAY,SAGzH/B,EACE,cAAC4V,EAAA,EAAD,CAAYthD,UAAWF,EAAQmqT,cAAex+Q,QAAS,kBAAMi1T,EAAmBjC,IAAW36T,UAAWg1G,EAAtG,SACE,cAAC,IAAD,MAGF,cAACjoG,EAAA,EAAD,CAASC,MAA2En+F,EAAnEmmM,EAAqE,0CAAvD,mDAA/B,SACE,+BACE,cAACx3F,EAAA,EAAD,CAAYthD,UAAWF,EAAQmqT,cAAex+Q,QAAS,kBAAMi1T,EAAmBjC,IAAW36T,UAAWg1G,EAAtG,SACE,cAAC,IAAD,cAtDoC6gM,EAAO9xX,IA6DzD,IAAK,iBAAkB,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SAE1BqL,EACI07jB,IAAuBn5jB,EAAStjH,IAAI,MAClC,cAAC,IAAD,IACA,KACF,cAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2CAAlB,SACA,cAACsmW,EAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAASwkjB,IAAuBn5jB,EAAStjH,IAAI,MAC7C8gH,QAAS,kBAAM27jB,IAAuBn5jB,EAAStjH,IAAI,MAAQ60a,EAAgBvxT,GAAY,WAV9B0rS,EAAO9xX,IAe1E,IAAK,SAAU,OAAO,cAAC+uP,EAAA,EAAD,CAAWv2K,MAAOs5S,EAAOt5S,MAAzB,SACpB,cAACihB,EAAA,EAAD,CAAY7V,QAASqhoB,GAAuBruU,EAAUvmJ,GAAtD,SACE,cAAC,IAAD,OAFuDyhI,EAAO9xX,SA3F3DomF,EAAStjH,IAAI,YAwGlC,cAAC4sR,EAAA,EAAD,CACEx9J,SAAUA,GAEV8R,gBAAiB,CAAE86J,SAAU,MAAOK,WAAY,UAChD08I,aAAa,EACbnyU,KAAMttG,QAAQ81H,IALhB,SAOE,eAACyhM,EAAA,EAAD,CAAKn/O,EAAG,EAAR,UACE,cAAC8mC,EAAA,EAAD,CAAUW,UAAU,EAApB,SACE,cAAC1D,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,iDAHT,OAMGkqM,SANH,IAMGA,QANH,EAMGA,GAAatzN,WAAWqG,KAAI,SAAC4+qB,EAAYtjrB,GAAb,OAC3B,cAACi4G,EAAA,EAAD,CAAoCsI,QAAS,WAC3C6goB,GAA2B99D,EAAW,GAAG7jrB,IAAI,mBAAqB6jrB,EAAW,GAAG7jrB,IAAI,UACpF0sR,GAAY,OAFd,SAIE,eAAC53M,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BkukB,EAAW,KACrC,cAACpukB,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BkukB,EAAW,GAAG7jrB,IAAI,mBAAqB6jrB,EAAW,GAAG7jrB,IAAI,eANxE6jrB,EAAW,GAAKtjrB,gB,iNC3WrCkrH,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C2rqB,WAAY,CACVpwnB,WAAY,UAEdqwnB,gBAAiB,CACfxqoB,UAAWphC,EAAMZ,UACjB+4C,aAAcn4C,EAAMZ,UACpBmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1B4C,SAAU,SACVoM,WAAY,WACZr7C,QAAS,eAEX2rqB,cAAe,CACbhsnB,WAAY,WAEdisnB,eAAgB,CACdjsnB,WAAY,WAEdksnB,gBAAiB,CACflsnB,WAAY,WAEdmsnB,UAAW,CACTprqB,QAAS,WACTi5C,cAAe,YACfz5C,MAAO,QACP2xC,UAAW,UAEbk6nB,iBAAkB,CAChBrrqB,QAAS,WACTi5C,cAAe,YACfz5C,MAAO,QACP2xC,UAAW,cAoCAm6nB,EAhCM,SAAC,GAAc,IAAb3hpB,EAAY,EAAZA,OACfvsB,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAER,OACE,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,aAAaV,UAAWF,EAAQ4tqB,gBAA/D,UACe,cAAXrhpB,GACA,cAAC5sB,EAAA,EAAD,CAAMO,UAAWF,EAAQ+tqB,gBAAzB,SACE,cAACztoB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQguqB,UAAW3ioB,QAAQ,EAAlE,SACGx4F,EAAE,8CAII,YAAX05E,GACA,cAAC5sB,EAAA,EAAD,CAAMO,UAAWF,EAAQ6tqB,cAAzB,SACE,cAACvtoB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQiuqB,iBAAkB5ioB,QAAQ,EAAzE,SACGx4F,EAAE,4CAII,aAAX05E,GACA,cAAC5sB,EAAA,EAAD,CAAMO,UAAWF,EAAQ8tqB,eAAzB,SACE,cAACxtoB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQguqB,UAAW3ioB,QAAQ,EAAlE,SACGx4F,EAAE,iD,kBC7DFs7tB,EAAmB,SAAC/oY,EAAaimF,GAC5C,OACE,eAAC,IAAMh6K,SAAP,WAC2B,YAAvB+zF,EAAY74Q,QACZ,cAACuqL,EAAA,EAAD,UACE,0CADcu0K,EAAU,WAIH,YAAvBjmF,EAAY74Q,QACZ,cAAC,IAAM8kL,SAAP,UACG85K,IAAiBI,YAAYnmF,EAAY3zC,UAAW45H,IADvD,UAAwBA,EAAxB,YAAmCjmF,EAAY74Q,WAPnD,UAAwB8+V,KAef+iT,EAAwB,SAAChpY,EAAaimF,GACjD,OACE,cAACv0K,EAAA,EAAD,UACE,cAAC,EAAD,CAAcvqL,OAAQ64Q,EAAY74Q,UADpB8+V,IAMPgjT,EAAoB,SAACjpY,EAAaimF,GAC7C,OACE,cAACv0K,EAAA,EAAD,UACE,cAAC,IAAD,CAAM/pL,MAAM,UAAUh3F,GAAI2gZ,IAA8BwB,gBAAgB9yC,GAAxE,SACE,cAAC9kQ,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,SACG,MAAQ+5P,EAAYr9U,QAHXsja,K,+JCCb,SAASv6O,EAAUvlG,GAA6E,IAA7D34G,EAA6D,uDAA7C,IAAK07uB,EAAwC,uDAAf1qvB,IACtF,IAEE,OAAO2qvB,EAAM,GAAIhjoB,EAAO34G,EAAO07uB,GAC/B,MAAOp2sB,GACP,MAAO,CAAEuyS,MAAO,yBAAF,OAA2BvyS,EAA3B,OAKX,SAASs2sB,EAEdvjvB,GAKG,IAHH2H,EAGG,uDAHa,EAEhBuwiB,EACG,uDADe,OAEZk/L,EAAavxhB,EAAU7lN,EAAQ2H,GAErC,OAAI67uB,EAASpM,GAAcl/L,EAClBqrM,EAAgBvjvB,EAAQ2H,EAAQ,EAAGuwiB,GAGrCk/L,EAYT,SAASkM,EACPnjvB,EACA5I,GAIiC,IAHjCoQ,EAGiC,uDAHhBhP,IACjB0qvB,EAEiC,uDAFR1qvB,IACzBuuC,EACiC,uDADhB,cAEjB,cAA6BA,EAA7B,GAAOiH,EAAP,KAAgBs1sB,EAAhB,KAGA,GACW,MAATlsvB,GACC,CAAC,SAAU,UAAW,UAAU6N,gBAAgB7N,KAAW,YAAMA,GAElE,OAAOA,EAGT,IAAMmsvB,EAAcC,EAAexjvB,EAAK5I,GAIxC,IAAKmsvB,EAAYnrjB,WAAW,YAC1B,OAAOmrjB,EAQT,GAAKnsvB,EAAD,8BACF,OAAOA,EAMT,IAAMqsvB,EACiF,kBAA7ErsvB,EAAD,wCACDA,EAAD,wCACDoQ,EAGN,GAAuB,IAAnBi8uB,EAEF,OAAOF,EAAYjvqB,QAAQ,UAAW,IAIxC,GAAItmC,EAAQ52C,GACV,MAAO,eAIT,IAAMssvB,EAAkBtsvB,EACxB,GAAIssvB,GAAqD,oBAA3BA,EAAgBtiuB,OAC5C,IACE,IAAMuiuB,EAAYD,EAAgBtiuB,SAElC,OAAO+huB,EAAM,GAAIQ,EAAWF,EAAiB,EAAGP,EAAen8sB,GAC/D,MAAO+F,IAQX,IAAMmqsB,EAAc95uB,MAAMC,QAAQhG,GAAS,GAAK,GAC5CwsvB,EAAW,EAITC,EAAY,YAAqBzsvB,GAEvC,IAAK,IAAM0svB,KAAYD,EAErB,GAAK/pvB,OAAOD,UAAUoD,eAAeP,KAAKmnvB,EAAWC,GAArD,CAIA,GAAIF,GAAYV,EAAe,CAC7BjM,EAAW6M,GAAY,oBACvB,MAIF,IAAMC,EAAaF,EAAUC,GAC7B7M,EAAW6M,GAAYX,EAAMW,EAAUC,EAAYN,EAAiB,EAAGP,EAAen8sB,GAEtF68sB,IAOF,OAHAN,EAAUlsvB,GAGH6/uB,EAkBT,SAASuM,EACPxjvB,EAGA5I,GAEA,IACE,GAAY,WAAR4I,GAAoB5I,GAA0B,kBAAVA,GAAuBA,EAA+B4svB,QAC5F,MAAO,WAGT,GAAY,kBAARhkvB,EACF,MAAO,kBAMT,GAAsB,qBAAX4qK,GAA0BxzK,IAAUwzK,EAC7C,MAAO,WAIT,GAAsB,qBAAXxgJ,QAA0BhzB,IAAUgzB,OAC7C,MAAO,WAIT,GAAwB,qBAAbsX,UAA4BtqC,IAAUsqC,SAC/C,MAAO,aAGT,GAAI,YAAetqC,GACjB,MAAO,iBAIT,GAAI,YAAiBA,GACnB,MAAO,mBAGT,GAAqB,kBAAVA,GAAsBA,IAAUA,EACzC,MAAO,QAGT,GAAqB,oBAAVA,EACT,2BAAqB,YAAgBA,GAArC,KAGF,GAAqB,kBAAVA,EACT,iBAAWmT,OAAOnT,GAAlB,KAIF,GAAqB,kBAAVA,EACT,yBAAmBmT,OAAOnT,GAA1B,KAOF,IAAM6svB,EAcV,SAA4B7svB,GAC1B,IAAMyC,EAA8BC,OAAO2qB,eAAertB,GAE1D,OAAOyC,EAAYA,EAAUG,YAAYkQ,KAAO,iBAjB9Bg6uB,CAAmB9svB,GAGnC,MAAI,qBAAqBq/C,KAAKwtsB,GAC5B,wBAAwBA,EAAxB,KAGF,kBAAkBA,EAAlB,KACA,MAAOn3sB,GACP,sCAAgCA,EAAhC,MAmBJ,SAASu2sB,EAASjsvB,GAChB,OARF,SAAoBA,GAElB,QAAS+svB,UAAU/svB,GAAOqjD,MAAM,SAASl9C,OAMlC6mvB,CAAW/5uB,KAAKC,UAAUlT,O,gDCrRnC,6DAkDIi7H,EAAUlyF,IAAM8E,YAAW,SAAiBW,EAAOzuC,GACrD,IAAIktvB,EAAkBz+sB,EAAM+oV,SACxBA,OAA+B,IAApB01X,GAAqCA,EAChDzvqB,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,KAAOA,EACjDuvqB,EAAe1+sB,EAAMullB,MACrBA,OAAyB,IAAjBm5H,GAAkCA,EAC1CC,EAAqB3+sB,EAAMqsV,YAC3BA,OAAqC,IAAvBsyX,EAAgC,aAAeA,EAC7Dx+W,EAAcngW,EAAMwX,KACpBA,OAAuB,IAAhB2oV,EAAuC,OAAd1wV,EAAqB,iBAAc79C,EAAYuuY,EAC/Er4O,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,YAAcA,EACpDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,YAAa,QAAS,cAAe,OAAQ,YAE9H,OAAOzF,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAuB,cAAZsgC,GAA2BxgC,EAAQwgC,GAAUu5Q,GAAY/5S,EAAQ+5S,SAAUw8P,GAASv2iB,EAAQu2iB,MAAO,CAC1I1vV,SAAU7mN,EAAQ6mN,UAClBw2F,IACF70U,KAAMA,EACNjmD,IAAKA,GACJklB,OA6CUs6D,iBA/GK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJg6G,OAAQ,EACRh2C,OAAQ,EAERs/C,OAAQ,OACRmuL,WAAY,EACZhkM,gBAAiB9pC,EAAM+pC,QAAQsqP,SAIjC0jB,SAAU,CACRh2Q,SAAU,WACVsX,OAAQ,EACRh6G,KAAM,EACN+gE,MAAO,QAIT80gB,MAAO,CACLloe,WAAY,IAIdungB,MAAO,CACLzqgB,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQsqP,QAAS,MAI/Cu5Y,OAAQ,CACN5goB,WAAYhtC,EAAMZ,QAAQ,GAC1BknC,YAAatmC,EAAMZ,QAAQ,IAI7BylN,SAAU,CACRxuK,OAAQ,OACRj2C,MAAO,MAwEqB,CAChC9sE,KAAM,cADOysE,CAEZ07C,I,6BCxHH,6EAgEIohM,EAAmBtzR,IAAM8E,YAAW,SAA0BW,EAAOzuC,GACzDyuC,EAAM8xF,QAApB,IACI9iD,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBmuC,EAAUr9E,EAAMq9E,QAChBwhoB,EAAe7+sB,EAAMgzE,SAErBp8E,GADWoJ,EAAMq3R,SACTr3R,EAAMpJ,OACdkotB,EAAwB9+sB,EAAMo7oB,eAC9BA,OAA2C,IAA1B0jE,EAAmC,MAAQA,EAI5DrouB,GAHOupB,EAAM17B,KACF07B,EAAMsxE,SACTtxE,EAAMxuC,MACNwhD,YAAyBhT,EAAO,CAAC,UAAW,UAAW,YAAa,UAAW,WAAY,WAAY,QAAS,iBAAkB,OAAQ,WAAY,WAE9J86X,EAAiBC,cACjB/nT,EAAW6roB,EAES,qBAAb7roB,GAA8D,qBAA3BqK,EAAQr9E,MAAMgzE,WAC1DA,EAAWqK,EAAQr9E,MAAMgzE,UAGH,qBAAbA,GAA4B8nT,IACrC9nT,EAAW8nT,EAAe9nT,UAG5B,IAAI0siB,EAAe,CACjB1siB,SAAUA,GAOZ,MALA,CAAC,UAAW,OAAQ,WAAY,QAAS,YAAYxwG,SAAQ,SAAUpI,GACnC,qBAAvBijH,EAAQr9E,MAAM5lC,IAA8C,qBAAf4lC,EAAM5lC,KAC5DslpB,EAAatlpB,GAAO4lC,EAAM5lC,OAGvBmgC,IAAMwB,cAAc,QAAS6D,YAAS,CAC3CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAA8B,QAAnBksmB,GAA4BpsmB,EAAQ,iBAAiB5tE,OAAOk5H,YAAW8gjB,KAAmBpokB,GAAYhkC,EAAQgkC,UACvJzhH,IAAKA,GACJklB,GAAQ8jB,IAAMyX,aAAaqrE,EAASqiiB,GAAenlnB,IAAMwB,cAAcuzE,IAAY,CACpFlgC,UAAW,OACXF,UAAW2B,kBAAK7B,EAAQp4C,MAAOo8E,GAAYhkC,EAAQgkC,WAClDp8E,OA8DUm6C,iBA5JK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ6jE,QAAS,cACTnC,WAAY,SACZosC,OAAQ,UAER+iP,cAAe,SACfgC,wBAAyB,cACzBliP,YAAa,GACb1G,YAAa,GAEb,aAAc,CACZ6D,OAAQ,YAKZ4joB,oBAAqB,CACnBxtqB,cAAe,cACfysC,WAAY,GAEZ1G,aAAc,IAIhB0noB,kBAAmB,CACjBztqB,cAAe,iBACfysC,WAAY,IAIdihoB,qBAAsB,CACpB1tqB,cAAe,SACfysC,WAAY,IAIdhL,SAAU,GAGVp8E,MAAO,CACL,aAAc,CACZmlE,MAAO/qB,EAAM+pC,QAAQ4G,KAAK3O,cAgHA,CAChC1uG,KAAM,uBADOysE,CAEZ88O,I,6BCxKH,gFAgGI6vE,EAAanjW,IAAM8E,YAAW,SAAoBW,EAAOzuC,GAC3D,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBgwqB,EAAwBl/sB,EAAMm/sB,iBAC9BA,OAA6C,IAA1BD,GAA2CA,EAE9DE,GADSp/sB,EAAMqxC,OACFrxC,EAAMquP,QAEnB53Q,GADUupB,EAAMwvE,QACRx8D,YAAyBhT,EAAO,CAAC,UAAW,YAAa,mBAAoB,SAAU,SAAU,aAEzG86X,EAAiBC,cACjB1sI,EAAS+wd,EAES,qBAAX/wd,GAA0BysI,IACnCzsI,EAASysI,EAAeD,QAAUC,EAAet+G,SAAWs+G,EAAeyN,cAG7E,IAAIvN,EAAMC,YAAiB,CACzBj7X,MAAOA,EACP86X,eAAgBA,EAChBxnN,OAAQ,CAAC,SAAU,aAErB,OAAO/4K,IAAMwB,cAAcsjtB,IAAWz/sB,YAAS,CAC7C,cAAeyuP,EACfn/M,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW4rV,GAAkB9rV,EAAQgtT,aAAcmjX,GAAoBnwqB,EAAQ8+oB,SAAUz/b,GAAUr/M,EAAQq/M,OAAQ,CAC/IgyG,MAAOrxT,EAAQksV,aACfF,EAAI3pV,QAAS,CACbwpV,OAAQ7rV,EAAQ6rV,OAChBrgJ,SAAUxrM,EAAQwrM,UAClBwgJ,EAAIxrT,UACNxgC,QAAS,CACPwtO,QAASxtO,EAAQwtO,QACjBxpM,SAAUhkC,EAAQgkC,SAClB/uG,MAAO+qE,EAAQ/qE,MACf60L,SAAU9pH,EAAQ8pH,SAClBwmjB,SAAUtwqB,EAAQswqB,UAEpB/tvB,IAAKA,GACJklB,OAiEUs6D,iBA9LK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ6jE,QAAS,QACT6pD,gBAAiB,YAInByhL,QAAS,GAGTxpM,SAAU,GAGV/uG,MAAO,GAGP60L,SAAU,GAGVwmjB,SAAU,GAGVtjX,YAAa,CACXjpR,SAAU,WACV1iG,KAAM,EACN+5G,IAAK,EAEL+H,UAAW,+BAIb+oS,YAAa,CAEX/oS,UAAW,+BAIbk8J,OAAQ,CACNl8J,UAAW,kCACX4I,gBAAiB,YAInB+ylB,SAAU,CACRxjmB,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,QAAS,aAAc,CAC3Dq2H,SAAUx5C,EAAMu5C,YAAYC,SAASoQ,QACrCsxN,OAAQl7Q,EAAMu5C,YAAY2hO,OAAO68D,WAKrC8R,OAAQ,CAKN/jS,OAAQ,EACR3M,cAAe,OACfgI,UAAW,iCACX,gBAAiB,CACfA,UAAW,kCAEb,WAAY,CACVA,UAAW,oCACX,gBAAiB,CACfA,UAAW,sCAMjBqoJ,SAAU,CAER1jJ,OAAQ,EACR3M,cAAe,OACfgI,UAAW,iCACX,gBAAiB,CACfA,UAAW,kCAEb,WAAY,CACVA,UAAW,yCA4Ge,CAChC7tH,KAAM,iBADOysE,CAEZ2sT,I,6BCzMH,qEAqCIo3B,EAAev6X,IAAM8E,YAAW,SAAsBW,EAAOzuC,GAC/D,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBqwqB,EAAwBv/sB,EAAMw/sB,kBAC9BA,OAA8C,IAA1BD,GAA2CA,EAC/DE,EAAez/sB,EAAMkmjB,MACrBA,OAAyB,IAAjBu5J,GAAkCA,EAC1CC,EAAc1/sB,EAAMi7E,QACpB85S,EAAyB/0X,EAAM+0X,uBAC/B4qV,EAAgB3/sB,EAAM84F,UACtB8mnB,EAA2B5/sB,EAAM4/sB,yBACjCnpuB,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,oBAAqB,QAAS,UAAW,yBAA0B,YAAa,6BAG7JqgW,EADoB9lW,IAAMgG,WAAWu7X,KACXz7B,MAE1BplR,EAAyB,MAAfykoB,EAAsBA,EAActjtB,EAEnC,MAAX6+E,GAAmBA,EAAQjlH,OAASs5G,KAAekwoB,IACrDvkoB,EAAU1gF,IAAMwB,cAAcuzE,IAAY1vE,YAAS,CACjD4vE,QAAS6wR,EAAQ,QAAU,QAC3BnxT,UAAWF,EAAQisC,QACnB7rC,UAAW,QACV2lV,GAAyB95S,IAG9B,IAAI6d,EAAY6mnB,EAUhB,OARiB,MAAb7mnB,GAAqBA,EAAU9iI,OAASs5G,KAAekwoB,IACzD1mnB,EAAYv+F,IAAMwB,cAAcuzE,IAAY1vE,YAAS,CACnD4vE,QAAS,QACTtgC,UAAWF,EAAQ8pD,UACnB/8B,MAAO,iBACN6jpB,GAA2B9mnB,IAGzBv+F,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAWmxT,GAASrxT,EAAQqxT,MAAO6lN,GAASl3gB,EAAQk3gB,MAAOjre,GAAW6d,GAAa9pD,EAAQilR,WACzH1iW,IAAKA,GACJklB,GAAQwkG,EAAS6d,MAuDP/nD,gBA5HK,CAElB1jE,KAAM,CACJyqH,KAAM,WACNxmD,SAAU,EACV8gC,UAAW,EACX+W,aAAc,GAIhB8qO,UAAW,CACT7hP,UAAW,EACX+W,aAAc,GAIhBk3Q,MAAO,GAGP6lN,MAAO,CACL1nd,YAAa,IAIfvjB,QAAS,GAGT6d,UAAW,IAiGqB,CAChCx0H,KAAM,mBADOysE,CAEZ+jV,I,gBCtIH,IAAI5gP,EAAahjL,EAAQ,KACrB0yL,EAAW1yL,EAAQ,MA+BvBF,EAAOC,QAJP,SAAqBO,GACnB,OAAgB,MAATA,GAAiBoyL,EAASpyL,EAAMmG,UAAYu8K,EAAW1iL,K,cC7BhER,EAAOC,QAAU,SAASD,GAoBzB,OAnBKA,EAAO6uvB,kBACX7uvB,EAAOy1O,UAAY,aACnBz1O,EAAOq/K,MAAQ,GAEVr/K,EAAOorC,WAAUprC,EAAOorC,SAAW,IACxCloC,OAAOyJ,eAAe3M,EAAQ,SAAU,CACvC4M,YAAY,EACZ/D,IAAK,WACJ,OAAO7I,EAAOmtB,KAGhBjqB,OAAOyJ,eAAe3M,EAAQ,KAAM,CACnC4M,YAAY,EACZ/D,IAAK,WACJ,OAAO7I,EAAO8H,KAGhB9H,EAAO6uvB,gBAAkB,GAEnB7uvB,I,eCnBR,IAOI8uvB,EACAC,EARA/7tB,EAAUhzB,EAAOC,QAAU,GAU/B,SAAS+uvB,IACL,MAAM,IAAItivB,MAAM,mCAEpB,SAASuivB,IACL,MAAM,IAAIvivB,MAAM,qCAsBpB,SAASwivB,EAAW16gB,GAChB,GAAIs6gB,IAAqBnxsB,WAErB,OAAOA,WAAW62L,EAAK,GAG3B,IAAKs6gB,IAAqBE,IAAqBF,IAAqBnxsB,WAEhE,OADAmxsB,EAAmBnxsB,WACZA,WAAW62L,EAAK,GAE3B,IAEI,OAAOs6gB,EAAiBt6gB,EAAK,GAC/B,MAAMtnO,GACJ,IAEI,OAAO4hvB,EAAiBhpvB,KAAK,KAAM0uO,EAAK,GAC1C,MAAMtnO,GAEJ,OAAO4hvB,EAAiBhpvB,KAAKhB,KAAM0vO,EAAK,MAvCnD,WACG,IAEQs6gB,EADsB,oBAAfnxsB,WACYA,WAEAqxsB,EAEzB,MAAO9hvB,GACL4hvB,EAAmBE,EAEvB,IAEQD,EADwB,oBAAjB1jnB,aACcA,aAEA4jnB,EAE3B,MAAO/hvB,GACL6hvB,EAAqBE,GAjB5B,GAwED,IAEIE,EAFA99lB,EAAQ,GACR+9lB,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaD,IAGlBC,GAAW,EACPD,EAAaxovB,OACb0qJ,EAAQ89lB,EAAa/+uB,OAAOihJ,GAE5Bg+lB,GAAc,EAEdh+lB,EAAM1qJ,QACN4ovB,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAI7lpB,EAAU2lpB,EAAWI,GACzBF,GAAW,EAGX,IADA,IAAIv8uB,EAAMw+I,EAAM1qJ,OACVkM,GAAK,CAGP,IAFAs8uB,EAAe99lB,EACfA,EAAQ,KACCg+lB,EAAax8uB,GACds8uB,GACAA,EAAaE,GAAYhsP,MAGjCgsP,GAAc,EACdx8uB,EAAMw+I,EAAM1qJ,OAEhBwovB,EAAe,KACfC,GAAW,EAnEf,SAAyBp7d,GACrB,GAAI+6d,IAAuB1jnB,aAEvB,OAAOA,aAAa2oJ,GAGxB,IAAK+6d,IAAuBE,IAAwBF,IAAuB1jnB,aAEvE,OADA0jnB,EAAqB1jnB,aACdA,aAAa2oJ,GAExB,IAEW+6d,EAAmB/6d,GAC5B,MAAO9mR,GACL,IAEI,OAAO6hvB,EAAmBjpvB,KAAK,KAAMkuR,GACvC,MAAO9mR,GAGL,OAAO6hvB,EAAmBjpvB,KAAKhB,KAAMkvR,KAgD7Cw7d,CAAgBjmpB,IAiBpB,SAASkmpB,EAAKj7gB,EAAK7rO,GACf7D,KAAK0vO,IAAMA,EACX1vO,KAAK6D,MAAQA,EAYjB,SAAS4qJ,KA5BTvgI,EAAQywe,SAAW,SAAUjvR,GACzB,IAAI1kN,EAAO,IAAIvpB,MAAMiC,UAAU7B,OAAS,GACxC,GAAI6B,UAAU7B,OAAS,EACnB,IAAK,IAAImB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAClCgoB,EAAKhoB,EAAI,GAAKU,UAAUV,GAGhCupJ,EAAMngJ,KAAK,IAAIu+uB,EAAKj7gB,EAAK1kN,IACJ,IAAjBuhI,EAAM1qJ,QAAiByovB,GACvBF,EAAWK,IASnBE,EAAKxsvB,UAAUoggB,IAAM,WACjBv+f,KAAK0vO,IAAIznO,MAAM,KAAMjI,KAAK6D,QAE9BqqB,EAAQg8F,MAAQ,UAChBh8F,EAAQ8ta,SAAU,EAClB9ta,EAAQo5E,IAAM,GACdp5E,EAAQ08tB,KAAO,GACf18tB,EAAQxE,QAAU,GAClBwE,EAAQg7d,SAAW,GAInBh7d,EAAQyqB,GAAK81G,EACbvgI,EAAQ28tB,YAAcp8lB,EACtBvgI,EAAQ8pK,KAAOvpC,EACfvgI,EAAQ4qB,IAAM21G,EACdvgI,EAAQ48tB,eAAiBr8lB,EACzBvgI,EAAQ68tB,mBAAqBt8lB,EAC7BvgI,EAAQ06E,KAAO6lD,EACfvgI,EAAQ88tB,gBAAkBv8lB,EAC1BvgI,EAAQ+8tB,oBAAsBx8lB,EAE9BvgI,EAAQ+W,UAAY,SAAUz2B,GAAQ,MAAO,IAE7C0f,EAAQ0hJ,QAAU,SAAUphK,GACxB,MAAM,IAAI5G,MAAM,qCAGpBsmB,EAAQg9tB,IAAM,WAAc,MAAO,KACnCh9tB,EAAQi9tB,MAAQ,SAAUx6lB,GACtB,MAAM,IAAI/oJ,MAAM,mCAEpBsmB,EAAQk9tB,MAAQ,WAAa,OAAO,I,gBCvLpC,IAAI1rvB,EAAStE,EAAQ,KACjB0jL,EAAY1jL,EAAQ,MACpB2jL,EAAiB3jL,EAAQ,MAOzBi6K,EAAiB31K,EAASA,EAAO41K,iBAAcx5K,EAkBnDZ,EAAOC,QATP,SAAoBO,GAClB,OAAa,MAATA,OACeI,IAAVJ,EAdQ,qBADL,gBAiBJ25K,GAAkBA,KAAkBj3K,OAAO1C,GAC/CojL,EAAUpjL,GACVqjL,EAAerjL,K,6BCtBrBP,EAAQuhN,YAAa,EACrBvhN,EAAO,aAAc,EAErB,IAAIkwvB,EAAWjwvB,EAAQ,KAUnB6oQ,EARwB,SAA+B/5N,EAAOniB,EAAU6xT,GAC1E,OAAK,EAAIyxa,EAASC,oBAAoBphtB,EAAMniB,IAIrC,KAHE,IAAIngB,MAAM,iBAAmBmgB,EAAnB,kBAAuD6xT,EAAgB,OAO5Fz+U,EAAO,QAAc8oQ,G,gBChBrB,IAAIpiF,EAAezmL,EAAQ,MACvBsyL,EAAWtyL,EAAQ,MAevBF,EAAOC,QALP,SAAmBgJ,EAAQG,GACzB,IAAI5I,EAAQgyL,EAASvpL,EAAQG,GAC7B,OAAOu9K,EAAanmL,GAASA,OAAQI,I,gBCbvC,IAAI8loB,EAAKxmoB,EAAQ,KACbmwvB,EAAanwvB,EAAQ,KACzBF,EAAOC,QAAUC,EAAQ,KAAoB,SAAU+I,EAAQG,EAAK5I,GAClE,OAAOkmoB,EAAGlrjB,EAAEvyE,EAAQG,EAAKinvB,EAAW,EAAG7vvB,KACrC,SAAUyI,EAAQG,EAAK5I,GAEzB,OADAyI,EAAOG,GAAO5I,EACPyI,I,cCNT,IAAI5C,EAAiB,GAAGA,eACxBrG,EAAOC,QAAU,SAAUsmK,EAAIn9J,GAC7B,OAAO/C,EAAeP,KAAKygK,EAAIn9J,K,yKCArBknvB,E,eAFCC,EAAmB,kB,SAEpBD,K,2DAAAA,E,qCAAAA,M,KAKL,IAAME,EAAkB,SAACpnvB,EAAa5I,GAC3C,GAAI4I,EAAK,CACP,IAAMqnvB,EAAcj9tB,OAAOk9tB,aACvBD,IACFj9tB,OAAOk9tB,aAAP,2BACKD,GADL,kBAEGrnvB,EAAM5I,OAMFmwvB,EAA2B,SAACvnvB,GAAyC,IAAD,IAA3BmgG,EAA2B,uDAAT,IAChE++O,EAAQ,UAAG90T,cAAH,iBAAG,EAAQk9tB,oBAAX,aAAG,EAAuBtnvB,GACpCk/U,GACF3qS,YAAW,WACT6ysB,EAAgBpnvB,EAAK,QACpBmgG,K,6BCxBP,wEAiBI/kD,EAjBJ,uBAmBaC,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,KAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,IAAvC,qDAA+G,CAC7G7Y,UAGGp0B,kBAGIm4pB,EAAkB,kBAAMl4nB,YACnC8M,KACA,SAAC3Y,GAAD,OAAiDA,EAAMjjC,IAAI,c,8JClB7D,SAAS+nvB,EAAU/ioB,GACjB,IACE,OAAOA,EAASsoM,OAChB,MAAOjpT,GACP4f,QAAQ7Z,MAAM,2BAA4B/F,GAE5C,OAAO2gH,EAcT,SAASgjoB,EAAYhjoB,GACnB,GAAIA,EAAStjB,QAAU,KAAOsjB,EAAStjB,OAAS,IAC9C,OAAOsjB,EAGT,IAAM56G,EAAQ,IAAIvG,MAAMmhH,EAAS+gX,YAGjC,MADA37d,EAAM46G,SAAWA,EACX56G,EAGR,SAAS69uB,IAA2D,IAA5ChgtB,EAA2C,uDAApB,GAAIi0D,EAAgB,uCAK3DgxN,EAAWx4R,mBAASrK,WAAa,cAEvC,OAAO,2BACF4d,GADL,IAEEklR,QAAQ,2BACFllR,EAAQklR,SAAW,IADlB,kBAEJD,EAAWhxN,MAKX,SAASsB,EAAQ0ke,GAA+C,IAAjCj9c,EAAgC,uDAAJ,GAC1DijoB,EAAiB,CACrBC,OAAQ,mBACR,eAAgB,oBAGZlgtB,EAAO,eACRg9E,GAGDxnB,EAAMyke,EAuBV,OArBAj6hB,EAAQklR,QAAR,2BACK+6b,GACAjgtB,EAAQklR,SAGTllR,EAAQmgtB,UAAmF,IAAxE,CAAC,MAAO,UAAU3ruB,SAASwrB,EAAQq7D,QAAU,OAAOjuD,iBAErD,MAAhBpN,EAAQyqC,MACVzuD,QAAQ7Z,MAAM,2CAEhBqzF,KAA8B,IAAtBA,EAAIhhF,QAAQ,KAAc,IAAM,KAAO4oM,YAAqBp9K,EAAQmgtB,gBACrEngtB,EAAQmgtB,SAGbngtB,EAAQmgtB,UACU,MAAhBngtB,EAAQyqC,MACVzuD,QAAQ7Z,MAAM,2CAEhB69B,EAAQyqC,KAAOmqD,YAAc50F,EAAQmgtB,UAGhCh7b,MAAM3vN,EAAKx1D,GACfuqC,KAAKw1qB,GACLx1qB,KAAKu1qB,GACLv1qB,MAAK,SAACv7B,GAAD,MAAW,CAAEA,WAClB2rJ,OAAM,SAACv1J,GAAD,MAAU,CAAEA,UAYR,SAASg7sB,EAAgB5qpB,GAA0C,IAA7BwnB,EAA4B,uDAAJ,GACrE+xkB,EAAariqB,IAAM30B,IAAI,SACzBioC,EAAO,eACNg9E,GAEL,GAAkB,MAAd+xkB,EAAoB,CACtB,IAAM96lB,EAAQv/C,cAAkBq6oB,EAAWp0pB,YAE3C3e,QAAQ7Z,MAAM,QAAS,CACrB8xF,QACA86lB,aACAr6oB,sBAGW,MAATu/C,IACFj0D,EAAUggtB,EAAehgtB,EAASi0D,IAGtC,OAAOsB,EAAQC,EAAKx1D,K,wKC5FhBu0jB,EAAcz3Y,cAIdujiB,EAGF,CACF/7nB,QAN6BswU,cAO7Bj2X,MAAO41hB,EAAYh/lB,eAAe,UAG7B,SAAS+qvB,EAAT,GAMH,IALFh8nB,EAKC,EALDA,QACA3lD,EAIC,EAJDA,MAKe,MAAX2lD,IACF+7nB,EAAc/7nB,QAAUA,GAEb,MAAT3lD,IACF0hrB,EAAc1hrB,MAAQA,GAOX,SAAS40M,EAAc92D,GAKpC,OAAOxzI,UAAO,WAAP,EAJkB,CACvB,SAAChB,GAAD,OAAmBA,IAGdgB,CAGLjB,0BAAgB,aACdu4qB,OAAQC,wBAAcH,EAAc/7nB,SACpCo8H,gBACAjvI,gBAEGgrG,O,6BCtFT,kCACO,IAAM5oK,EAAsB,qB,6BCCnC,IAAI8mK,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,iEACD,aAEJ3K,EAAQywH,QAAUq4I,G,mECbZwof,EAAW51nB,IAAOn+C,IAAV,0EAaCq7lB,IATC,kBACd,cAAC04E,EAAD,UACE,qBACEjmoB,ICXS,qzYDYT6iB,IAAI,mB,6BEFH,SAASqjnB,EAAY70Y,GAG1B,OAAOA,EAAK80Y,YAXd,mC,6BCIO,SAASnpa,EAAS9nV,GACvB,OAAgB,MAATA,KAAmB+F,MAAMC,QAAQhG,IAA2B,IAAjBA,EAAMmG,QASnD,SAAS+wa,EAAS9ra,GACvB,IAAI8lvB,EAAMlpvB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACzE,OAAOoD,IAAQ08U,EAAS18U,EAAIpL,QAAwB,KAAdoL,EAAIpL,OAAgBkxvB,GAAOppa,EAAS18U,EAAIy2C,eAAsC,KAArBz2C,EAAIy2C,cAQ9F,SAASi1X,EAAe1ra,GAC7B,OAAOA,EAAIi2G,eA3Bb,qE,sTCmFM8voB,EAAyBh2nB,aAbC,SAAC3sF,GAQ3BA,EALFqoF,WAKEroF,EAJFsoF,gBAHF,IAKEs6nB,EAEE5itB,EAFF4itB,kBACGxouB,EANL,YAOI4lB,EAPJ,GASA,OAAO,cAAC,IAAD,2BAAkB5lB,GAAUwouB,MAGNj2nB,EAAgC,YAA2F,IAAzF37C,EAAwF,EAAxFA,MAAOs3C,EAAiF,EAAjFA,gBAAiBD,EAAgE,EAAhEA,WACvF,OAAO,aACLiC,WAAW,OAAD,OAASkrR,IAAT,KACVh3Q,YAAaxtD,EAAMZ,UACnB4yC,QAAS,EACTqE,OAAQ,OACRyQ,KAAM,OACN1mD,MAAO,QACJi3C,EAAU,eAERI,YAAY,KAAMH,GACjB,CACAtF,QAAS,EACT5xC,MAAO,EACPi2C,OAAQ,EACRh2C,OAAQ,EACRymD,KAAM,SAEN,CACAlmD,QAASZ,EAAMZ,QAAQ,EAAG,OAG9B,CACA4yC,QAAS,OA6MTtgF,EAAkBkG,YAAyB,CAC/Cw0D,IAAKx9C,cACLm2C,MAAOv/C,cACPgF,OAAQF,gBAGKyvB,sBACb00C,cACA1uC,aAxCgB,SAACC,GAAD,MAAwB,CACxC63C,SAAU,CACRr3C,eAAgB,gBAChB61C,OAA0B,EAAlBr2C,EAAMZ,UACd,UAAW,CACT0qC,gBAAiB,uBAGrB+noB,kBAAmB,CACjB9mpB,MAAO/qB,EAAM+pC,QAAQsO,aAAer4C,EAAM+pC,QAAQsO,aAAer4C,EAAM+pC,QAAQE,QAAQqO,aACvFiD,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhBq3nB,aAAc,CACZ1xqB,MAAO,OACPi2C,OAAQ,OACRrE,QAAS,GACT3xC,OAAQ,EACRC,SAAU,OACVyqB,MAAO/qB,EAAM+pC,QAAQU,OAAO0oI,MAE9B4+f,kBAAmB,CACjB3xqB,MAAyB,IAAlBJ,EAAMZ,UACbc,QAAS,OACTM,eAAgB,UAElB4zL,QAAS,CACPhzL,SAAU,WAYU,CAAE0yC,WAAW,IACnCW,aACA9Q,kBAAQjyE,GACRuiF,IALal6C,EA1KkC,SAAC/qC,GAChD,IACEgvC,EA0BEhvC,EA1BFgvC,QACA82W,EAyBE9lZ,EAzBF8lZ,UACAk9T,EAwBEhjtB,EAxBFgjtB,aACApstB,EAuBEoJ,EAvBFpJ,MACAssF,EAsBEljF,EAtBFkjF,KACApgG,EAqBEkd,EArBFld,OACA/d,EAoBEi7B,EApBFj7B,GACArM,EAmBEsnC,EAnBFtnC,QACAiiH,EAkBE36E,EAlBF26E,QACA0N,EAiBEroF,EAjBFqoF,WACAC,EAgBEtoF,EAhBFsoF,gBACA26nB,EAeEjjtB,EAfFijtB,UACAjwoB,EAcEhzE,EAdFgzE,SAEA5V,EAYEp9D,EAZFo9D,IACAW,EAWE/9D,EAXF+9D,OACAhI,EAUE/1D,EAVF+1D,MAGAqvK,GAOEplO,EATFwb,OASExb,EAPFolO,SACAp0L,EAMEhxC,EANFgxC,MAEAvwC,EAIET,EAJFS,SAvBF,EA2BIT,EAHFu/D,aAxBF,SAyBEhgD,EAEEvf,EAFFuf,SACAoD,EACE3iB,EADF2iB,cAEI6kE,EAAchgF,sBAAY2Y,eAC1BxJ,EAAWnP,sBAAYkP,eACvB8xnB,EAAoBC,IAAiB5zF,uBAAuBl+hB,GAC5DussB,EAAqC,OAAG17nB,QAAH,IAAGA,OAAH,EAAGA,EAAa3tH,IAAI,yCAEzDspH,EAAYggoB,YAAmB,CACnCjgoB,OACAntB,QACAgI,SACAX,MACAr4F,KACA41G,UACA73F,WAGIsguB,EAAkB78nB,YAAc,qBAChC30C,EAAU,CACdvhE,KAAM2gE,EAAMZ,QAAQ,GACpB9/D,MAAO0gE,EAAMZ,QAAQ,IAEnB6yqB,IACEG,GACFxxqB,EAAQvhE,KAAO2gE,EAAMZ,QAAQ,KAC7BwB,EAAQthE,MAAQ0gE,EAAMZ,WAEtBwB,EAAQvhE,KAAO2gE,EAAMZ,QAAQ,MAIjC,IAAcouD,EAAqC5sD,EAA3CvhE,KAA0Bs5G,EAAiB/3C,EAAxBthE,MACrB+yuB,EAAc9jsB,EAAS0C,SAEzBqhsB,EAA6B,OAAGJ,QAAH,IAAGA,IAAH,UAA+ClyqB,EAAM+pC,QAAQ+d,UAAU,KAAvE,MAC7B0viB,IACF86E,EAAgC76E,IAAiB3zF,4BAA8B,MAGjF,IAAMjsd,EACJ,eAAC,IAAD,yBACE5F,QAAQ,EACRi9Q,gBAAgB,EAChBltR,SAAUA,GACNmQ,GAJN,IAKEn0C,QAAS,CAAE3hE,KAAM2hE,EAAQ65C,UACzBlO,QAAO,+GAAE,SAACz8G,GACRq+F,IAAmB9rE,kBAAgB8ytB,aAAc5gsB,EAAc,CAC7D59C,GAAI6xB,KAEN2oE,GAAS9+D,EAAS,IAAIoL,KACtB8uE,GAAWA,EAAQz8G,MAErBkzG,QAAe,OAAP14G,QAAO,IAAPA,OAAA,EAAAA,EAASf,QAASe,EAAQ+e,MAAK,SAAC+ruB,GAAD,OAASA,IAAQH,KAAet+uB,IAAOs+uB,GAAe,CAC3FvooB,gBAAiBwooB,EACjB9knB,cACA7U,gBACE,CACF6U,cACA7U,gBAnBJ,UAsBE,qBAAKz6C,UAAWF,EAAQ+zqB,kBAAxB,SACE,cAAC,IAAD,CAAc7zqB,UAAWm0C,IAAWr0C,EAAQ6zqB,kBAAmB7zqB,EAAQ8zqB,cAAvE,SACE,qBAAK1xoB,MAAO,CAAClgC,QAAS,QAAtB,SACG40W,QAIP,cAAC68T,EAAD,CACEr6nB,gBAAiBA,EACjBs6nB,kBAAmB,CACjB5zqB,QAAS,CAAEisC,QAASjsC,EAAQ6zqB,oBAE9B5noB,QAASrkF,EACTm+X,uBAAwB,CACtBvlT,QAAS,SAEX6Y,WAAYA,IAEd,qBAAKn5C,UAAWF,EAAQ+zqB,kBAAxB,SACE,cAAC,IAAD,CAAc7zqB,UAAWm0C,IAAWr0C,EAAQ6zqB,kBAAmB7zqB,EAAQ8zqB,cAAvE,SACE,qBAAK1xoB,MAAO,CAAClgC,QAAS,QAAtB,SACG8xqB,YAOX,OAAkB,MAAX59e,EACL,cAAC,IAAD,CACEplJ,MAAOolJ,EACPnlJ,UAAU,QACVjxC,QAAS,CACPo2L,QAASp2L,EAAQo2L,SAJrB,SAOE,+BACGv8I,MAGLA,M,+IC9NE46nB,E,kDAMJ,WAAYzjtB,GAAQ,IAAD,8BACjB,cAAMA,IAND+8F,eAKY,IAJZjgG,MAAQ,CACbmsF,SAAU,MAGO,EAmBZy6nB,aAAe,SAACxlvB,GACrB,EAAKw6G,SAAS,CAAEuQ,SAAU/qH,EAAE4kB,SAC5B,IAAM63F,EAAU,EAAK36E,MAAM26E,QACvBA,GACFA,EAAQz8G,IAvBO,EA0BZylvB,cAAgB,WACrB,EAAKjroB,SAAS,CAAEuQ,SAAU,OACV,EAAKjpF,MAAMy6F,SAEzB,EAAKz6F,MAAMy6F,WA5Bb,EAAKsC,UAAYxiG,cAFA,E,sDAKnB,YAC2B,IAApBzkC,KAAKkqC,MAAM2tiB,OAAqC,IAApB73kB,KAAKkqC,MAAMygE,OAAmB3qG,KAAKgnC,MAAMmsF,UACxEnzH,KAAK4iH,SAAS,CACZuQ,SAAU,OAIiB,mBAApBnzH,KAAKkqC,MAAMygE,MAAsB3qG,KAAKkqC,MAAMygE,OAAS3qG,KAAKgnC,MAAMmsF,UACzEnzH,KAAK4iH,SAAS,CACZuQ,SAAUnzH,KAAKinI,UAAUn/F,Y,oBAoB/B,WAAiB,IAAD,OACd,EAoBI9nC,KAAKkqC,MAnBP5D,EADF,EACEA,SACA6mF,EAFF,EAEEA,OAFF,IAGE+3iB,iBAHF,MAGc,CACVroP,mBAAoB,KACpB/gC,aAAc,CACZ/7G,SAAU,SACVK,WAAY,SAEdn7J,gBAAiB,CACfm7J,WAAY,QACZL,SAAU,QAXhB,EAcE3xK,EAdF,EAcEA,YACA0/nB,EAfF,EAeEA,UACAt8nB,EAhBF,EAgBEA,SACAt4C,EAjBF,EAiBEA,QACA4ihB,EAlBF,EAkBEA,aACAxghB,EAnBF,EAmBEA,MAIA63C,EACEnzH,KAAKgnC,MADPmsF,SAII46nB,EAAmB5goB,EAASxI,IAAS+V,IAkC3C,OACE,gCAhCE,cAACqznB,EAAD,yBACEtyvB,IAAK,EAAKwrI,UACVhhC,MAAM,UACNyT,QAAQ,YACRmL,QAASv+E,EAAW,EAAKsntB,aAAe,MACpCx/nB,GALN,aAQIjB,EACI,cAAC,IAAD,CACAzT,QAAQ,YADR,SAGCyT,IAGW,MAAZqE,EACI,cAAC,IAAD,aACAI,KAAMJ,EACNp4C,UAAWF,EAAQ04C,MACfk8nB,IAGJhyJ,GAEI,aAUhB,cAAC,IAAD,yBACEnxf,KAAMttG,QAAQ81H,GAAY7sF,GAC1Bq+F,QAAS3kI,KAAK6tvB,cACd16nB,SAAUA,EACVW,WAAY,CACVxY,MAAO,CACLhgC,MAAOA,GAAS,UAGhB4plB,GATN,aAcIllqB,KAAKkqC,MAAM8jtB,iBACPvptB,WAAez7B,IAAIs9B,GAAU,SAAA4T,GAC7B,GAAKA,EAGL,OAAOzV,eAAmByV,EAAc,CAAE4znB,UAAW,EAAK+/E,mBAE1DvntB,Y,GA9HgB7B,aAsIjBwwC,sBACbgG,aAvKa,SAACC,GAAD,MAA+B,CAC5C02C,KAAM,CACJ3rB,MAAO/qB,EAAM+pC,QAAQC,KAAK,UAoKfjwC,CAEb04qB,I,6BC5LF,IAAIhniB,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1ImxO,SAAU,UACVtxQ,EAAG,6FACHuxQ,SAAU,YACRzwD,EAAOh7F,QAAQ3lF,cAAc,SAAU,CACzCw8H,GAAI,IACJC,GAAI,IACJvrF,EAAG,IACHigM,SAAU,UACVC,SAAU,YACRzwD,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCmxO,SAAU,UACVtxQ,EAAG,8MACHuxQ,SAAU,aACP,oBAELl8Q,EAAQywH,QAAUq4I,G,6BC3BlB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,uIACD,UAEJ3K,EAAQywH,QAAUq4I,G,qGCNNgqf,E,iBAAAA,K,wCAAAA,E,wDAAAA,E,kDAAAA,E,gCAAAA,E,gDAAAA,E,kCAAAA,E,sCAAAA,E,sDAAAA,E,kEAAAA,E,gEAAAA,E,gFAAAA,E,gDAAAA,E,kEAAAA,E,kFAAAA,E,6EAAAA,M,KAoBL,IAAMC,EAAb,sCACkBhuvB,KAAO+tvB,EAAeE,oBAgFzBhuC,EAGX,WACSj5qB,GAGN,yBAHMA,UAGP,KANchnC,KAAO+tvB,EAAeG,iC,gBCjH1C,IAAIC,EAAKjzvB,EAAQ,KACbkzvB,EAAKlzvB,EAAQ,MAEbomX,EAAO8sY,EACX9sY,EAAK6sY,GAAKA,EACV7sY,EAAK8sY,GAAKA,EAEVpzvB,EAAOC,QAAUqmX,G,mRCkDJjoK,EAAY,6BAsBnBg1iB,E,4MAEGC,sBAAwB,WAC7B,IACM16hB,EADe,EAAK5pL,MAAnBixE,WAC0Bv6F,MAAM,CAAC,iBAAkB3I,kBAC1D,OAA2B,IAAvB67M,EAAc/3N,KACT+3N,EAAc9qN,KAAI,SAAAurX,GAAY,OAAIA,EAAaxwX,IAAI,YAAUnB,UAE7D,I,EAIJ6rvB,mBAAqB,SAACrisB,GAAD,OAAmB,SAAC+6E,GAC9C,MAAyC,EAAKj9F,MAAvCS,EAAP,EAAOA,SAAU6wE,EAAjB,EAAiBA,SAAUL,EAA3B,EAA2BA,WAC3B,GAA2B,WAAvBgsB,EAAMn6G,OAAOtxB,MAAoB,CACnC,IACMgzvB,EADgBvzoB,EAAWp3G,IAAI,gBAAiBkU,kBACV1M,QAAO,SAACyvC,GAAD,OAAUA,EAAKj3C,IAAI,WAAaqoD,KAC3E,OAARovD,QAAQ,IAARA,KAAW5oG,gBAAMlL,IAAI,gBAAiBgnvB,IACtC/jtB,EAAS,IAAIioV,IAAoBz3Q,EAAWzzG,IAAI,gBAAiBgnvB,Q,EAG9DC,WAAa,kBAAM,EAAKH,wBAAwBjhvB,OAAM,SAAA6+C,GAAK,OAAIwisB,YAAQxisB,O,EACvEkwQ,SAAW,SAACnxT,GACjB,IAAOmxT,EAAY,EAAKpyR,MAAjBoyR,SACH,EAAKqyb,cACPryb,EAASnxT,I,4CAIb,WAAiB,IAAD,OACd,EAOInL,KAAKkqC,MANPm4R,EADF,EACEA,aACA/7R,EAFF,EAEEA,SACA4yC,EAHF,EAGEA,QACAiiC,EAJF,EAIEA,WACAxwE,EALF,EAKEA,SACA6wE,EANF,EAMEA,SAGIs4G,EAA2C34G,EAAWv6F,MAAM,CAAC,iBAAkB3I,kBACrF,OACE,uBACEqkT,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQm5kB,cAFrB,UAIE,eAAC,IAAD,CACE74kB,WAAW,EACXc,QAAS,EAFX,UAIE,cAAC,IAAD,CACEqmC,UAAU,EACV61P,UAAU,EACVp9R,UAAWF,EAAQylC,aACnBjjH,MAAOsE,KAAKwuvB,wBACZhzoB,SAAU,SAAC2rB,EAAOzrI,GAChB,IAAMmzvB,EAAyBzluB,iBAAO1tB,EAAMsN,KAAI,SAAAw3G,GAC9C,MAAQ,CACNp0D,MAAOo0D,EACPsuoB,eAAgB,aAGZ,OAARtzoB,QAAQ,IAARA,KAAW5oG,gBAAMlL,IAAI,gBAAiBmnvB,IACtClktB,EAAS,IAAIioV,IAAoBz3Q,EAAWzzG,IAAI,gBAAiBmnvB,MAEnEhya,YAAa,SAAClqS,GACZ,OACE,cAAC,IAAD,2BACMA,GADN,IAEE+mE,QAAQ,WACR54E,MAAM,oBACNkqF,YAAY,qBACZ6B,WAAW,cACX1+G,OAAQ,EAAKwgvB,aACb90oB,WAAW,EACXiD,WAAU,2BACLnqE,EAAOmqE,YADF,IAERC,eACE,qCACE,cAAC,IAAD,CAAgBE,SAAS,QAAzB,SACE,mBAAG7jC,UAAU,sBAAsBkiC,MAAO,CAACrV,MAAO,eAEnDtzD,EAAOmqE,WAAWC,0BASjC,cAAC,IAAD,CACEnjC,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ6oT,eAHrB,SAK0B,IAAvBjuK,EAAc/3N,KACb,cAAC,IAAD,CAAOk1H,UAAW,EAAlB,SACE,cAAC,IAAD,UACG6iG,EAAc9qN,KAAI,SAACgyC,GAClB,IAAMoR,EAAgBpR,EAAKj3C,IAAI,SACzB+qvB,EAA6B9zsB,EAAKj3C,IAAI,kBAC5C,OACE,eAAC,IAAD,WACE,cAAC,IAAD,UAAeqoD,IACf,cAAC,IAAD,UACE,eAAC,IAAD,CACE1wD,MAAOozvB,EACPtzoB,SAAU,EAAKizoB,mBAAmBrisB,GAFpC,UAIE,cAAC,IAAD,CAAU1wD,MAAM,QAAhB,mBAGA,cAAC,IAAD,CAAUA,MAAM,SAAhB,2BAVS0wD,UAkBrB,UAKP9lB,S,GA7HgC7B,aAmI1BwwC,sBACbgG,aAlJa,SAACC,GAAD,MAA+B,CAC5C6mT,eAAgB,CACd7vQ,cAAeh3C,EAAMZ,QAAQ,IAE/B+3kB,cAAe,CACb92kB,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,QACNgB,MAAO,QAETqjC,aAAc,CACZrjC,MAAO,YA0ITn8B,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAM87F,EACNk+J,eAAe,EACfhwC,oBAAoB,EACpB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IATPvyP,CAWbs5qB,I,qECtMUQ,E,gRAFCC,EAA8B,yB,SAE/BD,K,sBAAAA,E,+BAAAA,M,KAKL,IAAME,EAAwB,CACnC,CAACvzvB,MAAOqzvB,EAAmBG,UAAWputB,MAAO,aAC7C,CAACplC,MAAOqzvB,EAAmBI,cAAerutB,MAAO,kBAG7CsutB,GAAgC,mBACnCL,EAAmBG,UAAY,CAC9BputB,MAAO,qCACPkqF,YAAa,oCACbqkoB,WAAY,OAJsB,cAMnCN,EAAmBI,cAAgB,CAClCrutB,MAAO,uCACPkqF,YAAa,mDACbqkoB,WAAY,SATsB,GA+TvBp6qB,sBACb4pC,mBAxB0B,WAC1B,IAAMywoB,EAA6B1vf,cAC7B2vf,EAAyB1vf,cAS/B,OAPwB,SAAC74N,GACvB,MAAQ,CACNm0E,WAAYC,wBAAc4zoB,EAAd5zoB,CAA2Cp0E,GACvDwotB,qBAAsBF,EAA2BtotB,GACjDyotB,kBAAmBF,EAAuBvotB,QAMrB,SAAC2D,GAC1B,MAAO,CACLA,WACA+ktB,2BAA4B,SAACC,EAAqCnynB,GAChE7yF,EAAS,IAAI0mD,KAAiC,CAAEs+pB,kBAAiBnynB,qBAOrEviD,aApSa,SAACC,GAAD,MAA+B,CAC5Cyyf,OAAQ,CACN7xf,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAA0BY,EAAMZ,QAAQ,IAAxC,OAETs1qB,WAAY,CACVp0qB,SAAU,MAEZ49mB,cAAe,CACbvlkB,aAAc34C,EAAMZ,QAAQ,OA4RX,CAAE00C,WAAW,IAChC7vE,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMuxoB,EACNxnb,kBAAkB,EAClBC,oBAAoB,IAPTxyP,EAtR6C,SAAC/qC,GAC3D,IACEygE,EAaEzgE,EAbFygE,KACAsjD,EAYE/jH,EAZF+jH,SACAogQ,EAWEnkX,EAXFmkX,2BACAlzS,EAUEjxE,EAVFixE,WACAq0oB,EASEtltB,EATFsltB,qBACAC,EAQEvltB,EARFultB,kBACA9krB,EAOEzgC,EAPFygC,MACA03P,EAMEn4R,EANFm4R,aACA13R,EAKET,EALFS,SACA+ktB,EAIExltB,EAJFwltB,2BACAx2qB,EAGEhvC,EAHFgvC,QACAgC,EAEEhxC,EAFFgxC,MACAnvD,EACEme,EADFne,EAGF,EAA4D0Y,WAAuB,IAAnF,mBAAQortB,EAAR,KAA+BC,EAA/B,KACA,EAAsCrrtB,WAAuB,GAA7D,mBAAQ8tV,EAAR,KAAoBmW,EAApB,KAEMqnX,EAAsB50oB,GAAcA,EAAWp3G,IAAI,eACnDisvB,EAA4B70oB,GAAcA,EAAWp3G,IAAI,UAE/D0gC,aAAgB,WACVkmE,GACF+9R,EAAc,KAEf,CAAC/9R,IAEJ,IAAMu8B,EAAc,WAClBmnR,IACA93C,MAGIA,GAAc,WAClB5rS,KAeIslrB,GAAer/jB,oBAAS,SAACpzD,GAC7B,IAAMmynB,EAAkBx0oB,EAAWv6F,MAAM,CAAC,cAAe,UACzD8uuB,EAA2BC,EAAiBnynB,KAC3C,KAQH,OACE,cAAC,IAAD,CACE7yB,KAAMA,EACNg6B,QAASuC,EACT,kBAAgB,6BAChBrtB,WAAW,EACX0/K,OAAO,OACPrgN,QAAS,CACP64C,MAAOxE,IACLr0C,EAAQy0f,OADO,eAEbz0f,EAAQ02qB,WAAa3hmB,KAT7B,SAaE,uBAAMquK,SAAU+F,EAAap0K,EA7BM,SAACvyJ,KARd,WACxB,IAAMi0vB,EAAkBx0oB,EAAWv6F,MAAM,CAAC,cAAe,UACnDsvuB,EAAsB/0oB,EAAWv6F,MAAM,CAAC,SAAU,OACxD+pB,EAASv+B,YAAK,GAAD,OAAIirB,+BAAJ,YAAoCs4tB,EAApC,YAAuDO,KACpEhpnB,MAiCE,UACE,eAAC,IAAD,CAAajmG,GAAG,mCAAmCyotB,mBAAmB,EAAtE,UACE,cAAC,IAAD,CAAYhwoB,QAAQ,KAApB,SAAqC3tF,EAAXkiI,EAAa,mCAAwC,sCAC/D,IAAfskO,EACG,cAAC,IAAD,CAAY74Q,QAAQ,UAApB,SAA+B3tF,EAAE,mCACjC,eAAC,IAAD,CAAMytD,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAACgB,UAAW,IAA7D,UACE,cAAC,IAAD,CAAY5C,QAAQ,YAApB,SAAiC3tF,EAAE,yCACnC,cAAC,IAAD,CAAY2tF,QAAQ,YAAYzT,MAAM,gBAAgBqV,MAAO,CAACgB,UAAW,GAAzE,gBAA8EyzoB,QAA9E,IAA8EA,OAA9E,EAA8EA,EAAqBjvtB,cAI3G,cAAC,IAAD,UACkB,IAAfyxV,EACC,eAAC,IAAD,CAAM/4S,WAAW,EAAMP,WAAW,SAAlC,UACE,eAAC,IAAD,CAAM2B,GAAI,GAAIhB,MAAM,EAApB,UACE,cAAC,IAAD,CAAY8/B,QAAQ,UAAUzT,MAAM,cAApC,SACGl6E,EAAE,2CAEL,cAAC,QAAD,CACEvd,KAAK,cACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASijtB,EACT5tnB,eAAgB,SAAC7gB,GAAD,OAAYA,EAASA,EAAO1/E,MAAQ,IACpD03R,aAAc,SAACh4M,GAAD,OACZ,cAAC,IAAD,CAAU4pR,gBAAgB,EAA1B,SACG5pR,EAAO1/E,SAGZkqF,YAAaj/F,EAAE,0CACf02F,WAAYotoB,EACZr0oB,SApDQ,SAACgF,GAE3B71E,EAAS,IAAI4mD,KAA0C,CAAC4+pB,kBAAmBl4uB,oBAC3E0yB,EAASu/B,YAAO8krB,EAA6B,SAAU,QAkDrCxsoB,cAAe,SAAC2kB,EAAelxH,GAAhB,OAAgC65uB,EAAyB75uB,KAE1E2jG,iBAAkB,CAChBC,WAAW,SAMjBk2oB,GACE,eAAC,IAAD,CAAMn1qB,GAAI,GAAIhB,MAAM,EAApB,UACE,cAAC,IAAD,CAAY8/B,QAAQ,UAAUzT,MAAM,cAApC,SACGl6E,EAAEqjuB,EAAiCW,EAAoBr0vB,OAAOolC,SAEjE,cAAC,QAAD,CACEtyB,KAAK,SACL8qE,UAAW2nD,IACXtnB,WAAY,CACVhP,MAAM,EACNqgB,YAAaj/F,EAAEqjuB,EAAiCW,EAAoBr0vB,OAAOsvH,aAC3E5xC,UAAWF,EAAQ+qP,kBACnBjuM,YAAa34H,QAAQ0yvB,GACrB/jtB,QAASwjtB,EACTvmoB,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,OACvCs9H,eAAgB,SAAC7gB,GAAD,OAAYA,EAAOz8G,IAAIqrvB,EAAiCW,EAAoBr0vB,OAAO2zvB,aACnGvysB,WAAY,CACVykF,OAAQ,SAAA6unB,GACN,IACMlhM,EADWkhM,EAATp1sB,KACkBj3C,IAAIqrvB,EAAiCW,EAAoBr0vB,OAAO2zvB,YAI1F,OACE,cAAC,IAAD,yBAAU/poB,SAAU8qoB,EAAYr6nB,WAAeq6nB,EAAYt6nB,YAA3D,aACE,cAAC,IAAD,CAAMt8C,WAAW,EAAMP,WAAW,SAAlC,SAKE,cAAC,IAAD,CAAMO,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,SAAST,WAAW,aAAzE,SACE,cAAC,IAAD,CAAYygC,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDipd,YAQ3Dxkc,kBAAmB,SAAAlK,GAAM,OAAI,cAAC,IAAD,CAAYlF,MAAO,CAACkG,YAAa,EAAGvb,MAAQ5oG,QAAQ0yvB,GAAiD70qB,EAAM+pC,QAAQC,KAAK,KAA7ChqC,EAAM+pC,QAAQC,KAAK,UAE7HtpC,OAAQqnQ,YAAuB/nQ,GAC/BqpR,aAAc,QACdn5O,0BAA0B,EAC1B5I,cAAe,SAAEvsG,GACXA,GACFg6uB,GAAah6uB,IAGjBg1G,iBAAkB,kBAChBwkoB,EACI,eAAC,IAAD,WACE,cAAC,IAAD,UACE,cAAC,IAAD,CAAkB1zvB,KAAK,WAEzB,cAAC,IAAD,UACE,cAAC,IAAD,UAAagwB,EAAE,iCAGnB,cAAC,IAAD,UACE,cAAC,IAAD,UACGA,EAAE,wCAKf6tF,iBAAkB,CAChBC,WAAW,WAOvB,OAQJ,eAAC,IAAD,CAAezgC,UAAWF,EAAQkgnB,cAAlC,UACE,cAAC,IAAD,CACEnzlB,MAAM,UACN4e,QAASqiB,EAFX,SAIGn7G,EAAE,wBAEW,IAAfwmW,EACC,cAAC,IAAD,CACEtsR,MAAM,UACN4e,QAAS0xP,GAFX,SAIGxqV,EAAE,uBAEL,cAAC,IAAD,CACEk6E,MAAM,UACN4e,QAAS,kBAAM6jR,EAAcnW,EAAa,IAF5C,SAIGxmW,EAAE,sBAwBH,cAAC,IAAD,CACEk6E,MAAM,UACN/lG,KAAK,SACLg9G,UAAW6yoB,IAAwBC,EAHrC,SAKGjkuB,EAAE,iD,6BChUnB,kPAuQK,EAvQL,SA0Ma,EAAc,SACzB,EACA,gBAAI,GAAJ,GAEE,IAAI,EAAU,GAEZ,GAAe,EAAQ,KAAK,OAE9B,IAAG,IAAI,EAAM,EAAG,EAAM,EAAM,OAAQ,EAAM,GAAO,CAC7C,IAAE,EAAY,EAAM,YAAY,GAGhC,KAAY,MACd,EAAQ,KAAK,GACb,GAAO,MAIJ,MAAI,EAAY,SAMhB,MAAM,IAAI,MAAM,yBAAyB,YAAY,IALxD,EAAQ,KAAK,EAAc,GAAY,EAAa,IACpD,GAAO,GAOX,OAAO,IAAI,YAAY,IAWZ,EAAc,SAAC,GAC1B,UAAa,GAAK,GAAa,OASpB,EAAgB,SAAC,GAC1B,OAAF,GAAa,OAAY,GAAa,SAI3B,EAAgB,SAAC,GAC5B,YAAK,OAAO,EAAY,OAAW,MAAS,OAIjC,EAAe,SAAC,GAC3B,OAAE,EAAY,OAAW,KAAS,QAEpC,SAAK,GACD,EAAF,sBACA,8BAFF,CAAK,MAAS,KAKd,IAAM,EAAc,SAAI,YAAY,GAcvB,EAAc,SACzB,EACA,GAGE,QAHF,QAAI,GAAJ,GAGI,EAAM,QAAU,EAAG,OAAO,OAAO,cAAc,GASjD,IAPA,IAAI,EAAY,EAAgB,EAAQ,GAAS,EAAU,UAGzD,EAAM,EAAgB,EAAI,EAExB,EAAuB,GAEtB,EAAM,OAAS,GAAO,GAAG,CAC1B,IAAE,EAAQ,EAAa,EAAM,KAAQ,EAAM,KAAQ,GAEnD,KAAgB,GAClB,GAAI,EAAM,OAAS,EAAM,EAEvB,EAAW,KAAK,OACX,CACL,IAAM,EAAS,EAAa,EAAM,KAAQ,EAAM,KAAQ,GACpD,EAAe,GACjB,EAAW,KAAK,EAAO,GAGvB,EAAW,KAAK,QAGX,EAAe,IAGxB,GAAO,EACP,EAAW,KAAK,IAEhB,EAAW,KAAK,GAOlB,OAFE,EAAM,EAAM,QAAQ,EAAW,KAAK,GAEjC,OAAO,cAAa,MAApB,OAAwB,IAS3B,EAAkB,SAAC,GACvB,UAAa,OAAU,GAAa,OAQhC,EAAiB,SAAC,GACtB,UAAa,OAAU,GAAa,OAUhC,EAAe,SAAC,EAAe,EAAgB,GAIjD,GAAE,IAAc,EAAU,aAAc,OAAQ,GAAU,EAAK,EACjE,GAAI,IAAc,EAAU,UAAW,OAAQ,GAAS,EAAK,EAC7D,MAAM,IAAI,MAAM,sBAAsB,IAYlC,EAAU,SAAC,GAAiC,OAC9C,EAAqB,GAAS,EAAU,UACxC,EAAwB,GAAS,EAAU,aAC3C,EAH8C,WAM5C,EAAuB,SAAC,GAC5B,OAAa,MAAb,EAAM,IAA4B,MAAb,EAAM,IAEvB,EAA0B,SAAC,GAC/B,OAAa,MAAb,EAAM,IAA4B,MAAb,EAAM,IAEhB,EAAc,SAAC,GAC1B,SAAqB,IAAU,EAAwB,K,qGCxVrD+mL,E,qGAMSu9iB,E,WA+DJ,aAAc,oBACnBrwvB,KAAKswvB,qBAAsB,EAC3BtwvB,KAAKuwvB,gBAAkB,GACvBvwvB,KAAKwwvB,iBAAmB,GACxBxwvB,KAAKywvB,aAAe,GACpBzwvB,KAAK0wvB,aAAe,GACpB1wvB,KAAK0+mB,MAAQ,GACb1+mB,KAAK2wvB,MAAQ,GACb3wvB,KAAK4wvB,OAAS,GACd5wvB,KAAK6wvB,UAAY,GACjB7wvB,KAAK8wvB,uBAAyB,GAC9B9wvB,KAAK+wvB,oBAAsBC,I,yCActB,WACL,IAAMC,EAAW,IAAIZ,EAkBrB,OAjBAY,EAASR,aAAT,YAA4BzwvB,KAAKywvB,cACjCQ,EAASN,MAAT,eAAsB3wvB,KAAK2wvB,OAC3BM,EAASL,OAAT,eAAuB5wvB,KAAK4wvB,QAC5BK,EAASJ,UAAT,eAA0B7wvB,KAAK6wvB,WAC/BI,EAASvyI,MAAQ1+mB,KAAK0+mB,MACtBuyI,EAASh4uB,OAASjZ,KAAKiZ,OACvBg4uB,EAASC,MAAQlxvB,KAAKkxvB,MACtBD,EAASE,SAAWnxvB,KAAKmxvB,SACzBF,EAASG,iBAAmBpxvB,KAAKoxvB,iBACjCH,EAASI,aAAerxvB,KAAKqxvB,aAC7BJ,EAAST,iBAAT,YAAgCxwvB,KAAKwwvB,kBACrCS,EAASK,gBAAkBtxvB,KAAKsxvB,gBAChCL,EAASP,aAAT,YAA4B1wvB,KAAK0wvB,cACjCO,EAASH,uBAAT,eAAuC9wvB,KAAK8wvB,wBAC5CG,EAASF,oBAAT,eAAoC/wvB,KAAK+wvB,qBACzCE,EAASM,QAAUvxvB,KAAKuxvB,QAEjBN,I,uBAIF,SAAU7jjB,GACfptM,KAAKuxvB,QAAUnkjB,I,uBAQV,WACL,OAAOptM,KAAKuxvB,U,8BAOP,SAAiB3stB,GACtB5kC,KAAKuwvB,gBAAgBnkvB,KAAKw4B,K,+BAMrB,SAAkBA,GAEvB,OADA5kC,KAAKwwvB,iBAAiBpkvB,KAAKw4B,GACpB5kC,O,qBAMF,SAAQmqG,GAgBb,OAbAnqG,KAAK0+mB,MAAQv0gB,GAAQ,CACnB/9C,WAAOtwD,EACPmlC,QAAInlC,EACJoolB,gBAAYpolB,EACZozpB,aAASpzpB,EACTuwD,cAAUvwD,GAGRkE,KAAKmxvB,UACP,YAAcnxvB,KAAKmxvB,SAAU,CAAEhnpB,SAGjCnqG,KAAKwxvB,wBACExxvB,O,qBAMF,WACL,OAAOA,KAAK0+mB,Q,+BAMP,WACL,OAAO1+mB,KAAKsxvB,kB,+BAMP,SAAkBG,GAEvB,OADAzxvB,KAAKsxvB,gBAAkBG,EAChBzxvB,O,qBAMF,SAAQ20N,GAMb,OALA30N,KAAK2wvB,MAAL,2BACK3wvB,KAAK2wvB,OACLh8hB,GAEL30N,KAAKwxvB,wBACExxvB,O,oBAMF,SAAOsE,EAAa5I,GAGzB,OAFAsE,KAAK2wvB,MAAL,2BAAkB3wvB,KAAK2wvB,OAAvB,kBAA+BrsvB,EAAM5I,IACrCsE,KAAKwxvB,wBACExxvB,O,uBAMF,SAAUk7V,GAMf,OALAl7V,KAAK4wvB,OAAL,2BACK5wvB,KAAK4wvB,QACL11Z,GAELl7V,KAAKwxvB,wBACExxvB,O,sBAMF,SAASsE,EAAa82V,GAG3B,OAFAp7V,KAAK4wvB,OAAL,2BAAmB5wvB,KAAK4wvB,QAAxB,kBAAiCtsvB,EAAM82V,IACvCp7V,KAAKwxvB,wBACExxvB,O,4BAMF,SAAeoktB,GAGpB,OAFApktB,KAAKqxvB,aAAejtC,EACpBpktB,KAAKwxvB,wBACExxvB,O,sBAMF,SAEL6Z,GAIA,OAFA7Z,KAAKiZ,OAASY,EACd7Z,KAAKwxvB,wBACExxvB,O,gCAMF,SAAmBwO,GAGxB,OAFAxO,KAAKoxvB,iBAAmB5ivB,EACxBxO,KAAKwxvB,wBACExxvB,O,wBAMF,SAAWsE,EAAa4E,GAS7B,OARgB,OAAZA,SAEKlJ,KAAK6wvB,UAAUvsvB,GAEtBtE,KAAK6wvB,UAAUvsvB,GAAO4E,EAGxBlJ,KAAKwxvB,wBACExxvB,O,qBAQF,SAAQ63W,GAGb,OAFA73W,KAAKkxvB,MAAQr5Y,EACb73W,KAAKwxvB,wBACExxvB,O,qBAOF,WACL,OAAOA,KAAKkxvB,Q,4BAOP,WAGL,IAAMr5Y,EAAO73W,KAAKkxvB,MAIlB,OAAOr5Y,GAAQA,EAAK80Y,c,wBAMf,SAAWtipB,GAOhB,OANKA,EAGHrqG,KAAKmxvB,SAAW9mpB,SAFTrqG,KAAKmxvB,SAIdnxvB,KAAKwxvB,wBACExxvB,O,wBAMF,WACL,OAAOA,KAAKmxvB,W,oBAMP,SAAOO,GACZ,IAAKA,EACH,OAAO1xvB,KAGT,IAAM2xvB,EAAyC,oBAAnBD,EAAgCA,EAAe1xvB,MAAQ0xvB,EAEnF,GAAIC,aAAwBtB,EAAO,CACjC,IAAMuB,EAAYD,EAAaE,eAE/B7xvB,KAAK2wvB,MAAL,2BAAkB3wvB,KAAK2wvB,OAAUiB,EAAUj9hB,MAC3C30N,KAAK4wvB,OAAL,2BAAmB5wvB,KAAK4wvB,QAAWgB,EAAUx2Z,OAC7Cp7V,KAAK6wvB,UAAL,2BAAsB7wvB,KAAK6wvB,WAAce,EAAUE,UAC/CF,EAAUznpB,MAAQ/rG,OAAO0D,KAAK8vvB,EAAUznpB,MAAMtoG,SAChD7B,KAAK0+mB,MAAQkzI,EAAUznpB,MAErBynpB,EAAU/3uB,QACZ7Z,KAAKiZ,OAAS24uB,EAAU/3uB,OAEtB+3uB,EAAUxtC,YAAYvitB,SACxB7B,KAAKqxvB,aAAeO,EAAUxtC,aAE5ButC,EAAaI,sBACf/xvB,KAAKsxvB,gBAAkBK,EAAaI,qBAElCH,EAAUI,qBACZhyvB,KAAK+wvB,oBAAsBa,EAAUI,yBAElC,GAAI,YAAcL,GAAe,CACtC,IAAMM,EAAeP,EACrB1xvB,KAAK2wvB,MAAL,2BAAkB3wvB,KAAK2wvB,OAAUsB,EAAat9hB,MAC9C30N,KAAK4wvB,OAAL,2BAAmB5wvB,KAAK4wvB,QAAWqB,EAAa72Z,OAChDp7V,KAAK6wvB,UAAL,2BAAsB7wvB,KAAK6wvB,WAAcoB,EAAaH,UAClDG,EAAa9npB,OACfnqG,KAAK0+mB,MAAQuzI,EAAa9npB,MAExB8npB,EAAap4uB,QACf7Z,KAAKiZ,OAASg5uB,EAAap4uB,OAEzBo4uB,EAAa7tC,cACfpktB,KAAKqxvB,aAAeY,EAAa7tC,aAE/B6tC,EAAaR,iBACfzxvB,KAAKsxvB,gBAAkBW,EAAaR,gBAElCQ,EAAaD,qBACfhyvB,KAAK+wvB,oBAAsBkB,EAAaD,oBAI5C,OAAOhyvB,O,mBAMF,WAeL,OAdAA,KAAKywvB,aAAe,GACpBzwvB,KAAK2wvB,MAAQ,GACb3wvB,KAAK4wvB,OAAS,GACd5wvB,KAAK0+mB,MAAQ,GACb1+mB,KAAK6wvB,UAAY,GACjB7wvB,KAAKiZ,YAASnd,EACdkE,KAAKoxvB,sBAAmBt1vB,EACxBkE,KAAKqxvB,kBAAev1vB,EACpBkE,KAAKsxvB,qBAAkBx1vB,EACvBkE,KAAKkxvB,WAAQp1vB,EACbkE,KAAKmxvB,cAAWr1vB,EAChBkE,KAAKwxvB,wBACLxxvB,KAAK0wvB,aAAe,GACpB1wvB,KAAK+wvB,oBAAsBC,IACpBhxvB,O,2BAMF,SAAcu6V,EAAwBG,GAC3C,IAAMw3Z,EAAsC,kBAAnBx3Z,EAA8BA,EAja3B,IAoa5B,GAAIw3Z,GAAa,EACf,OAAOlyvB,KAGT,IAAM46V,EAAmB,OAAnB,IAAmB,CAAnB,CACJD,UAAW,eACRJ,GAGC6kQ,EAAcp/lB,KAAKywvB,aAMzB,OALArxJ,EAAYhzlB,KAAKwuV,GACjB56V,KAAKywvB,aAAerxJ,EAAYv9lB,OAASqwvB,EAAY9yJ,EAAYtvlB,OAAOoivB,GAAa9yJ,EAErFp/lB,KAAKwxvB,wBAEExxvB,O,+BAMF,WACL,OAAOA,KAAKywvB,aAAazwvB,KAAKywvB,aAAa5uvB,OAAS,K,8BAM/C,WAGL,OAFA7B,KAAKywvB,aAAe,GACpBzwvB,KAAKwxvB,wBACExxvB,O,2BAMF,SAAcq7nB,GAEnB,OADAr7nB,KAAK0wvB,aAAatkvB,KAAKivnB,GAChBr7nB,O,4BAOF,WAGL,OAFaA,KAAK6xvB,eAENlmT,c,8BAMP,WAEL,OADA3rc,KAAK0wvB,aAAe,GACb1wvB,O,0BAIF,WAiBL,MAAO,CACLo/lB,YAHEp/lB,KAbFywvB,aAiBA9kT,YAJE3rc,KAZF0wvB,aAiBAoB,SALE9xvB,KAXF6wvB,UAiBAl8hB,KANE30N,KAVF2wvB,MAiBAv1Z,MAPEp7V,KATF4wvB,OAiBAzmpB,KAREnqG,KARF0+mB,MAiBA7kmB,MATE7Z,KAPFiZ,OAiBAmrsB,YAVEpktB,KANFqxvB,cAgB6B,GAC7Bc,gBAXEnyvB,KALFwwvB,iBAiBAwB,mBAZEhyvB,KAJF+wvB,oBAiBAqB,sBAbEpyvB,KAHF8wvB,uBAiBAuB,gBAdEryvB,KAFFoxvB,iBAiBAv5Y,KAfE73W,KADFkxvB,S,0BA4BG,SACL/pnB,GAG2B,IAF3Bw9M,EAE2B,uDAFT,GAClB2ta,EAC2B,uDADmB,GAE9C,YAAsBnrnB,EAAOnnI,KAAK6xvB,gBAGlC,IAAMM,EAAe,sBAChBG,GADgB,YAGhB,eAHgB,YAIhBtyvB,KAAKwwvB,mBAGV,OAAO,YAAsB2B,EAAiBhrnB,EAAOw9M,K,sCAMhD,SAAyB14J,GAG9B,OAFAjsL,KAAK8wvB,uBAAL,2BAAmC9wvB,KAAK8wvB,wBAA2B7kkB,GAE5DjsL,O,mCAMF,SAAsBkJ,GAE3B,OADAlJ,KAAK+wvB,oBAAsB7nvB,EACpBlJ,O,mCAMF,WACL,OAAOA,KAAK+wvB,sB,8BAUP,SAAiBh3Z,EAAoBpV,GAC1C,IAAMqV,EAAUrV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cAExD,IAAKtxM,KAAKuxvB,QAER,OADA,IAAOtpuB,KAAK,+DACL+xU,EAGT,IAAME,EAAqB,IAAItyV,MAAM,6BAarC,OAXA5H,KAAKuxvB,QAAQp3Z,iBACXJ,EADF,yBAGIK,kBAAmBL,EACnBG,sBACGvV,GALP,IAMIrzI,SAAU0oJ,IAEZh6V,MAGKg6V,I,4BAWF,SAAe3oT,EAAiBx3B,EAAuB8qU,GAC5D,IAAMqV,EAAUrV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cAExD,IAAKtxM,KAAKuxvB,QAER,OADA,IAAOtpuB,KAAK,6DACL+xU,EAGT,IAAME,EAAqB,IAAItyV,MAAMypC,GAcrC,OAZArxC,KAAKuxvB,QAAQl3Z,eACXhpT,EACAx3B,EAFF,yBAIIugV,kBAAmB/oT,EACnB6oT,sBACGvV,GANP,IAOIrzI,SAAU0oJ,IAEZh6V,MAGKg6V,I,0BAUF,SAAa7yN,EAAcw9M,GAChC,IAAMqV,EAAUrV,GAAQA,EAAKrzI,SAAWqzI,EAAKrzI,SAAW,cAExD,OAAKtxM,KAAKuxvB,SAKVvxvB,KAAKuxvB,QAAQj3Z,aAAanzN,EAA1B,2BAAsCw9M,GAAtC,IAA4CrzI,SAAU0oJ,IAAWh6V,MAE1Dg6V,IANL,IAAO/xU,KAAK,2DACL+xU,K,mCAWD,WAA8B,WAIjCh6V,KAAKswvB,sBACRtwvB,KAAKswvB,qBAAsB,EAC3BtwvB,KAAKuwvB,gBAAgB7jvB,SAAQ,SAAAk4B,GAC3BA,EAAS,MAEX5kC,KAAKswvB,qBAAsB,M,oBAxjBxB,SAAat3Z,GAClB,OAAOA,EAAQA,EAAMx+S,QAAU,IAAI61sB,M,KAgkBhC,SAASkC,IAKd,OAJKz/iB,IACHA,EAAc,IAAIu9iB,GAGbv9iB,EAYT,SAASk+iB,IACP,MAAO,CACL94Y,QAAS,cACTF,OAAQ,cAAQvlS,UAAU,O,6BCrtB9B,IAAIl4B,EAA4B,oBAAX76C,QAAoD,kBAApBA,OAAOC,SAAwB,SAAUmH,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,oBAAXpH,QAAyBoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAE3Pq2a,EAAgF,YAAjD,qBAAXzuZ,OAAyB,YAAc6rB,EAAQ7rB,UAAiG,YAAnD,qBAAbsX,SAA2B,YAAcuU,EAAQvU,YAAiD,IAAtBA,SAAS3+B,SAErL81a,O,6BCJf,kCAAO,IAAM3hD,EAAmB,wB,6BCEhC,IAAI70K,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,2XACD,aAEJ3K,EAAQywH,QAAUq4I,G,yHCJHy2X,IANI,SAAC,GAAD,IAAGp0lB,EAAH,EAAGA,SAA8C4D,GAAjD,EAAas+T,UAAb,EAAwBt2C,UAAxB,EAAmCr4M,UAAnC,yBACjB,cAAC,IAAD,2BAAa3vE,GAAb,aACG5D,O,qICoBCkstB,EAAqB,IAAI3zvB,IAAI,CAAC,gBAAiB,wBAO/C4zvB,EAAmB,IAAI5zvB,IAAI,CAAC,gBAAiB,aAAc,QAAS,gBAO1E,SAAS6zvB,EAAatrvB,GACpB,IAAKA,GAAwB,kBAATA,GAAqB3F,MAAMC,QAAQ0F,GACrD,OAAO,EAET,IAAMtF,EAAO1D,OAAO0D,KAAKsF,GACzB,GAAoB,IAAhBtF,EAAKD,OACP,OAAO,EAET,IAAOyC,EAAP,YAAcxC,EAAd,MACMpG,EAAQ0L,EAAK9C,GACnB,QAAIkuvB,EAAmBvuvB,IAAIK,KAGvBmuvB,EAAiBxuvB,IAAIK,KACd5I,GAA0B,kBAAVA,GAAsB,SAAUA,IAE/C,OAAR4I,IAAgB7C,MAAMC,QAAQhG,MACzBA,EAAMmG,OAAS,GAAKnG,EAAM6R,MAAMmlvB,KAkBpC,SAASC,EAAuBppoB,GACrC,IAAKA,GAA8B,kBAAZA,EACrB,OAAO,KAET,GAAImpoB,EAAanpoB,GACf,OAAO,KAET,IAAQ9nF,EAAmB8nF,EAAnB9nF,IAAQmxtB,EAAhB,YAA2BrpoB,EAA3B,GACA,IAAK9nH,MAAMC,QAAQ+/B,GACjB,OAAOrjC,OAAO0D,KAAKynH,GAAS1nH,OAAS0nH,EAAU,KAEjD,IAAMjlG,EAAOmd,EAAIl2B,QAAO,SAACsnvB,GAAD,OAAkBH,EAAaG,MACjD99lB,EAAG,2BAAQ69lB,GAAYtuuB,EAAKziB,OAAS,CAAE4/B,IAAKnd,GAAS,IAC3D,OAAOlmB,OAAO0D,KAAKizJ,GAAKlzJ,OAASkzJ,EAAM,KAczC,IAAM+9lB,EAA0B,CACxB94b,mBADwB,SAE5B1yN,EACAvgD,EACApU,GACe,OAAD,mHACRq+Q,EAAU1pN,EAAIvjG,IA7GJ,uBA8GVuva,EAAY,IAAIviH,IAAUC,EAASjqQ,GAF3B,kBAGPusX,EAAUC,KAAK,iCAAkC5gY,IAH1C,+CAOHmgtB,O,2GCnHT1/U,EAAc,sBAiDd2/U,EAA0B,CAOxBC,gBAPwB,SAOR1rpB,EAAUvgD,EAAe0vB,GAA0B,OAAD,mHAChEu6O,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAF6B,kBAG/DusX,EAAUC,KAAK,sCAAuC98V,IAHS,8CAelEwnD,YAtBwB,SAsBZ32B,EAAUvgD,EAAepU,EAA4BipO,GAAqC,OAAD,mHACnGo1C,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAFgE,kBAGlGusX,EAAUC,KAAK,kCAAf,aAAoDx3a,KAAM,IAAO42C,GAAUipO,IAHuB,+CAWtG,SAASq3e,EAAoBjsf,GAClC,IAAM9tJ,EAAM,SAAC94G,GACX,GAAS,MAALA,GAAmB,KAANA,EACf,OAAO,KAET,IAAMgG,EAAIzE,OAAOvB,GACjB,OAAOuB,OAAOy/F,SAASh7F,GAAKA,EAAIhG,GAElC,OAAQ4mQ,GAAS,IAAIh+P,KAAI,SAACy4J,GAAD,kCAAc,CACrCxgI,GAAIi4E,EAAIuoD,EAAGxgI,IACXi4F,cAAa,UAAEuoC,EAAGvoC,qBAAL,QAAsB,KAGnC1qH,KAAI,UAAEizJ,EAAGvoC,qBAAL,QAAsB,KAC1Bu9L,WAAU,UAAEh1J,EAAGg1J,kBAAL,QAAmB,KAC7BvjG,IAAG,UAAEzxD,EAAGyxD,WAAL,QAAY,KACfowG,IAAG,UAAE7hK,EAAG6hK,WAAL,QAAY,KACf9vG,IAAG,UAAE/xD,EAAG+xD,WAAL,QAAY,KACfr6F,MAAK,UAAEsoC,EAAGtoC,aAAL,QAAc,KACnB85F,QAAS/5G,EAAIuoD,EAAGwxD,SAChB77F,SAAUle,EAAIuoD,EAAG5gI,YACjBD,aAAY,UAAE6gI,EAAG7gI,oBAAL,QAAqB,KACjC6+F,OAAQvmB,EAAIuoD,EAAGlqC,UACfwC,WAAU,UAAE0nC,EAAG1nC,kBAAL,QAAmB,KAC7B4G,YAAW,UAAE8gC,EAAG9gC,mBAAL,QAAoB,KAC/BmsG,KAAM5zH,EAAIuoD,EAAGqrE,MAEbrnI,OAAM,UAAEg8D,EAAGh8D,cAAL,QAAe,KACrB0wB,aAAY,UAAEsrC,EAAGtrC,oBAAL,QAAqB,KAIjCs9F,KAAMhyD,EAAGyxlB,gBACL,CAAEp7b,OAAQ,CAAEx1R,KAAM,CAAEoxR,OAAQjyJ,EAAGyxlB,wBAC/Bp3vB,MAIOi3vB,O,kFC1HFI,EAAyB,SAAC,GAAiG,IAAD,4BAA9F5poB,eAA8F,MAApF,GAAoF,EAAhFv9E,EAAgF,EAAhFA,QAAgF,IAAvEontB,qBAAuE,MAAvD,UAAuD,MAA5CC,iBAA4C,aAAzBC,kBAAyB,SAC/Ht9T,EAAa,eAAQzsU,GACrBgqoB,EAAe,UAAIv9T,EAASv0Z,WAAb,aAAI,EAAczb,WAAU,SAACnO,GAChD,OAAOA,EAAEypB,GAAKzpB,EAAEypB,GAAGtb,WAAU,SAAAsjd,GAAE,OAAIA,EAAG52Q,kBAAkB,EAAI76M,EAAE66M,iBAE1D8giB,EAAkB,UAAGx9T,EAASv0Z,WAAZ,iBAAG,EAAe8xtB,UAAlB,iBAAG,EAAiCjytB,UAApC,aAAG,EAAqCtb,WAAU,SAAAnO,GAAC,OAAIA,EAAE66M,iBAC3El1F,EAAag2nB,GAAsB,EAAtB,UACfx9T,EAASv0Z,WADM,iBACf,EAAe8xtB,UADA,iBACf,EAAiCjytB,UADlB,iBACf,EAAsCkytB,UADvB,iBACf,EAA2D9giB,qBAD5C,aACf,EAA0EnkL,MAD3D,UAEfynZ,EAASv0Z,WAFM,iBAEf,EAAe8xtB,UAFA,iBAEf,EAAiC7giB,qBAFlB,aAEf,EAAgDnkL,MAEpD,GAAK+ktB,EAmBA,CAAC,IAAD,wBAU2D,EATxDG,EAAgB,UAAIz9T,EAASv0Z,WAAb,aAAI,EAAczb,WAAU,SAACnO,GACjD,OAAOA,EAAEypB,GAAKzpB,EAAEypB,GAAGtb,WAAU,SAAAsjd,GAAE,OAAIA,EAAGpwW,kBAAkB,EAAIrhH,EAAEqhH,iBAE1Dw6nB,EAAmB,UAAG19T,EAASv0Z,WAAZ,iBAAG,EAAegytB,UAAlB,iBAAG,EAAkCnytB,UAArC,aAAG,EAAsCtb,WAAU,SAAAnO,GAAC,OAAIA,EAAEqhH,iBAC7E40e,EAAc4lJ,GAAuB,EAAvB,UAChB19T,EAASv0Z,WADO,iBAChB,EAAegytB,UADC,iBAChB,EAAkCnytB,UADlB,iBAChB,EAAuCoytB,UADvB,iBAChB,EAA6Dx6nB,qBAD7C,aAChB,EAA4Ex3F,KAD5D,UAEhBs0Z,EAASv0Z,WAFO,iBAEhB,EAAegytB,UAFC,iBAEhB,EAAkCv6nB,qBAFlB,aAEhB,EAAiDx3F,KAErD,IAAKrkC,QAAQywmB,GACX,GAAIrsmB,MAAMC,QAAQs0b,EAASv0Z,MAAQu0Z,EAASv0Z,IAAI5/B,OAAS,EACvD,UAAAm0b,EAASv0Z,WAAT,SAAcryB,OAAOqkvB,EAAkB,eAEhCz9T,EAASv0Z,QAhCL,CAEgD,IAAD,EAD9D,GAAKpkC,QAAQmgI,GASPw4T,EAASv0Z,IAAI8xtB,GAFK,WAAlBH,EACEC,EAC8B,CAAEn6nB,cAAe,CAAEx3F,KAAM87F,IAEzB,CAAEm2nB,oBAAqB,CAAEpltB,MAAOivF,IAGlC,CAAEk1F,cAAe,CAAEnkL,MAAOivF,SAb5D,GAAI/7H,MAAMC,QAAQs0b,EAASv0Z,MAAQu0Z,EAASv0Z,IAAI5/B,OAAS,EACvD,UAAAm0b,EAASv0Z,WAAT,SAAcryB,OAAOmkvB,EAAiB,eAE/Bv9T,EAASv0Z,IA0CtB,MAAO,CAAEuK,QAXTA,EAAO,2BACFA,GADE,IAELisJ,QAAQ,2BACFz6D,GAAgC,YAAlB41nB,IAAgCE,EAAc,CAC9DM,uBAAuB,eACpBp2nB,GAAc,IAEf,IACDxxF,EAAQisJ,WAGG1uE,QAASysU,K,mECvDjB69T,EAKAC,E,eALAD,K,QAAAA,E,SAAAA,M,cAKAC,K,4BAAAA,E,kCAAAA,E,4BAAAA,E,wCAAAA,E,qCAAAA,M,4NCOCC,EAA+B,+BACtCvkoB,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C2+B,UAAW,CACPv+B,MAAO,QAEXs2C,KAAM,CACFzK,SAAU,OACV3F,YAAa,OAEjBkoB,OAAQ,CACJviB,SAAU,UACVoV,WAAY,IACZ7C,WAAY,UACZzM,UAAW,SACXhnB,MAAO,sBACPotB,aAAc,QAElBxH,KAAM,CACF1E,SAAU,UACVoV,WAAY,IACZ7C,WAAY,OACZ4gJ,cAAe,QACfrtJ,UAAW,YAqFJ+moB,IAlFkC,WAC7C,MAAoCt1sB,oBAAS,GAA7C,mBAAOu1sB,EAAP,KAAmBC,EAAnB,KACA,EAA0Bx1sB,mBAAS,IAAnC,mBAAO0N,EAAP,KAAc+nsB,EAAd,KACMxptB,EAAW2F,wBACX4oC,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACFykT,EAAa9+R,sBAAY8pF,YAA+Bu4nB,IACxDrusB,EAAShU,sBAAY8T,eAOrB2jV,GAAoB,OAANzjV,QAAM,IAANA,OAAA,EAAAA,EAAQ3hD,IAAI,uBAAwB,8CAExD,OACI,eAAC,IAAD,CACIurH,SAAUykoB,EACVjgoB,WAAY,CACRxY,MAAO,CACHx/B,QAAS,YACTN,SAAU,UALtB,UASI,qBAAK8/B,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,YAA/C,SACI,cAAC,IAAD,CAAYmpC,QAnBJ,WAChBl6E,EAAS,IAAI0J,IAA6B,CACtCpT,GAAI8ytB,EACJpppB,MAAM,MAgBgC2Q,MAAO,CAAEx/B,QAAS,GAApD,SACI,cAAC,IAAD,CAAWw/B,MAAO,CAAE6L,SAAU,cAGtC,sBAAK7L,MAAO,CAAEx/B,QAAS,UAAvB,UACI,cAAC,IAAD,CAAY1C,UAAWF,EAAQwwD,OAA/B,SAAwC39G,EAAE,iCAC1C,qBAAKuvF,MAAO,CAAE+X,aAAc,IAA5B,SACI,cAAC,IAAD,CAAY/5C,UAAU,OAAOF,UAAWF,EAAQ2yC,KAAhD,SACI,cAAC,IAAD,CACI9/F,EAAGA,EACH4wB,QAAS,mCACTG,WAAY,CACR,cAAC,IAAD,CAAqB48D,QAAQ,QAAQpgC,UAAU,SAASF,UAAWF,EAAQ2yC,KAAMvQ,MAAO,CAAEpV,eAAgB,aAAe2e,QAAS,yBAAM2rN,QAAN,IAAMA,OAAN,EAAMA,EAAY4jb,SAAS,CAAEhosB,YAApJ,iBAK3B,cAAC,IAAD,CACIs5E,OAAQ,kBAAMwunB,GAAc,IAC5Br6oB,WAAW,EACX2B,SAAU,SAACpzG,GAAD,OAAO+rvB,EAAS/rvB,EAAE4kB,OAAOtxB,QACnCyS,MAAO8lvB,IAAerF,YAAQxisB,GAC9B42I,UAAU,EACVliK,MAAM,QACNplC,MAAO0wD,EACPygE,WAAaonoB,IAAerF,YAAQxisB,GAAU,gBAAkB,KAEpE,qBAAKkvD,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,SAAU4gC,UAAW,QAApE,SACI,cAAC,IAAD,CACIuI,QAAS,WACD+poB,YAAQxisB,KACE,OAAVokR,QAAU,IAAVA,KAAYlU,SAAS,CAAElwQ,YAG/BstD,QAAQ,YACRzT,MAAM,UAPV,SAQKl6E,EAAE,mCAGX,qBAAKuvF,MAAO,CAAElgC,QAAS,OAAQM,eAAgB,SAAU4gC,UAAW,QAApE,SACI,cAAC,IAAD,CAAYhjC,UAAU,OAAO2sB,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAApE,SACI,cAAC,IAAD,CACI9/F,EAAGA,EACH4wB,QAAS,sCACTG,WAAY,CACR,cAAC,IAAD,CAAkB48D,QAAQ,QAAQtgC,UAAWF,EAAQ2yC,KAAMuB,KAAM+7Q,EAAan8W,OAAO,SAASgiT,IAAI,YAAvF,sB,iTCjFvCtvR,E,OC7BSG,EAAsB,W,OD+BtBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kBAGIyhvB,EAAwB,kBAAMxhtB,YACzC8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,mBAGlDuwvB,EAAyB,kBAAMzhtB,YAC1C8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,oBAQlDwwvB,EAAoC,kBAAM1htB,YACrD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,+BAGlDywvB,EAAsC,kBAAM3htB,YACvD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iCAQlD0wvB,EAAsC,kBAAM5htB,YACvD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,iCAGlD2wvB,EAAmC,kBAAM7htB,YACpD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,8BAGlD4wvB,EAA4C,kBAAM9htB,YAC7D8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,wCAGlD6wvB,EAAkC,kBAAM/htB,YACnD8M,KACA,SAAC3Y,GAAD,OAAmDA,EAAMjjC,IAAI,8B,6BEjG/D,6LA8BMyrH,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9CojU,UAAW,CACTrhS,SAAU,WACVziG,MAAO0gE,EAAMZ,QAAQ,IACrBg6C,IAAKp5C,EAAMZ,QAAQ,KAErBikU,iBAAkB,CAChBziU,QAASZ,EAAMZ,QAAQ,QAId8tkB,EAAyB,sBA8DvBgkF,UA5D6C,WAC1D,IAAMzhsB,EAAW2F,wBACX4oC,EAAUs2C,IACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAwC2lB,sBAAY8pF,YAA+B4shB,IAA3EtnnB,EAAR,EAAQA,MAAOunnB,EAAf,EAAeA,YAAazsV,EAA5B,EAA4BA,QACtBjxN,EAAOj5D,sBAAYosK,YAA2Bsqc,IAE9ChkZ,EAAa,WACjBz5N,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAImnnB,EACJl+mB,MAAO,OAUX,OANAzF,aAAgB,WACTkmE,GACH9xD,WAAWurN,EAAY,OAExB,CAACz5J,IAGF,mCACE,cAAC,IAAD,CACE2kB,SAAU84hB,EACVvuiB,WAAW,EACX0/K,OAAO,OACPj9M,SAAS,KAJX,SAME,cAAC,IAAD,UACE,eAAC,IAAD,CAAMlD,UAAWF,EAAQqlU,iBAAzB,UACE,cAAC,IAAD,CACE15R,QAAS,kBAAMl6E,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAO1pE,GAAImnnB,MAC3EhvkB,UAAWF,EAAQolU,UAFrB,SAIE,cAAC,IAAD,MAED1iF,GACC,cAAC,IAAD,CAAMtgN,MAAO,CAAC+X,aAAcn4C,EAAMZ,QAAQ,IAA1C,SACE,cAAC,IAAD,CACEksC,IAAKo1M,GAAW,GAChBtgP,MAAO,QACPurC,YAAa,OACbC,aAAa,MAInB,cAAC,IAAD,CAAmB7lF,GAAG,kCAAkCy4E,QAAQ,KAAKzT,MAAM,cAA3E,SACGnlE,IAEH,eAAC,IAAD,CAAmBG,GAAG,0CAA0Cy4E,QAAQ,QAAxE,UACG3tF,EAAE,2BADL,IACkCs8nB,gB,oFC9F/B,GACH,E,SCODwsG,EAAY,YACZC,EAAS,SACTC,EAAW,WACXC,EAAU,UACVC,EAAU,UA6FjBl1Z,EAA0B,SAAU5vF,GAGtC,SAAS4vF,EAAW71T,EAAOhhC,GACzB,IAAIyuC,EAEJA,EAAQw4N,EAAiBnvQ,KAAKhB,KAAMkqC,EAAOhhC,IAAYlJ,KACvD,IAGIk1vB,EADAl8J,EAFc9vlB,MAEuBisvB,WAAajrtB,EAAM+7F,MAAQ/7F,EAAM8ujB,OAuB1E,OArBArhjB,EAAMy9sB,aAAe,KAEjBlrtB,EAAM89F,GACJgxd,GACFk8J,EAAgBJ,EAChBn9sB,EAAMy9sB,aAAeL,GAErBG,EAAgBF,EAIhBE,EADEhrtB,EAAM+9F,eAAiB/9F,EAAMs9mB,aACfqtG,EAEAC,EAIpBn9sB,EAAM3Q,MAAQ,CACZy+D,OAAQyvpB,GAEVv9sB,EAAM09sB,aAAe,KACd19sB,EA/BTg5N,YAAeovF,EAAY5vF,GAkC3B4vF,EAAWnvF,yBAA2B,SAAkCvqO,EAAM4qO,GAG5E,OAFa5qO,EAAK2hG,IAEJipI,EAAUxrK,SAAWovpB,EAC1B,CACLpvpB,OAAQqvpB,GAIL,MAmBT,IAAIrvtB,EAASs6T,EAAW5hW,UA0OxB,OAxOAsnC,EAAOorO,kBAAoB,WACzB7wQ,KAAKs1vB,cAAa,EAAMt1vB,KAAKo1vB,eAG/B3vtB,EAAOurO,mBAAqB,SAA4B3yJ,GACtD,IAAIk3oB,EAAa,KAEjB,GAAIl3oB,IAAcr+G,KAAKkqC,MAAO,CAC5B,IAAIu7D,EAASzlG,KAAKgnC,MAAMy+D,OAEpBzlG,KAAKkqC,MAAM89F,GACTviC,IAAWsvpB,GAAYtvpB,IAAWuvpB,IACpCO,EAAaR,GAGXtvpB,IAAWsvpB,GAAYtvpB,IAAWuvpB,IACpCO,EAAaN,GAKnBj1vB,KAAKs1vB,cAAa,EAAOC,IAG3B9vtB,EAAOyrO,qBAAuB,WAC5BlxQ,KAAKw1vB,sBAGP/vtB,EAAOgwtB,YAAc,WACnB,IACItvnB,EAAMF,EAAO+yd,EADbv0f,EAAUzkG,KAAKkqC,MAAMu6D,QAWzB,OATA0hC,EAAOF,EAAQ+yd,EAASv0f,EAET,MAAXA,GAAsC,kBAAZA,IAC5B0hC,EAAO1hC,EAAQ0hC,KACfF,EAAQxhC,EAAQwhC,MAEhB+yd,OAA4Bl9lB,IAAnB2oG,EAAQu0f,OAAuBv0f,EAAQu0f,OAAS/yd,GAGpD,CACLE,KAAMA,EACNF,MAAOA,EACP+yd,OAAQA,IAIZvzjB,EAAO6vtB,aAAe,SAAsBI,EAAUH,QACnC,IAAbG,IACFA,GAAW,GAGM,OAAfH,GAEFv1vB,KAAKw1vB,qBAEDD,IAAeR,EACjB/0vB,KAAK21vB,aAAaD,GAElB11vB,KAAK41vB,eAEE51vB,KAAKkqC,MAAM+9F,eAAiBjoI,KAAKgnC,MAAMy+D,SAAWqvpB,GAC3D90vB,KAAK4iH,SAAS,CACZnd,OAAQovpB,KAKdpvtB,EAAOkwtB,aAAe,SAAsBD,GAC1C,IAAItyoB,EAASpjH,KAETimI,EAAQjmI,KAAKkqC,MAAM+7F,MACnB4vnB,EAAY71vB,KAAKkJ,QAAUlJ,KAAKkJ,QAAQisvB,WAAaO,EAErD/stB,EAAQ3oC,KAAKkqC,MAAMk8S,QAAU,CAACyva,GAAa,CAAChse,IAASC,YAAY9pR,MAAO61vB,GACxEC,EAAYnttB,EAAM,GAClBottB,EAAiBpttB,EAAM,GAEvBqttB,EAAWh2vB,KAAKy1vB,cAChBQ,EAAeJ,EAAYG,EAASh9J,OAASg9J,EAAS/vnB,OAGrDyvnB,IAAazvnB,GAASvgF,EACzB1lD,KAAKmxQ,aAAa,CAChB1rK,OAAQuvpB,IACP,WACD5xoB,EAAOl5E,MAAMi0X,UAAU23V,OAK3B91vB,KAAKkqC,MAAMiujB,QAAQ29J,EAAWC,GAC9B/1vB,KAAKmxQ,aAAa,CAChB1rK,OAAQsvpB,IACP,WACD3xoB,EAAOl5E,MAAMkujB,WAAW09J,EAAWC,GAEnC3yoB,EAAOgmM,gBAAgB6sc,GAAc,WACnC7yoB,EAAO+tJ,aAAa,CAClB1rK,OAAQuvpB,IACP,WACD5xoB,EAAOl5E,MAAMi0X,UAAU23V,EAAWC,cAM1CtwtB,EAAOmwtB,YAAc,WACnB,IAAIryoB,EAASvjH,KAETmmI,EAAOnmI,KAAKkqC,MAAMi8F,KAClB6vnB,EAAWh2vB,KAAKy1vB,cAChBK,EAAY91vB,KAAKkqC,MAAMk8S,aAAUtqV,EAAY+tR,IAASC,YAAY9pR,MAEjEmmI,IAAQzgF,GASb1lD,KAAKkqC,MAAMk0X,OAAO03V,GAClB91vB,KAAKmxQ,aAAa,CAChB1rK,OAAQwvpB,IACP,WACD1xoB,EAAOr5E,MAAMoujB,UAAUw9J,GAEvBvyoB,EAAO6lM,gBAAgB4sc,EAAS7vnB,MAAM,WACpC5iB,EAAO4tJ,aAAa,CAClB1rK,OAAQqvpB,IACP,WACDvxoB,EAAOr5E,MAAMmkZ,SAASynU,aAlB1B91vB,KAAKmxQ,aAAa,CAChB1rK,OAAQqvpB,IACP,WACDvxoB,EAAOr5E,MAAMmkZ,SAASynU,OAqB5BrwtB,EAAO+vtB,mBAAqB,WACA,OAAtBx1vB,KAAKq1vB,eACPr1vB,KAAKq1vB,aAAaxpuB,SAClB7rB,KAAKq1vB,aAAe,OAIxB5vtB,EAAO0rO,aAAe,SAAsB1mP,EAAWma,GAIrDA,EAAW5kC,KAAKk2vB,gBAAgBtxtB,GAChC5kC,KAAK4iH,SAASn4F,EAAWma,IAG3Ba,EAAOywtB,gBAAkB,SAAyBtxtB,GAChD,IAAI4iH,EAASxnJ,KAETijR,GAAS,EAcb,OAZAjjR,KAAKq1vB,aAAe,SAAUlunB,GACxB87I,IACFA,GAAS,EACTz7H,EAAO6tmB,aAAe,KACtBzwtB,EAASuiG,KAIbnnI,KAAKq1vB,aAAaxpuB,OAAS,WACzBo3P,GAAS,GAGJjjR,KAAKq1vB,cAGd5vtB,EAAO2jR,gBAAkB,SAAyB3kN,EAASw0G,GACzDj5M,KAAKk2vB,gBAAgBj9iB,GACrB,IAAI7xM,EAAOpH,KAAKkqC,MAAMk8S,QAAUpmV,KAAKkqC,MAAMk8S,QAAQt+S,QAAU+hP,IAASC,YAAY9pR,MAC9Em2vB,EAA0C,MAAX1xpB,IAAoBzkG,KAAKkqC,MAAMkstB,eAElE,GAAKhvvB,IAAQ+uvB,EAAb,CAKA,GAAIn2vB,KAAKkqC,MAAMkstB,eAAgB,CAC7B,IAAI3mtB,EAAQzvC,KAAKkqC,MAAMk8S,QAAU,CAACpmV,KAAKq1vB,cAAgB,CAACjuvB,EAAMpH,KAAKq1vB,cAC/DS,EAAYrmtB,EAAM,GAClB4mtB,EAAoB5mtB,EAAM,GAE9BzvC,KAAKkqC,MAAMkstB,eAAeN,EAAWO,GAGxB,MAAX5xpB,GACF5rD,WAAW74C,KAAKq1vB,aAAc5wpB,QAb9B5rD,WAAW74C,KAAKq1vB,aAAc,IAiBlC5vtB,EAAO28F,OAAS,WACd,IAAI38B,EAASzlG,KAAKgnC,MAAMy+D,OAExB,GAAIA,IAAWovpB,EACb,OAAO,KAGT,IAAItyoB,EAAcviH,KAAKkqC,MACnB5D,EAAWi8E,EAAYj8E,SAgBvBgwtB,GAfM/zoB,EAAYylB,GACFzlB,EAAYiliB,aACXjliB,EAAY0lB,cACnB1lB,EAAYy2e,OACbz2e,EAAY0jB,MACb1jB,EAAY4jB,KACT5jB,EAAY9d,QACL8d,EAAY6zoB,eACnB7zoB,EAAY41e,QACT51e,EAAY61e,WACb71e,EAAY47S,UACf57S,EAAY67S,OACT77S,EAAY+1e,UACb/1e,EAAY8rU,SACb9rU,EAAY6jO,QACV18S,YAA8B64E,EAAa,CAAC,WAAY,KAAM,eAAgB,gBAAiB,SAAU,QAAS,OAAQ,UAAW,iBAAkB,UAAW,aAAc,YAAa,SAAU,YAAa,WAAY,aAEjP,OAGE99E,IAAMwB,cAAcswtB,IAAuBnwtB,SAAU,CACnD1qC,MAAO,MACc,oBAAb4qC,EAA0BA,EAASm/D,EAAQ6wpB,GAAc7xtB,IAAMyX,aAAazX,IAAM+iG,SAASk9d,KAAKp+jB,GAAWgwtB,KAIlHv2Z,EAzSqB,CA0S5Bt7T,IAAMkV,WA+LR,SAAS80G,KA7LTsxM,EAAWpgF,YAAc42e,IACzBx2Z,EAAWjhF,UA0LP,GAIJihF,EAAWt+O,aAAe,CACxBumB,IAAI,EACJw/gB,cAAc,EACdv/gB,eAAe,EACf+wd,QAAQ,EACR/yd,OAAO,EACPE,MAAM,EACNgyd,QAAS1pc,EACT2pc,WAAY3pc,EACZ0vQ,UAAW1vQ,EACX2vQ,OAAQ3vQ,EACR6pc,UAAW7pc,EACX4/R,SAAU5/R,GAEZsxM,EAAW80Z,UAAYA,EACvB90Z,EAAW+0Z,OAASA,EACpB/0Z,EAAWg1Z,SAAWA,EACtBh1Z,EAAWi1Z,QAAUA,EACrBj1Z,EAAWk1Z,QAAUA,EACNl1Z,O,6BCvmBf,oDAeI74O,EAAcziF,IAAM8E,YAAW,SAAqBW,EAAOzuC,GAC7D,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,MAAQA,EAClD14D,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,cAErE,OAAOzF,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9B39E,IAAKA,GACJklB,OAyBUs6D,gBA5CK,CAElB1jE,KAAM,CACJukE,QAAS,GACT,eAAgB,CACdo2C,cAAe,MAuCa,CAChC1jH,KAAM,kBADOysE,CAEZisC,I,6BCpDH,sEA2CIuxU,EAAWh0Z,IAAM8E,YAAW,SAAkBW,EAAOzuC,GACvD,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,KAAOA,EACjDm9qB,EAAetstB,EAAMszT,MACrBA,OAAyB,IAAjBg5Z,GAAkCA,EAC1CzwV,EAAkB77X,EAAMo7E,SACxBA,OAA+B,IAApBygT,GAAqCA,EAChDplZ,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,YAAa,QAAS,aAEvFilU,EAAY1qU,IAAMgG,WAAW2kU,KACjC,OAAO3qU,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CruC,IAAKA,EACL29E,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW+1R,GAAa,CACpDnyV,KAAMk8D,EAAQl8D,KACdwyV,OAAQt2R,EAAQs2R,QAChBL,EAAUz1P,SAAU8jP,GAAStkR,EAAQskR,MAAOl4O,GAAYpsC,EAAQosC,WACjE3kG,OAmCUs6D,iBAxFK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ0uF,MAAO,UACP7qB,QAAS,YACTgtR,cAAe,SAEfO,QAAS,EACT,gBAAiB,CACf3jP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,OAExC,8BAA+B,CAC7Bx4O,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM44C,EAAM+pC,QAAQ/5F,OAAOuruB,mBAK7EnxoB,SAAU,GAGVk4O,MAAO,GAGPxgV,KAAM,GAGNwyV,OAAQ,MA6DsB,CAChChhW,KAAM,eADOysE,CAEZw9W,I,2FC5FY90U,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,+FACD,wBCFW69G,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,wIACD,Y,SCFW69G,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,kGACD,yB,gBCwDA4wvB,EAAqBjytB,IAAMwB,cAAc0wtB,EAAc,MACvD5nf,EAActqO,IAAMwB,cAAc2wtB,EAA0B,MAC5DC,EAA2BpytB,IAAMwB,cAAc6wtB,EAA2B,MAC1E16nB,EAAW33F,IAAM8E,YAAW,SAAkBW,EAAOzuC,GACvD,IAAIs7vB,EAAqB7stB,EAAMmha,YAC3BA,OAAqC,IAAvB0rT,EAAgCL,EAAqBK,EACnE79qB,EAAUhvC,EAAMgvC,QAChBu4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,YAAcA,EAChDkyH,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDqze,EAAc9stB,EAAM0nF,KACpBA,OAAuB,IAAhBoloB,EAAyBjof,EAAciof,EAC9CC,EAAuB/stB,EAAMstiB,cAC7BA,OAAyC,IAAzBy/K,GAA0CA,EAC1DC,EAAwBhttB,EAAMittB,kBAC9BA,OAA8C,IAA1BD,EAAmCL,EAA2BK,EAClFv9oB,EAAazvE,EAAMyvE,WACnBuqK,EAAch6O,EAAMnuC,KACpBA,OAAuB,IAAhBmoR,EAAyB,SAAWA,EAC3CvjQ,EAAQu8B,YAAyBhT,EAAO,CAAC,cAAe,UAAW,QAAS,WAAY,OAAQ,gBAAiB,oBAAqB,aAAc,SAExJ,OAAOzF,IAAMwB,cAAcmxtB,IAAYtttB,YAAS,CAC9C5pC,KAAM,WACNg5E,QAAS,CACP3hE,KAAMwjE,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAUuxe,GAAiBt+f,EAAQs+f,eAC9Fx7c,QAAS9iD,EAAQ8iD,QACjB9e,SAAUhkC,EAAQgkC,UAEpBjX,MAAOA,EACP0T,WAAY7vE,YAAS,CACnB,qBAAsB0tiB,GACrB79d,GACHiY,KAAMntF,IAAMyX,aAAas7hB,EAAgB2/K,EAAoBvloB,EAAM,CACjEzK,SAAmB,UAATprH,EAAmB,QAAU,YAEzCsvc,YAAa5ma,IAAMyX,aAAas7hB,EAAgB2/K,EAAoB9rT,EAAa,CAC/ElkV,SAAmB,UAATprH,EAAmB,QAAU,YAEzCN,IAAKA,EACLyhH,SAAUA,GACTv8F,OAgGUs6D,iBA5LK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ0uF,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAI5BhH,QAAS,GAGT9e,SAAU,GAGVs6d,cAAe,GAGf7kb,aAAc,CACZ,YAAa,CACX1sD,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEvE,uBAAwB,CACtBpP,gBAAiB,iBAIvB,aAAc,CACZ/e,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,WAKhC01C,eAAgB,CACd,YAAa,CACX3sD,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,KAC/B,UAAW,CACT0iF,gBAAiBu/J,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM44C,EAAM+pC,QAAQ/5F,OAAOkpG,cAEzE,uBAAwB,CACtBpP,gBAAiB,iBAIvB,aAAc,CACZ/e,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,cA8IF,CAChC1uG,KAAM,eADOysE,CAEZmhD,I,gBC3MH,IAAIy8C,EAAgBz9K,EAAQ,MACxB8mL,EAAW9mL,EAAQ,MACnBoG,EAAcpG,EAAQ,KAkC1BF,EAAOC,QAJP,SAAcgJ,GACZ,OAAO3C,EAAY2C,GAAU00K,EAAc10K,GAAU+9K,EAAS/9K,K,eCjChEjJ,EAAOC,QAAU,SAASk8vB,GACzB,IAAKA,EAAetN,gBAAiB,CACpC,IAAI7uvB,EAASkD,OAAOC,OAAOg5vB,GAEtBn8vB,EAAOorC,WAAUprC,EAAOorC,SAAW,IACxCloC,OAAOyJ,eAAe3M,EAAQ,SAAU,CACvC4M,YAAY,EACZ/D,IAAK,WACJ,OAAO7I,EAAOmtB,KAGhBjqB,OAAOyJ,eAAe3M,EAAQ,KAAM,CACnC4M,YAAY,EACZ/D,IAAK,WACJ,OAAO7I,EAAO8H,KAGhB5E,OAAOyJ,eAAe3M,EAAQ,UAAW,CACxC4M,YAAY,IAEb5M,EAAO6uvB,gBAAkB,EAE1B,OAAO7uvB,I,gBCtBR,IAGIwE,EAHOtE,EAAQ,KAGDsE,OAElBxE,EAAOC,QAAUuE,G,gBCLjB,IAAIi+K,EAAWviL,EAAQ,KAoBvBF,EAAOC,QARP,SAAeO,GACb,GAAoB,iBAATA,GAAqBiiL,EAASjiL,GACvC,OAAOA,EAET,IAAIkY,EAAUlY,EAAQ,GACtB,MAAkB,KAAVkY,GAAkB,EAAIlY,IAdjB,SAcwC,KAAOkY,I,gBChB9D,IAAIg4e,EAAYxwf,EAAQ,KACxBF,EAAOC,QAAU,SAAU0H,EAAIwtP,EAAMxuP,GAEnC,GADA+pf,EAAU/of,QACG/G,IAATu0P,EAAoB,OAAOxtP,EAC/B,OAAQhB,GACN,KAAK,EAAG,OAAO,SAAU8D,GACvB,OAAO9C,EAAG7B,KAAKqvP,EAAM1qP,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGC,GAC1B,OAAO/C,EAAG7B,KAAKqvP,EAAM1qP,EAAGC,IAE1B,KAAK,EAAG,OAAO,SAAUD,EAAGC,EAAGC,GAC7B,OAAOhD,EAAG7B,KAAKqvP,EAAM1qP,EAAGC,EAAGC,IAG/B,OAAO,WACL,OAAOhD,EAAGoF,MAAMooP,EAAM3sP,c,cCjB1BxI,EAAOC,QAAU,SAAU4wJ,GACzB,IACE,QAASA,IACT,MAAO3jJ,GACP,OAAO,K,gBCHX,IAAIkvvB,EAAQl8vB,EAAQ,MAChBu5f,EAAcv5f,EAAQ,MAE1BF,EAAOC,QAAUiD,OAAO0D,MAAQ,SAAc6+P,GAC5C,OAAO22f,EAAM32f,EAAGg0P,K,gBCJlB,IAAImzK,EAAU1sqB,EAAQ,MACtBF,EAAOC,QAAU,SAAUsmK,GACzB,OAAOrjK,OAAO0pqB,EAAQrmgB,M,cCHxBvmK,EAAOC,QAAU,I,+RCqEfyqmB,EAEE7yjB,IAFF6yjB,aACAC,EACE9yjB,IADF8yjB,oBA6BI0xJ,EAA+D,SAAC,GAAD,IAAG5irB,EAAH,EAAGA,aAAcuE,EAAjB,EAAiBA,QAAS2rC,EAA1B,EAA0BA,QAA1B,OACnE,eAAC,IAAD,WACE,eAAC,IAAD,CAAuBsM,WAAY,cAAC,IAAD,IAAnC,UACE,cAAC,IAAD,CAAY/3C,UAAWF,EAAQi0C,OAAQ,aAAW,SAAStI,QAASA,EAApE,SACE,cAAC,IAAD,MAEF,cAAC,IAAD,UACGlwC,EAAa5wE,IAAI,aAEpB,2BAEF,cAAC,IAAD,UACE,eAAC,IAAD,CACEy1E,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,cAAC,IAAD,CACEZ,MAAM,EADR,SAGE,cAAC,IAAD,UACGjF,EAAa/zD,MAAM,CAAC,OAAQ,QAAU,cAG3C,cAAC,IAAD,CACEg5D,MAAM,EADR,SAGE,cAAC,IAAD,UACGgnD,YAAcjsD,EAAa/zD,MAAM,CAAC,OAAQ,YAAc,YAG7D,cAAC,IAAD,CACEg5D,MAAM,EADR,SAGE,cAAC,IAAD,CACEirC,QAAS,WACP78F,QAAQ7Z,MAAM,gBAAiBwmE,EAAap2D,SAFhD,8CA2BJi5uB,E,kDAIJ,WAAYtttB,GAAQ,IAAD,8BACjB,cAAMA,IAJAu6E,WAGW,IAFX0O,SAAW1uF,cAIjB,EAAKuC,MAAQ,CACXywtB,kBAAmB,IAHJ,E,0CAUnB,WAAiB,IAAD,OACd,EAOIz3vB,KAAKkqC,MANP6iH,EADF,EACEA,OACA7zE,EAFF,EAEEA,QAFF,IAGEw+qB,qBAHF,SAIEC,EAJF,EAIEA,gBACAC,EALF,EAKEA,WACAjttB,EANF,EAMEA,SAEIkttB,EAAY9qmB,GAAUA,EAAOhxJ,KAAO,EACpC+7vB,EAAiBD,EAAY,GAAK3+qB,EAAQusD,OAGhD,OACE,8BACE,sBAAKrsD,UAAWF,EAAQM,UAAxB,UACE,qBAAKJ,UAAW0+qB,EAAhB,SACE,eAAC,IAAD,CACEC,aAAchrmB,EAAOhxJ,KACrBkqG,MAAM,UAFR,UAIE,eAAC,IAAD,CACExqG,IAAKuE,KAAKmzH,SACVzZ,QAAQ,YACRmL,QAAS8yoB,IACT1xpB,MAAM,UAJR,yBAMc,cAAC,IAAD,OAEd,cAAC,IAAD,CACEktB,SAAUnzH,KAAKmzH,SAASrrF,QACxB6iE,KAAM+spB,GAAiBG,EACvBlznB,QAASgznB,GAAgB,GACzB77W,aAAc,CAAE17G,WAAY,OAAQL,SAAU,OAC9C96J,gBAAiB,CAAEm7J,WAAY,OAAQL,SAAU,OALnD,SAOE,eAAC,IAAD,CAAMvmN,WAAW,EAAME,UAAU,SAASc,KAAK,SAAS8gC,MAAO,CAACx/B,QAAS,GAAzE,UACE,cAAC,IAAD,CACE1C,UAAW0+qB,EACXjzoB,QAAS+yoB,EAAW,CAAEz7vB,WAAOL,IAF/B,0BAMCixJ,EAAO/jJ,KACN,SAAC2rE,EAAcx4E,GACb,OACE,cAACo7vB,EAAD,CAGI5irB,eACAuE,UACA2rC,QAAS+yoB,EAAW,CAAEz7vB,WAL1B,UACUw4E,GADV,OACyBx4E,iBAcvC,cAAC,IAAD,CACEo0T,cAAe,WACb,OAAO,cAAC,WAAD,UACL,eAAC,IAAD,CAAiBrmM,MAAM,cAAvB,UACE,6CAGA,uBAAO9wC,UAAWF,EAAQ8+qB,UAAW93vB,KAAK,OAAOzE,IAAK,SAAC2L,GAAW,EAAKq9G,MAAQr9G,KAC/E,wBACEy9G,QAAS,WACPl6E,EAAS,IAAIs8D,IAAe,CAC1B51D,QAAS,EAAKozE,MAAM/oH,MACpBulC,GAAI,QACJimE,iCAAiC,KAEnC,EAAKud,MAAM/oH,MAAQ,IAPvB,uBAYA,wBACEmpH,QAAS+yoB,EAAW,CAAEz7vB,WAAOL,IAD/B,0BAKA,uBACC8kI,YAAcmsB,GACf,wC,GAtGStoH,aAiHrBmI,EAAkBkG,YAAyB,CAC/Ci6G,OAAQ64c,IACR8xJ,cAAe7xJ,MAgBF5whB,sBACbgG,aAxNa,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN7Q,UAAU,IAAD,OAAM,IAAMphC,EAAMZ,UAAlB,MACT+4C,aAAa,IAAD,OAAM,EAAIn4C,EAAMZ,UAAhB,OAEdd,UAAW,CACT4B,QAAS,SAEX48qB,UAAW,CACTpwoB,aAAc,mBAEhB6d,OAAQ,CACNrqD,QAAS,YA6MXyjC,kBAAQjyE,GAfH,SAA4BjC,GACjC,MAAO,CACLittB,WAAY,gBAAEz7vB,EAAF,EAAEA,MAAF,OAAa,SAACgrI,GACxBA,EAAMjjB,kBACNijB,EAAM/F,iBAENz2F,EAAS,IAAIy7D,IAAiB,CAAEjqG,aAElCw7vB,gBAAiB,SAAChtpB,GAAD,OAAU,kBAAMhgE,EAAS,IAAIk5S,IAAsBl5O,MACpEhgE,eAIWsqC,CAGbuirB,I,oECvRE93sB,E,oLCfW,MAA0B,kCCA1B,MAA0B,iCCA1B,MAA0B,2CCA1B,MAA0B,gD,SCA1B,MAA0B,sD,uICG5BG,EAAsB,ONctBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,uDAAiH,CAC/G7Y,UAGGp0B,kB,qDOhCM,OAA0B,kC,mICqEnCqlvB,G,4MACGjxtB,MAAQ,CACbmsF,SAAU,KACVhpB,KAAM,M,EAWD+tpB,sBAAwB,SAAC5jY,GAAD,OAAiC,WAC9D,MAAwC,EAAKpqV,OAE7CiutB,EAFA,EAAQA,uBAAR,EAA+Bn9sB,KAEJj3C,IAAI,MAAOuwX,K,EAGjC8jY,WAAa,WAClB,MAAsC,EAAKlutB,MAAnCkutB,EAAR,EAAQA,WAAYp9sB,EAApB,EAAoBA,KAAM2pF,EAA1B,EAA0BA,QAE1ByznB,EAAWp9sB,EAAKj3C,IAAI,OACpB4gI,K,wDAlBF,SAA0BtmB,GACPr+G,KAAKkqC,MAAd8Q,KAEEj3C,IAAI,e,oBAkBhB,WAAiB,IAAD,OACd,EASI/D,KAAKkqC,MARPwgoB,EADF,EACEA,aACA/liB,EAFF,EAEEA,QACAzrD,EAHF,EAGEA,QACAl+B,EAJF,EAIEA,KACAq9sB,EALF,EAKEA,aACA7poB,EANF,EAMEA,4BACA+7iB,EAPF,EAOEA,YACAx+oB,EARF,EAQEA,EAGIusuB,EAAiB9poB,GAA+B+7iB,IAAgBvvnB,EAAKj3C,IAAI,aAEzEwmU,EAAU8tb,EAAa12uB,MAAK,SAAA42uB,GAAW,OAAIA,EAAYx0vB,IAAI,QAAUi3C,EAAKj3C,IAAI,gBAC9Ey0vB,EAAmBjub,GAAWA,EAAQxmU,IAAI,YAAa,KAAO,GAC9D00vB,EAAkBlub,GAAWA,EAAQxmU,IAAI,WAAY,KAAO,GAC5D20vB,EAA2C,QAAhC19sB,EAAKj3C,IAAI,mBACpB40vB,EAAoB,eAACh0oB,EAAA,EAAD,CACEvrC,UAAWF,EAAQ0/qB,UACnBt/qB,UAAU,IACV8qM,UAAWs0e,EACC,eAAC,KAAD,CAAsBt/qB,UAAWF,EAAQ2/qB,gBAEzC,eAAC,KAAD,CAAsBz/qB,UAAWF,EAAQ2/qB,gBANvD,SASc9suB,EAAX2suB,EAAa,qBAA0B,2BAGpE,OACE,gBAAC7/qB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAME,eAAC4zP,GAAA,EAAD,CACEC,WAAY,CACVhE,SAAU,CACR7jN,IAAKsyoB,GACLzvnB,IAAK,eAGTilM,UAAWgqb,EAAiB,GAAK,CAC/B,CAAEptuB,OAAQa,EAAE,oBAAqB84F,QAAS6ljB,GAC1C,CAAEx/oB,OAAQa,EAAE,sBAAuB84F,QAAS7kH,KAAKo4vB,aAEnDluoB,MAAOn+F,EAAE,oBACT2iT,cACE,eAAC71P,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ6/qB,mBAHrB,SAKE,eAAC,IAAD,CACE/K,kBAAkB,EAClB7goB,OAAQwroB,EACRvqoB,YAAa,CACXl1C,QAAS,CACP3hE,KAAM2hE,EAAQ0/qB,WAEhB3ypB,MAAO,WAET6npB,UAAW,CAAC10qB,UAAWF,EAAQ02P,kBAAmBt0N,MAAO,CAAChgC,MAAO,QATnE,SAYIg9qB,EACI,KACA,CACE,eAAC/7oB,EAAA,EAAD,CAAoBsI,QAAS7kH,KAAKk4vB,sBAAsB,OAAxD,SACGnsuB,EAAE,uBADS,OAGd,eAACwwF,EAAA,EAAD,CAAoBsI,QAAS7kH,KAAKk4vB,sBAAsB,OAAxD,SACGnsuB,EAAE,0BADS,YAQ5Bm7G,YAAavC,IAIf,gBAAC9rD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAME,eAAC6hP,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTh2L,WAAW,aAFb,SAIE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAEmb,WAAY,WAAYquM,UAAW,cAAxE,SACG9pR,EAAKj3C,IAAI,YAKd,gBAACu0T,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTh2L,WAAW,aAFb,UAIE,gBAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UACGl6E,EAAE,yBADL,IAC+B,uBAAMqtD,UAAWF,EAAQ86I,UAAzB,SAAqCwkiB,EAAmB,IAAMC,OAE7F,eAACj/oB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGs+N,aAAWvpR,EAAKj3C,IAAI,gBAAgB,SAKvC20vB,GACA,eAACpgc,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IADX,SAIIj0N,EAAKj3C,IAAI,OAAQ,IAAIiF,KAAI,SAACmhG,GAAD,OACvB,eAAC,WAAD,UACE,eAACtxB,EAAA,EAAD,CACEe,MAAM,EACN,YAAW,EAAK5yC,MAAMmjE,OAASA,EAAKpmG,IAAI,UAAU9C,WAAakpG,EAAKpmG,IAAI,UAAU9C,gBAAanF,EAC/F,gBAAc,OAHhB,SAKE,eAACmuH,GAAA,EAAD,CAASC,MAAO/f,EAAKpmG,IAAI,QAASomH,UAAU,SAA5C,SACE,gBAACpD,GAAA,EAAD,CAAQ3tC,UAAWF,EAAQ84R,OAA3B,UACG7nQ,EAAKpmG,IAAI,cAAgBomG,EAAKpmG,IAAI,aAAa,GAC/ComG,EAAKpmG,IAAI,aAAeomG,EAAKpmG,IAAI,YAAY,WATjComG,EAAKpmG,IAAI,0B,GAnJlB0gC,aAkPfwwC,qBACbgG,aAzEa,SAACC,GAAD,MAA+B,CAC5CzE,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B+E,MAAO,CACLjkB,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5Bq8Q,YAAa,SACb7oS,UAAU,GAAD,OAAKphC,EAAMZ,UAAX,OAEXy+qB,mBAAoB,CAClBx9qB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bs+qB,UAAW,CACTnxoB,aAAcvsC,EAAM4/C,MAAMrT,aAC1B3rC,QAASZ,EAAMZ,QAAQ,IAAM,IAE/Bu+qB,cAAe,CACb5ypB,MAAOif,KAAK,MAEdw+I,QAAS,CACPpnJ,UAAU,GAAD,OAAuB,EAAlBphC,EAAMZ,UAAX,OAEX05I,UAAW,CACT/tH,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/B0vU,OAAQ,CACN/rQ,MAAOif,KAAK,KACZF,gBAAiBE,KAAK,KACtB6P,cAAe,YACfz5C,MAAOJ,EAAMZ,QAAQ,GACrBi3C,OAAQr2C,EAAMZ,QAAQ,GACtB6sC,SAAUjsC,EAAM82C,WAAW7K,SAC3B3F,YAAatmC,EAAMZ,QAAQ,MAE7BkqD,WAAY,CACVzP,cAAe,cAEjB+6M,QAAS,CACPz7M,cAAe,QAEjBtC,MAAO,CACLj2C,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,MACP0qC,gBAAiB,mBACjB/e,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B8mM,kBAAmB,CACjB3pO,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,WA2B9B3pF,YAAgB,gBAChB0/D,mBAxBsB,SAAC73E,EAAOyF,GAAR,sBACnBqG,YAAyB,CAC1BultB,aAAc3/mB,cACd6xhB,YAAavpnB,eACbwtE,4BAA6B7mE,eAH5B7U,CAIA9L,OAGsB,SAAC2D,GAAD,MAAkC,CAC3DiqkB,YAAa,SAAC3zkB,GACZ0J,EAAS,IAAImyB,KAAkB,CAAC77B,SAElCm3tB,WAAY,SAACY,GACXrutB,EAAS,IAAIonsB,IAAiB,CAACinB,qBAEjCb,sBAAuB,SAACl3tB,EAAYg4tB,GAClCtutB,EAAS,IAAIsnsB,IAAgC,CAAChxsB,KAAIg4tB,sBAEpDtutB,eAGasqC,CAIbgjrB,I,qIC3OI3woB,GAAgB,CACpBC,QAAS,SAACC,EAAUxgF,GAAX,mBAAC,eACLwgF,GADI,IAEP0xoB,WAAalytB,EAAM+uF,UAA0B,UAAd,YAC/BpO,YAAa,YACbE,UAAW,MACXJ,aAAc,SAEhBK,eAAgB,SAACN,GAAD,mBAAC,eACZA,GADW,IAEdkhB,YAAa,KAEf3gB,kBAAmB,iBAAO,CACxB3sC,QAAS,SAEX8nQ,mBAAoB,iBAAO,CACzB9nQ,QAAS,SAEXgrjB,gBAAiB,SAAC5+gB,GAAD,mBAAC,eACbA,GADY,IAEfiP,WAAY,aAIV0ioB,GAAqB,SAACC,EAAcC,GACxC,IAAMC,EAAkBF,EAAapwvB,KAAI,SAAAmhG,GAAI,OAAIA,EAAKpmG,IAAI,aACpDw1vB,EAAcF,EAAWA,EAASrwvB,KAAI,SAAAmhG,GAAI,OAAIA,EAAKpmG,IAAI,SAAS,GAEtE,MAAO,CACLy1vB,cAAeD,EAAYhuvB,QAAO,SAAAy0F,GAAM,OAAKs5pB,EAAgB/vvB,SAASy2F,MACtEy5pB,gBAAiBH,EAAgB/tvB,QAAO,SAAAy0F,GAAM,OAAKu5pB,EAAYhwvB,SAASy2F,QAItE05pB,GAAmB,SAAA1+sB,GACvB,OAAIz4B,kBAAQy4B,EAAKj3C,IAAI,SACZ,GAGFi3C,EAAKj3C,IAAI,QAAQiF,KAAI,SAAAmhG,GAAI,OAAI/gF,iBAAO,CACvC6X,GAAIkpE,EAAKpmG,IAAI,UACbrI,MAAM,GAAD,OAAKyuG,EAAKpmG,IAAI,aAAd,YAA8BomG,EAAKpmG,IAAI,kBAE9CnB,WAGEw4G,GAAgB,SAAApgE,GAAI,MAAK,CAC7BymU,KAAMzmU,EAAKj3C,IAAI,SAAW,GAC1Bk1vB,gBAAiBj+sB,EAAKj3C,IAAI,oBAAsB,MAChD41vB,cAAeD,GAAiB1+sB,IAAS,KAWrC4+sB,G,4MACG5ytB,MAAQo0E,GAAc,EAAKlxE,MAAM8Q,M,EAmBjCimrB,kBAAoB,SAAA38tB,GAAG,OAAI,SAAA8D,GAChC,EAAKw6G,SAAL,eAAgBt+G,EAAM8D,EAAE4kB,OAAOtxB,U,EAG1Bm+vB,iBAAmB,SAAAF,GACxB,EAAK/2oB,SAAS,CAAC+2oB,mB,EAGVG,sBAAwB,SAAAt8nB,GAC7B,MAAuD,EAAKtzF,MAApD6vtB,EAAR,EAAQA,WAAYC,EAApB,EAAoBA,gBAAiB1ysB,EAArC,EAAqCA,cAErC,GAAIk2E,EAAW37H,OAAS,EAAG,CACzB,IAAMw6Y,EAAoB29W,EAAkBA,EAAgBj2vB,IAAI,cAAgB,KAGhFg2vB,EAAW,CACTv8nB,aACAugf,gBAAuC,WAAtB1hO,IAAA,OAAiC/0V,QAAjC,IAAiCA,MAClDZ,OALmC,SAAtB21V,EAA+B29W,EAAgBp5uB,MAAM,CAAC,YAAa,OAAQ,OAAS,KAMjG0rC,SALqC,WAAtB+vV,EAAiC29W,EAAgBp5uB,MAAM,CAAC,YAAa,SAAU,OAAS,S,EAUtG82S,OAAS,WACd,MAOI,EAAKxtR,MANPwgoB,EADF,EACEA,aACAuvF,EAFF,EAEEA,SACAjB,EAHF,EAGEA,eACA94vB,EAJF,EAIEA,KACA8wR,EALF,EAKEA,OACAh2O,EANF,EAMEA,KAEF,EAII,EAAKhU,MAHPy6U,EADF,EACEA,KACAw3Y,EAFF,EAEEA,gBACAU,EAHF,EAGEA,cAEF,EAA2CR,GAAmBn+sB,EAAKj3C,IAAI,OAAQ,IAAK41vB,GAIpFM,EACEjB,EACA94vB,EACA8wR,EACAywF,EACAw3Y,EATF,EAAQO,cAAR,EAAuBC,iBAavB/uF,K,EAGKh8U,aAAe,WACpB,MAII,EAAKxkT,MAHP8utB,EADF,EACEA,eACAtuF,EAFF,EAEEA,aACA/liB,EAHF,EAGEA,SAGmB,IAApBq0nB,EAAyBr0nB,IAAY+liB,K,wDA9ExC,SAA0BrsjB,EAAsC4yJ,EAAyBk6C,GACnF7lT,aAAG+4G,EAAUrjE,KAAMh7C,KAAKkqC,MAAM8Q,QAQ9BqjE,EAAU26oB,iBAAmBh5vB,KAAKkqC,MAAM8utB,gBApB5B,SAAC7tvB,EAAQ6vC,GAC3B,IAAMk/sB,EAAS9+oB,GAAcpgE,GAE7B,OAAO7vC,EAAOs2W,OAASy4Y,EAAOz4Y,MACzBt2W,EAAO8tvB,kBAAoBiB,EAAOjB,iBAClC3zvB,aAAG8jB,iBAAOje,EAAOwuvB,eAAgBvwuB,iBAAO8wuB,EAAOP,gBAgB5CQ,CAAYn6vB,KAAKgnC,MAAOq3E,EAAUrjE,QAIxCh7C,KAAK4iH,SAASxH,GAAcp7G,KAAKkqC,MAAM8Q,S,oBAmEzC,WACE,MAQIh7C,KAAKkqC,MAPPy6F,EADF,EACEA,QACAzrD,EAFF,EAEEA,QAEA6/D,GAJF,EAGE/9F,KAHF,EAIE+9F,eAGAhtH,GAPF,EAKE7rB,KALF,EAME8wR,OANF,EAOEjlQ,GAGIi1F,EAAQ+3B,EAAch1I,IAAI,UAC1Bi1I,EAAcD,EAAch1I,IAAI,eAEhCq2vB,EAAYp5oB,EAAMh4G,KAAI,SAAAmhG,GAAI,OAAI/gF,iBAAO,CACzC6X,GAAIkpE,EAAKpmG,IAAI,MACbrI,MAAM,GAAD,OAAKyuG,EAAKpmG,IAAI,aAAd,YAA8BomG,EAAKpmG,IAAI,kBAC1Cwd,SAEJ,OACE,gBAACs3D,EAAA,EAAD,CACEO,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAOE,eAAC+oP,GAAA,EAAD,CAAkBr5M,MAAOn+F,EAAE,8BAA+Bm7G,YAAavC,IAGvE,gBAAC9rD,EAAA,EAAD,CACEO,UAAWF,EAAQzC,KADrB,UAGE,gBAACoC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAME,eAAC8/B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,UAFR,SAIGl6E,EAAE,4BAEL,eAACusS,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,CAAiB71L,UAAWF,EAAQ4/qB,YAC7Czpf,YAAY,EACZp2L,WAAW,aAHb,SAKE,eAACi9O,GAAA,EAAD,CACElrM,YAAaj/F,EAAE,+BACfoyU,WAAW,EACX35B,KAAK,IACL9oU,MAAOsE,KAAKgnC,MAAMy6U,KAClBjmQ,SAAUx7G,KAAKihuB,kBAAkB,QACjC1lpB,OAAO,SACPuhC,WAAY,CAACxB,MAAO,CAAEmb,WAAY,WAAYquM,UAAW,eACzDjrN,WAAW,MAKf,eAACy+M,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,IACTpjJ,KAAM9/F,EAAE,6BACRsjP,YAAY,OAGhB,eAACipD,GAAA,EAAD,CAAWjpD,YAAY,EAAvB,SACE,eAACvuI,GAAA,EAAD,UACE,gBAACyiS,GAAA,EAAD,CACEnqV,UAAWF,EAAQonE,MACnB5kJ,MAAOsE,KAAKgnC,MAAMiytB,gBAClBz9oB,SAAUx7G,KAAKihuB,kBAAkB,mBAHnC,UAKE,eAAClpa,GAAA,EAAD,CACEr8T,MAAM,MACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ81L,iBAA/C,SACJjjP,EAAE,6BAGP,eAACgsS,GAAA,EAAD,CACEr8T,MAAM,MACN6rH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ81L,iBAA/C,SACJjjP,EAAE,uCASsB,QAA/B/rB,KAAKgnC,MAAMiytB,iBACX,eAAC3gc,GAAA,EAAD,CACErpD,QAAS,eAAC,KAAD,CAAY71L,UAAWF,EAAQmhrB,WACxChrf,YAAY,EAFd,SAIE,eAAC6vH,GAAA,EAAD,CACEz6Q,MAAO,CACL/oH,MAAOsE,KAAKgnC,MAAM2ytB,eAEpBtzpB,KAAM,GACNsT,WAAY,CACVoR,SAAS,EACT/+E,QAASoutB,EACTr3oB,UAAWi2B,EACXhuB,YAAaj/F,EAAE,gCACfyvF,SAAUx7G,KAAK65vB,iBACfr3oB,cAAexiH,KAAK85vB,uBAEtBlgpB,iBAAkB,CAChBC,WAAW,GAEbj+B,OAAQ0rC,OAOhB,eAACi3d,GAAA,EAAD,CAAer3c,YAAalnI,KAAK0uV,aAAconB,WAAY91W,KAAK03T,mB,GAhN5CjzR,aA2RfwwC,qBACbgG,aArEa,SAACC,GAAD,MAA+B,CAC5CzE,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC43O,UAAW,CACTjsN,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9BkmI,iBAAkB,CAChB/oK,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B+E,MAAO,CACLhC,WAAYhtC,EAAMZ,QAAQ,IAE5Bw+qB,UAAW,CACTx8oB,UAAWphC,EAAMZ,QAAQ,IAE3B+/qB,SAAU,CACRhnoB,aAAcn4C,EAAMZ,eAqDtBn7B,YAAgB,gBAChB0/D,mBAlDsB,SAAC73E,EAAOyF,GACA,MAAjBA,EAASuO,KAAevO,EAASuO,KAAOpoC,gBAArD,IACMonvB,EAAoC,YAAlBvttB,EAASvsC,KAAqB2qN,eAAoB7jL,GAAS,KAEnF,OAAO,aACLgztB,mBACGlntB,YAAyB,CAC1BimG,cAAeD,eACfxxF,cAAe7F,gBAFd3O,CAGA9L,OAIoB,SAAC2D,EAA6B8B,GAA9B,MAA4C,CACrEsttB,WAAY,YAA+I,IAA5Iv8nB,EAA2I,EAA3IA,WAAY92E,EAA+H,EAA/HA,OAAQ4F,EAAuH,EAAvHA,SAAUyxjB,EAA6G,EAA7GA,gBAC3CpzkB,EAAS,IAAIiwB,KAAuB,CAAE4iE,aAAY92E,SAAQ4F,WAAUyxjB,sBAEtEk8I,SAAU,SACRjB,EACA94vB,EACA8wR,EACAywF,EACAw3Y,EACAO,EACAC,IAE6B,IAA7BhttB,EAASustB,eACPrutB,EAAS,IAAI0nsB,IAAe,CAC5B2mB,iBACA94vB,OACA8wR,SACAywF,OACAw3Y,kBACAO,gBACAC,qBAEA9utB,EAAS,IAAIwnsB,IAAiB,CAC9B1wX,OACAvhX,OACA8wR,SACAioe,kBACAO,gBACAC,0BAKSxkrB,CAIb2krB,IC9YWU,GAAoB,6BAkBpBvxF,GAAmB,uBAG1BwxF,G,4MACGlkoB,YAAc,SAACy3hB,GAAD,OAAwB,WAC3C,MAA6B,EAAK5jnB,MAA3BkonB,EAAP,EAAOA,UAEPznnB,EAFA,EAAiBA,UAER,IAAI8J,IAAiC,CAC5CxT,GAAImxnB,EACJz2mB,QAASmymB,O,EAIN5mhB,YAAc,WACnB,MAA6B,EAAKh9F,MAA3BkonB,EAAP,EAAOA,UAEPznnB,EAFA,EAAiBA,UAER,IAAI0J,IAA6B,CACxCpT,GAAImxnB,EACJznjB,MAAM,M,4CAIV,WAAiB,IAAD,OACd,EAKI3qG,KAAKkqC,MAJEqmS,EADX,EACE50R,QACA6+sB,EAFF,EAEEA,aACAxB,EAHF,EAGEA,eAHF,IAIEv2nB,sBAJF,MAImB,GAJnB,EAQEviI,EAEEuiI,EAFFviI,KACA8wR,EACEvuJ,EADFuuJ,OAGIr1O,EACI40R,IACDw4V,GACI,eAAC,GAAD,CACL/tnB,KAAMw/sB,EACN9vF,aAAc,EAAKr0iB,cACnBsO,QAAS,EAAKuC,YACd8xnB,eAAgBA,EAChB94vB,KAAMA,EACN8wR,OAAQA,IAIH,eAAC,GAAD,CACLh2O,KAAMw/sB,EACN9vF,aAAc,EAAKr0iB,YAAY0yiB,IAC/BpkiB,QAAS,EAAKuC,cAMtB,OAAO,eAACruD,EAAA,EAAD,UACJl9B,Q,GAvD8BlX,aAkFtBwwC,qBACbgG,aAvBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ6jE,QAAS,YAsBXj8B,YAAgB,gBAChB0/D,mBAnBsB,SAAC73E,EAAOkD,GAC9B,IAAQkonB,EAAalonB,EAAbkonB,SACR,OAAOt/mB,YAAyB,CAC9B6I,QAASiiK,YAAkCw0c,GAC3CooG,aV7DuC3ntB,YACzC8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMpmB,MAAM,CAAC,QAASomB,EAAMjjC,IAAI,mBAAoB6O,oBU4DlGomvB,eVnEyCnmtB,YAC3C8M,KACA,SAAC3Y,GAAD,OAAgDA,EAAMjjC,IAAI,qBUkExD0+H,eAAgBjH,YAA+B42hB,IAJ1Ct/mB,CAKJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,CAIbslrB,I,6LCjFI/qoB,GAAYJ,cAChB,SAACl0C,GACC,MAAO,CACL8qkB,sBAAuB,CACrB3giB,OAAQ,OACR9pC,OAAQ,cACRq4C,UAAW,iBACXmH,WAAY,yBAEdxjH,KAAM,CAAE6jE,QAAS,QACjB3E,KAAM,CAAEqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IACxC4vC,MAAO,CAAEmJ,aAAcn4C,EAAMZ,QAAQ,IACrCmgrB,gBAAiB,CAAEn/qB,MAAO,OAAQ2qB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAC/Do4tB,cAAe,CAAEp/qB,MAAO,QACxBq/qB,aAAc,CAAE10pB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAC1C01oB,aAAc,CAAEt/qB,MAAO,QACvBu/qB,mBAAoB,CAAE50pB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MACnDw4tB,WAAY,CAAE70pB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAC3Cy4tB,WAAY,CAAEj/qB,QAASZ,EAAMZ,QAAQ,KACrC0grB,cAAe,CAAE3+qB,SAAU,EAAGD,UAAW,GACzC6+qB,oBAAqB,CAAE3/qB,MAAO,EAAGe,SAAU,GAC3C6+qB,sBAAuB,CAAEl2oB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAC7Di2oB,iBAAkB,CAChB9+qB,SAAU,EACVqsD,YAAaxtD,EAAMZ,QAAQ,IAC3B43C,cAAe,GACf2B,aAAc,GACd5B,WAAY,GACZjN,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtCk2oB,oBAAqB,CAAE/noB,aAAc,IACrCgooB,gBAAiB,CAAEh/qB,SAAU,GAC7Bi/qB,QAAS,CAAEj/nB,UAAW,gBACtBk/nB,gBAAiB,CAAEl/nB,UAAW,kBAC9Bm/nB,oBAAqB,CACnBlgrB,MAAO,GACP+pC,OAAQ,UACRjqC,QAAS,OACTM,eAAgB,SAChBzC,WAAY,cA6TPqhrB,GAAoB,gCAClBrlrB,qBACbk6C,KADal6C,EAxTqD,SAAC,GAAiC,IAA/BpoB,EAA8B,EAA9BA,cAAeulmB,EAAe,EAAfA,SAC9EznnB,EAAW2F,wBACX4oC,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF0vuB,EAAgCj1tB,mBAAQ,kBAAMg1F,YAA+B8+nB,MAAoB,CAACA,KAClGp6R,EAAwBxub,sBAAY+ptB,GAC1C,EAAwC/8sB,mBAAS,IAAjD,oBAAOg9sB,EAAP,KAAqBC,EAArB,KAEA,EAA8Cj9sB,oBAAU,GAAxD,oBAAO06X,EAAP,KAAwBC,EAAxB,KACA,EAAgE36X,mBAAS,MAAzE,oBAAOk9sB,EAAP,KAAiCC,EAAjC,KACA,EAAoDn9sB,mBAAS,MAA7D,oBAAOo9sB,EAAP,KAA2BC,EAA3B,KAEA,EAAkDr9sB,oBAAS,GAA3D,oBAAOs9sB,EAAP,KAA0BC,EAA1B,KAEA,EAAgCv9sB,mBAAS,MAAzC,oBAAOy0E,EAAP,KAAiBs9J,EAAjB,KAEMl8D,EAAS7iL,sBAAY0vN,gBAE3Bj7N,qBAAU,WACR,GAAkC,kBAAvB21tB,EAAiC,CAC1C,IAAMjW,EAAkB1pqB,aAAM2/qB,EAAoB,GAAG1hgB,QAAQ,GAC7D8hgB,EAAOC,cAAP,8BAA4C/iV,EAA5C,cAAyEysU,GACzExsU,GAAoB,GACpB0iV,EAAsB,MAEU,kBAAvBD,IACTI,EAAOC,cAAP,8BAA4C/iV,EAA5C,cAAyE0iV,GACzEziV,GAAoB,GACpB0iV,EAAsB,SAEvB,CAACD,IAEJ,IAAMI,EAASE,aAAU,CACvB99oB,cAAe,CACbyvK,QAASmyM,EAAsBnyM,QAAQxvQ,QAEzC+9S,SAAU,SAAAnxT,GAER,IAAMmxY,EAAanxY,EAAO4iR,QACtBtsR,MAAMC,QAAQyJ,EAAO4iR,QAAQ/4D,cAC/BsnL,EAAWtnL,YAAYtoN,SAAQ,SAACgnX,GACF,KAAxBA,EAAWvhK,WACbuhK,EAAWvhK,SAAW,SAK5B8piB,GAAqB,GACrBtxtB,EAAS,IAAIqnE,MAA8C,CACzDkE,UAAW/qG,EAAO4iR,QAAQ9sP,GAC1BuyV,mBAAoB0sG,EAAsBnyM,QAAQhqR,IAAI,eACtDixN,YAAa7pN,EAAO4iR,QAAQ/4D,YAC5BomL,SAAS,GAAD,OAAKvlX,4BAAL,YAAiC1qB,EAAO4iR,QAAQ9sP,IACxDqmS,UAAW,kBAAMpgM,KACjByxQ,SAAU,WACRsjX,GAAqB,UAMvB/0nB,EAAc,WAClBv8F,EAAS,IAAI0J,IAA6B,CACxCpT,GAAImxnB,EACJznjB,MAAM,MAMJ0xpB,EAA4B,SAAClgwB,GAAD,OAAW,SAACiM,GAC5C,GAAuB,KAAnBA,EAAE4kB,OAAOtxB,MACXwgwB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+D,WAC1D,GAAuB,YAAnBiM,EAAE4kB,OAAOtxB,MAAqB,CACvC,IAAM4gwB,EAAaJ,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAY74N,GAAOk2N,QACtD4D,EAAc1B,EAAO3zM,MAAM,CAAC07uB,EAAY,gBAC9C,GAAIrmiB,GAAeA,EAAYl6N,KAAO,EAAG,CACvC,IAAMixB,EAASgZ,SAASghhB,eAAT,8BAA+C7qjB,EAA/C,eACX6wB,IACFqsZ,EAAmBl9a,GACnB0/vB,EAA4B5liB,GAC5Bw6D,EAAYzjQ,SAET,GAA0B,KAAX,OAAXipM,QAAW,IAAXA,OAAA,EAAAA,EAAal6N,MAAY,CAClC,IAAMgqvB,EAAsB9vhB,EAAY7yM,QAAQrf,IAAI,kBAC9C6jrB,EAAa3xd,EAAY7yM,QAAQrf,IAAI,UAAY,EACjD8hvB,EAAkB1pqB,aAAMxD,WAAWivmB,GAAa,GAAGxtb,QAAQ,GACjE8hgB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+D4pvB,GAAuBF,IAG1FqW,EAAOp7f,aAAa14P,KAGhBm0vB,EAAuB,SAACpgwB,GAAD,OAAW,SAACiM,GACvC,IACM1M,EAAQ0M,EAAE4kB,OAAOtxB,MACT,KAAVA,GACFwgwB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+D,MAC/D+/vB,EAAOp7f,aAAa14P,IAJR,qBAKG2yC,KAAKr/C,KACpBwgwB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+DiM,EAAE4kB,OAAOtxB,OACxEwgwB,EAAOp7f,aAAa14P,MAIlB69uB,EAAuB,SAAC9pvB,GAAD,OAAW,SAACiM,GACvC,IAAM1M,EAAQ0M,EAAE4kB,OAAOtxB,MACnBA,IACE0gD,MAAM1gD,GACRwgwB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+D,MAE/D+/vB,EAAOC,cAAP,8BAA4ChgwB,EAA5C,cAA+D0S,OAAOlN,OAAOjG,KAE/EwgwB,EAAOp7f,aAAa14P,MAIlBo0vB,EAA0B,SAACr1nB,GAC/BA,EAAMjjB,mBAGR,OACE,gBAACrrC,EAAA,EAAD,CAAMO,UAAWF,EAAQ3hE,KAAMiiE,WAAW,EAAME,UAAU,SAASc,KAAK,SAAxE,UACE,eAAC+oP,GAAA,EAAD,CAAkBr5M,MAAOn+F,EAAE,6BAA8Bm7G,YAAaA,IACtE,gBAACruD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQzC,KAA7D,UACE,eAAC+iC,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAAU7sB,UAAWF,EAAQgxC,MAAjE,SACGn+F,EAAE,qCAEL,wBAAMuwS,SAAU4/b,EAAO75b,aAAvB,UACE,gBAACxpP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UAEE,gBAACb,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAME,MAAM,EAA7C,UACE,eAACf,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,IAAM1B,MAAM,EAAlC,SAAyC,KACzC,eAACf,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQ6hrB,WAAb,YAA2B7hrB,EAAQ8hrB,eAAiBphrB,MAAM,EAAzE,SACE,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAApC,cAAgDl6E,EAAE,2BAAlD,SAEF,eAAC8sD,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQ6hrB,WAAb,YAA2B7hrB,EAAQ8hrB,eAAiBphrB,MAAM,EAAzE,SACE,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAApC,cAAgDl6E,EAAE,6BAAlD,SAEF,eAAC8sD,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQ6hrB,WAAb,YAA2B7hrB,EAAQ8hrB,eAAiBphrB,MAAM,EAAzE,SACE,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAApC,cAAgDl6E,EAAE,4BAAlD,YAIHmwuB,EAAO/wvB,OAAO4iR,SAAWmue,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAYhsN,KAAI,SAAC0qX,EAAYv3X,GAAW,IAAD,MACrF,GAAIu3X,EAAWrhK,UAAYkC,EAAOxwN,IAAI2vX,EAAWrhK,SAC/C,OAAO,KAET,IAKMoqiB,IAAiB,UAAEf,EAAav/vB,UAAf,WAEjBugwB,EAAiBhpY,EAAWz7O,QAAQ9xB,UACxC,2CAAG,eAAC3M,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,UAApC,SAA+Cg6Q,EAAWz7O,QAAQ9xB,YAArE,OACE,2CAAG,eAAC3M,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,UAApC,SAA+Cg6Q,EAAWz7O,QAAQ/xB,eAArE,OAEEmsG,EAAO,UAAGqhK,EAAWrhK,eAAd,QAAyB,KAChCC,EAAciC,EAAO3zM,MAAM,CAACyxM,EAAS,gBACrCsqiB,EACsB,QAA1B,OAACrqiB,QAAD,IAACA,IAAe,OAA8B,OAAZD,EAE9B,gBAACuiG,GAAA,EAAD,CAAKx5O,QAAQ,OAAOnC,WAAW,SAA/B,UACE,eAACq0C,GAAA,EAAD,CAAMF,KAAI,UAAK1+F,OAAO+6B,SAAS3uC,QAArB,OAA8B2T,8BAA9B,OAAkDmG,cAAlD,YAAgEy9L,GAAWrlM,OAAQ,SAAUsuF,MAAO,CAAE2R,UAAW,UAA3H,SACE,eAACzT,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ4hrB,WAAYphpB,QAAQ,UAAUzT,MAAM,UAAnE,SACGqsH,MAIHiC,EAAO3zM,MAAM,CAACyxM,EAAS,YAAc,eAAC,KAAD,CAAiBlrG,SAAS,QAAQlhB,MAAM,gBAIlF,+BAEL,OACE,eAACptB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMN,UAAS,UAAKF,EAAQkirB,qBAE3D9/oB,MAAO,CAAE+X,aAAc,IACvBz5C,MAAM,EAHR,SAIE,gBAACm3C,GAAA,EAAD,CAAgB33C,UAAS,UAAKF,EAAQmirB,iBAAmB//oB,MAAO,CAAEj/B,SAAU,GAAK6hQ,QAAQ,EAAMhhO,SAAUq3G,EAAO3zM,MAAM,CAAC8yW,EAAWrhK,QAAS,WACzIphG,UAAW,EADb,UAEE,eAACC,GAAA,EAAD,CAAuB5V,MAAO,CAAEx/B,QAAS,EAAGP,OAAQ,eAClDrC,QAAS,CACPv9B,QAASu9B,EAAQ8skB,sBACjBh1hB,SAAU93C,EAAQ8skB,uBAHtB,SAKE,gBAACntkB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAjC,UACE,eAACb,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQ6hrB,WAAb,YAA2B7hrB,EAAQsirB,qBAChD32oB,QA3CkB,SAACsiB,GAC7B,IAAM9V,EAAQ,eAAQqqoB,GACtBrqoB,EAASl1H,GAAoC,qBAApBk1H,EAASl1H,KAAiCk1H,EAASl1H,GAC5Ew/vB,EAAgBtqoB,IAwC0Bz3C,MAAM,EAAMJ,WAAW,EADzD,SAEE,eAAC,KAAD,CACEJ,UAAwB,UAAbqjrB,EAAmBvjrB,EAAQqirB,gBAAuBrirB,EAAQoirB,aAGzE,gBAACzirB,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQ+hrB,qBAAuBrhrB,MAAM,EAAMF,UAAU,MAAMF,WAAW,EACxFqrC,QAAS23oB,EADX,UAGE,eAAC3jrB,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAMF,UAAU,MAAMF,WAAW,EAAMJ,UAAWF,EAAQ6hrB,WAC3E9hrB,WAAW,SADb,SAEE,gBAACJ,EAAA,EAAD,CAAMe,MAAM,EAAZ,cAAoB8irB,EAApB,SAGF,gBAAC7jrB,EAAA,EAAD,CAAMO,UAAWF,EAAQ6hrB,WACvBz/oB,MAAO,CAAElgC,QAAS,OAAQgtR,cAAe,SAAU1sR,eAAgB,UACnEd,GAAI,EAAGhB,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAFhD,UAGE,gBAACooC,EAAA,EAAD,CACEq2iB,kBAAkB,EAClB/+kB,UAAWF,EAAQuhrB,gBACnBvhrB,QAAS,CAAE04C,KAAM14C,EAAQ2hrB,oBACzBn/vB,MAAOwgwB,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAY74N,GAAO+1N,WAAa,GAC7D12G,SAAU6gpB,EAA0BlgwB,GACpC4oqB,cAAc,EACdv2pB,KAAI,8BAAyBrS,EAAzB,eACJ8kC,GAAE,8BAAyB9kC,EAAzB,eARJ,UAUE,eAACogH,EAAA,EAAD,CAAU7gH,MAAM,GAAhB,eACCslC,mBAAgBh4B,KAAI,gBAAGtN,EAAH,EAAGA,MAAOwlC,EAAV,EAAUA,UAAWD,EAArB,EAAqBA,GAArB,OACnB,eAACs7E,EAAA,EAAD,CAAmB7gH,MAAOA,EAA1B,SACE,eAAC89G,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,UAApC,SACGl6E,EAAEmV,MAFQD,SAQlB07tB,KAGH,eAAC9jrB,EAAA,EAAD,CAAMO,UAAWF,EAAQ6hrB,WAAYnhrB,MAAM,EAAMJ,WAAW,EAAMoB,GAAI,EAAG3B,WAAW,SAApF,SACE,eAACi9O,GAAA,EAAD,CACEntN,QAASyzpB,EACTt/oB,UAAWg/oB,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAY74N,GAAO+1N,UACpDr4G,WAAW,EACX54E,GAAE,8BAAyB9kC,EAAzB,cACFqS,KAAI,8BAAyBrS,EAAzB,cACJT,MAAK,UAAEwgwB,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAY74N,GAAOg2N,gBAA3C,QAAuD,GAC5D32G,SAAU+gpB,EAAqBpgwB,GAC/BupI,OAAQugnB,EAAqB9pvB,eAMvC,eAACk0H,GAAA,EAAD,CAAuB/U,MAAO,CAAEx/B,QAAS,EAAGP,OAAQ,GAApD,SACE,gBAAC1C,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAME,MAAM,EAA7C,UACE,eAACf,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,GAAK1B,MAAM,EAAjC,SAAwC,KACxC,eAACf,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQgirB,uBAC1B5/oB,MAAO,CAAEhgC,MAAO,IAAM1B,MAAM,EAD9B,SACqC,KACrC,gBAACf,EAAA,EAAD,CAAMO,UAAS,UAAKF,EAAQiirB,kBAAoBvhrB,MAAM,EAAtD,UACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAS,UAAKF,EAAQgxC,MAAb,YAAsBhxC,EAAQyhrB,cAArE,SACG5uuB,EAAE,6BAEL,eAACmqS,GAAA,EAAD,CACE98O,UAAWF,EAAQ0hrB,aACnBz8Z,WAAW,EACXl9T,GAAE,8BAAyB9kC,EAAzB,aACFqS,KAAI,8BAAyBrS,EAAzB,aACJT,MAAOwgwB,EAAO/wvB,OAAO4iR,QAAQ/4D,YAAY74N,GAAOi2N,SAAW,GAC3D52G,SAAU0gpB,EAAOp7f,2BAjFtB3kQ,SA2Fb,eAACoilB,GAAA,EAAD,CACEh5G,aAAcy2R,EACdx2R,iBAAkBz5c,EAAE,2BACpBm7G,YAAaA,EACb4uO,WA/MS,WACjBrvQ,KAAmB9rE,mBAAgBiiuB,oBAAqB/vsB,cAmNtD,eAAC8jO,GAAA,EAAD,CACEx9J,SAAUA,EACV2oR,aAAc,CAAE/7G,SAAU,SAAUK,WAAY,UAEhD08I,aAAa,EACbnyU,KAAMttG,QAAQ81H,GALhB,SAOE,gBAACyhM,GAAA,EAAD,CAAKn/O,EAAG,EAAR,UACE,eAAC8mC,EAAA,EAAD,CAAUW,UAAU,EAApB,SACE,eAAC1D,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,iDAHT,OAMG6vuB,QANH,IAMGA,OANH,EAMGA,EAA0Bj5vB,WAAWqG,KAAI,SAAC4+qB,EAAYtjrB,GAAb,OACxC,eAACi4G,EAAA,EAAD,CAAoBsI,QAAS,WAC3Bk3oB,EAAsBn0E,EAAW,GAAG7jrB,IAAI,mBAAqB6jrB,EAAW,GAAG7jrB,IAAI,UAC/E0sR,EAAY,OAFd,SAIE,gBAAC53M,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BkukB,EAAW,KACrC,eAACpukB,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BkukB,EAAW,GAAG7jrB,IAAI,mBAAqB6jrB,EAAW,GAAG7jrB,IAAI,eANxEO,iBClYrBkrH,GAAYJ,YAAW,CAC3B73G,KAAM,CACJ8kE,SAAU,KAyBCwgrB,GAtBuB,SAAC3ytB,GACrC,IAAMgvC,EAAUs2C,GAAUtlF,GAC1B,OAAQ,uCACN,eAAC4ytB,EAAA,EAAD,CACE5jrB,QAAS,CAAC3hE,KAAM2hE,EAAQ3hE,MACxB+3G,SAAUytoB,IACV5qG,cAAe,eAAC6qG,EAAA,EAAD,CAAuB5qG,SAAU2qG,QAElD,eAACD,EAAA,EAAD,CACE5jrB,QAAS,CAAC3hE,KAAM2hE,EAAQ3hE,MACxB+3G,SAAU2toB,GACV9qG,cAAe,eAAC,GAAD,CAAwBC,SAAU6qG,OAEnD,eAACH,EAAA,EAAD,CACE5jrB,QAAS,CAAC3hE,KAAM2hE,EAAQ3hE,MACxB+3G,SAAU4toB,GACV/qG,cAAe,eAACgrG,GAAD,CAA4B/qG,SAAU8qG,KACrDE,YAAa,U,4GCuDN16X,GAAW,uBAClB26X,G,4MACGr2tB,MAAQ,CACby7E,WAAY,I,EAkBPC,kBAAoB,SAACt6G,GAC1B,EAAKw6G,SAAS,CACZH,WAAYr6G,EAAE4kB,OAAOtxB,QAEA,KAAnB0M,EAAE4kB,OAAOtxB,QACX,EAAKwuC,MAAMS,SAAS,IAAI+vB,MAAiC,IACzD,EAAKxwB,MAAMS,SAAS,IAAIqsB,KAAsB5uD,EAAE4kB,OAAOtxB,U,wDArB3D,SAA0B2iH,GACxB,MAGIr+G,KAAKkqC,MAFP82E,EADF,EACEA,MACAr2E,EAFF,EAEEA,SAGA83E,EACEziH,KAAKgnC,MADPy7E,WAEI66oB,EAAYt8oB,EAAM5rG,QAEL,KAAfqtG,GAAqB66oB,EAAY,GACnC3ytB,EAAS,IAAIiyB,KAAsBhqD,oB,oBAcvC,WAAiB,IAAD,EACd,EAOI5S,KAAKkqC,MANPgxC,EADF,EACEA,MACAhC,EAFF,EAEEA,QACAntD,EAHF,EAGEA,EACA4e,EAJF,EAIEA,SACAq2E,EALF,EAKEA,MACAu8oB,EANF,EAMEA,wBAGF,EAEIv9vB,KAAKgnC,MADPy7E,kBADF,MACe,GADf,EAGA,OAAO,eAAC,IAAD,CACL6M,SAAUozQ,GACVpmT,SAAS,KAFJ,SAIL,gBAACu1C,GAAA,EAAD,CAAOvW,MAAO,CAAEx/B,QAAQ,GAAD,OAAuB,EAAlBZ,EAAMZ,UAAX,MAA8BgB,MAAM,GAAD,OAAuB,GAAlBJ,EAAMZ,UAAX,OAA1D,UACE,eAACk/B,EAAA,EAAD,CACEE,QAAQ,KACR4B,MAAO,CAAC+X,aAAa,GAAD,OAAuB,EAAlBn4C,EAAMZ,UAAX,OAFtB,SAIGvuD,EAAE,0BAEL,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACs8O,GAAA,EAAD,CACEiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SAAUx7G,KAAK0iH,kBACf7I,WAAW,EACXiD,WAAY,CACZC,eAAgB,gBAACC,GAAA,EAAD,CAAgBC,SAAS,QAAzB,UACE,eAAC,IAAD,CAAiB2U,KAAK,SAAStW,MAAO,CAACrV,MAAO,aADhD,YAMpB,eAACptB,EAAA,EAAD,CACIW,WAAW,EACXE,UAAU,SACVN,UAAWm0C,KAAU,mBAAGr0C,EAAQskrB,cAAe,GAA1B,cAAiCtkrB,EAAQukrB,kBAAoBz8oB,EAAM5rG,QAAU,IAAiC,IAA5BmovB,GAAlF,IAHzB,UAK+B,IAA5BA,EAEG,eAAC37b,GAAA,EAAD,CAAkB37N,MAAM,YACxB+a,EAAM5rG,QAAU,EACd,eAAC4sX,GAAA,EAAD,CACEC,UAAWjhR,EACXkhR,YAAa,CACXtb,QAAS,CACP,CACE9lV,MAAO,OACPshW,SAAU,qBACV9lT,SAA4B,EAAlBpB,EAAMZ,WAElB,CACEx5C,MAAO,OACPshW,SAAU,mBACV9mR,MAAO,CACLlgC,QAAS,OACTK,cAAe,SACfC,eAAgB,aAKxB4mT,WAAY,CACVm3F,WAAY,SAACp3F,GAAD,OAAyB,WACnC,IAAMh2U,EAAWg2U,EAAQt+X,IAAI,YAK7B,GAJAikB,QAAQ08E,MAAM,gBAAiB,CAC7B29R,UACAh2U,aAEc,MAAZA,EAAkB,CACpB,IAAM09D,EAAOr7F,OAAO+6B,SAAS0C,SAC7B,GAAI49D,EAAKxgH,SAASmrB,2BAA2Bq1F,EAAKxgH,SAASqrB,gBAAem1F,EAAKxgH,SAAS,SAAY,CAElG,IADWi3b,QAAQz0a,EAAE,gCAQnB,OANA4e,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyhW,GACJ/3R,MAAM,KAERhgE,EAAS,IAAI0mC,KAAyB,CAAEhlB,mBAK1C1hB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyhW,GACJ/3R,MAAM,KAERhgE,EAAS,IAAI0mC,KAAyB,CAAEhlB,iBAI9Cm2U,UAA6B,EAAlBtnT,EAAMZ,UACjBmoT,aAAgC,EAAlBvnT,EAAMZ,UACpB0gZ,SAAU,CACRl/Y,QAAS,aACTV,QAAS,OACTM,eAAgB,gBAChBitR,QAAS,OACTtjP,OAAQ,cAKd,gBAAC,WAAD,WACE,eAAC7L,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,4BAEL,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,yC,GA9II0Y,aA8J3B,I,GAAMmI,GAAkBkG,YAAyB,CAC/CkuE,MAAO23B,cACP4knB,wBAAyB3knB,gBAGZ3jE,qBACbgG,aApLa,SAACC,GAAD,MAAmB,CAChCsirB,aAAc,CACZjsoB,OAA0B,GAAlBr2C,EAAMZ,UACdoB,eAAgB,SAChBzC,WAAY,UAEbykrB,wBAAyB,CACxBnirB,OAAO,GAAD,OAAuB,EAAlBL,EAAMZ,UAAX,gBAAgCY,EAAMZ,UAAtC,OAEPmjrB,kBAAmB,CAClB/hrB,eAAgB,aAChBzC,WAAY,iBAyKK,CAAE+1C,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQjyE,IAdV,SAA4BjC,GAC1B,MAAO,CACLA,eASWsqC,CAIboorB,I,kFCnMIM,G,4MAEG32tB,MAAQ,CACbmsF,SAAU,M,EAGLy6nB,aAAe,SAACxlvB,GACrB,EAAKw6G,SAAS,CAAEuQ,SAAU/qH,EAAEs8G,iB,EAEvBmpoB,cAAgB,WACrB,EAAKjroB,SAAS,CAAEuQ,SAAU,Q,4CAG5B,WAAiB,IAAD,OACd,EAOInzH,KAAKkqC,MANP0ztB,EADF,EACEA,YACAlmkB,EAFF,EAEEA,QACApxJ,EAHF,EAGEA,SACA4yC,EAJF,EAIEA,QACAgC,EALF,EAKEA,MACAnvD,EANF,EAMEA,EAIAonG,EACEnzH,KAAKgnC,MADPmsF,SA8BF,OACE,iCA1BE,gBAACt6C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBV,UAAWF,EAAQi0C,OAAQtI,QAAS,EAAK+ooB,aACxFtyoB,MAAOj+G,QAAQ81H,GAAY,CAAC0H,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ7iF,MAAQqmU,QAAS,kBAAmBk1Z,cAAe,QAAW,GADrI,UAEE,gBAAChlrB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAG3B,WAAW,aAArD,UACE,eAACJ,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,eAACggC,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,2BAGP,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,eAACywC,GAAA,EAAD,CAASC,MAAO0zoB,EAAhB,SACE,eAACpkpB,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQ0krB,YAFrB,SAIGA,WAKT,eAAC/krB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAGd,QAAQ,WAAWb,WAAW,SAAxE,SACE,eAAC8tC,GAAA,EAAD,CAAQ3tC,UAAWF,EAAQ84R,OAA3B,SAAmC,eAACx4P,EAAA,EAAD,CAAY8B,MAAO,CAACrV,MAAO,SAA3B,SAAsCyxF,WAQ7E,eAACi5F,GAAA,EAAD,CACEhmL,KAAMttG,QAAQ81H,GACdwR,QAAS3kI,KAAK6tvB,cACd16nB,SAAUA,EACV0pT,mBAAoB,KACpB/gC,aAAc,CACZ/7G,SAAU,SACVK,WAAY,UAEdn7J,gBAAiB,CACf86J,SAAU,MACVK,WAAY,UAEdtsK,WAAY,CACVxY,MAAO,CACLhgC,MAAO,MAfb,SAmBGh1C,W,GA5EyB7B,aAmFrBwwC,qBACbgG,aA1Ha,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN7xC,MAAO,IACPQ,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B0qC,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KACvC0V,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3CsC,aAAc,OACdpC,OAAQ,WAEVu4oB,YAAa,CACXrhoB,WAAY,IACZ5G,aAAc,WACdtL,SAAU,SACVoM,WAAY,UAEdu7O,OAAQ,CACNhtP,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvCyyF,cAAe,YACfz5C,MAAOJ,EAAMZ,QAAQ,KACrBi3C,OAAQr2C,EAAMZ,QAAQ,SAuGL,CAAC00C,WAAW,IAC/B7vE,YAAgB,gBAFH81B,CAGb0orB,I,4FCrHInuoB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C82R,OAAQ,CACN12R,MAAO,GACPi2C,OAAQ,IAEV28P,YAAa,CACX76P,aAAc,EACdoD,WAAY,gBAiIDqnoB,GAtF8C,SAAC,GAGvD,IAFL3hwB,EAEI,EAFJA,MACAm/G,EACI,EADJA,MAGA,EAGIkU,KAFFwiP,EADF,EACEA,OACAkc,EAFF,EAEEA,YAGIvjV,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFgyuB,EAAerstB,sBAAY2jiB,aAA8Bl5kB,IAE/D,IAAK4hwB,EACH,OAAO,KAGT,IAAMC,EAAiBD,EAAah6vB,IAAI,MAClC64L,EAAWmhkB,EAAah6vB,IAAI,YAC5Bk6vB,EAAiBF,EAAah6vB,IAAI,kBAClCqpH,EAAO2woB,EAAah6vB,IAAI,QACxBm6vB,EAAaH,EAAah6vB,IAAI,cAC9B+9Q,EAAWi8e,EAAah6vB,IAAI,eAC5Bo6vB,EAASJ,EAAah6vB,IAAI,UAE1B2zL,EAjEiB,SAACrrI,GACxB,GAAIA,EAAU,CACZ,IAAM+2L,EAAQ/2L,EAAStN,MAAM,KACzBwnE,EAAW68H,EAAM,GAAG3wK,UAAU,EAAG,GAAG43D,cAIxC,OAHI+4G,EAAMvhP,OAAS,IACjB0kH,GAAY68H,EAAMA,EAAMvhP,OAAS,GAAG4wE,UAAU,EAAG,GAAG43D,eAE/C9jB,EAEP,MAAO,GAwDO63oB,CAAiBH,EAAel6vB,IAAI,cAC9C43C,EArDuB,SAACihJ,EAAkBqhkB,GAChD,IAAMI,EAAqBJ,EAAep/uB,SAASjc,UAEnD,IAAKy7vB,EAAmBx8vB,SAAW+6L,EACjC,MAAO,4CAGT,IAAIjhJ,EAAUihJ,EAGd,OAFAyhkB,EAAmB3xvB,SAAQ,SAAApI,GAAG,OAAIq3C,EAAUA,EAAQ2itB,WAAWh6vB,EAAK25vB,EAAel6vB,IAAIO,OAEhFq3C,EA2CS4itB,CAAuB3hkB,EAAUqhkB,GAC3CO,EAzCiB,SAACpxoB,EAAc8woB,GACtC,IAAMO,EAAiBP,EAAWr/uB,SAASjc,UAE3C,IAAK67vB,EAAe58vB,SAAWurH,EAC7B,OAAO,KAGT,IAAIzxE,EAAUyxE,EAGd,OAFAqxoB,EAAe/xvB,SAAQ,SAAApI,GAAG,OAAIq3C,EAAUA,EAAQ2itB,WAAWh6vB,EAAK45vB,EAAWn6vB,IAAIO,OAExEq3C,EA+BY+itB,CAAiBtxoB,EAAM8woB,GAO1C,OACE,eAACS,EAAA,EAAD,CACE5wF,cAAe,CACb5gjB,QAAQ,EAERk2Q,eAAe,EACfu7X,oBAAoB,EACpBtjpB,MAAM,2BACDA,GADA,IAEHihB,WAAY,OACZlX,OAAQ,UACRL,gBAAiBm5oB,EAAS,UAAY,UACtCv2oB,aAAc,yBAXpB,SAeE,gBAAC/uC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UAME,eAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAAxE,SACE,eAACguC,GAAA,EAAD,CAAQ3tC,UAAW44R,EAAnB,SAA4Bt6K,MAG9B,gBAAC7+G,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYpgC,UAAW80S,EAAvB,SAAqCvyU,IACrC,eAAC69D,EAAA,EAAD,CAAYpgC,UAAW80S,EAAvB,SAAqCxyQ,KAAOoyH,IAAIg0C,GAAUp1B,QAAQjyM,OAAO,sBAEvE+jtB,EACE,eAAC,KAAD,CAAMljpB,MAAO,CAAElgC,QAAS,QAASkB,SAAU,IAAMrtE,GAAI,CAAEk9C,SAAUqysB,EAAYx3tB,MAAO,CAAEk2qB,YAAY,IAAInvrB,MAAOC,YAAe62F,QApC5G,WAC1Bl6E,EAAS,IAAIswS,KAA6B,CAAE+ib,iBAAgBG,QAAQ,KACpExztB,EAAS,IAAIgxS,OAkCH,SACE,eAACniO,EAAA,EAAD,CAAY8B,MAAO,CAAEh/B,SAAU,IAAM2pB,MAAM,UAA3C,SAAsDl6E,EAAE,gCAG1D,QAIN,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAAxE,SACE,eAACkxC,GAAA,EAAD,CAASC,MAAgBn+F,EAAToyuB,EAAW,4BAAiC,2BAA5D,SACE,eAAC9rY,GAAA,EAAD,CAAOpsR,MAAM,UAAUlqG,KAAK,QAAQigI,SAAUmioB,EAAQt5oB,QAAS,kBAAMl6E,EAAS,IAAIswS,KAA6B,CAAE+ib,iBAAgBG,yBCzC9HU,IAxFGzvoB,aAAW,SAACl0C,GAAD,MAAmB,MAGK,SAAC,GAC/C,gBACL,IAAMvwC,EAAW2F,wBACX0qa,EAAWtpa,sBAAY8jiB,gBACvB/kL,EAAa/+W,sBAAYgkiB,gBACzBopL,EAAcpttB,sBAAYikiB,gBAEhC,EAAgBj3hB,mBAAS,IAAImna,KAAkB,CAAExnM,YAAY,EAAMmlM,cAAe,MAA3Ezgd,EAAP,qBAEAojC,qBAAU,WACJ24tB,GACFn0tB,EAAS,IAAIoxS,MAAsB+ib,MAEpC,CAACruW,IAEJ,IAAMsuW,EAAe,SAACtjwB,GACpB,IAAM+mY,EAAYz/X,EAAMy/X,UAAU/mY,GAClC,OAAO+mY,GAAa,GAAKA,EAAY,IA6BjC6qF,EAAc,SAAC,GAAD,IAAGlxd,EAAH,EAAGA,MAAOmI,EAAV,EAAUA,IAAKo4C,EAAf,EAAeA,OAAQ4+D,EAAvB,EAAuBA,MAAvB,OAClB,eAAC,KAAD,CACEv4G,MAAOA,EAEP25c,YAAa,EACb/3I,SAAUxoU,EACVugD,OAAQA,EALV,SAOE,eAACsitB,GAAD,CACE7iwB,MAAOA,EACPm/G,MAAOA,KAPJh3G,IAYT,OACE,eAAC,KAAD,CACEmod,YA3CgB,SAAC,GAAe,IAAbtwd,EAAY,EAAZA,MACrB,QAASs0Z,EAAW1sZ,IAAI5H,IA2CtB8vd,aAxCiB,SAAC,GAA+B,IAC/CgzS,EADkB1+S,EAA4B,EAA5BA,WAAYC,EAAgB,EAAhBA,UAE5B0+S,EAAS,IAAIjgtB,SAAQ,SAAAC,GACzB+/sB,EAAkB//sB,KACjBq3B,MAAK,SAACguN,GAEP,IADA,IAAI46d,EAAY,EACPhjwB,EAAQokd,EAAYpkd,GAASqkd,EAAWrkd,IAC1Cs0Z,EAAW1sZ,IAAI5H,IAClBwuC,EAAS,IAAIkxS,KAAwB,CAAE1/U,QAAO8kC,GAAIsjQ,EAAIxgS,IAAIo7vB,MAE5DA,OASJ,OANAx0tB,EAAS,IAAIgwS,KAAgB,CAC3BlxN,MAAO+2V,EAAYD,EAAa,EAChCzyc,OAAQyyc,EACRv+T,QAASi9mB,KAGJC,GAsBLlkT,SAAUA,EAHZ,SAKG,gBAAG+Q,EAAH,EAAGA,eAAgBR,EAAnB,EAAmBA,cAAnB,OACC,eAAC,KAAD,CACEzL,iBAAkB,EAClBvuV,OAAQ,IACRw6V,eAAgBA,EAChBnkK,UAAWk3c,EAAc,EAAI,KAC7BrjwB,IAAK8vd,EACLvQ,SAAUA,EACVx4E,UAAWu8X,EACX1xS,YAAaA,EACb/xY,MAAO,W,sBCxFF8jrB,GATU,SAACl1tB,GACxB,IAAQne,EAAM+xB,YAAe,gBAArB/xB,EACR,OACI,eAAC44F,EAAA,EAAD,yBAAQjL,QAAQ,WAAW0qK,UAAW,eAAC,KAAD,IAAgBn+K,MAAM,WAAc/7D,GAA1E,aACGne,EAAE,8BCKIszuB,GATW,SAACn1tB,GACvB,IAAQne,EAAM+xB,YAAe,gBAArB/xB,EACR,OACI,eAAC44F,EAAA,EAAD,yBAAQjL,QAAQ,YAAY0qK,UAAW,eAAC,KAAD,IAAgBn+K,MAAM,WAAc/7D,GAA3E,aACKne,EAAE,gC,mBCRAo3G,iBAAQ,kBAAM,6C,UCgKhBorT,GAAY,CACvB,GAAM,CACJttZ,GAAI,KACJzyB,KAAM,WAER,GAAM,CACJyyB,GAAI,KACJzyB,KAAM,WAIJ8wvB,IAAmB,qBACtBrkuB,gBAAe,CACdskuB,eAAgB,+BAChBC,gBAAiB,gDACjBC,kBAAmB,8CACnBC,gBAAiB,kBALI,eAOtBxkuB,sBAAqB,CACpBqkuB,eAAgB,+BAChBC,gBAAiB,gDACjBC,kBAAmB,8CACnBC,gBAAiB,kBAXI,eAatBrkuB,UAAS,CACRqkuB,gBAAiB,kBAdI,eAgBtBnkuB,UAAS,CACRmkuB,gBAAiB,kBAjBI,IAsBvBrgX,GAGEojN,KAHFpjN,8BACAC,GAEEmjN,KAFFnjN,iCACAI,GACE+iN,KADF/iN,gBAGIigX,GAAuB9ooB,aAAO,MAAPA,EAAc,gBAAG37C,EAAH,EAAGA,MAAH,EAAU/vE,OAAV,MAAmD,CAC5F4vH,WAAW,0BAAD,OAA4B7/C,EAAM+pC,QAAQE,QAAQ,KAAlD,gBAA8DjqC,EAAM+pC,QAAQE,QAAQ,KAApF,cAGNy6oB,GAAY/ooB,aAAOjQ,IAAPiQ,EAAc,cAAG37C,MAAH,MAAgB,CAC9Cs5C,WAAW,OAAD,OAASkrR,GAAT,SAGNmgX,GAAkBhpoB,aAAOjQ,IAAPiQ,EAAc,YAAe,EAAZ37C,MACvC,MAAO,CACLs5C,WAAW,OAAD,OAASkrR,GAAT,SAoMRogX,G,4MACG94tB,MAAQ,CACb+4tB,gBAAgB,EAChBC,YAAY,G,EAGN9yW,WAAazoX,c,EAIdw7tB,SAAW,WAChB,MAGI,EAAK/1tB,MAFPS,EADF,EACEA,SACAsonB,EAFF,EAEEA,UAGF,MAAM,GAAN,mBACMA,EAAU1ppB,SAASo4C,KAASwjjB,aAAe8tD,EAAU1ppB,SAASo4C,KAASC,UACvE,CAAC,CACCpzC,KAAM,0CACN07B,MAAO,CACL26E,QAAS,kBAAMl6E,EAAS,IAAI0J,IAA6B,CAAEpT,GAAIi/tB,UAGnE,IARN,CASE,CACE1xvB,KAAM,kBACN07B,MAAO,CACL26E,QAAS,EAAKs7oB,oB,EAMfC,QAAU,WACf,MAKI,EAAKl2tB,MAJPS,EADF,EACEA,SACA01tB,EAFF,EAEEA,cACAC,EAHF,EAGEA,qBACAz/sB,EAJF,EAIEA,SAIE7U,GAG0B,IAAzBs0tB,EACC,CACA,CACE9xvB,KAAM,yDACN07B,MAAO,CACL26E,QAAS,WACPw7oB,IAAiB11tB,EAASv+B,gBAAKwiB,wBAKrC,GAIN,OApB0B+jpB,KAAiB5zF,uBAAuBl+hB,KAkBhE7U,EAAU,IAELA,G,EAMF+mF,SAAW,SAAC+0E,EAAc3rM,GAC/B,MAII,EAAK+tC,MAHPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAmvD,EAHF,EAGEA,MAGIqlrB,EAAUz4jB,GAAWA,EAAQ59J,OAAS49J,EAAQ59J,MAAM0nF,KAC1D,OAAO2uoB,EACH,wBAAC5B,EAAA,EAAD,2BAAoB72jB,EAAQ59J,OAAS,MAArC,IAA2C5lC,IAAKnI,IAChD,gBAAC08E,EAAA,EAAD,CACEO,UAAWF,EAAQsnrB,SACnB1mrB,QAAQ,gBACRN,WAAW,EACXgB,KAAK,SACLvB,WAAW,SALb,UAOE,sBAAKqiC,MAAO,CACV+O,SAAU,SACVsL,aAAc,WACdc,WAAY,UAHd,SAMG1qG,EAAE+7K,EAAQt5L,QAEb,eAAC,IAAD,CACEojH,KAAM2uoB,EACNjlpB,MAAO,CACL4M,WAAYhtC,EAAMZ,UAClB0uO,WAAY,SAKlB,wBAAC21c,EAAA,EAAD,2BACI72jB,EAAQ59J,OAAS,MADrB,IAEA5lC,IAAKnI,EACLi9E,UAAWF,EAAQ65C,WAEnB,sBAAK35C,UAAWF,EAAQsnrB,SAAxB,SACGz0uB,EAAE+7K,EAAQt5L,U,EA0BZiyvB,UAAY,WACjB,IACE91tB,EACE,EAAKT,MADPS,SAEF,OAAO,kBAAMA,EAAS,IAAIoL,O,EAGrB2qtB,yBAA2B,WAChC,EAAKx2tB,MAAMS,SAAS,IAAI8wS,O,EAGnBklb,4BAA8B,YAEnCh2tB,EADqB,EAAKT,MAAlBS,UACCv+B,gBAAK0iB,iB,EAET8xuB,6BAA+B,YAEpCj2tB,EADqB,EAAKT,MAAlBS,UACCv+B,gBAAK2iB,kB,kDAtChB,WACE,MAGI/uB,KAAKkqC,MAFP22tB,EADF,EACEA,OACA90uB,EAFF,EAEEA,EAGF,OAAO,WACL,IAAMg+F,EAAOr7F,OAAO+6B,SAAS0C,SAC7B,GAAI49D,EAAKxgH,SAASmrB,2BAA2Bq1F,EAAKxgH,SAASqrB,gBAAem1F,EAAKxgH,SAAS,SAAW,CAEjG,IADWi3b,QAAQz0a,EAAE,gCAInB,OAFA80uB,SAKFA,O,+BAyBN,WACE,MAGI7gwB,KAAKkqC,MAFPS,EADF,EACEA,SACA02b,EAFF,EAEEA,aAGA0+R,EACE//vB,KAAKgnC,MADP+4tB,eAGIt6pB,EAAS/2E,OAAOoyuB,sBAAwBpyuB,OAAOoyuB,qBAAqBh6lB,OAAOrhE,SACjF96D,EAAS,IAAIoJ,IAAoB,CAAEm5W,WAAYltZ,KAAKktZ,mBACrCpxZ,IAAX2pG,IAA0Bs6pB,GAAmB1+R,IAAiB57X,EAAOqnD,QACvEp+H,OAAOoyuB,qBAAqBh6lB,OAAOhe,KAAK,CAAEi4mB,YAAY,M,kCAI1D,YAIEp2tB,EADI3qC,KAAKkqC,MADPS,UAEO,IAAIoJ,IAAoB,CAAEm5W,gBAAYpxZ,KAC3C4yB,OAAOoyuB,sBACTpyuB,OAAOoyuB,qBAAqBh6lB,OAAO53J,W,oBAIvC,WAAiB,IAAD,OACd,EA4CIlP,KAAKkqC,MA3CPgvC,EADF,EACEA,QACA5yC,EAFF,EAEEA,SACA4jF,EAHF,EAGEA,MACAokN,EAJF,EAIEA,UACApzP,EALF,EAKEA,MAEAr6B,GAPF,EAMEymD,IANF,EAOEzmD,UAPF,IAQEmgtB,iBARF,MAQc,GARd,MASEC,uBATF,MASoB,GATpB,EAUEC,EAVF,EAUEA,gBACOC,EAXT,EAWEzuQ,MACM0uQ,EAZR,EAYEC,KACAC,EAbF,EAaEA,aACAhmrB,EAdF,EAcEA,MACiB+2lB,EAfnB,EAeE7/iB,gBACA+uoB,EAhBF,EAgBEA,iBACAC,EAjBF,EAiBEA,aACA/3sB,EAlBF,EAkBEA,SACA/D,EAnBF,EAmBEA,OAnBF,IAoBEw3Y,+BApBF,aAqBEukU,sBArBF,SAsBEC,EAtBF,EAsBEA,aACAC,EAvBF,EAuBEA,cACA51uB,EAxBF,EAwBEA,EAEEu6K,EA1BJ,EAyBEr+F,OACEq+F,OAEFr8I,GA5BF,EA4BEA,OACAo3a,GA7BF,EA6BEA,aACAvtR,GA9BF,EA8BEA,OACA8tjB,GA/BF,EA+BEA,eAIAC,IAnCF,EAgCEC,uBAhCF,EAiCEC,cAjCF,EAkCEC,mBAlCF,EAmCEH,0BACAI,GApCF,EAoCEA,yBACAC,GArCF,EAqCEA,2BACAv3tB,GAtCF,EAsCEA,SACAkiB,GAvCF,EAuCEA,cACA9F,GAxCF,EAwCEA,MACA1D,GAzCF,EAyCEA,KACAi+a,GA1CF,EA0CEA,gBACA6gS,GA3CF,EA2CEA,cAIApC,GACE//vB,KAAKgnC,MADP+4tB,eAGIvtoB,GAAsC,MAApB6/iB,EAA2BA,EAAmB/2lB,EAChEo3lB,GAAoBC,KAAiB5zF,uBAAuBl+hB,GAC5DkrE,GAAO,IAAIh+F,KAEXq0uB,GAAuB18sB,EAAO9kC,MAAM,CAAC,YAAa,WAClDyhvB,GAAuB38sB,EAAO9kC,MAAM,CAAC,YAAa,WAClD0hvB,GAA6B58sB,EAAO9kC,MAAM,CAAC,YAAa,iBAExD2hvB,GAAsBrB,GAAmBA,EAAgBx3nB,OACzD84nB,GAAsBtB,GAAmBA,EAAgBxrZ,OACzD+sZ,GAA4BvB,GAAmBA,EAAgBwB,aAE/DC,GAAyC,MAAxBP,GAA+BA,GAAqB7jvB,OAASgkvB,GAChF9voB,GAAyC,MAAxB4voB,GAA+BA,GAAqB9jvB,OAASikvB,GAC9EI,GAAqD,MAA9BN,GAAqCA,GAA2B/jvB,OAASkkvB,GAChG/vF,KACFjgjB,GAAiBowoB,KAAiB5jL,oBAClC2jL,GAAuBC,KAAiB5jL,qBAE1C,IAAM3wJ,GAAelwb,OAAO0D,KAAKysb,IAAW9hb,OAEtC2wb,IAAmB13Y,EAAO3hD,IAAI,cAAgB6O,iBAAoB2L,OAClEukvB,IAAyBp9sB,EAAO3hD,IAAI,oBAAsB6O,iBAAoB2L,OAC9EwkvB,GAAcr9sB,EAAO3hD,IAAI,SACzB2uf,GAAuB,MAAfqwQ,GAAsBA,GAAc5B,EAC5C6B,GAAat9sB,EAAO3hD,IAAI,QACxBs9vB,GAAqB,MAAd2B,GAAqBA,GAAa5B,EAEzC6B,GAAO3D,GAAoBh5jB,GAE3Bi5jB,IAD2BzrjB,GAAOvqM,SAAS,aACEm8C,EAAO9kC,MAAM,CAAC,YAAa,WAAa8kC,EAAO3hD,IAAI,oBAAuBk/vB,IAAQA,GAAK1D,eACpIC,GAAkB95sB,EAAO3hD,IAAI,oBAAuBk/vB,IAAQA,GAAKzD,gBACjEC,GAAoB/5sB,EAAO3hD,IAAI,sBAAyBk/vB,IAAQA,GAAKxD,kBACrEC,GAAe,UAAMh6sB,EAAO3hD,IAAI,oBAAuBk/vB,IAAQA,GAAKvD,gBAArD,YAAyE3zuB,EAAE,6BAE1F6xuB,GAA0B,MAAZ/8sB,EACfA,EAAS98C,IAAI,eAAkB88C,EAAS98C,IAAI,eAA7C,UAIK88C,EAAS98C,IAAI,cAAgB88C,EAAS98C,IAAI,aAAc,IAAM,GAJnE,YAIyE88C,EAAS98C,IAAI,eAAiB88C,EAAS98C,IAAI,cAAe,IAAM,IAHvI88C,EAAS98C,IAAI,sBACX88C,EAAS98C,IAAI,sBACb,GAEJ,GAEE2zL,GAAsB,MAAZ72I,EACXA,EAAS98C,IAAI,eAAkB88C,EAAS98C,IAAI,eAA7C,UAIK88C,EAAS98C,IAAI,cAAgB88C,EAAS98C,IAAI,aAAc,IAAI,GAAK,IAJtE,OAI2E88C,EAAS98C,IAAI,eAAiB88C,EAAS98C,IAAI,cAAe,IAAI,GAAK,IAH5I88C,EAAS98C,IAAI,sBACX88C,EAAS98C,IAAI,sBAAsB,GACnC,GAEJ,GAEEmnG,GAA8B,OAAbrqD,GAAqBxjD,QAAO,OAACwjD,QAAD,IAACA,OAAD,EAACA,EAAU98C,IAAI,iBAC5DgpD,GAA0B,MAAZlM,EACpB,OACE,gBAACsxnB,GAAA,EAAD,CACEtxnB,SAAUA,EACVuxnB,mBAAoB,SAAC8wF,GAAD,OAA0B,EAAKtgpB,SAAS,CAAEo9oB,WAAYkD,KAC1E1woB,gBAAiBA,GACjBigjB,YAAa,CACXn3jB,MAAO,CACL0J,gBAAiB,UAGrB2sjB,YAAW,aACTr2jB,MAAO,CACLyf,WAAW,2BAAD,OAA6B7/C,EAAM+pC,QAAQE,QAAQ,KAAnD,gBAA+DjqC,EAAM+pC,QAAQE,QAAQ,KAArF,YAETsN,IAAkB,CACnBnX,MAAO,CACLyf,WAAW,2BAAD,OAA6BtI,GAAe,GAA5C,gBAAsDA,GAAe,GAArE,UACVpI,SAAU,aAIhB4njB,kBAAiB,eACZ2wF,GACC,CACA7noB,WAAW,2BAAD,OAA6B6noB,GAAqB,GAAlD,gBAA4DA,GAAqB,GAAjF,WAEV,CACA7noB,WAAW,2BAAD,OAA6B7/C,EAAM+pC,QAAQE,QAAQ,KAAnD,gBAA+DjqC,EAAM+pC,QAAQE,QAAQ,KAArF,YAIhBotjB,eACE,gBAAC15lB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWb,WAAW,SAASuB,KAAK,SAASqqC,QAAS7kH,KAAKygwB,YAA1F,UACE,uBAAMrnrB,UAAWF,EAAQ8oD,KAAzB,SACG9X,IAIDgzU,GAA2B,uCACzB,eAAC,KAAD,CAAc5hV,MAAO,CAAEkG,YAAa,EAAGvb,MAAO/qB,EAAM+pC,QAAQC,KAAK,QACjE,eAACpD,EAAA,EAAD,CACEpmH,MAAOuuD,GACPmvB,UAAWF,EAAQiqrB,iBACnB3npB,SAAU,SAAC2rB,GACT,IAAMynT,EAAeznT,EAAMn6G,OAAOtxB,MAClCupG,KAAiBG,QAAQ,wBAAewpV,GACxC,IAAMC,EAAoC,OAAjBD,EAAwB,UAAY,SAI7D,GAHAnoV,KAAmB9rE,mBAAgBm0Z,eAAgBjiY,GAAc,CAAEgiY,sBAE9Cpga,6BACH,CAChB,IAAM20uB,EAAW1wF,GAAoB,iBAAmB,IACxDhkpB,OAAO+6B,SAAS2jE,KAAhB,WAA2BwhU,GAA3B,OAA0Cw0U,QAE1C10uB,OAAO+6B,SAAS2jE,KADPsljB,GACc,iBAEA,KAhB7B,SAoBGpkP,GAAatlb,KAAI,SAAC4lb,GAAD,OAChB,eAACryU,EAAA,EAAD,CAEE7gH,MAAOkzb,EAFT,SAIG7ia,EAAE,oBAAD,OAAqB6ia,KAHlBA,WAUd7hY,GAAc,uCACb,eAAC,GAAD,CAAkBqsB,UAAWF,EAAQmqrB,iBAAkBx+oB,QAAS7kH,KAAK2gwB,8BACrE,eAAC,GAAD,CAAmB97oB,QAAS7kH,KAAK4gwB,kCAEjC,KAEW,MAAZ//sB,GACC,gBAAC,WAAD,WACE,eAAC,GAAD,IAGGwC,KAAS5pB,YAAS8vB,IAAM44sB,IACvB,eAACxU,EAAA,EAAD,CACE9ooB,QAAS,kBAAMl6E,GAAS,IAAI0I,IAAwB,CAAEkub,YAAY,MAClE52X,KAAM22X,GACN38V,QAAS,kBAAMh6F,GAAS,IAAI0I,IAAwB,CAAEkub,YAAY,MAClE2jM,UAAW,CACTkB,cAAe,CACb9qjB,MAAO,CAAEx/B,QAAS,IAEpBwnrB,eAAgB,CACdvxoB,MAAO74C,EAAQqqrB,uBAGnBznK,aACE,eAAC,IAAD,CAAOxgf,MAAO,CAAEhgC,MAAO,SAAUi2C,OAAQ,SAAUtrB,MAAO/qB,EAAM+pC,QAAQC,KAAK,QAE/E5pC,MAAM,OAfR,SAiBE,sBAAKggC,MAAO,CAAEhgC,MAAO,KAArB,SACE,eAACkorB,GAAD,QAONz8sB,KAAU7rB,sBACR,gBAACyytB,EAAA,EAAD,CACE9ooB,QAAS7kH,KAAK0gwB,yBACd/1pB,KAAMu3pB,GACNv9nB,QAAS,kBAAMh6F,GAAS,IAAIgxS,OAC5BupV,UAAW,CACTkB,cAAe,CACb9qjB,MAAO,CAAEx/B,QAAS,KAGtBgghB,aAEE,uCACE,eAAC,KAAD,CAAmB30e,SAAS,QAAQ/tC,UAAWF,EAAQuihB,WACvD,eAACgoK,EAAA,EAAD,CAAO1L,aAAc8J,GAA0B7kwB,IAAK,GAAIipG,MAAM,UAAUqV,MAAO,CAAE+gB,UAAW,0BAA5F,SACE,sBAAK/gB,MAAO,CAAElgC,QAAS,eAI7BE,MAAM,OAlBR,UAoBE,gBAACzC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASqiC,MAAO,CAAEx/B,QAAS,IAArF,UACE,eAAC09B,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,wBAC5B,eAAC44F,EAAA,EAAD,CAAQ1e,MAAM,UAAUiX,SAAuC,IAA7B2kpB,GAAgCh9oB,QAASo9oB,GAA0B3mpB,MAAO,CAAEyZ,cAAe,QAA7H,SAAwIhpG,EAAE,mCAE5I,eAAC4qG,EAAA,EAAD,IACA,eAAC+soB,GAAD,OAGF,KAGHx4pB,GACG,gBAACy4pB,GAAD,CAAuB/F,YAAaA,GAAalmkB,QAASA,GAA1D,UACC13L,KAAKigwB,WAAWj3vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MAE5C,MAAjBwlwB,IACCvjlB,qBAAWujlB,GACPA,EAAc3hwB,KAAKkqC,OAAOlhC,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MACzEwlwB,EAAc34vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,UAIrE,gBAACwxvB,EAAA,EAAD,CACA7xJ,aAAc,eAAC,KAAD,CAAY30e,SAAS,QAAQ/tC,UAAWF,EAAQuihB,WAC9DnghB,MAAM,UAFN,UAIA,eAACqjrB,EAAA,EAAD,CACE5wF,cAAe,CACbzyjB,MAAO,CACLihB,WAAY,SAHlB,SAOE,sBAAKnjD,UAAWF,EAAQsnrB,SAAxB,SAAmC5C,OAErC,eAACjnoB,EAAA,EAAD,IACC32H,KAAKigwB,WAAWj3vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MAE5C,MAAjBwlwB,IACCvjlB,qBAAWujlB,GACPA,EAAc3hwB,KAAKkqC,OAAOlhC,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MACzEwlwB,EAAc34vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,UAMvEslwB,GACE,gBAAC9T,EAAA,EAAD,CACE7xJ,aAAc,eAAC,KAAD,CAAc30e,SAAS,QAAQ/tC,UAAWF,EAAQuihB,WAChE5jB,KAAM2pL,GAAgB/3sB,EAAS1lD,IAAI,YAAYwF,SAASqlB,oBAAmB2yuB,IAAoB,EAC/FvT,kBAAkB,EAClB1yqB,MAAM,UAJR,UAMGt7E,KAAKogwB,UAAUp3vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MAE5C,MAAhBulwB,IACCtjlB,qBAAWsjlB,GACPA,EAAa1hwB,KAAKkqC,OAAOlhC,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,MACxEulwB,EAAa14vB,KAAI,SAAC8+L,EAAS3rM,GAAV,OAAoB,EAAK42H,SAAS+0E,EAAS3rM,gBAWlFm2qB,eACE,gBAAC,WAAD,WAEyB,OAApB9/iB,KAAsD,IAA1BxyH,KAAKgnC,MAAMg5tB,YAAwB,gBAACL,GAAD,yBAC9DvmrB,UAAWF,EAAQ0qrB,cACfjB,IAAkB,CACpBrnpB,MAAO,CACLyf,WAAW,0BAAD,OAA4B4noB,GAAe,GAA3C,gBAAqDA,GAAe,GAApE,aAJgD,cAQ9D,uBACErnpB,MAAO,CACLlgC,QAAS,OACTM,eAAgB,SAChB61C,OAAQ,OACRt4C,WAAY,UALhB,UAQE,sBACEG,UAAWF,EAAQ2qrB,WACnBvopB,MAAO,CACL2B,SAAU,YAHd,SAME,eAAC2ipB,GAAD,yBACEp5oB,IAAKs9oB,EACLxorB,MAAM,QACNurC,YAAY,SACZ2kP,OAAO,GACHw1Z,GACA5jU,OAGR,uBACEhkX,UAAWF,EAAQ6qrB,WACnBzopB,MAAO,CACL2B,SAAU,YAHd,WAMKy1jB,IACD,eAACmtF,GAAD,yBACEr5oB,IAAKw9oB,EACL1orB,MAAM,OACNurC,YAAY,OACZ2kP,OAAO,GACHy1Z,GACA6B,KAGNpwF,IACA,eAACmtF,GAAD,yBACEr5oB,IAAKy9oB,EACL3orB,MAAM,OACNurC,YAAY,OACZ2kP,OAAO,GACHy1Z,GACA6B,WAMVpwQ,IACA,eAAC9rY,EAAA,EAAD,CACEJ,IAAK09oB,EACL5orB,MAAM,OACNurC,YAAY,OACZpN,MAAM,OACN6B,MAAO,CAAE2B,SAAU,cAIrBokpB,IACA,eAACz6oB,EAAA,EAAD,CACEJ,IAAK29oB,EACL7orB,MAAM,OACNurC,YAAY,OACZpN,MAAM,OACN6B,MAAO,CAAE2B,SAAU,kBAK3B,eAACmnpB,EAAA,EAAD,CACE91b,UAAWA,EACX/7M,YAAY,EACZ+uoB,aAAcA,EACd9uoB,gBAAiBA,GACjBC,eAAgBA,GAAiBA,GAAe,GAAKv3C,EAAM+pC,QAAQE,QAAQ,UAKjFqtjB,qBACE,eAAC,WAAD,UACE,eAAC4xF,EAAA,EAAD,CACE91b,UAAWA,EACXgzb,aAAcA,EACd9uoB,gBAAiBA,OA1SzB,UA+SE,uBACEp5C,UAAW6tC,IAAW,gBAAiB/tC,EAAQmrrB,eAC/C5owB,IAAKuE,KAAKktZ,WACVjsX,GAAG,gBAHL,UAKE,eAAC,GAAD,IACA,sBAAKm4C,UAAWF,EAAQv9B,QAAxB,SACGrV,IAEH,yBAAQ8yC,UAAWF,EAAQs2R,OAA3B,SACE,gBAAC32R,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SAJP,UAME,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAS,UAAKF,EAAQorrB,iBAAb,YAAiCprrB,EAAQqrrB,eAClD/prB,KAAK,SACLvB,WAAW,SAJb,UAOIsmrB,IACA,oBACEnmrB,UAAWF,EAAQ+wB,KACnBmjB,KAAMmyoB,GACNvyuB,OAAO,SAHT,SAKGjB,EAAE,iBAILyzuB,IACA,oBACEpmrB,UAAWF,EAAQ+wB,KACnBmjB,KAAMoyoB,GACNxyuB,OAAO,OAHT,SAKGjB,EAAE,kBAIL0zuB,IACA,oBACErmrB,UAAWF,EAAQ+wB,KACnBmjB,KAAMqyoB,GACNzyuB,OAAO,OAHT,SAKGjB,EAAE,6BAIT,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASU,KAAK,SAASpB,UAAS,UAAKF,EAAQqrrB,cAAb,YAA8BrrrB,EAAQsrrB,iBAArG,SAEI9+sB,EAAO3hD,IAAI,iBAAmB2hD,EAAO3hD,IAAI,gBAAgBiF,KAAI,SAACy7vB,EAAazhwB,GACzE,IAAM0hwB,EAAYD,EAAY7jvB,MAAM,CAACqpC,GAAQ,QACvC06sB,EAAaF,EAAY7jvB,MAAM,CAAC,UAAW,QAC3CgkvB,EAAqBF,GAAaC,EAClCE,EAAcJ,EAAY7jvB,MAAM,CAACqpC,GAAQ,UACzCw5Z,EAAeghT,EAAY7jvB,MAAM,CAAC,UAAW,UAC7CkkvB,EAAuBD,GAAephT,EAEtC58V,EAAci+oB,EAAoB,UAAM5prB,EAAMZ,QAAQ,KAAOwqrB,EAA3B,KAAqD,OAE7F,OACE,eAACl+oB,EAAA,EAAD,CACEJ,IAAKo+oB,EACLtprB,OAAQwprB,GAAwB5prB,EAAMZ,QAAQ,IAAM,KACpDusC,YAAaA,EACbC,aAAa,GACR9jH,QAMf,eAAC61E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WACRV,UAAWF,EAAQorrB,iBAHrB,SAKE,gBAAC9qpB,EAAA,EAAD,CAAYE,QAAQ,QAAQ6K,QAAQ,EAApC,kBACUwH,GAAK8wH,iBADf,IACkC6ihB,gBAOxChxuB,OAAOoyuB,qBACH,gBAAC18nB,EAAA,EAAD,CACAhrD,UAAWF,EAAQ6rrB,eACnB9+pB,MAAM,UACN4e,QAAS,WACHw8W,GACFugS,IAAe,GAEX7B,GACF6B,IAAe,GAEf,EAAKh/oB,SAAS,CACZm9oB,gBAAgB,IACf,kBAAM6B,IAAe,OAZ9B,UAkBEvgS,GACI,eAAC,KAAD,CAAWl6W,SAAS,UACpB,eAAC,KAAD,CAAoBA,SAAS,UAEnC,sBAAKlmF,GAAG,oBAAoBm4C,UAAWioZ,QAAevle,EAAYo9E,EAAQ8rrB,mBAE1E,Y,GA9rBQvguB,aAktBtB,IAAMmI,GAAkBkG,YAAyB,CAC/Cw0D,IAAKx9C,cACLjJ,SAAUD,cACVqJ,OAAQD,cACRipmB,UAAW9xmB,eACXqgtB,aAAc1jjB,YAA2Bu2X,MACzCktL,iBAAkBzjjB,YAA2BoijB,IAC7Cz2sB,SAAUs/E,eACVrjF,OAAQF,cACRnC,KAAMF,cACNgJ,SAAUwiO,eACV0yM,aAAc5iR,cACd3K,OAAQ9mJ,cACR+0sB,cAAezsL,eACf0sL,mBAAoBxsL,eACpBqsL,yBAA0BtsL,eAC1B2sL,2BAA4BzsL,eAC5B1uhB,MAAOD,cACPw6a,gBAAiB3iR,cACjBwjjB,cAAelgtB,iBAGFgzB,sBACb00C,eACAwwe,eACAl/gB,aA36Ba,SAACC,GAAD,YACd,CACC8mD,KAAM,CACJA,KAAM,GAER+hoB,WAAW,aACTvvoB,WAAW,OAAD,OAASkrR,GAAT,KACVxyR,QAAS,GACRhyC,EAAMc,YAAYO,GAAG,MAAQ,CAC5B2wC,QAAS,IAGb22oB,WAAW,aACTrvoB,WAAW,OAAD,OAASkrR,GAAT,KACVxyR,QAAS,GACRhyC,EAAMc,YAAYO,GAAG,MAAQ,CAC5B2wC,QAAS,IAGb02oB,aAAa,2BACR1orB,EAAMgkM,OAAO06K,SADN,IAEVx+W,QAAS,OACT02C,SAAU,gBACVzH,SAAU,WAEZ1uE,QAAS,CACPqpE,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWnP,QAC1CtwC,MAAO,OACP0mD,KAAM,WACN/kB,SAAU,WACV7hC,QAAS,OACTM,eAAgB,aAChBD,cAAe,UAEjB4orB,eAAa,GACXjprB,QAAS,OACT02C,SAAU,gBACVzH,SAAU,OACV4f,UAAW,SACX1Y,OAAQ,OACRjV,UAAWphC,EAAMZ,UAAY+kU,IANlB,cAOVnkU,EAAMc,YAAYO,GAAG,MAAQ,CAC5B+/B,UAAWphC,EAAMZ,UAAYglU,KARpB,gCAUMpkU,EAAM+pC,QAAQC,KAAK,MAVzB,GAYbsqP,OAAQ,CACN1zR,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAA0BY,EAAMZ,QAAQ,GAAxC,OAETgqrB,iBAAkB,CAChBhprB,MAAO,EACPe,SAAU,EACVguC,SAAU,UAEZpgB,KAAM,CACJ/D,eAAgB,OAChB6uB,cAAe,YACf9uB,MAAO,OACPm0K,WAAY,wBACZ79I,WAAY,IACZ9F,WAAY,SACZd,aAAc,WACdtL,SAAU,UAEZoxe,SAAU,CACRx1f,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5Bs7oB,SAAU,CACRhlrB,SAAU,EACVm6C,aAAc,WACdtL,SAAU,SACV46oB,WAAY,UAEdC,UAAW,CACT3qvB,KAAM,GAERwqvB,eAAgB,CACd9npB,SAAU,QACVsX,OAAQ,OACR/5G,MAAO,OACP8gE,MAAO,OACPi2C,OAAQ,OACRyP,OAAQ9lD,EAAM8lD,OAAOk5O,QAEvB8qZ,cAAe,CACb5prB,QAAS,QAEXmprB,cAAe,CACb,MAAO,CACLhprB,OAAQ,EACRimC,YAAatmC,EAAMZ,QAAQ,GAC3B,eAAgB,CACdknC,YAAa,KAInBgjpB,gBAAiB,CACflprB,MAAO,QAET6nrB,iBAAkB,CAChB3hpB,YAAatmC,EAAMZ,QAAQ,IAE7B+orB,iBAAkB,CAChB7hpB,YAAatmC,EAAMZ,QAAQ,IAE7BiprB,qBAAsB,CACpBjvoB,IAAI,kBACJ95G,MAAM,iBACND,KAAK,sBA+zBY,CAAEy0G,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,kBAAQjyE,IAxCV,SAA4BjC,GAC1B,MAAO,CACLA,WACAk2tB,OAAQ,kBAAMl2tB,EAAS,IAAI2kC,KAAiB,MAC5C61rB,gBAAiB,SAACC,GAAD,OAAuBz6tB,EAAS,IAAI24iB,IAAmB8hL,KACxE/E,cAAe,kBAAM11tB,EAAS,IAAI0J,IAA6B,CAAEs2D,MAAM,EAAM1pE,GAAIoziB,SACjFutL,eAAgB,SAACj3pB,GAAD,OAAmBhgE,EAAS,IAAI8I,IAAqB,CAAEk3D,WACvEm3pB,uBAAwB,kBAAMn3tB,EAAS,IAAIowS,OAC3Cknb,yBAA0B,kBAAMt3tB,EAAS,IAAI0wS,WA0BlCpmQ,CAOb6qrB,K,+HCnoCa38nB,eAAQ,kBAAM,4C,2TC2GvBkioB,E,4MAEGr+tB,MAAQ,CACb6hoB,iBAAiB,G,EAGZh4Z,kBAAoB,WACzB,MAGI,EAAK3mO,MAFP2koB,EADF,EACEA,QADF,IAEEy2F,sBAFF,MAEmB,KAFnB,EAIAz2F,EAAQy2F,GAAkBA,EAAevhwB,IAAI,Y,EAGxC2xb,WAAa,YAelB/qZ,EAZI,EAAKT,MADPS,UAaO,IAAI8J,IAAiC,CAC5CxT,GAAIu1nB,IACJ76mB,QAAS4ptB,M,EAINr+nB,YAAc,YAKnBv8F,EAFI,EAAKT,MADPS,UAGO,IAAI0J,IAA6B,CACxCpT,GAAIu1nB,IACJ7rjB,MAAM,M,EAIHq+jB,cAAgB,SAAChpkB,GACtB,IACEr1D,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAIqrB,IAAqB,CAAEgqC,YACpCr1D,EAAS,IAAIisB,IAAoBopC,IACjCr1D,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIu1nB,IACJ7rjB,MAAM,M,EAIHsjR,kBAAoB,WACzB,EAAKrrQ,SAAS,CACZimjB,iBAAkB,EAAK7hoB,MAAM6hoB,mB,4CAIjC,WAAiB,IAAD,OACd,EAWI7oqB,KAAKkqC,MAVPS,EADF,EACEA,SACAuuC,EAFF,EAEEA,QACAl+B,EAHF,EAGEA,KACAsqtB,EAJF,EAIEA,eACA7/J,EALF,EAKEA,uBACAJ,EANF,EAMEA,0BACAE,EAPF,EAOEA,wBACA16iB,EARF,EAQEA,KACAxH,EATF,EASEA,KACAt3B,EAVF,EAUEA,EAGF,IAAKivB,EAKH,OAJArQ,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIu1nB,IACJ7rjB,MAAM,KAED,KAGT,IAAMwb,EAAYnrE,EAAKj3C,IAAI,cAAgB,GACrCqiH,EAAWprE,EAAKj3C,IAAI,aAAe,GACnC63T,EAAU5gR,EAAKj3C,IAAI,YAAc,GAGjCi8F,EAAShlD,EAAKj3C,IAAI,MAClB2iD,EAAS1L,EAAKj3C,IAAI,UAClBuoD,EAAWtR,EAAKj3C,IAAI,YAEpByK,EAAI,UAAM23G,EAAN,YAAmBC,GACvB75D,EAAa+4sB,EAAevhwB,IAAI,aAAc,IAC9CyhwB,EAAer/oB,GAAaC,EAAd,UAA6BD,EAAU,IAAM,IAA7C,OAAkDC,EAAS,IAAM,IAAjE,UAA2E75D,EAAW,IACpGk5sB,EAAWzqtB,EAAKj3C,IAAI,WAAY,IAEhC2lqB,EAAc,CAClB47F,EAAevhwB,IAAI,YACnBuhwB,EAAe1kvB,MAAM,CAAC,WAAY,OAAQ,UAC1C0kvB,EAAe1kvB,MAAM,CAAC,WAAY,WAAY,UAC9C0kvB,EAAevhwB,IAAI,aACnBuhwB,EAAe1kvB,MAAM,CAAC,WAAY,UAAW,WAC7CrV,QAAO,SAAAk+C,GAAQ,OAAIA,KAAUhoC,KAAK,MAE9B2qC,EAAQpR,EAAKj3C,IAAI,QAAS,IAC1B2hwB,EAAc1qtB,EAAKj3C,IAAI,cAAe,IACtC4hwB,EAAc3qtB,EAAKj3C,IAAI,cAAe,IACtC0lqB,EAAYzunB,EAAKj3C,IAAI,YAAa,IAElC6hwB,EAAe5qtB,EAAKj3C,IAAI,eAAgB,IAExC8hwB,EAAkBxgK,EAA0B/4iB,GAC5Cw5sB,EAAgBvgK,EAAwB7+iB,GACxCq/sB,EAAStgK,EAAuBzlgB,GAEhCm6S,GAAWtvV,GAAQA,EAAK9mD,IAAI,gBAAkB,GAE9CiiwB,GAAehrtB,EAAKp6B,MAAM,CAAC,WAAY,YACvC+8jB,GAA6C,kBAAjC,OAAOqoL,SAAP,IAAOA,QAAP,EAAOA,GAAc5ivB,SAAwB4ivB,GAA9C,OAA6DA,SAA7D,IAA6DA,QAA7D,EAA6DA,GAAch9vB,KAAI,SAAA04C,GAAI,OAAIA,EAAK39C,IAAI,YAE3GkiwB,GAA0B,SAAC97b,EAAYC,EAAiBnjN,EAAoBywE,GAChF,OACEyyI,EACI,cAAC,IAAD,CACA3jN,IAAK2jN,EACL7uP,MAAK,UAAK8uP,EAAL,MACL7uP,OAAO,IACPsrC,YAAa,OACbC,aAAa,EACb2kP,gBAAiB,CAAEhkP,aAAc,MAAOikP,eAAgB,WAExD,cAAC3kP,EAAA,EAAD,CACA3tC,UAAW6tC,EADX,SAGCywE,KAKT,OACE,eAAC7+G,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,cAAC4zP,EAAA,EAAD,CACEC,WAAU,eACJzS,EACA,CACEsO,kBAAmB,CACjBC,MAAOvO,EACPwO,QAlEE,IAmEFyxR,WAAW,IAGf,CACEF,YAAa,CACX10e,WAAY/tC,EAAQ84R,OACpBt6K,QAAS8tkB,KAKnBl3b,UACGu3b,GAAmBC,GAAiBC,EACjC,CACE,CAAE76uB,OAAQa,EAAE,oBAAqB84F,QAAS7kH,KAAK01b,YAC/C,CAAExqa,OAAQa,EAAE,sBAAuB84F,QAAS7kH,KAAKiuX,oBAEnD,KAEN/jQ,MAAO17G,EACPkgU,cACE,cAACl1N,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQgxC,MAFrB,SAIGu7oB,IAGLv+nB,YAAalnI,KAAKknI,cAIpB,eAACruD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,cAAC+iC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQgtrB,aAA/D,SACGn6uB,EAAE,kDAGL,cAACusS,EAAA,EAAD,CACErpD,QAAS,cAAC,IAAD,IACTpjJ,KAAMt/D,IAIR,cAAC+rQ,EAAA,EAAD,CACErpD,QAAS,cAAC,IAAD,IACTpjJ,KAAM69iB,IAIR,cAACpxW,EAAA,EAAD,CAAWrpD,QAAS,cAAC,IAAD,IAApB,SACE,cAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,yCAAP,aAAoDqgC,GAAS+9D,UAAU,SAArF,SACE,cAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACE,mBAAGmnB,KAAM,UAAYhhE,EAArB,SACGA,UAOT,cAACksQ,EAAA,EAAD,CAAWrpD,QAAS,cAAC,IAAD,IAApB,SACE,cAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,gDAAP,aAA2D25uB,GAAev7oB,UAAU,SAAlG,SACE,cAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACE,mBAAGmnB,KAAM,OAASs4oB,EAAlB,SACGA,UAOT,cAACptc,EAAA,EAAD,CAAWrpD,QAAS,cAAC,IAAD,IAApB,SACE,cAAChlJ,EAAA,EAAD,CAASC,MAAK,UAAKn+F,EAAE,gDAAP,aAA2D45uB,GAAel8F,EAAY,aAAM19oB,EAAE,6CAAR,KAA0D09oB,EAAY,KAAOt/iB,UAAU,SAA3L,SACE,cAAC3Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACE,mBAAGmnB,KAAM,OAASu4oB,GAAel8F,EAAY,IAAMA,EAAY,IAA/D,SACGk8F,GAAel8F,EAAY,UAAYA,EAAY,eAO9D,cAAC9yiB,EAAA,EAAD,IAEA,eAAC99C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,cAACoC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACA,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQgtrB,aAA/D,SACGn6uB,EAAE,8CAIL,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAACf,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UAEQ,OAARqjgB,SAAQ,IAARA,QAAA,EAAAA,GAAU5hlB,MAAO4hlB,GAAS30kB,KAAI,SAAC04C,EAAMvlD,GAAP,OAC9B,cAAC8tH,EAAA,EAAD,CAA4BC,MAAOxoE,EAAnC,SACE,cAACm3B,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAACmsP,EAAA,EAAD,CAAM3sP,UAAWF,EAAQitrB,SAAUrluB,MAAO4gB,OAFhCA,EAAOvlD,MAOrB,cAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAAmB,aAMvB,cAAC+8C,EAAA,EAAD,IAGA,eAAC99C,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQzC,KAHrB,UAKE,cAAC+iC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQgtrB,aAA/D,SACGn6uB,EAAE,+CAIL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SACLpB,UAAWF,EAAQktrB,WAJrB,UAME,cAACvtrB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQknU,MAJrB,SAMG6lX,GAAwBX,EAAevhwB,IAAI,WAhXrC,GAgX+DwpH,IAAWr0C,EAAQ84R,OAAQ94R,EAAQmtrB,aAAc,MAEzH,eAACxtrB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,cAAC8/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGk0S,KAGD92V,IAAS5pB,WAAS8vB,GACd,cAAC+jE,EAAA,EAAD,CACEl0C,UAAWF,EAAQotrB,gBACnBhtrB,UAAU,SACVy1P,UAAU,OACVlqN,QAAS,WACPl6E,EAASv+B,YAAK,GAAD,OAAI+pB,0BAAJ,YAA+BmvuB,EAAevhwB,IAAI,UALnE,SAQGwoD,IAEH,cAACitD,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACG15C,UAOb,eAACssB,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,SACXuB,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQknU,MAJrB,SAMG6lX,GAAwBrqc,EAxZlB,GAwZyCruM,IAAWr0C,EAAQ84R,OAAQ94R,EAAQmtrB,aAAcb,KAEnG,eAAC3srB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAMIn3B,IAAS5pB,WAAS8vB,GACf,cAAC+jE,EAAA,EAAD,CACCl0C,UAAWF,EAAQotrB,gBACnBhtrB,UAAU,SACVy1P,UAAU,OACVlqN,QAAS,WACPl6E,EAASv+B,YAAK,GAAD,OAAI2pB,oBAAJ,YAAyBiqE,MALzC,SAQExxF,IAEF,cAACgrG,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACEz3F,IAGP,eAACgrG,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UACGl6E,EAAE,2CADL,IACkD65uB,GAAgB75uB,EAAE,2CAM1E,cAAC,IAAD,CACEgiW,WAAY/tR,EACZ2K,KAAM3qG,KAAKgnC,MAAM6hoB,gBACjB76S,SAAUx/W,EACVy/W,kBAAmBjuX,KAAKiuX,kBACxB/kD,aAAc,kBAAM,EAAK8/V,cAAchpkB,IACvCsuR,aAAa,W,GAtXc7pV,aAyZtBwwC,oBACbupgB,IACAvjgB,aA/da,SAACC,GAAD,MAA+B,CAC5C82R,OAAQ,CACN7qP,SAAU,OACV7rC,MAAO,IACPi2C,OAAQ,IACRh2C,OAAQ,EACR0qB,MAAO,UACP+e,gBAAiB,UACjB+P,cAAe,aAEjBsxoB,YAAa,CACX/qrB,MAbiB,GAcjBi2C,OAdiB,GAejBpK,SAAU,QAEZ+C,MAAO,CACLjkB,MAAO,2BAETkkkB,UAAW,CACThjjB,SAAU,QACV/rC,QAAS,eACTkhC,UAA6B,EAAlBphC,EAAMZ,UACjB+4C,aAAgC,EAAlBn4C,EAAMZ,UACpBwB,QAAQ,GAAD,OAAuB,IAAlBZ,EAAMZ,UAAX,cAAkD,IAAlBY,EAAMZ,UAAtC,MACPmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BxhB,MAAO,UACP+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,MAE3CvsD,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1B,MAAO,CACLlf,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4jE,eAAgB,SAGpBggqB,aAAc,CACZ7yoB,aAAcn4C,EAAMZ,QAAQ,OAE9B8rrB,WAAY,CACV/yoB,aAAcn4C,EAAMZ,QAAQ,MAE9BgsrB,gBAAiB,CACfr5oB,UAAW,QAEbmzR,MAAO,CACL5+R,YAAatmC,EAAMZ,WAErB6rrB,SAAU,CACR1+oB,aAAc,MACdpC,OAAQ,eA8aVlmE,YAAgB,gBAChB0/D,mBA/BsB,SAAC73E,EAAOkD,GACHA,EAAnBo7tB,eACR,OAAO,eACFxytB,YAAyB,CAC1BwytB,eAAgB/pnB,cAChB1wF,KAAM4wF,cACNp4F,KAAMF,eAHLrQ,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CAOLkkoB,QAAS,SAACnonB,GACR/b,EAAS,IAAI6yB,KAAe9W,IAC5B/b,EAAS,IAAIizB,KAAkB,CAAElX,aAEnC/b,eAIWsqC,CAKbowrB,G,gBC7eWE,EAA4B,+BAKnC/sG,G,4JACJ,WACE,MAMIx4pB,KAAKkqC,MALPigE,EADF,EACEA,KACSomO,EAFX,EAEE50R,QACA+yS,EAHF,EAGEA,aACAmuP,EAJF,EAIEA,mBACAC,EALF,EAKEA,eAEI9hiB,EAAOmvD,EAoBb,OAjBUomO,IACDg1b,EACK,cAAC,EAAD,CACEvqtB,KAAMA,EACNyhiB,gBAAiB/tP,EACjBmuP,mBAAoBA,EACpBC,eAAgBA,IAIlB,cAAC,EAAD,CACE9hiB,KAAMA,Q,GAvBavW,aAoDxBwwC,sBACb00C,cACA9K,mBArBsB,SAAC73E,EAAOkD,GAC9B,IACEkonB,EAEElonB,EAFFkonB,SADF,EAGIlonB,EADFuunB,qBAFF,SAKMv4L,EAAwB1kW,YAA+B42hB,EAA/B52hB,CAAyCx0F,GACjEmjE,EAAOv3F,MAAI9N,MAAMo7d,IAA0BA,GAAyBA,EAAsBn8d,IAAI,QAC9F84kB,EAAqBjqkB,MAAI9N,MAAMo7d,IAA0BA,EAAsBn8d,IAAI,sBACnF+4kB,EAAiBlqkB,MAAI9N,MAAMo7d,IAA0BA,EAAsBn8d,IAAI,kBAErF,OAAO,yBACLomG,KAAMsujB,EAAgBtujB,EAAOkwC,eAAyCrzG,GACtE2U,QAASiiK,YAAkCw0c,EAAlCx0c,CAA4C52K,IACjD61iB,GAAsB,CAACA,uBACvBC,GAAkB,CAACA,sBAIZ7ngB,CAGbujlB,K,sJCvFW+tG,EAAuB,SAAC5zQ,GAAsB,IAAD,uBAAX3jO,EAAW,iCAAXA,EAAW,kBACxD,IAAMw3e,EAAex3e,EAAOhmR,KAAI,SAACy9vB,GAC/B,IACExgqB,EAEEwgqB,EAFFxgqB,MACA4uD,EACE4xmB,EADF5xmB,IAGF,OAAe,MAAPA,EAAD,UAAmB5uD,EAAnB,YAA4B4uD,GAAQ5uD,KAG7C,OAAOmsO,YAAP,yEACgCugL,EAAU6zQ,EAAa/kvB,KAAK,Q,kBCPjDu6D,EAAc,CACzB,SAAUpgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,SAAUhgC,SAASggC,IAAO,iBAAkB,IAC5C,UAAW,GAGAq6C,EAAQ,CACnB,SAAU,sCAAIjrG,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,MAAD,0EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,QAGjC,SAAU,sCAAIkb,EAAJ,yBAAIA,EAAJ,uBAAaonT,YAAZ,IAAD,4EACax2P,IAAO,iBACxBw2P,IAAG,WAAH,GAAIpnT,EAAK,IAAT,mBAAgBA,EAAKlb,MAAM,SAKpB,KACbovQ,SACAljM,cACAi6C,U,yJC9DFz9E,IACGs4G,IAAI41mB,KACJ51mB,IAAI61mB,KACJ71mB,IAAIh5G,KACJC,KAAK,CACJmB,YAAasqiB,IACb5riB,GAAI,CAAC,UAAW,QAChBuG,UAAW,UACXumD,OAAO,EACPhnD,cAAe,CACb6sG,aAAa,GAEfryG,MAAO,CACLs1G,MAAM,GAER9zG,QAAS,CAEPkttB,SAAS,mCAAD,OAAqC94uB,kBAIpC0qB,QAAf,E,yCCAMqutB,EAAuB,CAAC,MAaxBC,E,+KAEJ,WACE,MAGI9mwB,KAAKkqC,MAFPS,EADF,EACEA,SACAo8tB,EAFF,EAEEA,SAMFA,EAASputB,GAAG,UAAU,WAChBoutB,EAAS/ttB,WACXrO,EAAS,IAAI24iB,IAAmByjL,EAAS/ttB,UAAU,U,8CAKzD,SAAwCk5R,GAEtC,MAGIA,EAFFjoR,cADF,MACW,GADX,EAEE88sB,EACE70b,EADF60b,SAGF,GAAI98sB,IAAW88sB,EAAS/ttB,UAAU,GAAI,CACpC+ttB,EAASv3mB,eAAevlG,GACxB,IAAM+8sB,EAAY/8sB,EAAO7Q,eACwB,IAA7CyttB,EAAqBrmvB,QAAQwmvB,GAE/B,QAAO,YAAiBA,IAAazwrB,MAAK,SAAC0wrB,GACzCJ,EAAqBz6vB,KAAK66vB,GAC1BvrpB,SAAcsrpB,MACbrgkB,OAAM,WACPjrF,SAAcsrpB,MAGhBtrpB,SAAcsrpB,M,oBAIpB,WACE,IACED,EACE/mwB,KAAKkqC,MADP68tB,SAGF,OACE,cAAC,IAAD,CACEvutB,KAAMuutB,EADR,SAGGtiuB,WAAeigkB,KAAK1kmB,KAAKkqC,MAAM5D,gB,GAlDT7B,iBAwDzBmI,EAAkBkG,YAAyB,CAC/CmX,OAAQD,gBAqBKirB,sBACX4pC,kBAAQjyE,GAnBZ,SAA4BjC,GAC1B,MAAO,CACLA,eAIG,SAAoBmC,EAAYC,EAAeN,GAEpD,IAAMy6tB,EAAQz6tB,EAAS+L,KAEjBuutB,EAAWG,GAASC,EAE1B,OAAO/owB,OAAO+8C,OAAO,GAAI1O,EAAUK,EAAYC,EAAe,CAC5Dm6tB,QACAH,SAAUA,EAASn7oB,SAAWm7oB,OAInB9xrB,CAEb6xrB,I,6BC1Ga/jkB,IAhBR,SAAqBj9L,GAC1B,GAAS,MAALA,EAAW,CACb,GAA0C,kBAAtC1H,OAAOD,UAAU8C,SAASD,KAAK8E,GACjC,OAAIs2C,MAAMt2C,EAAEkoB,WAMd,GAAiB,kBAANloB,GAAkBA,EAAEiqO,iBAC7B,OAAOjqO,EAAEkpO,SAGb,OAAO,O,gBCnBT,IAAIl1D,EAAkB1+K,EAAQ,KAC1BkiL,EAAaliL,EAAQ,MACrB0mL,EAAe1mL,EAAQ,MAwC3BF,EAAOC,QAVP,SAAmBgJ,EAAQssK,GACzB,IAAI78J,EAAS,GAMb,OALA68J,EAAWqR,EAAarR,EAAU,GAElC6M,EAAWn5K,GAAQ,SAASzI,EAAO4I,EAAKH,GACtC21K,EAAgBlmK,EAAQtP,EAAKmsK,EAAS/0K,EAAO4I,EAAKH,OAE7CyP,I,6BCvCT,qBAEIwvQ,EAA6B,WAC7B,SAASA,EAAYlqC,GACjB,IAAI2lM,OAAY,IAAP3lM,EAAgB,GAAKA,EAAIjvL,EAAS40X,EAAG50X,OAAQ58B,EAAWwxZ,EAAGxxZ,SAAUquF,EAASmjU,EAAGnjU,OAC1F17G,KAAKonwB,WAAa,OAClBpnwB,KAAKqnwB,gBAAkB,YACvBrnwB,KAAKsnwB,kBAAoB,kBACzBtnwB,KAAKunwB,kBAAoB,gBACzBvnwB,KAAKwnwB,cAAgB,UACrBxnwB,KAAKynwB,cAAgB,QACrBznwB,KAAKylP,WAAa,UAClBzlP,KAAK07G,OAASruF,GAAYquF,GAAUgspB,IACpC1nwB,KAAKiqD,OAASA,EAgMlB,OA9LAm5N,EAAYjlR,UAAUq+C,MAAQ,SAAU9gD,EAAO++C,GAC3C,MAAc,KAAV/+C,EACO,KAEJsE,KAAK07G,OAAOhgH,EAAO++C,GAAQ,IAEtC2oO,EAAYjlR,UAAU4tH,KAAO,SAAUrwH,GACnC,OAAc,OAAVA,EACO,KAEJsE,KAAK07G,OAAOhgH,IAEvB0nR,EAAYjlR,UAAU+lM,QAAU,SAAUxoM,GACtC,OAAOsE,KAAK07G,OAAOhgH,GAAOwoM,WAE9Bk/E,EAAYjlR,UAAU68L,OAAS,SAAUjvE,GACrC,OAAgB,OAATA,GAEXq3J,EAAYjlR,UAAUwpwB,QAAU,SAAU57oB,EAAM67oB,GAC5C,OAAO77oB,EAAKqpH,KAAKwyhB,IAErBxkf,EAAYjlR,UAAUmwP,QAAU,SAAUviI,EAAMrwH,GAC5C,OAAOqwH,EAAKuiI,QAAQ5yP,IAExB0nR,EAAYjlR,UAAUowP,SAAW,SAAUxiI,EAAMrwH,GAC7C,OAAOqwH,EAAKwiI,SAAS7yP,IAEzB0nR,EAAYjlR,UAAU0pwB,WAAa,SAAU97oB,EAAMrwH,GAC/C,OAAOqwH,EAAKuiI,QAAQ5yP,EAAO,QAE/B0nR,EAAYjlR,UAAU2pwB,YAAc,SAAU/7oB,EAAMrwH,GAChD,OAAOqwH,EAAKwiI,SAAS7yP,EAAO,QAEhC0nR,EAAYjlR,UAAU4pwB,aAAe,SAAUh8oB,EAAMrwH,GACjD,OAAOqwH,EAAKwiI,SAAS7yP,EAAO,SAEhC0nR,EAAYjlR,UAAU6pwB,YAAc,SAAUj8oB,EAAMrwH,GAChD,OAAOqwH,EAAKuiI,QAAQ5yP,EAAO,SAE/B0nR,EAAYjlR,UAAU8pwB,WAAa,SAAUl8oB,GACzC,OAAOA,EAAKvxE,QAAQmhE,QAAQ,QAEhCynK,EAAYjlR,UAAU+pwB,SAAW,SAAUn8oB,GACvC,OAAOA,EAAKvxE,QAAQohE,MAAM,QAE9BwnK,EAAYjlR,UAAUs8C,OAAS,SAAUsxE,EAAMo8oB,GAC3C,OAAOp8oB,EAAKtxE,OAAO0ttB,IAEvB/kf,EAAYjlR,UAAUiqwB,aAAe,SAAUC,GAC3C,OAAOA,GAEXjlf,EAAYjlR,UAAUmkR,SAAW,SAAUv2J,GACvC,OAAOA,EAAKhoH,IAAI,UAEpBq/Q,EAAYjlR,UAAUmqwB,QAAU,SAAUv8oB,EAAM32G,GAC5C,OAAOA,EAAQ,EACT22G,EAAKvxE,QAAQj7B,SAASxiB,KAAKijB,IAAI5K,GAAQ,QACvC22G,EAAKvxE,QAAQ77B,IAAIvJ,EAAO,SAElCguQ,EAAYjlR,UAAUgnM,SAAW,SAAUp5E,EAAM32G,GAC7C,OAAO22G,EAAKvxE,QAAQ8mM,MAAMlsO,IAE9BguQ,EAAYjlR,UAAUokR,WAAa,SAAUx2J,GACzC,OAAOA,EAAKhoH,IAAI,YAEpBq/Q,EAAYjlR,UAAUoqwB,WAAa,SAAUx8oB,EAAM32G,GAC/C,OAAO22G,EAAKvxE,QAAQinM,QAAQrsO,IAEhCguQ,EAAYjlR,UAAUqkR,WAAa,SAAUz2J,GACzC,OAAOA,EAAKhoH,IAAI,YAEpBq/Q,EAAYjlR,UAAUqqwB,WAAa,SAAUz8oB,EAAM32G,GAC/C,OAAO22G,EAAKvxE,QAAQqnM,QAAQzsO,IAEhCguQ,EAAYjlR,UAAUwpP,SAAW,SAAU57H,GACvC,OAAOA,EAAKhoH,IAAI,UAEpBq/Q,EAAYjlR,UAAUsqwB,UAAY,SAAU18oB,EAAM67oB,GAC9C,OAAO77oB,EAAKikI,OAAO43gB,EAAW,QAElCxkf,EAAYjlR,UAAUm9O,SAAW,SAAUvvH,EAAM32G,GAC7C,OAAO22G,EAAKvxE,QAAQm8L,MAAMvhO,IAE9BguQ,EAAYjlR,UAAUuqwB,gBAAkB,SAAUC,GAC9C,MAAgB,OAATA,EAAgB,KAAO,MAElCvlf,EAAYjlR,UAAUyqwB,aAAe,SAAU78oB,GAC3C,OAAOA,EAAKvxE,QAAQmhE,QAAQ,UAEhCynK,EAAYjlR,UAAU0qwB,WAAa,SAAU98oB,GACzC,OAAOA,EAAKvxE,QAAQohE,MAAM,UAE9BwnK,EAAYjlR,UAAU2qwB,aAAe,SAAU/8oB,GAC3C,OAAOA,EAAKvxE,QAAQ77B,IAAI,EAAG,UAE/BykQ,EAAYjlR,UAAU4qwB,iBAAmB,SAAUh9oB,GAC/C,OAAOA,EAAKvxE,QAAQj7B,SAAS,EAAG,UAEpC6jQ,EAAYjlR,UAAU6qwB,cAAgB,SAAUj9oB,GAG5C,IAFA,IACIk9oB,EAAa,CADAl9oB,EAAKvxE,QAAQmhE,QAAQ,SAE/BstpB,EAAWpnwB,OAAS,IAAI,CAC3B,IAAIqnwB,EAAYD,EAAWA,EAAWpnwB,OAAS,GAC/ConwB,EAAW78vB,KAAKpM,KAAK8owB,aAAaI,IAEtC,OAAOD,GAEX7lf,EAAYjlR,UAAUgrwB,QAAU,SAAUp9oB,GACtC,OAAOA,EAAKhoH,IAAI,SAEpBq/Q,EAAYjlR,UAAUirwB,QAAU,SAAUr9oB,EAAMoqH,GAC5C,OAAOpqH,EAAKvxE,QAAQ9yC,IAAI,OAAQyuO,IAEpCitC,EAAYjlR,UAAUkrwB,iBAAmB,SAAUt9oB,EAAM9/D,GACrD,OAAOjsD,KAAKuowB,WAAWvowB,KAAKmlM,SAASp5E,EAAM/rH,KAAKsiR,SAASr2N,IAAQjsD,KAAKuiR,WAAWt2N,KAErFm3N,EAAYjlR,UAAUmrwB,YAAc,WAChC,IAAI3xtB,EAAQ33C,KACZ,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAGgJ,KAAI,SAAUugwB,GACvC,OAAO5xtB,EAAM+jE,SACR4hI,QAAQishB,GACR9utB,OAAO,UAGpB2oO,EAAYjlR,UAAUu8L,QAAU,SAAUh/L,EAAOkswB,GAC7C,OAAc,OAAVlswB,GAAgC,OAAdkswB,GAGf5nwB,KAAK07G,OAAOhgH,GAAOs0P,OAAO43gB,IAErCxkf,EAAYjlR,UAAUqrwB,aAAe,SAAUz9oB,GAY3C,IAXA,IAAIhsG,EAAQgsG,EACPvxE,QACAmhE,QAAQ,SACRA,QAAQ,QACTn/G,EAAMuvH,EACLvxE,QACAohE,MAAM,SACNA,MAAM,QACPxmG,EAAQ,EACR0yB,EAAU/nB,EACV0pvB,EAAc,GACX3huB,EAAQymN,SAAS/xP,IAAM,CAC1B,IAAIktwB,EAAa3swB,KAAKwjB,MAAMnL,EAAQ,GACpCq0vB,EAAYC,GAAcD,EAAYC,IAAe,GACrDD,EAAYC,GAAYt9vB,KAAK07B,GAC7BA,EAAUA,EAAQ0S,QAAQ77B,IAAI,EAAG,OACjCvJ,GAAS,EAEb,OAAOq0vB,GAEXrmf,EAAYjlR,UAAUwrwB,aAAe,SAAU5pvB,EAAOvjB,GAKlD,IAJA,IAAIu+G,EAAY/6G,KAAK07G,OAAO37F,GAAO47F,QAAQ,QACvChB,EAAU36G,KAAK07G,OAAOl/G,GAAKo/G,MAAM,QACjCsvI,EAAQ,GACRpjN,EAAUizE,EACPjzE,EAAQymN,SAAS5zI,IACpBuwI,EAAM9+O,KAAK07B,GACXA,EAAUA,EAAQ0S,QAAQ77B,IAAI,EAAG,QAErC,OAAOusO,GAGXk4B,EAAYjlR,UAAUyrwB,sBAAwB,SAAU79oB,GACpD,OAAOA,EAAKtxE,OAAOz6C,KAAKqnwB,kBAE5Bjkf,EAAYjlR,UAAU0rwB,YAAc,SAAU99oB,GAC1C,OAAOA,EAAKtxE,OAAO,SAEvB2oO,EAAYjlR,UAAU2rwB,wBAA0B,SAAU/9oB,GACtD,OAAOA,EAAKtxE,OAAO,eAEvB2oO,EAAYjlR,UAAU4rwB,4BAA8B,SAAUh+oB,GAC1D,OAAOA,EAAKtxE,OAAO,UAEvB2oO,EAAYjlR,UAAU6rwB,aAAe,SAAUj+oB,GAC3C,OAAOA,EAAKtxE,OAAO,SAEvB2oO,EAAYjlR,UAAU8rwB,WAAa,SAAUl+oB,GACzC,OAAOA,EAAKtxE,OAAO,MAEvB2oO,EAAYjlR,UAAU+rwB,YAAc,SAAUn+oB,EAAM48oB,GAChD,OAAO58oB,EAAKtxE,OAAOkutB,EAAO,KAAO,OAErCvlf,EAAYjlR,UAAUgswB,cAAgB,SAAUp+oB,GAC5C,OAAOA,EAAKtxE,OAAO,OAEvB2oO,EAAYjlR,UAAUiswB,cAAgB,SAAUr+oB,GAC5C,OAAOA,EAAKtxE,OAAO,OAEhB2oO,EA3MsB,GA8MlBA,O,4CC7MT46K,E,OAAWnnU,EAAOn+C,IAAV,kKASCslX,O,gLCNTxuU,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dw7f,WAAY,CACV/trB,SAAU,IACVR,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElCgwrB,qBAAsB,CACpBj3oB,aAAcn4C,EAAMZ,QAAQ,IAE9B6qgB,YAAa,CACX5od,WAAYrhD,EAAM82C,WAAWu4oB,gBAE/BvrY,YAAa,CACX/4R,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,QAAQ,IAE7BkwrB,YAAa,CACXvtpB,SAAU,WACVqX,IAAKp5C,EAAMZ,QAAQ,GACnB9/D,MAAO0gE,EAAMZ,QAAQ,IAEvBmwrB,QAAS,CACPzlpB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCuC,aAAcvsC,EAAM4/C,MAAMrT,aAC1B3rC,QAASZ,EAAMZ,QAAQ,GACvBgiC,UAAWphC,EAAMZ,QAAQ,GACzBugD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,OAE1Ci0kB,aAAc,CACZ33kB,YAAatmC,EAAMZ,QAAQ,SA+FhBgsP,IAlFwD,SAAC,GAOjE,IANL37N,EAMI,EANJA,KACAuuB,EAKI,EALJA,cACAu9L,EAII,EAJJA,WACAt9L,EAGI,EAHJA,MACAotM,EAEI,EAFJA,SACAC,EACI,EADJA,UAGMttP,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAEFy4S,EAAgC,CACpC,CAACz4S,EAAE,wCAAyCmtG,GAAiB,KAC7D,CAACntG,EAAE,yCAA0C0qS,GAAc,KAC3D,CAAC1qS,EAAE,uCAAwCotG,GAAS,MAGtD,OACE,eAAC,IAAD,CACExuB,KAAMA,EACNg6B,QAAS4hM,EACTrtP,QAAS,CACP64C,MAAO74C,EAAQmxrB,YAJnB,UAOE,cAAC,IAAD,CAAYtuwB,KAAK,QAAQq9E,UAAWF,EAAQsxrB,YAAa3lpB,QAAS0hN,EAAlE,SACE,cAAC,IAAD,CAAWp/M,SAAS,YAEtB,cAAC,IAAD,UACE,eAAC,IAAD,CAAM3tC,WAAW,EAAME,UAAU,SAAjC,UACE,eAAC,IAAD,CAAMF,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQoxrB,qBAA9D,UACE,cAAC,IAAD,CAAalxrB,UAAWF,EAAQ8lT,cAChC,cAAC,IAAD,CAAYtlR,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQisgB,YAAvE,SACIp5jB,EAAE,qCAGR,eAAC,IAAD,CAAM6tD,MAAM,EAAMgB,GAAI,GAAtB,UACE,cAAC,IAAD,CAAY8+B,QAAQ,QAAQzT,MAAM,cAAlC,SACIl6E,EAAE,wCAEN,cAAC,IAAD,CAAMytD,WAAW,EAAMc,QAAS,EAAGlB,UAAWF,EAAQuxrB,QAAtD,SACGjmc,EAAKx7T,KAAI,mCAAE83B,EAAF,KAASplC,EAAT,YACR,eAAC,WAAD,WACE,cAAC,IAAD,CAAMk+E,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,IAAD,CAAY8+B,QAAQ,QAAQzT,MAAM,gBAAlC,SACGnlE,MAGL,cAAC,IAAD,CAAM84C,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,IAAD,CAAY8+B,QAAQ,QAAQzT,MAAM,cAAlC,SACGvqG,QARcolC,gBAiB/B,cAAC,IAAD,UACE,eAAC,IAAD,CAAM04C,WAAW,EAAMM,QAAQ,SAASQ,QAAS,EAAjD,UACE,cAAC,IAAD,CACEuqC,QAAS0hN,EACTtgO,MAAM,UACN7sB,UAAWF,EAAQignB,aAHrB,SAKIptqB,EAAE,wBAEN,cAAC,IAAD,CACE84F,QAAS2hN,EACTvgO,MAAM,UACNyT,QAAQ,WAHV,SAKI3tF,EAAE,oD,mGC3GV0guB,GAAWtjnB,EAF8DtS,IAAOn+C,KAExE,yHACD,SAACxuC,GAAD,OAAWA,EAAM4xC,WAwDf4urB,IAzCsC,SAACxguB,GACpD,IACE5D,EAME4D,EANF5D,SADF,EAOI4D,EALF4xC,eAFF,MAEY,GAFZ,EAGE29B,EAIEvvE,EAJFuvE,MACArS,EAGEl9D,EAHFk9D,QACAujqB,EAEEzguB,EAFFyguB,UALF,EAOIzguB,EADF4vV,mCANF,SASA,OACE,cAAC2yX,EAAD,CAAU3wqB,QAASA,EAAnB,SACE,eAAC,IAAD,yBACEtC,WAAW,EACXP,WAAW,SACXqB,QAAS,GACLqwrB,GAJN,cAOIvjqB,GACA,cAAC,IAAD,CACExtB,MAAM,EADR,SAGE,cAAC,IAAD,CAAkBqsB,MAAO6zR,EAA8B,YAAc,cAGzE,cAAC,IAAD,CACElgT,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRD,MAAOA,EAFT,SAIGnzE,c,6BC7Db,IAAIqgL,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,oLACD,UAEJ3K,EAAQywH,QAAUq4I,G,mECPN,E,2BAAZ,SAAY,GACR2mgB,EAAF,gBACEA,EAAF,YACEA,EAAF,0BACEA,EAAF,wBACEA,EAAF,oCACEA,EAAF,4BACEA,EAAF,gBACA,4BARF,CAAY,MAAc,KAmB1B,iBAaI,SAAF,EACE,EACA,EACA,gBAAM,EAAN,IAEI,KAAC,SAAW,EACZ,KAAC,SAAW,EACZ,KAAC,QAAU,EA2CnB,OA9DS,MAAP,SACE,EACA,EACA,GAEI,YAFJ,QAAM,EAAN,IAEO,IAAI,EAAa,EAAO,EAAU,IAiBnC,EAAF,2BAAN,SAAuB,EAAqB,G,6GAiC1C,OAhCc,EAMV,KAAK,QALP,EAAQ,WACR,EAAW,cACX,EAAY,eACZ,EAAgB,mBAChB,EAAc,iBAGV,EAAqB,EAAQ,YAAY,KAAK,SAAU,CAClD,KAAJ,eACI,QAAO,OAAR,QAAQ,IAAR,SAAY,EACX,OAAF,CACN,KAAM,KAAK,SAAS,OACpB,aAAc,EACV,IAAU,SAAS,QACnB,EACJ,QAAS,EACL,IAAU,SAAS,QACnB,KAGF,EAAwB,EAAQ,SAAS,GAEzC,EAAe,EAAQ,IAAI,CAC/B,KAAM,WACN,EAAG,IAAU,GAAG,KAAK,UACrB,GAAI,IAAa,SAAS,KAAK,UAC/B,GAAI,CAAE,EAAG,GACT,KAAM,EAAc,IAAa,SAAS,QAAe,EACzD,eAA8B,OAAd,QAAc,IAAd,SAAkB,IAGhC,GACF,EAAQ,OAAO,EAAK,GACpB,GAAO,IAEP,GAAO,EAAQ,SAAS,WAG9B,EA/DA,GAiEe,O,6BC9Ff,gCAuBeC,IAnBC,SAAC,GAAkB,IAAhBvkuB,EAAe,EAAfA,SACHwX,YAAe,gBAArB/xB,EACR,OACI,cAAC,IAAD,CACEuvF,MAAO,CACH0J,gBAAiB,UACjB/e,MAAO,QACP2tB,UAAW,GACXx4C,QAAS,OACTnC,WAAY,SACZ6C,QAAS,YACTygD,WAAY,QARlB,SAWKj2F,M,+mBCZIq9E,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,6FACD,QCmBJ,SAASglwB,GAAsBpvwB,EAAO2wL,GACpC,GAAa,MAAT3wL,EACF,OAAOA,EAGT,IAAIqvwB,EAAUhuwB,KAAKo/E,MAAMzgF,EAAQ2wL,GAAaA,EAC9C,OAAO1qL,OAAOopwB,EAAQ3wgB,QAXxB,SAA6BlhJ,GAC3B,IAAI8xpB,EAAc9xpB,EAAIj4G,WAAW89C,MAAM,KAAK,GAC5C,OAAOistB,EAAcA,EAAYnpwB,OAAS,EASZopwB,CAAoB5+kB,KA8GpD,SAAS6+kB,GAAchhuB,GACTA,EAAMxuC,MAAlB,IACIilB,EAAQu8B,aAAyBhT,EAAO,CAAC,UAE7C,OAAOzF,IAAMwB,cAAc,OAAQtlB,GAMrC,IAAIouP,GAActqO,IAAMwB,cAAckluB,GAAM,CAC1ChkpB,SAAU,YAGZ,SAASikpB,GAAiB1vwB,GACxB,MAAO,GAAG4P,OAAO5P,EAAO,SAAS4P,OAAiB,IAAV5P,EAAc,IAAM,IAG9D,IAAI2vwB,GAAS5muB,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBkyrB,EAAsBphuB,EAAMqT,aAC5BA,OAAuC,IAAxB+ttB,EAAiC,KAAOA,EACvD3nf,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChD4nf,EAAYrhuB,EAAMqhuB,UAClBC,EAAwBthuB,EAAMuhuB,eAC9BA,OAA2C,IAA1BD,EAAmC,QAAUA,EAC9DE,EAAsBxhuB,EAAMyhuB,aAC5BA,OAAuC,IAAxBD,EAAiCN,GAAmBM,EACnE1U,EAAc9stB,EAAM0nF,KACpBA,OAAuB,IAAhBoloB,EAAyBjof,GAAciof,EAC9C4U,EAAwB1huB,EAAM2huB,uBAC9BA,OAAmD,IAA1BD,EAAmCV,GAAgBU,EAC5EE,EAAa5huB,EAAMltC,IACnBA,OAAqB,IAAf8uwB,EAAwB,EAAIA,EAClCC,EAAW7huB,EAAM17B,KACjBgtG,EAAWtxE,EAAMsxE,SACjBwwpB,EAAiB9huB,EAAM8huB,eACvB12oB,EAAeprF,EAAMorF,aACrB62gB,EAAcjimB,EAAMiimB,YACpB8/H,EAAmB/huB,EAAMmiJ,UACzBA,OAAiC,IAArB4/kB,EAA8B,EAAIA,EAC9CC,EAAkBhiuB,EAAMgihB,SACxBA,OAA+B,IAApBggN,GAAqCA,EAChDhof,EAAch6O,EAAMnuC,KACpBA,OAAuB,IAAhBmoR,EAAyB,SAAWA,EAC3CmhZ,EAAYn7nB,EAAMxuC,MAClBilB,EAAQu8B,aAAyBhT,EAAO,CAAC,UAAW,YAAa,eAAgB,WAAY,YAAa,iBAAkB,eAAgB,OAAQ,yBAA0B,MAAO,OAAQ,WAAY,iBAAkB,eAAgB,cAAe,YAAa,WAAY,OAAQ,UAE3R65F,EAAkBt/F,IAAMia,WACxByttB,EAAcpooB,EAAgB,GAC9BqooB,EAAiBrooB,EAAgB,GAEjCv1H,EAAOu9vB,GAAYI,EACvB1nuB,IAAM0B,WAAU,WAIdimuB,EAAe,cAAc9gwB,OAAOvO,KAAKo/E,MAAsB,IAAhBp/E,KAAKy1E,cACnD,IAEH,IACI6wY,EADgB5+a,IAAMyG,YAAqBpvC,IAAdupqB,GACAv9nB,QAE7B4/O,EAAmBjjP,IAAMia,SAASnB,GAClCmmiB,EAAah8T,EAAiB,GAC9B2kf,EAAgB3kf,EAAiB,GAarC,IAAI4kf,EAAexB,GAXAznT,EAAegiN,EAAY3hF,EAWSr3Z,GACnDnxG,EAAQwjD,cAER8pJ,EAAmB/jP,IAAMia,SAAS,CACpC8+S,OAAQ,EACR9yR,OAAQ,IAEN6hsB,EAAoB/jf,EAAiB,GACrCg1E,EAAQ+ua,EAAkB/ua,MAC1B9yR,EAAQ6hsB,EAAkB7hsB,MAC1Bk4C,EAAW4lK,EAAiB,GAE5B9sR,EAAQ4wwB,GAEG,IAAX9ua,IACF9hW,EAAQ8hW,IAGK,IAAX9yR,IACFhvE,EAAQgvE,GAGV,IAAIq+M,EAAqBC,eACrBC,EAAiBF,EAAmBE,eACpCC,EAAgBH,EAAmBG,cACnCC,EAAkBJ,EAAmBttR,IAErC2tR,GAAmB3kP,IAAMia,UAAS,GAClCw1E,GAAek1J,GAAiB,GAChCsxJ,GAAkBtxJ,GAAiB,GAEnCwjI,GAAUnoX,IAAMyG,SAChBw+O,GAAiB7iJ,aAAWsiJ,EAAiByjI,IAC7C7iI,GAAYljJ,aAAW6iJ,GAAgBjuR,GAuDvCqlQ,GAAe,SAAsB35H,GACvC,IAAIt3H,EAAW8oE,WAAWwuD,EAAMn6G,OAAOtxB,OAElC2nd,GACHgpT,EAAcx8vB,GAGZ2rG,GACFA,EAAS2rB,EAAOt3H,IAIhB28vB,GAAc,SAAqBrloB,GAGf,IAAlBA,EAAMk4K,SAAmC,IAAlBl4K,EAAMm4K,UAIjC18L,EAAS,CACP46O,OAAQ,EACR9yR,OAAQ,IAGL24Y,GACHgpT,EAAc,MAGZ7wpB,GAAY7iC,WAAWwuD,EAAMn6G,OAAOtxB,SAAW4wwB,GACjD9wpB,EAAS2rB,EAAO,QAIhBsloB,GAAc,SAAqBtloB,GACjC8hJ,EAAe9hJ,IACjBuzS,IAAgB,GAGlB,IAAIgyV,EAAW/zrB,WAAWwuD,EAAMn6G,OAAOtxB,OACvCknH,GAAS,SAAUtrG,GACjB,MAAO,CACLkmV,MAAOlmV,EAAKkmV,MACZ9yR,MAAOgisB,MAIPV,GAAkBthsB,IAAUgisB,GAC9BV,EAAe7koB,EAAOuloB,IAItB5pf,GAAa,SAAoB37I,GACnC,IAAe,IAAXq2N,EAAJ,EAIqB,IAAjBtpO,KACFwmT,IAAgB,GAChBxxJ,KAIFtmK,GAAS,SAAUtrG,GACjB,MAAO,CACLkmV,MAAOlmV,EAAKkmV,MACZ9yR,OAJW,MAQXshsB,IARW,IAQOthsB,GACpBshsB,EAAe7koB,GATF,KAabvtD,GAAO,SAAc5yC,EAAO2luB,GAC9B,IAAI1ruB,EAAK,GAAG31B,OAAOkD,EAAM,KAAKlD,OAAOuD,OAAOm4B,EAAMtrC,OAAOk9E,QAAQ,IAAK,MAClEY,EAAY/0C,IAAMwB,cAAc4luB,EAAwB,CAC1DnwwB,MAAOsrC,EAAMtrC,MACb09E,UAAW2B,mBAAK7B,EAAQ04C,KAAM5qF,EAAM+9X,OAAS7rV,EAAQqtlB,WAAartlB,EAAQ0zrB,UAAW5luB,EAAMw2T,OAAStkR,EAAQ2zrB,UAAW7luB,EAAM0jC,OAASwO,EAAQ4zrB,UAAW9luB,EAAMi8O,QAAU/pM,EAAQ6zrB,aAChLxB,IAAcvkuB,EAAM+9X,OAASwmW,EAAY35oB,GAE5C,OAAIs6b,EACKznhB,IAAMwB,cAAcxB,IAAM8lP,SAAU,CACzCjmR,IAAK0iC,EAAMtrC,OACV89E,GAGE/0C,IAAMwB,cAAcxB,IAAM8lP,SAAU,CACzCjmR,IAAK0iC,EAAMtrC,OACV+oC,IAAMwB,cAAc,QAAS6D,aAAS,CACvCsvC,UAAWF,EAAQp4C,MACnBi0R,QAAS9zR,GACR0ruB,GAAanzrB,EAAW/0C,IAAMwB,cAAc,OAAQ,CACrDmzC,UAAWF,EAAQ8zrB,gBAClBrB,EAAa3kuB,EAAMtrC,SAAU+oC,IAAMwB,cAAc,QAAS,CAC3D8iE,QAAS0jqB,GACT/moB,OAAQo9I,GACRtnK,SAAUslJ,GACVj8I,QAAS2npB,GACTtvpB,SAAUA,EACVxhH,MAAOsrC,EAAMtrC,MACbulC,GAAIA,EACJ/gC,KAAM,QACNsO,KAAMA,EACNwtH,QAASh1F,EAAMg1F,QACf5iD,UAAWF,EAAQ8zrB,mBAIvB,OAAOvouB,IAAMwB,cAAc,OAAQ6D,aAAS,CAC1CruC,IAAKsuR,GACLoiX,YApKoB,SAAyBhlgB,GACzCglgB,GACFA,EAAYhlgB,GAGd,IASI45M,EATAksb,EAAWrgX,GAAQ9kX,QAEnBoluB,EAAwBD,EAAShze,wBACjCz/Q,EAAQ0yvB,EAAsB1yvB,MAC9BD,EAAO2yvB,EAAsB3yvB,KAG7B+gE,EADwB2xrB,EAAS50M,WAAWp+R,wBACd3+M,MAKhCylQ,EADsB,QAApB7lQ,EAAMxB,WACGl/D,EAAQ2sH,EAAMk4K,UAAY/jO,EAAQt+E,IAElCmqI,EAAMk4K,QAAU9kS,IAAS+gE,EAAQt+E,GAG9C,IAAImwwB,EAAWrC,GAAsB9twB,EAAM+jV,EAAU10J,EAAY,EAAGA,GACpE8glB,EA/QJ,SAAezxwB,EAAOuB,EAAKD,GACzB,OAAItB,EAAQuB,EACHA,EAGLvB,EAAQsB,EACHA,EAGFtB,EAsQMqsI,CAAMoloB,EAAU9glB,EAAWrvL,GACtC4lH,GAAS,SAAUtrG,GACjB,OAAOA,EAAKkmV,QAAU2va,GAAY71vB,EAAKozD,QAAUyisB,EAAW71vB,EAAO,CACjEkmV,MAAO2va,EACPzisB,MAAOyisB,MAGXzyV,IAAgB,GAEZsxV,GAAkBxua,IAAU2va,GAC9BnB,EAAe7koB,EAAOgmoB,IAoIxB73oB,aAhIqB,SAA0B6R,GAC3C7R,GACFA,EAAa6R,GAIfvkB,EAAS,CACP46O,OAFa,EAGb9yR,OAHa,IAMXshsB,IANW,IAMOxua,GACpBwua,EAAe7koB,GAPF,IA4Hf/tD,UAAW2B,mBAAK7B,EAAQ3hE,KAAM6hE,EAAoB,WAATr9E,GAAqBm9E,EAAQ,OAAO5tE,OAAOk5H,aAAWzoI,KAASmhH,GAAYhkC,EAAQgkC,SAAUgX,IAAgBh7C,EAAQg7C,aAAcg4b,GAAYhze,EAAQgze,UAChMxqgB,KAAMwqgB,EAAW,MAAQ,KACzB,aAAcA,EAAWy/M,EAAajwwB,GAAS,MAC9CilB,GAAQlf,MAAMuN,KAAK,IAAIvN,MAAMzE,IAAMgM,KAAI,SAAU+U,EAAG5hB,GACrD,IAAIixwB,EAAYjxwB,EAAQ,EAExB,GAAIkwL,EAAY,EAAG,CACjB,IAAI26E,EAAQvlQ,MAAMuN,KAAK,IAAIvN,MAAM,EAAI4qL,IACrC,OAAO5nJ,IAAMwB,cAAc,OAAQ,CACjC3hC,IAAK8owB,EACLh0rB,UAAW2B,mBAAK7B,EAAQqxnB,QAAS6iE,IAAcrwwB,KAAKqjB,KAAK1kB,MAAsB,IAAX8hW,IAA2B,IAAX9yR,IAAiBwO,EAAQ6zrB,aAC5G/lgB,EAAMh+P,KAAI,SAAU+xJ,EAAGsymB,GACxB,IAAIC,EAAmBxC,GAAsBsC,EAAY,GAAKC,EAAe,GAAKhhlB,EAAWA,GAC7F,OAAOzyG,GAAK,CACVl+E,MAAO4xwB,EACPvoW,OAAQuoW,GAAoB5xwB,EAC5B8hW,MAAO8va,GAAoB9va,EAC3B9yR,MAAO4isB,GAAoB5isB,EAC3BsxD,QAASsxoB,IAAqBhB,GAC7B,CACDhxpB,MAAO0rJ,EAAMnlQ,OAAS,IAAMwrwB,EAAe,GAAK,CAC9C/xrB,MAAOgyrB,IAAqB5xwB,EAAQ,GAAG4P,QAAQ+hwB,EAAe,GAAKhhlB,EAAY,IAAK,KAAO,KAC3FhiE,SAAU,SACV2W,OAAQ,EACR/jB,SAAU,kBAMlB,OAAOrjC,GAAK,CACVl+E,MAAO0xwB,EACPnqf,OAAQmqf,IAAc1xwB,KAAqB,IAAX8hW,IAA2B,IAAX9yR,GAChDq6V,OAAQqoW,GAAa1xwB,EACrB8hW,MAAO4va,GAAa5va,EACpB9yR,MAAO0isB,GAAa1isB,EACpBsxD,QAASoxoB,IAAcd,QAEtBpgN,IAAahvc,GAA4B,MAAhBovpB,GAAwB7nuB,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,QAAS,CAC3HvqC,MAAO,GACPulC,GAAI,GAAG31B,OAAOkD,EAAM,UACpBtO,KAAM,QACNsO,KAAMA,EACN++vB,gBAAgB,EAChBn0rB,UAAWF,EAAQ8zrB,iBACjBvouB,IAAMwB,cAAc,QAAS,CAC/BmzC,UAAWF,EAAQs0rB,SACnBz4c,QAAS,GAAGzpT,OAAOkD,EAAM,WACxBi2B,IAAMwB,cAAc,OAAQ,CAC7BmzC,UAAWF,EAAQ8zrB,gBAClBvB,SAsHUxwrB,gBA5iBK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ6jE,QAAS,cACT6hC,SAAU,WACVkK,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCn/K,MAAO,UACPof,OAAQ,UACR+kP,wBAAyB,cACzB,aAAc,CACZl9O,QAAS,GACTmH,cAAe,QAEjB,6BAA8B,CAC5Bs0O,QAAS,mBAKbjjF,UAAW,CACTv+J,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrCO,UAAW,CACTx+J,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAIrC8mS,SAAU,CACR73b,cAAe,QAIjBnX,SAAU,GAGVgX,aAAc,GAGd84oB,eAAgB,CACdnyoB,OAAQ,EACR2+I,KAAM,gBACNjoJ,OAAQ,EACRh2C,QAAS,EACT0qB,MAAO,OACPokB,SAAU,SACVvuC,QAAS,EACTmhC,SAAU,WACVqX,IAAK,GACLh5C,MAAO,GAITkyrB,SAAU,CACR,kBAAmB,CACjBl5oB,IAAK,EACLC,OAAQ,EACRtX,SAAU,WACV0rP,QAAS,iBACTrtR,MAAO,SAKXx6C,MAAO,CACLukF,OAAQ,WAIVuM,KAAM,CACJx2C,QAAS,OACTo5C,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,YAAa,CAChDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,WAIvCl1J,cAAe,QAIjBu4oB,UAAW,CACT3mqB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAOgyF,UAI9BqpjB,WAAY,GAGZsmG,UAAW,GAGXC,UAAW,GAGXC,WAAY,CACV1woB,UAAW,cAIbkukB,QAAS,CACPttlB,SAAU,eAsckB,CAChCzuG,KAAM,aADOysE,CAEZowrB,I,kFC/gBUoC,GAAsB,sBAgD7BC,G,4MAEG1muB,MAAQ,CACb+qjB,OAAQ,EACR/uU,WAAW,G,wDAGb,WACE,MAGIhjR,KAAKgnC,MAFP+qjB,EADF,EACEA,OACA/uU,EAFF,EAEEA,UAGa,IAAX+uU,GAAgB/uU,GAClBhjR,KAAK4iH,SAAS,CAACogK,WAAW,M,oBAO9B,WAAiB,IAAD,OACd,EAYIhjR,KAAKkqC,MAXPne,EADF,EACEA,EACA4e,EAFF,EAEEA,SACA03R,EAHF,EAGEA,aACA13P,EAJF,EAIEA,MACAgjsB,EALF,EAKEA,iBACAz0rB,EANF,EAMEA,QACAygT,EAPF,EAOEA,4BACAhK,EARF,EAQEA,SACAi+Y,EATF,EASEA,UACA/gtB,EAVF,EAUEA,cACA9F,EAXF,EAWEA,MAGF,EAGI/mD,KAAKgnC,MAFP+qjB,EADF,EACEA,OACA/uU,EAFF,EAEEA,UAGI6qf,EAASl+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,MAAO,MACxEr+Y,EAAsBI,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,oBAAqB,MAAO,MAC1GE,EAA0Bn+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,oBAAqB,iBAAkB,MACzHG,EAAkBp+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,oBAAqB,SAAU,MACzGI,EAAqBr+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,oBAAqB,gBAAiB,MACnHK,EAAiBt+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,yBAA0B,MACnGM,EAAmBv+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,iBAAkB,MAAO,MACpGO,EAAuBx+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,iBAAkB,iBAAkB,MACnHQ,EAAez+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,iBAAkB,SAAU,MACnGS,EAAkB1+Y,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,iBAAkB,gBAAiB,MAC7G5wW,EAAcrtC,EAAS/uW,MAAM,CAAC+4W,EAA6Bi0Y,EAAW,sBAAuB,MAE7Fv0Y,EAAUtyU,IAAU/oB,gBAkD1B,OACE,+BACE,eAAC6vW,GAAA,EAAD,CACEv+Q,SAAQ,UAAKm+oB,IAAL,OAA2BG,GACnC/zpB,WAAW,EACXv9B,SAAU,KACV+xW,SAAU,WAAO1jX,IAAS,EAAKi4C,SAAS,CAACmve,OAAQ,EAAG/uU,WAAW,KAJjE,SAME,gBAACnxJ,GAAA,EAAD,CAAOz4C,UAAWF,EAAQ3hE,KAA1B,UACE,eAAC6ga,GAAA,EAAD,CAAah/V,UAAWF,EAAQk/V,YAAhC,SACE,eAAC5+T,EAAA,EAAD,CAAYpgC,UAAWF,EAAQg1W,sBAA/B,SACania,EAAVstW,EAAY,wDAA6D,0DAG9E,eAACpjE,GAAA,EAAD,CAAe78O,UAAWF,EAAQ+8O,cAAlC,SACI,gBAACz8M,EAAA,EAAD,WACGztF,EAAE,oCADL,IAC2CgivB,EAD3C,MAC+DD,EAD/D,IACyF/hvB,EAAE,kCAD3F,IAC+HqivB,EAD/H,MACgJD,OAGpJ,uBACE7xc,SAAU+F,GApEG,SAACl3T,GACtB,GAAI4mlB,EAAQ,CACV47K,EAAiBE,EAAQ97K,EAAQ5mlB,EAAOpH,IAAI,SAAUoH,EAAOpH,IAAI,YACjE4mC,EAAS,IAAI0J,IAA6B,CAACs2D,MAAM,EAAO1pE,GAAG,GAAD,OAAKwsuB,IAAL,OAA2BG,MAErFnnqB,KAAmB9rE,kBAAgB2zuB,aACjCzhtB,EAAc,CACZ0htB,aAAc,mCACdtgW,QAAS9ia,EAAOpH,IAAI,WACpBgulB,SACAy8K,aAAcR,EACdS,iBAAkBV,EAClBW,kBAAmBZ,EACnBa,cAAeh1Y,EACf00Y,kBACAO,qBAAsBR,EACtBD,uBACAD,sBAGF,IAAMtwc,EAAa,CACjBxxQ,MAAOjhD,EAAOpH,IAAI,SAClBgulB,SACA87K,SACAt+Y,sBACAu+Y,0BACAC,kBACAC,qBACAC,iBACAC,mBACAC,uBACAC,eACAC,kBACArxW,eAEI3hC,EAAe,CACnB9qL,UAAW31K,YAAUi0uB,uBACrB9itB,YAAac,IACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,uBAGJ,EAAKz4Q,SAAS,CAACogK,WAAW,OAuBtB,SAGE,gBAACnqM,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,UAIE,gBAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,UACE,eAAC4/B,EAAA,EAAD,UAAaztF,EAAE,4CACf,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,UACE,eAAC,GAAD,CACElrE,KAAK,SACL9S,MAAOq2lB,EACPv2e,SAAU,SAAC2rB,EAAO2noB,GAAR,OAAoB,EAAKlspB,SAAS,CAACmve,OAAQ+8K,OAEvD,eAAC/mY,GAAA,EAAD,CAAgB9mW,GAAG,cAAc9yB,OAAO,EAAxC,SAA+C60Q,GAAaj3P,EAAE,2BAGlE,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAChgC,MAAO,QAAjC,SACE,eAAC,SAAD,CACE9sE,KAAK,UACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVwkP,WAAW,EACXrhP,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQ+0W,iBAIrBr0U,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,4CAKf,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAChgC,MAAO,QAAjC,SACE,eAAC,SAAD,CACE9sE,KAAK,QACL8qE,UAAWwgC,KACX5vE,MAAO,CACL9uC,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,qBAEXiuF,SAAU,CACRgpF,KACAqB,UAIN,gBAACxrH,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,WAA/C,UACE,eAACjB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WACPl6E,EAAS,IAAI0J,IAA6B,CACxCs2D,MAAM,EACN1pE,GAAG,GAAD,OAAKwsuB,IAAL,OAA2BG,OALnC,SASG7hvB,EAAE,0BAGP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC+pC,EAAA,EAAD,CACE1e,MAAM,UACN/lG,KAAK,SAFP,SAIG6rB,EAAE,6C,GArMY0Y,aAoPtBwwC,qBACbgG,aAnSa,SAACC,GAAD,MAAmB,CAChC3jE,KAAM,CACJwjH,WAAY,QACZj/C,QAA2B,EAAlBZ,EAAMZ,WAEjB2zW,cAAe,CACbr6T,UAA6B,GAAlB14C,EAAMZ,UAAiB,KAClCw8L,UAA6B,GAAlB57L,EAAMZ,UAAiB,MAEpC89V,YAAa,CACXt8V,QAAQ,OAAD,OAA2B,EAAlBZ,EAAMZ,UAAf,SAET27O,cAAe,CACbn6O,QAAS,EACTo2C,cAAiC,EAAlBh3C,EAAMZ,UAAgB,MAEvC4zW,sBAAuB,CACrBjoV,MAAO,SAETknB,OAAQ,CACN3xC,SAAU,MACVM,QAA2B,EAAlBZ,EAAMZ,UAAgB,KAC/B6sC,SAAsC,EAA5BjsC,EAAM82C,WAAW7K,SAAe,SA6QzB,CAAE6H,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,mBAtC0B,WAC1B,IAAMsvU,EAAkBjtY,eAClB6ttB,EAAoC3/Y,eACpC4/Y,EAAiBv/Y,eACjBk/S,EAAc7nnB,cAWpB,OATwB,SAAC9f,GAAD,MAAY,CAClCs3E,cAAel1F,iBAAO,CACpBgjC,MAAO+hY,EAAgBnnZ,KAEzB2yV,4BAA6Bo1Y,EAAkC/nuB,GAC/D2oV,SAAUq/Y,EAAehouB,GACzB+f,MAAO4nnB,EAAY3noB,QAMI,SAAC2D,GAC1B,MAAO,CACLA,WACAgjuB,iBAAkB,SAACE,EAAgB97K,EAAgB3liB,EAAe/a,GAChE1G,EAAS,IAAIu5L,IAAuB,CAClC2piB,SACAp3rB,KAAM,CACJrqB,QACA2liB,SACA1gjB,mBAYRk2R,qBAAU,CACR9pN,KAAMgwpB,GACNjmc,kBAAkB,EAClBC,oBAAqB,IARVxyP,CAUby4rB,I,8KCvSItjc,GAAU,GAkBV56M,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C3jE,KAAM,CACJ+jE,MAAO,QAET2zrB,kBAAmB,CACjB1zrB,OAAQL,EAAMZ,QAAQ,IAAK,IAE7B40rB,sBAAuB,CACrB3zrB,OAAQL,EAAMZ,QAAQ,IAAK,IAE7BirC,YAAa,CACXzpC,QAAS,GAEX41I,UAAW,CACTp2I,MAAO,eACPQ,QAASZ,EAAMZ,WAEjB60rB,cAAe,CACbrzrB,QAASZ,EAAMZ,QAAQ,KACvB+4C,aAAcn4C,EAAMZ,QAAQ,IAE9BggT,UAAW,CACTj1Q,OAAQ,WAEVm1Q,aAAc,CACZ/jQ,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhBy5oB,YAAa,CACX9zrB,MAAO,sBAET0yC,IAAK,CACH1yC,MAAO8uP,GACP74M,OAAQ64M,IAEV/xC,OAAQ,CACNh8J,UAAW,eACXnU,WAAY,OACZsM,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,YAAa,CAChDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,YAGzC05V,WAAY,CACV5mf,UAAW,kBAEb29P,SAAU,CACR/zR,MAAO,uBAETgvD,KAAM,CACJ35E,MAAO,QACPE,SAAU,QACVgmD,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQsqP,SACxC/tP,YAAatmC,EAAMZ,QAAQ,MAE7B+0rB,cAAe,CACb/zrB,MAAO,QAETg0rB,WAAW,aACThzpB,UAAWphC,EAAMZ,QAAQ,OACxBY,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9Bvxe,WAAYhtC,EAAMZ,QAAQ,GAC1BgiC,UAAWphC,EAAMZ,QAAQ,KAG7BqgD,WAAY,CACVzS,WAAYhtC,EAAMZ,QAAQ,QAonBfi1rB,GAhnBqC,SAAC,GAI9C,IAHLv0tB,EAGI,EAHJA,KACA7+C,EAEI,EAFJA,MACAwwD,EACI,EADJA,YAEM6jR,EAAa9+R,sBAAY8pF,aAA+BknQ,OACxDhN,EAAkBhkV,sBAAY6rK,aAAsB,cACpDt1G,EAAS8zK,eACTr2N,EAAShU,sBAAY8T,eACrByE,EAASvY,sBAAYsY,gBACrBkmY,EAAiBx+Y,sBAAYu0V,gBAC7ByzB,EAAahoX,sBAAY+U,gBACzBpD,EAAO3R,sBAAYyR,eACnB+1B,EAAUs2C,KACVt0C,EAAQwjD,cACR7xE,EAAgBkgK,eACdhhM,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBAEjB,EAAgC7L,YAAe,GAA/C,mBAAOusF,EAAP,KAAiB62M,EAAjB,KACA,EAAsCpjS,WAAuB,MAA7D,mBAAO+quB,EAAP,KAAoBC,EAApB,KACA,GAA8ChruB,WAAuB,MAArE,qBAAOiruB,GAAP,MAAwBC,GAAxB,MACA,GAAgDlruB,WAAe,MAA/D,qBAAOmruB,GAAP,MAAyBC,GAAzB,MACA,GAAgCpruB,YAAe,GAA/C,qBAAOkxE,GAAP,MAAiBm6pB,GAAjB,MACA,GAA8CrruB,WAA0B,MAAxE,qBAAOsruB,GAAP,MAAwBC,GAAxB,MACA,GAAkDvruB,WAAiD,MAAnG,qBAAOwruB,GAAP,MAA0BC,GAA1B,MAEMC,GAAmB9stB,IAAS5pB,WAASgnE,KACrC2vqB,GAAkB/ywB,QAAO,OAAC4ywB,SAAD,IAACA,QAAD,EAACA,GAAmB1tvB,WAEnDkiB,aAAgB,WACdq8N,OACC,IAEH,IAwCwBjpI,GAMlBw4oB,GAAc,uCAAG,WAAOp3oB,GAAP,SAAAtzH,EAAA,sDACrBmqwB,IAAY,GAEZ,IAAI7wtB,SAAQ,SAACC,EAASi3B,GAAV,OACVxrC,EAAS,IAAIq4L,IAAwB,CACnC/pG,UAAWt3H,OAAOs3H,GAClBquM,UAAW,SAAC5vM,GACVx4E,EAAQw4E,IAEVihR,SAAU,WACRxiU,WAGHI,MAAK,SAACwyC,GACLinpB,GAAmBjnpB,GACnBunpB,GAAat1tB,EAAKp6B,MAAM,CAAC,iBAAkB,aAA/B,OAA6CmoG,QAA7C,IAA6CA,OAA7C,EAA6CA,EAAUhlH,IAAI,kBACxEwlY,SAAQ,WACTumY,IAAY,MAjBO,2CAAH,sDAqBdS,GAAa,uCAAG,sBAAA5qwB,EAAA,sDACpBmqwB,IAAY,GAEZ,IAAI7wtB,SAAQ,SAACC,EAASi3B,GAAV,OACVxrC,EAAS,IAAIw+C,MAAuB,CAClCqnrB,YAAax5oB,GACbswM,UAAW,SAAC7nM,GACVvgF,EAAQugF,IAEVk5Q,SAAU,WACRxiU,WAGHI,MAAK,SAACwyC,GAAyB,IAAD,EAC/BinpB,GAAmBjnpB,GACnBunpB,GAAat1tB,EAAKp6B,MAAM,CAAC,iBAAkB,aAA/B,OAA6CmoG,QAA7C,IAA6CA,GAA7C,UAA6CA,EAAUhlH,IAAI,qBAA3D,aAA6C,EAA6BwH,QAAO,SAACmmN,GAAD,OAAeA,EAAU3tN,IAAI,iBAAmB2tN,EAAU3tN,IAAI,mBAC1JwlY,SAAQ,WACTumY,IAAY,MAjBM,2CAAH,qDAqBbQ,GAAe,SAACzvuB,EAAY2wL,GAC5BkkK,GACDztR,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,oBACV5zD,OAAQ,CACN9R,aACA5T,OAAQ,wBAEDspD,MAAK,SAAAurE,GAAQ,IAAD,IACfw+f,EAAYl3nB,iBAAM,OAAC04H,QAAD,IAACA,GAAD,UAACA,EAAK56G,eAAN,iBAAC,EAAc8vF,eAAf,aAAC,EAAuBw6F,YAC1Ci/iB,EAAwDj/iB,GAAc8ub,IAAcA,EAAU/9nB,UAChG+9nB,EAAUt3oB,KAAI,SAACu1Q,GAAD,OAAc/sD,GAAcA,EAAWztN,IAAIw6Q,MAAWhzQ,QAAO,SAACmsH,GAAD,OAA0B,MAAZA,KADhC,OAEzD85F,QAFyD,IAEzDA,OAFyD,EAEzDA,EAAY5oN,WAAWwY,eAE3B8uvB,GAAqBO,MACpB9pkB,OAAM,SAACv1J,GAERppB,QAAQC,KAAK,sCAAuCmpB,GACpD8+tB,GAAoB,OAAC1+iB,QAAD,IAACA,OAAD,EAACA,EAAY5oN,WAAWwY,oBAU5C0/O,GAAe,WACnB,IAAIivgB,GAAJ,CAIA,IAAM92oB,EAAYjC,GAAQjzH,IAAI,MACxB8zH,EAAWb,GAAQjzH,IAAI,YAEF,YAAvBu0N,GACF+3iB,GAAep3oB,GACiB,WAAvBq/F,GACTi4iB,KACS14oB,EAAS97H,MAClBs0wB,GAAex4oB,EAASj3G,MAAM,CAAC,EAAG,QAGpCivvB,GAAoB,QAGhB74oB,GAAUh8E,EAAKj3C,IAAI,kBACnB4ipB,GAAgB3vhB,GAAQjzH,IAAI,UAC5Bu0N,GAAqBt9K,EAAKj3C,IAAI,sBAC9B2swB,GAAuC,YAAvBp4iB,GAEhBohK,GAAkB,OAAGh0U,QAAH,IAAGA,OAAH,EAAGA,EAAQ9kC,MAAM,CAAC,SAAU,uBAC9C21W,GAA2B7wU,EAAO9kC,MAAM,CAAC,SAAU,eAAgB,YAEnEu8L,GAAO,CACXl8K,GAAI+1F,GAAQjzH,IAAI,MAChBkyH,MAAOe,GAAQp2G,MAAM,CAAC,OAAQ,SAAU,OAAQ,WAChDg+S,SAzH0C,SAAC+jV,GAC3C,IAAMC,EAAkB,OAAX34lB,EACPk6X,EAAW+L,EAAetva,MAAM,CAAC,UAAW,SAAWue,iBAAekB,OAEtEwinB,EAAa1+N,EACfw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAAS,2BAA6B+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,2BAA6B+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,0BAC/K+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,2BAA6B+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,0BAC7G,OAAOgioB,EACHC,EACA1+N,EACEw+N,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAAS,2BAA6B+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,0BAC5G+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,QAAS,2BAA6B+hoB,EAAQ/hoB,MAAM,CAAC,OAAQ,QAAS,KAAM,0BA8GxG+vvB,CAAoC35oB,KAG1CpI,GAA6B,YAAvB0pG,GAAmC0hD,KAAgB02f,GAAgBj4f,KAAgBwB,KACzFlzN,GAAQrB,EAAO9kC,MAAM,CAAC,gBAAiB,WAcvC85W,GAbyB,CAC7B1+V,eACAe,gBACAH,yBACAY,4BACAL,mBACAW,iBACAC,cACAE,oBACAC,cACAG,kBACAQ,mBAEgDt1B,SAASw9C,IAErD2qE,GAAchsE,EAAO3hD,IAAI,eACzB62X,GAAsB,OAAGlpQ,SAAH,IAAGA,QAAH,EAAGA,GAAa3tH,IAAI,0BAC1C82X,GAAkB,OAAGnpQ,SAAH,IAAGA,QAAH,EAAGA,GAAa3tH,IAAI,sBAEtC6swB,GAAazzjB,GAAKlnF,MACpB,eAAC,IAAD,CACEzP,IAAK22F,GAAKlnF,MAAL,kBAAwBm0M,GAAxB,YAAmCA,IACxC9uP,MAAK,UAAK8uP,GAAL,MACLvjN,YAAa,OACbC,aAAa,IAEf,eAACjuC,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ80C,IAJrB,SAME,eAACY,GAAD,CACEtzC,MAAOzsE,OAAOu7T,MACd74M,OAAQ1iH,OAAOu7T,MACfnkO,MAAO,CACL+e,gBAAiB41Q,KAA2BF,GAAqBx/S,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,MACtH8I,YAAa4sQ,KAAuBH,GAAqBx/S,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,WAKlH0rpB,GAAkB,OAAGZ,SAAH,IAAGA,QAAH,EAAGA,GAAmBjnwB,KAAI,SAAC0oN,EAAiC1uN,GAClF,OAAO,gBAAC61E,EAAA,EAAD,CACLe,MAAM,EAENR,UAAWF,EAAQw4I,UACnBl4I,WAAW,EACXc,QAAS,EACTZ,UAAU,SANL,UAQL,eAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,gBAAC4/B,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,UAFR,UAIGyrH,EAAU3tN,IAAI,QAJjB,SAOF,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAE2B,WAAvB4+G,GACI5G,EAAU9wM,MAAM,CAAC,SAAU,EAAG,gBAC9B8wM,EAAU3tN,IAAI,qBArBnB,UAEG2tN,EAAU3tN,IAAI,QAFjB,YAE4Bf,OA0B/Bi3Z,GAAYj/W,EAAKj3C,IAAI,SAASiF,KAAI,SAAC9I,EAAsBoE,GAAvB,OACtC,gBAACu0E,EAAA,EAAD,WACIqhV,GAAWh6Z,EAAK6D,IAAI,SAEC,SAArB7D,EAAK6D,IAAI,SAAsB7D,EAAK6D,IAAI,iBAAmB21Z,GACzD,eAACzvS,EAAA,EAAD,CAASC,MAAK,UAAKv9D,EAAL,YAAoBg5C,IAAQ55E,EAAE,0CAA5C,SACE,eAAC,KAAD,CAAUk6E,MAAM,eALb3hG,MAYP09W,GAAkBhrP,GAAQjzH,IAAI,YAC9Bg3X,IArMkBljQ,GAqMcmqP,GApMpCnqP,GACIA,GAASlsH,QAAO,SAACutI,EAAKxhB,GAAN,OAAmBwhB,EAAI9sI,KAAKsrH,EAAS3zH,IAAI,oBAAmBkU,kBAC5EA,kBAkMiDwJ,KAAK,MACtDqvvB,GAAkBJ,GACpB,eAACzmpB,EAAA,EAAD,CAASC,MAAO6wQ,GAAgB3hT,UAAWF,EAAQshT,aAAnD,SACE,eAAChhR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,mBACOl6E,EAAE,2BADT,aACwCgvW,QAG1C,KAEEg2Y,GAAiB5zjB,GAAKyhH,SACtBkxX,GAAiBihF,IAAkBA,GAAehtwB,IAAI,UACtDitwB,GAAeD,IAAkBA,GAAehtwB,IAAI,QAAW,KAE/DktwB,GAAwBzB,IAAgBrzwB,EAExC+0wB,GACFnlvB,EADgBklvB,GACd,wBAF0BvB,KAAoBvzwB,EAGpB,4BAAiC,uBAEjE,OACE,eAAC6qH,EAAA,EAAD,CACE5tC,UAAWF,EAAQi2rB,cACnBj2rB,QAAS,CACP3hE,KAAM2hE,EAAQqsC,aAHlB,SAOE,gBAAC1sC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAME,gBAAC3B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACL8gC,MAAO,CAAE2B,SAAU,YANrB,UAQE,gBAACpkC,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EACTrB,WAAW,SACXa,QAAQ,gBAJV,UAME,gBAACjB,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EACJU,GAAI,GACJpB,WAAW,EACXE,UAAU,MACVc,KAAK,SACLvB,WAAW,SACXqB,QAAS,EARX,UAWE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEI8/S,GACE,eAAC,IAAD,CACElzQ,IAAKkzQ,GACLp+S,MAAM,OACNurC,YAAa,OACbC,aAAa,EACb2kP,gBAAiB,CAAChkP,aAAc,MAAOikP,eAAgB,WAEzDkla,KAKN,gBAAC/3rB,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNF,UAAU,SACVT,WAAW,aACXa,QAAQ,SACRQ,QAAS,EANX,UAQE,gBAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQk2rB,YAAa51rB,WAAW,EAAMP,WAAW,SAA9E,UACE,eAACq0C,EAAA,EAAD,CACEl0C,UAAY+2rB,IAAoBC,GAAmB,KAAOl3rB,EAAQohT,UAClEvrD,UAAU,OACV9oO,MAAM,UACN4e,QAAS,SAACz8G,GACRA,EAAEg5H,iBACGgvoB,IACHvoc,GAAa72M,GAEf8vI,KAEAr6J,KAAmB9rE,kBAAgBw2uB,2BAA4BtktB,EAAc,CAACssE,MAAOnC,GAAQjzH,IAAI,SAAU68B,aAAco2F,GAAQjzH,IAAI,gBAAiBk1H,UAAWjC,GAAQjzH,IAAI,MAAOm1H,cAAelC,GAAQjzH,IAAI,oBAC/M4mC,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyhW,KACJ/3R,MAAM,KAGR,IACEymqB,EACE5gc,EADF4gc,sBAE2B,MAAzBA,GACFA,EAAsBp2tB,GAGxB,IAAM4iR,EAAa,CACjBswc,iBAAkBl3oB,GAAQjzH,IAAI,MAC9Bm1H,cAAelC,GAAQjzH,IAAI,iBAC3Bo1H,MAAOnC,GAAQjzH,IAAI,SACnB68B,aAAco2F,GAAQjzH,IAAI,gBAC1Bu0N,uBAEI+iK,EAAe,CACnB9qL,UAAW31K,YAAUy2uB,6BACrBtltB,YAAac,IACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,mBArCN,SAyCE,eAACpxQ,EAAA,EAAD,CAASC,MAAO8M,GAAQjzH,IAAI,iBAA5B,SACE,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQshT,aAA/D,SACGxjQ,GAAQjzH,IAAI,uBAKD,eAAhBwyX,IACE,eAACtsQ,EAAA,EAAD,CAASE,UAAU,MAAMD,MAAOgnpB,GAAhC,SACE,eAACx2oB,EAAA,EAAD,CAAY3+H,KAAK,QAAQq9E,UAAWF,EAAQyhD,WAAY9V,QAAS,WAG/Dq7hB,aAAgBlphB,GAAQjzH,IAAI,kBAAkBwyE,MAAK,SAAC4pkB,GAClDsvH,EAAetvH,EAAShkpB,EAAQ,MAChCwzwB,GAAmBxvH,EAAS,KAAOhkpB,OALvC,SASI80wB,GACE,eAAC,KAAD,CAA+BhrqB,MAAM,UAAUkhB,SAAS,UACxD,eAAC,KAAD,CAAclhB,MAAM,UAAUkhB,SAAS,iBAOrD,gBAACtuC,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk2rB,YACnBx0rB,GAAI,GAHN,UAKE,eAACqvC,EAAA,EAAD,CAASC,MAAO8M,GAAQjzH,IAAI,SAA5B,SACE,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQshT,aAA/D,SACGxjQ,GAAQjzH,IAAI,aAGjB,eAACkmH,EAAA,EAAD,CAASC,MAAO8M,GAAQjzH,IAAI,gBAAiBq1E,UAAWF,EAAQshT,aAAhE,SACE,eAAChhR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACG+wB,GAAQjzH,IAAI,oBAGjB,eAACkmH,EAAA,EAAD,CAASC,MAAO8M,GAAQjzH,IAAI,iBAAkBq1E,UAAWF,EAAQshT,aAAjE,SACE,eAAChhR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACG+wB,GAAQjzH,IAAI,8BAQvB,gBAAC80E,EAAA,EAAD,CACEe,MAAM,EACNM,GAAI,EACJU,GAAI,GACJpB,WAAW,EACXE,UAAU,SACVc,KAAK,SACLV,QAAQ,SACRQ,QAAS,EACTlB,UAAWF,EAAQo2rB,WATrB,UAWqB,WAAlB3oH,IACC,eAAC9tkB,EAAA,EAAD,CAAMyiC,MAAO,CAAC+X,aAAc,IAA5B,SACE,eAAC0yM,EAAA,EAAD,CACEzqN,MAAO,CAAEmM,aAAc,MAAOzC,gBAAiBpkG,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAC1FnkF,MAAO/U,EAAE,UAAD,OAAW46nB,KACnB5qpB,KAAK,YAIT+0wB,GACF,gBAACj4rB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,MAAMY,QAAS,EAAGrB,WAAW,SAA1E,UACE,gBAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQ8gT,SAAUz1Q,QAAQ,EAAjE,UACGx4F,EAAE,6BADL,OAGEkuY,GAAUjxZ,KAAI,SAACwwZ,EAAUl1Z,GAAX,OAAmB,eAACu0E,EAAA,EAAD,CAAgBe,MAAM,EAAtB,SAA6B4/U,GAAlBl1Z,eAMnD64M,GAAKyhH,UACJ,eAACj6M,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACR0T,KAAM0ikB,GA/bQ,SAAClxX,GACzB,IAAMmkV,EAAuBnkV,EAC7B,IAAKmkV,EACH,OAAO,KAET,IACE,OAAOrtR,GAAkBztR,EAAOJ,QAAQk7iB,EAAsB,CAAEz8iB,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAAEiwgB,UAAU,KAC/L,MAAOt+kB,GAKP,OAJA4f,QAAQ08E,MAAM,iDAAmD,CAC/Dt8F,IACA6/F,WAEK,MAmbwBqpqB,CAAkBxhF,IAAkBkhF,GAC3DhkvB,OAAQ,SACR63F,QAjbY,SAACsiB,GACvB1gC,KAAmB9rE,kBAAgB+4nB,qBAAsB7mmB,EAAc,CACrEmoQ,SAAU,wBACV97L,cAAel+E,EAAKj3C,IAAI,iBACxBqzH,SAAUp8E,EAAKj3C,IAAI,gBACnB8gX,oBAAqB7pU,EAAKj3C,IAAI,SAC9B6vpB,kBAAkB,MA4aVt4iB,MAAO,CAAEmb,WAAY,SAAUj7C,SAAU,QAN3C,SAQGzvD,EAAE,6BAGP,eAACk+F,EAAA,EAAD,CAASC,MAAOn+F,EAAE,2BAAlB,SACE,eAAC,KAAD,CACE84F,QAAS,WACPl6E,EAAS,IAAI0J,IAA6B,CAAEs2D,MAAM,EAAM1pE,GAAG,GAAD,OAAKwsuB,IAAL,OAA2BtxwB,MACrFsqG,KAAmB9rE,kBAAgB2zuB,aAAczhtB,MAEnDo5C,MAAM,SACNqV,MAAO,CACL2B,SAAU,WACVziG,MAAO,GACP+5G,OAAQ,EACRlP,OAAQ,eAId,eAAC,GAAD,CAAwBuopB,UAAWzxwB,IAGnC,eAAC08E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNR,UAAWF,EAAQm2rB,cAJrB,UAOKe,IACC,eAAC11oB,EAAA,EAAD,CACEthD,UAAW2B,mBAAK7B,EAAQm/M,OAAT,eACZn/M,EAAQ+piB,WAAajyf,IAExBnM,QAAS,WACP,IAAiB,IAAbmM,EAAoB,CACtB8vI,KACA,IAAM88D,EAAa,CACjBswc,iBAAkBl3oB,GAAQjzH,IAAI,MAC9Bm1H,cAAelC,GAAQjzH,IAAI,iBAC3Bo1H,MAAOnC,GAAQjzH,IAAI,SACnB68B,aAAco2F,GAAQjzH,IAAI,gBAC1Bu0N,uBAEI+iK,EAAe,CACnB9qL,UAAW31K,YAAU22uB,6BACrBxltB,YAAac,IACb+wQ,cAEFjzR,EAAS,IAAIsiL,KAA4B,CACvCouK,kBAGJxzD,GAAa72M,IAEf,gBAAeA,EACf,aAAYjlG,EAAE,2BA1BhB,SA4BE,eAAC,KAAD,WAOV,gBAACy5S,EAAA,EAAD,CAAUx9L,GAAIhX,EAAUvsB,QAAQ,OAAOwjC,eAAe,EAAtD,UACE,eAACtR,EAAA,EAAD,CAASv9C,UAAWF,EAAQg2rB,wBAC5B,eAAChopB,EAAA,EAAD,UACE,gBAACruC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SAHP,UAMIk2rB,IAAiB1uZ,GAAgBjmX,KAC7B,eAACi2T,EAAA,EAAD,CACEukE,YAAY,WACZ78Q,QAAQ,aACRh+G,MAAOk0wB,IAAoB5tZ,GAAgBphW,MAAM,CAAC,EAAG,OACrD46F,SAlaI,SAAC2rB,EAA8BqqoB,GACrD3B,GAAoB2B,GACpBnB,GAAemB,IAiaG,aAAYzlvB,EAAE,qCACdmmS,UAAU,UACV94O,UAAWF,EAAQ+7E,KAPrB,SAUI+sN,GAAgBh5W,KAAI,SAACyowB,EAAgBC,GAAjB,OAClB,eAACv/c,EAAA,EAAD,aAEErxR,MAAO2wuB,EAAe1twB,IAAI,iBAC1BrI,MAAO+1wB,EAAe1twB,IAAI,OAppBpC,SAAC5H,GAAD,MAAoB,CACpC8kC,GAAG,gBAAD,OAAkB9kC,GACpB,gBAAgB,qBAAhB,OAAsCA,IAmpBR29d,CAAU43S,IAHTA,QAQf,KAGH/7pB,GAAW,eAAC,IAAD,CAAevO,SAAS,EAAxB,SAA+Br7E,EAAE,4BAC3C,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SAFZ,SAKIg3rB,KAAkB1uZ,GAAgBjmX,KAC9B,KACA,qCACE,gBAAC88E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SAHP,UAKE,eAACg/B,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,UAA/B,SACGl6E,EAAE,6BAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,aAHV,SAOI+2rB,wBAvTrB10wB,ICpZE+9Z,GAAa,SAACh6Z,EAAcnE,GACvC,OAAQmE,GACN,KAAKi6B,mBAAiB0yM,YACpB,OAAO,eAAC5iH,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,gDAA1B,SAA2E,eAAC,IAAD,CAAauvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,aACzJ,KAAK9rE,mBAAiBoiW,SACpB,OAAO,eAACtyQ,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,6CAA1B,SAAwE,eAAC,IAAD,CAAWuvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,SAASkhB,SAAS,YACtK,KAAKhtF,mBAAiBz+B,MACpB,OAAO,eAACuuH,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,0CAA1B,SAAqE,eAAC,IAAD,CAAiBuvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,aACvJ,KAAK9rE,mBAAiB4nR,OACpB,OAAO,eAAC93L,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,2CAA1B,SAAsE,eAAC,IAAD,CAAWuvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,aAClJ,KAAK9rE,mBAAiBwiW,aACpB,OAAO,eAAC1yQ,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,iDAA1B,SAA4E,eAAC,IAAD,CAAauvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,aAC1J,KAAK9rE,mBAAiB0iW,WACpB,OAAO,eAAC5yQ,EAAA,EAAD,CAASC,MAAOvkB,IAAQ55E,EAAE,+CAA1B,SAA0E,eAAC,IAAD,CAAgBuvF,MAAOv/G,EAAO,CAAEu/E,MAAOv/E,EAAMw1H,OAAQx1H,GAAS,GAAIkqG,MAAM,eAezJk0R,G,4MACGnzV,MAAQ,CACb4kO,KAAM,EACN6tL,YAAa,I,EAGR7C,iBAAmB,SAACzvT,EAAwDykI,GACjF,EAAKhpJ,SAAS,CAAEgpJ,U,EAGXirL,wBAA0B,SAAC1vT,GAChC,EAAKvkB,SAAS,CACZgpJ,KAAM,EACN6tL,YAAa79Y,SAASurF,EAAMn6G,OAAOtxB,MAAO,O,4CAI9C,WACE,MAMIsE,KAAKkqC,MALPgvC,EADF,EACEA,QACAsgT,EAFF,EAEEA,SACAztW,EAHF,EAGEA,EACA25B,EAJF,EAIEA,OACAiH,EALF,EAKEA,YAEF,EAGI3sD,KAAKgnC,MAFP4kO,EADF,EACEA,KACA6tL,EAFF,EAEEA,YAGIljE,EAA2B7wU,EAAO9kC,MAAM,CAAC,SAAU,eAAgB,YAEnE+wvB,EAAgC,eAAhBp7Y,EAClBiD,EACAA,GAAYA,EAAS1pX,MAAM87P,EAAO6tL,GAAe7tL,EAAO,GAAK6tL,GAE3Dm4U,EAAYD,GAAiBA,EAAc3owB,KAAI,SAACgyC,EAAsB7+C,GAC1E,OACE,eAAC,GAAD,CAEE6+C,KAAMA,EACN7+C,MAAOA,EACPwwD,YAAaA,GAHRxwD,MAMRyM,WAAWhG,UAEd,OACE,gBAACi2E,EAAA,EAAD,CAAMO,UAAWF,EAAQ3hE,KAAzB,UACGq6vB,EAEiB,eAAhBr7Y,GACE,eAAC4iE,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpBq9kB,mBAAoB,YAA0B,IAAvBp6lB,EAAsB,EAAtBA,KAAMC,EAAgB,EAAhBA,GAAImG,EAAY,EAAZA,MAC/B,OAAO2W,EAAE,yBAA0B,CAAC/c,OAAMC,KAAImG,QAAOmoC,aAAa,GAAD,OAAKvuC,EAAL,YAAaC,EAAb,eAAsBmG,MAEzFkkb,aAAct5b,KAAK42b,iBACnB2C,mBAAoB,CAAC,GAAI,GAAI,IAC7BC,oBAAqBx5b,KAAK62b,wBAC1Bzhb,MAAQokX,GAAYA,EAASz9X,MAAS,EACtC09b,YAAaA,EACb7tL,KAAMA,EACN8tL,iBAAkBC,IAClBzgX,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,4B,GAnELp1Z,aA2FbwwC,sBACbgG,aAfa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAO,WAaU,CAAE0zC,WAAW,IAChC7vE,YAAgB,gBAChB0/D,mBAXsB,SAACu7Q,GACvB,OAAO,eACFtnV,YAAyB,CAC1B4S,OAAQF,eADP1S,CAEAsnV,MAOoB,MAHZnlT,CAIbklT,K,6BCjLa,SAAS2uG,IACtB,GAAuB,qBAAZzwZ,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUuwZ,KAAM,OAAO,EACnC,GAAqB,oBAAVpwR,MAAsB,OAAO,EAExC,IAEE,OADAp7M,QAAQc,UAAUsH,QAAQzE,KAAKq3E,QAAQC,UAAUj7E,QAAS,IAAI,iBACvD,EACP,MAAO+K,GACP,OAAO,GATX,mC,qFCmBIotlB,GAAmB,EAiBVF,EAAuB,WAWlC,OARIE,EAAkB,IAflB,IAAOxvjB,UAAY,IAAOA,SAAS8iE,kBACrC0sf,EAAsD,WAApC,IAAOxvjB,SAAS8iE,iBAAiC,IAAO9iE,SAAS8rjB,aAAmBh1lB,IAAJ,GAMpG,aAAS,YAAmB,IAAhBohb,EAAgB,EAAhBA,UACVs3K,EAAkBt3K,KACjB,IAcI,CACDs3K,sBACF,OAAOA,M,6BC5CEo5J,IALC,WAAyB,IAAxBxisB,EAAuB,uDAAP,GACzBgsL,EAAQ,4JACd,OAAOA,EAAMr9L,KAAKqR,K,6BCFpB,oEAAO,IAAMyltB,EAA8B,SAAC,GAIrC,IAHLrjpB,EAGI,EAHJA,4BACAsjpB,EAEI,EAFJA,cACA96iB,EACI,EADJA,WAEA,OAAO86iB,GAAkBtjpB,IAA+C,gBAAfwoG,GAA+C,qBAAfA,IAG9EyqC,EAA0B,SAAC,GAGjC,IAFLjzI,EAEI,EAFJA,4BACAgzI,EACI,EADJA,YAEA,IAAKhzI,IAAgCgzI,EACnC,OAAOA,EAGT,IAAMuwgB,EAA8B,IAAIlzwB,IAAI,CAAC,cAAe,qBAC5D,OAAO2iQ,EAAYj2P,QAAO,SAAA09R,GAAK,OAAK8oe,EAA4B9twB,IAAIglS,EAAMllS,IAAI,e,6BCjBhF,wFAkCIqzvB,EAAa3ytB,IAAM8E,YAAW,SAAoBW,EAAOzuC,GAC3D,IAAI07T,EAAYjtR,EAAMitR,UAClBmwV,EAAcp9mB,EAAM8xF,QACpBqvU,EAAcnha,EAAMmha,YACpBnyX,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBm0rB,EAAiBrjuB,EAAMqjuB,eACvBxkB,EAAe7+sB,EAAMgzE,SACrB0U,EAAO1nF,EAAM0nF,KACb3wF,EAAKiJ,EAAMjJ,GACX04E,EAAazvE,EAAMyvE,WACnB4nN,EAAWr3R,EAAMq3R,SACjB/yT,EAAO07B,EAAM17B,KACbk3H,EAASx7F,EAAMw7F,OACflqB,EAAWtxE,EAAMsxE,SACjBzS,EAAU7+D,EAAM6+D,QAChBmjd,EAAWhihB,EAAMgihB,SACjBlpX,EAAW94J,EAAM84J,SACjB1+D,EAAWp6F,EAAMo6F,SACjBpkI,EAAOgqC,EAAMhqC,KACbxE,EAAQwuC,EAAMxuC,MACdilB,EAAQu8B,YAAyBhT,EAAO,CAAC,YAAa,UAAW,cAAe,UAAW,YAAa,iBAAkB,WAAY,OAAQ,KAAM,aAAc,WAAY,OAAQ,SAAU,WAAY,UAAW,WAAY,WAAY,WAAY,OAAQ,UAEnQg+O,EAAiBC,YAAc,CACjCC,WAAYk/X,EACZ17hB,QAASvuH,QAAQkwwB,GACjB/+vB,KAAM,eAEJ65Q,EAAkBl1O,YAAe+0O,EAAgB,GACjDlsJ,EAAUqsJ,EAAgB,GAC1B2pf,EAAkB3pf,EAAgB,GAElC28I,EAAiBC,cA+BjB/nT,EAAW6roB,EAEX/jV,GACsB,qBAAb9nT,IACTA,EAAW8nT,EAAe9nT,UAI9B,IAAI+0pB,EAAuB,aAAT/xwB,GAAgC,UAATA,EACzC,OAAOukC,IAAMwB,cAAcy0F,IAAY5wF,YAAS,CAC9CwvC,UAAW,OACXF,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW4iD,GAAW9iD,EAAQ8iD,QAAS9e,GAAYhkC,EAAQgkC,UACzFA,SAAUA,EACVonB,SAAU,KACV5iF,UAAM5lD,EACNitG,QA5CgB,SAAqBo+B,GACjCp+B,GACFA,EAAQo+B,GAGN69R,GAAkBA,EAAej8T,SACnCi8T,EAAej8T,QAAQo+B,IAuCzBzB,OAnCe,SAAoByB,GAC/BzB,GACFA,EAAOyB,GAGL69R,GAAkBA,EAAet/R,QACnCs/R,EAAet/R,OAAOyB,IA8BxB1rI,IAAKA,GACJklB,GAAQ8jB,IAAMwB,cAAc,QAAS6D,YAAS,CAC/CqtR,UAAWA,EACXn7L,QAASsrhB,EACTimH,eAAgBA,EAChBn0rB,UAAWF,EAAQurC,MACnBvH,SAAUA,EACVj8E,GAAIgxuB,GAAehxuB,EACnBzyB,KAAMA,EACNgtG,SAnCsB,SAA2B2rB,GACjD,IAAI+qoB,EAAa/qoB,EAAMn6G,OAAOgvG,QAC9Bg2oB,EAAgBE,GAEZ12pB,GACFA,EAAS2rB,EAAO+qoB,IA+BlBhmN,SAAUA,EACVzwjB,IAAK8lU,EACLv+H,SAAUA,EACV1+D,SAAUA,EACVpkI,KAAMA,EACNxE,MAAOA,GACNi+G,IAAcqiB,EAAUqvU,EAAcz5U,MA8G5B32C,gBArOK,CAClB1jE,KAAM,CACJukE,QAAS,GAEXkgD,QAAS,GACT9e,SAAU,GACVuH,MAAO,CACLY,OAAQ,UACRpI,SAAU,WACViQ,QAAS,EACT5xC,MAAO,OACPi2C,OAAQ,OACR+C,IAAK,EACL/5G,KAAM,EACNghE,OAAQ,EACRO,QAAS,EACTklD,OAAQ,IAqNsB,CAChCxyH,KAAM,qBADOysE,CAEZm8qB,I,6BChPH,IAAIzwiB,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,IAAK,CACvI4iG,KAAM,QACL+9E,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACtCngC,EAAG,oBACD8gN,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCngC,EAAG,kBACHonH,QAAS,SACN05F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACxCngC,EAAG,gNACA,eAEL3K,EAAQywH,QAAUq4I,G,6BCtBlB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,2KACD,sBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,6KACD,uBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sMACD,wBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB/oQ,EAAOC,QAAUC,EAAQ,MAAiBwwH,S,gBCF1C,IAAIumpB,EAAmB/2wB,EAAQ,MAAa8iT,MAGxCk0d,EAAoB,sBAGpBC,EAAqB,aAErBC,EAAmB,MAMvBp3wB,EAAOC,QAAU,SAAe0wH,EAAMqS,GAIpC,OAHArS,EAAOsmpB,EAAiBtmpB,IACxBqS,EAAQi0oB,EAAiBj0oB,IAIpBM,OACAz/E,MAAMuztB,GAEN/mwB,QAAO,SAAS4oL,GACf,OAAOA,EAAKtyL,OAAS,KAEtB8J,QAAO,SAASiI,EAAQugL,GACvB,IAAIo+kB,EAAUp+kB,EAAKtyL,OACf87C,EAAS00tB,EAAmBt3tB,KAAKo5I,EAAK,IAAM,MAAQ,GACpDikD,EAAQ,IAAIt9L,OAAO6C,EAA+Bw2I,EAlBjDv7G,QAAQw5rB,EAAmB,QAkB6B,KACzDj2wB,EAAQ0vH,EAAKoyE,OAAOm6C,GAYxB,OAVIj8O,GAAS,IACXyX,EAAOxH,KAAK,CAACjQ,EAAOA,EAAQo2wB,IAG5B1mpB,EACEA,EAAK/7G,MAAM,EAAG3T,GACd,IAAIsF,MAAM8wwB,EAAU,GAAG9wvB,KAAK,KAC5BoqG,EAAK/7G,MAAM3T,EAAQo2wB,IAGhB3+vB,IACN,IACFnH,MAAK,SAASyqO,EAAQC,GACrB,OAAOD,EAAO,GAAKC,EAAO,Q,cC7ClCj8O,EAAOC,QAAU,SAAe0wH,EAAM+rE,GACpC,IAAIhkL,EAAS,GAwCb,OAtCuB,IAAnBgkL,EAAQ/1L,OACV+R,EAAOxH,KAAK,CACVy/G,KAAMA,EACNyxN,WAAW,IAGT1lJ,EAAQ,GAAG,GAAK,GAClBhkL,EAAOxH,KAAK,CACVy/G,KAAMA,EAAK/7G,MAAM,EAAG8nL,EAAQ,GAAG,IAC/B0lJ,WAAW,IAKjB1lJ,EAAQlrL,SAAQ,SAAS6hC,EAAOvrC,GAC9B,IAAIu9c,EAAahya,EAAM,GACnBuvS,EAAWvvS,EAAM,GAErB36B,EAAOxH,KAAK,CACVy/G,KAAMA,EAAK/7G,MAAMywc,EAAYziI,GAC7BR,WAAW,IAGTt6U,IAAM40L,EAAQ/1L,OAAS,EACrBi8U,EAAWjyN,EAAKhqH,QAClB+R,EAAOxH,KAAK,CACVy/G,KAAMA,EAAK/7G,MAAMguU,EAAUjyN,EAAKhqH,QAChCy7U,WAAW,IAGNQ,EAAWlmJ,EAAQ50L,EAAI,GAAG,IACnC4Q,EAAOxH,KAAK,CACVy/G,KAAMA,EAAK/7G,MAAMguU,EAAUlmJ,EAAQ50L,EAAI,GAAG,IAC1Cs6U,WAAW,OAKV1pU,I,6BCvCT,IAAI+yM,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1I4iG,KAAM,OACN/iI,EAAG,gBACHuxQ,SAAU,YACRzwD,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCngC,EAAG,8KACA,SAEL3K,EAAQywH,QAAUq4I,G,6BCrBH,07J,6BCEf,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wKACD,0BAEJ3K,EAAQywH,QAAUq4I,G,uTC4EZuugB,E,4MAqLIC,eAAiB,SAAC/2wB,EAAgBu8I,GACxC,MAA6C,EAAK/tG,MAAhCwouB,EAAlB,EAAQ16nB,SAAwBx8B,EAAhC,EAAgCA,SAC5Bw8B,EAAW06nB,EAAa5iwB,QAEtB6iwB,GADN36nB,EAAW54I,sBAAY44I,GAAYA,EAAW5uH,iBAAO4uH,IACtBhyH,WAAU,SAAClf,GAAD,OAAcA,EAAI/C,IAAI,QAAUk0I,EAAQl0I,IAAI,SACrFi0I,EAAWA,EAAS9nI,MAAM,CAACyiwB,EAAe,eAAgBj3wB,GACtD8/G,GACFA,EAAS,CAAEiC,KAAM,QAASo5I,MAAO,gBAAiBn7P,MAAOs8I,K,EAIrDouf,gBAAkB,SAACl8lB,GACzB,IAAOgvC,EAAW,EAAKhvC,MAAhBgvC,QACP,OACE,wBAAC,IAAWwyC,gBAAZ,2BAAgCxhF,GAAhC,IAAuC5lC,IAAK4lC,EAAM8Q,KAAK/Z,KACrD,eAAC,IAAD,CACIi4C,QAAS,CACP3hE,KAAM2hE,EAAQ05rB,qBAFpB,UAKI,cAAC,IAAD,CACI9xuB,MAAM,GACNymF,QACE,cAAC,IAAD,CACEruC,QAAS,CAAC3hE,KAAM2hE,EAAQo+O,SAAUt7L,QAAS9iD,EAAQ8iD,SACnDA,QAAS9xF,EAAM8Q,KAAK64U,YACpBr4Q,SAAU,SAACpzG,EAAQ1M,GAAT,OAA4B,EAAK+2wB,eAAe/2wB,EAAO0tB,iBAAO8gB,EAAM8Q,YAItF,cAAC,IAAD,CAAgB/Z,GAAG,mBAEtBiJ,EAAM5D,W,EAKL0hF,iBAAmB,SAAC99E,GAC1B,IAAQgvC,EAAY,EAAKhvC,MAAjBgvC,QACR,OACE,cAAC,IAAWwwR,iBAAZ,2BAAiCx/T,GAAjC,IAAwCkvC,UAAWF,EAAQ8uC,iBAA3D,SACE,cAAC,IAAD,CAAmB5uC,UAAWF,EAAQ04C,W,4CA7N5C,WACE,MASI5xH,KAAKkqC,MARPgvC,EADF,EACEA,QACAgC,EAFF,EAEEA,MACAlvC,EAHF,EAGEA,QACAgsG,EAJF,EAIEA,SACArtG,EALF,EAKEA,SACA6wE,EANF,EAMEA,SACAzvF,EAPF,EAOEA,EACA26B,EARF,EAQEA,OAGImstB,EAAoBzzwB,sBAAY44I,GAAYA,EAAW5uH,iBAAO4uH,GAC9D86nB,EAAe9muB,EAAmBA,EAAQhjC,KAAI,SAACw3G,GACnD,IAAM2F,EAAY3F,EAAOz8G,IAAI,cAAgB,GACvCqiH,EAAW5F,EAAOz8G,IAAI,YACtBmiH,EAAe1F,EAAOz8G,IAAI,gBAC1B4yW,EAAWn2P,EAAOz8G,IAAI,YACtBwoD,EAAai0D,EAAO5/F,MAAM,CAAC,SAAS,eACpCwrC,EAAQo0D,EAAOz8G,IAAI,SACnB6yN,EAAap2G,EAAOz8G,IAAI,cACxB2iU,EAAck5R,YAAsBp/e,GAE1C,MAAO,CACL1/E,MAAO4lS,EACPhrU,MAAM,GAAD,OAAKyqH,EAAL,YAAkBC,EAAlB,YAA8BF,EAA9B,YAA8CywP,GACnDnoW,KAAMk4T,EACNqsc,QAAS7spB,EACThmH,KAAMsgH,EAAOz8G,IAAI,QACjB2iH,QAAQ,GAAD,OAAKlG,EAAOz8G,IAAI,aAAe,GAA/B,YAAqCy8G,EAAOz8G,IAAI,aAAe,IACtEk9B,GAAIu/E,EAAOz8G,IAAI,MACf8vX,YAAarzQ,EAAOz8G,IAAI,eACxB0iH,MAAOjG,EAAOz8G,IAAI,iBAAmBy8G,EAAOz8G,IAAI,gBAChDwoD,aACAH,QACAwqK,WAAU,OAAEA,QAAF,IAAEA,IAAc,SAtBC3+M,iBA0BzB+6vB,EAAapgwB,gBAAM5B,eAAc,SAACyoI,GACtCq5nB,EAAYpmwB,SAAQ,SAAC8zG,GACnBi5B,EAAW/xI,IAAI84G,EAAOv/E,GAAIu/E,MAE5Bw3B,EAAStrI,SAAQ,SAAC8zG,GAAD,OAAYi5B,EAAW/xI,IAAI84G,EAAOz8G,IAAI,MAAOy8G,SAG1DyypB,EAAgBJ,EACnB7pwB,KAAI,SAACivI,GAAD,OAAa+6nB,EAAWjvwB,IAAIk0I,EAAQl0I,IAAI,UAC5CwH,QAAO,SAAC0sI,GAAD,OAAwB,MAAXA,KAEvB,OACE,cAAC,QAAD,CACEzpI,KAAM,gBACN8qE,UAAW2nD,IACX/2F,MAAO,CACLpJ,MAAO/U,EAAE,gCACTq3T,WAAY,CACV9mO,WAAY,IAEd3C,WAAY,CACVvgC,UAAW6tC,IAAW/tC,EAAQg6rB,gBAC9BlopB,YAAaj/F,EAAE,kCACfg/F,SAAS,EACTrvH,MAAOu3wB,EAAc10vB,OACrBytB,QAAS8muB,EAAYlwwB,UACrB6gV,kBAAkB,EAClBjhO,cAAe,SAACgb,GA8Bd,OA7B4B,IAAxBngI,QAAQmgI,IACV7yF,EAAS,IAAI2wB,KAAkB,CAAEiuD,QAASngG,iBAAO,CAC7C,IAAO,CACL,CACE,QAAW,CACT,GAAMs9B,IAGV,CACE,OAAU,CACR,GAAM,WAGV,CACE,GAAM,CACJ,CACE,MAAS,CACP,KAAQ82E,IAGZ,CACE,SAAY,CACV,KAAQA,YAOjBA,GAEThiB,SAAU,SAAC09U,GAEPA,EADiB,OAAfA,EAzHH,SAACr1b,EAAOS,GACrB,IAD6B,EACvBw9I,EAAM,GADiB,cAEbj+I,GAFa,IAE7B,2BAAuB,CAAC,IAAbb,EAAY,QACrB,GAAmB,IAAf8+I,EAAIjgJ,OACNigJ,EAAI11I,KAAKpJ,OACJ,CACL,IADK,EACDmwwB,GAAW,EADV,cAEWrxnB,GAFX,IAEL,2BAAqB,CAAC,IAAXtqE,EAAU,QACnB,GAAIx0E,EAAEsB,KAASkzE,EAAElzE,GAAM,CACrB6uwB,GAAW,EACX,QALC,8BAQDA,GACFrxnB,EAAI11I,KAAKpJ,KAdc,8BAkB7B,OAAO8+I,EAwGoBsxnB,CAAOl6U,EAAY,MAEnB,GAEf,IAAMm6U,EAAsBjqvB,iBAAQ8va,GAAYlwb,KAAI,SAACivI,GAAD,OAAaA,EAAQvwI,IAAI,QAASuwI,EAAQl0I,IAAI,YAClGy3G,EAAS,CAAEiC,KAAM,QAASo5I,MAAO,gBAAiBn7P,MAAO23wB,KAE3Dz3rB,OAAQ,CACN2rC,QAAS,SAAA47N,GAAc,kCAClBA,GADkB,IAErBx7N,YAAY,YACZF,aAAc,OAEhB09M,KAAM,SAAAge,GAAc,sBACfA,IAEL3iO,OAAQ,SAAC2iO,EAAD,OAAmBl9N,EAAnB,EAAmBA,WAAnB,mBAAC,eACJk9N,GADG,IAENn+N,gBAAiBiB,EACb/qC,EAAM+pC,QAAQ+d,UAAU,KACxB,QACJ,SAAU,CACRhe,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,QAG7CkgN,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnBmhhB,WAAY,SAAAhjT,GAAc,kCACrBA,GADqB,IAExB5xN,OAAQ,OACRn2C,QAAS,OACTnC,WAAY,SACZwuC,aAAcvsC,EAAM4/C,MAAMrT,gBAE5B2+gB,gBAAiB,SAAAjjT,GAAc,kCAC1BA,GAD0B,IAE7B/nQ,QAAS,OACTnC,WAAY,YAEd+uC,iBAAkB,SAAAm7N,GAAc,kCAC3BA,GAD2B,IAE9B99N,OAAQ,UACR,UAAW,CACTL,gBAAiB,mBAIvBloE,WAAY,CACV4uE,gBAAiB1rH,KAAKomoB,gBACtB18R,iBAAkB1pW,KAAKgoH,iBACvBkU,SAAU,SAAChyF,GACT,OAAO,cAAC,IAAWgyF,SAAZ,2BAAyBhyF,GAAzB,aACJA,EAAM5D,cAIbq7E,aAAc,SAACnB,EAAQiC,GACrB,OAAO6wpB,YAAmB9ypB,EAAOxlE,KAAKla,MAAO2hF,IAAe6wpB,YAAmB9ypB,EAAOxlE,KAAKoR,MAAOq2D,IAEpG2F,kBAAmB,SAAC5H,GAClB,OACE,8BACE,0CACMA,EAAOhyG,MACVgyG,EAAOj0D,YAAc,sBAAM6sB,UAAWF,EAAQq6rB,iBAAzB,qBAAiD/ypB,EAAOj0D,qBAMxFqtD,iBAAkB,CAChBC,WAAW,U,GA9KSp1E,aAmOnBuilB,EAAY,SAAC9riB,GAAD,MAA+B,CACtD03rB,oBAAqB,CACnBn3rB,cAAe,MACfH,MAAO,iBACP,UAAW,CACTC,OAAQ,kBAGZ+7O,SAAU,CACRx7O,QAAS,MACTmqB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B8W,QAAS,CACP/1B,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQC,KAAK,KAAxB,eAEP0M,KAAM,CACJr2C,OAAQ,EACRO,QAAS,EACTmqB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1B,UAAW,CACTjf,MAAO/qB,EAAM+pC,QAAQC,KAAK,OAG9BqupB,iBAAkB,CAChBttqB,MAAO,UA0BIhxB,sBACbgG,aAtBa,SAACC,GAAD,oBACXsqC,cAAe,CACbpqC,QAAS,OACTnC,WAAY,aACZoC,SAAU,WAET2riB,EAAU9riB,MAgBI,CAAE8zC,WAAW,IAChCnQ,mBAbsB,SAACu7Q,GAAD,OAAwBtnV,YAAyB,CACvEwytB,eAAgB/pnB,cAChB70F,OAAQD,gBAFsC3T,CAG7CsnV,MAEwB,SAACzvV,GAC1B,MAAO,CACLA,eAOFwU,YAAgB,gBAHH81B,CAIbu9rB,I,kECrXIp/V,EAAc,sBAGduoS,EAA0B,CACxBt9sB,OADwB,SACjBipG,EAAUvgD,EAAes4T,EAAwBC,GAAgD,OAAD,uHACrGtkU,EAAO,CACXw4tB,iBAAkBn0Z,EAClBliK,KAAMxuM,KAAKC,UAAU0wW,IAHoF,SAMnGtuD,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GAPgE,SAQlFusX,EAAUC,KAAV,4CAA4Dv4X,GARsB,cAQnG+tE,EARmG,yBASlGA,GATkG,wCAYzG/gG,QAAQ7Z,MAAM,0CAAd,MAZyG,kEAiBvGslwB,eAlBwB,SAkBTnsqB,EAAUvgD,EAAesrK,GAAgC,OAAD,2HACvEkvM,EAAe,GADwD,SAGnEvwG,EAAU1pN,EAAIvjG,IAAIqva,GAClBE,EAAY,IAAIviH,IAAUC,EAASjqQ,GACrCw/C,EALqE,6CAMnEh7F,EAAS,CACb8mN,UACAvkN,OAAQ,EACR27G,MA7BU,KA+BZljB,GAAQ,kBAAeqtG,mBAAmBjlM,KAAKC,UAAUrD,KAXgB,SAYpD+na,EAAUK,sBAAsBptU,GAZoB,QAYnE3yF,EAZmE,QAa9D09S,UAAP,OAAkB19S,QAAlB,IAAkBA,OAAlB,EAAkBA,EAAQszB,QAAR,kBACpBq6X,EAAY,OAAG3tZ,QAAH,IAAGA,OAAH,EAAGA,EAAQszB,QAAR,gBAdwD,wDAkBzElf,QAAQ7Z,MAAM,oCAAd,MAlByE,sCAqBpEozZ,GArBoE,8DAyBhEo6S,O,6BC/CA,QAA0B,qC,6BCAzC,kFAsGexpb,IAjFiC,SAACjoP,GAC/C,IACEu1F,EAIEv1F,EAJFu1F,OADF,EAKIv1F,EAHFkoP,kBAFF,WAKIloP,EAFF4vC,eAHF,MAGY,SAHZ,IAKI5vC,EADF89mB,iBAJF,MAIc,GAJd,EAOQj8nB,EAAM+xB,YAAe,gBAArB/xB,EAER,EAAqC0Y,WAAc,WAAO,IAAD,EACnDivuB,EAAiBz7vB,iBAQrB,MAAO,CAAEulG,WAPU,UAAAiiB,EAAO7+G,MAAM,CAAC,iBAAkB,mBAAhC,eAA6CjV,QAAO,SAACutI,EAAKo5N,GAAa,IAAD,EACvF,OAAI9xU,mBAAiBv8B,IAAIquW,EAAQvuW,IAAI,QACnC2vwB,EAAiBA,EAAetnwB,KAAKkmW,EAAQvuW,IAAI,OAC1Cm1I,GAEFA,EAAI9sI,KAAKkmW,EAAQ5qW,IAAI,SAAS,UAAAq6V,IAAiBuQ,EAAQvuW,IAAI,cAA7B,eAAqCrI,QAAS,OAClFuc,kBAAQxL,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAE5B,IAAI,SAASwjO,cAAc3hO,EAAE7B,IAAI,eAAckU,iBAC3C07vB,cAAeD,KAC9C,CAACj0oB,IAVIjiB,EAAR,EAAQA,UAAWm2pB,EAAnB,EAAmBA,cAYb1kiB,EAAQoxa,YAAwB,CAAEC,UAAWqzH,EAAepzH,UAAU,EAAOjlkB,MAAO0skB,IACpF4rH,IAA6B,OAAC3kiB,QAAD,IAACA,OAAD,EAACA,EAAOptO,UAAmB,OAAT27G,QAAS,IAATA,OAAA,EAAAA,EAAWzhH,MAAO,EAEvE,OACE,eAAC,IAAD,CACEy9E,WAAW,EACXE,UAAW04M,EAAa,MAAQ,SAChCt4M,QAASA,EACTb,WAAW,SACXuB,KAAK,SALP,WAQS,OAALy0J,QAAK,IAALA,OAAA,EAAAA,EAAOptO,QAAS,GACd,cAAC,IAAD,CACE23E,WAAW,EACXE,UAAU,MACVI,QAASA,EACTb,WAAW,SACXuB,KAAK,SACL8gC,MAAO,CAAEhgC,MAAO,eANlB,SAQG2zJ,IAKL2kiB,GACE,cAAC,IAAD,CACEl6pB,QAAQ,UACRzT,MAAM,cACNqV,MAAO,CACLx/B,QAAS,UACT2rC,aAAc,EACdzC,gBAAiB,WANrB,SASGxH,EAAU58F,MAAM,CAAC,EAAG,aAKhB,OAAT48F,QAAS,IAATA,OAAA,EAAAA,EAAWzhH,MAAO,GAChB,cAAC,IAAD,CAASmuH,MAAO1M,EAAU1tG,MAAM8jwB,EAA6B,EAAI,GAAG5qwB,KAAI,SAAAspW,GAAO,OAAIA,EAAQvuW,IAAI,YAAU0d,KAAK,MAA9G,SACE,cAAC,IAAD,CACE65F,MAAO,CACLpV,eAAgB,YAChBmf,OAAQ,UACR6C,WAAY,GAJhB,SAOGn8F,EAAE,wB,8ICrFX+zB,G,OAFmB,kBAAhB4yiB,aADT,oBAC4CA,YAAP,IAGjC,W,OAAMA,YAAN,OACA,W,OAAM3kkB,KAAN,QAMG,SAAS8lvB,EAAc50F,GAC5B1kZ,qBAAqB0kZ,EAArB1kZ,IAGK,SAASu5e,EAAelvuB,EAAxB,G,IACC7kB,EAAQ+/B,I,IAURm/nB,EAAuB,CAC3Bh+oB,GAAIq5P,uB,SATN,IACMx6O,OAAJ,EACElb,aAEAq6oB,KAAe3kZ,sBAAf2kZ,O,OAQJ,ECPF,IAAI80F,EAAJ,KAQO,SAASC,EAAiBC,G,QAA8C,IAA9CA,OAAwB,GACnDF,UAAJ,EAA6C,C,IACrCG,EAAWluuB,uBAAjB,OACM0+a,EAAawvT,EAAnB,MACAxvT,eACAA,gBACAA,oBACAA,kB,IAEMyvT,EAAWnuuB,uBAAjB,OACMouuB,EAAaD,EAAnB,M,OACAC,gBACAA,iBAEAF,iBAEEluuB,SAAF,oBAEIkuuB,aAAJ,EACEH,yBAEAG,eAEEH,EADF,IAAIG,aACFH,WAEAA,sBAIF/tuB,SAAF,oBAEA,E,OAGF,ECqvBF,IC/rBMquuB,EAAiB,SAACl4wB,EAAD,G,OAAA,GAaR,SAASm4wB,EAAoB,G,QAC1CC,EAmBE,EAnBFA,cACAC,EAkBE,EAlBFA,sBACAxgU,EAiBE,EAjBFA,YACAygU,EAgBE,EAhBFA,8BACAC,EAeE,EAfFA,uBACAC,EAcE,EAdFA,0BACAC,EAaE,EAbFA,kBACAC,EAYE,EAZFA,sCACAr1G,EAWE,EAXFA,c,kCAuCE,G,2BACE,UA3BFs1G,eAAsBF,EAAkB,EAAD,mC,EACvCG,eAyB6B,E,EAxB7BC,2BAA+C,K,EAU/ChuuB,MAAe,CACb3Z,SAAU,OAAF,IAAE,CAAF,YADK,IAEbisb,aAFa,EAGbzkH,gBAHa,UAIboiH,aACE,kBAAO,QAAP,oBACI,QADJ,oBALW,EAQbg+T,0BAA0B,G,EAMC,4B,EAAA,qBAgMNj3e,aACrB,kB,OAMI,QAAF,gBAA6D,CAC3D0iL,mBAD2D,EAE3DC,kBAF2D,EAG3Du0T,kBAH2D,EAI3DC,wB,EA3MuB,qB,EAAA,cAoNbn3e,aACd,gB,OAKI,QAAF,SAA+C,CAC7C62D,gBAD6C,EAE7CoiH,aAF6C,EAG7Cg+T,gC,EA7NuB,qB,EAAA,cAuQb,Y,IASd,E,EARwC,EADC,MACjCv7rB,EADiC,YACtBsoV,EADsB,WACZozW,EADY,SAGnCC,EAAiB,qBACrBR,GADqB,EAErBA,GAFqB,EAGrBA,GAHF,G,GAOIQ,iBAAJ,GACE/5pB,EAAQ+5pB,EAAR/5pB,OACK,C,MACCxtG,EAASymwB,EAAc,EAAD,QAAoB,EAAhD,gBACMx4wB,EAAOi4c,EAAY,EAAD,QAAoB,EAFvC,gBAKC6sL,EACJnnjB,kBADF,eACgC07rB,EAEhCC,OAA6B,GAC3Bp4pB,SAAU,aACTvjC,kBAF0B,QAEemnjB,EAAe,EAF9B,QAGrBA,EAHqB,EAGN,EAHM,SAIlBA,EAJkB,OAIH9koB,EAJG,QAKpB8koB,EAAe9koB,EALK,OAALu/G,EAAxB+5pB,G,OASF,G,EApS2B,0B,EAAA,mBAwSRr3e,aAAW,gB,MAAA,M,EAxSH,oBAiVP,Y,MAC6B72J,EADC,cAC1C/H,EAD0C,cAC7BuoL,EAD6B,aACjB9R,EADiB,c,EAElD,UAAc,SAAA5kC,G,GACRA,iBAAJ,E,OAIE,K,IAGMv3L,EAAc,EARG,gBAUrBu9X,EAAJ,E,GACA,QAAIv9X,E,OAKMs6rB,K,IACN,WACE/8T,K,UAEF,sBACEA,EAAephK,IAAfohK,E,OAMNA,EAAel6c,WAEbA,WAAuB84S,EAFzBohK,IAKO,CACLqC,aADK,EAELzkH,gBACE5jF,2BAHG,WAILgmM,aAJK,EAKLg+T,0BAA0B,KAE3B,EAvCH,6B,EAnV2B,kBA6XT,Y,MACgC9toB,EADF,cACxC8uK,EADwC,eAC1BL,EAD0B,eACZgS,EADY,Y,EAEhD,UAAc,SAAA32C,G,GACRA,iBAAJ,E,OAIE,K,IAIIgmM,EAAel6c,WAEnBA,WAAoB64S,EAFtB,I,MAKO,CACL0jK,aADK,EAELzkH,gBACE5jF,2BAHG,WAILgmM,aAJK,EAKLg+T,0BAA0B,KAE3B,EArBH,6B,EA/X2B,gBAuZX,Y,IACRK,EAAa,EADe,e,EAGpC,YAEA,oBAAWA,EACTA,KAEAA,2BACOA,GACPA,iBAHK,aAKLA,c,EAnayB,2BAuaA,WAC3B,OAAI,8BACFzB,EAAc,EAAdA,4B,EAGF,2BAAkCC,EAChC,EAD8C,kBA3etD,M,EA+DiC,kBAkbT,W,EAClB,gC,EAEA,SAAc,CAAEx6T,aAAa,IAAS,W,EAGpC,gC,qBAndN,uC,OAmCIi8T,EAAoBlypB,EAApBkypB,GACA/1G,KACA,M,2BArCJ,qBAyCIvoN,EAAel6c,WAAfk6c,G,KAEA,UAAc,SAAAhmM,G,OACRA,iBAAJ,EACE,KAEK,CACL4jF,gBACE5jF,2BAFG,WAGLgmM,aAHK,EAILg+T,0BAA0B,KAE3Bj1wB,KAVH,6B,EA3CJ,gCAwDmE,IAArCy5G,MAAuB,Q,IACzCsoT,EAAc/ha,KADyC,gBAEvDi3c,EAAiBj3c,KAFsC,mBAI/D7D,EAAQY,WAAYA,WAAgBgla,EAApC5la,I,KAEA,SACEs4wB,EACEz0wB,KAD2B,YAK3BA,KANJ,kB,EA9DJ,6B,MA0EuDA,KADjC,MACV05E,EADU,YACC87rB,EADD,sBACsBJ,EADtB,S,GAGiB,kBAAxBI,GAAX,MAA+Cx1wB,KAAK+0wB,UAAmB,C,IAC/DO,EAAat1wB,KADkD,UAGjE05E,kBAAJ,eAAkC07rB,EAChCE,eAEAA,c,KAIJ,uB,EAtFJ,8B,MA0FkCt1wB,KADX,MACX05E,EADW,YACA07rB,EADA,S,EAEgCp1wB,KAFhC,MAEXi3c,EAFW,e,GAAA,4BAInB,MAAgCj3c,KAAK+0wB,UAAmB,C,IAChDO,EAAat1wB,KADmC,U,GAIlD05E,kBAAJ,eAAkC07rB,E,GAChC,QAAI17rB,E,OAIMs6rB,K,IACN,WACEsB,gB,UAEF,qBACEA,e,kBAGQl2oB,EAA6Bk2oB,EADvC,YACuBz/d,EAAgBy/d,EADvC,YAEEA,aAAsBz/d,IAAtBy/d,OAIJA,oBAGFA,c,KAIJ,uB,EA1HJ,gCA8HI,OAAIt1wB,KAAKg1wB,4BACPnB,EAAc7zwB,KAAd6zwB,6B,EA/HN,kB,MAqJQ7zwB,KAlBG,MAELsmC,EAFK,WAGL8yC,EAHK,YAILM,EAJK,YAKL63C,EALK,SAML27I,EANK,WAOLuogB,EAPK,mBAQLC,EARK,eASL3zW,EATK,YAUL4qQ,EAVK,W,IAAA,QAWLnmO,OAXK,UAYL4uU,EAZK,SAaL3oG,EAbK,mBAcLkpG,EAdK,eAeLr6pB,EAfK,QAgBLs6pB,EAhBK,iBAiBLt6rB,EAjBK,QAmBCg+X,EAAgBt5c,KAnBjB,kBAsBD6goB,EACJnnjB,kBADF,eACgC07rB,EAE1B51T,EAAWqhL,EACb7goB,KADyB,oBAEzBA,KAFJ,kB,EAIgCA,KA7BzB,oBA6BAugd,EA7BA,KA6BYC,EA7BZ,KA+BDx5M,EAAN,G,GACI+6J,EAAJ,E,IACO,IAAI5la,EAAT,EAA6BA,GAA7B,EAAiDA,IAC/C6qQ,OACE/gO,wBAAcK,EAAU,CACtB0U,KADsB,EAEtB12C,IAAKkic,EAAQ,EAFS,GAGtBrqc,MAHsB,EAItBm9c,YAAas8T,EAAiBt8T,OAJR,EAKtBh+V,MAAOt7G,KAAK61wB,cAAc,M,IAQ5BC,EAAqBtB,EACzBx0wB,KAD8C,MAE9CA,KAFF,gB,OAKOimC,wBACLwmoB,MADkB,MAElB,CACErzlB,UADF,EAEEomY,SAFF,EAGE/jd,IAAKuE,KAHP,gBAIEs7G,MAAO,OAAF,IAAE,CAAF,CACH2B,SADG,WAEHsU,OAFG,EAGHj2C,MAHG,EAIH+uC,SAJG,OAKHy6O,wBALG,QAMHk6G,WANG,YAOHtlY,aAPG,IAWPzzC,wBAAcwvuB,MAAD,MAA4C,CACvDnvuB,SADuD,EAEvD7qC,IAFuD,EAGvD6/G,MAAO,CACLiW,OAAQsvgB,EAAe,OADlB,EAELxsgB,cAAeilV,EAAc,YAFxB,EAGLh+X,MAAOuljB,EAAei1I,EAAqB,Y,EA/MrD,+B,GA6PI,oBAAW91wB,KAAKkqC,MAAZ,iBACoBlqC,KAD8B,gBAEpD,EAAmB,C,MAMbA,KANa,oBAEf0gd,EAFe,KAGfC,EAHe,KAIfu0T,EAJe,KAKfC,EALe,K,KAOjB,8B,GASJ,oBAAWn1wB,KAAKkqC,MAAZ,SAA2C,C,MAKzClqC,KALyC,MAE3C60V,EAF2C,kBAG3CoiH,EAH2C,eAI3Cg+T,EAJ2C,2B,KAM7C,uB,EArRN,6B,MAsUyCj1wB,KADe,MAC5C+ha,EAD4C,YACjC2qQ,EADiC,gB,EAEG1sqB,KAFH,MAE5Cs5c,EAF4C,cAE/BzkH,EAF+B,kBAEdoiH,EAFc,e,GAIpD,IAAIl1C,E,MACK,CAAC,EAAG,EAAG,EAAd,G,IAGIw+C,EAAam0T,EACjB10wB,KADuC,QAGvCA,KAHF,gBAKMwgd,EAAYm0T,EAChB30wB,KADyC,UAIzCA,KAjBkD,gBAsB9C+1wB,EACHz8T,GAAD,aAAgBzkH,EADlB,EAEM93V,WADJ,GAGIi5wB,EACH18T,GAAD,YAAgBzkH,EADlB,EAEM93V,WADJ,G,MAIK,CACLA,WAAYwjd,EADP,GAELxjd,WAAYA,SAASgla,EAAThla,EAAwByjd,EAF/B,MAAP,I,GApWJ,gCAKwB,CACpB9mY,UADoB,MAEpBizlB,cAFoB,EAGpByoG,OAHoB,WAIpB1oG,cAJoB,EAKpBkpG,gBAAgB,GAVpB,EA+dF,IAAML,EAAsB,SAAC,EAAD,GAWjB,EATPjvuB,SASO,EARPozC,UAQO,EAPP63C,OAOO,EANP6jpB,OAMO,EALPM,aAKO,EAJPC,aAIO,EAHPr6rB,MAGO,EADPjuD,UC9mBE4ovB,EAAkB,SAAC,EAAD,K,IAKdj0W,EADS,WAETk0W,EAAuCh7T,EAF9B,gBAEQi7T,EAAsBj7T,EAF9B,kB,GAIb/+c,EAAJ,EAA+B,C,IACzB2R,EAAJ,E,GACIqowB,GAAJ,EAA4B,C,IACpBC,EAAeF,EAArB,GACApowB,EAASsowB,SAAsBA,EAA/BtowB,K,IAGG,IAAI9K,EAAImzwB,EAAb,EAAoCnzwB,GAApC,EAAgDA,IAAK,C,IAC/CjH,EAASima,EAAb,GAEAk0W,KAAqB,CACnBpowB,OADmB,EAEnB/R,QAGF+R,KAGFotc,sB,OAGKg7T,EAAP,IAmCIG,EAA8B,SAAC,EAAD,S,KAO3B9wlB,GAAP,GAAoB,C,IACZujkB,EAASvjkB,EAAMxoL,YAAYyoL,EAAD,GAAhC,GACM2uR,EAAgB8hU,EAAgB/ruB,EAAO4+sB,EAAvBmtB,GAAtB,O,GAEI9hU,IAAJ,E,OACE,EACSA,EAAJ,EACL5uR,EAAMujkB,EAANvjkB,EACS4uR,EAAJ,IACL3uR,EAAOsjkB,EAAPtjkB,G,OAIAD,EAAJ,EACSA,EAAP,EAEA,GAIE+wlB,EAAmC,SAAC,EAAD,O,QAM/Bv0W,EAAc73X,EADX,UAEPmxE,EAAJ,EAGEl/G,KACA85wB,EAAgB/ruB,EAAO/tC,EAAvB85wB,UAFF,GAIE95wB,KACAk/G,K,OAGKg7pB,EAA4B,EAAD,EAGhCt5wB,WAAgBgla,EAHgB,GAIhChla,WAAWZ,EAJqB,GAAlC,IASIq4wB,EAAwB,SAAC,EAAD,G,IAC1BzyW,EAEC,EAFDA,UACAm0W,EACC,EADDA,gBAAiBK,EAChB,EADgBA,kBAAmBJ,EACnC,EADmCA,kBAElCK,EADD,E,GAKCL,GAAJ,IACEA,EAAoBp0W,EAApBo0W,GAGEA,GAAJ,EAA4B,C,IACpBC,EAAeF,EAArB,GACAM,EAA2BJ,SAAsBA,EAAjDI,K,OAMKA,GAHoBz0W,IAA3B,GACA,GAKI00W,EAAmBnC,EAAoB,CAC3CC,cAAe,gB,OAIF0B,EAAgB/ruB,EAAO/tC,EAAvB85wB,GAJE,QAMfjiU,YAAa,gB,OAIAkH,qBAJA,MAMbs5T,sBAb2C,EAe3CC,8BAA+B,oB,IAOrB/6rB,EAAqCxvC,EADlC,UACQqnF,EAA0BrnF,EADlC,OACgBkruB,EAAkBlruB,EADlC,OACwBoxC,EAAUpxC,EADlC,MAKLnuC,EADe29E,kBAArB,eAAmD07rB,EACpB95rB,EAA/B,EACM86rB,EAAeH,EAAgB/ruB,EAAO/tC,EANjC,GAUL25wB,EAAqBtB,EAAsBtquB,EAAjD,GAEMqqa,EAAYx3c,WAEhBA,SAAS+4wB,EAAT/4wB,EAAoCq5wB,EAFtC,SAIM5hU,EAAYz3c,WAEhBq5wB,WAA6BA,EAF/B,M,OAKA,UAAI38pB,IAKAA,EAHAw9V,GAAgBzC,EAAhByC,GACAA,GAAgB1C,EAFlB,EAIE96V,OAEAA,UAIJ,G,IACE,Q,OACE,E,IACF,M,OACE,E,IACF,S,OACS18G,WAAWy3c,GAAaD,EAAD,GAA9B,G,eAGI0C,MAA6BA,GAAjC,EACE,EACSA,EAAJ,EACL,EAEA,IAKRy9T,uBAAwB,gB,OApLF,SAAC,EAAD,K,IAKdwB,EAAuCh7T,EAD5C,gBACsBi7T,EAAsBj7T,EAD5C,kB,OAIDi7T,IAAwBD,KAAxBC,OADF,IAGA,EAESE,EAA4B,EAAD,MAAlC,GAWOC,EAAiC,EAAD,EAGrCv5wB,WAHqC,GAAvC,GAiKW25wB,CAAgBxsuB,EAAOgxa,EAJZ,IAMxBy5T,0BAA2B,kB,QAMjBj7rB,EAAgDxvC,EAD7C,UACQqnF,EAAqCrnF,EAD7C,OACgB63X,EAA6B73X,EAD7C,UAC2BkruB,EAAkBlruB,EAD7C,OACmCoxC,EAAUpxC,EAD7C,MAKLnuC,EADe29E,kBAArB,eAAmD07rB,EACpB95rB,EAA/B,EACM86rB,EAAeH,EAAgB/ruB,EAAOq2a,EAA5C,GACMhM,EAAY0C,EAAlB,EAEInpc,EAASsowB,SAAsBA,EAAnC,KACI51T,EAAJ,EAEOA,EAAYz+C,EAAZy+C,GAA6B1yc,EAApC,GACE0yc,IACA1yc,GAAUmowB,EAAgB/ruB,EAAOs2a,EAAvBy1T,GAAVnowB,K,OAGF,GAGF8mwB,kBAvG2C,c,IA0GnC15T,EAAgB,CACpBg7T,gBADoB,GAEpBK,kBAL+D,qBAtQrE,GA4QMJ,mBAAoB,G,OAGtB9ovB,kBAA2B,mBAGtB,IADHspvB,OAA8B,GAE9Bz7T,oBAAkCn+c,SAChCm+c,EADgCn+c,kBAEhCZ,EAHC,GAUHkxB,yBAEA,GACEA,iBAIJ,GAGFwnvB,uCAvI2C,EAyI3Cr1G,cAAe,YAAoC,EAAjCx9P,YCxSd40W,EAAgBtC,EAAoB,CACxCC,cAAe,c,OACbp4wB,EADa,YAGf63c,YAAa,c,OAAA,YAGbwgU,sBAAuB,Y,IAAGzyW,EAAH,Y,OAAA,cAGvB0yW,8BAA+B,kB,IAC3B/6rB,EAIS,EAJTA,UAAW63C,EAIF,EAJEA,OAAQwwS,EAIV,EAJUA,UAAWC,EAIrB,EAJqBA,SAAUozW,EAI/B,EAJ+BA,OAAQ95rB,EAIvC,EAJuCA,MAO5Cv/E,EADe29E,kBAArB,eAAmD07rB,EACpB95rB,EAA/B,EACMu7rB,EAAiB95wB,WAErBgla,IAFF,GAIMwyC,EAAYx3c,WAEhBZ,EAFF,GAIMq4c,EAAYz3c,WAEhBZ,MAFF,G,OAKA,UAAIs9G,IAKAA,EAHAw9V,GAAgBzC,EAAhByC,GACAA,GAAgB1C,EAFlB,EAIE96V,OAEAA,UAIJ,G,IACE,Q,OACE,E,IACF,M,OACE,E,IACF,S,IAGQq9pB,EAAe/5wB,WACnBy3c,GAAaD,EAAD,GADd,G,OAGIuiU,EAAe/5wB,UAAUhB,EAA7B,GAAwC,EAE7B+6wB,EAAeD,EAAiB95wB,WAAWhB,EAA/C,GAA0D,EAG/D,E,eAKEk7c,MAA6BA,GAAjC,EACE,EACSA,EAAJ,EACL,EAEA,IAKRy9T,uBAAwB,c,IACpB3yW,EADoB,YACTC,EADS,W,OAItBjla,WAEEA,SAASgla,EAAThla,EAAwBA,WAAW+Q,EANf,MASxB6mwB,0BAA2B,gB,IACvBj7rB,EAGS,EAHTA,UAAW63C,EAGF,EAHEA,OAAQwwS,EAGV,EAHUA,UAAWC,EAGrB,EAHqBA,SAAUozW,EAG/B,EAH+BA,OAAQ95rB,EAGvC,EAHuCA,MAM5CxtE,EAASyyc,EAAf,EACMxkd,EAFe29E,kBAArB,eAAmD07rB,EAEpB95rB,EAA/B,EACMy7rB,EAAkBh6wB,WACrBhB,IAAD,GADF,G,OAGOgB,KAAA,MAELA,SACEgla,EADFhla,EAEEwjd,IAFFxjd,KAOJ63wB,kBAxGwC,cA4GxCC,uCA5GwC,EA8GxCr1G,cAAe,YAAoC,EAAjCx9P,a,gDC/FLg1W,IAnBf,SAAmBC,GACf,MAAsBv4tB,mBAASu4tB,GAA/B,mBAAOt+tB,EAAP,KAAWu+tB,EAAX,KACMC,EAASjupB,uBAAY,WACvBgupB,GAAQ,KACT,IACGE,EAAUlupB,uBAAY,WACxBgupB,GAAQ,KACT,IACG/1W,EAASj4S,uBAAY,WACvBgupB,GAAQ,SAACG,GAAD,OAAaA,OACtB,IACH,OAAO7wuB,mBAAQ,iBAAO,CAClBmS,KACAw+tB,SACAC,UACAj2W,YACA,CAACxoX,EAAIw+tB,EAAQC,EAASj2W,M,6BChB9B,IAAIx6M,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,qOACD,WAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wNACD,QAEJ3K,EAAQywH,QAAUq4I,G,2ZCWLqzgB,EAAuC,uCA6RrCrisB,sBACb4pC,mBAxEsB,SAAC73E,EAAOkD,GAAW,IAAD,IAClCkrL,EAAcr1E,YAAyB,CAAC,eAA1BA,CAA0C/4G,IAAUp0B,gBAClEopT,EAAW5mG,EAAYrxN,IAAI,YAC3BgqR,EAAU34D,EAAYrxN,IAAI,OAAQ6O,iBAClCw4C,EAASkwF,cAAmBt0G,IAAUp0B,gBACtC62C,EAAQ,UAAGvf,EAAMqtuB,wBAAT,QAA8Bv7c,EAAWjuC,EAAQhqR,IAAI,YAAcqnD,EAAOrnD,IAAI,YACtFkpO,EAAQ,UAAG/iM,EAAMstuB,wBAAT,QAA6Bz3nB,YAAyB,CAAC,SAAU,OAE/E,OAAO,aACL30F,SACA3B,WACAwjL,WACAk3B,aAAc3oI,YAA+B87oB,EAA/B97oB,CAAqEx0F,IAChF8L,YAAyB,CAC1B2sF,OAAQi8H,cACR+7gB,oBAAqB77gB,eACrBtvM,SAAUlD,gBAHTtW,CAIA9L,OAIoB,SAAC2D,GAE1B,MAAO,CACLA,WACA8rnB,UAAW,SAAAnqmB,GACT3hB,EAAS,IAAIutB,KAAoB,CAAC5L,cAClC3hB,EAAS,IAAImvB,KAAmB,CAAExN,mBAKrB,SAACxf,EAAYC,EAAeN,GAGzCM,EADF0pnB,UADF,IACa9rnB,EACToC,EADSpC,SAEb,GAKImC,EAJFwf,SAIExf,EAHFse,QAFF,eAEWx4C,gBAGPk6B,EAFF2c,iBAHF,MAGa72C,gBAHb,EAIEuxP,EACEr3N,EADFq3N,aAGIogZ,EAAe96lB,EAAS7oC,MAAM,CAAC,UAAW,SAAWue,iBAAekB,OAClD,MACAopB,EAAS7oC,MAAM,CAAC,UAAW,SAAWue,iBAAemB,IACnD,MACA,KACpB2vtB,EAAer/jB,oBAAS,SAAApzD,GAAU,OAAI7yF,EAAS,IAAI+6C,KAAuB,CAC9E4xI,eAAgB,KAChB/tG,QAAS,CACP,IAAO,CACL,CACE,cAAiB,CACf,KAAQiU,MAKhB/zE,gBACG,KAQL,OAAO,+DAAKhd,GAAaK,GAAeq3N,GAAkBp3N,GAA1D,IAAyEw3mB,eAAc0rG,eAAc3sV,WANlF,WACjB34X,EAAS,IAAI4J,IAA+B,CAAErK,MAAM,2BAAMi6N,GAAP,IAAqBx5J,MAAM,IAAS1pE,GAAIq2uB,KAC3F3suB,EAAS,IAAIkkG,MACblkG,EAAS,IAAI66C,KAAgC,CAAC20iB,WAAYlinB,iBAAQq/X,aAAa,EAAOogY,gBAAiB,WAQzGz8rB,aAhHa,SAACC,GAAD,MAAmB,CAChC82R,OAAQ,CACNj3O,WAAY7/C,EAAM+pC,QAAQE,QAAQ7iF,MAEpCvmC,KAAM,CACJu/E,MAAO,SACPi2C,OAAQ,SACRpK,SAAU,QAEZwwpB,UAAW,CACTr8rB,MAAO,QAETkvrB,YAAa,CACXvtpB,SAAU,WACVqX,IAAKp5C,EAAMZ,UACX9/D,MAAO0gE,EAAMZ,QAAQ,IAEvBs9rB,SAAU,CACRr7oB,WAAY,KAEds7oB,kBAAmB,CACjBv7rB,SAAU,OAEZw7rB,YAAa,CACX7lpB,WAAY,GAEdkzd,YAAa,CACXjzd,cAAeh3C,EAAMZ,WAEvBq7C,aAAc,CACZc,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhBoipB,eAAgB,CACdz8rB,MAAO,YA2EIrG,EAvQkB,SAAC/qC,GAChC,MAcIA,EAbFygE,YADF,SAEE24T,EAYEp5X,EAZFo5X,WACA2sV,EAWE/ltB,EAXF+ltB,aACAxwnB,EAUEv1F,EAVFu1F,OACAwtG,EASE/iM,EATF+iM,SACA/zJ,EAQEhvC,EARFgvC,QACAu+rB,EAOEvtuB,EAPFutuB,oBACAlzH,EAMEr6mB,EANFq6mB,aAEAj4lB,GAIEpiB,EALFkhB,OAKElhB,EAJFoiB,UACAmqmB,EAGEvsnB,EAHFusnB,UACA9rnB,EAEET,EAFFS,SACA0jZ,EACEnkZ,EADFmkZ,SAGMtia,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAoC0Y,WAAe,GAAnD,mBAAO8tV,EAAP,KAAmBmW,EAAnB,KACA,EAA4CjkW,WAAe7xB,iBAA3D,mBAAOolwB,EAAP,KAAuBC,EAAvB,KACA,EAAgDxzuB,YAAe,GAA/D,mBAAOyzuB,EAAP,KAAyBC,EAAzB,KACA,EAAkC1zuB,YAAe,GAAjD,oBAAO2zuB,GAAP,MAAkBC,GAAlB,MACM/8W,GACJ,eAAC,IAAD,CAAM9hV,WAAW,EAAMP,WAAW,SAASqB,QAAS,EAAGE,KAAK,SAA5D,UACE,cAAC,IAAD,CAAMZ,MAAM,EAAMJ,WAAW,EAAMJ,UAAWF,EAAQy+rB,UAAtD,SACE,cAAC,IAAD,CAAkB57wB,KAAK,WAEzB,cAAC,IAAD,CAAM69E,MAAM,EAAZ,SACG7tD,EAAE,+BAiDT,OANA0Y,aAAgB,WACV6nB,GACFmqmB,EAAUnqmB,KAEX,CAACA,IAGF,eAAC,IAAD,CACEq+C,KAAMA,EACNg6B,QAAS2+R,EACT+qB,SAAU,WACgB,oBAAbA,GACTA,IAEF1jZ,EAAS,IAAI4J,IAA+B,CAAErK,MAAO,CAAEygE,MAAM,GAAS1pE,GAAIq2uB,KAC1E5uY,EAAc,GACd2vY,IAAa,IAEfx+pB,WAAW,EACXv9B,SAAyB,IAAfi2S,EAAmB,KAAO,KACpCi7W,qBAAqB,EAbvB,UAeE,eAAC,IAAD,CAAap0pB,UAAWF,EAAQisgB,YAAhC,UACE,cAAC,IAAD,CAAal/e,MAAO,YADtB,IACqCl6E,EAAE,qCAEvC,cAAC,IAAD,CAAY84F,QAASy+S,EAAYvna,KAAK,QAAQq9E,UAAWF,EAAQsxrB,YAAjE,SACE,cAAC,IAAD,MAEF,eAAC,IAAD,CAASj4Y,WAAYA,EAAYgE,YAAY,WAAWr9S,QAAS,CAAC3hE,KAAM2hE,EAAQ4+rB,aAAhF,UACE,cAAC,IAAD,UACE,cAAC,IAAD,UACE,cAAC,IAAD,CACElzoB,OAAQ,SAAAx8H,GAAC,OAAIgwwB,GAAYC,IAAa,GAASF,GAAoB,IACnExzoB,QAAS,SAAAv8H,GAAC,OAAI+vwB,GAAoB,IAClCxtqB,KAAMutqB,EACNhsK,cAAc,EACd9kgB,QAASqwqB,EACTn8W,YAAaA,GACbD,cAAetvY,EAAE,6BACjBkrV,cAAe,SAAAjrU,GAAO,OAAIA,GAC1BA,QAASyruB,EAAsB,GAAKh4oB,EAAO78H,WAAa,GACxDy+H,eAAgB,SAAC7gB,GAAD,OAA0BA,EAAOz8G,IAAI,SACrDy0T,aAjFS,SAACh4M,GACpB,IAAMwzG,EAAYxzG,EAAO5/F,MAAM,CAAC,YAAa,OAAQ,SAE/C03vB,EAAc,SAAA/yZ,GAClB,IAAMgzZ,EAAa/3pB,EAAO5/F,MAAM,CAAC,QAASqsN,EAAUs3a,EAAch/R,IAClE,OAAOgzZ,EAAU,UAAMhzZ,EAAN,aAAmBgzZ,GAAe,KAGrD,OAAO,eAAC,IAAD,CAAM/+rB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,gBAAjE,UACL,eAAC,IAAD,CAAMN,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqB,QAAS,EAAGlB,UAAWF,EAAQy8C,aAAxF,UACE,cAAC,IAAD,CAAM/7C,MAAM,EAAZ,SACE,cAAC,IAAD,CAAMJ,WAAW,EAAME,UAAU,SAASI,QAAQ,SAAlD,SAEK0mC,EAAOz8G,IAAI,UAIR,cAAC,IAAD,CAASmmH,MAAK,UAAK8pG,EAAL,iBAAd,SACA,cAAC,IAAD,CAAQ/tH,MAAM,UAAU7sB,UAAS,UAAKF,EAAQ84R,OAAb,YAAuB94R,EAAQn9E,MAAhE,SAAyEi4N,EAAU,OAJnF,cAAC,IAAD,CAAS9pG,MAAO,wCAAhB,SACA,cAAC,IAAD,CAAuB9wC,UAAWF,EAAQn9E,KAAMkqG,MAAM,kBAQhE,cAAC,IAAD,CAASikB,MAAO1J,EAAOz8G,IAAI,QAA3B,SACE,cAAC,IAAD,CAAM61E,MAAM,EAAMR,UAAS,UAAKF,EAAQ0+rB,SAAb,YAAyB1+rB,EAAQy8C,cAA5D,SACGnV,EAAOz8G,IAAI,eAIlB,cAAC,IAAD,CAASmmH,MAAK,gBAAW1J,EAAO5/F,MAAM,CAAC,QAASqsN,EAAUs3a,EAAc,UAAY,IAAtE,kBAAmF/jiB,EAAO5/F,MAAM,CAAC,QAASqsN,EAAUs3a,EAAc,UAAY,IAA9I,kBAA2J/jiB,EAAO5/F,MAAM,CAAC,QAASqsN,EAAUs3a,EAAc,UAAY,KAApO,SACE,eAAC,IAAD,CAAM/qkB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqB,QAAS,EAAGR,QAAQ,eAAeV,UAAWF,EAAQ6+rB,eAA/G,UACE,cAAC,IAAD,CAAMv+rB,WAAW,EAAMM,QAAQ,SAASF,MAAM,EAAMR,UAAWF,EAAQy8C,aAAvE,SAAqF,sBAAMv8C,UAAWF,EAAQy8C,aAAzB,SAAwC2ipB,EAAY,YACzI,cAAC,IAAD,CAAM9+rB,WAAW,EAAMM,QAAQ,SAASF,MAAM,EAAMR,UAAWF,EAAQy8C,aAAvE,SAAqF,sBAAMv8C,UAAWF,EAAQy8C,aAAzB,SAAwC2ipB,EAAY,YACzI,cAAC,IAAD,CAAM9+rB,WAAW,EAAMM,QAAQ,SAASF,MAAM,EAAMR,UAAWF,EAAQy8C,aAAvE,SAAqF,sBAAMv8C,UAAWF,EAAQy8C,aAAzB,SAAwC2ipB,EAAY,qBAiDrI91pB,cAAe,SAACp6G,EAAGo1H,EAAYjS,GAAiBiS,GAAyB,UAAXjS,GAAsB0koB,EAAazynB,IACjGhiB,SAAU,SAACpzG,EAAG1M,GAAeA,IAC3BivC,EAAS,IAAIotF,KAAmBr8H,EAAMqI,IAAI,MAAOrI,IACjDivC,EAAS,IAAI4lG,IAAwB,CAAE1vG,WAAYnlC,EAAMqI,IAAI,eAC7D4mC,EAAS,IAAIytF,KAAoB,CAAEC,kBAAmB38H,EAAMqI,IAAI,eAChEk0wB,EAAkBv8wB,GAClBgtY,EAAc,KAEhB7rD,YAAa,SAAClqS,GAAD,OACX,cAAC,IAAD,2BACMA,GADN,IAEEq4E,YAAaj/F,EAAE,8CACf8tF,WAAW,EACXzgC,UAA0B,IAAfm5S,EAAmB,GAAKr5S,EAAQ2+rB,kBAC3Ct8rB,OAAO,SACP47O,WAAW,YAOL,IAAfo7D,GAAoB,eAAC,IAAD,WACnB,cAAC,IAAD,UAAYxmW,EAAE,yCACd,cAAC,IAAD,UACE,cAAC,IAAD,CACEg7kB,SAAS,2BACTtne,OAAQu4oB,EACRhnpB,UAAU,EACV6yhB,aAAc,SAAA4rE,GAASvlrB,EAAMsuuB,kBAAkB/oD,GAAOnsT,KACtDihP,aAAcA,mB,6BChM5B,IAAI59b,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wUACD,kBAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sOACD,iBAEJ3K,EAAQywH,QAAUq4I,G,sQCwLL1qD,EAAY,uBAGnBo9K,E,4MAkCGr5Q,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAMI,EAAKg3B,MALPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAC,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QACA1e,EALF,EAKEA,cAEI6wD,EAAY/7G,OAAO47G,GACP,MAAdA,GACEnhE,MAAMshE,IACRjX,IAAmB,sBAAuB55C,EAAc,CACtD6wD,UAAWH,EACXr9G,YAAaq9G,EACbtwF,OAAQ,iBACR+tB,KAAI,OAAEwiE,QAAF,IAAEA,OAAF,EAAEA,EAAWj/F,UAGrBosB,EAAS,IAAIgzE,IAAkBD,IAC/B/yE,EAAS,IAAIizE,IAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAOuzC,EAAM,mBAAoBD,EAAU77F,MAAK,SAAC2wV,GACxD,OAAOA,EAAQvuW,IAAI,QAAUw5G,QAG/B5yE,EAASu/B,YAAOuzC,EAAM,mBAAoB,OAE5ClyC,EAAQ,wBACRA,EAAQ,oBACJr4D,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAKI,EAAKg3B,MAJPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAN,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QAEgB,MAAduyC,GACFnzE,EAAS,IAAIqzE,IAAcF,IAC3BnzE,EAASu/B,YAAOuzC,EAAM,oBAAqBM,EAAUp8F,MAAK,SAACuwV,GACzD,OAAOA,EAASnuW,IAAI,QAAU+5G,QAGhCnzE,EAASu/B,YAAOuzC,EAAM,oBAAqB,OAE7ClyC,EAAQ,oBACJr4D,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAII,EAAKh0E,MAHPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OACAV,EAHF,EAGEA,KAGA9yE,EADY,MAAVuzE,EACOh0C,YAAOuzC,EAAM,gBAAiBU,EAAOx8F,MAAK,SAACwwV,GAClD,OAAOA,EAAKpuW,IAAI,QAAUm6G,MAGnBh0C,YAAOuzC,EAAM,gBAAiB,Q,uDA/F3C,YAIEW,EADIp+G,KAAKkqC,MADPk0E,kB,gCAKJ,SAA0BC,GACxB,IACc2xiB,EACV3xiB,EADFlD,WAEF,EAGIn7G,KAAKkqC,MAFPixE,EADF,EACEA,WACAmD,EAFF,EAEEA,cAGF,GAAkB,MAAdnD,EAAoB,CACtB,IAAMuC,EAAYvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OACrC,MAAlBovoB,GAA0BtyiB,IAAcsyiB,EAAepvoB,MAAM,CAAC,WAAY,UAAW,QACvF5gB,KAAKs9G,cAAcI,GAAW,GAEhC,IAAMI,EAAa3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OACvC,MAAlBovoB,GAA0BlyiB,IAAekyiB,EAAepvoB,MAAM,CAAC,WAAY,WAAY,QACzF5gB,KAAK69G,eAAeC,GAAY,GAIhCQ,IAAoBh5G,aAAGg5G,EAAeD,EAAUC,gBAClDt+G,KAAKkqC,MAAMygC,U,oBAuEf,WAAiB,IAAD,OACd,EAWI3qE,KAAKkqC,MAVPm4R,EADF,EACEA,aACA/F,EAFF,EAEEA,SACAvwS,EAHF,EAGEA,EACAyxF,EAJF,EAIEA,UACAO,EALF,EAKEA,UACAI,EANF,EAMEA,OACA73E,EAPF,EAOEA,SAPF,IAQE60E,kBARF,MAQevoG,gBARf,EAUE+iX,GAVF,EASElB,WATF,EAUEkB,2BAGIrjB,EAAUn3P,EAAWv6F,MAAM,CAAC,WAAY,aAAehO,gBACvDs/V,EAAW/2P,EAAWv6F,MAAM,CAAC,WAAY,cAAgBhO,gBAE/D,OACE,uBACE0pT,SAAU+F,EAAa/F,GACvBhhN,MAAO,CACLx/B,QAAS,UAHb,UAME,eAAC,IAAD,CACEtC,WAAW,EACXM,QAAQ,aACRb,WAAW,SACXqB,QAAS,EAJX,UAME,cAAC,IAAD,CACEV,MAAM,EACNQ,GAAI,GACJF,GAAI,GACJF,GAAI,GAJN,SAME,cAAC,QAAD,CACE9vC,MAAO,CACLpJ,MAAO/U,EAAE,gCAAiC4pW,GAC1Cv6X,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,OACLwrG,SAAU,CAACmqF,KACX7qH,UAAWwgC,QAGf,cAAC,IAAD,CACElgC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,4BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,yBAEjCkzC,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,cACfp9G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,sBACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,kCACT6tF,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,0BAEjCkzC,iBAAiB,CAEfC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAW,CACT6B,SAAUx7G,KAAK69G,eACf39G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,YAGtB/T,KAAK,uBACL8qE,UAAWslC,QAOf,cAAC,IAAD,CACEhlC,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,sBAEjCkzC,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,WACf/9G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,WAAa2vV,EAAS3vV,YAG5C/T,KAAK,mBACL8qE,UAAWslC,WAQhBt4E,S,GAvQyB7B,iBAiTnBwwC,sBACbgG,aAxba,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ8kE,SAAU,EACVk1C,OAAQ,KAEVq9M,KAAM,CACJrzP,OAAQL,EAAMZ,UAAY,GAM5B,UAAW,CACT,kBAAmB,CACjBc,QAAS,OACTnC,WAAY,SACZ4hD,OAAQ,EACRtJ,OAAQ,OACRwJ,WAAY,cACZ,UAAW,CACTlT,UAAW,SAGf,8BAA+B,CAC7BxrC,SAAU,EACVjB,QAAS,OACTC,SAAU,QAEZ,+BAAgC,CAC9BE,OAAQ,GAEV,gFAAiF,CAC/EO,QAAS,GAEX,oBAAqB,CACnBA,QAA2B,EAAlBZ,EAAMZ,WAEjB,gBAAiB,CACfc,QAAS,yBACTU,QAAS,EACTy1C,OAAQ,OACRj2C,MAAO,IACPqtR,QAAS,OACT9tO,OAAQ,QAEV,sBAAuB,CACrBE,WAAY,cACZF,OAAQ,EACR/+C,QAAS,EACTupC,OAAQ,UACRjqC,QAAS,eACTg/L,WAAY,UACZjzJ,SAAU,UACV5rC,OAAQ,EACRotR,QAAS,GAEX,qDAAsD,CACpD1rP,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACNC,MAAO,EACP+5G,OAAQ,EACRn5C,QAAS,OACTnC,WAAY,SACZmhM,WAAYl/L,EAAM82C,WAAWooJ,WAC7BjzJ,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCtpM,QAAS,GAEX,sBAAuB,CACrBoxC,QAAS,IACTjnB,MAAO/qB,EAAM+pC,QAAQU,OAAOC,MAC5BtqC,MAAO,QAET,qBAAsB,CACpB0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzB9kB,SAAU,WACV1iG,KAAM,EACN+5G,IAAI,eAAD,OAAiBp5C,EAAMZ,UAAvB,OACHgB,MAAO,OACP0lD,OAAQ,EACR81I,UAAWo5Y,IAEb,qDAAsD,CACpDroiB,UAAW,QAEb,eAAgB,CACdivJ,UAAWo5Y,GACX3oW,UAAW,QAEb,mBAAoB,CAClBpsO,UAAW,eAEb,yCAA0C,CACxC8qB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5B59J,OAAQ,UACRkM,OAAQ,GACRj2C,MAAO,GACP0lD,OAAQ,GAGV,oBAAqB,CACnB/jB,SAAU,WACVoN,SAAU,SACVmvJ,KAAM,gBACNjoJ,OAAQ,EACRj2C,MAAO,EACPC,QAAS,QA8Ubp8B,YAAgB,gBAChBgwE,IACAtQ,mBAxCsB,SAAC73E,EAAYyF,GAEnC,IAAM+oV,EAAW/oV,EAASgoV,WAAWxwX,IAAI2vqB,IAAiCv8S,gBAIpE/4Q,EADwB,MAAjB7xE,EAASuO,KAAevO,EAASuO,KAAOpoC,gBAG/C6qG,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACT+3Q,EAAQ,UACHj8K,EADG,QAENA,EAEN,OAAO,aACL97F,OACAa,gBACAk3Q,YACG1iV,YAAyB,CAC1B0qE,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR7D,WAAYC,wBAAcqC,GAC1Bk4Q,0BAA2B/qU,eAL1B9X,CAMA9L,OAGoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEft0E,eASF48R,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IAVPvyP,CAYb0hT,I,6BCzgBa,QAA0B,6C,mcCoJ5Bp9K,EAAY,mBAEZ8sL,EAAgB,SAACl7X,EAAQw/B,GACpC,IAAMyhB,EAAQjhD,EAAOpH,IAAI,SAEzB,OAAO,IAAIk7C,SAAQ,SAACC,EAASi3B,GAC3B,OAAOxrC,EAAS,IAAI4mC,IAA8B,CAChDnlB,QACAlN,UACAi3B,eAEDI,MAAK,YAAwC,IAAtCivB,EAAqC,EAArCA,cAAeC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,SAC/B,IAAKF,EAqBH,KApBe,WAAXC,GAAwBC,GAC1B/6D,EAAS,IAAIgK,IAAsB,CACjCtD,QAASs0D,IAAQ55E,EAAE,sCACnB65E,SAAU,QACVC,YAAa,CACX/kE,MAAO6kE,IAAQ55E,EAAE,0CACjB+5E,iBAAkB,KAClBC,QAAS,WACPp7D,EAAS,IAAIkK,KACblK,EAAS,IAAIonC,IAA8B,CACzC3lB,YAGJ45C,YAAa,CACXC,MAAO,QACPC,eAAgB,iBAKlB,CAAE95C,MAAO,mCAEhB,WAGD,MAAMohhB,kBAKJrvI,E,4MACGn3Z,MAAQ,CACb4/V,qBAAqB,EACrBQ,kBAAkB,G,EAGbqxY,gBAAkB,EAAKvuuB,MAAMwb,OAAO9kC,MAAM,CAAC,gBAAiB,UAAW,QAAUqa,eAAey9uB,IAAa/zpB,I,EAE7G23M,SAAW,WAChB,MAGI,EAAKpyR,MAFPS,EADF,EACEA,SADF,EAEEke,cAKA,EAAK+5D,SAAS,CAAEwkR,kBAAkB,IAIpCz8V,EAASv+B,YAAK+iB,8B,EAGTwpvB,kBAAoB,WACzB,EAAK/1pB,SAAS,CAAEwkR,kBAAkB,K,EAG7BwxY,iBAAmB,SAAChuqB,GACzB,MAGI,EAAK1gE,MAFPggC,EADF,EACEA,OACAv/B,EAFF,EAEEA,SAIFu/B,EAAO,UAAW0gC,GAClB,EAAKgY,SAAS,CAAEwkR,kBAAkB,IAClCz8V,EAASv+B,YAAK+iB,8B,EAGT21lB,YAAc,SAAChqV,GAAD,OAAgC,SAAC1yR,GACpD,IAAQykD,EAAkB,EAAK3iB,MAAvB2iB,cAEJzkD,EAAE4kB,OAAOtxB,OACX+qG,IAAmBq0L,EAAWjuO,O,EAoS3B26U,sBAAwB,WAC7B,IAAQZ,EAAwB,EAAK5/V,MAA7B4/V,oBACR,EAAKhkR,SAAS,CAACgkR,qBAAsBA,K,wDAlSvC,SAA0BvoR,GAExB,GACEr+G,KAAKkqC,MAAMo9D,IAAIvrG,MACZiE,KAAKkqC,MAAMo9D,MAAQ+W,EAAU/W,KAC5Bn5E,iBACwC,iCAAxCnuB,KAAKkqC,MAAMo9D,IAAIvjG,IAAI,iBACrB,EACc2qB,OAAemqvB,KAAQnqvB,OAAemqvB,MAAQ,IACvDzswB,KAAK,CAAE,iBAAkB,IAAI2hB,MAAOC,UAAY,MAAS,cAC9D,IAAMloB,EAAIkgC,SACJ2wC,EAAI7wE,EAAEmgC,cAAc,UACpBz4B,EAAI1H,EAAE4zM,qBAAqB,UAAU,GAC3C/iI,EAAEk5E,OAAQ,EAAMl5E,EAAE6vC,IAAM,yEAA0Eh5G,EAAEsga,WAAWgB,aAAan4V,EAAGnpE,M,kCAIrI,YAEEm9B,EADqB3qC,KAAKkqC,MAAlBS,UACC,IAAIkK,O,oBAGf,WACE,MAOI70C,KAAKkqC,MANPm4R,EADF,EACEA,aACAt2S,EAFF,EAEEA,EACAmtD,EAHF,EAGEA,QACAxzB,EAJF,EAIEA,OACAnE,EALF,EAKEA,WACA5W,EANF,EAMEA,SAEF,EAAkD3qC,KAAKgnC,MAA/C4/V,EAAR,EAAQA,oBAAqBQ,EAA7B,EAA6BA,iBAEvB9gM,EAAS5gJ,EAAO9kC,MAAM,CAAC,gBAAiB,UAAW,IAEzD,OACE,qCACE,cAAC,IAAD,IACA,cAAC,IAAD,CACE+pF,KAAMy8R,EACNziQ,QAAS3kI,KAAK24wB,kBACdzhd,UAAWl3T,KAAK44wB,mBAGhBr3tB,EACI,sBACA63B,UAAWF,EAAQ2gC,UACnByiN,SAAUqrE,YAAgCtlE,EAAariU,KAAKs8T,WAF5D,SAIA,cAAC,IAAD,CACE9iP,WAAW,EACXE,UAAU,SAFZ,SAIE,eAAC,IAAD,CACEF,WAAW,EACXI,MAAM,EAFR,UAIE,cAAC,IAAD,CACEJ,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACEprE,KAAK,QACL07B,MAAO,CACLpJ,MAAO/U,EAAE,oBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNs7G,SAAU,WACR7wE,EAAS,IAAIkK,MAEf6wF,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBm+uB,YACzCh8pB,WAAY,CACVC,eAAgB,cAAC,IAAD,CAAY3jC,UAAWF,EAAQ04C,OAC/C1U,SAAU7/G,QAAS2C,KAAKkqC,MAAMo0E,cAAsBv6G,IAAI,aAI9Di2G,SAAU,CACRgpF,IACAqB,KAEF/qH,UAAWwgC,QAGf,eAAC,IAAD,CACEtgC,WAAW,EACXI,MAAM,EAFR,UAIE,cAAC,QAAD,CACEprE,KAAK,YACL07B,MAAO,CACLpJ,MAAO/U,EAAE,wBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjBykI,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBo+uB,kBAG7C/+pB,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,MAEb,cAAC,QAAD,CACEtrG,KAAK,WACL07B,MAAO,CACLpJ,MAAO/U,EAAE,uBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjBykI,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBq+uB,iBAG7Ch/pB,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,SAGf,eAAC,IAAD,CACEtgC,WAAW,EACXI,MAAM,EAFR,UAKE,uBAAO15E,KAAK,OAAOsO,KAAK,QAAQ8sG,MAAO,CAAChgC,MAAO,EAAGi2C,OAAQ,EAAGrE,QAAS,KACtE,cAAC,QAAD,CACE1+G,KAAK,WACL07B,MAAO,CACLpJ,MAAO/U,EAAE,uBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM0mY,EAAsB,WAAa,OACzCp4X,KAAM,WACNmwG,aAAc,eACd+mB,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBs+uB,eACzCn8pB,WAAY,CACVC,eAAgB,cAAC,IAAD,CAAmB3jC,UAAWF,EAAQ04C,OACtD+vM,aACE,cAAC,IAAD,CACEz3M,MAAOn+F,EAAE,mBACTo+F,UAAU,MAFZ,SAIE,cAAC,IAAD,CACE/wC,UAAWF,EAAQ04C,KACnB/M,QAAS7kH,KAAKwnY,sBAFhB,UAK4B,IAAxBZ,EACA,cAAC,IAAD,IAAqB,cAAC,IAAD,WAQnC5sR,SAAU,CACRgpF,IACAuB,KAEFjrH,UAAWwgC,SAGf,cAAC,IAAD,CACEtgC,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACEprE,KAAK,kBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,8BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM0mY,EAAsB,WAAa,OACzCp4X,KAAM,WACNk3H,OAAQ1lI,KAAK8knB,YAAYnqlB,kBAAgBu+uB,sBACzCp8pB,WAAY,CACVC,eAAgB,cAAC,IAAD,CAAoB3jC,UAAWF,EAAQ04C,OACvD+vM,aACE,cAAC,IAAD,CACEz3M,MAAOn+F,EAAE,mBACTo+F,UAAU,MAFZ,SAIE,cAAC,IAAD,CACE/wC,UAAWF,EAAQ04C,KACnB/M,QAAS7kH,KAAKwnY,sBAFhB,UAK4B,IAAxBZ,EACA,cAAC,IAAD,IAAqB,cAAC,IAAD,WAQnC5sR,SAAU,CACRgpF,IACA4B,KAEFtrH,UAAWwgC,QAGf,cAAC,IAAD,CACElgC,MAAM,EADR,SAGE,mBAAM6+rB,gBAAN,CACEv4wB,KAAK,SACLw5G,QAAQ,YACRzT,MAAM,UAHR,SAKGl6E,EAAE,kCAMb,eAAC,IAAD,CACEytD,WAAW,EACXE,UAAU,SACVT,WAAW,SAHb,UAKE,cAAC,IAAD,CACEygC,QAAQ,KACR4B,MAAO,CAACgB,UAAW,GAAI+W,aAAc,IAFvC,SAIGtnG,EAAE,gCAEHu6K,IAAWprK,qBACT,qCACE,cAAC,IAAD,CACEw+E,QAAQ,QADV,SAGE,cAAC,IAAD,CACE3tF,EAAGA,EACH4wB,QAAS,kCACTG,WAAY,CACV,mBAAiBs8B,UAAWF,EAAQigsB,gBAAiB/rpB,KAAK,8BAA8BpgG,OAAO,QAAvF,cAId,cAAC,IAAD,CACE0sF,QAAQ,QADV,SAGE,cAAC,IAAD,CACE3tF,EAAGA,EACH4wB,QAAS,kCACTxxC,OAAQ,CACN8+F,KAAM,yCAERntD,WAAY,CACV,cAAC,IAAD,CAAmBswE,KAAK,wCAAwCpgG,OAAO,SAASgiT,IAAI,YAAzE,gBAKnB,eAAC,IAAD,CACEt1N,QAAQ,QADV,yEAG8D,mBAAGtgC,UAAWF,EAAQigsB,gBAAiB/rpB,KAAK,8BAA8BpgG,OAAO,OAAjF,+C,GAvUlDyX,aA4WfwwC,sBACbgG,aA5ba,SAACC,GAAD,MAA+B,CAC5C2+B,UAAW,CACTv+B,MAAO,QAET9B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,IAEzB+hX,SAAU,CACRhpU,aAAcn4C,EAAMZ,QAAQ,IAE9BkiX,YAAa,CACX1gX,QAASZ,EAAMZ,QAAQ,IAEzBmiX,WAAY,CACVlrU,OAAQ,QAEVK,KAAM,CACJ91C,QAASZ,EAAMZ,QAAQ,IAEzBnsE,MAAO,CACLg5G,SAAU,GACV/rC,QAAS,OACTM,eAAgB,SAChBuqB,MAAO,OACP6kL,SAAU,cAEZ5gK,MAAO,CACL/C,SAAU,SACVkM,aAAcn4C,EAAMZ,UACpB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5Bg0pB,gBAAiB,CACflzqB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,UA6Z/B6c,YAAgB,gBAChB0/D,mBApBsB,SAAC73E,EAAYyF,GACnC,IAEM6xE,EAAgB,CAAClyD,MAFC,IAAIozlB,gBAAgB/ymB,EAASgd,SAASw0I,QAChCl6L,IAAI,UAGlC,OAAO,aACLu6G,gBACAhX,IAAKx9C,cAAgB9iB,GACrBm0E,WAAYC,wBAAcm+F,EAAdn+F,CAAyBp0E,IAAUp0B,iBAC5CkgC,YAAyB,CAC1B4S,OAAQF,cACRjE,WAAYF,cACZwH,cAAeF,eAHd7V,CAIA9L,OAnBoB,SAAC2D,GAC1B,MAAO,CACLA,eAyBF48R,oBAAU,CACR9pN,KAAM87F,EACNiuH,kBAAkB,EAClB6+D,gBACAC,gBAAiB,CAAC,SAClBC,aAAc,SAACx5O,EAAQpiH,GAAT,OAAsBA,EAAS,IAAI+2B,KAA4B,CAC3EqrF,SACA+tI,UAAWngQ,kBAAgB6rW,eAE7BC,gBAAiB,SAAC7yX,EAAQ+2B,GAAT,OAAsBA,EAAS,IAAIi3B,KAA+B,CACjFk5N,UAAWngQ,kBAAgB6rW,iBAG/Br3Q,IAjBal6C,CAkBbkpX,I,6BC7jBa,QAA0B,gD,mGCmC1B47R,IA/BQ,SAAC,GAIjB,IAAD,IAHF78mB,gBAGE,aAFF88mB,mBAEE,MAFY,GAEZ,EADF1zrB,EACE,EADFA,SAEA,EAAgC7B,IAAMia,SAAS,MAA/C,mBAAOy0E,EAAP,KAAiBs9J,EAAjB,KACM9lL,EAAOttG,QAAQ81H,GAQfhG,EAAS,cAAC,IAAD,CAAYtI,QAPP,SAACsiB,GACjBA,EAAMjjB,kBACNusK,EAAYtpJ,EAAMziB,gBAK2BxH,SAAUA,EAA5C,SACX,cAAC,IAAD,MAEJ,OACI,qCAEQ88mB,EAAc,cAAC,IAAD,CAAS9vmB,MAAO8vmB,EAAhB,SACV,+BACK7smB,MAEIA,EAEhB7mF,EAAS,CAACqkE,OAAMwoB,WAAUwR,QAff,WAChB8rJ,EAAY,c,kMCKdjhK,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CwuD,OAAQ,CACJtuD,QAAS,OACTnC,WAAY,SACZ6C,QAAQ,OAAD,OAASZ,EAAMZ,QAAQ,GAAvB,MACP0qC,gBAAiB,UACjB+kR,IAAK7uT,EAAMZ,QAAQ,IAEvB8+rB,gBAAiB,CACbrkpB,cAAe,OACf5N,SAAU,UACVrrC,QAAS,EACTosC,WAAYhtC,EAAMZ,QAAQ,GAC1B,UAAW,CACP0qC,gBAAiB,gBAGzBq0pB,iBAAkB,CACdj+rB,QAAS,OACTk+rB,oBAAqB,kBACrBx9rB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,MAAnB,cAA8BY,EAAMZ,QAAQ,GAA5C,MACP0qC,gBAAiB,UACjB+kR,IAAK7uT,EAAMZ,QAAQ,IAEvBi/rB,aAAc,CACVtzqB,MAAO,2BA4FAq4kB,IA/EkB,SAAC,GAI3B,IAHHvwZ,EAGE,EAHFA,QACAujc,EAEE,EAFFA,WACAhrrB,EACE,EADFA,SAEM4yC,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAmDirvB,aAAU,GAAjDwC,EAAZ,EAAQ7guB,GAAgCwoX,EAAxC,EAAwCA,OAClCttM,EAAkBk6D,EAAQntQ,MAAM,CAAC,WAAY,oBAC7C64vB,EAAc1rf,EAAQhqR,IAAI,cAC1Bw4O,EAAagoF,YAAWx2C,EAAQhqR,IAAI,gBAAgB,GACpD8wN,EAAa0vG,YAAWx2C,EAAQhqR,IAAI,YACpCoyJ,EAAO43H,EAAQhqR,IAAI,QACnBouW,EAAOpkF,EAAQntQ,MAAM,CAAC,WAAY,OAAQ,UAC1CsxV,EAAWnkF,EAAQntQ,MAAM,CAAC,WAAY,WAAY,UAClD0xV,EAAUvkF,EAAQntQ,MAAM,CAAC,WAAY,UAAW,UAChD8lG,EAAO,UAAMqnK,EAAQhqR,IAAI,WAAagqR,EAAQhqR,IAAI,WAAa,KAAO,IAA/D,OAAoEouW,EAApE,aAA6ED,EAA7E,aAA0FI,GACjG/nC,EAAUx8C,EAAQntQ,MAAM,CAAC,YAAa,OAAQ,SAC9CsrQ,EAAc6B,EAAQhqR,IAAI,QAC1B21wB,EAAan1c,YAAWx2C,EAAQhqR,IAAI,iBACpCixW,EAAgBnhJ,EA9B1B,SAA0BA,GACtB,OAAOA,EAAgB7qN,KAAI,SAACgyC,EAAM7+C,GAC9B,OAAK6+C,EAAKj3C,IAAI,iBAAiBhI,KAGxBi/C,EAAKj3C,IAAI,iBAAiBiF,KAAI,SAACqvY,EAAOr1Y,GACzC,MAAO,CAACg4C,EAAKj3C,IAAI,SAAUs0Y,EAAMt0Y,IAAI,UAAU0d,KAAK,UAH7Cu5B,EAAKj3C,IAAI,YAKrB2H,UAAU9I,UAsB2B6xW,CAAiB5gJ,GAAmB,MAC5E,OACI,qCACI,yBAAQz6I,UAAWF,EAAQwwD,OAA3B,UAEQqkJ,EAAQhqR,IAAI,kBAAoB,cAAC,IAAD,CAASmmH,MAAOn+F,EAAE,yCAAlB,SAC5B,cAAC,IAAD,CAAmBk6E,MAAM,cAChB,cAAC,IAAD,CAASikB,MAAOn+F,EAAE,4CAAlB,SACT,cAAC,IAAD,CAAmBk6E,MAAM,cAGjC,cAAC,IAAD,CAASikB,MAAOgiK,EAAhB,SACI,cAAC,IAAD,CAAYxyK,QAAQ,KAAKpgC,UAAU,OAAOgiC,MAAO,CAAEqa,aAAc,WAAYtL,SAAU,SAAUoM,WAAY,SAAUn6C,SAAU,OAAjI,SACK4vM,MAGT,cAAC,IAAD,CACI9yM,UAAW2B,kBAAK7B,EAAQkgsB,gBAAiBlgsB,EAAQqgsB,cACjDl2Y,eAAe,EACft/G,oBAAoB,EACpBrqK,QAAQ,OACRkgB,QAAS4/oB,EAA6B,cAAC,IAAD,IAAsB,cAAC,IAAD,IAC5D30pB,QAASs8S,EANb,SAQKp1Y,EAAE,iCAGHulsB,GACI,cAAC,IAAD,UACK,SAACpnrB,GAAD,OAAW,cAAConrB,EAAD,aAAYvjc,QAASA,GAAa7jP,OAI1D,qBAAKoxE,MAAO,CAAE4M,WAAY,OAAQuO,WAAY,UAA9C,SACKnwF,OAGT,cAAC,IAAD,CAAU0hG,GAAIwxoB,EAAd,SACI,yBAASpgsB,UAAWF,EAAQmgsB,iBAA5B,SAEQ,CACI,CAAEv4uB,MAAO/U,EAAE,mCAAoCrwB,MAAK,OAAE+9wB,QAAF,IAAEA,IAAe,IACrE,CAAE34uB,MAAO/U,EAAE,gCAAiCrwB,MAAK,OAAE6gP,QAAF,IAAEA,IAAc,IACjE,CAAEz7M,MAAO/U,EAAE,mCAAoCrwB,MAAK,OAAEm5N,QAAF,IAAEA,IAAc,IACpE,CAAE/zL,MAAO/U,EAAE,6BAA8BrwB,MAAK,OAAEy6J,QAAF,IAAEA,IAAQ,IACxD,CAAEr1H,MAAO/U,EAAE,gCAAiCrwB,MAAK,OAAEgrH,QAAF,IAAEA,IAAW,IAC9D,CAAE5lF,MAAO/U,EAAE,gCAAiCrwB,MAAK,OAAE6uU,QAAF,IAAEA,IAAW,IAC9D,CAAEzpS,MAAO/U,EAAE,qCAAsCrwB,MAAK,OAAEs5W,QAAF,IAAEA,IAAiB,OACzE,CAAEl0U,MAAO/U,EAAE,mCAAoCrwB,MAAK,OAAEg+wB,QAAF,IAAEA,IAAc,QACtE1wwB,KAAI,SAAC4wE,EAAMz9E,GAAP,OAAiB,eAAC,IAAD,CAAwBu9G,QAAQ,UAAUzT,MAAM,cAAhD,UACnB,sBAAMqV,MAAO,CAAEihB,WAAY,QAA3B,SAAsC3iD,EAAK94C,QADxB,MACwC,+BAAO84C,EAAKl+E,UADnCS,e,uGCxFjD29b,IAhCG,SAAC,GAIZ,IAHHz/E,EAGE,EAHFA,gBAGE,IAFFI,mBAEE,aADFC,0BACE,MADmB,GACnB,EACM3uV,EAAM+xB,YAAe,gBAArB/xB,EACFmvD,EAAQwjD,cACRnQ,EAAoB78E,sBAAY0Y,eACtC,OACI,cAAC,IAAD,CACI4jE,IACI,cAAC,IAAD,aACI1yC,MAAM,MACNi2C,OAAO,MACPtrB,MAAO,CACH+e,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KACvC8I,YAAa/yC,EAAM+pC,QAAQE,QAAQ,MAEvC5pC,OAAQ1sE,OAAOqsE,EAAMZ,YACjBi0C,IAGZgsP,mBAAoBxuV,EAAE,oCACtB4uV,aAAc5uV,EAAE,8BAChB6uV,kBAAmB7uV,EAAE,mCACrBsuV,gBAAiBA,EACjBI,YAAaA,EACbC,mBAAoBA,M,oRCA1BlrP,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C62C,MAAO,CACH9U,SAAU,WACV3hC,MAAO,MACPi2C,OAAQ,MACRlH,SAAU,OACVrF,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzBjmD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7Bg6C,IAAI,MACJ/5G,KAAK,MACL8hH,UAAU,wBACVjhD,QAAS,OACTK,cAAe,SACfsuT,IAAK7uT,EAAMZ,QAAQ,IAEvBovD,OAAQ,CACJtuD,QAAS,OACTM,eAAgB,gBAChBzC,WAAY,cA6GL0gsB,IA1GwD,SAAC,GAAsC,IAApC5rf,EAAmC,EAAnCA,QAAShrK,EAA0B,EAA1BA,UAAc74E,EAAY,iBACnG8tmB,EAGDjqX,EAAQhqR,IAAI,SAASiF,KAAI,SAACqgD,GAAD,MAAW,CAAEpoB,GAAIooB,EAAKtlD,IAAI,MAAOyK,KAAM66C,EAAKtlD,IAAI,YAAYnB,UACpFs2E,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF6tvB,EAAU5zuB,SAASghhB,eAAe,aAClCr8gB,EAAW2F,wBAwBjB,OACI,mCACI,cAAC,IAAD,2BAAWpG,GAAX,IAAkBwuV,eAAe,EAAjC,SACI,eAAC,IAAD,CAAOt/S,UAAWF,EAAQ64C,MAA1B,UACI,sBAAK34C,UAAWF,EAAQwwD,OAAxB,UACI,cAAC,IAAD,CAAYhwB,QAAQ,KAApB,SAA0B3tF,EAAE,kCAC5B,cAAC,IAAD,CAAYuvF,MAAO,CAAE4M,WAAY,QAAUrD,QAAS,kBAAM36E,EAAMy6F,WAAhE,SACI,cAAC,IAAD,SAGR,cAAC,IAAD,CAAYjrB,QAAQ,QAApB,SAA6B3tF,EAAE,qCAC9Bg3F,EAAY,cAAC,IAAD,CAAYrJ,QAAQ,QAAQ4B,MAAO,CACxC0mB,KAAM,EACN5mD,QAAS,OACTM,eAAgB,SAChBzC,WAAY,SACZs4C,OAAQ,QALH,wBAOT,cAAC,IAAD,CAAiBwhL,UAzCnB,SAACn/R,GACf,GAAKA,EAAOk6L,aAAel6L,EAAOk6L,YAAY3xM,QAAUyX,EAAOqZ,OAAO9wB,MAGtE,GAAuC,4BAAnCyX,EAAOk6L,YAAYs+E,aAA6C2lL,YAAiBn+b,EAAOm4Q,aAA5F,CAEI,IAAM/qF,EAAQ+sF,EAAQhqR,IAAI,SACpBita,EAAevva,MAAMuN,KAAKgyL,GAChC,EAAkBgwO,EAAQ5ha,OAAOwE,EAAOqZ,OAAO9wB,MAAO,GAA/C+X,EAAP,oBACA88Z,EAAQ5ha,OAAOwE,EAAOk6L,YAAY3xM,MAAO,EAAG+X,GAE5C,IAAM2lwB,EAAoC9rf,EAAQrmR,IAAI,QAAS0hB,iBAAO4nZ,IAChEpmN,EAAWxhM,iBAAO,CAACywvB,IACzBlvuB,EAAS,IAAIqoE,IAA2B43G,IAExC,IAAMkvjB,EAAwB9oW,EAAQhoa,KAAI,SAACqgD,GAAD,OAAsBA,EAAKtlD,IAAI,SACzE4mC,EAAS,IAAI0uD,KAAgC,CACzC6c,UAAW63K,EAAQhqR,IAAI,MACvB64oB,WAAYk9H,YAuBJ,SACI,cAAC,IAAD,CACI1tf,YAAW,0BACX1yM,UAAW,WAFf,SAKQ,SAAC8tC,EAAU2jM,GACP,OACI,eAAC,IAAD,yBACI1vT,IAAK+rH,EAAS0lJ,UACV1lJ,EAASmoM,gBAFjB,cAIKqoV,EAAchvoB,KAAI,WAAe7M,GAAW,IAAvB8kC,EAAsB,EAAtBA,GAAIzyB,EAAkB,EAAlBA,KACtB,OACI,cAAC,IAAD,CAEIu9Q,YAAa+lL,YAAqB7wa,GAClC9kC,MAAOA,EACPgxT,mCAAmC,EAJvC,SAMK,SAAC3lM,EAAU2jM,GACR,IAAMrjH,EACF,eAAC,IAAD,yBAAUrsM,IAAK+rH,EAAS0lJ,SAAUqiG,SAAS,GAAU/nP,EAASqlM,gBAA9D,cACI,cAAC,IAAD,2BAAkBrlM,EAASmlM,iBAA3B,aACI,cAAC,IAAD,OAEJ,cAAC,IAAD,UACKn+S,QAIP8sG,EAAQkM,EAASqlM,eAAevxM,MACtC,MAAI,aAAcA,GACS,UAAnBA,EAAM2B,SACC8yM,uBAAajoH,EAAS8xkB,GAG9B9xkB,IAvBf,UACY7mK,OA2BnBumF,EAASwD,+B,wOCpG7Cule,EAA+B,+BAEtCwpL,E,4JAiBF,WACI,MAGI/5wB,KAAKkqC,MAFLgvC,EADJ,EACIA,QACAntD,EAFJ,EAEIA,EAGJ,OACI,cAAC,IAAD,CACIqtD,UAAWF,EAAQ3hE,KADvB,SAGI,eAAC,IAAD,CACI6hE,UAAWF,EAAQ60R,WACnBv0R,WAAW,EACXE,UAAU,SACVc,KAAK,SAJT,UAMI,eAAC,IAAD,CACIhB,WAAW,EACXE,UAAU,MACVc,KAAK,SAHT,UAKI,cAAC,IAAD,CACIpB,UAAWF,EAAQg1R,aACnBt8O,KAAM,CAAC,MAAO,eAElB,cAAC,IAAD,CAAYx4C,UAAWF,EAAQ80R,iBAAkBt0P,QAAQ,YAAYzT,MAAM,UAA3E,SAAsFN,IAAQ55E,EAAE,4CAEpG,eAAC,IAAD,CACIytD,WAAW,EACXJ,UAAWF,EAAQ8gsB,oBACnBtgsB,UAAW,SAHf,UAKI,cAAC,QAAD,CACIlrE,KAAK,6BACL8qE,UAAWszC,IACX1iF,MAAO,CACHpJ,MAAO/U,EAAE,qDACT2tF,QAAS,SACTmT,YAAY,EACZlT,WAAY,CACRp8D,cAAc,EACd0oD,MAAO,cAInB,cAAC,QAAD,CACIz3F,KAAK,kBACL8qE,UAAWszC,IACX1iF,MAAO,CACHpJ,MAAO/U,EAAE,0CACT2tF,QAAS,SACTmT,YAAY,EACZlT,WAAY,CACRp8D,cAAc,EACd0oD,MAAO,cAInB,cAAC,QAAD,CACIz3F,KAAK,mBACL8qE,UAAWszC,IACX1iF,MAAO,CACHpJ,MAAO/U,EAAE,2CACT2tF,QAAS,SACTmT,YAAY,EACZlT,WAAY,CACRp8D,cAAc,EACd0oD,MAAO,0B,GApFJxhE,aAgIxBwwC,sBACXuxhB,YAAW,CAACC,UAAU,IACtBxrhB,aAnCW,SAACC,GAAD,MAAmB,CAC9B3jE,KAAM,CACF8kE,SAAU,EACVf,MAAO,OACP0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,OAE9Cg8O,WAAY,CACRjyR,QAAS,QAEboyR,aAAc,CACV/mP,SAAU,GACV8K,WAAY,GAEhB+7O,iBAAkB,CACdtlO,YAAa,IAEjBsxoB,oBAAqB,CACjB/npB,WAAY,IAEhBhoB,KAAM,CACFioB,cAAeh3C,EAAMZ,QAAQ,QAgBjC60C,IACAhwE,YAAgB,gBAChBooR,oBAAU,CACN9pN,KAAM8ye,EACN/oR,kBAAkB,EAClBC,oBAAoB,IAExB5oN,mBAlBoB,SAACu7Q,EAAoBC,GACzC,IAAM78R,EAAS68R,EAAiB78R,OAEhC,OAAO1qD,YAAyB,CAC5BuW,KAAMqsF,YAAe,CAACl4C,YADnB1qD,CAEJsnV,MAGQnlT,CAWb8ksB,I,iOC9IWvpL,EAA8B,8BACrCypL,E,4JAiBJ,WACE,MAGIj6wB,KAAKkqC,MAFPgvC,EADF,EACEA,QACEntD,EAFJ,EAEIA,EAGJ,OACE,cAAC,IAAD,CACEqtD,UAAWF,EAAQ3hE,KADrB,SAGE,eAAC,IAAD,CACE6hE,UAAWF,EAAQ60R,WACnBv0R,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAME,eAAC,IAAD,CACEhB,WAAW,EACXE,UAAU,MACVc,KAAK,SAHP,UAKE,qBACEgsC,IAAKuvT,IACLz6V,MAAM,SAER,cAAC,IAAD,CAAYlC,UAAWF,EAAQ80R,iBAAkBt0P,QAAQ,YAAYzT,MAAM,UAA3E,SAAsFl6E,EAAE,2CAE1F,cAAC,IAAD,CACEqtD,UAAWF,EAAQ8gsB,oBADrB,SAGE,cAAC,QAAD,CACIxrwB,KAAK,gBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,qDACT2tF,QAAS,SACTmT,YAAY,EACZlT,WAAY,CACVp8D,cAAc,EACd0oD,MAAO,yB,GAxDYxhE,aAoGxBwwC,sBACbuxhB,YAAW,CAACC,UAAU,IACtBxrhB,aAnCa,SAACC,GAAD,MAAmB,CAChC3jE,KAAM,CACJ8kE,SAAU,EACVf,MAAO,OACP0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,OAE5Cg8O,WAAY,CACVjyR,QAAS,QAEXoyR,aAAc,CACZ/mP,SAAU,GACV8K,WAAY,GAEd+7O,iBAAkB,CAChBtlO,YAAa,IAEfsxoB,oBAAqB,CACnB/npB,WAAY,IAEdhoB,KAAM,CACJioB,cAAeh3C,EAAMZ,QAAQ,QAgB/Bn7B,YAAgB,gBAChBgwE,IACEo4M,oBAAU,CACR9pN,KAAM+ye,EACNhpR,kBAAkB,EAClBC,oBAAoB,IAExB5oN,mBAlBsB,SAACu7Q,EAAoBC,GAC3C,IAAM78R,EAAS68R,EAAiB78R,OAEhC,OAAO1qD,YAAyB,CAC9BuW,KAAMqsF,YAAe,CAACl4C,YADjB1qD,CAEJsnV,MAGUnlT,CAWbglsB,I,6BC5Ja1wjB,IAJD,SAAiBC,GAC7B,SAAUA,GAAaA,EAAUtlG,iBAAmBslG,EAAUpoF,kB,6BCcjD84oB,IAfa,SAA+B7zuB,GACzD,IAAIl7B,EAASk7B,EAAKl7B,OACdk4G,EAAYh9E,EAAKg9E,UACjB82pB,EAAgB9zuB,EAAK8zuB,cACrBC,EAAyB/zuB,EAAK+zuB,uBAC9BC,EAAqBh0uB,EAAKg0uB,mBAC1BnpW,EAAY7qY,EAAK6qY,UAErB,QAAIipW,KAIIjpW,EAAUtzZ,UAAUzS,EAAQk4G,GAAaA,EAAUl4G,UAAY+la,EAAUtzZ,UAAUw8vB,EAAwBC,M,wOCZtG,MAA0B,yC,yGCWnC7qpB,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C1B,UAAW,CACT4B,QAAS,OACTM,eAAgB,SAChBI,QAASZ,EAAMZ,QAAQ,GACvBgiC,UAAWphC,EAAMZ,QAAQ,IAE3B8qC,KAAM,CACJhqC,QAAS,OACTG,OAAQL,EAAMZ,QAAQ,EAAG,GACzBmB,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBJ,MAAO,IACPQ,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BugD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnC9nP,aAAcvsC,EAAMZ,QAAQ,GAC5B+qC,OAAQ,UACRmP,WAAY,+CACZ,UAAW,CACTkN,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,KACnC,aAAc,CACZumG,KAAM3tD,EAAM+pC,QAAQE,QAAQ7iF,MAE9B,aAAc,CACZumG,KAAM3tD,EAAM+pC,QAAQE,QAAQ,OAIlCm1pB,YAAa,CACXl/rB,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChB+rC,aAAc,MACdzC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCmO,aAAcn4C,EAAMZ,QAAQ,IAE9B4vC,MAAO,CACLqS,WAAY,IACZlJ,aAAcn4C,EAAMZ,QAAQ,GAC5B2yC,UAAW,UAEb0T,YAAa,CACX16B,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B/V,UAAW,cAuDAstpB,EAhDkC,SAAC,GAE3C,IADLC,EACI,EADJA,kBAEMthsB,EAAUs2C,IACV7kF,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACF0uvB,EAAqC/ouB,sBAAY8uG,eAQvD,OANA/7G,IAAM0B,WAAU,WACTs0uB,GACH9vuB,EAAS,IAAI+jB,QAEd,CAAC+rtB,EAAoC9vuB,IAGtC,sBAAKyuC,UAAWF,EAAQM,UAAxB,UACE,sBACEJ,UAAWF,EAAQksC,KACnBP,QAAS,kBAAM21pB,EAAkBnua,IAAequa,SAFlD,UAIE,qBAAKthsB,UAAWF,EAAQohsB,YAAxB,SACE,cAACj0X,EAAA,EAAD,MAEF,cAAC7sS,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgxC,MAAnD,SACGn+F,EAAE,4CAEL,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQynD,YAA/C,SACG50G,EAAE,0DAGP,sBACEqtD,UAAWF,EAAQksC,KACnBP,QAAS,kBAAM21pB,EAAkBnua,IAAesua,KAFlD,UAIE,qBAAKvhsB,UAAWF,EAAQohsB,YAAxB,SACE,cAACj0X,EAAA,EAAD,MAEF,cAAC7sS,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgxC,MAAnD,SACGn+F,EAAE,sCAEL,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQynD,YAA/C,SACG50G,EAAE,wD,sSC1EPyjG,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DlzN,QAAS,CACPy/B,QAAS,OACTK,cAAe,SACfxC,WAAY,SAEZuC,SAAU,KAEZo/rB,WAAY,CACVzzpB,SAAU,GACVkM,aAAcn4C,EAAMZ,QAAQ,IAE9B4npB,UAAW,CACTj8nB,MAAOy3f,KAAI,MAEbm9K,cAAe,CACb3za,UAAW,aACX5rR,MAAO,QAETw/rB,WAAY,CACVx+pB,UAAWphC,EAAMZ,QAAQ,MAE3B/Q,QAAS,CACPmS,eAAgB,SAChBw2C,cAAeh3C,EAAMZ,QAAQ,SAY3BygsB,GAAyB,SAAChtf,EAAmBy0V,EAA6Cw4J,GAAoC,IAAD,QAC3Hl1wB,EAAIioR,EAAQktf,eAClB,IAAKn1wB,EAAK,MAAO,GAEjB,IAAMkvN,EAAqB,GAgB3B,MAfA,CAAClvN,EAAEw5sB,UAAWx5sB,EAAE05sB,UAAU9ysB,SAAQ,SAACurI,GAAa,IAAD,UAC7C,GAAKA,EAAL,CACA,IAAMijoB,EAAqC,oBAAjBjjoB,EAAQ15H,KAAsB05H,EAAQ15H,OAAS05H,EACnEI,EAAY6ioB,EAAWj6uB,KAAX,UAAiBg3G,EAAQl0I,WAAzB,aAAiB,OAAAk0I,EAAc,OAC3C9xB,EAAY+0pB,EAAW/0pB,YAAX,UAAwB8xB,EAAQl0I,WAAhC,aAAwB,OAAAk0I,EAAc,eAAgB,GAClE7xB,EAAW80pB,EAAW90pB,WAAX,UAAuB6xB,EAAQl0I,WAA/B,aAAuB,OAAAk0I,EAAc,cAAe,GAC/D7rF,EAAQ8utB,EAAW9utB,QAAX,UAAoB6rF,EAAQl0I,WAA5B,aAAoB,OAAAk0I,EAAc,WAAY,GACtD/xB,EAAeg1pB,EAAWh1pB,eAAX,UAA2B+xB,EAAQl0I,WAAnC,aAA2B,OAAAk0I,EAAc,kBAAmB,GACjF+8E,EAAY5oN,KAAK,CACf6rI,QAASijoB,EACTx/wB,MAAO,CAACyqH,EAAWC,EAAUh6D,EAAO85D,GAAc36G,OAAOlO,SAASokB,KAAK,KACvEwf,GAAIo3G,QAID,CACL7pI,KAAMu/Q,EAAQv/Q,KACdk4G,SAAS,UAAC5gH,EAAE4gH,eAAH,eAAa8X,SAAU,GAChCu2F,QAASjvN,EAAEivN,QAAUr5G,KAAO51G,EAAEivN,SAAS+Y,MAAMrzL,OAAO,uBAAyB,GAC7EgP,SAAU,CACR6oT,SAAS,UAAAxsW,EAAEwsW,eAAF,eAAWrxU,IAAK,CAAEA,GAAIpyB,OAAO/I,EAAEwsW,QAAQrxU,IAAKvlC,MAAOoK,EAAEwsW,QAAQ52W,YAAUI,EAChFo2W,UAAU,UAAApsW,EAAEq1wB,qBAAF,eAAiBl6uB,IAAK,CAAEA,GAAIpyB,OAAO/I,EAAEq1wB,cAAcl6uB,IAAKvlC,MAAOoK,EAAEq1wB,cAAcz/wB,YAAUI,EACnGq2W,MAAM,UAAArsW,EAAEqsW,YAAF,eAAQlxU,IAAK,CAAEA,GAAIpyB,OAAO/I,EAAEqsW,KAAKlxU,IAAKvlC,MAAOoK,EAAEqsW,KAAKz2W,YAAUI,GAEtEmwH,SAAU,CACR4nG,gBAAiB/tN,EAAEkvX,cAAgB,CAAC,CAClC/zV,GAAIn7B,EAAEkvX,cAAc/zV,GACpBH,MAAOh7B,EAAEkvX,cAAct5X,MACvBA,MAAOoK,EAAEkvX,cAAct5X,MACvBs5W,cAAelvW,EAAEmvX,aAAe,CAAC,CAC/Bh0V,GAAIn7B,EAAEmvX,aAAah0V,GACnBH,MAAOh7B,EAAEmvX,aAAav5X,MACtBA,MAAOoK,EAAEmvX,aAAav5X,QACnB,KACF,IAEPs5N,cACAg0I,WAAYw5Q,EACZ/vQ,WAAYuoa,EACZ/tvB,OAAQ,YAKRmuvB,aAAcrtf,EAAQqtf,eAIpBC,GAAgB,SAACttf,GACrB,OAAOA,EAAQpwL,MACZpyF,QAAO,SAAAmrE,GAAC,uBAAIA,EAAEu9O,oBAAN,aAAI,EAAgBhzR,MAC5Bj4B,KAAI,SAAA0tE,GAAC,MAAK,CACTg9O,OAAQh9O,EAAEu9O,aAAchzR,GACxBqzV,WAAY,YACZp5M,IAAKxkG,EAAE4ksB,cAAgB,YAkPdC,GA9OiC,SAAC,GAM1C,IALL5wqB,EAKI,EALJA,KACA6wqB,EAII,EAJJA,iBACA3gG,EAGI,EAHJA,WACAl2iB,EAEI,EAFJA,QACAwlc,EACI,EADJA,OAEMjxf,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACFk8E,EAAS8zK,eACTpxO,EAAW2F,wBACXuc,EAAgBkgK,eAChB0ujB,EAAmB/puB,sBAAYgtG,eAC/BsyI,EAASt/O,sBAAYsP,gBACrBwhkB,EAA2B9wkB,sBAAY8uG,eACvC4/N,EAAmB1uU,sBAAY0jG,eAC/BqloB,EAAiE,MAA5Bj4J,EAE3C,EAA4B/9kB,IAAMia,SAA8B,YAAhE,mBAAO+mD,EAAP,KAAei2qB,EAAf,KACA,EAAwCj3uB,IAAMia,SAAS,GAAvD,mBAAOi9tB,EAAP,KAAqBC,EAArB,KACA,EAA4Cn3uB,IAAMia,SAAiD,IAAnG,mBAAOm9tB,EAAP,KAAuBC,EAAvB,KACMC,EAAat3uB,IAAMyG,QAAO,GAE1B8wuB,EAAiB,SAAC,GAgBjB,IAfLZ,EAeI,EAfJA,aACAnkZ,EAcI,EAdJA,YAcI,IAbJqoV,iBAaI,MAbQ,KAaR,MAZJE,gBAYI,MAZO,KAYP,EAXJy8D,EAWI,EAXJA,aACA/gmB,EAUI,EAVJA,IACAhlE,EASI,EATJA,UAUMmlR,EAAe,CACnB9qL,UAAW31K,YAAUshvB,4BACrBnwtB,YAAac,IACb+wQ,WAAW,yBACTw9c,gBACGnkZ,GAFK,IAGRqoV,UAAWA,EAAS,eAAQA,GAAc,KAC1CE,SAAUA,EAAQ,eAAQA,GAAa,KACvCy8D,eACA/gmB,MACAhlE,eAIJvrE,EAAS,IAAIsiL,KAA4B,CACvCouK,mBAIJ52V,IAAM0B,WAAU,WACd,GAAKwkE,GAAoC,IAA5B6wqB,EAAiB35wB,SAAgBk6wB,EAAWj0uB,QAAzD,CACAi0uB,EAAWj0uB,SAAU,EACrB,IAAMkzuB,EAAoB56Z,EAAmB,CAACA,EAAiB7hW,QAAU,GAEnE49vB,EAAS,uCAAG,oCAAAx2wB,EAAA,6DACVy2wB,EAAuB,GACvBzgI,EAAiD,GACnDw3B,EAAU,EAERkpG,EALU,+BAAA12wB,EAAA,MAKY,WAAOooR,GAAP,2CAAApoR,EAAA,6DACpB8wE,EAAOsksB,GAAuBhtf,EAASy0V,EAA0Bw4J,GAD7C,SAEP/yqB,EAAOJ,QAAQ,CAChCvB,QAAS,UACTC,SAAU,gBACV9vB,SALwB,UAEpBqrE,EAFoB,OAQpB0/Q,EARoB,OAQL1/Q,QARK,IAQLA,GARK,UAQLA,EAAK56G,eARA,iBAQL,EAAc6mP,eART,iBAQL,EAAuBA,eARlB,iBAQL,EAAiC,UAR5B,aAQL,EAAqC9sP,GARhC,sBASC,IAAIr5B,MAAM,6BATX,cAWtBmmR,EAAQqtf,eACJkB,EAAavuf,EAAQpwL,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQkuf,gBACtD38D,EAFkB,UAENvxb,EAAQktf,sBAFF,aAEN,EAAwB37D,UACpCE,EAHkB,UAGPzxb,EAAQktf,sBAHD,aAGP,EAAwBz7D,SAEzCw8D,EAAe,CACbZ,aAAcrtf,EAAQqtf,aACtBnkZ,YAAaxgT,EACb6ooB,UAAW1ssB,MAAI9N,MAAMw6sB,GAAaA,EAAU/gsB,OAAS+gsB,EACrDE,SAAU5ssB,MAAI9N,MAAM06sB,GAAYA,EAASjhsB,OAASihsB,EAClDy8D,aAAY,OAAEK,QAAF,IAAEA,GAAF,UAAEA,EAAYrod,oBAAd,aAAE,EAA0BhzR,GACxCi6I,IAAG,OAAEohmB,QAAF,IAAEA,OAAF,EAAEA,EAAYhB,aACjBplqB,UAAWsrT,KAITs2U,EAAgC,GAElC2jC,GACF3jC,EAAS1ruB,KACN67F,EAAOJ,QAAQ,CACdvB,QAAS,UACTC,SAAU,eACV9vB,KAAM,CAAEy/B,UAAWsrT,EAAcxwI,SAAQ9wR,KAAM,YAK/Cq8wB,EAAWlB,GAActtf,IAClBlsR,OAAS,GACpBi2uB,EAAS1ruB,KACN67F,EAAOJ,QAAQ25T,EAAc,CAC5Bl7T,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CAAEknB,MAAO,CAAEr7D,KAAMi6uB,OA7CH,UAkDpBt9tB,QAAQ+pc,WAAW8uP,GAlDC,4CALZ,sDA0DVnzoB,EAAQ,SAAC63I,GAAD,OAAgB,IAAIv9L,SAAQ,SAAAC,GAAO,OAAIrG,WAAWqG,EAASs9L,OA1DzD,SA2DMv9L,QAAQ+pc,WAC5BwyR,EAAiBxywB,KAAI,SAAC+kR,EAAS5xR,GAAV,OAAoBwoG,EAAc,IAARxoG,GAAao6E,MAAK,kBAAM8lsB,EAAoBtuf,UA5D7E,cA+DRrhR,SAAQ,SAACkH,EAAQzX,GACvB,IAAM4xR,EAAUytf,EAAiBr/wB,GACX,cAAlByX,EAAO6xF,QACT22qB,EAAWhwwB,KAAK2hR,EAAQ9sP,IACxBkyoB,MAEAnrpB,QAAQ7Z,MAAM,4BAA6B4/Q,EAAQv/Q,KAAMoF,EAAO23G,QAChEowhB,EAAOvvoB,KAAK,CAAEoC,KAAMu/Q,EAAQv/Q,KAAMrS,MAAOA,EAAQ,QAIrDy/wB,EAAgBzoG,GAChB2oG,EAAkBngI,GAClB+/H,EAAU,QACV7gG,EAAWuhG,GA7EK,4CAAH,qDAgFfD,OACC,CAACxxqB,EAAM6wqB,IAGV/2uB,IAAM0B,WAAU,WACTwkE,IACH+wqB,EAAU,YACVE,EAAgB,GAChBE,EAAkB,IAClBC,EAAWj0uB,SAAU,KAEtB,CAAC6iE,IAEJ,IAAMu1lB,EAAc27E,EAAeh6wB,OAAS,EAE5C,OAAK44wB,EAmBH,eAACzkd,EAAA,EAAD,CAAQrrN,KAAMA,EAAMruB,SAAS,KAAK47V,sBAAsB,EAAMC,sBAAsB,EAApF,UACE,eAACliH,EAAA,EAAD,CAAe78O,UAAWF,EAAQv9B,QAAlC,UACc,aAAX8pD,GACC,qCACE,cAACm8N,GAAA,EAAD,CAAkB7lU,KAAM,KACxB,cAACy9G,EAAA,EAAD,CAAYE,QAAQ,KAAKzT,MAAM,cAAcqV,MAAO,CAAEgB,UAAW,GAAI+W,aAAc,IAAnF,SACGtnG,EAAE,iDAIG,SAAX05E,IAAsBy6lB,GACrB,cAAC1mlB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAAEgB,UAAW,GAApE,SACGvwF,EAAE,0CAA2C,CAAE3W,MAAOumwB,MAG/C,SAAXl2qB,GAAqBy6lB,GACpB,qCACE,cAAC,KAAD,CAAW9mnB,UAAS,UAAKF,EAAQ0hsB,WAAb,YAA2B1hsB,EAAQgppB,aACtDy5C,EAAe,GACd,cAACniqB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAAE+X,aAAc,IAAvE,SACGtnG,EAAE,0CAA2C,CAAE3W,MAAOumwB,MAG3D,sBAAKvisB,UAAWF,EAAQ2hsB,cAAxB,UACE,cAACrhqB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,4CAEL,qBAAKqtD,UAAWF,EAAQ4hsB,WAAxB,SACGe,EAAe7ywB,KAAI,gBAAGwF,EAAH,EAAGA,KAAMrS,EAAT,EAASA,MAAT,OAClB,sBAAiBm/G,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,SAAU8wT,IAAK,GAAtE,UACE,cAAC,IAAD,CAAW9jS,MAAM,QAAQqV,MAAO,CAAE6L,SAAU,MAC5C,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc3sB,UAAU,OAAOgiC,MAAO,CAAEmb,WAAY,UAAtF,UACG1qG,EAAE,iDAAkD,CAAE5vB,UAAU,QAEnE,cAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU3sB,UAAU,OAAtD,SACG9qE,MANKrS,iBAeV,SAAXspG,GACC,eAAC2wN,GAAA,EAAD,CAAeh9O,UAAWF,EAAQ3P,QAAlC,UACG22nB,GACC,cAACv7kB,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAAS8f,EAApD,SACG54G,EAAE,8CAGP,cAAC44F,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAASsld,EAAQ7ud,MAAO,CAAEmM,aAAc,IAAnF,SACG17F,EAAE,wCArET,eAACiqS,EAAA,EAAD,CAAQrrN,KAAMA,EAAMruB,SAAS,KAA7B,UACE,eAAC25O,EAAA,EAAD,CAAe78O,UAAWF,EAAQv9B,QAAlC,UACE,cAAC,KAAD,CAAWy9B,UAAS,UAAKF,EAAQ0hsB,WAAb,YAA2B1hsB,EAAQgppB,aACvD,cAAC1onB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAcqV,MAAO,CAAEgB,UAAW,GAApE,SACGvwF,EAAE,wDAGP,cAACqqS,GAAA,EAAD,CAAeh9O,UAAWF,EAAQ3P,QAAlC,SACE,cAACo7C,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAAS8f,EAASrpB,MAAO,CAAEmM,aAAc,IAApF,SACG17F,EAAE,6B,UCtSXywvB,GAAgB,EACPC,GAAiB,kCAAgBD,GAAhB,YAAiCzuvB,KAAK+xB,QAEhE48tB,GAAmB,EAGVlsY,GAAgB,SAAChiY,GAAD,MAA6B,CACxDyyB,GAH+B,oBAAmBy7uB,GAAnB,YAAuC3uvB,KAAK+xB,OAI3EtxC,OACAmvF,MAAO,GACPs+qB,aAAc,KACdU,uBAAwB,KACxBvB,aAAc,KACdwB,iBAAkB,OAClBC,mBAAoB,EACpBC,gBAAiB,KACjBx3pB,UAAU,EACV21pB,eAAgB,KAChB8B,kCAAmC,KACnCC,wBAAyB,KACzBC,oBAAqB,KACrBC,sBAAuB,OAGZC,GAAuB,SAACC,EAA2Bzqd,GAA5B,MAAgE,CAClG1xR,GAAIw7uB,KACJhpjB,KAAM,IAAIsuf,KAAK,GAAIpvZ,GACnBsB,aAAc,CAAEhzR,GAAIm8uB,EAAmB5zc,UAAW,kBAAmBqsV,aAAcljW,EAAU5oM,KAAM,GAAIhuH,KAAM,GAAIolV,SAAU,GAAInhP,OAAQ,IACvI67T,SAAU,IACV1tZ,MAAO,KACPmtwB,aAAc,OACdnnd,aAAa,IA6BFkpd,GAAiB,SAACtvf,GAAgC,IAAD,UACtDjoR,EAAIioR,EAAQktf,eAClB,IAAKn1wB,EAAK,OAAO,EACjB,IAAMw3wB,EAAuD,MAAhCzuwB,OAAM,UAAC/I,EAAEkvX,qBAAH,aAAC,EAAiB/zV,IACrD,UACE,UAAA8sP,EAAQv/Q,YAAR,eAAcgwH,UAAd,UACA14H,EAAEqsW,YADF,aACA,EAAQz2W,SADR,UAEAoK,EAAEq1wB,qBAFF,aAEA,EAAiBz/wB,SAFjB,UAGAoK,EAAEwsW,eAHF,aAGA,EAAW52W,QACXoK,EAAEkvX,iBACAsoZ,GAAwBx3wB,EAAEmvX,eAC5BnvX,EAAEivN,SACFr5G,KAAO51G,EAAEivN,QAAS,cAAc,GAAM7wB,Y,UC2G3Bq5kB,GAzKO,SAACC,GACrB,IAAM7yuB,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFu7E,EAAM51D,sBAAYoY,eAClB/C,EAAQrV,sBAAYoV,eACpB+F,EAAgBkgK,eAChB0wjB,EAAah5uB,IAAMyG,OAAuC,IAE1DwyuB,EAAkBj5uB,IAAMykF,aAAY,WACxC9qH,OAAO+M,OAAOsywB,EAAW31uB,SAASp7B,SAAQ,SAAAixwB,GAAK,OAAIl+a,cAAck+a,MACjEF,EAAW31uB,QAAU,KACpB,IAGHrD,IAAM0B,WAAU,WACd,OAAO,kBAAMu3uB,OACZ,IAEH,IAAM1B,EAAiB,SAAC,GAUjB,IATLZ,EASI,EATJA,aACAa,EAQI,EARJA,aACA/gmB,EAOI,EAPJA,IACAxmD,EAMI,EANJA,SAOM2mQ,EAAe,CACnB9qL,UAAW31K,YAAUgjvB,8BACrB7xtB,YAAac,IACb+wQ,WAAY,CACVw9c,eACAa,eACA/gmB,MACAxmD,aAGJ/pF,EAAS,IAAIsiL,KAA4B,CACvCouK,mBAIEwiZ,EAAmB,SAAC3nqB,GACpBunqB,EAAW31uB,QAAQouE,KACrBupP,cAAcg+a,EAAW31uB,QAAQouE,WAC1BunqB,EAAW31uB,QAAQouE,KAIxB4nqB,EAAmB,SAAC5nqB,EAAmB/nG,GAC3CqvwB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BACFA,GADL,IAEEmnsB,iBAAkB,SAClBE,gBAAiB3uwB,GAAS4d,EAAE,qDAK5BgyvB,EAA4B,SAAC7nqB,EAAmBl7D,GACpD,IAAMi8U,EAAW,OAAGj8U,QAAH,IAAGA,OAAH,EAAGA,EAAMA,KACpBiguB,EDxC2B,SAAC/hf,GAAsC,IAAD,kBACzE,IAAKA,EAAO,OAAO,KACnB,IAAM87F,EAAa,OAAG97F,QAAH,IAAGA,GAAH,UAAGA,EAAKjtK,gBAAR,iBAAG,EAAe4nG,uBAAlB,aAAG,EAAiC,GACjDohK,EAAY,OAAG/7F,QAAH,IAAGA,GAAH,UAAGA,EAAKjtK,gBAAR,iBAAG,EAAe4nG,uBAAlB,iBAAG,EAAiC,UAApC,iBAAG,EAAqCmhJ,qBAAxC,aAAG,EAAqD,GACpE1C,EAAO,OAAGp5E,QAAH,IAAGA,GAAH,UAAGA,EAAKzvO,gBAAR,aAAG,EAAe6oT,QACzBJ,EAAQ,OAAGh5E,QAAH,IAAGA,GAAH,UAAGA,EAAKzvO,gBAAR,aAAG,EAAeyoT,SAC1BC,EAAI,OAAGj5E,QAAH,IAAGA,GAAH,UAAGA,EAAKzvO,gBAAR,aAAG,EAAe0oT,KACtBqtW,EAAQ,OAAGtmb,QAAH,IAAGA,OAAH,EAAGA,EAAKsmb,SAChBF,EAAS,OAAGpmb,QAAH,IAAGA,OAAH,EAAGA,EAAKomb,UAEvB,MAAO,CACLpzb,YAAagN,EAAIhN,aAAe,GAChCxlK,QAASwyK,EAAIxyK,SAAW,GACxByrP,MAAU,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMlxU,IAAN,2BAAgBkxU,GAAhB,IAAsBlxU,GAAIpyB,OAAOsjW,EAAKlxU,MAAQ,KACpDk6uB,eAAuB,OAARjpa,QAAQ,IAARA,OAAA,EAAAA,EAAUjxU,IAAV,2BAAoBixU,GAApB,IAA8BjxU,GAAIpyB,OAAOqjW,EAASjxU,MAAQ,KACzEqxU,SAAgB,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASrxU,IAAT,2BAAmBqxU,GAAnB,IAA4BrxU,GAAIpyB,OAAOyjW,EAAQrxU,MAAQ,KAChE+zV,eAA4B,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAe/zV,IAAK+zV,EAAgB,KACnDC,cAA0B,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAch0V,IAAKg0V,EAAe,KAChDqqV,WAAoB,OAATA,QAAS,IAATA,OAAA,EAAAA,EAAWr+qB,IAAKq+qB,EAAY,KACvCE,UAAkB,OAARA,QAAQ,IAARA,OAAA,EAAAA,EAAUv+qB,IAAKu+qB,EAAW,KACpCw+D,cAAiB,OAAH9kf,QAAG,IAAHA,OAAA,EAAAA,EAAK8kf,eAAgB,KACnCC,aAAgB,OAAH/kf,QAAG,IAAHA,OAAA,EAAAA,EAAK+kf,cAAe,KACjClpjB,QAASmkE,EAAInkE,SAAW,ICkBDmpjB,CAAsBjnZ,GACzCgkZ,IAAc,OAAIjguB,QAAJ,IAAIA,OAAJ,EAAIA,EAAMmjuB,eAC1BlD,EAAelmjB,QAAUr5G,KAAOoyH,IAAI9yL,EAAKmjuB,aAAazxhB,QAAQ/tO,IAAI,EAAG,QAAQ87B,OAAO,eAEtF+iuB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAAM,IAAD,IAChC,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAM6msB,EAAa7msB,EAAEkoB,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAOw0C,EAAEwmsB,gBAC1CmC,EAAUpjuB,EAAKoiuB,kBACfiB,EAAYrjuB,EAAK23Q,WAAL,OAAiB2pd,QAAjB,IAAiBA,GAAjB,UAAiBA,EAAY7ojB,YAA7B,aAAiB,EAAkBjlN,OAAQud,EAAE,iDACzDuyvB,EAAQF,EAAUjB,GAAqBiB,EAASC,GAAa,KACnE,OAAO,2BACF5osB,GADL,IAEEkoB,MAAO2grB,EAAK,CAAIA,GAAJ,mBAAc7osB,EAAEkoB,QAASloB,EAAEkoB,MACvCg/qB,wBAA6B,OAAL2B,QAAK,IAALA,OAAA,EAAAA,EAAOr9uB,KAAM,KACrC27uB,iBAAkB,YAClBC,mBAAoB,IACpB5B,iBACAzswB,MAAiB,OAAXyoX,QAAW,IAAXA,OAAA,EAAAA,EAAa/qG,cAAez2M,EAAEjnE,KACpC82G,UAAU,EACVy3pB,mCAA6C,OAAVT,QAAU,IAAVA,GAAA,UAAAA,EAAYrod,oBAAZ,eAA0BhzR,KAAM,KACnE+7uB,wBAAyBoB,GAAW,KACpCnB,oBAAqBoB,EACrBnB,sBAAuBliuB,EAAKuzS,aAAe,cAK3Cgwb,EAAiB,SAACroqB,EAAmBklqB,EAAsBa,EAAsB/gmB,GACrF,IAAMsjmB,EAAI,uCAAG,kCAAA74wB,EAAA,+EAEcspqB,KAAaK,yBAAyBhokB,EAAKvgD,EAAOq0tB,GAFhE,UAEHrypB,EAFG,OAGH/tE,EAHG,OAGI+tE,QAHJ,IAGIA,GAHJ,UAGIA,EAAU7hF,eAHd,aAGI,EAAmBu3uB,KAHvB,uBAKPZ,EAAiB3nqB,GACjB4nqB,EAAiB5nqB,GANV,0BAWM,aADTzQ,EAASzqD,EAAKyqD,SACmB,eAAXA,EAC1B+3qB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BAAKA,GAAZ,IAAeonsB,mBAAoB7huB,EAAK6gX,UAAYpmV,EAAEonsB,2BAEpC,cAAXp3qB,GACTo4qB,EAAiB3nqB,GACjB6nqB,EAA0B7nqB,EAAWl7D,GACrCghuB,EAAe,CAAEZ,eAAca,eAAc/gmB,MAAKxmD,SAAUhZ,KAAO1gE,EAAKmjuB,aAAa/oiB,KAAK15H,KAAO1gE,EAAK+0W,gBAEtG8tX,EAAiB3nqB,GACjB4nqB,EAAiB5nqB,EAAWl7D,EAAK7sC,OACjC6twB,EAAe,CAAEZ,eAAca,eAAc/gmB,MAAKxmD,SAAUhZ,KAAO1gE,EAAKmjuB,aAAa/oiB,KAAK15H,KAAO1gE,EAAK+0W,eAvB/F,kDA0BT8tX,EAAiB3nqB,GACjB4nqB,EAAiB5nqB,GA3BR,0DAAH,qDA+BVunqB,EAAW31uB,QAAQouE,GAAaspP,YAAYg/a,EAAM,MAG9CE,EAAe,uCAAG,WAAO3wf,GAAP,yBAAApoR,EAAA,iEAChB22wB,EAAavuf,EAAQpwL,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQkuf,uBADtC,IAEjBK,OAFiB,EAEjBA,EAAYrod,aAFK,wDAIhBP,EAAS4od,EAAWrod,aAAahzR,GAEvCu8uB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAO8sP,EAAQ9sP,GAAaw0C,EAC3B,2BAAKA,GAAZ,IAAemnsB,iBAAkB,UAAoBC,mBAAoB,EAAGC,gBAAiB,aARzE,kBAYG7tG,KAAaI,wBAAwB/nkB,EAAKvgD,EAAO2sQ,EAAQ4od,EAAWhB,cAZvE,kBAYdvypB,EAZc,kBAcfA,OAde,EAcfA,EAAUuoM,QAdK,wBAelBwsd,EAAiB/vf,EAAQ9sP,IAfP,2BAmBd+Z,EAnBc,OAmBP+tE,QAnBO,IAmBPA,GAnBO,UAmBPA,EAAU/tE,YAnBH,iBAmBP,EAAgB9T,eAnBT,aAmBP,EAAyBu3uB,KAEtCjB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAO8sP,EAAQ9sP,GAAaw0C,EAC3B,2BAAKA,GAAZ,IAAe2lsB,aAAcpguB,EAAK/Z,WAGhB,YAAhB+Z,EAAKyqD,OACP84qB,EAAexwf,EAAQ9sP,GAAI+Z,EAAK/Z,GAAIyyR,EAAQ4od,EAAWhB,cAC9B,cAAhBtguB,EAAKyqD,QACds4qB,EAA0Bhwf,EAAQ9sP,GAAI+Z,GACtCghuB,EAAe,CAAEZ,aAAcpguB,EAAK/Z,GAAIg7uB,aAAcvod,EAAQx4I,IAAKohmB,EAAWhB,aAAc5mpB,SAAUhZ,KAAO1gE,EAAKmjuB,aAAa/oiB,KAAK15H,KAAO1gE,EAAK+0W,gBAEhJ+tX,EAAiB/vf,EAAQ9sP,GAAI+Z,EAAK7sC,OAClC6twB,EAAe,CAAEZ,aAAcpguB,EAAK/Z,GAAIg7uB,aAAcvod,EAAQx4I,IAAKohmB,EAAWhB,aAAc5mpB,SAAUhZ,KAAO1gE,EAAKmjuB,aAAa/oiB,KAAK15H,KAAO1gE,EAAK+0W,eAjC9H,kDAoCpB+tX,EAAiB/vf,EAAQ9sP,IApCL,0DAAH,sDAwCrB,MAAO,CAAEy9uB,kBAAiBhB,oB,iFC1KtBlupB,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dt3P,KAAM,CACJwjH,WAAY7V,IAAK,KACjB2V,OAAO,GAAD,OAAK3/C,EAAMZ,QAAQ,KAAnB,qBAAqC4qC,IAAK,MAChDppC,QAASZ,EAAMZ,QAAQ,GACvB+qC,OAAQ,UACRuO,UAAW,IACXY,WAAY,yBACZ,UAAW,CACTkN,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,OAGvC0tU,WAAY,CACVj7O,cAAe,YACf1P,OAAQ,WAEVs5pB,SAAU,CACR14qB,MAAO,uBAET6vN,UAAW,CACTx5M,UAAWphC,EAAMZ,QAAQ,GACzBgC,SAAU,OACVwoP,UAAW,mBAsGA85c,GA5F+B,SAAC,GAIxC,IAHLC,EAGI,EAHJA,iBACAC,EAEI,EAFJA,kBACAC,EACI,EADJA,gBAEM7lsB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAA0B0Y,IAAMia,SAAwB,MAAxD,mBAAOvwC,EAAP,KAAc6wwB,EAAd,KAEM1yE,EAAS7nqB,IAAMykF,aAAY,SAAC+1pB,EAAuBC,GACvDF,EAAS,MAESE,EAAe3zwB,QAAO,SAAA4rE,GAAC,OAAIA,EAAE41E,OAAOt/I,MAAK,SAAArF,GAAC,MAAe,mBAAXA,EAAE4/F,WACpDnmG,OAAS,EACrBm9wB,EAASjzvB,EAAE,kCAAmC,CAAEhwB,KAAMq9B,sBAAsBL,kBAI1EkmvB,EAAcp9wB,OAASg9wB,EApDL,IAqDpBG,EAASjzvB,EAAE,4BAAFA,SAGV,CAAC8yvB,EAAkB9yvB,IAEhBokV,EAAiB1rU,IAAMykF,aAAY,SAAC+1pB,GACpCA,EAAcp9wB,OAASg9wB,EA3DL,KA+DHI,EAAc1zwB,QAAO,SAAAmrE,GAAC,OAAIoosB,EAAkBv1wB,SAASmtE,EAAEloE,SAC3D3M,OAAS,EACtBm9wB,EAASjzvB,EAAE,+CAIUkzvB,EAAc1zwB,QAAO,SAAAmrE,GAAC,OAAIA,EAAE36E,KAAOq9B,yBACvCv3B,OAAS,EAC1Bm9wB,EAASjzvB,EAAE,kCAAmC,CAAEhwB,KAAMq9B,sBAAsBL,kBAI9EgmvB,EAAgBE,MACf,CAACJ,EAAkBC,EAAmBC,EAAiBhzvB,IAE1D,EAAsDozvB,aAAY,CAChE7yE,SACAn8V,iBACAksM,QAASjjhB,wBAHH03U,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAequa,EAArC,EAAqCA,aAMrC,OACE,gCACE,eAACvmsB,EAAA,EAAD,yBACEO,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXP,WAAW,SACXa,QAAQ,SACRJ,UAAU,SACV4hC,MAAO,CACLomB,YAAa09oB,EAAe,eAAYtjxB,IAEtCg1W,KATN,cAWE,qCAAWC,MACX,cAACl4R,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,KAAD,CAAiButC,SAAS,QAAQlhB,MAAM,eAE1C,cAACptB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC4/B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQylsB,SAA/B,SACG5yvB,EAAE,4BAGP,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC0zC,GAAA,EAAD,CACEyhN,UAAU,OACV9oO,MAAM,UACN7sB,UAAWF,EAAQ82R,WACnB12R,UAAU,OAJZ,SAMGvtD,EAAE,kCAIR5d,GACC,cAACqrG,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,UAAUtgC,UAAWF,EAAQ48O,UAA/D,SACG3nT,Q,UC9FIkxwB,GAxB4B,SAAC,GAAsB,IAApBp+uB,EAAmB,EAAnBA,GAAIqF,EAAe,EAAfA,SAChD,EAOI8pa,aAAY,CAAEnva,OANhBuwL,EADF,EACEA,WACAvsL,EAFF,EAEEA,UACA8wT,EAHF,EAGEA,WACA15N,EAJF,EAIEA,UACA7H,EALF,EAKEA,WACA6mK,EANF,EAMEA,WAGI//K,EAA6B,CACjC+gB,UAAWy6N,KAAIgJ,UAAU7+V,SAASo7H,GAClC7H,aACAtH,QAASmuK,EAAa,GAAM,EAC5Bh2K,OAAQ,QAGV,OACE,yDAAK5pH,IAAKs6V,EAAYz6O,MAAOA,GAAWk2G,GAAgBvsL,GAAxD,aACGqB,M,wCCtBDkpF,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DywgB,UAAW,CACTn4pB,SAAU,GACV3rC,SAAU,IACVwpC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KAE3Cu8oB,eAAgB,CACd72oB,YAAa,EACbxW,cAAe,QA6CJstpB,GAlC8B,SAAC,GAA2C,IAAzC9jxB,EAAwC,EAAxCA,MAAO8/G,EAAiC,EAAjCA,SAAUrtG,EAAuB,EAAvBA,MAAO2nT,EAAgB,EAAhBA,UAChE58O,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAER,OACE,eAAC+0G,GAAA,EAAD,CAAa/kI,KAAK,QAAQoS,MAAOA,EAAjC,UACE,eAAC2zG,GAAA,EAAD,CACE1oC,UAAWF,EAAQomsB,UACnBpmsB,QAAS,CAAE6mB,OAAQ7mB,EAAQqmsB,gBAC3B7jxB,MAAOA,EACP8/G,SAAU,SAACpzG,GAAD,OAAOozG,EAASpzG,EAAE4kB,OAAOtxB,QACnCmpH,QAAS,SAACz8G,GAAD,OAAOA,EAAE87G,mBAClB6gjB,cAAc,EACdtjR,YAAa,SAACn8R,GACZ,OAAKA,EAGU,CACb+6E,QAASt0K,EAAE,oCACXs9B,KAAMt9B,EAAE,yBACR0zvB,KAAM1zvB,EAAE,mCAEIu5F,IAAuBA,EAP5B,sBAAMhK,MAAO,CAAErV,MAAOif,IAAK,MAA3B,SAAoCn5F,EAAE,+CATnD,UAmBE,cAACwwF,GAAA,EAAD,CAAU7gH,MAAM,UAAhB,SAA2BqwB,EAAE,sCAC7B,cAACwwF,GAAA,EAAD,CAAU7gH,MAAM,OAAhB,SAAwBqwB,EAAE,2BAC1B,cAACwwF,GAAA,EAAD,CAAU7gH,MAAM,OAAhB,SAAwBqwB,EAAE,uCAE3B+pS,GAAa,cAACiyE,GAAA,EAAD,UAAiBjyE,Q,8DC8DtB4pd,GAjHctwpB,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CACrEzpJ,KAAM,CACJyV,OAAO,aAAD,OAAe3V,IAAK,MAC1BuC,aAAcvsC,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,KACvB2iC,SAAU,YAEZ0iqB,UAAW,CACT9kpB,OAAO,aAAD,OAAe6ie,KAAI,MACzBj2e,aAAcvsC,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,KACvB2iC,SAAU,YAEZg7G,aAAc,CACZ17F,WAAY,KAEdqjpB,QAAS,CACPxksB,QAAS,OACTnC,WAAY,SACZ,yBAA0B,CACxBuoC,YAAatmC,EAAMZ,QAAQ,KAG/Bq4O,SAAU,CACRl8L,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhB+ukB,SAAU,CACRjukB,WAAY,SACZxwB,MAAOif,IAAK,MAEd26pB,YAAa,CACXpppB,WAAY,SACZtP,SAAU,IAEZ24pB,SAAU,CACR1ksB,QAAS,OACTnC,WAAY,SACZ+oD,KAAM,EACNxmD,SAAU,EACV,yBAA0B,CACxBgmC,YAAatmC,EAAMZ,QAAQ,KAG/BylsB,YAAa,CACX3ksB,QAAS,OACTnC,WAAY,SACZ+vO,WAAY,EACZ,yBAA0B,CACxBxnM,YAAatmC,EAAMZ,QAAQ,MAG/B+zmB,SAAU,CACRrpkB,gBAAiBE,IAAK,IACtB2V,OAAO,aAAD,OAAe3V,IAAK,MAC1BuC,aAAcvsC,EAAMZ,QAAQ,IAC5BwB,QAASZ,EAAMZ,QAAQ,GACvB+4C,aAAcn4C,EAAMZ,QAAQ,IAE9B0lsB,cAAe,CACbh7pB,gBAAiB04e,KAAI,IACrB7ie,OAAO,aAAD,OAAe6ie,KAAI,MACzBj2e,aAAcvsC,EAAMZ,QAAQ,IAC5BwB,QAASZ,EAAMZ,QAAQ,GACvB+4C,aAAcn4C,EAAMZ,QAAQ,IAE9B2lsB,YAAa,CACXj+oB,KAAM,EACN9Z,WAAYhtC,EAAMZ,QAAQ,GAC1BknC,YAAatmC,EAAMZ,QAAQ,IAE7B4lsB,gBAAiB,CACf3upB,OAAQ,GACR9J,aAAc,GAEhB04pB,eAAgB,CACd14pB,aAAc,EACdzC,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,MAE3Co9oB,oBAAqB,CACnB34pB,aAAc,EACdzC,gBAAiB9pC,EAAM+pC,QAAQ92G,MAAMm0B,MAEvC+9uB,SAAU,CACRp6qB,MAAOif,IAAK,KACZiC,SAAU,IAEZ0rM,UAAW,CACT5sN,MAAOq6qB,KAAM,KACbn5pB,SAAU,GACV3F,YAAa,GAEf0gnB,UAAW,CACTj8nB,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,KAC3B6kF,SAAU,GACV3F,YAAa,GAEf++pB,iBAAkB,CAChBzksB,QAASZ,EAAMZ,QAAQ,IACvB2rB,MAAOif,IAAK,MAEd4wM,UAAW,CACTptL,YAAaxtD,EAAMZ,QAAQ,KAE7BkmsB,YAAa,CACXplsB,QAAS,OACTnC,WAAY,SACZqC,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,UCxDrBmmsB,GA1C2B,SAAC,GAAqD,IAAnDtsd,EAAkD,EAAlDA,YAAausd,EAAqC,EAArCA,WAAY7kX,EAAyB,EAAzBA,SAAU8kE,EAAe,EAAfA,SACxEznZ,EAAUwmsB,KAEhB,OACE,sBAAKtmsB,UAAWF,EAAQsnsB,YAAxB,UACE,cAAC,KAAD,CAAiBpnsB,UAAWF,EAAQmnsB,WACnClsd,EACC,cAACS,EAAA,EAAD,CAAKx7O,UAAWF,EAAQ+msB,YAAxB,SACE,cAACprd,GAAA,EAAD,CACEn7M,QAAQ,cACRzT,MAAM,YACNvqG,MAAOmga,EACP3iV,QAAS,CAAE3hE,KAAM2hE,EAAQgnsB,gBAAiBS,IAAKznsB,EAAQinsB,oBAGzDO,EACF,qCACE,cAAC9rd,EAAA,EAAD,CAAKx7O,UAAWF,EAAQ+msB,YAAxB,SACE,cAACprd,GAAA,EAAD,CACEn7M,QAAQ,cACRh+G,MAAO,IACPw9E,QAAS,CAAE3hE,KAAM2hE,EAAQgnsB,gBAAiBS,IAAKznsB,EAAQinsB,oBAG3D,cAAC,KAAD,CAAiB/msB,UAAWF,EAAQ25O,eAEpC8tK,EACF,qCACE,cAAC/rK,EAAA,EAAD,CAAKx7O,UAAWF,EAAQ+msB,YAAxB,SACE,cAACprd,GAAA,EAAD,CACEn7M,QAAQ,cACRh+G,MAAOmga,EACP3iV,QAAS,CAAE3hE,KAAM2hE,EAAQgnsB,gBAAiBS,IAAKznsB,EAAQknsB,yBAG3D,cAAC,KAAD,CAAoBhnsB,UAAWF,EAAQgppB,eAEvC,SC7BJ1ymB,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DnlI,OAAQ,CACNtuD,QAAS,OACTM,eAAgB,gBAChBzC,WAAY,SACZo6C,aAAcn4C,EAAMZ,QAAQ,IAE9BsmsB,oBAAqB,CACnB36qB,MAAOif,IAAK,MAEdizU,iBAAkB,CAChB/8W,QAAS,OACTC,SAAU,QAEZwlsB,eAAgB,CACdrlsB,SAAU,IACVc,SAAU,IACV0sO,WAAY,EACZ3+L,SAAU,SACV7I,YAAatmC,EAAMZ,QAAQ,GAC3B+4C,aAAcn4C,EAAMZ,QAAQ,GAC5B,4BAA6B,CAC3BgC,SAAU,OACVhB,MAAO,OACPkmC,YAAa,IAGjBs/pB,YAAa,CACX9+oB,KAAM,EACNxmD,SAAU,IACVJ,QAAS,OACTK,cAAe,UAEjBslsB,UAAW,CACTjqgB,UAAW,IACXywC,UAAW,QAEby5d,eAAgB,CACd3tpB,aAAcn4C,EAAMZ,QAAQ,SAc1B2msB,GAAsC,SAAC,GAQtC,IAAD,EAPJlzf,EAOI,EAPJA,QACAgxf,EAMI,EANJA,gBACAmC,EAKI,EALJA,aACAC,EAII,EAJJA,gBACAC,EAGI,EAHJA,gBACAC,EAEI,EAFJA,kBACAC,EACI,EADJA,oBAEMposB,EAAUs2C,KACV+xpB,EAAgB7B,KACd3zvB,EAAM+xB,YAAe,gBAArB/xB,EAEF6tX,EAAU7rH,EAAQpwL,MAAM30F,KAAI,SAAA0tE,GAAC,OAAIA,EAAEz1C,MACnCugvB,EAAWzzf,EAAQpwL,MAAM97F,OAAS,EAClC4/wB,EAAiB,UAAG1zf,EAAQpwL,MAAMpyF,QAAO,SAAAmrE,GAAC,OAAIA,EAAEu9O,gBAAcpyT,cAA7C,QAAuD,EACxEg2vB,EAAY2pB,GAAYC,IAAsB1zf,EAAQpwL,MAAM97F,OAC5D6/wB,EAAe7pB,GAAaypB,EAElC,OACE,sBAAKlosB,UAAWsosB,EAAeH,EAAc5B,UAAY4B,EAAcn8pB,KAAvE,UACE,sBAAKhsC,UAAWF,EAAQwwD,OAAxB,UACE,cAAClwB,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWmosB,EAActpjB,aAAchyH,MAAO4xpB,EAAY,QAAU,UAApG,SACG9pe,EAAQv/Q,OAEX,cAACksH,EAAA,EAAD,CACE3+H,KAAK,QACLq9E,UAAWF,EAAQ0nsB,oBACnB/7pB,QAAS,kBAAMs8pB,EAAgBpzf,EAAQ9sP,KAHzC,SAKE,cAAC,KAAD,CAAYkmF,SAAS,eAGxBm6pB,GACC,cAAC9nqB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,QAAQqV,MAAO,CAAE+X,aAAc,GAAjE,SACGtnG,EAAE,gDAGP,sBAAKqtD,UAAWoosB,EAAWtosB,EAAQi/W,sBAAmBr8b,EAAtD,UACE,qBAAKs9E,UAAWoosB,EAAWtosB,EAAQ2nsB,oBAAiB/kxB,EAApD,SACE,cAAC,GAAD,CACE+ixB,iBAAkB9wf,EAAQpwL,MAAM97F,OAChCi9wB,kBAAmB/wf,EAAQpwL,MAAM30F,KAAI,SAAA0tE,GAAC,OAAIA,EAAE+8I,KAAKjlN,QACjDuwwB,gBAAiB,SAACphrB,GAAD,OAAWohrB,EAAgBhxf,EAAQ9sP,GAAI08D,QAG3D6jrB,GACC,sBAAKposB,UAAWF,EAAQ4nsB,YAAxB,UACE,cAACtnqB,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQ8nsB,eACnB/6qB,MAAOw7qB,IAAsB1zf,EAAQpwL,MAAM97F,OAAS,QAAU,UAHhE,SAKGkqB,EAAE,4CAA6C,CAAEulS,QAASmwd,EAAmBtnhB,MAAO4zB,EAAQpwL,MAAM97F,WAErG,qBAAKu3E,UAAWF,EAAQ6nsB,UAAxB,SACE,cAAC,KAAD,CAAiB/5gB,MAAO4yI,EAASrtD,SAAUoiH,KAA3C,SACG5gL,EAAQpwL,MAAM30F,KAAI,SAACyqN,GAAD,aACjB,cAAC,GAAD,CAAgCxyL,GAAIwyL,EAAKxyL,GAAzC,SACE,sBAAKm4C,UAAWq6I,EAAKtlN,MAAQozwB,EAAcvB,cAAgBuB,EAAclzF,SAAzE,UACE,sBAAKj1mB,UAAWmosB,EAAc3B,QAA9B,UACE,sBAAKxmsB,UAAWmosB,EAAczB,SAA9B,UACE,cAACztZ,GAAA,EAAD,CACEt2X,KAAK,QACLigI,QAAS+xJ,EAAQkuf,eAAiBxojB,EAAKxyL,GACvCu6E,SAAU,kBAAM4lqB,EAAgBrzf,EAAQ9sP,GAAIwyL,EAAKxyL,KACjDglE,MAAM,UACNiX,WAAYu2G,EAAKtlN,OAA0C,qBAAjC,UAAAslN,EAAKwgG,oBAAL,eAAmBuV,WAC7CluN,MAAO,CAAEx/B,QAAS,KAEpB,cAACmuC,GAAA,EAAD,CAASC,MAAOupG,EAAKA,KAAKjlN,KAA1B,SACE,cAACgrG,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWmosB,EAAc5ud,SAArD,SACGl/F,EAAKA,KAAKjlN,SAGf,cAACgrG,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWmosB,EAAc78E,SAAvD,SACGjxe,EAAKtlN,MAAQ4d,EAAE,yCAAf,WAA8D0nM,EAAKA,KAAK13N,KAAOg9B,gBAAcqhO,QAAQ,GAArG,SAEF2zB,EAAQkuf,eAAiBxojB,EAAKxyL,IAC7B,cAACu4E,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWmosB,EAAc1B,YAAvD,SACG9zvB,EAAE,2CAIT,sBAAKqtD,UAAWmosB,EAAcxB,YAA9B,WACItsjB,EAAKtlN,OACL,cAAC,GAAD,CACEzS,MAAO+3N,EAAK6njB,aACZ9/pB,SAAU,SAACt7G,GAAD,OAAUmhxB,EAAkBtzf,EAAQ9sP,GAAIwyL,EAAKxyL,GAAI/gC,IAC3DiO,OAAO,IAGX,cAACusH,EAAA,EAAD,CACE3+H,KAAK,QACLq9E,UAAWmosB,EAAchB,iBACzB17pB,QAAS,kBAAMq8pB,EAAanzf,EAAQ9sP,GAAIwyL,EAAKxyL,KAH/C,SAKE,cAAC,KAAD,CAAYkmF,SAAS,kBAI3B,cAAC,GAAD,CACEgtM,YAAa1gG,EAAK0gG,YAClBusd,aAAcjtjB,EAAKwgG,aACnB4nG,SAAUpoM,EAAKooM,SACf8kE,WAAYltQ,EAAKtlN,QAElBslN,EAAKtlN,OACJ,cAACqrG,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,QAAQ7sB,UAAWmosB,EAAczrd,UAArE,SACGriG,EAAKtlN,YAnDSslN,EAAKxyL,qBAkE/BwD,OAAM4G,KAAK41uB,IAAmB,SAAC3pwB,EAAMvX,GAAP,OAC3CuX,EAAKy2Q,UAAYhuR,EAAKguR,SACnBz2Q,EAAKgqwB,sBAAwBvhxB,EAAKuhxB,uB,8KCxLxBK,GAhBH,CACV,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL58f,KAAM,UACN68f,KAAM,UACNC,KAAM,UACNC,KAAM,W,yFCkBFtypB,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dr1L,UAAW,CACTyjC,SAAU,YAEZ8kqB,UAAW,CACTjmsB,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B2yC,UAAW,UAEb+0pB,iBAAkB,CAChB1msB,MAAO,OACPI,eAAgB,SAChBuqB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7ByyF,cAAe,YACfwH,WAAY,KAEd0lpB,QAAS,CACPh8qB,MAAOif,IAAK,KACZppC,QAAS,GAEXomsB,cAAe,CACb5lqB,UAAWphC,EAAMZ,QAAQ,IAE3B6nsB,aAAc,CACZl8qB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5Bi9pB,eAAgB,CACdhnsB,QAAS,OACTnC,WAAY,SACZ8wT,IAAK7uT,EAAMZ,QAAQ,IACnBgiC,UAAWphC,EAAMZ,QAAQ,IACzB+qC,OAAQ,WAEVg9pB,mBAAoB,CAClBl7pB,SAAU,UACVlhB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BvM,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAEhB2spB,eAAgB,CACdlnsB,QAAS,OACTnC,WAAY,SACZ8wT,IAAK7uT,EAAMZ,QAAQ,IACnBgiC,UAAWphC,EAAMZ,QAAQ,KAE3BiosB,kBAAmB,CACjBjmsB,SAAU,aAmBRkmsB,GAAqB,SAACvqoB,GAA0B,IAAD,MACnD,IAAKA,EAAW,MAAO,GACvB,IAAM9xB,EAAY8xB,EAAQ9xB,YAAR,UAAqB8xB,EAAQl0I,WAA7B,aAAqB,OAAAk0I,EAAc,eAAgB,GAC/D7xB,EAAW6xB,EAAQ7xB,WAAR,UAAoB6xB,EAAQl0I,WAA5B,aAAoB,OAAAk0I,EAAc,cAAe,GAC5D/xB,EAAe+xB,EAAQ/xB,eAAR,UAAwB+xB,EAAQl0I,WAAhC,aAAwB,OAAAk0I,EAAc,kBAAmB,GAE9E,MADa,CAAC9xB,EAAWC,GAAU76G,OAAOlO,SAASokB,KAAK,MACzCykG,GAAgB,IAgOlBu8pB,GArN8B,SAAC,GAOvC,IANL3hvB,EAMI,EANJA,MACAplC,EAKI,EALJA,MACA8/G,EAII,EAJJA,SACAknqB,EAGI,EAHJA,gBACAC,EAEI,EAFJA,oBACAC,EACI,EADJA,gBAEM1psB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX0nG,EAAWtmG,sBAAY+lG,gBACvBoroB,EAAkBnxuB,sBAAYwmG,eAE9BlsG,EAAUvH,IAAM+B,SAAQ,WAC5B,OAAKwxG,GAAYA,EAASz1H,UAAoB,GAvB5B,SAACy1H,GACrB,OAAOA,EAAShvI,KAAI,SAAAivI,GAAO,MAAK,CAC9Bn3G,MAAO0hvB,GAAmBvqoB,GAC1Bv8I,MAAOu8I,EACPh3G,GAAIg3G,EAAQl0I,IAAI,UACdnB,UAmBKkgxB,CAAc9qoB,KACpB,CAACA,IAEEg0gB,EAAiBvnnB,IAAM+B,SAA+B,WAAO,IAAD,EAChE,OAAK9qC,EACE,CACLolC,MAAO0hvB,GAAmB9mxB,GAC1BA,QACAulC,GAAIvlC,EAAMulC,KAAN,UAAYvlC,EAAMqI,WAAlB,aAAY,OAAArI,EAAY,QAJT,OAMpB,CAACA,IAEEqnxB,EAAmBt+uB,IAAMykF,aAAY,WACzCv+E,EAAS,IAAI+rB,KAAoB,OACjC/rB,EAAS,IAAI8J,KAAiC,CAAExT,GAAIwwP,KAAW91O,QAASotnB,QAExE,IAAM7+nB,EAAa,CACjB84uB,QAAS,SAACC,GACR,IAAMC,EAAc,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAgB1kwB,OACvCi9F,EAAS0nqB,KAIb,GAAIP,EAAqB,CACvB,IAAMQ,EAAa/5vB,iBAAO,2BAAKu5vB,GAAN,IAA2B1hvB,GAAI,QAClD2ooB,EAAYu5G,EAAWp/wB,IAAI,cAAgBkU,iBACjDiyB,EAAM8ykB,YAAcmmK,EAAWz7wB,IAAI,YAAakiqB,EAAUhnqB,WAG5D+nC,EAAS,IAAI4J,KAA+B,CAAEtT,GAAIwwP,KAAWvnP,WAC7DS,EAAS,IAAI0J,KAA6B,CAAEpT,GAAIwwP,KAAW9mL,MAAM,OAChE,CAAChgE,EAAUjvC,EAAOinxB,EAAqBnnqB,IAEpC4nqB,EAAoB3+uB,IAAMykF,aAAY,WAAO,IAAD,EAChD,GAAKxtH,EAAL,CACA,IAAM28I,EAAY38I,EAAMulC,KAAN,UAAYvlC,EAAMqI,WAAlB,aAAY,OAAArI,EAAY,OACrC28I,IACL1tG,EAAS,IAAI6rB,KAA2B,CAAEwhF,SAAU5uH,iBAAO,CAAC1tB,OAC5DivC,EAAS,IAAI+rB,KAAoB2hF,IACjC1tG,EAAS,IAAI8J,KAAiC,CAAExT,GAAIwwP,KAAW91O,QAAS,aACxEhR,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIwwP,KACJvnP,MAAO,CACLk/nB,WAAW,EACXi6G,SAAU,SAACJ,GACT,IAAMC,EAAc,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAgB1kwB,OACvCi9F,EAAS0nqB,GACLR,GAAmBrqoB,GACrBqqoB,EAAgBrqoB,EAAW6qoB,QAKnCv4uB,EAAS,IAAI0J,KAA6B,CAAEpT,GAAIwwP,KAAW9mL,MAAM,SAChE,CAACjvG,EAAOivC,EAAU+3uB,IAEfhgqB,EAAoBj+E,IAAMykF,aAAY,SAACo6pB,EAAa7gqB,EAAoB8I,GAC7D,UAAXA,GAAsB9I,EAAW5gH,SACnC8oC,EAAS,IAAIy2B,KAA8B,CAAE42E,SAAU//H,oBACvD0yB,EAAS,IAAIu2B,KAAqB,CAChCs8D,WAAY/a,EACZz2E,QAAS,CAAEy9E,MAAO,WAGrB,CAAC9+E,IAEE44uB,EAAUZ,EACZ,CAACA,EAAoBx8pB,UAAWw8pB,EAAoBv8pB,UAAU76G,OAAOlO,SAASokB,KAAK,KACnF,GACE+hwB,GAA4B,OAAnBb,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBz8pB,eAAgB,GAC9Cu9pB,EAAiBF,GAAWC,EAAX,UAChBD,EADgB,cACHC,GACfD,GAAWC,GAAU,GACpBE,EAAaf,EACf,CACEA,EAAoBhsa,SACpBgsa,EAAoB9ra,SACpB8ra,EAAoBgB,aACpBhB,EAAoBiB,UACpBjB,EAAoB5ra,aACpBxrW,OAAOlO,SAASokB,KAAK,MACvB,GAEJ,OACE,sBAAK23D,UAAWF,EAAQM,UAAxB,UACE,sBAAK8hC,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,YAA3C,UACE,cAAC8hV,GAAA,EAAD,CACEr/Z,MAAOswpB,EACPxwiB,SAAU,SAAC8nqB,EAAQ9iqB,GAAT,OAAoBhF,GAAe,OAANgF,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,OACxDgqI,OAAQ,WACN/6F,EAAS,IAAIy2B,KAA8B,CAAE42E,SAAU//H,qBAEzDuqG,cAAeE,EACf12E,QAASA,EACTo7D,QAASy7qB,EACTxhpB,eAAgB,SAACC,GAAD,OAAyBA,EAAIxgG,OAC7C+gU,kBAAmB,SAACrhP,EAAQvqG,GAAT,OAAiBuqG,EAAOv/E,KAAOhrB,EAAIgrB,IACtDg2U,cAAe,SAACjnN,GAAD,OAAUA,GACzB10C,MAAO,CAAE0mB,KAAM,GACfq5R,cACE,qBAAKjiV,UAAWF,EAAQ6osB,UAAxB,SACE,cAACvoqB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAlC,SACGl6E,EAAE,+CAITq1S,eAAgB,YAA6B,IAA1B96R,EAAyB,EAAzBA,SAAa4D,EAAY,mBAC1C,OAAO,eAAC2nF,GAAA,EAAD,2BAAW3nF,GAAX,IAAkBs3R,YAAa,SAAAp5T,GAAC,OAAIA,EAAEg5H,kBAAkB9lB,MAAO,GAA/D,UACJh1E,EACD,8BACE,cAACq+E,EAAA,EAAD,CACErJ,MAAO,CAAEuf,OAAQ,OAAQpT,aAAc,EAAGN,SAAU,SACpDzN,QAAQ,WACRzT,MAAM,UACN4T,WAAW,EACXgL,QAAS,SAACz8G,GACRA,EAAE87G,kBACF97G,EAAEg5H,iBACF2hpB,KARJ,SAWGh3vB,EAAE,+CAKXysS,aAAc,SAACh4M,GACb,IAAMy3B,EAAUz3B,EAAO9kH,MACjB8S,EAAO,CAACypI,EAAQl0I,IAAI,aAAck0I,EAAQl0I,IAAI,aAAa0d,KAAK,KAAK+8G,OACrEtY,EAAe+xB,EAAQl0I,IAAI,gBAC3BqoD,EAAQ6rF,EAAQl0I,IAAI,SACpB2yW,EAAcz+N,EAAQl0I,IAAI,eAC1B4yW,EAAW1+N,EAAQl0I,IAAI,aAAe,GACtC6yW,EAAW3+N,EAAQl0I,IAAI,aAAe,GACtC8yW,EAAW5+N,EAAQl0I,IAAI,aAAe,GACtC+yW,EAAe7+N,EAAQl0I,IAAI,iBAAmB,GAC9CgzW,EAAc9+N,EAAQl0I,IAAI,gBAAkB,GAElD,OACE,eAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAE+O,SAAU,UAAY/vC,QAAS,EAAjG,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAACk4R,GAAA,EAAD,CAAc75N,QAASA,MAEzB,eAACp/D,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAA7C,UACE,cAAC8/B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQipsB,aAAnD,SAAkE3zwB,GAAQ03G,IAC1E,cAAC1M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6BttD,IAC7B,cAACotD,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+Bg9P,IAC/B,cAACl9P,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+Bi9P,GAAYC,IAC3C,eAACp9P,EAAA,EAAD,CAAYE,QAAQ,UAApB,UAA+Bm9P,EAA/B,IAA0CC,EAA1C,IAAyDC,KACzD,cAACpgP,GAAA,EAAD,CAASv9C,UAAWF,EAAQgpsB,cAAezyJ,OAAO,WAK1D5yS,YAAa,SAAClqS,GAAD,OACX,cAACujR,GAAA,EAAD,2BACMvjR,GADN,IAEE7R,MAAOA,EACP+4E,WAAW,EACXmR,YAAaj/F,EAAE,yCACf23P,gBAAe,2BAAO/wO,EAAO+wO,iBAAd,IAA+B6U,QAAQ,UAI3D78R,GACC,cAACg/H,EAAA,EAAD,CAAYthD,UAAWF,EAAQ+osB,QAASlmxB,KAAK,QAAQ8oH,QAASu+pB,EAA9D,SACE,cAAC,KAAD,CAAgBj8pB,SAAS,gBAI7BzrH,GAAiC,OAAxBinxB,GAAgCC,GACzC,sBAAKxpsB,UAAWF,EAAQopsB,eAAxB,UACE,cAAC,KAAD,CAAahnqB,MAAO,CAAE6L,SAAU,WAAYlhB,MAAO07qB,GAAM,KAAMngqB,YAAa,KAC5E,cAAChI,EAAA,EAAD,UAAaopqB,OAGhBD,GACC,cAAC14pB,GAAA,EAAD,CACEC,MACE,sBAAK5O,MAAO,CAAEmb,WAAY,UAA1B,UACE,8BAAMgtpB,IACLC,GAAc,8BAAMA,OAGzBv5pB,UAAU,eACVjxC,QAAS,CAAEo2L,QAASp2L,EAAQqpsB,mBAR9B,SAUE,sBAAKnpsB,UAAWF,EAAQkpsB,eAAxB,UACE,cAAC,KAAD,CAAgB9mqB,MAAO,CAAE6L,SAAU,WAAYlhB,MAAOif,IAAK,KAAM1D,YAAa,KAC9E,cAAChI,EAAA,EAAD,CAAYpgC,UAAWF,EAAQmpsB,mBAA/B,SAAoDoB,aCoBjDI,GAjTgC,SAAC,GASzC,IAAD,wBARJ7ouB,EAQI,EARJA,KACAyxpB,EAOI,EAPJA,cACAi2E,EAMI,EANJA,gBACAoB,EAKI,EALJA,qBACAC,EAII,EAJJA,oBACAC,EAGI,EAHJA,sBACAC,EAEI,EAFJA,mBACAC,EACI,EADJA,eAEQn4vB,EAAM+xB,YAAe,gBAArB/xB,EACFk8E,EAAS8zK,eAEf,EAA8Ct3O,IAAMia,SAA4B,IAAhF,mBAAOyluB,EAAP,KAAwBC,EAAxB,KACA,EAAsC3/uB,IAAMia,SAA4B,IAAxE,mBAAO2luB,EAAP,KAAoBC,EAApB,KAEMC,EAAgB,SAAC7oxB,GAAD,OACpBuoxB,IAAuBvoxB,EAAQqwB,EAAE,yCAA2C,IAExEy4vB,EAA4D,MAAnC31wB,OAAM,UAACmsC,EAAKg6U,qBAAN,aAAC,EAAoB/zV,IAEpDwjvB,EAAiBzpuB,EAAK+5K,UAAYr5G,KAAO1gE,EAAK+5K,QAAS,cAAc,GAAM7wB,UAE3EwglB,EAAiBjgvB,IAAM+B,SAAQ,WACnC,IAAKwU,EAAK+5K,SAAW0vjB,EAAkB,MAAO,GAC9C,IAAM14pB,EAAOrQ,KAAO1gE,EAAK+5K,SAASp5G,QAAQ,OACpCgpqB,EAAQjpqB,OAASC,QAAQ,OAC/B,OAAOoQ,EAAKwiI,SAASo2hB,GAAS54vB,EAAE,yCAA2C,KAC1E,CAACivB,EAAK+5K,QAAS0vjB,EAAgB14vB,IAE5B64vB,EAAa,SAAC54uB,EAA4B/K,GAC9C,OAAU,MAANA,EAAqB,KAClB+K,EAAQrqB,MAAK,SAAA2/G,GAAG,OAAIA,EAAIrgG,KAAOA,MAAO,MAI/CwD,IAAM0B,WAAU,WAAO,IAAD,EACdu3E,EAAS,UAAG1iE,EAAKs3T,eAAR,aAAG,EAAcrxU,GAC5By8E,EACDzV,EAAOJ,QAAQ6V,EAAW,CAAEpX,QAAS,OAAQC,SAAU,cACrDhwB,MAAK,SAACurE,GAAc,IAAD,QACZklH,IAA+B,OAAHllH,QAAG,IAAHA,GAAA,UAAAA,EAAK56G,eAAL,mBAAc3uB,YAAd,eAAoBsswB,YAAa,IAChE77wB,KAAI,SAAC4wE,GAAD,MAAgB,CAAE34C,GAAI24C,EAAK34C,GAAIvlC,MAAOk+E,EAAKl+E,UAGlD,GAFA0oxB,EAAmBp9gB,IAEf,UAAAhsN,EAAKmguB,qBAAL,eAAoBz/wB,UAAS,UAACs/C,EAAKmguB,qBAAN,aAAC,EAAoBl6uB,IAAI,CACxD,IAAMsN,EAAQy4N,EAAMrlP,MAClB,SAAA2/G,GAAG,OAAIA,EAAI5lI,MAAM09C,gBAAkB4B,EAAKmguB,cAAcz/wB,MAAM09C,iBAE1D7K,GACFk+pB,EAAc,gBAAiB,CAAExrqB,GAAIsN,EAAMtN,GAAIvlC,MAAO6yC,EAAM7yC,YAIjEirM,OAAM,kBAAMy9kB,EAAmB,OAElCA,EAAmB,MAEpB,WAACppuB,EAAKs3T,eAAN,aAAC,EAAcrxU,KAGlBwD,IAAM0B,WAAU,WAAO,IAAD,EACd23E,EAAU,UAAG9iE,EAAKmguB,qBAAR,aAAG,EAAoBl6uB,GACnC68E,EACD7V,EAAOJ,QAAQiW,EAAY,CAAExX,QAAS,OAAQC,SAAU,cACtDhwB,MAAK,SAACurE,GAAc,IAAD,QACZklH,IAA+B,OAAHllH,QAAG,IAAHA,GAAA,UAAAA,EAAK56G,eAAL,mBAAc3uB,YAAd,eAAoBsswB,YAAa,IAChE77wB,KAAI,SAAC4wE,GAAD,MAAgB,CAAE34C,GAAI24C,EAAK34C,GAAIvlC,MAAOk+E,EAAKl+E,UAGlD,GAFA4oxB,EAAet9gB,IAEX,UAAAhsN,EAAKm3T,YAAL,eAAWz2W,UAAS,UAACs/C,EAAKm3T,YAAN,aAAC,EAAWlxU,IAAI,CACtC,IAAMsN,EAAQy4N,EAAMrlP,MAClB,SAAA2/G,GAAG,OAAIA,EAAI5lI,MAAM09C,gBAAkB4B,EAAKm3T,KAAKz2W,MAAM09C,iBAEjD7K,GACFk+pB,EAAc,OAAQ,CAAExrqB,GAAIsN,EAAMtN,GAAIvlC,MAAO6yC,EAAM7yC,YAIxDirM,OAAM,kBAAM29kB,EAAe,OAE9BA,EAAe,MAEhB,WAACtpuB,EAAKmguB,qBAAN,aAAC,EAAoBl6uB,KAGxBwD,IAAM0B,WAAU,WAAO,IAAD,IACpB,IAAI,UAAA6U,EAAKs3T,eAAL,eAAc52W,UAAS,UAACs/C,EAAKs3T,eAAN,aAAC,EAAcrxU,KAAMijvB,EAAerixB,OAAS,EAAG,CACzE,IAAM0sC,EAAQ21uB,EAAeviwB,MAC3B,SAAA2/G,GAAG,OAAIA,EAAI5lI,MAAM09C,gBAAkB4B,EAAKs3T,QAAQ52W,MAAM09C,iBAEpD7K,GACFk+pB,EAAc,UAAW,CAAExrqB,GAAIsN,EAAMtN,GAAIvlC,MAAO6yC,EAAM7yC,WAGzD,CAACwoxB,IAsCJ,OACE,8BACE,eAACrrsB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAAC6gV,GAAA,EAAD,CACEr/Z,MAAOkpxB,EAAWV,EAAD,UAAiBlpuB,EAAKs3T,eAAtB,aAAiB,EAAcrxU,IAChDu6E,SA1CkB,SAAC8nqB,EAAa9iqB,GACxCislB,EAAc,UAAWjslB,EACrB,CAAEv/E,GAAIu/E,EAAOv/E,GAAIvlC,MAAO8kH,EAAO9kH,OAC/B,MACJ+wsB,EAAc,gBAAiB,MAC/BA,EAAc,OAAQ,MACtB63E,EAAe,KAqCPt4uB,QAASk4uB,EACT7ipB,eAAgB,SAACC,GAAD,OAA0BA,EAAI5lI,OAC9CmmW,kBAAmB,SAACrhP,EAAQvqG,GAAT,OAAiBuqG,EAAOv/E,KAAOhrB,EAAIgrB,IACtD47S,YAAa,SAAClqS,GAAD,eACX,cAACujR,GAAA,EAAD,2BACMvjR,GADN,IAEE7R,MAAK,UAAK/U,EAAE,4BAAP,MACLi/F,YAAW,UAAKj/F,EAAE,4BAAP,MACX8tF,WAAW,EACX6pK,gBAAe,2BAAO/wO,EAAO+wO,iBAAd,IAA+B6U,QAAQ,IACtDpqR,QAASo2wB,EAAa,UAACvpuB,EAAKs3T,eAAN,aAAC,EAAc52W,OACrCmxH,WAAY03pB,EAAa,UAACvpuB,EAAKs3T,eAAN,aAAC,EAAc52W,eAKhD,cAACm9E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAAC6gV,GAAA,EAAD,CACEr/Z,MAAOkpxB,EAAWT,EAAD,UAAkBnpuB,EAAKmguB,qBAAvB,aAAkB,EAAoBl6uB,IACvDu6E,SArDmB,SAAC8nqB,EAAa9iqB,GACzCislB,EAAc,gBAAiBjslB,EAC3B,CAAEv/E,GAAIu/E,EAAOv/E,GAAIvlC,MAAO8kH,EAAO9kH,OAC/B,MACJ+wsB,EAAc,OAAQ,OAkDdzgqB,QAASm4uB,EACT9ipB,eAAgB,SAACC,GAAD,OAA0BA,EAAI5lI,OAC9CmmW,kBAAmB,SAACrhP,EAAQvqG,GAAT,OAAiBuqG,EAAOv/E,KAAOhrB,EAAIgrB,IACtDi8E,WAAU,UAACliE,EAAKs3T,eAAN,aAAC,EAAcrxU,IACzB47S,YAAa,SAAClqS,GAAD,eACX,cAACujR,GAAA,EAAD,2BACMvjR,GADN,IAEE7R,MAAK,UAAK/U,EAAE,kCAAP,MACLi/F,YAAW,UAAKj/F,EAAE,kCAAP,MACX8tF,WAAW,EACX6pK,gBAAe,2BAAO/wO,EAAO+wO,iBAAd,IAA+B6U,QAAQ,IACtDpqR,QAASo2wB,EAAa,UAACvpuB,EAAKmguB,qBAAN,aAAC,EAAoBz/wB,OAC3CmxH,WAAY03pB,EAAa,UAACvpuB,EAAKmguB,qBAAN,aAAC,EAAoBz/wB,eAKtD,cAACm9E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAAC6gV,GAAA,EAAD,CACEr/Z,MAAOkpxB,EAAWP,EAAD,UAAcrpuB,EAAKm3T,YAAnB,aAAc,EAAWlxU,IAC1Cu6E,SAnEe,SAAC8nqB,EAAa9iqB,GACrCislB,EAAc,OAAQjslB,EAClB,CAAEv/E,GAAIu/E,EAAOv/E,GAAIvlC,MAAO8kH,EAAO9kH,OAC/B,OAiEIswC,QAASq4uB,EACThjpB,eAAgB,SAACC,GAAD,OAA0BA,EAAI5lI,OAC9CmmW,kBAAmB,SAACrhP,EAAQvqG,GAAT,OAAiBuqG,EAAOv/E,KAAOhrB,EAAIgrB,IACtDi8E,WAAU,UAACliE,EAAKmguB,qBAAN,aAAC,EAAoBl6uB,IAC/B47S,YAAa,SAAClqS,GAAD,eACX,cAACujR,GAAA,EAAD,2BACMvjR,GADN,IAEE7R,MAAK,UAAK/U,EAAE,yBAAP,MACLi/F,YAAW,UAAKj/F,EAAE,yBAAP,MACX8tF,WAAW,EACX6pK,gBAAe,2BAAO/wO,EAAO+wO,iBAAd,IAA+B6U,QAAQ,IACtDpqR,QAASo2wB,EAAa,UAACvpuB,EAAKm3T,YAAN,aAAC,EAAWz2W,OAClCmxH,WAAY03pB,EAAa,UAACvpuB,EAAKm3T,YAAN,aAAC,EAAWz2W,eAK7C,cAACm9E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAACg8O,GAAA,EAAD,CACEp1R,MAAO/U,EAAE,4BACTi/F,YAAaj/F,EAAE,4BACfrwB,MAAOs/C,EAAK0rE,QACZlL,SAAU,SAACpzG,GAAD,OAAOqksB,EAAc,UAAWrksB,EAAE4kB,OAAOtxB,QACnDm+G,WAAW,EACX6pK,gBAAiB,CAAE6U,QAAQ,OAG/B,cAAC1/M,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAACg8O,GAAA,EAAD,CACEn2N,QAAQ,EACRj/D,MAAK,UAAK/U,EAAE,yCAAP,MACLi/F,YAAW,UAAKj/F,EAAE,yCAAP,MACXrwB,MAAK,oBAAEs/C,EAAKg6U,qBAAP,aAAE,EAAoB/zV,UAAtB,QAA4B,GACjCu6E,SA/FwB,SAACpzG,GACjC,IAAM08wB,EAAU18wB,EAAE4kB,OAAOtxB,MACnBqpxB,EAAgBjB,EAAqBniwB,MAAK,SAAA2/G,GAAG,OAAIzyH,OAAOyyH,EAAIrgG,MAAQpyB,OAAOi2wB,MACjFr4E,EAAc,gBAAiBs4E,EAAgB,CAAE9jvB,GAAI8jvB,EAAc9jvB,GAAIvlC,MAAOqpxB,EAAcrpxB,MAAOs5W,cAAe,IAAO,MACzHy3V,EAAc,eAAgB,MAC9Bu3E,EAAsBc,IA2FdjrqB,WAAW,EACX6pK,gBAAiB,CAAE6U,QAAQ,GAC3BpqR,QAASo2wB,EAAcvpuB,EAAKg6U,eAC5BnoQ,WAAY03pB,EAAcvpuB,EAAKg6U,eATjC,SAWG8uZ,EAAqB96wB,KAAI,SAACs4H,GAAD,OACxB,cAAC/kB,GAAA,EAAD,CAAuB7gH,MAAO4lI,EAAIrgG,GAAlC,SACGqgG,EAAI5lI,OADQ4lI,EAAIrgG,WAMzB,cAAC43C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAACg8O,GAAA,EAAD,CACEn2N,QAAQ,EACRj/D,MAAK,UAAK/U,EAAE,yCAAP,OAAiDy4vB,EAAyB,KAAO,IACtFx5pB,YAAW,UAAKj/F,EAAE,yCAAP,OAAiDy4vB,EAAyB,KAAO,IAC5F9oxB,MAAK,oBAAEs/C,EAAKi6U,oBAAP,aAAE,EAAmBh0V,UAArB,QAA2B,GAChCu6E,SA1GuB,SAACpzG,GAChC,IAAM4oR,EAAS5oR,EAAE4kB,OAAOtxB,MAClBspxB,EAAejB,EAAoBpiwB,MAAK,SAAA2/G,GAAG,OAAIzyH,OAAOyyH,EAAIrgG,MAAQpyB,OAAOmiR,MAC/Ey7a,EAAc,eAAgBu4E,EAAe,CAAE/jvB,GAAI+jvB,EAAa/jvB,GAAIvlC,MAAOspxB,EAAatpxB,OAAU,OAwG1Fm+G,WAAW,EACX6pK,gBAAiB,CAAE6U,QAAQ,GAC3Br7K,UAAWliE,EAAKg6U,gBAAkBwvZ,EAClCr2wB,MAAOq2wB,KAA4BD,EAAcvpuB,EAAKi6U,cACtDpoQ,WAAY23pB,EAAyBD,EAAcvpuB,EAAKi6U,cAAgB,GAV1E,SAYG8uZ,EAAoB/6wB,KAAI,SAACs4H,GAAD,OACvB,cAAC/kB,GAAA,EAAD,CAAuB7gH,MAAO4lI,EAAIrgG,GAAlC,SACGqgG,EAAI5lI,OADQ4lI,EAAIrgG,WAOzB,cAAC43C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAA9B,SACE,cAAC,GAAD,CACEt5C,MAAO/U,EAAE,qCACTrwB,MAAOs/C,EAAKskqB,UACZ9jmB,SAAU,SAACy8B,GAAD,OAAaw0jB,EAAc,YAAax0jB,IAClDyqoB,gBAAiBA,EACjBC,oBAAqB3nuB,EAAKgjuB,aAC1B4E,gBAAiB72vB,EAAE,gDAGvB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAA9B,SACE,cAAC,GAAD,CACEt5C,MAAO/U,EAAE,oCACTrwB,MAAOs/C,EAAKwkqB,SACZhkmB,SAAU,SAACy8B,GAAD,OAAaw0jB,EAAc,WAAYx0jB,IACjDyqoB,gBAAiBA,EACjBC,oBAAqB3nuB,EAAKijuB,YAC1B2E,gBAAiB72vB,EAAE,+CAGvB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIR,GAAI,EAAGF,GAAI,EAArC,SACE,cAAC,KAAD,CAAyB8uD,MAAOo6I,KAAhC,SACE,eAACtiJ,GAAA,EAAD,CAAajnB,WAAW,EAAM1rG,QAASs2wB,KAAoBF,EAAcvpuB,EAAK+5K,SAA9E,UACE,cAAC,KAAD,CACEt6K,OAAO,aACP6+N,KAAK,aACLgK,SAAS,IACTxiP,MAAK,UAAK/U,EAAE,4BAAP,MACLi/F,YAAW,UAAKj/F,EAAE,4BAAP,MACXrwB,MAAOs/C,EAAK+5K,QAAUr5G,KAAO1gE,EAAK+5K,SAAW,KAC7Cv5G,SAAU,SAACuQ,GAAD,OAAU0glB,EAAc,UAAW1glB,EAAOA,EAAKtxE,OAAO,cAAgB,KAChFo/D,WAAW,EACXgD,WAAW,EACX6mK,gBAAiB,CACf6U,QAAQ,EACRj9K,MAAQmpqB,GAAmBF,EAAcvpuB,EAAK+5K,WAAY2vjB,OAAiD5oxB,EAAhC,CAAEmqG,MAAO,qBAEtFs9K,cAAe,cAAC,KAAD,CAAwBp8J,SAAS,UAChDq8J,eAAgB,cAAC,KAAD,CAAyBr8J,SAAS,UAClDs8J,aAAc,cAAC,KAAD,IACdt1Q,QAASs2wB,KAAoBF,EAAcvpuB,EAAK+5K,SAChDloG,WAAY,OAEd,cAACk7Q,GAAA,EAAD,CACE55X,QAASs2wB,KAAoBF,EAAcvpuB,EAAK+5K,SAChDz5G,MAAQmpqB,GAAmBF,EAAcvpuB,EAAK+5K,WAAY2vjB,OAAiD5oxB,EAAhC,CAAEmqG,MAAO,oBAFtF,SAIGw+qB,EAAiB14vB,EAAE,sBAAyBw4vB,EAAcvpuB,EAAK+5K,UAAY2vjB,iBC5StFl1pB,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Do2gB,aAAc,CACZ7psB,QAAS,OACTnC,WAAY,SACZo6C,aAAcn4C,EAAMZ,QAAQ,GAC5BgiC,UAAWphC,EAAMZ,SAAS,KAC1B4tC,WAAYhtC,EAAMZ,SAAS,MAE7B4qsB,kBAAmB,CACjB9psB,QAAS,OACTnC,WAAY,aACZivC,WAAYhtC,EAAMZ,QAAQ,IAE5B6qsB,eAAgB,CACd/psB,QAAS,OACTk+rB,oBAAqB,UACrBvvY,IAAK7uT,EAAMZ,QAAQ,GAAK,GACxB0nD,KAAM,EACNxmD,SAAU,GAEZ4psB,eAAgB,CACdhqsB,QAAS,OACTnC,WAAY,SACZ,yBAA0B,CACxBuoC,YAAatmC,EAAMZ,QAAQ,MAG/B+qsB,gBAAiB,CACftwpB,cAAe,OACfj5C,QAAS,EACTN,SAAU,OACVi7C,WAAY,SACZvO,WAAYhtC,EAAMZ,QAAQ,GAC1B0uO,WAAY,GAEds8d,kBAAmB,CACjBhqsB,MAAO,MACP+3C,aAAcn4C,EAAMZ,QAAQ,IAE9BirsB,cAAe,CACblypB,aAAcn4C,EAAMZ,QAAQ,IAE9BkrsB,gBAAiB,CACfpqsB,QAAS,OACTK,cAAe,SACfxC,WAAY,SACZyC,eAAgB,SAChBI,QAASZ,EAAMZ,QAAQ,GACvB0qC,gBAAiBE,IAAK,IACtBuC,aAAcvsC,EAAMZ,QAAQ,KAE9BmrsB,wBAAyB,CACvB3psB,QAASZ,EAAMZ,QAAQ,GACvB0qC,gBAAiB,QACjByC,aAAcvsC,EAAMZ,QAAQ,IAC5B4tC,WAAYhtC,EAAMZ,QAAQ,GAC1BgiC,UAAWphC,EAAMZ,QAAQ,SAsBvBorsB,GAAsC,SAAC,GAgBtC,IAAD,YAfJvpxB,EAeI,EAfJA,MACA4xR,EAcI,EAdJA,QACA43f,EAaI,EAbJA,iBACAC,EAYI,EAZJA,mBACAC,EAWI,EAXJA,eACAxE,EAUI,EAVJA,kBACAyE,EASI,EATJA,gBACAC,EAQI,EARJA,uBACArD,EAOI,EAPJA,gBACAsD,EAMI,EANJA,eACAlC,EAKI,EALJA,qBACAC,EAII,EAJJA,oBACAC,EAGI,EAHJA,sBACAC,EAEI,EAFJA,mBACAC,EACI,EADJA,eAEMhrsB,EAAUs2C,KACV+xpB,EAAgB7B,KACd3zvB,EAAM+xB,YAAe,gBAArB/xB,EACFqjsB,EAAarwH,eAEnB,EAA0Ct6jB,IAAMia,UAAS,GAAzD,mBAAOunuB,EAAP,KAAsBC,EAAtB,KACMC,EAAoB1hvB,IAAMyG,OAAyB,MAEnDk7uB,EAAwC,WAA7Br4f,EAAQ6uf,iBACnByJ,EAA6C,SAA7Bt4f,EAAQ6uf,iBACxB0J,EAAYD,EACdt4f,EAAQpwL,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQkuf,gBACzC,KACEsK,EAA+C,OAAlB,OAATD,QAAS,IAATA,OAAA,EAAAA,EAAWryd,cAC/Buyd,EAAkB,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAWnyd,YAEhCruT,EAAIioR,EAAQktf,eACZwL,EAAqBxC,GAAsBn+wB,MAC/C,UAAAioR,EAAQv/Q,YAAR,eAAcgwH,UAAd,UACA14H,EAAEqsW,YADF,aACA,EAAQz2W,SADR,UACiBoK,EAAEq1wB,qBADnB,aACiB,EAAiBz/wB,SADlC,UAC2CoK,EAAEwsW,eAD7C,aAC2C,EAAW52W,QACtDoK,EAAEkvX,eAAiBlvX,EAAEmvX,cAAgBnvX,EAAEivN,SAenC2xjB,EAAgB34f,EAAQpwL,MAAMpyF,QAClC,SAAAmrE,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQ4uf,wBAA0BjmsB,EAAEz1C,KAAO8sP,EAAQkuf,gBAE7D0K,EAAa54f,EAAQpwL,MAAMpyF,QAC/B,SAAAmrE,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQ4uf,wBAA0BjmsB,EAAEz1C,KAAO8sP,EAAQkuf,gBAE7D2K,EAAW,sBAAOF,GAAP,YAAyBC,IACpCE,EAAgBD,EAAY92wB,MAAM,EAAG,GAErCg3wB,EADiBF,EAAY92wB,MAAM,GACVjO,OAAS,EAClCklxB,GAAed,EAAgBW,EAAcC,EAgDnD,OACE,sBAAKztsB,UAAWgtsB,GAAYK,EAAqBlF,EAAc5B,UAAY4B,EAAcn8pB,KAAzF,UACE,uBACEllH,KAAK,OACL8yT,OAAO,kBACPv3T,IAAK0qxB,EACL7qqB,MAAO,CAAElgC,QAAS,QAClBogC,SA7EwB,SAACpzG,GAA4C,IAAD,EAClEqrN,EAAI,UAAGrrN,EAAE4kB,OAAO2wE,aAAZ,aAAG,EAAiB,GAC1BworB,EAAkBr+uB,UACpBq+uB,EAAkBr+uB,QAAQpsC,MAAQ,IAE/B+3N,GACa,oBAAdA,EAAKvzN,OACLuzN,EAAK13N,KAAOq9B,uBAChBwsvB,EAAmB73f,EAAQ9sP,GAAIwyL,OAyE7B,sBAAKr6I,UAAWF,EAAQ+rsB,aAAxB,UACE,cAAC7opB,GAAA,EAAD,CACEJ,QAAS+xJ,EAAQzoK,SACjB9J,SAAU,kBAAMmqqB,EAAiB53f,EAAQ9sP,KACzCglE,MAAM,UACNiX,SAAuC,cAA7B6wK,EAAQ6uf,mBAEpB,eAACpjqB,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAEkG,YAAa,EAAGiV,WAAY,SAAUtP,SAAU,SAArF,UACGhrH,EADH,OAG8B,cAA7B4xR,EAAQ6uf,kBAAoC7uf,EAAQktf,eACnD,cAAC/kd,GAAA,EAAD,CACEx6T,MAAOqyR,EAAQv/Q,KACfgtG,SAAU,SAACpzG,GAAD,OAAO09wB,EAAgB/3f,EAAQ9sP,GAAI74B,EAAE4kB,OAAOtxB,QACtDg+G,QAAQ,WACR39G,KAAK,QACLoS,MAAO81wB,KAAsB,UAACl2f,EAAQv/Q,YAAT,aAAC,EAAcgwH,QAC5C3R,WAAYo3pB,KAAsB,UAACl2f,EAAQv/Q,YAAT,aAAC,EAAcgwH,QAASzyG,EAAE,yCAA2C,KAGzG,cAACytF,EAAA,EAAD,CACEE,QAAQ,YACRtgC,UAAWmosB,EAActpjB,aACzBhyH,MAAOmgrB,EAAW,QAAU,UAH9B,SAKGr4f,EAAQv/Q,UAMf,sBAAK4qE,UAAWF,EAAQgssB,kBAAxB,UACE,qBACE9rsB,UAAWF,EAAQissB,eACnB7pqB,MAAO2qqB,GAAiBa,EAAU,CAAEhwgB,UAAW,IAAKywC,UAAW,aAAWzrT,EAF5E,SAIGirxB,GAAa/9wB,KA7FC,SAACyqN,GAAe,IAAD,MAC9BuzjB,KAAmB,UAACvzjB,EAAKwgG,oBAAN,aAAC,EAAmBhzR,IACvCqirB,EAAQ0jE,GAAmD,oBAAhCvzjB,EAAKwgG,aAAauV,UAC7Cy9c,EAAoBxzjB,EAAKxyL,KAAO8sP,EAAQ4uf,uBACxCuK,EAAaD,EAAiB,UAAGl5f,EAAQmvf,6BAAX,iBAAG,EAA+Bl2gB,aAAlC,aAAG,EAAuC,GAAK,KAiBnF,OACE,sBAEE5tL,UAAWF,EAAQkssB,eACnB9pqB,MAAO0rqB,EAAkB,CAAE3hqB,OAAQ,gBAAcvpH,EACjD+oH,QAASmiqB,EApBW,WACtB,GAAKA,EACL,GAAI1jE,EAAO,CAAC,IAAD,IACT0iE,EAAe,CACbtyd,OAAQjgG,EAAKwgG,aAAahzR,GAC1B0xR,SAAUl/F,EAAKA,KAAKjlN,KACpBg+sB,kBAAiB,OAAE06D,QAAF,IAAEA,OAAF,EAAEA,EAAYt7gB,KAC/B86E,mBAAoBzuU,eAAK,QAACivwB,QAAD,IAACA,GAAD,UAACA,EAAYC,wBAAb,aAAC,EAA8BtvwB,EAA/B,OAAkCqvwB,QAAlC,IAAkCA,GAAlC,UAAkCA,EAAYC,wBAA9C,aAAkC,EAA8B37uB,UAEtF,CACL,IAAMg2D,EAAM4tnB,EAAW37f,EAAKwgG,aAAahzR,IACrCugE,GAAO9yE,OAAOi8E,KAAKnJ,EAAK,iBASiB1lG,EAJ/C,UAME,cAAC,KAAD,CAAiBmqG,MAAM,UAAUqV,MAAO,CAAE6L,SAAU,MACpD,cAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SACGwtH,EAAKA,KAAKjlN,OAEZy4wB,GACC,cAACztqB,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAc7sB,UAAWmosB,EAAc1B,YAA3E,SACG9zvB,EAAE,kDAGLk7vB,GAAqBxzjB,EAAKxyL,KAAO8sP,EAAQkuf,cACzC,cAACziqB,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAc7sB,UAAWmosB,EAAc1B,YAA3E,SACG9zvB,EAAE,0CAhBF0nM,EAAKxyL,SAwET6lvB,GACC,cAACniqB,EAAA,EAAD,CACEvrC,UAAWF,EAAQmssB,gBACnBtpxB,KAAK,QACLkqG,MAAM,UACN4e,QAAS,kBAAMqhqB,GAAiB,SAAA5uwB,GAAI,OAAKA,MAJ3C,SAOMyU,EADHk6vB,EACK,oCACA,0CAMZ,sBAAK7ssB,UAC0B,cAA7B20M,EAAQ6uf,kBAAoC7uf,EAAQktf,eAChD/hsB,EAAQussB,wBACRvssB,EAAQsssB,gBAHd,UAMgC,YAA7Bz3f,EAAQ6uf,kBACP,qCACE,cAAChod,EAAA,EAAD,CAAKx7O,UAAWF,EAAQossB,kBAAxB,SACE,cAACzwd,GAAA,EAAD,CACEn7M,QAAQ,cACRh+G,MAAOqyR,EAAQ8uf,oBAAsB,EACrC52qB,MAAM,YACN/sB,QAAS,CAAE3hE,KAAMgqwB,EAAcrB,gBAAiBS,IAAKY,EAAcpB,oBAGvE,cAAC3mqB,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQqssB,cAA/C,SACGx3f,EAAQ8uf,mBAAqB,EAC1B9wvB,EAAE,iDAAkD,CAAE8vY,SAAU9tI,EAAQ8uf,qBACxE9wvB,EAAE,+CAOXq6vB,GACC,qCACE,cAAC,KAAD,CAAoBngrB,MAAM,QAAQkhB,SAAS,YAC3C,cAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQqssB,cAAejqqB,MAAO,CAAEgB,UAAW,GAAI+W,aAAc,GAApG,SACG06J,EAAQ+uf,iBAAmB/wvB,EAAE,8CAEhC,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QAAS,kCAAMshqB,EAAkBr+uB,eAAxB,aAAM,EAA2B0mkB,SAH5C,SAKGzilB,EAAE,oDAMRs6vB,GAAiBC,GAChB,qCACE,sBAAKltsB,UAAWmosB,EAAclzF,SAAU/ykB,MAAO,CAAEhgC,MAAO,QAAxD,UACE,sBAAKlC,UAAWmosB,EAAc3B,QAA9B,UACE,sBAAKxmsB,UAAWmosB,EAAczB,SAA9B,UACE,cAAC71pB,GAAA,EAAD,CAASC,MAAOo8pB,EAAU7yjB,KAAKjlN,KAA/B,SACE,cAACgrG,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWmosB,EAAc5ud,SAArD,SACG2zd,EAAU7yjB,KAAKjlN,SAGpB,cAACgrG,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWmosB,EAAc78E,SAAvD,oBACO4hF,EAAU7yjB,KAAK13N,KAAOg9B,gBAAcqhO,QAAQ,GADnD,SAGA,cAAC5gJ,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWmosB,EAAc1B,YAAvD,SACG9zvB,EAAE,2CAGP,sBAAKqtD,UAAWmosB,EAAcxB,YAA9B,UACE,cAAC,GAAD,CACErkxB,MAAO4qxB,EAAUhL,aACjB9/pB,SAAU,SAACt7G,GAAD,OAAUmhxB,EAAkBtzf,EAAQ9sP,GAAIqlvB,EAAUrlvB,GAAI/gC,MAElE,cAACw6H,EAAA,EAAD,CACE3+H,KAAK,QACLq9E,UAAWmosB,EAAchB,iBACzBrjqB,UAAU,EAHZ,SAKE,cAAC,KAAD,CAAYiK,SAAS,kBAI3B,cAAC,GAAD,CACEgtM,cAAeqyd,EACf9F,WAAY6F,EACZ1qX,SAAUyqX,EAAUzqX,SACpB8kE,WAAY2lT,EAAUn4wB,QAEvBm4wB,EAAUn4wB,OACT,cAACqrG,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,QAAQ7sB,UAAWmosB,EAAczrd,UAArE,SACGwwd,EAAUn4wB,WAIhBo4wB,GACC,cAAC5hqB,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,kBAAMghqB,EAAe93f,EAAQ9sP,KACtCq6E,MAAO,CAAEgB,UAAW,GAJtB,SAMGvwF,EAAE,wCAOmB,cAA7BgiQ,EAAQ6uf,kBAAoC7uf,EAAQktf,gBACnD,cAAC,GAAD,CACEjguB,KAAM+yO,EAAQktf,eACdxuE,cAAe,SAAC51c,EAAOn7P,GAAR,OAAkBqqxB,EAAuBh4f,EAAQ9sP,GAAI41N,EAAOn7P,IAC3EgnxB,gBAAiBA,EACjBoB,qBAAsBA,EACtBC,oBAAqBA,EACrBC,sBAAuB,SAACc,GAAD,OAAad,EAAsBj2f,EAAQ9sP,GAAI6jvB,IACtEb,mBAAoBA,EACpBC,eAAgBA,IAKU,cAA7Bn2f,EAAQ6uf,mBAAqC7uf,EAAQktf,gBACpD,qCACE,cAAC,KAAD,CAAiB7hsB,UAAWmosB,EAAc1ud,YAC1C,cAACr5M,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,0DASF0Y,OAAM4G,KAAKq6uB,IAAmB,SAACpuwB,EAAMvX,GAAP,OAC3CuX,EAAKnb,QAAU4D,EAAK5D,OACjBmb,EAAKy2Q,UAAYhuR,EAAKguR,SACtBz2Q,EAAK2swB,qBAAuBlkxB,EAAKkkxB,oBACjC3swB,EAAKwswB,uBAAyB/jxB,EAAK+jxB,sBACnCxswB,EAAKyswB,sBAAwBhkxB,EAAKgkxB,qBAClCzswB,EAAK4swB,iBAAmBnkxB,EAAKmkxB,kB,UCtX5B10pB,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1Dr1L,UAAW,CACT8B,MAAO,OACPC,OAAQ,SACRO,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B8ssB,gBAAiB,CACf9qsB,SAAU,MAEZ+qsB,gBAAiB,CACf/qsB,SAAU,MAEZ4tC,MAAO,CACLmJ,aAAcn4C,EAAMZ,QAAQ,IAE9B47C,SAAU,CACR7C,aAAcn4C,EAAMZ,QAAQ,IAE9BgtsB,sBAAuB,CACrBlssB,QAAS,OACTK,cAAe,SACfupC,gBAAiBE,IAAK,IACtB,yBAA0B,CACxBmO,aAAcn4C,EAAMZ,QAAQ,KAGhCitsB,iBAAkB,CAChB1spB,OAAO,cAAD,OAAgB3V,IAAK,MAC3BuC,aAAcvsC,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,GACvB+qC,OAAQ,UACRjqC,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChB,UAAW,CACTgmD,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,KACnC0iF,gBAAiBE,IAAK,MAG1By2S,QAAS,CACP11T,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5BzhK,YAAatmC,EAAMZ,WAErBktsB,QAAS,CACPvhrB,MAAOif,IAAK,MAEdsqP,OAAQ,CACNp0R,QAAS,OACTM,eAAgB,WAChBzC,WAAY,SACZqjC,UAAWphC,EAAMZ,QAAQ,GACzB43C,cAAeh3C,EAAMZ,QAAQ,GAC7B,yBAA0B,CACxBknC,YAAatmC,EAAMZ,QAAQ,KAG/B2tT,WAAY,CACVhiS,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BmlvB,sBAAuB,CACrBxhrB,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,MAE/BolvB,kBAAmB,CACjBprqB,UAAWphC,EAAMZ,QAAQ,GACzB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWu/B,MAAMpqC,eAI/BwgqB,GAA0C,GAg4BjCC,GA13BkB,SAAC,GAE3B,IADLC,EACI,EADJA,kBAEM3usB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACFk8E,EAAS8zK,eACTpxO,EAAW2F,wBACX2Z,EAASvY,sBAAYsY,gBACrB89tB,EAAqBp2uB,sBAAY4lU,gBACjCywa,EAAmBr2uB,sBAAY2lU,gBAErC,EAAgC5yU,IAAMia,SAAqB,CACzD8xV,GAAczkX,EAAE,6CAA8C,CAAEyuJ,OAAQ,OAD1E,mBAAOowC,EAAP,KAAiB4yjB,EAAjB,KAGA,EAAgC/4uB,IAAMia,SAAwB,MAA9D,mBAAO2yS,EAAP,KAAiB22b,EAAjB,KACA,EAAwBvjvB,IAAMia,SAA8B,UAA5D,mBAAO95C,EAAP,KAAaqjxB,EAAb,KACA,EAAkDxjvB,IAAMia,UAAS,GAAjE,mBAAOwpuB,EAAP,KAA0BC,EAA1B,KACA,EAAoD1jvB,IAAMia,UAAS,GAAnE,mBAAO0puB,EAAP,KAA2BC,EAA3B,KACA,EAA8D5jvB,IAAMia,SAAsD,IAA1H,mBAAO4puB,EAAP,KAAgCC,EAAhC,KACA,EAAkD9jvB,IAAMia,SAAsD,IAA9G,oBAAO8puB,GAAP,MAA0BC,GAA1B,MACA,GAAkDhkvB,IAAMia,UAAS,GAAjE,qBAAOgquB,GAAP,MAA0BC,GAA1B,MACA,GAAoDlkvB,IAAMia,UAAS,GAAnE,qBAAOuluB,GAAP,MAA2B2E,GAA3B,MACA,GAA4CnkvB,IAAMia,SAA4B,IAA9E,qBAAOwluB,GAAP,MAAuB2E,GAAvB,MACA,GAAkDpkvB,IAAMia,UAAS,GAAjE,qBAAOoquB,GAAP,MAA0BC,GAA1B,MACA,GAAgDtkvB,IAAMia,SAAqB,IAA3E,qBAAO88tB,GAAP,MAAyBwN,GAAzB,MACA,GAAwCvkvB,IAAMia,SAA4G,MAA1J,qBAAOuquB,GAAP,MAAqBC,GAArB,MAEA,GAA6C3L,GAAcC,GAAnDkB,GAAR,GAAQA,gBAAiBhB,GAAzB,GAAyBA,gBAEnBp6D,GAAQ,SAAC5soB,GAAD,YAAmD,qBAA9B,UAAAA,EAAEu9O,oBAAF,eAAgBuV,YAC7C2/c,GAAa,SAACxrrB,GAAD,mCAA2BA,EAAMh8E,MAAK,SAAA+0D,GAAC,OAAI4soB,GAAM5soB,aAAjD,aAA2B,EAA2Bz1C,UAAtD,QAA4D,MAEzEmkR,GAAUZ,aACdkpC,aAAU+C,KAAe,CACvBD,qBAAsB,CACpBj0D,SAAU,KAGdmxD,aAAUW,KAAgB,CACxBU,iBAAkBmiH,QAMhBzwH,GAAa,SAACvqO,EAAmBw9M,EAAgBjgG,GACrD,IAAMitH,EAAgBz4O,EAAOJ,QAAQ,CACnCvB,QAAS,OACTC,SAAU,aACVo6O,SAAS,EACT93N,WAAW,EACXC,WAAW,IAGP83N,EAAM,IAAIrsI,eACVv5J,EAAO,IAAI6lS,SACjB7lS,EAAKy0G,OAAO,OAAQgkE,GACpBz4K,EAAKy0G,OAAO,OAAQ,QAEpBmxL,EAAIj2O,KAAK,OAAQ+1O,GACjBE,EAAI7rI,iBAAiB,iBAAkB9qJ,GAEvC22R,EAAIE,OAAO93O,iBAAiB,YAAY,SAAC5gG,GACvC,IAAM24U,EAAUhkV,KAAKo/E,MAAO/zE,EAAE0kJ,OAAS1kJ,EAAE+xP,MAAS,KAClDqjhB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BACFA,GADL,IAEEkoB,MAAOloB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAClBA,EAAEz1C,KAAOyyR,EAAT,2BAAuBh9O,GAAvB,IAA0BmlV,SAAU96E,IAAYrqQ,gBAMxDkqQ,EAAII,YAAc,WAChBw8b,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BACFA,GADL,IAEEkoB,MAAOloB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAClBA,EAAEz1C,KAAOyyR,EAAT,2BAAuBh9O,GAAvB,IAA0By9O,aAAa,IAASz9O,cAMxDkqQ,EAAI53O,iBAAiB,WAAW,WAC9B,IAAMogrB,EAAe,SAACj7wB,GACpBqvwB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BACFA,GADL,IAEEkoB,MAAOloB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAClBA,EAAEz1C,KAAOyyR,EAAT,2BAAuBh9O,GAAvB,IAA0By9O,aAAa,EAAOhmT,UAAUuoE,cAMhE,EAAwCuqQ,aAAmBL,GAAnD15S,EAAR,EAAQA,QAAgBmivB,EAAxB,EAAiBl7wB,MAEjB,GAAIk7wB,EACFD,EAAaC,EAAYl7wB,MACrB4d,EAAE,gDAAiD,CAAE5d,MAAOk7wB,EAAYl7wB,QACxE4d,EAAE,8CAIR,IACE,IAAMkoS,EAAe/sR,EAAQusL,KAAK91H,MAAM,GACxC6/qB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAM6zsB,EAAe7zsB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAChCA,EAAEz1C,KAAOyyR,EAAT,2BAAuBh9O,GAAvB,IAA0By9O,aAAa,EAAOF,eAAc4nG,SAAU,MAAQnlV,KAE1E6ysB,GAAoB9zsB,EAAEwmsB,cAA2C,oBAA3Bhod,EAAauV,UACzD,OAAO,2BACF/zP,GADL,IAEEkoB,MAAO2rrB,EACPrN,aAAcsN,EAAmB71d,EAASj+O,EAAEwmsB,qBAGhD,MAAO7quB,GACPg4uB,EAAar9vB,EAAE,6CAInB60T,EAAIr6L,KAAKvrG,IAKLwuuB,GAAsB,SAACtzqB,EAAmB+oqB,GAC9C,IAAM9pd,EAA2B8pd,EAAcj2wB,KAAI,SAAAyqN,GAAI,MAAK,CAC1DxyL,GAAIw7uB,KACJhpjB,OACAwgG,aAAc,KACd4nG,SAAU,EACV1tZ,MAAO,KACPmtwB,aAAc,UACdnnd,aAAa,MAGfqpd,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAM6zsB,EAAY,sBAAO7zsB,EAAEkoB,OAAT,YAAmBw3N,IACrC,OAAO,2BACF1/O,GADL,IAEEkoB,MAAO2rrB,EACPrN,aAAcxmsB,EAAEwmsB,qBAIpB9md,EAASzoT,SAAQ,SAAAqyjB,GACft+O,GAAWvqO,EAAW6od,EAAG99hB,GAAI89hB,EAAGtrW,UAI9Bg2jB,GAAmB,SAACvzqB,EAAmBw9M,GAC3C8pd,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAM6zsB,EAAe7zsB,EAAEkoB,MAAMpyF,QAAO,SAAAmrE,GAAC,OAAIA,EAAEz1C,KAAOyyR,KAClD,OAAO,2BACFj+O,GADL,IAEEkoB,MAAO2rrB,EACPrN,aAAcxmsB,EAAEwmsB,eAAiBvod,EAC7By1d,GAAWG,GACX7zsB,EAAEwmsB,sBAKNyN,GAAsB,SAACxzqB,GAC3BsnqB,GAAY,SAAAlmwB,GACV,IAAMqywB,EAAWrywB,EAAK/L,QAAO,SAAAkqE,GAAC,OAAIA,EAAEx0C,KAAOi1E,KAC3C,OAAwB,IAApByzqB,EAAS9nxB,OACJ,CAAC2uY,GAAczkX,EAAE,6CAA8C,CAAEyuJ,OAAQ,MAE3EmvmB,MAILC,GAAsB,SAAC1zqB,EAAmBw9M,GAC9C8pd,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAMg+I,EAAOh+I,EAAEkoB,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAOyyR,KACxC,OAAKjgG,GAAS6vf,GAAM7vf,GACb,2BAAKh+I,GAAZ,IAAewmsB,aAAcvod,IADOj+O,SAKlCo0sB,GAAwB,SAAC3zqB,EAAmBw9M,EAAgBxzT,GAChEs9wB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BACFA,GADL,IAEEkoB,MAAOloB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAClBA,EAAEz1C,KAAOyyR,EAAT,2BAAuBh9O,GAAvB,IAA0B4ksB,aAAcp7wB,IAASw2E,cAanDozsB,GAAsB,SAACp2d,GAC3B,OAAO9oG,EAASjpM,MAAK,SAAA8zD,GAAC,OAAIA,EAAEkoB,MAAMlwF,MAAK,SAAAipE,GAAC,OAAIA,EAAEz1C,KAAOyyR,SAmFjDq2d,GAA8B,SAAC7zqB,GACnCsnqB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BAAKA,GAAZ,IAAe6vC,UAAW7vC,EAAE6vC,kBAI1B0kqB,GAA6B,SACjC9zqB,EACA2gJ,EACAn7P,GAEA8hxB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,GAAczgC,EAAEwlsB,eACtB,2BACFxlsB,GADL,IAEEwlsB,eAAe,2BAAMxlsB,EAAEwlsB,gBAAT,kBAA0BpkhB,EAAQn7P,MAHI+5E,SAQpDw0sB,GAAsB,SAAC5xoB,EAA4B4qoB,GACvDzF,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAAM,IAAD,YAChC,IAAKA,EAAEwlsB,eAAkB,OAAOxlsB,EAChC,IAAMy0sB,GAAc,UAAAz0sB,EAAEwlsB,eAAe37D,iBAAjB,eAA4Br+qB,MAA5B,UAAkCw0C,EAAEwlsB,eAAe37D,iBAAnD,iBAAkC,EAA4Bv7sB,WAA9D,aAAkC,SAAkC,OAClFomxB,GAAa,UAAA10sB,EAAEwlsB,eAAez7D,gBAAjB,eAA2Bv+qB,MAA3B,UAAiCw0C,EAAEwlsB,eAAez7D,gBAAlD,iBAAiC,EAA2Bz7sB,WAA5D,aAAiC,SAAiC,OAC/EqmxB,EAAkC,MAAfF,GAAuBr7wB,OAAOq7wB,KAAiBr7wB,OAAOwpI,GACzEgyoB,EAAgC,MAAdF,GAAsBt7wB,OAAOs7wB,KAAgBt7wB,OAAOwpI,GAC5E,OAAK+xoB,GAAqBC,EACnB,2BACF50sB,GADL,IAEEwlsB,eAAe,2BACVxlsB,EAAEwlsB,gBADO,IAEZ37D,UAAW8qE,EAAmBnH,EAAiBxtsB,EAAEwlsB,eAAe37D,UAChEE,SAAU6qE,EAAkBpH,EAAiBxtsB,EAAEwlsB,eAAez7D,aANd/poB,SAYlD60sB,GAAsB,SAACp0qB,EAAmB1nG,GAC9CgvwB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,OAAIA,EAAEx0C,KAAOi1E,EAAoBzgC,EAC1B,2BAAKA,GAAZ,IAAejnE,gBAIb+7wB,GAA4B,SAACr0qB,EAAmB4uqB,GACpDn6uB,EAAS,IAAI65S,KAAuBsgc,KAGhC0F,GAAyB,SAACt0qB,EAAmBu9G,GACjD,IAAMg3jB,EAAwB,CAC5BxpvB,GAAIw7uB,KACJhpjB,OACAwgG,aAAc,KACd4nG,SAAU,EACV1tZ,MAAO,KACPmtwB,aAAc,UACdnnd,aAAa,GAGfqpd,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAOi1E,EAAa,OAAOzgC,EACjC,IAAMi1sB,EAAkBj1sB,EAAEwmsB,aACpBqN,EAAe7zsB,EAAEkoB,MAAM30F,KAAI,SAAA0tE,GAAC,OAChCA,EAAEz1C,KAAOypvB,EAAkBD,EAAU/zsB,KAEvC,OAAO,2BACFjB,GADL,IAEEkoB,MAAO2rrB,EACPrN,aAAcwO,EAAQxpvB,GACtB27uB,iBAAkB,OAClBE,gBAAiB,KACjB7B,eAAgB,aAIpBx6b,GAAWvqO,EAAWu0qB,EAAQxpvB,GAAIwyL,IAG9Bk3jB,GAAqB,SAACz0qB,GAC1B,IAAM63K,EAAUnjE,EAASjpM,MAAK,SAAA8zD,GAAC,OAAIA,EAAEx0C,KAAOi1E,KACxC63K,GACF2wf,GAAgB3wf,IAMd68f,GAAWhgkB,EAASvnM,SAAQ,SAAAoyD,GAAC,OAAIA,EAAEkoB,SACnCktrB,GAAmBD,GAASn9wB,MAAK,SAAAipE,GAAC,OAAsB,MAAlBA,EAAEu9O,gBACxC62d,GAAcF,GAAS/oxB,OAAS,GAAK+oxB,GAASr9wB,OAAM,SAAAmpE,GAAC,OAAsB,MAAlBA,EAAEu9O,gBAC3D82d,GAAoBngkB,EAASr9M,OAAM,SAAAkoE,GAAC,OAAuB,IAAnBA,EAAEkoB,MAAM97F,QAAkC,MAAlB4zE,EAAEwmsB,gBAClE9nd,GAAcy2d,GAASn9wB,MAAK,SAAAipE,GAAC,OAAIA,EAAEy9O,eACnC62d,GAAcH,IAAoBC,IAAeC,KAAsB52d,GA6FvE82d,GAAgB,SAACC,GACrBlC,GAAoBkC,GACpBnC,IAAqB,IAajBoC,GAAY,uCAAG,sDAAAxlxB,EAAA,sDACb2/G,EAAWslG,EAASr/M,QAAO,SAAAkqE,GAAC,OAAIA,EAAE6vC,YAGlC8lqB,EAAgB,IAAIvsxB,IACpBwsxB,EAAoB,IAAIxsxB,IALX,cAMHymH,GANG,IAMnB,2BAAW7vC,EAAe,SAClBixC,EADkB,UACRjxC,EAAEwlsB,sBADM,iBACR,EAAkBv0pB,eADV,aACR,EAA2B8X,OAAOplF,iBAE5CgyuB,EAAcnnxB,IAAIyiH,GACpB2kqB,EAAkB1swB,IAAI82D,EAAEx0C,IAExBmqvB,EAAczswB,IAAI+nG,IAZL,qCAkBnBiiqB,IAAqB,GACf2C,EAAqB,IAAIzsxB,IACzB0sxB,EAAkBjmqB,EAAS/5G,QAAO,SAAAkqE,GAAC,eAAK41sB,EAAkBpnxB,IAAIwxE,EAAEx0C,MAAzB,UAAgCw0C,EAAEwlsB,sBAAlC,iBAAgC,EAAkBv0pB,eAAlD,aAAgC,EAA2B8X,WApBrF,UAqBbv/E,QAAQwnJ,IAAI8klB,EAAgBvixB,IAAhB,uCAAoB,WAAOysE,GAAP,qBAAA9vE,EAAA,+EAEfsiG,EAAOJ,QAAQ,CAChCvB,QAAS,UACTC,SAAU,iBACV9vB,KAAM,CACJ8yC,QAAS,CAAE7C,QAAS,CAAEllF,GAAIi0C,EAAEwlsB,eAAgBv0pB,UAC5C16E,QAAS,CAAEy9E,MAAO,MAPY,OAE5Bq4B,EAF4B,QAU5B/+H,EAV4B,OAUpB++H,QAVoB,IAUpBA,GAVoB,UAUpBA,EAAK56G,eAVe,iBAUpB,EAAc6mP,eAVM,aAUpB,EAAuBnjE,WACxB7nM,EAAMlhB,OAAS,GAC1BypxB,EAAmB3swB,IAAI82D,EAAEx0C,IAZO,yGAApB,wDArBC,WAuCnB0nvB,IAAqB,GAEf6C,EAAkB,IAAI3sxB,IAAJ,sBAAYwsxB,GAAZ,YAAkCC,KACpDG,EAAanmqB,EAChB/5G,QAAO,SAAAkqE,GAAC,OAAI+1sB,EAAgBvnxB,IAAIwxE,EAAEx0C,OAClCj4B,KAAI,SAAAysE,GAAC,MAAK,CAAEs4M,QAASt4M,EAAGt5E,MAAOyuN,EAASpqM,QAAQi1D,GAAK,MAClDi2sB,EAAkBpmqB,EACrB/5G,QAAO,SAAAkqE,GAAC,OAAK4nsB,GAAe5nsB,MAC5BzsE,KAAI,SAAAysE,GAAC,MAAK,CAAEs4M,QAASt4M,EAAGt5E,MAAOyuN,EAASpqM,QAAQi1D,GAAK,MAEzB,IAA3Bi2sB,EAAgB7pxB,QAAsC,IAAtB4pxB,EAAW5pxB,OAjD5B,wBAkDjBopxB,GAAc3lqB,GAlDG,2BAqDnBmjqB,GAAqBgD,GACrBlD,EAA2BmD,GACvBA,EAAgB7pxB,OAAS,GAC3B+mxB,IAAsB,GACtBT,GAAqB,IAErBE,GAAsB,GA3DL,4CAAH,qDA8FlB5jvB,IAAM0B,WAAU,WACD,WAATvhC,IACF+lC,EAAS,IAAIq5S,MACZ/7O,EAAOJ,QAAQ,CAAEvB,QAAS,OAAQC,SAAU,iBAC1ChwB,MAAK,SAACurE,GAAc,IAAD,IACZklH,GAAW,OAAHllH,QAAG,IAAHA,GAAA,UAAAA,EAAK56G,eAAL,mBAAc3uB,YAAd,eAAoBsswB,YAAa,GAC/CgE,GAAkB7hhB,EAAMh+P,KAAI,SAAC4wE,GAAD,MAAgB,CAAE34C,GAAI24C,EAAK34C,GAAIvlC,MAAOk+E,EAAKl+E,cAExEirM,OAAM,kBAAMkilB,GAAkB,UAElC,CAACjkxB,IAEJ6/B,IAAM0B,WAAU,WACD,WAATvhC,GAAsBkjxB,GAC1Bl9jB,EAASl+M,SAAQ,SAAA+oE,GAAM,IAAD,IACdqvsB,EAAO,UAAGrvsB,EAAEwlsB,sBAAL,iBAAG,EAAkBjmZ,qBAArB,aAAG,EAAiC/zV,GAClC,MAAX6jvB,GACFn6uB,EAAS,IAAI65S,KAAuBsgc,SAGvC,CAAClgxB,EAAMgmN,EAAS5hN,KAAI,SAAAysE,GAAC,yBAAIA,EAAEwlsB,sBAAN,iBAAI,EAAkBjmZ,qBAAtB,aAAI,EAAiC/zV,MAAIxf,KAAK,OAItE,IAAMqiwB,GAAuBr/uB,IAAM+B,SAAQ,WACzC,OAAKshvB,GAAsBA,EAAmBvlwB,UAAoB,GAC3DulwB,EACJl/wB,WACAI,KAAI,SAAC2ixB,GAAD,MAAc,CAAE1qvB,GAAI0qvB,EAAG5nxB,IAAI,MAAOrI,MAAOiwxB,EAAG5nxB,IAAI,aACpDnB,YACF,CAACklxB,IAEE8D,GAAyBnnvB,IAAM+B,SAAQ,WAC3C,IAAKuhvB,EAAoB,MAAO,GAChC,IAAM/+wB,EAAyC,GAI/C,OAHA++wB,EAAiBr7wB,SAAQ,SAACijK,EAAYm1mB,GACpC97wB,EAAI6F,OAAOi2wB,IAAYn1mB,EAAMpxJ,UAExBvV,IACN,CAAC++wB,IAEE8D,GAAax6b,EACfzmI,EAASvnM,SAAQ,SAAAoyD,GAAC,OAAIA,EAAEkoB,SAAOh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAOowT,KAClD,KAEEy6b,GAAelhkB,EAASn9M,MAAK,SAAAgoE,GAAC,MAA2B,YAAvBA,EAAEmnsB,oBACpCmP,GAAsBnhkB,EAASn9M,MAAK,SAAAgoE,GAAC,OAAIA,EAAE6vC,YAC3C0mqB,GAAqB,WAATpnxB,GAAqBmnxB,KAAwBD,GAI/D,OACE,sBAAK1ysB,UAAS,UAAKF,EAAQM,UAAb,YAAmC,WAAT50E,EAAoBs0E,EAAQkusB,gBAAkBlusB,EAAQmusB,iBAA9F,UACE,cAAC7tqB,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQgxC,MAA5C,SACuBn+F,EAAX,WAATnnB,EAAsB,gCAAqC,yCAE9D,cAAC40G,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQg9C,SAA/C,SACuBnqG,EAAX,WAATnnB,EAAsB,mCAAwC,4CAGvD,WAATA,EACC,eAAC,KAAD,CACEwgT,QAASA,GACTgsC,mBAAoBlK,KACpB3zC,YAzbgB,SAACpsK,GACvB6gpB,EAAY7gpB,EAAM87I,OAAOhiP,IACzB+E,SAASywC,KAAK6kC,MAAM6uP,WAAa,QAwb3B/kB,WArbe,SAACj+M,GACtB,IAAQ87I,EAAiB97I,EAAjB87I,OAAQ5tF,EAASluD,EAATkuD,KAChB,GAAKA,EAAL,CAEA,IAAM42lB,EAAehpgB,EAAOhiP,GACtBirvB,EAAa72lB,EAAKp0J,GAElBkrvB,EAAgBrC,GAAoBmC,GACpCG,EAActC,GAAoBoC,GAEnCC,GAAkBC,GAAeD,EAAclrvB,KAAOmrvB,EAAYnrvB,IAIvEu8uB,GAAY,SAAAlmwB,GACV,IAAMm8M,EAAO04jB,EAAcxurB,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAOgrvB,KACpD,OAAKx4jB,EAEEn8M,EAAKtO,KAAI,SAAAysE,GACd,GAAIA,EAAEx0C,KAAOkrvB,EAAclrvB,GAAI,CAC7B,IAAMqovB,EAAe7zsB,EAAEkoB,MAAMpyF,QAAO,SAAAmrE,GAAC,OAAIA,EAAEz1C,KAAOgrvB,KAClD,OAAO,2BACFx2sB,GADL,IAEEkoB,MAAO2rrB,EACPrN,aAAcxmsB,EAAEwmsB,eAAiBgQ,EAC7B9C,GAAWG,GACX7zsB,EAAEwmsB,eAGV,GAAIxmsB,EAAEx0C,KAAOmrvB,EAAYnrvB,GAAI,CAC3B,IAAMsta,EAAY94X,EAAEkoB,MAAM33E,WAAU,SAAA0wD,GAAC,OAAIA,EAAEz1C,KAAOirvB,KAC5C/2d,EAAQ,YAAO1/O,EAAEkoB,OAEvB,OADAw3N,EAAS/lT,OAAOm/b,EAAW,EAAG96O,GACvB,2BACFh+I,GADL,IAEEkoB,MAAOw3N,EACP8md,aAAcxmsB,EAAEwmsB,eAAiB34D,GAAM7vf,GAAQA,EAAKxyL,GAAK,QAG7D,OAAOw0C,KAvBWn+D,OAsahBy7R,UA1Yc,SAAC5rK,GACrB,IAAQ87I,EAAiB97I,EAAjB87I,OAAQ5tF,EAASluD,EAATkuD,KAIhB,GAHA2ylB,EAAY,MACZhivB,SAASywC,KAAK6kC,MAAM6uP,WAAa,GAE5B90K,GAAQ4tF,EAAOhiP,KAAOo0J,EAAKp0J,GAAhC,CAEA,IAAMgrvB,EAAehpgB,EAAOhiP,GACtBirvB,EAAa72lB,EAAKp0J,GAElB8sP,EAAU+7f,GAAoBmC,GACpC,GAAKl+f,EAAL,CAEA,IAAMs+f,EAAmBvC,GAAoBoC,GACxCG,GAAoBt+f,EAAQ9sP,KAAOorvB,EAAiBprvB,IAEzDu8uB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,GAAIA,EAAEx0C,KAAO8sP,EAAQ9sP,GAAM,OAAOw0C,EAClC,IAAMsmlB,EAAWtmlB,EAAEkoB,MAAM33E,WAAU,SAAA0wD,GAAC,OAAIA,EAAEz1C,KAAOgrvB,KAC3Cxqf,EAAWhsN,EAAEkoB,MAAM33E,WAAU,SAAA0wD,GAAC,OAAIA,EAAEz1C,KAAOirvB,KACjD,IAAkB,IAAdnwH,IAAiC,IAAdt6X,EAAmB,OAAOhsN,EAEjD,IAAM0/O,EAAQ,YAAO1/O,EAAEkoB,OACvB,EAAgBw3N,EAAS/lT,OAAO2spB,EAAU,GAAnCvvX,EAAP,oBAEA,OADA2oB,EAAS/lT,OAAOqyR,EAAU,EAAG+K,GACtB,2BAAK/2N,GAAZ,IAAekoB,MAAOw3N,aA4WpB,UAOE,sBAAK/7O,UAAWF,EAAQousB,sBAAxB,UACG18jB,EAAS5hN,KAAI,SAAC+kR,GAAD,OACZ,cAAC,GAAD,CAEEA,QAASA,EACTgxf,gBAAiByK,GACjBtI,aAAcuI,GACdtI,gBAAiBuI,GACjBtI,gBAAiBwI,GACjBvI,kBAAmBwI,GACnBvI,oBAAqBvzf,EAAQpwL,MAAMlwF,MAAK,SAAAipE,GAAC,OAAsB,MAAlBA,EAAEu9O,kBAA0BlmC,EAAQkuf,cAP5Eluf,EAAQ9sP,OAUjB,sBACEm4C,UAAWF,EAAQqusB,iBACnB1iqB,QAvda,WACvB,IAAMynqB,EAAa1hkB,EAAS/oN,OAAS,EACrC27wB,GAAY,SAAAlmwB,GAAI,4BAAQA,GAAR,CAAck5X,GAAczkX,EAAE,6CAA8C,CAAEyuJ,OAAQ8xmB,WAmd9F,UAIE,cAAC,KAAD,CAAqBlzsB,UAAWF,EAAQyiV,UACxC,cAACniT,EAAA,EAAD,CAAYE,QAAQ,QAAQtgC,UAAWF,EAAQsusB,QAA/C,SACGz7vB,EAAE,iDAIT,cAAC,KAAD,UACG8/vB,GACC,cAACj3d,EAAA,EAAD,CACEt5M,MAAO,CACLx/B,QAAS,EACTkpC,gBAAiB,OACjB6V,OAAQ,iBACRpT,aAAc,EACdI,UAAW,8BANf,SASE,cAACrO,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6BmyqB,GAAWp4jB,KAAKjlN,SAE7C,UAIR,qBAAK4qE,UAAWF,EAAQousB,sBAAxB,SACG18jB,EAAS5hN,KAAI,SAAC+kR,EAAS/qR,GAAV,eACZ,cAAC,GAAD,CAEE7G,MAAO6G,EAAI,EACX+qR,QAASA,EACT43f,iBAAkBoE,GAClBnE,mBAAoB4E,GACpB3E,eAAgB8E,GAChBtJ,kBAAmBwI,GACnB/D,gBAAiBwE,GACjBvE,uBAAwBiE,GACxBtH,gBAAiBuH,GACjBjE,eAAgB,gBAAGtyd,EAAH,EAAGA,OAAQf,EAAX,EAAWA,SAAU65Z,EAArB,EAAqBA,kBAAmB9lY,EAAxC,EAAwCA,mBAAxC,OAAiEwic,GAAgB,CAAEx1d,SAAQf,WAAU65Z,oBAAmB9lY,wBACxIo9b,qBAAsBA,GACtBC,oBAAqB6H,GAAuB/8wB,OAAM,UAACk/Q,EAAQktf,sBAAT,iBAAC,EAAwBjmZ,qBAAzB,aAAC,EAAuC/zV,MAAQ0mvB,GAClG3D,sBAAuBuG,GACvBtG,mBAAoBA,IAAsBl2f,EAAQzoK,SAClD4+pB,eAAgBA,IAfXn2f,EAAQ9sP,SAqBrB,sBAAKm4C,UAAWF,EAAQs2R,OAAxB,UACE,cAAC7qP,EAAA,EAAD,CACEvrC,UAAWF,EAAQ+uT,WACnBpjR,QAAkB,WAATjgH,EA3Pe,WAC9B84wB,KACAmK,KAjCyB,WACzBnK,KAEAF,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAC3B,IAAMkoB,EAAQloB,EAAEknsB,uBACZlnsB,EAAEkoB,MAAMpyF,QAAO,SAAAmrE,GAAC,OAAIA,EAAEz1C,KAAOw0C,EAAEknsB,0BAC/BlnsB,EAAEkoB,MAEN,MAA2B,cAAvBloB,EAAEmnsB,iBACG,2BAAKnnsB,GAAZ,IAAekoB,QAAOg/qB,uBAAwB,OAGzC,2BACFlnsB,GADL,IAEEkoB,QACAg/qB,uBAAwB,KACxBvB,aAAc,KACdwB,iBAAkB,OAClBC,mBAAoB,EACpBC,gBAAiB,KACjBx3pB,UAAU,EACV21pB,eAAgB,KAChB8B,kCAAmC,KACnCC,wBAAyB,KACzBC,oBAAqB,KACrBC,sBAAuB,aAG3B+K,EAAQ,WA4PJ,SAIGl8vB,EAAE,sBAEK,WAATnnB,EACC,cAAC+/G,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACNiX,UAAW8tqB,GACXnmqB,QAxVa,WACrB,GAAa,WAATjgH,EAAmB,CAErB,IAAM2nxB,EAAoB3hkB,EAASr/M,QAAO,SAAAkqE,GAAC,OAAIA,EAAEkoB,MAAM97F,OAAS,KAE1D2qxB,EAAwC,GACxCC,EAAkBF,EAAkBvjxB,KAAI,SAAA+kR,GAC5C,IAAMuuf,EAAavuf,EAAQpwL,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQkuf,gBAC5D,KAAI,OAACK,QAAD,IAACA,OAAD,EAACA,EAAYrod,cAAgB,OAAOlmC,EAKxC,GAHsD,cAA7BA,EAAQ6uf,kBAC5B7uf,EAAQgvf,oCAAsCT,EAAWrod,aAAahzR,GAErD,CACpB,GAAI8sP,EAAQivf,wBAAyB,CACnC,IAAMsB,EAAQnB,GACZpvf,EAAQivf,wBACRjvf,EAAQkvf,qBAAuBX,EAAW7ojB,KAAKjlN,MAEjD,OAAO,2BAAKu/Q,GAAZ,IAAqBpwL,MAAM,CAAE2grB,GAAH,mBAAavwf,EAAQpwL,QAAQg/qB,uBAAwB2B,EAAMr9uB,KAEvF,OAAO8sP,EAIT,OADAy+f,EAA4BpgxB,KAAK2hR,EAAQ9sP,IAClC,2BACF8sP,GADL,IAEEqtf,aAAc,KACdwB,iBAAkB,OAClBC,mBAAoB,EACpBC,gBAAiB,KACjBx3pB,UAAU,EACV21pB,eAAgB,KAChB8B,kCAAmC,KACnCC,wBAAyB,KACzBC,oBAAqB,KACrBC,sBAAuB,UAI3BM,EAAYiP,GACZxE,EAAQ,UAERwE,EAAgB//wB,SAAQ,SAAAqhR,GACtB,GAAKy+f,EAA4BjjxB,SAASwkR,EAAQ9sP,IAAlD,CACA,IAAMq7uB,EAAavuf,EAAQpwL,MAAMh8E,MAAK,SAAA+0D,GAAC,OAAIA,EAAEz1C,KAAO8sP,EAAQkuf,iBAC5D,OAAIK,QAAJ,IAAIA,OAAJ,EAAIA,EAAYrod,eACdyqd,GAAgB3wf,SAqShB,SAMGhiQ,EAAE,0BAGL,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACNiX,UAAW8uqB,IAAatD,GACxB7jqB,QAASsmqB,GAJX,SAMGp/vB,EAAE,uCAMT,eAACiqS,EAAA,EAAD,CACErrN,KAAMu9qB,EACNvjpB,QAAS,kBAAMwjpB,GAAqB,IACpCr0pB,WAAY,CAAExY,MAAO,CAAEh/B,SAAU,MAHnC,UAKE,eAAC25O,EAAA,EAAD,CAAe36M,MAAO,CAAE2W,WAAY,IAApC,UACE,cAAC2iM,EAAA,EAAD,CAAKt5M,MAAO,CAAE2R,UAAW,SAAUoG,aAAc,IAAjD,SACE,cAAC,KAAD,CAAoBlM,SAAS,QAAQ/tC,UAAWF,EAAQuusB,0BAE1D,qBAAKnsqB,MAAO,CAAEisM,UAAW,OAAQzwC,UAAW,KAA5C,SACE,eAAC89C,EAAA,EAAD,CAAKx7O,UAAWF,EAAQwusB,kBAAxB,UACE,eAACluqB,EAAA,EAAD,CAAYE,QAAQ,QAApB,UACG3tF,EAAE,qDADL,IAC2D,iCAASA,EAAE,oDADtE,OAGA,qBAAKuvF,MAAO,CAAEgB,UAAW,GAAzB,SACGgsqB,EAAwBt/wB,KAAI,gBAAG+kR,EAAH,EAAGA,QAAS5xR,EAAZ,EAAYA,MAAZ,OAC3B,sBAAsBm/G,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,SAAU8wT,IAAK,GAA3E,UACE,cAAC,IAAD,CAAW9jS,MAAM,QAAQqV,MAAO,CAAE6L,SAAU,MAC5C,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQpgC,UAAU,OAAOgiC,MAAO,CAAEmb,WAAY,UAAlE,UACG1qG,EAAE,iDAAkD,CAAE5vB,UAAU,QAEnE,cAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQpgC,UAAU,OAAO2sB,MAAM,UAAnD,SACG8nL,EAAQv/Q,SANHu/Q,EAAQ9sP,iBAc5B,eAACm1R,GAAA,EAAD,CAAe96M,MAAO,CAAE5/B,eAAgB,SAAUw2C,cAAe,IAAjE,UACE,cAACvN,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,kBAAMsjqB,GAAqB,IAHtC,SAKGp8vB,EAAE,8CAEJ6+L,EAASn9M,MAAK,SAAAgoE,GAAC,OAAIA,EAAE6vC,UAAY+3pB,GAAe5nsB,OAC/C,cAACkvC,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QA1OyB,WACnCsjqB,GAAqB,GACrB,IAAMuE,EAAqB,IAAI7txB,IAAIypxB,EAAwBt/wB,KAAI,qBAAG+kR,QAAsB9sP,OAClF0rvB,EAAqBnE,GAAkBj9wB,QAAO,gBAAGwiR,EAAH,EAAGA,QAAH,OAAkB2+f,EAAmBzoxB,IAAI8pR,EAAQ9sP,OACrG,GAAI0rvB,EAAmB9qxB,OAAS,EAC9B4mxB,GAAqBkE,GACrBtE,GAAsB,OACjB,CACL,IAAMuE,EAAgBhikB,EAASr/M,QAAO,SAAAkqE,GAAC,OAAIA,EAAE6vC,UAAY+3pB,GAAe5nsB,MACxEmzsB,IAAsB,GACtBqC,GAAc2B,KA6NR,SAKG7gwB,EAAE,4DAOX,eAACiqS,EAAA,EAAD,CACErrN,KAAMy9qB,EACNzjpB,QAAS,kBAAM0jpB,GAAsB,IACrCv0pB,WAAY,CAAExY,MAAO,CAAEh/B,SAAU,MAHnC,UAKE,eAAC25O,EAAA,EAAD,CAAe36M,MAAO,CAAE2W,WAAY,IAApC,UACE,cAAC2iM,EAAA,EAAD,CAAKt5M,MAAO,CAAE2R,UAAW,SAAUoG,aAAc,IAAjD,SACE,cAAC,KAAD,CAAoBlM,SAAS,QAAQ/tC,UAAWF,EAAQuusB,0BAE1D,qBAAKnsqB,MAAO,CAAEisM,UAAW,OAAQzwC,UAAW,KAA5C,SACE,eAAC89C,EAAA,EAAD,CAAKx7O,UAAWF,EAAQwusB,kBAAxB,UACE,eAACluqB,EAAA,EAAD,CAAYE,QAAQ,QAApB,UACG3tF,EAAE,qDAAsD,IACzD,iCAASA,EAAE,4DAFb,OAIA,qBAAKuvF,MAAO,CAAEgB,UAAW,GAAzB,SACGksqB,GAAkBx/wB,KAAI,gBAAG+kR,EAAH,EAAGA,QAAS5xR,EAAZ,EAAYA,MAAZ,OACrB,sBAAsBm/G,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,SAAU8wT,IAAK,GAA3E,UACE,cAAC,IAAD,CAAW9jS,MAAM,QAAQqV,MAAO,CAAE6L,SAAU,MAC5C,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQpgC,UAAU,OAAOgiC,MAAO,CAAEmb,WAAY,UAAlE,UACG1qG,EAAE,iDAAkD,CAAE5vB,UAAU,QAEnE,cAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQpgC,UAAU,OAAO2sB,MAAM,UAAnD,SACG8nL,EAAQv/Q,SANHu/Q,EAAQ9sP,iBAc5B,eAACm1R,GAAA,EAAD,CAAe96M,MAAO,CAAE5/B,eAAgB,SAAUw2C,cAAe,IAAjE,UACE,cAACvN,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAAS,kBAAMwjqB,GAAsB,IAHvC,SAKGt8vB,EAAE,8CAEJ6+L,EAASn9M,MAAK,SAAAgoE,GAAC,OAAIA,EAAE6vC,UAAY+3pB,GAAe5nsB,KAAO+ysB,GAAkB/6wB,MAAK,SAAA3H,GAAC,OAAIA,EAAEioR,QAAQ9sP,KAAOw0C,EAAEx0C,UACrG,cAAC0jF,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QAhRiB,WAC3B,IAAMgoqB,EAAe,IAAIhuxB,IAAI2pxB,GAAkBx/wB,KAAI,qBAAG+kR,QAAsB9sP,OACtE2rvB,EAAgBhikB,EAASr/M,QAAO,SAAAkqE,GAAC,OAAIA,EAAE6vC,UAAY+3pB,GAAe5nsB,KAAOo3sB,EAAa5oxB,IAAIwxE,EAAEx0C,OAClGonvB,GAAsB,GACtBO,IAAsB,GACtBqC,GAAc2B,IAwQN,SAKG7gwB,EAAE,sDAGP,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QAhRc,WACtB,IAAM+nqB,EAAgBhikB,EAASr/M,QAAO,SAAAkqE,GAAC,OAAIA,EAAE6vC,UAAY+3pB,GAAe5nsB,MACxE4ysB,GAAsB,GACtBO,IAAsB,GACtBqC,GAAc2B,IAyQR,SAKG7gwB,EAAE,uDAKT,cAAC,IAAD,CACEujG,SAAUmiK,KACV0gY,cAAe,cAAC,IAAD,CAA0BC,SAAU3gY,SAGrD,cAAC,GAAD,CACE9mL,KAAMm+qB,GACNtN,iBAAkBA,GAClB3gG,WA9XyB,SAACuhG,GAC9BoB,GAAY,SAAAlmwB,GAAI,OAAIA,EAAKtO,KAAI,SAAAysE,GAAC,OAC5B2msB,EAAW7ywB,SAASksE,EAAEx0C,IAAtB,2BAAiCw0C,GAAjC,IAAoC6vC,UAAU,IAAU7vC,SA6XtDkvD,QAAS,kBAAMokpB,IAAqB,IACpC5+M,OA1Xa,WACjBx/hB,EAASv+B,YAAKwpB,oBAAmB,CAAEk3vB,iBAAkB,IAAI/+vB,MAAQC,gBA4X9Di7vB,IACC,cAAC55D,GAAA,EAAD,CACE37Z,OAAQu1d,GAAav1d,OACrBf,SAAUs2d,GAAat2d,SACvB+7I,aAAc,EACdugR,kBAAkB,EAClBzC,kBAAmBy8D,GAAaz8D,kBAChC9lY,mBAAoBuic,GAAavic,mBACjC/hN,QAAS,kBAAMukpB,GAAgB,aC95BnCnpb,GAAat7T,cAAsC,SAAwByF,EAAOzuC,GACtF,OAAO,cAACwloB,EAAA,EAAD,aAAOvnjB,UAAU,KAAKj+E,IAAKA,GAASyuC,OAiFvCg3X,G,4MAIGl6X,MAAQ,CACb2jE,MAAM,EACNoirB,kBAAkB,EAClBC,eAAgB3gb,IAAequa,Q,EAkB1B1pgB,mBAAqB,SAAC3yJ,EAAW4yJ,GAAe,IAAD,IACpD,EAKI,EAAK/mO,MAJPS,EADF,EACEA,SACAurE,EAFF,EAEEA,UACAw3R,EAHF,EAGEA,kBACAjZ,EAJF,EAIEA,WAGI9pR,EAAI,UAAG,EAAKzgE,MAAMygE,YAAd,QAAsB,EAAK3jE,MAAM2jE,KACrCwhlB,EAAQ,UAAG9tkB,EAAU1T,YAAb,QAAqBsmK,EAAUtmK,MAG1B,IAAfuL,IAA2C,IAAvBw3R,GAA4Bx3R,IAAcw3R,GAAqBrvR,EAAUqvR,oBAAsBA,GACrH/iW,EAASv+B,YAAKynB,mBAIZ82E,IAASwhlB,GACX,EAAKvpkB,SAAS,CAAEoqqB,gBAA0B,OAAVv4Z,QAAU,IAAVA,OAAA,EAAAA,EAAYxwX,IAAImoW,IAAuCiqB,iCAAkC,KAAOhqB,IAAequa,U,EAI5IuS,iBAAmB,kBAAM,EAAKrqqB,SAAS,CAACmqqB,kBAAkB,K,EAE1DvoZ,WAAa,WAClB,MAII,EAAKt6V,MAHPuqV,EADF,EACEA,WACAC,EAFF,EAEEA,cACA3oW,EAHF,EAGEA,EAKF,OAEMA,GAJQ,OAAG0oW,QAAH,IAAGA,OAAH,EAAGA,EAAYxwX,IAAImoW,IAAuCirB,iBAG/D3C,EACD,4BACA,wBAECA,EACD,6BACA,2B,EAkLF24W,aAAe,SAAC1ioB,GAAD,OAAmB,WACxC,IAAQg6B,EAAY,EAAKz6F,MAAjBy6F,QAEA2omB,EACJ,EAAKtmsB,MADP2jE,KAEF,EAAKiY,SAAS,CACZjY,KAAc,MAARA,EAAeA,GAAQ2ioB,KAElB,IAAT3ioB,IACK,OAAPg6B,QAAO,IAAPA,U,uDAlPJ,WAAkC,IAAD,EAE7B8vP,EACEz0X,KAAKkqC,MADPuqV,WAGI9pR,EAAI,UAAG3qG,KAAKkqC,MAAMygE,YAAd,QAAsB3qG,KAAKgnC,MAAM2jE,MAG7B,OAAV8pR,QAAU,IAAVA,OAAA,EAAAA,EAAYxwX,IAAImoW,IAAuCiqB,kCAAmC1rR,EAC5F3qG,KAAK4iH,SAAS,CAAEoqqB,eAAgB,OAEhChtxB,KAAK4iH,SAAS,CAAEoqqB,eAAgB3gb,IAAequa,W,oBAgDnD,WAAiB,IAAD,OACd,EAmBI16wB,KAAKkqC,MAlBPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACMwhtB,EAHR,EAGE5ioB,KAHF,IAIEw2T,cAJF,MAIWnha,KAAKqtuB,aAJhB,MAKE54W,kBALF,MAKe51X,gBALf,EAMEkvR,EANF,EAMEA,QACA73K,EAPF,EAOEA,UACA7yD,EARF,EAQEA,KACA63B,EATF,EASEA,MACAu6S,EAVF,EAUEA,YACAf,EAXF,EAWEA,cACA7rU,EAZF,EAYEA,cACAyzQ,EAbF,EAaEA,SACA/tM,EAdF,EAcEA,kBACAqnQ,EAfF,EAeEA,oBACAC,EAhBF,EAgBEA,kBACA88D,EAjBF,EAiBEA,YAIF,GArBA,EAkBElpY,SAMEzpD,KAAKgnC,OAFDsmsB,EADR,EACE3ioB,KACAqirB,EAFF,EAEEA,eAGI5kgB,EAA+B,MAAlBmld,EACb5ioB,EAAOy9K,EAAamld,EAAiBD,EACrC93W,EAAQ,OAAGf,QAAH,IAAGA,OAAH,EAAGA,EAAYxwX,IAAImoW,IAAuCirB,gBAElE61Z,GAD2B,OAAGz4Z,QAAH,IAAGA,OAAH,EAAGA,EAAYxwX,IAAImoW,IAAuCiqB,mCACxBb,EAC7D23Z,EAA4BD,GAAgD,MAAlBF,EAEhE,OACE,iCACK5kgB,GACD,cAACzjK,EAAA,EAAD,CACEE,QAAS7kH,KAAKqtuB,cAAa,GAD7B,SAIIrtuB,KAAKwkY,eAKX,eAACxuE,EAAA,EAAD,CACE48H,YAAY,EACZjoV,KAAMA,IAAQ,EACdg6B,QAAS3kI,KAAKitxB,iBACdpnpB,oBAAqBk6N,GACrB3mR,UAAYo8S,GAAad,EAA0C,GAAzB,sBAL5C,UAOE,cAACmN,EAAA,EAAD,CACEzoT,UAAWF,EAAQghS,OACnBj0Q,MAAO0sV,GAA4B,UAFrC,SAIE,eAACE,EAAA,EAAD,WACE,cAACn4T,EAAA,EAAD,CACEz0B,MAAM,UACN4e,QAAS7kH,KAAKitxB,iBACd,aAAW,QACX/vqB,UAAWu4Q,EAJb,SAME,cAAC,IAAD,MAEF,cAACj8Q,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQg9C,SAFrB,SAKIl2H,KAAKwkY,oBAKb,eAAC3rT,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ2znB,eAJrB,UAME,cAACh0nB,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQ41L,cAFrB,SAKIzrN,IAAS5pB,WAAS4vB,KACd,cAACg9V,EAAA,EAAD,aACE/qU,MAAM,KACNi2C,OAAO,KACPtrB,MAAO,CACL+e,gBAAiBn8D,EAAgBqyB,EAAM+pC,QAAQ+d,UAAU,KAAO9nD,EAAM+pC,QAAQE,QAAQ,KACtF8I,YAAaplE,EAAgBqyB,EAAM+pC,QAAQ+d,UAAU1gG,KAAO44C,EAAM+pC,QAAQE,QAAQ7iF,OAEhFisF,IAEN,cAAC,IAAD,CACEjzC,MAAO,GACPlC,UAAWF,EAAQ04C,KACnBpL,IAAK4mqB,MAIf,cAACv0sB,EAAA,EAAD,CACEe,MAAM,EADR,SAGE,cAAC4/B,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQgxC,MAFrB,SAKIlqH,KAAKwkY,oBAMX2oZ,GACE,cAAC3zqB,EAAA,EAAD,CACEE,QAAQ,KACRD,MAAM,SAFR,SAIG1tF,EAAE,yDAKY,OAAnBihwB,EAEM,cAAC,EAAD,CACExS,kBAAmB,SAACnzqB,GAAD,OAAY,EAAKub,SAAS,CAAEoqqB,eAAgB3lrB,OAGnE2lrB,IAAmB3gb,IAAequa,OAE9B,cAAC,IAAD,CACEhmZ,cAAeA,EACfD,WAAYA,EACZ1mG,QAASynG,EAAWznG,OAAUjyR,EAC9Bo6G,UAAWs/Q,EAAWt/Q,GAAa,EACnComN,SAAUA,EACVs5D,oBAAqBA,EACrBC,kBAAmBA,EACnBC,gBAAiBo3Z,EAA6B,kBAAM,EAAKtqqB,SAAS,CAAEoqqB,eAAgB,aAAUlxxB,IAIhG,cAAC,GAAD,CAAQ+rxB,kBAAmB,kBAAM,EAAKjlqB,SAAS,CAAEoqqB,eAAgB,aAI7E,cAAC3jL,EAAA,EAAD,CACE1+f,KAAM3qG,KAAKgnC,MAAM+lvB,iBACjB7+Z,YAAaniW,EAAE,mCACfoiW,YAAa,CACX7xS,SAAU,KACVu9B,WAAW,GAEbw0Q,SAAUtiW,EAAE,4BACZkiW,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAACmqqB,kBAAkB,KAC1D7jd,aAAc,WACZ,EAAKtmN,SAAS,CACZmqqB,kBAAkB,IAEpB5rX,GAAO,EAAPA,IAGF7yC,aAAa,W,GA7Oa7pV,aAiQ9BmI,GAAkBkG,YAAyB,CAC/CuQ,KAAMF,cACNuqV,kBAAmBnjL,cACnBkrK,YAAappK,cACbxjK,cAAeF,cACf4lE,kBAAmBnkE,cACnBuoY,YAAaroY,gBASA2qB,sBACbgG,aA9Va,SAACC,GACd,MAAO,CACLg/R,OAAQ,CACNj9P,SAAU,YAEZiZ,SAAU,CACR8L,KAAM,EACN/7B,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B5e,MAAO,CACL8X,KAAM,GAERpQ,KAAM,CACJt2C,MAAO,GACPi2C,OAAQ,IAEVs7kB,eAAgB,CACdtxnB,OAAO,GAAD,OAAuB,IAAlBL,EAAMZ,UAAX,SAERw0L,cAAe,CACbvzL,OAAO,KAAD,OAAyB,IAAlBL,EAAMZ,UAAb,cA0US,CAAE00C,WAAW,IAChCg8iB,YAAc,CAACC,aAAa,IAC5B9rnB,YAAgB,gBAChB0/D,kBAAQjyE,IAViB,SAACjC,GAC1B,MAAO,CACLA,eAIWsqC,CAKbisV,K,2nBCxUamsX,GA1EoD,SAAC,GAAgC,IAA9B1irB,EAA6B,EAA7BA,KAAMg6B,EAAuB,EAAvBA,QAASopJ,EAAc,EAAdA,QAC3EhiQ,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBAEXg9uB,EAAgBv/f,EAAQhqR,IAAI,gBAAkBusX,KAAkBqyP,YAEtE,EAKI4qK,aAAwB,CAAED,gBAAerqgB,OAAQt4K,IAJnD6irB,EADF,EACEA,YACAtgL,EAFF,EAEEA,cACAugL,EAHF,EAGEA,oBACAC,EAJF,EAIEA,uBAEIC,EAAsBC,eAC5B,EAA0ClvuB,mBAAgB,IAA1D,mBAAOmvuB,EAAP,KAAsBC,EAAtB,KAIA3nvB,qBAAU,WACR,GAAIwkE,EAAM,CACR,IAAM8nQ,EAAa1kF,EAAQhqR,IAAI,cAC/B+pxB,EAAiBr7a,GAAcA,EAAW12W,KAAO,EAAI02W,EAAWl0V,OAAS,SAEzEuvwB,EAAiB,MAElB,CAACnjrB,IAEJ,IAAMojrB,EAAcC,aAAe,CACjC1jgB,QAASgjgB,EACTtxpB,SAAUyxpB,EACV3svB,MAAO/U,EAAE,8BACTyvF,SAAU,SAACwgB,GAAD,OAAa0xpB,GAAwB1xpB,MAGjD,OACE,gBAACg6L,GAAA,EAAD,CAAQrrN,KAAMA,EAAMg6B,QAASA,EAAS9qB,WAAW,EAAMv9B,SAAS,KAAhE,UACE,eAAC87V,GAAA,EAAD,CAAasxU,mBAAmB,EAAhC,SACE,gBAAC7wqB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,sCAC5B,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS8f,EAAlC,SACE,eAAC,KAAD,WAIN,eAACsxL,GAAA,EAAD,CAAe36M,MAAO,CAAE+X,aAAc,IAAtC,SACE,eAAC0nS,GAAA,EAAD,CACEp6S,UAAU,EACVjlH,MAAOmyxB,EACP7hvB,QAASwhvB,EACTpsd,eAAgB2sd,EAChB1spB,eAAgB,SAAC7gB,GAAD,OAAYA,GAASA,EAAOw2P,UAAiB,IAC7DnV,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAmB8kH,EAAOv/E,KAAOvlC,EAAMulC,IAC1Du6E,SAAU,SAAC8nqB,EAAQ5nxB,GACjBoyxB,EAAiBpyxB,GACjBivC,EAAS,IAAIynE,KAA8B,CACzC8D,UAAW63K,EAAQhqR,IAAI,MACvB0uW,WAAY/2W,MAGhB8mH,cAAe,SAAC8gqB,EAAQ5nxB,GAAT,OAAmBwxmB,EAAcxxmB,IAChDmhV,YAAa,SAAClqS,GAAD,OACX,eAACujR,GAAA,EAAD,2BACMvjR,GADN,IAEEq4E,YAAaj/F,EAAE,mCACf8tF,WAAW,MAGf2+M,aAAc,SAACh4M,GAAD,OAAY,eAAC4wnB,GAAA,EAAD,CAAmB5iuB,KAAMgyG,EAAOw2P,SAAUzqT,WAAYi0D,EAAOj0D,cACvF2xhB,WAAYmzJ,aAAqBs8C,WC2F5B14sB,qBACb91B,YAAgB,gBAChB87B,aAxIa,SAACC,GAAD,MAA+B,MAyI5C2jC,mBAd0B,WAC1B,IAAMovqB,EAAiBllpB,cACjBmlpB,EAAkB/suB,eAClBgtuB,EAA2BjquB,eACjC,OAAO,SAACld,GAAD,MAAY,CACfyiB,SAAUwkuB,EAAejnvB,GACzBisnB,UAAWi7H,EAAgBlnvB,GAC3BonvB,mBAAoBD,EAAyBnnvB,OAOpB,MAHhBiuC,EAnI+C,SAAC/qC,GAC7D,IACE6jP,EAQE7jP,EARF6jP,QACAtkO,EAOEvf,EAPFuf,SACAzd,EAME9B,EANF8B,QACAwxF,EAKEtzF,EALFszF,WACAjU,EAIEr/E,EAJFq/E,QACAx9F,EAGEme,EAHFne,EACAknoB,EAEE/onB,EAFF+onB,UACAm7H,EACElkvB,EADFkkvB,mBAGF,EAA8C3pvB,YAAe,GAA7D,mBAAO4pvB,EAAP,KAAwBC,EAAxB,KACM3jvB,EAAW2F,wBACXuc,EAAgBkgK,cAEhB72G,EAAY63K,EAAQhqR,IAAI,MAExBwqxB,EAAkB9pvB,WAAc,WAAO,IAAD,EACpC+pvB,EAAoB,UAAGzggB,EAAQhqR,IAAI,gBAAf,aAAG,EAAsBwH,QAAO,SAAC89C,GAAD,OAAUA,EAAKtlD,IAAI,SAAWslD,EAAKtlD,IAAI,oBACjG,UAAIyqxB,QAAJ,IAAIA,OAAJ,EAAIA,EAAsBp5wB,QAAS,CACjC,IAAI8lH,EAAiB,KACjBuzpB,EAAmB,KAQvB,OAPAD,EAAqB9hxB,SAAQ,SAAC28C,GAC5B,IAAM0iE,EAAO,IAAIh+F,KAAKs7B,EAAKtlD,IAAI,iBACN,OAArB0qxB,GAA6B1iqB,EAAO0iqB,KACtCA,EAAmB1iqB,EACnBmP,EAAiB7xE,EAAKtlD,IAAI,UAGvBm3H,EAEP,OAAO,OAER,CAAChlB,IA0CEo4N,EAAS,sBACVigd,EAAkB,CAAC,CAClBjqxB,IAAK,mBACL6tJ,QAASpmI,EAAE,yCACX84F,QAAS,kBATbpe,IAAmB9rE,kBAAgB+zvB,kBAAmB7huB,EAAc,CAAC0huB,qBACrE5jvB,EAAS,IAAI4I,IAAoB,CAACmsF,UAAW3xG,KAAK+xB,MAAO50B,OAAQyP,kBAAgBg0vB,uBACjFhkvB,EAASv+B,YAAK,GAAD,OAAIipB,kCAAJ,YAAuCk5vB,QASlD,IANW,CAOb,CACEjqxB,IAAK,gBACL6tJ,QAASpmI,EAAE,+BACX84F,QAAS,WAvBXokB,YAAW,CACTjf,SAAS,GAAD,OAAKvyF,oBAAL,YAA0By+E,GAClCvrE,WACA8e,YAHFw/E,QAaa,YAYVmlpB,EAAqB,CAAC,CACvB9pxB,IAAK,aACL6tJ,QAASpmI,EAAE,mCACX84F,QAAS,kBAAMypqB,GAAmB,MAC/B,KAGD1iH,EAAiB,CACrBtnqB,IAAK,kBACL6tJ,QAASpmI,EAAE,iCACXmxF,UAAU+1iB,IAAaA,EAAU1ppB,SAASo4C,IAASC,WAGrD,OACE,uCACE,eAACgtuB,EAAA,EAAD,CACE3tvB,GAAIi1E,EACJ1nG,KAAMu/Q,EAAQhqR,IAAI,QAClBuqU,UAAWA,EACXs9V,eAAgBA,EAChBC,WAxEe,WAAO,IAAD,QACnBgjH,EAAsB,CAC1B,IAAO,IAELrxpB,GACFqxpB,EAAezixB,KAAK,CAClB,KAAQ,CACN,KAAQoxH,KAIdjU,IAAW,EAAAslqB,EAAeptvB,KAAIr1B,KAAnB,oBAA4Bm9G,EAAgB9nF,MACrB,IAA9BotvB,EAAeptvB,IAAI5/B,eACZgtxB,EAAeptvB,IAE1BkJ,EAAS,IAAIqlE,MACbrlE,EAAS,IAAImqE,IAAqC,CAC9C7zE,GAAIi1E,EACJg2K,YAAW,iBAAE6B,QAAF,IAAEA,OAAF,EAAEA,EAAShqR,IAAI,eAAf,QAA0B,GACrC2wN,QAAO,iBAAEq5D,QAAF,IAAEA,GAAF,UAAEA,EAAShqR,IAAI,gBAAf,aAAE,EAAuBiF,KAAI,SAAAqgD,GAAI,OAAIA,EAAKtlD,IAAI,SAAO0d,KAAK,YAA1D,QAAkE,GACzEuqB,UACAu9E,QAASslqB,MAoDTvga,aAAa,IAEf,eAAC,GAAD,CACE3jR,KAAM0jrB,EACN1ppB,QAAS,kBAAM2ppB,GAAmB,IAClCvggB,QAASA,U,uFC/JXv+J,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C+5E,KAAM,CACJ5qC,SAAU,UACVuJ,UAAW,UACXtX,UAAWphC,EAAMZ,QAAQ,MAE3Bg1f,WAAY,CACV7zf,cAAe,MACfg7C,WAAY,UAEd+4c,aAAc,CACZ57c,UAAW,UACX3B,WAAY,GAEd68pB,QAAS,CACPttqB,YAAatmC,EAAMZ,QAAQ,QA0ChBy0sB,GAtCW,SAAC7kvB,GACzB,IAAMgvC,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAMR,OACE,qCACE,gBAACimS,GAAA,EAAD,CACE54O,UAAWF,EAAQ+7E,KACnBv5J,MAAK,OAAEwuC,QAAF,IAAEA,OAAF,EAAEA,EAAO2nR,SACdr2M,SATkB,SAAC2rB,EAA8Bt3H,GACrDq6B,EAAM8kvB,gBAAgBn/wB,IASlB6pG,QAAQ,YACR,aAAY3tF,EAAE,6CALhB,UAOE,eAAComS,GAAA,EAAD,CACErxR,MAAO/U,EAAE,6BACTrwB,MAAO,cACPw9E,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,gBAGvB,eAACr9Q,GAAA,EAAD,CACErxR,MAAO/U,EAAE,yCACTrwB,MAAO,kBACPw9E,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,sB,uICuFhBy/M,GARK,CAClBC,wBAxH8B,SAAC/zqB,EAAYqiB,GAC3C,IAAM80O,EAAUn3P,GAAcA,EAAWv6F,MAAM,CAAC,UAAW,KAAM,SAAU,MACrEsxV,EAAW/2P,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,KAAM,SAAU,MACvEuxV,EAAOh3P,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,KAAM,SAAU,MAC/DuuwB,EAAeh0qB,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,QAAUu6F,EAAWv6F,MAAM,CAAC,WAAY,OAAO5X,KAAI,SAAComxB,GACnH,IAAMjpqB,EAAYipqB,GAAYA,EAASjpqB,UACjCC,EAAWgpqB,GAAYA,EAAShpqB,SAChCF,EAAekpqB,GAAYA,EAASlpqB,aAC1C,MAAM,WAAN,OAAkBC,EAAlB,YAA+BC,EAA/B,0BAAyDF,MA0C3D,MAxCoB,CAClB+3E,OAAQzgE,EAAW37H,OAAS27H,EAAa,KACzC6xpB,eAAgBl0qB,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,OAAQ,IAAMu6F,EAAWv6F,MAAM,CAAC,OAAQ,QAAS,MAAQ,KACjH6oC,UAAW6oT,GAAWJ,GAAYC,IAAS,CAAC,GAAD,OACtCG,GAAW,KAD2B,UAEtCJ,GAAY,KAF0B,UAGtCC,GAAQ,MACX1wV,KAAK,MACP03S,OAAQh+M,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,KAAM,SAAU,OAAS,KAC7EujX,iBAAkBhpR,GAAcA,EAAWv6F,MAAM,CAAC,aAAc,KAAM,SAAU,OAAS,KACzF27H,kBAAmBphC,GAAcA,EAAWv6F,MAAM,CAAC,cAAe,KAAM,SAAU,OAAS,KAC3F0uwB,oBAAqBn0qB,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,OAAQ,OAAS,KAClF2uwB,oBAAqBp0qB,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,OAAQ,OAAS,KAClF4uwB,aAAcr0qB,GAAcA,EAAWv6F,MAAM,CAAC,UAAW,OAAQ,OAAS,KAC1E6uwB,WAAYt0qB,GAAcA,EAAWv6F,MAAM,CAAC,UAAW,OAAQ,OAAS,KACxEo0W,cAAe75Q,GAAcA,EAAWv6F,MAAM,CAAC,kBAAmB,KAAM,SAAU,OAAS,KAC3Fq0W,aAAc95Q,GAAcA,EAAWv6F,MAAM,CAAC,iBAAkB,KAAM,SAAU,OAAS,KACzF8uwB,iBAAkBv0qB,GAAcA,EAAWv6F,MAAM,CAAC,cAAe,OAAQ,OAAS,KAClF+uwB,eAAgBx0qB,GAAcA,EAAWv6F,MAAM,CAAC,cAAe,OAAQ,OAAS,KAChF6zM,aAAct5G,GAAcA,EAAWv6F,MAAM,CAAC,YAAa,KAAM,SAAU,OAAS,KACpFgvwB,YAAaz0qB,IAAeA,EAAWv6F,MAAM,CAAC,gBAAiB,KAAM,KAAOu6F,EAAWv6F,MAAM,CAAC,gBAAiB,MAAO,KAClH,CACAu6F,GAAcA,EAAWv6F,MAAM,CAAC,gBAAiB,KAAM,IAAM,UAAY,KACzEu6F,GAAcA,EAAWv6F,MAAM,CAAC,gBAAiB,MAAO,IAAM,YAAc,MAE5E,KACJivwB,yBAA2B10qB,IAAeA,EAAWv6F,MAAM,CAAC,OAAQ,KAAM,KAAOu6F,EAAWv6F,MAAM,CAAC,OAAQ,MAAO,KAAOu6F,EAAWv6F,MAAM,CAAC,aAAc,MAAO,KAC5J,CACAu6F,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,MAAO,IAAM,cAAgB,KACrEu6F,GAAcA,EAAWv6F,MAAM,CAAC,OAAQ,KAAM,IAAM,UAAY,KAChEu6F,GAAcA,EAAWv6F,MAAM,CAAC,aAAc,MAAO,IAAM,QAAU,MAErE,KACJkvwB,oBAAqB30qB,GAAcA,EAAWv6F,MAAM,CAAC,YAAa,OAAQ,OAAS,KACnFmvwB,oBAAqB50qB,GAAcA,EAAWv6F,MAAM,CAAC,YAAa,OAAQ,OAAS,KACnFovwB,gBAAiB70qB,GAAcA,EAAWv6F,MAAM,CAAC,mBAAoB,KAAM,cAAe,OAAS,KACnGq3H,QAASk3oB,EACT/6jB,WAAYj5G,GAAcA,EAAWv6F,MAAM,CAAC,WAAY,KAAM,SAAU,OAAS,KACjFqvwB,oBAAqB90qB,GAAcA,EAAWv6F,MAAM,CAAC,aAAc,MAAO,OAAS,OAyErFsvwB,mBApEyB,WAkBzB,MAjB+B,CAC7B,CAAEjvvB,GAAI,GAAIH,MAAO,GAAIs6C,SAAS,EAAMi3U,UAAU,GAC9C,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GAC5G,CAAEpxX,GAAI,eAAgBH,MAAO,oCAAqCipF,KAAM,CAAC,cAAe3uC,SAAS,EAAOi3U,UAAU,GAClH,CAAEpxX,GAAI,kBAAmBH,MAAO,iCAAkCipF,KAAM,CAAC,WAAY3uC,SAAS,EAAMi3U,UAAU,GAC9G,CAAEpxX,GAAI,OAAQH,MAAO,8BAA+BipF,KAAM,CAAC,WAAY,OAAQ,SAAU3uC,SAAS,EAAMi3U,UAAU,GAClH,CAAEpxX,GAAI,iBAAkBH,MAAO,uCAAwCipF,KAAM,CAAC,WAAY,WAAY,SAAU3uC,SAAS,EAAMi3U,UAAU,GACzI,CAAEpxX,GAAI,UAAWH,MAAO,iCAAkCipF,KAAM,CAAC,WAAY,UAAW,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC3H,CAAEpxX,GAAI,cAAeH,MAAO,oCAAqCipF,KAAM,CAAC,cAAe3uC,SAAS,EAAMi3U,UAAU,GAChH,CAAEpxX,GAAI,WAAYH,MAAO,iCAAkCipF,KAAM,CAAC,WAAY3uC,SAAS,EAAMi3U,UAAU,EAAMh/Y,OAAQ,WACrH,CAAE4tB,GAAI,gBAAiBH,MAAO,sCAAuCipF,KAAM,CAAC,YAAa3uC,SAAS,EAAMi3U,UAAU,GAClH,CAAEpxX,GAAI,YAAaH,MAAO,mCAAoCipF,KAAM,CAAC,aAAc3uC,SAAS,EAAMi3U,UAAU,EAAMh/Y,OAAQ,aAC1H,CAAE4tB,GAAI,SAAUH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,GACjF,CAAEpxX,GAAI,gBAAiBH,MAAO,sCAAuCipF,KAAM,CAAC,QAAS,SAAU3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,SAAUH,MAAO,gCAAiCipF,KAAM,CAAC,UAAW3uC,SAAS,EAAOi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,WAC9H,CAAEhsF,GAAI,UAAWH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,KAqDpF89X,+BAhDqC,WAUrC,MAT+B,CAC7B,CAAElvvB,GAAI,cAAeH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC3F,CAAEpxX,GAAI,cAAeH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC3F,CAAEpxX,GAAI,UAAWH,MAAO,0BAA2Bs6C,SAAS,EAAMi3U,UAAU,GAC5E,CAAEpxX,GAAI,SAAUH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,GACjF,CAAEpxX,GAAI,YAAaH,MAAO,kCAAmCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GACxG,CAAErxX,GAAI,YAAaH,MAAO,sCAAuCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC5G,CAAErxX,GAAI,UAAWH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,KAyCpF+9X,gCApCsC,WAYtC,MAX+B,CAC7B,CAAEnvvB,GAAI,cAAeH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC3F,CAAEpxX,GAAI,gBAAiBH,MAAO,uCAAwCs6C,SAAS,EAAMi3U,UAAU,GAC/F,CAAEpxX,GAAI,OAAQH,MAAO,mCAAoCs6C,SAAS,EAAMi3U,UAAU,GAClF,CAAEpxX,GAAI,UAAWH,MAAO,0BAA2Bs6C,SAAS,EAAMi3U,UAAU,GAC5E,CAAEpxX,GAAI,SAAUH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,EAAM54S,MAAO,UAC9F,CAAEx4E,GAAI,aAAcH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,GAC1F,CAAEpxX,GAAI,YAAaH,MAAO,0CAA2Cs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAChH,CAAErxX,GAAI,YAAaH,MAAO,qCAAsCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3G,CAAErxX,GAAI,UAAWH,MAAO,gCAAiCs6C,SAAS,EAAMi3U,UAAU,KA2BpFg+X,iBA9IuB,WAevB,MAdyB,CACvB,CACEpvvB,GAAI,UACJvlC,MAAOiqG,KAAQ55E,EAAE,6DAEnB,CACEkV,GAAI,YACJvlC,MAAOiqG,KAAQ55E,EAAE,8DAEnB,CACEkV,GAAI,WACJvlC,MAAOiqG,KAAQ55E,EAAE,yDAmIrBukwB,+BAlBqC,SAACz5hB,EAAOx8I,GAC7C,IAAMU,EAAYV,EAAUz5F,MAAM,CAACi2O,EAAO,cACpCl8I,EAAUN,EAAUz5F,MAAM,CAACi2O,EAAO,YAClC7xD,EAAc,SAACj5E,GAAD,MAA0B,kBAATA,EAAoBA,EAAOA,EAAKjgE,eACrE,GAAIivD,GAAaJ,GACXqqF,EAAYjqF,GAAaiqF,EAAYrqF,GACvC,OAAOhV,KAAQ55E,EAAE,CAAC,uCAAwC,4C,UCjDnDwkwB,GAAkC,kBAClCC,GAAkC,oBAElCt/a,GAAwB,SAACC,GACpC,GAAIA,EAAc,CAChB,IAAIC,EAA0Bx+V,gBACxBmoG,EAAYo2P,EAAaptW,IAAI,aAC7B42G,EAAUw2P,EAAaptW,IAAI,WAQjC,GANIg3G,GAAaW,KAAOX,GAAWmpF,YACjCktK,EAA0BA,EAAwB1pW,IAAI,YAAam6Q,aAAS9mK,KAE1EJ,GAAWe,KAAOf,GAASupF,YAC7BktK,EAA0BA,EAAwB1pW,IAAI,UAAWm6Q,aAASlnK,KAEvEy2P,EAAwBh8V,QAC3B,OAAOg8V,EAAwB7yV,OAGnC,OAAO,MAIH+yV,GAA0B,SAAC51W,EAAO2+G,GACtC,OAAO40qB,GAAYqB,+BAA+B,YAAaj2qB,IAE3Do2qB,GAA0B,SAAC/0xB,EAAO2+G,GACtC,OAAO40qB,GAAYqB,+BAA+B,YAAaj2qB,IAE3Dg3P,GAAsB,SAAC31W,EAAO2+G,GAClC,OAAO40qB,GAAYqB,+BAA+B,YAAaj2qB,IA8B3Do3P,GAA0B,GAC1Bi/a,G,4MAEG1pvB,MAAQ,CACb4qU,aAAc,GACd55N,SAAU,I,EAGL85N,aAAe,YAA8D,IAA3Dl2C,EAA0D,EAA1DA,QAASz1M,EAAiD,EAAjDA,UAAWC,EAAsC,EAAtCA,SAAUF,EAA4B,EAA5BA,aACrD,EAA2B,EAAKh8E,MAAxBgvC,EAAR,EAAQA,QAASgC,EAAjB,EAAiBA,MACjB,GAAI0gP,EACF,OACE,eAAC/iP,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,eAAC,IAAD,CACEgtC,IAAKo1M,EACL90M,aAAa,EACbxrC,MAAK,UAAKJ,EAAMZ,QAAQ,GAAnB,MACLusC,YAAa,OACb4kP,gBAAiB,CAAChkP,aAAc,MAAOikP,eAAgB,SACvDpwP,MAAO,CAAC//B,OAAQ,OAKxB,IAAMw2R,EAAc,EAAE5rP,GAAa,IAAI,IAAKC,GAAY,IAAI,IAAI3kG,KAAK,MAASykG,GAAgB,IAAI,GAClG,OACE,eAACa,GAAA,EAAD,CAAQ3tC,UAAWF,EAAQ84R,OAA3B,SACE,eAACx4P,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ64R,WAA/B,SAA4CA,O,EAgD3Cz0P,cAAgB,SAAC20P,GAA+C,IAA3B/+V,IAA0B,yDACpE,EAGI,EAAKg3B,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAIIC,EAAY/7G,OAAM,OAACswW,QAAD,IAACA,OAAD,EAACA,EAAUhxU,IAClB,MAAby8E,GAAsBthE,MAAMshE,GAI9B/yE,EAASu/B,YAAOuzC,EAAM,UAAW,QAHjC9yE,EAAS,IAAIgzE,KAAkBD,IAC/B/yE,EAAS,IAAIizE,KAA8B,CAAEF,gBAI3CxqG,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACq0P,GAAgD,IAA3Bh/V,IAA0B,yDACtE,EAGI,EAAKg3B,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAGkB,OAAR,OAARy0P,QAAQ,IAARA,OAAA,EAAAA,EAAUjxU,IACZ0J,EAAS,IAAIqzE,KAAck0P,EAASjxU,KAEpC0J,EAASu/B,YAAOuzC,EAAM,WAAY,OAEhCvqG,GACF,EAAK+qG,c,EAGFA,WAAa,SAACk0P,GACnB,MAGI,EAAKjoU,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAEc,OAAR,OAAJ00P,QAAI,IAAJA,OAAA,EAAAA,EAAMlxU,KACR0J,EAASu/B,YAAOuzC,EAAM,OAAQ,Q,EAI3B20P,cAAgB,SAACjnW,GACtB,IACEw/B,EACE,EAAKT,MADPS,SAGEx/B,EAAO4kZ,YACL5kZ,EAAO4kZ,UAAUh1S,YACnB5vG,EAAO4kZ,UAAUh1S,UAAYW,KAAOoyH,IAAI3iO,EAAO4kZ,UAAUh1S,WAAWjvD,eAElE3gD,EAAO4kZ,UAAUp1S,UACnBxvG,EAAO4kZ,UAAUp1S,QAAUe,KAAOoyH,IAAI3iO,EAAO4kZ,UAAUp1S,SAAS7uD,gBAGhE3gD,EAAOw/T,YACLx/T,EAAOw/T,UAAU5vN,YACnB5vG,EAAOw/T,UAAU5vN,UAAYW,KAAOoyH,IAAI3iO,EAAOw/T,UAAU5vN,WAAWjvD,eAElE3gD,EAAOw/T,UAAUhwN,UACnBxvG,EAAOw/T,UAAUhwN,QAAUe,KAAOoyH,IAAI3iO,EAAOw/T,UAAUhwN,SAAS7uD,gBAGhE3gD,EAAOwnZ,YACLxnZ,EAAOwnZ,UAAU53S,YACnB5vG,EAAOwnZ,UAAU53S,UAAYW,KAAOoyH,IAAI3iO,EAAOwnZ,UAAU53S,WAAWjvD,eAElE3gD,EAAOwnZ,UAAUh4S,UACnBxvG,EAAOwnZ,UAAUh4S,QAAUe,KAAOoyH,IAAI3iO,EAAOwnZ,UAAUh4S,SAAS7uD,gBAGhE3gD,EAAOmnW,SAAgC,MAArBnnW,EAAOmnW,QAAQ9wU,KACnCmJ,EAAS,IAAIgzE,KAAkBxyG,EAAOmnW,QAAQ9wU,GAAGP,KACjD0J,EAAS,IAAIizE,KAA8B,CAAEF,UAAWvyG,EAAOmnW,QAAQ9wU,GAAGP,OAExE91B,EAAO+mW,UAAkC,MAAtB/mW,EAAO+mW,SAAS1wU,IACrCmJ,EAAS,IAAIqzE,KAAc7yG,EAAO+mW,SAAS1wU,GAAGP,KAEhD0J,EAAS8/B,YACP8ltB,GACA9uxB,MAAMC,QAAQyJ,GAAU,GAAKA,IAI3BA,EAAOqD,MACTm8B,EAASu/B,YACPqmtB,GACA,OACA39wB,cAAIzH,EAAOqD,QAGXrD,EAAO6sI,UACTrtG,EAASu/B,YACPqmtB,GACA,WACA39wB,cAAIzH,EAAO6sI,YAGX7sI,EAAOs6F,QACT96D,EAASu/B,YACPqmtB,GACA,SACA39wB,cAAIzH,EAAOs6F,W,EAMV62N,SAAW,SAACnxT,GACjB,IACEwlxB,EACE,EAAKzmvB,MADPymvB,4BAEI15a,EAAgB,CACpBzoW,KAAM,KACNkvG,UAAW,KACXI,WAAY,KACZI,OAAQ,KACRzY,OAAQ,KACRiuQ,WAAY,KACZq8C,UAAW,KACXplF,UAAW,KACXgoF,UAAW,MAEb,GAAIxnZ,EAAOpP,KAAM,CACf,IAAMyS,EAAOrD,EAAOyV,MAAM,CAAC,OAAQ,SAC/BpS,GAAQA,EAAK3M,OAAS,IACxBo1W,EAAczoW,KAAOA,GAEvB,IAAMkvG,EAAYvyG,EAAOyV,MAAM,CAAC,UAAW,KAAM,OAC7C88F,IACFu5P,EAAcv5P,UAAYA,GAE5B,IAAMI,EAAa3yG,EAAOyV,MAAM,CAAC,WAAY,KAAM,OAC/Ck9F,IACFm5P,EAAcn5P,WAAaA,GAE7B,IAAMI,EAAS/yG,EAAOyV,MAAM,CAAC,OAAQ,KAAM,OACvCs9F,IACF+4P,EAAc/4P,OAASA,GAEzB,IAAMg0G,EAAY/mN,EAAOyV,MAAM,CAAC,SAAU,MAAO,IAC3C6vY,EAAU,OAAGv+L,QAAH,IAAGA,OAAH,EAAGA,EAAWlpN,KAAI,SAAA4wE,GAAI,OAAIA,EAAK34C,OAC/C,OAAIwvX,QAAJ,IAAIA,OAAJ,EAAIA,EAAY5uZ,UACdo1W,EAAcxxQ,OAASgrT,GAGzB,IAAMz4Q,EAAW7sI,EAAOyV,MAAM,CAAC,WAAY,MAAO,IAC5C8yV,EAAU,OAAG17N,QAAH,IAAGA,OAAH,EAAGA,EAAUhvI,KAAI,SAAAivI,GAAO,OAAIA,EAAQ7rF,UACpD,OAAIsnT,QAAJ,IAAIA,OAAJ,EAAIA,EAAY7xW,UACdo1W,EAAcvD,WAAaA,GAE7B,IAAMq8C,EAAY5kZ,EAAOpH,IAAI,aACvB6vW,EAAsBm8C,GAAa7+C,GAAsB6+C,GAC3Dn8C,IACFqD,EAAc84C,UAAYn8C,GAE5B,IAAMjpC,EAAYx/T,EAAOpH,IAAI,aACvB6sxB,EAAsBjmd,GAAaumC,GAAsBvmC,GAC3Dimd,IACF35a,EAActsC,UAAYimd,GAE5B,IAAMj+X,EAAYxnZ,EAAOpH,IAAI,aACvB4vW,EAAkBg/C,GAAazhD,GAAsByhD,GACvDh/C,IACFsD,EAAc07C,UAAYh/C,GAE5Bg9a,EAA4B15a,K,EAIzBjD,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAkzqB,EAHF,EAGEA,4BACA18a,EAJF,EAIEA,aAGFtpU,EACE8/B,YACE8ltB,GACA,KAIJ5lvB,EAASggC,YAAM8yC,GAAQ8yqB,KACvBt8a,EAAalmV,KAAK+xB,OAElB6wuB,EAA4B,O,EA8etBp9K,Y,wBAAc,iCAAA5tmB,EAAA,6DACd4F,EAAS,CACbmuE,UAAW,MAEPm3sB,EAAe,GAJD,SAKMx9W,KAAwBO,SAAS,EAAK1pY,MAAMo9D,IAAK,EAAKp9D,MAAM6c,MAAOx7C,GALzE,OAMT,QADLulxB,EALc,cAMT,IAAXA,KAAapkxB,SAAQ,SAACqkxB,IACpB,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAY3kuB,QACdykuB,EAAazkxB,KAAK2kxB,MAGtB,EAAKnuqB,SAAS,CAAEo1B,SAAU64oB,IAXN,2C,uDArtBtB,WACE7wxB,KAAKkqC,MAAMgqU,iBAAiBs8a,IAC5BxwxB,KAAKuzmB,gB,gCAGP,SAA0Bl1f,EAAW4yJ,GACnC,MASIjxQ,KAAKkqC,MARPygE,EADF,EACEA,KACAhgE,EAFF,EAEEA,SACAyzE,EAHF,EAGEA,aACAjD,EAJF,EAIEA,WACA+mN,EALF,EAKEA,WAEAnkN,GAPF,EAMEP,UANF,EAOEO,WACAI,EARF,EAQEA,OAGF,GAAIxT,GAASA,IAAS0T,EAAU1T,KAAO,CACrCyT,IACA8jN,IAIA,IAAMxkN,EAAS,OAAGvC,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,UAAW,KAAM,OAChDk9F,EAAU,OAAG3C,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,WAAY,KAAM,OAClDs9F,EAAM,OAAG/C,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,OAAQ,KAAM,OAE5C88F,GAAaI,IAAeC,EAAUp8F,MAAK,SAACuwV,GAAD,OAAcA,EAASnuW,IAAI,QAAU+5G,OAClFnzE,EAAS,IAAIgzE,KAAkBh8G,OAAO+7G,KACtC/yE,EAAS,IAAIizE,KAA8B,CAAEF,UAAW/7G,OAAO+7G,OAE7DI,GAAcI,IAAWC,EAAOx8F,MAAK,SAACwwV,GAAD,OAAUA,EAAKpuW,IAAI,QAAUm6G,MACpEvzE,EAAS,IAAIqzE,KAAcF,IAK3B3C,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAmMlB,WAAiB,IAAD,OACd,EAGIn7G,KAAKgnC,MAFP4qU,EADF,EACEA,aACA55N,EAFF,EAEEA,SAGF,EAeIh4I,KAAKkqC,MAdPne,EADF,EACEA,EAEAmtD,GAHF,EAEEvuC,SAFF,EAGEuuC,SACAyxB,EAJF,EAIEA,KACAg4N,EALF,EAKEA,aACAnlN,EANF,EAMEA,UACAq3P,EAPF,EAOEA,eACA92P,EARF,EAQEA,UACAI,EATF,EASEA,OACAhD,EAVF,EAUEA,WACAknN,EAXF,EAWEA,aAEAizC,GAbF,EAYEH,QAZF,EAaEG,WACAzoT,EAdF,EAcEA,cAGI0wD,EAA2B,MAAdpC,EAAqBA,EAAWv6F,MAAM,CAAC,WAAY,UAAW,KAAM,QAAU,EAC3F88F,EAAkC,MAAdH,EAAqB57G,OAAO47G,IAAe,EAC/Dg4P,EAAgB9gL,oBAAUogL,EAAe9wW,IAAI25G,KAAe3xF,EAAE,8BAC9DilwB,EAAgB/B,GAAYoB,mBAElC,OACE,qCACE,gBAACl9V,GAAA,EAAD,CACE/5W,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,UAUE,gBAAC9xB,EAAA,EAAD,CACEO,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,eAACugC,EAAA,EAAD,CACEE,QAAQ,KADV,SAGG3tF,EAAE,+BAEL,eAAC2uG,GAAA,EAAD,CACE7V,QAAS89M,EADX,SAGE,eAAC,KAAD,MAGF,eAACsud,GAAA,EAAD,CACE17oB,WAAYi7oB,GACZ56a,eAAgBjrQ,EAChBwQ,WAAYA,EACZ06P,qBAAsB9pV,EAAE,8CACxB+pV,WAAY,kBAAMrvQ,IAAmB9rE,kBAAgBu2vB,yBAA0BrkuB,EAAc,CAACskuB,4BAA6B,yDAC3Hl7a,mBAAoB,SAACC,GAAD,OAAwBzvQ,IAAmB9rE,kBAAgBy2vB,2BAA4BvkuB,EAAc,CAACqpT,WAAYA,EAAW13O,WACjJ43O,mBAAoB,SAACF,GAAD,OAAwBzvQ,IAAmB9rE,kBAAgB02vB,sCAAuCxkuB,EAAc,CAACypT,eAAgBJ,EAAW13O,WAChK+3O,YAAav2W,KAAKg0W,gBAClB5B,cAAepyW,KAAKoyW,mBAGxB,uBAEE91C,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,SAME,gBAACoC,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQv9B,QAArC,UAEE,eAAC69D,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,sCAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,SAAD,CACEpsE,KAAK,YACL07B,MAAO,CACLyvE,WAAY,CACV74E,MAAO/U,EAAE,sCACT40F,UAAU,EACVpjE,aAAck0T,GACd+E,UAAU,EACVxrP,YAAaj/F,EAAE,uCAEjB6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWi/O,UAMjB,eAAC/+M,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,gCAEL,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,6BACT6yT,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,gBAGnB9uG,KAAK,aACL8qE,UAAWslC,SAGf,eAAC/lC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACE1wC,MAAO,CACLpJ,MAAOy0U,EACP32B,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAK69G,iBAGnBrvG,KAAK,cACL8qE,UAAWslC,SAGf,eAAC/lC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,0BACT6yT,YAAY,EACZhlO,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,gCAA4BA,QAA5B,IAA4BA,OAA5B,EAA4BA,EAAOA,QACtDgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,aAGnBzvG,KAAK,UACL8qE,UAAWslC,YAMjB,eAACpF,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,mCAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,SAAD,CACEpsE,KAAK,YACL07B,MAAO,CACLyvE,WAAY,CACVkoP,kBAAmB,SAACrhP,EAAa9kH,GAC/B,UAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAOulC,GACT,OAAOu/E,EAAOv/E,MAAP,OAAcvlC,QAAd,IAAcA,OAAd,EAAcA,EAAOulC,IACvB,IAAKvlC,EAAM6mB,UAAW,CAC3B,IAAM+uwB,EAAkB51xB,EAAMklB,MAAM,CAAC,MAAO,MAC5C,OAAO4/F,EAAOv/E,KAAOqwvB,IAGzBtlvB,QAASglvB,EACT3vpB,eAAgB,SAAC7gB,GACOA,EAAdv/E,GACR,OADsBu/E,EAAV9kH,OAGdomW,uBAAuB,EACvBtpC,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,SACtDilH,UAAU,GAEZ/G,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWi/O,UAKjB,eAAC/+M,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SAEGnqG,EAAE,qCAEL,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,sBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GAAyB70P,MACpCnjC,UAAW6jC,SAIf,eAACtkC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,4BAIP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,oBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,KAAmB60P,IAC9Bh4R,UAAW6jC,YAMjB,eAAC3D,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,yCAEL,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,sBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACy2qB,GAAyBh0qB,MACpCnjC,UAAW6jC,SAIf,eAACtkC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,4BAIP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,oBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACy2qB,GAAyBh0qB,MACpCnjC,UAAW6jC,YAMjB,eAAC3D,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,eAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,SAAD,CACEpsE,KAAK,cACL07B,MAAO,CACLyvE,WAAY,CACVkoP,kBAAmB,SAACrhP,EAAiB9kH,GACnC,OAAO8kH,EAAOp0D,QAAU1wD,EAAM0wD,OAEhCpgB,QAASgsG,EACTl3G,MAAO/U,EAAE,+CACTs1G,eAAgB,SAAC7gB,GACf,IAAQ2F,EAAsC3F,EAAtC2F,UAAWC,EAA2B5F,EAA3B4F,SAAUF,EAAiB1F,EAAjB0F,aAC7B,OAAIC,GAAaC,EACRD,EAAY,IAAMC,EAEvBD,GAGGD,GAETzD,WAAYmvP,EACZ9P,uBAAuB,EACvBtpC,aAAc,SAACh4M,EAAiBx5E,GAC9B,IAAQm/E,EAAmH3F,EAAnH2F,UAAWC,EAAwG5F,EAAxG4F,SAAUh6D,EAA8Fo0D,EAA9Fp0D,MAAO85D,EAAuF1F,EAAvF0F,aAAcwwP,EAAyEl2P,EAAzEk2P,YAAaC,EAA4Dn2P,EAA5Dm2P,SAAUC,EAAkDp2P,EAAlDo2P,SAAUC,EAAwCr2P,EAAxCq2P,SAAUC,EAA8Bt2P,EAA9Bs2P,aAAcC,EAAgBv2P,EAAhBu2P,YACrGC,EAAW,CAAC7wP,EAAWC,GAAU76G,QAAO,SAAAiD,GAAI,OAAIA,KAAMiT,KAAK,KAAK+8G,OACtE,OACE,gBAAC3lD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASF,QAAS,EAAlE,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACG,EAAKk4R,aAAatxP,KAErB,gBAAC3nC,EAAA,EAAD,CAAMiC,cAAc,EAAMlB,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAjE,UACE,eAAC8/B,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAcqV,MAAO,CAAEwvK,SAAU,cAAvE,SAAuFksF,GAAY9wP,IACnG,eAAC1M,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAEwvK,SAAU,cAA/C,SAA+D1+N,IAC/D,eAACotD,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,SAAiE4rF,IACjE,eAACl9P,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,SAAiE6rF,GAAYC,IAC7E,gBAACp9P,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAEwvK,SAAU,cAAjD,UAAiE+rF,EAAjE,IAA4EC,EAA5E,IAA2FC,YAKnGv0P,cAAe,SAAC2kB,EAAelxH,EAAas1G,IAC3B,UAAXA,GAAkC,UAAXA,GAAsB4b,IAC/C,EAAKvkB,SAAS,CAAEgvP,aAAc37V,KAGlC0qG,UAAU,EACVpjE,aAAck0T,GACdwF,cAAe,SAACC,EAAgBlwU,GAC9B,GAAuB,OAAnBkwU,QAA8Cp7W,IAAnBo7W,EAC7B,MAAO,GAET,IAAMz0P,EAAU,OAAGz7E,QAAH,IAAGA,OAAH,EAAGA,EAAOy7E,WAAWrpE,cACrC,OAAIqpE,EACKy0P,EAAe3rW,QAAO,SAAAi1G,GAO3B,MANyB,CACvBA,EAAO2F,UACP3F,EAAO4F,SACP5F,EAAO0F,aACP1F,EAAOp0D,OACP7gD,OAAOlO,SAASokB,KAAK,KAAK23B,cACJ7vC,SAASk5G,MAG9By0P,IAGXt9P,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWi/O,UAMjB,eAAC/+M,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,+BAEL,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,sBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACq3P,GAAqB50P,MAChCnjC,UAAW6jC,SAIf,eAACtkC,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAUtgC,UAAWF,EAAQg9C,SAAjD,SACGnqG,EAAE,4BAIP,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,SAAD,CACEpsE,KAAI,oBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACq3P,GAAqB50P,MAChCnjC,UAAW6jC,gBA3Zdm4P,Y,GA/UkB7wU,aAi1BpBwwC,qBACbgG,aA9Ea,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCgC,SAAU,SAEZ7F,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCgC,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,sBAGT4lP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCgyF,gBAAiB,CACf96P,UAAW,GAEb01P,OAAQ,CACNj3O,WAAY7/C,EAAM+pC,QAAQE,QAAQ7iF,MAEpCyvU,WAAY,CACV9rQ,MAAO/qB,EAAM+pC,QAAQE,QAAQqO,cAE/BijP,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,cAwCpB,CAAC6H,WAAW,IAC/B7vE,YAAgB,gBAChB0/D,mBArCsB,SAAC73E,EAAOyF,GAC9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO8yqB,GACjCn1qB,yBAAcqC,EAAdrC,CAAoBp0E,IAAUp0B,gBAClD,OAAO,aACL6qG,QACG3qE,YAAyB,CAC1B+hU,eAAgBrpF,eAChBhuK,UAAWsB,eACXf,UAAWgB,eACXZ,OAAQa,eACR7D,WAAYC,yBAAcqC,GAC1B03P,QAAS/9N,gBACTp3C,OAAQh/C,eACRsmD,IAAKx9C,cACL/C,MAAOD,eATNhU,CAUA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,OAEfijN,WAAY,WACVv3R,EAAS,IAAImpB,QAEfogT,iBAAkB,SAAC3+N,GACjB5qG,EAAS,IAAIqoB,MAAiB,CAAEuiF,iBAElC5qG,eAQF2sP,aAAmC,CAAEt2B,SAAUuvhB,KAC/CphqB,IACAo4M,qBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IATJxiS,CAWby7sB,I,kJC77Baa,GAvCY,SAAC,GAIrB,IAHuBC,EAGxB,EAHwBA,oBACA9+X,EAExB,EAFwBA,eACA++X,EACxB,EADwBA,aAEpB1lwB,EAAM+xB,YAAe,gBAArB/xB,EAOR,OACE,qCACG0lwB,EAAazoxB,KAAI,SAAC+pZ,GAAD,OAChBA,EAAO33U,SACL,eAAC40M,EAAA,EAAD,WACG,OAAC+iI,QAAD,IAACA,OAAD,EAACA,EAAQnlD,OACR,uCACImlD,EAAOT,YACP,eAACo/X,EAAA,EAAD,CACEzugB,QAAQ,EACRvpM,WAfWs4U,EAeoBe,EAAO9xX,GAdlCljB,IAAE4D,KAAK+wY,EAAgB,CAAEV,aAC3B,WAa2C,QAC7CntS,QAAS,kBAAM2sqB,EAAoBz+X,EAAO9xX,KAH5C,SAKGlV,EAAEgnY,EAAOjyX,UAGXiyX,EAAOT,YACR,qCAAGvmY,EAAEgnY,EAAOjyX,aAbJiyX,EAAO9xX,IATH,IAAC+wX,Q,UCiBzBxiS,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Cy2sB,gBAAiB,CAEfr2sB,MAAO,QAETk9W,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnCswT,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,UACV3uC,eAAgB,cAElBm+W,kBAAmB,CACjBxvU,SAAU,OACVqe,YAAa,EACbpsB,UAAWphC,EAAMZ,QAAQ,IAE3Bs3sB,cAAe,GAGfC,YAAa,CACXz2sB,QAAS,OACTnC,WAAY,UAEd64sB,mBAAoB,CAClB12sB,QAAS,OACTnC,WAAY,SACZgtB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7Bg5C,MAAO,QAETy2sB,kBAAmB,CACjBvwqB,YAAatmC,EAAMZ,QAAQ,GAC3B,qBAAsB,CACpB8tR,cAAe,eAqSN4pb,GAjSyB,SAAC,GAelC,IAdqCC,EActC,EAdsCA,WACAnloB,EAatC,EAbsCA,OACA6kQ,EAYtC,EAZsCA,YACA/lJ,EAWtC,EAXsCA,KACA5F,EAUtC,EAVsCA,WACAyzL,EAStC,EATsCA,YACAy4V,EAQtC,EARsCA,cACAC,EAOtC,EAPsCA,kBACAC,EAMtC,EANsCA,wBACAC,EAKtC,EALsCA,iBACAb,EAItC,EAJsCA,oBACAc,EAGtC,EAHsCA,wBACA5/X,EAEtC,EAFsCA,eACAqmB,EACtC,EADsCA,iBAEpC7/V,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EAER,EAAkD2yB,mBAAS,MAA3D,mBAAO6zuB,EAAP,KAA0BC,EAA1B,KACA,EAAoD9zuB,mBAAS,MAA7D,mBAAO+zuB,EAAP,KAA2BC,EAA3B,KACA,EAA8Ch0uB,mBAAS,MAAvD,mBAAOi0uB,EAAP,KAAwBC,EAAxB,KACA,EAA0Dl0uB,mBAAS,IAAnE,mBAAOm0uB,EAAP,KAA8BC,EAA9B,KACA,EAAwCp0uB,mBAAS,IAAjD,mBAAO+yuB,EAAP,KAAqBsB,EAArB,KAEA5svB,qBAAU,WACR,GAAI4yY,EAAkB,CACpB,IAAIi6W,GAAc,EACZlgY,EAAmBlD,KAA8BD,yCACjDsjY,EAAcl6W,EAAiB/va,KAAI,SAAC+pZ,GACxC,IAAInlD,GAAO,EAOX,OANA,OAAImlD,QAAJ,IAAIA,OAAJ,EAAIA,EAAQnlD,QACVolb,GAAc,GAEqB,IAAjCH,EAAsBhxxB,QAAgBkc,IAAExU,SAASupZ,EAAkBC,EAAO9xX,MAC5E2sU,GAAO,GAEF,2BACFmlD,GADL,IAEEnlD,YAGJmlb,EAAgBE,GACZD,GACFF,EAAyB,OAG5B,CAAC/5W,IAEJ,IAKMm6W,EAAiB,SAACC,EAAcC,EAAgBC,GACpDb,EAAqBY,GACrBV,EAAsBW,GACtBT,EAAmBO,IAafG,GAA2B,SAAC96G,GAChC,IAAI+6G,EAAa,GACjBT,GAAyB,SAACx7wB,GAMxB,OAJEi8wB,EADEj8wB,EAAK/N,SAASivqB,GACHlhqB,EAAK/L,QAAO,SAAC2tG,GAAD,OAASA,IAAQs/jB,KAEhC,sBAAOlhqB,GAAP,CAAakhqB,OAK3B,IAAM1lR,EAAmBlD,KAA8BD,yCACjDsjY,EAAcl6W,EAAiB/va,KAAI,SAAC+pZ,GACxC,IAAInlD,GAAO,EAIX,OAH0B,IAAtB2lb,EAAW1xxB,QAAgBkc,IAAExU,SAASupZ,EAAkBC,EAAO9xX,MACjE2sU,GAAO,GAEF,2BACFmlD,GADL,IAEEnlD,YAGJmlb,EAAgBE,IAmFZO,GAAoB,SAAChiY,GACzB,OAAOzzY,IAAE/U,IAAIyoxB,GAAc,SAAC1+X,GAC1B,GAAIA,EAAO33U,QAAS,CAClB,IAAMmpX,EAAO,qBAAiBxxC,EAAO9xX,GAAxB,YAA8BuwX,EAAWvwX,IACtD,OAAQ8xX,EAAO9xX,IACb,IAAK,cACH,OA9Ea,SAACuwX,EAAY+yC,GAAa,IAAD,oBAC9C,OACE,gBAACv0K,EAAA,EAAD,YACG,OAACwhI,QAAD,IAACA,GAAD,UAACA,EAAYv8L,aAAb,aAAC,EAAmB/+G,YACnB,eAAC+T,GAAA,EAAD,CAASC,MAAK,OAAEsnS,QAAF,IAAEA,GAAF,UAAEA,EAAYv8L,aAAd,iBAAE,EAAmBw+jB,oBAArB,iBAAE,EAAiC7/jB,eAAnC,aAAE,EAA0CplN,KAA1D,SACE,wBAAM4qE,UAAWF,EAAQ24sB,YAAzB,UACE,gBAACn3pB,GAAA,EAAD,CAAY7V,QAAS,WAAQyuqB,GAAyB9hY,EAAWvwX,KAAQglE,MAAM,UAAUlqG,KAAK,QAAQq9E,UAAWF,EAAQ64sB,kBAAzH,UACIc,EAAsBtpxB,SAASioZ,EAAWvwX,KAC1C,eAAC,KAAD,CAA4BkmF,SAAS,WAEpC0rqB,EAAsBtpxB,SAASioZ,EAAWvwX,KAC3C,eAAC,KAAD,CAA8BkmF,SAAS,aAG3C,eAAC,KAAD,CAAMl4G,GAAI2gZ,KAA8B2B,cAAcC,GAAap4U,UAAWF,EAAQ44sB,mBAAtF,SACE,eAACt4qB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,UACa,OAAVitS,QAAU,IAAVA,GAAA,UAAAA,EAAYv8L,aAAZ,mBAAmBw+jB,oBAAnB,mBAAiC7/jB,eAAjC,eAA0CplN,OAAQ,eAM3D,OAACgjZ,QAAD,IAACA,GAAD,UAACA,EAAYv8L,aAAb,aAAC,EAAmB/+G,YACpB,eAAC+T,GAAA,EAAD,CAASC,MAAK,OAAEsnS,QAAF,IAAEA,GAAF,UAAEA,EAAYv8L,aAAd,aAAE,EAAmBzmN,KAAnC,SACE,wBAAM4qE,UAAWF,EAAQ24sB,YAAzB,UACE,gBAACn3pB,GAAA,EAAD,CAAY7V,QAAS,WAAQyuqB,GAAyB9hY,EAAWvwX,KAAQglE,MAAM,UAAUlqG,KAAK,QAAQq9E,UAAWF,EAAQ64sB,kBAAzH,UACIc,EAAsBtpxB,SAASioZ,EAAWvwX,KAC1C,eAAC,KAAD,CAA4BkmF,SAAS,WAEpC0rqB,EAAsBtpxB,SAASioZ,EAAWvwX,KAC3C,eAAC,KAAD,CAA8BkmF,SAAS,aAG3C,eAAC,KAAD,CAAMl4G,GAAI2gZ,KAA8B6B,YAAYD,GAAap4U,UAAWF,EAAQ44sB,mBAApF,SACE,eAACt4qB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,UACa,OAAVitS,QAAU,IAAVA,GAAA,UAAAA,EAAYv8L,aAAZ,eAAmBzmN,OAAQ,eAjCxB+1b,GA4EHmvV,CAAeliY,EAAY+yC,GACpC,IAAK,cACH,OAnCW,SAAC/yC,EAAY+yC,GAAa,IAAD,IAC5C,OACE,eAACv0K,EAAA,EAAD,UACE,eAAC/lK,GAAA,EAAD,CAASC,OAAiB,OAAVsnS,QAAU,IAAVA,GAAA,UAAAA,EAAYv8L,aAAZ,eAAmB3C,cAAe,IAAlD,SACE,gCACE,eAAC,KAAD,CAAMrjN,GAAI2gZ,KAA8B6B,YAAYD,GAApD,SACE,eAACh4S,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,UACa,OAAVitS,QAAU,IAAVA,GAAA,UAAAA,EAAYv8L,aAAZ,eAAmB3C,cAAe,aAL7BiyO,GAiCHovV,CAAaniY,EAAY+yC,GAClC,IAAK,UAIL,IAAK,YAEL,IAAK,YAEL,IAAK,UACH,OAAOF,KAAiBC,aAAaC,GAPvC,IAAK,SACH,OAvBY,SAAC/yC,EAAY+yC,GACjC,OACE,eAACv0K,EAAA,EAAD,UACE,eAAC4jgB,GAAA,EAAD,CAEEpiY,WAAYA,GAFd,yBACyBA,EAAWvwX,MAFtBsja,GAqBHsvV,CAAcriY,EAAY+yC,SAY3C,OACE,wCACIz3S,GACA,eAACgnoB,GAAA,EAAD,IAEAhnoB,GACA,uCACI6kQ,EAAY9vZ,OAAS,GAAK4vxB,EAAa5vxB,OAAS,GAChD,uCACE,gBAACwurB,GAAA,EAAD,WACE,gBAAC/3P,EAAA,EAAD,CAAOl/W,UAAWF,EAAQy4sB,gBAA1B,UACE,eAACp5V,EAAA,EAAD,UACE,eAACE,EAAA,EAAD,UACE,eAAC,GAAD,CACE+4V,oBAlHM,SAACx/X,GAC3Bw/X,EAAoBx/X,IAkHAU,eAAgBA,EAChB++X,aAAcA,QAIpB,eAAC94V,EAAA,EAAD,UACGhnC,GAAeA,EAAY3oZ,KAAI,SAACwoZ,EAAYr1Z,GAAb,OAC9B,gBAAC,IAAMouR,SAAP,WACE,eAACkuK,EAAA,EAAD,CAAUj7F,OAAO,EAAjB,SACE,qCAAGg2b,GAAkBhiY,QAhIvBuiB,EAkIeviB,EAAWvwX,GAjIvC4xvB,EAAsBtpxB,SAASwqa,IAkIhB,eAACggX,GAAA,EAAD,CACE9B,WAAYA,EACZzgY,WAAYA,EACZigY,aAAcA,EACduC,WAAYd,OATlB,qBAAmC1hY,EAAWvwX,KA9H7C,IAAC8yY,OA6IN,eAACkgX,GAAA,EAAD,UACE,eAACx7V,EAAA,EAAD,UACE,eAACzoK,EAAA,EAAD,CAAWkkgB,QAAS,IAAK54qB,MAAO,CAAEuY,aAAc,GAAhD,SACE,eAACslU,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpBwta,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCnkb,MAAO4wP,EACPyzL,YAAaA,EACb2vK,mBAAoB,gBAAEp6lB,EAAF,EAAEA,KAAMC,EAAR,EAAQA,GAAR,gBAAmBD,EAAnB,YAA2BC,IAC/C28P,KAAMA,EACN0tL,aAvMC,SAACnyT,EAAgB4tT,GACxCs9V,EAAiBt9V,GACjB+9V,EAAyB,KAsMHt5V,oBAxLQ,SAACpxb,GAC/B,IAAMqhH,EAAQ9nH,OAAOyG,EAAE4kB,OAAOtxB,OAC9B42xB,EAAwB7oqB,IAuLFiwU,iBAAkB,SAACy6V,GAAD,OAAqB,eAAC,IAAD,aACrCC,iBAAiB,GAAUD,gBA3CzC,OAkDE1B,GACA,eAAC4B,GAAA,EAAD,CACE9B,kBAAmBA,EACnBE,mBAAoBA,EACpBE,gBAAiBA,EACjB2B,qBA3Ma,WAC3B5B,EAAsB,MACtBE,EAAmB,YA8MY,IAAvBjhY,EAAY9vZ,QACZ,eAACg3E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAASa,QAAQ,SAAtE,SACE,eAAC,IAAD,CACEq0C,WAAY+jqB,EACZ9jqB,YAAa,KACbC,cAAe,KACfvtF,MAAO,KACPopF,MAAOioqB,GAAqB,GAC5BxxpB,YAAa,KANf,SAQE,eAACnnB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG04qB,GAA2B,gB,6HCrTxC5iqB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C6mT,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACfC,eAAgB,SAChB61C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlB2sqB,gBAAiB,CACfn5sB,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdlsC,eAAgB,YAElB84sB,eAAgB,CACdp5sB,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,UACV3uC,eAAgB,cAElBm+W,kBAAmB,CACjBxvU,SAAU,OACVqe,YAAa,EACbpsB,UAAWphC,EAAMZ,QAAQ,IAE3Bm6sB,YAAa,CACX,iBAAkB,CAChBxurB,MAAO,kBA4SEyurB,GAxSqB,SAAC,GAgB/B,EAfoCzC,WAenC,IAAD,IAdoCnloB,EAcpC,EAdoCA,OACA64lB,EAapC,EAboCA,KACA/5e,EAYpC,EAZoCA,KACA5F,EAWpC,EAXoCA,WACAyzL,EAUpC,EAVoCA,YACAy4V,EASpC,EAToCA,cACAC,EAQpC,EARoCA,kBACAC,EAOpC,EAPoCA,wBACAC,EAMpC,EANoCA,iBACAb,EAKpC,EALoCA,oBACAmD,EAIpC,EAJoCA,aACArC,EAGpC,EAHoCA,wBACA5/X,EAEpC,EAFoCA,eACAqmB,EACpC,EADoCA,iBAExC,EAAwCr6X,mBAAS,IAAjD,mBAAO+yuB,EAAP,KAAqBsB,EAArB,KAEA5svB,qBAAU,WACR,GAAI4yY,EAAkB,CACpB,IAAMk6W,EAAcl6W,EAAiB/va,KAAI,SAAC+pZ,GAExC,OAAO,2BACFA,GADL,IAEEnlD,MAHW,OAMfmlb,EAAgBE,MAEjB,CAACl6W,IAEJ,IAAM7/V,EAAUs2C,KACV3uE,EAAWnP,sBAAYkP,eACrB70B,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBAEjB,EAAsCoO,oBAAS,GAA/C,mBAAOk2uB,EAAP,KAAoBC,EAApB,KACA,EAA0Cn2uB,mBAAS,MAAnD,mBAAO2gU,EAAP,KAAsBy1a,EAAtB,KACA,EAAoDp2uB,mBAAS,MAA7D,mBAAO+zuB,EAAP,KAA2BC,GAA3B,KACMqC,GAAmB7pvB,iBAAO,MAChC,GAAgCwT,mBAAS,MAAzC,qBAAOy0E,GAAP,MAAiBs9J,GAAjB,MAsCMukgB,GAAkB,SAAC12a,GAAD,OAAiB,SAACn3O,GACxCspJ,GAAYtpJ,EAAMziB,eAClBguqB,GAAsBp0a,KAGlB22a,GAAiB,yCAAG,6BAAAtvxB,EAAA,sDAClB67F,EADkB,UACT5sE,aADS,YACK69vB,EAAmBxgY,cAAc5/L,QADtC,0CACwEogkB,QADxE,IACwEA,OADxE,EACwEA,EAAoBxxvB,IACpHvS,OAAOi8E,KAAKnJ,EAAK,UAFO,2CAAH,qDAwCjBgyrB,GAAoB,SAACl1a,GACzB,OAAOvgW,IAAE/U,IAAIyoxB,GAAc,SAAC1+X,GAAY,IAAD,IACrC,GAAIA,EAAO33U,QAAS,CAClB,IAAMmpX,EAAO,8BAA0BxxC,EAAO9xX,GAAjC,YAAuCq9U,EAAYr9U,IAChE,OAAQ8xX,EAAO9xX,IACb,IAAK,cACH,OArCa,SAACq9U,GAAiB,IAAD,wBACtC,OACE,gBAACtuF,EAAA,EAAD,YACG,OAACsuF,QAAD,IAACA,GAAD,UAACA,EAAa2zC,qBAAd,iBAAC,EAA4Bh9L,aAA7B,aAAC,EAAmC/+G,YACnC,eAAC+T,GAAA,EAAD,CAASC,MAAK,OAAEo0P,QAAF,IAAEA,GAAF,UAAEA,EAAa2zC,qBAAf,iBAAE,EAA4Bh9L,aAA9B,iBAAE,EAAmCw+jB,oBAArC,iBAAE,EAAiD7/jB,eAAnD,aAAE,EAA0DplN,KAA1E,SACE,gCACE,eAAC,KAAD,CAAMS,GAAI2gZ,KAA8B2B,cAA9B,OAA4CjzC,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAa2zC,eAAnE,SACE,eAACz4S,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,UACc,OAAX+5P,QAAW,IAAXA,GAAA,UAAAA,EAAa2zC,qBAAb,mBAA4Bh9L,aAA5B,mBAAmCw+jB,oBAAnC,mBAAiD7/jB,eAAjD,eAA0DplN,OAAQ,cAM3E,OAAC8vW,QAAD,IAACA,GAAD,UAACA,EAAa2zC,qBAAd,iBAAC,EAA4Bh9L,aAA7B,aAAC,EAAmC/+G,YACpC,8CAsBSw9qB,CAAep1a,GACxB,IAAK,gBACH,OAAOipY,aAAkBjpY,EAAaimF,GACxC,IAAK,OACH,OAAOF,KAAiBG,YAAjB,UAA6BlmF,EAAY2zC,cAAc4qR,YAAvD,aAA6B,EAAgCzwnB,MAAOm4Y,GAC7E,IAAK,UACH,OAAOF,KAAiBG,YAAjB,OAA6BlmF,QAA7B,IAA6BA,GAA7B,UAA6BA,EAAa4I,eAA1C,aAA6B,EAAsB96T,MAAOm4Y,GACnE,IAAK,SACH,OAAO+iT,aAAsBhpY,EAAaimF,GAC5C,IAAK,aACH,OAAOF,KAAiBG,YAAYlmF,EAAY42a,WAAY3wV,GAC9D,IAAK,YACH,OAAOF,KAAiBI,YAAYnmF,EAAY2zC,cAAclC,UAAWw0C,GAC3E,IAAK,YACH,OAAO8iT,aAAiB/oY,EAAaimF,GACvC,IAAK,UACH,OAhCa,SAACjmF,GACtB,OACE,eAACtuF,EAAA,EAAD,UACE,eAACrrK,GAAA,EAAD,CAAQE,QAASmwqB,GAAgB12a,GAAcr4Q,MAAM,UAArD,sBA6BWkvrB,CAAe72a,SAMhC,OACE,wCACIxxN,GACA,eAACgnoB,GAAA,EAAD,IAEAhnoB,GACA,uCACI64lB,EAAK9jvB,OAAU,GACf,uCACE,gBAACwurB,GAAA,EAAD,WACE,gBAAC/3P,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAC3hE,KAAM2hE,EAAQs/W,WAAnC,SACE,eAACC,EAAA,EAAD,UACE,eAAC,GAAD,CACE+4V,oBA7EM,SAACx/X,GAC3Bw/X,EAAoBx/X,IA6EAU,eAAgBA,EAChB++X,aAAcA,QAIpB,eAAC94V,EAAA,EAAD,UACGgtT,GAAQA,EAAK38uB,KAAI,SAACs1W,EAAaniX,GAAd,OAChB,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAA7C,SACE,qCAAGg2b,GAAkBl1a,MADQniX,QAKnC,eAAC83xB,GAAA,EAAD,UACE,eAACx7V,EAAA,EAAD,UACI,eAACzoK,EAAA,EAAD,CAAWkkgB,QAAS,IAAK54qB,MAAO,CAAEuY,aAAc,GAAhD,SACA,eAACslU,EAAA,EAAD,CACE//W,UAAWF,EAAQs7sB,eACnBl7sB,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpBwta,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCnkb,MAAO4wP,EACPyzL,YAAaA,EACb2vK,mBAAoB,gBAAEp6lB,EAAF,EAAEA,KAAMC,EAAR,EAAQA,GAAR,gBAAmBD,EAAnB,YAA2BC,IAC/C28P,KAAMA,EACN0tL,aApJC,SAACnyT,EAAgB4tT,GACxCs9V,EAAiBt9V,IAoJKyE,oBAjJQ,SAACpxb,GAC/B,IAAMqhH,EAAQ9nH,OAAOyG,EAAE4kB,OAAOtxB,OAC9B42xB,EAAwB7oqB,IAgJFiwU,iBAAkB,SAACy6V,GAAD,OAAqB,eAAC,IAAD,aAAwBC,iBAAiB,GAAUD,gBAhCtG,OAuCE1B,GACA,gBAAC9hgB,GAAA,EAAD,CACEx9J,SAAUA,GACVxoB,KAAMttG,QAAQ81H,IACdwR,QAlIQ,WACtB8rJ,GAAY,MACZqkgB,EAAiB,OA6HL,UAKE,eAACv4qB,GAAA,EAAD,UACE,eAAC0N,GAAA,EAAD,CAASC,MAAOn+F,EAAE,qCAAlB,SACE,gCACE,eAAC,KAAD,CAAM9c,GAAImmxB,KAAwBhkY,gBAAgBqhY,GAAlD,SACE,gBAAC/3pB,GAAA,EAAD,CAAY3+H,KAAK,QAAjB,UACI,eAAC,KAAD,CAAeorH,SAAS,UACxB,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,gDAOe,YAA9B0mwB,EAAmBhtrB,SAA0C,OAAlBgtrB,QAAkB,IAAlBA,GAAA,UAAAA,EAAoBxgY,qBAApB,eAAmCjyT,UAAWn/C,EAAS98C,IAAI,QACtG,eAACw4G,GAAA,EAAD,UACE,eAAC0N,GAAA,EAAD,CAASC,MAAOn+F,EAAE,yCAAlB,SACE,gCACI,gBAAC2uG,GAAA,EAAD,CAAYthD,UAAWF,EAAQu7sB,YAAah5xB,IAAKs5xB,GAAkBlwqB,QAAS,WA5K1E,IAAC5jF,IA6KmBwxvB,EAAmBxxvB,GA5KjE6zvB,EAAiB7zvB,GACjB4zvB,GAAe,IA4KY94xB,KAAK,QAFR,UAGE,eAAC,KAAD,CAAWorH,SAAS,UACpB,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,oDAOe,YAA9B0mwB,EAAmBhtrB,QACnB,eAAC8W,GAAA,EAAD,CAAUW,UAAU,EAAM5B,MAAO,CAAE+J,OAAQ,WAA3C,SACE,eAAC4E,GAAA,EAAD,CAASC,MAAOn+F,EAAE,yCAAlB,SACE,gCACI,gBAAC2uG,GAAA,EAAD,CAAYthD,UAAWF,EAAQu7sB,YAAav3qB,UAAU,EAAMnhH,KAAK,QAAjE,UACE,eAAC,KAAD,CAAWorH,SAAS,UACpB,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,oDAOe,cAA9B0mwB,EAAmBhtrB,SAA4C,OAAlBgtrB,QAAkB,IAAlBA,GAAA,UAAAA,EAAoBxgY,qBAApB,eAAmCjyT,UAAWn/C,EAAS98C,IAAI,QACxG,eAACw4G,GAAA,EAAD,UACE,eAAC0N,GAAA,EAAD,CAASC,MAAOn+F,EAAE,uCAAlB,SACE,gCACI,gBAAC2uG,GAAA,EAAD,CAAYthD,UAAWF,EAAQu7sB,YAAa5vqB,QAAS,WAAOowqB,MAAuBl5xB,KAAK,QAAxF,UACE,eAAC,KAAD,CAAoBorH,SAAS,UAC7B,eAAC3N,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE4M,WAAY,GAAjD,SACGn8F,EAAE,wDAWP,IAAhB45tB,EAAK9jvB,QACL,eAACg3E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAASa,QAAQ,SAAtE,SACE,eAAC,IAAD,CACEq0C,WAAY+jqB,EACZ9jqB,YAAa,KACbC,cAAe,KACfvtF,MAAO,KACPopF,MAAOioqB,GAAqB,GAC5BxxpB,YAAa,KANf,SAQE,eAACnnB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG04qB,GAA2B,YAOtCwC,GACA,eAACS,GAAA,EAAD,CACET,YAAaA,EACbU,mBAxOmB,SAACllgB,GAC1B0kgB,EAAiB,MACjBD,GAAe,GACXE,GAAiBjtvB,SACnBitvB,GAAiBjtvB,QAAQ4iC,QAEvB0lN,IACFukgB,EAAa/ohB,GACTwkB,GACFzlP,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,gDACX65E,SAAU,eA8NV3kE,GAAIo+U,QCzWR7vP,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Ck9W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,OACR1J,UAAW3sC,EAAM6mD,QAAQ,GACzBta,aAAcvsC,EAAM4/C,MAAMrT,cAG5Bs6Q,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACf81C,OAAQ,YAqQGgkqB,GAjQ0B,SAAC,GAKnC,IAJqCC,EAItC,EAJsCA,4BACAC,EAGtC,EAHsCA,wBACAj4pB,EAEtC,EAFsCA,WACAu7S,EACtC,EADsCA,iBAElChtZ,EAAM+xB,YAAe,gBAArB/xB,EACFmmwB,EAAgB,CACpB1rqB,IAAK,mCACLM,YAAa,oCAET5tC,EAAUs2C,KACVloB,EAAM51D,sBAAYoY,eAClB/C,EAAQrV,sBAAYoV,eAK1B,EAAkDpI,mBAJpB,CAC5B5wC,OAAQ,EACR27G,MAAO,KAET,mBAAOisqB,EAAP,KAA0BC,EAA1B,KAKA,EAA8Cj3uB,mBAJlB,CAC1B5wC,OAAQ,EACR27G,MAAO,KAET,mBAAOmsqB,EAAP,KAAwBC,EAAxB,KACA,EAAsCn3uB,mBAAS,IAA/C,mBAAOizW,EAAP,KAAoBmkY,EAApB,KACA,EAA4Cp3uB,mBAAS,GAArD,mBAAOq3uB,EAAP,KAAuBC,EAAvB,KACA,EAAwDt3uB,mBAAS,GAAjE,mBAAOu3uB,EAAP,KAA6BC,EAA7B,KAEA,EAAwBx3uB,mBAAS,IAAjC,mBAAOinsB,EAAP,KAAawwC,EAAb,KACA,EAAwCz3uB,mBAAS,GAAjD,mBAAO03uB,EAAP,KAAqBC,EAArB,KACA,EAAoD33uB,mBAAS,GAA7D,mBAAO43uB,EAAP,KAA2BC,EAA3B,KAEA,EAAiE73uB,mBAAe,CAC9E,CACEszW,SAAU,YACVt4U,UAAW,QAEb,CACEs4U,SAAU,YACVt4U,UAAW,UAPf,mBAAOk4U,GAAP,KAAiC4kY,GAAjC,KAWA,GAA6D93uB,mBAAe,CAC1E,CACEszW,SAAU,YACVt4U,UAAW,QAEb,CACEs4U,SAAU,YACVt4U,UAAW,UAPf,qBAAO+8sB,GAAP,MAA+BC,GAA/B,MAWA,GAA4Bh4uB,oBAAS,GAArC,qBAAOouG,GAAP,MAAe6poB,GAAf,MAEMC,GAAoB1tqB,sBAAW,yCAAC,WAAO2tqB,EAAeC,EAAcC,EAAmBtkY,GAAvD,oBAAA9sZ,EAAA,6DAC9B4F,EAD8B,2BACjBsrxB,GAAkBC,IAC9BC,kBAAoBA,EAC3BxrxB,EAAOknZ,QAAUA,EACjB7C,KAA8B2C,8BAA8BhnZ,GAJxB,SAKH8na,KAAwBG,mBAAmBlsU,EAAKvgD,EAAOx7C,GALpD,QAMpC,QADMyrxB,EAL8B,cAMpC,IAAIA,OAAJ,EAAIA,EAAoB1le,WAChB2le,EAAoBrnY,KAA8B8B,yBAA9B,OAAuDslY,QAAvD,IAAuDA,OAAvD,EAAuDA,EAAoBh8uB,KAAMy3W,GAC3GqjY,EAAemB,GACff,EAAwBc,EAAmB5hxB,QAE7CuhxB,IAAU,GAX0B,2CAAD,4DAYlC,IAEGO,GAAkBhuqB,sBAAW,yCAAC,WAAO2tqB,EAAeC,EAAcC,EAAmBtkY,GAAvD,kBAAA9sZ,EAAA,6DAC5B4F,EAD4B,2BACfsrxB,GAAkBC,IAC9BC,kBAAoBA,EAC3BxrxB,EAAOknZ,QAAUA,EACjB7C,KAA8BgD,4BAA4BrnZ,GAJxB,SAKK8na,KAAwBc,qCAAqC7sU,EAAKvgD,EAAOx7C,GAL9E,QAMlC,QADMy3W,EAL4B,cAMlC,IAAIA,OAAJ,EAAIA,EAA0B1xD,WAC5B6ke,EAAQnza,EAAyBhoU,MACjCu7uB,EAAsBvza,EAAyB5tW,QAEjDuhxB,IAAU,GAVwB,2CAAD,4DAWhC,IAEHxwvB,qBAAU,WACR,GAAIsvvB,EAAyB,CAC3BkB,IAAU,GACVX,EAAkB,GAClB,IAAMmB,EAA2B,CAC/BrpxB,OAAQ,EACR27G,MAAOisqB,EAAkBjsqB,OAE3BksqB,EAAqBwB,GACrBP,GAAkBO,EAA0B3B,EAA6Bh4pB,EAAYo0R,OAEtF,CAAC4jY,EAA6BC,EAAyBj4pB,EAAYu7S,IAEtE5yY,qBAAU,WACR,IAAKsvvB,EAAyB,CAC5BkB,IAAU,GACVN,EAAgB,GAChB,IAAMe,EAAyB,CAC7BtpxB,OAAQ,EACR27G,MAAOmsqB,EAAgBnsqB,OAEzBosqB,EAAmBuB,GACnBF,GAAgBE,EAAwB5B,EAA6Bh4pB,EAAYi5pB,OAElF,CAACjB,EAA6BC,EAAyBj4pB,EAAYu7S,IAEtE,IAyEMs+W,GAA2B,yCAAG,WAAOrlY,GAAP,wBAAArsZ,EAAA,6DAC5B2xxB,EAAmBv5wB,IAAE4D,KAAK80wB,GAAwB,CAACzkY,aACnDwqE,EAAmD,SAAhB,OAAhB86T,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB59sB,WAAsB,OAAS,MACpE0/iB,EAAiBq9J,GAAuBztxB,KAAI,SAAAw3G,GAAM,OACtDA,EAAOwxS,WAAaA,EAApB,2BACSxxS,GADT,IACiB9mC,UAAW8iZ,IACxBh8W,KAEA+2qB,EAAen+J,EAAe7tnB,QAAO,SAAAi1G,GAAM,OAAIA,EAAOwxS,WAAaA,KAKnEwlY,EAb4B,CASX,CACrBxlY,WACAt4U,UAAW8iZ,IAXqB,mBAaY+6T,IAbZ,SAc5BL,GAAgBtB,EAAiBJ,EAA6Bh4pB,EAAYg6pB,GAd9C,OAelCd,GAA0Bc,GAC1B3B,GAAmB,SAACv+wB,GAAD,mBAAC,eACfA,GADc,IAEjBxJ,OAAQ,OAEVuoxB,EAAgB,GApBkB,4CAAH,sDAuBjC,OACE,eAACx9sB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKE,gBAACvmU,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,UAGI0zZ,GACA,eAAC,GAAD,CACExD,WAAY,mCACZnloB,OAAQA,GACR6kQ,YAAaA,EACb/lJ,KAAMmqhB,EACN/vhB,WAAYiwhB,EACZx8V,YAAai8V,EAAkBjsqB,MAC/ByoqB,cAAeA,EACfC,kBAAmBpmwB,EAAE,+BACrBqmwB,wBAAyB,KACzBC,iBApHyB,SAACt9V,GAC9BA,GAAW,IACbA,EAAU,GAEZ4hW,IAAU,GACVX,EAAkBjhW,GAClB,IACMoiW,EAA2B,CAC/BrpxB,OAFainb,EAAU2gW,EAAkBjsqB,MAGzCA,MAAOisqB,EAAkBjsqB,OAE3BksqB,EAAqBwB,GACrBP,GAAkBO,EAA0B3B,EAA6Bh4pB,EAAYo0R,KAyG7E4/X,oBAvF4B,SAACx/X,GACrC,IAAMwlY,EAAoB5lY,GAAyB5oZ,KAAI,SAAAw3G,GACrD,IAAMi3qB,EAAmBj3qB,EAAO9mC,UAC5Bg+sB,EAAeD,EAInB,OAHIj3qB,EAAOwxS,WAAaA,IACtB0lY,EAAoC,QAArBD,EAA6B,OAAS,OAEhD,2BACFj3qB,GADL,IAEE9mC,UAAWg+sB,OAIT1rI,EAAiBwrI,EAAkB71wB,MAAK,SAAA6+F,GAAM,OAAIA,EAAOwxS,WAAaA,KACtEulY,EAAeC,EAAkBjsxB,QAAO,SAAAi1G,GAAM,OAAIA,EAAOwxS,WAAaA,KACtE2lY,EAAmB,CAAI3rI,GAAJ,mBAAuBurI,IAChDf,GAA4BmB,GAC5B,IAAMV,EAAoBrnY,KAA8B8B,yBAAyBC,EAAagmY,GAC9F7B,EAAemB,IAsEP3E,wBAnEgC,SAAC7oqB,GACzCktqB,IAAU,GACVX,EAAkB,GAClB,IAAMmB,EAA2B,CAC/BrpxB,OAAQ,EACR27G,SAEFksqB,EAAqBwB,GACrBP,GAAkBO,EAA0B3B,EAA6Bh4pB,EAAYo0R,KA4D7Ec,eAAgBd,GAChBmnB,iBAAkBA,KAGnB08W,GACD,eAAC,GAAD,CACExD,WAAY,iCACZnloB,OAAQA,GACR64lB,KAAMA,EACN/5e,KAAMwqhB,EACNpwhB,WAAYswhB,EACZ78V,YAAam8V,EAAgBnsqB,MAC7ByoqB,cAAeA,EACfC,kBAAmBpmwB,EAAE,+BACrBqmwB,wBAAyB,KACzBC,iBAvHuB,SAACt9V,GAC5BA,GAAW,IACbA,EAAU,GAEZ4hW,IAAU,GACVN,EAAgBthW,GAChB,IACMqiW,EAAyB,CAC7BtpxB,OAFainb,EAAU6gW,EAAgBnsqB,MAGvCA,MAAOmsqB,EAAgBnsqB,OAEzBosqB,EAAmBuB,GACnBF,GAAgBE,EAAwB5B,EAA6Bh4pB,EAAYi5pB,KA4GzEjF,oBAAqB6F,GACrB1C,aAAc,KACdrC,wBA3E8B,SAAC7oqB,GACvCktqB,IAAU,GACVN,EAAgB,GAChB,IAAMe,EAAyB,CAC7BtpxB,OAAQ,EACR27G,SAEFosqB,EAAmBuB,GACnBF,GAAgBE,EAAwB5B,EAA6Bh4pB,EAAYi5pB,KAoEzE/jY,eAAgB+jY,GAChB19W,iBAAkBA,U,mDCpQxBvpT,GAAYJ,cAAW,SAAAl0C,GAAK,MAAK,CACrC1B,UAAW,CACTsC,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B+4C,aAAcn4C,EAAMZ,SAAS,MAE/Bs0P,KAAM,CACJnnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BlsC,OAAQL,EAAMZ,QAAQ,KACtBi3C,OAAQ,OACRz1C,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,QACPm8C,WAAY,UAEd8sW,SAAU,CACR9sW,WAAY,cA2ODxhD,qBACb91B,YAAgB,gBAChB0/D,mBAxBsB,SAAC73E,EAAYyF,GACnC,IAAQyrZ,EAAkBzrZ,EAAlByrZ,cACFsrC,EAAmBx8b,EAAMpmB,MAAM,CAAC,OAAQs3a,EAAe,qBAO7D,MAAO,CACLurC,WAPiBD,GAAoBA,EAAiB73d,QAAO,SAACutI,EAAK29G,GACnE,IAAM8zH,EAAY9zH,EAAM9yP,IAAI,QACtB2/d,EAAY/4G,EAAU5rU,MAAM,KAClC,OAAOm6F,EAAIxxI,IAAIijX,EAAW/3W,cAAI,CAACpE,KAAMm8W,EAAW+4G,iBAC/C9wd,iBAID+wd,kBAAmBvoX,yBAAc88U,EAAd98U,CAA6Bp0E,GAChDw2E,UAAWsB,eAAsB93E,GACjC+2E,UAAWgB,eAAsB/3E,GACjCm3E,OAAQa,eAAmBh4E,OAIJ,SAAC2D,GAAD,MAAe,CACxCA,eAGasqC,EAlNyD,SAAC/qC,GAAW,IAAD,EAG/ES,EAWET,EAXFS,SACA5e,EAUEme,EAVFne,EACAmsa,EASEhuZ,EATFguZ,cACAy4V,EAQEzmvB,EARFymvB,4BAJF,EAYIzmvB,EAPF+pU,oBALF,MAKiB,KALjB,EAME0vH,EAMEz5b,EANFy5b,kBACAF,EAKEv5b,EALFu5b,WAPF,EAYIv5b,EAJFy0a,sBARF,MAQmB,GARnB,EASEi5U,EAGE1tvB,EAHF0tvB,qBACAnC,EAEEvrvB,EAFFurvB,wBAGF,GADIvrvB,EADFsrvB,4BAMEhmqB,MAHFh2C,EADF,EACEA,UACAo1P,EAFF,EAEEA,KACA20J,EAHF,EAGEA,SA6EIO,EAAwB,CAAC,YAAa,cAAe,aACrDC,EAAkBN,GAAcE,IAAd,UAAmCF,EAAW9ge,WAAWgJ,QAAO,SAACutI,EAAK3tI,GAC5F,IAAMo/W,EAAYp/W,EAAO,GAAGxH,IAAI,QAC1Bige,EAAiBz4d,EAAO,GAAGxH,IAAI,aAC/Bkge,EAAaN,EAAkB/id,MAAMojd,IAzCvB,SAACr5G,EAAmB+4G,GACxC,OAAQ/4G,GACN,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,cACH,OAAOg5G,EAAkB/id,MAAM8id,EAAUp4d,OAAO,CAAC,WACnD,IAAK,YACH,OAAOq4d,EAAkB/id,MAAM8id,GACjC,IAAK,cACH,OAAOC,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAC5C,IAAQsuG,EAAsCtuG,EAAtCsuG,UAAWC,EAA2BvuG,EAA3BuuG,SAAUF,EAAiBruG,EAAjBquG,aAC7B,OAAIC,GAAaC,EACRD,EAAY,IAAMC,EAEvBD,GAGGD,KAEX,IAAK,sBACL,IAAK,oBACL,IAAK,sBACL,IAAK,oBACL,IAAK,sBACL,IAAK,oBACH,OAAOq+M,aAAWo/J,EAAkB/id,MAAM8id,IAC5C,IAAK,YACH,IAAMz3U,EAAO03U,EAAkB/id,MAAM8id,GAAW16d,KAAI,SAAA6O,GAAC,OAAIjF,MAAI9N,MAAM+S,GAAKA,EAAE9T,IAAI,SAAW8T,EAAEnc,SAC3F,OAAI+F,MAAMC,QAAQuqJ,GACTA,EAEFA,EAAK1tI,OACd,QAAS,MAAO,IAQ4Cgmd,CAAc55G,EAAWq5G,GACvF,IAAKC,EACH,OAAO/qV,EAET,IAAM+9R,EAnEY,SAACtsD,GACnB,OAAQA,GACN,IAAK,aACH,MAAM,GAAN,OAAU5+V,EAAE,wBAAZ,YAAuCA,EAAE,wBAC3C,IAAK,cACH,MAAM,GAAN,OAAUA,EAAE,wBAAZ,YAAuCA,EAAE,8BAC3C,IAAK,UACH,MAAM,GAAN,OAAUA,EAAE,wBAAZ,YAAuCA,EAAE,qBAC3C,IAAK,YAAa,OAAOA,EAAE,sCAC3B,IAAK,cAAe,OAAOA,EAAE,sBAC7B,IAAK,YAAa,OAAOA,EAAE,iCAC3B,IAAK,cAAe,OAAOA,EAAE,6BAC7B,IAAK,sBAAuB,MAAM,GAAN,OAAUA,EAAE,mCAAZ,YAAkDA,EAAE,wBAChF,IAAK,oBAAqB,MAAM,GAAN,OAAUA,EAAE,mCAAZ,YAAkDA,EAAE,sBAC9E,IAAK,sBAAuB,MAAM,GAAN,OAAUA,EAAE,uCAAZ,YAAsDA,EAAE,wBACpF,IAAK,oBAAqB,MAAM,GAAN,OAAUA,EAAE,uCAAZ,YAAsDA,EAAE,sBAClF,IAAK,sBAAuB,MAAM,GAAN,OAAUA,EAAE,kCAAZ,YAAiDA,EAAE,wBAC/E,IAAK,oBAAqB,MAAM,GAAN,OAAUA,EAAE,kCAAZ,YAAiDA,EAAE,sBAC7E,QAAS,MAAO,IAiDD24c,CAAY/5G,GACvB7pV,EAA8B,mBAAfmjc,EAA2BhtD,EAAlC,UAAgDA,EAAhD,cAA8DgtD,GAE5E,GAAIH,EAAsBv6d,SAASohX,GAAY,CAC7C,IAAMg6G,EAAYV,EAAWj7d,KAAI,SAACtN,EAAOS,GAAR,MAAoB,CAACwuX,UAAU,GAAD,OAAKA,EAAL,YAAkBxuX,GAAS2kC,MAAM,GAAD,OAAKm2Y,EAAL,cAAmBv7a,GAASkpe,kBAAmBj6G,MAC9I,OAAOzxO,EAAI5tI,OAAOq5d,GAElB,OAAOzrV,EAAI9sI,KAAK,CAACu+W,YAAW7pV,YAE7B7oB,yBAhBqB,aAAmC,EAgB/CxL,MAAK,SAAC9G,EAAGC,GACnB,IAAci/d,EAAUl/d,EAAjBm7B,MACOgkc,EAAUl/d,EAAjBk7B,MACP,OAAI+jc,EAAOzrb,cAAgB0rb,EAAO1rb,eACxB,EAENyrb,EAAOzrb,cAAgB0rb,EAAO1rb,cACzB,EAEF,OACHnhC,iBAMN,OACE,gBAAC4gE,EAAA,EAAD,CACEW,WAAW,EACXP,WAAW,WACXuB,KAAK,SACLpB,UAAWI,EACX8hC,MAAOqjW,EALT,UAOE,eAAC9lY,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,QAASrC,WAAW,SAA1D,SACE,eAACugC,EAAA,EAAD,UAAaztF,EAAE,kCAEjB,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAC0mB,KAAM,WAArC,SAEI+hW,EAAgB/6d,KAAI,SAACuC,GACnB,IAAOo/W,EAAuCp/W,EAAvCo/W,UAAW7pV,EAA4Bv1B,EAA5Bu1B,MAAO8jc,EAAqBr5d,EAArBq5d,kBACzB,OACE,eAAC/rZ,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACmsP,GAAA,EAAD,CACE3sP,UAAWw1P,EACX9tS,MAAOA,EACPolS,SAAU,WAER,GAAI0+J,GAAqBd,EAAsBv6d,SAASq7d,GAAoB,CAC1E,IAAMG,EAAiBp6G,EAAU5rU,MAAM,KAAK,GACtC2kb,EAAYkB,EAAkB7lb,MAAM,KAGpCimb,EAAcrB,EAAkB/id,MAAM8id,GAAWn4d,QAAO,SAAC7P,EAAOS,GAAR,OAAkBA,IAAUwF,OAAOoje,MACjGp6b,EAASu/B,YAAOguX,EAAe0sC,EAAmBI,SAElDr6b,EAASu/B,YAAOguX,EAAevtE,EAAW,QAG9CzxS,QAAS,CACPp4C,MAAOyic,MAlBU54G,QA0B/B,gBAAC9xS,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,OAAQkmC,YAAa,IAA3D,UACE,eAACu2M,GAAA,EAAD,CAAkBxwM,QAChB,eAAC0uJ,GAAA,EAAD,CAAQhwK,MAAM,UAAU+1B,QAASy5pB,EAAyBj6qB,SAhDzC,SAACpzG,GACxBwvxB,EAAqBxvxB,EAAE4kB,OAAOgvG,YAgDtBl7F,MAAO/U,EAAE,oCAGb,eAAC44F,GAAA,EAAD,CACEE,QA5Ja,WACnBl6E,EACE8/B,YACEytX,EACA,KAGJvtZ,EAASggC,YAAMutX,IAEXjkF,GACFA,EAAalmV,KAAK+xB,OAEpB6wuB,EAA4B,OAiJtB1qrB,MAAM,UACNqV,MAAO,CAAC0tP,WAAY+6H,EAAgBhoe,KAAO,EAAI,UAAY,UAH7D,SAKGgwB,EAAE,gC,+DC9ME8rwB,GAxBW,SAAC,GAAyC,IAAvC5qwB,EAAsC,EAAtCA,OACnBlB,EAAM+xB,YAAe,gBAArB/xB,EAoBR,MAlB6B,CAC3B,UACE,eAACk+F,GAAA,EAAD,CAASC,MAAOn+F,EAAE,4CAAlB,SACE,eAAC,KAAD,CAAiBk6E,MAAM,cAG3B,gBACE,eAACgkB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,kDAAlB,SACE,eAAC,KAAD,CAAWk6E,MAAM,cAGrB,eACE,eAACgkB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,iDAAlB,SACE,eAAC,KAAD,CAAgBk6E,MAAM,eAKAh5E,IAAW,MC1BnCuiG,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Cm1M,aAAc,CACZpjK,UAAW,cAgBA6qqB,GAZW,SAAC,GAAgB,IAAd7qwB,EAAa,EAAbA,OACrBisD,EAAUs2C,KAEhB,OACE,eAACwgK,EAAA,EAAD,CACE52M,UAAWF,EAAQm3M,aADrB,SAGE,eAAC,GAAD,CAAmBpjQ,OAAQA,O,UCR3BuiG,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C68sB,YAAa,CACXthqB,WAAY,SACZpM,SAAU,SACVsL,aAAc,WACdr5C,SAAU,SAEZm2R,WAAY,CACVptP,OAAQ,WAEV2yqB,mBAAoB,CAClBhzqB,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,GACzB5a,SAAU,WAgEC8wqB,GA5DQ,SAAC,GAAoB,IAAlBxlb,EAAiB,EAAjBA,WAClBv5R,EAAUs2C,KAEVhB,EAA8B98E,sBAAYiW,eAE1CuwuB,EAAoBzlb,GAAcA,EAAWzpW,KAAI,SAACmhG,EAAMmnL,GAC5D,IAAMw5C,EAAW3gO,EAAKpmG,IAAI,YAE1B,OAAIyqH,EACK,eAAClB,GAAA,EAAD,CACLrnB,MAAM,gBACN8oO,UAAW,OACXr1N,QAAQ,QAHH,SAMJ43K,EAAgB,KAAOw5C,EAAWA,GAF9Bx5C,GAMF,eAAChkK,GAAA,EAAD,CACLl0C,UAAWF,EAAQu5R,WACnBxsQ,MAAM,UAENj5E,OAAQ,SACRogG,KAAI,UAAK1+F,OAAO+6B,SAAS3uC,QAArB,OAA8B2T,6BAA9B,OAAkDsH,oBAAlD,YAAuEo0E,EAAKpmG,IAAI,OAL/E,SAaJutR,EAAgB,KAAOw5C,EAAWA,GAV9Bx5C,MAcT,OACE,eAACtB,EAAA,EAAD,CACE10K,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAOE,eAAC1L,GAAA,EAAD,CACE88J,aAAa,EACb58J,UAAU,eACVD,MAAOguqB,EACPh/sB,QAAS,CACPo2L,QAASp2L,EAAQ8+sB,oBALrB,SAQE,sBAAK5+sB,UAAWF,EAAQ6+sB,YAAxB,SACIG,SCKCrhvB,GAAkC,CAC7C4yE,MAHmB,GAInB37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAkHIg0V,GAAe,SAACkja,EAAuB7thB,GAAuB,IAAD,EAClEz2C,EAAe,iBAAGskkB,QAAH,IAAGA,OAAH,EAAGA,EAAkBp0xB,IAAI,0BAAzB,QAA+Co0xB,EAEpE,IAAKtkkB,EACH,OAAOy2C,EAGT,IAAM8qH,EAA+BvhK,EAAgBz+M,SAAW,EAC1DgjxB,EAAqBvkkB,EAAgB9vN,IAAI,IAAMs0xB,iBAE/Chja,GADoC+ia,EAAmBr0xB,IAAI,kBAAoBs0xB,kBACpCjjxB,SAAW,EAC5D,OAAIggX,EAAuB,GAAKC,EAAqB,EAC5C1vR,KAAQ55E,EAAE,oDAAqD,aAGjE,CAACqswB,EAAmBr0xB,IAAI,SAAUq0xB,EAAmBx3wB,MAAM,CAAC,gBAAiB,EAAG,WAAWrV,QAAO,SAAAigC,GAAC,OAAIA,KAAG/pB,KAAK,QAGlH62wB,G,kDA+BJ,WAAYpuvB,GAAsB,IAAD,uBAC/B,cAAMA,IA9BDm4R,aAAezxI,oBAAS,SAACpzD,GAC9B,MAA8C,EAAKx2F,MAA3C6qR,EAAR,EAAQA,SAAU4je,EAAlB,EAAkBA,wBAClB,GAAiB,gBAAb5je,EAA4B,CAC9B,IACE7lR,EACE,EAAKhF,MADPgF,QAEF,EAAKqmU,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV0vH,aACAouI,KAAM,IAGV,GAAiB,oBAAbimD,EAAgC,CAClC,IAI6B,EACwB,EAL/C5lI,EAAU,CACdzuD,aACA+6pB,0BAA2B/6pB,GAE7B,GAAIi4pB,EACF,aAAI,EAAKzuvB,aAAT,aAAI,EAAYwxvB,kCACdvsmB,EAAO,iBAAuB2jO,KAA8BiD,oBAA9B,UAAkD,EAAK7rX,aAAvD,aAAkD,EAAYwxvB,mCAGhG,EAAK51qB,SAASqpE,MAEf,KAE8B,EA8B1BwsmB,aAAe,SAACC,GACrB,IAAQ1svB,EAAY,EAAKhF,MAAjBgF,QAEF34B,EAASjV,OAAO0D,KAAKkqC,EAAQisJ,SAAS,GACtCk1C,EAAoC,IAA5BnhM,EAAQisJ,QAAQ5kL,GAAgB,MAAQ,OAEtD,OAAIqlxB,IAAYrlxB,EACP85N,EAEO,QAAVA,EACK,OAEA,OA1CoB,EA8C1B+oN,mBAAqB,WAC1B,EAAKtzU,UAAS,SAAAquJ,GAAS,MAAK,CAC1BklL,kBAAmBllL,EAAUklL,iBAC7Bzd,mBAAmB,OAjDU,EAqD1BC,oBAAsB,WAC3B,EAAK/1T,UAAS,SAAAquJ,GAAS,MAAK,CAC1BynK,mBAAoBznK,EAAUynK,kBAC9Byd,kBAAkB,OAxDW,EA2D1BwiW,kBAAoB,SAACD,GAC1B,IAAQ1svB,EAAY,EAAKhF,MAAjBgF,QAEF34B,EAASjV,OAAO0D,KAAKkqC,EAAQisJ,SAAS,GACtCk1C,EAAoC,IAA5BnhM,EAAQisJ,QAAQ5kL,GAAgB,MAAQ,OAEhDojb,EAAU,2BACXzqZ,GADW,IAEdl+B,OAAQ,EACRmqL,QAAQ,eACLygmB,EAAoB,QAAVvrjB,GAAmB,EAAI,KAItC,EAAKklI,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAM,KAzEzB,EA2E1BymG,uBAAyB,SAACrnV,GAE/B,GAAiB,gBADI,EAAKgc,MAAlB6qR,SACwB,CAC9B,MAGI,EAAK3nR,MAFPS,EADF,EACEA,SACAumW,EAFF,EAEEA,eAEF,EAKI,EAAKlqW,MAJEqvZ,EADX,EACErqZ,QACYsqZ,EAFd,EAEE94T,WACS+4T,EAHX,EAGEhtU,QACMitU,EAJR,EAIE5qL,KAGS6qL,EAIPzra,EAJFghB,QACY0qZ,EAGV1ra,EAHFwyG,WACSm5T,EAEP3ra,EAFFu+F,QACMwrU,EACJ/pa,EADF4gP,KAGIv6I,EAAW,CACfrlF,QAASyqZ,GAAcJ,EACvB74T,gBAA8B1hI,IAAlB46b,EAA8BA,EAAgBJ,EAC1D/sU,aAAwBztH,IAAf66b,EAA2BA,EAAaJ,EACjD3qL,UAAkB9vQ,IAAZi5b,EAAwBA,EAAUyB,GAG1C,EAAK5zU,SACHyO,GACA,WAAO,IAAD,EACA9H,EAAU,CACZ,IAAO,IAEL8H,EAASmM,aACXjU,EAAU,CACR,IAAO,CACL,CACE,GAAM,CACJ,CACE,KAAQ,CACN,KAAQ8H,EAASmM,aAGrB,CACE,WAAc,CACZ,KAAQnM,EAASmM,aAGrB,CACE,QAAW,CACT,KAAQnM,EAASmM,aAGrB,CACE,WAAc,CACZ,KAAQnM,EAASmM,kBAS/BnM,EAAS9H,UAAW,EAAAA,EAAQ9nF,KAAIr1B,KAAZ,oBAAoBilH,EAAS9H,QAAQ9nF,MAC9B,IAAvB8nF,EAAQ9nF,IAAI5/B,eACP0nH,EAAQ9nF,IAEjBkJ,EAAS,IAAIqlE,MACbkhS,EACE7/Q,EAASrlF,QACTu9E,QAlJuB,EA0J1BqvqB,4BAA8B,SAAC3hb,GACpC,IAI6B,EACwB,EAJ/ChrL,EAAU,CACdupmB,4BAA6Bv+a,GAFK,EAAKjwU,MAAjCyuvB,2BAKN,UAAI,EAAKzuvB,aAAT,aAAI,EAAYwxvB,qCACdvsmB,EAAO,iBAAuB2jO,KAA8BiD,oBAA9B,UAAkD,EAAK7rX,aAAvD,aAAkD,EAAYwxvB,qCAGhG,EAAK51qB,SAASqpE,IApKiB,EAwK1B4smB,kCAAoC,SAACpD,GAC1C,EAAK7yqB,SAAS,CAAE6yqB,4BAChB,IAAMxpmB,EAAU,CACd8sP,iBAAkB,MAGlB9sP,EAAQ8sP,iBADN08W,EACyB,EAAKzuvB,MAAMwxvB,kCAEX,EAAKxxvB,MAAM8xvB,mCAExC,EAAKl2qB,SAAL,aACE81T,mBAAmB,GAChBzsP,KApL0B,EAyO1B+kF,mBAAqB,SAAC3yJ,EAAW4yJ,GAAe,IAAD,EACpD,EAKI,EAAK/mO,MAJP6uvB,EADF,EACEA,iBACA59qB,EAFF,EAEEA,WACAtuD,EAHF,EAGEA,cACApD,EAJF,EAIEA,SAEF,EAAyD,EAAKziB,MAAtDgF,EAAR,EAAQA,QAAS4/N,EAAjB,EAAiBA,KAAMpuI,EAAvB,EAAuBA,WAAYjU,EAAnC,EAAmCA,QAGnC,GAAiB,gBAHjB,EAA4CsoM,SAGZ,CAC9B,GAAIxzM,EAAU06qB,iBAAiBh9xB,MAAkC,IAA1Bg9xB,EAAiBh9xB,MAAciwC,EAAQl+B,OAAQ,CACpF,IAAMinb,EAAUnpL,EAAO,EACjBopL,EAAYhpZ,EAAQl+B,OAASk+B,EAAQy9E,MAC3C,EAAK4oP,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQknb,IAEVppL,KAAMmpL,IAKV,IAAI9jL,EAAUzzI,aAAeA,GAAcyzI,EAAU1nJ,UAAYA,MAEjD,OAAViU,QAAU,IAAVA,OAAA,EAAAA,EAAY37H,SAAa0nH,GAAWA,EAAO,IAAQ,IAAK,CAC1D,IAAMmxR,EAAcu0Y,GAAYC,wBAAwB/zqB,EAAYqiB,GACpE/2B,IAAmB9rE,kBAAgBq+vB,YAAansuB,EAAc6tV,MAKxD,OAARjxV,QAAQ,IAARA,OAAA,EAAAA,EAAU7oC,MAAM,CAAC,QAAS,uBAA+B,OAAR6oC,QAAQ,IAARA,OAAA,EAAAA,EAAU7oC,MAAM,CAAC,QAAS,wBAA1B,UAAkDy9F,EAAU50D,gBAA5D,aAAkD,EAAoB7oC,MAAM,CAAC,QAAS,sBACzI,EAAKyxV,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV89P,KAAM,KAhRqB,EAqR1BsF,qBAAuB,WAC5B,MAA4B,EAAKhnO,MAAzBS,EAAR,EAAQA,SAAU+6c,EAAlB,EAAkBA,MACdA,IAEEA,EAAMn8e,SAASynW,MACjBrmU,EAAS6/B,YAAQwmS,MAEf00I,EAAMn8e,SAASgnxB,KACjB5lvB,EAAS6/B,YAAQ+ltB,OA7RU,EAkS1B12W,oBAAsB,SAAC+hK,GAC5B,OAAO,EAAKh5d,SAAS,CAAEm2T,iBAAkB6iK,KAnSV,EAsS1BhlJ,iBAAmB,SAACxub,EAAG2sb,GAC5B,IACE/oZ,EACE,EAAKhF,MADPgF,QAGMy9E,EAAUz9E,EAAVy9E,MACFgtU,EAAU,2BACXzqZ,GADW,IAEdl+B,OAAQinb,EAAUtrU,IAEpB,EAAK4oP,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmpL,KAhTzB,EAmT1B8B,wBAA0B,SAACzub,GAChC,MAGI,EAAK4+B,MAFPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KAGIkrL,EAASn1b,OAAOyG,EAAE4kB,OAAOtxB,OACzBq7b,EAAeh6b,KAAKqjB,MAAQwrP,EAAQ5/N,EAAQy9E,MAAS,GAAKqtU,GAAU,EAEpEL,EAAU,2BACXzqZ,GADW,IAEdy9E,MAAOqtU,EACPhpb,OAAQgpb,EAASC,IAEnB,EAAK1kF,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmrL,KAjUzB,EAoU1BkiW,iBAAmB,WACxB,MAGI,EAAK/uvB,MAFPS,EADF,EACEA,SACA8e,EAFF,EAEEA,SAGFw/E,YAAW,CACTjf,SAAUxyF,0BACVmT,WACA8e,YAHFw/E,KAMA,EAAKrmB,SAAS,CAAEuzU,kBAAkB,KAhVH,EAmV1B+iW,gBAAkB,SAACrpxB,GACxB,MAQI,EAAKm3B,MAPP6qR,EADF,EACEA,SACAr0L,EAFF,EAEEA,WACAu7S,EAHF,EAGEA,iBACA08W,EAJF,EAIEA,wBACAvF,EALF,EAKEA,mBACAsI,EANF,EAMEA,kCACAM,EAPF,EAOEA,mCAEF,EAGI,EAAK5uvB,MAFPivvB,EADF,EACEA,sCACAC,EAFF,EAEEA,uCAGF,GAAIvne,IAAahiT,EAAU,CACzB,IAAMo8K,EAAO,aACXzuD,WAAY,EAAKx2F,MAAL,UAAcn3B,EAAd,gBADD,UAEPgiT,EAFO,cAEgBr0L,GAEZ,gBAAb3tH,IACFo8K,EAAQ8sP,iBAAmBm3W,EAC3BjkmB,EAAQotmB,mBAAqBtgX,EACzB08W,EACFxpmB,EAAQusmB,kCAAoCz/W,EAE5C9sP,EAAQ6smB,mCAAqC//W,GAGhC,oBAAblpa,IACFo8K,EAAQikmB,mBAAqBn3W,EACzB08W,GAIAxpmB,EAAQ8sP,iBAHLogX,EAGwBA,EAAsC56wB,OAFtCi6wB,GAIzB,OAACvsmB,QAAD,IAACA,OAAD,EAACA,EAAS8sP,mBAAwD,IAApC9sP,EAAQ8sP,iBAAiBl3a,SACzDoqL,EAAQ8sP,iBAAmBk2W,GAAYkB,oCAMvClkmB,EAAQ8sP,iBAHLqgX,EAGwBA,EAAuC76wB,OAFvCu6wB,GAIzB,OAAC7smB,QAAD,IAACA,OAAD,EAACA,EAAS8sP,mBAAwD,IAApC9sP,EAAQ8sP,iBAAiBl3a,SACzDoqL,EAAQ8sP,iBAAmBk2W,GAAYmB,qCAI7C,EAAKxtqB,SAAL,aACEivM,SAAUhiT,EACVsmb,kBAAkB,EAClBzd,mBAAmB,GAChBzsP,IACF,kBAAM,EAAKomL,uBAAuB,CACnCzmG,KAAM,EACN5/N,QAAS6K,UA3Yb,IACIyivB,EAAU,cAHiB,MAIE,oBAFf,IAAI95I,gBAAgB/1lB,SAASw0I,QAEjCl6L,IAAI,aAChBu1xB,EAAU,mBAEZ,EAAKtyvB,MAAQ,CACXmsF,SAAU,KAEV4lT,iBAAkBk2W,GAAYiB,qBAC9BA,mBAAoBjB,GAAYiB,qBAChCsI,kCAAmCvJ,GAAYkB,iCAC/C2I,mCAAoC7J,GAAYmB,kCAChDj6V,kBAAkB,EAClBzd,mBAAmB,EACnB9sK,KAAM,EACNpuI,WAAY,GACZ+7pB,sBAAuB,GACvBhB,0BAA2B,GAC3BhvqB,QAAS,KACTv9E,QAAS6K,GACT2ivB,2BAA4B,GAC5B3ne,SAAUyne,EACVG,+BAAgC,GAChCjE,4BAA6B,KAC7BC,yBAAyB,GA1BI,E,qDAwLjC,WAA4B,IAAD,OACzB,EAQIz1xB,KAAKkqC,MANPS,GAFF,EACEumW,eADF,EAEEvmW,UACA0uvB,EAHF,EAGEA,mBACArhF,EAJF,EAIEA,mBACAmhF,EALF,EAKEA,sCACAC,EANF,EAMEA,uCACAj+qB,EAPF,EAOEA,WAEF,EAOIn7G,KAAKgnC,MANP6qR,EADF,EACEA,SAEAq+d,GAHF,EAEElkvB,QAFF,EAGEkkvB,oBACA3mqB,EAJF,EAIEA,QACAuvqB,EALF,EAKEA,mCACAtD,EANF,EAMEA,4BAEe,gBAAb3je,IAA8B,OAAC12M,QAAD,IAACA,OAAD,EAACA,EAAYp/G,QAC7CiE,KAAK4iH,SAAS,CACZm2T,iBAAkBm3W,EAClB3mqB,YACC,kBAAM,EAAK8oP,uBAAuB,OAIrC1nU,EAAS,IAAIumE,IAAyB,CAAChxG,KAAM,OAAQ8wR,OAAQhxR,KAAKkqC,MAAM81D,OAAQkW,UAAW,KAC3FvrE,EAAS,IAAIqlE,MAERqprB,GACH1uvB,EAAS,IAAIqoB,MAAiB,CAACuiF,WAAYz6G,eAAa4+vB,4BAGxD1hF,IACe,oBAAbnmZ,GACF7xT,KAAK4iH,SAAS,CACZm2T,iBAAkB+/W,EAClBvvqB,QAASisqB,IAGR2D,GAAwF,IAA/CA,EAAsCp9xB,MAClF4uC,EAAS,IAAIqoB,MAAiB,CAACuiF,WAAYz6G,eAAa6+vB,4CAErDP,GAA0F,IAAhDA,EAAuCr9xB,MACpF4uC,EAAS,IAAIqoB,MAAiB,CAACuiF,WAAYz6G,eAAa8+vB,gD,oBA8K9D,WAAiB,IAAD,OACd,EAUI55xB,KAAKkqC,MATPgvC,EADF,EACEA,QACA6/sB,EAFF,EAEEA,iBACAc,EAHF,EAGEA,kBACAC,EAJF,EAIEA,4BACA/twB,EALF,EAKEA,EACAmvD,EANF,EAMEA,MACAszC,EAPF,EAOEA,4BACAwplB,EARF,EAQEA,mBAGF,GAXA,EASEtyN,MAaE1lf,KAAKgnC,OAVPgF,EADF,EACEA,QACAwxF,EAFF,EAEEA,WACAjU,EAHF,EAGEA,QACAqiJ,EAJF,EAIEA,KACAuqL,EALF,EAKEA,iBACAzd,EANF,EAMEA,kBACAK,EAPF,EAOEA,iBACAlnH,EARF,EAQEA,SACA2je,EATF,EASEA,4BACAC,EAVF,EAUEA,wBAGI19V,EAA2Bhf,EAAiBxta,QAAO,SAACwnZ,GAAD,OAAYA,EAAO33U,WAA2B,YAAd23U,EAAO9xX,IAAoButF,MAC9Gn7G,EAASjV,OAAO0D,KAAKkqC,EAAQisJ,SAAS,GACtCk1C,EAAoC,IAA5BnhM,EAAQisJ,QAAQ5kL,GAAgB,MAAQ,OAChDymY,EAAS,CACbx/B,kBAAmBvuV,EAAE,iCACrBwuV,mBAAoBxuV,EAAE,kCACtB4uV,aAAc5uV,EAAE,4BAChB6uV,kBAAmB7uV,EAAE,kCAGvB,OACE,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQM,UAHrB,UAKE,eAACw+W,EAAA,EAAD,CACElc,oBAAqB97a,KAAK24a,oBAC1BkD,oBAAqB77a,KAAKk2b,mBAC1Bna,WAAY/7a,KAAKi5xB,iBACjB59W,cAAetvZ,EAAE,oCACjByxG,WAAYA,EACZ6kM,aAAcriU,KAAKqiU,aACnBk5G,SAAU/sT,GAA4C,gBAAbqjM,EACzCoqH,cACE+7R,EACE,eAAC,GAAD,CACEnmZ,SAAUA,EACVm9d,gBAAiBhvxB,KAAKk5xB,kBAEtB,iCAGO,gBAAbrne,GACA,eAAComI,GAAA,EAAD,CACEC,cAAelnF,IACfqB,uBAAwBryW,KAAKqyW,uBAC7BrmU,QAASA,EACTioU,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE42qB,2BAA4Bl1xB,OAGxD,oBAAbutT,GACA,eAAC,GAAD,CACEqmI,cAAeq4V,GACfI,4BAA6B3wxB,KAAK44xB,4BAClCpD,4BAA6BA,EAC7Bvhb,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE62qB,+BAAgCn1xB,KACvEszxB,qBAAsB53xB,KAAK64xB,kCAC3BpD,wBAAyBA,IAG7B,gBAAC58sB,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQi/W,iBACnB39W,KAAK,SAHP,UAKiB,gBAAbq3O,GACA,eAACh5O,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKGyhW,EACG,eAACxhW,EAAA,EAAD,CACErtD,QAAS,eAAC,IAAD,IACTC,SAAU,eAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,IAElB,eAAC74Q,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,SAG6B,IAA1Bg3Z,EAAiBh9xB,KACd,uCACE,sBAAKu/G,MAAO,CAAE+O,SAAU,OAAQhuC,SAAU,GAA1C,SACE,gBAACi8W,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAE3hE,KAAM2hE,EAAQs/W,WAApC,SACE,eAACC,EAAA,EAAD,UACGV,EAAyB/ub,KAAI,SAAC+pZ,EAAQ52Z,GACrC,IAAM49xB,EAAehnY,EAAO1/Y,OAC5B,OACI0mxB,EAAe,eAAC/pgB,EAAA,EAAD,CAEP92M,QAAS,CAAC3hE,KAAM2hE,EAAQ04sB,eACxBt2qB,MAAOy3S,EAAOz3S,MACd0zP,iBAAgB+qb,GAAgB1mxB,IAAW0mxB,IAAgB5sjB,EAJpD,SAMT,eAACukjB,EAAA,EAAD,CACIzugB,OAAQ5vQ,IAAW0mxB,EACnBrgtB,UAAW,EAAK++sB,aAAasB,GAC7Bl1qB,QAAS,kBAAM,EAAK8zqB,kBAAkBoB,IAH1C,SAKGhuwB,EAAEgnY,EAAOjyX,UAXH,UACCiyX,EAAOjyX,MADR,YACiB3kC,IAa1B,eAAC6zR,EAAA,EAAD,CAEE92M,QAAS,CAAC3hE,KAAM2hE,EAAQ04sB,eACxBt2qB,MAAOy3S,EAAOz3S,MAHhB,SAKCvvF,EAAEgnY,EAAOjyX,QALV,UACUiyX,EAAOjyX,MADjB,YAC0B3kC,WAU1C,eAACw8b,EAAA,EAAD,UACGogW,GAAoBA,EAAiB/vxB,KAAI,SAAC+kR,EAAwB5xR,GAAzB,OACxC,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAA7C,SACGzvE,GAAWgqK,EAAyB/ub,KAAI,SAAC+pZ,GACxC,OAAQA,EAAO9xX,IACb,IAAK,GAAI,OAAO,eAAC,IAAD,CAAuC8sP,QAASA,GAAvBglI,EAAOjyX,OAChD,IAAK,eAAgB,OAAO,eAAC,IAAD,CAA6BtyB,KAAMu/Q,EAAQntQ,MAAMmyY,EAAOhpS,MAAOmmK,SAAQ,UAAKr6P,2BAAL,YAAiCk4P,EAAQhqR,IAAI,OAASipB,OAAO,UAArH+lY,EAAOjyX,OAClD,IAAK,eAAgB,OAAO,eAAC,IAAD,CAA6B+qF,KAAMkiK,EAAQntQ,MAAMmyY,EAAOhpS,MAAQgkK,EAAQntQ,MAAMmyY,EAAOhpS,MAAQ,KAA9EgpS,EAAOjyX,OAClD,IAAK,kBACL,IAAK,OACL,IAAK,iBACL,IAAK,UAIL,IAAK,YAEL,IAAK,gBAAiB,OAAO,eAAC,IAAD,CAA6B+qF,KAAMkiK,EAAQntQ,MAAMmyY,EAAOhpS,OAAzCgpS,EAAOjyX,OALnD,IAAK,cAAe,OAAO,eAAC,GAAD,CAAmC2xU,WAAY1kF,EAAQntQ,MAAMmyY,EAAOhpS,OAA/CgpS,EAAOjyX,OACvD,IAAK,WAAY,OAAO,eAAC,IAAD,CAA6B+qF,KAAM04M,YAAWx2C,EAAQntQ,MAAMmyY,EAAOhpS,QAApDgpS,EAAOjyX,OAC9C,IAAK,gBAAiB,OAAO,eAAC,IAAD,CAA6B+qF,KAAMopQ,GAAalnG,EAAQntQ,MAAMmyY,EAAOhpS,QAAtDgpS,EAAOjyX,OAEnD,IAAK,SAAU,OAAO,eAAC,IAAD,CAA+BitP,QAASA,GAAvBglI,EAAOjyX,OAE9C,IAAK,SAAU,OAAO,eAAC,GAAD,CAAsC7T,OAAQ8gQ,EAAQntQ,MAAMmyY,EAAOhpS,OAA3CgpS,EAAOjyX,OACrD,IAAK,UAAW,OAAO,eAAC,GAAD,CAAuCitP,QAASA,EAAS/hP,QAASA,EAASu9E,QAASA,EAASiU,WAAYA,GAAhFu1R,EAAOjyX,YAjB9B3kC,aAyBvC,eAACg9b,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpButa,aAAct5b,KAAK42b,iBACnB2C,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCC,oBAAqBx5b,KAAK62b,wBAC1Bzhb,MAAO0kxB,EAA8B9tvB,EAAQl+B,OAASk+B,EAAQy9E,MAAQ,EAAIz9E,EAAQl+B,QAAR,OAAiBirxB,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAkBh9xB,MAC7GqtmB,mBAAoB,gBAAGp6lB,EAAH,EAAGA,KAAMC,EAAT,EAASA,GAAT,gBAAqBD,EAArB,YAA6BC,IACjDwqb,YAAaztZ,EAAQy9E,MACrBmiJ,KAAMA,EACN8tL,iBAAkB,SAACy6V,GAAD,OAAqB,eAAC,IAAD,aAAwBC,iBAAiB,GAAUD,KAC1Fj7sB,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,wBAIvB,eAACC,EAAA,EAAD,CACE9rU,IACE,eAACq4R,GAAA,EAAD,CACE/qU,MAAM,MACNi2C,OAAO,MACPtrB,MAAO,CACL+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzC/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,MAEvCi5C,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,MAGjCqgS,aAAcm/B,EAAOn/B,aACrBC,kBAAmBk/B,EAAOl/B,wBAO3B,oBAAb/oD,GACA,eAAC,GAAD,CACE2je,4BAA6BA,EAC7BC,wBAAyBA,EACzBj4pB,WAAYA,EACZu7S,iBAAkBA,IAGtB,gBAAClgW,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAU26W,EAAmB,QAAU,GAJ3C,UAOiB,gBAAbtkI,GACA,eAAC6/C,EAAA,EAAD,CACE/uC,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,EACTu9E,QAASA,EACT8oP,uBAAwBryW,KAAKqyW,uBAC7BiD,UAAWt1W,KAAKgnC,MAAMwyvB,2BACtBvlb,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE42qB,2BAA4Bl1xB,OAGxD,oBAAbutT,GACA,eAAC,GAAD,CACE8Q,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBw6V,4BAA6B3wxB,KAAK44xB,4BAClCtjb,UAAWt1W,KAAKgnC,MAAMyyvB,+BACtBxlb,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE62qB,+BAAgCn1xB,UAI7E,gBAACu0E,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAUk9V,EAAoB,QAAU,GAJ5C,UAOiB,gBAAb7mH,GACA,eAAC,IAAD,CAEE0oH,WAAYz/Y,eAAa4+vB,wBACzB5gX,eAAgBm2W,GAAYiB,qBAC5Bn3W,iBAAkBA,EAClBF,gBAAiB,CAAC,WAClB58F,OAAQy8F,EACR/zS,QAAS3kI,KAAK24a,oBACdkB,oBAAqB75a,KAAK65a,qBAPrB/+Y,eAAa4+vB,yBAUP,oBAAb7ne,GACA,uCACI4je,GACA,eAAC,IAAD,CAEEl7W,WAAYz/Y,eAAa6+vB,yCACzB7gX,eAAgBm2W,GAAYkB,iCAC5Bp3W,iBAAkBA,EAClBF,gBAAiB,CAAC,WAClB58F,OAAQy8F,EACR/zS,QAAS3kI,KAAK24a,oBACdkB,oBAAqB75a,KAAK65a,qBAPrB/+Y,eAAa6+vB,2CAUnBlE,GACD,eAAC,IAAD,CAEEl7W,WAAYz/Y,eAAa8+vB,0CACzB9gX,eAAgBm2W,GAAYmB,kCAC5Br3W,iBAAkBA,EAClBF,gBAAiB,CAAC,WAClB58F,OAAQy8F,EACR/zS,QAAS3kI,KAAK24a,oBACdkB,oBAAqB75a,KAAK65a,qBAPrB/+Y,eAAa8+vB,2D,GA3rBZn1vB,aAivBXwwC,kBACbgG,aAt1Ba,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRx4C,aAAc,aACdisC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAO,OACPe,SAAU,EACVZ,cAAe,UAEjB28W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,OACR1J,UAAW3sC,EAAM6mD,QAAQ,GACzBta,aAAcvsC,EAAM4/C,MAAMrT,cAE5B0wU,iBAAkB,CAChB78W,MAAO,OACPi2C,OAAQ,MACRl1C,SAAU,EACVD,UAAW,OACXN,QAAS,QAEXimT,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACfC,eAAgB,SAChB61C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAKnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlBwxU,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,WAEZwvU,kBAAmB,CACjBxvU,SAAU,WA+xBO,CAAE2E,WAAW,IAChC7vE,YAAgB,gBAChBgwE,IACAtQ,mBA3BsB,SAACu7Q,EAAoBC,GAC3C,OAAO,eACFvnV,YAAyB,CACxBimvB,iBAAkBhukB,cAClB+ukB,4BAA6B7ukB,cAC7B4ukB,kBAAmB7ukB,cACnBhrH,OAAQh/C,eACRyI,SAAUs/E,cACV5tB,WAAYC,yBAAc41P,KAC1Bgpb,yBAA0B5+qB,yBAAcm1qB,IACxC/yqB,UAAWsB,eACXf,UAAWgB,eACXZ,OAAQa,eACRq6qB,mBAAoB/jpB,aAAqBx6G,eAAa4+vB,yBACtDlrqB,4BAA6B7mE,cAC7BqwpB,mBAAoBnwpB,eACpBsxuB,sCAAuC7jpB,aAAqBx6G,eAAa6+vB,0CACzEP,uCAAwC9jpB,aAAqBx6G,eAAa8+vB,2CAC1El0S,MAAOu0S,2BAhBRnnvB,CAiBAsnV,OA/BoB,SAACzvV,GAC1B,MAAO,CACLA,WACAumW,eAAgB,SAACllW,EAA0Bu9E,GACzC5+E,EAAS,IAAI2pE,KAAqB,CAChCtoE,UACAu9E,kBA6BOt0C,CAKbqjtB,K,4GCt9BW,EAAoB,IAAI,IAAI,CACrC,CAAC,MAAO,aACR,CAAC,MAAO,aACR,CAAC,MAAO,gBACR,CAAC,OAAQ,cACT,CAAC,MAAO,cACR,CAAC,MAAO,oBACR,CAAC,MAAO,mBACR,CAAC,MAAO,aACR,CAAC,MAAO,mBACR,CAAC,MAAO,aACR,CAAC,MAAO,mBACR,CAAC,MAAO,sBACR,CAAC,OAAQ,6EAIP,SAAU,EAAe,EAAoB,GAC7C,IAAI,EAkCV,SAAsB,GACX,MAAQ,EAAJ,KAGX,GAFqB,IAAmC,IAA3B,EAAK,YAAY,OAEzB,EAAK,KAAM,CAC5B,IAAM,EAAM,EAAK,MAAM,KAClB,MAAO,cACN,EAAO,EAAkB,IAAI,GAC/B,GACA,OAAO,eAAe,EAAM,OAAQ,CAChC,MAAO,EACP,UAAU,EACV,cAAc,EACd,YAAY,IAKxB,OAAO,EApDG,CAAa,GACrB,GAAoB,kBAAX,EAAE,KAAmB,CACrB,MAAsB,EAAJ,mBACrB,OAAG,eAAe,EAAG,OAAQ,CAC7B,MAAuB,kBAAT,EACR,EAI8B,kBAAvB,GAAmC,EAAmB,OAAS,EAClE,EACA,EAAK,KACf,UAAU,EACV,cAAc,EACd,YAAY,IAIpB,OAAO,ECjCX,IAAM,EAAkB,CAEpB,YACA,aAgBJ,SAAS4B,EAAUx+xB,GACf,QAASA,EAAMmuN,aAGnB,SAAS,EAAc,GAMnB,OAGJ,SAAiB,GACb,OAAiB,OAAV,EATO,CAAQ,EAAI,SACpB,EAAI,OAAO,MACP,EAAuB,EAAI,OAAO,OAEtC,IACO,KAAI,YAAQ,eAO7B,SAAe,EAAqB,EAAkB,G,2HAG9C,EAAG,OACG,EAAQ,EAA2B,EAAG,OACvC,QAAO,YAAQ,iBAAK,QAGZ,SAAT,EACmB,CAAC,EAAb,GAEG,GAAM,QAAQ,IAAI,EAAM,IAAI,MAR1C,M,OASA,SAAO,EAAe,EADR,Y,OAIR,MAAV,GAAO,EAAe,EAAuB,EAAG,OAC3C,KAAI,YAAQ,wBAGrB,SAAS,EAAe,GACpB,OAAO,EAAM,QAAO,YAAQ,aAAgB,QAAQ,EAAK,SAO7D,SAAS,EAAY,GAIjB,IAHA,IAAM,EAAQ,GAGL7mN,EAAI,EAAGA,EAAIgkQ,EAAMnlQ,OAAQmB,IAAK,CACnC,IAAM,EAAO,EAAM,GACnB26F,EAAMvxF,KAAKqnN,GAGf,OAAO,EAIX,SAAS,EAAe,GACpB,GAAqC,oBAA1B,EAAK,iBACZ,OAAO,EAAqB,GAGhC,IAAM,EAAQ,EAAK,mBAKnB,OAAI,GAAS,EAAM,YACR,EAAa,GAGjB,EAAqB,GAGhC,SAAS,EAAW,GAChB,OAAO,EAAM,QAAO,SAAC,EAAK,GAAU,mBAC7B,EACC,MAAM,QAAQ,GAAS,EAAQ,GAAS,CAFZ,MAGjC,IAGP,SAAS,EAAqB,GACxB,IAAI,EAAO,EAAK,YAChB,IAAG,EACD,OAAO,QAAQ,OAAU,EAAI,kBAEjC,IAAM,EAAM,EAAe,GAC3B,OAAO,QAAQ,QAAQ,GAI3B,SAAe,EAAU,G,uFACrB,SAAO,EAAM,YAAc,EAAa,GAAS,EAAc,UAInE,SAAS,EAAa,GAChB,IAAI,EAAS,EAAM,eAEnB,OAAK,IAAI,SAAqB,SAAC,EAAS,GAClC,IAAE,EAAkC,IAEpC,SAAK,IAAH,IAAN,OAGU,EAAC,aAAY,SAAO,GAAY,+C,yEAC7B,EAAM,OAAP,Y,iBAGkB,O,sBAAA,GAAM,QAAQ,IAAI,I,cAA1B,EAAQ,SACd,EAAQ,G,+BAER,EAAO,G,gCAGL,EAAQ,QAAQ,IAAI,EAAM,IAAI,IACpC,EAAQ,KAAK,GAGb,I,qCAEL,SAAC,GACA,EAAO,MAIX,MAKZ,SAAe,EAAc,G,uFACzB,SAAO,IAAI,SAAsB,SAAC,EAAS,GACvC,EAAM,MAAK,SAAC,GACR,IAAM,EAAM,EAAe,EAAM,EAAM,UACvC,EAAQ,MACT,SAAC,GACU,EAAH,gB,uBC7JnB,SAAStgL,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,GAAsB,qBAAXtD,UAA4BA,OAAOC,YAAYvB,OAAOyP,IAAO,OAAQ,IAAIoke,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAWgsB,OAAKt/P,EAAW,IAAM,IAAK,IAAiCk2e,EAA7Bx9Z,EAAK3mE,EAAInO,OAAOC,cAAmBuye,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAAtL,QAAuM,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,EARjaE,CAAsBtke,EAAK7K,IAI5F,SAAqCmD,EAAGuie,GAAU,IAAKvie,EAAG,OAAQ,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAc,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAM,GAAU,QAANpI,GAAqB,QAANA,EAAa,OAAO3E,MAAMuN,KAAK7I,GAAI,GAAU,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAI,OAAOuie,EAAkBxie,EAAGuie,GAJpTE,CAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAMzI,SAASzJ,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAQzK,IAKIm3iB,EAA6B,SAAoCnne,GAC1EA,EAASvxT,MAAMC,QAAQsxT,IAA6B,IAAlBA,EAAOnxT,OAAemxT,EAAO,GAAKA,EACpE,IAAIone,EAAgB34xB,MAAMC,QAAQsxT,GAAU,UAAU1nT,OAAO0nT,EAAOvxS,KAAK,OAASuxS,EAClF,MAAO,CACLhrN,KAT2B,oBAU3B32D,QAAS,qBAAqB/lC,OAAO8uxB,KAG9BC,EAA0B,SAAiCh+O,GACpE,MAAO,CACLr0c,KAdwB,iBAexB32D,QAAS,uBAAuB/lC,OAAO+wiB,EAAS,YAGzCi+O,EAA0B,SAAiCC,GACpE,MAAO,CACLvyrB,KAnBwB,iBAoBxB32D,QAAS,wBAAwB/lC,OAAOivxB,EAAS,YAG1CC,EAA2B,CACpCxyrB,KAvB0B,iBAwB1B32D,QAAS,kBAIJ,SAASopvB,EAAahnkB,EAAMu/F,GACjC,IAAI0ne,EAA6B,2BAAdjnkB,EAAKvzN,MAAqCy6xB,IAAQlnkB,EAAMu/F,GAC3E,MAAO,CAAC0ne,EAAcA,EAAe,KAAOP,EAA2Bnne,IAElE,SAAS4ne,EAAcnnkB,EAAM8mkB,EAASl+O,GAC3C,GAAIvzI,EAAUr1M,EAAK13N,MACjB,GAAI+sa,EAAUyxX,IAAYzxX,EAAUuzI,GAAU,CAC5C,GAAI5oV,EAAK13N,KAAOsgjB,EAAS,MAAO,EAAC,EAAOg+O,EAAwBh+O,IAChE,GAAI5oV,EAAK13N,KAAOw+xB,EAAS,MAAO,EAAC,EAAOD,EAAwBC,QAC3D,IAAIzxX,EAAUyxX,IAAY9mkB,EAAK13N,KAAOw+xB,EAAS,MAAO,EAAC,EAAOD,EAAwBC,IAAe,GAAIzxX,EAAUuzI,IAAY5oV,EAAK13N,KAAOsgjB,EAAS,MAAO,EAAC,EAAOg+O,EAAwBh+O,IAGpM,MAAO,EAAC,EAAM,MAGhB,SAASvzI,EAAUpta,GACjB,YAAiBI,IAAVJ,GAAiC,OAAVA,EAGzB,SAASm/xB,EAAiBx0vB,GAC/B,IAAIs3D,EAAQt3D,EAAKs3D,MACbq1N,EAAS3sR,EAAK2sR,OACdune,EAAUl0vB,EAAKk0vB,QACfl+O,EAAUh2gB,EAAKg2gB,QACf17b,EAAWt6E,EAAKs6E,SAChBm6qB,EAAWz0vB,EAAKy0vB,SAEpB,SAAKn6qB,GAAYhjB,EAAM97F,OAAS,GAAK8+G,GAAYm6qB,GAAY,GAAKn9rB,EAAM97F,OAASi5xB,IAI1En9rB,EAAMpwF,OAAM,SAAUkmN,GAC3B,IAEIsnkB,EADiB5nvB,EADDsnvB,EAAahnkB,EAAMu/F,GACY,GACrB,GAI1Bgoe,EADkB7nvB,EADDynvB,EAAcnnkB,EAAM8mkB,EAASl+O,GACG,GACrB,GAEhC,OAAO0+O,GAAYC,KAMhB,SAASC,EAAqB9zpB,GACnC,MAA0C,oBAA/BA,EAAM8zpB,qBACR9zpB,EAAM8zpB,uBAC0B,qBAAvB9zpB,EAAM+zpB,cACf/zpB,EAAM+zpB,aAKV,SAASC,EAAeh0pB,GAC7B,OAAKA,EAAM0iF,aAMJpoN,MAAMtD,UAAUsP,KAAKzM,KAAKmmI,EAAM0iF,aAAal6C,OAAO,SAAUzvK,GACnE,MAAgB,UAATA,GAA6B,2BAATA,OANlBinI,EAAMn6G,UAAYm6G,EAAMn6G,OAAO2wE,MAarC,SAASy9rB,EAAmBj0pB,GACjCA,EAAM/F,iBAGR,SAASi6pB,EAAKlqlB,GACZ,OAAsC,IAA/BA,EAAU3wL,QAAQ,UAAqD,IAAnC2wL,EAAU3wL,QAAQ,YAG/D,SAAS86wB,EAAOnqlB,GACd,OAAuC,IAAhCA,EAAU3wL,QAAQ,SAGpB,SAAS+6wB,IACd,IAAIpqlB,EAAYztM,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAKgrB,OAAOsiL,UAAUG,UACrG,OAAOkqlB,EAAKlqlB,IAAcmqlB,EAAOnqlB,GAa5B,SAASqqlB,IACd,IAAK,IAAIzwwB,EAAOrnB,UAAU7B,OAAQ45xB,EAAM,IAAIh6xB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC9EwwwB,EAAIxwwB,GAAQvnB,UAAUunB,GAGxB,OAAO,SAAUk8G,GACf,IAAK,IAAI96G,EAAQ3oB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAM4qB,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACxGtB,EAAKsB,EAAQ,GAAK5oB,UAAU4oB,GAG9B,OAAOmvwB,EAAIhuxB,MAAK,SAAU5K,GAKxB,OAJKo4xB,EAAqB9zpB,IAAUtkI,GAClCA,EAAGoF,WAAM,EAAQ,CAACk/H,GAAO77H,OAAO0f,IAG3BiwwB,EAAqB9zpB,OC/JlC,SAASxnC,EAAmB9xF,GAAO,OAMnC,SAA4BA,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO86d,EAAkB96d,GAN1CouQ,CAAmBpuQ,IAI7D,SAA0BhS,GAAQ,GAAsB,qBAAX6D,QAA0BA,OAAOC,YAAYvB,OAAOvC,GAAO,OAAO4F,MAAMuN,KAAKnT,GAJrDqgR,CAAiBruQ,IAAQ+6d,EAA4B/6d,IAE1H,WAAgC,MAAM,IAAIxL,UAAU,wIAF8E85Q,GAQlI,SAAShpO,EAAetlC,EAAK7K,GAAK,OAUlC,SAAyB6K,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,OAAOA,EAVtBkke,CAAgBlke,IAQzD,SAA+BA,EAAK7K,GAAK,GAAsB,qBAAXtD,UAA4BA,OAAOC,YAAYvB,OAAOyP,IAAO,OAAQ,IAAIoke,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAWgsB,OAAKt/P,EAAW,IAAM,IAAK,IAAiCk2e,EAA7Bx9Z,EAAK3mE,EAAInO,OAAOC,cAAmBuye,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAAtL,QAAuM,IAAW8gc,GAAsB,MAAhB19Z,EAAE,QAAoBA,EAAE,SAAzC,QAAmE,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,EARjaE,CAAsBtke,EAAK7K,IAAM4le,EAA4B/6d,EAAK7K,IAEnI,WAA8B,MAAM,IAAIX,UAAU,6IAFuF+ve,GAIzI,SAASxJ,EAA4Bzie,EAAGuie,GAAU,GAAKvie,EAAL,CAAgB,GAAiB,kBAANA,EAAgB,OAAOwie,EAAkBxie,EAAGuie,GAAS,IAAItie,EAAIhI,OAAOD,UAAU8C,SAASD,KAAKmF,GAAG2J,MAAM,GAAI,GAAiE,MAAnD,WAAN1J,GAAkBD,EAAE7H,cAAa8H,EAAID,EAAE7H,YAAYkQ,MAAgB,QAANpI,GAAqB,QAANA,EAAoB3E,MAAMuN,KAAK7I,GAAc,cAANC,GAAqB,2CAA2C20C,KAAK30C,GAAWuie,EAAkBxie,EAAGuie,QAAzG,GAE7S,SAASC,EAAkB96d,EAAKE,IAAkB,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAAQ,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAMhL,SAASt2N,EAAQvoB,EAAQwoB,GAAkB,IAAI7qB,EAAO1D,OAAO0D,KAAKqC,GAAS,GAAI/F,OAAOkgB,sBAAuB,CAAE,IAAIsO,EAAUxuB,OAAOkgB,sBAAsBna,GAAawoB,IAAgBC,EAAUA,EAAQrhB,QAAO,SAAUshB,GAAO,OAAOzuB,OAAO0uB,yBAAyB3oB,EAAQ0oB,GAAK/kB,eAAgBhG,EAAKsK,KAAKnE,MAAMnG,EAAM8qB,GAAY,OAAO9qB,EAE9U,SAASk2C,EAAchrB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAAyB,MAAhBvpB,UAAUV,GAAaU,UAAUV,GAAK,GAAQA,EAAI,EAAK0pB,EAAQtuB,OAAO6uB,IAAS,GAAMvgB,SAAQ,SAAUpI,GAAO0wE,EAAgBhoD,EAAQ1oB,EAAK2oB,EAAO3oB,OAAsBlG,OAAO8uB,0BAA6B9uB,OAAO+uB,iBAAiBH,EAAQ5uB,OAAO8uB,0BAA0BD,IAAmBP,EAAQtuB,OAAO6uB,IAASvgB,SAAQ,SAAUpI,GAAOlG,OAAOyJ,eAAemlB,EAAQ1oB,EAAKlG,OAAO0uB,yBAAyBG,EAAQ3oB,OAAe,OAAO0oB,EAE7gB,SAASgoD,EAAgBluE,EAAKxC,EAAK5I,GAAiK,OAApJ4I,KAAOwC,EAAO1I,OAAOyJ,eAAef,EAAKxC,EAAK,CAAE5I,MAAOA,EAAOoM,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBlB,EAAIxC,GAAO5I,EAAgBoL,EAE3M,SAASo2C,EAAyBjwB,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAAkE3oB,EAAKtB,EAAnEgqB,EAEzF,SAAuCC,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAA2D3oB,EAAKtB,EAA5DgqB,EAAS,GAAQgvP,EAAa59Q,OAAO0D,KAAKmrB,GAAqB,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IAAOsB,EAAM03Q,EAAWh5Q,GAAQwiM,EAAShlL,QAAQlc,IAAQ,IAAa0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAQ,OAAO0oB,EAFxM0c,CAA8Bzc,EAAQu4K,GAAuB,GAAIpnM,OAAOkgB,sBAAuB,CAAE,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAAS,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IAAOsB,EAAMmhM,EAAiBziM,GAAQwiM,EAAShlL,QAAQlc,IAAQ,GAAkBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KAAgB0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAU,OAAO0oB,EAwBne,IAAI0uwB,EAAwBnyvB,sBAAW,SAAUlD,EAAM5qC,GACrD,IAAI6qC,EAAWD,EAAKC,SAGhBq1vB,EAAexc,EAFNjiuB,EAAyB7W,EAAM,CAAC,cAGzCskE,EAAOgxrB,EAAahxrB,KACpBzgE,EAAQgT,EAAyBy+uB,EAAc,CAAC,SAQpD,OANAh2H,8BAAoBlqqB,GAAK,WACvB,MAAO,CACLkvG,KAAMA,KAEP,CAACA,IAEgBlmE,IAAMwB,cAAcskP,WAAU,KAAMjkP,EAAS0R,EAAcA,EAAc,GAAI9N,GAAQ,GAAI,CAC3GygE,KAAMA,SAGV+wrB,EAASnzwB,YAAc,WAEvB,IAAIk5F,EAAe,CACjBvE,UAAU,EACV0+qB,kBFxDI,SAA0B,G,uFACtB,MAAN,GAAO,EAAU,IAAQ,EAAI,aACvB,EAAqB,EAAI,aAAc,EAAI,MAC3C,EAAc,WEsDtBv/O,QAASv/iB,IACTy9xB,QAAS,EACT55qB,UAAU,EACVm6qB,SAAU,EACVe,uBAAuB,EACvBC,SAAS,EACTC,YAAY,EACZC,QAAQ,EACRC,sBAAsB,GAExBP,EAASj6qB,aAAeA,EACxBi6qB,EAAS58gB,UAAY,CAiBnBx4O,SAAUy4O,IAAU70P,KAUpB8oS,OAAQj0C,IAAUC,UAAU,CAACD,IAAUx4Q,OAAQw4Q,IAAU4/Y,QAAQ5/Y,IAAUx4Q,UAK3Eo6G,SAAUo+J,IAAU99H,KAKpB46oB,sBAAuB98gB,IAAU99H,KAKjC66oB,QAAS/8gB,IAAU99H,KAMnB86oB,WAAYh9gB,IAAU99H,KAKtB+6oB,OAAQj9gB,IAAU99H,KAKlBg7oB,qBAAsBl9gB,IAAU99H,KAKhCs5oB,QAASx7gB,IAAUvkG,OAKnB6hY,QAASt9R,IAAUvkG,OAMnBsgnB,SAAU/7gB,IAAUvkG,OAKpBt9D,SAAU6hK,IAAU99H,KAOpB26oB,kBAAmB78gB,IAAU70P,KAK7BgywB,mBAAoBn9gB,IAAU70P,KAO9BiywB,YAAap9gB,IAAU70P,KAOvBkywB,YAAar9gB,IAAU70P,KAOvBk7T,WAAYrmE,IAAU70P,KAgCtBoirB,OAAQvtb,IAAU70P,KASlBimV,eAAgBpxF,IAAU70P,KAS1BmywB,eAAgBt9gB,IAAU70P,MAEbwxwB,UAiEX15L,EAAe,CACjBjse,WAAW,EACXumqB,oBAAoB,EACpBld,cAAc,EACdmd,cAAc,EACdC,cAAc,EACdC,aAAc,GACdxd,cAAe,GACfC,eAAgB,IA2EX,SAASC,IACd,IAAInzuB,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE9Eg5xB,EAAwB1kvB,EAAcA,EAAc,GAAIypE,GAAez1E,GACvEgnR,EAAS0pe,EAAsB1pe,OAC/B91M,EAAWw/qB,EAAsBx/qB,SACjC0+qB,EAAoBc,EAAsBd,kBAC1Cv/O,EAAUqgP,EAAsBrgP,QAChCk+O,EAAUmC,EAAsBnC,QAChC55qB,EAAW+7qB,EAAsB/7qB,SACjCm6qB,EAAW4B,EAAsB5B,SACjCqB,EAAcO,EAAsBP,YACpCC,EAAcM,EAAsBN,YACpCh3c,EAAas3c,EAAsBt3c,WACnCknX,EAASowF,EAAsBpwF,OAC/Bn8V,EAAiBusb,EAAsBvsb,eACvCksb,EAAiBK,EAAsBL,eACvCH,EAAqBQ,EAAsBR,mBAC3CL,EAAwBa,EAAsBb,sBAC9CC,EAAUY,EAAsBZ,QAChCC,EAAaW,EAAsBX,WACnCC,EAASU,EAAsBV,OAC/BC,EAAuBS,EAAsBT,qBAE7CrvY,EAAU1hX,iBAAO,MACjBq2R,EAAWr2R,iBAAO,MAElBH,EAAcC,qBAAW9oB,EAAS8/kB,GAClC26L,EAAexpvB,EAAepI,EAAa,GAC3C/D,EAAQ21vB,EAAa,GACrBhyvB,EAAWgyvB,EAAa,GAExB5mqB,EAAY/uF,EAAM+uF,UAClBumqB,EAAqBt1vB,EAAMs1vB,mBAC3BG,EAAez1vB,EAAMy1vB,aAErBG,EAAiB1zqB,uBAAY,WAC3Bq4M,EAASz5R,UACX6C,EAAS,CACPzqC,KAAM,eAERqhU,EAASz5R,QAAQpsC,MAAQ,KACzB6lU,EAASz5R,QAAQ0mkB,WAElB,CAAC7jkB,IAEAkyvB,EAAgB,WAEdP,GACFzjvB,YAAW,WACL0oR,EAASz5R,UACCy5R,EAASz5R,QAAQ61D,MAElB97F,SACT8oC,EAAS,CACPzqC,KAAM,gBAG0B,oBAAvBg8xB,GACTA,QAIL,MAIP/1vB,qBAAU,WAER,OADAzX,OAAOs6E,iBAAiB,QAAS6zrB,GAAe,GACzC,WACLnuwB,OAAOu6E,oBAAoB,QAAS4zrB,GAAe,MAEpD,CAACt7d,EAAU+6d,EAAoBJ,IAElC,IAAIY,EAAc5zqB,uBAAY,SAAUie,GAEjCylR,EAAQ9kX,SAAY8kX,EAAQ9kX,QAAQi1vB,YAAY51pB,EAAMn6G,UAIrC,KAAlBm6G,EAAM23K,SAAoC,KAAlB33K,EAAM23K,UAChC33K,EAAM/F,iBACNw7pB,QAED,CAAChwY,EAASrrF,IAETy7d,EAAY9zqB,uBAAY,WAC1Bv+E,EAAS,CACPzqC,KAAM,YAEP,IACC+8xB,EAAW/zqB,uBAAY,WACzBv+E,EAAS,CACPzqC,KAAM,WAEP,IAECg9xB,EAAYh0qB,uBAAY,WACtB4yqB,IAOAP,IACF1ivB,WAAW+jvB,EAAgB,GAE3BA,OAED,CAACr7d,EAAUu6d,IACVqB,GAAiBjyvB,iBAAO,IAExBkyvB,GAAiB,SAAwBj2pB,GACvCylR,EAAQ9kX,SAAW8kX,EAAQ9kX,QAAQliB,SAASuhH,EAAMn6G,UAKtDm6G,EAAM/F,iBACN+7pB,GAAer1vB,QAAU,KAG3B3B,qBAAU,WAMR,OALI01vB,IACF71vB,SAASgjE,iBAAiB,WAAYoyrB,GAAoB,GAC1Dp1vB,SAASgjE,iBAAiB,OAAQo0rB,IAAgB,IAG7C,WACDvB,IACF71vB,SAASijE,oBAAoB,WAAYmyrB,GACzCp1vB,SAASijE,oBAAoB,OAAQm0rB,QAGxC,CAACxwY,EAASivY,IACb,IAAIwB,GAAgBn0qB,uBAAY,SAAUie,GACxCA,EAAM/F,iBAEN+F,EAAMC,UACNljB,GAAgBijB,GAChBg2pB,GAAer1vB,QAAU,GAAGx8B,OAAOq0F,EAAmBw9rB,GAAer1vB,SAAU,CAACq/F,EAAMn6G,SAElFmuwB,EAAeh0pB,IACjBloF,QAAQC,QAAQ08uB,EAAkBz0pB,IAAQ5wD,MAAK,SAAUkmtB,GACnDxB,EAAqB9zpB,KAAW80pB,IAIpCtxvB,EAAS,CACP8xvB,aAAcA,EACdrd,cAAc,EACdl/wB,KAAM,oBAGJi8xB,GACFA,EAAYh1pB,SAIjB,CAACy0pB,EAAmBO,EAAaF,IAChCqB,GAAep0qB,uBAAY,SAAUie,GAKvC,GAJAA,EAAM/F,iBACN+F,EAAMC,UACNljB,GAAgBijB,GAEZA,EAAM0iF,aACR,IACE1iF,EAAM0iF,aAAa0zkB,WAAa,OAChC,MAAOC,IASX,OAJIrC,EAAeh0pB,IAAUi+M,GAC3BA,EAAWj+M,IAGN,IACN,CAACi+M,EAAY62c,IACZwB,GAAgBv0qB,uBAAY,SAAUie,GACxCA,EAAM/F,iBACN+F,EAAMC,UACNljB,GAAgBijB,GAEhB,IAAIu2pB,EAAUP,GAAer1vB,QAAQv8B,QAAO,SAAUyhB,GACpD,OAAO4/X,EAAQ9kX,SAAW8kX,EAAQ9kX,QAAQliB,SAASoH,MAIjD2wwB,EAAYD,EAAQl9wB,QAAQ2mH,EAAMn6G,SAEnB,IAAf2wwB,GACFD,EAAQtuxB,OAAOuuxB,EAAW,GAG5BR,GAAer1vB,QAAU41vB,EAErBA,EAAQ77xB,OAAS,IAIrB8oC,EAAS,CACPy0uB,cAAc,EACdl/wB,KAAM,kBACNu8xB,aAAc,KAGZtB,EAAeh0pB,IAAUi1pB,GAC3BA,EAAYj1pB,MAEb,CAACylR,EAASwvY,EAAaH,IACtB2B,GAAW10qB,uBAAY,SAAUie,GACnCA,EAAM/F,iBAEN+F,EAAMC,UACNljB,GAAgBijB,GAChBg2pB,GAAer1vB,QAAU,GAErBqzvB,EAAeh0pB,IACjBloF,QAAQC,QAAQ08uB,EAAkBz0pB,IAAQ5wD,MAAK,SAAUonB,GACvD,IAAIs9rB,EAAqB9zpB,IAAW80pB,EAApC,CAIA,IAAIhd,EAAgB,GAChBC,EAAiB,GACrBvhrB,EAAMjxF,SAAQ,SAAU+mN,GACtB,IACIoqkB,EAAiB1qvB,EADDsnvB,EAAahnkB,EAAMu/F,GACY,GAC/C+ne,EAAW8C,EAAe,GAC1BC,EAAcD,EAAe,GAG7BE,EAAkB5qvB,EADDynvB,EAAcnnkB,EAAM8mkB,EAASl+O,GACG,GACjD2+O,EAAY+C,EAAgB,GAC5BC,EAAYD,EAAgB,GAEhC,GAAIhD,GAAYC,EACd/b,EAAc7ywB,KAAKqnN,OACd,CACL,IAAI1mE,EAAS,CAAC+woB,EAAaE,GAAWzyxB,QAAO,SAAUnD,GACrD,OAAOA,KAET82wB,EAAe9ywB,KAAK,CAClBqnN,KAAMA,EACN1mE,OAAQA,UAKTpsC,GAAYs+pB,EAAcp9wB,OAAS,GAAK8+G,GAAYm6qB,GAAY,GAAK7b,EAAcp9wB,OAASi5xB,KAE/F7b,EAAcvywB,SAAQ,SAAU+mN,GAC9ByrjB,EAAe9ywB,KAAK,CAClBqnN,KAAMA,EACN1mE,OAAQ,CAACytoB,QAGbvb,EAAc7vwB,OAAO,IAGvBu7B,EAAS,CACPs0uB,cAAeA,EACfC,eAAgBA,EAChBh/wB,KAAM,aAGJossB,GACFA,EAAO2yE,EAAeC,EAAgB/3oB,GAGpC+3oB,EAAer9wB,OAAS,GAAKw6xB,GAC/BA,EAAend,EAAgB/3oB,GAG7B83oB,EAAcp9wB,OAAS,GAAKsuW,GAC9BA,EAAe8ua,EAAe93oB,OAKpCx8F,EAAS,CACPzqC,KAAM,YAEP,CAACygH,EAAUqyM,EAAQune,EAASl+O,EAASy+O,EAAUc,EAAmBtvF,EAAQn8V,EAAgBksb,EAAgBJ,IAEzGgC,GAAiB,SAAwBp7xB,GAC3C,OAAOq6G,EAAW,KAAOr6G,GAGvBq7xB,GAAyB,SAAgCr7xB,GAC3D,OAAOk5xB,EAAa,KAAOkC,GAAep7xB,IAGxCs7xB,GAAqB,SAA4Bt7xB,GACnD,OAAOm5xB,EAAS,KAAOiC,GAAep7xB,IAGpCqhH,GAAkB,SAAyBijB,GACzC80pB,GACF90pB,EAAMjjB,mBAIN4sP,GAAetqU,mBAAQ,WACzB,OAAO,WACL,IAAImC,EAAQjlC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E06xB,EAAez1vB,EAAMo+X,OACrBA,OAA0B,IAAjBq3X,EAA0B,MAAQA,EAC3Cj9pB,EAAYx4F,EAAMw4F,UAClBp4B,EAAUpgE,EAAMogE,QAChB28B,EAAS/8F,EAAM+8F,OACf7gB,EAAUl8E,EAAMk8E,QAChBs3qB,EAAcxzvB,EAAMwzvB,YACpB/2c,EAAaz8S,EAAMy8S,WACnBg3c,EAAczzvB,EAAMyzvB,YACpB9vF,EAAS3jqB,EAAM2jqB,OACfhorB,EAAO44B,EAAyBvU,EAAO,CAAC,SAAU,YAAa,UAAW,SAAU,UAAW,cAAe,aAAc,cAAe,WAE/I,OAAOqP,EAAcA,EAAcg9B,EAAgB,CACjDmsD,UAAW+8pB,GAAuB1C,EAAqBr6pB,EAAW27pB,IAClE/zrB,QAASm1rB,GAAuB1C,EAAqBzyrB,EAASi0rB,IAC9Dt3pB,OAAQw4pB,GAAuB1C,EAAqB91pB,EAAQu3pB,IAC5Dp4qB,QAASo5qB,GAAezC,EAAqB32qB,EAASq4qB,IACtDf,YAAagC,GAAmB3C,EAAqBW,EAAakB,KAClEj4c,WAAY+4c,GAAmB3C,EAAqBp2c,EAAYk4c,KAChElB,YAAa+B,GAAmB3C,EAAqBY,EAAaqB,KAClEnxF,OAAQ6xF,GAAmB3C,EAAqBlvF,EAAQsxF,MACvD72X,EAAQna,GAAW1vS,GAAa6+qB,EAE/B,GAF4C,CAC9Cz3pB,SAAU,IACHhgH,MAEV,CAACsoY,EAASkwY,EAAaE,EAAWC,EAAUC,EAAWG,GAAeC,GAAcG,GAAeG,GAAU7B,EAAYC,EAAQ9+qB,IAChImhrB,GAAsBn1qB,uBAAY,SAAUie,GAC9CA,EAAMjjB,oBACL,IACC6sP,GAAgBvqU,mBAAQ,WAC1B,OAAO,WACL,IAAIiJ,EAAQ/rC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5E46xB,EAAe7uvB,EAAMs3X,OACrBA,OAA0B,IAAjBu3X,EAA0B,MAAQA,EAC3C9irB,EAAW/rE,EAAM+rE,SACjBqJ,EAAUp1E,EAAMo1E,QAChBvgG,EAAO44B,EAAyBzN,EAAO,CAAC,SAAU,WAAY,YAE9DkqE,EAAa3kC,EAAgB,CAC/Bg+O,OAAQA,EACRryM,SAAUA,EACVzgH,KAAM,OACNo7G,MAAO,CACLlgC,QAAS,QAEXogC,SAAUyirB,GAAezC,EAAqBhgrB,EAAUoirB,KACxD/4qB,QAASo5qB,GAAezC,EAAqB32qB,EAASw5qB,KACtD1/qB,aAAc,MACd2lB,UAAW,GACVyiS,EAAQxlG,GAEX,OAAOvpR,EAAcA,EAAc,GAAI2hE,GAAar1F,MAErD,CAACi9S,EAAUvO,EAAQryM,EAAUi9qB,GAAU1grB,IACtCqhrB,GAAY9B,EAAa56xB,OACzB06xB,GAAegC,GAAY,GAAK1D,EAAiB,CACnDl9rB,MAAO8+rB,EACPzpe,OAAQA,EACRune,QAASA,EACTl+O,QAASA,EACT17b,SAAUA,EACVm6qB,SAAUA,IAER0B,GAAe+B,GAAY,IAAMhC,GACrC,OAAOvkvB,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDu1vB,aAAcA,GACdC,aAAcA,GACdzmqB,UAAWA,IAAc7Y,EACzB4zP,aAAcA,GACdC,cAAeA,GACf67C,QAASA,EACTrrF,SAAUA,EACV52N,KAAMszrB,GAAerB,KAIzB,SAAS16wB,EAAQ8kB,EAAO9b,GAEtB,OAAQA,EAAOhrB,MACb,IAAK,QACH,OAAO83C,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjD+uF,WAAW,IAGf,IAAK,OACH,OAAO/9E,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjD+uF,WAAW,IAGf,IAAK,aACH,OAAO/9E,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDs1vB,oBAAoB,IAGxB,IAAK,cACH,OAAOtkvB,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDs1vB,oBAAoB,IAGxB,IAAK,kBAEH,IAAIld,EAAel0vB,EAAOk0vB,aACtBqd,EAAevxwB,EAAOuxwB,aAC1B,OAAOzkvB,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDy1vB,aAAcA,EACdrd,aAAcA,IAGlB,IAAK,WACH,OAAOpnuB,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDi4uB,cAAe/zvB,EAAO+zvB,cACtBC,eAAgBh0vB,EAAOg0vB,iBAG3B,IAAK,QACH,OAAOlnuB,EAAcA,EAAc,GAAIhR,GAAQ,GAAI,CACjDs1vB,oBAAoB,EACpBld,cAAc,EACdqd,aAAc,GACdxd,cAAe,GACfC,eAAgB,KAGpB,QACE,OAAOl4uB,K,0dCryBPwoF,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5CsjtB,gBAAiB,CACbvltB,WAAY,YAEhBwltB,oBAAqB,CACjBxhrB,SAAU,QACVziG,MAAO0gE,EAAMZ,QAAQ,GACrBg6C,IAAKp5C,EAAMZ,QAAQ,OACnB0mD,OAAQ9lD,EAAM8lD,OAAOk5O,OACrBjhS,WAAY,YAEhByltB,mBAAoB,CAChB,UAAW,CACP15qB,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,OAG/Cw5qB,eAAgB,CACZ7itB,QAASZ,EAAMZ,QAAQ,IAE3B+2oB,mBAAoB,CAChBp0mB,SAAU,WACVqX,IAAKp5C,EAAMZ,QAAQ,GACnB9/D,MAAO0gE,EAAMZ,QAAQ,IAEzBsktB,sBAAuB,CACnBtirB,UAAWphC,EAAMZ,QAAQ,IAE7BuktB,0BAA2B,CACvBr9qB,YAAatmC,EAAMZ,QAAQ,GAC3Bm8C,WAAY,UAEhBwhmB,aAAc,CACVz2mB,YAAatmC,EAAMZ,QAAQ,QAwFpBwktB,EApFM,SAAC,GAIf,IAHH/wgB,EAGE,EAHFA,QACA56J,EAEE,EAFFA,SACS+T,EACP,EADFvC,QAEA,EAAkD+hQ,cAA1Cq4Z,EAAR,EAAQA,qBAAsBC,EAA9B,EAA8BA,gBACxB9ltB,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF2oW,EAA0C,SAA1B3mG,EAAQhqR,IAAI,UAC5BmyG,EAAY63K,EAAQhqR,IAAI,MACxB0lD,EAAW/X,sBAAYq3F,eACvBp+F,EAAW2F,wBAUX2uvB,EAAgBvtvB,sBAAYiX,eAC5BmtF,EAAepkG,sBAAYgkG,eAC3BmI,EAAI,OAAG/H,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,QAC/B,OACI,eAAC4sR,EAAA,EAAD,CACIhmL,KAAMttG,QAAQ81H,GACdwR,QAASuC,EACT/T,SAAUA,EAHd,UAKI,eAAC5W,EAAA,EAAD,CACIsI,QAlBc,WACtB,IAAMq6qB,EAAWxqa,EAAgB/8V,yBAAyBF,oBAC1DwxG,YAAW,CACPjf,SAAS,GAAD,OAAKk1qB,EAAL,YAAiBhprB,GACzBvrE,WACA8e,YAHJw/E,MAiBQvtI,MAAM,OAFV,UAII,cAAC,IAAD,CAAiB09E,UAAWF,EAAQ++oB,aAAc9wmB,SAAS,UAC1Dp7F,EAAE,wCAEP,eAACwwF,EAAA,EAAD,CACI7gH,MAAM,YACNmpH,QAAS,WACLqiB,IA5BS,SAAChxB,GAAsBvrE,EAAS,IAAIilE,IAAuB,CAAEsG,eA6BtE86R,CAAiBjjH,EAAQhqR,IAAI,OAC7B4mC,EAAS,IAAI4J,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEhf,OAAQa,EAAE,8BAA+Bu4O,aAAcypB,EAAQhqR,IAAI,YAChJ4mC,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIijO,mBACJv5J,MAAM,MARlB,UAYI,cAAC,IAAD,CAAcvxB,UAAWF,EAAQ++oB,aAAc9wmB,SAAS,UACvDp7F,EAAE,6CAEP,eAACwwF,EAAA,EAAD,CACI7gH,MAAM,SACNmpH,QAAS,WACLk6qB,GAAqB,SAAAznxB,GAAI,OAAKA,KAC9B4vH,KAJR,UAOI,cAAC,IAAD,CAAY9tD,UAAWF,EAAQ++oB,aAAc9wmB,SAAS,UACrDp7F,EAAE,0CAGHkzwB,EAAgB,cAACh1qB,EAAA,EAAD,CAASC,MAAO2zB,EAAO9xH,EAAE,oCAAsC,GAA/D,SACA,+BACE,eAACwwF,EAAA,EAAD,CACI7gH,MAAM,MACN49E,UAAU,IACVurC,QAAS,WACPm6qB,GAAgB,SAAA1nxB,GAAI,OAAKA,KACzB4vH,KAEFhqB,SAAU2gC,EAPd,UASE,cAAC,IAAD,CAAyBzkE,UAAWF,EAAQ++oB,aAAc9wmB,SAAS,UAChEp7F,EAAE,wCAGZ,S,wCCnFvByjG,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C1B,UAAW,CACPsC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7B0qC,gBAAiB,WAErBw5qB,gBAAiB,CACbvltB,WAAY,YAEhByltB,mBAAoB,CAChB,UAAW,CACP15qB,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,OAG/Cs2e,SAAU,CACNj6e,YAAatmC,EAAMZ,QAAQ,IAE/B60pB,oBAAqB,CACjBjnnB,WAAY,EACZ1G,YAAa,OA0NN29qB,GA/MwC,SAAC,GAIjD,IAAD,EAHF3vD,EAGE,EAHFA,aACAzhd,EAEE,EAFFA,QACAhrK,EACE,EADFA,UAEQq8qB,EAAiC14Z,cAAjC04Z,6BAEFlmtB,GADQwlD,cACElP,MACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX4lE,EAAY63K,EAAQhqR,IAAI,MACxBo1Y,EAAY,UAAGprH,EAAQhqR,IAAI,gBAAf,QAA2BkU,iBACvCwxC,EAAW/X,sBAAYq3F,eACvB4kJ,EAA0Bj8O,sBAAYg7K,YAA4B,KAClEgoK,EAA0C,SAA1B3mG,EAAQhqR,IAAI,UAC5BmoR,EAAc6B,EAAQhqR,IAAI,SAAW,GACrC+xI,EAAepkG,sBAAYgkG,eAC3Bxa,EAAc,OAAG4a,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,MACnC85I,EAAI,OAAG/H,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,QACzBi9L,EAAQtvJ,sBAAYkvJ,eACpBy+lB,EAAyB3tvB,sBAAY6T,gBACrC2lrB,EAAO,SAACnhnB,GACVp/E,EAASv+B,YAAK29G,KAEZu1qB,GAAyB,CAC3B,CACIx+vB,MAAO/U,EAAE,2CACT84F,QAAS,kBAAMqmnB,EAAK32sB,4BAExB,CACIuM,MAAOorP,IAGTqzgB,GAAqB,CACvB,CACIz+vB,MAAO/U,EAAE,uCACT84F,QAAS,kBAAMqmnB,EAAKt1sB,uBAExB,CACIkL,MAAOorP,IAGTkzU,GAAc1qO,EAAgB4qa,GAAyBC,GACvD1sJ,GAAa,WACflomB,EAAS,IAAIulE,KAA4B,CAAEgG,eAC3C+yB,YAAW,CACPjf,SAAUpyF,uBACV+S,WACA8e,YAHJw/E,KAOAt+F,EAAS,IAAI41F,MAAqB,KAEhC00B,GAAekkP,EAAanwY,KAAI,SAACqgD,GAAD,MAAW,CAC7C76C,KAAM66C,EAAKtlD,IAAI,QACfk9B,GAAIooB,EAAKtlD,IAAI,MACbmyG,gBACAtzG,UACEyttB,GAAmB,WACrB1lrB,EAAS,IAAIqsD,KAA+B,CAAE8iC,WAAY,EAAG/P,KAAM51F,wBAAwB,IAAM2hH,EAAa/xI,IAAI,SAClH4mC,EAASv+B,YAAK+nB,0BAEdwW,EAAS,IAAI41F,MAAqB,KAsChCi/pB,GAAoBrmZ,EAAanzX,WAAU,SAACqjC,GAAD,OAAc,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMtlD,IAAI,SAAUm3H,KAC/E,OACI,qCACI,eAAC24iB,EAAA,EAAD,WACI,cAAChhP,EAAA,EAAD,CAASn5U,QAAQ,QAAjB,SACI,cAAC6zU,EAAA,EAAD,CAAa6xK,YAAaA,OAE9B,cAACk/E,EAAA,EAAD,CAAQvwZ,QAASA,EAASujc,WAAYwtE,EAAtC,SACI,cAACW,EAAA,EAAD,CACIh6pB,QAAS45pB,EACTx6qB,QAAS,WACL2qnB,EAAa,8BAK7B,cAACkwD,EAAA,EAAD,CACI1+lB,MAAOqwQ,YAAkBtjL,EAAS/sF,GAClC9lE,eAAc,OAAE4a,QAAF,IAAEA,OAAF,EAAEA,EAAc/xI,IAAI,MAClC4pR,wBAAyBA,EACzBgygB,eAAgBH,IAAqB,GAAIA,GACzCvqoB,KAAMA,GAEN2qoB,SAAU/sJ,GACVgtJ,YA5DY,SAACC,GACrBn1vB,EAAS,IAAIkvD,KAAiBimsB,EAAe7+vB,MA4DrCkqqB,OA1DmB,SAAC/niB,GAC5B,IAAM5lE,EAAS4lE,EAAIniI,GACnB0J,EAAS,IAAI2pD,KAAJ,UAA6BxgE,sBAA7B,YAAoDoiF,KAC7D+yB,YAAW,CACPjf,SAAS,GAAD,OAAKnyF,iBAAL,YAAuB2lE,GAC/B7yD,WACA8e,YAHJw/E,MAwDQi9L,SAlDqB,SAAC9iK,EAAKjnK,GACnC,IAAM++H,EAAiB4a,EAAa/xI,IAAI,MAClCy5F,EAAS4lE,EAAIniI,GACbi+X,EAAW97P,EAAI50J,KACjBsuoB,EAAoB5hhB,EACxB,GAA0B,IAAtBi+Q,EAAap9Y,KACb+gpB,GAAqB,OAClB,GAAIt/iB,IAAW09B,EAAgB,CAG9B4hhB,EAFe3gpB,IAAUg9Y,EAAa/jY,QAAU,EAE5B+jY,EAAav4X,MAAM,CAACzkB,EAAQ,EAAG,OAE/Bg9Y,EAAav4X,MAAM,CAACzkB,EAAQ,EAAG,OAG3DwuC,EAAS,IAAI8uD,IAAkC,CAAE+D,SAAQs/iB,oBAAmB59O,WAAUhpT,eACtFvrE,EAAS,IAAI6nE,IAAwB,CAAC0D,YAAW1Y,cA8BpC0Y,IAMI,OAAZijS,QAAY,IAAZA,OAAA,EAAAA,EAAcp9Y,MAAO,EACbgnH,IAAc+yB,EACP,cAACj9D,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,SAAwC,cAACi6lB,EAAA,EAAD,MACxC,cAACinD,EAAA,EAAD,CACI3xqB,KAAMysF,EAENmllB,oBAAqB,WACjB,OAAO,cAACnnD,EAAA,EAAD,CAAWzqnB,KAAMysF,EAAcukO,gBAAiBg2W,MAE3D6K,uBAAwB,YAAwC,IAAD,IAApCgC,gBAAoC,aAAnBC,cAAmB,SAC7D,OACI,eAACtkpB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,WAAjE,UACE,cAACmwC,EAAA,EAAD,CACEC,MACG2zB,GAAQs/kB,EACLpxsB,EAAE,oCACDmxsB,EAEC,GADAnxsB,EAAE,iDALZ,SASE,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,WACRzT,MAAM,UACNm+K,UAAW,cAAC,IAAD,CAAYj9J,SAAS,UAChC7L,MAAO,CAAEkG,YAAa,EAAGiV,WAAY,UACrCv9C,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBAC9BjynB,SAAU2gC,EACVh5B,QAASs4mB,EAAS,WACdiiE,EAA6B,CAC3Bz0rB,MAAM,EACNknN,SAAU,KAEZ,KAZR,SAcGqra,EAAWnxsB,EAAE,iDAAmD,OAGrE,cAACk+F,EAAA,EAAD,CACEC,MACG2zB,GAAQs/kB,EACLpxsB,EAAE,oCACDmxsB,EAEC,GADAnxsB,EAAE,gCALZ,SASE,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACNm+K,UAAW,cAAC,KAAD,CAASj9J,SAAS,UAC7BjK,SAAU2gC,EACVviC,MAAO,CAAEmb,WAAY,UACrBv9C,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBAC9BtqnB,QAASs4mB,EAAS9M,GAAmB,KAPzC,SASG6M,EAAWnxsB,EAAE,gCAAkC,WAM5D4ssB,gBAhGA,SAACn7nB,EAAgBs8B,GACzCnvF,EAAS,IAAIwwD,IAAoB,CAC7B2+B,YACAu+gB,gBAAiB,kBAAM1tmB,EAAS,IAAIusE,KAAoC,CAAE1Z,SAAQs8B,YAAW65gB,eAAe,WAoCnF79f,EAAa/xI,IAAI,OA2DpC,cAAC+1b,EAAA,EAAD,CAAWz/E,gBAAiBw4R,KAElC,cAAC08F,GAAA,EAAD,CACErvuB,KAAM,UACN41I,aAAcA,EACdi4I,QAASA,EACT/sF,MAAOA,EACPwuiB,aAAcA,IAEhB,cAACuwD,EAAA,EAAD,Q,2DCzQNvwqB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5Cyyf,OAAQ,CACJ17c,WAAY/2C,EAAMZ,QAAQ,KAC1B43C,cAAeh3C,EAAMZ,WAEzBy8O,mBAAoB,CAChBv1M,YAAatmC,EAAMZ,QAAQ,GAC3By6C,cAAe,iBA4CRirqB,GAzCgC,SAAC,GAIzC,IAHHr7pB,EAGE,EAHFA,QACAuyL,EAEE,EAFFA,UACAvsN,EACE,EADFA,KAEMzxB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,OACI,cAACiqS,GAAA,EAAD,CACIrxL,QAASA,EACTh6B,KAAMA,EACNruB,SAAS,KAHb,SAKI,sBAAKlD,UAAWF,EAAQy0f,OAAxB,UACI,cAAC13Q,GAAA,EAAD,UACI,cAACylI,GAAA,EAAD,CAAmBz6Z,GAAG,2BAA2By4E,QAAQ,KAAzD,SACK3tF,EAAE,2CAGX,eAACqqS,GAAA,EAAD,WACI,cAACzxM,EAAA,EAAD,CACIE,QAAS8f,EACT1+B,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,wBAGP,cAAC44F,EAAA,EAAD,CACIE,QAASqyM,EACTjxN,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBAHvB,SAKKhrS,EAAE,uD,mECvDrB6a,GAAUlC,6BAAyC5oC,GAUlD,IAMQmkyB,GAdf,SAAwB/1vB,GACpB,OACI,cAACtD,GAAQR,SAAT,2BAAsB8D,GAAtB,aACKA,EAAM5D,a,mGC6CNyqsB,GAA2C,SAAChjd,EAAwBJ,EAAyB3sF,GAAW,IAAD,EAC1Gm4M,EAAeprH,EAAQhqR,IAAI,QAASkU,kBACpCu5b,EAA0C,iBAAGr4D,QAAH,IAAGA,OAAH,EAAGA,EAAcxtY,QAAO,SAACutI,EAAK7vF,GAC1E,IAAMm0C,EAASn0C,EAAKtlD,IAAI,MACxB,OAAOm1I,EAAIxxI,IAAI81F,EAAQwjG,EAAMj9L,IAAIy5F,MAClC5qF,wBAH6C,QAGnCA,gBACb,OAAO4+b,GAAqBA,EAAkB/jc,MAAK,SAACszZ,GAChD,IAAM/oM,EAAQ,OAAG+oM,QAAH,IAAGA,OAAH,EAAGA,EAAOh9Z,IAAI,YAC5B,cAAOi0N,QAAP,IAAOA,OAAP,EAAOA,EAAUvqN,MAAK,SAAC4yL,GACnB,IAAMvmE,EAAYumE,EAAQt8L,IAAI,MAC9B,OAAO4pR,EAAwB/sQ,MAAM,CAACmgZ,EAAMh9Z,IAAI,MAAO+1H,EAAW,aAAeumE,EAAQt8L,IAAI,YAAY0J,MAAK,SAAAupH,GAAO,OAAIA,EAAQjzH,IAAI,mBA8jBlIm8xB,IArjBkC,SAACh2vB,GAC9C,MAAoEwU,oBAAkB,GAAtF,mBAAOyhvB,EAAP,KAAmCC,EAAnC,KACA,EAAkE1hvB,mBAAqC,CACnGisD,MAAM,EACNknN,SAAU,EACVwue,aAAa,IAHjB,mBAAOC,EAAP,KAAkClB,EAAlC,KAKA,EAAkD1gvB,mBAAS,IAA3D,mBAAO8/W,EAAP,KAA0B88T,EAA1B,KACA,EAAwC58qB,oBAAkB,GAA1D,mBAAO6hvB,EAAP,KAAqBvB,EAArB,KACA,EAAkDtgvB,oBAAkB,GAApE,mBAAO0pjB,EAAP,KAA0B22L,EAA1B,KACA,EAAoErgvB,oBAAkB,GAAtF,mBAAO8hvB,EAAP,KAAmC9wD,EAAnC,KACA,EAAkChxrB,oBAAS,GAA3C,mBAAOohX,EAAP,KAAkB2gY,EAAlB,KACO10wB,EAAK+xB,YAAe,gBAApB/xB,EACD4e,EAAW2F,wBACX2vD,EAAQvuD,sBAAYgP,eACpB4mD,EAAM51D,sBAAYoY,eAClB+C,EAAgBkgK,eAChB9kH,EAAS8zK,eAET2khB,EAAoBhvvB,sBAAYk7K,eAChCvjK,EAAO3X,sBAAYgkG,eACnBirpB,EAA4BjvvB,sBAAYywJ,eACxC3kG,GAAM,OAAGn0C,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,MACnBgqR,GAAU7jP,EAAM6jP,QAChB73K,GAAY63K,GAAQhqR,IAAI,MACxBmoR,GAAsB6B,GAAQhqR,IAAI,QAClC68xB,GAAmBp6vB,mBAAQ,iBAAO,CACpCg4X,oBACA88T,uBACAglE,4BACAlB,+BACAmB,eACAvB,kBACA52L,oBACA22L,uBACAyB,6BACA9wD,gCACAywD,6BACAC,mCACA,CACA5hY,EACA88T,EACAglE,EACAlB,EACAmB,EACAvB,EACA52L,EACA22L,EACAyB,EACA9wD,EACAywD,EACAC,IAQEnya,GAAoB,WACtB8wa,GAAqB,SAAAznxB,GAAI,OAAKA,MAY5By7R,GAAY,SAACn/R,GACf,IAOM+kY,EAAW,kBAAM8nZ,GAAa,IA2QpC,GAAK7sxB,EAAOk6L,YAAZ,CAwDI,IAAI+ylB,EADR,GAAI10gB,aAAsBv4Q,EAAOk6L,YAAYs+E,cAAgBE,aAA2B14Q,EAAOk6L,YAAYs+E,aAWvG,GATIN,aAA2Bl4Q,EAAOm4Q,aACpC80gB,EApUgC,SAAC,GAQhC,IAPJC,EAOG,EAPHA,mBACAtjsB,EAMG,EANHA,OACAijU,EAKG,EALHA,YAMC,EAAkFz0I,aAA8Bp4Q,EAAOm4Q,aAAvG4qb,EAAhB,EAAQn5mB,OAAsBs8B,EAA9B,EAA8BA,UAAW6xJ,EAAzC,EAAyCA,SAAUC,EAAnD,EAAmDA,eAAgBC,EAAnE,EAAmEA,WAC7D3kP,EAAU,CACZq5X,gBAAiB,WACjBD,qBAAoB,OAAEvyI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACnCspR,WAAY,SACZY,YAAa,CACT,CACIhtP,GAAI01qB,EACJ3+e,SAAU,CACN,CACI/2L,GAAI64F,MAKpBgnqB,sBAEErylB,EAAW,WACbhoG,KAAmB9rE,kBAAgBomwB,kBAAmBl0uB,EAAc,CAChE++N,iBACAyB,WAAY,SACZc,SAAUxC,EACVr5E,WAAYu5E,EACZ00I,gBAAiB,UACjBv2H,cAAa,OAAEjc,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAC5B68Z,gBAAe,OAAE7yI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,YAGlC08Z,GACAv5X,EAAO,YAAkBu5X,EACzBv5X,EAAO,oBAAyB,EAChCA,EAAO,UAAgB,SAAC85J,GACpB,IAAM33I,EAAmB23I,EAAM59K,QAC/BqrL,IACA9jK,EAAS,IAAIipE,IAAkB,CAC3BsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACxB04Y,sBAAuBpzV,EAAKtlD,IAAI,SAEpC08xB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,GACfn7S,IACPt2D,EAAO,kBAAwBs2D,EAC/Bt2D,EAAO,UAAgB,SAAC85J,GACpByN,IACA9jK,EAAS,IAAIovD,IAAe,CAACyD,YAC7BijsB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,GAE1B8nZ,GAAa,GACb91vB,EAAS,IAAImqD,IAAW5tD,KAyQb4lP,aAA6Bl5Q,EAAOm4Q,aAC7C80gB,EAxQkC,SAAC,GAQlC,IAPFC,EAOC,EAPDA,mBACAtjsB,EAMC,EANDA,OACAijU,EAKC,EALDA,YAMD,EAAsF1zI,aAAgCn5Q,EAAOm4Q,aAA7G4qb,EAAhB,EAAQn5mB,OAAsBs8B,EAA9B,EAA8BA,UAAW8yJ,EAAzC,EAAyCA,WAAYhB,EAArD,EAAqDA,eAAgBiB,EAArE,EAAqEA,aAC/Dp+E,EAAW,WACbhoG,KAAmB9rE,kBAAgBomwB,kBAAmBl0uB,EAAc,CAChE++N,iBACAyB,WAAY,WACZc,SAAUvB,EACVt6E,WAAYu6E,EACZ0zI,gBAAiB,UACjBv2H,cAAa,OAAEjc,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAC5B68Z,gBAAe,OAAE7yI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,YAGhCmjC,EAAU,CACZq5X,gBAAiB,WACjBD,qBAAoB,OAAEvyI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACnC28Z,kBAAmBljU,EACnB6vL,WAAY,kBACZY,YAAa,CACT,CACIhtP,GAAI01qB,EACJ3+e,SAAU,CACN,CACI/2L,GAAI64F,MAKpBgnqB,sBAEArgY,GACAv5X,EAAO,YAAkBu5X,EACzBv5X,EAAO,oBAAyB,EAChCA,EAAO,UAAgB,SAAC85J,GACpB,IAAM33I,EAAmB23I,EAAM59K,QAC/BqrL,IACA9jK,EAAS,IAAIipE,IAAkB,CAC3BsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACxB04Y,sBAAuBpzV,EAAKtlD,IAAI,SAEpC08xB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,IAEtBzxW,EAAO,kBAAwBs2D,EAC/Bt2D,EAAO,kBAAwBs2D,EAC/Bt2D,EAAO,UAAgB,SAAC85J,GACpByN,IACA9jK,EAAS,IAAIovD,IAAe,CAACyD,YAC7BijsB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,GAE1B8nZ,GAAa,GACb91vB,EAAS,IAAImqD,IAAW5tD,KA2MbomP,aAA6C15Q,EAAOm4Q,aAC7D80gB,EA1MsC,SAAC,GAQtC,IAPFC,EAOC,EAPDA,mBACAtjsB,EAMC,EANDA,OACAijU,EAKC,EALDA,YAMKxzI,EAAaM,aAAgD35Q,EAAOm4Q,aACpE/qF,EAAQy1Y,aAAmCxpT,GAC7CjsF,EAAMvlE,QACNglqB,GAAa,GACb91vB,EAAS,IAAImqD,IAAJ,yBACLyrU,gBAAiB,WACjBD,qBAAoB,OAAEvyI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACnCspR,WAAY,SACZY,YAAasoT,aAAev1Y,EAAMvlE,QAClC+kS,qBAAsBC,GACnBA,EAAc,CACbA,cACAqgY,mBAAoB,GACpB,CACApgY,kBAAmBljU,EACnBsjsB,uBAXC,IAaLx5d,UAAW,SAAC00E,GAA8B,IAAD,EAC/B+kB,EAAiB,OAAG/kB,QAAH,IAAGA,OAAH,EAAGA,EAAQ54X,QAC5B49wB,GAA2B,UAAAzqN,aAAev1Y,EAAMvlE,eAArB,eAA8B9vH,QAAO,SAACutI,EAAK7vF,GAAN,aAAe6vF,IAAO,UAAA7vF,EAAK2uK,gBAAL,eAAen2N,SAAU,KAAI,KAAM,EAC/H,GAAIm/L,EAAMpE,SACNjyJ,EAAS,IAAImqD,IAAW,CACpByrU,gBAAiB,WACjBG,kBAAiB,OAAEK,QAAF,IAAEA,OAAF,EAAEA,EAAOh9Z,IAAI,MAC9BspR,WAAY,kBACZY,YAAasoT,aAAev1Y,EAAMpE,UAClCkkmB,mBAAoBrgY,EAAcugY,EAA2BA,EAA2BF,EACxFx5d,UAAW,WACP,IAAKm5F,EAGD,OAFA91X,EAAS,IAAIovD,IAAe,CAACyD,iBAC7BijsB,GAAa,GAGjB91vB,EAAS,IAAIipE,IAAkB,CAAEsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAAO04Y,sBAAqB,OAAEskB,QAAF,IAAEA,OAAF,EAAEA,EAAOh9Z,IAAI,SAClG08xB,GAAa,IAEjB9nZ,kBAED,CACH,IAAK8nB,EAGD,OAFA91X,EAAS,IAAIovD,IAAe,CAACyD,iBAC7BijsB,GAAa,GAGjB91vB,EAAS,IAAIipE,IAAkB,CAAEsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAAO04Y,sBAAqB,OAAEskB,QAAF,IAAEA,OAAF,EAAEA,EAAOh9Z,IAAI,SAClG08xB,GAAa,KAGrB9nZ,gBAEG33M,EAAMpE,WACb6jmB,GAAa,GACb91vB,EAAS,IAAImqD,IAAJ,yBACLyrU,gBAAiB,WACjBD,qBAAoB,OAAEvyI,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MACnCspR,WAAY,kBACZY,YAAasoT,aAAev1Y,EAAMpE,UAClC4jO,qBAAsBC,GACnBA,EAAc,CACbA,cACAqgY,mBAAoB,GACpB,CACApgY,kBAAmBljU,EACnBsjsB,uBAXC,IAaLx5d,UAAW,SAAC00E,GACR,IAAKykB,EAGD,OAFA91X,EAAS,IAAIovD,IAAe,CAACyD,iBAC7BijsB,GAAa,GAGjB,IAAM1/X,EAAiB,OAAG/kB,QAAH,IAAGA,OAAH,EAAGA,EAAQ54X,QAClCunB,EAAS,IAAIipE,IAAkB,CAAEsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAAO04Y,sBAAqB,OAAEskB,QAAF,IAAEA,OAAF,EAAEA,EAAOh9Z,IAAI,SAClG08xB,GAAa,IAEjB9nZ,iBAuHGzrH,aAAoCt5Q,EAAOm4Q,eACpD80gB,EApH6B,SAAC,GAQ7B,IAECxzgB,EATJyzgB,EAOE,EAPFA,mBACAtjsB,EAME,EANFA,OACAijU,EAKE,EALFA,YAMA,EAA6DtzI,aAAuCv5Q,EAAOm4Q,aAAnGkB,EAAR,EAAQA,WAAYrB,EAApB,EAAoBA,eAAwB+qb,EAA5C,EAAoCn5mB,OAQpC,GANuB,iBAAnBouL,IACAyB,EAAa,UAEM,mBAAnBzB,IACAyB,EAAa,mBAEZA,EAAL,CAGA,IAAMnmP,EAAU,CACZq5X,gBAAiB,WACjBlzI,aACAY,YAAa,CACT,CACIhtP,GAAI01qB,EACJ3+e,SAAUi1D,EAAWjkR,KAAI,SAAA8wH,GAAS,MAAK,CAAE74F,GAAI64F,QAGrDgnqB,sBAEArgY,GACAv5X,EAAO,qBAAP,OAAkC6mP,SAAlC,IAAkCA,QAAlC,EAAkCA,GAAShqR,IAAI,MAC/CmjC,EAAO,oBAAyB,EAChCA,EAAO,YAAkBu5X,EACzBv5X,EAAO,UAAgB,SAAC80W,GACpB,IAAM+kB,EAAiB,OAAG/kB,QAAH,IAAGA,OAAH,EAAGA,EAAQ54X,QAClCunB,EAAS,IAAIipE,IAAkB,CAAEsC,UAAS,OAAE63K,SAAF,IAAEA,QAAF,EAAEA,GAAShqR,IAAI,MAAO04Y,sBAAqB,OAAEskB,QAAF,IAAEA,OAAF,EAAEA,EAAOh9Z,IAAI,SAClG08xB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,IAEtBzxW,EAAO,kBAAwBs2D,EAC/Bt2D,EAAO,UAAgB,WACnByD,EAAS,IAAIovD,IAAe,CAACyD,YAC7BijsB,GAAa,IAEjBv5vB,EAAO,SAAeyxW,GAE1B8nZ,GAAa,GACb91vB,EAAS,IAAImqD,IAAW5tD,OAoEpB25vB,EAKF,YAJAA,EAAa,CACTrjsB,UACAsjsB,mBAtV2B,IAA7BltxB,EAAOk6L,YAAY3xM,MACZ,EAEeoia,aAAgCl1W,EAAMm1W,GACvCz6Z,IAAI6P,EAAOk6L,YAAY3xM,MAAQ,GAAG4H,IAAI,SAAW,IAuV9E,GAAIuoR,aAA2B14Q,EAAOk6L,YAAYs+E,cAAgBK,aAAoB74Q,EAAOm4Q,cAAsC,KAAtByyI,EAA0B,CAAC,IAAD,EAC7HyiY,EAAW,iBAAG53uB,QAAH,IAAGA,OAAH,EAAGA,EAAMtlD,IAAI,mBAAb,QAA4BkU,iBACvCw5b,EAAmBlzC,aAAgCl1W,EAAMm1W,GACzD67T,EAAmBzmtB,EAAOk6L,YAAY3xM,MACtCy3tB,EAAchgtB,EAAOqZ,OAAO9wB,MAClC,GAAIk+tB,IAAqBzG,EACrB,OAEJ,IAAMstE,EAAgBzvV,EAAiB1tc,IAAI6vtB,GACrCutE,EAAkBD,EAAcn9xB,IAAI,MAEpCq9xB,EADqB3vV,EAAiB1tc,IAAIs2tB,GACAt2tB,IAAI,MAC9Cs9xB,EAAmCJ,EAAYj7wB,WAAU,SAAAq6K,GAAO,OAAIA,EAAQt8L,IAAI,QAAUo9xB,KAC1FG,EAAwCL,EAAYj7wB,WAAU,SAAAq6K,GAAO,OAAIA,EAAQt8L,IAAI,QAAUq9xB,KAC/FG,EAAcN,EAAYz4qB,OAAO64qB,GAAkCloxB,OAAOmoxB,EAAuCJ,GACvHv2vB,EAAS,IAAI4J,IAA+B,CACxCtT,GAAIijO,mBACJh6N,MAAO,CACHhf,OAAQa,EAAE,iCAGlB4e,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIijO,mBACJv5J,MAAM,KAET1C,EAAOJ,QAAQ,CACZvB,QAAS,OACTC,SAAU,aACV9vB,KAAM,CACFuhJ,SAAUupkB,EAAY3+xB,WAE1B+vC,OAAQ,CACJ6qD,aAEGjnB,MAAK,SAAAurE,GAAQ,IAAD,MACb0/oB,EAAqBp4wB,iBAAM,OAAC04H,QAAD,IAACA,GAAD,UAACA,EAAK56G,eAAN,iBAAC,EAAcmiB,YAAf,iBAAC,EAAoBA,YAArB,aAAC,EAA2B,IACnC,MAAtBm4uB,EACAx5wB,QAAQ7Z,MAAM,mBAAoB2zI,GAElCn3G,EAAS,IAAIovD,IAAe,CACxByD,OAAQgksB,EAAmBz9xB,IAAI,MAC/BujU,UAAW,WACP38R,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIijO,mBACJv5J,MAAM,KAEVhgE,EAAS,IAAIgK,IAAsB,CAC/BtD,QAAStlB,EAAE,kCACX65E,SAAU,oBAK3B+gG,OAAM,SAACx4L,GACN6Z,QAAQ7Z,MAAM,uBAAwB,CAAEA,UACxCw8B,EAAS,IAAI0J,IAA6B,CACtCpT,GAAIijO,mBACJv5J,MAAM,KAEVhgE,EAAS,IAAIgK,IAAsB,CAC/BtD,QAAStlB,EAAE,iCACX65E,SAAU,iBAO1B,OACI,cAAC,IAAYx/D,SAAb,CAAsB1qC,MAAOklyB,GAA7B,SACI,eAAC,KAAD,CAAiB7tf,UAAWA,GAA5B,UAEQutf,EAA0B31rB,KAAO,cAAC,GAAD,CAAgBjvG,MAAOqyR,GAAvB,SAC7B,cAACkmZ,GAAA,EAAD,CAAav4qB,MAAK,OAAE2tD,QAAF,IAAEA,IAAQ,KAA5B,SACI,cAACu+iB,GAAA,EAA8BxhkB,SAA/B,CAAwC1qC,MAR/B,SAACqwR,GAAD,OAC7B2qT,aAA8B,CAAErthB,OAAMm1W,oBAAmBzyI,cAAagnB,gBAOlD,SAEI,cAACmhY,GAAA,EAAkB9toB,SAAnB,CAA4B1qC,MAAOoka,GAAa6gY,EAAhD,SACI,cAAC,KAAD,CACIN,YAAaC,EAA0BD,YACvCoB,SAAU,SAAC5xxB,GAAD,OAAcuvxB,GAA6B,SAAA9nxB,GAAI,kCAClDA,GADkD,IAErD+oxB,YAAaxwxB,QAEjB6tG,UAAS,OAAEqwK,SAAF,IAAEA,QAAF,EAAEA,GAASntQ,MAAM,CAAC,WAAY,UAAW,OAClDixS,SAAUyue,EAA0Bzue,SACpC6ve,qBACI,cAAChnqB,GAAA,EAAD,CACI7V,QAAS,WACLu6qB,GAA6B,SAAA9nxB,GAAI,kCAC1BA,GAD0B,IAE7BqzF,MAAM,EACNknN,SAAU,QAGlB5rN,MAAM,UARV,SAUI,cAAC,KAAD,gBAOR,KAExB,cAAC07rB,GAAA,EAAD,CACIh3rB,KAAM41rB,EACNlzD,aA3dK,WACjB2xD,GAAgB,SAAA1nxB,GAAI,OAAKA,MA2dbsqxB,QAAO,0CAAqCpksB,GAArC,kBAAqDyC,GAC5D4hsB,QAAO,UAAKv6rB,EAAIvjG,IAAI,mBAAb,mBAA0Cy5F,GAA1C,kBAA0DyC,KAErE,cAACijU,GAAA,EAAD,CAAWC,uBAAuB,YAClC,cAAC,KAAD,CACIx4T,KAAMy9f,EACNn6O,kBAAmBA,GACnBD,SAAU9hG,IAAengQ,EAAE,kCAC3B6hW,eAAgB7hW,EAAE,4CAClBm9S,aA5dc,WAAO,IAAD,IAC1BwrD,EAA0C,SAA1B3mG,GAAQhqR,IAAI,UAClC4mC,EAAS,IAAI2oE,IAAoB,CAC7B4C,aACAg2K,YAAW,OAAEA,SAAF,IAAEA,MAAe,GAC5Bx3D,QAAO,oBAAEq5D,GAAQhqR,IAAI,gBAAd,aAAE,EAAsBiF,KAAI,SAACqgD,GAAD,OAAUA,EAAKtlD,IAAI,SAAO0d,KAAK,YAA3D,QAAmE,GAC1Ey2X,aAAcxjB,EAAgBngW,yBAAyBqB,uBAE3Dq4V,QAsdQ,cAAC,GAAD,CACItjR,KAAM61rB,EACN77pB,QAtemB,WAC/B+qmB,GAA8B,SAAAp4tB,GAAI,OAAKA,MAse3B4/S,UAAW,WACPw4a,GAA8B,GAC9BxlsB,EAAMslsB,aAAa,eAG3B,cAACmqC,GAAA,EAAD,CACI52pB,UAAW29qB,EACX3ygB,QAASA,GACTpjL,KAAMw1rB,EACNx7pB,QAAS,kBAAMy7pB,GAA8B,MAEjD,cAAC,KAAD,IACA,cAAC,GAAD,aACIr9qB,UAAW+8S,GACP51X,W,wMCpmBTwwF,EAhBgC,SAAC,GAIzC,IAAD,IAHF40I,eAGE,MAHQ,GAGR,EAFFhpO,EAEE,EAFFA,SACG4D,EACD,iBACF,OACI,cAAC+/E,EAAA,EAAD,CAASC,MAAOolJ,EAAhB,SACI,+BACE,cAAC,IAAD,2BAAmBplO,GAAnB,aACG5D,UCHFw7vB,EARgC,SAAC53vB,GAC5C,OACI,cAAC,EAAD,2BAAgBA,GAAhB,aACI,cAAC,IAAD,CAAYi9E,SAAS,c,iBCKlB46qB,EARkC,SAAC73vB,GAC9C,OACI,cAAC,EAAD,yBAAYkuS,KAAK,SAAYluS,GAA7B,aACI,cAAC,IAAD,CAAYi9E,SAAS,c,4HCE3B66qB,EAAev9vB,cAA8G,WAMhIhpC,GAAS,IALXyuH,EAKU,EALVA,MAEA+3qB,GAGU,EAJVvwf,SAIU,EAHVuwf,eACA3yhB,EAEU,EAFVA,QACGplO,EACO,iBACP,EAAoCzF,YAAe,GAAnD,mBAAOy9vB,EAAP,KAAmBC,EAAnB,KACMjntB,EAAQwjD,cACd,OACI,eAAC7lD,EAAA,EAAD,yBACIW,WAAW,EACXP,WAAW,SACXuB,KAAK,SACLV,QAAQ,aACRr+E,IAAKA,EACL45H,aAAc,kBAAM8sqB,GAAc,KAC9Bj4vB,GAPR,IAQIorF,aAAc,WACV6sqB,GAAc,IATtB,UAYI,cAACtptB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGE,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,EAAGe,SAAU,GAAlG,SACI,cAAC4tC,EAAA,EAAD,CAASC,MAAOolJ,GAAWplJ,GAAS,GAApC,SACI,cAACrxC,EAAA,EAAD,CACIe,MAAM,EACN0hC,MAAO,CACH+O,SAAU,SACVsL,aAAc,WACdc,WAAY,SACZxwB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MANrC,SASK4nF,QAIZg4qB,EAAa,cAACrptB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAEhgC,MAAO,OAAQi2C,OAAQ,GAAzF,SACL0wqB,IACK,YAyBXG,EApB2B,SAAC,GAAgE,IAA9Dl4qB,EAA6D,EAA7DA,MAAOjE,EAAsD,EAAtDA,WAAYpB,EAA0C,EAA1CA,QAASv+E,EAAiC,EAAjCA,SAAUgpO,EAAuB,EAAvBA,QAAYplO,EAAW,iBACtG,OACI,cAACioR,EAAA,EAAD,aACIttM,QAASA,EACTvrC,UAAW0otB,EAIX3+Z,eAAe,EACft/G,oBAAoB,EACpB75J,MAAOA,EACPwnL,SAAUzrL,EACVg8qB,cAAe37vB,EACfgpO,QAASA,GACLplO,K,6FC/BVslF,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C3jE,KAAM,CACJ+jE,MAAO,OACP0pC,gBAAiB,QAEnBk1P,OAAQ,CACNj0Q,MAAO,UACP+e,gBAAiB,UACjB6C,UAAU,oBAAD,OAAsB3sC,EAAM+pC,QAAQC,KAAK,KAAzC,UACT9pC,QAAS,OACTq7C,WAAY,UAEd2sC,IAAK,CACHshK,eAAgB,WAChBhjM,YAAa,UACbha,YAAa,QACbC,YAAa,kBACb7rC,QAASZ,EAAMZ,QAAQ,IAAK,GAC5Bo/C,WAAY,EACZl+C,SAAU,IACVo4C,UAAW,GACXt4C,MAAO,eAETkiX,YAAa,CACXv3V,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B0iF,gBAAiB,OACjB0C,YAAa,QACbC,YAAa,kBACb+Z,YAAaxmD,EAAM+pC,QAAQC,KAAK,MAElCm9qB,wBAAyB,CACvBr9qB,gBAAiB,UACjB6V,OAAO,cAAD,OAAgB3/C,EAAM+pC,QAAQE,QAAQ,OAE9Cm9qB,mBAAoB,CAClBhmtB,SAAU,SAuLCojtB,IAnL4C,SAAC,GAarD,IAZL1+lB,EAYI,EAZJA,MACA9lE,EAWI,EAXJA,eACAyyJ,EAUI,EAVJA,wBACAgygB,EASI,EATJA,eASI,IARJ1qoB,YAQI,MARG,GAQH,MAPJstoB,mBAOI,aANJC,oBAMI,aALJC,2BAKI,MALkB,GAKlB,EAJJ5C,EAII,EAJJA,YACA10F,EAGI,EAHJA,OACAjlY,EAEI,EAFJA,SACA05d,EACI,EADJA,SAEQ7zwB,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX4oC,EAAUs2C,IAEhB,EAA8C/qF,IAAMia,UAAS,GAA7D,mBAAOgkvB,EAAP,KAAwBzwE,EAAxB,KACA,EAAwCxtrB,IAAMia,SAAsD,CAAEzd,GAAI,KAAMzyB,KAAM,GAAIrS,MAAO,IAAjI,mBAAOwmyB,EAAP,KAAqBC,EAArB,KACA,EAA6Dl8Z,cAArD83B,GAAR,EAAQA,kBAAmB4hY,GAA3B,EAA2BA,8BAErBtqpB,GAAY,OAAGkrD,QAAH,IAAGA,OAAH,EAAGA,EAAOj9L,IAAIm3H,GAC1B2iB,GAAI,OAAG/H,SAAH,IAAGA,QAAH,EAAGA,GAAc/xI,IAAI,QACzBq9Z,GAAmB/yI,YAAoBV,GAEvCikL,GAA8CL,YAA+CvwQ,EAAOw9N,IACpGqkY,GAAkDnxV,YAAmDtwC,GAAiBv/Z,OAAQ+vc,GAA6CjkL,GAC3Km1gB,GAAyCjxV,YAA0CzwC,GAAiBv/Z,OAAQ+vc,GAA6CjkL,GAO/J,OACE,sBAAKv0M,UAAWF,EAAQ3hE,KAAxB,UACE,sBAAK6hE,UAAWF,EAAQghS,OAAxB,UACE,eAACloD,EAAA,EAAD,CACEt2T,MAAOikyB,EACPjmrB,QAAQ,aACRqprB,cAAc,OACd7we,UAAU,UACV,aAAW,gCACX22V,kBAAmB,CACjBvtiB,MAAO,CACLlgC,QAAS,SAGbkgC,MAAO,CACLsY,UAAW,IAZf,UAgBIgsqB,GACE,cAAC,EAAD,CACExmtB,UAAW2B,kBAAK,eACb7B,EAAQkqF,KAAM,IAEjB9nD,MAAO,CAAE4M,WAAY,IACrBjC,YAAY,EACZpB,QAAS,WACP+6qB,KAEF11qB,MAAOn+F,EAAE,+BACTs3W,eAAe,IAKnBpuO,EAAKjsJ,KAAI,WAA0Bs7H,GAAc,IAAD,MAApC91H,EAAoC,EAApCA,KAAMyyB,EAA8B,EAA9BA,GACVglF,GADwC,EAA1B/P,UACDyprB,IAAmBr7pB,GAChC0+pB,GAAqB,UAAAhimB,EAAMj9L,IAAIk9B,UAAV,mBAAel9B,IAAI,mBAAnB,eAAgCwH,QAAO,SAAA80L,GAAY,IAAD,EAC3E,OAAO,UAAAA,EAAQt8L,IAAI,mBAAZ,eAAyBhI,MAAO,OACnCkc,iBACN,OACE,eAAC,EAAD,CACEmhE,UAAW2B,mBAAI,mBACZ7B,EAAQkqF,KAAM,GADF,cAEZlqF,EAAQskX,YAAcv3U,GAFV,IAIfiE,MAAO17G,EACP8gQ,QAASvjP,EAAE,mCAAoC,CAAEvd,OAAM4G,MAAO4txB,EAAmBjnyB,OAEjFkqH,WAAYA,EACZpB,QAAS,YAvDJ,SAACh1G,EAAUy0H,GAC9B,IAAMw7pB,EAAiB7qoB,EAAKtzI,MAAK,SAACyhJ,EAAK9+B,GAAN,OAAmBA,IAAaz0H,KACtD,OAAXgwxB,QAAW,IAAXA,KAAcC,EAAgBx7pB,GAsDdw8H,CAAax8H,EAAUA,IAV3B,UAcI6mkB,GACE,cAAC,EAAD,CACEtmlB,QAAS,SAACz8G,GACRA,EAAE87G,kBACI,OAANinlB,QAAM,IAANA,KAAS,CAAE38rB,OAAMyyB,MAAMqjG,MAM7B4hM,GACE,cAAC,EAAD,CACErhN,QAAS,SAACz8G,GACRA,EAAE87G,kBACF0+qB,EAAgB,CAAE3hwB,KAAIzyB,OAAMrS,MAAOmoI,IACnC2tlB,GAAmB,QAtBtB3tlB,SAgCf,eAACzrD,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAEhgC,MAAO,cAAekmC,YAAa,IAArG,UACE,cAACyI,EAAA,EAAD,CAASC,MAAOn+F,EAAE,wCAAyCmtD,QAAS,CAAEo2L,QAASp2L,EAAQoptB,oBAAvF,SACE,+BACE,cAACvqe,EAAA,EAAD,CACExwM,QACE,cAAC6U,EAAA,EAAD,CACEn2B,MAAM,UACNiX,SAAU2gC,GACV7hB,QAAS8mqB,IAA0CD,GACnDrrN,cAAesrN,KAA2CD,GAC1DvnrB,MAAO,CAAEiW,OAAQ,GAAIj2C,MAAO,MAGhCx6C,MAAO/U,EAAE,sCACTu5pB,eAAgB,QAChB9pkB,SAAU,SAACpzG,EAAG4zH,GACZ,IAAM8kS,EAAe,OAAG9/N,QAAH,IAAGA,OAAH,EAAGA,EAAOr1L,QAAO,SAACutI,EAAK6nR,EAAOC,GAEjD,OAD0BzC,YAAgCwC,EAAOvC,IACxC7yZ,QAAO,SAACiiR,EAAMvtF,GACrC,OAAIA,EAAQt8L,IAAI,YAAYhI,KAAO,EAC1B6xR,EAAKt9Q,OAAO0wZ,EAAS/oZ,kBAAQ,SAAAM,GAAI,OAAIA,EAAKnM,KAAKi0L,EAAQt8L,IAAI,UAE7D6pR,IACN10I,KACF9vH,iBAAO,MAES,OAAf03Y,QAAe,IAAfA,OAAA,EAAAA,EAAiB/ka,MAAO,GAC1B4uC,EAAS,IAAIysE,KAAwC,CAAE0pT,kBAAiB9kS,oBAOhFumqB,GACE,cAACt4qB,EAAA,EAAD,CAASC,MAAOs4qB,GAAeC,GAA4B,GAA3D,SACE,+BACE,cAAC,IAAD,CACEvlrB,SAAUslrB,GAAgBvtoB,EAAKpzJ,QAAU,EACzCy5G,MAAO,CAAE4M,WAAY,EAAGqJ,OAAQ,GAAIj2C,MAAO,IAC3CupC,QAAS,kBAAMu7qB,IAA8B,IAH/C,SAKE,cAAC,IAAD,CAAcj5qB,SAAS,sBAQrC,cAAC,IAAD,CACExc,KAAM+3rB,EACN10a,SAAU20a,EAAan0xB,MAAQud,EAAE,qCACjCkiW,kBAAmB,kBAAMgkW,GAAmB,IAC5C/oZ,aAAc,WACZ+oZ,GAAmB,GACX,OAAR/rZ,QAAQ,IAARA,KAAW,CAAEjlS,GAAI0hwB,EAAa1hwB,GAAIzyB,KAAMm0xB,EAAan0xB,MAAQm0xB,EAAaxmyB,QAE5EmyX,aAAa,S,6QCxPN,MAA0B,kC,mUC4EnC20a,G,4MAEGj8vB,MAAQ,CACbmsF,SAAU,M,EAqBLimlB,eAAiB,SAACjykB,GACvB,MAII,EAAKj9F,MAHPve,EADF,EACEA,KACA4+oB,EAFF,EAEEA,YAFF,EAGE/7iB,8BAIkC7iG,EAAK/K,MAAM,CAAC,MAAO,SAASnT,MAAK,SAAC08F,GAAD,OAAUA,EAAKpmG,IAAI,QAAUwmqB,MAGlG,EAAK3njB,SAAS,CAACuQ,SAAUgU,EAAMziB,iB,EAE1Bw+qB,eAAiB,SAACj9rB,GACvB,EAAK2c,SAAS,CAACugrB,SAAUl9rB,K,EAEpBozmB,gBAAkB,WACvB,EAAKz2lB,SAAS,CAACuQ,SAAU,Q,EAEpBiwqB,aAAe,SAACx0M,GACrB,MAKI,EAAK1kjB,MAFPve,GAHF,EACE03wB,qBADF,EAEEC,mBAFF,EAGE33wB,MACA43wB,EAJF,EAIEA,wBAGI92M,EAAmBmC,EAAU7qlB,IAAI,MAGvCw/xB,EAF4B53wB,EAAKjkB,IAAI,SAAU+klB,GAI7CA,GAEF,EAAK7pe,SAAS,CAACuQ,SAAU,Q,EA0EpB8qM,YAAc,WACnB,MAGI,EAAK/zR,MAFPS,EADF,EACEA,SACAynnB,EAFF,EAEEA,SAGFznnB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAImxnB,EACJznjB,MAAM,M,EAIHu+N,aAAe,WACpB,MAII,EAAKh/R,MAHPwgoB,EADF,EACEA,aACA84H,EAFF,EAEEA,WACA73wB,EAHF,EAGEA,KAGF++oB,IACA84H,EAAW73wB,EAAK5nB,IAAI,OACpB,EAAKk6T,e,uDAnJP,WACE,MAMIj+T,KAAKkqC,MALP0qkB,EADF,EACEA,YACAf,EAFF,EAEEA,cACA3zmB,EAHF,EAGEA,KACA8wR,EAJF,EAIEA,OACAyygB,EALF,EAKEA,SAGW,SAATvjyB,GAAmB8wR,IAAWyygB,EAAS1/xB,IAAI,OAC7C6wmB,EAAY5jV,GAGD,WAAT9wR,GAAqB8wR,GACvB6iV,EAAc7iV,K,oBAwIlB,WACE,MAaIhxR,KAAKkqC,MAZPgvC,EADF,EACEA,QACAwxlB,EAFF,EAEEA,aACA/+oB,EAHF,EAGEA,KACA23wB,EAJF,EAIEA,mBACApjyB,EALF,EAKEA,KACA8wR,EANF,EAMEA,OACAgpe,EAPF,EAOEA,gBACA5usB,EARF,EAQEA,OACAq4uB,EATF,EASEA,SACA13wB,EAVF,EAUEA,EACAyiG,EAXF,EAWEA,4BACA+7iB,EAZF,EAYEA,YAGIm5H,EAAuBl1qB,IAAgC7iG,EAAK/K,MAAM,CAAC,MAAO,SAASnT,MAAK,SAAC08F,GAAD,OAAUA,EAAKpmG,IAAI,QAAUwmqB,KAErHr+Y,EAAc8te,GAAmBA,EAAgBj2vB,IAAI,OAAQgoB,EAAE,kBAC/DwgC,EAAanB,GAAUA,EAAOrnD,IAAI,cAGlCyK,EAAO,CAFKi1xB,GAAYA,EAAS1/xB,IAAI,aAC1B0/xB,GAAYA,EAAS1/xB,IAAI,aACPwH,QAAO,SAAA0K,GAAG,MAAY,KAARA,KAAYwL,KAAK,KAElE,GAAY,MAARkK,EACF,OAAO,eAAC6tF,EAAA,EAAD,UACJztF,EAAE,+BAIP,IACEonG,EACEnzH,KAAKgnC,MADPmsF,SAGIwwqB,EAAkBh4wB,EAAK5nB,IAAI,OAAQ,IACnC6/xB,EAAc,UAAMj4wB,EAAK/K,MAAM,CAAC,WAAY,eAA9B,YAAgD+K,EAAK/K,MAAM,CAAC,WAAY,eACtFijxB,EAAet/d,YAAW54S,EAAK5nB,IAAI,gBAAgB,GACnDi9G,EAAQr1F,EAAK/K,MAAM,CAAC,MAAO,QAAS,IAAI5X,KAAI,SAACmhG,EAAMhuG,GACvD,OACE,eAAC08E,EAAA,EAAD,UAGE,eAACA,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,eAACqwC,EAAA,EAAD,CAASC,MAAK,UAAK/f,EAAKpmG,IAAI,cAAd,YAA+BomG,EAAKpmG,IAAI,cAAtD,SACE,gBAACgjH,EAAA,EAAD,CAAQ3tC,UAAWF,EAAQ84R,OAA3B,UACG7nQ,EAAKpmG,IAAI,eAAiBomG,EAAKpmG,IAAI,cAAc,GACjDomG,EAAKpmG,IAAI,cAAgBomG,EAAKpmG,IAAI,aAAa,SAL/ComG,EAAKpmG,IAAI,QAJX5H,MAiBL2nyB,EAAUv/d,YAAW54S,EAAK5nB,IAAI,oBAAqB,KAGrDggyB,GAFWp4wB,EAAK5nB,IAAI,MAEH,GACjBigyB,EAAqB,EAEnBC,EAAYt4wB,GAAQA,EAAK5nB,IAAI,YACjC4nB,EAAK5nB,IAAI,YAAYiF,KAAI,SAAC06K,EAA0Bp/K,GAClD,IAAMu6lB,EAASn7a,EAAS3/K,IAAI,UACtBmgyB,EAAaxgnB,EAAS3/K,IAAI,MAC1BwpU,EAAgB7pJ,EAAS3/K,IAAI,UASnC,OAPIwpU,IAAkB8iR,IAAe8zM,WACnCJ,IACIx2d,IAAkB8iR,IAAe+zM,WACnCJ,KAIG,eAACnrtB,EAAA,EAAD,CAELO,UAAW6tC,IAAW/tC,EAAQmrtB,mBAAoBnrtB,EAAQq0P,IAFrD,SAIL,gBAAC10P,EAAA,EAAD,CAAMO,UAAWF,EAAQortB,iBAAzB,UACE,eAAC9qrB,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAC1B,CAAC+0e,IAAe+zM,UAAW/zM,IAAe8zM,UAAU56xB,SAASgkU,GAAiB,CAC5ErnO,eAAgB,gBACd,GAHN,SAMIw9E,EAAS3/K,IAAI,WAAY,MAG7B,gBAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACE,eAACqvC,EAAA,EAAD,CAASC,MAAOn+F,EAAE,6BAA8Bo+F,UAAU,MAA1D,SACE,gCACE,eAACuQ,EAAA,EAAD,CACEthD,UAAWF,EAAQqrtB,eACnBrnrB,SAAUwmrB,EACV7+qB,QACE,WACEy+qB,EACEzkM,EACAqlM,EACAz+rB,OAAO,YARf,SAaE,eAAC,IAAD,CAAiC0hB,SAAS,gBAIhD,eAAC8C,EAAA,EAAD,CAASC,MAAOn+F,EAAE,gCAAiCo+F,UAAU,MAA7D,SACE,gCACE,eAACuQ,EAAA,EAAD,CACEthD,UAAWF,EAAQqrtB,eACnBrnrB,SAAUwmrB,EACV7+qB,QACE,WACEy+qB,EACEzkM,EACAqlM,EACAz+rB,OAAO,eARf,SAaE,eAAC,IAAD,CAA6B0hB,SAAS,gBAI5C,eAAC8C,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+BAAgCo+F,UAAU,MAA5D,SACE,gCACE,eAACuQ,EAAA,EAAD,CACEthD,UAAWF,EAAQqrtB,eACnBrnrB,SAAUwmrB,EACV7+qB,QACE,WACEy+qB,EACEzkM,EACAqlM,EACAz+rB,OAAO,cARf,SAaE,eAAC,IAAD,CAAwB0hB,SAAS,gBAIvC,eAAC8C,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAA+Bo+F,UAAU,MAA3D,SACE,gCACE,eAACuQ,EAAA,EAAD,CACEthD,UAAWF,EAAQqrtB,eACnBrnrB,SAAUwmrB,EACV7+qB,QACE,WACEy+qB,EACEzkM,EACAqlM,EACAz+rB,OAAO,aARf,SAaE,eAAC,IAAD,CAAmB0hB,SAAS,mBAKpC,eAACtuC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQsrtB,eAA7C,SACE,eAAChrrB,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACG3tF,EAAE,UAAD,OAAWqpjB,aAAe7nQ,IAAkBA,cA9FjDjpU,MAoGNsE,WAAWhG,UACd,KAEF,OACE,gBAACi2E,EAAA,EAAD,CACEO,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAOE,eAAC4zP,GAAA,EAAD,CACEC,WAAY,CACVhE,SAAU,CACR7jN,IAAKi+qB,EACLp7pB,IAAK,eAGTilM,UAAW9/M,EAA8B,GAAK,CAC5C,CAAEtjG,OAAQa,EAAE,oBAAqB84F,QAAS6ljB,GAC1C,CAAEx/oB,OAAQa,EAAE,sBAAuB84F,QAAS7kH,KAAKkpU,eAEnDh/M,MAAOn+F,EAAE,cACT2iT,cACE,eAAC71P,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQwrtB,oBAHrB,SAKE,eAAC7rtB,EAAA,EAAD,CAAMO,UAAWF,EAAQyrtB,oBAAzB,SACE,eAACC,EAAA,EAAD,CACEn/rB,OAAQ4qf,IAAe1kkB,EAAK5nB,IAAI,WAChCovH,SAAUA,EACVkU,WAAYrnI,KAAKo5sB,eACjByrF,WAAY7kyB,KAAKkjyB,eACjBh8pB,YAAalnI,KAAKq5sB,gBAClB+pF,aAAcpjyB,KAAKojyB,aACnBp3vB,QAEIriB,SAAiB0mkB,KAAkDrnlB,KAAI,SAACtN,EAAO4I,GAC7E,OAAO,IAAI2tN,IAAyB,CAAChxL,GAAI38B,EAAK5I,UAAQ+kD,iBAExDl/B,eASZ2lH,YAAalnI,KAAKi+T,cAIpB,gBAACplP,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SACLpB,UAAWF,EAAQzC,KAJrB,UAME,eAAC6hP,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAM83qB,IAER,gBAACrre,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTh2L,WAAW,aAFb,UAIE,gBAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UACGl6E,EAAE,yBADL,IAC+B,uBAAMqtD,UAAWF,EAAQ22P,iBAAzB,SAA4C+zd,OAE3E,gBAACpqrB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UACGl6E,EAAE,wBADL,IAC+B83wB,QAGjC,eAACvre,GAAA,EAAD,CAAWrpD,QAAS,eAAC,IAAD,IAApB,SACGjuJ,IAEH,eAACs3M,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAI,UACC9/F,EAAE,cAAD,OAAe7rB,IADjB,aACsC,YAATA,EAC3BgsR,EACS,SAAThsR,EACEsO,EACS,WAATtO,EACEqsD,EACAykO,KAGZ,eAACsnC,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTpjJ,KAAI,UAAK9/F,EAAE,kBAAP,YAA4B+3wB,GAChCvotB,QAAQ,OAKZ,gBAAC1C,EAAA,EAAD,CAAMO,UAAW6tC,IAAW/tC,EAAQzC,KAAMyC,EAAQ4rtB,iBAAlD,UAGuB,IAAnBf,GACE,eAACzre,GAAA,EAAD,CAAWrpD,QAAS,eAAC,IAAD,IAApB,SACE,gBAACp2L,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UACE,eAACjB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQ6rtB,qBAA7C,SACE,eAAClwe,EAAA,EAAD,CACEn7M,QAAQ,cACRh+G,MAAQsoyB,EAAmBD,EAAkB,IAC7C3qtB,UAAWF,EAAQ8rtB,sBAGvB,gBAACxrrB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,UAA6C+9rB,EAA7C,IAAkED,UAKzEE,Y,GAlc6Bx/vB,aAwkBzBwwC,qBACbgG,aAhIa,SAACC,GAAD,gBACb3jE,KAAM,CACJ6jE,QAAS,QAEX3E,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,GACvB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BuU,WAAY,OACZ,MAAO,CACLzzB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B4jE,eAAgB,SAGpB0pO,kBAAmB,CACjB3pO,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B47pB,oBAAqB,CACnBporB,UAAWphC,EAAMZ,UACjB+4C,aAAcn4C,EAAMZ,WAEtBqqtB,oBAAqB,CACnB5pqB,WAAY,QACZtT,aAAcvsC,EAAM4/C,MAAMrT,cAE5BooN,iBAAkB,CAChB5pO,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,MAE/BwiwB,gBAAiB,CACf3oqB,UAAW,mCACXvU,aAAc,oCAEhBy8qB,mBAAoB,CAClB/nrB,UAAWphC,EAAMZ,QAAQ,KACzBstC,aAAc,mCACd6Z,WAAY,QACZ9Z,YAAazsC,EAAMZ,QAAQ,KAE7BgqtB,iBAAkB,CAChBhorB,UAAWphC,EAAMZ,QAAQ,IACzB4tC,WAAYhtC,EAAMZ,QAAQ,OAvCf,cAyCZ+1gB,IAAe40M,WAAa,CAC3Bh/rB,MAAOt8E,QAAgBuxD,EAAM+pC,QAAS,CAAC,SAAU,cAAe,UA1CrD,cA4CZore,IAAe8zM,SAAW,CACzBl+rB,MAAOt8E,QAAgBuxD,EAAM+pC,QAAS,CAAC,SAAU,aAAc,UA7CpD,cA+CZore,IAAe60M,QAAU,CACxBj/rB,MAAOt8E,QAAgBuxD,EAAM+pC,QAAS,CAAC,SAAU,WAAY,UAhDlD,cAkDZore,IAAe+zM,UAAY,CAC1Bn+rB,MAAOt8E,QAAgBuxD,EAAM+pC,QAAS,CAAC,SAAU,aAAc,UAnDpD,+BAqDG,CACdgI,UAAW,QACXi6O,UAAW,WAvDA,qCAyDS,CACpBA,UAAW,WA1DA,kCA4DM,CACjBliP,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtC,QAAS,CACP9jB,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU1gG,QA/DhC,uBAkEL,CACNg5C,MAAOJ,EAAMZ,QAAQ,GACrBi3C,OAAQr2C,EAAMZ,QAAQ,GACtBiB,OAAQ,EACR0qB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1BF,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC6P,cAAe,YACf5N,SAAUjsC,EAAM82C,WAAW7K,SAC3B3F,YAAatmC,EAAMZ,QAAQ,OA1EhB,wBA4EJ,CACP+5C,cAAe,SA7EJ,sBA+EN,CACLv4C,QAASZ,EAAMZ,UACf0qC,gBAAiB,mBACjB/e,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,QAlFjB,+BAoFG,CACdhtD,QAASZ,EAAMZ,QAAQ,MArFZ,KAiIbn7B,YAAgB,gBAChB0/D,mBAzCsB,SAAC73E,EAAOyF,GAC9B,IAAM2e,EAA2B,WAAlB3e,EAASvsC,MAAqBusC,EAASukP,OAAS11I,aAAiB,CAAEhvF,SAAU7f,EAASukP,QAAtC11I,CAAgDt0G,GAASrd,QACxH,OAAO,aACLyhC,UACGtY,YAAyB,CAC1BuwvB,qBAAsBvkM,cACtBk7J,gBAAiBnviB,cACjB44kB,SAAUjppB,gBACV+vhB,YAAavpnB,gBACbwtE,4BAA6B7mE,gBAL5B7U,CAMA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACL64vB,WAAY,SAAC3kM,GACXl0jB,EAAS,IAAI4pP,IAAiB,CAAC4wgB,eAAgBtmM,MAEjDykM,mBAAoB,SAACzkM,EAAgBqlM,EAAoBz+rB,GACvD96D,EAAS,IAAIooP,IAAgC,CAAC8rU,SAAQqlM,aAAYz+rB,aAEpE89rB,wBAAyB,SAAC53wB,EAAkBijkB,GAC1CjkjB,EAAS,IAAIsoP,IAAuC,CAClDtnQ,OACAijkB,gBAGJgmB,YAAa,SAAC3zkB,GACZ0J,EAAS,IAAImyB,MAAkB,CAAE77B,SAEnC4ykB,cAAe,SAACvnjB,GACd3hB,EAAS,IAAIutB,MAAoB,CAAE5L,eAErC3hB,eAIWsqC,CAIbgutB,I,iLCngBI37qB,GAAgB,CACpBC,QAAS,SAACC,EAAUxgF,GAAX,mBAAC,eACLwgF,GADI,IAEP0xoB,WAAalytB,EAAM+uF,UAA0B,UAAd,YAC/BpO,YAAa,YACbE,UAAW,MACXJ,aAAc,SAEhBK,eAAgB,SAACN,GAAD,mBAAC,eACZA,GADW,IAEdkhB,YAAa,KAEf3gB,kBAAmB,iBAAO,CACxB3sC,QAAS,SAEX8nQ,mBAAoB,iBAAO,CACzB9nQ,QAAS,SAEXgrjB,gBAAiB,SAAC5+gB,GAAD,mBAAC,eACbA,GADY,IAEfiP,WAAY,aAKV2uqB,G,4MACGp+vB,MAAQ,CACbq+vB,kBAAmB,EAAKn7vB,MAAMm5vB,qBAAqBzgyB,UACnD0iyB,YAAa,GACbC,kBAAmB3yxB,cAAI,IACvB4yxB,mBAAoB/jyB,QACpBgkyB,uBAAuB,G,EA+BlB1rC,WAAa,WAAsB,IAArBv8nB,EAAoB,uDAAP,GAChC,EAII,EAAKtzF,MAHP6vtB,EADF,EACEA,WACAzysB,EAFF,EAEEA,cACA0ysB,EAHF,EAGEA,gBAGI39W,EAAoB29W,EAAkBA,EAAgBj2vB,IAAI,cAAgB,KAC1E2iD,EAA+B,SAAtB21V,EAA+B29W,EAAgBp5uB,MAAM,CAAC,YAAa,OAAQ,OAAS,KAC7F0rC,EAAiC,WAAtB+vV,EAAiC29W,EAAgBp5uB,MAAM,CAAC,YAAa,SAAU,OAAS,KACzGm5uB,EAAW,CACTv8nB,aACAt1B,QAAS9+E,iBAAO,CAACs8wB,eAAc,OAAEp+uB,QAAF,IAAEA,OACjCy2jB,gBAAuC,WAAtB1hO,IAAA,OAAiC/0V,QAAjC,IAAiCA,MAClDZ,SACA4F,c,EAIG2xQ,YAAc,WACnB,IACEA,EACE,EAAK/zR,MADP+zR,YAIF,EAAKr7M,SAAS,CACZyirB,kBAAmB,KAErBpne,K,EAGK3B,SAAW,SAACnxT,GACjB,MAOI,EAAK++B,MANP+zR,EADF,EACEA,YACA9iN,EAFF,EAEEA,WACAmD,EAHF,EAGEA,cACA3zE,EAJF,EAIEA,SACAzqC,EALF,EAKEA,KACA8wR,EANF,EAMEA,OAGF,EAII,EAAKhqP,MAHPu+vB,EADF,EACEA,kBACAC,EAFF,EAEEA,mBAIE9hnB,EANJ,EAGE2hnB,kBAKF,GAAwB,IAApB3hnB,EAAS7hL,OAAc,CACzB,UAAIs5G,QAAJ,IAAIA,OAAJ,EAAIA,EAAYl3G,IAAI,MAElB,YADA,EAAK2+G,SAAS,CAAC6irB,uBAAuB,IAGtC/hnB,EAAW,CAAEt6J,iBAAO,CAAEs6J,SAAUvoE,EAAWp3G,IAAI,gBAE5C,GAAI2/K,EAASj2K,MAAK,SAAAk4xB,GAAS,OAAKA,EAAU5hyB,IAAI,eACnD,OAKF,IAAM41vB,EAAgBvwuB,iBAAO+xF,EAAWv6F,MAAM,CAAC,MAAO,UAChDw4uB,EAAe96oB,EAAc19F,MAAM,CAAC,MAAO,SAC3C+owB,EAAWx+wB,EAAOq9G,OAAO,YAIzB78F,EAAOvC,iBAAO,2BACfugwB,EAASprwB,QADK,IAEjBqnxB,WAAY1lyB,EACZ2lyB,SAAU70gB,KAGN80gB,EAAiB18wB,iBAAOgwuB,EAAa7tvB,QAAO,SAAC4+F,GACjD,OAAQwvpB,EAAcpwvB,SAAS4gG,MAC9BnhG,KAAI,SAACmhG,GACN,OAAOA,EAAKpmG,IAAI,UAGlB4mC,EAAS,IAAI0oP,IAAyB,CACpC1nQ,OACA+3J,SAAUt6J,iBAAOs6J,GACjB6hnB,oBACAC,mBAAoBp8wB,iBAAOo8wB,GAC3B7rC,gBACAmsC,oBAEF7ne,K,EAGK8ne,SAAW,SAAC/krB,GACjB,MAGI,EAAK92E,MAFPi7vB,EADF,EACEA,eACAa,EAFF,EAEEA,UAGEhlrB,GACFA,EAAMh4G,KAAI,SAACi9xB,EAAc9pyB,GACvB,IAAM+pyB,EAAiBD,EAAaliyB,IAAI,MACxC,OAAOiiyB,EAAU,CACfnnM,OAAQsmM,EACRjlyB,KAAM+sqB,KAAck5H,KACpBn1gB,OAAQk1gB,Q,EAMTE,WAAa,SAACplrB,GACnB,MAGI,EAAK92E,MAFPi7vB,EADF,EACEA,eACAkB,EAFF,EAEEA,aAGErlrB,GACFA,EAAMh4G,KAAI,SAACi9xB,EAAc9pyB,GACvB,IAAM+pyB,EAAiBD,EAAaliyB,IAAI,MAExC,OAAOsiyB,EAAa,CAClBxnM,OAAQsmM,EACRjlyB,KAAM+sqB,KAAck5H,KACpBn1gB,OAAQk1gB,Q,EAMT7vqB,YAAc,WACW,EAAKrvF,MAAMq+vB,kBAAkB95xB,QAAO,SAAA+6xB,GAAY,OAAIA,EAAaviyB,IAAI,cAAgB,EAAKijC,MAAMs+vB,eAC/F,KAA3B,EAAKt+vB,MAAMs+vB,aAGf,EAAK1irB,SAAS,CACZyirB,kBAAkB,GAAD,oBAAM,EAAKr+vB,MAAMq+vB,mBAAjB,CAAoCj8wB,iBAAO,CAACs6J,SAAU,EAAK18I,MAAMs+vB,gBAClFA,YAAa,GACbG,uBAAuB,K,EAIpBv8d,aAAe,SAAC/sU,GAErB,MAGI,EAAK6qC,MAFPq+vB,EADF,EACEA,kBACAG,EAFF,EAEEA,mBAKItB,EAFWmB,EAAkBlpyB,GAEP4H,IAAI,MACd,MAAdmgyB,GAEFsB,EAAmBp5xB,KAAK83xB,GAG1B,IAAM7yqB,EAAQ,uBACTg0qB,EAAkBv1xB,MAAM,EAAG3T,IADlB,aAETkpyB,EAAkBv1xB,MAAM3T,EAAQ,KAGrC,EAAKymH,SAASxkH,OAAO+8C,OAAO,CAC1BkqvB,kBAAmBh0qB,EACnBm0qB,sBACqB,IAApBn0qB,EAASxvH,QAAgB,CAC1B4jyB,uBAAuB,M,EAIpBc,aAAe,YAA+B,IAA7B9hrB,EAA4B,EAA5BA,MAAc47I,EAAc,EAArBh6J,KAAOg6J,QACpC,EAII,EAAKn2N,MAHPixE,EADF,EACEA,WACAjiC,EAFF,EAEEA,QACAntD,EAHF,EAGEA,EAGF,EAII,EAAKib,MAHPq+vB,EADF,EACEA,kBACAI,EAFF,EAEEA,sBACAH,EAHF,EAGEA,YAGIkB,EAAgBnmiB,GAAwC,IAA7BgliB,EAAkBxjyB,OAC7CsM,GAAkB,OAAVgtG,QAAU,IAAVA,OAAA,EAAAA,EAAYl3G,IAAI,SAAUuiyB,GAAiBf,GAEzD,OACA,gBAAC3kqB,GAAA,EAAD,CAAa3yH,MAAOA,EAAO0rG,WAAW,EAAtC,UACE,eAACq8M,GAAA,EAAD,2BACMzxM,GADN,IAEErrC,UAAWm0C,IAAWr0C,EAAQuttB,cAAevttB,EAAQmrtB,oBACrD1qrB,WAAY,CACVvgC,UAAWm0C,IAAWr0C,EAAQ8+qB,YAEhChtoB,YAAaq6qB,EAAkBxjyB,QAAU,EAAIkqB,EAAE,4BAAlC,UAAmEA,EAAE,4BAArE,MACbrwB,MAAO4pyB,EACPn3xB,MAAOA,KAERA,GAAS,eAAC45X,GAAA,EAAD,CAAgB9mW,GAAG,uBAAnB,SAA2ClV,EAAE,6B,uDAhO3D,WACE,MAOI/rB,KAAKkqC,MANP0qkB,EADF,EACEA,YACAf,EAFF,EAEEA,cACAsxL,EAHF,EAGEA,eACAjlyB,EAJF,EAIEA,KACA8wR,EALF,EAKEA,OACAyygB,EANF,EAMEA,SAGW,SAATvjyB,GAAmB8wR,IAAWyygB,EAAS1/xB,IAAI,OAC7C6wmB,EAAY5jV,GAGD,WAAT9wR,GAAqB8wR,GACvB6iV,EAAc7iV,IAIQ,IAApBm0gB,GACFnlyB,KAAK4iH,SAAS,CACZyirB,kBAAmB,KAIvBrlyB,KAAK+5vB,e,oBA4MP,WAAiB,IAAD,OACd,EAcI/5vB,KAAKkqC,MAbPgvC,EADF,EACEA,QACAwxlB,EAFF,EAEEA,aACAzsW,EAHF,EAGEA,YACAoE,EAJF,EAIEA,aACAz3G,EALF,EAKEA,SACA7xE,EANF,EAMEA,cACAptH,EAPF,EAOEA,KACAzrB,EARF,EAQEA,KACA8wR,EATF,EASEA,OACAgpe,EAVF,EAUEA,gBACAypC,EAXF,EAWEA,SACAr4uB,EAZF,EAYEA,OACAr/B,EAbF,EAaEA,EAGAw5wB,EACEvlyB,KAAKgnC,MADPu+vB,kBAEIr5gB,EAAc8te,GAAmBA,EAAgBj2vB,IAAI,OAAQgoB,EAAE,kBAE/Di1F,EAAQ+3B,EAAch1I,IAAI,UAC1Bi1I,EAAcD,EAAch1I,IAAI,eAGhCyK,EAAO,CAFKi1xB,GAAYA,EAAS1/xB,IAAI,aAC1B0/xB,GAAYA,EAAS1/xB,IAAI,aACPwH,QAAO,SAAA0K,GAAG,MAAY,KAARA,KAAYwL,KAAK,KAC5D8qC,EAAanB,GAAUA,EAAOrnD,IAAI,cAGtCshyB,EACErlyB,KAAKgnC,MADPq+vB,kBAUIjrC,GAPexviB,EAAS5hN,KAAI,SAAC+kR,GACjC,OAAO3kQ,iBAAO,CACZ6X,GAAI8sP,EAAQhqR,IAAI,MAChBrI,MAAOqyR,EAAQhqR,IAAI,aAEpBwd,SAEey/F,EAAMh4G,KAAI,SAACmhG,GAC3B,IAAMu8rB,EAAev8rB,EAAKvpF,MAAM,CAAC,OAAQ,iBAAmBupF,EAAKvpF,MAAM,CAAC,OAAQ,mBAChF,OAAOwI,iBAAO,CACZ6X,GAAIkpE,EAAKpmG,IAAI,MACbrI,MAAM,GAAD,OAAKyuG,EAAKpmG,IAAI,aAAd,YAA8BomG,EAAKpmG,IAAI,YAAvC,YAAsD2iyB,EAAY,YAAQA,GAAiB,MAChGpiyB,IAAK6lG,EAAKpmG,IAAI,WAEfwd,UAEGolxB,EAAiBv9wB,iBAAOi8wB,GAAmBr8xB,KAAI,SAAC06K,EAAUvnL,GAC9D,OAAO,gBAAC08E,EAAA,EAAD,CAELW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLpB,UAAWm0C,IAAWr0C,EAAQmrtB,mBAAoBnrtB,EAAQ0ttB,aALrD,UAOL,eAAC/ttB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQuttB,cAA7C,SACE,gBAAC3lqB,GAAA,EAAD,CAAa3yH,OAAQu1K,EAAS3/K,IAAI,YAAa81G,WAAW,EAA1D,UACE,eAAC2K,GAAA,EAAD,CACE9oH,MAAOgoL,EAAS3/K,IAAI,YACpB41G,WAAY,CACVvgC,UAAWm0C,IAAWr0C,EAAQ8+qB,YAEhCx8oB,SACE,SAACpzG,GACC,IAAMy+xB,EAAS,aAAOxB,GAGtB,GAFAwB,EAAU1qyB,GAAS0qyB,EAAU1qyB,GAAOuL,IAAI,WAAYU,EAAE4kB,OAAOtxB,OAEzDgoL,EAAS3/K,IAAI,MAAO,CACtB,IAAM+iyB,EAAuBvB,EAAkB79xB,IAAIg8K,EAAS3/K,IAAI,MAAO2/K,EAAS3/K,IAAI,OACpF,EAAK6+G,SAAS,CACZyirB,kBAAmBwB,EACnBtB,kBAAmBuB,SAGrB,EAAKlkrB,SAAS,CACZyirB,kBAAmBwB,QAM3BnjnB,EAAS3/K,IAAI,aACb,eAACgkY,GAAA,EAAD,CAAgB9mW,GAAG,uBAAnB,SAA2ClV,EAAE,gCAInD,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC8/C,EAAA,EAAD,CACE7V,QAAS,kBAAM,EAAKqkN,aAAa/sU,IACjCi9E,UAAWF,EAAQ6ttB,cAFrB,SAIE,eAAC,KAAD,CAAY5/qB,SAAS,gBA1CpBhrH,MA8CNolB,SAASnV,KACV,gBAACysE,EAAA,EAAD,CAEEW,WAAW,EACXJ,UAAWF,EAAQ8ttB,uBAHrB,UAKE,eAACnutB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,SAAD,CACEpsE,KAAK,WACL8qE,UAAWt5E,KAAKumyB,aAChB/qrB,SACE,SAACpzG,GAGC,EAAKw6G,SAAS,CACZ0irB,YAAal9xB,EAAE4kB,OAAOtxB,aAKhC,eAACm9E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC8/C,EAAA,EAAD,CACE7V,QAAS7kH,KAAKq2H,YACdj9C,UAAWF,EAAQ6ttB,cAFrB,SAIE,eAAC,KAAD,CAAS5/qB,SAAS,gBAvBlB,mBA6BR,OACE,gBAACtuC,EAAA,EAAD,CACEO,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAOE,eAAC+oP,GAAA,EAAD,CAAkBr5M,MAAOn+F,EAAE,6BAA8Bm7G,YAAalnI,KAAKi+T,cAG3E,gBAACplP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQzC,KAA7D,UACE,eAAC+iC,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAM,UACN7sB,UAAWF,EAAQgxC,MAHrB,SAKGn+F,EAAE,gCAEL,wBACEuwS,SAAU+F,EAAariU,KAAKs8T,UAD9B,UAKE,eAAC9J,GAAA,EAAD,CACEhkT,KAAK,OACLygQ,QAAS,eAAC,IAAD,CAAwB71L,UAAWF,EAAQ+ttB,cACpDhutB,WAAW,aACXssP,UAAW,GACXr7R,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,sCAEjB3wB,SAAS,GAEX4+G,SAAU,CAACmqF,QAIb,eAACm0H,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,CAAY71L,UAAWF,EAAQmhrB,WACxChrf,YAAY,EAFd,SAIE,eAAC,SAAD,CACE7gQ,KAAK,WACL8qE,UAAW4lT,KACXh1V,MAAO,CACL0xC,OAAQ0rC,GACR3N,WAAY,CACVoR,SAAS,EACTxtE,aAAc,GACdwlE,UAAWi2B,EACXx2B,cAAexiH,KAAK+5vB,WACpB/ttB,QAASoutB,EACTpvoB,YAAaj/F,EAAE,gCACfqtD,UAAWm0C,IAAWr0C,EAAQgutB,YAEhCttrB,iBAAkB,CAChBC,WAAW,QAMnB,eAACy+M,GAAA,EAAD,CACEr/O,WAAW,aACXg2L,QAAS,eAAC,IAAD,CAAgB71L,UAAYF,EAAQiutB,cAC7C93hB,YAAY,EAHd,SAKE,eAAC,SAAD,CACE7gQ,KAAK,oBACL07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAY,GAAD,OAAKj/F,EAAE,oCAAP,MACXi3K,UAAU,EACV5pH,UAAWm0C,IAAWr0C,EAAQkutB,uBAEhC1qrB,UAAW,UACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACgpF,KAAUvmF,MACrBnjC,UAAW6jC,SAKf,eAACm7M,GAAA,EAAD,CACErpD,QAAS,eAAC,IAAD,IACTI,YAAY,EAFd,SAII,eAAC71J,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEhgC,MAAO,SAA5D,mBAEOvvD,EAAE,cAAD,OAAe7rB,IAFvB,aAE4C,YAATA,EAC7BgsR,EACS,SAAThsR,EACEsO,EACS,WAATtO,EACEqsD,EACAykO,OAMd,eAACsnC,GAAA,EAAD,CACEp/O,QAAS,CACP3hE,KAAM2hE,EAAQmutB,iBAEhBp4hB,QAAS,eAAC,IAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,8BAEV,eAAC8sD,EAAA,EAAD,UAEI8ttB,IAIJ,eAACpoN,GAAA,EAAD,CAAer3c,YAAqB,MAARv7G,EAAe++oB,EAAezsW,iB,GAre9Bx5R,aA0iB3B80K,GAAY,WAsFVtkI,qBACbgG,aApJa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GAEN2yG,MAAO,CACLmJ,aAAcn4C,EAAMZ,QAAQ,IAE9B7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElCqmD,YAAa,CACXrkB,UAAWphC,EAAMZ,QAAQ,IAE3B2stB,YAAa,CACX3qrB,UAAWphC,EAAMZ,WAEnB6stB,YAAa,CACX7qrB,UAAWphC,EAAMZ,QAAQ,KAE3B+/qB,SAAU,CACRhnoB,aAAcn4C,EAAMZ,WAEtBmstB,cAAe,CACbnrtB,MAAO,OACPotD,YAAaxtD,EAAMZ,WAErB+ptB,mBAAoB,CAClB5iqB,WAAY,QACZ9Z,YAAkC,GAArBzsC,EAAMZ,QAAQ,IAC3B2rB,MAAOt8E,QAAgBuxD,EAAM+pC,QAAS,CAAC,SAAU,WAAY,SAE/D+yoB,UAAW,CACTtvnB,YAAY,GAAD,OAAuB,GAAlBxtD,EAAMZ,UAAX,OAEb+stB,gBAAiB,CACf9rtB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3BystB,cAAe,CACbjrtB,QAASZ,EAAMZ,QAAQ,KAEzB4stB,UAAW,CACT,QAAS,CACPjhsB,MAAO/qB,EAAM+pC,QAAQC,KAAd,OAGXkirB,qBAAsB,CACpB,QAAS,CACP,WAAY,CACVtrtB,QAAS,EACT,SAAU,CACR,SAAU,CACRqrC,SAAUjsC,EAAMZ,QAAQ,QAMlCsstB,YAAa,CACXvzqB,aAAcn4C,EAAMZ,eA4FtBn7B,YAAgB,gBAChB0/D,mBAvFsB,SAAC73E,EAAOyF,GAC9B,IAAM9gB,EAAwB,MAAjB8gB,EAAS9gB,KAAe8gB,EAAS9gB,KAAO/Y,gBAE/C00xB,EAAU37wB,EAAK/K,MAAM,CAAC,MAAO,UAAY3I,iBACzCqmG,EAAgB3yF,EAAKzb,MACzB,CAAC,MAAO,QACRo3xB,EAAQt+xB,KACN,SAACmhG,GACC,IAAM2gO,EAAW,CAAC3gO,EAAKpmG,IAAI,cAAeomG,EAAKpmG,IAAI,cAAc0d,KAAK,MAAQ,IAC9E,OAAO0oF,EAAKziG,IAAI,QAASojU,MAE3BloU,WACD8E,IAAI,oBAAqB68T,YAAW54S,EAAK5nB,IAAI,sBAAsB,IAE9DqnD,EAA2B,WAAlB3e,EAASvsC,MAAqBusC,EAASukP,OAAS11I,aAAiB,CAAEhvF,SAAU7f,EAASukP,QAAtC11I,CAAgDt0G,GAASp0B,gBAe1H,OAAO,aACL0rG,gBACAlzD,UACGtY,YAAyB,CAC1BwZ,SAAUlD,gBACVwhK,SAAUF,cACVy6kB,eAAgBzmM,cAChB3ld,cAAeD,gBACf39B,WAAYC,yBAAcm+F,IAC1B8plB,qBAAsBvkM,cACtBk7J,gBAAiBnviB,cACjB44kB,SAAUjppB,gBACVlzF,cAAe7F,iBATd3O,CAUA9L,OAIoB,SAAC2D,EAA6B8B,GACvD,MAAO,CACLsttB,WAAY,YAAmL,IAAhLv8nB,EAA+K,EAA/KA,WAAYt1B,EAAmK,EAAnKA,QAASxhD,EAA0J,EAA1JA,OAAQ4F,EAAkJ,EAAlJA,SAAUyxjB,EAAwI,EAAxIA,gBACpDpzkB,EAAS,IAAIiwB,MAAuB,CAAE4iE,aAAYt1B,UAASxhD,SAAQ4F,WAAUyxjB,sBAE/EwpL,SAAU,SAAC57wB,GACTgf,EAAS,IAAIgqP,IAAe,CAAChpQ,WAE/BsyS,YAAa,WACXtzR,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwL,EAAS2lnB,SACbznjB,MAAM,MAGVq7rB,UAAW,SAACwB,GACV78vB,EAAS,IAAIwqP,IAAgBqygB,KAE/BnB,aAAc,SAACmB,GACb78vB,EAAS,IAAI0qP,IAAkBmygB,KAEjC5yL,YAAa,SAAC3zkB,GACZ0J,EAAS,IAAImyB,MAAkB,CAAE77B,SAEnC4ykB,cAAe,SAACvnjB,GACd3hB,EAAS,IAAIutB,MAAoB,CAAE5L,eAQrCm7uB,eAAgB,SAAC5oM,EAAgBqlM,GAC/Bv5vB,EAAS,IAAI4oP,IAAqB,CAACsrU,SAAQqlM,qBAS/C5sgB,aAAmC,CAAEt2B,SAAUznD,KAC/CguH,qBAAU,CACR9pN,KAAM87F,GACNiuH,kBAAkB,EAClBC,oBAAqB,IARVxyP,CAUbmwtB,ICpxBW9qC,GAAoB,4BAgBpBvxF,GAAmB,sBAG1Bi0F,G,4MAEG3moB,YAAc,SAACy3hB,GAAD,OAAwB,WAC3C,MAGI,EAAK5jnB,MAFPkonB,EADF,EACEA,UAGFznnB,EAJA,EAEEA,UAEO,IAAI8J,IAAiC,CAC5CxT,GAAImxnB,EACJz2mB,QAASmymB,O,4CAIb,WAAiB,IAAD,OACd,EAKI9tpB,KAAKkqC,MAJEqmS,EADX,EACE50R,QACAhwB,EAFF,EAEEA,KAFF,IAGE82G,sBAHF,MAGmB,GAHnB,EAIE2vhB,EAJF,EAIEA,SAIAlypB,EAEEuiI,EAFFviI,KACA8wR,EACEvuJ,EADFuuJ,OAGIr1O,EACI40R,IACDw4V,GACI,eAAC,GAAD,CACL3W,SAAUA,EACVzmoB,KAAMA,EACN++oB,aAAc,EAAKr0iB,cACnBn2H,KAAMA,EACN8wR,OAAQA,IAIH,eAAC,GAAD,CACLohY,SAAUA,EACVzmoB,KAAMA,EACN++oB,aAAc,EAAKr0iB,YAAY0yiB,IAC/B7oqB,KAAMA,EACN8wR,OAAQA,IAMhB,OAAO,eAACn4M,EAAA,EAAD,UAEHl9B,Q,GAnD4BlX,aAgFrBwwC,sBACbgG,aAxBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ6jE,QAAS,YAuBXj8B,YAAgB,gBAChB0/D,mBApBsB,SAAC73E,EAAOkD,GAC9B,IACEkonB,EACElonB,EADFkonB,SAEF,OAAOt/mB,YAAyB,CAC9B6I,QAASiiK,YAAkCw0c,GAC3CzmoB,KAAMgzkB,cACNl8d,eAAgBjH,YAA+B42hB,IAH1Ct/mB,CAIJ9L,MAGsB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,CAIb+nrB,K,sHC3IF,SAASztmB,IACP,IAAIm4oB,EAAM,GAKV,OAJAA,EAAI1lpB,QAAU,IAAI/iG,SAAQ,SAAUC,EAASi3B,GAC3CuxtB,EAAIxovB,QAAUA,EACdwovB,EAAIvxtB,OAASA,KAERuxtB,EAYMn4oB,QCPXhD,G,OAAQ,IASRo7oB,EAAY,EAOhB,SAAS57oB,EAAKpgI,GACZ,IACEi8wB,IACAj8wB,IAFF,QAIE4nP,KAQJ,SAASs0hB,EAAKl8wB,GACZ4gI,EAAMngJ,KAAKuf,GAENg8wB,IACHC,IACA91mB,KAOJ,SAASg2mB,EAAYn8wB,GACnB,IAEE,OADAi8wB,IACOj8wB,IAFT,QAIEmmK,KAQJ,SAAS81mB,IACPD,IAOF,SAASp0hB,IACPo0hB,IAOF,SAAS71mB,IAEP,IAAInmK,EAEJ,IAHA4nP,KAGQo0hB,QAAwC7ryB,KAA1B6vB,EAAO4gI,EAAMz4I,UACjCi4I,EAAKpgI,GAIT,IAAI9nB,EAAQ,SAAe07G,GACzB,OAAO,SAAUkF,GACf,OAAOlF,EAAS9xG,MAAK,SAAUgoE,GAC7B,OAAO+2K,EAAQ/2K,EAAR+2K,CAAW/nI,QAIpBr6G,EAAY,SAAmB29xB,GACjC,OAAO,SAAUtjrB,GACf,OAAOsjrB,EAAWtjrB,KAGlBl+G,EAAS,SAAgBouL,GAC3B,OAAO,SAAUlwE,GACf,OAAOA,EAAMvkH,OAAS2O,OAAO8lL,KAG7BxY,EAAS,SAAgBwY,GAC3B,OAAO,SAAUlwE,GACf,OAAOA,EAAMvkH,OAASy0L,IAGtBqzmB,EAAW,WACb,OAAOzjiB,KAET,SAAS/X,EAAQ73D,GAEf,IAAIszmB,EAA6B,MAAZtzmB,EAAkBqzmB,EAAWE,YAASvzmB,GAAWpuL,EAAS4hyB,YAAQxzmB,GAAW9wL,EAAQomB,YAAe0qK,GAAWpuL,EAAS2jB,YAAKyqK,GAAWvqL,EAAYg+xB,YAASzzmB,GAAWxY,EAAS,KAEtM,GAAuB,OAAnB8rnB,EACF,MAAM,IAAIrgyB,MAAM,oBAAsB+sL,GAGxC,OAAOszmB,EAAetzmB,GAGxB,IAAI0zmB,EAAM,CACRnoyB,KAAM05W,KAEJ0ub,EAAQ,SAAe3iyB,GACzB,OAAOA,GAAKA,EAAEzF,OAAS05W,KAKzB,SAAS5vV,EAAQ2/O,QACE,IAAbA,IACFA,EAAWvC,eAGb,IAAI6+P,GAAS,EACTsiS,EAAS,GAsFb,MAAO,CACL3jxB,KArDF,SAAc6zB,GAMRwtd,GAAUt8P,EAASpnP,UACrBk2B,EAAG4vvB,GACO1+hB,EAASpnP,WAGnBgmxB,EAAOn8xB,KAAKqsC,GAEZA,EAAG5sB,OAAS,WACV3c,YAAOq5xB,EAAQ9vvB,KALjBA,EAAGkxN,EAAS/kP,SA6Cd0gF,IAxEF,SAAamf,GAMX,IAAIwhZ,EAAJ,CAIA,GAAsB,IAAlBsiS,EAAO1myB,OACT,OAAO8nQ,EAASrkK,IAAImf,GAGb8jrB,EAAOz0xB,OAChB2kC,CAAGgsE,KA0DHqtE,MApCF,SAAer5I,GAMTwtd,GAAUt8P,EAASpnP,UACrBk2B,EAAG4vvB,GAIL5vvB,EAAGkxN,EAAS73E,UA0BZroF,MAvBF,WAKE,IAAIw8Z,EAAJ,CAIAA,GAAS,EACT,IAAIp4f,EAAM06xB,EACVA,EAAS,GAET,IAAK,IAAIvlyB,EAAI,EAAG+K,EAAMF,EAAIhM,OAAQmB,EAAI+K,EAAK/K,IAAK,EAE9CwlyB,EADY36xB,EAAI7K,IACVqlyB,OAWZ,SAAS1/rB,EAAazjE,EAAWguH,QAChB,IAAXA,IACFA,EAASg0G,eAGX,IACI3hO,EADA0ge,GAAS,EAETwiS,EAAOz+wB,EAAQkpI,GAEfzpD,EAAQ,WACNw8Z,IAIJA,GAAS,EAEL/7e,YAAKqb,IACPA,IAGFkjwB,EAAKh/rB,UAsBP,OAnBAlkE,EAAcL,GAAU,SAAUu/E,GAC5B6jrB,EAAM7jrB,GACRhb,IAIFg/rB,EAAKnjsB,IAAImf,MAOXl/E,EAAcyyJ,YAAKzyJ,GAEf0ge,GACF1ge,IAGK,CACL3gB,KAAM6jxB,EAAK7jxB,KACXktK,MAAO22mB,EAAK32mB,MACZroF,MAAOA,GAqFX,SAASi/rB,IACP,IAAID,EAnFN,WACE,IAAIpiwB,EAEA4/d,GAAS,EACT0iS,EAAgB,GAChBC,EAAaD,EAQbE,EAA4B,WAC1BD,IAAeD,IAInBC,EAAaD,EAAc74xB,UAGzB25F,EAAQ,WAKVw8Z,GAAS,EACT,IAAIsiS,EAASI,EAAgBC,EAC7BA,EAAa,GACbL,EAAO77xB,SAAQ,SAAU87xB,GACvBA,EAAMH,OAIV,OAAOhiwB,EAAO,IAAS6uS,MAAa,EAAM7uS,EAAKi/D,IAAM,SAAamf,GAMhE,IAAIwhZ,EAIJ,GAAIqiS,EAAM7jrB,GACRhb,SAMF,IAFA,IAAI8+rB,EAASI,EAAgBC,EAEpB5lyB,EAAI,EAAG+K,EAAMw6xB,EAAO1myB,OAAQmB,EAAI+K,EAAK/K,IAAK,CACjD,IAAIwlyB,EAAQD,EAAOvlyB,GAEfwlyB,EAAM3ub,KAAOp1P,KACf+jrB,EAAM38wB,SACN28wB,EAAM/jrB,MAGTp+E,EAAKzhB,KAAO,SAAc6zB,EAAI+zM,QACf,IAAZA,IACFA,EAAUw7iB,GAOR/hS,EACFxtd,EAAG4vvB,IAIL5vvB,EAAGohU,KAASrtH,EACZq8iB,IACAD,EAAWx8xB,KAAKqsC,GAChBA,EAAG5sB,OAASmsK,aAAK,WACf6wmB,IACA35xB,YAAO05xB,EAAYnwvB,QAEpBpS,EAAKojE,MAAQA,EAAOpjE,EAGZyiwB,GACPxjsB,EAAMmjsB,EAAKnjsB,IAaf,OAXAmjsB,EAAKnjsB,IAAM,SAAUmf,GACfA,EAAM+gJ,KACRlgK,EAAImf,GAINojrB,GAAK,WACHvisB,EAAImf,OAIDgkrB,EAQT,SAAS/iS,EAAe1jX,EAASvpG,GAC/B,IAAIgge,EAAgBz2X,EAAQ8lH,KAExB59O,YAAKuuf,KACPhge,EAAG5sB,OAAS4sf,GAGdz2X,EAAQzrE,KAAK99B,GAAI,SAAUtqC,GACzBsqC,EAAGtqC,GAAO,MAId,IAKI46xB,EALAjhwB,EAAU,EACVkhwB,EAAc,WAChB,QAASlhwB,GA+OX,SAASmhwB,EAAiBC,GACpBA,EAAaC,aACfD,EAAar9wB,SA2IjB,IAAIu9wB,IAAmBL,EAAmB,IAAqBzhiB,KAxS/D,SAAuBhgK,EAAK73D,EAAOgJ,GACjC,IAAI4wvB,EAAgB55vB,EAAMzlB,QACtBA,OAA4B,IAAlBq/wB,EAA2B/hsB,EAAIt9E,QAAUq/wB,EACnD10mB,EAAUllJ,EAAMklJ,QAChB20mB,EAAQ75vB,EAAM65vB,MAEdC,EAAS,SAAgB9krB,GACvBA,aAAiB78G,MACnB6wC,EAAGgsE,GAAO,IAIR6jrB,EAAM7jrB,IAAW6krB,EAKrB7wvB,EAAGgsE,GAJDhsE,EAAGitN,MAOP,IACE17O,EAAQpF,KAAK2kxB,EAAQ1giB,YAASl0E,GAAW63D,EAAQ73D,GAAW,MAC5D,MAAOvjJ,GAEP,YADAqH,EAAGrH,GAAK,GAIVqH,EAAG5sB,OAAS09wB,EAAO19wB,QA6QiEk9wB,EAAiBxhiB,KApUvG,SAAsBjgK,EAAK3+D,EAAO8P,GAChC,IAAIzuB,EAAU2e,EAAM3e,QAChBkB,EAASyd,EAAMzd,OACfg0B,EAAUvW,EAAMuW,QAOpB2ovB,GAAK,WACH,IAAIj0xB,EAEJ,IACEA,GAAUoW,EAAUA,EAAQs7E,IAAMgC,EAAI38D,UAAUzf,GAChD,MAAO/c,GAEP,YADAsqC,EAAGtqC,GAAO,GAIR+wC,GAAW8iG,YAAQpuI,GACrB8xf,EAAe9xf,EAAQ6kC,GAEvBA,EAAG7kC,OA6SmHm1xB,EAAiBvhiB,KAzH7I,SAAsBlgK,EAAK2hK,EAASxwN,EAAI83e,GACtC,IAAIi5Q,EAAej5Q,EAAOi5Q,aACtBC,EAAW3hwB,EACXhmC,EAAO1D,OAAO0D,KAAKmnQ,GAEvB,GAAoB,IAAhBnnQ,EAAKD,OAAT,CAKA,IAAIukQ,EAAiBN,YAA6BmD,EAASxwN,GAC3D32C,EAAK4K,SAAQ,SAAUpI,GACrBklyB,EAAavgiB,EAAQ3kQ,GAAMmlyB,EAAUrjiB,EAAe9hQ,GAAMA,WAN1Dm0C,EAAG0vvB,YAAQl/hB,GAAW,GAAK,KAmHmI8/hB,EAAiBthiB,KAzGnL,SAAuBngK,EAAK2hK,EAASxwN,EAAIi4e,GACvC,IAAI84Q,EAAe94Q,EAAO84Q,aACtBC,EAAW3hwB,EACXhmC,EAAO1D,OAAO0D,KAAKmnQ,GACnBlgJ,EAAWo/qB,YAAQl/hB,GAAW3D,YAAiBxjQ,EAAKD,QAAU,GAC9D6nyB,EAAW,GACXzjiB,GAAY,EAChBnkQ,EAAK4K,SAAQ,SAAUpI,GACrB,IAAI+hQ,EAAY,SAAmBvkH,EAAKwkH,GAClCL,IAIAK,GAAST,YAAe/jH,IAE1BrpG,EAAG5sB,SACH4sB,EAAGqpG,EAAKwkH,KAER7tN,EAAG5sB,SACHo6O,GAAY,EACZl9I,EAASzkH,GAAOw9I,EAChBrpG,EAAGswE,MAIPs9I,EAAUx6O,OAAS4iI,IACnBi7oB,EAASplyB,GAAO+hQ,KAGlB5tN,EAAG5sB,OAAS,WAELo6O,IACHA,GAAY,EACZnkQ,EAAK4K,SAAQ,SAAUpI,GACrB,OAAOolyB,EAASplyB,GAAKunB,cAK3B/pB,EAAK4K,SAAQ,SAAUpI,GACjB2hQ,GAIJujiB,EAAavgiB,EAAQ3kQ,GAAMmlyB,EAAUC,EAASplyB,GAAMA,OA6DkJykyB,EAAiBrhiB,KA1Q3N,SAAuBpgK,EAAK+8M,EAAO5rQ,EAAIusT,GACrC,IAAI97V,EAAUm7S,EAAMn7S,QAChBrG,EAAKwhT,EAAMxhT,GACXmoB,EAAOq5R,EAAMr5R,KACbW,EAAOq5U,EAAMr5U,KAGjB,IACE,IAAI/X,EAAS/Q,EAAGoF,MAAMiB,EAAS8hB,GAE/B,GAAIg3H,YAAQpuI,GAEV,YADA8xf,EAAe9xf,EAAQ6kC,GAIzB,GAAI94C,YAASiU,GAKX,YAHA+1xB,EAAKrisB,EAAK1zF,EAAQ+X,EAAKziB,QAAS4+B,EAASy+N,YAAY1jQ,IAErD,EAAO41C,GAITA,EAAG7kC,GACH,MAAOzF,GACPsqC,EAAGtqC,GAAO,KAiPoO46xB,EAAiBphiB,KA7OnQ,SAAsBrgK,EAAKk+P,EAAO/sT,GAChC,IAAIvvC,EAAUs8V,EAAMt8V,QAChBrG,EAAK2iW,EAAM3iW,GACXmoB,EAAOw6U,EAAMx6U,KAKjB,IACE,IAAI4+wB,EAAQ,SAAex4vB,EAAK0wG,GAC1BinH,YAAM33N,GACRqH,EAAGqpG,GAEHrpG,EAAGrH,GAAK,IAIZvuC,EAAGoF,MAAMiB,EAAS8hB,EAAK1f,OAAOs+xB,IAE1BA,EAAM/9wB,SACR4sB,EAAG5sB,OAAS+9wB,EAAM/9wB,QAEpB,MAAO1d,GACPsqC,EAAGtqC,GAAO,KAsN0Q46xB,EAAiBnhiB,KAlNzS,SAAuBtgK,EAAKs+P,EAAOntT,EAAI4oa,GACrC,IAAIn4c,EAAU08V,EAAM18V,QAChBrG,EAAK+iW,EAAM/iW,GACXmoB,EAAO46U,EAAM56U,KACb09O,EAAWk9F,EAAMl9F,SACjBhsN,EAAS2ka,EAAM11b,KACfk+wB,EAjKN,SAA4BxjwB,GAC1B,IAAIn9B,EAAUm9B,EAAKn9B,QACfrG,EAAKwjC,EAAKxjC,GACVmoB,EAAOqb,EAAKrb,KAGhB,IACE,IAAIpX,EAAS/Q,EAAGoF,MAAMiB,EAAS8hB,GAE/B,GAAIrrB,YAASiU,GACX,OAAOA,EAGT,IAAIuwI,GAAW,EAkBf,OAAOv5H,aAhBI,SAAcF,GACvB,OAAKy5H,EAQI,CACLzoJ,MAAOgvB,EACPpqB,MAAM,IATR6jJ,GAAW,EAEJ,CACLzoJ,MAAOkY,EACPtT,MAAO0hJ,YAAQpuI,QAWrB,MAAOw9B,GAGP,OAAOxmB,aAAa,WAClB,MAAMwmB,MA6HS04vB,CAAmB,CACpC5gyB,QAASA,EACTrG,GAAIA,EACJmoB,KAAMA,IAEJq7E,EAhLN,SAA6B1mG,EAAUkD,GACrC,OAAIlD,EAASulQ,eACJ,CACL12P,KAAM7O,EAAS0mG,KAAK73F,MAIjB+3P,YAAY1jQ,GAyKRknyB,CAAoBF,EAAchnyB,GAC7CilyB,GAAY,WACV,IAAI5tvB,EAAQyvvB,EAAKrisB,EAAKuisB,EAAcntvB,EAAOxzC,QAAS4+B,EAASu+D,EAAMqiK,OAAU5sQ,GAEzE4sQ,EACFjwN,EAAGyB,GAECA,EAAMivvB,aACRzsvB,EAAO6vG,MAAMy9oB,QAAQ9vvB,GACrBzB,EAAGyB,IACMA,EAAM+vvB,YACfvtvB,EAAO6vG,MAAMsvH,MAAM3hO,EAAM/rC,SAEzBsqC,EAAGyB,OA0LqT6uvB,EAAiBlhiB,KApLjV,SAAuBvgK,EAAK+hK,EAAa5wN,EAAImpa,GAC3C,IAAIj2b,EAAOi2b,EAAMj2b,KAEbu+wB,EAAiB,SAAwBC,EAAY1xvB,GACvD,GAAI0xvB,EAAWhB,YAAa,CAC1B,IAAIiB,EAAS,CACXz+wB,KAAMA,EACN8sB,GAAIA,GAGNA,EAAG5sB,OAAS,WACNs+wB,EAAWhB,aAAaj6xB,YAAOi7xB,EAAWE,QAASD,IAGzDD,EAAWE,QAAQj+xB,KAAKg+xB,QAEpBD,EAAWF,YACbxxvB,EAAG0xvB,EAAWh8xB,SAAS,GAEvBsqC,EAAG0xvB,EAAWv2xB,WAKpB,GAAIu0xB,YAAQ9+hB,GAAc,CACxB,GAA2B,IAAvBA,EAAYxnQ,OAEd,YADA42C,EAAG,IAIL,IAAI2tN,EAAiBN,YAA6BuD,EAAa5wN,GAC/D4wN,EAAY38P,SAAQ,SAAUqf,EAAG/oB,GAC/BknyB,EAAen+wB,EAAGq6O,EAAepjQ,YAGnCknyB,EAAe7giB,EAAa5wN,IAiJwUswvB,EAAiBuB,KAvIzX,SAAyBhjsB,EAAK+hK,EAAa5wN,EAAI82e,GAC7C,IAAI5jgB,EAAO4jgB,EAAO5jgB,KAEd09O,IAAgBC,IAClB2/hB,EAAiBt9wB,GACRw8wB,YAAQ9+hB,GACjBA,EAAY38P,QAAQu8xB,GAEpBA,EAAiB5/hB,GAGnB5wN,KA4HoZswvB,EAAiBhhiB,KAzDva,SAAyBzgK,EAAKwpb,EAAQr4e,GACpC,IAAIhI,EAAWqgf,EAAOrgf,SAClBzlB,EAAO8lgB,EAAO9lgB,KAElB,IAEEytB,EADYhI,EAASxoC,WAAM,EAAQ,CAACq/F,EAAI3gE,YAAYr7B,OAAO0f,KAE3D,MAAO7c,GACPsqC,EAAGtqC,GAAO,KAiDob46xB,EAAiB/giB,KA7Cnd,SAA0B1gK,EAAKurb,EAAQp6e,GACrC,IAAIk8I,EAAUk+V,EAAOl+V,QAEjB8zmB,EAAOz+wB,EADE6ogB,EAAO3/X,QAEhB3kH,EAAQi+M,EAAQ73D,GAEhB6zmB,EAAQ,SAASA,EAAMt9wB,GACpBo9wB,EAAMp9wB,IACTo8E,EAAIt9E,QAAQpF,KAAK4jxB,EAAOj6vB,GAG1Bk6vB,EAAKnjsB,IAAIp6E,IAGPu+E,EAAQg/rB,EAAKh/rB,MAEjBg/rB,EAAKh/rB,MAAQ,WACX++rB,EAAM38wB,SACN49E,KAGFnC,EAAIt9E,QAAQpF,KAAK4jxB,EAAOj6vB,GACxBkK,EAAGgwvB,IAuBkfM,EAAiBwB,KApBxgB,SAA4BjjsB,EAAKtsD,EAAMvC,EAAI87e,GAEzC97e,EADW87e,EAAO5ogB,KACV2yhB,gBAkBiiByqP,EAAiB7giB,KAf5jB,SAAwB5gK,EAAKt9E,EAASyuB,GACpCzuB,EAAQ8nK,MAAMr5I,IAcqkBswvB,EAAiB5giB,KAXtmB,SAA6B7gK,EAAKu7C,EAAMpqG,EAAIo+e,GAE1Cp+e,EADWo+e,EAAOlrgB,KACVziB,QAAQ25I,KASwnBkmpB,EAAiB3giB,KAN3pB,SAA6B9gK,EAAKp9D,EAAOuO,EAAIg/e,GAC3C,IAAI9rgB,EAAO8rgB,EAAO9rgB,KAClBg5O,YAAkBh5O,EAAKziB,QAASghC,GAChCuO,KAG6rBswvB,GAmF/rB,SAASyB,EAAe73e,EAAU83e,GAChC,OAAO93e,EAAW,IAAM83e,EAiB1B,SAASC,EAAqBC,GAC5B,IAAIn8xB,EAAOm8xB,EAASn8xB,KAChBi7C,EAAWkhvB,EAASlhvB,SAExB,OAAIA,EACKj7C,EAAO,KAAOg8xB,EAAe/gvB,EAASkpQ,SAAUlpQ,EAASghvB,YAG3Dj8xB,EAGT,SAASo8xB,EAAuBxliB,GAC9B,IAAIyliB,EAAiBxnxB,aAAQ,SAAUrgB,GACrC,OAAOA,EAAE6nyB,iBACRzliB,GAEH,OAAKyliB,EAAehpyB,OAIb,CAAC,iCAAiCyJ,OAAOu/xB,GAAgBppxB,KAAK,MAH5D,GAMX,IAAIqpxB,EAAgB,KAChB1liB,EAAY,GAKZlyP,EAAQ,WACV43xB,EAAgB,KAChB1liB,EAAUvjQ,OAAS,GAkBjBZ,EAAW,WACb,IAAI8pyB,EAAY3liB,EAAU,GACtB4liB,EAAa5liB,EAAUt1P,MAAM,GAC7Bm7xB,EAAwBF,EAAUD,cAlExC,SAAgCtgxB,GAC9B,IAAIi/B,EAAW+8M,YAAYh8O,GAE3B,OAAIi/B,EACSA,EAASu+C,KAGA,KAAOwisB,EAFZ/gvB,EAASkpQ,SACPlpQ,EAASghvB,YAKrB,GAuD+CS,CAAuBH,EAAUD,eAAiB,KAExG,MAAO,CADY,oCAAsCJ,EAAqBK,EAAU1ksB,OAAS4ksB,EAAwB,6BAA+BA,EAAwB,KAC1J3/xB,OAAO0/xB,EAAWhiyB,KAAI,SAAUwE,GACpD,MAAO,kBAAoBk9xB,EAAqBl9xB,EAAE64F,SAChD,CAACuksB,EAAuBxliB,KAAa3jP,KAAK,OAGhD,SAAS0pxB,EAAQ7jsB,EAAK8jsB,EAAUC,EAAeC,EAAgBjlsB,EAAMklsB,EAAQC,GAC3E,IAAIC,OAES,IAATD,IACFA,EAAO/8oB,KAGT,IACIi9oB,EACAC,EAFAlmsB,EAtjBQ,EAyjBRmmsB,EAAc,KACdC,EAA2B,GAC3B3iyB,EAAU9K,OAAOC,OAAOgtyB,GACxB9+oB,EA3JN,SAAmB6+oB,EAAUU,EAASN,GACpC,IACI53xB,EADAgrlB,EAAQ,GAER34V,GAAY,EAOhB,SAAS4V,EAAMzqO,GACb06vB,IACAC,IACAP,EAAKp6vB,GAAK,GAGZ,SAAS44vB,EAAQr+wB,GACfizkB,EAAMxylB,KAAKuf,GAEXA,EAAK6/wB,KAAO,SAAU1ppB,EAAKwkH,GACrBL,IAIJ/2P,YAAO0vlB,EAAOjzkB,GACdA,EAAK6/wB,KAAO/8oB,IAER63G,EACFuV,EAAM/5H,IAEFn2H,IAASy/wB,IACXx3xB,EAASkuI,GAGN88c,EAAM/8lB,SACTokQ,GAAY,EACZuliB,EAAK53xB,OAMb,SAASm4xB,IACH9liB,IAIJA,GAAY,EACZ24V,EAAMlylB,SAAQ,SAAUqf,GACtBA,EAAEy/wB,KAAO/8oB,IACT1iI,EAAEF,YAEJ+ykB,EAAQ,IAGV,OAnDAorM,EAAQoB,GAmDD,CACLpB,QAASA,EACT+B,UAAWA,EACXlwhB,MAAOA,EACPmwhB,SArDa,WACb,OAAOptM,IAoJGqtM,CAAUb,GAAU,WAC9BS,EAAyBz/xB,KAAKnE,MAAM4jyB,EAA0Bt/oB,EAAMy/oB,WAAWhjyB,KAAI,SAAU+iB,GAC3F,OAAOA,EAAEs6E,KAAK73F,WAEfhS,GAoBH,SAASA,EAAIoX,EAAQ0yP,GACnB,GAAKA,EAWE,CAOL,GANA7gK,EA/lBQ,GA2gB2Bk3L,EAqFtB,CACXt2L,KAAMA,EACNwksB,eAAgBgB,IAtFhBf,cAAgBA,EACtB1liB,EAAUh5P,KAAKuwR,GAwFPhxQ,EAAK4/wB,OAAQ,CACf,IAAInmiB,EAAYnkQ,IAGhBiS,IACAo0F,EAAI0ie,QAAQp2jB,EAAQ,CAClBwxP,UAAWA,IAIfumiB,EAAY/3xB,EACZg4xB,GAAeA,EAAYz1tB,OAAOviE,QA1B9BA,IAAWgyP,IACbngK,EAxlBQ,MAylBCA,IACTA,EAxlBG,GA2lBLimsB,EAAa93xB,EACbg4xB,GAAeA,EAAY1svB,QAAQtrC,GAlFtB,IAAsB+oR,EAwGrChxQ,EAAK6/wB,KAAK53xB,EAAQ0yP,GAClB36O,EAAK0+wB,QAAQ39xB,SAAQ,SAAU09xB,GAC7BA,EAAO3xvB,GAAG7kC,EAAQ0yP,MAEpB36O,EAAK0+wB,QAAU,KA2BjB,IAAI1+wB,IAAQ8/wB,EAAQ,IAAU3xb,MAAQ,EAAM2xb,EAAMxqwB,GAAKqqwB,EAAgBG,EAAMplsB,KAAOA,EAAMolsB,EAAMF,OAASA,EAAQE,EAAMviyB,QAAUA,EAASuiyB,EAAMpB,QAAU,GAAIoB,EAAMl/oB,MAAQA,EAAOk/oB,EAAM5/wB,OA3EzL,WAzkBY,IA0kBN45E,IAGFA,EA5kBU,EA6kBV8mD,EAAMw/oB,YAENvvyB,EAAIopQ,KAAa,KAoEqL6liB,EAAMD,KAAOA,EAAMC,EAAMjvyB,IAAMA,EAAKivyB,EAAMnwc,WAxBpP,SAAoBpxT,GAKlBy6N,YAAkBz7P,EAASghC,IAmBgPuhwB,EAAMS,UAhBnR,WACE,OAAIN,IAIJA,EAAcr8oB,IAvoBJ,IAyoBN9pD,EACFmmsB,EAAYz1tB,OAAOw1tB,GA5oBX,IA6oBClmsB,GACTmmsB,EAAY1svB,QAAQwsvB,IARbE,EAAY5ppB,SAcmRyppB,EAAMtC,UAAY,WAC1T,OArpBU,IAqpBH1jsB,GACNgmsB,EAAMntP,YAAc,WACrB,OAtpBY,IAspBL74c,GAvpBG,IAupBqBA,GAtpBnB,IAspByC2lsB,EAAS3lsB,QAC7DgmsB,EAAMxB,UAAY,WACnB,OAvpBU,IAupBHxksB,GACNgmsB,EAAM73xB,OAAS,WAChB,OAAO83xB,GACND,EAAMt9xB,MAAQ,WACf,OAAOw9xB,GACNF,GACH,OAAO9/wB,EAGT,SAASg+wB,EAAKrisB,EAAK6ksB,EAAYd,EAAeC,EAAgBjlsB,EAAMklsB,EAAQC,GAK1E,IAAIY,EAAiB9ksB,EAAI+ksB,mBAwHzB,SAAmB7hxB,EAAQi/wB,EAAU6C,GAanC,GAAItqpB,YAAQx3H,GACVk7e,EAAel7e,EAAQ8hxB,QAClB,GAAI3syB,YAAS6qB,GAElBm/wB,EAAKrisB,EAAK98E,EAAQmB,EAAKziB,QAASugyB,EAAUpjsB,GAE1C,EAAOimsB,QACF,GAAI9hxB,GAAUA,EAAO89O,KAAK,EAE/BikiB,EADmBnD,EAAgB5+wB,EAAOtqB,OAC7BonG,EAAK98E,EAAO0c,QAASolwB,EAAQE,QAG1CF,EAAO9hxB,MA1IXzqB,EAAK8rB,OAAS4iI,IAGd,IAAI28oB,EAAW,CACb/ksB,KAAMA,EACNx6E,OAiBF,WApsBY,IAqsBNu/wB,EAAS3lsB,SACX2lsB,EAAS3lsB,OArsBC,EAssBV1lG,EAAK6lQ,OAnBPngK,OAprBU,GA2rBR95E,EAAOw/wB,EAAQ7jsB,EAAK8jsB,EAAUC,EAAeC,EAAgBjlsB,EAAMklsB,EAAQC,GAC3EgB,EAAmB,CACrB7gxB,KAAMA,EACN69wB,aAAcA,GAyBhB,OAPIgC,IACFA,EAAK3/wB,OAASF,EAAKE,QAIrB9rB,IAEO4rB,EAWP,SAAS5rB,EAAK2qB,EAAK47O,GACjB,IACE,IAAI1yP,EAEA0yP,GACF1yP,EAASu4xB,EAAWnniB,MAAMt6O,GAE1BxX,KACSyyP,YAAaj7O,IAOtB0gxB,EAAS3lsB,OAhvBD,EAqvBR1lG,EAAK8rB,SAMLjY,EAASsW,YAAKiixB,EAAWlniB,QAAUkniB,EAAWlniB,OAAOW,KAAe,CAClEtlQ,MAAM,EACN5E,MAAOkqQ,MAIThyP,EAFS6xP,YAAgB/6O,GAEhBR,YAAKiixB,EAAWlniB,QAAUkniB,EAAWlniB,SAAW,CACvD3kQ,MAAM,GAGC6ryB,EAAWpsyB,KAAK2qB,GAGtB9W,EAAOtT,MAxwBF,IA8wBJ8qyB,EAAS3lsB,SACX2lsB,EAAS3lsB,OA7wBR,GAgxBH2lsB,EAASI,KAAK53xB,EAAOlY,QATrB8tyB,EAAa51xB,EAAOlY,MAAO4vyB,EAAgBvryB,GAW7C,MAAOoO,GACP,GArxBU,IAqxBNi9xB,EAAS3lsB,OACX,MAAMt3F,EAGRi9xB,EAAS3lsB,OAxxBD,EAyxBR2lsB,EAASI,KAAKr9xB,GAAO,IAiCzB,SAASq7xB,EAAah/wB,EAAQ8gxB,EAAgB7yvB,EAAI3X,QAClC,IAAVA,IACFA,EAAQ,IAGV,IAaI2rwB,EAbAhD,EAAWT,IAef,SAASsD,EAAOxqpB,EAAKwkH,GACfmmiB,IAIJA,GAAgB,EAChBh0vB,EAAG5sB,OAAS4iI,IAERnnD,EAAIolsB,cACFpmiB,EACFh/J,EAAIolsB,YAAYC,eAAelD,EAAU3npB,GAEzCx6C,EAAIolsB,YAAYE,eAAenD,EAAU3npB,IAIzCwkH,GAxUa,SAA0B97O,GAC/CsgxB,EAAgBtgxB,EAwUVqixB,CAAiBrixB,GAGnBiuB,EAAGqpG,EAAKwkH,IAlCVh/J,EAAIolsB,aAAeplsB,EAAIolsB,YAAYI,gBAAgB,CACjDrD,SAAUA,EACV6B,eAAgBA,EAChBxqwB,MAAOA,EACPtW,OAAQA,IAkCV8hxB,EAAOzgxB,OAAS4iI,IAEhBh2G,EAAG5sB,OAAS,WAEN4gxB,IAIJA,GAAgB,EAChBH,EAAOzgxB,SAEPygxB,EAAOzgxB,OAAS4iI,IAEhBnnD,EAAIolsB,aAAeplsB,EAAIolsB,YAAYK,gBAAgBtD,KAGrD2C,EAAe5hxB,EAAQi/wB,EAAU6C,IAMrC,SAAS9jlB,EAAQniL,EAAMk6O,GACrB,IAAIyshB,EAAe3mwB,EAAKrc,QACpBA,OAA2B,IAAjBgjxB,EAA0BtE,IAAesE,EACnDriwB,EAAWtE,EAAKsE,SAChBhE,EAAWN,EAAKM,SAChBsmwB,EAAe5mwB,EAAKn9B,QACpBA,OAA2B,IAAjB+jyB,EAA0B,GAAKA,EACzCP,EAAcrmwB,EAAKqmwB,YACnBQ,EAAoB7mwB,EAAK6mwB,kBACzBC,EAAe9mwB,EAAK2jiB,QACpBA,OAA2B,IAAjBmjO,EAA0BhoiB,IAAWgoiB,EAMnD,IAAK,IAAIpixB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,GAAKvnB,UAAUunB,GAG7B,IAAIkhxB,EAAa5rhB,EAAKt4Q,WAAM,EAAQ+iB,GAMpC,IAqCIqhxB,EArCA5C,EAAWT,IAuCf,GArCI0D,IAEFA,EAAYU,gBAAkBV,EAAYU,iBAAmB3+oB,IAC7Di+oB,EAAYI,gBAAkBJ,EAAYI,iBAAmBr+oB,IAC7Di+oB,EAAYE,eAAiBF,EAAYE,gBAAkBn+oB,IAC3Di+oB,EAAYC,eAAiBD,EAAYC,gBAAkBl+oB,IAC3Di+oB,EAAYK,gBAAkBL,EAAYK,iBAAmBt+oB,IAC7Di+oB,EAAYW,iBAAmBX,EAAYW,kBAAoB5+oB,IAC/Di+oB,EAAYU,gBAAgB,CAC1B3D,SAAUA,EACVlphB,KAAMA,EACNv1P,KAAMA,KA0BNkixB,EAAmB,CACrB,IAAI53tB,EAAaL,UAAQhtE,WAAM,EAAQilyB,GAEvCb,EAAoB,SAA2BiB,GAC7C,OAAO,SAAU9ixB,EAAQi/wB,EAAU6C,GAKjC,OAAOh3tB,GAJc,SAAwBmzL,GAC3C,OAAO6kiB,EAAU7kiB,EAAKghiB,EAAU6C,KAG3Bh3tB,CAA2B9qD,UAItC6hxB,EAAoBxrvB,IAGtB,IAAIymD,EAAM,CACRt9E,QAASA,EACT2gB,SAAU46N,YAAiB56N,GAC3BhE,SAAUA,EACV+lwB,YAAaA,EACb1iO,QAASA,EACTqiO,kBAAmBA,GAErB,OAAOvE,GAAY,WACjB,IAAIn8wB,EAAOg+wB,EAAKrisB,EAAK6ksB,EAAYjjyB,EAASugyB,EAAUljiB,YAAYga,IAEhE,OAAMzkR,GAMN,OAJI4wyB,GACFA,EAAYE,eAAenD,EAAU99wB,GAGhCA,KA8DI4hxB,MA1Df,SAA+B5+vB,GAC7B,IAQI6+vB,EARAnnwB,OAAiB,IAAVsI,EAAmB,GAAKA,EAC/Bs+vB,EAAe5mwB,EAAKn9B,QACpBA,OAA2B,IAAjB+jyB,EAA0B,GAAKA,EACzCD,EAAe3mwB,EAAKrc,QACpBA,OAA2B,IAAjBgjxB,EAA0BtE,IAAesE,EACnDN,EAAcrmwB,EAAKqmwB,YACnB1gwB,EAAUtC,YAA8BrD,EAAM,CAAC,UAAW,UAAW,gBAQzE,SAAS08jB,EAAep6jB,GACtB,IAAIhC,EAAWgC,EAAMhC,SACjBgE,EAAWhC,EAAMgC,SAQrB,OAPA6iwB,EAAehllB,EAAQ1mM,KAAK,KAAMgoB,YAAS,GAAIkC,EAAS,CACtD9iC,QAASA,EACT8gB,QAASA,EACT2gB,SAAUA,EACVhE,SAAUA,EACV+lwB,YAAaA,KAER,SAAU3syB,GACf,OAAO,SAAUmrB,GACXwhxB,GAAeA,EAAYW,kBAC7BX,EAAYW,iBAAiBnixB,GAG/B,IAAItX,EAAS7T,EAAKmrB,GAGlB,OADAlB,EAAQs7E,IAAIp6E,GACLtX,IAqBb,OAhBAmvlB,EAAexkG,IAAM,WAKnB,OAAOivS,EAAavlyB,WAAM,EAAQvE,YAGpCq/lB,EAAeznQ,WAAa,SAAUpxT,GAKpCy6N,YAAkBz7P,EAASghC,IAGtB64jB,GCp5CM0qM,O,mXCHTC,EACE,KAEFxrxB,EAAU,SAAC8kB,EAAO9b,GACpB,GAAQA,EAAOhrB,OACNwtyB,EACD,OAAO,2BACA1mwB,GADP,IAEIurV,WAAYrnW,EAAOgc,QAAU,EAAI,EAAIhc,EAAOgc,UAIhD,MAAM,IAAIt/B,MAAJ,kCAAqCsjB,EAAOhrB,QA6B/CytyB,MAxBf,WAAuD,IAAnC3rM,EAAkC,uDAAnB,CAAEzvO,WAAY,GAC7C,EAA0BvnV,qBAAW9oB,EAAS8/kB,GAA9C,mBAAOh7jB,EAAP,KAAc2D,EAAd,KACMijwB,EAAS,kBAAMjjwB,EAAS,CAC1BzqC,KAAMwtyB,EACNxmwB,QAASF,EAAMurV,WAAa,KAE1Bx8G,EAAS,kBAAMprO,EAAS,CAC1BzqC,KAAMwtyB,EACNxmwB,QAASF,EAAMurV,WAAa,KAE1Bs7a,EAAO,SAACjpyB,GACV+lC,EAAS,CACLzqC,KAAMwtyB,EACNxmwB,QAAStiC,KAGjB,MAAQ,CACLA,KAAMoiC,EAAMurV,WACZq7a,SACA73hB,SACA83hB,S,uCChBDr+qB,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5C3jE,KAAM,CACF+jE,MAAO,MACPC,OAAQ,UAEZ4xC,OAAQ,CACJ5xC,OAAQL,EAAMZ,WAElBu8S,QAAU,CACNv6Q,UAA6B,EAAlBphC,EAAMZ,WAErB88S,eAAgB,CACZt7S,QAA2B,EAAlBZ,EAAMZ,WAEnB48S,iBAAkB,CACdhvQ,WAAYhtC,EAAMZ,QAAQ,KAC1BgB,MAAM,cAAD,OAAgBJ,EAAM82C,WAAW7E,OAAOhG,SAAxC,gBACLoK,OAAO,cAAD,OAAgBr2C,EAAM82C,WAAW7E,OAAOhG,SAAxC,qBAKRsnC,EAAO,aAgNE6nO,EA/MmB,SAAC,GAK5B,IAAD,IAJFw3a,oBAIE,aAHFxxe,gBAGE,MAHS7tK,EAGT,EAFFmnO,EAEE,EAFFA,oBACAC,EACE,EADFA,kBAEA,EAAuDk4a,KAA/C5yrB,EAAR,EAAQA,WAAYi3P,EAApB,EAAoBA,cAAe47b,EAAnC,EAAmCA,gBAC7B90tB,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACF4pW,EAA4BjkV,sBAAYkZ,eAC9C,EAAuC+ivB,IAA/B53hB,EAAR,EAAQA,OAAQ63hB,EAAhB,EAAgBA,OAAchpyB,GAA9B,EAAwBipyB,KAAxB,EAA8BjpyB,MACxBioD,EAAgBkgK,cAChBkhlB,EAAW,SAAC9iyB,GACd,IAAMunX,EAAev3Q,EAAW1qG,MAAMtF,GAEtC,OADAinW,EAAcsgB,GACPA,GAELrwD,EAAe,SAACz9R,GAAD,OAAc,SAACz5B,GACjC,IAAM8gL,EAAUginB,EAAS9iyB,GACjB,OAARy5B,QAAQ,IAARA,KAAWqnJ,KAERiinB,EAAS,uCAAG,WAAO/iyB,GAAP,+BAAAxF,EAAA,+EAEJ22T,EAASnxT,EAAQ0nX,EAAsB/qV,SAFnC,OAGVkmwB,IAEM17b,EALI,OAKMnnW,QALN,IAKMA,OALN,EAKMA,EAAQyV,MAAM,CAAC,WAAY,UAAW,UAChDsxV,EANI,iBAMO/mW,QANP,IAMOA,OANP,EAMOA,EAAQyV,MAAM,CAAC,WAAY,WAAY,iBAN9C,QAM2D,IAC/DuxV,EAPI,iBAOGhnW,QAPH,IAOGA,OAPH,EAOGA,EAAQyV,MAAM,CAAC,WAAY,OAAQ,iBAPtC,QAOmD,IACvDizM,EARI,OAQc1oN,QARd,IAQcA,OARd,EAQcA,EAAQyV,MAAM,CAAC,WAAY,oBAC7Cm0W,EAAiD,IAAzBlhK,EAAgB93N,KAAa,IAAM83N,EAAgB7qN,KAAK,SAAA6O,GAAC,OAAIA,EAAE9T,IAAI,YAAU0d,OACrGuzV,EAAgBnhJ,EAAgBloN,QAAO,SAACutI,EAAK87O,GAC/C,IAAMrlN,EAAQqlN,EAAcjxX,IAAI,iBAAiBiF,KAAI,SAACisX,GAClD,OAAOA,EAAalxX,IAAI,YAE5B,OAAOm1I,EAAI9sI,KAAKujK,GAAOjkK,QAAQ5O,OACjCmb,kBACIi9W,EAA6C,IAAvBlgB,EAAcj5W,KAAa,IAAMi5W,EAAcvzV,OAE3EglF,IAAmB9rE,kBAAgBw6V,eAC/BtoU,EAAc,aACVq/N,YAAa19Q,KACbsmX,YAAc,SACdxiB,UACAJ,WACAC,OACAp9I,QAAS,IACT5+D,KAAM,IACNi/N,qBAAqB,GAAD,OAAKvhK,EAAgB93N,MACzC83N,gBAAiBkhK,EACjBM,mBAAmB,GAAD,OAAKrgB,EAAcj5W,MACrCi5W,cAAekgB,GACZI,YAAsBzhK,GAAiBt1M,UA/BxC,4GAAH,sDAsCTs0W,EAAwB3nV,kBAAO,GAIrC,OACI,qBAAKkuC,UAAWF,EAAQ3hE,KAAxB,SACI,eAAC,IAAD,CAAYg7W,WAAY3tX,EAAM2xX,YAAY,WAA1C,UACI,eAACC,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACI,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,kDAAD,OAAmD,QAEtH,cAAC2qW,EAAA,EAAD,UACI,cAAC79S,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACI,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,cAACuztB,EAAA,EAAD,CACI15a,WAAY51X,gBACZy9T,SAAU+F,EAAaure,GACvBh4a,oBAAqBA,EACrBC,kBAAmBA,EAJvB,SAOI,cAAClxQ,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJvB,SAMKphG,EAAE,gCApBhB,GA2BX,eAACyqW,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACI,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,kDAAD,OAAmD,QAEtH,cAAC2qW,EAAA,EAAD,UACI,cAAC79S,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACI,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,cAACg8S,EAAA,EAAD,CACIt6D,SAAU+F,EAAaure,GACvBn5a,WAAY51X,gBACZgxqB,YAAY,EAHhB,SAMI,eAACh3lB,EAAA,EAAD,CACIO,UAAWF,EAAQ29S,QADvB,UAGI,cAAClyQ,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAASkxJ,EACT38L,UAAWF,EAAQi0C,OAHvB,SAKKphG,EAAE,sBAEP,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJvB,SAMKphG,EAAE,mCA7BpB,GAqCX,eAACyqW,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACI,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,kDAAD,OAAmD,GAAK4pW,OAE3H,cAACe,EAAA,EAAD,UACI,cAAC79S,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACI,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,eAACk8S,EAAA,EAAD,CACIp5Q,UAAWvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OACpDk9F,WAAY3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OACtDm2W,UAAW57Q,EAAWp3G,IAAI,YAC1Bu4T,SAAU+F,EAAaure,GACvB96a,4BAlFI,SAACC,GACjCF,EAAsB/qV,QAAUirV,GA4ER,UAOI,cAACpuQ,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAASkxJ,EACT38L,UAAWF,EAAQi0C,OAHvB,SAKKphG,EAAE,sBAEP,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLk5E,UAAWF,EAAQi0C,OAJvB,SAMKphG,EAAE,iCA3BhB,GAmCX,eAACyqW,EAAA,EAAD,WACI,cAACC,EAAA,EAAD,UACI,cAACj9Q,EAAA,EAAD,CAAYE,QAAQ,YAAY4B,MAAO,CAAErV,MAAO,WAAhD,SAA8Dl6E,EAAE,kDAAD,OAAmD,QAEtH,cAAC2qW,EAAA,EAAD,UACI,cAAC79S,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACI,cAACX,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACI,cAAC2zqB,EAAA,EAAD,CACI/yoB,SAAU,SAACrwG,GAAD,OAAY8iyB,EAAS9iyB,IAC/BgwG,WAAYA,EACZmhN,SAAU+F,EAAa6re,GAH3B,SAKI,eAACr1tB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACI,cAAC0rC,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAASkxJ,EACT74J,SAAU4wrB,EACV10tB,UAAWF,EAAQi0C,OAJvB,SAMKphG,EAAE,sBAEP,cAAC44F,EAAA,EAAD,CACIjL,QAAQ,YACRzT,MAAM,UACN/lG,KAAK,SACLg9G,SAAU4wrB,EACV10tB,UAAWF,EAAQi0C,OALvB,SAOKphG,EAAE,wBAEN+hxB,GAAgB,cAAClse,EAAA,EAAD,CAAkB37N,MAAM,UAAU7sB,UAAWF,EAAQg+S,gCA9BnF,S,SC3LrBn3B,EAAat7T,IAAM8E,YAAgC,SAAwBW,EAAOzuC,GACpF,OAAO,cAACwloB,EAAA,EAAD,aAAOvnjB,UAAU,KAAKj+E,IAAKA,GAASyuC,OASzCslF,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC5Cg/R,OAAQ,CACJj9P,SAAU,YAEdiZ,SAAU,CACN8L,KAAM,EACF/7B,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAEpC5e,MAAO,CACH8X,KAAM,GAEVpQ,KAAM,CACFr2C,OAA0B,EAAlBL,EAAMZ,UACV6sC,SAA4B,EAAlBjsC,EAAMZ,UAChBgB,MAAO,GACPi2C,OAAQ,IAEhBs7kB,eAAgB,CACZtxnB,OAAO,GAAD,OAAuB,IAAlBL,EAAMZ,UAAX,SAEVw0L,cAAe,CACXvzL,OAAO,KAAD,OAAyB,IAAlBL,EAAMZ,UAAb,eAIR8ztB,EAAwBzlvB,cACxB0lvB,EAA4BjkvB,cAC5BkkvB,GAAsBllxB,iBAAO,IAC7B44kB,GAAe,CACjB8rM,cAAc,EACd3yrB,WAAYmzrB,IAEHZ,GACD,SADCA,GAEO,iBAFPA,GAGM,gBAHNA,GAIU,oBAJVA,GAKQ,kBAGfa,QAAwBzyyB,EACxB0yyB,GAAc/pwB,IAAMC,cAAc6pwB,IAC3BR,GAAiB,WAC1B,IAAM7kyB,EAAUuhC,qBAAW+jwB,IAC3B,GAAItlyB,IAAYqlyB,GACZ,MAAM,IAAI3myB,MAAM,+CAEpB,OAAOsB,GAELgZ,GAAU,SAAC8kB,EAAO9b,GACpB,OAAQA,EAAOhrB,MACX,KAAKwtyB,GACD,OAAO,2BACA1mwB,GADP,IAEI8mwB,cAAc,IAGtB,KAAKJ,GACL,KAAKA,GACD,OAAO,2BACA1mwB,GADP,IAEI8mwB,cAAc,IAGtB,KAAKJ,GACD,OAAO,2BACA1mwB,GADP,IAEIm0E,WAAYjwF,EAAOgc,UAG3B,KAAKwmwB,GACD,OAAO,2BACA1mwB,GADP,IAEIm0E,WAAYmzrB,KAGpB,QACI,MAAM,IAAI1myB,MAAJ,kCAAqCsjB,EAAOhrB,SA+H/C2ia,IA3H4C,SAAC,GAMrD,IALHl4T,EAKE,EALFA,KACAg6B,EAIE,EAJFA,QACA23L,EAGE,EAHFA,SACAs5D,EAEE,EAFFA,oBACAC,EACE,EADFA,kBAEA,EAA0B7qV,qBAAW9oB,GAAS8/kB,IAA9C,mBAAOh7jB,EAAP,KAAc2D,EAAd,KACA,EAAgCqsuB,aAAU,GAAlCr+tB,EAAR,EAAQA,GAAIw+tB,EAAZ,EAAYA,OAAQC,EAApB,EAAoBA,QACdl+rB,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACFmvD,EAAQwjD,cACRnQ,EAAoB78E,sBAAY28vB,GAChC17W,EAAcjhZ,sBAAY4Y,eAE1BmkvB,EADgB/8vB,sBAAY08vB,GACE,CAChCpprB,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzC/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,MACrC,CACA0iF,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,KACvC8I,YAAa/yC,EAAM+pC,QAAQE,QAAQ7iF,MAKjCoswB,EAAoB,WACtBt3B,KAEE/0c,EAAY,uCAAG,WAAOl3T,EAAQ0nX,GAAf,SAAAltX,EAAA,6DACjBglC,EAAS,CACLzqC,KAAMwtyB,KAFO,kBAKPpxe,EAASnxT,EAAQ0nX,GALV,OAMbloV,EAAS,CACLzqC,KAAMwtyB,KAPG,gDAUb/iwB,EAAS,CACLzqC,KAAMwtyB,KAXG,yDAAH,wDAeZnnwB,EAAeC,mBAAQ,iBAAO,CAChC20E,WAAYn0E,EAAMm0E,WAClBi3P,cAAe,SAAClrU,GACZyD,EAAS,CACLzqC,KAAMwtyB,GACNxmwB,aAGR8mwB,gBAAiB,SAAC9mwB,GACdyD,EAAS,CACLzqC,KAAMwtyB,SAGd,CAAC1mwB,EAAMm0E,aACX,OACI,cAACqzrB,GAAYpowB,SAAb,CAAsB1qC,MAAO6qC,EAA7B,SACI,gCACI,eAACyvR,EAAA,EAAD,CACI48H,YAAY,EACZjoV,KAAMA,EACNg6B,QAAS+pqB,EACT7oqB,oBAAqBk6N,EAJzB,UAMI,cAAC8hC,EAAA,EAAD,CAAQzoT,UAAWF,EAAQghS,OAAQj0Q,MAAO0sV,GAA4B,UAAtE,SACI,eAACE,EAAA,EAAD,WACI,cAACn4T,EAAA,EAAD,CACIz0B,MAAM,UACN4e,QAhDH,WACrBsypB,KAgDwB,aAAW,QACXj6pB,SAAUl2E,EAAM8mwB,aAJpB,SAMI,cAAC,IAAD,MAEJ,cAACt0rB,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQg9C,SAA5C,SACKnqG,EAAE,uCAIf,eAAC8sD,EAAA,EAAD,CACIW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ2znB,eAJvB,UAMI,cAACh0nB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ41L,cAArC,SACI,cAACu3I,EAAA,EAAD,aACI/qU,MAAM,KACNi2C,OAAO,KACPtrB,MAAOwosB,GACHlgrB,MAGZ,cAAC11C,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACI,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQgxC,MAA5C,SACKn+F,EAAE,uCAIf,cAAC,EAAD,CAAS+hxB,aAAc9mwB,EAAM8mwB,aAAcxxe,SAAU+F,EAAcuzD,oBAAqBA,EAAqBC,kBAAmBA,OAEpI,cAACwzO,EAAA,EAAD,CACI1+f,KAAMhyD,EACNu1U,YAAa,2BACbC,YAAa,CACT7xS,SAAU,KACVu9B,WAAW,GAEfw0Q,SAAS,UACTJ,kBAAmBygb,EACnBxle,aAAc,WACVwle,IACA/pqB,KAEJ2pP,aAAa,W,iGClO7B9+P,EAAYJ,aAAW,SAAUl0C,GACnC,MAAO,CACL,UAAW,CACT05a,KAAM,CACJ+5S,oBAAqB,cAErBC,oBAAqB,YAIrBzztB,UAAW,cAEb,yBAA0B,CACxBA,UAAW,WAEb,YAAa,CACXohD,WAAY,UAEd9lD,KAAM3sC,YAAS,CACbyxC,OAAQ,EAER0qB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SACzBjqC,EAAM82C,WAAWu/B,MAAO,CACzBvsC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWnP,QAC1C,eAAgB,CAEd5G,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,OAIxC,cAAe,CACb9jB,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWnP,eAKjD,CACDp9G,KAAM,mBAyBOqgyB,MAnBf,SAAqB3kwB,GACnB,IAAI4kwB,EAAkB5kwB,EAAM5D,SACxBA,OAA+B,IAApBwowB,EAA6B,KAAOA,EAEnD,OADAt/qB,IACO/qF,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAMjkP,I,wECJ7Cw2tB,E,4MAEG91tB,MAAgC,CACrCgqF,UAAW,EAAK9mF,MAAMm2W,kBAAoBz4E,e,EAwBpCmne,aAAe,WACrB,IAAM/9qB,GAAY,EAAK9mF,MAAMm2W,kBAAoBz4E,cAC7C52M,IAAa,EAAKhqF,MAAMgqF,UAC1B,EAAKpO,SAAS,CAAEoO,c,uDAxBpB,WACEtiG,OAAOs6E,iBAAiB++N,IAAuB/nU,KAAK+uyB,cACpDrgxB,OAAOs6E,iBAAiB,UAAWhpG,KAAK+uyB,gB,kCAG1C,WACE,MAII/uyB,KAAKkqC,MAHPS,EADF,EACEA,SACA2kF,EAFF,EAEEA,SACA3kB,EAHF,EAGEA,KAEE2kB,GAAY3kB,GACdhgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIquF,EACJ3kB,MAAM,KAGVj8E,OAAOu6E,oBAAoB8+N,IAAuB/nU,KAAK+uyB,cACvDrgxB,OAAOu6E,oBAAoB,UAAWjpG,KAAK+uyB,gB,oBAU7C,WACE,MAMI/uyB,KAAKkqC,MALPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KACAwnjB,EAHF,EAGEA,cACAirG,EAJF,EAIEA,YACA/8W,EALF,EAKEA,iBAGI2uZ,OAA2BlzyB,GAAfshwB,EAA2BA,EAAc6xC,EAErD3ztB,EAASt7E,KAAKgnC,MAAMgqF,WAAaqvR,EAAgC,EAAZ2uZ,EAAgBA,EAE3E,OACE,sBAAK51tB,UAAWF,EAAQ3hE,KAAxB,UACI,cAAC,EAAD,IACA,cAAC47a,EAAA,EAAD,CACE/5W,UAAWF,EAAQw8R,OACnBp6P,MAAO,CAAEhgC,MAAOqvB,EAAOrvB,EAAQ,GAC/Bo+B,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACNzxB,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjB7hP,WAAY,CACVxY,MAAO,CACL0lB,OAAQhhI,KAAKkqC,MAAM82F,QAAU,KAC7B1lD,UAZN,SAiBIqvB,EACEwnjB,EACA,c,GArEe1tnB,aA8ElBwqwB,EAAe,IAmDbh6tB,sBACbgG,aAlDa,SAACC,GAId,IAAMg0tB,EAAkBh0tB,EAAMu5C,YAAYp2H,OAAO,QAAS,CACxD+3V,OAAQl7Q,EAAMu5C,YAAY2hO,OAAO48D,UACjCt+R,SAAU,MASNy6qB,EAAe,UAAMD,EAAN,aAA0Bh0tB,EAAMu5C,YAAYp2H,OAAO,YAAa,CACnF+3V,OAAQl7Q,EAAMu5C,YAAY2hO,OAAO68D,QACjCv+R,SAAUx5C,EAAMu5C,YAAYC,SAASwR,iBAFlB,eAKrB,MAAO,CACL3uH,KAAM,CACJ6jE,QAAS,OACTiB,SAAU,GAEZq5R,OAAQ,CACN1sD,WAAY,EACZx0L,WAAY06qB,GAEdv5b,YAAa,CACXl0O,WAAY,OACZ5Z,UAAW,CAAC3sC,EAAM6mD,QAAQ,KAAKtgH,KAAK,KACpC+yG,WAAY26qB,OAmBhBhwvB,YAAgB,gBAChB0/D,mBAR0B,kBAAM,SAAC73E,EAAD,OAAUsoF,EAAV,EAAUA,SAAV,MAA0B,CAC1D3kB,KAAMmzG,YAA2BxuF,EAA3BwuF,CAAqC92K,QARlB,SAAC2D,GAC1B,MAAO,CACLA,eAUWsqC,CAIb6nrB,I,mEC9JUpvW,E,mUCsEGz4U,oBACb4pC,mBAR0B,WAC1B,OAAO,SAAyB73E,GAC9B,MAAQ,MAMmB,MAC7BmY,YAAgB,gBAFH81B,EArEwD,SAAC,GAOjE,IANLm6tB,EAMI,EANJA,4BACAC,EAKI,EALJA,oBACAtpZ,EAII,EAJJA,kBACAt1H,EAGI,EAHJA,YACA6+gB,EAEI,EAFJA,eACAvjxB,EACI,EADJA,EAEM4e,EAAW2F,wBACjB,OACE,mCAEI8+vB,EACGpmyB,KAAI,SAAC0oN,EAAWv1N,GACf,IAAMqS,EAAOkjN,EAAU3tN,IAAI,QACrB8zN,EAAenG,EAAU3tN,IAAI,gBAC7BwryB,EAAY79kB,EAAU3tN,IAAI,QAChC,OACE,eAAC00b,EAAA,EAAD,WAGE,cAACzoK,EAAA,EAAD,CAAW12M,UAAU,KAAK0/Q,MAAM,MAAM19O,MAAO,CAAE4R,QAASqirB,EAAY,IAAO,GAA3E,mBAAoF/gyB,EAApF,QACA,cAACwhR,EAAA,EAAD,CAAWv2K,MAAM,OAAO6B,MAAO,CAAE4R,QAASqirB,EAAY,IAAO,GAA7D,SAAmE13kB,IACnE,cAACm4D,EAAA,EAAD,CAAWv2K,MAAM,SAAjB,SACE,cAACkL,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,SAACz8G,GACRqoR,EAAYroR,EAAEs8G,eACd4qrB,EAAe,CACb,CACExuwB,MAAO/U,EAAE,6CACTsqG,YAAa,kBAAMg5qB,EAAoB39kB,KAEzC,CACE5wL,MAAO/U,EAAE,4CACTsqG,YAAa,WACX0vR,EAAkBr0L,KAGtB69kB,EACI,CACEzuwB,MAAO/U,EAAE,gDACTsqG,YAAa,kBAAM1rF,EAAS,IAAIo+C,KAAuB,CAAEokU,YAAaz7L,EAAU3tN,IAAI,oBAEtF,CACE+8B,MAAO/U,EAAE,6CACTsqG,YAAa,kBAAM1rF,EAAS,IAAIg+C,KAAoB,CAAEwkU,YAAaz7L,EAAU3tN,IAAI,uBAtB7F,SA2BGgoB,EAAE,4BAhCF5vB,W,6BDpBTuxZ,K,cAAAA,E,qBAAAA,M,KAkBZ,IAAMl+R,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D3kJ,MAAO,CACLpuC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,IAE/B8+W,WAAY,CACVv+T,OAAQ,QAEV++T,QAAS,CACPlxT,YAAa,OAEfnkB,OAAQ,CACNkS,WAAY,UAEdvR,KAAM,CACJjf,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5BsqrB,cAAe,CACbvyrB,SAAU,WACVqX,IAAK,MACL+H,UAAW,yBAiPTozqB,GALSx6tB,sBACb4pC,mBAdsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,UACnCgoJ,oBAAqB1rJ,cACrBuqJ,sBAAuBtqJ,eACvBmyiB,gCAAiC5okB,eAJUh0L,CAK1C9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,eAMFwU,YAAgB,gBAFH81B,EAtOkE,SAAC/qC,GAChF,IACES,EAOET,EAPFS,SACA2/W,EAMEpgX,EANFogX,WACAnvS,EAKEjxE,EALFixE,WACA0sS,EAIE39W,EAJF29W,sBACAmB,EAGE9+W,EAHF8+W,oBAEAj9X,EACEme,EADFne,EAGImvD,EAAQwjD,cACRxlD,EAAUs2C,IAEhB,EAAgC/qF,WAAe,MAA/C,mBAAO0uF,EAAP,KAAiBs9J,EAAjB,KACA,EAAsChsP,WAAe,IAArD,mBAAOkrwB,EAAP,KAAoBL,EAApB,KACA,EAAwB7qwB,WAAe,GAAvC,mBAAOmnO,EAAP,KAAauhW,EAAb,KAGA,EAA0C1okB,WAAe,GAAzD,mBAAOmrwB,EAAP,KAAsBC,GAAtB,KASMC,IAD+C30rB,GAAcA,EAAWp3G,IAAI,eAAiB6O,iBAEhG5J,KAAI,SAACi+Y,GACJ,IACM8oZ,EADS9oZ,EAAKljZ,IAAI,UACGwH,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,aACvD,OAAOkjZ,EAAKv/Y,IAAI,SAAUqoyB,MAE3BxkyB,QAAO,SAAC07Y,GAAD,OAAUA,EAAKljZ,IAAI,UAAUqR,WAGjC46xB,IADwB70rB,GAAcA,EAAWp3G,IAAI,qBAAuB6O,iBAE/E5J,KAAI,SAACi+Y,GACJ,IACM8oZ,EADS9oZ,EAAKljZ,IAAI,UACGwH,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,aACvD,OAAOkjZ,EAAKv/Y,IAAI,SAAUqoyB,MAE3BxkyB,QAAO,SAAC07Y,GAAD,OAAUA,EAAKljZ,IAAI,UAAUqR,WAKjC66xB,GAAuC,IAAlBL,EAAsB5mZ,EAAsBnB,EACjEqoZ,IAA+C,OAAlBD,SAAkB,IAAlBA,QAAA,EAAAA,GACjC1kyB,QAAO,SAAC4kyB,GACR,IAAMC,EAAkBD,EAAkBpsyB,IAAI,gBAC9C,OAAQ+ryB,GAAuB7ryB,IAAImsyB,KAAqBJ,GAA8B/ryB,IAAImsyB,QACtFn4xB,iBAEAo4xB,GAAoD,IAAlBT,EAAsBM,GAAtB,OAAmDA,SAAnD,IAAmDA,QAAnD,EAAmDA,GAA4BpgyB,MAAM,EAAG,IAE1HwgyB,GAAyBJ,GAA2BziyB,MAAK,SAAAikN,GAAS,OAAKA,EAAU3tN,IAAI,WA8BrFwsyB,GAA8BF,GAAgCvgyB,MAzFzC,GAyF+C87P,EAzF/C,GAyFqEA,EAzFrE,IA0FrB4kiB,GAAiBH,GAAgCt0yB,KAEjDszyB,GAAsB,SAAC39kB,GAC3B/mL,EAAS,IAAIsJ,IAA8B7qB,iBAAO,aAChDuhF,MAAM,GACF+mH,GAAa,CAAEA,kBAIjBq0L,GAAoB,SAACr0L,GACrB44L,IAAeoD,EAAWC,MAC5BhjX,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,EACN+mH,UAAW,CACTzwL,GAAIywL,EAAU3tN,IAAI,eAClBO,IAAG,OAAEotN,QAAF,IAAEA,OAAF,EAAEA,EAAW3tN,IAAI,gBACpByK,KAAI,OAAEkjN,QAAF,IAAEA,OAAF,EAAEA,EAAW3tN,IAAI,QACrBq3E,QAASs2I,EAAU3tN,IAAI,gBAI3B4mC,EAAS,IAAIwJ,IAA2B/qB,iBAAO,aAC7CuhF,MAAM,GACF+mH,GAAa,CAAEA,kBASzB,OACE,eAAC74I,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,cAAC/B,EAAA,EAAD,CAAMyiC,MAAO,CAAChgC,MAAO,QAArB,SACE,eAAC02O,EAAA,EAAD,CACEt4M,QAAQ,YACRh+G,MAAOk0yB,EACPp0rB,SA1Gc,SAAC2rB,EAAOt3H,GAC5BggyB,GAAiBhgyB,GACjBs9lB,EAAQ,IAyGF,aAAW,+BACXl7S,eAAe,UACfC,UAAU,UANZ,UAQE,cAACC,EAAA,EAAD,CAAKrxR,MAAO/U,EAAE,2CACd,cAAComS,EAAA,EAAD,CAAKrxR,MAAO/U,EAAE,kDAIqB,IAApCmkxB,GAA2Bn0yB,KAC1B,cAACmqZ,EAAA,EAAD,CACEE,WAAY,cAACC,EAAA,EAAD,CAA4B/qU,MAAM,KAAKi2C,OAAO,KAAKtrB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAAM/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,OACzI4nF,MAAOn+F,EAAE,8CAGX,qCACE,cAACskqB,EAAA,EAAD,UACE,eAAC/3P,EAAA,EAAD,CACE,aAAW,4BADb,UAGE,cAACC,EAAA,EAAD,UACE,eAACE,EAAA,EAAD,WACsB,IAAlBm3W,GAAuB,cAAC5/gB,EAAA,EAAD,IACzB,cAACA,EAAA,EAAD,CAAW52M,UAAWF,EAAQgsC,KAAMzL,MAAM,OAA1C,SAAkD1tF,EAAE,sCACpD,cAACikQ,EAAA,EAAD,CAAW52M,UAAWF,EAAQgsC,KAAMzL,MAAM,OAA1C,SAAkD1tF,EAAE,gCACpD,eAACikQ,EAAA,EAAD,CAAW52M,UAAWm0C,IAAWr0C,EAAQgsC,KAAMhsC,EAAQqrC,QAAS9K,MAAM,SAAS6B,MAAO,CAAE2B,SAAU,YAAlG,UACE,cAACzD,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE4M,WAAY,EAAG1G,YAAa,EAAGpmC,QAAS,gBAA7E,SACGrvD,EAAE,yBAGgB,IAAlB6jxB,GAAuBU,IACtB,cAACrmrB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,iDAAlB,SACE,cAAC2uG,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QA7CI,WAC9Bl6E,EAAS,IAAIk+C,OA6CazP,UAAWF,EAAQs2tB,cAHrB,SAKE,cAAC,IAAD,gBAQd,cAAC72W,EAAA,EAAD,UACqB,IAAlBi3W,EACG,cAAC,EAAD,CACER,4BAA6BmB,GAC7BlB,oBAAqBA,GACrBtpZ,kBAAmBA,GACnBt1H,YAAaA,EACb6+gB,eAAgBA,IAElB,cAACmB,EAAA,EAAD,CACEC,8BAA+BH,GAC/BlB,oBAAqBA,GACrBtpZ,kBAAmBA,GACnBt1H,YAAaA,EACb6+gB,eAAgBA,WAM5B,gCACE,gCACE,6BACE,cAACn2W,EAAA,EAAD,CACE/jb,MAAOo7xB,GACPl3W,aApLO,SAACnyT,EAAgB4tT,GAAjB,OAAqCo4K,EAAQp4K,IAqLpDnpL,KAAMA,EACN6tL,YAzMS,GA0MTF,mBAAoB,GACpBngX,UAAWF,EAAQkgX,WACnBlgX,QAAS,CACP0gX,QAAS1gX,EAAQ0gX,iBAM3B,cAAC,EAAD,CAAczmU,SAAUA,EAAUs9J,YAAaA,EAAak/gB,YAAaA,aA0BhE,SAAC,GAEf,IADLx8qB,EACI,EADJA,SAAUs9J,EACN,EADMA,YACN,IADmBk/gB,mBACnB,MADiC,GACjC,EAEEzoqB,EAAc,WAClBupJ,EAAY,OAGd,OACE,cAACE,EAAA,EAAD,CACEx9J,SAAUA,EACVxoB,KAAMttG,QAAQ81H,GACdwR,QAASuC,EAHX,SAKGyoqB,EAAY3myB,KAAI,WAOH,IANZ+pH,EAMW,uDAHP,CACAjyF,MAAO,GACPu1F,YAAa,MACZrzH,EAAM,uCAET89B,EAEEiyF,EAFFjyF,MACAu1F,EACEtD,EADFsD,YAEF,OACE,cAAC9Z,EAAA,EAAD,CAEEsI,QAAS,WACPwR,IACA6Q,KAJJ,SAOGpmG,GANI99B,W,gQEvTXwsH,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D6jD,YAAa,CACXt3O,QAAS,QAEXklL,QAAS,CACP9+I,YAAatmC,EAAMZ,QAAQ,IAE7Bs3C,KAAM,CACJ3rB,MAAO/qB,EAAM+pC,QAAQC,KAAK,WAyIfjwC,oBACb91B,YAAgB,gBAChB0/D,mBATsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MAGwB,SAAC2D,GAAD,MAAwC,CAAEA,eAEtDsqC,EAvH0D,SAAC,GASnE,IARL2pU,EAQI,EARJA,iBACAzjS,EAOI,EAPJA,WACA6lJ,EAMI,EANJA,SACA7kQ,EAKI,EALJA,MACAiznB,EAII,EAJJA,kBACAC,EAGI,EAHJA,mBACA1klB,EAEI,EAFJA,SACA5e,EACI,EADJA,EAGMmtD,EAAUs2C,IACVyhd,EAAe,CAAC,QAAQxvjB,KAAK,MAC7BkvxB,EAAex1rB,GAAcA,EAAWv6F,MAAMwumB,IAAsBx8mB,gBAC1E,EAQKmhT,YAAc,CAAC,SARpB,IACEC,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAEFE,EAPF,EAOEA,QAGF7vR,aAAgB,WACd,GAAKwvR,EAAL,CAIA,IAAMQ,EAAkBk8e,EAAa3/xB,eAAc,SAACywQ,GAClDA,EAAInxQ,OAAOsuY,GAAkB,SAAC3oY,GAC5B,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,EAAalwT,IAAI,MACzB2wT,SAAUT,EAAalwT,IAAI,gBAC3B4wT,SAAUV,EAAalwT,IAAI,aAC3BhI,KAAMk4T,EAAalwT,IAAI,QACvB6lU,aAAcg1E,WAIpBj0W,EAASu/B,YAAO82L,EAAUquX,EAAoB56T,OAC7C,CAACR,IAEJ,IAAM28e,EAAgBz8e,GAAgBnzD,IAAakuJ,MAAwB/zS,EAAWv6F,MAAM,CAAC,SAAUzkB,EAAO,aAE9G,OACE,qCACE,cAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,sCAEjC,eAAC8sD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EACJJ,KAAK,SACLvB,WAAW,SACXO,WAAW,EALb,UAQI26O,GAEE,eAACt7O,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC47O,EAAA,EAAD,CAAgBn7M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoBjuN,MAAM,UAAUqV,MAAO,CAAEj/B,SAAU,KAC3G,eAACm9B,EAAA,EAAD,WAAa06M,EAAb,UAKJE,GACE,qCACE,cAAC,IAAD,CAAoBnuN,MAAM,QAAQkhB,SAAS,QAAQ/tC,UAAWF,EAAQonL,UACtE,cAAC9mJ,EAAA,EAAD,CAAYvT,MAAM,QAAQyT,QAAQ,UAAlC,SAEI06M,IAAcU,IAAW/4T,KACrBgwB,EAAE,qCACFqoS,IAAcU,IAAW50T,KAAzB,UACK6rB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,wCAOpB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,WAAlD,UACE,uBACEV,UAAWF,EAAQw5O,YACnBxyT,KAAK,OACLsO,KAAK,OACLgtG,SAAU,SAACpzG,GAAD,OAAOksT,EAAQlsT,EAAE4kB,OAAO2wE,MAAM,KACxCq1N,OAAQi+Q,EACRhwiB,GAAE,gCAA2B9kC,GAC7B+gH,SAAU0zrB,IAEZ,uBAAO77e,QAAO,gCAA2B54T,GAAzC,SACE,cAAC8tH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qCAAlB,SACE,+BACE,cAAC44F,EAAA,EAAD,CACEzH,SAAU0zrB,EACV3qsB,MAAM,UACN3sB,UAAU,OACVsgD,QAAS,cAAC,IAAD,CAAaxgD,UAAWF,EAAQ04C,OAJ3C,SAMG7lG,EAAE,uCCpHbyjG,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACRliU,SAAU,IACVm6C,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpCqB,OAAQ,CACNviB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5BiI,OAAQ,CACNrxC,QAAS,iBAoFE7G,sBACb91B,YAAgB,gBAChBwqE,cACA9K,mBAbsB,SAAC73E,EAAOyF,GAAR,OAAqBqG,YAAyB,CACpEqoE,WAAYC,wBAAc3uE,EAASu0N,WADQluN,CAE1C9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,EAhFyC,SAAC/qC,GACvD,IACEne,EASEme,EATFne,EACAovF,EAQEjxE,EARFixE,WACAi0gB,EAOElllB,EAPFkllB,kBACAC,EAMEnllB,EANFmllB,mBACA1klB,EAKET,EALFS,SACAq2N,EAIE92N,EAJF82N,SACA/4J,EAGE/9D,EAHF+9D,OACA22S,EAEE10W,EAFF00W,iBACAziZ,EACE+tC,EADF/tC,MAGI+8E,EAAUs2C,IACVqhrB,EAAU11rB,GAAcA,EAAWv6F,MAAMwumB,GACzC0hL,EAAe31rB,GAAcA,EAAWv6F,MAAX,sBAAqBwumB,GAArB,CAAwCxwO,KAWrElrF,EAASo9e,GAAgBA,EAAa/syB,IAAI,UAC1Ck7Y,EAAWvrF,GATGzrN,EAAOJ,QACvB6rN,EACA,CAAEptN,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,IAS7G,GAAIgorB,GAAgB7xZ,EAAU,CAC5B,IAAMvqF,EAAWo8e,EAAa/syB,IAAI,YAClC,OAAQ,qCACN,cAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,sCAEjC,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAApC,SACE,cAACywC,EAAA,EAAD,CAASC,MAAOwqM,EAAhB,SACE,cAACpnM,EAAA,EAAD,CAAMF,KAAM6xR,EAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD9pF,QAGxD,cAAC77O,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,WAAlD,SACE,cAAC6qC,EAAA,EAAD,CACE1e,MAAM,UACN2zB,QAAS,cAAC,IAAD,CAAYxgD,UAAWF,EAAQsvC,SACxC3D,QAAS,WACP,IAAM8lL,EAAUkmgB,GAAWA,EAAQ7/xB,eAAc,SAACywQ,GAChDA,EAAIj5J,OAAOo2R,MAEbj0W,EAASu/B,YAAO82L,EAAUquX,EAAoB1kV,KAPlD,SAUG5+Q,EAAE,6BAOX,OACE,cAAC,EAAD,CACE6yX,iBAAkBA,EAClB59I,SAAUA,EACV7kQ,MAAOA,EACPiznB,kBAAmBA,EACnBC,mBAAoBA,Q,iKCrGnB,SAAS0hL,EAAsB5pqB,EAAcnsF,GAClD,IAAQopqB,EAA0DppqB,EAA1DopqB,YAAavsW,EAA6C78T,EAA7C68T,KAAMunP,EAAuCpkjB,EAAvCokjB,YAAagzJ,EAA0Bp3sB,EAA1Bo3sB,uBA8G1C,SAA0BjrnB,EAAcnsF,GACtC,IACEogT,EAOEpgT,EAPFogT,MACAzmI,EAME35K,EANF25K,KACAxqH,EAKEnvD,EALFmvD,KACA2npB,EAIE92sB,EAJF82sB,SACAj4uB,EAGEmhC,EAHFnhC,MAEAw4uB,EACEr3sB,EADFq3sB,gBAGI2+C,EAAe,YAAkB51c,GACnC41c,GAAgB5yyB,OAAO0D,KAAKkvyB,GAAcnvyB,SAC5CslI,EAAMi0N,MAAN,2BAAmB41c,GAAiB7pqB,EAAMi0N,QAG5C,IAAM61c,EAAc,YAAkBt8kB,GAClCs8kB,GAAe7yyB,OAAO0D,KAAKmvyB,GAAapvyB,SAC1CslI,EAAMwtF,KAAN,2BAAkBs8kB,GAAgB9pqB,EAAMwtF,OAG1C,IAAMu8kB,EAAc,YAAkB/msB,GAClC+msB,GAAe9yyB,OAAO0D,KAAKovyB,GAAarvyB,SAC1CslI,EAAMh9B,KAAN,2BAAkB+msB,GAAgB/pqB,EAAMh9B,OAG1C,IAAMgnsB,EAAkB,YAAkBr/C,GACtCq/C,GAAmB/yyB,OAAO0D,KAAKqvyB,GAAiBtvyB,SAClDslI,EAAM2qnB,SAAN,2BAAsBq/C,GAAoBhqqB,EAAM2qnB,WAG9Cj4uB,IACFstH,EAAMttH,MAAQA,GAGZw4uB,IACFlrnB,EAAMwlnB,YAAc0F,GA/ItB++C,CAAiBjqqB,EAAOnsF,GAKpB68T,GA0JN,SAA0B1wO,EAAc0wO,GACtC1wO,EAAM2qnB,SAAN,aAAmBu/C,MAAO,YAAmBx5b,IAAU1wO,EAAM2qnB,UAC7D,IAAMw/C,EAAW,YAAYz5b,GAC7B,GAAIy5b,EAAU,CACZnqqB,EAAMirnB,sBAAN,aACEm/C,uBAAwB,YAAkC15b,IACvD1wO,EAAMirnB,uBAEX,IAAMC,EAAkB,YAAWi/C,GAAU3wqB,YACzC0xnB,IACFlrnB,EAAMwtF,KAAN,aAAeg4hB,YAAa0F,GAAoBlrnB,EAAMwtF,QAnKxD68kB,CAAiBrqqB,EAAO0wO,GA4K5B,SAAiC1wO,EAAci9kB,GAE7Cj9kB,EAAMi9kB,YAAcj9kB,EAAMi9kB,YAAc,YAASj9kB,EAAMi9kB,aAAe,GAGlEA,IACFj9kB,EAAMi9kB,YAAcj9kB,EAAMi9kB,YAAY94sB,OAAO84sB,IAI3Cj9kB,EAAMi9kB,cAAgBj9kB,EAAMi9kB,YAAYvitB,eACnCslI,EAAMi9kB,YApLfqtF,CAAwBtqqB,EAAOi9kB,GA0IjC,SAAiCj9kB,EAAci4d,GAC7C,IAAMsyM,EAAkB,sBAAOvqqB,EAAMi4d,aAAe,IAA5B,YAAoCA,IAC5Dj4d,EAAMi4d,YAAcsyM,EAAkB7vyB,OAAS6vyB,OAAoB51yB,EA3InE61yB,CAAwBxqqB,EAAOi4d,GA8IjC,SAAiCj4d,EAAcirnB,GAC7CjrnB,EAAMirnB,sBAAN,2BACKjrnB,EAAMirnB,uBACNA,GAhJLw/C,CAAwBzqqB,EAAOirnB,GAI1B,SAASy/C,EAAe72vB,EAAiB8xI,GAC9C,IACEsuK,EAcEtuK,EAdFsuK,MACAzmI,EAaE7nC,EAbF6nC,KACAxqH,EAYE2iF,EAZF3iF,KACA2npB,EAWEhlkB,EAXFglkB,SACAj4uB,EAUEizK,EAVFjzK,MACAu4uB,EASEtlkB,EATFslkB,sBACAhzJ,EAQEtya,EARFsya,YACAglH,EAOEt3hB,EAPFs3hB,YACA+tC,EAMErlkB,EANFqlkB,gBACAxmT,EAKE7+Q,EALF6+Q,YACAqmT,EAIEllkB,EAJFklkB,mBAEAK,EAEEvlkB,EAFFulkB,gBACAx6Y,EACE/qL,EADF+qL,KAGFi6b,EAA2B92vB,EAAM,QAASogT,GAC1C02c,EAA2B92vB,EAAM,OAAQ25K,GACzCm9kB,EAA2B92vB,EAAM,OAAQmvD,GACzC2nsB,EAA2B92vB,EAAM,WAAY82sB,GAC7CggD,EAA2B92vB,EAAM,wBAAyBo3sB,GAEtDv4uB,IACFmhC,EAAKnhC,MAAQA,GAGXw4uB,IAEFr3sB,EAAKq3sB,gBAAkBA,GAGrBx6Y,IACF78T,EAAK68T,KAAOA,GAGVunP,EAAYv9lB,SACdm5C,EAAKokjB,YAAL,sBAAuBpkjB,EAAKokjB,aAA5B,YAA4CA,KAG1CglH,EAAYvitB,SACdm5C,EAAKopqB,YAAL,sBAAuBppqB,EAAKopqB,aAA5B,YAA4CA,KAG1C+tC,EAAgBtwvB,SAClBm5C,EAAKm3sB,gBAAL,sBAA2Bn3sB,EAAKm3sB,iBAAhC,YAAoDA,KAGlDxmT,EAAY9pc,SACdm5C,EAAK2wZ,YAAL,sBAAuB3wZ,EAAK2wZ,aAA5B,YAA4CA,KAG9C3wZ,EAAKg3sB,mBAAL,2BAA+Bh3sB,EAAKg3sB,oBAAuBA,GAOtD,SAAS8/C,EAGd92vB,EAAY6nG,EAAYkvpB,GACxB,GAAIA,GAAY3zyB,OAAO0D,KAAKiwyB,GAAUlwyB,OAGpC,IAAK,IAAMyC,KADX02C,EAAK6nG,GAAL,eAAkB7nG,EAAK6nG,IACLkvpB,EACZ3zyB,OAAOD,UAAUoD,eAAeP,KAAK+wyB,EAAUztyB,KACjD02C,EAAK6nG,GAAMv+I,GAAOytyB,EAASztyB,M,kGC1FdyjO,E,kDAEnB,WAAmBhwL,GAA+C,IAAD,6BAC/D,cAAMA,GACN35C,OAAO+8C,OAAP/8C,OAAA,IAAAA,CAAA,GAAoB25C,GAF2C,E,iBAFVk6K,I,6BCPzD,oBACextL,QAAMC,cAAc,O,iMCsB7BstwB,EAAM,MAICC,EAA4B,CACvC32rB,MAAO,CACLx/B,QAAS,YACTQ,SAAU,MACVhB,MAAO,MAILk0C,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9Ck3E,SAAU,CACRr9B,cAAe,aAEjB7K,MAAO,CACL5N,UAAWphC,EAAMZ,QAAQ,IACzBiiD,WAAY,KAEdgzO,QAAS,CACPh0R,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,IAAnB,gBAA+BY,EAAMZ,QAAQ,GAA7C,SAERuxC,KAAM,CACJ1E,SAAU,SACVoV,WAAY,IACZ7C,WAAY,OACZ4gJ,cAAe,QACfjnJ,aAAcn4C,EAAMZ,QAAQ,IAE9BmoS,aAAc,CACZlmP,WAAY,IACZlJ,aAAc,GAEhB96G,KAAM,CACJqspB,UAAW,OACXrplB,OAAO,OAAD,OAASL,EAAMZ,QAAQ,GAAvB,QACNouD,YAAaxtD,EAAMZ,QAAQ,IAE7B43tB,UAAW,CACT7+qB,aAAcn4C,EAAMZ,WAEtB2vB,KAAM,CACJkd,SAAU,UACVoV,WAAY,IACZr2B,eAAgB,aAElBsa,OAAQ,CACNqa,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnC9nP,aAAc,MACdlsC,OAAO,OAAD,OAASL,EAAMZ,UAAf,QACNwB,QAAQ,GAAD,OAAKZ,EAAMZ,QAAQ,IAAnB,cAA6BY,EAAMZ,QAAQ,KAA3C,MACPgB,MAAO,QAETorP,YAAa,CACXzgO,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BoX,WAAY,IACZpV,SAAU,UAEZ59C,QAAS,CACP6R,QAAS,OACTM,eAAgB,WAChB4gC,UAAWphC,EAAMZ,QAAQ,QA8Id63tB,IA1IkD,SAAC,GAG3D,IAFLxpa,EAEI,EAFJA,WACAzxE,EACI,EADJA,UAEMh+O,EAAUs2C,IACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAkC2yB,mBAASszvB,GAA3C,mBAAOjpgB,EAAP,KAAkBqpgB,EAAlB,KAUA,OACE,qCACE,cAAC,IAAD,CAAY14rB,QAAQ,QAAQzT,MAAM,gBAAgB7sB,UAAWF,EAAQk5E,SAArE,SAAgFrmI,EAAE,iCAClF,cAAC,IAAD,CAAY2tF,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQgxC,MAAvE,SAA+En+F,EAAE,wBACjF,cAAC,IAAD,CAASqtD,UAAWF,EAAQq2R,UAC5B,cAAC,IAAD,CAAYj2R,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACG9/F,EAAE,wBAEL,cAAC,IAAD,CAAYutD,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWm0C,IAAWr0C,EAAQ2yC,KAAM3yC,EAAQupS,cAA1G,SACG12V,EAAE,kCAEL,cAAC,IAAD,CAAYutD,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACE,cAAC,IAAD,CACE9/F,EAAGA,EACH4wB,QAAS,0BACTG,WAAY,CACV,0BAAa,cAInB,cAAC,IAAD,CAAYw8B,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWm0C,IAAWr0C,EAAQ2yC,KAAM3yC,EAAQupS,cAA1G,SACG12V,EAAE,iCAEL,eAAC,IAAD,CAAYutD,UAAU,KAAKogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWm0C,IAAWr0C,EAAQ2yC,KAAM3yC,EAAQ3gE,MAA3G,UACE,6BACE,cAAC,IAAD,CACEwT,EAAGA,EACH4wB,QAAS,mCACTG,WAAY,CACV,0BAAa,mBAInB,6BACE,cAAC,IAAD,CACE/wB,EAAGA,EACH4wB,QAAS,iCACTG,WAAY,CACV,0BAAa,iBAInB,6BACE,cAAC,IAAD,CACE/wB,EAAGA,EACH4wB,QAAS,iCACTG,WAAY,CACV,0BAAa,oBAKrB,cAAC,IAAD,CAAYw8B,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACE,cAAC,IAAD,CACE9/F,EAAGA,EACH4wB,QAAS,+BACTG,WAAY,CACV,cAAC,IAAD,CAEEs8B,UAAWF,EAAQ+wB,KACnBmjB,KAAMz/F,4BACNX,OAAO,SACPgiT,IAAI,YAJC,cASb,cAAC,IAAD,CAAY11P,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACG9/F,EAAE,uBAEL,cAAC,IAAD,CAAYutD,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACG9/F,EAAE,8BAEL,cAAC,IAAD,CAAYutD,UAAU,IAAIogC,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ2yC,KAAjF,SACE,cAAC,IAAD,CACE9/F,EAAGA,EACH4wB,QAAS,0BACTG,WAAY,CACV,cAAC,IAAD,CAEEs8B,UAAWF,EAAQ+wB,KACnBmjB,KAAI,iBAAYx/F,0BAFX,cAOb,cAAC,IAAD,CAAY8rF,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWm0C,IAAWr0C,EAAQ2yC,KAAM3yC,EAAQg5tB,WAA5F,SACGnmxB,EAAE,4BAEL,eAAC,IAAD,CACErwB,MAAOqtS,EACPvtL,SAnGe,SAAC2rB,GACpBirqB,EAAajrqB,EAAMn6G,OAAOtxB,QAgGxB,UAIE,cAAC,IAAD,CACE09E,UAAWF,EAAQsnC,OACnBtnC,QAAS,CAAEp4C,MAAOo4C,EAAQwtP,aAC1BhrU,MAAOs2yB,EACPzqrB,QAAS,cAAC,IAAD,CAAOthB,MAAM,YACtBnlE,MAAO/U,EAAE,sBAEX,cAAC,IAAD,CACEqtD,UAAWF,EAAQsnC,OACnBtnC,QAAS,CAAEp4C,MAAOo4C,EAAQwtP,aAC1BhrU,MAxLC,KAyLD6rH,QAAS,cAAC,IAAD,CAAOthB,MAAM,YACtBnlE,MAAO/U,EAAE,wBAGb,qBAAKqtD,UAAWF,EAAQ3P,QAAxB,SACE,cAAC,IAAD,CACEmwC,QAAQ,YACRzT,MAAM,UACNiX,SAAUyrR,EACV9jR,QArHc,WACpBqyM,EAAUnuB,IAAcipgB,IAgHpB,SAMGjmxB,EAAE,iC,6BC5Nb,sDACe,SAASm8G,EAAa4/D,EAASuqmB,GAC5C,OAAO5twB,IAAM6V,eAAewtJ,KAAwD,IAA5CuqmB,EAAS7xxB,QAAQsnL,EAAQ5nM,KAAK6mN,W,8BCFxE,8CAGO,IAAMwriB,EAAiB,WAC5B,MAA0B,qBAAfn2a,WACFA,WAEa,qBAAX1tT,OACFA,OAEW,qBAAT0gJ,KACFA,KAEa,qBAAXF,EACFA,OADT,K,0HCFUizG,E,kBAAAA,K,4BAAAA,E,uBAAAA,M,KAKL,IAAMkB,GAAU,mBACpBlB,EAAUC,aAAe,CACxB3nO,OAAQ,aACR6+N,KAAM,eAHa,cAKpB6I,EAAUO,UAAY,CACrBjoO,OAAQ,UACR6+N,KAAM,YAPa,I,6BChBvB,kCACO,IAAMz5N,EAAsB,Q,ynCCyJtBxmB,GAAgB,SAChBE,GAAsB,CACjC,YACA,aACA,aAII+4wB,GAA4B,CAChCr1pB,aAAc,KACd7lB,SAAU,KACVl3H,KAAM,MA+EFuqqB,G,kDACJ,WAAYvgoB,GAAQ,IAAD,uBACjB,cAAMA,IAgCDqowB,sBAAwB9twB,cAjCZ,EAkCZ+twB,qBAAuB/twB,cAlCX,EAmCZguwB,mBAAqBhuwB,cAnCT,EAoCZiuwB,kBAAoBjuwB,cApCR,EAuCXkuwB,cAA+C,KAvCpC,EAwCXC,aAA8C,KAxCnC,EAyJZC,iBAAmB,SAACx6pB,EAAmBy6pB,EAAeC,EAAkCzre,GAC7F,MAII,EAAKp9R,MAHPS,EADF,EACEA,SACAw/nB,EAFF,EAEEA,UACAK,EAHF,EAGEA,QAKA7/nB,EAFF0tG,EAEW,IAAI3iF,IAAkB,CAC7B2iF,YACAJ,QAAQ,eACH66pB,EAASv0xB,QAEdytB,QAAS,EAAK9B,MAAM8B,QACpBu9E,QAAS,EAAKr/E,MAAMq/E,QACpB+9M,cAGO,IAAI9xQ,IAAiB,CAC5ByiF,QAAQ,aACNuyhB,UACAL,aACG2oI,EAASv0xB,QAEdytB,QAAS,EAAK9B,MAAM8B,QACpBu9E,QAAS,EAAKr/E,MAAMq/E,QACpB1F,UAAWkvrB,EACXzre,gBArLa,EAyLZhL,SAzLY,uCAyLD,WAAOnxT,GAAP,uEAAAxF,EAAA,2DACkE,EAAKukC,MAA/ES,EADQ,EACRA,SAAUqykB,EADF,EACEA,YAAaqmK,EADf,EACeA,SAAUL,EADzB,EACyBA,QAASphK,EADlC,EACkCA,mBAAoBv+jB,EADtD,EACsDA,KAAMt3B,EAD5D,EAC4DA,EAD5D,EAQZ,EAAKib,MALP68E,EAHc,EAGdA,UACAmvrB,EAJc,EAIdA,oBACAC,EALc,EAKdA,kBACAC,EANc,EAMdA,iBACAC,EAPc,EAOdA,iBAGDD,GAAoB,EAAKtwrB,SAAS,CAAEswrB,kBAAkB,KACnDrvrB,EAAUp2G,KAAK,EAAK2lyB,oBAAqBJ,EAAoBvlyB,MAAK,SAAA4lyB,GAAa,OAAIA,KAXvE,wDAeVC,EAAiBnoyB,EAAOI,QAAO,SAAC7P,GACpC,OAAiB,OAAVA,QAA4BI,IAAVJ,KAIzBusG,EACE,EAAK/9D,MADP+9D,OApBc,SAuBYm1N,aAAI,CAAEn1N,SAAQtK,MAAO21sB,EAAevvyB,IAAI,cAvBpD,OAuBV+qX,EAvBU,OAwBVlzD,EAAUh7S,gBAAMkuW,EAAe,CAAC,IAAK,MAAO,IAC5Cz2O,EAAYi7pB,EAAevvyB,IAAI,MAC/BylqB,EAAe8pI,EAAevvyB,IAAI,iBAAmB,GACrD0lqB,GAAa6pI,EAAevvyB,IAAI,cAAgB,IAAIy6H,OACpDsriB,EAAWwpI,EAAevvyB,IAAI,YAC9BimqB,EAASspI,EAAevvyB,IAAI,kBAC5BkmqB,EAASqpI,EAAevvyB,IAAI,kBAC5BmmqB,EAAcopI,EAAevvyB,IAAI,eAEjCwvyB,EAAcD,EAAetiyB,eAAc,SAACywQ,GAAS,IAAD,EACxDm6C,EACIn6C,EAAI/5Q,IAAI,UAAWk0T,GACnBn6C,EAAI/5Q,IAAI,UAAWyD,EAAOpH,IAAI,YAElC0lqB,EACIhoZ,EAAI/5Q,IAAI,eAAR,UAA2B8hqB,EAA3B,YAA2CC,IAC3ChoZ,EAAI/5Q,IAAI,eAAgB8hqB,GAE5B/nZ,EACG/5Q,IAAI,cAAeyD,EAAOyV,MAAM,CAAC,cAAe,SAAU,KAC1DlZ,IAAI,YAAak0C,SAASzwC,EAAOyV,MAAM,CAAC,cAAe,MAAO,QAC9DlZ,IAAI,eAAgByD,EAAOyV,MAAM,CAAC,eAAgB,SAAU,KAC5DlZ,IAAI,aAAck0C,SAASzwC,EAAOyV,MAAM,CAAC,eAAgB,MAAO,QAChElZ,IAAI,WAAYyD,EAAOyV,MAAM,CAAC,WAAY,SAAU,KACpDlZ,IAAI,SAAUk0C,SAASzwC,EAAOyV,MAAM,CAAC,WAAY,MAAO,QAEvDyiC,IAAS5pB,YAAS8vB,IACpBk4N,EAAI/5Q,IAAI,WAAyB,MAAZoiqB,GAAiC,KAAbA,EAAmB,KAAOj7pB,OAAOi7pB,GAAUtriB,QACpFijJ,EAAI/5Q,IAAI,iBAA6B,MAAVsiqB,GAA6B,KAAXA,EAAiB,KAAOn7pB,OAAOm7pB,GAAQxriB,QACpFijJ,EAAI/5Q,IAAI,iBAA6B,MAAVuiqB,GAA6B,KAAXA,EAAiB,KAAOp7pB,OAAOo7pB,GAAQzriB,QACpFijJ,EAAI/5Q,IAAI,cAAewiqB,IAEvBzoZ,EACGj5J,OAAO,YACPA,OAAO,kBACPA,OAAO,kBACPA,OAAO,eAIZi5J,EAAI/5Q,IAAI,YAAR,UAAqByD,EAAOpH,IAAI,oBAAhC,aAAqB,EAAyBiF,KAAI,SAAAmhG,GAAI,MAAK,CAAElpE,GAAIkpE,EAAKpmG,IAAI,cAGtEgvyB,EAAelvrB,EAAUt4G,QAAO,SAAA04G,GAAQ,YAA4BnoH,IAAxBmoH,EAASo7f,cAEvDhne,IACIm7pB,EAAmBp1yB,OAAO+M,OAAOgoyB,GAAiBnqyB,KAAI,SAAAi7G,GAAQ,kCAAUA,GAAV,IAAoByyP,YAAa,eAErGu8b,EAAkBpxyB,QAAU8oC,EAAS,IAAI+1B,IAA6B,CAAE2+iB,WAAY4zL,KACpFF,EAAalxyB,QAAU8oC,EAAS,IAAI21B,IAA0B,CAAEujD,UAAWkvrB,KAC3ES,EAAiB3xyB,QAAU8oC,EAAS,IAAI61B,IAA2B,CAAEqjD,UAAW2vrB,MAG5Else,EAAY,SAACmse,GACjB,GAAIpwvB,IAAS5pB,YAAS8vB,GAAI,CACxB,IAAMmqvB,EAAgB9xL,GAAsBA,IAAuB5E,EAAYj5mB,IAAI,YAC5EoH,EAAOpH,IAAI,uBAAyB6qvB,aAAQ6kD,EAAW1vyB,IAAI,WAE9D6qvB,aAAQ6kD,EAAW1vyB,IAAI,WAAaoH,EAAOpH,IAAI,qBACjD4mC,EAAS,IAAIy8B,KAAsB,CACjChb,MAAOqnvB,EAAW1vyB,IAAI,SACtBujU,UAAW,WACT38R,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,qDACX65E,SAAU,iBAIP8tsB,GACT/owB,EAAS,IAAIy8B,KAAsB,CACjChb,MAAO,KACPk7Q,UAAW,WACT38R,EAAS,IAAIgK,IAAsB,CACjCtD,QAAStlB,EAAE,sDACX65E,SAAU,iBAOhByyC,GAAagroB,GACfA,EAASowB,GAGPzwB,GACFA,EAAQywB,IAIZ,EAAKZ,iBAAiBx6pB,EAAWk7pB,EAAaR,EAAczre,GAC5D,EAAK3E,eAnHW,4CAzLC,wDA+SZA,aAAe,WACpB,IACEh4R,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,OAEN9mP,EAAS,IAAI4K,MAvTI,EA0TZo+vB,iBAAmB,WACxB,IAAQ32L,EAAgB,EAAK9ykB,MAArB8ykB,YACR,EAII,EAAKh2kB,MAHP68E,EADF,EACEA,UACA+vrB,EAFF,EAEEA,oBACAZ,EAHF,EAGEA,oBAEIa,EAAyBllyB,KAAK6tC,MAAM7tC,KAAKC,UAAUglyB,IACnDE,EAAsB,YAAOd,GAEnCnvrB,EAAUz3G,KAAV,2BACKkmyB,IADL,IAEE9txB,OAAQ,KACRkyV,YAAa,UACb7lC,WAAYmsS,EAAcA,EAAYj5mB,IAAI,OAAS,KAErD8vyB,EAAuBznyB,KAAKkmyB,IAC5BwB,EAAuB1nyB,KAAK,EAAK2nyB,4BAA4BH,EAAqBtB,KAElF,EAAK1vrB,SAAS,CACZiB,YACA+vrB,oBAAqBC,EACrBb,oBAAqBc,IAGvB,EAAKE,2BAnVY,EAsVZC,qBAAuB,SAAChwrB,EAA4B9nH,GACzD,MAKI,EAAK6qC,MAJP68E,EADF,EACEA,UACA+vrB,EAFF,EAEEA,oBACAZ,EAHF,EAGEA,oBACAC,EAJF,EAIEA,kBAGIF,EAAY,YAAOlvrB,GACnBgwrB,EAAyBllyB,KAAK6tC,MAAM7tC,KAAKC,UAAUglyB,IACnDE,EAAsB,YAAOd,GAC7BkB,EAAoB,YAAOjB,GAEjCF,EAAa3jyB,OAAOjT,EAAO,GAC3B03yB,EAAuBzkyB,OAAOjT,EAAO,GACrC23yB,EAAuB1kyB,OAAOjT,EAAO,GACrC8nH,EAASo7f,YAAc60L,EAAqB9nyB,KAAK63G,EAASo7f,YAE1Dy0L,EAAuBpnyB,SAAQ,SAACynyB,EAAsBnxyB,GAChDmxyB,IAAyB,EAAKJ,4BAA4BF,EAAwBA,EAAuB7wyB,GAAIA,KAC/G8wyB,EAAuB9wyB,IAAK,MAIhC,EAAK4/G,SAAS,CACZiB,UAAWkvrB,EACXa,oBAAqBC,EACrBb,oBAAqBc,EACrBb,kBAAmBiB,KAlXJ,EAuXZE,6BAA+B,SAAC14yB,EAAO2+G,GAAR,OAAwB8pF,aAAyB9pF,EAAUt2G,IAAI,eAAiBogM,aAAyB9pF,EAAUt2G,IAAI,iBAAgC,EAAKmmC,MAAMne,EAAE,2CAAzBjwB,GAvX9J,EAyXZs3yB,iBAAmB,SAACnvrB,GACzB,IACEg5B,EAIEh5B,EAJFg5B,aACA7lB,EAGEnT,EAHFmT,SACAl3H,EAEE+jH,EAFF/jH,KACAskB,EACEy/F,EADFz/F,OAGF,OAAKy4H,IAAgB7lB,IAAal3H,IAAQskB,GAjYzB,EAuYZy8sB,kBAAoB,SAACt2W,EAAW9mQ,EAAW1nH,GAAvB,OAAiC,SAAAiM,GAC1D,MAII,EAAK4+B,MAHPmswB,EADF,EACEA,gBACAS,EAFF,EAEEA,oBACAZ,EAHF,EAGEA,oBAEIt3yB,EAAQ0M,EAAE4kB,OAAOtxB,MACjB2jnB,EAAax7f,EAAU1nH,GAAOkjnB,WAIpC,GAFAx7f,EAAU1nH,GAAOwuX,GAAajvX,EAEZ,iBAAdivX,EAA8B,CAChC,IAAM1tO,EAAe,EAAK/yG,MAAM4yG,cAAcn7H,MAAK,SAAA9J,GAAC,OAAIA,EAAE9T,IAAI,QAAUrI,IAAOkX,iBAAO7O,IAAI,SAC1F8/G,EAAU1nH,GAAV,aAAmC8gJ,EACnCp5B,EAAU1nH,GAAV,eAAqCT,EAGvC,GAAkB,aAAdivX,EAA0B,CAC5B,IAAMvzP,EAAW,EAAKltF,MAAMkzF,WAAWz7G,MAAK,SAAA9J,GAAC,OAAIA,EAAE9T,IAAI,QAAUrI,IAAOkX,iBAAO7O,IAAI,SACnF8/G,EAAU1nH,GAAV,SAA+Bi7H,EAC/BvT,EAAU1nH,GAAV,WAAiCT,EAGnC,GAAkB,WAAdivX,KAA2BhpX,OAAOjG,IAAU,KAAWiG,OAAOjG,GAAS,GAAK0gD,MAAMz6C,OAAOjG,KAAW,EAAK24yB,kBAAkB34yB,IAA/H,CAEO,GAAI2jnB,EAAY,CACrB,IAAMi1L,EAAkB,eAAQnB,GAChCmB,EAAmBj1L,GAAcx7f,EAAU1nH,GAE3C,EAAKymH,SAAS,CACZiB,YACAsvrB,gBAAiBmB,SAGnB,EAAK1xrB,SAAS,CAAEiB,cAGlB,GAAkB,WAAd8mQ,EAAwB,CAC1B,IAAMkpb,EAAyBllyB,KAAK6tC,MAAM7tC,KAAKC,UAAUglyB,IACnDE,EAAsB,YAAOd,GAEnCa,EAAuB13yB,GAAOwuX,GAAajvX,EAC3Co4yB,EAAuB33yB,GAAS,EAAK43yB,4BAA4BH,EAAqBC,EAAuB13yB,IAE7G23yB,EAAuBpnyB,SAAQ,SAACynyB,EAAsBnxyB,GAChDmxyB,IAAyB,EAAKJ,4BAA4BF,EAAwBA,EAAuB7wyB,GAAIA,KAC/G8wyB,EAAuB9wyB,IAAK,MAIhC,EAAK4/G,SAAS,CACZgxrB,oBAAqBC,EACrBb,oBAAqBc,QA3bR,EAgcZC,4BAA8B,SAAClwrB,EAAkC0wrB,GAAsE,IAAhCC,EAA+B,wDAAN,EACrI,OAAO3wrB,EAAUp2G,MAAK,SAACw2G,EAAU9nH,GAAX,OAAqBA,IAAUq4yB,GAAwBC,mBAASxwrB,EAAUswrB,OAjc/E,EAocZF,kBAAoB,SAAC34yB,GAC1B,IAAM8+K,EAAS74K,OAAOjG,GAEtB,OAAI8+K,EAAS,GACDA,EAAS,IAAI5hG,QAAQ,KAAM,IAAI/2E,OACzB,GAEN24K,EAAS,IAAI5hG,QAAQ,IAAK,IAAI/2E,OAE1B,GA7cC,EAgdZo6T,YAAc,WACnB,MAGI,EAAK/xR,MAFPS,EADF,EACEA,SACAu/B,EAFF,EAEEA,OAGFv/B,EAAS,IAAI8K,KACby0B,EAAO,UAAW,IAClBA,EAAO,WAAY,IACnB,EAAK04C,SAAS,CAAEg5M,QAAS,MAzdR,EA4dZt+M,cAAgB,SAACC,GACtB,MAKI,EAAKrzE,MAJPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAC,EAHF,EAGEA,KACAi3rB,EAJF,EAIEA,aAGIh3rB,EAAY/7G,OAAO47G,GACP,MAAdA,IACFm3rB,EAAan3rB,GACb5yE,EAAS,IAAIizE,KAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAOuzC,EAAM,cAAeD,EAAU77F,MAAK,SAAC2wV,GAAD,OAAaA,EAAQvuW,IAAI,QAAUw5G,OACvF5yE,EAASu/B,YAAOuzC,EAAM,eAAgB,KACtC9yE,EAASu/B,YAAOuzC,EAAM,WAAY,OA1enB,EA8eZI,eAAiB,SAACC,GACvB,MAKI,EAAK5zE,MAJPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAN,EAHF,EAGEA,KACAk3rB,EAJF,EAIEA,UAGgB,MAAd72rB,IACF62rB,EAAU72rB,GACVnzE,EAASu/B,YAAOuzC,EAAM,eAAgBM,EAAUp8F,MAAK,SAACuwV,GAAD,OAAcA,EAASnuW,IAAI,QAAU+5G,OAC1FnzE,EAASu/B,YAAOuzC,EAAM,WAAY,OAzfnB,EA6fZQ,WAAa,SAACC,GACnB,MAII,EAAKh0E,MAHPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OACAV,EAHF,EAGEA,KAEY,MAAVS,GACFvzE,EAASu/B,YAAOuzC,EAAM,WAAYU,EAAOx8F,MAAK,SAACwwV,GAAD,OAAUA,EAAKpuW,IAAI,QAAUm6G,QApgB5D,EAwgBZ02rB,eAAiB,SAAC5zrB,GACvB,MAGI,EAAK92E,MAFPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KAEF9yE,EAASu/B,YAAOuzC,EAAM,YAAauD,GAAS,MA7gB3B,EAghBZ6zrB,kBAAoB,SACzBrmyB,EACAw8G,EACAh/E,EACAw2E,EACAsyrB,GAEA,IACE57tB,EACE,EAAKhvC,MADPgvC,QAEF,OACE,eAAC,KAAD,CACEm2L,YAAY,EADd,SAGE,eAAC,QAAD,CACE7gQ,KAAMA,EACN8qE,UAAW2nD,KACXtnB,WAAY,CACV8I,WAAY,EAAKz7E,MAAM8twB,GACvBv3vB,aAAc,GACdvR,QAASA,EAAQzgC,QAAO,SAAAi1G,GAAM,OAAI8ypB,YAAmB9ypB,EAAOz8G,IAAI,SAAU,EAAKijC,MAAM8twB,OAAYlyyB,UACjGqmH,eAAgB,SAACzI,GAAD,OAA4CA,EAAOz8G,IAAI,UACvEs9H,eAAgB,SAAC7gB,GAAD,OAA4CA,EAAOz8G,IAAI,UACvEinH,cACAluE,WAAY,CACVo/E,SAAU4ve,KACVvqe,OAAQ,SAAA/gB,GAAM,OAAI,eAAC,IAAD,yBAChB4pR,gBAAgB,EAChBhxT,UAAWm0C,IAAWr0C,EAAQutP,sBAC1BjmN,EAAOsV,YAHK,aAKftV,EAAO1/E,UAEVuqU,YAAa,SAAA7qP,GAAM,OAAI,eAAC,IAAD,CAAY9G,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cua,EAAOxlE,KAAKj3C,IAAI,YACpFonW,YAAa,SAAA3qP,GAAM,OAAI,eAAC,IAAD,CAAY9G,QAAQ,QAApB,SAA6BsR,KACpDq6O,iBAAkB,SAAAn7T,GAAK,OAAI,eAAC,IAAD,CACzBkgW,gBAAgB,EADS,SAGzB,eAAC,IAAD,CAAY1wR,QAAQ,QAApB,4BAKJ99B,OAAQ,EAAKqnQ,yBACbznO,SAAU,SAAAgF,GAAM,OAAIgC,EAAchC,EAAOz8G,IAAI,QAC7Cy+G,cAAe,SAAC9mH,EAAe4mH,GACH,iBAAtBA,EAAWp3F,OACb,EAAK03F,UAAS,SAAC57E,GAAD,mBAAC,eACVA,GADS,kBAEX8twB,EAAWp5yB,OAGd,EAAKknH,UAAS,SAAC57E,GAAD,mBAAC,eACVA,GADS,kBAEX8twB,EAAW,UAKpBl7rB,iBAAkB,CAChBC,WAAW,QA5kBF,EAmlBZk7rB,0BAA4B,SACjC/rrB,GAEA,MAGI,EAAK9+E,MAFPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EAEIigB,EAAUg9E,EAASv8G,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAE5B,IAAI,QAAQwjO,cAAc3hO,EAAE7B,IAAI,YAC1E,OACE,eAAC,KAAD,CACEsrQ,YAAY,EADd,SAGE,eAAC,QAAD,CACE7gQ,KAAM,YACN8qE,UAAW2nD,KACXtnB,WAAY,CACVoR,SAAS,EAMT/+E,QAASA,EAAQppC,UACjBy+H,eAAgB,SAAC7gB,GAAD,OAAwBA,EAAOz8G,IAAI,SACnDklH,eAAgB,SAACzI,GAAD,OAAwBA,EAAOz8G,IAAI,OACnDinH,YAAaj/F,EAAE,oCACf+wB,WAAY,CACVo/E,SAAU4ve,KACVvqe,OAAQ,SAAA/gB,GAAM,OAAI,eAAC,IAAD,yBAChB4pR,gBAAgB,EAChBhxT,UAAWm0C,IAAWr0C,EAAQutP,sBAC1BjmN,EAAOsV,YAHK,aAKftV,EAAO1/E,UAIVqqU,YAAa,SAAA3qP,GAAM,OAAI,eAAC,IAAD,CAAY9G,QAAQ,QAApB,SAA6B3tF,EAAE,uCACtDs5U,iBAAkB,SAAAn7T,GAAK,OAAI,eAAC,IAAD,CACzBkgW,gBAAgB,EADS,SAGzB,eAAC,IAAD,CAAY1wR,QAAQ,QAApB,2BAIFgS,gBAAiB,EAAK06gB,gBACtB18R,iBAAkB,EAAK1hP,kBAEzBpsC,OAAQ,EAAKqnQ,yBACbznO,SAAU,SAAArwG,GAAM,OAAI,EAAKypyB,eAAezpyB,IACxCq3G,cAAe,SAAC9mH,EAAe4mH,MAcjC1I,iBAAkB,CAChBC,WAAW,QAppBF,EA2pBXmO,iBAAmB,SAAC99E,GAC1B,IAAQgvC,EAAY,EAAKhvC,MAAjBgvC,QACR,OACE,eAAC,KAAWwwR,iBAAZ,2BAAiCx/T,GAAjC,IAAwCkvC,UAAWF,EAAQ8uC,iBAA3D,SACE,eAAC,KAAD,CAAmB5uC,UAAWF,EAAQ04C,WA/pBzB,EAmqBXw0gB,gBAAkB,SAACl8lB,GACzB,OACE,wBAAC,KAAWwhF,gBAAZ,2BAAgCxhF,GAAhC,IAAuC5lC,IAAK4lC,EAAM8Q,KAAKj3C,IAAI,QACzD,eAAC,IAAD,CAASmmH,MAAOhgF,EAAM5D,UAAY,GAAlC,SACE,eAAC,IAAD,CAAYozE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6C/7D,EAAM5D,eAvqBxC,EA+qBZ28S,uBAAyB,WAC9B,IACE/nQ,EACE,EAAKhxC,MADPgxC,MAGF,MAAO,CACLqsC,QAAS,SAAC8mI,EAAMrnN,GAAP,mBAAC,eACLqnN,GADI,IAEP1mI,YAAY,YACZF,aAAc,IACdI,WAAW7gF,EAAM+uF,UAAY,GAC7B2L,YAAaxmD,EAAM82C,WAAW2P,UAAU17B,MACxC,UAAW,CACTy7B,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,MAErC,QAAS,CACPomG,YAAa,MAGjBw6M,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnBgD,iBAAkB,SAAAm7N,GAAc,kCAC3BA,GAD2B,IAE9B99N,OAAQ,UACR,UAAW,CACTL,gBAAiB,kBAGrBohhB,gBAAiB,SAAAjjT,GAAc,kCAC1BA,GAD0B,IAE7B/nQ,QAAS,OACTnC,WAAY,YAEdktjB,WAAY,SAAAhjT,GAAc,kCACrBA,GADqB,IAExB5xN,OAAQ,OACRn2C,QAAS,OACTnC,WAAY,SACZwuC,aAAc,WAvtBD,EA4tBZutrB,uBAAyB,SAAC7tqB,EAAezrI,EAAe6vH,GAC9C,UAAXA,GACF,EAAK3I,SAAS,CAAEqyrB,yBAA0Bv5yB,IAC1CA,EACI,EAAKwuC,MAAMyqU,eAAej5W,GAC1B,EAAKwuC,MAAMgrwB,uBAEf,EAAKtyrB,SAAS,CAAEqyrB,yBAA0B,EAAKjuwB,MAAMiuwB,4BAnuBtC,EAuuBZE,uBAAyB,SAAChuqB,GAC/B,EAAKvkB,SAAS,CAAEwyrB,qBAAsBjuqB,EAAMziB,iBAxuB3B,EA2uBZsvrB,wBAA0B,WAC/B,EAAKpxrB,SAAS,CAAEwyrB,qBAAsB,QA5uBrB,EA+uBZC,2BAA6B,WAClC,EAAKzyrB,SAAS,CAAE0yrB,sBAAsB,IAAQ,WAC5C/uqB,aAAa,EAAKqsqB,cAClB,EAAKA,aAAe/5vB,YAAW,kCAAM,EAAK05vB,sBAAsBzqwB,eAAjC,aAAM,EAAoC4iC,UAAS,QAEpF,EAAKspuB,2BApvBY,EAuvBZuB,gCAAkC,SAACt0wB,GACxC,EAAK2hF,SAAS,CAAE4yrB,0BAA0B,EAAMC,kBAAmBx0wB,KAxvBlD,EA2vBZy0wB,iCAAmC,WACxC,EAAK9yrB,SAAS,CAAE4yrB,0BAA0B,IAC1C,EAAKxB,2BA7vBY,EAgwBZ2B,oBAAsB,SAAC10wB,GAC5B,MAKI,EAAKiJ,MAJPi1iB,EADF,EACEA,kBACA69B,EAFF,EAEEA,YACApsS,EAHF,EAGEA,qBACAske,EAJF,EAIEA,oBAGF,EAAKtyrB,SAAS,CAEZqwrB,kBAAmBj2L,EAAc79B,EAAkB5gkB,OAAOvV,KAAI,SAAAi7G,GAAQ,OAAIA,EAASo7f,cAAc,GACjGu0L,oBAAqB,GACrBZ,oBAAqB,GACrBz5gB,QAAQ,EACRq8gB,oBAAqB,KACrBX,yBAA0B,KACzB,WAEDrke,EAAqB3vS,GAAM,EAAK+F,MAAMyuwB,sBAGxC,EAAKC,mCACLR,KApxBA,IACE/1N,EAEEj1iB,EAFFi1iB,kBAGIt7d,EADF35E,EADF8ykB,aAEgC79B,GAAqBA,EAAkB5gkB,QAAW,GANnE,OAOjB,EAAKyoB,MAAQ,CACX68E,YACA+vrB,oBAAqB/vrB,EAAU76G,KAAI,SAAAi7G,GAAQ,MAAK,CAC9Cg5B,aAAch5B,EAASg5B,aACvB7lB,SAAUnT,EAASmT,SACnBl3H,KAAM+jH,EAAS/jH,SAEjB8yyB,oBAAqBvxyB,MAAMoiH,EAAUhiH,QAAQgnI,MAAK,GAClDoqqB,kBAAmB,GACnBC,kBAAkB,EAClBC,gBAAiB,GACjBv3e,QAAS,GACTi6e,aAAc,GACdC,cAAe,GACfC,UAAW,GACXX,qBAAsB,KACtBI,0BAA0B,EAC1BF,sBAAsB,EACtBM,oBAAqB,KACrBX,yBAA0B,GAC1B17gB,QAAQ,EACRk8gB,kBAAmB,KACnBO,gBAAiB,IA7BF,E,qDA0CnB,WACE,MAQIh2yB,KAAKkqC,MAPP83R,EADF,EACEA,cACAC,EAFF,EAEEA,iBACA7jN,EAHF,EAGEA,aACAE,EAJF,EAIEA,cACAo2rB,EALF,EAKEA,aACAC,EANF,EAMEA,WAIFsB,EAVA,EAOEA,qBAIFh0e,IACAD,IACA5jN,IAEIE,EAAcv6G,IAAI,YACpB/D,KAAK4iH,SAAS,CACZg5M,QAASt9M,EAAcv6G,IAAI,aAI3Bu6G,EAAcv6G,IAAI,eACpB2wyB,EAAap2rB,EAAcv6G,IAAI,eAG7Bu6G,EAAcv6G,IAAI,WACpB4wyB,EAAUr2rB,EAAcv6G,IAAI,WAI9B,MAA6B/D,KAAKkqC,MAA1Bwc,EAAR,EAAQA,OAAQ/b,EAAhB,EAAgBA,SACZ+b,EAAS,GACX/b,EAAS,IAAI2wB,KAAkB,CAC7BiuD,QAASngG,iBAAO,CACd,IAAO,CACL,CACE,QAAW,CACT,GAAMs9B,IAGV,CACE,OAAU,CACR,GAAM,mB,gCASpB,SAA0B23D,EAAW4yJ,GAAY,IAAD,OAC9C,EAMIjxQ,KAAKkqC,MALPi1iB,EADF,EACEA,kBACAj4Q,EAFF,EAEEA,YACAjF,EAHF,EAGEA,iBACAD,EAJF,EAIEA,cACAg7S,EALF,EAKEA,YAGF,IAAK79B,EAAkB/5kB,OAAOi5G,EAAU8ge,mBAAoB,CAC1D,IAAMt7d,EAAY7jH,KAAKgnC,MAAMsuwB,qBACzBn2N,EAAkB5gkB,OAAOvV,KAAI,SAAAi7G,GAK7B,cAJOA,EAASo7f,kBACTp7f,EAASiyrB,YAChBjyrB,EAAS4sN,WAAamsS,EAAcA,EAAYj5mB,IAAI,OAAS,EAC7DkgH,EAASyyP,YAAc,UAChBzyP,KAEPk7d,EAAkB5gkB,OACtBve,KAAK4iH,SAAS,CACZiB,YACA+vrB,oBAAqB/vrB,EAAU76G,KAAI,SAAAi7G,GAAQ,MAAK,CAC9Cg5B,aAAch5B,EAASg5B,aACvB7lB,SAAUnT,EAASmT,SACnBl3H,KAAM+jH,EAAS/jH,SAEjB8yyB,oBAAqBvxyB,MAAMoiH,EAAUhiH,QAAQgnI,MAAK,KAItD,GAAIq+L,IAAgB7oN,EAAU6oN,YAAa,CACzC,IAAMrjN,EAAYs7d,EAAkB5gkB,OACpC0jT,IACAD,IACAhiU,KAAK4iH,SAAS,CACZiB,YACA+vrB,oBAAqB/vrB,EAAU76G,KAAI,SAAAi7G,GAAQ,MAAK,CAC9Cg5B,aAAch5B,EAASg5B,aACvB7lB,SAAUnT,EAASmT,SACnBl3H,KAAM+jH,EAAS/jH,SAEjB8yyB,oBAAqBvxyB,MAAMoiH,EAAUhiH,QAAQgnI,MAAK,KAIlD7oI,KAAKgnC,MAAMuyP,QAAUv5R,KAAKyyyB,mBAAmB3qwB,UAC/C9nC,KAAK4iH,SAAS,CAAE22K,QAAQ,IACxBhzJ,aAAavmI,KAAK2yyB,eAClB3yyB,KAAK2yyB,cAAgB95vB,YAAW,WAAO,IAAD,EACpC,YAAK25vB,qBAAqB1qwB,eAA1B,SAAmCotX,eAAe,CAAEzlE,SAAU,aAC7D,Q,kCAIP,WACElpN,aAAavmI,KAAK2yyB,eAClBpsqB,aAAavmI,KAAK4yyB,gB,oBAmoBpB,WAAiB,IAAD,SAEZh3e,EACE57T,KAAKgnC,MADP40R,QAEF,EAmBI57T,KAAKkqC,MAlBPm4R,EADF,EACEA,aACAnpP,EAFF,EAEEA,QACA4jE,EAHF,EAGEA,cACA1f,EAJF,EAIEA,WAEA/5E,EANF,EAMEA,KACAm6D,EAPF,EAOEA,UACAO,EARF,EAQEA,UACAI,EATF,EASEA,OACAhD,EAVF,EAUEA,WACA68B,EAXF,EAWEA,SACAjsH,EAZF,EAYEA,EACAoqxB,EAbF,EAaEA,cAGA9sI,GAhBF,EAcE3inB,OAdF,EAeEs2jB,YAfF,EAgBEqsD,kBACA76iB,EAjBF,EAiBEA,4BACA6wM,EAlBF,EAkBEA,eAGF,EASIr/T,KAAKgnC,MARP68E,EADF,EACEA,UACAqvrB,EAFF,EAEEA,iBACAF,EAHF,EAGEA,oBACAoC,EAJF,EAIEA,qBACAI,EALF,EAKEA,yBACAF,EANF,EAMEA,qBACAM,EAPF,EAOEA,oBACAX,EARF,EAQEA,yBAGIzzvB,EAAO6B,IAAS5pB,YAAS8vB,GAEzB6svB,EAAgBp+pB,EAASrsI,QAAO,SAACutI,EAAKjB,GAY1C,OAXAiB,EAAI9sI,KAAK,CACP60B,GAAIg3G,EAAQl0I,IAAI,MAChByK,KAAM,CAACypI,EAAQl0I,IAAI,aAAck0I,EAAQl0I,IAAI,aAAa0d,KAAK,KAAK+8G,OACpEtY,aAAc+xB,EAAQl0I,IAAI,eAAgB,IAC1CqoD,MAAO6rF,EAAQl0I,IAAI,QAAS,IAC5B2yW,YAAaz+N,EAAQl0I,IAAI,cAAe,IACxC2iH,QAASuxB,EAAQl0I,IAAI,WAAY,IACjC8yW,SAAU5+N,EAAQl0I,IAAI,WAAY,IAClC+yW,aAAc7+N,EAAQl0I,IAAI,eAAgB,IAC1CgzW,YAAa9+N,EAAQl0I,IAAI,cAAe,MAEnCm1I,IACN,IAEH,OACE,gBAAC,IAAD,WACE,eAAC,KAAD,CAAkBhvB,MAAOn+F,EAAE,2BAA4Bm7G,YAAalnI,KAAK2iU,eACzE,wBACErG,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAFrB,UAIE,gBAAC,IAAD,CAAM+C,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQunR,oBAA7D,UACE,gBAAC,IAAD,CAAMjnR,WAAW,EAAMM,QAAQ,gBAA/B,UACE,eAAC,IAAD,CACE4/B,QAAQ,QACRtgC,UAAWF,EAAQgxC,MAFrB,SAIGn+F,EAAE,8BAGF6vS,GAAYzgN,GAAcA,EAAWp3G,IAAI,cAC1C,eAAC,IAAD,CAAY8gH,QAAS7kH,KAAKi8T,YAAalgU,KAAK,QAAQq9E,UAAWF,EAAQwqP,aAAvE,SACE,eAAC,KAAD,CAAYv8M,SAAS,eAI3B,eAAC,QAAD,CACE7tC,UAAWqqP,IACXn1T,KAAK,WACLwrG,SAAU4pN,wBACV15R,MAAO,CACL25R,aAAcjI,EACd6lC,mBAAoB,CAClBzuC,OAAQgtC,YAKhB,eAAC,IAAD,CACEtmP,QAAQ,QACRtgC,UAAWF,EAAQgxC,MAFrB,SAIGn+F,EAAE,mCAEL,eAAC,IAAD,CACEvd,KAAK,YACL07B,MAAO,CACLpJ,MAAO/U,EAAE,gCAEXkjP,QAAS,eAAC,KAAD,IACTj1J,SAAU,CAACiqF,KAAkBjkM,KAAKo0yB,gCAEpC,eAAC,IAAD,CACE5lyB,KAAK,WACL07B,MAAO,CACLpJ,MAAO/U,EAAE,iCAGb,eAAC,IAAD,CACEvd,KAAK,aACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6CAEXkjP,QAAS,eAAC,KAAD,MAEX,eAAC,IAAD,CACEzgQ,KAAK,QACL07B,MAAO,CACLpJ,MAAO/U,EAAE,4BAEXkjP,QAAS,eAAC,KAAD,IACTj1J,SAAU,CAACsqF,QAEb,eAAC,IAAD,CACE91L,KAAK,eACL07B,MAAO,CACLpJ,MAAO/U,EAAE,mCAEXkjP,QAAS,eAAC,KAAD,IACTj1J,SAAU,CAACiqF,KAAkBjkM,KAAKo0yB,gCAEpC,eAAC,IAAD,CACE5lyB,KAAK,cACL07B,MAAO,CACLpJ,MAAO/U,EAAE,kCAEXkjP,QAAS,eAAC,KAAD,MAEX,eAAC,IAAD,CACEzgQ,KAAK,WACL07B,MAAO,CACLpJ,MAAO/U,EAAE,8BAEXkjP,QAAS,eAAC,KAAD,MAEVjvQ,KAAK60yB,kBAAkB,cAAe9oxB,EAAE,6BAA8ByxF,EAAWx9G,KAAKs9G,cAAe,gBACrGt9G,KAAK60yB,kBAAkB,eAAgB9oxB,EAAE,mCAAoCgyF,EAAW/9G,KAAK69G,eAAgB,iBAC7G79G,KAAK60yB,kBAAkB,WAAY9oxB,EAAE,0BAA2BoyF,EAAQn+G,KAAKi+G,WAAY,aAC1F,eAAC,IAAD,CACEzvG,KAAK,YACL07B,MAAO,CACLpJ,MAAO/U,EAAE,mCAGb,gBAAC,KAAD,CACEkjP,QAAS,eAAC,KAAD,IACTI,YAAY,EACZH,gBAAgB,gBAHlB,UAKE,eAAC,IAAD,CAAMt1L,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEtB,UAAWwgC,IACXtrG,KAAK,eACL07B,MAAO,CACLpJ,MAAO/U,EAAE,kCACT6tF,iBAAkB,CAChBC,WAAW,QAKnB,eAAC,IAAD,CAAMjgC,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEtB,UAAWwgC,IACXtrG,KAAK,YACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BACT6tF,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyqF,aAIjB,eAAC,IAAD,CACEj2L,KAAK,eACL07B,MAAO,CACLpJ,MAAO/U,EAAE,mCAEXkjP,QAAS,eAAC,KAAD,MAIVjvQ,KAAK+0yB,0BAA0BoB,GAG9B30vB,GACE,eAAC,IAAD,CACEhzC,KAAK,WACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BAEXkjP,QAAS,eAAC,KAAD,MAKf,eAAC,KAAD,CAAWI,YAAY,EAAOJ,QAAS,eAAC,KAAD,IAAvC,SACE,eAAC,IAAD,CACEr1L,MAAM,EACNgB,GAAI,GAFN,SAIE,eAAC,QAAD,CACEpsE,KAAK,SACL8qE,UAAWi/O,KACXruR,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,+BACfigB,QAAO,OAAEqzR,QAAF,IAAEA,OAAF,EAAEA,EAAgB9gT,OACzB08Y,kBAAkB,EAClB55R,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,eAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,eAAC,IAAD,CACErrG,KAAK,eACLygQ,QAAS,eAAC,KAAD,IACTs2D,UAAW,GACXr7R,MAAO,CACLpJ,MAAO/U,EAAE,kCACT8gG,YAAY,EACZlT,WAAY,CACVA,WAAY,CACV6lE,UAAW,SAKnB,eAAC,IAAD,CAAgBv+I,GAAG,6BAA6Bm4C,UAAWF,EAAQm9tB,eAAnE,oBAAiG,OAAVl7rB,QAAU,IAAVA,GAAA,UAAAA,EAAYp3G,IAAI,uBAAhB,eAAiClC,SAAU,EAAlI,WAGE2/C,GACE,eAAC,IAAD,CACEhzC,KAAK,iBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6BAEXkjP,QAAS,eAAC,KAAD,MAMbztN,GACE,eAAC,IAAD,CACEhzC,KAAK,iBACL07B,MAAO,CACLpJ,MAAO/U,EAAE,6BAEXkjP,QAAS,eAAC,KAAD,MAMbztN,GACE,eAAC,IAAD,CACEhzC,KAAK,cACL07B,MAAO,CACLpJ,MAAOuooB,GAAoBt9oB,EAAE,8CAC7B4tF,WAAY,CACV+pK,gBAAiB,CAAEtqM,UAAWF,EAAQo9tB,uBACtCx5rB,WAAY,CAAE1jC,UAAWF,EAAQq9tB,oBAGrCtniB,QAAS,eAAC,KAAD,MAMd5rN,IAAS5pB,YAAS4vB,MACjB,gBAAC,IAAD,CAAMmwB,WAAW,EAAMJ,UAAWF,EAAQs9tB,mBAAoB/6yB,IAAKuE,KAAKwyyB,qBAAxE,UACE,eAAC,KAAD,CACEvjiB,QAAS,eAAC,KAAD,IACTI,YAAY,EACZxjJ,KAAM9/F,EAAE,wCAET83F,EAAUhiH,OAAS,GAAKgiH,EAAU76G,KAAI,SAACi7G,EAAUjhH,GAAX,OACrC,gBAAC,IAAD,CAAc42E,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQu9tB,kBAAmBh7yB,IAAKuH,IAAM6gH,EAAUhiH,OAAS,EAAI,EAAK4wyB,mBAAqB,KAApI,UACE,gBAAC,KAAD,CACEpjiB,YAAY,EACZp2L,WAAW,aAFb,UAIE,gBAAC,IAAD,CAAa9qE,MAAO+kyB,IAAqBjvrB,EAASmT,WAAanT,EAASg5B,aAAcpjC,WAAW,EAAjG,UACE,eAAC,IAAD,UACE,eAAC,IAAD,CAAYH,QAAQ,QAApB,SACG3tF,EAAE,sCAGP,eAAC,IAAD,CAASm+F,MAAOjG,EAASg5B,cAAgB,GAAI/jE,QAAS,CAAEsxM,OAAQtxM,EAAQo2L,SAAxE,SACE,eAAC,IAAD,CAEE5zQ,MAAOuoH,EAASm8B,iBAAmBtD,EAAcn7H,MAAK,SAAA9J,GAAC,OAAIA,EAAE9T,IAAI,WAAakgH,EAASg5B,iBAAiBrqI,iBAAO7O,IAAI,OAAS,GAC5Hy3G,SAAU,EAAKylnB,kBAAkB,eAAgBp9mB,EAAW7gH,GAH9D,SAKG85I,EAAc9zI,KAAI,SAAAi0I,GAAY,OAC7B,eAAC,IAAD,CAAuCvhJ,MAAOuhJ,EAAal5I,IAAI,MAA/D,SACGk5I,EAAal5I,IAAI,UADLk5I,EAAal5I,IAAI,cAMtC,eAAC,IAAD,UAAiBmvyB,IAAqBjvrB,EAASmT,WAAanT,EAASg5B,cAAgBlxH,EAAE,2CAEzF,gBAAC,IAAD,CAAa5d,MAAO+kyB,IAAqBjvrB,EAASmT,WAAanT,EAASg5B,aAAcpjC,WAAW,EAAjG,UACE,eAAC,IAAD,UACE,eAAC,IAAD,CAAYH,QAAQ,QAApB,SACG3tF,EAAE,kCAGP,eAAC,IAAD,CAASm+F,MAAOjG,EAASmT,UAAY,GAAIl+C,QAAS,CAAEsxM,OAAQtxM,EAAQo2L,SAApE,SACE,eAAC,IAAD,CAEE5zQ,MAAOuoH,EAASpjF,aAAeu8F,EAAWz7G,MAAK,SAAA9J,GAAC,OAAIA,EAAE9T,IAAI,WAAakgH,EAASmT,aAAaxkH,iBAAO7O,IAAI,OAAS,GACjHy3G,SAAU,EAAKylnB,kBAAkB,WAAYp9mB,EAAW7gH,GAH1D,SAKGo6H,EAAWp0H,KAAI,SAAAouH,GAAQ,OACtB,eAAC,IAAD,CAAmC17H,MAAO07H,EAASrzH,IAAI,MAAvD,SACGqzH,EAASrzH,IAAI,UAAYqzH,EAASrzH,IAAI,UAD1BqzH,EAASrzH,IAAI,cAMlC,eAAC,IAAD,UAAiBmvyB,IAAqBjvrB,EAASmT,WAAanT,EAASg5B,cAAgBlxH,EAAE,8CAG3F,gBAAC,KAAD,CACEsjP,YAAY,EACZH,gBAAgB,gBAFlB,UAIE,eAAC,IAAD,CAAMt1L,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC,IAAD,CAAazsE,MAAO+kyB,IAAqBjvrB,EAAS/jH,KAAM25G,WAAW,EAAnE,UACE,eAAC,IAAD,UACE,eAAC,IAAD,CAAYH,QAAQ,QAApB,SACG3tF,EAAE,wCAGP,eAAC,IAAD,CACErwB,MAAOuoH,EAAS/jH,MAAQ,GACxBs7G,SAAU,EAAKylnB,kBAAkB,OAAQp9mB,EAAW7gH,GAFtD,SAIG,CACC,CACE9C,KAAM,WACNk7E,QAASrvD,EAAE,+BAEb,CACE7rB,KAAM,SACNk7E,QAASrvD,EAAE,6BAEb,CACE7rB,KAAM,aACNk7E,QAASrvD,EAAE,kCAEb/iB,KAAI,SAAA9I,GAAI,OACR,eAAC,IAAD,CAA6BxE,MAAOwE,EAAKA,KAAzC,SACGA,EAAKk7E,SADOl7E,EAAKk7E,cAKxB,eAAC,IAAD,UAAiB83tB,IAAqBjvrB,EAAS/jH,MAAQ6rB,EAAE,qCAG7D,eAAC,IAAD,CAAM6tD,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC,IAAD,CAAazsE,MAAO+kyB,IAAqBjvrB,EAASz/F,OAAQq1F,WAAW,EAArE,UACE,eAAC,IAAD,UACE,eAAC,IAAD,CAAYH,QAAQ,QAApB,SACG3tF,EAAE,+BAGP,eAAC,IAAD,CACErwB,MAAOuoH,EAASz/F,QAAU,GAC1Bg3F,SAAU,EAAKylnB,kBAAkB,SAAUp9mB,EAAW7gH,GACtDk2E,QAAS,CAEPurC,MAAOvrC,EAAQw9tB,kBAGnB,eAAC,IAAD,UAAiBxD,IAAqBjvrB,EAASz/F,QAAUuH,EAAE,qCAG/D,eAAC,IAAD,CAAM6tD,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASG,UAAWF,EAAQy9tB,sBAAlG,SACE,eAAC,IAAD,CAAY9xrB,QAAS,kBAAM,EAAKovrB,qBAAqBhwrB,EAAUjhH,IAA/D,SACE,eAAC,KAAD,CAAYmkH,SAAS,iBAI3B,gBAAC,IAAD,CACE3tC,WAAW,EACXI,MAAM,EACNY,KAAK,SACLvB,WAAW,SACXG,UAAWF,EAAQ09tB,qBACnBt7rB,MAAO,CACLlgC,QAAS43tB,EAAoBhwyB,GAAK,OAAS,QAP/C,UAUE,eAAC,IAAD,CAAM42E,MAAM,EAAMgB,GAAI,IACtB,eAAC,IAAD,CAAMhB,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,IAAD,CAAgBzsE,OAAO,EAAvB,SACG6kyB,EAAoBhwyB,IAAM+oB,EAAE,6CAIlC/oB,IAAM6gH,EAAUhiH,OAAS,GAAK,eAAC,IAAD,MA9HtBmB,MAkIXsyyB,GACE,sBAAKl8tB,UAAWF,EAAQ29tB,wBAAyBp7yB,IAAKuE,KAAK0yyB,kBAA3D,SACE,eAAC,KAAD,CACErjiB,YAAY,EADd,SAGE,eAAC,KAAD,CACEi2D,gBAAiB,SAAA0Y,GAAW,OAC1B,eAAC,IAAD,2BACMA,GADN,IAEE3zD,UAAW,CACT2H,aAAc,CACZC,iBAAiB,QAKzB4qD,YAAa,SAAAlqS,GAAM,OACjB,eAAC,IAAD,2BACMA,GADN,IAEE4uR,SAAU,EAAKgxe,sBACf14rB,WAAW,EACXmR,YAAaj/F,EAAE,8CACf4tF,WAAU,2BACLhnE,EAAOgnE,YADF,IAERj+G,MAAOu5yB,IAETn4rB,WAAU,2BACLnqE,EAAOmqE,YADF,IAER5jC,QAAS,CAAEurC,MAAOvrC,EAAQ49tB,0BAA2Bv/xB,KAAM2hE,EAAQ69tB,mBACnEh6rB,eACE,eAAC,IAAD,CAAgBE,SAAS,QAAzB,SACE,eAAC,KAAD,CAAY7jC,UAAWF,EAAQ89tB,6BAMzCv0rB,WAAYwyrB,EACZv5yB,MAAOk6yB,EACP5pwB,QAASoqwB,EACT5zrB,cAAexiH,KAAKg1yB,uBACpBx5rB,SAAU,SAAC2rB,EAAelxH,GAAhB,OAA6BA,IAAQ4tG,EAAUhiH,OAAS,EAAK0zyB,gCAAgCt/xB,EAAIgrB,IAAM,EAAK00wB,oBAAoB1/xB,EAAIgrB,MAC9IogG,eAAgB,SAAA7gB,GAAM,OAAIy0rB,GAC1Bz8e,aAAc,SAAAh4M,GAAM,OAAIA,GACtB,gBAAC,IAAD,CAAM5mC,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAA7C,UACE,eAAC,IAAD,CAAYggC,QAAQ,YAAYzT,MAAM,cAAtC,SAAqDua,EAAOhyG,OAC5D,eAAC,IAAD,CAAYkrG,QAAQ,YAAYzT,MAAM,cAAtC,SAAqDua,EAAO0F,eAC5D,eAAC,IAAD,CAAYxM,QAAQ,QAApB,SAA6B8G,EAAOp0D,QACpC,eAAC,IAAD,CAAYstD,QAAQ,QAApB,SAA6B8G,EAAOk2P,cACpC,eAAC,IAAD,CAAYh9P,QAAQ,QAApB,SAA6B8G,EAAOm2P,WACpC,gBAAC,IAAD,CAAYj9P,QAAQ,QAApB,UAA6B8G,EAAOq2P,SAApC,IAA+Cr2P,EAAOs2P,aAAtD,IAAqEt2P,EAAOu2P,eAC5E,eAAC,IAAD,CAAS39R,UAAWF,EAAQq2R,QAASkgR,OAAO,QAGhDnxO,UAAW,KACX4tN,cAAc,EACd11P,UAAU,EACV0kD,SAAU,OACVG,cAAetvY,EAAE,+BACjBqtD,UAAWF,EAAQ+9tB,qBAM7B,gBAAC,IAAD,CAAMz9tB,WAAW,EAAMM,QAAQ,WAA/B,UACE,eAAC,IAAD,CACEmsB,MAAM,UACN4e,QAAS7kH,KAAKm1yB,uBACdv7qB,QAAS,eAAC,KAAD,IACTxgD,UAAWF,EAAQ+gS,UAJrB,SAMGluV,EAAE,yCAEL,gBAAC,IAAD,CACEonG,SAAUiirB,EACVzqsB,KAAMttG,QAAQ+3yB,GACdzwqB,QAAS3kI,KAAKg0yB,wBAHhB,UAKE,eAAC,IAAD,CAAUnvrB,QAAS7kH,KAAK2zyB,iBAAxB,SACG5nxB,EAAE,sCAEL,eAAC,IAAD,CAAU84F,QAAS7kH,KAAKq1yB,2BAAxB,SACGtpxB,EAAE,uCAGP,eAAC,IAAD,CACEonG,SAAUnzH,KAAK0yyB,kBAAkB5qwB,QACjC6iE,KAAM6qsB,EACN7wqB,QAAS3kI,KAAK01yB,iCACd55Z,aAAc,CACZ/7G,SAAU,MACVK,WAAY,UAEdn7J,gBAAiB,CACf86J,SAAU,SACVK,WAAY,UAVhB,SAaE,gBAAC,IAAD,CAAM5mN,WAAW,EAAME,UAAU,SAAST,WAAW,SAASG,UAAWF,EAAQg+tB,8BAAjF,UACE,eAAC,KAAD,CAA2BjxsB,MAAM,UAAUkhB,SAAS,UACpD,gBAAC,IAAD,CAAM3tC,WAAW,EAAME,UAAU,SAAST,WAAW,SAASG,UAAWF,EAAQi+tB,iBAAjF,UACE,eAAC,IAAD,CAAYlxsB,MAAM,cAAlB,SACGl6E,EAAE,gDAEL,eAAC,IAAD,CAAYk6E,MAAM,cAAlB,SACGl6E,EAAE,mDAGP,gBAAC,IAAD,CAAMytD,WAAW,EAAMM,QAAQ,eAA/B,UACE,eAAC,IAAD,CACEmsB,MAAM,UACN4e,QAAS7kH,KAAK01yB,iCAFhB,SAIG3pxB,EAAE,wBAEL,eAAC,IAAD,CACEk6E,MAAM,UACNyT,QAAQ,YACRmL,QAAS,kBAAM,EAAK8wrB,uBAHtB,SAKG5pxB,EAAE,mCASdy1B,IAASgtE,GACR,eAAC,IAAD,CAAStE,MAAO0koB,aAAO,OAACzzoB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,UAAY,GAAKgoB,EAAE,sDAA3D,SACE,+BACE,eAAC,QAAD,CACEvd,KAAK,oBACL8qE,UAAWszC,KACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uCACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,WAETiX,UAAW0xoB,aAAO,OAACzzoB,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,UACnCw8P,sBAAuB,CACrBjlJ,MAAO,CACLkG,YAAa,IAGjBqL,YAAY,SAOxB,eAAC,KAAD,CAAeqa,YAAalnI,KAAK2iU,yB,GAh2COl+R,aA2+CrC2ywB,GAAoB,cA+GlBniuB,sBACb00C,cACA1uC,aAjOa,SAACC,GAAD,oBACbzE,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B2xE,KAAM,CACJvlE,OAAQ,IACRvM,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC2V,OAAQ,mBAEV3Q,MAAO,CACLmJ,aAAcn4C,EAAMZ,UACpB2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5BsxrB,kBAAmB,CACjB36tB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7B2iC,SAAU,WACV,WAAY,CACVthE,QAAS,KACTshE,SAAU,WACV+H,gBAAiB,UACjBuM,OAAQ,MACRj2C,MAAO,MACPg5C,IAAK,MACL+H,UAAW,mBACX9hH,KAAM2gE,EAAMZ,YAGhBu8tB,wBAAyB,CACvBv7tB,MAAO,OACPghC,UAAWphC,EAAMZ,WAEnB28tB,eAAgB,CACd37tB,MAAO,OACP2hC,SAAU,WACV,WAAY,CACVthE,QAAS,KACTshE,SAAU,WACV+H,gBAAiB,UACjBuM,OAAQ,OACRj2C,MAAO,MACPg5C,IAAK,MACL+H,UAAW,mBACX9hH,KAAM2gE,EAAMZ,SAAS,OAGzB08tB,mBAAoB,CAClB/wsB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B0xrB,qBAAsB,CACpB1krB,cAAeh3C,EAAMZ,QAAQ,IAE/BmmR,oBAAqB,CACnBptO,aAAcn4C,EAAMZ,UACpBi3C,OAAQr2C,EAAMZ,QAAQ,KAExBopP,aAAc,CACZrwM,aAAcn4C,EAAMZ,WAGtBq8tB,sBAAuB,CACrBplrB,OAAQ,OACR21O,UAAW,UAGbwvc,eAAgB,CACdzkrB,WAAY/2C,EAAMZ,QAAQ,QAE5BmsP,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,OAGnCoqJ,QAAS,CACPtuI,OAAQ,MAEVq2qB,aAAc,CACZ/6rB,UAAWphC,EAAMZ,QAAQ,OAE3B48tB,8BAA+B,CAC7Bp7tB,QAASZ,EAAMZ,QAAQ,IAAK,IAE9B68tB,iBAAkB,CAChB57tB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3By8tB,kBAAmB,CACjB7krB,cAAe,kBAEjB4krB,0BAA2B,CACzB3vrB,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnC8yP,UAAW,CACT39P,UAAWphC,EAAMZ,WAEnBi1R,QAAS,CACPjzP,UAAWphC,EAAMZ,QAAQ,IAE3B+7tB,eAAgB,CACdpprB,UAAW,QACXoG,aAAc,IAEhBijrB,sBAAuB,CACrBr5rB,SAAU,YAEZs5rB,iBAAkB,CAChBj6rB,UAAU,mBA/HI,SAACphC,GAAD,MAA+B,CAC/C02C,KAAM,CACJr2C,OAAQ,EACRO,QAAS,EACTmqB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1B,UAAW,CACTjf,MAAO/qB,EAAM+pC,QAAQC,KAAK,OAG9BoyrB,cAAe,CACbh8tB,MAAO,OACP0pC,gBAAiB,cACjB6C,UAAW,OACX5hB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7B,UAAW,CACTH,gBAAiB,iBAkHlBgigB,CAAU9riB,MAoHM,CAAE8zC,WAAW,IAChC7vE,YAAgB,gBAChB0/D,mBAjEsB,SAAC73E,EAAOyF,GAC9B,IAAM4W,EAAOF,cAAiBnc,GACxBs3E,EAAiB7xE,EAASuwkB,YAjDH,SAACA,EAAa4E,EAAoBv+jB,GAC/D,OAAmC25jB,EAAYj5mB,IAAI,iBAAmB,IAAIg7C,MAAM,KAAhF,mBAAOyqnB,EAAP,KAAqBC,EAArB,KACA,OAAOzsD,EAAYhsmB,eAAc,SAACywQ,GAChC,IAAM/jK,EAAYs/f,EAAYj5mB,IAAI,aAC5BgzW,EAAcimQ,EAAYj5mB,IAAI,eAE9Bm6G,EAAS8+f,EAAYj5mB,IAAI,UACzB8yW,EAAWmmQ,EAAYj5mB,IAAI,YAE3B+5G,EAAak/f,EAAYj5mB,IAAI,cAC7B4/wB,EAAe3mK,EAAYj5mB,IAAI,gBAE/BgmqB,EAAgB/sD,EAAYj5mB,IAAI,UAEtC09Q,EACG/5Q,IAAI,eAAgB8hqB,GACpB9hqB,IAAI,YAAa+hqB,GAEhB1yT,GACFt1F,EAAI/5Q,IAAI,cAAekL,cAAI,CACzBquB,GAAIy8E,EACJhiH,MAAOq7W,KAGP4sa,GACFligB,EAAI/5Q,IAAI,eAAgBkL,cAAI,CAC1BquB,GAAI68E,EACJpiH,MAAOioxB,KAGP9sa,GACFp1F,EAAI/5Q,IAAI,WAAYkL,cAAI,CACtBquB,GAAIi9E,EACJxiH,MAAOm7W,KAGNkzT,GACHtoZ,EAAI/5Q,IAAI,SAAU0hB,iBAAO,CAAE6X,GAAI,UAAWvlC,MAAO,aAE/C2nD,IAAS5pB,YAAS8vB,IAAMq4jB,GAAsBA,IAAuB5E,EAAYj5mB,IAAI,SACvF09Q,EAAI/5Q,IAAI,qBAAqB,GAE7B+5Q,EAAI/5Q,IAAI,qBAAqB,MAOkCsnZ,CAAuBviX,EAASuwkB,YAAavwkB,EAASm1kB,mBAAoBv+jB,GAA/FzwC,gBACxC6qG,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO25rB,GAErD,OAAO,aACL35rB,OACAa,gBACAj7D,QACGvQ,YAAyB,CAC1BqsiB,kBAAmB9hc,cACnBP,cAAeF,cACfxf,WAAY8f,cACZgqL,YAAappH,YAA2B2zE,KACxCt2K,WAAYC,wBAAcqC,GAC1BD,UAAWsB,eACXf,UAAWgB,eACXZ,OAAQa,eACRg5B,SAAUL,eACVw+pB,cAAe19pB,eACf/xF,OAAQD,eACR4inB,iBAAkBrthB,eAClBxtB,4BAA6B7mE,cAC7B03Q,eAAgBumE,gBAdf9yV,CAeA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfgjQ,cAAe,WACbr3R,EAAS,IAAI20B,MAEf8+C,aAAc,WACZzzE,EAAS,IAAIs0E,OAEfy1rB,aAAc,SAACzzwB,GACb0J,EAAS,IAAIgzE,KAAkB18E,KAEjC0zwB,UAAW,SAAC1zwB,GACV0J,EAAS,IAAIqzE,KAAc/8E,KAE7Bg1wB,kBAAmB,WACjBtrwB,EAAS,IAAI4jO,OAEfomG,eAAgB,SAACn3O,GACf7yF,EAAS,IAAIm2B,KAAiC,CAAE08D,iBAElD03qB,oBAAqB,WACnBvqwB,EAAS,IAAIi2B,OAEfgwQ,qBAAsB,SAACC,GACrBlmS,EAAS,IAAIm1B,KAA0B,CAAE+wQ,qBAU7Cv5C,aAAmC,CAAEt2B,SAAUo2iB,KAC/C7ve,oBAAU,CACRC,kBAAkB,EAClBC,oBAAoB,IARTxyP,CAUbw1lB,K,6BC/0DF,oEAOO,IAAMpa,EAAyB,SACpCD,EADoC,GAGV,IADxBv6R,EACuB,EADvBA,kBAAmBD,EACI,EADJA,oBAErB,OAAIC,EACKu6R,EAELx6R,EACKw6R,EAAiB7kpB,QAAO,SAAC+mW,GAAD,OAAcsjB,EAAoBrsX,SAAS5H,OAAO2wW,EAAQvuW,IAAI,WAExFqspB,GAQIH,EAA8B,SACzCp6R,GAEA,GAAKA,EAAL,CAGA,IAAMvrG,EAAU,IAAIzrR,IAAIg3X,EAAkB7sX,IAAIrH,SAC9C,OAAO,SAAC2wW,GAAD,OAAchoF,EAAQrmR,IAAItC,OAAO2wW,EAAQrxU,S,mXCZrCguX,EAAwB,qBAyB/Bz/R,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D0oiB,YAAa,CACX7uqB,YAAaxtD,EAAMZ,QAAQ,IAE7Bu9R,KAAM,CACJriP,UAAW,SACXvvB,MAAO,uBAETwgO,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,OAGnCsyrB,0BAA2B,CACzBl7rB,UAAWphC,EAAMZ,gBA4gBNrF,sBACb4pC,mBA9CsB,SAAC73E,EAAOyF,GAC9B,IAAMy0b,EAAuB5iR,cAAiCt3K,GACxDs3E,EAvCiB,SAAC4iX,GAKxB,IAAMxvQ,EAAYwvQ,GAAwBA,EAAqBn9d,IAAI,aAEnE,GAAI2tN,EAAW,CAAC,IAAD,IACP+llB,EAAmBruxB,iBAAO,CAC9B+jY,YAAaz7L,EAAU3tN,IAAI,OAAS2tN,EAAU3tN,IAAI,eAClD8zN,aAAcnG,EAAU3tN,IAAI,QAAU2tN,EAAU3tN,IAAI,gBACpDyK,KAAMkjN,EAAU3tN,IAAI,QACpBq3E,QAAS,OAGLjwE,EAAM,UAAGumN,EAAU3tN,IAAI,iBAAjB,aAAG,EAAyBwH,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,aAC9D2zyB,EAAuCvsyB,GAAUA,EAAOpP,KAAO,EACnEqtB,iBAAO,CACL89a,SAAU/7b,EAAOyV,MAAM,CAAC,EAAG,QAAUzV,EAAOyV,MAAM,CAAC,EAAG,aACtD6/F,UAAWt1G,EAAOyV,MAAM,CAAC,EAAG,SAAWzV,EAAOyV,MAAM,CAAC,EAAG,cACxD+/G,YAAax1H,EAAOyV,MAAM,CAAC,EAAG,gBAC9BgxM,KAAMzmN,EAAOyV,MAAM,CAAC,EAAG,SACvBllB,MAAOyP,EAAOyV,MAAM,CAAC,EAAG,UACxBiumB,wBAAuB,UAAE1jnB,EAAOyV,MAAM,CAAC,EAAG,mCAAnB,QAAkD,OAE3E,KACF,OAAOwI,iBAAO,yBACZsoM,UAAW+llB,GACPC,GAAsB,CAAE/2qB,YAAa+2qB,IAF9B,IAGXj5Z,iBAAkBtzY,GAAUA,EAAOpP,KAAO,EAAIoP,EAAOyV,MAAM,CAAC,EAAG,qBAAuB,QAI1F,OAAOhO,gBAMe+kyB,CAAiBz2U,GAEvC,OAAO,aACL5iX,gBACA4iX,wBACGpub,YAAyB,CAC1B0+K,WAAYwqC,cACZhwN,QAAS6vN,cACT1gJ,WAAYC,wBAAc6zS,GAC1B2oZ,qBAAsBx8rB,wBAAc3uE,EAASu0N,UAC7C+iJ,0BAA2BxgW,eAC3BqxY,6BAA8B3xY,eAN7BnQ,CAOA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAktwB,eAAgB,SAAC52wB,GACf0J,EAAS,IAAI47C,KAA6BtlD,KAE5CiwlB,iBAAkB,SAACrwlB,EAAoB0oF,GACrC5+E,EAAS,IAAIs8C,KAAuB,CAClCpmD,aACA0oF,cAGJ41S,cAAe,SAACt+X,EAAoBssX,EAAqB5jS,GACvD5+E,EAAS,IAAIg8C,KAA6B,CACxC9lD,aACAssX,cACA5jS,cAGJuurB,0BAA2B,WACzBntwB,EAAS,IAAIsJ,IAA8B7qB,iBAAO,CAChDuhF,MAAM,WAQZxrD,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMwxS,EACNxnF,oBAAoB,IALTxyP,EAvgBuC,SAAA/qC,GAAU,IAAD,EAE3DgnlB,EAkBEhnlB,EAlBFgnlB,iBACA/xN,EAiBEj1X,EAjBFi1X,cACA24Y,EAgBE5twB,EAhBF4twB,0BACAntuB,EAeEzgC,EAfFygC,MACA03P,EAcEn4R,EAdFm4R,aACA13R,EAaET,EAbFS,SACA5e,EAYEme,EAZFne,EACA8rxB,EAWE3twB,EAXF2twB,eACArmlB,EAUEtnL,EAVFsnL,WACAxlL,EASE9B,EATF8B,QACAk1b,EAQEh3b,EARFg3b,qBACA/lX,EAOEjxE,EAPFixE,WACA6lJ,EAME92N,EANF82N,SACA8sJ,EAKE5jX,EALF4jX,SAdF,EAmBI5jX,EAJF0twB,4BAfF,MAeyBhlyB,gBAfzB,EAgBEmxY,EAGE75W,EAHF65W,0BACAhnQ,EAEE7yG,EAFF6yG,UACA63S,EACE1qZ,EADF0qZ,6BAEI17W,EAAUs2C,IACVt0C,EAAQwjD,cACRqxf,EAAiBr+kB,sBAAYwrG,eAEnC,GAAsDz4G,WAAe,IAArE,qBAAO0rlB,GAAP,MAA4BC,GAA5B,MACA,GAA0D3rlB,WAAe,IAAzE,qBAAO6plB,GAAP,MAA8BC,GAA9B,MACA,GAAwD9plB,YAAe,GAAvE,qBAAOuslB,GAAP,MAA6BC,GAA7B,MAEMlpO,GAAgB5sS,GAAcA,EAAWp3G,IAAI,aAC7Cg0yB,GAAkBhwZ,IAAiBA,GAAchkZ,IAAI,eAErD0quB,GAAavtQ,GAAwBA,EAAqBn9d,IAAI,UAAW,EACzEi0yB,GAAwB92U,GAAwBA,EAAqBtgd,MAAM,CAAC,YAAa,WACzFq3xB,GAAoB/2U,GAAwBA,EAAqBtgd,MAAM,CAAC,YAAa,QACpEsgd,GAAwBA,EAAqBtgd,MAAM,CAAC,YAAa,gBAElFs3xB,GAA2BN,EAAqBh3xB,MAAM,CAAC,eAAgB,OACvEytmB,GAAyB,OAAG0B,QAAH,IAAGA,GAAH,UAAGA,EAAgBpumB,MAAK,SAAAy1G,GAAQ,OAAIA,EAASrzH,IAAI,QAAUm0yB,aAA3D,aAAG,EAA2En0yB,IAAI,YAC3Go0yB,GAAiBP,EAAqB7zyB,IAAI,eAAiB6O,gBAC3DwlyB,GAAgBR,EAAqB7zyB,IAAI,qBAAuB6O,gBAChEylyB,GAAqBF,GAAe1nyB,MAAM2nyB,IAC7C70yB,eACAgI,QAAO,SAAC07Y,GAAD,OAAUA,EAAKljZ,IAAI,UAAU0J,MAAK,SAAC/R,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,gBAC9DiF,KAAI,SAAAi+Y,GAAI,OAAIA,IAASA,EAAKljZ,IAAI,OAASkjZ,EAAKljZ,IAAI,mBAChDnB,UAEGqwN,GAAU2klB,EAAqBh3xB,MAAM,CAACktY,EAAU,OAChDggO,GAAc76Z,GAChB,CAAC,CACC,eAAkB,CAChB,GAAMA,MAGV,GACEqllB,GAAkB,CACtB,IAAM,GAAN,OACKxqL,KAGDW,GAAqB,CAAC,CAC1B,cAAe,CACb,GAAM,YAMJ8pL,GAA2BF,IAAsBA,GAAmBx2yB,OAAS,EAAI,CAAC,CACtF,YAAe,CACb,IAAOw2yB,MAEN,GAEL5zwB,aAAgB,WACd,GAAIgqsB,IAAcypE,GAAkB,CAClC,IAAMM,EAAkB,CACtB,IAAM,GAAN,OACKD,GACAzqL,KAIPoD,EAAiBgnL,GAAkBM,GAC/BP,KACFJ,EAAeI,IACf94Y,EAAc+4Y,GAAkBD,GAAmB,CACjD,IAAM,GAAN,OAAWnqL,GAAgBW,UAIhC,CAACvtJ,IAEJz8b,aAAgB,WACd,GAAI4plB,IAAoB0pL,IAAmBvmlB,EAAY,CACrD,IAAMukO,EAAoBvkO,EAAW7vM,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,iBAAmBg0yB,OAC9E,OAAIhiX,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBhyb,IAAI,mBACzBktnB,IAAwB,QAG1BA,IAAwB,KAEzB,CAAC8mL,GAAiBvmlB,IAErB,IAAM0ia,GAAoB,SAACj+mB,GACzB,IAAMk3Y,EAAcl3Y,GAAOA,EAAIlS,IAAI,eAG/BopZ,IAAgB4qZ,KAClBptwB,EAASu/B,YAAO+kV,EAAuB,cAAe,OACtD4oZ,EAAe1qZ,GACfgS,EAAc+4Y,GAAkB/qZ,EAAa,CAC3C,IAAM,GAAN,OAAW2gO,GAAgBW,QAsC3Bvnf,GAAc,WAClB4wqB,IACAntuB,KAsDIgrX,GAAa,SAAC10Z,GAClB0J,EAAS,IAAI0J,IAA6B,CACxCpT,KACA0pE,MAAM,MAIV,OACE,cAAC,IAAD,CACEA,KAAM8joB,GACN9pmB,QAASuC,GACT,kBAAgB,6BAChBrtB,WAAW,EACX0/K,OAAO,OALT,SAOE,uBAAM+iC,SAAU+F,GAlEH,SAACl3T,GAAY,IAAD,EACrBgiZ,EAAchiZ,EAAOyV,MAAM,CAAC,YAAa,gBACzCi3M,EAAe1sN,EAAOyV,MAAM,CAAC,YAAa,iBAC1CpS,EAAOrD,EAAOyV,MAAM,CAAC,YAAa,SAClCsmb,EAAW/7b,EAAOyV,MAAM,CAAC,cAAe,aACxC+/G,EAAcx1H,EAAOyV,MAAM,CAAC,cAAe,gBAC3CllB,EAAQyP,EAAOyV,MAAM,CAAC,cAAe,UACrCgxM,EAAOzmN,EAAOyV,MAAM,CAAC,cAAe,SACpC69X,EAAmBtzY,EAAOpH,IAAI,oBAC9B8qnB,EAAuB,UAAG1jnB,EAAOyV,MAAM,CAAC,cAAe,mCAAhC,QAA+D,KAEtF63xB,EAAmBrvxB,iBAAO,CAC9B6X,GAAIksX,EACJ7oZ,IAAKuzN,EACLrpN,OACA8iN,aAAa,EACbC,UAAU,EACVpmN,OAAQie,iBAAO,CACb,CACE6X,GAAIima,EACJvmU,cACAixF,OACAl2N,QACA4I,IAAKuzN,EACL4mL,mBACAowO,+BAqBA6pL,EAAyBT,IAAqBD,GAf3CG,IAAkBA,GAAexsyB,QAAO,SAACutI,EAAKjjI,EAAK3R,GAExD,OADW2R,EAAIlS,IAAI,OAASkS,EAAIlS,IAAI,kBACzBk0yB,GACF/+pB,EAAIxxI,IAAImwN,EAAc4glB,GAExBv/pB,EAAIxxI,IAAIpD,EAAK2R,KACnB7C,wBAII+kyB,IAAkBA,GAAe1nyB,MAAM2Y,iBAAO,eAClDyuM,EAAe4glB,KAKpB9twB,EAASu/B,YAAO82L,EAAU,aAAc03iB,IACxCxxqB,QAkBE,UACE,cAAC,IAAD,CAAajmG,GAAG,6BAAhB,SACgDlV,EAA7CksxB,IAAqBD,GAA0B,qCAA0C,uCAE5F,cAAC,IAAD,UACE,eAAC,IAAD,CAAMx+tB,WAAW,EAAMP,WAAW,SAAlC,UACE,eAAC,IAAD,CAAM2B,GAAI,GAAIhB,MAAM,EAApB,UACE,cAAC,IAAD,CAAY8/B,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,gCAEL,cAAC,QAAD,CACEvd,KAAK,YACL8qE,UAAW2nD,IACXjnB,SAAUgpF,IACVrpF,WAAY,CACV3tE,QAASwlL,GAAcA,EAAWjwM,SAClC0nG,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,gCACGA,GAAUA,EAAOz8G,IAAI,QADxB,MACmC,sBAAMq1E,UAAWF,EAAQ2+R,KAAzB,SAAgCr3P,GAAUA,EAAOz8G,IAAI,sBAG1F49G,aAAc,WAAWc,GAAwB,IAAhCznE,EAA+B,EAA/BA,KACTxsC,EAAewsC,EAAKj3C,IAAI,QAAQq1C,cAChCy+K,EAAuB78K,EAAKj3C,IAAI,gBAAgBq1C,cACtD,OAAO5qC,EAAKjF,SAASk5G,EAAWrpE,gBAAkBy+K,EAAatuN,SAASk5G,EAAWrpE,gBAErF4xE,YAAaj/F,EAAE,iCACf+wB,WAAY,CACVykF,OAAQ,SAAA/gB,GAAM,OACZ,cAAC,IAAD,yBAAU9kH,MAAO8kH,EAAO9kH,MAAO0uY,gBAAgB,GAAW5pR,EAAOsV,YAAjE,IAA6E18C,UAAWF,EAAQutP,oBAAhG,SACGjmN,EAAO1/E,WAId86C,OAAQqnQ,YAAuB/nQ,GAC/BqpR,aAAc,QACdn5O,0BAA0B,EAC1B3I,WAAY0tgB,GACZ30gB,SAAU04gB,GACV1xgB,cAhJe,SAACvsG,EAAaqsG,GAE3C,GADA8tgB,GAAuBn6mB,GACnBiiyB,KAA2C,iBAAtB51rB,EAAWp3F,QAAmD,eAAtBo3F,EAAWp3F,QAA0B,CACpG,IAAM3f,EAAS,CACb,IAAM,GAAN,OACKgtyB,GACAzqL,GAFL,CAGE,CACE,GAAM,CACJ,CACE,aAAgB,CACZ,KAAQ73mB,IAGd,CACE,KAAQ,CACN,KAAQA,SAapBi7mB,EAAiBgnL,GAAkB3syB,KAoHvB0/G,iBAAkB,kBAAM,cAAC,IAAD,CAAkBk7R,WAAYp6X,EAAE,iCAAkCgwkB,cAAesyB,GAAkBxpgB,QAAS+vU,EAA+B,WACjKjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIg5Z,IACJ/vZ,MAAO,CACL17B,KAAM2hnB,GACN11L,UAAW,SAACrF,GACV,IAAMm/L,EAAiBn/L,EAAarxb,IAAI,MACxCmtnB,EACEgnL,GACA,CAAC,IAAM,GAAN,OACIK,GACAzqL,MAGP,IAAM0G,EAAqBprmB,iBAAO,CAChC+jY,YAAaonO,EACb18Z,aAAcu9N,EAAarxb,IAAI,OAC/ByK,KAAM4mb,EAAarxb,IAAI,QACvBq3E,QAAS,OAEX84iB,GAAkBM,GAGlB7plB,EAASu/B,YAAO+kV,EAAuB,YAAaulO,IACpD7plB,EAASu/B,YAAO+kV,EAAuB,uBAAwB,YAIrE0mC,GAAWsE,MACT,SAENrgV,iBAAkB,CAChBC,WAAW,QAIjB,cAAC,IAAD,CAAMj/B,GAAI,EAAGhB,MAAM,IACnB,eAAC,IAAD,CAAMgB,GAAI,GAAIhB,MAAM,EAApB,UACE,cAAC,IAAD,CAAY8/B,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,kCAEL,cAAC,QAAD,CACEvd,KAAK,cACL8qE,UAAW2nD,IACXjnB,SAAUgpF,IACVrpF,WAAY,CACV3tE,QAASA,GAAWA,EAAQzqB,SAC5B0nG,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,cAAC,IAAD,CAAS0J,MAAO,CAAC1J,EAAOz8G,IAAI,eAAgBy8G,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,OAApH,SACE,gCACG++F,EAAOz8G,IAAI,eADd,MACgC,sBAAMq1E,UAAWF,EAAQ2+R,KAAzB,SAAgC,CAACr3P,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,eAI7IkgG,aAAc,SAACnB,EAAQiC,GAErB,OADcjC,EAAO1/E,MAAMoJ,MAAMggF,MAAM9wE,cAC1B7vC,SAASk5G,EAAWrpE,gBAEnC4xE,YAAaj/F,EAAE,mCACf+wB,WAAY,CACVykF,OAAQ,SAAA/gB,GAAM,OACZ,cAAC,IAAD,yBAAU9kH,MAAO8kH,EAAO9kH,MAAO0uY,gBAAgB,GAAW5pR,EAAOsV,YAAjE,IAA6E18C,UAAWF,EAAQutP,oBAAhG,SACGjmN,EAAO1/E,WAId86C,OAAQqnQ,YAAuB/nQ,GAC/BqpR,aAAc,QACdn5O,0BAA0B,EAC1B4K,YAAa34H,QAAQ0qZ,IACrBvlS,cAAe,SAACvsG,GACds4mB,GAAyBt4mB,IAE3BulG,SAAU,SAACvlG,EAAKs1G,GACd,IAAMsjgB,EAAuB,OAAG1zgB,QAAH,IAAGA,OAAH,EAAGA,EAAYv6F,MAAM,CAAC,cAAe,4BAC9DiumB,GACFlklB,EAASu/B,YAAO+kV,EAAD,sCAA+D4/N,KAGlF5jgB,iBAAkB,kBAAM,cAAC,IAAD,CAAkBk7R,WAAYp6X,EAAE,mCAAoCgwkB,cAAesyB,KAAqB2C,GAAsBnsgB,QAAS+vU,EAA+B,WAC5LjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,IACJxliB,MAAO,CACLy2F,YAAa2tf,GACb7zL,UAAW,SAACs0I,GAAmD,IAAD,EACtDggD,EAAuBhgD,EAAmBhrkB,IAAI,MACpDo7Z,EAAc+4Y,GAAkBH,GAAiBO,IAEjD,IAAMtpL,EAA2B5lmB,iBAAO,CACtC89a,SAAU6nL,EACVtugB,UAAWsud,EAAmBhrkB,IAAI,OAClC48H,YAAaouc,EAAmBhrkB,IAAI,eACpC6tN,KAAMm9W,EAAmBhrkB,IAAI,QAC7BrI,MAAOqzkB,EAAmBhrkB,IAAI,SAC9B8qnB,wBAAuB,iBAAE1zgB,QAAF,IAAEA,OAAF,EAAEA,EAAYv6F,MAAM,CAAC,cAAe,mCAApC,QAAmE,OAI5F+pB,EAASu/B,YAAO+kV,EAAuB,cAAe+/N,IACtDrklB,EAASu/B,YAAO+kV,EAAuB,uBAAwB,YAIrE0mC,GAAW+5I,MACT,SAEN91d,iBAAkB,CAChBC,WAAW,QAIhBkqS,GAA6BhnQ,GAC5B,eAAC,IAAD,CACEniE,GAAI,GACJhB,MAAM,EAFR,UAIE,cAAC,QAAD,CACEprE,KAAK,0BACL8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,4CACT4tF,WAAY,CACV1T,MAAO,cAIXkV,GAAcA,EAAWp3G,IAAI,4BAC7B,eAAC,IAAD,CAAMy1E,WAAW,EAAMJ,UAAWF,EAAQs+tB,0BAA1C,UACE,eAAC,IAAD,CAAMh+tB,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAAxE,UACE,cAAC,IAAD,UAAaltD,EAAE,uCACf,cAAC,IAAD,CACEk6E,MAAM,UACN4e,QAAS,kBAAMl6E,EAASu/B,YAAO+kV,EAAuB,uBAAwB,QAC9E/xS,UAAW/B,EAAWv6F,MAAM,CAAC,mBAAoB,QAHnD,SAIEmL,EAAE,0BAEN,cAAC,QAAD,CACEvd,KAAK,uBACL07B,MAAO,CACLyvE,WAAY,CACVz5G,KAAM,OACNi+V,WAAW,GAEbvkP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,iBAQzB,eAAC,IAAD,WACE,cAAC,IAAD,CACE+K,QAASqiB,GACTjhC,MAAM,UAFR,SAIGl6E,EAAE,wBAEL,cAAC,IAAD,CACEk6E,MAAM,UACN/lG,KAAK,SAFP,SAIG6rB,EAAE,8C,kECtfT0koB,EAAkB,sBAElBlzS,EAAgB,CAEdvjD,mBAFc,SAEK1yN,EAAUvgD,EAAes9T,GAA0C,OAAD,0IAEjFrzD,EAAU1pN,EAAIvjG,IAPN,gBAQRuva,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH8C,SAI3DusX,EAAUC,KAAV,2CAA2DlvD,GAJA,oBAIjFt7P,EAJiF,kBAKnFA,GALmF,UAKnFA,EAAU/tE,YALyE,iBAKnF,EAAgB9T,eALmE,iBAKnF,EAAyBoc,WAL0D,aAKnF,EAA8Bs6T,aALqD,iDAM9E70P,QAN8E,IAM9EA,GAN8E,UAM9EA,EAAU/tE,YANoE,iBAM9E,EAAgB9T,eAN8D,iBAM9E,EAAyBoc,WANqD,aAM9E,EAA8Bs6T,aANgD,iCAQ9E,MAR8E,gEAYvF51V,QAAQ7Z,MAAM,6BAAd,MAZuF,kEAkBrFwqyB,YApBc,SAoBFrxsB,EAAUvgD,EAAe0/T,GAAqC,OAAD,0IAErEz1D,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAHkC,SAI/CusX,EAAUC,KAAV,oCAAoD9sD,GAJL,oBAIrE19P,EAJqE,kBAKvEA,GALuE,UAKvEA,EAAU/tE,YAL6D,iBAKvE,EAAgB9T,eALuD,iBAKvE,EAAyB0xwB,aAL8C,aAKvE,EAAgCC,cALuC,iDAMlE9vrB,QANkE,IAMlEA,GANkE,UAMlEA,EAAU/tE,YANwD,iBAMlE,EAAgB9T,eANkD,iBAMlE,EAAyB0xwB,aANyC,aAMlE,EAAgCC,cANkC,iCAQlE,MARkE,gEAY3E7wxB,QAAQ7Z,MAAM,oCAAd,MAZ2E,kEAiBzE2qyB,YArCc,SAqCFxxsB,EAAUvgD,EAAe8xvB,GAAkC,OAAD,0IAElE7nf,EAAU1pN,EAAIvjG,IAAI0spB,GAClBn9O,EAAY,IAAIviH,IAAUC,EAASjqQ,GAH+B,SAI5CusX,EAAUC,KAAV,oCAAoDslY,GAJR,oBAIlE9vrB,EAJkE,kBAKpEA,GALoE,UAKpEA,EAAU/tE,YAL0D,iBAKpE,EAAgB9T,eALoD,iBAKpE,EAAyB0xwB,aAL2C,aAKpE,EAAgCC,cALoC,iDAM/D9vrB,QAN+D,IAM/DA,GAN+D,UAM/DA,EAAU/tE,YANqD,iBAM/D,EAAgB9T,eAN+C,iBAM/D,EAAyB0xwB,aANsC,aAM/D,EAAgCC,cAN+B,iCAQ/D,MAR+D,gEAYxE7wxB,QAAQ7Z,MAAM,oCAAd,MAZwE,mEAiB/DovW,O,6BC1Df,yHAGaw7b,EAAsB,SAACprhB,EAAyBtkO,GAAU,IAAD,EAC5Dm0C,EAASn0C,EAAKtlD,IAAI,MAExB,OADc,UAAGslD,EAAKtlD,IAAI,mBAAZ,QAA2BkU,kBACzBxK,MAAK,SAAC4yL,GAClB,IAAMvmE,EAAYumE,EAAQt8L,IAAI,MACxB0pR,EAAgBE,EAAwB/sQ,MAAM,CAAC48E,EAAQs8B,IAC7D,OAAO0zJ,YAAsBC,OAGxBurhB,EAAmB,SAACrrhB,EAAyB3sF,GACtD,OAAOA,EAAMp4L,WAAW2C,QAAO,SAAC89C,GAC5B,OAAO0vvB,EAAoBprhB,EAAyBtkO,OAG/CglO,EAAsB,SAACV,EAAyBtkO,GAAU,IAAD,EAC5Dm0C,EAASn0C,EAAKtlD,IAAI,MAExB,OADc,UAAGslD,EAAKtlD,IAAI,mBAAZ,QAA2BkU,kBACzB1M,QAAO,SAAC80L,GACpB,IAAMvmE,EAAYumE,EAAQt8L,IAAI,MACxB0pR,EAAgBE,EAAwB/sQ,MAAM,CAAC48E,EAAQs8B,IAC7D,OAAO0zJ,YAAsBC,Q,kGCrBtB,SAAS,EAAWq4U,EAAQ96kB,EAAM+6kB,GAc/C,OAZE,EADE,OAAAC,EAAA,KACW3thB,QAAQC,UAER,SAAoBwthB,EAAQ96kB,EAAM+6kB,GAC7C,IAAIpgmB,EAAI,CAAC,MACTA,EAAEyG,KAAKnE,MAAMtC,EAAGqlB,GAChB,IACIqC,EAAW,IADGgiJ,SAASvtJ,KAAK7Z,MAAM69lB,EAAQngmB,IAG9C,OADIogmB,GAAO,OAAAvwhB,EAAA,GAAenoD,EAAU04kB,EAAM5nmB,WACnCkvB,GAIJ,EAAWplB,MAAM,KAAMvE,WCZjB,SAAS,EAAiBqimB,GACvC,IAAItjmB,EAAwB,oBAARmQ,IAAqB,IAAIA,SAAQ9W,EA8BrD,OA5BA,EAAmB,SAA0BiqmB,GAC3C,GAAc,OAAVA,ICRkCljmB,EDQEkjmB,GCPsB,IAAzD12b,SAASpuK,SAASD,KAAK6B,GAAI2d,QAAQ,kBDOQ,OAAOullB,ECR5C,IAA2BljmB,EDUtC,GAAqB,oBAAVkjmB,EACT,MAAM,IAAI1jmB,UAAU,sDAGtB,GAAsB,qBAAXI,EAAwB,CACjC,GAAIA,EAAOwB,IAAI8hmB,GAAQ,OAAOtjmB,EAAOsB,IAAIgimB,GAEzCtjmB,EAAOiF,IAAIq+lB,EAAOkzM,GAGpB,SAASA,IACP,OAAO,EAAUlzM,EAAOrimB,UAAW,OAAAqlB,EAAA,GAAe/oB,MAAM1B,aAW1D,OARA26yB,EAAQ96yB,UAAYC,OAAOC,OAAO0nmB,EAAM5nmB,UAAW,CACjDG,YAAa,CACX5C,MAAOu9yB,EACPnxyB,YAAY,EACZE,UAAU,EACVD,cAAc,KAGX,OAAAytE,EAAA,GAAeyjuB,EAASlzM,IAG1B,EAAiBA,K,wXEapBmzM,EAAgBrirB,IAAOn+C,IAAV,uIAQbyguB,EAAoBtirB,IAAOn+C,IAAV,4FAKnB,qBAAG0guB,OACE,8BAMHC,EAAaxirB,IAAOn+C,IAAV,4FAKZ,qBAAG0guB,OACE,8BAuRHxswB,EAAkBkG,YAAyB,CAC/CwmwB,gBAAiBxjO,cACjByjO,oBAAqBrhqB,cACrBshqB,cAAexjO,gBAyBF/ggB,sBACbgG,aA9Sa,SAACC,GAAD,mBAAC,aACdkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GACR8uC,SAAU,WAEZovrB,UAAW,CACTpmrB,aAAc,QAEhBN,SAAU,CACRj3C,QAAS,EACT,UAAW,CACTkpC,gBAAiB,iBAGlB00rB,YAAqBx+tB,IACrB8riB,YAAU9riB,OA8Rb/7B,YAAgB,gBAChB0/D,kBAAQjyE,GAzBiB,SAACjC,GAC1B,MAAO,CACLA,WACAgqU,eAAgB,SAACn3O,GACI,KAAfA,GACF7yF,EAAS,IAAIu2B,KAAqB,CAAEs8D,iBAGxCm8qB,aAAc,WACZhvwB,EAAS,IAAI+rB,MAAqB,IAClC/rB,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIwwP,IACJ91O,QAASotnB,OAEXp+nB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,IACJ9mL,MAAM,UAUZgf,cAJa10C,EAlQoD,SAAC/qC,GAClE,IACEgvC,EAkBEhvC,EAlBFgvC,QACAntD,EAiBEme,EAjBFne,EACA4+V,EAgBEzgV,EAhBFygV,UACAzgQ,EAeEhgF,EAfFggF,MACA+vT,EAcE/vY,EAdF+vY,SACAjuY,EAaE9B,EAbF8B,QANF,EAmBI9B,EAZF6gF,eAPF,SAQEzkF,EAWE4D,EAXF5D,SACAqzwB,EAUEzvwB,EAVFyvwB,aACAhlc,EASEzqU,EATFyqU,eACAhqU,EAQET,EARFS,SACA2uwB,EAOEpvwB,EAPFovwB,gBACAC,EAMErvwB,EANFqvwB,oBACAC,EAKEtvwB,EALFsvwB,cAdF,EAmBItvwB,EAJFyvE,kBAfF,MAee,GAff,EAgBEklT,EAGE30X,EAHF20X,SAhBF,EAmBI30X,EAFFiwY,6BAjBF,WAmBIjwY,EADFgwY,uBAlBF,SAqBMh/V,EAAQwjD,cACRk7qB,EAAiBhpnB,mBAAS+jL,EAAgB,KAChD,EChJK,WAAuC,IAAlBl7G,EAAiB,uDAAL,IAChCh+P,EAAMyvC,iBAAY,MACxB,EAA4BwT,oBAAS,GAArC,mBAAOm7vB,EAAP,KAAeC,EAAf,KAgBA,OAdA3zwB,qBAAU,WACR,GAAK1qC,EAAIqsC,QAAT,CAEA,IAAMkyP,EAAKv+R,EAAIqsC,QAET6rC,EAAW,IAAIwrD,KAAe,YAAc,IAAZl8H,EAAW,oBAC/C62yB,EAAU72yB,EAAM49a,YAAYvlW,OAASm+K,MAKvC,OAFA9lL,EAASsrD,QAAQ+6J,GAEV,kBAAMrmN,EAASwmI,iBACrB,CAAEs/C,EAAWh+P,IAET,CAAEA,MAAKo+yB,UD8HUE,CArGM,KAqGtBt+yB,EAAR,EAAQA,IAAKo+yB,GAAb,EAAaA,OAEPG,GAAa,SAACv3qB,EAAgBw3qB,GAClC,MAA2Dx3qB,EAAeznF,KAAKz8B,OAAvE4nG,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,SAAUF,EAA7B,EAA6BA,aAAc95D,EAA3C,EAA2CA,MACrC7jC,EADN,EAAkD/Z,OAE3C23G,GAAaC,IAAa,CAACD,EAAWC,GAAU3kG,KAAK,MACvDykG,GACA95D,EAEL,OACE,wBAAC6tvB,EAAD,2BAAmBx3qB,GAAnB,IAAmCn+H,IAAKm+H,EAAeznF,KAAK/Z,KACzDwhG,EAAeznF,KAAKla,OAASvY,IAK9B0wxB,GAAUx0wB,WAAc,kBAAM,gBAAay1wB,EAAb,EAAG5zwB,SAAH,OAClC4zY,EACI,qBAAKz+a,IAAKA,EAAV,SAAgBy+yB,IAChB,cAAClzrB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAM3pH,IAAKA,EAApC,SACA,cAACyrH,EAAA,EAAD,UAAcgzrB,SAEjB,CAAChgY,IAEJ,OACE,eAAC++X,GAAD,WACG/urB,GAAS,cAAC1Q,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0BwQ,IACnC+vT,GAAY,cAACzgU,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SAA6C01T,IAC1D,cAAC,QAAD,CACEzra,KAAMm8W,EACNrxS,UAAW2nD,IACX/2F,MAAO,CACL0vE,iBAAkB,CAChBC,WAAW,GAEbF,WAAW,aACTqR,YAAaj/F,EAAE,+BACfy2F,cAAe,SAACp6G,GAEd,OADAwxyB,EAAexxyB,GACRA,GAETi5H,eAAgB,SAAC7gB,GAAD,MAA2B,CAACA,EAAOz8G,IAAI,aAAcy8G,EAAOz8G,IAAI,aAAa0d,KAAK,MAClGwnG,eAAgB,SAACzI,GAAD,OAA2BA,EAAOz8G,IAAI,OACtDioC,UACA21E,cAAc,EACdoJ,UACAO,aAAa,EACb6uT,wBACA3+T,SAAU,SAAC2+rB,EAAc5urB,GACvB,GAAIA,GAEK,kBADCA,EAAOrgG,OAGPqgG,EAAO/K,QAA0B,cAAhB+K,EAAO/8G,MAC1Bm8B,EAAS,IAAIkvL,IAAkC,CAAE+vc,UAAWr+iB,EAAO/K,OAAOz8G,IAAI,cAAgBkU,oBAG5F4mZ,GAAgC,oBAAbA,GACrBA,EAAStzS,EAAO/K,SAM1B5kC,OAAQ,CACN2rC,QAAS,SAAA47N,GAAc,kCAClBA,GADkB,IAErBx7N,YAAY,YACZF,aAAc,OAEhBy7N,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnBiG,iBAAkB,SAAAk4N,GAAc,sBAC3BA,IAKL3iO,OAAQ,SAAC2iO,EAAD,OAAmBl9N,EAAnB,EAAmBA,WAAnB,mBAAC,eACJk9N,GADG,IAEN9vN,aAAc,OACdrO,gBAAiBiB,EACb/qC,EAAM+pC,QAAQ+d,UAAU,KACxB,QACJ,SAAU,CACRhe,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,QAG7CmjgB,WAAY,SAAAhjT,GAAc,kCACrBA,GADqB,IAExB5xN,OAAQ,OACRn2C,QAAS,OACTnC,WAAY,SACZwuC,aAAc,SAEhB2+gB,gBAAiB,SAAAjjT,GAAc,kCAC1BA,GAD0B,IAE7B/nQ,QAAS,OACTnC,WAAY,YAEd+uC,iBAAkB,SAAAm7N,GAAc,kCAC3BA,GAD2B,IAE9B99N,OAAQ,UACR,UAAW,CACTL,gBAAiB,mBAIvBloE,WAAY,CACVuuT,YAAa,SAAC5oO,GAAD,OAAoBu3qB,GAAWv3qB,EAAgB3lF,IAAWuuT,cACvE1B,WAAY,SAAClnO,GAAD,OACV,cAAC,IAAWknO,WAAZ,2BAA2BlnO,GAA3B,IAA2CrpD,UAAWF,EAAQitjB,eAEhEz8R,iBAAkB,SAACjnO,GAAD,OAChB,cAAC,IAAWinO,iBAAZ,2BAAiCjnO,GAAjC,IAAiDrpD,UAAWF,EAAQ8uC,iBAApE,SACE,cAAC,IAAD,CAAmB5uC,UAAWF,EAAQ04C,KAAM/M,QAAS,WACnD,IAAM5jF,EAAKwhG,EAAeznF,KAAKj3C,IAAI,MAE7B4lxB,EADclnpB,EAAexa,YAAYj8E,QAClBzgC,QAAO,SAAAsM,GAAC,OAAIA,EAAE9T,IAAI,QAAUk9B,OACtC,OAAfq4wB,QAAe,IAAfA,OAAA,EAAAA,EAAiBv1yB,IAAI,SAAUk9B,GAAMu4wB,GAAiBA,EAAcz1yB,IAAI,QAAUk9B,KACpF0J,EAAS,IAAIozL,IAA0B,CAAE8yG,gBAAY/0U,KAErD6uC,EAASu/B,YAAO6/L,IAAiB,mBAAoB,OACrDp/N,EAAS,IAAIo7kB,IAA2B,CAAE/qkB,UAAMl/C,MAElD6uC,EAAS,IAAIy2B,KAA8B,CAAE42E,SAAU2xoB,YAI7Dj+pB,gBAAiB,SAAC+W,GAAD,OAAoBu3qB,GAAWv3qB,EAAgB3lF,IAAW4uE,kBAC3EwQ,SAAU,SAACuG,GAAD,OACR,eAAC,IAAWvG,SAAZ,2BAAyBuG,GAAzB,cACGA,EAAen8F,SAChB,cAACq+E,EAAA,EAAD,CAEEvrC,UAAWF,EAAQo+tB,cACnB59rB,QAAQ,YACRmL,QAAS80rB,EAJX,SAMG5txB,EAAE,4BALC,2BASVw1G,OAAQ,SAACkB,GACP,IAAMjiB,EAASiiB,EAAeznF,KACxBmrE,EAAY3F,EAAOz8G,IAAI,aACvBqiH,EAAW5F,EAAOz8G,IAAI,YACtBmiH,EAAe1F,EAAOz8G,IAAI,gBAC1BqoD,EAAQo0D,EAAOz8G,IAAI,SACnByK,GAAQ23G,GAAaC,IAAa,CAACD,EAAWC,GAAU3kG,KAAK,KAC7D4kG,EAAYH,GAAgB13G,GAAQ49C,EACpCk6D,EAAaJ,GAAgB13G,EACnC,OACE,cAAC,IAAW+yH,OAAZ,2BAAuBkB,GAAvB,IAAuCnnB,MAAK,2BAAOmnB,EAAennB,OAAtB,IAA6B+X,aAAc,IAAvF,SACE,cAAC9W,EAAA,EAAD,CAAU8mR,eAAe,EAAMjqT,UAAWF,EAAQ65C,SAAlD,SACE,eAACmmrB,EAAD,WACE,eAACC,EAAD,CAAmBC,MAAOS,GAAQv+rB,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAArE,UACE,8BAAMkB,IACLC,GAAc,8BAAMA,IACrB,8BAAM9F,EAAOz8G,IAAI,aAAey8G,EAAOz8G,IAAI,cAC3C,gCAAMy8G,EAAOz8G,IAAI,YAAjB,IAA+By8G,EAAOz8G,IAAI,mBAC1C,8BAAMy8G,EAAOz8G,IAAI,iBAChBy8G,EAAOz8G,IAAI,mBACV,8BACGy8G,EAAOz8G,IAAI,uBAIlB,cAACs1yB,EAAD,CAAYD,MAAOS,GAAnB,SACGr5rB,EAAOz8G,IAAI,iBACV,8BACGy8G,EAAOz8G,IAAI,8BAU9BknH,iBAAkB,kBAChBsurB,EACI,eAAC1guB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACA,cAACJ,EAAA,EAAD,UACE,cAAC+oP,EAAA,EAAD,CAAkB7lU,KAAK,WAEzB,cAAC88E,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,UAAaztF,EAAE,iCAGjB,sBAAKqtD,UAAWF,EAAQkhuB,UAAxB,UACA,cAAC5gsB,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,wBAC5B,cAACytF,EAAA,EAAD,CAAYE,QAAQ,YAApB,SAAiC3tF,EAAE,gCAEtC4tF,MAIRrzE,S,6BE5UQ4+E,IAhBJ,CACT,GAAI,UACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL6/J,KAAM,UACN68f,KAAM,UACNC,KAAM,UACNC,KAAM,Y,6BCdR,mHAYIu4B,EAAa,CACft6gB,SAAU,MACVK,WAAY,SAEVk6gB,EAAa,CACfv6gB,SAAU,MACVK,WAAY,QAmBVzP,EAAOlsP,IAAM8E,YAAW,SAAcW,EAAOzuC,GAC/C,IAAI4pa,EAAmBn7X,EAAMitR,UACzBA,OAAiC,IAArBkuG,GAAqCA,EACjD/+X,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBqhuB,EAAwBrwwB,EAAMswwB,qBAC9BA,OAAiD,IAA1BD,GAA2CA,EAClEE,EAAuBvwwB,EAAMk8nB,cAC7BA,OAAyC,IAAzBq0I,EAAkC,GAAKA,EACvD91qB,EAAUz6F,EAAMy6F,QAChByzd,EAAalujB,EAAMkujB,WACnBztf,EAAOzgE,EAAMygE,KACb6tf,EAAoBtujB,EAAM4pF,WAC1BA,OAAmC,IAAtB0ke,EAA+B,GAAKA,EACjD8qK,EAAiBp5tB,EAAMo5tB,eACvBv9nB,EAAwB77F,EAAM87F,mBAC9BA,OAA+C,IAA1BD,EAAmC,OAASA,EACjEisB,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,eAAiBA,EACvDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,YAAa,WAAY,UAAW,uBAAwB,gBAAiB,UAAW,aAAc,OAAQ,aAAc,iBAAkB,qBAAsB,YAE7MgxC,EAAQwjD,cACR4tjB,EAAgBn1X,IAAcqjf,GAAwB7vsB,EACtD+vsB,EAAqBj2wB,IAAMyG,OAAO,MAClCyvwB,EAAmBl2wB,IAAMyG,OAAO,MAgChC0vwB,GAAmB,EAIvBn2wB,IAAM+iG,SAASx+H,IAAIs9B,GAAU,SAAU4T,EAAO/9C,GACvCsoC,IAAM6V,eAAeJ,KAUrBA,EAAMhQ,MAAMgzE,WACC,SAAZxD,GAAsBx/D,EAAMhQ,MAAMo7E,WAEN,IAArBs1rB,KADTA,EAAkBz+yB,OAMxB,IAAI6qQ,EAAQviO,IAAM+iG,SAASx+H,IAAIs9B,GAAU,SAAU4T,EAAO/9C,GACxD,OAAIA,IAAUy+yB,EACLn2wB,IAAMyX,aAAahC,EAAO,CAC/Bz+C,IAAK,SAAa4xB,GAEhBstxB,EAAiB7ywB,QAAU+hP,IAASC,YAAYz8P,GAChDu8P,YAAO1vO,EAAMz+C,IAAK4xB,MAKjB6sB,KAET,OAAOzV,IAAMwB,cAAcm6mB,IAASt2mB,YAAS,CAC3C+yY,mBAnEuB,WACvB,OAAO89X,EAAiB7ywB,SAmExBoxC,QAASoqrB,EACT3+nB,QAASA,EACTyzd,WAlEmB,SAAwBtwZ,EAAS+ymB,GAChDH,EAAmB5ywB,SACrB4ywB,EAAmB5ywB,QAAQgzwB,wBAAwBhzmB,EAAS5sH,GAG1Dk9gB,GACFA,EAAWtwZ,EAAS+ymB,IA6DtB/+Z,aAAkC,QAApB5gU,EAAMxB,UAAsB2guB,EAAaC,EACvDr1qB,gBAAqC,QAApB/pD,EAAMxB,UAAsB2guB,EAAaC,EAC1DxmrB,WAAYhqF,YAAS,GAAIgqF,EAAY,CACnC56C,QAASpvC,YAAS,GAAIgqF,EAAW56C,QAAS,CACxC3hE,KAAM2hE,EAAQ64C,UAGlBpnB,KAAMA,EACNlvG,IAAKA,EACLuqI,mBAAoBA,GACnBrlH,GAAQ8jB,IAAMwB,cAAci2F,IAAUpyF,YAAS,CAChDq3F,UApEsB,SAA2BgG,GAC/B,QAAdA,EAAM7iI,MACR6iI,EAAM/F,iBAEFuD,GACFA,EAAQwC,EAAO,gBAgEnB59D,QAASmxuB,EACTvjf,UAAWA,KAAmC,IAArByjf,GAA0BJ,GACnDluH,cAAeA,EACf5ykB,QAASA,GACR0sjB,EAAe,CAChBhtlB,UAAW2B,kBAAK7B,EAAQ3gE,KAAM6tpB,EAAchtlB,aAC1C4tL,OA2GS/rL,gBA/OK,CAElB82C,MAAO,CAIL+kJ,UAAW,oBAEXguF,wBAAyB,SAI3BvsV,KAAM,CAEJowV,QAAS,IAiOqB,CAChCn6V,KAAM,WADOysE,CAEZ01M,I,6BCnQH,SAASp2O,EAAQzzC,GAAkC,OAAOyzC,EAAU,mBAAqB76C,QAAU,iBAAmBA,OAAOC,SAAW,SAAUmH,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAO,mBAAqBpH,QAAUoH,EAAIxI,cAAgBoB,QAAUoH,IAAQpH,OAAOvB,UAAY,gBAAkB2I,GAAQyzC,EAAQzzC,GACzU1I,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAO,QAAcA,EAAQ4/yB,2BAAwB,EACrD,IAAIC,EAEJ,SAAiCl0yB,EAAKg+lB,GAAe,IAAKA,GAAeh+lB,GAAOA,EAAI41M,WAAc,OAAO51M,EAAO,GAAY,OAARA,GAAiC,WAAjByzC,EAAQzzC,IAAoC,oBAARA,EAAsB,MAAO,CAAE,QAAWA,GAAS,IAAI/D,EAAQ8hmB,EAAyBC,GAAc,GAAI/hmB,GAASA,EAAMkB,IAAI6C,GAAQ,OAAO/D,EAAMgB,IAAI+C,GAAQ,IAAIutZ,EAAS,GAAQ4wM,EAAwB7mmB,OAAOyJ,gBAAkBzJ,OAAO0uB,yBAA0B,IAAK,IAAIxoB,KAAOwC,EAAO,GAAY,YAARxC,GAAqBlG,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,GAAM,CAAE,IAAI2thB,EAAOgzE,EAAwB7mmB,OAAO0uB,yBAAyBhmB,EAAKxC,GAAO,KAAU2thB,IAASA,EAAKluhB,KAAOkuhB,EAAKvqhB,KAAQtJ,OAAOyJ,eAAewsZ,EAAQ/vZ,EAAK2thB,GAAgB59H,EAAO/vZ,GAAOwC,EAAIxC,GAAY+vZ,EAAM,QAAcvtZ,EAAS/D,GAASA,EAAM2E,IAAIZ,EAAKutZ,GAAW,OAAOA,EAFxxBF,CAAwB/4Z,EAAQ,OAC1C,SAASypmB,EAAyBC,GAAe,GAAuB,oBAAZz8lB,QAAwB,OAAO,KAAM,IAAI08lB,EAAoB,IAAI18lB,QAAe28lB,EAAmB,IAAI38lB,QAAW,OAAQw8lB,EAA2B,SAAkCC,GAAe,OAAOA,EAAcE,EAAmBD,IAAsBD,GAEhU,IAAIi2M,EAAwBC,EAAIC,IAChC9/yB,EAAQ4/yB,sBAAwBA,EAChC,IAAI92iB,EAAW+2iB,EAAG,QAClB7/yB,EAAO,QAAc8oQ,G,6BCbrB,uEASA,SAASpwE,EAAKpvE,EAAO2xN,GACnB,IAAIv1L,EAAS,GAMb,OALAziJ,OAAO0D,KAAK2iH,GAAO/3G,SAAQ,SAAUm2I,IACL,IAA1BuzL,EAAO51T,QAAQqiI,KACjBhC,EAAOgC,GAAQp+B,EAAMo+B,OAGlBhC,EA0IMhqB,IArIf,SAAgBl9E,GAkId,OAjIuB,SAA0B2hE,GAC/C,IAAItvE,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE9E8K,EAAOw9B,EAAQx9B,KACfuzkB,EAAgB7kiB,YAAyBlR,EAAS,CAAC,SAMvD,IA6BIkvwB,EA7BA5tY,EAAkB9+Z,EAalBouM,EAAmC,oBAAVthG,EAAuB,SAAUpgC,GAC5D,MAAO,CACL3jE,KAAM,SAAc2yB,GAClB,OAAOoxE,EAAMxxE,YAAS,CACpBoxC,MAAOA,GACNhxC,OAGL,CACF3yB,KAAM+jG,GAEJkU,EAAYJ,YAAWwtF,EAAiB9yK,YAAS,CACnD6P,UAAWA,EACXnrC,KAAMA,GAAQmrC,EAAUpxB,YACxB+kZ,gBAAiBA,GAChBy0K,IAICzme,EAAM4/rB,cACRA,EAAc5/rB,EAAM4/rB,mBACb5/rB,EAAM4/rB,aAKX5/rB,EAAMwjK,YACIxjK,EAAMwjK,iBACXxjK,EAAMwjK,WAKf,IAAIq8hB,EAAkB12wB,IAAM8E,YAAW,SAAyBW,EAAOzuC,GACrE,IAAI6qC,EAAW4D,EAAM5D,SACjB6yC,EAAgBjvC,EAAMkvC,UACtB5+B,EAAQtQ,EAAMsQ,MACd4gwB,EAAgBlxwB,EAAMovC,UACtB34D,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,YAAa,QAAS,cAE3EgvC,EAAUs2C,EAAUtlF,GACpBkvC,EAAY2B,kBAAK7B,EAAQ3hE,KAAM4hE,GAC/Bu/G,EAAS/3K,EAMb,GAJIu6xB,IACFxinB,EAAS7E,EAAK6E,EAAQwinB,IAGpB1gwB,EACF,OAAO/V,IAAMyX,aAAa5V,EAAUwD,YAAS,CAC3CsvC,UAAW2B,kBAAKz0C,EAAS4D,MAAMkvC,UAAWA,IACzCs/G,IAGL,GAAwB,oBAAbpyJ,EACT,OAAOA,EAASwD,YAAS,CACvBsvC,UAAWA,GACVs/G,IAGL,IAAI2inB,EAAiBD,GAAiBzhwB,EACtC,OAAOlV,IAAMwB,cAAco1wB,EAAgBvxwB,YAAS,CAClDruC,IAAKA,EACL29E,UAAWA,GACVs/G,GAASpyJ,MAuCd,OADA6mO,IAAqBguiB,EAAiBxhwB,GAC/BwhwB,K,6BCpJX,4FAsCA,SAASG,EAAYnorB,GACnB,MAA2B,oBAAbA,EAA0BA,IAAaA,EAGvD,IAAIu6P,EAAsC,qBAAXh/V,OAAyB+V,IAAMyB,gBAAkBzB,IAAM0B,UAClFo1wB,EAAuB,GAKvBrorB,EAASzuF,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAI03H,EAAWjpF,EAAMipF,SACjB7sF,EAAW4D,EAAM5D,SACjBkzC,EAAYtvC,EAAMsvC,UAClBgiuB,EAAuBtxwB,EAAMwuV,cAC7BA,OAAyC,IAAzB8ib,GAA0CA,EAC1DC,EAAqBvxwB,EAAM4yY,YAC3BA,OAAqC,IAAvB2+X,GAAwCA,EACtDpxhB,EAAYngP,EAAMmgP,UAClB1/K,EAAOzgE,EAAMygE,KACb08K,EAAmBn9O,EAAMigF,UACzBuxrB,OAAwC,IAArBr0hB,EAA8B,SAAWA,EAC5Ds0hB,EAAuBzxwB,EAAMkgP,cAC7BA,OAAyC,IAAzBuxhB,EAAkCJ,EAAuBI,EACzEC,EAAgB1xwB,EAAM2xwB,UACtBC,EAAoB5xwB,EAAMsqF,WAC1BA,OAAmC,IAAtBsnrB,GAAuCA,EACpDn7xB,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,WAAY,YAAa,gBAAiB,cAAe,YAAa,OAAQ,YAAa,gBAAiB,YAAa,eAE9K6xwB,EAAat3wB,IAAMyG,OAAO,MAC1B8wwB,EAASn1qB,YAAWk1qB,EAAYtgzB,GAChCogzB,EAAYp3wB,IAAMyG,OAAO,MACzB+wwB,EAAkBp1qB,YAAWg1qB,EAAWD,GACxCM,EAAqBz3wB,IAAMyG,OAAO+wwB,GACtCvub,GAAkB,WAChBwub,EAAmBp0wB,QAAUm0wB,IAC5B,CAACA,IACJx3wB,IAAMkhoB,oBAAoBi2I,GAAe,WACvC,OAAOC,EAAU/zwB,UAChB,IAEH,IAAIi8F,EAAkBt/F,IAAMia,UAAS,GACjC09c,EAASr4X,EAAgB,GACzBo4qB,EAAYp4qB,EAAgB,GAG5Bq4qB,EAvEN,SAAuBjyrB,EAAWjvC,GAGhC,GAAkB,SAFFA,GAASA,EAAMxB,WAAa,OAG1C,OAAOywC,EAGT,OAAQA,GACN,IAAK,aACH,MAAO,eAET,IAAK,eACH,MAAO,aAET,IAAK,UACH,MAAO,YAET,IAAK,YACH,MAAO,UAET,QACE,OAAOA,GAkDQkyrB,CAAcX,EADrBh9qB,eAORgpJ,EAAmBjjP,IAAMia,SAAS09vB,GAClCjyrB,EAAYu9J,EAAiB,GAC7B40hB,EAAe50hB,EAAiB,GAEpCjjP,IAAM0B,WAAU,WACV01wB,EAAU/zwB,SACZ+zwB,EAAU/zwB,QAAQx3B,YAGtB,IAAI+2H,EAAa5iG,IAAMykF,aAAY,WACjC,GAAK6yrB,EAAWj0wB,SAAYqrF,GAAaxoB,EAAzC,CAIIkxsB,EAAU/zwB,UACZ+zwB,EAAU/zwB,QAAQ0iC,UAClB0xuB,EAAmBp0wB,QAAQ,OAG7B,IAAIy0wB,EAAqB,SAA4BvhwB,GACnDshwB,EAAathwB,EAAKmvE,YAiBhBqgK,GAdmB8whB,EAAYnorB,GActB,IAAIqprB,IAASlB,EAAYnorB,GAAW4orB,EAAWj0wB,QAASgC,YAAS,CAC5EqgF,UAAWiyrB,GACVhyhB,EAAe,CAChBC,UAAWvgP,YAAS,GAAI4uV,EAAgB,GAAK,CAE3C0zT,gBAAiB,CACfC,kBAAmB,WAEpB,GAAIhia,EAAW,GAAID,EAAcC,WAGpCu1gB,SAAUj8M,YAAsB44N,EAAoBnyhB,EAAcw1gB,UAClE5shB,SAAU2wU,YAAsB44N,EAAoBnyhB,EAAcpX,cAEpEkpiB,EAAmBp0wB,QAAQ0iP,MAC1B,CAACr3J,EAAUulQ,EAAeruG,EAAW1/K,EAAMyxsB,EAAchyhB,IACxDL,EAAYtlP,IAAMykF,aAAY,SAAU9hH,GAC1CwiR,YAAOoyhB,EAAQ50yB,GACfigI,MACC,CAAC20qB,EAAQ30qB,IAMRH,EAAc,WACX20qB,EAAU/zwB,UAIf+zwB,EAAU/zwB,QAAQ0iC,UAClB0xuB,EAAmBp0wB,QAAQ,QAwB7B,GAhBArD,IAAM0B,WAAU,WAEdkhG,MACC,CAACA,IACJ5iG,IAAM0B,WAAU,WACd,OAAO,WACL+gG,OAED,IACHziG,IAAM0B,WAAU,WACTwkE,GAAS6pB,GAEZ0S,MAED,CAACv8B,EAAM6pB,KAELsoT,IAAgBnyU,KAAU6pB,GAAc4nY,GAC3C,OAAO,KAGT,IAAIk6P,EAAa,CACfnsoB,UAAWA,GAWb,OARIqK,IACF8hoB,EAAWjwnB,gBAAkB,CAC3B2B,GAAIr9B,EACJwtf,QA7Cc,WAChBgkN,GAAU,IA6CR9tX,SAjCe,WACjB8tX,GAAU,GACVj1qB,OAmCKziG,IAAMwB,cAAcw2wB,IAAQ,CACjC/jb,cAAeA,EACfl/S,UAAWA,GACV/0C,IAAMwB,cAAc,MAAO6D,YAAS,CACrCruC,IAAKsuR,EACLroO,KAAM,WACL/gC,EAAO,CACR26F,MAAOxxE,YAAS,CAEdmzE,SAAU,QAEVqX,IAAK,EACL/5G,KAAM,GACLoG,EAAM26F,SACa,oBAAbh1E,EAA0BA,EAASgwtB,GAAchwtB,OA6F/C4sF,O,6BCjTf,wFAgDIsyM,EAAW/gS,IAAM8E,YAAW,SAAkBW,EAAOzuC,GACvD,IAAI6qC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBsjuB,EAAwBxywB,EAAMyywB,gBAC9BC,OAAgD,IAA1BF,EAAmC,MAAQA,EACjErjuB,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,MAAQA,EAClDwjuB,EAAS3ywB,EAAM89F,GACfmwd,EAAUjujB,EAAMiujB,QAChBh6L,EAAYj0X,EAAMi0X,UAClBi6L,EAAalujB,EAAMkujB,WACnBh6L,EAASl0X,EAAMk0X,OACfk6L,EAAYpujB,EAAMoujB,UAClBh9e,EAAQpxE,EAAMoxE,MACdwhsB,EAAiB5ywB,EAAMu6D,QACvBA,OAA6B,IAAnBq4sB,EAA4BporB,IAAS0+R,SAAW0pZ,EAC1Dn8xB,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,UAAW,YAAa,kBAAmB,YAAa,KAAM,UAAW,YAAa,aAAc,SAAU,YAAa,QAAS,YAEzLgxC,EAAQwjD,cACRi/oB,EAAQl5uB,IAAMyG,SACd6xwB,EAAat4wB,IAAMyG,OAAO,MAC1B8xwB,EAAyBv4wB,IAAMyG,SAC/ByxwB,EAAiD,kBAAxBC,EAAmC,GAAGtxyB,OAAOsxyB,EAAqB,MAAQA,EACvGn4wB,IAAM0B,WAAU,WACd,OAAO,WACLogG,aAAao3oB,EAAM71uB,YAEpB,IAqFH,OAAOrD,IAAMwB,cAAc85T,IAAYj2T,YAAS,CAC9Ck+F,GAAI60qB,EACJ1kN,QArFgB,SAAqB/wlB,EAAMyzyB,GAC3CzzyB,EAAKk0G,MAAMiW,OAASorrB,EAEhBxkN,GACFA,EAAQ/wlB,EAAMyzyB,IAkFhB18Y,UApDkB,SAAuB/2Z,EAAMyzyB,GAC/CzzyB,EAAKk0G,MAAMiW,OAAS,OAEhB4sS,GACFA,EAAU/2Z,EAAMyzyB,IAiDlBziN,WA/EmB,SAAwBhxlB,EAAMyzyB,GACjD,IAAIoC,EAAgBF,EAAWj1wB,QAAUi1wB,EAAWj1wB,QAAQmuQ,aAAe,EAQvEjwK,EANsBwxS,YAAmB,CAC3Cl8T,MAAOA,EACP7W,QAASA,GACR,CACDu2B,KAAM,UAEqCtG,SAE7C,GAAgB,SAAZjwB,EAAoB,CACtB,IAAIy4sB,EAAYhiuB,EAAMu5C,YAAYo/R,sBAAsBopZ,GACxD71yB,EAAKk0G,MAAM0qB,mBAAqB,GAAG16H,OAAO4xyB,EAAW,MACrDF,EAAuBl1wB,QAAUo1wB,OAEjC91yB,EAAKk0G,MAAM0qB,mBAAmD,kBAAvBA,EAAkCA,EAAqB,GAAG16H,OAAO06H,EAAoB,MAG9H5+H,EAAKk0G,MAAMiW,OAAS,GAAGjmH,OAAO2xyB,EAAe,MAEzC7kN,GACFA,EAAWhxlB,EAAMyzyB,IA0DnBz8Y,OA9Ce,SAAoBh3Z,GACnC,IAAI61yB,EAAgBF,EAAWj1wB,QAAUi1wB,EAAWj1wB,QAAQmuQ,aAAe,EAC3E7uS,EAAKk0G,MAAMiW,OAAS,GAAGjmH,OAAO2xyB,EAAe,MAEzC7+Y,GACFA,EAAOh3Z,IA0CTkxlB,UAtCkB,SAAuBlxlB,GACzC,IAAI61yB,EAAgBF,EAAWj1wB,QAAUi1wB,EAAWj1wB,QAAQmuQ,aAAe,EAQvEjwK,EANuBwxS,YAAmB,CAC5Cl8T,MAAOA,EACP7W,QAASA,GACR,CACDu2B,KAAM,SAEsCtG,SAE9C,GAAgB,SAAZjwB,EAAoB,CACtB,IAAIy4sB,EAAYhiuB,EAAMu5C,YAAYo/R,sBAAsBopZ,GACxD71yB,EAAKk0G,MAAM0qB,mBAAqB,GAAG16H,OAAO4xyB,EAAW,MACrDF,EAAuBl1wB,QAAUo1wB,OAEjC91yB,EAAKk0G,MAAM0qB,mBAAmD,kBAAvBA,EAAkCA,EAAqB,GAAG16H,OAAO06H,EAAoB,MAG9H5+H,EAAKk0G,MAAMiW,OAASorrB,EAEhBrkN,GACFA,EAAUlxlB,IAiBZgvvB,eAbmB,SAAwBr4uB,EAAGhe,GAC9B,SAAZ0kG,IACFk5qB,EAAM71uB,QAAU+Q,WAAW94C,EAAMi9yB,EAAuBl1wB,SAAW,KAYrE28D,QAAqB,SAAZA,EAAqB,KAAOA,GACpC9jF,IAAQ,SAAUqmB,EAAOsvtB,GAC1B,OAAO7xtB,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQM,UAAWJ,EAAW,CAC5CssP,QAASxsP,EAAQwsP,QACjB02L,QAASygT,GAA8B,QAApBF,GAA6BzjuB,EAAQusD,QACxDz+F,IACFs0E,MAAOxxE,YAAS,CACd8pF,UAAW+orB,GACVrhsB,GACH7/G,IAAKA,GACJ66vB,GAAa7xtB,IAAMwB,cAAc,MAAO,CACzCmzC,UAAWF,EAAQ2wG,QACnBpuL,IAAKshzB,GACJt4wB,IAAMwB,cAAc,MAAO,CAC5BmzC,UAAWF,EAAQikuB,cAClB72wB,WA6EPk/R,EAAS43e,gBAAiB,EACXniuB,iBA7PK,SAAgBC,GAClC,MAAO,CAEL1B,UAAW,CACT+3C,OAAQ,EACRlH,SAAU,SACVmK,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,WAIvCqnU,QAAS,CACPn0M,OAAQ,OACRlH,SAAU,WAIZob,OAAQ,CACNujO,WAAY,UAIdn/K,QAAS,CAEPzuG,QAAS,QAIX+huB,aAAc,CACZ7huB,MAAO,WAiOqB,CAChC9sE,KAAM,eADOysE,CAEZuqP,I,oHCtQCkoD,EAAsC,qBAAXh/V,OAA4D+V,IAAMyB,gBAAkBzB,IAAM0B,UA2D1Gk3wB,MAhDf,SAAenzwB,GACb,IAAI5D,EAAW4D,EAAM5D,SACjBg3wB,EAAepzwB,EAAM23G,MACrBA,OAAyB,IAAjBy7pB,GAAkCA,EAC1CC,EAAkBrzwB,EAAMogO,SACxBA,OAA+B,IAApBiziB,EAA6B,KAAOA,EAE/Cx5qB,EAAkBt/F,IAAMia,UAAS,GACjCo8iB,EAAe/2d,EAAgB,GAC/Bg3d,EAAkBh3d,EAAgB,GAatC,OAXA2pP,GAAkB,WACX7rO,GACHk5c,GAAgB,KAEjB,CAACl5c,IACJp9G,IAAM0B,WAAU,WACV07G,GACFk5c,GAAgB,KAEjB,CAACl5c,IAEGp9G,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAMuwU,EAAex0jB,EAAWgkO,I,4BChCzEojH,EAAsC,qBAAXh/V,OAAyB+V,IAAM0B,UAAY1B,IAAMyB,gBA8FjEs3wB,MAzFf,SAAgBtzwB,GACd,IAAIgvC,EAAUhvC,EAAMgvC,QAChBukuB,EAAiBvzwB,EAAMwzwB,QACvBA,OAA6B,IAAnBD,GAAoCA,EAC9CE,EAAUzzwB,EAAMyzwB,QAChBC,EAAU1zwB,EAAM0zwB,QAChBC,EAAa3zwB,EAAM2zwB,WACnBhB,EAAS3ywB,EAAM89F,GACf81qB,EAAkB5zwB,EAAMmkZ,SACxBA,OAA+B,IAApByvX,EAA6B,aAAiBA,EACzDr5sB,EAAUv6D,EAAMu6D,QAEhBs/B,EAAkBt/F,IAAMia,UAAS,GACjCq/vB,EAAUh6qB,EAAgB,GAC1Bi6qB,EAAaj6qB,EAAgB,GAE7Bk6qB,EAAkBljuB,kBAAK7B,EAAQgluB,OAAQhluB,EAAQiluB,cAAeT,GAAWxkuB,EAAQkluB,eACjFC,EAAe,CACjB/iuB,MAAOuiuB,EACPtsrB,OAAQssrB,EACRvprB,KAAOuprB,EAAa,EAAKD,EACzBrjyB,MAAQsjyB,EAAa,EAAKF,GAExBW,EAAiBvjuB,kBAAK7B,EAAQh/B,MAAO6jwB,GAAW7kuB,EAAQqluB,aAAcb,GAAWxkuB,EAAQsluB,cACzFC,EAAe9wb,YAAiB0gE,GAepC,OAbA3gE,GAAkB,WAChB,IAAKmvb,EAAQ,CAEXmB,GAAW,GAEX,IAAIxrgB,EAAY35P,WAAW4lwB,EAAch6sB,GACzC,OAAO,WACL8hC,aAAaisK,OAKhB,CAACisgB,EAAc5B,EAAQp4sB,IACnBhgE,IAAMwB,cAAc,OAAQ,CACjCmzC,UAAW6kuB,EACX3isB,MAAO+isB,GACN55wB,IAAMwB,cAAc,OAAQ,CAC7BmzC,UAAWkluB,MCoDXI,EAAcj6wB,IAAM8E,YAAW,SAAqBW,EAAOzuC,GAC7D,IAAIkjzB,EAAgBz0wB,EAAMkuP,OACtBwmhB,OAA+B,IAAlBD,GAAmCA,EAChDzluB,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBz4D,EAAQu8B,YAAyBhT,EAAO,CAAC,SAAU,UAAW,cAE9D65F,EAAkBt/F,IAAMia,SAAS,IACjCmgwB,EAAU96qB,EAAgB,GAC1B+6qB,EAAa/6qB,EAAgB,GAE7Bg7qB,EAAUt6wB,IAAMyG,OAAO,GACvB8zwB,EAAiBv6wB,IAAMyG,OAAO,MAClCzG,IAAM0B,WAAU,WACV64wB,EAAel3wB,UACjBk3wB,EAAel3wB,UACfk3wB,EAAel3wB,QAAU,QAE1B,CAAC+2wB,IAEJ,IAAII,EAAoBx6wB,IAAMyG,QAAO,GAGjCg0wB,EAAaz6wB,IAAMyG,OAAO,MAE1Bi0wB,EAAmB16wB,IAAMyG,OAAO,MAChCsuC,EAAY/0C,IAAMyG,OAAO,MAC7BzG,IAAM0B,WAAU,WACd,OAAO,WACLogG,aAAa24qB,EAAWp3wB,YAEzB,IACH,IAAIs3wB,EAAc36wB,IAAMykF,aAAY,SAAUv2E,GAC5C,IAAI+qwB,EAAU/qwB,EAAO+qwB,QACjBC,EAAUhrwB,EAAOgrwB,QACjBC,EAAUjrwB,EAAOirwB,QACjBC,EAAalrwB,EAAOkrwB,WACpBplwB,EAAK9F,EAAO8F,GAChBqmwB,GAAW,SAAUO,GACnB,MAAO,GAAG/zyB,OAAOq0F,YAAmB0/sB,GAAa,CAAC56wB,IAAMwB,cAAcu3wB,EAAQ,CAC5El5yB,IAAKy6yB,EAAQj3wB,QACboxC,QAASA,EACTurB,QAzIO,IA0IPi5sB,QAASA,EACTC,QAASA,EACTC,QAASA,EACTC,WAAYA,SAGhBkB,EAAQj3wB,SAAW,EACnBk3wB,EAAel3wB,QAAU2Q,IACxB,CAACygC,IACAn5D,EAAQ0kB,IAAMykF,aAAY,WAC5B,IAAIie,EAAQzjI,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC5EsoC,EAAUtoC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAC9E+0C,EAAK/0C,UAAU7B,OAAS,EAAI6B,UAAU,QAAK5H,EAC3CwjzB,EAAmBtzwB,EAAQ0xwB,QAC3BA,OAA+B,IAArB4B,GAAsCA,EAChDC,EAAkBvzwB,EAAQosP,OAC1BA,OAA6B,IAApBmnhB,EAA6BX,GAAc5ywB,EAAQ0xwB,QAAU6B,EACtEC,EAAuBxzwB,EAAQyzwB,YAC/BA,OAAuC,IAAzBD,GAA0CA,EAE5D,GAAmB,cAAfr4qB,EAAMjnI,MAAwB++yB,EAAkBn3wB,QAClDm3wB,EAAkBn3wB,SAAU,MAD9B,CAKmB,eAAfq/F,EAAMjnI,OACR++yB,EAAkBn3wB,SAAU,GAG9B,IAQI61wB,EACAC,EACAC,EAVA/1mB,EAAU23mB,EAAc,KAAOjmuB,EAAU1xC,QACzC6tH,EAAOmyC,EAAUA,EAAQmyF,wBAA0B,CACrD3+M,MAAO,EACPi2C,OAAQ,EACRh3G,KAAM,EACN+5G,IAAK,GAOP,GAAI8jK,GAA4B,IAAlBjxJ,EAAMk4K,SAAmC,IAAlBl4K,EAAMm4K,UAAkBn4K,EAAMk4K,UAAYl4K,EAAMs8K,QACnFk6f,EAAU5gzB,KAAKo/E,MAAMw5E,EAAKr6E,MAAQ,GAClCsiuB,EAAU7gzB,KAAKo/E,MAAMw5E,EAAKpkC,OAAS,OAC9B,CACL,IAAI8tL,EAAUl4K,EAAMk4K,QAAUl4K,EAAMk4K,QAAUl4K,EAAMs8K,QAAQ,GAAGpE,QAC3DC,EAAUn4K,EAAMm4K,QAAUn4K,EAAMm4K,QAAUn4K,EAAMs8K,QAAQ,GAAGnE,QAC/Dq+f,EAAU5gzB,KAAKo/E,MAAMkjO,EAAU1pJ,EAAKp7I,MACpCqjyB,EAAU7gzB,KAAKo/E,MAAMmjO,EAAU3pJ,EAAKrhC,KAGtC,GAAI8jK,GACFylhB,EAAa9gzB,KAAK8oK,MAAM,EAAI9oK,KAAKy1O,IAAI78E,EAAKr6E,MAAO,GAAKv+E,KAAKy1O,IAAI78E,EAAKpkC,OAAQ,IAAM,IAEjE,IAAM,IACrBssrB,GAAc,OAEX,CACL,IAAI6B,EAAqF,EAA7E3izB,KAAKC,IAAID,KAAKijB,KAAK8nL,EAAUA,EAAQ1oE,YAAc,GAAKu+qB,GAAUA,GAAe,EACzFgC,EAAsF,EAA9E5izB,KAAKC,IAAID,KAAKijB,KAAK8nL,EAAUA,EAAQmuG,aAAe,GAAK2ngB,GAAUA,GAAe,EAC9FC,EAAa9gzB,KAAK8oK,KAAK9oK,KAAKy1O,IAAIktkB,EAAO,GAAK3izB,KAAKy1O,IAAImtkB,EAAO,IAI1Dx4qB,EAAMs8K,QAIyB,OAA7B07f,EAAiBr3wB,UAEnBq3wB,EAAiBr3wB,QAAU,WACzBs3wB,EAAY,CACV1B,QAASA,EACTC,QAASA,EACTC,QAASA,EACTC,WAAYA,EACZplwB,GAAIA,KAKRymwB,EAAWp3wB,QAAU+Q,YAAW,WAC1BsmwB,EAAiBr3wB,UACnBq3wB,EAAiBr3wB,UACjBq3wB,EAAiBr3wB,QAAU,QA7Nb,KAkOpBs3wB,EAAY,CACV1B,QAASA,EACTC,QAASA,EACTC,QAASA,EACTC,WAAYA,EACZplwB,GAAIA,OAGP,CAACmmwB,EAAYQ,IACZ1B,EAAUj5wB,IAAMykF,aAAY,WAC9BnpG,EAAM,GAAI,CACR29xB,SAAS,MAEV,CAAC39xB,IACA4xR,EAAOltQ,IAAMykF,aAAY,SAAUie,EAAO1uF,GAI5C,GAHA8tF,aAAa24qB,EAAWp3wB,SAGL,aAAfq/F,EAAMjnI,MAAuBi/yB,EAAiBr3wB,QAOhD,OANAq/F,EAAMC,UACN+3qB,EAAiBr3wB,UACjBq3wB,EAAiBr3wB,QAAU,UAC3Bo3wB,EAAWp3wB,QAAU+Q,YAAW,WAC9B84P,EAAKxqK,EAAO1uF,OAKhB0mwB,EAAiBr3wB,QAAU,KAC3Bg3wB,GAAW,SAAUO,GACnB,OAAIA,EAAWx9yB,OAAS,EACfw9yB,EAAWvvyB,MAAM,GAGnBuvyB,KAETL,EAAel3wB,QAAU2Q,IACxB,IAQH,OAPAhU,IAAMkhoB,oBAAoBlqqB,GAAK,WAC7B,MAAO,CACLiizB,QAASA,EACT39xB,MAAOA,EACP4xR,KAAMA,KAEP,CAAC+rgB,EAAS39xB,EAAO4xR,IACbltQ,IAAMwB,cAAc,OAAQ6D,YAAS,CAC1CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9B39E,IAAK+9E,GACJ74D,GAAQ8jB,IAAMwB,cAAc25wB,IAAiB,CAC9CtmuB,UAAW,KACX6sD,MAAM,GACL04qB,OA0BU5juB,IAvBMthC,EAuBNshC,eA9SK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ8yG,SAAU,SACVgK,cAAe,OACfpX,SAAU,WACV+jB,OAAQ,EACR1M,IAAK,EACL95G,MAAO,EACP+5G,OAAQ,EACRh6G,KAAM,EACNktG,aAAc,WAIhBy2rB,OAAQ,CACNhxrB,QAAS,EACTjQ,SAAU,YAIZkhsB,cAAe,CACbjxrB,QAAS,GACTmP,UAAW,WACXk6I,UAAW,UAAUjrQ,OA3BZ,IA2B6B,OAAOA,OAAO4vE,EAAMu5C,YAAY2hO,OAAO48D,YAI/EorZ,cAAe,CACbyB,kBAAmB,GAAGv0yB,OAAO4vE,EAAMu5C,YAAYC,SAASoQ,QAAS,OAInE5qF,MAAO,CACLgzE,QAAS,EACT9xC,QAAS,QACTE,MAAO,OACPi2C,OAAQ,OACR9J,aAAc,MACdzC,gBAAiB,gBAInBu5rB,aAAc,CACZrxrB,QAAS,EACTqpJ,UAAW,SAASjrQ,OAhDX,IAgD4B,OAAOA,OAAO4vE,EAAMu5C,YAAY2hO,OAAO48D,YAI9EwrZ,aAAc,CACZvhsB,SAAU,WACV1iG,KAAM,EACN+5G,IAAK,EACLiiJ,UAAW,mBAAmBjrQ,OAAO4vE,EAAMu5C,YAAY2hO,OAAO48D,UAAW,oBAE3E,mBAAoB,CAClB,KAAM,CACJ32R,UAAW,WACXnP,QAAS,IAEX,OAAQ,CACNmP,UAAW,WACXnP,QAAS,KAGb,kBAAmB,CACjB,KAAM,CACJA,QAAS,GAEX,OAAQ,CACNA,QAAS,IAGb,qBAAsB,CACpB,KAAM,CACJmP,UAAW,YAEb,MAAO,CACLA,UAAW,eAEb,OAAQ,CACNA,UAAW,gBA4Ne,CAChCpyH,MAAM,EACNuE,KAAM,kBAFOysE,GAvBMthC,EA0BNlV,IAAM4G,KAAKqzwB,IAzBd33lB,QAAU,iBACbptK,ICpOLs6E,EAAaxvF,IAAM8E,YAAW,SAAoBW,EAAOzuC,GAC3D,IAAIyvB,EAASgf,EAAMhf,OACf40xB,EAAgB51wB,EAAM+8F,UACtB84qB,EAAsB71wB,EAAMsuS,aAC5BA,OAAuC,IAAxBune,GAAyCA,EACxDz5wB,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBC,EAAmBnvC,EAAMovC,UACzBA,OAAiC,IAArBD,EAA8B,SAAWA,EACrDsqM,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDq8hB,EAAuB91wB,EAAMm5V,cAC7BA,OAAyC,IAAzB28a,GAA0CA,EAC1DC,EAAwB/1wB,EAAM00tB,mBAC9BA,OAA+C,IAA1BqhD,GAA2CA,EAChEC,EAAqBh2wB,EAAMo6O,YAC3BA,OAAqC,IAAvB47hB,GAAwCA,EACtDlsrB,EAAwB9pF,EAAM8pF,sBAC9B0R,EAASx7F,EAAMw7F,OACf7gB,EAAU36E,EAAM26E,QAChB9b,EAAU7+D,EAAM6+D,QAChBo3sB,EAAiBj2wB,EAAMi2wB,eACvBh/qB,EAAYj3F,EAAMi3F,UAClB6kiB,EAAU97nB,EAAM87nB,QAChBxkW,EAAct3R,EAAMs3R,YACpBlsM,EAAeprF,EAAMorF,aACrBw4iB,EAAY5joB,EAAM4joB,UAClB5jZ,EAAahgP,EAAMggP,WACnBu7W,EAAcv7lB,EAAMu7lB,YACpBx7W,EAAe//O,EAAM+/O,aACrBmygB,EAAclyvB,EAAMkyvB,YACpBgkB,EAAkBl2wB,EAAMo6F,SACxBA,OAA+B,IAApB87qB,EAA6B,EAAIA,EAC5CC,EAAmBn2wB,EAAMm2wB,iBACzBh8hB,EAAcn6O,EAAMhqC,KACpBA,OAAuB,IAAhBmkR,EAAyB,SAAWA,EAC3C1jQ,EAAQu8B,YAAyBhT,EAAO,CAAC,SAAU,YAAa,eAAgB,WAAY,UAAW,YAAa,YAAa,WAAY,gBAAiB,qBAAsB,cAAe,wBAAyB,SAAU,UAAW,UAAW,iBAAkB,YAAa,UAAW,cAAe,eAAgB,YAAa,aAAc,cAAe,eAAgB,cAAe,WAAY,mBAAoB,SAE9a+8F,EAAYxiG,IAAMyG,OAAO,MAO7B,IAAIo1wB,EAAY77wB,IAAMyG,OAAO,MAEzB64F,EAAkBt/F,IAAMia,UAAS,GACjCw1E,EAAe6P,EAAgB,GAC/B22S,EAAkB32S,EAAgB,GAElC7mB,GAAYgX,GACdwmT,GAAgB,GAGlB,IAAI3xJ,GAAqBC,cACrBC,GAAiBF,GAAmBE,eACpCC,GAAgBH,GAAmBG,cACnCC,GAAkBJ,GAAmBttR,IAgBzC,SAAS8kzB,GAAiBC,EAAcC,GACtC,IAAIC,EAAmBh9yB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAKk7vB,EAC3F,OAAOjxY,aAAiB,SAAUxmP,GAWhC,OAVIs5qB,GACFA,EAAct5qB,IAGHu5qB,GAEEJ,EAAUx4wB,SACvBw4wB,EAAUx4wB,QAAQ04wB,GAAcr5qB,IAG3B,KA3BX1iG,IAAMkhoB,oBAAoBz6oB,GAAQ,WAChC,MAAO,CACLgpG,aAAc,WACZwmT,GAAgB,GAChBzzS,EAAUn/F,QAAQ4iC,YAGrB,IACHjmC,IAAM0B,WAAU,WACV+tF,GAAgBowJ,IAAgB++G,GAClCi9a,EAAUx4wB,QAAQ41wB,YAEnB,CAACr6a,EAAe/+G,EAAapwJ,IAmBhC,IAAIysrB,GAAkBJ,GAAiB,QAAS/+e,GAC5Co/e,GAAkBL,GAAiB,OAAQnkB,GAC3CykB,GAAgBN,GAAiB,OAAQzyI,GACzCgzI,GAAmBP,GAAiB,QAAQ,SAAUp5qB,GACpDjT,GACFiT,EAAM/F,iBAGJ9L,GACFA,EAAa6R,MAGb45qB,GAAmBR,GAAiB,QAASt2hB,GAC7C+2hB,GAAiBT,GAAiB,OAAQr2hB,GAC1C+2hB,GAAkBV,GAAiB,OAAQ96K,GAC3C3iX,GAAay9hB,GAAiB,QAAQ,SAAUp5qB,GAC9CjT,IACFg1J,GAAc/hJ,GACduzS,GAAgB,IAGdh1S,GACFA,EAAOyB,MAER,GACCsloB,GAAc9+Y,aAAiB,SAAUxmP,GACvCjqB,IAKC+pB,EAAUn/F,UACbm/F,EAAUn/F,QAAUq/F,EAAMziB,eAGxBukK,GAAe9hJ,KACjBuzS,GAAgB,GAEZylY,GACFA,EAAeh5qB,IAIfp+B,GACFA,EAAQo+B,OAIR+5qB,GAAoB,WACtB,IAAI/zrB,EAlGG08J,IAASC,YAAY7iJ,EAAUn/F,SAmGtC,OAAOwxC,GAA2B,WAAdA,KAA+C,MAAnB6zC,EAAOizL,SAAmBjzL,EAAOC,OAO/E+zrB,GAAa18wB,IAAMyG,QAAO,GAC1BujT,GAAgBk/B,aAAiB,SAAUxmP,GAEzCm9I,IAAgB68hB,GAAWr5wB,SAAWosF,GAAgBosrB,EAAUx4wB,SAAyB,MAAdq/F,EAAM7iI,MACnF68yB,GAAWr5wB,SAAU,EACrBq/F,EAAMC,UACNk5qB,EAAUx4wB,QAAQ6pQ,KAAKxqK,GAAO,WAC5Bm5qB,EAAUx4wB,QAAQ/nB,MAAMonH,OAIxBhG,GACFA,EAAUgG,GAIRA,EAAMn6G,SAAWm6G,EAAMziB,eAAiBw8rB,MAAqC,UAAd/5qB,EAAM7iI,MACvE6iI,EAAM/F,iBAEFvc,GACFA,EAAQsiB,OAIVi6qB,GAAczzb,aAAiB,SAAUxmP,GAGvCm9I,GAA6B,MAAdn9I,EAAM7iI,KAAeg8yB,EAAUx4wB,SAAWosF,IAAiBiT,EAAMu7K,mBAClFy+f,GAAWr5wB,SAAU,EACrBq/F,EAAMC,UACNk5qB,EAAUx4wB,QAAQ6pQ,KAAKxqK,GAAO,WAC5Bm5qB,EAAUx4wB,QAAQ41wB,QAAQv2qB,OAI1B6+hB,GACFA,EAAQ7+hB,GAINA,EAAMn6G,SAAWm6G,EAAMziB,eAAiBw8rB,MAAqC,MAAd/5qB,EAAM7iI,MAAgB6iI,EAAMu7K,mBAC7Fv7K,EAAM/F,iBAEFvc,GACFA,EAAQsiB,OAIVi0qB,GAAgB9huB,EAEE,WAAlB8huB,IAA8Bz6xB,EAAMysG,OACtCgurB,GAAgB,KAGlB,IAAI37M,GAAc,GAEI,WAAlB27M,IACF37M,GAAYv/lB,KAAOA,EACnBu/lB,GAAYvif,SAAWA,IAED,MAAlBk+rB,IAA0Bz6xB,EAAMysG,OAClCqye,GAAY/9iB,KAAO,UAGrB+9iB,GAAY,iBAAmBvif,GAGjC,IAAImksB,GAAgBx6qB,YAAWi5qB,EAAerkzB,GAC1CkuR,GAAe9iJ,YAAWsiJ,GAAiBliJ,GAC3C8iJ,GAAYljJ,YAAWw6qB,GAAe13hB,IAC1C,OAAOllP,IAAMwB,cAAcm1wB,GAAetxwB,YAAS,CACjDsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW86C,GAAgB,CAACh7C,EAAQg7C,aAAcF,GAAwB9W,GAAYhkC,EAAQgkC,UAC5HwoB,OAAQo9I,GACRj+J,QAASA,EACT9b,QAAS0jqB,GACTtroB,UAAWstN,GACXu3U,QAASo7I,GACT5/e,YAAam/e,GACbrrrB,aAAcwrrB,GACdhzI,UAAW+yI,GACXzkB,YAAawkB,GACb12hB,WAAY82hB,GACZv7K,YAAaw7K,GACbh3hB,aAAc82hB,GACdtlzB,IAAKsuR,GACLzlJ,SAAUpnB,GAAY,EAAIonB,GACzBm7d,GAAa9+kB,GAAQ2lB,EAAW+8V,GAAkBnmR,EAG5B,KAHuCz4E,IAAMwB,cAAco3wB,EAAO,KAAM54wB,IAAMwB,cAAcy4wB,EAAa50wB,YAAS,CACzIruC,IAAK6kzB,EACLlohB,OAAQogD,GACP6ne,SAsKUpluB,gBAvcK,CAElB1jE,KAAM,CACJ6jE,QAAS,cACTnC,WAAY,SACZyC,eAAgB,SAChBuhC,SAAU,WACVmtP,wBAAyB,cACzBplP,gBAAiB,cAGjB2jP,QAAS,EACT9tO,OAAQ,EACRt/C,OAAQ,EAERksC,aAAc,EACd3rC,QAAS,EAETupC,OAAQ,UACR8kP,WAAY,OACZ/B,cAAe,SACf,kBAAmB,OAEnB,qBAAsB,OAEtBliQ,eAAgB,OAEhBD,MAAO,UACP,sBAAuB,CACrByhB,YAAa,QAGf,aAAc,CACZ2M,cAAe,OAEfhP,OAAQ,YAKZnI,SAAU,GAGVgX,aAAc,IA4ZkB,CAChC1lH,KAAM,iBADOysE,CAEZg5C,I,wNC1cYqtrB,MALf,WACEthzB,KAAK44K,SAAW,GAChB54K,KAAKjE,KAAO,GC2BCylC,MAJf,SAAY9lC,EAAOilB,GACjB,OAAOjlB,IAAUilB,GAAUjlB,IAAUA,GAASilB,IAAUA,GCb3Cs5J,MAVf,SAAsBp2K,EAAOS,GAE3B,IADA,IAAIzC,EAASgC,EAAMhC,OACZA,KACL,GAAI2/B,EAAG39B,EAAMhC,GAAQ,GAAIyC,GACvB,OAAOzC,EAGX,OAAQ,GCXNuN,EAHa3N,MAAMtD,UAGCiR,OA4BTmyyB,MAjBf,SAAyBj9yB,GACvB,IAAI02C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,EAAaj/H,EAAM12C,GAE/B,QAAInI,EAAQ,KAIRA,GADY6+C,EAAKn5C,OAAS,EAE5Bm5C,EAAK3uC,MAEL+C,EAAOpO,KAAKg6C,EAAM7+C,EAAO,KAEzB6D,KAAKjE,MACA,ICbMylzB,MAPf,SAAsBl9yB,GACpB,IAAI02C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,EAAaj/H,EAAM12C,GAE/B,OAAOnI,EAAQ,OAAIL,EAAYk/C,EAAK7+C,GAAO,ICA9BslzB,MAJf,SAAsBn9yB,GACpB,OAAO21K,EAAaj6K,KAAK44K,SAAUt0K,IAAQ,GCa9Bo9yB,MAbf,SAAsBp9yB,EAAK5I,GACzB,IAAIs/C,EAAOh7C,KAAK44K,SACZz8K,EAAQ89K,EAAaj/H,EAAM12C,GAQ/B,OANInI,EAAQ,KACR6D,KAAKjE,KACPi/C,EAAK5uC,KAAK,CAAC9H,EAAK5I,KAEhBs/C,EAAK7+C,GAAO,GAAKT,EAEZsE,MCTT,SAASy4K,EAAU9uK,GACjB,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAK7Bw1K,EAAUt6K,UAAU+U,MAAQouyB,EAC5B7ooB,EAAUt6K,UAAV,OAAgCojzB,EAChC9ooB,EAAUt6K,UAAU4F,IAAMy9yB,EAC1B/ooB,EAAUt6K,UAAU8F,IAAMw9yB,EAC1BhpoB,EAAUt6K,UAAUuJ,IAAMg6yB,EAEXjpoB,QCjBAkpoB,MALf,WACE3hzB,KAAK44K,SAAW,IAAIH,EACpBz4K,KAAKjE,KAAO,GCMC6lzB,MARf,SAAqBt9yB,GACnB,IAAI02C,EAAOh7C,KAAK44K,SACZhlK,EAASonC,EAAI,OAAW12C,GAG5B,OADAtE,KAAKjE,KAAOi/C,EAAKj/C,KACV6X,GCDMiuyB,MAJf,SAAkBv9yB,GAChB,OAAOtE,KAAK44K,SAAS70K,IAAIO,ICGZw9yB,MAJf,SAAkBx9yB,GAChB,OAAOtE,KAAK44K,SAAS30K,IAAIK,I,SCLZ5E,EAFF6X,IAAK7X,OCAd00K,EAAch2K,OAAOD,UAGrBoD,EAAiB6yK,EAAY7yK,eAO7BmzK,EAAuBN,EAAYnzK,SAGnCo0K,EAAiB31K,EAASA,EAAO41K,iBAAcx5K,EA6BpCgjL,MApBf,SAAmBpjL,GACjB,IAAIkjL,EAAQr9K,EAAeP,KAAKtF,EAAO25K,GACnC6F,EAAMx/K,EAAM25K,GAEhB,IACE35K,EAAM25K,QAAkBv5K,EACxB,IAAI+iL,GAAW,EACf,MAAOz2K,IAET,IAAIwL,EAAS8gK,EAAqB1zK,KAAKtF,GAQvC,OAPImjL,IACED,EACFljL,EAAM25K,GAAkB6F,SAEjBx/K,EAAM25K,IAGVzhK,GClCL8gK,EAPct2K,OAAOD,UAOc8C,SAaxB89K,MAJf,SAAwBrjL,GACtB,OAAOg5K,EAAqB1zK,KAAKtF,ICT/B25K,EAAiB31K,EAASA,EAAO41K,iBAAcx5K,EAkBpC6iL,MATf,SAAoBjjL,GAClB,OAAa,MAATA,OACeI,IAAVJ,EAdQ,qBADL,gBAiBJ25K,GAAkBA,KAAkBj3K,OAAO1C,GAC/CojL,EAAUpjL,GACVqjL,EAAerjL,ICMNi8K,MALf,SAAkBj8K,GAChB,IAAIwE,SAAcxE,EAClB,OAAgB,MAATA,IAA0B,UAARwE,GAA4B,YAARA,ICShCk+K,MAVf,SAAoB1iL,GAClB,IAAKi8K,EAASj8K,GACZ,OAAO,EAIT,IAAIw/K,EAAMyD,EAAWjjL,GACrB,MA5BY,qBA4BLw/K,GA3BI,8BA2BcA,GA7BZ,0BA6B6BA,GA1B7B,kBA0BgDA,GC5BhD7G,EAFE98J,IAAK,sBCAlBi9J,EAAc,WAChB,IAAIxoH,EAAM,SAAS+/F,KAAKsoB,GAAcA,EAAWvyK,MAAQuyK,EAAWvyK,KAAK2yK,UAAY,IACrF,OAAOzoH,EAAO,iBAAmBA,EAAO,GAFxB,GAgBH+1vB,MAJf,SAAkB73xB,GAChB,QAASsqJ,GAAeA,KAActqJ,GCZpCoqJ,EAHYjF,SAASlxK,UAGI8C,SAqBdK,MAZf,SAAkB4oB,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOoqJ,EAAatzK,KAAKkpB,GACzB,MAAO9hB,IACT,IACE,OAAQ8hB,EAAO,GACf,MAAO9hB,KAEX,MAAO,ICVL4jK,EAAe,8BAGfmI,EAAY9E,SAASlxK,UACrBi2K,EAAch2K,OAAOD,UAGrBm2K,EAAeH,EAAUlzK,SAGzBM,EAAiB6yK,EAAY7yK,eAG7BszK,EAAa/5H,OAAO,IACtBw5H,EAAatzK,KAAKO,GAAgBq3E,QAjBjB,sBAiBuC,QACvDA,QAAQ,yDAA0D,SAAW,KAmBjEipG,MARf,SAAsBnmL,GACpB,SAAKi8K,EAASj8K,IAAUqmzB,EAASrmzB,MAGnB0iL,EAAW1iL,GAASm5K,EAAa7I,GAChCjxH,KAAKz5C,EAAS5F,KC/BhBgyL,MAJf,SAAkBvpL,EAAQG,GACxB,OAAiB,MAAVH,OAAiBrI,EAAYqI,EAAOG,ICO9BixK,MALf,SAAmBpxK,EAAQG,GACzB,IAAI5I,EAAQgyL,EAASvpL,EAAQG,GAC7B,OAAOu9K,EAAanmL,GAASA,OAAQI,GCPxB8W,EAFL2iK,EAAUh+J,IAAM,OCCXm/J,EAFInB,EAAUn3K,OAAQ,UCWtB4jzB,MALf,WACEhizB,KAAK44K,SAAWlC,EAAeA,EAAa,MAAQ,GACpD12K,KAAKjE,KAAO,GCKCkmzB,MANf,SAAoB39yB,GAClB,IAAIsP,EAAS5T,KAAKiE,IAAIK,WAAetE,KAAK44K,SAASt0K,GAEnD,OADAtE,KAAKjE,MAAQ6X,EAAS,EAAI,EACnBA,GCJLrS,EAHcnD,OAAOD,UAGQoD,eAoBlB2gzB,OATf,SAAiB59yB,GACf,IAAI02C,EAAOh7C,KAAK44K,SAChB,GAAIlC,EAAc,CAChB,IAAI9iK,EAASonC,EAAK12C,GAClB,MArBiB,8BAqBVsP,OAA4B9X,EAAY8X,EAEjD,OAAOrS,EAAeP,KAAKg6C,EAAM12C,GAAO02C,EAAK12C,QAAOxI,GCpBlDyF,GAHcnD,OAAOD,UAGQoD,eAgBlB4gzB,OALf,SAAiB79yB,GACf,IAAI02C,EAAOh7C,KAAK44K,SAChB,OAAOlC,OAA8B56K,IAAdk/C,EAAK12C,GAAsB/C,GAAeP,KAAKg6C,EAAM12C,ICG/D89yB,OAPf,SAAiB99yB,EAAK5I,GACpB,IAAIs/C,EAAOh7C,KAAK44K,SAGhB,OAFA54K,KAAKjE,MAAQiE,KAAKiE,IAAIK,GAAO,EAAI,EACjC02C,EAAK12C,GAAQoyK,QAA0B56K,IAAVJ,EAfV,4BAekDA,EAC9DsE,MCNT,SAASw4K,GAAK7uK,GACZ,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAK7Bu1K,GAAKr6K,UAAU+U,MAAQ8uyB,EACvBxpoB,GAAKr6K,UAAL,OAA2B8jzB,EAC3BzpoB,GAAKr6K,UAAU4F,IAAMm+yB,GACrB1poB,GAAKr6K,UAAU8F,IAAMk+yB,GACrB3poB,GAAKr6K,UAAUuJ,IAAM06yB,GAEN5poB,UCXA6poB,OATf,WACErizB,KAAKjE,KAAO,EACZiE,KAAK44K,SAAW,CACd,KAAQ,IAAIJ,GACZ,IAAO,IAAK5lK,GAAO6lK,GACnB,OAAU,IAAID,KCFHiV,OAPf,SAAmB/xL,GACjB,IAAIwE,SAAcxE,EAClB,MAAgB,UAARwE,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVxE,EACU,OAAVA,GCMQwhL,OAPf,SAAoBl0K,EAAK1E,GACvB,IAAI02C,EAAOhyC,EAAI4vK,SACf,OAAO6U,GAAUnpL,GACb02C,EAAmB,iBAAP12C,EAAkB,SAAW,QACzC02C,EAAKhyC,KCGIs5yB,OANf,SAAwBh+yB,GACtB,IAAIsP,EAASspK,GAAWl9K,KAAMsE,GAAjB,OAAgCA,GAE7C,OADAtE,KAAKjE,MAAQ6X,EAAS,EAAI,EACnBA,GCCM2uyB,OAJf,SAAqBj+yB,GACnB,OAAO44K,GAAWl9K,KAAMsE,GAAKP,IAAIO,ICGpBk+yB,OAJf,SAAqBl+yB,GACnB,OAAO44K,GAAWl9K,KAAMsE,GAAKL,IAAIK,ICSpBm+yB,OATf,SAAqBn+yB,EAAK5I,GACxB,IAAIs/C,EAAOkiI,GAAWl9K,KAAMsE,GACxBvI,EAAOi/C,EAAKj/C,KAIhB,OAFAi/C,EAAKtzC,IAAIpD,EAAK5I,GACdsE,KAAKjE,MAAQi/C,EAAKj/C,MAAQA,EAAO,EAAI,EAC9BiE,MCLT,SAAS04K,GAAS/uK,GAChB,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAK7By1K,GAASv6K,UAAU+U,MAAQmvyB,GAC3B3poB,GAASv6K,UAAT,OAA+BmkzB,GAC/B5poB,GAASv6K,UAAU4F,IAAMw+yB,GACzB7poB,GAASv6K,UAAU8F,IAAMu+yB,GACzB9poB,GAASv6K,UAAUuJ,IAAM+6yB,GAEV/poB,UCEAgqoB,OAhBf,SAAkBp+yB,EAAK5I,GACrB,IAAIs/C,EAAOh7C,KAAK44K,SAChB,GAAI59H,aAAgBy9H,EAAW,CAC7B,IAAI0E,EAAQniI,EAAK49H,SACjB,IAAKhmK,GAAQuqK,EAAMt7K,OAASu7K,IAG1B,OAFAD,EAAM/wK,KAAK,CAAC9H,EAAK5I,IACjBsE,KAAKjE,OAASi/C,EAAKj/C,KACZiE,KAETg7C,EAAOh7C,KAAK44K,SAAW,IAAIF,GAASyE,GAItC,OAFAniI,EAAKtzC,IAAIpD,EAAK5I,GACdsE,KAAKjE,KAAOi/C,EAAKj/C,KACViE,MChBT,SAAS6c,GAAMlT,GACb,IAAIqxC,EAAOh7C,KAAK44K,SAAW,IAAIH,EAAU9uK,GACzC3J,KAAKjE,KAAOi/C,EAAKj/C,KAInB8gB,GAAM1e,UAAU+U,MAAQyuyB,EACxB9kyB,GAAM1e,UAAN,OAA4ByjzB,EAC5B/kyB,GAAM1e,UAAU4F,IAAM89yB,EACtBhlyB,GAAM1e,UAAU8F,IAAM69yB,EACtBjlyB,GAAM1e,UAAUuJ,IAAMg7yB,GAEP7lyB,UCLA6zJ,OAZf,SAAmB7sK,EAAO4sK,GAIxB,IAHA,IAAIt0K,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,SAE9B1F,EAAQ0F,IAC8B,IAAzC4uK,EAAS5sK,EAAM1H,GAAQA,EAAO0H,KAIpC,OAAOA,GCRMgE,GARO,WACpB,IACE,IAAIqiB,EAAOqrJ,EAAUn3K,OAAQ,kBAE7B,OADA8rB,EAAK,GAAI,GAAI,IACNA,EACP,MAAO9hB,KALW,GCsBP0xK,OAbf,SAAyB31K,EAAQG,EAAK5I,GACzB,aAAP4I,GAAsBuD,GACxBA,GAAe1D,EAAQG,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAAS5I,EACT,UAAY,IAGdyI,EAAOG,GAAO5I,GCbd6F,GAHcnD,OAAOD,UAGQoD,eAoBlBw4K,OARf,SAAqB51K,EAAQG,EAAK5I,GAChC,IAAIs+K,EAAW71K,EAAOG,GAChB/C,GAAeP,KAAKmD,EAAQG,IAAQk9B,EAAGw4I,EAAUt+K,UACxCI,IAAVJ,GAAyB4I,KAAOH,IACnC21K,GAAgB31K,EAAQG,EAAK5I,ICgBlB2+K,OA1Bf,SAAoBptJ,EAAQid,EAAO/lC,EAAQ02K,GACzC,IAAI4N,GAAStkL,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAIhI,GAAS,EACT0F,EAASqoC,EAAMroC,SAEV1F,EAAQ0F,GAAQ,CACvB,IAAIyC,EAAM4lC,EAAM/tC,GAEZ0T,EAAWgrK,EACXA,EAAW12K,EAAOG,GAAM2oB,EAAO3oB,GAAMA,EAAKH,EAAQ8oB,QAClDnxB,OAEaA,IAAb+T,IACFA,EAAWod,EAAO3oB,IAEhBmkL,EACF3O,GAAgB31K,EAAQG,EAAKuL,GAE7BkqK,GAAY51K,EAAQG,EAAKuL,GAG7B,OAAO1L,GCjBMkuK,OAVf,SAAmBjsK,EAAGqqK,GAIpB,IAHA,IAAIt0K,GAAS,EACTyX,EAASnS,MAAM2E,KAEVjK,EAAQiK,GACfwN,EAAOzX,GAASs0K,EAASt0K,GAE3B,OAAOyX,GCYM0jK,OAJf,SAAsB57K,GACpB,OAAgB,MAATA,GAAiC,iBAATA,GCRlBikL,OAJf,SAAyBjkL,GACvB,OAAO47K,GAAa57K,IAVR,sBAUkBijL,EAAWjjL,ICVvC04K,GAAch2K,OAAOD,UAGrBoD,GAAiB6yK,GAAY7yK,eAG7B4F,GAAuBitK,GAAYjtK,qBAoBnC8xK,GAAc0G,GAAgB,WAAa,OAAOj8K,UAApB,IAAsCi8K,GAAkB,SAASjkL,GACjG,OAAO47K,GAAa57K,IAAU6F,GAAeP,KAAKtF,EAAO,YACtDyL,GAAqBnG,KAAKtF,EAAO,WAGvBu9K,MCVAv3K,GAFDD,MAAMC,Q,UCnBhBwqK,GAAW,mBAoBAmN,OAVf,SAAiB39K,EAAOmG,GACtB,IAAI3B,SAAcxE,EAGlB,SAFAmG,EAAmB,MAAVA,EAfY,iBAewBA,KAGlC,UAAR3B,GACU,UAARA,GAAoBgsK,GAASnxH,KAAKr/C,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQmG,GCalCisL,OALf,SAAkBpyL,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA9Bb,kBC+BnBkzK,GAAiB,GACrBA,GAZiB,yBAYYA,GAXZ,yBAYjBA,GAXc,sBAWYA,GAVX,uBAWfA,GAVe,uBAUYA,GATZ,uBAUfA,GATsB,8BASYA,GARlB,wBAShBA,GARgB,yBAQY,EAC5BA,GAjCc,sBAiCYA,GAhCX,kBAiCfA,GApBqB,wBAoBYA,GAhCnB,oBAiCdA,GApBkB,qBAoBYA,GAhChB,iBAiCdA,GAhCe,kBAgCYA,GA/Bb,qBAgCdA,GA/Ba,gBA+BYA,GA9BT,mBA+BhBA,GA9BgB,mBA8BYA,GA7BZ,mBA8BhBA,GA7Ba,gBA6BYA,GA5BT,mBA6BhBA,GA5BiB,qBA4BY,EAcd+zoB,OALf,SAA0BjnzB,GACxB,OAAO47K,GAAa57K,IAClBoyL,GAASpyL,EAAMmG,WAAa+sK,GAAe+P,EAAWjjL,KC3C3C82K,OANf,SAAmBtoJ,GACjB,OAAO,SAASxuB,GACd,OAAOwuB,EAAKxuB,K,UCJZ20K,GAAmBX,MAAYA,KAASY,aAqB7BA,GAFID,GAAmBmC,GAAUnC,IAAoBsyoB,GCbhEphzB,GAHcnD,OAAOD,UAGQoD,eAqClBs3K,OA3Bf,SAAuBn9K,EAAOo9K,GAC5B,IAAIC,EAAQr3K,GAAQhG,GAChBs9K,GAASD,GAASE,GAAYv9K,GAC9Bw9K,GAAUH,IAAUC,GAASjD,aAASr6K,GACtCy9K,GAAUJ,IAAUC,IAAUE,GAAU5I,GAAa50K,GACrD09K,EAAcL,GAASC,GAASE,GAAUC,EAC1CvlK,EAASwlK,EAAc/G,GAAU32K,EAAMmG,OAAQgN,QAAU,GACzDhN,EAAS+R,EAAO/R,OAEpB,IAAK,IAAIyC,KAAO5I,GACTo9K,IAAav3K,GAAeP,KAAKtF,EAAO4I,IACvC80K,IAEQ,UAAP90K,GAEC40K,IAAkB,UAAP50K,GAA0B,UAAPA,IAE9B60K,IAAkB,UAAP70K,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD+0K,GAAQ/0K,EAAKzC,KAElB+R,EAAOxH,KAAK9H,GAGhB,OAAOsP,GC5CLwgK,GAAch2K,OAAOD,UAgBVgkL,OAPf,SAAqBzmL,GACnB,IAAImgL,EAAOngL,GAASA,EAAM4C,YAG1B,OAAO5C,KAFqB,mBAARmgL,GAAsBA,EAAK19K,WAAci2K,KCEhDd,OANf,SAAiBppJ,EAAMmyG,GACrB,OAAO,SAAS3xG,GACd,OAAOR,EAAKmyG,EAAU3xG,MCLXwrJ,GAFE5C,GAAQl1K,OAAO0D,KAAM1D,QCIlCmD,GAHcnD,OAAOD,UAGQoD,eAsBlB2gL,OAbf,SAAkB/9K,GAChB,IAAKg+K,GAAYh+K,GACf,OAAO+xK,GAAW/xK,GAEpB,IAAIyP,EAAS,GACb,IAAK,IAAItP,KAAOlG,OAAO+F,GACjB5C,GAAeP,KAAKmD,EAAQG,IAAe,eAAPA,GACtCsP,EAAOxH,KAAK9H,GAGhB,OAAOsP,GCMMpS,OAJf,SAAqB9F,GACnB,OAAgB,MAATA,GAAiBoyL,GAASpyL,EAAMmG,UAAYu8K,EAAW1iL,ICOjDoG,OAJf,SAAcqC,GACZ,OAAO3C,GAAY2C,GAAU00K,GAAc10K,GAAU+9K,GAAS/9K,ICjBjDi2K,OAJf,SAAoBj2K,EAAQ8oB,GAC1B,OAAO9oB,GAAUk2K,GAAWptJ,EAAQnrB,GAAKmrB,GAAS9oB,ICMrCk+K,OAVf,SAAsBl+K,GACpB,IAAIyP,EAAS,GACb,GAAc,MAAVzP,EACF,IAAK,IAAIG,KAAOlG,OAAO+F,GACrByP,EAAOxH,KAAK9H,GAGhB,OAAOsP,GCRLrS,GAHcnD,OAAOD,UAGQoD,eAwBlB6gL,OAff,SAAoBj+K,GAClB,IAAKwzK,EAASxzK,GACZ,OAAOk+K,GAAal+K,GAEtB,IAAIm+K,EAAUH,GAAYh+K,GACtByP,EAAS,GAEb,IAAK,IAAItP,KAAOH,GACD,eAAPG,IAAyBg+K,GAAY/gL,GAAeP,KAAKmD,EAAQG,KACrEsP,EAAOxH,KAAK9H,GAGhB,OAAOsP,GCEM6nK,OAJf,SAAgBt3K,GACd,OAAO3C,GAAY2C,GAAU00K,GAAc10K,GAAQ,GAAQi+K,GAAWj+K,ICZzDu3K,OAJf,SAAsBv3K,EAAQ8oB,GAC5B,OAAO9oB,GAAUk2K,GAAWptJ,EAAQwuJ,GAAOxuJ,GAAS9oB,I,WCMvCu1K,OAXf,SAAmBzsJ,EAAQppB,GACzB,IAAI1H,GAAS,EACT0F,EAASorB,EAAOprB,OAGpB,IADAgC,IAAUA,EAAQpC,MAAMI,MACf1F,EAAQ0F,GACfgC,EAAM1H,GAAS8wB,EAAO9wB,GAExB,OAAO0H,GCQMgtK,OAff,SAAqBhtK,EAAOuG,GAM1B,IALA,IAAIjO,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnCivK,EAAW,EACXl9J,EAAS,KAEJzX,EAAQ0F,GAAQ,CACvB,IAAInG,EAAQmI,EAAM1H,GACdiO,EAAU1O,EAAOS,EAAO0H,KAC1B+P,EAAOk9J,KAAcp1K,GAGzB,OAAOkY,GCCM+5K,OAJf,WACE,MAAO,ICZLxmL,GAHc/I,OAAOD,UAGcgJ,qBAGnC0uK,GAAmBz3K,OAAOkgB,sBAmBfq9J,GAVG9F,GAA+B,SAAS1xK,GACxD,OAAc,MAAVA,EACK,IAETA,EAAS/F,OAAO+F,GACT0sK,GAAYgF,GAAiB1xK,IAAS,SAASg4K,GACpD,OAAOh1K,GAAqBnG,KAAKmD,EAAQg4K,QANRwR,GCJtB/R,OAJf,SAAqB3uJ,EAAQ9oB,GAC3B,OAAOk2K,GAAWptJ,EAAQ0uJ,GAAW1uJ,GAAS9oB,ICOjCslE,OAXf,SAAmB5lE,EAAOsH,GAKxB,IAJA,IAAIhP,GAAS,EACT0F,EAASsJ,EAAOtJ,OAChBiM,EAASjK,EAAMhC,SAEV1F,EAAQ0F,GACfgC,EAAMiK,EAAS3R,GAASgP,EAAOhP,GAEjC,OAAO0H,GCXMmxK,GAFI1B,GAAQl1K,OAAO2qB,eAAgB3qB,QCqBnCm9K,GAlBQn9K,OAAOkgB,sBASqB,SAASna,GAE1D,IADA,IAAIyP,EAAS,GACNzP,GACLslE,GAAU71D,EAAQ+nK,GAAWx3K,IAC7BA,EAAS6wK,GAAa7wK,GAExB,OAAOyP,GAN8B+5K,GCAxBnS,OAJf,SAAuBvuJ,EAAQ9oB,GAC7B,OAAOk2K,GAAWptJ,EAAQsuJ,GAAatuJ,GAAS9oB,ICOnCq6K,OALf,SAAwBr6K,EAAQs6K,EAAUC,GACxC,IAAI9qK,EAAS6qK,EAASt6K,GACtB,OAAOzC,GAAQyC,GAAUyP,EAAS61D,GAAU71D,EAAQ8qK,EAAYv6K,KCDnDq4K,OAJf,SAAoBr4K,GAClB,OAAOq6K,GAAer6K,EAAQrC,GAAM65K,KCIvBY,OAJf,SAAsBp4K,GACpB,OAAOq6K,GAAer6K,EAAQs3K,GAAQF,KCPzB9E,GAFAlB,EAAUh+J,IAAM,YCEhB0nC,GAFDs2H,EAAUh+J,IAAM,WCEf1Y,GAFL02K,EAAUh+J,IAAM,OCEXlP,GAFDktK,EAAUh+J,IAAM,WCK1B0xJ,GAAS,eAETG,GAAa,mBACbE,GAAS,eACTG,GAAa,mBAEbE,GAAc,oBAGdkN,GAAqBv1K,EAASm1K,IAC9BK,GAAgBx1K,EAASsR,GACzBmkK,GAAoBz1K,EAAS29C,IAC7B+3H,GAAgB11K,EAASzC,IACzBo4K,GAAoB31K,EAAS+G,IAS7B8yK,GAASwD,GAGRlI,IAAY0E,GAAO,IAAI1E,GAAS,IAAIsX,YAAY,MAAQpkB,IACxD/2J,GAAOuoK,GAAO,IAAIvoK,IAAQq2J,IAC1BhqH,IAAWk8H,GAAOl8H,GAAQC,YAAckqH,IACxCvqK,IAAOs8K,GAAO,IAAIt8K,KAAQyqK,IAC1BjhK,IAAW8yK,GAAO,IAAI9yK,KAAYohK,MACrC0R,GAAS,SAASz/K,GAChB,IAAIkY,EAAS+qK,EAAWjjL,GACpBmgL,EA/BQ,mBA+BDjoK,EAAsBlY,EAAM4C,iBAAcxC,EACjDkyL,EAAanS,EAAOv6K,EAASu6K,GAAQ,GAEzC,GAAImS,EACF,OAAQA,GACN,KAAKnX,GAAoB,OAAOlN,GAChC,KAAKmN,GAAe,OAAO7N,GAC3B,KAAK8N,GAAmB,OAAO3N,GAC/B,KAAK4N,GAAe,OAAO1N,GAC3B,KAAK2N,GAAmB,OAAOxN,GAGnC,OAAO71J,IAIIunK,UCrDX55K,GAHcnD,OAAOD,UAGQoD,eAqBlB05K,OAZf,SAAwBp3K,GACtB,IAAIhC,EAASgC,EAAMhC,OACf+R,EAAS,IAAI/P,EAAMvF,YAAYuD,GAOnC,OAJIA,GAA6B,iBAAZgC,EAAM,IAAkBtC,GAAeP,KAAK6C,EAAO,WACtE+P,EAAOzX,MAAQ0H,EAAM1H,MACrByX,EAAO6wG,MAAQ5gH,EAAM4gH,OAEhB7wG,GCjBM4hJ,GAFEj+I,IAAKi+I,WCYPsmB,OANf,SAA0ByL,GACxB,IAAI3zK,EAAS,IAAI2zK,EAAYjpL,YAAYipL,EAAYrhB,YAErD,OADA,IAAI1Q,GAAW5hJ,GAAQlM,IAAI,IAAI8tJ,GAAW+xB,IACnC3zK,GCGMooK,OALf,SAAuBD,EAAUjB,GAC/B,IAAI5nB,EAAS4nB,EAASgB,GAAiBC,EAAS7oB,QAAU6oB,EAAS7oB,OACnE,OAAO,IAAI6oB,EAASz9K,YAAY40J,EAAQ6oB,EAAS9gB,WAAY8gB,EAAS7V,aCXpE2F,GAAU,OAeCqQ,OANf,SAAqB5wB,GACnB,IAAI13I,EAAS,IAAI03I,EAAOhtJ,YAAYgtJ,EAAOr+H,OAAQ4+I,GAAQ9f,KAAKT,IAEhE,OADA13I,EAAOo4I,UAAYV,EAAOU,UACnBp4I,GCVLsjK,GAAcx3K,EAASA,EAAOvB,eAAYrC,EAC1Cq7K,GAAgBD,GAAcA,GAAYzxK,aAAU3J,EAazC8mzB,OAJf,SAAqBzmoB,GACnB,OAAOhF,GAAgB/4K,OAAO+4K,GAAcn2K,KAAKm7K,IAAW,ICC/CF,OALf,SAAyBjjE,EAAY8hE,GACnC,IAAI5nB,EAAS4nB,EAASgB,GAAiB9iE,EAAWk6C,QAAUl6C,EAAWk6C,OACvE,OAAO,IAAIl6C,EAAW16G,YAAY40J,EAAQl6C,EAAWiiD,WAAYjiD,EAAWn3G,SCgE/Du6K,OApCf,SAAwBj4K,EAAQ+2K,EAAKJ,GACnC,IAAIe,EAAO13K,EAAO7F,YAClB,OAAQ48K,GACN,IA3BiB,uBA4Bf,OAAOY,GAAiB33K,GAE1B,IAvCU,mBAwCV,IAvCU,gBAwCR,OAAO,IAAI03K,GAAM13K,GAEnB,IAjCc,oBAkCZ,OAAO63K,GAAc73K,EAAQ22K,GAE/B,IAnCa,wBAmCI,IAlCJ,wBAmCb,IAlCU,qBAkCI,IAjCH,sBAiCkB,IAhClB,sBAiCX,IAhCW,sBAgCI,IA/BG,6BA+BmB,IA9BzB,uBA8ByC,IA7BzC,uBA8BV,OAAOmB,GAAgB93K,EAAQ22K,GAEjC,IAjDS,eA2DT,IAxDS,eAyDP,OAAO,IAAIe,EARb,IAnDY,kBAoDZ,IAjDY,kBAkDV,OAAO,IAAIA,EAAK13K,GAElB,IAtDY,kBAuDV,OAAO+3K,GAAY/3K,GAKrB,IAzDY,kBA0DV,OAAOy+yB,GAAYz+yB,KCrErB8wK,GAAe72K,OAAOC,OA0BXq5K,GAhBG,WAChB,SAASvzK,KACT,OAAO,SAAS2uE,GACd,IAAK6kG,EAAS7kG,GACZ,MAAO,GAET,GAAImiG,GACF,OAAOA,GAAaniG,GAEtB3uE,EAAOhG,UAAY20E,EACnB,IAAIl/D,EAAS,IAAIzP,EAEjB,OADAA,EAAOhG,eAAYrC,EACZ8X,GAZO,GCIH0nK,OANf,SAAyBn3K,GACvB,MAAqC,mBAAtBA,EAAO7F,aAA8B6jL,GAAYh+K,GAE5D,GADAuzK,GAAW1C,GAAa7wK,KCIf0+yB,OAJf,SAAmBnnzB,GACjB,OAAO47K,GAAa57K,IAVT,gBAUmBy/K,GAAOz/K,ICTnCu0K,GAAYP,MAAYA,KAAS5qK,MAqBtBA,GAFHmrK,GAAYuC,GAAUvC,IAAa4yoB,GCPhCC,OAJf,SAAmBpnzB,GACjB,OAAO47K,GAAa57K,IAVT,gBAUmBy/K,GAAOz/K,ICTnC00K,GAAYV,MAAYA,KAASlyJ,MAqBtBA,GAFH4yJ,GAAYoC,GAAUpC,IAAa0yoB,GCK3Cp6oB,GAAU,qBAKVK,GAAU,oBAIVI,GAAY,kBAoBZ0F,GAAgB,GACpBA,GAAcnG,IAAWmG,GA7BV,kBA8BfA,GAfqB,wBAeWA,GAdd,qBAelBA,GA9Bc,oBA8BWA,GA7BX,iBA8BdA,GAfiB,yBAeWA,GAdX,yBAejBA,GAdc,sBAcWA,GAbV,uBAcfA,GAbe,uBAaWA,GA5Bb,gBA6BbA,GA5BgB,mBA4BWA,GAAc1F,mBACzC0F,GA3BgB,mBA2BWA,GA1Bd,gBA2BbA,GA1BgB,mBA0BWA,GAzBX,mBA0BhBA,GAhBe,uBAgBWA,GAfJ,8BAgBtBA,GAfgB,wBAeWA,GAdX,yBAcsC,EACtDA,GArCe,kBAqCWA,GAAc9F,IACxC8F,GA5BiB,qBA4BW,EA8Fb8L,OA5Ef,SAASA,EAAUj/K,EAAOk/K,EAASC,EAAYv2K,EAAKH,EAAQgI,GAC1D,IAAIyH,EACAknK,EAnEgB,EAmEPF,EACTG,EAnEgB,EAmEPH,EACTI,EAnEmB,EAmEVJ,EAKb,GAHIC,IACFjnK,EAASzP,EAAS02K,EAAWn/K,EAAO4I,EAAKH,EAAQgI,GAAS0uK,EAAWn/K,SAExDI,IAAX8X,EACF,OAAOA,EAET,IAAK+jK,EAASj8K,GACZ,OAAOA,EAET,IAAIq9K,EAAQr3K,GAAQhG,GACpB,GAAIq9K,GAEF,GADAnlK,EAASqnK,GAAev/K,IACnBo/K,EACH,OAAOpB,GAAUh+K,EAAOkY,OAErB,CACL,IAAIsnK,EAAMC,GAAOz/K,GACb0/K,EAASF,GAAOnS,IA7EX,8BA6EsBmS,EAE/B,GAAInF,aAASr6K,GACX,OAAO2/K,aAAY3/K,EAAOo/K,GAE5B,GAAII,GAAO/R,IAAa+R,GAAOxS,IAAY0S,IAAWj3K,GAEpD,GADAyP,EAAUmnK,GAAUK,EAAU,GAAKE,GAAgB5/K,IAC9Co/K,EACH,OAAOC,EACHS,GAAc9/K,EAAOggL,GAAa9nK,EAAQlY,IAC1CkgL,GAAYlgL,EAAO0+K,GAAWxmK,EAAQlY,QAEvC,CACL,IAAKmzK,GAAcqM,GACjB,OAAO/2K,EAASzI,EAAQ,GAE1BkY,EAASwoK,GAAe1gL,EAAOw/K,EAAKJ,IAIxC3uK,IAAUA,EAAQ,IAAI0Q,IACtB,IAAIw/J,EAAUlwK,EAAMpI,IAAIrI,GACxB,GAAI2gL,EACF,OAAOA,EAETlwK,EAAMzE,IAAIhM,EAAOkY,GAEb4J,GAAM9hB,GACRA,EAAMgR,SAAQ,SAAS4vK,GACrB1oK,EAAO+K,IAAIg8J,EAAU2B,EAAU1B,EAASC,EAAYyB,EAAU5gL,EAAOyQ,OAE9DrH,GAAMpJ,IACfA,EAAMgR,SAAQ,SAAS4vK,EAAUh4K,GAC/BsP,EAAOlM,IAAIpD,EAAKq2K,EAAU2B,EAAU1B,EAASC,EAAYv2K,EAAK5I,EAAOyQ,OAIzE,IAII+9B,EAAQ6uI,OAAQj9K,GAJLk/K,EACVD,EAASwB,GAAeC,GACxBzB,EAASU,GAAS35K,IAEkBpG,GASzC,OARAg1K,GAAUxmI,GAASxuC,GAAO,SAAS4gL,EAAUh4K,GACvC4lC,IAEFoyI,EAAW5gL,EADX4I,EAAMg4K,IAIRvC,GAAYnmK,EAAQtP,EAAKq2K,EAAU2B,EAAU1B,EAASC,EAAYv2K,EAAK5I,EAAOyQ,OAEzEyH,GC/HM4mC,OAJf,SAAe9+C,GACb,OAAOi/K,GAAUj/K,EA7BM,ICiBVw1K,OAXf,SAAkBrtK,EAAO4sK,GAKvB,IAJA,IAAIt0K,GAAS,EACT0F,EAAkB,MAATgC,EAAgB,EAAIA,EAAMhC,OACnC+R,EAASnS,MAAMI,KAEV1F,EAAQ0F,GACf+R,EAAOzX,GAASs0K,EAAS5sK,EAAM1H,GAAQA,EAAO0H,GAEhD,OAAO+P,GCWM+pK,OALf,SAAkBjiL,GAChB,MAAuB,iBAATA,GACX47K,GAAa57K,IArBF,mBAqBYijL,EAAWjjL,ICwBvC,SAAS42C,GAAQpoB,EAAM6nK,GACrB,GAAmB,mBAAR7nK,GAAmC,MAAZ6nK,GAAuC,mBAAZA,EAC3D,MAAM,IAAI1vL,UAhDQ,uBAkDpB,IAAI2vL,EAAW,SAAXA,IACF,IAAIhnK,EAAOtnB,UACPY,EAAMytL,EAAWA,EAAS9pL,MAAMjI,KAAMgrB,GAAQA,EAAK,GACnDjoB,EAAQivL,EAASjvL,MAErB,GAAIA,EAAMkB,IAAIK,GACZ,OAAOvB,EAAMgB,IAAIO,GAEnB,IAAIsP,EAASsW,EAAKjiB,MAAMjI,KAAMgrB,GAE9B,OADAgnK,EAASjvL,MAAQA,EAAM2E,IAAIpD,EAAKsP,IAAW7Q,EACpC6Q,GAGT,OADAo+K,EAASjvL,MAAQ,IAAKuvC,GAAQ2/I,OAASvZ,IAChCsZ,EAIT1/I,GAAQ2/I,MAAQvZ,GAEDpmI,UC/CAy8I,ICtBX9jB,GAAa,mGAGbU,GAAe,WAoBJyb,GDbf,SAAuBl9J,GACrB,IAAItW,EAAS0+B,GAAQpoB,GAAM,SAAS5lB,GAIlC,OAfmB,MAYfvB,EAAMhH,MACRgH,EAAMmQ,QAED5O,KAGLvB,EAAQ6Q,EAAO7Q,MACnB,OAAO6Q,ECPUm7K,EAAc,SAASxoL,GACxC,IAAIqN,EAAS,GAOb,OAN6B,KAAzBrN,EAAO4B,WAAW,IACpByL,EAAOxH,KAAK,IAEd7F,EAAOqyE,QAAQqyF,IAAY,SAAS18H,EAAOisI,EAAQwU,EAAOC,GACxDr7K,EAAOxH,KAAK4iL,EAAQC,EAAUr2G,QAAQ+yF,GAAc,MAAS6O,GAAUjsI,MAElE36B,KCHM2qK,OARf,SAAe7iL,GACb,GAAoB,iBAATA,GAAqBiiL,GAASjiL,GACvC,OAAOA,EAET,IAAIkY,EAAUlY,EAAQ,GACtB,MAAkB,KAAVkY,GAAkB,EAAIlY,IAdjB,SAcwC,KAAOkY,GCR1DsjK,GAAcx3K,EAASA,EAAOvB,eAAYrC,EAC1Cs7K,GAAiBF,GAAcA,GAAYj2K,cAAWnF,EA0B3CwqL,OAhBf,SAASA,EAAa5qL,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIgG,GAAQhG,GAEV,OAAOw1K,GAASx1K,EAAO4qL,GAAgB,GAEzC,GAAI3I,GAASjiL,GACX,OAAO07K,GAAiBA,GAAep2K,KAAKtF,GAAS,GAEvD,IAAIkY,EAAUlY,EAAQ,GACtB,MAAkB,KAAVkY,GAAkB,EAAIlY,IA3BjB,SA2BwC,KAAOkY,GCN/C3S,OAJf,SAAkBvF,GAChB,OAAgB,MAATA,EAAgB,GAAK4qL,GAAa5qL,ICQ5Bg/G,OAPf,SAAgBh/G,GACd,OAAIgG,GAAQhG,GACHw1K,GAASx1K,EAAO6iL,IAElBZ,GAASjiL,GAAS,CAACA,GAASg+K,GAAU0N,GAAanmL,GAASvF,M,yCCDtDk+L,OAJf,SAAmBl+L,GACjB,OAAOi/K,GAAUj/K,EAAOo4L,I,0jBClBb1V,GAAa,SAACt3K,G,MAAD,oBACjBA,GAGI6wK,GAAW,SAAC7wK,G,OACvBA,UADsB,kBACCA,GAGZlF,GAAY,SAACkF,G,OACxB+H,OAAO9R,WAAW4E,OAAlBkN,OADuB,GAIZ+jL,GAAW,SAAC9rL,G,MAAD,oBACtB1I,mCAOWs2Q,GAAkB,SAACpuO,G,OAAD,IAC7B7B,qBAGW49lB,GAAY,SAAC3moB,G,OACxBi8K,OAAmByG,GAAW1iL,EADP,OAiCzB,SAAgBklB,GACd9Z,EACAxC,EACAojyB,EACAjytB,kBAAY,G,QAENs0C,EAAOrP,GAAb,GACO5zG,GAAO2uE,EAAIs0C,EAAlB,QACEjjH,EAAMA,EAAIijH,EAAKt0C,M,YAEV3uE,QAAP,EA2BF,SAAgBoJ,GAAMpJ,EAAUijH,EAAcruH,G,QACxComJ,EAAWtnG,GAAf,GACIuowB,EAAJ,EACI//yB,EAAJ,EACIggzB,EAAYtosB,GAAhB,GAEO13G,EAAIggzB,SAAX,EAAiChgzB,IAAK,C,IAC9BuqvB,EAAsBy1D,EAA5B,GACIC,EAAkBriyB,GAAM9Z,EAAKk8yB,UAAmBhgzB,EAApD,I,GAEA,EACE+/yB,EAASA,KAAsBvowB,GAA/BuowB,OACK,C,IACCG,EAAmBF,EAAUhgzB,EAAnC,GACA+/yB,EAASA,KACPnhzB,OAAuBD,WAAvBC,KADFmhzB,I,OAMC//yB,QAAD,GAAyBggzB,EAAzB,MAAJ,EACE,QAGF,IAAItnzB,SACKqnzB,EAAOC,EAAd,IAEAD,EAAOC,EAAPD,MAKE//yB,YAAJ,IAAetH,UACNomJ,EAAIkhqB,EAAX,IAGF,GAUF,SAAgBG,GACdh/yB,EACAzI,EACAojV,EACA/1N,QADA+1N,UAAe,IAAIz2U,cACnB0gH,UAAgB,I,cAEF3qH,YAAd,kBAAmC,C,IAA1B+B,EAAC,EAAL,GACG8V,EAAM9R,EAAZ,GACIwzK,GAAJ,GACOmnK,MAAL,KACEA,YAIA/1N,KAActnH,oBAAdsnH,GACAo6rB,GAAsBltyB,EAAKva,EAAOojV,EAAS/1N,EAA3Co6rB,KAGFp6rB,O,OAIJ,ECrKF,IAAMq6rB,GAAuB3+wB,wBAA7B,IACa4+wB,GAAiBD,GAAvB,SACME,GAAiBF,GAAvB,SAEP,SAAgBG,K,IACRrnD,EAASz3tB,qBAAf,I,OAEA,oBAKA,EC6BF,SAAS++wB,GAAT,K,OAIU/ykB,EAAR,M,IACE,a,aACE,GAAmBtlO,OAAQslO,EAAIvpM,U,IACjC,c,aACE,GAAmBm5N,QAAS5vB,EAAIvpM,U,IAClC,a,aACE,GAAmB6lH,OAAQ0jF,EAAIvpM,U,IACjC,a,aACE,GAAmBu+D,OAAQgrI,EAAIvpM,U,IACjC,mB,aACE,GAAmB4mwB,aAAcr9jB,EAAIvpM,U,IACvC,mB,aACE,GAAmBqtZ,aAAc9jN,EAAIvpM,U,IACvC,kB,aACE,GAEE/7B,OAAQ+E,GAAM82B,EAAD,OAAeypM,UAAf,MAAkCA,UAAlC,S,IAEjB,oB,aACE,GAEE4vB,QAASnwP,GAAM82B,EAAD,QAAgBypM,UAAhB,MAAmCA,UAAnC,S,IAElB,kB,aACE,GAEE1jF,OAAQ78I,GAAM82B,EAAD,OAAeypM,UAAf,MAAkCA,UAAlC,S,IAEjB,a,IACA,mB,aACE,EAAsBA,EAAtB,S,IACF,iB,aACE,GAEE4vB,QAAS8ijB,GACPn8wB,EAD4B,QAFhC,GAME8mwB,cANF,EAOE2V,YAAaz8wB,cAAoB,I,IAErC,iB,IAKA,iB,aACE,GAEE8mwB,cAAc,I,eAGhB,GAKN,IAAM4V,GAAN,GACMC,GAAN,GAUA,SAAgBvnD,M,QACdwnD,4BAAmBA,GAAA,E,IACnBC,0BAAiBA,GAAA,EACjBC,mB,IACAr8e,8BAAqBA,GAAA,EACrBnL,aACGh4S,+FAEG4lB,EAAQ,GAAH,CAAK05wB,iBAAL,EAAuBC,eAAvB,EAAuCvnf,YAAlD,GACMh+M,EAAgB75E,iBAAayF,EAAnC,eACM65wB,EAAgBt/wB,iBAAayF,iBAAnC,IACM85wB,EAAiBv/wB,iBAAayF,kBAApC,IACMgrtB,EAAgBzwtB,iBAAayF,EAAnC,eACM2U,EAAYpa,kBAAlB,GACMw/wB,EAAgBx/wB,iBAAtB,IACAA,qBAAgB,W,IAOb,CAPHA,IASAA,qBAAgB,W,OACdoa,aAEO,WACLA,gBAJJpa,I,MAQ0B,wBAET,CACft5B,OAAQ++B,EADO,cAEf6iH,OAAQ7iH,iBAFO,GAGfm2N,QAASn2N,kBAHM,GAIfu7D,OAAQv7D,EAJO,cAKf4jwB,cALe,EAMfv5W,cANe,EAOfkvX,YAAa,IATRz8wB,OAAO2D,OAYRu5wB,EAAqB,uBACzB,c,OACS,IAAIjlwB,SAAQ,c,IACXklwB,EAAuBj6wB,aAA7B,GACA,MAAIi6wB,EAEFjlwB,MACSmjlB,GAAJ,GACJ8hL,QACC,SAAAp3pB,GACE7tG,EAAQ6tG,GAAR7tG,OAEF,SAAAklwB,GAQEjuuB,QAIJj3B,UAIN,CAAChV,EA5BH,WAkCMm6wB,EAAsB,uBAC1B,c,OACS,IAAIplwB,SAAQ,c,IACXqlwB,EAAmBp6wB,EAAzB,iBACMq6wB,EAASnmoB,MACXkmoB,EADWlmoB,GAAf,EAGIp8B,EACF60G,GAAS0tjB,EAAT1tjB,WACI0tjB,eADJ1tjB,GA8rBV,SACE1rP,EACAo5yB,EACAz8e,EACA5+T,QADA4+T,WAAgB,QAChB5+T,UAAe,I,IAEXs7yB,EAAJ,G,IACK,IAAL,O,GACMr5yB,iBAAJ,GAA8B,C,IACtB7G,EAAMuK,OAAZ,GACA21yB,KAAoBr5yB,UAAqBA,EAArBA,QAApBq5yB,E,OAGGD,EAAOz8e,EAAO,eAAd,cAAyD,CAC9D28e,YAD8D,EAE9Dv7yB,QAASA,IA3sBCw7yB,CAAkBv5yB,EAHxB,GAIA62I,QACE,WACE9iG,SAEF,YAKE,oBAAI9N,OACF8N,EAiqBd,SAAwCylwB,G,IAClC53pB,EAAJ,G,GACA,IAAI43pB,e,OACKz0yB,GAAM68I,EAAQ43pB,EAAT,KAAwBA,EAApC,S,MAEcA,EAAhB,6B,IAAA,6BAAgC,C,wFAAvBvzwB,EAAuB,EACxB27G,EAAe37G,EAArB,QACE27G,EAAS78I,GAAM68I,EAAQ37G,EAAT,KAAmBA,EAAjC27G,U,OAGJ,EA3qBoB63pB,CAAR1lwB,IAUAi3B,aAMV,CAACjsC,EArCH,mBAwCM26wB,EAAgC,uBACpC,c,OACS,IAAI5lwB,SAAQ,SAAAC,G,OACjBA,EAAQ+kwB,sBADgB,SAF9B,IASMa,EAA2B,uBAC/B,Y,IACQC,EAAoC3mzB,OAAA,KACxC6lzB,EADwC,iBAEjC,SAAAvtuB,G,OAAK0nG,GAAW6loB,aAAf,aAGJe,EACJD,EAAA,SACIA,EAAA,KAA4B,SAAAruuB,G,OAC1BmuuB,EAA8BnuuB,EAAG91D,GAAMzV,EADZ,OAG7B,CAAC8zC,gBALP,oC,OAOOA,QAAA,aAAmC,Y,OACxCgmwB,EAAA,QAAuB,gB,MACrB,oCAAIlymB,GAGJ,IACEz7L,EAAOpH,GAAMoH,EAAMytyB,EAAP,GAAZztyB,IAHA,IAHoC,SAY5C,CA1BF,IA8BM4tyB,EAAoB,uBACxB,Y,OACSjmwB,QAAA,IAAY,CACjB6lwB,EADiB,GAEjB56wB,mBAAyBm6wB,EAAzBn6wB,GAFiB,GAGjBA,WAAiBg6wB,EAAjBh6wB,GAHK,WAIC,Y,IAAEk3rB,OAAa+jF,OAAcC,O,OACZ,QACrB,CAAChkF,EAAa+jF,EADO,GAErB,CAAEE,qBAKR,CACEn7wB,EADF,SAEEA,EAFF,qBAdF,IA8BMo7wB,EAA8B33b,IAClC,Y,YAACxiX,UAAiB67B,EAAM77B,QACfo6yB,oCAAyB,GAAD,aAAc,W,OACpCL,EAAA,SAA+B,SAAAM,G,OAC9B3mwB,EAAN,SACElU,EAAS,CAAEzqC,KAAF,aAAsBgnC,QAASs+wB,IAE1C,UAIN,CAACN,EAAmBl+wB,EAXtB,SAeMy+wB,EAA+B93b,IACnC,Y,YAACxiX,UAAiB67B,EAAM77B,QACtBw/B,EAAS,CAAEzqC,KAAF,mBAA4BgnC,SAAS,IACvCg+wB,EAAA,SAA+B,SAAAM,G,OAC9B3mwB,EAAN,UACElU,EAAS,CAAEzqC,KAAF,mBAA4BgnC,SAAS,IACzCwzJ,IAAQ1zJ,EAAD,OAAZ,IACE2D,EAAS,CAAEzqC,KAAF,aAAsBgnC,QAASs+wB,KAG5C,OAGJ,CAACx+wB,EAAD,OAAeA,EAAf,OAbF,IAgBMwghB,EAAY,uBAChB,Y,IACQr8iB,EACJsf,GAAaA,EAAbA,OACIA,EADJA,OAEI6zF,EAHN,QAIMyuC,EACJtiI,GAAaA,EAAbA,OACIA,EADJA,OAEIs5xB,UACAA,EADAA,QAEA75wB,iBALN,GAMMm2N,EACJ51O,GAAaA,EAAbA,QACIA,EADJA,QAEIu5xB,UACAA,EADAA,QAEA95wB,kBALN,GAMMu7D,EACJh7E,GAAaA,EAAbA,OACIA,EADJA,OAEIyquB,UACAA,EADAA,QAEAhrtB,EALN,cAMAo0E,YACAylsB,YACAC,YACA9uD,YAEAvqtB,EAAS,CACPzqC,KADO,aAEPgnC,QAAS,CACP4mwB,eAAc,KAAiBrjxB,EADxB,aAEPsiI,OAFO,EAGPszG,QAHO,EAIP56J,OAJO,EAKPt6F,OALO,EAMPopb,eAAc,KAAiB9pa,EANxB,aAOPg5xB,YACE,GACEh5xB,EADF,+BAEOA,EAAP,YACIA,EAHJ,YAII,OAIZ,CAACyf,EAAD,cAAsBA,EAAtB,cAA2CA,EA/C7C,iBAkDAzF,qBAAgB,WAEZgjS,QACA5oR,YACC67I,IAAQp8E,EAAD,QAAwBp0E,EAHlC,iBAKEo0E,UAAwBp0E,EAAxBo0E,cACAkpc,OAED,CAAC//O,EAAoBv9R,EAArB,cATHzF,I,IAWMihxB,EAAgB/3b,IACpB,Y,GAKMvvM,GAAW6loB,aAAf,UAAsD,C,IAC9CvozB,EAAQklB,GAAMomB,EAAD,OAAnB,GACM2+wB,EAAe1B,sBAArB,G,OACI5hL,GAAJ,IAEE13lB,EAAS,CAAEzqC,KAAF,mBAA4BgnC,SAAS,IACvCy+wB,EAAA,MACC,Y,OAAA,KADD,MAEC,YACJh7wB,EAAS,CACPzqC,KADO,kBAEPgnC,QAAS,CAAE2vN,MAAF,EAAen7P,MAAOyS,KAEjCw8B,EAAS,CAAEzqC,KAAF,mBAA4BgnC,SAAS,SAGlDyD,EAAS,CACPzqC,KADO,kBAEPgnC,QAAS,CACP2vN,MADO,EAEPn7P,MAAOiqzB,KAGJ1mwB,gBAAP,I,OAGKA,QAAP,YAGJ,CAACjY,EAnCH,SAsCM4jC,EAAgB,uBAAkB,c,IAAiBovC,aACvDiqsB,aAA8B,CAC5BjqsB,cAFJ,IAMM1uC,EAAkB,uBAAkB,mBACjC24uB,UAAP,KADF,IAIM2B,EAAaj4b,IACjB,Y,OACEhjV,EAAS,CAAEzqC,KAAF,cAAuBgnC,QAASm5N,IAClCwjjB,EACHyB,EAA4Bt+wB,EADX,QAEjBiY,QAFJ,YAIF,CAACqmwB,EAA6Bt+wB,EAA9B,OAPF,IAUM6+wB,EAAY,uBAAkB,YAClCl7wB,EAAS,CAAEzqC,KAAF,aAAsBgnC,QAAS6lH,MAD1C,IAIM8zkB,EAAYlzW,IAChB,Y,OACEhjV,EAAS,CAAEzqC,KAAF,aAAsBgnC,QAAS/7B,IACjCy4yB,EACH0B,EAA4Bt+wB,EADT,QAEnBiY,QAFJ,YAIF,CAACqmwB,EAA6Bt+wB,EAA9B,OAPF,IAUM8+wB,EAAgB,uBACpB,cACEn7wB,EAAS,CACPzqC,KADO,kBAEPgnC,QAAS,CAAE2vN,MAAF,EAASn7P,aAJxB,IAUMygwB,EAAgBxuY,IACpB,gB,YAA4Bo4b,WAA0B,GACpDp7wB,EAAS,CACPzqC,KADO,kBAEPgnC,QAAS,CACP2vN,MADO,EAEPn7P,WAGGkozB,KACH0B,EAA4Bp1yB,GAAM82B,EAAD,SAD9B48wB,IAEH3kwB,QAFJ,YAIF,CAACqmwB,EAA6Bt+wB,EAA9B,OAbF,IAgBMg/wB,EAAgB,uBACpB,c,IAME,EAFInvjB,EAAJ,EACI5gP,EAAJ,E,IAIK28K,GAAL,GAAiC,CAG1BqznB,EAAL,SACGA,Y,MAWEA,EAf0B,OAO7B/lzB,EAP6B,OAQ7BsO,EAR6B,OAS7ByyB,EAT6B,KAU7BvlC,EAV6B,QAW7BsgI,EAX6B,UAa7BhwF,GAb6B,uBAc7B20E,EAd6B,WAiB/Bk2I,EAAQqvjB,IAAwB13yB,GAAhCqoP,GAQA5gP,EAAM,eAAe8kC,KAAK76C,IACpB8mX,EAASruS,WAAV,GAA8Bv8B,YAD7B,GAEF,WAAWrB,KAAK76C,GAsa5B,SAA6B,EAA7B,K,GAMMmlqB,WAAJ,SAA2BA,E,QACzB,E,GAGF,E,OACS5jqB,iBACH04yB,SADG14yB,GAEH,CAFJ,G,IAIGA,cAAL,G,QACE,E,IAEItF,EAAQg+yB,UAAd,G,GACIh+yB,EAAJ,E,OACE,E,OAEKg+yB,oBAAoCA,QAAmBh+yB,EAA9D,IA3bUgqzB,CAAoBvlyB,GAAMomB,EAAD,OAAN,KADnB,GAEA,EA+ZZ,SAA2BgF,G,OAClBA,EAAA,QAAe,SAAAguP,G,OAAMA,EAAJ,YAAjB,KAAsC,SAAAA,G,OAAMA,EAAJ,SA/ZrClwE,CADA,GAJJ7zM,EASF,GAEEkmvB,EAActlgB,EAAdslgB,KAGJ,CAACA,EAAen1tB,EAjDlB,SAoDM85N,EAAe,uBACnB,Y,GAGMluE,GAAJ,G,OACS,SAAAzrD,G,OAAS6+qB,EAAc7+qB,EAAlB,IAEZ6+qB,OAGJ,CAVF,IAaMI,EAAkBz4b,IACtB,gB,YAEEttH,WAAmB,QACnB0ljB,WAA0B,GAE1Bp7wB,EAAS,CACPzqC,KADO,oBAEPgnC,QAAS,CACP2vN,MADO,EAEPn7P,MAAO2kQ,KAGJwjjB,KACHyB,EAA4Bt+wB,EADzB68wB,QAEH5kwB,QAFJ,YAIF,CAACqmwB,EAA6Bt+wB,EAA9B,OAjBF,IAoBMq/wB,EAAc,uBAClB,cACMj+yB,EAAJ,SACEA,Y,MAE8BA,EAAE4kB,OAA1Bxe,SAAMyyB,OACR41N,GADYkmf,YACJhznB,IAAcv7G,GAA5B,IAUA43yB,EAAgBvvjB,GAAhBuvjB,KAEF,CAlBF,IAqBMtjiB,EAAa,uBACjB,Y,GACMlwF,GAAJ,G,OACS,SAAAzrD,G,OAASk/qB,EAAYl/qB,EAAhB,IAEZk/qB,OAGJ,CARF,I,SAWA,KAKMjooB,GAAJ,GACEzzI,EAAS,CAAEzqC,KAAF,mBAA4BgnC,QAASo/wB,EAAUt/wB,KAExD2D,EAAS,CAAEzqC,KAAF,mBAA4BgnC,QAASo/wB,I,IAI5C5qC,EAAY,uBAAkB,YAClC/wuB,EAAS,CAAEzqC,KAAF,aAAsBgnC,QAASu+D,MAD1C,IAIMmjS,EAAgB,uBAAkB,YACtCj+V,EAAS,CAAEzqC,KAAF,mBAA4BgnC,QAAS4mwB,MADhD,IAIMyY,EAAoB,CACxB/+P,UADwB,EAGxBg/P,aAHwB,EAIxBd,cAJwB,EAKxBG,UALwB,EAMxBC,cANwB,EAOxBM,gBAPwB,EAQxBjqD,cARwB,EASxBuf,UATwB,EAUxB9yY,cAVwB,EAWxBg9a,WAXwB,EAYxB/kF,UAZwB,EAaxB4lF,kBAGIC,EAAgB/4b,IAAiB,W,OAC9BrxD,EAASt1R,EAAD,OAAf,KACC,CAACu/wB,EAAmBjqf,EAAUt1R,EAFjC,SAIMwtV,EAAa7G,IAAiB,W,OAClChjV,EAAS,CAAEzqC,KAAM,mBACVulzB,IAAA,MACL,Y,GACE,IAAwBrnzB,sB,OAEf6gD,QAAA,QAAgBynwB,KAAhB,MACC,WACE7nwB,EAAN,SACElU,EAAS,CAAEzqC,KAAM,sBAHhB,OAME,SAAAymzB,G,GACC9nwB,EAAN,Q,MACElU,EAAS,CAAEzqC,KAAM,mBACjB,KAGK2+C,EAAN,SAELlU,EAAS,CAAEzqC,KAAM,wBAMtB,CAACwmzB,EA1BJ,IA4BMrkf,EAAesrD,IACnB,YACMvlX,GAAKA,EAALA,gBAAyBg2K,GAAWh2K,EAAxC,iBACEA,mBAGEA,GAAKA,EAALA,iBAA0Bg2K,GAAWh2K,EAAzC,kBACEA,oBAsBFosX,MAEF,CA/BF,IAiCMje,EAAcoX,IAClB,SAAAvlX,G,GACMA,GAAKA,EAALA,gBAAyBg2K,GAAWh2K,EAAxC,iBACEA,mBAGEA,GAAKA,EAALA,iBAA0Bg2K,GAAWh2K,EAAzC,kBACEA,oBAGE8hC,EAAJ,QAAmB,C,IACX08wB,EAAwB18wB,UAC5BlD,EAD4BkD,OAA9B,GAKIm4lB,GAAJ,GACGukL,UAEDp/P,SAGFA,MAGJ,CAAC++P,EAAmBr8wB,EAApB,UAA8ClD,EAzBhD,SA4BM6/wB,EAAe,uBACnB,Y,MACS,CACLnrzB,MAAOklB,GAAMomB,EAAD,OADP,GAEL74B,MAAOyS,GAAMomB,EAAD,OAFP,GAGLq5N,UAAWz/O,GAAMomB,EAAD,QAHX,GAILg0sB,aAAcp6tB,GAAM09F,EAAD,QAJd,GAKL0lsB,iBAAkBpjyB,GAAMojyB,EAAD,QALlB,GAML8C,aAAclmyB,GAAMmjyB,EAAD,cAGvB,CAAC/8wB,EAAD,OAAeA,EAAf,QAA8BA,EAXhC,SAcM+/wB,EAAgB,uBACpB,Y,IACEv4yB,SACAtO,SACOmlqB,IAAP3pqB,MACI4J,IAAJ4yP,GACAv3I,aAEM+ie,EAAa9ikB,GAAMomB,EAAD,OAAxB,GAEM6vN,EAA8B,CAClCroP,KADkC,EAElC9S,MAFkC,EAGlC8/G,SAHkC,EAIlCkqB,OAAQo9I,G,MAGV,aAAI5iR,OACF,IAAImlqB,EACFxua,eAEAA,aACEp1P,oBAA8BiilB,UADhC7sV,IAGAA,WAEG,UAAI32P,GACT22P,UAAgB6sV,IAAhB7sV,EACAA,WACSvxP,cAAJ,IACLuxP,QAAcA,SAAdA,GACAA,eAEK,CAACA,EAAOgwjB,EAAf,MAEF,CAACA,EAAc/jiB,EAAYhiB,EAAc95N,EAnC3C,SAsCM87V,GAAQ,mBACZ,W,OAAOpoM,IAAQp8E,EAAD,QAAwBt3E,EAAtC,UACA,CAACA,EAFH,SAKMk9J,GAAU,mBACd,W,MAC4B,qBAAnB4/mB,EACHhhb,GACE97V,UADG,IACa5oC,YAAY4oC,EAAZ5oC,gBAChB0lzB,OAA4B1loB,GAA5B0loB,GACCA,EADDA,GAHN,EAMI98wB,UAPN,IAOsB5oC,YAAY4oC,EAAZ5oC,iBACtB,CAAC0lzB,EAAgBhhb,GAAO97V,EAAxB,OATF,I,OAYY,GAAH,MAEPs3E,cAAeA,EAFR,QAGPylsB,cAAeA,EAHR,QAIPC,eAAgBA,EAJT,QAKP9uD,cAAeA,EALR,QAMPpye,WANO,EAOPhiB,aAPO,EAQPy1G,YARO,EASPl0C,aATO,EAUPmlP,UAVO,EAWPq+P,UAXO,EAYPY,eAZO,EAaPL,gBAbO,EAcPjqD,cAdO,EAeP2pD,cAfO,EAgBPpqC,UAhBO,EAiBP9yY,cAjBO,EAkBPg9a,WAlBO,EAmBP/kF,UAnBO,EAoBPrsW,WApBO,EAqBPgyb,aArBO,EAsBPd,cAtBO,EAuBPxhnB,QAvBO,GAwBP4+L,MAxBO,GAyBPx3T,gBAzBO,EA0BPV,cA1BO,EA2BPm8uB,cA3BO,EA4BPlD,eA5BO,EA6BPD,qBAMJ,SAAgBoD,GAGd98wB,G,IACM+8wB,EAAY7qD,GAAlB,GACQ9irB,EAAgCpvC,EAAhCovC,UAAWhzC,EAAqB4D,EAArB5D,SAAU87F,EAAWl4F,EAAXk4F,O,OAE3B,4BAAgB1mI,MAAOurzB,GACpB3tuB,EACG70C,0BADM,GAEN29F,EACAA,EADM,GAEN97F,EACA83I,MACG93I,EADH83I,GAIGs2F,GAAD,GALM,KAMNjwO,gBADA,GAXV,MA8EF,SAAS4gxB,GAAWr4xB,EAApB,K,IACQ8gL,EAAc9gL,EAApB,Q,OAEAC,WAAe,c,GACb,qBAAW6gL,EAAP,GAAuC,C,IAEnCo5mB,GADN,IAAuBl7wB,SACeA,oBAAtC,GACA8hK,KAAiBo5mB,EACbtlO,IAAUnglB,oBAAD,KADe,GAA5BqsM,OAGS9hK,oBAAJ,GACL8hK,KAAiB8zY,IAAU50jB,EAAD,KAA1B8gL,IACK,IAAI9gL,cACT8gL,aAGJ,EAkCF,SAAS6/K,GAAT,K,IAIQlyX,EAAW,kBAAa,W,MACtB,IAAImM,MAAV,oD,OAGF68B,qBAAgB,WACdhpC,cADFgpC,eAKO,uBACL,W,IACQ5hC,EAAKpH,EAAX,Q,OACOoH,eAAP,aAEF,CALF,ICh4BF,SAAgBskzB,M,IACdntsB,aACAxrG,SACA4zH,WACA97F,aACIhhC,IAAJ4yP,GACA5+K,cACGpvC,iE,EAMCq5wB,KADCrnD,GAFOjwjB,EAAVjyF,SACkBotsB,EAAlB9C,iBACGpoD,uCAGLz3tB,qBAAgB,W,IAAhBA,IA8BAA,qBAAgB,W,OACdy3tB,kBAA2B,CACzBlipB,SAAUA,IAEL,WACLkipB,wBAED,CAACA,EAAQ1tvB,EAPZi2B,I,MAQsBy3tB,EAAA,kBAAuB1tvB,QAAvB,IAAfqoP,OAAOxwJ,OACRghtB,EAAY,CAAExwjB,MAAF,EAASp5I,KAAMy+oB,G,GAEjC,E,OACS95nB,EAAP,G,GAGEg8C,GAAJ,G,OACS93I,EAAS,GAAD,MAAiB+/D,U,GAGlC,EAAe,C,GAEb,kBAAW/sB,EAAwB,C,IACzB4zL,EAAsBhjO,EADG,SACZ5lB,EADY,mB,OAE1BmgB,8BAEHhpC,IAAKyxQ,GAFFzoO,KAAP,G,OAOKA,8BAEHoyN,MAFGpyN,EAEIg5E,KAAMy+oB,GAFVz3tB,GAAP,G,IAQI6ixB,EAAYhizB,GAAlB,Q,GAEA,kBAAWgizB,EAAwB,C,IACzBp6iB,EAAsBhjO,EADG,SACZ5lB,EADY,mB,OAE1BmgB,8BAEHhpC,IAAKyxQ,GAFFzoO,KAAP,G,OAOKA,qCAAP,G,SClLco6E,GACd0osB,G,IAEMxtpB,EAA2B,SAAC7vH,G,OAChC,iCACG,SAAAgytB,G,OACC,oBAMO,2CAAUhytB,GAAOgytB,OAAQA,SAIhCsrD,EACJD,eACAA,EADAA,MAECA,eAAoBA,cAFrBA,MADF,Y,OAQCxtpB,qBAIDA,qCAEOozG,KAAqB,EAA5B,G,ICmCWh0P,GAAS,SAACtV,EAAD,K,IACdq+I,EAAO,GAAH,OAAQr+I,GAAlB,I,OACAq+I,gBACA,GAQIulqB,G,uBAQJ,G,2BACE,UAOFC,iBAAmB,gB,MASb,EAAKx9wB,MAHP17B,SACAo1yB,qB,IACA1nD,OAAUuqD,mBAAgBD,iBAE5BC,GACE,Y,IACMkB,EAAsC,oBAAhBC,EAA6BA,EAAvD,EACIC,EACsB,oBAAjBC,EAA8BA,EADvC,E,aAGA,GAEE38yB,OAAQ+E,GACN+gQ,EADW,SAGXpuQ,EAAG+d,GAAMqwP,EAAD,OALZ,KAOElkH,OAAQ66pB,EACJ13yB,GACE+gQ,EADG,SAGH02iB,EAAa/myB,GAAMqwP,EAAD,OAJL,KAMfA,EAbN,OAcE5Q,QAASynjB,EACL53yB,GACE+gQ,EADG,UAGH42iB,EAAcjnyB,GAAMqwP,EAAD,QAJJ,KAMjBA,EAAU5Q,aAGlB,WACE,GACEmmjB,Q,EAMRp6yB,KAAO,Y,OACL,oBACE,Y,gBAAuBvI,GAAvB,IAAqC+1L,GAArC,QADF,GADK,I,EAOPs7E,WAAa,Y,OAAgB,W,OAAM,OAAN,K,EAE7Bk9c,KAAO,c,OACL,oBACE,Y,OA7Fc,SAACvutB,EAAD,K,IACZq+I,EAAO,GAAH,OAAQr+I,GAAlB,IACM8B,EAAIu8I,EAAV,G,OACAA,KAAeA,EAAfA,GACAA,OACA,EAwFsBkwkB,CAAKvutB,EAAO8xU,EAA9B,MADF,GADK,I,EAOPoye,WAAa,c,OAAoC,W,OAC/C,SAD+C,K,EAGjDx4gB,KAAO,c,OACL,oBAAsB,Y,OA9GN,SAAC1rS,EAAD,K,IACZq+I,EAAO,GAAH,OAAQr+I,GAAlB,IACMnI,EAAQwmJ,EAAd,G,OACAA,cACAA,gBACA,EAyG0CqtJ,CAAK1rS,EAAOmL,EAA9B,MAAtB,GADK,I,EAGP2gV,WAAa,c,OAA8B,W,OAAM,SAAN,K,EAE3Cx2U,OAAS,c,OACP,oBACE,Y,OAAkBA,GAAOtV,EAAO1H,EAAhC,MACA,Y,OAAkBgd,GAAOtV,EAAO1H,EAAhC,SACA,Y,OAAkBgd,GAAOtV,EAAO1H,EAAhC,U,EAGJ6rzB,aAAe,c,OAA+B,W,OAAM,WAAN,K,EAE9CpvuB,QAAU,c,OACR,oBACE,Y,OAvGiB,SAAC/0E,EAAD,K,IACfq+I,EAAO,GAAH,OAAQr+I,GAAlB,I,OACAq+I,OACA,EAoGsBtpE,CAAQ/0E,EAAO1H,EAAjC,MADF,GADQ,I,EAOVi5Q,cAAgB,c,OAA+B,W,OAC7C,YAD6C,K,EAG/C/7P,QAAU,Y,IACJxX,GAAJ,E,SACA,kBACE,Y,IACQgM,EAAMhK,EAAQ,CAACnI,GAAJ,UAAuB,CAAxC,G,OACImG,EAAJ,IACEA,EAASgM,EAAThM,QAEF,KAEF,Y,IACQgM,EAAMhK,EAAQ,CAAC,MAAJ,UAAsB,CAAvC,M,OACIhC,EAAJ,IACEA,EAASgM,EAAThM,QAEF,KAEF,Y,IACQgM,EAAMhK,EAAQ,CAAC,MAAJ,UAAsB,CAAvC,M,OACIhC,EAAJ,IACEA,EAASgM,EAAThM,QAEF,KAGJ,G,EAGFomzB,cAAgB,Y,OAAgB,W,OAAM,UAAN,K,EAwBhCC,aAAe,Y,OAAmB,W,OAAM,SAAN,K,EAqBlCrmX,UAAY,W,OAAM,W,OAAM,EAAN,Q,EAvKhB,OAAc,iBAAd,I,EACA,IAAW,cAAX,I,qCA2HF3yb,mB,IAEE,E,YACA,kBAEE,Y,IACQgzI,EAAOr+I,EAAQ,GAAH,UAAlB,G,OACA,IACE+P,EAASsuI,EAATtuI,IAEEwqK,GAAWl8B,EAAf,SACEA,cAEF,KAVJ,MAgBA,G,EAKF71I,e,IAEE,E,YACA,kBAEE,Y,IACQ0zL,EAAN,E,OACA,IACEnsL,EAASmsL,GAAOA,EAAPA,KAAkBA,EAA3BnsL,OAEF,KAPJ,MAaA,G,EAKFwuH,kB,IACQ+lrB,EAA6B,CACjC/7yB,KAAMpM,KAD2B,KAEjCqM,IAAKrM,KAF4B,IAGjCoytB,KAAMpytB,KAH2B,KAIjCuvS,KAAMvvS,KAJ2B,KAKjCmZ,OAAQnZ,KALyB,OAMjC44E,QAAS54E,KANwB,QAOjCqZ,QAASrZ,KAPwB,QAQjCkP,OAAQlP,KARyB,OASjCk1Q,WAAYl1Q,KATqB,WAUjC6hc,UAAW7hc,KAVsB,UAWjC+nzB,WAAY/nzB,KAXqB,WAYjC2vV,WAAY3vV,KAZqB,WAajCgozB,aAAchozB,KAbmB,aAcjCo1Q,cAAep1Q,KAdkB,cAejCiozB,cAAejozB,KAfkB,cAgBjCkozB,aAAclozB,KAAKkozB,c,EAajBlozB,KAAKkqC,MATPovC,cACA8oD,WACA97F,aACA93B,S,IACA0tvB,OAOIhytB,GANQ+hK,EAAVjyF,SACkBotsB,EAAlB9C,iBAKO,SAET7msB,KANK2qsB,sCAOL55yB,U,OAGK8qE,EACH70C,0BADY,GAEZ29F,EACGA,EADG,GAEJ97F,EACsB,oBAAbA,EACJA,EADH,GAEGouO,GAAD,GAHI,KAGyBjwO,gBAA7B,GAPV,M,GA3NuCA,aAIlCgjxB,gBAAe,CACpB7D,kBAAkB,GAkOtB,ICjTMyE,G,iGAGJC,kC,OAII1nyB,GAAM5gB,KAAKkqC,MAAMgytB,OAAZ,OAA2Bl8vB,KAAKkqC,MAArCtpB,QACEA,GAAMspB,SAAD,OAAsBlqC,KAAKkqC,MADlCtpB,OAEAA,GAAM5gB,KAAKkqC,MAAMgytB,OAAZ,QAA4Bl8vB,KAAKkqC,MAAtCtpB,QACEA,GAAMspB,SAAD,QAAuBlqC,KAAKkqC,MAHnCtpB,OAIAxiB,YAAY4B,KAAZ5B,gBAAmCA,eALrC,Q,EAaFgkI,kB,MAC+DpiI,KAAKkqC,MAA5DovC,cAAW4irB,WAAQ95nB,WAAQ97F,aAAU93B,SAAS8V,0DAE9C+mD,EAAQzqD,GAAMs7uB,EAAD,QAAnB,GACM/tvB,EAAQyS,GAAMs7uB,EAAD,OAAnB,G,OAEO,KACH95nB,EACEg8C,MAAqBh8C,EAArBg8C,GADI,KAEJ93I,EACE83I,MAAuB93I,EAAvB83I,GADM,KAEN9kG,EACE70C,4BADO,GALV,EAAP,M,GAzB2BA,aAqClB8jxB,GAAe1psB,GAArB,K,iBClDP,IAAIk7D,EAAc3+K,EAAQ,MACtB0+K,EAAkB1+K,EAAQ,KAsC9BF,EAAOC,QA1BP,SAAoB8xB,EAAQid,EAAO/lC,EAAQ02K,GACzC,IAAI4N,GAAStkL,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAIhI,GAAS,EACT0F,EAASqoC,EAAMroC,SAEV1F,EAAQ0F,GAAQ,CACvB,IAAIyC,EAAM4lC,EAAM/tC,GAEZ0T,EAAWgrK,EACXA,EAAW12K,EAAOG,GAAM2oB,EAAO3oB,GAAMA,EAAKH,EAAQ8oB,QAClDnxB,OAEaA,IAAb+T,IACFA,EAAWod,EAAO3oB,IAEhBmkL,EACF3O,EAAgB31K,EAAQG,EAAKuL,GAE7BkqK,EAAY51K,EAAQG,EAAKuL,GAG7B,OAAO1L,I,iBCpCT,IAAIw7K,EAAkBvkL,EAAQ,MAC1Bk8K,EAAel8K,EAAQ,KAGvBg5K,EAAch2K,OAAOD,UAGrBoD,EAAiB6yK,EAAY7yK,eAG7B4F,EAAuBitK,EAAYjtK,qBAoBnC8xK,EAAc0G,EAAgB,WAAa,OAAOj8K,UAApB,IAAsCi8K,EAAkB,SAASjkL,GACjG,OAAO47K,EAAa57K,IAAU6F,EAAeP,KAAKtF,EAAO,YACtDyL,EAAqBnG,KAAKtF,EAAO,WAGtCR,EAAOC,QAAU89K,G,iBCnCjB,gBAAI1hK,EAAOnc,EAAQ,KACf8yL,EAAY9yL,EAAQ,MAGpBk0K,EAA4Cn0K,IAAYA,EAAQkM,UAAYlM,EAG5Eo0K,EAAaD,GAAgC,iBAAVp0K,GAAsBA,IAAWA,EAAOmM,UAAYnM,EAMvF45K,EAHgBvF,GAAcA,EAAWp0K,UAAYm0K,EAG5B/3J,EAAKu9J,YAASh5K,EAsBvCi6K,GAnBiBjB,EAASA,EAAOiB,cAAWj6K,IAmBfoyL,EAEjChzL,EAAOC,QAAU46K,I,mDCnCjB56K,EAAQuhN,YAAa,EACrBvhN,EAAO,aAAc,EAErB,IAKI8oQ,EALa,SAAoB59N,EAAM73B,GACzC,IAAIg6yB,EAAgBnixB,EAAKuhoB,WAAW4gJ,cACpC,OAAOA,EAAgBA,EAAgB,IAAMh6yB,EAAOA,GAItDrT,EAAO,QAAc8oQ,G,gBCXrB,IAAItlF,EAAavjL,EAAQ,KACrBk8K,EAAel8K,EAAQ,KA2B3BF,EAAOC,QALP,SAAkBO,GAChB,MAAuB,iBAATA,GACX47K,EAAa57K,IArBF,mBAqBYijL,EAAWjjL,K,cCWvCR,EAAOC,QAJP,SAAYO,EAAOilB,GACjB,OAAOjlB,IAAUilB,GAAUjlB,IAAUA,GAASilB,IAAUA,I,gBCjC1D,IAAI81J,EAAWr7K,EAAQ,MACnBwX,EAAMxX,EAAQ,MACd6jD,EAAU7jD,EAAQ,MAClByD,EAAMzD,EAAQ,MACdiN,EAAUjN,EAAQ,MAClBujL,EAAavjL,EAAQ,KACrBkG,EAAWlG,EAAQ,MAGnB6tK,EAAS,eAETG,EAAa,mBACbE,EAAS,eACTG,EAAa,mBAEbE,EAAc,oBAGdkN,EAAqBv1K,EAASm1K,GAC9BK,EAAgBx1K,EAASsR,GACzBmkK,EAAoBz1K,EAAS29C,GAC7B+3H,EAAgB11K,EAASzC,GACzBo4K,EAAoB31K,EAAS+G,GAS7B8yK,EAASwD,GAGRlI,GAAY0E,EAAO,IAAI1E,EAAS,IAAIsX,YAAY,MAAQpkB,GACxD/2J,GAAOuoK,EAAO,IAAIvoK,IAAQq2J,GAC1BhqH,GAAWk8H,EAAOl8H,EAAQC,YAAckqH,GACxCvqK,GAAOs8K,EAAO,IAAIt8K,IAAQyqK,GAC1BjhK,GAAW8yK,EAAO,IAAI9yK,IAAYohK,KACrC0R,EAAS,SAASz/K,GAChB,IAAIkY,EAAS+qK,EAAWjjL,GACpBmgL,EA/BQ,mBA+BDjoK,EAAsBlY,EAAM4C,iBAAcxC,EACjDkyL,EAAanS,EAAOv6K,EAASu6K,GAAQ,GAEzC,GAAImS,EACF,OAAQA,GACN,KAAKnX,EAAoB,OAAOlN,EAChC,KAAKmN,EAAe,OAAO7N,EAC3B,KAAK8N,EAAmB,OAAO3N,EAC/B,KAAK4N,EAAe,OAAO1N,EAC3B,KAAK2N,EAAmB,OAAOxN,EAGnC,OAAO71J,IAIX1Y,EAAOC,QAAUggL,G,gBCzDjB,IAAItC,EAAgBz9K,EAAQ,MACxBgnL,EAAahnL,EAAQ,MACrBoG,EAAcpG,EAAQ,KA6B1BF,EAAOC,QAJP,SAAgBgJ,GACd,OAAO3C,EAAY2C,GAAU00K,EAAc10K,GAAQ,GAAQi+K,EAAWj+K,K,6BC5BxE,sF,cCAAjJ,EAAOC,QAAU,SAAUwZ,EAAQjZ,GACjC,MAAO,CACLoM,aAAuB,EAAT6M,GACd5M,eAAyB,EAAT4M,GAChB3M,WAAqB,EAAT2M,GACZjZ,MAAOA,K,cCLX,IAAIuF,EAAW,GAAGA,SAElB/F,EAAOC,QAAU,SAAUsmK,GACzB,OAAOxgK,EAASD,KAAKygK,GAAI3xJ,MAAM,GAAI,K,cCHrC5U,EAAOC,SAAU,G,cCAjBA,EAAQu7E,EAAI,GAAGvvE,sB,6BCCf,IAAIshzB,EAAMrtzB,EAAQ,KAARA,EAAwB,GAGlCA,EAAQ,KAARA,CAA0ByT,OAAQ,UAAU,SAAUylf,GACpDt0f,KAAK0ozB,GAAK75yB,OAAOylf,GACjBt0f,KAAKw0E,GAAK,KAET,WACD,IAEI2nN,EAFAx7B,EAAI3gQ,KAAK0ozB,GACTvszB,EAAQ6D,KAAKw0E,GAEjB,OAAIr4E,GAASwkQ,EAAE9+P,OAAe,CAAEnG,WAAOI,EAAWwE,MAAM,IACxD67R,EAAQsshB,EAAI9njB,EAAGxkQ,GACf6D,KAAKw0E,IAAM2nN,EAAMt6R,OACV,CAAEnG,MAAOygS,EAAO77R,MAAM,Q,6BCf/B,wEA+BIqozB,EA/BJ,6DASIrhZ,EAAMjpa,YAAOuqzB,eAKbl8iB,EAAoBC,cAEbJ,EAAgB,IAAI35P,IAC3BikC,EAAiB,CACnBmriB,mBAAmB,EACnBt1U,kBAAmBA,EACnB46J,IAAKA,EACLs7K,YAAa,KACbr2U,cAAeA,EACfC,eAAgB,MAEP22U,EAAgB1+iB,IAAMC,cAAcmS,GA6HhC+1N,IArHf,SAAwB1iO,GACtB,IAAI5D,EAAW4D,EAAM5D,SACjBuixB,EAAqB3+wB,EAAM4+wB,YAC3BA,OAAqC,IAAvBD,GAAwCA,EACtDE,EAAwB7+wB,EAAM83iB,kBAC9BA,OAA8C,IAA1B+mO,GAA2CA,EAC/DC,EAAe9rwB,YAAyBhT,EAAO,CAAC,WAAY,cAAe,sBAE3E++wB,EAAexkxB,IAAMgG,WAAW04iB,GAEhCj6kB,EAAU4gC,YAAS,GAAIm/wB,EAAc,CACvCjnO,kBAAmBA,GAClBgnO,GAoBH,IAAK9/yB,EAAQo+Z,IAAIt7X,QAAQ4hY,gBAAkBk7Y,GAAiC,qBAAXp6xB,OAAwB,CACvF,IAAKi6xB,EAAiB,CACpB,IAAI3ryB,EAAOgpB,SAAShpB,KACpB2ryB,EAAkB3ixB,SAASkjxB,cAAc,oBACzClsyB,EAAK8xZ,aAAa65Y,EAAiB3ryB,EAAKq7iB,YAG1CnvjB,EAAQo+Z,IAAMjpa,YAAO,CACnBivM,QAASs7mB,cAAYt7mB,QACrBsgO,eAAgB+6Y,IAIpB,OAAOlkxB,IAAMwB,cAAck9iB,EAAc/8iB,SAAU,CACjD1qC,MAAOwN,GACNo9B,K,6CC9EC6ixB,G,KAAoB1kxB,qBAAoB3oC,IAU/BqtzB,O,0ICVAhmrB,eAAQ,kBAAM,oC,wBCgBhBgnmB,EAAuB,wBAE9B36mB,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,MAuEjCkuuB,IAnEf,WACkB55rB,IACCl/E,wBACFyrO,cAEDj+N,YAAe,gBAArB/xB,EACM2lB,sBAAYoY,eAL1B,IAMA,EAA8CpL,mBAAS,MAAvD,mBAAO2qwB,EAAP,KAkCA,OAlCA,KAmCE,cAAC,IAAD,CACE/5rB,SAAU66mB,EACVv3S,YAAY,EAFd,SAkBE,cAAC+3O,EAAA,EAAD,CAAeC,YAAay+I,EAA5B,SACE,cAACC,EAAD,U,6BCrFR,mEAgCe,KACbC,0BACAC,yBACAC,wB,6BCnCF,yJAmJA,IAAM78wB,EAAkBkG,YAAyB,CAC/Cmub,eAAgBl2a,gBAkBHkqB,sBACbgG,aAhBgB,SAACC,GAAD,MAA+B,CAC/C3iE,KAAM,CACJgvS,UAAW,OACXjsO,MAAO,OACP2uD,UAAW,SACX5tD,SAAU,GAEZo/gB,SAAU,CACRx1f,MAAO/qB,EAAM+pC,QAAQyksB,eAEvBhgyB,QAAS,CACPu8E,MAAO/qB,EAAM+pC,QAAQsO,aAAer4C,EAAM+pC,QAAQsO,aAAer4C,EAAM+pC,QAAQE,QAAQqO,kBAMzF3U,kBAAQjyE,GA7BV,SAA4BjC,GAC1B,MAAO,CACLg/wB,eAAgB,SAACnoV,GAAD,OAAuC72b,EAAS,IAAIgJ,IAAoB,CAAC6tb,kBACzFooV,YAAa,eAAClltB,EAAD,uDAAS,EAAT,OAAe,kBAAM/5D,EAAS,IAAIi4jB,IAASl+f,MACxD/5D,eAuBWsqC,EA9HsC,SAAC/qC,GACpD,IACEgvC,EAUEhvC,EAVFgvC,QACA0wuB,EASE1/wB,EATF0/wB,YACAr3rB,EAQEroF,EARFqoF,WACAC,EAOEtoF,EAPFsoF,gBACAlsF,EAME4D,EANF5D,SALF,EAWI4D,EALFokS,iBANF,MAMc,cAAC,WAAD,IANd,EAOEq7e,EAIEz/wB,EAJFy/wB,eACAroD,EAGEp3tB,EAHFo3tB,aACArgS,EAEE/2b,EAFF+2b,eACAxuW,EACEvoF,EADFuoF,eAGIi/E,EAAauvR,EAAel9d,IAAI,OAIhC8lzB,EACJv7e,EAAUpuU,OAASukC,WACf6pS,EAAUpkS,MAAM5D,SAChBgoS,EAEAw7e,EAAiBrlxB,WAAez7B,IAAI6gzB,GAAmB,SAAC92rB,GAAD,OAActuF,iBAAqBsuF,GAC9FtuF,eAAmBsuF,EAAiB,CAClCR,aACAC,kBACAC,mBAEF,QAUF,OARAhuF,aAAgB,WACdslxB,cAAkBxzuB,MAAK,SAACirZ,GAClBA,GACFmoV,EAAenoV,QAGlB,IAGD,eAAC,IAAD,CAAMhoZ,WAAW,EAAME,UAAU,SAASI,QAAQ,gBAAgBU,KAAK,SAASpB,UAAWF,EAAQ3gE,KAAnG,UACE,eAAC,IAAD,CAAM+iG,MAAO,CACXx/B,QAAS,GADX,UAGGguuB,EACAxjxB,GACCg7tB,GACA,cAAC,IAAD,CACEz8oB,QAAS+ksB,EAAY,GACrB55X,UAAW,cAAC,IAAD,CAAe52W,UAAWF,EAAQuihB,WAC7C36jB,MAAM,iBACNwuO,QAAQ,iBACR/8I,WAAYA,EACZC,gBAAiBA,KAGnB8uoB,GACA,cAAC,IAAD,CACEz8oB,QAAS+ksB,EAAY,GACrB55X,UAAW,cAAC,IAAD,CAAe52W,UAAWF,EAAQuihB,WAC7C36jB,MAAM,oBACNwuO,QAAQ,oBACR/8I,WAAYA,EACZC,gBAAiBA,KAGnB8uoB,GACA,cAAC,IAAD,CACEz8oB,QAAS+ksB,EAAY,IACrB55X,UAAW,cAAC,IAAD,CAAe52W,UAAWF,EAAQuihB,WAC7C36jB,MAAM,kBACNwuO,QAAQ,kBACR/8I,WAAYA,EACZC,gBAAiBA,IAGrB,cAAC,IAAD,CACEo+L,WAAY,EACZL,cAAe,WACb,OAAO,cAAC,IAAD,CACL1rM,QAAS+ksB,EAAY,GACrB55X,UAAW,cAAC,IAAD,CAAe52W,UAAWF,EAAQuihB,WAC7C36jB,MAAM,YACNwuO,QAAQ,YACR/8I,WAAYA,EACZC,gBAAiBA,UAKxBk/E,GACC,cAAC,IAAD,CAAU64L,OAAO,EAAjB,SACE,cAAC,IAAD,CAAY7wR,QAAQ,UAAUtgC,UAAWF,EAAQxvD,QAAjD,SAA2D,IAAMgoL,a,4CCnIrEs4mB,E,OAAanzrB,EAAOghP,KAAV,iJAMDmyc,O,iJCWTC,E,4JACJ,WACE,MAKIjqzB,KAAKkqC,MAJP5D,EADF,EACEA,SACA4jxB,EAFF,EAEEA,gBACArlsB,EAHF,EAGEA,QACGlkG,EAJL,iBAMA,OAAO,cAAC,IAAD,2BAAcA,GAAd,IAAqBkkG,QAAO,+GAAE,SAACz8G,GAAD,OAAO8hzB,EAAgB9hzB,EAAGy8G,MAAxD,SACJv+E,S,GAT8F7B,aAetFwlxB,O,gBCjCf7uzB,EAAQ,MACRF,EAAOC,QAAUC,EAAQ,KAAuBgD,OAAO+8C,Q,6BCcxCgvwB,IAfU,SAA4B9jxB,GACnD,IAAIl7B,EAASk7B,EAAKl7B,OACdk4G,EAAYh9E,EAAKg9E,UACjB82pB,EAAgB9zuB,EAAK8zuB,cACrBC,EAAyB/zuB,EAAK+zuB,uBAC9BC,EAAqBh0uB,EAAKg0uB,mBAC1BnpW,EAAY7qY,EAAK6qY,UAErB,QAAIipW,KAIIjpW,EAAUtzZ,UAAUzS,EAAQk4G,GAAaA,EAAUl4G,UAAY+la,EAAUtzZ,UAAUw8vB,EAAwBC,M,6BCGtG+vC,IAfS,SAA2B/jxB,GACjD,IAAIl7B,EAASk7B,EAAKl7B,OACdk4G,EAAYh9E,EAAKg9E,UACjB82pB,EAAgB9zuB,EAAK8zuB,cACrBC,EAAyB/zuB,EAAK+zuB,uBAC9BC,EAAqBh0uB,EAAKg0uB,mBAC1BnpW,EAAY7qY,EAAK6qY,UAErB,QAAIipW,KAIIjpW,EAAUtzZ,UAAUzS,EAAQk4G,GAAaA,EAAUl4G,UAAY+la,EAAUtzZ,UAAUw8vB,EAAwBC,M,0CC0lBtGgwC,MAtmBf,SAAqBvwpB,GACnB,SAASS,EAAEz0J,EAAGD,EAAGuC,EAAGid,EAAG1f,GACrB,IAAK,IAAgCwnJ,EAAGx2E,EAAiBx2E,EAAuEqrC,EAAmCuuH,EAA1J3nJ,EAAI,EAAGxM,EAAI,EAAGxF,EAAI,EAAGgG,EAAI,EAASyR,EAAI,EAAG6iJ,EAAI,EAAMN,EAAIj6J,EAAIgtJ,EAAI,EAAG9kI,EAAI,EAAG8uD,EAAI,EAAGqjF,EAAI,EAAGzuI,EAAI,EAAG0siB,EAAIrwjB,EAAEvG,OAAQo4J,EAAIw+Z,EAAI,EAAM/hf,EAAI,GAAIjB,EAAI,GAAI0lL,EAAI,GAAIq9T,EAAI,GAAOnwiB,EAAIowiB,GAAI,CAI5K,GAHA9hf,EAAIvuE,EAAED,WAAWkgB,GACjBA,IAAM4xI,GAAK,IAAMr0J,EAAIQ,EAAIhG,EAAIgS,IAAM,IAAMxM,IAAM+wE,EAAI,KAAO/wE,EAAI,GAAK,IAAKQ,EAAIhG,EAAIgS,EAAI,EAAGqmjB,IAAKx+Z,KAExF,IAAMr0J,EAAIQ,EAAIhG,EAAIgS,EAAG,CACvB,GAAIiW,IAAM4xI,IAAM,EAAI9iF,IAAMT,EAAIA,EAAEkC,QAAQihF,EAAG,KAAM,EAAInjF,EAAE8nD,OAAO38H,QAAS,CACrE,OAAQ80E,GACN,KAAK,GACL,KAAK,EACL,KAAK,GACL,KAAK,GACL,KAAK,GACH,MAEF,QACED,GAAKtuE,EAAEkgJ,OAAOjgI,GAGlBsuD,EAAI,GAGN,OAAQA,GACN,KAAK,IAKH,IAHAw2E,GADAz2E,EAAIA,EAAE8nD,QACAr2H,WAAW,GACjBhI,EAAI,EAEC4rB,IAAM1D,EAAGA,EAAIowiB,GAAI,CACpB,OAAQ9hf,EAAIvuE,EAAED,WAAWkgB,IACvB,KAAK,IACHloB,IACA,MAEF,KAAK,IACHA,IACA,MAEF,KAAK,GACH,OAAQw2E,EAAIvuE,EAAED,WAAWkgB,EAAI,IAC3B,KAAK,GACL,KAAK,GACH1iB,EAAG,CACD,IAAKy0J,EAAI/xI,EAAI,EAAG+xI,EAAIH,IAAKG,EACvB,OAAQhyJ,EAAED,WAAWiyJ,IACnB,KAAK,GACH,GAAI,KAAOzjF,GAAK,KAAOvuE,EAAED,WAAWiyJ,EAAI,IAAM/xI,EAAI,IAAM+xI,EAAG,CACzD/xI,EAAI+xI,EAAI,EACR,MAAMz0J,EAGR,MAEF,KAAK,GACH,GAAI,KAAOgxE,EAAG,CACZtuD,EAAI+xI,EAAI,EACR,MAAMz0J,GAMd0iB,EAAI+xI,GAKV,MAEF,KAAK,GACHzjF,IAEF,KAAK,GACHA,IAEF,KAAK,GACL,KAAK,GACH,KAAOtuD,IAAM4xI,GAAK7xJ,EAAED,WAAWkgB,KAAOsuD,KAK1C,GAAI,IAAMx2E,EAAG,MACbkoB,IAMF,GAHAloB,EAAIiI,EAAEqqE,UAAU1mD,EAAG1D,GACnB,IAAM8kI,IAAMA,GAAKz2E,EAAIA,EAAEkC,QAAQ0xuB,EAAI,IAAI9rrB,QAAQr2H,WAAW,IAGnD,KADCglJ,EACN,CAIE,OAHA,EAAIh2E,IAAMT,EAAIA,EAAEkC,QAAQihF,EAAG,KAC3BljF,EAAID,EAAEvuE,WAAW,IAGf,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,GACHgvE,EAAItxE,EACJ,MAEF,QACEsxE,EAAIwpL,EAMR,GAFA50O,GADA5rB,EAAIo6J,EAAE10J,EAAGsxE,EAAGh3E,EAAGw2E,EAAGhxE,EAAI,IAChB9D,OACN,EAAIy4J,IAAsBP,EAAIH,EAAE,EAAGz5J,EAAzBg3E,EAAIgjF,EAAEwmG,EAAGjqL,EAAG8jF,GAAmB30J,EAAG+0J,EAAGE,EAAG/uI,EAAG4qD,EAAGhxE,EAAG0f,GAAIqxD,EAAIS,EAAE11D,KAAK,SAAK,IAAWs4I,GAAK,KAAOhuI,GAAK5rB,EAAI45J,EAAEv7B,QAAQ38H,UAAY80E,EAAI,EAAGx2E,EAAI,KAC5I,EAAI4rB,EAAG,OAAQ4qD,GACjB,KAAK,IACHD,EAAIA,EAAEkC,QAAQ2xuB,EAAIC,GAEpB,KAAK,IACL,KAAK,IACL,KAAK,GACHrqzB,EAAIu2E,EAAI,IAAMv2E,EAAI,IAClB,MAEF,KAAK,IAEHA,GADAu2E,EAAIA,EAAEkC,QAAQwkF,EAAI,UACV,IAAMj9J,EAAI,IAClBA,EAAI,IAAM60J,GAAK,IAAMA,GAAKsP,EAAE,IAAMnkK,EAAG,GAAK,YAAcA,EAAI,IAAMA,EAAI,IAAMA,EAC5E,MAEF,QACEA,EAAIu2E,EAAIv2E,EAAG,MAAQklB,IAAWowD,GAAKt1E,EAAVA,EAAa,SACnCA,EAAI,QAIXA,EAAIo6J,EAAE10J,EAAGs0J,EAAEt0J,EAAG6wE,EAAG8jF,GAAIr6J,EAAGklB,EAAG1f,EAAI,GAGnCw1P,GAAKh7P,EACLA,EAAIq6J,EAAIrjF,EAAIijF,EAAIjN,EAAI,EACpBz2E,EAAI,GACJC,EAAIvuE,EAAED,aAAakgB,GACnB,MAEF,KAAK,IACL,KAAK,GAEH,GAAI,GAAK0D,GADT2qD,GAAK,EAAIS,EAAIT,EAAEkC,QAAQihF,EAAG,IAAMnjF,GAAG8nD,QACpB38H,QAAS,OAAQ,IAAMu4J,IAAMjN,EAAIz2E,EAAEvuE,WAAW,GAAI,KAAOglJ,GAAK,GAAKA,GAAK,IAAMA,KAAOphI,GAAK2qD,EAAIA,EAAEkC,QAAQ,IAAK,MAAM/2E,QAAS,EAAIy4J,QAAK,KAAYP,EAAIH,EAAE,EAAGljF,EAAG7wE,EAAGC,EAAG80J,EAAGE,EAAGrlF,EAAE5zE,OAAQwjB,EAAG1f,EAAG0f,KAAO,KAAO0G,GAAK2qD,EAAIqjF,EAAEv7B,QAAQ38H,UAAY60E,EAAI,QAAay2E,EAAIz2E,EAAEvuE,WAAW,GAAIwuE,EAAID,EAAEvuE,WAAW,GAAIglJ,GAC9S,KAAK,EACH,MAEF,KAAK,GACH,GAAI,MAAQx2E,GAAK,KAAOA,EAAG,CACzB6hf,GAAK9hf,EAAItuE,EAAEkgJ,OAAOjgI,GAClB,MAGJ,QACE,KAAOquD,EAAEvuE,WAAW4jB,EAAI,KAAO0pD,GAAKQ,EAAES,EAAGy2E,EAAGx2E,EAAGD,EAAEvuE,WAAW,KAEhEqyJ,EAAIrjF,EAAIijF,EAAIjN,EAAI,EAChBz2E,EAAI,GACJC,EAAIvuE,EAAED,aAAakgB,IAIzB,OAAQsuD,GACN,KAAK,GACL,KAAK,GACH,KAAO/wE,EAAIA,EAAI,EAAI,IAAM,EAAIunJ,GAAK,MAAQ9nI,GAAK,EAAIqxD,EAAE70E,SAAWs1E,EAAI,EAAGT,GAAK,MAC5E,EAAI4jF,EAAIU,GAAKpB,EAAE,EAAGljF,EAAG7wE,EAAGC,EAAG80J,EAAGE,EAAGrlF,EAAE5zE,OAAQwjB,EAAG1f,EAAG0f,GACjDy1I,EAAI,EACJF,IACA,MAEF,KAAK,GACL,KAAK,IACH,GAAI,IAAMh1J,EAAIQ,EAAIhG,EAAIgS,EAAG,CACvB0oJ,IACA,MAGJ,QAIE,OAHAA,IACAtvH,EAAIpjC,EAAEkgJ,OAAOjgI,GAELsuD,GACN,KAAK,EACL,KAAK,GACH,GAAI,IAAMvwE,EAAIgM,EAAIxM,EAAG,OAAQiS,GAC3B,KAAK,GACL,KAAK,GACL,KAAK,EACL,KAAK,GACH2zB,EAAI,GACJ,MAEF,QACE,KAAOmrC,IAAMnrC,EAAI,KAErB,MAEF,KAAK,EACHA,EAAI,MACJ,MAEF,KAAK,GACHA,EAAI,MACJ,MAEF,KAAK,GACHA,EAAI,MACJ,MAEF,KAAK,GACH,IAAMplC,EAAIR,EAAIwM,IAAM+kE,EAAIqjF,EAAI,EAAGhvH,EAAI,KAAOA,GAC1C,MAEF,KAAK,IACH,GAAI,IAAMplC,EAAIR,EAAIwM,EAAIo2O,GAAK,EAAIpuF,EAAG,OAAQ/xI,EAAI+xI,GAC5C,KAAK,EACH,MAAQviJ,GAAK,KAAOzP,EAAED,WAAWkgB,EAAI,KAAOmgO,EAAI3wO,GAElD,KAAK,EACH,MAAQ6iJ,IAAM8tF,EAAI9tF,GAEtB,MAEF,KAAK,GACH,IAAMt0J,EAAIR,EAAIwM,IAAMgoJ,EAAI/xI,GACxB,MAEF,KAAK,GACH,IAAMziB,EAAIxF,EAAIgG,EAAIgM,IAAM+kE,EAAI,EAAG3rC,GAAK,MACpC,MAEF,KAAK,GACL,KAAK,GACH,IAAM5lC,IAAMQ,EAAIA,IAAMuwE,EAAI,EAAI,IAAMvwE,EAAIuwE,EAAIvwE,GAC5C,MAEF,KAAK,GACH,IAAMA,EAAIR,EAAIxF,GAAKgS,IACnB,MAEF,KAAK,GACH,IAAMhM,EAAIR,EAAIxF,GAAKgS,IACnB,MAEF,KAAK,GACH,IAAMhM,EAAIR,EAAIwM,GAAKhS,IACnB,MAEF,KAAK,GACH,GAAI,IAAMgG,EAAIR,EAAIwM,EAAG,CACnB,GAAI,IAAM+6I,EAAG,GAAQ,EAAIt1I,EAAI,EAAI6iJ,IAC1B,UAIHvN,EAAI,EAER/sJ,IAGF,MAEF,KAAK,GACH,IAAMwF,EAAIxF,EAAIgG,EAAIgM,EAAIgoJ,EAAIj6J,IAAMA,EAAI,GACpC,MAEF,KAAK,GACL,KAAK,GACH,KAAM,EAAIiG,EAAIgM,EAAIhS,GAAI,OAAQwF,GAC5B,KAAK,EACH,OAAQ,EAAI+wE,EAAI,EAAIvuE,EAAED,WAAWkgB,EAAI,IACnC,KAAK,IACHziB,EAAI,GACJ,MAEF,KAAK,IACHmmB,EAAI1D,EAAGziB,EAAI,GAGf,MAEF,KAAK,GACH,KAAO+wE,GAAK,KAAO9+D,GAAKkU,EAAI,IAAM1D,IAAM,KAAOjgB,EAAED,WAAW4jB,EAAI,KAAO0pD,GAAKrtE,EAAEqqE,UAAU1mD,EAAG1D,EAAI,IAAKmjB,EAAI,GAAI5lC,EAAI,IAIxH,IAAMA,IAAM8wE,GAAKlrC,GAGrBkvH,EAAI7iJ,EACJA,EAAI8+D,EACJtuD,IAKF,GAAI,GAFJ0D,EAAI0pD,EAAE5zE,QAEK,CAET,GADAs1E,EAAItxE,EACA,EAAIy0J,SAA2C,KAArCP,EAAIH,EAAE,EAAGnkF,EAAG0B,EAAGrxE,EAAG80J,EAAGE,EAAG/uI,EAAG1G,EAAG1f,EAAG0f,KAAoB,KAAOowD,EAAIskF,GAAGl4J,QAAS,OAAO22jB,EAAI/if,EAAI0lL,EAGzG,GAFA1lL,EAAI0B,EAAE11D,KAAK,KAAO,IAAMg0D,EAAI,IAExB,IAAMu/E,EAAIwzF,EAAG,CAGf,OAFA,IAAMxzF,GAAKsP,EAAE7uF,EAAG,KAAO+yK,EAAI,GAEnBA,GACN,KAAK,IACH/yK,EAAIA,EAAEmD,QAAQ6xuB,EAAI,YAAch1uB,EAChC,MAEF,KAAK,IACHA,EAAIA,EAAEmD,QAAQshF,EAAG,sBAAwBzkF,EAAEmD,QAAQshF,EAAG,aAAezkF,EAAEmD,QAAQshF,EAAG,iBAAmBzkF,EAGzG+yK,EAAI,GAIR,OAAOgwU,EAAI/if,EAAI0lL,EAGjB,SAAShhG,EAAEr0J,EAAGD,EAAGuC,GACf,IAAIid,EAAIxf,EAAE24H,OAAOz/E,MAAM2rwB,GACvB7kzB,EAAIwf,EACJ,IAAI1f,EAAI0f,EAAExjB,OACNuQ,EAAItM,EAAEjE,OAEV,OAAQuQ,GACN,KAAK,EACL,KAAK,EACH,IAAIxM,EAAI,EAER,IAAKE,EAAI,IAAMsM,EAAI,GAAKtM,EAAE,GAAK,IAAKF,EAAID,IAAKC,EAC3CC,EAAED,GAAK60J,EAAE30J,EAAGD,EAAED,GAAIwC,GAAGo2H,OAGvB,MAEF,QACE,IAAIp+H,EAAIwF,EAAI,EAEZ,IAAKC,EAAI,GAAID,EAAID,IAAKC,EACpB,IAAK,IAAIQ,EAAI,EAAGA,EAAIgM,IAAKhM,EACvBP,EAAEzF,KAAOq6J,EAAE30J,EAAEM,GAAK,IAAKif,EAAEzf,GAAIwC,GAAGo2H,OAMxC,OAAO34H,EAGT,SAAS40J,EAAE30J,EAAGD,EAAGuC,GACf,IAAIid,EAAIxf,EAAEsC,WAAW,GAGrB,OAFA,GAAKkd,IAAMA,GAAKxf,EAAIA,EAAE24H,QAAQr2H,WAAW,IAEjCkd,GACN,KAAK,GACH,OAAOxf,EAAE+yE,QAAQuiL,EAAG,KAAOr1P,EAAE04H,QAE/B,KAAK,GACH,OAAO14H,EAAE04H,OAAS34H,EAAE+yE,QAAQuiL,EAAG,KAAOr1P,EAAE04H,QAE1C,QACE,GAAI,EAAI,EAAIp2H,GAAK,EAAIvC,EAAE2a,QAAQ,MAAO,OAAO3a,EAAE+yE,QAAQuiL,GAAI,KAAOr1P,EAAEqC,WAAW,GAAK,GAAK,MAAQrC,EAAE04H,QAGvG,OAAO14H,EAAID,EAGb,SAASowE,EAAEnwE,EAAGD,EAAGuC,EAAGid,GAClB,IAAI1f,EAAIG,EAAI,IACRsM,EAAI,EAAIvM,EAAI,EAAIuC,EAAI,EAAIid,EAE5B,GAAI,MAAQjT,EAAG,CACbtM,EAAIH,EAAE6a,QAAQ,IAAK,GAAK,EACxB,IAAI5a,EAAID,EAAE8sE,UAAU3sE,EAAGH,EAAE9D,OAAS,GAAG28H,OAErC,OADA54H,EAAID,EAAE8sE,UAAU,EAAG3sE,GAAG04H,OAAS54H,EAAI,IAC5B,IAAMovJ,GAAK,IAAMA,GAAKsP,EAAE1+J,EAAG,GAAK,WAAaA,EAAIA,EAAIA,EAG9D,GAAI,IAAMovJ,GAAK,IAAMA,IAAMsP,EAAE3+J,EAAG,GAAI,OAAOA,EAE3C,OAAQyM,GACN,KAAK,KACH,OAAO,KAAOzM,EAAEwC,WAAW,IAAM,WAAaxC,EAAIA,EAAIA,EAExD,KAAK,IACH,OAAO,MAAQA,EAAEwC,WAAW,GAAK,WAAaxC,EAAIA,EAAIA,EAExD,KAAK,IACH,OAAO,MAAQA,EAAEwC,WAAW,GAAK,WAAaxC,EAAIA,EAAIA,EAExD,KAAK,KACH,GAAI,MAAQA,EAAEwC,WAAW,GAAI,MAE/B,KAAK,IACL,KAAK,IACH,MAAO,WAAaxC,EAAIA,EAE1B,KAAK,IACH,MAAO,WAAaA,EAAI,QAAUA,EAAIA,EAExC,KAAK,KACL,KAAK,IACH,MAAO,WAAaA,EAAI,QAAUA,EAAI,OAASA,EAAIA,EAErD,KAAK,IACH,GAAI,KAAOA,EAAEwC,WAAW,GAAI,MAAO,WAAaxC,EAAIA,EACpD,GAAI,EAAIA,EAAE6a,QAAQ,aAAc,IAAK,OAAO7a,EAAEizE,QAAQ+xuB,EAAI,gBAAkBhlzB,EAC5E,MAEF,KAAK,IACH,GAAI,KAAOA,EAAEwC,WAAW,GAAI,OAAQxC,EAAEwC,WAAW,IAC/C,KAAK,IACH,MAAO,eAAiBxC,EAAEizE,QAAQ,QAAS,IAAM,WAAajzE,EAAI,OAASA,EAAEizE,QAAQ,OAAQ,YAAcjzE,EAE7G,KAAK,IACH,MAAO,WAAaA,EAAI,OAASA,EAAEizE,QAAQ,SAAU,YAAcjzE,EAErE,KAAK,GACH,MAAO,WAAaA,EAAI,OAASA,EAAEizE,QAAQ,QAAS,kBAAoBjzE,EAE5E,MAAO,WAAaA,EAAI,OAASA,EAAIA,EAEvC,KAAK,IACH,MAAO,WAAaA,EAAI,YAAcA,EAAIA,EAE5C,KAAK,KACH,GAAI,KAAOA,EAAEwC,WAAW,GAAI,MAE5B,MAAO,oBADPvC,EAAID,EAAE8sE,UAAU9sE,EAAE6a,QAAQ,IAAK,KAAKo4D,QAAQ,QAAS,IAAIA,QAAQ,gBAAiB,YAClD,WAAajzE,EAAI,gBAAkBC,EAAID,EAEzE,KAAK,KACH,OAAOilzB,EAAG7vwB,KAAKp1C,GAAKA,EAAEizE,QAAQiyuB,EAAI,aAAellzB,EAAEizE,QAAQiyuB,EAAI,UAAYllzB,EAAIA,EAEjF,KAAK,IAIH,OAFAE,GADAD,EAAID,EAAE8sE,UAAU,IAAI+rD,QACdh+G,QAAQ,KAAO,EAEb5a,EAAEuC,WAAW,GAAKvC,EAAEuC,WAAWtC,IACrC,KAAK,IACHD,EAAID,EAAEizE,QAAQ4/e,EAAG,MACjB,MAEF,KAAK,IACH5yjB,EAAID,EAAEizE,QAAQ4/e,EAAG,SACjB,MAEF,KAAK,IACH5yjB,EAAID,EAAEizE,QAAQ4/e,EAAG,MACjB,MAEF,QACE,OAAO7yjB,EAGX,MAAO,WAAaA,EAAI,OAASC,EAAID,EAEvC,KAAK,KACH,IAAK,IAAMA,EAAE6a,QAAQ,SAAU,GAAI,MAErC,KAAK,IAIH,OAHA3a,GAAKF,EAAIG,GAAGjE,OAAS,GAGbuQ,GAFRxM,GAAK,KAAOD,EAAEwC,WAAWtC,GAAKF,EAAE8sE,UAAU,EAAG5sE,GAAKF,GAAG8sE,UAAU3sE,EAAE0a,QAAQ,IAAK,GAAK,GAAGg+G,QAExEr2H,WAAW,IAAwB,EAAlBvC,EAAEuC,WAAW,KAC1C,KAAK,IACH,GAAI,IAAMvC,EAAEuC,WAAW,GAAI,MAE7B,KAAK,IACHxC,EAAIA,EAAEizE,QAAQhzE,EAAG,WAAaA,GAAK,IAAMD,EACzC,MAEF,KAAK,IACL,KAAK,IACHA,EAAIA,EAAEizE,QAAQhzE,EAAG,YAAc,IAAMwM,EAAI,UAAY,IAAM,OAAS,IAAMzM,EAAEizE,QAAQhzE,EAAG,WAAaA,GAAK,IAAMD,EAAEizE,QAAQhzE,EAAG,OAASA,EAAI,OAAS,IAAMD,EAG5J,OAAOA,EAAI,IAEb,KAAK,IACH,GAAI,KAAOA,EAAEwC,WAAW,GAAI,OAAQxC,EAAEwC,WAAW,IAC/C,KAAK,IACH,OAAOvC,EAAID,EAAEizE,QAAQ,SAAU,IAAK,WAAajzE,EAAI,eAAiBC,EAAI,YAAcA,EAAID,EAE9F,KAAK,IACH,MAAO,WAAaA,EAAI,iBAAmBA,EAAEizE,QAAQ2kF,EAAI,IAAM53J,EAEjE,QACE,MAAO,WAAaA,EAAI,qBAAuBA,EAAEizE,QAAQ,gBAAiB,IAAIA,QAAQ2kF,EAAI,IAAM53J,EAEpG,MAEF,KAAK,IACL,KAAK,IACH,GAAI,KAAOA,EAAEwC,WAAW,IAAM,MAAQxC,EAAEwC,WAAW,GAAI,MAEzD,KAAK,IACL,KAAK,IACH,IAAI,IAAO2izB,EAAG/vwB,KAAKj1C,GAAI,OAAO,OAASF,EAAIE,EAAE2sE,UAAU3sE,EAAE0a,QAAQ,KAAO,IAAIrY,WAAW,GAAK8tE,EAAEnwE,EAAE8yE,QAAQ,UAAW,kBAAmB/yE,EAAGuC,EAAGid,GAAGuzD,QAAQ,kBAAmB,YAAcjzE,EAAEizE,QAAQhzE,EAAG,WAAaA,GAAKD,EAAEizE,QAAQhzE,EAAG,QAAUA,EAAEgzE,QAAQ,QAAS,KAAOjzE,EACxQ,MAEF,KAAK,IACH,GAAIA,EAAI,WAAaA,GAAK,MAAQA,EAAEwC,WAAW,GAAK,OAASxC,EAAI,IAAMA,EAAG,MAAQyC,EAAIid,GAAK,MAAQ1f,EAAEwC,WAAW,KAAO,EAAIxC,EAAE6a,QAAQ,YAAa,IAAK,OAAO7a,EAAE8sE,UAAU,EAAG9sE,EAAE6a,QAAQ,IAAK,IAAM,GAAGo4D,QAAQmyuB,EAAI,gBAAkBplzB,EAGvO,OAAOA,EAGT,SAAS2+J,EAAEx+J,EAAGD,GACZ,IAAIuC,EAAItC,EAAE0a,QAAQ,IAAM3a,EAAI,IAAM,KAC9Bwf,EAAIvf,EAAE2sE,UAAU,EAAG,IAAM5sE,EAAIuC,EAAI,IAErC,OADAA,EAAItC,EAAE2sE,UAAUrqE,EAAI,EAAGtC,EAAEjE,OAAS,GAC3Bm4J,EAAE,IAAMn0J,EAAIwf,EAAIA,EAAEuzD,QAAQo4f,EAAI,MAAO5okB,EAAGvC,GAGjD,SAAS2kzB,EAAG1kzB,EAAGD,GACb,IAAIuC,EAAI6tE,EAAEpwE,EAAGA,EAAEsC,WAAW,GAAItC,EAAEsC,WAAW,GAAItC,EAAEsC,WAAW,IAC5D,OAAOC,IAAMvC,EAAI,IAAMuC,EAAEwwE,QAAQglF,EAAI,YAAYnrF,UAAU,GAAK,IAAM5sE,EAAI,IAG5E,SAAS+zJ,EAAE9zJ,EAAGD,EAAGuC,EAAGid,EAAG1f,EAAGyM,EAAGxM,EAAGxF,EAAGgG,EAAG+mJ,GACpC,IAAK,IAAkB6H,EAAdr+E,EAAI,EAAG9+D,EAAIhS,EAAM8wE,EAAI2jF,IAAK3jF,EACjC,OAAQq+E,EAAI2F,EAAEhkF,GAAG31E,KAAKy3jB,EAAG3yjB,EAAG+R,EAAGzP,EAAGid,EAAG1f,EAAGyM,EAAGxM,EAAGxF,EAAGgG,EAAG+mJ,IAClD,UAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,KACH,MAEF,QACEt1I,EAAIm9I,EAIV,GAAIn9I,IAAMhS,EAAG,OAAOgS,EAmBtB,SAASime,EAAEh4e,GAGT,YADA,KADAA,EAAIA,EAAE63C,UACWq8G,EAAI,KAAMl0J,EAAI,oBAAsBA,EAAIkvJ,EAAI,GAAKA,EAAI,EAAGgF,EAAIl0J,GAAKkvJ,EAAI,GAC/E8oV,EAGT,SAAS26E,EAAE3yjB,EAAGD,GACZ,IAAIuC,EAAItC,EAKR,GAJA,GAAKsC,EAAED,WAAW,KAAOC,EAAIA,EAAEo2H,QAE/Bp2H,EAAI,CADAA,GAGA,EAAIkyJ,EAAG,CACT,IAAIj1I,EAAIu0I,GAAG,EAAG/zJ,EAAGuC,EAAGA,EAAGwyJ,EAAGE,EAAG,EAAG,EAAG,EAAG,QACtC,IAAWz1I,GAAK,kBAAoBA,IAAMxf,EAAIwf,GAGhD,IAAI1f,EAAI40J,EAAEomG,EAAGv4P,EAAGvC,EAAG,EAAG,GAKtB,OAJA,EAAIy0J,SAAmD,KAA7Cj1I,EAAIu0I,GAAG,EAAGj0J,EAAGyC,EAAGA,EAAGwyJ,EAAGE,EAAGn1J,EAAE9D,OAAQ,EAAG,EAAG,MAAqB8D,EAAI0f,IACxE,GACJmjO,EAAI,EACJ1tF,EAAIF,EAAI,EACDj1J,EAGT,IAAI2kzB,EAAK,QACLzwpB,EAAI,YACJgxpB,EAAK,OACLD,EAAK,UACLG,EAAK,sBACLL,EAAK,SACLvvjB,EAAI,oBACJ/9F,EAAK,qBACLlD,EAAI,aACJuwpB,EAAK,gBACLjyP,EAAI,qBACJ+xP,EAAK,kBACL3spB,EAAK,eACLL,EAAK,eACLyza,EAAK,8BACL85O,EAAK,mCACLH,EAAK,sBACL7vpB,EAAI,EACJF,EAAI,EACJ4tF,EAAI,EACJxzF,EAAI,EACJ2rG,EAAI,GACJhmG,EAAI,GACJL,EAAI,EACJN,EAAI,KACJgB,EAAI,EAKR,OAHAy9Z,EAAE3na,IApEF,SAAS+J,EAAE/0J,GACT,OAAQA,GACN,UAAK,EACL,KAAK,KACHw0J,EAAIK,EAAE94J,OAAS,EACf,MAEF,QACE,GAAI,oBAAsBiE,EAAG60J,EAAEL,KAAOx0J,OAAO,GAAI,kBAAoBA,EAAG,IAAK,IAAID,EAAI,EAAGuC,EAAItC,EAAEjE,OAAQgE,EAAIuC,IAAKvC,EAC7Gg1J,EAAE/0J,EAAED,SACCm1J,EAAU,IAAJl1J,EAGjB,OAAO+0J,GAwDT49Z,EAAE/wjB,IAAMo2e,OACR,IAAWhkV,GAAKgkV,EAAEhkV,GACX2+Z,GC5lBL42E,EAAY,QAGhB,SAAS27K,EAAQ13iB,GACXA,GACF23iB,EAAMnjxB,QAAQ3uB,OAAOm6P,EAAQ,KAIjC,IAAI23iB,EAAQ,CACVnjxB,QAAS,MAEPojxB,EAAY,SAAmBhizB,EAASyyC,EAAS5I,EAAWo4wB,EAAS9uhB,EAAM02H,EAAQlxZ,EAAQ+1C,EAAI9rC,EAAOwnL,GACxG,OAAQpqL,GAEN,KAAK,EAED,OAAQyyC,EAAQxzC,WAAW,IACzB,KAAK,GAID,OADA8izB,EAAMnjxB,QAAQ3uB,OAAOwiC,EAAU,KACxB,GAIX,KAAK,IAID,GAA8B,KAA1BA,EAAQxzC,WAAW,GACrB,MAAO,GAKf,MAIJ,KAAK,EAED,GAAW,IAAPyvC,EAAU,OAAO+D,EAAU0zlB,EAC/B,MAIJ,KAAK,EAED,OAAQz3lB,GAEN,KAAK,IACL,KAAK,IAGD,OADAqzwB,EAAMnjxB,QAAQ3uB,OAAO45B,EAAU,GAAK4I,GAC7B,GAGX,QAEI,OAAOA,GAAkB,IAAP23I,EAAW+7c,EAAY,IAKnD,KAAM,EAEF1zlB,EAAQoD,MAlEHswlB,UAkEiB3ioB,QAAQs+yB,KAuIvBp5e,IAlIG,SAAqB5lS,QACrBlwC,IAAZkwC,IAAuBA,EAAU,IACrC,IACIo/wB,EADA9mzB,EAAM0nC,EAAQ1nC,KAAO,WAGFxI,IAAnBkwC,EAAQ2R,SACVytwB,EAAgB,CACdztwB,OAAQ3R,EAAQ2R,SAIpB,IAAI0twB,EAAS,IAAIC,EAAOF,GASxB,IAEI5xuB,EAFAi4P,EAAW,GAKbj4P,EAAYxtC,EAAQwtC,WAAaxzC,SAAShpB,KAC1C,IAcEuuyB,EAdE32yB,EAAQoxB,SAASg0K,iBAAiB,sBAAwB11M,EAAM,KACpE7C,MAAMtD,UAAUuO,QAAQ1L,KAAK4T,GAAO,SAAUxN,GAC/BA,EAAKu2S,aAAa,gBAAkBr5S,GAE1Cy6C,MAAM,KAAKryC,SAAQ,SAAUu0B,GAClCwwS,EAASxwS,IAAM,KAGb75B,EAAK0ma,aAAet0V,GACtBA,EAAU0jO,YAAY91S,MAQ1BikzB,EAAOv6pB,IAAI9kH,EAAQw/wB,cAAnBH,CAAkCH,GAElCK,EAAU,SAAgB96wB,EAAU8gS,EAAYG,EAAO+5e,GACrD,IAAIj9yB,EAAO+iU,EAAW/iU,KACtBy8yB,EAAMnjxB,QAAU4pS,EAWhB25e,EAAO56wB,EAAU8gS,EAAW31P,QAExB6vuB,IACF1ozB,EAAM0uU,SAASjjU,IAAQ,IAqD7B,IAAIzL,EAAQ,CACVuB,IAAKA,EACLotU,MAAO,IAAI06F,IAAW,CACpB9na,IAAKA,EACLk1E,UAAWA,EACX0iO,MAAOlwQ,EAAQkwQ,MACfwvgB,OAAQ1/wB,EAAQ0/wB,SAElBxvgB,MAAOlwQ,EAAQkwQ,MACfu1B,SAAUA,EACVN,WAAY,GACZh4T,OAAQoyyB,GAEV,OAAOxozB,I,6B98C9MF,sCAAM,EAAc,W,6B+8CAZ,SAAS4le,EAAkB96d,EAAKE,IAClC,MAAPA,GAAeA,EAAMF,EAAIhM,UAAQkM,EAAMF,EAAIhM,QAE/C,IAAK,IAAImB,EAAI,EAAGggP,EAAO,IAAIvhP,MAAMsM,GAAM/K,EAAI+K,EAAK/K,IAC9CggP,EAAKhgP,GAAK6K,EAAI7K,GAGhB,OAAOggP,EAPT,mC,gBCAA,IAAI2okB,EAAUvwzB,EAAQ,MAKtBF,EAAOC,QAAU4sN,EACjB7sN,EAAOC,QAAQqhD,MAAQA,EACvBthD,EAAOC,QAAQs4Q,QAsGf,SAAkBjrP,EAAKwjB,GACrB,OAAO4/wB,EAAiBpvwB,EAAMh0B,EAAKwjB,KAtGrC9wC,EAAOC,QAAQywzB,iBAAmBA,EAClC1wzB,EAAOC,QAAQ0wzB,eAAiBA,EAOhC,IAAIC,EAAc,IAAIhxwB,OAAO,CAG3B,UAOA,0GACAr5B,KAAK,KAAM,KASb,SAAS+6B,EAAOh0B,EAAKwjB,GAQnB,IAPA,IAKI81G,EALA82F,EAAS,GACTt0O,EAAM,EACNnI,EAAQ,EACR4tH,EAAO,GACPgisB,EAAmB//wB,GAAWA,EAAQqjmB,WAAa,IAGf,OAAhCvtf,EAAMgqqB,EAAY//pB,KAAKvjI,KAAe,CAC5C,IAAIpW,EAAI0vI,EAAI,GACRkqqB,EAAUlqqB,EAAI,GACdh0I,EAASg0I,EAAI3lJ,MAKjB,GAJA4tH,GAAQvhG,EAAI1Y,MAAM3T,EAAO2R,GACzB3R,EAAQ2R,EAASsE,EAAEvQ,OAGfmqzB,EACFjisB,GAAQiisB,EAAQ,OADlB,CAKA,IAAIjszB,EAAOyoB,EAAIrsB,GACXwhD,EAASmkG,EAAI,GACbtzI,EAAOszI,EAAI,GACX2vJ,EAAU3vJ,EAAI,GACdxB,EAAQwB,EAAI,GACZ0lM,EAAW1lM,EAAI,GACf0nmB,EAAW1nmB,EAAI,GAGf/3B,IACF6uH,EAAOxsO,KAAK29G,GACZA,EAAO,IAGT,IAAIuoE,EAAoB,MAAV30I,GAA0B,MAAR59C,GAAgBA,IAAS49C,EACrDu+I,EAAsB,MAAbsrJ,GAAiC,MAAbA,EAC7Byke,EAAwB,MAAbzke,GAAiC,MAAbA,EAC/B6nT,EAAYvtf,EAAI,IAAMiqqB,EACtBp3nB,EAAU88G,GAAWnxJ,EAEzBs4F,EAAOxsO,KAAK,CACVoC,KAAMA,GAAQlK,IACdq5C,OAAQA,GAAU,GAClB0xlB,UAAWA,EACX48K,SAAUA,EACV/vnB,OAAQA,EACR5J,QAASA,EACTk3jB,WAAYA,EACZ70jB,QAASA,EAAUu3nB,EAAYv3nB,GAAY60jB,EAAW,KAAO,KAAOvzQ,EAAao5J,GAAa,SAclG,OATIlzoB,EAAQqsB,EAAI3mB,SACdkoH,GAAQvhG,EAAImmG,OAAOxyH,IAIjB4tH,GACF6uH,EAAOxsO,KAAK29G,GAGP6uH,EAoBT,SAASuzkB,EAA0B3jyB,GACjC,OAAOiguB,UAAUjguB,GAAKowD,QAAQ,WAAW,SAAU/yE,GACjD,MAAO,IAAMA,EAAEsC,WAAW,GAAGlH,SAAS,IAAIopI,iBAmB9C,SAASuhrB,EAAkBhzkB,GAKzB,IAHA,IAAIhhD,EAAU,IAAIn2L,MAAMm3O,EAAO/2O,QAGtBmB,EAAI,EAAGA,EAAI41O,EAAO/2O,OAAQmB,IACR,kBAAd41O,EAAO51O,KAChB40L,EAAQ50L,GAAK,IAAI83C,OAAO,OAAS89L,EAAO51O,GAAG2xL,QAAU,OAIzD,OAAO,SAAU7tL,EAAKkpJ,GAMpB,IALA,IAAIjmC,EAAO,GACP/uE,EAAOl0C,GAAO,GAEdg3J,GADU9N,GAAQ,IACD0jH,OAASy4iB,EAA2Bv4mB,mBAEhD5wM,EAAI,EAAGA,EAAI41O,EAAO/2O,OAAQmB,IAAK,CACtC,IAAIi9F,EAAQ24I,EAAO51O,GAEnB,GAAqB,kBAAVi9F,EAAX,CAMA,IACIivjB,EADAxzpB,EAAQs/C,EAAKilD,EAAMzxF,MAGvB,GAAa,MAAT9S,EAAe,CACjB,GAAIukG,EAAMgstB,SAAU,CAEdhstB,EAAMqyF,UACRvoE,GAAQ9pB,EAAMtiD,QAGhB,SAEA,MAAM,IAAIt7C,UAAU,aAAe49F,EAAMzxF,KAAO,mBAIpD,GAAIm9yB,EAAQjwzB,GAAZ,CACE,IAAKukG,EAAMi8F,OACT,MAAM,IAAI75L,UAAU,aAAe49F,EAAMzxF,KAAO,kCAAoCG,KAAKC,UAAUlT,GAAS,KAG9G,GAAqB,IAAjBA,EAAMmG,OAAc,CACtB,GAAIo+F,EAAMgstB,SACR,SAEA,MAAM,IAAI5pzB,UAAU,aAAe49F,EAAMzxF,KAAO,qBAIpD,IAAK,IAAIgpE,EAAI,EAAGA,EAAI97E,EAAMmG,OAAQ21E,IAAK,CAGrC,GAFA03kB,EAAUpxf,EAAOpiK,EAAM87E,KAElBogH,EAAQ50L,GAAG+3C,KAAKm0mB,GACnB,MAAM,IAAI7spB,UAAU,iBAAmB49F,EAAMzxF,KAAO,eAAiByxF,EAAM00F,QAAU,oBAAsBhmL,KAAKC,UAAUsgpB,GAAW,KAGvInliB,IAAe,IAANvyC,EAAUyoB,EAAMtiD,OAASsiD,EAAMoviB,WAAa6f,OApBzD,CA4BA,GAFAA,EAAUjvjB,EAAMuppB,SA5Ebf,UA4EuC/svB,GA5ExBk9E,QAAQ,SAAS,SAAU/yE,GAC/C,MAAO,IAAMA,EAAEsC,WAAW,GAAGlH,SAAS,IAAIopI,iBA2EWyzB,EAAOpiK,IAErDk8L,EAAQ50L,GAAG+3C,KAAKm0mB,GACnB,MAAM,IAAI7spB,UAAU,aAAe49F,EAAMzxF,KAAO,eAAiByxF,EAAM00F,QAAU,oBAAsBu6d,EAAU,KAGnHnliB,GAAQ9pB,EAAMtiD,OAASuxmB,QArDrBnliB,GAAQ9pB,EAwDZ,OAAO8pB,GAUX,SAASksX,EAAcztd,GACrB,OAAOA,EAAIowD,QAAQ,6BAA8B,QASnD,SAASszuB,EAAa5rqB,GACpB,OAAOA,EAAM1nE,QAAQ,gBAAiB,QAUxC,SAASwzuB,EAAYr9hB,EAAIjtR,GAEvB,OADAitR,EAAGjtR,KAAOA,EACHitR,EAST,SAAS9/C,EAAOjjM,GACd,OAAOA,EAAQ47K,UAAY,GAAK,IAwElC,SAASikmB,EAAgBjzkB,EAAQ92O,EAAMkqC,GAChC2/wB,EAAQ7pzB,KACXkqC,EAAkClqC,GAAQkqC,EAC1ClqC,EAAO,IAUT,IALA,IAAI6lN,GAFJ37K,EAAUA,GAAW,IAEA27K,OACjBnrN,GAAsB,IAAhBwvC,EAAQxvC,IACd6vzB,EAAQ,GAGHrpzB,EAAI,EAAGA,EAAI41O,EAAO/2O,OAAQmB,IAAK,CACtC,IAAIi9F,EAAQ24I,EAAO51O,GAEnB,GAAqB,kBAAVi9F,EACTostB,GAASp2U,EAAah2Y,OACjB,CACL,IAAItiD,EAASs4b,EAAah2Y,EAAMtiD,QAC5B8zP,EAAU,MAAQxxM,EAAM00F,QAAU,IAEtC7yL,EAAKsK,KAAK6zF,GAENA,EAAMi8F,SACRu1G,GAAW,MAAQ9zP,EAAS8zP,EAAU,MAaxC46gB,GANI56gB,EAJAxxM,EAAMgstB,SACHhstB,EAAMqyF,QAGC30I,EAAS,IAAM8zP,EAAU,KAFzB,MAAQ9zP,EAAS,IAAM8zP,EAAU,MAKnC9zP,EAAS,IAAM8zP,EAAU,KAOzC,IAAI49V,EAAYp5J,EAAajqc,EAAQqjmB,WAAa,KAC9Ci9K,EAAoBD,EAAMv8yB,OAAOu/nB,EAAUxtoB,UAAYwtoB,EAkB3D,OAZK1nb,IACH0kmB,GAASC,EAAoBD,EAAMv8yB,MAAM,GAAIu/nB,EAAUxtoB,QAAUwqzB,GAAS,MAAQh9K,EAAY,WAI9Fg9K,GADE7vzB,EACO,IAIAmrN,GAAU2kmB,EAAoB,GAAK,MAAQj9K,EAAY,MAG3D+8K,EAAW,IAAItxwB,OAAO,IAAMuxwB,EAAOp9kB,EAAMjjM,IAAWlqC,GAe7D,SAASimN,EAAch+F,EAAMjoH,EAAMkqC,GAQjC,OAPK2/wB,EAAQ7pzB,KACXkqC,EAAkClqC,GAAQkqC,EAC1ClqC,EAAO,IAGTkqC,EAAUA,GAAW,GAEjB+9E,aAAgBjvE,OAlJtB,SAAyBivE,EAAMjoH,GAE7B,IAAI4gB,EAASqnG,EAAK98F,OAAOshB,MAAM,aAE/B,GAAI7rB,EACF,IAAK,IAAI1f,EAAI,EAAGA,EAAI0f,EAAO7gB,OAAQmB,IACjClB,EAAKsK,KAAK,CACRoC,KAAMxL,EACN26C,OAAQ,KACR0xlB,UAAW,KACX48K,UAAU,EACV/vnB,QAAQ,EACR5J,SAAS,EACTk3jB,UAAU,EACV70jB,QAAS,OAKf,OAAOy3nB,EAAWrisB,EAAMjoH,GAgIfyqzB,CAAexisB,EAA6BjoH,GAGjD6pzB,EAAQ5hsB,GAxHd,SAAwBA,EAAMjoH,EAAMkqC,GAGlC,IAFA,IAAIq4G,EAAQ,GAEHrhJ,EAAI,EAAGA,EAAI+mH,EAAKloH,OAAQmB,IAC/BqhJ,EAAMj4I,KAAK27M,EAAah+F,EAAK/mH,GAAIlB,EAAMkqC,GAAS/e,QAKlD,OAAOm/xB,EAFM,IAAItxwB,OAAO,MAAQupG,EAAM5iI,KAAK,KAAO,IAAKwtN,EAAMjjM,IAEnClqC,GAgHjB0qzB,CAAqCzisB,EAA8BjoH,EAAOkqC,GArGrF,SAAyB+9E,EAAMjoH,EAAMkqC,GACnC,OAAO6/wB,EAAervwB,EAAMutE,EAAM/9E,GAAUlqC,EAAMkqC,GAuG3CygxB,CAAsC1isB,EAA8BjoH,EAAOkqC,K,6BCxa7E,IAAKwkV,EAAZ,kC,SAAYA,K,YAAAA,E,qBAAAA,M,gICMC9lR,EAAgB,gBAsCdgitB,IA/BwB,WACrC,IAAM/hxB,EAAW2F,wBACjB,EAAoCoO,oBAAS,GAA7C,mBAAOiqV,EAAP,KAAmBC,EAAnB,KAcA,OACE,cAAC,IAAD,CACEt5Q,SAAU5kB,EACVwtU,sBAAsB,EACtBC,sBAAsB,EACtBrkT,WAAYm+qB,IAJd,SAME,cAAC,IAAD,CACEtpa,WAAYA,EACZzxE,UArBgB,SAACtsN,GACrBg+R,GAAc,GAEd,IAAI3pV,SAAQ,SAACC,EAASi3B,GAAV,OACVxrC,EAAS,IAAIkhC,IAA0B,CACrC++B,UACA1rD,UACAi3B,eAEDozT,SAAQ,kBAAMX,GAAc,a,sKCKtBm6N,G,mBAAiB4pN,eAuBf,SAAShqN,IAOS,IAAD,yDAAJ,GAAI,IAN9BX,oBAM8B,MANf,GAMe,EAL9B1xe,EAK8B,EAL9BA,QACAr8C,EAI8B,EAJ9BA,SAI8B,IAH9BkuhB,wBAG8B,MAHX,GAGW,MAF9BC,uBAE8B,MAFZ,GAEY,EAD9Bz3hB,EAC8B,EAD9BA,MAKMwK,EAAW,sBACZgthB,GADY,CAEfyqN,IACA7pN,EACA8pN,2BAAiBv8rB,IAJF,YAKZ8xe,IAGLkqJ,YAAiB,CACfh8nB,UACA3lD,UAQF,IAAMmivB,EAAY,CAChB53uB,kBAAe,WAAf,cAAmBC,KAqBfk/N,EAgEFp/N,UAGE5vC,EAAkB0tC,sBACtBwsM,YAActrM,GACd7qD,iBAAO44kB,GACP3tT,EAAgB,WAAhB,EAAoBy4gB,IAkBtB,OAdAznxB,EAAMmjL,QAAUu6Y,EAAexkG,IAC/Bl5d,EAAMojL,iBAAN,eACKx0I,GAEL5uC,EAAMqjL,cAAgB,GAUfrjL,I,6BCjMT,6BAMes+E,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,uDACD,sB,6BCRJ,6BAMe69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,qDACD,uB,ucC2IS66qB,EAAwB,SAAC,GAQ/B,IAPLL,EAOI,EAPJA,eACA58a,EAMI,EANJA,QAOA,OADI,EALJ88a,oBAM6BF,EAAevkrB,KAC1C2nQ,EAAQ3/P,IAAI,YACTwH,QAAO,SAAAyrH,GAAO,OAAI0pd,YAAgB1pd,EAASspjB,IAAmBtpjB,EAAQjzH,IAAI,QAAU69B,wCAMvF8hO,EAAQ3/P,IAAI,aAGVgpzB,E,4MACG/lxB,MAAQ,CACbgmxB,aAAa,EACbC,eAAgB,EAAK/ixB,MAAMw5N,SAAW,EAAKx5N,MAAMw5N,QAAQ3/P,IAAI,aAAe,EAAKmmC,MAAMw5N,QAAQ3/P,IAAI,YAAYhI,KAC3G,EAAKmuC,MAAMw5N,QAAQ3/P,IAAI,YAAY4H,QAAO,SAACutI,EAAKliB,EAAS76H,GAAf,OAAyB+8I,EAAIxxI,IAAJ,UAAWvL,IAAS,KAAOyW,cAAI,KAClGA,cAAI,IACRg3L,MAAO,EACPsjnB,eAAe,EACfC,WAAW,G,EAGNjvf,cAAgB,WACrB,EAAKt7M,UAAS,SAACquJ,GAAD,MAAgB,CAC5B+7iB,aAAc/7iB,EAAU+7iB,iB,EAIrBI,UAAY,SAACpqzB,GAClB,IAAIiqzB,EAAiB,EAAKjmxB,MAAMimxB,eAChCA,EAAiBA,EAAevlzB,IAAf,UAAsB1E,IAAMiqzB,EAAelpzB,IAAf,UAAsBf,KACnE,EAAK4/G,SAAS,CACZqqsB,oB,EAIGv9e,QAAU,SAACzuS,GAChB,IAAKA,EACH,OAAO,KAET,MAGI,EAAKiJ,MAFPwrV,EADF,EACEA,eACAztR,EAFF,EAEEA,OAEM2hG,EAAU,EAAK5iK,MAAf4iK,MACR,IACE,OAAO8rL,GAAkBztR,EAAOJ,QAAQ5mE,EAAI,CAAEqlE,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,EAAMryC,KAAM,CAAEiwgB,UAAU,KAC7K,MAAOt+kB,GAWP,OAVIwhM,EAAQ,GACV/wJ,YAAW,WACT,EAAK+pE,UAAS,SAAA57E,GAAK,kCAAUA,GAAV,IAAiB4iK,MAAO5iK,EAAM4iK,MAAQ,SACxD,KAEL5hL,QAAQ08E,MAAM,iDAAmD,CAC/Dt8F,IACAwhM,QACA3hG,WAEK,O,EAIJoltB,wCAA0C,SAAC9jf,EAAuCE,GACvF,MAAmD,EAAKv/R,MAAhDw/R,EAAR,EAAQA,wBAAyBqpX,EAAjC,EAAiCA,cAKjC,QAF+B,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAenyqB,MAAM,CAAC,WAAY,UAAW,SAAU8oT,EAAwB9oT,MAAM,CAAC,UAAW,UACpFue,iBAAekB,OAE1CkpS,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,wBAAyB6oT,KAAiBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,wBAAyB6oT,IACxJF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,wBAAyB6oT,KAAiBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,wBAAyB6oT,K,4CAG9J,WAAiB,IAAD,SACd,EAMIzpU,KAAKkqC,MALPgvC,EADF,EACEA,QACAwqL,EAFF,EAEEA,QACA33O,EAHF,EAGEA,EACAmvD,EAJF,EAIEA,MACAoyuB,EALF,EAKEA,kCAEF,EAKIttzB,KAAKgnC,MAJPgmxB,EADF,EACEA,YACAC,EAFF,EAEEA,eACAC,EAHF,EAGEA,cACAC,EAJF,EAIEA,UAGIzsI,EAAe,UAAGh9a,EAAQ3/P,IAAI,mBAAf,aAAG,EAAyBwH,QAAO,SAACyrH,GAAD,OAAcA,EAAQjzH,IAAI,mCAE5E2+W,EAAkBh/G,EAAQ3/P,IAAI,oBAAsB6O,gBACpD6xuB,EAAe/hY,EAAgB9hW,MAAM,CAAC,WAAY,kBAAoB3I,iBACtEs1yB,EAAmB9oE,EAAaz7uB,KAAI,SAAAo1W,GAAO,OAAIsE,EAAgB3+W,IAAI,cAAc4d,MAAK,SAAAk1O,GAAK,OAAIunH,IAAYvnH,EAAM9yP,IAAI,YAAQuH,OAAOo3W,EAAgB3+W,IAAI,cAAcwH,QAAO,SAAAsrP,GAAK,OAAK4tf,EAAal7uB,SAASstP,EAAM9yP,IAAI,YAAYkU,iBACnOssoB,EAAe9uO,YAAoB/yD,GAEzC,OACE,eAAC,IAAD,CAAMtpS,UAAWF,EAAQksC,KAAzB,UACE,cAAC,IAAD,UACE,eAAC,IAAD,CAAM5rC,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,gBAAjE,UACE,cAAC,IAAD,CAAMF,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAnE,SACE,cAAC,IAAD,CAAMW,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAAC,IAAD,CAAMpB,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC,IAAD,CAAY4rC,QAAS7kH,KAAKk+T,cAA1B,SAEI8uf,EACE,cAAC,IAAD,CAA8B7lsB,SAAS,UAEvC,cAAC,IAAD,CAA4BA,SAAS,YAG3C,cAAC,IAAD,CACEzN,QAAQ,KACR4B,MAAO,CAAE+O,SAAU,SAAUoM,WAAY,WAAYvO,WAAY,GAFnE,SAIGw7I,EAAQ3/P,IAAI,yBAKrB,eAAC,IAAD,CAAM61E,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAA3F,UACE,cAAC,IAAD,CAAMhB,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAE4M,WAAY,IAA/D,SACE,sBAAK5M,MAAO,CAAElgC,QAAS,OAAQurqB,aAAc,UAA7C,UACE,qBACEngoB,IAAsB,QAAjB+9hB,EAAyBh8U,IAAUC,IACxCltN,MAAO,CAAEhgC,MAAO,IAChB+tD,IAAKt9G,EAAE,uBAAD,OAAyC,QAAjBw4nB,EAAyB,kBAAoB,gBAC7E,cAAC,IAAD,CAAY7qiB,QAAQ,KAApB,SAA0B3tF,EAAE,eAAD,OAAgBw4nB,WAI7Cm8B,EAAgB3krB,KAAO,IAAMsB,QAAQqjrB,EAAgB/+pB,MAAK,SAAA9J,GAAC,OAAKA,EAAE9T,IAAI,iBACnE,cAAC,IAAD,CAASmmH,MAAOn+F,EAAE,+BAAlB,SACD,cAAC,IAAD,CAAkBk6E,MAAM,sBAkClC,cAAC,IAAD,CAAU+hC,IAAKglrB,EAAf,SACE,cAAC,IAAD,UACE,cAAC,IAAD,CAAMxzuB,WAAW,EAAjB,SACE,cAAC,IAAD,CACEI,MAAM,EACNgB,GAAI,GACJ0gC,MAAO,CAAE2uB,UAAW,UAAWs9K,UAAW,UAH5C,SAKE,eAAC,IAAD,WACE,cAAC,IAAD,UACE,eAAC,IAAD,WAEI4lgB,GAAa,cAAC,IAAD,CAAW1zsB,MAAM,WAG9ByzsB,GACA,qCACE,cAAC,IAAD,CAAWzzsB,MAAM,SAAjB,4CAGA,cAAC,IAAD,CAAWA,MAAM,SAAjB,6CAKJ,cAAC,IAAD,CAAWA,MAAM,SAASrgC,UAAWF,EAAQs0uB,iBAC7C,cAAC,IAAD,CAAWp0uB,UAAWF,EAAQu0uB,SAAUh0sB,MAAM,SAA9C,SAAwD1tF,EAAE,wCAC1D,cAAC,IAAD,CAAWqtD,UAAWF,EAAQu0uB,SAAUh0sB,MAAM,SAA9C,SAAwD1tF,EAAE,0CACzDwhyB,EAAiB3kzB,WAAWI,KAAI,SAAC+pZ,GAAD,OAC9BA,EAAOhvZ,IAAI,cACZ,cAAC,IAAD,CAAWq1E,UAAWF,EAAQu0uB,SAAUh0sB,MAAM,SAA9C,SAEIgroB,EAAal7uB,SAASwpZ,EAAOhvZ,IAAI,OAC/B,sBAAKu3G,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,SAAUyC,eAAgB,UAArE,UACE,cAAC,IAAD,CACEuqB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,OAE9BywX,EAAOhvZ,IAAI,WAGdgvZ,EAAOhvZ,IAAI,SAVjB,gBAAqEgvZ,EAAOhvZ,IAAI,kBAclF,cAAC,IAAD,CAAWq1E,UAAWF,EAAQu0uB,SAAUh0sB,MAAM,SAA9C,SAAwD1tF,EAAE,6BAG9D,cAAC,IAAD,UACG20pB,EAAgB13qB,KAAI,SAACgzJ,EAAgC7/J,GAAjC,OACA,IAAnB6/J,EAAIj4J,IAAI,MAAe,KACrB,eAAC,WAAD,WACE,eAAC,IAAD,CAAUq1E,UAAW6zuB,EAAelpzB,IAAf,UAAsB5H,IAAW+8E,EAAQw0uB,SAAW,GAAzE,UACGR,GAAiBC,GAAa,cAAC,IAAD,CAAW/zuB,UAAWF,EAAQy0uB,UAAWnnsB,IAAKw1C,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,OAAQ,SAAU,OAAQ,WAAzE,aAAoG06D,MAAM,SAErL4xuB,GACA,qCACE,cAAC,IAAD,CAAWzzsB,MAAM,SAAjB,SAEIuiD,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,SAAW0e,2BACtD08H,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,4BAC/Co7I,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,4BAE/C,IAEFo7I,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,oBAGrD,cAAC,IAAD,CAAW64F,MAAM,SAAjB,SAEIuiD,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,SAAW0e,2BACtD08H,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,oBAC/Co7I,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,oBAE/C,IAEFo7I,EAAIp7I,MAAM,CAAC,oBAAqB,cAAe,eAKzD,cAAC,IAAD,CAAW64F,MAAM,SACfoL,QAAS,kBAAM,EAAKuosB,UAAUjxzB,IAC9Bi9E,UAAWF,EAAQ00uB,sBAFrB,SAIE,cAAC,IAAD,CAAMp0uB,WAAW,EAAMP,WAAW,SAAlC,SAEIg0uB,EAAelpzB,IAAf,UAAsB5H,IAAW,cAAC,IAAD,IAAiC,cAAC,IAAD,QAIxE,cAAC,IAAD,CAAWs9G,MAAM,SAAjB,SACE,qBAAK6B,MAAO,CAAElgC,QAAS,QAAvB,SACE,cAAC,IAAD,CAAS8uC,MAAO8xC,EAAIj4J,IAAI,gBAAkB,GAA1C,SACE,qBAAKq1E,UAAWF,EAAQqwgB,YAAxB,SACGvtb,EAAIj4J,IAAI,uBAKjB,cAAC,IAAD,CAAW01G,MAAM,SAAjB,SACG,EAAK4zsB,wCAAwCrxpB,EAAK,UAC/C,cAAC,IAAD,CAAMhvI,OAAO,SAASogG,KAAM,EAAKsiN,QAAQ,EAAK29e,wCAAwCrxpB,EAAK,WAA3F,SAAwGA,EAAIj4J,IAAI,WAChH,EAAKspzB,wCAAwCrxpB,EAAK,OAChD,cAAC,IAAD,CAAMhvI,OAAO,SAASogG,KAAM,EAAKigsB,wCAAwCrxpB,EAAK,OAA9E,SAAuFA,EAAIj4J,IAAI,WAC/Fi4J,EAAIj4J,IAAI,UAAY,MAG3BwpzB,EAAiBvkzB,KAAI,SAAC+pZ,EAAa2pD,GAAyB,IAAD,IACtD93I,EAAO5oK,EAAIj4J,IAAI,iBAAiB4d,MAAK,SAAAi4D,GAAI,OAAIA,EAAK71E,IAAI,QAAUgvZ,EAAOhvZ,IAAI,SAC1E6gU,IACC0of,GACFA,EAAkC5pjB,EAAQ3/P,IAAI,iBAEhD6gU,EAAOmuF,GAET,IAAMloC,EAAYjmD,EAAK7gU,IAAI,aACrBy6W,EAAa55C,EAAK7gU,IAAI,cACtB2nX,EAAiB9mD,EAAK7gU,IAAI,kBAC1BmrjB,EAAyC,SAA1BtqP,EAAK7gU,IAAI,aAC1By6W,EACC3vW,OAAO2vW,GAENkN,EACE83C,YAAsB93C,GACtB/pX,OAAO68W,GAAYqvc,eAAe,QAAS,CAAEC,sBAAuB,KAHtE,IAIN,OACG/6Z,EAAOhvZ,IAAI,eACT6gU,EAAK7gU,IAAI,iBACN,cAAC,IAAD,CACE01G,MAAM,SADR,SAIG,UAJH,UAEOmrN,EAAK7gU,IAAI,oBAFhB,QAEgC24c,GAIhC,eAAC,IAAD,CACEjjW,MAAM,SADR,UAIGy1c,EACArgjB,OAAO2vW,IAA6B,eAAdqM,EAA6B,IAAM,KAL5D,UAEOjmD,EAAK7gU,IAAI,oBAFhB,QAEgC24c,OAS1C,cAAC,IAAD,CAAWjjW,MAAM,SAAjB,SAEIuiD,EAAIj4J,IAAI,aACR,cAAC,IAAD,CAASmmH,MAAOn+F,EAAE,4BAAlB,SACE,cAAC,IAAD,CAAkBk6E,MAAM,mBAK/BgntB,EAAelpzB,IAAf,UAAsB5H,KACrB,cAAC,IAAD,UACE,cAAC,IAAD,CACE+3xB,QAASl4nB,EAAIj4J,IAAI,gBAAiBqlB,iBAAO,KAAKrtB,KAAO,EACrD+/E,QAAQ,OAFV,SAIE,eAAC,IAAD,CACEtC,WAAW,EACXgB,KAAK,SACLpB,UAAWF,EAAQ60uB,mBACnBzzuB,QAAS,EAJX,UAME,eAAC,IAAD,CACEV,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQ80uB,YACnB1zuB,QAAS,EALX,UAOE,cAAC,IAAD,CAAMV,MAAM,EAAMR,UAAWF,EAAQu0uB,SAArC,SACE,mCAAS1hyB,EAAE,kCAAX,SAEF,cAAC,IAAD,CAAM6tD,MAAM,EAAMR,UAAWF,EAAQu0uB,SAArC,SACGzxpB,EAAIj4J,IAAI,oBAGb,eAAC,IAAD,CACE61E,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQ80uB,YACnB1zuB,QAAS,EALX,UAOE,cAAC,IAAD,CAAMV,MAAM,EAAMR,UAAWF,EAAQu0uB,SAArC,SACE,mCAAS1hyB,EAAE,2BAAX,SAEF,cAAC,IAAD,CAAM6tD,MAAM,EAAMR,UAAWF,EAAQu0uB,SAAUnysB,MAAO,CAAEmb,WAAY,YAApE,SACGulC,EAAIj4J,IAAI,sBA7IF,MAAQ5H,mBA4J7C,cAAC,IAAD,UACE,eAAC,IAAD,CACEq9E,WAAW,EACXc,QAAS,EACTE,KAAK,SAHP,UAKE,cAAC,IAAD,CAAMZ,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAAC,IAAD,CAAMpB,WAAW,EAAME,UAAU,MAAjC,UAEIwzuB,GACA,eAAC,IAAD,CACEtzuB,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQqsP,UAHrB,UAKE,mEAA8C,sBAC7C7hE,EAAQ3/P,IAAI,aAGjB,cAAC,IAAD,CACE61E,MAAM,EACNgB,GAAIsyuB,EAAgB,EAAI,GACxB9zuB,UAAWF,EAAQqsP,UAHrB,SAMG7hE,EAAQ3/P,IAAI,eAKnB,cAAC,IAAD,CACE61E,MAAM,EACNR,UAAWF,EAAQ+0uB,YAFrB,SAIGvqjB,EAAQ3/P,IAAI,uBACT2/P,EAAQ3/P,IAAI,uBAAuB6E,WAAWI,KAAI,SAACqhrB,EAAWlurB,GAC5D,IAAMuvX,EAAiB2+T,EAAKtmrB,IAAI,kBAC5By/Z,YAAsB6mR,EAAKtmrB,IAAI,mBAC/B8wkB,YAAmB,CACjBn5kB,MAAO2urB,EAAKtmrB,IAAI,SAChBwnX,eAAgB34F,IAAiBmiT,aACjCvpN,iBAAkB34F,IAAkB2hT,MAG1C,OAAO,gCACJ61G,EAAKtmrB,IAAI,QADL,eACmB2nX,GADnB,OAC8D,eAA1B2+T,EAAKtmrB,IAAI,aAAgC,IAAM,MADnF,qBAAwB5H,OAIjC,mB,GAzZWsoC,aAsbdwwC,sBACbgG,aAziBa,SAACC,GAAD,MAA+B,CAC5CkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GACRD,MAAO,qBAET2yuB,YAAa,CACX7yuB,QAAS,OACT02C,SAAU,gBACVp2C,eAAgB,WAEhB,SAAU,CACR23C,aAAc,QAEhB,QAAS,CACPA,aAAc,SAGlBm6rB,eAAgB,CACdlyuB,MAAO,OACPQ,QAAS,gBAEX8xuB,sBAAuB,CACrBvosB,OAAQ,UACRvpC,QAAS,gBAEXypP,UAAW,CACT9uM,WAAY,YAEdi3rB,SAAU,CACR3yrB,WAAY7/C,EAAM+pC,QAAQC,KAAK,MAEjCuosB,SAAU,CACRxntB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B6osB,mBAAoB,CAClBjyuB,QAAS,GAEXkyuB,YAAa,CACX1yuB,MAAO,EACPe,SAAU,GAEZktgB,YAAa,CACXjugB,MAAO,EACP+uC,SAAU,SACVsL,aAAc,WACdc,WAAY,SACZp6C,SAAU,GAEZ6xuB,sBAAuB,CACrBpyuB,QAAS,UAEX6xuB,UAAW,CACT7xuB,QAAS,OAEXqyuB,YAAa,CACXtzrB,OAAQ,oBACRpT,aAAc,MACdi9M,eAAgB,QAChBr6M,SAAU,aA6eO,CAAE2E,WAAW,IAChC7vE,YAAgB,gBAChBwqE,cACA9K,mBAvBsB,SAAC73E,EAAOyF,GAC9B,IAAMqmpB,EAAkBrmpB,EAASqmpB,gBAC3BC,EAAgBloe,YAAkB,CAAE30G,UAAW48kB,GAA/Bjoe,CAAkD7jL,GACxE,OAAO,aACL+rpB,iBACGjgpB,YAAyB,CAC1BwtoB,eAAgB1oiB,eAChB89O,eAAgBn4K,YAAsB,YACtCmsH,wBAAyB7zL,eAHxB/iG,CAIA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAIWsqC,CAKb83uB,I,6BClmBF,sCAAMqB,EAAqB,SAAC1yzB,GAAD,OAAkC,MAATA,EAAgB,GAAKmT,OAAOnT,IAAQ09C,eAS3Ek6tB,EAAqB,SAAC53wB,EAAYuiM,GAC7C,OAA0E,IAAnEmwnB,EAAmB1yzB,GAAO8kB,QAAQ4tyB,EAAmBnwnB,M,6BCR9D,IAAI0oB,EAAyBvrN,EAAQ,IAErCD,EAAQuhN,YAAa,EACrBvhN,EAAQywH,QAMR,SAAuByisB,GACrB,KAAKtyzB,GAAiB,IAATA,GAAcsyzB,IACrBC,EAAO1isB,QAAS,CAClB,IAAI2isB,EAAYvoxB,SAASC,cAAc,OACvCsoxB,EAAUjzsB,MAAM2B,SAAW,WAC3BsxsB,EAAUjzsB,MAAMgZ,IAAM,UACtBi6rB,EAAUjzsB,MAAMhgC,MAAQ,OACxBizuB,EAAUjzsB,MAAMiW,OAAS,OACzBg9rB,EAAUjzsB,MAAM+O,SAAW,SAC3BrkF,SAASywC,KAAKymO,YAAYqxgB,GAC1BxyzB,EAAOwyzB,EAAU1ke,YAAc0ke,EAAUnvrB,YACzCp5F,SAASywC,KAAK0mO,YAAYoxgB,GAI9B,OAAOxyzB,GAnBT,IAEIA,EAFAuyzB,EAAS3nmB,EAAuBvrN,EAAQ,OAsB5CF,EAAOC,QAAUA,EAAO,S,6BC3BxB,IAAIwrN,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,wIACD,YAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,0LACD,sBAEJ3K,EAAQywH,QAAUq4I,G,qWCkCL1qD,EAAY,oBAEnBk3kB,EAA0B,SAAC/0xB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IACjFi3P,EAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,cAAexqF,IAkChFm0sB,E,4MAuCGlxsB,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAII,EAAKg3B,MAHPS,EADF,EACEA,SAEA8yE,GAHF,EAEED,UAFF,EAGEC,MAGIC,EAAY/7G,OAAO47G,GACP,MAAdA,GACF5yE,EAAS,IAAIgzE,IAAkBJ,IAC/B5yE,EAAS,IAAIizE,IAA8B,CAAEF,gBAG7C/yE,EAASu/B,YAAOuzC,EAAM,YAAa,OAEjCvqG,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAII,EAAKg3B,MAHPS,EADF,EACEA,SAEA8yE,GAHF,EAEEM,UAFF,EAGEN,MAGA9yE,EADgB,MAAdmzE,EACO,IAAIE,IAAcF,GAElB5zC,YAAOuzC,EAAM,aAAc,OAElCvqG,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAII,EAAKh0E,MAHPS,EADF,EACEA,SAEA8yE,GAHF,EAEEU,OAFF,EAGEV,MAEY,MAAVS,GAKFvzE,EAASu/B,YAAOuzC,EAAM,SAAU,Q,EAI7B6+M,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IA+CMwtH,EAAU,CACd,IAhDqBp+G,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAM2xF,EAAkB3xF,EAAI7gQ,MAAM,CAAC,kBAAmB,OAChDyyV,EAAiB5xF,EAAI7gQ,MAAM,CAAC,iBAAkB,OAE9CozM,EAAYytD,EAAI7gQ,MAAM,CAAC,YAAa,OACpC6yV,EAAkBhyF,EAAI19Q,IAAI,qBAE1BuwN,EAAemtD,EAAI19Q,IAAI,gBACvBi/d,EAAuB1uQ,GAAgB48I,YAAsB58I,GAC/D0uQ,EACFvhN,EAAI/5Q,IAAI,eAAgBs7d,GACf1uQ,GACTmtD,EAAIj5J,OAAO,gBAGb,IAAMyrG,EAAcwtD,EAAI19Q,IAAI,eACtB6vW,EAAsB3/I,GAAei9I,YAAsBj9I,GAC7D2/I,EACFnyF,EAAI/5Q,IAAI,cAAeksW,GACd3/I,GACTwtD,EAAIj5J,OAAO,eAGb4qP,GAAmB3xF,EAAIvxQ,MAAM,CAAC,kBAAmB,MAAOkjW,EAAgBnyU,IACxEoyU,GAAkB5xF,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAOmjW,EAAepyU,IAErE+yL,EAAYytD,EAAIvxQ,MAAM,CAAC,YAAa,MAAO8jN,EAAU/yL,IAAMwgP,EAAIj5J,OAAO,aACtEirP,IAAoBA,EAAgB1vW,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,oBAAqB,MAAOujW,EAAgB7yV,MAAM,CAAC,KAAM,QAAU6gQ,EAAIj5J,OAAO,sBAErIi5J,EAAI19Q,IAAIszR,MACV5V,EAAIj5J,OAAO6uK,QAKZ1rR,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBACF1M,QAAO,SAAC7P,GAEP,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAO7iB,EAAMqI,IAAIO,EAAI,KAAuC,OAAhC5I,EAAMklB,MAAM,CAACtc,EAAI,GAAI,UAIvBia,QAG9B8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAMI,EAAK9pU,MALPS,EADF,EACEA,SACA8yE,EAFF,EAEEA,KACAzxE,EAHF,EAGEA,QACAqmU,EAJF,EAIEA,uBACA4B,EALF,EAKEA,aAGFtpU,EAASggC,YAAM8yC,GAAQ87F,IACvB06J,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,wDA7KV,SAA0BvtJ,EAAW4yJ,GACnC,MAQIjxQ,KAAKkqC,MAPPygE,EADF,EACEA,KACAyT,EAFF,EAEEA,aACAi2P,EAHF,EAGEA,mBACAl5P,EAJF,EAIEA,WACAq5P,EALF,EAKEA,YACAgiP,EANF,EAMEA,qBACA/hP,EAPF,EAOEA,iBAGE9pQ,GAASA,IAAS0T,EAAU1T,OAC9ByT,IACAi2P,IACAG,EAAY,GAAIgiP,IAcdn4e,EAAUu2P,0BAA4B50W,KAAKkqC,MAAM0qU,0BAAoE,IAAxC50W,KAAKkqC,MAAM0qU,yBAC1FH,EAAiBz0W,KAAKkqC,MAAM0qU,yBAG1Bz5P,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAgJlB,WACE,MAmBIn7G,KAAKkqC,MAlBPS,EADF,EACEA,SACAuuC,EAFF,EAEEA,QACAyxB,EAHF,EAGEA,KACAg4N,EAJF,EAIEA,aACAnlN,EALF,EAKEA,UACAq3P,EANF,EAMEA,eACA92P,EAPF,EAOEA,UACAI,EARF,EAQEA,OACAhD,EATF,EASEA,WACA65P,EAVF,EAUEA,cACAnhJ,EAXF,EAWEA,gBACA0jY,EAZF,EAYEA,YACA/hP,EAbF,EAaEA,YACAnzC,EAdF,EAcEA,aACAm0R,EAfF,EAeEA,qBACAhiP,EAhBF,EAgBEA,YACAc,EAjBF,EAiBEA,UACAvpV,EAlBF,EAkBEA,EAGIwxF,EAA2B,MAAdpC,EAAqBA,EAAWv6F,MAAM,CAAC,WAAY,UAAW,QAAU,EACrF88F,EAAkC,MAAdH,EAAqB57G,OAAO47G,IAAe,EAC/Dg4P,EAAgB9gL,oBAAUogL,EAAe9wW,IAAI25G,EAAW,aAExDg6e,EAAgBH,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GAC7C,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GACpCA,EAAajwlB,IAAI,KAAMs4F,GACvB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAG5C,OAAO8yB,EAAI9sI,KAAKmyQ,KACftmQ,kBAEH,OACE,mCACE,cAAC,IAAD,CACEmhE,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC,IAAD,CACE/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACE+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,gBAGnB9uG,KAAK,eACL8qE,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAOy0U,EACP37P,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAK69G,iBAGnBrvG,KAAK,gBACL8qE,UAAWslC,QAGf,cAAC,IAAD,CACEhlC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CAEE1wC,MAAO,CACLpJ,MAAO/U,EAAE,sBACT6tF,iBAAkB,CAChBC,WAAW,GAEb0E,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,aAGnBzvG,KAAK,YACL8qE,UAAWslC,WAMjB,cAAC,IAAD,CACElF,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANX,UAQE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,qBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS6nL,EAAgBtwN,eAAegb,OACxCuiB,MAAO/U,EAAE,+BACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,OACzC8/G,SAAU,SAAC2rB,EAAezrI,GAAhB,OAAgCA,GAASivC,EAASi/B,YAAS2vI,EAAW,sBAAkBz9M,MAEpG89G,iBAAkB,CAChBC,WAAW,QAMnB,cAAC,IAAD,CACEjgC,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASgpU,GAAiBA,EAAcz2V,OACxCuiB,MAAO/U,EAAE,8BACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE3Ck+G,iBAAkB,CAChBC,WAAW,WAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GACXh4R,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,kBAQF,cAAC,IAAD,CACEt8C,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,kBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GACXh4R,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,+BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACs3P,GACXh4R,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAI,mBACJ07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACy2qB,GACXn3sB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,2BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,+BACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,uCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,uBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASwpU,EAAYj3V,OACrBysG,YAAaj/F,EAAE,gDACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOj0D,WAAa,MACvDisQ,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAOj0D,eAExDqtD,iBAAkB,CAChBC,WAAW,eArZlBy7P,W,GAtOc7wU,aA2tBhBwwC,sBACbgG,aAlFa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,oBACPlH,SAAU,QAEZ8sP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCgyF,gBAAiB,CACf96P,UAAW,GAEbm6P,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,eAmDvCtI,mBA9CsB,SAAC73E,EAAOyF,GAE9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO87F,EAE/Cq7J,GADcx5P,wBAAcqC,EAAdrC,CAAoBp0E,IAAUp0B,iBACPgO,MAAM,CAAC,kBAAmB,KAAM,OAAQ,GAC7E41kB,EAAuBptiB,eAAyBpiB,GAChD0f,EAASD,eAAuBzf,GAEtC,OAAO,aACLy2E,OACAm3P,0BACA4hP,wBACG1jjB,YAAyB,CAC1B+hU,eAAgBrpF,cAChBwpF,cAAeqC,YAAwBzC,GACvCp3P,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR60G,gBAAiByjJ,cACjBn8P,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACbk0P,YAAax6N,aAAwB,CAACt0F,YATrC5T,CAUA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEfw1P,iBAAkB,SAACxzU,GACjB0J,EAAS,IAAI65S,IAAuBvjT,KAEtCozU,mBAAoB,WAClB1pU,EAAS,IAAIq5S,MAEfwwB,YAAa,SAACh3O,EAAoBlxE,GAChC3hB,EAAS,IAAImwB,KAAiC,CAAE0iE,aAAYlxE,eAE9D3hB,eAOF2sP,YAAmC,CAAEt2B,SAAUznD,IAC/CguH,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUbu5uB,I,qWC1wBWj1mB,EAAY,sBAEnBk3kB,EAA0B,SAAC/0xB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IACjFi3P,EAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,cAAexqF,IAkChFo0sB,E,4MAwDKnxsB,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC3E,EAII,EAAKg3B,MAHLS,EADJ,EACIA,SAEA8yE,GAHJ,EAEID,UAFJ,EAGIC,MAGEC,EAAY/7G,OAAO47G,GACP,MAAdA,GACA5yE,EAAS,IAAIgzE,IAAkBJ,IAC/B5yE,EAAS,IAAIizE,IAA8B,CAAEF,gBAG7C/yE,EAASu/B,YAAOuzC,EAAM,YAAa,OAEnCvqG,GACA,EAAK2qG,kB,EAGNA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACpE,EAII,EAAKg3B,MAHLS,EADJ,EACIA,SAEA8yE,GAHJ,EAEIM,UAFJ,EAGIN,MAGA9yE,EADc,MAAdmzE,EACS,IAAIE,IAAcF,GAElB5zC,YAAOuzC,EAAM,aAAc,OAEpCvqG,GACA,EAAK+qG,c,EAGNA,WAAa,SAACC,GACjB,MAII,EAAKh0E,MAHLS,EADJ,EACIA,SAEA8yE,GAHJ,EAEIU,OAFJ,EAGIV,MAEU,MAAVS,GAKAvzE,EAASu/B,YAAOuzC,EAAM,SAAU,Q,EAIjC6+M,SAAW,SAACnxT,GACf,MAGI,EAAK++B,MAFL8B,EADJ,EACIA,QACAqmU,EAFJ,EAEIA,uBAGJ,GAAIlnW,EAAOpP,KAAM,CACb,IA+CMwtH,EAAU,CACZ,IAhDmBp+G,EAAO6F,eAAc,SAAAywQ,GACxC,IAAM2xF,EAAkB3xF,EAAI7gQ,MAAM,CAAC,kBAAmB,OAChDyyV,EAAiB5xF,EAAI7gQ,MAAM,CAAC,iBAAkB,OAE9CozM,EAAYytD,EAAI7gQ,MAAM,CAAC,YAAa,OACpC6yV,EAAkBhyF,EAAI19Q,IAAI,qBAE1BuwN,EAAemtD,EAAI19Q,IAAI,gBACvBi/d,EAAuB1uQ,GAAgB48I,YAAsB58I,GAC/D0uQ,EACAvhN,EAAI/5Q,IAAI,eAAgBs7d,GACjB1uQ,GACPmtD,EAAIj5J,OAAO,gBAGf,IAAMyrG,EAAcwtD,EAAI19Q,IAAI,eACtB6vW,EAAsB3/I,GAAei9I,YAAsBj9I,GAC7D2/I,EACAnyF,EAAI/5Q,IAAI,cAAeksW,GAChB3/I,GACPwtD,EAAIj5J,OAAO,eAGf4qP,GAAmB3xF,EAAIvxQ,MAAM,CAAC,kBAAmB,MAAOkjW,EAAgBnyU,IACxEoyU,GAAkB5xF,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAOmjW,EAAepyU,IAErE+yL,EAAYytD,EAAIvxQ,MAAM,CAAC,YAAa,MAAO8jN,EAAU/yL,IAAMwgP,EAAIj5J,OAAO,aACtEirP,IAAoBA,EAAgB1vW,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,oBAAqB,MAAOujW,EAAgB7yV,MAAM,CAAC,KAAM,QAAU6gQ,EAAIj5J,OAAO,sBAErIi5J,EAAI19Q,IAAIszR,MACR5V,EAAIj5J,OAAO6uK,QAKd1rR,QAAO,SAACutI,EAAK3tI,EAAQjH,GAClB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACnCA,EAAI/5Q,IAAIpD,EAAKiH,MAEjB,OAAO2tI,EAAI9sI,KAAK0nW,KACjB77V,kBACF1M,QAAO,SAAC7P,GAEL,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAO7iB,EAAMqI,IAAIO,EAAI,KAAuC,OAAhC5I,EAAMklB,MAAM,CAACtc,EAAI,GAAI,UAIzBia,QAGhC8zV,EAAuB,CACnBrmU,QAAQ,2BACDA,GADA,IAEHl+B,OAAQ,IAEZy7G,UACAqiJ,KAAM,M,EAKXooG,gBAAkB,WACrB,MAMI,EAAK9pU,MALLS,EADJ,EACIA,SACA8yE,EAFJ,EAEIA,KACAzxE,EAHJ,EAGIA,QACAqmU,EAJJ,EAIIA,uBACA4B,EALJ,EAKIA,aAGJtpU,EAASggC,YAAM8yC,GAAQ87F,IACvB06J,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACnBrmU,QAAQ,2BACDA,GADA,IAEHl+B,OAAQ,IAEZy7G,QAAS,KACTqiJ,KAAM,K,uDA9Ld,YAKIxtJ,EAFIp+G,KAAKkqC,MADLk0E,kB,gCAMR,SAA0BC,EAAW4yJ,GACjC,MASIjxQ,KAAKkqC,MARLygE,EADJ,EACIA,KAEA0pQ,GAHJ,EAEIj2P,aAFJ,EAGIi2P,oBACAl5P,EAJJ,EAIIA,WACAq5P,EALJ,EAKIA,YACAgiP,EANJ,EAMIA,qBACA/hP,EAPJ,EAOIA,iBACA9pU,EARJ,EAQIA,SAqBJ,GAlBIggE,GAASA,IAAS0T,EAAU1T,OAE5B0pQ,IACAG,EAAY,GAAIgiP,IAeD,OAAfr7e,GAAuBA,IAAekD,EAAUlD,WAAY,CAC5D,IAAMuC,EAAYvC,EAAWv6F,MAAM,CAAC,YAAa,OAC7C88F,GAAaA,KAAeW,EAAUlD,YAAcvoG,iBAAOgO,MAAM,CAAC,YAAa,QAC/E+pB,EAAS,IAAIgzE,IAAkBD,IAInCW,EAAUu2P,0BAA4B50W,KAAKkqC,MAAM0qU,0BAAoE,IAAxC50W,KAAKkqC,MAAM0qU,yBACxFH,EAAiBz0W,KAAKkqC,MAAM0qU,yBAG5Bz5P,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAC9Dn7G,KAAKs8T,SAASnhN,K,oBAgJtB,WACI,MAmBIn7G,KAAKkqC,MAlBLS,EADJ,EACIA,SACAuuC,EAFJ,EAEIA,QACAyxB,EAHJ,EAGIA,KACAg4N,EAJJ,EAIIA,aACAnlN,EALJ,EAKIA,UACAq3P,EANJ,EAMIA,eACA92P,EAPJ,EAOIA,UACAI,EARJ,EAQIA,OACAhD,EATJ,EASIA,WACA65P,EAVJ,EAUIA,cACAnhJ,EAXJ,EAWIA,gBACA0jY,EAZJ,EAYIA,YACA/hP,EAbJ,EAaIA,YACAnzC,EAdJ,EAcIA,aACAm0R,EAfJ,EAeIA,qBACAhiP,EAhBJ,EAgBIA,YACAc,EAjBJ,EAiBIA,UACAvpV,EAlBJ,EAkBIA,EAGEwxF,EAA2B,MAAdpC,EAAqBA,EAAWv6F,MAAM,CAAC,WAAY,UAAW,QAAU,EACrF88F,EAAkC,MAAdH,EAAqB57G,OAAO47G,IAAe,EAC/Dg4P,EAAgB9gL,oBAAUogL,EAAe9wW,IAAI25G,EAAW,aAExDg6e,EAAgBH,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GAC3C,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GAClCA,EAAajwlB,IAAI,KAAMs4F,GACnB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAGlD,OAAO8yB,EAAI9sI,KAAKmyQ,KACjBtmQ,kBAEH,OACI,cAAC,IAAD,CACImhE,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACL64C,MAAO74C,EAAQy8R,aAEnBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARvC,SAUI,uBAEI2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHvB,UAMI,eAAC,IAAD,CACI2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJf,UAMI,cAAC,IAAD,CACIygC,QAAQ,KADZ,SAGK3tF,EAAE,6BAEP,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNgB,GAAI,EAJR,UAMI,cAAC,IAAD,CACIqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFlB,SAIKjoV,EAAE,6BAEP,cAAC,IAAD,CACI84F,QAAS89M,EADb,SAGI,cAAC,IAAD,YAMZ,eAAC,IAAD,CACI/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFvB,UAKI,cAAC,IAAD,CACI+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,mCAEP,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANb,UAQI,cAAC,IAAD,CACIV,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CAEI1wC,MAAO,CACHpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CACdC,WAAW,GAEf0E,iBAAkB,CAEdC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACrB,OAAO,IAGf/E,WAAY,CACR6B,SAAUx7G,KAAKs9G,gBAGvB9uG,KAAK,eACL8qE,UAAWslC,QAGnB,cAAC,IAAD,CACIhlC,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CAEI1wC,MAAO,CACHpJ,MAAOy0U,EACP37P,iBAAkB,CACdC,WAAW,GAEf0E,iBAAkB,CAEdC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACrB,OAAO,IAGf/E,WAAY,CACR6B,SAAUx7G,KAAK69G,iBAGvBrvG,KAAK,gBACL8qE,UAAWslC,QAGnB,cAAC,IAAD,CACIhlC,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CAEI1wC,MAAO,CACHpJ,MAAO/U,EAAE,sBACT6tF,iBAAkB,CACdC,WAAW,GAEf0E,iBAAkB,CAEdC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACtC,OAAwB,IAAjBA,EAAMmG,SAGrB83G,WAAY,CACR6B,SAAUx7G,KAAKi+G,aAGvBzvG,KAAK,YACL8qE,UAAWslC,WAMvB,cAAC,IAAD,CACIlF,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,iCAEP,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,gBACRU,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EANb,UAQI,cAAC,IAAD,CACIV,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAK,qBACL8qE,UAAWi/O,IACXruR,MAAO,CACHyvE,WAAY,CACR3tE,QAAS6nL,EAAgBtwN,eAAegb,OACxCuiB,MAAO/U,EAAE,+BACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,OACzC8/G,SAAU,SAAC2rB,EAAezrI,GAAhB,OAAgCA,GAASivC,EAASi/B,YAAS2vI,EAAW,sBAAkBz9M,MAEtG89G,iBAAkB,CACdC,WAAW,QAM3B,cAAC,IAAD,CACIjgC,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACHyvE,WAAY,CACR3tE,QAASgpU,GAAiBA,EAAcz2V,OACxCuiB,MAAO/U,EAAE,8BACTs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAUA,EAAO9kH,QAE7Ck+G,iBAAkB,CACdC,WAAW,WAQ/B,cAAC,IAAD,CACIH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,+BAEP,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPb,UASI,cAAC,IAAD,CACIV,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAI,kBACJ07B,MAAO,CACHwyE,UAAW,QACXE,wBAAyB,CACrBoO,YAAaj/F,EAAE,8BAEnB6tF,iBAAkB,CACdC,WAAW,IAGnBG,SAAU,CAACs3P,GACXh4R,UAAW6jC,QAInB,cAAC,IAAD,CACIvjC,MAAM,EADV,SAGI,cAAC,IAAD,CACI8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,kBAQJ,cAAC,IAAD,CACIt8C,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAI,kBACJ07B,MAAO,CACHwyE,UAAW,MACXE,wBAAyB,CACrBoO,YAAaj/F,EAAE,4BAEnB6tF,iBAAkB,CACdC,WAAW,IAGnBG,SAAU,CAACs3P,GACXh4R,UAAW6jC,WAMvB,cAAC,IAAD,CACIzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,+BAEP,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPb,UASI,cAAC,IAAD,CACIV,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAI,mBACJ07B,MAAO,CACHwyE,UAAW,QACXE,wBAAyB,CACrBoO,YAAaj/F,EAAE,8BAEnB6tF,iBAAkB,CACdC,WAAW,IAGnBG,SAAU,CAACs3P,GACXh4R,UAAW6jC,QAInB,cAAC,IAAD,CACIvjC,MAAM,EADV,SAGI,cAAC,IAAD,CACI8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,4BAIX,cAAC,IAAD,CACI6tD,MAAM,EACNgB,GAAI,EAFR,SAII,cAAC,QAAD,CACIpsE,KAAI,mBACJ07B,MAAO,CACHwyE,UAAW,MACXE,wBAAyB,CACrBoO,YAAaj/F,EAAE,4BAEnB6tF,iBAAkB,CACdC,WAAW,IAGnBG,SAAU,CAACy2qB,GACXn3sB,UAAW6jC,WAMvB,cAAC,IAAD,CACIzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,2BAEP,cAAC,IAAD,CACIytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJb,SAMI,cAAC,IAAD,CACIV,MAAM,EACNgB,GAAI,GAFR,SAII,cAAC,QAAD,CACIpsE,KAAK,eACL8qE,UAAWi/O,IACXruR,MAAO,CACHyvE,WAAY,CACR3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,+BACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAE1Dk+G,iBAAkB,CACdC,WAAW,UAQ/B,cAAC,IAAD,CACIH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIKnqG,EAAE,uCAEP,cAAC,IAAD,CACIytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJb,SAMI,cAAC,IAAD,CACAV,MAAM,EACNgB,GAAI,GAFJ,SAIA,cAAC,QAAD,CACIpsE,KAAK,uBACL8qE,UAAWi/O,IACXruR,MAAO,CACPyvE,WAAY,CACR3tE,QAASwpU,EAAYj3V,OACrBysG,YAAaj/F,EAAE,gDACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOj0D,WAAa,MACvDisQ,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAOj0D,eAE1DqtD,iBAAkB,CACdC,WAAW,eAjZtBy7P,S,GAtPU7wU,aAuuBpBwwC,sBACXgG,aAnFW,SAACC,GAAD,MAA+B,CAC1Cw6R,OAAQ,CACJnkP,OAAQ,QAEZokP,YAAa,CACT14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEhBiiB,OAAQ,CACJ5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAEpC7D,KAAM,CACFqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAU,SAEd3gC,QAAS,CACL41E,OAAO,oBACPlH,SAAU,QAEd8sP,kBAAmB,CACf9jP,aAAcn4C,EAAMZ,QAAQ,MAEhC47C,SAAU,CACNjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAEvCgyF,gBAAiB,CACb96P,UAAW,OAwDfuC,mBApDoB,SAAC73E,EAAOyF,GAE5B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO87F,EAE/Cq7J,GADcx5P,wBAAcqC,EAAdrC,CAAoBp0E,IAAUp0B,iBACPgO,MAAM,CAAC,kBAAmB,KAAM,OAAQ,GAC7E41kB,EAAuBptiB,eAAyBpiB,GAChD0nxB,EAAiB74qB,cAAuC7uG,GACxD02E,EAAS,OAAGgxsB,QAAH,IAAGA,OAAH,EAAGA,EAAgB9tyB,MAAM,CAAC,UAAW,OAC9C8lC,EAASD,eAAuBzf,GAClCs3E,EAAgBl1F,iBAAO,IAI3B,OAHiB,MAAbs0F,IACAY,EAAgBA,EAAcpuG,MAAM,CAAC,YAAa,MAAlC,UAA4CwtG,KAEzD,aACHD,OACAa,gBACAs2P,0BACA4hP,wBACG1jjB,YAAyB,CACxB+hU,eAAgBrpF,cAChBwpF,cAAeqC,YAAwBzC,GACvCp3P,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR60G,gBAAiByjJ,cACjBn8P,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACbk0P,YAAax6N,aAAwB,CAACt0F,YATvC5T,CAUA9L,OAIgB,SAAC2D,GACxB,MAAO,CACHyzE,aAAc,WACVzzE,EAAS,IAAIs0E,MAEjBw1P,iBAAkB,SAACxzU,GACf0J,EAAS,IAAI65S,IAAuBvjT,KAExCozU,mBAAoB,WAChB1pU,EAAS,IAAIq5S,MAEjBwwB,YAAa,SAACh3O,EAAoBlxE,GAC9B3hB,EAAS,IAAImwB,KAAiC,CAAE0iE,aAAYlxE,eAEhE3hB,eAOJ2sP,YAAmC,CAAEt2B,SAAUznD,IAC/CguH,oBAAU,CACNC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEnBt4T,YAAgB,gBATL81B,CAUbw5uB,I,yQCryBWpqV,EAAgC,0BAoBvCorG,E,4MACGzoiB,MAAQ,CACb2nxB,qBAAsB,GACtBC,kBAAmB,I,EA2Cdtyf,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAEF,GAAIlnW,EAAOpP,KAAM,CACf,IAyBMm3b,EAzBiB/nb,EAAO6F,eAAc,SAAAywQ,GAAQ,IAAD,IAC3CxkI,EAAewkI,EAAI19Q,IAAI,kBACvBqzH,EAAWqqJ,EAAI19Q,IAAI,cACnBusV,EAAS,UAAG7uE,EAAI19Q,IAAI,oBAAX,QAA2BkU,iBACpC42yB,EAAW,UAAGptiB,EAAI19Q,IAAI,sBAAX,QAA6BkU,iBAE1CglI,IACFA,EAAar8H,MAAM,CAAC,KAAM,OACtB6gQ,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAO+sI,EAAar8H,MAAM,CAAC,KAAM,QAC9D6gQ,EAAIj5J,OAAO,mBAEb4O,IACFA,EAASx2G,MAAM,CAAC,KAAM,OAClB6gQ,EAAIvxQ,MAAM,CAAC,aAAc,MAAOknH,EAASx2G,MAAM,CAAC,KAAM,QACtD6gQ,EAAIj5J,OAAO,eAEb8nO,EAAUltU,UAAYyryB,EAAYzryB,SACpCq+P,EAAIvxQ,MAAM,CAAC,cAAe,MAAO,UAE/B2+yB,EAAYzryB,UAAYktU,EAAUltU,SACpCq+P,EAAIvxQ,MAAM,CAAC,cAAe,MAAO,YAEnCuxQ,EAAIj5J,OAAO,aACXi5J,EAAIj5J,OAAO,kBAGV78G,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBACGsxG,EAAU2pU,EAAqBn3b,KACjC,CAAE,IAAOm3b,EAAqB30a,QAC9B,GAEN8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAqmU,EAHF,EAGEA,uBACA4B,EAJF,EAIEA,aAGFtpU,EACE8/B,YACE45Z,EACA,KAIJ15b,EAASggC,YAAM05Z,IACfpwH,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,wDArHV,SAA0BvtJ,EAAW4yJ,GACnC,MAIIjxQ,KAAKkqC,MAHPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WACAk/U,EAHF,EAGEA,sBAQF,GAAI1vV,IAAUA,IAAS0T,EAAU1T,OAAU0vV,EAAsBj1b,OAAOi5G,EAAUg8U,wBAAyB,CAAC,IAAD,IACnGy0X,EAAuB,UAAGz0X,EAAsBt2b,IAAI,eAA7B,aAAG,EAAmC4H,QAAO,SAACkC,EAAKqtK,GAC9E,OAAKrtK,EAAI9J,IAAIm3K,EAAIt6J,MAAM,CAAC,eAAgB,QAGjC/S,EAFEA,EAAInG,IAAIwzK,EAAIt6J,MAAM,CAAC,eAAgB,OAAQs6J,EAAIn3K,IAAI,mBAG3D6O,iBAAOrP,eAAegb,OAEnBwwyB,EAAoB,UAAG10X,EAAsBt2b,IAAI,eAA7B,aAAG,EAAmC4H,QAAO,SAACkC,EAAKqtK,GAC3E,OAAKrtK,EAAI9J,IAAIm3K,EAAIt6J,MAAM,CAAC,WAAY,QAG7B/S,EAFEA,EAAInG,IAAIwzK,EAAIt6J,MAAM,CAAC,WAAY,OAAQs6J,EAAIn3K,IAAI,eAGvD6O,iBAAOrP,eAAegb,OAEzBve,KAAK4iH,SAAS,CACZ+rsB,qBAAsBG,GAA2B,GACjDF,kBAAmBG,GAAwB,KAI3C5zsB,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,YAChEn7G,KAAKs8T,SAASnhN,IACJA,GAAckD,EAAUlD,YAClCn7G,KAAKg0W,oB,oBAqFT,WACE,MAGIh0W,KAAKgnC,MAFP2nxB,EADF,EACEA,qBACAC,EAFF,EAEEA,kBAEF,EAOI5uzB,KAAKkqC,MANPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KACAg4N,EAHF,EAGEA,aACAN,EAJF,EAIEA,aACAizC,EALF,EAKEA,UACAvpV,EANF,EAMEA,EAGF,OACE,cAAC,IAAD,CACEqtD,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC,IAAD,CACE/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACI+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFvB,SAIGnqG,EAAE,2BAEL,eAAC,IAAD,CACIytD,WAAW,EACXM,QAAQ,gBACRF,MAAM,EACNgB,GAAI,GAJR,UAME,cAAC,IAAD,CAAMhB,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACIpsE,KAAK,YACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uCACTk6E,MAAO,UACP4mB,YAAY,OAIpB,cAAC,IAAD,CAAMjzC,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACIpsE,KAAK,cACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,yCACTk6E,MAAO,UACP4mB,YAAY,UAMtB,cAAC,IAAD,CACEnT,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,iCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS2ixB,EACT3jsB,YAAaj/F,EAAE,qCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOhyG,KAAO,MACjDgqT,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAOhyG,SAExDorG,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,6BAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNU,QAAS,EACTM,GAAI,GAJN,SAME,cAAC,IAAD,CACEhB,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS4ixB,EACT5jsB,YAAaj/F,EAAE,iCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAOhyG,KAAO,MACjDgqT,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAOhyG,SAExDorG,iBAAkB,CAChBC,WAAW,eA5IlBy7P,S,GAzJsB7wU,aA8VtBwwC,sBACbgG,aA3Ca,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAS,GAAD,OAfa,IAeb,OAEV3gC,QAAS,CACP41E,OAAO,oBACPg2L,UAAW,QAEbrxL,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,SAsBrCvmK,mBAlBsB,SAAC73E,EAAOyF,GAC9B,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAO4mX,EACrD,OAAO,aACL5mX,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,IADzB3qE,CAEA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,eAOF2sP,YAAmC,CAAEt2B,SAAUqjO,IAC/C98J,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUbw6f,I,6BChaF,4LAkBMjgd,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACR/nR,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpCurM,YAAa,CACXt3O,QAAS,QAEX4jT,YAAa,CACXx9Q,YAAatmC,EAAMZ,WAErB02f,GAAI,CACF3md,SAAU,SACVoM,WAAY,SACZd,aAAc,YAEhBgF,WAAY,CACVr/C,MAAO,GACPi2C,OAAQ,SA0LGy6U,IA5K2C,SAAC,GAOpD,IANLhrM,EAMI,EANJA,SACA49I,EAKI,EALJA,iBACA7rF,EAII,EAJJA,SAII,IAHJw5I,8BAGI,aAFJC,+BAEI,MAFsB55b,gBAEtB,EADJ65b,EACI,EADJA,2BAIEnoc,EAKEyuT,EALFzuT,IACAw8B,EAIEiyR,EAJFjyR,MACAkyR,EAGED,EAHFC,OACA1jD,EAEEyjD,EAFFzjD,QACAuiU,EACE9+Q,EADF8+Q,MAGI12d,EAAazpE,sBAAY0pE,wBAAc4lJ,IACvCr2N,EAAW2F,wBACX23D,EAAS8zK,cACPhwP,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,IACVyhd,EAAej+Q,EAAOvxS,KAAK,MAC3B+xS,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAC5E+/S,EAAWa,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,aAC3DovT,EAASF,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,WAE/D,EAQKyvT,YAAcf,GARnB,IACEgB,UACEC,EAFJ,EAEIA,aACAC,EAHJ,EAGIA,kBACAC,EAJJ,EAIIA,YACAC,EALJ,EAKIA,UAEFE,EAPF,EAOEA,QAGF7vR,aAAgB,WACd,GAAKwvR,EAAL,CAIA,IAAMQ,GAAmBx8S,OAAKF,OAAOy7S,GAAY5gT,gBAAQ4gT,GAAUxiT,eAAc,SAACywQ,GAChFA,EAAIpyQ,SAAS,CAAC,QAASuvY,EAAkBt6Y,IAAM,SAAC2R,GAC9C,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,EAAalwT,IAAI,MACzB2wT,SAAUT,EAAalwT,IAAI,gBAC3B4wT,SAAUV,EAAalwT,IAAI,aAC3BhI,KAAMk4T,EAAalwT,IAAI,cAG3B09Q,EAAIpxQ,SAAS,CAAC,QAAS0iT,OAKzB,GAHApoR,EAASu/B,YAAO82L,EAAU,OAAQyzD,IAG9B83I,GAAkC,0BAARjoc,EAAiC,CAC7D,IAAM0qzB,EAAiCxiX,EAAwB9kc,IAAIk3Y,EAAkB3qF,EAAalwT,IAAI,OACtG0oc,EAA2BuiX,OAE5B,CAAC/6f,IAEJ,IAqB0Bi9Q,EAwBpBjyL,EAAWvrF,GAxBSw9Q,EAwBiBx9Q,EAvBvBzrN,EAAOJ,QACvBqpe,EACA,CAAE5qe,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,KAqBxD,GAErD,OACE,eAAC,IAAD,CACElvC,MAAM,EACNJ,WAAW,EACX8hC,MAAO,CAAEsM,aAAc,iBAAkByL,aAAc,GAHzD,UAKE,cAAC,IAAD,CAAYptB,MAAM,cAAlB,SACIl6E,EAAE+U,KAEN,eAAC,IAAD,CAAM04C,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAAC,IAAD,CAAMW,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,UACE,cAAC,IAAD,CACEF,WAAW,EACXgB,KAAK,SACLvB,WAAW,SACXW,MAAM,EAJR,SAOIu6O,EACM,qCACE,cAAC,IAAD,CAAgBz6M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,GAAoB54M,MAAO,CAAEj/B,SAAU,KAC3F,eAAC,IAAD,WAAa63O,EAAb,UAEF,cAAC,IAAD,CAAShqM,MAAOyoM,GAAY,GAA5B,SAEIssF,EACI,cAAC,IAAD,CAAM7xR,KAAM6xR,EAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD7rF,IACpD,cAAC,IAAD,CAAYv5O,UAAWF,EAAQ83f,GAA/B,SAAqCjljB,EAAE,6BAMvDqoS,EAjDR,qCACE,cAAC,IAAD,CAAoBnuN,MAAM,QAAQ7sB,UAAWF,EAAQ8lT,cACrD,cAAC,IAAD,CAAY/4R,MAAM,QAAlB,SAEImuN,IAAcU,IAAW/4T,KACvBgwB,EAAE,qCACFqoS,IAAcU,IAAW50T,KAAzB,UACK6rB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,qCAyCyB,QAI/B4mS,EACI,cAAC,IAAD,CAAY9tM,QArFC,WACvB,IAAM8lL,EAAU6oB,GAAYA,EAASxiT,eAAc,SAACywQ,GAC9CA,EAAI7gQ,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,SAC7Cm9Q,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkBt6Y,EAAK,WAC9Cm9Q,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkBt6Y,EAAK,aAC9Cm9Q,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkBt6Y,EAAK,aAC9Cm9Q,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkBt6Y,EAAK,UAE9Cm9Q,EAAIpxQ,SAAS,CAAC,QAASuuY,EAAkBt6Y,IAE3Cm9Q,EAAIpxQ,SAAS,CAAC,QAAS/L,OAKzB,GAHAqmC,EAASu/B,YAAO82L,EAAU,OAAQ2pC,IAG9B4hK,GAAkC,0BAARjoc,EAAiC,CAC7D,IAAM0qzB,EAAiCxiX,EAAwBhkV,OAAOo2R,GACtE6tD,EAA2BuiX,KAoEoB1zsB,MAAO,CAAEhgC,MAAO,GAAIi2C,OAAQ,IAAnE,SACE,cAAC,IAAD,CAASrH,MAAOn+F,EAAE,sBAAlB,SACE,cAAC,IAAD,QAGJ,qCACE,uBAAO7rB,KAAK,OAAO8yT,OAAQi+Q,EAAchwiB,GAAE,eAAU38B,GAAOg3G,MAAO,CAAElgC,QAAS,QAAUogC,SAAU,SAACpzG,GAAD,OAAOksT,EAAQlsT,EAAE4kB,OAAO2wE,MAAM,OAChI,uBAAOo3N,QAAO,eAAUzwT,GAAOg3G,MAAO,CAAElgC,QAAS,QAAjD,SACE,cAAC,IAAD,CAAS8uC,MAAOn+F,EAAEujP,EAASuiU,GAA3B,SACE,cAAC,IAAD,CACE30d,SAAUi3M,EACV76O,UAAU,OACVF,UAAWF,EAAQyhD,WAHrB,SAKE,cAAC,IAAD,qB,kTC/LhBnL,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D2vI,SAAU,CACR/nR,WAAY,SACZd,aAAc,WACdtL,SAAU,SACVlD,SAAUjsC,EAAM82C,WAAW7E,OAAOhG,UAEpCurM,YAAa,CACXt3O,QAAS,QAEX4jT,YAAa,CACXx9Q,YAAatmC,EAAMZ,WAErBq4O,SAAU,CACRtoM,SAAU,SACVoM,WAAY,SACZd,aAAc,YAEhBgF,WAAY,CACVr/C,MAAO,GACPi2C,OAAQ,IAEV9M,MAAO,CACL3oC,QAASZ,EAAMZ,QAAQ,GAAK,MAC5B6sC,SAAUjsC,EAAM82C,WAAW+S,MAAM5d,UAEnCiuM,SAAU,CACRltM,WAAY,EACZ1G,YAAa,QA6UFuqV,IA/TmD,SAAC,GAO5D,IANL/qM,EAMI,EANJA,SACA49I,EAKI,EALJA,iBACA7rF,EAII,EAJJA,SAII,IAHJw5I,8BAGI,aAFJC,+BAEI,MAFsB55b,gBAEtB,EADJ65b,EACI,EADJA,2BAIEnoc,EAKEyuT,EALFzuT,IACAw8B,EAIEiyR,EAJFjyR,MACAkyR,EAGED,EAHFC,OACA1jD,EAEEyjD,EAFFzjD,QACAuiU,EACE9+Q,EADF8+Q,MAGI12d,EAAazpE,sBAAY0pE,wBAAc4lJ,IACvCr2N,EAAW2F,wBACX23D,EAAS8zK,cACPhwP,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,IACVyhd,EAAej+Q,EAAOvxS,KAAK,MAC3B+xS,EAAoCr4M,GAAcA,EAAWp3G,IAAI,SAAW6O,gBAC5E+/S,EAAWa,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,aAC3DovT,EAASF,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,WACzDk9F,EAAMgyN,EAAS5yS,MAAM,CAAC,QAASg+X,EAAkBt6Y,EAAK,QAE5D,EAAkCmgC,WAAe,IAAjD,mBAAOqxR,EAAP,KAAkBC,GAAlB,KACA,GAAwCtxR,WAAe+8D,GAAO,IAA9D,qBAAO8ve,GAAP,MAAqBC,GAArB,MAEA,GAWKJ,YAAmBn+Q,GAXxB,MACEgB,UACEC,GAFJ,GAEIA,aACAC,GAHJ,GAGIA,kBACAC,GAJJ,GAIIA,YACAC,GALJ,GAKIA,UAEFE,GAPF,GAOEA,QACA88Q,GARF,GAQEA,OACA/8Q,GATF,GASEA,aACAg9Q,GAVF,GAUEA,gBAGF5siB,aAAgB,WACd8siB,GAAgB/ve,GAAO,MACtB,CAACA,IAEJ/8D,aAAgB,WACd,GAAKwvR,GAAL,CAIA,IAAMQ,GAAmBx8S,OAAKF,OAAOy7S,GAAY5gT,gBAAQ4gT,GAAUxiT,eAAc,SAACywQ,GAChFA,EAAIpyQ,SAAS,CAAC,QAASuvY,EAAkBt6Y,IAAM,SAAC2R,GAC9C,OAAQA,GAAOrD,iBAA6BnC,MAAM2Y,iBAAO,CACvDsqS,OAAQO,GAAalwT,IAAI,MACzB2wT,SAAUT,GAAalwT,IAAI,gBAC3B4wT,SAAUV,GAAalwT,IAAI,aAC3BhI,KAAMk4T,GAAalwT,IAAI,cAG3B09Q,EAAIpxQ,SAAS,CAAC,QAAS/L,OAOzB,GALAqmC,EAASu/B,YAAO82L,EAAU,OAAQyzD,IAClC88Q,GAAgB,IAChBx7Q,GAAa,IAGTw2I,GAAkC,0BAARjoc,EAAiC,CAC7D,IAAM0qzB,EAAiCxiX,EAAwB9kc,IAAIk3Y,EAAkB3qF,GAAalwT,IAAI,OACtG0oc,EAA2BuiX,OAE5B,CAAC/6f,KAEJ,IAwD0Bi9Q,GAvBpBM,GAAwB,WAC5B,IAAMr8Q,EAAW3B,EAASnjT,SAAS,CAAC,QAASuuY,EAAkBt6Y,IAAM+L,SAAS,CAAC,QAAS/L,IACxFqmC,EAASu/B,YAAO82L,EAAU,OAAQm0D,IAClCd,GAAa,OA6BT4qF,GAAWvrF,GATSw9Q,GASiBx9Q,EARvBzrN,EAAOJ,QACvBqpe,GACA,CAAE5qe,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,KAMxD,GAC/C2od,KAAgB,OAACr9Q,SAAD,IAACA,QAAD,EAACA,GAAW7qT,SAAS,aAAc6qT,GACnDs9Q,IAAwB,OAATt9Q,SAAS,IAATA,QAAA,EAAAA,GAAW7qT,SAAS,aAAc6qT,GAEvD,OACE,eAAC,IAAD,CACEx6O,MAAM,EACNJ,WAAW,EACX8hC,MAAO,CAAEsM,aAAc,iBAAkByL,aAAc,GAHzD,UAKE,cAAC,IAAD,CAAYptB,MAAM,cAAlB,SACIl6E,EAAE+U,KAEN,eAAC,IAAD,CAAM04C,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAAC,IAAD,CAAMW,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,UACE,cAAC,IAAD,CACEF,WAAW,EACXgB,KAAK,SACLvB,WAAW,SACXW,MAAM,EAJR,SAOIu6O,GACI,qCACE,cAAC,IAAD,CAAgBz6M,QAAQ,cAAch+G,MAAOiG,OAAOuyT,IAAoB54M,MAAO,CAAEj/B,SAAU,KAC3F,eAAC,IAAD,WAAa63O,GAAb,OACA,cAAC,IAAD,CAAkBjuN,MAAM,UAAUlqG,KAAM,GAAIu/G,MAAO,CAAE4M,WAAY,QAEnE,cAAC,IAAD,CAASgC,MAAOyoM,GAAY,GAA5B,SAEIssF,GACI,cAAC,IAAD,CAAM7xR,KAAM6xR,GAAU7lU,UAAWF,EAAQslU,SAAzC,SAAoD7rF,IACpD,cAAC,IAAD,CAAYv5O,UAAWF,EAAQy5O,SAA/B,SAA2C5mS,EAAE,6BAM3D0ljB,GACI,eAAC,IAAD,CAAMj4f,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC,IAAD,CAAoBgtB,MAAM,QAAQ7sB,UAAWF,EAAQ8lT,cACrD,cAAC,IAAD,CAAY/4R,MAAM,QAAlB,SAEImuN,KAAcU,IAAW/4T,KACvBgwB,EAAE,qCACFqoS,KAAcU,IAAW50T,KAAzB,UACK6rB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,qCAIZ,QAIN4mS,EACI,cAAC,IAAD,CAAY9tM,QAAS2sd,GAAuBt0d,SAAUi3M,GAAa/6O,UAAWF,EAAQyhD,WAAtF,SACE,cAAC,IAAD,CAASzQ,MAAQ+0R,IAAYz9S,EAAOz1E,EAAE,2CAA6C,GAAnF,SACE,cAAC,IAAD,QAGJ,qCACE,uBAAO7rB,KAAK,OAAO8yT,OAAQi+Q,EAAchwiB,GAAE,eAAU38B,GAAOg3G,MAAO,CAAElgC,QAAS,QAAUogC,SAAU,SAACpzG,GAAD,OAAOksT,GAAQlsT,EAAE4kB,OAAO2wE,MAAM,OAChI,uBAAOo3N,QAAO,eAAUzwT,GAAOg3G,MAAO,CAAElgC,QAAS,QAAjD,SACE,cAAC,IAAD,CAAS8uC,MAAO1oB,EAAMz1E,EAAE,yCAA2CA,EAAEujP,EAASuiU,GAA9E,SACE,+BACE,cAAC,IAAD,CACEv4f,UAAU,OACV4jC,SAAUi3M,IAAe92T,QAAQmkG,GACjCpoB,UAAWF,EAAQyhD,WAHrB,SAKE,cAAC,IAAD,kBASlB,eAAC,IAAD,CAAMnhD,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,cAAC,IAAD,CAAMZ,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,SACE,cAAC,IAAD,CACEF,WAAW,EACXgB,KAAK,SACLvB,WAAW,SACXW,MAAM,EAJR,SAOI4nB,EACI,eAAC,IAAD,CAAM5nB,MAAM,EAAMJ,WAAW,EAA7B,UACE,cAAC,IAAD,CAAS0wC,MAAO1oB,EAAhB,SACE,cAAC,IAAD,CAAM4rB,KAAM5rB,EAAKpoB,UAAWF,EAAQslU,SAAUxxX,OAAO,SAASgiT,IAAI,WAAlE,SAA8ExtO,MAG9Ekwe,GACI,eAAC,IAAD,CAAMl4f,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UACE,cAAC,IAAD,CAAoBgtB,MAAM,QAAQ7sB,UAAWF,EAAQ8lT,cACrD,cAAC,IAAD,CAAY/4R,MAAM,QAAlB,SAEImuN,KAAcU,IAAW68Q,YACvB5ljB,EAAE,qCACFqoS,KAAcU,IAAW88Q,YAAzB,UACK7ljB,EAAE,oBADP,aAC+BA,EAAE,wBADjC,YAC4DkljB,EAAar4f,QAAQ,MAAO,IAAIyxD,cAD5F,KAEEt+G,EAAE,qCAIZ,QAGR,cAAC,IAAD,CAASm+F,MAAO+0R,GAAWlzX,EAAE,0CAA4C,GAAzE,SACE,cAAC,IAAD,CACI8tF,WAAW,EADf,SAGI,cAAC,IAAD,CACE35G,KAAK,OACLw5G,QAAQ,WACRsR,YAAaj/F,EAAE,mCACfmxF,SAAUi3M,IAAe92T,QAAQ4hZ,IACjCvjZ,MAAO41kB,GACP91d,SAtIP,SAACpzG,GAChBmpkB,GAAgBnpkB,EAAE4kB,OAAOtxB,QAsIHohH,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQurC,QAGnB0xM,oBAAqB,CACnB56O,OAAQ,QACRrC,QAAS,CACP2rM,UAAW3rM,EAAQk8O,WAGvBjnT,MAAO9Q,QAAQy4T,GACfjpM,WAAYipM,YAQ5Bt0N,EACI,eAAC,IAAD,CAAM5nB,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAASa,QAAQ,WAAWU,KAAK,SAA/E,UACE,cAAC,IAAD,CAAS0vC,MAAOn+F,EAAE,4CAAlB,SACE,+BACE,cAAC,IAAD,CACEqtD,UAAWF,EAAQyhD,WACnBzd,SAAUi3M,GACVtvM,QAAS,kBAAMwsd,GAAgB7ve,IAHjC,SAKE,cAAC,IAAD,UAIN,cAAC,IAAD,CAAYqjB,QAAS2sd,GAAuBt0d,SAAUi3M,GAAa/6O,UAAWF,EAAQyhD,WAAtF,SACE,cAAC,IAAD,CAASzQ,MAAQ+0R,IAAYz9S,EAAOz1E,EAAE,2CAA6C,GAAnF,SACE,cAAC,IAAD,WAIN,cAAC,IAAD,CAASm+F,MAAkBn+F,EAAXkzX,GAAa,yCAA8C,2CAA3E,SACE,+BACE,cAAC,IAAD,CACE3lU,UAAU,OACV4jC,SAAUi3M,IAAgB92T,QAAQ4hZ,IAClC7lU,UAAWF,EAAQyhD,WACnB9V,QAjMG,WAGnB,GAFAkxM,GAAa,IAETu7Q,IAAgBj7Q,YAAMi7Q,IAAe,CACvCF,GAAOE,IAEP,IAAM3mS,EAAU6oB,EAAStjT,MAAM,CAAC,QAAS0uY,EAAkBt6Y,EAAK,OAAQgtkB,IAAcjhkB,SAAS,CAAC,QAAS/L,IACzGqmC,EAASu/B,YAAO82L,EAAU,OAAQ2pC,SACzB2mS,KAAiBj7Q,YAAMi7Q,KAChCv7Q,GAAahqS,EAAE,2BAoLH,SAME,cAAC,IAAD,kB,qTC/UPkjyB,EAA2B,wBA+MzBh6uB,sBACbgG,aA9La,SAACC,GAAD,MAA+B,CAC5CiyC,OAAQ,CACN3L,YAAatmC,EAAMZ,QAAQ,IAE7B/iE,KAAM,CACJ+jE,MAAO,KAET4zuB,aAAc,CACZpzuB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BylB,OAAQ,CACNzkB,MAAO,QAET0vC,YAAa,CACX/kB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK3O,cAiL5B/9D,YAAgB,gBAChBqnjB,YAAW,CACTC,UAAU,IAEZ5nf,mBAnCsB,SAAC73E,GAAD,OAAgB8L,YAAyB,CAC/DqxN,aAAc3oI,YAA+ByzrB,GAC7C7pN,WAAYpkjB,eACZszR,UAAWwqB,cACXqwd,iBAAkBrxmB,YAA2BmxmB,IAJPn8wB,CAKrC9L,MAEwB,SAAC2D,GAC1B,MAAO,CACLA,WACAykxB,QAAS,SAACz/b,GACRhlV,EAAS,IAAI25L,IAAc,CAACqrJ,eAE9BysC,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIguxB,EACJtktB,MAAM,MAGVkjR,iBAAkB,SAAC3iW,GACjByf,EAAS,IAAI4J,IAA+B,CAAEtT,GAAIijO,mBAAkBh6N,MAAO,CAAEhf,aAC7Eyf,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIijO,mBACJv5J,MAAM,UAMC11B,EA5KW,SAACo6uB,GACzB,IACEn2uB,EASEm2uB,EATFn2uB,QACAirL,EAQEkrjB,EARFlrjB,aACAihW,EAOEiqN,EAPFjqN,WACA9wR,EAME+6e,EANF/6e,UACA66e,EAKEE,EALFF,iBACAC,EAIEC,EAJFD,QACAhzZ,EAGEizZ,EAHFjzZ,YACAvuC,EAEEwhc,EAFFxhc,iBACA9hW,EACEsjyB,EADFtjyB,EAIAssM,EAIE8rC,EAJF9rC,sBACAC,EAGE6rC,EAHF7rC,mBACA41iB,EAEE/pgB,EAFF+pgB,iBACA3+Y,EACEprH,EADForH,oBAIF,GADiBj/U,wBACmC7L,WAAe,KAAnE,mBAAO6qxB,EAAP,KAA2BC,EAA3B,KAEA9qxB,aAAgB,WACd,IAAM65E,EAAgBg2N,GAAaA,EAAU3oU,QAAO,SAACutI,EAAK8lN,GACxD,IAAMtjW,EAAQsjW,EAASj7V,IAAI,SACrByrzB,EAAYj3lB,aAAW52M,MAAK,qBAAGzhB,OAAoBxE,KACnD+zzB,EAAa,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAWtvzB,KACjC,OAAKsvzB,GAAaC,IAAkBt1xB,mBAAiB0wB,KAG9C,2BAAIquF,GAAX,kBAAiBu2qB,GAAgB,IAFxBv2qB,IAGR,IACHq2qB,EAAsBjxsB,KACrB,CAAC6wsB,IAEJ,IAAMO,EAAoB,SAACvorB,GACzBoorB,EAAsB,2BAAID,GAAL,kBAA0BnorB,EAAMn6G,OAAOxe,KAAO24H,EAAMn6G,OAAOgvG,YA+BlF,OACE,eAAC,IAAD,CACE1M,SAAU2/rB,EACV/1uB,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAHnB,UAME,eAAC,IAAD,WACE,cAAC,IAAD,CAAmB0pB,GAAG,8BAA8By4E,QAAQ,KAAKzT,MAAM,cAAvE,SACGl6E,EAAE,4CAEL,cAAC,IAAD,CAAmBkV,GAAG,iCAAiCy4E,QAAQ,YAAYzT,MAAM,gBAAjF,SACGl6E,EAAE,+CAEL,cAAC,IAAD,CAAMytD,WAAW,EAAMJ,UAAWF,EAAQg2uB,aAA1C,SAEI56e,GAAaA,EAAUtrU,KAAI,SAACg2V,GAC1B,IAAMtjW,EAAQsjW,EAASj7V,IAAI,SACrByrzB,EAAYj3lB,aAAW52M,MAAK,qBAAGzhB,OAAoBxE,KACzD,GAAK8zzB,GAAaA,EAAUtvzB,OAASi6B,mBAAiB0wB,KAAtD,CAGA,IAAM8kwB,EAAgBH,EAAUtvzB,KAC1B4gC,EAAQ0uxB,EAAUlgjB,UAClBA,EAAUkgjB,EAAUrhJ,qBACpBv8iB,EAAO49rB,EAAU59rB,KACvB,OACE,cAAC,IAAD,CAA6B1H,MAAOolJ,EAApC,SACE,cAAC,IAAD,CAAM91L,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAG3B,WAAW,SAArD,SACE,cAAC,IAAD,CACEsuC,QACE,cAAC,IAAD,CACEyU,QAASszrB,EAAmBK,GAC5Bn0sB,SAAUk0sB,EACVlhzB,KAAMmhzB,EACN1ptB,MAAM,YAGVnlE,MACE,eAAC,IAAD,CAAM04C,WAAW,EAAMP,WAAW,SAAlC,UACC24C,EACD,cAAC,IAAD,CAAYlY,QAAQ,QAAQzT,MAAM,gBAAgBqV,MAAO,CAAC4M,WAAY,GAAtE,SAA2EpnF,YAdrE6uxB,YAyBxB,eAAC,IAAD,WACE,cAAC,IAAD,CACE9qsB,QAASu3S,EACTn2T,MAAM,UACN7sB,UAAWF,EAAQi0C,OACnBpxH,KAAK,QAJP,SAMGgwB,EAAE,wBAEL,cAAC,IAAD,CACE84F,QA1Fa,WACnB,IAAM+qsB,EAA0BxmyB,iBAAOkmyB,GACpC/jzB,QAAO,SAAC7P,EAAO4I,GAAR,OAAgBlG,OAAO+M,OAAOgvB,oBAAkB5wB,SAASjF,MAChEqH,QAAO,SAACutI,EAAKx9I,EAAO4I,GACnB,GAAI5I,EAAO,CACT,IAAMm0zB,EAAej9yB,gBAAM5B,eAAc,SAAAywQ,GACvCA,EAAI/5Q,IAAI,OAAQpD,GAChBm9Q,EAAI/5Q,IAAI,cAAe09lB,GACvB3jV,EAAI/5Q,IAAI,QAAS,MAEnB,OAAOwxI,EAAI9sI,KAAKyjzB,GAElB,OAAO32qB,IACNjhI,kBAEC63yB,EAAe1myB,iBAAO,CAC1BmmW,sBACAl3J,wBACA61iB,mBACA51iB,qBACA3oD,MAAOigpB,IAGTxzZ,IACAgzZ,EAAQU,GACRjic,EAAiB9hW,EAAE,iCAkEbk6E,MAAM,UACN7sB,UAAWF,EAAQi0C,OACnBpxH,KAAK,QACLmhH,UAAW9+G,OAAO+M,OAAOmkzB,GAAoB3tyB,MAAK,SAAA9J,GAAC,OAAIA,KALzD,SAOGkU,EAAE,+B,6BCjNb,6LAkCam0rB,EAAwB,wBA4ItBjroB,4BACbgG,aA/Ha,SAACC,GAAD,OAAkB2zL,YAAa,CAC5Ct3P,KAAM,CACJukE,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC88R,gBAAiB,CACf96P,UAAWphC,EAAMZ,QAAQ,IAE3BzuD,OAAQ,CACN21F,YAAatmC,EAAMZ,QAAQ,SAwH7Bn7B,YAAgB,gBAChB0/D,mBA9B0B,WAC1B,IAAMkxsB,EAAsBrujB,cACtBsujB,EAA6B1tjB,cAEnC,OAAO,SAAyBt7N,GAC9B,MAAQ,CACNgoJ,MAAO+goB,EAAoB/oxB,GAC3BipxB,qBAAsBD,EAA2BhpxB,QAK5B,SAAC2D,GAC1B,MAAO,CACLA,WACAulxB,qBAAsB,WACpBvlxB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIi/qB,EACJv1mB,MAAM,MAGVwltB,iBAAkB,SAAC99lB,GACjB1nL,EAAS,IAAI8kL,IAAwB,CAAE4C,UAAS1nL,mBAKvCsqC,EAlHyC,SAAC,GAOlD,IAAD,IANJlpD,EAMI,EANJA,EACAmkyB,EAKI,EALJA,qBACAC,EAII,EAJJA,iBAII,IAHJnhoB,aAGI,MAHIp8K,gBAGJ,EAFJq9yB,EAEI,EAFJA,qBACA/2uB,EACI,EADJA,QAGM09I,EAAU,oBAAG5nC,EAAMjrL,IAAI,qBAAb,aAAG,EAAyBy6H,cAA5B,QAAsC,KAEhD4xrB,GAAmBx5lB,EAEnBy5lB,EAAyB,WAC7BF,EAAiBxuzB,OAAOqtL,EAAMjrL,IAAI,SAGpC,OACE,cAAC,IAAD,CACEurH,SAAU4wlB,EADZ,SAGE,cAAC,IAAD,CACE9moB,UAAWF,EAAQ3hE,KACnB+jG,MAAO,CACLhgC,MAAO20uB,EAAuB,OAAS,KAH3C,SAOIA,EACI,eAAC,IAAD,CAAMz2uB,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASqB,QAAS,EAArE,UACE,cAAC,IAAD,CAAMV,MAAM,EAAZ,SAAkB,cAAC,IAAD,MAClB,cAAC,IAAD,CAAMA,MAAM,EAAZ,SACE,cAAC,IAAD,CAAY8/B,QAAQ,KAApB,SACG3tF,EAAE,0CAIT,qCACE,cAAC,IAAD,CACE2tF,QAAQ,KADV,SAII02sB,EACIrkyB,EAAE,wCACFA,EAAE,uDAAwD,CAAEkV,GAAI21L,MAIxE,eAAC,IAAD,CACEp9I,WAAW,EACXM,QAAQ,WACRV,UAAWF,EAAQk+R,gBAHrB,UAKE,cAAC,IAAD,CACEvyP,QAASqrsB,EACTjqtB,MAAM,UACN7sB,UAAWF,EAAQrtD,OAHrB,SAKGE,EAAE,wBAGHqkyB,EAEM,cAAC,IAAD,CACEvrsB,QAAS,kBAAMwrsB,KACfpqtB,MAAM,UAFR,SAIGl6E,EAAE,6BAIL,cAAC,IAAD,CACE84F,QAAS,kBAAMwrsB,KACfpqtB,MAAM,UAFR,SAIIl6E,EAAE,6C,mTCtEnBwtL,EAAY,8BAsBnB49K,E,4MAEGq3X,sBAAwB,WAC7B,IACM16hB,EADyB,EAAK5pL,MAA7BomxB,qBACoC1vyB,MAAM,CAAC,iBAAkB3I,kBACpE,OAA2B,IAAvB67M,EAAc/3N,KACT+3N,EAAc9qN,KAAI,SAAAurX,GAAY,OAAIA,EAAaxwX,IAAI,YAAUnB,UAE7D,I,EAIJ6rvB,mBAAqB,SAACrisB,GAAD,OAAmB,SAAC+6E,GAC9C,MAA2C,EAAKj9F,MAAxCS,EAAR,EAAQA,SAAU2lxB,EAAlB,EAAkBA,qBAClB,GAA2B,WAAvBnprB,EAAMn6G,OAAOtxB,MAAoB,CACnC,IAAMo4N,EAAgBw8lB,EAAqBvszB,IAAI,gBAAiBkU,kBAChE0yB,EAAS,IAAIioV,IAAoB09b,EAAqB5ozB,IAAI,gBAAiBosN,EAAcvoN,QAAO,SAACyvC,GAAD,OAAUA,EAAKj3C,IAAI,WAAaqoD,W,EAG7HuisB,WAAa,kBAAM,EAAKH,wBAAwBjhvB,OAAM,SAAA6+C,GAAK,OAAIwisB,YAAQxisB,O,EACvEkwQ,SAAW,SAACnxT,GACjB,IAAQmxT,EAAa,EAAKpyR,MAAlBoyR,SACJ,EAAKqyb,cACPryb,EAASnxT,I,4CAGb,WAAiB,IAAD,OACd,EAMInL,KAAKkqC,MALPm4R,EADF,EACEA,aACA/7R,EAFF,EAEEA,SACA4yC,EAHF,EAGEA,QACAo3uB,EAJF,EAIEA,qBACA3lxB,EALF,EAKEA,SAGImpL,EAA2Cw8lB,EAAqB1vyB,MAAM,CAAC,iBAAkB3I,kBAC/F,OACE,uBACEqkT,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQm5kB,cAFrB,UAIE,eAAC,IAAD,CACE74kB,WAAW,EACXc,QAAS,EAFX,UAIE,cAAC,IAAD,CACEqmC,UAAU,EACV61P,UAAU,EACVp9R,UAAWF,EAAQylC,aACnBjjH,MAAOsE,KAAKwuvB,wBACZhzoB,SAAU,SAAC2rB,EAAOzrI,GAChB,IAAMmzvB,EAAyBzluB,iBAAO1tB,EAAMsN,KAAI,SAAAw3G,GAC9C,MAAQ,CACNp0D,MAAOo0D,EACPsuoB,eAAgB,aAGpBnktB,EAAS,IAAIioV,IAAoB09b,EAAqB5ozB,IAAI,gBAAiBmnvB,MAE7Ehya,YAAa,SAAClqS,GACZ,OACE,cAAC,IAAD,2BACMA,GADN,IAEE+mE,QAAQ,WACR54E,MAAM,oBACNkqF,YAAY,qBACZ6B,WAAW,cACX1+G,OAAQ,EAAKwgvB,aACb90oB,WAAW,EACXiD,WAAU,2BACLnqE,EAAOmqE,YADF,IAERC,eACE,qCACE,cAAC,IAAD,CAAgBE,SAAS,QAAzB,SACE,mBAAG7jC,UAAU,sBAAsBkiC,MAAO,CAACrV,MAAO,eAEnDtzD,EAAOmqE,WAAWC,0BASjC,cAAC,IAAD,CACEnjC,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ6oT,eAHrB,SAK0B,IAAvBjuK,EAAc/3N,KACb,cAAC,IAAD,CAAOk1H,UAAW,EAAlB,SACE,cAAC,IAAD,UACG6iG,EAAc9qN,KAAI,SAACgyC,GAClB,IAAMoR,EAAgBpR,EAAKj3C,IAAI,SACzB+qvB,EAA6B9zsB,EAAKj3C,IAAI,kBAC5C,OACE,eAAC,IAAD,WACE,cAAC,IAAD,UAAeqoD,IACf,cAAC,IAAD,UACE,eAAC,IAAD,CACE1wD,MAAOozvB,EACPtzoB,SAAU,EAAKizoB,mBAAmBrisB,GAFpC,UAIE,cAAC,IAAD,CAAU1wD,MAAM,QAAhB,mBAGA,cAAC,IAAD,CAAUA,MAAM,SAAhB,2BAVS0wD,UAkBrB,UAKP9lB,S,GAxHiC7B,aAoI3BwwC,sBACbgG,aAnJa,SAACC,GAAD,MAA+B,CAC5C6mT,eAAgB,CACd7vQ,cAAeh3C,EAAMZ,QAAQ,IAE/B+3kB,cAAe,CACb92kB,OAAO,GAAD,OAAKL,EAAMZ,QAAQ,GAAnB,QACNgB,MAAO,QAETqjC,aAAc,CACZrjC,MAAO,YA2ITujC,mBARsB,SAAC73E,GAAD,sBACnB8L,YAAyB,CAC1Bw9wB,qBAAsBh5b,eADrBxkV,CAEA9L,OAMHmY,YAAgB,gBAChBm4O,YAAmC,CAAEt2B,SAAUznD,IAC/CguH,oBAAU,CACR9pN,KAAM87F,EACNk+J,eAAe,EACfhwC,oBAAoB,EACpB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IAXPvyP,CAabkiT,I,6BCxOF,kCAAO,IAAMt3U,EAA8B,kB,4GC6BpC,SAAS0wwB,EAAyBvpjB,GACvC,OAAQA,GAAS,IAAIh+P,KAAI,SAACy4J,GAAQ,IAAD,MACzBzF,EAAG,OAAGyF,QAAH,IAAGA,OAAH,EAAGA,EAAI+upB,QAChB,OAAKx0pB,EAGE,2BACFA,GADL,IAEE8wE,KAAI,oBAAE9wE,EAAI8wE,YAAN,kBAAc9wE,EAAI4hN,mBAAlB,aAAc,EAAiB9wI,YAA/B,QAAuC,OAcjD,SAA4BrrE,GAAe,IAAD,oCACxC,MAAO,CACLxgI,GAAIwgI,EAAGxgI,GACP6rM,KAAI,UAAErrE,EAAGqrE,YAAL,QAAa,KACjBpmL,OAAM,UAAE+6G,EAAG/6G,cAAL,QAAe,KACrBo3Q,gBAAiBr8J,EAAGq8J,cACpB2yf,eAAgB,GAChB7yc,YAAa,CACX38U,GAAIwgI,EAAGxgI,GACPy1R,cAAej1J,EAAGxgI,GAClBi4F,cAAa,UAAEuoC,EAAGvoC,qBAAL,QAAsB,KACnCu9L,WAAU,UAAEh1J,EAAGg1J,kBAAL,QAAmB,KAC7BjjG,IAAG,UAAE/xD,EAAG+xD,WAAL,QAAY,KACfN,IAAG,UAAEzxD,EAAGyxD,WAAL,QAAY,KACfowG,IAAG,UAAE7hK,EAAG6hK,WAAL,QAAY,KACfnqM,MAAK,UAAEsoC,EAAGtoC,aAAL,QAAc,KACnB85F,QAAO,UAAExxD,EAAGwxD,eAAL,QAAgB,KACvB77F,SAAQ,UAAEqqC,EAAG5gI,kBAAL,QAAmB,KAC3BD,aAAY,UAAE6gI,EAAG7gI,oBAAL,QAAqB,KACjC6+F,OAAM,UAAEgiC,EAAGlqC,gBAAL,QAAiB,KACvBwC,WAAU,UAAE0nC,EAAG1nC,kBAAL,QAAmB,KAC7B4G,YAAW,UAAE8gC,EAAG9gC,mBAAL,QAAoB,KAC/Bl7B,OAAM,UAAEg8D,EAAGh8D,cAAL,QAAe,KACrB6tH,aAAY,UAAE7xD,EAAG6xD,oBAAL,QAAqB,KACjC5sK,OAAM,UAAE+6G,EAAG/6G,cAAL,QAAe,KACrB0lJ,MAAK,UAAE3qC,EAAG2qC,aAAL,QAAc,CAAExgF,QAAS,IAC9B6nG,KAAMhyD,EAAGyxlB,gBACL,CAAEp7b,OAAQ,CAAEx1R,KAAM,CAAEoxR,OAAQjyJ,EAAGyxlB,mBAC/B,KA9CGw9D,CAAmBjvpB,MAqEzB,SAASkvpB,EAA6B3pjB,GAC3C,OAAOupjB,EAAyBvpjB,GAC7Bh+P,KAAI,SAACgzJ,GAAD,cAASA,QAAT,IAASA,OAAT,EAASA,EAAK4hN,eAClBryW,QAAO,SAACywJ,GAAD,QAAWA,O,+LCnFjB+jM,EAAat7T,cAAsC,SAAwByF,EAAOzuC,GACtF,OAAO,cAAC,IAAD,aAAOi+E,UAAU,KAAKj+E,IAAKA,GAASyuC,OAgDvCo0Z,E,4MAIGt3Z,MAAQ,CACb2jE,MAAM,G,EAiDA0ioB,aAAe,SAAC1ioB,GAAD,OAAmB,WACxC,IACQ2ioB,EACJ,EAAKtmsB,MADP2jE,KAEF,EAAKiY,SAAS,CACZjY,KAAc,MAARA,EAAeA,GAAQ2ioB,M,4CAnDjC,WACE,MAKIttuB,KAAKkqC,MAJPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACMwhtB,EAHR,EAGE5ioB,KAHF,IAIEw2T,cAJF,MAIWnha,KAAKqtuB,aAJhB,EAQQC,EACJttuB,KAAKgnC,MADP2jE,KAGIA,EAD+B,MAAlB4ioB,EACOA,EAAiBD,EAE3C,OACE,eAAC,IAAD,CACE16S,YAAY,EACZjoV,KAAMA,IAAQ,EACdg6B,QAASw8R,GAAO,GAChBt7R,oBAAqBk6N,EAJvB,UAME,cAAC,IAAD,CACE3mR,UAAWF,EAAQghS,OADrB,SAGE,eAAC,IAAD,WACE,cAAC,IAAD,CACEj0Q,MAAM,UACN4e,QAAS,kBAAMs8S,GAAO,EAAPA,IACf,aAAW,OAHb,SAKE,cAAC,IAAD,MAEF,cAAC,IAAD,CACEznT,QAAQ,KACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAKT,wBAAQuvD,MAAM,OAAOi2C,OAAO,OAAO/K,IAAI,kD,GAjDd/hF,aAsElBwwC,sBACbgG,aAnHa,SAACC,GACd,MAAO,CACLg/R,OAAQ,CACNj9P,SAAU,WACV+H,gBAAiB,SAEnBkR,SAAU,CACR8L,KAAM,EACN/7B,MAAO,SAET6oK,cAAe,CACbvzL,OAAO,KAAD,OAAyB,IAAlBL,EAAMZ,UAAb,cAwGS,CAAE00C,WAAW,IAChC7vE,YAAgB,gBAChB0/D,kBAAQ,MATiB,SAACl0E,GAC1B,MAAO,CACLA,eAIWsqC,CAIbqpX,I,6BC/IF,IAAI33O,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,yMACD,uBAEJ3K,EAAQywH,QAAUq4I,G,6BCjBlB,qIAIWuja,EAAmB/ioB,gBAAoB,MACvC8ioB,EAAgB,SAAuB5tnB,GAChD,IAAIgunB,EAEJ,SAAUx3Z,GAGR,SAASw3Z,IACP,OAAOx3Z,EAAiBloQ,MAAMjI,KAAM0D,YAAc1D,KAoBpD,OAvBA2wQ,IAAeg3Z,EAAKx3Z,GAMPw3Z,EAAIxpqB,UAEVikI,OAAS,WACd,IAAI7f,EAAcviH,KAAKkqC,MACnBunO,EAAelvJ,EAAYkvJ,aAC3BntP,EAAOolB,IAA8B64E,EAAa,CAAC,iBAEvD,OAAO99E,gBAAoB+ioB,EAAiBj9nB,SAAU,CACpDjE,SAAU,SAAkBshoB,GAC1B,OAAOnjoB,gBAAoBkV,EAAW7P,IAAS,CAC7C89nB,WAAYA,EACZnsqB,IAAKg2Q,GACJntP,QAKFqjpB,EAxBT,CAyBEljoB,aAEEhpC,EAAMgpC,cAAiB,SAAUyF,EAAOzuC,GAC1C,OAAOgpC,gBAAoBkjoB,EAAK79nB,IAAS,GAAII,EAAO,CAClDunO,aAAch2Q,QAIlB,OADAA,EAAI8sB,YAAcoxB,EAAUpxB,aAAeoxB,EAAUnrC,MAAQ,YACtD/S,I,0dCXH+zH,EAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C8gF,IAAK,CACH32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACTvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG1CtxE,YAAa,CACXv2J,aAAc,WACdc,WAAY,SACZpM,SAAU,UAEZ9xG,KAAM,CACJmwH,YAAa,OACb1jB,gBAAiB,eAsGN05S,EAnGI,SAAC,GAQL,IAPb3wI,EAOY,EAPZA,QACAlpK,EAMY,EANZA,QAMY,IALZ85S,kBAKY,aAJZ14S,kBAIY,SAHZ24S,EAGY,EAHZA,eACAC,EAEY,EAFZA,SAEY,IADZ3sC,qBACY,MADI,KACJ,EACNh5S,EAAUs2C,IACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACFi1K,EAAQ+sF,EAAQhqR,IAAI,SACpBm0N,EAAW61D,EAAQhqR,IAAI,YAC7B,OACE,gCACE,eAAC80E,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ8iF,IACnBn3C,QAASA,EAJX,UAME,cAACwtQ,EAAA,EAAD,CAAOpsR,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,QAAUwa,QAAS/V,IAChE,sBAAK3K,MAAO,CAAEj/B,SAAU,GAAxB,UACE,eAACxD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,KAAtB,SACE,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgzM,YAAa5wK,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAnG,SACG4oK,EAAQhqR,IAAI,YAGjB,cAAC80E,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAjE,SACcp5F,EAAXmsM,EAAa,kCAAuC,2CAI3D,eAACr/I,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAA/B,UACE,cAAC0/B,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE6L,SAAU,WAA/C,mBACMp7F,EAAE,uCADR,aACmDw4S,YAAWx2C,EAAQhqR,IAAI,kBAAoB,SAG5F46Z,EAAa,cAACjkS,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,SAACz8G,GAC9CA,EAAE87G,kBACF06S,GAAe,IAFJ,SAIX,cAAC,IAAD,MAEA,cAAClkS,EAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,SAACz8G,GACjCA,EAAE87G,kBACF06S,GAAe,IAFjB,SAIE,cAAC,IAAD,eAMXD,EAAa,eAAC1mZ,EAAA,EAAD,CAAMmhE,UAAWF,EAAQ3gE,KAAzB,UACZ,eAAC05M,EAAA,EAAD,CAAUptG,QAAS,kBAAMg6S,EAAS,EAAqB,IAAlB3sC,IAArC,UACE,cAAC6sC,EAAA,EAAD,UACE,cAAC1sC,EAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAA2B,IAAlBk2P,MAGb,cAAC8sC,EAAA,EAAD,CAAcC,uBAAwB,CAAEvlT,QAAS,WAAayL,QAASp5F,EAAE,uDAGzEi1K,EAAMh4L,KAAI,SAACqgD,EAAMltD,GACf,IAAMqhG,EAASn0C,EAAKtlD,IAAI,MAClBm7Z,EAAW71W,EAAKtlD,IAAI,QACpBi4H,EAAUk2P,IAAkB/1X,EAAQ,EAC1C,OACE,eAAC81N,EAAA,EAAD,CAAuBptG,QAAS,kBAAMg6S,EAAS1ia,EAAQ,GAAI6/H,IAA3D,UACE,cAAC+iS,EAAA,EAAD,UACE,cAAC1sC,EAAA,EAAD,CACEpsR,MAAM,UACN+1B,QAASA,MAGb,cAACgjS,EAAA,EAAD,CAAc1jT,MAAO,CAAEkG,YAAa,QAAU2D,QAAS+5S,EAAUD,uBAAwB,CAAEvlT,QAAS,QAAS4B,MAAO,CAAErV,MAAO,OAAQ6+N,UAAW,gBAChJ,cAACk6F,EAAA,EAAD,CACE75S,QAASp5F,EAAE,yCACXkzY,uBAAwB,CAAEvlT,QAAS,UAAW4B,MAAO,CAAErV,MAAO,SAC9DqV,MAAO,CAAEj/B,SAAU,EAAG2sO,WAAY,OAXvBxrN,SAiBb,S,yECtGVgyB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9CshD,gBAAiB,CACflhD,MAAO,OACPe,SAAU,GAEZ9jE,KAAM,CACJ25G,cAAeh3C,EAAMZ,QAAQ,GAC7BgB,MAAO,OACP+uC,SAAU,OACVhuC,SAAU,OAGR8iV,GAAgB,CACpB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAGIm+X,GAAmB,SAACx/F,EAAiBkmV,EAAuBC,GACvE,IAAMx6oB,EAAc,CAClB,IAAO,CACL,CACE,KAAQ,CACN,IAAM,MAYd,GAPIq0T,GACFr0T,EAAOk2B,IAAIr1B,KAAK,CACd,KAAQ,CACN,KAAQwzT,KAId,OAAImmV,QAAJ,IAAIA,OAAJ,EAAIA,EAAuBhqpB,KACzB,UAAI+ppB,QAAJ,IAAIA,OAAJ,EAAIA,EAAuB/ppB,KAAM,CAE/B,IAAM60zB,EAA2B9qK,EAAsB98oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAC3FhT,EAAOk2B,IAAIr1B,KAAK,CACd,UAAa,CACX,GAAM25oB,EAAsB/8oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAAOhT,QAAO,SAAC01B,GAAD,OAAS2vxB,EAAyBrnzB,SAAS03B,cAI7H11B,EAAOk2B,IAAIr1B,KAAK,CACd,UAAa,CACX,GAAM25oB,EAAsB/8oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,UAMxE,OAAOhT,GAyUMslzB,GAvUM,SAAC,GAMf,IALLtqf,EAKI,EALJA,SACA73E,EAII,EAJJA,SACAoikB,EAGI,EAHJA,YACAC,EAEI,EAFJA,2BACAj8b,EACI,EADJA,YAEA,EAAoCp2U,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAA4C5rE,mBAAS,IAArD,mBAAO4gX,EAAP,KAAuBC,EAAvB,KACA,EAAkD7gX,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACA,EAAkD/gX,mBAAS,MAA3D,mBAAOgvV,EAAP,KAA0BgyB,EAA1B,KACA,EAAkDhhX,mBAAS,MAA3D,mBAAOihX,EAAP,KAA0BC,EAA1B,KACM1mV,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,GAAM+xB,YAAe,gBAArB/xB,EACF4e,GAAW2F,wBACXyyE,GAAYrxE,sBAAYs5K,eACxBk8G,GAAcx1R,sBAAYosK,YAA2B6rc,OAAqC,EAC1F3umB,GAAOtJ,sBAAYq5K,eACzB,GAAiJr5K,sBAAY8pF,YAA+BmuhB,KAApL3yhB,GAAR,GAAQA,QAASiqhB,GAAjB,GAAiBA,kBAAmB+B,GAApC,GAAoCA,mBAAoBE,GAAxD,GAAwDA,uCAAwC4C,GAAhG,GAAgGA,sBAAuBC,GAAvH,GAAuHA,sBAEjH90Q,GAAsB,SAACrxE,GAC3Bj1R,GAAS,IAAI6pE,KAA0B,CACrCxoE,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,EAASkmV,GAAuBC,QAUxD/lP,GAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,GAChDqxE,GAAoBrxE,KACnB,OAAM,IAuEHoxf,GAAY,SAAC96sB,EAAW1Y,GAC5B7yD,GAAS,IAAIw0D,KAAoC,CAC/C3B,SACAupgB,SAAU,UACV7wf,YACAoxN,UAAW,WACTwpf,GAAY,GACZvqf,IACI06U,GACFiC,GAAuClshB,GAAS,GAEhDgshB,GAAmBhshB,SAwC3B,OAbA7wF,qBAAU,YACR,OAAI6U,SAAJ,IAAIA,QAAJ,EAAIA,GAAM5lC,UACRu1B,GAAS,IAAI+pE,KAA8B,CAAEk2G,SAAU3yM,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAEvF,IAEHnxW,qBAAU,WACJ2uV,IAAgBr6V,OAAKszP,SAAWm5C,KAClCv8R,GAAS,IAAIqlE,MACbihS,GAAoB,OAErB,CAACnc,EAAa5tD,KAGf,qCACE,eAACruP,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQsjD,gBAAiB1iD,QAAQ,gBAA/E,UACE,cAACo8O,EAAA,EAAD,CACEiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SA9HkB,SAACpzG,GACzBkiH,EAAcliH,EAAE4kB,OAAOtxB,OAVvB6ja,EAAkB,IAClBE,GAAqB,GACrBC,EAAqB,MACrBE,EAAqB,MASE,KAAnBx3Z,EAAE4kB,OAAOtxB,QACXivC,GAAS,IAAIqlE,MACbgwT,GAAgB53Z,EAAE4kB,OAAOtxB,SA0HrBwhH,SAAUwxI,EACV1jI,YAAaj/F,GAAE,4CACf+wF,WAAY,CACVC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACd,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQC,KAAK,WAGnD5J,MAAO,CAAC0mB,KAAM,UAAWnO,aAAc,MAEzC,cAAClP,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QAlIe,WACrB46S,GAAqB,IAkIfr7I,UAAW,cAAC,KAAD,IACX9oK,MAAO,CAAEx/B,QAAS,YAClBohC,SAAUwxI,EANZ,SAOE3iO,GAAE,wBAEN,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAE2W,WAAY,EAAG51C,SAAU,GAA3F,UACE,cAAC,KAAD,CAAai/B,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAAMi5C,OAAQ,KAChE,cAACi+B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SAAmDl6E,GAAE,sDAEvD,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALrB,SAQIwqG,IAAa2rI,EAAW,eAAC71K,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACtB,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACGg1I,EAAW3iO,GAAE,0CAA4Cg3F,GAAYh3F,GAAE,sCAAwC,OAElH,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAErBjrD,GAAK5lC,QAAU,EACd,qBAAKkmG,MAAO,CAAE+O,SAAU,OAAQ/uC,MAAO,OAAQghC,UAAW,OAAQsX,UAAW,QAA7E,SACC54E,GAAKhyC,KAAI,SAAC+kR,GACT,OAzJE,SAACA,GACjB,IAAM73K,EAAY63K,EAAQhqR,IAAI,MACxBi9L,EAAQ+sF,EAAQhqR,IAAI,SAC1B,OAAO,cAAC,EAAD,CAELmuX,cAAeotC,EAAeppT,GAC9B2O,QAAS,WACH6oR,IAAsBx3R,GACxBwpT,EAAqBxpT,GACrB0pT,EAAqB1pT,GACC,IAAlB8qF,EAAM5rL,SAA+C,IAA9BkqZ,EAAeppT,IAExCqpT,GAAkB,SAACtuJ,GAAD,mBAAC,eACdA,GADa,kBAEf/6J,EAAY,QAKf0pT,EADED,IAAsBzpT,EACH,KAEAA,IAI3ByoT,WAAYgB,IAAsBzpT,EAClC0oT,eAAgB,SAAClja,GAEbkka,EADElka,EACmBw6G,EAEA,OAGzB+P,WAAYynR,IAAsBx3R,EAClC2oT,SAAU,SAAC1ia,EAAO8pH,GACZynR,IAAsBx3R,GACxBwpT,EAAqBxpT,GAIrBqpT,EAFEt5S,EAEgB,SAACgrJ,GAAD,mBAAC,eACdA,GADa,kBAEf/6J,EAAY/5G,KAIG,SAAC80Q,GAAD,mBAAC,eACdA,GADa,kBAEf/6J,EAAY,UAInB63K,QAASA,GAhDJ73K,GAqJc+qT,CAAUlzI,QAGnB,eAAC,IAAMxD,SAAP,WACA,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,GAAE,wCAEL,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACGp7F,GAAE,4CAKf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEj/B,SAAU,GAA7D,UACE,cAACsoC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAMtE,SAAUwxI,EAAjF,SAA4F3iO,GAAE,wBAC9F,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAlGqB,WAC3BissB,GAAY,GACZ,IAAM/iiB,EAAO,OAAI/yO,SAAJ,IAAIA,QAAJ,EAAIA,GAAMr5B,MAAK,SAACo6X,GAAD,OAAcA,EAASh4Y,IAAI,QAAU2pY,KAC3Dujb,EAAsD,IAAtC3xZ,EAAe5xB,GAErC,GADAqjb,EAA2BE,EAAgB,uCAAyC,4CAA6C,CAAC3wZ,qBAAsB5yB,IACpJujb,EACFtmxB,GAAS,IAAIwuD,IAAiB,CAC5B+c,UAAWw3R,EACXrkV,KAAMz2C,cAAI,CAACpE,KAAMud,GAAE,8CACnBu7S,UAAW,SAAC9pO,GACVwztB,GAAUtjb,EAAmBlwS,WAG5B,CACL,IAAMwjG,EAAK,OAAG+sF,QAAH,IAAGA,OAAH,EAAGA,EAAShqR,IAAI,SACrBmtzB,EAAoB,OAAGlwnB,QAAH,IAAGA,OAAH,EAAGA,EAAOz1L,QAAO,SAAC89C,EAAMltD,GAAP,OAAiBmja,EAAe5xB,KAAuBvxY,EAAQ,KAAG4H,IAAI,GAC3Gy5F,EAAM,OAAG0ztB,QAAH,IAAGA,OAAH,EAAGA,EAAsBntzB,IAAI,MACzCitzB,GAAUtjb,EAAmBlwS,KAkFzB0f,SAAgC,OAAtBwwR,IAAgC4xB,EAAe5xB,IAA4D,IAAtC4xB,EAAe5xB,IAA8Bh/I,EAC5HpzI,MAAO,CAAEx/B,QAAS,YALpB,SAOG/vD,GAAE,wBAGP,cAACm1Y,EAAA,EAAD,CACEzsC,WAAY51X,cAAI,CAACutW,IAAuC+pB,0BACxDN,kBAAiB,OAAEkwR,SAAF,IAAEA,QAAF,EAAEA,GAAuB/8oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAC9Eq3W,oBAAmB,OAAEkwR,SAAF,IAAEA,QAAF,EAAEA,GAAuB98oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAChF4iZ,OAAQ,SAACx2T,GAAD,OAAU,WAChB80T,EAAqB90T,KAEvB+pR,eAAe,EACf/pR,KAAM60T,EACN76R,QAAS,WACP86R,GAAqB,IAEvBnjG,SAAU,YAA2C,IAAD,EAAvCnxT,EAAuC,EAAvCA,OAAmB0pX,GAAoB,EAA/B3+Q,UAA+B,EAApB2+Q,eACxBusC,EAAgB,iBAAGj2Z,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,2BAAf,QAAsC,GACtDs9Z,EAAgB,GACtBD,EAAiB10Z,SAAQ,YAAgC,IAA7B8wF,EAA4B,EAA5BA,OAAYs8B,EAAgB,EAApB74F,GAC9BogY,EAAc7jU,GAChB6jU,EAAc7jU,GAAQpxF,KAAK0tH,GAE3BunS,EAAc7jU,GAAU,CAACs8B,MAG7B,IAAMwnS,EAAgF,GAEtF,IAAK,IAAMh9Z,KAAO+8Z,EAAe,CAC/B,IAAMrpM,EAAWqpM,EAAc/8Z,GAC/Bg9Z,EAAsBl1Z,KAAK,CACzB60B,GAAI2a,SAASt3C,EAAK,IAClB0zN,SAAUA,EAAShvN,KAAI,SAAC8wH,GAAD,MAAgB,CAAE74F,GAAI64F,QAGjD,IAAM22Q,EAA4B2wB,EAAiBv/Z,OAAS,EACtDylU,EAAY,SAACi6F,EAAqElvM,GACtF,IAAIiqL,EAMEklB,GAJJllB,EADErkY,OAAKF,OAAOwpZ,GACDA,EAAan+Y,QAEbm+Y,GAEiBx9Z,IAAI,MAWpC,GAVA4mC,GAAS,IAAIqoE,IAA2B5pF,iBAAO,CAACkzX,MAE9C3xW,GADE0nL,EACO,IAAIr9G,IAAwB,CAAEkB,UAAWsrT,EAAcnvM,YAEvD,IAAIn/G,KAGfusT,GAAqB,GACrBqxZ,GAAY,GACZC,EAA2B,cAAe,CAACI,oBAAqB3vZ,IAC5D/wB,EAEF9lW,GAAS,IAAIwuD,IAAiB,CAC5B+c,UAAWsrT,EACXn4W,KAAMz2C,cAAI,CAACpE,KAAM8tY,EAAWv4Y,IAAI,UAChCujU,UAAW,SAAC8pf,GACVJ,GAAUxvZ,EAAc4vZ,WAGvB,CAEL,IACMA,EADU90a,EAAWv4Y,IAAI,SAASqf,QACdrf,IAAI,MAC9BitzB,GAAUxvZ,EAAc4vZ,KAGtBz4a,EAAW,SAACvnW,GAChBzG,GAAS,IAAIqpE,KAAoB,CAAE5iE,SACnCzG,GAAS,IAAI0gE,KAAkC,CAAEksR,OAAO,MAIxD5sV,GAFE8lW,EAEO,IAAI79R,IAAgC,CAC3Cm7K,QAAS8mG,EACTmkB,iBAAkB,CAChB,CACE/qH,YAAaqzI,EACbf,gBAAiB,WACjBlzI,WAAY,oBAGhBi6C,YACAqxE,aAIO,IAAIjnS,IAAoB,CAC/Bq8K,QAAS8mG,EACTvtD,YACAqxE,qB,SC/YRnpR,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9C8gF,IAAK,CACH32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACTvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG1C0hE,SAAU,CACRvpS,aAAc,WACdc,WAAY,SACZpM,SAAU,cAkDCo3S,GA/CU,SAAC,GAAwD,IAAtDp4W,EAAqD,EAArDA,KAAMiyD,EAA+C,EAA/CA,MAAOuJ,EAAwC,EAAxCA,QAAwC,IAA/BS,gBAA+B,SACzEpsC,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACR,OACE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRV,UAAWF,EAAQ8iF,IACnB1gD,MAAOA,EACPuJ,QAASA,EACTrqC,KAAK,SANP,UAQE,cAAC63S,EAAA,EAAD,CAAOpsR,MAAM,UAAU+1B,QAAS1W,EAAUhK,MAAO,CAAEkG,YAAa,UAChE,sBAAKlG,MAAO,CAAEj/B,SAAU,GAAxB,UACE,eAACxD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRU,KAAK,SAHP,UAKE,cAAC3B,EAAA,EAAD,CAAMyiC,MAAO,CAAEhgC,MAAO,KAAtB,SACE,cAACk+B,EAAA,EAAD,CAAYE,QAAQ,YAAYtgC,UAAWF,EAAQgmV,SAAU5jT,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAhG,SACG97D,EAAKtlD,IAAI,YAGd,cAAC80E,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAAjE,SACGp5F,EAAE,6CAIT,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,aACRU,KAAK,SAHP,SAKE,cAAC3B,EAAA,EAAD,UACE,cAAC2gC,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAE6L,SAAU,WAA/C,mBACMp7F,EAAE,uCADR,aACmDw4S,YAAWl7Q,EAAKtlD,IAAI,kBAAoB,oB,oBCjCjGyrH,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9CshD,gBAAiB,CACflhD,MAAO,OACPe,SAAU,GAEZ2/E,IAAK,CACH32C,OAAQ,UACRvpC,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BstC,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQsqP,SACzC,UAAW,CACTvqP,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QAG1CjlV,KAAM,CACJujE,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,GAC7BgB,MAAO,OACP+uC,SAAU,OACVhuC,SAAU,OAGR8iV,GAAgB,CACpB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAGHm+X,GAAmB,SAACx/F,GAAD,MAAsB,CAC7C,IAAO,CACL,CACE,KAAQ,CACN,KAAQA,IAGZ,CACE,KAAQ,CACN,IAAM,IAGV,CACE,UAAa,CACX,GAAM,OAGV,CAAE,oBAAqB,CAAE8hG,IAAK//X,qBAoLnB0vxB,GAjLG,SAAC,GAMZ,IALL9qf,EAKI,EALJA,SACA73E,EAII,EAJJA,SACAoikB,EAGI,EAHJA,YACAC,EAEI,EAFJA,2BACAj8b,EACI,EADJA,YAEA,EAAoCp2U,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAAkD5rE,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACMvmV,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACXyyE,EAAYrxE,sBAAYywJ,gBACxBnnJ,EAAOtJ,sBAAYwwJ,gBACzB,EAAmGxwJ,sBAAY8pF,YAA+BmuhB,KAAtI3yhB,EAAR,EAAQA,QAASiqhB,EAAjB,EAAiBA,kBAAmB+B,EAApC,EAAoCA,mBAAoBE,EAAxD,EAAwDA,uCACxD,EAAkDxkmB,mBAAS,MAA3D,mBAAOmkV,EAAP,KAA0B++B,EAA1B,KAEMC,EAAmB,SAACjiG,GACxBj1R,EAAS,IAAIkyD,KAAkC,CAC7C7wD,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,OAGxBogG,EAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,GAChDiiG,EAAiBjiG,KAChB,OAAM,IAYHoxf,EAAY,SAACxztB,GACjB7yD,EAAS,IAAIw0D,KAAoC,CAC/C3B,SACAupgB,SAAU,OACVz/R,UAAW,WACTwpf,GAAY,GACZvqf,IACI06U,EACFiC,EAAuClshB,EAAS,GAEhDgshB,EAAmBhshB,QAqC3B,OAbA7wF,qBAAU,YACR,OAAI6U,QAAJ,IAAIA,OAAJ,EAAIA,EAAM5lC,UACRu1B,EAAS,IAAIoyD,KAA2B,CAAEikG,MAAO/oL,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAEjF,IAEHnxW,qBAAU,WACJ2uV,IAAgBr6V,OAAK4uB,OACvB1e,EAAS,IAAIwyD,KACb0kU,EAAiB,OAElB,CAAC/sC,IAGF,qCACE,eAACj8S,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQsjD,gBAAiB1iD,QAAQ,gBAA/E,UACE,cAACo8O,EAAA,EAAD,CACEiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SAhEkB,SAACpzG,GACzBkiH,EAAcliH,EAAE4kB,OAAOtxB,OACvBkma,EAAqB,MACE,KAAnBx5Z,EAAE4kB,OAAOtxB,QACXivC,EAAS,IAAIwyD,KACb6iU,EAAgB53Z,EAAE4kB,OAAOtxB,SA4DrBwhH,SAAUwxI,EACV1jI,YAAaj/F,EAAE,4CACf+wF,WAAY,CACVC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACd,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQC,KAAK,WAGnD5J,MAAO,CAAC0mB,KAAM,UAAWnO,aAAc,MAEzC,cAAClP,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QArEe,WACrB46S,GAAqB,IAqEfr7I,UAAW,cAAC,KAAD,IACX9oK,MAAO,CAAEx/B,QAAS,YAClBohC,SAAUwxI,EANZ,SAOE3iO,EAAE,wBAEN,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALrB,SAQIwqG,GAAa2rI,EAAW,eAAC71K,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACtB,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACGg1I,EAAW3iO,EAAE,0CAA4Cg3F,EAAYh3F,EAAE,sCAAwC,OAElH,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAErBjrD,EAAK5lC,QAAU,EACd,cAAC,KAAD,CACAm8G,OAAQ,IACRwwS,UAAW/mX,EAAKj/C,KAChBima,SAAU,GACV1mV,MAAOg2uB,GAAc,GAJrB,SAxEI,SAAC,GAAiC,IAAxBpvZ,EAAuB,EAA9B/la,MAAkBm/G,EAAY,EAAZA,MAC/BjyD,EAAOrO,EAAKj3C,IAAIm+Z,GACtB,OAAO,cAAC,GAAD,CACL/la,MAAO+la,EACP5mT,MAAOA,EACPuJ,QAAS,WACP+8S,EAAqBM,IAEvB58S,SAAU48S,IAAcr/B,EACxBx5U,KAAMA,OAuEI,eAAC,IAAMkhO,SAAP,WACA,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,wCAEL,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACGp7F,EAAE,4CAKf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEj/B,SAAU,GAA7D,UACE,cAACsoC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAMtE,SAAUwxI,EAAjF,SAA4F3iO,EAAE,wBAC9F,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAnFmB,WACzB,IACMrnB,EADOxiD,EAAKj3C,IAAI8+X,GACF9+X,IAAI,MACxB+szB,GAAY,GACZE,EAAUxztB,GACVuztB,EAA2B,gBAAiB,CAACrwZ,kBAAmBljU,KA+E1D0f,UAAWv7G,OAAOs5L,cAAc4nM,IAAsBn0I,EACtDpzI,MAAO,CAAEx/B,QAAS,YALpB,SAOG/vD,EAAE,wBAGP,cAACo2Y,GAAA,EAAD,CACEx3T,KAAM60T,EACNljG,SAAU,SAACnxT,EAAQi3Z,GACjBz3X,EAAS,IAAIwuD,IAAiB,CAC5B+c,UAAWksT,EACX/4W,KAAMl+C,EACNm8T,UAAW,SAAC9pO,GACViiU,GAAqB,GACrBqxZ,GAAY,GACZE,EAAUxztB,GACVuztB,EAA2B,WAAY,CAACrwZ,kBAAmBljU,SAIjE2jU,OAAQ,SAACx2T,GAAD,OAAU,WAChB80T,EAAqB90T,W,UC1NzB6kB,GAAYJ,aAAW,SAACl0C,GAAD,MAAmB,CAC9CshD,gBAAiB,CACflhD,MAAO,OACPe,SAAU,GAEZ9jE,KAAM,CACJ25G,cAAeh3C,EAAMZ,QAAQ,GAC7BgB,MAAO,OACP+uC,SAAU,OACVhuC,SAAU,OAGR8iV,GAAgB,CACpB11S,MAAO,GACP37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IA+TMswxB,GA3TK,SAAC,GAMd,IALLhrf,EAKI,EALJA,SACA73E,EAII,EAJJA,SACAoikB,EAGI,EAHJA,YACAC,EAEI,EAFJA,2BACAj8b,EACI,EADJA,YAEA,EAAoCp2U,mBAAS,IAA7C,mBAAO+jE,EAAP,KAAmB6H,EAAnB,KACA,EAA4C5rE,mBAAS,IAArD,mBAAO4gX,EAAP,KAAuBC,EAAvB,KACA,EAAkD7gX,oBAAS,GAA3D,mBAAO8gX,EAAP,KAA0BC,EAA1B,KACA,EAAgD/gX,mBAAS,MAAzD,mBAAO6jX,EAAP,KAAyBC,EAAzB,KACA,EAAgD9jX,mBAAS,MAAzD,mBAAO+jX,EAAP,KAAyBC,EAAzB,KACMxpV,EAAUs2C,KACVt0C,EAAQwjD,cACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACXyyE,GAAYrxE,sBAAY85K,eACxBxwK,GAAOtJ,sBAAY45K,eACzB,GAAiJ55K,sBAAY8pF,YAA+BmuhB,KAApL3yhB,GAAR,GAAQA,QAASiqhB,GAAjB,GAAiBA,kBAAmB+B,GAApC,GAAoCA,mBAAoBE,GAAxD,GAAwDA,uCAAwC4C,GAAhG,GAAgGA,sBAAuBC,GAAvH,GAAuHA,sBAEjHpjP,GAAoB,SAAC/iG,GACzBj1R,EAAS,IAAIyiE,KAAoB,CAC/BphE,QAASmzX,GACT51S,QAAS61S,GAAiBx/F,EAASkmV,GAAuBC,QASxD/lP,GAAkBx5X,mBAAQ,kBAAMzoB,IAAE6yK,UAAS,SAACgvI,GAChD+iG,GAAkB/iG,KACjB,OAAM,IAYH4xf,GAAkB,SAAC7liB,EAAUnuL,GACjC7yD,EAAS,IAAIw0D,KAAoC,CAC/C3B,SACAupgB,SAAU,SACV7wf,UAAWy1K,EACX27C,UAAW,WACTwpf,GAAY,GACZvqf,IACI06U,GACFiC,GAAuClshB,GAAS,GAEhDgshB,GAAmBhshB,SA8F3B,OAbA7wF,qBAAU,YACR,OAAI6U,SAAJ,IAAIA,QAAJ,EAAIA,GAAM5lC,UACRu1B,EAAS,IAAI6iE,KAA6B,CAAEy+G,QAASh0M,iBAAQ7C,MAAO,EAAGkiY,aAAa,OAErF,IAEHnxW,qBAAU,WACJ2uV,IAAgBr6V,OAAKghG,SACvB9wF,EAAS,IAAImiE,MACb61T,GAAkB,OAEnB,CAAC7tC,IAGF,qCACE,eAACj8S,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMR,UAAWF,EAAQsjD,gBAAiB1iD,QAAQ,gBAA/E,UACE,cAACo8O,EAAA,EAAD,CACEiB,WAAW,EACXz7T,MAAO+mH,EACPjH,SA1HkB,SAACpzG,GACzBkiH,EAAcliH,EAAE4kB,OAAOtxB,OATvB6ja,EAAkB,IAClBE,GAAqB,GACrB+C,EAAoB,MACpBE,EAAoB,MAQG,KAAnBt6Z,EAAE4kB,OAAOtxB,QACXivC,EAAS,IAAImiE,MACbkzT,GAAgB53Z,EAAE4kB,OAAOtxB,SAsHrBwhH,SAAUwxI,EACV1jI,YAAaj/F,EAAE,4CACf+wF,WAAY,CACVC,eAAgB,cAACC,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACd,cAAC,IAAD,CAAY3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQC,KAAK,WAGnD5J,MAAO,CAAC0mB,KAAM,UAAWnO,aAAc,MAEzC,cAAClP,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN4e,QA/He,WACrB46S,GAAqB,IA+Hfr7I,UAAW,cAAC,KAAD,IACX9oK,MAAO,CAAEx/B,QAAS,YAClBohC,SAAUwxI,EANZ,SAOE3iO,EAAE,wBAEN,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAC2W,WAAY,EAAG51C,SAAU,GAA1F,UACE,cAAC,KAAD,CAAai/B,MAAO,CAACrV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAAMi5C,OAAQ,KAChE,cAACi+B,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAApC,SAAmDl6E,EAAE,sDAEvD,cAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ3gE,KALrB,SAQIwqG,IAAa2rI,EAAW,eAAC71K,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAArD,UACtB,cAACugC,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACGg1I,EAAW3iO,EAAE,0CAA4Cg3F,GAAYh3F,EAAE,sCAAwC,OAElH,cAAC61S,EAAA,EAAD,CAAkB37N,MAAM,eAErBjrD,GAAK5lC,QAAU,EACd,qBAAKkmG,MAAO,CAAE+O,SAAU,OAAQ/uC,MAAO,OAAQghC,UAAW,OAAQsX,UAAW,QAA7E,SACC54E,GAAKhyC,KAAI,SAACyyH,GACT,OAvIE,SAACA,GACjB,IAAMkwJ,EAAWlwJ,EAAO13H,IAAI,MACtBi9L,EAAQvlE,EAAO13H,IAAI,SACzB,OAAO,cAAC,EAAD,CAELmuX,cAAeotC,EAAe3zI,GAC9B9mK,QAAS,WACH09S,IAAqB52I,GACvB62I,EAAoB72I,GACpB+2I,EAAoB/2I,GACE,IAAlB3qF,EAAM5rL,SAA8C,IAA7BkqZ,EAAe3zI,IAExC4zI,GAAkB,SAACtuJ,GAAD,mBAAC,eACdA,GADa,kBAEf0a,EAAW,QAKd+2I,EADED,IAAqB92I,EACH,KAEAA,IAI1BgzI,WAAY8D,IAAqB92I,EACjCizI,eAAgB,SAAClja,GAEbgna,EADEhna,EACkBiwR,EAEA,OAGxB1lK,WAAYs8S,IAAqB52I,EACjCkzI,SAAU,SAAC1ia,EAAO8pH,GACZs8S,IAAqB52I,GACvB62I,EAAoB72I,GAIpB4zI,EAFEt5S,EAEgB,SAACgrJ,GAAD,mBAAC,eACdA,GADa,kBAEf0a,EAAWxvR,KAII,SAAC80Q,GAAD,mBAAC,eACdA,GADa,kBAEf0a,EAAW,UAIlBoC,QAAStyJ,GAhDJkwJ,GAmIcs1I,CAAUxlS,QAGnB,eAAC,IAAM8uJ,SAAP,WACA,cAAC/wK,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,wCAEL,cAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQ4B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAASgC,SAAU,WAAlF,SACGp7F,EAAE,4CAKf,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAAWwhC,MAAO,CAAEj/B,SAAU,GAA7D,UACE,cAACsoC,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS0hN,EAAUjrN,MAAO,CAAEkG,YAAa,IAAMtE,SAAUwxI,EAAjF,SAA4F3iO,EAAE,wBAC9F,cAAC44F,EAAA,EAAD,CACEjL,QAAQ,YACRzT,MAAM,UACN4e,QAlGqB,WAC3B,IAAM4W,EAAM,OAAGzgF,SAAH,IAAGA,QAAH,EAAGA,GAAMr5B,MAAK,SAACs3X,GAAD,OAAaA,EAAQl1Y,IAAI,QAAUw+Z,KACvD0uZ,EAAqD,IAArC3xZ,EAAeiD,GAGrC,GAFAuuZ,GAAY,GACZC,EAA2BE,EAAgB,sCAAwC,2CAA4C,CAACQ,oBAAqBlvZ,IACjJ0uZ,EACFtmxB,EAAS,IAAIusD,IAAuB,CAClCgf,UAAWqsT,EACXl5W,KAAMz2C,cAAI,CAACpE,KAAMud,EAAE,8CACnBu7S,UAAW,SAAC9pO,GACVg0tB,GAAgBjvZ,EAAkB/kU,WAGjC,CACL,IAAMwjG,EAAK,OAAGvlE,QAAH,IAAGA,OAAH,EAAGA,EAAQ13H,IAAI,SACpBmtzB,EAAoB,OAAGlwnB,QAAH,IAAGA,OAAH,EAAGA,EAAOz1L,QAAO,SAAC89C,EAAMltD,GAAP,OAAiBmja,EAAeiD,KAAsBpma,EAAQ,KAAG4H,IAAI,GAC1Gy5F,EAAM,OAAG0ztB,QAAH,IAAGA,OAAH,EAAGA,EAAsBntzB,IAAI,MACzCytzB,GAAgBjvZ,EAAkB/kU,KAkF9B0f,SAA+B,OAArBqlT,IAA+BjD,EAAeiD,IAA0D,IAArCjD,EAAeiD,IAA6B7zK,EACzHpzI,MAAO,CAAEx/B,QAAS,YALpB,SAOG/vD,EAAE,wBAGP,cAAC82Y,GAAA,EAAD,CACEl4T,KAAM60T,EACN3pC,kBAAiB,OAAEkwR,SAAF,IAAEA,QAAF,EAAEA,GAAuB/8oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAC9Eq3W,oBAAmB,OAAEkwR,SAAF,IAAEA,QAAF,EAAEA,GAAuB98oB,KAAI,SAACspW,GAAD,OAAaA,EAAQvuW,IAAI,SAAOwa,OAChF+9S,SAAU,SAACnxT,EAAQ0nX,GAA2B,IAAD,EACrCrkX,EAAI,OAAGrD,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,QACnB+vN,EAAa,OAAG3oN,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,iBAC5B++Z,EAAkB,OAAG33Z,QAAH,IAAGA,OAAH,EAAGA,EAAQyV,MAAM,CAAC,mBAAoB,EAAG,eAC3DwgZ,EAAgB,iBAAGj2Z,QAAH,IAAGA,OAAH,EAAGA,EAAQpH,IAAI,2BAAf,QAAsC,GACtDs9Z,EAAgB,GACtBD,EAAiB10Z,SAAQ,YAAgC,IAA7B8wF,EAA4B,EAA5BA,OAAYs8B,EAAgB,EAApB74F,GAC9BogY,EAAc7jU,GAChB6jU,EAAc7jU,GAAQpxF,KAAK0tH,GAE3BunS,EAAc7jU,GAAU,CAACs8B,MAG7B,IAAMwnS,EAAwB,GAE9B,IAAK,IAAMh9Z,KAAO+8Z,EAAe,CAC/B,IAAMrpM,EAAWqpM,EAAc/8Z,GAC/Bg9Z,EAAsBl1Z,KAAK,CACzB60B,GAAI38B,EACJ0zN,SAAUA,EAAShvN,KAAI,SAAC8wH,GAAD,MAAgB,CAAE74F,GAAI64F,QAGjD,IAAM5yF,EAAU,CACdixW,iBAAkB2qB,EAClBrnS,OAAQ,CACNxP,SAAQ,OAAE9gH,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtB0lD,SAAQ,OAAEt+C,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtByK,OACAslN,kBAGEivM,EAA2B3B,EAAiBv/Z,OAAS,EAErDylU,EAAY,SAACpoR,GAAD,OAAa,SAAC+sK,GAC9B,IAAM+2M,EAAY/2M,EAAQloN,IAAI,GACxB2tzB,EAAc1uZ,EAAUj/Z,IAAI,MAIlC,GAHA07Z,GAAqB,GACrBqxZ,GAAY,GACZC,EAA2B,aAAc,CAACU,oBAAqBC,IAC3D3uZ,EAEFp4X,EAAS,IAAIusD,IAAuB,CAClCgf,UAAWw7sB,EACXrowB,KAAMz2C,cAAI,CAACpE,KAAMw0Z,EAAUj/Z,IAAI,UAC/BujU,UAAW,SAAC8pf,GACVI,GAAgBE,EAAaN,WAG5B,CAGL,IAAMA,EAAYpuZ,EAAUpiZ,MAAM,CAAC,QAAS,EAAG,OAC/C4wyB,GAAgBE,EAAaN,GAE/BlywB,MAEF,OAAI6jX,GACF77X,EAAQ8xW,iBAAmB,CAAEh4M,MAAOsgO,GACpCp6X,EAAQ6rV,YAAcF,EACf,IAAI5zU,SAAQ,SAACC,EAASi3B,GAC3BxrC,EAAS,IAAIikE,IAAJ,2BACJ1nE,GADI,IAEPogS,UAAWA,EAAUpoR,GACrBy5V,SAAU,kBAAMxiU,aAIb,IAAIl3B,SAAQ,SAACC,EAASi3B,GAC3BxrC,EAAS,IAAI+jE,IAA0B,CACrC+sB,OAAQ,CACNjtH,OACAi7C,SAAQ,OAAEt+C,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtBkoH,SAAQ,OAAE9gH,QAAF,IAAEA,OAAF,EAAEA,EAAQpH,IAAI,YACtB+vN,iBAEFwzG,UAAWA,EAAUpoR,GACrBy5V,SAAU,kBAAMxiU,YAKxBwuD,QAAS,WACP86R,GAAqB,U,2BC1UlBkqP,GAAkC,+BAClC2nK,GAAc,IAsLZr8uB,sBACbgG,aA5Ka,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ+jE,MAAOg2uB,GACPh1uB,SAAU,UACVi1C,OAAQ,KAEVgqS,eAAgB,CACdz/U,QAASZ,EAAMZ,QAAQ,EAAG,GAC1Bi3C,OAAQ,QAEVmyI,QAAS,CACPxxI,cAAeh3C,EAAMZ,QAAQ,IAE/BkhV,eAAgB,CACdj0G,UAAW,OACXjsO,MAAO,OACPi2C,OAAQ,MACRW,cAAeh3C,EAAMZ,QAAQ,IAE/BshV,kBAAmB,CACjBxgV,QAAS,OACTm2C,OAAQ,OACR21O,UAAW,SACXjuR,WAAY,UAEdgqV,WAAY,CACV3nV,MAAO,OACPI,eAAgB,aAChBzC,WAAY,UAEd6iV,UAAW,CACThgV,QAAS,YAEXjwD,OAAQ,CACN21F,YAAatmC,EAAMZ,QAAQ,IAE7Bi1R,QAAS,CACPh0R,OAAQL,EAAMZ,QAAQ,EAAG,IAE3ByhV,aAAc,CACZxnS,OAAQ,EACRz4C,QAASZ,EAAMZ,QAAQ,EAAG,GAC1B0qC,gBAAiB,YAkIA,CAAEgK,WAAW,IAChC7vE,YAAgB,gBAChB0/D,mBA5BsB,SAAC73E,GAEvB,OAAO,eACF8L,YAAyB,CAC1BqxN,aAAc3oI,YAA+BmuhB,KAD5C72mB,CAEA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAyxX,YAAa,WACXzxX,EAAS,IAAI0J,IAA6B,CACxCpT,GAAI0onB,GACJh/iB,MAAM,KAERhgE,EAAS,IAAI4J,IAA+B,CACxCtT,GAAI0onB,GACJz/mB,MAAO,WAUfilF,KAJal6C,EA7HkB,SAAC/qC,GAQ5BA,EANFgxC,MADF,IAEEhC,EAKEhvC,EALFgvC,QACAirL,EAIEj6N,EAJFi6N,aACAi4J,EAGElyX,EAHFkyX,YACAvvW,EAEE3iB,EAFF2iB,cACA9gC,EACEme,EADFne,EAIAirG,EACEmtI,EADFntI,QAGIosS,EAAuB1xX,sBAAYoX,iBAGzC3iB,qBAAU,WACR,OAAOi2X,IACN,IAEHj2X,qBAAU,WACRwrxB,EAAel3xB,OAAKszP,WACnB,IAGH5nP,qBAAU,WACH6wF,GACH26rB,EAAel3xB,OAAKszP,WAErB,CAAC/2J,IAEJ,MAAsCvyF,IAAMia,SAAS,IAArD,mBAAOo2U,EAAP,KAAoB68b,EAApB,KACA,EAAgCltxB,IAAMia,UAAS,GAA/C,mBAAOgwM,EAAP,KAAiBoikB,EAAjB,KAEMC,EAA6B,SAACxwZ,EAAyBv2H,GAC3DvjM,KAAmB9rE,kBAAgBi3xB,yBAA0B/kwB,EAAc,aACzEglwB,mBAAoBtxZ,EACpB1/X,WAAYm2F,EAAQjzH,IAAI,YACxB68B,aAAco2F,EAAQjzH,IAAI,gBAC1Bk5I,aAAcjmB,EAAQjzH,IAAI,SAC1Bk1H,UAAWjC,EAAQjzH,IAAI,MACvBm1H,cAAelC,EAAQjzH,IAAI,kBACxBimS,MAIP,OACE,cAAC,IAAD,CACE16K,SAAUq6hB,GACVzwkB,QAAS,CACP64C,MAAO74C,EAAQ3hE,MAEjBotH,QAASy3R,EALX,SAOE,eAACvjV,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQqiV,eAAgB/gV,KAAK,SAAlF,UACE,cAACg/B,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQwqL,QAA5C,SACG33O,EAAE,yCAEL,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQwqL,QAA1C,SACE,eAAC6/J,EAAA,EAAD,CACE,aAAW,eACX/0Z,KAAK,cACLwtJ,KAAK,EACL9iF,QAAS,CAAC8iF,IAAK9iF,EAAQ+pV,YACvBvna,MAAOo5X,EACPt5Q,SAAU,SAACpzG,GAAD,OAAOupzB,EAAevpzB,EAAE4kB,OAAOtxB,QAN3C,UAQE,cAACq8T,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,sCACTrwB,MAAO++B,OAAKszP,QACZxmK,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YACtBiX,SAAUwxI,IAEZ,cAACqpE,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,wCACTrwB,MAAO++B,OAAK4uB,KACZk+D,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YACtBiX,SAAUwxI,IAEZ,cAACzkI,EAAA,EAAD,CAASC,MAAOk5S,EAAuB,GAAKr3Y,EAAE,0CAA9C,SACE,+BACE,cAACgsS,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,qCACTrwB,MAAO++B,OAAKghG,OACZlU,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YACtBiX,SAAUwxI,IAAa00K,aAMhCtuC,IAAgBr6V,OAAKszP,QAAU,cAAC,GAAD,CAAcw4C,SAAU61F,EAAa1tK,SAAUA,EAAUoikB,YAAaA,EAAaC,2BAA4BA,EAA4Bj8b,YAAaA,IAAiB,KACxMA,IAAgBr6V,OAAK4uB,KAAO,cAAC,GAAD,CAAWk9Q,SAAU61F,EAAa1tK,SAAUA,EAAUoikB,YAAaA,EAAaC,2BAA4BA,EAA4Bj8b,YAAaA,IAAiB,KAClMA,IAAgBr6V,OAAKghG,OAAS,cAAC,GAAD,CAAa8qM,SAAU61F,EAAa1tK,SAAUA,EAAUoikB,YAAaA,EAAaC,2BAA4BA,EAA4Bj8b,YAAaA,IAAiB,c,gLCzGzM1pH,EAAgBhiP,iBAAO,CAC3Bs8B,OAAQ,GACRoswB,qBAAsB,GACtBzuwB,KAAMzqB,eACNkI,MAAOjI,gBACPkf,MAAM,EACNuvD,IAAK,GACLF,SAAS,EACTj5F,OAAO,EACP4jzB,kBAAmB,GACnBC,eAAgB,GAChBtttB,MAAO,GACP1pD,KAAM,GACNi3wB,WAAY,GACZpntB,UAAW,GACXP,eAAgB,GAChB4ntB,wBAAwB,EACxBl1X,UAAU,EACVlpP,OAAQ,GACRy4B,gBAAiB,MACjBu1P,iBAAiB,IAGbqwV,EAA8C,CAClD,MACA,OACA,OACA,QACA,SACA,uBACA,YACA,SACA,oBAEA,mBAkVajwyB,EA/UQ,WAAiF,IAAhF8kB,EAA+E,uDAAnCokO,EAAelgP,EAAoB,uCACrG,OAAQA,EAAOhrB,MACb,KAAKwrE,IAAe0B,KAChB,OAAOpmC,EAAMt/B,IAAI,QAAQ,GAE7B,KAAKgkE,IAAeU,cAClB,MAEIlhD,EADFgc,EADF,EACEA,QAEF,OAAOF,EAAMt/B,IAAI,WAAYw/B,GAE/B,KAAKwkC,IAAekD,8BAClB,MAEI1jD,EADFgc,EADF,EACEA,QAGF,OAAOF,EAAMt/B,IAAI,yBAA0Bw/B,GAE7C,KAAKwkC,IAAe4B,WAClB,MAEIpiD,EADFgc,EADF,EACEA,QAGAogE,EACEpgE,EADFogE,IAIF,OADAzC,IAAS9gG,IAAI,UAAU09lB,OAAOn6f,GACvBtgE,EAAMt/B,IAAI,MAAO0hB,iBAAOk+E,IAEjC,KAAK57B,IAAe8B,cAClB,MAEItiD,EADFgc,EADF,EACEA,QAGAwe,EACExe,EADFwe,OAEF,OAAO1e,EAAMt/B,IAAI,SAAUg+C,GAE7B,KAAKgmB,IAAe0mvB,0BAClB,MAEIlnyB,EADFgc,EADF,EACEA,QAGAmrxB,EAEEnrxB,EAFFmrxB,QACA3swB,EACExe,EADFwe,OAEF,OAAO1e,EAAM92B,MAAM,CAAC,uBAAwBmizB,GAAU3swB,GAExD,KAAKgmB,IAAegC,YAClB,MAEIxiD,EADFgc,EADF,EACEA,QAGAmc,EACEnc,EADFmc,KAEF,OAAOrc,EAAMt/B,IAAI,OAAQ27C,GAE3B,KAAKqoB,IAAekC,aAClB,MAEI1iD,EADFgc,EADF,EACEA,QAGApG,EACEoG,EADFpG,MAEF,OAAOkG,EAAMt/B,IAAI,QAASo5B,GAE5B,KAAK4qC,IAAe4C,YAClB,MAEIpjD,EADFgc,EADF,EACEA,QAEF,EAEIA,EADFmZ,cADF,MACW1nB,iBADX,EAGA,OAAOqO,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,QAAQ,GAChB+5Q,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,SAAS,GACjB+5Q,EAAIvxQ,MAAM,CAAC,iBAAkBmwC,GAASohO,EAAI7gQ,MAAM,CAAC,iBAAkBy/B,KAAY,IAAIwxK,IAAe,IAAIpxK,eACtGghO,EAAIvxQ,MAAM,CAAC,iBAAkBmwC,EAAQ,SAAU,SAGnD,KAAKqrB,IAAeoG,cAClB,MAEI5mD,EADFgc,EADF,EACEA,QAIA+4D,EAEE/4D,EAFF+4D,MADF,EAGI/4D,EADFmZ,cAFF,MAEW1nB,iBAFX,EAIMrqB,EAAU,CAAC,oBAAqB+xC,GAEtC,OAAOrZ,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAIvxQ,MAAJ,UAAc5B,EAAd,CAAuB,UAAU2xF,GACjCwhL,EAAIvxQ,MAAJ,UAAc5B,EAAd,CAAuB,qBAAqByf,KAAK+xB,UAGrD,KAAK4rB,IAAeuD,cAClB,MAEI/jD,EADFgc,EADF,EACEA,QAIA+4D,EAEE/4D,EAFF+4D,MADF,EAGI/4D,EADFmZ,cAFF,MAEW1nB,iBAFX,EAIMrqB,EAAU,CAAC,oBAAqB+xC,GAEtC,OAAOrZ,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAIvxQ,MAAJ,UAAc5B,EAAd,CAAuB,UAAU2xF,GACjCwhL,EAAIvxQ,MAAJ,UAAc5B,EAAd,CAAuB,qBAAqByf,KAAK+xB,UAGrD,KAAK4rB,IAAegG,UAClB,MAEIxmD,EADFgc,EADF,EACEA,QAIA+4D,EAEE/4D,EAFF+4D,MADF,GAGI/4D,EADFmZ,eAFF,OAEW1nB,iBAFX,GAIMrqB,GAAU,CAAC,iBAAkB+xC,IAEnC,OAAOrZ,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAIvxQ,MAAJ,UAAc5B,GAAd,CAAuB,UAAU2xF,GACjCwhL,EAAIvxQ,MAAJ,UAAc5B,GAAd,CAAuB,qBAAqByf,KAAK+xB,UAGrD,KAAK4rB,IAAe2D,eAClB,OAEInkD,EADFgc,GADF,GACEA,QAIA+4D,GAGE/4D,GAHF+4D,MADF,GAII/4D,GAFFmZ,eAFF,OAEW1nB,iBAFX,MAIIuO,GADFkgE,gBAHF,WAKM94F,GAAU,CAAC,iBAAkB+xC,IAEnC,OAAOrZ,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,UAAW0/F,IACnBq6K,EAAIvxQ,MAAJ,UAAc5B,GAAd,CAAuB,UAAU2xF,IACjCwhL,EAAIvxQ,MAAJ,UAAc5B,GAAd,CAAuB,qBAAqByf,KAAK+xB,OACjD2hO,EAAI/5Q,IAAI,mBAAmB,MAG/B,KAAKgkE,IAAeq+B,yBACpB,KAAKr+B,IAAeuE,0BACpB,KAAKvE,IAAeqE,iBACpB,KAAKrE,IAAeyE,iBAClB,OAEIjlD,EADFgc,GADF,GACEA,QAGF,GAGIA,GAFFmZ,eADF,OACW1nB,iBADX,GAEExqB,GACE+4B,GADF/4B,MAEF,OAAc,MAAVkyC,IAAkBA,KAAW1nB,iBACxByyO,EAAcp6P,eAAc,SAACywQ,GAClCA,EAAI/5Q,IAAI,QAASyG,IACjBgkzB,EAAazlzB,SAAQ,SAACpI,GACpBm9Q,EAAI/5Q,IAAIpD,EAAK0iC,EAAMjjC,IAAIO,UAItB0iC,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,QAASyG,IACjBszQ,EAAIvxQ,MAAM,CAAC,iBAAkBmwC,IAAS,SAG1C,KAAKqrB,IAAe4F,uBACpB,KAAK5F,IAAe6D,aAClB,OAAOvoC,EAAMt/B,IAAI,WAAW,GAE9B,KAAKgkE,IAAeY,uBAClB,OAEIphD,EADFgc,GADF,GACEA,QAEF,OAAOF,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,UAAWw/B,OAGvB,KAAKwkC,IAAeyD,eAClB,OAEIjkD,EADFgc,GADF,GACEA,QAGF,GAEIA,GADFmZ,eADF,OACW1nB,iBADX,GAGA,OAAc,MAAV0nB,IAAkBA,KAAW1nB,iBACxByyO,EAAcp6P,eAAc,SAACywQ,GAClC0wiB,EAAazlzB,SAAQ,SAACpI,GACpBm9Q,EAAI/5Q,IAAIpD,EAAK0iC,EAAMjjC,IAAIO,UAItB0iC,EAAM92B,MAAM,CAAC,oBAAqBmwC,IAAS,MAEpD,KAAKqrB,IAAeiE,mBACpB,KAAKjE,IAAe+D,gBAClB,OAEIvkD,EADFgc,GADF,GACEA,QAGF,GAGIA,GAFFmZ,eADF,OACW1nB,iBADX,MAGIuO,GADFkgE,gBAFF,WAIA,OAAc,MAAV/mD,IAAkBA,KAAW1nB,iBACxByyO,EAAcp6P,eAAc,SAACywQ,GAClCA,EAAI/5Q,IAAI,oBAAqBs/B,EAAMjjC,IAAI,sBACvC09Q,EAAI/5Q,IAAI,UAAW0/F,IACnB,UAAI+qtB,EAAJ,CAAkB,oBAAmBzlzB,SAAQ,SAACpI,GAC5Cm9Q,EAAI/5Q,IAAIpD,EAAK0iC,EAAMjjC,IAAIO,UAItB0iC,EAAM92B,MAAM,CAAC,iBAAkBmwC,IAAS,MAEjD,KAAKqrB,IAAe6E,SACpB,KAAK7E,IAAe+E,aAClB,OAAOzpC,EAAMh2B,eAAc,SAACywQ,GAC1B,IACEv6O,EACEhc,EADFgc,QAEF,EAGIA,EAFF5iC,WADF,MACQ,CAAC,WADT,EAEKsuvB,EAFL,YAGI1rtB,EAHJ,GAOAu6O,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,QAAS6qR,YAAWrnQ,GAAQ,SAACjV,GAAD,OAASmoK,IAAWnoK,GAAO,KAAOA,MACtEwrQ,EAAIvxQ,MAAJ,CAAW,cAAX,mBAA4B43F,YAAcxjG,KAAOsuvB,MAErD,KAAKlnrB,IAAeqF,aAClB,OAEI7lD,EADFgc,GADF,GACEA,QAEF,GAGIA,GAFF5iC,YADF,OACQ,GADR,GAEE5I,GACEwrC,GADFxrC,MAEF,OAAOsrC,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,QAAS0hB,iBAAO8B,IACxBu2P,EAAIvxQ,MAAM43F,YAAcxjG,IAAM5I,OAGlC,KAAKgwE,IAAewC,uBAClB,OAEIhjD,EADFgc,GADF,GACEA,QAGA2Z,GAEE3Z,GAFF2Z,SADF,GAGI3Z,GADF4jE,qBAFF,WAIA,OAAIA,GACK9jE,EAAM92B,MAAM,CAAC,oBAAqByoB,iBAAgB,YAAakoB,IAEjE7Z,EAAM92B,MAAM,CAAC,iBAAkByoB,iBAAgB,YAAakoB,IAErE,KAAK6qB,IAAewF,kBAClB,OAEIhmD,EADFgc,GADF,GACEA,QAGA5iC,GAGE4iC,GAHF5iC,IACA5I,GAEEwrC,GAFFxrC,MACA6rG,GACErgE,GADFqgE,UAEF,OAAOvgE,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,QAAS0hB,iBAAO8B,IACxBu2P,EAAIvxQ,MAAJ,CAAW,QAAX,mBAAsB43F,YAAcxjG,MAAO5I,GAAMklB,MAAMknF,YAAcP,SAGzE,KAAK77B,IAAe0F,mBAClB,OAEIlmD,EADFgc,GADF,GACEA,QAIA/4B,GACE+4B,GADF/4B,MAEF,OAAO64B,EAAMh2B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,WAAW,GACnB+5Q,EAAI/5Q,IAAI,QAASyG,OAGrB,KAAKu9D,IAAegB,yBAClB,OAEIxhD,EADFgc,GADF,GACEA,QAGF,OAAOF,EAAMt/B,IAAI,YAAaw/B,IAEhC,KAAKwkC,IAAesB,wBAClB,OAEI9hD,EADFgc,GADF,GACEA,QAGF,OAAOF,EAAMt/B,IAAI,iBAAkBw/B,IAErC,KAAKwkC,IAAewB,oBAClB,OAAOlmC,EAAMt/B,IAAI,kBAAkB,GAErC,KAAKgkE,IAAeQ,qBAClB,OAEIhhD,EADFgc,GADF,GACEA,QAEF,OAAOF,EAAMt/B,IAAI,SAAUw/B,IAE7B,KAAKwkC,IAAeM,qBAClB,OAEI9gD,EADFgc,GADF,GACEA,QAEF,OAAOF,EAAMt/B,IAAI,kBAAmBw/B,GAAQqlM,iBAE9C,KAAK7gK,IAAe0G,sBAClB,OAAoBlnD,EAAZgc,GAAR,GAAQA,QACR,OAAOF,EAAMt/B,IAAI,kBAAmBw/B,IAEtC,QACE,OAAOF,I,oGCrXPsrxB,E,4JAEJ,WACE,MAGItyzB,KAAKkqC,MAFPqoxB,EADF,EACEA,0BAGEC,GAJJ,EAEE7nxB,SAEgD,MAEhD8nxB,EACE,eAAC3vM,EAAA,EAAD,CAAiBE,gBAAiB,CAAE94f,MAAO,kBAA3C,UACE,uBACA,cAACvF,EAAA,EAAD,CACEE,QACE0tsB,EAA0B,CACxB/wtB,IAAK,UACL8F,IAAK,kBAJX,kDA0BA,0BAuBN,OAlBItnG,KAAKkqC,MAAMk9D,QACbortB,EAAe,2CAGe,IAArBxyzB,KAAKkqC,MAAM/7B,OACpBqkzB,EAAe,uDACfC,EAAiB,MAIjBD,EAAe,eAAC1vM,EAAA,EAAD,CAAiBE,gBAAiB,CAAE94f,MAAO,oBAA3C,4BACDlqH,KAAKkqC,MAAM+1D,OACvB,uBAFa,qBAGEjgG,KAAKkqC,MAAM2W,UAC1B,0BAKF,cAACiikB,EAAA,EAAD,CAAiBE,gBAAiB,CAAE94f,MAAO,SAA3C,SACE,gCACE,wCAGCsosB,EACAC,EACD,cAAC3vM,EAAA,EAAD,CAAiBE,gBAAiB,CAAE94f,MAAO,0BAG3C,cAAC44f,EAAA,EAAD,CAAiBE,gBAAiB,CAAE94f,MAAO,mB,GAxExBzlF,aAwF7B,IAAMmI,EAAkBkG,YAAyB,CAC/Cs0D,QAASlnD,cACT/xC,MAAOgyC,cACP8/C,MAAOv/C,cACPG,SAAUF,cACV+jD,MAAOh6C,cACP1P,KAAMyP,gBAGOwqB,oBACb4pC,kBAAQjyE,GAjBH,SAA4BjC,GACjC,MAAO,CACL4nxB,0BAA2B,SAAC5/wB,GAAD,OAAY,kBAAMhI,EAAS,IAAIimC,IAAwBj+B,MAClFhI,eAaWsqC,CAEbq9uB,G,mCC3HII,E,4JAEJ,WAIE,OAHA,YAEI1yzB,KAAKkqC,OAEP,qBAAKoxE,MAAO,CAAClgC,QAAS,QAAtB,SACE,cAACu1O,EAAA,EAAD,CACEJ,cAAe,WACb,OAAO,cAACo9C,EAAA,EAAD,CACLC,MAAM,EACN1jP,MAAO,mB,GAZGzlF,aA6BxB,IAMewwC,oBACb4pC,mBAPsB,SAACu7Q,EAAoBC,GAC3C,OAAOvnV,YAAyB,CAC9B8M,aAAcD,gBADT7M,CAEJsnV,MATE,SAA4BzvV,GACjC,MAAO,CACLA,eAYFm1O,YAAc,CAAEx7Q,IAAKu7C,IAAqB39B,YAC1C0+P,YAAW,CAAEt8Q,IAAKu7C,IAAqB0gO,WAH1BtrM,CAIby9uB,GCvEaC,O,iVCqGTC,E,4MAmGIC,gCAAkC,SAAC5xxB,GACzC,MAGI,EAAKiJ,MAFP4oxB,EADF,EACEA,wBAIIp3zB,EALN,EAEEq3zB,sBAKFD,EAAwB,IAAI/qlB,IAA4B,CAAC9mM,KAAIvlC,UAAQ+kD,gB,uDA1GvE,YAMEqywB,EAHI9yzB,KAAKkqC,MADP4oxB,0BAIsB,IAAI/qlB,KAA8BtnL,iB,oBAG5D,WAAiB,IAAD,OACd,EAQIzgD,KAAKkqC,MAPPi9L,EADF,EACEA,kBACAa,EAFF,EAEEA,uBACA+qlB,EAHF,EAGEA,sBACAD,EAJF,EAIEA,wBACA55uB,EALF,EAKEA,QACAwgC,EANF,EAMEA,QACA3tF,EAPF,EAOEA,EAIIinyB,EADcD,IACsB9qlB,IAAoBC,oBAExDwhE,EAASviE,EACd16N,MAAK,SAAC9G,EAA+BC,GAAhC,OAAkEjE,OAAOgE,EAAE5B,IAAI,mBAAqBpC,OAAOiE,EAAE7B,IAAI,sBACtH4H,QAAO,SAACutI,EAAoDt/D,GAC3D,IAAM34C,EAAK+xxB,EAAoBp5uB,EAAK71E,IAAI,gBAAkB61E,EAAK71E,IAAI,kBAC7D+8B,EAAQkyxB,EAAoBp5uB,EAAK71E,IAAI,gBAAZ,oBAA2C61E,EAAK71E,IAAI,mBAC7EkvzB,EAAMD,EAAiB,cAAUp5uB,EAAK71E,IAAI,mBAAsB61E,EAAK71E,IAAI,gBACzE2L,EAAWwpI,EAAIn1I,IAAIk9B,EAAIruB,cAAI,CAC/BquB,KACAH,QACAoyxB,QAASj7yB,oBAEX,OAAOihI,EAAI5oI,OAAO2wB,GAAI,SAACj4B,GAAD,OAA4CA,GAAO0G,GAAUY,OAAO,WAAW,SAACiI,GAAD,OAAwBA,EAAKnM,KAAK6mzB,WACtI7/yB,wBAEGgiH,EAA0B,YAAZ1b,EAEpB,OACE,8BACE,eAAC,IAAD,WACE,cAAC,IAAD,CACEtgC,UAAW6tC,IACT/tC,EAAQqlM,SADW,eAGhBrlM,EAAQi6uB,gBAAkB/9rB,IAG/BvQ,QAAS,kBAAMiusB,GAAwB,IAAI/qlB,KAA8BtnL,gBAEzE6kE,cAA+CxpH,IAArCksO,EAAuBjkO,IAAI,MACrCopH,QAAQ,EAVV,SAYE,cAAC6xS,EAAA,EAAD,CACE5lV,UAAW6tC,IACT/tC,EAAQk6uB,WADW,eAGhBl6uB,EAAQm6uB,kBAAoBj+rB,IAGjCjQ,QAAS4tsB,IAA0B9qlB,IAAoBC,oBAAsBn8M,EAAE,kDAAoDA,EAAE,kDAXnI,wBAeJ29Q,EAAO1gS,KAAI,SAAC4wE,GACV,OACE,cAAC,IAAD,CACER,UAAW6tC,IACT/tC,EAAQqlM,SADW,eAGhBrlM,EAAQi6uB,gBAAkB/9rB,IAG/BvQ,QAAS,kBAAM,EAAKgusB,gCAAgCj5uB,EAAK71E,IAAI,QAE7DuhH,SAAU0iH,EAAuBjkO,IAAI,QAAU61E,EAAK71E,IAAI,MACxDopH,QAAQ,EAVV,SAYE,cAAC6xS,EAAA,EAAD,CACE5lV,UAAW6tC,IACT/tC,EAAQk6uB,WADW,eAGhBl6uB,EAAQm6uB,kBAAoBj+rB,IAGjCjQ,QAASvrC,EAAK71E,IAAI,SAClBi/H,UAAWppD,EAAK71E,IAAI,WAAW0d,KAAK,SAZjCm4D,EAAK71E,IAAI,UAgBjB6E,oB,GA5F4B67B,aA+GrCmI,EAAkBkG,YAAyB,CAC7Cq0L,kBAAmBhqG,cACnB6qG,uBAAwBF,cACxBirlB,sBAAuBjnlB,gBAYZ72J,oBACbgG,aAhLa,SAACC,GAAD,MAA+B,CAC5CqjM,SAAU,CACR/8I,YAAY,oBAEZ,UAAW,CACTA,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQE,QAAQ,MAChDH,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtC,2BAA4B,CAC1Bjf,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,MAChCoX,WAAY,OACZxH,cAAe,cAGnBo+rB,gBAAiB,CACfvrsB,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQ+d,UAAU,MACnD7b,SAAU,GACVqa,YAAa,OAEb,0BAA2B,CACzBjF,WAAY,QAEd,kCAAmC,CACjCt2B,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7Bi6F,WAAY,OACZxH,cAAe,cAInBq+rB,WAAY,CACVnmsB,UAAW,QACXsP,WAAY,OACZxH,cAAe,aAEjBs+rB,kBAAmB,CACjBpmsB,UAAW,SACXsP,WAAY,OACZxH,cAAe,YACfj5C,QAAS,EACTR,MAAO,QA0ITn8B,YAAgB,gBAChB0/D,kBAAQjyE,GAZiB,SAACjC,GAC1B,MAAO,CACLA,WACAmoxB,wBAAyB,SAACngxB,GACxBhI,EAAS,IAAI2pG,IAA8B3hG,SAKlCsiC,CAIb29uB,G,mNC/OaU,GANK,SAACnpf,GACjB,IAAMvlO,EAAqBlzD,sBAAY6rK,YAAsB,cACvDt1G,EAAS8zK,eACf,OAAOn3K,EAAYmnQ,aAAgB9jQ,EAAQkiO,GAAS,I,UCOlDopf,GAAiB/twB,eACjBgqE,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC5C2uB,UAAW,CACPojB,UAAW,SACX1xC,OAAQ,OACRD,MAAO,MACPihD,WAAY,QAEhBi3rB,iBAAkB,CACdrssB,SAAU,GACV8F,UAAW,OACXnxC,QAA2B,EAAlBZ,EAAMZ,UACfo/C,WAAW,GAAD,OAAuB,IAAlBx+C,EAAMZ,UAAX,WA+CHm5uB,GA5C0C,SAAC,GAEnD,IAAD,IADFC,mBACE,SACIhuwB,EAAShU,sBAAY6hxB,IACrBr6uB,EAAUs2C,KACVt0C,EAAQwjD,eACR4nE,EAAM,OAAG5gJ,QAAH,IAAGA,OAAH,EAAGA,EAAQ9kC,MAAM,CAAC,gBAAiB,WACvCmL,EAAM+xB,YAAe,gBAArB/xB,EACFk+B,EAASvY,sBAAYsY,gBAIrB2pwB,EAHM,IAAI/gzB,IAAI,CAChB,CAACwqB,gBAAegE,2BAESr9B,IAAIuiM,KAAR,OAAmB5gJ,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAQ3hD,IAAI,gBAAiB,eACnEyiH,GAAY,OAAN9gE,QAAM,IAANA,OAAA,EAAAA,EAAQ9kC,MAAM,CAAC,uBAAD,OAAmC,OAAXqpC,EAAkB,MAAQ,IAAM,UAAW,GACvF+/Q,EAAWspf,GAAY9ssB,GAC7B,OACIA,EACI,qBACIlL,MAAO,CACHhgC,MAAO,cACP4sC,WAAY,OACZ1G,YAAa,OACb6R,aAAcn4C,EAAMZ,QAAQ,IALpC,SAQI,qBAAKksC,IAAKwjN,MACL,cAACxwN,EAAA,EAAD,CACTpgC,UAAW6tC,IACP/tC,EAAQ2wB,UADS,eAGZ3wB,EAAQs6uB,iBAAmBE,IAGpCp4sB,MAAO,CACH+X,aAAcqgsB,EAAc,EAAIx4uB,EAAMZ,QAAQ,IAElDo/B,QAAQ,KAVC,SAYR3tF,EAAE,uCAAwC,CAAE4nyB,gBCwF5Cz9K,GAAgC,SAACj/gB,EAA+BgqqB,GAAsC,IAAD,EAK1GhrJ,GAAiB,UAAAt1mB,wBAAsBs2F,EAAer2G,MAAM,CAAC,WAAY,EAAG,qBAA3D,eAA0EkgB,QAASm2F,EAAer2G,MAAM,CAAC,WAAY,EAAG,kBAAoB,GAM7JgzyB,EAAoB39K,EAAep0oB,OACnCu2O,EAAQ,kBACRy7kB,EAAgB5yB,EAAYt1xB,QAAO,SAACmozB,EAAsBzznB,GAC9D,IAAMsvhB,EAActvhB,EAAQt8L,IAAI,QAChC,GAAI4rtB,EAAYjzhB,WAAWu5c,GAAiB,CAC1C,IAAMpnd,EAAY8giB,EAAY7/sB,MAAM8jzB,GACpC,GAAIx7kB,EAAMr9L,KAAK8zI,GAAY,CACzB,IAAMrU,EAAS74K,OAAOktL,EAAU/+K,MAAM,IACtC,GAAI0qK,EAASs5oB,EACX,OAAOt5oB,GAIb,OAAOs5oB,IACN,GAEH,MAAM,GAAN,OAAU79K,EAAV,YAA4B49K,EAAgB,IAiKjCpiiB,GAAY,aAanBsiiB,G,4MACG/sxB,MAAQ,CACbowF,SAAU,EACVnG,UAAW,EACX+isB,WAAY,KACZC,mBAAoB,I,EAefjjjB,mBAAqB,SAAC3yJ,GAC3B,IAAK,EAAKn0E,MAAM4yF,qBAAuBze,EAAUye,oBAAqB,CACpE,IAAMo3rB,EAAaluxB,SAASg2Q,cAAc,+BACtCk4gB,IACFA,EAAW54sB,MAAM0tP,WAAa,a,EAa7Bmrd,UAAY,WACjB,MAOI,EAAKjqxB,MANP4rG,EADF,EACEA,aACA9a,EAFF,EAEEA,KACAjuE,EAHF,EAGEA,YACA0irB,EAJF,EAIEA,sBACAnorB,EALF,EAKEA,cACA3c,EANF,EAMEA,SAGIypxB,EAAY,WAChBzpxB,EAAS,IAAI6sD,MAAc/8D,OAAKw+mB,mBAChCtumB,EAAS,IAAI6pD,OAAyB,KAGxC,UAAIshD,QAAJ,IAAIA,OAAJ,EAAIA,EAAc/xI,IAAI,MAAO,CAC3B,IAAMswzB,EAAiD,QAAvB,OAAZv+qB,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,cAChCuwzB,EAAY,OAAGx+qB,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,YACjCwwzB,EAAc,OAAGz+qB,QAAH,IAAGA,OAAH,EAAGA,EAAc/xI,IAAI,oBACnCs+Z,EAA6C,UAApB,OAAZvsR,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,WAC/BywzB,GAA4B,OAAZ1+qB,QAAY,IAAZA,OAAA,EAAAA,EAAc/xI,IAAI,gBAAiBuwzB,IAAiBC,IAAmBlyZ,EAEzFt1W,EACEiuE,IAASvgG,OAAK4uB,MAChB+qwB,IAICC,GAAer5rB,IAASvgG,OAAK4uB,MAC1BirwB,GAAgBt5rB,IAASvgG,OAAKghG,QAC9B84rB,GAAkBv5rB,IAASvgG,OAAKkhG,gBAChC0mS,GAAcrnS,IAASvgG,OAAKu+mB,aAC5Bw7K,GAAiBx5rB,IAASvgG,OAAKszP,QAEnCqmiB,KACUG,GAAkBv5rB,IAASvgG,OAAKkhG,gBAAqBr0E,GAAiBmorB,GAChF2kF,SAIJA,K,EAIGK,WAAa,WAClB,IACE9pxB,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,GACJ9mL,MAAM,KAGRhgE,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIwwP,O,EAIDu4gB,QAAU,WACf,IACEr/vB,EACE,EAAKT,MADPS,SAGFA,EAAS,IAAIkqP,IAAmB,CAACgqU,QAAS,KAE1Cl0jB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIwwP,GACJ9mL,MAAM,KAGRhgE,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAIwwP,GACJ91O,QAASotnB,Q,EAIN2rJ,qBAAuB,SAACx0zB,GAC7B,MAOI,EAAKgqC,MANPq0V,EADF,EACEA,eACA1hQ,EAFF,EAEEA,gBACA6smB,EAHF,EAGEA,8BACA1umB,EAJF,EAIEA,KACAnuE,EALF,EAKEA,cACAliB,EANF,EAMEA,SAQF,GALAA,EAAS,IAAIigG,KAA+B,CAAC/pG,WAAY3gC,EAAK6D,IAAI,SAGlE4mC,EAAS,IAAI4I,IAAoB,CAACmsF,UAAU3xG,KAAK+xB,MAAO50B,OAAQyP,kBAAgBglG,4BAE5E3E,IAASvgG,OAAKw+mB,iBAEhBtumB,EAAS,IAAIuhG,KAAsB,gBACnCqyP,EAAer+X,GAAM,GACrBumG,IAAmB9rE,kBAAgBg6xB,6BAA8B9nwB,EAAc,CAC7EhsB,WAAY3gC,EAAK6D,IAAI,MACrB68B,aAAc1gC,EAAK6D,IAAI,eAEpB,CAGL,GAA+B,KAFL84H,GAAmBA,EAAgB94H,IAAI,aAAekU,kBAE1Dlc,KACpB,OAAOwiY,EAAer+X,GAEvBwpuB,EAAuDnrW,EAAer+X,EAAMwpuB,GAA5CnrW,EAAer+X,K,uDAvIpD,WACE,MAGIF,KAAKkqC,MAFP0qxB,EADF,EACEA,qBACAjqxB,EAFF,EAEEA,SAGF3qC,KAAKm0zB,YAELS,IACAjqxB,EAAS,IAAIusF,KAAwB,O,kCAYvC,YAKEvsF,EAFI3qC,KAAKkqC,MADPS,UAGO,IAAI4zF,MAAgC,M,oBAiH/C,WAAiB,IAwDXw3gB,EACAC,EAzDU,OACd,EAGIh2oB,KAAKgnC,MAFPgtxB,EADF,EACEA,WACAC,EAFF,EAEEA,mBAEF,EAsBIj0zB,KAAKkqC,MArBPne,EADF,EACEA,EACAqxG,EAFF,EAEEA,WACAlkD,EAHF,EAGEA,QACAokD,EAJF,EAIEA,eACA5jB,EALF,EAKEA,QACAq5sB,EANF,EAMEA,sBACApoxB,EAPF,EAOEA,SAPF,IAQEmrG,oBARF,MAQiBljI,gBARjB,EASEg4M,EATF,EASEA,SACA/tF,EAVF,EAUEA,gBACA7B,EAXF,EAWEA,KACA65rB,EAZF,EAYEA,kBACA35uB,EAbF,EAaEA,MACAg3hB,EAdF,EAcEA,sBACAC,EAfF,EAeEA,wBACAtljB,EAhBF,EAgBEA,cACAiwE,EAjBF,EAiBEA,oBACA64P,EAlBF,EAkBEA,0BACA0+R,EAnBF,EAmBEA,kBACAtnmB,EApBF,EAoBEA,YACAu5I,EArBF,EAqBEA,OAEIlxE,EAA0B,YAAZ1b,EACdo7sB,GAAkBb,EAAmB76wB,cAErC27wB,GAAyB33rB,EAC5BzxH,QAAO,SAACutI,EAAK9hB,GACZ,IAAM49rB,EAAe59rB,EAASrzH,IAAI,gBAClC,OAAOm1I,EAAI9sI,KAAJ,MAAA8sI,EAAG,YAAS87qB,MAClB/8yB,kBACF1M,QAAO,SAAAsM,GAAC,OAAIA,EAAE9T,IAAI,QAAQq1C,cAAc7vC,SAASurzB,OAEjDrozB,MAAK,SAAC9G,EAAGC,GAAJ,OACJjE,OAAOiE,EAAE7B,IAAI,gBAAkBpC,OAAOgE,EAAE5B,IAAI,iBACzCpC,OAAOiE,EAAE7B,IAAI,eAAiBpC,OAAOgE,EAAE5B,IAAI,iBAC1C,GAAK4B,EAAE5B,IAAI,SAASwjO,cAAc3hO,EAAE7B,IAAI,YAS1CmnuB,GAAO,SAACnhnB,GACZp/E,EAASv+B,YAAK29G,KAGV2jR,GAAoB53P,EAAa/xI,IAAI,cAAgB,GAI3D,OAAOi3H,GACL,KAAKvgG,OAAKghG,OACRs6gB,EAAW,UAAM9hnB,qBAAN,YAA4By5W,IACvCsoQ,EAAQ,UAAM/hnB,qBAAN,YAA4By5W,IACpC,MAEF,KAAKjzW,OAAKkhG,eACRo6gB,EAAW,UAAM7hnB,uBAAN,YAA8Bw5W,IACzCsoQ,EAAQ,UAAM9hnB,uBAAN,YAA8B4hH,EAAa/xI,IAAI,OAAS,IAChE,MAEF,QACEgyoB,EAAW,UAAMjinB,sBAAN,YAA6B45W,IACxCsoQ,EAAQ,UAAMhinB,mBAAN,YAA0B8hH,EAAa/xI,IAAI,OAAS,IAGhE,IAKIq7lB,GAHE+rI,GAAuB,CAFRr1lB,EAAa/xI,IAAI,iBAAmB6mN,EAAShqM,MAAM,CAACk1H,EAAa/xI,IAAI,aAAc,SACtF+xI,EAAa/xI,IAAI,SAAWgoB,EAAE,qCACKxgB,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,OACnEkusB,GAAe9ylB,EAAkBA,EAAgB94H,IAAI,SAAWgoB,EAAE,oCAAsCA,EAAE,0DAC1Gq/sB,IAAyB/tuB,QAAQw/H,GAAmBA,EAAgB94H,IAAI,YAAYqR,UAAa,WAAIsZ,OAAO+6B,SAAS0C,SAASysB,QAAQnqD,4BAAmB,IAAIswB,MAAM,KAAK,MAAS3qB,yBAEvL,OAAO4mG,GACL,KAAKvgG,OAAKghG,OACR2je,GAAc,CACZ,CACEt+jB,MAAO/U,EAAE,sCACT84F,QAAS,kBAAMqmnB,GAAK12sB,qBACpBu1F,KAAMv1F,oBAER22sB,IAAwB,CACtBrqsB,MAAOqqsB,GACPtmnB,QAAS,kBAAMqmnB,GAAKn1F,KAEtB45E,IAAe,CAAC7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,4BAE1D,MAEF,KAAKsG,OAAKkhG,eACRyje,GAAc,CACZ,CACEt+jB,MAAO/U,EAAE,uCAAwC4pW,GACjD9wQ,QAAS,kBAAMqmnB,GAAKz2sB,uBACpBs1F,KAAMt1F,sBAER02sB,IAAwB,CACtBrqsB,MAAOqqsB,GACPtmnB,QAAS,kBAAMqmnB,GAAKn1F,KAEtB45E,IAAe,CAAC7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,4BAE1D,MAEF,QACEirkB,GAAW,sBAEPpke,IAASvgG,OAAKu+mB,YACV,CAAC,CAACl4mB,MAAO/U,EAAE,sDAAuD84F,QAAS,kBAAMqmnB,GAAK32sB,6BACtFymG,IAASvgG,OAAK4uB,KACR,CAAC,CAACvoB,MAAO/U,EAAE,6CAA8C84F,QAAS,kBAAMqmnB,GAAKn3sB,8BAC7E,CAAC,CAAC+M,MAAO/U,EAAE,uCAAwC84F,QAAS,kBAAMqmnB,GAAKt1sB,yBAN1E,CAQTu1sB,IAAwB,CACtBrqsB,MAAOqqsB,GACPtmnB,QAAS,kBAAMqmnB,GAAKlwmB,IAASvgG,OAAK4uB,KAAO2slB,EAAWD,KAEtD45E,IAAe,CAAC7urB,MAAO6urB,GAAa9qmB,QAAS,kBAAMqmnB,GAAK/2sB,6BAK9D,IAAM8gyB,GAA6C,SAACp0xB,EAAoBD,EAAsBs0xB,GAC5F,IAAMC,EAAqB/3rB,EAAWz7G,MAAK,SAACy1G,GAC1C,OAAO/5H,QAAQ+5H,EAASrzH,IAAI,gBAAgB4d,MAAK,SAAAwiZ,GAAW,OAAIA,EAAYpga,IAAI,QAAU88B,SAEtFu0xB,EAA6BD,EAAmBpxzB,IAAI,gBAAgBiiB,WAAU,SAACm+Y,GACnF,OAAOA,EAAYpga,IAAI,QAAU88B,KAE7Bw0xB,EAA+BF,EAAmBjlzB,MAAM,CAAC,eAAgBklzB,EAA4B,eAAgBF,GAC3HvqxB,EAAS,IAAIypG,IAAoC,CAACrrB,SAAS9wG,eAAK,CAACo9yB,OAGjE,IAAM36a,EAAc,CAClB75W,aACAD,gBAEEs0xB,EACFzutB,IAAmB9rE,kBAAgB26xB,YAAazowB,EAAc6tV,IAE9Dj0S,IAAmB9rE,kBAAgB46xB,cAAe1owB,EAAc6tV,KAc9D2wV,GAAyB,WAC7B1gsB,EAAS,IAAI2nD,KAAyB,MAWxC,OACE,sBACElZ,UAAW6tC,IAAW,eACnB/tC,EAAQs8uB,wBAA0BpgsB,IAFvC,UAKE,cAACysQ,EAAA,EAAD,CAAQ5kR,SAAS,SAASgU,UAAW,EAAG73C,UAAWF,EAAQghS,OAA3D,SACGl/O,IAASvgG,OAAKw+mB,iBACX,KACA,cAACj6C,EAAA,EAAD,CACEI,YAAaA,GACbvoO,QAAS,CACP,CACE/1V,MAnCD,WACb,OAAQk6F,GACN,KAAKvgG,OAAKghG,OAAS,OAAO1vG,EAAE,yCAC5B,KAAK0O,OAAKkhG,eAAiB,OAAO5vG,EAAE,0CAA2C4pW,GAC/E,KAAKl7V,OAAKu+mB,YAAc,OAAOjtnB,EAAE,8CACjC,KAAK0O,OAAKszP,QAAS,OAAOhiQ,EAAE,0CAC5B,QAAU,OAAOA,EAAE,wCA6BAu/sB,GACPzmnB,QAASwmnB,GACTtonB,UAAWsxiB,EACX50D,YAAa,CAACvif,SAAUm3iB,IAE1B,CACEvznB,MAAO/U,EAAE,6BACT84F,QAASwmnB,GACTtonB,UAAWsxiB,EACX50D,YAAa,CAACvif,SAAUkunB,IAAyB/2E,SAM7D,uBACEj7kB,UAAW6tC,IAAW,eACnB/tC,EAAQu8uB,qBAAuBrgsB,IAFpC,UAKE,eAACv8C,EAAA,EAAD,CACEO,UAAWF,EAAQ6hW,gBADrB,UAGIhuX,GAAeu5I,IAAW5qK,kBAAmB,cAAC,GAAD,CAAiBg4xB,YAAat+rB,IAAkB,KAC/F,cAAC5b,EAAA,EAAD,CACEpgC,UAAW6tC,IACT/tC,EAAQ2wB,UADW,eAGhB3wB,EAAQs6uB,iBAAmBp+rB,IAGhC9Z,MAAO,CACL+X,aAAc+B,EAAc,EAAIl6C,EAAMZ,QAAQ,GAC9C2rB,MAAO,uBAETyT,QAAQ,KAXV,SAaG3tF,EAAE,oDAGL,cAAC,IAAD,CACEuxG,eAAgBA,EAChB5jB,QAASA,EACT+kB,sBAAuB,SAACi3rB,GAAD,OAAU,EAAK9ysB,SAAS,CAACqxsB,mBAAoByB,UAIxE,cAACl8sB,EAAA,EAAD,CACEE,QAAQ,KACRtgC,UAAWF,EAAQy8uB,yBAFrB,SAIG5pyB,EAAE,kDAGHghC,GACE,cAACysD,EAAA,EAAD,CACEE,QAAQ,QACRtgC,UAAWF,EAAQ08uB,2BAFrB,SAIE,cAAC,IAAD,CACE7pyB,EAAGA,EACH4wB,QAAS,sDACTG,WAAY,CACR,cAACwwE,EAAA,EAAD,CAAqB5T,QAAQ,QAAQpgC,UAAU,SAASgiC,MAAO,CAAEpV,eAAgB,aAAe2e,QApFzF,SAACz8G,GACxBA,EAAEg5H,iBACFz2F,EAAS,IAAI0J,IAA6B,CACxCs2D,MAAM,EACN1pE,GAAIymW,UAgFqB,eAMvB,eAAC7uT,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLV,QAAQ,gBACRV,UAAS,UAAKF,EAAQ28uB,yBAAb,YAAyC/4rB,EAAsB,KAAO,uBALjF,UAOE,eAACjkD,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAIw6C,EAAc,EAAI,EACtBh7C,GAAIg7C,EAAc,EAAI,EACtBl7C,GAAI,EACJd,UAAW6tC,IAAW,eACnB/tC,EAAQ48uB,oCAAsC1gsB,IANnD,UASE,qBAAKh8C,UAAWF,EAAQ68uB,iBAAxB,SACE,eAACj0sB,EAAA,EAAD,CACEpmH,MAAOq3zB,EACPv3sB,SACE,SAACpzG,GAAD,OAAOuiC,EAAS,IAAI6pG,IAA+BpsI,EAAE4kB,OAAOtxB,SAE9D4/G,MAAO8Z,EAvOG,CACtB75C,OAAQ,GAsO2C,GACvCnC,UAAW6tC,IAAW,eACnB/tC,EAAQ88uB,wBAA0B5gsB,IAErCvb,WAAW,EATb,UAWE,cAAC0C,EAAA,EAAD,CACE7gH,MAAOusO,IAAoBgulB,oBAD7B,SAGGlqyB,EAAE,8CAEL,cAACwwF,EAAA,EAAD,CACE7gH,MAAOusO,IAAoBC,oBAD7B,SAGGn8M,EAAE,sDAIT,cAAC,EAAD,CACE2tF,QAASA,OAGb,cAAC7gC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAIw6C,EAAc,EAAI,EACtBh7C,GAAIg7C,EAAc,EAAI,EACtBl7C,GAAI,EAIJd,UAAWF,EAAQg9uB,yBARrB,SAUE,cAACr9uB,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,SAKIy6uB,GAAuB/rzB,KAAI,SAAC9I,GAC1B,IAAMsO,EAAOtO,EAAK6D,IAAI,QAChBk9B,EAAK/gC,EAAK6D,IAAI,MACd6muB,EAAY1quB,EAAK0gB,MAAM,CAAC,QAAS,SAAU,SAC3Cq1G,EAAK,UAAM20mB,EAAN,mBAlRX,GAkRW,YAlRX,IAmRMC,EAAY3quB,EAAK6D,IAAI,aACrBoyzB,EAAsBj2zB,EAAK6D,IAAI,eAE/BqyzB,EAAmBxrF,GAA4B,qBAAdC,EAEnC,cAAC,IAAD,CACEhmnB,QACEgwsB,EACI,KACC,kBAAM,EAAKH,qBAAqBx0zB,IAGvCgqH,MAAO17G,EACPwmH,aAAciB,EACd36C,MAAK,UAjSX,GAiSW,MACL25C,mBAAmB,OACnBC,UAAU,EACVxb,QAASA,EAZX,SAcE,cAACuQ,EAAA,EAAD,CACEC,MAAO17G,EADT,SAGE,cAACgrG,EAAA,EAAD,CAAYpgC,UAAWF,EAAQt4C,aAA/B,SACGpyB,OAZAyyB,GAkBP,cAAC,IAAD,CACE4jF,QACEgwsB,EACI,KACC,kBAAM,EAAKH,qBAAqBx0zB,IAGvCgqH,MAAO17G,EACP8sE,MAAK,UAxTX,GAwTW,MACL25C,mBAAmB,OACnBvb,QAASA,EACTsb,aACE,sBAAM57C,UAAWyxpB,EAAY,IAAM3xpB,EAAQm2C,WAZ/C,SAeE,cAACpF,EAAA,EAAD,CACEC,MAAO17G,EADT,SAGE,cAACgrG,EAAA,EAAD,CAAYpgC,UAAWF,EAAQt4C,aAA/B,SACGpyB,OAbAyyB,GAkBX,OACE,eAAC43C,EAAA,EAAD,CAEEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJR,GAAI,GACJF,GAAI,EACJF,GAAI,EACJM,QAAS86C,EAAc,EAAI,EAC3Bh8C,UAAW6tC,IACT/tC,EAAQm2C,SADW,eAGhBn2C,EAAQm9uB,wBAA0BjhsB,IAEvC9Z,MAAO,CAAC2B,SAAU,YAdpB,UAgBE,cAACgN,EAAA,EAAD,CACEtf,KAAMqptB,IAAe/yxB,EACrBipF,MAAqBn+F,EAAdghC,EAAgB,uCAA0CopwB,EAAwB,0CAA+C,yCAF1I,SAIE,cAACz7rB,EAAA,EAAD,CACIrF,aAAc,kBAAM,EAAKzS,SAAS,CAACoxsB,WAAY/yxB,KAC/Cq0F,aAAc,kBAAM,EAAK1S,SAAS,CAACoxsB,WAAY,QAC/CnvsB,QAAS,SAACz8G,GACRA,EAAE87G,kBACEn3D,IAGJ,EAAK61D,SAAS,CAACoxsB,WAAY,OACtBmC,EAGMA,IACTlB,GAA2Ch0xB,EAAIzyB,GAAM,GACrD2jmB,EAAwBlxkB,KAJxBg0xB,GAA2Ch0xB,EAAIzyB,GAAM,GACrD0jmB,EAAsBjxkB,MAM1Bq6E,MAAO,CAAErV,MAAOl5C,GAAeinwB,IAAe/yxB,EAAK,sBAAwB,UAAW66C,QAAS,EAAGmhC,SAAS,WAAYqX,IAAK,EAAG95G,MAAO,EAAGwmH,OAAQ,GAjBrJ,SAmBGj0E,GAAeinwB,IAAe/yxB,EAAK,cAACykW,GAAA,EAAD,CAAgBpqR,MAAO,CAAErV,MAAO,aAAkB,cAACogT,EAAA,EAAD,CAClFpgT,MAAOkwtB,EAAsBj7uB,EAAM+pC,QAAQE,QAAQ7iF,KAAO,YAC1Dg5E,MAAO66sB,EAAsB,CAAC95rB,UAAW,iBAAmB,WAInE+5rB,IA5CIn1xB,uB,GAzgBUwD,aAwpBxBwwC,sBACbuxhB,YAAW,CAACG,sBAAsB,IAClCh9e,eACAxqE,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMouH,IACNvtH,cAAe,CACb8Y,SAAU6wG,IAAoBC,qBAEhCs/F,kBAAkB,IAEpBvsP,aA3yBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ8kE,SAAU,EACVk1C,OAAQ,KAEVq9M,KAAM,CACJrzP,OAAQL,EAAMZ,UAAY,GAE5Bg8uB,YAAa,CACXl7uB,QAAS,eACTE,MAAO,MACPghC,UAAW,IAEbi6sB,0BAA2B,CACzBz6uB,QAAQ,SAAD,OAA6B,GAAlBZ,EAAMZ,UAAjB,OAETk8uB,iCAAkC,CAChCl6uB,SAAU,OACVF,UAAW,OACXN,QAA2B,EAAlBZ,EAAMZ,WAEjB07uB,wBAAyB,CACvB16uB,MAAO,MACP6rC,SAAU,IAEZ4zT,gBAAiB,CACfj/V,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,IAE/BuvB,UAAW,CACTojB,UAAW,SACX1xC,OAAQ,OACRD,MAAO,OAETk4uB,iBAAkB,CAChBrssB,SAAU,GACV8F,UAAW,OACXnxC,QAA2B,EAAlBZ,EAAMZ,UACfo/C,WAAW,GAAD,OAAuB,IAAlBx+C,EAAMZ,UAAX,OAEZq7uB,yBAA0B,CACxB1osB,UAAW,SACX3Q,UAAWphC,EAAMZ,QAAQ,IAE3Bs7uB,2BAA4B,CAC1B3osB,UAAW,SACX3Q,UAAWphC,EAAMZ,UACjBwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5By7uB,iBAAkB,CAChBz5uB,SAAU,cACV4rC,WAAY,OACZwgB,YAAaxtD,EAAMZ,QAAQ,IAE7Bm8uB,iBAAkB,CAChBn7uB,MAAO,OACPC,OAAQ,GAEVs6uB,yBAA0B,CACxBjisB,UAAW,EACXtX,UAAWphC,EAAMZ,QAAQ,IAE3B+7uB,wBAAyB,CACvB/5uB,SAAU,SACVF,UAAW,UAEbs6uB,0BAA2B,CACzBp7uB,MAAO,OACPy5C,cAAe,aAEjBygsB,wBAAyB,CACvBp6uB,QAAS,OACTK,cAAe,SACfm4C,UAAW,GAEb6hsB,qBAAsB,CACpB7hsB,UAAW,EACXx4C,QAAS,OACTK,cAAe,UAEjBy6uB,yBAA0B,CACxB36uB,OAAQ,EACRD,MAAO,OACP22C,WAAY/2C,EAAMZ,UAClBouD,YAAaxtD,EAAMZ,QAAQ,MAE7Bw7uB,oCAAqC,CACnClisB,UAAW,EACXo1L,WAAY,EACZzB,UAAW,OAEX,uBAAwB,CACtBjsO,MAAO,OAET,6BAA8B,CAC5By/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,MAEjC,6BAA8B,CAC5B6V,WAAW,GAAD,OAAK7/C,EAAM+pC,QAAQE,QAAQ,MACrCsC,aAAcvsC,EAAM4/C,MAAMrT,cAE5B,mCAAoC,CAClCsT,WAAY,SAGhBn6F,aAAc,CACZ+0F,aAAc,WACdtL,SAAU,SACVkH,OAAQ,MACRmI,WAAY,MACZt+C,QAAS,cACTu7uB,UAAW,EACXC,UAAW,YAEb18c,OAAQ,CACNl5O,OAAQ9lD,EAAM8lD,OAAOk5O,OAAS,GAEhC7qP,SAAU,CACRlI,SAAU,GACVlhB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,UAqrBf,CAAC6J,WAAW,IAC/BG,IACAtQ,mBAlGsB,SAAC73E,EAAYyF,GACnC,IACM65J,EADS9gJ,eAAmBxe,GACZpmB,MAAM,CAAC,gBAAiB,WACxCo6G,EAAOC,cAAiBj0F,GACxBslsB,EAAa52lB,cAAiB1uG,GAC9B+uG,EAAaJ,cAA8B3uG,GAC3CgvG,EAAeJ,cAAgC5uG,GACjD8uG,EAAew2lB,EACfzvmB,EAAkBhB,cAAoB70F,GAC1C,OAAQg0F,GACN,KAAKvgG,OAAKghG,OACRqa,EAAeC,EACflZ,EAAkBnB,cAA0B10F,GAC5C,MAEF,KAAKvM,OAAKkhG,eACRma,EAAeE,EACfnZ,EAAkBjB,cAA4B50F,GAKlD,IAAM81F,EAAsBC,cAA8B/1F,GAAOrlB,MAAK,SAAA9J,GAAC,OAAU,IAANA,KACrEk1C,GAAenM,eAA2B5Z,GAChD,OAAO,aACLg0F,OACA8a,eACAjZ,kBACAC,sBACA/vE,cACAu5I,UACGxzJ,YAAyB,CAC1BkqF,cAAeC,cACfG,WAAYC,cACZC,eAAgBC,cAChBC,WAAYC,cACZs1rB,sBAAuBjnlB,cACvBlhB,SAAUF,cACVg/gB,8BAA+B/rmB,cAC/Bk3rB,kBAAmB5olB,cACnB0pJ,0BAA2B/qU,eAC3BypmB,kBAAmB9xd,cACnBqzc,aAAcpzc,cACditiB,sBAAuB5orB,gBACvBS,cAAe7F,iBAbd3O,CAcA9L,OAKoB,SAAC2D,GAC1B,MAAO,CACLiqxB,qBAAsB,WACpBjqxB,EAAS,IAAIupG,IAA2B,CAAEuoe,2BAA2B,MAEvEl+O,eAAgB,SAACv+P,EAAwC0pmB,GAEvD/+rB,EAAS,IAAIo0F,KAER2qmB,GAQH/+rB,EAAS,IAAIw1F,KAAqB,CAChC9H,kBAAmB2H,EAAgBj8H,IAAI,SAEzC4mC,EAAS01F,KAAwBqQ,mBAAmB1Q,GAAiB,MAVrEr1F,EAAS,IAAImmG,KAAgC,CAC3C9Q,qBAIFr1F,EAAS,IAAI41F,MAAqB,MAQtCs2rB,aAAc,SAACh4N,GACbl0jB,EAAS,IAAIkqP,IAAmB,CAACgqU,aAEnCqT,sBAAuB,SAACrxkB,GACtB8J,EAAS,IAAI2nB,KAA4B,CAACzxB,iBAE5CsxkB,wBAAyB,SAACtxkB,GACxB8J,EAAS,IAAIynB,IAA8B,CAACvxB,qBAKnCo0C,CAcb8+uB,K,ocC98BI+C,E,4MACG9vxB,MAAQ,CACbx4B,KAAM,I,EAGDsyP,aAAe,SAACtlJ,GAAD,OAAc,SAAC4V,GACnC,IAAM11H,EAAS01H,GAAOA,EAAIpkG,QAAUokG,EAAIpkG,OAAOtxB,OAAU01H,EACnD2lsB,EAAal4zB,cAAInD,GACvB8/G,EAASu7sB,K,EAKJj0iB,WAAa,SAACp9I,GAAD,OAAY,c,4CAIhC,WACE,MAmBI1lI,KAAKkqC,MAlBPgvC,EADF,EACEA,QACAurC,EAFF,EAEEA,MAFF,IAGEpe,KACEl4F,GAJJ,aAOM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GAVb,GAIIqS,MACAkyP,EALJ,EAKIA,QACAC,EANJ,EAMIA,QAMFx/N,EAZF,EAYEA,MAZF,IAaE1lC,eAbF,aAcEu+G,kBAdF,MAce,GAdf,MAeEC,wBAfF,MAeqB,GAfrB,EAgBEtzE,EAhBF,EAgBEA,SACAn7B,EAjBF,EAiBEA,OACGmZ,EAlBL,iBAoBM0yyB,EAA8B,GAE9Bt2jB,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAACnkG,EAAMngH,IAAR,mBAAiBs8P,OAE/C,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAEwB,MAAhCi8I,EAAgBnjN,eAClBy5wB,EAAuBt7zB,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBAChGmjN,EAAgBnjN,cAEO,MAA5BmjN,EAAgBllJ,WAClBw7sB,EAAuBx7sB,SAAWx7G,KAAK8gQ,aAAaJ,EAAgBllJ,WAExC,MAA1BklJ,EAAgBh7H,SAClBsxrB,EAAuBtxrB,OAAS1lI,KAAK8iR,WAAWpiB,EAAgBh7H,SAElE,IAAIuxrB,EAAav2jB,EAAgBhlQ,MAC5ByB,uBAAaujQ,EAAgBhlQ,OAEtBmD,MAAI2e,MAAMkjP,EAAgBhlQ,SACpCu7zB,EAAav2jB,EAAgBhlQ,MAAM2lB,SAFnC41yB,EAAap4zB,gBAIf,IAAMq4zB,EAAWD,EAGjB,OAFAD,EAAuBt7zB,MAAQw7zB,EAASt0zB,UAGtC,eAACk+H,EAAA,EAAD,yBAAa3yH,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,cACE,cAACguR,EAAA,EAAD,CAAY7yE,QAAQ,cAApB,SAAmC35T,EAAO,UAAM0lC,EAAN,MAAkBA,IAC5D,cAACghF,EAAA,EAAD,iDACEnB,UAAU,EACVnF,SAAUx7G,KAAK8gQ,aACfr8I,MAAO,cAACD,EAAA,EAAD,CAAOvjF,GAAG,6BACjBwgX,YAAa,SAACn8R,GACZ,OAAOA,EAAS7jG,KAAK,OAEvBy3D,QAAS,CAAE6mB,OAAQ7mB,EAAQ6mB,SACvB2gK,GACAs2jB,GACA1yyB,GAVN,aAaIgiB,GAEIn7B,EAAOnC,KAAI,SAAAtN,GAAK,OACd,eAAC6gH,EAAA,EAAD,CAAsB7gH,MAAOA,EAA7B,UACE,cAAC0gI,EAAA,EAAD,CAAUJ,QAASk7rB,EAASjzzB,IAAIvI,KAChC,cAACsja,EAAA,EAAD,CAAc75S,QAASzpH,MAFVA,SAOzB,cAACqsY,EAAA,EAAD,CAAgB9mW,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,a,GA9FhC77N,aA6GhBwwC,oBACbgG,aATgB,SAACC,GAAD,MAA+B,CAC/C6kB,OAAQ,CACNktB,UAAW,YAMAh4C,CAGb6hvB,G,kHCjHIK,E,4MAEGnwxB,MAAQ,CACbtrC,MAAO,I,EAGFonR,WAAa,SAACp9I,GAAD,OAAY,SAACtU,GAE/B,IAAM11H,EAAQ01H,EAAIpkG,OAAOtxB,MACzB,EAAK07zB,eAAe17zB,K,EAGfolQ,aAAe,kBAAM,SAAC1vI,GAC3B,IACEimsB,EACE,EAAKntxB,MADPmtxB,iBAEF,GAAIjmsB,GAAOA,EAAIpkG,OAAQ,CACrB,IAAMtxB,EAAQ01H,EAAIpkG,OAAOtxB,MACnBw7zB,EAAWr4zB,cAAInD,GACjB27zB,EAAiBruzB,KAAI,SAACqmoB,GAAD,OAAe6nL,EAASjzzB,IAAIoroB,MAAYproB,KAAI,GACnE,EAAKmzzB,eAAe17zB,GAEpB,EAAKknH,SAAS,CAAClnH,a,EAKd07zB,eAAiB,SAAC17zB,GACvB,MAII,EAAKwuC,MAHPmtxB,EADF,EACEA,iBACA32jB,EAFF,EAEEA,gBACA42jB,EAHF,EAGEA,UAEF,EAAK10sB,SAAS,CACZlnH,MAAO,KAIT,IAAM67zB,EAAwBF,EAAiB1rzB,QAAO,SAACsK,EAAeuhzB,GACpE,OAAO9rzB,kBAAQuK,EAAIjN,KAAI,SAACwf,GAAD,OAASA,EAAIu2B,MAAMy4wB,OAAQjszB,QAAO,SAACid,GAAD,OAAgB,MAAPA,KAAaxf,KAAI,SAACwf,GAAD,OAASA,EAAIg2G,UAAQjzH,QAAO,SAACid,GAAD,MAAiB,KAARA,OACvHs/E,YAAcpsG,IAGU,IAAvB67zB,EAAY11zB,QACd6+P,EAAgBllJ,SAAS87sB,EAAUhszB,OAAO2M,eAAas/yB,M,EAIpDxzH,iBAAmB,SAAC5nsB,GAQzB,IAPA,MAGI,EAAK+tC,MAFPw2N,EADF,EACEA,gBACA42jB,EAFF,EAEEA,UAIE71hB,EAAWtlS,EACRslS,EAAW,GAChBA,GAAsB61hB,EAAUv7zB,KAElC,IAAMugB,EAAUg7yB,EAAUxnzB,MAAM,EAAG2xR,GAAUn2R,OAAOgszB,EAAUxnzB,MAAM2xR,EAAW,IAC/E/gC,EAAgBllJ,SAASl/F,I,EAGpBmyU,cAAgB,kBAAM,SAACr9N,GAC5B,MAGI,EAAKlnF,MAFPutxB,EADF,EACEA,gBACAH,EAFF,EAEEA,UAGI57zB,EAAQ01H,EAAIpkG,OAAOtxB,MACnBojT,EAAU1tL,EAAI0tL,QAGhB24gB,EAAgBxzzB,IAAI66S,IAAsB,KAAVpjT,IAClC01H,EAAIgQ,iBACJ,EAAKg2rB,eAAe17zB,IAIN,IAAZojT,GAA2B,KAAVpjT,GAAmC,IAAnB47zB,EAAUv7zB,OAC7Cq1H,EAAIgQ,iBACJ,EAAK2ikB,kBAAkB,M,4CAI3B,WAAiB,IAAD,OAGZrosB,EACEsE,KAAKgnC,MADPtrC,MAEF,EAmBIsE,KAAKkqC,MAlBPw2N,EADF,EACEA,gBACA42jB,EAFF,EAEEA,UAFF,KAGE7ysB,MAHF,EAIEpe,MACEl4F,GALJ,aAQM,CACFA,WAAOrS,EACPukQ,aAASvkQ,EACTwkQ,aAASxkQ,GAXb,GAKIqS,MACAkyP,EANJ,EAMIA,QACAC,EAPJ,EAOIA,QAMFx/N,EAbF,EAaEA,MAbF,IAcE1lC,eAdF,aAeEw+G,wBAfF,MAeqB,GAfrB,EAgBmB89sB,EAhBnB,EAgBEh0iB,gBAQIsziB,GAxBN,iBAwBoC,IAWpC,OATgC,MAA5Bt2jB,EAAgBllJ,WAClBw7sB,EAAuBx7sB,SAAWx7G,KAAK8gQ,eACvCk2jB,EAAuB71rB,UAAYnhI,KAAKyuV,iBAGZ,MAA1B/tF,EAAgBh7H,SAClBsxrB,EAAuBtxrB,OAAS1lI,KAAK8iR,WAAWpiB,EAAgBh7H,SAIhE,eAAC5E,EAAA,EAAD,yBAAa3yH,MAAOkyP,GAAqB,MAATlyP,GAAoByrG,GAApD,IAAsE,mBAAiB,cAAvF,UACE,cAACguR,EAAA,EAAD,2BAAgB8vb,GAAhB,aACGt8zB,EAAO,UAAM0lC,EAAN,MAAkBA,KAE5B,cAAC0jF,EAAA,EAAD,uCACMk8I,GACAs2jB,GAFN,IAGEj6sB,eACE,cAAC,WAAD,UAEIu6sB,EAAUtuzB,KAAI,SAAC2uzB,EAAWC,GACxB,OAAO,cAAC7xf,EAAA,EAAD,CAELjlS,MAAO62xB,EACPzxf,SAAU,kBAAM,EAAK69X,iBAAiB6zH,KAFjCD,EAAYC,MAIlBh1zB,YAITlH,MAAOA,KAET,cAACqsY,EAAA,EAAD,CAAgB9mW,GAAG,cAAnB,SAAkCo/N,IAAYlyP,GAASmyP,a,GApJ7B77N,aAgMnBwwC,oBACb4pC,mBAvCsB,SAAC73E,EAAYkD,GACnC,IACEu6E,EAIEv6E,EAJFu6E,MADF,EAKIv6E,EAHFyvE,kBAFF,MAEe,GAFf,IAKIzvE,EAFF2txB,qBAHF,MAGkB,IAHlB,IAKI3txB,EADF4txB,oBAJF,MAIiB,EAJjB,EAOMp3jB,EAAuBtiQ,OAAO0D,KAAK63G,GAAYhuG,QAAO,SAACg1P,EAAGr8P,GAC9D,IAAMs8P,EAAe94J,YAAc6R,EAAWr1G,IAE9C,OAAI85K,qBAAWwiF,EAAa,IACnB,2BAAKD,GAAZ,kBAAgBr8P,EAAMskN,YAAc,CAAEnkG,EAAcngH,IAAjB,mBAA0Bs8P,OAExD,2BAAKD,GAAZ,kBAAgBr8P,EAAMq1G,EAAWr1G,OAChCmgH,GAAS,IAEwB,MAAhCi8I,EAAgBnjN,eAClBmjN,EAAgBhlQ,MAAiC,MAAzBglQ,EAAgBhlQ,MAAgBglQ,EAAgBhlQ,MAAQglQ,EAAgBnjN,oBACzFmjN,EAAgBnjN,cAGpBpgD,uBAAaujQ,EAAgBhlQ,OAEtBuc,OAAKF,OAAO2oP,EAAgBhlQ,SACtCglQ,EAAgBhlQ,MAAQglQ,EAAgBhlQ,MAAM6lB,UAF9Cm/O,EAAgBhlQ,MAAQuc,iBAI1B,IAAMq/yB,EAAY52jB,EAAgBhlQ,MAIlC,MAAO,CACL27zB,iBAHuBx4zB,cAAYipG,YAAc+vtB,GAAep2yB,KAAK,KAIrEg2yB,gBAHsB54zB,cAAYipG,YAAcgwtB,IAIhDp3jB,kBACA42jB,gBAGWrivB,CAEbkivB,G,uGCtBW59mB,GAAY,sBAGnBw+mB,GAAc,SAACr8zB,EAAO2+G,GAC1B,IAAMgrF,EAAsB,IAAIt3K,KAC1Bg+F,EAAa,IAAIh+F,KAAKryB,GAC5B,OAAO0pM,YAAkBr5E,EAAMs5E,EAAe,wBAG1C2ynB,GAAYC,YAAkB,IAE9Bthc,G,4MAkCGr5Q,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAMI,EAAKg3B,MALPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAC,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QACA1e,EALF,EAKEA,cAEI6wD,EAAY/7G,OAAO47G,GACP,MAAdA,GACEnhE,MAAMshE,IACRjX,IAAmB,sBAAuB55C,EAAc,CACtD6wD,UAAWH,EACXr9G,YAAaq9G,EACbtwF,OAAQ,gBACR+tB,KAAI,OAAEwiE,QAAF,IAAEA,OAAF,EAAEA,EAAWj/F,UAGrBosB,EAAS,IAAIgzE,IAAkBD,IAC/B/yE,EAAS,IAAIizE,IAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAOuzC,EAAM,mBAAoBD,EAAU77F,MAAK,SAAC2wV,GACxD,OAAOzjW,OAAOyjW,EAAQvuW,IAAI,SAAW8K,OAAO0uG,SAG9C5yE,EAASu/B,YAAOuzC,EAAM,mBAAoB,OAE5ClyC,EAAQ,wBACRA,EAAQ,oBACJr4D,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAKI,EAAKg3B,MAJPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAN,EAHF,EAGEA,KACAlyC,EAJF,EAIEA,QAEgB,MAAduyC,GACFnzE,EAAS,IAAIqzE,IAAcF,IAC3BnzE,EAASu/B,YAAOuzC,EAAM,oBAAqBM,EAAUp8F,MAAK,SAACuwV,GACzD,OAAOA,EAASnuW,IAAI,QAAU+5G,QAGhCnzE,EAASu/B,YAAOuzC,EAAM,oBAAqB,OAE7ClyC,EAAQ,oBACJr4D,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAII,EAAKh0E,MAHPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OACAV,EAHF,EAGEA,KAGA9yE,EADY,MAAVuzE,EACOh0C,YAAOuzC,EAAM,gBAAiBU,EAAOx8F,MAAK,SAACwwV,GAClD,OAAOA,EAAKpuW,IAAI,QAAUm6G,MAGnBh0C,YAAOuzC,EAAM,gBAAiB,Q,EAIpCy6sB,6BAA+B,SAACC,GACrC,MAII,EAAKjuxB,MAHPixE,EADF,EACEA,WACAxwE,EAFF,EAEEA,SACA8yE,EAHF,EAGEA,KAGI26sB,EAAyB,MAAdj9sB,EAAqBA,EAAWp3G,IAAI,cAAgB6O,gBAE/DylzB,EAAyBD,GAAYA,EAAS7szB,QAAO,SAACquE,EAAMt1E,GAChE,OAAO6zzB,EAAe5uzB,SAASjF,MAEjCqmC,EAASu/B,YAAOuzC,EAAM,aAAc46sB,K,uDA/GtC,YAIEj6sB,EADIp+G,KAAKkqC,MADPk0E,kB,gCAKJ,SAA0BC,GACxB,IACc2xiB,EACV3xiB,EADFlD,WAEF,EAGIn7G,KAAKkqC,MAFPixE,EADF,EACEA,WACAmD,EAFF,EAEEA,cAGF,GAAkB,MAAdnD,EAAoB,CACtB,IAAMuC,EAAYvC,EAAWv6F,MAAM,CAAC,WAAY,UAAW,OACrC,MAAlBovoB,GAA0BtyiB,IAAcsyiB,EAAepvoB,MAAM,CAAC,WAAY,UAAW,QACvF5gB,KAAKs9G,cAAcI,GAAW,GAEhC,IAAMI,EAAa3C,EAAWv6F,MAAM,CAAC,WAAY,WAAY,OACvC,MAAlBovoB,GAA0BlyiB,IAAekyiB,EAAepvoB,MAAM,CAAC,WAAY,WAAY,QACzF5gB,KAAK69G,eAAeC,GAAY,GAIhCQ,IAAoBh5G,aAAGg5G,EAAeD,EAAUC,gBAClDt+G,KAAKkqC,MAAMygC,U,oBAsFf,WAAiB,IAAD,OACd,EAeI3qE,KAAKkqC,MAdPm4R,EADF,EACEA,aACA/F,EAFF,EAEEA,SACAvwS,EAHF,EAGEA,EACAyxF,EAJF,EAIEA,UACAO,EALF,EAKEA,UACAI,EANF,EAMEA,OANF,IAOEhD,kBAPF,MAOevoG,gBAPf,EAQE6hX,EARF,EAQEA,WACA6jc,EATF,EASEA,kBACAzkf,EAVF,EAUEA,YACA2uS,EAXF,EAWEA,yBACAl8kB,EAZF,EAYEA,SACAkvV,EAbF,EAaEA,SACAK,EAdF,EAcEA,kBAGIvjB,EAAUn3P,EAAWv6F,MAAM,CAAC,WAAY,aAAehO,gBACvDs/V,EAAW/2P,EAAWv6F,MAAM,CAAC,WAAY,cAAgBhO,gBACzD2lzB,EAAiB9jc,EAAWxwX,IAAImoW,IAAuCosd,kBACzE,cAAC,WAAD,UACE,cAAC3/uB,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACE5rE,KAAK,iBACL8qE,UAAWw9uB,EACX5sxB,MAAO,CACLpJ,MAAO/U,EAAE,+BACT6tF,iBAAkB,CAChBC,WAAW,GAEb1uG,OAAQ0oU,EAAYjxU,UAAUoG,KAAI,SAAAorN,GAAU,OAAIA,EAAWrwN,IAAI,aAEjEy3G,SAAUx7G,KAAKk4zB,mCAIrB,KAEEO,EAAgBhkc,EAAWxwX,IAAImoW,IAAuCssd,wBACxE,cAAC7/uB,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACLpJ,MAAO/U,EAAE,qCACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVgF,aAAc,KACdz+G,KAAM,WAGVsO,KAAK,YACLwrG,SAAU,CAACp4G,KACX03E,UAAWwgC,QAGf,KAEE6+sB,EAAwCL,EAAoBn9sB,GAAcA,EAAWp3G,IAAI,kBAAoB,KAC7G60zB,EAAqBD,GAAoBA,EAAiB3vzB,KAAI,SAAC6vzB,EAAc18zB,GACjF,OAAO,cAAC08E,EAAA,EAAD,CAEHe,MAAM,EACNQ,GAAI,EAHD,SAKH,cAAC,QAAD,CACE5rE,KAAI,qBAAgBqqzB,GACpB3uxB,MAAO,CACLpJ,MAAO+3xB,EACPf,aAAc,CAAC,EAAG,IAClBl+sB,iBAAkB,CAChB0B,MAAO,CACLhgC,MAAO,UAIbhC,UAAW69uB,KAfRh7zB,MAoBL6sW,EAAawsB,EAAQ,OAAGr6Q,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,cAAgBy+mB,EACxDs2M,EAAiBrkc,EAAWxwX,IAAImoW,IAAuC2sd,kBACzE,cAAC,WAAD,UACE,cAAClgvB,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC4+uB,GAAA,EAAD,CAAYr4sB,UAAU,EAAMs4sB,mBAAoBjwd,IAAesnB,KAAkBqyP,kBAGrF,KAEEhuP,EAAeF,EAAWxwX,IAAImoW,IAAuC8sd,oBACvE,qBAAK59sB,MAAO,CAAEhgC,MAAO,OAAQotD,YAAa,IAA1C,SACE,cAAC,QAAD,CACEl6H,KAAK,eACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,iCACT2tF,QAAS,SACTC,WAAY,CACV1T,MAAO,gBAKf,KAEJ,OACE,uBACEq2N,SAAU+F,EAAa/F,GACvBhhN,MAAO,CACLx/B,QAAS,UAHb,UAME,eAACjD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,aACRb,WAAW,SACXqB,QAAS,EAJX,UAME,cAACzB,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACLpJ,MAAO/U,EAAE,mCACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,aACL8qE,UAAWwgC,QAGf,cAACjhC,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAIq6S,EAAWxwX,IAAImoW,IAAuCssd,wBAA0B,EAAI,EAF1F,SAIE,cAAC,QAAD,CACExuxB,MAAO,CACLpJ,MAAO/U,EAAE,yBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,OACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWwgC,QAGd2+sB,EACD,cAAC5/uB,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,4BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,yBAEjCkzC,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,GAETu+N,sBAAuBgzU,YAA4Bp6R,IAErDl8Q,WAAY,CACV6B,SAAUx7G,KAAKs9G,cACfp9G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,sBACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWslC,QAGf,cAAC/lC,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,kCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,0BAEjCkzC,iBAAiB,CAEfC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAW,CACT6B,SAAUx7G,KAAK69G,eACf39G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,YAGtB/T,KAAK,uBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,SAIN,cAACtqH,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CAEElwC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,sBAEjCkzC,iBAAkB,CAEhBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,WACf/9G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,WAAa2vV,EAAS3vV,YAG5C/T,KAAK,mBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,SAIN,cAACtqH,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACLpJ,MAAO/U,EAAE,4BACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVwkP,WAAW,EACXj+V,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,UACL8qE,UAAWwgC,QAGf,cAACjhC,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACL0yE,wBAAyB,CACvB97E,MAAM,GAAD,OAAK/U,EAAE,4BAAP,OAEP6tF,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,UACLyZ,KAAM,CAAC8vyB,IACP/9sB,SAAU,CAACgpF,IAAUg1nB,IACrB1+uB,UAAW6jC,QAGf,cAACtkC,EAAA,EAAD,CACEe,MAAM,EACNQ,GAAI,EAFN,SAIE,cAAC,QAAD,CACElwC,MAAO,CACLpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVgF,aAAc,OAGlBnwG,KAAK,OACLwrG,SAAU,CACRopF,KAEF9pH,UAAWwgC,QAGdy+sB,EACAK,EACAE,EACAnkc,KAEFruV,S,GAjdyB7B,iBAyjBnBwwC,sBACbgG,aAntBa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJ8kE,SAAU,EACVk1C,OAAQ,KAEVq9M,KAAM,CACJrzP,OAAQL,EAAMZ,UAAY,GAE5B6+uB,iBAAkB,GAOlB,UAAW,CACT,kBAAmB,CACjB/9uB,QAAS,OACTnC,WAAY,SACZ4hD,OAAQ,EACRtJ,OAAQ,OACRwJ,WAAY,cACZ,UAAW,CACTlT,UAAW,SAGf,8BAA+B,CAC7BxrC,SAAU,EACVjB,QAAS,OACTC,SAAU,QAEZ,+BAAgC,CAC9BE,OAAQ,GAEV,gFAAiF,CAC/EO,QAAS,GAEX,oBAAqB,CACnBA,QAA2B,EAAlBZ,EAAMZ,WAEjB,gBAAiB,CACfc,QAAS,yBACTU,QAAS,EACTy1C,OAAQ,OACRj2C,MAAO,IACPqtR,QAAS,OACT9tO,OAAQ,QAEV,sBAAuB,CACrBE,WAAY,cACZF,OAAQ,EACR/+C,QAAS,EACTupC,OAAQ,UACRjqC,QAAS,eACTg/L,WAAY,UACZjzJ,SAAU,UACV5rC,OAAQ,EACRotR,QAAS,GAEX,qDAAsD,CACpD1rP,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACNC,MAAO,EACP+5G,OAAQ,EACRn5C,QAAS,OACTnC,WAAY,SACZmhM,WAAYl/L,EAAM82C,WAAWooJ,WAC7BjzJ,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnCtpM,QAAS,GAEX,sBAAuB,CACrBoxC,QAAS,IACTjnB,MAAO/qB,EAAM+pC,QAAQU,OAAOC,MAC5BtqC,MAAO,QAET,qBAAsB,CACpB0pC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1ClK,UAAW3sC,EAAM6mD,QAAQ,GACzB9kB,SAAU,WACV1iG,KAAM,EACN+5G,IAAI,eAAD,OAAiBp5C,EAAMZ,UAAvB,OACHgB,MAAO,OACP0lD,OAAQ,EACR81I,UAAWo5Y,IAEb,qDAAsD,CACpDroiB,UAAW,QAEb,eAAgB,CACdivJ,UAAWo5Y,GACX3oW,UAAW,QAEb,mBAAoB,CAClBpsO,UAAW,eAEb,yCAA0C,CACxC8qB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5B59J,OAAQ,UACRkM,OAAQ,GACRj2C,MAAO,GACP0lD,OAAQ,GAGV,oBAAqB,CACnB/jB,SAAU,WACVoN,SAAU,SACVmvJ,KAAM,gBACNjoJ,OAAQ,EACRj2C,MAAO,EACPC,QAAS,QAsmBbp8B,YAAgB,gBAChBgwE,IACAtQ,mBAtGsB,SAAC73E,EAAYyF,GAA0C,IAAD,IAEtE+oV,EAAW/oV,EAASgoV,WAAWxwX,IAAImoW,IAAuCirB,gBAC1Eihc,EAAoB7rxB,EAASgoV,WAAWxwX,IAAImoW,IAAuCgtd,sBACnFN,EAAiBrsxB,EAASgoV,WAAWxwX,IAAImoW,IAAuC2sd,kBAChFM,EAAmB5sxB,EAASgoV,WAAWxwX,IAAImoW,IAAuC8sd,oBA4BlFl+wB,EAAwB,MAAjBvO,EAASuO,KAAevO,EAASuO,KAAOpoC,gBAC/CwhN,EAA8Cp5K,EAAKj3C,IAAI,eAAiBkU,iBAExEkgzB,EAAiB/jmB,EAAWprN,KAAI,SAACikB,GAAD,OAAYA,EAAOlpB,IAAI,SAEvDu1zB,EAAyB1mzB,gBAA4B5B,eAAc,SAACmiX,GACxE/+J,EAAW1nN,SAAQ,SAAC6szB,GAClBpmc,EAAczrX,IAAI6xzB,EAAgBx1zB,IAAI,MAAOw1zB,EAAgBx1zB,IAAI,iBAI/DgxN,EAAU/5K,EAAKj3C,IAAI,YAAc23G,IAAOoyH,IAAI9yL,EAAKj3C,IAAI,YAAY+nD,cAEjE0twB,EAAgB96qB,eAA8B13G,GAC9C2tV,EAAe0kc,IAAgB,UAAKr+wB,EAAKj3C,IAAI,uBAAd,QAAiCy1zB,GAEhEp5c,EAAmBhrO,eAA6BpuG,GAEhDs3E,GAAkBtjE,GAAQpoC,iBAAyCnC,MAAM,CAC7E,eAAkB0nzB,EAClB,WAAcmB,EACd,QAAWvkmB,EACX4/J,eACA,qBAAc35U,EAAKj3C,IAAI,qBAAvB,QAA0C+0zB,GAAkB14c,EAAoBnoW,eAAK,CAACmoW,IAAqBnoW,mBAKvGwlG,EAAwB,MAAjBhxE,EAASgxE,KAClBhxE,EAASgxE,KACT87F,GAKE62c,EAAmBtxiB,cAAsB93E,GACzCw2E,EAAY6yiB,YAAuBD,EAAkB,CACzDv6R,kBAAmBppV,EAASopV,kBAC5BD,oBAAqBnpV,EAASmpV,sBAGhC,OAAO,aACLn4Q,OACAa,gBACAk3Q,WACA8ic,oBACA96sB,aACG1qE,YAAyB,CAC1BirE,UAAWgB,cACXZ,OAAQa,cACR60N,YAAa+qB,cACb4jR,yBAA0Bhie,eAC1BrlC,WAAYC,wBAAcqC,IALzB3qE,CAMA9L,OAGoB,SAAC2D,GAC1B,MAAO,CACLyzE,aAAc,WACZzzE,EAAS,IAAIs0E,MAEft0E,eASF2sP,YAAmC,CAAEt2B,SAAUznD,KAC/CguH,oBAAU,CACRkwC,eAAe,EACfhwC,oBAAqB,EACrB29S,yBAAyB,EACzBC,0BAA0B,EAC1B79S,kBAAkB,IAXPvyP,CAab0hT,K,uSCzzBa,MAA0B,wC,8HCqBnCv+I,EAAQ,iBAER5oH,EAAYJ,aAAW,SAACl0C,GAAD,MAAY,CACvCu+uB,cAAe,CACbn9uB,SAAU,QAIRo9uB,EAAa,SAAC,GAAyF,IAAvFC,EAAsF,EAAtFA,aAAczgsB,EAAwE,EAAxEA,cAAekrM,EAAyD,EAAzDA,UAAWw1f,EAA8C,EAA9CA,UAAWtqf,EAAmC,EAAnCA,IAAKnzU,EAA8B,EAA9BA,MACtEwuC,EAAW2F,wBACTvkB,EAAM+xB,cAAN/xB,EACFmtD,EAAUs2C,IACV48E,EAAQwtnB,EAAY7tyB,EAAE,yCAAL,YAAqDq4S,EAAYkL,GAAKl1E,QAAQ,IAErG,OACE,eAACq+L,EAAA,EAAD,WACE,cAACzoK,EAAA,EAAD,CAAWj0R,KAAK,QAAhB,SACG49zB,IAEH,cAAC3piB,EAAA,EAAD,CAAWj0R,KAAK,QAAhB,SACGm9H,IAEH,cAAC82J,EAAA,EAAD,CAAWj0R,KAAK,QAAhB,SACGqwM,IAEH,cAAC4jF,EAAA,EAAD,CAAWj0R,KAAK,QAAQq9E,UAAWF,EAAQugvB,cAA3C,SACE,cAACvjgB,EAAA,EAAD,CACEh2T,KAAK,SACLxE,MAAO4zU,EACP9zN,SAAU,SAACpzG,GACT,IAAMyxzB,EAASzxzB,EAAE4kB,OAAOtxB,MACpB08O,EAAMr9L,KAAK8+wB,IAAWl4zB,OAAOk4zB,IAAW,YAC1ClvxB,EAASu/B,YAAO4vvB,GAAD,mBAA2C39zB,EAA3C,SAAyD09zB,SAKhF,cAAC7piB,EAAA,EAAD,CAAWj0R,KAAK,QAAQ09G,MAAM,SAA9B,SACE,cAACihB,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,WACPl6E,EAASg/B,YAAYmwvB,GAA8B,WAAY39zB,KAHnE,SAME,cAAC,IAAD,YAOKsoC,SAAWi1xB,G,2CCCbI,GAA+B,wBAGtCC,GAAsB,CAC1B,MAAM,GAIFC,GAA6B,CACjC,MAAM,GAwBFC,G,4MACGjzxB,MAAQ,CACbkzxB,mBAAoB,U,EAef58sB,cAAgB,SAACC,GAAwD,IAA3BrqG,IAA0B,yDAC7E,EAII,EAAKg3B,MAHPS,EADF,EACEA,SACA6yE,EAFF,EAEEA,UACAjyC,EAHF,EAGEA,QAEImyC,EAAY/7G,OAAO47G,GACP,MAAdA,GACF5yE,EAAS,IAAIgzE,IAAkBD,IAC/B/yE,EAAS,IAAIizE,IAA8B,CAAEF,eAC7C/yE,EAASu/B,YAAO4vvB,GAA8B,mBAAoBt8sB,EAAU77F,MAAK,SAAC2wV,GAChF,OAAOzjW,OAAOyjW,EAAQvuW,IAAI,SAAW8K,OAAO0uG,SAG9C5yE,EAASu/B,YAAO4vvB,GAA8B,mBAAoB,OAEpEvuvB,EAAQ,qBACRA,EAAQ,iBACJr4D,GACF,EAAK2qG,kB,EAGFA,eAAiB,SAACC,GAAgD,IAA3B5qG,IAA0B,yDACtE,EAII,EAAKg3B,MAHPS,EADF,EACEA,SACAozE,EAFF,EAEEA,UACAxyC,EAHF,EAGEA,QAEgB,MAAduyC,GACFnzE,EAAS,IAAIqzE,IAAcF,IAC3BnzE,EAASu/B,YAAO4vvB,GAA8B,oBAAqB/7sB,EAAUp8F,MAAK,SAACuwV,GACjF,OAAOA,EAASnuW,IAAI,QAAU+5G,QAGhCnzE,EAASu/B,YAAO4vvB,GAA8B,oBAAqB,OAErEvuvB,EAAQ,iBACJr4D,GACF,EAAK+qG,c,EAGFA,WAAa,SAACC,GACnB,MAGI,EAAKh0E,MAFPS,EADF,EACEA,SACAwzE,EAFF,EAEEA,OAGAxzE,EADY,MAAVuzE,EACOh0C,YAAO4vvB,GAA8B,gBAAiB37sB,EAAOx8F,MAAK,SAACwwV,GAC1E,OAAOA,EAAKpuW,IAAI,QAAUm6G,MAGnBh0C,YAAO4vvB,GAA8B,gBAAiB,Q,EAI5DK,kBAAoB,SAACnjsB,GAC1B,MAII,EAAK9sF,MAHPkwxB,EADF,EACEA,gBACAC,EAFF,EAEEA,gCACAC,EAHF,EAGEA,yBAGIC,EAAe54zB,OAAOq1H,EAAQjzH,IAAI,eAAiB,EACnDurU,EAAM3tU,OAAOq1H,EAAQjzH,IAAI,SAAW,EACpC4lZ,EAAe3yR,EAAQp2G,MAAM,CAAC,YAAa,OAAQ,MAAO,cAAgB,EAC1EgpY,EAAYjoZ,OAAOq1H,EAAQp2G,MAAM,CAAC,YAAa,OAAQ,MAAO,YAAc,EAC5EipY,EAAgB7yR,EAAQp2G,MAAM,CAAC,YAAa,QAAS,MAAO,cAAgB,EAC5EkpY,EAAanoZ,OAAOq1H,EAAQp2G,MAAM,CAAC,YAAa,QAAS,MAAO,YAAc,EAGpF,OAAIo5yB,GAA2BhjsB,EAAQjzH,IAAI,eAClChH,KAAKwjB,MAAMg6yB,GAGhB1wa,EAAgB,GAAKC,EAAa,GAAKx6E,GAAOu6E,IAAkBwwa,GAAmCC,GAC9Fxwa,EACEH,EAAe,GAAKC,EAAY,GAAKt6E,GAAOq6E,GAAgB2wa,EAC9D1wa,EAEHmwa,GAAoB/isB,EAAQjzH,IAAI,eAC3BhH,KAAKo/E,MAAMo+uB,EAAeH,GAE5Br9zB,KAAKwjB,MAAMg6yB,EAAeH,I,EAI9BI,eAAiB,SAACxjsB,GACvB,MAGI,EAAK9sF,MAFPmwxB,EADF,EACEA,gCACAC,EAFF,EAEEA,yBAGIhrf,EAAM3tU,OAAOq1H,EAAQjzH,IAAI,SAAW,EACpCqgU,EAAYptM,EAAQjzH,IAAI,cAAgB,EACxC23T,EAAQ1kM,EAAQjzH,IAAI,WAAY,EAEtC,QAAIqgU,IAAc1I,OAKds+f,GAA2BhjsB,EAAQjzH,IAAI,mBAKtCs2zB,GAAmCC,IACjCtjsB,EAAQp2G,MAAM,CAAC,YAAa,QAAS,MAAO,cAC5C0uT,GAAOt4M,EAAQp2G,MAAM,CAAC,YAAa,QAAS,MAAO,cACnDjf,OAAOq1H,EAAQp2G,MAAM,CAAC,YAAa,QAAS,MAAO,eAMxD05yB,GACGtjsB,EAAQp2G,MAAM,CAAC,YAAa,OAAQ,MAAO,cAC3C0uT,GAAOt4M,EAAQp2G,MAAM,CAAC,YAAa,OAAQ,MAAO,cAClDjf,OAAOq1H,EAAQp2G,MAAM,CAAC,YAAa,OAAQ,MAAO,c,EAQlD65yB,+BAAiC,SAACtzrB,GACvC,MAAkD,EAAKj9F,MAA/CS,EAAR,EAAQA,SAAUojP,EAAlB,EAAkBA,QAAS2siB,EAA3B,EAA2BA,mBACnBh/zB,EAAUyrI,EAAMn6G,OAAhBtxB,MAGR,GAFA,EAAKknH,SAAS,CAAEs3sB,mBAAoBx+zB,IAEtB,YAAVA,GAAuBqyR,EACzBpjP,EAAS,IAAIgzE,IAAkBh8G,OAAOosR,EAAQntQ,MAAM,CAAC,WAAY,UAAW,UAC5E+pB,EAAS,IAAIizE,IAA8B,CAAEF,UAAW/7G,OAAOosR,EAAQntQ,MAAM,CAAC,WAAY,UAAW,WACrG+pB,EAAS,IAAIqzE,IAAc+vK,EAAQntQ,MAAM,CAAC,WAAY,WAAY,SAClE+pB,EAASu/B,YAAO4vvB,GAA8B,WAAY1wyB,iBAAO,CAC/DkpV,QAASvkF,EAAQntQ,MAAM,CAAC,WAAY,YACpCsxV,SAAUnkF,EAAQntQ,MAAM,CAAC,WAAY,aACrCuxV,KAAMpkF,EAAQntQ,MAAM,CAAC,WAAY,SACjC+1V,SAAU5oF,EAAQhqR,IAAI,WACtB6/wB,UAAW71f,EAAQntQ,MAAM,CAAC,WAAY,uBAEnC,GAAc,WAAVllB,GAAsBg/zB,EAAoB,CACnD,IAAMhM,EAAiBgM,EAAmB32zB,IAAI,aAAe6O,gBAC7D+3B,EAAS,IAAIgzE,IAAkBh8G,OAAO+szB,EAAe9tyB,MAAM,CAAC,UAAW,UACvE+pB,EAAS,IAAIizE,IAA8B,CAAEF,UAAW/7G,OAAO+szB,EAAe9tyB,MAAM,CAAC,UAAW,WAChG+pB,EAAS,IAAIqzE,IAAc0wsB,EAAe9tyB,MAAM,CAAC,WAAY,SAC7D+pB,EAASu/B,YAAO4vvB,GAA8B,WAAY1wyB,iBAAO,CAC/DkpV,QAASo8c,EAAe3qzB,IAAI,WAC5BmuW,SAAUw8c,EAAe3qzB,IAAI,YAC7BouW,KAAMu8c,EAAe3qzB,IAAI,QACzB4yW,SAAU+jd,EAAmB32zB,IAAI,YACjC6/wB,UAAW82C,EAAmB32zB,IAAI,qBAKtB,WAAVrI,GACFssB,QAAQC,KAAK,0EAA2E,CAAEvsB,UAE5FivC,EAASu/B,YAAO4vvB,GAA8B,WAAY1wyB,iBAAO,CAC/DkpV,QAAS,KACTJ,SAAU,KACVC,KAAM,KACNwE,SAAU,GACVita,UAAW,OAEb,EAAKtmqB,cAAc,MAAM,GACzB,EAAKO,eAAe,MAAM,GAC1B,EAAKI,WAAW,O,uDArLpB,WACE,MAIIj+G,KAAKkqC,MAHPS,EADF,EACEA,SACAgjP,EAFF,EAEEA,wBACA3sF,EAHF,EAGEA,MAGFr2J,EAAS,IAAIs0E,KAEbt0E,EAASu/B,YAAO4vvB,GAA8B,WAAYa,GAA0BhtiB,EAAyB3sF,O,oBAgL/G,WAAiB,IAAD,OACd,EAOIhhM,KAAKkqC,MANPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAiiC,EAHF,EAGEA,WACAqC,EAJF,EAIEA,UACAO,EALF,EAKEA,UACAI,EANF,EAMEA,OAGIm0P,GAAoB,OAAVn3P,QAAU,IAAVA,OAAA,EAAAA,EAAYv6F,MAAM,CAAC,WAAY,cAAehO,gBACxDs/V,GAAqB,OAAV/2P,QAAU,IAAVA,OAAA,EAAAA,EAAYv6F,MAAM,CAAC,WAAY,eAAgBhO,gBAC1DilH,GAAqB,OAAV1c,QAAU,IAAVA,OAAA,EAAAA,EAAYp3G,IAAI,cAAekU,iBAEhD,OACE,+BACE,eAAC,IAAD,WACE,cAAC++oB,EAAA,EAAD,CACE9siB,MAAOn+F,EAAE,0BACT40G,YAAa50G,EAAE,gCACfy6F,IAAKuvT,IACL3nE,eArNW,iCAsNXC,UAAWusd,EACXtsd,UAAWviV,EAAE,oCAEf,qBAAKqtD,UAAWF,EAAQ8iF,IAAxB,SACE,eAACnqC,EAAA,EAAD,CAAOz4C,UAAWF,EAAQ2hvB,QAAS5psB,UAAW,EAA9C,UACE,cAACzX,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,+CAC/C,eAAC+0G,EAAA,EAAD,CAAaxnD,UAAU,WAAvB,UACE,cAACkgC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEgB,UAAW,GAAhE,SAAsEvwF,EAAE,0CACxE,eAACw3Y,EAAA,EAAD,CAAY,aAAW,iBAAiBvnQ,KAAK,EAAMxtJ,KAAK,iBAAiB9S,MAAOsE,KAAKgnC,MAAMkzxB,mBAAoB1+sB,SAAUx7G,KAAKy6zB,+BAA9H,UACE,cAAC1igB,EAAA,EAAD,CAAkBr8T,MAAM,SAAS6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,iDAC9E,cAACgsS,EAAA,EAAD,CAAkBr8T,MAAM,UAAU6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,+CAC/E,cAACgsS,EAAA,EAAD,CAAkBr8T,MAAM,SAAS6rH,QAAS,cAAC8qQ,EAAA,EAAD,CAAOpsR,MAAM,YAAcnlE,MAAO/U,EAAE,oDAGlF,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,mCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,YACL8qE,UAAWwgC,IACXE,SAAU,CAACmqF,SAGf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,iCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,oBACL8qE,UAAWwgC,IACXE,SAAU,CAACmqF,YAIjB,eAACtrH,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,oCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfrrG,KAAK,qBACL8qE,UAAWwgC,IACXE,SAAU,CAACmqF,SAGf,cAACtrH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,iCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,yBAEjCkzC,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMwiE,EAAUj/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAKs9G,cACfp9G,KAAM,OACNy+G,aAAc,OAGlBnwG,KAAK,sBACLwrG,SAAU,CACRgpF,IACAG,KAEF7pH,UAAWslC,QAGf,cAAC/lC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,uCACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,0BAEjCkzC,iBAAkB,CAChBC,YAAY,EACZxjE,KAAM+iE,EAAUx/F,OAChBkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WACvB,OAAO,IAGX/E,WAAY,CACV6B,SAAUx7G,KAAK69G,eACf39G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,YAGtB/T,KAAK,uBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,SAIN,cAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,QAAD,CACE1wC,MAAO,CACLpJ,MAAO/U,EAAE,8BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,EACX6rB,OAAQ,kBAAM,EAAKx7F,MAAMmhC,MAAM,sBAEjCkzC,iBAAkB,CAChBC,YAAY,EACZxjE,KAAMmjE,EAAO5/F,OACbkgG,kBAAmB,SAAC/iH,GAAD,yBAA4BA,IAC/CgjH,wBAAyB,WAAyB,IAAxBhjH,EAAuB,uDAAP,GACxC,OAAwB,IAAjBA,EAAMmG,SAGjB83G,WAAY,CACV6B,SAAUx7G,KAAKi+G,WACf/9G,KAAM,OACNy+G,aAAc,KACdzB,SAAUo1P,EAAQ/vV,WAAa2vV,EAAS3vV,YAG5C/T,KAAK,mBACL8qE,UAAWslC,IACX5E,SAAU,CACRgpF,IACAG,iBAQZ,cAAC3pF,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAU7sB,UAAWF,EAAQ4hvB,iBAA/D,SAAkF/uyB,EAAE,8CACpF,8BACE,cAAC8lG,EAAA,EAAD,CAAOz4C,UAAWm0C,IAAWr0C,EAAQ2hvB,QAAS3hvB,EAAQ6hvB,cAAe9psB,UAAW,EAAhF,SACE,cAACo/jB,EAAA,EAAD,UACE,eAAC/3P,EAAA,EAAD,WACE,cAACC,EAAA,EAAD,UACE,eAACE,EAAA,EAAD,WACE,cAACzoK,EAAA,EAAD,CAAWj0R,KAAK,QAAQq9E,UAAWF,EAAQ8hvB,iBAA3C,SAA8DjvyB,EAAE,uCAChE,cAACikQ,EAAA,EAAD,CAAWj0R,KAAK,QAAQq9E,UAAWF,EAAQ8hvB,iBAA3C,SAA8DjvyB,EAAE,+CAChE,cAACikQ,EAAA,EAAD,CAAWj0R,KAAK,QAAQq9E,UAAWF,EAAQ8hvB,iBAA3C,SAA8DjvyB,EAAE,uCAChE,cAACikQ,EAAA,EAAD,CAAWj0R,KAAK,QAAQq9E,UAAWm0C,IAAWr0C,EAAQ8hvB,iBAAkB9hvB,EAAQugvB,eAAhF,SAAiG1tyB,EAAE,qCACnG,cAACikQ,EAAA,EAAD,CAAWj0R,KAAK,QAAQ09G,MAAM,SAASrgC,UAAWF,EAAQ8hvB,iBAA1D,SAA6EjvyB,EAAE,6CAGnF,cAAC4sa,EAAA,EAAD,UACG9gU,EAAS7uH,KAAI,SAACguH,EAAS76H,GACtB,IAAMw9zB,EAAe3isB,EAAQjzH,IAAI,iBAAmB,GAC9Cm1H,EAAgBlC,EAAQjzH,IAAI,kBAAoB,GAChDurU,EAAMt4M,EAAQjzH,IAAI,QAAU,EAC5BqgU,EAAY,EAAK+1f,kBAAkBnjsB,GACnC4isB,EAAY,EAAKY,eAAexjsB,GAEtC,OACE,cAAC,EAAD,CAEE2isB,aAAcA,EACdzgsB,cAAeA,EACf0gsB,UAAWA,EACXx1f,UAAWA,EACXkL,IAAKA,EACLnzU,MAAOA,GANFA,0B,GA1YAsoC,aAwdzBk2xB,GAA4B,SAAChtiB,EAAyB3sF,GAyC1D,OAxCyB2sF,EAAwBhiR,QAAO,SAACsvzB,EAAqBjjmB,EAAUx6H,GACtF,IAAKwjG,EAAM/8L,IAAIu5F,GACb,OAAOy9tB,EAGT,IAAMC,EAAoBljmB,EAASrsN,QAAO,SAACutI,EAAKiirB,EAAgBrhsB,GAC9D,OAAIqhsB,EAAep3zB,IAAI,WACdm1I,EAAI9sI,KAAK0tH,GAEXof,IACNjhI,kBAEH,GAA+B,IAA3BijzB,EAAkBn/zB,KACpB,OAAOk/zB,EAGT,IAAMh4K,EAA0Bjid,EAAMpgL,MAAM,CAAC48E,EAAQ,aAAa7xF,QAAO,SAACutI,EAAKmnD,GAC7E,IAAMvmE,EAAYumE,EAAQt8L,IAAI,MAC9B,IAAKm3zB,EAAkB3xzB,SAASuwH,GAC9B,OAAOof,EAET,IAAMkirB,EAAkB/6nB,EAAQt8L,IAAI,YAAY4H,QAAO,SAACiiR,EAAM52J,GAAa,IAAD,EACxE,OAAO42J,EAAKxhR,KAAKgd,iBAAO,CACtBuwyB,aAAct5nB,EAAQt8L,IAAI,SAAW,GACrCm1H,cAAelC,EAAQjzH,IAAI,iBAC3BqgU,UAAWptM,EAAQp2G,MAAM,CAAC,QAAS,UAAW,MAAO,SACrD86S,MAAK,UAAE1kM,EAAQp2G,MAAM,CAAC,QAAS,UAAW,MAAO,iBAA5C,SAEL0uT,IAAK,EACLt1M,cAAehD,EAAQjzH,IAAI,iBAC3BwqZ,UAAWv3R,EAAQjzH,IAAI,aACvB88B,WAAYm2F,EAAQjzH,IAAI,iBAEzBkU,kBACH,OAAOihI,EAAI5tI,OAAO8vzB,KACjBnjzB,kBAEH,OAAOgjzB,EAAoB3vzB,OAAO23oB,KACjChroB,mBAKUg9D,sBACbgG,aAtGa,SAACC,GAAD,MAA+B,CAC5C8gF,IAAK,CACH5gF,QAAS,OACTK,cAAe,MACfsuT,IAAK7uT,EAAMZ,QAAQ,GACnBiB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3BugvB,QAAS,CACPx+uB,SAAU,EACV2sO,WAAY,EACZ5sO,UAAW,EACXN,QAASZ,EAAMZ,QAAQ,GACvBonD,YAAaxmD,EAAM+pC,QAAQC,KAAK,KAChCyC,YAAa,EACbD,YAAa,QACbD,aAAc,GAEhBqzsB,iBAAkB,CAChBv/uB,OAAQL,EAAMZ,QAAQ,EAAG,EAAG,IAE9BygvB,aAAc,CACZjkjB,UAAW,IACXywC,UAAW,OACXzrO,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B0gvB,iBAAkB,CAChB/0tB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5By2rB,cAAe,CACbn9uB,SAAU,QA0EZuiC,mBAhEsB,SAAC73E,EAAOyF,GAC9B,OAAO,aACLgxE,KAAMq8sB,IACHhnxB,YAAyB,CAC1B66O,wBAAyBjhE,YAA4B,IACrD1rB,MAAOJ,cACPpjF,UAAWsB,cACXf,UAAWgB,cACXZ,OAAQa,cACR7D,WAAYC,wBAAc0+sB,IAC1BM,gBAAiBjywB,eACjBkywB,gCAAiCtywB,eACjCuywB,yBAA0BrywB,eAC1ByywB,mBAAoBxjrB,gBAVnBpkG,CAWA9L,OApBoB,SAAC2D,GAC1B,MAAO,CACLA,eAqEFqgoB,YAAc,CAAEC,aAAa,IAC7B1jW,oBAAU,CACR9pN,KAAMq8sB,GACNryf,oBAAqB,IAEvBtoR,YAAgB,gBARH81B,CASbglvB,K,imBC1lBIj/O,GAAsBh1iB,SAASC,cAAc,OAEnD,IAAKD,SAASywC,KACZ,MAAM,IAAI7uE,MAAM,uCAGlBo+B,SAASywC,KAAKymO,YAAY89R,IAC1B,IAAMxrd,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D0oiB,YAAa,CACX7uqB,YAAaxtD,EAAMZ,QAAQ,GAC3B23C,WAAY/2C,EAAMZ,QAAQ,OAE5Bu9R,KAAM,CACJriP,UAAW,SACXvvB,MAAO,uBAETwgO,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,YAwZtB/lE,eAAgB,eAAhBA,EAlYuD,SAACjV,GAAW,IAAD,EAE7EksS,EAcElsS,EAdFksS,OACApqS,EAaE9B,EAbF8B,QACAuhlB,EAYErjlB,EAZFqjlB,2BACAxlO,EAWE79W,EAXF69W,cACA5sS,EAUEjxE,EAVFixE,WACA85gB,EASE/qlB,EATF+qlB,mBACAx1f,EAQEv1F,EARFu1F,OACAskR,EAOE75W,EAPF65W,0BACA6wC,EAME1qZ,EANF0qZ,6BACAs5L,EAKEhklB,EALFgklB,cACAC,EAIEjklB,EAJFiklB,aACAC,EAGElklB,EAHFkklB,YACAC,EAEEnklB,EAFFmklB,iBACAtimB,EACEme,EADFne,EAGImtD,EAAUs2C,KACVt0C,EAAQwjD,cACR/zF,EAAW2F,wBAEjB,EAA0D7L,WAAe,IAAzE,mBAAO6plB,EAAP,KAA8BC,EAA9B,KACA,EAAoE9plB,WAAe,IAAnF,mBAAOqslB,EAAP,KAAmCC,EAAnC,KACA,GAAgDtslB,WAAyB,MAAzE,qBAAOm6W,GAAP,MAAyBD,GAAzB,MAEM9mL,GAAY,OAAGkwL,QAAH,IAAGA,OAAH,EAAGA,EAAehkZ,IAAI,gBAClCqtnB,GAA6Bv5Z,KAAY,OAAIp4F,QAAJ,IAAIA,OAAJ,EAAIA,EAAQ7+G,MAAM,CAAC,aAAci3M,GAAc,YACxFk2Z,GAAmC,OAAGqD,SAAH,IAAGA,IAAH,UAAGA,GAA4B7lnB,QAAO,SAAC7P,GAAD,MAAmC,YAAxBA,EAAMqI,IAAI,oBAA3D,aAAG,EAAkFiF,KAAI,SAACtN,GAAD,OAAWA,EAAMqI,IAAI,SAEjJs3zB,GAAejlf,EAAOv0U,OAAS,EAkCrC,OACE,eAAC,IAAD,CAAiBkxS,UAjCD,SAACn/R,EAAoBookB,GACpC,GAAKpokB,EAAOk6L,YAAZ,CAID,IAAM8lhB,EAAchgtB,EAAOqZ,OAAO9wB,MAElC,GADyByX,EAAOk6L,YAAY3xM,QACnBy3tB,EAAzB,CAGA,IAAM1/sB,EAAUinG,EAAWp3G,IAAI6vtB,GACzBhtI,EAAgBzre,EAAW/rG,OAAOwE,EAAOqZ,OAAO9wB,MAAO,GAAGiT,OAAOwE,EAAOk6L,YAAY3xM,MAAO,EAAG+X,GACpGy2B,EAASu/B,YAAOglV,GAAD,SAAgC03L,OAqB/C,SACE,eAAC,IAAD,CAAWx6T,YAAY,YAAvB,SAEI,SAAA5kK,GAAQ,OACN,+CAAK/rH,IAAK+rH,EAAS0lJ,UAAc1lJ,EAASmoM,gBAA1C,IAA0Dr0M,MAAO,CAAEhgC,MAAO,QAA1E,UAEI86P,EAAOptU,KAAI,SAACtN,EAAOS,GACjB,OACE,eAAC,IAAD,CAAuB+wT,eAAgBmugB,GAActviB,YAAarwR,EAAQS,EAAOA,MAAOA,EAAxF,SAEI,SAACgglB,EAAWC,GACV,IAAM9ge,EAAK,aACT4W,cAAeh3C,EAAMZ,QAAQ,IAC1B6hgB,EAAUtvR,eAAevxM,OAExBphE,EACF,wBAAC2+B,EAAA,EAAD,qCACIp9E,IAAK0glB,EAAUjvU,UACXivU,EAAUtvR,gBACVsvR,EAAUxvR,iBAHlB,IAII/yO,MAAM,EACNt1E,IAAKnI,EACLq9E,WAAW,EACXP,WAAW,aACXqiC,MAAOA,IAET,eAACziC,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAOi0iB,GAAmBt9f,WAAY/2C,EAAMZ,QAAQ,OAA/E,SACE,eAAC,IAAD,CAAY2rB,MAAOo1tB,GAAe,WAAa,aAEjD,gBAACxivB,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,UACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,wCAEL,eAAC,QAAD,CACIvd,KAAM9S,EACN49E,UAAW2nD,IACXtnB,WAAY,CACV3tE,QAASuhlB,EAA6B,GAAKvhlB,EAAQzqB,SACnDi6F,SAAU,SAACgF,GACT,IAAMqugB,EAA0B1zgB,EAAWv6F,MAAM,CAACzkB,EAAO,4BACrD0ynB,GACFlklB,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,4BAAiE0ynB,KAGpF5lgB,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACZ,eAACyJ,EAAA,EAAD,CAASC,MAAO,CAAC1J,EAAOz8G,IAAI,eAAgBy8G,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,OAApH,SACE,iCACG++F,EAAOz8G,IAAI,eADd,MACgC,uBAAMq1E,UAAWF,EAAQ2+R,KAAzB,SAAgC,CAACr3P,EAAOz8G,IAAI,SAAUy8G,EAAOz8G,IAAI,SAASwH,QAAO,SAAAsM,GAAC,OAAIA,GAAW,IAANA,KAAS4J,KAAK,eAI/IkgG,aAAc,SAACnB,EAAQiC,GAErB,OADcjC,EAAO1/E,MAAMoJ,MAAMggF,MAAM9wE,cAC1B7vC,SAASk5G,EAAWrpE,gBAEnC4xE,YAAaj/F,EAAE,mCACf+wB,WAAY,CACVykF,OAAQ,YAA+C,IAAtCp4G,EAAqC,EAA5CztB,MAAeo6H,EAA6B,EAA7BA,WAAY96E,EAAiB,EAAjBA,KAAMla,EAAW,EAAXA,MACnCgulB,EAAc,OAAGf,SAAH,IAAGA,QAAH,EAAGA,GAAqCxknB,SAASyxC,EAAKj3C,IAAI,aACxE4wnB,EAA8B7D,EAA2BvnnB,SAASyxC,EAAKj3C,IAAI,cAAgBo3G,EAAWv6F,MAAM,CAACzkB,EAAO,4BACpH+gH,EAAW7/G,QAAQyxnB,GAAkB3zgB,EAAWv6F,MAAM,CAACzkB,EAAO,8BAAgCkB,QAAQs3nB,GAC5G,OACI,eAAC1ia,EAAA,EAAD,yBACIv2N,MAAOytB,EACP+zF,SAAUA,GAAYy3gB,EACtBvqP,gBAAgB,GACZt0Q,GAJR,IAKI18C,UAAWF,EAAQutP,oBACnBnrN,MAAO,CAAE+J,OAAQnI,EAAW,UAAY,WACxC2H,QAAS3H,EAAW,SAAC90G,GAAD,OAAOA,EAAE87G,mBAAoB4R,EAAWjR,QAPhE,SASE,gBAAChsC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACG15C,EAECgulB,GACI,eAAC7kgB,EAAA,EAAD,CAASC,MAAOn+F,EAAE,+DAAlB,SACE,eAAC,IAAD,CAAak6E,MAAM,qBASvCrqB,OAAQqnQ,YAAuB/nQ,GAC/BqpR,aAAc,QACdn5O,0BAA0B,EAC1B4K,YAAa34H,QAAQ0qZ,GACrBhlS,UAAWwqgB,EACXrigB,eAAgB,kBACZ,gBAACryC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASf,aAAa,SAASyB,KAAK,SAAnE,UACE,eAAConP,EAAA,EAAD,CAAkB7lU,KAAK,UAAUu/G,MAAO,CAAEkG,YAAa,KACtDz1F,EAAE,gCAGTy2F,cAAe,SAACvsG,GAAD,OAAiBs4mB,EAAyBt4mB,IACzDg1G,iBAAkB,kBAAM,eAACo6O,EAAA,EAAD,CAAkB8gD,WAAYp6X,EAAE,mCAAoCgwkB,cAAesyB,EAAkBxpgB,QAAS+vU,EAA+B,WACnKjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIyuiB,IACJxliB,MAAO,CACLy2F,YAAa2tf,EACb7zL,UAAW,SAACs0I,GAAmD,IAAD,EACtDggD,EAAuBhgD,EAAmBhrkB,IAAI,MAE9CirnB,EAA2B5lmB,iBAAO,CACtC89a,SAAU6nL,EACVtugB,UAAWsud,EAAmBhrkB,IAAI,OAClC48H,YAAaouc,EAAmBhrkB,IAAI,eACpC6tN,KAAMm9W,EAAmBhrkB,IAAI,QAC7BrI,MAAOqzkB,EAAmBhrkB,IAAI,SAC9B8qnB,wBAAuB,UAAE1zgB,EAAWv6F,MAAM,CAACzkB,EAAO,mCAA3B,QAA0D,OAInFwuC,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,GAAS6ynB,IACxDrklB,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,yBAA8D,YAtIzHwuC,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIyuiB,IACJ/ke,MAAM,MAyIgC,QACJ5B,QAAS,kBAAMkshB,EAAmB94nB,KAEpCy9G,iBAAkB,CAChBC,WAAW,GAEbgT,YAAY,IAEfk3R,GACD,gBAAClrU,EAAA,EAAD,CACIe,MAAM,EACNJ,WAAW,EACX8hC,MAAO,CAAE2W,WAAY/2C,EAAMZ,WAH/B,UAKE,eAAC,QAAD,CACI9rE,KAAI,iBAAYrS,EAAZ,6BACJm9E,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,4CACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,iBAI1Cg/G,EAAWv6F,MAAM,CAACzkB,EAAO,6BAC3B,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACE,gBAACX,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAAxE,UACE,eAACugC,EAAA,EAAD,UAAaztF,EAAE,uCACf,eAAC44F,EAAA,EAAD,CACI1e,MAAM,UACN4e,QAAS,kBAAMl6E,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,0BAA+D,QAC7F+gH,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,mBAAoB,QAH5D,SAIE4vB,EAAE,0BAEN,eAAC,QAAD,CACIvd,KAAI,iBAAYrS,EAAZ,0BACJ+tC,MAAO,CACLyvE,WAAY,CACVz5G,KAAM,OACNi+V,WAAW,GAEbvkP,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,aAOlBo0gB,GACD,gBAACr1iB,EAAA,EAAD,CACIe,MAAM,EACN0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAFxC,UAIE,eAAC7Z,EAAA,EAAD,UAAaztF,EAAE,kDACf,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,eAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,eAAC,QAAD,CACIj4C,UAAWqqP,KACXn1T,KAAI,iBAAYrS,EAAZ,oBACJ69G,SAAUimP,KACV/1T,MAAO,CACL25R,aAAc1oN,EAAWv6F,MAAM,CAACzkB,EAAO,WACvCqlW,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,KACR9iP,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,mBAK9C,eAACu+H,EAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,aAAc0oH,QAAS,kBAhNnG,SAAC1oH,GACpBwuC,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,YAAiD,OAChEwuC,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,oBAAyD,OA8MoD+4nB,CAAa/4nB,IAAvG,SACE,eAAC8tH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,eAAC,IAAD,cAOPoimB,GACD,gBAACt1iB,EAAA,EAAD,CACIe,MAAM,EACN0hC,MAAO,CAACgB,UAAW,EAAG+W,aAAc,IAFxC,UAIE,eAAC7Z,EAAA,EAAD,UAAaztF,EAAE,wDACf,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAlC,UACE,eAACJ,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAChgC,MAAO,IAAKi2C,OAAQ,KAAnD,SACE,eAAC,QAAD,CACIj4C,UAAWqqP,KACXn1T,KAAI,iBAAYrS,EAAZ,mBACJ69G,SAAUimP,KACV/1T,MAAO,CACL25R,aAAc1oN,EAAWv6F,MAAM,CAACzkB,EAAO,4BACvCqlW,YAAaz1U,EAAE,kCACf01U,mBAAoB,CAClBzuC,OAAQgtC,KACR9iP,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,mBAK9C,eAACu+H,EAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,UAAW/B,EAAWv6F,MAAM,CAACzkB,EAAO,aAAc0oH,QAAS,kBA1OpG,SAAC1oH,GACnBwuC,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,6BAAkE,OACjFwuC,EAASu/B,YAAOglV,GAAD,iBAAgC/yZ,EAAhC,mBAAwD,OAwOqDg5nB,CAAYh5nB,IAAtG,SACE,eAAC8tH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,eAAC,IAAD,cAOPqimB,GACD,uCACE,eAACv1iB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGrB,WAAW,SAASa,QAAQ,gBAA/D,SACE,eAACq1iB,GAAA,EAAD,CACInuX,SAAUkuJ,GACVkgO,kBAAmB,CAAC,SAAUjznB,EAAO,mCACrCkznB,mBAAkB,iBAAYlznB,EAAZ,qCAClByiZ,iBAAkBA,GAClBziZ,MAAOA,MAGb,eAACw6H,EAAA,EAAD,IACA,eAAC99C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,WAA3C,SACE,eAAC0nU,GAAA,EAAD,CACI5C,iBAAkBA,GAClBD,oBAAqB,SAACO,GAAD,OAAuBP,GAAoBO,IAChE1lU,WAAW,EACXE,UAAW,MACXI,QAAS,WACTmsB,MAAO,gBACPyT,QAAS,UACT0pO,WAAY,CAAC5hO,YAAa,cAMpC,gBAAC3oC,EAAA,EAAD,CACIe,MAAM,EACNgB,GAAI,EACJxB,UAAWF,EAAQq+tB,YACnB/9tB,WAAW,EACXM,QAAQ,gBALZ,UAQIs8P,EAAOv0U,OAAS,GACZ,eAAC64H,EAAA,EAAD,CACI3+H,KAAK,QACL8oH,QAAS,WACPuxN,EAAOlnU,OAAO/S,IAE+B,OAAGi1nB,SAAH,IAAGA,QAAH,EAAGA,GAA4BzvmB,MAAK,SAACupb,GAAD,OAAiBA,EAAYnnc,IAAI,QAAUo3G,EAAWv6F,MAAM,CAACzkB,EAAO,kBAEnJ40nB,EAA8B,GAAD,mBAAKD,GAAL,CAAiC31gB,EAAWv6F,MAAM,CAACzkB,EAAO,iBAP/F,SAWE,eAAC,IAAD,MAKLA,IAAUi6U,EAAOv0U,OAAS,GACvB,eAAC64H,EAAA,EAAD,CACI3+H,KAAK,QACL8oH,QAAS,kBAAMuxN,EAAOhqU,KAAK,OAF/B,SAIE,eAAC,IAAD,UAOhB,OAAIgwkB,EAAU/gT,WACLxR,KAASkmC,aAAa71Q,EAAO8giB,IAE7B9giB,IAxSC/9C,MAgTrBqrH,EAASwD,wB,gDC9ZXkkS,GAAsB,oBAEtBqgO,GAAoB,GA8B3B//f,GAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1DgpG,KAAM,CACJriP,UAAW,SACXvvB,MAAO,uBAET++S,sBAAuB,CACrBluI,UAAW,QACXywC,UAAW,OACXhsO,OAAQL,EAAMZ,QAAQ,IAAK,IAE7BmsP,oBAAqB,CACnBnrP,MAAO,OACPC,OAAQ,EACR,UAAW,CACTw/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,OAGnCo7I,QAAS,CACPr6J,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,gBAIjBghvB,GAAe,CACnB,CACE5/zB,MAAO,QACPolC,MAAO,gCAET,CACEplC,MAAO,WACPolC,MAAO,8BAusBL62wB,GAJ+BtlwB,YACnCP,IACAxsC,KAEuBktpB,CACvBj0c,eACA,SAAC4iR,GACC,IAAMzvQ,EAAYyvQ,GAAqBA,EAAkBp9d,IAAI,aACvDwtN,EAAW4vQ,GAAqBA,EAAkBvgd,MAAM,CAAC,YAAa,aAE5E,GAAI8wM,EAAW,CAAC,IAAD,IAEPvmN,EAAM,UAAGumN,EAAU3tN,IAAI,iBAAjB,aAAG,EAAyBwH,QAAO,SAAA7P,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,aAC5D3I,EAAUs2N,EAAU3tN,IAAI,YAAc,KACtC0zyB,EAAmBruxB,iBAAO,CAC9B+jY,YAAaz7L,EAAU3tN,IAAI,MAC3B8zN,aAAcnG,EAAU3tN,IAAI,OAC5ByK,KAAMkjN,EAAU3tN,IAAI,QACpBq3E,QAASs2I,EAAU3tN,IAAI,YAAc,OAEjCuiZ,EAAkB,UAAG50L,EAAU3tN,IAAI,6BAAjB,SAClBugZ,EAAY5yL,EAAU3tN,IAAI,eAAgB,EAC1Cw3zB,EAAgC7pmB,EAAU3tN,IAAI,mCAAoC,EAClFy3zB,EAAwC9pmB,EAAU3tN,IAAI,2CAA4C,EAClGyvnB,EAAwC9ha,EAAU3tN,IAAI,2CAA4C,EAClG0vnB,EAAgD/ha,EAAU3tN,IAAI,mDAAoD,EAElH03zB,EAAsBtwzB,EAASA,EAAOnC,KAAI,SAACiN,GAAS,IAAD,EACvD,OAAOmT,iBAAO,CACZ89a,SAAUjxb,EAAIlS,IAAI,MAClB8qnB,wBAAuB,UAAE54mB,EAAIlS,IAAI,kCAAV,QAAwC,KAC/D08G,UAAWxqG,EAAIlS,IAAI,OACnB48H,YAAa1qH,EAAIlS,IAAI,eACrB6tN,KAAM37M,EAAIlS,IAAI,QACdrI,MAAOua,EAAIlS,IAAI,SACf0hG,OAAQxvF,EAAIlS,IAAI,UAChByjlB,OAAQvxkB,EAAIlS,IAAI,UAChB06Y,iBAAkBxoY,EAAIlS,IAAI,qBAAuB6O,gBACjD8ozB,wBAAyBzlzB,EAAIlS,IAAI,2BACjC43zB,gCAAiC1lzB,EAAIlS,IAAI,oCAAsC6O,qBAE9EwW,iBAAO,CAAC,OAEb,OAAOxW,gBAAM5B,eAAc,SAACywQ,GAC1BA,EAAI/5Q,IAAI,YAAa+vyB,GACrBh2hB,EAAI/5Q,IAAI,SAAU+zzB,GAClBh6iB,EAAI/5Q,IAAI,cAA2B,IAAb6pN,EAAoB,WAAa,SACvDkwD,EAAI/5Q,IAAI,UAAWtM,GACnBqmR,EAAI/5Q,IAAI,qBAAsB4+Y,GAC9B7kI,EAAI/5Q,IAAI,YAAa48Y,GACrB7iI,EAAI/5Q,IAAI,gCAAiC6zzB,GACzC95iB,EAAI/5Q,IAAI,wCAAyC8zzB,GACjD/5iB,EAAI/5Q,IAAI,wCAAyC8rnB,GACjD/xW,EAAI/5Q,IAAI,gDAAiD+rnB,MAI7D,OAAOrqmB,iBAAO,CACZje,OAAQ,CAAC,MACTywzB,WAAY,aAuDH3mvB,sBACb91B,YAAgB,gBAChBwqE,eACA9K,mBArDsB,SAAC73E,GACvB,IAAMs3E,EAAgBq5rB,GAAiB3wwB,GAEvC,OAAO,aACLs3E,iBACGxrE,YAAyB,CAC1Bqub,kBAAmB5iR,cACnBiT,WAAYwqC,cACZhwN,QAAS6vN,cACT0xX,2BAA4BxxX,cAC5B5gJ,WAAYC,wBAAc8zS,IAC1B0oZ,qBAAsBx8rB,wBAAcylP,KACpChpO,SAAUykI,eACVynJ,0BAA2BxgW,gBAC3BqxY,6BAA8B3xY,eAC9B+gW,yBAA2Bp+V,gBAC3Bq+V,4BAA6Bn+V,gBAC7BiqkB,eAAgB7ye,eAChBH,UAAWzzF,gBAbVxW,CAcA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLA,WACAktwB,eAAgB,SAAC52wB,GACf0J,EAAS,IAAI47C,KAA6BtlD,KAE5CiwlB,iBAAkB,SAACrwlB,EAAoB0oF,GACrC5+E,EAAS,IAAIs8C,KAAuB,CAClCpmD,aACA0oF,cAGJ41S,cAAe,SAACt+X,EAAoBssX,EAAqB5jS,GACvD5+E,EAAS,IAAIg8C,KAA6B,CACxC9lD,aACAssX,cACA5jS,cAGJsysB,uBAAwB,WACtBlxxB,EAAS,IAAIwJ,IAA2B/qB,iBAAO,CAC7CuhF,MAAM,WAUZ48N,oBAAU,CACR9pN,KAAMyxS,GACNznF,oBAAoB,IANTxyP,EAjzBqC,SAAA/qC,GAAU,IAAD,IAEzDgnlB,EAyBEhnlB,EAzBFgnlB,iBACA/xN,EAwBEj1X,EAxBFi1X,cACA04Y,EAuBE3twB,EAvBF2twB,eACAgkB,EAsBE3xxB,EAtBF2xxB,uBACAlxvB,EAqBEzgC,EArBFygC,MACAhgC,EAoBET,EApBFS,SACA03R,EAmBEn4R,EAnBFm4R,aACAt2S,EAkBEme,EAlBFne,EACA+vyB,EAiBE5xxB,EAjBF4xxB,aACA3tzB,EAgBE+7B,EAhBF/7B,MACAqjN,EAeEtnL,EAfFsnL,WACAxlL,EAcE9B,EAdF8B,QACAuhlB,EAaErjlB,EAbFqjlB,2BACApsJ,EAYEj3b,EAZFi3b,kBACAhmX,EAWEjxE,EAXFixE,WACAy8rB,EAUE1twB,EAVF0twB,qBACA7zZ,EASE75W,EATF65W,0BACA6wC,EAQE1qZ,EARF0qZ,6BAEAn1T,GAMEv1F,EAPF2tF,SAOE3tF,EANFu1F,QACAx3B,EAKE/9D,EALF+9D,OACA+7S,EAIE95W,EAJF85W,yBACAC,EAGE/5W,EAHF+5W,4BACA8rO,EAEE7llB,EAFF6llB,eACAhze,GACE7yG,EADF6yG,UAGF,GAAsDt4G,WAAe,IAArE,qBAAO0rlB,GAAP,MAA4BC,GAA5B,MACA,GAAmE3rlB,YAAe,GAAlF,qBAAOgslB,GAAP,MAAmCC,GAAnC,MACA,GAAkFjslB,WAAe,IAAjG,qBAAOqhX,GAAP,MAA0C1B,GAA1C,MACA,GAA4D3/W,WAAe,IAA3E,qBACA,IADA,YACwDA,YAAe,IAAvE,qBAAOuslB,GAAP,MAA6BC,GAA7B,MAEM/3iB,GAAUs2C,KACVt0C,GAAQwjD,cAERqpR,GAAgB5sS,GAAcA,EAAWp3G,IAAI,aAC7Cg0yB,GAAkBhwZ,IAAiBA,GAAchkZ,IAAI,eACrD+vnB,GAAe34gB,GAAcA,EAAWp3G,IAAI,UAAUwH,QAAO,SAAAsM,GAAC,OAAIA,GAAyB,YAApBA,EAAE9T,IAAI,aAAyBiF,KAAI,SAAAiN,GAAG,OAAIA,EAAIlS,IAAI,eAAawa,OACtIw9yB,GAAuC5gtB,GAAcA,EAAWp3G,IAAI,cACpEwtnB,GAAyBp2gB,GAAcA,EAAWp3G,IAAI,sBACtDmqnB,GAAgB/ygB,GAAcA,EAAWp3G,IAAI,aAC7CoqnB,GAAehzgB,GAAcA,EAAWp3G,IAAI,kCAAoCigZ,EAChFoqO,GAAcjzgB,GAAcA,EAAWp3G,IAAI,0CAA4CkgZ,EACvFutO,GAAwBr2gB,GAAcA,EAAWp3G,IAAI,yCACrD0tnB,GAAuBt2gB,GAAcA,EAAWp3G,IAAI,iDAEpD0quB,GAAattQ,GAAqBA,EAAkBp9d,IAAI,UAAW,EACnEk0yB,GAAoB92U,GAAqBA,EAAkBvgd,MAAM,CAAC,YAAa,OAC/Eo3xB,GAAwB72U,GAAqBA,EAAkBvgd,MAAM,CAAC,YAAa,WAEnFs3xB,GAA2BN,GAAwBA,EAAqBh3xB,MAAM,CAAC,eAAgB,OAC/FytmB,GAAyB,UAAG0B,EAAepumB,MAAK,SAAAy1G,GAAQ,OAAIA,EAASrzH,IAAI,QAAUm0yB,aAA1D,aAAG,EAA0En0yB,IAAI,YAC1GinO,GAAmB4skB,GAAwBA,EAAqB7zyB,IAAI,eAAiB6O,gBACrFylyB,GAAqBrtkB,GACxBznO,eACAgI,QAAO,SAAA07Y,GAAI,OAAIA,EAAKljZ,IAAI,QAAUg0yB,IAAmB9wZ,EAAKljZ,IAAI,UAAU0J,MAAK,SAAA/R,GAAK,MAA4B,YAAxBA,EAAMqI,IAAI,gBAChGiF,KAAI,SAAAi+Y,GAAI,OAAIA,EAAKljZ,IAAI,SACrBnB,UAEG8unB,GAA2C1mZ,GAAiBrpN,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,0CAA4CkjZ,EAAKljZ,IAAI,QAAUg0yB,MACjJpmL,GAA8C3mZ,GAAiBrpN,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,kDAAoDkjZ,EAAKljZ,IAAI,QAAUg0yB,MAE5J9klB,GAAU2klB,EAAqBh3xB,MAAM,CAAC,QAAS,OAC/CktmB,GAAc76Z,GAChB,CAAC,CACC,eAAkB,CAChB,GAAMA,MAGV,GAMEw7Z,GAAqB,CAAC,CAC1B,cAAe,CACb,GAAM,YAIJ8pL,GAA2BF,IAAsBA,GAAmBx2yB,OAAS,EAAI,CAAC,CACtF,YAAe,CACb,IAAOw2yB,MAEN,GAEC2jB,GAAwB76V,GAAqBA,EAAkBvgd,MAAM,CAAC,YAAa,cAAoC,aAAnBm7yB,GACtG,CAAC,CACC,UAAa,CACXr6Z,IAAK,QAGT,GAEJj9X,aAAgB,WACd,GAAIgqsB,IAAcypE,GAAkB,CAClC,IAAMM,EAAkB,CACtB,IAAM,GAAN,OACKD,GACAzqL,GACAkuM,KAIP9qM,EAAiBgnL,GAAkBM,GAE/BP,IACFJ,EAAeI,OAGlB,CAAC92U,IAEJ18b,aAAgB,WACd,GAAI4plB,IAAoB0pL,IAAmBvmlB,EAAY,CACrD,IAAMukO,EAAoBvkO,EAAW7vM,MAAK,SAAAslY,GAAI,OAAIA,EAAKljZ,IAAI,iBAAmBg0yB,OAC9E,OAAIhiX,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBhyb,IAAI,mBACzBktnB,IAAwB,QAG1BA,IAAwB,KAEzB,CAAC8mL,GAAiBvmlB,IAErB,IAAM0ia,GAAoB,SAACj+mB,GACzB,IAAMk3Y,EAAcl3Y,GAAOA,EAAIlS,IAAI,eAE/BopZ,IAAgB4qZ,KAClBptwB,EAASu/B,YAAOglV,GAAqB,SAAU9lY,iBAAO,CAAC,SACvDyuxB,EAAe1qZ,KAsDbjmR,GAAc,WAClBk9Q,GAAqC,IACrCy3a,IACAlxvB,KAGI2xP,GAAQ,uCAAG,WAAOnxT,GAAP,iDAAAxF,EAAA,6DACT4rN,EAAwC,aAA7BpmN,EAAOpH,IAAI,cACtBopZ,EAAchiZ,EAAOyV,MAAM,CAAC,YAAa,gBACzCi3M,EAAe1sN,EAAOyV,MAAM,CAAC,YAAa,iBAC1CpS,EAAOrD,EAAOyV,MAAM,CAAC,YAAa,SAClCxlB,EAAU+P,EAAOpH,IAAI,aAAc,EACnCuiZ,EANS,UAMYn7Y,EAAOpH,IAAI,6BANvB,SAOTugZ,EAAYn5Y,EAAOpH,IAAI,eAAgB,EACvCw3zB,EAAgCpwzB,EAAOpH,IAAI,mCAAoC,EAC/Ey3zB,EAAwCrwzB,EAAOpH,IAAI,2CAA4C,EAC/FyvnB,EAAwCronB,EAAOpH,IAAI,2CAA4C,EAC/F0vnB,EAAgDtonB,EAAOpH,IAAI,mDAAoD,EAXtG,UAauBk7C,QAAQwnJ,IAAIt7L,EAAOpH,IAAI,UAAUwH,QAAO,SAAAsM,GAAC,OAAIA,KAAG7O,IAApC,uCAAwC,WAAOiN,GAAP,yCAAAtQ,EAAA,0DAEpFsQ,EAAIlS,IAAI,kBAF4E,gCAG7Dq5T,aAAI,CAAEn1N,SAAQtK,MAAO1nF,EAAIlS,IAAI,oBAHgC,OAGtFk4zB,EAHsF,kBAMpFhmzB,EAAIlS,IAAI,iBAN4E,gCAO5Dq5T,aAAI,CAAEn1N,SAAQtK,MAAO1nF,EAAIlS,IAAI,mBAP+B,OAOtFgvnB,EAPsF,qBASlFmpM,EAAgBt7yB,gBAAMq7yB,EAAkB,CAAC,EAAG,MAAO,KAAOhmzB,EAAIlS,IAAI,UAClE26Y,EAAiB99X,gBAAMmymB,EAAmB,CAAC,EAAG,MAAO,KAAO98mB,EAAIlS,IAAI,2BACpE43zB,EAAkC1lzB,EAAIlS,IAAI,mCAC1Cmjc,EAAWjxb,EAAIlS,IAAI,YACnB8qnB,EAbkF,UAaxD54mB,EAAIlS,IAAI,kCAbgD,QAalB,KAChE48H,EAAc1qH,EAAIlS,IAAI,eACtBrI,EAAQua,EAAIlS,IAAI,SAChB6tN,EAAO37M,EAAIlS,IAAI,QACf0hG,EAASxvF,EAAIlS,IAAI,WAAa,SAC9B06Y,EAAmBxoY,EAAI2K,MAAM,CAAC,mBAAoB,QAAU3K,EAAIlS,IAAI,oBAAsB,KAE5F8L,EAAWuZ,iBAAO,CACpB6X,GAAIima,EACJvmU,cACAixF,OACAl2N,QACA4I,IAAKuzN,EACLpyH,SACAg5S,mBACAk9a,oCAGE9sM,IACFh/mB,EAAWA,EAASnI,IAAI,0BAA2BmnnB,IAIrDh/mB,GADAA,EAAWA,EAASnI,IAAI,SAAUw0zB,GAAiB,OAC/Bx0zB,IAAI,0BAA2Bg3Y,GAAkB,MACrE/zW,EAAS,IAAI4K,KArC2E,kBAuCjF1lC,GAvCiF,4CAAxC,wDAbnC,QAaTsszB,EAbS,OAuDTC,EAAoBhzyB,iBAAO,CAC/B6X,GAAIksX,EACJ7oZ,IAAKuzN,EACLrpN,OACA+iN,WACAn2N,UACAkrZ,qBACAhC,YACAi3a,gCACAC,wCACAhoM,wCACAC,gDACAtonB,OAAQgxzB,IAGJE,EAAmB,WACvB,OAAOrxlB,IAAoBA,GAAiBr/N,QAAO,SAACutI,EAAKjjI,EAAK3R,GAC5D,OAAI2R,EAAIlS,IAAI,QAAUk0yB,GACb/+pB,EAAIxxI,IAAImwN,EAAcukmB,GAExBljrB,EAAIxxI,IAAIpD,EAAK2R,KACnB7C,yBAGCkpzB,EAAkB,WACtB,OAAOtxlB,IAAoBA,GAAiBv6N,MAAM2Y,iBAAO,eACtDyuM,EAAeukmB,MAIdG,EAAsBtkB,IAAqBD,GAAwBqkB,IAAqBC,IAG1FE,EAAkCD,GACjC/oM,GAAyC9B,IAA8C+B,GAAiD9B,MAC3I6qM,EAAkCD,EAAoBvrzB,eAAc,SAAAywQ,GAClE,GAAI+xW,GAAyC9B,GAA0C,CACrF,IAAMgC,EAA8BhC,GAAyC3tnB,IAAI,OACjF09Q,EAAIvxQ,MAAM,CAACwjnB,EAA6B,0CAA0C,GAEpF,GAAID,GAAiD9B,GAA6C,CAChG,IAAMgC,EAAiChC,GAA4C5tnB,IAAI,OACvF09Q,EAAIvxQ,MAAM,CAACyjnB,EAAgC,kDAAkD,QAInGhplB,EAASu/B,YAAO22R,IAAkB,aAAc27d,IAChDt1rB,KAtGe,4CAAH,sDAsKRitf,GAAqB,SAAC/rnB,GAC1B,IAAMq0zB,EAAYr0zB,EAAE4kB,OAAOtxB,MAC3BivC,EAASu/B,YAAOglV,GAAqB,aAAcuta,IACjC,aAAdA,IACF9xxB,EAASu/B,YAAOglV,GAAqB,iCAAiC,IACtEvkX,EAASu/B,YAAOglV,GAAqB,yCAAyC,IAC9EvkX,EAASu/B,YAAOglV,GAAqB,yCAAyC,IAC9EvkX,EAASu/B,YAAOglV,GAAqB,iDAAiD,MAI1F,OACE,gBAACl5F,EAAA,EAAD,CACErrN,KAAM8joB,GACN9pmB,QAASuC,GACT,kBAAgB,6BAChBrtB,WAAW,EAAM0/K,OAAO,OACxB2+I,sBAAsB,EACtBC,sBAAsB,EANxB,UAQE,wBAAM77G,SAAU+F,EAAa/F,IAA7B,UACE,eAAC87G,EAAA,EAAD,CAAan3Y,GAAG,6BAA6Bq6E,MAAO,CAAE4M,WAAYqngB,GAAmB7mf,YAAa,GAAlG,SACgD38G,EAA7CksxB,IAAqBD,GAA0B,+BAAoC,iCAEtF,eAAC/hf,EAAA,EAAD,CAAe36M,MAAO,CAAEotB,YAAa,GAArC,SACE,gBAAC7vD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UACE,gBAACJ,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAM0hC,MAAO,CAAE4M,WAAYqngB,GAAmB/tgB,YAAa,IAAxF,UACE,gBAAC3oC,EAAA,EAAD,CAAM+B,GAAI,GAAIhB,MAAM,EAApB,UACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAtC,SACGx4F,EAAE,6BAEL,eAAC,QAAD,CACEvd,KAAK,YACLwrG,SAAUgpF,IACV1pH,UAAW2nD,IACXtnB,WAAY,CACV3tE,QAASwlL,GAAcA,EAAWjwM,SAClC0nG,eAAgB,SAACzI,GAAD,OAAYA,EAAOz8G,IAAI,UACvCs9H,eAAgB,SAAC7gB,GAAD,OACd,iCACGA,GAAUA,EAAOz8G,IAAI,QADxB,MACmC,uBAAMq1E,UAAWF,GAAQ2+R,KAAzB,SAAgCr3P,GAAUA,EAAOz8G,IAAI,sBAG1F49G,aAAc,WAAWc,GAAwB,IAAhCznE,EAA+B,EAA/BA,KACTxsC,EAAewsC,EAAKj3C,IAAI,QAAQq1C,cAChCy+K,EAAuB78K,EAAKj3C,IAAI,gBAAgBq1C,cACtD,OAAO5qC,EAAKjF,SAASk5G,EAAWrpE,gBAAkBy+K,EAAatuN,SAASk5G,EAAWrpE,gBAErF4xE,YAAaj/F,EAAE,8BACf+wB,WAAY,CACVykF,OAAQ,SAAA/gB,GAAM,OACZ,eAACyxG,EAAA,EAAD,yBAAUv2N,MAAO8kH,EAAO9kH,MAAO0uY,gBAAgB,GAAW5pR,EAAOsV,YAAjE,IAA6E18C,UAAWF,GAAQutP,oBAAhG,SACGjmN,EAAO1/E,WAId86C,OAAQqnQ,YAAuB/nQ,IAC/BqpR,aAAc,QACdn5O,0BAA0B,EAC1B3I,WAAY0tgB,GACZ30gB,SAAU04gB,GACV1xgB,cArQa,SAACvsG,EAAaqsG,GAE3C,GADA8tgB,GAAuBn6mB,GACG,iBAAtBqsG,EAAWp3F,QAAmD,eAAtBo3F,EAAWp3F,OAAyB,CAC9E,IAAM3f,EAAS,CACb,IAAM,GAAN,OACKgtyB,GACAzqL,GACAkuM,GAHL,CAIE,CACE,GAAM,CACJ,CACE,aAAgB,CACZ,KAAQ/lzB,IAGd,CACE,KAAQ,CACN,KAAQA,SAOpBi7mB,EAAiBgnL,GAAkB3syB,KA8OrB0/G,iBAAkB,kBAAM,eAACo6O,EAAA,EAAD,CAAkB8gD,WAAYp6X,EAAE,iCAAkCgwkB,cAAesyB,GAAkBxpgB,QAAS+vU,EAA+B,WACjKjqZ,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIg5Z,KACJ/vZ,MAAO,CACL17B,KAAM2hnB,GACN11L,UAAW,SAACrF,GACV,IAAMm/L,EAAiBn/L,EAAarxb,IAAI,MACxCmtnB,EACEgnL,GACA,CAAC,IAAM,GAAN,OACIK,GACAzqL,GACAkuM,MAGP,IAAMxnM,EAAqBprmB,iBAAO,CAChC+jY,YAAaonO,EACb18Z,aAAcu9N,EAAarxb,IAAI,OAC/ByK,KAAM4mb,EAAarxb,IAAI,QACvBq3E,QAAS,OAEX84iB,GAAkBM,GAGlB7plB,EAASu/B,YAAOglV,GAAqB,YAAaslO,SA5F1E7plB,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIg5Z,KACJtvV,MAAM,MAgGY,QACJqrB,WAAY34H,QAAQ46yB,KAEtBr+rB,iBAAkB,CAChBC,WAAW,QAKfkjC,IAAa,uCACX,eAAClkE,EAAA,EAAD,CAAM+B,GAAI,GAAIhB,MAAM,EAApB,SACE,eAAC,QAAD,CACEprE,KAAM,qBACN8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,2DACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW6qS,SAMjBwpO,IAA0B,uCACxB,gBAAC14iB,EAAA,EAAD,CAAMW,WAAW,EAAMoB,GAAI,GAAIhB,MAAM,EAAMY,KAAK,SAAhD,UACE,eAAC,IAAD,CAAa2sC,SAAS,QAAQ/tC,UAAWF,GAAQonL,UACjD,eAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,qEAGP,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMoB,GAAI,GAAIhB,MAAM,EAAMY,KAAK,SAAhD,UACE,eAAC,IAAD,CAAa2sC,SAAS,QAAQ/tC,UAAWF,GAAQonL,UACjD,eAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,4EAOf,eAAC8sD,EAAA,EAAD,CAAM+B,GAAI,GAAIhB,MAAM,EAApB,SACE,eAAC,QAAD,CACEprE,KAAM,YACN8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,yDACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW6qS,SAKC,UAAnBg0a,IAA8B/3a,GAC7B,gBAACnrU,EAAA,EAAD,CAAMW,WAAW,EAAMoB,GAAI,GAAIhB,MAAM,EAAM0hC,MAAO,CAACgB,WAAY,GAA/D,UACE,eAACzjC,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,SACE,eAAC,QAAD,CACEprE,KAAI,gCACJ8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,uDACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW6qS,GACXvsS,SAAU,SAACpzG,GACOA,EAAE4kB,OAAOgvG,SAEvBrxF,EAASu/B,YAAOglV,GAAqB,yCAAyC,WAO1F,gBAACr2U,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,UACE,eAAC,QAAD,CACEprE,KAAI,wCACJ8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,yDACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWixgB,OAIhBqD,IAA0BE,IAC3B,gBAAC74iB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,aAAauB,KAAK,SAAS8gC,MAAO,CAAC4W,cAAe,IAApF,UACE,eAAC,IAAD,CAAa94C,UAAWF,GAAQonL,UAChC,eAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,yEAMrB,UAAnBgwyB,IAA8B93a,GAC7B,gBAACprU,EAAA,EAAD,CAAMW,WAAW,EAAMoB,GAAI,GAAIhB,MAAM,EAAM0hC,MAAO,CAAC+X,aAAc,IAAjE,UACE,eAACx6C,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,SACE,eAAC,QAAD,CACEprE,KAAI,wCACJ8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,+DACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAW6qS,GACXvsS,SAAU,SAACpzG,GACOA,EAAE4kB,OAAOgvG,SAEvBrxF,EAASu/B,YAAOglV,GAAqB,iDAAiD,WAOlG,gBAACr2U,EAAA,EAAD,CAAM+B,GAAI,EAAGhB,MAAM,EAAnB,UACE,eAAC,QAAD,CACEprE,KAAI,gDACJ8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO/U,EAAE,wEACT4tF,WAAY,CACV1T,MAAO,UACPiX,UAAWkxgB,OAIhBqD,IAAwBE,IACzB,gBAAC94iB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,aAAauB,KAAK,SAAS8gC,MAAO,CAAC2W,WAAY,GAAjF,UACE,eAAC,IAAD,CAAa74C,UAAWF,GAAQonL,UAChC,eAAC9mJ,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,+EAO3C,eAAC,aAAD,CACEvd,KAAK,SACL8qE,UAAWojvB,GACXxyxB,MAAO,CACL8B,UACAuhlB,6BACAxlO,iBACA5sS,WAAU,iBAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAYp3G,IAAI,iBAAlB,QAA+BkU,iBACzCwnH,SACAw1f,mBA9ca,SAAC94nB,GACtBg/G,EAAWp3G,IAAI,UAAUwH,QAAO,SAAAsM,GAAC,OAAIA,GAAyB,YAApBA,EAAE9T,IAAI,aAAyBhI,MAC3E4uC,EAASogC,YAAWmkV,KAEtB,IAAMyta,EAAM7oM,GAAavonB,QAAO,SAAC01B,EAAImoX,GAAL,OAAgBA,IAAWjtZ,KACrDoP,EAAS,CACb,IAAM,GAAN,OACKuinB,GACAW,GAFL,CAGE,CACEvnL,SAAU,CACRy1X,WAMRx9Z,EAAc+4Y,GAAkBH,GAAiB4kB,EAAI96zB,OAAS0J,EAAS,CACrE,IAAM,GAAN,OAAWuinB,GAAgBW,OA6bjB1qO,4BACA6wC,+BACAs5L,iBACAC,gBACAC,eACAC,iBAAkBA,KAAqB2C,MAG3C,gBAACn4iB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMF,UAAU,SAAS4hC,MAAO,CAAE4M,WAAYqngB,IAA3E,UACE,eAAC/1gB,EAAA,EAAD,CAAYE,QAAQ,YAApB,SAAiC3tF,EAAE,iCACnC,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAA7B,SAEI0hvB,GAAatyzB,KAAI,gBAAGtN,EAAH,EAAGA,MAAOolC,EAAV,EAAUA,MAAV,OACf,eAAC+3C,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAKE,eAAC,QAAD,CACEpsE,KAAK,aACL8qE,UAAW8iS,IACXlyU,MAAO,CACLpJ,MAAO/U,EAAE+U,GACTmlE,MAAO,UACPu6J,aAAc9kQ,EACdmxH,YAAY,EACZrR,SAAU24gB,OAVTrzlB,QAiBb,eAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,QAAD,CACEprE,KAAK,UACL8qE,UAAWg5O,IACXpoR,MAAO,CACLpJ,MAAO,eAACmpF,EAAA,EAAD,CAASC,MAAOn+F,EAAE,gDAAiDo+F,UAAU,MAA7E,SACL,eAAC3Q,EAAA,EAAD,UAAaztF,EAAE,kDAEjB4tF,WAAY,CACV1T,MAAO,mBAOf93F,GACE,eAAC45X,EAAA,EAAD,CAAgB55X,MAAO2tzB,EAAvB,SACG3tzB,SAMX,gBAACioT,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAASqiB,GACTjhC,MAAM,UAFR,SAIGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN4e,QA3Ve,WACvB,IAAM+3sB,EAAkBzhtB,EAAWp3G,IAAI,UAAUwH,QAAO,SAAAsM,GAAC,OAAIA,GAAyB,YAApBA,EAAE9T,IAAI,aAAyBhI,KAW3Fq1C,EAVS,CACb,CACEljC,UAAW0uzB,EAAkB,GAAwB,UAAnBb,GAClC1qxB,QAAStlB,EAAE,gCAEb,CACE7d,UAAW0uzB,EAAkB,GAAwB,aAAnBb,GAClC1qxB,QAAStlB,EAAE,oCAGIpK,MAAK,mBAA+B,IAA/B,EAAEzT,aACtBkjC,GACFzG,EAAS0gC,YAAM6jV,GAAqB,cACpCvkX,EAASogC,YACPmkV,GACA,CAAE2hB,OAAQz/X,EAAIC,YAGZ8vb,EAAkBl9d,IAAI,cAvCD2zyB,EAAqBh3xB,MAAM,CAAC,aAAcmnY,GAAchkZ,IAAI,gBAAiB,UAAW,IAClE4H,QAAO,SAACutI,EAAKgyT,GAC5D,IAAMhE,EAAWgE,EAAYnnc,IAAI,MAC3BiwnB,EAA0C,YAA9B9oL,EAAYnnc,IAAI,UAClC,OAAI+vnB,GAAavqnB,SAAS29b,IAAa8sL,EAC9B96e,GAEPkrQ,IAAqC,SAAAt8W,GAAO,4BAASA,GAAT,CAAkBoja,EAAYtqb,MAAM,CAAC,qBAC1Es4H,EAAI5tI,OAAO,CAAC47b,OAEpB,IAEuBrlc,OACxB6unB,IAA6B,GA6B3Bp0T,GAASnhN,IAkUP,SAIGpvF,EAAE,wCAIT,eAAC,IAAD,CACE4+E,KAAM8lhB,GACN90kB,QACE,gBAACk9B,EAAA,EAAD,WACE,eAAC2gC,EAAA,EAAD,CAAYE,QAAQ,KAApB,mBACM3tF,EAAE,2CAA4C,CAAEupa,cAAevtC,IAAiBA,GAAchkZ,IAAI,aAExG,eAAC80E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASY,QAAS,EAAGlB,UAAWF,GAAQ8rU,sBAAzE,SAEIc,GAAkC98Y,KAAI,SAAC23H,EAAqBxkI,GAAtB,OACpC,eAAC08E,EAAA,EAAD,CAAkBe,MAAM,EAAxB,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SACIinB,KAFKxkI,QAQjB,eAACq9G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,+CAITsiW,SAAUtiW,EAAE,uBACZkiW,kBAAmB,WAAQyiQ,IAA6B,GAAQtsO,GAAqC,KACrGl7E,aA9Ve,WACnBwnT,IAA6B,GAC7Bp0T,GAASnhN,IA6VLmzQ,aAAa,W,uICtxBH,E,wBAmBX,SAASuuc,EAAuBnh0B,GACrC,OAAO,IAAIoh0B,GAAY,SAAA59wB,GACrBA,EAAQxjD,MAUL,SAASqh0B,EAA+BxxsB,GAC7C,OAAO,IAAIuxsB,GAAY,SAAC/+yB,EAAGo4D,GACzBA,EAAOo1C,OAjCO,YAEL,YAAD,GAAC,UAEC,aAAD,GAAC,WAEA,aAAD,GAAC,WANI,CAOlB,W,IAkCMuxsB,E,WAKG,WACL//T,GACA,+IACA/8f,KAAKs+c,OAAS0+W,EAAOtmF,QACrB12uB,KAAKi9zB,UAAY,GAEjB,IACElgU,EAAS/8f,KAAKwwgB,SAAUxwgB,KAAKywgB,SAC7B,MAAOrogB,GACPpI,KAAKywgB,QAAQrogB,I,wCAKV,SACL80zB,EACAC,GACkC,WAClC,OAAO,IAAIL,GAAY,SAAC59wB,EAASi3B,GAC/B,EAAK8mvB,UAAU7wzB,KAAK,EAClB,EACA,SAAAwH,GACE,GAAKspzB,EAKH,IACEh+wB,EAAQg+wB,EAAYtpzB,IACpB,MAAOxL,GACP+tE,EAAO/tE,QALT82C,EAAQtrC,IASZ,SAAA23G,GACE,GAAK4xsB,EAGH,IACEj+wB,EAAQi+wB,EAAW5xsB,IACnB,MAAOnjH,GACP+tE,EAAO/tE,QALT+tE,EAAOo1C,MAUb,EAAK6xsB,wB,mBAKF,SACLD,GAEA,OAAOn9zB,KAAKu2E,MAAK,SAAAtgE,GAAA,OAAOA,IAAKknzB,K,qBAIxB,SAAiBE,GAAuD,WAC7E,OAAO,IAAIP,GAAqB,SAAC59wB,EAASi3B,GACxC,IAAIlgE,EACAqnzB,EAEJ,OAAO,EAAK/mvB,MACV,SAAA76E,GACE4h0B,GAAa,EACbrnzB,EAAMva,EACF2h0B,GACFA,OAGJ,SAAA9xsB,GACE+xsB,GAAa,EACbrnzB,EAAMs1G,EACF8xsB,GACFA,OAGJ9mvB,MAAK,WACD+mvB,EACFnnvB,EAAOlgE,GAITipC,EAAQjpC,W,oBAMG,2BAAAu6f,SAAW,SAAC90gB,GAC3B,EAAK6h0B,WAAWP,EAAOQ,SAAU9h0B,M,qBAIlB,2BAAA+0gB,QAAU,SAACllZ,GAC1B,EAAKgysB,WAAWP,EAAOphV,SAAUrwX,M,qBAIrC,2BAAmBgysB,WAAa,SAACv2xB,EAAetrC,GACxC,EAAK4id,SAAW0+W,EAAOtmF,UAIvB,YAAWh7uB,GACPA,EAAyB66E,KAAK,EAAKi6b,SAAU,EAAKC,UAI1D,EAAKnyD,OAASt3a,EACd,EAAK7d,OAASztB,EAEd,EAAK0h0B,wB,qBAIU,2BAAAA,iBAAmB,WAClC,GAAI,EAAK9+W,SAAW0+W,EAAOtmF,QAA3B,CAIA,IAAM+mF,EAAiB,EAAKR,UAAUntzB,QACtC,EAAKmtzB,UAAY,GAEjBQ,EAAe/wzB,SAAQ,SAAAusM,GACjBA,EAAQ,KAIR,EAAKqlQ,SAAW0+W,EAAOQ,UAEzBvknB,EAAQ,GAAG,EAAK9vL,QAGd,EAAKm1b,SAAW0+W,EAAOphV,UACzB3iS,EAAQ,GAAG,EAAK9vL,QAGlB8vL,EAAQ,IAAK,Y,sBChMnB/9M,EAAOC,QAAU,EAAQ,O,6BCEzBA,EAAQuhN,YAAa,EAErB,IAIgC51M,EAJ5BkuE,EAAkB55E,EAAQ,MAE1B6iW,GAE4Bn3V,EAFckuE,IAEOluE,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF3L,EAAQywH,QAAU,SAAU9kH,EAAKxC,EAAK5I,GAYpC,OAXI4I,KAAOwC,GACT,EAAIm3V,EAAiBryO,SAAS9kH,EAAKxC,EAAK,CACtC5I,MAAOA,EACPoM,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZlB,EAAIxC,GAAO5I,EAGNoL,I,+UCsCI42zB,EAA2B,qBAElCxnO,EAA2B,SAACx6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IAClFi3P,EAA0B,SAAC51W,EAAO2+G,GAAR,OAAsBwqF,YAAiB,cAAexqF,IA0BhFsjtB,E,4MACG32xB,MAAQ,CACbqvjB,iBAAkB,M,EAkBbE,cAAgB,WACrB,MAII,EAAKrsjB,MAHPsqU,EADF,EACEA,YACAvyC,EAFF,EAEEA,iBAIFuyC,EAAY,GANZ,EAGEgiP,sBAIFv0R,K,EAGKU,aAAe,SAACh4N,GAAD,OAAU,WAC9B,EAAKiY,SAAS,CACZ8ze,eAAgB/rf,M,EAKb2xN,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IAwBMm3b,EAxBiB/nb,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAMptD,EAAaotD,EAAI19Q,IAAI,cACrBk5I,EAAewkI,EAAI19Q,IAAI,kBAE7BswN,IAAeA,EAAWtwN,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,aAAc,MAAOmkN,EAAWzzM,MAAM,CAAC,KAAM,QAAU6gQ,EAAIj5J,OAAO,eACnHy0B,IAAiBA,EAAal5I,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAO+sI,EAAar8H,MAAM,CAAC,KAAM,QAAU6gQ,EAAIj5J,OAAO,mBAE7H,IAAM8rG,EAAemtD,EAAI19Q,IAAI,gBACvBi/d,EAAuB1uQ,GAAgB48I,YAAsB58I,GAC/D0uQ,EACFvhN,EAAI/5Q,IAAI,eAAgBs7d,GACf1uQ,GACTmtD,EAAIj5J,OAAO,gBAGb,IAAMyrG,EAAcwtD,EAAI19Q,IAAI,eACtB6vW,EAAsB3/I,GAAei9I,YAAsBj9I,GAC7D2/I,EACFnyF,EAAI/5Q,IAAI,cAAeksW,GACd3/I,GACTwtD,EAAIj5J,OAAO,kBAKZ78G,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBACF1M,QAAO,SAAC7P,GAEP,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAuC,OAAhC7iB,EAAMklB,MAAM,CAACtc,EAAI,GAAI,UAG1BilH,EAAU2pU,EAAqBn3b,KACjB,CAAE,IAAOm3b,EAAqB30a,QAC9B,CAAE,IAAO,IAE7B8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAqmU,EAHF,EAGEA,uBACA4B,EAJF,EAIEA,aAGFtpU,EAASggC,YAAM+yvB,IACf,EAAK96sB,SAAS,CACZyze,iBAAkB,OAEpBpiP,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,wDAhHV,SAA0BvtJ,EAAW4yJ,GACnC,MAGIjxQ,KAAKkqC,MAFPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WAGExQ,GAASA,IAAS0T,EAAU1T,MAC9B3qG,KAAKu2lB,gBAGHp7e,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAyGlB,WACE,MAWIn7G,KAAKkqC,MAVPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KACAg4N,EAHF,EAGEA,aACA40R,EAJF,EAIEA,YACAl1R,EALF,EAKEA,aACAvlL,EANF,EAMEA,cACA05c,EAPF,EAOEA,qBACAhiP,EARF,EAQEA,YACAc,EATF,EASEA,UACAvpV,EAVF,EAUEA,EAGI2rkB,EAAgBH,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GAC7C,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GACpCA,EAAajwlB,IAAI,KAAMs4F,GACvB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAG5C,OAAO8yB,EAAI9sI,KAAKmyQ,KACftmQ,kBAEH,OACE,cAAC,WAAD,UACE,cAAC,IAAD,CACEmhE,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC,IAAD,CACE/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACE+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,yCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,6CACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,mBACN07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,mBACN07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,kBACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,QACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB60P,GAC9Bh4R,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,kBACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,MACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB60P,GAC9Bh4R,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,gBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,0CACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,eAnPlBy7P,W,GAhKe7wU,iBA+djBwwC,4BACbgG,aA9Da,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,oBACPlH,SAAU,QAEZ8sP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCqxF,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,cAiCpB,CAAC6H,WAAW,IAC/BnQ,mBA7BsB,SAAC73E,EAAYyF,GAEnC,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOigtB,EAErD,OAAO,aACLjgtB,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACbw7B,cAAeF,cACf45c,qBAAsBptiB,gBAJrBtW,CAKA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLs3R,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfw1S,YAAa,SAACh3O,EAAoBlxE,GAChC3hB,EAAS,IAAImwB,KAAiC,CAAC0iE,aAAYlxE,eAE7D3hB,eAOF2sP,YAAmC,CAAEt2B,SAAU08jB,IAC/Cn2f,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUb0ovB,I,sVClgBWC,EAA0B,oBAEjC1nO,EAA2B,SAACx6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,eAAgBxqF,IAClF87e,EAAwB,SAACz6lB,EAAO2+G,GAAR,OAAsBwqF,YAAiB,YAAaxqF,IA4B5EwjtB,E,4MACG72xB,MAAQ,CACbqvjB,iBAAkB,M,EAkBbE,cAAgB,WACrB,MAKI,EAAKrsjB,MAJPsqU,EADF,EACEA,YACAvyC,EAFF,EAEEA,iBACAD,EAHF,EAGEA,cAIFwyC,EAAY,GAPZ,EAIEgiP,sBAIFv0R,IACAD,K,EAGKW,aAAe,SAACh4N,GAAD,OAAU,WAC9B,EAAKiY,SAAS,CACZ8ze,eAAgB/rf,M,EAKb2xN,SAAW,SAACnxT,GACjB,MAGI,EAAK++B,MAFP8B,EADF,EACEA,QACAqmU,EAFF,EAEEA,uBAGF,GAAIlnW,EAAOpP,KAAM,CACf,IA4CMm3b,EA5CiB/nb,EAAO6F,eAAc,SAAAywQ,GAC1C,IAAMptD,EAAaotD,EAAI19Q,IAAI,4CACrBk5I,EAAewkI,EAAI19Q,IAAI,SACvBqzH,EAAWqqJ,EAAI19Q,IAAI,gBACnBumZ,EAAa7oI,EAAI7gQ,MAAM,CAAC,iBAAkB,OAE1C8lC,EAAS+6N,EAAI7gQ,MAAM,CAAC,WACtB8lC,IACEA,EAAO9lC,MAAM,CAAC,KAAM,MAAQ8lC,EAAO9lC,MAAM,CAAC,MAAO,IACnD6gQ,EAAIj5J,OAAO,UAC0B,OAA5B9hE,EAAO9lC,MAAM,CAAC,KAAM,IAC7B6gQ,EAAI/5Q,IAAI,SAAU,CAAE85B,GAAI,OAExBigP,EAAI/5Q,IAAI,SAAU,CAAEg6Z,IAAK,QAIzBpX,GAAqC,IAAvBA,EAAWl1Y,QAC3BqsQ,EAAIvxQ,MAAM,CAAC,iBAAkB,MAAOo6Y,EAAWvmZ,IAAI,IAC1CumZ,GACT7oI,EAAIj5J,OAAO,kBAGb6rG,IAAeA,EAAWtwN,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,2CAAwB,MAAOmkN,EAAWzzM,MAAM,CAAC,KAAM,QAAU6gQ,EAAIj5J,OAAO,6CAC7Hy0B,IAAiBA,EAAal5I,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,QAAS,MAAO+sI,EAAar8H,MAAM,CAAC,KAAM,WAAa6gQ,EAAIj5J,OAAO,UACvH4O,IAAaA,EAASrzH,IAAI,MAAQ09Q,EAAIvxQ,MAAM,CAAC,eAAgB,MAAOknH,EAASx2G,MAAM,CAAC,KAAM,WAAa6gQ,EAAIj5J,OAAO,iBAElH,IAAM8qG,EAAemuD,EAAI19Q,IAAI,gBACvB6ylB,EAAuBtjY,GAAgB49I,YAAsB59I,GAC/DsjY,EACFn1U,EAAI/5Q,IAAI,eAAgBkvlB,GACftjY,GACTmuD,EAAIj5J,OAAO,gBAGb,IAAM6qG,EAAYouD,EAAI19Q,IAAI,aACpB8ylB,EAAoBxjY,GAAa69I,YAAsB79I,GACzDwjY,EACFp1U,EAAI/5Q,IAAI,YAAamvlB,GACZxjY,GACTouD,EAAIj5J,OAAO,gBAKZ1iG,SAAQ,SAACxhB,GACR,OAAOA,EAAIs0E,QAAQ,IAAI99B,OAAO,eAAM,KAAM,QAE3CnvC,QAAO,SAACutI,EAAK3tI,EAAQjH,GACpB,IAAMwvW,EAAYlhW,gBAAM5B,eAAc,SAACywQ,GACrCA,EAAI/5Q,IAAIpD,EAAKiH,MAEf,OAAO2tI,EAAI9sI,KAAK0nW,KACf77V,kBACF1M,QAAO,SAAC7P,GAEP,IAAM4I,EAAM5I,EAAMmjB,SAASN,OAC3B,OAAuC,OAAhC7iB,EAAMklB,MAAM,CAACtc,EAAI,GAAI,QAA8B,WAAXA,EAAI,MAGjDilH,EAAU2pU,EAAqBn3b,KACjB,CAAE,IAAOm3b,EAAqB30a,QAC9B,CAAE,IAAO,IAE7B8zV,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,UACAqiJ,KAAM,M,EAKLooG,gBAAkB,WACvB,MAKI,EAAK9pU,MAJPS,EADF,EACEA,SACAqB,EAFF,EAEEA,QACAqmU,EAHF,EAGEA,uBACA4B,EAJF,EAIEA,aAGFtpU,EAASggC,YAAMizvB,IACf,EAAKh7sB,SAAS,CACZyze,iBAAkB,OAEpBpiP,EAAalmV,KAAK+xB,OAElBuyT,EAAuB,CACrBrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEVy7G,QAAS,KACTqiJ,KAAM,K,wDAzIV,SAA0BvtJ,EAAW4yJ,GACnC,MAGIjxQ,KAAKkqC,MAFPygE,EADF,EACEA,KACAwQ,EAFF,EAEEA,WAGExQ,GAASA,IAAS0T,EAAU1T,MAC9B3qG,KAAKu2lB,gBAGHp7e,GAAcA,EAAWp/G,OAASo/G,EAAW/1G,OAAOi5G,EAAUlD,aAChEn7G,KAAKs8T,SAASnhN,K,oBAkIlB,WACE,MAYIn7G,KAAKkqC,MAXPgvC,EADF,EACEA,QACAyxB,EAFF,EAEEA,KACAg4N,EAHF,EAGEA,aACA40R,EAJF,EAIEA,YACAl1R,EALF,EAKEA,aACAjlM,EANF,EAMEA,WACA0f,EAPF,EAOEA,cACA05c,EARF,EAQEA,qBACAhiP,EATF,EASEA,YACAc,EAVF,EAUEA,UACAvpV,EAXF,EAWEA,EAGI2rkB,EAAgBH,EAAY5rlB,QAAO,SAACutI,EAAK/uC,GAC7C,IAAMnK,EAASmK,EAAKpmG,IAAI,MAClBoiH,EAAYhc,EAAKpmG,IAAI,aACrBqiH,EAAWjc,EAAKpmG,IAAI,YACpBw6Q,EAAW3rQ,gBAAM5B,eAAc,SAAC2mlB,GACpCA,EAAajwlB,IAAI,KAAMs4F,GACvB23f,EAAajwlB,IAAI,QAAjB,UAA6By+G,EAA7B,YAA0CC,OAG5C,OAAO8yB,EAAI9sI,KAAKmyQ,KACftmQ,kBAEH,OACE,cAAC,WAAD,UACE,cAAC,IAAD,CACEmhE,UAAWF,EAAQw8R,OACnBx8R,QAAS,CACP64C,MAAO74C,EAAQy8R,aAEjBj8P,QAAQ,aACR+2I,OAAO,QACP9lJ,KAAMA,EACN2Q,MAAO,CAAEhgC,MAAOqvB,EAAO,UAAY,GARrC,SAUE,uBAEE2xN,SAAU+F,EAAariU,KAAKs8T,UAC5BljP,UAAWF,EAAQzC,KAHrB,UAME,eAAC,IAAD,CACE2C,UAAWF,EAAQwwD,OACnBlwD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SAJb,UAME,cAAC,IAAD,CACEygC,QAAQ,KADV,SAGG3tF,EAAE,6BAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,WACRF,MAAM,EACNgB,GAAI,EAJN,UAME,cAAC,IAAD,CACEqrB,MAAM,UACN4e,QAAS7kH,KAAKg0W,gBAFhB,SAIGjoV,EAAE,6BAEL,cAAC,IAAD,CACE84F,QAAS89M,EADX,SAGE,cAAC,IAAD,YAMN,eAAC,IAAD,CACE/oP,MAAM,EACNR,UAAWF,EAAQv9B,QAFrB,UAKE,cAAC,IAAD,CACE+9D,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4CAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,eACRF,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk6kB,+BALrB,UAOE,cAAC,IAAD,CACEx5kB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,aACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,qCACTk6E,MAAO,UACPu6J,aAAc,UAIpB,cAAC,IAAD,CACE5mL,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,YACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,4CACTk6E,MAAO,UACPu6J,aAAc,aAOtB,cAAC,IAAD,CACE9mJ,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAEL,eAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk6kB,+BAJrB,UAME,cAAC,IAAD,CACEx5kB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,0CACTy0O,cAAc,EACd7mJ,WAAY,CACV1T,MAAO,gBAKf,cAAC,IAAD,CACErsB,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,uCACTy0O,cAAc,EACd7mJ,WAAY,CACV1T,MAAO,mBAQjB,cAAC,IAAD,CACEyT,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,yCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,WACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS8wG,EAAcv+H,OACvBysG,YAAaj/F,EAAE,6CACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,qCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,kBACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAASoxF,GAAcA,EAAW7+G,OAClCysG,YAAaj/F,EAAE,yCACfs1G,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO1/E,OAAS0/E,EAAO9kH,MAAQ,MAClE88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO1/E,OAAS0/E,EAAO9kH,UAExEk+G,iBAAkB,CAChBC,WAAW,UAQrB,cAAC,IAAD,CACEH,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,mBACN07B,MAAO,CACLwyE,UAAW,QACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC,QAAD,CACEpsE,KAAM,mBACN07B,MAAO,CACLwyE,UAAW,MACXE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB78P,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmBy5e,GAC9B58gB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,mCAEL,eAAC,IAAD,CACEytD,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLZ,MAAM,EACNgB,GAAI,GACJN,QAAS,EAPX,UASE,cAAC,IAAD,CACEV,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,gBACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,6BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,QACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB05e,GAC9B78gB,UAAW6jC,QAIf,cAAC,IAAD,CACEvjC,MAAM,EADR,SAGE,cAAC,IAAD,CACE8/B,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,4BAIP,cAAC,IAAD,CACE6tD,MAAM,EADR,SAGE,cAAC,QAAD,CACEprE,KAAM,gBACN07B,MAAO,CACL0yE,wBAAyB,CACvBoO,YAAaj/F,EAAE,2BACfqtD,UAAWF,EAAQu9R,WAErB/5P,UAAW,MACX9C,iBAAkB,CAChBC,WAAW,IAGfG,SAAU,CAACyC,IAAmB05e,GAC9B78gB,UAAW6jC,WAMjB,cAAC,IAAD,CACEzD,QAAQ,UACRtgC,UAAWF,EAAQg9C,SAFrB,SAIGnqG,EAAE,sCAEL,cAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJN,QAAS,EAJX,SAME,cAAC,IAAD,CACEV,MAAM,EACNgB,GAAI,GAFN,SAIE,cAAC,QAAD,CACEpsE,KAAK,8CACL8qE,UAAWi/O,IACXruR,MAAO,CACLyvE,WAAY,CACV3tE,QAAS0rjB,EAAcn5kB,OACvBysG,YAAaj/F,EAAE,0CACfy2F,cAAe,SAAC2kB,EAAelxH,EAAas1G,GAA7B,MAA2D,UAAXA,GAAsBipP,EAAYv+V,EAAKuglB,IACtGn1d,eAAgB,SAAA7gB,GAAM,OAAIA,EAASA,EAAO9kH,MAAQ,MAClD88T,aAAc,SAAAh4M,GAAM,OAAIA,GAAU,cAAC,IAAD,UAAaA,EAAO9kH,UAExDk+G,iBAAkB,CAChBC,WAAW,eAjXlBy7P,W,GA1Lc7wU,iBA8nBhBwwC,4BACbgG,aArEa,SAACC,GAAD,MAA+B,CAC5Cw6R,OAAQ,CACNnkP,OAAQ,QAEVokP,YAAa,CACX14P,SAAU,UACVwK,aAAa,KAAD,OAAOvsC,EAAM4/C,MAAMrT,aAAnB,cAAqCvsC,EAAM4/C,MAAMrT,aAAjD,SAEdiiB,OAAQ,CACN5tD,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC7D,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCi3C,OAAQ,OACRj1C,SAAU,SAEZ3gC,QAAS,CACP41E,OAAO,oBACPlH,SAAU,QAEZ8sP,kBAAmB,CACjB9jP,aAAcn4C,EAAMZ,QAAQ,MAE9B47C,SAAU,CACRjwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,KAErCguY,+BAAgC,CAC9B73kB,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bm8R,UAAW,CACT,UAAW,CACTtvP,SAAUjsC,EAAM82C,WAAWmgC,QAAQhrC,cAqCpB,CAAC6H,WAAW,IAC/BnQ,mBAjCsB,SAAC73E,EAAYyF,GAEnC,IAAMgxE,EAAwB,MAAjBhxE,EAASgxE,KAAehxE,EAASgxE,KAAOmgtB,EAErD,OAAO,aACLngtB,QACG3qE,YAAyB,CAC1BqoE,WAAYC,wBAAcqC,GAC1B85e,YAAaj2e,eACb8b,WAAY8f,cACZJ,cAAeF,cACf45c,qBAAsBptiB,gBALrBtW,CAMA9L,OAIoB,SAAC2D,GAC1B,MAAO,CACLq3R,cAAe,WACbr3R,EAAS,IAAI20B,MAEf2iQ,iBAAkB,WAChBt3R,EAAS,IAAIq0B,OAEfw1S,YAAa,SAACh3O,EAAoBlxE,GAChC3hB,EAAS,IAAImwB,KAAiC,CAAC0iE,aAAYlxE,eAE7D3hB,eAOF2sP,YAAmC,CAAEt2B,SAAU48jB,IAC/Cr2f,oBAAU,CACRC,kBAAkB,EAClBC,oBAAqB,EACrBgwC,eAAe,IAEjBt4T,YAAgB,gBATH81B,CAUb4ovB,I,gBCvuBF,IAAiD7ikB,IAShD,WACD,kB,gNCVA,gD,iUAyCA,a,6EAkBE8ikB,cAYE,IATAr2S,EASA,uDAZFq2S,KAIE94Q,EAQA,uDAZF84Q,GAKE74Q,IAOA,yDANA84Q,EAMA,uDAZFD,WAOE34Q,EAKA,wDAJA64Q,EAIA,uDAZFF,KASEv4Q,EAGA,uDAZFu4Q,KAUEG,EAEA,uDAZFH,KAWEpxS,EACA,0DAZFoxS,KAaE,OAAO,IAAI,EAAJ,uBAA2B,CAChCI,QADgC,EAEhCC,QAFgC,EAGhCn5Q,mBAHgC,EAIhCC,YAJgC,EAKhCH,YAAa,IALmB,oBAMhCi5Q,KANgC,EAOhCt2S,kBAPgC,EAQhC09B,gBARgC,EAShC64Q,oBATgC,EAUhCC,oBAVgC,EAWhC14Q,WAXgC,EAYhC74B,4B,EA3CN,G,sCAmDA,a,6EAKE0xS,YACE,OAAO,IAAI,EAAJ,uBAA2B,CAChCD,gB,EAPN,G,sCAeA,a,uEAUEE,gBAOE,IAHAtkQ,EAGA,wDAPFskQ,EAOE,uCAPFA,EAOE,uCACA,OAAO,IAAI,EAAJ,iBAAqB,CAC1BC,aAD0B,EAE1B90S,UAF0B,EAG1BjpP,SAH0B,EAI1Bw5R,qBAJ0B,EAK1BrR,SAL0B,EAM1B61Q,oB,EAxBN,G,gCAgCA,a,sEAOEC,cAKE,IAFA/2S,EAEA,uDALF+2S,KAIEvtQ,EACA,uDALFutQ,KAME,OAAO,IAAI,EAAJ,gBAAoB,CACzBN,QADyB,EAEzBC,QAFyB,EAGzB12S,kBAHyB,EAIzBq9B,YAAa,IAJY,oBAKzBmM,gB,EAlBN,G,0KC3IA,c,muCA4CA,aAIE3yjB,cAcG,IAdS,EAcT,EAdS,UAcT,EAdS,UAcT,EAdS,cAcT,EAdS,gBAcT,IATDmphB,yBASC,MAdS,KAcT,MARDu9B,0BAQC,MAdS,GAcT,MAPDC,mBAOC,aAND84Q,YAMC,MAdS,WAcT,MALD54Q,uBAKC,aAJD64Q,2BAIC,MAdS,KAcT,MAHDC,2BAGC,MAdS,KAcT,MAFD14Q,kBAEC,MAdS,KAcT,MADD74B,2BACC,MAdHpuhB,KAcG,G,4FAAA,SACD0B,KAAA,QADC,EAEDA,KAAA,QAFC,EAGDA,KAAA,YAHC,EAIDA,KAAA,gBAJC,EAKDA,KAAA,mBALC,EAMDA,KAAA,YANC,EAODA,KAAA,KAPC,EAQDA,KAAA,kBARC,EASDA,KAAA,gBATC,EAUDA,KAAA,qBAVC,EAWDA,KAAA,qBAXC,EAYDA,KAAA,YAZC,EAaDA,KAAA,qBAbC,EAeDA,KAAA,IAfC,KAgBDA,KAAA,YAhBC,E,kFAyBH,8HAAuBwqhB,EAAvB,kDAEUvre,QAAQwnJ,IAAI,CAChBzmM,KAAKm+zB,QAAQxzS,eAAe,CAAEH,WAC9BxqhB,KAFgB,qBAGhBA,KALN,mDACQ,EADR,YACsBsphB,OADtB,gBAC4C+7B,OAD5C,cAQMrljB,KAAKy+zB,YARX,IAQyB5zS,EAAYA,OARrC,mDAYQvra,EAAa,CACjBihL,SAAUA,EAASA,MAAM,CAAEirM,UADV,IAEjB9yZ,IAAK14E,KAFY,IAGjB6qhB,YAHiB,EAIjBj/Q,KAAM5rQ,KAJW,QAKjBgljB,mBAAoBhljB,KALH,mBAMjBiljB,YAAajljB,KANI,YAOjB8kjB,YAAa9kjB,KAPI,YAQjB+kjB,gBAAiB/kjB,KARA,gBASjBynhB,kBAAmBznhB,KATF,kBAUjBmljB,gBAAiBnljB,KAVA,gBAWjBsphB,aAXiB,EAYjB+7B,aAZiB,EAajBE,WAAYvljB,KAbK,YAcjB0shB,oBAAqB1shB,KAdJ,sBAiBfA,KAAJ,IAGEiijB,yBAHY,IAOZjijB,KAAA,IAAWgmC,SAASA,cAHf,OAILhmC,KAAA,cAJK,kBAKLA,KAAA,oBAAyBA,KALpB,KAMLs/G,MAAiBt/G,KANZ,IAQLiijB,yBARK,GASLjijB,KAAA,eAAoBA,KATf,MAjCT,gD,0PA8CA6rB,WACE7rB,KAAA,YADO,I,kBAIT63kB,WACO73kB,KAAL,MAGAA,KAAA,YAJK,M,gCA7FT,G,4CC5CA9E,gB,yPCOA,IAAI0ye,EAAW,SAAUzye,GAGvB,IAHgC,EAG5B0ye,EAAKzve,OAHuB,UAI5BwgN,EAASivR,EAJmB,eAM5BC,EAA4B,oBAAXpue,OAAwBA,OANb,GAO5Bque,EAAiBD,EAAQA,UAPG,aAQ5BE,EAAsBF,EAAQA,eARF,kBAS5BG,EAAoBH,EAAQA,aATA,gBAWhC,kBAOE,OANA1ve,0BAAgC,CAC9B1C,MAD8B,EAE9BoM,YAF8B,EAG9BC,cAH8B,EAI9BC,UAJ8B,IAMzBlB,EAPwB,GASjC,IAEE+4L,KAFE,IAGF,MAAOzuJ,GACPyuJ,EAAS,gBACP,OAAO/4L,EAAIA,GADsB,GAKrC,oBAEE,IAAIune,EAAiBF,GAAWA,EAAQA,qBAAnBA,IAF4B,EAG7Cj4Z,EAAY93E,OAAOA,OAAOiwe,EAHmB,WAI7Cnle,EAAU,IAAI09B,EAAQwnc,GAJuB,IAUjD,OAFAl4Z,UAuMF,gBACE,IAAIlvC,EAD4C,EAGhD,OAAO,SAAgBqgE,EAAQ38E,GAC7B,GAAIsc,IAAJ,EACE,MAAM,IAAIp/B,MADqB,gCAIjC,GAAIo/B,IAAJ,EAAiC,CAC/B,aAAIqgE,EACF,MADsB,EAMxB,OAAOsnY,IAMT,IAHAzle,SAfkC,EAgBlCA,MAhBkC,IAkBrB,CACX,IAAI0le,EAAW1le,EADJ,SAEX,KAAc,CACZ,IAAI2le,EAAiBC,EAAoBA,EAD7B,GAEZ,KAAoB,CAClB,GAAID,IAAJ,EADkB,SAElB,OAFkB,GAMtB,YAAI3le,EAAQA,OAGVA,OAAeA,EAAQA,MAAQA,EAHF,SAKxB,aAAIA,EAAQA,OAAoB,CACrC,GAAI89B,IAAJ,EAEE,MADAA,EADoC,EAE9B99B,EAF8B,IAKtCA,oBAA0BA,EANW,SAQhC,WAAIA,EAAQA,QACjBA,kBAAyBA,EADa,KAIxC89B,EA3BW,EA6BX,IAAIle,EAASomd,EAASA,EAASA,EA7BpB,GA8BX,cAAIpmd,EAAOA,KAAmB,CAO5B,GAJAke,EAAQ99B,EAAQA,KAARA,EAHoB,EAOxB4f,EAAOA,MAAX,EAAqC,SAIrC,MAAO,CACLptB,MAAOotB,EADF,IAELxoB,KAAM4I,EAFD,MAKF,UAAI4f,EAAOA,OAChBke,EADkC,EAIlC99B,SAJkC,QAKlCA,MAAc4f,EALoB,OA1QpBsmd,CAAiBA,EAASA,EARG,KAwBnD,kBACE,IACE,MAAO,CAAElve,KAAF,SAAkBwqB,IAAK7nB,EAAGA,KAAKA,EAA/B,IACP,MAAOuuC,GACP,MAAO,CAAElxC,KAAF,QAAiBwqB,IAAjB,IAhBXvvB,OAzCgC,EA6DhC,IAAIqze,EA7D4B,iBA8D5BW,EA9D4B,iBA+D5BV,EA/D4B,YAgE5BC,EAhE4B,YAoE5BK,EApE4B,GA0EhC,cACA,cACA,cAIA,IAAIQ,EAhF4B,GAiFhC1vS,OAA0C,WACxC,OADoD,QAItD,IAAI2vS,EAAWpxe,OArFiB,eAsF5Bqxe,EAA0BD,GAAYA,EAASA,EAASrke,EAtF5B,MAuF5Bske,GACAA,IADAA,GAEA7wR,EAAOA,KAAKA,EAFhB,KAKE2wR,EAHwD,GAM1D,IAAIG,EAAKJ,EAA2BA,UAClChB,EAAUA,UAAYlwe,OAAOA,OAhGC,GA4GhC,cACE,mCAAoC,YAClCyhM,OAA0B,YACxB,OAAO7/L,KAAKuue,QAAQlnY,EADkB,SAmC5C,gBACE,oBACE,IAAIv+E,EAASomd,EAASh5Z,EAATg5Z,KAD+B,GAE5C,aAAIpmd,EAAOA,KAEJ,CACL,IAAIlV,EAASkV,EADR,IAEDptB,EAAQkY,EAFP,MAGL,OAAIlY,cACA,MACAkjN,EAAOA,KAAKA,EAFhB,WAGSixR,EAAY3wb,QAAQxjD,EAApB,eAAwC,YAC7Ck4L,aAD6D,MAE5D,YACDA,cADe,MAKZi8S,EAAY3wb,QAAQxjD,GAAO66E,MAAK,YAIrC3iE,QAJyD,EAKzDsrC,EALyD,MAMxD,YAGD,OAAO00I,EAAOA,QAASA,EAAOA,EAHb,MApBnBz9G,EAAOrtD,EADoB,KA6B/B,IAhC6C,EAgE7C9oB,KAAA,QA9BA,cACE,aACE,OAAO,IAAI6ve,GAAY,cACrBj8S,QAD+C,MAKnD,OAAOo8S,EAaLA,EAAkBA,EAAgBA,KAAKA,EAAvCA,GAKIC,KAkHV,gBACE,IAAI5oY,EAASunY,EAASA,SAAS1le,EADe,QAE9C,GAAIm+F,IAAJ,EAA0B,CAKxB,GAFAn+F,WAHwB,KAKxB,UAAIA,EAAQA,OAAoB,CAE9B,GAAI0le,EAASA,SAATA,SAGF1le,SAH+B,SAI/BA,MAJ+B,EAK/B4le,IAL+B,GAO/B,UAAI5le,EAAQA,QAGV,OAH8B,EAOlCA,SAhB8B,QAiB9BA,MAAc,IAAI7G,UAjBY,kDAqBhC,OA1BwB,EA6B1B,IAAIymB,EAASomd,EAASA,EAAQN,EAAjBM,SAAoChme,EA/BH,KAiC9C,aAAI4f,EAAOA,KAIT,OAHA5f,SAD2B,QAE3BA,MAAc4f,EAFa,IAG3B5f,WAH2B,OAO7B,IAAIi0M,EAAOr0L,EAxCmC,IA0C9C,SAOIq0L,EAAJ,MAGEj0M,EAAQ0le,EAAR1le,YAA+Bi0M,EAHlB,MAMbj0M,OAAe0le,EANF,QAcb,WAAI1le,EAAQA,SACVA,SAD+B,OAE/BA,MAF+B,GAYnCA,WA3E8C,QAoEvC,GAzBLA,SADU,QAEVA,MAAc,IAAI7G,UAFR,oCAGV6G,WAHU,QAwDd,cACE,IAAIjG,EAAQ,CAAEqte,OAAQD,EADI,IAGtB,KAAJ,IACEpte,WAAiBote,EADJ,IAIX,KAAJ,IACEpte,aAAmBote,EADN,GAEbpte,WAAiBote,EAFJ,IAKfrwe,KAAA,gBAZ0B,GAe5B,cACE,IAAI8oB,EAAS7lB,EAAMA,YADS,GAE5B6lB,OAF4B,gBAGrBA,EAHqB,IAI5B7lB,aAJ4B,EAO9B,cAIEjD,KAAA,WAAkB,CAAC,CAAEswe,OAJO,SAK5BlC,YAL4B,MAM5Bpue,KAAA,OAN4B,GAoC9B,cACE,KAAc,CACZ,IAAI6we,EAAiB/ve,EADT,GAEZ,KACE,OAAO+ve,EAAeA,KADJ,GAIpB,uBAAW/ve,EAAP,KACF,OADuC,EAIzC,IAAKs7C,MAAMt7C,EAAX,QAA6B,CAC3B,IAAIkC,GAAJ,EAAYjD,EAAO,SAASA,IAC1B,OAASiD,EAAIlC,EAAb,QACE,GAAI89M,EAAOA,KAAKA,EAAhB57M,GAGE,OAFAjD,QAAae,EADe,GAE5Bf,QAF4B,IAUhC,OAHAA,QATiC,EAUjCA,QAViC,KAenC,OAAOA,EAAKA,KAhBe,GAqB/B,MAAO,CAAEA,KAhCe,GAoC1B,aACE,MAAO,CAAErE,MAAF,EAAoB4E,MAApB,GA+MT,OA7mBA+ue,YAjGgC,EAkGhCxvS,kBAlGgC,GAmGhCA,kBAnGgC,GAoGhCwvS,cAAgCxvS,EAAOA,EAAPA,EApGA,qBAoHhC1kM,sBAA8B,YAC5B,IAAIgjB,EAAyB,oBAAX4yd,GAAyBA,EADE,YAE7C,QAAO5yd,IACHA,IAASA,GADNA,uBAIFA,EAAA,aAAoBA,EAArB,QAINhjB,OAAe,YAQb,OAPIiD,OAAJ,eACEA,wBADyB,IAGzB2ye,YADK,EAELlxS,MAFK,sBAIPkxS,YAAmB3ye,OAAOA,OAPI,MAehCjD,QAAgB,YACd,MAAO,CAAE20e,QADmB,IAuE9BH,EAAsBC,EApNU,WAqNhC/vS,EAAO+vS,EAAP/vS,aAAqD,WACnD,OAD+D,QAGjE1kM,gBAxNgC,EA6NhCA,QAAgB,yBACM,IAAhB00e,IAAwBA,EAD6C,SAGzE,IAAIh0e,EAAO,IAAI+ze,EACbp1Z,EAAKA,EAASA,EAASA,EADd,GAH8D,GAQzE,OAAOr/E,EAAQA,oBAAoBA,GAA5BA,EAEHU,EAAKkE,OAAOw2E,MAAK,YACf,OAAO3iE,EAAOA,KAAOA,EAAdA,MAA6B/X,EADJ,WAwKxC8ze,EA/YgC,GAiZhC9vS,MAjZgC,aAwZhCA,OAA2B,WACzB,OADoC,QAItCA,gBAAuB,WACrB,MADgC,wBAmClC1kM,OAAe,YACb,IAAI2G,EAD0B,GAE9B,eACEA,OADsB,GAOxB,OAJAA,EAL8B,UASvB,SAAS/B,IACd,KAAO+B,EAAP,QAAoB,CAClB,IAAIwC,EAAMxC,EADQ,MAElB,GAAIwC,KAAJ,EAGE,OAFAvE,QADiB,EAEjBA,QAFiB,IAWrB,OADAA,QAbqB,MAoDzB5E,SA5fgC,EAkgBhCyrC,YAAoB,CAClBtoC,YADkB,EAGlBqsE,MAAO,YAcL,GAbA3qE,KAAA,KAD6B,EAE7BA,KAAA,KAF6B,EAK7BA,KAAA,KAAYA,KAAKgve,MALY,EAM7Bhve,KAAA,MAN6B,EAO7BA,KAAA,SAP6B,KAS7BA,KAAA,OAT6B,OAU7BA,KAAA,IAV6B,EAY7BA,KAAA,mBAZ6B,IAc7B,EACE,kBAEyBwO,MAAnBA,EAAKA,OAAOA,IACZowM,EAAOA,KAAKA,KADZpwM,KAEC4tC,OAAO5tC,EAAKA,MAFjB,MAGExO,KAAA,GAD0B,IAOlC2xS,KAAM,WACJ3xS,KAAA,MADe,EAGf,IACIkxe,EADYlxe,KAAK0we,WAHN,cAKf,aAAIQ,EAAWA,KACb,MAAMA,EADyB,IAIjC,OAAOlxe,KATQ,MAYjBive,kBAAmB,YACjB,GAAIjve,KAAJ,KACE,MADa,EAIf,IAAIkJ,EALiC,KAMrC,gBAYE,OAXA4f,OAD2B,QAE3BA,MAF2B,EAG3B5f,OAH2B,EAK3B,IAGEA,SAHU,OAIVA,MAJU,KALe,EAe7B,IAAK,IAAIlG,EAAIhD,KAAK0we,WAAW7ue,OAA7B,EAAyCmB,GAAzC,MAAsD,CACpD,IAAIC,EAAQjD,KAAK0we,WADmC,GAEhD5nd,EAAS7lB,EAFuC,WAIpD,YAAIA,EAAMA,OAIR,OAAO6gJ,EAJoB,OAO7B,GAAI7gJ,EAAMA,QAAUjD,KAApB,KAA+B,CAC7B,IAAIsxe,EAAW1yR,EAAOA,KAAKA,EADE,YAEzB2yR,EAAa3yR,EAAOA,KAAKA,EAFA,cAI7B,GAAI0yR,GAAJ,EAA4B,CAC1B,GAAItxe,KAAKsX,KAAOrU,EAAhB,SACE,OAAO6gJ,EAAO7gJ,EAAP6gJ,UADuB,GAEzB,GAAI9jJ,KAAKsX,KAAOrU,EAAhB,WACL,OAAO6gJ,EAAO7gJ,EADyB,iBAIpC,GAAIque,GACT,GAAItxe,KAAKsX,KAAOrU,EAAhB,SACE,OAAO6gJ,EAAO7gJ,EAAP6gJ,UADuB,OAI3B,KAAIytV,EAMT,MAAM,IAAI3pe,MADL,0CAJL,GAAI5H,KAAKsX,KAAOrU,EAAhB,WACE,OAAO6gJ,EAAO7gJ,EADkB,gBAW1Cmne,OAAQ,cACN,IAAK,IAAIpne,EAAIhD,KAAK0we,WAAW7ue,OAA7B,EAAyCmB,GAAzC,MAAsD,CACpD,IAAIC,EAAQjD,KAAK0we,WADmC,GAEpD,GAAIzte,EAAMA,QAAUjD,KAAhBiD,MACA27M,EAAOA,KAAKA,EADZ37M,eAEAjD,KAAKsX,KAAOrU,EAFhB,WAEkC,CAChC,IAAIuue,EAD4B,SAMhCA,IACU,UAATtxe,GADDsxe,aAECtxe,IACDsxe,EAAaA,QAHbA,GAIA9md,GAAO8md,EAJX,aAOEA,EAHkC,MAMpC,IAAI1od,EAAS0od,EAAeA,EAAfA,WArBa,GAyB1B,OAHA1od,OAtB0B,EAuB1BA,MAvB0B,EAyB1B,GACE9oB,KAAA,OADgB,OAEhBA,KAAA,KAAYwxe,EAFI,cAMXxxe,KAAKyxe,SA/Bc,IAkC5BA,SAAU,cACR,aAAI3od,EAAOA,KACT,MAAMA,EADqB,IAe7B,MAXoBA,UAAhBA,EAAOA,MAAX,aACIA,EAAOA,KACT9oB,KAAA,KAAY8oB,EADkB,IAEzB,WAAIA,EAAOA,MAChB9oB,KAAA,KAAYA,KAAK0qB,IAAM5B,EADY,IAEnC9oB,KAAA,OAFmC,SAGnCA,KAAA,KAHmC,OAIV8oB,WAAhBA,EAAOA,MAAX,IACL9oB,KAAA,KAD+C,GAZd,GAmBrC+hT,OAAQ,YACN,IAAK,IAAI/+S,EAAIhD,KAAK0we,WAAW7ue,OAA7B,EAAyCmB,GAAzC,MAAsD,CACpD,IAAIC,EAAQjD,KAAK0we,WADmC,GAEpD,GAAIzte,EAAMA,aAAV,EAGE,OAFAjD,KAAA,SAAciD,EAAd,WAAgCA,EADG,UAEnC0te,EAFmC,OAQzC,MAAS,YACP,IAAK,IAAI3te,EAAIhD,KAAK0we,WAAW7ue,OAA7B,EAAyCmB,GAAzC,MAAsD,CACpD,IAAIC,EAAQjD,KAAK0we,WADmC,GAEpD,GAAIzte,EAAMA,SAAV,EAA6B,CAC3B,IAAI6lB,EAAS7lB,EADc,WAE3B,aAAI6lB,EAAOA,KAAkB,CAC3B,IAAI4od,EAAS5od,EADc,IAE3B6nd,EAF2B,GAI7B,OAN2B,GAY/B,MAAM,IAAI/oe,MAfc,0BAkB1B+pe,cAAe,gBAab,OAZA3xe,KAAA,SAAgB,CACdL,SAAUwL,EADI,GAEd+ke,WAFc,EAGdC,QAHc,GAMhB,SAAInwe,KAAKqnG,SAGPrnG,KAAA,IAH0B,GAPyB,IAzrBzB,EAAnB,CAqtBb,a,YAA6B9E,EAA7B,QD5tBFA,IC+tBA,IACE22e,mBADE,EAEF,MAAOC,GAWP,YAAI,2DACF11J,8BADkC,EAGlC/sK,uCADK,K,YC5tBT,IAlBA,EAoBEqvpB,EADoB,qBAAXhwyB,QAA0BA,OAArC,wBACaA,OADwD,wBAGxDiwyB,EADN,KAGPzj0B,a,mGC2FA,YACE,OAAO0j0B,SAAmBC,QAAnBD,IAAmBC,OAAnBD,EAAmBC,EAAnBD,gBADwB,G,6XAjGjC,IAAME,EAAuB,CAC3BC,SAD2B,oBAE3BC,cAF2B,qCAI3BC,uBAJ2B,oCAK3BC,uBAL2B,oCAM3BC,gCAN2B,qBAO3BC,0CAP2B,KAQ3BC,+CAR2B,KAS3BC,mDAT2B,WAU3BC,oDAV2B,YAW3BC,sCAX2B,KAY3BC,sCAZ2B,KAa3BC,0CAb2B,SAc3BC,yCAd2B,QAe3BC,+CAf2B,uDAiB3BC,oDAjB2B,iEAmB3BC,mCAnB2B,MAoB3BC,kCApB2B,KAsB3BC,uBAtB2B,gBAwB3B,uBAxB2B,iBAyB3B,qCAzB2B,gEA4B3BC,kBA5B2B,oBA6B3BC,cA7B2B,gBA8B3BC,iBA9B2B,gBA+B3BC,kBA/B2B,6BAiC3BC,iBAjC2B,iDAkC3BC,oBAlC2B,8CAmC3B,wBAnC2B,iCAoC3B,0BApC2B,mCAqC3B,8BArC2B,4BAsC3B,gCAtC2B,8BAuC3BC,eAvC2B,mBAyC3BC,mBAzC2B,yCA0C3BC,cA1C2B,uBA2C3BC,YA3C2B,mBA4C3BC,WA5C2B,iBA6C3BC,WA7C2B,iBA8C3BC,gBA9C2B,8CAgD3BC,iBAhD2B,aAiD3BC,eAjD2B,WAkD3BC,gBAlD2B,iBAmD3BC,kBAnD2B,cAoD3BC,mBApD2B,aAsD3B95tB,QAtD2B,gBAuD3B+5tB,cAvD2B,2CAwD3BC,mBAxD2B,iCAyD3BC,mBAzD2B,oBA0D3BC,0BA1D2B,8BA4D3BC,uBA5D2B,4DA8D3BC,mBA9D2B,qDA+D3BC,mBA/D2B,6DAmE7B,gBACE,UACE,uBACEn9zB,6BAAyC0mB,IAAfA,EAAKA,MAAcA,MAD/C,QACE1mB,KAFJ,MAIE,6BACEA,mCAA+C0mB,IAAfA,EAAKA,MAAcA,MADrD,QACE1mB,KAGJ,OAAOw6zB,EAAqBA,IATM,GAYpC,IAAMF,EAAqB,CACzB8C,GADyB,QAEzBC,GAFyB,QAGzB/rqB,GAHyB,QAIzBgsqB,GAJyB,QAKzBC,GALyB,QAMzBzyW,GANyB,QAOzB0yW,GAPyB,QAQzBC,GARyB,QASzBC,GATyB,QAUzBC,GAVyB,QAWzB5lqB,GAXyB,QAYzB9yG,GAZyB,QAazB24wB,GAbyB,QAczBC,GAdyB,SAuB3B,gBACE,SAGOt2sB,EAAKjzC,QAAQ,wBAAwB,cAC1C,OAAOpqE,KAAQA,EAAOwc,EAAfxc,GAA4B,KAAOA,EADe,QAHhD,EAYb,IAAM4zzB,EAAW,CACf,YADe,WACK,6LAIpB,aALe,WAKM,2LAIrB,IATe,YASoD,4IAApDp3yB,EAAoD,+BAAnE,KAA4Bs/O,EAAuC,+BAA5B+3jB,EAAgBA,EAAvD,GAAmE,kBAC1DC,EAAgBA,EAD0C,kDAInE,UAbe,YAaU,qJ,wKChI3B,OAlBA,O,s2BAuCA,aAIEhk0B,aAKQ,6DALRA,GAAY,EAKJ,EALI,SAKJ,IAHN4itB,0BAGM,MALI,KAKJ,MAFNC,uBAEM,MALI,KAKJ,MADNohH,6BACM,mBACNvi0B,KAAA,SADM,EAENA,KAAA,mBAFM,EAGNA,KAAA,gBAHM,EAINA,KAAA,qBAJM,EAKNA,KAAA,uBALM,EAONA,KAAA,QAPM,KAQNA,KAAA,YARM,KASNA,KAAA,UATM,KAUNA,KAAA,WAVM,KAYNA,KAAA,eAZM,K,qCAeR4ktB,YAAyC,IAAhBt3O,EAAgB,uDAAzCs3O,KACE5ktB,KAAA,QADuC,EAEvCA,KAAA,YAFuC,EAGvCA,KAAA,eAAsB5B,OAAOA,OAHU,Q,uBAMzComtB,YACExktB,KAAA,UADmB,I,wBAIrBwi0B,YACExi0B,KAAA,WADqB,I,sBAOvB,WACE,OAAOA,KAAKohtB,YAAcphtB,KAAKohtB,YAAxB,SADQ,I,gBAOjB,WACE,OAAOphtB,KAAKqhtB,UADH,mB,IAOX,YACErhtB,KAAA,4BADc,I,oBAOhB,WACE,OAAOA,KAAKqhtB,UADC,e,IAOf,YACErhtB,KAAA,wBADkB,I,oCAOpByi0B,YAAgE,aAAhCC,EAAgC,uDAAhED,OAAgE,uCAExDjhH,EAAUD,EAF8C,GAK9D,GAAI,iBAAJ,OAAmCC,GAGjC,KAFA55L,EAAa5nhB,KAAK2i0B,kBADiC,IAGlC,YAGf3i0B,KAAA,kCAEQwphB,YACJ,eAAkBA,EAAlB,EADiB,GAEjB,6BAFiB,MAFrB,OAMS,WACLxhgB,cACE,6GAFS,EACXA,cAOD,KAAIrmB,OAAOA,UAAX,GAEA,YACLqmB,cACE,oHAFG,EACLA,OAFA4/f,EAAa45L,EADuB,GASjC55L,GAAcA,EAAf,GAAiCA,EAAa5nhB,KAAlD,WACEgoB,cACE,0GAF+D,EACjEA,QAOEhoB,KAAJ,aAGEA,KAAA,WAHmB,sBAInBA,KAAA,gBAAqB,CAAE0i0B,UAAF,EAAanhH,aAAb,EAA2B35L,gBAGlD5nhB,KAAA,6BAAkC,CAChC4nhB,WADgC,EAEhCg7S,UAFgC,EAGhCL,sBAAuBvi0B,KAHS,4B,gEAYpC,gGACOA,KADP,kFAKakngB,EALb,uBAMIw7T,EAD4B,EALhC,SAOyB1i0B,KAAKohtB,YAAYp5L,eAP1C,UAOIu5L,EAPJ,qCASImhH,EADK,KART,oBAUInhH,EAVJ,kBAYO9/sB,MAAMA,QAZb,2BAaIumB,cACE,yGAF8B,EAChCA,OAbJ,2BAmBEhoB,KAAA,2BAnB0B,GAA5B,iD,6EA2BA6i0B,YACE,GAAK7i0B,KAAL,aAGA,IAAM4nhB,EACY,kBAAR3xgB,GAAoBjW,KAAKqhtB,UAAUyhH,sBAA3C,IALU,EAMV7szB,EAGEtU,OAAOC,UAAUgmhB,IACjBA,EADA,GAEAA,GAAc5nhB,KAJlB,YAWIA,KAAJ,aAGEA,KAAA,WAHmB,sBAInBA,KAAA,oBAJmB,IAOrBA,KAAA,6BAAkC,CAAE4nhB,gBAXlC5/f,kDADA,EACAA,8B,+BAoBJs+c,cAAgD,IAAnBohF,EAAmB,yDAC9CphF,yBAAwB,CACtB9kY,IADsB,EAEtBx0E,OAAQ06hB,EAAYzhF,aAAZyhF,MAA+B1njB,KAFjB,mBAGtBgvU,IAAKhvU,KAHiB,gBAItBsqR,QAAStqR,KAJa,wB,gCAY1BoojB,YACE,qBAAWlhD,GACT,GAAIA,EAAKA,OAAT,EACE,OAAOlngB,KAAKsojB,aAAa,IAAMtla,OADZ,SAGhB,GAAIvhJ,MAAMA,QAAV,GAAyB,CAC9B,IAAM+mB,EAAM7Z,KAAKA,UADa,GAE9B,GAAI6Z,EAAIA,OAAR,EACE,OAAOxoB,KAAKsojB,aAAa,IAAMtla,OADb,IAItB,OAAOhjJ,KAAKsojB,aAXW,M,0BAoBzBA,YACE,OAAQtojB,KAAA,SAAD,IADY,I,qBAOrB+i0B,YAIE,MAJY,EACZ,GAAK/i0B,KAAL,YAIA,GAAIkG,EAAKA,SAAT,KAAwB,CACtB,IAAMysC,GAASm2K,sBADO,GAatB,GAXIn2K,EAAOA,IAAX,WACE3yC,KAAA,oCAA0C,CACxCitB,OADwC,KAExCixG,MAAOvrF,EAAOA,IAAIA,UAAUA,QAAQA,KAFI,IAGxCqwxB,aAHwC,SAG1BrwxB,EAAOA,IAAIA,YAIzBA,EAAOA,IAAX,UACEi1e,EAAkCj1e,EAArBA,EAAOA,IAAIA,SADF,GAGpBA,EAAOA,IAAX,QAAwB,CAEtB,IAAMswxB,EAAWtwxB,EAAOA,IAAIA,QAAQA,MAFd,KAGhBuwxB,EAAUD,EAHM,GAIhBE,EAAgBxqvB,WAJA,GAMjBuqvB,EAAQA,SAAb,OAWkBA,QAAZA,GAAJ,SAAyBA,EACvBh8T,EAAO,CAAC,KAAM,CAAE14f,KAAT,IAEK00zB,SAAZA,aACAA,GADAA,SAEAA,GAHK,UAILA,EAEAh8T,EAAO,CAAC,KAEN,CAAE14f,KAFG,GAGLy0zB,EAASA,OAASA,EAAlBA,EAAsBA,EAASA,GAHjC/7T,MAKK,SAAIg8T,EACT,IAAID,EAASA,OACXj7yB,cADyB,6DAKzBk/e,EAAO,CAAC,KAEN,CAAE14f,KAFG,KAGLy0zB,EAASA,GAHJ,EAILA,EAASA,GAJJ,EAKLA,EAASA,GALX/7T,EAME+7T,EAASA,IAIbj7yB,cACE,kDAFG,uBApCPk/e,EAAO,CAAC,KAEN,CAAE14f,KAFG,OAGLy0zB,EAASA,OAASA,EAAlBA,EAAsBA,EAASA,GAH1B,KAILA,EAASA,OAASA,EAAlBA,EAAsBA,EAASA,GAJ1B,KAKLE,EAAgBA,EAAhBA,IALFj8T,GA4CJ,EACElngB,KAAA,6BAAkC,CAChC4nhB,WAAYA,GAAc5nhB,KADM,KAEhC4i0B,UAFgC,EAGhCQ,qBAHgC,IAKzBx7S,IACT5nhB,KAAA,KADqB,GAGnB2yC,EAAOA,IAAX,aACE3yC,KAAA,6BAAmC,CACjCitB,OADiC,KAEjC+tG,KAAMroF,EAAOA,IAFoB,cAOjCA,EAAOA,IAAX,cACE3yC,KAAA,gBAAqB2yC,EAAOA,IADD,kBAGxB,CAELu0d,EAAO/oU,SAFF,GAGL,IACE+oU,EAAOv4f,KAAKA,MADV,GAGGlN,MAAMA,QAAX,KAGEylgB,EAAOA,EAHiB,YAK1B,MAAOp2L,IAET,GAAoB,kBAATo2L,GA2FjB,YACE,IAAKzlgB,MAAMA,QAAX,GACE,OADwB,EAG1B,IAAM4h0B,EAAan8T,EAJqB,OAKxC,GAAIm8T,EAAJ,EACE,OADkB,EAGpB,IAAMz3jB,EAAOs7P,EAR2B,GASxC,IAEI,kBACAvlgB,OAAOA,UAAUiqQ,EADjB,OAEAjqQ,OAAOA,UAAUiqQ,EAHnB,SAKEjqQ,OAAOC,UAAUgqQ,IAASA,GAN9B,GAQE,OADA,EAGF,IAAM03jB,EAAOp8T,EAnB2B,GAoBxC,GAAM,iBAAN,kBAAyCo8T,EAAP,KAChC,OADgE,EAGlE,IAAIC,GAvBoC,EAwBxC,OAAQD,EAAR,MACE,UACE,OAAID,EACF,OADoB,EAF1B,MAME,IANF,MAOE,WACE,OARJ,IAQWA,EACT,IATF,OAUE,IAVF,QAWE,IAXF,OAYE,YACE,OAAIA,EACF,OADoB,EAb1B,MAiBE,WACE,OAAIA,EACF,OADoB,EAGtBE,GAJF,EAjBF,MAuBE,QACE,OAxBJ,EA0BA,IAAK,IAAIvg0B,EAAT,EAAgBA,EAAhB,EAAgCA,IAAK,CACnC,IAAMm9X,EAAQ+mI,EADqB,GAEnC,KAAuB,kBAAV/mI,GAAuBojc,GAApC,OAAiDpjc,GAC/C,OADiE,EAIrE,OAxDwC,EA3FJqjc,CAAhC,GAAkE,YAChExj0B,KAAA,gBADgE,GAIlEgoB,cACE,mCAA4Bm2K,SAA5B,gBAlBG,2B,gCA2BToqX,YAA2B,QAEzB,UACE,aACE,UAAAvojB,KAAA,2BADF,OADF,MAKE,gBACE,UAAAA,KAAA,2BADF,UALF,MASE,eACEA,KAAA,UADF,WATF,MAaE,eACEA,KAAA,UADF,eAbF,MAiBE,eACEA,KAAA,KAAYA,KADd,WAjBF,MAqBE,gBACEA,KAAA,KADF,EAQFA,KAAA,gCAAsC,CACpCitB,OADoC,KAEpC/B,a,0BAQJu4yB,cACE,MAGA,IAAMC,EACYC,IAAhBA,EAAQA,IAAYA,GAApBA,OAAuBA,EAAvBA,mBAA2CA,EAA3CA,gBAA0DA,EAL/B,KAM7B3j0B,KAAA,kBAN6B,K,+BAY/B2i0B,YAA2B,MACzB,MACE,OADY,KAGd,IAAMe,EACYC,IAAhBA,EAAQA,IAAYA,GAApBA,OAAuBA,EAAvBA,mBAA2CA,EAA3CA,gBAA0DA,EALnC,KAMzB,OAAO,UAAA3j0B,KAAA,0CANkB,O,2BAY3B4j0B,YACE,OAAO5j0B,KAAKqhtB,UAAUuiH,cADE,K,0BAO1BC,YACE,OAAO7j0B,KAAKqhtB,UAAUwiH,aADC,O,EA5a3B,G,uBA+eA,aACEvl0B,aAAc,UACZ0B,KAAA,qBADY,E,kCAOd,WACE,OADe,I,gBAOjB,WACE,OADS,G,IAOX,e,oBAKA,WACE,OADa,G,IAOf,e,gEAKA,yH,6EAKA6i0B,e,+BAOAv8V,eACEA,yBAAwB,CAAE9kY,IAAF,EAAO8oL,QAAStqR,KAAhB,wB,gCAO1BoojB,YACE,MADuB,M,0BAQzBE,YACE,MADiB,M,qBAOnBy6Q,e,gCAKAx6Q,e,0BAMAk7Q,iB,2BAKAG,YACE,OADwB,I,0BAO1BC,YACE,OADuB,M,EAjG3B,G,ioDCoOA,YACE,IAAIC,EAAaC,EAAjB,SACEC,EAAaC,EAF2B,KAI1C,UACE,iBACEH,EAAaC,EADf,KADF,MAIE,gBAJF,MAME,kBACED,EAAaC,EAPjB,KASE,oBACEC,EAAaC,EADf,IATF,MAYE,mBACEH,EAAaC,EAbjB,KAeE,qBACEC,EAAaC,EADf,KAIF,MAAO,CAAEH,WAAF,EAAcE,e,2BAWvB,YACE,UACE,cACE,OAAOE,EAFX,KAGE,gBACE,OAAOA,EAJX,OAKE,kBACE,OAAOA,EANX,QAOE,qBACE,OAAOA,EARX,YASE,YACE,OAAOA,EAVX,OAYA,OAAOA,EAb+B,M,sBA3iBxC,YAEE,GAAInn0B,KAAKA,MAAMA,KAAf,EACE,MAAO,CAAC8a,EAAR,GAEF,IAAMsszB,EAAO,EALiB,EAO9B,GAAIA,EAP0B,EAQ5B,MAAO,CAAC,EARoB,GASvB,GAAIpn0B,KAAKA,MAAMA,KAAf,EACL,MAAO,CAAC,EAAR,GAUF,IAPA,IAAMqn0B,EAAKvszB,EAAIA,EAAIA,EAbW,EAe1BlS,EAAJ,EACEC,EADF,EAEEC,EAFF,EAGEC,EAlB4B,IAoBjB,CAEX,IAAM2vE,EAAI9vE,EAAVE,EACEsnJ,EAAIvnJ,EAHK,EAIX,GAAIunJ,EAxBwB,EAwBb,MAGXi3qB,GAAM3uvB,EAAV,GACE5vE,EADe,EAEfC,EAFe,IAIfH,EADK,EAELC,EAFK,GAYT,OALIw+zB,EAAKz+zB,EAALy+zB,EAAav+zB,EAAIA,EAArB,EACWu+zB,IAAOvszB,EAAI,CAAClS,EAAZ,GAAoB,CAACC,EAA9BgO,GAESwwzB,IAAOvszB,EAAI,CAAChS,EAAZ,GAAoB,CAACC,EAA9B8N,I,4FA2cJ,WAKE,IAJA,IAAIywzB,EAD+B,SAE/BC,EACFD,EAAQA,eAAiBA,EAAQA,cAHA,UAKnC,0BAAOC,EAAP,YAAuC,OACrCD,EAAUC,EAD2B,WAErCA,EACED,EAAQA,eAAiBA,EAAQA,cAHE,UAMvC,OAXmC,G,iBA/oBrC,YACE,IAAMn7R,EAAmBx6gB,OAAOA,kBADL,EAErB61yB,EACJ9ijB,EAAIA,8BACJA,EADAA,2BAEAA,EAFAA,wBAHyB,EAOrBimc,EAAax+K,EAPQ,EAQ3B,MAAO,CACLphD,GADK,EAELC,GAFK,EAGLmlD,OAHK,IAGGw6K,I,oBAqNZ,YAAuD,IAA5B,EAA4B,EAA5B,OAA4B,EAA5B,SAA3B,EAAuD,EAAvD,OACE,IADqD,EACrD,GAAM,EAAN,KAAM,EAAN,KAAM,EAAN,KAAM,EAAN,KAEM88G,EAAoBjzU,EAASA,MAHkB,EAK/Cj2a,GAAU88L,EAAD,GAAD,GALuC,EAM/C7mJ,GAAW8mJ,EAAD,GAAD,GANsC,EAQrD,MAAO,CACL/8L,MAAOkpvB,EAAoBA,EADtB,EAELjzsB,OAAQizsB,EAAoBA,EAFvB,I,qBA8HT,YAMG,IANyB,EAMzB,EANyB,WAMzB,EANyB,MAMzB,IAHDC,wBAGC,aAFDrkiB,kBAEC,aADDskiB,WACC,SACKpwsB,EAAMqwsB,EAAZ,UACEpwsB,EAASD,EAAMqwsB,EAFhB,aAGKpqzB,EAAOoqzB,EAAb,WACEnqzB,EAAQD,EAAOoqzB,EAJhB,YA6BK3liB,EAAN,GACEuF,EAAM,IADR,IAEEqgiB,EAAWC,EA/BZ,OAgCGC,EAAyBC,EAAsBA,EAEjD3kiB,EAZF,YACE,IAAMt4F,EAAUxI,EADgC,IAE1C0loB,EAAcl9nB,EAAQA,WAAaA,EAFO,WAG1Cm9nB,EAAeD,EAAcl9nB,EAHa,YAIhD,OAAO48nB,EAAMM,EAANN,EAA4BO,EAJa,GANlD,YACE,IAAMn9nB,EAAUxI,EADyB,IAIzC,OADEwI,EAAQA,UAAYA,EAApBA,UAAwCA,EAHD,iBA0BzCg9nB,EAAyBA,GACzBA,EADAA,IADF,IAUEA,EAAyBI,EAAkCA,EAAlCA,EANzB,IAuBF,IAFA,IAAIC,EAAW/kiB,EAAaA,GAlE3B,EAoEQp9R,EAAT,EAAqCA,EAArC,EAAmDA,IAAK,CACtD,IAAMs8L,EAAOuloB,EAAb,GACE/8nB,EAAUxI,EAF0C,IAGhD8loB,EAAet9nB,EAAQA,WAAaA,EAHY,WAIhDu9nB,EAAgBv9nB,EAAQA,UAAYA,EAJY,UAKhDw9nB,EAAYx9nB,EAAlB,YACE+6J,EAAa/6J,EANuC,aAOhDy9nB,EAAYH,EAPoC,EAQhDI,EAAaH,EARmC,EAUtD,QAAIF,EAKEK,GAAJ,IACEL,EADwB,QAGrB,IAAK/kiB,EAAA,EAAD,GAAJ,EAA4D,MAInE,KACEoliB,GAAcA,GACdH,GADAG,GAEAD,GAFAC,GAGAJ,GAJF,IASA,IAAMK,EACJ1o0B,KAAKA,IAAIA,EAAGu3H,EAAZv3H,GAAmCA,KAAKA,IAAIA,EAAGyo0B,EAhCK,GAiChDE,EACJ3o0B,KAAKA,IAAIA,EAAGwd,EAAZxd,GAAmCA,KAAKA,IAAIA,EAAGwo0B,EAlCK,GAqCpDI,GAAiBL,EAAD,GArCoC,EAsChDvkf,GAFkB8hB,EAAD,GAAvB,EAEkC+ie,EAAlB,IAtCsC,EAwCtD5miB,OAAa,CACX/9P,GAAIq+J,EADO,GAEXznL,EAFW,EAGX2zB,EAHW,EAIX8zJ,KAJW,EAKXyhJ,QALW,EAMX8kf,aAAc,IAACF,EANJ,IAQbphiB,MAAQjlG,EAhD8C,KAmDxD,IAAMl8K,EAAQ47Q,EAAd,GACEh7Q,EAAOg7Q,EAAQA,EAAQA,OAxHxB,GAmID,OATA,GACEA,QAAa,SAAUr5R,EAAGC,GACxB,IAAM22J,EAAK52J,EAAEA,QAAUC,EADI,QAE3B,OAAI7I,KAAKA,IAAIA,GAAb,MAA0B,EAGnB4I,EAAEA,GAAKC,EALa,MAQxB,CAAEwd,MAAF,EAASY,KAAT,EAAe6gzB,MAAf,EAA+BtgiB,Q,wBAyDxC,YACE,OAAOxoS,EAAKA,OAASA,EADc,Q,kBApBrC,YACE,OAAO4F,OAAOA,UAAUA,IAAUgxf,EAAQA,KADZ,G,oBAIhC,YACE,OACEhxf,OAAOA,UAAUA,IACjBvD,OAAOA,OAAOA,GAAYA,SAD1BuD,IAEAq5H,IAAS+osB,EAJoB,S,oBAQjC,YACE,OACEpi0B,OAAOA,UAAUA,IACjBvD,OAAOA,OAAOA,GAAYA,SAD1BuD,IAEAq5H,IAASipsB,EAJoB,S,uBA3CjC,YACE7ysB,EADiC,kB,2BAcnC,YACE,IAAI28N,EAAQ+3e,EADyB,GAcrC,OAdqC,IASjC10sB,EAAIA,UACN28N,GAASg4e,IAV0B,IAW1B30sB,EAAIA,YACb28N,GAZmC,O,oDAtZvC,YACE,IAD+B,EACzBp7S,EAAS,IADgB,M,koBAAA,CAEJ,IAAI6smB,gBAFA,QAE/B,2BAAuD,oBAA5C,EAA4C,KAAvD,EAAuD,KACrD7smB,MAAWruC,EAAXquC,cADqD,IAFxB,8BAK/B,OAL+B,G,gBA4FjC,cACE,IAAMwkC,EAAIt/D,EADmB,EAE7B,OAAas/D,IAANA,EAAUA,EAAIp6E,KAAKA,MAAM8a,EAAIA,EAFP,I,iBAjL/B,cAA8D,IAAvBmuzB,EAAuB,wDAIxDtpxB,EAASorJ,EAJ+C,aAK5D,MAMA,IAFA,IAAIwjS,EAAUxjS,EAAQA,UAAYA,EAT0B,UAUxDsjS,EAAUtjS,EAAQA,WAAaA,EAVyB,WAYzDprJ,EAAOA,eAAiBA,EAAxBA,cACCA,EAAOA,cAAgBA,EADzB,aAECspxB,IACEtpxB,EAAO+hO,UAAU74P,SAAS,kBAJ/B,WAKMs0Q,iBAAiBA,GAAQA,WAM7B,GAJAoxM,GAAW5ub,EADX,UAEA0ub,GAAW1ub,EAFX,aAIAA,EAASA,EAJT,cAKa,OAIf,SACE,IAAIupxB,EAAKA,MACP36V,GAAW26V,EADe,UAG5B,IAAIA,EAAKA,OACP76V,GAAW66V,EADgB,KAE3BvpxB,aAF2B,IAK/BA,YAnC4D,OAM1D10B,cADW,6C,cAqCf,cACE,IAAMk+yB,EAAiB,YACrB,IAIAC,EAAMz3yB,OAAO4rQ,uBAAsB,WACjC6riB,EADoE,KAGpE,IAAMC,EAAWC,EAHmD,WAI9DC,EAAQt/xB,EAJsD,MAKhEo/xB,IAAJ,IACEp/xB,QAAco/xB,EADQ,GAGxBp/xB,QARoE,EASpE,IAAMu/xB,EAAWF,EATmD,UAU9DG,EAAQx/xB,EAVsD,MAWhEu/xB,IAAJ,IACEv/xB,OAAau/xB,EADS,GAGxBv/xB,QAdoE,EAepEpC,EAfoE,QAmBlEoC,EAAQ,CACZxsB,OADY,EAEZi/kB,MAFY,EAGZ6sO,MAAOD,EAHK,WAIZG,MAAOH,EAJK,UAKZI,cALY,GAQVN,EAjC0C,KAmC9C,OADAE,+BAlC8C,M,sBAvJhD,O,gBAAA,E,sBAAA,I,YAAA,G,YAAA,G,gBAAA,E,iBAAA,K,oBAAA,G,mBAAA,E,kBA2BwB,CACtBK,QADsB,EAEtBC,QAFsB,EAGtBC,OAHsB,EAItBC,SAJsB,G,wBAOM,CAC5BnoV,QAD4B,EAE5BooV,OAF4B,EAG5BC,SAH4B,EAI5BC,WAJ4B,GAO9B,IAAM9C,EAAc,CAClBxlV,SADkB,EAElB7X,KAFkB,EAGlBogW,OAHkB,EAIlBC,QAJkB,EAKlBC,YALkB,EAMlBC,OANkB,G,+BASC,CACnBC,OADmB,SAEnBz4sB,IAFmB,O,gBAKC,CACpB0pX,QADoB,EAEpBC,OAFoB,EAGpB+uV,eAHoB,GAMtB,IAAMvD,EAAa,CACjBrlV,SADiB,EAEjB6oV,SAFiB,EAGjBC,WAHiB,EAIjBC,QAJiB,EAKjBC,KALiB,G,eAQnB,IAAMzD,EAAa,CACjBvlV,SADiB,EAEjB7X,KAFiB,EAGjB8gW,IAHiB,EAIjBC,KAJiB,GA8InB,gBACE,IAAIC,EAD2C,EAE3CjxzB,EAAWowP,EAAMA,OAF0B,EAI/C,GAAIpwP,EAAWA,IAAM1I,EAAU84P,EAA/B,IACE,OAAOA,EADwC,OAGjD,GAAI94P,EAAU84P,EAAd,IACE,OAD8B,EAIhC,KAAO6gkB,EAAP,GAA4B,CAC1B,IAAMtliB,EAAgBsliB,EAAD,GADK,EAGtB35zB,EADgB84P,EAFM,IAIxBpwP,EAD0B,EAG1BixzB,EAAWtliB,EADN,EAIT,OApB+C,EA2HjD,kBAaE,GAAIpmS,EAAJ,EACE,OADa,EA2Bf,IAAI2r0B,EAAMjD,EAAMA,GAxC4C,IAyCxDkD,EAAUD,EAAIA,UAAYA,EAzC8B,UA2CxDC,GAAJ,IAOEA,GADAD,EAAMjD,EAAM1o0B,EAAN0o0B,GANY,KAOJiD,UAAYA,EAPR,WAkBpB,IAAK,IAAI9k0B,EAAI7G,EAAb,EAAwB6G,GAAxB,MACE8k0B,EAAMjD,EAAMA,GADuB,KAE3BiD,UAAYA,EAAhBA,UAAgCA,EAAhCA,cAAJ,KAFF,EAQE3r0B,EARmC,EAUrC,OAvE4D,EAgQ9D,cACE,IAAI4xV,EAAQhxV,KAAKA,MAAMq0H,EAAXr0H,OAAuBq0H,EADM,QAEnCuhY,EAAQ51f,KAAKA,MAAMq0H,EAAXr0H,OAAuBq0H,EAFI,QAOzC,OAJK,IAAOr0H,KAAR,MAA2B41f,EAAQ,IAAO51f,KAA9C,KAEEgxV,GAFqD,GAHd,E,iCA9kB3C,eAooBA,IAAMi6e,EAAmB,IAAI/oxB,SAAQ,SAAUC,GAW7CxwB,6BAXsD,M,yBAkBxD,aACEpwB,cAA+C,6DAA/CA,GAAgB,EAA+B,EAA/B,SAA+B,EAA/B,QAA+B,EAA/B,MAA+B,UAC7C0B,KAAA,SAD6C,EAI7CA,KAAA,IAAWgmC,SAASA,cAAc/E,EAJW,cAM7CjhC,KAAA,IAAWA,KAAK04E,IAN6B,WAS7C14E,KAAA,OAAcuxH,GAT+B,IAU7CvxH,KAAA,MAAas7E,GAVgC,IAW7Ct7E,KAAA,MAAay1O,GAXgC,IAc7Cz1O,KAAA,iBAAwBA,KAAKuxH,OAASvxH,KAdO,MAe7CA,KAAA,QAf6C,E,iDAkB/Cio0B,WACE,GAAIjo0B,KAAJ,eAAyB,OACvBA,KAAA,kBADuB,sBAEvBA,KAAA,gBAAuBA,KAAKs7E,MAAQt7E,KAFb,OAMzBA,KAAA,qBAPW,iBAQX,IAAMko0B,EAAgBlo0B,KAAKs7E,MAAQt7E,KAAd,SARV,IASXA,KAAA,gBAAuBko0B,EAAelo0B,KAT3B,Q,mBAYb,WACE,OAAOA,KADK,U,IAId,YAvCF,UAwCIA,KAAA,eAAsBo8C,MADP,GAEfp8C,KAAA,UAzCJ,EAyC0B+nI,EAzC1B,EAyC+BA,EAzC/B,EAuCmB,IAtCVhrI,KAAKA,IAAIA,KAAKA,IAAIA,EAAlBA,GADmB,IA0CxBiD,KAHe,e,sBAMjBotpB,YACE,MAGA,IACM7yL,EADYkqP,EAJH,WAKkBjroB,YAAciroB,EALhC,YAMXlqP,EAAJ,GACcv0b,SADU,gBAEtB+vQ,kBAvsBN,0BAusBMA,UAFsB,EAEtBA,U,kBAIJ8hS,WACO73kB,KAAL,UAGAA,KAAA,SAJK,EAKLA,KAAA,kBALK,a,kBAQP4tW,WACM5tW,KAAJ,UAGAA,KAAA,SAJK,EAKLA,KAAA,qBALK,gB,6BA7DT,G,gyCCroBA,IAAMmo0B,EAAwB,CAE5BxkH,SAF4B,KAG5BykH,iBAH4B,KAK5BC,KAL4B,QAM5BC,KAN4B,QAO5BC,IAP4B,QAQ5BC,MAR4B,OAS5BC,UAT4B,OAW5BxyvB,EAX4B,KAa5B2jF,EAb4B,UAc5B8uqB,MAd4B,KAe5BC,OAf4B,OAiB5BC,IAjB4B,QAmB5BC,IAnB4B,KAoB5BC,KApB4B,KAqB5BC,GArB4B,KAsB5BC,OAtB4B,KAuB5B17sB,KAvB4B,OAwB5B27sB,MAxB4B,OAyB5BC,KAzB4B,OA2B5BC,KA3B4B,KA4B5BC,GA5B4B,KA6B5BC,GA7B4B,KA8B5BC,GA9B4B,KA+B5BC,QA/B4B,KAgC5BC,GAhC4B,KAiC5BhrV,GAjC4B,KAmC5Bl6U,EAnC4B,OAoC5BmlqB,GApC4B,WAqC5BC,MArC4B,KAuC5BpxY,MAvC4B,QAwC5BqxY,GAxC4B,MAyC5BC,GAzC4B,eA0C5BC,GA1C4B,OA2C5BC,MA3C4B,eA4C5BC,MA5C4B,KA6C5BC,MA7C4B,KA+C5BC,QA/C4B,KAiD5BC,OAjD4B,SAmD5BC,QAnD4B,KAqD5BC,SArD4B,MAwDxBC,EAzEN,WAgFA,aAIE/r0B,cAAyB,IAAzBA,EAAyB,EAAzBA,S,4FAAyB,SACvB0B,KAAA,QADuB,E,6CAIzBoiI,YACE,OAAOpiI,KAAKsq0B,MADK,K,4BAInBC,mBACE,IAAIC,EAAcA,KAChBC,4BAAuCD,EADJ,UAGrC,IAAIA,EAAcA,IAChBC,2BAAsCD,EADJ,SAGpC,IAAIA,EAAcA,MAChBC,sBAAiCD,EADG,Q,mBAKxCF,YACE,MACE,OADS,KAIX,IAAMxioB,EAAU9hK,SAASA,cALf,QAMV,GAAI,SAAJ,EAAoB,CAClB,IAAM,EADY,EAClB,KACMuI,EAAQmT,EAAKA,MAFD,GAGlB,GACEomJ,sBADS,WAETA,4BAAmCv5J,EAF1B,KAGA45xB,EAAJ,IACLrgoB,sBAA6BqgoB,EADS,IAO1C,GAFAno0B,KAAA,iBAjBU,GAmBNoH,EAAJ,SACE,GAA6BA,IAAzBA,EAAKA,SAASA,QAAgB,OAAQA,EAAKA,SAA/C,GAGEpH,KAAA,eAAoBoH,EAAKA,SAAzB,GAH0D,OAIrD,WACaA,EADb,cACL,2BAAiC,KAAjC,EAAiC,QAC/B0gM,cAAoB9nM,KAAKsq0B,MADM,KAD5B,+BAMT,OA9BU,O,6BAxBd,G,uHChFA,W,sKAsBA,IAmBA,aACEhs0B,cAOG,IAPS,EAOT,EAPS,eAOT,EAPS,WAOT,EAPS,YAOT,EAPS,SAOT,IAFDig0B,mBAEC,MAPS,KAOT,MADDxkQ,4BACC,U,4FAAA,SACD/5jB,KAAA,aADC,EAEDA,KAAA,SAFC,EAGDA,KAAA,YAHC,KAIDA,KAAA,oBAJC,GAKDA,KAAA,kBALC,KAMDA,KAAA,eANC,EAODA,KAAA,WAAkBwphB,EAPjB,EAQDxphB,KAAA,SARC,EASDA,KAAA,SATC,GAUDA,KAAA,oBAVC,KAWDA,KAAA,YAXC,EAYDA,KAAA,qBAZC,EAcDA,KAdC,a,sDAoBH0q0B,WAGE,GAFA1q0B,KAAA,eADiB,GAGZA,KAAL,qBAAgC,CAC9B,IAAM2q0B,EAAe3kyB,SAASA,cADA,OAE9B2kyB,YAF8B,eAG9B3q0B,KAAA,yBAH8B,GAMhCA,KAAA,sCAA4C,CAC1CitB,OAD0C,KAE1C26f,WAAY5nhB,KAF8B,WAG1C4q0B,YAAa5q0B,KAAKs5jB,SAHwB,W,oBAa9Cl3b,WAAoB,aAAb39B,EAAa,uDAApB29B,EACE,IAAMpiI,KAAK+8S,aAAe/8S,KAAtB,qBAAiDA,KAArD,eAGAA,KAJkB,SAMlBA,KAAA,gBANkB,EAOlB,UAAAA,KAAA,2CAAiCA,KAAjC,SAAgDA,KAP9B,qBASlB,IAAM6q0B,EAAgB7kyB,SATJ,yBAUlBhmC,KAAA,qBAA2B,IAAA05jB,iBAAgB,CACzC38Q,YAAa/8S,KAD4B,YAEzC65jB,kBAAmB75jB,KAFsB,kBAGzCw5E,UAHyC,EAIzC+mN,SAAUvgS,KAJ+B,SAKzCs5jB,SAAUt5jB,KAL+B,SAMzC85jB,oBAAqB95jB,KANoB,oBAOzCykG,QAPyC,EAQzCs1d,qBAAsB/5jB,KARmB,uBAU3CA,KAAA,kCACE,WAAM,MACJ,2BADI,GAEJ,EAFI,mBAGJ,wCAHI,YAKN,SAAUurH,U,oBASd1/F,WAAS,MACH7rB,KAAJ,sBACEA,KAAA,oBAD4B,SAE5BA,KAAA,oBAF4B,MAI9B,UAAAA,KAAA,4BALO,Y,kCAQT8q0B,YACE9q0B,KADmC,SAEnCA,KAAA,kBAFmC,I,4BAKrC+q0B,YACE/q0B,KAD0B,SAE1BA,KAAA,YAF0B,I,wBAY5Bgr0B,WAAa,WACLtyvB,EAAM14E,KADD,aAEPir0B,EAFO,KAIXvyvB,gCAAkC04C,YAChC,GAAI,wBAA6B,EAAjC,oBAA2D,OACzD,sCADyD,QAEzD,IAIEmV,aADA,GAEA0ksB,EAFA,OAOJ,IAAMzu0B,EAAMk8E,EAAIA,cAbuB,iBAcvC,MAQE,IAAIwyvB,EAAY95sB,EAAIA,SAtBiB,EA8BrC,GANE85sB,EACEA,GAzBiC,SA0BjCx8yB,gEAIW,CACb,IAAMy8yB,EAAYzyvB,EADL,wBAEPvB,EAAIp6E,KAAKA,IAAIA,GAAIq0H,EAAA,MAAY+5sB,EAAb,KAA8BA,EAFvC,QAGb3u0B,aAAgB,IAAC26E,GAAD,WAHH,IAMjB36E,gBApCuC,cAuCzCk8E,8BAAgC,WAC9B,GAAI,wBAA6B,EAAjC,oBAEIuyvB,EAAkBpyxB,YAAW,WACvB,EAAJ,qBACE,sCAD4B,GAG9BoyxB,EAJiC,OArM7C,SAmMM,CAcA,IAAMzu0B,EAAMk8E,EAAIA,cAfoB,iBAgBpC,IAIEl8E,YApBkC,GAsBpCA,mBAtBoC,kB,gCAzJ1C,G,gHCzCA,W,0KA+BA,aAIE8B,cAMG,IANS,EAMT,EANS,UAMT,EANS,QAMT,IAHDmphB,yBAGC,MANS,KAMT,EANS,EAMT,EANS,YAMT,IADDwpC,eACC,MANH3yjB,KAMG,G,4FAAA,SACD0B,KAAA,QADC,EAEDA,KAAA,QAFC,EAGDA,KAAA,kBAHC,EAIDA,KAAA,YAJC,EAKDA,KAAA,QALC,EAODA,KAAA,IAPC,KAQDA,KAAA,YARC,E,4CAkBHoiI,YAAqC,WAApBooZ,EAAoB,uDAArCpoZ,UACE,aAAIooZ,EAAoB,CACtB,IAAMlra,EAAa,CACjBihL,SAAUA,EAASA,MAAM,CAAEirM,UADV,IAEjB9yZ,IAAK14E,KAFY,IAGjBixjB,QAASjxjB,KAHQ,QAIjBynhB,kBAAmBznhB,KAJF,kBAKjB8kjB,YAAa9kjB,KALI,YAMjBwqhB,UAII9xc,EAAM1yC,SAASA,cAXC,OAYtBhmC,KAAA,oBAZsB,GAatBs/G,MAbsB,EAetB,IAAM1rG,EAASo9iB,kBAfO,GAgBtB,OAAO/xgB,QAAQA,QAhBO,GAoBxB,OAAOj/C,KAAKm+zB,QAAL,eAECltQ,YACJ,GAAI,eAAJ,EACE,MAAO,CAAEqI,SADsB,IAIjC,IAAMh6c,EAAa,CACjBihL,SAAUA,EAASA,MAAM,CAAEirM,UADV,IAEjB9yZ,IAAK,EAFY,IAGjBu4e,QAHiB,EAIjBxpC,kBAAmB,EAJF,kBAKjBq9B,YAAa,EALI,YAMjBt6B,UAGF,OAAI,EAAJ,IACSwmC,kBADK,IAId,MAAWhrhB,SAASA,cAlBL,OAmBf,sBAAyB,EAnBV,KAoBfs5E,MAAiB,EApBF,IAqBR0xc,kBArBQ,OAFZ,OAyBE7ijB,YACL6Z,cADc,Q,oBAKpB6D,WACE7rB,KAAA,YADO,I,kBAIT63kB,WACO73kB,KAAL,MAGAA,KAAA,YAJK,M,gCAnFT,G,wWChBA,WAfA,Q,wsDAkBA,c,iFAAA,e,kBAEA,c,qHACEor0B,WAAa,+CAEXpr0B,KAAA,YAAmB+j0B,aAFR,KAGX/j0B,KAAA,YAAmBik0B,aAHR,O,sBAOb,e,+BAEAoH,c,sBAGA,e,+BAEAC,iB,6BAfF,e,iMCWA,OAOA,OAtCA,oE,02FAwEA,IACMC,EAzEN,oBA2EMC,EAAkB,CACtBC,uBADsB,KAEtBC,qBAFsB,KAGtBC,sBAHsB,K,kEA6CxB,cAMErt0B,cAAkB,gDAJX,IAFe,MAMJ,4BANI,IAOpB,EAAA0B,KAAA,EADgB,G,8BAIlBoM,YACE,IAAMi3J,EAAMA,EADH,KACT,GACIA,EAAIA,IAAR,IACEA,SADiB,GAGnBA,MALS,GAOLA,EAAIA,KAAOA,EAAf,SAA2B,yB,oBAY7BuoqB,YAAkC,IAAlBC,EAAkB,uDAAlCD,KACE,EAAA5r0B,KAAA,EADgC,GAGhC,IAAMqjK,EAAMA,EAHoB,KAGhC,GACA,KAAe,CACb,IADa,EACPn/J,EAAKm/J,EADE,KAETrgK,EAFS,aAGb,2BAAwB,KAAxB,EAAwB,QAKtB,GAJI6o0B,EAAUA,IAAIvsoB,EAAlB,MACEj8B,SAD0B,GAE1BA,MAF0B,MAItBrgK,EAAN,EAAc,OARH,+BAcf,KAAOqgK,EAAIA,KAAOA,EAAlB,SAA8B,yB,iBAKhCp/J,YACE,OAAO,EAAAjE,KAAA,OADC,K,aAIV,WACE,OAAO,EAAAA,KAAA,GADW,W,EAxDtB,CAwDGN,OAAD,U,aAKE,IAAMos0B,EAAY,EAAA9r0B,KAAA,iBADA,MAGlB8r0B,wBAHkB,UAIlB,EAAA9r0B,KAAA,UAJkB,G,gNAgBtB,aAgBE1B,cAAqB,mBACnB,GADmB,4GAhBN,OAgBM,4BAbH01e,iBAHH,eAgBM,4BAhBN,OAgBM,6BAhBN,IAgBM,4BAhBN,IAgBM,4BAhBN,OAiBTh0e,KAAK1B,cAAT,EACE,MAAM,IAAIsJ,MADyB,iCAGrC,IAAMmk0B,EAJa,WAMnB,GAAIrizB,YAAJ,EACE,MAAM,IAAI9hB,MAAM,oBAAV,OACJ,EADI,wDADuB,EAC7B,OAWA,GAPF5H,KAAA,UAAiBgsC,EAXE,UAYnBhsC,KAAA,OAAcgsC,EAAQA,QAAUA,EAAQA,UAZrB,kBAoBb,mBAAAhsC,KAAA,wDAFJ,SAGI,UAAAA,KAAA,oDAGF,MAAM,IAAI4H,MADV,+CAIF,GACE5H,KAAKw5E,UAAU+oR,cADjB,aAEEroE,iBAAiBl6R,KAAjBk6R,oBAEA,MAAM,IAAItyR,MADV,kDAIJ5H,KAAA,SAAgBgsC,EAlCG,SAmCnBhsC,KAAA,YAAmBgsC,EAAQA,aAAe,IAnCvB,oBAoCnBhsC,KAAA,gBAAuBgsC,EAAQA,iBApCZ,KAqCnBhsC,KAAA,eAAsBgsC,EAAQA,gBArCX,KAsCnBhsC,KAAA,kBAAyBgsC,EAAQA,kBAtCd,KAuCnBhsC,KAAA,kBAAyBgsC,EAAQA,oBAvCd,EAwCnBhsC,KAAA,wBAAqBgsC,EAArB,6BAA8CggyB,gBAxC3B,OAyCnB,EAAAhs0B,KAAA,YACEgsC,EADF,8BAC4Bgoc,iBA1CT,cA2CnBh0e,KAAA,mBAA0BgsC,EAAQA,oBA3Cf,GA4CnBhsC,KAAA,sBAA6BgsC,EAAQA,wBA5ClB,EA6CnBhsC,KAAA,SAAgBgsC,EAAQA,UAAYigyB,eA7CjB,OA8CnBjs0B,KAAA,eAAsBgsC,EAAQA,iBA9CX,EA+CnBhsC,KAAA,gBAAuBgsC,EA/CJ,gBAgDnBhsC,KAAA,KAAYgsC,EAAQA,MAhDD,WAiDnB,EAAAhsC,KAAA,EAA0BgsC,EAAQA,oBAjDf,GAmDnBhsC,KAAA,uBAA8BgsC,EAnDX,eAoDfhsC,KAAJ,uBAEEA,KAAA,eAAsB,IAFQ,oBAG9BA,KAAA,yBAH8B,OAK9BA,KAAA,eAAsBgsC,EADjB,eAGPhsC,KAAA,KAAYgmC,SA3DO,gBA6DnBhmC,KAAA,QAAcks0B,iBAAYls0B,KAAZks0B,UAA4Bls0B,KAAKms0B,cAAcrqzB,KA7D1C,OA8DnB9hB,KAAA,sBAA6Bos0B,wBA9DV,QA+DnBps0B,KAAA,cAAqBA,KAAKqs0B,aA/DP,KAgEnBrs0B,KAhEmB,aAkEfA,KAAJ,mBACEA,KAAA,qBAD0B,qBAK5Bi/C,wBAAuB,WACrB,qCAAyC,CAAEhyB,OADhB,O,kCAK/B,WACE,OAAOjtB,KAAKss0B,OADG,S,yBAIjBC,YACE,OAAOvs0B,KAAKss0B,OADK,K,0BAOnB,WACE,QAAKts0B,KAAKws0B,iBAAV,SAKOxs0B,KAAKss0B,OAAO/+zB,OAAM,SAAUk/zB,GACjC,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EADoC,a,uBAQ/C,WACE,OAAO,EAAAzs0B,KAAA,KAAyBg0e,iBADhB,e,2BAOlB,WACE,QAASh0e,KADW,oB,6BAOtB,WACE,OAAOA,KADe,oB,IAOxB,YACE,IAAK2B,OAAOA,UAAZ,GACE,MAAM,IAAIiG,MADgB,wBAGvB5H,KAAL,cAIKA,KAAK0s0B,sBAAsBz2zB,GAAhC,IACE+R,4CADuE,EACvEA,8B,mCAQJ0kzB,YAAyD,QAA9BC,EAA8B,wDACvD,GAAI3s0B,KAAK4s0B,qBAAT,EAIE,OAHA,GACE5s0B,KADwB,yBADS,EAOrC,KAAM,EAAIiW,GAAOA,GAAOjW,KAAxB,YACE,OADwC,EAG1C,IAAMukL,EAAWvkL,KAXsC,mBAwBvD,OAZAA,KAAA,mBAZuD,EAcvDA,KAAA,iCAAuC,CACrCitB,OADqC,KAErC26f,WAFqC,EAGrCilT,8BAAW7s0B,KAAX6s0B,gCAAW,EAAmB52zB,EAA9B42zB,kBAHqC,KAIrCtopB,aAGF,GACEvkL,KADwB,yBArB6B,I,4BA+BzD,WAAuB,QACrB,2BAAOA,KAAP,gCAAO,EAAmBA,KAAK4s0B,mBAA/B,kBADqB,M,IAOvB,YACE,GAAK5s0B,KAAL,aAGA,IAAI4rQ,EAJoB,EAIb31P,EACX,GAAIjW,KAAJ,YAAsB,CACpB,IAAMgD,EAAIhD,KAAK8s0B,YAAYtszB,QADP,GAEhBxd,GAAJ,IACE4oQ,EAAO5oQ,EADG,GAKThD,KAAK0s0B,sBAAsB9gkB,GAAhC,IACE5jP,2CADwE,EACxEA,8B,wBAOJ,WACE,OAAOhoB,KAAK+s0B,gBAAkB,EAAvB,cACH/s0B,KADG,cADU,iB,IASnB,YACE,GAAIo8C,MAAJ,GACE,MAAM,IAAIx0C,MADI,0BAGX5H,KAAL,aAGAA,KAAA,aAPoB,K,6BAatB,WACE,OAAOA,KADe,oB,IAOxB,YACOA,KAAL,aAGAA,KAAA,aAJyB,K,yBAU3B,WACE,OAAOA,KADW,gB,IAOpB,YACE,KAAKgt0B,qBAAL,GACE,MAAM,IAAIpl0B,MADoB,iCAGhC,GAAK5H,KAAL,eAIAw+Q,GAR0B,KAS1B,IACEA,GADgB,KAGdx+Q,KAAKit0B,iBAAT,IAGAjt0B,KAAA,eAf0B,EAiB1B,IAjB0B,EAiBpB4nhB,EAAa5nhB,KAjBO,mBAmBpBkt0B,EAAa,CAAE1ujB,YAnBK,IAoBHx+Q,KApBG,YAoB1B,2BAAoC,QAClCys0B,OADkC,GApBV,8BAyBtBzs0B,KAAJ,oBACEA,KAAA,UAAeA,KAAf,oBAD2B,GAI7BA,KAAA,qCAA2C,CACzCitB,OADyC,KAEzCkgzB,cAFyC,EAGzCvlT,eAGE5nhB,KAAJ,uBACEA,KAD8B,Y,4BAKlC,WACE,OAAOA,KAAKohtB,YAAcphtB,KAAKot0B,qBAAxB,QADc,O,2BAIvB,WACE,OAAOpt0B,KAAKohtB,YAAcphtB,KAAKqt0B,2BAAxB,QADa,O,wBAItB,WACE,OAAOrt0B,KAAKohtB,YAAcphtB,KAAKws0B,iBAAxB,QADU,O,yBAgDnB5nH,YAAyB,WAgBvB,GAfI5ktB,KAAJ,cACEA,KAAA,iCAAuC,CAAEitB,OADrB,OAGpBjtB,KAHoB,mBAIpBA,KAJoB,aAMhBA,KAAJ,gBACEA,KAAA,2BADuB,MAGrBA,KAAJ,mBACEA,KAAA,8BAD0B,OAK9BA,KAAA,YAfuB,EAgBvB,GAGA,IAAMiphB,EAAYm4L,EAnBK,UAoBjBK,EAAaL,EApBI,SAqBjBksH,EAAmBlsH,EAAYA,QArBd,GAuBjB50L,EAA+B40L,EAvBd,2BAwBjBmsH,EAAqB,EAAAvt0B,KAAA,GACvBohtB,EADuB,iBAEvBniqB,QA1BmB,UA8BvB,GAAIwiqB,EAAa+pH,EAAjB,uBAAyD,CACvDxjzB,aADuD,qFAIvD,IAAMgzG,EAAQh7H,KAAKwt0B,YAAczJ,aAJsB,KAKvD/j0B,KAAA,sCAA4C,CAAEitB,OAAF,KAAgB+tG,SAG9Dh7H,KAAA,+BACE,WACE,kCAAsC,CAAEitB,OAAF,EAAgBw0rB,kBAExD,eAKFzhtB,KAAA,cAAqBoxH,YACnB,IAAMq7sB,EAAW,SAAYr7sB,EAAIA,WADP,GAE1B,GAKA,YAP0B,IAS5BpxH,KAAA,0BAAgCA,KAxDT,eA0DvBA,KAAA,aAAoBoxH,YACdA,EAAIA,cAAgB,6BAAxB,UAGA,qCAAwC,CAAEupO,UAAWvpO,EAJ5B,YAMzB,+BAAmC,EANV,cAOzB,eAPyB,OAS3BpxH,KAAA,4BAAkCA,KAnEX,cAuEvBi/C,YAAY,CAACquxB,EAAbruxB,UACQ,YAAiC,aAAhC,EAAgC,KAAjC,EAAiC,KACrC,GAAImiqB,IAAgB,EAApB,aAGA,+BAJqC,GAKrC,gCALqC,EAMrC,gBANqC,GAsBrC,IAdA,IAAMqsH,EACJ,gBAAqB1J,aAArB,UAA8C,EATX,OAU/Bl4gB,EAAQ,EAVuB,aAW/BtrB,EAAWmtiB,EAAaA,YAAY,CACxC7hhB,MAAOA,EAAQi6K,gBAZoB,mBAc/B6nW,EACJ,kBAAuB3B,gBAAvB,WAfmC,KAenC,EAGI4B,EACJ,SAAyB55V,iBAAzB,UAnBmC,KAoB/B65V,EAAkB5kT,EAAYA,EApBC,KAsB5B6kT,EAAT,EAAsBA,GAAtB,MAAwD,CACtD,IAAMrB,EAAW,IAAI,EAAJ,YAAgB,CAC/BjzvB,UAD+B,EAE/Bkve,SAAU,EAFqB,SAG/BznhB,GAH+B,EAI/B4qR,MAJ+B,EAK/BkihB,gBAAiBxtiB,EALc,QAM/BisP,6BAN+B,EAO/BwhT,eAAgB,EAPe,eAQ/BL,iBAR+B,EAS/BM,cAAe,EATgB,cAU/BL,uBAV+B,EAW/B5hT,iBAX+B,KAY/B6hT,gBAZ+B,EAa/BK,uBAb+B,EAc/BC,uBAd+B,EAe/BnpR,mBAAoB,EAfW,mBAgB/Bn8I,SAAU,EAhBqB,SAiB/Bula,eAAgB,EAjBe,eAkB/BC,gBAAiB,EAlBc,gBAmB/BtQ,KAAM,EAnByB,OAqBjC,cAtBsD,GA2BxD,IAAMuQ,EAAgB,SAjDe,GAkDrC,IACEA,aADiB,GAEjB,6BAAiCZ,EAFhB,MAKf,gBAAqB3J,aAAzB,KAEE,EAFwC,QAExC,KAFwC,GAG/B,gBAAqBE,aAAzB,MACL,EAD+C,oBAOjD,yCAAyC,iGACnC,EAAJ,gBACE,6BADuB,GAGrB,EAAJ,mBACE,gCAD0B,KAO1B7iH,EAAYA,cAAcA,kBAC1BK,EAAa+pH,EAZwB,6CAerC,mBAFA,UAbqC,gCAkBnC+C,EAAe9sH,EAlBoB,8BAqBrC,mBADqB,UApBgB,0IAyB/Bz/jB,EAAUo/jB,EAAYv5L,QAAQ,GAApB,MACds2S,YACE,IAAMsO,EAAW,SAAYqB,EADpB,GAEJrB,EAAL,SACEA,aADqB,GAGvB,6BAAuCtO,EAL9B,KAMT,MAAMoQ,GACJ,mBADwB,aAI5BhjtB,YACEvjG,sEADQ,GAKR,MAAMumzB,GACJ,mBADwB,aAM1BT,EAAUtC,EAAVsC,wBA/CiC,8EAwB9BA,EAxB8B,eAwBjBA,GAxBiB,kIAqDzC,gCAAoC,CAAE7gzB,OAtHD,IAwHrCm0rB,sBAA+B,YAAc,IAAd,EAAc,EAAd,KACzBA,IAAgB,EAApB,aAGIjkgB,EAAJ,WACE,cAAmBA,EADF,aAKjB,EAAJ,uBACE,EAD8B,aAlIpCl+J,OAsISssE,YACLvjG,4CADe,GAGf,0BAHe,S,2BAUrBwmzB,YACE,GAAKxu0B,KAAL,aAGA,EAGIyB,MAAMC,QAAQo4Y,IAAW95Y,KAAKohtB,YAAY15L,WAAa5tI,EADpD,OAML95Y,KAAA,YADK,GAFLA,KAAA,YADA,KAEAgoB,QAFA,MAEAA,wCALAhoB,KAAA,YADW,KAWb,IAAK,IAAIgD,EAAJ,EAAWkB,EAAKlE,KAAKss0B,OAA1B,OAAyCtp0B,EAAzC,EAAiDA,IAAK,SACpDhD,KAAA,2CAA4BA,KAA5B,gCAA4B,EAA5B,kBADoD,U,wBAKxDor0B,WACEpr0B,KAAA,OADW,GAEXA,KAAA,mBAFW,EAGXA,KAAA,cAHW,gBAIXA,KAAA,mBAJW,KAKXA,KAAA,YALW,KAMX,EAAAA,KAAA,EAAe,IAAIyu0B,EAxxBvB,KAyxBIzu0B,KAAA,UAPW,KAQXA,KAAA,eARW,EASXA,KAAA,8BATW,KAUXA,KAAA,sBAVW,+BAWXA,KAAA,4BAXW,+BAYXA,KAAA,kBAZW,+BAaXA,KAAA,YAAmB+j0B,aAbR,SAcX/j0B,KAAA,oBAA2B+j0B,aAdhB,QAeX/j0B,KAAA,YAAmBik0B,aAfR,KAiBX,EAAAjk0B,KAAA,EAA4B,CAC1B0u0B,mBAD0B,EAE1Bvre,YAF0B,EAG1B2gX,MAH0B,KAMxB9jtB,KAAJ,gBACEA,KAAA,2BAAiCA,KADX,eAEtBA,KAAA,cAFsB,MAIpBA,KAAJ,eACEA,KAAA,6BAAmCA,KADd,cAErBA,KAAA,aAFqB,MAKvBA,KAAA,mBAhCW,GAkCXA,KAlCW,oBAoCXA,KAAA,uBApCW,QAsCXA,KAAA,wBAtCW,GAwCX,OAAI,EAAAA,KAAA,KACF,EAAAA,KAAA,IADyC,KACzC,IACA,EAAAA,KAAA,EAFyC,S,2BA8E7Cms0B,WACE,IAAIns0B,KAAKyhtB,YAGTzhtB,KAJc,W,6BAOhB2u0B,YAAiE,IAAjD,EAAiD,EAAjD,QAAiD,IAAtCC,gBAAsC,MAAjD,KAAiD,MAArBhnT,kBAAqB,MAAjE+mT,KAAiE,EAY/D,GAXI3u0B,KAAKwt0B,cAAgBzJ,aAAzB,OACE,GAEE/j0B,KAAA,sBAFc,GADwB,wBAQxCA,KARwC,WAWrC4u0B,IAAa5u0B,KAAlB,qBAA6C,CAC3C,IAAMua,EAAO2jzB,EAAQA,WAAaA,EADS,WAErC1jzB,EAAQD,EAAO2jzB,EAFsB,YAG3C,EAAoCl+zB,KAHO,UAGrC,EAAN,aAAM,EAAN,eAEEA,KAAKwt0B,cAAgBzJ,aAArB,YACAxpzB,EADA,GAEAC,EAAQmtS,EAHV,KAKEinhB,EAAW,CAAEr0zB,KAAF,EAAW+5G,IAAX,KAGf4gS,sBAxB+D,K,kCA8CjE25a,cAA2E,IAAlCC,EAAkC,wDAAhB9yiB,EAAgB,wDAGzE,GAFAh8R,KAAA,mBAA0B6P,EAD+C,WAGzE,0BACE,GACE7P,KAAA,kCAAwC,CACtCitB,OADsC,KAEtC4+R,MAFsC,EAGtCkjhB,YAHsC,QAF5C,CAWA/u0B,KAAA,uCAdyE,GAezEA,KAAA,iDAEE4utB,EAAW9oP,gBAjB4D,kBAoBzE,IApByE,EAoBnEonW,EAAa,CAAErhhB,MApBoD,OAqBlD7rT,KArBkD,YAqBzE,2BAAoC,KAApC,EAAoC,QAClCys0B,SADkC,IArBqC,8BA0BzE,GAFAzs0B,KAAA,cAxByE,GA0BzE,EAAe,CACb,IADa,EACT4rQ,EAAO5rQ,KAAX,oBAGEA,KAAKi9b,WACHj9b,KAAKgv0B,sBAAwBhv0B,KAFjC,6BAIE4rQ,EAAO5rQ,KAAKi9b,UADZ,WAEAiqE,EAAO,CAAC,KAEN,CAAE14f,KAFG,OAGLxO,KAAKi9b,UAHA,KAILj9b,KAAKi9b,UAJA,IAAPiqE,OAQFlngB,KAAA,mBAAwB,CACtB4nhB,WADsB,EAEtBg7S,UAFsB,EAGtBQ,qBAHsB,IAO1Bpj0B,KAAA,kCAAwC,CACtCitB,OADsC,KAEtC4+R,MAFsC,EAGtCkjhB,YAAa/yiB,EAASA,OAHgB,IAMpCh8R,KAAJ,uBACEA,KAD8B,SAIhC,EAAAA,KAAA,EAAgCA,KAAKw5E,UA3DoC,iB,iCAiE3E,WACE,OACEx5E,KAAKiv0B,cAAgBhL,aAArB,MACAjk0B,KAAKwt0B,cAAgBzJ,aAFvB,WAGE,EAJwB,I,uBAU5BmL,YAAmC,IAAlBJ,EAAkB,wDAC7BjjhB,EAAQlzO,WADqB,GAGjC,GAAIkzO,EAAJ,EACE7rT,KAAA,4BADa,OAER,CACL,IAAMw2b,EAAcx2b,KAAKss0B,OAAOts0B,KAAK4s0B,mBADhC,GAEL,MAAkB,OAGlB,IAAIuC,EAAJ,oBACEC,EANG,mBAaL,GALIpv0B,KAAJ,qBACEmv0B,EAAWC,EADkB,EAEpBpv0B,KAAJ,oBACLmv0B,EAAWC,EADsB,GAG/Bpv0B,KAAKwt0B,cAAgBzJ,aAAzB,WAAgD,OACvB,CAACqL,EADsB,GAC9C,EAD8C,KAC9C,EAD8C,KAGhD,IAAMC,GACDrv0B,KAAA,sBAAD,GAA0Cw2b,EAA3C,MACCA,EADF,MAEAx2b,KAnBG,sBAoBCsv0B,GACFtv0B,KAAA,uBAAD,GAA2Cw2b,EAA5C,OACAA,EAtBG,MAuBL,UACE,kBACE3qI,EADF,EADF,MAIE,iBACEA,EADF,EAJF,MAOE,kBACEA,EADF,EAPF,MAUE,eACEA,EAAQ9uT,KAAKA,IAAIA,EADnB,GAVF,MAaE,WAGE,IAAMwy0B,GAAkBC,gCAEpBzy0B,KAAKA,IAAIA,EALf,GAME8uT,EAAQ9uT,KAAKA,IAAIA,EAATA,eANV,GAbF,MAqBE,QArBF,YAsBIirB,oCADF,EACEA,gCAGJhoB,KAAA,4BAhDK,M,mCAwDTyv0B,WACMzv0B,KAAJ,sBAEEA,KAAA,UAAeA,KAAf,oBAF6B,GAK/B,IAAMys0B,EAAWzs0B,KAAKss0B,OAAOts0B,KAAK4s0B,mBANZ,GAOtB5s0B,KAAA,gBAAqB,CAAEk+zB,QAASuO,EAPV,Q,mCAexB3J,YACE,IAAK9i0B,KAAL,YACE,OADqB,KAGvB,IAAMgD,EAAIhD,KAAK8s0B,YAAYtszB,QAJA,GAK3B,OAAIxd,EAAJ,EAAW,KAGJA,EARoB,I,gCA0B7B0+sB,YAKG,IALgB,EAKhB,EALgB,WAKhB,IAHDkhH,iBAGC,MALgB,KAKhB,MAFDQ,2BAEC,aADDb,6BACC,SACD,GAAKvi0B,KAAL,aAGA,IAAMys0B,EACJ9q0B,OAAOA,UAAUA,IAAe3B,KAAKss0B,OAAO1kT,EAL7C,GAMD,KAOA,IAAI5nhB,KAAKgv0B,sBAAT,GAIA,IAEA,EAnBC,EAiBGn3zB,EAAJ,EACE2zB,EAlBD,EAmBG8vC,EAAJ,EACEi2C,EADF,EAIMizsB,EAAoBiI,EAASA,SAAWA,MAvB7C,EAwBKiD,GACHlL,EAAoBiI,EAApB,OAAsCA,EAAvC,OACAA,EADA,MAEA3mW,gBA3BD,iBA4BK6pW,GACHnL,EAAoBiI,EAApB,MAAqCA,EAAtC,QACAA,EADA,MAEA3mW,gBA/BD,iBAgCGj6K,EAhCH,EAiCD,OAAQ+2gB,EAAUA,GAAlB,MACE,UACE/qzB,EAAI+qzB,EADN,GAEEp3xB,EAAIo3xB,EAFN,GAGE/2gB,EAAQ+2gB,EAHV,GAQE/qzB,EAAUA,OAANA,EAAaA,EARnB,EASE2zB,EAAUA,OAANA,EAAaA,EATnB,EADF,MAYE,IAZF,MAaE,WACEqgR,EADF,WAbF,MAgBE,IAhBF,OAiBE,YAEEA,EAFF,aAKYrgR,QAJVA,EAAIo3xB,EADN,KAKoB5i0B,KAAlB,WACE6X,EAAI7X,KAAKi9b,UADuB,KAEhCzxZ,EAAIxrC,KAAKi9b,UAFuB,MAGV,kBAANzxZ,GAAkBA,EAA7B,KAGLA,EAHyC,GAzB/C,MA+BE,IA/BF,OAgCE,YACE3zB,EAAI+qzB,EADN,GAEEtnvB,EAFF,EAGEi2C,EAHF,EAIEs6L,EAJF,cAhCF,MAsCE,WACEh0S,EAAI+qzB,EADN,GAEEp3xB,EAAIo3xB,EAFN,GAGEtnvB,EAAQsnvB,EAAUA,GAHpB,EAIErxsB,EAASqxsB,EAAUA,GAJrB,EAKE,IAAMuM,EAAWnv0B,KAAK4v0B,kBAAoB,EAL5C,oBAMQR,EAAWpv0B,KAAK4v0B,kBAAoB,EAN5C,mBAQE1jS,GACGlsiB,KAAA,sBAAD,KAEA8le,gBAXJ,iBAYEqmE,GACGnsiB,KAAA,uBAAD,KAEA8le,gBAfJ,iBAgBEj6K,EAAQ9uT,KAAKA,IAAIA,KAAKA,IAAdA,GAA+BA,KAAKA,IAhB9C,IAtCF,MAwDE,QAxDF,YAyDIirB,6CAC0B46yB,EAAUA,GAFtC,KACE56yB,uCAcJ,GARA,IACM6jS,GAASA,IAAU7rT,KAAvB,cACEA,KAAA,kBADyC,EAEhCA,KAAK+s0B,gBAAT,kBACL/s0B,KAAA,kBAD+C,wBAKrC6rT,aAAVA,GAAyB+2gB,EAA7B,IAQA,IAAMiN,EAAe,CACnBpD,EAASA,SAASA,uBAAuBA,EADtB,GAEnBA,EAASA,SAASA,uBAAuB50zB,EAAzC40zB,EAAoDjhyB,EAFtD,IAIIjxB,EAAOxd,KAAKA,IAAI8y0B,EAAaA,GAAtB9y0B,GAA6B8y0B,EAAaA,GApHpD,IAqHGv7sB,EAAMv3H,KAAKA,IAAI8y0B,EAAaA,GAAtB9y0B,GAA6B8y0B,EAAaA,GArHnD,IAuHD,IAIEt1zB,EAAOxd,KAAKA,IAAIA,EAJQ,GAKxBu3H,EAAMv3H,KAAKA,IAAIA,EALS,IAO1BiD,KAAA,gBAAqB,CACnBk+zB,QAASuO,EADU,IAEnBmC,SAAU,CAAEr0zB,KAAF,EAAQ+5G,OAClBszZ,oBAxBA5nhB,KAAA,gBAAqB,CACnBk+zB,QAASuO,EADU,IAEnB7kT,oBA7FF5nhB,KAAA,yBAD2C,QAN3CgoB,6CADa,EACbA,8C,6BA8HJ8nzB,YACE,IAAMC,EAAe/v0B,KADI,cAEnBgw0B,EAAoBhw0B,KAFD,mBAGnBiw0B,EACJt3vB,WAAWA,KAAuBA,EAC9B57E,KAAKA,MAALA,IAAWgz0B,GADfp3vB,IAJuB,EAQnBivc,EAAasoT,EARM,GASrBC,EAAgB,SATK,EAUzBA,GAAiB,SAVQ,EAWzB,IAAMC,EAAkBpw0B,KAAKss0B,OAAO1kT,EAXX,GAYnBpuc,EAAYx5E,KAZO,UAanBwse,EAAU4jW,EAAgBA,aAC9B52vB,EAAUA,WAAa02vB,EADTE,EAEd52vB,EAAUA,UAAY02vB,EAfC,GAiBnBG,EAAUtz0B,KAAKA,MAAMyve,EAjBF,IAkBnB8jW,EAASvz0B,KAAKA,MAAMyve,EAlBD,IAmBzB2jW,GAAiB,IAAME,EAAU,IAnBR,EAqBzBrw0B,KAAA,UAAiB,CACf4nhB,WADe,EAEf/7N,MAFe,EAGfv3L,IAHe,EAIf/5G,KAJe,EAKfikQ,SAAUx+Q,KALK,eAMfmw0B,mB,oBAIJ7/zB,WACE,IAAM0uR,EAAUh/R,KADT,mBAEDuw0B,EAAevxiB,EAArB,MACEwxiB,EAAkBD,EAHb,OAKP,OAAIC,EAAJ,CAGA,IAAMC,EAAe1z0B,KAAKA,IA/xC9B,GA+xCsD,EAAIyz0B,EAR/C,GAaP,GAJA,EAAAxw0B,KAAA,YAAkCg/R,EAT3B,KAWPh/R,KAAA,qCAXO,IAaFA,KAAL,qBAAgC,CAC9B,IAD8B,EACxB0w0B,EACJ1w0B,KAAKiv0B,cAAgBhL,aAArB,OACCjk0B,KAAKwt0B,cAAgBzJ,aAArB,MACC/j0B,KAAKwt0B,cAAgBzJ,aAJK,UAK1B4M,EAAY3w0B,KALc,mBAM1B4w0B,GAN0B,aAQ9B,2BAAiC,KAAjC,EAAiC,QAC/B,GAAIhlkB,EAAKA,QAAT,IAAwB,MAGxB,GAAIA,EAAKA,KAAOA,GAAhB,EAA6C,CAC3CglkB,GAD2C,UAZjB,8BAiB9B,IACED,EAAYJ,EAAaA,GADH,IAGxBvw0B,KAAA,sBApB8B,GAuBhCA,KAAA,gBAAqBg/R,EApCd,OAqCPh/R,KAAA,mCAAyC,CACvCitB,OADuC,KAEvCw8B,SAAUzpD,KAF6B,e,6BAM3C6w0B,YACE,OAAO7w0B,KAAKw5E,UAAU5zD,SADC,K,mBAIzB8kD,WACE1qE,KAAA,UADM,U,2BAIR,WACE,MADoB,QACbk6R,iBAAiBl6R,KAAjBk6R,uB,gCAGT,WACE,OAAOl6R,KAAK8w0B,wBAA0B1E,wBADb,a,sCAI3B,WACE,OAAOps0B,KAAK8w0B,wBAA0B1E,wBADP,W,wCAIjC,WACE,OAAOps0B,KAAKgv0B,sBAERhv0B,KAAKw5E,UAAUq8N,YAAc71S,KAAKw5E,UAHL,c,sCAMnC,WACE,OAAOx5E,KAAKgv0B,sBAERhv0B,KAAKw5E,UAAUo8N,aAAe51S,KAAKw5E,UAHR,e,oCAWjCu3vB,WACE,IAAK/w0B,KAAL,WACE,MAAO,CAAE6k0B,MADW,IAGtB,IAAM4H,EAAWzs0B,KAAKss0B,OAAOts0B,KAAK4s0B,mBAJX,GAOjB9koB,EAAU2koB,EAPO,IASjBntoB,EAAO,CACXr+J,GAAIwryB,EADO,GAEX50zB,EAAGiwL,EAAQA,WAAaA,EAFb,WAGXt8J,EAAGs8J,EAAQA,UAAYA,EAHZ,UAIXxI,KAJW,GAQb,MAAO,CAAEl8K,MAAF,EAAeY,KAAf,EAA2B6gzB,MAAO,CAAlC,GAA0CtgiB,IAFrC,IAAI1lS,IAAI,CAAC4t0B,EAfE,Q,8BAoBzBuE,WACE,GAAIhx0B,KAAJ,qBAGE,OAAOA,KAHsB,yBAK/B,IAAM6k0B,EACF7k0B,KAAKwt0B,cAAgBzJ,aAArB,KACI,EAAA/j0B,KAAA,GADJ,MAEIA,KAHR,OAIEogS,EAAapgS,KAAKwt0B,cAAgBzJ,aAJpC,WAKEW,EAAMtkiB,GAAcpgS,KAXL,gBAajB,OAAO,IAAAix0B,oBAAmB,CACxBtM,SAAU3k0B,KADc,UAExB6k0B,MAFwB,EAGxBJ,kBAHwB,EAIxBrkiB,WAJwB,EAKxBskiB,U,2BAOJd,YACE,QAAK5j0B,KAAL,cAKI2B,OAAOC,UAAUgmhB,IACjBA,EADA,GAEAA,GAAc5nhB,KAJlB,WAUOA,KAAKgx0B,mBAAmBzsiB,IAAItgS,IAdX,IAWtB+jB,wCADA,EACAA,4BADA,M,0BAUJ67yB,YACE,IAAK7j0B,KAAL,YACE,OADqB,EAGvB,KAEI2B,OAAOC,UAAUgmhB,IACjBA,EADA,GAEAA,GAAc5nhB,KAJlB,YAQE,OADAgoB,uCADA,EACAA,4BADA,EAIF,IAAMykzB,EAAWzs0B,KAAKss0B,OAAO1kT,EAdN,GAevB,OAAO,EAAA5nhB,KAAA,OAfgB,K,qBAkBzBgiT,WACE,IAAK,IAAIh/S,EAAJ,EAAWkB,EAAKlE,KAAKss0B,OAA1B,OAAyCtp0B,EAAzC,EAAiDA,IAE7ChD,KAAKss0B,OAAOtp0B,IACZhD,KAAKss0B,OAAOtp0B,GAAGku0B,iBAAmBC,kBAFpC,UAIEnx0B,KAAA,UADA,U,8BASNox0B,WACE,IAAK,IAAIpu0B,EAAJ,EAAWkB,EAAKlE,KAAKss0B,OAA1B,OAAyCtp0B,EAAzC,EAAiDA,IAC3ChD,KAAKss0B,OAATtp0B,IACEhD,KAAA,UADkB,oB,4BA6DxBqx0B,YAAsC,WAC9Bd,EAAee,GAAyBtx0B,KADV,mBAE9Bux0B,EAAcA,EAAdA,qBAF8B,GAG9BC,EACJxx0B,KAAKiv0B,cAAgBhL,aAArB,MACAjk0B,KAAKwt0B,cAAgBzJ,aALa,WAO9B0I,EAAWzs0B,KAAKgu0B,eAAeyD,mBAAmB,EAEtDzx0B,KAFe,SAPmB,GAepC,OAFA,EAAAA,KAAA,WAAAA,KAA+Buw0B,EAbK,OAepC,IACE,EAAAvw0B,KAAA,WAAAA,KAAA,SAAyC,WACvC,4BAD6C,OADnC,K,oCAkBhBq+zB,gBAOE,IAHAtkQ,EAGA,wDAPFskQ,EAOE,uCAPFA,EAOE,uCACA,OAAO,IAAI,EAAJ,iBAAqB,CAC1BC,aAD0B,EAE1B51Q,SAF0B,EAG1Bl/B,UAH0B,EAI1BjpP,SAJ0B,EAK1Bw5R,sBAAsB/5jB,KAAKgv0B,sBALD,EAQ1BzQ,kB,mCASJmT,cACE,OAAO,IAAI,EAAJ,gBAAoB,CACzBhpR,SADyB,EAEzBl/B,UAFyB,EAGzBmoT,eAAgB3x0B,KAAKgv0B,qBAAuB,KAAOhv0B,KAH1B,mB,0CAwB7B89zB,cAYE,YATAr2S,EASA,uDAZFq2S,KAIE94Q,EAQA,uDAZF84Q,GAKE74Q,IAOA,yDANA84Q,EAMA,uDAZFD,WAOE34Q,EAKA,uDAZF24Q,KAQEE,EAIA,uDAZFF,KASEv4Q,EAGA,uDAZFu4Q,KAUEG,EAEA,uDAZFH,KAWEpxS,EACA,0DAZFoxS,KAaE,OAAO,IAAI,EAAJ,uBAA2B,CAChCI,QADgC,EAEhCC,QAFgC,EAGhC12S,kBACEA,cAAqBznhB,KAArBynhB,gCAAqB,EAJS,mBAKhCu9B,mBALgC,EAMhCC,YANgC,EAOhCH,YAAa9kjB,KAPmB,YAQhC+kjB,gBAAiB/kjB,KARe,gBAShC+9zB,KATgC,EAUhC54Q,uBAAiBA,QAAjBA,IAAiBA,EAAjBA,EAAoCnljB,KAVJ,gBAWhCg+zB,oBACEA,cAAuBh+zB,KAAvBg+zB,gCAAuB,EAZO,gBAahCC,oBACEA,cAAuBj+zB,KAAvBi+zB,gCAAuB,EAdO,mBAehC14Q,WAAYA,cAAcvljB,KAAduljB,sCAAc,EAfM,YAgBhC74B,0B,mCAWJ8xS,cAAkE,MAA1B/2S,EAA0B,uDAAlE+2S,KACE,OAAO,IAAI,EAAJ,gBAAoB,CACzBN,QADyB,EAEzBC,QAFyB,EAGzB12S,kBACEA,cAAqBznhB,KAArBynhB,gCAAqB,EAJE,mBAKzBq9B,YAAa9kjB,KALY,gB,0CAa7Bo+zB,YACE,OAAO,IAAI,EAAJ,uBAA2B,CAChCD,c,6BAQJ,WAEE,IADA,IAAMmQ,EAAgBtu0B,KAAKss0B,OADL,GAEbtp0B,EAAJ,EAAWkB,EAAKlE,KAAKss0B,OAA1B,OAAyCtp0B,EAAzC,MAAsD,CACpD,IAAMyp0B,EAAWzs0B,KAAKss0B,OAD8B,GAEpD,GACEG,EAASA,QAAU6B,EAAnB7B,OACAA,EAASA,SAAW6B,EAFtB,OAIE,OADA,EAIJ,OAXsB,I,8BAkBxBsD,WAAmB,WACjB,OAAO5x0B,KAAKss0B,OAAOtj0B,KAAIyj0B,YACrB,IAAMlsiB,EAAWksiB,EAASA,QAAQA,YAAY,CAAE5ghB,MADf,IAGjC,OAAK,EAAD,wBAA+B2jhB,2BAAnC,GACS,CACLl0vB,MAAOilN,EADF,MAELhvK,OAAQgvK,EAFH,OAGL/hB,SAAU+hB,EAHL,UAOF,CACLjlN,MAAOilN,EADF,OAELhvK,OAAQgvK,EAFH,MAGL/hB,UAAW+hB,EAAA,SAAD,IAHL,U,wCAWX,WACE,OAAKvgS,KAAL,YAGKA,KAAL,8BAKOA,KAT0B,8BAOxBA,KAAKohtB,YAH2B,2BAFhCniqB,QAAQA,QADM,O,IAezB,YACE,KAAM+iG,aAAN,SACE,MAAM,IAAIp6I,MAAM,yCAAV,OAD2B,IAGnC,GAAK5H,KAAL,aAGKA,KAAL,+BAKAA,KAAA,8BAZwC,EAcxC,IAdwC,EAclCkt0B,EAAa,CAAE1gT,6BAdmB,OAejBxshB,KAfiB,YAexC,2BAAoC,QAClCys0B,OADkC,GAfI,8BAkBxCzs0B,KAlBwC,SAoBxCA,KAAA,iDAAuD,CACrDitB,OADqD,KAErD+0H,e,sBAOJ,WACE,OAAOhiJ,KADQ,a,IASjB,YACE,GAAIA,KAAKwt0B,cAAT,GAGA,KAAKqE,uBAAL,GACE,MAAM,IAAIjq0B,MAAM,wBAAV,OADsB,IAG1B5H,KAAKyhtB,WAAa+pH,EAAtB,yBAGAxr0B,KAAA,oBAA2BA,KAVR,YAYnBA,KAAA,YAZmB,EAanBA,KAAA,sCAA4C,CAAEitB,OAAF,KAAgB+tG,SAE5Dh7H,KAAA,kBAA0CA,KAfvB,wB,+BAkBrBqr0B,WAAqC,IAAnBzjT,EAAmB,uDAArCyjT,KACQvH,EAAa9j0B,KAAnB,YACEyktB,EAASzktB,KAFwB,OAInCyktB,sCAEEq/G,IAAeC,aANkB,YAQnCt/G,mCAAyCq/G,IAAeC,aARrB,SAU9B/j0B,KAAD,aAAJ,IAII8j0B,IAAeC,aAAnB,KAAoC,wBAEzB/j0B,KAAK8x0B,sBAAwB/N,aAAjC,MAGL/j0B,KAHuD,oBAQrDA,KAAK+x0B,oBAAsB31xB,MAAMp8C,KAArC,qBACEA,KAAA,UAAeA,KAAf,oBAD6D,GAG/DA,KAAA,yBA3BmC,GA4BnCA,KA5BmC,Y,sBAkCrC,WACE,OAAOA,KADQ,a,IASjB,YACE,GAAIA,KAAKiv0B,cAAT,GAGA,KAAK+C,uBAAL,GACE,MAAM,IAAIpq0B,MAAM,wBAAV,OADsB,IAG9B5H,KAAA,YAPmB,EAQnBA,KAAA,sCAA4C,CAAEitB,OAAF,KAAgB+tG,SAE5Dh7H,KAAA,kBAA0CA,KAVvB,uB,+BAarBsr0B,WAAqC,IAAnB1jT,EAAmB,uDAArC0jT,KACE,GAAKtr0B,KAAL,aAGA,IAAMyktB,EAASzktB,KAAf,OACE8jtB,EAAQ9jtB,KALyB,OAOnC,GAAIA,KAAKwt0B,cAAgBzJ,aAAzB,KAA0C,6BAMxC,GAFAt/G,cAFK,GAIDzktB,KAAKiv0B,cAAgBhL,aAAzB,KACE,IAAK,IAAIjh0B,EAAJ,EAAWkB,EAAK4/sB,EAArB,OAAmC9gtB,EAAnC,MACEyhtB,cAAmBX,EAAMA,GADqB,UAMhD,IAFA,IAAMmuH,EAASjy0B,KAAKiv0B,YADf,EAEDv2oB,EAFC,KAGI11L,EAAJ,EAAWkB,EAAK4/sB,EAArB,OAAmC9gtB,EAAnC,MACE,OAAI01L,IACFA,EAAS1yJ,SAASA,cADC,QAEnB0yJ,UAFmB,SAGnB+rhB,cAHmB,IAIVzhtB,MAAJ,IACL01L,EAASA,EAAOA,WADW,GAE3B+rhB,cAF2B,IAI7B/rhB,cAAmBorhB,EAAMA,GATqB,KAcpD,IAMI9jtB,KAAK+x0B,oBAAsB31xB,MAAMp8C,KAArC,qBACEA,KAAA,UAAeA,KAAf,oBAD6D,GAG/DA,KAAA,yBA3CmC,GA4CnCA,KA5CmC,a,6BAkDrCky0B,YAAqD,IAAlB3tpB,EAAkB,wDACnD,OAAQvkL,KAAR,aACE,KAAK+j0B,aAAL,QACE,IADuB,EACvB,EAAkB/j0B,KAAlB,mBAAM,EAAN,QACEmy0B,EAAa,IAFQ,eAKvB,2BAAsD,eAA3C,EAA2C,EAA3C,KAA2C,EAA3C,IAA2C,EAA3C,QAAX,EAAsD,EAAtD,aACE,KAAgBpxf,IAAZA,GAAiB8kf,EAArB,MAGA,IAAIuM,EAASD,EAAWA,IAJ4B,GAKpD,GACEA,QAAmBC,MADR,KAGbA,OARoD,KAL/B,wCAgBFD,EAhBE,cAgBvB,2BAA0C,KAA1C,EAA0C,QAClC5viB,EAAe6viB,UADmB,GAExC,QAAI7viB,EAAJ,CAGA,IAAMmlP,EAAW0qT,EALuB,OAMxC,OAAI1qT,EAAgB,MAIpB,KACE,IAAK,IAAI1khB,EAAIu/R,EAAR,EAA0Br+R,EAA/B,EAAuClB,GAAvC,EAAgDA,IAAK,CACnD,IAAM2t0B,EAAYyB,EAAlB,GACEC,EAAaD,EAAOpv0B,EAAPov0B,GAFoC,EAGnD,GAAIzB,EAAJ,EACE,OAAOrvH,EADmB,OAK9B,IAAK,IAAIt+sB,EAAIu/R,EAAR,EAA0Br+R,EAA/B,EAA8ClB,EAA9C,EAAsDA,IAAK,CACzD,IAAM2t0B,EAAYyB,EAAlB,GACEC,EAAaD,EAAOpv0B,EAAPov0B,GAF0C,EAGzD,GAAIzB,EAAJ,EACE,OAAO0B,EADmB,EAMhC,KAAc,CACZ,IAAMC,EAAUF,EADJ,GAEZ,GAAIE,EAAJ,EACE,OAAOhxH,EAAoBA,EADI,MAG5B,CACL,IAAMixH,EAASH,EAAO1qT,EADjB,GAEL,GAAI6qT,EAAJ,EACE,OAAOA,EAASA,EADc,EAnCM,QAhBnB,oCA2DzB,KAAKxO,aAAL,WAA4B,MAG5B,KAAKA,aA/DP,KAgEE,KAAKA,aAAL,SACE,GAAI/j0B,KAAKiv0B,cAAgBhL,aAAzB,KAA0C,MAG1C,IAAMgO,EAASjy0B,KAAKiv0B,YAJI,EAMxB,GAAI1qpB,GAAY+8hB,EAAoBA,IAApC,EAAkD,MAE3C,IAAK/8hB,GAAY+8hB,EAAoBA,IAArC,EAAmD,MAG1D,IAXwB,EAWxB,EAAkBthtB,KAAlB,mBAAM,EAAN,QACEqy0B,EAAa9tpB,EAAW+8hB,EAAX/8hB,EAAmC+8hB,EAZ1B,aAcxB,2BAAmD,eAAxC,EAAwC,EAAxC,KAAwC,EAAxC,QAAX,EAAmD,EAAnD,aACE,GAAIrgrB,IAAJ,GAGA,GAAI8/S,KAAJ,MAAmB8kf,EACjB,OADuC,EAJQ,QAd3B,+BA0B5B,OA3FmD,I,sBAkGrD2M,WACE,IAAMlxH,EAAoBthtB,KAA1B,mBACEyhtB,EAAazhtB,KAFN,WAIT,GAAIshtB,GAAJ,EACE,OADmC,EAGrC,IAAMmxH,EACJzy0B,KAAKky0B,gBAAgB5wH,GAAmB,IARjC,EAWT,OADAthtB,KAAA,kBAAyBjD,KAAKA,IAAIuktB,EAATvktB,EAVhB,Q,0BAkBX210B,WACE,IAAMpxH,EAAoBthtB,KADb,mBAGb,GAAIshtB,GAAJ,EACE,OAD0B,EAG5B,IAAMmxH,EACJzy0B,KAAKky0B,gBAAgB5wH,GAAmB,IAP7B,EAUb,OADAthtB,KAAA,kBAAyBjD,KAAKA,IAAIuktB,EAATvktB,EATZ,Q,2BAiBf410B,WAAyB,IAAXrl0B,EAAW,uDAAzBql0B,EACM/jH,EAAW5utB,KADQ,cAEvB,GACE4utB,GAAYA,EAAD,+BADV,GAEDA,EAAW7xtB,KAAKA,KAALA,GAAU6xtB,GAFpB,GAGDA,EAAW7xtB,KAAKA,IAAIA,EAATA,UAHV,WAIQuQ,EAAQ,GAAKshtB,EAND,aAOvB5utB,KAAA,kBAPuB,I,2BAczB4y0B,WAAyB,IAAXtl0B,EAAW,uDAAzBsl0B,EACMhkH,EAAW5utB,KADQ,cAEvB,GACE4utB,GAAYA,EAAD,+BADV,GAEDA,EAAW7xtB,KAAKA,MAALA,GAAW6xtB,GAFrB,GAGDA,EAAW7xtB,KAAKA,IAAIA,EAATA,UAHV,WAIQuQ,EAAQ,GAAKshtB,EAND,aAOvB5utB,KAAA,kBAPuB,M,EAp0D3B,G,WA0TE6y0B,GACE,IAIKh/c,EAAYA,SAAS++G,iBAA1B,OACE5ye,KAAA,qBAD8C,GAK7C6zX,EAAYA,SAAS++G,iBAAtB,qBACC/+G,EAAYA,SAAS++G,iBAFxB,yBAIM,EAAA5ye,KAAA,KAAyBg0e,iBAA7B,eACE,EAAAh0e,KAAA,IADwD,KACxD,IACA,EAAAA,KAAA,EAAuBg0e,iBAFiC,U,cAgB5D,OACGh0e,KAAKw5E,UAAN,cADF,IAEEx5E,KAAKgx0B,mBAAmBnM,MAAMhj0B,OAIzB7B,KAAKqt0B,2BAfiB,QAapBpuxB,QADP,U,cAmSF,GAAIj/C,KAAKwt0B,cAAgBzJ,aAAzB,KACE,MAAM,IAAIn8zB,MAD8B,qDAG1C,IAAMgghB,EAAa5nhB,KAAnB,mBACEgnC,EAAQA,EADV,QAEEy9qB,EAASzktB,KANY,OAavB,GAJAyktB,cATuB,GAWvBz9qB,eAXuB,EAanBhnC,KAAKiv0B,cAAgBhL,aAAzB,KAA0C,CAExC,IAAMwI,EAAWzs0B,KAAKss0B,OAAO1kT,EAFW,GAIxC,GAAI5nhB,KAAJ,qBAA+B,CAC7B,IAAM04L,EAAS1yJ,SAASA,cADK,OAE7B0yJ,YAF6B,SAG7B,IAAMo6oB,EAAY9syB,SAASA,cAHE,OAI7B8syB,YAJ6B,YAK7BA,yBAA4B9y0B,KAAKw5E,UALJ,aAK7Bs5vB,MAEAp6oB,cAP6B,GAQ7BA,cAAmB+zoB,EARU,KAS7BhoH,cAT6B,QAW7BA,cAAmBgoH,EADd,KAIPzlyB,aAlBwC,OAmBnC,CACL,IAAM+ryB,EAAe,IAArB,IACEd,EAASjy0B,KAAKiv0B,YAFX,EAKDrnT,EAAaA,IAAjB,GAEEmrT,MAAiBnrT,EAFY,GAG7BmrT,MAH6B,KAM7BA,MAAiBnrT,EAFZ,GAGLmrT,MAAiBnrT,EAHZ,IAOP,IAhBK,EAgBDlvV,EAhBC,gBAiBL,2BAA8B,KAA9B,EAA8B,QACtB+zoB,EAAWzs0B,KAAKss0B,OADM,GAE5B,IAGA,OAAI5zoB,IACFA,EAAS1yJ,SAASA,cADC,QAEnB0yJ,UAFmB,SAGnB+rhB,cAHmB,IAIVzhtB,EAAIA,IAAR,IACL01L,EAASA,aADkB,GAE3B+rhB,cAF2B,IAI7B/rhB,cAAmB+zoB,EAbS,KAe5BzlyB,aAf4B,KAjBzB,+BAoCPA,aAAmB4gf,GAAc5gf,EApEV,mBAqEvBA,qBArEuB,E,YA8GzBgsyB,GACE,QACEhz0B,KAAKgv0B,sBACLhv0B,KAAKw5E,UAAUy8N,eAAiB,EAFlC,WASE24a,IAAa5utB,KAAb4utB,eACA7xtB,KAAKA,IAAI6xtB,EAAW5utB,KAApBjD,eAXmB,O,oGAsiBvB,G,iFACM0v0B,EAAJ,S,wCACSA,EADa,S,gCAIEzs0B,KAAKohtB,YAAYv5L,QAAQ4kT,EAD7C,I,cACItO,SACDsO,EAAL,SACEA,aADqB,GAGlBzs0B,KAAK8kjB,YAAY69Q,kBAAkBxE,EAAxC,MACEn+zB,KAAA,yBAA8Bys0B,EAA9B,GAA2CtO,EADS,K,kBALpD,G,yCAUFn2yB,cADe,mCACfA,M,kBADe,M,6FAMnBirzB,GAAyB,QACvB,QAAIj0iB,4CACF,OAD2B,EAEtB,IAAIA,6CAAqBh/R,KAAzB,WACL,OAD+C,EAGjD,OAAQA,KAAR,aACE,KAAK+j0B,aAAL,KACE,OAAO,EAAA/j0B,KAAA,GAFX,WAGE,KAAK+j0B,aAAL,WACE,OAAO/j0B,KAAKu5R,OAJhB,MAMA,OAAOv5R,KAAKu5R,OAZW,K,YAkBzB25iB,GAAsC,iBACpC,2BAA6B,KAA7B,EAA6B,QACrBzG,EAAWzs0B,KAAKss0B,OAAOrryB,EADF,GAE3BwryB,kDAF2B,IADO,uDAKpC,2BAAqC,KAArC,EAAqC,QAC/B0G,EAAWA,IAAI1G,EAAnB,KAIAA,4BALmC,IALD,+B,mJCz9CxC,OAOA,OAvCA,e,+uEAuFA,IAAM2G,EAAoBC,uCAvF1B,S,cA4FA,aAME/00B,cAAqB,a,4FAAA,qCALH01e,iBADF,eAOd,IAAMx6Z,EAAYxtC,EADC,UAEb+hyB,EAAkB/hyB,EAFL,gBAInBhsC,KAAA,GAAUgsC,EAJS,GAKnBhsC,KAAA,YAAmB,OAASA,KALT,GAOnBA,KAAA,QAPmB,KAQnBA,KAAA,UARmB,KASnBA,KAAA,SATmB,EAUnBA,KAAA,MAAagsC,EAAQA,OAVF,gBAWnBhsC,KAAA,SAXmB,EAYnBA,KAAA,cAAqB+t0B,EAZF,SAanB/t0B,KAAA,8BACEgsC,EAAQA,8BAdS,KAenBhsC,KAAA,sBAfmB,EAgBnBA,KAAA,wBAAqBgsC,EAArB,6BAA8CggyB,gBAhB3B,OAiBnB,EAAAhs0B,KAAA,YACEgsC,EADF,8BAC4Bgoc,iBAlBT,cAmBnBh0e,KAAA,mBAA0BgsC,EAAQA,oBAnBf,GAoBnBhsC,KAAA,eAAsBgsC,EAAQA,iBApBX,EAqBnBhsC,KAAA,gBAAuBgsC,EAAQA,iBArBZ,EAuBnBhsC,KAAA,SAAgBgsC,EAvBG,SAwBnBhsC,KAAA,eAAsBgsC,EAxBH,eAyBnBhsC,KAAA,iBAAwBgsC,EAzBL,iBA0BnBhsC,KAAA,uBAA8BgsC,EA1BX,uBA2BnBhsC,KAAA,gBAAuBgsC,EA3BJ,gBA4BnBhsC,KAAA,0BACEgsC,EADF,2CACEA,wBACEhsC,KAAKihC,GADP+K,EAEEhsC,KA/Be,UAiCnBA,KAAA,uBAA8BgsC,EAjCX,uBAkCnBhsC,KAAA,SAAgBgsC,EAAQA,UAAYigyB,eAlCjB,OAmCnBjs0B,KAAA,KAAYgsC,EAAQA,MAnCD,WAqCnBhsC,KAAA,UArCmB,KAsCnBA,KAAA,mBAA0B,IAtCP,QAuCnBA,KAAA,eAAsBmx0B,kBAvCH,QAwCnBnx0B,KAAA,OAxCmB,KAyCnBA,KAAA,aAzCmB,KA0CnBA,KAAA,gBAAqB,UAACA,KAAD,6BAAC,EA1CH,aA4CnBA,KAAA,qBA5CmB,KA8CnBA,KAAA,gBA9CmB,KA+CnBA,KAAA,UA/CmB,KAgDnBA,KAAA,UAhDmB,KAiDnBA,KAAA,SAjDmB,KAkDnBA,KAAA,gBAlDmB,KAoDnB,IAAM04E,EAAM1yC,SAASA,cApDF,OAqDnB0yC,YArDmB,OAsDnBA,cAAkB37E,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,OAtDC,KAuDnB27E,eAAmB37E,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,QAvDA,KAwDnB27E,kCAAqC14E,KAxDlB,IAyDnB04E,sBAzDmB,UA0DnB14E,KAAA,yBAA+B,CAAE4rQ,KAAM5rQ,KAAvC,WAAuDywO,YACrD/3J,4BAD4D,MAG9D14E,KAAA,IA7DmB,EA+DnBw5E,oCA/DmB,G,gDAkErB85vB,YACEtz0B,KAAA,QADkB,EAElBA,KAAA,cAAqBm+zB,EAFH,OAIlB,IAAMoV,GAAiBvz0B,KAAA,SAAgBA,KAAjB,eAJJ,IAKlBA,KAAA,SAAgBm+zB,EAAQ/nhB,YAAY,CAClCyV,MAAO7rT,KAAK6rT,MAAQi6K,gBADc,iBAElCtnN,SAFkC,IAIpCx+Q,KATkB,U,qBAYpBwqE,WACExqE,KADQ,QAEJA,KAAJ,SACEA,KAAA,QADgB,Y,uEAQpB,iGACMmO,EADN,uBAGUnO,KAAKwz0B,gBAAgBpxsB,OAAOpiI,KAA5B,SAHV,iEAKImO,EADW,KAJf,uBAOInO,KAAA,4CAAkD,CAChDitB,OADgD,KAEhD26f,WAAY5nhB,KAFoC,GAGhDmO,UAVN,0E,sHAkBA,mGACMA,EADN,uBAGyBnO,KAAKyz0B,SAASrxsB,OAAOpiI,KAArB,SAHzB,kBAGU4T,EAHV,OAIQ5T,KAAJ,iBACEA,KAAA,0BAA+B4T,EADP,UAJ9B,gDAQIzF,EADW,KAPf,yBAUInO,KAAA,qCAA2C,CACzCitB,OADyC,KAEzC26f,WAAY5nhB,KAF6B,GAGzCmO,UAbN,4E,gIAkBA,mHACqBnO,KAAKm+zB,QAD1B,wBACQtysB,EADR,OAEQm7I,EAFR,OAGqBn7I,EAHrB,WAGE,6BAA+B,QAC7Bm7I,OAAWptL,EADkB,KAHjC,8BAME55E,KAAA,iCANwC,GAOxCA,KAAA,gBAPwC,SAA1C,gD,oFAaA0z0B,WAAuC,IAAvBC,EAAuB,wDACrC,GAAK3z0B,KAAL,WAGA,IAAM4z0B,EAAkB5z0B,KAAK6z0B,UAJQ,WAKrC7z0B,KAAA,0BALqC,GAQrC4z0B,QARqC,EASrCA,SATqC,EAWrC,GAEE5z0B,KAAA,UAFiB,SAInBA,KAAA,UAfqC,Q,mBAkBvC2qE,WAIQ,wEAJRA,GAIQ,IAHNmpwB,qBAGM,aAFNC,2BAEM,aADNC,oBACM,SACNh00B,KAAA,gBAAqB,CAAE+z0B,oBAAF,EAAuBC,iBAC5Ch00B,KAAA,eAAsBmx0B,kBAFhB,QAIN,IAAMz4vB,EAAM14E,KAJN,IAKN04E,cAAkB37E,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,OALZ,KAMN27E,eAAmB37E,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,QANb,KAaN,IALA,IAAMmxa,EAAax1V,EAAnB,WACEu7vB,EAAiBH,GAAiB9z0B,KAAlB,WADlB,KAEEk00B,EACGH,cAAuB/z0B,KAAvB+z0B,oCAAuB,EAAxB,MAHJ,KAIEI,EAAgBH,cAAgBh00B,KAAhBg00B,6BAAgB,EAAjB,MAZX,KAaGhx0B,EAAIkra,EAAWA,OAAxB,EAAoClra,GAApC,EAA4CA,IAAK,CAC/C,IAAMoE,EAAO8ma,EADkC,GAE/C,UACE,KADF,EAEE,KAFF,EAGE,OAHF,SAMA9ma,EAR+C,SAUjDsxE,kBAvBM,eAyBN,GAGE14E,KAAA,gBAHuB,OAKzB,GAGEA,KAAA,SAHgB,OAMlB,IACMA,KAAJ,SACEA,KAAA,0BAA+BA,KADhB,QAIfA,KAAA,aAJe,EAKfA,KAAA,cALe,SAMRA,KANQ,QAQjBA,KATkB,mBAWhBA,KAAJ,MACEA,KAAA,0BAA+BA,KADnB,YAELA,KAFK,KAKdA,KAAA,eAAsBgmC,SAASA,cApDzB,OAqDNhmC,KAAA,yBArDM,yBAsDFA,KAAJ,eACEA,KAAA,0BADsB,GAGxBA,KAAA,mCAzDM,OA0DNA,KAAA,0BAA8BywO,YAAO,MACnC,qEADmC,MAGrC/3J,cAAgB14E,KA7DV,kB,oBAgERsQ,YAA4E,QAAnEu7S,aAAmE,MAArE,EAAqE,MAAxDrtC,gBAAwD,MAArE,KAAqE,MAAvCguQ,oCAAuC,MAA5El8gB,KAA4E,EAC1E,cAGE,EAAO5M,UAAP,IACA,OACAskB,cADA,0FAKAhoB,KAAA,OAAY,CACV6rT,MAAOnoT,UADG,GAEV86Q,SAAU96Q,UAFA,GAGV8ohB,6BAA8B9ohB,UAHpB,KAQd1D,KAAA,MAAa6rT,GAAS7rT,KAlBoD,MAmB1E,kBAAWw+Q,IACTx+Q,KAAA,SADgC,GAG9BwshB,aAAJ,UACExshB,KAAA,8BADmD,GAIrD,IAAMuz0B,GAAiBvz0B,KAAA,SAAgBA,KAAjB,eA1BoD,IA2BpEyqiB,EAAgBzqiB,KAAK6rT,MAAQi6K,gBA3BuC,iBAiC1E,GALA9le,KAAA,SAAgBA,KAAKugS,SAAS/lP,MAAM,CAClCqxQ,MADkC,EAElCrtC,SAFkC,IAKhCx+Q,KAAJ,cAAwB,CACtB,IAAM,EAAYgmC,SADI,gBACtB,MACAs1E,8BAAmCt7G,KAFb,OAGtBs7G,wCAHsB,GAMxB,GAAIt7G,KAAJ,IAAc,OACZA,KAAA,aAAkB,CAChBgtB,OAAQhtB,KADQ,IAEhBo00B,uBAFgB,EAGhBC,gBAHgB,SAMlBr00B,KAAA,iCAAuC,CACrCitB,OADqC,KAErC26f,WAAY5nhB,KAFyB,GAGrCs00B,cAHqC,EAIrC35e,UAAW+3P,YAJ0B,MAKrCvklB,MAAOnO,KAL8B,eAUzC,IAAIu00B,GAxDsE,EAyD1E,GAAIv00B,KAAKope,QAAUppe,KAAKqu0B,gBAAxB,EAA6C,CAC3C,IAAMmG,EAAcx00B,KADuB,aAGvCjD,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,OAAkCy30B,EAAnC,GAAD,IACIz30B,KAAKA,MAAMiD,KAAKugS,SAAhBxjS,QAAmCy30B,EAApC,GADH,GAEAx00B,KAHF,kBAKEu00B,GADA,GAKJ,GAAIv00B,KAAJ,OAAiB,CACf,GACEA,KAAKou0B,gBACJpu0B,KAAKy00B,sBAFR,EAGE,OACAz00B,KAAA,aAAkB,CAChBgtB,OAAQhtB,KADQ,OAEhBo00B,uBAFgB,EAGhBC,gBAHgB,SAMlBr00B,KAAA,iCAAuC,CACrCitB,OADqC,KAErC26f,WAAY5nhB,KAFyB,GAGrCs00B,cAHqC,EAIrC35e,UAAW+3P,YAJ0B,MAKrCvklB,MAAOnO,KAL8B,eASpCA,KAAD,WAAoBA,KAAKope,OAA7B,SACEppe,KAAA,UAAiBA,KAAKope,OADoB,WAE1Cppe,KAAA,yBAF0C,YAK1CA,KAAJ,WACEA,KAAA,aAAkB,CAAEgtB,OAAQhtB,KAAK6z0B,UADf,aAGpB7z0B,KAAA,MAAW,CACT8z0B,eADS,EAETC,qBAFS,EAGTC,cAHS,M,6BAWbU,WAA4E,IAmBd,EAnBc,yDAA5EA,GAA4E,IAA1DX,2BAA0D,aAA7BC,oBAA6B,SACtEh00B,KAAJ,YACEA,KAAA,UADkB,SAElBA,KAAA,UAFkB,MAIpBA,KAAA,OAL0E,KAOtEA,KAAJ,YACEA,KAAA,UADkB,SAElBA,KAAA,UAFkB,OAKlBA,KAAKwz0B,iBACHO,GAAwB/z0B,KAAKwz0B,gBAFjC,MAIExz0B,KAAA,gBADA,SAEAA,KAAA,gBAFA,KAGAA,KAAA,qBAHA,OAKEA,KAAKyz0B,UAAcO,GAAiBh00B,KAAKyz0B,SAA7C,MACEzz0B,KAAA,SAD0D,SAE1DA,KAAA,SAF0D,KAG1D,UAAAA,KAAA,gCAH0D,WAKxDA,KAAJ,uBACEA,KAAA,kCAAwCA,KADX,sBAE7BA,KAAA,qBAF6B,Q,0BAMjCs00B,YAIG,IAJU,EAIV,EAJU,OAIV,IAFDF,6BAEC,aADDC,sBACC,SAEK/4vB,EAAQt7E,KAAKugS,SAFlB,MAGKhvK,EAASvxH,KAAKugS,SAHnB,OAIK7nN,EAAM14E,KAJX,IAKDgtB,cACEA,EAAOA,WAAWA,MAAMA,MACxB0rD,EAAIA,MAAMA,MACR37E,KAAKA,MAAMA,GARd,KASDiwB,eACEA,EAAOA,WAAWA,MAAMA,OACxB0rD,EAAIA,MAAMA,OACR37E,KAAKA,MAAMA,GAZd,KAcD,IAAM430B,EACJ300B,KAAKugS,SAAS/hB,SAAWx+Q,KAAK400B,mBAAmB7w0B,IAAIipB,GAftD,SAgBK6nzB,EAAc930B,KAAKA,IAhBxB,GAiBGg0V,EAAJ,EACEC,EAlBD,EA0BD,GAPoB6jf,KAAhBA,GAAJ,MAA0BA,IAExB9jf,EAASx/N,EAFoC,EAG7Cy/N,EAAS11Q,EAHoC,GAK/CtuD,0EAxBC,EAwBDA,KAEIhtB,KAAJ,UAAoB,CAKlB,IAAM800B,EAAoB900B,KAAK+00B,UALb,SAMZC,EACJh10B,KAAKugS,SAAS/hB,SAAWs2jB,EAPT,SAQZG,EAAkBl40B,KAAKA,IARX,GASd8uT,EAAQvwO,EAAQw5vB,EATF,MAUMG,KAApBA,GAAJ,MAA8BA,IAC5BpphB,EAAQvwO,EAAQw5vB,EADqC,QAGvD,IACA,EAdkB,EAaZxW,EAAet+zB,KAAK+00B,UAbR,aAelB,UACE,OACEG,EAASC,EADX,EADF,MAIE,QACED,EADF,EAEEC,EAAS,IAAM7W,EAAaA,MAF9B,OAJF,MAQE,SACE4W,EAAS,IAAM5W,EAAaA,MAD9B,MAEE6W,EAAS,IAAM7W,EAAaA,MAF9B,OARF,MAYE,SACE4W,EAAS,IAAM5W,EAAaA,MAD9B,MAEE6W,EAFF,EAZF,MAgBE,QACEntzB,cADF,uBAKFs2yB,kBACE,uFArCgB,EAoClBA,KAIAA,wBAxCkB,QA2ChB8V,GAAyBp00B,KAA7B,iBACEA,KADiD,yBAG/Cq00B,GAAkBr00B,KAAtB,UACEA,KADmC,oB,iBAKvC,WACE,OAAOA,KAAKugS,SADF,Q,kBAIZ,WACE,OAAOvgS,KAAKugS,SADD,S,0BAIb60iB,cACE,OAAOp10B,KAAKugS,SAAS80iB,kBAAkBx9zB,EADtB,K,sCAOnBq7zB,WAA8C,MAArBoC,EAAqB,wDAC5C,UAAAt10B,KAAA,8DAD4C,K,kBAI9Cu10B,WAAO,eACDv10B,KAAKkx0B,iBAAmBC,kBAA5B,UACEnpzB,cADmD,uCAEnDhoB,KAFmD,SAIrD,IAAM,EALD,KAKL,IAAM,EALD,KAKL,QAEA,MAOE,OANAA,KAAA,eAAsBmx0B,kBADV,SAGRnx0B,KAAJ,iBACEA,KAAA,eADuB,gBAEhBA,KAFgB,gBAIlBi/C,QAAQA,OAAO,IAAIr3C,MAPd,0BAUd5H,KAAA,eAAsBmx0B,kBAjBjB,QAqBL,IAAMqE,EAAgBxvyB,SAASA,cArB1B,OAsBLwvyB,cAA4B98vB,EAAIA,MAtB3B,MAuBL88vB,eAA6B98vB,EAAIA,MAvB5B,OAwBL88vB,gBAxBK,iBA0BL,UAAIx10B,KAAJ,8BAAI,EAAJ,IAEE04E,iBAAgC14E,KAAKwz0B,gBAFR,KAI7B96vB,cADK,GAIP,IAAIq8vB,EAjCC,KAkCL,GAAI/00B,KAAKiu0B,gBAAkBjC,gBAAvB,SAAgDhs0B,KAApD,iBAA2E,OACnEs+zB,EAAet4xB,SAASA,cAD2C,OAEzEs4xB,YAFyE,YAGzEA,cAA2BkX,EAAcA,MAHgC,MAIzElX,eAA4BkX,EAAcA,MAJ+B,OAKzE,UAAIx10B,KAAJ,8BAAI,EAAJ,IAEE04E,iBAA+B14E,KAAKwz0B,gBAFP,KAI7B96vB,cADK,GAIPq8vB,EAAY/00B,KAAK2t0B,iBAAiBtP,uBAAuB,EAEvDr+zB,KAAKihC,GAFK,EAGVjhC,KAHU,SAIVA,KAAKiu0B,gBAAkBjC,gBAJb,eAKVhs0B,KALU,SAMVA,KAlBuE,iBAqB3EA,KAAA,UAvDK,EA0DH,EAAAA,KAAA,KAAyBg0e,iBAAzB,SACAh0e,KAFF,yBAIEA,KAAA,uBAAAA,KAAA,qBAA8B,IAD9B,KAEAA,KAAA,kBAAAA,KAAA,gBACEA,KAAK4t0B,uBAAuB9P,6BAA6B,EAAzD,OAIE99zB,KAJF,mBAKE,EAAAA,KAAA,KAAyBg0e,iBAL3B,aAMEh0e,KANF,yBAW4BA,KAd9B,wBAkBF,UAAIA,KAAJ,uBAAI,EAAJ,KAEE04E,cAAgB14E,KAAKyz0B,SAFC,KAKxB,IAAIgC,EAnFC,KAoFDz10B,KAAJ,iBACEy10B,EAAyBjqC,YACvB,IAAK,mCAAL,GAAkD,OAChD,iBAAsB2lC,kBAD0B,YAEhD,SAAc,WACZ,iBAAsBA,kBADJ,QAElB3lC,MAIJA,MAIJ,IAAMkqC,qCAAkB,yGAAOvn0B,EAAP,oCAIlBwn0B,IAAc,EAAlB,YACE,YADgC,QAI9Bxn0B,aAAJ,EARsB,oDASpB,eADgD,KAR5B,6BAYtB,eAZ8C,EAc9C,iBAAsBgj0B,kBAdwB,SAgB1C,EAAJ,iBACE,iBADuB,gBAEhB,EAFgB,gBAIzB,mBApB8C,GAsB9C,mCAAuC,CACrClkzB,OADqC,EAErC26f,WAAY,EAFyB,GAGrC0sT,cAHqC,EAIrC35e,UAAW+3P,YAJ0B,MAKrCvklB,MAAO,EAL8B,gBAtBjB,uEAAlBun0B,qDAmCAC,EACJ310B,KAAK6oa,WAAaoja,eAAlB,IACIjs0B,KAAK410B,WADT,GAEI510B,KAAK610B,cAxIN,GAyILF,mBAzIK,EA0IL310B,KAAA,UA1IK,EA4IL,IAAM810B,EAAgBH,EAAU3zrB,QAAQzrE,MACtC,WACE,OAAOm/vB,EAAgB,MAAMn/vB,MAAK,WAChC,KAAe,CACb,IAAM64c,EAAiB+uS,EAAQ9uS,kBAAkB,CAC/CZ,qBAD+C,EAE/CI,sBAF+C,IAIjDkmT,uBALa,GAMbA,EANa,SASX,EAAJ,iBACE,EADwB,+BAK9B,SAAUxptB,GACR,OAAOmqtB,EADS,MAsDpB,OAjDI110B,KAAJ,kBACOA,KAAL,WACEA,KAAA,SAAgBA,KAAK6t0B,gBAAgBrP,sBAAsB,EAA3C,EADE,OAOpBx+zB,KARwB,mBAatBA,KAAKmu0B,wBAA0Bnu0B,KAA/B,WAAiDA,KAArD,SAGEA,KAAA,qBAA4BmnI,YACtBA,EAAMA,aAAe,EAAzB,KAGA,oCAAwC,EAJL,sBAKnC,uBALmC,KAO9B,EAAL,QAGA,gCAAkC4usB,YAChC,MAGK,EAAL,QAGA,IAAMC,EAAU,yBAPwB,GAQxCA,gBARwC,cASxC,qBATwC,SAY5Ch20B,KAAA,iCAAuCA,KAzByB,sBA0BhEA,KAAA,gBACEA,KAAKmu0B,uBAAuB/P,6BA3BkC,IA8BlE1lvB,8BA7MK,GA+ML14E,KAAA,+BAAqC,CACnCitB,OADmC,KAEnC26f,WAAY5nhB,KAFuB,KA/MhC,I,2BAsNP610B,YACE,IAAMI,GADqB,+BAErBri0B,EAAS,CACbouI,QAASi0rB,EADI,QAEbC,iBAFa,YAGX1qC,KAEF3/wB,OALa,WAMXiigB,EADO,WAKLvtP,EAAWvgS,KAZU,SAarBope,EAASpjc,SAASA,cAbG,UAiB3Bojc,UAjB2B,EAkB3B,IAAI+sW,GAlBuB,EAmBrBC,EAAa,WACjB,IACEhtW,UADkB,EAElB+sW,GAFkB,IAMtBX,cA1B2B,GA2B3Bx10B,KAAA,OA3B2B,EAiCzBope,aAjCyB,EAoC3B,IAAM3nN,EAAM2nN,EAAOA,WAAWA,KAAM,CAAEspB,OApCX,IAqCrB8hV,GAAc6B,oBArCO,GAwC3B,GAFAr20B,KAAA,YAtC2B,EAwCvBA,KAAJ,eAAyB,CACvB,IAAMs20B,EAAqB/1iB,EAASA,MAAM,CACxCsrB,MAAOi6K,gBAFc,mBAMvB0uW,MAAkB8B,EAAmBA,MAAQ/1iB,EANtB,MAOvBi0iB,MAAkB8B,EAAmBA,OAAS/1iB,EAPvB,OAQvBi0iB,UARuB,EAWzB,GAAIx00B,KAAKqu0B,gBAAT,EAA8B,CAC5B,IAAMkI,EAAmBh2iB,EAASA,MAAQA,EADd,OAEtBi2iB,EAAWz50B,KAAKA,KAAKiD,KAAKqu0B,gBAFJ,GAGxBmG,EAAYA,GAAKA,GAAYA,EAAYA,GAA7C,GACEA,KAD0D,EAE1DA,KAF0D,EAG1DA,UAH0D,EAI1Dx00B,KAAA,sBAJ0D,GAM1DA,KAAA,sBADK,EAKT,IAAMy20B,GAAMC,yBAAoBlC,EAhEL,IAiErBmC,GAAMD,yBAAoBlC,EAjEL,IAkE3BprW,SAAewtW,mBAAcr2iB,EAASA,MAAQi0iB,EAA/BoC,GAA+CH,EAlEnC,IAmE3BrtW,UAAgBwtW,mBAAcr2iB,EAASA,OAASi0iB,EAAhCoC,GAAgDD,EAnErC,IAoE3BvtW,eAAqBwtW,mBAAcr2iB,EAAdq2iB,MAA8BH,EAA9BG,IApEM,KAqE3BxtW,gBAAsBwtW,mBAAcr2iB,EAAdq2iB,OAA+BD,EAA/BC,IArEK,KAwE3B520B,KAAA,yBAxE2B,GA2E3B,IAGMuntB,EAAgB,CACpB17L,cADoB,EAEpBxvZ,UALiBm4sB,EAAD,OAEd,CAACA,EAAD,OAAuBA,EAAvB,KAFJ,GAAkB,KAMhBj0iB,SAAUvgS,KAHU,SAIpBgshB,iBAJoB,QAKpBQ,6BAA8BxshB,KALV,8BAMpB0shB,oBAAqB1shB,KAND,sBAQhB8thB,EAAa9thB,KAAKm+zB,QAAQ/7rB,OAtFL,GA0G3B,OAnBA0rZ,aAAwB,SAAU09Q,GAChC4qC,IACIxi0B,EAAJ,iBACEA,mBAD2B,GAG3B43xB,KAIJ19Q,gBACE,WACEsoT,IACAH,EAFU,aAIZ,SAAU9n0B,GACRio0B,IACAH,SAFe,MArGQ,I,wBA6G7BL,YAAoB,WAcdhskB,GAdc,EAeZitkB,EAAqB,WACzB,KACE,MAAM,IAAI,EAAJ,gEACyB,EADzB,IADO,QAQX1Y,EAAUn+zB,KAxBE,QAyBZs20B,EAAqBt20B,KAAKugS,SAAS/lP,MAAM,CAC7CqxQ,MAAOi6K,gBA1BS,mBAmDlB,MAAO,CACL9jV,QAxBcm8qB,EAAA,gBACG,CACfnyS,iBAFY,KAEZA,KAFY,MAIR81C,YAOJ,OANA+0Q,IACe,IAAI,EAAJ,YACb1Y,EADa,WAEbA,EAFa,KAGWkV,sBALZ,wBAOAprH,OAAOnmJ,EAAQw0Q,GAAoB//vB,MAAKy3C,YACpD6otB,IACA,MAF2D,EAG3D,2BAH2D,GAK3D7otB,cAAkB67D,EAAQA,MALiC,MAM3D77D,eAAmB67D,EAAQA,MANgC,OAO3D,iBAAsBsnpB,kBAPqC,SAQ3DtnpB,cAR2D,SAc/DqspB,iBAFK,YAGH1qC,KAEF3/wB,OALK,WAMH+9O,GADO,M,0BASbktkB,YACE920B,KAAA,UAAkC,kBAAV8gC,EAAqBA,EAD3B,KAGlB,OAAI9gC,KAAK6s0B,UACP7s0B,KAAA,mCAAyCA,KADd,WAG3BA,KAAA,oBADK,sB,gCA31BX,G,shBC7EA,IAAMqz0B,EAAsBj10B,OAAOA,OAfnC,M,wBAiBE,IAAM+yM,EACkB,qBAAdH,WAA6BA,UAArC,WAF6D,GAGzDa,EACkB,qBAAdb,WAA6BA,UAArC,UAJ6D,GAKzDyyb,EACkB,qBAAdzyb,WAA6BA,UAArC,gBAN6D,EAQzD+loB,EAAY,UAAUh8xB,KARmC,GASzDi8xB,EACJ,4BAA4Bj8xB,KAAKo2J,IACnBU,aAAbA,GAA2B4xb,EAXiC,EAY3C,QAAQ1olB,KAZmC,KAoB3Ds4xB,0BADe,IAQb2D,GAAJ,KACE3D,kBADsB,SAM5B,IAAM4D,EAAa,CACjBC,OADiB,EAEjBC,IAFiB,EAGjBC,OAHiB,EAIjBC,WAJiB,K,eAYnB,IAAMxgyB,EAAiB,CACrBm1e,eAAgB,CAEdtwhB,MAFc,EAGd0lZ,KAAM61b,EAAWA,OAASA,EAHZ,YAKhBK,iBAAkB,CAEhB570B,MAFgB,EAGhB0lZ,KAAM61b,EAAWA,OAASA,EAHV,YAKlBM,WAAY,CAEV770B,MAFU,qCAGV0lZ,KAAM61b,EAHI,QAKZO,iBAAkB,CAEhB970B,MAFgB,GAGhB0lZ,KAAM61b,EAAWA,OAASA,EAHV,YAKlBQ,eAAgB,CAEd/70B,OAFc,EAGd0lZ,KAAM61b,EAHQ,QAKhBS,kBAAmB,CAEjBh80B,OAFiB,EAGjB0lZ,KAAM61b,EAAWA,OAASA,EAHT,YAKnBU,kBAAmB,CAEjBj80B,OAFiB,EAGjB0lZ,KAAM61b,EAAWA,OAASA,EAHT,YAKnBW,sBAAuB,CAErBl80B,OAFqB,EAGrB0lZ,KAAM61b,EAAWA,OAASA,EAHL,YAKvB9xR,gBAAiB,CAEfzpjB,OAFe,EAGf0lZ,KAAM61b,EAAWA,OAASA,EAHX,YAKjB91H,gBAAiB,CAEfzltB,MAFe,+BAGf0lZ,KAAM61b,EAHS,QAKjB/1H,mBAAoB,CAElBxltB,MAFkB,EAGlB0lZ,KAAM61b,EAAWA,OAASA,EAHR,YAKpBY,iBAAkB,CAEhBn80B,OAFgB,EAGhB0lZ,KAAM61b,EAAWA,OAASA,EAHV,YAKlB1U,sBAAuB,CAErB7m0B,OAFqB,EAGrB0lZ,KAAM61b,EAAWA,OAASA,EAHL,YAKvBjyR,mBAAoB,CAElBtpjB,MAFkB,YAGlB0lZ,KAAM61b,EAHY,QAKpB5I,gBAAiB,CAEf3y0B,MAFe,SAGfo80B,cAAezE,EAHA,gBAIfjyb,KAAM61b,EAJS,QAMjBc,cAAe,CAEbr80B,OAFa,EAGb0lZ,KAAM61b,EAAWA,OAASA,EAHb,YAKfe,gBAAiB,CAEft80B,MAFe,IAGf0lZ,KAAM61b,EAHS,QAKjBpua,SAAU,CAERnta,MAFQ,SAGR0lZ,KAAM61b,EAHE,QAKVgB,kBAAmB,CAEjBv80B,OAFiB,EAGjB0lZ,KAAM61b,EAAWA,OAASA,EAHT,YAKnBiB,iBAAkB,CAEhBx80B,OAFgB,EAGhB0lZ,KAAM61b,EAAWA,OAASA,EAHV,YAKlBkB,iBAAkB,CAEhBz80B,OAFgB,EAGhB0lZ,KAAM61b,EAAWA,OAASA,EAHV,YAKlBhJ,cAAe,CAEbvy0B,MAFa,EAGb0lZ,KAAM61b,EAAWA,OAASA,EAHb,YAKf7I,eAAgB,CAEd1y0B,OAFc,EAGd0lZ,KAAM61b,EAAWA,OAASA,EAHZ,YAKhBmB,eAAgB,CAEd180B,MAFc,EAGd0lZ,KAAM61b,EAAWA,OAASA,EAHZ,YAKhBoB,WAAY,CAEV380B,MAFU,EAGV0lZ,KAAM61b,EAAWA,OAASA,EAHhB,YAMZ1hT,WAAY,CAEV75hB,OAFU,EAGV0lZ,KAAM61b,EAHI,KAKZ9wT,QAAS,CAEPzqhB,MAFO,gBAMP0lZ,KAAM61b,EANC,KAQT7yT,iBAAkB,CAEhB1ohB,OAFgB,EAGhB0lZ,KAAM61b,EAAWA,IAAMA,EAHP,YAKlBjzT,gBAAiB,CAEftohB,OAFe,EAGf0lZ,KAAM61b,EAAWA,IAAMA,EAHR,YAKjB/yT,aAAc,CAEZxohB,OAFY,EAGZ0lZ,KAAM61b,EAAWA,IAAMA,EAHX,YAKd9yT,cAAe,CAEbzohB,OAFa,EAGb0lZ,KAAM61b,EAAWA,IAAMA,EAHV,YAKfpzT,WAAY,CAEVnohB,MAFU,GAGV0lZ,KAAM61b,EAHI,KAKZrzT,UAAW,CAETlohB,OAFS,EAGT0lZ,KAAM61b,EAAWA,IAAMA,EAHd,YAKXvzT,oBAAqB,CAEnBhohB,OAFmB,EAGnB0lZ,KAAM61b,EAHa,KAKrBtvV,gBAAiB,CAEfjsf,OAFe,EAGf0lZ,KAAM61b,EAHS,KAKjBnzT,aAAc,CAEZpohB,OAFY,EAGZ0lZ,KAAM61b,EAHM,KAKdtzT,OAAQ,CAENjohB,OAFM,EAGN0lZ,KAAM61b,EAHA,KAKR7wT,oBAAqB,CAEnB1qhB,MAFmB,yBAMnB0lZ,KAAM61b,EANa,KAQrB3gW,UAAW,CAET56e,MAFS,EAGT0lZ,KAAM61b,EAHG,KAMX1yT,WAAY,CAEV7ohB,MAFU,KAGV0lZ,KAAM61b,EAHI,QAKZvjT,UAAW,CAETh4hB,MAFS,yBAMT0lZ,KAAM61b,EANG,SAaXpgyB,qBAAoC,CAElCn7C,OAFkC,EAGlC0lZ,KAAM61b,EAH4B,QAKpCpgyB,SAAwB,CAEtBn7C,MAA4B,qBAAds1M,UAA4BA,UAAnC,SAFe,QAGtBowM,KAAM61b,EAHgB,QAKxBpgyB,mBAAkC,CAEhCn7C,MAFgC,0BAMhC0lZ,KAAM61b,EAN0B,QASlCpgyB,iBAAgCogyB,EApBhC,WAkCF,IAAMzpD,EAAcpvxB,OAAOA,OA7T3B,MA+TA,aACEE,aACE,M,4FADY,SACN,IAAIsJ,MADE,iC,yCAId,YACE,IAAM0w0B,EAAa9qD,EADJ,GAEf,YAAI8qD,EACF,OAD4B,EAG9B,IACiC,EAD3Br+P,EAAgBpjiB,EALP,GAMf,gBAAIojiB,EACF,UAAOA,EAAP,6BAAsCA,EADP,WAAjC,I,oBAMF,WAA2B,IAAb74L,EAAa,uDAA3B,KACQp1W,EAAU5tC,OAAOA,OADE,MAEzB,eAAmC,OAC3B67kB,EAAgBpjiB,EADW,GAEjC,KAAU,CACR,QAAKuqW,EAAO64L,EAAR,MAAmC,SAGvC,GAAI74L,IAAS61b,EAAb,WAAoC,CAClC,IAAMv70B,EAAQu+kB,EAAd,MACE7uN,EAAYA,EAFoB,GAIlC,GACgBA,YAAdA,cACAA,GACeA,WAAdA,GAA0BzpX,OAAOA,UAHpC,GAIE,CACAqqC,KADA,WAIF,MAAM,IAAIpkC,MAAM,gCAAV,OAZ4B,KAetC,IAAM0w0B,EAAa9qD,EArBc,GAsBjCxhvB,UACiBssyB,IAAfA,cAEIr+P,EAFJq+P,6BAEmCr+P,EAzBJ,MA2BnC,OA7ByB,I,iBAgC3B,cACEuzM,KADsB,I,oBAIxB,YACE,eACEA,KAAoBxhvB,EADM,K,oBAK9B,mBACSwhvB,EADW,K,6BAOpB,WACE,OAAOpvxB,OAAOA,KAAKA,GAAaA,OADT,M,sCAlE3B,G,4GC/TA,kB,sKAuBA,IAKA,aACEE,c,4FAAc,SACZ0B,KAAA,UADY,KAEZA,KAAA,mBAFY,KAGZA,KAAA,OAHY,KAIZA,KAAA,oBAJY,KAMZA,KAAA,YANY,KAOZA,KAAA,UAPY,EAQZA,KAAA,wBARY,E,+CAcdwktB,YACExktB,KAAA,UADmB,I,gCAOrBu40B,YACEv40B,KAAA,mBADqC,I,+BAQvCw40B,YACE,OAAOx40B,KAAKy40B,sBAAwBn5oB,EADd,c,uBAOxBo5oB,WACE,QAAS140B,KADC,Y,mCAOZ240B,YAA6C,MACvC340B,KAAJ,cACEumI,aAAavmI,KADO,aAEpBA,KAAA,YAFoB,MAMlBA,KAAKqhtB,UAAUgwH,eAAnB,IAKErx0B,KAAK440B,wBAAL,UACA540B,KADA,iCACA,EAFF,kBAOIA,KAAJ,UAKIA,KAAJ,SACEA,KAAA,YAAmB64C,WAAW74C,KAAK640B,OAAO/2zB,KAAvB+2B,MAhGzB,Q,gCA0GE44xB,gBAAyE,IAAxBD,EAAwB,wDAUjEsH,EAAe95iB,EAArB,MACE+5iB,EAAaD,EAXwD,OAavE,OAAIC,EACF,OADoB,KAGtB,IAAK,IAAI/10B,EAAT,EAAgBA,EAAhB,EAAgCA,IAAK,CACnC,IAAMs8L,EAAOw5oB,EAAaA,GADS,KAEnC,IAAK940B,KAAKg50B,eAAV,GACE,OAD8B,EAIlC,IAAM1G,EAAUtziB,EAAQA,MAAxB,GACEuziB,EAASvziB,EAAQA,KAvBoD,GA2BvE,GAAIuziB,EAASA,EAAUA,EAAvB,EAEE,IADA,IAAMY,EAAan0iB,EADkB,IAE5Bh8R,EAAJ,EAAWkB,EAAKqu0B,EAArB,EAAuCvv0B,EAAvC,EAA+CA,IAAK,CAClD,IAAMi20B,EAASC,EAAe5G,EAAf4G,EAA6B3G,EADM,EAElD,IAAIY,EAAWA,IAAf,IAGA,IAAMgG,EAAWtU,EAAMoU,EAL2B,GAMlD,IAAKj50B,KAAKg50B,eAAV,GACE,OADkC,GAQxC,IAAII,EAAiBF,EAAeA,EAAS5G,EA3C0B,EA4CnE+G,EAAgBxU,EA5CmD,GA8CvE,OAAIwU,IAAkBr50B,KAAKg50B,eAA3B,IAGA,IAEEK,EAAgBxU,EADhBuU,GAAkBF,EAAeA,GADf,MAIIl50B,KAAKg50B,eAA3B,GAPwD,EA9Ca,O,4BAiEzEA,YACE,OAAO15oB,EAAKA,iBAAmB6xoB,kBADZ,W,wBAWrBmI,YAAiB,WACf,OAAQh6oB,EAAR,gBACE,KAAK6xoB,kBAAL,SACE,OAFJ,EAGE,KAAKA,kBAAL,OACEnx0B,KAAA,oBAA2Bs/L,EAD7B,YAEEA,EAFF,SAHF,MAOE,KAAK6xoB,kBAAL,QACEnx0B,KAAA,oBAA2Bs/L,EAD7B,YAPF,MAUE,KAAK6xoB,kBAAL,QACEnx0B,KAAA,oBAA2Bs/L,EAD7B,YAEEA,kBAEW,WACP,EADa,2BAFjBA,OAKS/zE,YACDA,aAAJ,+BAGAvjG,qCAJe,EAIfA,SAIR,OA1Be,K,gCA1JnB,G,yRCEA,aAIE1pB,cAAqD,IAAzC,EAAyC,EAAzC,iBAAyC,EAAzC,SAAZA,EAAqD,EAArDA,W,4FAAqD,SACnD0B,KAAA,eADmD,EAEnDA,KAAA,QAFmD,GAGnDA,KAAA,SAHmD,EAInDA,KAAA,QAJmD,EAKnDA,KAAA,0BALmD,KAMnDA,KAAA,SANmD,KAOnDA,KAAA,oBAPmD,KAQnDA,KAAA,SARmD,E,qDAoBrDu50B,cACEv50B,KAAA,SAD0B,EAE1BA,KAAA,oBAF0B,I,oBAS5B6uuB,WAAS,WACP,IAAK7uuB,KAAD,WAAmBA,KAAvB,oBACE,MAAM,IAAI4H,MADqC,4CAGjD,GAAI5H,KAAJ,QACE,MAAM,IAAI4H,MADM,uCAGlB5H,KAAA,SAPO,EAQFA,KAAL,4BACEA,KAAA,0BAAiCoxH,YAC3BA,EAAIA,YAAc,EAAlBA,UAAJ,IAAsCA,EAAIA,WACxC,EAD0D,kBAI9DpxH,KAAA,sCAEEA,KARiC,4BAWrCA,KAnBO,mB,qBAsBTw50B,WACOx50B,KAAL,UAGAA,KAAA,SAJQ,EAKJA,KAAJ,4BACEA,KAAA,uCAEEA,KAHgC,2BAKlCA,KAAA,0BALkC,S,6BAStCy50B,cAEE,MACE,MADY,GAUd,IAPA,IAAM,EALgC,KAKtC,oBAEIz20B,EAAJ,EACE020B,EARoC,EAShCl90B,EAAMs9jB,EAAoBA,OATM,EAUhClmjB,EAVgC,GAY7BxB,EAAJ,EAAWsiO,EAAK98C,EAArB,OAAqCxlL,EAArC,EAA6CA,IAAK,CAKhD,IAHA,IAAIun0B,EAAW/hpB,EAFiC,GAKzC50L,IAAMA,GAAO220B,GAAYD,EAAS5/Q,EAAoBA,GAA7D,QACE4/Q,GAAU5/Q,EAAoBA,GADwC,OAEtE92jB,IAGEA,IAAM82jB,EAAV,QACE9xiB,cADoC,qCAItC,IAAMumB,EAAQ,CACZhyC,MAAO,CACLq90B,OADK,EAEL9r0B,OAAQ6r0B,EAFH,IAWT,IAJAA,GAAYE,EAtBoC,GA0BzC720B,IAAMA,GAAO220B,EAAWD,EAAS5/Q,EAAoBA,GAA5D,QACE4/Q,GAAU5/Q,EAAoBA,GADuC,OAErE92jB,IAGFurC,MAAY,CACVqryB,OADU,EAEV9r0B,OAAQ6r0B,EAFE,GAIZ/l0B,OAnCgD,GAqClD,OAjDsC,I,4BAoDxCkm0B,YAEE,OAAIlipB,EAAQA,OAAZ,CAGA,IAAM,EALgB,KAKtB,eAAM,EALgB,KAKtB,QACM,EANgB,KAMtB,oBAAM,EANgB,KAMtB,SAEMmipB,EAAiBC,IAAYrI,EAAeA,SAR5B,QAShBsI,EAAmBtI,EAAeA,SATlB,SAWlBuI,EAXkB,KAYhBC,EAAW,CACfP,QADe,EAEf9r0B,YAFe,GAoCbg2J,EAAJ,EACEC,EAAKD,EAjDe,EAkDtB,GAxCqB6tqB,EAAeA,MAVd,aAmDpB7tqB,EADgB,EAEhBC,EAAK6zB,EAFW,YAGX,MAAqB,OAK5B,IAAK,IAAI50L,EAAT,EAAiBA,EAAjB,EAAyBA,IAAK,CAC5B,IAAMurC,EAAQqpJ,EADc,GAEtBr7L,EAAQgyC,EAFc,MAGtB/xC,EAAM+xC,EAHgB,IAItB03E,EAAa8ztB,GAAkB/20B,IAJT,EAKtBo30B,EAAkBn0tB,EAAaA,YALT,GAMxBo0tB,EANwB,EAoB5B,GAXKH,GAAW390B,EAAMA,SAAW290B,EAAjC,OAQEI,EAAgBJ,EAAhBI,OAAgCJ,EAAhCI,OAAgD/90B,EAD3C,SALL,OAAI290B,GACFI,EAAgBJ,EAAhBI,OAAgCJ,EAAhCI,OAAgDH,EAD5B,QAItBv4V,EAN+C,IAW7Crlf,EAAMA,SAAWC,EAArB,OACE690B,EAAeC,EACb/90B,EADa+90B,OAEb/90B,EAFa+90B,OAGb990B,EAHa890B,OAIb,YAL6B,OAO1B,CACLD,EAAeC,EACb/90B,EADa+90B,OAEb/90B,EAFa+90B,OAGbH,EAHaG,OAIb,kBALG,GAOL,IAAK,IAAIC,EAAKh+0B,EAAMA,OAAf,EAA2Bi+0B,EAAKh+0B,EAArC,OAAiD+90B,EAAjD,EAA0DA,IACxDjhR,eAAyB,mBADqC,EAGhE13E,IAAe,gBAVV,GAYPs4V,EAvC4B,EAyC5B,GAEEvI,sBAAmC,CACjC7poB,QAASwxX,EAAS/8jB,EADe,QAEjC890B,aAFiC,EAGjC7wT,UAHiC,EAIjCixT,WAJiC,IASvC,GACEH,EAAgBJ,EAAhBI,OAAgCJ,EAAhCI,OAAgDH,EADrC,QA7Fb,gBACE,IAAMP,EAASr90B,EADoB,OAGnC,OADA+8jB,iBAFmC,GAG5BghR,EAAgBA,EAAQA,EAAG/90B,EAA3B+90B,OAH4B,GAMrC,oBACE,IAAI5hwB,EAAM4gf,EADsD,GAEhE,GAAI5gf,EAAIA,WAAagiwB,KAArB,UAAqC,CACnC,IAAM7ie,EAAO7xU,SAASA,cADa,QAEnC0yC,4BAFmC,GAGnCm/R,cAHmC,GAInCyhN,KAJmC,EAKnC5gf,EALmC,EAOrC,IAAM/8B,EAAUm+gB,EAAoBA,GAAQA,UAAUA,EATU,GAa1D1yjB,EAAO4+B,SAASA,eAb0C,GAchE,KAAe,CACb,IAAM6xU,EAAO7xU,SAASA,cADT,QAKb,OAHA6xU,sBAFa,EAEbA,aACAA,cAHa,GAIbn/R,cAJa,GAKNU,EAAUA,SAASA,YAAcy+R,EAAjCz+R,WALM,EAQf,OADAV,cArBgE,Q,4BA4FpEiiwB,WACE,GAAK360B,KAAL,SAQA,IALA,IAAM,EAJS,KAIf,eAAM,EAJS,KAIf,QAAM,EAJS,KAIf,QACM,EALS,KAKf,oBAAM,EALS,KAKf,SACI460B,GANW,EASN530B,EAAJ,EAAWkB,EAAK0zL,EAArB,OAAqC50L,EAArC,EAA6CA,IAAK,CAGhD,IAFA,IAAMurC,EAAQqpJ,EADkC,GAGvCxxL,EADKrJ,KAAKA,IAAIA,EAAoBwxC,EAAMA,MAFD,QAG5B/xC,EAAM+xC,EAAMA,IAAhC,OAA4CnoC,GAA5C,EAAsDA,IAAK,CACzD,IAAMsyE,EAAM4gf,EAD6C,GAEzD5gf,cAAkBohf,EAFuC,GAGzDphf,YAHyD,GAK3DkiwB,EAAqBrsyB,EAAMA,IAAIA,OARiB,EAWlD,GAAI,OAACojyB,QAAD,IAACA,KAAL,kBAKA,IAAMkJ,EAAclJ,EAAeA,YAAYA,IAzBhC,KA0BTmJ,EAAoBnJ,EAAeA,kBAAkBA,IA1B5C,KA4Bf3x0B,KAAA,QAAeA,KAAKy50B,gBAAgBoB,EA5BrB,GA6Bf760B,KAAA,eAAoBA,KA7BL,gB,6BA5OnB,G,+GCbA,WAjBA,Q,sKA2BA,gBACE,IAAM2F,EAAIqgC,SAASA,cADgB,KAEnC,IAAKrgC,EAAL,MACE,MAAM,IAAIiC,MADE,kDAGdjC,OALmC,EAMnCA,SANmC,UAS/B,aAAJ,IACEA,WADmB,IAKpBqgC,SAAA,MAAiBA,SAAlB,6BAdmC,GAenCrgC,EAfmC,QAgBnCA,EAhBmC,S,IAsBrC,aACErH,c,4FAAc,SACZ0B,KAAA,cAAqB,IADT,Q,kDAId+60B,eACOrlW,8BAAL,sBAIAgxG,EAASllf,EAATklf,yBALyB,GAEvB1+jB,uDADsD,M,0BAO1DixpB,gBAMEvyF,GALgBl2O,yBAGd6ie,sBAJsC,6B,gCAY1Cr8Q,gBACE,IAAMgkR,GAAY/yW,eADwB,GAEpChgD,EAAc+yZ,EAAYA,kBAFU,GAI1C,GAAIA,IAAc3H,sBAAlB,uBAA8D,CAC5D,IAD4D,EACxD4H,EAAUj70B,KAAKk70B,cAAcn30B,IAD2B,GAE5D,IACEk30B,EAAU5goB,IAAIA,gBAAgB,IAAI46R,KAAK,CAAT,GAAiB,CAAE/0e,KADrC,KAEZF,KAAA,oBAFY,IAOZm70B,EAAY,SAAWvnoB,mBAAmBqnoB,EAAUA,IATM,GAoB5D,IAEE,OADAvszB,YADE,MAGF,MAAOoiT,GACP9oT,4CADW,IAIXqyL,oBAJW,GAKXr6M,KAAA,qBALW,IAUf,OADAA,KAAA,iBApC0C,Q,sBA8C5C0mlB,gBACE,GAAI2sP,sBAAJ,uBAEErz0B,KAAA,cAF8C,OAAhD,CAKA,IAAMi70B,EAAU5goB,IAAIA,gBANsC,GAO1DqsY,IAP0D,S,6BAvE9D,G,ioFCZA,YAA2D,IAA7B,EAA6B,EAA7B,SAA6B,EAA7B,KAA6B,IAAb/hf,aAAa,MAA3D,EAA2D,EACzD,OAAO,IAAI1lD,SAAQ,SAAUC,EAASi3B,GACpC,GACE,kBACE3nE,GADF,kBACiBA,KACf7M,OAAOC,UAAU+iG,IAAUA,GAH/B,GAKE,MAAM,IAAI/8F,MADV,8CAIF,cACMolB,aAAJ,EACEA,SAD8B,GAG9BA,wBADK,GAIP,GACEu5G,aADW,GAGbrnF,EAVqB,GAavB,IAAM2hqB,EAAe5ngB,EAAQA,KAAKA,KAAMmioB,EAtBI,OAuBxCpuzB,aAAJ,EACEA,QAD8B,GAG9BA,qBADK,GAIP,IAAMquzB,EAAiBpioB,EAAQA,KAAKA,KAAMmioB,EA7BE,SA8BtC32uB,EAAU5rD,WAAWA,EA9BiB,OAvBhD,IAAMuiyB,EAAa,CACjBE,MADiB,QAEjBC,QAFiB,W,mBA6DnB,aACEj90B,aAAc,UACZ0B,KAAA,WAAkB5B,OAAOA,OADb,M,4BASdu6C,cAAwC,IAAhB3M,EAAgB,uDAAxC2M,KACE34C,KAAA,QAA8B,CAC5B4uJ,UAD4B,EAE5BopC,YAAMhsJ,QAANgsJ,IAAMhsJ,OAANgsJ,EAAMhsJ,EAFsB,S,iBAWhC8M,cAAyC,IAAhB9M,EAAgB,uDAAzC8M,KACE94C,KAAA,SAA+B,CAC7B4uJ,UAD6B,EAE7BopC,YAAMhsJ,QAANgsJ,IAAMhsJ,OAANgsJ,EAAMhsJ,EAFuB,S,sBAUjCrB,cACE,IAAMquK,EAAiBh5M,KAAKoxhB,WADJ,GAExB,GAAKp4U,GAAL,IAAuBA,EAAeA,OAAtC,CAGA,IALwB,QAQmBA,EAAeA,MARlC,QAQxB,2BAAoE,eAAzD,EAAyD,EAAzD,WAAyD,EAAzD,SAAyD,EAApE,MAEIh5M,KAAA,OADQ,GAGV,GACGw70B,MAAD,UADY,GAIdx2yB,EARkE,IAR5C,8BAoBxB,KAAuB,kBACrB,4BACEA,EADwC,YADrB,8BAIrBw2yB,EAJqB,S,iBAWzBC,cAAyC,MAAhBzvyB,EAAgB,uDAAzCyvyB,KACQzioB,GAAkB,EAAAh5M,KAAA,YAAlBg5M,KAAkB,EAAlBA,GADiC,IAEvCA,OAAoB,CAClBh0K,SADkB,EAElB4pH,UAFkB,KAER5iH,wCACVgsJ,MAHkB,KAGZhsJ,wC,kBAOV0vyB,cAA0C,IAClC1ioB,EAAiBh5M,KAAKoxhB,WADY,GAExC,KAGA,IAAK,IAAIpuhB,EAAJ,EAAWkB,EAAK80M,EAArB,OAA4Ch2M,EAA5C,EAAoDA,IAClD,GAAIg2M,EAAeA,GAAGA,WAAtB,EAA6C,YAC3CA,WAD2C,O,EAlFnD,G,iBA6FA,e,4UACEruK,cAEI,MAAM,IAAI/iC,MAFY,oD,EAD5B,I,2JCzKA,MAkBA,W,keAEA,IAAM+z0B,EAAU31yB,SApBhB,QAyBA,aACE1nC,e,4FAAkB,SAChB0B,KAAA,MADgB,EAEhBA,KAAA,OAAc,IAAIi/C,SAAQ,cACxB08xB,eAAoBC,mBAApBD,IAAyC,WACvCz8xB,EAD6C,S,oFAMnD,0GACqBl/C,KADrB,qBACQ+9zB,EADR,yBAESA,EAFT,+D,mHAKA,0GACqB/9zB,KADrB,qBACQ+9zB,EADR,yBAESA,EAFT,gE,0GAKA,kHAAe/yyB,EAAf,oCAA4Bs/O,EAA5B,gCAAuC+3jB,uBAAvC,YACqBri0B,KADrB,qBACQ+9zB,EADR,yBAESA,EAAKA,IAAIA,EAAKA,EAFvB,oD,iHAKA,2GACqB/9zB,KADrB,qBACQ+9zB,EADR,yBAESA,EAAKA,UAFd,oD,wFAzBF,G,4BCWA/3xB,iBAAoB,gBAClB,IAAI61yB,EADoD,GAEpDC,EAFoD,GAGpDC,EAHoD,cAIpDC,EAJoD,GAKpDC,EALoD,GAMpDC,EANoD,UA8DxD,kBACE50gB,EAAYA,GAAa,SAAoBtsR,KAC7CmhyB,EAAYA,GAAa,aAEzB,IAAI3noB,EAAM,IAJoC,eAK9CA,gBAnEsD,GAoElDA,EAAJ,kBACEA,mBADwB,6BAG1BA,qBAAyB,WACvB,GAAIA,EAAIA,aACYA,KAAdA,EAAIA,QAAR,IAAyBA,EAAIA,OAC3B8yH,EAAU9yH,EAD+B,cAGzC2noB,MAIN3noB,UAlB8C,EAmB9CA,YAnB8C,EAuB9C,IACEA,OADE,MAEF,MAAOpsM,GACP+z0B,KA4BJ,oBACE,IAAInrhB,EAAU5jM,EAAKA,QAAQA,UAAWA,KAD6B,KAInE,cACE,OAAIvB,EAAKA,YAAYA,MAArB,EADwB,EAGjBA,EAAKA,QAAQA,QAASA,MAAtBA,oLAHiB,KAkG1BuwtB,KAAkB,YAChBN,GADmC,EAhFrC,cACE,IAAIO,EADmD,GAInDC,EAJmD,YAKnDC,EALmD,cAMnDC,EANmD,mBAOnDC,EAPmD,iCAQnDC,EARmD,yBAWvD,kBACE,IAAI/y0B,EAAUgz0B,EAAQA,QAAQA,EAASA,IAAIA,MAD2B,WAElEC,EAFkE,IAGlEC,EAAc1qtB,EAAKA,MAAMA,IAAKA,GAHoC,GAIlE2qtB,GAJkE,EAKlEvuyB,EALkE,IAOtE,aAGE,OAAa,CACX,IAAK5kC,EAAL,OAAqB,YACnBoz0B,IAGF,IAAI1gjB,EAAO1yR,EALA,QAQX,IAAI4y0B,EAAUA,KAAd,IAIA,KAAoB,CAElB,GADAhuyB,EAAQiuyB,EAAUA,KADA,GAEP,CAITI,EAAcruyB,EAAMA,GAJX,cAKTuuyB,EAAW,MAACF,GACPA,IADM,GACoBA,IANtB,WAQJ,GAAIE,EAAU,SAIrB,GADAvuyB,EAAQkuyB,EAASA,KAbC,GAcP,YACTO,EAAWhshB,EAAUziR,EAArByuyB,GADS,GAOb,IAAIj9oB,EAAMs8F,EAAKA,MAjCJ,GAkCPt8F,GAAJ,GAAWA,EAAIA,SACbs8oB,EAAWt8oB,EAAXs8oB,IAAqBY,EAAWl9oB,EADN,OAKhCm9oB,GAIF,gBACEd,KAAiB,YACfe,OADiC,MAEhC,WACDn1zB,aAAaw5E,EADA,eAEb58D,OAKJu4yB,QAA0B,WACxBC,EADmC,MAUrCC,IAA0B,YAGxB,eAAsB,CACpB,QAAclh1B,EAAQmI,EAAIA,YADN,KAEhBnI,EAAJ,GACE8kC,EAAK38B,EAAIA,UAAUA,EADN,GAEbu+I,EAAOv+I,EAAIA,UAAUnI,EAFR,KAIb8kC,EADK,EAEL4hH,EAFK,GAIFg5rB,EAAL,KACEA,KADkB,IAGpBA,QAAsB7gyB,EAZF,GAgBtB,GACEsiyB,SA9H6D,GAqIrE,gBAGE,IACEnrtB,EAAOA,EADC,eAIVvtF,EAAWA,GAAY,aAwEvBi3yB,EADe,GAEfC,EAFe,GAGfE,EAHe,GApEfA,EAVkC,EAclC,IAAIuB,EAvOGv3yB,EAASA,iBADc,iCAyO1Bw3yB,EAAYD,EAfkB,OAgBlC,OAAIC,EAAJ,CA4BA,IAAIC,EACAC,EA7C8B,EA8ClCD,EAAmB,aACjBC,GACA,IACE94yB,IACAs3yB,EAF+B,aAuBnC,IAAK,IAAIl50B,EAAT,EAAgBA,EAAhB,EAA+BA,IACd,IAAI260B,EAAiBJ,EADF,IAElCK,OAFkC,OAvDpC,CAEE,IAAIl3qB,EAxOR,WACE,IAAI2hU,EAASric,EAASA,cADK,mCAG3B,OAAOqic,EAAS15d,KAAKA,MAAM05d,EAApBA,WAHoB,KAwOdw1W,GACX,GAAIn3qB,GAAQA,EAARA,SAAwBA,EAA5B,eAAiD,CAG/C,GAFA1+I,YAD+C,sDAE/C6zzB,EAAYn1qB,EAAKA,QAF8B,IAG/B,CACd,IAAIo3qB,EAAgBp3qB,EAAKA,eADX,cAEd,aAAwBA,EAAxB,QAAsC,CAEpC,IADAq3qB,EAAcA,EADsB,iBAEpC,EAA0B,CACxBlC,EAAYn1qB,EAAKA,QADO,SAGfq3qB,IAAJ,IACLlC,EAAYn1qB,EAAKA,QADuB,KAK9C9hI,SAEA5c,YADK,sCAIPk0zB,EAvBmB,WAuCrB,cACE,IAAI9utB,EAAOnjB,EADmB,KAI9BjqG,KAAA,KAAY,cACVg+0B,SAAoC,WAClCh2zB,aAAaolG,EADgC,eAG7CplG,aAAa,IAAMmqG,EAH0B,wBAI7C6ptB,EAJ6C,GAM7Cp3yB,SAsdR,kBACE,IAAIoW,EAAO6gyB,EAD6B,GAExC,MAAW,CAET,GADA7zzB,aAAa,IAAM1jB,EADV,mBAET,EACE,OADa,KAGf02C,EALS,EAaX,IAAIijyB,EAfoC,GAgBxC,eAAuB,CACrB,IAAIz1zB,EAAMwyB,EADW,GAGrBxyB,EAAM01zB,EADN11zB,EAAM21zB,EAAaA,EAAKA,EAAMA,EAFT,GAGKD,EAHL,GAIrBD,KAJqB,EAMvB,OAtBwC,EA0B1C,oBACE,IACIG,EAFsC,2CAEpBC,KAFoB,GAG1C,IAAKD,IAAYA,EAAjB,OACE,OAJwC,EAQ1C,IAR0C,EAQtCE,EAAYF,EAR0B,GAStCG,EAAYH,EAT0B,GAsB1C,OAXIpzzB,GAAQuzzB,KAAZ,EACEp+c,EAAQn1W,EADqB,GAEpBuzzB,KAAJ,IACLp+c,EAAQ07c,EADyB,IAK/ByC,KAAJ,IAEE91zB,GAAMg2zB,EADMvC,EADY,IAEZuC,EAAKA,EAAOA,EAFA,IAlBgB,EA0B5C,kBAEE,OAAOh2zB,EAAIowD,QAF2B,wBAEX,cACzB,OAAI5tD,GAAQN,KAAZ,EACSM,EADgB,GAGrBN,KAAJ,EACSmxzB,EADa,IAGtB7zzB,YAAY,cAAgB0C,EAAM,WAAapmB,EAPM,wBAazD,cACE,IAAIy5zB,EAxyBN,YACE,MACE,MAFgC,GAIlC,IAAI9zQ,EAASniX,EAAQA,aAJa,gBAK9BoiX,EAAWpiX,EAAQA,aALW,kBAM9B98K,EAN8B,GAOlC,KACE,IACEA,EAAOrc,KAAKA,MADV,GAEF,MAAOvG,GACP4f,aAAa,kCADH,GAId,MAAO,CAAEiZ,GAAF,EAAcjW,KAAd,GA0xBIyzzB,CADsB,GAEjC,GAAK1gB,EAAL,IAIA,IAAI/ixB,EAAO0jyB,EAAY3gB,EAAZ2gB,GAAqB3gB,EANC,MAOjC,MAMA,GAAI/ixB,EAAJ,GAAqB,CACnB,OAiCJ,YACE,GAAI8sJ,EAAJ,SACE,OAAOA,EAAQA,SADK,OAGtB,wBAAWA,EAAP,kBACF,OAAOA,EAD6C,kBAItD,IADA,IAAI1yL,EAPiC,EAQ5BpS,EAAT,EAAgBA,EAAI8kM,EAAQA,WAA5B,OAA+C9kM,IAC7CoS,GAA8B0yL,IAArBA,EAAQA,SAAiBA,EADgB,EAGpD,OAXqC,EAjC/B62oB,CAAqBA,GACvB72oB,KAAqB9sJ,EADkB,OAElC,CAKL,IAFA,IAAI1U,EAAWwhK,EAHV,WAID/kL,GAJC,EAKI/f,EAAJ,EAAWqlB,EAAIie,EAApB,OAAqCtjC,EAArC,EAA4CA,IACbsjC,IAAzBA,EAASA,GAAGA,UAAkB,KAAKyU,KAAKzU,EAASA,GAArD,aACE,EACEA,eADS,IAGTA,eAAwB0U,EADnB,GAELj4B,GAFK,IAQX,MAAY,CACV,IAAI67zB,EAAW54yB,EAASA,eAAegV,EAD7B,IAEV8sJ,iBAA+BA,EAFrB,oBAKP9sJ,EAzBY,GA4BrB,eACE8sJ,KAAa9sJ,EADK,QAjClBhzB,aAAa,IAAM+1yB,EAAN,GADJ,mBAqEb,OApLAke,SAAiB,kBACf,IAAI710B,EAAIuyE,WADuC,GAE/C,GAAIv8B,MAAJ,GACE,OAH6C,EAM/C,GAAIymG,GAAJ,EACE,OAP6C,EAU1Co5rB,EAAL,eACEA,eAvZJ,YA+KE,gBACE,OADqB,IACd1j0B,EAAKA,QAAQA,GAEtB,kBACE,OAAOwH,GAASA,GAAK3Z,GADW,EAMlC,IAAIy40B,EAAc,CAChB,EAAK,YACH,MADe,SAGjB,EAAK,YACH,OAAKjvlB,EAAWxpP,EAAXwpP,MAAL,IADe,MAGf,IAAIxpP,EAHW,OAKVwpP,EAAWxpP,EAAXwpP,OAAL,IALe,OAOf,GAAIxpP,EAPW,MASf,GAAIA,EATW,eAajB,EAAK,YACH,OAAUA,IAANA,GAAYA,EAAD,KAAf,EADe,OAGf,GAAIA,EAHW,MAKf,GAAIA,EALW,eASjB,EAAK,YACH,UAAIA,EADW,eAKjB,EAAK,YACH,OAAKwpP,EAAUA,EAAGA,EAAlB,GADe,eAKjB,EAAK,YACH,OAAKA,EAAUA,EAAGA,EAAd,IAAJ,GAA4BxpP,EADb,eAKjB,EAAK,YACH,WAAIA,EADW,OAGVA,EAAD,OAAkBA,EAAD,KAArB,GAHe,eAOjB,EAAK,YACH,UAAIA,EADW,MAGf,GAAIA,EAHW,eAOjB,EAAK,YACH,OAAKwpP,EAAUA,EAAGA,EAAlB,GADe,MAGVA,EAAUA,EAAGA,EAAlB,IAHe,OAKf,GAAIxpP,EALW,MAOf,GAAIA,EAPW,eAWjB,EAAK,YACH,OAAUA,IAANA,GAAgBA,GAALA,GAAWwpP,EAAWxpP,EAAXwpP,MAA1B,IADe,MAGf,GAAIxpP,EAHW,eAOjB,GAAM,YACJ,OAAKwpP,EAAWxpP,EAAXwpP,KAAD,KAAiCA,EAAWxpP,EAAXwpP,OAArC,IADgB,MAGXxpP,EAAD,OAAmBwpP,EAAWxpP,EAAXwpP,OAAvB,IAHgB,eAOlB,GAAM,YACJ,OAAKA,EAAWxpP,EAAXwpP,KAAD,KAAiCA,EAAWxpP,EAAXwpP,OAArC,IADgB,MAGXxpP,EAAD,QACCwpP,EAAWxpP,EAAXwpP,KADD,IAECA,EAAWxpP,EAAXwpP,OAFL,IAHgB,OAOXxpP,EAAD,OAAkBA,EAAD,KAArB,GAPgB,eAWlB,GAAM,YACJ,OAAKwpP,EAAUA,EAAGA,EAAlB,GADgB,MAGhB,GAAIxpP,EAHY,eAOlB,GAAM,YACJ,OAAKwpP,EAAWxpP,EAAXwpP,KAAD,KAAiCA,EAAWxpP,EAAXwpP,OAArC,IADgB,MAGPxpP,GAALA,GAAWwpP,EAAWxpP,EAAXwpP,KAAXxpP,IACCwpP,EAAWxpP,EAAXwpP,KADDxpP,IAECwpP,EAAWxpP,EAAXwpP,OAFL,IAHgB,OAOhB,GAAIxpP,EAPY,eAWlB,GAAM,YACJ,OAAKwpP,EAAWxpP,EAAXwpP,MAAL,GADgB,MAGXxpP,EAAD,KAAJ,EAHgB,MAKXA,EAAD,KAAJ,EALgB,eASlB,GAAM,YACJ,OAAUA,IAANA,GAAYwpP,EAAWxpP,EAAXwpP,MAAhB,IADgB,MAGXA,EAAWxpP,EAAXwpP,OAAL,IAHgB,OAKhB,GAAIxpP,EALY,eASlB,GAAM,YACJ,OAAKA,EAAD,OAAJ,IAAqBA,EADL,eAKlB,GAAM,YACJ,UAAIA,EADY,MAGhB,IAAIA,EAHY,OAKhB,GAAIA,EALY,OAOhB,GAAIA,EAPY,MAShB,GAAIA,EATY,eAalB,GAAM,YACJ,WAAIA,EADY,OAGXwpP,EAAUA,EAAGA,EAAd,QAAwBxpP,GAA5B,GAAuCA,EAHvB,eAOlB,GAAM,YACJ,OAAKwpP,EAAUA,EAAGA,EAAlB,IADgB,MAGXA,EAAUA,EAAGA,EAAlB,GAHgB,eAOlB,GAAM,YACJ,OAAKA,EAAWxpP,EAAX,SAA+BA,EAAD,IAA/B,GACAwpP,EAAWxpP,EAAX,YACAwpP,EAAWxpP,EAAXwpP,OADA,KAEAA,EAAWxpP,EAAXwpP,OAHJ,IAMKxpP,EAAD,SAAJ,IAA2BA,EAPX,OASXA,EAAD,OAAkB040B,EAAM140B,EAAN,IAAgB,CAAC,GAAI,GAA3C,KAEKA,EAAD,OAAkB040B,EAAM140B,EAAN,IAAgB,CAAC,GAAI,GAA3C,KAXgB,2BAelB,GAAM,YACJ,WAAIA,EADY,OAGhB,GAAIA,EAHY,eAOlB,GAAM,YACJ,OAAKwpP,EAAUA,EAAGA,EAAd,IAAyBA,EAAUA,EAAGA,GAA1C,IADgB,eAKlB,GAAM,YACJ,OAAKA,EAAWxpP,EAAXwpP,KAAD,IAAgCxpP,EAAD,KAAnC,EADgB,eAKlB,GAAM,YACJ,OAAKwpP,EAAUA,EAAGA,EAAGA,KAAOA,EAAUA,EAAGA,GAAzC,IADgB,MAGZkvlB,EAAK140B,EAAG,CAAC,EAAb,KAHgB,MAKZ040B,EAAK140B,EAAG,CAAC,EAAb,KALgB,gBAYhBjK,EAlYgB,CAClB,GADkB,EAElB,GAFkB,EAGlB,GAHkB,EAIlB,GAJkB,EAKlB,IALkB,EAMlB,GANkB,EAOlB,GAPkB,GAQlB,IARkB,EASlB,IATkB,EAUlB,GAVkB,EAWlB,GAXkB,EAYlB,GAZkB,EAalB,GAbkB,EAclB,GAdkB,EAelB,GAfkB,GAgBlB,IAhBkB,EAiBlB,GAjBkB,GAkBlB,GAlBkB,EAmBlB,IAnBkB,EAoBlB,IApBkB,EAqBlB,GArBkB,GAsBlB,GAtBkB,GAuBlB,GAvBkB,EAwBlB,GAxBkB,EAyBlB,GAzBkB,EA0BlB,GA1BkB,EA2BlB,GA3BkB,EA4BlB,GA5BkB,EA6BlB,GA7BkB,EA8BlB,GA9BkB,EA+BlB,GA/BkB,EAgClB,GAhCkB,EAiClB,GAjCkB,EAkClB,GAlCkB,EAmClB,GAnCkB,EAoClB,GApCkB,EAqClB,IArCkB,EAsClB,GAtCkB,EAuClB,GAvCkB,EAwClB,IAxCkB,EAyClB,GAzCkB,EA0ClB,GA1CkB,EA2ClB,GA3CkB,GA4ClB,GA5CkB,EA6ClB,IA7CkB,EA8ClB,GA9CkB,EA+ClB,IA/CkB,EAgDlB,GAhDkB,GAiDlB,GAjDkB,EAkDlB,IAlDkB,EAmDlB,GAnDkB,EAoDlB,GApDkB,EAqDlB,GArDkB,GAsDlB,GAtDkB,EAuDlB,GAvDkB,EAwDlB,GAxDkB,EAyDlB,GAzDkB,EA0DlB,GA1DkB,EA2DlB,GA3DkB,EA4DlB,GA5DkB,EA6DlB,GA7DkB,EA8DlB,IA9DkB,EA+DlB,GA/DkB,EAgElB,GAhEkB,EAiElB,IAjEkB,EAkElB,IAlEkB,EAmElB,IAnEkB,EAoElB,IApEkB,EAqElB,IArEkB,EAsElB,GAtEkB,EAuElB,GAvEkB,EAwElB,GAxEkB,EAyElB,GAzEkB,EA0ElB,GA1EkB,EA2ElB,IA3EkB,EA4ElB,IA5EkB,GA6ElB,GA7EkB,EA8ElB,GA9EkB,EA+ElB,IA/EkB,GAgFlB,GAhFkB,EAiFlB,GAjFkB,EAkFlB,GAlFkB,EAmFlB,GAnFkB,EAoFlB,GApFkB,GAqFlB,GArFkB,EAsFlB,IAtFkB,EAuFlB,GAvFkB,EAwFlB,GAxFkB,GAyFlB,GAzFkB,EA0FlB,GA1FkB,EA2FlB,GA3FkB,EA4FlB,GA5FkB,EA6FlB,GA7FkB,EA8FlB,GA9FkB,GA+FlB,GA/FkB,EAgGlB,IAhGkB,EAiGlB,IAjGkB,EAkGlB,GAlGkB,EAmGlB,GAnGkB,EAoGlB,GApGkB,EAqGlB,GArGkB,EAsGlB,GAtGkB,EAuGlB,GAvGkB,EAwGlB,GAxGkB,EAyGlB,IAzGkB,EA0GlB,GA1GkB,EA2GlB,IA3GkB,EA4GlB,GA5GkB,EA6GlB,GA7GkB,EA8GlB,GA9GkB,EA+GlB,IA/GkB,EAgHlB,GAhHkB,GAiHlB,GAjHkB,EAkHlB,GAlHkB,EAmHlB,GAnHkB,EAoHlB,GApHkB,EAqHlB,IArHkB,EAsHlB,GAtHkB,GAuHlB,IAvHkB,EAwHlB,IAxHkB,EAyHlB,IAzHkB,EA0HlB,GA1HkB,EA2HlB,IA3HkB,EA4HlB,IA5HkB,EA6HlB,GA7HkB,EA8HlB,GA9HkB,GA+HlB,IA/HkB,GAgIlB,GAhIkB,GAiIlB,GAjIkB,GAkIlB,IAlIkB,EAmIlB,IAnIkB,EAoIlB,IApIkB,EAqIlB,IArIkB,EAsIlB,IAtIkB,EAuIlB,GAvIkB,EAwIlB,GAxIkB,EAyIlB,GAzIkB,EA0IlB,GA1IkB,GA2IlB,GA3IkB,EA4IlB,IA5IkB,EA6IlB,GA7IkB,EA8IlB,GA9IkB,EA+IlB,GA/IkB,EAgJlB,IAhJkB,EAiJlB,GAjJkB,EAkJlB,GAlJkB,EAmJlB,IAnJkB,EAoJlB,GApJkB,EAqJlB,GArJkB,EAsJlB,IAtJkB,EAuJlB,GAvJkB,EAwJlB,GAxJkB,EAyJlB,GAzJkB,EA0JlB,GA1JkB,EA2JlB,GA3JkB,EA4JlB,GA5JkB,EA6JlB,IA7JkB,GA8JlB,GA9JkB,GA+JlB,GA/JkB,EAgKlB,GAhKkB,EAiKlB,GAjKkB,EAkKlB,IAlKkB,EAmKlB,GAnKkB,EAoKlB,IApKkB,EAqKlB,GArKkB,EAsKlB,GAtKkB,EAuKlB,IAvKkB,EAwKlB,GAxKkB,EAyKlB,GAzKkB,EA0KlB,GA1KkB,GAkYMg2H,EAAKA,QAAQA,OAnYX,KAoY5B,OAAMh2H,KAAN,EAIO0i1B,EAxYqB,IAqY1B72zB,aAAa,4BAA8BmqG,EADhB,KAEpB,WAAa,MAAF,UAiBK4stB,CADE,IAG3B,IAAI5i1B,EAAQ,IAAM8/0B,EAAQA,aAAd,GAbmC,IA4B/C,OAZU710B,IAANA,GAAY9B,EAAD,WAAf,EACEkkB,EAAMqzzB,EAAUv30B,EAAVu30B,UADsC,GAE9Bz10B,GAALA,GAAW9B,EAAD,UAAd,EACLkkB,EAAMqzzB,EAAUv30B,EAAVu30B,SAD2C,GAEnCz10B,GAALA,GAAW9B,EAAD,UAAd,EACLkkB,EAAMqzzB,EAAUv30B,EAAVu30B,SAD2C,GAEvCv30B,EAAD,KAAJ,EACLkkB,EAAMqzzB,EAAUv30B,EAAVu30B,GAD+B,GAE3Bv30B,EAAD,YAAJ,IACLkkB,EAAMqzzB,EAAUv30B,EAAVu30B,WADmC,IAxBI,GAoL1C,CAEL930B,IAAK,gBACH,IADuC,EACnC5H,EAAQmI,EAAIA,YADuB,KAEnCu+I,EAFmC,EAGnC1mJ,EAAJ,IACE0mJ,EAAOv+I,EAAIA,UAAUnI,EADR,GAEbmI,EAAMA,EAAIA,UAAUA,EAFP,IAKf,KACEgmQ,EADkB,IAElBA,GAFkB,GAIpB,IAAItvN,EAAO0jyB,EAAYA,EAAKA,EAZW,GAavC,OAAI1jyB,GAAQ6nG,KAAZ,EACS7nG,EADiB,GAGnB,KAAO12C,EAhByB,MAoBzC22C,QAAS,WAAa,OAAF,GACpBy8X,QAAS,WAAa,OAAF,GAGpB3mO,YAAa,WAAa,OAAF,GACxBiuoB,YAAa,cACX37lB,KAAiB,WACf,GACEz+M,QAKN6zvB,aAAc,WAGZ,IACIwmD,EAAYjD,EAAUA,MAAMA,IAAKA,GAJd,GAKvB,MAFc,CAAC,KAAM,KAAM,KAAM,KAAjC,MAEgBkD,QAAQA,IAAjB,QALgB,OASzBx5rB,UA1DF,YAME,IAFA,IAAIp/G,EA72BN,YACE,OAAOwhK,EAAUA,EAAQA,iBAAlBA,mBADiC,GA62BzBq3oB,CAHfr3oB,EAAUA,GAAW9hK,EADa,iBAK9Bo5yB,EAAe94yB,EALe,OAMzBtjC,EAAT,EAAgBA,EAAhB,EAAkCA,IAChCq80B,EAAiB/4yB,EADoB,IAKvC+4yB,EAXkC,IA6DlCC,cAAe,WAAa,OAAF,GAC1BrhyB,MAAO,YACL,IAE0Bi+xB,YAAfA,GAAJ,eAAiCA,EACtCxtzB,cAAkB,WAChBkW,OAEOoB,EAAJ,kBACLA,gCAAuC,SAASgyJ,IAC9ChyJ,kCADqD,GAErDpB,UA19BU,CAAD,OAAnBoB,W,wGCpCA,0B,6uDAuBA,IAAMu5yB,EAAY,CAChBC,MADgB,EAEhBC,UAFgB,EAGhBhY,QAHgB,EAIhB/wF,QAJgB,G,cAOlB,IAIMgpG,EAA0B,CAC9B,SAD8B,IAE9B,SAF8B,IAG9B,SAH8B,IAI9B,SAJ8B,IAK9B,SAL8B,IAM9B,SAN8B,IAO9B,SAP8B,IAQ9B,SAR8B,IAS9B,SAT8B,IAU9B,OAV8B,MAW9B,OAX8B,MAY9B,OAZ8B,OAe5BC,EAjDJ,KAkDA,cACE,MAAyB,CAEvB,IAAM/mwB,EAAUx6E,OAAOA,KAAKA,GAAyBA,KAF9B,IAGvBuh1B,EAAqB,IAAI7kyB,OAAO,IAAX,cAHE,KAKzB,IAAIqxM,EANmB,KAgBvB,MAAO,CATgBtgI,EAAKjzC,QAAQ+mwB,GAAoB,SAAU1qgB,EAAI94U,GACpE,IAAMyj1B,EAAeF,EAArB,GACEtqmB,EAAOwqmB,EAAaA,OAAS3qgB,EAF4C,OAM3E,OAHA,IAAI7/F,IACD+W,MAAD,UAAoB,CAAChwP,EAApBi5O,IAJwE,KAS7E,GAMF,cAAoD,IAAd+W,EAAc,uDAApD,KACE,MACE,OADU,EAGZ,IAJkD,EAI9C0zlB,EAJ8C,aAKlD,2BAAmC,oBAAxB,EAAwB,KAAnC,EAAmC,KAC3Bt9iB,EAAepmS,EADY,EAGjC,GAAIomS,GAAJ,EAAgC,MAGhC,GAAIA,EAAeA,EAAnB,EAAsC,CACpCs9iB,GAAapF,EADuB,QAItCoF,GAViC,GALe,8BAiBlD,OAAOpF,EAjB2C,E,IA6BpD,aAIEn80B,cAAuC,WAA3B,EAA2B,EAA3B,YAAZA,EAAuC,EAAvCA,U,4FAAuC,SACrC0B,KAAA,aADqC,EAErCA,KAAA,UAFqC,EAIrCA,KAJqC,SAKrC0ojB,aAAqB1ojB,KAAK8/0B,QAAQh+zB,KALG,OAMrC4miB,qBAA6B1ojB,KAAK+/0B,gBAAgBj+zB,KANb,OASnC9hB,KAAA,eAAsB,cACpBgoB,cACE,2HAIF,IAAMg4zB,EAAa5h1B,OAAOA,OAAOA,OAAOA,OAArBA,QAA0C,CAC3D8B,KAAM0/hB,EAAIA,UAAU,OAPc,UASpC,UAToC,I,oDAc1C,WACE,OAAO5/hB,KADc,oB,uBAIvB,WACE,OAAOA,KADS,e,6BAIlB,WACE,OAAOA,KADe,qB,oBAIxB,WACE,OAAOA,KADM,Y,iBAIf,WACE,OAAOA,KADG,S,yBAUZ4ktB,YACM5ktB,KAAJ,cACEA,KADqB,SAGvB,IAGAA,KAAA,aAPuB,EAQvBA,KAAA,qBARuB,a,qBAczB8/0B,YAAe,WACb,MAGA,IAAM1+H,EAAcphtB,KAJP,aAKP,EALO,EAKb,MAEoB,OAAhBA,KAAKs+c,QAAmBt+c,KAAKig1B,kBAAjC,MACEjg1B,KAAA,aADyD,GAG3DA,KAAA,OAVa,EAWb,uBAAIE,GACFF,KAAA,eAAoBu/0B,EADa,SAInCv/0B,KAAA,mCAAuC,WAGrC,GACG,EAAD,gBACCohtB,GAAe,iBAFlB,IAMA,EAT2C,eAW3C,IAAM8+H,GAAiB,EAXoB,kBAYrCC,IAAmB,EAZkB,aAcvC,EAAJ,eACE55sB,aAAa,EADQ,cAErB,eAFqB,MAIvB,EAOW,EAAJ,YAGL,EAH2B,aAItB,UAAIrmI,GACT,EAD2B,aAKvBgg1B,GAAiB,SAArB,cACE,EAD6C,mBAG1C,uBAAIhg1B,GAGT,EACE,EADkB,aAGlB,qBADK,EAGP,EARwC,mBAUxC,EADK,aAzBL,eAAoB24C,YAAW,WAC7B,EADmC,aAEnC,eAFmC,OA5M7C,Y,iCA2OEunyB,YAKG,QAJDt4oB,eAIC,MALiB,KAKjB,MAHDuyoB,oBAGC,MALiB,EAKjB,MAFD7wT,iBAEC,OALiB,EAKjB,MADDixT,kBACC,OALH2F,EAKG,EACD,GAAKpg1B,KAAD,gBAAJ,IAEWy60B,OAAqBA,IAAez60B,KAAKqg1B,UAA7C,WAEI72T,OAAoBA,IAAcxphB,KAAKqg1B,UAA3C,SAGPrg1B,KAAA,gBARC,EAUD,IAAMim0B,EAAO,CACX3xsB,KA5N0B,GA6N1B/5G,KAAM8/zB,GA5NqB,MA8N7Bnlb,yBAdC,M,oBAiBHorb,WACEtg1B,KAAA,mBADO,EAEPA,KAAA,gBAFO,EAGPA,KAAA,aAHO,KAIPA,KAAA,aAJO,GAKPA,KAAA,mBALO,GAMPA,KAAA,OANO,KAQPA,KAAA,UAAiB,CACfg60B,SADe,EAEfL,UAFe,GAKjB350B,KAAA,QAAe,CACbg60B,QADa,KAEbL,SAFa,KAGb/5oB,SAHa,GAKf5/L,KAAA,qBAlBO,GAmBPA,KAAA,cAnBO,GAoBPA,KAAA,WApBO,GAqBPA,KAAA,mBArBO,EAsBPA,KAAA,eAtBO,KAuBPA,KAAA,oBAA2B,IAvBpB,IAwBPA,KAAA,eAxBO,KAyBPA,KAAA,aAzBO,EA0BPumI,aAAavmI,KA1BN,cA2BPA,KAAA,aA3BO,KA6BPA,KAAA,sBA7BO,iC,kBAmCT,WACE,GAAIA,KAAKs+c,OAAOpgV,QAAUl+H,KAA1B,UAA0C,CACxCA,KAAA,UAAiBA,KAAKs+c,OADkB,cAEdt0P,EAAUhqN,KAAKs+c,OAFD,UAEvCt+c,KAFuC,sBAI1C,OAAOA,KALI,mB,+BAQbig1B,YAGE,GAAIj5yB,EAAMA,QAAUhnC,KAAKs+c,OAAzB,MACE,OADqC,EAGvC,OAAQt3a,EAAR,MACE,YACE,IAAM4gf,EAAa5nhB,KAAKqg1B,UAAUrG,QADpC,EAEQl1R,EAAc9kjB,KAFtB,aAWE,OACE4nhB,GAAcA,GACdA,GAAck9B,EADdl9B,YAEAA,IAAek9B,EAFfl9B,OAGCk9B,EAAYA,cAJf,GASF,yBACE,OAtBJ,EAwBA,OA9BuB,I,6BAuCzBy7R,gBACE,cACE,IAAMC,EAAcC,EADW,GAEzBC,EAAWD,EAAkBl+iB,EAFJ,GAK/B,GACEA,EAAek+iB,EAAkBA,OAAjCl+iB,GACAi+iB,EAAYA,QAAUE,EAFxB,MAKE,OADAF,WADA,KAMF,IAAK,IAAIx90B,EAAIu/R,EAAb,EAA+Bv/R,GAA/B,EAAuCA,IAAK,CAC1C,IAAM290B,EAAWF,EADyB,GAE1C,IAAIE,EAAJ,SAGA,GAAIA,EAASA,MAAQA,EAAjBA,YAAwCH,EAA5C,MAA+D,MAG/D,GACEG,EAASA,MAAQA,EAAjBA,aACAH,EAAYA,MAAQA,EAFtB,YAKE,OADAA,WADA,MAKJ,OA9B+B,EAmCjCC,QAAuB,SAAU960B,EAAGC,GAClC,OAAOD,EAAEA,QAAUC,EAAZD,MACHA,EAAEA,YAAcC,EADbD,YAEHA,EAAEA,MAAQC,EAHuB,SAKvC,IAAK,IAAI5C,EAAJ,EAAW+K,EAAM0y0B,EAAtB,OAAgDz90B,EAAhD,EAAyDA,IACnD490B,EAAJ590B,KAGA40L,OAAa6opB,EAAkBA,GAJ6B,OAK5D5G,OAAmB4G,EAAkBA,GALuB,gB,2BAahEI,gBACE,GAAIC,EAAJ,EAAkB,CAChB,IAAM19zB,EAAQu4B,EAAQA,WADN,GAEV8tE,EAAQ9tE,EAAQA,WAAWmlyB,EAFjB,GAGhB,IAAIC,4BAA4BA,sBAAhC,GACE,OADuD,EAI3D,IAAMC,EAASF,EAAWA,EARa,EASvC,GAAIE,EAASrlyB,EAAQA,OAArB,EAAiC,CAC/B,IAAM33B,EAAO23B,EAAQA,WADU,GAEzB8tE,EAAQ9tE,EAAQA,WAAWqlyB,EAFF,GAG/B,IAAID,4BAA2BA,sBAA/B,GACE,OADsD,EAI1D,OAhBuC,I,mCAmBzCE,oBAME,IALA,IAAMrppB,EAAN,GACEiipB,EAFwE,GAGpEqH,EAAWhjtB,EAHyD,OAKtEy7sB,GALsE,GAQxE,KADAA,EAAW7vuB,EAAYA,QAAQA,EAAO6vuB,EAD3B,KAKX,IAAIwH,GAAenh1B,KAAK6g1B,cAAc/2uB,EAAa6vuB,EAAnD,IAGA,IAAMyH,EAAmBC,EAAiBA,EAA1C,GAEEC,EACED,EAFS1H,EAAWA,EADxB,EAG+B0H,GAAaA,EAXjC,EAaXzppB,OAbW,GAcXiipB,OAdW,GAgBb750B,KAAA,gBAtB0E,EAuB1EA,KAAA,sBAvB0E,I,iCA0B5Euh1B,oBAKE,IAJA,IAAMd,EADkE,GAIlEe,EAAatjtB,EAAMA,MAJ+C,QAK/Dl7H,EAAJ,EAAW+K,EAAMyz0B,EAAtB,OAAyCx+0B,EAAzC,EAAkDA,IAKhD,IAJA,IAAMy+0B,EAAWD,EADoC,GAE/CE,EAAcD,EAFiC,OAIjD9H,GAJiD,GAOnD,KADAA,EAAW7vuB,EAAYA,QAAQA,EAAU6vuB,EAD9B,KAKX,IACEwH,GACCnh1B,KAAK6g1B,cAAc/2uB,EAAa6vuB,EAFnC,IAMA,IAAMyH,EAAmBC,EAAiBA,EAA1C,GAEEC,EACED,EAFS1H,EAAWA,EADxB,EAG+B0H,GAAaA,EAdjC,EAiBXZ,OAAuB,CACrBlyyB,MADqB,EAErBozyB,YAFqB,EAGrB920B,SAHqB,IAS3B7K,KAAA,sBApCwE,GAqCxEA,KAAA,gBArCwE,GAyCxEA,KAAA,kBAEEA,KAAK4h1B,aAFP,GAGE5h1B,KAAK6h1B,mBA5CiE,M,6BAgD1EC,YACE,IAAIh4uB,EAAc9pG,KAAK+h1B,cADE,GAEnBC,EAAYhi1B,KAAKii1B,WAFE,GAGrB/jtB,EAAQl+H,KAHa,OAIzB,EAAoDA,KAJ3B,OAInB,EAAN,gBAAM,EAAN,aAAM,EAAN,eAEA,OAAIk+H,EAAMA,OAAV,CAKA,IACEp0B,EAAcA,EADI,cAElBo0B,EAAQA,EAFU,eAKpB,EACEl+H,KAAA,8BADgB,GAShBA,KAAA,4BADK,GAYHA,KAAKs+c,OAAT,cACEt+c,KAAA,YAD4B,GAG1BA,KAAKki1B,iBAAT,IACEli1B,KAAA,eADqC,KAErCA,KAFqC,kBAMvC,IAAMmi1B,EAAmBni1B,KAAK4h1B,aAAap4T,GA7ClB,OA8CrB24T,EAAJ,IACEni1B,KAAA,oBADwB,EAExBA,KAFwB,4B,0BAM5Boi1B,WAAe,WAEb,KAAIpi1B,KAAKqi1B,qBAAqBxg1B,OAA9B,GAKA,IADA,IAAImgJ,EAAU/iG,QAND,0BAQX,IAAMqjyB,GADwD,+BAE9D,0BAA+BA,EAF+B,QAI9DtgsB,EAAUA,EAAQzrE,MAAK,WACrB,OAAO,uBACIvzE,EADJ,SAECm7zB,YACJ,OAAOA,EAAQA,eAAe,CAC5B1vS,qBAFa,OAFZ,MAQH1xO,YAIE,IAHA,IAAMwhR,EAAYxhR,EADL,MAEP83L,EAFO,GAIJr9Z,EAAJ,EAAWwlf,EAAKuB,EAArB,OAAuC/mf,EAAvC,EAA+CA,IAC7Cq9Z,OAAY0pF,EAAUA,GAD4B,KAJvC,QASiCv0W,EAC5C6qR,EAAOA,KAVI,QASZ,gBATY,QASW,aATX,QAYbytW,UAZa,MAcf/2tB,YACEvjG,4DACyChlB,EADzCglB,GADQ,GAMR,mBANQ,GAOR,gBAPQ,KAQRs6zB,UARQ,UA3BTt/0B,EAAJ,EAAWkB,EAAKlE,KAAKui1B,aAA1B,WAAmDv/0B,EAAnD,EAA2DA,IAAK,EAAvDA,K,yBA0CXw/0B,YACMxi1B,KAAKyi1B,gBAAkBzi1B,KAAKqg1B,UAAUrG,UAA1C,IAIEh60B,KAAA,kBAAyB7D,EAJkC,GAO7D6D,KAAA,4CAAkD,CAChDitB,OADgD,KAEhDu8f,UAFgD,M,6BAMpDk5T,WACE1i1B,KAAA,4CAAkD,CAChDitB,OADgD,KAEhDu8f,WAFgD,M,wBAMpDm5T,WAAa,WACLp+pB,EAAWvkL,KAAKs+c,OADX,aAELskY,EAAmB5i1B,KAAKui1B,aAAa32kB,KAFhC,EAGL87Q,EAAW1nhB,KAAKui1B,aAHX,WAOX,GAFAvi1B,KAAA,mBALW,EAOPA,KAAJ,YAAsB,CAEpBA,KAAA,aAFoB,EAGpBA,KAAA,kBAAyBA,KAAKqg1B,UAAU1G,UAHpB,EAIpB350B,KAAA,gBAJoB,EAKpBA,KAAA,iBALoB,KAMpBA,KAAA,iBANoB,EAOpBA,KAAA,eAPoB,KAQpBA,KAAA,oBARoB,EASpBA,KAAA,0BAToB,EAUpBA,KAAA,mBAVoB,EAYpBA,KAZoB,kBAcpB,IAAK,IAAIgD,EAAT,EAAgBA,EAAhB,EAA8BA,IAExBhD,KAAK6i1B,oBAAoB5+0B,IAA7BjB,KAGAhD,KAAA,wBALiC,GAMjCA,KAAA,8BAAkCg60B,YAChC,6BAD2C,GAE3C,kBAF2C,OAQjD,QAAIh60B,KAAK8i1B,QAKT,IAAI9i1B,KAAJ,gBAIA,IAAM8N,EAAS9N,KA5CJ,QAiDX,GAHAA,KAAA,eA9CW,EAiDX,OAAI8N,EAAOA,SAAmB,CAC5B,IAAMi10B,EAAiB/i1B,KAAK4h1B,aAAa9z0B,EAAlB,SADK,OAE5B,IACIy2K,GAAYz2K,EAAOA,SAAWA,EAAhC,GACCy2K,GAAYz2K,EAAOA,SAFtB,EAGE,OAGAA,WAAkBy2K,EAAWz2K,EAAOA,SAAlBy2K,EAAiCz2K,EAAOA,SAH1D,OAIA9N,KAAA,cAJA,GASFA,KAAA,mBAd4B,GAiB9BA,KAlEW,uBAoCTA,KAAA,eAAoBu/0B,EADE,S,2BAkC1ByD,YACE,IAAMl10B,EAAS9N,KADM,QAEfij1B,EAAarrpB,EAFE,OAGfrT,EAAWvkL,KAAKs+c,OAHD,aAKrB,UAEExwc,WAAkBy2K,EAAW0+pB,EAAX1+pB,EAFJ,EAGdvkL,KAAA,cAHc,QAOhBA,KAAA,mBAZqB,MAajB8N,EAAJ,UACEA,WADkB,KAEd9N,KAAKkj1B,eAAT,MAEElj1B,KAAA,cAF2B,U,4BAYjCmj1B,WACE,OAAInj1B,KAAKki1B,gBACPl6zB,cADgC,uCAIlC,IAAI4vK,EALW,KAMf,EAAG,CACD,IAAMoipB,EAAUh60B,KAAKowO,QADpB,QAGD,KADAx4C,EAAU53L,KAAK4h1B,aAFd,IAGa,CAGZ5h1B,KAAA,eAHY,gBAMNA,KAAKgj1B,cAfA,M,gCAkBjBI,YACE,IAAMt10B,EAAS9N,KADY,QAErB0nhB,EAAW1nhB,KAAKui1B,aAFK,WAG3Bz00B,UAAiBy2K,EAAWz2K,EAAOA,QAAlBy2K,EAAgCz2K,EAAOA,QAH7B,EAI3BA,WAJ2B,KAM3B9N,KAN2B,kBAQvB8N,EAAOA,SAAWA,GAAYA,EAAOA,QAAzC,KACEA,UAAiBy2K,EAAWmjW,EAAXnjW,EADmC,EAEpDz2K,WAFoD,K,0BAMxDu10B,WAA4B,IAAftg0B,EAAe,wDACtBikB,EAAQu4yB,EADc,UAEpB3/oB,EAAU5/L,KAAKowO,QAFK,QAK1B,GAFApwO,KAAA,iBAH0B,EAK1B,EAAW,CACT,IAAM0y0B,EAAe1y0B,KAAKqg1B,UADjB,QAETrg1B,KAAA,kBAAyBA,KAAKowO,QAFrB,QAGTpwO,KAAA,mBAA0BA,KAAKowO,QAHtB,SAITppM,EAAQ44J,EAAU2/oB,EAAV3/oB,QAA8B2/oB,EAJ7B,OAOL7M,OAAuBA,IAAiB1y0B,KAAKqg1B,UAAjD,SACErg1B,KAAA,YADkE,GAKtEA,KAAA,iBAA2BA,KAAKs+c,OAjBN,eAkB1B,IAAIt+c,KAAKqg1B,UAAUrG,UAEjBh60B,KAAA,gBAFiC,EAIjCA,KAAA,YAAiBA,KAAKqg1B,UAJW,Y,6BAQrCN,YAAqB,WACb3+H,EAAcphtB,KADD,aAKnBA,KAAA,mCAAuC,YAGlC,EAAD,cACCohtB,GAAe,iBAFlB,IAOI,EAAJ,eACE76kB,aAAa,EADQ,cAErB,eAFqB,MAQnB,EAAJ,iBACE,iBADuB,KAEvB,eAFuB,GAKzB,iBAAoBg5sB,EAtBuB,OAwB3C,qBAxB2C,EAyB3C,EAzB2C,wB,kCA6B/C+D,WACE,MAA8Btj1B,KADT,UACf,EAAN,UAAM,EAAN,WACI8nC,EAAJ,EACEqyN,EAAQn6P,KAHW,mBAIrB,QAAI250B,EAAiB,CACnB,IAAK,IAAI320B,EAAT,EAAgBA,EAAhB,EAA6BA,IAAK,OAChC8kC,IAAW,UAAA9nC,KAAA,+CADqB,EAGlC8nC,GAAW6xyB,EAJQ,EAYrB,OAHI7xyB,EAAUA,GAAKA,EAAnB,KACEA,EAAUqyN,EADwB,GAG7B,CAAEryN,QAAF,EAAWqyN,W,mCAGpBoplB,WACEvj1B,KAAA,4CAAkD,CAChDitB,OADgD,KAEhDu2zB,aAAcxj1B,KAFkC,2B,4BAMpDyj1B,YAAwC,QAAlBl/pB,EAAkB,wDACtCvkL,KAAA,4CAAkD,CAChDitB,OADgD,KAEhD+Z,MAFgD,EAGhDu9I,SAHgD,EAIhDi/pB,aAAcxj1B,KAJkC,uBAKhD0j1B,6BAAU1j1B,KAAV0j1B,2BAAU,EAAVA,qBALgD,U,gCAltBtD,G,gICpBA,YACE,OAxDF,YACE,OAAOC,EAD+B,MAwDlCC,CAAJ,GApDF,YACE,OADyB,KAClB,MAACD,GAoDFltW,CAAJ,GAtCJ,YACE,OACektW,KAAbA,OACAA,GADAA,KAEAA,GAJ4B,KAK5BA,EAkCME,CAAJ,GACSC,EADmB,MAlDlC,YACE,OACGH,GAAYA,IAAkBA,GAA/B,KACCA,GAAYA,IAAkBA,GAHH,GAqDxBI,CAAaA,IA9CrB,YACE,OAAOJ,GAAYA,IAAkBA,GADP,GA+CxBK,CADAD,IADK,KAGLJ,EAEOG,EADP,aAGKA,EAVc,MAV3B,YACE,OADwB,QACjB,MAACH,GAoBKM,CAAJ,GACEH,EADoB,YAEtB,MAAIH,EACFG,EADkC,MAGpCA,EAjB2B,aA5BtC,YACE,OACGH,GAAYA,OAAUA,GAAvB,OACCA,GAAYA,OAAUA,GAHF,MAgDnBO,CAAJ,GACSJ,EADY,WAzCvB,YACE,OAAOH,GAAYA,OAAUA,GADD,MA2CjBQ,CAAJ,GACEL,EADwB,gBAvCnC,YACE,OAAOH,GAAYA,OAAUA,GADD,MAyCjBS,CAAJ,GACEN,EADwB,gBArCnC,YACE,OAAOH,GAAYA,OAAUA,GADQ,MAuC1BU,CAAJ,GACEP,EADiC,0BAGnCA,EA9B2B,cAlEpC,IAAMA,EAAgB,CACpBnnL,MADoB,EAEpB2nL,aAFoB,EAGpBC,MAHoB,EAIpBC,WAJoB,EAKpBC,gBALoB,EAMpBC,gBANoB,EAOpBC,0BAPoB,EAQpBC,YARoB,G,oJCGtB,WAlBA,Q,+0CAsDA,aACE,OAAO5+yB,SAASA,SADQ,K,IAI1B,aAIE1nC,cAAuC,WAA3B,EAA2B,EAA3B,YAAZA,EAAuC,EAAvCA,U,4FAAuC,SACrC0B,KAAA,YADqC,EAErCA,KAAA,SAFqC,EAIrCA,KAAA,cAJqC,EAKrCA,KAAA,aALqC,GAMrCA,KANqC,QAQrCA,KAAA,aARqC,KASrCA,KAAA,6BATqC,EAYrCA,KAAA,wCAA6CoxH,YAC3C,8BACEA,EAAIA,QAAUg7sB,wBAFkC,UAIpDps0B,KAAA,0BAA+B,WAC7B,kBADmC,EAGnC,8BAEEoxH,YACE,mBAAwBA,EADnB,aAGP,CAAE4mE,MAR+B,O,gDAkBvCvtH,YAAqE,IAA1D,EAA0D,EAA1D,YAA0D,IAA3Co6wB,oBAA2C,aAArBC,iBAAqB,SACnE,GAAK1gI,GAAL,kBAA2BA,EAA3B,CAOIpktB,KAAJ,cACEA,KADqB,QAGvB,IAAM+k1B,EACkB,KAAtB/k1B,KAAKqxvB,cAAuBrxvB,KAAKqxvB,eAZgC,EAanErxvB,KAAA,aAbmE,EAcnEA,KAAA,YAdmE,IAcjD8k1B,EAElB9k1B,KAAA,cAhBmE,EAiBnEA,KAjBmE,cAkBnE,IAAMgnC,EAAQtY,OAAOA,QAlB8C,MA6BnE,GATA1uB,KAAA,qBApBmE,EAqBnEA,KAAA,iBArBmE,EAsBnEA,KAAA,aAAoBgl1B,IACpBhl1B,KAAA,oBAvBmE,EAyBnEA,KAAA,KAAYA,KAAKil1B,QAzBkD,EA0BnEjl1B,KAAA,aA1BmE,KA2BnEA,KAAA,UA3BmE,MA6B9DA,KAAKkl1B,cAAcl+yB,GAApB,IAAJ,EAA0E,CACxE,MAAiChnC,KAAKml1B,mBADkC,GAClE,EAAN,OAAM,EAAN,OAAM,EAAN,WAIA,OAAKj/0B,GAAQ6+0B,GAAb,OAEE/k1B,KAAA,0BAF0C,QAO5CA,KAAA,oBACE,CAAEkG,KAAF,EAAQ0lQ,KAAR,EAAc4S,aAbwD,GAqB1E,IAAM1wE,EAAc9mK,EAlD+C,YAmDnEhnC,KAAA,uBAEEgnC,EAFF,KAnDmE,QAyDnE,IAAI8mK,EAAYA,WACd9tM,KAAA,iBAAwB8tM,EADc,UAGpCA,EAAJ,MACE9tM,KAAA,iBAAwB2O,KAAKA,UAAUm/L,EADnB,MAMpB9tM,KAAA,kBANoB,MAOX8tM,EAAJ,KACL9tM,KAAA,iBAAwB8tM,EADG,KAElBA,EAAJ,OAEL9tM,KAAA,gCAAgC8tM,EAFL,YAnE3B9lL,cADmD,0E,mBA8EvD2iD,WACM3qE,KAAJ,eACEA,KADqB,YAGrBA,KAAA,cAHqB,EAIrBA,KAJqB,iBAMnBA,KAAJ,yBACEumI,aAAavmI,KADkB,wBAE/BA,KAAA,uBAF+B,MAIjCA,KAAA,iBAXM,KAYNA,KAAA,iBAZM,O,kBAmBRoM,YAAqD,eAA9Cs2zB,iBAA8C,MAAhD,KAAgD,EAAhD,EAAgD,EAAhD,aAALt2zB,EAAqD,EAArDA,WACE,GAAKpM,KAAL,aAGA,GAAI0i0B,GAAJ,kBAAwBA,EACtB16yB,cACE,+BAF4C,EAC9CA,+CAKK,GAAKvmB,MAAMA,QAAX,GAMA,GAAKzB,KAAKol1B,aAAV,IAGcx9T,OAAfA,IAAuB5nhB,KAA3B,aAHK,CAYP,IAAMkG,EAAOw8zB,GAAa/zzB,KAAKA,UA5BoB,GA6BnD,MAMA,IAAI020B,GAnC+C,EAoCnD,GACErl1B,KAAKsl1B,eACJC,EAAkBvl1B,KAAKsl1B,aAAvB,SACCE,EAAkBxl1B,KAAKsl1B,aAAvBE,KAHJ,IAIE,CAMA,GAAIxl1B,KAAKsl1B,aAAT,KAA4B,OAG5BD,GATA,EAWErl1B,KAAKyl1B,sBAAT,IAIAzl1B,KAAA,oBACE,CACEkngB,KADF,EAEEhhgB,KAFF,EAGE0lQ,KAHF,EAIE4S,SAAUx+Q,KAAK8kjB,YAJjB,UAxDiD,GAiE9C9kjB,KAAL,sBAGEA,KAAA,qBAH6B,EAM7Bi/C,wBAAuB,WACrB,uBAD2B,aAnD3Bj3B,cACE,+BAF0C,EAC5CA,gDATFA,cACE,+BAFqC,EACvCA,+C,sBAuEJ09zB,YAAqB,aACd1l1B,KAAL,eAGKA,KAAKol1B,aAAV,IAOI,UAAApl1B,KAAA,2CAAJ,IAKIA,KAAJ,sBAIAA,KAAA,oBAAyB,CAEvBkngB,KAFuB,KAGvBhhgB,oBAHuB,GAIvB0lQ,KAJuB,EAKvB4S,SAAUx+Q,KAAK8kjB,YALQ,WAQpB9kjB,KAAL,sBAGEA,KAAA,qBAH6B,EAM7Bi/C,wBAAuB,WACrB,uBAD2B,QA7B7Bj3B,8CADkC,EAClCA,qC,iCAsCJ29zB,WACO3l1B,KAAD,eAAsBA,KAA1B,qBAGAA,KAJoB,4B,kBAWtB4l1B,WACE,GAAK5l1B,KAAD,eAAsBA,KAA1B,qBAGA,IAAMgnC,EAAQtY,OAAOA,QAJhB,MAKD1uB,KAAKkl1B,cAAcl+yB,IAAUA,EAAMA,IAAvC,GACEtY,eAD8C,U,qBASlDwyH,WACE,GAAKlhJ,KAAD,eAAsBA,KAA1B,qBAGA,IAAMgnC,EAAQtY,OAAOA,QAJb,MAKJ1uB,KAAKkl1B,cAAcl+yB,IAAUA,EAAMA,IAAMhnC,KAA7C,SACE0uB,eADyD,a,8BAS7D,WACE,OACE1uB,KAAK6l1B,eACJ7l1B,KAAKyl1B,qBAAuBzl1B,KAAK8l1B,iBAHb,K,2BAOzB,WACE,OAAO9l1B,KAAK6l1B,aAAe7l1B,KAApB,iBADa,O,2BAItB,WACE,OAAOA,KAAK6l1B,aAAe7l1B,KAApB,iBADa,O,iCAOtB+l1B,YAAuD,MAAtBV,EAAsB,wDAC/CW,EAAgBX,IAAiBrl1B,KADc,aAE/CqxH,EAAW,CACf+ylB,YAAapktB,KADE,aAEfgsD,IAAKg6xB,EAAgBhm1B,KAAhBgm1B,KAA4Bhm1B,KAAKim1B,KAFvB,EAGfn4oB,eAcF,GAHA9tM,KAAA,uBAAuCqxH,EAhBc,KAmBjDrxH,KAAKkm1B,YAAL,OAAmBp4oB,QAAnB,IAAmBA,KAAvB,KAA0C,CACxC,IAAMw/R,EAAUtnc,SAASA,SAASA,KAAKA,MAAMA,KADL,GAGnCsnc,EAAQA,WAAb,aACE64W,0BAAuBr4oB,EADW,OAItC,EACEp/K,iCADiB,GAGjBA,8BADK,K,qCAiBT03zB,WAA2C,IAAnBC,EAAmB,wDACzC,GAAKrm1B,KAAL,WAGA,IAAIi9G,EAAWj9G,KAJ0B,UAUzC,GALA,KACEi9G,EAAW7+G,OAAOA,OAAOA,OAAOA,OAArBA,MAAmC4B,KADjC,YAEbi9G,WAFa,GAKVj9G,KAAL,cAIA,GAAIA,KAAKsl1B,aAAT,UAEEtl1B,KAAA,uBAF+B,QAKjC,GAAIA,KAAKsl1B,aAAap/0B,OAAS+2G,EAA/B,OAIGj9G,KAAKsl1B,aAAN,QAEEtl1B,KAAKsm1B,qBA9bb,KA2bI,CAYA,IAAIjB,GAlCqC,EAmCzC,GACErl1B,KAAKsl1B,aAAa15kB,MAAQ3uJ,EAA1B,OACAj9G,KAAKsl1B,aAAa15kB,MAAQ3uJ,EAF5B,KAGE,CAMA,QAA+BnhH,IAA3BkE,KAAKsl1B,aAAap+U,OAAuBlngB,KAAKsl1B,aAAlD,MAAsE,OAItED,GAVA,EAYFrl1B,KAAA,sBAlDyC,SAWvCA,KAAA,oBADsB,M,0BA8C1Bol1B,YACE,OACEzj1B,OAAOA,UAAUA,IAAQsU,EAAzBtU,GAAoCsU,GAAOjW,KAAK8kjB,YAFlC,a,2BASlBogS,YAA0C,IAArBqB,EAAqB,wDACxC,MACE,OADU,EAGZ,GAAIv/yB,EAAMA,cAAgBhnC,KAA1B,aAA6C,CAC3C,MAgBE,OAHK,EAVL,GACE,kBAAOgnC,EAAP,aACAA,EAAMA,YAAYA,SAAWhnC,KAAKqxvB,aAFpC,OAIE,OADA,EAGF,MAAoB3+J,YAAYA,iBATjB,cASf,SAAM,EAAN,KACA,eAAI8zP,oCACF,OADgC,EAStC,SAAK7k1B,OAAOA,UAAUqlC,EAAlB,MAAgCA,EAAMA,IAA1C,IAG0BA,OAAtBA,EAAMA,aAAV,WAAkC,EAAOA,EAAP,e,kCASpCy/yB,cAAgE,IAAzBC,EAAyB,wDAC1D1m1B,KAAJ,yBAIEumI,aAAavmI,KAJkB,wBAK/BA,KAAA,uBAL+B,MAO7B0m1B,UAAmB54oB,QAAnB44oB,IAAmB54oB,KAAvB,kBAGSA,EAHsC,UAK/C9tM,KAAA,aAb8D,EAc9DA,KAAA,KAd8D,EAe9DA,KAAA,QAAejD,KAAKA,IAAIiD,KAATjD,QAf+C,GAiB9DiD,KAAA,oBAjB8D,I,+BAuBhEml1B,WAA0C,IAAxBwB,EAAwB,wDAClCzg1B,EAAOi4L,SAAS6mpB,KAAT7mpB,UAD2B,GAElCxrJ,GAASm2K,sBAFyB,GAIlC89nB,EAAYj0yB,EAAOA,IAAIA,cAJW,GAKpCi5N,EALoC,EAK7Bj5N,EAAOA,IAAIA,QAKtB,QAHK3yC,KAAKol1B,aAAN,IAA6BuB,GAAkBC,EAAUA,OAA7D,KACEh7kB,EADwE,MAGnE,CAAE1lQ,KAAF,EAAQ0lQ,KAAR,EAAc4S,SAAUx+Q,KAAK8kjB,YAA7B,Y,6BAMT+hS,YAA8B,WAA9BA,EAA8B,EAA9BA,SACM7m1B,KAAJ,yBACEumI,aAAavmI,KADkB,wBAE/BA,KAAA,uBAF+B,MAKjCA,KAAA,UAAiB,CACfkG,KAAMlG,KAAK8m1B,4BAAL,eACMr9xB,EADN,YAEFA,EAASA,cAAcA,UAHZ,GAIfmiN,KAAM5rQ,KAAK8kjB,YAJI,KAKf1hiB,MAAOqmC,EALQ,WAMf+0N,SAAU/0N,EANK,UASbzpD,KAAJ,sBAMEA,KADA+m1B,gBAEA/m1B,KAFA+m1B,eAGC/m1B,KAAKsl1B,aAJR,MAcEtl1B,KATA,sBA4BAA,KAAA,uBAA8B64C,YAAW,WAClC,EAAL,qBACE,2BAD6B,GAG/B,yBAJ6C,OArmBrD,Q,uBAinBEmuyB,YAAqB,WAArBA,EAAqB,EAArBA,MACQC,EAAUjC,IACdkC,EAAcln1B,KAAKmn1B,eAFF,EAKnB,GAFAnn1B,KAAA,aAHmB,EAKnB,GAiBA,GAAKA,KAAKkl1B,cAAV,IAQAll1B,KAAA,qBA9BmB,EAgCnB,IAUEA,KAVe,oBAWfon1B,0BAAqB,CACnBp6zB,OADmB,OAEnBxe,KAFmB,aAGnBm2F,MA/pBR,MA4pBMyivB,MAIQ,WACN,EADY,uBAMhB,IAAMt5oB,EAAc9mK,EArDD,YAsDnBhnC,KAAA,uBAEEgnC,EAFF,KAtDmB,IA4DfgmyB,qBAAgBl/nB,EAApB,YACE9tM,KAAA,qBAA4B8tM,EADa,UAGvCA,EAAJ,KACE9tM,KAAA,4BAAiC8tM,EADb,MAEXA,EAAJ,KACL9tM,KAAA,oBAAyB8tM,EADE,MAElBA,EAAJ,OAEL9tM,KAAA,iBAAwB8tM,EAFG,MAO7B7uJ,wBAAuB,WACrB,uBAD2B,UArE7B,CAQEj/C,KAFA,OAIA,MAAiCA,KAJjC,oBAIM,EAAN,OAAM,EAAN,OAAM,EAAN,WACAA,KAAA,oBACE,CAAEkG,KAAF,EAAQ0lQ,KAAR,EAAc4S,aANhB,M,uBAuEJ6okB,WAMOrn1B,KAAD,eAAsBA,KAAKsl1B,aAA/B,WACEtl1B,KADqD,4B,yBAQzDsn1B,WACMtn1B,KAAJ,eAGAA,KAAA,aAAoB,CAClBun1B,eAAgBvn1B,KAAK6m1B,gBAAgB/k0B,KADnB,MAElB0l0B,SAAUxn1B,KAAKgn1B,UAAUll0B,KAFP,MAGlB2l0B,SAAUzn1B,KAAKqn1B,UAAUvl0B,KAHP,OAMpB9hB,KAAA,8BAAoCA,KAAK0n1B,aAV7B,gBAWZh5zB,mCAAoC1uB,KAAK0n1B,aAX7B,UAYZh5zB,mCAAoC1uB,KAAK0n1B,aAZ7B,a,2BAkBdC,WACO3n1B,KAAL,eAGAA,KAAA,+BAAqCA,KAAK0n1B,aAJ5B,gBAKdh5zB,sCAAuC1uB,KAAK0n1B,aAL9B,UAMdh5zB,sCAAuC1uB,KAAK0n1B,aAN9B,UAQd1n1B,KAAA,aARc,S,gCAzqBlB,GAqrBA,gBACE,MAAwB,kBAAb4n1B,GAAX,kBAA2CC,IAGvCD,IAAJ,IAGkB9+nB,6BAP2B,eAQ7C,GAMF,gBACE,gBACE,GAAI,SAAJ,GACE,OADkC,EAGpC,GAAIrnN,MAAMA,QAAQA,IAAUA,MAAMA,QAAlC,GACE,OADiD,EAGnD,GAAc2hB,OAAVA,cAAkB,MAAtB,OAAmD4mO,EAAiB,CAClE,GAAI5rP,OAAOA,KAAKA,GAAOA,SAAWA,OAAOA,KAAKA,GAA9C,OACE,OAD4D,EAG9D,eACE,IAAK0p1B,EAAa1k0B,EAAb0k0B,GAAyB99lB,EAA9B,IACE,OAD0C,EAI9C,OATkE,EAWpE,OAAO5mO,IAAUA,GAAWzhB,OAAOA,MAAMA,IAAUA,OAAOA,MAlBvB,GAqBrC,IAAMF,MAAMC,QAAQqm1B,KAActm1B,MAAMA,QAAxC,GACE,OAD4D,EAG9D,GAAIsm1B,EAAUA,SAAWC,EAAzB,OACE,OAD0C,EAG5C,IAAK,IAAIhl1B,EAAJ,EAAWkB,EAAK6j1B,EAArB,OAAuC/k1B,EAAvC,EAA+CA,IAC7C,IAAK8k1B,EAAaC,EAAbD,GAA2BE,EAAhChl1B,IACE,OAD8C,EAIlD,OAjCgD,E,2JC5uBlD,OACA,O,glGAcA,aAIE1E,cAKG,WALS,EAKT,EALS,SAKT,IAHD2p1B,wBAGC,MALS,KAKT,MAFDC,wBAEC,MALS,KAKT,MADDC,2BACC,MALH7p1B,KAKG,G,4FAAA,SACD0B,KAAA,aADC,KAEDA,KAAA,WAFC,KAGDA,KAAA,iBAHC,KAIDA,KAAA,mBAJC,KAMDA,KAAA,WANC,KAODA,KAAA,YAAmB5B,OAAOA,OAPzB,MAQD4B,KAAA,QARC,EAUDA,KAAA,UAVC,EAWDA,KAAA,kBAXC,EAYDA,KAAA,kBAZC,EAaDA,KAAA,qBAbC,EAoBEA,KAHH,mBAKE0uB,6CAA6Cy4G,YAC3C,yCAA6C,CAC3Cl6G,OAD2C,OAE3C07hB,OAAQxhb,EAFmC,Y,+CAQnDq9kB,YACExktB,KAAA,WADmB,I,4DAIrB,sIACMA,KADN,6CAEUA,KAFV,8BAIEA,KAAA,aAJ6B,EAA/B,mEASwDi/C,QAAQwnJ,IAAI,CAChE26gB,EADgE,kBAEhEA,EAFgE,yBAGhEA,EAZJ,6CASQ,EATR,KASQ,EATR,KASQ,EATR,KAeO28B,GAfP,oCAiBU/9uB,KAjBV,iEAoBMohtB,IAAgBphtB,KApBtB,0EAwBIA,KAAA,WAAkBA,KADhB,mBAvBN,0DA0BIgoB,4FAAmD7Z,KADrC,QACd6Z,OA1BJ,UA4BUhoB,KA5BV,8DAgCEA,KAAA,yCAA8CmnI,aACxCA,wCAAJ,QAGA,qBAAwBA,EAJ6B,WAMvDnnI,KAAA,8CAAmDmnI,YAAS,MAC1D,8DAAwCA,EADkB,WAI5DnnI,KAAA,oCAAyC,YAA8B,IAA7B,EAA6B,EAA7B,WAAD,EAA8B,EAA9B,SACnC4nhB,IAAJ,IAGA,qBAJqE,GAKrE,oBALqE,OAOvE5nhB,KAAA,oCAAyC,YAAoB,IAApB,EAAoB,EAApB,WAClC,uBAAL,IAGI4nhB,IAAe,aAAnB,mBAGA,oBAP2D,MAS7D5nhB,KAAA,sEAAyC,6GACjC,qBAAwB,aADS,oDAGjC,EAHiC,+BAGjC,yBAAwC,CAC5CihC,GAD4C,MAE5CzyB,KAF4C,cAHP,OAQvC,6CARsD,UAAf,2CAAzC,kCAAAxO,KAAA,gBAWAA,KAAA,4BAAiCmnI,YAC/B,sBADwC,KAG1CnnI,KAAA,0BAA+BmnI,YAC7B,sBADsC,KAxE1C,IA4EiCnnI,KA5EjC,qBA4EE,2BAAqD,eAA1C,EAA0C,KAArD,EAAqD,KACnDA,KAAA,gBADmD,GA5EvD,kCA+EiCA,KA/EjC,gBA+EE,2BAAgD,eAArC,EAAqC,KAAhD,EAAgD,KAC9C0uB,0BAD8C,GA/ElD,yDAoFgC1uB,KApFhC,+BAoFUoo1B,EApFV,OAqFQhnI,IAAgBphtB,KArFxB,iFAyFUA,KAAKqo1B,WAAWC,cAAc,CAClCvqG,QADkC,EAElCwqG,iBAFkC,EAGlCC,QAAS,CACP32oB,SAAUb,UADH,SAEP11J,SAAU01J,UAFH,UAITy3oB,sBAEEl/wB,QAFO,MAhGf,QAsGIvpE,KAAA,oCAA0C,CAAEitB,OAnB1C,OAnFN,0DAwGIjF,4FAAmD7Z,KADrC,QACd6Z,OAxGJ,UA0GUhoB,KA1GV,yFA8GQA,KA9GR,+BA8GQ,yBAAwC,CAC5CihC,GAD4C,MAE5CzyB,KAF4C,SA9GhD,yBAkHQxO,KAAK0o1B,kBACT1o1B,KAAK2o1B,WADD,mBAlHR,WAwHE1pyB,wBAAuB,WACjBmiqB,IAAgB,EAApB,eACE,UADqC,MAzH3C,mE,wHA+HA,8HACSphtB,KADT,+BACS,yBAAwC,CAC7CihC,GAD6C,MAE7CzyB,KAF6C,cADjD,gD,uHAOA,8HACSxO,KADT,+BACS,yBAAwC,CAC7CihC,GAD6C,MAE7CzyB,KAF6C,aADjD,gD,yHAOA,8HACSxO,KADT,+BACS,yBAAwC,CAC7CihC,GAD6C,MAE7CzyB,KAF6C,eADjD,gD,wHAOA,8HACSxO,KADT,+BACS,yBAAwC,CAC7CihC,GAD6C,MAE7CzyB,KAF6C,cADjD,gD,6EAOA,WACE,OAAOxO,KADQ,c,0BAIjB,WAAqB,MACnB,OAAO,UAAAA,KAAA,mDADY,O,iBAIrB,WACE,OAAOA,KADG,S,2BAOZ,WACE,OAAO8hI,mCAAgC,IADnB,O,sBAOtB,WACE,OAAOA,8BAA2B,IADnB,O,4BAOjB,WACE,OAAOA,oCAAiC,IADnB,O,yBAOvB,WACE,OAAOA,iCAA8B,IADnB,O,mEAOpB,oHAEQktsB,EACJhv0B,KAAK2o1B,WAAW3Z,sBAChBhv0B,KAAK2o1B,WAJT,2BAMQ,EANyB,EAAjC,GAMQ,EANyB,EAAjC,SAMQ,EANyB,EAAjC,QAMQ,EANyB,EAAjC,sVAUQ3g0B,QADF,QATN,mCAaQA,cADF,GAZN,6FAmBc4g0B,GAAQC,gCAnBtB,GAoBQ7o1B,KAAA,sBAA6B4o1B,EAL/B,WAfN,oCAuBQ5o1B,KAAA,6BAAoCtE,EADtC,EAtBN,8CA0BcsE,KAAK2o1B,WA1BnB,4BA2BQ3o1B,KAAA,2BAAiC,CAAEitB,OAFrC,OAzBN,oCA8BQjF,YADF,GA7BN,6FAoCQhoB,KAAA,6BAJF,EAhCN,oCAuCQA,KAAA,0BAAgC,CAAEitB,OADpC,OAtCN,oCA0CQjtB,KAAA,6BADF,EAzCN,oCA6CQA,KAAA,6BAAoCA,KAAK2o1B,WAD3C,WA5CN,oCAgDQ3o1B,KAAA,WADF,WA/CN,oCAmDQA,KAAA,WADF,eAlDN,6FAyDQA,KAAA,WAJF,gBArDN,6FA+DQA,KAAA,WAJF,gBA3DN,0FAsEQ2ojB,EAtER,gEA0ESA,EA1EwB,UA2ExBA,EA3EwB,SA6EzBpkR,EAAMukjB,EAAW,CAAC7nzB,GAAZ,SAAA6nzB,IAA+B,CA7E7C,cA8EE,6BAA6B,SACrBhhpB,EAAU9hK,SAASA,eADE,IAGzB8hK,gBAAsB,IAAIihpB,YAAY,oBAAqB,CAAEpgS,YAG7D,UAAA3ojB,KAAA,0DAFK,GAlFX,+E,yHA4FA,yHAAoCyqE,EAApC,gCACQ22oB,EAAcphtB,KADtB,aAEIgp1B,EAAehp1B,KAFnB,cAIE,IACEA,KAAA,kBADc,gCAGXA,KAPP,sEAYMys0B,QAFEA,EAAWzs0B,KAAK2o1B,WAAWpc,YAA0B3kT,EAV7D,UAYM6kT,iCAA6B0E,kBAZnC,gCAaInx0B,KAAA,qBADyD,GAZ7D,0BAgBEA,KAAA,wBAhBsD,GAkBhDip1B,EAAkB,gIAEED,EAAaA,IAAd,GAFD,KAEC,UACnBvc,EADmB,4BACnBA,EADmB,eAFD,UAEhBljwB,EAFgB,OAKlB63oB,IAAgB,EALE,wFAShB,EATgB,+BAShB,yBAAwC,CAC5CngrB,GAD4C,OAE5CzyB,KAF4C,WAG5Co5gB,WAH4C,EAI5Cr+c,YAboB,6CAgBxBy/wB,QAlCsD,GAAxD,iD,0HAwCA,oGACQ5nI,EAAcphtB,KADtB,aAEIgp1B,EAAehp1B,KAFnB,cAIOA,KAJP,sEAOMA,KAAKkp1B,iBAAiBjl1B,IAP5B,uDAUQgl1B,EAAiBD,EAAaA,IAVtC,2DAcEA,QAdmC,MAArC,uBAkBM5nI,IAAgBphtB,KAlBtB,2FAsBQA,KAtBR,+BAsBQ,yBAAwC,CAC5CihC,GAD4C,OAE5CzyB,KAF4C,YAG5Co5gB,eAzBJ,iD,yHAmCA,gGACM5nhB,KADN,8DAEWA,KAAKmp1B,qBAAqBnp1B,KAFrC,+BAKoC5E,EALpC,IAKU,EALV,wCAOW+s1B,EAAoBno1B,KAP/B,+D,oFAeAop1B,WAGE,GAFApp1B,KAAA,oBADiB,+BAGbA,KAAJ,WACE,MAAM,IAAI4H,MADS,+CAGrB,OAAI5H,KAAJ,kBACSA,KAAKqp1B,kBAAkBC,gBAAgB,CAC5CrB,iBAAkBjo1B,KAFM,oBAQnB,IAAIup1B,EAFkBnu1B,EAZd,IAYf,kBAE4B4E,KAdb,qB,kEAsBnB,mHACOA,KADP,kCAEIA,KAAA,aADoB,KAGpB,UAAAA,KAAA,mCAHoB,UADxB,8BAOMA,KAPN,iDAQUi/C,QAAQqpD,KAAK,CACjBtoG,KAAKwp1B,iBADY,QAEjB,IAAIvqyB,SAAQC,YAEVrG,aAFqB,UAFnB,OAMG0yE,gBAdb,OAiBIvrH,KAAA,iBAVyB,KAP7B,cAmBEA,KAAA,aAnBwB,KAA1B,mBAsBUA,KAAKqo1B,WAtBf,uFAyBiCro1B,KAzBjC,qBAyBE,2BAAqD,eAA1C,EAA0C,KAArD,EAAqD,KACnDA,KAAA,iBADmD,GAzBvD,8BA4BEA,KAAA,gBA5BwB,QAA1B,IA8BiCA,KA9BjC,gBA8BE,2BAAgD,eAArC,EAAqC,KAAhD,EAAgD,KAC9C0uB,6BAD8C,GA9BlD,8BAiCE1uB,KAAA,WAjCwB,QAmCxBA,KAAA,iBAnCwB,QAoCxBA,KAAA,cApCwB,QAsCxBA,KAAA,WAtCwB,YAuCjBA,KAAKsljB,YAvCY,OAwCxBtljB,KAAA,QAxCwB,EA0CxB,UAAAA,KAAA,mCA1CwB,UAA1B,0D,uFA9bF,G,mJCfA,G,6EAFA,O,isCAEA,kHAEIste,GADI9rY,EADR,IAEkBA,MAAMA,KAFxB,YAKU4/mB,EALV,iCAIM,EAJN,OAIM,EAJN,WAIM,EAJN,6BAIM,EAJN,kDAQ6BA,EAR7B,mCAQU,EARV,SASI9pL,EAFkB,EAPtB,+CAcItmO,QAdJ,EAeIy4hB,SAfJ,EAgBI/0hB,SAAUwwN,IAA8B79C,2BAhB5C,GAiBI6mB,gBAAUA,QAAVA,IAAUA,OAAVA,EAAUA,EAjBd,SAkBIw7V,eAASx7V,QAATw7V,IAASx7V,OAATw7V,EAASx7V,MAlBb,cAmBIw5B,SAAU05L,EAnBd,SAoBI/mgB,IARK,KAZT,6C,0BAwBA,aACE/7M,e,4FAA8B,SAC5B0B,KAAA,QAAc,IAAAmoe,YAAA,YAGP,WACL,OAAOz5c,OAAOA,aADH,oB,sFAKf,qGACwB1uB,KADxB,qBAEE2p1B,OAFwB,GAA1B,gD,8HAKA,qGACwB3p1B,KADxB,qBAEE2p1B,cAFkC,GAApC,gD,sHAKA,oGACwB3p1B,KADxB,qBAAuB,cAAvB,gD,uFApBF,G,uBCxCA,KAGA,cAEA,WACA,cACA,iBAGA,YACA,KACA,UACA,YAUA,OANA,oBAGA,YAGA,UCxBA2le,EAAA,gBAGA,OAFA,WACA,4BACA,G,wsECYA,WAMA,OACA,QAtBA,oG,K7BUA,IARA,e,sJ8BIIikX,EACAC,EAMAC,EACAC,EACAC,EACAC,EACAC,E,gGANApqyB,EAAM,kBAAM/xB,KAAK+xB,OACjBqqyB,EAAa,GAMbC,EAAoB,SAAAhj1B,GAAI,OAAIA,EAAK0gC,SACjCwyP,EAA0C,qBAAX5rQ,OAAyBA,OAAO4rQ,sBAAwB,aACvFC,EAAyC,qBAAX7rQ,OAAyBA,OAAO6rQ,qBAAuB,aAInFp/O,EAAS,SAAAkld,GACb,IAAI36M,EAAiBtnT,OAAO+8C,OAAO,CACjCgvyB,aACAL,iBACAF,sBACAC,2BACAK,8BACAD,0BACAD,sBACAI,oBACA9vjB,wBACAC,uBACAwvjB,mBACC1pV,GAaH,OAXA8pV,EAAazkiB,EAAeykiB,WAC5BL,EAAiBpkiB,EAAeokiB,eAChCF,EAAsBlkiB,EAAekkiB,oBACrCC,EAA2BnkiB,EAAemkiB,yBAC1CK,EAA8BxkiB,EAAewkiB,4BAC7CD,EAA0BvkiB,EAAeukiB,wBACzCD,EAAsBtkiB,EAAeskiB,oBACrCI,EAAoB1kiB,EAAe0kiB,kBACnC9vjB,EAAwBorB,EAAeprB,sBACvCC,EAAuBmrB,EAAenrB,qBACtCwvjB,EAAkBrkiB,EAAeqkiB,gBAC1BrkiB,GAmBH2kiB,E,WACJ,aAAc,oBACZrq1B,KAAKknC,aAAU,EACflnC,KAAKsmC,SAAW,G,oDAGlB,WACE,OAAOtmC,KAAK0tL,a,wBAGd,WACE,OAAO1tL,KAAKknC,SAAWlnC,O,oBAGzB,c,oBAEA,c,yBAEA,WACE,OAAOA,KAAKsmC,W,sBAGd,SAAS4T,GACsB,IAAzBl6C,KAAKsmC,SAASzkC,QAAc7B,KAAK2uV,SACrC3uV,KAAKsmC,SAASl6B,KAAK8tC,K,yBAGrB,SAAYA,GACV,IAAM/9C,EAAQ6D,KAAKsmC,SAAS9lB,QAAQ05B,GACpCl6C,KAAKsmC,SAASl3B,OAAOjT,EAAO,GACC,IAAzB6D,KAAKsmC,SAASzkC,QAAc7B,KAAKwoQ,a,KAInC8hlB,E,kDACJ,aAAc,kCACZ,eAAS5m1B,YACJwjC,aAAU,EAFH,E,0CAKd,WAAS,WACPlnC,KAAKknC,QAAQx6B,SAAQ,SAAA+oE,GAAC,OAAIA,aAAa40wB,GAAY50wB,EAAE80wB,SAAS,Q,oBAGhE,WAAS,WACPvq1B,KAAKknC,QAAQx6B,SAAQ,SAAA+oE,GAAC,OAAIA,aAAa40wB,GAAY50wB,EAAE0nO,YAAY,U,GAXzCktiB,GAetBG,E,kDACJ,WAAYtjzB,GAAS,kCACnB,gBACKA,QAAUA,EAFI,E,4CAKrB,SAAS8wrB,QACU,IAAbA,IACFA,GAAW,GAGb,IAAM9wrB,EAAU,GAEhB,IAAK,IAAM5iC,KAAOtE,KAAKknC,QAAS,CAC9B,IAAMxrC,EAAQsE,KAAKknC,QAAQ5iC,KACvB0ztB,GAAct8tB,aAAiB2u1B,KACnCnjzB,EAAQ5iC,GAAO5I,aAAiB2u1B,EAAW3u1B,EAAMs8tB,EAAW,mBAAqB,cAAgBt8tB,GAGnG,OAAOwrC,I,8BAGT,WACE,OAAOlnC,KAAK0tL,UAAS,K,oBAGvB,WAAS,WACPtvL,OAAO+M,OAAOnL,KAAKknC,SAASx6B,SAAQ,SAAAc,GAAC,OAAIA,aAAa680B,GAAY780B,EAAE+80B,SAAS,Q,oBAG/E,WAAS,WACPns1B,OAAO+M,OAAOnL,KAAKknC,SAASx6B,SAAQ,SAAAc,GAAC,OAAIA,aAAa680B,GAAY780B,EAAE2vS,YAAY,U,GA/BvDktiB,GAoCvBI,E,kDACJ,WAAYnvuB,GAAO,gCACH,IAAVA,IACFA,EAAQ,IAFO,YAKXA,EAAM+gB,WAAa4ttB,EAA0BngzB,YAAS,GAAIwxE,EAAO,CACrE+gB,UAAW4ttB,EAAwB3uuB,EAAM+gB,aACtC/gB,G,UARmBkvuB,GAatBll1B,EAAK,CACTuI,IAAKpM,MAAMC,QACXoF,IAAK,SAAAnB,GAAC,MAA0C,oBAAtCvH,OAAOD,UAAU8C,SAASD,KAAK2E,IACzC+pO,IAAK,SAAA/pO,GAAC,MAAiB,oBAANA,GACjB6iB,IAAK,SAAA7iB,GAAC,MAAiB,kBAANA,GACjBuzG,IAAK,SAAAvzG,GAAC,MAAiB,kBAANA,GACjB+k1B,IAAK,SAAA/k1B,GAAC,YAAU,IAANA,GACVgl1B,IAAK,SAAAhl1B,GAAC,MAAiB,mBAANA,IAEnB,SAASil1B,IACP,IACMl0wB,EADYh4B,oBAAS,GACP,GAGpB,OADoBwqE,uBAAY,kBAAMxyC,GAAE,SAAAt2E,GAAC,OAAKA,OAAI,IAGpD,SAASyq1B,EAAYnv1B,EAAO6hD,GAC1B,OAAgB,MAAT7hD,EAAgB6hD,EAAe7hD,EAExC,SAASkH,EAAQ+C,GACf,OAAOL,EAAGol1B,IAAI/k1B,GAAK,GAAKlE,MAAMC,QAAQiE,GAAKA,EAAI,CAACA,GAElD,SAASml1B,EAAShk1B,GAChB,IAAK,IAAIikB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,GAAKvnB,UAAUunB,GAG7B,OAAO3lB,EAAGoqO,IAAI5oO,GAAOA,EAAG,WAAH,EAAOkkB,GAAQlkB,EA2BtC,SAASik1B,EAAc7gzB,GACrB,IAAMg3G,EAzBR,SAAyBh3G,GAqBvB,OApBWA,EAAMj7B,GACJi7B,EAAMl7B,KACJk7B,EAAMwb,OACLxb,EAAM2kT,QACP3kT,EAAM8gzB,OACL9gzB,EAAM+gzB,QACL/gzB,EAAM5D,SACR4D,EAAMre,OACPqe,EAAMygC,MACJzgC,EAAMpnC,QACRonC,EAAM45Q,MACF55Q,EAAMm+Q,UACVn+Q,EAAMy6D,MACLz6D,EAAMykT,OACHzkT,EAAMy6e,UACFz6e,EAAM6gzB,cAChB7gzB,EAAMzuC,IACLyuC,EAAM6nO,KACHroO,YAA8BQ,EAAO,CAAC,KAAM,OAAQ,SAAU,UAAW,SAAU,UAAW,WAAY,SAAU,QAAS,UAAW,QAAS,YAAa,QAAS,SAAU,YAAa,gBAAiB,MAAO,SAMtNghzB,CAAgBhhzB,GAMhC,OALAA,EAAQ9rC,OAAOuL,QAAQugC,GAAOv+B,QAAO,SAACu+B,EAAO7D,GAC3C,IAAI/hC,EAAM+hC,EAAK,GACX3qC,EAAQ2qC,EAAK,GACjB,OAAO/hC,KAAO48I,IAAYh3G,EAAM5lC,GAAO5I,GAAQwuC,IAC9C,IACIJ,YAAS,CACd76B,GAAIiyI,GACHh3G,GAcL,SAASihzB,EAAQzv1B,GACf,IAAM0v1B,EAAUlgzB,sBAAOpvC,GACjBwb,EAAO8z0B,EAAQtjzB,QAErB,OADAsjzB,EAAQtjzB,QAAUpsC,EACX4b,E,IAwFH+z0B,E,kDACJ,WAAYlg1B,GAAQ,kCAClB,gBACK+7B,QAAU/7B,EAFG,E,4CAKpB,WACE,OAAOnL,KAAKknC,QAAQl+B,KAAI,SAAA5I,GAAC,OAAIA,EAAEstL,gB,sBAGjC,SAAShyL,EAAOo2L,GAAO,gBACP,IAAVA,IACFA,GAAQ,GAGNxsL,EAAGuI,IAAInS,GACLA,EAAMmG,SAAW7B,KAAKknC,QAAQrlC,QAChCnG,EAAMgR,SAAQ,SAACtM,EAAG4C,GAAJ,OAAU,EAAKkkC,QAAQlkC,GAAG2uT,SAASvxT,EAAG0xL,MAGtD9xL,KAAKknC,QAAQx6B,SAAQ,SAAA+oE,GAAC,OAAIA,EAAEk8O,SAASj2T,EAAOo2L,Q,yBAIhD,WACE,IAAK,IAAI/mK,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAOi/zB,EAA2B,WAA3B,GAA4Blq1B,MAA5B,OAAqCgrB,Q,GA7Bfs/zB,GAkC3BgB,EAAqB,SAArBA,EAAsB71pB,EAAO50C,EAAQ0qsB,GACzC,GAAIjm1B,EAAGoqO,IAAIj6C,GACT,OAAOA,EAGT,GAAInwL,EAAGuI,IAAI4nL,GACT,OAAO61pB,EAAmB,CACxB71pB,QACA50C,OAAQA,EACR0qsB,gBAIJ,GAAIjm1B,EAAGkjB,IAAIitK,EAAM50C,OAAO,IACtB,OAAOgpsB,EAAyBp0pB,GAGlC,IAAM/vI,EAAS+vI,EACT+1pB,EAAc9lyB,EAAOm7F,OACrB4qsB,EAAa/lyB,EAAO+vI,OAAS,CAAC,EAAG,GACjCi2pB,EAAkBhmyB,EAAOgmyB,iBAAmBhmyB,EAAO6lyB,aAAe,SAClEI,EAAmBjmyB,EAAOimyB,kBAAoBjmyB,EAAO6lyB,aAAe,SAEpEn1f,EAAS1wS,EAAO0wS,QAAW,SAAArqU,GAAC,OAAIA,GAEtC,OAAO,SAAA04F,GACL,IAAMgxE,EA2BV,SAAmBhxE,EAAOgnuB,GACxB,IAAK,IAAIzo1B,EAAI,EAAGA,EAAIyo1B,EAAW5p1B,OAAS,KAAY4p1B,EAAWzo1B,IAAMyhH,KAAxBzhH,GAE7C,OAAOA,EAAI,EA9BK4o1B,CAAUnnuB,EAAOgnuB,GAC/B,OAIJ,SAAqBhnuB,EAAOonuB,EAAUC,EAAUC,EAAWC,EAAW51f,EAAQs1f,EAAiBC,EAAkB3i1B,GAC/G,IAAI4K,EAAS5K,EAAMA,EAAIy7G,GAASA,EAEhC,GAAI7wG,EAASi40B,EAAU,CACrB,GAAwB,aAApBH,EAAgC,OAAO930B,EAAoC,UAApB830B,IAA6B930B,EAASi40B,GAGnG,GAAIj40B,EAASk40B,EAAU,CACrB,GAAyB,aAArBH,EAAiC,OAAO/30B,EAAqC,UAArB+30B,IAA8B/30B,EAASk40B,GAGrG,GAAIC,IAAcC,EAAW,OAAOD,EACpC,GAAIF,IAAaC,EAAU,OAAOrnuB,GAASonuB,EAAWE,EAAYC,EAE9DH,KAAc/u1B,IAAU8W,GAAUA,EAAgBk40B,IAAahv1B,IAAU8W,GAAkBi40B,EAAcj40B,GAAUA,EAASi40B,IAAaC,EAAWD,GAExJj40B,EAASwiV,EAAOxiV,GAEZm40B,KAAejv1B,IAAU8W,GAAUA,EAAgBo40B,IAAclv1B,IAAU8W,GAAkBm40B,EAAen40B,EAASA,GAAUo40B,EAAYD,GAAaA,EAC5J,OAAOn40B,EAvBEynC,CAAYopE,EAAOgnuB,EAAWh2pB,GAAQg2pB,EAAWh2pB,EAAQ,GAAI+1pB,EAAY/1pB,GAAQ+1pB,EAAY/1pB,EAAQ,GAAI2gK,EAAQs1f,EAAiBC,EAAkBjmyB,EAAO18C,O,IAkChKij1B,E,kDACJ,WAAY9gC,EAASngyB,GAAM,kCACzB,gBACKq/pB,UAAO,EACZ,EAAKA,KAAOihK,EAAkB,WAAlB,cAAsBtg0B,IAClC,EAAKkc,QAAUzlC,MAAMC,QAAQypzB,GAAWA,EAAUA,aAAmBkgC,EAAqBlgC,EAAQ+gC,aAAe,CAAC/gC,GAJzF,E,4CAO3B,WACE,IAAMngyB,EAAOhrB,KAAKknC,QAAQl+B,KAAI,SAAAtN,GAAK,OAAIA,EAAMgyL,cAC7C,OAAO1tL,KAAKqqrB,KAAL,MAAArqrB,KAAA,YAAagrB,M,yBAGtB,WACE,IAAK,IAAID,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAOi/zB,EAA2B,WAA3B,GAA4Blq1B,MAA5B,OAAqCgrB,Q,GAlBZs/zB,GA4EpC,IAAIrnkB,GAAS,EACPkpkB,EAAc,IAAItt1B,IAElByR,EAAS,SAATA,IACJ,IAAK2yQ,EAAQ,OAAO,EACpB,IAFmB,EAEfh3N,EAAOnM,IAFQ,cAIIqsyB,GAJJ,IAInB,2BAAoC,CAKlC,IALkC,IAA3BzwkB,EAA2B,QAC9Bg2B,GAAW,EAEXzqQ,EAAc,EAETmlzB,EAAY,EAAGA,EAAY1wkB,EAAW2wkB,QAAQxq1B,OAAQuq1B,IAAa,CAI1E,IAHA,IAAI1myB,EAASg2N,EAAW2wkB,QAAQD,GAC5BE,OAAc,EAAEC,OAAQ,EAEnBC,EAAS,EAAGA,EAAS9myB,EAAO+myB,eAAe5q1B,OAAQ2q1B,IAAU,CACpE,IAAIx0H,EAAWtyqB,EAAO+myB,eAAeD,GACrC,IAAIx0H,EAAS13tB,KAAb,CACA2mC,IACA,IAAIh4B,EAAKy2C,EAAOgnyB,SAASF,GACrBG,EAAa190B,aAAco70B,EAG/B,GAFIsC,IAAY190B,EAAKA,EAAGy+K,YAEpBhoI,EAAO2iQ,UACT2va,EAASrma,SAAS1iT,GAClB+otB,EAAS13tB,MAAO,MAFlB,CAMA,IAAI0O,EAAO02C,EAAOknyB,WAAWJ,GAE7B,GAAoB,kBAATx90B,GAAmC,kBAAPC,EAAvC,CAMA,IAAIguG,EAAW+6mB,EAAS60H,aACpBr3H,EAAW/ztB,MAAMC,QAAQgkD,EAAOonyB,iBAAmBpnyB,EAAOonyB,gBAAgBN,GAAU9myB,EAAOonyB,gBAE/F,QAAwB,IAApBpnyB,EAAOgvE,SAETzX,EAAWjuG,EAAO02C,EAAO0wS,QAAQnqS,EAAO+rqB,EAASt4lB,WAAah6E,EAAOgvE,WAAazlH,EAAKD,GACvFs90B,EAAiBrgyB,GAAQ+rqB,EAASt4lB,UAAYh6E,EAAOgvE,cAChD,GAAIhvE,EAAOqnyB,MAAO,CACvB,IAAMA,GAAyB,IAAjBrnyB,EAAOqnyB,MAAiB,KAAQrnyB,EAAOqnyB,MAGrD9vuB,EAAWjuG,EAAOwmtB,GAAY,EAAIu3H,IAAU,EAAIhw1B,KAAKmkG,MAAM,EAAI6rvB,IAAU9gyB,EAAO+rqB,EAASt4lB,cACzF4stB,EAAiBvv1B,KAAKijB,IAAIg4sB,EAAS60H,aAAe5vuB,GAAY,MAC1ChuG,EAAKguG,OACpB,CAELsvuB,OAAiC,IAAtBv0H,EAASu0H,SAAsBv0H,EAASu0H,SAAWtgyB,EAC9DupqB,OAAqC,IAA1BwC,EAASg1H,aAA0Bh1H,EAASg1H,aAAetnyB,EAAOonyB,gBAEzE7gyB,EAAOsgyB,EAAW,KAAIA,EAAWtgyB,GAIrC,IAFA,IAAIghyB,EAAWlw1B,KAAKwjB,MAAM0rC,EAAOsgyB,GAExBvp1B,EAAI,EAAGA,EAAIiq1B,IAAYjq1B,EAAG,CAKjCi6G,GAAiC,GADjCu4mB,GAAqC,KAHxB9vqB,EAAOwnyB,SAAWjwuB,EAAWhuG,IAC3By2C,EAAOynyB,SAAW33H,GACM9vqB,EAAO0nyB,MACL,KACJ,IAIvC,IAAIC,KAAiB3nyB,EAAOqiF,OAA4B,IAAnBriF,EAAOwnyB,WAAgBl+0B,EAAOC,EAAKguG,EAAWhuG,EAAKguG,EAAWhuG,GAC/Fq+0B,EAAavw1B,KAAKijB,IAAIw1sB,IAAa9vqB,EAAO2mI,UAC1CkhqB,EAAoC,IAAnB7nyB,EAAOwnyB,SAAgBnw1B,KAAKijB,IAAI/Q,EAAKguG,IAAav3D,EAAO2mI,UAC9EigqB,EAAiBe,GAAkBC,GAAcC,EACjDv1H,EAASg1H,aAAex3H,EACxBwC,EAASu0H,SAAWtgyB,EAIlB0gyB,IAAejnyB,EAAOgnyB,SAASF,GAAQls1B,OACzCgs1B,GAAiB,GAGfA,GAEEt0H,EAASt8tB,QAAUuT,IAAIguG,EAAWhuG,GACtC+otB,EAAS13tB,MAAO,GAEhBoxS,GAAW,EAGbsmb,EAASrma,SAAS10M,GAClB+6mB,EAAS60H,aAAe5vuB,OA3DtB+6mB,EAASrma,SAAS1iT,GAClB+otB,EAAS13tB,MAAO,IA8DhBo7Q,EAAWxxO,MAAM+gzB,UACnBvvkB,EAAWvwQ,OAAOu6C,EAAOphD,KAAOohD,EAAOsyqB,SAAStqiB,YAIpDguF,EAAWuvkB,QAAQv5iB,EAAUzqQ,IAlGZ,8BA4GnB,OANIklzB,EAAYpw1B,KACVgu1B,EAAiBA,IAAuBzvjB,EAAsBhqR,GAElE2yQ,GAAS,EAGJA,GAuCT,SAASuqkB,EAAkBpm1B,EAAMw0E,GAC3B,WAAYx0E,EACdw0E,EAAOj9D,IAAIvX,GAEXA,EAAKyyC,cAAcntC,SAAQ,SAAAwtC,GAAK,OAAIszyB,EAAkBtzyB,EAAO0hC,M,IAI3D6xwB,E,kDACJ,WAAYtk0B,GAAQ,MACdwuB,EADc,2BAGlB,eACAA,EAAQ,eACR,EAAK+1yB,eAAiB,IAAI7u1B,IAC1B,EAAKnD,WAAQ,EACb,EAAKigS,mBAAgB,EACrB,EAAKkxjB,kBAAe,EACpB,EAAKG,kBAAe,EACpB,EAAKtttB,eAAY,EACjB,EAAK6stB,cAAW,EAChB,EAAKjs1B,MAAO,EAEZ,EAAKqxT,SAAW,SAAUj2T,EAAOo2L,QACjB,IAAVA,IACFA,GAAQ,GAGVn6I,EAAMj8C,MAAQA,EACVo2L,GAAOn6I,EAAMm6I,SAGnB,EAAKp2L,MAAQytB,EAET7jB,EAAG4zG,IAAI/vF,KACT,EAAKwyQ,cAAgBxyQ,EACrB,EAAK0j0B,aAAe1j0B,GA3BJ,E,4CA+BpB,WACE,OAAOnpB,KAAKtE,Q,yBAGd,WACE,IAAK,IAAIqvB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAOi/zB,EAA2B,WAA3B,GAA4Blq1B,MAA5B,OAAqCgrB,M,mBAG9C,SAAM0mR,GACApsS,EAAG4zG,IAAIl5G,KAAKtE,SACdsE,KAAK27R,cAAgB37R,KAAKtE,MAC1BsE,KAAK6s1B,aAAe7s1B,KAAKtE,MACzBsE,KAAKgt1B,aAAet7iB,EAAW1xS,KAAKgt1B,kBAAelx1B,EACnDkE,KAAKus1B,SAAW76iB,EAAW1xS,KAAKus1B,cAAWzw1B,EAC3CkE,KAAK0/H,UAAY5/E,KAGnB9/C,KAAKM,MAAO,EACZN,KAAK0t1B,eAAex60B,U,yBAGtB,WACElT,KAAK0t1B,eAAex60B,U,mBAGtB,WACmC,IAA7BlT,KAAK0t1B,eAAe3x1B,MACtByx1B,EAAkBxt1B,KAAMA,KAAK0t1B,gBAG/B1t1B,KAAK0t1B,eAAehh1B,SAAQ,SAAAih1B,GAAa,OAAIA,EAAcr90B,gB,GAlEnC+50B,GAwEtBuD,EAAS,SAAA7h0B,GAAC,OAAIA,GAEd8h0B,EAAWzv1B,OAAO+hV,OAAO,IAC3B6mR,EAAS,EACP8mP,E,WACJ,WAAY5jzB,GAAO,oBACjBlqC,KAAKihC,GAAK+lkB,IACVhnmB,KAAKitS,MAAO,EACZjtS,KAAK+t1B,SAAW,EAChB/t1B,KAAK2khB,WAAY,EACjB3khB,KAAKkqC,MAAQ,GACblqC,KAAKusJ,MAAQ,GACbvsJ,KAAKgu1B,WAAa,GAClBhu1B,KAAKmL,OAAS,GACdnL,KAAK6R,OAAS,GACd7R,KAAKg4tB,SAAW,GAChBh4tB,KAAKiu1B,WAAa,GAClBju1B,KAAKqs1B,QAAU,GACfrs1B,KAAKku1B,WAAa,GAClBlu1B,KAAKmu1B,YAAc,EACfjkzB,GAAOlqC,KAAKsQ,OAAO45B,GAAOnqB,Q,0CAUhC,SAAOqu0B,GACL,IAAKA,GAAYpu1B,KAAK2khB,UAAW,OAAO3khB,KACxC,IAAMkqC,EAAQ6gzB,EAAcqD,GAS5B,GANApu1B,KAAKqu1B,gBAAgBnkzB,EAAMl7B,MAAM,GAEjChP,KAAKqu1B,gBAAgBnkzB,EAAMj7B,IAE3Bi7B,EAAMywT,UAAY76S,IAEdx6C,EAAGoqO,IAAIxlM,EAAMy6D,QAAUr/F,EAAGwB,IAAIojC,EAAMj7B,IAAK,CAC3C,IAAMD,EAAOk7B,EAAMl7B,MAAQ6+0B,EAE3B,IAAK,IAAMvp1B,KAAO4lC,EAAMj7B,GACtBjP,KAAKusJ,MAAMngJ,KAAK09B,YAAS,GAAII,EAAO,CAClCj7B,GAAI,eACD3K,EAAM4lC,EAAMj7B,GAAG3K,IAElB0K,KAAM1K,KAAO0K,EAAP,eACH1K,EAAM0K,EAAK1K,SACV,EACJqgG,MAAO5nG,KAAKC,IAAI,EAAGD,KAAKo/E,MAAMjyC,EAAMy6D,MAAMrgG,aAI9C4lC,EAAMy6D,MAAQr/F,EAAG4zG,IAAIhvE,EAAMy6D,OAAS5nG,KAAKC,IAAI,EAAGD,KAAKo/E,MAAMjyC,EAAMy6D,QAAU,EAEtEz6D,EAAMj7B,KAAIi7B,EAAMj7B,QAAK,GACrBi7B,EAAMl7B,OAAMk7B,EAAMl7B,UAAO,GAC9BhP,KAAKusJ,MAAMngJ,KAAK89B,GAGlB,OAAOlqC,O,mBAQT,SAAM8vV,GAEJ,OADI9vV,KAAKusJ,MAAM1qJ,OAAQ7B,KAAKsu1B,OAAOx+f,GAAY9vV,KAAKigB,OAAO6vU,GACpD9vV,O,kBAKT,WACE,IADK,WACI+qB,EAAOrnB,UAAU7B,OAAQC,EAAO,IAAIL,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EnpB,EAAKmpB,GAAQvnB,UAAUunB,GAGzB,IAAIsj0B,GAAW,EAEf,GAAIjp1B,EAAGql1B,IAAI7o1B,EAAK,IAAK,CACnB,IAAIuC,EAAQvC,EACZys1B,EAAWlq1B,EAAM,GACjBvC,EAAOuC,EAAMyL,MAAM,GAIrB,GAAIhO,EAAKD,OAAQ,qBACGC,GADH,yBACJwC,EADI,QAEPnI,EAAQ,EAAKkw1B,QAAQrm0B,WAAU,SAAA0/B,GAAM,OAAIphD,IAAQohD,EAAOphD,OAE9D,EAAKkq1B,eAAelq1B,GAEpB,EAAK+n1B,QAAQlw1B,GAAS,EAAK8x1B,WAAW3p1B,IALxC,2BAAwB,IADT,oCASRtE,KAAK+t1B,WACV/t1B,KAAKmu1B,YAAcruyB,IAEnB9/C,KAAKqs1B,QAAQ3/0B,SAAQ,SAAAg5C,GAAM,OAAI,EAAK8oyB,eAAe9oyB,EAAOphD,QAC1DtE,KAAKqs1B,QAAUju1B,OAAO+M,OAAOnL,KAAKiu1B,YAElCju1B,KAAKyu1B,MAAMF,IAGf,OAAOvu1B,O,mBAKT,WAaE,OAXAA,KAAK2xS,OAEL3xS,KAAK2khB,WAAY,EACjB3khB,KAAKkqC,MAAQ,GACblqC,KAAKusJ,MAAQ,GACbvsJ,KAAKgu1B,WAAa,GAClBhu1B,KAAKmL,OAAS,GACdnL,KAAK6R,OAAS,GACd7R,KAAKg4tB,SAAW,GAChBh4tB,KAAKiu1B,WAAa,GAClBju1B,KAAKqs1B,QAAU,GACRrs1B,O,qBAKT,WACOA,KAAK2khB,YACR3khB,KAAK2xS,OACL3xS,KAAK2khB,WAAY,K,qBAMrB,SAAQjzO,EAAUzqQ,GAChB,GAAIA,EAAa,CACf,IAAMgkzB,EAAUjr1B,KAAKkqC,MAAM+gzB,QACvBA,GAASA,EAAQnhzB,YAAS,GAAI9pC,KAAKmL,SAGpCumS,GAAU1xS,KAAKyu1B,OAAM,K,qBAU5B,SAAQnq1B,EAAK5I,GAGX,OAFAsE,KAAKkqC,MAAM5lC,GAAO5I,EAClBsE,KAAKgu1B,WAAW1p1B,GAAOw7C,IAChB9/C,O,6BAIT,SAAgBmL,EAAQi4kB,GAKtB,QAJqB,IAAjBA,IACFA,GAAe,GAGZ99kB,EAAGwB,IAAIqE,GAEZ,IAAK,IAAM7G,KAAO6G,EAAQ,CACxB,IAAMzP,EAAQyP,EAAO7G,GACjB0ztB,EAAWh4tB,KAAKg4tB,SAAS1ztB,GAEzB0ztB,GAAY50I,GAAgBpjlB,KAAKiu1B,WAAW3p1B,GAAKmkL,QAE/CuviB,EAASrma,SACXqma,EAASrma,SAASj2T,GAGlBs8tB,EAAW,MAIVA,KACHA,EAAW02H,EAAehz1B,KAGpBsE,KAAKg4tB,SAAS1ztB,IAEhBqq1B,EAAa3u1B,KAAKg4tB,SAAS1ztB,GAAM0ztB,GAGnCh4tB,KAAKg4tB,SAAS1ztB,GAAO0ztB,EAErBh4tB,KAAKwu1B,eAAelq1B,GAAK,IAEzB0jB,QAAQC,KAAK,8BAA+BvsB,O,oBAOpD,SAAOo0V,GACD9vV,KAAK+t1B,SAAU/t1B,KAAKku1B,WAAW9h1B,KAAK0jV,GAAYA,GAAM,K,oBAI5D,SAAOA,GAvUK,IAAAp0E,EAwUNo0E,GAAO9vV,KAAK4u1B,OAAO9+f,GAEnB9vV,KAAKitS,MAAQjtS,KAAK+t1B,WACpB/t1B,KAAKitS,MAAO,EA3UJvxB,EA4UF17Q,KA3UVms1B,EAAYxt0B,IAAI+8P,GAEXuH,IACHA,GAAS,EACL8mkB,EAAiBA,IAAuBzvjB,EAAsBhqR,O,mBA4UpE,SAAMi+0B,GAxUK,IAAA7ykB,EAyUT17Q,KAAKitS,MAAO,EAzUHvxB,EA0UJ17Q,KAzUPms1B,EAAY3juB,OAAOkzJ,GA0UjB,IAAMwykB,EAAalu1B,KAAKku1B,WAEpBA,EAAWrs1B,SACb7B,KAAKku1B,WAAa,GAClBA,EAAWxh1B,SAAQ,SAAAojV,GAAK,OAAIA,EAAMy+f,S,oBAKtC,SAAOz+f,GAAO,WACNvjM,EAAQvsJ,KAAKusJ,MAAM5gJ,OAAOkj1B,EAAc,IAC9C7u1B,KAAKusJ,MAAM1qJ,OAAS,EAEpB,IAAIit1B,EAAW1w1B,OAAO0D,KAAKyqJ,GAAO1qJ,OAClC7B,KAAK+t1B,UAAYe,EAGjB,IAAMC,EAAW,SAAAR,GAEf,GADA,EAAKR,cACCe,IACFh/f,GAAOA,EAAMy+f,IAEZ,EAAKR,UAAYQ,GAAU,CAC9B,IAAMvD,EAAS,EAAK9gzB,MAAM8gzB,OACtBA,GAAQA,EAAO,EAAKn50B,UAI5B06I,EAAM7/I,SAAQ,SAACw9B,EAAOy6D,GAChBA,EACF9rD,YAAW,WAEL3O,EAAMywT,UAAY,EAAKwzf,aAE3B,EAAKa,KAAK9kzB,EAAO6kzB,KAChBpqvB,GAEH,EAAKqqvB,KAAK9kzB,EAAO6kzB,Q,kBAMvB,SAAK7kzB,EAAO4lT,GACNxqV,EAAGuI,IAAIq8B,EAAMj7B,KAAO3J,EAAGoqO,IAAIxlM,EAAMj7B,IACnCjP,KAAKiv1B,UAAU/kzB,EAAO4lT,GACb9vV,KAAKkv1B,MAAMhlzB,GACpBlqC,KAAKmv1B,SAASjlzB,GAAOjqB,OAAO6vU,GAE5B9vV,KAAK4u1B,OAAO9+f,K,uBAKhB,SAAUzpT,EAAMypT,GAAO,WACjB7gV,EAAKo3B,EAAKp3B,GACVi7B,EAAQR,YAA8BrD,EAAM,CAAC,OAQjD,GALIrmC,KAAKkv1B,MAAMhlzB,IACblqC,KAAKmv1B,SAASjlzB,IAIK,IAAjBA,EAAMre,OAER,OADA7rB,KAAKkqC,MAAMklzB,aAAU,EACdt/f,GAAM,GAIf,IAAM6K,EAAYzwT,EAAMywT,UAExB,IAAK36V,KAAKkv1B,MAAM,CACdE,QAASng1B,EACT0rV,cAEA,OAAO7K,GAAM,GAGf,IAII9rU,EAJEs6hB,EAAc,kBACpB3jN,EAAY,EAAKwzf,aACjB7o1B,EAAGoqO,IAAIzgO,IAAOA,IAAO,EAAKi7B,MAAMklzB,SAI1Brv1B,EAAO,SAAAmqC,GACX,GAAIo0gB,IAAe,MAAM,EACzB,OAAQt6hB,EAAO,IAAIi7B,SAAQ,SAAA3+C,GACzB,EAAKgQ,OAAO45B,GAAOnqB,MAAMzf,OACvBi2E,MAAK,WACP,GAAI+ne,IAAe,MAAM,MAIzB/xZ,EAAQttG,QAAQC,UAEhB55C,EAAGuI,IAAIoB,GACTA,EAAGvC,SAAQ,SAAAw9B,GAAK,OAAIqiH,EAAQA,EAAMh2E,MAAK,kBAAMx2E,EAAKmqC,SACzC5kC,EAAGoqO,IAAIzgO,KAChBs9I,EAAQA,EAAMh2E,MAAK,kBAAMtnE,EAAGlP,EAAM,EAAK4xS,KAAK7vR,KAAK,IAChDy0D,MAAK,kBAAMvyD,SAGduoI,EAAMo6C,OAAM,SAAAv1J,GAAG,OAAIA,IAAQ,GAAQppB,QAAQ7Z,MAAMijC,MAAMmlC,MAAK,kBAAMu5Q,GAAOwuN,U,mBAK3E,SAAM31gB,GAAO,WACPgyT,EAAYhyT,EAAMgyT,UAIlB73V,GAHQ6lC,EAAMg8D,MACLh8D,EAAM+c,OACH/c,EAAM0/Q,UACR1/Q,EAAM7lC,SAChBonC,EAAQR,YAA8Bf,EAAO,CAAC,YAAa,QAAS,SAAU,YAAa,YAE3F0mzB,GAAU,EAcRC,EAAW,SAAXA,EAAYxt1B,EAAMpG,EAAOghD,GAC7B,IAAIp3C,EAAGol1B,IAAIhv1B,GAAX,CACA,IAAM6z1B,EAAUzt1B,EAAKA,EAAKD,OAAS,GAEnC,GAAIyD,EAAGwB,IAAIpL,GAGT,IAAK,IAAM4I,KAFNgB,EAAGwB,IAAI41C,EAAO6yyB,MAAW7yyB,EAAO6yyB,GAAW,IAE9B7z1B,EAChB4z1B,EAASxt1B,EAAKwJ,OAAOhH,GAAM5I,EAAM4I,GAAMo4C,EAAO6yyB,SAE3C,GAtBa,SAAAjh1B,GACpB,IAAMi2K,EAAW,EAAKypqB,WAAW1/0B,GAEjC,SAAIhJ,EAAGol1B,IAAInmqB,IAAao2K,GAAap2K,KACnC,EAAKypqB,WAAW1/0B,GAAWqsV,GACpB,GAiBE60f,CAAc1t1B,EAAK2f,KAAK,MAAO,CAGnCi5K,GAAQh/L,EAFIghD,EAAO6yyB,MAGtBF,GAAU,EACV3yyB,EAAO6yyB,GAAW7z1B,MAKxB,GAAIoH,EAAS,CACX,IAAMmM,EAAKi7B,EAAMj7B,GACjBi7B,EAAMj7B,GAAKi7B,EAAMl7B,KACjBk7B,EAAMl7B,KAAO1J,EAAGwB,IAAImI,GAAMA,OAAK,EAGjC,IAAK,IAAM3K,KAAO4lC,EAChBolzB,EAAS,CAAChr1B,GAAM4lC,EAAM5lC,GAAMtE,KAAKkqC,OAMnC,MAFI,UAAWA,IAAOlqC,KAAKkqC,MAAMygC,OAAQ,GACrC,WAAYzgC,IAAOlqC,KAAKkqC,MAAMre,YAAS,GACpCwj0B,I,yBAIT,SAAYnlzB,EAAO24G,GACjB,OAAO7iJ,KAAKgu1B,WAAWnrsB,KAAU34G,EAAMywT,Y,sBAIzC,SAASzwT,GAAO,WACRq4E,EAAcviH,KAAKkqC,MACnBulzB,EAAmBltuB,EAAYvzG,KAC/BA,OAA4B,IAArByg1B,EAA8B5B,EAAW4B,EAChDC,EAAiBntuB,EAAYtzG,GAC7BA,OAAwB,IAAnByg1B,EAA4B7B,EAAW6B,EAC5C/ggB,EAASpsO,EAAYosO,OACrBE,EAAUtsO,EAAYssO,QAExB8ggB,EAAc,SAAA5x0B,GAAC,OAAI,GAEvB,GAAImsB,EAAMre,QAAU7rB,KAAK4v1B,YAAY1lzB,EAAO,UAAW,CAErD,IAAqB,IAAjBA,EAAMre,OAKR,OAJA7rB,KAAK2xS,OAGL3xS,KAAKmu1B,YAAcjkzB,EAAMywT,UAClB36V,KAKT,IAAM8B,EAAOc,EAAQsnC,EAAMre,QAEvBvmB,EAAGuI,IAAI/L,IAASA,EAAKD,SACvB8t1B,EAAc,SAAArr1B,GAAG,OAAIxC,EAAK0e,QAAQlc,IAAQ,GAE1CtE,KAAK2xS,KAAL,MAAA3xS,KAAA,YAAa8B,KAKjB9B,KAAK6R,OAAgBi4B,YAAS,GAAI96B,EAAMC,GAExC,IAAIog1B,GAAU,EAERtiX,EAAU,GAEV//c,EAAS2hU,GAAUA,EAAO3uV,MAEhC,IAAK,IAAMsE,KAAOtE,KAAK6R,OACrB,IAAI890B,EAAYrr1B,GAAhB,CACA,IAAM0iC,EAAQhnC,KAAKiu1B,WAAW3p1B,GAE9B,GAAK0iC,EAAL,CAMA,IAAIgxrB,EAAWhxrB,EAAMgxrB,SACjBy0H,EAAiBzlzB,EAAMylzB,eACrB/w1B,EAAQsE,KAAK6R,OAAOvN,GACpBur1B,EAAYC,GAAiBp01B,GAC7Bq01B,EAAY/3H,EAAStqiB,WAE3B,GAAKxjJ,EAAMygC,QAAS+vH,GAAQm1pB,EAAWE,IAYvC,GAAI7lzB,EAAMygC,QAAU+vH,GAAQm1pB,EAAW7ozB,EAAMyhJ,MAAQsnqB,EAAY/ozB,EAAM6ozB,WAAY,kBACjF,IACIxniB,GADQ/iT,EAAGol1B,IAAIxgzB,EAAMm+Q,WAAa,EAAKn+Q,MAAQA,GAC7Bm+Q,UAEtBA,IAAcyiiB,EAASziiB,EAAW/jT,GAClC,IAAMotS,EAAW+6iB,EAAeh/0B,MAAK,SAAArN,GAAC,OAAKA,EAAEE,QACvC0v1B,EAAa1q1B,EAAGol1B,IAAI170B,EAAK1K,IAAsCur1B,EAA9BC,GAAiB9g1B,EAAK1K,IAEvD2r1B,EAAiBC,GAAmBx01B,GAE1C,GAAIu01B,EAAgB,CAClB,IAAMpvsB,EAAS,CAAC32G,EAAMygC,MAAQqlxB,EAAYh4H,EAAStqiB,WAAYmiqB,GAC3DpruB,EAAQgouB,EAAe,GAEvBhouB,GACFA,EAAMktM,SAAS,GAAG,GAClBltM,EAAM95C,MAAM+mO,IAEZjtL,EAAQ,IAAIgpuB,EAAc,GAG5B,IAKEkB,EAJa32H,EACbA,EAAWvzmB,EAAMppE,YAAY,CAC3BwlG,YAGF,MAAOzvG,GAGP,OAFAppB,QAAQC,KAAK,iDAAkD44H,EAAO,GAAIA,EAAO,IACjF74H,QAAQ7Z,MAAMijC,GACd,WAGEi3Q,GACF5jM,EAAMktM,SAAS,GAAG,OAEf,CAEL,GAAIrsT,EAAGuI,IAAInS,GACT,GAAIs8tB,aAAoBqzH,EAClBnhzB,EAAMygC,OAAOqtpB,EAASrma,SAASq+hB,GAAW,GAC9CvD,EAAe//0B,SAAQ,SAAAtM,GAAC,OAAIA,EAAEuqE,MAAM+mO,WAIpCi9iB,EAFa32H,EACbA,EAAW02H,EAAesB,SAI5B,GAAIh4H,aAAoBy1H,EAClBvjzB,EAAMygC,OAAOqtpB,EAASrma,SAASq+hB,GAAW,GAC9Ch4H,EAASrtpB,MAAM+mO,QAIfi9iB,EAFa32H,EACbA,EAAW,IAAIy1H,EAAcuC,IAK7B3niB,GACF2va,EAASrma,SAASk+hB,GAAW,GAKjC,IAAMnqyB,EAASolyB,EAAS5gzB,EAAMwb,OAAQphD,IAAQwm1B,EAAS,EAAK5gzB,MAAMwb,OAAQphD,IAAQup1B,EAE7ExliB,GACH0kL,EAAQ3ge,KAAK9H,GAGf+q1B,GAAU,EACV5C,EAAiB7p1B,EAAQo1tB,EAASk0H,cAClC,EAAK+B,WAAW3p1B,GAAO,CACrBA,MACA2oS,MAAM,EACN4ijB,YACAnD,SAAU9p1B,EAAQoqB,aAAkB8g0B,EAAa9g0B,EAAOih0B,WAAW3p1B,GAAK0ztB,SAASk0H,aAAe+D,EAAkB,EAAKJ,GACvHjD,WAAYH,EAAezj1B,KAAI,SAAA5I,GAAC,OAAIA,EAAEstL,cACtCsqiB,WACAy0H,iBACApkiB,YACA3zL,SAAUhvE,EAAOgvE,SACjB0hO,OAAQy0f,EAAYnlyB,EAAO0wS,OAAQw3f,GACnCb,MAAOrnyB,EAAOqnyB,MACdK,KAAMvC,EAAYnlyB,EAAO0nyB,KAAM,GAC/BF,QAASrC,EAAYnlyB,EAAOwnyB,QAAS,KACrCC,SAAUtC,EAAYnlyB,EAAOynyB,SAAU,IACvCL,gBAAiBjC,EAAYnlyB,EAAO8vqB,SAAU,GAC9CztlB,MAAO8itB,EAAYnlyB,EAAOqiF,OAAO,GACjCskD,UAAWw+pB,EAAYnlyB,EAAO2mI,UAAW,MACzC3mI,UA1F+E,qBA8B7E,eAxCC1e,EAAMimQ,OACToijB,GAAU,EAEVrv1B,KAAKwu1B,eAAelq1B,SAhBtB0jB,QAAQC,KAAK,kCAA2B3jB,EAA3B,gDAAwEA,EAAxE,8BAsHjB,GAAI+q1B,EAAS,CACPxggB,GAAWk+I,EAAQlre,QACrBkre,EAAQrge,SAAQ,SAAApI,GAAG,OAAIuqV,EAAQ,EAAKo/f,WAAW3p1B,OAIjD,IAAMxC,EAAO1D,OAAO0D,KAAK9B,KAAKiu1B,YAC9Bju1B,KAAKqs1B,QAAQxq1B,OAASC,EAAKD,OAC3BC,EAAK4K,SAAQ,SAACpI,EAAKtB,GACjB,IAAM0iD,EAAS,EAAKuoyB,WAAW3p1B,GAC/B,EAAK+n1B,QAAQrp1B,GAAK0iD,EAClB,EAAKv6C,OAAO7G,GAAOohD,EAAOsyqB,SAAStqiB,WACnC,EAAKsqiB,SAAS1ztB,GAAOohD,EAAOsyqB,YAIhC,OAAOh4tB,O,4BAUT,SAAesE,EAAKmkL,GAClB,IAAMuviB,EAAWh4tB,KAAKg4tB,SAAS1ztB,GAE/B,IAAK0ztB,EACH,OAAOhwsB,QAAQC,KAAR,oEAAyE3jB,EAAzE,MAITtE,KAAKgu1B,WAAW,MAAQ1p1B,GAAOw7C,IAE/B,IAAM9Y,EAAQhnC,KAAKiu1B,WAAW3p1B,IAAQup1B,EACtC,IAAI7mzB,EAAMimQ,MAAQ+qb,IAAahxrB,EAAMgxrB,SAArC,CAEI1ytB,EAAGol1B,IAAIjiqB,KACTA,IAAUzhJ,EAAMyhJ,OAIlB,IAAMgkqB,EAAiB7p1B,EAAQo1tB,EAASk0H,cACxCO,EAAe//0B,SAAQ,SAAAtM,GAAC,OAAIA,EAAEE,MAAO,KAGrC,IAAMuv1B,EAAY73H,EAAStqiB,WAEvB1tL,KAAKkqC,MAAMj7B,KACbjP,KAAKkqC,MAAMj7B,GAAG3K,GAAOur1B,GAIvB7v1B,KAAKiu1B,WAAW3p1B,GAAO,CACrBA,MACA2oS,MAAM,EACNxkH,QACAonqB,YACA73H,WACAy0H,uB,KAON,SAASiC,EAAehz1B,GACtB,OAAO4J,EAAGuI,IAAInS,GAAS,IAAI2v1B,EAAmB3v1B,EAAMsN,KAAI,SAAAtN,GACtD,IAAMs8tB,EAAW02H,EAAehz1B,GAC1BwrC,EAAU8wrB,EAASk0H,aACzB,OAAOl0H,aAAoBi0H,EAAwB/kzB,EAAQ,GAAKA,MAC5DgpzB,GAAmBx01B,GACzB,IAAI+x1B,EAAc,GAAGpyyB,YAAY,CAC/BwlG,OAAQ,CAACnlJ,EAAOA,KAGlB,IAAI+x1B,EAAc/x1B,GAQpB,SAASiz1B,EAAar30B,EAAMvX,GACTuX,EAAKuiC,cAAc/pC,QAC3BpD,SAAQ,SAAAwtC,GACf5iC,EAAK6lS,YAAYjjQ,GACjBn6C,EAAKwq1B,SAASrwyB,GAEd,IAAMhT,EAAUgT,EAAMgyyB,aAEtB,GAAI5m1B,EAAGuI,IAAIq5B,GAAU,CACnB,IAAMlkC,EAAIkkC,EAAQ1mB,QAAQlJ,GAE1B,GAAItU,GAAK,EAAG,CACV,IAAMk/I,EAAO,YAAIh7G,GACjBg7G,EAAKl/I,GAAKjD,EACVm6C,EAAK,QAAcgoG,QAEhB,GAAI58I,EAAGwB,IAAIogC,GAAU,CAC1B,IAAMjkC,EAAQ7E,OAAOuL,QAAQu9B,GAASvlB,MAAK,SAAA1e,GAAK,OAAIA,EAAM,KAAOqU,KAE7DrU,IACFi3C,EAAK,QAAcpQ,YAAS,GAAI5C,EAAL,eACxBjkC,EAAM,GAAKlD,SAStB,SAAS8u1B,EAAah90B,EAAQq4B,GAC5B,IAAM5yB,EAAOzF,EAAOq4B,EAAMy6D,OAU1B,OARIrtF,GACF4yB,EAAMj7B,GAAKwB,GAAM6G,EAAKrI,GAAIi7B,EAAMj7B,IAChCi7B,EAAMl7B,KAAOyB,GAAM6G,EAAKtI,KAAMk7B,EAAMl7B,MACpC5Q,OAAO+8C,OAAO7jC,EAAM4yB,IAEpBr4B,EAAOq4B,EAAMy6D,OAASz6D,EAGjBr4B,EAGT,SAASpB,GAAMy2f,EAAM1gZ,GACnB,OAAOlhH,EAAGwB,IAAIoggB,IAAS5hgB,EAAGwB,IAAI0/G,GAAO18E,YAAS,GAAIo9d,EAAM1gZ,GAAOA,GAAO0gZ,EAIxE,SAASgpV,GAAmBx01B,GAC1B,QAAK4J,EAAGkjB,IAAI9sB,KACLA,EAAMghM,WAAW,MAAQ,KAAK3hJ,KAAKr/C,MAAYyu1B,EAAWzu1B,IAInE,SAASo01B,GAAiBp01B,GACxB,OAAO4J,EAAGuI,IAAInS,GAASA,EAAMsN,IAAI8m1B,IAAoBI,GAAmBx01B,GAASmu1B,EAAyB,CACxGp0pB,MAAO,CAAC,EAAG,GACX50C,OAAQ,CAACnlJ,EAAOA,IAF+Dmu1B,CAG9E,GAAKnu1B,EAIV,SAASg/L,GAAQ/0L,EAAGC,GAClB,GAAIN,EAAGuI,IAAIlI,GAAI,CACb,IAAKL,EAAGuI,IAAIjI,IAAMD,EAAE9D,SAAW+D,EAAE/D,OAAQ,OAAO,EAEhD,IAAK,IAAImB,EAAI,EAAGA,EAAI2C,EAAE9D,OAAQmB,IAC5B,GAAI2C,EAAE3C,KAAO4C,EAAE5C,GAAI,OAAO,EAG5B,OAAO,EAGT,OAAO2C,IAAMC,EAQf,IAAMuq1B,GAAa,SAACtu1B,EAAQus1B,EAAUgC,GACpC,IAAMC,EAAgBxu1B,IAAWsp1B,EAAQtp1B,GACnCyu1B,EAAOhr1B,EAAGoqO,IAAI0+mB,GACdpnzB,EAAQkE,iBAAO,CACnBqlzB,QAAS,GACT901B,IAAK,OACJqsC,QAEGoC,EAAQomzB,EAAO,GAAKlC,EAEpBmC,EAAU/pzB,mBAAQ,kBAzsC1B,SAAmB3kC,EAAQ2u1B,GAGzB,IAFA,IAAM3i1B,EAAM,GAEH7K,EAAI,EAAGA,EAAInB,EAAQmB,IAAK6K,EAAIzB,KAAKok1B,EAASxt1B,IAEnD,OAAO6K,EAosCuB4i1B,CAAU5u1B,GAAQ,SAAAmB,GAC9C,IAAMwK,EAAI,IAAIsg1B,EACRr4wB,EAAIvrC,EAAMlnC,KAAOknC,EAAMlnC,GAAK8n1B,EAASsD,EAAUpr1B,EAAGwK,IACxD,OAAOA,EAAE8C,OAAOmlE,QACd,CAAC5zE,IAECsoC,EAAW3D,mBAAQ,iBAAO,CAE9BzmB,MAAO,kBAAMk/B,QAAQwnJ,IAAIz/J,EAAMupzB,QAAQvn1B,KAAI,SAAAwE,GAAC,OAAI,IAAIyxC,SAAQ,SAAA3+C,GAAI,OAAIkN,EAAEuS,MAAMzf,WAG5EgQ,OAAQ,SAAA45B,GACN,IAAMomzB,EAAOhr1B,EAAGoqO,IAAIxlM,GACd6uI,EAAQzzK,EAAGuI,IAAIq8B,GACrBlD,EAAMupzB,QAAQ7j1B,SAAQ,SAACgk1B,EAAQ1t1B,GAC7B0t1B,EAAOpg1B,OAAOgg1B,EAAOxF,EAAS5gzB,EAAOlnC,EAAG0t1B,GAAU33qB,EAAQ7uI,EAAMlnC,GAAKknC,GAChElD,EAAMvrC,KAAKi11B,EAAO3w0B,YAK3B4xR,KAAM,WACJ,IAAK,IAAI5mR,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,OAAO+b,EAAMupzB,QAAQ7j1B,SAAQ,SAAAc,GAAC,OAAIA,EAAEmkS,KAAF,MAAAnkS,EAAUwd,UAE5C,IACEjL,EAAQoqB,EAASpqB,MACjBzP,EAAS65B,EAAS75B,OAClBqhS,EAAOxnQ,EAASwnQ,KAEhBl2S,EAAMyuC,EAAM,GAAKA,EAAM,GAAGzuC,IAAM601B,EAAOtpzB,EAAMvrC,IAAM,KACzDkqqB,8BAAoBlqqB,GAAK,iBAAO,CAC9BskB,QACA4xR,OAEIw6iB,kBACF,OAAOnlzB,EAAMupzB,aAKjBpqzB,qBAAU,WACHmqzB,IAAQD,GACXnmzB,EAAMx9B,SAAQ,SAAC+oE,EAAGzyE,GAEhBut1B,EAAQvt1B,GAAGmlB,QAAQ,SAAUstD,EAAE/vB,QAC/B6qyB,EAAQvt1B,GAAGmlB,QAAQ,YAAastD,EAAE4yO,cAIlCgoiB,GACFrpzB,EAAMupzB,QAAQ7j1B,SAAQ,SAAAc,GAAC,OAAIA,EAAEg9D,aAC7BxjC,EAAMupzB,QAAUA,EAChBvpzB,EAAMvrC,IAAMA,EAEPA,GACH801B,EAAQ7j1B,SAAQ,SAAAc,GAAC,OAAIA,EAAEuS,YAEfuw0B,GACVhg1B,EAAO45B,KAERkmzB,GAEHjqzB,qBAAU,WACR,OAAO,kBAAMa,EAAMupzB,QAAQ7j1B,SAAQ,SAAAc,GAAC,OAAIA,EAAEg9D,gBACzC,IACH,IAAMr/D,EAASol1B,EAAQvn1B,KAAI,SAAAwE,GAAC,OAAIs8B,YAAS,GAAIt8B,EAAEwqtB,aAC/C,OAAOs4H,EAAO,CAACnl1B,EAAQmF,EAAQqhS,GAAQxmS,GAQnC2stB,GAAY,SAAC5trB,EAAOkmzB,GACxB,IAAME,EAAOhr1B,EAAGoqO,IAAIxlM,GAEdymzB,EAAcR,GAAW,EAAGG,EAAOpmzB,EAAQ,CAACA,GAAQkmzB,GACpDx80B,EAAS+80B,EAAY,GACrBjp1B,EAAMip1B,EAAY,GAClBh/iB,EAAOg/iB,EAAY,GAEzB,OAAOL,EAAO,CAAC180B,EAAO,GAAIlM,EAAKiqS,GAAQ/9R,GAyZzCunC,EAAO,CACL6uyB,oBAAqB,SAAA1uuB,GAAK,OAAI,IAAImvuB,EAAcnvuB,IAChD4uuB,4BAA6B,SAAwC/+B,GACnE,IAAK,IAAIpgyB,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAAKC,EAAO,GAAKvnB,UAAUunB,GAG7B,OAAO,IAAIgh0B,EAAsB9gC,EAASngyB,M,IAQxC4l0B,G,kDACJ,WAAY1mzB,EAAOtF,GAAU,kCAC3B,cAAMsF,EAAMoxE,OAAS0uuB,EAAsBlgzB,YAAS,GAAII,EAAO,CAC7DoxE,MAAO0uuB,EAAoB9/yB,EAAMoxE,SAC9BpxE,IACA55B,YAAS,EACd,EAAKA,OAASs0B,EACd,EAAK+pT,SANsB,E,UADH67f,GAkG5B,IAGMqG,GAhDN,SAAoB74H,EAAUhsrB,QACZ,IAAZA,IACFA,EAAU,IAGZ,IAAMojI,EAAO4ojB,EAWb,OATA5ojB,EAAKsqB,OAAS,WACZ,IAAK,IAAI3uK,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAIzB,OADAD,EAAKte,SAAQ,SAAAge,GAAG,OAAIgvK,EAAOhvK,MACpB0kJ,GAGFA,EAEP,SAASsqB,EAAOhvK,EAAKom0B,GAEnB,GAAIxr1B,EAAGuI,IAAI6c,GACT,OAAOA,EAAIhe,SAAQ,SAAAge,GAAG,OAAIgvK,EAAOhvK,MAInC,GAAIplB,EAAGwB,IAAI4jB,GACT,IAAK,IAAMpmB,KAAOomB,EAAKgvK,EAAOhvK,EAAIpmB,GAAMA,OAD1C,CAOA,IAAIA,EAAMgB,EAAGkjB,IAAIso0B,GAAeA,EAAcxr1B,EAAGkjB,IAAIkC,GAAOA,EAAMA,GAAOplB,EAAGkjB,IAAIkC,EAAInC,aAAemC,EAAInC,YAAcjjB,EAAGoqO,IAAIhlN,GAAOA,EAAIlc,KAAO,GAE1Iw9B,EAAQw1M,YACVl9O,EAAMA,EAAI,GAAG80C,cAAgB90C,EAAIwL,MAAM,IAMzCs/J,EAAK9qK,GAAO0ztB,EAASttsB,KAONqm0B,EAzFa,SAAAp3yB,GAmC9B,OAlC0BpQ,sBAAW,SAACW,EAAO7D,GAC3C,IAAMs3a,EAAcitY,IACdznuB,EAAUj4E,kBAAO,GACjB8lzB,EAAgB9lzB,iBAAO,MACvB9jC,EAAO8jC,iBAAO,MACd+lzB,EAAc/nuB,uBAAY,SAAAh/E,GAC9B,IAAMgnzB,EAAmBF,EAAclpzB,QASvCkpzB,EAAclpzB,QAAU,IAAI8ozB,GAAc1mzB,GAPzB,WACX9iC,EAAK0gC,WAEW,IADA8hzB,EAAoBxi1B,EAAK0gC,QAASkpzB,EAAclpzB,QAAQqpzB,qBACjDxzY,QAK7BuzY,GAAoBA,EAAiB1olB,WACpC,IACHriO,qBAAU,kBAAM,WACdg9E,EAAQr7E,SAAU,EAClBkpzB,EAAclpzB,SAAWkpzB,EAAclpzB,QAAQ0gO,YAC9C,IACHm9Z,8BAAoBt/nB,GAAM,kBAAM+jzB,EAAkBhj1B,EAAM+7G,EAASw6V,MACjEszY,EAAY/mzB,GAEZ,IAAMknzB,EAAYJ,EAAclpzB,QAAQ4lJ,WAGlC2jqB,GAFYD,EAAUxpiB,UACTwpiB,EAAUzpiB,WACPj+Q,YAA8B0nzB,EAAW,CAAC,YAAa,gBAE7E,OAAO3szB,IAAMwB,cAAc0T,EAAW7P,YAAS,GAAIunzB,EAAe,CAChE511B,IAAK,SAAA611B,GAAQ,OAAIlq1B,EAAK0gC,QArwD5B,SAAmBrsC,EAAKylJ,GAQtB,OAPIA,IAEE57I,EAAGoqO,IAAIxuF,GAAUA,EAAQzlJ,GAAc6J,EAAGwB,IAAIo6I,KAChDA,EAAQp5G,QAAUrsC,IAIfA,EA6vD6BsuR,CAAUunkB,EAAUjrzB,aAyDHqzJ,OAHtC,CAAC,IAAK,OAAQ,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,OAAQ,MAAO,MAAO,MAAO,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,OAAQ,OAAQ,MAAO,WAAY,OAAQ,WAAY,KAAM,MAAO,UAAW,MAAO,SAAU,MAAO,KAAM,KAAM,KAAM,QAAS,WAAY,aAAc,SAAU,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,SAAU,MAAO,QAAS,MAAO,MAAO,SAAU,QAAS,SAAU,KAAM,OAAQ,OAAQ,MAAO,OAAQ,OAAQ,WAAY,OAAQ,QAAS,MAAO,WAAY,SAAU,KAAM,WAAY,SAAU,SAAU,IAAK,QAAS,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,SAAU,UAAW,SAAU,QAAS,SAAU,OAAQ,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,QAAS,KAAM,QAAS,OAAQ,QAAS,KAAM,QAAS,IAAK,KAAM,MAAO,QAAS,MACx7B,SAAU,WAAY,OAAQ,UAAW,gBAAiB,IAAK,QAAS,OAAQ,iBAAkB,OAAQ,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,MAAO,OAAQ,UAOjM63pB,IAFUV,GAAWn3pB,OAEF,CACrB83pB,yBAAyB,EACzBC,mBAAmB,EACnBC,kBAAkB,EAClBC,kBAAkB,EAClBC,SAAS,EACTC,cAAc,EACdC,iBAAiB,EACjBn3Y,aAAa,EACb/zF,SAAS,EACT5kP,MAAM,EACN3lD,UAAU,EACV01wB,cAAc,EACd/oiB,YAAY,EACZgpiB,cAAc,EACdC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,aAAa,EACbC,cAAc,EACdC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,iBAAiB,EACjBl2tB,YAAY,EACZo6rB,WAAW,EACXj9rB,YAAY,EACZxM,SAAS,EACTigH,OAAO,EACPulnB,SAAS,EACTC,SAAS,EACTC,QAAQ,EACR5xtB,QAAQ,EACRsisB,MAAM,EAEN5qjB,aAAa,EACbm6kB,cAAc,EACdt6kB,aAAa,EACbwB,iBAAiB,EACjBw9T,kBAAkB,EAClBvgU,kBAAkB,EAClB87kB,eAAe,EACf77kB,aAAa,IAKTmpe,GAAW,CAAC,SAAU,KAAM,MAAO,KAMzC,SAAS2yG,GAAoBvk1B,EAAM9S,EAAOg3uB,GACxC,OAAa,MAATh3uB,GAAkC,mBAAVA,GAAiC,KAAVA,EAAqB,GACnEg3uB,GAAqC,kBAAVh3uB,GAAgC,IAAVA,GAAiB611B,GAAiBhw1B,eAAeiN,IAAS+i1B,GAAiB/i1B,IAEzH,GAAK9S,GAAO8iI,OAF4H9iI,EAAQ,KAP1J611B,GAAmBnz1B,OAAO0D,KAAKyv1B,IAAkB5l1B,QAAO,SAACutI,EAAK2J,GAE5D,OADAu9lB,GAAS1zuB,SAAQ,SAAAixC,GAAM,OAAIu7F,EAJX,SAACv7F,EAAQr5C,GAAT,OAAiBq5C,EAASr5C,EAAIgkJ,OAAO,GAAGje,cAAgB/lI,EAAImuE,UAAU,GAIvDugxB,CAAUr1yB,EAAQklG,IAAS3J,EAAI2J,MACvD3J,IACNq4sB,IASH,IAAM0B,GAAiB,GAoCvB,IAAMC,GAAS,oBACTC,GAAaD,GAAS,IAE5B,SAASly1B,KACP,IAAK,IAAI+pB,EAAOrnB,UAAU7B,OAAQwiJ,EAAQ,IAAI5iJ,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAChFo5H,EAAMp5H,GAAQvnB,UAAUunB,GAG1B,MAAO,WAAao5H,EAAM5iI,KAAK,eAAiB,WAGlD,IAAMguQ,GAAM,IAAI30O,OAAO,MAAQ95C,GAAKky1B,GAAQA,GAAQA,KAC9CtyrB,GAAO,IAAI9lH,OAAO,OAAS95C,GAAKky1B,GAAQA,GAAQA,GAAQA,KACxD/0P,GAAM,IAAIrjjB,OAAO,MAAQ95C,GAAKky1B,GAAQC,GAAYA,KAClDC,GAAO,IAAIt4yB,OAAO,OAAS95C,GAAKky1B,GAAQC,GAAYA,GAAYD,KAChEG,GAAO,sDACPC,GAAO,sEACPC,GAAO,sBACPC,GAAO,sBAGPxkkB,GAAS,CACbykkB,YAAa,EACbC,UAAW,WACXC,aAAc,WACdC,KAAM,SACNC,WAAY,WACZC,MAAO,WACPC,MAAO,WACPC,OAAQ,WACRpuuB,MAAO,IACPquuB,eAAgB,WAChBC,KAAM,MACNC,WAAY,WACZC,MAAO,WACPC,UAAW,WACXC,YAAa,WACbC,UAAW,WACXC,WAAY,WACZC,UAAW,WACXC,MAAO,WACPC,eAAgB,WAChBC,SAAU,WACVC,QAAS,WACTC,KAAM,SACNC,SAAU,MACVC,SAAU,QACVC,cAAe,WACfC,SAAU,WACVC,UAAW,QACXC,SAAU,WACVC,UAAW,WACXC,YAAa,WACbC,eAAgB,WAChBC,WAAY,WACZC,WAAY,WACZC,QAAS,WACTC,WAAY,WACZC,aAAc,WACdC,cAAe,WACfC,cAAe,UACfC,cAAe,UACfC,cAAe,SACfC,WAAY,WACZC,SAAU,WACVC,YAAa,SACbC,QAAS,WACTC,QAAS,WACTC,WAAY,UACZC,UAAW,WACXC,YAAa,WACbC,YAAa,UACbC,QAAS,WACTC,UAAW,WACXC,WAAY,WACZC,KAAM,WACNC,UAAW,WACXC,KAAM,WACNz2E,MAAO,QACP02E,YAAa,WACb9xuB,KAAM,WACN+xuB,SAAU,WACVC,QAAS,WACTC,UAAW,WACXC,OAAQ,WACRC,MAAO,WACPC,MAAO,WACPC,SAAU,WACVC,cAAe,WACfC,UAAW,WACXC,aAAc,WACdC,UAAW,WACXC,WAAY,WACZC,UAAW,WACXC,qBAAsB,WACtBC,UAAW,WACXC,WAAY,WACZC,UAAW,WACXC,UAAW,WACXC,YAAa,WACbC,cAAe,UACfC,aAAc,WACdC,eAAgB,WAChBC,eAAgB,WAChBC,eAAgB,WAChBC,YAAa,WACbC,KAAM,SACNC,UAAW,UACXC,MAAO,WACPC,QAAS,WACTC,OAAQ,WACRC,iBAAkB,WAClBC,WAAY,MACZC,aAAc,WACdC,aAAc,WACdC,eAAgB,WAChBC,gBAAiB,WACjBC,kBAAmB,SACnBC,gBAAiB,WACjBC,gBAAiB,WACjBC,aAAc,UACdC,UAAW,WACXC,UAAW,WACXC,SAAU,WACVC,YAAa,WACbC,KAAM,MACNC,QAAS,WACTC,MAAO,WACPC,UAAW,WACXC,OAAQ,WACRC,UAAW,WACXC,OAAQ,WACRC,cAAe,WACfC,UAAW,WACXC,cAAe,WACfC,cAAe,WACfC,WAAY,WACZC,UAAW,WACXC,KAAM,WACNC,KAAM,WACNC,KAAM,WACNC,WAAY,WACZC,OAAQ,WACRC,cAAe,WACfr9P,IAAK,WACLs9P,UAAW,WACXC,UAAW,WACXC,YAAa,WACbC,OAAQ,WACRC,WAAY,WACZC,SAAU,UACVC,SAAU,WACVC,OAAQ,WACRC,OAAQ,WACRC,QAAS,WACTC,UAAW,WACXC,UAAW,WACXC,UAAW,WACXC,KAAM,WACNC,YAAa,SACbC,UAAW,WACX7oW,IAAK,WACL8oW,KAAM,QACNC,QAAS,WACTC,OAAQ,WACRC,UAAW,WACXC,OAAQ,WACRC,MAAO,WACPvztB,MAAO,WACPwztB,WAAY,WACZC,OAAQ,WACRC,YAAa,YAqGf,SAASC,GAAQhnxB,EAAG03E,EAAGphI,GAGrB,OAFIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAU0pD,EAAc,GAAT03E,EAAI13E,GAAS1pD,EACpCA,EAAI,GAAcohI,EAClBphI,EAAI,EAAI,EAAU0pD,GAAK03E,EAAI13E,IAAM,EAAI,EAAI1pD,GAAK,EAC3C0pD,EAGT,SAASi6M,GAASrqQ,EAAG7X,EAAG6a,GACtB,IAAM8kI,EAAI9kI,EAAI,GAAMA,GAAK,EAAI7a,GAAK6a,EAAI7a,EAAI6a,EAAI7a,EACxCioE,EAAI,EAAIptD,EAAI8kI,EACZh2E,EAAIslxB,GAAQhnxB,EAAG03E,EAAG9nI,EAAI,EAAI,GAC1BsxD,EAAI8lxB,GAAQhnxB,EAAG03E,EAAG9nI,GAClBzf,EAAI621B,GAAQhnxB,EAAG03E,EAAG9nI,EAAI,EAAI,GAChC,OAAOtoB,KAAKo/E,MAAU,IAAJhF,IAAY,GAAKp6E,KAAKo/E,MAAU,IAAJxF,IAAY,GAAK55E,KAAKo/E,MAAU,IAAJv2E,IAAY,EAGxF,SAAS821B,GAASl00B,GAChB,IAAMm00B,EAAM/gzB,SAASpzB,EAAK,IAC1B,OAAIm00B,EAAM,EAAU,EAChBA,EAAM,IAAY,IACfA,EAGT,SAASC,GAASp00B,GAEhB,OADYmwD,WAAWnwD,GACT,IAAM,KAAO,IAAM,IAGnC,SAASq00B,GAAOr00B,GACd,IAAM0wF,EAAMvgC,WAAWnwD,GACvB,OAAI0wF,EAAM,EAAU,EAChBA,EAAM,EAAU,IACbn8G,KAAKo/E,MAAY,IAAN+8B,GAGpB,SAAS4jvB,GAAgBt00B,GAEvB,IAAMm00B,EAAMhkxB,WAAWnwD,GACvB,OAAIm00B,EAAM,EAAU,EAChBA,EAAM,IAAY,EACfA,EAAM,IAGf,SAASI,GAAYt4uB,GACnB,IAAIu4uB,EA/GN,SAAwB/2vB,GACtB,IAAI13D,EAEJ,MAAqB,kBAAV03D,EACFA,IAAU,IAAMA,GAASA,GAAS,GAAKA,GAAS,WAAaA,EAAQ,MAI1E13D,EAAQglzB,GAAKxnsB,KAAK9lD,IAAerqD,SAASrN,EAAM,GAAK,KAAM,MAAQ,EACnEygP,GAAOztR,eAAe0kG,GAAe+oL,GAAO/oL,IAE5C13D,EAAQkhP,GAAI1jI,KAAK9lD,KACXy2vB,GAASnuzB,EAAM,KAAO,GAC9BmuzB,GAASnuzB,EAAM,KAAO,GACtBmuzB,GAASnuzB,EAAM,KAAO,EACtB,OACA,GAGEA,EAAQqyH,GAAK7U,KAAK9lD,KACZy2vB,GAASnuzB,EAAM,KAAO,GAC9BmuzB,GAASnuzB,EAAM,KAAO,GACtBmuzB,GAASnuzB,EAAM,KAAO,EACtBsuzB,GAAOtuzB,EAAM,OACb,GAGEA,EAAQ8kzB,GAAKtnsB,KAAK9lD,IACbrqD,SAASrN,EAAM,GAAKA,EAAM,GACjCA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjB,KACA,MAAQ,GAINA,EAAQilzB,GAAKznsB,KAAK9lD,IAAerqD,SAASrN,EAAM,GAAI,MAAQ,GAE5DA,EAAQ+kzB,GAAKvnsB,KAAK9lD,IACbrqD,SAASrN,EAAM,GAAKA,EAAM,GACjCA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjBA,EAAM,GAAKA,EAAM,GACjB,MAAQ,GAGNA,EAAQ4vjB,GAAIpyc,KAAK9lD,KAIf,IAHIypL,GAASktkB,GAASruzB,EAAM,IAChCuuzB,GAAgBvuzB,EAAM,IACtBuuzB,GAAgBvuzB,EAAM,QAEtB,GAGEA,EAAQ6kzB,GAAKrnsB,KAAK9lD,KACZypL,GAASktkB,GAASruzB,EAAM,IAChCuuzB,GAAgBvuzB,EAAM,IACtBuuzB,GAAgBvuzB,EAAM,KAClBsuzB,GAAOtuzB,EAAM,OACjB,EAGK,KAiDU0uzB,CAAex4uB,GAChC,GAAmB,OAAfu4uB,EAAqB,OAAOv4uB,EAEhC,IACI9tC,GAAkB,UAFtBqmxB,EAAaA,GAAc,MAEW,GAClCp31B,GAAkB,MAAbo31B,KAA6B,EAClCr31B,GAAkB,IAAbq31B,GAA2B,IACpC,sBAJsB,WAAbA,KAA6B,GAItC,aAAqBrmxB,EAArB,aAA2B/wE,EAA3B,aAAiCD,EAAjC,KAKF,IAAMu31B,GAAmB,oDAGnBC,GAAa,2FAEbC,GAAkB,IAAItizB,OAAJ,WAAe18C,OAAO0D,KAAKktR,IAAQvtQ,KAAK,KAAxC,KAAiD,KAgCzE05B,EAAO,CACL2uyB,eAAgB,MAChBK,WAAYn7jB,GACZ46jB,oBArZF,SAA+Bv8zB,EAAU6c,GACvC,IAAK7c,EAAShmB,WAAagmB,EAAS8uR,aAClC,OAAO,EAGT,IAAM91Q,EAAO6D,EACPoxE,EAAQj1E,EAAKi1E,MACbh1E,EAAWD,EAAKC,SAChBshR,EAAYvhR,EAAKuhR,UACjBD,EAAathR,EAAKshR,WAClBn2F,EAAa9nL,YAA8BrD,EAAM,CAAC,QAAS,WAAY,YAAa,eAO1F,IAAK,IAAI2khB,UALS,IAAdpjQ,IAAsBv6R,EAASu6R,UAAYA,QAC5B,IAAfD,IAAuBt6R,EAASs6R,WAAaA,QAEhC,IAAbrhR,IAAqBjZ,EAAS0vR,YAAcz2Q,GAE1Bg1E,EACpB,GAAKA,EAAM/5G,eAAeypjB,GAA1B,CACA,IAAI0nL,EAA+C,IAA5B1nL,EAAUxqiB,QAAQ,MACrC680B,EAAatK,GAAoB/nS,EAAW1vc,EAAM0vc,GAAY0nL,GAChD,UAAd1nL,IAAuBA,EAAY,YACnC0nL,EAAkBrltB,EAASiuF,MAAM2tT,YAAY+hJ,EAAWqyS,GAAiBhw0B,EAASiuF,MAAM0vc,GAAaqyS,EAG3G,IAAMC,EAAwC,WAAtBjw0B,EAAS0sL,UAAyB1sL,EAASygZ,YAA+C,WAAjCzgZ,EAASygZ,WAAW/zN,SAErG,IAAK,IAAIvrM,KAAQgjN,EAAY,CAE3B,IAAM8jO,EAAgBgoa,GAAmBjw0B,EAASkw0B,aAAa/u1B,GAAQA,EAAOyk1B,GAAezk1B,KAAUyk1B,GAAezk1B,GAAQA,EAAKoqE,QAAQ,YAAY,SAAAxyE,GAAC,MAAI,IAAMA,EAAEgzC,kBACpK/rB,EAAS8uR,aAAam5I,EAAe9jO,EAAWhjN,MAwXlDq70B,yBAzBiC,SAAAnkyB,GAEjC,IAAM8lyB,EAAc9lyB,EAAOm7F,OAAO73I,KAAI,SAAAw01B,GAAU,OAAIA,EAAW5kxB,QAAQukxB,GAAYJ,OAAc/z1B,KAAI,SAAAw01B,GAAU,OAAIA,EAAW5kxB,QAAQwkxB,GAAiBL,OACjJU,EAAejS,EAAY,GAAGj9yB,MAAM2uzB,IAAkBl01B,KAAI,iBAAM,MACtEwi1B,EAAY9+0B,SAAQ,SAAAhR,GAClBA,EAAM6yC,MAAM2uzB,IAAkBxw1B,SAAQ,SAAC8tK,EAAQx3K,GAAT,OAAey61B,EAAaz61B,GAAGoJ,MAAMouK,SAE7E,IAAMkjrB,EAAiBlS,EAAY,GAAGj9yB,MAAM2uzB,IAAkBl01B,KAAI,SAACmgB,EAAQnmB,GAAT,OAAeso1B,EAAmBxhzB,YAAS,GAAI4b,EAAQ,CACvHm7F,OAAQ48sB,EAAaz61B,SAEvB,OAAO,SAAAyhH,GACL,IAAIzhH,EAAI,EACR,OAAOwo1B,EAAY,GAGlB5ywB,QAAQskxB,IAAkB,kBAAMQ,EAAe161B,KAAKyhH,MAEpD7rC,QAAQ,gEAAgE,SAAC76D,EAAGy6N,EAAIC,EAAIC,EAAIC,GAAhB,qBAA+B57O,KAAKo/E,MAAMq8J,GAA1C,aAAkDz7O,KAAKo/E,MAAMs8J,GAA7D,aAAqE17O,KAAKo/E,MAAMu8J,GAAhF,aAAwFC,EAAxF,c,gDCt/E7E,+DAEe,SAASj6G,IACtB,OAAOj6F,IAAMgG,WAAWonS,O,6BCH1B,6DAaI7qN,EAAOviF,IAAM8E,YAAW,SAAcW,EAAOzuC,GAC/C,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBukxB,EAAgBzzzB,EAAM0zzB,OACtBA,OAA2B,IAAlBD,GAAmCA,EAC5Ch90B,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,WAErE,OAAOzF,IAAMwB,cAAc4rF,IAAO/nF,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9B63C,UAAW2suB,EAAS,EAAI,EACxBni2B,IAAKA,GACJklB,OAwBUs6D,gBAzCK,CAElB1jE,KAAM,CACJ8yG,SAAU,WAsCoB,CAChC77G,KAAM,WADOysE,CAEZ+rC,I,6BClDH,8EAuLI6tM,EAAiBpwR,IAAM8E,YAAW,SAAwBW,EAAOzuC,GACnE,IAAIy9E,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9C/1J,EAAQwuC,EAAMxuC,MACdmi2B,EAAc3zzB,EAAM2zzB,YACpB7rsB,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,gBAAkBA,EACxDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,UAAW,YAAa,QAAS,QAAS,cAAe,YAElGgxC,EAAQwjD,cACR24c,EAAY,GACZymR,EAAe,CACjBC,KAAM,GACNC,KAAM,IAGR,GAAgB,gBAAZtkvB,GAAyC,WAAZA,EAC/B,QAAc59G,IAAVJ,EAAqB,CACvB27kB,EAAU,iBAAmBt6kB,KAAKo/E,MAAMzgF,GACxC,IAAI2gI,EAAY3gI,EAAQ,IAEA,QAApBw/E,EAAMxB,YACR2iD,GAAaA,GAGfyhuB,EAAaC,KAAK1huB,UAAY,cAAc/wH,OAAO+wH,EAAW,WACrDnuG,EAKb,GAAgB,WAAZwrF,EACF,QAAoB59G,IAAhB+h2B,EAA2B,CAC7B,IAAIh1I,GAAcg1I,GAAe,GAAK,IAEd,QAApB3ixB,EAAMxB,YACRmvoB,GAAcA,GAGhBi1I,EAAaE,KAAK3huB,UAAY,cAAc/wH,OAAOu9sB,EAAY,WACtD36rB,EAKb,OAAOuW,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAU7sB,EAAW,CACnF6kxB,YAAa/kxB,EAAQ+kxB,YACrBzmR,cAAet+f,EAAQs+f,cACvBtkb,OAAQh6E,EAAQg6E,OAChBh1B,MAAOhlD,EAAQglD,OACfxkB,IACFh4D,KAAM,eACL21hB,EAAW,CACZ57kB,IAAKA,GACJklB,GAAoB,WAAZ+4F,EAAuBj1E,IAAMwB,cAAc,MAAO,CAC3DmzC,UAAW2B,kBAAK7B,EAAQglxB,OAAQhlxB,EAAQ,cAAc5tE,OAAOk5H,YAAWv+B,QACrE,KAAMxhE,IAAMwB,cAAc,MAAO,CACpCmzC,UAAW2B,kBAAK7B,EAAQynsB,IAAKznsB,EAAQ,WAAW5tE,OAAOk5H,YAAWv+B,MAAuB,kBAAZyT,GAA2C,UAAZA,IAAwBxgC,EAAQilxB,kBAAmB,CAC7JF,YAAa/kxB,EAAQklxB,gBACrBlrsB,OAAQh6E,EAAQmlxB,YAChB3kvB,IACF4B,MAAOwivB,EAAaC,OACN,gBAAZrkvB,EAA4B,KAAOj1E,IAAMwB,cAAc,MAAO,CAChEmzC,UAAW2B,kBAAK7B,EAAQynsB,KAAkB,kBAAZjnqB,GAA2C,UAAZA,IAAwBxgC,EAAQolxB,kBAA+B,WAAZ5kvB,EAAuB,CAACxgC,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAU/sB,EAAQqlxB,YAAcrlxB,EAAQ,WAAW5tE,OAAOk5H,YAAWv+B,MAC/OqV,MAAOwivB,EAAaE,WAsCT/ixB,iBArRK,SAAgBC,GAClC,IAAIsjxB,EAAW,SAAkBv4vB,GAC/B,MAA8B,UAAvB/qB,EAAM+pC,QAAQ/kH,KAAmB2vR,YAAQ5pL,EAAO,KAAQ2pL,YAAO3pL,EAAO,KAG3Ew4vB,EAAoBD,EAAStjxB,EAAM+pC,QAAQE,QAAQ7iF,MACnDo8zB,EAAsBF,EAAStjxB,EAAM+pC,QAAQ+d,UAAU1gG,MAC3D,MAAO,CAEL/qB,KAAM,CACJ0lG,SAAU,WACVoN,SAAU,SACVkH,OAAQ,GAIVohC,aAAc,CACZ3tC,gBAAiBy5uB,GAInB7rsB,eAAgB,CACd5tC,gBAAiB05uB,GAInBT,YAAa,GAGbzmR,cAAe,GAGftkb,OAAQ,CACNluC,gBAAiB,eAInBkZ,MAAO,CACL7B,UAAW,kBAIb6huB,OAAQ,CACNjhvB,SAAU,WACVX,UAAW,EACXiV,OAAQ,OACRj2C,MAAO,OACPi7L,UAAW,8BAIboolB,mBAAoB,CAClBhzf,gBAAiB,mBAAmBrgW,OAAOmz1B,EAAmB,SAASnz1B,OAAOmz1B,EAAmB,0BACjG/yf,eAAgB,YAChBkxF,mBAAoB,aAItBgia,qBAAsB,CACpBjzf,gBAAiB,mBAAmBrgW,OAAOoz1B,EAAqB,SAASpz1B,OAAOoz1B,EAAqB,0BACrGhzf,eAAgB,YAChBkxF,mBAAoB,aAItB+jV,IAAK,CACHrlsB,MAAO,OACP2hC,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRD,IAAK,EACLE,WAAY,wBACZyQ,gBAAiB,QAInB45tB,gBAAiB,CACf75uB,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,MAIzCw8zB,kBAAmB,CACjB95uB,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU1gG,MAI3C67zB,kBAAmB,CACjB7ixB,MAAO,OACPi7L,UAAW,yEAIb6nlB,gBAAiB,CACf5puB,WAAY,cAAclpH,OA/FN,EA+FkC,aAIxD+y1B,WAAY,CACVr9tB,OAAQ,EACRxM,WAAY,cAAclpH,OArGN,EAqGkC,aAIxDgz1B,kBAAmB,CACjBhjxB,MAAO,OACPi7L,UAAW,0EAIbgolB,WAAY,CACV/puB,WAAY,cAAclpH,OAhHN,EAgHkC,aAMxD,4BAA6B,CAE3B,KAAM,CACJiP,KAAM,OACNC,MAAO,QAGT,MAAO,CACLD,KAAM,OACNC,MAAO,QAET,OAAQ,CACND,KAAM,OACNC,MAAO,SAGX,4BAA6B,CAE3B,KAAM,CACJD,KAAM,QACNC,MAAO,QAGT,MAAO,CACLD,KAAM,OACNC,MAAO,OAET,OAAQ,CACND,KAAM,OACNC,MAAO,QAGX,oBAAqB,CACnB,KAAM,CACJ0yG,QAAS,EACT0vU,mBAAoB,aAEtB,MAAO,CACL1vU,QAAS,EACT0vU,mBAAoB,aAEtB,OAAQ,CACN1vU,QAAS,EACT0vU,mBAAoB,oBAsHM,CAChCpub,KAAM,qBADOysE,CAEZ45O,I,0JC5RYlxM,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mBACD,iB,UCkPJ,SAASi51B,EAAc70zB,GAENA,EAAMipF,SACVjpF,EAAMygE,KADjB,IAEIhqF,EAAQu8B,YAAyBhT,EAAO,CAAC,WAAY,SAEzD,OAAOzF,IAAMwB,cAAc,MAAOtlB,GAGpC,IAAI0lB,EAAO5B,IAAMwB,cAAc+4zB,IAAW,CACxC73uB,SAAU,UAGRx+E,EAAQlE,IAAMwB,cAAc2goB,EAAmB,MAE/C7rQ,EAAet2X,IAAM8E,YAAW,SAAsBW,EAAOzuC,GAErCyuC,EAAMy0E,aAELz0E,EAAM+0zB,cAET/0zB,EAAMg1zB,WAEJh1zB,EAAMgikB,aANhC,IAmHInvf,EA3GAoivB,EAAYj1zB,EAAMi1zB,UAClBjmxB,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAGlBgmxB,GAFuBl1zB,EAAMm1zB,cAEVn1zB,EAAMkxX,WACzBA,OAAiC,IAArBgkc,EAA8B,QAAUA,EACpDE,EAAmBp1zB,EAAMo0W,UACzBA,OAAiC,IAArBghd,EAA8Bj5zB,EAAOi5zB,EACjDC,EAAmBr1zB,EAAMixX,UACzBA,OAAiC,IAArBokc,EAA8B,QAAUA,EAIpDC,GAHet1zB,EAAMw6D,MAENx6D,EAAMqT,aACGrT,EAAM+wX,kBAC9BA,OAA6C,IAA1Bukc,GAA2CA,EAG9D77kB,GAFwBz5O,EAAMu1zB,qBAEZv1zB,EAAMgzE,UACxBA,OAA+B,IAApBymK,GAAqCA,EAKhD63hB,GAJwBtxwB,EAAMm8nB,gBAENn8nB,EAAMw1zB,mBAEPx1zB,EAAMwuV,eAC7BA,OAAyC,IAAzB8ib,GAA0CA,EAI1DmkD,GAHgBz1zB,EAAM+sU,cACE/sU,EAAM43T,sBAEN53T,EAAM01zB,gBAC9BA,OAA2C,IAA1BD,EAAmC,OAASA,EAC7DE,EAAkB31zB,EAAMssU,SACxBA,OAA+B,IAApBqpf,GAAqCA,EAEhDC,GADoB51zB,EAAM61zB,kBACF71zB,EAAMm3F,gBAC9BA,OAA2C,IAA1By+tB,EAAmC,SAAUjo1B,GAChE,OAAOA,GACLio1B,EAEAr80B,GADoBymB,EAAM23T,kBAChB33T,EAAMzmB,SAKhBu80B,GAJS91zB,EAAMjJ,GACSiJ,EAAM+1zB,mBAEb/1zB,EAAMu4E,WACCv4E,EAAM+hkB,kBAC9BA,OAA6C,IAA1B+zP,EAAmC,KAAOA,EAC7DE,EAAeh2zB,EAAMg2zB,aACrBC,EAAiBj2zB,EAAMk9D,QACvBA,OAA6B,IAAnB+4vB,GAAoCA,EAC9CC,EAAqBl2zB,EAAMoxX,YAC3BA,OAAqC,IAAvB8kc,EAAgC,gBAAaA,EAC3Dh5L,EAAkBl9nB,EAAMy2E,SACxBA,OAA+B,IAApBymjB,GAAqCA,EAChDi5L,EAAuBn2zB,EAAMmxX,cAC7BA,OAAyC,IAAzBglc,EAAkC,aAAeA,EAMjEC,GALWp2zB,EAAMsxE,SACPtxE,EAAMy6F,QACAz6F,EAAMs4E,cACbt4E,EAAM06F,OACR16F,EAAMygE,KACKzgE,EAAMgxX,UACxBA,OAA+B,IAApBolc,EAA6B,OAASA,EAGjD/nQ,GAFiBrujB,EAAM8B,QAEC9B,EAAMk3R,gBAC9BA,OAA2C,IAA1Bm3R,EAAmC1me,IAAQ0me,EAC5DgoQ,EAAwBr2zB,EAAMo7R,gBAC9Bk7hB,QAAgD,IAA1BD,EAAmCrtuB,IAASqtuB,EAClEE,GAAmBv2zB,EAAMw2zB,UACzBA,QAAiC,IAArBD,GAA8B93zB,EAAQ83zB,GAClDE,GAAkBz2zB,EAAM02zB,YACxB/jhB,GAAc3yS,EAAM2yS,YACpBgkhB,GAAmB32zB,EAAMsuR,aACzB0lR,GAAah0iB,EAAMg0iB,WACnB4iR,GAAuB52zB,EAAM62zB,cAE7B78kB,SADyC,IAAzB48kB,IAAmC52zB,EAAMssU,SAC3CtsU,EAAMnuC,MACpBA,QAAuB,IAAhBmoR,GAAyB,SAAWA,GAE3CvjQ,IADYupB,EAAMxuC,MACVwhD,YAAyBhT,EAAO,CAAC,eAAgB,gBAAiB,aAAc,eAAgB,YAAa,UAAW,YAAa,gBAAiB,YAAa,YAAa,YAAa,QAAS,eAAgB,mBAAoB,uBAAwB,WAAY,kBAAmB,qBAAsB,gBAAiB,gBAAiB,wBAAyB,iBAAkB,WAAY,oBAAqB,iBAAkB,oBAAqB,UAAW,KAAM,qBAAsB,aAAc,mBAAoB,eAAgB,UAAW,cAAe,WAAY,gBAAiB,WAAY,UAAW,gBAAiB,SAAU,OAAQ,WAAY,UAAW,iBAAkB,kBAAmB,YAAa,cAAe,cAAe,eAAgB,aAAc,gBAAiB,OAAQ,WAI5zBo7R,GAAkBozD,EAAgBqme,EAAgByB,GAElDQ,GAAmBC,YAAgBn3zB,YAAS,GAAII,EAAO,CACzD0vS,cAAe,kBAEbk3B,GAAekwf,GAAiBlwf,aAChCC,GAAgBiwf,GAAiBjwf,cACjCmwf,GAAqBF,GAAiBE,mBACtCC,GAAyBH,GAAiBG,uBAC1CC,GAAgBJ,GAAiBI,cACjChjR,GAAc4iR,GAAiB5iR,YAC/BijR,GAAkBL,GAAiBK,gBACnCC,GAAiBN,GAAiBM,eAClC5l2B,GAAQsl2B,GAAiBtl2B,MACzBonY,GAAQk+d,GAAiBl+d,MACzB7hW,GAAK+/zB,GAAiB//zB,GACtBsg0B,GAAYP,GAAiBO,UAC7B76iB,GAAUs6iB,GAAiBt6iB,QAC3B86iB,GAAaR,GAAiBQ,WAC9BruuB,GAAW6tuB,GAAiB7tuB,SAC5Bs9J,GAAcuwkB,GAAiBvwkB,YAC/BhuK,GAAau+uB,GAAiBv+uB,WAC9Bg/uB,GAAiBT,GAAiBS,eAItC,GAAI9gvB,GAAYjlH,GAAMmG,OAAS,EAAG,CAChC,IAAI6/1B,GAAwB,SAA+B/uzB,GACzD,OAAO7I,YAAS,CACdsvC,UAAW2B,kBAAK7B,EAAQgiG,IAAK,CAC3Bm9J,MAAOn/P,EAAQyoxB,cACf5l2B,KACFmhH,SAAUA,GACTkhe,GAAYzriB,KAIfoqE,EADEmhe,GACeA,GAAWxilB,GAAOgm2B,IAElBhm2B,GAAMsN,KAAI,SAAUw3G,EAAQrkH,GAC3C,OAAOsoC,IAAMwB,cAAc8/R,IAAMj8R,YAAS,CACxChJ,MAAOugG,EAAe7gB,GACtBzkH,KAAMA,IACL2l2B,GAAsB,CACvBvl2B,MAAOA,IACLgj2B,OAKV,IAWIyB,GAAcD,IAXO,SAA4BhuzB,GACnD,OAAOlO,IAAMwB,cAAc,KAAM,CAC/B3hC,IAAKquC,EAAOruC,KACXmgC,IAAMwB,cAAcosiB,IAAe,CACpCj5f,UAAWF,EAAQ0oxB,WACnBtoxB,UAAW,OACV3mC,EAAOruC,KAAMmgC,IAAMwB,cAAc,KAAM,CACxCmzC,UAAWF,EAAQ2oxB,SAClBlvzB,EAAOrM,YAIRkyR,GAAeqoiB,IAAoBx/tB,EAEnCyguB,GAAmB,SAA0BthvB,EAAQrkH,GACvD,IAAIi0vB,EAAckxG,GAAe,CAC/B9gvB,OAAQA,EACRrkH,MAAOA,IAET,OAAOsoC,IAAMwB,cAAc,KAAM6D,YAAS,GAAIsmtB,EAAa,CACzDh3qB,UAAWF,EAAQsnC,SACjBg4M,GAAah4M,EAAQ,CACvB8E,SAAU8qoB,EAAY,iBACtB3toB,WAAYA,OAIZs/uB,IAAgB9mc,IAAqB/9S,EACrC8kvB,KAAiBxrf,IAA+B,IAAnBopf,KAA+C,IAAnBA,EAC7D,OAAOn7zB,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,MAAO6D,YAAS,CACnFruC,IAAKA,EACL29E,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAWstO,IAAWxtO,EAAQwtO,QAASq7iB,IAAgB7oxB,EAAQ6oxB,aAAcC,IAAgB9oxB,EAAQ8oxB,eAClIlxf,GAAanwV,KAASk8T,GAAY,CACnC57S,GAAIA,GACJi8E,SAAUA,EACVnhH,KAAe,UAATA,GAAmB,aAAUD,EACnC4nR,gBAAiBw9kB,KACjBpkvB,WAAY,CACVrhH,IAAKg1R,GACLr3M,UAAWF,EAAQ+oxB,UACnBllvB,eAAgBA,EAChB4kN,aAAcl9R,IAAMwB,cAAc,MAAO,CACvCmzC,UAAWF,EAAQyoP,cAClBogiB,GAAet9zB,IAAMwB,cAAcy0F,IAAY5wF,YAAS,GAAIs3zB,KAAiB,CAC9E,aAAchmc,EACdlxS,MAAOkxS,EACPhiV,UAAW2B,kBAAK7B,EAAQ4sjB,eAAgBhjQ,IAAS5pT,EAAQgpxB,uBACvD5jd,GAAa,KAAM0jd,GAAev9zB,IAAMwB,cAAcy0F,IAAY5wF,YAAS,GAAIq3zB,KAA0B,CAC3GjkvB,SAAUA,EACV,aAAcqkvB,GAAYpmc,EAAYD,EACtChxS,MAAOq3uB,GAAYpmc,EAAYD,EAC/B9hV,UAAW2B,kBAAK7B,EAAQipxB,eAAgBZ,IAAaroxB,EAAQkpxB,sBAC3D1B,IAAa,OAEnB/mvB,WAAY7vE,YAAS,CACnBsvC,UAAW2B,kBAAK7B,EAAQurC,OAAuB,IAAhB+8uB,IAAqBtoxB,EAAQmpxB,cAC5DnlvB,SAAUA,GACT6zP,SACAwwf,IAAapuuB,GAAW1uF,IAAMwB,cAAcq/R,GAAiB,CAChElsP,UAAW2B,kBAAK7B,EAAQsxM,OAAQkuG,GAAiBx/S,EAAQopxB,qBACzDhnvB,MAAO,CACLhgC,MAAO63C,GAAWA,GAASiM,YAAc,MAE3C19E,KAAM,eACNyxE,SAAUA,GACVxoB,MAAM,GACLlmE,IAAMwB,cAAcm7R,EAAgB,CACrChoP,UAAWF,EAAQ64C,OAClB3qB,GAAqC,IAA1Bq6vB,GAAe5/1B,OAAe4iC,IAAMwB,cAAc,MAAO,CACrEmzC,UAAWF,EAAQkuB,SAClBk0T,GAAe,KAAgC,IAA1Bmmc,GAAe5/1B,QAAiB20W,GAAapvQ,EAEjD,KAF2D3iE,IAAMwB,cAAc,MAAO,CACxGmzC,UAAWF,EAAQ6osB,WAClB1mX,GAAuBomc,GAAe5/1B,OAAS,EAAI4iC,IAAMwB,cAAcgmkB,EAAkBnikB,YAAS,CACnGsvC,UAAWF,EAAQqpxB,SAClBlB,KAAmBnB,GAAeuB,GAAez41B,KAAI,SAAUw3G,EAAQrkH,GACxE,OAAIsnB,EACKm90B,GAAY,CACjBt81B,IAAKk8G,EAAOl8G,IACZgiC,SAAUk6E,EAAOx0E,QAAQhjC,KAAI,SAAUw51B,EAASn1M,GAC9C,OAAOy0M,GAAiBU,EAAShivB,EAAOrkH,MAAQkxpB,QAK/Cy0M,GAAiBthvB,EAAQrkH,OAC5B,OAAS,SAiVF8+E,iBA9yBK,SAAgBC,GAClC,IAAI2uC,EAEJ,MAAO,CAELtyG,KAAM,CACJ,+DAAgE,CAC9DyxV,WAAY,YAKhBtiD,QAAS,GAGTxrI,IAAK,CACH3/F,OAAQ,EACRe,SAAU,oBAIZqlxB,aAAc,CACZpmxB,OAAQ,EACRe,SAAU,oBAIZ0lxB,aAAc,GAGdD,aAAc,GAGdE,UAAW,CACT5mxB,SAAU,OACV,mCAAoC,CAClCw4C,aAAc,IAEhB,+BAAgC,CAC9BA,aAAc,IAEhB,WAAY,CACVv4C,MAAO,EACPE,SAAU,IAEZ,4BAA6B,CAC3B02C,cAAe,EACf,WAAY,CACVp2C,QAAS,GAEX,uBAAwB,CACtBA,QAAS,UAGb,2DAA4D,CAC1D,WAAY,CACVA,QAAS,eAEX,uBAAwB,CACtBA,QAAS,cAGb,oCAAqC,CACnCA,QAAS,EACT,mCAAoC,CAClC+3C,aAAc,IAEhB,+BAAgC,CAC9BA,aAAc,IAEhB,WAAY,CACV/3C,QAAS,aAEX,uBAAwB,CACtB4sD,YAAa,GAEf,kBAAmB,CACjBluH,MAAO,IAGX,2EAA4E,CAC1EshE,QAAS,EACT,WAAY,CACVA,QAAS,cAGb,kCAAmC,CACjCm2C,WAAY,GACZyW,YAAa,EACb,mCAAoC,CAClC7U,aAAc,IAEhB,+BAAgC,CAC9BA,aAAc,IAEhB,WAAY,CACV/3C,QAAS,WAEX,kBAAmB,CACjBthE,MAAO,IAGX,uEAAwE,CACtE03G,cAAe,EACf,WAAY,CACVp2C,QAAS,eAMf2oC,MAAO,CACLpoC,SAAU,EACVs5C,aAAc,WACdzI,QAAS,GAIXm1uB,aAAc,CACZn1uB,QAAS,GAIXy0M,aAAc,CAEZ1kN,SAAU,WACVziG,MAAO,EACP85G,IAAK,oBAKPwxgB,eAAgB,CACdtkhB,aAAc,EACd1lC,QAAS,EACTmqB,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,OAC5B+lF,WAAY,UAIdk5f,oBAAqB,GAGrBC,eAAgB,CACdrmxB,QAAS,EACT0lC,aAAc,EACdvb,MAAO/qB,EAAM+pC,QAAQ/5F,OAAO+3P,QAI9Bm/kB,mBAAoB,CAClB/luB,UAAW,kBAIbmuJ,OAAQ,CACNxpJ,OAAQ9lD,EAAM8lD,OAAOkggB,OAIvBohO,oBAAqB,CACnBrlvB,SAAU,YAIZ8U,MAAOjoF,YAAS,GAAIoxC,EAAM82C,WAAW+S,MAAO,CAC1C1a,SAAU,SACV9uC,OAAQ,QACR,SAAU,CACRu7L,UAAW,OACXzsJ,SAAU,UAKdk4uB,QAAS,CACP39L,UAAW,OACXrplB,OAAQ,EACRO,QAAS,UACTmhC,SAAU,YAIZ7V,QAAS,CACPnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BlnD,QAAS,aAIXimsB,UAAW,CACT97qB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BlnD,QAAS,aAIX0kC,QAASqJ,EAAU,CACjB+J,UAAW,GACXx4C,QAAS,OACTM,eAAgB,aAChBzC,WAAY,SACZosC,OAAQ,UACR4M,WAAY,EACZ92C,UAAW,aACXwtR,QAAS,IACTyB,wBAAyB,cACzBl4O,cAAe,EACfwW,YAAa,GACb7U,aAAc,IACb7+C,YAAgB60C,EAAS3uC,EAAMc,YAAYO,GAAG,MAAO,CACtDq3C,UAAW,SACT5+C,YAAgB60C,EAAS,0BAA2B,CACtD7E,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOo6F,WACpCtwC,YAAgB60C,EAAS,uBAAwB,CACnD7E,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOsyU,QACpCxoR,YAAgB60C,EAAS,0BAA2B,CACtDqD,QAAS,GACTmH,cAAe,SACbr/C,YAAgB60C,EAAS,WAAY,CACvC7E,gBAAiB9pC,EAAM+pC,QAAQ/5F,OAAOo6F,WACpCuE,GAGJ+3uB,WAAY,CACV58uB,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1CuC,KAAM,GAIRutuB,QAAS,CACP/lxB,QAAS,MAykBmB,CAChCttE,KAAM,mBADOysE,CAEZ8/U,I,6BCh0BH,iDAyBe57W,gBAAgB,eAAhBA,EAjBmC,SAAC,GAAW,IAATpzB,EAAQ,EAARA,EACnD,OACE,eAAC,IAAD,CACEytD,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SACXqiC,MAAO,CACLiW,OAAQ,QANZ,UASE,cAAC,IAAD,IACA,cAAC,IAAD,CAAY7X,QAAQ,UAApB,SAA+B3tF,EAAE,8B,cCnBvC,IAAIqoJ,EAAch2K,OAAOD,UAgBzBjD,EAAOC,QAPP,SAAqBO,GACnB,IAAImgL,EAAOngL,GAASA,EAAM4C,YAG1B,OAAO5C,KAFqB,mBAARmgL,GAAsBA,EAAK19K,WAAci2K,K,6BCV/D,kCAIO,IAEMqurB,EAAyB,CACpCn8vB,QAAS,QACTC,SAAU,eACVo6O,SAAS,EACT/3N,gBAAgB,GAWLmjP,EAAkB,SAAC9jQ,EAAayrN,GAC3C,IACE,OAAOzrN,EAAOJ,QAAQ6rN,GAnBa,YAmBsB+uiB,GACzD,MAAOrxzB,GAEP,OADAppB,QAAQ7Z,MAAM,iCAAkCijC,GACzC,M,6GCUI28sB,IAxBkC,SAAC7jtB,GAChD,IACEw4zB,EAGEx4zB,EAHFw4zB,aACAp8zB,EAEE4D,EAFF5D,SACGhiB,EAHL,YAII4lB,EAJJ,GAKA,OAAIw4zB,EAEA,cAAC,IAAD,2BACMp+0B,GADN,aAGIgiB,KAKN,cAAC,IAAD,2BACMhiB,GADN,aAGIgiB,O,6BC/BR,IAAIqgL,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,mJACD,QAEJ3K,EAAQywH,QAAUq4I,G,6BCflB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,uIACD,aAEJ3K,EAAQywH,QAAUq4I,G,gCCTlB,IAAI3lP,EAAwBlgB,OAAOkgB,sBAC/B/c,EAAiBnD,OAAOD,UAAUoD,eAClCoh2B,EAAmBvk2B,OAAOD,UAAUgJ,qBAExC,SAAS6Z,EAAS/K,GACjB,GAAY,OAARA,QAAwBna,IAARma,EACnB,MAAM,IAAI5T,UAAU,yDAGrB,OAAOjE,OAAO6X,GA+Cf/a,EAAOC,QA5CP,WACC,IACC,IAAKiD,OAAO+8C,OACX,OAAO,EAMR,IAAIynzB,EAAQ,IAAI/z1B,OAAO,OAEvB,GADA+z1B,EAAM,GAAK,KACkC,MAAzCxk2B,OAAOsvO,oBAAoBk1nB,GAAO,GACrC,OAAO,EAKR,IADA,IAAIC,EAAQ,GACH7/1B,EAAI,EAAGA,EAAI,GAAIA,IACvB6/1B,EAAM,IAAMh01B,OAAO6tJ,aAAa15J,IAAMA,EAKvC,GAAwB,eAHX5E,OAAOsvO,oBAAoBm1nB,GAAO751B,KAAI,SAAU5C,GAC5D,OAAOy81B,EAAMz81B,MAEHqb,KAAK,IACf,OAAO,EAIR,IAAIqh1B,EAAQ,GAIZ,MAHA,uBAAuB/jzB,MAAM,IAAIryC,SAAQ,SAAUu6M,GAClD67oB,EAAM77oB,GAAUA,KAGf,yBADE7oN,OAAO0D,KAAK1D,OAAO+8C,OAAO,GAAI2nzB,IAAQrh1B,KAAK,IAM9C,MAAO2vB,GAER,OAAO,GAIQ2xzB,GAAoB3k2B,OAAO+8C,OAAS,SAAUnuB,EAAQC,GAKtE,IAJA,IAAIje,EAEA4d,EADA3d,EAAK+R,EAASgM,GAGTxf,EAAI,EAAGA,EAAI9J,UAAU7B,OAAQ2L,IAAK,CAG1C,IAAK,IAAIlJ,KAFT0K,EAAO5Q,OAAOsF,UAAU8J,IAGnBjM,EAAeP,KAAKgO,EAAM1K,KAC7B2K,EAAG3K,GAAO0K,EAAK1K,IAIjB,GAAIga,EAAuB,CAC1BsO,EAAUtO,EAAsBtP,GAChC,IAAK,IAAIhM,EAAI,EAAGA,EAAI4pB,EAAQ/qB,OAAQmB,IAC/B2/1B,EAAiB3h2B,KAAKgO,EAAM4d,EAAQ5pB,MACvCiM,EAAG2d,EAAQ5pB,IAAMgM,EAAK4d,EAAQ5pB,MAMlC,OAAOiM,I,cCvFR,IAGIi9J,EAAW,mBAoBfhxK,EAAOC,QAVP,SAAiBO,EAAOmG,GACtB,IAAI3B,SAAcxE,EAGlB,SAFAmG,EAAmB,MAAVA,EAfY,iBAewBA,KAGlC,UAAR3B,GACU,UAARA,GAAoBgsK,EAASnxH,KAAKr/C,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQmG,I,gBCrBjD,IAAI8gzB,EAAmBvnzB,EAAQ,MAC3Bo3K,EAAYp3K,EAAQ,MACpBs0K,EAAWt0K,EAAQ,MAGnBi1K,EAAmBX,GAAYA,EAASY,aAmBxCA,EAAeD,EAAmBmC,EAAUnC,GAAoBsyoB,EAEpEznzB,EAAOC,QAAUm1K,G,gBC1BjB,IAGIoG,EAHYt7K,EAAQ,IAGLm6K,CAAUn3K,OAAQ,UAErClD,EAAOC,QAAUu7K,G,gBCLjB,IAAI4qoB,EAAiBlmzB,EAAQ,MACzBmmzB,EAAkBnmzB,EAAQ,MAC1BomzB,EAAepmzB,EAAQ,MACvBqmzB,EAAermzB,EAAQ,MACvBsmzB,EAAetmzB,EAAQ,MAS3B,SAASq9K,EAAU9uK,GACjB,IAAIxN,GAAS,EACT0F,EAAoB,MAAX8H,EAAkB,EAAIA,EAAQ9H,OAG3C,IADA7B,KAAKkT,UACI/W,EAAQ0F,GAAQ,CACvB,IAAIoB,EAAQ0G,EAAQxN,GACpB6D,KAAK0H,IAAIzE,EAAM,GAAIA,EAAM,KAK7Bw1K,EAAUt6K,UAAU+U,MAAQouyB,EAC5B7ooB,EAAUt6K,UAAV,OAAgCojzB,EAChC9ooB,EAAUt6K,UAAU4F,IAAMy9yB,EAC1B/ooB,EAAUt6K,UAAU8F,IAAMw9yB,EAC1BhpoB,EAAUt6K,UAAUuJ,IAAMg6yB,EAE1BxmzB,EAAOC,QAAUs9K,G,gBC/BjB,IAAIj3I,EAAKpmC,EAAQ,KAoBjBF,EAAOC,QAVP,SAAsB0I,EAAOS,GAE3B,IADA,IAAIzC,EAASgC,EAAMhC,OACZA,KACL,GAAI2/B,EAAG39B,EAAMhC,GAAQ,GAAIyC,GACvB,OAAOzC,EAGX,OAAQ,I,gBCjBV,IAAI4rL,EAAYryL,EAAQ,MAiBxBF,EAAOC,QAPP,SAAoB6N,EAAK1E,GACvB,IAAI02C,EAAOhyC,EAAI4vK,SACf,OAAO6U,EAAUnpL,GACb02C,EAAmB,iBAAP12C,EAAkB,SAAW,QACzC02C,EAAKhyC,M,gBCdX,IAAIu4K,EAAkBnmL,EAAQ,MAC1Bk8K,EAAel8K,EAAQ,KA0B3BF,EAAOC,QAVP,SAASykL,EAAYlkL,EAAOilB,EAAOi6J,EAASC,EAAY1uK,GACtD,OAAIzQ,IAAUilB,IAGD,MAATjlB,GAA0B,MAATilB,IAAmB22J,EAAa57K,KAAW47K,EAAa32J,GACpEjlB,IAAUA,GAASilB,IAAUA,EAE/B4gK,EAAgB7lL,EAAOilB,EAAOi6J,EAASC,EAAY+E,EAAazzK,M,gBCxBzE,IAAIssK,EAAYr9K,EAAQ,KACpBumzB,EAAavmzB,EAAQ,MACrBwmzB,EAAcxmzB,EAAQ,MACtBymzB,EAAWzmzB,EAAQ,MACnB0mzB,EAAW1mzB,EAAQ,MACnBsnzB,EAAWtnzB,EAAQ,MASvB,SAASyhB,EAAMlT,GACb,IAAIqxC,EAAOh7C,KAAK44K,SAAW,IAAIH,EAAU9uK,GACzC3J,KAAKjE,KAAOi/C,EAAKj/C,KAInB8gB,EAAM1e,UAAU+U,MAAQyuyB,EACxB9kyB,EAAM1e,UAAN,OAA4ByjzB,EAC5B/kyB,EAAM1e,UAAU4F,IAAM89yB,EACtBhlyB,EAAM1e,UAAU8F,IAAM69yB,EACtBjlyB,EAAM1e,UAAUuJ,IAAMg7yB,EAEtBxnzB,EAAOC,QAAU0hB,G,gBC1BjB,IAAInb,EAAUtG,EAAQ,KAClBunL,EAAQvnL,EAAQ,MAChBgsL,EAAehsL,EAAQ,MACvB6F,EAAW7F,EAAQ,MAiBvBF,EAAOC,QAPP,SAAkBO,EAAOyI,GACvB,OAAIzC,EAAQhG,GACHA,EAEFinL,EAAMjnL,EAAOyI,GAAU,CAACzI,GAAS0rL,EAAanmL,EAASvF,M,gBCjBhE,IAAImM,EAAiBzM,EAAQ,MAwB7BF,EAAOC,QAbP,SAAyBgJ,EAAQG,EAAK5I,GACzB,aAAP4I,GAAsBuD,EACxBA,EAAe1D,EAAQG,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAAS5I,EACT,UAAY,IAGdyI,EAAOG,GAAO5I,I,cCAlBR,EAAOC,QAJP,SAAkBO,GAChB,OAAOA,I,6BCfT0C,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQ6lB,SAAW7lB,EAAQwO,QAAUxO,EAAQi4N,UAAOt3N,EAEpD,IAAIq3C,EAAgb,SAAUtlC,EAAK7K,GAAK,GAAIvB,MAAMC,QAAQmM,GAAQ,OAAOA,EAAY,GAAInO,OAAOC,YAAYvB,OAAOyP,GAAQ,OAAxf,SAAuBA,EAAK7K,GAAK,IAAIive,EAAO,GAAQC,GAAK,EAAU9iQ,GAAK,EAAWgsB,OAAKt/P,EAAW,IAAM,IAAK,IAAiCk2e,EAA7Bx9Z,EAAK3mE,EAAInO,OAAOC,cAAmBuye,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAAoB2xe,EAAK7le,KAAK4le,EAAGt2e,QAAYsH,GAAKive,EAAKpwe,SAAWmB,GAA3Dkve,GAAK,IAAoE,MAAO9gc,GAAOg+L,GAAK,EAAMgsB,EAAKhqN,EAAtL,QAAuM,KAAW8gc,GAAM19Z,EAAE,QAAYA,EAAE,SAAjC,QAA2D,GAAI46J,EAAI,MAAMgsB,GAAQ,OAAO62O,EAA6H+wX,CAAcn11B,EAAK7K,GAAa,MAAM,IAAIX,UAAU,yDAEtlBlH,EAAQ8n2B,OAASA,EACjB9n2B,EAAQ4I,IA4HR,SAASA,EAAIgy0B,EAAMzx0B,GACjB,IAAI4B,EAAOg91B,EAAQntB,EAAKl8zB,MAAOvV,GAC3B6+1B,EAAQptB,EAAKotB,MAGjB,IAAKC,EAAQrtB,EAAMzx0B,GACjB,OACK,GAAI2+1B,EAAOE,EAAMj91B,GAAO6v0B,EAAKl8zB,MAAQ,GAE1C,OAAO9V,EAAIo/1B,EAAMj91B,GAAO5B,GAGxB,GAAI6+1B,EAAMj91B,GAAM5B,MAAQA,EACtB,OAAO6+1B,EAAMj91B,GAAMxK,OAxIzBP,EAAQuM,IAAMA,EACdvM,EAAQ49J,IA4LR,SAASA,EAAIg9qB,EAAMzx0B,GACjB,IAAI4B,EAAOg91B,EAAQntB,EAAKl8zB,MAAOvV,GAC3B6+1B,EAAQptB,EAAKotB,MAGjB,GAAKC,EAAQrtB,EAAMzx0B,GAEZ,IAAI2+1B,EAAOE,EAAMj91B,GAAO6v0B,EAAKl8zB,MAAQ,GAAI,CAC9C,IAAIo5yB,EAAMl6pB,EAAIoqsB,EAAMj91B,GAAO5B,GAC3B,OAAI6+1B,EAAMj91B,KAAU+szB,EACXowC,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,EAAM+szB,KAGhC8iB,EAEP,OAAIotB,EAAMj91B,GAAM5B,MAAQA,QAA6BxI,IAAtBqn2B,EAAMj91B,GAAMxK,MAClC2n2B,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,OAAMpK,KAGhCi60B,EAjBP,OAAOA,GAjMX560B,EAAQio2B,QAAUA,EAClBjo2B,EAAQoo2B,eA0PR,SAASA,EAAex30B,GACtB,IAAIlS,EAAQnW,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEhF,IAAKu/1B,EAAOl30B,EAAGlS,GACb,OAAOkS,EAET,IAAIhe,EAAM,EACNo11B,EAAQp30B,EAAEo30B,MAAMx31B,QAAO,SAAUxF,EAAG8P,EAAKjT,GAK3C,OAJIiT,IACFlI,IACA5H,EAAEnD,GAAKug2B,EAAett1B,EAAK4D,EAAQ,IAE9B1T,IACN,IAEH,OADAg91B,EAAMth2B,OAASkM,EACR,CACL8L,MAAOkS,EAAElS,MACTsp1B,MAAOA,IA1QXho2B,EAAQ6N,IAgRR,SAAa+s0B,EAAMlz0B,GACjB,IAAIwc,EAAS02zB,EAWb,OAVAps0B,EAAQos0B,GAAMrp0B,SAAQ,SAAU+iC,GAC9B,IAAI40Q,EAAQlxQ,EAAe1D,EAAO,GAC9BnrC,EAAM+/S,EAAM,GACZ3oT,EAAQ2oT,EAAM,GAEdtnI,EAAWl6K,EAAGnH,EAAO4I,GACrBy4K,IAAarhL,IACf2jB,EAAS3X,EAAI2X,EAAQ/a,EAAKy4K,OAGvB19J,GA1RT,IAIgCvY,EAJ5B081B,EAAQpo2B,EAAQ,MAEhBqo2B,GAE4B381B,EAFI081B,IAEiB181B,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAEvF,SAAS64F,EAAmB9xF,GAAO,GAAIpM,MAAMC,QAAQmM,GAAM,CAAE,IAAK,IAAI7K,EAAI,EAAGggP,EAAOvhP,MAAMoM,EAAIhM,QAASmB,EAAI6K,EAAIhM,OAAQmB,IAAOggP,EAAKhgP,GAAK6K,EAAI7K,GAAM,OAAOggP,EAAe,OAAOvhP,MAAMuN,KAAKnB,GAwB1L,IAAInB,EAAU,GAAGA,QACb05V,EAAU,GAAG7kW,eAGjB,SAAS8h2B,EAASt30B,GAkBhB,OANAA,EAAErsB,OAAOC,UAAY,WACnB,OAZF,SAA4BosB,GAC1B,IAAI230B,EAAc/51B,EAAQoiB,GACtB430B,EAAM,EAEV,MAAO,CACL5j2B,KAAM,WACJ,OAAO4j2B,EAAMD,EAAY7h2B,OAAS,CAAEvB,MAAM,EAAO5E,MAAOgo2B,EAAYC,MAAW,CAAErj2B,MAAM,KAMpFsj2B,CAAmB730B,IAG5BA,EAAErkB,IAAM,aAEDqkB,EAIT,SAASu30B,EAAez11B,EAAKgnJ,EAAK5+I,GAChC,MAAO,GAAG3K,OAAOq0F,EAAmB9xF,EAAIiC,MAAM,EAAG+kJ,IAAO,CAAC5+I,GAAM0pF,EAAmB9xF,EAAIiC,MAAM+kJ,EAAM,KAMpG,SAASviH,EAAQzvC,GACf,IAAIgD,EAAInC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,IAAI2E,QAC5Ew71B,EAAQng2B,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,SAAUV,GACxF,OAAOA,GAGT,OAAO,WACL,IAAIsB,EAAMu/1B,EAAM571B,WAAMnM,EAAW4H,WACjC,OAAImC,EAAE5B,IAAIK,IAGVuB,EAAE6B,IAAIpD,EAAKzB,EAAGoF,WAAMnM,EAAW4H,YAFtBmC,EAAE9B,IAAIO,IAQnB,IAAI4+1B,EAAU5wzB,GAAQ,WACpB,IAAIz4B,EAAQnW,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAC5EY,EAAMZ,UAAU,GAGpB,OAAO,EAAI+/1B,EAAO73uB,SAAS/xG,EAAQ,IAAMvV,EAAK,MAAQ,KACrD,IAAIsO,KAAO,SAAUiH,EAAOvV,GAC7B,MAAO,GAAKuV,EAAQvV,KAKlB8uN,EAAOj4N,EAAQi4N,KAAO,WACxB,IAAIv5M,EAAQnW,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEhF,OAAO2/1B,EAAS,CACdxp1B,MAAOA,EAAOsp1B,MAAO,IAAI1h2B,MAAM,OAKnC,SAASwh2B,EAAOltB,GACd,IAAIl8zB,EAAQnW,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,EAEhF,OAAOqy0B,GAAQ3ve,EAAQplW,KAAK+00B,EAAM,UAAY3ve,EAAQplW,KAAK+00B,EAAM,UAAYA,EAAKl8zB,QAAUA,EAmC9F,SAASnS,EAAIqu0B,EAAMzx0B,EAAK5I,GACtB,IAAIwK,EAAOg91B,EAAQntB,EAAKl8zB,MAAOvV,GAC3B6+1B,EAAQptB,EAAKotB,MAGjB,GAAKC,EAAQrtB,EAAMzx0B,GAKZ,IAAI2+1B,EAAOE,EAAMj91B,GAAO6v0B,EAAKl8zB,MAAQ,GAAI,CAE9C,IAAIiq1B,EAAWp81B,EAAIy71B,EAAMj91B,GAAO5B,EAAK5I,GACrC,OAAIoo2B,IAAaX,EAAMj91B,GAEd6v0B,EAEFstB,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,EAAM491B,KAIrC,OAAIX,EAAMj91B,GAAM5B,MAAQA,EAClB6+1B,EAAMj91B,GAAMxK,QAAUA,EACjBq60B,EAEFstB,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,EAAM,CAAE5B,IAAKA,EAAK5I,MAAOA,MAInD2n2B,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,EAAMwB,EAAIA,EAAI0rN,EAAK2inB,EAAKl8zB,MAAQ,GAAIsp1B,EAAMj91B,GAAM5B,IAAK6+1B,EAAMj91B,GAAMxK,OAAQ4I,EAAK5I,MA7B7G,OAAO2n2B,EAAS,CACdxp1B,MAAOk8zB,EAAKl8zB,MACZsp1B,MAAOG,EAAeH,EAAOj91B,EAAM,CAAE5B,IAAKA,EAAK5I,MAAOA,MAgE5D,IAAIiO,EAAUxO,EAAQwO,QAAU2oC,GAAQ,SAAUyjyB,GAChD,IAAIlo0B,EAAM,GACNs11B,EAAQptB,EAAKotB,MAajB,OAXAz21B,EAAQ1L,KAAKmi2B,GAAO,SAAUlt1B,GACvBA,IAGAgt1B,EAAOht1B,EAAK8/zB,EAAKl8zB,MAAQ,GAI5BhM,EAAMA,EAAIvC,OAAO3B,EAAQsM,IAHzBpI,EAAIzB,KAAK,CAAC6J,EAAI3R,IAAK2R,EAAIva,YAMpBmS,KAGT,SAASu11B,EAAQrtB,EAAMzx0B,GACrB,QAASyx0B,EAAKotB,MAAMD,EAAQntB,EAAKl8zB,MAAOvV,IAI3BnJ,EAAQ6lB,SAAWsxB,GAAQ,SAAUyjyB,GAClD,OAAOps0B,EAAQos0B,GAAMpq0B,QAAO,SAAUxF,EAAGkgC,GACvC,IAAIsC,EAAQwK,EAAe9M,EAAM,GAC7B/hC,EAAMqkC,EAAM,GACZjtC,EAAQitC,EAAM,GAElB,OAAOxiC,EAAE7B,GAAO5I,EAAOyK,IACtB,Q,6BChQL/H,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQsra,cAAgBtra,EAAQ66Q,UAAY76Q,EAAQ46Q,OAAS56Q,EAAQ26Q,GAAK36Q,EAAQy9E,QAAUz9E,EAAQiR,KAAOjR,EAAQora,oBAAsBpra,EAAQ4o2B,kBAAoB5o2B,EAAQ6o2B,qBAAkB,EAM/L,IAAIA,EAAkB,2BACtB7o2B,EAAQ6o2B,gBAAkBA,EAoB1B7o2B,EAAQ4o2B,kBAlBgB,SAA2Bt6yB,EAAUv+B,GAC3D,IAAI+40B,EAAmBvg2B,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,IAAmBA,UAAU,GACtF,MAAO,CACLxD,KAAM8j2B,EACN98zB,QAAS,CACPuiB,SAAUA,EACVv+B,OAAQA,EACR+40B,iBAAkBA,KAYxB,IAAI19b,EAAsB,+BAC1Bpra,EAAQora,oBAAsBA,EAE9B,IAAIC,EAAiB,SAAwBn/T,GAC3C,OAAO,WACL,IAAK,IAAIt8E,EAAOrnB,UAAU7B,OAAQmpB,EAAO,IAAIvpB,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvnB,UAAUunB,GAGzB,MAAO,CACL/qB,KAAMqma,EACNr/X,QAAS,CACPmgE,OAAQA,EACRr8E,KAAMA,MAYV5e,EAAOo6Z,EAAe,QAC1Brra,EAAQiR,KAAOA,EACf,IAAIwsE,EAAU4tV,EAAe,WAC7Brra,EAAQy9E,QAAUA,EAClB,IAAIk9L,EAAK0wJ,EAAe,MACxBrra,EAAQ26Q,GAAKA,EACb,IAAIC,EAASywJ,EAAe,UAC5Brra,EAAQ46Q,OAASA,EACjB,IAAIC,EAAYwwJ,EAAe,aAC/Brra,EAAQ66Q,UAAYA,EACpB,IAAIywJ,EAAgB,CAClBr6Z,KAAMA,EACNwsE,QAASA,EACTk9L,GAAIA,EACJC,OAAQA,EACRC,UAAWA,GAEb76Q,EAAQsra,cAAgBA,G,6BC3ExB,4HAQay9b,EAAc,SAACC,GAAD,OAAW,wEAGlC,GAHkC,IACpClxe,gBADoC,aAEpCrnH,YAFoC,MAE7B,EAF6B,SAG3BwoJ,UAAQr5P,EAAEopsB,EAAV/vc,CAAiB,CAC1Bl0Z,KAAMk8lB,IACNl1jB,QAAS,CACP+rV,WACArnH,YAISw4lB,EAAgB,SAACD,GAAD,OAAW,wEAGpC,GAHoC,IACtClxe,gBADsC,aAEtCnqW,cAFsC,MAE7B,EAF6B,SAG7BsrY,UAAQr5P,EAAEopsB,EAAV/vc,CAAiB,CAC1Bl0Z,KAAMm8lB,IACNn1jB,QAAS,CACP+rV,WACAnqW,cAISu70B,EAAiB,SAACF,GAAD,OAAW,wEAErC,GAFqC,IACvCz4H,eADuC,MAC7B,GAD6B,SAE9Bt3U,UAAQr5P,EAAEopsB,EAAV/vc,CAAiB,CAC1Bl0Z,KAAMo8lB,IACNp1jB,QAAS,CACPwksB,eAaW,KACbw4H,cACAE,gBACAC,iBACAC,YAbyB,SAACH,GAAD,OAAW,wEAElC,GAFkC,IACpCho2B,aADoC,MAC5B,EAD4B,SAE3Bi4Z,UAAQr5P,EAAEopsB,EAAV/vc,CAAiB,CAC1Bl0Z,KAAMq8lB,IACNr1jB,QAAS,CACP/qC,e,gGCzCS6qa,EAAkB,kBAehB6mQ,IAbU,eAAC9mQ,EAAD,uDAAkBC,EAAlB,OAAsC,SAAsDrtX,GAInH,IAAM+tjB,EAAuB,SAACx9jB,EAAczuC,GAC1C,IAAM8o2B,EAA2C5qzB,EACjD,OAAO,cAAC4qzB,EAAD,2BAAsBr6zB,GAAtB,eAAmC68X,EAAStra,MAIrD,OADyBgpC,aAAmCijkB,M,cCd9DxsmB,EAAOC,QAAU,SAAUsmK,GACzB,GAAiB,mBAANA,EAAkB,MAAMp/J,UAAUo/J,EAAK,uBAClD,OAAOA,I,cCFT,IAAIxgI,EAAK,EACL8yrB,EAAKh3tB,KAAKy1E,SACdt3E,EAAOC,QAAU,SAAUmJ,GACzB,MAAO,UAAUgH,YAAexP,IAARwI,EAAoB,GAAKA,EAAK,QAAS28B,EAAK8yrB,GAAI9ytB,SAAS,O,gBCHnF,IAAIymyB,EAAMtsyB,EAAQ,KAAgBs7E,EAC9BzyE,EAAM7I,EAAQ,KACdk8f,EAAMl8f,EAAQ,IAARA,CAAkB,eAE5BF,EAAOC,QAAU,SAAUsmK,EAAIyZ,EAAK4uU,GAC9BroV,IAAOx9J,EAAIw9J,EAAKqoV,EAAOroV,EAAKA,EAAGtjK,UAAWm5f,IAAMowS,EAAIjmoB,EAAI61V,EAAK,CAAEvvf,cAAc,EAAMrM,MAAOw/K,M,gBCLhG9/K,EAAQ,MAYR,IAXA,IAAI8zK,EAAS9zK,EAAQ,KACjBy8kB,EAAOz8kB,EAAQ,KACf84f,EAAY94f,EAAQ,KACpBy7f,EAAgBz7f,EAAQ,IAARA,CAAkB,eAElCop2B,EAAe,wbAIUzlzB,MAAM,KAE1B/7C,EAAI,EAAGA,EAAIwh2B,EAAa3i2B,OAAQmB,IAAK,CAC5C,IAAIkzf,EAAOsuW,EAAaxh2B,GACpBlF,EAAaoxK,EAAOgnV,GACpBpjb,EAAQh1E,GAAcA,EAAWK,UACjC20E,IAAUA,EAAM+jb,IAAgBghF,EAAK/kgB,EAAO+jb,EAAeX,GAC/DhC,EAAUgC,GAAQhC,EAAUzyf,Q,6BCjB9B,6DA+Deu4b,IA3CG,SAAC9vZ,GACjB,IACEipF,EAGEjpF,EAHFipF,SACA+lU,EAEEhvZ,EAFFgvZ,WACAv0T,EACEz6F,EADFy6F,QAGIzpD,EAAQwjD,cAEd,OACE,cAAC,IAAD,CACE/zB,KAAMttG,QAAQ81H,GACdA,SAAUA,EACVhJ,UAAU,eACV7O,MAAO,CACL4M,WAAYhtC,EAAMZ,QAAQ,GAC1BgiC,UAAW,EACXg8T,aAAc,cAPlB,SAUE,cAAC,IAAD,CAAmBr3G,YAAat8L,EAAhC,SACE,cAAC,IAAD,CAAQ1T,UAAW,EAAG3V,MAAO,CAC3B9/B,SAAU,IACVs7L,UAAW,IACXywC,UAAW,QAHb,SAMI2xI,EAAWlwb,KAAI,SAACtN,EAAeS,GAAhB,OACb,cAAC,IAAD,CAAwB8pG,MAAM,cAAcqV,MAAO,CACjDsM,aAAczrH,IAAU+8b,EAAWr3b,OAAS,EAAI,sBAAwB,OACxE05E,OAAQL,EAAMZ,QAAQ,EAAG,KACzBwB,QAASZ,EAAMZ,QAAQ,EAAG,KAH5B,SAKG5+E,GALcS,c,6BC9C/BiC,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQsp2B,UAqBR,SAAmBv6zB,EAAoBniB,EAAuB6xT,GAC5D,GAAI1vS,EAAMniB,GACR,OAAO,IAAIngB,MAAM,gBAAgB0D,OAAOyc,EAAU,eAAezc,OAAOsuU,EAAe,8CAtB3Fz+U,EAAQup2B,YAKR,SAAqB7g2B,EAAoC+gC,GACvD,IAAK,IAAI5hC,EAAI,EAAGnB,EAASgC,EAAMhC,OAAQmB,EAAInB,EAAQmB,IACjD,GAAI4hC,EAAS38B,MAAM28B,EAAU,CAAC/gC,EAAMb,GAAIA,EAAGa,IAAS,OAAOA,EAAMb,IANrE7H,EAAQwh2B,IAgBR,SAAah31B,GACX,OAAOi2C,SAASj2C,EAAG,KAhBrBxK,EAAQijL,WAQR,SAAoBl0J,GAElB,MAAuB,oBAATA,GAAgE,sBAAzC9rB,OAAOD,UAAU8C,SAASD,KAAKkpB,IATtE/uB,EAAQw7e,MAWR,SAAez9X,GACb,MAAsB,kBAARA,IAAqB98D,MAAM88D,K,6BCnB3C,IAAIytG,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,oGACD,mBAEJ3K,EAAQywH,QAAUq4I,G,oECKL+9V,EAAe54kB,iBAAO,CACjCuhF,MAAM,IAwBOg6vB,MArBf,WAAmE,IAA7C39zB,EAA4C,uDAApCg7jB,EAAc92kB,EAAsB,uCAChE,OAAIA,EAAO050B,GACD150B,EAAOm7E,KAAKnmG,OACbkzC,IAAuBkB,yBACnBtN,EAAMt/B,IAAI,OAAQwjB,EAAOgc,QAAQyjE,OAAS3jE,EAAMjjC,IAAI,SAEpDijC,EAMT9b,EAAOm7E,MACDn7E,EAAOm7E,KAAKnmG,KAET8mC,GAGNA,G,qDCyDMiuC,sBACb4pC,kBAAQ,MAPH,SAA4Bl0E,GACjC,MAAO,CACLA,eAhBG,SAAoBmC,EAAYC,EAAeN,GACpD,IAAMo4zB,EAAgB,kCAA8Bp4zB,EAAS6iF,UAAY,IACnE3kF,EAAWoC,EAAcpC,SAM/B,OAAOvsC,OAAO+8C,OAAO,GAAI1O,EAAUK,EAAYC,EAAe,CAC5D83zB,mBACAC,gBANsB,SAACn6vB,GAAD,OAAU,WAChChgE,EAASypX,UAAQr5P,EAAE8psB,EAAVzwc,CAA4B,IAAI//W,IAA6B,CAACs2D,kBAiBzE+hJ,gBAAM,CACJy3mB,MAAO,SAACj6zB,GAAD,OACLA,EAAM26zB,kBACRntqB,QAASsqa,EACT9/kB,UACAklH,SAAS,IAPEnyD,EA3D8B,SAAA/qC,GAC3C,IACEw/F,EAWEx/F,EAXFw/F,OACApjG,EAUE4D,EAVF5D,SAGMinsB,EAOJrjsB,EAPFygE,KACYo6vB,EAMV76zB,EANFwuF,WAGAmsuB,EAGE36zB,EAHF26zB,iBACAC,EAEE56zB,EAFF46zB,gBAIIE,EAFF96zB,EADFlD,MAGsBjjC,IAAI,QACtBqkR,OAAgCtsR,IAAnByxuB,EACb5ioB,EAAOy9K,EAAamld,EAAiBy3H,EAErCtsuB,EAAa0vJ,EAAc28kB,GADpB,kBAAM,cAC8CD,EAEjE,OACE,iCACK18kB,GAAc28kB,EAAwB,cAACh3G,EAAA,EAAD,CAAar0oB,QAAQ,YAAY2c,YAAaqC,GAAW,GAAzD,yBAExB,KACjB,eAACs9L,EAAA,EAAD,CACErxL,QAASjM,GAAW,GACpB,4BAAoBmsuB,EAApB,UACAl6vB,KAAMA,EAHR,UAIE,cAACytU,EAAA,EAAD,CAAan3Y,GAAE,UAAK4j0B,EAAL,UAAf,SAAgDn7tB,IAChD,cAACusL,EAAA,EAAD,UACI3vR,c,6BC1EZ,aAmBeujO,IAjBf,SAAgBrtB,EAAIvmO,GAKlB,IAAIu8R,OAJQ,IAARv8R,IACFA,GAAM,GAIR,IAAI+rI,EAAU,IAAI/iG,SAAQ,SAAUC,GAClCszP,EAAY35P,WAAWqG,EAASs9L,EAAIvmO,MAOtC,OAJA+rI,EAAQ8lH,KAAU,WAChBvhI,aAAaisK,IAGRxwJ,I,6BCCMnvE,IAX8B,SAAC/rE,GAC5C,GAAmB,kBAARA,GAA4B,OAARA,EAAgB,OAAO,EAGtD,IADA,IAAIgsE,EAAQhsE,EAC4B,OAAjC1I,OAAO2qB,eAAe+pD,IAC3BA,EAAQ10E,OAAO2qB,eAAe+pD,GAGhC,OAAO10E,OAAO2qB,eAAejiB,KAASgsE,I,iDCCzB85uB,IARb,SAACvnxB,GAAD,OACE,SAACtlC,GAAD,OACE,SAACmrB,GACC,IAAM+50B,EAAUpyxB,YAAc3nD,GAAUA,EAAxB,eAAqCA,GAErD,OADenrB,EAAKkl2B,O,cCa5B/p2B,EAAOC,QAJP,SAAeO,GACb,OAAgB,MAATA,I,6BCrBT,kDA0DMwp2B,EAAe,SAAC,GAaK,IAAD,IAZxB5pxB,aAYwB,MAZhB,MAYgB,MAXxBi2C,cAWwB,MAXf,MAWe,MAVxBtrB,MACEgoB,GASsB,aAPpB,CACFA,YAAa,UACbjJ,gBAAiB,WAKK,GATtBiJ,YACAjJ,EAQsB,EARtBA,gBAQsB,IAHxB6xJ,qBAGwB,MAHR,OAGQ,MAFxBc,uBAEwB,MAFN,UAEM,MADxBp8L,cACwB,MADf,IACe,EAExB,OACE,qBACE86L,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAO,CAAEh/B,SAAU,OAAQf,OAAQ55E,OAAO45E,GAAP,UAAoBA,EAApB,MAAiCA,GALtE,SAOE,oBAAGstD,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,UACE,8BACE,mBAAGpuI,KAAM7jB,EAAT,SACE,4BACE,yBACEy9C,GAAG,SACHC,GAAG,SACHg0G,GAAG,SACHC,GAAG,eAIT,sBACE9tI,KAAM5a,EACNmpJ,SAAS,UACTtxQ,EAAE,yIACFonH,QAAS2pJ,OAGb,mBAAGhuI,KAAM8uI,EAAiBP,SAAS,UAAU/6I,UAAU,mBAAvD,SACE,sBAAMv2H,EAAE,gb,6BCrGlB,kDAoCM24qB,EAAc,SAAC,GAMK,IAAD,IALvBnjmB,aAKuB,MALf,MAKe,MAJvBi2C,cAIuB,MAJd,MAIc,MAHvBtrB,aAGuB,MAHf,OAGe,MAFvBgoB,mBAEuB,MAFT,UAES,MADvB3S,aACuB,MADf,GACe,EAEvB,OACE,sBACE+6J,MAAM,6BACNuE,WAAW,+BACXt/L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,cACRh7J,MAAOA,EANT,UAQE,iCACE,iCACEr6E,GAAG,mBACHi3O,GAAG,SACHE,GAAG,UACHD,GAAG,UACHE,GAAG,UALL,UAOE,sBAAMvqQ,OAAO,KAAKyqQ,YAAa,IAC/B,sBAAMzqQ,OAAO,OAAOwqQ,UAAWrqJ,OAEjC,wBAAQhtF,GAAG,SAASwhI,GAAG,OAAOC,GAAG,OAAOvrF,EAAE,SAC1C,yBACEl2C,GAAG,WACHq6C,MAAM,OACNi2C,OAAO,OACP15G,EAAE,MACF2zB,EAAE,QACFssO,YAAY,oBANd,UAQE,0BACEE,GAAG,IACHhwI,GAAG,cACHp0H,OAAO,uBAET,gCACEo0H,GAAG,qBACHp0H,OAAO,mBACPqkQ,aAAa,QAEf,+BACEjwI,GAAG,mBACH78H,OAAO,qDAIb,mBAAG09H,KAAK,OAAOuuI,SAAS,UAAUL,OAAO,OAAOE,YAAY,IAA5D,SACE,mBAAG56I,UAAU,uBAAb,SACE,oBAAGA,UAAU,qBAAb,UACE,sBACEwM,KAAK,yBACLuuI,SAAS,UACTtxQ,EAAE,sJACFonH,QAAQ,UAEV,sBACE2b,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,isCAEJ,8BACE,4BACE,4BACE,8BACE,qBACE+iI,KAAK,OACLt9H,OAAO,iBACPitQ,UAAU,YAEZ,qBAAK3vI,KAAM5iC,EAAOuyK,UAAU,mBAIlC,sBACE3vI,KAAK,yBACLuuI,SAAS,UACTtxQ,EAAE,sJACFonH,QAAQ,UAEV,sBACE2b,KAAK,OACLuuI,SAAS,UACTtxQ,EAAE,gtC,6BC7HlB,kDA+BM0tb,EAAgB,SAAC,GAMK,IAAD,IALzBl4W,aAKyB,MALjB,KAKiB,MAJzBi2C,cAIyB,MAJhB,KAIgB,MAHzBtrB,aAGyB,MAHjB,OAGiB,MAFzB7sB,iBAEyB,MAFb,GAEa,MADzBkiC,aACyB,MADjB,GACiB,EAEzB,OACE,qBACE+6J,MAAM,6BACN/6L,MAAOA,EACPi2C,OAAQA,EACR+kJ,QAAQ,YACRl9L,UAAWA,EACXkiC,MAAOA,EANT,SAQE,mBAAGy7J,OAAO,OAAOE,YAAY,IAAIpuI,KAAK,OAAOuuI,SAAS,UAAtD,SACI,oBAAGvuI,KAAM5iC,EAAT,UACI,sBAAMngG,EAAE,meAAmem7B,GAAG,WAC9e,0BAAUA,GAAG,SAASg6O,OAAO,kHAC7B,sBAAMn1Q,EAAE,ygBAAygBm7B,GAAG,WACphB,sBAAMn7B,EAAE,ijBAAijBm7B,GAAG,oB,6BCrD1kB,sCAAIkk0B,EAAO/5d,EAAOC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAAQC,EAASC,EAASC,EAASC,EAASo5d,EAAtH,OAEI/4d,EAAY,CAAC,QAAS,WAE1B,SAASviW,IAA2Q,OAA9PA,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAASvpB,UAAUV,GAAI,IAAK,IAAIsB,KAAO2oB,EAAc7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAAQ0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAY,OAAO0oB,GAAkB8c,EAAS7hC,MAAMjI,KAAM0D,WAEhT,SAASw5C,EAAyBjwB,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAAkE3oB,EAAKtB,EAAnEgqB,EAEzF,SAAuCC,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAA2D3oB,EAAKtB,EAA5DgqB,EAAS,GAAQgvP,EAAa59Q,OAAO0D,KAAKmrB,GAAqB,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IAAOsB,EAAM03Q,EAAWh5Q,GAAQwiM,EAAShlL,QAAQlc,IAAQ,IAAa0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAQ,OAAO0oB,EAFxM0c,CAA8Bzc,EAAQu4K,GAAuB,GAAIpnM,OAAOkgB,sBAAuB,CAAE,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAAS,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IAAOsB,EAAMmhM,EAAiBziM,GAAQwiM,EAAShlL,QAAQlc,IAAQ,GAAkBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KAAgB0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAU,OAAO0oB,EAMne,SAASq40B,EAAqBh/zB,EAAMkmW,GAClC,IAAIriR,EAAQ7jF,EAAK6jF,MACbsiR,EAAUnmW,EAAKmmW,QACftiW,EAAQgT,EAAyB7W,EAAMgmW,GAE3C,OAAoB,gBAAoB,MAAOviW,EAAS,CACtD7I,GAAI,UACJ,YAAa,UACbo1O,MAAO,6BACPuE,WAAY,+BACZtE,QAAS,oBACT76Q,IAAK8wY,EACL,kBAAmBC,GAClBtiW,GAAQggF,EAAqB,gBAAoB,QAAS,CAC3DjpF,GAAIurW,GACHtiR,GAAS,KAAMi7uB,IAAUA,EAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,QAAS,KAAM,kSAAgT,gBAAoB,WAAY,CACjdlk0B,GAAI,aACU,gBAAoB,OAAQ,CAC1Cm4C,UAAW,QACXtzE,EAAG,2MACa,gBAAoB,WAAY,CAChDm7B,GAAI,eACU,gBAAoB,OAAQ,CAC1Cm4C,UAAW,QACXtzE,EAAG,mHACEslY,IAAUA,EAAqB,gBAAoB,OAAQ,CAChEhyT,UAAW,QACXtzE,EAAG,iTACAulY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEjyT,UAAW,QACXtzE,EAAG,8RACAwlY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChElyT,UAAW,QACXtzE,EAAG,0pBACAylY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEnyT,UAAW,QACXtzE,EAAG,iMACA0lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEpyT,UAAW,QACXtzE,EAAG,8LACA2lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEryT,UAAW,QACXtzE,EAAG,2MACA4lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEtyT,UAAW,QACXtzE,EAAG,mFACA6lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEvyT,UAAW,QACXtzE,EAAG,8EACA8lY,IAAWA,EAAsB,gBAAoB,OAAQ,CAChExyT,UAAW,QACXtzE,EAAG,uSACA+lY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClEzyT,UAAW,QACXtzE,EAAG,+QACAgmY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClE1yT,UAAW,QACXtzE,EAAG,kHACAimY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClE3yT,UAAW,QACXtzE,EAAG,uPACAkmY,IAAYA,EAAuB,gBAAoB,OAAQ,CAClE5yT,UAAW,QACXtzE,EAAG,kRACAs/1B,IAAUA,EAAqB,gBAAoB,OAAQ,CAC9DhsxB,UAAW,QACXvhE,EAAG,OACH2zB,EAAG,OACH8vC,MAAO,OACPi2C,OAAQ,KACRmlJ,GAAI,SAIR,IAAI+iE,EAA0B,aAAiB4rhB,GAChC,K,iBCvFf,YAOA,IAPA,IAAIvlzB,EAAM1kD,EAAQ,MACdmc,EAAyB,qBAAXmX,OAAyBwgJ,EAASxgJ,OAChD420B,EAAU,CAAC,MAAO,UAClB1nzB,EAAS,iBACTq3W,EAAM19Y,EAAK,UAAYqmC,GACvBm6Z,EAAMxgc,EAAK,SAAWqmC,IAAWrmC,EAAK,gBAAkBqmC,GAEpD56C,EAAI,GAAIiyZ,GAAOjyZ,EAAIsi2B,EAAQzj2B,OAAQmB,IACzCiyZ,EAAM19Y,EAAK+t1B,EAAQti2B,GAAK,UAAY46C,GACpCm6Z,EAAMxgc,EAAK+t1B,EAAQti2B,GAAK,SAAW46C,IAC5BrmC,EAAK+t1B,EAAQti2B,GAAK,gBAAkB46C,GAI7C,IAAIq3W,IAAQ8iD,EAAK,CACf,IAAI/zb,EAAO,EACPid,EAAK,EACLsrH,EAAQ,GAGZ0oQ,EAAM,SAASrwX,GACb,GAAoB,IAAjB2nH,EAAM1qJ,OAAc,CACrB,IAAI0j2B,EAAOzlzB,IACP//C,EAAOhD,KAAKC,IAAI,EALJ,oBAKwBuo2B,EAAOvh1B,IAC/CA,EAAOjkB,EAAOwl2B,EACd1szB,YAAW,WACT,IAAI2szB,EAAKj5sB,EAAMz8I,MAAM,GAIrBy8I,EAAM1qJ,OAAS,EACf,IAAI,IAAImB,EAAI,EAAGA,EAAIwi2B,EAAG3j2B,OAAQmB,IAC5B,IAAIwi2B,EAAGxi2B,GAAG4mQ,UACR,IACE47lB,EAAGxi2B,GAAG4hC,SAAS5gB,GACf,MAAM5b,GACNywC,YAAW,WAAa,MAAMzwC,IAAK,MAIxCrL,KAAKo/E,MAAMp8E,IAOhB,OALAwsJ,EAAMngJ,KAAK,CACT03I,SAAU7iH,EACV2D,SAAUA,EACVglO,WAAW,IAEN3oO,GAGT82a,EAAM,SAASj0T,GACb,IAAI,IAAI9gJ,EAAI,EAAGA,EAAIupJ,EAAM1qJ,OAAQmB,IAC5BupJ,EAAMvpJ,GAAG8gJ,SAAWA,IACrByI,EAAMvpJ,GAAG4mQ,WAAY,IAM7B1uQ,EAAOC,QAAU,SAAS0H,GAIxB,OAAOoyZ,EAAIj0Z,KAAKuW,EAAM1U,IAExB3H,EAAOC,QAAQ0wB,OAAS,WACtBksb,EAAI9vc,MAAMsP,EAAM7T,YAElBxI,EAAOC,QAAQ05a,SAAW,SAAS1wa,GAC5BA,IACHA,EAASoT,GAEXpT,EAAOm2R,sBAAwB26H,EAC/B9wZ,EAAOo2R,qBAAuBw9K,K,gDCzEjB,SAAS93H,EAAuBC,EAAShnD,GAKtD,OAJKA,IACHA,EAAMgnD,EAAQpwU,MAAM,IAGf1R,OAAO+hV,OAAO/hV,OAAO+uB,iBAAiB+yT,EAAS,CACpDhnD,IAAK,CACHx9R,MAAO0C,OAAO+hV,OAAOjnD,OAP3B,mC,6BCEA96R,OAAOyJ,eAAe1M,EAAS,aAAc,CAC5CO,OAAO,IAGR,IAAIouC,EAAW1rC,OAAO+8C,QAAU,SAAUnuB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAASvpB,UAAUV,GAAI,IAAK,IAAIsB,KAAO2oB,EAAc7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAAQ0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAY,OAAO0oB,GAEnPyqB,EAAe,WAAc,SAAStqB,EAAiBH,EAAQkd,GAAS,IAAK,IAAIlnC,EAAI,EAAGA,EAAIknC,EAAMroC,OAAQmB,IAAK,CAAE,IAAI21G,EAAazuE,EAAMlnC,GAAI21G,EAAW7wG,WAAa6wG,EAAW7wG,aAAc,EAAO6wG,EAAW5wG,cAAe,EAAU,UAAW4wG,IAAYA,EAAW3wG,UAAW,GAAM5J,OAAOyJ,eAAemlB,EAAQ2rF,EAAWr0G,IAAKq0G,IAAiB,OAAO,SAAUrrF,EAAasrF,EAAYC,GAAiJ,OAA9HD,GAAYzrF,EAAiBG,EAAYnvB,UAAWy6G,GAAiBC,GAAa1rF,EAAiBG,EAAaurF,GAAqBvrF,GAA7gB,GAEfs5L,EAASxrN,EAAQ,GAEjBqq2B,EAAU9+oB,EAAuBC,GAIjC8+oB,EAAc/+oB,EAFDvrN,EAAQ,KAIzB,SAASurN,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE8kH,QAAS9kH,GAUvF,IAAI6+1B,EAAa,CAChB1ovB,SAAU,WACVqX,IAAK,EACL/5G,KAAM,EACNyuV,WAAY,SACZz3O,OAAQ,EACRlH,SAAU,SACVoM,WAAY,OAGTmvuB,EAAwB,CAAC,aAAc,eAAgB,iBAAkB,WAAY,aAAc,WAAY,aAAc,yBAS7HC,EAAa,SAAoBjqxB,EAAQx0E,GAC5CA,EAAKk0G,MAAM6L,SAAWvrC,EAAOurC,SAC7B//G,EAAKk0G,MAAM8+J,WAAax+L,EAAOw+L,WAC/BhzQ,EAAKk0G,MAAMihB,WAAa3gD,EAAO2gD,WAC/Bn1H,EAAKk0G,MAAMka,UAAY55C,EAAO45C,UAC9BpuH,EAAKk0G,MAAMg/J,cAAgB1+L,EAAO0+L,cAClClzQ,EAAKk0G,MAAMyZ,cAAgBn5C,EAAOm5C,eAG/B+wuB,IAAyB,qBAAXp30B,SAA0BA,OAAOsiL,YAAY,yBAAyBj2J,KAAKrsB,OAAOsiL,UAAUG,WAE1Gm4N,EAAa,WAGhB,OAAOw8b,EAAO,IAAM/o2B,KAAKy1E,SAASvxE,SAAS,IAAI0tH,OAAO,EAAG,SAAM7yH,GAG5DovW,EAAgB,SAAUhpP,GAG7B,SAASgpP,EAAchhU,IA7CxB,SAAyB7c,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCA8C9G+qB,CAAgBptB,KAAMkrW,GAEtB,IAAIvzT,EA9CN,SAAoCy3H,EAAMpuK,GAAQ,IAAKouK,EAAQ,MAAM,IAAIutC,eAAe,6DAAgE,OAAO37M,GAAyB,kBAATA,GAAqC,oBAATA,EAA8BouK,EAAPpuK,EA8CpNmhH,CAA2BniH,MAAOkrW,EAAchtW,WAAaE,OAAO2qB,eAAemiV,IAAgBlqW,KAAKhB,KAAMkqC,IAqB1H,OAnBAyN,EAAM4pR,SAAW,SAAUvnC,GAC1BriP,EAAM8sE,MAAQu1K,EACsB,oBAAzBriP,EAAMzN,MAAMq3R,UACtB5pR,EAAMzN,MAAMq3R,SAASvnC,IAIvBriP,EAAMouzB,oBAAsB,SAAU/rkB,GACrCriP,EAAMquzB,iBAAmBhskB,GAG1BriP,EAAMsuzB,SAAW,SAAUjskB,GAC1BriP,EAAMwS,MAAQ6vO,GAGfriP,EAAM3Q,MAAQ,CACbk/zB,WAAYh8zB,EAAMsxC,SAClByxjB,QAAS/imB,EAAMjJ,IAAMqoY,KAEf3xX,EAqJR,OAtND,SAAmBmgC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,kEAAoE01E,GAAeD,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAUhwE,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAegwE,IAAY35E,OAAOo3E,eAAiBp3E,OAAOo3E,eAAesC,EAAUC,GAAcD,EAAS55E,UAAY65E,GAuCheF,CAAUqzR,EAAehpP,GA6BzBzqE,EAAayzT,EAAe,CAAC,CAC5B5mW,IAAK,oBACL5I,MAAO,WACNsE,KAAKmjH,SAAU,EACfnjH,KAAKmm2B,kBACLnm2B,KAAKom2B,qBAEJ,CACF9h2B,IAAK,mCACL5I,MAAO,SAA0C2nH,GAChD,IAAIpiF,EAAKoiF,EAAUpiF,GAEfA,IAAOjhC,KAAKkqC,MAAMjJ,IACrBjhC,KAAK4iH,SAAS,CAAEqqhB,QAAShsmB,GAAMqoY,QAG/B,CACFhla,IAAK,qBACL5I,MAAO,SAA4B2iH,EAAW4yJ,GACzCA,EAAUi1lB,aAAelm2B,KAAKgnC,MAAMk/zB,YACF,oBAA1Blm2B,KAAKkqC,MAAMm8zB,YACrBrm2B,KAAKkqC,MAAMm8zB,WAAWrm2B,KAAKgnC,MAAMk/zB,YAGnClm2B,KAAKom2B,qBAEJ,CACF9h2B,IAAK,uBACL5I,MAAO,WACNsE,KAAKmjH,SAAU,IAEd,CACF7+G,IAAK,kBACL5I,MAAO,WACN,GAAKsE,KAAKmjH,SAAYz0F,OAAOwrQ,iBAA7B,CAGA,IAAIoskB,EAActm2B,KAAKykH,OAAS/1F,OAAOwrQ,iBAAiBl6R,KAAKykH,OACxD6hvB,IAGLT,EAAWS,EAAatm2B,KAAKmqD,OACzBnqD,KAAKgm2B,kBACRH,EAAWS,EAAatm2B,KAAKgm2B,sBAG7B,CACF1h2B,IAAK,mBACL5I,MAAO,WACN,GAAKsE,KAAKmjH,SAAYnjH,KAAKmqD,OAA2C,qBAA3BnqD,KAAKmqD,MAAM0rP,YAAtD,CAGA,IAAI0wjB,OAAgB,EAEnBA,EADGvm2B,KAAKkqC,MAAM8gF,eAAiBhrH,KAAKkqC,MAAMxuC,OAASsE,KAAKkqC,MAAMxuC,OAASsE,KAAKkqC,MAAMs8zB,uBAClEzp2B,KAAKC,IAAIgD,KAAKmqD,MAAM0rP,YAAa71S,KAAKgm2B,iBAAiBnwjB,aAAe,EAEtE71S,KAAKmqD,MAAM0rP,YAAc,GAI1C0wjB,GADqC,WAApBvm2B,KAAKkqC,MAAMhqC,WAA+CpE,IAA1BkE,KAAKkqC,MAAMu8zB,WAA2B,GAAK7qzB,SAAS57C,KAAKkqC,MAAMu8zB,aAAe,GAE3Gzm2B,KAAKkqC,MAAMsxC,WAC9B+qxB,EAAgBvm2B,KAAKkqC,MAAMsxC,UAExB+qxB,IAAkBvm2B,KAAKgnC,MAAMk/zB,YAChClm2B,KAAK4iH,SAAS,CACbsjvB,WAAYK,OAIb,CACFji2B,IAAK,WACL5I,MAAO,WACN,OAAOsE,KAAKykH,QAEX,CACFngH,IAAK,QACL5I,MAAO,WACNsE,KAAKykH,MAAM/5C,UAEV,CACFpmE,IAAK,OACL5I,MAAO,WACNsE,KAAKykH,MAAMt6C,SAEV,CACF7lE,IAAK,SACL5I,MAAO,WACNsE,KAAKykH,MAAM1kB,WAEV,CACFz7F,IAAK,eACL5I,MAAO,WAIN,IAAIgr2B,EAAe1m2B,KAAKkqC,MAAMw8zB,aAE9B,OAAOZ,GAAQY,EAAejB,EAAQ75uB,QAAQ3lF,cAAc,QAAS,CAAE6mO,wBAAyB,CAC9FC,OAAQ,SAAW/sQ,KAAKgnC,MAAMimmB,QAAU,kCAClC,OAEP,CACF3ooB,IAAK,SACL5I,MAAO,WACN,IAAIir2B,EAAa,CAAC3m2B,KAAKkqC,MAAMqT,aAAcv9C,KAAKkqC,MAAMxuC,MAAO,IAAIiQ,QAAO,SAAUkhV,EAAestd,GAChG,OAAsB,OAAlBttd,QAA4C/wV,IAAlB+wV,EACtBA,EAEDstd,KAGJysD,EAAe98zB,EAAS,GAAI9pC,KAAKkqC,MAAMoxE,OACtCsrvB,EAAaxrxB,UAASwrxB,EAAaxrxB,QAAU,gBAElD,IAAI6tR,EAAan/T,EAAS,CACzBqxC,UAAW,cACXG,MAAOt7E,KAAKgnC,MAAMk/zB,WAAa,MAC7Blm2B,KAAKkqC,MAAM++T,YAEVtvP,EAlMP,SAAkC7yG,EAAKhF,GAAQ,IAAIkrB,EAAS,GAAI,IAAK,IAAIhqB,KAAK8D,EAAWhF,EAAK0e,QAAQxd,IAAM,GAAkB5E,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAK9D,KAAcgqB,EAAOhqB,GAAK8D,EAAI9D,IAAM,OAAOgqB,EAkM/LkwB,CAAyBl9C,KAAKkqC,MAAO,IAOtD,OArLmB,SAAyByvE,GAC9CisvB,EAAsBl51B,SAAQ,SAAUmqP,GACvC,cAAcl9I,EAAWk9I,MA8KxBgwmB,CAAgBltvB,GAChBA,EAAWvgC,UAAYp5E,KAAKkqC,MAAM48zB,eAClCntvB,EAAW14E,GAAKjhC,KAAKgnC,MAAMimmB,QAC3BtzhB,EAAW2B,MAAQ2tP,EAEZw8f,EAAQ75uB,QAAQ3lF,cACtB,MACA,CAAEmzC,UAAWp5E,KAAKkqC,MAAMkvC,UAAWkiC,MAAOsrvB,GAC1C5m2B,KAAK+m2B,eACLtB,EAAQ75uB,QAAQ3lF,cAAc,QAAS6D,EAAS,GAAI6vE,EAAY,CAAEl+G,IAAKuE,KAAKuhU,YAC5EkkiB,EAAQ75uB,QAAQ3lF,cACf,MACA,CAAExqC,IAAKuE,KAAKim2B,SAAU3qvB,MAAOqqvB,GAC7BgB,GAED3m2B,KAAKkqC,MAAM8gF,YAAcy6uB,EAAQ75uB,QAAQ3lF,cACxC,MACA,CAAExqC,IAAKuE,KAAK+l2B,oBAAqBzqvB,MAAOqqvB,GACxC3l2B,KAAKkqC,MAAM8gF,aACR,UAKAkgP,EAhLY,CAiLlBtkJ,EAAOjtK,WAETuxT,EAAcpsF,UAAY,CACzB1lM,UAAWssxB,EAAY95uB,QAAQrlH,OAC/Bg3C,aAAcmozB,EAAY95uB,QAAQi0Y,IAClC4mW,WAAYf,EAAY95uB,QAAQozJ,UAAU,CAC1C0mlB,EAAY95uB,QAAQ4uD,OAAQkrrB,EAAY95uB,QAAQrlH,SAChD06B,GAAIyk0B,EAAY95uB,QAAQrlH,OACxBmg2B,aAAchB,EAAY95uB,QAAQq1B,KAClC6ltB,eAAgBpB,EAAY95uB,QAAQrlH,OACpCg7T,SAAUmkiB,EAAY95uB,QAAQ1hG,KAC9B++U,WAAYy8f,EAAY95uB,QAAQznH,OAChCq3E,SAAUkqxB,EAAY95uB,QAAQozJ,UAAU,CACxC0mlB,EAAY95uB,QAAQ4uD,OAAQkrrB,EAAY95uB,QAAQrlH,SAChD8/1B,WAAYX,EAAY95uB,QAAQ1hG,KAChCsxF,SAAUkqvB,EAAY95uB,QAAQ1hG,KAC9B8gG,YAAa06uB,EAAY95uB,QAAQrlH,OACjCig2B,sBAAuBd,EAAY95uB,QAAQq1B,KAC3C3lC,MAAOoqvB,EAAY95uB,QAAQznH,OAC3BzI,MAAOgq2B,EAAY95uB,QAAQi0Y,KAE5B30J,EAAczpP,aAAe,CAC5BjmC,SAAU,EACVkrxB,cAAc,GAGfvr2B,EAAQywH,QAAUs/O,G,kJCvNZ6zW,EAA4Bt6qB,cAAuD,SAACgnF,EAAQhwH,GAChG,IAAMkvC,EAAW2F,wBAIXjL,EAAQ8K,qBAEd,EAA8B1L,WAA8B,MAA5D,mBAAOgoH,EAAP,KAAgBu6sB,EAAhB,KAIM7jvB,EAAU1+E,UAAa,GAC7BA,aAAgB,kBAAM,WAAQ0+E,EAAQr7E,SAAU,KAAU,IAE1DrD,sBAA0BhpC,GAAK,iBAAO,CACpC8igB,IAAI,WAAD,4BAAE,WAAOlsS,EAAiBooU,GAAxB,mCAAA90hB,EAAA,yDAAgDqmC,EAAhD,+BAAgG,GAC/FkrL,EAAgBlrL,EAAQkrL,SADzB,uBAGKlwL,EAAQ3B,EAAMsB,WAHnB,SAKmBqxoB,IACjBivL,eAAen9yB,cAAgB9iB,GAAQ8f,cAAkB9f,GAAQqrL,GACjE1rB,OAAM,kBAAM,QAPd,OAKK3X,EALL,OAQDkoC,EAAQ,OAAGloC,QAAH,IAAGA,OAAH,EAAGA,EAAOkoC,SARjB,OAWGr/F,EAAWsqR,YAAwBjrL,GACrC/zG,EAAQr7E,SAAW+vF,EAASh2H,OAC9Bml2B,EAAW,aAAE30oB,UAASooU,aAAY5ia,YAAa7rF,IAE/Cyuf,IAfC,4CAAF,qDAAC,MAkBF,CAACp1f,IAoBL,OAAOonH,EACH,cAAC,IAAD,CACE9hD,MAAM,EACNktB,SAAU40B,EAAQ50B,SAClB4ia,WAtBiB,WACrB,IAAMA,EAAU,OAAGhuY,QAAH,IAAGA,OAAH,EAAGA,EAASguY,WAC5BusU,EAAW,MACD,OAAVvsU,QAAU,IAAVA,QAoBI4gL,cAjBoB,WACxB,MAAmC5ujB,GAAY,GAAvC4lE,EAAR,EAAQA,QAASgpf,EAAjB,EAAiBA,cACjB2rJ,EAAW,MACP3rJ,EACFA,IACShpf,GACT1nL,EAASv+B,YAAKwzd,YAAiBvtQ,MAY7B1tF,QAAS,kBAAMqiuB,EAAW,SAE5B,QAGSjoJ,O,6BCpHf,oIAuIe9poB,sBACbgG,aAhGa,SAACC,GAAD,MAA+B,CAC5C62C,MAAO,CACLz2C,MAAO,KAET3/B,QAAS,CACPmgC,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,IAE/BjpC,QAAS,CACPgiF,aAAc,EACdpG,UAAW,UAIb80Q,eAAgB,CACdzlR,UAAWphC,EAAMZ,QAAQ,GACzBw8L,UAAW,IACXywC,UAAW,QAEb2/iB,cAAe,CACb5rxB,MAAO,IAET/R,QAAS,CACPmS,eAAgB,SAChBw2C,cAAeh3C,EAAMZ,QAAQ,IAE/B6sxB,aAAc,CACZ1/uB,aAAc,GACdS,WAAYhtC,EAAMZ,QAAQ,QAsE5Bn7B,YAAgB,gBAFH81B,EAhE6D,SAAC,GAAD,IAC1E01B,EAD0E,EAC1EA,KACAktB,EAF0E,EAE1EA,SACA4ia,EAH0E,EAG1EA,WACA4gL,EAJ0E,EAI1EA,cACA12kB,EAL0E,EAK1EA,QACAzrD,EAN0E,EAM1EA,QACAntD,EAP0E,EAO1EA,EAP0E,OAS1E,eAAC,IAAD,CACE4+E,KAAMA,EACNg6B,QAASA,EACT,mBAAiB,oCAGjBroD,UAAU,EACVpD,QAAS,CAAE64C,MAAO74C,EAAQ64C,OAP5B,UASE,eAAC,IAAD,CAAe34C,UAAWF,EAAQv9B,QAAlC,UACE,cAAC,IAAD,CACE1a,GAAG,oCACHy4E,QAAQ,KACRzT,MAAM,cACN7sB,UAAWF,EAAQ7nC,QAJrB,SAMGtlB,EAAE,uCAEJ1uB,QAAO,OAACw6H,QAAD,IAACA,OAAD,EAACA,EAAUh2H,SACjB,qBAAKu3E,UAAWF,EAAQ6oT,eAAxB,SACE,eAAC,IAAD,CAAOhmY,KAAK,QAAQuzW,cAAc,EAAlC,UACE,cAAC,IAAD,UACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAWl2R,UAAWF,EAAQguxB,cAA9B,SAA8Cn70B,EAAE,mCAChD,cAAC,IAAD,UAAYA,EAAE,kDAGlB,cAAC,IAAD,UACG8rG,EAAS7uH,KAAI,SAACguH,EAAS76H,GAAV,aACZ,eAAC,IAAD,WACE,cAAC,IAAD,CAAWi9E,UAAWF,EAAQguxB,cAA9B,mBAA8ClwuB,EAAQglC,WAAtD,QAA6D,MAC7D,cAAC,IAAD,UAAYhlC,EAAQkC,eAAiB,QAFvC,UAAkBlC,EAAQglC,IAA1B,YAAiChlC,EAAQkC,cAAzC,YAA0D/8H,iBAUtE,eAAC,IAAD,CAAei9E,UAAWF,EAAQ3P,QAAlC,UACE,cAAC,IAAD,CAAQs7C,QAAS41a,EAAYx0b,MAAM,UAAnC,SACGl6E,EAAE,0BAEL,cAAC,IAAD,CACE84F,QAASw2lB,EACTp1mB,MAAM,UACNyT,QAAQ,WACRtgC,UAAWF,EAAQiuxB,aAJrB,SAMGp70B,EAAE,qD,wKCnFLkvQ,E,4MAEGj0P,MAA6B,G,uDAOpC,SAAyB74B,EAAOi51B,GAC9B,MAGIpn2B,KAAKkqC,MAFPw6D,EADF,EACEA,MACAp+D,EAFF,EAEEA,SAEFtmC,KAAK4iH,SAAS,CACZz0G,QACAi51B,cAEE1iwB,GAAS,IACX18E,QAAQ7Z,MAAM,sBAAuB,CACnCm4B,WACAn4B,QACAi51B,gB,oBAKN,WACE,MAIIpn2B,KAAKkqC,MAHOm9zB,EADhB,EACE1yxB,aACA+vB,EAFF,EAEEA,MACAxrB,EAHF,EAGEA,QAGF,EAGIl5E,KAAKgnC,MAFP74B,EADF,EACEA,MACAi51B,EAFF,EAEEA,UAGIzyxB,EAAgC,MAAjB0yxB,EAAwBA,EAAgB,wBAE7D,OAAa,MAATl51B,GACEu2F,GAAS,IACX18E,QAAQ7Z,MAAM,gBAAiB,CAC7Bu2F,QACA/vB,eACAxmE,QACAi51B,cAGG,eAAC,IAAD,CACLluxB,QAAS+6F,IAAK/6F,EAAS,CAAC,cACxBM,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SALN,UAOL,cAAC,IAAD,CACEW,MAAM,EADR,SAGE,cAAC,IAAD,CAAiBg4C,KAAK,UAExB,cAAC,IAAD,CACEh4C,MAAM,EADR,SAGE,cAAC,IAAD,UAAajF,UAKZ30E,KAAKkqC,MAAM5D,a,GAtEM7B,aA0EtBmI,EAAkBkG,YAAyB,CAC/C4xD,MAAOmsN,gBAGM57O,sBACbgG,aApGa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,OAoGXr6B,YAAgB,gBAChB0/D,kBAAQjyE,GAHKqoC,CAIbgmN,I,6BC9HF,IAAIt0E,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc2gL,EAAOh7F,QAAQ2+J,SAAU,KAAM3jE,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC1I4iG,KAAM,OACN/iI,EAAG,2CACD8gN,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CACvCngC,EAAG,oMACA,kBAEL3K,EAAQywH,QAAUq4I,G,6BClBlB,IAAIt9C,EAAyBvrN,EAAQ,IAErCgD,OAAOyJ,eAAe1M,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQywH,aAAU,EAElB,IAAIg7F,EAASD,EAAuBvrN,EAAQ,IAIxC6oQ,GAAW,EAFMt9C,EAAuBvrN,EAAQ,KAElBwwH,SAASg7F,EAAOh7F,QAAQ3lF,cAAc,OAAQ,CAC9EngC,EAAG,sSACD,UAEJ3K,EAAQywH,QAAUq4I,G,sECoBHhpL,iBA/BA,iBAAmB,CAChCuvM,OAAQ,CACNn2J,cAAe,WA6BJp5C,EAd0B,SAAC/wC,GACxC,IAAQ5D,EAAsB4D,EAAtB5D,SAAU4yC,EAAYhvC,EAAZgvC,QAElB,OAAQ,cAAC,IAAD,yBACNA,QAAS,CACPsxM,OAAQtxM,EAAQsxM,SAEdtgP,GAJE,aAML5D,S,6BChCL,YAEe68F,iBAAQ,kBAAM,qC,sKCuCvBmkuB,E,4MACGtg0B,MAAQ,G,EAGRkgG,YAAc,WACnB,MAKI,EAAKh9F,MAJPkonB,EADF,EACEA,SACA30iB,EAFF,EAEEA,KACA9yE,EAHF,EAGEA,SAHF,EAIE8xiB,gBAGF9xiB,EAASggC,YAAM8yC,IACf9yE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAImxnB,EACJznjB,MAAM,M,EAIH03N,aAAe,SAACl3T,GACrB,EAAK++B,MAAMoyR,SAASnxT,IACa,IAA7B,EAAK++B,MAAMq9zB,gBACb,EAAKr9zB,MAAMuyiB,gBAAkB,EAAKvyiB,MAAMuyiB,kBAAoB,EAAKv1c,gB,4CAIrE,WACE,MAOIlnI,KAAKkqC,MANPm4R,EADF,EACEA,aACAnpP,EAFF,EAEEA,QACAgxC,EAHF,EAGEA,MACAkG,EAJF,EAIEA,iBACA3S,EALF,EAKEA,KACAziE,EANF,EAMEA,KAGF,OACE,eAAC,IAAD,CACEo+B,UAAWF,EAAQ3hE,KACnBiiE,WAAW,EACXE,UAAU,SACVc,KAAK,SAJP,UAOE,cAAC,IAAD,CAAkB0vC,MAAOA,EAAOgd,YAAalnI,KAAKknI,cAElD,eAAC,OAAD,CACEo1L,SAAU+F,EAAariU,KAAKqiU,cAC5BjpP,UAAWF,EAAQzC,KAFrB,UAKE,cAAC,IAAD,CACE+C,WAAW,EACXE,UAAU,SAFZ,SAIE,cAAC02C,EAAD,CAAkB3S,KAAMA,EAAMziE,KAAMA,MAItC,cAAC,IAAD,CAAeksF,YAAalnI,KAAKknI,wB,GA3DfziG,aA2GbwwC,sBACbgG,aA1Ca,SAACC,GAAD,MAA+B,CAC5CwuD,OAAQ,CACN3O,WAAW,2BAAD,OAA6B7/C,EAAM+pC,QAAQ+d,UAAU,KAArD,gBAAiE9nD,EAAM+pC,QAAQ+d,UAAU,KAAzF,UACV/8B,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,MAC5B7rB,SAAU,SACVqX,IAAK,IACL0M,OAAQ9lD,EAAM8lD,OAAO00O,OAAS,GAEhCj/R,KAAM,CACJqF,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC2rB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B+sM,UAAW,CACTjsN,MAAO/qB,EAAM+pC,QAAQU,OAAOmjB,OAE9B5e,MAAO,CACLhC,WAAYhtC,EAAMZ,QAAQ,IAE5BktxB,eAAgB,CACd1rxB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChC2iC,SAAU,SACVsX,OAAQ,OAsBVp1E,YAAgB,gBAChB0/D,mBAZsB,SAAC73E,EAAOyF,GAI9B,MAAO,CACL6xE,cAJ4B,MAAjB7xE,EAASuO,KAAevO,EAASuO,KAAOpoC,oBAR5B,SAAC+3B,GAC1B,MAAO,CACLA,eAkBF48R,oBAAU,CAERE,oBAAqB,IANVxyP,CAQbqyxB,I,6BC5JF,YAEgBnkuB,iBAAgB,kBAAM,8C,4UC2FzBo2E,EAAY,iBAGnB6kP,E,4MACGp3Z,MAAQ,CACb4/V,qBAAqB,G,EAGhB6xY,gBAAkB,EAAKvuuB,MAAMwb,OAAO9kC,MAAM,CAAC,gBAAiB,UAAW,QAAUqa,eAAey9uB,IAAa/zpB,I,EAoM7G6iR,sBAAwB,WAC7B,IAAQZ,EAAwB,EAAK5/V,MAA7B4/V,oBACR,EAAKhkR,SAAS,CAACgkR,qBAAsBA,K,uDApMvC,WACE,MAKI5mY,KAAKkqC,MAJPS,EADF,EACEA,SACA88zB,EAFF,EAEEA,SACAr7yB,EAHF,EAGEA,MAHF,EAIE3C,SAGEg+yB,GAAYr7yB,GACdvT,YAAW,kBAAMlO,EAAS,IAAI4hC,IAAuB,CAACjoE,IAAKmj2B,EAAUr7yB,aAAU,O,kCAGnF,YAEEzhB,EADqB3qC,KAAKkqC,MAAlBS,UACC,IAAIkK,O,oBAGf,WACE,MASI70C,KAAKkqC,MARPm4R,EADF,EACEA,aACAt2S,EAFF,EAEEA,EACAuwS,EAHF,EAGEA,SAEAoriB,GALF,EAIEv51B,MAJF,EAKEu51B,YACAxuxB,EANF,EAMEA,QACAxzB,EAPF,EAOEA,OACA/a,EARF,EAQEA,SAEMi8V,EAAwB5mY,KAAKgnC,MAA7B4/V,oBAEF02D,GAAc53Y,EAAO3hD,IAAI,YAE/B,OACE,uBACEq1E,UAAWF,EAAQ2gC,UACnByiN,SAAU+F,EAAa/F,GAFzB,UAIE,cAAC,IAAD,IACA,eAAC,IAAD,CACE9iP,WAAW,EACXE,UAAU,SAFZ,UAIE,cAAC,IAAD,CACEF,WAAW,EACXI,MAAM,EACNF,UAAU,SAHZ,SAMIguxB,EACA,eAAC,IAAD,CACEluxB,WAAW,EACXI,MAAM,EACNF,UAAU,MACVc,KAAK,SACLvB,WAAW,SALb,UAOE,qBACEG,UAAWF,EAAQ/qE,MACnBmtG,MAAO,CAAE+X,aAAciqU,EAAa,EAAI,IAF1C,SAIGA,EAAavxa,EAAE,eAAiBA,EAAE,sBAAuB,wDAG1Duxa,EACI,cAAC,IAAD,CACEr3V,MAAM,UACN4e,QAAS,kBAAMl6E,EAASv+B,YAAK2iB,iBAF/B,SAIGhD,EAAE,sBAEL,QAGN,KAGN,eAAC,IAAD,CACEytD,WAAW,EACXI,MAAM,EAFR,UAIE,cAAC,IAAD,CACEJ,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACEprE,KAAK,WACL07B,MAAO,CACLpJ,MAAM,GAAD,OAAK/U,EAAE,kBAAP,KACL6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACV14E,GAAI,mBACJ67E,WAAY,CACVC,eAAgB,cAAC,IAAD,CAAY3jC,UAAWF,EAAQ04C,UAIrD5X,SAAU,CACRgpF,KAEF1pH,UAAWwgC,QAGf,cAAC,IAAD,CACEtgC,WAAW,EACXI,MAAM,EAFR,SAIE,cAAC,QAAD,CACEprE,KAAK,WACL07B,MAAO,CACLpJ,MAAM,GAAD,OAAK/U,EAAE,kBAAP,KACL6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CAEVz5G,KAAM0mY,EAAsB,WAAa,OACzC9pR,WAAY,CACV77E,GAAI,mBACJ87E,eAAgB,cAAC,IAAD,CAAmB3jC,UAAWF,EAAQ04C,OACtD+vM,aACE,cAAC,IAAD,CACEz3M,MAAOn+F,EAAE,mBACTo+F,UAAU,MAFZ,SAIE,cAAC,IAAD,CACE/wC,UAAWF,EAAQ04C,KACnB/M,QAAS7kH,KAAKwnY,sBAFhB,UAK4B,IAAxBZ,EACA,cAAC,IAAD,IAAqB,cAAC,IAAD,WAQnC5sR,SAAU,CACRgpF,KAEF1pH,UAAWwgC,QAqBf,cAAC,IAAD,CACElgC,MAAM,EADR,SAGE,mBAAM6+rB,gBAAN,CACEx3uB,GAAG,iBACH/gC,KAAK,SACLw5G,QAAQ,YACRzT,MAAM,UAJR,SAMGl6E,EAAE,uBAGP,cAAC,IAAD,CACE6tD,MAAM,EACNJ,WAAW,EACXE,UAAU,SACVT,WAAW,aAJb,SAME,cAAC,IAAD,CACEG,UAAWF,EAAQ0zX,MACnB39b,GAAI+f,sBAFN,SAIGjD,EAAE,6C,GAjMC0Y,aAwPdgM,EAAWw2R,4BAAkB1tH,GAE7B5vK,EAAmBsrC,kBACvBgG,aAnRa,SAACC,GAAD,MAA+B,CAC5C2+B,UAAW,CACTv+B,MAAO,QAETs2C,KAAM,CACJ91C,QAASZ,EAAMZ,QAAQ,IAEzBnsE,MAAO,CACLg5G,SAAU,GACV/rC,QAAS,OACTM,eAAgB,gBAChBuqB,MAAO,OACP6kL,SAAU,cAEZ8hL,MAAO,CACLzlV,SAAU,GACVlhB,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAC1B+M,WAAY/2C,EAAMZ,QAAQ,QAmQ5Bn7B,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAM87F,IAER5pF,aACA9Q,mBApCsB,SAAC73E,EAAYyF,GAEnC,IACE8B,EACE9B,EADF8B,MAGIk5zB,EAAW7m1B,gBAAM2tB,EAAO,CAAC,SAAU,YAAQzyC,GAC3CswD,EAAQxrC,gBAAM2tB,EAAO,CAAC,SAAU,cAAUzyC,GAE1CqS,EAAQ64B,EAAMpmB,MAAM,CAAC,QAAS,UAEpC,EAA+B6vB,EAASzJ,EAAO,WAAY,YAAnDqlB,EAAR,EAAQA,SAAUk5C,EAAlB,EAAkBA,SAClB,OAAO,aACLqhS,qBAH0B,EAI1Bv6U,WACAk5C,WACAp3F,QACAs51B,WACAr7yB,QACA+uD,WAAYC,wBAAcm+F,EAAdn+F,CAAyBp0E,IAAUp0B,iBAC5CkgC,YAAyB,CAC1B40zB,WAAYvnzB,cACZuF,OAAQF,eAFP1S,CAGA9L,OArCoB,SAAC2D,GAC1B,MAAO,CACLA,WACA2xR,SAAU,SAACnxT,GACT,MAA+BA,EAAOoT,OAA9B8tC,EAAR,EAAQA,SAAUk5C,EAAlB,EAAkBA,SACdqppB,YAAQvisB,GACV1hB,EAAS,IAAIsnC,IAAqB,CAAE5lB,WAAUk5C,cAE9C56D,EAAS,IAAI0jC,IAAgB,CAAChiB,WAAUk5C,mBAmCvBtwB,CAQvBmpX,GAEFz0Z,EAAiBg2O,YAAcC,IAEhBj2O,O,6BCtWf,sBAGIisnB,EAEJ,SAAU+xM,GAGR,SAAS/xM,EAAgB7ogB,GACvB,IAAIp1G,EAIJ,OAFAA,EAAQgwzB,EAAiB3m2B,KAAKhB,KAAM,6BAA+BA,MAC7D+sJ,OAASA,EACRp1G,EAGT,OAVAg5N,IAAeilZ,EAAiB+xM,GAUzB/xM,EAXT,CALA,QAiBEgyM,SAEahyM,O,6BCOAiyM,IA1BkB,SAAoCxh0B,GACnE,IAAIuS,EAAcvS,EAAKuS,YACnBwtgB,EAAU//gB,EAAK+/gB,QACfonN,EAAWnnuB,EAAKmnuB,SAGpB,IAF2BnnuB,EAAKyh0B,qBAG9B,OAAO,EAGT,OAAQ1hT,GACN,IAAK,OACL,IAAK,SAEH,OAAO,EAET,IAAK,SAGH,OAAQonN,IAAa50tB,EAEvB,QACE,OAAO,K,iCCdDmvzB,E,6TAAAA,K,sDAAAA,E,gDAAAA,E,0CAAAA,E,wCAAAA,E,wDAAAA,E,sDAAAA,E,8CAAAA,E,6CAAAA,M,KAkBL,ICLHrozB,EDKSsozB,EAGX,WACS9g0B,GACN,yBADMA,UACP,KAJchnC,KAAO6n2B,EAAcE,uBAyC1BzjhB,EAGX,WACSt9S,GACN,yBADMA,UACP,KAJchnC,KAAO6n2B,EAActjhB,oB,OEpE1B5kS,EAAsB,gBDsBtBF,EAAqB,kBAAM,SAAC3Y,GACvC,IAAM4Y,EAAe5Y,EAAMjjC,IAAI87C,GAC/B,GAAoB,MAAhBD,EACF,OAAOA,EAET,IAAME,EAAM/xB,KAAK+xB,MAUjB,OATgB,MAAZJ,IACFA,EAAWI,GAGTA,EAAMJ,EAAW,KACnB13B,QAAQC,KAAR,iCAAuC43B,EAAvC,2DAAqH,CACnH7Y,UAGGp0B,kB,yNEoIHs11B,G,4MAEGlh0B,MAAQ,CACbgU,KAAM,CACJxsC,KAAM,GACNy9G,SAAU,CACR4nG,gBAAiB57M,eAAK,KAExBwxC,SAAU,CACR6oT,QAAS,KACTJ,SAAU,KACVC,KAAM,MAERzrP,QAAS,GACTsuG,YAAa/8M,iBACb88M,QAAS,KACT5+D,KAAM,KACNgysB,SAAU,MAEZjoc,WAAW,EACX1vB,eAAe,EACfwpX,gBAAiB,KACjB1gV,iBAAiB,EACjB8ub,yBAA0B,EAC1Bj61B,MAAO,GACPk61B,2BAA2B,G,EAGtBC,UAAY,SAAC5s2B,GAClB,MAII,EAAKwuC,MAHPuloB,EADF,EACEA,wBACAz6T,EAFF,EAEEA,cACAjpV,EAHF,EAGEA,EAGIw80B,EAAkB94L,GAA2BA,EAAwBzmqB,KAAI,SAAAgsX,GAC7E,OAAOA,EAAc/zV,IAAM,QAGvBun0B,EAAgB9s2B,GAASA,EAAMsN,KAAI,SAAAisX,GACvC,OAAOA,EAAa6vZ,SAAW,SAC3B,GAQN,OANmByjF,IAAoBlr2B,QAAQkr2B,EAAgBv/1B,KAAI,SAAA+7wB,GAAa,OAC5E/va,EAAcjxW,IAAIghxB,EAAe,IAAIhpxB,MAAQys2B,EAAcj/1B,SAASw7wB,MACrEx5wB,QAAO,SAAAsM,GAAC,OAAKA,KACbhW,aAGiB/F,EAAYiwB,EAAE,CAAC,kDAAmD,wD,EAwHjFslV,oBAAsB,SAAC31W,EAAO2+G,GACnC,IAAQtuF,EAAM,EAAKme,MAAXne,EACFggG,EAAa,IAAIh+F,KAAKssF,EAAUz5F,MAAM,CAAC,oBACvCskL,EAAoB,IAAIn3K,KAE9B,OAAOq3K,aAAkBr5E,EAAMm5E,EAAan5K,EAAE,oC,EAoNxC080B,SAAW,WACjB,MASI,EAAKv+zB,MARPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAyxF,EAHF,EAGEA,UACAO,EAJF,EAIEA,UACAI,EALF,EAKEA,OACA01G,EANF,EAMEA,gBACAmhJ,EAPF,EAOEA,cACAy6T,EARF,EAQEA,wBAEF,EAUI,EAAKzooB,MAVT,IACEgU,KACExsC,EAFJ,EAEIA,KACAy9G,EAHJ,EAGIA,SACAxiE,EAJJ,EAIIA,SACAi9D,EALJ,EAKIA,QACAquG,EANJ,EAMIA,QACA5+D,EAPJ,EAOIA,KAEF6jmB,EATF,EASEA,gBAIIhkoB,GADcta,SACCs+oB,GAEf8pB,EAAwB,WAE5B,IAEM4kF,EAAkB70oB,EAAgBtoN,QAAO,SAAAsM,GAAC,OAAIA,EAAE9T,IAAI,cAAYiF,KAAI,SAACgsX,GAAD,MAAyB,CACjGl0V,MAAOk0V,EAAcjxX,IAAI,SACzBrI,MAAOs5X,EAAcjxX,IAAI,SACzByK,KAAMwmX,EAAcjxX,IAAI,SACxBk9B,GAAI+zV,EAAcjxX,IAAI,MACtBgnH,QAASiqQ,EAAcjxX,IAAI,WAAW,GACtC4k2B,SAAU3ze,EAAcjxX,IAAI,YAAY,OACtCnB,UAEEgm2B,EAAa/0oB,EAAgB7qN,KAAI,SAACgsX,GAAD,MAAyB,CAC9Dl0V,MAAOk0V,EAAcjxX,IAAI,SACzBrI,MAAOs5X,EAAcjxX,IAAI,SACzByK,KAAMwmX,EAAcjxX,IAAI,SACxBk9B,GAAI+zV,EAAcjxX,IAAI,MACtBgnH,QAASiqQ,EAAcjxX,IAAI,WAAW,GACtC4k2B,SAAU3ze,EAAcjxX,IAAI,YAAY,OACtCnB,UAGEim2B,EAAkCp5L,GAA2BA,EAAwB5tqB,OACrFin2B,EAAgCr5L,GAA2BA,EAAwBlkqB,QAAO,SAAAsM,GAAC,OAAKA,EAAEkzG,WAASlpH,OAEjH,OAAOgn2B,EACHC,EAzBqB,GA2BnBJ,EACFE,EA9BwB,GA8C9B,OAAO,gBAAC/vxB,EAAA,EAAD,CAAMO,UAAWF,EAAQssC,cAAehsC,WAAW,EAAMc,QAAS,EAAlE,UACL,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWwgC,KACX5vE,MAAO,CACLpJ,MAAO/U,EAAE,2BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVqR,YAAaj/F,EAAE,2BACf7rB,KAAM,OACNy+G,aAAc,KACdzB,SAAU8Y,EACVxa,SAAU,EAAKixlB,cACf/wsB,MAAOs+vB,EACHA,EAAgBj2vB,IAAI,SAAW,GAC/ByK,GAEE,KAGVwrG,SAAUgc,EAAa,GAAK,CAACgtE,KAAUG,UAG3C,eAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,kBACLgtG,SAAU,EAAKutvB,oBACfzvxB,UAAW2nD,KACXtnB,WAAY,CACVqR,YAAaj/F,EAAE,wCACfmtD,UACAE,UAAWF,EAAQ8vxB,aACnB19uB,aAAa,EACbP,SAAS,EACTiL,aACAp6C,OAAO,2BAAMspP,IAAwBlvM,GAAcizuB,IACnD7t2B,SAAS,EACT4wC,QAAS83uB,EACTpoxB,MAAOs+vB,EACHA,EACCp5uB,MAAM,CAAC,WAAY,mBAAoBwI,iBAAO,KAC9CpgB,KAAI,SAACgsX,GAAD,MAAoB,CACvBl0V,MAAOk0V,EAAcjxX,IAAI,SACzBrI,MAAOs5X,EAAcjxX,IAAI,SACzByK,KAAMwmX,EAAcjxX,IAAI,SACxBk9B,GAAI+zV,EAAcjxX,IAAI,UACpBnB,UACJqpH,EAAS4nG,gBACP5nG,EAAS4nG,gBAAgBt1M,OACzB,IAERq7F,iBAAkB,CAChBC,WAAW,GAEbG,SAAUgc,EAAa,GAAK,CAACgtE,KAAUG,UAG3C,eAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,gBACLgtG,SAAU,EAAK0tvB,mBACf5vxB,UAAW2nD,KACXtnB,WAAY,CACVqR,YAAaj/F,EAAE,uCACfmtD,UACAE,UAAWF,EAAQ8vxB,aACnB19uB,aAAa,EACbP,SAAS,EACTiL,aACAp6C,OAAO,2BAAMspP,IAAwBlvM,GAAcizuB,IACnD7t2B,SAAS,EACTM,MAAOs+vB,EACHA,EAAgBp5uB,MAAM,CAAC,WAAY,mBAAoBwI,iBAAO,KAAKzd,QAAO,SAACutI,EAAK87O,GAChF,IAAMrlN,EAAQqlN,EAAcjxX,IAAI,iBAAiBiF,KAAI,SAAAisX,GAAY,MAAK,CACpEn0V,MAAOm0V,EAAalxX,IAAI,SACxBrI,MAAOu5X,EAAalxX,IAAI,SACxByK,KAAMymX,EAAalxX,IAAI,SACvBk9B,GAAIg0V,EAAalxX,IAAI,UAEvB,OAAOm1I,EAAI5tI,OAAOqkK,KACjB13J,eAAK,KAAKrV,UACXqpH,EAAS4nG,gBACP5nG,EAAS4nG,gBAAgBloN,QAAO,SAACutI,EAAK87O,GACtC,IAAMrlN,EAAQqlN,EAAcjxX,IAAI,iBAC5BixX,EAAcjxX,IAAI,iBAAiBiF,KAAI,SAAAisX,GAAY,MAAK,CACxDn0V,MAAOm0V,EAAalxX,IAAI,SACxBrI,MAAOu5X,EAAalxX,IAAI,SACxByK,KAAMymX,EAAalxX,IAAI,SACvBk9B,GAAIg0V,EAAalxX,IAAI,MACrB+gxB,QAAS7vZ,EAAalxX,IAAI,eAE1BkU,eAAK,IACT,OAAOihI,EAAI5tI,OAAOqkK,KACjB13J,eAAK,KAAKrV,UACX,GACNopC,QAASgpU,EAAcryW,WACpBqG,KAAI,mCAAEi4B,EAAF,iBACcj4B,KAAI,SAACisX,GAAD,MAAmB,CACtCn0V,MAAOm0V,EAAalxX,IAAI,SACxBrI,MAAOu5X,EAAalxX,IAAI,SACxByK,KAAMymX,EAAalxX,IAAI,SACvBk9B,GAAIg0V,EAAalxX,IAAI,MACrB+gxB,QAAS7jvB,SAEZt1B,QAAO,SAACutI,EAAK3gI,GAAN,OAAe2gI,EAAIzoI,MAAM8H,KAAON,eAAK,KAC5CrV,WAELg3G,iBAAkB,CAChBC,WAAW,GAEbG,SAAWgc,GA9H0B,WACzC,IAAMuyuB,EAAkB94L,GAA2BA,EAAwBzmqB,KAAI,SAAAgsX,GAC7E,OAAOA,EAAc/zV,IAAM,QAGvBko0B,EAAwBZ,GAAmBA,EAAgBh91B,QAAO,SAAAw5wB,GACtE,OAAO/va,GAAiBA,EAAcjxW,IAAIghxB,IAAkB/va,EAAcjxW,IAAIghxB,GAAehpxB,QAG/F,OAAOws2B,GAAmBY,IAA0BA,EAAsBtn2B,OAqH7Cun2B,GAAwC,GAAK,CAACpmqB,KAAUG,KAAY,EAAKmlqB,eAGtG,eAACzvxB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,mBACL8qE,UAAW2nD,KACXzlB,SAAU,EAAK6tvB,gBACf1vvB,WAAY,CACVqR,YAAaj/F,EAAE,kCACfmtD,UACAE,UAAWF,EAAQ8vxB,aACnB19uB,aAAa,EACb0K,aACAp6C,OAAQspP,GACR9pU,SAAS,EACTM,MAAOs+vB,EACH,CACAl5tB,MAAOk5tB,EAAgBp5uB,MAAM,CAAC,WAAY,UAAW,UACrDllB,MAAOs+vB,EAAgBp5uB,MAAM,CAAC,WAAY,UAAW,WAErD6oC,EAAS6oT,QACP7oT,EAAS6oT,QAAQ/zV,OACjB,GACNytB,QAASwxE,EAAYA,EAAU50G,WAAWI,KAAI,SAACspW,GAAD,MAAmB,CAC/DxxU,MAAOwxU,EAAQvuW,IAAI,SACnBrI,MAAO42W,EAAQvuW,IAAI,SACnByK,KAAM8jW,EAAQvuW,IAAI,SAClBk9B,GAAIqxU,EAAQvuW,IAAI,UACdnB,UAAY,IAElBg3G,iBAAkB,CAChBC,WAAW,GAEbG,SAAUgc,EAAa,GAAK,CAACgtE,KAAUG,UAG3C,eAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,oBACL8qE,UAAW2nD,KACXzlB,SAAU,EAAK8tvB,iBACf3vvB,WAAY,CACVqR,YAAaj/F,EAAE,mCACfmtD,UACAE,UAAWF,EAAQ8vxB,aACnB19uB,aAAa,EACb0K,aACA56H,SAAS,EACTwgF,OAAQspP,GACRxpU,MAAOs+vB,EACH,CACAl5tB,MAAOk5tB,EAAgBp5uB,MAAM,CAAC,WAAY,WAAY,UACtDllB,MAAOs+vB,EAAgBp5uB,MAAM,CAAC,WAAY,WAAY,WAEtD6oC,EAASyoT,SACPzoT,EAASyoT,SAAS3zV,OAClB,GACNytB,QAAS+xE,EAAYA,EAAUn1G,WAAWI,KAAI,SAACkpW,GAAD,MAAoB,CAChEpxU,MAAOoxU,EAASnuW,IAAI,SACpBrI,MAAOw2W,EAASnuW,IAAI,SACpByK,KAAM0jW,EAASnuW,IAAI,SACnBk9B,GAAIixU,EAASnuW,IAAI,UACfnB,UAAY,IAElBg3G,iBAAkB,CAChBC,WAAW,GAEbG,SAAUgc,EAAa,GAAK,CAACgtE,KAAUG,UAG3C,eAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,gBACLgtG,SAAU,EAAK+tvB,aACfjwxB,UAAW2nD,KACXtnB,WAAY,CACVqR,YAAaj/F,EAAE,+BACfmtD,UACAE,UAAWF,EAAQ8vxB,aACnB19uB,aAAa,EACb0K,aACA56H,SAAS,EACTwgF,OAAQspP,GACRxpU,MAAOs+vB,EACH,CACAl5tB,MAAOk5tB,EAAgBp5uB,MAAM,CAAC,WAAY,OAAQ,UAClDllB,MAAOs+vB,EAAgBp5uB,MAAM,CAAC,WAAY,OAAQ,WAElD6oC,EAAS0oT,KACP1oT,EAAS0oT,KAAK5zV,OACd,GACNytB,QAASmyE,EAASA,EAAOv1G,WAAWI,KAAI,SAACmpW,GAAD,MAAgB,CACtDrxU,MAAOqxU,EAAKpuW,IAAI,SAChBrI,MAAOy2W,EAAKpuW,IAAI,SAChByK,KAAM2jW,EAAKpuW,IAAI,SACfk9B,GAAIkxU,EAAKpuW,IAAI,UACXnB,UAAY,IAElBg3G,iBAAkB,CAChBC,WAAW,GAEbG,SAAUgc,EAAa,GAAK,CAACgtE,KAAUG,UAG3C,eAACtqH,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACkmD,EAAA,EAAD,CAAa1nD,UAAWF,EAAQswxB,iBAAkB,mBAAiB,cAAnE,SACE,eAACtziB,EAAA,EAAD,CACEp1R,MAAO/U,EAAE,2BACTvd,KAAK,iBACL2vV,WAAW,EACXnzO,YAAaj/F,EAAE,iCACfrwB,MACEs+vB,EACIA,EAAgBj2vB,IAAI,YAAc,GAClC2iH,GAEE,GACRxJ,SAAU8Y,EACVxa,SAAU,EAAKixlB,cACf5/kB,WAAW,WAKdmJ,GACD,uCACE,eAACn9C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,iBACL8qE,UAAW6jC,KACX3B,SAAU,EAAKiuvB,aACfzvvB,SAAUgc,EAAa,GAAK,CAACgtE,KAAUvmF,MACvCx0F,KAAM+tG,EAAa,GAAK,CAAC,EAAKq7O,qBAC9BnnU,MAAO,CACL0yE,wBAAyB,CACvB97E,MAAO/U,EAAE,4BACTi3K,UAAU,EACVtnM,MAAOs+vB,EACHA,EAAgBp5uB,MAAM,CAAC,YACvBm0M,GAENn7G,iBAAkB,CAChBC,WAAW,GAEb6C,UAAW,WAIjB,eAAC7jC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,cACL8qE,UAAWwgC,KACX0B,SAAU,EAAKixlB,cACfviqB,MAAO,CACLpJ,MAAO/U,EAAE,yBACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVz5G,KAAM,OACNy+G,aAAc,KACdjjH,MAAOs+vB,EACHA,EAAgBp5uB,MAAM,CAAC,QAAS,IAChCu1I,GAEE,GACNj5C,SAAU8Y,IAGdhc,SAAUgc,EAAa,GAAK,CAACotE,iB,EAQjCqmqB,aAAe,SAAC/t2B,GACtB,IAAQs/C,EAAS,EAAKhU,MAAdgU,KACAwgE,EAAa,EAAKtxE,MAAlBsxE,SACR,EAAKoH,SAAS,CACZ5nE,KAAK,2BACAA,GADD,IAEF+5K,QAASr5N,MAGX,kBAAM8/G,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjBylqB,cAAgB,SAACrksB,GACvB,IAAQozG,EAAa,EAAKtxE,MAAlBsxE,SACFmvQ,EAAYviX,EAAEs8G,cAAcl2G,KAC5Bk71B,EAAgB/+e,EAAU/xS,QAAQ,UAAW,IAAIx/B,cACjDolU,EAAap2W,EAAEs8G,cAAchpH,MACnC,EAAKknH,SAAS,CACZ5nE,KAAoB,gBAAd2vU,GAA6C,mBAAdA,GAAgD,gBAAdA,EAAjE,2BAEC,EAAK3jV,MAAMgU,MAFZ,kBAGD0uzB,EAAgBlrf,IAHf,2BAMC,EAAKx3U,MAAMgU,MANZ,IAOFyO,SAAS,2BACJ,EAAKziB,MAAMgU,KAAKyO,UADb,kBAELkhU,EAAYnM,QAInB,kBAAMhjQ,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjB+h0B,oBAAsB,SAACxw1B,EAAW7c,GACxC,MAA8D,EAAKwuC,MAA3DsxE,EAAR,EAAQA,SAAUmuvB,EAAlB,EAAkBA,sBAAuBl1f,EAAzC,EAAyCA,iBAEzC,EAAK7xP,SAAS,CACZ5nE,KAAK,2BACA,EAAKhU,MAAMgU,MADZ,IAEFixE,SAAU,CACR4nG,gBAAiBzqM,iBAAO7Q,QAG3B,kBAAMijG,EAAS,CAChBiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,YAErB2i0B,EAAsBpx1B,GAClBA,GACF6Q,iBAAO7Q,GAAM7L,SAAQ,SAACsoX,GACpBvgB,EAAiBugB,O,EAKfk0e,mBAAqB,SAAC3w1B,GAC5B,IAAQijG,EAAa,EAAKtxE,MAAlBsxE,SACJq4G,EAAkB,EAAK7sL,MAAMgU,KAAKixE,SAAS4nG,gBAC/CA,EAAkBA,EAAgB7qN,KAAI,SAAAgsX,GACpC,OAAOA,EAAcxsQ,OAAO,oBAG1BjwG,GACF6Q,iBAAO7Q,GAAM7L,SAAQ,SAACxM,GACpB,IAAM4kxB,EAAU5kxB,EAAK6D,IAAI,WACnB2rqB,EAAqB77c,EAAgB7tM,WAAU,SAAA4j1B,GAAM,OAAIA,EAAO7l2B,IAAI,QAAU+gxB,KAC9E9va,EAAgBnhJ,EAAgBjzM,MAAM,CAAC8upB,EAAoB,iBAAkBz3pB,eAAK,KAEpF+8V,EAAchvV,WAAU,SAAC6j1B,GAAD,OAAkBA,EAAa9l2B,IAAI,QAAU7D,EAAK6D,IAAI,SAAS,IACzF8vN,EAAkBA,EAAgB3jN,MAAM,CAACw/pB,EAAoB,iBAA3C,sBAAiE16T,GAAjE,CAAgF90W,SAKxG,EAAK0iH,SAAS,CACZ5nE,KAAK,2BACA,EAAKhU,MAAMgU,MADZ,IAEFixE,SAAU,CACR4nG,uBAIJ,kBAAMr4G,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjBqi0B,gBAAkB,SAAC3t2B,GACzB,MAAoC,EAAKwuC,MAAjCozE,EAAR,EAAQA,cAAe9B,EAAvB,EAAuBA,SACfxgE,EAAS,EAAKhU,MAAdgU,KACRsiE,EAAc5hH,GACd,EAAKknH,SAAS,CACZ5nE,KAAK,2BACAA,GADD,IAEFyO,SAAU,CACR6oT,QAASlpV,iBAAO1tB,QAIpB,kBAAM8/G,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjBsi0B,iBAAmB,SAAC5t2B,GAC1B,MAAqC,EAAKwuC,MAAlC2zE,EAAR,EAAQA,eAAgBrC,EAAxB,EAAwBA,SAChBxgE,EAAS,EAAKhU,MAAdgU,KACR6iE,EAAeniH,GACf,EAAKknH,SAAS,CACZ5nE,KAAK,2BACAA,GADD,IAEFyO,SAAS,2BACJzO,EAAKyO,UADF,IAENyoT,SAAU9oV,iBAAO1tB,GACjBy2W,KAAM,WAIV,kBAAM32P,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjBui0B,aAAe,SAAC7t2B,GACtB,IAAQs/C,EAAS,EAAKhU,MAAdgU,KACAwgE,EAAa,EAAKtxE,MAAlBsxE,SACR,EAAKoH,SAAS,CACZ5nE,KAAK,2BACAA,GADD,IAEFyO,SAAS,2BACJzO,EAAKyO,UADF,IAEN0oT,KAAM/oV,iBAAO1tB,SAIjB,kBAAM8/G,EAAS,CACbiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAO0tB,iBAAO,EAAK4d,a,EAKjB+gF,kBAAoB,SAAC79E,GAC3B,OACE,eAAC,IAAWwgF,kBAAZ,2BAAkCxgF,GAAlC,aACE,eAAC,KAAD,Q,EAKE4/zB,sBAAwB,SAAC/gkB,GAC/B,IACIixd,EADI++B,EAAqB,EAAK7uvB,MAA1B6uvB,iBAEJgxE,EAAS,GACThhkB,EACFixd,EAAkB++B,EAAiBp3wB,MAAK,SAACosQ,GAAD,OAAaA,EAAQhqR,IAAI,QAAUglS,EAAU9nQ,MAErF8o0B,EAAS,CAAEzwb,iBAAiB,GAE9B,EAAK12T,SAAL,aACEo3oB,mBACG+vG,IACF,kBAAM,EAAKC,kBAAkB,Q,EAG1BA,kBAAoB,YAMrB,IALLC,EAKI,EALJA,UACAC,EAII,EAJJA,UAKA,EAA6C,EAAKlj0B,MAA1CgztB,EAAR,EAAQA,gBAAiB1gV,EAAzB,EAAyBA,gBACzB,EAAkD,EAAKpvY,MAA/CS,EAAR,EAAQA,SAAU6wE,EAAlB,EAAkBA,SAAUizI,EAA5B,EAA4BA,OAAQv6B,EAApC,EAAoCA,UAE/B8liB,EAUL,EAAKp3oB,SAAS,CACZ02T,gBAAiB2wb,IAAc3wb,EAC/B9oC,eAAe,IACd,WACD,IAAMziH,EAAU3kQ,iBAAO,eAAK4wuB,EAAgBz7uB,SAe5C,GAdAomB,iBAAM,WACJ62E,EAAS,CACPiC,KAAM,QACNo5I,MAAO,uBACPn7P,MAAO,EAAKsrC,MAAMsyY,kBAEhB,EAAKtyY,MAAMsyY,iBACb99T,EAAS,CACPiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAOqyR,OAIR,EAAK/mP,MAAMsyY,gBAAhB,CAIA,IAAMtkN,EAAc+4D,EAAQhqR,IAAI,gBAAkBkU,iBAG5Cky1B,EAAoBn1oB,EAAYrzM,MAAK,SAAC1L,GAC1C,IAAMygW,EAAczgW,EAAI2K,MAAM,CAAC,UAAW,gBAC1C,QAAI81V,IACK4rC,aAAY5rC,IAAgBgsC,aAAyBhsC,KAAiBirC,KAAsBiB,cAIjGwnd,EAAqBp1oB,EAAYrzM,MAAK,SAAC1L,GAC3C,IAAMygW,EAAczgW,EAAI2K,MAAM,CAAC,UAAW,gBAC1C,QAAI81V,IACK+rC,aAAa/rC,IAAgBgsC,aAAyBhsC,KAAiBirC,KAAsBsB,eAIlGond,EAAmBr1oB,EAAYrzM,MAAK,SAAC1L,GACzC,IAAMygW,EAAczgW,EAAI2K,MAAM,CAAC,UAAW,gBAC1C,QAAI81V,IACK6rC,aAAW7rC,IAAgBgsC,aAAyBhsC,KAAiBirC,KAAsBmB,aAKlGqnd,GACF3uvB,EAAS,CACPiC,KAAM,QACNo5I,MAAO,gBACPn7P,MAAOyu2B,EAAkBpm2B,IAAI,aAG7Bqm2B,GACF5uvB,EAAS,CACPiC,KAAM,QACNo5I,MAAO,iBACPn7P,MAAO0u2B,EAAmBrm2B,IAAI,aAG9Bsm2B,GACF7uvB,EAAS,CACPiC,KAAM,QACNo5I,MAAO,eACPn7P,MAAO2u2B,EAAiBtm2B,IAAI,aAKhC,IAAMum2B,EAAsBt1oB,EACzBzpN,QAAO,SAACmoX,GAAD,OAA8C,OAA9BA,EAAW3vX,IAAI,cACtCiF,KAAI,SAAC0qX,GACJ,IAAMz7O,EAAUy7O,EAAW3vX,IAAI,WAGzBwm2B,GADYtytB,EAAQl0I,IAAI,cAAgBkU,kBACLjP,KAAI,SAACuvI,GAC5C,OAAOA,EAAS7wI,IAAI,KAAM/F,OAAO42I,EAASx0I,IAAI,WAEhD,OAAOk0I,EAAQvwI,IAAI,YAAa6i2B,MAEhCC,EAAgB3r2B,gBACd4r2B,EAA4BH,EAAoB/+1B,QAAO,SAAC0sI,GAC5D,IAAMI,EAAYJ,EAAQl0I,IAAI,MAC9B,OAAIym2B,EAAcvm2B,IAAIo0I,KAA+B,OAAjB8xtB,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBpm2B,IAAI,SAAUs0I,IAA+B,OAAlB+xtB,QAAkB,IAAlBA,OAAA,EAAAA,EAAoBrm2B,IAAI,SAAUs0I,IAA6B,OAAhBgytB,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBtm2B,IAAI,SAAUs0I,IAGjKmytB,EAAgBA,EAAc7r1B,IAAI05H,IAC3B,MAGHqytB,GAA0B,OAATx2oB,QAAS,IAATA,OAAA,EAAAA,EAAWryN,QAAS4o2B,EAA0Bl/1B,QAAO,SAAC0sI,GAC3E,OAAQi8E,EAAUzmN,MAAK,SAAC45G,GAAD,OAAcA,EAAStjH,IAAI,QAAUk0I,EAAQl0I,IAAI,YACrE0m2B,EAEL,GAAIC,EAAe3u2B,KAAM,CACvBy/G,EAAS,CACPiC,KAAM,QACNo5I,MAAO,YACPn7P,OAAgB,OAATw4N,QAAS,IAATA,OAAA,EAAAA,EAAWryN,QAASqyN,EAAU5oN,OAAOo/1B,EAAe9n2B,WAAa8n2B,EAAe9n2B,YAEzF44G,EAAS,CACPiC,KAAM,QACNo5I,MAAO,4BACPn7P,OAAO,IAGT,IAAMiv2B,EAAeD,EAClB1h2B,KAAI,SAACq+G,GAAD,OAAcA,EAAStjH,IAAI,gBAC/B4H,QAAO,SAACutI,EAAK0whB,GACZ,OAAIA,EACK1whB,EAAI5tI,OAAOs+pB,GAEb1whB,IACNjhI,kBACL0yB,EAAS,IAAIkvL,KAAkC,CAC7C+vc,UAAW+gM,KAKf,IAAM51oB,EAAUwvG,aAAWx2C,EAAQhqR,IAAI,YACnCgxN,GAAW,EAAK/tL,MAAMsyY,kBAAoB4wb,IAC5C1uvB,EAAS,CACPiC,KAAM,QACNo5I,MAAM,aACNn7P,MAAOggH,KAAOq5G,GAASp2M,IAAI8vO,EAAQ,QAAQ3iM,gBAE7C0vD,EAAS,CACPiC,KAAM,QACNo5I,MAAM,UACNn7P,MAAOggH,KAAOq5G,GAASjpK,qBA7IvBwtX,GACF,EAAK12T,SAAS,CACZ02T,iBAAkBA,EAClB9oC,eAAe,K,EAiJfo6d,aAAe,WACrB,MAA6B,EAAK1g0B,MAA1B81D,EAAR,EAAQA,QACRr1D,EADA,EAAgBA,UACP,IAAIs0E,KACb,EAAK2D,SAAS,CACZo3oB,gBAAiB,KACjBxpX,eAAgB,EAAKxpW,MAAMwpW,cAC3Bx1V,KAAK,2BACA,EAAKhU,MAAMgU,MADZ,IAEFmtzB,SAAW,EAAKnh0B,MAAMwpW,cAAqC,KAArB,CAAErmS,KAAM,CAACnK,MAEjDqowB,2BAA4B,EAAKrh0B,MAAMwpW,gBAEvC,kBAAM,EAAKtmW,MAAMoxqB,wB,uDAhiCrB,WACE,MAUIt7sB,KAAKkqC,MARPmqU,GAFF,EACEw2f,eADF,EAEEx2f,oBACA9lU,EAHF,EAGEA,MACAkuqB,EAJF,EAIEA,WACA1pB,EALF,EAKEA,cACAD,EANF,EAMEA,gBACAg4K,EAPF,EAOEA,uBACA16d,EARF,EAQEA,mBARF,EASE50R,SAGGs3kB,GACHg4K,IAIFz2f,IACA+7B,IAEI7hW,GAASA,EAAMoE,OAAOujE,WACxBummB,EAAW96sB,OAAO4sC,EAAMoE,OAAOujE,YAE7B48kB,GACF9yrB,KAAK4iH,SAAS,CACZo3oB,gBAAiBjnE,EACjBz5Q,iBAAiB,EACjBpZ,WAAY6yR,M,gCAKlB,SAA0B10kB,EAA4C4yJ,EAAgBk6C,GAAuB,IAAD,OAC1G,EASInrT,KAAKkqC,MARPmoL,EADF,EACEA,QACAq7K,EAFF,EAEEA,kBACAolT,EAHF,EAGEA,gBACA2pB,EAJF,EAIEA,WACA1pB,EALF,EAKEA,cACAg4K,EANF,EAMEA,mBACAhyE,EAPF,EAOEA,iBACAv9qB,EARF,EAQEA,SAEF,EAAyFx7G,KAAKgnC,MAAtFoh0B,EAAR,EAAQA,yBAA2C4C,EAAnD,EAAkChxG,gBAAmC1gV,EAArE,EAAqEA,gBAEhE5+O,kBAAQr8E,EAAUg0G,QAASA,IAC1BA,KAAah0G,EAAUg0G,SAAWyge,GAChCz0kB,EAAUg0G,UAAY33B,kBAAQr8E,EAAUy0kB,gBAAiBA,KAC7D2pB,EAAW3pB,GAIXA,GAAmBC,KAAmBr4f,kBAAQr8E,EAAU00kB,cAAeA,IAAmBA,GAAiBz5Q,IAAoBroK,EAAUqoK,kBAC3It5a,KAAK4iH,SAAS,CACZo3oB,gBAAiBjnE,EACjBz5Q,iBAAiB,EACjBpZ,WAAY6yR,IACX,WACDv3kB,EAAS,CACPiC,KAAM,QACNo5I,MAAO,uBACPn7P,OAAO,IAET8/G,EAAS,CACPiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAOq3rB,QAIO,OAAhBi4K,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBjn2B,IAAI,QAASu1a,IAAoBroK,EAAUqoK,iBAC/Dt5a,KAAK4iH,SAAS,CACZo3oB,gBAAiBgxG,EACjB1xb,iBAAiB,EACjBpZ,WAAY8qc,IACX,WACDxvvB,EAAS,CACPiC,KAAM,QACNo5I,MAAO,uBACPn7P,OAAO,IAET8/G,EAAS,CACPiC,KAAM,QACNo5I,MAAO,mBACPn7P,MAAOsv2B,QAIR34oB,GAAWq7K,GAAqB,GAAkC,IAA7B06d,IACxC2C,EAAmBr9d,GACnB1tY,KAAK4iH,SAAS,CACZwlvB,yBAA0B,KAI9B,IAAMpuG,EAAuB++B,EAAiBp3wB,MAAK,SAACosQ,GAAD,OAA4BA,EAAQhqR,IAAI,QAAUpC,OAAO+rY,MAe5G,GAdiC,IAA7B06d,GAAkCrvE,EAAiBh9xB,MAAQi+vB,IAC7Dh6vB,KAAK8p2B,sBAAsB,CAAE7o0B,GAAIt/B,OAAO3B,KAAKkqC,MAAMwjW,qBACnDlyR,EAAS,CACPiC,KAAM,QACNo5I,MAAO,OACPn7P,MAAOs+vB,GAAmBA,EAAgBj2vB,IAAI,OAAQ,QAExD/D,KAAK4iH,SAAS,CACZwlvB,yBAA0B,IACzB,WACD,EAAK4B,kBAAkB,CAAEC,WAAW,SAInC53oB,GAAW24oB,IAAqBtwqB,kBAAQu2E,EAAU+of,gBAAiBgxG,GAAmB,CACzF,IAAMd,EAAY7s2B,QAAQ4zQ,EAAU+of,iBAAmB/of,EAAU+of,gBAAgBj2vB,IAAI,OAASin2B,EAAiBjn2B,IAAI,QAAUktQ,EAAU+of,gBAAgBj2vB,IAAI,OAAS/D,KAAKkqC,MAAMmoL,UAAY4+C,EAAU+of,iBAAmBgxG,EAAiBjn2B,IAAI,QAAU+urB,GACvP9yrB,KAAKgq2B,kBAAkB,CAAEC,WAAW,EAAMC,iB,oBAY9C,WAAiB,IAAD,OACd,EAcIlq2B,KAAKkqC,MAbPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAgtwB,EAHF,EAGEA,iBACA7nZ,EAJF,EAIEA,eACAlxS,EALF,EAKEA,OACA6wL,EANF,EAMEA,gBACA8jG,EAPF,EAOEA,aACA4b,EARF,EAQEA,eACA/0R,EATF,EASEA,SACA3uD,EAVF,EAUEA,cACAo+yB,EAXF,EAWEA,8BACAC,EAZF,EAYEA,oBACAzhzB,EAbF,EAaEA,SAEF,EAKIzpD,KAAKgnC,MAJPgztB,EADF,EACEA,gBACA1gV,EAFF,EAEEA,gBACA9oC,EAHF,EAGEA,cACA63d,EAJF,EAIEA,0BAGF,OACE,eAACrhvB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,gBAAC8B,EAAA,EAAD,WACE,eAAC1N,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,uBAEL,gBAAC8sD,EAAA,EAAD,CACEO,UAAWF,EAAQiyxB,kBACnB3xxB,WAAW,EACXI,MAAM,EACNY,KAAK,SAJP,UAOE,eAAC3B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,eAAC,IAAD,CACEpsE,KAAK,cACL4qE,UAAWF,EAAQ8vxB,aACnBptxB,OAAQspP,GACRl6M,YAAaj/F,EAAE,wCACfu/F,aAAa,EACbt/E,QAAS+svB,EAAmBA,EAAiB/vxB,KAAI,SAACw3G,GAAD,MAAkB,CACjE1/E,MAAO0/E,EAAOz8G,IAAI,QAClBrI,MAAO8kH,EAAOz8G,IAAI,QAClBk9B,GAAIu/E,EAAOz8G,IAAI,UACbnB,UAAY,GAChBlH,MAAOs+vB,GAAmB,CACxBl5tB,MAAOk5tB,EAAgBj2vB,IAAI,QAC3BrI,MAAOs+vB,EAAgBj2vB,IAAI,QAC3Bk9B,GAAI+4tB,EAAgBj2vB,IAAI,OAE1BiyH,WAAYsjT,EACZx8X,WAAY,CAAE4tE,kBAAmB1qH,KAAK+nH,mBACtCvM,SAAU,SAACpzG,GACT,EAAK0h2B,sBAAsB1h2B,GAE3B,IAAM4iB,EAAO5iB,GAAK,CAChB8tG,UAAW9tG,EAAC,GACZlI,KAAM,OACN8wR,OAAQhxL,GAEN53F,GACFusX,EAAa3pW,IAGjBw3F,cAAe0uR,EACfnuR,UAAWmovB,MAGf,gBAACryxB,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EACXgB,KAAK,SAHP,UAKE,eAAC3B,EAAA,EAAD,CACEe,MAAM,EADR,SAKE,eAAC+qC,EAAA,EAAD,CACEvrC,UAAWF,EAAQkyxB,WAEnBluvB,SAAUzzD,EAAS0C,SAAS5iD,SAAS8rB,oCACrCwvF,QAAS,SAACz8G,GACR,EAAK4h2B,kBAAkB,IAGvB,IAAMh/0B,EAAOgvuB,GAAmB,CAC9B9jpB,UAAW8jpB,EAAgBj2vB,IAAI,MAC/B7D,KAAM,OACN8wR,OAAQhxL,GAENh1E,IAASsuZ,GACX3kD,EAAa3pW,IAdnB,SAkBqBe,EAAlButZ,EAAoB,4BAAiC,+BAI1D,eAACzgW,EAAA,EAAD,CACEe,MAAM,EACNJ,WAAW,EAFb,UAOK8/V,GAAmB,uCAClB,sBAAKh+T,MAAO,CAAEx/B,QAAS,QAAvB,SAAiC,gCAAO/vD,EAAE,sBAC1C,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQmyxB,mBACnB3xvB,QAAQ,WACRmL,QAAS7kH,KAAK4q2B,aAHhB,SAKG7+0B,EAAE,wCAKViuuB,GACC,eAACnhrB,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQoyxB,sBAFrB,SAIE,eAACvziB,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,yCACTmtD,QAAS,CAAEp4C,MAAOo4C,EAAQqyxB,kBAC1BhkvB,QAAS,eAAC6U,EAAA,EAAD,CACPn2B,MAAM,UACNiX,SAAU+tvB,EACVjvuB,QAAS60J,EAAgBtnR,SAASywvB,EAAgBj2vB,IAAI,OACtDy3G,SAAU,SAAApzG,GACR,IAAM4iB,EAAOgvuB,GAAmB,CAC9B9jpB,UAAW8jpB,EAAgBj2vB,IAAI,MAC/B7D,KAAM,OACN8wR,OAAQhxL,GAEV53F,EAAE4kB,OAAOgvG,QACL24P,EAAa3pW,GACbulX,EAAevlX,GACnBy7E,KAAmB9rE,mBAAgB6w0B,oBAAqB3+yB,EAAc,CACpE4+yB,YAAarj2B,EAAE4kB,OAAOgvG,QAAU,QAAU,UAC1CkwJ,YAAa8te,EAAgBj2vB,IAAI,QACjCuuW,QAAS0nZ,EAAgBp5uB,MAAM,CAAC,WAAY,UAAW,UACvDsxV,SAAU8nZ,EAAgBp5uB,MAAM,CAAC,WAAY,WAAY,UACzDuxV,KAAM6nZ,EAAgBp5uB,MAAM,CAAC,WAAY,OAAQ,qBAQ1Do5uB,GAAmBxpX,GACpB,eAAC33T,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQoyxB,sBAFrB,SAIE,eAACvziB,EAAA,EAAD,CACEj3R,MAAO/U,EAAE,yCACTmtD,QAAS,CAAEp4C,MAAOo4C,EAAQqyxB,kBAC1BhkvB,QAAS,eAAC6U,EAAA,EAAD,CACPn2B,MAAM,UACN+1B,QAASqsuB,EACTnrvB,SAAU+tvB,EACVzvvB,SAAU,SAAApzG,GACR,IAAM4zH,EAAU5zH,EAAE4kB,OAAOgvG,QACzBxgB,EAAS,CACPiC,KAAM,QACNo5I,MAAM,iCACNn7P,MAAOsgI,EAAU5yG,iBAAO,CAAE+gF,KAAM,CAACnK,KAAa,OAEhD,EAAK4iB,UAAS,SAAC57E,GAAD,mBAAC,eACVA,GADS,IAEZgU,KAAK,2BACAhU,EAAMgU,MADP,IAEFmtzB,SAAUnsuB,EAAU,CAAE7xB,KAAM,CAACnK,IAAY,OAE3CqowB,0BAA2BrsuB,OAE7Bv1B,KAAmB9rE,mBAAgB6w0B,oBAAqB3+yB,EAAc,CACpE4+yB,YAAazvuB,EAAU,QAAU,UACjCkwJ,YAAa,EAAKllP,MAAMgU,KAAKxsC,KAAK3M,OAAS,EAAKmlC,MAAMgU,KAAKxsC,KAAO,IAClE8jW,QAA8C,OAArC,EAAKtrU,MAAMgU,KAAKyO,SAAS6oT,QAAmB,EAAKtrU,MAAMgU,KAAKyO,SAAS6oT,QAAQvuW,IAAI,SAAW,IACrGmuW,SAAgD,OAAtC,EAAKlrU,MAAMgU,KAAKyO,SAASyoT,SAAoB,EAAKlrU,MAAMgU,KAAKyO,SAASyoT,SAASnuW,IAAI,SAAW,IACxGouW,KAAwC,OAAlC,EAAKnrU,MAAMgU,KAAKyO,SAAS0oT,KAAgB,EAAKnrU,MAAMgU,KAAKyO,SAAS0oT,KAAKpuW,IAAI,SAAW,qBAUzGysY,GAAiBwpX,IAClB,oBAAMyuG,SAAN,a,GA3XmBhk0B,aAylCzBygS,GAAqB,CACzB39M,QAAS,SAAA47N,GAAc,kCAClBA,GADkB,IAErBx7N,YAAY,YACZF,aAAc,OAEhBy7N,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,iBAEnBgD,iBAAkB,SAAAm7N,GAAc,kCAC3BA,GAD2B,IAE9B99N,OAAQ,UACR,UAAW,CACTL,gBAAiB,mBAKjBikvB,GAAuB,CAC3B9iO,WAAY,SAAAhjT,GAAc,kCACrBA,GADqB,IAExBn+N,gBAAiB,iBAEnBohhB,gBAAiB,SAAAjjT,GAAc,kCAC1BA,GAD0B,IAE7Bh8N,SAAU,OACVrrC,QAAS,IACT4sD,YAAa,IACbziC,MAAO,UACP+e,gBAAiB,iBAEnBgD,iBAAkB,SAAAm7N,GAAc,kCAC3BA,GAD2B,IAE9B/nQ,QAAS,WA8JEnG,qBACbgG,aA3Ja,SAACC,GAAD,MAA+B,CAC5CsuxB,iBAAkB,CAChBluxB,MAAO,QAET6vxB,kBAAmB,CACjBl5uB,WAAY,QAEdzM,cAAe,CACbvsC,WAAY,UAEdmsC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GACR8uC,SAAU,WAEZ+gvB,WAAY,CACVpmvB,gBAAiB,cACjB6C,UAAW,OACXgT,OAAQ,OACR50B,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7B8M,WAAY,OACZC,cAAe,OACf,UAAW,CACTrK,UAAW,OACX7C,gBAAiB,gBAGrB0mvB,oBAAqB,CACnBtwxB,QAAS,OACTM,eAAgB,UAElB07R,gBAAiB,CACfh8R,QAAS,OACTnC,WAAY,UAEdoyxB,mBAAoB,CAClBp5uB,WAAY,MACZC,cAAe,OAEjBq5uB,iBAAkB,CAChB90uB,WAAY,UAEd60uB,sBAAuB,CACrBlwxB,QAAS,OACTnC,WAAY,cA+Gd02C,cACA9Q,mBA5GsB,SAAC73E,EAAYyF,GAAb,MAAgC,CACtD4lL,QAAStyE,YAAyB,CAAC,MAA1BA,CAAiC/4G,GAC1Cw2E,UAAWx2E,EAAMpmB,MAAM,CAAC,WAAY,eAAiB3I,iBACrD8lG,UAAW/2E,EAAMpmB,MAAM,CAAC,WAAY,sBAAwB3I,iBAC5DkmG,OAAQn3E,EAAMpmB,MAAM,CAAC,WAAY,mBAAqB3I,iBACtD0z1B,gBAAiB3k0B,EAAMpmB,MAAM,CAAC,WAAY,2BAC1Cgr1B,iBAAkB5k0B,EAAMpmB,MAAM,CAAC,WAAY,4BAC3Cir1B,aAAc7k0B,EAAMpmB,MAAM,CAAC,WAAY,wBACvCizM,gBAAiByjJ,cAA4BtwU,GAAOzlB,SACpDyzV,cFrzC2CniU,YAC3C8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,mBEmzCxCszW,CAA0BrwU,GACzCyooB,wBFjzCqD58nB,YACrD8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,6BE+yC9B+n2B,CAAoC9k0B,GAC7D+k0B,sBF7yCmDl5zB,YACnD8M,KACA,SAAC3Y,GAAD,OAA6CA,EAAMjjC,IAAI,2BE2yChCio2B,CAAkChl0B,GACzD8rpB,gBAAiB/yiB,YAAyB,CAAC,aAA1BA,CAAwC/4G,GACzDktL,UAAWn0E,YAAyB,CAAC,aAA1BA,CAAwC/4G,GACnD+rpB,cAAeloe,YAAkBp+K,EAASqmpB,gBAA3Bjoe,CAA4C7jL,GAC3D+xvB,iBAAkBhukB,cAA6B/jL,GAC/C0mW,kBAAmBnjL,cAA8BvjL,GACjDynN,OAAQw4E,4BAAkB,QAAlBA,CAA2BjgS,EAAO,UAC1Cg5D,OAAQh/C,gBAAmBha,GAC3B6pP,gBAAiB3mE,cAA8BljL,GAC/Cik0B,8BAA+Bx+oB,cAA0CzlL,GACzEkk0B,oBAAqBjtpB,eAAyCj3K,OAGrC,SAAC2D,GAAD,MAAoC,CAC7Dkg0B,eAAgB,WACdlg0B,EAAS,IAAIs0E,MAEf3B,cAAe,SAACg1P,GACVA,IACF3nU,EAAS,IAAI8rP,IAAsB,CACjC67E,QAASlpV,iBAAOkpV,GAChBlpU,SAAU,yBACV6i0B,YAAa,0BACbC,QAAS,yBAEXvh0B,EAAS,IAAImrP,IAAmB,CAAEp4K,UAAW40P,EAAQrxU,GAAImI,SAAU,wBAGvEy0E,eAAgB,SAACq0P,GACXA,IACFvnU,EAAS,IAAIgsP,IAAuB,CAClCu7E,SAAU9oV,iBAAO8oV,GACjB9oU,SAAU,0BACV8i0B,QAAS,yBAEXvh0B,EAAS,IAAIwrP,IAAgB,CAAEr4K,WAAYo0P,EAASjxU,GAAImI,SAAU,qBAGtE60E,WAAY,SAACk0P,GACPA,GACFxnU,EAAS,IAAIksP,IAAmB,CAAEs7E,KAAM/oV,iBAAO+oV,GAAO/oU,SAAU,0BAGpEirU,mBAAoB,WAClB1pU,EAAS,IAAIq5S,MAEfywB,iBAAkB,SAACugB,GACjBrqV,EAAS,IAAI65S,EAAuBwwC,EAAcjxX,IAAI,SAExD4l2B,sBAAuB,SAAC91oB,GACtBlpL,EAAS,IAAIq9zB,EAA0Bn0oB,KAEzC4of,WAAY,SAACx7qB,GACX0J,EAAS,IAAIupE,IAAqC,CAAEgC,UAAWj1E,MAEjEiwW,eAAgB,SAAC5sY,GACf,GAAKA,EAAL,CAGA,IAAMilH,EAAU,CACd9nF,IAAK,CACH,CACEjzB,KAAM,CACJkzB,KAAMp9B,MAKdqmC,EAAS,IAAI6pE,KAA0B,CAAE+U,eAE3CwhvB,mBAAoB,SAAC9p0B,GACnB,GAAKA,EAAL,CAGA,IAAMsoF,EAAU,CACd9nF,IAAK,CACH,CACER,GAAI,CACFO,GAAI7/B,OAAOs/B,OAKnB0J,EAAS,IAAI6pE,KAA0B,CAAE+U,eAE3CuhvB,uBAAwB,WACtBng0B,EAAS,IAAImoE,KAAoB,CAAEoD,WAAY,MAEjDy+Q,aAAc,SAAC3pW,GAAD,OAAuC2f,EAAS,IAAI2mE,KAAmBtmF,KACrFulX,eAAgB,SAACvlX,GAAD,OAAuC2f,EAAS,IAAIymE,KAAqBpmF,KACzFolX,mBAAoB,kBAAMzlW,EAAS,IAAIumE,IAAyB,CAAEhxG,KAAM,OAAQg2G,UAAW,EAAG86K,YAAQl1R,MACtG6uC,cAM6C,KAAM,CAAEpB,YAAY,IACjE4V,YAAgB,gBAChBgwE,KALal6C,CAMbizxB,I,uCCp6CIiE,GAAiB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAiB3CC,G,4MACGpl0B,MAAQ,CACbql0B,QAASF,I,EAGJ96f,oBAAsB,SAAC31W,EAAO2+G,GACnC,IAAQtuF,EAAM,EAAKme,MAAXne,EACFggG,EAAa,IAAIh+F,KAAKssF,EAAUz5F,MAAM,CAAC,aACvCskL,EAAoB,IAAIn3K,KAE9B,OAAOq3K,aAAkBr5E,EAAMm5E,EAAan5K,EAAE,oC,EAGzCug1B,uBAAyB,SAAC5w2B,EAAO2+G,GACtC,IAAQtuF,EAAM,EAAKme,MAAXne,EACFggG,EAAa,IAAIh+F,KAAKssF,EAAUz5F,MAAM,CAAC,gBACvCskL,EAAoB,IAAIn3K,KAE9B,OAAOq3K,aAAkBr5E,EAAMm5E,EAAan5K,EAAE,2C,EAuBzCwg1B,cAAgB,WACrB,IAAQpvpB,EAAS,EAAKjzK,MAAdizK,KACFqvpB,GAAa,IAAIz+0B,KAAKw2S,aAAWpnH,EAAKp5M,IAAI,gBAAgBiqB,UAAY,IAAID,KAAKw2S,aAAWpnH,EAAKp5M,IAAI,aAAaiqB,WAAa,MAE/HouB,MAAMowzB,IAAcA,EAAY,EAClC,EAAK1rmB,aAAa,CAChBrS,QAAS,KAGN,EAAKznN,MAAMql0B,QAAQ9i2B,SAASij2B,GAItBL,GAAe5i2B,SAASij2B,IACjC,EAAK5pvB,SAAS,CACZypvB,QAASF,KALX,EAAKvpvB,SAAS,CACZypvB,QAAS,UAAIF,GAAJ,CAAoBK,IAAW//1B,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAIC,OAO/D,EAAKk7P,aAAa,CAChBrS,OAAQ+9mB,M,EAmFNC,YAAc,SAACtluB,EAAOt3H,EAAUg9U,EAAer+U,GACrD,MAAoC,EAAK07B,MAAzC,IAAQizK,YAAR,MAAevqM,gBAAf,GAEA+3B,EAFA,EAAuBA,UAEd0gC,YAAM,QAAS,YACxB,EAAKy1L,aACH,CACE/rC,QAASllN,EACTylN,WAAY55G,KAAO7rG,GAAU8O,IAAIw+L,EAAKp5M,IAAI,UAAW,QAAQ+nD,iB,EAI3D4gzB,eAAiB,SAACvluB,EAAOt3H,EAAUg9U,EAAer+U,GAExD,EAAK07B,MAAMS,SAAS0gC,YAAM,QAAS,eACnC,EAAKy1L,aACH,CACExrC,WAAYzlN,K,EAIV881B,mBAAqB,SAACjx2B,GAC5B,MAAyB,EAAKwuC,MAAtBizK,YAAR,MAAevqM,gBAAf,EACA,EAAKkuP,aAAa,CAChBrS,OAAQ/yP,EACR45N,WAAY55G,KAAOyhG,EAAKp5M,IAAI,YAAY4a,IAAIjjB,EAAO,QAAQowD,iB,EAIvDg1M,aAAe,SAACrK,GACtB,IAAQj7I,EAAa,EAAKtxE,MAAlBsxE,SAERp9G,OAAO0D,KAAK20P,GAAO/pP,SAAQ,SAACpI,GAC1Bk3G,EAAS,CACPiC,KAAM,QACNo5I,MAAM,GAAD,OAAKvyP,GACV5I,MAAO+6P,EAAMnyP,S,uDA7JnB,WACE,IAAQ64M,EAASn9M,KAAKkqC,MAAdizK,KAEHA,EAAKp5M,IAAI,YAAeo5M,EAAKp5M,IAAI,cAMpC/D,KAAKus2B,gBALLvs2B,KAAK8gQ,aAAa,CAChB/rC,QAASr5G,OAAS5vD,cAClBwpK,WAAY55G,OAAS/8F,IAAIw+L,EAAKp5M,IAAI,UAAU,QAAQ+nD,kB,gCAO1D,SAA0BuyD,GACxB,IAAQ8+F,EAASn9M,KAAKkqC,MAAdizK,KACJA,EAAKp5M,IAAI,aAAes6G,EAAU8+F,KAAKp5M,IAAI,YAAco5M,EAAKp5M,IAAI,gBAAkBs6G,EAAU8+F,KAAKp5M,IAAI,eACzG/D,KAAKus2B,kB,oBA4BT,WACE,IACExg1B,EACE/rB,KAAKkqC,MADPne,EAGAsg1B,EACErs2B,KAAKgnC,MADPql0B,QAGIO,EAAc7g1B,EAAE,iCAEtB,OACE,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGZ,UAAU,MAAMT,WAAW,aAA9D,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,UACL8qE,UAAW6jC,KACXnD,SAAU,CAACgpF,KAAUvmF,MACrBx0F,KAAM,CAACjoB,KAAKqxW,qBACZ71P,SAAUx7G,KAAKys2B,YACfvi0B,MAAO,CACL0yE,wBAAyB,CACvB97E,MAAO/U,EAAE,kCACTi3K,UAAU,GAEZppF,iBAAkB,CAChBC,WAAW,GAEb6C,UAAW,eAIjB,eAAC7jC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACA,eAAC,QAAD,CACIpsE,KAAK,aACL8qE,UAAW6jC,KACXnD,SAAU,CAACgpF,KAAUvmF,MACrBx0F,KAAM,CAACjoB,KAAKss2B,wBACZ9wvB,SAAUx7G,KAAK0s2B,eACfxi0B,MAAO,CACL0yE,wBAAyB,CACvB97E,MAAO/U,EAAE,yCACTi3K,UAAU,GAEZppF,iBAAkB,CAChBC,WAAW,GAEb6C,UAAW,eAIjB,eAAC7jC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,SACL8qE,UAAWiiC,KACXvB,SAAUgpF,KACV94J,MAAO,CACLpJ,MAAO/U,EAAE,iCACT4tF,WAAY,CACV6B,SAAUx7G,KAAK2s2B,oBAEjB/yvB,iBAAkB,CAChBC,WAAW,IAVjB,SAeIwyvB,EAAQrj2B,KAAI,SAACylP,GAAD,OACV,gBAAClyI,GAAA,EAAD,CAAuB7gH,MAAO+yP,EAA9B,UACGA,EADH,IACYm+mB,IADGn+mB,iB,GApIJhqN,aAgMZwwC,qBACb4pC,kBAAQ,MAHiB,SAACl0E,GAAD,MAAwC,CAACA,eAIlEswC,aAVa,SAACC,GAAD,MAA+B,CAC5C2xxB,cAAe,CACb5mwB,MAAM,GAAD,OAAK/qB,EAAM+pC,QAAQE,QAAQ,KAA3B,mBASPhmE,YAAgB,gBAHH81B,CAIbm3xB,I,oGCnKIU,G,4MACG9l0B,MAAQ,CACbyuL,qBAAiB35N,EACjB+5N,wBAAoB/5N,G,EAkQdix2B,cAAgB,SAAC3k2B,EAAwC1M,GAC/D,IAAQsx2B,EAAgB,EAAK9i0B,MAArB8i0B,YACFx+1B,EAAOpG,EAAE4kB,OAAOxe,KACtB,EAAKo0G,SAAS,CAAE6yG,gBAAiB/5N,IAC/B,kBAAMsx2B,EAAY,CAChBvvvB,KAAM,QACNo5I,MAAOroP,EACP9S,c,EAKEux2B,iBAAmB,gBAAGxovB,EAAH,EAAGA,MAAuBngG,GAA1B,EAAU+hF,KAAV,EAAgBvlE,MAAhB,2BACzB,eAACyiY,GAAA,EAAD,uCACM9+S,GACAngG,GAFN,IAGE,aAAW,cACX9V,KAAK,qBACL4qE,UAAW,EAAKlvC,MAAMgvC,QAAQ+pV,WAC9BznT,SAAU,EAAKuxvB,cACfzm0B,SACE,EAAK4D,MAAM88N,MAAMh+P,KAAI,SAAC9I,EAAW/D,GAAZ,OACnB,eAAC47T,EAAA,EAAD,CAEEj3R,MAAO,EAAKoJ,MAAMne,EAAE7rB,EAAK6D,IAAI,cAC7BrI,MAAOwE,EAAK6D,IAAI,SAChBwjH,QACE,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,aAJV9pG,U,uDAtRf,YAIE0u2B,EADI7q2B,KAAKkqC,MADP2g0B,oB,gCAKJ,SAA0BxsvB,GACxB,MAA4Cr+G,KAAKkqC,MAAzC2rL,EAAR,EAAQA,mBAAoBm3oB,EAA5B,EAA4BA,YACxBn3oB,IAAuBn7B,kBAAQm7B,EAAoBx3G,EAAUw3G,sBAC/Dm3oB,EAAY,CACVvvvB,KAAM,QACNo5I,MAAO,qBACPn7P,MAAOm6N,IAET71N,KAAK4iH,SAAS,CAAEizG,0B,oBAIpB,WACE,MAaI71N,KAAKkqC,MAZPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAoxL,EAHF,EAGEA,KACAm8lB,EAJF,EAIEA,gBACA97rB,EALF,EAKEA,UACAO,EANF,EAMEA,UACAI,EAPF,EAOEA,OACAN,EARF,EAQEA,eACAP,EATF,EASEA,cACAW,EAVF,EAUEA,WACA43G,EAXF,EAWEA,mBACAlrL,EAZF,EAYEA,SAGF,OACE,gBAACkuC,EAAA,EAAD,CAAMO,UAAWF,EAAQssC,cAAehsC,WAAW,EAAMc,QAAS,EAAlE,UACE,eAACzB,EAAA,EAAD,CAAMO,UAAWF,EAAQorC,SAAU1qC,MAAM,EAAMgB,GAAI,GAAnD,SACE,gBAACkmD,EAAA,EAAD,WACE,eAACyonB,GAAA,EAAD,UACE,eAAC/voB,EAAA,EAAD,CAAYE,QAAQ,QAAQ6K,QAAQ,EAApC,SAA2Cx4F,EAAE,sCAE/C,eAAC,QAAD,CACEvd,KAAK,qBACL8qE,UAAWt5E,KAAKit2B,wBAKE,oBAAvBp3oB,GACD,gBAACh9I,EAAA,EAAD,CAAMO,UAAW6tC,KAAW/tC,EAAQorC,SAAUprC,EAAQg0xB,aAAc1zxB,WAAW,EAAMI,MAAM,EAAMU,QAAS,EAAGM,GAAI,GAAjH,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,kBACLgtG,SAAU,SAAAvlG,GACR00B,EAASu/B,YAAO6/L,IAAiB,mBAAoB,OACrDp/N,EAASu/B,YAAO6/L,IAAiB,eAAgB,OACjDp/N,EAAS0gC,YAAM0+L,IAAiB,kBAAmB,mBAAoB,iBACvEzsJ,EAAcrnG,IAEhB+jG,SAAU,CACRgpF,KACAG,MAEF7pH,UAAW2nD,KACX+oF,UAAW,SAACtuN,GAAD,OAAW0tB,iBAAO1tB,IAC7B++C,OAAQ,SAAC/+C,GAAD,OAAWA,GAASA,EAAM6iB,QAClC2rB,MAAO,CACLyvE,WAAY,CACVvgC,UAAWF,EAAQ8vxB,aACnB9vxB,UACA8xC,YAAaj/F,EAAE,+CACf3wB,SAAS,EACTkwH,aAAa,EACbt/E,QAASwxE,EAAYA,EAAUx0G,KAAI,SAACspW,GAAD,MAAmB,CACpDxxU,MAAOwxU,EAAQvuW,IAAI,SACnBrI,MAAO42W,EAAQvuW,IAAI,SACnBk9B,GAAIqxU,EAAQvuW,IAAI,UACdnB,UAAY,GAChBg5E,OAAQspP,GACRhlU,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,QAKnB,eAAChhC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,mBACLgtG,SAAU,SAAAvlG,GACR00B,EAASu/B,YAAO6/L,IAAiB,eAAgB,OACjDp/N,EAAS0gC,YAAM0+L,IAAiB,mBAAoB,iBACpDlsJ,EAAe5nG,IAEjB+jG,SAAU,CACRgpF,MAEF1pH,UAAW2nD,KACX+oF,UAAW,SAACtuN,GAAD,OAAW0tB,iBAAO1tB,IAC7B++C,OAAQ,SAAC/+C,GAAD,OAAWA,GAASA,EAAM6iB,QAClC2rB,MAAO,CACLyvE,WAAY,CACVvgC,UAAWF,EAAQ8vxB,aACnB9vxB,UACA8xC,YAAaj/F,EAAE,gDACf3wB,SAAS,EACTkwH,aAAa,EACbt/E,QAAS+xE,EAAYA,EAAU/0G,KAAI,SAACkpW,GAAD,MAAoB,CACrDpxU,MAAOoxU,EAASnuW,IAAI,SACpBrI,MAAOw2W,EAASnuW,IAAI,SACpBk9B,GAAIixU,EAASnuW,IAAI,UACfnB,UAAY,GAChBg5E,OAAQspP,GACRhlU,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,QAKnB,eAAChhC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,eACLgtG,SAAU,SAAAvlG,GACR00B,EAAS0gC,YAAM0+L,IAAiB,iBAChC9rJ,EAAWhoG,IAEb+jG,SAAU,CACRgpF,MAEF1pH,UAAW2nD,KACX+oF,UAAW,SAACtuN,GAAD,OAAW0tB,iBAAO1tB,IAC7B++C,OAAQ,SAAC/+C,GAAD,OAAWA,GAASA,EAAM6iB,QAClC2rB,MAAO,CACLyvE,WAAY,CACVvgC,UAAWF,EAAQ8vxB,aACnB9vxB,UACA8xC,YAAaj/F,EAAE,4CACf3wB,SAAS,EACTkwH,aAAa,EACbt/E,QAASmyE,EAASA,EAAOn1G,KAAI,SAACmpW,GAAD,MAAgB,CAC3CrxU,MAAOqxU,EAAKpuW,IAAI,SAChBrI,MAAOy2W,EAAKpuW,IAAI,SAChBk9B,GAAIkxU,EAAKpuW,IAAI,UACXnB,UAAY,GAChBg5E,OAAQspP,GACRhlU,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,QAKnB,eAAChhC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,mBACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,iCACfoyU,WAAW,EACXziW,MAAOyhN,GAAQA,EAAKp5M,IAAI,kBAAejI,EACvCoE,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,gCAIf,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,mBACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,iCACfoyU,WAAW,EACXziW,MAAOyhN,GAAQA,EAAKp5M,IAAI,kBAAejI,EACvCoE,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,gCAIf,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,kBACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,gCACfoyU,WAAW,EACXziW,MAAOyhN,GAAQA,EAAKp5M,IAAI,iBAAcjI,EACtCoE,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,GAEb/4E,MAAO/U,EAAE,6BAOO,oBAAvB8pM,GACD,eAACh9I,EAAA,EAAD,CAAMO,UAAWF,EAAQorC,SAAU9qC,WAAW,EAAMI,MAAM,EAAMU,QAAS,EAAGM,GAAI,GAAhF,SACG0+tB,GACD,eAACzguB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,kBACL8qE,UAAWwgC,KACX5vE,MAAO,CACLyvE,WAAY,CACVuD,UAAU,EACVihP,WAAW,EACXziW,MAAM,GAAD,OAAM49yB,EAAgBv1yB,IAAI,aAAe,GAAzC,YAAiDu1yB,EAAgBv1yB,IAAI,aAAe,IACzF7D,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,MAEhB/E,iBAAkB,CAChBC,WAAW,iB,GAzPCp1E,aAuSxBygS,GAAqB,CACvB39M,QAAS,SAAA47N,GAAc,kCAChBA,GADgB,IAEnBx7N,YAAY,YACZF,aAAc,OAElBy7N,mBAAoB,SAAAC,GAAc,kCAC3BA,GAD2B,IAE9Bn+N,gBAAiB,kBAsEV/vC,qBACbgG,aAnEa,SAACC,GAAD,MAA+B,CAC5CsqC,cAAe,CACbpqC,QAAS,OACTK,cAAe,SACfC,eAAgB,cAElB4oC,SAAU,CACR7oC,cAAe,MACfJ,SAAU,QAEZ6xxB,YAAa,CACX3xxB,OAAQ,MACRs4C,aAAc,gBACd6U,YAAa,iBAEfu6R,WAAY,CACVxnV,cAAe,MACfJ,SAAU,QAEZ2txB,aAAc,OAiDdnqvB,mBA7CsB,SAAC73E,EAAYyF,GACnC,MAAO,CACL6swB,gBAAiBxjO,eAA4B9uiB,GAC7Cw2E,UAAWx2E,EAAMpmB,MAAM,CAAC,WAAY,eAAiB3I,iBACrD8lG,UAAW/2E,EAAMpmB,MAAM,CAAC,WAAY,uBAAyB3I,iBAC7DkmG,OAAQn3E,EAAMpmB,MAAM,CAAC,WAAY,oBAAsB3I,iBACvD0z1B,gBAAiB3k0B,EAAMpmB,MAAM,CAAC,WAAY,4BAC1Cgr1B,iBAAkB5k0B,EAAMpmB,MAAM,CAAC,WAAY,6BAC3Cir1B,aAAc7k0B,EAAMpmB,MAAM,CAAC,WAAY,6BAIhB,SAAC+pB,GAE1B,MAAO,CACLqi0B,YAFuC,SAAC,GAAD,IAAGvvvB,EAAH,EAAGA,KAAMo5I,EAAT,EAASA,MAAOn7P,EAAhB,EAAgBA,MAAhB,OAA4BivC,EAASu/B,YAAOuzC,EAAMo5I,EAAOn7P,KAGhGmv2B,eAAgB,WACZlg0B,EAAS,IAAIs0E,MAEjB3B,cAAe,SAACg1P,GACZ3nU,EAAS,IAAI8rP,IAAsB,CACjC67E,QAASlpV,iBAAOkpV,GAChBlpU,SAAU,0BACV6i0B,YAAa,2BACbC,QAAS,0BAEXvh0B,EAAS,IAAImrP,IAAmB,CAAEp4K,UAAW40P,EAAUA,EAAQrxU,GAAK,IAAKmI,SAAU,wBAEvFy0E,eAAgB,SAACq0P,GACbvnU,EAAS,IAAIgsP,IAAuB,CAClCu7E,SAAU9oV,iBAAO8oV,GACjB9oU,SAAU,2BACV8i0B,QAAS,0BAEXvh0B,EAAS,IAAIwrP,IAAgB,CAAEr4K,WAAYo0P,EAAWA,EAASjxU,GAAK,IAAKmI,SAAU,qBAEvF60E,WAAY,SAACk0P,GACTxnU,EAAS,IAAIksP,IAAmB,CAAEs7E,KAAM/oV,iBAAO+oV,GAAO/oU,SAAU,2BAEpEuB,eAOFwU,YAAgB,gBAHH81B,CAIb63xB,I,4BCrYIK,G,4MACIC,eAAsBhk1B,iBAAO,CACnC,CAAC8X,UAAW,qCAAsCxlC,MAAO,iBAAkB8usB,WAAW,GACtF,CAACtpqB,UAAW,sCAAuCxlC,MAAO,kBAAmB8usB,WAAW,GACxF,CAACtpqB,UAAW,sCAAuCxlC,MAAO,kBAAmB8usB,WAAW,GACxF,CAACtpqB,UAAW,mCAAoCxlC,MAAO,oBAAqB8usB,WAAW,K,EAuBlFx5b,mBAAqB,SAAC3yJ,GAC3B,MAA6B,EAAKn0E,MAA1Bwc,EAAR,EAAQA,OAAQ/b,EAAhB,EAAgBA,SACZ0zE,EAAU33D,SAAWA,GAAUA,EAAS,GAE1C/b,EAAS,IAAI2wB,MAAkB,CAAEiuD,QAASngG,iBAAO,CAC/C,IAAO,CACL,CACE,QAAW,CACT,GAAMs9B,IAGV,CACE,OAAU,CACR,GAAM,kB,EAOXu/Q,WAAa,SAAC79T,GACL,UAAVA,EAAE9D,KACJ8D,EAAEg5H,kB,uDA1CN,WACE,MAA8BphI,KAAKkqC,MAA3Bwc,EAAR,EAAQA,OAAS/b,EAAjB,EAAiBA,SACb+b,EAAS,GAEX/b,EAAS,IAAI2wB,MAAkB,CAAEiuD,QAASngG,iBAAO,CAC/C,IAAO,CACL,CACE,QAAW,CACT,GAAMs9B,IAGV,CACE,OAAU,CACR,GAAM,mB,oBAiClB,WAAiB,IAAD,OACd,EAmBI1mD,KAAKkqC,MAlBPgvC,EADF,EACEA,QACA8nC,EAFF,EAEEA,MACAgsvB,EAHF,EAGEA,YACAK,EAJF,EAIEA,mBAEAl4f,GANF,EAKEguV,UALF,EAMEhuV,SACAm4f,EAPF,EAOEA,aACAC,EARF,EAQEA,gBACAC,EATF,EASEA,iBACAC,EAVF,EAUEA,aACAC,EAXF,EAWEA,wBACA11J,EAZF,EAYEA,mBACAo2E,EAbF,EAaEA,mBACApuK,EAdF,EAcEA,YACAj0lB,EAfF,EAeEA,EACA0iO,EAhBF,EAgBEA,OACA/nM,EAjBF,EAiBEA,OACA/b,EAlBF,EAkBEA,SAGIgj0B,EAAW,GACXC,EAAa5svB,EAAMziG,OACzB,IAAK,IAAMja,KAAOsp2B,EACZA,EAAWrs2B,eAAe+C,IAC5Bqp2B,EAASvh2B,KAAKwh2B,EAAWtp2B,IAG7B,IAAMup2B,EAAmBF,EAASpi2B,QAAO,SAAA4+F,GACvC,SAAIA,EAAKt/C,MAAQs/C,EAAKt/C,KAAK5pB,KAAOylB,MAIjCj6C,MAAK,SAAC9G,EAAGC,GAAJ,OAAWD,EAAEqxW,SAAUzvI,cAAc3hO,EAAEoxW,aAE/C,OACE,eAAChwP,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,gBAAC8B,EAAA,EAAD,WACE,eAAC1N,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,qBAEL,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIE,eAACzB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,eAAC,QAAD,CACEpsE,KAAK,OACL07B,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,mCACf3wB,QAAS,OACT8E,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,KACdsnN,WAAYjmU,KAAKimU,YAEnBnlS,MAAO/U,EAAE,6BACT3wB,SAAS,EACTw+G,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,IACXE,SAAU,CAACmqF,UAGf,eAACtrH,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,eAAC,QAAD,CACEpsE,KAAK,aACL07B,MAAO,CACLyvE,WAAY,CACVqR,YAAaj/F,EAAE,4CACf7rB,KAAM,OACNsO,KAAMuf,KAAK+xB,MAAM7+C,WACjB09G,aAAc,KACdsnN,WAAYjmU,KAAKimU,YAEnBnlS,MAAO/U,EAAE,sCACT6tF,iBAAkB,CAChBC,WAAW,IAGfvgC,UAAWwgC,QAGf,eAACjhC,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,eAAC,QAAD,CACEpsE,KAAK,SACL07B,MAAO,CACLpJ,MAAO/U,EAAE,+BACT6tF,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVj+G,MAAOsE,KAAKkqC,MAAMirU,QAAQxzV,MAAK,SAAAw3S,GAAM,aAAIA,EAAOp1T,IAAI,SAAX,UAAqB,EAAKmmC,MAAMivR,cAAhC,aAAqB,EAAmBp1T,IAAI,WAAU/D,KAAKkqC,MAAMirU,QAAQpxW,IAAI,IAAM,GAC5Hy3G,SAAU,SAAA29M,GACR,EAAKjvR,MAAMS,SAAS,IAAIkzL,MAA+B,CAACs7F,YAEpD6+Y,GACFrtqB,EAASu/B,YAAO+/L,IAA0B,+BAAgC,QAMlF3wL,UAAWiiC,KAnBb,SAqBG45P,EAAQnsW,KAAI,SAAAmwT,GAAM,OAAI,eAAC58M,GAAA,EAAD,CAAiC7gH,MAAOy9T,EAAxC,SAAiDA,EAAOp1T,IAAI,UAA7Co1T,EAAOp1T,IAAI,iBAIvD,gBAAC80E,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAKI8zsB,EACE,eAACv1sB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACo+uB,GAAA,EAAD,CAAYC,mBAAoBj5M,MAEhC,KAEN,eAACnniB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAIwzsB,EAAqB,EAAI,GAAI9yqB,MAAO,CAAEgB,UAAW,IAAvE,SACE,eAACk2pB,GAAA,EAAD,CACEx6nB,SAAUq1tB,GAAsBp11B,eAAK,IACrC+zB,QAAS5iB,iBAAOyk1B,GAChBryvB,SAAUwxvB,SAIhB,eAAC,GAAD,CACI7vpB,KACE/zL,iBAAO,CACL2rM,QAASu4oB,EACTh4oB,WAAYi4oB,EACZt5oB,YAAau5oB,EACb/+mB,WAGJh0M,OAAO,aACP+gE,SAAUwxvB,IAEd,eAAC,GAAD,CACE7vpB,KAAMswpB,EACN53oB,mBAAoB63oB,EACpB1mmB,MAAOhnQ,KAAKot2B,0B,GAlNA3o0B,aCzET0o0B,GDuUAl4xB,kBACbgG,aArCa,SAACC,GAAD,MAA+B,CAC5CkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GACR8uC,SAAU,eAiCZxL,mBA7BsB,SAAC73E,EAAYyF,GACnC,MAAO,CACL02pB,UAAWpjjB,YAAyB,CAAC,QAA1BA,CAAmC/4G,GAC9Cqm0B,mBAAoBtttB,YAAyB,CAAC,iBAA1BA,CAA4C/4G,GAChEsm0B,aAAcvttB,YAAyB,CAAC,WAA1BA,CAAsC/4G,GACpDum0B,gBAAiBxttB,YAAyB,CAAC,cAA1BA,CAAyC/4G,GAC1Dwm0B,iBAAkBzttB,YAAyB,CAAC,eAA1BA,CAA0C/4G,GAC5Dym0B,aAAc1ttB,YAAyB,CAAC,WAA1BA,CAAsC/4G,GACpD0m0B,wBAAyB3ttB,YAAyB,CAAC,sBAA1BA,CAAiD/4G,GAC1EmuU,QAAS/tC,eAAiCpgS,GAC1CmyR,OAAQp5K,YAAyB,CAAC,UAA1BA,CAAqC/4G,GAC7Cg6E,MAAOM,gBAAkBt6E,GACzB0f,OAAQD,gBAAuBzf,GAC/BynN,OAAQw4E,4BAAkB,QAAlBA,CAA2BjgS,EAAO,UAC1CgxqB,mBAAoBnwpB,gBAAmC7gB,GACvDonvB,mBAAoBlquB,gBAAgCld,GACpDg5kB,YAAavle,gBAAwBzzG,OAId,SAAC2D,GAE1B,MAAO,CACLqi0B,YAFuC,SAAC,GAAD,IAAGvvvB,EAAH,EAAGA,KAAMo5I,EAAT,EAASA,MAAOn7P,EAAhB,EAAgBA,MAAhB,OAA2BivC,EAASu/B,YAAOuzC,EAAMo5I,EAAOn7P,KAG/FivC,cAK2C,KAAM,CAACpB,YAAY,IAChE4V,YAAgB,gBAHH81B,CAIbk4xB,I,uCEvTaW,IC6CHC,GD7CGD,GAhBf,SAAoB/kwB,EAA4B28B,GAC9C,MAA8BhnF,oBAAS,GAAvC,mBAAOgoQ,EAAP,KAAgBosH,EAAhB,KAYA,MAAO,CAAEpsH,UAAS+ld,YAVEvjpB,uBAAY,SAAA9gH,GAC9B0qa,GAAW,GACP/pU,GAAWA,EAAQ3gG,KACtB,CAAC2gG,IAO2B+5K,WALZ55J,uBAAY,SAAA9gH,GAC7B0qa,GAAW,GACPptS,GAAUA,EAAOt9H,KACpB,CAACs9H,M,WEFSsouB,GANY,SAAC,GAAD,IAAG541B,EAAH,EAAGA,MAAH,OACzB,eAAC4nG,GAAA,EAAD,CAAgBC,SAAS,MAAM3B,MAAO,CAAE4rP,UAAW,WAAY7zO,aAAc,IAA7E,SACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,gBAApC,SAAqD7wF,O,yCCMnD641B,GAAc,SAAC,GAOqL,IANxMC,EAMuM,EANvMA,SACApt0B,EAKuM,EALvMA,MACA2tV,EAIuM,EAJvMA,eACA0/e,EAGuM,EAHvMA,kBAGuM,IAFvMC,mBAEuM,aADvMC,qBACuM,SACjMrzzB,EAAOtJ,sBAAY24N,aAAkB6jmB,IAErCvj0B,EAAW2F,wBACXg+zB,EAAmB58zB,sBAAY+gnB,gBAA8B7vpB,UACnE,EAA0B6hC,WAAe,IAAzC,mBAAO/oC,EAAP,KAAci2T,EAAd,KACA,EAAwBltR,YAAe,GAAvC,mBAAOkmE,EAAP,KAAa4lB,EAAb,KACA,EAAwC9rF,WAAe,IAAvD,mBAAO8p0B,EAAP,KAAqBC,EAArB,KACMjtiB,EAAW98R,SAAwC,CACvD/oC,MAAO,GACPsxjB,eAAgB,EAChBC,aAAc,IAGVwhT,EAAehq0B,SAAwC,CAC3DuohB,eAAgB,EAChBC,aAAc,EACdvxjB,MAAO,KAGT+oC,aAAgB,WACD,KAATuW,GAAeumR,EAASz5R,QAAQpsC,QAAUs/C,IAC5CumR,EAASz5R,QAAQpsC,MAAQs/C,GAAQ,GACjC22Q,EAAS32Q,GAAQ,KAEfozzB,GAAwB,KAATpzzB,GAAeumR,EAASz5R,QAAQpsC,QAAUs/C,IAC3DumR,EAASz5R,QAAQpsC,MAAQs/C,EACzB22Q,EAAS32Q,MAEV,CAACA,IAEJvW,aAAgB,YAKT/oC,GAAS,OAASs/C,GAAQ,IAI/B0zzB,EAAuBhz2B,GAHrBgz2B,EAAuB7i1B,WAIxB,CAACnwB,IAEJ+oC,aAAgB,WACd,OAAO,kBAAMiq0B,EAAuB7i1B,YACnC,IAEH,IAAM8i1B,EAAiBlq0B,eAAkB,SAAAr8B,GACvC4f,QAAQ08E,MAAR,mDAA0DwpwB,IAC1Dvj0B,EAASu/B,YAAO6/L,IAAiBmkmB,EAASzs1B,KAAK,KAAMrZ,MACpD,CAAC8l2B,IACEQ,EAAyBjq0B,cAAkBmsJ,mBAAS+9qB,EAAgBn5b,MAAoB,CAAC04b,IAE/F,EAA6CJ,GAAWr/e,GAAkBA,EAAe1lR,QAAS0lR,GAAkBA,EAAe/oP,QAA3HghL,EAAR,EAAQA,QAAS+ld,EAAjB,EAAiBA,YAAa3pf,EAA9B,EAA8BA,WAExB8rlB,EAAaP,EAAgB,CAAEtlwB,QAAS0jqB,EAAa/moB,OAAQo9I,GAAe,GAG5E+rlB,EAAiBR,GAAiB3njB,EACpC,eAAC,GAAD,CAAoBtxS,OAAQmsT,EAASz5R,QAAQpsC,OAAS,IAAImG,SAC1D,KAIJ,EAAkG4sX,GAAkB,GAAhGqgf,EAApB,EAAQhyvB,WAA0CiyvB,EAAlD,EAAsCp1vB,WAAqCq1vB,EAA3E,mBAEA,OAAKrkwB,EA+BE,eAACowT,GAAA,EAAD,aACL/uX,QAASsi0B,EACTjtuB,eAAgB,SAAC7gB,GACf,MAAyB,kBAAXA,GAAsBA,EAAOz8G,IAAI,QAAe,IAEhEu3G,MAAO,CAAEhgC,MAAO,QAChBuhQ,YAAa,SAAClqS,GAAD,OACX,eAACujR,EAAA,EAAD,uCACMvjR,GADN,IAEE7R,MAAOA,EACP+4E,WAAW,EACX0nN,SAAUA,EACV5nN,WAAU,uCAAOhnE,EAAOgnE,YAAd,IAA0B+zhB,YAAY,GAASqhO,GAA/C,IAAqErz2B,MAAO6lU,EAASz5R,QAAQpsC,QACvGohH,WAAU,uCAAOnqE,EAAOmqE,YAAd,IAA0BxB,MAAO,CAAEuY,aAAc,IAAQi7uB,GAAzD,IAA2EntiB,aAAcktiB,KAC/FG,GACAJ,KAGRpsvB,cAAe,SAACp6G,EAAG6N,GACjB,GAAI00F,EAAM,CACR,IAAMniF,EAAM+4S,EAASz5R,QAAQpsC,MAAMoU,MAAM2+1B,EAAa3m0B,QAAQmlhB,aAAcwhT,EAAa3m0B,QAAQmlhB,cAAgB1rP,EAASz5R,QAAQpsC,MAAMmG,OAASnG,EAAMmG,SACvJ2s2B,EAAgBhm1B,QAEX+4S,EAASz5R,QAAQpsC,MAAM6yC,MAAM,QAAU,IAAI1sC,QAAU4s2B,EAAa3m0B,QAAQpsC,MAAM6yC,MAAM,QAAU,IAAI1sC,QACvG0uH,GAAQ,GAEVohM,EAAS4P,EAASz5R,QAAQpsC,OAC1B+y2B,EAAa3m0B,QAAQklhB,eAAiBzrP,EAASz5R,QAAQklhB,eACvDyhT,EAAa3m0B,QAAQmlhB,aAAe1rP,EAASz5R,QAAQmlhB,aAEvDwhT,EAAa3m0B,QAAQpsC,MAAQ6lU,EAASz5R,QAAQpsC,OAEhDipI,QAAS,WACPpU,GAAQ,GACRi+uB,EAAgB,IAChB31zB,YAAW,WACT0oR,EAASz5R,QAAQ4iC,QACjB62P,EAASz5R,QAAQ6khB,kBAAkB8hT,EAAa3m0B,QAAQklhB,eAAgByhT,EAAa3m0B,QAAQmlhB,gBAC5F,MAELtid,KAAMA,EACN6rQ,UAAU,EACV3U,kBAAmB,kBAAM,GACzBoV,cAAe,SAAAp/V,GAAC,OAAIA,EAAEtM,QAAO,SAAAigC,GAAC,OAAKA,EAAEznC,IAAI,QAAU,IAAIq1C,cAAc7vC,SAASgl2B,EAAan1zB,mBAC3F6sR,WAAY,SAAC79T,GACG,UAAVA,EAAE9D,KAAqBmqX,GAAmBA,EAAetwB,WAC3D/1V,EAAEg5H,kBAGN5lB,SAAU,SAACpzG,EAAQ6N,GACjB,GAAmB,kBAARA,GAA4B,OAARA,EAAc,CAC3CA,GAAOA,GAAOrD,iBAAO7O,IAAI,SAAW,GACpC,IAAMkr2B,EACJvz2B,EAAMoU,MACJ,EACA2+1B,EAAa3m0B,QAAQmlhB,aAAe,GAEtCh3iB,EACAva,EAAMoU,MAAM2+1B,EAAa3m0B,QAAQmlhB,cACnC1rP,EAASz5R,QAAQpsC,MAAQuz2B,EACzBt9iB,EAASs9iB,GAET1tiB,EAASz5R,QAAQ6khB,kBACf8hT,EAAa3m0B,QAAQklhB,eAAiB/2iB,EAAIpU,OAAS,EACnD4s2B,EAAa3m0B,QAAQmlhB,aAAeh3iB,EAAIpU,OAAS,GAGnDg3C,YAAW,WACT0oR,EAASz5R,QAAQ4iC,QACjB62P,EAASz5R,QAAQ6khB,kBAAkB8hT,EAAa3m0B,QAAQklhB,eAAiB/2iB,EAAIpU,OAAS,EAAG4s2B,EAAa3m0B,QAAQmlhB,aAAeh3iB,EAAIpU,OAAS,KACzI2za,WACc,OAARv/Z,IACTsrT,EAASz5R,QAAQpsC,MAAQ,GACzBi2T,EAAS,MAGbj2T,MAAO,GACPuj2B,eAAe,GACXkP,IA5GG,eAACj4iB,EAAA,EAAD,qCACLp1R,MAAOA,EACP+4E,WAAW,EACX0nN,SAAUA,EACV5nN,WAAU,yBAAI+zhB,YAAY,GAASqhO,GAAzB,IAA+Crz2B,MAAO6lU,EAASz5R,QAAQpsC,QACjFohH,WAAU,yBAAIxB,MAAO,CAAEuY,aAAc,IAAQi7uB,GAAnC,IAAqDntiB,aAAcktiB,KACzEG,GACAJ,GAPC,IAQLpzvB,SAAU,SAACpzG,GACGA,EAAE4kB,OAAOtxB,MACrB,GAAIivG,EAAM,CACR,IAAMniF,EAAM+4S,EAASz5R,QAAQpsC,MAAMoU,MAAM2+1B,EAAa3m0B,QAAQmlhB,aAAcwhT,EAAa3m0B,QAAQmlhB,cAAgB1rP,EAASz5R,QAAQpsC,MAAMmG,OAASnG,EAAMmG,SACvJ2s2B,EAAgBhm1B,QAEX+4S,EAASz5R,QAAQpsC,MAAM6yC,MAAM,QAAU,IAAI1sC,QAAU4s2B,EAAa3m0B,QAAQpsC,MAAM6yC,MAAM,QAAU,IAAI1sC,SACvG0uH,GAAQ,GACR13E,YAAW,WACT0oR,EAASz5R,QAAQ4iC,QACjB62P,EAASz5R,QAAQ6khB,kBAAkB8hT,EAAa3m0B,QAAQklhB,eAAgByhT,EAAa3m0B,QAAQmlhB,gBAC5F,MAELt7P,EAAS4P,EAASz5R,QAAQpsC,OAC1B+y2B,EAAa3m0B,QAAQklhB,eAAiBzrP,EAASz5R,QAAQklhB,eACvDyhT,EAAa3m0B,QAAQmlhB,aAAe1rP,EAASz5R,QAAQmlhB,aAEvDwhT,EAAa3m0B,QAAQpsC,MAAQ6lU,EAASz5R,QAAQpsC,WAuFzCwz2B,GAAazq0B,OAAWwp0B,IC9J/BkB,G,4MA8DIC,aAAe,SAAC15C,IAMtBs3C,EALwB,EAAK9i0B,MAArB8i0B,aAKI,CACVvvvB,KAAM,QACNo5I,MAAO,iCACPn7P,MAPmB,EAAKwuC,MAAM4voB,oBAAsB,EAAK5voB,MAAM4voB,mBAAmB/1qB,IAAI,gBAAnE,UACd,EAAKmmC,MAAM4voB,mBAAmB/1qB,IAAI,gBADpB,eAC0C2xzB,EAAK3xzB,IAAI,UACpE2xzB,EAAK3xzB,IAAI,Y,4CAhEf,WACE,MAMI/D,KAAKkqC,MALPgvC,EADF,EACEA,QAEAm2xB,GAHF,EAEEv1L,mBAFF,EAGEu1L,uBAEAtj1B,GALF,EAIEih1B,YAJF,EAKEjh1B,GAEF,OACE,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQssC,cAA1C,UACE,eAAC3sC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC,QAAD,CACEpsE,KAAK,6BACL8qE,UAAW2nD,KACX/2F,MAAO,CACLyvE,WAAY,CACVvgC,UAAWF,EAAQ8vxB,aACnB9vxB,UACA8xC,YAAaj/F,EAAE,gDACfigB,QAASqj0B,EAAwBA,EAAsBrm2B,KAAI,SAAC+6T,GAAD,OAAgB36S,iBAAO,CAChF0X,MAAOijS,EAAWhgU,IAAI,OACtBrI,MAAOqoU,EAAWhgU,IAAI,QACtBk9B,GAAI8iS,EAAWhgU,IAAI,WACfkU,iBACN0pG,aAAc,SAACnB,EAAQmihB,GAAT,oBAAsBnihB,QAAtB,IAAsBA,GAAtB,UAAsBA,EAAQ1/E,aAA9B,aAAsB,EAAesY,cAAc7vC,UAAiB,OAARo5nB,QAAQ,IAARA,OAAA,EAAAA,EAAUvplB,gBAAiB,KACrGioF,eAAgB,SAAC7gB,GAAD,OAAYA,EAAOz8G,IAAI,UACvCklH,eAAgB,SAACzI,GAAD,OAAYA,GAC5B5kC,OAAQspP,GACR1pN,SAAUx7G,KAAKov2B,cAEjBx1vB,iBAAkB,CAChBC,WAAW,QAKnB,eAAChhC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAACs0xB,GAAD,CACEhB,SAAU,CAAC,oBAAqB,gBAChCpt0B,MAAO/U,EAAE,sCACT0iW,eAAgB,CACdtwB,WAAW,GAEbiwgB,aAAa,MAGjB,eAACv1xB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAACs0xB,GAAD,CACEhB,SAAU,CAAC,oBAAqB,YAChCpt0B,MAAO/U,EAAE,oCACT0iW,eAAgB,CACdtwB,WAAW,GAEbiwgB,aAAa,a,GAvDU3p0B,aA4E7BygS,GAAqB,CACzB39M,QAAS,SAAA47N,GAAc,kCAClBA,GADkB,IAErBx7N,YAAY,YACZF,aAAc,OAEhBy7N,mBAAoB,SAAAC,GAAc,kCAC7BA,GAD6B,IAEhCn+N,gBAAiB,kBC/HNmqvB,GDkKAl6xB,kBACb4pC,mBARsB,SAAC73E,GACvB,MAAO,CACL8yoB,mBAAoB/5hB,YAAyB,CAAC,qBAA1BA,CAAgD/4G,GACpEqo0B,sBAAuB58M,eAA6BzrnB,OApB7B,SAAC2D,GAQ1B,MAAO,CACLqi0B,YARuC,SAAC,GAA2B,IAAzBvvvB,EAAwB,EAAxBA,KAAMo5I,EAAkB,EAAlBA,MAAOn7P,EAAW,EAAXA,MACvDivC,EAASu/B,YAAOuzC,EAAMo5I,EAAOn7P,IAEf,mCAAVm7P,GAA+Cn7P,GACjDivC,EAASu/B,YAAOuzC,EAAM,6BAA8B,QAKtD2gO,eAAgB,WACdzzS,EAAS,IAAIujtB,OAEfvjtB,eAaFswC,aAjCa,SAACC,GAAD,MAAmB,CAChCsqC,cAAe,CACblJ,UAAW,OAEb0svB,aAAc,OA8Bd7pzB,YAAgB,gBAHH81B,CAIbk6xB,I,iTE3HIG,GAA6D,CACjEC,OAAQ,8BACRtrvB,SAAU,gCACVurvB,IAAK,4BAGDC,GAAmB,SAACvv2B,GAAD,MAA8C,aAATA,GAAgC,QAATA,GAGxEwv2B,GAA+B,SAAC91xB,GAAD,OAAwC61xB,GAAiB71xB,EAAK71E,IAAI,SAA1B,UAC7E40E,YAAgC,IAApBiB,EAAK71E,IAAI,UAAgBq2P,QAAQ,KADgC,KAEhFxgL,EAAK71E,IAAI,UAGP4r2B,GAAgB,SAACzv2B,EAAiCxE,GAAlC,MAA6D,WAATwE,EACtEyB,OAAOjG,GACPi9E,YAAYh3E,OAAOjG,GAAS,KAAK0+P,QAAQ,MAEvC5qI,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C2gV,SAAU,CACRxoS,aAAcn4C,EAAMZ,QAAQ,IAE9Bs1xB,SAAU,CACR9zxB,QAASZ,EAAMZ,QAAQ,IAAK,GAC5BmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnCvqP,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtC2qvB,eAAgB,CACd/zxB,QAASZ,EAAMZ,QAAQ,GACvBmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnCvqP,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,MAEtC4qvB,QAAS,CACP10xB,QAAS,OACTnC,WAAY,SACZ6C,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B+4C,aAAcn4C,EAAMZ,QAAQ,KAC5BmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BoT,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQsqP,SACnCvqP,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1C,eAAgB,CACdsB,aAAc,IAGlBqoL,WAAY,CACVr2L,OAAQ,OACRpf,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BxhB,YAAatmC,EAAMZ,QAAQ,IAE7By1xB,SAAS,2BACJ70xB,EAAM82C,WAAWmgC,SADd,IAENz4B,WAAY,EACZ6C,WAAY,IACZxH,cAAe,YACf0B,WAAY,SACZ36C,QAASZ,EAAMZ,QAAQ,GAAK,GAC5BknC,YAAatmC,EAAMZ,QAAQ,KAC3BmtC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BxhB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B0iF,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,MAEzC6qvB,UAAW,CACThuuB,KAAM,EACN3X,SAAU,SACVsL,aAAc,WACdc,WAAY,UAEd22oB,UAAW,CACT32oB,WAAY,SACZjV,YAAatmC,EAAMZ,QAAQ,IAG7B21xB,eAAgB,CACdjvuB,OAAQ9lD,EAAM8lD,OAAOsuI,QACrBznJ,UAAW3sC,EAAM6mD,QAAQ,IAE3BmuuB,YAAa,CACX5zvB,UAAWphC,EAAMZ,QAAQ,IAE3B61xB,UAAW,CACT7zvB,UAAWphC,EAAMZ,QAAQ,IAE3B81xB,YAAa,CACX5uvB,YAAatmC,EAAMZ,QAAQ,IAE7B+1xB,WAAY,CACVpqwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5BmrvB,UAAW,CACTh0vB,UAAWphC,EAAMZ,QAAQ,KAE3Bi2xB,UAAW,CACTvuuB,KAAM,EACNxgB,YAAatmC,EAAMZ,QAAQ,IAE7B2/R,UAAW,CACTxjP,WAAY,cAiBV+5uB,GAAkB/rM,2BAAe,gBAAGrrlB,EAAH,EAAGA,UAAH,OACrC,eAAC,KAAD,CAAmBA,UAAWA,EAAW+tC,SAAS,aAG9C8klB,GAAoBznC,4BAAgB,gBAAG5qlB,EAAH,EAAGA,KAAMsoV,EAAT,EAASA,UAAWhlT,EAApB,EAAoBA,SAAUhkC,EAA9B,EAA8BA,QAASntD,EAAvC,EAAuCA,EAAGm6S,EAA1C,EAA0CA,SAA1C,OACxC,uBAAK9sP,UAAWF,EAAQ42xB,QAAxB,UACE,eAACU,GAAD,CAAYp3xB,UAAWF,EAAQwiO,aAC/B,uBAAMtiO,UAAWF,EAAQ62xB,SAAzB,SAAoChk1B,EAAEuj1B,GAAgB11xB,EAAK71E,IAAI,YAC/D,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQ82xB,UAAnE,SAA+Ep2xB,EAAK71E,IAAI,WACxF,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAc7sB,UAAWF,EAAQk0rB,UAAnE,mBAAuG,aAArBxzrB,EAAK71E,IAAI,QAAyB,IAAM,IAA1H,OAA+H2r2B,GAA6B91xB,MAC5J,eAAC8gD,GAAA,EAAD,CACE3+H,KAAK,QACLmhH,SAAUA,EACV2H,QAAS,kBAAMqhN,EAASg8F,IACxB,aAAYn2Y,EAAE,6BAJhB,SAME,eAAC,KAAD,CAAWo7F,SAAS,kBAKpBgllB,GAAoB5nC,8BAAkB,gBAAGv9Z,EAAH,EAAGA,MAAO9tL,EAAV,EAAUA,QAAYu3xB,EAAtB,0BAC1C,sBAAKr3xB,UAAWF,EAAQ22xB,eAAxB,SACG7omB,EAAMpkQ,UAAUoG,KAAI,SAAC4wE,EAAMz9E,GAAP,OACnB,eAAC8vsB,GAAD,aAEE9vsB,MAAOA,EACP+la,UAAW/la,EACXy9E,KAAMA,EACNV,QAASA,GACLu3xB,GANN,UACU72xB,EAAK71E,IAAI,QADnB,YAC8B61E,EAAK71E,IAAI,SADvC,YACmD5H,YClL1Cu02B,GD6L0D,SAAC,GAMnE,IALL1pmB,EAKI,EALJA,MACAxrJ,EAII,EAJJA,SAII,IAHJ0B,gBAGI,aAFJ9V,eAEI,aADJupwB,yBACI,SACEz3xB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAA8B0Y,WAAe,CAC3C3D,MAAO,GACPplC,MAAO,GACPwE,KAAM,WAHR,mBAAO0w2B,EAAP,KAAgBC,EAAhB,KAKA,EAA4Bps0B,WAAe,CACzC3D,OAAO,EACPplC,OAAO,IAFT,mBAAOqxJ,EAAP,KAAe84pB,EAAf,KAIMhnwB,EAAYpa,UAAa,GAE/BA,aAAgB,WACd,OAAO,WACLoa,EAAU/W,SAAU,KAErB,IAGH,IAAMgp0B,EAAc,SAACC,EAAqCC,GACxD/xzB,QAAQC,QAAQs8D,EAASu1vB,IAAex6xB,MACtC,WACMy6xB,GAAanyzB,EAAU/W,SACzBkp0B,OAGJ,gBAIErvM,EAAgB,SAAC,GAAoE,IAAlE5F,EAAiE,EAAjEA,SAAUt6X,EAAuD,EAAvDA,SAC7Bs6X,IAAat6X,GAGjBqvkB,EAAY1n1B,iBAAOogD,qBAAUw9L,EAAMzoP,OAAQw9oB,EAAUt6X,MAGjDynC,EAAe,SAAC/sU,GACpB202B,EAAY9pmB,EAAMx+I,OAAOrsH,KAOrB8kuB,EAAoB,SAACpqe,GAAD,OAA8B,SAAC1vH,GACvD,IAAMq3O,EAAar3O,EAAMn6G,OAAOtxB,OAElB,UAAVm7P,GAAsBy1H,aAAkB9N,EAAY,MAGxDqyf,EAAW,2BAAKD,GAAN,kBAAgB/5mB,EAAQ2nH,KAElCqnc,EAAU,2BAAK94pB,GAAN,kBAAe8pG,GAAS2nH,EAAWhgP,aAiD9C,OACE,gBAAC,WAAD,WA5BIp3B,EACK,eAACytN,GAAA,EAAD,CAAgBz7O,UAAWF,EAAQ2iV,WAEzB,IAAf70J,EAAMjrQ,KAEN,sBAAKq9E,UAAWF,EAAQ02xB,SAAxB,SACE,eAACp2vB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAlC,SACGl6E,EAAE,sCAMT,eAACogrB,GAAD,CACEnlc,MAAOA,EACP9tL,QAASA,EACTntD,EAAGA,EACHmxF,SAAUA,EACVgpN,SAAUgD,EACV21V,UAAW8C,EACXtC,eAAe,EACfX,SAAS,IACTL,YAAanllB,EAAQ+2xB,iBAQtBU,GAAqB,eAACh6uB,GAAA,EAAD,CAASv9C,UAAWF,EAAQg3xB,cAClD,gBAACr3xB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASG,UAAWF,EAAQi3xB,UAA9D,UACE,eAAC32vB,EAAA,EAAD,CAAYE,QAAQ,WAAWzT,MAAM,gBAAgB7sB,UAAWF,EAAQk3xB,YAAxE,SACGrk1B,EAAE,2BAEL,eAACw3Y,GAAA,EAAD,CACEvnQ,KAAK,EACL,aAAW,OACXxtJ,KAAK,OACL9S,MAAOk12B,EAAQ1w2B,KACfs7G,SA1EiB,SAAC2rB,GACxB0puB,EAAW,2BAAKD,GAAN,IAAe1w2B,KAAMinI,EAAMn6G,OAAOtxB,UAoExC,SAOI,CAAC,SAAU,WAAY,OAAuCsN,KAAI,SAAC9I,GAAD,OAClE,eAAC63T,EAAA,EAAD,CAEEr8T,MAAOwE,EACPqnH,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtB/sB,QAAS,CAAEp4C,MAAOo4C,EAAQm3xB,YAC1Bvv0B,MAAO/U,EAAEuj1B,GAAgBpv2B,KAJpBA,WASb,gBAAC24E,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAWuB,KAAK,SAASpB,UAAWF,EAAQo3xB,UAA9E,UACE,eAACp6iB,EAAA,EAAD,CACE98O,UAAWF,EAAQq3xB,UACnBzv0B,MAAO/U,EAAE,mCACTrwB,MAAOk12B,EAAQ9v0B,MACf3yB,MAAO4+I,EAAOjsH,MACd06E,SAAUylnB,EAAkB,SAC5Bj+hB,UAAU,IAEZ,eAACkzH,EAAA,EAAD,CACE98O,UAAWF,EAAQq3xB,UACnBzv0B,MAAO/U,EAAE,mCACTrwB,MAAOk12B,EAAQl12B,MACfyS,MAAO4+I,EAAOrxJ,MACd8/G,SAAUylnB,EAAkB,SAC5B9/lB,UAAW0iS,KACX3ja,KAAK,SACL48G,WAAY,CACV6kN,aAAc8tiB,GAAiBmB,EAAQ1w2B,MACnC,eAAC88G,GAAA,EAAD,CAAgBC,SAAS,MAAzB,eACA,MAEN+lF,UAAU,IAEZ,eAACr+E,EAAA,EAAD,CACEvrC,UAAWF,EAAQ+gS,UACnBh0Q,MAAM,UACNm+K,UAAW,eAAC,KAAD,IACXv/J,QApGU,WAChB,IAAM/jF,EAAQ8v0B,EAAQ9v0B,MAAM09F,OACtByyuB,GAAgBnw0B,EAChBow0B,GAAgBN,EAAQl12B,MAC9B,GAAIu12B,GAAgBC,EAClBrrD,EAAU,CAAE/kxB,MAAOmw0B,EAAcv12B,MAAOw12B,QAD1C,CAIA,IAAMC,EAA0C/n1B,iBAAO,CACrD0X,QACA5gC,KAAM0w2B,EAAQ1w2B,KACdxE,MAAOi02B,GAAciB,EAAQ1w2B,KAAM0w2B,EAAQl12B,SAE7Co12B,EAAY9pmB,EAAM56P,KAAK+k2B,IAAY,WACjCN,GAAW,SAAC/o0B,GAAD,mBAAC,eAAkBA,GAAnB,IAA4BhH,MAAO,GAAIplC,MAAO,aAuFrDwhH,SAAUA,EALZ,SAOGnxF,EAAE,+BExUPql1B,G,4MACGpq0B,MAAmC,CACxC2jE,MAAM,EACN0mwB,iBAAkB,EAAKnn0B,MAAMmn0B,kB,EAmDvBC,kBAAoB,SAACD,GAC3B,EAAKzuvB,SAAS,CAAEyuvB,sB,EAGVhquB,WAAa,WACnB,EAAKzkB,SAAS,CACZjY,MAAM,EACN0mwB,iBAAkB,EAAKnn0B,MAAMmn0B,oB,EAIzBnquB,YAAc,WACpB,EAAKtkB,SAAS,CACZjY,MAAM,EACN0mwB,iBAAkB,EAAKnn0B,MAAMmn0B,oB,EAIzBE,aAAe,WACrB,EAAK3uvB,SAAS,CAAEjY,MAAM,IAAS,kBAAM,EAAKzgE,MAAM55B,OAAO,EAAK02B,MAAMqq0B,sB,4CAnEpE,WACE,MAAuBrx2B,KAAKkqC,MAApBgvC,EAAR,EAAQA,QAASntD,EAAjB,EAAiBA,EACjB,OACE,gBAAC,WAAD,WACE,eAAC44F,EAAA,EAAD,CACEjL,QAAQ,WACRzT,MAAM,UACN7sB,UAAWF,EAAQs4xB,gBACnB3svB,QAAS7kH,KAAKqnI,WAJhB,SAMGt7G,EAAE,oCAEL,gBAACiqS,GAAA,EAAD,CACErrN,KAAM3qG,KAAKgnC,MAAM2jE,KACjBg6B,QAAS3kI,KAAKknI,YACd5qD,SAAS,KACTu9B,WAAW,EACX3gC,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAC1B,kBAAgB,+BANlB,UAQE,gBAACltR,GAAA,EAAD,CACEn3Y,GAAG,+BACHyotB,mBAAmB,EACnBtwqB,UAAWF,EAAQisgB,YAHrB,UAKE,eAAC3re,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,0BAC5B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,gBAApC,SAAqDl6E,EAAE,oCAEzD,eAACkqS,GAAA,EAAD,CAAe78O,UAAWF,EAAQ2yiB,cAAlC,SACE,eAAC,GAAD,CACE7kX,MAAOhnQ,KAAKgnC,MAAMqq0B,iBAClB71vB,SAAUx7G,KAAKsx2B,kBACfX,mBAAmB,MAGvB,gBAACv6iB,GAAA,EAAD,CAAeh9O,UAAWF,EAAQkgnB,cAAlC,UACE,eAACz0kB,EAAA,EAAD,CAAQ1e,MAAM,UAAU4e,QAAS7kH,KAAKknI,YAAtC,SACGn7G,EAAE,2BAEL,eAAC44F,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAAS7kH,KAAKux2B,aAAzD,SACGxl1B,EAAE,wC,GA9CiB0Y,aCjCnB2s0B,GDkIAn8xB,kBACbgG,aArBa,SAACC,GAAD,MAA+B,CAC5Cs2xB,gBAAiB,CACf11xB,QAAS,aAEXwpnB,YAAa,CACXhpnB,SAAU,KAEZ6ogB,YAAa,CACX/pgB,QAAS,OACTK,cAAe,SACfy2C,cAAeh3C,EAAMZ,QAAQ,IAE/BuxiB,cAAe,CACb35f,cAAeh3C,EAAMZ,QAAQ,IAE/B8+mB,cAAe,CACbt9mB,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,QAMlCn7B,YAAgB,gBAFH81B,CAGbm8xB,IE1DIK,G,kDACJ,WAAYvn0B,GAAa,IAAD,8BACtB,cAAMA,IA4DAwn0B,gBAAkB,SAACz6oB,GACzB,EAAK/sL,MAAM8i0B,YAAY,eAAgB/1oB,GACvC,EAAK06oB,uBAAuB16oB,IA/DN,EAkEhB06oB,uBAAyB,SAAC9tvB,GAChC,MAII,EAAK35E,MAHPgtL,EADF,EACEA,SACAD,EAFF,EAEEA,aAGI26oB,EAAmB/tvB,GAAaozG,GAEtCtsL,EAPA,EAGEA,UAIO,IAAIwxL,MAAuB,CAClCntC,MAAOp8K,cAAI,CAAEskN,WAAUD,aAAc26oB,QA3EjB,E,yDAIxB,SAA6BvuvB,EAAgB54F,EAAgBon1B,GAC3D,IAAMC,GAA0Bp3qB,kBAAQ16L,KAAKkqC,MAAM+rL,YAAa5yG,EAAU4yG,aAI1E,OAHgCv7B,kBAAQ16L,KAAKkqC,MAAM+sL,aAAc5zG,EAAU4zG,eAG1C66oB,I,gCAGnC,SAA0BzzvB,EAAuC4yJ,EAAwCk6C,M,oBAMzG,WACE,MAKInrT,KAAKkqC,MAJPgvC,EADF,EACEA,QACA+8I,EAFF,EAEEA,YACAgB,EAHF,EAGEA,aAHF,EAIElrM,EAEF,OACE,gBAAC,WAAD,WACE,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ64xB,kBAJrB,SAMG97oB,EACGA,EAAYrtN,WAAWI,KAAI,SAACqhrB,EAAWlurB,GAAZ,OAC3B,eAAC612B,GAAA,EAAD,CAEEpqL,WAAYyC,EACZpzd,aAAcA,GAFT96N,MAKP,KAGN,eAAC08E,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ+4xB,sBAHrB,SAKGh8oB,GAAeA,EAAYl6N,KACxB,eAAC,GAAD,CACAs12B,iBAAkBp6oB,GAAgB7tM,iBAAO,IACzC9Y,OAAQtQ,KAAK0x2B,kBAEb,Y,GAvDYjt0B,aAoIXwwC,qBACbgG,aArKa,SAACC,GAAD,MAA+B,CAC5C62xB,kBAAmB,CACjBr2xB,eAAgB,YAElBu2xB,sBAAuB,CACrB72xB,QAAS,OACTM,eAAgB,gBAgKlBmjC,mBAVsB,SAAC73E,EAAYyF,GACnC,MAAO,CACLwpL,YAAal2E,YAAyB,CAAC,eAA1BA,CAA0C/4G,GACvDiwL,aAAcl3E,YAAyB,CAAC,gBAA1BA,CAA2C/4G,GACzDkwL,SAAUn3E,YAAyB,CAAC,YAA1BA,CAAuC/4G,OAZ1B,SAAC2D,GAC1B,MAAO,CACLA,WACAqi0B,YAAa,SAACn2mB,EAAen7P,GAC3BivC,EAASu/B,YAAO,QAAS2sL,EAAOn7P,QAcS,KAAM,CAAC6tC,YAAY,IAChE4V,YAAgB,gBAHH81B,CAIbw8xB,I,kFCnNa9tvB,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,oLACD,U,6IV+DQio2B,K,oBAAAA,E,6BAAAA,Q,KA+DU3k1B,iBAAO,CAC3BmrM,OAAQ,GACR29oB,UAAW,GACX981B,MAAO,KACPkiY,aAAa,EACb66d,eAAe,EACfC,UAAW,GACX5wmB,YAAa,GACbw+c,aAAc,KACdp+c,gBAAiB,GACjBywmB,cAAe,GACf51L,gBAAiB,GACjBtuqB,MAAO,GACPygrB,aAAc,GACd/qQ,gBAAiB,GACjByub,qBAAqB,EACrBC,cAAe,CACbxvvB,WAAW,EACX1xE,QAAS,IAEXqmqB,iBAAiB,EACjB90c,sBAAuB,GACvB4vmB,YAAa,CACX/swB,OAAQ,UACRiuN,OAAQ,MAEVu8f,sBAAsB,EACtBwiD,2BAA4B,CAC1B1vvB,WAAW,GAEbg1lB,6BAA8B,CAC5BtymB,QAAQ,EACR00J,MAAO,EACPo0lB,SAAU,GAEZmkB,gCAAiC,GACjCC,2BAA2B,EAC3BC,yBAA0B,KAC1Bp1J,iBAAkB,GAClBq1J,aAAc,CACZ73zB,KAAM,KACN+nE,WAAW,GAEb+vvB,2BAA2B,EAC3BC,cAAe,GACf73J,kBAAmB,GACnB83J,uBAAwB,OA9C1B,I,4gBWhIervvB,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mDACD,gB,iFCqYWm1E,gBArUA,SAACC,GAAD,MAA+B,CAC5Cy2M,eAAgB,CACd3sK,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,GACzBjmD,QAASZ,EAAMZ,QAAQ,IAAK,GAC5Bw8L,UAAW,QACXywC,UAAW,QAEb0rjB,gBAAiB,CACf32vB,UAAWphC,EAAMZ,QAAQ,MAE3B44xB,cAAe,CACb32uB,WAAY,KAEdw6tB,KAAM,CACJ9wvB,MAAO,QAET6oK,cAAe,CACbttJ,YAAatmC,EAAMZ,WAErBuvG,QAAS,CACPvtG,SAAU,IACV6qC,SAAU,IAEZgsvB,iBAAkB,CAChB52uB,WAAY,IACZ/a,YAAatmC,EAAMZ,QAAQ,KAE7B84xB,0BAA2B,CACzB59uB,UAAW,SACXhU,YAAatmC,EAAMZ,QAAQ,KAE7BkmC,OAAQ,CACN1kC,QAAQ,GAAD,OAAKZ,EAAMZ,UAAX,cAoSIW,EAhS+E,SAAC,GAUxF,IAAD,QA0BY,IAnChB/B,EASI,EATJA,QACAsnC,EAQI,EARJA,OACAs+P,EAOI,EAPJA,iBACA/7C,EAMI,EANJA,iBACA3/D,EAKI,EALJA,aACAnpI,EAII,EAJJA,aACA8iM,EAGI,EAHJA,oBACAs2iB,EAEI,EAFJA,gBACAx3tB,EACI,EADJA,WAEMlxG,EAA8B2F,wBAE9Bgj0B,EAAe5h0B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,WAClG4vM,EAA2Bn4R,sBAAYqR,iBACrCh3B,EAAM+xB,YAAe,gBAArB/xB,EAEF+U,EAAQ0/E,EAAOz8G,IAAI,WAAay8G,EAAOz8G,IAAI,kBAAoBy8G,EAAO5/F,MAAM,CAAC,cAAe,mBAAqB,GACjH2y1B,EAAwB/yvB,EAAO5/F,MAAM,CAAC,cAAe,gBAAkB,GACvE+/G,EAAcngB,EAAOz8G,IAAI,gBAAkBy8G,EAAO5/F,MAAM,CAAC,cAAe,iBAAmB,GAC3FyyuB,EAAmC,YAAvB7yoB,EAAOz8G,IAAI,QACvBgoH,EAAQsnoB,EAEV9ub,aAAW/jN,EAAOz8G,IAAI,iBAAmBy8G,EAAOz8G,IAAI,gBADpDwgU,aAAW/jN,EAAO5/F,MAAM,CAAC,cAAe,kBAAoB4/F,EAAOz8G,IAAI,iBAAmBy8G,EAAO5/F,MAAM,CAAC,cAAe,eAAiB4/F,EAAOz8G,IAAI,cAEjJyv2B,EAAkBznvB,GAAQA,EAAKj8G,MAAM,EAAG,IACxCmtI,EAtFyC,SAAAgtjB,GAC/C,IAAMwpK,EAAwB9twB,KAAQ55E,EAAE,kDACxC,MAAwC,YAAjCk+qB,EAAiBlmsB,IAAI,SACvBkmsB,EAAiBlmsB,IAAI,aAAe,IAAI4H,QAAO,SAAC+n2B,EAAMjkJ,GACvD,OAAQA,EAAK1rtB,IAAI,UAAY0rtB,EAAK7usB,MAAM,CAAC,cAAe,aAAe8y1B,EACnEA,EACAD,IACHxpK,EAAiBlmsB,IAAI,qBAAuB,IAC7CkmsB,EAAiBlmsB,IAAI,UAAYkmsB,EAAiBrprB,MAAM,CAAC,cAAe,WAAa,GA8EpE+y1B,CAAkCnzvB,GACjDozvB,EAAkBP,GAAmB7yvB,EAAOz8G,IAAI,kBAAoBi6T,aAAwBx9M,EAAQq7B,GACpGg4tB,EAAW,8BAAGrzvB,EAAO5/F,MAAM,CAAC,cAAe,cAAek+V,WAA/C,QACMt+P,EAAO5/F,MAAM,CAAC,cAAek+V,WADnC,QAEMt+P,EAAO5/F,MAAM,CAAC,cAAe,cAAe,mBAFlD,QAGM4/F,EAAO5/F,MAAM,CAAC,cAAe,YAC9C0uT,EAAG,iBAAGukiB,QAAH,IAAGA,OAAH,EAAGA,EAAa9v2B,IAAI,qBAApB,QAAqC,IACxC03oB,EAAYj7hB,EAAOz8G,IAAI,YACzB48V,GAAQ,EAERl7P,EAAS,GACR4tpB,IACH5tpB,EAAS++B,qBAAU,UAAChkB,EAAO5/F,MAAM,CAAC,cAAe,kBAA9B,QAA4C4/F,EAAOz8G,IAAI,WAC1E48V,EAAK,UAAGngP,EAAO5/F,MAAM,CAAC,cAAe,QAASk+V,EAAkB/7C,EAAkB,iBAA7E,QAA0FviN,EAAO5/F,MAAM,CAAC,QAASk+V,EAAkB/7C,EAAkB,WA+D5J,OACE,gBAAClqP,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMc,KAAK,SAASpB,UAAWF,EAAQsnC,OAAQ1mC,QAAQ,SAAxF,UACE,eAACjB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,KAAD,CAAiB0hC,MAAO,CAAEhgC,MAAO,UAAWi2C,OAAQ,UAAWjV,UAAW,OAASsV,KAAMyhoB,EAAY,QAAU,UAEjH,eAACz+b,GAAA,EAAD,CAAKxiT,EAAG,IACR,gBAACymE,EAAA,EAAD,CAAMW,WAAW,EAAM8hC,MAAO,CAAE+O,SAAU,UAA1C,UACE,gBAACxxC,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASV,QAAQ,gBAAgBb,WAAW,SAAxE,UACE,eAACgxC,GAAA,EAAD,CAASC,MAAOppF,GAAS,GAAzB,SACE,eAAC04E,EAAA,EAAD,CAAY+K,QAAQ,EAAMnrC,UAAWF,EAAQi6xB,iBAA7C,SAAgEry0B,MAG/DuytB,EAiBG,eAACppoB,GAAA,EAAD,CACA88J,aAAa,EACb58J,UAAU,cACVjxC,QAAS,CACPo2L,QAASp2L,EAAQy4M,gBAEnBznK,MACE,uBAAK9wC,UAAWF,EAAQ2wG,QAAxB,UACE,eAACrwE,EAAA,EAAD,CAAYpgC,UAAWF,EAAQg6xB,cAA/B,SAA+C1yvB,EAAOz8G,IAAI,YAD5D,OAGI03oB,QAHJ,IAGIA,OAHJ,EAGIA,EAAWzyoB,KAAI,SAAC0uH,EAAUv7H,GAAW,IAAD,MAC5B232B,EAAep8uB,EAAS3zH,IAAI,gBAAkB2zH,EAC9Cq8uB,EAAY,UAAGD,EAAalz1B,MAAM,CAAC,cAAek+V,WAAtC,QAA4Dg1f,EAAalz1B,MAAM,CAAC,cAAe,YAC3Goz1B,EAAU,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAchw2B,IAAI,aAC/Bkw2B,EAAI,iBAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAchw2B,IAAI,qBAArB,QAAsC,IAC1Cmw2B,EAASJ,EAAalz1B,MAAM,CAAC,QAASk+V,EAAkB/7C,EAAkB,UAC1Ez0B,EAAMwlkB,EAAa/v2B,IAAI,MACvBow2B,EAAiBL,EAAa/v2B,IAAI,iBAClCgslB,EAAUvrd,qBAAU,UAACsvuB,EAAa/v2B,IAAI,iBAAlB,QAA+B,IACnDwgY,EAAgBuve,EAAa/v2B,IAAI,SACjCqw2B,EAAeN,EAAa/v2B,IAAI,eAChCsw2B,EAAmB9viB,aAAWuviB,EAAa/v2B,IAAI,iBAAmB+v2B,EAAa/v2B,IAAI,cAEzF,OAAO,gBAAC80E,EAAA,EAAD,CAELW,WAAW,EACXE,UAAU,MACVc,KAAK,SACLpB,UAAWF,EAAQ+5xB,gBALd,UAOL,eAACp6xB,EAAA,EAAD,CACEO,UAAWF,EAAQ41L,cADrB,SAGE,eAAC,KAAD,CAAiBl9I,KAAM,MAAOx4C,UAAWF,EAAQ69wB,SAEnD,gBAACl+wB,EAAA,EAAD,CAAMW,WAAW,EAAMT,aAAa,SAASE,WAAW,SAASqiC,MAAO,CAAE+O,SAAU,UAApF,UACE,gBAACxxC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAApD,UACE,eAACyvC,GAAA,EAAD,CAASC,MAAOiqvB,GAAkB,GAAlC,SACE,eAAC36vB,EAAA,EAAD,CAAY+K,QAAQ,EAAMnrC,UAAWF,EAAQi6xB,iBAA7C,SACGgB,MAGL,eAAClqvB,GAAA,EAAD,CAASC,MAAO6le,EAAhB,SACE,eAACv2e,EAAA,EAAD,CAAY+K,QAAQ,EAAM7K,QAAQ,UAAlC,SAA6Cq2e,SAGjD,gBAACl3gB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAME,QAAQ,gBAA3C,UACE,eAACjB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B6qR,MAEjC,eAAC1rT,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B26vB,SAIjCH,GAAUH,EACR,gBAACl7xB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASa,SAAUo6xB,GAAUH,EAAe,WAAa,gBAAvG,UACE,eAACl7xB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAAS2B,GAAI,EAA3D,SAEIs5xB,EACI,uCACA,eAAC16vB,EAAA,EAAD,UAAY,eAACixe,GAAA,EAAD,CAAOxkf,MAAM,cACzB,eAACuT,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,uBACjC,eAACk+F,GAAA,EAAD,CAASC,MAAOn+F,EAAE,mCAAlB,SAAsD,eAACy+jB,GAAA,EAAD,SAEtD,OAIN3gR,GAA4BkqiB,EACxB,eAACl7xB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACA,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,UACgB3tF,EAAbio1B,EAAe,wBAA6B,0BAD/C,KAEKjo1B,EAAE,qBAFP,KAE8B,uBAAMuvF,MAAO,CAAErV,MAAOguwB,EAAO,EAAI,MAAQ,WAAzC,SAAuDA,SAGrF,QAIR,KAEJ,eAACp7xB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACqwC,GAAA,EAAD,CAASC,MAAOkqvB,GAAgB,GAAhC,SACE,eAAC56vB,EAAA,EAAD,UAAa46vB,aA5Dd9lkB,EAAM,IAAMnyS,SAxB3B,SA8FA,eAACu+H,GAAA,EAAD,CAAY3+H,KAAK,QAAjB,SACE,eAACu42B,GAAD,QA/GF,gBAACz7xB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,WAAWwhC,MAAO,CAAEhgC,MAAO,OAAQ0tO,WAAY,GAA5H,UAEEqqjB,GACA,uCACE,eAACppvB,GAAA,EAAD,CAASC,MAAyBn+F,EAAlB6n1B,EAAoB,mCAAwC,sCAA5E,SAEIA,EACI,eAAC,KAAD,CAAUzsvB,SAAS,QAAQlhB,MAAM,WACjC,eAAC,KAAD,CAAakhB,SAAS,QAAQlhB,MAAM,eAG5C,eAAC2uN,GAAA,EAAD,CAAKxiT,EAAG,SAGZ,eAAConG,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+BjU,UAuGrC8twB,GACA,eAAC16xB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,SACE,eAACgxC,GAAA,EAAD,CAASC,MAAOqpvB,GAAyB,GAAzC,SACE,eAAC/5vB,EAAA,EAAD,CAAY+K,QAAQ,EAAMnrC,UAAWF,EAAQk6xB,0BAA7C,SAAyEG,QAI/E,gBAAC16xB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAME,QAAQ,gBAA3C,UACE,eAACjB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+BujC,MAEjC,eAACpkE,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B85vB,SAIjC7ygB,GAASkzgB,EACP,gBAACh7xB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMX,WAAW,SAASa,SAAU6mR,GAASkzgB,EAAc,WAAa,gBAArG,UACE,eAACh7xB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMP,WAAW,SAAS2B,GAAI,EAA3D,SACG+lR,EACC,uCACE,eAACnnP,EAAA,EAAD,UAAY,eAACixe,GAAA,EAAD,CAAOxkf,MAAM,cACzB,eAACuT,EAAA,EAAD,CAAYE,QAAQ,UAApB,SAA+B3tF,EAAE,uBACjC,eAACk+F,GAAA,EAAD,CAASC,MAAOn+F,EAAE,mCAAlB,SAAsD,eAACy+jB,GAAA,EAAD,SAEtD,OAGJ3gR,GAA4BgqiB,EAC1B,eAACh7xB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,gBAAC4/B,EAAA,EAAD,CAAYE,QAAQ,UAApB,UAA+Bm6vB,EAAY9v2B,IAAI,aAAegoB,EAAE,yBAA2BA,EAAE,0BAA7F,MAA2HA,EAAE,qBAA7H,KAAoJ,uBAAMuvF,MAAO,CAAErV,MAAOqpO,EAAM,EAAI,MAAQ,WAAxC,SAAsDA,SAG5M,QAIN,KAEJ,eAACz2P,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACqwC,GAAA,EAAD,CAASC,MAAOyW,GAAe,GAA/B,SACE,eAACnnB,EAAA,EAAD,UAAamnB,WAInB,eAACi0L,GAAA,EAAD,CAAKxiT,EAAG,IACR,eAACymE,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACf,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAST,WAAW,SAASa,QAAQ,SAASwhC,MAAO,CAAEiW,OAAQ,QAAhG,SACE,eAACmJ,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QA9Od,SAACz8G,GAClBA,EAAE87G,kBACF,IAAMjjF,EAAKoytB,EAAY7mZ,KAAoBrlC,KACrCxrR,EAAU03sB,EAAY5mZ,KAA2Br8B,KAWvD,GATAzlS,EAAS,IAAI8J,KAAiC,CAC5CxT,KACA0a,aAEFhR,EAAS,IAAI0J,KAA6B,CACxCpT,KACA0pE,MAAM,MAGJ,OAAC6V,QAAD,IAACA,OAAD,EAACA,EAAQz8G,IAAI,YAAqC,aAAlB,OAANy8G,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,UAczB,OAANy8G,QAAM,IAANA,OAAA,EAAAA,EAAQv8G,IAAI,sBAA+C,aAAlB,OAANu8G,QAAM,IAANA,OAAA,EAAAA,EAAQz8G,IAAI,SAExD4mC,EAAS,IAAIsmD,MAAqB,CAChCi8Q,UAAW1sP,EAAOz8G,IAAI,MACtBujU,UAAW,SAACslC,GACVjiU,EAAS,IAAI4J,KAA+B,CAC1CtT,KACAiJ,MAAO,CACLumS,YAAam8B,UAOrBjiU,EAAS,IAAI4J,KAA+B,CAC1CtT,KACAiJ,MAAO,CACLumS,YAAajwN,EACbu8M,8BAjC2D,CAC/D,IAAMrG,EAAgBl2M,EAAOz8G,IAAI,kBAAoBy8G,EAAO5/F,MAAM,CAAC,cAAe,kBAClF+pB,EAAS,IAAIkmD,KAAyB,CACpC6lO,gBACA4Q,UAAW,SAACs2C,GACVjzU,EAAS,IAAI4J,KAA+B,CAC1CtT,KACAiJ,MAAO,CACLumS,YAAamtC,EACb7gD,8BA8BV,IAAMw3iB,EAAQjB,GAAgB9xf,KAC9B72U,EAAS,IAAIg1L,KAAqB,CAAE40oB,QAAOnxmB,eAAcnpI,kBACpDq5uB,QAAiCx32B,IAAjBm+H,GACnBtvF,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,qBAAuDnpI,EAAvD,UAA6Es6uB,KAsLxF,SACE,eAACnqa,GAAA,EAAD,gBChFG56U,GA/SGJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9Cu0C,mBAAoB,CAClB,YAAa,CACX9zE,QAAS,SAGb64zB,0BAA2B,CACzB14xB,QAAS,SACTuuC,SAAU,QAEZ2G,SAAU,CACR,aAAc,CACZz1C,OAAQ,IAGZ2yuB,sBAAuB,CACrBpyuB,QAAS,UAEXqyuB,YAAa,CAEXtzrB,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MACxCuC,aAAc,MACdi9M,eAAgB,QAChBr6M,SAAU,UA6BZoqvB,oCAAqC,CACnC15uB,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,MACjC,OAAQ,CACNlhB,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,OAAQ,CACN0C,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,2CAA4C,CAC1Csc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,OAE/C,2CAA4C,CAC1Csc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,QAGjDwvvB,kDAAmD,CACjD35uB,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,MACjC,OAAQ,CACNlhB,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,OAAQ,CACN0C,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,iFAAkF,CAChFsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,OAE/C,iFAAkF,CAChFsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,QAGjDyvvB,4DAA6D,CAC3D55uB,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,MACjC,OAAQ,CACNlhB,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,OAAQ,CACN0C,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,iFAAkF,CAChFsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,OAE/C,iFAAkF,CAChFsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,QAGjD0vvB,yCAA0C,CACxC,OAAQ,CACNhtvB,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,OAAQ,CACN0C,aAAa,aAAD,OAAe1sC,EAAM+pC,QAAQC,KAAK,OAEhD,wBAAyB,CACvBsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,OAE/C,wBAAyB,CACvBsc,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,QAGjDgivB,cAAe,CACblivB,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCwjB,YAAa,EACb7U,aAAc,GAEhBghvB,mBAAoB,CAClBhhvB,aAAc,EACdkH,WAAY,WAEd+5uB,uCAAwC,CACtCjhvB,aAAc,EACdkH,WAAY,WAEdg6uB,oBAAqB,CACnBv5xB,SAAU,QACVu/C,WAAY,WAEdi6uB,YAAa,CACXx5xB,SAAU,QACVu/C,WAAY,UACZyG,YAAY,aAAD,OAAetmD,EAAM+pC,QAAQC,KAAK,OAE/C+vvB,oBAAqB,CACnB35xB,MAAO,OACPy/C,WAAY,UACZlH,aAAc,GAEhB3G,QAAS,CACP,UAAW,CACTA,QAAS,KAEX,UAAW,CACT,UAAW,CACTA,QAAS,KAIfgovB,gBAAiB,CACf,UAAW,CACThovB,QAAS,MAGbiovB,aAAc,CAGZ75xB,MAAO,SAIT85xB,cAAe,CACbn4vB,SAAU,SACVqX,IAAK,EACL0M,OAAQ,IACRhc,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCvX,OAAQ,IAEV00gB,SAAU,CACRh0gB,WAAY,EACZC,cAAe,GAEjBmjvB,cAAe,CACb35xB,eAAgB,YAElB45xB,eAAgB,CACd,uBAAwB,CACtBrvwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,UAG9BowvB,0BAA2B,CACzB,uBAAwB,CACtBtvwB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5B,qBAAsB,CACpBH,gBAAiB,0BAGrBwwvB,OAAQ,CACNvvwB,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,KAC3Bw5C,QAASZ,EAAMZ,QAAQ,GAAK,GAC5B4tC,WAAY,EACZmL,aAAc,EACd5L,aAAc,GACdoT,OAAQ,aAEV46uB,QAAS,CAIPtuvB,SAAU,OACVlhB,MAAO,QAETyvwB,iBAAkB,CAChBt6xB,QAAS,cACTnC,WAAY,SACZygD,WAAY,GAEdi8uB,cAAe,CACbr6xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQ+d,UAAU,MAC7Cvb,aAAc,cACdxhB,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/B,UAAW,CACT3d,OAAQ,UACR0V,WAAY7/C,EAAM+pC,QAAQ+d,UAAU,OAGxC4yuB,+BAAgC,CAC9Bt6xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQ+d,UAAU,MAC7Cvb,aAAc,cACdxhB,MAAO,QACP80B,WAAY7/C,EAAM+pC,QAAQ+d,UAAU,KACpC,UAAW,CACT3d,OAAQ,YAGZwwvB,qBAAsB,CACpBv6xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,sBACPpT,aAAc,cACdxhB,MAAO,QACP80B,WAAY,YACZvZ,YAAa,EACb0L,QAAS,KAEX4ovB,gBAAiB,CACfx6xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3CsC,aAAc,cACdxhB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,KAC7B,UAAW,CACTE,OAAQ,UACR0V,WAAY7/C,EAAM+pC,QAAQE,QAAQ,OAGtC4wvB,iCAAkC,CAChCz6xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQE,QAAQ,MAC3CsC,aAAc,cACdxhB,MAAO,QACP80B,WAAY7/C,EAAM+pC,QAAQE,QAAQ,KAClC,UAAW,CACTE,OAAQ,YAGZ2wvB,uBAAwB,CACtB16xB,MAAO,GACPi2C,OAAQ,GACRsJ,OAAO,sBACPpT,aAAc,cACdxhB,MAAO,QACP80B,WAAY,YACZ7S,WAAY,EACZgF,QAAS,KAEX+ovB,WAAY,CACV,UAAW,CACT5wvB,OAAQ,YAGZ4osB,YAAa,CACX7yuB,QAAS,OACT02C,SAAU,gBACVp2C,eAAgB,WAChBzC,WAAY,YAEdi9xB,aAAc,CACZ56xB,MAAO,OACPE,SAAU,QAEZomxB,WAAY,CACV58uB,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,IACzC0F,YAAaxtD,EAAMZ,UACnBq7C,aAAc,WACdtL,SAAU,SACVlD,SAAU,UAEZ68M,SAAU,CACR/9N,MAAO,OACPgX,SAAU,WACVqX,IAAK,OAEPzH,WAAY,CACV5mB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,U,gBC/O3BgxvB,GAAsB,kBACtBC,GAAqB,iBAErBC,GAAM,SAAC,GAaD,IAZVr/uB,EAYS,EAZTA,QACAxb,EAWS,EAXTA,SACA86vB,EAUS,EAVTA,QAUS,IATTtrvB,mBASS,MATK,GASL,EARTo4I,EAQS,EARTA,aACAnpI,EAOS,EAPTA,aACAs8uB,EAMS,EANTA,wBACAv8uB,EAKS,EALTA,cACA+iM,EAIS,EAJTA,oBACAhD,EAGS,EAHTA,mBAEAG,GACS,EAFTikD,eAES,EADTjkD,yBAEMvvR,EAAW2F,wBACXupR,EAAcnoR,sBAAY2V,gBAC1Bw0F,EAAanqG,sBAAY+U,iBACzBoxE,EAAWnmF,sBAAYwqN,iBACvBs6mB,EAAuB9k0B,sBAAY0qN,gBACnCq6mB,EAAoB/k0B,sBAAYyqN,iBAChCu6mB,EAAgChl0B,sBAAY2qN,iBAC5Cs6mB,EAAoCjl0B,sBAAYg5N,gBAEtD,EAA8BjmO,YAAe,GAA7C,mBAAO2iE,EAAP,KAAgBonR,EAAhB,KACA,EAAkC/pV,WAAe0x0B,IAAjD,mBAAOS,EAAP,KAAkBC,EAAlB,KACMC,EAAqBj9iB,GAAe+8iB,IAAcR,GAClDl9xB,EAAUs2C,KACVkzP,EAAkBhxU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,qBAC3E2/D,EAAmB0yG,aAAoB/yD,GACrC32V,EAAM+xB,YAAe,gBAArB/xB,EACFmka,EAAiBx+Y,sBAAY24N,aAAkB,CAAC,YAChDipmB,EAAe5h0B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,WAElGg+kB,EAAgBvmqB,sBAAYgxN,eAC5Bq0mB,EAA8Brl0B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,qBACjH+8uB,EAA2Btl0B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,kBAC9GmnP,EAAoB1vU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,uBAEvGz8B,GAAS9rD,sBAAY24N,aAAkB,CAAC,uBACxC4smB,GAAwBvl0B,sBAAYoxN,YAAgCtlK,IAAyB,OAAjB4jR,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBr9W,IAAI,mBAAoBi2H,IACvHk9uB,GAAmB,OAAGD,SAAH,IAAGA,QAAH,EAAGA,GAAuBju2B,KAAI,SAACk6P,GAAD,OAAoBA,EAAen/P,IAAI,mBACxFoz2B,GAA8BD,GAAsBr/uB,EAASvsH,OAAO4r2B,IAAuBr/uB,EAC3Fu/uB,GAA6Bn/J,IAAkBs+J,GAA2Bl52B,QAAQ052B,GAA4D,IAA7BC,GACjHv8J,GAAgB/oqB,sBAAYo6N,gBAQ5BurmB,GAA0BzmrB,oBANT,SAAA1yD,GACrBvzF,EAAS,IAAIohD,MAA+B,CAAEyxC,WAAYU,KACtD27L,GACFlvR,EAAS,IAAI0hD,MAAqC,CAAEmxC,WAAYU,OAGX,KAEnDo5uB,GAAgB7y0B,eAAkB,SAAC0iG,EAAOzrI,GAC9C8yX,GAAW,GACXhzQ,EAAS2rB,EAAOzrI,GAAO,kBAAMu8sB,GAAiB72V,IAAsBm1f,EAA0BgB,GAA6B772B,GAAS,UACnI,CAAC8/G,EAAUy8lB,EAAe72V,EAAmBm1f,IAEhD9x0B,aAAgB,WACTky0B,GACHnof,GAAW,KAEZ,CAACmof,IAEJ,IAAMY,GAA+B,SAAC772B,GACpCivC,EAAS,IAAIk1L,KAAoB,CAAEnkO,QAAO0nQ,eAAcnpI,mBAyBpDu9uB,GAAgB,kBAAM,gBAAC3+xB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAA5B,UAC1B,eAACmqC,EAAA,EAAD,CACErJ,MAAO,CAAEuf,OAAQ,OAAQpT,aAAc,GACvC/N,QAAQ,WACRzT,MAAM,UACN4T,WAAW,EACXgL,QAAS,SAACz8G,GACRA,EAAE87G,kBACF97G,EAAEg5H,iBACF,IAAMmzuB,EAAQjB,SAAkCx32B,IAAjBm+H,EAA6B,KAAOunP,MACnE72U,EAAS,IAAIg1L,KAAqB,CAAE40oB,QAAOnxmB,eAAcnpI,kBACpDq5uB,QAAiCx32B,IAAjBm+H,GACnBtvF,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,qBAAuDnpI,EAAvD,UAA6Es6uB,IAE9F5p0B,EAAS,IAAI8J,KAAiC,CAC5CxT,GAAIkmS,KACJxrR,QAASy0R,QAEXzlS,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIkmS,KACJx8N,MAAM,KAGJoyN,GACFpyR,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIkmS,KACJj9R,MAAO,CACL6yR,sBACAhD,qBACAG,+BA5BV,SAkCGnuS,EAAE,mCAGFwq1B,GACD,eAAC5xvB,EAAA,EAAD,CACErJ,MAAO,CAAEuf,OAAQ,OAAQpT,aAAc,GACvC/N,QAAQ,WACRzT,MAAM,UACN4T,WAAW,EACXgL,QAAS,WACP,IAAM0vvB,EAAQjB,SAAkCx32B,IAAjBm+H,EAA6B,KAAOunP,MACnE72U,EAAS,IAAIg1L,KAAqB,CAAE40oB,QAAOnxmB,eAAcnpI,kBACpDq5uB,QAAiCx32B,IAAjBm+H,GACnBtvF,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,qBAAuDnpI,EAAvD,UAA6Es6uB,IAE9F5p0B,EAAS,IAAI8J,KAAiC,CAC5CxT,GAAIurU,KACJ7wT,QAAS8wT,QAGX9hU,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIurU,KACJ7hQ,MAAM,MAlBZ,SAsBG5+E,EAAE,sCAOH0r1B,GAAoB,SAACrv2B,GACrByxT,GAAezxT,EAAE06S,SAAqB,cAAV16S,EAAE9D,KAAiC,eAAV8D,EAAE9D,OACzD8D,EAAEg5H,iBACFy1uB,GAAa,SAACv/1B,GAAD,OAAWA,IAAS6+1B,GAAsBC,GAAqBD,QAIhF,OAAO,eAACp7c,GAAA,EAAD,aACLn2R,OAAQ,SAACx8H,GACHku2B,EAAQxu0B,SACVwu0B,EAAQxu0B,QAAQ4iC,SAGpB1+B,QAtGI8q0B,EACKJ,EAAgC,GAAKF,EAAqB5z2B,UAG/D6z2B,EACK,GAGJx+J,IAAkBs+J,GAA4B97J,GAC1C08J,GAA4Bv02B,UAGjC2z2B,EACKY,GACJv02B,UACA2I,QAAO,SAAAkqE,GAAC,MAAsB,YAAlBA,EAAE1xE,IAAI,WAGhB8zH,EAASj1H,UAqFhBy4Z,cAAe,eAACxiV,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASwhC,MAAO,CAAEx/B,QAAS,SAA1D,SAAsE/vD,EAAE,2BACvFq7E,QAAS0vwB,EAAqBJ,EAAgCD,EAC9Dv5vB,UAAW7/G,QAAQ2tH,IAAgBosvB,GACnCn8c,iBAAkB59Z,QAAQ2tH,KAAiBgM,EAAQjzH,IAAI,oBAAoB,OAACq9W,QAAD,IAACA,OAAD,EAACA,EAAmBr9W,IAAI,kBACnGkzW,cAAe,SAAAp/V,GAAC,OAAIA,GACpBwpH,eAAgB,SAAC7gB,GAAD,OAAYA,EAAOz8G,IAAI,WAAay8G,EAAOz8G,IAAI,kBAAoBy8G,EAAO5/F,MAAM,CAAC,cAAe,mBAAqB,IACrI46F,SAAU87vB,GACV572B,MAAOs7H,EACP1b,MAAO,CAAEhgC,MAAO,QAChBpC,QAAS,CACP0oxB,WAAY1oxB,EAAQ0oxB,YAEtBp/uB,cAAe,SAACp6G,EAAQ6N,EAAKs1G,GAC3B+qvB,EAAQxu0B,QAAQ+jF,KAAO,GACR,UAAXN,GACF8rvB,GAAwBph2B,GAEX,UAAXs1G,GACF5gF,EAAS,IAAIwzL,KAAwB,CAAEilC,eAAcnpI,mBAGzD4iN,YAAa,SAAClqS,GAAD,OACX,eAACs3E,GAAA,EAAD,CACEC,MACE8M,EAAO,UACCA,EAAQjzH,IAAI,cAAgBizH,EAAQjzH,IAAI,cAAgB,IADzD,OAC+DizH,EAAQjzH,IAAI,eAAiB,MAAQizH,EAAQjzH,IAAI,eAAiB,IACpI,GAJR,SAOE,eAACmyT,EAAA,EAAD,2BACMvjR,GADN,IAEEknE,WAAW,EACX0nN,SAAU+0iB,EACVn4gB,WAAW,EACXh9N,UAAWs2uB,GACX99vB,WAAU,2BACLhnE,EAAOgnE,YACP28vB,EAAQxu0B,QAAQ+jF,KAAO,CAAEnwH,MAAO462B,EAAQxu0B,QAAQ+jF,MAAS,IAE9D/O,WAAU,uCACLnqE,EAAOmqE,YACP1V,GAAWuvwB,EACV,CACAh1iB,aAAc,eAACC,EAAA,EAAD,CAAkB7lU,KAAK,MAAMg7kB,eAAe,KACxD,IALE,IAMRz7d,MAAO,CACLmb,WAAY,SACZpM,SAAU,UACVsL,aAAc,UAGlB3K,YAAaA,QAInBwtM,aAAc,SAACh4M,GAAD,OACZ,eAAC,GAAD,CACEA,OAAQA,EACRs+P,iBAAkBoxE,EAAensb,IAAI,MACrCg/T,iBAAkBA,EAClB3/D,aAAcA,EACdnpI,aAAcA,EACd8iM,oBAAqBw5iB,EAA0Bx5iB,EAAsB,KACrEs2iB,gBAAiByD,EACjBj7tB,WAAYA,KAGhBy/Q,YAAa,gBAACziV,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,SAASwhC,MAAO,CAAEx/B,QAAS,SAA9E,UAAyF,eAAC8lP,EAAA,EAAD,CAAkB7lU,KAAK,QAAQ,eAAC64T,GAAA,EAAD,CAAKxiT,EAAG,MAAS2Z,EAAE,6BACxJ44G,QAAS,WA1NgB2xuB,EAAQxu0B,QAAQ+jF,KAAO,GA4N9CgrvB,EAAaV,KAEf/0iB,eAAgB,YAA6B,IAA1B96R,EAAyB,EAAzBA,SAAa4D,EAAY,mBAC1C,OAAO,gBAAC2nF,GAAA,EAAD,2BAAW3nF,GAAX,IAAkBs3R,YAAa,SAAAp5T,GAAC,OAAIA,EAAEg5H,kBAAkB9lB,MAAO,CAAEhgC,MAAO,OAAQ6rC,SAAU,OAA1F,UAEH0yM,GACA,gBAAC7H,GAAA,EAAD,CACEt2T,MAAOk72B,EACPp7vB,SAAU,SAACpzG,EAAG1M,GAAJ,OAAcm72B,EAAan72B,IACrCu2T,eAAe,UACfC,UAAU,UACVx4M,QAAQ,YACR,oBAAkB,+BANpB,UAQE,eAACy4M,GAAA,EAAD,CAAKz2T,MAAOy62B,GAAqBr10B,MAAO/U,EAAE,mCAC1C,eAAComS,GAAA,EAAD,CAAKz2T,MAAO062B,GAAoBt10B,MAAO/U,EAAE,qCAG5Cua,GACCww0B,GAAsB,eAACU,GAAD,SAG5B/z1B,QAAS,SAAC+8F,GAAD,OACPs2vB,EAAqB,KACrB7+J,GAAiBrlsB,MAAI9N,MAAM07G,QAA6C1kH,IAAnC0kH,EAAOz8G,IAAI,yBAAgEjI,IAA5B0kH,EAAOk3vB,kBAAkC3r1B,EAAE,qDAAuDA,EAAE,8CAAgD,OAEtOuq1B,EAAQxu0B,QAAQ+jF,KAAO,CAAEpJ,WAAY6zvB,EAAQxu0B,QAAQ+jF,MAAS,MAGzD8rvB,GAAKlz0B,OAAW4x0B,I,kDC7TvBuB,GAAe,SAACpv1B,GACpB,IACE,IAAM6oS,EAAO1iT,KAAK6tC,MAAMh0B,GACxB,GAAoB,kBAAT6oS,GAA8B,OAATA,EAC9B,OAAOA,EAET,MAAOjpT,GACP,MAAO,GAET,MAAO,IAybHyv2B,GAAiB,SAAC78zB,EAAMuxU,GAC5B,GAAIvxU,EAAM,CACR,IAAM2xU,EAAS5vX,KAAKy1O,IAAI,GAAI+5I,GAC5B,OAAOxvX,KAAKo/E,MAAMx6E,OAAOq5C,GAAQ2xU,GAAUA,EAE3C,OAAO,MAyDLmrf,GAAwB,SAACtv1B,GAC7B,IAAKA,EACH,OAAO,EAET,IAAM0wF,EAAMv3G,OAAO6mB,GACnB,OAAe,OAARA,GAAwB,KAARA,IAAe4zB,MAAM88D,IAAQA,EAAM,GAmJtD6+vB,GAAe,yCAAG,WAAOC,EAAYvjM,GAAnB,gBAAA9uqB,EAAA,yDAClBskG,EAAO,IACPwqkB,EAFkB,gCAGPujM,EAAWnwwB,QAAQ4skB,EAAc,CAAEnukB,QAAS,OAAQC,SAAU,UAAWo6O,SAAS,EAAM/3N,gBAAgB,EAAMC,WAAW,EAAMC,WAAW,IAHnI,OAGpB7e,EAHoB,uCAKfA,GALe,2CAAH,wDAmGNimT,GAxBW,CACxB+nd,eAztBqB,SAACjhpB,GACtB,OAAQA,GAAc,IAAIx4F,OAAO5lD,QAAQ,OAAQ,IAAIx/B,eAytBrD8+zB,0BAttBgC,SAACh7f,GACjC,IAAIi7f,EAAgB,EAEpB,GAAIj7f,EAAqB,CACvB,IAAMk7f,EAAcl7f,EAAoBvxW,QAAO,SAACutI,EAAK6sO,GAAqB,IAAD,EACvE,IAAKA,IAAoBA,EAAgBpB,WACvC,OAAOzrO,EAET,MAA2F6sO,EAAgBpB,WAApG1jV,EAAP,EAAOA,GAAIi9U,EAAX,EAAWA,UAAW0G,EAAtB,EAAsBA,UAAWC,EAAjC,EAAiCA,oBAAqBpC,EAAtD,EAAsDA,aAAcyC,EAApE,EAAoEA,oBACpE,IAAKhH,IAAc0G,EACjB,OAAO1rO,EAET,IAAM50I,EAAM45W,EAAY,IAAM0G,EACzB1rO,EAAIj1I,IAAIK,IACX40I,EAAIxxI,IAAIpD,EAAK,CACX28B,KACA2jV,YACAC,sBACA3G,YACAuE,eACAyC,sBACAmzf,QAAQ,EACRC,iBAAkB,KAGtB,IAEkD,EACa,EAHzD/za,EAAU4za,IACZI,EAAqB,IACzB,OAAIxyf,QAAJ,IAAIA,GAAJ,UAAIA,EAAiByyf,kBAArB,aAAI,EAA6BC,oBACZ,OAAf1yf,QAAe,IAAfA,GAAA,UAAAA,EAAiByyf,kBAAjB,eAA6BC,gBAAgB522B,QAAS,IACxD022B,EAAkB,OAAGxyf,QAAH,IAAGA,GAAH,UAAGA,EAAiByyf,kBAApB,aAAG,EAA6BC,gBAAgB,GAAG5iN,eAqBzE,OAlBA38gB,EAAIn1I,IAAIO,GAAMg02B,iBAAiBls2B,KAAK,CAClC60B,GAAI8kV,EAAgB9kV,GACpBi9U,YACA0G,UAAWmB,EAAgBnB,UAC3B1rP,cAAewhM,KAAiBC,iBAAjB,OAAkCorD,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAiB1uP,SAClE4B,UAAW8sP,EAAgB9sP,UAC3BmrM,UAAW2hD,EAAgB3hD,UAC3BnuI,WAAY8vL,EAAgB9vL,WAC5ByirB,SAAU3yf,EAAgB2yf,SAC1BjkM,aAAc1uT,EAAgB0uT,aAC9B8jM,qBACA53uB,YAAaolP,EAAgBplP,YAC7B8gP,KAAMsE,EAAgBtE,KACtBy4T,uBAAwBn0T,EAAgBm0T,uBACxC/rqB,MAAO,GACPo2b,YAGKrrT,IACN,IAAItmI,KACHgB,EAAgCnS,MAAMuN,KAAKop2B,EAAYjt2B,UAK3D,OAJAyI,EAASA,EAAO5K,KAAI,SAAC4wE,EAAMz9E,EAAO0R,GAChC,IAAMwq2B,EAASl82B,IAAU0R,EAAIhM,OAAS,GAAK+3E,EAAKskS,YAAcrwW,EAAI1R,EAAQ,GAAG+hX,UAC7E,OAAO,2BAAItkS,GAAX,IAAiBy+xB,cAInB,MAAO,IA4pBTM,wBAxpB8B,SAACz7f,GAa/B,OAZwB9+W,OAAO+M,OAC7B+xW,EAAoBvxW,QAAO,SAACutI,EAAD,GAA0B,IAAlByrO,EAAiB,EAAjBA,WACjC,GAAIA,EAAY,CACd,IAAOzG,EAA2DyG,EAA3DzG,UAAWuE,EAAgDkC,EAAhDlC,aAAcmC,EAAkCD,EAAlCC,UAAWC,EAAuBF,EAAvBE,oBACtC3rO,EAAIglO,KACPhlO,EAAIglO,GAAa,CAACA,YAAWuE,eAAc5qP,SAAU,KAEvDqhB,EAAIglO,GAAWrmP,SAASzrH,KAAK,CAACw4W,YAAWC,wBAE3C,OAAO3rO,IACN,MA8oBL0/tB,2BAzoBiC,SAAC51f,GAA8B,IAAD,IACzDD,GAA8C,OAAxBC,QAAwB,IAAxBA,GAAA,UAAAA,EAA0BivC,qBAA1B,mBAAyCh9L,aAAzC,eAAgD4jpB,sBAAuB,GAC7F37f,EAA0C,OAAG8F,QAAH,IAAGA,OAAH,EAAGA,EAA0BE,oBACzE41f,EAAiB,GACrB,UAAI91f,QAAJ,IAAIA,OAAJ,EAAIA,EAA0BuzT,cAAe,CAAC,IAAD,EACrCA,EAAgB5nqB,KAAK6tC,MAAL,OAAWwmU,QAAX,IAAWA,OAAX,EAAWA,EAA0BuzT,gBAC1C,OAAbA,QAAa,IAAbA,GAAA,UAAAA,EAAeuiM,sBAAf,eAA+Bj32B,QAAS,IAC1Ci32B,EAAc,OAAGviM,QAAH,IAAGA,OAAH,EAAGA,EAAeuiM,gBAwDpC,OArDwB162B,OAAO+M,OAAP,OACtB+xW,QADsB,IACtBA,OADsB,EACtBA,EAAqBvxW,QAAO,SAACutI,EAAK6sO,GAAqB,IAAD,YAC9C7H,EAAS,OAAG6H,QAAH,IAAGA,GAAH,UAAGA,EAAiBpB,kBAApB,aAAG,EAA6BzG,UAC3CC,EAAc,OAAG4H,QAAH,IAAGA,GAAH,UAAGA,EAAiBpB,kBAApB,aAAG,EAA6BxG,eAClD,IAAkB,QAAd,EAAA26f,SAAA,eAAgBj32B,QAAS,EAAG,CAC9B,IAAMk32B,EAAah71B,IAAEkF,SAASlF,IAAErS,QAAQot2B,IAAiB,SAACl/xB,GACxD,OAAW,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAMylS,iBAAkB0G,EAAgB9kV,IAAM24C,EAAKskS,YAAcA,MAE1E,OAAI66f,QAAJ,IAAIA,OAAJ,EAAIA,EAAY56f,kBACdA,EAAc,OAAG46f,QAAH,IAAGA,OAAH,EAAGA,EAAY56f,gBAGjC,IAAM66f,EAAiBj2f,EAAoBphW,MAAK,SAAAnU,GAAC,OAAK,OAADA,QAAC,IAADA,OAAA,EAAAA,EAAG0wW,aAAcA,KACjEhlO,EAAIglO,KACPhlO,EAAIglO,GAAa,CACfA,YACAuE,aAAY,OAAEu2f,QAAF,IAAEA,OAAF,EAAEA,EAAgBv2f,aAC9BgiU,aAA2B,OAAdu0L,QAAc,IAAdA,OAAA,EAAAA,EAAgBv0L,cAAe,GAC5Cw0L,YAAa,KAGjB,IAAI9zf,EAAgB,KAChBY,EAAe,gBACjBZ,EAAgByyf,GAAa7xf,EAAe,gBAE9C,IAAImzf,EAAiB,GACjBC,EAAwB,GACxBC,EAAiB,GAuBrB,OAtBc,OAAdJ,QAAc,IAAdA,GAAA,UAAAA,EAAgBK,uBAAhB,SAAiC3s2B,SAAQ,SAACsqH,GACxC,IAAW,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASmnP,kBAAmBA,EAI9B,OAHAg7f,EAAwBnivB,EAAQ2J,aAAe,GAC/Cy4uB,EAAiBpivB,EAAQyqP,MAAQ,QACjCy3f,GAAwB,OAAPlivB,QAAO,IAAPA,OAAA,EAAAA,EAASuyd,cAAe,OAK7Crwc,EAAIglO,GAAW+6f,YAAY7s2B,KAAK,CAC9B6tH,aAAc,EACd07iB,aAAY,OAAE5vT,QAAF,IAAEA,GAAF,UAAEA,EAAiBpB,kBAAnB,aAAE,EAA6B1jV,GAC3Cq40B,aAAY,OAAEvzf,QAAF,IAAEA,GAAF,UAAEA,EAAiBpB,kBAAnB,aAAE,EAA6BC,UAC3Cs0f,iBACAC,wBACAC,iBACAG,2BAA4Bxzf,EAAgBplP,YAC5C64uB,oBAAqBzzf,EAAgBtE,KACrCg4f,aAAc/+iB,KAAiBC,iBAAjB,OAAkCorD,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAiB1uP,SACjE8tP,kBAGKjsO,IACN,MA6kBLwguB,kCAxkBwC,SAACx8f,GACzC,IAAIy8f,EAAiB,GAOrB,OANAz8f,EAAoBxwW,SAAS,SAACy2W,GAC5B,GAAIA,EAAkB,cAAmB,CACvC,IAAMgC,EAAgByyf,GAAaz0f,EAAkB,eACrD,OAAOw2f,EAAiBv72B,OAAO+M,OAAOg6W,GAAen8W,KAAI,SAAA4wE,GAAI,OAAIA,EAAI,YAGlE+/xB,GAikBPC,eA9jBqB,SAAC5y0B,EAAOE,GAC7B,IAAM2y0B,EAAc,CAClB5gvB,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,EACZyirB,SAAU,KACVvq2B,MAAO,CACL8qH,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,KACZyirB,SAAU,KACV11lB,WAAW,IAGT82lB,EAAc/71B,IAAEha,IACpBga,IAAE4D,KAAKqlB,EAAO,CAAE/F,GAAIiG,EAAQ6y0B,QADV,mBAGlB,IACAp41B,MAAK,SAACq1G,GAAD,OAAaA,EAAQutU,UAAYr9Z,EAAQq9Z,WAChD,GAAIu1a,EAAa,CACf,IAAME,EAAcr0wB,KAAQ55E,EAAE,gCAC9B,GAAsB,cAAlBmb,EAAQ2vN,MAAuB,CACjCgjnB,EAAYz1iB,UAAYl9R,EAAQs3U,WAChCq7f,EAAY5jrB,WAAa6jrB,EAAY7jrB,WACrC,IAAMyirB,EAAW/22B,OAAOulC,EAAQs3U,YAAc78W,OAAOm42B,EAAY7jrB,YACjE4jrB,EAAYnB,SAAWv8xB,aAAMu8xB,EAAU,GAAGt+mB,QAAQ,GAC7C09mB,GAAsB5w0B,EAAQs3U,cACjCq7f,EAAY1r2B,MAAMi2T,UAAY41iB,EAC9BH,EAAY1r2B,MAAMuq2B,SAAWsB,GAGjC,GAAsB,eAAlB9y0B,EAAQ2vN,MAAwB,CAClCgjnB,EAAYz1iB,UAAY01iB,EAAY11iB,UACpCy1iB,EAAY5jrB,WAAa/uJ,EAAQs3U,WACjC,IAAMk6f,EAAW/22B,OAAOulC,EAAQs3U,YAAc78W,OAAOm42B,EAAY11iB,WACjEy1iB,EAAYnB,SAAWv8xB,aAAMu8xB,EAAU,GAAGt+mB,QAAQ,GAC7C09mB,GAAsB5w0B,EAAQs3U,cACjCq7f,EAAY1r2B,MAAM8nL,WAAa+jrB,GAE5BlC,GAAsB+B,EAAYnB,YACrCmB,EAAY1r2B,MAAMuq2B,SAAWsB,GAGX,aAAlB9y0B,EAAQ2vN,QACVgjnB,EAAYz1iB,UAAY01iB,EAAY11iB,UACpCy1iB,EAAY5jrB,WAAa6jrB,EAAY7jrB,WACjC/uJ,EAAQs3U,WACVq7f,EAAYnB,SAAWxx0B,EAAQs3U,WAE/Bq7f,EAAYnB,SAAW,GAEpBZ,GAAsB5w0B,EAAQs3U,cACjCq7f,EAAY1r2B,MAAMuq2B,SAAWsB,IAG5BlC,GAAsB+B,EAAY5jrB,cACrC4jrB,EAAY1r2B,MAAM8nL,WAAa+jrB,GAE7BH,EAAY1r2B,MAAMi2T,WAAay1iB,EAAY1r2B,MAAM8nL,YAAc4jrB,EAAY1r2B,MAAMuq2B,SAC/EoB,EAAY7gvB,UACd4gvB,EAAY1r2B,MAAM60Q,WAAY,EAE9B62lB,EAAY1r2B,MAAM8qH,UAAY+gvB,EAG5BF,EAAY7gvB,WACd4gvB,EAAY1r2B,MAAM8qH,UAAY,KAC9B4gvB,EAAY1r2B,MAAM60Q,WAAY,IAE9B62lB,EAAY1r2B,MAAM8qH,UAAY+gvB,EAC9BH,EAAY1r2B,MAAM60Q,WAAY,GAIpC,OAAO62lB,GAqfPI,mBAlfyB,SAAC/y0B,GAC1B,IAAM8y0B,EAAcr0wB,KAAQ55E,EAAE,gCAqB9B,OApBAhO,IAAErR,QAAQw6B,GAAS,SAAC0yC,GAClB77D,IAAErR,QAAF,OAAUktE,QAAV,IAAUA,OAAV,EAAUA,EAAM0+xB,kBAAkB,SAACxiM,GACjC,IAAkB,OAAdA,QAAc,IAAdA,OAAA,EAAAA,EAAgB78iB,YAAa68iB,EAAe4iM,SAAU,CACxD,IAAMwB,EAAiBpC,GAAsBhiM,EAAe4iM,UACtDyB,EAAmBrC,GAAsBhiM,EAAe7/e,aAC1D,OAAC6/e,QAAD,IAACA,OAAD,EAACA,EAAgB78iB,aACnB68iB,EAAe3nqB,MAAM8qH,UAAY+gvB,EACjClkM,EAAe3nqB,MAAM60Q,WAAY,GAE9Bk3lB,IACHpkM,EAAe3nqB,MAAMuq2B,SAAWsB,EAChClkM,EAAe3nqB,MAAM60Q,WAAY,GAE9Bm3lB,IACHrkM,EAAe3nqB,MAAM8nL,WAAa+jrB,EAClClkM,EAAe9yZ,WAAY,UAK5B97O,GA6dPkz0B,qBA1d2B,SAAClz0B,EAASF,GACrC,IAAIqz0B,EAAa,EA+BjB,OA7BArz0B,EAAMt6B,SAAQ,SAACg3P,GACbA,EAAQ40mB,iBAAiB5r2B,SAAQ,SAACot2B,GAC5BA,EAAYv1a,QAAU81a,IACxBA,EAAaP,EAAYv1a,eAIG,CAChCtja,GAAI,KACJsja,QAAS81a,EAAa,EACtBz1f,UAAW,KACX1rP,cAAe,KACfglP,UAAW,GACXjlP,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,EACZyirB,SAAU,KACVjkM,aAAc,GACd8jM,mBAAoB,GACpB53uB,YAAa,GACb8gP,KAAM,GACNy4T,uBAAwBhzoB,EAAQgzoB,uBAChC/rqB,MAAO,CACLi2T,UAAW,KACXnuI,WAAY,KACZyirB,SAAU,KACV11lB,WAAW,KA8bfs3lB,4BAxbkC,SAACpz0B,EAASF,GAC5C,IAAIqz0B,EAAa,EA+BjB,OA7BK,OAALrz0B,QAAK,IAALA,KAAOuz0B,oBAAoB7t2B,SAAQ,SAACg3P,GAClCA,EAAQ40mB,iBAAiB5r2B,SAAQ,SAACot2B,GAC5BA,EAAYv1a,QAAU81a,IACxBA,EAAaP,EAAYv1a,eAIG,CAChCtja,GAAI,KACJsja,QAAS81a,EAAa,EACtBz1f,UAAW,KACX1rP,cAAe,KACfglP,UAAW,GACXjlP,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,EACZyirB,SAAU,KACVjkM,aAAc,GACd8jM,mBAAoB,GACpB53uB,YAAa,GACb8gP,KAAM,GACNy4T,uBAAwBhzoB,EAAQgzoB,uBAChC/rqB,MAAO,CACLi2T,UAAW,KACXnuI,WAAY,KACZyirB,SAAU,KACV11lB,WAAW,KA4Zfw3lB,2BAtZiC,SAACx3f,GAA8B,IAAD,EAGsC,EAD/F9F,EAAsB,IACA,OAAxB8F,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BivC,iBAA1B,OAA2CjvC,QAA3C,IAA2CA,GAA3C,UAA2CA,EAA0BivC,qBAArE,aAA2C,EAAyC+jR,cACtFj4pB,IAAErR,QAAF,OAAUs2W,QAAV,IAAUA,GAAV,UAAUA,EAA0BivC,qBAApC,aAAU,EAAyC+jR,aAAa,SAACtxT,GAC/D,IAAMqB,EAAkB,CACtB9kV,GAAI,KACJ2jV,UAAWF,EAAWE,UACtB1G,UAAWwG,EAAWxG,UACtBjlP,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,EACZyirB,SAAU,KACV/3uB,YAAa,GACb8gP,KAAM,GACNy4T,uBAAwBx1T,EAAWzjV,GACnC0jV,WAAY,CACV1jV,GAAIyjV,EAAWzjV,GACf2jV,UAAWF,EAAWE,UACtBC,oBAAqBH,EAAWG,oBAChC3G,UAAWwG,EAAWxG,UACtBuE,aAAciC,EAAWjC,aACzByC,oBAAqBR,EAAWQ,sBAGpChI,EAAoB9wW,KAAK25W,MAG7B,OAAO7I,GA2XPu9f,+BAxXqC,SAACz3f,GAA8B,IAAD,EAEkC,EAD/F9F,EAAsB,IACA,OAAxB8F,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BivC,iBAA1B,OAA2CjvC,QAA3C,IAA2CA,GAA3C,UAA2CA,EAA0BivC,qBAArE,aAA2C,EAAyC+jR,cACtFj4pB,IAAErR,QAAF,OAAUs2W,QAAV,IAAUA,GAAV,UAAUA,EAA0BivC,qBAApC,aAAU,EAAyC+jR,aAAa,SAACtxT,GAC/D,IAAMqB,EAAkB,CACtB9kV,GAAI,KACJ2jV,UAAWF,EAAWE,UACtB1G,UAAWwG,EAAWxG,UACtBjlP,UAAW,KACXmrM,UAAW,KACXnuI,WAAY,EACZyirB,SAAU,KACVjkM,aAAc,KACd9ziB,YAAa,GACb8gP,KAAM,GACNy4T,uBAAwBx1T,EAAWzjV,GACnC0jV,WAAY,CACV1jV,GAAIyjV,EAAWzjV,GACf2jV,UAAWF,EAAWE,UACtBC,oBAAqBH,EAAWG,oBAChC3G,UAAWwG,EAAWxG,UACtBuE,aAAciC,EAAWjC,aACzByC,oBAAqBR,EAAWQ,qBAElCszf,WAAY,KACZnhvB,QAAS,MAEX2rP,EAAyBE,oBAAoBx2W,SAAQ,SAACgu2B,IAC5B,OAApBA,QAAoB,IAApBA,OAAA,EAAAA,EAAsBxgM,0BAA2Bx1T,EAAWzjV,MACtC,OAApBy50B,QAAoB,IAApBA,OAAA,EAAAA,EAAsBzhvB,YAAuD,kBAAnCyhvB,EAAqBzhvB,YACjEyhvB,EAAqBzhvB,UAAYt3H,OAAO+42B,EAAqBzhvB,YAE/D8sP,EAAgB9sP,UAAYyhvB,EAAqBzhvB,UACjD8sP,EAAgB3hD,UAAYs2iB,EAAqBt2iB,UACjD2hD,EAAgB9vL,WAAaykrB,EAAqBzkrB,WAClD8vL,EAAgB2yf,SAAWgC,EAAqBhC,SAChD3yf,EAAgB0uT,aAAeimM,EAAqBjmM,aACpD1uT,EAAgBplP,aAAkC,OAApB+5uB,QAAoB,IAApBA,OAAA,EAAAA,EAAsB/5uB,cAAe,GACnEolP,EAAgBtE,MAA2B,OAApBi5f,QAAoB,IAApBA,OAAA,EAAAA,EAAsBj5f,OAAQ,IACrD,OAAIi5f,QAAJ,IAAIA,OAAJ,EAAIA,EAAsBlC,cACxBzyf,EAAgByyf,WAAhB,OAA6BkC,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAsBlC,aAErD,OAAIkC,QAAJ,IAAIA,OAAJ,EAAIA,EAAsBrjvB,WACxB0uP,EAAgB1uP,QAAhB,OAA0BqjvB,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAsBrjvB,aAItD6lP,EAAoB9wW,KAAK25W,MAG7B,OAAO7I,GAuUPy9f,8BApUoC,SAAC33f,GACG,IAAD,EAGI,EAHtCA,EAAyBnmF,UAC5BmmF,EAAyBnmF,SAAkC,OAAxBmmF,QAAwB,IAAxBA,GAAA,UAAAA,EAA0B43f,mCAA1B,eAAuD/9kB,UAAW,IAElGmmF,EAAyBriP,cAC5BqiP,EAAyBriP,aAAsC,OAAxBqiP,QAAwB,IAAxBA,GAAA,UAAAA,EAA0B43f,mCAA1B,eAAuDj6uB,cAAe,IAE/G,UAAIqiP,QAAJ,IAAIA,OAAJ,EAAIA,EAA0Bs1T,iCAAkC,CAC9D,IAAMuiM,EAAwB,GAC9B981B,IAAErR,QAAF,OAAUs2W,QAAV,IAAUA,OAAV,EAAUA,EAA0Bs1T,kCAAkC,SAACgkG,GACrE,GAAIA,EAAWp8wB,OAAS2xa,KAA0B,CAAC,IAAD,MAC1Cipc,EAAuB,CAC3BrmM,aAAc6nG,EAAW7nG,aACzBv0qB,KAAMo8wB,EAAWp8wB,KACjB21pB,aAAY,UAAEymH,EAAWk8F,kBAAb,iBAAE,EAAuBC,uBAAzB,iBAAE,EAAyC,UAA3C,aAAE,EAA6C5iN,cAE7DglN,EAAsBzu2B,KAAK0u2B,OAG/B93f,EAAyB63f,sBAAwBA,IAkTnDE,iCArSuC,SAACC,EAAcv1wB,GACtD,IAAM7xF,EAAS,CACbkmqB,oBAAgC,OAAZkhM,QAAY,IAAZA,OAAA,EAAAA,EAAclhM,qBAAsB,GACxDC,cAA0B,OAAZihM,QAAY,IAAZA,OAAA,EAAAA,EAAcjhM,eAAgB,GAC5CC,UAAsB,OAAZghM,QAAY,IAAZA,OAAA,EAAAA,EAAchhM,WAAY,GACpCn9Y,SAAqB,OAAZm+kB,QAAY,IAAZA,OAAA,EAAAA,EAAcn+kB,UAAW,GAClCl8J,aAAyB,OAAZq6uB,QAAY,IAAZA,OAAA,EAAAA,EAAcr6uB,cAAe,GAC1Ck5iB,cAA0B,OAAZmhM,QAAY,IAAZA,OAAA,EAAAA,EAAcJ,6BAA8Bjs2B,KAAKC,UAAL,OAAeos2B,QAAf,IAAeA,OAAf,EAAeA,EAAcJ,6BAA+B,KACtH13f,oBAAqB,GACrBo1T,iCAAkC,IA8BpC,GA5Be,cAAX7ykB,IACF7xF,EAAM,OAAa6xF,IAErB,OAAIu1wB,QAAJ,IAAIA,OAAJ,EAAIA,EAAcT,sBAChBx81B,IAAErR,QAAF,OAAUsu2B,QAAV,IAAUA,OAAV,EAAUA,EAAcT,qBAAqB,SAACU,IAC5C,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAoB3C,mBACtBv61B,IAAErR,QAAF,OAAUuu2B,QAAV,IAAUA,OAAV,EAAUA,EAAoB3C,kBAAkB,SAAC4C,GAC/C,IAAMlg0B,EAAO,CACXi+E,UAAS,OAAEiivB,QAAF,IAAEA,OAAF,EAAEA,EAAiBjivB,UAC5BmrM,UAAWyziB,GAAc,OAACqD,QAAD,IAACA,OAAD,EAACA,EAAiB92iB,UAAW,GACtDnuI,WAAY4hrB,GAAc,OAACqD,QAAD,IAACA,OAAD,EAACA,EAAiBjlrB,WAAY,GACxDyirB,SAAUb,GAAc,OAACqD,QAAD,IAACA,OAAD,EAACA,EAAiBxC,SAAU,GACpD/3uB,YAAW,OAAEu6uB,QAAF,IAAEA,OAAF,EAAEA,EAAiBv6uB,YAC9B8gP,KAAI,OAAEy5f,QAAF,IAAEA,OAAF,EAAEA,EAAiBz5f,KACvBgzT,aAAY,OAAEymM,QAAF,IAAEA,OAAF,EAAEA,EAAiBzmM,aAC/ByF,uBAAsB,OAAEghM,QAAF,IAAEA,OAAF,EAAEA,EAAiBhhM,wBAE5B,YAAXz0kB,GACF,OAAIy1wB,QAAJ,IAAIA,OAAJ,EAAIA,EAAiBhhM,yBACnBtmqB,EAAOsvW,oBAAoB92W,KAAK4uC,IAEV,OAAfkg0B,QAAe,IAAfA,OAAA,EAAAA,EAAiBjivB,aAAjB,OAA8BiivB,QAA9B,IAA8BA,OAA9B,EAA8BA,EAAiBxC,WACxD9k2B,EAAOsvW,oBAAoB92W,KAAK4uC,SAM1C,OAAIgg0B,QAAJ,IAAIA,OAAJ,EAAIA,EAAcH,sBAAuB,CACvC,IAAMA,EAAwB,GAC9B981B,IAAErR,QAAF,OAAUsu2B,QAAV,IAAUA,OAAV,EAAUA,EAAcH,uBAAuB,SAACx/O,GAC5C,IAAMy/O,EAAuB,CAC3BrmM,aAAcp5C,EAAWo5C,aACzBv0qB,KAAMm7nB,EAAWn7nB,MAEnB262B,EAAsBzu2B,KAAK0u2B,MAE/Bln2B,EAAO0kqB,iCAAmCuiM,EAE5C,OAAOjn2B,GAoPPun2B,eAzOqB,SAACC,GACtB,IAAI7jf,GAAQ,EASZ,GARA6jf,EAAwB1u2B,SAAQ,SAAAktE,GAC9BA,EAAK0+xB,iBAAiB5r2B,SAAQ,SAAAopqB,GAAmB,IAAD,EAC9C,UAAIA,QAAJ,IAAIA,GAAJ,UAAIA,EAAgB3nqB,aAApB,aAAI,EAAuB60Q,UAEzB,OADAu0G,GAAQ,GACD,QAITA,EAAO,CACT,IAAI8jf,GAAgB,EAChBC,EAAqB,EACzBF,EAAwB1u2B,SAAQ,SAAAktE,GAC9BA,EAAK0+xB,iBAAiB5r2B,SAAQ,SAAAopqB,GAC5B,IAAMokM,EAAiBpC,GAAsBhiM,EAAe4iM,UACtDyB,EAAmBrC,GAAsBhiM,EAAe7/e,YAC9D,GAAI6/e,EAAe78iB,UAAW,CAC5B,IAAKihvB,EAEH,YADAmB,GAAgB,GAGlB,IAAKlB,EAEH,YADAkB,GAAgB,GAIhBvlM,EAAe78iB,WAAakhvB,GAAoBD,IAClDoB,GAAsB,SAI5B/jf,EAAQ8jf,EACmB,IAAvBC,IACF/jf,GAAQ,GAGZ,OAAOA,GAqMPgkf,gBAlMsB,SAACC,GACvB,IAAIC,EAAgB,KAepB,OAdID,EAAWE,WAAalqc,MAAcgqc,EAAWE,WAAanqc,OAChE,OAAIiqc,QAAJ,IAAIA,OAAJ,EAAIA,EAAYG,iBACdF,EAAgB9s2B,KAAK6tC,MAAMg/zB,EAAWG,eACxB9+kB,QAAU2+kB,EAAWtmF,WACnCumF,EAAc96uB,YAAc66uB,EAAWI,gBAGvC791B,IAAExU,SAAS,CAACkoa,KAAkBC,MAA9B,OAAiD8pc,QAAjD,IAAiDA,OAAjD,EAAiDA,EAAYE,YAC/D,OAAIF,QAAJ,IAAIA,OAAJ,EAAIA,EAAY3hM,iBACd4hM,EAAgB9s2B,KAAK6tC,MAAMg/zB,EAAW3hM,eACxBh9Y,QAAU2+kB,EAAW3+kB,QACnC4+kB,EAAc96uB,YAAc66uB,EAAW76uB,aAGpC86uB,GAmLPI,qBAhL2B,SAACnmD,GA6B5B,MA5BsB,CACpB,QAAW,CACT,GAAM,CACJ,CACE,YAAe,CACb,KAAQA,IAGZ,CACE,KAAQ,CACN,KAAQA,IAGZ,CACE,UAAW,CACT,KAAQA,MAKhB,QAAW,CACT,MAAS,IACT,OAAU,EACV,QAAW,CACT,IAAO,MAwJbomD,yBAjJ+B,SAACC,GAChC,IAAMxnpB,EAAS,GACf,UAAIwnpB,QAAJ,IAAIA,OAAJ,EAAIA,EAAgBzqjB,QAAS,CAAC,IAAD,IAEJ,EADjB0qjB,EAAU,OAAGD,QAAH,IAAGA,GAAH,UAAGA,EAAgB/g0B,YAAnB,iBAAG,EAAsB9T,eAAzB,aAAG,EAA+B+00B,UAClD,UAAID,QAAJ,IAAIA,OAAJ,EAAIA,EAAYhtrB,MACJ,OAAVgtrB,QAAU,IAAVA,GAAA,UAAAA,EAAYhtrB,aAAZ,SAAmBtiL,SAAQ,SAAAsiL,GACzBulC,EAAOnoN,KAAK,CACVimN,QAASrjC,EAAM/tJ,GACfqxL,YAAatjC,EAAMsjC,YACnB9jN,KAAMwgL,EAAMxgL,KACZ0nG,UAAW84E,EAAM94E,WAAa,KAC9B+hH,aAAcjpC,EAAMipC,aACpB3D,cAAmB,OAALtlC,QAAK,IAALA,OAAA,EAAAA,EAAOslC,cAAeiwG,aAAU,OAACv1I,QAAD,IAACA,OAAD,EAACA,EAAOslC,cAAgB,QAK9E,OAAOC,GAiIP2npB,wBA7H8B,SAACC,EAAqBzojB,GACpD,SAAIyojB,GAAuBA,EAAoBt62B,OAAS,IAC/Cs62B,EAAoB1u2B,MAAK,SAAAmsE,GAAI,OAAIA,IAAS85O,MA4HnD0ojB,yBAvH+B,SAAC7nM,GAA2B,IAAD,EACtD52kB,EAAQ,GASZ,OARyB,OAArB42kB,QAAqB,IAArBA,GAAA,UAAAA,EAAuB+D,wCAAvB,eAAyDz2qB,QAAS,IACpE87F,EAAK,OAAG42kB,QAAH,IAAGA,OAAH,EAAGA,EAAuB+D,iCAC5B/sqB,QAAO,SAAA8vnB,GAAU,MAAI,CAAC1pN,KAAyBC,MAAwBroa,SAAS8xnB,EAAWn7nB,SAC3F8I,KAAI,SAAAqynB,GAAU,gBAAK,CAClBo5C,aAAcp5C,EAAWo5C,aACzB9hX,SAAQ,OAAE0oU,QAAF,IAAEA,GAAF,UAAEA,EAAYm9O,kBAAd,iBAAE,EAAwBC,uBAA1B,iBAAE,EAA0C,UAA5C,aAAE,EAA8C5iN,kBAGvDl4jB,GA8GP0+wB,8BA3GoC,SAAC9nM,EAAuB4nM,GAAyB,IAAD,EAChFx+wB,EAAQ,GAQZ,OAPyB,OAArB42kB,QAAqB,IAArBA,GAAA,UAAAA,EAAuB+D,wCAAvB,eAAyDz2qB,QAAS,IACpE87F,EAAK,OAAG42kB,QAAH,IAAGA,OAAH,EAAGA,EAAuB+D,iCAAiC/sqB,QAAO,SAAA8vnB,GAAU,OAAI8gP,EAAoB5y2B,SAAS8xnB,EAAWo5C,iBAC1HzrqB,KAAI,SAAAqynB,GAAU,gBAAK,CAClBo5C,aAAcp5C,EAAWo5C,aACzB9hX,SAAQ,OAAE0oU,QAAF,IAAEA,GAAF,UAAEA,EAAYm9O,kBAAd,iBAAE,EAAwBC,uBAA1B,iBAAE,EAA0C,UAA5C,aAAE,EAA8C5iN,kBAGvDl4jB,GAmGPo6wB,mBACAuE,yBAzF+B,SAACt5f,GAChC,IAAMu5f,EAAkB,GAClBC,EAAiB,GACjBt/f,GAA8C,OAAxB8F,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BE,sBAAuB,GAE7EhG,EAAoBxwW,SAAQ,SAAAktE,GAAS,IAAD,EAC5BskS,EAAS,UAAGtkS,EAAK+qS,kBAAR,aAAG,EAAiBzG,UAC/BA,IACFq+f,EAAgBr+f,IAAcq+f,EAAgBr+f,IAAc,GAAK,MAIrEhB,EAAoBxwW,SAAQ,SAAAktE,GAAS,IAAD,EAC5BskS,EAAS,UAAGtkS,EAAK+qS,kBAAR,aAAG,EAAiBzG,UAC/BA,EACGs+f,EAAet+f,GAIlBtkS,EAAK6iyB,aAAe,GAHpBD,EAAet+f,IAAa,EAC5BtkS,EAAK6iyB,aAAeF,EAAgBr+f,IAKtCtkS,EAAK6iyB,aAAe,KAGxB,IAAMC,EAAuB,IAAI792B,IAC7B892B,EAAwB,KAC5B,UAAI35f,QAAJ,IAAIA,OAAJ,EAAIA,EAA0BuzT,cAAe,CAC3C,IAAMA,EAAgB5nqB,KAAK6tC,MAAMwmU,EAAyBuzT,gBAC1D,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAeuiM,kBACjB6D,EAAwB5+1B,IAAErS,QAAF,OAAU6qqB,QAAV,IAAUA,OAAV,EAAUA,EAAeuiM,iBAkCrD,OA9BmC57f,EAAoBl0W,KAAI,SAAA4wE,GAAS,IAAD,IAC3D+7lB,EAAY,OAAG/7lB,QAAH,IAAGA,GAAH,UAAGA,EAAM+qS,kBAAT,aAAG,EAAkB1jV,GACnCk9U,EAAc,OAAGvkS,QAAH,IAAGA,GAAH,UAAGA,EAAM+qS,kBAAT,aAAG,EAAkBxG,eACnCjzV,EAAS,SACb,GAAIyx1B,EAAuB,CACzB,IAAMC,EAAyB7+1B,IAAEkF,SAC/B051B,GACA,SAACE,GAAD,OAAYA,EAAOx9f,gBAAkBzlS,EAAK34C,OAE5C,OAAI270B,QAAJ,IAAIA,OAAJ,EAAIA,EAAwBz+f,kBAC1BA,EAAiBy+f,EAAuBz+f,eACxCjzV,EAAS,IAGb,OAAIwx1B,EAAqBz42B,IAAI0xqB,GAEpB,2BACF/7lB,GADL,IAEE+qS,WAAW,2BACN/qS,EAAK+qS,YADA,IAERxG,iBACAjzV,cAMNwx1B,EAAqB/91B,IAAIg3pB,GAClB/7lB,Q,6BCrqBL41C,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9C4hyB,eAAgB,CACdt7uB,YAAa,oBACbC,WAAY,qBAEd6vhB,UAAW,CACT9vhB,YAAa,qBAEfu7uB,YAAa,CACXv7uB,YAAa,oBACbxc,gBAAiB,UACjBxpC,SAAU,KAEZwhyB,kBAAmB,CACjBx7uB,YAAa,oBACbxc,gBAAiB,UACjBxpC,SAAU,KAEZgqC,cAAe,CACb9pC,eAAgB,iBAElB68xB,mBAAoB,GACpB0E,yBAA0B,CACxBhrvB,WAAY/2C,EAAMZ,QAAQ,GAC1Bc,QAAS,QAEX8hyB,eAAgB,CACd9hyB,QAAS,OACTnC,WAAY,SACZyC,eAAgB,cAElByhyB,qBAAsB,CACpBlrvB,WAAY/2C,EAAMZ,QAAQ,GAC1B43C,cAAeh3C,EAAMZ,QAAQ,GAC7Bc,QAAS,QAEXmhmB,gBAAiB,CACft2kB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B+iF,OAAQ,WAEV+3vB,sBAAuB,CACrBhiyB,QAAS,OACTnC,WAAY,SACZyC,eAAgB,cAElB2hyB,qBAAsB,CACpBjiyB,QAAS,OACTnC,WAAY,SACZoD,SAAU,EACVb,SAAU,GAEZ8hyB,mBAAoB,CAClBpwvB,QAAS,IAEXqwvB,oBAAqB,CACnBt3wB,MAAO,WAETu3wB,mBAAoB,CAClBv3wB,MAAO,2BAILw3wB,GAAsB,CAC1B,CACEn52B,IAAK,YACL+zP,MAAO,OACP7pP,KAAM,aACNg3W,UAAW,IAEb,CACElhX,IAAK,aACL+zP,MAAO,aACP7pP,KAAM,aACNg3W,UAAW,IAEb,CACElhX,IAAK,WACL+zP,MAAO,WACP7pP,KAAM,YACNg3W,UAAW,KAaTk4f,GAAuB,SAAC,GAAiI,IAAD,IAA9Hr+f,EAA8H,EAA9HA,cAAe10Q,EAA+G,EAA/GA,KAAMg6B,EAAyG,EAAzGA,QAASg5uB,EAAgG,EAAhGA,kBAAmBC,EAA6E,EAA7EA,sBAAuBj3f,EAAsD,EAAtDA,oBAChG1+Q,EAAS8zK,eACT7iM,EAAUs2C,KACV7kF,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EAER,EAA4B2yB,oBAAS,GAArC,mBAAOouG,EAAP,KAAe6poB,EAAf,KACA,EAAgDj4uB,oBAAS,GAAzD,mBAAOm/zB,EAAP,KAAyBC,EAAzB,KACA,EAAwBp/zB,mBAAS,GAAjC,mBAAO95C,EAAP,KAAaqjxB,EAAb,KACA,EAA8CvpuB,oBAAS,GAAvD,mBAAOq/zB,EAAP,KAAwBC,EAAxB,KACA,EAAwCt/zB,mBAAS,IAAjD,mBAAOu/zB,EAAP,KAAqBC,EAArB,KACA,EAAsDx/zB,mBAAS,MAA/D,mBAAOy/zB,EAAP,KAA4BC,EAA5B,KACA,GAAsC1/zB,mBAAS,IAA/C,qBAAO+lU,GAAP,MAAoB45f,GAApB,MACA,GAAgD3/zB,mBAAS,IAAzD,qBAAOs+T,GAAP,MAAyB0sO,GAAzB,MACA,GAA0ChriB,mBAAS,IAAnD,qBAAOq+T,GAAP,MAAsBuhgB,GAAtB,MACA,GAAoC5/zB,oBAAS,GAA7C,qBAAO6/zB,GAAP,MAAmBC,GAAnB,MACA,GAAoE9/zB,oBAAS,GAA7E,qBAAO+/zB,GAAP,MAAmCC,GAAnC,MACA,GAA8Dhg0B,mBAAmB,IAAjF,qBAAOig0B,GAAP,MAAgCC,GAAhC,MACA,GAAgDlg0B,mBAAgB,IAAhE,qBAAOmg0B,GAAP,MAAyBC,GAAzB,MACA,GAAkEpg0B,mBAAmB,IAArF,qBAAOqg0B,GAAP,MAAkCC,GAAlC,MACA,GAAoCtg0B,mBAAgB,IAApD,qBAAO0+E,GAAP,MAAmB6hvB,GAAnB,MACA,GAA0Cvg0B,mBAAgB,IAA1D,qBAAOo+F,GAAP,MAAsB6/Q,GAAtB,MACA,GAA0Dj+W,mBAAS,IAAnE,qBAAOwg0B,GAAP,MAA8BC,GAA9B,MACA,GAA0Czg0B,mBAAS,IAAnD,qBAAsB0g0B,IAAtB,aACA,GAA4E1g0B,mBAAmB,IAA/F,qBAAO2g0B,GAAP,MAAuCC,GAAvC,MACA,GAAwE5g0B,mBAAgB,IAAxF,qBAAO6g0B,GAAP,MAAqCC,GAArC,MACA,GAA4D9g0B,mBAAkC,IAA9F,qBAAOu+T,GAAP,MAA+BwigB,GAA/B,MACA,GAA4D/g0B,oBAAS,GAArE,qBAAOgh0B,GAAP,MAA+BC,GAA/B,MACA,GAA4Cjh0B,oBAAS,GAArD,qBAAOkh0B,GAAP,MAAuBC,GAAvB,MACMC,GAAar70B,IAAMyG,QAAO,GAChC/E,qBAAU,kBAAM,kBAAO250B,GAAWh40B,SAAU,KAAQ,IAEpD,IAAMw/D,GAAM51D,sBAAYoY,gBAClB/C,GAAQrV,sBAAYoV,gBACpB81I,GAAWlrJ,sBAAY8xN,eACvBnxC,GAAU3gL,sBAAY24N,aAAkB,CAAC,QACzCm1G,GAAgB9tU,sBAAY24N,aAAkB,CAAC,cAC/Cw2G,GAAgBnvU,sBAAY24N,aAAkB,CAAC,SAAU,SAAW,UACpEqxc,GAAoBhqqB,sBAAY64N,gBAChCw1mB,GAA0Bv50B,mBAAQ,kBAAMs3K,aAA2BqpH,QAAoB,IACvF64iB,GAAsBtu0B,sBAAYqu0B,IAGxC550B,qBAAU,WACHwkE,IACHgsrB,GAAU,GACVmnF,GAAoB,GACpB71F,EAAQ,GACRo2F,GAAe,IACf30R,GAAoB,IACpB40R,GAAiB,IACjBF,EAAuB,MACvBI,IAAc,GACdR,GAAmB,GACnBE,EAAgB,IAChBc,GAA6B,IAC7BF,GAAoB,IACpBW,GAA0B,IAC1BE,IAA0B,GAC1BjB,IAA8B,GAC9BE,GAA2B,IAC3BQ,GAAiB,IACjBE,GAAkC,OAEnC,CAAC30wB,IAGJxkE,qBAAU,WACJwkE,GAAQ00Q,GACVz9Q,OAED,CAAC+I,EAAM00Q,IAGVl5U,qBAAU,WACHwkE,GAASmiD,GAAWuyN,GAAmC,IAAlBziL,GAAS7gM,MACnDkk3B,GAAYrjrB,GAAU4iL,MACrB,CAAC1yN,EAAQuyN,EAAeziL,KAE3Bz2J,qBAAU,WACwB,IAA5B62U,GAAiBn7W,QACnB282B,IAAc,KAEf,CAACxhgB,KAEJ72U,qBAAU,WAAO,IAAD,EACc,IAAxB830B,EAAap82B,OACfm82B,GAAmB,GACVC,EAAap82B,UAAb,OAAwBs82B,QAAxB,IAAwBA,GAAxB,UAAwBA,EAAqBj7f,2BAA7C,aAAwB,EAA0CrhX,SAC3Em82B,GAAmB,KAEpB,CAACC,IAEJ,IAAMr8wB,GAAUsnB,sBAAW,wBAAC,iCAAAvjH,EAAA,sEACgBi9mB,KAAkB+tC,gBAAgBrpjB,GAAKvgD,GAAO,kBAD9D,cACpBm5zB,EADoB,OAE1Bf,GAAyBe,GAFC,SAGKt9P,KAAkB5gT,cAAc16N,GAAKvgD,IAH1C,cAGpBo5zB,EAHoB,OAI1BlB,GAAckB,GAAoB,IAJR,UAKQv9P,KAAkB3gT,iBAAiB36N,GAAKvgD,IALhD,QAKpBq5zB,EALoB,OAM1Bzjd,GAAiByjd,GAAuB,IACxCzpF,GAAU,GAPgB,4CAQzB,CAACrvrB,GAAKvgD,KAEHk5zB,GAAW,yCAAG,WAAOI,EAAet9f,GAAtB,oCAAAp9W,EAAA,6DACZ262B,EAAcD,EAAc9h2B,OACjB,GAFC,SAGqB80Z,KAAwBY,uBAAuB3sU,GAAKvgD,GAAOs4T,EADjF,IAFC,WAIlB,QADM2D,EAHY,cAIlB,IAAIA,OAAJ,EAAIA,EAA0BuzT,iBACtBA,EAAgB5nqB,KAAK6tC,MAAMwmU,EAAyBuzT,eACpDgqM,EAAoB,IAE1B,OAAIhqM,QAAJ,IAAIA,OAAJ,EAAIA,EAAeC,yBACjBz4pB,IAAErR,QAAF,OAAU6pqB,QAAV,IAAUA,OAAV,EAAUA,EAAeC,wBAAwB,SAAC9ya,IACrC,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAAS88mB,eAAgBzuc,MAC3Bwuc,EAAkBn02B,KAAKs3P,MAKzB68mB,EAAkB1+2B,OAAS,IACvB4+2B,EAAa,GAEnB1i2B,IAAErR,QAAF,OAAUs2W,QAAV,IAAUA,OAAV,EAAUA,EAA0BE,qBAAqB,SAACC,GACxD,GAAmD,KAA7B,OAAlBA,QAAkB,IAAlBA,OAAA,EAAAA,EAAoB+2T,wBAA8B,CACpD,IAAMwmM,EAAeH,EAAkB5+1B,MAAK,SAAA+hP,GAAO,OACjDA,EAAQ7rI,SAASpqH,MAAK,SAAAupH,GAAO,OAC3BA,EAAQ0/iB,sBAAsBjpqB,MAC5B,SAAAmsE,GAAI,OAAIA,EAAK+8lB,4BAA8BxzT,EAAmBhF,wBAKpE,GAAIuigB,EAAc,CAChB,IAAMC,EAAY,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAcxigB,UAE9BuigB,EAAWE,KACdF,EAAWE,GAAgBn/f,MAG7B2B,EAAmBV,aAAnB,OAAkCi+f,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAcj+f,aAChDU,EAAmBwB,WAAa,CAC9BxG,eAAgBqD,KAChBm/f,eACAl+f,cAA0B,OAAZi+f,QAAY,IAAZA,OAAA,EAAAA,EAAcj+f,eAAgB,GAC5C+9f,YAAazuc,KACb7zD,UAAWuigB,EAAWE,UAMhCvB,GAAiBmB,IAInBjB,IAA0D,OAAxBt8f,QAAwB,IAAxBA,GAAA,UAAAA,EAA0BE,2BAA1B,eAA+Cl6W,KAAI,SAAAo0W,GAAG,OAAIA,EAAIn8U,QAAO,IACvGu+0B,IAAwD,OAAxBx8f,QAAwB,IAAxBA,OAAA,EAAAA,EAA0BE,sBAAuB,KAExD,OAArB06f,QAAqB,IAArBA,OAAA,EAAAA,EAAuB/72B,UAAvB,OAAiCmhX,QAAjC,IAAiCA,OAAjC,EAAiCA,EAA0BE,uBAC7DF,EAAyBE,oBAAsBF,EAAyBE,oBAAoB33W,QAC1F,SAAA6xW,GAAG,OAAIwggB,EAAsBr02B,SAAS6zW,EAAIn8U,UAIxCgiV,EAAsBpF,KAAciF,oBAAoBC,EAAqBC,IA7DjE,oBAgEVe,GAAiB,UAAA3lX,OAAO0D,KAAKmhX,UAAZ,eAAkCj6W,IAAIrH,UAAW,KAClE0iX,EAAuBxG,KAAcuG,2BAA2BL,EAAzC,OAAyDf,QAAzD,IAAyDA,OAAzD,EAAyDA,EAA0BE,sBAjEhG,kCAmEyB3F,KAAcvjD,mBAAmB1yN,GAAKvgD,GAAOs9T,GAnEtE,SAoEc,QADtBP,EAnEQ,cAoEc,IAAxBA,OAAA,EAAAA,EAA0BjiX,QAAS,GACrCg8W,KAAcgG,uBAAuBC,EAArC,OAA+Dd,QAA/D,IAA+DA,OAA/D,EAA+DA,EAA0BE,oBAAqBD,EAAqBc,GArEvH,QAwEhBu6f,GAAiBr7f,GACjBymO,GAAoB3lO,GAzEJ,QA2Edf,IACFA,EAAyBE,oBAAsBgtC,GAAkBosd,yBAAyBt5f,IAG5Fo7f,EAAuBp7f,GACnBA,GACF49f,GAAoB59f,EAA0Bs9f,GAjF9B,4CAAH,wDAqFXM,GAAsB,SAAC59f,EAA0Bs9f,GAAiB,IAAD,EACjEO,EAAsB,GACpB17f,EAAa,OAAGnC,QAAH,IAAGA,GAAH,UAAGA,EAA0BE,oBAAoB,UAAjD,aAAG,EAAkDiC,cACxE,GAAIA,EAAe,CACjB,IAAM27f,EAAuBny2B,KAAK6tC,MAAM2oU,GACxC/mX,OAAOuL,QAAQm32B,GAAsBp02B,SAAQ,YAAmB,IAAD,mBAAhBpI,EAAgB,KAAX41C,EAAW,KACvD6m0B,EAAiBtD,GAAoB971B,MAAK,SAAAi4D,GAAI,OAAIA,EAAKy+K,QAAU/zP,KACvEu82B,EAAoBz02B,KAClB,CACE9H,MACA+zP,OAAqB,OAAd0onB,QAAc,IAAdA,OAAA,EAAAA,EAAgB1onB,QAAS,GAChC7pP,KAAM0rC,EAAK,KACXsrU,UAAW,aAKjBq7f,EAAsB9i2B,IAAEy8B,MAAMij0B,IAEhC,GAAIyB,IAAyBA,GAAsBr92B,OAAS,EAAG,CAC7D,IAAMm/2B,IAAmBh+f,EAAyBi+f,gBAC5CC,EAAoBhC,GAAsBv91B,MAAK,SAAAi4D,GAAI,OAAIA,EAAKgzM,cAAL,OAAoB0zlB,QAApB,IAAoBA,OAApB,EAAoBA,EAAar/0B,MAAU,OAAJ24C,QAAI,IAAJA,OAAA,EAAAA,EAAMonyB,kBAAmBA,KAC7H,GAAIE,EAAmB,CACrB,IAAMrkrB,EAAQ,OAAGqkrB,QAAH,IAAGA,OAAH,EAAGA,EAAmBvpjB,QAChC96H,GACFgkrB,EAAoBn02B,SAAQ,SAACy02B,GAC3B,IAAIC,EAAevkrB,EAASl7K,MAAK,SAAAg2S,GAAO,OAAIwpjB,EAAa782B,MAAQqzT,EAAQrzT,OAOzE,GANK882B,IACHA,EAAevkrB,EAASl7K,MAAK,SAAAg2S,GAAO,OAAIwpjB,EAAa9onB,QAAUs/D,EAAQrzT,QAEpE882B,IACHA,EAAevkrB,EAASl7K,MAAK,SAAAg2S,GAAO,OAAIwpjB,EAAa782B,MAAQqzT,EAAQt/D,UAEnE+onB,EAAc,CAAC,IAAD,EAChBD,EAAa9onB,MAAQ+onB,EAAa/onB,MAClC,IAAMgpnB,EAAU,OAAGf,QAAH,IAAGA,GAAH,UAAGA,EAAax/f,kBAAhB,aAAG,EAAyBn/V,MAAK,SAAA2/1B,GAAY,OAAIA,EAAa32f,YAAcy2f,EAAa/onB,SACzG,GAAIgpnB,EACF,GAAwB,YAApBA,EAAWnh3B,KACbih3B,EAAa37f,UAAY,UACpB,CACL,IAAM+7f,EAAgBV,EAAoBl/1B,MAAK,SAAAk1O,GAAK,OAAIA,EAAM2uH,YAAc67f,EAAWpg1B,MACnFsg1B,IACFA,EAAc/7f,UAAY,OAE5B27f,EAAa37f,UAAY67f,EAAWpg1B,aAO9C4/0B,EAAoBn02B,SAAQ,SAACy02B,GAAkB,IAAD,EAE3B,EADbE,EAAU,OAAGf,QAAH,IAAGA,GAAH,UAAGA,EAAax/f,kBAAhB,aAAG,EAAyBn/V,MAAK,SAAA2/1B,GAAY,OAAIA,EAAa32f,YAAcw2f,EAAa9onB,SAClGgpnB,IACHA,EAAU,OAAGf,QAAH,IAAGA,GAAH,UAAGA,EAAax/f,kBAAhB,aAAG,EAAyBn/V,MAAK,SAAA2/1B,GAAY,OAAIA,EAAa32f,YAAcw2f,EAAa782B,QAEjG+82B,IACsB,YAApBA,EAAWnh3B,KACbih3B,EAAa37f,UAAY,MAEzB27f,EAAa37f,UAAY67f,EAAWpg1B,OAM9C4/0B,EAAoBn02B,SAAQ,SAACy02B,GACtBA,EAAa37f,YAChB27f,EAAa37f,UAAY,UAG7B64f,GAAewC,GACf/C,GAAoB,IAGhB0D,GAAiB,SAACjN,GAClB0J,EAAa102B,SAASgr2B,GACxB2J,EAAgBD,EAAa1y2B,QAAO,SAAA01B,GAAE,OAAIA,IAAOsz0B,MAEjD2J,EAAgB,GAAD,mBAAKD,GAAL,CAAmB1J,MA0BhCkN,GAAiB,yCAAG,iCAAA972B,EAAA,sDAClB+72B,EADkB,eACU3kgB,IAC5B4kgB,EAFkB,YAEY3kgB,IAC9B4kgB,EAHkB,YAGO7C,IAETF,GAAiBtz2B,QAAO,SAAAyrH,GAAO,OACnD2nvB,GAAwBp12B,SAASytH,EAAQ/1F,MAAQ890B,GAA0Bx12B,SAASytH,EAAQ/1F,OAEhFv0B,SAAQ,SAACsqH,GAAa,IAAD,EAC3BuvP,EAAa1I,KAAcrB,oBAAoBxlP,GAAS,KACf,OAAnBmnvB,QAAmB,IAAnBA,GAAA,UAAAA,EAAqBj7f,2BAArB,eAA0C33W,QACpE,SAAAkqE,GAAC,OAAIooS,KAAcrB,oBAAoB/mS,GAAG,KAAU8wS,OACjD,IAEe75W,SAAQ,SAAC86b,GAC3B,IAAMzhF,EAAe,OAAGyhF,QAAH,IAAGA,OAAH,EAAGA,EAAiBnwU,QACnCwqvB,EAAkB,CACtBjkgB,YAAa,CACX1kP,eAA8B,OAAf6sP,QAAe,IAAfA,OAAA,EAAAA,EAAiBrJ,4BAAjB,OAA6CqJ,QAA7C,IAA6CA,OAA7C,EAA6CA,EAAiBpJ,sBAC7E6H,kBAAmBgjF,EAAgBvma,KAGvCyg1B,EAAqBl6a,EAAgBvma,IAAM7X,iBAAOy41B,GAC7CF,EAAwBp42B,SAASi+b,EAAgBvma,KACpD0g1B,EAAwBv12B,KAAKo7b,EAAgBvma,IAE1C2g1B,EAAmBr42B,SAASi+b,EAAgBvma,KAC/C2g1B,EAAmBx12B,KAAKo7b,EAAgBvma,UAK5B890B,GAA0Bxz2B,QAAO,SAAA01B,GAAE,OAAK090B,GAAwBp12B,SAAS03B,MACjFv0B,SAAQ,SAACu0B,UACVyg1B,EAAqBzg1B,GAC5B,IAAM9kC,EAAQwl3B,EAAwBnh2B,QAAQygB,GAC1C9kC,GAAS,GACXwl3B,EAAwBvy2B,OAAOjT,EAAO,GAExC,IAAM2l3B,EAAgBF,EAAmBph2B,QAAQygB,GAC7C6g1B,GAAiB,GACnBF,EAAmBxy2B,OAAO0y2B,EAAe,MAI7CxD,GAAiBoD,GACjBh4R,GAAoBi4R,GACpB3C,GAA6B4C,GAC7BlD,IAA8B,GAhDN,4CAAH,qDAmDjBqD,GAAct90B,IAAM+B,SAAQ,WAAO,IAAD,IAChCw70B,EAAgB,OAAG7D,QAAH,IAAGA,GAAH,UAAGA,EAAqBj7f,2BAAxB,aAAG,EAA0C33W,QAAO,SAAAywJ,GAAG,OAAmC,IAA/BA,EAAIk+gB,0BAC/E/2T,GAAqC,OAAhB6+f,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBng3B,QAASmg3B,EAAiB,QAAKlm3B,EAC5E,OAA0B,OAAlBqnX,QAAkB,IAAlBA,GAAA,UAAAA,EAAoBwB,kBAApB,eAAgCO,sBAAuB,QAC9D,CAACi5f,IAEE8D,GAAqC,SAAC1N,EAAev4uB,GACzDyjvB,IAA0B,SAAAno2B,GACxB,IAAMqzR,EAAO,2BAAQrzR,GAAR,kBAAei91B,EAAQv4uB,IACpC,GAAIA,EAAS,CAAC,IAAD,MACLqhP,GAAO,UAAAN,GAAcw3f,UAAd,eAAsB3z1B,MAAM,CAAC,cAAe,qBAA5C,UACRm8V,GAAcw3f,UADN,aACR,EAAsBxw2B,IAAI,oBADlB,UAERg5W,GAAcw3f,UAFN,aAER,EAAsBxw2B,IAAI,OAC3Bs5W,GACFj/W,OAAO0D,KAAKi7W,IAAerwW,SAAQ,SAAApI,GACL,IAAD,MAAvB3C,OAAO2C,KAASiw2B,MACA,UAAAx3f,GAAcz4W,UAAd,eAAoBsc,MAAM,CAAC,cAAe,qBAA1C,UACbm8V,GAAcz4W,UADD,aACb,EAAoBP,IAAI,oBADX,UAEbg5W,GAAcz4W,UAFD,aAEb,EAAoBP,IAAI,UACXs5W,IAAQ1yE,EAAQhpS,OAAO2C,KAAQ,OAKzD,OAAOqmS,MAILu3kB,GAAsBz90B,IAAM+B,SAAQ,WAExC,OADiBq3U,KAAc8F,qBAAd,OAAmCw6f,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAqBj7f,oBAAqBnG,IAC9El7W,OAAS,IACxB,QAACs82B,QAAD,IAACA,OAAD,EAACA,EAAqBj7f,oBAAqBnG,KAExColgB,GAAuB,WAC3B,IAAMC,EAA8C,CAAE7p2B,KAAM,OAAQ6rT,UAAW,OAAQ9I,KAAM,OAAQgqD,UAAW,OAAQ9pD,KAAM,QACxHk6Y,EAAc,OAAG94gB,SAAH,IAAGA,QAAH,EAAGA,GAAU74L,IAAI,cACrC,OAAO0gX,GACJl5W,QAAO,SAAAmrE,GAAC,MAAoB,WAAhBA,EAAE8uS,WAA0C,QAAhB9uS,EAAE8uS,aAC1Cx8W,KAAI,SAAA0tE,GACH,IAAM2ryB,EAAa,OAAG3sK,QAAH,IAAGA,OAAH,EAAGA,EAAgB/zrB,MAAK,SAAAwve,GAAE,OAAIA,EAAGptf,IAAI,QAAU2yE,EAAE8uS,aAC9DmF,EAAS,OAAG03f,QAAH,IAAGA,OAAH,EAAGA,EAAet+2B,IAAI,aAC/BwhX,EAAW68f,EAAoBz3f,GACrC,OAAO,2BAAKj0S,GAAZ,IAAe6uS,WAAU+8f,mBAAgC,OAAbD,QAAa,IAAbA,OAAA,EAAAA,EAAet+2B,IAAI,UAAW2yE,EAAEloE,UAE7EjD,QAAO,SAAAmrE,GAAC,OAAIA,EAAE6uS,aAwDbg9f,GAAmB,yCAAG,iCAAA582B,EAAA,yDACpBu3W,GAAyC,OAAnBihgB,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBj7f,sBAAuB,GAClEs/f,EAAoBL,KACpBM,EAAuB,GAE7BvlgB,EAAoBxwW,SAAQ,SAAC0wW,GAC3B,GAAKH,GAAuBG,EAAIn8U,KAAQ+7U,GAAiBzzW,SAAS6zW,EAAIn8U,IAAtE,CAEA,IAAM28U,EAAcb,GAAcK,EAAIn8U,IAChCy1R,GAA2B,OAAXknD,QAAW,IAAXA,OAAA,EAAAA,EAAah9V,MAAM,CAAC,cAAe,qBAAnC,OAAwDg9V,QAAxD,IAAwDA,OAAxD,EAAwDA,EAAa75W,IAAI,kBAC/F,GAAK2yT,EAAL,CAGA,IAAMyI,EAAqC,GAErCgmD,GAAmB,OAAH/H,QAAG,IAAHA,OAAA,EAAAA,EAAK+H,eAAgBx2W,KAAK6tC,MAAM4gU,EAAI+H,eAAiB,KAG3Eq9f,EAAkB912B,SAAQ,SAAAmqP,GACxB,IACmB,IAEZ,EAHHhnP,EAAW,KACXs1W,EACFt1W,EAAQ,oBAAGs1W,EAActuH,EAAMvyP,YAAvB,aAAG,EAA0B5I,aAA7B,QAAsC,KAE9CmU,EAAQ,UAAGutW,EAAIvmH,EAAMvyP,YAAb,QAAqB,KAEf,MAAZuL,GAAiC,KAAbA,IACtBsvT,EAActoE,EAAM0uH,UAAY11W,EAChCsvT,EAAc,GAAD,OAAItoE,EAAM0uH,SAAV,gBAAkC,MAInDk9f,EAAqBr22B,KAAK,CACxBoxT,OAAQ,CACN9G,gBACAtqH,MAAM,eACHy0K,GADE,eAEAkhgB,GAAc5ijB,cAOrBsjjB,EAAqB5g3B,OAAS,GA3CR,gCA4ClB07W,KAAcu7b,YAAYxxsB,GAAKvgD,GAAO,CAAE8xvB,aAAc4pE,IA5CpC,OA+C1BC,KA/C0B,2CAAH,qDAkDnBhpD,GAAaruxB,gBACjB,YAAyJ,IAAD,cAanI,kBAblB2wH,EAAqJ,EAArJA,IAAKiltB,EAAgJ,EAAhJA,gBAAiBjwvB,EAA+H,EAA/HA,SAAU2xvB,EAAqH,EAArHA,eAC3BlvpB,EAAI,OAAGz3D,QAAH,IAAGA,OAAH,EAAGA,EAAKw8sB,WACZ9oiB,EAAO,UAAGqvR,aAAW,CAAErrS,OAAM,OAAEjgG,QAAF,IAAEA,OAAF,EAAEA,EAAMxyL,YAA9B,aAAG,EAAkCyuS,QAC5C4miB,EAAU7x0B,IAAMyG,OAAO,CAAEw/B,MAAO,kBAAM,MAAMhvE,MAAO,GAAImwH,KAAM,KAC7DmO,EAAa,OAAGgiC,QAAH,IAAGA,GAAH,UAAGA,EAAK2oN,kBAAR,aAAG,EAAiB3qP,cACjCmkP,EAAc,OAAGniN,QAAH,IAAGA,GAAH,UAAGA,EAAK2oN,kBAAR,aAAG,EAAiBxG,eAElCgH,GAAmB,OAAHnpN,QAAG,IAAHA,OAAA,EAAAA,EAAKmpN,eAAgBx2W,KAAK6tC,MAAL,OAAWw/G,QAAX,IAAWA,OAAX,EAAWA,EAAKmpN,eAAiB,KACtEC,EAAe,CACnB7sW,KAAM,GACN+iT,KAAM,GACNE,KAAM,IAEJ2pD,GACFC,EAAa7sW,KAAb,oBAAoB4sW,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,GACvG0pX,EAAa9pD,KAAb,oBAAoB6pD,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,GACvG0pX,EAAa5pD,KAAb,oBAAoB2pD,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAArF,aAAoB,EAA0E5I,aAA9F,QAAuG,IAEnGsgK,EAAIooK,YACNghD,EAAa7sW,KAAOyjJ,EAAIooK,WAI5B,IAAMlK,EAAuB,aAC3Bv5L,YAAaq7B,EAAIr7B,aACbq7B,EAAI2oN,YAAJ,eAAqBo9f,GAAc38f,IAGnCw9f,EAAuBn+0B,IAAMykF,aAAY,SAACie,EAAOzrI,EAAOkpC,IAC5D,OAAIlpC,QAAJ,IAAIA,OAAJ,EAAIA,EAAO6iB,UACT+/1B,GAAiB,2BACZvhgB,IADW,kBAEb/gN,EAAI/6H,GAAKvlC,KAEPshX,GAAiBzzW,SAASyyJ,EAAI/6H,KACjCyojB,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE5C890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzC+90B,IAA6B,SAAA1n2B,GAAI,OAAIA,EAAK/L,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,SAEpE0J,EAAS,IAAIgiD,UAEd,CAACoyxB,KAEE8D,EAAmBp+0B,IAAMykF,aAAY,SAACie,GACtCA,EAAMn6G,OAAOgvG,QACf0td,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE9CyojB,GAAoB1sO,GAAiBzxW,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,SAE9D,CAAC+6H,EAAI/6H,KAEF6h1B,EAA8Br+0B,IAAMykF,aAAY,SAAC8N,GACrDsnvB,GAAiB,2BACZvhgB,IADW,kBAEb/gN,EAAI/6H,GAAK+1F,KAEPgmP,GAAiBzzW,SAASyyJ,EAAI/6H,KACjCyojB,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE5C890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzC+90B,IAA6B,SAAA1n2B,GAAI,OAAIA,EAAK/L,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,WAEnE,CAAC87U,GAAeC,GAAkB+hgB,KAE/Bz5vB,EAAW03P,GAAiBzzW,SAASyyJ,EAAI/6H,IA0B/C,OACE,uCACE,gBAACw3Z,GAAA,EAAD,YACO,OAAHz8R,QAAG,IAAHA,OAAA,EAAAA,EAAKygtB,cAAe,GACpB,eAACzslB,GAAA,EAAD,CACE52M,UAAWF,EAAQ6jyB,YACnBgG,SAZD,OAAH/mtB,QAAG,IAAHA,OAAA,EAAAA,EAAKygtB,cAAe,EACI,EAAnBzgtB,EAAIygtB,aAEN,EAOD,UAIM,OAAHzgtB,QAAG,IAAHA,GAAA,UAAAA,EAAK2oN,kBAAL,eAAiBlC,eAAgB,MAGtC,eAACzyF,GAAA,EAAD,CAAW52M,UAAWF,EAAQ6jyB,YAA9B,SACE,eAAClkyB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQssC,cAA1C,SACE,gBAAC3sC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,gBACG+1D,QADH,IACGA,GADH,UACGA,EAAK2oN,kBADR,aACG,EAAiBC,YAEpB,eAACprQ,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAlC,gBACG+1D,QADH,IACGA,GADH,UACGA,EAAK2oN,kBADR,aACG,EAAiBE,6BAK1B,eAAC70F,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDtijB,KAAiBC,iBAAjB,OAAkC3+J,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAK3kC,WACzF,eAAC24J,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDtijB,KAAiB07Q,gBAAjB,OAAiCp6a,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAK3kC,WACxF,eAAC24J,GAAA,EAAD,UACE,eAACt1J,GAAA,EAAD,CAAY7V,QAlDE,WACpB89vB,EAAe3mtB,EAAI/6H,KAiDb,SACG+vF,EAAW,eAAC,KAAD,IAA0B,eAAC,KAAD,QAG1C,eAACg/J,GAAA,EAAD,UACE,eAAC5zJ,EAAA,EAAD,CAAUlf,UAAW7/G,QAAQ0/W,GAAc/gN,EAAI/6H,KAAM+6F,QAAS1W,EAAU9J,SAAUqnwB,MAEpF,eAAC7ylB,GAAA,EAAD,CAAW10K,MAAO,CAAE9/B,SAAU,SAA9B,SACE,eAACm8xB,GAAD,CACEx5f,eAAgBA,EAChBnnP,QAAS+lP,GAAc/gN,EAAI/6H,IAC3Bq10B,QAASA,EACT96vB,SAAUonwB,EACV53vB,YAAY,UACZurvB,yBAAyB,EACzBv8uB,cAAeA,EACf+iM,oBAAqB+ljB,EACrB/ojB,mBAAkB,OAAE/9J,QAAF,IAAEA,OAAF,EAAEA,EAAK3kC,QACzB6iM,wBAAyBA,MAG5BuqD,GAAYz7W,KAAI,SAAC6tP,EAAO16P,GAAR,YAAsC,WAApB06P,EAAM2uH,WAA8C,QAApB3uH,EAAM2uH,WACvE,eAACx1F,GAAA,EAAD,CAAuB52M,UAAqB,IAAVj9E,EAAc+8E,EAAQ4jyB,eAAiB5jyB,EAAQo4kB,UAAjF,UACgB,OAAbnsS,QAAa,IAAbA,GAAA,UAAAA,EAAgBtuH,EAAMvyP,YAAtB,eAA4B5I,QAASsgK,EAAI66F,EAAMvyP,MADlCnI,MAIlB,eAAC6zR,GAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SACGj0pB,QAAQ0/W,GAAc/gN,EAAI/6H,OAAS890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzE,eAACgpF,GAAA,EAAD,CACEC,MAAO2zP,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KAAO,8EAAgF,GAC1JqlP,sBAAuBu3F,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KAFrF,SAIE,gCACE,eAACg1O,GAAA,EAAD,CACE/4J,SAAU2gQ,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KACtE+6F,UAAWihP,GAAuBjhN,EAAI/6H,IACtCu6E,SAAU,SAACpzG,GACT652B,GAAmCjmtB,EAAI/6H,GAAI74B,EAAE4kB,OAAOgvG,UAEtD/1B,MAAM,UACNlqG,KAAK,iBAMZkl3B,GACD,eAACjxlB,GAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,UACO,OAAJ79b,QAAI,IAAJA,OAAA,EAAAA,EAAMglpB,iBACL,gBAAC5/xB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,eAAC,KAAD,CAAiByrB,MAAM,YACvB,eAACqnB,GAAA,EAAD,CAAMF,KAAMsiN,EAAS1iT,OAAO,SAASosD,UAAWF,EAAQq/xB,mBAAxD,gBACG9kpB,QADH,IACGA,GADH,UACGA,EAAMglpB,gBAAgB,UADzB,aACG,EAA0B5iN,kBAI/B,qCAAG9poB,EAAE,uCAKb,eAAC0sa,GAAA,EAAD,UACE,eAACzoK,GAAA,EAAD,CAAWkkgB,QAxGM,WACrB,IAAI9+wB,EAAQ,EAKZ,OAJAA,GALOqvW,GAAYl5W,QAAO,SAAAmrE,GAAC,MAAoB,WAAhBA,EAAE8uS,WAA0C,QAAhB9uS,EAAE8uS,aAAqB3jX,OAM7Eo/2B,IACH7r2B,GAAS,GAEJA,EAkGiB4t2B,GACT1nwB,MAAK,aAAIx/B,QAAS,GAAMk1C,EAAW,GAAK,CAAE6J,OAAQ,IAD7D,SAGE,gBAAC9J,GAAA,EAAD,CACEmtN,QAAQ,EACRltN,SAAUA,EACVC,UAAW,EACXoV,gBAAiB,CAAEmhhB,cAAc,EAAMv/gB,eAAe,GAJxD,UAME,0BACA,eAAC5X,GAAA,EAAD,UACE,gBAACx3C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,gBAAgBb,WAAW,aAAtE,UACE,gBAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,wCAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,gBAA6BsiD,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAKr7B,iBAEpC,gBAAC9nD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,0BAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,gBAA6BsiD,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAKylN,4BAYhDwhgB,GAAyB530B,gBAC7B,YAA+G,IAAD,sBAA3G2wH,EAA2G,EAA3GA,IAAKhrC,EAAsG,EAAtGA,SAAU2xvB,EAA4F,EAA5FA,eACVrM,EAAU7x0B,IAAMyG,OAAO,CAAEw/B,MAAO,kBAAM,MAAMhvE,MAAO,GAAImwH,KAAM,KAC7DmO,EAAa,OAAGgiC,QAAH,IAAGA,GAAH,UAAGA,EAAK2oN,kBAAR,aAAG,EAAiBxG,eACjCA,EAAc,OAAGniN,QAAH,IAAGA,GAAH,UAAGA,EAAK2oN,kBAAR,aAAG,EAAiBxG,eAElCgH,GAAmB,OAAHnpN,QAAG,IAAHA,OAAA,EAAAA,EAAKmpN,eAAgBx2W,KAAK6tC,MAAL,OAAWw/G,QAAX,IAAWA,OAAX,EAAWA,EAAKmpN,eAAiB,KAEtEC,EAAeD,EAAgB,CACnC5sW,KAAI,oBAAE4sW,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAAnE,aAAE,EAA0E5I,aAA5E,QAAqF,GACzF4/T,KAAI,oBAAE6pD,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,oBAAnE,aAAE,EAA+E5I,aAAjF,QAA0F,GAC9F8/T,KAAI,oBAAE2pD,GAAyB,OAAXV,SAAW,IAAXA,IAAA,UAAAA,GAAa9iW,MAAK,SAAAhc,GAAC,MAAgB,SAAZA,EAAE0yP,gBAAzB,eAA4C/zP,MAAO,eAAnE,aAAE,EAA0E5I,aAA5E,QAAqF,IACvF,GAEEw+T,EAAuB,aAC3Bv5L,YAAaq7B,EAAIr7B,aACbq7B,EAAI2oN,YAAJ,eAAqBo9f,GAAc38f,IAGnCw9f,EAAuBn+0B,IAAMykF,aAAY,SAACie,EAAOzrI,EAAOkpC,GAC5D,GAAIlpC,EAAO,CACT,IAAI6T,EAAe7T,EAEjB6T,GADF,OAAI7T,QAAJ,IAAIA,OAAJ,EAAIA,EAAOqI,IAAI,gBACErI,EAAMwU,MACnB,CAAC,cAAe,kBAChBiuW,GAGaziX,EAAMgM,IAAI,iBAAkBy2W,GAE7CmggB,GAAiB,2BACZvhgB,IADW,kBAEb/gN,EAAI/6H,GAAK1xB,KAEPytW,GAAiBzzW,SAASyyJ,EAAI/6H,KACjCyojB,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE5C890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzC+90B,IAA6B,SAAA1n2B,GAAI,OAAIA,EAAK/L,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,SAEpE0J,EAAS,IAAIgiD,UAEd,CAACoyxB,KAEE8D,EAAmBp+0B,IAAMykF,aAAY,SAACie,GACtCA,EAAMn6G,OAAOgvG,QACf0td,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE9CyojB,GAAoB1sO,GAAiBzxW,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,SAE9D,CAAC+6H,EAAI/6H,KAEF6h1B,EAA8Br+0B,IAAMykF,aAAY,SAAC8N,GACrDsnvB,GAAiB,2BACZvhgB,IADW,kBAEb/gN,EAAI/6H,GAAK+1F,KAEPgmP,GAAiBzzW,SAASyyJ,EAAI/6H,KACjCyojB,GAAoB,GAAD,mBAAK1sO,IAAL,CAAuBhhN,EAAI/6H,MAE5C890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzC+90B,IAA6B,SAAA1n2B,GAAI,OAAIA,EAAK/L,QAAO,SAAA01B,GAAE,OAAIA,IAAO+6H,EAAI/6H,WAEnE,CAAC87U,GAAeC,GAAkB+hgB,KAE/Bz5vB,EAAW03P,GAAiBzzW,SAASyyJ,EAAI/6H,IAU/C,OACE,uCACE,gBAACw3Z,GAAA,EAAD,YACO,OAAHz8R,QAAG,IAAHA,OAAA,EAAAA,EAAKygtB,cAAe,GACpB,eAACzslB,GAAA,EAAD,CAAW52M,UAAWF,EAAQ6jyB,YAAagG,QAA6B,GAAjB,OAAH/mtB,QAAG,IAAHA,OAAA,EAAAA,EAAKygtB,cAAkBvoF,QAAS,EAApF,SAAwFnowB,EAAE,uCAE5F,eAACikQ,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDtijB,KAAiBC,iBAAjB,OAAkC3+J,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAK3kC,WACzF,eAAC24J,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDtijB,KAAiB07Q,gBAAjB,OAAiCp6a,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAK3kC,WACxF,eAAC24J,GAAA,EAAD,UACE,eAACt1J,GAAA,EAAD,CAAY7V,QAbE,WACpB89vB,EAAe3mtB,EAAI/6H,KAYb,SAEI+vF,EAAW,eAAC,KAAD,IAA0B,eAAC,KAAD,QAI3C,eAACg/J,GAAA,EAAD,UACE,eAAC5zJ,EAAA,EAAD,CAAUlf,UAAW7/G,QAAQ0/W,GAAc/gN,EAAI/6H,KAAM+6F,QAAS1W,EAAU9J,SAAUqnwB,MAEpF,eAAC7ylB,GAAA,EAAD,CAAW10K,MAAO,CAAE9/B,SAAU,SAA9B,SACE,eAACm8xB,GAAD,CACEx5f,eAAgBA,EAChBnnP,QAAS+lP,GAAc/gN,EAAI/6H,IAC3Bq10B,QAASA,EACT96vB,SAAUonwB,EACV53vB,YAAY,UACZurvB,yBAAyB,EACzBv8uB,cAAeA,EACf+iM,oBAAqB+ljB,EACrB/ojB,mBAAkB,OAAE/9J,QAAF,IAAEA,OAAF,EAAEA,EAAK3kC,QACzB6iM,wBAAyBA,MAI3BuqD,GAAYz7W,KAAI,SAAC6tP,EAAO16P,GAAR,YAAsC,WAApB06P,EAAM2uH,WAA8C,QAApB3uH,EAAM2uH,WACtE,eAACx1F,GAAA,EAAD,CAAuB52M,UAAqB,IAAVj9E,EAAc+8E,EAAQ4jyB,eAAiB5jyB,EAAQo4kB,UAAjF,UAA0G,OAAbnsS,QAAa,IAAbA,GAAA,UAAAA,EAAgBtuH,EAAMvyP,YAAtB,eAA4B5I,QAASsgK,EAAI66F,EAAMvyP,MAA5HnI,MAGpB,eAAC6zR,GAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SACGj0pB,QAAQ0/W,GAAc/gN,EAAI/6H,OAAS890B,GAA0Bx12B,SAASyyJ,EAAI/6H,KACzE,eAACgpF,GAAA,EAAD,CACEC,MAAO2zP,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KAAO,8EAAgF,GAC1JqlP,sBAAuBu3F,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KAFrF,SAIE,gCACE,eAACg1O,GAAA,EAAD,CACE/4J,SAAU2gQ,KAAcyJ,4BAA4BvK,GAAc/gN,EAAI/6H,KACtE+6F,UAAWihP,GAAuBjhN,EAAI/6H,IACtCu6E,SAAU,SAACpzG,GACT652B,GAAmCjmtB,EAAI/6H,GAAI74B,EAAE4kB,OAAOgvG,UAEtD/1B,MAAM,UACNlqG,KAAK,mBAOjB,eAAC08b,GAAA,EAAD,UACE,eAACzoK,GAAA,EAAD,CAAWkkgB,QAlER,EAAIzva,GAAYl5W,QAAO,SAAAmrE,GAAC,MAAoB,WAAhBA,EAAE8uS,WAA0C,QAAhB9uS,EAAE8uS,aAAqB3jX,OAmEvEy5G,MAAK,aAAIx/B,QAAS,GAAMk1C,EAAW,GAAK,CAAE6J,OAAQ,IAD7D,SAGE,gBAAC9J,GAAA,EAAD,CAAgBmtN,QAAQ,EAAMltN,SAAUA,EAAUC,UAAW,EAC7CoV,gBAAiB,CAAEmhhB,cAAc,EAAMv/gB,eAAe,GADtE,UAEE,0BACA,eAAC5X,GAAA,EAAD,UACE,gBAACx3C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,gBAAgBb,WAAW,aAAtE,UACE,gBAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,wCAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,gBAA6BsiD,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAKr7B,iBAEpC,gBAAC9nD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,UACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,0BAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,gBAA6BsiD,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAKylN,4BAqChDyhgB,GAAkB730B,gBAAK,YAAiF,IAA9E830B,EAA6E,EAA7EA,QAAmBhn3B,GAA0D,EAApE0ia,SAAoE,EAA1D1ia,OACjD,OACE,gBAACs8b,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,UAAYmzlB,EAAQ302B,OACpB,eAACwhR,GAAA,EAAD,UAAW,eAAC,KAAD,MACX,eAACA,GAAA,EAAD,UACE,gBAACluK,GAAA,EAAD,CAAQvkE,aAAc,SACds8D,WAAW,EACXn+G,MAAO+oX,GAAYtoX,GAAOqpX,WAAa,MACvChqQ,SAAU,SAACpzG,GACT,IAAM1M,EAAQ0M,EAAE4kB,OAAOtxB,OApCR,SAACyn3B,EAASzn3B,GACzC,IAAI28P,EAAS,KACPionB,EAAc1jrB,GAASr+K,QAC7B,OAAI+h2B,QAAJ,IAAIA,OAAJ,EAAIA,EAAax/f,cACJ,OAAXw/f,QAAW,IAAXA,KAAax/f,WAAWp0W,SAAQ,SAACktE,GAC3BA,EAAK34C,KAAOvlC,IACd28P,EAAQz+K,EAAK+wS,eAIL,QAAVjvX,IACF28P,EAAQ8qnB,EAAQ9qnB,OAElB,IAAM+qnB,EAAiB3+f,GAAYz7W,KAAI,SAAA6tP,GACrC,OAAIA,EAAMvyP,MAAQ6+2B,EAAQ7+2B,IACjB,2BACFuyP,GADL,IAEEwB,QACAmtH,UAAW9pX,IAGRm7P,KAETwnnB,GAAe+E,GAcCC,CAAyBF,EAASzn3B,IAL5C,UAQE,eAAC6gH,GAAA,EAAD,CAAUW,UAAU,EAAMxhH,MAAM,SAAhC,SAA0CqwB,EAAE,iCAC5C,eAACwwF,GAAA,EAAD,CAAU7gH,MAAM,MAAhB,SAAuBqwB,EAAE,iCAEvB6wK,GAAS74L,IAAI,cACVwH,QAAO,SAAAsrP,GAAK,MAA0B,YAAtBA,EAAM9yP,IAAI,WAC1BiF,KAAI,SAAC6tP,EAAO1iP,GAAR,OACL,eAACooG,GAAA,EAAD,CAAoB7gH,MAAOm7P,EAAM9yP,IAAI,MACnCm5G,SAAU7/G,QAAQonX,GAAY9iW,MAAK,SAAA+0D,GAAC,OAAIA,EAAE8uS,YAAc3uH,EAAM9yP,IAAI,UADpE,SAEE8yP,EAAM9yP,IAAI,SAFGoQ,iBAoBvBuu2B,GAA0B,yCAAG,6EAAA/82B,EAAA,yDACjCgxxB,GAAU,GACJ+qF,EAF2B,eAEC3kgB,IAC5B0J,EAAkB,GAClB68f,EAAuD,GAC7DvE,GAA0Bry2B,SAAQ,SAAA83W,GAChC,IAAM6B,EAAaxI,KAAc0G,sBAAd,OAAoC45f,QAApC,IAAoCA,OAApC,EAAoCA,EAAqBj7f,oBAAqBsB,EAAmBC,GAAa5D,IACjI,GAAIwF,EAAY,CACd,IAAME,EAAa1I,KAAcrB,oBAAoB6J,GAAY,GAC5Di9f,EAAwB/8f,KAC3B+8f,EAAwB/8f,GAAc,IAExC+8f,EAAwB/8f,GAAYn6W,KAAKo4W,GAEpC3G,KAAcuI,mBAAmBC,EAAYI,IAChDA,EAAgBr6W,KAAKi6W,SAIvBI,EAAgB5kX,OAAS,GAnBI,iCAoBH07W,KAAco7b,YAAYrxsB,GAAKvgD,GAAO,CAAC8xvB,aAAcpyb,IApBlD,QAqBd,QADX88f,EApByB,cAqBd,IAAbA,OAAA,EAAAA,EAAe1h3B,QAAS,GAC1B0h3B,EAAc722B,SAAQ,SAACkH,GAAY,IAAD,EAC1B2zF,EAAYs2Q,KAAcrB,oBAAd,OAAkC5oW,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAQgqW,aAAa,GACnE4lgB,EAAcF,EAAwB/7wB,IAAc,GAEpDmvN,GAAsB,OAAN9iT,QAAM,IAANA,GAAA,UAAAA,EAAQgqW,mBAAR,eAAqBlnD,iBAArB,OAAsC9iT,QAAtC,IAAsCA,OAAtC,EAAsCA,EAAQqtB,IAM9Dwi1B,EAAsBr61B,kBAAa,OAANxV,QAAM,IAANA,OAAA,EAAAA,EAAQgqW,cAAe,IACvDl2W,IAAI,gBAAiBgvT,GACxB8sjB,EAAY922B,SAAQ,SAAA83W,GAClB,IAAMk/f,EAAkBD,EAAoB/72B,IAAI,oBAAqB88W,GAC/Dm/f,EAAkBjC,EAAqBl9f,GAC7C,GAAIm/f,EAAiB,CACnB,IAAMC,EAAgBD,EAAgB5/2B,IAAI,eACpC8/2B,EAAcD,GAAkBA,EAAsBnz2B,MACvDmz2B,EAAsBnz2B,MAAMiz2B,GAC7BA,EACJhC,EAAqBl9f,GAAqBm/f,EAAgBj82B,IAAI,cAAem82B,QAE7EnC,EAAqBl9f,GAAqBp7V,iBAAO,IAAI1hB,IAAI,cAAeg82B,SA5CjD,eAkD7BI,EAA4B/l2B,IAAEy8B,MAAM0k0B,IACxC4E,GAAqD,QAAzB,EAAAA,SAAA,eAA2Bv42B,QAAO,SAAAzE,GAAG,MAAI,mBAAoBA,OAAQ,GAC3F+52B,EAAsB,GAC5Bp8f,GAAY/3W,SAAQ,SAACmqP,GACnB,IAAM8gE,EAAU,CACdrzT,IAAKuyP,EAAMvyP,IACX+zP,MAAOxB,EAAMwB,MACb7pP,KAAMqoP,EAAMroP,MAEU,QAApBqoP,EAAM2uH,YACR7tD,EAAQt/D,MAAQ,IAElBwonB,EAAoBz02B,KAAKurT,MAEvBK,GAAa,EACXgpjB,IAAmB7C,EAAoB8C,gBACpB,QAAzB,EAAA6C,SAAA,SAA2Bp32B,SAAQ,SAACktE,GAC9BA,EAAKgzM,aAAehwF,GAAS74L,IAAI,QAAa,OAAJ61E,QAAI,IAAJA,OAAA,EAAAA,EAAMonyB,kBAAmBA,IACrEpnyB,EAAK+9O,QAAUkpjB,EACfjnyB,EAAKonyB,eAAiBA,EACtBhpjB,GAAa,MAGbA,IACIL,EAAU,CACd/qC,WAAYhwF,GAAS74L,IAAI,MACzB4zT,QAASkpjB,EACTG,iBAAkB7C,EAAoB8C,iBAExC6C,EAA0B132B,KAAKurT,IAE7BmojB,GAAWh40B,SAAWq30B,GAAyB2E,GAE7CC,EAnF2B,OAmFC5F,QAnFD,IAmFCA,OAnFD,EAmFCA,EAAqBj7f,oBACpD33W,QAAO,SAAAquE,GAAI,OAAoC,IAAhCA,EAAKsgmB,0BACpBlxqB,KAAI,SAAA4wE,GAAI,OAAIA,EAAK34C,MAEd+i1B,EAAyB,GACzBC,EAAwB,GACxB1vM,EAAwBx2pB,IAAE67K,UAAUukrB,GACpC+F,EAA8B,GACf,OAArB3vM,QAAqB,IAArBA,GAAA,UAAAA,EAAuBrxT,2BAAvB,SAA4Cx2W,SAAQ,SAAA0wW,GAAQ,IAAD,EACzD8mgB,EAA4B9mgB,EAAIn8U,IAAhC,UAAsCm8U,EAAIuH,kBAA1C,aAAsC,EAAgBxG,mBAEpDgmgB,EA9F6B,OA8FGzoK,SA9FH,IA8FGA,QA9FH,EA8FGA,GAAmB33sB,IAAI,2BACqB,IAAzCog3B,EAA8Bti3B,SAAiBs82B,IAC9E32f,GAAsC,OAAjBk0V,SAAiB,IAAjBA,QAAA,EAAAA,GAAmB33sB,IAAI,kCAAmC,GAE/Eqg3B,EAA6BvmgB,KAAc0J,iCAC/CC,EAAoB22f,EAAqB3+f,IAGrCwJ,EAAoD,IACzDrC,GAAuB,IAAIj6W,SAAQ,SAACq7F,GAAe,IAAD,EAC7C,OAAJA,QAAI,IAAJA,GAAA,UAAAA,EAAMm7Q,2BAAN,SAA2Bx2W,SAAQ,SAAC0wW,GAAc,IAAD,GACxC,OAAHA,QAAG,IAAHA,OAAA,EAAAA,EAAKn8U,MAAL,OAAWm8U,QAAX,IAAWA,GAAX,UAAWA,EAAKuH,kBAAhB,aAAW,EAAiBxG,kBAC9B6K,EAAqB5L,EAAIn8U,IAAMm8U,EAAIuH,WAAWxG,sBAK9CkmgB,EAA4BxmgB,KAAcgL,6CAC9CrB,EAAoB22f,EAAoBl90B,GAAIu+U,GAC5C+/f,GAA6B192B,OAAS,EAAI092B,GAA+BpB,EAAoBj7f,oBAC7F8F,IAEIlB,EArBmG,sBAqB/Es8f,GArB+E,YAqBhDC,KACvCxi3B,OAAS,IACzBsi3B,EAAgCr8f,IAG9Bw8f,EAAoB,GACG,QAA7B,EAAAH,SAAA,SAA+Bz32B,SAAQ,SAAAktE,GAAS,IAAD,EAC7C0qyB,EAAkB1qyB,EAAKylS,gBAAL,UAAsBzlS,EAAK71E,WAA3B,aAAsB,OAAA61E,EAAW,mBAAoBA,KAGzE4lS,GAAc9yW,SAAQ,SAACg3P,EAASN,GAAkB,IAAD,EACzC86G,EAAYx6G,EAAQ3/P,IAAI,aACxBwg3B,EAAY,OAAGpG,QAAH,IAAGA,GAAH,UAAGA,EAAqBj7f,2BAAxB,aAAG,EAA0C33W,QAAO,SAAAquE,GAAI,aAAQ,OAAJA,QAAI,IAAJA,GAAA,UAAAA,EAAM+qS,kBAAN,eAAkBzG,aAAcA,KAE9G,IAAgB,OAAZqmgB,QAAY,IAAZA,OAAA,EAAAA,EAAc1i3B,QAAS,EAAG,CAAC,IAAD,EACtB2i3B,EAA0B,IAAI3l3B,IAE9B4l3B,EAAuB,GAC7B,UAAA/gnB,EAAQ3/P,IAAI,mBAAZ,SAAyB2I,SAAQ,SAAAsqH,GAC/B,IAAM0/L,EAAgB1/L,EAAQjzH,IAAI,iBAC5B2g3B,EAAoB1tvB,EAAQjzH,IAAI,QAChC4g3B,EAA2B3tvB,EAAQjzH,IAAI,eACvC6g3B,EAAuB5tvB,EAAQjzH,IAAI,kBAErC6g3B,IACFH,EAAqBG,GAAwB,CAC3CF,oBACAC,6BAIAjujB,IAAoC,IAAnBA,GAA0C,OAAlBA,GAC3C8tjB,EAAwB7l2B,IAAI9P,OAAO6nT,OAIvC,IAAMmujB,EAAyD,GAC/DN,EAAa732B,SAAQ,SAAA4xW,GAAgB,IAAD,EAClC,GAAKtB,GAAiBzzW,SAAjB,OAA0B+0W,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAar9U,KACvCyg1B,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,IAAvC,CAEA,IAAMy9U,EAAsB,OAAGJ,QAAH,IAAGA,GAAH,UAAGA,EAAaqG,kBAAhB,aAAG,EAAyBxG,eACpDO,IACGmmgB,EAAkBnmgB,KACrBmmgB,EAAkBnmgB,GAA0B,IAE9CmmgB,EAAkBnmgB,GAAwBtyW,KAAKkyW,QAInD,IAAMwiY,EAAa,GACnB1ivB,OAAOuL,QAAQk72B,GAAmBn42B,SAAQ,YAA0C,IAAD,mBAAvCgyW,EAAuC,UACvEhyW,SAAQ,SAAC4xW,EAAaniX,GAC9B,IAAM2o3B,EAAiBR,EAAiB,OAAChmgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,IAClDknV,EAAiBhsX,EAAQ,EACzB+rX,EAAiB,KAErB,GAAc,IAAV/rX,EAEFgsX,GAAiB,EACjBD,EAAiB,UACZ,GAAI48f,GAAkBA,EAAe58f,eAAgB,CAEnC1I,GAAc/xW,MAAK,SAAAs8W,GAAG,uBAC3CA,EAAIhmX,IAAI,mBADmC,aAC3C,EAAqB0J,MAAK,SAAAgoE,GAAC,OAAIA,EAAE1xE,IAAI,oBAAsB+g3B,EAAe58f,sBAG1EA,EAAiB48f,EAAe58f,eAChCC,GAAiB,GAGjBD,EAAiB1G,UAEV2G,IAETD,EAAiB1G,MAGnBs/X,EAAW10uB,KAAK,CACdkyW,cACAI,yBACAyJ,iBACAD,yBAKN44X,EAAWr0uB,MAAK,SAAC9G,EAAGC,GAGlB,OAFkBD,EAAEwiX,eAAiB,EAAI,IACvBviX,EAAEuiX,eAAiB,EAAI,MAI3C,IAAM48f,EAAqB,GAC3BjkI,EAAWp0uB,SAAQ,SAAAsqE,GACjB,GAAIA,EAAGmxS,eAAgB,CAAC,IAAD,IACf68f,EAAS,UAAGthnB,EAAQ3/P,IAAI,mBAAf,aAAG,EAAyBiiB,WACzC,SAAA4zD,GAAI,OAAIA,EAAK71E,IAAI,oBAAsBizE,EAAG0nS,0BAExC88N,EAAmBwpS,EAEjBC,EAAa,UAAGvhnB,EAAQ3/P,IAAI,mBAAf,aAAG,EAAyBA,IAAIih3B,GAC7CE,EAAqB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAelh3B,IAAI,mBACjD,GAAImh3B,EAAuB,CAAC,IAAD,EACrBC,GAAmB,EACvB,UAAAzhnB,EAAQ3/P,IAAI,mBAAZ,SAAyB2I,SAAQ,SAACktE,EAAMzlE,GAClCylE,EAAK71E,IAAI,qBAAuBmh3B,GAAyB/w2B,EAAMgx2B,IACjEA,EAAkBhx2B,MAGtBqnkB,EAAmB2pS,EAGhBJ,EAAmBvpS,KACtBupS,EAAmBvpS,GAAoB,GAEzCupS,EAAmBvpS,IAAqB,MAI5C,IAAM4pS,EAAyB,GAE/BtkI,EAAWp0uB,SAAQ,YAA8E,IAAD,EAE9D,EAFZ4xW,EAA0E,EAA1EA,YAAaI,EAA6D,EAA7DA,uBAAwByJ,EAAqC,EAArCA,eAAgBD,EAAqB,EAArBA,eACrEm9f,EAAyB,UAAG3D,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,WAArC,aAAG,EAAuCrgB,MAAM,CAAC,cAAe,kBACxFyk2B,IACHA,EAAyB,UAAG3D,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,WAArC,aAAG,EAAuCl9B,IAAI,kBAEzE,IAAMuh3B,EAAmBz22B,OAAOw22B,GAEhC,GAAIA,EAA2B,CAAC,IAAD,IAEzBh/f,EAEFA,GADF,UAAIq7f,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,WAAtC,aAAI,EAAuCl9B,IAAI,gBAChC292B,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,IAC5C/wB,MAAM,CAAC,cAAe,kBAAmBg4W,GAAkBxJ,GAC3Dh3W,IAAI,iBAAkBwgX,GAAkBxJ,GAE9BgjgB,EAAoB,OAACpjgB,QAAD,IAACA,OAAD,EAACA,EAAar9U,IAAIv5B,IACjD,iBACAwgX,GAAkBxJ,GAItB,IAIIj9E,EAJEujlB,EAAS,UAAGthnB,EAAQ3/P,IAAI,mBAAf,aAAG,EAAyBiiB,WACzC,SAAA4zD,GAAI,OAAIA,EAAK71E,IAAI,oBAAsB26W,KAIrC88N,EAAmBwpS,EAEvB,IAAmB,IAAfA,EACF,GAAI78f,EAAgB,CAAC,IAAD,EACZ88f,EAAa,UAAGvhnB,EAAQ3/P,IAAI,mBAAf,aAAG,EAAyBA,IAAIih3B,GAC7CE,EAAqB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAelh3B,IAAI,mBAEjD,GAAImh3B,EAAuB,CAAC,IAAD,EACrBC,GAAmB,EACvB,UAAAzhnB,EAAQ3/P,IAAI,mBAAZ,SAAyB2I,SAAQ,SAACktE,EAAMzlE,GAClCylE,EAAK71E,IAAI,qBAAuBmh3B,GAAyB/w2B,EAAMgx2B,IACjEA,EAAkBhx2B,MAGtBqnkB,EAAmB2pS,EAGrB,IAAII,EAAyB,EAC7Bnn3B,OAAOuL,QAAQy72B,GAAwB142B,SAAQ,YAAmB,IAAD,mBAAhByH,EAAgB,KAAXiB,EAAW,KAC3DzT,OAAOwS,GAAOqnkB,IAChB+pS,GAA0B5j3B,OAAOyT,OAIhCgw2B,EAAuB5pS,KAC1B4pS,EAAuB5pS,GAAoB,GAG7C/5S,EAAW+5S,EAAmB4pS,EAAuB5pS,GAAoB+pS,EAAyB,EAClGH,EAAuB5pS,IAAqB,MAEvC,CACL,IAAI+pS,EAAyB,EAC7Bnn3B,OAAOuL,QAAQo72B,GAAoBr42B,SAAQ,YAAmB,IAAD,mBAAhByH,EAAgB,KAAXiB,EAAW,KACvDzT,OAAOwS,GAAO6w2B,IAChBO,GAA0B5j3B,OAAOyT,OAGrCqsR,EAAWujlB,EAAYO,OAGzB9jlB,EAAW/9B,EAAQ3/P,IAAI,YAAYhI,KAGrC,IAAMyp3B,EAAoBf,EAAqB/lgB,IAA2B,GAE1EulgB,EAAsB732B,KAAK,CACzBizW,cAAa,OAAEf,QAAF,IAAEA,OAAF,EAAEA,EAAar9U,GAC5Bi9U,UAAWx6G,EAAQ3/P,IAAI,aACvBmkX,iBACAC,iBACAzJ,yBACAgmgB,kBAAmBc,EAAkBd,kBACrCC,yBAA0Ba,EAAkBb,yBAC5C1ngB,yBAA0BA,GAAsB,OAACqB,QAAD,IAACA,OAAD,EAACA,EAAar9U,IAC9DiG,QAAS,CACPw8N,QAASN,EACTpnG,IAAKylI,EACLzqK,QAASmxP,EAAiB9B,EAAW3+W,IAAI,uBAAuB,GAAS2+W,KAIxE8B,GACHq8f,EAAwB7l2B,IAAI2m2B,GAE9B,IAAMtuvB,EAAUu9iB,EAAsBrxT,oBAAoBvhW,MAAK,SAAA8zD,GAAC,OAAIA,EAAEx0C,MAAF,OAASq9U,QAAT,IAASA,OAAT,EAASA,EAAar9U,QAC1F,OAAI+1F,QAAJ,IAAIA,OAAJ,EAAIA,EAAS2tP,cACX3tP,EAAQ2tP,WAAWxG,eAAiB+J,GAAkBxJ,WAMhEqlgB,EAA0Br32B,SAAQ,SAAAu0B,GAAO,IAAD,EAC7B,OAAGszoB,QAAH,IAAGA,GAAH,UAAGA,EAAuBrxT,2BAA1B,OAAG,EAA4CvhW,MAAK,SAAA8zD,GAAC,OAAIA,EAAEx0C,KAAOA,QAG7E7iC,OAAO0D,KAAK4/2B,GAAsBh12B,SAAQ,SAAApI,GACxC,GAAIy/2B,EAA0Bx62B,SAAS5H,OAAO2C,KAAS04W,GAAiBzzW,SAAS5H,OAAO2C,IAAO,CAC7F,IAAMmh3B,EAAyBvB,EAA4Bvi3B,OAAO2C,IAE9DwxqB,EAAiB4rM,EAAqBp92B,GACvCoD,IAAI,gBAAiB/F,OAAO2C,IAC5BoD,IAAI,iBAAkB+92B,GAErB3vM,EAAe/xqB,IAAI,gBAAkB0h3B,IACvC3vM,EAAiBA,EAAe5lqB,MAAM,CAAC,cAAe,kBAAmBu12B,IAE3EzB,EAAuB532B,KAAK0pqB,OAG5BgqM,GAAWh40B,SAAWw20B,GAAiBoD,GAnWV,UAoW3B9+P,KAAkBguC,eAAetpjB,GAAKvgD,GAAO,iBAAkB+8zB,GApWpC,QAqWjCn50B,EAAS,IAAIs1L,KAAmC,CAC9CwkJ,eACA1H,cAAe2kgB,EACf1kgB,oBACAu3T,wBACAyvM,yBACAC,wBACAyB,8BAA+BvB,GAAiC,GAChE9E,qCAEFsG,IAAiB,GA/WgB,4CAAH,qDAsX1BA,GAAmB,SAACC,GACpBjI,GACFhz0B,EAAS,IAAIw0K,KAA8B,CACzC15G,OAAQ,QACRogxB,4BAA6BlI,EAC7BljK,cAAepof,MAGnB1tF,EAAQihvB,IAGJE,GAAyB,yCAAG,WAAOrxM,GAAP,gBAAA9uqB,EAAA,sEACVuqZ,GAAkB6nd,gBAAgB9vwB,EAAQwskB,GADhC,cAC1BsxM,EAD0B,yBAEzBA,GAFyB,2CAAH,sDAK/B,OACE,gBAAC/vjB,GAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAAS,SAAC2+oB,EAAQ/3pB,GACZy0vB,IAAkC,kBAAXz0vB,GAC3Bo6vB,MAEFrpyB,SAAS,KACTu9B,WAAW,EACX2znB,qBAAqB,EACrB90W,cAAesnf,GACfnoR,cAAemoR,GAAsB,CAAEjhlB,WAAW,QAASjjS,EAV7D,UAYE,eAACs8a,GAAA,EAAD,CAAasxU,mBAAmB,EAAhC,SACE,gBAAC7wqB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAAKD,MAAM,SAA/B,SACG1tF,EAAE,kDAEL,eAAC2uG,GAAA,EAAD,CAAY,aAAW,QAAQ7V,QAAS,kBAAM8gwB,MAA9C,SACE,eAAC,KAAD,YAIH74tB,GACD,eAACmpK,GAAA,EAAD,UACE,eAAC89W,GAAA,EAAD,MAGFjnhB,GACA,uCACE,gBAACmpK,GAAA,EAAD,YACK4njB,GACD,eAAC5njB,GAAA,EAAD,UACE,eAAC89W,GAAA,EAAD,MAGF8pM,GACA,gBAACvnf,GAAA,EAAD,CAAS/D,WAAY3tX,EAAM2xX,YAAY,WAAvC,UACE,gBAACC,GAAA,EAAD,WACE,eAACC,GAAA,EAAD,UAAY1qW,EAAE,gDACd,gBAAC2qW,GAAA,EAAD,WACE,eAAC25T,GAAA,EAAD,CAAgB/0kB,MAAO,CAAEh/B,SAAU,KAAnC,SACE,gBAACg8W,GAAA,EAAD,CAAOh9U,MAAO,CAAEuf,OAAQ,oBAAqBpT,aAAc,MAAOi9M,eAAgB,SAAlF,UACE,eAAC6zH,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,UAAYjkQ,EAAE,kDACd,eAACikQ,GAAA,EAAD,IACA,eAACA,GAAA,EAAD,UAAYjkQ,EAAE,mDAGlB,eAAC4sa,GAAA,EAAD,UAEIl0E,GAAYz7W,KAAI,SAACm62B,EAAShn3B,GAAV,OACd,eAAC+m3B,GAAD,CAA6B/m3B,MAAOA,EAAOgn3B,QAASA,EAAStkd,SAAU,kBAAM,OAAvD1ia,aAMhC,eAACwoH,EAAA,EAAD,CAAQE,QAAS,kBAAM8gwB,MAAoB1/wB,MAAM,UAAjD,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CAAQzH,SAAU7/G,QAAQonX,GAAY9iW,MAAK,SAAAk1O,GAAK,MAAwB,WAApBA,EAAM2uH,eAA4BnoX,QAAQonX,GAAYl3W,OAAM,SAAAspP,GAAK,MAAwB,QAApBA,EAAM2uH,cAAuB3gQ,QAAS,kBAAMojqB,EAAQ,IAAIhirB,MAAM,UAAvL,SACGl6E,EAAE,4BAIT,gBAACyqW,GAAA,EAAD,WACE,eAACC,GAAA,EAAD,UACE,gBAAC7hE,GAAA,EAAD,CAAKx5O,QAAQ,OAAOM,eAAe,gBAAgBzC,WAAW,SAASqC,MAAM,OAAOD,SAAS,OAAOigC,MAAO,CAAE0qwB,OAAQ,GAArH,UACE,gCAAOj61B,EAAE,gDACE,IAATnnB,GAAcs92B,IACd,eAACv9vB,EAAA,EAAD,CAAQjL,QAAQ,WAAWzT,MAAM,UAAU4e,QAtlCxB,WAAO,IAAD,EACvCohwB,EAAqBpogB,KAAc8F,qBAAd,OAAmCw6f,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAqBj7f,oBAAqBnG,IAAe/zW,KAAI,SAAAysE,GAAC,OAAIA,EAAEx0C,MAC5Hil1B,GAAiC,OAAnB/H,QAAmB,IAAnBA,GAAA,UAAAA,EAAqBj7f,2BAArB,eAA0C33W,QAC5D,SAAAyrH,GAAO,OAAIivvB,EAAmB182B,SAASytH,EAAQ/1F,KAAO890B,GAA0Bx12B,SAASytH,EAAQ/1F,SAC9F,GAECkl1B,EAAiBtogB,KAAcqI,wBAAwBgggB,GAC7DpH,GAAoBqH,GACpBvH,GAA2B,YAAIG,KAC/BL,IAA8B,IA6kCV,SACG3y1B,EAAE,yDAKX,gBAAC2qW,GAAA,EAAD,WACE,eAAC25T,GAAA,EAAD,CAAgB/0kB,MAAO,CAAEw7J,UAAW,KAApC,SACE,gBAACwhL,GAAA,EAAD,CAAOh9U,MAAO,CAAEuf,OAAQ,oBAAqBpT,aAAc,MAAOi9M,eAAgB,SAAlF,UACE,eAAC6zH,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,CAAW52M,UAAWF,EAAQ6jyB,YAA9B,SAA4Chx1B,EAAE,sCAC9C,eAACikQ,GAAA,EAAD,CAAW52M,UAAWF,EAAQ6jyB,YAA9B,SAA4Chx1B,EAAE,2CAC9C,eAACikQ,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDjx1B,EAAE,kDACpD,eAACikQ,GAAA,EAAD,CAAW52M,UAAWF,EAAQ8jyB,kBAA9B,SAAkDjx1B,EAAE,wDACpD,eAACikQ,GAAA,EAAD,UACE,eAACt1J,GAAA,EAAD,CAAY7V,QAhnCd,WAIlB,IAAD,EAHDk5vB,EACFG,EAAgB,IAGhBA,EAAe,OAACC,QAAD,IAACA,GAAD,UAACA,EAAqBj7f,2BAAtB,aAAC,EAA0Cl6W,KAAI,SAAAgzJ,GAAG,OAAIA,EAAI/6H,OAE3E+80B,GAAoBD,IAymCM,SACGA,EAAkB,eAAC,KAAD,IAAqB,eAAC,KAAD,QAG5C,eAAC/tlB,GAAA,EAAD,UACE,eAAC5zJ,EAAA,EAAD,CAAUlf,SAAUn/F,IAAEwE,QAAQw6V,IAAgB/gP,QAAsC,KAAb,OAAhBghP,SAAgB,IAAhBA,QAAA,EAAAA,GAAkBn7W,UAAgC,OAAhBm7W,SAAgB,IAAhBA,QAAA,EAAAA,GAAkBn7W,UAAWkc,IAAEhiB,KAAKghX,IAAgBvhQ,SA5e7I,SAAC2rB,GACvBA,EAAMn6G,OAAOgvG,QACf0td,GAAoB3rkB,IAAEjc,KAAKi7W,IAAe/zW,KAAI,SAAAi4B,GAAE,OAAI2a,SAAS3a,EAAI,OAGjEyojB,GAAoB,SAyeE,eAAC15T,GAAA,EAAD,CAAW10K,MAAO,CAAE9/B,SAAU,SAA9B,SAA0CzvD,EAAE,uCAE1C04V,GAAYz7W,KAAI,SAAC6tP,EAAO16P,GAAR,MAAsC,WAApB06P,EAAM2uH,WAA8C,QAApB3uH,EAAM2uH,WACtE,eAACx1F,GAAA,EAAD,CAAuB52M,UAAqB,IAAVj9E,EAAc+8E,EAAQ4jyB,eAAiB5jyB,EAAQo4kB,UAAjF,SAA6Fz6Z,EAAMroP,MAAnFrS,MAGpB,eAAC6zR,GAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SAA0CvloB,EAAE,8CAC1C,OAACoy1B,QAAD,IAACA,OAAD,EAACA,EAAqB8C,kBACtB,eAACjxlB,GAAA,EAAD,CAAW52M,UAAWF,EAAQo4kB,UAA9B,SAA0CvloB,EAAE,qCAIlD,gBAAC4sa,GAAA,EAAD,kBACGwlb,QADH,IACGA,GADH,UACGA,EAAqBj7f,2BADxB,aACG,EAA0C33W,QAAO,SAAAywJ,GAAG,OAAmC,IAA/BA,EAAIk+gB,0BAC1DlxqB,KAAI,SAACgzJ,EAAK7/J,GAAN,OACH,eAACu9zB,GAAD,CAEE19pB,IAAKA,EACLiltB,gBAAe,OAAE9C,QAAF,IAAEA,OAAF,EAAEA,EAAqB8C,gBACtCjwvB,SAAUitvB,EAAa102B,SAASyyJ,EAAI/6H,IACpC0h1B,eAAgBnB,IAJX,cAAgBrl3B,MAJ7B,OAYGgi3B,QAZH,IAYGA,GAZH,UAYGA,EAAqBj7f,2BAZxB,aAYG,EAA0C33W,QAAO,SAAAywJ,GAAG,OAAmC,IAA/BA,EAAIk+gB,0BAC1DlxqB,KAAI,SAACgzJ,EAAK7/J,GAAN,OACH,eAAC8m3B,GAAD,CAEEjntB,IAAKA,EACLhrC,SAAUitvB,EAAa102B,SAASyyJ,EAAI/6H,IACpC0h1B,eAAgBnB,IAHX,mBAAqBrl3B,cAUtC,eAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ+jyB,yBAA0BnjyB,QAAQ,aAAaQ,QAAS,EAAlG,SACE,gBAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQgkyB,eAArC,UACE,eAAC1jwB,EAAA,EAAD,CAAYE,QAAS,QAArB,SACG3tF,EAAE,iCAEL,eAAC2uG,GAAA,EAAD,CAAY,aAAW,cAAc3+H,KAAK,QAA1C,SACE,eAAC,KAAD,YAIL,OAACoi3B,QAAD,IAACA,OAAD,EAACA,EAAqB8C,kBACrB,eAACpoyB,EAAA,EAAD,CAAMO,UAAWF,EAAQikyB,qBAAsB3jyB,WAAW,EAAMM,QAAQ,gBAAxE,SACE,4CAEIqkyB,QAFJ,IAEIA,OAFJ,EAEIA,EAAqB7lM,iCAClB/sqB,QAAO,SAAC8vnB,GACP,OAAQA,EAAWn7nB,OAAS2xa,MAA4BwpN,EAAWn7nB,OAAS4xa,QAE7E9oa,KAAI,SAACqynB,GAAD,iBACH,eAAC,IAAM9wW,SAAP,UACE,eAAC1xM,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGxB,UAAWF,EAAQkkyB,sBAA5C,SACE,eAAC9vvB,GAAA,EAAD,CAAMzI,QAAO,wBAAE,6BAAAl/G,EAAA,sEACKmg3B,GAA0BzqP,EAAWo5C,cAD1C,OACPjzkB,EADO,OAEb9yE,OAAOi8E,KAAKnJ,EAAK,UAFJ,2CAAf,SAKE,uBAAKpoB,UAAWF,EAAQmkyB,qBAAxB,UACE,eAAC3ivB,GAAA,EAAD,CAAY,aAAW,cAAcz0B,MAAM,UAAU7sB,UAAU,iBAAiBr9E,KAAK,QAArF,SACE,eAAC,KAAD,MAEF,eAACy9G,EAAA,EAAD,CAAYE,QAAQ,YAAYzT,MAAM,cAAc7sB,UAAWF,EAAQqjmB,gBAAvE,gBACGlhD,QADH,IACGA,GADH,UACGA,EAAYm9O,kBADf,iBACG,EAAwBC,uBAD3B,iBACG,EAA0C,UAD7C,aACG,EAA8C5iN,uBAZpC,cAAgBx6B,EAAWp6lB,WAuB5D,gBAAC43C,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASI,QAAQ,gBAAlD,UACE,eAACi+O,EAAA,EAAD,CACE76M,SAAsC,IAA5B8/P,GAAiBn7W,OAC3B0lH,QAAS,eAAC6U,EAAA,EAAD,CAAUJ,QAASuivB,GAAY/iwB,SArMpC,SAAC2rB,EAAOnL,GAChCwivB,GAAcxivB,MAqMMl7F,MAAO/U,EAAE,uCAEX,gBAAC8sD,EAAA,EAAD,WACE,eAAC8rC,EAAA,EAAD,CAAQE,QAAS,kBAAM8gwB,MAAoB1/wB,MAAM,UAAjD,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CAAQE,QAAS,kBAAMojqB,EAAQ,IAAIhirB,MAAM,UAAzC,SACGl6E,EAAE,sBAEL,eAAC44F,EAAA,EAAD,CAAQzH,UAAWqhwB,IAA0C,IAA5BvhgB,GAAiBn7W,OAAcgjH,QAAS,WAChDm4P,GAAiBvvW,MAAK,SAAAwzB,GAAE,OAAIg8U,GAAuBh8U,OArjChG0+0B,IAA0B,GAC1BE,IAAkB,GAClBhigB,KAAcf,kBACZx1Q,GAAKvgD,GAAOg2T,GAAeC,GAAkBC,IAC1B,OAAnBkhgB,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBj7f,sBAAuB,IAC5C3sS,MAAK,SAAAknS,GACDqigB,GAAWh40B,SAAWw20B,GAAiB7ggB,MAC1C92K,OAAM,eAEN4iM,SAAQ,WACLu2e,GAAWh40B,SAAW+30B,IAAkB,OA+iCtB6C,MAEDz8wB,MAAM,UAAUyT,QAAQ,YAP3B,SAQGsjQ,GAAiBvvW,MAAK,SAAAwzB,GAAE,OAAIg8U,GAAuBh8U,MAAOlV,EAAE,uCAAyCA,EAAE,mDAUxH,gBAACiqS,GAAA,EAAD,CAAQrrN,KAAM8zwB,GAA4B95uB,QAAS,kBAAM+5uB,IAA8B,IAAQpiyB,SAAS,KAAKu9B,WAAW,EAAxH,UACE,eAACu+T,GAAA,EAAD,UACE,gBAACxjH,GAAA,EAAD,CAAKx5O,QAAQ,OAAOM,eAAe,gBAAgBzC,WAAW,SAA9D,UACE,eAACugC,EAAA,EAAD,UAAaztF,EAAE,+CACf,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS,kBAAM65vB,IAA8B,IAAQ3i3B,KAAK,QAAtE,SACE,eAAC,KAAD,WAIN,eAACk6T,GAAA,EAAD,UACG4ojB,GAAiB712B,KAAI,SAAC+8W,EAAiB5pX,GACtC,IAAM65H,GAAc6nP,KAAciI,oBAAoBC,EAAiBjpO,GAAe1f,IACtF,OACE,gBAACw3L,GAAA,EAAD,CAAiBx5O,QAAQ,OAAOnC,WAAW,SAAS+6oB,GAAI,EAAG56oB,UAAW48C,EAAa98C,EAAQokyB,mBAAqB,GAAhH,UACE,eAAClhvB,EAAA,EAAD,CACEJ,QAAS2ivB,GAAwBp12B,SAASw8W,EAAgB9kV,IAC1Di8E,SAAU8Y,EACVxa,SAAU,SAACpzG,GACLA,EAAE4kB,OAAOgvG,QACX4ivB,GAA2B,GAAD,mBAAKD,IAAL,CAA8B54f,EAAgB9kV,MAExE290B,GAA2BD,GAAwBpz2B,QAAO,SAAA01B,GAAE,OAAIA,IAAO8kV,EAAgB9kV,UAI7F,eAAC2zR,GAAA,EAAD,CAAKwxjB,GAAI,EAAGhryB,QAAQ,OAApB,SACE,eAACo+B,EAAA,EAAD,CAAYpgC,UAAW48C,EAAa98C,EAAQqkyB,oBAAsBrkyB,EAAQskyB,mBAA1E,SACGz3f,EAAgB1uP,QAAQqlP,0BAA4BqJ,EAAgB1uP,QAAQslP,2BAdzExgX,QAqBhB,gBAACi6T,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQE,QAAS,kBAAM65vB,IAA8B,IAAQz4wB,MAAM,UAAnE,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACEE,QAAS48vB,GACTx7wB,MAAM,UACNyT,QAAQ,YACRwD,UAAW2hwB,GAAiBpx2B,MAAK,SAAAgoE,GAAC,OAAIooS,KAAciI,oBAAoBrwS,EAAGqnE,GAAe1f,OAJ5F,SAMGrxG,EAAE,kCAMb,gBAACiqS,GAAA,EAAD,CAAQrrN,KAAM+0wB,GAAwB/6uB,QAAS,kBAAMg7uB,IAA0B,IAAQrjyB,SAAS,KAAKu9B,WAAW,EAAhH,UACE,eAACu+T,GAAA,EAAD,UACE,gBAACxjH,GAAA,EAAD,CAAKx5O,QAAQ,OAAOM,eAAe,gBAAgBzC,WAAW,SAA9D,UACE,eAACugC,EAAA,EAAD,UAAaztF,EAAE,wDACf,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS,kBAAM86vB,IAA0B,IAAQ5j3B,KAAK,QAAlE,SACE,eAAC,KAAD,WAIN,eAACk6T,GAAA,EAAD,UACG2pjB,GACC,eAAChrjB,GAAA,EAAD,CAAKx5O,QAAQ,OAAOM,eAAe,SAASzC,WAAW,SAAS+6oB,GAAI,EAApE,SACE,eAACpyZ,EAAA,EAAD,MAGF,gBAAC02H,GAAA,EAAD,CAAOh9U,MAAO,CAAEuf,OAAQ,oBAAqBpT,aAAc,MAAOi9M,eAAgB,SAAlF,UACE,eAAC6zH,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,UAAYjkQ,EAAE,uCACbo21B,KAAuBn52B,KAAI,SAAA6tP,GAG1B,OACE,gBAAC,IAAM0zB,SAAP,WACE,eAACyF,GAAA,EAAD,UAAYjkQ,EAAE,mBAAD,OAJM,CAAExT,KAAM,oBAAqB+iT,KAAM,oBAAqBE,KAAM,qBAIjC3kE,EAAM0uH,cACtD,eAACv1F,GAAA,EAAD,UAAYjkQ,EAAE,mBAAD,OAJK,CAAExT,KAAM,mBAAoB+iT,KAAM,mBAAoBE,KAAM,oBAI/B3kE,EAAM0uH,gBAFlC1uH,EAAM0uH,kBAQnC,eAACozE,GAAA,EAAD,UA9rCsB,WAChC,IAAM39Y,EAAO,GACPkiU,GAAyC,OAAnBihgB,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBj7f,sBAAuB,GAClEs/f,EAAoBL,KAgC1B,OA9BAjlgB,EAAoBxwW,SAAQ,SAAC0wW,GAAS,IAAD,IACnC,GAAKH,GAAuBG,EAAIn8U,KAAQ+7U,GAAiBzzW,SAAS6zW,EAAIn8U,IAAtE,CAEA,IAAMol1B,GAAoB,UAAAtpgB,GAAcK,EAAIn8U,WAAlB,eAAuBrgB,MAAM,CAAC,cAAe,qBAA7C,UACrBm8V,GAAcK,EAAIn8U,WADG,aACrB,EAAuBl9B,IAAI,mBAAoB,KAG9Cui3B,EAAsC,GACtC1ogB,EAAcb,GAAcK,EAAIn8U,IAClC28U,GACF4kgB,EAAkB912B,SAAQ,SAAAmqP,GACxByvnB,EAAezvnB,EAAM0uH,UAAY3H,EAAYh9V,MAAM,CAAC,cAAe,QAASigW,GAAekhgB,GAAalrnB,EAAM0uH,YACzG3H,EAAYh9V,MAAM,CAAC,QAASigW,GAAekhgB,GAAalrnB,EAAM0uH,cAKvE,IAAMJ,GAAmB,OAAH/H,QAAG,IAAHA,OAAA,EAAAA,EAAK+H,eAAgBx2W,KAAK6tC,MAAM4gU,EAAI+H,eAAiB,KACrEohgB,EAAqC,GAC3C/D,EAAkB912B,SAAQ,SAAAmqP,GACJ,IAAD,IAEZ,EAFHsuH,EACFohgB,EAAc1vnB,EAAM0uH,UAApB,oBAAgCJ,EAActuH,EAAMvyP,YAApD,aAAgC,EAA0B5I,aAA1D,QAAmE,KAEnE6q3B,EAAc1vnB,EAAM0uH,UAApB,UAAgCnI,EAAIvmH,EAAMvyP,YAA1C,QAAkD,QAItD02C,EAAK5uC,KAAK,CAAEi62B,oBAAmBC,iBAAgBC,sBAG1Cvr0B,EA4pCMwr0B,GAA4Bx92B,KAAI,SAAC4wE,EAAMz9E,GAAP,OAC/B,gBAACs8b,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,UAAYp2M,EAAKysyB,oBAChBlE,KAAuBn52B,KAAI,SAAA6tP,GAAK,eAC/B,gBAAC,IAAM0zB,SAAP,WACE,eAACyF,GAAA,EAAD,oBAAYp2M,EAAK0syB,eAAezvnB,EAAM0uH,iBAAtC,QAAmD,MACnD,eAACv1F,GAAA,EAAD,oBAAYp2M,EAAK2syB,cAAc1vnB,EAAM0uH,iBAArC,QAAkD,QAF/B1uH,EAAM0uH,eAHhBppX,aAczB,gBAACi6T,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQE,QAAS,kBAAM86vB,IAA0B,IAAQ15wB,MAAM,UAA/D,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACEE,QAAS,WAAQ86vB,IAA0B,GAAQ4C,MACnDt8wB,MAAM,UACNyT,QAAQ,YACRwD,SAAU0iwB,GACVtkwB,MAAO,CAAE0J,gBAAiB46vB,QAAiB9j3B,EAAY,UAAWmqG,MAAO,QAL3E,SAOGl6E,EAAE,6CAQAsf,kBAAKqy0B,IC9uDd+I,GAAmC,SAAC,GAAoC,IAAlC9I,EAAiC,EAAjCA,kBAAmBh5uB,EAAc,EAAdA,QACvDh6F,EAAW2F,wBACjB,EAA4BoO,oBAAS,GAArC,mBAAOouG,EAAP,KAAe6poB,EAAf,KACA,EAAsBj4uB,mBAAS,IAA/B,mBAAOojG,EAAP,KAAY4kuB,EAAZ,KACA,EAA0Dho0B,oBAAU,GAApE,mBAAOio0B,EAAP,KAA8BC,EAA9B,KACA,EAAgClo0B,mBAAS,MAAzC,mBAAOy0E,EAAP,KAAiBs9J,EAAjB,KACA,EAAkC/xO,oBAAS,GAA3C,mBAAOmo0B,EAAP,KAAkBC,EAAlB,KACA,EAAkDpo0B,oBAAS,GAA3D,mBAAOqo0B,EAAP,KAA0BC,EAA1B,KACA,EAAsDto0B,mBAAS,GAA/D,mBAAOuo0B,EAAP,KAA4BC,EAA5B,KACA,EAAgCxo0B,mBAASi/zB,GAAlCwJ,EAAP,oBACM7/wB,EAAM51D,sBAAYoY,gBAClB/C,EAAQrV,sBAAYoV,gBAClB/6B,EAAM+xB,YAAe,gBAArB/xB,EACFsmM,EAAU3gL,sBAAY24N,aAAkB,CAAC,QAEzCzoK,EAAUsnB,sBAAW,wBAAC,qCAAAvjH,EAAA,0DACtBwh3B,EADsB,gBAExBD,EAAuBC,GACvBH,GAAqB,GAHG,8BAKlBz9vB,EAAU,CACd8oG,UACA5sH,OAAQ,CAAC,aACTgkB,MAAO,KARe,SAUe4pT,KAAwBa,2BAA2B5sU,EAAKvgD,EAAOwiE,GAV9E,cAUlBy5P,EAVkB,OAWlBokgB,EAXkB,OAWiBpkgB,QAXjB,IAWiBA,OAXjB,EAWiBA,EAA0Bz3W,QAAO,SAACquE,GAAD,OACxEA,EAAKq4U,cAAc5/L,UAAYA,GACf,cAAhBz4I,EAAK6rB,UAbiB,UAeWk2mB,KAAwB83D,eAAensqB,EAAKvgD,EAAOsrK,GAf9D,QAelB0rJ,EAfkB,OAgBlBspgB,EAAoB,IACF,OAApBtpgB,QAAoB,IAApBA,OAAA,EAAAA,EAAsBl8W,QAAS,GACjCk8W,EAAqBrxW,SAAQ,SAAAkH,GAC3Byz2B,EAAkBj72B,KAAKwH,EAAO4/vB,qBAGF,OAAhC4zG,QAAgC,IAAhCA,KAAkC162B,SAAQ,SAAAktE,GACpCytyB,EAAkB992B,SAASqwE,EAAK34C,IAClC24C,EAAK0tyB,mBAAoB,EAEzB1tyB,EAAK0tyB,mBAAoB,KAG7BZ,EAAOU,GA7BiB,QA+B1BzwF,GAAU,GA/BgB,4CAgCzB,CAACrvrB,EAAKvgD,EAAOsrK,IAEhBlsL,qBAAU,WACRy7D,MACC,IAEH,IAgBM2lxB,EAAkB,yCAAG,uBAAA5h3B,EAAA,sDACzBmh3B,GAAa,GACbr2lB,EAAY,MAFa,2CAAH,qDAKlB+2lB,EAAuB,yCAAG,uBAAA7h3B,EAAA,0DACC,IAA3Bgh3B,EAD0B,gCAEtBtzc,KAAwB7qT,OAAOlhB,EAAKvgD,EAAO4/zB,GAFrB,OAG5B/kxB,IAH4B,OAK9BklxB,GAAa,GALiB,2CAAH,qDAQvBnB,EAAmB,WACnBwB,GACFx80B,EAAS,IAAIw0K,KAA8B,CACzC15G,OAAQ,QACRogxB,4BAA6BlI,EAC7BljK,cAAepof,KAGnB1tF,KAGI8ivB,EAA2B,SAAC7B,GAChCoB,GAAqB,GACrBE,EAAuB,GACnBC,EACFxB,IACSC,GACTjhvB,KAIJ,OAAIwivB,EAEA,eAAC,GAAD,CACE9ngB,cAAe4ngB,EACft8wB,KAAMo8wB,EACNpivB,QAAS8ivB,EACT9J,kBAAmBA,IAMvB,uCACE,eAACvlc,GAAA,EAAD,CAAasxU,mBAAmB,EAAhC,SACE,gBAAC7wqB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,KAAKD,MAAM,SAA/B,SACG1tF,EAAE,6CAEL,eAAC2uG,GAAA,EAAD,CAAY,aAAW,QAAQ7V,QAAS8gwB,EAAxC,SACE,eAAC,KAAD,YAIH74tB,GACD,eAACmpK,GAAA,EAAD,UACE,eAAC89W,GAAA,EAAD,MAGFjnhB,GACA,uCACE,eAACmpK,GAAA,EAAD,UACE,eAACo6X,GAAA,EAAD,UACE,gBAAC/3P,GAAA,EAAD,WACE,eAACC,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,IACA,eAACA,GAAA,EAAD,IACA,eAACA,GAAA,EAAD,UAAYjkQ,EAAE,sCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,qCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,uCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,mCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,yCACd,eAACikQ,GAAA,EAAD,UAAYjkQ,EAAE,8BAGlB,eAAC4sa,GAAA,EAAD,UAEI72S,EAAI94I,KAAI,SAACgzJ,EAAK7/J,GAAN,cA5FH8kC,EA4FG,OACN,gBAACw3Z,GAAA,EAAD,WACE,gBAACzoK,GAAA,EAAD,WACIh0H,EAAIsrtB,mBACJ,eAAC,KAAD,CAAiBrhxB,MAAM,eAEtB+1D,EAAIsrtB,mBACL,kCAGJ,eAACt3lB,GAAA,EAAD,UACE,eAACjpK,GAAA,EAAD,CAAQP,IAAG,OAAEw1C,QAAF,IAAEA,GAAF,UAAEA,EAAKkrN,eAAP,aAAE,EAAclN,KAA3B,SAAkC0tgB,GAAoB,OAAC1rtB,QAAD,IAACA,GAAD,UAACA,EAAKkrN,eAAN,aAAC,EAAc96T,WAEvE,eAAC4jO,GAAA,EAAD,WAAe,OAAHh0H,QAAG,IAAHA,GAAA,UAAAA,EAAKkrN,eAAL,eAAc96T,QAAS,MACnC,eAAC4jO,GAAA,EAAD,WAAe,OAAHh0H,QAAG,IAAHA,GAAA,UAAAA,EAAKi2P,qBAAL,mBAAoB4qR,YAApB,eAA0BzwnB,QAAS,MAC/C,eAAC4jO,GAAA,EAAD,WAAe,OAAHh0H,QAAG,IAAHA,OAAA,EAAAA,EAAK/6H,IAAL,oBAAgB+6H,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAK/6H,IAAO,MACxC,eAAC+uP,GAAA,EAAD,WAAe,OAAHh0H,QAAG,IAAHA,OAAA,EAAAA,EAAK+zP,WAAYr0S,KAAM,OAACsgD,QAAD,IAACA,OAAD,EAACA,EAAK+zP,WAAWt1W,OAAO,cAAgB,MAC3E,eAACu1O,GAAA,EAAD,WAAe,OAAHh0H,QAAG,IAAHA,OAAA,EAAAA,EAAK2uK,WAAYjvN,KAAM,OAACsgD,QAAD,IAACA,OAAD,EAACA,EAAK2uK,WAAWlwR,OAAO,cAAgB,MAC3E,eAACu1O,GAAA,EAAD,UACE,eAACrrK,EAAA,EAAD,CAAQE,SA/GT5jF,EA+G+B,OAAC+6H,QAAD,IAACA,OAAD,EAACA,EAAK/6H,GA/G9B,SAACkmG,GAC7By/uB,EAAyB3l1B,GACzBwvP,EAAYtpJ,EAAMziB,iBA6G6Cze,MAAM,UAA/C,SACGl6E,EAAE,kDAnBM5vB,eA6B3B,gBAACw0R,GAAA,EAAD,CACEx9J,SAAUA,EACVxoB,KAAMttG,QAAQ81H,GACdwR,QAlIc,WACtB8rJ,EAAY,MACZm2lB,GAA0B,IA6HpB,UAKE,eAACrqwB,GAAA,EAAD,CAAUsI,QA1HS,WAC3BqiwB,EAAuBP,GACvBK,GAAqB,GACrBv2lB,EAAY,OAuHJ,SAA0C1kQ,EAAE,yCAC5C,eAACwwF,GAAA,EAAD,CAAUsI,QAAS0iwB,EAAnB,SAAwCx71B,EAAE,yBAE5C,gBAACiqS,GAAA,EAAD,CAAQrrN,KAAMk8wB,EAAWlivB,QAAS,kBAAMmivB,GAAa,IAAQ5uc,sBAAsB,EAAnF,UACE,gBAACjiH,GAAA,EAAD,WACGlqS,EAAE,4CADL,OAGA,gBAACqqS,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CAAQE,QAAS,kBAAMiiwB,GAAa,IAAQ7gxB,MAAM,UAAlD,SACGl6E,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CAAQE,QAAS2iwB,EAAyBvhxB,MAAM,UAAhD,SACGl6E,EAAE,iCAMb,eAAC,GAAD,CACEszV,cAAe4ngB,EACft8wB,KAAMo8wB,EACNpivB,QAAS8ivB,EACT9J,kBAAmBA,QAMZty0B,kBAAKo70B,IAEpB,SAASiB,GAAqBt7zB,GAC5B,IAAKA,EACH,MAAO,GAGT,IALmC,EAK7Bi4F,EAAQj4F,EAAMrN,MAAM,KAAK,GAAGA,MAAM,UACpCwnE,EAAW,GANoB,eAQhB89B,GARgB,IAQnC,2BAA0B,CAAC,IAAhBuE,EAAe,QACpBA,EAAK/mJ,OAAS,IAChB0kH,GAAYqiC,EAAK,GAAGve,gBAVW,8BAcnC,OAAO9jB,E,IC3OEohwB,GAMOC,G,yEAbZC,GAA4B,CAChCns3B,MAAO,iBACPwiX,UAAW,KACX96G,cAAe,EACf0knB,aAAa,I,SAGJH,K,oBAAAA,E,4CAAAA,E,qBAAAA,Q,cAMOC,K,kBAAAA,E,UAAAA,E,eAAAA,Q,KAMlB,IAAMG,GAAgB,CAACH,GAAej1yB,QAASi1yB,GAAeh8qB,IAAKg8qB,GAAeI,OAU5EC,GAAoC7+1B,iBAAO,CAC/Cjb,OAAO,EACPkyP,SAAS,EACT6nnB,WAAY,GACZC,aAAcP,GAAej1yB,QAC7Bj3E,MAAO,KAQH8zH,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhqnB,MAAO,KACPgB,SAAU,OACV41C,cAAe,IAEjBk2vB,gBAAiB,CACfvtvB,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MACxCuC,aAAc,EACd4L,aAAcn4C,EAAMZ,QAAQ,IAE9B+tyB,qBAAsB,CACpBvsyB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5BguyB,kBAAmB,CACjBj1vB,aAAcn4C,EAAMZ,QAAQ,IAE9Bs0P,KAAM,CACJrzP,OAAQ,GAEVozP,cAAe,CACb73D,UAAW,IACXywC,UAAW,QAEbgoD,QAAS,CACPvqP,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAO,QAETw6O,UAAW,CACT74M,SAAU,WACV1iG,KAAM,EACNg6G,QAAS,QAo9BEg0vB,GAh9BwC,SAAC,GAGjD,IAFL59wB,EAEI,EAFJA,KACAg6B,EACI,EADJA,QAEMh6F,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KACVt0C,EAAQwjD,eACR7xE,EAAgBkgK,eAChBmK,EAAWxlL,sBAAY24N,aAAkB,CAAC,cAC1Cm+mB,EAA4B920B,sBAAYiyN,eAE9C,EAAoCl/N,IAAMia,SAAS,GAAnD,mBAAO6zU,EAAP,KAAmBmW,EAAnB,KACA,EAAgCjkW,IAAMia,UAAS,GAA/C,mBAAO+p0B,EAAP,KAAiBC,EAAjB,KACA,EAA4Cjk1B,IAAMia,SAASip0B,GAAsBgB,UAAjF,mBAAOrygB,EAAP,KAAuBsygB,EAAvB,KACA,EAAgDnk1B,IAAMia,SAAStrC,wBAA/D,mBAAOy12B,EAAP,KAAyBC,EAAzB,KACA,EAA4Crk1B,IAAMia,SAAStrC,wBAA3D,mBAAO212B,EAAP,KAAuBC,EAAvB,KACA,EAAoDvk1B,IAAMia,SAAStrC,wBAAnE,mBAAOg3lB,EAAP,KAA2BC,EAA3B,KACA,EAAgD5lkB,IAAMia,SAAStrC,wBAA/D,mBAAO4pW,EAAP,KAAyB0sO,EAAzB,KAEA,EAAkDjljB,IAAMia,SAAS,IAAjE,oBAAOuq0B,GAAP,MAA0BC,GAA1B,MACA,GAA8Czk1B,IAAMia,SAAS,IAA7D,qBAAOyq0B,GAAP,MAAwBC,GAAxB,MACA,GAAoD3k1B,IAAMia,SAAS,IAAnE,qBAAO2q0B,GAAP,MAA2BC,GAA3B,MACA,GAA8D7k1B,IAAMia,SAAS,IAA7E,qBAAO6q0B,GAAP,MAAgCC,GAAhC,MAEA,GAAsC/k1B,IAAMia,SAASt1B,iBAAO,KAA5D,qBAAOqg2B,GAAP,MAAoBC,GAApB,MACA,GAAkCjl1B,IAAMia,SAASt1B,iBAAO,KAAxD,qBAAOug2B,GAAP,MAAkBC,GAAlB,MACA,GAAwCnl1B,IAAMia,SAASt1B,iBAAO,KAA9D,qBAAOg2lB,GAAP,MAAqByqQ,GAArB,MACA,GAAkDpl1B,IAAMia,SAASt1B,iBAAO,KAAxE,qBAAO0g2B,GAAP,MAA0BC,GAA1B,MAEA,GAA8Ctl1B,IAAMia,UAAS,GAA7D,qBAAOsr0B,GAAP,MAAwBC,GAAxB,MAEMC,GAA4Czl1B,IAAMyG,OAAO9hB,iBAAO,KAChE+g2B,GAA8B1l1B,IAAMyG,OAAO9hB,iBAAO,KACxD,GAA0Cqb,IAAMia,SAASt1B,iBAAO,CAAC6+1B,MAAjE,qBAAOmC,GAAP,MAAsBC,GAAtB,MAEA,GAAwD5l1B,IAAMia,UAAS,GAAvE,qBAAO4r0B,GAAP,MAA6BC,GAA7B,MAEMC,GAAqB/l1B,IAAM+B,SAAQ,WACvC,OAAQ8vU,GACN,KAAKqxgB,GAAsBgB,SACzB,OAAiC,IAA1BE,EAAiB9s3B,KAC1B,KAAK4r3B,GAAsB8C,sBACzB,OAA+B,IAAxB1B,EAAeht3B,MAA0C,IAA5BqumB,EAAmBrumB,KACzD,KAAK4r3B,GAAsB+C,SACzB,OAAiC,IAA1B1tgB,EAAiBjhX,KAC1B,QACE,OAAO,KAEV,CAACu6W,EAAgBuygB,EAAkBE,EAAgB3+Q,EAAoBptP,IAgFpE2tgB,GAAa,YA9EC,WAClB,IAAIC,EAAiB3y2B,iBACjB4y2B,EAAe5y2B,iBACf6y2B,EAAkB7y2B,iBAClB8y2B,EAAuB9y2B,iBAEvB2/W,EAAWxuW,iBAAO,IAClByuW,EAAczuW,iBAAO,IACrB4h2B,EAAmB5h2B,iBAAO,IAE1B6h2B,EAA4Bhz2B,iBAC5Biz2B,GAAsC,EAElC,OAARh0pB,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAAkB,IAAD,EACrCq/G,GAAe,UAAA/+G,EAAQ3/P,IAAI,uBAAZ,eAA6By6H,SAAUzyG,EAAE,mCACxDmyV,EAAYx6G,EAAQ3/P,IAAI,aACxB8zH,EAAW6rI,EAAQ3/P,IAAI,WAAYqlB,iBAAO,KAC5CyuG,EAASpqH,MAAK,SAAAupH,GAAO,OAAIA,EAAQjzH,IAAI,MAAQ,OAC/C6m3B,EAAiBA,EAAex+2B,KAAKgd,iBAAO,CAAE1tB,MAAO+mX,EAAcvE,YAAW96G,mBAGhFvrI,EAASnrH,SAAQ,SAACsqH,EAASiD,GACzB,IAAMg5F,EAAUj8F,EAAQjzH,IAAI,WACtB88B,EAAam2F,EAAQjzH,IAAI,YACzBm1H,GAAiBlC,EAAQjzH,IAAI,kBAAoB,KAAKsmI,cAE5D,GAAIrT,EAAQjzH,IAAI,MAAQ,EAAG,CACpB6zX,EAAS3zX,IAAIgvN,KAChB43pB,EAAeA,EAAaz+2B,KAAKgd,iBAAO,CAAE1tB,MAAOs7H,EAAQjzH,IAAI,UAAY,IAAKkvN,aAC9E2kK,EAAWA,EAASlwX,IAAIurN,EAAS,IAE9B4kK,EAAY5zX,IAAI48B,KACnBiq1B,EAAkBA,EAAgB1+2B,KAAKgd,iBAAO,CAAE1tB,MAAOs7H,EAAQjzH,IAAI,iBAAmB,IAAK88B,gBAC3Fg3V,EAAcA,EAAYnwX,IAAIm5B,EAAY,IAG5C,IAAIsq1B,GAA6B,EAC7BH,EAAiB/m3B,IAAIi1H,IACvBiyvB,EAA4BH,EAAiBjn3B,IAAIm1H,GACjD6xvB,EAAuBA,EAAqB762B,MAC1C,CAACi72B,EAA2B,mBAC5BJ,EAAqBnq2B,MAAM,CAACuq2B,EAA2B,oBAAoB/+2B,KAAK4qH,EAAQjzH,IAAI,sBAG9Fon3B,EAA4BJ,EAAqBhv3B,KACjDiv3B,EAAmBA,EAAiBtj3B,IAAIwxH,EAAeiyvB,GACvDJ,EAAuBA,EAAqB3+2B,KAAKgd,iBAAO,CAAE1tB,MAAOw9H,EAAekyvB,gBAAiB,CAACp0vB,EAAQjzH,IAAI,mBAAoBk9B,GAAG,GAAD,OAAKmiO,EAAL,YAAqBnpI,OAG3J,IAAMknP,EAAkBnqP,EAAQjzH,IAAI,cAAgBizH,EAAQjzH,IAAI,oBAC5DizH,EAAQjzH,IAAI,wBAA0Bo9W,IAAoB+pgB,KACxD/pgB,IACF+pgB,EAAqC/pgB,IAEJ,IAA/BgqgB,IACFF,EAA4BA,EAA0B7+2B,KAAK++2B,YAOrEzB,GAAekB,GACfhB,GAAaiB,GACbhB,GAAgBiB,GAChBf,GAAqBgB,GAEjBE,EAA0Blv3B,KAAO,IACnC2tlB,EAAoBuhS,EAA0Bt/2B,QAAO,SAACutI,EAAK/8I,GAAN,OAAgB+8I,EAAIxxI,IAAIqj3B,EAAqBnq2B,MAAM,CAACzkB,EAAO,OAAQ4u3B,EAAqBhn3B,IAAI5H,MAASiX,yBAC1Jw12B,EAAkBjB,GAAsB+C,WAG1CjkxB,KAAmB9rE,mBAAgB0w1B,kBAAmBx+zB,EAAc,CAClEy+zB,wBAAwB,EACxBC,4BAA6BR,EAAqBhv3B,KAAO,KAK3Dyv3B,GACKhD,IACHI,EAAkBjB,GAAsBgB,UACxClixB,KAAmB9rE,mBAAgB0w1B,kBAAmBx+zB,EAAc,CAClEy+zB,wBAAwB,EACxBC,6BAA6B,OAuGnC9m1B,IAAM0B,WAAU,WACVwkE,EACFggxB,MAEA/B,EAAkBjB,GAAsBgB,UACxCG,EAAoB112B,wBACpB412B,EAAkB512B,wBAClBi3lB,EAAsBj3lB,wBACtBs2kB,EAAoBt2kB,wBACpB812B,GAAqB,IACrBE,GAAmB,IACnBE,GAAsB,IACtBE,GAA2B,IAC3B9gf,EAAc,GACdggf,GAAY,GACZuB,IAAmB,GACnBC,GAA0Cpi1B,QAAU1e,iBAAO,IAC3D+g2B,GAA4Bri1B,QAAU1e,iBAAO,IAC7Cih2B,GAAiBjh2B,iBAAO,CAAC6+1B,MACzBsC,IAAwB,MAEzB,CAAC5/wB,IAEJlmE,IAAM0B,WAAU,WACd,OAAQmwU,GACN,KAAKqxgB,GAAsBgB,SACzBK,EAAkB512B,wBAClBi3lB,EAAsBj3lB,wBACtBs2kB,EAAoBt2kB,wBACpB622B,IAAmB,GACnB,MACF,KAAKtC,GAAsB8C,sBACzB3B,EAAoB112B,wBACpBs2kB,EAAoBt2kB,wBACpB,MACF,KAAKu02B,GAAsB+C,SACzB5B,EAAoB112B,wBACpB412B,EAAkB512B,wBAClBi3lB,EAAsBj3lB,wBACtB622B,IAAmB,GACnB,MACF,QACEnB,EAAoB112B,wBACpB412B,EAAkB512B,wBAClBi3lB,EAAsBj3lB,wBACtBs2kB,EAAoBt2kB,2BAEvB,CAACkjW,IAEJ7xU,IAAM0B,WAAU,WACVmwU,IAAmBqxgB,GAAsB8C,uBAC3CR,IAAmB,KAEpB,CAAClB,EAAgB3+Q,IAEpB,IAAM36K,GAAa,YAzJA,WACjB,IAAIg8b,EAAwBri2B,iBAAO,IAC7Bsi2B,EAAsB,IAAI7s3B,IAE1B8s3B,EAAsB,SAAC7qgB,IACb,OAAVA,QAAU,IAAVA,OAAA,EAAAA,EAAY/kX,MAAO,GACrB+kX,EAAWp0W,SAAQ,SAACmqP,IACbA,EAAM9yP,IAAI,cAAgB8yP,EAAM9yP,IAAI,aACvC2n3B,EAAoB/s2B,IAAIk4O,EAAM9yP,IAAI,aAM1C,GAAIuyW,IAAmBqxgB,GAAsBgB,SAC3CE,EAAiBn82B,SAAQ,SAACg3P,GACxB,IAAMN,EAAeM,EAAQ3/P,IAAI,gBAC3B8zH,EAAWq/F,EAASt2M,MAAM,CAACwiP,EAAc,YAAah6O,iBAAO,KAC/Dwi2B,GAAuB,EAC3B/zvB,EAASnrH,SAAQ,SAACsqH,GACZA,EAAQjzH,IAAI,MAAQ,IACtB0n3B,EAAwBA,EAAsB/j3B,IAAIsvH,EAAQjzH,IAAI,kBAAmB,GAC5E6n3B,IACHD,EAAoBz0pB,EAASt2M,MAAM,CAACwiP,EAAc,kBAAmB,cAAeh6O,iBAAO,MAC3Fwi2B,GAAuB,eAK1B,GAAIt1gB,IAAmBqxgB,GAAsB+C,SAClDe,EAAwBzugB,EAAiBrxW,QAAO,SAACutI,EAAKliB,GAIpD,OAHAA,EAAQjzH,IAAI,mBAAmB2I,SAAQ,SAACyxW,GACtCjlO,EAAMA,EAAIxxI,IAAIy2W,EAAgB,MAEzBjlO,IACN9vH,iBAAO,KAEV8tM,EAASxqN,SAAQ,SAACg3P,GAChB,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,IAAY,OAAR8zH,QAAQ,IAARA,OAAA,EAAAA,EAAU97H,MAAO,EAAG,CACtB,IAAI6v3B,GAAuB,EAC3B/zvB,EAASnrH,SAAQ,SAACsqH,GACZy0vB,EAAsBxn3B,IAAI+yH,EAAQjzH,IAAI,qBAAuB6n3B,IAC/DD,EAAoBjonB,EAAQ9iP,MAAM,CAAC,kBAAmB,cAAewI,iBAAO,MAC5Ewi2B,GAAuB,eAK1B,GAAIt1gB,IAAmBqxgB,GAAsB8C,sBAAuB,CACzE,IAAIoB,EACAC,EACA/C,EAAeht3B,KAAO,EACpBqumB,EAAmBrumB,KAAO,GAC5B8v3B,EAAQ9C,EAAep92B,QAAO,SAACutI,EAAK/f,GAClC,OAAO+f,EAAIxxI,IACTyxH,EAAMp1H,IAAI,WACVqmmB,EAAmBz+lB,QAAO,SAACiiR,EAAMx2J,GAAP,OAAoBw2J,EAAKlmR,IAAI0vH,EAASrzH,IAAI,cAAe,KAAIqlB,iBAAO,QAE/FA,iBAAO,KACV0i2B,EAAmB,SAAC74pB,EAASpyL,GAAV,OAAyBgr1B,EAAM9q2B,MAAM,CAACkyM,EAASpyL,OAElEgr1B,EAAQ9C,EAAep92B,QAAO,SAACutI,EAAK/f,GAAN,OAAgB+f,EAAIxxI,IAAIyxH,EAAMp1H,IAAI,WAAY,KAAIqlB,iBAAO,KACvF0i2B,EAAmB,SAAC74pB,EAASpyL,GAAV,OAAyBgr1B,EAAM5n3B,IAAIgvN,MAGxD44pB,EAAQzhR,EAAmBz+lB,QAAO,SAACutI,EAAK9hB,GAAN,OAAmB8hB,EAAIxxI,IAAI0vH,EAASrzH,IAAI,cAAe,KAAIqlB,iBAAO,KACpG0i2B,EAAmB,SAAC74pB,EAASpyL,GAAV,OAAyBgr1B,EAAM5n3B,IAAI48B,KAGxDq2L,EAASxqN,SAAQ,SAACg3P,GAChB,IAAM7rI,EAAW6rI,EAAQ3/P,IAAI,YAC7B,IAAY,OAAR8zH,QAAQ,IAARA,OAAA,EAAAA,EAAU97H,MAAO,EAAG,CACtB,IAAI6v3B,GAAuB,EAC3B/zvB,EAASnrH,SAAQ,SAACsqH,GACZA,EAAQjzH,IAAI,MAAQ,GAAK+n3B,EAAiB90vB,EAAQjzH,IAAI,WAAYizH,EAAQjzH,IAAI,eAChF0n3B,EAAwBA,EAAsB/j3B,IAAIsvH,EAAQjzH,IAAI,kBAAmB,GAC5E6n3B,IACHD,EAAoBjonB,EAAQ9iP,MAAM,CAAC,kBAAmB,cAAewI,iBAAO,MAC5Ewi2B,GAAuB,WAQnC1B,GAA0Cpi1B,QAAU2j1B,EACpDtB,GAA4Bri1B,QAAU1e,iBAAO,YAAIsi2B,GAAqBj/2B,MAAK,SAAC9G,EAAGC,GAAJ,OAAUD,EAAE4hO,cAAc3hO,OAAG9J,EAAW,CAAEiw3B,YAAa,aAE9HN,EAAsB1v3B,KAAO,GAC/B2sY,EAAc,GACdggf,GAAY,IAEZuB,IAAmB,GA4DrB+B,IAUIC,GAAsB,SAACC,EAAUx2D,GACrC,IAAMxhkB,EAASj8O,OAAKF,OAAOm02B,GAAY,SAAClx0B,GAAD,OAAUA,EAAKj3C,IAAI,UAAW,SAACi3C,GAAD,OAAUA,EAAKt/C,OAC9Em6O,EAAkB6/kB,EAAKrrrB,cAC7B,OAAIwrG,EACKq2oB,EAAS3g3B,QAAO,SAAAyvC,GAAI,uBAAIk5M,EAAOl5M,UAAX,aAAI,EAAcqvF,cAAc9gI,SAASssO,MAE/Dq2oB,GAGHC,GAAmB,SAACjs3B,GACxB,IAAIks3B,EACAF,EACA5n3B,EACAmgH,EACA+rD,EACJ,OAAQtwK,GACN,IAAK,WACHks3B,EAAkBvD,EAClBqD,EAAWzC,GACXnl3B,EAAM,eACNmgH,EAAQwkwB,GACRz4sB,EAASs4sB,EACT,MACF,IAAK,SACHsD,EAAkBrD,EAClBmD,EAAWvC,GACXrl3B,EAAM,UACNmgH,EAAQ0kwB,GACR34sB,EAASw4sB,EACT,MACF,IAAK,aACHoD,EAAkBhiR,EAClB8hR,EAAW9sQ,GACX96mB,EAAM,aACNmgH,EAAQ4kwB,GACR74sB,EAAS65b,EACT,MACF,IAAK,WACH+hR,EAAkBpvgB,EAClBkvgB,EAAWpC,GACXxl3B,EAAM,KACNmgH,EAAQ8kwB,GACR/4sB,EAASk5a,EAIb,IAAM2iS,EAAmBJ,GAAoBC,EAAUznwB,GACjD6nwB,EAAaD,EAAiB5+2B,MAAK,SAAAutC,GAAI,OAAIox0B,EAAgBno3B,IAAI+2C,EAAKj3C,IAAIO,OAE9EksK,GAAO,SAAC+7sB,GACN,IAAIC,EAAcD,EAUlB,OATID,EACFD,EAAiB3/2B,SAAQ,SAACsuC,GACxBwx0B,EAAcA,EAAYhkwB,OAAOxtE,EAAKj3C,IAAIO,OAG5C+n3B,EAAiB3/2B,SAAQ,SAACsuC,GACxBwx0B,EAAcA,EAAY9k3B,IAAIszC,EAAKj3C,IAAIO,GAAM02C,MAG1Cwx0B,MAkBLC,GAAyB,SAA6BC,EAAqBC,EAAgB982B,GAC/Fw62B,IAAiB,SAACuC,GAEhB,IAAInxS,EAAamxS,EAAY182B,MAAM,CAACw82B,EAAaC,GAAc982B,GAGzDg92B,EAAgBpxS,EAAW76jB,MAAM,CAAC8r2B,EAAa,mBAAqB9E,GAAeI,MAiBzF,OAfEvsS,EADEoxS,EACWpxS,EAAWvrkB,MAAM,CAACw82B,EAAa,UAAU,GAAOx82B,MAAM,CAACw82B,EAAa,SAAU,IAEvFjxS,EAAW76jB,MAAM,CAAC8r2B,EAAa,gBAAkBjxS,EAAW76jB,MAAM,CAAC8r2B,EAAa,UACrEjxS,EAAWvrkB,MAAM,CAACw82B,EAAa,UAAU,GAEzCjxS,EAAWvrkB,MAAM,CAACw82B,EAAa,UAAU,GAKtDA,IAAgBE,EAAY7w3B,KAAO,GAAK0/kB,EAAW76jB,MAAM,CAAC8r2B,EAAa,iBACrEG,GAAiBpxS,EAAW76jB,MAAM,CAAC8r2B,EAAa,aAClDjxS,EAAaA,EAAWrvkB,KAAK672B,KAG1BxsS,MAkDLmwB,GAAsB,SAACC,EAAcpwmB,GACzC,OAAO,eAACqwmB,GAAA,EAAD,yBAAiBrwmB,IAAKA,GAASowmB,GAA/B,IAA6CE,UAAW,OAE3DC,GAAQvnkB,IAAM8E,WAAWqikB,IAEzBkhR,GAAa,SAAC,GAA2D,IAAzDtswB,EAAwD,EAAxDA,OAAQ4rwB,EAAgD,EAAhDA,gBAAiBF,EAA+B,EAA/BA,SAAUznwB,EAAqB,EAArBA,MAAO09Q,EAAc,EAAdA,QACxD2lf,EAActnwB,EAAOsnwB,YACvBps3B,EAAQ,GACRsgI,GAAU,EACVw7c,GAAgB,EACpB,GAAIswS,EAAa,CACf,IAAMuE,EAAmBJ,GAAoBC,EAAUznwB,GACvD/oH,EAAgBqwB,EAAR04F,EAAU,+DAAoE,yDAEtF+yd,GADAx7c,EAAUqwvB,EAAiB5+2B,MAAK,SAAAutC,GAAI,OAAIox0B,EAAgBno3B,IAAI+2C,EAAKj3C,IAAIo+X,SAC1Ckqf,EAAiB5+2B,MAAK,SAAAutC,GAAI,OAAKox0B,EAAgBno3B,IAAI+2C,EAAKj3C,IAAIo+X,YAEvFnmQ,EAAUowvB,EAAgBno3B,IAAIu8G,EAAO2hR,IACrCzmY,EAAQ8kH,EAAO9kH,MAEjB,OACE,eAACq8T,EAAA,EAAD,CACExwM,QAAS,eAAC6U,EAAA,EAAD,CAAUn2B,MAAM,UAAUlqG,KAAK,QAAQigI,QAASA,EAASw7c,cAAeA,EAAel8d,MAAO,CAAEx/B,QAAS,KAClHh7C,MACE,eAAC04E,EAAA,EAAD,CACEE,QAAQ,QACRzT,MAAO6hxB,EAAc,cAAgB,gBACrCxswB,MAAO,CACL4M,WAAY,EACZqU,WAAYurvB,EAAc,OAAS,UALvC,SAQGps3B,OAOX,OACE,eAACs6T,GAAA,EAAD,CAAQrrN,KAAMA,EAAMzxB,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAA9C,SACE,gBAACrvY,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,UACE,gBAAC59C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBwhC,MAAO,CAAE+X,aAAc,IAA1F,UACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,sCAEL,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAUotwB,GAAsBzlwB,QAAS8f,EAAlE,SACE,eAAC,KAAD,SAGJ,gBAAC2xP,GAAA,EAAD,CAAS/D,WAAYA,EAAYn3K,UAAWqtqB,EAAW,KAAO,eAACt2b,GAAA,EAAD,IAAmB57D,YAAY,WAAWj7Q,MAAO,CAAEx/B,QAAS,GAA1H,UACE,gBAAC06S,GAAA,EAAD,CAAMvzG,QAAQ,EAAd,UACE,eAACwzG,GAAA,EAAD,UAAY1qW,EAAE,4CACd,gBAAC2qW,GAAA,EAAD,YAEK+xf,GACC,gBAAC5vyB,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAE+X,aAAc,GAAhF,UACE,eAAC,KAAD,CAAUptB,MAAM,WAChB,eAACuT,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAgBqV,MAAO,CAAE4M,WAAY,GAAvE,SACGn8F,EAAE,qDAOP081B,GAAaA,GAAYnygB,IAAmBqxgB,GAAsBgB,WAClE,gBAAC9vyB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLqqC,QAAS,SAACz8G,GAAD,OAAOwg3B,EAAkBjB,GAAsBgB,WACxDvvyB,UAAWm0C,KAAW,CAACr0C,EAAQkvyB,gBAAiBlvyB,EAAQmvyB,uBACxD/swB,MAAO,CAAEomB,YAAa40O,IAAmBqxgB,GAAsBgB,SAAWztyB,EAAM+pC,QAAQE,QAAQ7iF,KAAO44C,EAAM+pC,QAAQC,KAAK,MAP5H,UASE,eAACrsC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEI6tyB,EACI,eAACjvwB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,oDAEL,eAACgsS,EAAA,EAAD,CACEr8T,MAAOis3B,GAAsBgB,SAC7B3svB,QAASs6O,IAAmBqxgB,GAAsBgB,SAClDphwB,QAASkhwB,EAAW,KAAO,eAACp2f,GAAA,EAAD,CAAOpsR,MAAM,YACxCnlE,MACE,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,wDAMjB,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,WAEK+uyB,GACC,eAAC1td,GAAA,EAAD,CACE3hV,UAAWF,EAAQovyB,kBACnBt80B,QAASy90B,GAAYlr2B,QAAU,GAC/B04V,cAAe,SAACjrU,EAAShF,GACvB,IAAMujF,EAAkB0hwB,GAAoBjg1B,EAASi90B,IACrD,OAAI1+vB,EAAgB1oH,OACX,CAACgm3B,IAA2Bv82B,OAAOi/G,GAErC,IAET0hf,iBAAkBD,GAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,IACZ,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAOos3B,aACTqE,GAAiB,YAEbtD,EAAiB5k3B,IAAIvI,EAAM0nQ,cAC7B0lnB,EAAoBD,EAAiBrgwB,OAAO9sH,EAAM0nQ,eAElD0lnB,EAAoBD,EAAiBnh3B,IAAIhM,EAAM0nQ,aAAch6O,iBAAO1tB,MAI1EgqI,OAAQ,kBAAMwjvB,GAAqB,KACnCzmwB,WAAYwmwB,GACZzmwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GACT,UAAXA,GACF29vB,GAAqBxt3B,IAGzB+j2B,sBAAsB,EACtBp+tB,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,wDAAyDuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC1I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAACsswB,GAAD,CAAmCtswB,OAAQA,EAAQ4rwB,gBAAiBvD,EAAkBqD,SAAUzC,GAAahlwB,MAAOwkwB,GAAmB9mf,QAAQ,gBAA9H3hR,EAAOl8G,MAAQ,MAKxEuk3B,EAAiB9s3B,KAAO,GACtB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SACIk6iB,EAAiBlm3B,WAAWqG,KAAI,WAAyB7M,GAAzB,uBAAO4w3B,GAAP,kBAAmC,eAAChnjB,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOis1B,EAAgBhp3B,IAAI,SAAUmiU,SAAUuijB,EAAW,KAAO,kBAhO/K,SAACts3B,GAC3B2s3B,EAAoBD,EAAiBrgwB,OAAOrsH,IA+NmK6w3B,CAAoBD,EAAgBhp3B,IAAI,mBAA/I5H,gBAU1Fss3B,GAAaA,GAAYnygB,IAAmBqxgB,GAAsB8C,wBAClE,gBAAC5xyB,EAAA,EAAD,CACEW,WAAW,EACXqrC,QAAS,SAACz8G,GAAD,OAAOwg3B,EAAkBjB,GAAsB8C,wBACxDrxyB,UAAWF,EAAQkvyB,gBACnB9swB,MAAO,CACLomB,YAAa40O,IAAmBqxgB,GAAsB8C,sBAClDT,GACE9uyB,EAAM+pC,QAAQ92G,MAAMm0B,KACpB44C,EAAM+pC,QAAQE,QAAQ7iF,KACxB44C,EAAM+pC,QAAQC,KAAK,MAT3B,WAaKujwB,GAAY,uCACX,eAAC5vyB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIxB,UAAWF,EAAQmvyB,qBAA7C,SACE,eAACtwjB,EAAA,EAAD,CACEr8T,MAAOis3B,GAAsB8C,sBAC7BzuvB,QAASs6O,IAAmBqxgB,GAAsB8C,sBAClDljwB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MACE,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,0EAKX,eAAC4qG,GAAA,EAAD,CAASv9C,UAAWF,EAAQq2R,aAGhC,gBAAC12R,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,MAAMI,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQmvyB,qBAAxI,UACE,eAACxvyB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,2DAGP,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,WAEK+uyB,GACC,eAAC1td,GAAA,EAAD,CACE3hV,UAAWF,EAAQovyB,kBACnBt80B,QAAS290B,GAAUpr2B,QAAU,GAC7B04V,cAAe,SAACjrU,EAAShF,GACvB,IAAMujF,EAAkB0hwB,GAAoBjg1B,EAASm90B,IACrD,OAAI5+vB,EAAgB1oH,OACX,CAAC,CAAEs3H,MAAO,GAAI85F,QAAS,KAAM60pB,aAAa,IAAQx82B,OAAOi/G,GAE3D,IAET0hf,iBAAkBD,GAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,IACZ,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAOos3B,aACTqE,GAAiB,UAEbpD,EAAe9k3B,IAAIvI,EAAMu3N,SAC3B+1pB,EAAkBD,EAAevgwB,OAAO9sH,EAAMu3N,UAE9C+1pB,EAAkBD,EAAerh3B,IAAIhM,EAAMu3N,QAAS7pM,iBAAO1tB,MAIjEgqI,OAAQ,kBAAM0jvB,GAAmB,KACjC3mwB,WAAY0mwB,GACZ3mwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GACT,UAAXA,GACF69vB,GAAmB1t3B,IAGvB+j2B,sBAAsB,EACtBp+tB,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,6DAA8DuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC/I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAACsswB,GAAD,CAAYtswB,OAAQA,EAAQ4rwB,gBAAiBrD,EAAgBmD,SAAUvC,GAAWllwB,MAAO0kwB,GAAiBhnf,QAAQ,eAK1J4mf,EAAeht3B,KAAO,GACpB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SACIo6iB,EAAepm3B,WAAWqG,KAAI,WAAuB7M,GAAvB,uBAAO8w3B,GAAP,kBAAiC,eAAClnjB,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOms1B,EAAclp3B,IAAI,SAAUmiU,SAAUuijB,EAAW,KAAO,kBAtT5Kx1pB,EAsToMg6pB,EAAclp3B,IAAI,gBArT/Oil3B,EAAkBD,EAAevgwB,OAAOyqG,IADhB,IAACA,IAsT6E92N,cAMtF,eAACw6H,GAAA,EAAD,CAASv9C,UAAWF,EAAQq2R,UAC5B,gBAAC12R,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAIlB,UAAU,MAAMI,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQmvyB,qBAAxI,UACE,eAACxvyB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,wDAGP,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,WAEK+uyB,GACC,eAAC1td,GAAA,EAAD,CACE3hV,UAAWF,EAAQovyB,kBACnBt80B,QAASozkB,GAAa7gmB,QAAU,GAChC04V,cAAe,SAACjrU,EAAShF,GACvB,IAAMujF,EAAkB0hwB,GAAoBjg1B,EAASq90B,IACrD,OAAI9+vB,EAAgB1oH,OACX,CAAC,CAAEnG,MAAO,GAAImlC,WAAY,KAAMin1B,aAAa,IAAQx82B,OAAOi/G,GAE9D,IAET0hf,iBAAkBD,GAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,IACZ,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAOos3B,aACTqE,GAAiB,cAEb/hR,EAAmBnmmB,IAAIvI,EAAMmlC,YAC/BwpkB,EAAsBD,EAAmB5hf,OAAO9sH,EAAMmlC,aAEtDwpkB,EAAsBD,EAAmB1imB,IAAIhM,EAAMmlC,WAAYzX,iBAAO1tB,MAI5EgqI,OAAQ,kBAAM4jvB,GAAsB,KACpC7mwB,WAAY4mwB,GACZ7mwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GACT,UAAXA,GACF+9vB,GAAsB5t3B,IAG1B+j2B,sBAAsB,EACtBp+tB,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,0DAA2DuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC5I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAACsswB,GAAD,CAAYtswB,OAAQA,EAAQ4rwB,gBAAiBhiR,EAAoB8hR,SAAU9sQ,GAAc36f,MAAO4kwB,GAAoBlnf,QAAQ,kBAKpKioO,EAAmBrumB,KAAO,GACxB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SACIy7R,EAAmBznmB,WAAWqG,KAAI,WAA0B7M,GAA1B,uBAAO+w3B,GAAP,kBAAoC,eAACnnjB,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOos1B,EAAiBnp3B,IAAI,SAAUmiU,SAAUuijB,EAAW,KAAO,kBA5WnL5n1B,EA4W8Mqs1B,EAAiBnp3B,IAAI,mBA3W/PsmmB,EAAsBD,EAAmB5hf,OAAO3nF,IADrB,IAACA,IA4WiF1kC,iBAUjG6t3B,IACE,eAACxwwB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,QAAQqV,MAAO,CAAEgB,WAAY,GAAI+W,aAAc,IAAjF,SACGtnG,EAAE,wDAKL081B,GAAaA,GAAYnygB,IAAmBqxgB,GAAsB+C,WAClE,gBAAC7xyB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SACLqqC,QAAS,SAACz8G,GAAD,OAAOwg3B,EAAkBjB,GAAsB+C,WACxDtxyB,UAAWm0C,KAAW,CAACr0C,EAAQkvyB,gBAAiBlvyB,EAAQmvyB,uBACxD/swB,MAAOg7P,IAAmBqxgB,GAAsB+C,SAAW,CAAEhpvB,YAAaxmD,EAAM+pC,QAAQE,QAAQ7iF,MAAS,KAP3G,UASE,eAACu2C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEI6tyB,EACI,eAACjvwB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,0DACnD,eAACgsS,EAAA,EAAD,CACEr8T,MAAOis3B,GAAsB+C,SAC7B1uvB,QAASs6O,IAAmBqxgB,GAAsB+C,SAClDnjwB,QAAS,eAAC8qQ,GAAA,EAAD,CAAOpsR,MAAM,YACtBnlE,MAAO,eAAC04E,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,8DAIpE,gBAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAApD,WAEK+uyB,GACC,eAAC1td,GAAA,EAAD,CACE3hV,UAAWF,EAAQovyB,kBACnBt80B,QAAS890B,GAAkBvr2B,QAAU,GACrC04V,cAAe,SAACjrU,EAAShF,GACvB,IAAMujF,EAAkB0hwB,GAAoBjg1B,EAASu90B,IACrD,OAAIh/vB,EAAgB1oH,OACX,CAAC,CAAEnG,MAAO,GAAI0v3B,gBAAiB,GAAInq1B,GAAI,KAAM6m1B,aAAa,IAAQx82B,OAAOi/G,GAE3E,IAET0hf,iBAAkBD,GAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,IACZ,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAOos3B,aACTqE,GAAiB,YAEbnvgB,EAAiB/4W,IAAIvI,EAAMulC,IAC7ByojB,EAAoB1sO,EAAiBx0P,OAAO9sH,EAAMulC,KAElDyojB,EAAoB1sO,EAAiBt1W,IAAIhM,EAAMulC,GAAI7X,iBAAO1tB,MAIhEgqI,OAAQ,kBAAM8jvB,GAA2B,KACzC/mwB,WAAY8mwB,GACZ/mwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GACT,UAAXA,GACFi+vB,GAA2B9t3B,IAG/B+j2B,sBAAsB,EACtBp+tB,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,8DAA+DuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAChJ6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAACsswB,GAAD,CAAmCtswB,OAAQA,EAAQ4rwB,gBAAiBpvgB,EAAkBkvgB,SAAUpC,GAAmBrlwB,MAAO8kwB,GAAyBpnf,QAAQ,MAA1I3hR,EAAOl8G,MAAQ,MAKxE04W,EAAiBjhX,KAAO,GACtB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAA1C,SACIquC,EAAiBr6W,WAAWqG,KAAI,WAAyB7M,GAAzB,uBAAOouX,GAAP,kBAAmC,eAACxkD,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOypV,EAAgBxmX,IAAI,SAAUmiU,SAAUuijB,EAAW,KAAO,kBA5bxKxn1B,EA4bwMspV,EAAgBxmX,IAAI,WA3b7P2llB,EAAoB1sO,EAAiBx0P,OAAOvnF,IADZ,IAACA,IA4buE9kC,eAU3Fss3B,GACC,gBAAC5vyB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,aAAawhC,MAAO,CAAEgB,UAAW,IAAhF,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACRmL,QAAS8f,EAHX,SAKG54G,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRwD,SAAUstwB,GACVlvwB,MAAO,CAAE4M,WAAY,IACrBrD,QAAS,WACP4qU,MANJ,SASG1ja,EAAE,+BAOf,gBAACyqW,GAAA,EAAD,WACE,eAACC,GAAA,EAAD,UAAY1qW,EAAE,4CACd,gBAAC2qW,GAAA,EAAD,WAEI0zf,GAAcph3B,KAAI,SAACgzJ,EAAK7/J,GACtB,IAAMgx3B,EAAYhx3B,IAAUiu3B,GAAcru3B,KAAO,EAC3Cqx3B,EAAepxtB,EAAIj4J,IAAI,UAAYi4J,EAAIj4J,IAAI,WAC3Cmk3B,EAAalstB,EAAIj4J,IAAI,cACrBok3B,EAAenstB,EAAIj4J,IAAI,gBACvBsp3B,EAAWrxtB,EAAIj4J,IAAI,SAEzB,OACE,gBAAC80E,EAAA,EAAD,CAAkBW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASuB,KAAK,SAAS8gC,MAAO,CAAE+X,aAAc,GAA5G,UACE,eAACx6C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAG0gC,MAAO,CAAEhgC,MAAO,MAAOkmC,YAAa,IAA7D,SACE,eAACu5S,GAAA,EAAD,CACE79S,SAAUotwB,GACVt+0B,QAASm+0B,GAA4Bri1B,QAAQvpB,QAAU,GACvD04V,cAAe,SAACjrU,GAAD,OAAash1B,cAAQth1B,GAASzsB,SAAS6q2B,GAAcph3B,KAAI,SAACizJ,GAAD,OAASA,EAAIl4J,IAAI,kBAAgBwa,QACzGi9F,SAAU,SAACpzG,EAAG1M,GACZ+w3B,GAAuBtw3B,EAAO,aAAcT,GAAS,KAEvDA,MAAOsgK,EAAIj4J,IAAI,eAAiB,KAChCs3Z,cAAetvY,EAAE,6BACjBmglB,cAAc,EACdjxM,kBAAkB,EAClB55R,eAAgB,SAAC7gB,GAAD,OAAoBA,GAAU,IAC9Cq8N,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,4DAA6DuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC9I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,SAGrD,eAAC3nC,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAO,KAAlC,SACE,eAACy/U,GAAA,EAAD,CACE79S,UAAWgrwB,GAAcoC,GACzBt+0B,QAAS+70B,IAAiB,GAC1BvswB,SAAU,SAACpzG,EAAG1M,GACZ+w3B,GAAuBtw3B,EAAO,eAAgBT,GAAS,KAEzDA,MAAOys3B,GAAgB,KACvB9sd,cAAetvY,EAAE,6BACjBmglB,cAAc,EACdjxM,kBAAkB,EAClB55R,eAAgB,SAAC7gB,GAAD,OAAoBz0F,EAAE,kDAAD,OAAmDy0F,KAAa,IACrGq8N,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAW56M,MAAO,CAAEhgC,MAAO,SAAc3oC,KAClE6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAaztF,EAAE,kDAAD,OAAmDy0F,WAGzG,eAAC3nC,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,SAASwhC,MAAO,CAAEhgC,MAAO,IAApE,SAEK6xyB,GAAahF,IAAiBP,GAAeI,OAC5C,eAAC/9vB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,kDAAD,OAAmDo81B,EAAnD,YAAjB,SACE,eAAC,KAAD,CAAUhhwB,SAAS,QAAQlhB,MAAM,eAKzC,eAACptB,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEhgC,MAAO,MAAO2hC,SAAU,YAAvF,SAEIkrwB,IAAiBP,GAAeI,OAAS,uCACvC,eAAC9xjB,EAAA,EAAD,CACEh5M,UAAWgrwB,GAAcoC,GACzB5u3B,MAAOsgK,EAAIj4J,IAAI,UAAY,GAC3By3G,SAAU,SAACpzG,GACT,IAAM1M,EAAQ0M,EAAE4kB,OAAOtxB,OAAS,GAC3B,qCAAqCq/C,KAAKr/C,IAAUiG,OAAOjG,IAAU,GAAMA,EAAMmG,QAAU,GAC9F4q3B,GAAuBtw3B,EAAO,QAASiM,EAAE4kB,OAAOtxB,OACtCA,GACV+w3B,GAAuBtw3B,EAAO,QAAS,KAG3C6uH,YAAaj/F,EAAE,uDAEfqh2B,IAAiBC,GAAa,eAACtlf,GAAA,EAAD,CAAgB55X,OAAO,EAAMirE,UAAWF,EAAQ48O,UAAhD,SAA4D/pS,EAAE,2BAKjGoh2B,GACC,eAACzyvB,GAAA,EAAD,CAAYxd,SAAUotwB,GAAsBzlwB,QAAS,kBA9gB5C0kgB,EA8gB0EptnB,OA7gBzGku3B,IAAiB,SAACuC,GAAD,OAAiBA,EAAYpkwB,OAAO+ggB,MADvB,IAACA,GA8gBT,SACE,eAAC,KAAD,QAlEGptnB,MA0EjB,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,aAAab,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,IAApG,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACRwD,SAAUotwB,GACVhvwB,MAAO,CAAEkG,YAAa,IACtBqD,QA7oBG,WACjB6jR,EAAc,GACdggf,GAAY,GACZwB,GAA0Cpi1B,QAAU1e,iBAAO,IAC3D+g2B,GAA4Bri1B,QAAU1e,iBAAO,IAC7Cih2B,GAAiBjh2B,iBAAO,CAAC6+1B,OAmoBb,SAOGl81B,EAAE,sBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRwD,SAAUotwB,IAAwBF,GAAcru3B,MAAQ,EACxDu/G,MAAO,CAAEkG,YAAa,IACtBqD,QAliBG,WAEjB,GADiBulwB,GAAc382B,MAAK,SAACuuJ,GAAD,OAASA,EAAIj4J,IAAI,YAEnDsm3B,IAAiB,SAACuC,GAChB,OAAOA,EAAY5j3B,KAAI,SAACgzJ,GAAD,OAASA,EAAIt0J,IAAI,WAAW,aAEhD,CAEL6i3B,IAAwB,GAExB,IAAMgD,EAA0BnD,GAAc/92B,MAAMV,QAAO,SAACutI,EAAK8iB,GAC/D,OAAIA,EAAIj4J,IAAI,kBAAoB6j3B,GAAeh8qB,KAAoC,IAA7BjqM,OAAOq6J,EAAIj4J,IAAI,UAC5Dm1I,EAEFA,EAAIxxI,IAAIs0J,EAAIj4J,IAAI,cAAei4J,KACrC5yI,iBAAO,KAEVuhB,EAAS,IAAI0vL,KAA+B,CAC1C2iJ,iBAAkBktgB,GAA0Cpi1B,QAC5Dsi1B,cAAemD,EACfjmjB,UAAW,WACTijjB,IAAwB,GACxB5lvB,IAEAl+B,KAAmB9rE,mBAAgB6y1B,cAAe3g0B,EAAc,CAC9DypT,iBACAm3gB,yBAA0BvD,GAA0Cpi1B,QAAQ/rC,KAC5E2x3B,yBAA0B7E,EAAiB9s3B,KAC3C4x3B,uBAAwB5E,EAAeht3B,KACvC6x3B,2BAA4BxjR,EAAmBrumB,KAC/C8x3B,gBAAiBzD,GAAcru3B,KAAO,KAExCqu3B,GAAc/92B,MAAMK,SAAQ,SAACsvJ,GAC3Bv1D,KAAmB9rE,mBAAgBmz1B,uBAAwBjh0B,EAAc,CACvEq7zB,WAAYlstB,EAAIj4J,IAAI,cACpBok3B,aAAcnstB,EAAIj4J,IAAI,4BA0fpB,SAOGgoB,EAAE,sBAGHu+1B,IACE,eAAC1ojB,EAAA,EAAD,CAAkB7lU,KAAM,uB,qCChhCtCgy3B,GAAe,sBAAkBC,IAAlB,OAoBfx+vB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhqnB,MAAO,KACPgB,SAAU,OACV41C,cAAe,IAEjB14C,UAAW,CACTqhD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MACxCuC,aAAc,EACd4L,aAAcn4C,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B2zyB,kBAAmB,CACjB56vB,aAAcn4C,EAAMZ,QAAQ,IAE9Bs0P,KAAM,CACJrzP,OAAQ,GAEVozP,cAAe,CACb73D,UAAW,IACXywC,UAAW,YA0RA2mkB,GAtRwC,SAAC,GAGjD,IAFLvjxB,EAEI,EAFJA,KACAg6B,EACI,EADJA,QAEMh6F,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KAGV0nG,GAFQx4F,eACQquF,eACLr7K,sBAAY24N,aAAkB,CAAC,eAC1Cm+mB,EAA4B920B,sBAAYiyN,eAE9C,EAA0Dl/N,IAAMia,SAA+B,MAA/F,mBAAOyv0B,EAAP,KAA8BC,EAA9B,KACA,EAAgD3p1B,IAAMia,SAAgDt1B,iBAAO,KAA7G,mBAAO4zV,EAAP,KAAyB0sO,EAAzB,KAEA,EAAsCjljB,IAAMia,SAASt1B,iBAAO,KAA5D,mBAAOqg2B,EAAP,KAAoBC,EAApB,KACA,EAAkDjl1B,IAAMia,SAASt1B,iBAAO,KAAxE,mBAAO0g2B,EAAP,KAA0BC,EAA1B,KAEA,EAA8Dtl1B,IAAMia,SAAS,IAA7E,mBAAO6q0B,EAAP,KAAgCC,EAAhC,KAEA,EAAoD/k1B,IAAMia,UAAS,GAAnE,mBAAO2v0B,EAAP,KAA2BC,EAA3B,KACA,EAA4C7p1B,IAAMia,SAAS,IAA3D,mBAAO6v0B,EAAP,KAAuBC,EAAvB,KAEA,EAAwD/p1B,IAAMia,UAAS,GAAvE,mBAAO+v0B,EAAP,KAA6BC,EAA7B,KAwDAjq1B,IAAM0B,WAAU,WACVwkE,GAvDc,WAClB,IAAIigxB,EAAiBxh2B,iBAAO,IACxB2h2B,EAAuB3h2B,iBAAO,IAE1B,OAAR8tM,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAAkB,IAAD,EACrCq/G,GAAe,UAAA/+G,EAAQ3/P,IAAI,uBAAZ,eAA6By6H,SAAUzyG,EAAE,mCACxDmyV,EAAYx6G,EAAQ3/P,IAAI,aAC9B6m3B,EAAiBA,EAAex+2B,KAAKgd,iBAAO,CAAE1tB,MAAO+mX,EAAcvE,YAAW96G,kBAI9EM,EAAQ3/P,IAAI,WAAYqlB,iBAAO,KAAK1c,SAAQ,SAACsqH,EAASiD,GACpD,IAAMf,EAAgBlC,EAAQjzH,IAAI,kBAAoB,KAE3B,IAAvBizH,EAAQjzH,IAAI,OAAkBizH,EAAQjzH,IAAI,cAAiBizH,EAAQjzH,IAAI,kBACvEgn3B,EAAuBA,EAAqB3+2B,KAAKgd,iBAAO,CACtD1tB,MAAOw9H,EACPp4F,MAAM,GAAD,OAAKo4F,EAAL,aAAuBupP,EAAvB,KACLtE,eAAgBnnP,EAAQjzH,IAAI,kBAC5B4q3B,mBAAoBvrnB,SAK5BsmnB,EAAekB,GACfb,EAAqBgB,MA+BrBS,GACIhD,GA5BwB,WAC9B,IAAMoG,EAA0B,OAAG13pB,QAAH,IAAGA,OAAH,EAAGA,EAAUvrN,QAAO,SAACutI,EAAKwqH,EAAoBN,GAC5E,IAAMq/G,EAAe/+G,EAAQ3/P,IAAI,iBAAmBgoB,EAAE,mCAChD8rG,EAAW6rI,EAAQ3/P,IAAI,YAC7B,OAAI8zH,EACKA,EAASlsH,QAAO,SAACkj3B,EAAa73vB,GACnC,OAA2B,IAAvBA,EAAQjzH,IAAI,OAAgBizH,EAAQjzH,IAAI,uBACnC8q3B,EAAYzi3B,KAAKgd,iBAAO,CAC7B1tB,MAAOs7H,EAAQjzH,IAAI,kBAAoB,IACvC+8B,MAAM,GAAD,OAAKk2F,EAAQjzH,IAAI,kBAAoB,IAArC,aAA6C0+W,EAA7C,KACLtE,eAAgBnnP,EAAQjzH,IAAI,kBAC5B4q3B,mBAAoBvrnB,KAGjByrnB,IACN31uB,GAEIA,IAER9vH,iBAAO,KAEVsgkB,EAAoBklS,GAQhBE,KAGFV,EAAyB,MACzB1kS,EAAoBtgkB,iBAAO,KAC3Bog2B,EAA2B,IAC3B8E,GAAsB,GACtBI,GAAwB,MAEzB,CAAC/jxB,IAEJ,IA6BMihgB,EAAsB,SAACC,EAAcpwmB,GACzC,OAAO,eAACqwmB,GAAA,EAAD,yBAAiBrwmB,IAAKA,GAASowmB,GAA/B,IAA6CE,UAAW,OAE3DC,EAAQvnkB,IAAM8E,WAAWqikB,GAE/B,OACE,eAAC51S,GAAA,EAAD,CAAQrrN,KAAMA,EAAMzxB,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAA9C,SACE,gBAACrvY,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,UACE,gBAAC59C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBwhC,MAAO,CAAE+X,aAAc,IAA1F,UACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,sCAEL,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAUuxwB,EAAsB5pwB,QAAS8f,EAAlE,SACE,eAAC,KAAD,SAGJ,gBAAC9rD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQM,UAA1C,UACE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEhgC,MAAOyyyB,IAAtE,UACE,eAACv0wB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,oDAEL,eAACgvY,GAAA,EAAD,CACE3hV,UAAWF,EAAQ+0yB,kBACnBji1B,QAAS890B,EAAkBvr2B,QAAU,GACrC04V,cAAe,SAACjrU,EAAShF,GACvB,IAAM6uM,EAAkB0zoB,EAAwBnw0B,cAC1C210B,EAA6B/xgB,EAAiBrxW,QAAO,SAACutI,EAAKliB,GAE/D,OADAkiB,EAAIliB,EAAQjzH,IAAI,mBAAqB,EAC9Bm1I,IACN,IACH,OAAOltG,EAAQzgC,QAAO,SAAAi1G,GACpB,OAAIq1H,EACKr1H,EAAO9kH,MAAM09C,cAAc7vC,SAASssO,KAAqBk5oB,EAA2BvuwB,EAAO29P,iBAE5F4wgB,EAA2BvuwB,EAAO29P,oBAG9C8tP,iBAAkBD,EAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,GACZgulB,EAAoB1sO,EAAiB5wW,KAAKgd,iBAAO1tB,MAEnD+mH,WAAY8mwB,EACZ/mwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GAEtBi+vB,EADa,UAAXj+vB,EACyB,GAEA7vH,IAG/BwwmB,cAAc,EACd7qe,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ1/E,QAAS,IAC7C+7S,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,wDAAyDuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC1I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO1/E,cAG5D,eAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASqiC,MAAO,CAAEhgC,MAlOrD,IAkO5B,SACE,eAAC,KAAD,CAAkB2qB,MAAM,UAAUqV,MAAO,CAAEhgC,MAAO,QAEpD,gBAACzC,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEhgC,MApOlD,KAoOb,UACE,eAACk+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,mDAGHsi2B,EACI,gBAACx1yB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMc,KAAK,SAA5C,UACE,eAAC07O,EAAA,EAAD,CACEx6T,MAAO6y3B,EACP/ywB,SAAU,SAACpzG,GAAD,OAAOom3B,EAAkBpm3B,EAAE4kB,OAAOtxB,UAE9C,eAACg/H,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAAMypwB,GAAsB,IAA9D,SACE,eAAC,KAAD,MAEF,eAAC5zvB,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAoC,KAA1BqxwB,EAAe/vvB,OAAe3Z,QAnGvD,WAC1B,GAAI0pwB,EAAe/vvB,OAAQ,CACzB,IAAMy1jB,EAAa7qqB,iBAAO,CACxB1tB,MAAO6y3B,EAAe/vvB,OACtB0/O,UAAW,GACX96G,cAAe,IAEjBgrnB,EAAyBn6L,GACzBq6L,GAAsB,GACtBE,EAAkB,MA0FJ,SACE,eAAC,KAAD,SAGJ,eAACzzd,GAAA,EAAD,CACE/uX,QAASy90B,EAAYlr2B,QAAU,GAC/Bi9F,SAAU,SAACpzG,EAAG1M,GACZ0y3B,EAAyBhl2B,iBAAO1tB,KAElCA,OAA4B,OAArByy3B,QAAqB,IAArBA,OAAA,EAAAA,EAAuB5v2B,SAAU,KACxC88Y,cAAetvY,EAAE,6BACjBmglB,cAAc,EACdjxM,kBAAkB,EAClB55R,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GACZ,OAAO,eAACs3E,GAAA,EAAD,CAASC,OAA4B,OAArBikwB,QAAqB,IAArBA,OAAA,EAAAA,EAAuBpq3B,IAAI,WAAY,GAAvD,SACL,eAACmyT,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,uDAAwDuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,OAGpH6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,SACxD0lU,eAAgB,YAA6B,IAA1B96R,EAAyB,EAAzBA,SAAa4D,EAAY,mBAC1C,OAAO,gBAAC2nF,GAAA,EAAD,2BAAW3nF,GAAX,IAAkBs3R,YAAa,SAAAp5T,GAAC,OAAIA,EAAEg5H,kBAAkB9lB,MAAO,CAAE6L,SAAU,OAA3E,UACJ7gF,EACD,eAACq+E,EAAA,EAAD,CACErJ,MAAO,CAAEuf,OAAQ,OAAQpT,aAAc,GACvC/N,QAAQ,WACRzT,MAAM,UACN4T,WAAW,EACXgL,QAAS,SAACz8G,GACRA,EAAE87G,kBACF97G,EAAEg5H,iBACFotvB,EAAkBzi2B,EAAE,qDACpBui2B,GAAsB,IAT1B,SAYGvi2B,EAAE,2DAQjBixV,EAAiBjhX,KAAO,GACtB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAAerzN,MAAO,CAAEhgC,MAAOyyyB,IAAzE,SACI/wgB,EAAiBh0W,KAAI,SAACuhX,EAAiBpuX,GAAlB,OAA4B,eAAC4pU,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOypV,EAAgBxmX,IAAI,SAAUmiU,SAAU,kBApJzH,SAAC/pU,GACjCutlB,EAAoB1sO,EAAiBx0P,OAAOrsH,IAmJmH6y3B,CAA0B7y3B,KAA/GA,WAMtE,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,aAAab,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,IAApG,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACRwD,SAAUuxwB,EACVnzwB,MAAO,CAAEkG,YAAa,IACtBqD,QAAS8f,EALX,SAOG54G,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRwD,SAAUuxwB,IAAyBN,GAAmD,IAA1BnxgB,EAAiBjhX,KAC7Eu/G,MAAO,CAAEkG,YAAa,IACtBqD,QAxJS,WACjB6pwB,GAAwB,GACxB/j1B,EAAS,IAAI4vL,KAA+B,CAC1CyiJ,iBAAkBA,EAAiBrxW,QAAO,SAACutI,EAAKliB,GAAN,OAAkBkiB,EAAIxxI,IAAIsvH,EAAQjzH,IAAI,kBAAmBizH,KAAU5tG,iBAAO,KACpHw0qB,cAAeuwL,EACf7mjB,UAAW,WACTonjB,GAAwB,GACxB/pvB,SA4IE,SAOG54G,EAAE,sBAGH0i2B,GACE,eAAC7sjB,EAAA,EAAD,CAAkB7lU,KAAM,c,6BC5UtBkz3B,GACd5yvB,EACAs5B,EACAk6qB,GAEA,IAAMn00B,EAAQ,eACT2gI,GAqBL,OAlBIs5B,MAAWt5B,EAAXs5B,GAA0Bk6qB,EAA9B,IACEn00B,IAAUm00B,MAAmBl6qB,EAA7Bj6J,IAEAi6J,SAAct5B,EAAds5B,GACAk6qB,MAAmBA,EAFd,SAILn00B,IAAUm00B,MAAmBA,EAAnBA,OAAyCl6qB,EAAnDj6J,QAGEi6J,OAAYt5B,EAAZs5B,GAA2Bk6qB,EAA/B,KACEn00B,IAAUm00B,OAAoBl6qB,EAA9Bj6J,KAEAi6J,QAAat5B,EAAbs5B,GACAk6qB,OAAoBA,EAFf,QAILn00B,IAAUm00B,OAAoBA,EAApBA,MAAyCl6qB,EAAnDj6J,OAGF,E,IC3BWwz3B,GAAoC,SAAC,GAAD,IAAC,EAAD,EAAC,YAAD,EAAC,eAGhDnpiB,EAH+C,EAG/CA,kBAEA,OAAKJ,GAAL,EAIOspiB,GAAuB5yvB,EAAWspN,EAAzC,GAHE,GCPSwpiB,GAAmC,SAAC,GAAD,IAAE9yvB,EAAF,EAAEA,UAChD,kCAAO,GAAP,IAEExkH,EAAG,K,UCDA,SAASo0rB,GAAa/hqB,GAC3B,MAMIkma,aAAY,CAAEnva,GAAIiJ,EAAMjJ,GAAIi8E,SAAU7/G,QAAQ6sC,EAAMgzE,YALtDs0G,EADF,EACEA,WACAvsL,EAFF,EAEEA,UACA8wT,EAHF,EAGEA,WACA15N,EAJF,EAIEA,UACA7H,EALF,EAKEA,WAGIlZ,EAAQ,CACZ+gB,UAAWy6N,KAAIgJ,UAAU7+V,SAASo7H,GAClC7H,cAGF,OACE,sEAAK/4H,IAAKs6V,EAAYz6O,MAAOA,GAAWk2G,GAAgBvsL,GAAxD,IAAmE4/E,QAAS36E,EAAM26E,SAAa36E,GAA/F,aACGA,EAAM5D,YCMb,IC1BIsurB,GAAIuwI,GD0BF31uB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhqnB,MAAO,IACPgB,SAAU,OACV41C,cAAe,IAEjBk9vB,kBAAmB,CACjBt4mB,UAAW,IACXywC,UAAW,OACXjrM,UAAW,QAgKA+ywB,GA5JkD,SAAC,GAI3D,IAHL1kxB,EAGI,EAHJA,KACAg6B,EAEI,EAFJA,QACA2iM,EACI,EADJA,UAEM38R,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KACVt0C,EAAQwjD,eAER4wvB,GADgBviqB,eACEr7K,sBAAY25N,iBAC9B09a,EAAer3oB,sBAAY24N,aAAkB,CAAC,eAAiBpyP,iBAErE,EAAgCwsB,IAAMia,SAAS,MAA/C,mBAAO2yS,EAAP,KAAiB22b,EAAjB,KACA,EAAwCvjvB,IAAMia,SAASzmC,kBAAvD,mBAAOs32B,EAAP,KAAqBC,EAArB,KAEMpqkB,EAAUZ,aACdkpC,aAAU+C,MACV/C,aAAUW,KAAgB,CACxBU,iBAAkBmiH,QAItBzsa,IAAM0B,WAAU,WACVwkE,GACF6kxB,EAAgBzmM,KAEjB,CAACp+kB,IAuBJ,OACE,eAACqrN,GAAA,EAAD,CAAQrrN,KAAMA,EAAMzxB,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAA9C,SACE,gBAACrvY,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,UACE,gBAAC59C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBwhC,MAAO,CAAE+X,aAAc,IAA1F,UACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,2CAEL,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS8f,EAAlC,SACE,eAAC,KAAD,SAGJ,eAACnrB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,8CAGL,eAAC8lG,GAAA,EAAD,CAAOZ,UAAW,EAAG73C,UAAWF,EAAQk2yB,kBAAxC,SACE,gBAAC,KAAD,CACEhqkB,QAASA,EACTgsC,mBAAoBlK,KACpBn0C,UAxCY,SAAC5rK,GACrB,IAAQ87I,EAAiB97I,EAAjB87I,OAAQ5tF,EAASluD,EAATkuD,KAEhB,GADA2ylB,EAAY,MACR/kgB,EAAOhiP,KAAOo0J,EAAKp0J,GAAI,CACzB,IAAM24C,EAAO21yB,EAAaxr3B,IAAIk/Q,EAAOhiP,IAC/BrtB,EAAS272B,EAAa/mwB,OAAOy6J,EAAOhiP,IAC1Cuu1B,EAAgB572B,EAAOuF,OAAOk8K,EAAKp0J,GAAI24C,MAmCjC25N,YA/Bc,SAACpsK,GACvB,IAAQ87I,EAAW97I,EAAX87I,OACR+kgB,EAAY/kgB,EAAOhiP,KA8BXopP,UAAW,CAAC8kmB,IALd,UAOE,eAAC,KAAD,CACEnonB,MAAOuonB,EAAavm3B,KAAI,SAAC06P,EAAS1gQ,GAAV,OAAgB6L,OAAO7L,MAAIJ,UACnD2pV,SAAUoiH,KAFZ,SAIG4gb,EAAavm3B,KAAI,SAAC06P,EAAS1gQ,GAC1B,IAAM4oQ,EAAO0jnB,EAAgBts2B,SAAQ,SAAAys2B,GAAK,OAAyB,IAArBA,EAAMjv2B,QAAQxd,MACtDy/W,EAAe/+G,EAAQ3/P,IAAI,iBAAmBgoB,EAAE,mCACtD,OAAO,gBAAC,IAAMw+P,SAAP,WAEH3e,EAAO,GACL,eAACrvJ,GAAA,EAAD,CAEEW,UAAU,EACV5B,MAAO,CACL4R,QAAS,EACTjQ,SAAU,SACVqX,IAAK,EACL/C,OAAQ,GACRyP,OAAQ,EAAI4qI,EACZ5mJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,OAExCymO,SAAS,EAXX,SAaE,eAAC/1P,EAAA,EAAD,CAAYE,QAAQ,UAAUzT,MAAM,cAAcqV,MAAO,CAAEihB,WAAY,KAAOhY,QAAQ,EAAtF,SAA6Fx4F,EAAE,uCAAwC,CAAE6/O,YAb3I,oBACoBA,EADpB,YAC4B5oQ,IAgBhC,eAAC,GAAD,CAAqCi+B,GAAIpyB,OAAO7L,GAAhD,SACE,gBAACu5G,GAAA,EAAD,CACEgzP,SAAS,EACTj0P,MAAO,CACL0tP,WAAYn6V,OAAO7L,KAAOquV,EAAW,SAAW,UAChDnkO,QAAS,EACTjnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BoM,OAAQ,IANZ,UASE,eAAC,KAAD,CAAmBtrB,MAAM,WACzB,eAACgkB,GAAA,EAAD,CAASC,MAAOu4P,EAAhB,SACE,eAACjpQ,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAMjJ,MAAO,CAAE4M,WAAY,GAAjE,SAAuEu6P,UAZ7E,oBAAgCz/W,MApBNA,QAwC9BquV,EACI,eAAC,KAAD,CAAahnE,UAAW,CAAC6kmB,IAA0BlkkB,cAAe,KAAlE,SACE,gBAACzuM,GAAA,EAAD,CAAUjB,MAAO,CAAEiW,OAAQ,IAA3B,UACE,eAAC,KAAD,CAAmBtrB,MAAM,WACzB,eAACuT,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAMjJ,MAAO,CAAE4M,WAAY,GAAjE,SACGqnwB,EAAa3u2B,MAAM,CAACywU,EAAU,kBAAoBtlU,EAAE,0CAI3D,UAKV,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,aAAab,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,IAApG,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACR4B,MAAO,CAAEkG,YAAa,IACtBqD,QAAS8f,EAJX,SAMG54G,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRmL,QAtGS,WACjBl6E,EAASu/B,YAAO6/L,IAAiB,WAAY3gP,iBAAOmm2B,KACpD5qvB,IACA2iM,KAgGM,SAKGv7S,EAAE,+B,gBErKTgi2B,GAAe,sBAAkBC,IAAlB,OAoBfx+vB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhqnB,MAAO,KACPgB,SAAU,OACV41C,cAAe,IAEjB14C,UAAW,CACTqhD,OAAO,aAAD,OAAe3/C,EAAM+pC,QAAQC,KAAK,MACxCuC,aAAc,EACd4L,aAAcn4C,EAAMZ,QAAQ,GAC5BwB,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B2zyB,kBAAmB,CACjB56vB,aAAcn4C,EAAMZ,QAAQ,IAE9Bs0P,KAAM,CACJrzP,OAAQ,GAEVozP,cAAe,CACb73D,UAAW,IACXywC,UAAW,YA0RAmokB,GAtRwC,SAAC,GAGjD,IAFL/kxB,EAEI,EAFJA,KACAg6B,EACI,EADJA,QAEMh6F,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KAGV0nG,GAFQx4F,eACQquF,eACLr7K,sBAAY24N,aAAkB,CAAC,eAC1Cm+mB,EAA4B920B,sBAAYiyN,eAE9C,EAA0Dl/N,IAAMia,SAA+B,MAA/F,mBAAOyv0B,EAAP,KAA8BC,EAA9B,KACA,EAAgD3p1B,IAAMia,SAA+Ct1B,iBAAO,KAA5G,mBAAO4zV,EAAP,KAAyB0sO,EAAzB,KAEA,EAAsCjljB,IAAMia,SAASt1B,iBAAO,KAA5D,mBAAOqg2B,EAAP,KAAoBC,EAApB,KACA,EAAkDjl1B,IAAMia,SAASt1B,iBAAO,KAAxE,mBAAO0g2B,EAAP,KAA0BC,EAA1B,KAEA,EAA8Dtl1B,IAAMia,SAAS,IAA7E,mBAAO6q0B,EAAP,KAAgCC,EAAhC,KAEA,EAAoD/k1B,IAAMia,UAAS,GAAnE,mBAAO2v0B,EAAP,KAA2BC,EAA3B,KACA,EAA4C7p1B,IAAMia,SAAS,IAA3D,mBAAO6v0B,EAAP,KAAuBC,EAAvB,KAEA,EAAwD/p1B,IAAMia,UAAS,GAAvE,mBAAOix0B,EAAP,KAA6BC,EAA7B,KAwDAnr1B,IAAM0B,WAAU,WACVwkE,GAvDc,WAClB,IAAIigxB,EAAiBxh2B,iBAAO,IACxB2h2B,EAAuB3h2B,iBAAO,IAE1B,OAAR8tM,QAAQ,IAARA,KAAUxqN,SAAQ,SAACg3P,EAASN,GAAkB,IAAD,EACrCq/G,GAAe,UAAA/+G,EAAQ3/P,IAAI,uBAAZ,eAA6By6H,SAAUzyG,EAAE,mCACxDmyV,EAAYx6G,EAAQ3/P,IAAI,aAC9B6m3B,EAAiBA,EAAex+2B,KAAKgd,iBAAO,CAAE1tB,MAAO+mX,EAAcvE,YAAW96G,kBAI9EM,EAAQ3/P,IAAI,WAAYqlB,iBAAO,KAAK1c,SAAQ,SAACsqH,EAASiD,GACpD,IAAMf,EAAgBlC,EAAQjzH,IAAI,kBAAoB,MAElDizH,EAAQjzH,IAAI,MAAQ,IAAOizH,EAAQjzH,IAAI,cAAiBizH,EAAQjzH,IAAI,kBACpEgn3B,EAAuBA,EAAqB3+2B,KAAKgd,iBAAO,CACtD1tB,MAAOw9H,EACPp4F,MAAM,GAAD,OAAKo4F,EAAL,aAAuBupP,EAAvB,KACLtE,eAAgBnnP,EAAQjzH,IAAI,kBAC5B4q3B,mBAAoBvrnB,SAK5BsmnB,EAAekB,GACfb,EAAqBgB,MA+BrBS,GACIhD,GA5BwB,WAC9B,IAAMoG,EAA0B,OAAG13pB,QAAH,IAAGA,OAAH,EAAGA,EAAUvrN,QAAO,SAACutI,EAAKwqH,EAAoBN,GAC5E,IAAMq/G,EAAe/+G,EAAQ3/P,IAAI,iBAAmBgoB,EAAE,mCAChD8rG,EAAW6rI,EAAQ3/P,IAAI,YAC7B,OAAI8zH,EACKA,EAASlsH,QAAO,SAACkj3B,EAAa73vB,GACnC,OAAIA,EAAQjzH,IAAI,MAAQ,GAAKizH,EAAQjzH,IAAI,uBAChC8q3B,EAAYzi3B,KAAKgd,iBAAO,CAC7B1tB,MAAOs7H,EAAQjzH,IAAI,kBAAoB,IACvC+8B,MAAM,GAAD,OAAKk2F,EAAQjzH,IAAI,kBAAoB,IAArC,aAA6C0+W,EAA7C,KACLtE,eAAgBnnP,EAAQjzH,IAAI,kBAC5B4q3B,mBAAoBvrnB,KAGjByrnB,IACN31uB,GAEIA,IAER9vH,iBAAO,KAEVsgkB,EAAoBklS,GAQhBE,KAGFV,EAAyB,MACzB1kS,EAAoBtgkB,iBAAO,KAC3Bog2B,EAA2B,IAC3B8E,GAAsB,GACtBsB,GAAwB,MAEzB,CAACjlxB,IAEJ,IA6BMihgB,EAAsB,SAACC,EAAcpwmB,GACzC,OAAO,eAACqwmB,GAAA,EAAD,yBAAiBrwmB,IAAKA,GAASowmB,GAA/B,IAA6CE,UAAW,OAE3DC,EAAQvnkB,IAAM8E,WAAWqikB,GAE/B,OACE,eAAC51S,GAAA,EAAD,CAAQrrN,KAAMA,EAAMzxB,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAA9C,SACE,gBAACrvY,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,UACE,gBAAC59C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBwhC,MAAO,CAAE+X,aAAc,IAA1F,UACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,sCAEL,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAUyywB,EAAsB9qwB,QAAS8f,EAAlE,SACE,eAAC,KAAD,SAGJ,gBAAC9rD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQM,UAA1C,UACE,gBAACX,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEhgC,MAAOyyyB,IAAtE,UACE,eAACv0wB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,oDAEL,eAACgvY,GAAA,EAAD,CACE3hV,UAAWF,EAAQ+0yB,kBACnBji1B,QAAS890B,EAAkBvr2B,QAAU,GACrC04V,cAAe,SAACjrU,EAAShF,GACvB,IAAM6uM,EAAkB0zoB,EAAwBnw0B,cAC1C210B,EAA6B/xgB,EAAiBrxW,QAAO,SAACutI,EAAKliB,GAE/D,OADAkiB,EAAIliB,EAAQjzH,IAAI,mBAAqB,EAC9Bm1I,IACN,IACH,OAAOltG,EAAQzgC,QAAO,SAAAi1G,GACpB,OAAIq1H,EACKr1H,EAAO9kH,MAAM09C,cAAc7vC,SAASssO,KAAqBk5oB,EAA2BvuwB,EAAO29P,iBAE5F4wgB,EAA2BvuwB,EAAO29P,oBAG9C8tP,iBAAkBD,EAClBtwmB,MAAO,KACP2/Z,cAAetvY,EAAE,6BACjByvF,SAAU,SAACpzG,EAAG1M,GACZgulB,EAAoB1sO,EAAiB5wW,KAAKgd,iBAAO1tB,MAEnD+mH,WAAY8mwB,EACZ/mwB,cAAe,SAACp6G,EAAG1M,EAAO6vH,GAEtBi+vB,EADa,UAAXj+vB,EACyB,GAEA7vH,IAG/BwwmB,cAAc,EACd7qe,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ1/E,QAAS,IAC7C+7S,YAAa,SAAClqS,GAAD,OAAY,eAACujR,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,wDAAyDuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,KAC1I6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO1/E,cAG5D,eAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASqiC,MAAO,CAAEhgC,MAlOrD,IAkO5B,SACE,eAAC,KAAD,CAAkB2qB,MAAM,UAAUqV,MAAO,CAAEhgC,MAAO,QAEpD,gBAACzC,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAME,UAAU,SAAS4hC,MAAO,CAAEhgC,MApOlD,KAoOb,UACE,eAACk+B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,mDAGHsi2B,EACI,gBAACx1yB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMc,KAAK,SAA5C,UACE,eAAC07O,EAAA,EAAD,CACEx6T,MAAO6y3B,EACP/ywB,SAAU,SAACpzG,GAAD,OAAOom3B,EAAkBpm3B,EAAE4kB,OAAOtxB,UAE9C,eAACg/H,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,kBAAMypwB,GAAsB,IAA9D,SACE,eAAC,KAAD,MAEF,eAAC5zvB,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,SAAoC,KAA1BqxwB,EAAe/vvB,OAAe3Z,QAnGvD,WAC1B,GAAI0pwB,EAAe/vvB,OAAQ,CACzB,IAAMy1jB,EAAa7qqB,iBAAO,CACxB1tB,MAAO6y3B,EAAe/vvB,OACtB0/O,UAAW,GACX96G,cAAe,IAEjBgrnB,EAAyBn6L,GACzBq6L,GAAsB,GACtBE,EAAkB,MA0FJ,SACE,eAAC,KAAD,SAGJ,eAACzzd,GAAA,EAAD,CACE/uX,QAASy90B,EAAYlr2B,QAAU,GAC/Bi9F,SAAU,SAACpzG,EAAG1M,GACZ0y3B,EAAyBhl2B,iBAAO1tB,KAElCA,OAA4B,OAArByy3B,QAAqB,IAArBA,OAAA,EAAAA,EAAuB5v2B,SAAU,KACxC88Y,cAAetvY,EAAE,6BACjBmglB,cAAc,EACdjxM,kBAAkB,EAClB55R,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQ9kH,QAAS,IAC7CmhV,YAAa,SAAClqS,GACZ,OAAO,eAACs3E,GAAA,EAAD,CAASC,OAA4B,OAArBikwB,QAAqB,IAArBA,OAAA,EAAAA,EAAuBpq3B,IAAI,WAAY,GAAvD,SACL,eAACmyT,EAAA,EAAD,aAAWlrM,YAAaj/F,EAAE,uDAAwDuvF,MAAO,CAAEhgC,MAAO,SAAc3oC,OAGpH6lR,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAO9kH,SACxD0lU,eAAgB,YAA6B,IAA1B96R,EAAyB,EAAzBA,SAAa4D,EAAY,mBAC1C,OAAO,gBAAC2nF,GAAA,EAAD,2BAAW3nF,GAAX,IAAkBs3R,YAAa,SAAAp5T,GAAC,OAAIA,EAAEg5H,kBAAkB9lB,MAAO,CAAE6L,SAAU,OAA3E,UACJ7gF,EACD,eAACq+E,EAAA,EAAD,CACErJ,MAAO,CAAEuf,OAAQ,OAAQpT,aAAc,GACvC/N,QAAQ,WACRzT,MAAM,UACN4T,WAAW,EACXgL,QAAS,SAACz8G,GACRA,EAAE87G,kBACF97G,EAAEg5H,iBACFotvB,EAAkBzi2B,EAAE,qDACpBui2B,GAAsB,IAT1B,SAYGvi2B,EAAE,2DAQjBixV,EAAiBjhX,KAAO,GACtB,eAAC88E,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQy1P,cAAerzN,MAAO,CAAEhgC,MAAOyyyB,IAAzE,SACI/wgB,EAAiBh0W,KAAI,SAACuhX,EAAiBpuX,GAAlB,OAA4B,eAAC4pU,GAAA,EAAD,CAAkB3sP,UAAWF,EAAQ01P,KAAM9tS,MAAOypV,EAAgBxmX,IAAI,SAAUmiU,SAAU,kBApJzH,SAAC/pU,GACjCutlB,EAAoB1sO,EAAiBx0P,OAAOrsH,IAmJmH6y3B,CAA0B7y3B,KAA/GA,WAMtE,gBAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,aAAab,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,IAApG,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACRwD,SAAUyywB,EACVr0wB,MAAO,CAAEkG,YAAa,IACtBqD,QAAS8f,EALX,SAOG54G,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRwD,SAAUyywB,IAAyBxB,GAAmD,IAA1BnxgB,EAAiBjhX,KAC7Eu/G,MAAO,CAAEkG,YAAa,IACtBqD,QAxJS,WACjB+qwB,GAAwB,GACxBjl1B,EAAS,IAAI8vL,KAA+B,CAC1CuiJ,iBAAkBA,EAAiBrxW,QAAO,SAACutI,EAAKliB,GAAN,OAAkBkiB,EAAIxxI,IAAIsvH,EAAQjzH,IAAI,kBAAmBizH,KAAU5tG,iBAAO,KACpHw0qB,cAAeuwL,EACf7mjB,UAAW,WACTsojB,GAAwB,GACxBjrvB,SA4IE,SAOG54G,EAAE,sBAGH4j2B,GACE,eAAC/tjB,EAAA,EAAD,CAAkB7lU,KAAM,c,qBCnThCyzH,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhqnB,MAAO,IACPgB,SAAU,OACV41C,cAAe,IAEjB2kS,iBAAkB,CAChBv6S,UAAWphC,EAAMZ,QAAQ,GACzB+4C,aAAcn4C,EAAMZ,QAAQ,IAE9B0kT,YAAa,CACX/4R,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAC7Bk/E,YAAatmC,EAAMZ,QAAQ,QA6FhBu1yB,GAzF4D,SAAC,GAIrE,IAHLllxB,EAGI,EAHJA,KACAg6B,EAEI,EAFJA,QACAmrvB,EACI,EADJA,sBAEMnl1B,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KACVt0C,EAAQwjD,eAEd,EAAgDj6F,IAAMia,SAAqC,MAA3F,mBAAOw6V,EAAP,KAAyB62e,EAAzB,KAEAtr1B,IAAM0B,WAAU,WACTwkE,GACHolxB,EAAoB,QAErB,CAACplxB,IAEJ,IAAMqlxB,EAAkBvr1B,IAAM+B,SAC5B,kBAAOsp1B,EAAwBru3B,MAAMuN,KAAK8g3B,EAAsB3k3B,UAAUnC,KAAI,SAAC4zL,GAAD,OAAcA,EAASr+K,UAAU,KAC/G,CAACux2B,IAQH,OACE,eAAC95jB,GAAA,EAAD,CAAQrrN,KAAMA,EAAMzxB,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAA9C,SACE,gBAACrvY,GAAA,EAAD,WACE,gBAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,gBAAgBwhC,MAAO,CAAE+X,aAAc,IAA1F,UACE,eAAC7Z,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,gDAEL,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS8f,EAAlC,SACE,eAAC,KAAD,SAIJ,eAACo2R,GAAA,EAAD,CACE/uX,QAASgk1B,EACTt03B,OAAuB,OAAhBw9Y,QAAgB,IAAhBA,OAAA,EAAAA,EAAkB36X,SAAU,KACnCi9F,SAAU,SAACpzG,EAAG1M,GACZq03B,EAAoBr03B,EAAQ0tB,iBAAO1tB,GAAS,OAE9C2lI,eAAgB,SAAC7gB,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQgkkB,gBAAiB,IACrD3iV,kBAAmB,SAACrhP,EAAQ9kH,GAAT,OAAyB,OAAN8kH,QAAM,IAANA,OAAA,EAAAA,EAAQv/E,OAAR,OAAevlC,QAAf,IAAeA,OAAf,EAAeA,EAAOulC,KAC5D47S,YAAa,SAAClqS,GAAD,OACX,eAACujR,EAAA,EAAD,2BACMvjR,GADN,IAEEq4E,YAAaj/F,EAAE,kEACfuvF,MAAO,CAAEhgC,MAAO,YAGpBk9O,aAAc,SAACh4M,GAAD,OAAYA,GAAU,eAAChH,EAAA,EAAD,UAAagH,EAAOgkkB,iBACxDnpR,cAAetvY,EAAE,+BAGnB,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ29U,iBAA5E,UACE,eAAC,KAAD,CAAaz9U,UAAWF,EAAQ8lT,cAChC,eAACxlR,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SACGl6E,EAAE,qDAIP,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,WAAWb,WAAW,SAASqiC,MAAO,CAAEgB,UAAW,IAAlG,UACE,eAACqI,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,OACRmL,QAAS8f,EACTrpB,MAAO,CAAEkG,YAAatmC,EAAMZ,QAAQ,IAJtC,SAMGvuD,EAAE,wBAEL,eAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNyT,QAAQ,YACRwD,UAAWg8R,EACXr0R,QAxDmB,WAC3Bl6E,EAAS,IAAIoyL,MAA+B,CAAEngC,SAAUs8M,KACxDv0Q,KAkDM,SAMG54G,EAAE,wE,+DC3HA43F,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,uFACD,gBCFW69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,gJACD,uB,gICKEmq3B,GAAqB,SAAC,GAWqF,IAV/Gz0wB,EAU8G,EAV9GA,SAU8G,IAT9G9/G,aAS8G,MATtG,GASsG,EAR9GipG,EAQ8G,EAR9GA,MAQ8G,IAP9G2jtB,6BAO8G,MAPtF,KAOsF,MAN9G+lD,qBAM8G,SAL9GtlwB,EAK8G,EAL9GA,QACA28B,EAI8G,EAJ9GA,OACA5oB,EAG8G,EAH9GA,WACAnD,EAE8G,EAF9GA,WACGr1F,EAC2G,mBACxGktkB,EAAY/sjB,IAAMyG,SAExB,EAAoCzG,IAAMia,SAAShjD,GAAnD,mBAAOw03B,EAAP,KAAmBC,EAAnB,KACA,EAA6CriB,GAAW/kwB,EAAS28B,GAAzDghL,EAAR,EAAQA,QAAS+ld,EAAjB,EAAiBA,YAAa3pf,EAA9B,EAA8BA,WAExBstmB,EAAoB3r1B,IAAMykF,YAAY0nE,mBAASp1E,EAAU7W,GAAS,KAAO,CAAC2jtB,EAAuB9ssB,IAEjG60wB,EAAiB5r1B,IAAMykF,aAAY,SAAA9gH,GACvC+n3B,EAAc/n3B,EAAE4kB,OAAOtxB,OACvB003B,EAAkBho3B,EAAE4kB,OAAOtxB,SAC1B,CAAC4szB,IAEJ7jxB,IAAMyB,iBAAgB,WAChBxqC,IAAUw03B,GACZC,EAAcz03B,KAEf,CAAC4szB,EAAuB5szB,IAE3B+oC,IAAM0B,WAAU,WACdqrjB,EAAU1pjB,QAAUpsC,KAGtB,IAAMy+yB,EAAez+yB,IAAU81lB,EAAU1pjB,QAAUpsC,EAAQw03B,EACrDI,EAAsBjiB,GAAiB3njB,EAAjB,2BAErB5pM,GAFqB,IAGxB6kN,aACE,gBAAC,IAAMp3C,SAAP,WACGztK,GAAcA,EAAW6kN,aAC1B,eAAC,GAAD,CAAoBvsT,OAAQ+kyB,GAAgB,IAAIt4yB,cAIpDi7G,EAEJ,OAAO,eAACo5M,EAAA,EAAD,aACLx6T,MAAOy+yB,EACP3+rB,SAAU60wB,EACVtnxB,QAASslwB,EAAgB5hG,EAAc1jqB,EACvC28B,OAAQ2ouB,EAAgBvrlB,EAAap9I,EACrC5oB,WAAYwzwB,EACZ32wB,WAAYA,GACRr1F,KAIOmgB,OAAM4G,KAAK4k1B,I,mDCjEXtswB,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mDACD,gBCwGW2pyB,GAlGM,SAAfA,EAAgB,GAIf,IAHLt8qB,EAGI,EAHJA,SAAUs9J,EAGN,EAHMA,YAGN,IAHmBk/gB,mBAGnB,MAHiC,CACnC,CAAE7uwB,MAAO,MAEP,EACJ,EAA0C2D,WAAe,MAAzD,mBAAO8r1B,EAAP,KAAsBC,EAAtB,KACA,EAAoD/r1B,WAAe,IAAnE,mBAAOgs1B,EAAP,KAA2BC,EAA3B,KAIMxpvB,GAFaziG,SAAa,MAEZ,wEAGmC,CAAE+2E,SAAU,kBAAM,OAHrD,IAClBA,gBADkB,MACP,kBAAM,MADC,EAElBm1wB,EAFkB,EAElBA,SAC+E3t3B,EAH7D,8CAGoE,SAAAoF,GACtFA,EAAE87G,kBACGyswB,IACHlgmB,EAAY,MACZigmB,EAAsB,KAExBl1wB,EAASpzG,EAAGpF,MAUd,OAPAyhC,aAAgB,WACQ,OAAlB8r1B,GACF9/lB,EAAY,QAEb,CAAC8/lB,IAIF,eAAC5/lB,GAAA,EAAD,CACEx9J,SAAUA,EACV2pT,aAAa,EACbnyU,KAAMttG,QAAQ81H,GACdwR,QAASuC,IAJX,SAMGyoqB,EAAY3myB,KAAI,WAcH,IAbZ+pH,EAaW,uDAJP,CACAjyF,MAAO,GACP06E,SAAU,kBAAM,MAChBm1wB,UAAU,GACT3t3B,EAAM,uCAET4t3B,EAQE79vB,EARF69vB,WACA9v1B,EAOEiyF,EAPFjyF,MACA8wF,EAMEmB,EANFnB,KACAkS,EAKE/Q,EALF+Q,aAGA+svB,GAEE99vB,EAJFvX,SAIEuX,EAHF49vB,SAGE59vB,EAFF89vB,eACaC,EACX/9vB,EADF48qB,YAGIz1vB,EAAQ420B,EACZ,gBAACv0wB,GAAA,EAAD,yBAAkBsI,QAASqiB,EAAY,CACrCypvB,UAAU,EACVn1wB,SAAU,SAAApzG,GAAOoo3B,EAAiBpo3B,EAAEs8G,eAAgBgswB,EAAsBI,KACzE9t3B,IAAQ6t3B,GAHX,IAG0BthhB,QAASqhhB,EAAYt1wB,MAAO,CAAEviC,aAAc,UAHtE,UAIG17E,QAAQu0H,IAAS,eAACmtS,GAAA,EAAD,UAAentS,IAChC9wF,EACD,gBAACiw1B,GAAA,EAAD,WACE,eAACthF,EAAD,CAAct8qB,SAAUo9vB,EAAe9/lB,YAAa+/lB,EAAkB7gF,YAAa8gF,IACnF,eAACO,GAAD,CAAc11wB,MAAO,CAGnB2B,SAAU,WACVziG,OAAQ,GACR85G,IAAK,MACL+H,UAAW,4BAdFr5H,GAmBf,gBAACu5G,GAAA,EAAD,yBAAkBsI,QAASqiB,EAAYnU,EAAU/vH,IAAQ6t3B,GAAzD,IAAwEthhB,QAASqhhB,EAAjF,UACGvz3B,QAAQu0H,IAAS,eAACmtS,GAAA,EAAD,UAAentS,IAChC9wF,KAFY99B,GAKjB,OAAO3F,QAAQymI,GACb,eAAC7Z,GAAA,EAAD,CAAiBC,MAAO4Z,EAAxB,SACE,gCAAO5pF,KADKl3C,GAIdk3C,QChGJ+20B,GAAgB,SAAC,GAAiD,IAA/C99vB,EAA8C,EAA9CA,SAAUs9J,EAAoC,EAApCA,YAAak/gB,EAAuB,EAAvBA,YAExCuhF,EADWx/0B,sBAAYowN,eACCn2P,QAAO,SAACutI,EAAKwqH,EAAS1gQ,GAClD,IAAMy/W,GAAgB/+G,GAAW9wP,iBAAO7O,IAAI,iBAAmB,GACzDyhM,GAAYk+D,GAAW9wP,iBAAOgO,MAAM,CAAC,SAAU,eAAgB,EAE/DwiP,EAAY,OAAGusiB,QAAH,IAAGA,OAAH,EAAGA,EAAavsiB,aAC5Bx+N,EAAWvnC,QAAO,OAACsyyB,QAAD,IAACA,OAAD,EAACA,EAAa/qwB,UAAY,yBAAM+qwB,QAAN,IAAMA,OAAN,EAAMA,EAAa/qwB,SAAS5hC,EAAGwiM,IAAY,kBAAMmqmB,EAAY3syB,EAAGwiM,IASlH,OAPAtsD,EAAI9sI,KAAK,CACP00B,MAAO2hV,EACPjnQ,SAAU52E,EACVis1B,cAAe,CACb3zwB,SAAUl6G,IAAMogQ,KAGblqH,IACN,IAEH,OAAO,eAAC,GAAD,CAAc/lB,SAAUA,EAAUs9J,YAAaA,EAAak/gB,YAAauhF,KAKnEC,GAFM1s1B,OAAWws1B,I,oECvB1BG,GAAc,SAAC,GAAD,IAAGvswB,EAAH,EAAGA,QAASmM,EAAZ,EAAYA,SAAa1sG,EAAzB,0BAAuF,eAACo2G,GAAA,EAAD,yBACzG7V,QAASA,EAAS9oH,KAAK,SAAYuoB,GADsE,aAExG0sG,EAAW,eAAC,KAAD,IAAiB,eAAC,KAAD,QAKhBqgwB,GAFI5s1B,OAAW2s1B,I,gCTR1B,GAAY,CAAC,QAAS,WAE1B,SAAStn1B,KAA2Q,OAA9PA,GAAW1rC,OAAO+8C,QAAU,SAAUnuB,GAAU,IAAK,IAAIhqB,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAAE,IAAIiqB,EAASvpB,UAAUV,GAAI,IAAK,IAAIsB,KAAO2oB,EAAc7uB,OAAOD,UAAUoD,eAAeP,KAAKisB,EAAQ3oB,KAAQ0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAY,OAAO0oB,GAAkB8c,GAAS7hC,MAAMjI,KAAM0D,WAEhT,SAASw5C,GAAyBjwB,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAAkE3oB,EAAKtB,EAAnEgqB,EAEzF,SAAuCC,EAAQu4K,GAAY,GAAc,MAAVv4K,EAAgB,MAAO,GAAI,IAA2D3oB,EAAKtB,EAA5DgqB,EAAS,GAAQgvP,EAAa59Q,OAAO0D,KAAKmrB,GAAqB,IAAKjqB,EAAI,EAAGA,EAAIg5Q,EAAWn6Q,OAAQmB,IAAOsB,EAAM03Q,EAAWh5Q,GAAQwiM,EAAShlL,QAAQlc,IAAQ,IAAa0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAQ,OAAO0oB,EAFxM0c,CAA8Bzc,EAAQu4K,GAAuB,GAAIpnM,OAAOkgB,sBAAuB,CAAE,IAAImnL,EAAmBrnM,OAAOkgB,sBAAsB2O,GAAS,IAAKjqB,EAAI,EAAGA,EAAIyiM,EAAiB5jM,OAAQmB,IAAOsB,EAAMmhM,EAAiBziM,GAAQwiM,EAAShlL,QAAQlc,IAAQ,GAAkBlG,OAAOD,UAAUgJ,qBAAqBnG,KAAKisB,EAAQ3oB,KAAgB0oB,EAAO1oB,GAAO2oB,EAAO3oB,IAAU,OAAO0oB,EAMne,SAASsk2B,GAAejr1B,EAAMkmW,GAC5B,IAAIriR,EAAQ7jF,EAAK6jF,MACbsiR,EAAUnmW,EAAKmmW,QACftiW,EAAQgT,GAAyB7W,EAAM,IAE3C,OAAoB,gBAAoB,MAAOyD,GAAS,CACtDwxC,MAAO,GACPi2C,OAAQ,GACR+kJ,QAAS,YACTztI,KAAM,OACNwtI,MAAO,6BACP56Q,IAAK8wY,EACL,kBAAmBC,GAClBtiW,GAAQggF,EAAqB,gBAAoB,QAAS,CAC3DjpF,GAAIurW,GACHtiR,GAAS,KAAM0qmB,KAAOA,GAAkB,gBAAoB,IAAK,CAClEr9c,SAAU,4BACI,gBAAoB,OAAQ,CAC1CzxQ,EAAG,qjBACH+iI,KAAM,cACFs8tB,KAAUA,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,WAAY,CAClHlk0B,GAAI,sBACU,gBAAoB,OAAQ,CAC1Cq6C,MAAO,GACPi2C,OAAQ,GACRsX,KAAM,cAIV,IUvCY0ovB,GVuCR93iB,GAA0B,aAAiB63iB,I,IAChC,I,kBWnCFE,GAAoB,SAACzl2B,EAAGuyV,GACnC,OACE,uCACE,eAAC9kQ,EAAA,EAAD,CAAYE,QAAQ,QAAQ6K,QAAQ,EAAMjJ,MAAO,CAAEkG,YAAa,GAAhE,SACGz1F,EAAE,yCAEL,eAAC,KAAD,CAAMk6E,MAAM,UAAUh3F,GAAI2gZ,KAA8BwB,gBAAgB9yC,GAAxE,SACE,eAAC9kQ,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUse,QAAQ,EAApD,SACG,MAAQ+5P,EAAYr9U,WCIzBww1B,GAAa,SAAC,GAoCb,IAnCLxw1B,EAmCI,EAnCJA,GACAyw1B,EAkCI,EAlCJA,aACAC,EAiCI,EAjCJA,WACAC,EAgCI,EAhCJA,iBACAC,EA+BI,EA/BJA,oBACAn23B,EA8BI,EA9BJA,MACAo23B,EA6BI,EA7BJA,cACAC,EA4BI,EA5BJA,OACA70wB,EA2BI,EA3BJA,SACA80wB,EA0BI,EA1BJA,WACAC,EAyBI,EAzBJA,cACAC,EAwBI,EAxBJA,UACAC,EAuBI,EAvBJA,gBACAC,EAsBI,EAtBJA,kBACAzrO,EAqBI,EArBJA,cACA0rO,EAoBI,EApBJA,wBACA5pP,EAmBI,EAnBJA,SAoBMj3C,EAAY/sjB,WAMZ6t1B,EAAU7t1B,UAAa,GACvBkG,EAAW2F,wBACX4oC,EAAUs2C,KACVt0C,EAAQwjD,eACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAoC0Y,WAAe/oC,GAAnD,mBAAOw03B,EAAP,KAAmBC,EAAnB,KACA,EAA0B1r1B,WAAe,GAAzC,mBAAO62C,EAAP,KAAc8xkB,EAAd,KACA,EAAwB3onB,YAAe,GAAvC,mBAAOmpU,EAAP,KAAa2khB,EAAb,KAEA9t1B,mBAAsB,WACpB,GAAImpU,EAAM,CAAC,IAAD,EACF4khB,EAAM,UAAGxs1B,SACZghhB,eAAe/lhB,EAAK,gBADX,aAAG,EAEXg5P,wBAAwB3+M,MAC5B8xkB,EAASolO,GAAWP,GAAiB/0wB,EAAY,GAAK,IAEtDq1wB,GAAQ,MAET,CAAC3khB,IAEJ,IAAMpyP,EAAW/2E,eAAkB,SAAAr8B,IAK5Bkq3B,EAAQxq1B,SAAWiq1B,IACtBO,EAAQxq1B,SAAU,EAClB6C,EAAS,IAAIkuL,KAA6B,CAAEk5pB,aAE9C3p3B,EAAEg/H,UACF,IAAMrnH,EAAQ3X,EAAE4kB,OAAOggiB,eACjBxwjB,EAAM4L,EAAE4kB,OAAOigiB,aACf9hjB,EAAS6m3B,EAAaA,EAAW5p3B,EAAE4kB,OAAOtxB,OAAS0M,EAAE4kB,OAAOtxB,MAC5D+23B,EAAuB5j3B,OAAOqh3B,GAAYru3B,OAASsJ,EAAOtJ,QAAU,EAAI,EAAI,EAClFsu3B,EAAchl3B,GACdym3B,EAAiB,CAAEzm3B,SAAQ2m3B,gBAAeC,WACtC5m3B,IAAW/C,EAAE4kB,OAAOtxB,OACtBgzB,OAAO4rQ,uBAAsB,WAC3BlyR,EAAE4kB,OAAOggiB,eAAiBjtiB,EAAQ0y2B,EAClCrq3B,EAAE4kB,OAAOigiB,aAAezwjB,EAAMi23B,KAGlCF,GAAQ,KACP,CAACrC,EAAY8B,EAAYF,EAAeC,IAErCrsvB,EAASjhG,eAAkB,WAC3B6t1B,EAAQxq1B,UAKVwq1B,EAAQxq1B,SAAU,EAClB+p1B,EAAoB,CAAE1m3B,OAAQ+k3B,EAAY4B,gBAAeC,cAE1D,CAAC7B,EAAY4B,EAAeC,IAEzBhpxB,EAAUtkE,eAAkB,SAAAr8B,GAChCA,EAAEs8G,cAAcwwS,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,aAC3D,IAOH7uO,aAAgB,kBAAM,WAChB6t1B,EAAQxq1B,SAAWiq1B,IACrBO,EAAQxq1B,SAAU,EAClB6C,EAAS,IAAIouL,KAA6B,CAAEg5pB,gBAE7C,IAEH,IAAMv8f,GAAW,EACXk9f,EAAUju1B,WAChBA,aAAgB,WACdkt1B,EAAWG,EAAgB,EAAGY,KAC7B,CAACZ,IAEJ,IAAM3wvB,EAAY,SAAA/4H,GACE,KAAdA,EAAE02S,SAAgC,KAAd12S,EAAE02S,SACxB4ykB,EAAaI,EAAe1p3B,EAAE02S,UAIlCr6Q,aAAgB,WACd+sjB,EAAU1pjB,QAAUpsC,KAGtB+oC,aAAgB,WACV/oC,IAAUw03B,IACZC,EAAcz03B,GACd623B,GAAQ,MAET,CAAC723B,IAEJ,IAAMimU,EAAeuwjB,EACC,iBAAlBvrO,EACE,eAAC18hB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,mCAAlB,SACE,eAACixF,GAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,eAAC,KAAD,CAAa3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,YAGrD,eAAC2nF,GAAA,EAAD,CAASC,MAAOn+F,EAAE,2BAAlB,SACE,eAACixF,GAAA,EAAD,CAAgBC,SAAS,MAAzB,SACE,eAAC,KAAD,CAAgB3B,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,KAAM+5F,UAAW,wBAG7E,KAEJ,OAAO,gBAAC2zJ,GAAA,EAAD,WACJ49E,GACC,uBACE3sU,GAAIA,EAAK,QACTq6E,MAAO,CACLlgC,QAAS,eACTkB,SAAU,OACVm6C,WAAY,MACZpM,SAAU,UANd,SASG3uH,IAAU81lB,EAAU1pjB,QAAUpsC,EAAQw03B,IAG3C,gBAACr3yB,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UAGE23yB,GAAmBC,EACjB,eAACnowB,GAAA,EAAD,CACEC,MACE,iCACE,uBAAM5O,MAAO,CAAElgC,QAAS,SAAxB,SAAoC,uDACpC,4CAAYg3yB,EAAkBru3B,IAAI,gBAAlC,cAAuDqu3B,EAAkBru3B,IAAI,QAA7E,YAAwFqu3B,EAAkBru3B,IAAI,oBAJpH,SAQE,eAACmyT,EAAA,EAAD,CACEr8M,WAAW,EACXzgC,UAAW+4yB,EAAkBj5yB,EAAQq8xB,0BAA4Br8xB,EAAQo8xB,eACzEn0uB,UAAWA,EACXzlI,MAAOA,IAAU81lB,EAAU1pjB,QAAWpsC,GAAS,GAAOw03B,GAAc,GACpE10wB,SAAUA,EACVkqB,OAAQA,EACR5oB,WAAY,CAGVq7iB,iBAA8Bj7iB,EAC9Bgvc,SAAU12L,EACVt8S,QAAS,CACP3hE,KAAM2hE,EAAQm8xB,eAEhB1ziB,gBAEFhoN,WAAY,CAAE14E,KAAIq6E,MAAO,CAAEhgC,QAAOE,SAAU,OAAQyxC,UAAW,QAAShnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,UAClGpc,QAASA,EACTmU,SAAUA,EACVqkN,SAAUmxjB,MAId,uCACE,eAACx8jB,EAAA,EAAD,CACEr8M,WAAW,EACXzgC,UAAW+4yB,EAAkBj5yB,EAAQq8xB,0BAA4Br8xB,EAAQo8xB,eACzEn0uB,UAAWA,EACXzlI,MAAOA,IAAU81lB,EAAU1pjB,QAAWpsC,GAAS,GAAOw03B,GAAc,GACpE10wB,SAAUA,EACVkqB,OAAQA,EACR5oB,WAAY,CAGVq7iB,iBAA8Bj7iB,EAC9Bgvc,SAAU12L,EACVt8S,QAAS,CACP3hE,KAAM2hE,EAAQm8xB,eAEhB1ziB,gBAEFhoN,WAAY,CAAE14E,KAAIq6E,MAAO,CAAEhgC,QAAOE,SAAU,OAAQyxC,UAAW,QAAShnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,UAClGpc,QAASA,EACTmU,SAAUA,EACVqkN,SAAUmxjB,IAEVL,GACA,eAAC33vB,GAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS4jhB,EAAS,CAChB,CACE3nmB,MAAO0w1B,GAAkBzl2B,EAAD,OAAIsm2B,QAAJ,IAAIA,OAAJ,EAAIA,EAAyB/zgB,gBAJ3D,SAQE,eAAC,GAAD,CAAuBn3P,SAAS,eAMxC8qwB,GAAiB,uBAAM74yB,UAAWF,EAAQs8xB,OAAzB,SAAkC,kBAQ1Cmd,GAFGlu1B,OAAWgt1B,I,oFCvQd9twB,gBAAcl/E,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,OAAQ,KAAMxB,IAAMwB,cAAc,OAAQ,CACnIhF,GAAI,IACJn7B,EAAG,qBACA2+B,IAAMwB,cAAc,OAAQ,CAC/BngC,EAAG,8EACA,iBCLU69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,wYACD,kBCFW69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mGACD,WCFW69G,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mDACD,UCFW69G,gBAAcl/E,IAAMwB,cAAcxB,IAAM8lP,SAAU,KAAM9lP,IAAMwB,cAAc,OAAQ,CACjG4iG,KAAM,OACN/iI,EAAG,kBACHonH,QAAS,QACPzoF,IAAMwB,cAAc,OAAQ,CAC9BngC,EAAG,uOACA,kB,wCPNOyr3B,K,oBAAAA,E,qBAAAA,Q,wCQ8BN/hwB,GAAYJ,cAAW,SAACl0C,GAAD,MAAmB,CAC9CoqnB,YAAa,CACXhpnB,SAAU,OACVhB,MAAO,QAET6pgB,YAAa,CACX/pgB,QAAS,OACTM,eAAgB,gBAChBzC,WAAY,SACZ6C,QAASZ,EAAMZ,QAAQ,EAAG,IAE5Bs4yB,eAAgB,CACdx3yB,QAAS,OACTnC,WAAY,SACZ6C,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,GAChCe,SAAU,QAEZwzP,gBAAiB,CACfzzP,QAAS,OACTnC,WAAY,SACZuoC,YAAatmC,EAAMZ,QAAQ,IAE7Bu4yB,gBAAiB,CACf5sxB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B7b,SAAU,GACV3F,YAAatmC,EAAMZ,QAAQ,IAE7Bw4yB,iBAAkB,CAChB7sxB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1BzG,WAAY,IACZpV,SAAU,GACV3F,YAAatmC,EAAMZ,QAAQ,IAE7By4yB,iBAAkB,CAChB5rwB,SAAU,GACVS,aAAc,aAAe1sC,EAAM+pC,QAAQ4G,KAAK1G,QAChD+M,cAAe,GAEjB6vQ,eAAgB,CACd1uQ,aAAcn4C,EAAMZ,QAAQ,GAC5B2vD,UAAW,QAEbk5B,MAAO,CACLtoC,OAAQ,oBACRpT,aAAc,EACdi9M,eAAgB,WAChBr6M,SAAU,SACVimkB,YAAa,SAEf53P,WAAY,CACVn8T,WAAY,IACZpV,SAAU,GACVlhB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1Bpb,aAAc,oBACd9rC,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B04yB,SAAU,CACR7rwB,SAAU,GACVrrC,QAASZ,EAAMZ,QAAQ,IAAK,GAC5BstC,aAAc,oBACd5C,gBAAiB,WAEnBmiQ,qBAAsB,CACpBlhR,MAAO,UACPs2B,WAAY,IACZlX,OAAQ,WAEV4twB,oBAAqB,CACnBhtxB,MAAO,UACPs2B,WAAY,IACZpV,SAAU,GACV4N,cAAe,YACf1P,OAAQ,UACRoR,WAAY,SACZ,UAAW,CACTvwB,eAAgB,cAGpBgtxB,SAAU,CACR7owB,SAAU,SACVsL,aAAc,WACdc,WAAY,SACZn6C,SAAU,KAEZ62yB,aAAc,CACZr3yB,QAAS,GAEXs3yB,gBAAiB,CACfh4yB,QAAS,OACTU,QAASZ,EAAMZ,QAAQ,EAAG,EAAG,EAAG,IAElC+4yB,cAAe,CACbptxB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B7b,SAAU,GACVoV,WAAY,IACZ/gD,SAAU,IAEZ83yB,cAAe,CACbnswB,SAAU,IAEZoswB,eAAgB,CACd3rwB,aAAc,OACd5C,gBAAiB,WAEnBwuwB,YAAa,GAEbC,eAAgB,CACdn4yB,MAAO,GACPQ,QAAS,WAEX43yB,qBAAsB,CACpB53yB,QAAS,GAEX63yB,UAAW,CACTr4yB,MAAO,IAETs4yB,wBAAyB,CACvBt4yB,MAAO,IACPgB,SAAU,KAEZu3yB,QAAS,CACPv4yB,MAAO,IACPgB,SAAU,KAEZw3yB,yBAA0B,CACxBx4yB,MAAO,IACPgB,SAAU,KAEZy3yB,SAAU,CACRv4yB,SAAU,IAEZw4yB,UAAW,CACT14yB,MAAO,KAET24yB,gBAAiB,CACfhuxB,MAAO,UACPs2B,WAAY,IACZpV,SAAU,GACV4N,cAAe,YACf1P,OAAQ,UACRoR,WAAY,SACZoE,OAAQ,sBACRpT,aAAc,GACd3rC,QAAS,WACT,UAAW,CACTkpC,gBAAiB,iCAgBjBkvwB,GAAuB7o1B,gBAAK,YAQ3B,IAPL2wH,EAOI,EAPJA,IACA4qN,EAMI,EANJA,QACAutgB,EAKI,EALJA,gBAMMj7yB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAgC2yB,oBAAS,GAAzC,mBAAOsyE,EAAP,KAAiB62M,EAAjB,KAEA,OACE,uCACE,gBAAC4wH,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,CAAW52M,UAAS,UAAK43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAjD,YAA6D95yB,EAAQu6yB,gBAAzF,SACE,eAAC/4vB,GAAA,EAAD,CAAYthD,UAAWF,EAAQi6yB,aAAcp33B,KAAK,QAAQ8oH,QAAS,kBAAMgjN,GAAa72M,IAAtF,SACGA,EAAW,eAAC,KAAD,IAA0B,eAAC,KAAD,QAG1C,eAACg/J,GAAA,EAAD,CAAW52M,UAAW43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAlE,SACE,uBAAM55yB,UAAWF,EAAQiuS,qBAAzB,SAAgDnrN,EAAImrN,yBAEtD,eAACn3F,GAAA,EAAD,CAAW52M,UAAW43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAlE,SACE,eAAC/owB,GAAA,EAAD,CAASC,MAAO8xC,EAAIhtJ,KAAMm7G,UAAU,MAApC,SACE,sBAAK/wC,UAAWF,EAAQg6yB,SAAxB,SAAmCl3tB,EAAIhtJ,WAG3C,eAACghR,GAAA,EAAD,CAAW52M,UAAW43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAlE,SAA6Eh3tB,EAAIorN,wBAChFR,EAAQ59W,KAAI,SAACizJ,GAAD,aACX,eAAC+zH,GAAA,EAAD,CAAyB52M,UAAW43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAhF,mBACGh3tB,EAAI7wJ,OAAO8wJ,EAAI33J,YADlB,QAC0B,KADV23J,EAAI33J,QAIrB6v3B,GACC,eAACnkmB,GAAA,EAAD,CAAW52M,UAAW43C,EAAW93C,EAAQq6yB,eAAiBr6yB,EAAQ85yB,SAAlE,SACE,uBAAM55yB,UAAWF,EAAQ+5yB,oBAAqBpuwB,QAAS,kBAAMsvwB,EAAgBn4tB,EAAIqjN,cAAe,CAACrjN,EAAI/6H,MAArG,SACGlV,EAAE,8CAKX,eAAC0sa,GAAA,EAAD,CAAUr/W,UAAW43C,EAAW93C,EAAQs6yB,iBAAc133B,EAAtD,SACE,eAACk0R,GAAA,EAAD,CAAW52M,UAAWF,EAAQw6yB,qBAAsBx/F,QAAStta,EAAQ/kX,OAAS,GAAKsy3B,EAAkB,EAAI,GAAzG,SACE,eAAC3ujB,GAAA,EAAD,CAAUx9L,GAAIhX,EAAUvsB,QAAQ,OAAOwjC,eAAe,EAAtD,SACE,gBAAC2sL,GAAA,EAAD,CAAKx7O,UAAWF,EAAQk6yB,gBAAxB,UACE,gBAACx+jB,GAAA,EAAD,CAAK5yL,KAAM,EAAX,UACE,gBAACxoB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQm6yB,cAA/B,UAA+Ctn2B,EAAE,kCAAjD,OACA,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo6yB,cAA/B,SAA+Ct3tB,EAAIr7B,aAAe,QAEpE,gBAACi0L,GAAA,EAAD,CAAK5yL,KAAM,EAAX,UACE,gBAACxoB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQm6yB,cAA/B,UAA+Ctn2B,EAAE,oBAAjD,OACA,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo6yB,cAA/B,SAA+Ct3tB,EAAIqrN,OAAS,uBAiI7D+sgB,GAvHW/o1B,gBAAK,YASA,EAR7BgnL,QAQ8B,IAAD,EAP7B8rJ,EAO6B,EAP7BA,eAEAxzQ,GAK6B,EAN7BgzwB,kBAM6B,EAL7BhzwB,MACAg8Q,EAI6B,EAJ7BA,oBACAvjH,EAG6B,EAH7BA,aACAz+H,EAE6B,EAF7BA,QACAwvvB,EAC6B,EAD7BA,gBAEMj7yB,EAAUs2C,KACRzjG,EAAM+xB,YAAe,gBAArB/xB,EACFso2B,EAAgB7t1B,mBAAQ,kBAAMq3U,KAAc6I,mBAAmBC,EAAqBxI,KAAiB,CAACwI,EAAqBxI,IAE3Hm2gB,EAAkB5i1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,cAC3EnpI,EAAY,iBAAGq6vB,QAAH,IAAGA,OAAH,EAAGA,EAAiBtu2B,WAAU,SAACyvD,GAAD,OAAYA,EAAE1xE,IAAI,oBAAsBo6W,YAAtE,SAA0F,EACtGnnP,EAAUiD,GAAgB,EAAIq6vB,EAAgBvw3B,IAAIk2H,GAAgB,KAClEwoP,EAAe/wU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,kBACxE5lK,EAAS9rD,sBAAY24N,aAAkB,CAAC,uBACxCrwI,EAAa,OAAGhD,QAAH,IAAGA,OAAH,EAAGA,EAASp2G,MAAM,CAAC,oBAAqB,kBACrDyiP,EAAc3xN,sBAAYyxN,YAAsB3lK,EAAQw8B,EAAeopI,EAAcnpI,IACrFs6vB,GAAmC,OAAXlxnB,QAAW,IAAXA,OAAA,EAAAA,EAAat/P,IAAI,SAAUu7B,4BAEnDk11B,EAAoBD,GACrB,OAAClxnB,QAAD,IAACA,OAAD,EAACA,EAAat/P,IAAI,4BAAnB,OAAgDs/P,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAat/P,IAAI,2BAA6B,IADnD,OAE3Cs/P,QAF2C,IAE3CA,OAF2C,EAE3CA,EAAat/P,IAAI,iBACf0w3B,EAAmBF,GACpB,OAAClxnB,QAAD,IAACA,OAAD,EAACA,EAAat/P,IAAI,oBAAnB,OAAwCs/P,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAat/P,IAAI,mBAAqB,IADpC,OAE1Cs/P,QAF0C,IAE1CA,OAF0C,EAE1CA,EAAat/P,IAAI,SAEfg82B,EAA0Bv50B,mBAAQ,kBAAMs3K,aAA2BqpH,QAAoB,IACvF64iB,EAAsBtu0B,sBAAYqu0B,GAElCl8e,EAAc,CAClBphB,aAAcA,GAAgB,GAC9BvpP,cAAes7vB,IAAiB,OAAIx9vB,QAAJ,IAAIA,OAAJ,EAAIA,EAASjzH,IAAI,mBAAoB,GACrEk5I,aAAcw3uB,IAAgB,OAAIz9vB,QAAJ,IAAIA,OAAJ,EAAIA,EAASp2G,MAAM,CAAC,eAAgB,wBAApD,OAA4Eo2G,QAA5E,IAA4EA,OAA5E,EAA4EA,EAASjzH,IAAI,WAAY,IAGrH,OACE,gBAACiyT,GAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAAS,SAAC2+oB,EAAQ/3pB,GACZy0vB,GAAkC,kBAAXz0vB,GAC3BoZ,KAEFzrD,QAAS,CAAE64C,MAAO74C,EAAQosnB,aAC1BhpnB,UAAU,EACVo8S,cAAesnf,EACfxyI,oBAAqBwyI,EACrBnoR,cAAemoR,EAAsB,CAAEjhlB,WAAW,QAASjjS,EAV7D,UAYE,gBAACs8a,GAAA,EAAD,CAAasxU,mBAAmB,EAAMtwqB,UAAWF,EAAQisgB,YAAzD,UACE,eAAC3re,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,uCAC5B,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS8f,EAAlC,SACE,eAAC,KAAD,SAIJ,gBAACiwL,GAAA,EAAD,CAAKx7O,UAAWF,EAAQ05yB,eAAxB,UACE,gBAACh+jB,GAAA,EAAD,CAAKx7O,UAAWF,EAAQ21P,gBAAxB,UACE,eAAC,KAAD,CAAiBj9M,KAAK,MAAMx4C,UAAWF,EAAQ25yB,kBAC/C,eAACr5wB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ45yB,iBAA/B,SAAkD/m2B,EAAE,sCACpD,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ65yB,iBAA/B,SAAkDlvf,EAAYphB,kBAEhE,gBAAC7tD,GAAA,EAAD,CAAKx7O,UAAWF,EAAQ21P,gBAAxB,UACE,eAAC,KAAD,CAAiBj9M,KAAK,MAAMx4C,UAAWF,EAAQ25yB,kBAC/C,eAACr5wB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ45yB,iBAA/B,SAAkD/m2B,EAAE,iCACpD,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ65yB,iBAA/B,SAAkDlvf,EAAY3qQ,mBAEhE,gBAAC07L,GAAA,EAAD,CAAKx7O,UAAWF,EAAQ21P,gBAAxB,UACE,eAAC,KAAD,CAAWz1P,UAAWF,EAAQ25yB,kBAC9B,eAACr5wB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ45yB,iBAA/B,SAAkD/m2B,EAAE,wCACpD,eAACytF,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ65yB,iBAA/B,SAAkDlvf,EAAY5mP,qBAIlE,eAACg5K,GAAA,EAAD,UACGo+jB,EAAcrr3B,KAAI,SAACs3I,EAAOD,GAAR,OACjB,eAACgwiB,GAAA,EAAD,CAAiCj3mB,UAAWF,EAAQ6oT,eAApD,SACE,gBAACu2D,GAAA,EAAD,CAAOl/W,UAAWF,EAAQiqF,MAAO7nD,MAAO,CAAE9/B,SAAU,IAA6B,IAAvB8kE,EAAMsmO,QAAQ/kX,QAAxE,UACE,eAAC02b,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,WACE,eAACzoK,GAAA,EAAD,CAAW52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQy6yB,aACvD,eAAC3jmB,GAAA,EAAD,CAAW52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQ06yB,yBAAvD,SAAmF7n2B,EAAE,0CACrF,eAACikQ,GAAA,EAAD,CAAW52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQ26yB,SAAvD,SAAmE9n2B,EAAE,sCACrE,eAACikQ,GAAA,EAAD,CAAW52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQ46yB,0BAAvD,SAAoF/n2B,EAAE,kDACrFu0H,EAAMsmO,QAAQ59W,KAAI,SAACizJ,GAAD,OACjB,eAAC+zH,GAAA,EAAD,CAAyB52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQ66yB,UAArE,SAAkF93tB,EAAIn7H,OAAtEm7H,EAAI33J,QAErB6v3B,GACC,eAACnkmB,GAAA,EAAD,CAAW52M,UAAS,UAAKF,EAAQw/W,WAAb,YAA2Bx/W,EAAQ86yB,WAAvD,SACG1zuB,EAAMkkL,KAAK3iU,OAAS,EACnB,wBAAMu3E,UAAWF,EAAQ+6yB,gBAAiBpvwB,QAAS,kBAAMsvwB,EAAgB7zuB,EAAMkkL,KAAK,GAAG66C,cAAe/+N,EAAMkkL,KAAKx7T,KAAI,SAAAmuE,GAAC,OAAIA,EAAEl2C,QAA5H,UACGlV,EAAE,mCADL,KAC2Cu0H,EAAMkkL,KAAK3iU,OADtD,OAGEkqB,EAAE,8BAKd,eAAC4sa,GAAA,EAAD,UACGr4S,EAAMkkL,KAAKx7T,KAAI,SAACgzJ,GAAD,OACd,eAACk4tB,GAAD,CAEEl4tB,IAAKA,EACL4qN,QAAStmO,EAAMsmO,QACfutgB,gBAAiBA,GAHZn4tB,EAAI/6H,aAzBEo/G,cC1QlBgtqB,GAA0C,SAAC9jf,EAAuBE,GAC7E,IAAMspX,EAAgBrhpB,sBAAY24N,aAAkB,CAAC,cAAe,UAC9Dq/D,EAA0Bh4R,sBAAYmkG,gBAK5C,QAF+B,OAAbk9iB,QAAa,IAAbA,OAAA,EAAAA,EAAenyqB,MAAM,CAAC,WAAY,UAAW,SAAU8oT,EAAwB9oT,MAAM,CAAC,UAAW,UACpFue,kBAAekB,OAE1CkpS,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,wBAAyB6oT,KAAiBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,wBAAyB6oT,IACxJF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,wBAAyB6oT,KAAiBF,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,wBAAyB6oT,KAGxJirjB,GAAc,SAAC,GAUT,IATVtxnB,EASS,EATTA,aACAnpI,EAQS,EARTA,aAQS,KAPTurE,SAOS,EANTxuE,gBAMS,MANCpkH,cAAI,CAAEquB,IAAK,IAMZ,EALTwnmB,EAKS,EALTA,SACAksP,EAIS,EAJTA,YACAjljB,EAGS,EAHTA,QACA4miB,EAES,EAFTA,QACA3vf,EACS,EADTA,oBAEMh8U,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EACFmtD,EAAUs2C,KACVhyB,EAAS9rD,sBAAY24N,aAAkB,CAAC,uBACxCh4C,EAAU3gL,sBAAY24N,aAAkB,CAAC,QACzC+2G,EAAoBpqP,EAAQjzH,IAAI,qBAChC6w3B,EAA+Blj1B,sBAAYsU,iBAC3C6zQ,EAAcnoR,sBAAY2V,gBAC1B2yE,EAAa,OAAGonP,QAAH,IAAGA,OAAH,EAAGA,EAAmBr9W,IAAI,iBACvCs/P,EAAc3xN,sBAAYyxN,YAAsB3lK,EAAQw8B,EAAeopI,EAAcnpI,IAErFptE,EAAgBkgK,eAEhB9zF,EAAYjC,EAAQjzH,IAAI,MACxB8w3B,OAAwC/43B,IAAlBk+H,EAEtBu6vB,GAAmC,OAAXlxnB,QAAW,IAAXA,OAAA,EAAAA,EAAat/P,IAAI,SAAUu7B,4BACnD24qB,EAAgBvmqB,sBAAYgxN,eAC5BoynB,EAAwBpj1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,oBAAqB,cAChI86vB,EAAW,OAAG3zgB,QAAH,IAAGA,OAAH,EAAGA,EAAmBr9W,IAAI,UAErCqz2B,EAA6Bn/J,GAAiB56sB,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,iBACpGix3B,EAAgB333B,QAAS47H,EAAY,IAAO47vB,GAC5CI,EAAoBV,IAA0BS,GAAkBA,GAAiB5d,EAEjFlqiB,EAA6Bl2M,GAAWq2rB,GAAwCr2rB,EAAS,UACzFq2M,EAA0Br2M,GAAWq2rB,GAAwCr2rB,EAAS,OAEtFk+vB,EAAqBj8vB,EAAY,IAAM57H,QAAQ+jX,GAC/C+zgB,EAA6Bn+vB,EAAQjzH,IAAI,QAAU69B,sCACzD,EAA0D8c,oBAAS,GAAnE,mBAAO020B,EAAP,KAA8BC,EAA9B,KACA,EAAkD320B,oBAAS,GAA3D,mBAAOqo0B,EAAP,KAA0BC,EAA1B,KACA,EAAsDto0B,mBAAS,GAA/D,mBAAOuo0B,GAAP,KAA4BC,GAA5B,KACA,GAAsExo0B,mBAAmB,IAAzF,qBAAO420B,GAAP,MAAoCC,GAApC,MACMp3gB,GAAiBnnP,EAAQjzH,IAAI,kBAE7Byx3B,GAAoB,OAAG7ugB,QAAH,IAAGA,OAAH,EAAGA,EAAqBl5W,MAAK,SAACs7G,GAAD,uBACrDA,EAASm6P,2BAD4C,aACrD,EAA8Bz1W,MAAK,SAAC2vW,GAAD,aACjC,UAAAA,EAAIuH,kBAAJ,eAAgBxG,kBAAmBA,IAAkBf,EAAI/lP,cAIvDo+vB,GAAsB,SAACjxI,GAI3B,GAFAx8tB,QAAQ08E,MAAR,iCAAwC0+J,EAAxC,0BAAsEnpI,EAAtE,oBAA8FuqnB,KAE3E,IAAfvrnB,EAAkB,CACpB,IAAMo6nB,EAAYr8nB,EAAQjzH,IAAI,cAAgBizH,EAAQjzH,IAAI,mBACpD2yT,EAAgB28b,EAAY,KAAOr8nB,EAAQjzH,IAAI,gBAAiB,MAChEmpW,EAAYmmZ,EAAYr8nB,EAAQjzH,IAAI,YAAa,MAAQ,KACzDm1H,EAAgBq7vB,EAAqB,OAAGlxnB,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,2BAApB,OAAiDs/P,QAAjD,IAAiDA,OAAjD,EAAiDA,EAAat/P,IAAI,iBACvGqzH,EAAWm9vB,EAAqB,OAAGlxnB,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,sBAApB,OAA4Cs/P,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAat/P,IAAI,gBAC7Fo1H,EAAQo7vB,EAAqB,OAAGlxnB,QAAH,IAAGA,OAAH,EAAGA,EAAat/P,IAAI,mBAApB,OAAyCs/P,QAAzC,IAAyCA,OAAzC,EAAyCA,EAAat/P,IAAI,SACvF2x3B,EAAc9i3B,cAAI,CACtB8jT,gBACAw2C,YACAh0O,gBACA9B,WACA+B,QACAqrnB,aAEImxI,EAAY192B,eAAK,CAACy92B,IACxB/q1B,EAAS,IAAIo1K,KAAsC,CAAE41qB,YAAWn4xB,YAIlE7yD,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,qBAAuDnpI,EAAvD,+BAAkGuqnB,IAG7GA,IAAa+sI,GAAgBqE,UAC/Bjr1B,EAAS,IAAIwzL,KAAwB,CAAEilC,eAAcnpI,mBAUnD47vB,GAAqB,OAAG7+vB,QAAH,IAAGA,OAAH,EAAGA,EAASjzH,IAAI,aACrC+x3B,GAAkCz43B,QAAQw43B,IAC1CE,GAAuB143B,SAAe,OAAP25H,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,gBAAb,OAA6BizH,QAA7B,IAA6BA,OAA7B,EAA6BA,EAASjzH,IAAI,qBACzEiy3B,IAAyBzB,GAAyBuB,KAAoCC,GAEtFvB,GAAoBD,GACrB,OAAClxnB,QAAD,IAACA,OAAD,EAACA,EAAat/P,IAAI,4BAAnB,OAAgDs/P,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAat/P,IAAI,2BAA6B,IADnD,OAE3Cs/P,QAF2C,IAE3CA,OAF2C,EAE3CA,EAAat/P,IAAI,iBAEfky3B,GAAgB,sBAChBT,GAAuB,CAAC,CAC1B101B,MAAO/U,EAAE,gDACT6lG,KAAM,eAACskwB,GAAD,IACN16wB,SAAU,WACR65wB,GAAyB,IAE3BxE,cAAe,KACZ,IARe,CASpB,CACE/v1B,MAAO/U,EAAE,oCACT6lG,KAAM,eAACukwB,GAAD,IACN36wB,SAAU,WACR/U,KAAmB9rE,mBAAgBy71B,gBAAiBvp0B,KACpDliB,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIyhW,KACJx4V,MAAO,CACLszF,WAAYg3vB,IAAqBx9vB,EAAQjzH,IAAI,iBAC7CqtwB,sBAAuB,SAACp2tB,GACtB,IACMk+E,EADsBl+E,EAAKj3C,IAAI,kBACAA,IAAI,iBACzC4mC,EAAS,IAAIohD,MAA+B,CAAEyxC,WAAYtE,KACtD2gM,GACFlvR,EAAS,IAAI0hD,MAAqC,CAAEmxC,WAAYtE,KAElDrgF,YAAW,WACzBy9zB,EAAQxu0B,QAAQ+jF,KAAOqN,EACvBo9uB,EAAQxu0B,QAAQ4iC,UACf,UAIT//B,EAAS,IAAI0J,KAA6B,CAAEpT,GAAIyhW,SAElDmuf,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,mBAGpE,CACE+8B,MAAO/U,EAAE,+CACT6lG,KAAM,eAACykwB,GAAD,IACN76wB,SAAU,WACR7wE,EAAS,IAAI4J,KAA+B,CAC1CrK,MAAO,CACLygE,MAAM,EACN6tqB,kBAAmB,SAAA/oD,GAAI,OAAI9krB,EAAS,IAAIsyL,KAAiC,CACvEjmG,QAASy4lB,EACT/rd,QAASN,EACTpnG,IAAK/hC,OAGTh5F,GAAIq2uB,QAEN7wqB,KAAmB9rE,mBAAgB271B,yBAA0Bzp0B,EAAc,CAAE0p0B,mBAAoB,qDAEnG1F,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,mBAGpE,CACE+8B,MAA+D/U,EAAxDmhT,GAA8BG,EAA4B,2CAAgD,sCACjHz7M,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACbv3yB,UAAWg0C,KACXF,KAAM8/M,EAA6BwC,EAAQxC,GAA8BG,EACzEnwN,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,oBAA4BmpU,GAA8BG,GAC1HrgT,OAAQ,UAEV4j2B,YAAY,GAEd,CACE9v1B,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC4kwB,GAAD,IACN3F,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,kBAA0BizH,EAAQjzH,IAAI,MAAQ,GAEhH4ryB,YAAa,CAAC,CACZ7uwB,MAAO/U,EAAE,6BACT8k2B,cAAe,CACb3zwB,UAAU,IAEX,CACDp8E,MAAO/U,EAAE,iCACTyvF,SAAU,WACR7wE,EAAS,IAAI8zL,KAA2B,CAAEg4pB,YAAarznB,EAAcsznB,WAAY,EAAGz8vB,eAAcjD,eAEnG,CACDl2F,MAAO,gBAAC+3C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UAA4CltD,EAAE,qCAAqC,eAACil2B,GAAD,OAC1FL,UAAU,EACVn1wB,SAAUm5wB,GAAY,SAAC3x3B,EAAGqpY,GACxB1hW,EAAS,IAAI8zL,KAA2B,CAAEg4pB,YAAarznB,EAAcsznB,UAAW1z3B,EAAGi3H,eAAcjD,eAChGosI,KAELwtnB,YAAY,GAEd,CACE9v1B,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,mBAAiD,IAAvBizH,EAAQjzH,IAAI,OAAgBox3B,GAExHxlF,YAAa,CACX,CACE7uwB,MAAO/U,EAAE,6BACT8k2B,cAAe,CACb3zwB,UAAU,IAEX,CACDp8E,MAAO/U,EAAE,kCACTyvF,SAAU,WACR7wE,EAAS,IAAI4zL,KAA2B,CAAEk4pB,YAAarznB,EAAcsznB,UAAWtznB,EAAcpsI,UAASiD,oBAExG,CACDn5F,MAAO/U,EAAE,iCACTyvF,SAAU,WACR7wE,EAAS,IAAI4zL,KAA2B,CAAEk4pB,YAAarznB,EAAcsznB,WAAY,EAAG1/vB,UAASiD,oBAE9F,CACDn5F,MAAO,gBAAC+3C,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAAlC,UAA4CltD,EAAE,qCAAqC,eAACil2B,GAAD,OAC1FL,UAAU,EACVn1wB,SAAUm5wB,GAAY,SAAC3x3B,EAAGqpY,GACxB1hW,EAAS,IAAI4zL,KAA2B,CAAEk4pB,YAAarznB,EAAcsznB,UAAW1z3B,EAAGg0H,UAASiD,wBAKpG,CACEn5F,MAAO/U,EAAE,6BACT6lG,KAAM,eAAC,KAAD,IACNpW,SAAU,WACR7wE,EAAS,IAAI0zL,KAAyB,CAAE+kC,eAAcnpI,sBAIxD26vB,GAAuB38K,GACzBg+K,GAAY7m3B,OAAO,EAAG,EAAG,CACvB0xB,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC,KAAD,IACNkS,aAAekyvB,GAAsE,GAA9Cjq2B,EAAE,0CACzC8k2B,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,mBAAyC,IAAfk1H,IAAqB+8vB,IAEjHx6wB,SAAU,WACR7wE,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIguxB,KACJ/kxB,MAAO,CACLmuL,sBAAuB,UACvBk3J,oBAAqBv1P,EACrBs+F,mBAAoB,UACpB41iB,iBAAkB2nH,OAGtBlr1B,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIguxB,KACJtktB,MAAM,QAMVstmB,GACFg+K,GAAY7m3B,OAAOwl3B,EAAsB,EAAI,EAAG,EAC9C,CACE9z1B,MAAqB/U,EAAdgp2B,EAAgB,wCAA6C,uCACpEnjwB,KAAMmjwB,EAAc,eAAC,KAAD,IAAkB,eAAC,KAAD,IACtCv5wB,SApLkC,WACtC7wE,EAAS,IAAIk0L,KAA2B,CAAEukC,eAAcnpI,mBAoLpD42vB,cAAe,CACb3zwB,SAAU+3wB,IAGd,CACEn01B,MAAO/U,EAAE,gDACT6lG,KAAM,eAAC+kwB,GAAD,IACNn7wB,SAAU,WACR7wE,EAAS,IAAIwzL,KAAwB,CAAEilC,eAAcnpI,mBAEvD42vB,cAAe,CACb3zwB,SAAU7/G,QAAQ25H,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,mBAA0C,IAAfk1H,IAAqB57H,QAAQ+jX,IAAsBg2f,GAA8B+d,KAapL,OAAO,gBAACnlmB,GAAA,EAAD,WACL,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UAEIg/nB,GACA,uCACE,eAAChulB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,kCAAlB,SACE,eAAC8sD,EAAA,EAAD,CACEO,UAAY87yB,GAAsB9d,EAA8Bl+xB,EAAQ28xB,qBAAuBif,IAA0BvD,GAAgBqF,SAAW19yB,EAAQ08xB,+BAAiC18xB,EAAQy8xB,cACrMn8xB,WAAW,EACXM,QAAQ,SACRb,WAAW,SACX4rC,QAAS,kBAAOqwwB,GAAsB9d,EAA8B,KAAOqe,GAAoBlE,GAAgBqF,WALjH,SAOE,eAAC,KAAD,CACEzvwB,SAAS,QACTlhB,MAAO6uxB,IAA0BvD,GAAgBqF,SAAW,UAAY,kBAI9E,eAAC3swB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,oCAAlB,SACE,eAAC8sD,EAAA,EAAD,CACEO,UAAY87yB,GAAsB9d,EAA8Bl+xB,EAAQ88xB,uBAAyB8e,IAA0BvD,GAAgBqE,SAAW18yB,EAAQ68xB,iCAAmC78xB,EAAQ48xB,gBACzMt8xB,WAAW,EACXM,QAAQ,SACRb,WAAW,SACX4rC,QAAS,kBAAOqwwB,GAAsB9d,EAA8B,KAAOqe,GAAoBlE,GAAgBqE,WALjH,SAOE,eAAC,KAAD,CACEzuwB,SAAS,QACTlhB,MAAO6uxB,IAA0BvD,GAAgBqE,SAAW,UAAY,mBAMlF,eAAC3rwB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,+BAAlB,SACE,gCACE,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQmhH,UAAyB,IAAf+b,GAAoBm+uB,EAA4BvyvB,QA5CvE,SAAAz8G,GAAC,OAAIuiC,EAAS,IAAIgxL,KAAsB,CAC1DuyoB,SAAU,CAAC,WAAY9qmB,EAAc,YACrCliO,UAAW,CAAC,iBACZ/kC,MAAO89H,EACP9G,SAAU/qH,EAAEs8G,kBAwCN,SACE,eAACmywB,GAAA,EAAD,UAKN,eAACn8vB,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS4jhB,EAASwtP,IAA3C,SACE,eAAC,KAAD,SAIHb,GACC,eAAC,GAAD,CACE/iqB,QAASA,EACT8rJ,eAAgBA,GAChBw/f,kBAAmB,EACnBhzwB,KAAMyqxB,EACNzugB,oBAAqBA,EACrBvjH,aAAcA,EACdz+H,QAAS,kBAAM0wvB,GAAyB,IACxClB,gBAAiB,SAAC90gB,EAAeu+f,GAC/BsJ,GAAuB7ngB,GACvBk2gB,GAA+B3X,GAC/BoJ,GAAqB,MAI1BD,GACC,eAAC,GAAD,CACE1ngB,cAAe4ngB,GACfrJ,sBAAuB0X,GACvB3qxB,KAAMo8wB,EACNpivB,QAAS,SAACihvB,GACRoB,GAAqB,GACrBE,GAAuB,GACvBqO,GAA+B,IAC3B3P,GACFyP,GAAyB,UAUtBvpM,GAFIrnpB,OAAWiw1B,I,UChYxBoC,GAAY,SAAC,GAiBP,IAhBVC,EAgBS,EAhBTA,QAgBS,IAfT//vB,eAeS,MAfCpkH,cAAI,CAAEquB,IAAK,IAeZ,EAdTg5F,EAcS,EAdTA,aACA+8vB,EAaS,EAbTA,aACA5znB,EAYS,EAZTA,aACA09G,EAWS,EAXTA,WACA2nR,EAUS,EAVTA,SACAksP,EASS,EATTA,YAEAznE,GAOS,EART+pE,UAQS,EAPT/pE,eACAC,EAMS,EANTA,UACA+pE,EAKS,EALTA,aACAn8Z,EAIS,EAJTA,aACAwpL,EAGS,EAHTA,aACA1lS,EAES,EAFTA,eACA8H,EACS,EADTA,oBAEMzI,EAAYxsU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,eACrEz4N,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EAEFor2B,EAA4Bzl1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,kBAAmB,gBACxG08G,EAAgB9oP,EAAQjzH,IAAI,kBAAoBoz3B,GAA6Bl/2B,iBACnF,EAAwBwsB,YAAe,GAAvC,mBAAOsW,EAAP,KAAaq80B,EAAb,KACMC,EAAiB5y1B,UAAa,GAC9B6y1B,EAAe7y1B,SAAa,IAE5BirS,EAAUqvR,eAEVw4R,EAAO7l1B,sBAAY6vJ,gBACnB02gB,EAAgBvmqB,sBAAYgxN,eAE5Bo8G,EAAmBptU,sBAAY24N,aAAkB,CAAC,SAAU,QAE5DszgB,EAAQl5uB,SAAkB,MAC1B+y1B,EAAmB/y1B,UAAa,GAEhCmt1B,EAAmBnt1B,eAAkB,SAAA/oC,GACzC473B,EAAaxv1B,QAAQpsC,EAAMo23B,eAAiB,CAAE3m3B,OAAQzP,EAAMyP,OAAQ4m3B,OAAQr23B,EAAMq23B,QAClFxrvB,aAAao3oB,EAAM71uB,SACnB61uB,EAAM71uB,QAAU+Q,YAAW,kBAAMu+0B,GAAQ,SAAAK,GAAK,OAAKA,OAAQ,OAC1D,IAEG5F,EAAsBpt1B,eAAkB,YAAwC,IAArCt5B,EAAoC,EAApCA,OAAQ2m3B,EAA4B,EAA5BA,cAAeC,EAAa,EAAbA,OACtExrvB,aAAao3oB,EAAM71uB,SACbgq1B,KAAiBwF,EAAaxv1B,UAClCwv1B,EAAaxv1B,QAAQgq1B,GAAiB,CAAE3m3B,SAAQ4m3B,WAElDyF,EAAiB1v1B,SAAU,EAC3Bsv1B,GAAQ,SAAAK,GAAK,OAAKA,OACjB,IA+DHhz1B,aAAgB,WAQd,OAPI4y1B,EAAevv1B,QACjBuv1B,EAAevv1B,SAAU,IA/DN,SAAC4v1B,GAA2C,IAM7DC,EANkCltgB,EAA0B,wDAC1DmtgB,EAAoB5gwB,EAAQp2G,MAAM,CAAC,QAASk+V,EAAkBylS,IAAiBzlS,EAAmB,UAClG+4gB,EAAsCx63B,QAAQ25H,EAAQp2G,MAAM,CAAC,QAASg32B,EAAmBrzO,EAAc,WAEvGuzO,EAAe153B,OAAOuL,QAAQ+t3B,GAG9BK,EAAiBj4gB,EAAcvhW,OACrCu52B,EAAapr3B,SAAQ,YAAmB,IAAD,mBAAhBpI,EAAgB,KAAXrB,EAAW,KAC/BvH,EAAK,OAAGuH,QAAH,IAAGA,OAAH,EAAGA,EAAOkI,OACrBws3B,EAAehsgB,aAAmB,CAChCtB,cAAestgB,GAA8BI,EAC7CnsgB,UAAW9L,EAAc/7W,IAAIO,GAAK0M,eAAc,SAACywQ,GAC/C,IAAM0pG,EAA6C,YAAzB1pG,EAAI19Q,IAAI,eAAwD,cAAzB09Q,EAAI19Q,IAAI,cAAyD,aAAzB09Q,EAAI19Q,IAAI,cAC3GolB,EAASshW,EACXU,EACEE,aAAkB3vX,EAAO,GACzB4vX,aAAoB,CAClB5vX,QACA6vX,eACA9pG,EAAI19Q,IAAI,kBACRynX,iBAAkB/pG,EAAI19Q,IAAI,oBAC1B0nX,iBAAsC,YAApBhqG,EAAI19Q,IAAI,UAE9BrI,EACJ+lR,EACG/5Q,IAAI,aAAcyhB,GAClBzhB,IAAI,iBAAkByhB,GACtBzhB,IAAI,kBAAkB,GAErB+5Q,EAAI19Q,IAAI,kBAAoBpC,OAAOwnB,GAAU,EAC/Cs4P,EAAIj5J,OAAO,iBACFqvwB,GAA8D,SAAvBp2mB,EAAI19Q,IAAI,YAAyB09Q,EAAI19Q,IAAI,eAAmD,IAAlCpC,OAAO8/Q,EAAI19Q,IAAI,gBACzH09Q,EAAI/5Q,IAAI,iBAAiB,MAE1B6W,OACHstW,UAAW,GACXC,aAAa,EACbrB,qBAIJ,IAAMw2N,EAAuB73jB,iBAAOuu2B,GAEpCht1B,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,sBAAwDnpI,EAAxD,mBAAuFgnd,IACtGt2iB,EAAS,IAAI4xL,MAAsC,CAAEmnC,QAASN,KAO1DqnH,GACFrsX,OAAO+M,OAAOus3B,GAAgBhr3B,SAAQ,SAACzJ,IACrC,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAO8u3B,SACTpn1B,EAAS,IAAIouL,KAA6B,CAAEg5pB,OAAQ9u3B,EAAM8u3B,aAU9D1B,CAAeiH,EAAaxv1B,QAAS0v1B,EAAiB1v1B,SACtDwv1B,EAAaxv1B,QAAU,GACvB0v1B,EAAiB1v1B,SAAU,GAEtB,WACLy+F,aAAao3oB,EAAM71uB,YAEpB,CAACiT,IAKJtW,aAAgB,kBAAM,WAChB+y1B,EAAiB1v1B,SACnB1pC,OAAO+M,OAAOms3B,EAAaxv1B,SAASp7B,SAAQ,SAACzJ,IAC3C,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAO8u3B,SACTpn1B,EAAS,IAAIouL,KAA6B,CAAEg5pB,OAAQ9u3B,EAAM8u3B,gBAI/D,IAEH,IAAM/gwB,EAAWt/E,sBAAY84N,aAAmC,CAAE9G,QAASN,EAAcnpI,kBACnF+9vB,EAAevz1B,eAAkB,kBAAMkG,EAAS,IAAI4wL,KAA4B,CACpFmoC,QAASN,EACTnpI,oBACG,CAACmpI,EAAcnpI,IAEdg+vB,EAAWxz1B,eAAkB,SAAAr8B,GACjC4f,QAAQ08E,MAAR,wCAA+C0+J,EAA/C,0BAA6EnpI,KACxEjD,GAAWA,IAAkC,IAAvBA,EAAQjzH,IAAI,MACrC4mC,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,6BAA+DnpI,EAA/D,iBAA4F7xH,IAE3GuiC,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,sBAAwDnpI,EAAxD,iBAAqF7xH,MAErG,CAACg7P,EAAcnpI,GAAqC,IAAvBjD,EAAQjzH,IAAI,QACtCwllB,EAAc73iB,sBAAYk5N,aAAoCxH,EAAcnpI,IAE5Ei+vB,EAAsBzz1B,eAAkB,SAAAxuB,GAC5C+R,QAAQ08E,MAAR,4CAAmD0+J,EAAnD,0BAAiFnpI,IACjFtvF,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,sBAAwDnpI,EAAxD,iBAAqFhkH,MACnG,CAACmtP,EAAcnpI,IAEZk+vB,EAAwB1z1B,eAAkB,SAAAxuB,GAC9C+R,QAAQ08E,MAAR,8CAAqD0+J,EAArD,0BAAmFnpI,IACnFtvF,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,sBAAwDnpI,EAAxD,uCAA2GhkH,MACzH,CAACmtP,EAAcnpI,IAEZz8B,GAAS9rD,sBAAY24N,aAAkB,CAAC,uBACxC+2G,GAAoB1vU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,uBACvGD,GAAa,OAAGonP,SAAH,IAAGA,QAAH,EAAGA,GAAmBr9W,IAAI,iBACvCs/P,GAAc3xN,sBAAYyxN,YAAsB3lK,GAAQw8B,GAAeopI,EAAcnpI,IACrFs6vB,IAAmC,OAAXlxnB,SAAW,IAAXA,QAAA,EAAAA,GAAat/P,IAAI,SAAUu7B,4BACnDk11B,GAAoBD,IACrB,OAAClxnB,SAAD,IAACA,QAAD,EAACA,GAAat/P,IAAI,4BAAnB,OAAgDs/P,SAAhD,IAAgDA,QAAhD,EAAgDA,GAAat/P,IAAI,2BAA6B,IADnD,OAE3Cs/P,SAF2C,IAE3CA,QAF2C,EAE3CA,GAAat/P,IAAI,iBACf0w3B,GAAmBF,IACpB,OAAClxnB,SAAD,IAACA,QAAD,EAACA,GAAat/P,IAAI,oBAAnB,OAAwCs/P,SAAxC,IAAwCA,QAAxC,EAAwCA,GAAat/P,IAAI,mBAAqB,IADpC,OAE1Cs/P,SAF0C,IAE1CA,QAF0C,EAE1CA,GAAat/P,IAAI,SAEfqz2B,GAA6Bn/J,GAAiBjhlB,EAAQjzH,IAAI,gBAAkB,EAE5Eq03B,GAAc3z1B,eAAkB,SAAA/oC,GAAK,OAAIA,EAAMqI,IAAI,eACrDrI,EAAMwU,MAAM,CAAC,cAAe,eAAgBq5kB,GAC5C7tlB,EAAMgM,IAAI,cAAe6hlB,KAAc,CAACnmV,EAAcnpI,EAAcsvd,IAElEq5R,GAAuBn+0B,eAAkB,SAAC0iG,EAAOzrI,EAAOkpC,GACxDlpC,EACFivC,EAAS,IAAIsyL,KAAiC,CAC5CjmG,QAASohwB,GAAY183B,GACrBgoQ,QAASN,EACTpnG,IAAK/hC,EACLr1F,SAAU,WACR+F,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,6BAA+DnpI,EAA/D,iBAA4F,KAC3GtvF,EAAS,IAAIgiD,OACT/nD,GACFA,QAIGA,GACTA,MAED,CAACw+N,EAAcnpI,EAAcmnP,GAAmBmoO,IAE7C8uS,GAAiC5z1B,eAAkB,SAACr8B,GACxDuiC,EAAS,IAAIovL,MAAuC,CAAEqpC,eAAcnpI,eAAc2nP,oBAAqBx5W,EAAE4kB,OAAOgvG,aAC/G,CAAConI,EAAcnpI,EAAf,OAA6BjD,QAA7B,IAA6BA,OAA7B,EAA6BA,EAASjzH,IAAI,QAEvCuy2B,GAAU7x0B,SAAa,CAAEimC,MAAO,kBAAM,MAAMsif,eAAgB,EAAGC,aAAc,EAAGvxjB,MAAO,GAAImwH,KAAM,KAEjG3yC,GAAUs2C,KAEVg2E,GAAWxuE,EAAQjzH,IAAI,cAAe,EACtCu03B,GAAkB7z1B,WAAc,iBAAO,CAC3Cyp0B,SAAU,CAAC,WAAY9qmB,EAAc,WAAYnpI,EAAc,QAC/Dn5F,MAAO/U,EAAE,oCACToi1B,kBAAmB,CAAEjxvB,UAAiC,IAAvB8Z,EAAQjzH,IAAI,OAC3C0qX,eAAgB,CAAEtwB,WAAW,EAAMjhP,UAAiC,IAAvB8Z,EAAQjzH,IAAI,UACvD,CAACq/P,EAAcnpI,GAAqC,IAAvBjD,EAAQjzH,IAAI,QAEvCw03B,GAAU9z1B,SAAa,IACvBkt1B,GAAalt1B,eAAkB,SAAC5sB,EAAG2zB,GAAJ,OAAU+s1B,GAAQzw1B,QAAQjwB,GAAK2zB,IAAG,IACvE/G,aAAgB,WACdkt1B,GAAW,EAAG6G,IACdzB,EAAQ98vB,EAAcs+vB,MACrB,CAACz3gB,IAGJ,IAAM4wgB,GAAejt1B,eAAkB,SAACqt1B,EAAehzkB,GAAhB,OAA4Bn0Q,EAAS,IAAI0wL,KAAgB,CAC9FphG,eACAmpI,eACA07C,UACAgzkB,qBACG,CAAC1unB,EAAcnpI,IAEdw+vB,GAAYh01B,WAAc,kBAAM7xB,cAAI,CACxCsmH,cAAelC,EAAQjzH,IAAI,iBAC3B0yT,WAAYz/L,EAAQjzH,IAAI,cACxB48H,YAAa3J,EAAQjzH,IAAI,mBACvB,CAACizH,EAAQjzH,IAAI,mBACXy03B,GAAW/z1B,WAQXut1B,GAAavt1B,eAAkB,SAAA/oC,GAEnC,IAAMskH,EAA+B,kBAAVtkH,EACvBA,EAAMk9E,QAAQ,KAAM,IAAIA,QAAQ,MAAO,IACvC,GAEJ,OAAOx8B,MAAMz6C,OAAOq+G,IAAgBtkH,EAAQskH,IAC3C,IAEGjX,GAAUtkE,eAAkB,SAAAr8B,GAAC,OAAIA,EAAEs8G,cAAcwwS,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,aAAa,IAC1Gr9I,IAAmB,OAAXotI,SAAW,IAAXA,QAAA,EAAAA,GAAaziP,MAAM,CAAC,OAAQ,SAAU,OAAQ,YAA9C,aAERghW,GAAsB5qP,EAAQjzH,IAAI,uBAClC203B,GAAwB1hwB,EAAQjzH,IAAI,YAAck+Y,KAExD,OAAO,uCACL,gBAACw2C,GAAA,EAAD,CAAUr/W,UAAW2hZ,EAArB,UACE,eAAC/qM,GAAA,EAAD,CAAW52M,UAAWF,GAAQguxB,cAA9B,SACE,eAAC1tvB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiD+wxB,EAAe,MAEhE9pE,GAAiBC,EACfnzrB,GACE,eAAC2+vB,GAAA,EAAD,CAAWv/yB,UAAWF,GAAQ27xB,mBAAoBruvB,IAAKyP,GAAO36C,MAAM,SACpE,eAAC00M,GAAA,EAAD,CAAW52M,UAAWF,GAAQ47xB,yCAChC,KAEH5nD,GACC,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ+7xB,oBAA9B,UACKsf,IAAyD,IAAhCv9vB,EAAQjzH,IAAI,iBAA2Bww3B,KAA0Bv9vB,EAAQjzH,IAAI,kBAAoBizH,EAAQjzH,IAAI,qBACvI,eAACkmH,GAAA,EAAD,CAASC,MAAOn+F,EAAE,iCAAkCo+F,UAAU,YAA9D,SACE,eAACqge,GAAA,EAAD,CAAUpxgB,UAAWF,GAAQ8qP,eAKpCkpf,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ67xB,oBAA9B,UAEbqC,KAAD,OAA+B/zmB,SAA/B,IAA+BA,QAA/B,EAA+BA,GAAat/P,IAAI,iBAC5C,eAACy1G,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEpV,eAAgB,YAAamf,OAAQ,WAAaR,QAAS,kBAAMqywB,EAAa7znB,KAAnI,SAAkJmxnB,IAAqB,MACvK,eAACh7wB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,UAAkDmxwB,IAA8Bod,IAAqB,QAG5GtnE,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ87xB,YAA9B,SAChB,eAACx7vB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,UAAkDmxwB,IAA8Bqd,IAAoB,QAEtG,eAACzkmB,GAAA,EAAD,CAAWl0M,QAAQ,OAAnB,SACE,eAAC,GAAD,CAAY+oC,QAASmzwB,EAAchnwB,SAAUA,OAE3CgG,EAAQjzH,IAAI,kBAAoBizH,EAAQjzH,IAAI,MAAQ,GAAOi2H,KAAkBo9uB,GAC7E,eAACpnlB,GAAA,EAAD,CAAWl0M,QAAQ,OAAnB,SACE,eAACsgD,EAAA,EAAD,CACEJ,QAAO,OAAE4lP,SAAF,IAAEA,OACTpmQ,SAAU68wB,GACVpyxB,MAAM,UACNlqG,KAAK,YAGT,eAACi0R,GAAA,EAAD,CAAWl0M,QAAQ,SAEvB,eAACk0M,GAAA,EAAD,UACE,eAAC/lK,GAAA,EAAD,CAASC,MAAO8M,EAAQjzH,IAAI,gBAAkB,GAA9C,SACE,qCACE,eAAC,GAAD,CAAoB4gG,MAAO6wU,KAAmBzsU,QAASA,GAAS9nE,GAAE,iBAAYmiO,EAAZ,mBAAmCnpI,EAAnC,gBAEhEqurB,uBAA8C,IAAvBtxrB,EAAQjzH,IAAI,MACnCrI,MAAOs7H,EAAQjzH,IAAI,gBAAkBwllB,EAAa/te,SAAUy8wB,EAAUp+wB,WAAW,EACjF0nN,SAAUi3jB,GAAUr3vB,UAxEd,SAAA/4H,GACE,KAAdA,EAAE02S,SAAgC,KAAd12S,EAAE02S,SACxB4ykB,GAAa,QAAStp3B,EAAE02S,kBA0ExB,eAAC9uB,GAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAE9/B,SAAU,SAA5E,UACE,eAAC3C,EAAA,EAAD,CAAMW,WAAW,EAAMT,aAAa,SAASa,MAAM,EAAMgB,GAAI,EAAG0gC,MAAO,CAAEkG,YAAa,GAAtF,UAEW,OAAPwV,QAAO,IAAPA,OAAA,EAAAA,EAASjzH,IAAI,SAAU69B,sCACnB,eAACqoF,GAAA,EAAD,CAASC,MAAOn+F,EAAE,6CAAlB,SACE,eAACy+jB,GAAA,EAAD,CAAUvkf,MAAM,aAElByyxB,KAAgD,IAAvB1hwB,EAAQjzH,IAAI,MACnC,eAACkmH,GAAA,EAAD,CAASC,MAAOn+F,EAAE,0CAAlB,SACE,uBAAMqtD,UAAWF,GAAQw8xB,iBAAzB,SAEI1+uB,EAAQjzH,IAAI,oBAAsBizH,EAAQjzH,IAAI,iBAC1C,eAACsiZ,GAAA,EAAD,IACA,eAACA,GAAA,EAAD,QAIV4xT,IAAwC,IAAvBjhlB,EAAQjzH,IAAI,OAAgBizH,EAAQjzH,IAAI,iBACrD,eAACkmH,GAAA,EAAD,CAASC,MAAK,yBAAoB8M,EAAQjzH,IAAI,kBAA9C,SACE,eAAC,KAAD,CAAiB6tH,KAAMoF,GAAWA,EAAQjzH,IAAI,mBAAqB,QAAU,MAAOq1E,UAAWF,GAAQu8xB,aAElF,IAAvBz+uB,EAAQjzH,IAAI,OAAgB,eAAC,KAAD,CAAiB6tH,KAAMoF,GAAWA,EAAQjzH,IAAI,mBAAqB,QAAU,MAAOq1E,UAAWF,GAAQu8xB,YAGjJ,eAACkC,GAAD,CAAI3gvB,QAASyhwB,GAAWj9wB,SAAUonwB,GAAsBtM,QAASA,GAASlzmB,aAAcA,EAAcnpI,aAAcA,IACpH,eAACphD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAACqvC,GAAA,EAAD,CAASq8J,sBAAuBtvJ,IAAkC,IAAvBA,EAAQjzH,IAAI,MAAcmmH,MAAkBn+F,EAAXy5K,GAAa,uBAA4B,wBAArH,SACE,gCACE,eAAC9qE,GAAA,EAAD,CAAYxd,UAAiC,IAAvB8Z,EAAQjzH,IAAI,OAAsBqz2B,GAA4Br72B,KAAK,QAAQ8oH,QAAS,WACxGl6E,EAAS,IAAIkxL,KAAwB,CAAE6nC,QAASN,EAAcpnG,IAAK/hC,EAAcurE,UAAWA,MAC5F76J,EAAS,IAAI4xL,MAAsC,CAAEmnC,QAASN,MAFhE,SAMI59D,GACI,eAACozrB,GAAD,CAAc3yxB,MAAM,YACpB,eAAC4yxB,GAAD,iBAQlB,eAAC,GAAD,CACEz1nB,aAAcA,EACdnpI,aAAcA,EACdurE,SAAUA,GACVxuE,QAASA,EACTyxgB,SAAUA,EACVksP,YAAaA,EACbjljB,QAASA,EACT4miB,QAASA,GACT3vf,oBAAqBA,IAEtB7F,EAAW93W,KAAI,SAAC6tP,EAAO7zP,GAAO,IAAD,EACtB8u3B,EAAgBhygB,EAAc95V,WAAU,SAAA4+S,GAAI,OAAIA,EAAK7gU,IAAI,QAAU8yP,EAAM9yP,IAAI,SAC7E66W,EAAekB,EAAc/7W,IAAI+t3B,IAAkBl/2B,gBACnDlX,EAAQkjX,EAAa76W,IAAI,cACzBg7R,EAAY6/E,EAAa76W,IAAI,aAC7BmW,EAAW0kW,EAAa76W,IAAI,YAC5Bku3B,EAAa,UAAGrzgB,EAAa76W,IAAI,wBAApB,SACbmu3B,EAAYtzgB,EAAa76W,IAAI,kBAC7Bou3B,EAAkBvzgB,EAAa76W,IAAI,wBACnCqu3B,EAAoBxzgB,EAAa76W,IAAI,qBACrCo6W,EAAiBnnP,EAAQjzH,IAAI,kBAC7Bq6W,EAAUvnH,EAAM9yP,IAAI,MAKpBgu3B,EAAS5zgB,GAAkBC,EAAlB,UAA+BD,EAA/B,YAAiDC,GAAY,GACtEi0gB,EAA0Bx0gB,KAAcc,0BAA0BT,EAAWC,EAAgBS,EAAcC,EAAgBC,GACjI,OAAO//E,EACH,KACA,eAAC,GAAD,CACE99P,GAAE,iBAAYmiO,EAAZ,mBAAmCnpI,EAAnC,mBAA4E,IAAnB63vB,EAAuBA,EAAgBtwgB,MAClGkwgB,aAAcA,GACdC,WAAYA,GAEZC,iBAAkBA,EAClBC,oBAAqBA,EACrBn23B,MAAOA,EACPo23B,cAAeA,EACfC,OAAQA,EACR70wB,UAAWhjG,EACX832B,WAAYA,GACZC,cAAeA,EACfC,UAAWA,EACXC,gBAAiBA,EACjBC,kBAAmBA,EACnBzrO,cAAe3vhB,EAAQjzH,IAAI,UAC3Bsu3B,wBAAyBA,EACzB5pP,SAAUA,GAdLzloB,SAkBf,gBAACy1b,GAAA,EAAD,CAAUr/W,UAAWF,GAAQ07xB,yCAA7B,UACE,eAAC5klB,GAAA,EAAD,CAAW52M,UAAWF,GAAQguxB,cAAehzE,QAAS,EAAG54qB,MAAK,aAAIx/B,QAAS,GAAMk1C,EAAW,GAAK,CAAE6J,OAAQ,IAA3G,SACE,eAAC9J,GAAA,EAAD,CAAgBmtN,QAAQ,EAAMltN,SAAUA,EAAUC,UAAW,EAAGoV,gBAAiB,CAAEmhhB,cAAc,EAAMv/gB,eAAe,GAAtH,SACE,8BAGHilrB,GACC,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ87xB,YAAa9gF,QAASi5B,EAAY,EAAI,EAAG7xsB,MAAK,aAAIx/B,QAAS,EAAG/C,aAAc,cAAiBi4C,EAAW,GAAK,CAAE6J,OAAQ,IAArJ,SACE,gBAAC9J,GAAA,EAAD,CAAgBzV,MAAO,CAAE0J,gBAAiB,eAAiBk5N,QAAQ,EAAMltN,SAAUA,EAAUC,UAAW,EACtGoV,gBAAiB,CAAEmhhB,cAAc,EAAMv/gB,eAAe,GADxD,UAEE,sBAAK7uD,UAAWF,GAAQ27xB,sBAErB0f,IAA0BlxnB,KAAgBA,GAAY9gP,YAAc8gP,OACnErsI,GAAWA,EAAQz0G,WAClBy0G,EAAQjzH,IAAI,oBAAsD,IAAhCizH,EAAQjzH,IAAI,kBAC7CizH,EAAQjzH,IAAI,kBAAoBizH,EAAQjzH,IAAI,qBAEhD,eAACssH,GAAA,EAAD,UACE,eAAC,GAAD,CAAoB1rB,MAAO6wU,KAAmB37T,WAAW,EAAM2B,SAAU28wB,EAAuBz83B,MAAK,OAAE0lX,SAAF,IAAEA,QAAF,EAAEA,GAAmBr9W,IAAI,mBAAoBo6V,WAAW,EAAMC,QAAS,EAAGiwgB,eAAe,EAC5L/lD,uBAAwBjljB,IAAeA,IAAeA,GAAY9gP,UAClEue,MAAc/U,EAAPwr2B,EAAS,iCAAsC,6CAQlE,eAACvnmB,GAAA,EAAD,CAAWkkgB,QAAS,GAAI54qB,MAAK,aAAIx/B,QAAS,GAAMk1C,EAAW,GAAK,CAAE6J,OAAQ,IAA1E,SACE,gBAAC9J,GAAA,EAAD,CAAgBmtN,QAAQ,EAAMltN,SAAUA,EAAUC,UAAW,EAC3DoV,gBAAiB,CAAEmhhB,cAAc,EAAMv/gB,eAAe,GADxD,UAEE,0BACA,eAAC5X,GAAA,EAAD,UACE,gBAACx3C,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGR,QAAQ,gBAAgBb,WAAW,aAAtE,UACE,eAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAAC,GAAD,CACE+pB,MAAO6wU,KACP37T,WAAW,EACX2B,SAAU08wB,EACVx83B,MAAOs7H,EAAQjzH,IAAI,eACnBo6V,WAAW,EACXjhP,UAAiC,IAAvB8Z,EAAQjzH,IAAI,MACtBukzB,uBAA8C,IAAvBtxrB,EAAQjzH,IAAI,MACnCsq2B,eAAe,EACfvt0B,MAAO/U,EAAE,+CAEb,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAACs0xB,GAAD,2BAAgBopB,IAAhB,IAAiCjqB,eAAe,wBAYjDyqB,GAFEr01B,OAAWqy1B,ICzdtBiC,GAA0B,SAAC,GASrB,IAAD,IART/hwB,eAQS,MARCpkH,cAAI,CAAEquB,IAAK,IAQZ,EAPTg5F,EAOS,EAPTA,aACAmpI,EAMS,EANTA,aACA09G,EAKS,EALTA,WACAosc,EAIS,EAJTA,cACAC,EAGS,EAHTA,UACA1kL,EAES,EAFTA,SACA1tK,EACS,EADTA,aAEMpwb,EAAW2F,wBACTvkB,EAAM+xB,YAAe,gBAArB/xB,EAMFksrB,EAAgBvmqB,sBAAYgxN,eAC5Bm3D,EAAcnoR,sBAAY2V,gBAC1Byt0B,EAAwBpj1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,WAAYnpI,EAAc,oBAAqB,cAChI26vB,EAA+Blj1B,sBAAYsU,iBA6B3CswzB,EAAU7x0B,SAAa,CAAEimC,MAAO,kBAAM,MAAMsif,eAAgB,EAAGC,aAAc,EAAGvxjB,MAAO,GAAImwH,KAAM,KACjGh/D,EAAgBkgK,eAChB7zI,EAAUs2C,KAEVwpwB,EAAqBv01B,eAAkB,SAAA/oC,GAAK,OAAIivC,EAAS,IAAI8yL,KAAmC,CACpGimC,QAASN,EACTmmV,YAAa7tlB,OACV,CAAC0nQ,IACAmmV,EAAc73iB,sBAAYi5N,aAAoCvH,IAE9Dg1nB,EAAc,SAAA183B,GAAK,OAAIA,EAAMqI,IAAI,eACnCrI,EAAMwU,MAAM,CAAC,cAAe,eAAgBq5kB,GAC5C7tlB,EAAMgM,IAAI,cAAe6hlB,IAEvBq5R,EAAuBn+0B,eAAkB,SAAC0iG,EAAOzrI,EAAOkpC,GAExDlpC,GACFivC,EAAS,IAAIsyL,KAAiC,CAC5CjmG,QAASohwB,EAAY183B,GACrBgoQ,QAASN,EACTpnG,IAAK/hC,EACLr1F,SAAU,WACR+F,EAAS,IAAI8yL,KAAmC,CAAEimC,QAASN,EAAcmmV,YAAa,MACtF5+iB,EAAS,IAAIgiD,WAKf40O,GAAYA,EAASz5R,SAA6C,oBAA3By5R,EAASz5R,QAAQ4iC,OAC1D62P,EAASz5R,QAAQ4iC,QAEnBuuzB,EAAsBrm3B,cAAI,CACxBsmH,cAAelC,EAAQjzH,IAAI,iBAC3B0yT,WAAYz/L,EAAQjzH,IAAI,cACxB48H,YAAa3J,EAAQjzH,IAAI,oBAE1B,CAACq/P,EAAcnpI,EAAcsvd,IAE1BhoR,EAAW98R,WAEjB,EAAoDA,WAAe7xB,cAAI,CACrEsmH,cAAelC,EAAQjzH,IAAI,iBAC3B0yT,WAAYz/L,EAAQjzH,IAAI,cACxB48H,YAAa3J,EAAQjzH,IAAI,kBAH3B,mBAAOm13B,EAAP,KAA2BD,EAA3B,KAMMhD,EAAc,CAClB,CACEn11B,MAAO/U,EAAE,oCACT6lG,KAAM,eAACukwB,GAAD,IACN36wB,SAAU,WACR/U,KAAmB9rE,mBAAgBy71B,gBAAiBvp0B,KACpDliB,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIyhW,KACJx4V,MAAO,CACLszF,WAAYxG,EAAQjzH,IAAI,iBACxBqtwB,sBAAuB,SAACp2tB,GACtB,IACMk+E,EADsBl+E,EAAKj3C,IAAI,kBACAA,IAAI,iBACzC4mC,EAAS,IAAIohD,MAA+B,CAAEyxC,WAAYtE,KACtD2gM,GACFlvR,EAAS,IAAI0hD,MAAqC,CAAEmxC,WAAYtE,KAElDrgF,YAAW,WACzBy9zB,EAAQxu0B,QAAQ+jF,KAAOqN,EACvBo9uB,EAAQxu0B,QAAQ4iC,UACf,UAIT//B,EAAS,IAAI0J,KAA6B,CAAEpT,GAAIyhW,UAGpD,CACE5hW,MAAO/U,EAAE,+CACT6lG,KAAM,eAACykwB,GAAD,IACN76wB,SAAU,WACR7wE,EAAS,IAAI4J,KAA+B,CAC1CrK,MAAO,CACLygE,MAAM,EACN6tqB,kBAAmB,SAAA/oD,GAAI,OAAI9krB,EAAS,IAAIsyL,KAAiC,CACvEjmG,QAASy4lB,EACT/rd,QAASN,EACTpnG,IAAK/hC,OAGTh5F,GAAIq2uB,QAEN7wqB,KAAmB9rE,mBAAgB271B,yBAA0Bzp0B,EAAc,CAAE0p0B,mBAAoB,sDAGrG,CACEz11B,MAAO/U,EAAE,sCACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,UAAU,GAEZ0zwB,YAAY,GAEd,CACE9v1B,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC4kwB,GAAD,IACN3F,cAAe,CACb3zwB,UAAU,GAEZ0zwB,YAAY,GAEd,CACE9v1B,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,UAAU,IAGd,CACEp8E,MAAO/U,EAAE,6BACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,UAAU,KAkChB,OA7BI03wB,GACFqB,EAAY7m3B,OAAO,EAAG,EAAG,CACvB0xB,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,UAAU,KAKZ+6lB,GACFg+K,EAAY7m3B,OAAOwl3B,EAAsB,EAAI,EAAG,EAC9C,CACE9z1B,MAAO/U,EAAE,uCACT6lG,KAAM,eAAC,KAAD,IACNi/vB,cAAe,CACb3zwB,UAAU,IAGd,CACEp8E,MAAO/U,EAAE,gDACT6lG,KAAM,eAACinwB,GAAD,IACNhI,cAAe,CACb3zwB,UAAU,KAMX,qCACL,gBAACu7U,GAAA,EAAD,CAAUr/W,UAAW2hZ,EAArB,UACE,eAAC/qM,GAAA,EAAD,CAAW52M,UAAWF,EAAQguxB,gBAC7Bh6C,GAAiBC,GAAa,eAACn9hB,GAAA,EAAD,CAAW52M,UAAWF,EAAQ47xB,yCAC5D5nD,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,EAAQ+7xB,sBAC/C/nD,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,EAAQ67xB,oBAA9B,SAChB,eAACv7vB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,iBAEDintB,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,EAAQ87xB,YAA9B,SAChB,eAACx7vB,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,iBAEF,eAAC+pL,GAAA,EAAD,CAAWl0M,QAAQ,OAAnB,SACE,eAAC,GAAD,CAAY+oC,QAAS,kBAAM,MAAMmM,UAAU,EAAO9T,UAAU,MAE9D,eAAC8yK,GAAA,EAAD,CAAWl0M,QAAQ,SACnB,eAACk0M,GAAA,EAAD,UACE,eAAC/lK,GAAA,EAAD,CAASC,MAAOq/d,GAAe,GAA/B,SACE,qCACE,eAAC,GAAD,CAAoB5kf,MAAO6wU,KAAmB95a,MAAO6tlB,EAAa/te,SAAUw9wB,EAAoBn/wB,WAAW,EAAM0nN,SAAUA,EACzHv2M,YAAaj/F,EAAE,4CAIvB,eAACikQ,GAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASqiC,MAAO,CAAE9/B,SAAU,SAA5E,UACE,eAAC3C,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,EAAG0gC,MAAO,CAAEkG,YAAa,KAChE,eAACm2vB,GAAD,CAAI3gvB,QAASkiwB,EAAoB19wB,SAAUonwB,EAAsBtM,QAASA,EAAStrvB,YAAaj/F,EAAE,wCAAyCq3O,aAAcA,IACzJ,eAACvqL,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,SAG1B,eAACo1M,GAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAAhD,UAEGg/nB,GACC,uCACE,eAAEhulB,GAAA,EAAF,CAAUC,MAAOn+F,EAAE,kCAAnB,SACE,eAAC8sD,EAAA,EAAD,CACEO,UAAWF,EAAQ28xB,qBACnBv6vB,MAAO,CAAE+Y,cAAe,OAAQnH,QAAS,KACzC1zC,WAAW,EACXM,QAAQ,SACRb,WAAW,SALb,SAOE,eAAC,KAAD,CACEkuC,SAAS,QACTlhB,MAAO6uxB,IAA0BvD,GAAgBqF,SAAW,UAAY,kBAI9E,eAAC3swB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,oCAAlB,SACE,eAAC8sD,EAAA,EAAD,CACEO,UAAWF,EAAQ88xB,uBACnB16vB,MAAO,CAAE+Y,cAAe,OAAQnH,QAAS,KACzC1zC,WAAW,EACXM,QAAQ,SACRb,WAAW,SALb,SAQE,eAAC,KAAD,CACEkuC,SAAS,QACTlhB,MAAO6uxB,IAA0BvD,GAAgBqE,SAAW,UAAY,mBAOlF,eAACl7vB,GAAA,EAAD,CAAY3+H,KAAK,QAAQu/G,MAAO,CAAE+Y,cAAe,OAAQnH,QAAS,KAAlE,SACE,eAAC2pwB,GAAA,EAAD,MAEF,eAACn8vB,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS4jhB,EAASwtP,GAA3C,SACE,eAAC,KAAD,WAKLn1gB,EAAW93W,KAAI,SAAC6tP,EAAO7zP,GAEtB,OADkB6zP,EAAM9yP,IAAI,aAExB,KACA,eAACisR,GAAA,EAAD,UACA,eAACkmC,EAAA,EAAD,CAAWh5M,UAAU,EAAMrD,WAAW,EAAMmR,YAAa6rI,EAAM9yP,IAAI,WADnDf,YAWbm23B,GAFgB101B,OAAWs01B,I,UC5QpCK,GAAY,SAAC,GAYN,IA4FP30xB,EAvGJ2+J,EAWU,EAXVA,aACA8pjB,EAUU,EAVVA,cACAC,EASU,EATVA,UACAtuc,EAQU,EARVA,eACA8H,EAOU,EAPVA,oBAQMh8U,EAAW2F,wBACX0gF,EAAWt/E,sBAAYm5N,aAA0BzH,IACjDh8J,EAAU11D,sBAAYo5N,aAAyB1H,IAC/Ci2nB,EAAiB3n1B,sBAAYs5N,aAAyB5H,IAItDk2nB,GAHmB5n1B,sBAAYqwN,eCrGE,WACvC,IAAMw3nB,EAAc7n1B,sBAAYowN,eAEhC,OAAOr9N,WAAc,WACnB,IAAI+01B,EAAkBpw2B,iBAAO,IACzBqw2B,EAAkB,EAYtB,OAVAF,EAAY7s3B,SAAQ,SAACg3P,EAASN,GAC5Bo2nB,EAAkBA,EAAgB9x3B,IAAI07P,EAAcq2nB,IACnC/1nB,EAAQ3/P,IAAI,aAAekU,kBACnCvL,SAAQ,SAACsqH,GACXA,EAAQjzH,IAAI,iCACf013B,UAKCD,IACN,CAACD,IDsF2BG,IACzBC,EAAuBL,EAAuBv13B,IAAIq/P,IAAiB,EACzE,EAAgC3+N,WAAe,MAA/C,mBAAO0uF,EAAP,KAAiBs9J,EAAjB,KACA,EAAsChsP,WAAe,IAArD,mBAAOkrwB,EAAP,KAAoBL,EAApB,KACA,EAA8C7qwB,WAAe,MAA7D,mBAAOm11B,EAAP,KAAwBC,EAAxB,KACA,EAA4Cp11B,WAAe,MAA3D,mBAAOq11B,EAAP,KAAuBC,EAAvB,KACA,EAA0Ct11B,YAAe,GAAzD,mBAAOu11B,EAAP,KAAsBC,EAAtB,KACMC,EAAaz11B,SAAa,MAC1B011B,EAAkB111B,SAAa,MACrC,EAA8CA,WAAe,MAA7D,mBAAO211B,EAAP,KAAwBC,EAAxB,KAEQtu2B,GAAM+xB,YAAe,gBAArB/xB,EACFuu2B,GAAiB711B,eAAkB,SAACuyF,GAEtCqjwB,EADErjwB,GAGiB,QAEpB,IACGyxgB,GAAWhkmB,eAAkB,SAAAqs1B,GAAY,OAAI,SAAA1o3B,GACjDqoR,EAAYroR,EAAEs8G,eACd4qrB,EAAewhF,MACd,CAAC1tnB,IAEEuxnB,GAAclw1B,eAAkB,SAACqs1B,EAActhM,GAAf,OAAkC,SAAApnrB,GACtEyx3B,EAAmBzx3B,EAAEs8G,eACrBq1wB,OAAoCj+3B,IAAlB0zrB,EAA8B,CAAE5qpB,SAAUks1B,EAActhM,iBAAkB,kBAAMshM,OACjG,CAAC1tnB,IAEEm3nB,GAA6B7o1B,sBAAY8V,gBAEzC+v0B,GAAO7l1B,sBAAY6vJ,gBAEnB28K,GAAYxsU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,eACrEo3nB,GAAyB9o1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,YAClFs/G,GAAkBhxU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,qBAC3E09G,IAAc4B,IAAmB9vW,iBAAO7O,IAAI,eAAiBkU,iBAC7D4/G,GAAgCnmF,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,eAAiBnrP,iBAC1Gwi3B,GAAuBh21B,WAAc,kBAAMozF,IAAYA,GAAStsH,QAAO,SAAAsM,GAAC,OAAKA,EAAE9T,IAAI,mCAAiC0f,SAAQ,SAAA5L,GAAC,OAAKA,EAAE9T,IAAI,gBAAgB6O,kBAAO,CAACilH,KAChK6iwB,GAAgBj21B,WAAc,kBAAOg21B,GAAqB123B,KAAI,IAA0B6O,iBAAO7W,MAAQ,IAAG,CAAC0+3B,KAC3GE,GAAgBl21B,WAAc,kBAAOg21B,GAAqB123B,KAAI,IAA2B6O,iBAAO7W,MAAQ,IAAG,CAAC0+3B,KAI5GG,GAAwBn21B,WAAc,WAC1C,IAAI/c,EAAU0B,iBAAO,IACjByx2B,EAAelB,EAOnB,OANQ,OAAR9hwB,SAAQ,IAARA,OAAUnrH,SAAQ,SAACsqH,EAAS8jwB,GACrB9jwB,EAAQjzH,IAAI,kCACf2jB,EAAUA,EAAQhgB,IAAIoz3B,EAAaD,GACnCA,QAGGnz2B,IACN,CAACmwG,GAAU8hwB,IAERl3gB,GAAe/wU,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,kBACxEkkb,GAAsB51oB,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,yBAC/E23nB,GAAmBrp1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,sBAC5EmhZ,GAAe9uO,aAAoB/yD,IACnC+hY,IAAgB/hY,IAAmB9vW,iBAAOgO,MAAM,CAAC,WAAY,kBAAoB3I,iBACjFs1yB,GAAmB9oxB,WAAc,WACrC,OAAOggtB,GAAaz7uB,KAAI,SAAAo1W,GAAO,OAAI0C,GAAWn/V,MAAK,SAAAk1O,GAAK,OAAIunH,IAAYvnH,EAAM9yP,IAAI,YAAQuH,OAAOw1W,GAAWv1W,QAAO,SAAAsrP,GAAK,OAAK4tf,GAAal7uB,SAASstP,EAAM9yP,IAAI,YAAYkU,mBACxK,CAACwsuB,GAAc3jY,KAEZk6gB,GAAyBv21B,WAAc,kBAC3CozF,IAAWA,GAAStqH,OAAM,SAACypH,GAAD,OAAwBA,EAAQjzH,IAAI,wBAA2BizH,EAAQjzH,IAAI,iBAAmBizH,EAAQjzH,IAAI,sBACpI,CAAC8zH,KAEGqglB,GAAyBzzqB,WAAc,mBAC3CozF,IAAWA,GAASpqH,MAAK,SAACupH,GAAD,OAAwBA,EAAQjzH,IAAI,4BAC7D,CAAC8zH,KAEGojwB,GAAuBx21B,eAAkB,SAACr8B,GAC9CuiC,EAAS,IAAIsvL,MAAuC,CAAEmpC,eAAcw+G,qBAAsBo5gB,QACzF,CAACnjwB,GAAUmjwB,KAERhD,GAAevz1B,eAAkB,kBAAMkG,EAAS,IAAIgzL,KAAJ,2BACjD3sG,EACC,CAAEA,UAAU,GACZ,CAAE5pB,SAAS,IAHqC,IAIpDs8J,QAASN,QACN,CAACA,EAAcpyI,IAIpBvsF,aAAgB,WACV401B,IACFa,EAAWpy1B,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,UAC/D6mnB,EAAgBry1B,QAAQi4D,YAEzB,CAACs5xB,EAAgBn7gB,KAEpBz5U,aAAgB,WACV2iE,IACFm/B,aAAa9hC,GACbA,EAAU5rD,YAAW,kBACnBlO,EAAS,IAAIgzL,KAAmC,CAC9Cv2H,SAAS,EACT4pB,UAAU,EACV0yI,QAASN,WAGd,CAACh8J,IAEJ3iE,aAAgB,WACVg+U,IAAgBA,GAAa5gX,QAAU,GACzCo43B,GAAiB,GAEjBA,GAAiB,KAElB,CAACx3gB,KAEJ,IAAMy4gB,GAA6Bz21B,eAAkB,SAAAr8B,GAC/CA,EAAEvG,QAAU,GACdo43B,GAAiB,GAEjBA,GAAiB,GAEnB,IAAMkB,EAAS/y3B,EAAEwwE,QAAQ,gBAAiB,KAE1CjuC,EAAS,IAAIs0L,MAAyB,CAAEmkC,eAAc1nQ,MAAOy/3B,OAC5D,CAAC14gB,GAAcu3gB,EAAe52nB,IAC3BlqL,GAAUs2C,KAEVo1jB,GAAmBlzoB,sBAAYy6N,eAC/BxuH,GAAejsG,sBAAYulG,gBAU3BmkvB,GAAsB321B,WARC,kBAAMmgpB,GAAiBj5qB,QAAO,SAACutI,EAAK0jD,GAAc,IAAD,EACtEjhJ,EAAU,CACd7a,MAAO87J,EAAS74L,IAAI,iBACpBy3G,SAAU,kBAAM7wE,EAAS,IAAIkyL,MAA4B,CAAE6mC,QAASN,EAAcxmE,gBAGpF,OADA,UAAAA,EAAS74L,IAAI,2BAAb,eAAkCwF,SAASo0I,KAAgBzE,EAAI7/H,QAAQsiC,GAAWu9F,EAAI9sI,KAAKuvC,GACpFu9F,IACN,MAC6D,CAAC0riB,GAAkBxhb,IAE7E59D,GAAW9zJ,sBAAY+4N,aAA0B,CAAE/G,QAASN,KAE5Dijb,GAAiB5hpB,eAAkB,WACvCkG,EAAS,IAAIsxL,MAA2B,CAAEynC,QAASN,OAClD,CAACA,EAAc59D,KAQZ8yrB,GAAkB7z1B,WANC,iBAAO,CAC9B3D,MAAO/U,GAAE,gCACTmi1B,SAAU,CAAC,WAAY9qmB,EAAc,QACrC+qmB,kBAAmB,CAAE7yvB,MAAO,CAAEhgC,MAAO,SACrCmzS,eAAgB,CAAEtwB,WAAW,MAEyB,CAAC/6F,IAEnDloL,GAAQwjD,eACR28vB,GAA0B521B,eAAkB,WAChDo11B,EAAmB,MACnBppmB,EAAY,QACX,IACG4uE,GAAO56T,SAAa,IAEpBsy1B,GAAUty1B,eAAkB,SAAC5sB,EAAG2zB,GAAJ,OAAU6zT,GAAKv3T,QAAQjwB,GAAK2zB,IAAG,IAC3D8v1B,GAAW721B,eAAkB,SAAC5sB,EAAG2zB,GACjC6zT,GAAKv3T,QAAQjwB,IAAMwnV,GAAKv3T,QAAQjwB,GAAGiwB,QAAQ0D,IAAM6zT,GAAKv3T,QAAQjwB,GAAGiwB,QAAQ0D,GAAG1D,SAC9Eu3T,GAAKv3T,QAAQjwB,GAAGiwB,QAAQ0D,GAAG1D,QAAQ4iC,UAEpC,CAAC04L,IAEE/sI,GAAc5xF,eAAkB,SAAC0iG,GACrCx8F,EAAS,IAAIgxL,KAAsB,CACjCuyoB,SAAU,CAAC,YACXht0B,UAAW,CAAC,gBACZ/kC,MAAOinQ,EACPjwI,SAAUgU,EAAMziB,cAChB62wB,cAAc,OAEf,CAACn4nB,IAEEo4nB,GAAkB/21B,eAAkB,kBAAMkG,EAAS,IAAI8wL,KAA+B,CAC1FioC,QAASN,OACN,CAACA,IAEAq4nB,GAAiCh31B,eAAkB,SAAAxuB,GACvD+R,QAAQ08E,MAAR,uDAA8D0+J,IAC9Dz4N,EAASu/B,YAAO6/L,IAAD,mBAA8B3G,EAA9B,YAAsDntP,MACpE,CAACmtP,IAEEwte,GAASl/rB,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,aAAexwP,gBACjF8o3B,GAA4Bhq1B,sBAAY24N,aAAkB,CAAC,WAAYjH,EAAc,SAAU,gCAAkC,GAEvI3+N,aAAgB,WAEd,GAAIozF,IAAYA,GAAS97H,KAAO,GAAK87H,GAASpqH,MAAK,SAAAupH,GAAO,OAA2B,IAAvBA,EAAQjzH,IAAI,gBACzDjI,IAAX80uB,SAAmD90uB,IAA3B80uB,GAAO7suB,IAAI,aAA2B,CAChE,IAAM433B,GAAwBt+3B,QAAQw6H,GAASl2G,MAAK,SAAAq1G,GAElD,OADuB35H,QAAQ25H,EAAQjzH,IAAI,iBAG7C4mC,EAAS,IAAIoxL,KAAwB,CAAE2nC,QAASN,EAAc59D,SAAUm2rB,QAG3E,CAAC9jwB,KAEJ,IAAMkjW,GAAe7hZ,GAAQ,kBAAD,OAAmBi0uB,EAAY,aAAe,IAA9C,OAAmDD,EAAgB,iBAAmB,GAAtF,yBAE5B,OACE,gBAACr0uB,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAEhgC,MAAO,OAAQsgzB,gBAAiB,QAAS9/yB,QAAS,UAAY1C,UAAU,UAAUn4C,GAAE,kBAAamiO,GAAgB3nQ,IAAKy+3B,EAAjJ,UACE,eAAC,GAAD,CAAc/mwB,SAAUA,EAAUs9J,YAAaA,EAAak/gB,YAAaA,IACzE,eAAC,GAAD,CAAcx8qB,SAAUymwB,EAAiBnpmB,YAAa4qmB,GAAyB1rF,YAAamqF,IAE1Fz83B,QAAQ+83B,GAAmB,eAAC/qK,GAAA,EAAD,CACzB37Z,OAAM,OAAE0mkB,QAAF,IAAEA,OAAF,EAAEA,EAAiBx52B,MAAM,CAAC,eAAgB,WAChD+xS,SAAQ,OAAEynkB,QAAF,IAAEA,OAAF,EAAEA,EAAiBx52B,MAAM,CAAC,eAAgB,aAClD4rsB,mBAAkC,OAAf4tK,QAAe,IAAfA,OAAA,EAAAA,EAAiBx52B,MAAM,CAAC,eAAgB,UAAW,EACtE8lU,mBAAkB,OAAE0ziB,QAAF,IAAEA,OAAF,EAAEA,EAAiBx52B,MAAM,CAAC,eAAgB,cAAe,EAAG,IAC9E+jH,QAAS21vB,KACN,KAEP,gBAACzowB,GAAA,EAAD,CAAOvW,MAAO,CAAEx/B,QAAS,sBAAuB++C,OAAQ,2CAA6C5J,UAAW,EAAhH,UAEE,gBAACp4C,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAASF,QAAS,EAA1F,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAAhD,UACG4sB,EAAU,eAACszB,GAAA,EAAD,CAAY3+H,KAAK,SAAjB,SAA0B,eAAC6lU,EAAA,EAAD,CAAkB7lU,KAAK,MAAMg7kB,eAAe,MAC/E,eAAC,GAAD,CAAYlyd,QAASmzwB,GAAchnwB,SAAUA,EAAUj1H,KAAK,WAC9D,eAAC,GAAD,CACE4oG,MAAO6wU,KACPj0G,SAAU44jB,EACVz+3B,MAAO+mX,GACPjnQ,SAAU0/wB,GACVp61B,MAAO/U,GAAE,gCACTorS,UAAWkikB,EACXtwxB,QAAS,SAAA3gG,GAAC,OAAIix3B,GAAkBjx3B,EAAEs8G,cAAc3kB,UAChDsuwB,eAAe,EACfx0vB,WAAW,EACXskP,WAAW,EACXl4B,WAAY,SAAC79T,GACG,UAAVA,EAAE9D,KACJ8D,EAAEg5H,kBAGNznB,WAAY,CAAE6lE,UAAW,IACzB1iE,WAAY,CACVxB,MAAO,CACL9/B,SAAU,UAGdqxC,WAAYmtwB,EAAgBju2B,GAAE,6BAA8B,CAAE09F,MAAO,KAAQ,YAKnF,eAAC5wC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,gBAACf,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASuB,KAAK,SAASF,QAAS,EAAlE,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACf,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAAjC,SACE,uBAAK4hC,MAAO,CAAElgC,QAAS,OAAQurqB,aAAc,UAA7C,UACE,sBACEngoB,IAAsB,QAAjB+9hB,GAAyBh8U,KAAUC,KACxCltN,MAAO,CAAEhgC,MAAO,IAChB+tD,IAAKt9G,GAAE,uBAAD,OAAyC,QAAjBw4nB,GAAyB,kBAAoB,gBAC7E,eAAC/qiB,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,GAAE,eAAD,OAAgBw4nB,cAIjD,eAAC1rkB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SAEImhzB,GACE,gBAAClizB,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASuB,KAAK,SAAhE,UACE,eAAC,KAAD,CAAkByrB,MAAM,UAAUqV,MAAO,CAAEkG,YAAatmC,GAAMZ,aAC9D,eAACk/B,EAAA,EAAD,CAAYvT,MAAM,UAAlB,SAA6Bl6E,GAAE,2CACvB,YAMpB,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,gBAACf,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,WAAnD,UAEIygzB,IACE,eAAC51wB,EAAA,EAAD,CAAQjL,QAAQ,YAAYzT,MAAM,UAAUqV,MAAO,CAAEkG,YAAa,IAAMqD,QAAS,kBAAMl6E,EAAS,IAAIswL,KAAmC,CAAEmoC,mBAAzI,SACG,4BAIP,eAAC,KAAD,CAAiBn9J,MAAO/qB,GAAM+pC,QAAQ4G,KAAKmX,UAAWpR,KAAM,QAC5D,gBAACpY,EAAA,EAAD,CAAY8B,MAAO,CAAE//B,OAAO,KAAD,OAAOL,GAAMZ,QAAQ,IAArB,OAA3B,cAA8DogzB,GAA9D,KAA+EC,MAE/E,eAAC1wwB,GAAA,EAAD,CAASC,MAAOn+F,GAAE,+BAAlB,SACE,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAASwhkB,GAAlC,SAEI7gf,GACI,eAACozrB,GAAD,CAAc3yxB,MAAM,YACpB,eAAC4yxB,GAAD,QAKV,eAAC5uwB,GAAA,EAAD,CAASC,MAAOn+F,GAAE,uBAAlB,SACE,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAASwR,GAAap1F,GAAE,kBAAamiO,EAAb,gBAAjD,SACE,eAACyznB,GAAA,EAAD,QAKJ,eAACn8vB,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS4jhB,GAAS,CACzC,CACE3nmB,MAAO/U,GAAE,qCACTyvF,SAAU,SAACpzG,EAAGpF,GACZ2nC,EAAS,IAAI4yL,KAAuB,CAAEmmC,QAASN,KAC/Cz4N,EAAS,IAAIwxL,SAGjB,CACEr7L,MAAO/U,GAAE,iCACTyvF,SAAU,SAACpzG,EAAGpF,GACZ2nC,EAAS,IAAI00L,KAAmB,CAAE+jC,oBAGtC,CACEtiO,MAAO/U,GAAE,kCACTyvF,SAAU,SAACpzG,EAAGpF,GACZglB,QAAQ08E,MAAR,yBAAgC0+J,IAChCz4N,EAAS,IAAI40L,KAAoB,CAAE6jC,oBAGvC,CACEtiO,OAAQ4hV,IAAmB9vW,iBAAO7O,IAAI,kBAAoB,kBAC1D4ryB,YAAayrF,MAvBjB,SA0BE,eAAC,KAAD,mBASZ,gBAACrqwB,GAAA,EAAD,CAAgBmtN,QAAQ,EAAMltN,SAAUA,EAAUC,UAAW,EAC3D/3C,QAAS,CAAE3hE,KAAM2hE,GAAQu2C,mBAAoBuB,SAAU93C,GAAQ83C,UAC/DqV,gBAAiB,CAAEmhhB,cAAc,GAFnC,UAGE,0BACA,eAACn3hB,GAAA,EAAD,CAAuBn3C,QAAS,CAAE3hE,KAAM2hE,GAAQs7xB,2BAAhD,SACE,gBAACl8a,GAAA,EAAD,CAAOl/W,UAAWF,GAAQi1uB,YAA1B,UACE,eAAC51X,GAAA,EAAD,UACE,gBAACE,GAAA,EAAD,CAAUr/W,UAAW2hZ,GAArB,UACE,eAAC/qM,GAAA,EAAD,CAAW52M,UAAWF,GAAQguxB,gBAC7Bh6C,GAAiBC,GAAa,eAACn9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ27xB,qBAC5D3nD,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ+7xB,sBAC/C/nD,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ67xB,oBAA9B,SAChB,eAACv7vB,EAAA,EAAD,UAAoBztF,GAAPwr2B,GAAS,uCAA4C,8CAEnErqE,GAAiB,eAACl9hB,GAAA,EAAD,CAAW52M,UAAWF,GAAQ87xB,YAA9B,SAChB,eAACx7vB,EAAA,EAAD,UAAoBztF,GAAPwr2B,GAAS,sCAA2C,6CAEnE,eAACvnmB,GAAA,EAAD,CAAWl0M,QAAQ,OAAnB,SACE,eAACmuC,GAAA,EAAD,CACEC,MAA4C,IAArCwxwB,GAA0B753B,QAAgBg2H,GAAS97H,KAAO2/3B,GAA0B753B,OACzFkqB,GAAE,6BAEFA,GAAE,+BAJN,SAME,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS22wB,GAAlC,SACwC,IAArCE,GAA0B753B,QAAgBg2H,GAAS97H,KAAO2/3B,GAA0B753B,OAAS,eAAC,KAAD,IAAqB,eAAC,KAAD,UAIzH,eAACmuR,GAAA,EAAD,CAAWl0M,QAAQ,OAAnB,SACE,eAACsgD,EAAA,EAAD,CACEJ,QAASg/vB,IAA0B9iL,GACnC1gI,eAAgBwjT,IAA0B9iL,GAC1C18lB,SAAUy/wB,GACVh1xB,MAAM,UACNlqG,KAAK,YAGT,eAACi0R,GAAA,EAAD,UACGjkQ,GAAE,gCAEL,eAACikQ,GAAA,EAAD,UACGjkQ,GAAE,wCAEL,eAACikQ,GAAA,EAAD,CAAW10K,MAAO,CAAEhgC,MAAO,GAA3B,SACGvvD,GAAE,iCAEJwhyB,GAAiBvkzB,KAAI,SAAC6tP,EAAO7zP,GAE5B,OADkB6zP,EAAM9yP,IAAI,aAExB,KAEF,eAACkmH,GAAA,EAAD,CAAiBC,MAAOn+F,GAAE,gCAA1B,SACE,eAACikQ,GAAA,EAAD,CAAW52M,UAAWF,GAAQ+8xB,WAAYpxvB,QAAS,kBAAMl6E,EAAS,IAAIo0L,KAAgB,CAAEqkC,eAAcg7G,QAASvnH,EAAM9yP,IAAI,UAAzH,SACE,uBAAKu3G,MAAO,CAAElgC,QAAS,OAAQnC,WAAY,UAA3C,UACE,eAACotU,GAAA,EAAD,CACE3rI,oBAAoB,OACpBz0K,MAAOw+oB,GAAal7uB,SAASstP,EAAM9yP,IAAI,OAASm3E,GAAM+pC,QAAQE,QAAQ7iF,KAAO,cAE9Eu0N,EAAM9yP,IAAI,cAPHf,WAetB,gBAAC21b,GAAA,EAAD,YACI9gU,IAAYjlH,iBAAOhK,WAAWI,KAAI,SAACguH,EAASiD,GAAV,aAC1B,OAARpC,SAAQ,IAARA,IAAA,UAAAA,GAAU9zH,IAAIk2H,UAAd,eAA6Bl2H,IAAI,iCAAkC,KACjE,eAAC,GAAD,CACEu33B,SAAUA,GACVvE,QAASA,GACTtuP,SAAUA,GACVksP,YAAaA,GACbvxnB,aAAcA,EACd09G,WAAYysc,GACZv2rB,QAAO,OAAEa,SAAF,IAAEA,QAAF,EAAEA,GAAU9zH,IAAIk2H,GAEvBA,aAAcA,EACd+8vB,aAAc4D,GAAsB723B,IAAIk2H,GACxCizrB,cAAeA,EACfC,UAAWA,EACX+pE,aAAcoD,GACdv/Z,aAAcA,GACdwpL,aAAcA,GACd1lS,eAAgBA,EAChB8H,oBAAqBA,GAThB1sP,MAYX,eAAC,GAAD,CACE6mP,WAAYysc,GACZv2rB,QAAS/+G,iBACTmrP,aAAcA,EACdnpI,cAAepC,IAAY,IAAI97H,KAC/BmxzB,cAAeA,EACfC,UAAWA,EACX1kL,SAAUA,GACV1tK,aAAcA,aAKtB,gBAACliZ,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,WAAWuB,KAAK,SAASF,QAAS,EAApE,UAEI4yuB,GACA,eAACr0uB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC,GAAD,CAAoB+pB,MAAO6wU,KAAmBv0Y,GAAE,iBAAYmiO,EAAZ,kBAA0C5nJ,SAAUigxB,GAAgC//3B,MAAO8+3B,GAAwBr8hB,WAAW,EAAMC,QAAS,EAAG9iP,MAAO,CAAEhgC,MAAO,QAAU+yxB,eAAe,EACvOvt0B,MAAc/U,GAAPwr2B,GAAS,iCAAsC,wCAG5D,eAAC1+yB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAtB,SACE,eAACs0xB,GAAD,2BAAgBopB,IAAhB,IAAiCjqB,eAAe,OAGhD/mL,KAAwBA,GAAoB/kqB,UAC1C,eAACs2D,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,GAAQ+0uB,YAArC,SAEI3mI,GAAoB1+qB,WAAWI,KAAI,SAACqhrB,EAAWlurB,GAC/C,IAAMuvX,EAAiB2+T,EAAKtmrB,IAAI,kBAC5By/Z,aAAsB6mR,EAAKtmrB,IAAI,mBAC/B8wkB,aAAmB,CACjBn5kB,MAAO2urB,EAAKtmrB,IAAI,SAChBwnX,eAAgB34F,KAAiBmiT,aACjCvpN,iBAAkB34F,KAAkB2hT,MAGxC,OAAO,iCACF61G,EAAKtmrB,IAAI,QADP,eACqB2nX,GADrB,OACgE,eAA1B2+T,EAAKtmrB,IAAI,aAAgC,IAAM,MADrF,qBAAwB5H,SAMnC,kBASL0/3B,GAAWp31B,OAAW201B,IE1kB7B0C,GAAc,SAAC,GAAgD,IAA9C14nB,EAA6C,EAA7CA,aACbr3O,EAAM+xB,YAAe,gBAArB/xB,EACF4e,EAAW2F,wBACX4qC,EAAQwjD,eACd,EAA0Bj6F,YAAe,GAAzC,mBAAO+4T,EAAP,KAAcu+hB,EAAd,KACA,OACE,gBAACljzB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASqiC,MAAO,CAAEx/B,QAAS,YAA9E,UACE,eAACjD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAM0gC,MAAO,CAAEsM,aAAa,aAAD,OAAe41O,EAAQtiR,EAAM+pC,QAAQE,QAAQ7iF,KAAO,gBACrG,eAACu2C,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC+qC,EAAA,EAAD,CACE1jF,GAAI,2BACJ4nP,YAAa,kBAAMkzmB,GAAS,IAC5BzmwB,aAAc,kBAAMymwB,GAAS,IAC7Bl3wB,QAAS,kBAAMl6E,EAAS,IAAIw0L,KAAoB,CAAEikC,mBAClDn9J,MAAM,UALR,SAQIu3P,EAEE,uCACE,eAAC,KAAD,IACCzxU,EAAE,6BAEH,eAAC,KAAD,QAIV,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,IAAI,EAAM0gC,MAAO,CAAEsM,aAAa,aAAD,OAAe41O,EAAQtiR,EAAM+pC,QAAQE,QAAQ7iF,KAAO,oBAO5F051B,GAFIv31B,OAAWq31B,I,sFCtBxBG,GAAsB7swB,cAAW,SAACl0C,GAAD,MAAY,CACjDupC,MAAO,CACLxe,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B,iBAAkB,CAChB2jE,MAAO/qB,EAAM+pC,QAAQ4G,KAAK3O,WAG9B6xN,UAAW,CACT,WAAY,CACV2/G,kBAAmBxzW,EAAM+pC,QAAQE,QAAQ7iF,MAE3C,UAAW,CACTosZ,kBAAmBxzW,EAAM+pC,QAAQE,QAAQ7iF,MAE3C,oCAAqC,CACnCosZ,kBAAmBxzW,EAAM+pC,QAAQE,QAAQ7iF,MAE3C,wBAAyB,CACvBwra,kBAAmB,SACnBpf,kBAAmBxzW,EAAM+pC,QAAQ/5F,OAAOgyF,eAKxCg/wB,GAAc,SAAC,GAAsD,IAApD5M,EAAmD,EAAnDA,gBAAiB94b,EAAkC,EAAlCA,YAAa2lc,EAAqB,EAArBA,eAC7Cxx1B,EAAW2F,wBACX4oC,EAAU+izB,KACV/gzB,EAAQwjD,eACN3yG,EAAM+xB,YAAe,gBAArB/xB,EACR,EAAkC0Y,WAAe,GAAjD,mBAAO231B,EAAP,KAAkBC,EAAlB,KACA,EAA0B531B,YAAe,GAAzC,mBAAOt2B,EAAP,KAAc6wwB,EAAd,KAEMs9G,EAAchN,EAAgBvz3B,MAAQ,EAE5C0oC,aAAgB,WACd431B,EAAa7lc,KACZ,CAACA,IAEJ,IAiBM+lc,EAAe,SAAC3wnB,GACpBuwnB,EAAevwnB,GACfywnB,EAAazwnB,GACbjhO,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,MAGxD,OACE,gBAACvqL,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASuB,KAAK,SAAhE,UACE,eAACkgD,GAAA,EAAD,CAAY3+H,KAAK,QAAQkqG,MAAM,UAAUiX,SAAUs5U,GAAe,EAAG3xU,QAAS,kBAAM03wB,EAAa,IAAjG,SAAqG,eAAC,KAAD,MACrG,eAAC7hwB,GAAA,EAAD,CAAY3+H,KAAK,QAAQkqG,MAAM,UAAUiX,SAAUs5U,GAAe,EAAG3xU,QAAS,kBAAM03wB,EAAa/lc,EAAc,IAA/G,SAAmH,eAAC,KAAD,MACnH,eAACtgI,EAAA,EAAD,CACEv8M,WAAY,CAAE2B,MAAO,CAAE2R,UAAW,WAClC3R,MAAO,CAAEhgC,MAAO,IAChBp7E,KAAK,MACLxE,MAAO0g4B,EACPl/wB,SAAUo/wB,EACV9gxB,SAxBgB,SAACpzG,GACrB,IAAM1M,EAAQiG,OAAOyG,EAAE4kB,OAAOtxB,OACzB0gD,MAAM1gD,KACT2g4B,EAAa3g4B,GACbsjxB,EAAS3hxB,QAAQ3B,GAAS,GAAKA,EAAQ4z3B,EAAgBvz3B,SAqBrDolI,UAlCiB,SAAC/4H,GACJ,KAAdA,EAAE02S,SAAmB3wS,EAGA,KAAd/F,EAAE02S,SAAkB3wS,GAC7Bqu3B,MAAMzw2B,EAAE,uCAHR3jB,EAAEg5H,iBAAkB+6vB,EAAeC,GACnCzx1B,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,OAgCpDtmJ,WAAY,CACV5jC,QAAS,CACPurC,MAAOvrC,EAAQurC,MACfsqN,UAAW71P,EAAQ61P,cAIzB,eAACv1N,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAOq2xB,EAAc,YAAcphzB,EAAM+pC,QAAQE,QAAQ7iF,MAAhG,SAAyG,MACzG,eAACk3E,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAOq2xB,EAAc,YAAcphzB,EAAM+pC,QAAQE,QAAQ7iF,KAAM4lF,WAAY,IAAlH,SAAyHonwB,EAAgBvz3B,MAAQ,IACjJ,eAAC2+H,GAAA,EAAD,CAAY3+H,KAAK,QAAQkqG,MAAM,UAAUiX,SAAUs5U,GAAe84b,EAAgBvz3B,KAAM8oH,QAAS,kBAAM03wB,EAAa/lc,EAAc,IAAlI,SAAsI,eAAC,KAAD,MACtI,eAAC97T,GAAA,EAAD,CAAY3+H,KAAK,QAAQkqG,MAAM,UAAUiX,SAAUs5U,GAAe84b,EAAgBvz3B,KAAM8oH,QAAS,kBAAM03wB,EAAajN,EAAgBvz3B,OAApI,SAA2I,eAAC,KAAD,UAOlI0g4B,GAFIh41B,OAAWy31B,IC2KxBQ,G,4MACG111B,MAAQ,CACb211B,SAAU,GACVhtb,WAAW,EACXitb,8BAA8B,EAC9BC,oBAAqB,KACrBC,gBAAiB,KACjBC,YAAa,KACb3n3B,MAAO,EACP4n3B,gBAAgB,EAChB9vE,eAAe,EACfC,WAAW,EACX8vE,8BAA8B,EAC9BC,mBAAmB,EACnBC,yBAAyB,EACzBC,6BAA8B,KAC9BC,eAAgB,KAChB7mc,YAAa,EACb8mc,YAAa,GACbjE,gBAAiB,EACjBkE,2BAA2B,EAC3BC,qCAAqC,EACrC72gB,oBAAqB,GACrB9H,eAAgB,GAChB4+gB,oBAAqB,KACrBjiK,yBAAyB,EACzBkiK,kCAAkC,EAClCC,6BAA6B,EAC7BC,oBAAoB,EACpBC,oBAAoB,EACpBC,oBAAoB,EACpBC,yBAAyB,EACzBC,8BAA8B,G,EAGzBrgH,MAAQ,G,EAER/hD,sBAAwBn3rB,c,EACxBq3rB,8BAAgCr3rB,c,EAChCw51B,cAAgBx51B,c,EAChBk3rB,iCAAmC,K,EAEnCuiK,kBAAoB,WACzB,MAAkC,EAAKh01B,MAAvB+tqB,GAAhB,EAAQkmL,OAAR,EAAgBlmL,eAChB,EAAKr1lB,SAAS,CACZsqsB,cAAej1G,K,EAKZmmL,oBAAsB,WACtB,EAAKxiK,sBAAsB9zrB,UAChC,EAAK6zrB,iCAAmC,IAAIx8lB,KAAe,EAAK09lB,gBAChE,EAAKlB,iCAAiC18lB,QAAQ,EAAK28lB,sBAAsB9zrB,SACzE,EAAK6zrB,iCAAiC18lB,QAAQ,EAAK68lB,8BAA8Bh0rB,W,EAG5E+0rB,eAAiB,WAAO,IAAD,IACtBE,EAAS,UAAG,EAAKjB,8BAA8Bh0rB,eAAtC,aAAG,EAA4CmyP,wBACxDu2c,EAAK,UAAG,EAAKytJ,cAAcn21B,eAAtB,aAAG,EAA4BmyP,wBAGpCokmB,EAAYthK,EAAUvitB,MAAQg2tB,EAAMj2tB,KAFlB,GAIxB,EAAKqoG,UAAS,SAACtrG,GACb,OAAKA,EAAKkktB,yBAA2B6iK,EAC5B,CAAE7iK,yBAAyB,GACzBlktB,EAAKkktB,0BAA4B6iK,EACnC,CAAE7iK,yBAAyB,GAE7B,S,EAmKJtqd,qBAAuB,WAE5B3qI,aAAa,EAAKo3oB,MAAMtxwB,OAEpB,EAAKsvtB,kCACP,EAAKA,iCAAiCxhhB,c,EAInCmkrB,oBAAsB,WAC3B,EAAK17wB,SAAS,CAAEo6wB,gBAAgB,K,EAG3BuB,yBAA2B,WAChC,MAGI,EAAKr01B,MAFP2iB,EADF,EACEA,cACAliB,EAFF,EAEEA,SAGFA,EAAS,IAAIkwL,MACblwL,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,KACtD,EAAKxgJ,SAAS,CAAE4zU,YAAa,IAC7B/vV,KAAmB9rE,mBAAgB6j2B,gBAAiB3x0B,EAAc,CAAEpgD,KAAMsh2B,GAAsB9wtB,iB,EAG3FwhvB,6BAA+B,WACpC,MAII,EAAKv01B,MAHPS,EADF,EACEA,SACAqw1B,EAFF,EAEEA,uBACA9iL,EAHF,EAGEA,uBAEFvtqB,EAAS,IAAIwvL,MAAmC,CAAEynJ,qBAAsBo5gB,IAA2B9iL,M,EAG9FwmL,8BAAgC,SAAChj4B,GACtC,OAAQA,GACN,IAAK,OACH,EAAKknH,SAAS,CACZsqsB,eAAe,EACfC,WAAW,EACXswE,oBAAqB,OAEvB,MAEF,IAAK,gBACH,EAAK76wB,SAAS,CACZsqsB,eAAe,EACfC,WAAW,EACXswE,oBAAqB,OAEvB,MAEF,IAAK,UACH,EAAK76wB,SAAS,CACZsqsB,eAAe,EACfC,WAAW,EACXswE,oBAAqB,S,EAQtBkB,wBAA0B,WAC/B,EAAK/7wB,SAAS,CAAE26wB,2BAA2B,K,EAGtCA,0BAA4B,WACjC,EAAK36wB,SAAS,CAAE26wB,2BAA2B,K,EAGtCqB,2BAA6B,WAClC,EAAKh8wB,SAAS,CAAEg7wB,oBAAqB,EAAK521B,MAAM421B,sB,EAG3CiB,2BAA6B,WAClC,EAAKj8wB,SAAS,CAAEi7wB,oBAAqB,EAAK721B,MAAM621B,sB,EAG3CiB,2BAA6B,WAClC,EAAKl8wB,SAAS,CAAEk7wB,oBAAqB,EAAK921B,MAAM821B,sB,EAG3CiB,gCAAkC,WACvC,EAAKn8wB,SAAS,CAAEm7wB,yBAA0B,EAAK/21B,MAAM+21B,2B,EAGhDiB,oCAAsC,WAC3C,EAAKp8wB,SAAS,CAAEo7wB,8BAA+B,EAAKh31B,MAAMg31B,gC,EA0fpDiB,2B,wBAA6B,mCAAAt53B,EAAA,+DACZ,EAAKukC,MAApB6c,EAD2B,EAC3BA,MAAOugD,EADoB,EACpBA,IADoB,SAEI+rU,KAAwBa,2BAA2B5sU,EAAKvgD,EAAO,CACpGsrK,QAAS,EAAKnoL,MAAMqE,MAAMoE,OAAO1R,GACjCwkE,OAAQ,CAAC,aACTgkB,MAAO,MAL0B,QAQnC,QANMu5P,EAF6B,cAQnC,IAAIA,OAAJ,EAAIA,EAA0BnhX,QAC5B,EAAK+gH,SAAS,CAAE46wB,qCAAqC,EAAM72gB,oBAAqB3D,IAEhF,EAAKpgQ,SAAS,CAAE46wB,qCAAqC,EAAO72gB,oBAAqB,KAXhD,2C,EAe7Bu4gB,4B,wBAA8B,iCAAAv53B,EAAA,6DAC9B0sN,EAAU1wN,OAAO,EAAKuoC,MAAMqE,MAAMoE,OAAO1R,IADX,SAED06qB,KAAwB83D,eAAe,EAAKvpuB,MAAMo9D,IAAK,EAAKp9D,MAAM6c,MAAOsrK,GAFxE,OAE9B0rJ,EAF8B,OAG9Bc,EAAiBhB,KAAcC,sBAAsBC,GAC3D,EAAKn7P,SAAS,CAAEi8P,mBAChB,EAAK30U,MAAMS,SAASu/B,YAAO+/L,IAA0B,+BAAgC40G,IALjD,2C,EAQ9BsghB,cAAgB,YAEtBx01B,EADqB,EAAKT,MAAlBS,UACC,IAAIw0L,KAAoB,M,uDA3wBnC,WACE,MAOIn/N,KAAKkqC,MANPk11B,EADF,EACEA,uBACAC,EAFF,EAEEA,eACAC,EAHF,EAGEA,6BACA301B,EAJF,EAIEA,SACA0+Y,EALF,EAKEA,aACA2uR,EANF,EAMEA,mBAGEh4sB,KAAK47tB,sBAAsB9zrB,UAC7B9nC,KAAK27tB,iCAAmC,IAAIx8lB,KAAen/H,KAAK68tB,gBAChE78tB,KAAK27tB,iCAAiC18lB,QAAQj/H,KAAK47tB,sBAAsB9zrB,UAE3E9nC,KAAK68tB,iBAED78tB,KAAKkqC,MAAMqE,MAAMizD,IAAIj4F,SAAS8rB,qCAChCr1B,KAAKk+3B,oBAGHoB,GAAgCD,GAClCD,EAAuBC,GAGrBr/3B,KAAKkqC,MAAMqE,MAAMizD,IAAIjzD,MAAM,oCAAsC86Y,EAAatlb,IAAI,YAAc42B,mBAAgBg0vB,gBAClHhkvB,EAAS,IAAI4I,KAAoB,CAAEmsF,UAAW3xG,KAAK+xB,MAAO50B,OAAQyP,mBAAgBg0vB,kBAGhF3uxB,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,IAAM+2qB,IAChCh4sB,KAAKi/3B,6BACLj/3B,KAAKk/3B,iC,gCAIT,SAA0B7gxB,EAA4C4yJ,EAA0Bk6C,GAAuB,IAAD,aACpH,EAkBInrT,KAAKkqC,MAjBP4l1B,EADF,EACEA,sBACAyP,EAFF,EAEEA,iBACAxnL,EAHF,EAGEA,6BACAE,EAJF,EAIEA,cACAtif,EALF,EAKEA,kBACA0pqB,EANF,EAMEA,eACAC,EAPF,EAOEA,6BACAF,EARF,EAQEA,uBACAz01B,EATF,EASEA,SACA0+Y,EAVF,EAUEA,aACAx8X,EAXF,EAWEA,cACAyi0B,EAZF,EAYEA,gBACAkQ,EAbF,EAaEA,gBACAtye,EAdF,EAcEA,WACAuye,EAfF,EAeEA,eAEAC,EAjBF,EAiBEA,mBAGErhxB,EAAU45lB,gBAAkBA,GAAkBtif,GAChD31N,KAAKk+3B,oBAGHoB,GAAgCjhxB,EAAUghxB,iBAAmBA,GAC3DA,GACFD,EAAuBC,GAI3B,IAAMp2a,GAAe,UAAAqma,EAAgBvr3B,IAAI/D,KAAKgnC,MAAMwvZ,oBAA/B,eAA6Cz6b,OAAQ,EAGpE4j4B,EAAiC5nL,EAA6Bh0sB,IAAI,UAClE673B,GAAmB7nL,EAA6Bh0sB,IAAI,UAE1D,GAAI673B,GAAmB3nL,GAAiB5uR,EAAatlb,IAAI,YAAc42B,mBAAgBg0vB,iBAAmB3uxB,KAAKgnC,MAAMm21B,wBAAyB,CAC5I,IAAM0C,EAAc9x2B,KAAK+xB,MAAQupY,EAAatlb,IAAI,aAClD0iG,KAAmB9rE,mBAAgBg0vB,eAAgB9huB,EAAc,CAC/D6nE,SAAUmrwB,KAEZ7/3B,KAAK4iH,SAAS,CAAEu6wB,yBAAyB,IACzCxy1B,EAAS,IAAI4I,KAAoB,CAAEmsF,UAAW,EAAGx0G,OAAQ,MAmB3D,GAhBKy02B,IAAmCC,GACtC5/3B,KAAK4iH,SAAS,CACZo6wB,gBAAgB,IAKlBlN,IAA0BzxwB,EAAUyxwB,wBACpCA,EAAsB/z3B,MACrBiE,KAAKkqC,MAAMqE,MAAMizD,IAAIj4F,SAAS8rB,qCAC9Br1B,KAAKkqC,MAAMqE,MAAMizD,IAAIj4F,SAAS,SACV,IAArBg23B,GAEAv/3B,KAAKm/3B,gBAGHI,EAAmBlhxB,EAAUkhxB,kBAAoBv/3B,KAAKgnC,MAAM5xB,QAAUipG,EAAUkhxB,iBAAkB,CACpG,IAAMrwsB,EAAa7wE,EAAUkhxB,iBAAmBA,EAChDv/3B,KAAK29wB,MAAQ39wB,KAAK29wB,MAAM7twB,MAAMo/K,GAC9BlvL,KAAK4iH,UAAS,SAAA57E,GAAK,kCAAUA,GAAV,IAAiB5xB,MAAO4xB,EAAM5xB,MAAQ85K,OAsB3D,GAnBGlvL,KAAKgnC,MAAM5xB,MAAQ6zc,EAEpBjpd,KAAK29wB,MAAMvxwB,KAAKysC,YAAW,WACzB,EAAK+pE,UAAS,SAAA57E,GAAK,kCAAUA,GAAV,IAAiB5xB,MAAO4xB,EAAM5xB,MAAQ,SAClC,IAAtBpV,KAAK29wB,MAAM97wB,OAAe,EAAI,MACxB7B,KAAK29wB,MAAM97wB,QAAUond,GAAgBjpd,KAAK29wB,MAAM97wB,OAAS,GAAK+93B,IAGvE5/3B,KAAK4iH,SAAS,CACZxtG,MAAO6zc,IAGLjpd,KAAKgnC,MAAMg21B,iBAAmB2C,GAChC9m1B,YAAW,WACT,EAAK+pE,UAAS,SAAA57E,GAAK,kCAAUA,GAAV,IAAiBg21B,gBAAgB,SACnD,MAIHwC,GAAmB,GAAKnhxB,EAAUmhxB,kBAAoBA,IAAoBx51B,SAASghhB,eAAT,kBAAmCw4U,IAAoB,CACnI,IAAMM,EAAaxQ,EAAgBts2B,SAAQ,SAAC+82B,GAAD,OAAoBA,EAAex23B,SAASi23B,WACpE1j4B,IAAfgk4B,GACF9/3B,KAAK4iH,SAAS,CAAE4zU,YAAaspc,IAyBjC,GApBI7unB,EAAUulL,cAAgBx2b,KAAKgnC,MAAMwvZ,cACvCtpC,EAAWplX,QAAQ47T,SAAS,CAC1BpvO,IAAKmrwB,EAAe331B,QAAQ8/S,UAAY5hT,SAASghhB,eAAe,iBAAiBl9N,eAGnFp7T,OAAO4rQ,uBAAsB,WAC3B,EAAKqjf,MAAQ,GACb,EAAK/6pB,SAAS,CAAExtG,MAAO,QAIN,IAAjB6zc,GAAsBjpd,KAAKgnC,MAAMwvZ,YAAc,GAEjDx2b,KAAK4iH,SAAS,CAAE4zU,YAAax2b,KAAKgnC,MAAMwvZ,YAAc,KAGpD,UAAAx2b,KAAKkqC,aAAL,eAAY8tqB,qBAAsB35lB,EAAU9vE,MAAMoE,OAAO1R,KAAOjhC,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,KAC1FjhC,KAAKi/3B,6BACLj/3B,KAAKk/3B,gCAEP,UAAIl/3B,KAAKkqC,aAAT,aAAI,EAAY8tqB,qBACV0nL,GAAsBA,EAAmB3j4B,KAAO,EAAG,CACrD,IAAMik4B,EAAsBN,EAAmB9+2B,MAAM,CAAC,SAAU,iCAC5Do/2B,GAAuBhg4B,KAAKgnC,MAAM63U,iBAAmBmhhB,GACvDhg4B,KAAK4iH,SAAS,CAACi8P,eAAgBmhhB,O,oBAkGvC,WAAiB,IAAD,WACd,EAgBIhg4B,KAAKkqC,MAfPS,EADF,EACEA,SACAuuC,EAFF,EAEEA,QACAntD,EAHF,EAGEA,EACAmvD,EAJF,EAIEA,MACA+kzB,EALF,EAKEA,uBACAloL,EANF,EAMEA,6BACAE,EAPF,EAOEA,cACAs/K,EARF,EAQEA,KACAjI,EATF,EASEA,gBACA0L,EAVF,EAUEA,uBACA9iL,EAXF,EAWEA,uBACAgoL,EAZF,EAYEA,uBACAC,EAbF,EAaEA,4BACAxiB,EAdF,EAcEA,kBACA4hB,EAfF,EAeEA,iBAEF,EAcIv/3B,KAAKgnC,MAbPkmxB,EADF,EACEA,cACAC,EAFF,EAEEA,UACA8vE,EAHF,EAGEA,6BACAC,EAJF,EAIEA,kBACA1mc,EALF,EAKEA,YACA+mc,EANF,EAMEA,0BACAC,EAPF,EAOEA,oCACA72gB,EARF,EAQEA,oBACA9H,EATF,EASEA,eACA4+gB,EAVF,EAUEA,oBACAjiK,EAXF,EAWEA,wBACAkiK,EAZF,EAYEA,iCACAC,EAbF,EAaEA,4BAEI10a,GAAe,UAAAqma,EAAgBvr3B,IAAI/D,KAAKgnC,MAAMwvZ,oBAA/B,eAA6Cz6b,OAAQ,EACpEqk4B,EAAab,EAAmB,EAEhCpswB,EAAWntF,SAASghhB,eAAe,iBACnC24U,EAAiC5nL,EAA6Bh0sB,IAAI,UAClE673B,GAAmB7nL,EAA6Bh0sB,IAAI,UAE1D,OACE,uBAAKq1E,UAAWF,EAAQ3hE,KAAM0pB,GAAG,UAAjC,UACGkyF,GAAY,eAACD,GAAA,EAAD,CAAQjyF,GAAI,QAAS0pE,KAAM3qG,KAAKgnC,MAAMg21B,eAAgB7pwB,SAAUA,EAAUqB,YAAY,EAAtF,SACV,gBAAG6R,EAAH,EAAGA,gBAAH,OACC,eAACy4P,GAAA,EAAD,2BAAUz4P,GAAV,IAA2B5hC,QAAS,IAApC,SACE,eAACotB,GAAA,EAAD,CAAOvW,MAAO,CACZyf,WAAY7/C,EAAM+pC,QAAQE,QAAQ,IAClCsC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BjsC,SAAUN,EAAMZ,QAAQ,IACxBgC,SAAU,QAJZ,SAME,gBAACzD,EAAA,EAAD,CAAMW,WAAW,EAAMP,WAAW,SAASa,QAAQ,SAASwhC,MAAO,CAAEx/B,QAAS,uBAA9E,UACG6jzB,EAAiC,eAAC/9jB,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,OAAOu/G,MAAO,CAAEkG,YAAa,MAAW,KACjH,eAAChI,EAAA,EAAD,CACEE,QAAQ,QADV,SAEIimxB,EACE5z2B,EAAE,8CAAgD6z2B,GAAmB7z2B,EAAE,qCAE7E,eAAC2uG,GAAA,EAAD,CAAY3+H,KAAK,QAAQ8oH,QAAS,EAAKy5wB,oBAAqBr4xB,MAAM,UAAlE,SACI8xmB,EAA6Bh0sB,IAAI,UAA8B,eAACs83B,GAAD,IAAlB,eAAC3wR,GAAA,EAAD,iBAQ3D,eAAC72hB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQo8nB,cACnB57lB,QAAQ,KAFV,SAIG3tF,EAAE,yBAIP,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAA1D,UACE,eAACgxC,GAAA,EAAD,CAASC,MAAgCn+F,EAAzBmsrB,EAA2B,iCAAsC,gCAAjF,SACE,eAACngZ,EAAA,EAAD,CACExwM,QACE,eAAC6U,EAAA,EAAD,CACEJ,QAASg/vB,GAA0B9iL,EACnC1gI,eAAgBwjT,GAA0B9iL,EAC1C18lB,SAAUx7G,KAAKy+3B,6BACfx4xB,MAAM,UACNlqG,KAAK,UAGT+kC,MAAgC/U,EAAzBmsrB,EAA2B,0BAA+B,6BAInEslL,GACA,gBAAC74wB,EAAA,EAAD,CACEjL,QAAQ,OACRzT,MAAM,UACN4e,QAAS7kH,KAAKu93B,0BAHhB,UAKE,eAAC,KAAD,IALF,IAK0Bxx2B,EAAE,gDAKhC,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,oBAKIg1yB,EAAgBvr3B,IAAIyyb,UALxB,aAKI,EAAkCxtb,KAAI,SAACo6P,EAAcpgQ,GAAf,OACpC,EAAKgkC,MAAM5xB,OAASpS,GACpB,uBAAas4G,MAAO,CAAEhgC,MAAO,OAAQu4C,aAAc,IAAnD,UACS,IAAN7wH,GAAW,eAAC,GAAD,CAAYogQ,aAAcA,IACtC,eAACy4nB,GAAD,CAEEz4nB,aAAcA,EACd8pjB,cAAeA,EACfC,UAAWA,EACXtuc,eAAgBA,EAChB8H,oBAAqBA,GALhBvjH,GAOP,eAAC,GAAD,CAAYA,aAAcA,EAAe,MAVjCpgQ,OAeXimd,GAAgB,eAAC,GAAD,CAAY7lN,aAAc,IAG7C,eAAC,GAAD,OAIF,sBAAK3nQ,IAAKuE,KAAK47tB,sBAAuBxipB,UAAWF,EAAQ81pB,mBAAzD,SACE,gBAACn2pB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQ+1pB,UAAW3znB,MAAO,CAAE0J,gBAAiBk7wB,EAAyB,EAAIhlzB,EAAM+pC,QAAQE,QAAQ,IAAMjqC,EAAM+pC,QAAQU,OAAOmjB,OAAvN,UACE,eAACjwD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAUqV,MAAO,CAAEihB,WAAY,QAAjE,SACGxwG,EAAE,uCAAwC,CAAE3W,MAAO8q3B,QAIxD,eAACrnzB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQg2pB,uBAArC,SACE,gBAACr2pB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxE,UACE,eAACyvC,GAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAAlB,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBpxnB,UAAW0ixB,EACX/6wB,QAAS7kH,KAAK4+3B,2BACd34xB,MAAM,UACNm+K,UAAW,eAACiiI,GAAA,EAAD,CAAgBpgT,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,OACxD42C,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBANhC,SAQI3T,EAA4D,GAAlCzvsB,EAAE,oCAKpC,eAACk+F,GAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAAlB,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBpxnB,UAAW0ixB,EACX/6wB,QAAS7kH,KAAK6+3B,2BACd54xB,MAAM,UACNm+K,UAAW,eAACiiI,GAAA,EAAD,CAAYpgT,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,OACpD42C,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBANhC,SAQI5T,EAA4D,GAAlCzvsB,EAAE,oCAKpC,eAACk+F,GAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAAlB,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBpxnB,UAAW0ixB,EACX/6wB,QAAS7kH,KAAK8+3B,2BACd74xB,MAAM,UACNm+K,UAAW,eAAC,KAAD,CAAcj9J,SAAS,YAClCjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBANhC,SAQI5T,EAA4D,GAAlCzvsB,EAAE,oCAKpC,eAACk+F,GAAA,EAAD,2BAEuC,IAAhCk2wB,EACC,CAACj2wB,MAAOn+F,EAAE,wCACV,CACEg7P,aAAa,EACb58J,UAAW,MACXm8J,sBAAuBs5mB,GAAmBK,EAC1C/mzB,QAAS,CAAEo2L,QAASp2L,EAAQonzB,aAC5Bp2wB,MACE,gBAACgS,GAAA,EAAD,WACE,eAAC3f,GAAA,EAAD,CAAUW,SAAU+ixB,EAAwBp7wB,QAAS,kBAAMl6E,EAAS,IAAIgyL,MAA0B,CAAE4jqB,4BAA4B,MAAhI,SACGx02B,EAAE,8CAEL,eAACwwF,GAAA,EAAD,CAAUW,SAAU+ixB,EAAwBp7wB,QAAS,kBAAMl6E,EAAS,IAAIgyL,MAA0B,MAAlG,SACG5wM,EAAE,8CAfnB,aAqBE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBrooB,MAAM,UACN4e,QAC6B,IAA3Bq7wB,EACI,kBAAMv11B,EAAS,IAAIgyL,MAA0B,MAC7C,KAENz/G,SAAU+ixB,IAA2BL,EACrCx7mB,UACE67mB,EACI,eAACr+jB,EAAA,EAAD,CAAkB7lU,KAAK,QACvB,eAAC,KAAD,CAAYorH,SAAS,YAE3BjuC,QAAS,CAAEkrM,UAAWo3c,EAA0BtipB,EAAQi2pB,oBAAsBj2pB,EAAQk2pB,wBACtF9znB,MAAO,CAAE+J,OAAQ66wB,EAAyB,EAAI,UAAY,WAf5D,SAkBK1kK,EAIG,GAFIzvsB,EADJk02B,EACM,8BACA,0CAOlB,eAACh2wB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,gCAAlB,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBzpnB,QAAS,kBAAM,EAAKjC,SAAS,CAAE86wB,kCAAkC,KACjEz3xB,MAAM,UACNiX,SAAqC,IAA3BgjxB,IAAiCN,EAC3Cx7mB,UAAW,eAAC,KAAD,CAAYj9J,SAAS,YAChCjuC,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBANhC,SAQI3T,EAA8D,GAApCzvsB,EAAE,sCAIpC,eAAC4qG,GAAA,EAAD,CAAS4/P,YAAY,WAAWn9S,UAAWF,EAAQm2pB,mBAEnD,eAACplnB,GAAA,EAAD,CACE88J,aAAa,EACb58J,UAAW,MACXm8J,sBAAuBs5mB,GAAmBQ,EAC1ClnzB,QAAS,CAAEo2L,QAASp2L,EAAQonzB,aAC5Bp2wB,MACE,gBAACgS,GAAA,EAAD,WACE,eAAC3f,GAAA,EAAD,CAAUsI,QAAS7kH,KAAK++3B,gCAAxB,SACGhz2B,EAAE,oCAEL,eAACwwF,GAAA,EAAD,CAAUsI,QAAS,kBAAM,EAAKjC,SAAS,CAAEq6wB,8BAA8B,KAAvE,SACGlx2B,EAAE,4CAXX,SAgBE,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXuB,KAAK,SACLpB,UAAWF,EAAQo1pB,gBACnBhznB,MAAO,CACLrV,OAAS25xB,GAAmBQ,EAAcllzB,EAAM+pC,QAAQC,KAAK,KAAOhqC,EAAM+pC,QAAQE,QAAQ7iF,KAC1Fg5C,MAAO,eARX,UAWE,eAAC,KAAD,CAAU2qB,MAAM,YAChB,eAACuT,EAAA,EAAD,CAAYvT,MAAM,UAAlB,SACIu1nB,EAAwD,GAA9BzvsB,EAAE,iCAMlCksrB,GAAiB,uCACf,eAAChulB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,0BAAlB,SACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBzpnB,QAAS,SAACz8G,GAAD,OAAO,EAAKw6G,SAAS,CAAE66wB,oBAAqBr13B,EAAEs8G,iBACvDze,MAAM,UACNm+K,UAAW,eAAC,KAAD,CAAgBj9J,SAAS,YACpCjuC,QAAS,CAAEkrM,UAAWo3c,EAA0BtipB,EAAQi2pB,oBAAsBj2pB,EAAQk2pB,wBALxF,SAOI5T,EAAwD,GAA9BzvsB,EAAE,8BAGlC,gBAAC4kQ,GAAA,EAAD,CACE1vP,GAAG,oBACHkyF,SAAUsqwB,EACV9yxB,KAAMttG,QAAQog4B,GACd94vB,QAAS,kBAAM,EAAK/hB,SAAS,CAAE66wB,oBAAqB,QAJtD,UAME,eAAClhxB,GAAA,EAAD,CAAU7gH,MAAO,OAAQmpH,QAAS,kBAAM,EAAK65wB,8BAA8B,SAA3E,SACU3y2B,EAAPwr2B,EAAS,8CAAmD,mDAE/D,eAACh7wB,GAAA,EAAD,CAAU7gH,MAAO,gBAAiBmpH,QAAS,kBAAM,EAAK65wB,8BAA8B,kBAApF,SACU3y2B,EAAPwr2B,EAAS,8CAAmD,mDAE/D,eAACh7wB,GAAA,EAAD,CAAU7gH,MAAO,UAAWmpH,QAAS,kBAAM,EAAK65wB,8BAA8B,YAA9E,SACU3y2B,EAAPwr2B,EAAS,sDAA2D,iEAM7E,eAACttwB,GAAA,EAAD,CAASC,MAAOn+F,EAAE,wCAAlB,SACE,gCACE,eAAC44F,EAAA,EAAD,CACEvrC,UAAWF,EAAQo1pB,gBACnBpxnB,UAAW0ixB,GAAmBQ,EAC9Bv7wB,QAAS7kH,KAAKg/3B,oCACd/4xB,MAAM,UACNm+K,UAAW,eAAC,KAAD,CAAYj9J,SAAS,YAChCjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBANhC,SAQI5T,EAAsE,GAA5CzvsB,EAAE,mDAQxC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMn+E,IAAKuE,KAAK87tB,8BAA+B1ipB,UAAWF,EAAQg2pB,uBAAwB5znB,MAAO,CAAE0tP,WAAY,SAAU30O,cAAe,QAApJ,SACE,gBAACx7C,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMI,QAAQ,gBAAgBb,WAAW,SAASuB,KAAK,SAAxF,UACE,eAACmqC,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAACiiI,GAAA,EAAD,IAAoBntU,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBAAzG,SACGpjtB,EAAE,gCAEL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAACiiI,GAAA,EAAD,IAAgBntU,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBAArG,SACGrjtB,EAAE,gCAEL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAAC,KAAD,CAAcj9J,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBAA1H,SACGrjtB,EAAE,gCAEL,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW67mB,EAAyB,eAACr+jB,EAAA,EAAD,CAAkB7lU,KAAK,QAAW,eAAC,KAAD,CAAYorH,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBAAnL,SAC6BrjtB,EAAzBk02B,EAA2B,8BAAmC,qCAElE,eAACt7wB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAAC,KAAD,CAAYj9J,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBAAxH,SACGpjtB,EAAE,kCAEL,eAAC4qG,GAAA,EAAD,CAAS4/P,YAAY,WAAWn9S,UAAWF,EAAQm2pB,mBACnD,eAAC1qnB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAAC,KAAD,CAAUj9J,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQi2pB,qBAAtH,SACGpjtB,EAAE,4BAEL,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASuB,KAAK,SAASpB,UAAWF,EAAQo1pB,gBAAiBhznB,MAAO,CAAEhgC,MAAO,eAA9H,UACE,eAAC,KAAD,CAAU2qB,MAAM,YAChB,eAACuT,EAAA,EAAD,CAAYvT,MAAM,UAAlB,SACGl6E,EAAE,+BAGNksrB,GAAiB,qCACd,eAACtzlB,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAAC,KAAD,CAAgBj9J,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBAA5H,SACGrjtB,EAAE,8BAIT,eAAC44F,EAAA,EAAD,CAAQvrC,UAAWF,EAAQo1pB,gBAAiBlqd,UAAW,eAAC,KAAD,CAAYj9J,SAAS,YAAcjuC,QAAS,CAAEkrM,UAAWlrM,EAAQk2pB,wBAAxH,SACGrjtB,EAAE,+CAKT,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMn+E,IAAKuE,KAAKi+3B,cAA5B,SACE,eAAC,GAAD,CAAYznc,YAAaA,EAAa84b,gBAAiBA,EAAiB6M,eAAgB,SAACvwnB,GAAD,OAAU,EAAKhpJ,SAAS,CAAE4zU,YAAa5qL,cAMnI+xmB,GACA,eAAC,GAAD,CACEA,kBAAmBA,EACnBh5uB,QAAS3kI,KAAK2+3B,0BAIhBpB,IAA8B5f,GAC9B,eAAC3njB,GAAA,EAAD,CACE15O,SAAS,KACTu9B,WAAW,EACXlP,MAAM,EACN+tR,eAAe,EACf80W,qBAAqB,EALvB,SAOE,eAAC,GAAD,CACEmwI,kBAAmB,EACnBh5uB,QAAS3kI,KAAK2+3B,4BAKpB,gBAAC3okB,GAAA,EAAD,CAAQrrN,KAAMsyxB,EAAd,UACE,eAAChnkB,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,SACG1qG,EAAE,wCAEL,gBAACqqS,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACE1e,MAAM,UACNiX,SAAUggxB,EACVr4wB,QAAS,kBAAM,EAAKjC,SAAS,CAAEq6wB,8BAA8B,KAH/D,SAIGlx2B,EAAE,wBAEL,gBAAC44F,EAAA,EAAD,CACE1e,MAAM,UACNiX,SAAUggxB,EACVr4wB,QAAS,WACP,EAAKjC,SAAS,CAAEs6wB,mBAAmB,IACjC,kBAAMrk1B,YAAW,WACf,EAAK0l1B,2BACL,EAAK37wB,SAAS,CAAEq6wB,8BAA8B,EAAOC,mBAAmB,MACvE,SART,UAWGA,GAAqB,eAACt7jB,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQsnzB,sBACrFz02B,EAAE,oCAKT,gBAACiqS,GAAA,EAAD,CAAQrrN,KAAM+yxB,EAAd,UACE,gBAACznkB,GAAA,EAAD,CAAe36M,MAAO,CAAEmb,WAAY,YAApC,UACE,eAACjd,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAEIi6xB,EAAyB,EACrBn02B,EAAE,0DAA2D,CAAE3W,MAAO8q3B,IACtEn02B,EAAE,8DAGV,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,gBAAgBqV,MAAO,CAAEgB,UAAW,GAAtE,SACGvwF,EAAE,yDAGP,gBAACqqS,GAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACE1e,MAAM,UACNiX,SAAUygxB,EACV94wB,QAAS,kBAAM,EAAKjC,SAAS,CAAE86wB,kCAAkC,KAHnE,SAIG3x2B,EAAE,wBAEL,gBAAC44F,EAAA,EAAD,CACE1e,MAAM,UACN4e,QAAS,WACF84wB,IACH,EAAK/6wB,SAAS,CAAE+6wB,6BAA6B,IAC7Chz1B,EAAS,IAAIowL,KAA6B,CACxCusG,UAAW,WACT,EAAK1kN,SAAS,CAAE+6wB,6BAA6B,IAC7C9k1B,YAAW,kBAAM,EAAK+pE,SAAS,CAAE86wB,kCAAkC,MAAU,WARvF,UAcGC,GAA+B,eAAC/7jB,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,MAAMq9E,UAAWF,EAAQsnzB,sBAC/Fz02B,EAAE,+BAKT,eAAC,GAAD,CACE4+E,KAAM3qG,KAAKgnC,MAAM421B,mBACjBj5vB,QAAS3kI,KAAK4+3B,6BAGhB,eAAC,GAAD,CACEj0xB,KAAM3qG,KAAKgnC,MAAM621B,mBACjBl5vB,QAAS3kI,KAAK6+3B,6BAGhB,eAAC,GAAD,CACEl0xB,KAAM3qG,KAAKgnC,MAAM821B,mBACjBn5vB,QAAS3kI,KAAK8+3B,6BAGhB,eAAC,GAAD,CACEn0xB,KAAM3qG,KAAKgnC,MAAM+21B,wBACjBp5vB,QAAS3kI,KAAK++3B,gCACdz3jB,UAAW,kBAAM,EAAK1kN,SAAS,CAAE4zU,YAAa,OAGhD,eAAC,GAAD,CACE7rV,KAAM3qG,KAAKgnC,MAAMg31B,6BACjBr5vB,QAAS3kI,KAAKg/3B,oCACdlP,sBAAuB9v3B,KAAKkqC,MAAM4l1B,+B,GAtzBdrr1B,iBA07BfwwC,qBACbgG,aA/jCa,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,CACJmxH,YAAa,GACb7U,aAAc,IAEhByhlB,cAAe,CACbpjlB,cAAe,IAEjBuuwB,iBAAkB,CAChB3kzB,QAAS,YACTosC,WAAY,QAEds4wB,oBAAqB,CACnBh/wB,YAAatmC,EAAMZ,WAErBomzB,mBAAoB,CAClBzjxB,SAAU,SACVqX,IAAK,EACL0M,OAAQ,EACRhc,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCqM,OAAQ,IAEVy9mB,mBAAoB,CAClB/xnB,SAAU,SACVsX,OAAQ,EACRjY,UAAW,GACX0kB,OAAQ,EACRhc,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpCppC,QAAS,UACT+3C,aAAc,IAEhBo7mB,UAAW,CACTr7mB,UAAW,GACXnM,aAAc,QACdlsC,OAAQ,UACRO,QAAS,WACT+rC,UAAW3sC,EAAM6mD,QAAQ,GACzB9kB,SAAU,YAEZiynB,uBAAwB,CACtBjynB,SAAU,WACV1iG,KAAM,MACN8hH,UAAW,mBACX5F,WAAY,UAEd63mB,gBAAiB,CACfxypB,QAAS,UACTP,OAAQ,UACRw5C,cAAe,OACfv5C,SAAU,GAEZ2zpB,oBAAqB,CACnBjnnB,WAAY,EACZ1G,YAAa,GAEf4tnB,uBAAwB,CACtBlnnB,WAAY,EACZ1G,YAAa,GAEf6tnB,iBAAkB,CAChB99mB,OAAQ,MACRvM,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvCi5C,OAAQ,WAEVolzB,eAAgB,CACdn/wB,YAAatmC,EAAMZ,QAAQ,IAE7BgmzB,YAAa,CACXt7wB,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,GACzB5a,SAAU,UACVkM,aAAcn4C,EAAMZ,QAAQ,OAw/BX,CAAE00C,WAAW,IAChCnQ,mBA1DsB,SAAC73E,EAAOkD,GAC9B,IAAMszD,EAAS6sK,aAAkB,CAAC,qBAAnBA,CAAyCrjO,GAClDw2qB,EAAmB/6c,cAA6Bz7N,GAChD47N,EAAwBP,YAAwC7kK,EAAxC6kK,CAAgDr7N,GACxEixqB,EAAgBjxqB,EAAMpmB,MAAM,CAAC,SAAU,WAAY,aAAarX,SAAS8rB,qCAAoCqtO,cAA0B17N,GACvIm31B,EAASn31B,EAAMpmB,MAAM,CAAC,SAAU,WAAY,aAAarX,SAAS,QAClEs2sB,EAAkB74qB,EAAMpmB,MAAM,CAAC,SAAU,WAAY,WACvD+81B,EAAoB,KACpBljK,EAAgB,KAChBilL,EAAqB,KACnB1nL,EAAqBnwpB,gBAAmC7gB,GAC9D,GAAIgxqB,EAAoB,CACtB,GAAI6H,EAAiB,CACnB,IAAM+gL,EAAY,IAAIphP,gBAAgB/1lB,SAASw0I,QAG7C0/qB,EAF6Bp6mB,cAAiCv8N,GAE1C,KAEA451B,EAAU783B,IAAI,qBAEpC02sB,EAAgBmmL,EAAU783B,IAAI,iBAGhC273B,EAAqBz+nB,YAAWgJ,IAAXhJ,CAAqCj6N,GAE5D,MAAO,CACLm31B,SACA5G,KAAMh2rB,eAA6Bv6J,GACnCu41B,iBAAkBx9nB,cAA6B/6N,GAC/CixqB,cAAev1c,cAA0B17N,GACzC2uL,kBAAmBn4H,EAGnByiyB,uBAAwB/0nB,eAAiClkO,GACzD+wqB,6BAA8Bv1c,cAA2Cx7N,GACzE651B,qBAAqB5oL,MAA0BuF,GAAoBA,EAAiBj7rB,cAAgBqgP,GAAwD,IAA/BA,EAAsB7mQ,OACnJsj4B,eAAgBh1nB,aAAkB,CAAC,kBAAmB,KAAtCA,CAA4CrjO,GAC5Ds41B,6BAA8Br40B,gBAAsCjgB,GACpEqiZ,aAAc3qO,eAAyB13K,GACvCwkO,mBAAoBF,eAA+BtkO,GACnDso1B,gBAAiBjknB,eAA4BrkO,GAC7Cw41B,gBAAiBv0nB,eAA4BjkO,GAC7CkmX,WAAYxvM,eAAuB12K,GACnCgxqB,qBACAgjL,uBAAwBv3nB,cAAmCz8N,GAC3DkxqB,uBAAwBv0c,cAAmC38N,GAC3Dk51B,uBAAwBt8nB,cAAmC58N,GAC3Dm51B,4BAA6Bp8nB,cAAwC/8N,GACrE+f,MAAOD,eAAkB9f,GACzBsgE,IAAKx9C,eAAgB9iB,GACrB220B,oBACA+hB,qBACAjlL,oBA7FuB,SAAC9vqB,GA6B1B,MAAO,CACLA,WACAqi0B,YA9BuC,SAAC,GAAD,IAAGvvvB,EAAH,EAAGA,KAAMo5I,EAAT,EAASA,MAAOn7P,EAAhB,EAAgBA,MAAhB,OAA4BivC,EAASu/B,YAAOuzC,EAAMo5I,EAAOn7P,KA+BhGol4B,QAvB+B,SAAC,GAAoC,IAAlCrjxB,EAAiC,EAAjCA,KAAMo5I,EAA2B,EAA3BA,MAAOj9K,EAAoB,EAApBA,KAAM4wN,EAAc,EAAdA,QAEnD7/P,EADE6/P,GAAuB,IAAZA,EACJlhO,YAAYm0C,EAAMo5I,EAAO2zC,EAAS5wN,GAElCnQ,YAAUg0C,EAAMo5I,EAAOj9K,KAoBlCmnzB,SA/BiC,SAAC,GAAD,IACjCtjxB,EADiC,EACjCA,KACAo5I,EAFiC,EAEjCA,MACA8+E,EAHiC,EAGjCA,OACAC,EAJiC,EAIjCA,OAJiC,OAK7BjrS,EAAS6+B,YAAUi0C,EAAMo5I,EAAO8+E,EAAQC,KA2B5Ci2V,WA1BqC,SAAC,GAAD,IAAGpujB,EAAH,EAAGA,KAAMo5I,EAAT,EAASA,MAAO16P,EAAhB,EAAgBA,MAAhB,OAA4BwuC,EAASg/B,YAAY8zC,EAAMo5I,EAAO16P,KA2BnGij4B,uBAnB6B,SAACC,GAC9B101B,EAAS,IAAI80L,KAA6B,CAAE4/pB,qBAmB5C2B,wBAhB8B,SAAC,GAAD,IAAGz3wB,EAAH,EAAGA,QAASv9E,EAAZ,EAAYA,QAAZ,OAA0BrB,EAAS,IAAIq5kB,KAA8B,CACnGz6f,UACAv9E,cAeAi11B,sBAZ4B,SAACz1nB,GAAD,OAAgC7gO,EAAS,IAAIo1L,KAA4B,CAAEyrC,yBAavG01nB,mBAXyB,SAAC99nB,GAAD,OAA0Bz4N,EAAS,IAAIwwL,KAAwB,CAAEioC,sBAwE/C,KAAM,CAAE75N,YAAY,IACjE4V,YAAgB,gBAChBgwE,KACAQ,cALa16C,CAMbynzB,IC/pCWyE,GAAU181B,QAAW,WAEhC,IAAM281B,EAAS1iwB,eACT67C,EAAQ7oI,sBAAYq5N,gBAClBh/O,EAAM+xB,YAAe,gBAArB/xB,EAER,EAMIwuJ,EAAMh8J,OALR2v1B,EADF,EACEA,SACAht0B,EAFF,EAEEA,UACA/kC,EAHF,EAGEA,MAHF,IAIEo/3B,oBAJF,SAKEpowB,EALF,EAKEA,SAGInnF,GAAWki0B,EAAWx8zB,sBAAY24N,aAAkB6jmB,IAAaj21B,mBAAWA,iBAC5EggsB,EAAgBvmqB,sBAAYgxN,eAC5B2+nB,EAAsB3v1B,sBAAYu5N,gBAClCqknB,EAAkB590B,sBAAY25N,gBAC9B7tK,EAAS9rD,sBAAY24N,aAAkB,CAAC,uBACxC65e,EAAexysB,sBAAY4xN,YAAqC9lK,IAEhE7yD,EAAW2F,wBAEjB7L,aAAgB,WACV821B,IAA2B,IAAXp/3B,GAClBwuC,EAAS,IAAIwwL,KAAwB,CAAEioC,aAAcjnQ,OAEtD,CAACA,IAEJ,IAAM+qI,EAAc,WAClBv8F,EAAS,IAAIgxL,KAAJ,2BACJphD,EAAMh8J,QADF,IAEP40G,SAAU,KACVh3H,OAAQ,MAENo/3B,IAAyC,IAAzB8F,GAClB121B,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,MAI1D,EAAgC3+N,WAAe,MAA/C,mBAAO4sT,EAAP,KAAiB22b,EAAjB,KACM5ie,EAAUZ,aACdkpC,aAAU+C,MACV/C,aAAUW,KAAgB,CACxBU,iBAAkBmiH,QAmChBh4X,EAAUs2C,KAEV8xwB,EAA0B781B,SAAa,MAOvC881B,EAAsBv11B,EAAQprB,MAAM,CAACywU,EAAU,oBAAqB,kBACpEmwiB,EAAiB,OAAGt9I,QAAH,IAAGA,OAAH,EAAGA,EAAcngvB,IAAI8K,OAAO0y3B,IAC7CE,GAA2C,OAAjBD,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBz93B,IAAI,SAAUu7B,6BAC9D,OAACki2B,QAAD,IAACA,OAAD,EAACA,EAAmBz93B,IAAI,4BAAzB,OACEy93B,QADF,IACEA,OADF,EACEA,EAAmBz93B,IAAI,2BAA6B,IAFxB,OAI9By93B,QAJ8B,IAI9BA,OAJ8B,EAI9BA,EAAmBz93B,IAAI,iBAEzB,OAAO,eAAC4sR,GAAA,EAAD,CACLx9J,SAAUoowB,EAAe,KAAOpowB,EAChCxoB,KAAMttG,QAAQ81H,GACdwR,QAASuC,EACThuD,QAAS,CAAE64C,MAAOwpwB,EAAerizB,EAAQi8xB,aAAe,GAAI581B,KAAMgj3B,EAAerizB,EAAQ+sjB,SAAW,IACpG9nO,UAnBqB,WACjBmje,EAAwBx51B,SAC1Bw51B,EAAwBx51B,QAAQotX,eAAe,CAAEzlE,SAAU,SAAUn8E,MAAO,YAkB9EupK,mBAAoB,KACpB/gC,aAAcy/e,EAAe,CAAEx7lB,SAAU,SAAUK,WAAY,SAAY,CAAEL,SAAU,MAAOK,WAAY,QAC1Gn7J,gBAAiBs2vB,EAAe,CAAEx7lB,SAAU,SAAUK,WAAY,SAAY,CAAEL,SAAU,MAAOK,WAAY,QAC7GshmB,kBAAkB,EAClBl0J,qBAAqB,EACrBgtE,sBAAsB,EACtBmnF,qBAAqB,EAZhB,SAcL,gBAAC,KAAD,CACEv8kB,QAASA,EACTgsC,mBAAoBlK,KACpBn0C,UAjEkB,SAAC5rK,GACrB,IAAQ87I,EAAiB97I,EAAjB87I,OAAQ5tF,EAASluD,EAATkuD,KACZ4tF,EAAOhiP,KAAOo0J,EAAKp0J,IACrBjZ,QAAQ08E,MAAR,uBAA8Bu+K,EAAOhiP,GAArC,eAA8Co0J,EAAKp0J,KACnD+mvB,EAAY,MACR9mvB,EAAU33B,SAAS,iBACrBohC,EAAS,IAAIg0L,KAAqB,CAAE/sD,UAAWjwK,OAAOshR,EAAOhiP,IAAKiha,QAASvgc,OAAO0zL,EAAKp0J,IAAKit0B,eAExFqtB,GACF5w1B,EAAS,IAAIwwL,KAAwB,CAAEioC,cAAe,KAExDz4N,EAAS6+B,YAAUugM,IAAiBmkmB,EAASzs1B,KAAK,KAAMwhQ,EAAOhiP,GAAIo0J,EAAKp0J,MAErEs61B,GACHr0vB,MAKEq0vB,GAAgBt4mB,EAAOhiP,KAAOo0J,EAAKp0J,IACrC0J,EAAS,IAAIwwL,KAAwB,CAAEioC,aAAczhQ,OAAOshR,EAAOhiP,OAErE+mvB,EAAY,QA4CZz0e,YAxCoB,SAACpsK,GACvB,IAAQ87I,EAAW97I,EAAX87I,OACR+kgB,EAAY/kgB,EAAOhiP,KAuCjBopP,UAAW,CAAC8kmB,IALd,UAOE,eAAC,KAAD,CACEnonB,MAAOh7N,EAAQhjC,KAAI,SAACw3G,EAAQx9G,GAAT,OAAe6L,OAAO7L,MAAIJ,UAC7C2pV,SAAUoiH,KAFZ,SAIG3ia,EAAQhjC,KAAI,SAACw3G,EAAQx9G,GACpB,GAAIi1sB,IAAkB/2qB,EAAU33B,SAAS,kBAAqBi3G,EAAOz8G,IAAI,kBAAoBy8G,EAAOz8G,IAAI,sBAAwB,CAC9H,GAAI1G,QAAQmjH,EAAOz8G,IAAI,qBAAuBy8G,EAAOz8G,IAAI,gBAAkB,EACzE,OAEF,IAAMi2H,EAAgBxZ,EAAO5/F,MAAM,CAAC,oBAAqB,kBACnDyiP,EAAW,OAAG6gf,QAAH,IAAGA,OAAH,EAAGA,EAAcngvB,IAAI8K,OAAOmrH,IAEvCw6vB,GADmC,OAAXnxnB,QAAW,IAAXA,OAAA,EAAAA,EAAat/P,IAAI,SAAUu7B,6BAEpD,OAAC+jO,QAAD,IAACA,OAAD,EAACA,EAAat/P,IAAI,4BAAnB,OAAgDs/P,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAat/P,IAAI,2BAA6B,IADnD,OAE3Cs/P,QAF2C,IAE3CA,OAF2C,EAE3CA,EAAat/P,IAAI,iBAErB,OAAO,eAAC,GAAD,CAAsBk9B,GAAIpyB,OAAO7L,GAAIk6G,SAAUl6G,IAAM7G,EAArD,SACL,gBAACogH,GAAA,EAAD,CACEW,SAA2B,kBAAV/gH,GAAsB6G,IAAM7G,EAC7Cm/G,MAAO,CACL0tP,WAAYn6V,OAAO7L,KAAOquV,EAAW,SAAW,UAChD31Q,eAAgB,gBAChBspC,gBAAiBhiH,IAAM7G,EAAQ,UAAY,GAC3C+wH,QAAS,EACTjnB,MAAOm7xB,EAAOn8wB,QAAQ4G,KAAK1G,SAE7B1pH,IAAKuH,IAAM7G,EAAQml4B,EAA0B,KAT/C,UAWE,eAACvie,GAAA,EAAD,CAAc3lV,UAAWF,EAAQg9xB,aAAjC,UACyB,IAAtB11vB,EAAOz8G,IAAI,OAAgBs/P,EAAc,eAAC,KAAD,CAAiBzxI,KAAMpR,EAAOz8G,IAAI,mBAAqB,QAAU,MAAOq1E,UAAWF,EAAQu8xB,UAAc,iCAEpJz7uB,GAAa,UAAOw6vB,GAAqB,IAA5B,OAdhB,UAeMh0wB,EAAO5/F,MAAM4/F,EAAOz8G,IAAI,mBAAqB,CAAC,iBAAmBm9B,IAAc,KAGnF,eAAC211B,GAAA,EAAD,CAAQv7wB,MAAO,CAAE4R,QAASlqH,IAAM7G,EAAQ,EAAI,SAnBtB6G,GAyB1B,IAAM+xb,EAAUu6b,EAAgBts2B,SAAQ,SAAAys2B,GAAK,OAAyB,IAArBA,EAAMjv2B,QAAQxd,MAC/D,OAAO,gBAAC,WAAD,WAGHk+B,EAAU33B,SAAS,iBAAmBwrb,EAAU,GAC9C,eAACx4U,GAAA,EAAD,CAEEW,UAAU,EACV5B,MAAO,CACL4R,QAAS,EACTjQ,SAAU,SACVqX,IAAK,EACL/C,OAAQ,GACRyP,OAAQ,EAAI+zT,EACZ/vU,gBAAiBo8wB,EAAOn8wB,QAAQU,OAAOmjB,OAEzCymO,QAASruU,EAAU33B,SAAS,gBAX9B,SAaE,gBAACiwG,EAAA,EAAD,CAAYE,QAAQ,UAAU4B,MAAO,CAAErV,MAAO,OAAQs2B,WAAY,KAAOhY,QAAQ,EAAjF,UAAwFx4F,EAAE,wBAA1F,IAAoHgpa,MAbtH,oBACoBA,EADpB,YAC+B/xb,IAgBnC,eAAC,GAAD,CAAqCi+B,GAAIpyB,OAAO7L,GAAIk6G,UAAWq+wB,GAAgBv43B,IAAM7G,EAArF,SACE,gBAACogH,GAAA,EAAD,CACEgzP,QAASruU,EAAU33B,SAAS,gBAC5B2zG,UAAWq+wB,GAAgBv43B,IAAM7G,EACjCm/G,MAAO,CACL0tP,WAAYn6V,OAAO7L,KAAOquV,EAAW,SAAW,UAChDrsO,gBAAiBu2wB,EAAev43B,IAAMq+3B,EAAsB,UAAY,GAAKr+3B,IAAM7G,EAAQ,UAAY,GACvG+wH,QAAS,EACTjnB,MAAOm7xB,EAAOn8wB,QAAQ4G,KAAK1G,QAC3BzpC,eAAgB,gBAChB61C,OAAQrwF,EAAU33B,SAAS,gBAAkB,GAAK,GAClDi4H,YAAa+5vB,GAAgBv43B,IAAMq+3B,EAAsB,8CAAgD,QAE3G5l4B,IAAKuH,IAAM7G,EAAQml4B,EAA0B,KAZ/C,UAcE,eAACr3wB,GAAA,EAAD,CAASC,MAAO1J,EAAO5/F,MAAMsgB,GAA7B,SACE,eAACs4E,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAMjJ,MAAO,CAAE4M,WAAYhnF,EAAU33B,SAAS,gBAAkB,EAAI,IAA1G,SAAiHi3G,EAAO5/F,MAAMsgB,QAG7Hq61B,GAAgBv43B,IAAM7G,IACvB,eAAC063B,GAAA,EAAD,QApBN,oBAAgC7z3B,MArBNA,QAkDhCquV,EAAWnwT,EAAU33B,SAAS,kBAAoB0usB,EAChD,eAAC,KAAD,CAAa5tb,UAAW,CAAC6kmB,IAA0BlkkB,cAAe,KAAlE,SACE,gBAACzuM,GAAA,EAAD,CAAUjB,MAAO,CAAE0J,gBAAiB,UAAWtpC,eAAgB,iBAA/D,UAEIu8nB,GAAiB,eAACl5S,GAAA,EAAD,CAAc3lV,UAAWF,EAAQg9xB,aAAjC,UACuB,IAArClq0B,EAAQjoC,IAAIstV,GAAUttV,IAAI,OAAgBw93B,GAAuB,eAAC,KAAD,CAAiB3vwB,KAAM5lF,EAAQprB,MAAM,CAACywU,EAAU,oBAAsB,QAAU,MAAOj4Q,UAAWF,EAAQu8xB,YAG/K8rB,GAAmB,UAAOE,GAA2B,IAAlC,OANtB,UAOMz11B,EAAQprB,MAAR,CAAeywU,GAAf,mBAA6BrlT,EAAQprB,MAAM,CAACywU,EAAU,oBAAsB,CAAC,iBAAmBnwT,MACpG,eAAC211B,GAAA,EAAD,SAIJ,eAAC,KAAD,CAAaxsmB,UAAW,CAAC6kmB,IAA0BlkkB,cAAe,KAAlE,SACE,gBAACzuM,GAAA,EAAD,CAAUjB,MAAO,CAAE5/B,eAAgB,gBAAiB61C,OAAQrwF,EAAU33B,SAAS,gBAAkB,GAAK,IAAtG,UACE,eAACiwG,EAAA,EAAD,CAAYE,QAAQ,UAAU6K,QAAQ,EAAMjJ,MAAO,CAAE4M,WAAYqzwB,EAAe,EAAI,IAApF,SAA2Fvv1B,EAAQprB,MAAR,CAAeywU,GAAf,mBAA4BnwT,OACvH,eAAC211B,GAAA,EAAD,SAIJ,a,8BCjQK3jnB,OAlBf,YAAkC,IAAhBziC,EAAe,EAAfA,IAER1tH,EAAYrxE,sBAAYwO,gBACxBlb,EAAW,SAAC58B,GACdA,EAAEg5H,iBACFh5H,EAAEsZ,YAAc+uN,GAQpB,OANAtqM,qBAAU,WAEN,OADAzX,OAAOs6E,iBAAiB,eAAgBhkE,GACjC,WACHtW,OAAOu6E,oBAAoB,eAAgBjkE,MAEhD,IAEC,eAAC,UAAD,CAAmBouO,MAAOrwJ,EAAW1xE,QAASo/L,K,uCCsHhDoue,G,4MACG73qB,MAAQ,CACb461B,UAAW,EACXC,uBAAuB,EACvBC,aAAc,KACdC,2BAA4B,KAC5Bhpd,iBAAkBD,KAClBJ,mBAAmB,EACnBspd,4CAA4C,G,EAsBvChxnB,mBAAqB,WAC1B,MAWI,EAAK9mO,MAVP+31B,EADF,EACEA,uBACAxpd,EAFF,EAEEA,kBACA9tY,EAHF,EAGEA,SACA+wkB,EAJF,EAIEA,mCACAwmR,EALF,EAKEA,2BAEAC,EAPF,EAOEA,uCACAC,EARF,EAQEA,sCACAC,EATF,EASEA,8BACAC,EAVF,EAUEA,gDAEF,EAGI,EAAKt71B,MAFP661B,EADF,EACEA,sBACAG,EAFF,EAEEA,2CAGF,IAAKH,GAAyBI,IAA2BvmR,GAAsCwmR,EAA4B,CACzH,IAAMprqB,EAAmB2hN,GAAqBA,EAAkB92Z,MAAK,SAAC0lG,GAAD,OAAmBA,EAAStjH,IAAI,QAAUk+3B,KAC/Gt31B,EAAS,IAAI86kB,KAAuB,CAAEltmB,KAAMN,eAAK6+M,EAAmB,CAACA,GAAoB,OACzFnsL,EAAS,IAAIszL,KAAwC,CACnD4yG,WAAY/5G,GAAoBA,EAAiB/yN,IAAI,MACrD2hb,YAAa,YAAoB,IAAjB7hU,EAAgB,EAAhBA,UACdl/E,iBAAM,WACJgG,EAASu/B,YACP6/L,IACA,0BACAm1U,aAAsB,CAAEC,kBAAmBt7d,MAE7Cl5E,EAASu/B,YACP6/L,IACA,+CACA,WAKRp/N,EAAS,IAAIk7kB,KAAmB,CAAExte,UAAWy+E,GAAoBA,EAAiB/yN,IAAI,SACtF,EAAK6+G,SAAS,CACZi/wB,uBAAuB,IAGrBG,GAA+CM,IAAoDjl4B,QAAQgl4B,KAAkCH,IAA8BC,IAC/Kx91B,iBAAM,WACJgG,EAASu/B,YACP6/L,IACA,8BACAm1U,aAAsB,CAAEE,sBAAuBgjT,MAEjDz31B,EAASu/B,YACP6/L,IACA,wDACA,OAGJ,EAAKnnJ,SAAS,CACZo/wB,4CAA4C,M,EA4B3CO,oBAAsB,SAACl7wB,GAC5B,MAAqD,EAAKn9E,MAAlD8i0B,EAAR,EAAQA,YAAaw1B,EAArB,EAAqBA,kBAAmB731B,EAAxC,EAAwCA,SACxCA,EAAS,IAAI86kB,KAAuB,CAAEltmB,KAAMN,eAAK,CAACovG,OAClD,IAAMyvG,EAAmBzvG,EAAStjH,IAAI,QAAUy+3B,EAAoBn7wB,EAAWz0G,gBAE3Ey0G,EAAStjH,IAAI,QAAUy+3B,GACzB731B,EAAS,IAAIo7kB,KAA2B,CAAE/qkB,UAAMl/C,KAElDkx2B,EAAY,CACVvvvB,KAAM,QACNo5I,MAAO,mBACPn7P,MAAOo7N,EAAiB/yN,IAAI,OAAS,OAEvC4mC,EAAS,IAAIozL,KAA0B,CAAE8yG,WAAY/5G,EAAiB/yN,IAAI,U,EAGrE0+3B,eAAiB,SAACr63B,GACL,EAAK8hC,MAAf8kJ,MAAR,IACMtzL,EAAQ0M,EAAE4kB,OAAOtxB,MACjBgn4B,EAAMjh4B,MAAMuN,KAAKg3B,SAASg0K,iBAAT,mBAAsCt+M,EAAtC,QACnBgn4B,EAAI7g4B,QACL6g4B,EAAI,GAAmBxte,eAAe,CAAE5hJ,MAAO,WAElD,EAAK1wJ,SAAS,CAAEm/wB,2BAA4B,K,EAGvCY,cAAgB,WACrB,EAAK//wB,SAAS,CAAEm2T,iBAAkBD,Q,EAG7Be,oBAAsB,SAAC+hK,GAC5B,EAAKh5d,SAAS,CAAEm2T,iBAAkB6iK,K,EAG7BjjK,oBAAsB,WAC3B,EAAK/1T,SAAS,CAAE81T,mBAAoB,EAAK1xY,MAAM0xY,qB,uDA3IjD,WACE,MAAgJ14a,KAAKkqC,MAA7IS,EAAR,EAAQA,SAAUkyqB,EAAlB,EAAkBA,gBAAiBwyJ,EAAnC,EAAmCA,sBAAuBjxhB,EAA1D,EAA0DA,eAAgBlc,EAA1E,EAA0EA,WAAY7C,EAAtF,EAAsFA,eAAgB6tF,EAAtG,EAAsGA,WAAtG,EAAkH0vT,0BAElHjyqB,EAAS,IAAIy2B,MAA8B,CAAE42E,SAAU//H,oBAEvD4ksB,IAEKwyJ,EAAsBtz2B,MACzBqiV,IAEG/e,EAAetjU,MAClBmmU,IAGEgrF,GAAcA,EAAWplX,UAC3BolX,EAAWplX,QAAQ8/Q,UAAY,K,kCAkEnC,WACE5nT,KAAKkqC,MAAM041B,mBAAc9m4B,GACzBkE,KAAKkqC,MAAMS,SAAS,IAAIgiD,OAExB++pB,aAAgBD,KAAkB,Q,mCAGpC,SAA6BpooB,EAAqC54F,EAAyBon1B,GAA4B,IAAD,OAC9GgxB,EAAe,CAAC,OAAQ,UAC1Bz/S,GAAe,EAWnB,OAVAhllB,OAAOuL,QAAQ05G,GAAW32G,SAAQ,YAAiB,IAAD,mBAAdpI,EAAc,KAAT2R,EAAS,KAC3C1M,mBAASs53B,EAAcv+3B,KAC1B8+kB,EAAeA,GAAgB,EAAKl5iB,MAAM5lC,KAAS2R,MAIvD7X,OAAOuL,QAAQ8gB,GAAW/d,SAAQ,YAAiB,IAAD,mBAAdpI,EAAc,KAAT2R,EAAS,KAChDmtkB,EAAeA,GAAgB,EAAKp8iB,MAAM1iC,KAAS2R,KAG9CmtkB,I,oBAyCT,WAAiB,IAAD,EACd,EAmBIpjlB,KAAKkqC,MAlBPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAumM,EAHF,EAGEA,YAEAhmK,GALF,EAIE+izB,sBAJF,EAKE/izB,UACA4ukB,EANF,EAMEA,QAEAljf,GARF,EAOEwqvB,kBAPF,EAQExqvB,UACAg1tB,EATF,EASEA,YACAz+zB,EAVF,EAUEA,MACA+sqB,EAXF,EAWEA,kBACA7iS,EAZF,EAYEA,kBACA4pd,EAbF,EAaEA,8BACAvS,EAdF,EAcEA,sBACAgT,EAfF,EAeEA,wBACA36e,EAhBF,EAgBEA,SACA2vT,EAjBF,EAiBEA,gBACArupB,EAlBF,EAkBEA,SAGIyzpB,EAAU,OAAIzzpB,QAAJ,IAAIA,GAAJ,UAAIA,EAAkBziB,aAAtB,aAAG,EAA0Bk2qB,WAE7C,OACE,uBAAK5hmB,MAAO,CAAEotB,YAAa,IAA3B,WACIy/Q,IAAa2vT,IAAoBoF,GAAc,eAAC,GAAD,CAAQzse,IAAK1kN,EAAE,iCAChE,eAACo12B,GAAD,IAEA,eAACtozB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC4/B,EAAA,EAAD,CACEpgC,UAAWF,EAAQo8nB,cACnB57lB,QAAQ,KAFV,SAIGnrE,EAAMoE,OAAOo5oB,KAAOz5d,EAAcvmM,EAAE,2BAK3C,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQkjF,UAA1B,SACE,eAAC,GAAD,CACE9xpB,SAAUA,UAOlB,eAACusB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQ9la,YAA1B,SACE,eAAC,GAAD,CACE55G,SAAUwxvB,EACV1xJ,kBAAmBA,UAO3B,eAACzioB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQljf,SAA1B,SACE,eAAChxB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,gBAAC8B,EAAA,EAAD,WACE,eAAC1N,EAAA,EAAD,CAAYE,QAAQ,KAAK4B,MAAO,CAAE+X,aAAc,IAAhD,SACGtnG,EAAE,6BAEL,gBAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMQ,GAAI,EAAGQ,GAAI,GAAI0gC,MAAO,CAAE2W,WAAY,EAAGC,cAAe,GAAxE,SACE,eAAC8nT,GAAA,EAAD,CACErvD,UAAU,gBACVzgQ,MAAOn+F,EAAE,4BACTkuZ,SAAUluZ,EAAE,+BACZigB,QAASgsG,EACTkiS,iBAAiB,MAGrB,eAACrhW,EAAA,EAAD,CAAMe,MAAM,EAAMQ,GAAI,EAAGQ,GAAI,GAAI0gC,MAAO,CAAE2W,WAAY,EAAGC,cAAe,GAAxE,SACE,eAAC8nT,GAAA,EAAD,CACErvD,UAAU,eACVzgQ,MAAOn+F,EAAE,2BACTkuZ,SAAUluZ,EAAE,8BACZigB,QAASgsG,EACTkiS,iBAAiB,MAGrB,eAACrhW,EAAA,EAAD,CAAMe,MAAM,EAAMQ,GAAI,EAAGQ,GAAI,GAAI0gC,MAAO,CAAE2W,WAAY,EAAGC,cAAe,GAAxE,SACE,eAAC8nT,GAAA,EAAD,CACErvD,UAAU,iBACVzgQ,MAAOn+F,EAAE,6BACTkuZ,SAAUluZ,EAAE,gCACZigB,QAASgsG,EACTkiS,iBAAiB,oBAWjC,eAACrhW,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQr3gB,UAA1B,SACE,eAACk/wB,GAAA,EAAD,CACEnqd,gBAAiB54a,KAAKui4B,oBACtB9pd,kBAAmBA,EACnB4pd,8BAA+BA,EAC/BrqvB,SAAUA,UAMlB,eAACn/D,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQmjF,cAA1B,SACE,eAACr3lB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,gBAAC8B,EAAA,EAAD,WACE,eAAC1N,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,yBAEL,eAACytF,EAAA,EAAD,CAAYE,QAAQ,UAApB,SACG3tF,EAAE,+BAEL,eAAC,QAAD,CACEvd,KAAK,eACL07B,MAAO,CACL0vE,iBAAkB,CAChBC,WAAW,GAEbF,WAAY,CACVwkP,WAAW,EACXC,QAAS,IAEXvxO,YAAY,GAEdvzC,UAAWwgC,iBASvB,eAACjhC,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACGsgjB,EAAQh8Q,WACP,eAACquC,EAAA,EAAD,CAASX,QAASsuO,EAAQvuR,YAA1B,SACE,eAAC,GAAD,CACE8yhB,eAAgBvkQ,EAAQvuR,YACxBmjhB,sBAAuBA,UAOjC,eAACt2wB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo8nB,cAAe57lB,QAAQ,KAAtD,SAA4D3tF,EAAE,qBAG9D,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,eAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQojF,MAA1B,SACE,eAACt3lB,EAAA,EAAD,CACE5tC,UAAWF,EAAQksC,KADrB,SAGE,gBAAC8B,EAAA,EAAD,CAAa5L,MAAO,CAAEsY,UAAW,KAAjC,UACE,eAACpa,EAAA,EAAD,CAAYE,QAAQ,KAApB,SACG3tF,EAAE,8BAEL,eAAC,GAAD,eAMV,eAACi32B,GAAA,EAAD,IAGA,eAAC,KAAD,CACEr4xB,KAAMm4xB,EACNp5vB,OAAO,GACPpjG,SACE,gBAACuyC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SAJb,UAME,eAAC2oP,EAAA,EAAD,IACA,eAAC85H,EAAA,EAAD,CAAmBz6Z,GAAG,oCAAoCy4E,QAAQ,KAAlE,SACG3tF,EAAE,gE,GAhWK0Y,aAgbTwwC,qBACbgG,aAtEa,SAACC,GAAD,mBAAC,aACd1B,UAAW,CACT+3C,OAAQ,OACRj2C,MAAO,OACPC,OAAQ,QAEV6pC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GACR8uC,SAAU,WAEZirlB,cAAe,CACbx5nB,QAAS,GACTP,OAAQ,KAEPm+tB,aAAqBx+tB,IACrB8riB,aAAU9riB,OAsDb/7B,YAAgB,gBAChBwwE,cACA9Q,mBA7BsB,SAAC73E,GAAD,MAAY,CAClC8o1B,sBAAuB3jnB,cAA8BnlO,GACrDqo0B,sBAAuB58M,eAA6BzrnB,GACpDslB,SAAUlD,gBAAyBpiB,GACnCgxG,SAAU69b,eAAyB7uiB,GACnCsrL,YAAavyE,YAAyB,CAAC,eAA1BA,CAA0C/4G,GACvDi71B,uBAAwBlivB,YAAyB,CAAC,oBAA1BA,CAA+C/4G,GACvEyxY,kBAAmBxxG,4BAAkBl9D,IAAlBk9D,CAAmCjgS,EAAO,aAC7Dw71B,kBAAmBlqvB,eAA8BtxG,GACjDkmX,WAAYxvM,eAAuB12K,GACnC871B,wBAAyBltT,eAAoC5uiB,GAC7DmhX,SAAU/lJ,cAA4Bp7N,GACtC8wqB,gBAAiBv1c,cAAuCv7N,GACxD00kB,mCAAoC/8d,eAA+C33G,GACnFq4R,eAAgB+H,eAAiCpgS,GAEjDk71B,2BAA4B9ivB,eAAuCp4G,GACnEm71B,uCAAwCzivB,eAAmD14G,GAC3Fo71B,sCAAuCvivB,gBAA0C74G,GACjFq71B,8BAA+BtivB,YAAyB,CAAC,YAAa,yBAAvCA,CAAiE/4G,GAChGs71B,gDAAiDvivB,YAAyB,CAAC,OAAQ,mDAAlCA,CAAsF/4G,OA5C9G,SAAC2D,GAE1B,MAAO,CACLA,WACAqi0B,YAHuC,SAAC,GAAD,IAAGvvvB,EAAH,EAAGA,KAAMo5I,EAAT,EAASA,MAAOn7P,EAAhB,EAAgBA,MAAhB,OAA4BivC,EAASu/B,YAAOuzC,EAAMo5I,EAAOn7P,KAIhGmhtB,gBAAiB,WACflyqB,EAAS,IAAIy1qB,MAEfhiY,eAAgB,WACdzzS,EAAS,IAAIujtB,OAEf00I,cAAe,SAACtpF,EAAsB2pF,GACpCt41B,EAAS,IAAIg7kB,KAAc,CAAE2zL,kBAAiB2pF,qBAGhD/gkB,WAAY,WACVv3R,EAAS,IAAI+qP,IAAiB,CAAEx1R,KAAM,SAAUmnU,WAAY,QAE9Du1Y,0BAA2B,WACzBjyqB,EAAS,IAAIw1qB,KAAgC,CAAEjgtB,KAAM,6BAkCZ,KAAM,CAAEqpC,YAAY,IAJpD0rC,CAKb4poB,IC/jBaA,Q,sGC4KHrkF,E,4pBClFGvljB,qBACb91B,aAAgB,gBAChB87B,aAnDa,SAACC,GAAD,MAA+B,MAoD5C2jC,kBAAQ,MATiB,SAACl0E,GAC1B,MAAO,CACLA,eAIWsqC,EA9C+C,SAAC/qC,GAC7D,IACEne,EAOEme,EAPFne,EACAwiT,EAMErkS,EANFqkS,WACAC,EAKEtkS,EALFskS,WACAC,EAIEvkS,EAJFukS,aACAy0jB,EAGEh51B,EAHFg51B,YACAhyH,EAEEhnuB,EAFFgnuB,YACAiyH,EACEj51B,EADFi51B,cAGF,OACE,eAACnzmB,EAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,UACE,eAACmwC,EAAA,EAAD,CAASC,MAAOg5wB,GAAen32B,EAAE,8BAAjC,SACE,+BACE,eAAC2uG,EAAA,EAAD,CAAYxd,UAAWqxN,EAAY1pN,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBqqN,KAAzE,SACE,eAAC,KAAD,CAAUpnN,SAAS,gBAIzB,eAAC8C,EAAA,EAAD,CAASC,MAAOgnpB,GAAenlvB,EAAE,mCAAjC,SACE,+BACE,eAAC2uG,EAAA,EAAD,CAAYxd,UAAWsxN,EAAY3pN,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBsqN,KAAzE,SACE,eAAC,KAAD,CAAcrnN,SAAS,gBAI7B,eAAC8C,EAAA,EAAD,CAASC,MAAOi5wB,GAAiBp32B,EAAE,gCAAnC,SACE,+BACE,eAAC2uG,EAAA,EAAD,CAAYxd,UAAWuxN,EAAc5pN,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBuqN,KAA5E,SACE,eAAC,KAAD,CAAYtnN,SAAS,wB,kBC3EpBgc,iBAAQ,kBAAM,4CCAdA,iBAAQ,kBAAM,4C,gICAdA,iBAAQ,kBAAM,4C,6ECsBdigwB,GApBQ,CAEf/k4B,OAFe,SAERipG,EAAUvgD,EAAes80B,GAA0C,OAAD,oIAErErykB,EAAU1pN,EAAIvjG,IANN,uBAORuva,EAAY,IAAIviH,KAAUC,EAASjqQ,GAHkC,SAI/CusX,EAAUC,KAAV,wBAAwC,CAAE8vd,YAJK,YAK/D,QADNt6wB,EAJqE,cAK/D,IAARA,OAAA,EAAAA,EAAUuoM,YAAV,OAAqBvoM,QAArB,IAAqBA,GAArB,UAAqBA,EAAU/tE,YAA/B,iBAAqB,EAAgB9T,eAArC,iBAAqB,EAAyBo81B,eAA9C,aAAqB,EAAkC5vkB,QALgB,yCAMlE3qM,EAAS/tE,KAAK9T,QAAQo81B,QAAQ5vkB,QANoC,gCAQpE,MARoE,yCAW3E1rS,QAAQ7Z,MAAM,8BAAd,MAX2E,kBAYpE,MAZoE,8D,yCCJlEg1H,iBAAQ,kBAAM,oC,8DCAdA,iBAAQ,kBAAM,oCCAdA,iBAAQ,kBAAM,oCCAdA,iBAAQ,kBAAM,oCCAdA,iBAAQ,kBAAM,oC,0DCAdxf,gBAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,0JACD,e,8BCFWq9H,iBAAQ,kBAAM,oC,+BCgEdluD,qBACb91B,aAAgB,gBAChB87B,aAhCa,SAACC,GAAD,MAA+B,MAiC5C2jC,kBAAQ,MATiB,SAACl0E,GAC1B,MAAO,CACLA,eAIWsqC,EA3BiF,SAAC/qC,GAC/F,IACEne,EAEEme,EAFFne,EACAw32B,EACEr51B,EADFq51B,YAGF,OACE,eAACvzmB,EAAA,EAAD,UACE,eAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,SACE,eAACmwC,EAAA,EAAD,CAASC,MAAqBn+F,EAAdw32B,EAAgB,qCAA0C,8CAA1E,SACE,+BACE,eAAC7owB,EAAA,EAAD,CAAYxd,UAAWqmxB,EAAa1+wB,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBq/wB,KAA1E,SACE,eAAC,KAAD,CAAWp8wB,SAAS,uBbyHrBq8wB,GAA4B,sB,SAE7BhpQ,K,oBAAAA,E,iCAAAA,E,oBAAAA,E,mBAAAA,M,KAOZ,IAAMjhmB,GAAsB,CAC1B,YAGIqqS,GAAuB,SAACloU,GAC5B,IAAMK,EAAOL,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAChDwE,EAAOxE,GAASA,EAAM,IAAMA,EAAM,GAAN,OAAoB,EAMtD,MADgB,CAHKK,EAAOs9B,kBAAP,UAA2BssE,KAAQ55E,EAAE,wDAArC,YAAgGsN,iBAAa,QAA7G,QACKE,GAAoBhwB,SAASrJ,IAASA,GAAQylG,KAAQ55E,EAAE,wDAEjCxgB,QAAO,SAACsM,GAAD,OAAOA,KAAG4J,KAAK,aACrD3lB,GAKd+6C,GAAqD,CACzD4yE,MAHmB,GAInB37G,OAAQ,GAmRJ213B,G,kDAqBJ,WAAYv51B,GAAgC,IAAD,uBACzC,cAAMA,IApBDm4R,aAAezxI,oBAAS,SAACpzD,GAC9B,IACExxF,EACE,EAAKhF,MADPgF,QAGF,EAAKqmU,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV0vH,aACAouI,KAAM,IAGR,EAAK+qV,2BACJ,KAIwC,EAFnC+sS,oBAA4C,IAAI7k4B,IAEb,EA4IpCmyQ,mBAAqB,SAAC3yJ,EAAW4yJ,GAAe,IAAD,QAiF5CypI,EAhFR,EAuBI,EAAKxwW,MAtBPy51B,EADF,EACEA,iBACAC,EAFF,EAEEA,iBACAC,EAHF,EAGEA,eACAC,EAJF,EAIEA,8BACAC,EALF,EAKEA,iBACAC,EANF,EAMEA,qBACAC,EAPF,EAOEA,qBACA9pkB,EARF,EAQEA,uBACA+pkB,EATF,EASEA,uBACAC,EAVF,EAUEA,qBACAC,EAXF,EAWEA,wBACAC,EAZF,EAYEA,8BACAC,EAbF,EAaEA,wBACAC,EAdF,EAcEA,uBACA3nkB,EAfF,EAeEA,YACA/vQ,EAhBF,EAgBEA,cACAliB,EAjBF,EAiBEA,SACA651B,EAlBF,EAkBEA,0BACAC,EAnBF,EAmBEA,0BACAhuS,EApBF,EAoBEA,eACAt7e,EArBF,EAqBEA,WACAupxB,EAtBF,EAsBEA,qBAEF,EAMI,EAAK191B,MALPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KACAimD,EAHF,EAGEA,SACAr0L,EAJF,EAIEA,WACAjU,EALF,EAKEA,QAKF,GACGsoM,IAAa2oU,EAAoCkwP,WAAjD,UAA6DrswB,EAAUslxB,wBAAvE,aAA6D,EAA4B5n4B,OAAkC,IAA1B4n4B,EAAiB5n4B,MAAciwC,EAAQl+B,SAAWqsT,GAA0B97M,EAAU87M,wBACvLtI,IAAa2oU,EAAoCmqQ,WAAjD,UAA6DtmxB,EAAUulxB,wBAAvE,aAA6D,EAA4B7n4B,OAAkC,IAA1B6n4B,EAAiB7n4B,MAAciwC,EAAQl+B,SAAWo23B,GAA0B7lxB,EAAU6lxB,wBACvLrykB,IAAa2oU,EAAoCC,UAAjD,UAA4Dp8gB,EAAUwlxB,sBAAtE,aAA4D,EAA0B9n4B,OAAgC,IAAxB8n4B,EAAe9n4B,MAAciwC,EAAQl+B,SAAWq23B,GAAwB9lxB,EAAU8lxB,sBAChLtykB,IAAa2oU,EAAoCoqQ,kBAAjD,UAAoEvmxB,EAAUslxB,wBAA9E,aAAoE,EAA4B5n4B,OAAkC,IAA1B4n4B,EAAiB5n4B,MAAciwC,EAAQl+B,SAAWqsT,GAA0B97M,EAAU87M,uBAC/L,CACA,IAAM46H,EAAUnpL,EAAO,EACjBopL,EAAYhpZ,EAAQl+B,OAASk+B,EAAQy9E,MAC3C,EAAK4oP,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQknb,IAEVppL,KAAMmpL,KAGN12U,EAAUslxB,mBAAqBA,GACjC,EAAKkB,wBAAwBlB,IAI5BK,IAAyBtzjB,MAAkBryN,EAAU2lxB,uBAAyBtzjB,MAC9EuzjB,IAAyBvzjB,MAAkBryN,EAAU4lxB,uBAAyBvzjB,QAE/E,EAAK9tN,SAAS,CAAEkixB,iBAAahp4B,EAAWkxW,uBAAmBlxW,IAC3D,EAAKu2W,uBAAuB,MAEL,IAArB0xhB,IAA6D,IAA/B1lxB,EAAU0lxB,mBACA,IAA1CD,EAA8B1u3B,QAC1B,EAAKwtG,SAAS,CAAEkxiB,iBAAiB,IACjC,EAAKlxiB,SAAS,CAAEmixB,uBAAuB,KAGzC1mxB,EAAUu+M,cAAgBA,GAAeA,IAC3C,EAAK51R,MAAMg+1B,gBAAgB513B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,SAAUH,MAAO,+BAAgCwuO,QAAS,sCAAuCl0L,SAAS,EAAMi3U,UAAU,IACzK,EAAKzvS,SAAS,CAAEoixB,gBAAiB,EAAKh+1B,MAAMg+1B,mBAG1C3mxB,EAAUomxB,4BAA8BA,GAC1C,EAAKpyhB,uBAAuB,IAI1BphG,EAAUzzI,aAAeA,GAAcyzI,EAAU1nJ,UAAYA,MAExDiU,GAAcA,EAAW37H,QAAc0nH,GAAWA,EAAO,IAAQ1nH,UAElEgwT,IAAa2oU,EAAoCkwP,SACnDhwe,EAAc,CACZz8M,OAAQzgE,GAAcA,EAAW37H,OAAS27H,EAAa,KACvDouI,KAAMimD,EACN50K,aAAcmnvB,GAA2BA,EAAwBxj3B,MAAM,CAAC,QAAS,KAAM,SAAU,OAAS,KAC1Gw2G,SAAUgtwB,GAA2BA,EAAwBxj3B,MAAM,CAAC,eAAgB,KAAM,SAAU,OAAS,KAC7Gqk3B,iBAAkBb,GAA2BA,EAAwBxj3B,MAAM,CAAC,sCAA6B,OAAQ,OAAS,KAC1Hsk3B,eAAgBd,GAA2BA,EAAwBxj3B,MAAM,CAAC,sCAA6B,OAAQ,OAAS,KACxH8uwB,iBAAkB00G,GAA2BA,EAAwBxj3B,MAAM,CAAC,mCAA0B,OAAQ,OAAS,KACvH+uwB,eAAgBy0G,GAA2BA,EAAwBxj3B,MAAM,CAAC,mCAA0B,OAAQ,OAAS,KACrHgqT,UAAWw5jB,GAA2BA,EAAwBxj3B,MAAM,CAAC,2CAAwB,KAAM,SAAU,OAAS,MAE/GixS,IAAa2oU,EAAoCmqQ,SAC1Djqf,EAAc,CACZz8M,OAAQzgE,GAAcA,EAAW37H,OAAS27H,EAAa,KACvDouI,KAAMimD,EACN50K,aAAcqnvB,GAA2BA,EAAwB1j3B,MAAM,CAAC,iBAAkB,KAAM,SAAU,OAAS,KACnHqk3B,iBAAkBX,GAA2BA,EAAwB1j3B,MAAM,CAAC,eAAgB,OAAQ,OAAS,KAC7Gsk3B,eAAgBZ,GAA2BA,EAAwB1j3B,MAAM,CAAC,eAAgB,OAAQ,OAAS,KAC3G8uwB,iBAAkB40G,GAA2BA,EAAwB1j3B,MAAM,CAAC,cAAe,OAAQ,OAAS,KAC5G+uwB,eAAgB20G,GAA2BA,EAAwB1j3B,MAAM,CAAC,cAAe,OAAQ,OAAS,KAC1GgqT,UAAW05jB,GAA2BA,EAAwB1j3B,MAAM,CAAC,aAAc,KAAM,SAAU,OAAS,MAErGixS,IAAa2oU,EAAoCC,QAC1D//O,EAAc,CACZz8M,OAAQzgE,GAAcA,EAAW37H,OAAS27H,EAAa,KACvDouI,KAAMimD,EACNszkB,kBAAkBZ,GAAkF,OAAvDA,EAAuB3j3B,MAAM,CAAC,SAAU,MAAO,KAAsE,OAAtD2j3B,EAAuB3j3B,MAAM,CAAC,SAAU,KAAM,IAKtJ,KAJA,CACuD,OAAvD2j3B,EAAuB3j3B,MAAM,CAAC,SAAU,MAAO,IAAe,OAAS,KACjB,OAAtD2j3B,EAAuB3j3B,MAAM,CAAC,SAAU,KAAM,IAAe,eAAiB,MAGlFq8H,aAAcsnvB,GAA0BA,EAAuB3j3B,MAAM,CAAC,QAAS,KAAM,SAAU,OAAS,KACxGw2G,SAAUmtwB,GAA0BA,EAAuB3j3B,MAAM,CAAC,eAAgB,KAAM,SAAU,OAAS,KAC3Gqk3B,iBAAkBV,GAA0BA,EAAuB3j3B,MAAM,CAAC,eAAgB,OAAQ,OAAS,KAC3Gsk3B,eAAgBX,GAA0BA,EAAuB3j3B,MAAM,CAAC,eAAgB,OAAQ,OAAS,KACzG8uwB,iBAAkB60G,GAA0BA,EAAuB3j3B,MAAM,CAAC,YAAa,OAAQ,OAAS,KACxG+uwB,eAAgB40G,GAA0BA,EAAuB3j3B,MAAM,CAAC,YAAa,OAAQ,OAAS,KACtGgqT,UAAW25jB,GAA0BA,EAAuB3j3B,MAAM,CAAC,2CAAwB,KAAM,SAAU,OAAS,MAE7GixS,IAAa2oU,EAAoCoqQ,kBAC1Dlqf,EAAc,CACZz8M,OAAQzgE,GAAcA,EAAW37H,OAAS27H,EAAa,KACvDouI,KAAMimD,EACN50K,aAAconvB,GAAiCA,EAA8Bzj3B,MAAM,CAAC,QAAS,KAAM,SAAU,OAAS,KACtHw2G,SAAUitwB,GAAiCA,EAA8Bzj3B,MAAM,CAAC,eAAgB,KAAM,SAAU,OAAS,OAG7H6lF,KAAmB9rE,mBAAgBq+vB,YAAansuB,EAAc6tV,MAG9Dr8R,EAAUmmxB,4BAA8BA,GAA6BA,IACvE,EAAK5hxB,SAAS,CACZwixB,mBAAmB,EACnBpohB,iBAAkB,GAClBqohB,iBAAkB,GAClBvd,aAAa,IAEfn90B,EAAS,IAAI8lD,MAA8C,KAEzDgmgB,KACE,OAACt7e,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,oBACnB4mC,EAASu/B,aAAOs5zB,GAA2B,iBAAkB/sS,MAE3D,OAACt7e,QAAD,IAACA,OAAD,EAACA,EAAYp3G,IAAI,eAAjB,OAAgC2g4B,QAAhC,IAAgCA,OAAhC,EAAgCA,EAAsB3g4B,IAAI,cAC5D4mC,EAASu/B,aAAOs5zB,GAA2B,WAA5B,OAAwCkB,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAsB3g4B,IAAI,gBAhS5C,EAqSpCmtQ,qBAAuB,WAC5B,MAA4B,EAAKhnO,MAAzBS,EAAR,EAAQA,SAAU+6c,EAAlB,EAAkBA,MACdA,EAAMn8e,SAASyslB,8BACjBrrjB,EAAS6/B,aAAQwrhB,8BAEftwG,EAAMn8e,SAAS0slB,qCACjBtrjB,EAAS6/B,aAAQyrhB,qCAEfvwG,EAAMn8e,SAASm0zB,8BACjB/yxB,EAAS6/B,aAAQkzvB,8BAEfh4U,EAAMn8e,SAASq0zB,6BACjBjzxB,EAAS6/B,aAAQozvB,6BAEfl4U,EAAMn8e,SAASi63B,KACjB741B,EAAS6/B,aAAQg5zB,MApTsB,EAwTpCttc,mBAAqB,WAC1B,EAAKtzU,UAAS,SAAAquJ,GAAS,MAAK,CAC1BklL,kBAAmBllL,EAAUklL,sBA1TU,EA8TpC9jF,uBAAyB,SAACrnV,GAC/B,MAQI,EAAKkf,MAPPS,EADF,EACEA,SACAqvR,EAFF,EAEEA,mBACAsrkB,EAHF,EAGEA,mBACAC,EAJF,EAIEA,iBACAd,EALF,EAKEA,0BACAhuS,EANF,EAMEA,eACA2tS,EAPF,EAOEA,wBAEF,EAMI,EAAKp91B,MALEqvZ,EADX,EACErqZ,QACYsqZ,EAFd,EAEE94T,WACS+4T,EAHX,EAGEhtU,QACMitU,EAJR,EAIE5qL,KACAimD,EALF,EAKEA,SAGA7lR,EAIEhhB,EAJFghB,QACAwxF,EAGExyG,EAHFwyG,WACSm5T,EAEP3ra,EAFFu+F,QACMwrU,EACJ/pa,EADF4gP,KAGI8qL,OAA+B56b,IAAf0hI,EAA2BA,EAAa84T,EACxDG,EAAazqZ,GAAWqqZ,GAE1BK,GAAkB7kI,IAAa2oU,EAAoCkwP,UAAY74jB,IAAa2oU,EAAoCoqQ,uBAM3Hnuc,EAAWx+P,QALlBw+P,EAAWx+P,QAAU,CACnBy7B,oBAAqB,EACrBx6F,cAAe,GAKnB,EAAKtW,SACH,CACE52E,QAASyqZ,EACTj5T,WAAYk5T,EACZntU,aAAwBztH,IAAf66b,EAA2BA,EAAaJ,EACjD3qL,UAAkB9vQ,IAAZi5b,EAAwBA,EAAUyB,IACvC,WACD,MAII,EAAKrC,mBAHPuvT,EADF,EACEA,mBACA5lb,EAFF,EAEEA,cACAC,EAHF,EAGEA,oBAEElM,IAAa2oU,EAAoCkwP,SACnD1wjB,EAAmB,CACjBhuR,QAAQ,2BACH,EAAKhF,MAAMgF,SADT,IAEL4mL,iBAAkB6xqB,EAA4B,QAAU,aAE1Dl7wB,QAASm6nB,EACT5lb,gBACA24R,iBACAnvR,UAAY,EAAKtgS,MAAMmvZ,iBAA0B,WAAO,IAAD,IAErDxrZ,EAAS,IAAI6yC,OACb7yC,EAAS,IAAIyyC,MAA+B,CAAEk6gB,gBAAe,OAAE8sS,QAAF,IAAEA,GAAF,UAAEA,EAAyBxj3B,MAAM,CAAC,QAAS,cAA3C,iBAAE,EAAiD5X,KAAI,SAACmwH,GAAD,OAAWA,EAAMl4F,aAAxE,aAAE,EAA2Exf,KAAK,SAHvG,OAMnCowS,IAAa2oU,EAAoCoqQ,gBAC1D5qkB,EAAmB,CACjBhuR,QAAQ,2BACH,EAAKhF,MAAMgF,SADT,IAEL4mL,iBAAkB6xqB,EAA4B,QAAU,aAE1Dl7wB,QAASm6nB,EACT5lb,eAAe,EACfC,oBAAmB,OAAEA,QAAF,IAAEA,IAAuB,KAC5C04R,mBAOO5kS,IAAa2oU,EAAoCmqQ,SAC1DW,EAAmB,CACjBt51B,QAAS,EAAKhF,MAAMgF,QACpBu9E,QAASm6nB,IAGX6hJ,EAAiB,CACfv51B,QAAS,EAAKhF,MAAMgF,QACpBu9E,QAASm6nB,QApZwB,EA2ZpC9sT,iBAAmB,SAACxub,EAAG2sb,GAC5B,IACE/oZ,EACE,EAAKhF,MADPgF,QAGF,EAAKqmU,uBAAuB,CAAErmU,QAAQ,2BAAMA,GAAP,IAAgBl+B,OAAQinb,EAAU/oZ,EAAQy9E,QAASmiJ,KAAMmpL,KAharD,EAmapC8B,wBAA0B,SAACzub,GAChC,MAGI,EAAK4+B,MAFPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KAGIkrL,EAASn1b,OAAOyG,EAAE4kB,OAAOtxB,OACzBq7b,EAAeh6b,KAAKqjB,MAAQwrP,EAAQ5/N,EAAQy9E,MAAS,GAAKqtU,GAAU,EAEpEL,EAAU,2BACXzqZ,GADW,IAEdy9E,MAAOqtU,EACPhpb,OAAQgpb,EAASC,IAGnB,EAAK1kF,uBAAuB,CAAErmU,QAASyqZ,EAAY7qL,KAAMmrL,KAlbhB,EAqbpCmiW,gBAAkB,SAAC/xpB,EAA8Bt3H,GACtD,MAII,EAAKm3B,MAHP6qR,EADF,EACEA,SACAr0L,EAFF,EAEEA,WACAjU,EAHF,EAGEA,QAGF,GAAIsoM,IAAahiT,EAAU,CAAC,IAAD,EACrBgiT,IAAa2oU,EAAoCkwP,UAAY74jB,IAAa2oU,EAAoCoqQ,gBAChH,EAAK161B,MAAMS,SAAS,IAAI0J,KAA6B,CACnDpT,GAAIkmS,KACJx8N,MAAM,KAECknN,IAAa2oU,EAAoCmqQ,UAC1D,EAAKz61B,MAAMS,SAAS,IAAI0J,KAA6B,CACnDpT,GAAIurU,KACJ7hQ,MAAM,KAIV,IAAMshF,GAAO,GACX8sP,iBAAkB,EAAK/xY,MAAL,UAAcn3B,EAAd,YAClB05G,QAAS,EAAKviF,MAAL,UAAcn3B,EAAd,YACT2tH,WAAY,EAAKx2F,MAAL,UAAcn3B,EAAd,gBAHD,wBAIPgiT,EAJO,WAIatoM,GAJb,wBAKPsoM,EALO,cAKgBr0L,GALhB,GAQb,EAAK5a,SAAL,aACEivM,SAAUhiT,EACVsmb,kBAAkB,EAClBnpF,kBAAmB,KACnB83hB,YAAa,MACV74sB,IACF,kBAAM,EAAKomL,uBAAuB,CACnCzmG,KAAM,EACN5/N,QAAS6K,UAzd4B,EA8dpCklY,WAAa,WAClB,IAAQlqH,EAAa,EAAK7qR,MAAlB6qR,SAENhlQ,EACE,EAAK3iB,MADP2iB,cAEEglQ,IAAa2oU,EAAoCkwP,SACnD,EAAK9nwB,SAAS,CAAEoqP,kBAAmB,OAAQ,kBAAM,EAAKgzZ,WAAW74b,KAAmBiJ,SAC3Eve,IAAa2oU,EAAoCmqQ,SAC1D,EAAK/hxB,SAAS,CAAEkixB,YAAa,OAAQ,kBAAM,EAAK9kI,WAAWxzZ,KAAmBC,UAE9E,EAAKviU,MAAMS,SAASv+B,aAAK,GAAD,OAAI4pB,qBAAJ,YAAyBs5lB,KAAwB6J,UAEzE1yhB,KAAmB9rE,mBAAgB6q2B,wBAAyB340B,EAAc,CAAE440B,0BAA2B,8DA1ehE,EA8epCppd,sBAAwB,SAACnxZ,GAC9B,EAAK03F,SAAS,CACZ2jV,SAAUr7a,EACVw62B,2BAA2B,KAjfY,EA6fpCC,oBAAsB,WAC3B,OAAQ,EAAK3+1B,MAAMu/Z,UACjB,IAAK,MACH,EAAKr8Z,MAAMomF,QAAQ13C,QACjB,EAAK1uC,MAAMusjB,eACTjhkB,sCAEAG,qBAEJ,MACF,IAAK,SACH,EAAKuU,MAAMomF,QAAQ13C,QACjB,EAAK1uC,MAAMusjB,eACThhkB,sCAEAC,wBAKR,EAAKktF,SAAS,CAAE8ixB,2BAA2B,KAjhBF,EAohBpCE,oBAAsB,WAKvB,EAAK171B,MAFPS,SA0CA,EAAKi4E,SAAS,CACZwixB,mBAAmB,KAlkBkB,EAukBpCS,mBAAqB,WAC1B,EAAKjjxB,SAAS,CACZwixB,mBAAmB,KAzkBoB,EA6kBpCU,YAAc,WAAO,IAAD,EACzB,EAAwE,EAAK571B,MAArEixE,EAAR,EAAQA,WAAYxwE,EAApB,EAAoBA,SAAUo71B,EAA9B,EAA8BA,kBAAmBC,EAAjD,EAAiDA,mBACjD,EAAoC,EAAKh/1B,MAAjCurV,EAAR,EAAQA,WAAY49O,EAApB,EAAoBA,YAEd18Y,EAAI,OAAGt4G,QAAH,IAAGA,GAAH,UAAGA,EAAYp3G,IAAI,qBAAnB,aAAG,EAAgC,GAEvC7D,EAAQ6l4B,EAAqB,SAAcC,GAAsB,MAEnEzzgB,EAAa49O,EAAYtumB,SACR,IAAf0wX,GAAoB9+J,GAAQvzN,EAC9ByqC,EAAS,IAAIolD,KAAyB,CAAE7vF,UAExC,EAAK0iH,SAAS,CAAE2vQ,WAAYA,EAAa,MAzlBJ,EA+lBpC0zgB,YAAc,WACnB,EAAKrjxB,SAAS,CAAE2vQ,WAAY,EAAKvrV,MAAMurV,WAAa,KAhmBX,EAmmBpC2zgB,cAAgB,WACrB,MAA8C,EAAKh81B,MAA3CS,EAAR,EAAQA,SAAU2lF,EAAlB,EAAkBA,QAASmme,EAA3B,EAA2BA,eAC3Bnme,EAAQ13C,QAAQ69gB,EAAiBlhkB,+BAA8BP,kBAC/D,EAAK4tF,SAAS,CACZ2vQ,WAAY,EACZvV,iBAAkB,GAClBqohB,iBAAkB,GAClBvd,aAAa,EACbsd,mBAAmB,IAErBz61B,EAASu/B,aAAOs5zB,GAA2B,aAAc,QA7mBhB,EAgnBpC2C,gBAAkB,SAACC,GAAD,OAA6B,SAACj/vB,EAA4CnL,GACjG,IAAQqqwB,EAA0B,EAAKn81B,MAA/Bm81B,sBACR,EAA4D,EAAKr/1B,MAAzDg2U,EAAR,EAAQA,iBAAkB8qgB,EAA1B,EAA0BA,YAAaud,EAAvC,EAAuCA,iBACjCpk2B,EAAKml2B,EAAmBri4B,IAAI,MAE9B+j3B,EACF,EAAKllwB,UAAS,SAAAquJ,GAAS,MAAK,CAC1Bo0nB,iBAAmBrpwB,EAAD,YAAoHi1I,EAAUo0nB,iBAAiB953B,QAAO,SAAA+iS,GAAG,OAAIA,IAAQrtQ,MAAzJok2B,EAAiBxj4B,OAAS,IAAOwk4B,EAAwB,GAA1D,sBAAmEp1nB,EAAUo0nB,kBAA7E,CAA+Fpk2B,IAC5H6m1B,YAAcud,EAAiBxj4B,OAAS,IAAOwk4B,MAGjD,EAAKzjxB,UAAS,SAAAquJ,GAAS,MAAK,CAC1B+rG,iBAAkBhhP,EAAWghP,EAAiBn7W,OAAS,IAAOwk4B,EAAwB,GAA1D,sBAAmEp1nB,EAAU+rG,kBAA7E,CAA+F/7U,IAAlG,YAA4GgwO,EAAU+rG,iBAAiBzxW,QAAO,SAAA+iS,GAAG,OAAIA,IAAQrtQ,MACtL6m1B,YAAc9qgB,EAAiBn7W,OAAS,IAAOwk4B,QA7nBV,EAkoBpCC,mBAAqB,SAACn/vB,EAA4CnL,GACvE,EAAKpZ,SAAS,CAAEklwB,YAAa9rvB,EAASghP,iBAAkB,GAAIqohB,iBAAkB,MAnoBrC,EAsoBpCkB,YAAc,YAEnB571B,EADqB,EAAKT,MAAlBS,UACCu/B,aAAOs5zB,GAA2B,aAAc,QAxoBhB,EA2oBpC3oN,WAAa,WAClB,MAA8C,EAAK3woB,MAA3CS,EAAR,EAAQA,SAAU2lF,EAAlB,EAAkBA,QAASmme,EAA3B,EAA2BA,eAC3B9rjB,EAAS,IAAIwlD,MAAoC,CAC/C4wP,QAAS,EACTt7O,OAAQ,UACR8oF,QAAS,QAEX,EAAK3rE,SAAS,CACZklwB,aAAa,EACbv1f,WAAY,EACZvV,iBAAkB,GAClBqohB,iBAAkB,GAClBD,mBAAmB,IAErB90wB,EAAQlkH,KAAKqqlB,EAAiBlhkB,+BAA8BP,kBAC5D,EAAKq9U,uBAAuB,KA1pBa,EA6pBpCm0hB,QAAU,WAAO,IAAD,EACrB,EAAiC,EAAKt81B,MAA9BixE,EAAR,EAAQA,WAAYxwE,EAApB,EAAoBA,SACd8oL,EAAI,OAAGt4G,QAAH,IAAGA,GAAH,UAAGA,EAAYp3G,IAAI,qBAAnB,aAAG,EAAgC,GACvCysmB,EAAS,OAAGr1f,QAAH,IAAGA,OAAH,EAAGA,EAAYp3G,IAAI,aAE5B7D,EADoB,EAAKgqC,MAAMuf,SAAS0C,WAAaz2B,wBACxB,SAE/B+9L,GAAQvzN,GAAQswmB,GAAaA,EAAU3umB,QACzC8oC,EAAS,IAAIolD,KAAyB,CAAE7vF,OAAMswmB,gBArqBP,EAyqBpC7Z,uBAAyB,WAC9B,EAAK/ze,SAAS,CACZklwB,aAAa,EACb9qgB,iBAAkB,GAClBqohB,iBAAkB,MA7qBqB,EAkrBpCoB,UAA0B,WAAO,IAAD,YACrC,EA8BI,EAAKv81B,MA7BPgvC,EADF,EACEA,QACAgC,EAFF,EAEEA,MAFF,IAGEyozB,wBAHF,MAGqB1r3B,iBAHrB,EAIEou3B,EAJF,EAIEA,sBACAlskB,EALF,EAKEA,uBACAuskB,EANF,EAMEA,4BANF,IAOE9C,wBAPF,MAOqB3r3B,iBAPrB,EAQEis3B,EARF,EAQEA,uBACAyC,EATF,EASEA,4BATF,IAUE9C,sBAVF,MAUmB5r3B,iBAVnB,EAWEks3B,EAXF,EAWEA,qBACAyC,EAZF,EAYEA,0BACA/skB,EAbF,EAaEA,YACA9tS,EAdF,EAcEA,EACA4e,EAfF,EAeEA,SACAq21B,EAhBF,EAgBEA,wBAIAn00B,GApBF,EAiBEs8Q,kBAjBF,EAkBE09jB,kBAlBF,EAmBEC,iBAnBF,EAoBEj60B,eACAsuD,GArBF,EAqBEA,WACA4rxB,GAtBF,EAsBEA,oBACAC,GAvBF,EAuBEA,uBACAhB,GAxBF,EAwBEA,mBACAD,GAzBF,EAyBEA,kBACAtB,GA1BF,EA0BEA,0BACAhuS,GA3BF,EA2BEA,eACAwwS,GA5BF,EA4BEA,mBACAprvB,GA7BF,EA6BEA,WAEF,GASI,EAAK70G,MARPgF,GADF,GACEA,QACA4/N,GAFF,GAEEA,KACAmtK,GAHF,GAGEA,iBACAlnH,GAJF,GAIEA,SACA0gE,GALF,GAKEA,WACAvV,GANF,GAMEA,iBACAqohB,GAPF,GAOEA,iBACAvd,GARF,GAQEA,YAGIof,GAAsB,CAC1B5shB,kBAAmBvuV,EAAE,+CACrBwuV,mBAAoBxuV,EAAE,6CACtB4uV,aAAc5uV,EAAE,0CAChB6uV,kBAAmB7uV,EAAE,6CAGjBo72B,GAA4B,CAChCxshB,aAAc5uV,EAAE,0CAChB6uV,kBAAmB7uV,EAAE,6CAGjBq72B,GAAsB,CAC1B9shB,kBAAmBvuV,EAAE,+CACrBwuV,mBAAoBxuV,EAAE,6CACtB4uV,aAAc5uV,EAAE,0CAChB6uV,kBAAmB7uV,EAAE,6CAGjBs72B,GAAqB,CACzB/shB,kBAAmBvuV,EAAE,8CACrBwuV,mBAAoBxuV,EAAE,4CACtB4uV,aAAc5uV,EAAE,yCAChB6uV,kBAAmB7uV,EAAE,4CAGjBu72B,GAAcz1kB,KAAa2oU,EAAoCkwP,UAAY74jB,KAAa2oU,EAAoCoqQ,gBAC9H,CACAng4B,WAAY,EAAK8i4B,oBAAoB5D,GACrC6D,UAAWrtkB,EACX/kT,MAAOqv3B,GACH4B,EACAK,EACE161B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EACjCz9E,GAAQl+B,QAAR,UAAiB,EAAKy53B,oBAAoB5D,UAA1C,aAAiB,EAA4C5n4B,OAEnE81T,KAAa2oU,EAAoCmqQ,SAC/C,CACAlg4B,WAAYm/3B,EACZ4D,UAAWtD,EACX9u3B,MAAOux3B,EAA8B361B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EAAIz9E,GAAQl+B,QAAR,OAAiB813B,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAkB7n4B,OAE7G,CACA0I,WAAYo/3B,EACZ2D,UAAWrD,EACX/u3B,MAAOwx3B,EAA4B561B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EAAIz9E,GAAQl+B,QAAR,OAAiB+13B,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAgB9n4B,OAGzG03N,GAAI,OAAGt4G,SAAH,IAAGA,IAAH,UAAGA,GAAYp3G,IAAI,qBAAnB,aAAG,EAAgC,GAC5B0hG,IAAoBuhyB,GAA7BjmjB,QAA6BimjB,GAApBvhyB,QAAQ8oF,GAAYy4sB,GAAZz4sB,QAEzB9pJ,aAAgB,WACd,EAAKyF,MAAMS,SAAS,IAAIwlD,MAAoC,CAC1D4wP,QAAS,EACTt7O,OAAQ,aAEV,EAAKmd,SAAS,CACZ2vQ,WAAY,EACZvV,iBAAkB,GAClBqohB,iBAAkB,GAClBl1R,YAAa,CACX61R,GAAqB,CAAEtq4B,MAAO,WAAYwlC,UAAW,mCAAsC,CAAExlC,MAAO,SAAUwlC,UAAW,iCACzH,CAAExlC,MAAO,SAAUwlC,UAAW,iCAC9B,CAAExlC,MAAO,UAAWwlC,UAAW,uCAGlC,CAAC,EAAKgJ,MAAMuf,SAAS0C,WAExB,IAAMs8X,GAA2B,WAAXhjV,IAAgD,eAAlB,OAAP8oF,SAAO,IAAPA,QAAA,EAAAA,GAASxqL,IAAI,WAApC,OAA+DwqL,SAA/D,IAA+DA,IAA/D,UAA+DA,GAASxqL,IAAI,kBAA5E,iBAA+D,EAAyBq1C,qBAAxF,aAA+D,EAAwC7vC,SAAS,cAChIm/a,GAAwB,WAAXjjV,IAAgD,YAAlB,OAAP8oF,SAAO,IAAPA,QAAA,EAAAA,GAASxqL,IAAI,WAApC,OAA4DwqL,SAA5D,IAA4DA,IAA5D,UAA4DA,GAASxqL,IAAI,kBAAzE,iBAA4D,EAAyBq1C,qBAArF,aAA4D,EAAwC7vC,SAAS,WA8BhI,OAAQgpX,IACN,KAAK,EAAG,OACN+0gB,GAAWE,UACP,eAACnvc,EAAA,EAAD,CACArtD,QAAS,eAAC,IAAD,IACTC,SAAU,eAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,IAIjBs7f,GAsUC,eAACyB,GAAD,IArU+B,IAA/BH,GAAW7i4B,WAAW1I,KAClB,uCACA,sBAAKu/G,MAAO,CAAE+O,SAAU,OAAQhuC,SAAU,GAA1C,SACE,gBAACi8W,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAE3hE,KAAM2hE,EAAQs/W,WAApC,SACE,gBAACC,EAAA,EAAD,WAEIstc,GACE,eAAC/1mB,EAAA,EAAD,CAAWl0M,QAAQ,WAAnB,SACE,eAACmuC,EAAA,EAAD,CAASC,MAAQ49vB,KAAgBud,GAAiBxj4B,QAAWm7W,GAAiBn7W,SAAWyl4B,GAAWly3B,MAAQ2W,EAAE,oCAAsCA,EAAE,kCAAtJ,SACE,eAACqwG,EAAA,EAAD,CACEJ,QAAU8rvB,KAAgBud,GAAiBxj4B,QAAWm7W,GAAiBn7W,SAAWyl4B,GAAWly3B,MAC7FomG,SAAU,EAAK8qxB,yBAKrB,KAEHvtd,GAAiB/va,KAAI,SAAC0gI,EAAQvtI,GAAT,OAAoBso4B,IAA2C,YAAd/6vB,EAAOzoG,GAAoB,KAChG,eAACgpF,EAAA,EAAD,CAAqBC,MAAOwf,EAAO4lI,QAAUvjP,EAAE29G,EAAO4lI,SAAW,GAAjE,SACE,eAAC0gB,EAAA,EAAD,CAAW92M,QAAS,CAAE3hE,KAAM2hE,EAAQw/W,YAAcp9U,MAAOouB,EAAOpuB,MAAhE,SACGvvF,EAAE29G,EAAO5oG,UAFA3kC,WAQpB,eAACw8b,EAAA,EAAD,UAEK9mI,KAAa2oU,EAAoCkwP,UAAY74jB,KAAa2oU,EAAoCoqQ,gBAC3G,EAAK2C,oBAAoB5D,GAAkB363B,KAAI,SAACo93B,EAAuCjq4B,GACvF,IAAMyhX,EAAcwohB,EAAmBri4B,IAAI,eACrC6v2B,EAAkBwyB,EAAmBri4B,IAAI,iBACzCwpU,EAAgBqwC,EAAY75W,IAAI,UAChCypU,EAAkBC,2BAAwB7sT,MAAM,CAAC2sT,EAAe,cAChEG,EAAmBC,qBAAoBA,oBAAiBhsT,MAAK,SAACoukB,GAAD,OAA2BA,EAAQhslB,IAAI,WAAawpU,KACjHK,EAAqBL,EAAgBr0P,EAAQ,KAAD,OAAMw0P,GAAoBA,EAAiB3pU,IAAI,QAAWm1E,EAAQ20P,KAC9GK,EAAwBk4jB,EAAmBri4B,IAAI,kBAAoBqi4B,EAAmBri4B,IAAI,YAAc83I,IAAcmiL,aAAwBookB,EAAoBvqvB,IAExK,OACE,gBAAC48S,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAAM34O,QAAS,SAACz8G,GACvC,kBAAhBA,EAAE4kB,OAAOiU,IAA0C,mBAAhB74B,EAAE4kB,OAAOiU,IAGhD,EAAK2hF,SAAS,CACZoqP,kBAAmBo5hB,EACnBsB,iBAAkB9phB,EAAY75W,IAAI,iBAClCs53B,eAAgBz/gB,EAAY75W,IAAI,iBAChC4j4B,wBAAyB/zB,IACxB,kBAAMn9Q,GAAiB,KAAO,EAAKupK,WAAW74b,UATnD,UAYI4+jB,GACE,eAAC/1mB,EAAA,EAAD,CAAWl0M,QAAQ,WAAW76C,GAAG,gBAAjC,SACE,eAACm7F,EAAA,EAAD,CACEn7F,GAAG,iBAEH+6F,UAASghP,GAAiBzzW,SAAS683B,EAAmBri4B,IAAI,SAAgBsh4B,GAAiB973B,SAAS683B,EAAmBri4B,IAAI,QAAiB+j3B,GAC5ItswB,SAAU,EAAK2qxB,gBAAgBC,OAKnC,KAEHA,GAAsBrtd,GAAiB/va,KAAI,SAAC+pZ,GAC3C,OAAQA,EAAO9xX,IACb,IAAK,GAAI,OAAO,eAAC+uP,EAAA,EAAD,CAA8Bl0M,QAAQ,OAAOw/B,MAAO,CAAEhgC,MAAO,GAA7D,SACd,eAACzC,EAAA,EAAD,UACE,eAAC,KAAD,CAAO2tC,IAAKo3P,EAAYh9V,MAAMmyY,EAAOhpS,MAAzB,aAA+CjD,aAAa,EAAMD,YAAa,OAAQvrC,MAAO,OAAQC,OAAQ,kBAF9Fw3U,EAAOjyX,OAKvC,IAAK,iBACL,IAAK,0BACL,IAAK,eACL,IAAK,cACL,IAAK,WAAY,OAAO,eAAC,KAAD,CAA6B+qF,KAAM+xP,EAAYh9V,MAAMmyY,EAAOhpS,OAA7CgpS,EAAOjyX,OAC9C,IAAK,QAAS,OAAO,eAAC,KAAD,CAEnB+qF,KAAM+xP,EAAYh9V,MAAMmyY,EAAOhpS,MAAMhmH,IAAI,UAAW6O,iBAAO5J,KAAI,SAAC0gc,EAAQx8N,GACtE,IAAM88a,EAAYtgN,EAAO1gc,KAAI,SAACojM,EAAOmmH,GACnC,GAAK,CAAC,QAAS,OAAQ,OAAQ,QAAQhpT,SAASgpT,GAGhD,OAAOnmH,GAAuB,UAAdmmH,GAAyB,CAACxmS,EAAE,yBAAD,OAA0BwmS,IAA4B,SAAdA,GAAwBm3I,EAAO3lc,IAAI,SAAW,OAASqoM,GAAO7gM,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,QACpKlW,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,MACvB,OAAOuooB,GAAc98a,EAAW,KAAO88a,KACtCz+oB,QAAO,SAAAsM,GAAC,OAAIA,KAAG4J,KAAK,MATlBsxY,EAAOjyX,OAWd,IAAK,SAAU,OAAO,eAACkvP,EAAA,EAAD,UACpB,sBAAK52M,UAAWF,EAAQy1P,cAAxB,SACE,sBAAKv1P,UAAW6tC,KAAW/tC,EAAQ01P,KAAMhB,GAAqBpM,YAAa,SAAAp5T,GAAC,OAAIA,EAAE87G,mBAAlF,SACE,eAAC1K,EAAA,EAAD,UACGg0N,EAAkBzhT,EAAEyhT,GAAoBD,GAAiB,WAJ5BwlF,EAAOjyX,OAS7C,IAAK,cAAgB,IAAD,IACZosM,EAAQ,UAAG0wI,EAAYh9V,MAAM,CAAC,QAAS,mBAA/B,iBAAG,EAAyC/B,gBAA5C,aAAG,EAAmDuE,QACpE,OAAO,eAAC,KAAD,CAELyoG,KAAM04M,aAAWq5C,EAAYh9V,MAAM61kB,GAAc,sBAAO1jM,EAAOhpS,MAAd,CAAoBmjH,EAAU,kBAAmB6lL,EAAOhpS,QADpGgpS,EAAOjyX,OAIhB,IAAK,SAAU,OAAO,eAACkvP,EAAA,EAAD,UACnB4jlB,GAAmB,eAAC,KAAD,CAAW3twB,MAAM,UAAUqV,MAAO,CAAElgC,QAAS,aAAcG,OAAQ,WADnDw3U,EAAOjyX,OAG7C,IAAK,mBAAoB,OAAO,eAACkvP,EAAA,EAAD,CAA8B10K,MAAO,CAAE2R,UAAW,UAAlD,UA/HxCs8M,EAgI4Bq0C,GA/H3CqphB,GACD19jB,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,iBAAmB2oT,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,eAAgB,WAAa2oT,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,eAAgB,WACjM2oT,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,iBAAmB2oT,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,QAAS,eAAgB,WAAa2oT,EAAW3oT,MAAM,CAAC,OAAQ,QAAS,KAAM,eAAgB,YA6HtI,eAAC,KAAD,CAAW06F,MAAO,CAAErV,MAAO/qB,EAAM+pC,QAAQqsM,QAAQhvR,QAAa,eAACk3E,EAAA,EAAD,UAAaztF,EAAE,UADhEgnY,EAAOjyX,OAGvD,IAAK,UAAW,OAAO2j2B,GACnB,KACA5ykB,KAAa2oU,EAAoCkwP,SAC/C,eAAC,GAAD,CAEEn8iB,WAAY,kBAAM,EAAK3rN,SAAS,CAAEoqP,kBAAmBo5hB,IAAsB,kBAAM,EAAKpmI,WAAW74b,KAAmBiJ,UACpH5B,WAAY3U,GAAe+5iB,EAAkB,KAAjC,sBAAwC,4BAAAju2B,EAAA,sEACvB,EAAKii4B,sBAAsBxB,GADJ,OAC5CyB,EAD4C,OAElD,EAAKjlxB,SAAS,CAAEoqP,kBAAmB66hB,EAAa333B,MAAM,CAAC,cAAe,MAAO,QAAS,kBAAM,EAAK8vvB,WAAW74b,KAAmBiJ,SAF7E,2CAKpD3B,aAAc,WACZ,EAAK7rN,SAAS,CACZoqP,kBAAmBo5hB,EACnBsB,iBAAkB9phB,EAAY75W,IAAI,iBAClCs53B,eAAgBz/gB,EAAY75W,IAAI,iBAChC4j4B,wBAAyB/zB,IAE3Bjp0B,EAAS,IAAIy5kB,MAA0B,IACvC48Q,EAAwB,CACtBz3wB,QAAS,CAAE8gU,WAAY,CAAE3oZ,KAAMk8U,EAAY75W,IAAI,uBAhB9CgvZ,EAAOjyX,OAoBd,eAAC,GAAD,CAEEyi2B,YACEr1jB,OACIpyU,EACA,kBAAM,EAAK8mH,SAAS,CAAEoqP,kBAAmBo5hB,IAAsB,kBAAM,EAAKpmI,WAAW74b,KAAmBiJ,WAJzG2iF,EAAOjyX,OA3J7B,IAACyoS,OA2DiCptU,MA4GjC01T,KAAa2oU,EAAoCmqQ,SAC/Cf,EAAiB563B,KAAI,SAAC873B,EAA4B3o4B,GAA7B,OACrB,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAAM34O,QAAS,WAC1D,EAAKjC,SAAS,CACZkixB,cACAzH,eAAgByH,EAAY/g4B,IAAI,MAChC2j4B,iBAAkB5C,EAAY/g4B,IAAI,UAClC4j4B,yBAAyB,IACxB,kBAAM,EAAK3nI,WAAWxzZ,UAN3B,SAQGs4hB,GAAe/rd,GAAiB/va,KAAI,SAAC+pZ,GACpC,OAAQA,EAAO9xX,IACb,IAAK,iBACL,IAAK,eACL,IAAK,cAAe,OAAO,eAAC,KAAD,CAA6B4qF,KAAMi5wB,EAAYlk3B,MAAMmyY,EAAOhpS,OAA7CgpS,EAAOjyX,OACjD,IAAK,gBAAiB,OAAO,eAAC,KAAD,CAA6B+qF,MAAOi5wB,EAAYlk3B,MAAMmyY,EAAOhpS,OAAS9xG,kBAAQ7C,SAA/D29Y,EAAOjyX,OACnD,IAAK,cAAe,OAAO,eAAC,KAAD,CAA6B+qF,KAAM04M,aAAWugkB,EAAYlk3B,MAAMmyY,EAAOhpS,QAAxDgpS,EAAOjyX,OACjD,IAAK,UAAW,OACd,eAAC,GAAD,CAEEytS,WAAY,kBAAM,EAAK3rN,SAAS,CAAEkixB,gBAAe,kBAAM,EAAK9kI,WAAWxzZ,KAAmBC,UAC1Fj+B,WAAY,kBAAM,EAAK5rN,SAAS,CAAEkixB,YAAaA,EAAYp93B,IAAI,KAAM,QAAS,kBAAM,EAAKs4vB,WAAWxzZ,KAAmBC,UACvHh+B,aAAc,WACZ,EAAK7rN,SAAS,CACZkixB,cACAhxO,iBAAiB,EACjBupO,eAAgByH,EAAY/g4B,IAAI,MAChC2j4B,iBAAkB5C,EAAY/g4B,IAAI,UAClC4j4B,yBAAyB,MATxB50e,EAAOjyX,YAjBS3kC,MAmC/B0n4B,EAAe763B,KAAI,SAACy2H,EAAsBtjI,GAAvB,OACnB,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAA7C,SACG/9N,GAAUs5S,GAAiB/va,KAAI,SAAC+pZ,GAC/B,IAAM+0e,GAAiD,IAAjCrowB,EAAO17H,IAAI,kBAC3Bgk4B,EAAuC,OAAzBtowB,EAAO17H,IAAI,UACzBik4B,EAAiBD,GAAeD,EAChCh0kB,EAAmBg0kB,GAAiB/72B,EAAE,kEAAsEg82B,GAAeh82B,EAAE,oEAAuE,GACpM4gC,EAAc8yE,EAAO7+G,MAAM,CAAC,YAAa,OAAQ,UAAY,GACnE,OAAQmyY,EAAO9xX,IACb,IAAK,GAAI,OAAO,eAAC+uP,EAAA,EAAD,CAA8B10K,MAAO,CAAE2R,UAAW,SAAU4G,aAAc,GAA1E,SAEkB,OAA9B4L,EAAO7+G,MAAMmyY,EAAOhpS,MAChB,eAACE,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8DAAlB,SACA,eAAC,KAAD,CAAuBk6E,MAAM,cAE7B,eAACgkB,EAAA,EAAD,CAASC,MAAOvkB,KAAQ55E,EAAE,+DAAgE,CAAE4gC,gBAA5F,SACA,eAACo6D,EAAA,EAAD,CAAQ3tC,UAAWF,EAAQ84R,OAA3B,SAAoCrlT,EAAY,QAPxBomW,EAAOjyX,OAWvC,IAAK,cAAe,OAAO,eAACmn2B,GAAA,EAAD,CAAgC3wqB,eAAgB73F,EAAO17H,IAAI,mBAAtCgvZ,EAAO9xX,IACvD,IAAK,SAAU,OAAO,eAAC,KAAD,CAA+Bw+F,OAAQA,GAAtBszR,EAAOjyX,OAC9C,IAAK,eAAgB,OAAO,eAAC,KAAD,CAA6BtyB,KAAMixH,EAAO7+G,MAAMmyY,EAAOhpS,MAAOqmK,SAAS,EAAOF,SAAQ,UAAKl5P,0BAAL,YAA+ByoG,EAAO17H,IAAI,QAAjHgvZ,EAAOjyX,OAClD,IAAK,WACL,IAAK,eAAgB,OAAO,eAAC,KAAD,CAA6B+qF,KAAM4T,EAAO7+G,MAAMmyY,EAAOhpS,OAAxCgpS,EAAOjyX,OAClD,IAAK,aAAc,OAAO,eAAC,KAAD,CAA6B+qF,KAAM,EAAKq8wB,YAAYzowB,EAAQ,SAA7CszR,EAAOjyX,OAChD,IAAK,aAAc,OAAO,eAAC,KAAD,CAA6B+qF,KAAM,EAAKq8wB,YAAYzowB,EAAQ,SAA7CszR,EAAOjyX,OAChD,IAAK,OAAQ,OAAO,eAAC,KAAD,CAA6B+qF,KAAM,EAAKq8wB,YAAYzowB,EAAQ,SAA7CszR,EAAOjyX,OAC1C,IAAK,cAAe,OAAO,eAAC,KAAD,CAA6B+qF,KAAM04M,aAAW9kM,EAAO7+G,MAAMmyY,EAAOhpS,QAAnDgpS,EAAOjyX,OACjD,IAAK,UAAW,OACd,eAAC,GAAD,CAEEoi2B,YAAapvkB,EACbqvkB,cAAervkB,EACfo9c,YAAa42H,GAAiBh0kB,EAC9Bya,YAAay5jB,GAAmB,kBAAMr91B,EAASv+B,aAAK,GAAD,OAAI4pB,qBAAJ,YAAyBs5lB,KAAwBtyI,KAAjD,YAAyDv9W,EAAO17H,IAAI,UACvHyqU,YAAas5jB,GAAkB,kBAAMn91B,EAASv+B,aAAK,GAAD,OAAI4pB,qBAAJ,YAAyBs5lB,KAAwB64Q,UAAjD,YAA8D1owB,EAAO17H,IAAI,UAC3H0qU,cAAeu5jB,GAAmB,WAChC,EAAKplxB,SAAS,CACZkxiB,iBAAiB,EACjBupO,eAAgB59vB,EAAO17H,IAAI,MAC3B2j4B,iBAAkBjowB,EAAO17H,IAAI,iBAC7B4j4B,yBAAyB,MAXxB50e,EAAOjyX,YA9BS3kC,aAsD7C,eAACg9b,EAAA,EAAD,CACE//W,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACVggX,aAAc,EAAK1C,iBACnByC,iBAAkBtta,EAAE,0BACpBq9kB,mBAAoB,gBAAGp6lB,EAAH,EAAGA,KAAMC,EAAT,EAASA,GAAT,gBAAqBD,EAArB,YAA6BC,IACjDsqb,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCC,oBAAqB,EAAK3C,wBAC1Bzhb,MAAOky3B,GAAWly3B,OAAS,EAC3Bqkb,YAAaztZ,GAAQy9E,MACrBmiJ,KAAMA,GACN8tL,iBAAkB,SAACy6V,GAAD,OAAqB,eAAC,KAAD,aAAwBC,iBAAiB,GAAUD,KAC1Fj7sB,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,wBAIrBhoI,KAAa2oU,EAAoCkwP,SAC/C,eAAC5wb,GAAA,EAAD,CACE9rU,IACE,eAACq4R,GAAA,EAAD,CACEpgT,MAAO,CACL+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzC/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,MAEvCi5C,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,MAGjC+/R,gBAAiB,kBAAM,EAAK2lZ,WAAW74b,KAAmBiJ,OAC1DkqC,kBAAmB4shB,GAAoB5shB,kBACvCC,mBAAoB2shB,GAAoB3shB,mBACxCI,aAAcushB,GAAoBvshB,aAClCC,kBAAmBsshB,GAAoBtshB,oBAEzC/oD,KAAa2oU,EAAoCoqQ,gBAC/C,eAAC9qc,GAAA,EAAD,CACE9rU,IACE,eAACq4R,GAAA,EAAD,CACEpgT,MAAO,CACL+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzC/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,MAEvCi5C,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,MAGjCqgS,aAAcwshB,GAA0BxshB,aACxCC,kBAAmBushB,GAA0BvshB,oBAE/C/oD,KAAa2oU,EAAoCmqQ,SAC/C,eAAC7qc,GAAA,EAAD,CACE9rU,IACE,eAACq4R,GAAA,EAAD,CACEpgT,MAAO,CACL+e,gBAAiB9pC,EAAM+pC,QAAQ+d,UAAU,KACzC/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,MAEvCi5C,OAAQ1sE,OAAOqsE,EAAMZ,QAAQ,MAGjC+/R,gBAAiB,kBAAM,EAAK2lZ,WAAWxzZ,KAAmBC,OAC1D6N,kBAAmB8shB,GAAoB9shB,kBACvCC,mBAAoB6shB,GAAoB7shB,mBACxCI,aAAcyshB,GAAoBzshB,aAClCC,kBAAmBwshB,GAAoBxshB,oBAEzC,eAACk/E,GAAA,EAAD,CACE9rU,IACE,eAACq4R,GAAA,EAAD,CACEpgT,MAAO/qB,EAAM+pC,QAAQ+d,UAAU,KAC/B/U,YAAa/yC,EAAM+pC,QAAQ+d,UAAU1gG,KACrCg5E,MAAO,CAAE//B,OAAQL,EAAMZ,QAAQ,MAGnC+/R,gBAAiB,WACf1vU,EAASv+B,aAAK,GAAD,OAAI4pB,qBAAJ,YAAyBs5lB,KAAwB6J,UAE9D1yhB,KAAmB9rE,mBAAgB6q2B,wBAAyB340B,EAAc,CAAEu70B,mBAAoB,6DAElG9thB,kBAAmB+shB,GAAmB/shB,kBACtCC,mBAAoB8shB,GAAmB9shB,mBACvCI,aAAc0shB,GAAmB1shB,aACjCC,kBAAmByshB,GAAmBzshB,oBAKxD,KAAK,EAAG,OACNmshB,GAAsB,eAAChzN,GAAD,CAAas0N,gBA7WT,WACb,aAAX5iyB,IAAyBijV,IAC3B,EAAK9lU,SAAS,CAAE2vQ,WAAY,EAAKvrV,MAAMurV,WAAa,IACpD5nV,EAASu/B,aAAOs5zB,GAA2B,aAAc,QAC/C/6c,IAAkBC,KAC5B/9Y,EAAS,IAAIgK,KAAsB,CACjCtD,QAAStlB,EAAE,iDACX65E,SAAU,QACVk2S,aAAc,CACZ17G,WAAY,SACZL,SAAU,aAGd/3Q,QAAQ7Z,MAAM,gCAAiCu6a,IAC/C1ga,QAAQ7Z,MAAM,mCAAoCs6a,IAClDzga,QAAQ7Z,MAAM,2BAA4BogL,QA+V7B,WAAX9oF,IAAuBgjV,GAAgB,eAAC6/c,GAAD,IAErC,eAACzvzB,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASqiC,MAAO,CAAEiW,OAAQ,OAAQz1C,QAAS,IAA9F,SACE,gBAACjD,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAAnD,UACE,gBAACJ,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,eAAC,SAAD,CACEtB,UAAWqqP,KACXn1T,KAAK,aACLwrG,SAAU4pN,GACV15R,MAAO,CACLmmU,kBAAmB,CACjB/0P,MAAO,CAAEhgC,MAAO,QAASi2C,OAAQ,aAKrCkiG,IACA,eAAC56I,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAACf,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAA/B,SACE,eAACo8O,EAAA,EAAD,CACE56M,MAAO,CAAEhgC,MAAO,SAChB4hC,UAAU,EACVxhH,MAAK,OAAE+3N,SAAF,IAAEA,QAAF,EAAEA,GAAMjlN,KACbsuG,WAAY,CACVC,eAAgB02G,IAAQ,eAACz2G,EAAA,EAAD,CAAgBC,SAAS,QAAzB,SACtB,eAAC,KAAD,MAEF0kN,aAAc,eAAC3kN,EAAA,EAAD,CAAgBC,SAAS,MAAzB,SACZ,eAACyd,EAAA,EAAD,CAAY7V,QAAS,EAAK0hxB,YAA1B,SAAuC,eAAC,KAAD,mBASlD9vS,IACD,eAAC59gB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,gBAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,eAAewhC,MAAO,CAAEgB,UAAW,IAAlE,UAEE,eAACzjC,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,WAA/B,SACE,gBAAC86O,EAAA,EAAD,CAAKx5O,QAAQ,QAAb,UACE,eAACo+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,yCAC/B,wBACA,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,iDAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,+CAC/B,gBAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,UAA6B3tF,EAAE,sCAA/B,2BAEE,eAACuhG,EAAA,EAAD,CAAMl0C,UAAWF,EAAQ+wB,KAAM4a,QAAS,kBAAM,EAAKjC,SAAS,CAAE2lxB,wBAAwB,KAAtF,SAAgGx82B,EAAE,uCAEpG,gBAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,UAA6B3tF,EAAE,0CAA/B,eAEE,eAACuhG,EAAA,EAAD,CAAMl0C,UAAWF,EAAQ+wB,KAAM4a,QAAS,kBAAM,EAAKjC,SAAS,CAAE4lxB,qBAAqB,KAAnF,SAA6Fz82B,EAAE,2CAEjG,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,4CAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,0CAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,wDAKrC,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,eAAC/B,EAAA,EAAD,CAAMW,WAAW,EAAjB,SACE,gBAACo7O,EAAA,EAAD,CAAKx5O,QAAQ,QAAb,UACE,eAACo+B,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,uCAC/B,wBACA,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,uCAC/B,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,wCAC/B,wBACA,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,iDAC/B,wBACA,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAApB,SAA6B3tF,EAAE,4DAWrD,KAAK,EAAG,OACN,eAACojlB,GAAD,CACE42R,kBAAmBA,GACnBC,mBAAoBA,GACpB52R,gBAAiB,WACfzkkB,EAASu/B,aAAOs5zB,GAA2B,aAAc,OACzD741B,EAAS,IAAIwlD,MAAoC,CAC/C4wP,QAAS,EACTt7O,OAAQ,UACR8oF,QAAS,QAEX,EAAK3rE,SAAS,CAAE2vQ,WAAY,OAGlC,QAAS,SAvvC8B,EA61DnC4hE,iBAAmB,WAAO,IAAD,EAqE3Br2H,EACAC,EArEI04R,EAAmB,EAAKvsjB,MAAxBusjB,eACR,EAA+C,EAAKzvjB,MAApD,IAAQw2F,kBAAR,MAAqB,GAArB,EAAyBjU,EAAzB,EAAyBA,QAASsoM,EAAlC,EAAkCA,SAwB5B6xb,EAA8B7xb,IAAa2oU,EAAoCC,QACjF,CACA,IAAO,CACL,CACE,cAAiB,CACf,KAAQj9f,MAKdi5d,EAAiB,CACjB,IAAO,CACL,CACE,GAAM,CACJ,CACE,cAAiB,CACf,KAAQj5d,IAGZ,CACE,MAAS,CACP,KAAQA,IAGZ,CACE,YAAe,CACb,KAAQA,QAMhB,CACF,IAAO,CACL,CACE,cAAiB,CACf,MAASA,MAiBnB,OAZAjU,IAAW,EAAAm6nB,EAAmBjitB,KAAIr1B,KAAvB,oBAAgCm9G,EAAgB9nF,MAIvDowR,IAAa2oU,EAAoCkwP,UACnD5sjB,EAAgB2lb,aAAqBC,EAAoB,iBACzDG,aAAuBH,IACd7xb,IAAa2oU,EAAoCoqQ,kBAC1D7mkB,EAAsB0lb,aAAqBC,EAAoB,uBAC/DG,aAAuBH,IAGlB,CACLA,qBACA5lb,gBACAC,wBA/6DuC,EAm7DnCmqkB,YAAc,SAACxi1B,EAAsB6sQ,GAC3C,IAAM5vR,EAAM+iB,EAAO9kC,MAAM,CAAC,QAAS,UAAW,MAAO2xS,IAC/Ck2kB,EAAM/i1B,EAAO9kC,MAAM,CAAC,QAAS,UAAW,MAAO2xS,IACrD,MAAO,CAAC5vR,EAAG,eAAWA,GAAQ,KAAM8l2B,EAAG,eAAWA,GAAQ,MAAMl93B,QAAO,SAAA6gM,GAAK,OAAIA,KAAO3qL,KAAK,OAt7DnD,EAy7DnCin3B,uBAAyB,kBAAM,EAAK9lxB,SAAS,CAAEmixB,uBAAuB,KAz7DnC,EA27DnCzhe,WAAa,kBAAM,EAAK1gT,SAAS,CAAE2lxB,wBAAwB,EAAOC,qBAAqB,KA37DpD,EA67DnCG,oBAAsB,kBAAM,EAAK/lxB,SAAS,CAAEgmxB,iBAAiB,EAAO57hB,kBAAmB,QA77DpD,EA+7DnCH,iBAAmB,SAAC71O,GAC1B,EAAKpU,SAAS,CACZoqP,kBAAmBh2O,EACnB0wwB,iBAAkB1wwB,EAAQjzH,IAAI,iBAC9Bs53B,eAAgBrmwB,EAAQjzH,IAAI,mBAE3B,kBAAM,EAAKi8vB,WAAW74b,UAr8DgB,EAw8DnCygkB,sBAx8DmC,uCAw8DX,WAC9B75iB,GAD8B,mCAAApoV,EAAA,yDAGzBooV,EAHyB,yCAIrBA,GAJqB,UAMxBzrT,EAAOyrT,EAAMntU,MAAM,CAAC,cAAe,OAAQ,SAAU,SAN7B,yCAQrBmtU,GARqB,UAUxBr6B,EAVwB,UAUfpxR,EAAKv+B,WAVU,aAUf,OAAAu+B,EAAW,UACpB+g2B,EAXwB,UAWd/g2B,EAAKv+B,WAXS,aAWd,OAAAu+B,EAAW,MACrBk/D,EAZwB,UAYlBl/D,EAAKv+B,WAZa,aAYlB,OAAAu+B,EAAW,QACnBoxR,GAAW2vkB,GAAY7hyB,EAbG,0CAcrBusP,GAdqB,qBAgBX,EAAK7jT,MAAMo9D,WAhBA,iBAgBX,EAAgBvjG,WAhBL,aAgBX,SAAsB,uBAhBX,0CAkBrBgqV,GAlBqB,YAoB1B,EAAK21iB,oBAAoBz/3B,IAAIo/3B,GApBH,0CAqBrBt1iB,GArBqB,eAuB9B,EAAK21iB,oBAAoB/k3B,IAAI0k3B,GAvBC,oBAyBCD,GAAe/k4B,OAAO,EAAK6rC,MAAMo9D,IAAK,EAAKp9D,MAAM6c,MAAOs80B,GAzBzD,WAyBtBwF,EAzBsB,iDA2BnB96iB,GA3BmB,eA6BtBpjD,EAAUojD,EAAM79U,MACpB,CAAC,cAAe,OAAQ,SAAU,OAAQ,UAC1C243B,GAEF,EAAK3+1B,MAAMS,SAAS,IAAI+xC,MAA6B,CAAEkhS,YAAajzE,KAjCxC,kBAkCrBA,GAlCqB,4DAoCrBojD,GApCqB,yBAsC5B,EAAK21iB,oBAAoBl7wB,OAAO66wB,GAtCJ,8EAx8DW,wDA2/DnCkE,oBAAsB,SAC5B5D,GAC6B,IAAD,EACpBmF,EAA+B,EAAK5+1B,MAApC4+1B,2BACA981B,EAAY,EAAKhF,MAAjBgF,QACR,IAAW,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASl+B,WAAU,OAACg73B,QAAD,IAACA,OAAD,EAACA,EAA4B/s4B,MAClD,OAAO4n4B,EAET,IAAMoF,EAAO,OAAGpF,QAAH,IAAGA,GAAH,UAAGA,EAAkB363B,KAAI,SAACysE,GAAD,OAAYA,EAAE1xE,IAAI,gBAA3C,aAAG,EAAgDsd,QAC1Du6nB,EAAUktP,EACbv93B,QAAO,SAACtI,GAAD,QAAgB,OAAC8l4B,QAAD,IAACA,OAAD,EAACA,EAAS9k4B,IAAIhB,EAAM2d,MAAM,CAAC,cAAe,YACjE5X,KAAI,SAAC/F,GAAD,OAAgBA,EAAMc,IAAI,kBACjC,OAAO63oB,EAAQ7/oB,KACV6/oB,EAAQtwoB,OAAOq43B,GAChBA,GAzgEqC,EA4gEnCkB,wBAA0B,SAAClB,GAC5BA,GAGLA,EAAiBj33B,SAAQ,SAACqhV,GACxB,EAAK65iB,sBAAsB75iB,GAAOpnJ,OAAM,mBAjhED,EAqhEnCq5jB,WAAa,SAAC/+tB,GAAsC,IAA1B0a,EAAyB,uDAAP,GAClD,EAAqC,EAAKzR,MAAlCS,EAAR,EAAQA,SAAU8rjB,EAAlB,EAAkBA,eACdA,EACF,EAAK7ze,SAAS,CAAEgmxB,iBAAiB,KAEjCj+1B,EAAS,IAAI8J,KAAiC,CAC5CxT,KACA0a,aAEFhR,EAAS,IAAI0J,KAA6B,CACxCpT,KACA0pE,MAAM,KAEJ1pE,IAAOkmS,MACTx8R,EAAS,IAAI4J,KAA+B,CAC1CtT,GAAIkmS,KACJj9R,MAAO,CACL4/R,iBAAkB,EAAK9iS,MAAM6qR,WAAa2oU,EAAoCkwP,SAC1E,SAACtkb,GACC,EAAKxjV,SAAS,CACZoqP,kBAAmBo5F,EACnBshc,iBAAkBthc,EAAeric,IAAI,iBACrCs53B,eAAgBj3b,EAAeric,IAAI,mBAErC4mC,EAAS,IAAI+xC,MAA6B,CAAEkhS,YAAawoF,MAE3D,kBAAM,EAAK/zF,uBAAuB,WA7iE9C,IACEokP,EAGEvsjB,EAHFusjB,eACAjoe,EAEEtkF,EAFFskF,4BACAu7M,EACE7/R,EADF6/R,4BALuC,OAOzC,EAAK/iS,MAAQ,CACXmsF,SAAU,KACV4lT,iBAAkB,GAClBisd,gBAAiBvuS,EAAiB,CAChC,CAAEx1jB,GAAI,iBAAkBH,MAAO,sCAAuCipF,KAAM,CAAC,iBAAkB3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC7G,CAAEpxX,GAAI,WAAYH,MAAO,iCAAkCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GAC5G,CAAEpxX,GAAI,cAAeH,MAAO,oCAAqCipF,KAAM,CAAC,eAAgB3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,QAASH,MAAO,8BAA+BipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC/F,CAAEpxX,GAAI,cAAeH,MAAO,kCAAmCipF,KAAM,CAAC,QAAS,WAAY3uC,SAAS,EAAMi3U,UAAU,GACpH,CAAEpxX,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAP9E,CAS7B,CAAEhsF,GAAI,GAAIH,MAAO,GAAIipF,KAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW3uC,SAAS,EAAMi3U,UAAU,GAC1F,CAAEpxX,GAAI,iBAAkBH,MAAO,sCAAuCipF,KAAM,CAAC,iBAAkB3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,0BAA2BH,MAAO,8CAA+CipF,KAAM,CAAC,cAAe3uC,SAAS,EAAMi3U,UAAU,GACtI,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC7G,CAAEpxX,GAAI,WAAYH,MAAO,iCAAkCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GAC5G,CAAEpxX,GAAI,cAAeH,MAAO,mCAAoCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,QAASH,MAAO,8BAA+BipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,IAflE,mBAgB1BtoF,EAA8B,CAAC,CAAE9oS,GAAI,mBAAoBH,MAAO,uCAAwCs6C,SAAS,EAAMi3U,UAAU,IAAW,IAhBlH,CAiB7B,CAAEpxX,GAAI,SAAUH,MAAO,+BAAgCipF,KAAM,CAAC,UAAW3uC,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAjB/F,YAmB1BuB,EAA8B,GAAK,CAAC,CAAEvtF,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,cAEpJ+7wB,sBAAsB,CACpB,CAAE/n2B,GAAI,GAAIH,MAAO,GAAIipF,KAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW3uC,SAAS,EAAMi3U,UAAU,GAC1F,CAAEpxX,GAAI,iBAAkBH,MAAO,sCAAuCipF,KAAM,CAAC,iBAAkB3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,0BAA2BH,MAAO,8CAA+CipF,KAAM,CAAC,cAAe3uC,SAAS,EAAMi3U,UAAU,GACtI,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC7G,CAAEpxX,GAAI,WAAYH,MAAO,iCAAkCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GAC5G,CAAEpxX,GAAI,cAAeH,MAAO,mCAAoCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,QAASH,MAAO,8BAA+BipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,IAP5E,mBAQhBtoF,EAA8B,CAAC,CAAE9oS,GAAI,mBAAoBH,MAAO,uCAAwCs6C,SAAS,EAAMi3U,UAAU,IAAW,IAR5H,CASnB,CAAEpxX,GAAI,SAAUH,MAAO,+BAAgCipF,KAAM,CAAC,UAAW3uC,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YATzG,YAUhBuB,EAA8B,GAAK,CAAC,CAAEvtF,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,cAEpJg8wB,gBAAgB,CACd,CAAEho2B,GAAI,iBAAkBH,MAAO,sCAAuCipF,KAAM,CAAC,UAAW3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,oBAAqB3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,gBAAiBH,MAAO,yCAA0CipF,KAAM,CAAC,cAAe3uC,SAAS,EAAMi3U,UAAU,GACvH,CAAEpxX,GAAI,cAAeH,MAAO,mCAAoCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,cAAeH,MAAO,oCAAqCipF,KAAM,CAAC,eAAgB3uC,SAAS,EAAMi3U,UAAU,IALpG,mBAMV7jS,EAA8B,GAAM,CAAC,CAAEvtF,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,cAErJi8wB,eAAe,CACb,CAAEjo2B,GAAI,GAAIH,MAAO,GAAIipF,KAAM,CAAC,UAAW3uC,SAAS,EAAMi3U,UAAU,GAChE,CAAEpxX,GAAI,cAAeH,MAAO,wCAAyCipF,KAAM,CAAC,kBAAmB3uC,SAAS,EAAMi3U,UAAU,GACxH,CAAEpxX,GAAI,eAAgBH,MAAO,oCAAqCipF,KAAM,CAAC,iBAAkB3uC,SAAS,EAAMi3U,UAAU,GACpH,CAAEpxX,GAAI,WAAYH,MAAO,iCAAkCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GAC5G,CAAEpxX,GAAI,eAAgBH,MAAO,qCAAsCipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,GAC7G,CAAEpxX,GAAI,cAAeH,MAAO,mCAAoCipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,GACjH,CAAEpxX,GAAI,SAAUH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,WAC1G,CAAEhsF,GAAI,aAAcH,MAAO,kCAAmCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GACvG,CAAEpxX,GAAI,aAAcH,MAAO,kCAAmCipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,GACvG,CAAEpxX,GAAI,OAAQH,MAAO,6BAA8BipF,KAAM,CAAC,QAAS3uC,SAAS,EAAMi3U,UAAU,IAVhF,mBAWT7jS,EAA8B,GAAK,CAAC,CAAEvtF,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,cAEpJkpU,kBAAkB,EAClBvqL,KAAM,EACNpuI,WAAY,GACZ2rwB,mBAAoB,GACpBC,yBAA0B,GAC1BC,mBAAoB,GACpBC,iBAAkB,GAClB//wB,QAAS,KACTggxB,gBAAiB,KACjBC,sBAAuB,KACvBC,gBAAiB,KACjBC,eAAgB,KAChB191B,QAAS6K,GACTg7Q,SAAU2oU,EAAoCkwP,SAC9Cif,gBAAiB,GAEjB38hB,kBAAmB,KACnB83hB,YAAa,KACb4C,iBAAkB,GAClBrK,eAAgB,KAChBsK,yBAAyB,EACzB7zO,iBAAiB,EACjBixO,uBAAuB,EACvByD,qBAAqB,EACrBD,wBAAwB,EAExBhic,SAAU,MACVw/b,mBAAmB,EACnBxzgB,WAAY,EACZu1f,aAAa,EACb9qgB,iBAAkB,GAClBqohB,iBAAkB,GAClB3od,kBAAkB,EAClB0od,mBAAmB,EACnBj1R,YAAa,CACX,CAAEz0mB,MAAO,SAAUwlC,UAAW,iCAC9B,CAAExlC,MAAO,SAAUwlC,UAAW,iCAC9B,CAAExlC,MAAO,UAAWwlC,UAAW,mCAEjCwk2B,2BAA2B,EAE3BkD,iBAAiB,GAzGsB,E,qDA6G3C,WAA4B,IAAD,OAEzB,EAAwL5o4B,KAAKkqC,MAArLuf,EAAR,EAAQA,SAAUmzQ,EAAlB,EAAkBA,YAAagtkB,EAA/B,EAA+BA,oBAAqBhnkB,EAApD,EAAoDA,oBAAqBtyM,EAAzE,EAAyEA,QAAS2xM,EAAlF,EAAkFA,iBAAkBD,EAApG,EAAoGA,cAAeyikB,EAAnH,EAAmHA,0BAA2BhuS,EAA9I,EAA8IA,eAAgBozS,EAA9J,EAA8JA,sBAC9J,EAA6J7p4B,KAAKgnC,MAA1Jg+1B,EAAR,EAAQA,gBAAiBuE,EAAzB,EAAyBA,gBAAiBN,EAA1C,EAA0CA,gBAAiBQ,EAA3D,EAA2DA,gBAAiBP,EAA5E,EAA4EA,eAAgBQ,EAA5F,EAA4FA,eAAgBV,EAA5G,EAA4GA,sBAAuBQ,EAAnI,EAAmIA,sBAC7HjvQ,EAAmB9wkB,EAASziB,OAAUyiB,EAASziB,MAAcuzlB,iBAAoBC,EAAoCkwP,SAEvH9tjB,IACF58T,KAAKgnC,MAAMg+1B,gBAAgB513B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,SAAUH,MAAO,+BAAgCwuO,QAAS,sCAAuCl0L,SAAS,EAAMi3U,UAAU,IACzKryZ,KAAK4iH,SAAS,CAAEoixB,gBAAiBhl4B,KAAKgnC,MAAMg+1B,mBAG1CzqQ,IAAoBC,EAAoCkwP,SAC1D1q3B,KAAK4iH,SAAS,CAAEm2T,iBAAkBisd,EAAiBz7wB,QAASggxB,IAAmB,kBAAM,EAAKl3hB,uBAAuB,OACxGkoR,IAAoBC,EAAoCmqQ,SACjE3k4B,KAAK4iH,SAAS,CAAEm2T,iBAAkBkwd,EAAiB1/wB,QAASkgxB,EAAiB53kB,SAAU2oU,EAAoCmqQ,WAAY,kBAAM,EAAKtyhB,uBAAuB,OAChKkoR,IAAoBC,EAAoCoqQ,gBACjE5k4B,KAAK4iH,SAAS,CAAEm2T,iBAAkBiwd,EAAuBz/wB,QAASigxB,EAAuB33kB,SAAU2oU,EAAoCoqQ,kBAAmB,kBAAM,EAAKvyhB,uBAAuB,OAE5LryW,KAAK4iH,SAAS,CAAEm2T,iBAAkBmwd,EAAgB3/wB,QAASmgxB,EAAgB73kB,SAAU2oU,EAAoCC,UAAW,kBAAM,EAAKpoR,uBAAuB,QAGpKoyhB,GAA8B7hkB,GAAwB6zR,GACxDnme,EAAQ13C,QAAQ5jD,kBAGlB402B,IACA3nkB,EAAiBw0R,GACjBz0R,EAAcy0R,GACdozS,EAAsBpzS,K,oBAknCxB,WAAiB,IAAD,mBACd,EAoCIz2lB,KAAKkqC,MAnCPgvC,EADF,EACEA,QACAgC,EAFF,EAEEA,MACA4ozB,EAHF,EAGEA,8BACAjqkB,EAJF,EAIEA,YACAiwkB,EALF,EAKEA,uBACA9C,EANF,EAMEA,uBACA7rxB,EAPF,EAOEA,WACA4rxB,EARF,EAQEA,oBACA3pwB,EATF,EASEA,WACA0f,EAVF,EAUEA,cACA/wH,EAXF,EAWEA,EACA4e,EAZF,EAYEA,SACAq21B,EAbF,EAaEA,wBACA73jB,EAdF,EAcEA,kBACA09jB,EAfF,EAeEA,kBACAC,EAhBF,EAgBEA,iBACAlkkB,EAjBF,EAiBEA,oBACAmnkB,EAlBF,EAkBEA,sBAlBF,IAmBEpG,wBAnBF,MAmBqB1r3B,iBAnBrB,EAoBEou3B,EApBF,EAoBEA,sBACAlskB,EArBF,EAqBEA,uBACAuskB,EAtBF,EAsBEA,4BAtBF,IAuBE9C,wBAvBF,MAuBqB3r3B,iBAvBrB,EAwBEis3B,GAxBF,EAwBEA,uBACAyC,GAzBF,EAyBEA,4BAzBF,KA0BE9C,uBA1BF,OA0BmB5r3B,iBA1BnB,GA2BEks3B,GA3BF,EA2BEA,qBACAyC,GA5BF,EA4BEA,0BACAb,GA7BF,EA6BEA,kBACAC,GA9BF,EA8BEA,mBACAvB,GA/BF,EA+BEA,0BACAhuS,GAhCF,EAgCEA,eACAuzS,GAjCF,EAiCEA,oBACAx7wB,GAlCF,EAkCEA,4BACAk2wB,GAnCF,EAmCEA,qBAEF,GAoBI1k4B,KAAKgnC,MAnBPgF,GADF,GACEA,QACAwxF,GAFF,GAEEA,WACA24T,GAHF,GAGEA,iBACAtkI,GAJF,GAIEA,SACA61kB,GALF,GAKEA,iBACArK,GANF,GAMEA,eACAsK,GAPF,GAOEA,wBACA7zO,GARF,GAQEA,gBACAixO,GATF,GASEA,sBACAyD,GAVF,GAUEA,oBACAD,GAXF,GAWEA,uBACAh2gB,GAZF,GAYEA,WACAvV,GAbF,GAaEA,iBACAqohB,GAdF,GAcEA,iBACAvd,GAfF,GAeEA,YACAsd,GAhBF,GAgBEA,kBACAj1R,GAjBF,GAiBEA,YACAu1R,GAlBF,GAkBEA,0BACAkD,GAnBF,GAmBEA,gBAGMnjyB,GAAoBuhyB,EAApBvhyB,OAAQ8oF,GAAYy4sB,EAAZz4sB,QAEVk6P,GAA2B,WAAXhjV,IAAgD,eAAlB,OAAP8oF,SAAO,IAAPA,QAAA,EAAAA,GAASxqL,IAAI,WAApC,OAA+DwqL,SAA/D,IAA+DA,IAA/D,UAA+DA,GAASxqL,IAAI,kBAA5E,iBAA+D,EAAyBq1C,qBAAxF,aAA+D,EAAwC7vC,SAAS,cAChIm/a,GAAwB,WAAXjjV,IAAgD,YAAlB,OAAP8oF,SAAO,IAAPA,QAAA,EAAAA,GAASxqL,IAAI,WAApC,OAA4DwqL,SAA5D,IAA4DA,IAA5D,UAA4DA,GAASxqL,IAAI,kBAAzE,iBAA4D,EAAyBq1C,qBAArF,aAA4D,EAAwC7vC,SAAS,WAE1HkqN,GAAI,OAAGt4G,QAAH,IAAGA,GAAH,UAAGA,EAAYp3G,IAAI,qBAAnB,aAAG,EAAgC,GAEvCuj4B,GAAcz1kB,KAAa2oU,EAAoCkwP,UAAY74jB,KAAa2oU,EAAoCoqQ,gBAC9H,CACAng4B,WAAYzE,KAAKun4B,oBAAoB5D,GACrC6D,UAAWrtkB,EACX/kT,MAAOqv3B,GACH4B,EACAK,EACE161B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EACjCz9E,GAAQl+B,QAAR,UAAiB9N,KAAKun4B,oBAAoB5D,UAA1C,aAAiB,EAA4C5n4B,OAEnE81T,KAAa2oU,EAAoCmqQ,SAC/C,CACAlg4B,WAAYm/3B,EACZ4D,UAAWtD,GACX9u3B,MAAOux3B,GAA8B361B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EAAIz9E,GAAQl+B,QAAR,OAAiB813B,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAkB7n4B,OAE7G,CACA0I,WAAYo/3B,GACZ2D,UAAWrD,GACX/u3B,MAAOwx3B,GAA4B561B,GAAQl+B,OAASk+B,GAAQy9E,MAAQ,EAAIz9E,GAAQl+B,QAAR,OAAiB+13B,SAAjB,IAAiBA,QAAjB,EAAiBA,GAAgB9n4B,OAG/G,OACE,gBAAC88E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVN,UAAWF,EAAQM,UAHrB,UAKE,eAACw+W,GAAA,EAAD,CACEnc,oBAAqB77a,KAAKk2b,mBAC1B/Z,4BAA6B,SAAC/za,GAAD,OAAO,EAAKw6G,SAAS,CAAE85T,kBAAkB,EAAMvpT,SAAU/qH,EAAEs8G,iBACxF03T,0BAA2B,kBAAM,EAAKx5T,SAAS,CAAEmjxB,mBAAmB,KACpE1qd,cAAetvZ,EAAE,+CACjByxG,WAAYA,GACZ6kM,aAAcriU,KAAKqiU,aACnB05G,WAAY/7a,KAAK+7a,WACjBT,YAAY,EACZ12a,KAAM2tX,GACNmpD,YAAa+od,IAA8BsB,IAAoC,IAAfxzgB,GAChEopD,iBAAkB8od,IAA8BsB,IAAoC,IAAfxzgB,GACrEgpD,SAAUkpd,KAA8Bj2wB,IAA+BqjM,KAAa2oU,EAAoCoqQ,gBACxH1od,oBAAqBuod,IAA6B5ykB,KAAa2oU,EAAoCkwP,WAAa9njB,GAAuB6zR,MAAoBguS,KAA8Bj2wB,GACzL6tT,sBAAuBr8a,KAAKq8a,sBAC5BJ,cACEwod,GACE,eAACnugB,EAAA,EAAD,CAASl9S,UAAWF,EAAQk3hB,cAAe79O,WAAYA,GAAvD,SAEI49O,GAAYnnmB,KAAI,SAACpE,EAAM5B,GAAP,OAAa,eAACwzX,EAAA,EAAD,CAAMp9S,UAA0B,IAAfm5S,IAAoBr5S,EAAQm3hB,eAA7C,SAEV,WAAfzrmB,EAAKlJ,OAAqC,IAAf62X,GACzB,eAACkE,EAAA,EAAD,UACE,gBAAC59S,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAASuB,KAAK,SAAhE,UACGzuD,EAAEnnB,EAAKs8B,WACR,eAAC+oF,EAAA,EAAD,CAASC,MACP,sBAAI9wC,UAAWF,EAAQg7d,GAAvB,UACE,8BAAKnohB,EAAE,uCACP,8BAAKA,EAAE,uCACP,8BAAKA,EAAE,uCACP,8BAAKA,EAAE,0CALX,SAQE,eAACk+2B,GAAD,CAAa3uxB,MAAO,CAAE4M,WAAY,IAAMjiB,MAAM,kBAKpD,eAACwwR,EAAA,EAAD,CAAWn7Q,MAAO,CAAE4M,WAAY,IAAhC,SAAuCn8F,EAAEnnB,EAAKs8B,cAnB2Ct8B,EAAKlJ,MAAQsH,QAyB/GyzlB,GAyDC,KAxDA,gBAACzkS,EAAA,EAAD,CACE54O,UAAWF,EAAQ+7E,KACnBv5J,MAAOm2T,GACPr2M,SAAUx7G,KAAKk5xB,gBACfx/qB,QAAQ,YACR,aAAY3tF,EAAE,6CALhB,UAOE,eAAComS,EAAA,EAAD,CACErxR,MAAO/U,EAAE,wCACTrwB,MAAO8+nB,EAAoCkwP,SAC3C94vB,KAAM,eAAC,KAAD,CAAiBA,KAAK,MAAMx4C,UAAWF,EAAQ41sB,QAASxzqB,MAAO,CAAE+X,aAAc,KACrFn6C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,gBAIrB31Q,GAME,eAAC5vM,EAAA,EAAD,CAASC,MAAOn+F,EAAE,qDAA6DrwB,MAAO8+nB,EAAoCoqQ,gBAA1H,SACE,eAACzykB,EAAA,EAAD,CACErxR,MAAO/U,EAAE,8CACTrwB,MAAO8+nB,EAAoCoqQ,gBAC3ChzwB,KAAM,eAAC,KAAD,CAAiBA,KAAK,MAAMx4C,UAAWF,EAAQ41sB,QAASxzqB,MAAO,CAAE+X,aAAc,KACrFn6C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,kBAM7B,eAACr9Q,EAAA,EAAD,CACErxR,MAAO/U,EAAE,wCACTrwB,MAAO8+nB,EAAoCmqQ,SAC3C/ywB,KAAM,eAAC,KAAD,CAAiBA,KAAK,QAAQx4C,UAAWF,EAAQ41sB,QAASxzqB,MAAO,CAAE+X,aAAc,KACvFn6C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,gBAGvB,eAACr9Q,EAAA,EAAD,CACErxR,MAAO/U,EAAE,uCACTrwB,MAAO8+nB,EAAoCC,QAC3C7ogB,KAAM,eAAC,KAAD,CAAazK,SAAS,QAAQ/tC,UAAWF,EAAQ41sB,QAASxzqB,MAAO,CAAE+X,aAAc,KACvFn6C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,mBAO/BlzJ,eACEyqd,EAAsB,KACT,aAAXthyB,IAAyBijV,GACvB,qCACE,eAAC/jU,EAAA,EAAD,CACEvrC,UAAWF,EAAQgxzB,aACnB5uxB,MAAO,CAAEhgC,MAAO,KAChBupC,QAAS7kH,KAAK66qB,WACd50kB,MAAM,UACNyT,QAAQ,YALV,SAOG3tF,EAAE,8BAIP08Z,GACE,qCACE,eAAC9jU,EAAA,EAAD,CACEvrC,UAAWF,EAAQgxzB,aACnBrlxB,QAAS7kH,KAAKwm4B,QACdvgyB,MAAM,UACNyT,QAAQ,YAJV,SAMG3tF,EAAE,iCAIP042B,GACE,uCACE,eAAC9/wB,EAAA,EAAD,CACEzH,SAAU6sxB,GAAyBC,GACnC5wzB,UAAWF,EAAQgxzB,aACnBrlxB,QAAS7kH,KAAKkm4B,cACdjgyB,MAAM,UAJR,SAMGl6E,EAAE,wBAGHwmW,GAAa,EACX,eAAC5tQ,EAAA,EAAD,CACEvrC,UAAWF,EAAQgxzB,aACnBrlxB,QAAS7kH,KAAKim4B,YACdhgyB,MAAM,UAHR,SAKGl6E,EAAE,sBAGL,KAGa,IAAfwmW,IAAoBwzgB,KAAsBje,IAAe9qgB,GAAiBn7W,QAAUwj4B,GAAiBxj4B,QACnG,gBAAC8iH,EAAA,EAAD,CACEvrC,UAAWF,EAAQgxzB,aACnBrlxB,QAAS7kH,KAAK4l4B,oBACd1oxB,SAAU8sxB,IAAwBliB,KAAgB9qgB,GAAiBn7W,OAAS,KAAYyl4B,GAAWly3B,MAAQiw3B,GAAiBxj4B,OAAU,KACtIokG,MAAM,UACNyT,QAAQ,YALV,UAOG3tF,EAAE,8BACFi+2B,IAAuB,eAACpokB,EAAA,EAAD,CAAkB37N,MAAM,UAAUlqG,KAAK,UAAUu/G,MAAO,CAAE4M,WAAY,QAGhG,eAACvD,EAAA,EAAD,CACEvrC,UAAWF,EAAQgxzB,aACnBrlxB,QAAS7kH,KAAK8l4B,YACd5oxB,SAAWq1Q,KAAe49O,GAAYtumB,OAAS,IAAQ4xN,IAAuB,IAAf8+J,IAAsB9+J,KAASl6L,GAAoBhwB,SAASkqN,GAAKvzN,OAAU6p4B,EAC1I9jyB,MAAM,UACNyT,QAAQ,YALV,SAOG3tF,EAAE,yBAKX,QAITi62B,IAAqC,IAAfzzgB,IACvB,eAAC0lE,GAAA,EAAD,CACEC,cACErmI,KAAa2oU,EAAoCkwP,SAC7C10R,4BACAnkS,KAAa2oU,EAAoCoqQ,gBAC/C3uS,mCACApkS,KAAa2oU,EAAoCmqQ,SAC/CjnE,4BACAE,2BAEVvrd,uBAAwBryW,KAAKqyW,uBAC7BrmU,QAASA,GACTioU,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE+mxB,gBAAiBrl4B,KACxDq6c,eAAgB,CAAEtrV,aAAe2ywB,IAAqC,IAAfzzgB,GAAyB,GAAL,MAK7EkygB,IACA,gBAAC5rzB,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQqqU,qBAAsBjoS,MAAO,CAAEgB,UAAWi2Q,GAAa,EAAI,GAAK,IAA1G,WAEKw0gB,GAAuBf,KAAuBt9c,IAAcn2D,IAAc,GAAK,eAAC15S,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+X,aAAc,QAAzC,SAAmD,eAAC7Z,EAAA,EAAD,UAAaztF,EAAE,kCAGjJg72B,GAAuBhB,KAAsBt9c,IAAiBl2D,IAAc,GAAK,eAAC15S,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+X,aAAc,QAAzC,SAE9Ey0vB,KAAgB9qgB,GAAiBn7W,OAAS,KAAYyl4B,GAAWly3B,MAAQiw3B,GAAiBxj4B,OAAU,KAClG,gBAACg3E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAAlD,UACE,eAAC,KAAD,CAAagtB,MAAM,QAAQqV,MAAO,CAAEkG,YAAa,MAAQ,eAAChI,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,yCAG9G+71B,IAAe9qgB,GAAiBn7W,QAAUwj4B,GAAiBxj4B,OACzD,gBAACg3E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMT,WAAW,SAAlD,UACE,eAACugC,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,yCAA0C,CAAE3W,MAAO4nW,GAAiBn7W,QAAWyl4B,GAAWly3B,MAAQiw3B,GAAiBxj4B,WACtK,eAAC8iH,EAAA,EAAD,CAAQrJ,MAAO,CAAE2W,WAAY,EAAGC,cAAe,EAAGhK,WAAY,IAAMjiB,MAAM,UAAU4e,QAAS7kH,KAAK22lB,uBAAlG,SAA2H5qkB,EAAE,kCAGhH,IAAfwmW,GACE,eAAC/4Q,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,yCAEnD,eAACytF,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,iCAM7Dg72B,GAAuBf,KAAuBt9c,IAA6B,IAAfn2D,IAAoB,eAAC15S,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+X,aAAc,QAAzC,SAAmD,eAAC7Z,EAAA,EAAD,UAAaztF,EAAE,gCAGlJg72B,GAAuBhB,KAAsBr9c,IAA6B,IAAfn2D,IAAoB,eAAC15S,EAAA,EAAD,CAAMe,MAAM,EAAM0hC,MAAO,CAAE+X,aAAc,QAAzC,SAAmD,eAAC7Z,EAAA,EAAD,UAAaztF,EAAE,mCAMvJ,gBAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXJ,UAAWF,EAAQi/W,iBACnB39W,KAAK,SAHP,UAKE,eAAC3B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKE,eAACvmU,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,SAEE,oBAAM0kgB,UAAN,QAGJ,eAAC5tzB,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAU26W,GAAmB,QAAU,GAJ3C,SAQItkI,KAAa2oU,EAAoCkwP,SAC7C,eAACt0R,GAAD,CAEEp1V,SAAUg1V,4BACVrzR,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,GACTqmU,uBAAwBryW,KAAKqyW,uBAC7BskP,uBAAwB32lB,KAAK22lB,uBAC7BrhP,UAAWt1W,KAAKgnC,MAAM2i2B,gBACtB11hB,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE+mxB,gBAAiBrl4B,KACxDmylB,eAAgBA,IATXT,6BAWPnkS,KAAa2oU,EAAoCoqQ,gBAC/C,eAACxuS,GAAD,CAEEp1V,SAAUi1V,mCACVtzR,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,GACTqmU,uBAAwBryW,KAAKqyW,uBAC7BskP,uBAAwB32lB,KAAK22lB,uBAC7BrhP,UAAWt1W,KAAKgnC,MAAM2i2B,gBACtB11hB,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE+mxB,gBAAiBrl4B,KACxDmylB,eAAgBA,IATXR,oCAWPpkS,KAAa2oU,EAAoCmqQ,SAC/C,eAAChnE,GAAD,CACEh7f,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,GACTqmU,uBAAwBryW,KAAKqyW,uBAC7BiD,UAAWt1W,KAAKgnC,MAAM2i2B,gBACtB11hB,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE+mxB,gBAAiBrl4B,OAE1D,eAACu5zB,GAAD,CACEl7f,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,GACTqmU,uBAAwBryW,KAAKqyW,uBAC7BiD,UAAWt1W,KAAKgnC,MAAM2i2B,gBACtB11hB,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE+mxB,gBAAiBrl4B,YAMxE,eAAC6l4B,GAAD,CACEnthB,iBAAkBA,GAClBqohB,iBAAkBA,GAClByE,uBAAwBA,EACxB31c,iBAAkBn0b,KAAKm0b,iBACvBixc,kBAAmBA,GACnBS,mBAAoB7l4B,KAAK6l4B,mBACzB34pB,SAAQ,OAAEw3pB,SAAF,IAAEA,QAAF,EAAEA,GAAsB3g4B,IAAI,cAEtC,gBAACiyT,EAAA,EAAD,CACErrN,KAAM49xB,GACN5jwB,QAAS3kI,KAAKsja,WAFhB,UAIE,eAAC8U,EAAA,EAAD,UACE,gBAACxjH,EAAA,EAAD,CAAKx5O,QAAQ,OAAOnC,WAAW,SAA/B,UACE,eAAC27O,EAAA,EAAD,CAAKv4O,SAAU,EAAf,SAAoBtwD,EAAE,gCACtB,eAAC6oS,EAAA,EAAD,UACE,eAACl6L,EAAA,EAAD,CAAY7V,QAAS7kH,KAAKsja,WAA1B,SACE,eAAC,KAAD,aAKR,eAACrtG,EAAA,EAAD,UACE,eAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACGwiE,EAAc9zI,KAAI,SAAAi0I,GAAY,OAAI,eAACpkE,EAAA,EAAD,CAAmCe,MAAM,EAAMgB,GAAI,EAAnD,SAAuDqiE,EAAal5I,IAAI,UAA7Dk5I,EAAal5I,IAAI,iBAKrE,gBAACiyT,EAAA,EAAD,CACErrN,KAAM69xB,GACN7jwB,QAAS3kI,KAAKsja,WAFhB,UAIE,eAAC8U,EAAA,EAAD,UACE,gBAACxjH,EAAA,EAAD,CAAKx5O,QAAQ,OAAOnC,WAAW,SAA/B,UACE,eAAC27O,EAAA,EAAD,CAAKv4O,SAAU,EAAf,SAAoBtwD,EAAE,oCACtB,eAAC6oS,EAAA,EAAD,UACE,eAACl6L,EAAA,EAAD,CAAY7V,QAAS7kH,KAAKsja,WAA1B,SACE,eAAC,KAAD,aAKR,eAACrtG,EAAA,EAAD,UACE,eAACp9O,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACG8iD,EAAWp0H,KAAI,SAAAouH,GAAQ,OAAI,eAACv+C,EAAA,EAAD,CAA+Be,MAAM,EAAMgB,GAAI,EAA/C,SAAmDw8C,EAASrzH,IAAI,UAAYqzH,EAASrzH,IAAI,UAA9EqzH,EAASrzH,IAAI,iBAK1D,eAACiyT,EAAA,EAAD,CACErrN,KAAMo6xB,GACNpgwB,QAAS3kI,KAAK0o4B,uBAFhB,SAIE,uBAAKptxB,MAAO,CAAEx/B,QAASZ,EAAMZ,QAAQ,IAArC,UACE,eAAC,KAAD,CACE39B,QAAQ,sDACRxxC,OAAQ,CAAEi/3B,aAAc1C,MAE1B,eAAC,IAAD,UACG5D,EAA8B963B,KAAI,SAAC2uE,EAAM30E,GACxC,OAAO,+BACL,eAACsqH,EAAA,EAAD,CAAMzI,QAAS,WACb,EAAK6jxB,yBACL,EAAK9lxB,SAAS,CAAEkixB,YAAantzB,EAAM0lzB,eAAgB1lzB,EAAK5zE,IAAI,MAAO2j4B,iBAAkB/vzB,EAAK5zE,IAAI,YAC9F,EAAKi8vB,WAAWxzZ,OAHlB,SAKG70R,EAAK5zE,IAAI,aANGf,QAWrB,eAACozT,EAAA,EAAD,UACE,eAACzxM,EAAA,EAAD,CAAQE,QAAS7kH,KAAK0o4B,uBAAwBziyB,MAAM,UAApD,SACGl6E,EAAE,+BAKX,uBAAKuvF,MAAO,CAAE2B,SAAU,YAAxB,UACE,eAAC,KAAD,CACEqS,SAAU63M,KACVgrV,cACE,eAAC9hV,GAAA,EAAD,CACEr5M,QAASh3H,KAAKgnC,MAAMgmU,wBAAqBlxW,EACzCyyU,WAAYk2jB,GAA4B,KAAO,kBAAM,EAAKzkI,WAAW74b,KAAmBiJ,OACxF5B,WACEi2jB,IAA6B5ykB,KAAa2oU,EAAoCoqQ,gBAC1E,KACA,WACE,EAAKhixB,SAAS,CAAEoqP,kBAAmB,EAAKhmU,MAAMgmU,kBAAkB98V,MAAM,CAAC,cAAe,MAAO,QAAS,kBAAM,EAAK8vvB,WAAW74b,KAAmBiJ,UAGvJ3B,aACEg2jB,IAA6B5ykB,KAAa2oU,EAAoCoqQ,gBAC1E,KACA,WACEj61B,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIkmS,KACJx8N,MAAM,KAERhgE,EAAS,IAAIy5kB,MAA0B,IACvC48Q,EAAwB,CACtBz3wB,QAAS,CAAE8gU,WAAY,CAAE3oZ,KAAM271B,YAO/C,eAAC,KAAD,CACE/twB,SAAUk9O,KACV2lT,cACE,eAAC3kT,GAAA,EAAD,CACEX,iBAAkB7sW,KAAK6sW,iBACvBD,YAAa5sW,KAAKgnC,MAAM891B,kBAAehp4B,EACvC2yU,aAAc,kBAAM,EAAK7rN,SAAS,CAAEkxiB,iBAAiB,KACrDtlV,WAAY,WACV,EAAK5rN,SAAS,CAAEkixB,YAAa,EAAK991B,MAAM891B,YAAYp93B,IAAI,KAAM,QAAS,kBAAM,EAAKs4vB,WAAWxzZ,KAAmBC,iBAM1H,eAAC48P,GAAA,EAAD,CACE1+f,KAAMmpjB,GACN7lS,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAAEkxiB,iBAAiB,KAC1DxlS,aAAa,EACbJ,YAAar0D,GAAe8tkB,GAA0B572B,EAAE,qCAAsC,CAAEvd,KAAMk53B,KAAzF,UAAkH372B,EAAE,0BAApH,YAAiJ272B,GAAjJ,KACb15gB,SAAU05gB,GACV35gB,WAAYsvgB,GACZn0jB,aAAc,SAACjoS,GACb,MAGI,EAAKkzZ,mBAFPuvT,EADF,EACEA,mBACA5lb,EAFF,EAEEA,cAEEjM,KAAa2oU,EAAoCC,QACnDqsQ,EAAiB,CACf/qQ,aAAc96lB,EACdsoF,QAASm6nB,EACT13sB,aAEO6lR,KAAa2oU,EAAoCkwP,UAAa,EAAK1j1B,MAAM891B,YAQlF+B,EAAkB,CAChB35hB,UAAWjsU,EACXsoF,QAASm6nB,EACT13sB,QAASA,KAVXm9R,EAAkB,CAChBlwM,UAAWh4F,EACXsoF,QAASm6nB,EACT13sB,WACA8xR,kBASJ,EAAKl7M,SAAS,CAAEkxiB,iBAAiB,OAIrC,gBAAC99V,EAAA,EAAD,CACErxL,QAAS,kBAAM,EAAK/hB,SAAS,CAAE8ixB,2BAA2B,KAC1D,kBAAiB,0BACjB/6xB,KAAM+6xB,GACNxszB,QAAS,CACP64C,MAAO74C,EAAQmxzB,uBALnB,UAQE,eAACp0kB,EAAA,EAAD,UACE,eAACz8M,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,cAAlC,SAAiDl6E,EAAE,6CAErD,gBAACqqS,EAAA,EAAD,WACE,eAACzxM,EAAA,EAAD,CACEE,QAAS,kBAAM,EAAKjC,SAAS,CAAE8ixB,2BAA2B,KAC1Dz/xB,MAAM,UACN7sB,UAAWF,EAAQ69O,mBAHrB,SAKGhrS,EAAE,wBAGL,eAAC44F,EAAA,EAAD,CACEE,QAAS,SAACz8G,GACRA,EAAE87G,kBACF,EAAKyhxB,uBAEP1/xB,MAAM,UAAUkxN,WAAW,EAC3B/9O,UAAWF,EAAQ69O,mBANrB,SAQGhrS,EAAE,gDAIP682B,IACA,eAAC0B,GAAD,CACE3/xB,KAAMi+xB,GACN5xwB,QAASh3H,KAAKgnC,MAAMgmU,kBACpBroO,QAAS3kI,KAAK2o4B,oBACdrhkB,UAAW,WACT,EAAKqhkB,sBACL,EAAKt2hB,uBAAuB,c,GA12DN5tU,aAwuErBwwC,kBACbgG,aAz/Ea,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTm2C,OAAQ,OACRx4C,aAAc,aACdisC,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,KACpC5pC,MAAO,OACPe,SAAU,EACVZ,cAAe,UAEjB28W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,QAIVgyR,qBAAsB,CACpBznU,QAASZ,EAAMZ,QAAQ,EAAG,IAE5B69W,iBAAkB,CAChB78W,MAAO,OACPi2C,OAAQ,MACRl1C,SAAU,EACVD,UAAW,OACXN,QAAS,OACTm2C,WAAY,OACZjN,gBAAiB,eAEnB+8Q,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SAEf81C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlBwxU,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,WAEZwvU,kBAAmB,CACjBxvU,SAAU,QAEZ4qC,KAAM,CACJ5qC,SAAU,UACVuJ,UAAW,UACXtX,UAAWphC,EAAMZ,QAAQ,MAE3Bg1f,WAAY,CACV7zf,cAAe,MACfg7C,WAAY,UAEd+4c,aAAc,CACZ57c,UAAW,UACX3B,WAAY,EACZ71C,UAAW,QAEb0ysB,QAAS,CACPttqB,YAAatmC,EAAMZ,QAAQ,IAE7B03R,OAAQ,CACNhtP,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ7iF,KACvCg5C,MAAOJ,EAAMZ,QAAQ,GACrBi3C,OAAQr2C,EAAMZ,QAAQ,GACtB6sC,SAAU,OACVg+R,YAAa,UAEfhgS,QAAS,CACP4P,cAAe,cAEjB45M,cAAe,CACblnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACV4N,cAAe,YACfz5C,MAAO,QACP2xC,UAAW,SACX8N,WAAY,QACZx/C,OAAQ,QAEVqzP,KAAM,CACJ9yP,QAAS,WACTkpC,gBAAiB,WAGnB+qN,IAAK,CACHh1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,cAAe,SAE7D+qN,IAAK,CACHj1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDgrN,IAAK,CACHl1M,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,YAAa,SAE3DirN,IAAK,CACHn1M,WAAY,WAEdo1M,IAAK,CACHp1M,WAAY,WAGd8yM,KAAM,CACJ7oN,gBAAiB,WAEnBklxB,aAAc,CACZ3uzB,OAAQL,EAAMZ,QAAQ,EAAG,GACzBkB,SAAU,QAEZ40hB,cAAe,CACb90hB,MAAO,SACPy/C,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/BppC,QAASZ,EAAMZ,QAAQ,GAAK,IAE9B2vB,KAAM,CACJob,OAAQ,WAEVgrf,eAAgB,CACd3ne,YAAa,GAEfwra,GAAI,CACF34d,OAAQ,EACR2sC,WAAY,GACZwgB,YAAa,WAEf2hwB,sBAAuB,CACrB/tzB,SAAU,QA62EO,CAAE0yC,WAAW,IAChC7vE,aAAgB,gBAChB0/D,mBA9DsB,SAACu7Q,EAAoBC,GAC3C,IAAM0rgB,EAAoB1rgB,EAAiB5wU,SAAS0C,WAAaz2B,wBAAuB2kW,EAAiB5wU,SAAS0C,WAAa12B,sCACzHuw2B,EAAqB3rgB,EAAiB5wU,SAAS0C,WAAax2B,qBAAoB0kW,EAAiB5wU,SAAS0C,WAAa32B,sCACvHiv2B,EAA4BsB,GAAqBC,EAEjDvvS,EAAiBp8N,EAAiB5wU,SAAS0C,SAAS5iD,SAASgsB,gCAE7D0x2B,EAD0BpxvB,eAAuCukP,GACpBx5W,MAAM,CAAC,UAAW,SAAWue,kBAAekB,OAE/F,OAAO,aACL0l2B,oBACAC,qBACAvB,4BACAhuS,iBACAwwS,sBACGn01B,YAAyB,CAC1Bw0D,IAAKx9C,eACL/C,MAAOD,eACPqzQ,uBAAwBp9D,eACxBmnoB,uBAAwBxvI,eACxByvI,qBAAsBvooB,gBACtB+noB,iBAAkBlnoB,gBAClBqsoB,2BAA4BpsoB,eAC5B2poB,sBAAuB1poB,gBACvB+poB,4BAA6B9poB,gBAC7BgnoB,iBAAkBtvI,eAClBqyI,4BAA6BpyI,eAC7BsvI,eAAgBnooB,eAChBkroB,0BAA2BjroB,eAC3BqooB,qBAAsBpmrB,aAAkC4uJ,MACxDy3hB,qBAAsBrmrB,aAAkCupH,MACxD28jB,8BAA+BtvI,eAC/B+1I,iCAAkC51I,eAClCovI,iBAAkBtvI,eAClB73b,YAAax1Q,eACbyyQ,YAAaxyQ,eACbq+b,MAAOu0S,0BACPmqG,wBAAyBhpxB,yBAAc46e,6BACvCquS,8BAA+BjpxB,yBAAc66e,oCAC7CquS,wBAAyBlpxB,yBAAcsitB,6BACvC6mE,uBAAwBnpxB,yBAAcwitB,4BACtCksE,uBAAwB1qoB,eACxBjkJ,WAAYC,yBAAcooxB,IAC1BuD,oBAAqBznoB,eACrB0noB,uBAAwBznoB,eACxBqjE,oBAAqB9+Q,gBACrBs5E,WAAY8f,eACZJ,cAAeF,eACfmtvB,sBAAuBvqoB,eACvBgloB,0BAA2B/koB,eAC3BuqoB,oBAAqB3qoB,eACrB7wI,4BAA6B7mE,eAC7B+80B,qBAAsBhovB,gBACtBqtL,4BAA6B7gR,gBAC7B2yF,WAAYp1F,iBAvCX3T,CAwCAsnV,OAxJoB,SAACzvV,GAC1B,MAAO,CACLA,WACAqvR,mBAAoB,gBAAGzwM,EAAH,EAAGA,QAASv9E,EAAZ,EAAYA,QAAS8xR,EAArB,EAAqBA,cAAeC,EAApC,EAAoCA,oBAAqB04R,EAAzD,EAAyDA,eAAgBnvR,EAAzE,EAAyEA,UAAzE,OAAyF38R,EAAS,IAAI8iD,MAAyB,CACjJ87B,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,KAGT68R,gBACA24R,iBACA14R,sBACAuJ,gBAEFg+jB,mBAAoB,gBAAG/7wB,EAAH,EAAGA,QAASv9E,EAAZ,EAAYA,QAAZ,OAA0BrB,EAAS,IAAIm5kB,KAAyB,CAClFv6f,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,SAIX+/1B,wBAAyB,gBAAGz3wB,EAAH,EAAGA,QAASv9E,EAAZ,EAAYA,QAAZ,OAA0BrB,EAAS,IAAIq5kB,KAA8B,CAC5Fz6f,UACAv9E,cAEFu51B,iBAAkB,gBAAGh8wB,EAAH,EAAGA,QAASv9E,EAAZ,EAAYA,QAAZ,OAA0BrB,EAAS,IAAI+6C,MAAuB,CAC9E6jC,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,SAKXkoS,kBAAmB,gBAAGlwM,EAAH,EAAGA,UAAW1P,EAAd,EAAcA,QAASv9E,EAAvB,EAAuBA,QAAS8xR,EAAhC,EAAgCA,cAAhC,OAAoDnzR,EAAS,IAAIwjD,KAA6C,CAC/H8qC,YACA1P,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,KAGT68R,oBAEF+okB,kBAAmB,gBAAG35hB,EAAH,EAAGA,UAAW3jP,EAAd,EAAcA,QAASv9E,EAAvB,EAAuBA,QAAvB,OAAqCrB,EAAS,IAAIu5kB,KAAyC,CAC5Gh3Q,YACA3jP,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,SAIX6l2B,iBAAkB,gBAAG/qQ,EAAH,EAAGA,aAAcxygB,EAAjB,EAAiBA,QAASv9E,EAA1B,EAA0BA,QAA1B,OAAwCrB,EAAS,IAAIu6C,KAA2C,CAChH62iB,eACAxygB,UACAv9E,QAAQ,2BACHA,GADE,IAELisJ,QAAS,CACPh3J,IAAK,SAKX2o2B,oBAAqB,kBAAMj/1B,EAAS,IAAI0kD,OACxC4yO,iBAAkB,SAACw0R,GAEf9rjB,EADE8rjB,EACO,IAAI1iR,KAEN,IAAI/0Q,QAGfgjQ,cAAe,SAACy0R,GAEZ9rjB,EADE8rjB,EACO,IAAI/hR,KAEJ,IAAIp1Q,OAGjBuq0B,sBAAuB,SAACpzS,GAClBA,GACF9rjB,EAAS,IAAImzB,MAAqB,CAChCy5S,SAAU,OACVC,WAAYt7N,KAAeS,6BAsEnCxtB,KACAmoK,aAAmC,CAAEt2B,SAAUwioB,KAC/Cj8jB,qBAAU,CACR9pN,KAAM+lxB,GACN/7jB,oBAAoB,EACpBD,kBAAkB,EAClBlpN,cAAe,CACbksxB,WAAY,KACZh6R,UAAW,QAZFv7hB,CAebwuzB,K,ySc3oFIgH,E,4MACG55nB,kBAAoB,WACzB,MAGI,EAAK3mO,MAFPS,EADF,EACEA,SACA2hB,EAFF,EAEEA,SAGEA,IACF3hB,EAAS,IAAIutB,KAAoB,CAAE5L,cACnC3hB,EAAS,IAAIywB,KAA4B,CAAE9O,WAAUm5C,OAAQ,YAC7D96D,EAAS,IAAIuvB,KAAmC,CAAE5N,gB,EAI/C4kN,qBAAuB,WAC5B,IACEyxD,EACE,EAAKz4R,MADPy4R,aAEFA,EAAa6zV,KAAgB,GAC7B7zV,EAAa+uV,KAAmB,I,EA2D1Bg5O,aAAe,SAACC,GACtB,MAGI,EAAKzg2B,MAFPS,EADF,EACEA,SACAig2B,EAFF,EAEEA,WAEI3p2B,EAAK0p2B,EAAe5m4B,IAAI,MAE1B6m4B,GACFjg2B,EAAS,IAAI2vB,KAAiC,CAAE0lC,OAAQ/+D,KACxD,EAAK++tB,WAAWxpG,OAEhB7rnB,EAAS,IAAI+rB,KAAoBz1B,IACjC0J,EAAS,IAAI6rB,KAA2B,CAACwhF,SAAU5uH,iBAAO,CAACuh3B,EAAe5m4B,IAAI,gBAC9E,EAAKi8vB,WAAWtuG,O,EAIZsuG,WAAa,SAAC5tG,GACpB,MAGI,EAAKlonB,MAFPS,EADF,EACEA,SACAg4R,EAFF,EAEEA,aAGFh4R,EAAS,IAAI8J,IAAiC,CAC5CxT,GAAImxnB,EACJz2mB,QAAS,aAGXgnR,EAAayvV,GAAU,I,EAGjBy4O,aAAe,SAACF,GACtB,IAAQzxzB,EAAY,EAAKhvC,MAAjBgvC,QAEF4xzB,EAAWH,GAAkBA,EAAe3h4B,KAAI,SAAC+h4B,EAAU5u4B,GAC/D,IAAM0jmB,EAASkrS,EAAIhn4B,IAAI,WACjBin4B,EAAcprS,YAAsBC,IAAWkrS,EAAIhn4B,IAAI,QAC7D,OACE,cAAC80E,EAAA,EAAD,CACEe,MAAM,EADR,SAIE,cAAC0zC,EAAA,EAAD,CACEl0C,UAAWF,EAAQ+xzB,YACnBl8jB,UAAU,OACVlqN,QAAS,kBAAM,EAAK6lxB,aAAaK,IAHnC,SAKGC,KAPE7u4B,MAaX,OACE,cAAC08E,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,MAAMY,QAAS,EAAhD,SACGwwzB,K,4CA/GP,WACE,MAKI9q4B,KAAKkqC,MAJPgvC,EADF,EACEA,QACAltC,EAFF,EAEEA,QACAk/1B,EAHF,EAGEA,cACAlzvB,EAJF,EAIEA,SAGI66nB,EAAoBzzwB,sBAAY44I,GAAYA,EAAW5uH,iBAAO4uH,GAC9D86nB,EAAe9muB,EAAmBA,EAAQhjC,KAAI,SAACw3G,GACnD,IAAM2F,EAAY3F,EAAOz8G,IAAI,cAAgB,GACvCqiH,EAAW5F,EAAOz8G,IAAI,YACtBmiH,EAAe1F,EAAOz8G,IAAI,gBAC1B4yW,EAAWn2P,EAAOz8G,IAAI,YACtBwoD,EAAai0D,EAAO5/F,MAAM,CAAC,SAAS,eACpCwrC,EAAQo0D,EAAOz8G,IAAI,SACnB6yN,EAAap2G,EAAOz8G,IAAI,cACxB2iU,EAAck5R,YAAsBp/e,GAE1C,MAAO,CACL1/E,MAAO4lS,EACPhrU,MAAM,GAAD,OAAKyqH,EAAL,YAAkBC,EAAlB,YAA8BF,EAA9B,YAA8CywP,GACnDnoW,KAAMk4T,EACNqsc,QAAS7spB,EACThmH,KAAMsgH,EAAOz8G,IAAI,QACjB2iH,QAAQ,GAAD,OAAKlG,EAAOz8G,IAAI,aAAe,GAA/B,YAAqCy8G,EAAOz8G,IAAI,aAAe,IACtEk9B,GAAIu/E,EAAOz8G,IAAI,MACf8vX,YAAarzQ,EAAOz8G,IAAI,eACxB0iH,MAAOjG,EAAOz8G,IAAI,iBAAmBy8G,EAAOz8G,IAAI,gBAChDwoD,aACAH,QACAwqK,WAAU,OAAEA,QAAF,IAAEA,IAAc,SAtBC3+M,iBA0BzB+6vB,EAAapgwB,gBAAM5B,eAAc,SAACyoI,GACtCq5nB,EAAYpmwB,SAAQ,SAAC8zG,GACnBi5B,EAAW/xI,IAAI84G,EAAOv/E,GAAIu/E,MAE5Bw3B,EAAStrI,SAAQ,SAAC8zG,GAAD,OAAYi5B,EAAW/xI,IAAI84G,EAAOz8G,IAAI,MAAOy8G,SAG1DyypB,EAAgBJ,EACnB7pwB,KAAI,SAACivI,GAAD,OAAa+6nB,EAAWjvwB,IAAIk0I,EAAQl0I,IAAI,UAC5CwH,QAAO,SAAC0sI,GAAD,OAAwB,MAAXA,KAEvB,OACE,cAACp/D,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQssC,cAAelrC,QAAS,EAAlE,SACE,eAACzB,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,UACE,cAAC4+B,EAAA,EAAD,CAAYE,QAAQ,QAAQ6K,QAAQ,EAApC,SAA2C2mxB,IAC1Clr4B,KAAK6q4B,aAAa53H,Y,GAxEMxuuB,aAyKpBwwC,oBACbgG,aA/Ba,SAACC,GAAD,MAA+B,CAC1CsqC,cAAe,CACbpqC,QAAS,OACTnC,WAAY,aACZoC,SAAU,UAEZ4vzB,YAAa,CACX5lxB,OAAQ,cAwBO,CAAE2J,WAAW,IAChCnQ,mBApBsB,SAACu7Q,GAAD,OAAwBtnV,YAAyB,CACvEwytB,eAAgB/pnB,cAChB70F,OAAQD,gBAFsC3T,CAG7CsnV,MAEwB,SAACzvV,GAO1B,MAAO,CACLg4R,aAPmB,SAACyvV,EAAkBznjB,GACtChgE,EAAS,IAAI0J,IAA6B,CACxCpT,GAAImxnB,EACJznjB,WAKFhgE,eAOFwU,YAAgB,gBAHH81B,CAIbw1zB,G,2CC0BM791B,EAAkBkG,YAAyB,CAC/C07E,4BAA6B7mE,gBAgBlBstB,oBACbgG,aA9Pa,SAACC,GAAD,MAAmB,CAChCkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,IAEVk+tB,UAAW,CACTpmrB,aAAc,QAEhB83wB,WAAY,CACV9lxB,OAAQ,UACRpf,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,UAoP/B6c,YAAgB,gBAChB0/D,kBAAQjyE,GAhBmB,SAACjC,GAC1B,MAAO,CACLq1tB,WAAY,SAAC/nnB,GACXttG,EAAS,IAAI+rB,KAAoBuhF,EAAQl0I,IAAI,QAC7C4mC,EAAS,IAAI6rB,KAA2B,CAACwhF,SAAU//H,eAAK,CAACggI,OACzDttG,EAAS,IAAI0J,IAA6B,CACxCpT,GAAIywnB,IACJ/mjB,MAAM,UAUdgf,cAJa10C,EAjOb,SAAC,GAOO,IANLiE,EAMI,EANJA,QACAl+B,EAKI,EALJA,KACAow1B,EAII,EAJJA,aACA58wB,EAGI,EAHJA,4BACAziG,EAEI,EAFJA,EACAi0uB,EACI,EADJA,WAGKlpiB,EAAmB97K,EAAKj3C,IAAI,oBAAsBi3C,EAAKj3C,IAAI,cAAgBi3C,EAAKj3C,IAAI,aAAa4d,MAAK,SAAC0lG,GAAD,OAAcA,EAAStjH,IAAI,QAAUi3C,EAAKj3C,IAAI,uBAAuB,KAC3Ki8F,EAAShlD,EAAKp6B,MAAM,CAAC,YAAa,OAAQ,OAC1C0+rB,EAAYtkqB,EAAKp6B,MAAM,CAAC,gBAAiB,IACzC2+rB,EAAavkqB,EAAKp6B,MAAM,CAAC,iBAAkB,IAC3C4+rB,EAAWxkqB,EAAKp6B,MAAM,CAAC,eAAgB,IACvC6xV,EAAaz3T,EAAKp6B,MAAM,CAAC,aAAc,EAAG,cAAgB,GAC1Dyq3B,EAAuBrw1B,EAAKp6B,MAAM,CAAC,aAAc,EAAG,gBACrDo6B,EAAKp6B,MAAM,CAAC,aAAc,EAAG,SAAU,gBACvC,GAEL,OACE,cAAComG,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,eAAC8B,EAAA,EAAD,WACE,cAAC1N,EAAA,EAAD,CAAYE,QAAQ,KAAKtgC,UAAWF,EAAQuguB,UAA5C,SAAwD1txB,EAAE,qBAC1D,cAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAIpB,WAAW,EAAMc,QAAS,EAAGvB,aAAc,aAArE,UACE,eAACF,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,kCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKj3C,IAAI,iBAEZ,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,0CADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKj3C,IAAI,gBAEZ,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,8BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKj3C,IAAI,eAAiBwgU,YAAWvpR,EAAKj3C,IAAI,gBAAkB,KAEnE,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,mCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKj3C,IAAI,WAAawgU,YAAWvpR,EAAKj3C,IAAI,YAAc,KAE3D,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,qCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKj3C,IAAI,cAAgBwgU,YAAWvpR,EAAKj3C,IAAI,eAAiB,KAEjE,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,4BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEG0koB,GACA,cAAC,IAAD,CACCr5mB,MAAM,UACNqV,MAAO,CAAE+J,OAAQ,WACjB0pN,UAAU,OACVlqN,QAAS,kBAAMm7oB,EAAW1gD,IAJ3B,SAME1/G,YAAsB0/G,IAAc,iCAIzC,eAACzmoB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,0BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEI4zC,EACIxzE,EAAKp6B,MAAM,CAAC,YAAa,OAAQ,SAE/B,cAAC,IAAD,CACEw4D,UAAWF,EAAQiyzB,WACnBl83B,GAAE,UAAK8mB,oBAAL,YAA0BiqE,GAF9B,SAIGhlD,EAAKp6B,MAAM,CAAC,YAAa,OAAQ,aAK9C,eAACi4D,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,2BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEI4koB,GACA,cAAC,IAAD,CACEv5mB,MAAM,UACNqV,MAAO,CAAE+J,OAAQ,WACjB0pN,UAAU,OACVlqN,QAAS,kBAAMm7oB,EAAWxgD,IAJ5B,SAMG5/G,YAAsB4/G,IAAa,iCAI1C,eAAC3moB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,6BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAACw2pB,EAAA,EAAD,CACE5iuB,KACEggH,EACIikP,EACA,cAAC,IAAD,CACEr5R,UAAWF,EAAQiyzB,WACnBl83B,GAAE,UAAK8mB,oBAAL,YAA0BilB,EAAKp6B,MAAM,CAAC,aAAc,EAAG,QAF3D,SAIG6xV,IAGTlmT,WAAY8+0B,MAGhB,eAACxyzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,6BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEI2koB,GACA,cAAC,IAAD,CACEt5mB,MAAM,UACNqV,MAAO,CAAE+J,OAAQ,WACjB0pN,UAAU,OACVlqN,QAAS,kBAAMm7oB,EAAWzgD,IAJ5B,SAMG3/G,YAAsB2/G,IAAe,iCAI5C,eAAC1moB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,yBADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACG5/B,EAAKp6B,MAAM,CAAC,SAAU,YAEzB,eAACi4D,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,kCADL,OAGA,eAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACuC,oBAAnC5/B,EAAKj3C,IAAI,uBACT,CACEi3C,EAAKp6B,MAAM,CAAC,UAAW,aACvBo6B,EAAKp6B,MAAM,CAAC,UAAW,aACvBo6B,EAAKp6B,MAAM,CAAC,UAAW,OAAQ,UAC/Bo6B,EAAKp6B,MAAM,CAAC,UAAW,WAAY,UACnCo6B,EAAKp6B,MAAM,CAAC,UAAW,YACvBo6B,EAAKp6B,MAAM,CAAC,UAAW,UAAW,WAClCrV,QAAO,SAAC+/3B,GAAD,OAAoBA,KAAgB7p3B,KAAK,MAGf,mBAAnCu5B,EAAKj3C,IAAI,uBAEPgoB,EAAE,4BAI+B,oBAAnCivB,EAAKj3C,IAAI,wBACP+yN,EACE,CACEA,EAAiBl2M,MAAM,CAAC,YAAa,MACrCk2M,EAAiBl2M,MAAM,CAAC,YAAa,MACrCk2M,EAAiBl2M,MAAM,CAAC,YAAa,MACrCk2M,EAAiBl2M,MAAM,CAAC,gBAAiB,MACzCk2M,EAAiBl2M,MAAM,CAAC,aAAc,MACtCk2M,EAAiBl2M,MAAM,CAAC,eAAgB,OACxCrV,QAAO,SAAC+/3B,GAAD,OAAoBA,KAAgB7p3B,KAAK,MAClDsK,EAAE,iCAI6B,sBAAnCivB,EAAKj3C,IAAI,uBAEPgoB,EAAE,kCAIR,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMI,MAAM,EAAMgB,GAAI,GAAvC,UACE,eAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,gCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,EAAD,CACEpsE,KAAK,gBACLsyB,MAAO/U,EAAE,4BACTi/F,YAAaj/F,EAAE,kCACfisH,SAAUh9F,EAAKj3C,IAAI,iBACnBioC,QAASo/1B,EACTR,YAAY,EACZt+0B,SAAUtR,EAAKp6B,MAAM,CAAC,YAAa,SAAU,2B,0BC1GlDq0D,oBACbgG,aAnIa,SAACC,GAAD,MAAmB,CAChCkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,IAEVk+tB,UAAW,CACTpmrB,aAAc,QAEhB8vC,MAAO,CACL7nF,MAAO,QAETg6nB,cAAe,CACbx5nB,QAAS,GACTP,OAAQ,IAEVyzG,MAAO,CACL5zG,QAAS,OACTM,eAAgB,WAChBI,QAAS,gBAEXyvzB,QAAS,CACPtlyB,MAAO/qB,EAAM+pC,QAAQU,OAAOC,OAE9B4lxB,YAAa,CACXrkxB,SAAUjsC,EAAM82C,WAAWo/B,GAAGjqC,UAEhCskxB,QAAS,CACPjwzB,SAAU,SAEZu2xB,kBAAmB,CACjBr2xB,eAAgB,gBAqGlBv8B,YAAgB,gBAFH81B,EApFb,SAAC,GAIM,IAHLiE,EAGI,EAHJA,QACA81G,EAEI,EAFJA,MACAjjK,EACI,EADJA,EAEMy0pB,EAAqBxxf,EAAMjrL,IAAI,oBAC/Bw23B,EAA6B7o1B,sBAAY8V,eAC/C,EAAkE/iB,WAAe7xB,iBAAjF,mBAAO843B,EAAP,KAAkCC,EAAlC,KAEMC,EAAqC,SAACzv4B,GAAD,OAAmB,SAACsmX,GAC7DkphB,GAA6B,SAAAn6S,GAAS,OAAIA,EAAU9plB,IAAIvL,EAAOsmX,QAGjE,OACE,gCAEI83gB,GACE,sBAAKj/wB,MAAO,CAAE4M,WAAY,EAAGpsC,QAAS,EAAG++C,OAAQ,iBAAjD,UACE,cAACrhB,EAAA,EAAD,CAAYvT,MAAM,cAAlB,SACG,0DAEFylyB,EAA0B/o4B,WAAWqG,KAAI,SAAC/F,EAAO9G,GAAR,OACxC,gCACE,cAACq9G,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE4M,WAAY,IAArD,kCACqBjlH,EAAM,MAE3B,cAACu2G,EAAA,EAAD,CAAYvT,MAAM,cAAcqV,MAAO,CAAE4M,WAAY,IAArD,kCACqBjlH,EAAM,QAL7B,oBAAuB9G,UAY/B,cAACq9G,EAAA,EAAD,CACEpgC,UAAWF,EAAQo8nB,cACnB57lB,QAAQ,KAFV,SAIG3tF,EAAE,uBAEL,eAAC8sD,EAAA,EAAD,CACEW,WAAW,EACXc,QAAS,EAFX,UAIG00G,GAASA,EAAMjrL,IAAI,YAChBirL,EAAMjrL,IAAI,YAAYiF,KAAI,SAAC06P,EAAcvnQ,GAGzC,OAF0BkB,QAAQqmQ,EAAQ3/P,IAAI,SAAW2/P,EAAQ3/P,IAAI,YAAY0J,MAAK,SAAAupH,GAAO,OAA2B,IAAvBA,EAAQjzH,IAAI,WAG3G,cAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAACmyuB,EAAA,EAAD,CACElvqB,KAAMmxC,EAAMjrL,IAAI,QAChB2/P,QAASA,EACT88a,mBAAoBA,EACpBsS,gBAAiB9jgB,EAAMjrL,IAAI,aAC3BupzB,kCAAmCitE,EAA6BqR,EAAmCzv4B,GAAS,QANhH,oBAA4CA,OAW9C,GAEJ,cAAC08E,EAAA,EAAD,CACEW,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQ64xB,kBAJrB,SAMG/irB,GAASA,EAAMjrL,IAAI,eAChBirL,EAAMjrL,IAAI,eAAe6E,WAAWI,KAAI,SAACqhrB,EAAWlurB,GAAZ,OACxC,cAAC612B,EAAA,EAAD,CAEEpqL,WAAYyC,EACZpzd,aAAcjoC,EAAMjrL,IAAI,iBAH1B,uBACuB5H,OAKvB,c,6JCtGH0v4B,GAAb,4MACS7k2B,MAAQ,CACbw2T,OAAO,EACPs2T,iBAAiB,GAHrB,EAMS7lS,kBAAoB,WACzB,EAAKrrQ,SAAS,CAAEkxiB,iBAAkB,EAAK9snB,MAAM8snB,mBAPjD,EAmHSz+hB,aAAe,WAChB,EAAKnrF,MAAM4h2B,UAAY,EAAKlpxB,SAAS,CAAC46O,OAAO,KApHrD,EAsHSloO,aAAe,WAChB,EAAKprF,MAAM4h2B,UAAY,EAAKlpxB,SAAS,CAAC46O,OAAO,KAvHrD,EAyHUuuiB,oBAAsB,SAAC9q2B,GAC7B,EAAKiJ,MAAM8h2B,qBAAqB/q2B,IA1HpC,EA4HUgr2B,kBAAoB,SAAC7j4B,EAAkC64B,GAC7D74B,EAAE87G,kBACF,EAAKh6E,MAAMgi2B,mBAAmBjr2B,IA9HlC,4CAUE,WAAiB,IAAD,OACd,EAKIjhC,KAAKkqC,MAJPii2B,EADF,EACEA,IACAjzzB,EAFF,EAEEA,QACAkzzB,EAHF,EAGEA,YACAztL,EAJF,EAIEA,mBAGIppf,EAAc42qB,EAAIpo4B,IAAI,eAEtBso4B,EACJ,cAAC,IAAM9hnB,SAAP,UACE,cAAC7vJ,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,SAACz8G,GAAD,OAAO,EAAK6j4B,kBAAkB7j4B,EAAG+j4B,EAAIpo4B,IAAI,QAFpD,SAIE,cAAC,KAAD,CAAcojH,SAAS,cAKvBmlxB,EACJ,eAAC,IAAM/hnB,SAAP,WACE,cAAC7vJ,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS85lB,EAFX,SAIE,cAAC,KAAD,CAAiBx3lB,SAAS,YAE5B,cAACuT,EAAA,EAAD,CACE3+H,KAAK,QACL8oH,QAAS,SAACz8G,GACRA,EAAE87G,kBACF,EAAK+pQ,qBAJT,SAOE,cAAC,KAAD,CAAY9mQ,SAAS,eAI3B,OACE,eAACtuC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVT,WAAW,SAHb,UAKE,cAACJ,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,EAFN,SAIE,cAAC4+B,EAAA,EAAD,UAEI+7G,EACE,cAAC,KAAD,CACEpuG,SAAS,QACT/tC,UAAWm0C,KAAYvtH,KAAKgnC,MAAMw2T,OAAStkR,EAAQs7kB,eAErD,cAAC,KAAD,CACErtiB,SAAS,QACT/tC,UAAWm0C,KAAYvtH,KAAKgnC,MAAMw2T,OAAStkR,EAAQs7kB,mBAK7D,cAAC37kB,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GAFN,SAIE,eAAC/B,EAAA,EAAD,CACEW,WAAW,EACXE,UAAW,MACXI,QAAQ,gBACRb,WAAW,SAJb,UAME,cAACJ,EAAA,EAAD,CACEe,MAAM,EADR,mBAGMuyzB,EAAIpo4B,IAAI,kBAEd,cAAC80E,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWm0C,KAAYvtH,KAAKgnC,MAAMw2T,OAAStkR,EAAQs7kB,aAFrD,SAKI43O,EACI,KACA72qB,EACE82qB,EACAC,SAKd,cAACjjS,GAAA,EAAD,CACE1+f,KAAM3qG,KAAKgnC,MAAM8snB,gBACjB7lS,kBAAmBjuX,KAAKiuX,kBACxB/kD,aAAc,WACZ,EAAK6ikB,oBAAoBI,EAAIpo4B,IAAI,OACjC,EAAKkqX,qBAEPD,SAAUm+gB,EAAIpo4B,IAAI,wBA9G5B,GAA8C0gC,IAAMkV,WAkIrCs7B,qBACb44lB,cACA5ylB,aA3Ja,SAACC,GAAD,MAA+B,CAC5C3jE,KAAM,GACNi9oB,YAAa,CACXp5kB,QAAS,YAyJX0rV,cAHa7xV,CAIb42zB,I,mBC5Ca52zB,qBACbgG,aAjHa,SAACC,GAAD,MAAmB,CAChCkqC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,IAEVk+tB,UAAW,CACTpmrB,aAAc,QAEhBk5wB,YAAa,CACXtmyB,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B+iF,OAAQ,eAuGVlmE,YAAgB,gBAFH81B,EAzFb,SAAC,GAIO,IAHLiE,EAGI,EAHJA,QACAntD,EAEI,EAFJA,EACAgnqB,EACI,EADJA,cAEKl/d,EAAkBk/d,GAAiBA,EAAcnyqB,MAAM,CAAC,WAAY,qBAAuB3I,iBAC3Fi+F,EAAY68kB,GAAiBA,EAAchvrB,IAAI,MACrD,OACE,cAACijH,EAAA,EAAD,CAAM5tC,UAAWF,EAAQksC,KAAzB,SACE,eAAC8B,EAAA,EAAD,WACE,cAAC1N,EAAA,EAAD,CAAYE,QAAQ,KACRtgC,UAAWF,EAAQuguB,UAD/B,SAC2C1txB,EAAE,uBAC7C,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,UAEE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAChBpB,WAAW,EAAMc,QAAS,EAAGvB,aAAc,aADjD,UAEE,eAACF,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,iCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACE,cAAC,IAAD,CACExB,UAAWF,EAAQqzzB,YACnBt93B,GAAE,UAAK4mB,2BAAL,YAAiCqgF,GAFrC,SAIG68kB,EAAchvrB,IAAI,YAGvB,eAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,gCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACGm4mB,EAAcnyqB,MAAM,CAAC,WAAY,UAAW,YAE/C,eAACi4D,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,6BADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACGm4mB,EAAcnyqB,MAAM,CAAC,WAAY,OAAQ,eAI9C,eAACi4D,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAChBpB,WAAW,EAAMc,QAAS,EAAGvB,aAAc,aADjD,UAEE,eAACF,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,sCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SAEIi5I,EAAgB7qN,KAAI,SAACgsX,EAAe74X,GAClC,IAAM64W,EAAgBggB,EAAcjxX,IAAI,iBACxC,OACE,wCAEOixX,EAAcjxX,IAAI,UAFzB,OAGMixW,EAAcj5W,KAAd,YACSi5W,EAAchsW,KAAI,SAACisX,GAAD,OAAkBA,EAAalxX,IAAI,YAAU0d,KAAK,MAD7E,KAEI,KALV,YAAetlB,SAavB,eAAC08E,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,iCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACGm4mB,EAAcnyqB,MAAM,CAAC,WAAY,WAAY,YAEhD,eAACi4D,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,UACG7uD,EAAE,gCADL,OAGA,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAtB,SACGm4mB,EAAcnyqB,MAAM,CAAC,4B,wICvBvBq0D,qBACb91B,YAAgB,gBAChB0/D,mBAPsB,SAAC73E,GAAD,OAAW8L,YAAyB,CAC1D051B,kBAAmBjgrB,eACnBkgrB,0BAA2BjgrB,gBAFM15K,CAGhC9L,KAIwB,MAFZiuC,EAlE2E,SAAC/qC,GACzF,IACEygE,EAOEzgE,EAPFygE,KACA6hyB,EAMEti2B,EANFsi2B,kBACAC,EAKEvi2B,EALFui2B,0BACA9nwB,EAIEz6F,EAJFy6F,QACAuyL,EAGEhtR,EAHFgtR,UACAw1kB,EAEExi2B,EAFFwi2B,0BACA3g3B,EACEme,EADFne,EAWI4g3B,EARc,SAAoBjx4B,GACtC,IAAMD,EAAMgpC,WAIZ,OAHAA,aAAgB,WACdhpC,EAAIqsC,QAAUpsC,KAETD,EAAIqsC,QAGyB42Q,CAAY+tlB,GASlD,OAPAho2B,aAAgB,WACTgo2B,IAA6BE,GAAkCH,IAClEE,IACA/nwB,OAED,CAAC8nwB,IAGF,cAACz2kB,GAAA,EAAD,CACErrN,KAAMA,EACNg6B,QAASA,EACT,kBAAiB54G,EAAE,uDACnB,mBAAkBA,EAAE,wDAJtB,UAOK0g3B,GAA6BD,EAC1B,qCACE,eAACv2kB,GAAA,EAAD,CAAe36M,MAAO,CAAEhgC,MAAO,KAA/B,UACE,cAACogX,EAAA,EAAD,CAAmBz6Z,GAAG,cAAcy4E,QAAQ,QAA5C,SACG3tF,EAAE,wEAEL,cAAC2va,EAAA,EAAD,CAAmBz6Z,GAAG,eAAey4E,QAAQ,QAA7C,SACC3tF,EAAE,2DAGL,eAACqqS,GAAA,EAAD,WACE,cAACzxM,GAAA,EAAD,CAAQE,QAAS8f,EAAS1+B,MAAM,UAAhC,SACCl6E,EAAE,wBAEH,cAAC44F,GAAA,EAAD,CAAQE,QAASqyM,EAAWjxN,MAAM,UAAUkxN,WAAW,EAAvD,SACGprS,EAAE,2BAIT,cAACkqS,GAAA,EAAD,UAAe,cAAC2L,EAAA,EAAD,W,6BCyHrB88Y,IA9H4B7nlB,YAAO,MAAPA,EAAc,YAC9C,MAAO,CACL/6C,QAA2B,EAFwC,EAApBZ,MAEhCZ,UACfi3C,OAAQ,OACRn2C,QAAS,OACTM,eAAgB,SAChBzC,WAAY,a,kDAmId,WAAY/uC,GAAa,IAAD,8BACtB,cAAMA,IAXDlD,MAAQ,CACb461B,UAAW,EACXgL,SAAU,GACVz5wB,SAAU,KACVmjlB,SAAU,GACVw1L,UAAU,EACVe,8BAA8B,EAC9BC,qBAAsB703B,kBAGA,EA4ShB803B,6BAA+B,SAACpiyB,GACtC,EAAKiY,SAAS,CACZiqxB,kCAAuC/w4B,IAAT6uG,EAAqBA,GAAQ,EAAK3jE,MAAM6l2B,gCA9SlD,EAkThBG,wCAA0C,WAChD,MAGI,EAAK9i2B,MAFP8kJ,EADF,EACEA,OAIF4iN,EALA,EAEEA,sCAGmC5iN,EAAMjrL,IAAI,aAAcirL,EAAMjrL,IAAI,MAAO,UAC9E,EAAKgp4B,8BAA6B,IAzTZ,EA4ThB3zL,eAAiB,SAACjykB,GACxB,EAAKvkB,SAAS,CAAEuQ,SAAUgU,EAAMziB,iBA7TV,EAgUhB0+qB,aAAe,SAACx0M,GACtB,IAAM14e,EAAY,EAAKhsE,MAAM8kJ,MAAMjrL,IAAI,aACjCsuN,EAAU,EAAKnoL,MAAM8kJ,MAAMjrL,IAAI,MAGT,IAAxB6qlB,EAAU7qlB,IAAI,OAAemyG,GAC/B,EAAKhsE,MAAMynW,uBAAuBz7R,EAAWm8G,GAC7C,EAAKzvG,SAAS,CACZiqxB,8BAA8B,KAGhC,EAAK3i2B,MAAM+zW,iBAAiB5rL,EAASu8X,EAAU7qlB,IAAI,UAErD,EAAK6+G,SAAS,CAAEuQ,SAAU,QA7UJ,EAgVhBkmlB,gBAAkB,WACxB,EAAKz2lB,SAAS,CAAEuQ,SAAU,QAjVJ,EAoVhB85wB,eAAiB,SAAC9lwB,GACG,WAAvBA,EAAMn6G,OAAOtxB,OACf,EAAKknH,SAAS,CAAE0zlB,SAAUnvkB,EAAMn6G,OAAOtxB,SAtVnB,EA0VhBijtB,mBAAqB,SAACv2sB,EAAG64B,GAE/B74B,EAAE87G,kBACF,EAAKh6E,MAAMy0qB,mBAAmBv2sB,EAAG64B,IA7VX,EA+VhB+q2B,qBAAuB,SAACkB,GAE1BA,KADoB,EAAKhj2B,MAAMqE,MAAMoE,OAAO1R,IAE9C,EAAK2hF,SAAS,CACZ0zlB,SAAU,KAGd,EAAKpsqB,MAAMij2B,eAAeD,IAtWJ,EAwWhBhB,mBAAqB,SAACgB,GAC5B,EAAKhj2B,MAAMkj2B,aAAaF,IAzWF,EA2WhBG,qBAAuB,SAACjl4B,EAAGy8G,GACjCA,EAAQz8G,GACR,EAAK8hC,MAAM4xqB,eAAe,EAAK5xqB,MAAMko0B,UAAUpu1B,OAAOjgB,IAAI,QA7WpC,EA+WhB66sB,qBAAuB,SAACx2sB,EAAGy8G,GACjCA,EAAQz8G,GACR,IAAM4mL,EAAQ,EAAK9kJ,MAAMko0B,UAAUzw1B,MAAK,SAAAwq3B,GACtC,OAAOA,EAAIpo4B,IAAI,iBAAmBqE,EAAE4kB,OAAOtxB,SAGvC22N,EAAkBrjC,EAAQA,EAAMjrL,IAAI,MAAM9C,WAAa,GAE7D,EAAKipC,MAAM00qB,qBAAqBvsf,IAvXV,EAyXhBi7qB,iBAAmB,WACzB,EAAK1qxB,SAAS,CAAEkpxB,UAAU,KA1XJ,EA4XhByB,gBAAkB,WACxB,EAAK3qxB,SAAS,CAAEkpxB,UAAU,KA7XJ,E,qDAIxB,WACE,MAAqD9r4B,KAAKkqC,MAAlDs3N,EAAR,EAAQA,YAAahzI,EAArB,EAAqBA,4BACrBxuH,KAAK4iH,SAAS,CACZkqxB,qBAAsBrroB,aAAwB,CAAEjzI,8BAA6BgzI,kBAG/ExhQ,KAAKkqC,MAAMsj2B,cAAcxt4B,KAAKkqC,MAAMqE,MAAMoE,OAAO1R,IACjDjhC,KAAKkqC,MAAMuj2B,kBACNzt4B,KAAKkqC,MAAMqtjB,YAAYx7lB,MAAQiE,KAAKkqC,MAAMkqkB,uBAC7Cp0mB,KAAKkqC,MAAMkqkB,sBAAsBp0mB,KAAKkqC,MAAMoiB,UAE1CtsD,KAAKkqC,MAAMgjX,YAAcltZ,KAAKkqC,MAAMgjX,WAAWplX,UAAW9nC,KAAKkqC,MAAMgjX,WAAWplX,QAAQ8/Q,UAAY,K,gCAG1G,SAA0BvpM,GAAY,IAAD,IACnC,EAAqDr+G,KAAKkqC,MAAlDs3N,EAAR,EAAQA,YAAahzI,EAArB,EAAqBA,8BACjB,UAACnQ,EAAUmjJ,mBAAX,aAAC,EAAuBzlQ,QAAxB,UAAgCiE,KAAKkqC,MAAMs3N,mBAA3C,aAAgC,EAAwBzlQ,OAC1DiE,KAAK4iH,SAAS,CACZkqxB,qBAAsBrroB,aAAwB,CAAEjzI,8BAA6BgzI,oB,oBAKnF,WAAiB,IAAD,OACd,EAeIxhQ,KAAKkqC,MAdPgvC,EADF,EACEA,QACA81G,EAFF,EAEEA,MAEA+jgB,GAJF,EAGE1ge,QAHF,EAIE0ge,eACAhnqB,EALF,EAKEA,EACAqm1B,EANF,EAMEA,UAEA36J,GARF,EAOEj2c,YAPF,EAQEi2c,cAEAlgH,GAVF,EASE6zS,aATF,EAUE7zS,aACA2jC,EAXF,EAWEA,QACAq3O,EAZF,EAYEA,cACA/jvB,EAbF,EAaEA,4BACAyvR,EAdF,EAcEA,iBAGF,EAMIj+Y,KAAKgnC,MALPmsF,EADF,EACEA,SACAmjlB,EAFF,EAEEA,SACAw1L,EAHF,EAGEA,SACAe,EAJF,EAIEA,6BACAC,EALF,EAKEA,qBAGIh6M,EAAkB9jgB,EAAMjrL,IAAI,aAC5B+twB,EAAgB9ilB,EAAMjrL,IAAI,UAC1BizN,EAAahoC,EAAMjrL,IAAI,cACvB2p4B,EAAsB77H,aAA4B,CAAErjpB,8BAA6BsjpB,gBAAe96iB,eAChG88F,GAAoBg+c,GAAiB47H,EAAuB3h3B,EAAE,yCAA2C,KAEzG4h3B,EACJ,cAAC1jF,GAAA,EAAD,CACEvuzB,MAAM,SACNwuzB,gBAAiB,SAAC9hzB,EAAGy8G,GAAJ,OAAgB,EAAKwoxB,qBAAqBjl4B,EAAGy8G,IAFhE,SAIE,eAAChsC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVI,QAAQ,gBACRb,WAAW,SACXuB,KAAK,SALP,UAOE,cAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,IACtB,eAAC/B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJ3B,WAAW,SACXO,WAAW,EAJb,UAME,cAACggC,EAAA,EAAD,CAAYvT,MAAM,UAAUyT,QAAQ,SAAStgC,UAAWF,EAAQ00zB,kBAAhE,SACG7h3B,EAAE,mCAEL,cAAC,KAAD,CAASo7F,SAAS,QAAQlhB,MAAM,oBAMxC,OACE,sBAAK7sB,UAAWF,EAAQM,UAAxB,UACE,eAACX,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQwwD,OAA1C,UACE,cAAC7wD,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ8oD,KAArC,SACE,cAACxoB,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo8nB,cAAe57lB,QAAQ,KAAtD,SAA4Ds1E,EAAMjrL,IAAI,YAExE,cAAC80E,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQy1P,cAArC,SACE,qBAAKrzN,MAAO,CAAEh/B,SAAU,eAAxB,SACE,cAACsotB,EAAA,EAAD,CACEn/rB,OAAQupF,EAAMjrL,IAAI,cAClBioC,QAAS8g2B,EACT35wB,SAAUA,EACVkU,WAAYrnI,KAAKo5sB,eACjBlykB,YAAalnI,KAAKq5sB,gBAClB+pF,aAAcpjyB,KAAKojyB,aACnBlmrB,SAAU40pB,GAAiB47H,EAC3B55kB,gBAAiBA,EACjB+5kB,mBAAoB/7H,QAI1B,cAACj5rB,EAAA,EAAD,CAAMe,MAAM,EAAMR,UAAWF,EAAQ40zB,kBAArC,SACE,eAAC53kB,EAAA,EAAD,CACElrM,YAAW,WAAMj/F,EAAE,mCAAR,KACX+U,MAAO/U,EAAE,6BACTvd,KAAK,WACLuxF,QAAQ,EACRyb,SAAUx7G,KAAKit4B,eACfvx4B,MAAqB,KAAb46sB,GAAmB87J,EAAapjrB,EAAMjrL,IAAI,eAAiBuysB,EACnEl9nB,UAAWF,EAAQq3xB,UACnBzzQ,YAAa,CACXooE,UAAW,CACT/mQ,UAAWn+Z,KAAKst4B,iBAChBj/c,SAAUrub,KAAKut4B,gBACfn0zB,UAAWF,EAAQ60zB,aACnBj6wB,WAAY,CACVxY,MAAO,CACL9/B,SAAU,QAfpB,UAqBG42xB,GAAaA,EAAUtv2B,UAAUkG,KAAI,SAACmj4B,GACrC,IAAM6B,EAAcvp2B,cACpB,OAAO,cAACwlxB,GAAA,EAAD,CAELvuzB,MAAOyw4B,EAAIpo4B,IAAI,eACfmmzB,gBAAiB,SAAC9hzB,EAAGy8G,GAAJ,OAAgB,EAAK+5lB,qBAAqBx2sB,EAAGy8G,IAC9DwQ,aAAc,WACe,MAAvB24wB,EAAYlm2B,SACdkm2B,EAAYlm2B,QAAQutF,gBAGxBC,aAAc,WACe,MAAvB04wB,EAAYlm2B,SACdkm2B,EAAYlm2B,QAAQwtF,gBAXnB,SAeL,cAAC24wB,GAAD,CACExy4B,IAAKuy4B,EACL7B,IAAKA,EACLL,SAAUA,EACVM,YAAa59wB,EACbmwlB,mBAAoB,SAACv2sB,GAAD,OAAO,EAAKu2sB,mBAAmBv2sB,EAAG+j4B,EAAIpo4B,IAAI,QAC9Dio4B,qBAAsB,EAAKA,qBAC3BE,mBAAoB,EAAKA,sBArBtBC,EAAIpo4B,IAAI,UAwBd6E,WAAWhG,WAEZ4rH,GAA+Bm/wB,UAItCl2L,EACC,cAAC,KAAD,CACExsU,SAAU,cAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,cAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,EAChBM,QAAS,cAAC,KAAD,MAGX,qCACE,cAACnyT,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGE,KAAK,SAAxC,SACE,eAAC3B,EAAA,EAAD,CAAMe,MAAM,EAAMJ,WAAW,EAAMoB,GAAI,GAAvC,UACE,cAAC/B,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQkjF,UAA1B,SACE,cAAC,EAAD,CACEpjqB,KAAMg0I,EACN+jgB,cAAeD,EAAkBC,EAAgB,KACjDq4M,aAAc7zS,QAMlBl6lB,QAAQy1rB,GAAmBC,IAC3B,cAACl6mB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQ9la,YAA1B,SACE,cAAC,GAAD,CACEp6K,KAAMg0I,EACN+jgB,cAAeA,EACfq4M,aAAc7zS,aA4B1B,cAAC1+gB,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQr3gB,UAA1B,SACE,cAACk/wB,GAAA,EAAD,CACEj+wB,SAAS,EACT2zT,kBAAmBzpP,EAAMjrL,IAAI,cAAgBkU,iBAC7Coq3B,8BAA+BrzsB,EAAMpuK,MAAM,CAAC,YAAa,2BAA6B3I,yBAK9F,cAAC4gE,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQmjF,cAA1B,SACE,cAACr3lB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQg1zB,SAAzB,SACE,eAAChnxB,EAAA,EAAD,WACE,cAAC1N,EAAA,EAAD,CAAYpgC,UAAWF,EAAQi1zB,SAAUz0xB,QAAQ,KAAjD,SACG3tF,EAAE,yBAEL,qBAAKqtD,UAAWF,EAAQi1zB,SAAxB,UAAoCn/sB,EAAMjrL,IAAI,iBAAmB,IAAIy6H,QAAU,mBAMzF,cAAC3lD,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,cAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,SACE,cAAC2yU,EAAA,EAAD,CAASX,QAASsuO,EAAQvuR,YAA1B,SACE,cAAC,EAAD,CACE39K,MAAOA,UAKf,cAACn2G,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAhC,SACE,eAACzB,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,GAAtB,UACE,cAAC4+B,EAAA,EAAD,CAAYpgC,UAAWF,EAAQo8nB,cAAe57lB,QAAQ,KAAtD,SAA4D3tF,EAAE,qBAC9D,qBAAKqtD,UAAWF,EAAQk1zB,mBAAxB,SACE,cAACpnxB,EAAA,EAAD,CAAM5tC,UAAWF,EAAQg1zB,SAAgBzy4B,IAAKy/nB,EAAQojF,MAAtD,SACE,eAACp3lB,EAAA,EAAD,WACE,cAAC1N,EAAA,EAAD,CAAYpgC,UAAWF,EAAQi1zB,SAAUz0xB,QAAQ,KAAjD,SAAuD3tF,EAAE,gCACzD,oBAAGqtD,UAAWF,EAAQi1zB,SAAtB,UAAiCpi3B,EAAE,gCAAnC,OACA,qBAAKqtD,UAAWF,EAAQi1zB,SAAxB,SAAmCn/sB,EAAMpuK,MAAM,CAAC,oBAAqB,mBACrE,oBAAGw4D,UAAWF,EAAQi1zB,SAAtB,UAAiCpi3B,EAAE,sBAAnC,OACA,qBAAKqtD,UAAWF,EAAQi1zB,SAAxB,SAAmCn/sB,EAAMpuK,MAAM,CAAC,oBAAqB,8BAQnF,cAACyt3B,GAAA,EAAD,CACE1jyB,KAAM4nwB,EAAcxu2B,IAAI,aACxB2lI,OAAO,GACPpjG,SACE,eAACuyC,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVI,QAAQ,SACRb,WAAW,SAJb,UAME,cAAC2oP,EAAA,EAAD,IACA,cAAC85H,EAAA,EAAD,CAAmBz6Z,GAAG,2BAA2By4E,QAAQ,KAAzD,SACG64vB,EAAcxu2B,IAAI,kBAM3B,cAAC,GAAD,CACE4mG,KAAMkiyB,EACNlowB,QAAS,kBAAM,EAAKoowB,8BAA6B,IACjD71kB,UAAWl3T,KAAKgt4B,wCAChBN,0BAA2B,kBAAMzuf,EAAiBjvN,EAAMjrL,IAAI,MAAO,aAErE,cAACi/3B,GAAA,EAAD,W,GAlTmBv+1B,cAgcZwwC,qBACb00C,eACA1uC,aAljBa,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT4B,QAAS,OACTK,cAAe,SACfY,SAAU,GAEZmpC,cAAe,CACbnqC,SAAU,UAEZ+pC,KAAM,CACJJ,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,IAEV2yzB,SAAU,CACRlpxB,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtChtD,QAAS,GACTP,OAAQ,GAIRD,MAAO,OACP,QAAS,CACPm7C,WAAY,aAGhB6+kB,cAAe,CACbx5nB,QAAS,sBACTP,OAAQ,IAEV6yzB,mBAAoB,CAClBhzzB,QAAS,cACTE,MAAO,QAETm+tB,UAAW,CACTpmrB,aAAc,QAEhBi7wB,eAAgB,CACd/yzB,OAAQ,sBAEVozP,cAAe,CACb18M,WAAY,OACZ+P,KAAM,GAER8rwB,kBAAmB,CACjBhyzB,QAAS,YACTN,SAAU,SAEZuyzB,aAAc,CACZzyzB,MAAO,SAETi1xB,UAAW,CACTj1xB,MAAO,SAETs2C,KAAM,CACJt2C,MAAO,QAETk5kB,YAAa,CACXp5kB,QAAS,QAEXwyzB,kBAAmB,GAGnBO,SAAU,CACR/znB,WAAY,aAEdw7U,iBAAkB,CAChB5zd,KAAM,QACN1mD,MAAO,OACPQ,QAASZ,EAAMZ,QAAQ,QA8ezBn7B,YAAgB,gBAChB0/D,mBAvBsB,SAAC73E,EAAYyF,GACnC,IAAMt+B,EAAQ64B,EAAMpmB,MAAM,CAAC,QAAS,UAC9Bu1M,EAAwB1pL,EAASuiJ,MAAMjrL,IAAI,iBACjD,MAAO,CACLqu2B,UAAWnwmB,aAAoB9rC,EAApB8rC,CAAmCj7N,GAC9Cw6N,YAAaF,eAAwBt6N,GACrCywqB,aAAcp2c,eAA0Br6N,GACxCsgE,IAAKx9C,cAAgB9iB,GACrBi5D,MAAOv/C,cAAkB1Z,GACzBok2B,aAAcv1T,eAAyB7uiB,GACvCslB,SAAUlD,eAAyBpiB,GACnCuwjB,YAAar9c,aAAkC,CAAE5tF,SAAU7f,EAAS6f,UAAvD4tF,CAAmElzG,GAChF74B,QACA++Y,WAAYxvM,eAAuB12K,GACnCur0B,cAAerwmB,eAA0Bl7N,GACzCwnF,4BAA6B7mE,cAAwC3gB,OAhD9C,SAAC2D,GAC1B,MAAO,CACLA,WACAmxqB,eAAgB,SAACzpf,GACf1nL,EAAS,IAAI44K,IAAqB8O,KAEpCm7qB,aAAc,SAACn7qB,GACb1nL,EAAS,IAAI05K,IAAmB,CAAEgO,cAEpC86qB,eAAgB,SAAC96qB,GACf1nL,EAAS,IAAI85K,IAAqB,CAAE4N,cAEtC+6qB,aAAc,SAAC/6qB,GACb1nL,EAAS,IAAI06K,IAAmB,CAAEgN,cAEpCo7qB,eAAgB,WACd9i2B,EAAS,IAAIo3K,MAEfk8L,iBAAkB,SAAC5rL,EAAiB2E,GAClCrsL,EAAS,IAAIw1K,KAAuB,CAAEkS,UAAS2E,iBAEjDo9Y,sBAAuB,SAAC9njB,GACtB3hB,EAAS,IAAIywB,KAA4B,CAAE9O,WAAUm5C,OAAQ,aAE/DksS,uBAAwB,SAACz7R,EAAmBm8G,GAC1C1nL,EAAS,IAAIkrE,KAA6B,CAAEK,YAAWm8G,cAEzDu/K,qCAAsC,SAAC17R,EAAmBm8G,EAAiB2E,GACzErsL,EAAS,IAAI6qE,MAA2C,CAAEU,YAAWm8G,UAAS2E,qBAwBrE/hJ,CAKbypoB,IChpBaA,Q,kLCmBX6vL,EAAc9p2B,IAAM8E,YAAW,SAAqBW,EAAOzuC,GAC7D,IAAI+hmB,EAAwBtzjB,EAAMuzjB,eAC9BA,OAA2C,IAA1BD,GAA2CA,EAC5DtkhB,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBz4D,EAAQu8B,YAAyBhT,EAAO,CAAC,iBAAkB,UAAW,cAE1E,OAAOzF,IAAMwB,cAAc,MAAO6D,YAAS,CACzCsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAAYqkhB,GAAkBvkhB,EAAQoB,SACpE7+E,IAAKA,GACJklB,OAwBUs6D,cAjDK,CAElB1jE,KAAM,CACJ6jE,QAAS,OACTnC,WAAY,SACZ6C,QAAS,GAIXxB,QAAS,CACP,yBAA0B,CACxB4tC,WAAY,KAsCgB,CAChC15G,KAAM,kBADOysE,CAEZszzB,G,sCCzDY,MAA0B,qD,kECe1BC,EAXgC,SAAC,GAAD,IAAG5ykB,EAAH,EAAGA,QAAH,OAC7C,cAAC/iP,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAMM,QAAQ,SAAlD,SACE,cAAC,IAAD,CACE0sC,IAAKo1M,EACLtgP,MAAO,QACPurC,YAAa,OACbC,aAAa,O,kBCNb0I,EAAYJ,aAAW,SAACl0C,GAAD,OAAkB2zL,YAAa,CAC1D8qZ,YAAa,CACXjxhB,YAAaxtD,EAAMZ,QAAQ,SAgBhBm0zB,EAZiD,SAAC,GAAwB,IAAtBC,EAAqB,EAArBA,eAC3Dx1zB,EAAUs2C,IAEhB,OACE,cAAC32C,EAAA,EAAD,CAAMe,MAAM,EAAMgB,GAAI,EAAGpB,WAAW,EAAME,UAAU,SAASI,QAAQ,SAASV,UAAWF,EAAQyglB,YAAjG,SAEK+0O,EAAe1l4B,KAAI,SAAC4wE,EAAMz9E,GAAP,OAAkB,cAACq9G,EAAA,EAAD,CAAqCo4C,cAAc,EAAMl4C,QAAQ,QAAjE,SAA0E9/B,GAA1E,UAAoBz9E,EAApB,YAA6By9E,U,gBCd5DupD,eAAQ,kBAAM,oC,iBC4DhBwrwB,EAAgC,0BAEhCC,EAAoB,SAAC32vB,GAChC,IAAM/xB,EAAe+xB,GAAWA,EAAQl0I,IAAI,gBACtCoiH,EAAY8xB,GAAWA,EAAQl0I,IAAI,aACnCqiH,EAAW6xB,GAAWA,EAAQl0I,IAAI,YAExC,OAAOmiH,GAAgB,CAACC,EAAWC,GAAU3kG,KAAK,MAAQ,IAGtDot3B,E,4MAEGC,eAAiB,SAAC1m4B,EAAyB6vI,GAChD,IACEttG,EACE,EAAKT,MADPS,SAGFviC,EAAE87G,kBAEFv5E,EAAS,IAAI6rB,KAA2B,CAACwhF,SAAU//H,eAAK,CAACggI,OACzDttG,EAAS,IAAI+rB,KAAoBuhF,EAAQl0I,IAAI,QAC7C4mC,EAAS,IAAI8J,IAAiC,CAACxT,GAAIywnB,IAAmB/1mB,QAAS,6CAC/EhR,EAAS,IAAI4J,IAA+B,CAC1CtT,GAAIywnB,IACJxnnB,MAAO,CACLm5uB,SAAU,SAACrouB,GAAD,OAAUrQ,EAASu/B,YAAOyk0B,EAA+B,UAAW,CAC5E7t2B,MAAO8t2B,EAAkB5z1B,GACzBt/C,MAAOs/C,UAIbrQ,EAAS,IAAI0J,IAA6B,CAACpT,GAAIywnB,IAAmB/mjB,MAAM,M,4CAG1E,WAAiB,IAAD,OACd,EAII3qG,KAAKkqC,MAHPne,EADF,EACEA,EACAmtD,EAFF,EAEEA,QACAiiC,EAHF,EAGEA,WAGI4zxB,EAAa5zxB,IAA2C,IAA7BA,EAAWp3G,IAAI,UAC1Ck0I,EAAU98B,GAAcA,EAAWv6F,MAAM,CAAC,UAAW,UACrDpS,EAAOypI,GAAW22vB,EAAkB32vB,GACpC2jL,EAAU3jL,GAAWA,EAAQl0I,IAAI,YAAc,GAErD,OACE,mCACE,eAAC,IAAD,WACE,cAACizpB,EAAA,EAAD,CACE9siB,MAAOn+F,EAAE,qCACT40G,YAAa50G,EAAE,uCACfuiV,UAAWviV,EAAE,2BACbsiV,UAAW2giB,EACX5giB,eAvDW,mCAwDX5nP,IAAKuvT,MAEP,sBAAM38V,UAAWF,EAAQukC,KAAzB,SACE,eAAC5kC,EAAA,EAAD,CAAMW,WAAW,EAAMc,QAAS,EAAGZ,UAAU,SAA7C,UACE,cAACb,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC4/B,EAAA,EAAD,CAAYE,QAAQ,QAAQzT,MAAM,UAAlC,SAA6Cl6E,EAAE,2CAEjD,cAACusoB,EAAD,IAEErghB,GACE,qCACE,cAACp/D,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,eAAC,qBAAD,WACE,cAACstC,EAAA,EAAD,UACE,eAACruC,EAAA,EAAD,CAAMW,WAAW,EAAjB,UACGu1zB,GAAc,cAAC,EAAD,CAAWnzkB,QAASA,IACnC,cAAC,EAAD,CAAiB8ykB,eAAgB,CAAClg4B,UAGtC,cAAC,EAAD,UACE,cAAC,oBAAD,CACEq2G,QAAS,SAACz8G,GAAD,OAAO,EAAK0m4B,eAAe1m4B,EAAG6vI,IACvCpsB,KAAM9/F,EAAE,+CAKhB,cAAC8sD,EAAA,EAAD,CAAMe,MAAM,EAAZ,SACE,cAAC,QAAD,CACEprE,KAAK,SACL8qE,UAAWszC,IACX1iF,MAAO,CACLpJ,MAAO/U,EAAE,+BACT2tF,QAAS,SACTmT,YAAY,EACZlT,WAAY,CACVp8D,cAAc,EACd0oD,MAAO,wBAyBzB,cAAC,IAAD,CACEqpB,SAAUoiiB,IACVS,cACE,cAAC,IAAD,CACEC,SAAUV,iB,GA/GFjtnB,aAwIlB65E,EAAgBl1F,iBAAO,CAC3B4oV,QAAQ,IAaK/8R,sBACbgG,aA9Ba,SAACC,GAAD,MAA+B,CAC5CuiC,KAAM,CACJphC,SAAU,EACVjB,QAAS,OACTK,cAAe,SACfK,QAASZ,EAAMZ,QAAQ,OAyBN,CAAE00C,WAAW,IAChCnQ,mBAXsB,SAAC73E,GACvB,OAAO,aACLs3E,iBACGxrE,YAAyB,CAC1BqoE,WAAYC,wBAAcuzxB,IADzB771B,CAEA9L,OAhBoB,SAAC2D,GAC1B,MAAO,CACLA,eAqBFwU,YAAgB,gBAChBooR,oBAAU,CACR9pN,KAAMkxxB,EACNnnkB,kBAAkB,EAClBC,oBAAoB,IAPTxyP,CASb45zB,I,oEC9IUI,E,gdCgNNri2B,GAAkBkG,YAAyB,CAC/Co81B,aAAc/xwB,gBAIDloD,qBACb91B,YAAgB,gBAChB87B,aAlPa,SAACC,GAAD,MAA+B,CAC5Ci0zB,wBAAyB,CACvB7yzB,SAAU,SAEZ24E,KAAM,CACJl6B,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/BqM,OAAQ,QAEVw8rB,mBAAoB,CAClBx8rB,OAAQ,EACRl1C,SAAU,EACVguC,SAAU,OACVjuC,UAAW,QAEbuhmB,eAAgB,CACd5ijB,WAAY,WAEdq0wB,wBAAyB,CACvB7zzB,OAAQ,gBAEVyqkB,sBAAuB,CACrB,0BAA2B,CACzB//iB,MAAO/qB,EAAM+pC,QAAQE,QAAQ,OAGjC04jB,6BAA8B,CAC5BpimB,cAAe,UAEjB4zzB,qCAAsC,CACpCh8wB,aAAc,gBAEhBi8wB,aAAc,CACZh0zB,MAAO,QAETy3I,eAAgB,CACdx2F,WAAY,QAEdqhjB,sBAAuB,CACrB3rjB,WAAY,EACZC,cAAe,GAEjBq9wB,qBAAsB,CACpBllxB,SAAU,SACVsL,aAAc,WACdc,WAAY,UAEdy2vB,iBAAkB,CAChBnyvB,WAAW,GAAD,OAAK7/C,EAAM+pC,QAAQC,KAAK,KAAxB,gBAEZsqxB,WAAY,CACVz0wB,WAAY,UACZ1V,OAAQ,WAEVoqxB,eAAgB,CACd3zzB,QAASZ,EAAMZ,QAAQ,EAAG,GAC1BiiD,WAAY,OACZ,UAAW,CACTxB,WAAY7/C,EAAM+pC,QAAQ/5F,OAAOsyU,MACjCv3P,MAAO/qB,EAAM+pC,QAAQE,QAAQ,WAyLjCtG,kBAAQjyE,IAjBiB,SAACjC,GAC1B,MAAO,CACLA,WACA+k2B,gBAAiB,WACf/k2B,EAAS,IAAIqpG,UAUJ/+D,EAjLuC,SAAC/qC,GACrD,IACEgvC,EAQEhvC,EARFgvC,QACAw2zB,EAOExl2B,EAPFwl2B,gBACAR,EAMEhl2B,EANFgl2B,aACA3lxB,EAKEr/E,EALFq/E,QAEAx9F,GAGEme,EAJF8B,QAIE9B,EAHFne,GAEA4e,GACET,EAFFmoU,uBAEEnoU,EADFS,UAEF,EAAmClG,WAAe,MAAlD,mBAAO2yF,EAAP,KAAiBmnQ,EAAjB,KAEA95V,aAAgB,kBAAMir2B,MAAmB,IAEzCjr2B,aAAgB,WACd,GAAI8kF,EAAS,CAAC,IAAD,EACLomxB,EAAe,OAAGpmxB,QAAH,IAAGA,GAAH,UAAGA,EAAS9nF,WAAZ,aAAG,EAAc9f,MAAK,SAAApW,GAAM,OAAIA,EAAO6rH,YACtDkgU,EAAcq4c,GAAoBA,EAAwBv4wB,SAAS51F,GACrE81Z,IAAgBlgU,IACdkgU,EACF/4D,EAAe+4D,GACLA,GACV/4D,EAAe,QAIhBh1Q,GAAW6N,GACdmnQ,EAAe,QAEhB,CAACh1Q,IAEJ,IAAM8M,EAAc,SAACu5wB,GACfA,GACFrxgB,EAAeqxgB,EAAa7r4B,IAAI,QAAUqzH,EAAW,KAAOw4wB,EAAa7r4B,IAAI,OAC7E4mC,EAASu/B,aAAOg7Z,KAAyB,cAAe0qa,MAExDrxgB,EAAe,MACf5zV,EAASu/B,aAAOg7Z,KAAyB,cAAe,SAItDu6I,EAAYyvR,EAAavj4B,QAAO,SAACutI,EAAmCkuF,GACxE,IAAMrU,EAAiBqU,EAASrjO,IAAI,kBAC9B8r4B,EAAezoqB,EAASrjO,IAAI,gBAC5BixzB,EAAe5tlB,EAASrjO,IAAI,gBAElC,OAAOm1I,EAAI5oI,OACTyiN,GACA,eAAC+8qB,EAAD,uDAAyC1m3B,iBAAO,CAC9C2pM,iBACAg9qB,cAAe933B,eAAK,CAAC433B,IACrB76E,iBAHF,OAKE97qB,EAAIn1I,IAAIgvN,GACJ+8qB,EAAqB9+3B,eAAc,SAAAsB,GAAO,OAAIA,EAC3ChC,OAAO,iBAAiB,SAAAiI,GAAI,OAAIA,EAAKnM,KAAKyj4B,MAC1Cv/3B,OAAO,gBAAgB,SAAAiI,GActB,OAbqBA,EAAKjN,OAAO0pzB,GACDvozB,MAAK,SAAC9G,EAAGC,GACvC,IAAMoq4B,EAAQrq4B,EAAE5B,IAAI,QACdks4B,EAAQrq4B,EAAE7B,IAAI,QAEpB,OAAIis4B,EAAQC,GACF,EAEND,EAAQC,EACH,EAEF,WAKbH,OAGPl93B,iBACFuO,eAAe9N,QAAO,SAACjT,EAAGD,GAAJ,OAAUA,KAEjC,OACE,gBAAC04E,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,SACVc,KAAK,SACLpB,UAAWF,EAAQi2zB,wBAJrB,UAOI1vR,EAAU72mB,WAAW7M,KACjB,sBACEq9E,UAAWm0C,IAAWr0C,EAAQs2zB,WAAyB,OAAbp4wB,EAAoBl+C,EAAQg0yB,iBAAmB,IACzFrowB,QAAS,kBAAMwR,EAAY,OAF7B,SAIE,eAAC7c,EAAA,EAAD,CAAYpgC,UAAWF,EAAQu2zB,eAA/B,SACG1j3B,EAAE,mCAGT,KAEJ,eAAC8sD,EAAA,EAAD,CACEO,UAAWF,EAAQ60uB,mBACnBn0uB,MAAM,EACNgB,GAAI,GAHN,SAMI6kiB,EAAU72mB,WAAWI,KAAI,SAACo+N,EAAU8oqB,GAAX,OACvB,gBAACn/wB,EAAA,EAAD,CAEE33C,UAAWF,EAAQykmB,eACnBzkmB,QAAS,CACP83C,SAAU93C,EAAQk2zB,yBAJtB,UAOE,gBAACl+wB,EAAA,EAAD,CACE93C,UAAWF,EAAQ8skB,sBACnB9skB,QAAS,CACPv9B,QAASu9B,EAAQ2kmB,6BACjB7sjB,SAAU93C,EAAQm2zB,sCAEpBl+wB,WAAY,eAAC,KAAD,IACZlwF,GAAE,UAAKmmM,EAASrjO,IAAI,kBAAlB,kBACF,0BAAkBqjO,EAASrjO,IAAI,kBAA/B,mBARF,UAUE,gBAACy1G,EAAA,EAAD,CAAYpgC,UAAWF,EAAQ65I,eAA/B,UACGhnM,EAAE,2BAA4Bq7M,EAASrjO,IAAI,qBAE9C,eAACy1G,EAAA,EAAD,UACG4tH,EAASrjO,IAAI,iBAAiB0d,KAAK,WAGxC,eAAC4uG,EAAA,EAAD,CACEj3C,UAAWF,EAAQ0kmB,sBADrB,SAGE,eAAC1hjB,EAAA,EAAD,CACE9iD,UAAWF,EAAQo2zB,aADrB,SAIIloqB,EAASrjO,IAAI,gBAAgBiF,KAAI,SAAC9I,EAAMiw4B,GAAP,OAC/B,eAAC5zxB,EAAA,EAAD,CAEEsI,QAAS,kBAAMwR,EAAYjtG,iBAAO,CAAE6X,GAAI/gC,EAAK6D,IAAI,MAAOrI,MAAOwE,EAAK6D,IAAI,YACxEq1E,UAAWl5E,EAAK6D,IAAI,QAAUqzH,EAAWl+C,EAAQg0yB,iBAAmB,GAHtE,SAKE,eAACjjwB,EAAA,EAAD,CACEC,MAAOhqH,EAAK6D,IAAI,QADlB,SAGE,uBAAMq1E,UAAWF,EAAQq2zB,qBAAzB,SACGrv4B,EAAK6D,IAAI,aARTos4B,YAhCVD,c,sGCtKJj7zB,qBACb91B,YAAgB,gBADH81B,EAjC+C,SAAC/qC,GAC7D,IACEqkS,EAIErkS,EAJFqkS,WACA6hkB,EAGElm2B,EAHFkm2B,gBACA3hkB,EAEEvkS,EAFFukS,aACA1iT,EACEme,EADFne,EAGF,OACE,qCACE,eAACikQ,EAAA,EAAD,UACE,gBAACn3M,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASvB,WAAW,SAASa,QAAQ,SAAjE,UACE,eAACmwC,EAAA,EAAD,CAASC,MAAOn+F,EAAE,oBAAlB,SACE,eAAC2uG,GAAA,EAAD,CAAYxd,UAAWqxN,EAAY1pN,QAAS,SAACz8G,GAAOA,EAAE87G,kBAAmBqqN,KAAzE,SACE,eAAC,KAAD,CAAUpnN,SAAS,cAGvB,eAAC8C,EAAA,EAAD,CAASC,MAAOn+F,EAAE,yBAAlB,SACE,eAAC2uG,GAAA,EAAD,CAAY7V,QAASurxB,EAArB,SACE,eAAC,KAAD,CAAcjpxB,SAAS,cAG3B,eAAC8C,EAAA,EAAD,CAASC,MAAOn+F,EAAE,sBAAlB,SACE,eAAC2uG,GAAA,EAAD,CAAY7V,QAAS,SAACz8G,GAAQA,EAAE87G,kBAAmBuqN,KAAnD,SACE,eAAC,KAAD,CAAYtnN,SAAS,wBCdpBkpxB,GAzB8B,SAACnm2B,GAC5C,IACEu1F,EAGEv1F,EAHFu1F,OADF,EAIIv1F,EAFFykjB,kBAFF,MAEe,SAFf,EAGEz0kB,EACEgwB,EADFhwB,SAEF,OACE,eAAC81Q,EAAA,EAAD,CACE10K,MAAO,CACLmb,WAAY,SACZpM,SAAU,SACVsL,aAAc,YAJlB,SAOE,eAAC,IAAD,CACEqmC,IAAKv8B,EACLkvd,WAAYA,EACZz0kB,SAAUA,EACV80kB,oBAAqBvvd,EAAO17H,IAAI,WAChCoyH,aAAcsJ,EAAO17H,IAAI,e,+GC2GlBkxE,qBACbgG,aApGa,SAACC,GAAD,MAA+B,CAC5Ck8O,aAAc,CACZnlM,WAA8B,IAAlB/2C,EAAMZ,UAClB43C,cAAiC,EAAlBh3C,EAAMZ,WAEvB6yC,OAAQ,CACN3L,YAA+B,EAAlBtmC,EAAMZ,WAErB/iE,KAAM,CACJ+jE,MAAO,SA4FTn8B,YAAgB,gBAChB0/D,kBAAQ,MApBiB,SAACl0E,GAC1B,MAAO,CACLA,WACA2l2B,iBAAkB,SAAC7wwB,EAAsB8wwB,EAA4BhnxB,EAAkBv9E,EAA0BiiX,GAC/GtjX,EAAS,IAAI4jD,IAAsB,CACjCkxC,SACA+ihB,OAAO,EACP+tP,oBACAtif,cACA1kS,UACAv9E,UACArB,mBAMOsqC,EAvFS,SAACu7zB,GACvB,IACE7lyB,EAUE6lyB,EAVF7lyB,KACA80B,EASE+wwB,EATF/wwB,OACAvmD,EAQEs3zB,EARFt3zB,QACAqwC,EAOEinxB,EAPFjnxB,QACAiU,EAMEgzwB,EANFhzwB,WACAxxF,EAKEwk2B,EALFxk2B,QACAiiX,EAIEuif,EAJFvif,YACAwif,EAGED,EAHFC,sBACAH,EAEEE,EAFFF,iBACAvk3B,EACEyk3B,EADFzk3B,EAGF,EAAwC0Y,WAAe,IAAvD,mBAAOis2B,EAAP,KAAqBC,EAArB,KACM3zvB,EAAoBtrG,sBAAY+P,gBAOtC,OACE,gBAACu0Q,GAAA,EAAD,CACErxL,QAAS8rwB,EACT,mBAAiB,8CACjB9lyB,KAAMA,EACNzxB,QAAS,CACP64C,MAAO74C,EAAQ3hE,MALnB,UAQE,gBAAC0+S,GAAA,EAAD,WACE,eAACylI,GAAA,EAAD,CAAmBz6Z,GAAG,2BAA2By4E,QAAQ,KAAzD,SACI3tF,EAAE,uCAEN,eAACw3Y,GAAA,EAAD,CAAY,aAAW,oDAAoD7na,MAAOg14B,EAAcl1xB,SAAU,SAAC2rB,GAAD,OAAgDwpwB,EAAiBxpwB,EAAMn6G,OAA4BtxB,QAA7M,SACE,gBAACm9E,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,gBAAgBU,KAAK,SAApD,UACE,eAACu9O,GAAA,EAAD,CAAkBr8T,MAAO,GAAI6rH,QAAS,eAAC8qQ,GAAA,EAAD,IAAWvxV,MAAO/U,EAAE,gDAC1D,eAACgsS,GAAA,EAAD,CAAkBr8T,MAAO,IAAK6rH,QAAS,eAAC8qQ,GAAA,EAAD,IAAWvxV,MAAO/U,EAAE,0DAIjE,gBAACqqS,GAAA,EAAD,WACE,eAACzxM,GAAA,EAAD,CACEE,QAAS4rxB,EACTxqyB,MAAM,UACN7sB,UAAWF,EAAQi0C,OAHrB,SAKIphG,EAAE,wBAGN,eAAC44F,GAAA,EAAD,CACEE,QAAS,SAACz8G,GACRA,EAAE87G,kBApCY,WACtB,IAAM8xU,EAAgB7B,GAAiB5qU,EAASiU,GAAawf,GAC7DszvB,EAAiB7wwB,EAAQpiI,QAAQqz4B,GAAe16c,EAAUhqZ,EAASiiX,GAoC3D2if,GACAH,KAEFxqyB,MAAM,UACNkxN,WAAW,EACX/9O,UAAWF,EAAQi0C,OATrB,SAWIphG,EAAE,kC,sMJ9BFkj3B,K,kBAAAA,E,eAAAA,M,KAKZ,IAEap41B,GAAiC,CAC5C4yE,MAHmB,GAInB37G,OAAQ,EACRmqL,QAAS,CACPh3J,IAAK,IAIIkzZ,GAAmB,SAAC08c,GAAsD,IAAD,EAApCrzwB,EAAoC,uDAAvB,GAAIszwB,EAAmB,uCAChFptJ,EAA0BlmnB,EAC1B,CACE,IAAO,CACL,CACE,KAAQ,CACN,KAAQA,MAKhBqzwB,EAWJ,OAVCA,GAAmBrzwB,IAApB,UAAmCkmnB,EAAmBjitB,WAAtD,OAAmC,EAAwBr1B,KAAxB,oBAAkCyk4B,EAAwBpv2B,KAAO,MAEhGqv2B,IACGptJ,GAAuBA,EAAmBjitB,IAG7CiitB,EAAmBjitB,IAAIr1B,KAAK,CAAE,QAAW,CAAE,IAAO,OAFlDs3uB,EAAqB,CAAE,IAAO,CAAC,CAAE,QAAW,CAAE,IAAO,SAMlDA,GAiLHqtJ,G,kDAiBJ,WAAY7m2B,GAA4B,IAAD,8BACrC,cAAMA,IAhBDm4R,aAAezxI,oBAAS,SAACpzD,GAC9B,IACExxF,EACE,EAAKhF,MADPgF,QAGF,EAAKqmU,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQ,IAEV0vH,aACAouI,KAAM,MAEP,KAEoC,EAgEhCsqL,mBAAqB,WAC1B,EAAKtzU,UAAS,SAAAquJ,GAAS,MAAK,CAC1BklL,kBAAmBllL,EAAUklL,iBAC7Bzd,mBAAmB,OAnEgB,EAuEhCC,oBAAsB,WAC3B,EAAK/1T,UAAS,SAAAquJ,GAAS,MAAK,CAC1BynK,mBAAoBznK,EAAUynK,kBAC9Byd,kBAAkB,OA1EiB,EA8EhC9jF,uBAAyB,SAACrnV,GAC/B,MAGI,EAAKkf,MAFP+ltB,EADF,EACEA,aACAjzmB,EAFF,EAEEA,kBAEF,EAMI,EAAKh2G,MALEqvZ,EADX,EACErqZ,QACYsqZ,EAFd,EAEE94T,WACS+4T,EAHX,EAGEhtU,QACMitU,EAJR,EAIE5qL,KACAimD,EALF,EAKEA,SAGS4kI,EAIPzra,EAJFghB,QACY0qZ,EAGV1ra,EAHFwyG,WACSm5T,EAEP3ra,EAFFu+F,QACMwrU,EACJ/pa,EADF4gP,KAGF,EAAKhpJ,SACH,CACE52E,QAASyqZ,GAAcJ,EACvB74T,gBAA8B1hI,IAAlB46b,EAA8BA,EAAgBJ,EAC1D/sU,aAAwBztH,IAAf66b,EAA2BA,EAAaJ,EACjD3qL,UAAkB9vQ,IAAZi5b,EAAwBA,EAAUyB,IACvC,WACD,IAAMjtU,EAAU4qU,GAAiB,EAAKntZ,MAAMuiF,QAAS,EAAKviF,MAAMw2F,YAAawf,GAE7EizmB,EACE,EAAKjptB,MAAMgF,QACXu9E,EACAsoM,IAAao9kB,EAAwB+B,WA7GN,EA0KhChgoB,mBAAqB,SAAC3yJ,EAAW4yJ,GACtC,MAAsE,EAAK/mO,MAAnE+m2B,EAAR,EAAQA,eAAgBhnc,EAAxB,EAAwBA,uBAAwBjtT,EAAhD,EAAgDA,kBAChD,EAAwC,EAAKh2G,MAArCgF,EAAR,EAAQA,QAAS4/N,EAAjB,EAAiBA,KAAMsloB,EAAvB,EAAuBA,aAGvB,GAAI7yxB,EAAU4yxB,eAAel14B,MAAgC,IAAxBk14B,EAAel14B,MAAciwC,EAAQl+B,OAAQ,CAGhF,IAAMinb,EAAUnpL,EAAO,EACjBopL,EAAYhpZ,EAAQl+B,OAASk+B,EAAQy9E,MAC3C,EAAK4oP,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELl+B,OAAQknb,IAEVppL,KAAMmpL,IAcV,GAXI12U,EAAU4rV,yBAA2BA,GAA0BA,GAC7DA,IACF,EAAKjja,MAAMkq2B,aAAa9h4B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IACzI,EAAKtrX,MAAMmq2B,eAAe/h4B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IAC3I,EAAK1vS,SAAS,CACZsuxB,aAAc,EAAKlq2B,MAAMkq2B,aACzBC,eAAgB,EAAKnq2B,MAAMmq2B,kBAK7B9yxB,EAAU2+B,oBAAsBA,GAAqBA,EAAmB,CAC1E,IAAMo0vB,EAA2BF,EAAalr3B,WAAU,SAAC+sY,GAAD,MAA0B,cAAdA,EAAO9xX,MAC3E,EAAK+F,MAAMkq2B,aAAa9h4B,OAAOgi4B,EAA0B,EAAG,CAAEnw2B,GAAI,aAAcH,MAAO,4BAA6Bs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IAC/J,EAAK1vS,SAAS,CAACsuxB,aAAc,EAAKlq2B,MAAMkq2B,iBA1ML,EAqNhCr3d,oBAAsB,SAAC+hK,GAAD,OAAwC,EAAKh5d,SAAS,CAAEm2T,iBAAkB6iK,KArNhE,EAuNhChlJ,iBAAmB,SAACxub,EAAG2sb,GAC5B,IACE/oZ,EACE,EAAKhF,MADPgF,QAGMy9E,EAAUz9E,EAAVy9E,MACFgtU,EAAU,2BACXzqZ,GADW,IAEdl+B,OAAQinb,EAAUtrU,IAGpB,EAAK4oP,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmpL,KAlOnB,EAqOhC8B,wBAA0B,SAACzub,GAChC,MAGI,EAAK4+B,MAFPgF,EADF,EACEA,QACA4/N,EAFF,EAEEA,KAGIkrL,EAASn1b,OAAOyG,EAAE4kB,OAAOtxB,OACzBq7b,EAAeh6b,KAAKqjB,MAAQwrP,EAAQ5/N,EAAQy9E,MAAS,GAAKqtU,GAAU,EAEpEL,EAAU,2BACXzqZ,GADW,IAEdy9E,MAAOqtU,EACPhpb,OAAQgpb,EAASC,IAGnB,EAAK1kF,uBAAuB,CAACrmU,QAASyqZ,EAAY7qL,KAAMmrL,KApPnB,EAuPhCs6c,gBAAkB,WACvB,EAAKnn2B,MAAMS,SAASv+B,aAAKgrB,2BAxPY,EA2PhCw7nB,wBAA0B,SAACxkE,EAAkBxH,GAClDwH,EACI,EAAKxre,SAAS,CAAE0uxB,uBAAwB1qT,IACxC,EAAKhke,SAAS,CAAE2uxB,yBAA0B3qT,KA9PT,EAiQhCsyM,gBAAkB,SAAC/xpB,EAA8Bt3H,GACtD,MAQI,EAAKm3B,MAPPuiF,EADF,EACEA,QACAv9E,EAFF,EAEEA,QACA+sY,EAHF,EAGEA,iBACAv7S,EAJF,EAIEA,WACAq0L,EALF,EAKEA,SACA0/kB,EANF,EAMEA,yBACAD,EAPF,EAOEA,uBAGF,GAAIz/kB,IAAahiT,EAAU,CAAC,IAAD,EACnBo8K,GAAO,6BACP4lI,EADO,WACatoM,GADb,wBAEPsoM,EAFO,WAEaknH,GAFb,wBAGPlnH,EAHO,cAGgBr0L,GAHhB,wBAIF,EAAKx2F,MAAL,UAAcn3B,EAAd,aAJE,iCAKO,EAAKm3B,MAAL,UAAcn3B,EAAd,aALP,2BAMC,EAAKm3B,MAAL,UAAcn3B,EAAd,gBAND,GASb,EAAK+yG,SAAL,aACEivM,SAAUhiT,EACVsmb,kBAAkB,GACflqQ,IACF,kBAAM,EAAKomL,uBAAuB,CACnCzmG,KAAM,EACN5/N,QAAQ,2BACH6K,IADE,IAELohJ,QAASjsJ,EAAQisJ,eAIrB,EAAK/tJ,MAAMS,SAAS8/B,aAAWy6Z,KAAyBr1d,IAAao/3B,EAAwBuC,QAAUD,EAA2BD,MAlS/F,EAsShCG,wBAA0B,WAC/B,MAAuD,EAAKvn2B,MAApDS,EAAR,EAAQA,SAAUkiB,EAAlB,EAAkBA,cAAemwF,EAAjC,EAAiCA,kBACjC,EAKI,EAAKh2G,MAJPgxuB,EADF,EACEA,eACAhsuB,EAFF,EAEEA,QACAu9E,EAHF,EAGEA,QACAiU,EAJF,EAIEA,WAGIw4T,EAAgB7B,GAAiB5qU,EAASiU,GAAawf,GAE7D,EAAKp6B,SAAS,CAAEqzU,iBAAiB,IACjCtrZ,EAAS,IAAIw9C,MACbx9C,EAAS,IAAI88C,IAAsC,CACjD8vC,SAAUygpB,EAAej0wB,IAAI,MAC7BioC,UACAu9E,QAASysU,EACTwsN,OAAO,EACPrtN,cAAe,WACb1uV,KAAmB9rE,kBAAgBk1jB,cAAehjiB,EAAc,CAC9DktE,WAAYi+oB,EAAej0wB,IAAI,QAC/BwzH,SAAUygpB,EAAej0wB,IAAI,MAC7Bu/W,iBAAkB00Z,EAAej0wB,IAAI,SACrC68B,aAAco3uB,EAAej0wB,IAAI,wBA7TF,EAmUhC2t4B,iBAAmB,SAACjywB,GACzB,MAAuC,EAAKv1F,MAApCS,EAAR,EAAQA,SAAU5e,EAAlB,EAAkBA,EAAG8gC,EAArB,EAAqBA,cAErB,GAAI4yE,EAAO17H,IAAI,WACb,EAAK4t4B,eAAelywB,EAAO17H,IAAI,kBAAmB07H,EAAO17H,IAAI,gBACxD,CACL4mC,EAAS,IAAI4J,KAA+B,CAAEtT,GAAIijO,oBAAkBh6N,MAAO,CAAEhf,OAAQa,EAAE,gCAAiCu4O,aAAc7kI,EAAO17H,IAAI,qBACjJ4mC,EAAS,IAAI0J,KAA6B,CACxCpT,GAAIijO,oBACJv5J,MAAM,KAYRhgE,EAAS,IAAIi6C,IAAwB,CACnC66C,OAAQA,EAAO/3H,IAAI,gBAAiB+3H,EAAO17H,IAAI,OAC/C6t4B,mBAAmB,EACnBC,+BAA+B,EAC/BvqkB,UAdgB,SAAC1zT,GACjB6yF,KAAmB9rE,kBAAgB8xX,mBAAoB5/V,EAAc,CACnEktE,WAAYnmH,EAAO7P,IAAI,QACvBwzH,SAAU3jH,EAAO7P,IAAI,MACrBu/W,iBAAkB1vW,EAAO7P,IAAI,SAC7B68B,aAAchtB,EAAO7P,IAAI,gBACzBsmZ,gBAAiBz2Y,EAAO7P,IAAI,cAAcwH,QAAO,SAAA07Y,GAAI,OAAKA,EAAKljZ,IAAI,gBAAyC,YAAvBkjZ,EAAKljZ,IAAI,aAAyBhI,KACvHuuZ,WAAY12Y,EAAO7P,IAAI,kBAAoB,UAAY,iBArVxB,EAiWhC4t4B,eAAiB,SAACr6qB,EAAyBr2L,GAChD,IAAQ0J,EAAa,EAAKT,MAAlBS,SAGNA,EADE2sL,EACOlrN,aAAK,GAAD,OAAI4pB,oBAAJ,YAAyBs5lB,KAAwBtyI,KAAjD,YAAyD/7c,IAE7D70B,aAAK,GAAD,OAAI8qB,wBAAJ,YAA6B+J,EAA7B,YAvWsB,EA2WhC6w2B,mBAAqB,SAACrywB,GAC3B,IACE90F,EACE,EAAKT,MADPS,SAGI0jjB,EAAU5ud,EAAO17H,IAAI,WAEzB4mC,EADE0jjB,EACO,IAAIjqgB,KAAoC,CAC/CmzC,SAAU82d,EACVj/L,WAAY,CACV3pT,OAAQ,cAIH,IAAI/gB,IAAiC,CAC5C+6C,OAAQA,EAAOzuH,eAAc,SAAAywQ,GAAG,OAAIA,EAAI/5Q,IAAI,gBAAiB+3H,EAAO17H,IAAI,OAAO2D,IAAI,SAAU,eAC7FijC,eA3XiC,EAgYhCon2B,sBAAwB,SAACtywB,EAAsBu2T,EAAmBhqZ,EAA0BiiX,GACjG,IAAQzwR,EAAe,EAAKx2F,MAApBw2F,WACR,GAAIiC,EAAO17H,IAAI,kBAAmB,CAChC,IAAMwlH,EAAe4qU,GAAiB6B,EAAUx4T,GAAa,EAAKtzF,MAAM8yG,mBAExE,EAAK9yG,MAAM0m2B,gBAAgBnxwB,EAAQlW,EAASv9E,EAASiiX,QAErD,EAAKrrS,SAAS,CAAE4vQ,oBAAoB,KAvYD,EA2YhCima,aAAe,SAACu5G,GACrB,MAA2B,EAAKhr2B,MAAxBmmM,EAAR,EAAQA,MACR,OADA,EAAel1C,UACI+5sB,EAAW7kqB,EAAkB,QAAVA,EAAkB,OAAS,OA7Y5B,EAgZhC8kqB,SAAW,SAACD,GACjB,MAGI,EAAKhr2B,MAFPgF,EADF,EACEA,QACAmhM,EAFF,EAEEA,MAGF,EAAKklI,uBAAuB,CAC1BrmU,QAAQ,2BACHA,GADE,IAELisJ,QAAQ,eACL+5sB,EAAqB,QAAV7kqB,GAAmB,EAAI,OAKzC,EAAKvqH,SAAS,CACZq1E,QAAS+5sB,EACT7kqB,MAAiB,QAAVA,EAAkB,OAAS,SA/ZpC,EAAKnmM,MAAQ,CACXmsF,SAAU,KACV4lT,iBAAkB,GAClBo4d,eAAgB,CACd,CAAElw2B,GAAI,QAASH,MAAO,GAAIipF,KAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW3uC,SAAS,EAAMi3U,UAAU,GAC/F,CAAEpxX,GAAI,aAAcH,MAAO,GAAIs6C,SAAS,EAAMi3U,UAAU,GACxD,CAAEpxX,GAAI,gBAAiBH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAClG,CAAErxX,GAAI,QAASH,MAAO,8BAA+BipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GACjH,CAAErxX,GAAI,eAAgBH,MAAO,0BAA2BipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3H,CAAErxX,GAAI,cAAeH,MAAO,6BAA8BipF,KAAM,CAAC,eAAgB3uC,SAAS,EAAOi3U,UAAU,EAAMC,YAAY,GAC7H,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBipF,KAAM,CAAC,UAAW3uC,SAAS,EAAOi3U,UAAU,EAAMC,YAAY,GAC9G,CAAErxX,GAAI,eAAgBH,MAAO,6BAA8BipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC9H,CAAErxX,GAAI,uBAAwBH,MAAO,2BAA4BipF,KAAM,CAAC,aAAc,OAAQ,QAAS3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAClJ,CAAErxX,GAAI,sBAAuBH,MAAO,yBAA0BipF,KAAM,CAAC,YAAa,OAAQ,QAAS3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC9I,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3F,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAE3F,CAAErxX,GAAI,UAAWH,MAAO,yBAA0Bs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAEvGikxB,aAAc,CACZ,CAAEjw2B,GAAI,QAASH,MAAO,GAAIipF,KAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW3uC,SAAS,EAAMi3U,UAAU,GAC/F,CAAEpxX,GAAI,aAAcH,MAAO,GAAIs6C,SAAS,EAAMi3U,UAAU,GACxD,CAAEpxX,GAAI,gBAAiBH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAClG,CAAErxX,GAAI,QAASH,MAAO,8BAA+BipF,KAAM,CAAC,SAAU3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GACjH,CAAErxX,GAAI,eAAgBH,MAAO,0BAA2BipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3H,CAAErxX,GAAI,cAAeH,MAAO,6BAA8BipF,KAAM,CAAC,eAAgB3uC,SAAS,EAAOi3U,UAAU,EAAMC,YAAY,GAC7H,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBipF,KAAM,CAAC,UAAW3uC,SAAS,EAAOi3U,UAAU,EAAMC,YAAY,GAC9G,CAAErxX,GAAI,YAAaH,MAAO,6BAA8BipF,KAAM,CAAC,aAAc3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GACxH,CAAErxX,GAAI,eAAgBH,MAAO,6BAA8BipF,KAAM,CAAC,gBAAiB3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC9H,CAAErxX,GAAI,uBAAwBH,MAAO,2BAA4BipF,KAAM,CAAC,aAAc,OAAQ,QAAS3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAClJ,CAAErxX,GAAI,sBAAuBH,MAAO,yBAA0BipF,KAAM,CAAC,YAAa,OAAQ,QAAS3uC,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC9I,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3F,CAAErxX,GAAI,SAAUH,MAAO,wBAAyBs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAC3F,CAAErxX,GAAI,YAAaH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,GAErG,CAAErxX,GAAI,gBAAiBH,MAAO,yBAA0Bs6C,SAAS,EAAMi3U,UAAU,EAAM/2S,MAAO,CAAE2R,UAAW,YAE7GkpU,kBAAkB,EAClBzd,mBAAmB,EACnB9sK,KAAM,EACNpuI,WAAY,GACZ00wB,kBAAmB,GACnBC,gBAAiB,GACjB5oxB,QAAS,KACT6oxB,eAAgB,KAChBC,aAAc,KACdd,yBAA0B,KAC1BD,uBAAwB,KACxBtl2B,QAAS6K,GACTg7Q,SAAUo9kB,EAAwBuC,QAClCc,0BAA2B,GAE3Bt6H,eAAgBplwB,gBAChBqjb,iBAAiB,EACjBzjE,oBAAoB,EACpB01B,0BAA0B,EAE1BjwN,QAAS,KACTk1C,MAAO,QA5D4B,E,qDAmHvC,WAA4B,IAAD,OACzB,EAUIntO,KAAKkqC,MATPqo2B,EADF,EACEA,eACAC,EAFF,EAEEA,gBACA7n2B,EAHF,EAGEA,SACAwoS,EAJF,EAIEA,YACAK,EALF,EAKEA,aACAy2H,EANF,EAMEA,uBACAwoc,EAPF,EAOEA,mBACAC,EARF,EAQEA,iBACA11vB,EATF,EASEA,kBAEF,EAKIh9I,KAAKgnC,MAJPor2B,EADF,EACEA,eACAjB,EAFF,EAEEA,eACAkB,EAHF,EAGEA,aACAnB,EAJF,EAIEA,aAYF,GATIjnc,IACFjqc,KAAKgnC,MAAMkq2B,aAAa9h4B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IACzItyZ,KAAKgnC,MAAMmq2B,eAAe/h4B,QAAQ,EAAG,EAAG,CAAE6xB,GAAI,UAAWH,MAAO,+BAAgCs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IAC3ItyZ,KAAK4iH,SAAS,CACZsuxB,aAAclx4B,KAAKgnC,MAAMkq2B,aACzBC,eAAgBnx4B,KAAKgnC,MAAMmq2B,kBAI3Bn0vB,EAAmB,CACrB,IAAMo0vB,EAA2BF,EAAalr3B,WAAU,SAAC+sY,GAAD,MAA0B,cAAdA,EAAO9xX,MAC3EjhC,KAAKgnC,MAAMkq2B,aAAa9h4B,OAAOgi4B,EAA0B,EAAG,CAAEnw2B,GAAI,aAAcH,MAAO,4BAA6Bs6C,SAAS,EAAMi3U,UAAU,EAAMC,YAAY,IAC/JtyZ,KAAK4iH,SAAS,CAACsuxB,aAAclx4B,KAAKgnC,MAAMkq2B,eAG1Cvm2B,EAAS,IAAI4+C,KAA4B,CAAEk2C,OAAQxnH,oBAC/CwxC,SAAS0C,WAAal1B,sBACxBj3B,KAAK4iH,SAAS,CAAEm2T,iBAAkBm4d,EAAc3nxB,QAAS8oxB,EAAcxglB,SAAUo9kB,EAAwB+B,QAAS,kBAAM,EAAK3+hB,uBAAuB,OAEpJryW,KAAK4iH,SAAS,CAAEm2T,iBAAkBo4d,EAAgB5nxB,QAAS6oxB,IAAkB,kBAAM,EAAK//hB,uBAAuB,OAE5Gl/B,GACHo/jB,IAEG/+jB,GACHg/jB,IAGGC,GACH9n2B,EAAS,IAAIqoB,MAAiB,CAAEuiF,WAAYz6G,eAAa632B,4BAEtDD,GACH/n2B,EAAS,IAAIqoB,MAAiB,CAAEuiF,WAAYz6G,eAAa832B,4B,kCAwC7D,WACE,IAAQjo2B,EAAa3qC,KAAKkqC,MAAlBS,SAERA,EAAS,IAAI8jD,KAAoB,mBACjC9jD,EAAS,IAAIkK,Q,oBAmNf,WAAiB,IAAD,OACd,EASI70C,KAAKkqC,MARPgvC,EADF,EACEA,QACAntD,EAFF,EAEEA,EACAkl3B,EAHF,EAGEA,eACA4B,EAJF,EAIEA,gBACAC,EALF,EAKEA,kBACAC,EANF,EAMEA,cACAC,EAPF,EAOEA,sBACAro2B,EARF,EAQEA,SAEF,EAcI3qC,KAAKgnC,MAbPgF,EADF,EACEA,QACAwxF,EAFF,EAEEA,WACAjU,EAHF,EAGEA,QACAqiJ,EAJF,EAIEA,KACAuqL,EALF,EAKEA,iBACAzd,EANF,EAMEA,kBACAK,EAPF,EAOEA,iBACAlnH,EARF,EAQEA,SACAmmd,EATF,EASEA,eACA/hV,EAVF,EAUEA,gBACAzjE,EAXF,EAWEA,mBACArlJ,EAZF,EAYEA,MACAl1C,EAbF,EAaEA,QAGIm2Z,EAAUv8R,IAAao9kB,EAAwB+B,MAC/CiC,EAAa7kT,EAAUl3jB,wBAAwBF,yBAE/C+ga,EAA2Bhf,EAAiBxta,QAAO,SAACwnZ,GACxD,OAAOA,EAAO33U,WAGV0+T,EAAS,CACbx/B,kBAAmB,GACnBC,mBAAoB,GACpBI,aAAc5uV,EAAE,2BAChB6uV,kBAA6B7uV,EAAVqikB,EAAY,+BAAoC,4BAGrE,OACE,eAACv1gB,EAAA,EAAD,CACEW,WAAW,EACXgB,KAAK,SACLpB,UAAWF,EAAQM,UAHrB,SAKE,gBAACX,EAAA,EAAD,CACEO,UAAWF,EAAQg6zB,sBACnB15zB,WAAW,EACXI,MAAM,EACNgB,GAAI,GACJlB,UAAU,SACVX,aAAa,aANf,UAQE,eAACi/W,GAAA,EAAD,CACElc,oBAAqB97a,KAAK24a,oBAC1BkD,oBAAqB77a,KAAKk2b,mBAC1B7a,cAAetvZ,EAAE,gCACjBs2S,aAAcriU,KAAKqiU,aACnB7kM,WAAYA,EACZw+S,cACE,eAAC,IAAD,CACEzyW,QAAO,CACL,CAAEqoD,KAAM,eAAC,KAAD,CAAiBzK,SAAS,UAAY2c,aAAc/3G,EAAE,8BAA+B84F,QAAS7kH,KAAKqx4B,iBAC3G,CAAEz/wB,KAAM,eAAC,KAAD,CAAazK,SAAS,UAAY2c,aAAc/3G,EAAE,iCAAkC84F,QAAS,kBAAMl6E,EAASv+B,aAAK,GAAD,OAAI4pB,oBAAJ,YAAyBs5lB,KAAwB6J,aAFpK,mBAGF65Q,EACC,CAAC,CAAEphxB,KAAM,eAAC,KAAD,CAAYzK,SAAS,UAAY2c,aAAc/3G,EAAE,6CAA8C84F,QAAS,kBAAM,EAAKjC,SAAS,CAAEslS,0BAA0B,OACjK,KAENt/Q,gBAAiB,CAAErxH,KAAM2hE,EAAQultB,oBAAqBt6pB,IAAKjrD,EAAQwltB,sBAsDvEziX,cACE,gBAACjqH,EAAA,EAAD,CACE54O,UAAWF,EAAQ+7E,KACnBv5J,MAAOm2T,EACPr2M,SAAUx7G,KAAKk5xB,gBACfhne,UAAU,UACVx4M,QAAQ,YACR,aAAY3tF,EAAE,gCACdmtD,QAAS,CACPsvR,UAAWtvR,EAAQsvR,WARvB,UAWE,eAACr2C,EAAA,EAAD,CACErxR,MAAO/U,EAAE,6BACTrwB,MAAOuz4B,EAAwBuC,QAC/B5/wB,KAAM,yBACN14C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,gBAGvB,eAACr9Q,EAAA,EAAD,CACErxR,MAAO/U,EAAE,2BACTrwB,MAAOuz4B,EAAwB+B,MAC/Bp/wB,KAAM,yBACN14C,QAAS,CACP2wG,QAAS3wG,EAAQo2f,WACjBC,UAAWr2f,EAAQs2f,qBAM7B,gBAAC32f,EAAA,EAAD,CAAMW,WAAW,EAAMgB,KAAK,SAASpB,UAAWF,EAAQi6zB,eAAxD,UACE,eAAC,GAAD,CACE5pxB,QAASA,EACTv9E,QAASA,EACTqmU,uBAAwBryW,KAAKqyW,yBAE/B,gBAACx5R,EAAA,EAAD,CAAMW,WAAW,EAAME,UAAU,SAASN,UAAWF,EAAQk6zB,kBAA7D,UACE,eAACn7c,GAAA,EAAD,CACEC,cAAegtC,KACf7yH,uBAAwBryW,KAAKqyW,uBAC7BrmU,QAASA,EACT2ya,eAAgB,CAAEtrV,aAAc,SAChC4gP,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE0vxB,0BAA2Bhu4B,KAClEs/d,oCAAqC5je,KAAK4ypB,wBAC1C/uL,qBAAsBuqH,IAExB,eAACv1gB,EAAA,EAAD,CACEW,WAAW,EACXE,UAAU,MACVN,UAAWF,EAAQi/W,iBACnB39W,KAAK,SAJP,SAME,eAAC3B,EAAA,EAAD,CACEe,MAAM,EACNgB,GAAI,GACJxB,UAAWF,EAAQk/W,qBAHrB,SAKGy6c,EACG,eAACx6c,EAAA,EAAD,CACErtD,QAAS,eAAC,IAAD,IACTC,SAAU,eAACp2E,EAAA,EAAD,CAAgB5uN,MAAM,cAChC2kS,UAAW,eAACpxR,EAAA,EAAD,CAAYE,QAAQ,KAApB,SAA0B3tF,EAAE,4BACvC2+W,gBAAgB,IAElB,eAAC74Q,EAAA,EAAD,CACEz4C,UAAWF,EAAQ6oT,eADrB,SAG2B,IAAxBkvgB,EAAel14B,KACZ,uCACE,sBAAKu/G,MAAO,CAAE+O,SAAU,OAAQhuC,SAAU,GAA1C,SACE,gBAACi8W,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,CAAWr/W,QAAS,CAAE3hE,KAAM2hE,EAAQs/W,WAApC,SACE,eAACC,EAAA,EAAD,UACGV,EAAyB/ub,KAAI,SAAC0gI,EAAQvtI,GAAT,OAC5ButI,EAAO4oR,WAED,eAACtiI,EAAA,EAAD,CAEE92M,QAAS,CAAE3hE,KAAM2hE,EAAQw/W,YACzBp9U,MAAOouB,EAAOpuB,MACd0zP,cAAe/2K,IAAYvuD,EAAOzoG,IAAKksM,EAJzC,SAME,eAACukjB,EAAA,EAAD,CACEzugB,OAAQhrF,IAAYvuD,EAAOzoG,GAC3By4C,UAAW,EAAK++sB,aAAa/upB,EAAOzoG,IACpC4jF,QAAS,kBAAM,EAAKotxB,SAASvowB,EAAOzoG,KAHtC,SAKGlV,EAAE29G,EAAO5oG,UAVP3kC,GAeP,eAAC6zR,EAAA,EAAD,CAAuB92M,QAAS,CAAE3hE,KAAM2hE,EAAQw/W,YAAcp9U,MAAOouB,EAAOpuB,MAA5E,SACGvvF,EAAE29G,EAAO5oG,QADI3kC,UAO5B,eAACw8b,EAAA,EAAD,UACGs4c,GAAkBA,EAAejo4B,KAAI,SAACy2H,EAAsBtjI,GAAvB,OACpC,eAACs8b,EAAA,EAAD,CAAUx3Z,GAAE,UAAK9kC,GAAqBqhW,OAAO,EAAM34O,QAAS,kBAAM,EAAKjC,SAAS,CAAEo1pB,eAAgBv4oB,KAAlG,SACGA,GAAUs4T,EAAyB/ub,KAAI,SAAC+pZ,GACvC,OAAQA,EAAO9xX,IACb,IAAK,QAAS,OACZ,eAAC+uP,EAAA,EAAD,CAA2Bl0M,QAAQ,OAAOw/B,MAAO,CAAChgC,MAAO,GAAzD,SACE,eAAC,IAAD,CAAOkrC,IAAKiZ,EAAO7+G,MAAMmyY,EAAOhpS,MAApB,aAA0CjD,aAAa,EAAMD,YAAa,OAAQvrC,MAAO,OAAQC,OAAQ,gBADvGw3U,EAAO9xX,IAIzB,IAAK,aAAc,OAAO,eAACgn2B,GAAA,EAAD,CAAgC3wqB,eAAgB73F,EAAO17H,IAAI,mBAAtCgvZ,EAAO9xX,IACtD,IAAK,SAAU,OAAO,eAAC,KAAD,CAA+Bw+F,OAAQA,GAAtBszR,EAAOjyX,OAC9C,IAAK,gBAAiB,OAAO,eAAC,KAAD,CAAUsvP,SAAS,EAA0B5hR,KAAMixH,EAAO17H,IAAI,iBAAkBmsR,SAAQ,UAAK+inB,EAAL,YAAmBxzwB,EAAO17H,IAAI,QAAvFgvZ,EAAOjyX,OACnE,IAAK,QACL,IAAK,eACL,IAAK,cACL,IAAK,SACL,IAAK,uBACL,IAAK,sBAAuB,OAAO,eAAC,KAAD,CAA6B+qF,KAAM4T,EAAO7+G,MAAMmyY,EAAOhpS,OAAxCgpS,EAAOjyX,OACzD,IAAK,YACL,IAAK,eAAgB,OAAO,eAAC,KAAD,CAA6B+qF,KAAM04M,YAAW9kM,EAAO7+G,MAAMmyY,EAAOhpS,OAAO,IAA1DgpS,EAAOjyX,OAClD,IAAK,SAAU,OAAO,eAAC,GAAD,CAA+B2+F,OAAQA,EAAQvlH,SAAUk0kB,GAAxCr7L,EAAOjyX,OAC9C,IAAK,YAAa,OAAO,eAAC,GAAD,CAA+B2+F,OAAQA,EAAQkvd,WAAY,aAA1C57L,EAAOjyX,OACjD,IAAK,aAAc,OAAO,eAAC,GAAD,CAA+B2+F,OAAQA,EAAQkvd,WAAY,aAAcz0kB,UAAU,GAAlE64Y,EAAOjyX,OAClD,IAAK,UAAW,OACd,eAACkvP,EAAA,EAAD,CAA2Bl0M,QAAQ,OAAOw/B,MAAO,CAAChgC,MAAO,EAAG2xC,UAAW,UAAvE,SACIwS,EAAO17H,IAAI,YACX,eAACkmH,EAAA,EAAD,CAASC,MAAOn+F,EAAE,8BAAlB,SAAiD,eAAC,KAAD,CAAUk6E,MAAM,aAFrD8sT,EAAO9xX,IAMzB,IAAK,UACH,OAAO,eAAC,GAAD,CAEGstS,YAAawkkB,GAAkB,kBAAM,EAAKrB,iBAAiBjywB,IAC3D2wwB,gBAAiB,kBAAM,EAAK2B,sBAAsBtywB,IAClDgvM,aAAc,kBAAM,EAAKqjkB,mBAAmBrywB,KAHvCszR,EAAOjyX,OAKxB,IAAK,gBACH,OAAO,eAAC,GAAD,CAEGytS,WAAY,kBAAM,EAAKojkB,eAAelywB,EAAO17H,IAAI,kBAAmB07H,EAAO17H,IAAI,QAC/Eqs4B,gBAAiB,kBAAM,EAAK2B,sBAAsBtywB,EAAQlW,EAASv9E,GAAS,IAC5EyiS,aAAc,kBAAM,EAAK7rN,SAAS,CAAEqzU,iBAAiB,EAAM+hV,eAAgBv4oB,MAHtEszR,EAAOjyX,YAtCC3kC,aAmDvC,eAACg9b,EAAA,EAAD,CACE/jb,MAAO093B,EAAoB9m2B,EAAQl+B,OAASk+B,EAAQy9E,MAAQ,EAAIz9E,EAAQl+B,QAAR,OAAiBmj4B,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAgBl14B,MACjGqtmB,mBAAoB,gBAAGp6lB,EAAH,EAAGA,KAAMC,EAAT,EAASA,GAAT,gBAAqBD,EAArB,YAA6BC,IACjDmqE,UAAWF,EAAQkgX,WACnB9/W,UAAU,MACV+/W,iBAAkBtta,EAAE,0BACpButa,aAAct5b,KAAK42b,iBACnB2C,mBAAoB,CAAC,EAAG,GAAI,GAAI,IAChCC,oBAAqBx5b,KAAK62b,wBAC1B4C,YAAaztZ,EAAQy9E,MACrBmiJ,KAAMA,EACN8tL,iBAAkB,SAACy6V,GAAD,OAAqB,eAAC,IAAD,aAAwBC,iBAAiB,GAAUD,KAC1Fj7sB,QAAS,CACP0gX,QAAS1gX,EAAQ2gX,wBAIvB,eAACC,EAAA,EAAD,CACE1/E,MAAOi5hB,IACPh5hB,gBAAiBr6W,KAAKqx4B,gBACtB/2hB,kBAAmBw/B,EAAOx/B,kBAC1BC,mBAAoBu/B,EAAOv/B,mBAC3BI,aAAcm/B,EAAOn/B,aACrBC,kBAAmBk/B,EAAOl/B,6BAQ5C,eAAC/hS,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAU26W,EAAmB,QAAU,GAJ3C,SAOE,eAACw8N,GAAA,EAAD,CACEhwV,aAAc3iU,KAAKk2b,mBACnBvrV,KAAM3qG,KAAKgnC,MAAMmvZ,iBACjBnqZ,QAASA,EACToijB,QAASA,EACT/7O,uBAAwBryW,KAAKqyW,uBAC7BugT,wBAAyB5ypB,KAAK4ypB,wBAC9Bt9S,UAAWt1W,KAAKgnC,MAAMsr2B,0BACtBr+hB,aAAc,SAAC3vW,GAAD,OAAS,EAAKs+G,SAAS,CAAE0vxB,0BAA2Bhu4B,SAGtE,eAACu0E,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQk/W,qBACnB98U,MAAO,CACL9/B,SAAUk9V,EAAoB,QAAU,GAJ5C,SAOE,eAAC,KAAD,CACE6B,WAAY1oH,IAAao9kB,EAAwBuC,QAAU122B,eAAa632B,yBAA2B732B,eAAa832B,uBAChH95d,eAAgBjnH,IAAao9kB,EAAwBuC,QAAUxx4B,KAAKgnC,MAAMmq2B,eAAiBnx4B,KAAKgnC,MAAMkq2B,aACtGn4d,iBAAkBA,EAClBF,gBAAiB,CAAC,iBAClB58F,OAAQy8F,EACR/zS,QAAS3kI,KAAK24a,oBACdkB,oBAAqB75a,KAAK65a,wBAG9B,eAAC,IAAD,CACE9rD,WAAYiqZ,EAAej0wB,IAAI,MAC/B4mG,KAAMsrV,EACNjoE,SAAUgqZ,EAAej0wB,IAAI,iBAC7BkqX,kBAAmB,kBAAM,EAAKrrQ,SAAS,CAAEqzU,iBAAiB,KAC1D/sH,aAAclpU,KAAKyx4B,wBACnBnjhB,aAAa,IAEf,eAAC,GAAD,CACE3jR,KAAM6nR,EACN/yP,OAAQu4oB,EACRzupB,QAASA,EACTiU,WAAYA,EACZxxF,QAASA,EACTiiX,YAAa+pX,EAAej0wB,IAAI,SAChC0s4B,sBAAuB,kBAAM,EAAK7txB,SAAS,CAAE4vQ,oBAAoB,OAEnE,eAAC8ghB,GAAA,EAAD,CACE7zwB,OAAQu4oB,EACRxzJ,kBAAkB,EAClBhnf,WAAYA,EACZjU,QAASA,EACTv9E,QAASA,IAEX,eAACoiX,GAAA,EAAD,CACEzjT,KAAM3qG,KAAKgnC,MAAMkhX,yBACjBj6P,UAAU,EACVogQ,2BAA4B,kBAAM,EAAKzrS,SAAS,CAAEslS,0BAA0B,mB,GA1yB1DzjX,aAi1B1BmI,GAAkBkG,YAAyB,CAC/C+/1B,gBAAiB11oB,eACjB8zoB,eAAgBh0oB,eAChB61oB,kBAAmB51oB,eACnBl9J,OAAQh/C,eACRmyR,YAAaurB,eACblrB,aAAcmrB,eACdo0iB,cAAel1oB,cACfosM,uBAAyBplZ,cACzB4t1B,mBAAoBn9vB,aAAqBx6G,eAAa632B,0BACtDD,iBAAkBp9vB,aAAqBx6G,eAAa832B,wBACpD51vB,kBAAmBv7F,eACnBux1B,sBAAuB1s1B,iBAGV2uB,kBACbgG,aAt/Ba,SAACC,GAAD,MAA+B,CAC5C1B,UAAW,CACT+3C,OAAQ,OACRvM,gBAAiB9pC,EAAM+pC,QAAQC,KAAK,IACpC5pC,MAAO,OACPe,SAAU,GAEZ62zB,sBAAuB,CACrB7oxB,SAAU,QAEZ8oxB,eAAgB,CACd5hxB,OAAQ,EACRl1C,SAAU,EACV4tD,UAAW,UAEbmpwB,kBAAmB,CACjB93zB,MAAO,EACPe,SAAU,GAEZ+7W,qBAAsB,CACpB/tU,SAAU,OACVkH,OAAQ,OACR1J,UAAW3sC,EAAM6mD,QAAQ,GACzBta,aAAcvsC,EAAM4/C,MAAMrT,cAE5B0wU,iBAAkB,CAChBluT,UAAW,SACXnuD,QAAS,qBACTy1C,OAAQ,EACRl1C,SAAU,GAEZ0lT,eAAgB,CACd93P,UAAW,OACX7uD,QAAS,OACTiB,SAAU,EACVZ,cAAe,SACfC,eAAgB,SAChB61C,OAAQ,QAEVinU,UAAW,CACTz9T,WAAY7/C,EAAM+pC,QAAQU,OAAOmjB,OAEnC4vT,WAAY,CACVjiU,WAAY,SACZ,WAAY,CACV96E,QAAS,KACTshE,SAAU,WACV1iG,KAAM,EACNg6G,OAAQ,EACRj5C,MAAO,OACPssC,aAAc,wBAGlBwxU,WAAY,CACVh+W,QAAS,OACTU,QAAS,EACT8rC,aAAc,OACdyC,SAAU,WAEZwvU,kBAAmB,CACjBxvU,SAAU,QAEZ4qC,KAAM,CACJ5qC,SAAU,UACVuJ,UAAW,UACXtX,UAAWphC,EAAMZ,QAAQ,MAE3Bg1f,WAAY,CACV7zf,cAAe,MACfg7C,WAAY,UAEd+4c,aAAc,CACZ57c,UAAW,UACX3B,WAAY,GAEdkS,IAAK,CACHlnB,SAAU,WACVqX,IAAK,MACLjB,aAAc,QAEhBs+J,eAAgB,CACd3sK,gBAAiB9pC,EAAM+pC,QAAQU,OAAOmjB,MACtCjhB,UAAW3sC,EAAM6mD,QAAQ,GACzBjmD,QAAS,GAEXquC,UAAW,CACT5uC,OAAQL,EAAMZ,QAAQ,EAAG,IAE3Bi5zB,oBAAqB,CACnBluxB,OAAQ,UACR,UAAW,CACTL,gBAAiB,wBAOrBwuxB,eAAgB,CACdl3xB,UAAWphC,EAAMZ,QAAQ,KACzBgB,MAAO,IACP6rC,SAAU,GACVuS,WAAY,IACZzM,UAAW,UAEbu7O,UAAW,CACTxjP,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,MAEzCs5qB,oBAAqB,CACnBxhrB,SAAU,YAEZyhrB,mBAAoB,CAClB,UAAW,CACT15qB,gBAAiB9pC,EAAM+pC,QAAQE,QAAQ,UAq4BxB,CAAE6J,WAAW,IAChC7vE,YAAgB,gBAChBgwE,KACAtQ,kBAAQjyE,IAjDiB,SAACjC,GAC1B,MAAO,CACLA,WACAsltB,aAAc,SAACjktB,EAAyBu9E,EAAkBi5hB,GACxD73mB,EAAS,IAAI0+C,KAAmB,CAC9Br9C,UACAu9E,UACAi5hB,YAGJ+vP,eAAgB,WACd5n2B,EAAS,IAAIqoS,OAEfw/jB,gBAAiB,WACf7n2B,EAAS,IAAI0oS,OAEfu9jB,gBAAiB,SAACnxwB,EAAsBlW,EAAkBv9E,EAA0BiiX,GAClFtjX,EAAS,IAAI4jD,IAAsB,CACjCkxC,SACA+ihB,OAAO,EACP+tP,mBAAmB,EACnBtif,cACA1kS,UACAv9E,UACArB,mBAqBOsqC,CAKb87zB,K,yKKlmCI0C,E,4MACGzs2B,MAAQ,CACb8k2B,UAAU,EACV34wB,SAAU,M,EAyCJ0yiB,gBAAkB,SAAC1+hB,GACzB,IAAMuswB,EAAcvswB,EAAMziB,cAC1B,EAAK9B,UAAS,SAACquJ,GAAD,MAAgB,CAC5B66nB,UAAW76nB,EAAU66nB,SACrB34wB,SAAUugxB,O,EAGNC,mBAAqB,WAC3B,EAAK/wxB,UAAS,SAACquJ,GAAD,MAAgB,CAC3B66nB,UAAU,O,4CA/Cf,WACE,MAOI9r4B,KAAKkqC,MANPioH,EADF,EACEA,QACAm8K,EAFF,EAEEA,UACAp1P,EAHF,EAGEA,QACAgkC,EAJF,EAIEA,SAJF,IAKE02xB,wBALF,MAKqB,QALrB,MAMEC,2BANF,MAMwB,OANxB,EAQA,EAA+B7z4B,KAAKgnC,MAA5B8k2B,EAAR,EAAQA,SAAU34wB,EAAlB,EAAkBA,SAClB,OACE,eAAC,WAAD,WACE,eAAC5W,EAAA,EAAD,CACEW,SAAUA,EACV2H,QAAS7kH,KAAK6lqB,gBACdzslB,UAAW6tC,IAAW/tC,EAAQ46zB,aAHhC,UAKG3hvB,EACD,cAAC,IAAD,CAAiBvgC,KAAM,gBAAiB71H,KAAM,KAAMq9E,UAAWF,EAAQ66zB,qBAEzE,cAAC,EAAD,CACEppyB,KAAMmhyB,EACNx9jB,UAAWA,EACXn7M,SAAUA,EACVwR,QAAS3kI,KAAK2z4B,mBACd73f,aAAc,CACZ/7G,SAAU,MACVK,WAAYwzmB,GAEd3uwB,gBAAiB,CACf86J,SAAU,MACVK,WAAYyzmB,GAEd36zB,QAASA,W,GAvCSz0C,aA0DbwwC,oBACbgG,aA7FoB,SAACC,GAAD,MAAmB,CACvC84zB,iBAAkB,GAElBF,YAAa,CACX14zB,QAAS,OACTM,eAAgB,iBAElBq4zB,gBAAiB,CACf7rxB,WAAY,QAEd+rxB,yBAA0B,OAkFbh/zB,CAEbw+zB,G,8ECbIS,E,4MAGGlt2B,MAAQ,CACbmt2B,aAAc,M,EAGRC,WAAY,E,0DAEpB,WACEp04B,KAAKo04B,WAAY,I,oBAGnB,WAAiB,IAAD,OACd,EAQIp04B,KAAKkqC,MAPPipF,EADF,EACEA,SACAxoB,EAFF,EAEEA,KACAg6B,EAHF,EAGEA,QACAm3Q,EAJF,EAIEA,aACA72Q,EALF,EAKEA,gBACA/rD,EANF,EAMEA,QACAo1P,EAPF,EAOEA,UAEF,OACE,cAAC39C,EAAA,EAAD,CAAMx9J,SAAUA,EACVxoB,KAAMA,EACNg6B,QAASA,EACT61qB,sBAAsB,EACtB1+Z,aAAcA,EACd72Q,gBAAiBA,EACjB43S,mBAAoB,KACpB3jW,QAAS,CACP64C,MAAO74C,EAAQ86zB,kBAEjB5tO,cAAe,CACbltlB,QAAS,CACP3hE,KAAM2hE,EAAQ+6zB,2BAGlBv7gB,eAAe,EAfrB,SAkBIpqD,EAAUtlU,KAAI,SAAC+pH,EAAU52H,GAGvB,IACEmI,EAOEyuH,EAPFzuH,IAGAugH,GAIEkO,EANFshxB,aAMEthxB,EALFo/B,QAKEp/B,EAJFlO,SAEAyvxB,GAEEvhxB,EAHF+gM,gBAGE/gM,EAFFuhxB,cACGzjB,EAPL,YAQI99vB,EARJ,GAUMwhxB,EAAc,GAyBpB,OAxBI1vxB,IACF0vxB,EAAW,QAAc,SAACns4B,GACxB,GAA+B,MAA3B,EAAK4+B,MAAMmt2B,aAAf,CAGA,IAAKG,EAGH,OAFA3vwB,EAAQv8H,EAAG,WACXy8G,EAAQz8G,GAMV,EAAKw6G,SAAS,CAAEuxxB,aAAch44B,IAC9B,IAAMq44B,EAAS,WACT,EAAKJ,YAGT,EAAKxxxB,SAAS,CAAEuxxB,aAAc,OAC9BxvwB,EAAQ,KAAM,QAEhB1lF,QAAQC,QAAQ2lE,EAAQz8G,IAAImuE,KAAKi+zB,EAAQA,MAGzCzhxB,EAASxxH,eAAe,aAExB,cAAC,EAAD,eACMwxH,IAIHA,EAAS7V,SACZ,cAAC+M,EAAA,EAAD,CAASC,MAAO6I,EAAS+gM,iBAAmB,GAEnC3pM,UAAU,SAFnB,SAIE,8BACE,cAAC5N,EAAA,EAAD,qCACInjC,UAAWm0C,IAAW,CACpBwF,EAASo/B,SAAoC,kBAAzBp/B,EAASo/B,QAAQ7tJ,IAA0B40E,EAAQu7zB,oBAAsB,GAC7F1hxB,EAASo/B,SAAoC,oBAAzBp/B,EAASo/B,QAAQ7tJ,IAA4B40E,EAAQujX,WAAa,GACtF1pU,EAASshxB,aAAen7zB,EAAQm7zB,aAAe,MAE7CxjB,GACA0jB,GAPR,aASGxhxB,EAASo/B,cAdhB,UACiB7tJ,GADjB,OACuBnI,IAiBrB,eAACogH,EAAA,EAAD,qCAEFnjC,UAAWm0C,IAAW,CACpBwF,EAASo/B,SAAoC,kBAAzBp/B,EAASo/B,QAAQ7tJ,IAA0B40E,EAAQu7zB,oBAAsB,GAC7F1hxB,EAASo/B,SAAoC,oBAAzBp/B,EAASo/B,QAAQ7tJ,IAA4B40E,EAAQujX,WAAa,GACtF1pU,EAASshxB,aAAen7zB,EAAQm7zB,aAAe,MAE7CxjB,GACA0jB,GARF,cAUDxhxB,EAASo/B,QACT,EAAKnrH,MAAMmt2B,eAAiBh44B,GAAS,cAACylU,EAAA,EAAD,CAAkB7lU,KAAM,GAAIq9E,UAAWF,EAAQw7zB,kBAXnF,UACMpw4B,GADN,OACYnI,a,GA3GLsoC,aA+HVwwC,oBACbgG,aA9MoB,SAACC,GAAD,MAA+B,CACnDgiC,SAAU,CACRjX,MAAO/qB,EAAM+pC,QAAQC,KAAK,KAE5Bu3U,WAAY,CACVlrU,OAAQ,OACRg2L,UAAW,QAEbktlB,oBAAqB,CACnBn4xB,UAAW,OACXiV,OAAO,GAAD,OAAuB,EAAlBr2C,EAAMZ,UAAX,OAERw5zB,YAAa,GAEbE,iBAAkB,GAElBD,gBAAiB,GAEjBE,yBAA0B,GAE1BI,aAAc,CACZ,UAAW,CACTrvxB,gBAAiB,gBAGrB0vxB,aAAc,CACZxsxB,WAAYhtC,EAAMZ,eAmLPrF,CAEbi/zB,GC9NaA,O,8OCFA/wwB,eAAQ,kBAAM,oC,OCuIvBwxwB,E,4MACGC,QAAUnw2B,c,EACVow2B,WAAapw2B,c,EACbuC,MAAQ,CACb8t2B,UAAW,EACXhJ,SAAU9l2B,SAASz+B,gBAAgB63H,aAAe,K,EAG7C21wB,cAAgB,kBAAM,EAAKnyxB,SAAS,CACzCkpxB,SAAU9l2B,SAASz+B,gBAAgB63H,aAAe,IAClD01wB,UAAW/34B,KAAKC,IAAI,EAAK434B,QAAQ9s2B,QAAQ+hT,YAAa,EAAK7iT,MAAM8t2B,c,EAG5DjkoB,kBAAoB,kBAAMniP,OAAOs6E,iBAAiB,SAAU,EAAK+ryB,gB,EAEjE7joB,qBAAuB,kBAAMxiP,OAAOu6E,oBAAoB,SAAU,EAAK8ryB,gB,EAQvEC,eAAiB,SAACrqyB,GAAD,OAAoB3kE,SAASz+B,gBAAgB63H,YAAc,KAAO,EAAKxc,SAAS,CAAEkpxB,cAAmBhw4B,IAAT6uG,GAAsB,EAAK3jE,MAAM8k2B,SAAWnhyB,K,wDANhK,SAA0B0htB,GAGxB,OAFqBrszB,KAAKkqC,MAAMuf,SAAxB0C,WAEYkgwB,I,oBAKtB,WAAiB,IAAD,OACd,EAGIrszB,KAAKgnC,MAFP8k2B,EADF,EACEA,SACAgJ,EAFF,EAEEA,UAEF,EAII904B,KAAKkqC,MAHPgvC,EADF,EACEA,QACA8tL,EAFF,EAEEA,MACAj7O,EAHF,EAGEA,EAGF,OACE,eAAC8sD,EAAA,EAAD,CAAMW,WAAW,EAAMJ,UAAWF,EAAQ3hE,KAAMijE,KAAK,SAArD,UACE,cAAC3B,EAAA,EAAD,CACEe,MAAM,EACNR,UAAWF,EAAQ+7zB,SACnB35xB,MAAO,CACLhgC,MAAOwwzB,EAAYgJ,GAAa,OAAU,EAC1C9zwB,OAAQ8qwB,EAAW,GAAK,GAL5B,SAQE,cAAC7z3B,EAAA,EAAD,CACEqhE,UAAU,MACV79E,IAAKuE,KAAK404B,QAFZ,SAIG5toB,EAAMh+P,KAAI,SAAC+pH,GAAD,OACT,eAAC,WAAD,WACE,eAACk/F,EAAA,EAAD,CACE9kG,QAAQ,EACRj0C,QAAS,CACP3hE,KAAMg2G,IAAWr0C,EAAQg8zB,YAAah8zB,EAAQi8zB,uBAEhDtwxB,QAAS,SAAAuwxB,GAAE,OAAIA,EAAGh0wB,kBALpB,UAOE,cAAC29R,EAAA,EAAD,CAAc3lV,UAAWF,EAAQk8O,SAAjC,SACE,cAAC,IAAD,CAAiBxjM,KAAMmB,EAASnB,SAElC,cAACotS,EAAA,EAAD,CAAc75S,QAASp5F,EAAEgnG,EAASjyF,OAAQo4C,QAAS,CAAEisC,QAASjsC,EAAQm8zB,yBAExE,cAACp93B,EAAA,EAAD,CAAM6wlB,gBAAgB,EAAtB,SAEI/1e,EAAS65U,MAAMrhc,QAAO,SAAC0+F,GAAD,OAAWA,EAAKqryB,cAAYts4B,KAAI,SAACihG,GAAD,OACpD,cAAC,IAAD,yBACEh7F,GAAE,UAAK8hB,iBAAL,OAAqBk5E,EAAKh7F,MAxEtBiuG,EA0EoBjT,EAAKsryB,eAAiBtryB,EAAKsryB,cAAcr4xB,SA1EjD9+G,OAAO+8C,OAAO,GAAI+hE,GAAY,CACtE2H,QAAS,SAAAuwxB,GAAE,OAAIA,EAAGh0wB,sBAsEE,aAKE,cAAC6wF,EAAA,EAAD,2BACMhoH,EAAKsryB,eADX,IAEEpoxB,QAAQ,EACRj0C,QAAS,CACP3hE,KAAMg2G,IAAWr0C,EAAQ6rG,OAAQ7rG,EAAQg8zB,aACzC5vxB,SAAUwmxB,EAAW,GAAK5yzB,EAAQs8zB,wBAEpCn1F,iBAAkB,CAAEnnuB,QAAS,CAAE3hE,KAAM2hE,EAAQu8zB,eAC7CnwxB,SAAU,EAAKowxB,mBAAL,UAA2B3k3B,iBAA3B,OAA2Ck5E,EAAKh7F,KAC1D41G,QAAS,WACP,EAAKmwxB,gBAAe,GAEhB,EAAKH,WAAW/s2B,QAAQ47T,SAC1B,EAAKmxiB,WAAW/s2B,QAAQ47T,SAAS,CAAEpvO,IAAK,EAAG/5G,KAAM,EAAGk1U,SAAU,YAE9D,EAAKoljB,WAAW/s2B,QAAQ8/Q,UAAY,EACpC,EAAKitlB,WAAW/s2B,QAAQ6/Q,WAAa,IAhB3C,SAoBE,cAACq3G,EAAA,EAAD,CAAc75S,QAASp5F,EAAEk+E,EAAKnpE,OAAQs4C,UAAWF,EAAQy8zB,sBAAuBz8zB,QAAS,CAACisC,QAASjsC,EAAQ08zB,qBAzB/G,YAEY3ryB,EAAKnpE,QAzET,IAAAo8E,SAuDhB,YAA0B6V,EAASjyF,eAmDzC,cAAC+3C,EAAA,EAAD,CAAMe,MAAM,EAAMn+E,IAAKuE,KAAK604B,WAAYz7zB,UAAWF,EAAQ28zB,eAA3D,SACE,sBAAKz8zB,UAAWF,EAAQ48zB,oBAAxB,UACE,eAAC,SAAD,WACG9uoB,EAAMr7P,QAAO,SAACihc,EAAOhzX,GACpB,OAAOgzX,EAAMthc,OAAOsuE,EAAKgzX,SACxB,IAAIrhc,QAAO,SAAC0+F,GAAD,OAA4B,MAAlBA,EAAK3wB,aAAmBtwE,KAAI,SAACihG,GACnD,OAAO,cAAC,QAAD,CAEL8f,KAAI,UAAKh5F,iBAAL,OAAqBk5E,EAAKh7F,IAC9B+4M,OAAO,EACP5lF,OAAQ,WACN,OAAO,cAAC64J,EAAA,EAAD,CACLtmN,aAAa,iBACbuE,QAAS,CACPM,UAAWN,EAAQ68zB,wBAHhB,SAML,cAAC9ryB,EAAK3wB,UAAN,QAXC,YACK2wB,EAAKh7F,QAenB,cAAC,QAAD,CAAOqqE,UAAW08zB,OAEpB,cAACn9zB,EAAA,EAAD,CACEW,WAAW,EACXM,QAAQ,SACRb,WAAW,SACXG,UAAWF,EAAQ65lB,eACnBlujB,QAAS,kBAAM,EAAKmwxB,kBALtB,SAOE,cAAC,IAAD,CAAe7txB,SAAS,QAAQ7L,MAAO,CAAE+gB,UAAWyvwB,EAAW,YAAc,8B,GArIhErn2B,aA8IZwwC,sBACbgG,aApOa,SAACC,GAAD,MAA+B,CAC5C66zB,uBAAwB,CACtBxkxB,OAAQ,QAEVwzD,OAAQ,CACNr8C,YAAa,IAAkBxtD,EAAMZ,WAEvCu7zB,eAAgB,CACdv6zB,MAAO,EACP0mD,KAAM,OACNulL,UAAW,QAEbuulB,oBAAqB,CACnBvkxB,OAAQ,OACRn2C,QAAS,OACTK,cAAe,UAEjB25O,SAAU,CACR75O,OAAO,KAAD,OAAOL,EAAMZ,UAAb,MACNgB,MArBc,IAqBKJ,EAAMZ,UACzBkB,SAAU,GAEZ05zB,YAAa,CACXpwkB,UAAW,cAEbqwkB,qBAAsB,CACpB9gxB,cAAe,OACfhK,SAAU,SACVsL,aAAc,WACdc,WAAY,UAEdg/wB,aAAc,CACZxvyB,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5BywxB,sBAAuB,CACrBtrxB,SAAU,SACVsL,aAAc,WACd1vB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,SAE5BywxB,aAAc,CACZn/wB,WAAY,UAEdl/G,KAAM,CACJ8kE,SAAU,EACVk1C,OAAQ,GAEV0jxB,SAAS,aACP1tlB,UAAW,OACXviM,gBAAiB,QACjB6C,UAAW3sC,EAAM6mD,QAAQ,GACzBvN,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,QAAS,WAAY,CACzD+3V,OAAQl7Q,EAAMu5C,YAAY2hO,OAAO48D,UACjCt+R,SAAUx5C,EAAMu5C,YAAYC,SAAS2+R,WAEtCn4U,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9Bn+gB,MAAO,EACP0lD,QAAS,IAGb+xiB,eAAe,aACbz3lB,MAAO,EACP+uC,SAAU,UACTnvC,EAAMc,YAAYy9gB,KAAK,MAAQ,CAC9Bn+gB,MAAO,GACPi2C,OAAQ,GACRtU,SAAU,QACVhX,MAAO,QACP80B,WAAY7/C,EAAM+pC,QAAQC,KAAK,KAC/BuC,aAAa,cACb8M,OAAQ,oBACRlP,OAAQ,YAGZmwxB,uBAAwB,CACtBxwxB,gBAAiB,oBAEnBqwxB,mBAAoB,CAClBpvyB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,aAwJ5BhmE,YAAgB,gBAFH81B,CAGb0/zB,I,wKC1NIsB,E,4MACGrhP,cAAgB,SAACxspB,GACtB,IACEuiC,EACE,EAAKT,MADPS,SAGIurE,EAAa9tG,EAAE4kB,OAA4BtxB,MAChC,MAAbw6G,GACFvrE,EAAS,IAAImoE,KAAoB,CAACoD,UAAWt6D,SAASs6D,EAAW,Q,4CAIrE,WACE,MAOIl2G,KAAKkqC,MANPwjW,EADF,EACEA,kBACW5iL,EAFb,EAEE50G,UACA00G,EAHF,EAGEA,SACA1xI,EAJF,EAIEA,QACUg9zB,EALZ,EAKE16xB,SACAzvF,EANF,EAMEA,EAGIyvF,EAAiC,MAAtB06xB,EAA6BA,EAAqBl24B,KAAK40pB,cAClE1+iB,EAAmC,MAAvB40G,EAA8BA,EAAsB4iL,EAEtE,OACE,eAAC5sQ,EAAA,EAAD,CAAa1nD,UAAWF,EAAQgtT,YAAhC,UACE,cAAC0B,EAAA,EAAD,CAAY7yE,QAAQ,qBAApB,SAA0ChpS,EAAE,6BAC5C,cAAC+1F,EAAA,EAAD,CACEtG,SAAUA,EACV9/G,MAAOw6G,EACPyD,WAAY,CACVnrG,KAAM,oBACNyyB,GAAI,sBALR,SASI2pL,EAAS5hN,KAAI,SAAC+kR,EAAwBoonB,GACpC,OAAQ,eAAC55xB,EAAA,EAAD,CAA4B7gH,MAAOy64B,EAAnC,UAAiDponB,EAAQhqR,IAAI,MAA7D,IACNgqR,EAAQhqR,IAAI,SAAWgoB,EAAE,6BADJoq3B,MAGtBvt4B,WAAWhG,UAAU6J,MAAK,SAAC9G,EAAQC,GACpC,OAAOD,EAAErB,IAAMsB,EAAEtB,gB,GA1CDmgC,aAmDxBmI,EAAkBkG,YAAyB,CAC/C46V,kBAAmBnjL,cACnBK,SAAUF,gBASGz1I,oBACbgG,aAxEa,SAACC,GAAD,MAA+B,CAC5CgrT,YAAa,CACX3qT,OAAQL,EAAMZ,UACdkB,SAAU,SAsEZqjC,kBAAQjyE,GARiB,SAACjC,GAC1B,MAAO,CACLA,eAOFwU,YAAgB,gBAHH81B,CAIbgh0B,GChIaA,O,4LCgMAhh0B,oBACbgG,aA7Ja,SAACC,GACd,MAAO,CACL0zP,KAAM,CACJnnN,aAAcvsC,EAAM4/C,MAAMrT,aAC1BN,SAAU,OACVrrC,QAAS,WACTi5C,cAAe,YACfz5C,MAAO,OACPE,SAAU,IACV6pC,OAAQ,UACR4H,UAAW,UAEb,WAAc,CACZ8N,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,cAAe,SAE7D,gBAAmB,CACjB8V,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,mBAAoB,SAElE,QAAW,CACT8V,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,WAAY,SAE1D,SAAY,CACV8V,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,YAAa,SAE3Dg5e,OAAQ,CACNlje,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDqujB,OAAQ,CACNv4iB,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDsujB,OAAQ,CACNx4iB,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,UAAW,SAEzDuujB,KAAM,CACJz4iB,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,QAAS,SAEvDwujB,IAAK,CACH14iB,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,OAAQ,SAEtD,QAAW,CACT8V,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,WAAY,SAE1D,UAAa,CACX8V,WAAYn6G,gBAAMs6D,EAAM+pC,QAAS,CAAC,SAAU,aAAc,SAE5DmxxB,kBAAmB,CACjBr7wB,WAAY7/C,EAAM+pC,QAAQ/5F,OAAO85P,mBACjC3/J,OAAQ,WAEV4qP,aAAc,CACZhqQ,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B1nD,MAAO,YA2GXn8B,YAAgB,gBAFH81B,EA9Eb,SAAC,GAeO,IAdLiE,EAcI,EAdJA,QACAntD,EAaI,EAbJA,EACA05E,EAYI,EAZJA,OACA0tB,EAWI,EAXJA,SACAkU,EAUI,EAVJA,WAEAH,GAQI,EATJ29pB,WASI,EARJ39pB,aACAk8pB,EAOI,EAPJA,aACAp3vB,EAMI,EANJA,QACiBqq2B,EAKb,EALJC,gBACAp5xB,EAII,EAJJA,SACA42M,EAGI,EAHJA,gBAGI,IAFJ+5kB,0BAEI,SADJ0I,EACI,EADJA,cAGKC,EAAYxq2B,EAAQrgC,QAAO,SAACyuE,EAAImkM,GACpC,IAAM7iR,EAAQ6iR,EAASx6Q,IAAI,SACrB0y4B,EAAiBrhU,YAAe15kB,GACtC,OAAO0+E,EAAG1yE,IAAIhM,EAAO0tB,iBAAO,CAC1B0X,MAAO/U,EAAE,UAAD,OAAW0q3B,GAAkB/64B,GACrCuqG,MAAOwwyB,EACP/64B,aAED0tB,iBAAO,KAEV,OACE,eAAC,WAAD,WACE,cAAC6gG,EAAA,EAAD,CACEC,MACEhN,EAAQ,OACJ42M,QADI,IACJA,IAAmB/nS,EAAE,iCACrByq3B,EAAU513B,MAAM,CAAC6kF,EAAQ,SAAUA,GAJ3C,SAOE,qBACEof,QAAS3H,EAAW,KAAOmqB,EAC3B,YAAWlU,EAAW,qBAAkBr3H,EACxCs9E,UAAW6tC,IAAW/tC,EAAQ01P,KAAM1xN,EAAWhkC,EAAQk9zB,kBAAoBl9zB,EAAQs9zB,EAAU513B,MAAM,CAAC6kF,EAAQ,YAC5G6V,MAAOi7xB,GAAiBA,EAAc3nkB,MAAQ,GAC9CpN,YAAa,SAAAp5T,GAAC,OAAIA,EAAE87G,mBALtB,SAOE,eAACrrC,EAAA,EAAD,CAAMW,WAAW,EAAMM,QAAQ,SAASb,WAAW,SAASuB,KAAK,SAAjE,UACK0iC,GAAY2wxB,EAAsB,cAAC,IAAD,CAAiB1mxB,SAAS,QAAQlhB,MAAM,aAAgB,KAC7F,cAACuT,EAAA,EAAD,yBACEpgC,UAAW8jC,EAAWhkC,EAAQ+2R,aAAe,IAAQomiB,GADvD,IAEE/6xB,MAAO,CACLqa,aAAc,WACdtL,SAAU,UAJd,SAOGmsxB,EAAU513B,MAAM,CAAC6kF,EAAQ,SAAUA,aAK5C,cAACkrL,EAAA,EAAD,CACE1vP,GAAG,gBACHkyF,SAAUA,EACVxoB,KAAMttG,QAAQ81H,GAEdwR,QAASuC,EALX,SAOGl7F,EAAQhjC,KAAI,SAACw3G,EAAQrkH,GAAT,OACX,cAACogH,EAAA,EAAD,CAAsB7gH,MAAO8kH,EAAOz8G,IAAI,SAAU8gH,QAAS,SAACz8G,GAAD,OAAOg7xB,EAAa5irB,EAAQp4G,IAAvF,SACE,cAAC42Z,EAAA,EAAD,CAAc9lV,QAAS,CAACisC,QAASjsC,EAAQisC,SACvCire,OAAO,EACPjre,QAASqxxB,EAAU513B,MAAM,CAAC4/F,EAAOz8G,IAAI,SAAU,SAAUy8G,EAAOz8G,IAAI,aAHzD5H,cCnLZyoyB,O,6BCFf,+CACe,SAAS3ohB,EAAmBpuQ,GACzC,GAAIpM,MAAMC,QAAQmM,GAAM,OAAO,YAAiBA,K,6BCFnC,SAASsuQ,IACtB,MAAM,IAAI95Q,UAAU,wIADtB,mC,6BCAe,SAAS8ve,EAAsBtke,EAAK7K,GACjD,IAAIwxE,EAAY,MAAP3mE,EAAc,KAAyB,qBAAXnO,QAA0BmO,EAAInO,OAAOC,WAAakO,EAAI,cAE3F,GAAU,MAAN2mE,EAAJ,CACA,IAIIw9Z,EAAI52O,EAJJ62O,EAAO,GACPC,GAAK,EACL9iQ,GAAK,EAIT,IACE,IAAK56J,EAAKA,EAAGxzE,KAAK6M,KAAQqke,GAAMF,EAAKx9Z,EAAGz0E,QAAQO,QAC9C2xe,EAAK7le,KAAK4le,EAAGt2e,QAETsH,GAAKive,EAAKpwe,SAAWmB,GAH4Bkve,GAAK,IAK5D,MAAO9gc,GACPg+L,GAAK,EACLgsB,EAAKhqN,EACL,QACA,IACO8gc,GAAsB,MAAhB19Z,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAI46J,EAAI,MAAMgsB,GAIlB,OAAO62O,GA3BT,mC,8MC6CO,SAASyka,EACd1q2B,EACAm7F,EACAw9M,EACAqU,EACA5rJ,EACA6rJ,GAEA,MAA4DjtT,EAApD2q2B,sBAAR,MAAyB,EAAzB,IAA4D3q2B,EAAhC4q2B,2BAA5B,MAAkD,IAAlD,EACMC,EAAQ,2BACT1vwB,GADS,IAEZmqE,SAAUnqE,EAAMmqE,UAAYqzI,EAAKrzI,UAAY,cAC7CqpJ,UAAWxzN,EAAMwzN,WAAa,gBAE1B4oQ,EAAe5+Q,EAAK4+Q,cAAgBv3jB,EAAQu3jB,aAAav6lB,KAAI,SAAAhG,GAAA,OAAKA,EAAEwL,SA2E5E,SAA4B24H,EAAcn7F,GACxC,IAAQkwT,EAAqDlwT,EAArDkwT,YAAa3oF,EAAwCvnO,EAAxCunO,QAAS5uG,EAA+B34H,EAA/B24H,KAA9B,EAA6D34H,EAAzB8q2B,sBAApC,MAAqD,IAArD,EAEM,gBAAiB3vwB,IACrBA,EAAM+0N,YAAc,gBAAiBlwT,EAAUkwT,EAAc,UAGzCpgW,IAAlBqrI,EAAMosI,cAAqCz3Q,IAAZy3Q,IACjCpsI,EAAMosI,QAAUA,QAGCz3Q,IAAfqrI,EAAMw9B,WAA+B7oK,IAAT6oK,IAC9Bx9B,EAAMw9B,KAAOA,GAGXx9B,EAAM91F,UACR81F,EAAM91F,QAAU,YAAS81F,EAAM91F,QAASyl2B,IAG1C,IAAM/8iB,EAAY5yN,EAAM4yN,WAAa5yN,EAAM4yN,UAAU5uV,QAAUg8H,EAAM4yN,UAAU5uV,OAAO,GAClF4uV,GAAaA,EAAUr+V,QACzBq+V,EAAUr+V,MAAQ,YAASq+V,EAAUr+V,MAAOo74B,IAG9C,IAAMv1yB,EAAU4lC,EAAM5lC,QAClBA,GAAWA,EAAQC,MACrBD,EAAQC,IAAM,YAASD,EAAQC,IAAKs1yB,IAnGtCC,CAAmBF,EAAU7q2B,GA8M/B,SAAmCm7F,EAAc6vwB,GAC3CA,EAAiBn14B,OAAS,IAC5BslI,EAAM8vwB,IAAM9vwB,EAAM8vwB,KAAO,GACzB9vwB,EAAM8vwB,IAAI1zS,aAAV,sBAA8Bp8d,EAAM8vwB,IAAI1zS,cAAgB,IAAxD,YAAgEyzS,KAhNlEE,CAA0BL,EAAUtzS,QAGjBznmB,IAAfqrI,EAAMjnI,MAwGL,SAAuBinI,EAAcgwwB,GAC1C,IAMIC,EANEC,EAAa,IAAWC,gBAE9B,IAAKD,EACH,OAIF,IAAME,EAA+BC,EAAwBzz4B,IAAIoz4B,GAC7DI,EACFH,EAA0BG,GAE1BH,EAA0B,IAAIxk4B,IAC9B4k4B,EAAwB9v4B,IAAIyv4B,EAAaC,IAI3C,IAAMK,EAAqBr54B,OAAO0D,KAAKu14B,GAAY1r4B,QAA+B,SAACutI,EAAKw+vB,GACtF,IAAIC,EACEC,EAAoBR,EAAwBrz4B,IAAI2z4B,GAClDE,EACFD,EAAcC,GAEdD,EAAcR,EAAYO,GAC1BN,EAAwB1v4B,IAAIgw4B,EAAmBC,IAGjD,IAAK,IAAI304B,EAAI204B,EAAY914B,OAAS,EAAGmB,GAAK,EAAGA,IAAK,CAChD,IAAM604B,EAAaF,EAAY304B,GAC/B,GAAI604B,EAAWnjlB,SAAU,CACvBx7K,EAAI2+vB,EAAWnjlB,UAAY2ilB,EAAWK,GACtC,OAGJ,OAAOx+vB,IACN,IAEH,IAEE/R,EAAO4yN,UAAW5uV,OAAQuB,SAAQ,SAAAqtV,GAEhCA,EAAU+9iB,WAAYxivB,OAAQ5oJ,SAAQ,SAAAiwR,GAChCA,EAAM+3B,WACR/3B,EAAMo7mB,SAAWN,EAAmB96mB,EAAM+3B,iBAIhD,MAAOtsT,KAtJP4v4B,CAAcnB,EAAU7q2B,EAAQmr2B,aAKlC,IAAMc,EAiRR,SAAuBj/iB,EAA0B04Z,GAC/C,IAAKA,EACH,OAAO14Z,EAGT,IAAMi/iB,EAAaj/iB,EAAQA,EAAMx+S,QAAU,IAAI,IAE/C,OADAy91B,EAAW3n4B,OAAOohvB,GACXumJ,EAxRYC,CAAcl/iB,EAAOrU,EAAK+sa,gBAEzC/sa,EAAKwzjB,WACP,YAAsBtB,EAAUlyjB,EAAKwzjB,WAGvC,IAAMC,EAAwBhrsB,GAAUA,EAAOirsB,mBAAqBjrsB,EAAOirsB,qBAAuB,GAK5Fr91B,EAAO,cAAiB62sB,eAE9B,GAAI54Z,EAAgB,CAClB,IAAMq/iB,EAAgBr/iB,EAAe44Z,eACrC,YAAe72sB,EAAMs91B,GAGvB,GAAIL,EAAY,CACd,IAAMM,EAAiBN,EAAWpmJ,eAClC,YAAe72sB,EAAMu91B,GAGvB,IAAM5sc,EAAY,sBAAOhnH,EAAKgnH,aAAe,IAA3B,YAAmC3wZ,EAAK2wZ,cACtDA,EAAY9pc,SACd8iV,EAAKgnH,YAAcA,GAGrB,YAAsBkrc,EAAU771B,GAGhC,IAAMm3sB,EAAkB,GAAlB,mBACDimJ,GADC,YAGD,eAHC,YAKDp91B,EAAKm3sB,kBAKV,OAFe,YAAsBA,EAAiB0kJ,EAAUlyjB,GAElDpuQ,MAAK,SAAA66C,GASjB,OARIA,GA+GD,SAAwB+V,GAE7B,IAAMswwB,EAA6C,GACnD,IAEEtwwB,EAAM4yN,UAAW5uV,OAAQuB,SAAQ,SAAAqtV,GAE/BA,EAAU+9iB,WAAYxivB,OAAQ5oJ,SAAQ,SAAAiwR,GAChCA,EAAMo7mB,WACJp7mB,EAAM67mB,SACRf,EAAmB96mB,EAAM67mB,UAAY77mB,EAAMo7mB,SAClCp7mB,EAAM+3B,WACf+ilB,EAAmB96mB,EAAM+3B,UAAY/3B,EAAMo7mB,iBAEtCp7mB,EAAMo7mB,gBAInB,MAAO3v4B,IAIT,GAA+C,IAA3ChK,OAAO0D,KAAK214B,GAAoB514B,OAClC,OAIFslI,EAAMsxwB,WAAatxwB,EAAMsxwB,YAAc,GACvCtxwB,EAAMsxwB,WAAW3glB,OAAS3wL,EAAMsxwB,WAAW3glB,QAAU,GACrD,IAAMA,EAAS3wL,EAAMsxwB,WAAW3glB,OAChC15T,OAAO0D,KAAK214B,GAAoB/q4B,SAAQ,SAAAgoT,GACtCoD,EAAO1rT,KAAK,CACVlM,KAAM,YACNw44B,UAAWhklB,EACXqjlB,SAAUN,EAAmB/ilB,QA5I7BiklB,CAAevnxB,GAGa,kBAAnBulxB,GAA+BA,EAAiB,EAmK/D,SAAwBxvwB,EAAqBr7H,EAAe8s4B,GAC1D,IAAKzxwB,EACH,OAAO,KAGT,IAAMo0mB,EAAU,+DACXp0mB,GACCA,EAAMi4d,aAAe,CACvBA,YAAaj4d,EAAMi4d,YAAYp2lB,KAAI,SAAApD,GAAE,kCAChCA,GACCA,EAAEo1C,MAAQ,CACZA,KAAM,YAAUp1C,EAAEo1C,KAAMlvC,EAAO8s4B,UAIjCzxwB,EAAMh9B,MAAQ,CAChBA,KAAM,YAAUg9B,EAAMh9B,KAAMr+F,EAAO8s4B,KAEjCzxwB,EAAM2qnB,UAAY,CACpBA,SAAU,YAAU3qnB,EAAM2qnB,SAAUhmvB,EAAO8s4B,KAEzCzxwB,EAAMi0N,OAAS,CACjBA,MAAO,YAAUj0N,EAAMi0N,MAAOtvV,EAAO8s4B,KAWrCzxwB,EAAM2qnB,UAAY3qnB,EAAM2qnB,SAASu/C,OAAS91D,EAAWuW,WACvDvW,EAAWuW,SAASu/C,MAAQlqqB,EAAM2qnB,SAASu/C,MAGvClqqB,EAAM2qnB,SAASu/C,MAAMr2vB,OACvBugsB,EAAWuW,SAASu/C,MAAMr2vB,KAAO,YAAUmsF,EAAM2qnB,SAASu/C,MAAMr2vB,KAAMlvC,EAAO8s4B,KAK7EzxwB,EAAM0xwB,QACRt9J,EAAWs9J,MAAQ1xwB,EAAM0xwB,MAAM7v4B,KAAI,SAAA6uW,GACjC,IAAM78T,EAAO,YAAW68T,GAAM78T,KAQ9B,OANIA,IAGF68T,EAAK78T,KAAO,YAAUA,EAAMlvC,EAAO8s4B,IAG9B/giB,MAIX,OAAO0jY,EA3NIu9J,CAAe1nxB,EAAKulxB,EAAgBC,GAEtCxlxB,KAwCX,IAAMomxB,EAA0B,IAAInv4B,QAkM7B,SAAS0w4B,EACdp0jB,GAEA,GAAKA,EAKL,OAaF,SACEA,GAEA,OAAOA,aAAgB,KAAyB,oBAATA,EAhBnCq0jB,CAAsBr0jB,IA+B5B,SAA4BA,GAC1B,OAAOvmV,OAAO0D,KAAK6iV,GAAMl3U,MAAK,SAAAnJ,GAAA,OAAO204B,EAAmB1v4B,SAASjF,MA5B7D404B,CAAmBv0jB,GAHd,CAAE+sa,eAAgB/sa,GASpBA,EAUT,IAAMs0jB,EAAsD,CAC1D,OACA,QACA,QACA,WACA,OACA,cACA,iBACA,uB,gBCzYF,IAAI322B,EAAOlnC,EAAQ,MAA4BwwH,QAE/C1wH,EAAOC,QAAUmnC,EACjBpnC,EAAOC,QAAQywH,QAAUtpF,G,gBCHzB,IAAIA,EAAOlnC,EAAQ,MAA4BwwH,QAE/C1wH,EAAOC,QAAUmnC,EACjBpnC,EAAOC,QAAQywH,QAAUtpF,G,kFCYZ6lE,EAA4B,SAACF,EAAD,GAIlC,IAAD,MAJmD3B,EAInD,EAJmDA,QAASC,EAI5D,EAJ4DA,SAAUc,EAItE,EAJsEA,OAKpEi7M,EAAMr6M,EACNkxyB,EAAa7yyB,EAAQltD,cAC3B,eAAIkpQ,EAAI+/S,oBAAR,iBAAI,EAAmB82S,UAAvB,aAAI,EAAiC5yyB,IAArC,CAGA,IAAM6yyB,EAAoBD,EAAWz8sB,WAAW,KAChD4lH,EAAI+/S,aAAJ,2BACK//S,EAAI+/S,cADT,kBAEG82S,EAFH,qCAGO72lB,EAAI+/S,oBAHX,aAGO,EAAmB82S,IAH1B,kBAIK5yyB,EAAW,CACVc,SACA7F,IAAK43yB,EAAiB,UAAMD,GAAN,OAAmB5yyB,GAAaA,EACtDe,IAAK8xyB,EAhCkB,sBAgCD,mBAAiC9yyB,EAAQ+jC,uB,6BClCvE,WACIwnM,EADJ,OACmBptS,EAAMC,cAAc,MAMxBmtS,O,6BCPf,IAAIwnkB,EAA8B,oBAAX354B,QAAyBA,OAAOo2P,IACxCujpB,MAAY354B,OAAOo2P,IAAI,cAAgB,oB,6BCUvC90H,IATF,CACXs4wB,cAAe,IACflxwB,UAAW,KACX8xO,OAAQ,KACRxE,OAAQ,KACRwrR,MAAO,KACPq4Q,SAAU,KACVjqoB,QAAS,O,6BCPI,SAASyuM,IACtB,IAAIwwW,EAAYvoxB,SAASC,cAAc,OACvCsoxB,EAAUjzsB,MAAMhgC,MAAQ,OACxBizuB,EAAUjzsB,MAAMiW,OAAS,OACzBg9rB,EAAUjzsB,MAAM2B,SAAW,WAC3BsxsB,EAAUjzsB,MAAMgZ,IAAM,UACtBi6rB,EAAUjzsB,MAAM+O,SAAW,SAC3BrkF,SAASywC,KAAKymO,YAAYqxgB,GAC1B,IAAIzyW,EAAgByyW,EAAU1ke,YAAc0ke,EAAUnvrB,YAEtD,OADAp5F,SAASywC,KAAK0mO,YAAYoxgB,GACnBzyW,EAZT,mC,6BCAA,WAKI09b,EALJ,OAKwB/02B,EAAMC,gBAMf802B,O,gBCXf,IAAiDx+oB,EAS9B,qBAAT5rF,MAAuBA,KATgB4rF,EASH,WAC9C,OAAiB,SAASrsG,GAEhB,IAAI8qvB,EAAmB,GAGvB,SAASC,EAAoBxse,GAG5B,GAAGuse,EAAiBvse,GACnB,OAAOuse,EAAiBvse,GAAU/xa,QAGnC,IAAID,EAASu+4B,EAAiBvse,GAAY,CACzClqa,EAAGkqa,EACH7kZ,GAAG,EACHltB,QAAS,IAUV,OANAwzJ,EAAQu+Q,GAAUlsa,KAAK9F,EAAOC,QAASD,EAAQA,EAAOC,QAASu+4B,GAG/Dx+4B,EAAOmtB,GAAI,EAGJntB,EAAOC,QAqCf,OAhCAu+4B,EAAoBtn4B,EAAIu8I,EAGxB+qvB,EAAoB7z4B,EAAI4z4B,EAGxBC,EAAoB5z4B,EAAI,SAAS3K,EAASqT,EAAM0lP,GAC3CwlpB,EAAoBvz4B,EAAEhL,EAASqT,IAClCpQ,OAAOyJ,eAAe1M,EAASqT,EAAM,CACpCzG,cAAc,EACdD,YAAY,EACZ/D,IAAKmwP,KAMRwlpB,EAAoBtz4B,EAAI,SAASlL,GAChC,IAAIg5P,EAASh5P,GAAUA,EAAOwhN,WAC7B,WAAwB,OAAOxhN,EAAM,SACrC,WAA8B,OAAOA,GAEtC,OADAw+4B,EAAoB5z4B,EAAEouP,EAAQ,IAAKA,GAC5BA,GAIRwlpB,EAAoBvz4B,EAAI,SAAShC,EAAQ89K,GAAY,OAAO7jL,OAAOD,UAAUoD,eAAeP,KAAKmD,EAAQ89K,IAGzGy3tB,EAAoBjk0B,EAAI,GAGjBik0B,EAAoBA,EAAoBls4B,EAAI,IA9D7D,CAiEU,CAEH,SAAStS,EAAQC,GAExBA,EAAQw+4B,IAAM,IAAI/x4B,MAAM,UACxBzM,EAAQy+4B,KAAO,IAAIhy4B,MAAM,WACzBzM,EAAQO,MAAQ,IAAIkM,MAAM,WAC1BzM,EAAQM,IAAM,IAAImM,MAAM,SACxBzM,EAAQqT,KAAO,IAAI5G,MAAM,UACzBzM,EAAQ+9G,IAAM,IAAItxG,MAAM,SACxBzM,EAAQ61kB,GAAK,IAAIppkB,MAAM,QACvBzM,EAAQgT,MAAQ,IAAIvG,MAAM,WAC1BzM,EAAQ6/C,KAAO,IAAIpzC,MAAM,kBAKlB,SAAS1M,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAEhCv+4B,EAAQ0+4B,eAAiB,SAASh24B,GAChC,OAAKA,GAAUA,EAAM8H,OAId9H,EAAM8H,QAAO,SAAShG,EAAGC,GAC9B,IAAIk04B,EAAWr44B,MAAMC,QAAQiE,GACzBo04B,EAAWt44B,MAAMC,QAAQkE,GAE7B,OAAIk04B,GAAYC,EACPp04B,EAAE2F,OAAO1F,GAEdk04B,GACFn04B,EAAEyG,KAAKxG,GAEAD,GAELo04B,EACK,CAACp04B,GAAG2F,OAAO1F,GAGb,CAACD,EAAGC,MAnBJ/B,GAuBX1I,EAAQ4/K,OAAS,SAASl3K,GACxB,IAAKA,EACH,OAAO,EAGT,IAAK,IAAIb,EAAI,EAAGA,EAAIa,EAAMhC,SAAUmB,EAClC,GAAIvB,MAAMC,QAAQmC,EAAMb,IACtB,OAAO,EAIX,OAAO,GAGT7H,EAAQuQ,QAAU,WAGhB,IAFA,IAAIkI,EAASzY,EAAQ6+4B,YAAY/x4B,MAAM,KAAMvE,YAErCvI,EAAQ4/K,OAAOnnK,IACrBA,EAASzY,EAAQ0+4B,eAAejm4B,GAGlC,OAAOA,GAGTzY,EAAQ6+4B,YAAc,SAAShv3B,GAC7B,IAAIpX,EAAS,GAMb,OAJAzY,EAAQu1K,UAAU1lJ,GAAM,SAAStvB,GAC/BkY,EAAOxH,KAAK1Q,MAGPkY,GAGTzY,EAAQyuJ,QAAU,WAChB,IAAIqwvB,EAAkBj64B,KAAK0L,QAAQzD,MAAM,KAAMvE,WAC/C,OAAOu24B,EAAgB1u4B,QAAO,SAASyuR,GACrC,MAAqB,kBAAPA,MAIlB7+R,EAAQ++4B,WAAa,SAAS1/tB,GAC5B,IAAI2/tB,EAAQ,KACZ,OAAOp94B,KAAKo/E,MAAMq+F,EAAS2/tB,GAASA,GAGtCh/4B,EAAQi/4B,UAAY,SAASn5vB,GAC3B,GAAoB,mBAATA,EACT,OAAOA,EAGT,GAAIA,aAAgBr5I,MAClB,OAAOq5I,EAGT,GAAoB,kBAATA,EACT,OAAgB,IAATA,EAGT,GAAoB,kBAATA,EAAmB,CAC5B,IAAI1kE,EAAK0kE,EAAK5W,cACd,GAAW,SAAP9tD,EACF,OAAO,EAGT,GAAW,UAAPA,EACF,OAAO,EAIX,OAAI0kE,aAAgBlzH,OAASquB,MAAM6kG,IAI5B9yI,EAAMzS,OAGfP,EAAQk/4B,YAAc,SAAS9z4B,GAC7B,YAAezK,IAAXyK,GAAmC,KAAXA,GAGvB61C,MAAM71C,GAFF4H,EAAMzS,MAGNi9E,WAAWpyE,IAMtBpL,EAAQm/4B,iBAAmB,SAASzs4B,GAClC,IAAIE,EAMAi5W,EAJJ,IAAKn5W,GAA8B,KAAtBE,EAAMF,EAAIhM,QACrB,OAAOsM,EAAMzS,MAKf,KAAOqS,KAAO,CAEZ,IADAi5W,EAAS7rX,EAAQk/4B,YAAYxs4B,EAAIE,OAClBI,EAAMzS,MACnB,OAAOsrX,EAETn5W,EAAIE,GAAOi5W,EAGb,OAAOn5W,GAGT1S,EAAQo/4B,YAAc,SAAS1mW,GAC7B,IAKI2mW,EAHJ,IAAK3mW,GAAkC,IAAnBA,EAAOhyiB,OACzB,OAAOsM,EAAMzS,MAIf,IAAK,IAAIsH,EAAI,EAAGA,EAAI6wiB,EAAOhyiB,OAAQmB,IAIjC,GAHAw34B,EAAQr/4B,EAAQm/4B,iBAAiBzmW,EAAO7wiB,IACxC6wiB,EAAO7wiB,GAAKw34B,EAERA,aAAiB5y4B,MACnB,OAAO4y4B,EAIX,OAAO3mW,GAGT,IAAI4mW,EAAQ,IAAI1s3B,KAAKA,KAAK6uN,IAAI,KAAM,EAAG,IACvCzhP,EAAQs/G,UAAY,SAASsR,GAC3B,IAAK3vE,MAAM2vE,GAAO,CAChB,GAAIA,aAAgBh+F,KAClB,OAAO,IAAIA,KAAKg+F,GAElB,IAAIjmH,EAAI81C,SAASmwE,EAAM,IACvB,OAAIjmH,EAAI,EACCqI,EAAM+qG,IAEXpzG,GAAK,GACA,IAAIioB,KAAK0s3B,EAAMzs3B,UAAsB,OAATloB,EAAI,IAElC,IAAIioB,KAAK0s3B,EAAMzs3B,UAAsB,OAATloB,EAAI,IAEzC,MAAoB,kBAATimH,IACTA,EAAO,IAAIh+F,KAAKg+F,GACX3vE,MAAM2vE,IAIN59G,EAAMzS,MAHFqwH,GAMb5wH,EAAQu/4B,eAAiB,SAAS7s4B,GAGhC,IAFA,IACIm5W,EADAj5W,EAAMF,EAAIhM,OAEPkM,KAAO,CAEZ,IADAi5W,EAAShnX,KAAKy6G,UAAU5sG,EAAIE,OACbI,EAAMzS,MACnB,OAAOsrX,EAETn5W,EAAIE,GAAOi5W,EAEb,OAAOn5W,GAGT1S,EAAQw/4B,WAAa,WAEnB,IADA,IAAIv04B,EAAI1C,UAAU7B,OACXuE,KACL,GAAI1C,UAAU0C,aAAcwB,MAC1B,OAAO,EAGX,OAAO,GAGTzM,EAAQy/4B,qBAAuB,SAAS/s4B,GAGtC,IAFA,IACImsR,EADA5zR,EAAIyH,EAAIhM,OAELuE,KAEL,GAAkB,kBADlB4zR,EAAKnsR,EAAIzH,IAIT,IAAW,IAAP4zR,EAIJ,IAAW,IAAPA,GAIJ,GAAkB,kBAAPA,EAAiB,CAC1B,IAAIx/G,EAASx6K,KAAKq64B,YAAYrgnB,GAC1Bx/G,aAAkB5yK,MACpBiG,EAAIzH,GAAK,EAETyH,EAAIzH,GAAKo0K,QARX3sK,EAAIzH,GAAK,OAJTyH,EAAIzH,GAAK,EAgBb,OAAOyH,GAGT1S,EAAQmpB,KAAO,SAASzgB,EAAOsQ,GAE7B,OADAA,EAAMA,GAAO,EACRtQ,GAAgC,oBAAhBA,EAAMiM,MAGpBjM,EAAMiM,MAAMqE,GAFVtQ,GAKX1I,EAAQu8L,QAAU,SAAS7zL,EAAOsQ,GAEhC,OADAA,EAAMA,GAAO,EACRtQ,GAAgC,oBAAhBA,EAAMiM,MAGpBjM,EAAMiM,MAAM,EAAGjM,EAAMhC,OAASsS,GAF5BtQ,GAKX1I,EAAQu1K,UAAY,SAAS7sK,EAAO4sK,GAGlC,IAFA,IAAIt0K,GAAS,EAAG0F,EAASgC,EAAMhC,SAEtB1F,EAAQ0F,IAC8B,IAAzC4uK,EAAS5sK,EAAM1H,GAAQA,EAAO0H,KAKpC,OAAOA,GAGT1I,EAAQ0sf,UAAY,SAASgsD,GAC3B,OAAIA,EAIGA,EAAO,GAAG7qiB,KAAI,SAASizJ,EAAKj5J,GACjC,OAAO6wiB,EAAO7qiB,KAAI,SAASgzJ,GACzB,OAAOA,EAAIh5J,SALNmL,EAAMzS,QAaV,SAASR,EAAQC,EAASu+4B,GAEjC,aAKA,IAAI/yF,EAFJxrzB,EAAQuhN,YAAa,EAIrBvhN,EAAO,QAmBP,SAAe+E,GACb,IAAI0T,OAAS,EAQb,OANA1T,GAAQA,EAAO,IAAI04E,QAAQ,UAAW,IAElCm0E,EAAO7sJ,KACT0T,EAASm5I,EAAO7sJ,IAGX0T,GAAkB,MA3B3BzY,EAAQ0/4B,cAoCR,SAAuB364B,GACrB,IAAIygY,GAAQ,EAEZ,IAAK,IAAI39X,KAAK+pJ,EACZ,GAAI3uJ,OAAOD,UAAUoD,eAAeP,KAAK+rJ,EAAQ/pJ,IAAM+pJ,EAAO/pJ,KAAO9C,EAAM,CACzEygY,GAAQ,EACR,MAIJ,OAAOA,GA7CT,IAAIh9C,EAAQxoV,EAAQwoV,MAAQ,QACxBm3jB,EAAiB3/4B,EAAQ2/4B,eAAiB,QAC1CC,EAAa5/4B,EAAQ4/4B,WAAa,OAClCC,EAAsB7/4B,EAAQ6/4B,oBAAsB,MACpDC,EAAa9/4B,EAAQ8/4B,WAAa,OAClCC,EAAY//4B,EAAQ+/4B,UAAY,MAChCC,EAAYhg5B,EAAQgg5B,UAAY,MAChCC,EAAcjg5B,EAAQig5B,YAAc,QAEpCruvB,IAAU45pB,EAAU,IAAYhje,GAAS,UAAWgje,EAAQm0F,GAAkB,UAAWn0F,EAAQo0F,GAAc,SAAUp0F,EAAQq0F,GAAuB,OAAQr0F,EAAQs0F,GAAc,SAAUt0F,EAAQu0F,GAAa,QAASv0F,EAAQw0F,GAAa,QAASx0F,EAAQy0F,GAAe,UAAWz0F,IAyC3R,SAASzrzB,EAAQC,EAASu+4B,GAEjC,aAYA,SAASz5xB,EAASu6D,GAChB,IAAI5mK,OAAS,EAQb,MANsB,kBAAX4mK,EACT5mK,EAAS4mK,EACkB,kBAAXA,IAChB5mK,EAAS4mK,EAAOh6J,QAAQ,MAAQ,EAAIm4D,WAAW6hG,GAAU5+H,SAAS4+H,EAAQ,KAGrE5mK,EAlBTzY,EAAQuhN,YAAa,EACrBvhN,EAAQ8kH,SAAWA,EACnB9kH,EAAQkg5B,aAyBR,SAAsB7guB,GACpB,OAAQ,EAAIv6D,EAASu6D,KAKhB,SAASt/K,EAAQC,EAASu+4B,GAEjC,IAAI1wwB,EAAQ0wwB,EAAoB,GAC5Bvr4B,EAAQur4B,EAAoB,GAC5B4B,EAAc5B,EAAoB,GAClC6B,EAAc7B,EAAoB,GAClC8B,EAAiB9B,EAAoB,GAEzCv+4B,EAAQsg5B,IAAM,SAASjhuB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEIz9K,KAAKijB,IAAIw6J,IAKxBr/K,EAAQug5B,KAAO,SAASlhuB,GAEtB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI5mK,EAAS7W,KAAKkikB,KAAKzkZ,GAMvB,OAJIp+H,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQwg5B,MAAQ,SAASnhuB,GAEvB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI5mK,EAAS7W,KAAKkuG,IAAIuvE,EAASz9K,KAAK8oK,KAAK2U,EAASA,EAAS,IAM3D,OAJIp+H,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQyg5B,KAAO,SAASphuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEIz9K,KAAK8+4B,KAAK,EAAIrhuB,IAK7Br/K,EAAQ2g5B,MAAQ,SAASthuB,GAEvB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI5mK,EAAS,GAAM7W,KAAKkuG,KAAKuvE,EAAS,IAAMA,EAAS,IAMrD,OAJIp+H,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAITzY,EAAQ4g5B,UAAY,SAASC,EAAchw2B,EAASiw2B,EAAMC,GAGxD,GAFAF,EAAehzwB,EAAMqxwB,YAAY2B,GACjChw2B,EAAUg9F,EAAMqxwB,YAAY2B,GACxBhzwB,EAAM2xwB,WAAWqB,EAAchw2B,GACjC,OAAO79B,EAAMzS,MAEf,OAAQsg5B,GACN,KAAK,EACH,OAAOV,EAAYa,QAAQF,GAC7B,KAAK,EACH,OAAOX,EAAYc,MAAMH,GAC3B,KAAK,EACH,OAAOX,EAAYe,OAAOJ,GAC5B,KAAK,EACH,OAAOX,EAAYgB,IAAIL,GACzB,KAAK,EACH,OAAOX,EAAYiB,IAAIN,GACzB,KAAK,EACH,OAAO9g5B,EAAQslI,QAAQw7wB,GACzB,KAAK,EACH,OAAOX,EAAYkB,MAAM7hvB,EAAEshvB,GAC7B,KAAK,EACH,OAAOX,EAAYkB,MAAMvm0B,EAAEgm0B,GAC7B,KAAK,EACH,OAAO9g5B,EAAQsh5B,IAAIR,GACrB,KAAK,GACH,OAAOX,EAAYoB,IAAI/hvB,EAAEshvB,GAC3B,KAAK,GACH,OAAOX,EAAYoB,IAAIzm0B,EAAEgm0B,GAC3B,KAAK,GACH,OAAOX,EAAYqB,OAAOV,GAC5B,KAAK,GACH,OAAOX,EAAYsB,KAAKC,KAAKZ,GAC/B,KAAK,GACH,OAAOX,EAAYwB,MAAMb,EAAMC,GACjC,KAAK,GACH,OAAOZ,EAAYyB,MAAMd,EAAMC,GACjC,KAAK,GACH,OAAOZ,EAAY0B,WAAWC,IAAIhB,EAAMC,GAC1C,KAAK,GACH,OAAOZ,EAAY4B,SAASD,IAAIhB,EAAMC,GACxC,KAAK,GACH,OAAOZ,EAAY0B,WAAWG,IAAIlB,EAAMC,GAC1C,KAAK,GACH,OAAOZ,EAAY4B,SAASC,IAAIlB,EAAMC,KAI5C/g5B,EAAQii5B,OAAS,SAASvxxB,GAExB,IAAK,6DAA6D9wE,KAAK8wE,GACrE,OAAO19G,EAAMzS,MAEf,IAAIy7E,EAAI,EAkBR,OAjBA00C,EAAKjzC,QAAQ,gCAAgC,SAAS51E,GACpDm0E,GAAK,CACHojF,EAAG,IACH8ivB,GAAI,IACJzivB,EAAG,IACH0ivB,GAAI,IACJvjvB,EAAG,IACHwjvB,GAAI,GACJj5uB,EAAG,GACHk5uB,GAAI,GACJrjvB,EAAG,GACHsjvB,GAAI,EACJpjvB,EAAG,EACHqjvB,GAAI,EACJljvB,EAAG,GACHx3J,MAEGm0E,GAGTh8E,EAAQwi5B,KAAO,SAASnjuB,GAEtB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI5mK,EAAS7W,KAAK6g5B,KAAKpjuB,GAMvB,OAJIp+H,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQ0i5B,MAAQ,SAASrjuB,GAEvB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKkuG,IAAIuvE,EAASz9K,KAAK8oK,KAAK2U,EAASA,EAAS,KAGvDr/K,EAAQ2i5B,KAAO,SAAStjuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAK8+4B,KAAKrhuB,IAGnBr/K,EAAQ4i5B,MAAQ,SAASC,EAAUC,GAGjC,OAFAD,EAAWh1wB,EAAMqxwB,YAAY2D,GAC7BC,EAAWj1wB,EAAMqxwB,YAAY4D,GACzBj1wB,EAAM2xwB,WAAWqD,EAAUC,GACtB9v4B,EAAMzS,MAERqB,KAAK89jB,MAAMmjV,EAAUC,IAG9B9i5B,EAAQ+i5B,MAAQ,SAAS1juB,GAEvB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI5mK,EAAS7W,KAAKkuG,KAAK,EAAIuvE,IAAW,EAAIA,IAAW,EAMrD,OAJIp+H,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQgj5B,KAAO,SAAS3juB,EAAQwhB,EAAOoitB,GAMrC,GALAA,EAAaA,GAAc,EAE3B5juB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3BwhB,EAAQhzD,EAAMqxwB,YAAYr+sB,GAC1BoitB,EAAap1wB,EAAMqxwB,YAAY+D,GAC3Bp1wB,EAAM2xwB,WAAWnguB,EAAQwhB,EAAOoitB,GAClC,OAAOjw4B,EAAMzS,MAEf0i5B,OAA6Bti5B,IAAfsi5B,EAA4B,EAAIA,EAC9C,IAAIxq4B,EAAS4mK,EAAOv5K,SAAS+6L,GAC7B,OAAO,IAAIv6L,MAAM1E,KAAKC,IAAIoh5B,EAAa,EAAIxq4B,EAAO/R,OAAQ,IAAI4f,KAAK,KAAO7N,GAG5EzY,EAAQkj5B,QAAU,SAAS7juB,EAAQ8juB,EAActjxB,GAO/C,GANAsjxB,OAAiCxi5B,IAAjBwi5B,EAA8B,EAAIvh5B,KAAKijB,IAAIs+3B,GAC3DtjxB,EAAOA,GAAQ,EAEfw/C,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B8juB,EAAet1wB,EAAMqxwB,YAAYiE,GACjCtjxB,EAAOgO,EAAMqxwB,YAAYr/wB,GACrBgO,EAAM2xwB,WAAWnguB,EAAQ8juB,EAActjxB,GACzC,OAAO7sH,EAAMzS,MAEf,GAAqB,IAAjB4i5B,EACF,OAAO,EAET,IAAIjytB,GAAatvL,KAAKwjB,MAAMxjB,KAAKkuG,IAAIqzyB,GAAgBvh5B,KAAKkuG,IAAI,KAC9D,OAAIuvE,GAAU,EACLr/K,EAAQoj5B,MAAMxh5B,KAAKqjB,KAAKo6J,EAAS8juB,GAAgBA,EAAcjytB,GAEzD,IAATrxD,GACM7/H,EAAQoj5B,MAAMxh5B,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,GAAU8juB,GAAgBA,EAAcjytB,IAE1ElxL,EAAQoj5B,MAAMxh5B,KAAKqjB,KAAKrjB,KAAKijB,IAAIw6J,GAAU8juB,GAAgBA,EAAcjytB,IAKvFlxL,EAAQkj5B,QAAQG,KAAOrj5B,EAAQkj5B,QAE/Blj5B,EAAQkj5B,QAAQI,QAAUtj5B,EAAQkj5B,QAElClj5B,EAAQuj5B,OAAS,SAASlkuB,EAAQmkuB,GAGhC,OAFAnkuB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3BmkuB,EAAgB31wB,EAAMqxwB,YAAYsE,GAC9B31wB,EAAM2xwB,WAAWnguB,EAAQmkuB,GACpBxw4B,EAAMzS,MAERP,EAAQyj5B,KAAKpkuB,IAAWr/K,EAAQyj5B,KAAKD,GAAiBxj5B,EAAQyj5B,KAAKpkuB,EAASmkuB,KAGrFxj5B,EAAQ0j5B,QAAU,SAASrkuB,EAAQmkuB,GAGjC,OAFAnkuB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3BmkuB,EAAgB31wB,EAAMqxwB,YAAYsE,GAC9B31wB,EAAM2xwB,WAAWnguB,EAAQmkuB,GACpBxw4B,EAAMzS,MAEI,IAAX8+K,GAAkC,IAAlBmkuB,EAAuB,EAAIxj5B,EAAQuj5B,OAAOlkuB,EAASmkuB,EAAgB,EAAGnkuB,EAAS,IAGzGr/K,EAAQ2j5B,IAAM,SAAStkuB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKm1f,IAAI13U,IAGlBr/K,EAAQ4j5B,KAAO,SAASvkuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,GAEDz9K,KAAKmkG,IAAIs5E,GAAUz9K,KAAKmkG,KAAKs5E,IAAW,GAGlDr/K,EAAQ6j5B,IAAM,SAASxkuB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,EAAIz9K,KAAKm2f,IAAI14U,IAGtBr/K,EAAQ8j5B,KAAO,SAASzkuB,GAEtB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI0kuB,EAAKni5B,KAAKmkG,IAAI,EAAIs5E,GACtB,OAAQ0kuB,EAAK,IAAMA,EAAK,IAG1B/j5B,EAAQgk5B,IAAM,SAAS3kuB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,EAAIz9K,KAAKq1f,IAAI53U,IAGtBr/K,EAAQik5B,KAAO,SAAS5kuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,GAAKz9K,KAAKmkG,IAAIs5E,GAAUz9K,KAAKmkG,KAAKs5E,KAG3Cr/K,EAAQkk5B,QAAU,SAAS7kuB,EAAQwhB,GACjC,OAAIt4L,UAAU7B,OAAS,EACdsM,EAAMzS,MAGRkgD,SAAS4+H,EAAQwhB,IAG1B7gM,EAAQmk5B,QAAU,SAAS9kuB,GAEzB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEO,IAATA,EAAez9K,KAAKqhf,IAG7Bjjf,EAAQys0B,KAAO,SAASptpB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFr/K,EAAQkj5B,QAAQ7juB,GAAS,GAAI,IAGtCr/K,EAAQok5B,IAAM,SAAS/kuB,GACrB,OAAI92K,UAAU7B,OAAS,EACdsM,EAAM6ikB,GAEO,kBAAXx2Z,GAAuB92K,UAAU7B,OAAS,EAC5CsM,EAAMA,MAGfqsK,EAASz9K,KAAKmkG,IAAIs5E,IAKpB,IAAIgluB,EAAgB,GACpBrk5B,EAAQyj5B,KAAO,SAASpkuB,GAEtB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAIp0K,EAAIrJ,KAAKwjB,MAAMi6J,GACnB,OAAU,IAANp0K,GAAiB,IAANA,EACN,GACEo54B,EAAcp54B,GAAK,IAG5Bo54B,EAAcp54B,GAAKjL,EAAQyj5B,KAAKx44B,EAAI,GAAKA,GAFlCo54B,EAAcp54B,KAOzBjL,EAAQsk5B,WAAa,SAASjluB,GAE5B,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAIp0K,EAAIrJ,KAAKwjB,MAAMi6J,GACnB,OAAIp0K,GAAK,EACA,EAEAA,EAAIjL,EAAQsk5B,WAAWr54B,EAAI,IAItCjL,EAAQuk5B,MAAQ,SAASlluB,EAAQ8juB,GAG/B,GAFA9juB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B8juB,EAAet1wB,EAAMqxwB,YAAYiE,GAC7Bt1wB,EAAM2xwB,WAAWnguB,EAAQ8juB,GAC3B,OAAOnw4B,EAAMzS,MAEf,GAAqB,IAAjB4i5B,EACF,OAAO,EAGT,KAAM9juB,EAAS,GAAK8juB,EAAe,MAAQ9juB,EAAS,GAAK8juB,EAAe,GACtE,OAAOnw4B,EAAM+qG,IAGfolyB,EAAevh5B,KAAKijB,IAAIs+3B,GACxB,IAAIjytB,GAAatvL,KAAKwjB,MAAMxjB,KAAKkuG,IAAIqzyB,GAAgBvh5B,KAAKkuG,IAAI,KAC9D,OAAIuvE,GAAU,EACLr/K,EAAQoj5B,MAAMxh5B,KAAKwjB,MAAMi6J,EAAS8juB,GAAgBA,EAAcjytB,IAE/DlxL,EAAQoj5B,MAAMxh5B,KAAKqjB,KAAKrjB,KAAKijB,IAAIw6J,GAAU8juB,GAAejytB,IAKtElxL,EAAQuk5B,MAAMlB,KAAO,SAAShkuB,EAAQ8juB,EAActjxB,GAOlD,GANAsjxB,OAAiCxi5B,IAAjBwi5B,EAA8B,EAAIA,EAClDtjxB,OAAiBl/H,IAATk/H,EAAsB,EAAIA,EAElCw/C,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B8juB,EAAet1wB,EAAMqxwB,YAAYiE,GACjCtjxB,EAAOgO,EAAMqxwB,YAAYr/wB,GACrBgO,EAAM2xwB,WAAWnguB,EAAQ8juB,EAActjxB,GACzC,OAAO7sH,EAAMzS,MAEf,GAAqB,IAAjB4i5B,EACF,OAAO,EAGTA,EAAeA,EAAevh5B,KAAKijB,IAAIs+3B,GAAgB,EACvD,IAAIjytB,GAAatvL,KAAKwjB,MAAMxjB,KAAKkuG,IAAIqzyB,GAAgBvh5B,KAAKkuG,IAAI,KAC9D,OAAIuvE,GAAU,EACLr/K,EAAQoj5B,MAAMxh5B,KAAKwjB,MAAMi6J,EAAS8juB,GAAgBA,EAAcjytB,GACrD,IAATrxD,QAAuBl/H,IAATk/H,GACf7/H,EAAQoj5B,MAAMxh5B,KAAKqjB,KAAKrjB,KAAKijB,IAAIw6J,GAAU8juB,GAAgBA,EAAcjytB,IAE3ElxL,EAAQoj5B,MAAMxh5B,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,GAAU8juB,GAAgBA,EAAcjytB,IAIpFlxL,EAAQuk5B,MAAMjB,QAAUtj5B,EAAQuk5B,MAAMlB,KAGtCrj5B,EAAQwk5B,IAAM,WACZ,IAAIlqtB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAKT,IAHA,IAAIrvL,EAAIqvL,EAAM5zL,OACVogK,EAAKwzB,EAAM,GACX59K,EAAIoqJ,EAAK,GAAKA,EAAKA,EACdj/J,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CAG1B,IAFA,IAAIy4J,EAAKg6B,EAAMzyL,GACXwoC,EAAIiwH,EAAK,GAAKA,EAAKA,EAChB5jJ,GAAK2zB,GACN3zB,EAAI2zB,EACN3zB,GAAK2zB,EAELA,GAAK3zB,EAGTA,GAAK2zB,EAEP,OAAO3zB,GAIT1c,EAAQyk5B,IAAM,SAASpluB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKwjB,MAAMi6J,IAIpBr/K,EAAQ0k5B,IAAM,CACZxB,QAASlj5B,EAAQkj5B,SAGnBlj5B,EAAQ2k5B,IAAM,WAEZ,IAAI354B,EAAI6iI,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YAC7C,GAAIyC,aAAayB,MACf,OAAOzB,EAET,IAAK,IAAInD,EAAGw0E,EAAGpxE,EAAGN,EAAGqxE,EAAI,OACFr7E,KAAjBsK,EAAID,EAAEkG,QACV,KAAOjG,EAAI,GAAG,CACZ,GAAIA,EAAI,EAAG,CACT,IAAKpD,EAAI,EAAGw0E,EAAIz6E,KAAKwjB,MAAMxjB,KAAK8oK,KAAKz/J,IAAKpD,GAAKw0E,GAAKpxE,EAAIpD,EAAGA,GAAK,GAGhE8C,EAAK9C,GAAKw0E,EAAKx0E,EAAIoD,OAEnBN,EAAI,EAEN,IAAKM,GAAKN,EAAGqxE,GAAKrxE,EAAG9C,EAAImD,EAAEtE,OAAQmB,EAC7BmD,IAAInD,GAAK8C,IAAO,GAAqB,KAAfK,EAAEnD,IAAM8C,IAAYK,EAAEiJ,OAAOpM,EAAG,KAKhE,OAAOm0E,GAGTh8E,EAAQ4k5B,GAAK,SAASvluB,GAEpB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKkuG,IAAIuvE,IAGlBr/K,EAAQ6k5B,KAAO,WACb,OAAOjj5B,KAAKkuG,IAAI,KAGlB9vG,EAAQ8k5B,IAAM,WACZ,OAAOlj5B,KAAKkuG,IAAI,IAGlB9vG,EAAQ+k5B,OAAS,WACf,OAAOnj5B,KAAKmj5B,QAGd/k5B,EAAQgl5B,MAAQ,WACd,OAAOpj5B,KAAKoj5B,OAGdhl5B,EAAQil5B,IAAM,SAAS5luB,EAAQ6zE,GAG7B,OAFA7zE,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B6zE,EAAOrlH,EAAMqxwB,YAAYhspB,GACrBrlH,EAAM2xwB,WAAWnguB,EAAQ6zE,GACpBlgP,EAAMzS,OAEf2yP,OAAiBvyP,IAATuyP,EAAsB,GAAKA,EAC5BtxP,KAAKkuG,IAAIuvE,GAAUz9K,KAAKkuG,IAAIojJ,KAGrClzP,EAAQkl5B,MAAQ,SAAS7luB,GAEvB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKkuG,IAAIuvE,GAAUz9K,KAAKkuG,IAAI,KAGrC9vG,EAAQml5B,IAAM,SAASxqtB,EAAUC,GAG/B,GAFAD,EAAW9sD,EAAMqxwB,YAAYvktB,GAC7BC,EAAU/sD,EAAMqxwB,YAAYtktB,GACxB/sD,EAAM2xwB,WAAW7ktB,EAAUC,GAC7B,OAAO5nL,EAAMzS,MAEf,GAAgB,IAAZq6L,EACF,OAAO5nL,EAAMyr4B,KAEf,IAAI2G,EAAUxj5B,KAAKijB,IAAI81K,EAAWC,GAClC,OAAQA,EAAU,EAAKwqtB,GAAWA,GAGpCpl5B,EAAQql5B,OAAS,SAAShmuB,EAAQ75D,GAGhC,OAFA65D,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B75D,EAAWqoB,EAAMqxwB,YAAY15xB,GACzBqoB,EAAM2xwB,WAAWnguB,EAAQ75D,GACpBxyG,EAAMzS,MAEX8+K,EAAS75D,EAAW,EACfxyG,EAAM+qG,IAGRn8G,KAAKo/E,MAAMq+F,EAAS75D,GAAYA,GAGzCxlH,EAAQsl5B,YAAc,WACpB,IAAIz13B,EAAOg+G,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YAChD,GAAIsnB,aAAgBpjB,MAClB,OAAOojB,EAIT,IAFA,IAAIpf,EAAM,EACNmqL,EAAU,EACL/yL,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/B4I,GAAOof,EAAKhoB,GACZ+yL,GAAW56L,EAAQyj5B,KAAK5z3B,EAAKhoB,IAE/B,OAAO7H,EAAQyj5B,KAAKhz4B,GAAOmqL,GAG7B56L,EAAQws0B,IAAM,SAASntpB,GAErB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAIvuB,EAAOlvJ,KAAKqjB,KAAKrjB,KAAKijB,IAAIw6J,IAE9B,OADAvuB,EAAe,EAAPA,EAAYA,EAAOA,EAAO,EAC1BuuB,EAAS,EAAKvuB,GAAQA,GAGhC9wJ,EAAQijf,GAAK,WACX,OAAOrhf,KAAKqhf,IAGdjjf,EAAQqtP,EAAI,WACV,OAAOzrP,KAAKyrP,GAGdrtP,EAAQul5B,MAAQ,SAASlmuB,EAAQ2/tB,GAG/B,GAFA3/tB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B2/tB,EAAQnxwB,EAAMqxwB,YAAYF,GACtBnxwB,EAAM2xwB,WAAWnguB,EAAQ2/tB,GAC3B,OAAOhs4B,EAAMzS,MAEf,IAAIkY,EAAS7W,KAAKy1O,IAAIh4D,EAAQ2/tB,GAC9B,OAAI/91B,MAAMxoC,GACDzF,EAAM+qG,IAGRtlG,GAGTzY,EAAQslI,QAAU,WAChB,IAAIz1G,EAAOg+G,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YAChD,GAAIsnB,aAAgBpjB,MAClB,OAAOojB,EAGT,IADA,IAAIpX,EAAS,EACJ5Q,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/B4Q,GAAUoX,EAAKhoB,GAEjB,OAAO4Q,GAGTzY,EAAQwl5B,SAAW,SAASC,EAAWC,GAGrC,OAFAD,EAAY53wB,EAAMqxwB,YAAYuG,GAC9BC,EAAc73wB,EAAMqxwB,YAAYwG,GAC5B73wB,EAAM2xwB,WAAWiG,EAAWC,GACvB1y4B,EAAMzS,MAERkgD,SAASgl2B,EAAYC,EAAa,KAG3C1l5B,EAAQ2l5B,QAAU,SAAStmuB,GAEzB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFA,EAASz9K,KAAKqhf,GAAK,KAG5Bjjf,EAAQ4l5B,KAAO,WACb,OAAOhk5B,KAAKy1E,UAGdr3E,EAAQ6l5B,YAAc,SAASzsxB,EAAQD,GAGrC,OAFAC,EAASyU,EAAMqxwB,YAAY9lxB,GAC3BD,EAAM0U,EAAMqxwB,YAAY/lxB,GACpB0U,EAAM2xwB,WAAWpmxB,EAAQD,GACpBnmH,EAAMzS,MAIR64H,EAASx3H,KAAKqjB,MAAMk0G,EAAMC,EAAS,GAAKx3H,KAAKy1E,UAAY,GAIlEr3E,EAAQ8l5B,MAAQ,SAASzmuB,GAEvB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAQT,IAJA,IAAI06T,EAASrme,OAAO2rK,GAAQz7H,MAAM,IAC9Bz6C,EAAM,CAAC,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,MACrL484B,EAAQ,GACRl+4B,EAAI,EACDA,KACLk+4B,GAAS584B,GAAK4we,EAAO7oe,MAAa,GAAJrJ,IAAY,IAAMk+4B,EAElD,OAAO,IAAIz/4B,OAAOyze,EAAOzzd,KAAK,IAAM,GAAGA,KAAK,KAAOy/3B,GAGrD/l5B,EAAQoj5B,MAAQ,SAAS/juB,EAAQ06T,GAG/B,OAFA16T,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B06T,EAASlsW,EAAMqxwB,YAAYnla,GACvBlsW,EAAM2xwB,WAAWnguB,EAAQ06T,GACpB/me,EAAMzS,MAERqB,KAAKo/E,MAAMq+F,EAASz9K,KAAKy1O,IAAI,GAAI0iQ,IAAWn4e,KAAKy1O,IAAI,GAAI0iQ,IAGlE/5e,EAAQgm5B,UAAY,SAAS3muB,EAAQ06T,GAGnC,OAFA16T,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B06T,EAASlsW,EAAMqxwB,YAAYnla,GACvBlsW,EAAM2xwB,WAAWnguB,EAAQ06T,GACpB/me,EAAMzS,OAEH8+K,EAAS,EAAK,GAAK,GAChBz9K,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,GAAUz9K,KAAKy1O,IAAI,GAAI0iQ,IAAYn4e,KAAKy1O,IAAI,GAAI0iQ,IAGrF/5e,EAAQim5B,QAAU,SAAS5muB,EAAQ06T,GAGjC,OAFA16T,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B06T,EAASlsW,EAAMqxwB,YAAYnla,GACvBlsW,EAAM2xwB,WAAWnguB,EAAQ06T,GACpB/me,EAAMzS,OAEH8+K,EAAS,EAAK,GAAK,GAChBz9K,KAAKqjB,KAAKrjB,KAAKijB,IAAIw6J,GAAUz9K,KAAKy1O,IAAI,GAAI0iQ,IAAYn4e,KAAKy1O,IAAI,GAAI0iQ,IAGpF/5e,EAAQkm5B,IAAM,SAAS7muB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,EAAIz9K,KAAKm1f,IAAI13U,IAGtBr/K,EAAQmm5B,KAAO,SAAS9muB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,GAAKz9K,KAAKmkG,IAAIs5E,GAAUz9K,KAAKmkG,KAAKs5E,KAG3Cr/K,EAAQom5B,UAAY,SAAS1p4B,EAAGzR,EAAGgM,EAAGov4B,GAKpC,GAJA3p4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GACtBgM,EAAI42H,EAAMqxwB,YAAYjo4B,GACtBov4B,EAAex4wB,EAAMsxwB,iBAAiBkH,GAClCx4wB,EAAM2xwB,WAAW9i4B,EAAGzR,EAAGgM,EAAGov4B,GAC5B,OAAOrz4B,EAAMzS,MAGf,IADA,IAAIkY,EAAS4t4B,EAAa,GAAKzk5B,KAAKy1O,IAAI36N,EAAGzR,GAClCpD,EAAI,EAAGA,EAAIw+4B,EAAa3/4B,OAAQmB,IACvC4Q,GAAU4t4B,EAAax+4B,GAAKjG,KAAKy1O,IAAI36N,EAAGzR,EAAIpD,EAAIoP,GAElD,OAAOwB,GAGTzY,EAAQsm5B,KAAO,SAASjnuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAELA,EAAS,GACH,EACY,IAAXA,EACF,EAEA,GAIXr/K,EAAQum5B,IAAM,SAASlnuB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKq1f,IAAI53U,IAGlBr/K,EAAQwm5B,KAAO,SAASnnuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,GAEDz9K,KAAKmkG,IAAIs5E,GAAUz9K,KAAKmkG,KAAKs5E,IAAW,GAGlDr/K,EAAQym5B,KAAO,SAASpnuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAELA,EAAS,EACJrsK,EAAM+qG,IAERn8G,KAAK8oK,KAAK2U,IAGnBr/K,EAAQ0m5B,OAAS,SAASrnuB,GAExB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAK8oK,KAAK2U,EAASz9K,KAAKqhf,KAGjCjjf,EAAQ2m5B,QAAU,WAChB,OAAO,EAAI/k5B,KAAK8oK,KAAK,IAGvB1qK,EAAQ4m5B,MAAQ,WACd,OAAOhl5B,KAAK8oK,KAAK,IAGnB1qK,EAAQ6m5B,SAAW,SAASC,EAAehG,GAEzC,IADAgG,EAAgBj5wB,EAAMqxwB,YAAY4H,cACLr64B,MAC3B,OAAOq64B,EAET,OAAQA,GACN,KAAK,EAuBL,KAAK,IACH,OAAO3G,EAAYa,QAAQF,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYc,MAAMH,GAtB3B,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYe,OAAOJ,GAtB5B,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYgB,IAAIL,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYiB,IAAIN,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAO9g5B,EAAQslI,QAAQw7wB,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYkB,MAAM7hvB,EAAEshvB,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAOX,EAAYkB,MAAMvm0B,EAAEgm0B,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAO9g5B,EAAQsh5B,IAAIR,GAtBrB,KAAK,GAuBL,KAAK,IACH,OAAOX,EAAYoB,IAAI/hvB,EAAEshvB,GAtB3B,KAAK,GAuBL,KAAK,IACH,OAAOX,EAAYoB,IAAIzm0B,EAAEgm0B,KAK/B9g5B,EAAQywM,IAAM,SAAUs2sB,EAAMC,GAC5B,OAAyB,IAArBz+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfkxU,EAAOl5wB,EAAMqxwB,YAAY6H,GACzBC,EAAOn5wB,EAAMqxwB,YAAY8H,GACrBn5wB,EAAM2xwB,WAAWuH,EAAMC,GAClBh04B,EAAMzS,MAGRwm5B,EAAOC,IAGhBhn5B,EAAQin5B,MAAQ,SAAUF,EAAMC,GAC9B,OAAyB,IAArBz+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfkxU,EAAOl5wB,EAAMqxwB,YAAY6H,GACzBC,EAAOn5wB,EAAMqxwB,YAAY8H,GACrBn5wB,EAAM2xwB,WAAWuH,EAAMC,GAClBh04B,EAAMzS,MAGRwm5B,EAAOC,IAGhBhn5B,EAAQkn5B,OAAS,SAAUvstB,EAAUC,GACnC,OAAyB,IAArBryL,UAAU7B,OACLsM,EAAM6ikB,IAGfl7Y,EAAW9sD,EAAMqxwB,YAAYvktB,GAC7BC,EAAU/sD,EAAMqxwB,YAAYtktB,GACxB/sD,EAAM2xwB,WAAW7ktB,EAAUC,GACtB5nL,EAAMzS,MAGC,IAAZq6L,EACK5nL,EAAMyr4B,KAGR9jtB,EAAWC,IAGpB56L,EAAQmn5B,SAAW,SAAUC,EAASC,GACpC,OAAyB,IAArB9+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfuxU,EAAUv5wB,EAAMqxwB,YAAYkI,GAC5BC,EAAUx5wB,EAAMqxwB,YAAYmI,GACxBx5wB,EAAM2xwB,WAAW4H,EAASC,GACrBr04B,EAAMzS,MAGR6m5B,EAAUC,IAGnBrn5B,EAAQsn5B,IAAM,SAAUP,EAAMC,GAC5B,OAAyB,IAArBz+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfkxU,EAAOl5wB,EAAMqxwB,YAAY6H,GACzBC,EAAOn5wB,EAAMqxwB,YAAY8H,GACrBn5wB,EAAM2xwB,WAAWuH,EAAMC,GAClBh04B,EAAMA,MAGR+z4B,GAAQC,IAGjBhn5B,EAAQu4O,GAAK,SAAUwuqB,EAAMC,GAC3B,OAAyB,IAArBz+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfkxU,EAAOl5wB,EAAMqxwB,YAAY6H,GACzBC,EAAOn5wB,EAAMqxwB,YAAY8H,GACrBn5wB,EAAM2xwB,WAAWuH,EAAMC,GAClBh04B,EAAMA,MAGR+z4B,EAAOC,IAIhBhn5B,EAAQun5B,IAAM,SAAUR,EAAMC,GAC5B,OAAyB,IAArBz+4B,UAAU7B,OACLsM,EAAM6ikB,IAGfkxU,EAAOl5wB,EAAMqxwB,YAAY6H,GACzBC,EAAOn5wB,EAAMqxwB,YAAY8H,GACrBn5wB,EAAM2xwB,WAAWuH,EAAMC,GAClBh04B,EAAMA,MAGR+z4B,GAAQC,IAGjBhn5B,EAAQwn5B,GAAK,SAAUC,EAAQC,GAC7B,OAAyB,IAArBn/4B,UAAU7B,OACLsM,EAAM6ikB,GAGR4xU,IAAWC,GAGpB1n5B,EAAQ2n5B,GAAK,SAAUF,EAAQC,GAC7B,OAAyB,IAArBn/4B,UAAU7B,OACLsM,EAAM6ikB,GAGR4xU,IAAWC,GAGpB1n5B,EAAQ4n5B,IAAM,SAAU10pB,EAAM20pB,GAC5B,OAAyB,IAArBt/4B,UAAU7B,OACLsM,EAAM6ikB,IAGf3iV,EAAOrlH,EAAMqxwB,YAAYhspB,GACzB20pB,EAAWh6wB,EAAMqxwB,YAAY2I,GACzBh6wB,EAAM2xwB,WAAWtspB,EAAM20pB,GAClB704B,EAAMA,MAGRhT,EAAQul5B,MAAMrypB,EAAM20pB,KAG7B7n5B,EAAQsh5B,IAAM,WACZ,IAAI7o4B,EAAS,EAgBb,OAdAo1H,EAAM0nC,UAAU1nC,EAAMgxwB,YAAYt24B,YAAY,SAAShI,GACrD,GAAqB,kBAAVA,EACTkY,GAAUlY,OAEL,GAAqB,kBAAVA,EAAoB,CACpC,IAAIsrX,EAASruS,WAAWj9E,IAEvB0gD,MAAM4qU,KAAYpzW,GAAUozW,QAEpBvlX,MAAMC,QAAQhG,KACvBkY,GAAUzY,EAAQsh5B,IAAIx04B,MAAM,KAAMvM,OAI/BkY,GAGTzY,EAAQ8n5B,MAAQ,SAASxttB,EAAO/R,GAG9B,IAFA+R,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,eAExB7tL,MACnB,OAAO6tL,EAMT,IAJA,IAAI7hL,EAAS,EACTsv4B,OAA0B,IAAbx/tB,GAAoC,MAAbA,EACpCy/tB,EAAoBD,EAAa,KAAO1H,EAAeh/1B,MAAMknI,EAAW,IAEnE1gL,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAAK,CACrC,IAAItH,EAAQ+5L,EAAMzyL,GAElB,GAAIkg5B,EACFtv4B,GAAUlY,MACL,CACL,IAAIk9O,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAE3Fvv4B,GAAW4n4B,EAAe8H,QAAQ1qqB,GAAUl9O,EAAQ,GAIxD,OAAOkY,GAGTzY,EAAQoo5B,OAAS,WACf,IAAIv43B,EAAOg+G,EAAMgxwB,YAAYt24B,WACzB+xL,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQsf,EAAKlX,UAEtD,GAAI2hL,aAAiB7tL,MACnB,OAAO6tL,EAOT,IALA,IAAIwumB,EAAYj5wB,EACZw43B,EAAmB/ttB,EAAM5zL,OACzB4h5B,EAAiBx/G,EAAUpiyB,OAC3B+R,EAAS,EAEJ5Q,EAAI,EAAGA,EAAIwg5B,EAAkBxg5B,IAAK,CAIzC,IAHA,IAAItH,EAAQ+5L,EAAMzyL,GACd0g5B,GAAkB,EAEbls0B,EAAI,EAAGA,EAAIis0B,EAAgBjs0B,IAAK,CACvC,IAAIksG,EAAWugnB,EAAUzstB,GACrB0r0B,OAA0B,IAAbx/tB,GAAoC,MAAbA,EACpCiguB,GAAiB,EAErB,GAAIT,EACFS,GAAiB,MACZ,CACL,IAAIR,EAAoB3H,EAAeh/1B,MAAMknI,EAAW,IACpDk1D,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAE3FQ,EAAiBnI,EAAe8H,QAAQ1qqB,GAI1C,IAAK+qqB,EAAgB,CACnBD,GAAkB,EAClB,MAGFA,GAAkB,EAGhBA,IACF9v4B,GAAUlY,GAId,OAAOkY,GAGTzY,EAAQyo5B,WAAa,WACnB,IAAKlg5B,WAAkC,IAArBA,UAAU7B,OAC1B,OAAOsM,EAAMzS,MAQf,IANA,IAEIs7H,EACA72H,EACAq0E,EACAqv0B,EALAzkuB,EAAS17K,UAAU7B,OAAS,EAC5B+R,EAAS,EAKJ5Q,EAAI,EAAGA,EAAIU,UAAU,GAAG7B,OAAQmB,IACvC,GAAMU,UAAU,GAAGV,aAAcvB,MAW/B,IAAK,IAAI+1E,EAAI,EAAGA,EAAI9zE,UAAU,GAAGV,GAAGnB,OAAQ21E,IAAK,CAE/C,IADAw/C,EAAU,EACL72H,EAAI,EAAGA,EAAIi/K,EAAQj/K,IAAK,CAE3B,IADA0j5B,EAAM76wB,EAAMqxwB,YAAY324B,UAAUvD,EAAI,GAAG6C,GAAGw0E,eACzB5vE,MACjB,OAAOi84B,EAET7sxB,GAAW6sxB,EAEbjw4B,GAAUojH,MApB2B,CAEvC,IADAA,EAAU,EACL72H,EAAI,EAAGA,EAAIi/K,EAAQj/K,IAAK,CAE3B,IADAq0E,EAAKw0D,EAAMqxwB,YAAY324B,UAAUvD,EAAI,GAAG6C,eACtB4E,MAChB,OAAO4sE,EAETwiD,GAAWxiD,EAEb5gE,GAAUojH,EAed,OAAOpjH,GAGTzY,EAAQ2o5B,MAAQ,WACd,IAAIl6vB,EAAU5gB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACnD,GAAIkmJ,aAAmBhiJ,MACrB,OAAOgiJ,EAIT,IAFA,IAAIh2I,EAAS,EACT/R,EAAS+nJ,EAAQ/nJ,OACZmB,EAAI,EAAGA,EAAInB,EAAQmB,IAC1B4Q,GAAW2n4B,EAAYwI,SAASn6vB,EAAQ5mJ,IAAO4mJ,EAAQ5mJ,GAAK4mJ,EAAQ5mJ,GAAK,EAE3E,OAAO4Q,GAGTzY,EAAQ6o5B,SAAW,SAASC,EAASC,GAGnC,GAFAD,EAAUj7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQu44B,IAC/CC,EAAUl7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw44B,IAC3Cl7wB,EAAM2xwB,WAAWsJ,EAASC,GAC5B,OAAO/14B,EAAMzS,MAGf,IADA,IAAIkY,EAAS,EACJ5Q,EAAI,EAAGA,EAAIih5B,EAAQpi5B,OAAQmB,IAClC4Q,GAAUqw4B,EAAQjh5B,GAAKih5B,EAAQjh5B,GAAKkh5B,EAAQlh5B,GAAKkh5B,EAAQlh5B,GAE3D,OAAO4Q,GAGTzY,EAAQgp5B,SAAW,SAASF,EAASC,GAGnC,GAFAD,EAAUj7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQu44B,IAC/CC,EAAUl7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw44B,IAC3Cl7wB,EAAM2xwB,WAAWsJ,EAASC,GAC5B,OAAO/14B,EAAMzS,MAEf,IAAIkY,EAAS,EACbqw4B,EAAUj7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQu44B,IAC/CC,EAAUl7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw44B,IAC/C,IAAK,IAAIlh5B,EAAI,EAAGA,EAAIih5B,EAAQpi5B,OAAQmB,IAClC4Q,GAAUqw4B,EAAQjh5B,GAAKih5B,EAAQjh5B,GAAKkh5B,EAAQlh5B,GAAKkh5B,EAAQlh5B,GAE3D,OAAO4Q,GAGTzY,EAAQip5B,QAAU,SAASH,EAASC,GAGlC,GAFAD,EAAUj7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQu44B,IAC/CC,EAAUl7wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw44B,IAC3Cl7wB,EAAM2xwB,WAAWsJ,EAASC,GAC5B,OAAO/14B,EAAMzS,MAEf,IAAIkY,EAAS,EACbqw4B,EAAUj7wB,EAAMt9H,QAAQu44B,GACxBC,EAAUl7wB,EAAMt9H,QAAQw44B,GACxB,IAAK,IAAIlh5B,EAAI,EAAGA,EAAIih5B,EAAQpi5B,OAAQmB,IAClC4Q,GAAU7W,KAAKy1O,IAAIyxqB,EAAQjh5B,GAAKkh5B,EAAQlh5B,GAAI,GAE9C,OAAO4Q,GAGTzY,EAAQkp5B,IAAM,SAAS7puB,GAErB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFz9K,KAAKm2f,IAAI14U,IAGlBr/K,EAAQmp5B,KAAO,SAAS9puB,GAEtB,IADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAET,IAAI0kuB,EAAKni5B,KAAKmkG,IAAI,EAAIs5E,GACtB,OAAQ0kuB,EAAK,IAAMA,EAAK,IAG1B/j5B,EAAQop5B,MAAQ,SAAS/puB,EAAQ06T,GAI/B,OAHAA,OAAqBp5e,IAAXo5e,EAAwB,EAAIA,EACtC16T,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B06T,EAASlsW,EAAMqxwB,YAAYnla,GACvBlsW,EAAM2xwB,WAAWnguB,EAAQ06T,GACpB/me,EAAMzS,OAEH8+K,EAAS,EAAK,GAAK,GAChBz9K,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,GAAUz9K,KAAKy1O,IAAI,GAAI0iQ,IAAYn4e,KAAKy1O,IAAI,GAAI0iQ,KAM9E,SAASh6e,EAAQC,EAASu+4B,GAEjC,IAAI8K,EAAW9K,EAAoB,GAC/B7txB,EAAO6txB,EAAoB,GAC3B+K,EAAQ/K,EAAoB,IAC5B1wwB,EAAQ0wwB,EAAoB,GAC5B8B,EAAiB9B,EAAoB,GACrCvr4B,EAAQur4B,EAAoB,GAC5Bj6H,EAAOi6H,EAAoB,IAI/Bv+4B,EAAQup5B,OAAS,WACf,IAAIjvtB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,OAAI+xL,aAAiB7tL,MACZ6tL,EAEFgvtB,EAAM744B,IAAI644B,EAAMhvtB,GAAOl2K,SAASkl4B,EAAMnptB,KAAK7F,IAAQz1K,MAAM,IAAMy1K,EAAM5zL,QAG9E1G,EAAQgh5B,QAAU,WAOhB,IANA,IAIIvo4B,EAJA6hL,EAAQzsD,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YACpC0C,EAAIqvL,EAAM5zL,OACV+J,EAAM,EACNwJ,EAAQ,EAGHpS,EAAI,EAAGA,EAAIoD,EAAGpD,IACrB4I,GAAO6pL,EAAMzyL,GACboS,GAAS,EAQX,OANAxB,EAAShI,EAAMwJ,EAEXgnC,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQwp5B,SAAW,WAMjB,IALA,IAII/w4B,EAJA6hL,EAAQzsD,EAAMt9H,QAAQhI,WACtB0C,EAAIqvL,EAAM5zL,OACV+J,EAAM,EACNwJ,EAAQ,EAEHpS,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CAC1B,IAAIg3R,EAAKvkG,EAAMzyL,GACG,kBAAPg3R,IACTpuR,GAAOouR,IAEE,IAAPA,GACFpuR,IAES,OAAPouR,GACF5kR,IASJ,OANAxB,EAAShI,EAAMwJ,EAEXgnC,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQyp5B,UAAY,SAASnvtB,EAAO/R,EAAUmhuB,GAC5C,GAAInh5B,UAAU7B,QAAU,EACtB,OAAOsM,EAAM6ikB,GAMf,GAJA6zU,EAAgBA,GAAiBpvtB,EACjCA,EAAQzsD,EAAMt9H,QAAQ+pL,IACtBovtB,EAAgB77wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQm54B,eAExBj94B,MAC3B,OAAOi94B,EAOT,IALA,IAAIC,EAAgB,EAChBlx4B,EAAS,EACTsv4B,OAA0B,IAAbx/tB,GAAoC,MAAbA,EACpCy/tB,EAAoBD,EAAa,KAAO1H,EAAeh/1B,MAAMknI,EAAW,IAEnE1gL,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAAK,CACrC,IAAItH,EAAQ+5L,EAAMzyL,GAElB,GAAIkg5B,EACFtv4B,GAAUix4B,EAAc7h5B,GACxB8h5B,QACK,CACL,IAAIlsqB,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAEvF3H,EAAe8H,QAAQ1qqB,KACzBhlO,GAAUix4B,EAAc7h5B,GACxB8h5B,MAKN,OAAOlx4B,EAASkx4B,GAGlB3p5B,EAAQ4p5B,WAAa,WASnB,IANA,IAAI/53B,EAAOg+G,EAAMgxwB,YAAYt24B,WACzB+/4B,GAAkBz43B,EAAKnpB,OAAS,GAAK,EACrC4zL,EAAQzsD,EAAMt9H,QAAQsf,EAAK,IAC3B5V,EAAQ,EACRxB,EAAS,EAEJ5Q,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAAK,CAGrC,IAFA,IAAI0g5B,GAAkB,EAEbls0B,EAAI,EAAGA,EAAIis0B,EAAgBjs0B,IAAK,CACvC,IAAI97E,EAAQsvB,EAAK,EAAIwsD,EAAI,GAAGx0E,GACxB0gL,EAAW14J,EAAK,EAAIwsD,EAAI,GACxB0r0B,OAA0B,IAAbx/tB,GAAoC,MAAbA,EACpCiguB,GAAiB,EAErB,GAAIT,EACFS,GAAiB,MACZ,CACL,IAAIR,EAAoB3H,EAAeh/1B,MAAMknI,EAAW,IACpDk1D,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAE3FQ,EAAiBnI,EAAe8H,QAAQ1qqB,GAI1C,IAAK+qqB,EAAgB,CACnBD,GAAkB,EAClB,MAGFA,GAAkB,EAGhBA,IACF9v4B,GAAU6hL,EAAMzyL,GAChBoS,KAIJ,IAAI4v4B,EAAUpx4B,EAASwB,EAEvB,OAAIgnC,MAAM4o2B,GACD,EAEAA,GAIX7p5B,EAAQ8p5B,KAAO,GAEf9p5B,EAAQ8p5B,KAAKC,KAAO,SAASrt4B,EAAG66e,EAAO2uQ,EAAM8jJ,EAAY7qvB,EAAGm+Z,GAC1D,OAAI/0jB,UAAU7B,OAAS,EACdsM,EAAMzS,OAGf4+J,OAAWx+J,IAANw+J,EAAmB,EAAIA,EAC5Bm+Z,OAAW38jB,IAAN28jB,EAAmB,EAAIA,EAE5B5gjB,EAAImxH,EAAMqxwB,YAAYxi4B,GACtB66e,EAAQ1pX,EAAMqxwB,YAAY3nZ,GAC1B2uQ,EAAOr4nB,EAAMqxwB,YAAYh5I,GACzB/mmB,EAAItxB,EAAMqxwB,YAAY//uB,GACtBm+Z,EAAIzvb,EAAMqxwB,YAAY5hV,GAClBzvb,EAAM2xwB,WAAW9i4B,EAAG66e,EAAO2uQ,EAAM/mmB,EAAGm+Z,GAC/BtqjB,EAAMzS,OAGfmc,GAAKA,EAAIyiJ,IAAMm+Z,EAAIn+Z,GACX6qvB,EAAcV,EAAMpjJ,KAAK+jJ,IAAIvt4B,EAAG66e,EAAO2uQ,GAAQojJ,EAAMpjJ,KAAKz9C,IAAI/rsB,EAAG66e,EAAO2uQ,MAGlFlmwB,EAAQ8p5B,KAAKI,IAAM,SAASC,EAAa5yZ,EAAO2uQ,EAAM/mmB,EAAGm+Z,GASvD,OARAn+Z,OAAWx+J,IAANw+J,EAAmB,EAAIA,EAC5Bm+Z,OAAW38jB,IAAN28jB,EAAmB,EAAIA,EAE5B6sV,EAAct8wB,EAAMqxwB,YAAYiL,GAChC5yZ,EAAQ1pX,EAAMqxwB,YAAY3nZ,GAC1B2uQ,EAAOr4nB,EAAMqxwB,YAAYh5I,GACzB/mmB,EAAItxB,EAAMqxwB,YAAY//uB,GACtBm+Z,EAAIzvb,EAAMqxwB,YAAY5hV,GAClBzvb,EAAM2xwB,WAAW2K,EAAa5yZ,EAAO2uQ,EAAM/mmB,EAAGm+Z,GACzCtqjB,EAAMzS,MAGR+o5B,EAAMpjJ,KAAKrtN,IAAIsxW,EAAa5yZ,EAAO2uQ,IAAS5oM,EAAIn+Z,GAAKA,GAG9Dn/J,EAAQoq5B,MAAQ,GAEhBpq5B,EAAQoq5B,MAAML,KAAO,SAASM,EAAWC,EAAQH,EAAaH,GAK5D,OAJAK,EAAYx8wB,EAAMqxwB,YAAYmL,GAC9BC,EAASz8wB,EAAMqxwB,YAAYoL,GAC3BH,EAAct8wB,EAAMqxwB,YAAYiL,GAChCH,EAAan8wB,EAAMqxwB,YAAY8K,GAC3Bn8wB,EAAM2xwB,WAAW6K,EAAWC,EAAQH,EAAaH,GAC5Ch34B,EAAMzS,MAEPyp5B,EAAcV,EAAMiB,SAASN,IAAII,EAAWC,EAAQH,GAAeb,EAAMiB,SAAS9hM,IAAI4hM,EAAWC,EAAQH,IAGnHnq5B,EAAQoq5B,MAAML,KAAKS,MAAQ,SAASF,EAAQH,EAAaE,EAAWI,GAOlE,GANAA,OAA6B9p5B,IAAf8p5B,EAA4BJ,EAAYI,EAEtDH,EAASz8wB,EAAMqxwB,YAAYoL,GAC3BH,EAAct8wB,EAAMqxwB,YAAYiL,GAChCE,EAAYx8wB,EAAMqxwB,YAAYmL,GAC9BI,EAAa58wB,EAAMqxwB,YAAYuL,GAC3B58wB,EAAM2xwB,WAAW8K,EAAQH,EAAaE,EAAWI,GACnD,OAAOz34B,EAAMzS,MAIf,IADA,IAAIkY,EAAS,EACJ5Q,EAAIwi5B,EAAWxi5B,GAAK4i5B,EAAY5i5B,IACvC4Q,GAAU4w4B,EAAS9F,OAAO+G,EAAQzi5B,GAAKjG,KAAKy1O,IAAI8yqB,EAAati5B,GAAKjG,KAAKy1O,IAAI,EAAI8yqB,EAAaG,EAASzi5B,GAEvG,OAAO4Q,GAGTzY,EAAQoq5B,MAAMF,IAAM,SAASI,EAAQH,EAAa5yZ,GAIhD,GAHA+yZ,EAASz8wB,EAAMqxwB,YAAYoL,GAC3BH,EAAct8wB,EAAMqxwB,YAAYiL,GAChC5yZ,EAAQ1pX,EAAMqxwB,YAAY3nZ,GACtB1pX,EAAM2xwB,WAAW8K,EAAQH,EAAa5yZ,GACxC,OAAOvkf,EAAMzS,MAIf,IADA,IAAImc,EAAI,EACDA,GAAK4t4B,GAAQ,CAClB,GAAIhB,EAAMiB,SAASN,IAAIvt4B,EAAG4t4B,EAAQH,IAAgB5yZ,EAChD,OAAO76e,EAETA,MAIJ1c,EAAQ0q5B,MAAQ,GAEhB1q5B,EAAQ0q5B,MAAMX,KAAO,SAASrt4B,EAAG1X,EAAGgl5B,GAGlC,OAFAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtB1X,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAW9i4B,EAAG1X,GACfgO,EAAMzS,MAGPyp5B,EAAcV,EAAMqB,UAAUV,IAAIvt4B,EAAG1X,GAAKsk5B,EAAMqB,UAAUliM,IAAI/rsB,EAAG1X,IAG3EhF,EAAQ0q5B,MAAMX,KAAK77E,GAAK,SAASxxzB,EAAG1X,GAClC,OAAK0X,GAAK1X,EACDgO,EAAM6ikB,GAGXn5jB,EAAI,GAAK1X,EAAIpD,KAAKy1O,IAAI,GAAI,IACrBrkO,EAAM+qG,IAGG,kBAANrhG,GAAiC,kBAAN1X,EAC9BgO,EAAMzS,MAGR,EAAK+o5B,EAAMqB,UAAUV,IAAIvt4B,EAAG1X,IAGrChF,EAAQ0q5B,MAAMR,IAAM,SAASC,EAAanl5B,GAGxC,OAFAml5B,EAAct8wB,EAAMqxwB,YAAYiL,GAChCnl5B,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAW2K,EAAanl5B,GACzBgO,EAAMzS,MAER+o5B,EAAMqB,UAAU9xW,IAAIsxW,EAAanl5B,IAG1ChF,EAAQ0q5B,MAAMR,IAAIh8E,GAAK,SAAS5zvB,EAAGt1E,GACjC,OAAKs1E,GAAKt1E,EACDgO,EAAM6ikB,GAGXv7f,EAAI,GAAKA,EAAI,GAAKt1E,EAAI,GAAKA,EAAIpD,KAAKy1O,IAAI,GAAI,IACvCrkO,EAAM+qG,IAGG,kBAANzjC,GAAiC,kBAANt1E,EAC9BgO,EAAMzS,MAGR+o5B,EAAMqB,UAAU9xW,IAAI,EAAMv+d,EAAGt1E,IAGtChF,EAAQ0q5B,MAAMtsZ,KAAO,SAASwsZ,EAAUjlmB,GACtC,GAAyB,IAArBp9S,UAAU7B,OACZ,OAAOsM,EAAM6ikB,GAGf,KAAO+0U,aAAoBtk5B,UAAcq/S,aAAoBr/S,OAC3D,OAAO0M,EAAMzS,MAGf,GAAIqq5B,EAASlk5B,SAAWi/S,EAASj/S,OAC/B,OAAOsM,EAAMzS,MAGf,GAAIqq5B,EAAS,IAAMjlmB,EAAS,IAC1BilmB,EAAS,GAAGlk5B,SAAWi/S,EAAS,GAAGj/S,OACnC,OAAOsM,EAAMzS,MAGf,IACIqkM,EAAK/8L,EAAGw0E,EADRwkF,EAAM+pvB,EAASlk5B,OAInB,IAAKmB,EAAI,EAAGA,EAAIg5J,EAAKh5J,IACb+i5B,EAAS/i5B,aAAcvB,QAC3Bs+L,EAAMgmtB,EAAS/i5B,GACf+i5B,EAAS/i5B,GAAK,GACd+i5B,EAAS/i5B,GAAGoJ,KAAK2zL,IAEb+gH,EAAS99S,aAAcvB,QAC3Bs+L,EAAM+gH,EAAS99S,GACf89S,EAAS99S,GAAK,GACd89S,EAAS99S,GAAGoJ,KAAK2zL,IAIrB,IAAI9jC,EAAM8pvB,EAAS,GAAGlk5B,OAClBmk5B,EAAe,IAAR/pvB,EAAaD,EAAI,GAAKA,EAAI,IAAIC,EAAI,GACzCgqvB,EAAO,EACPC,EAAInp5B,KAAKqhf,GAEb,IAAKp7e,EAAI,EAAGA,EAAIg5J,EAAKh5J,IACnB,IAAKw0E,EAAI,EAAGA,EAAIykF,EAAKzkF,IACnByu0B,GAAQlp5B,KAAKy1O,IAAKuzqB,EAAS/i5B,GAAGw0E,GAAKspO,EAAS99S,GAAGw0E,GAAK,GAAKspO,EAAS99S,GAAGw0E,GAKzE,SAAS2u0B,EAAMF,EAAMD,GACnB,IAAIvw0B,EAAI14E,KAAKmkG,KAAK,GAAM+kzB,GACpBD,EAAI,IAAO,IACbvw0B,GAAQ14E,KAAK8oK,KAAK,EAAIogvB,EAAKC,IAG7B,IADA,IAAI/l5B,EAAI6l5B,EACF7l5B,GAAK,GACTs1E,EAAIA,EAAIww0B,EAAK9l5B,EACbA,GAAQ,EAIV,IAFA,IAAI4rB,EAAI0pD,EACJ9vE,EAAIqg5B,EACDj63B,EAAI,MAAa0pD,GAGtBA,GADA1pD,EAAIA,EAAIk63B,GADRtg5B,GAAQ,GAIV,OAAO,EAAE8vE,EAGX,OAAO14E,KAAKo/E,MAAyB,IAAnBgq0B,EAAMF,EAAMD,IAAkB,KAGlD7q5B,EAAQir5B,OAAS,SAASvyW,EAAQ13iB,GAChC,OAAyB,IAArBuH,UAAU7B,OACLsM,EAAM6ikB,GAGX70kB,EAAQ,EACHgS,EAAM+qG,IAGT26b,aAAkBpyiB,OAA4B,kBAAVtF,EAIpB,IAAlB03iB,EAAOhyiB,OAIJ4i5B,EAAMxovB,IAAI43Y,EAAQ13iB,QAJzB,EAHSgS,EAAMzS,OAUjBP,EAAQkr5B,QAAU,SAASxyW,GACzB,OAAyB,IAArBnwiB,UAAU7B,OACLsM,EAAM6ikB,GAGTn9B,aAAkBpyiB,MAIF,IAAlBoyiB,EAAOhyiB,OACF,EAGF4i5B,EAAMtqW,KAAKtG,GAPT1liB,EAAMzS,OAUjBP,EAAQmr5B,WAAa,GAErBnr5B,EAAQmr5B,WAAWC,KAAO,SAAS7zZ,EAAO8zZ,EAAIpg5B,GAI5C,OAHAssf,EAAQ1pX,EAAMqxwB,YAAY3nZ,GAC1B8zZ,EAAKx9wB,EAAMqxwB,YAAYmM,GACvBpg5B,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAWjoZ,EAAO8zZ,EAAIpg5B,GACvB+H,EAAMzS,MAER+o5B,EAAMgC,SAAS,EAAG/zZ,EAAO8zZ,EAAIpg5B,GAAG,GAAK,GAG9CjL,EAAQmr5B,WAAWzrvB,EAAI,SAAS63V,EAAO8zZ,EAAIpg5B,GAIzC,OAHAssf,EAAQ1pX,EAAMqxwB,YAAY3nZ,GAC1B8zZ,EAAKx9wB,EAAMqxwB,YAAYmM,GACvBpg5B,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAWjoZ,EAAO8zZ,EAAIpg5B,GACvB+H,EAAMzS,MAER+o5B,EAAMiC,IAAI,EAAGh0Z,EAAO8zZ,EAAIpg5B,GAAG,GAAK,GAGzCjL,EAAQwr5B,OAAS,SAAS56pB,EAAQC,GAGhC,OAFAD,EAAS/iH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQqgP,IAC9CC,EAAShjH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQsgP,IAC1ChjH,EAAM2xwB,WAAW5upB,EAAQC,GACpB79O,EAAMzS,MAER+o5B,EAAMmC,UAAU76pB,EAAQC,IAGjC7wP,EAAQih5B,MAAQ,WACd,OAAOpzwB,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YAAY7B,QAGjD1G,EAAQkh5B,OAAS,WACf,IAAI5mtB,EAAQzsD,EAAMt9H,QAAQhI,WAC1B,OAAO+xL,EAAM5zL,OAAS1G,EAAQ0r5B,WAAWpxtB,IAG3Ct6L,EAAQ2r5B,QAAU,SAAUrxtB,EAAO/5L,GACjC,IAAIkY,EAAS,EAEb6hL,EAAQzsD,EAAMt9H,QAAQ+pL,GAEtB,IAAK,IAAIzyL,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAC5ByyL,EAAMzyL,KAAOtH,GACfkY,IAGJ,OAAOA,GAITzY,EAAQ0r5B,WAAa,WAInB,IAHA,IAEI/+sB,EAFArS,EAAQzsD,EAAMt9H,QAAQhI,WACtBqj5B,EAAS,EAEJ/j5B,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAEhB,QADhB8kM,EAAUrS,EAAMzyL,KACoB,KAAZ8kM,GACtBi/sB,IAGJ,OAAOA,GAGT5r5B,EAAQ6r5B,QAAU,SAASvxtB,EAAO/R,GAKhC,GAJA+R,EAAQzsD,EAAMt9H,QAAQ+pL,QAEQ,IAAb/R,GAAoC,MAAbA,EAGtC,OAAO+R,EAAM5zL,OAMf,IAHA,IAAI+1L,EAAU,EACVurtB,EAAoB3H,EAAeh/1B,MAAMknI,EAAW,IAE/C1gL,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAAK,CACrC,IAAItH,EAAQ+5L,EAAMzyL,GACd41O,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAEvF3H,EAAe8H,QAAQ1qqB,IACzBhhD,IAIJ,OAAOA,GAGTz8L,EAAQ8r5B,SAAW,WAIjB,IAHA,IAAIj83B,EAAOg+G,EAAMgxwB,YAAYt24B,WACzByiQ,EAAU,IAAI1kQ,MAAMunI,EAAMt9H,QAAQsf,EAAK,IAAInpB,QAEtCmB,EAAI,EAAGA,EAAImjQ,EAAQtkQ,OAAQmB,IAClCmjQ,EAAQnjQ,IAAK,EAEf,IAAKA,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,GAAK,EAAG,CACnC,IAAIyyL,EAAQzsD,EAAMt9H,QAAQsf,EAAKhoB,IAC3B0gL,EAAW14J,EAAKhoB,EAAI,GACpBkg5B,OAA0B,IAAbx/tB,GAAoC,MAAbA,EAExC,IAAKw/tB,EAGH,IAFA,IAAIC,EAAoB3H,EAAeh/1B,MAAMknI,EAAW,IAE/ClsG,EAAI,EAAGA,EAAIi+G,EAAM5zL,OAAQ21E,IAAK,CACrC,IAAI97E,EAAQ+5L,EAAMj+G,GACdohK,EAAS,CAAC4iqB,EAAe4H,YAAY1n5B,EAAO8/4B,EAAe6H,qBAAqB/34B,OAAO634B,GAE3Fh9oB,EAAQ3uL,GAAK2uL,EAAQ3uL,IAAMgk0B,EAAe8H,QAAQ1qqB,IAIxD,IAAIhlO,EAAS,EACb,IAAK5Q,EAAI,EAAGA,EAAImjQ,EAAQtkQ,OAAQmB,IAC1BmjQ,EAAQnjQ,IACV4Q,IAIJ,OAAOA,GAGTzY,EAAQ+r5B,YAAc,WACpB,OAAOznI,EAAK0nI,OAAOl/4B,MAAM,KAAM+gI,EAAMt9H,QAAQhI,YAAY7B,QAG3D1G,EAAQis5B,WAAa,GAErBjs5B,EAAQis5B,WAAWnx0B,EAAI,SAAS81K,EAAQC,GAGtC,GAFAD,EAAS/iH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQqgP,IAC9CC,EAAShjH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQsgP,IAC1ChjH,EAAM2xwB,WAAW5upB,EAAQC,GAC3B,OAAO79O,EAAMzS,MAMf,IAJA,IAAI2r5B,EAAQ5C,EAAMnptB,KAAKywD,GACnBu7pB,EAAQ7C,EAAMnptB,KAAK0wD,GACnBp4O,EAAS,EACTxN,EAAI2lP,EAAOlqP,OACNmB,EAAI,EAAGA,EAAIoD,EAAGpD,IACrB4Q,IAAWm4O,EAAO/oP,GAAKqk5B,IAAUr7pB,EAAOhpP,GAAKsk5B,GAE/C,OAAO1z4B,EAASxN,GAGlBjL,EAAQis5B,WAAWzsvB,EAAI,SAASoxF,EAAQC,GAGtC,OAFAD,EAAS/iH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQqgP,IAC9CC,EAAShjH,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQsgP,IAC1ChjH,EAAM2xwB,WAAW5upB,EAAQC,GACpB79O,EAAMzS,MAER+o5B,EAAM8C,WAAWx7pB,EAAQC,IAGlC7wP,EAAQqs5B,MAAQ,WACd,IAAI/xtB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAIT,IAFA,IAAI6F,EAAOmptB,EAAMnptB,KAAK7F,GAClB7hL,EAAS,EACJ5Q,EAAI,EAAGA,EAAIyyL,EAAM5zL,OAAQmB,IAChC4Q,GAAU7W,KAAKy1O,IAAK/8C,EAAMzyL,GAAKs4L,EAAO,GAExC,OAAO1nL,GAGTzY,EAAQss5B,MAAQ,GAEhBts5B,EAAQss5B,MAAMvC,KAAO,SAASrt4B,EAAG6v4B,EAAQvC,GAGvC,OAFAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtB6v4B,EAAS1+wB,EAAMqxwB,YAAYqN,GACvB1+wB,EAAM2xwB,WAAW9i4B,EAAG6v4B,GACfv54B,EAAMzS,MAEPyp5B,EAAcV,EAAMkD,YAAYvC,IAAIvt4B,EAAG6v4B,GAAUjD,EAAMkD,YAAY/jM,IAAI/rsB,EAAG6v4B,IAGpFvs5B,EAAQggQ,EAAI,GAEZhgQ,EAAQggQ,EAAE+ppB,KAAO,SAASrt4B,EAAGmtJ,EAAIC,EAAIkgvB,GAInC,OAHAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBmtJ,EAAKh8B,EAAMqxwB,YAAYr1uB,GACvBC,EAAKj8B,EAAMqxwB,YAAYp1uB,GACnBj8B,EAAM2xwB,WAAW9i4B,EAAGmtJ,EAAIC,GACnB92J,EAAMzS,MAEPyp5B,EAAcV,EAAMmD,SAASxC,IAAIvt4B,EAAGmtJ,EAAIC,GAAMw/uB,EAAMmD,SAAShkM,IAAI/rsB,EAAGmtJ,EAAIC,IAGlF9pK,EAAQggQ,EAAE+ppB,KAAK77E,GAAK,SAASxxzB,EAAGmtJ,EAAIC,GAClC,OAAyB,IAArBvhK,UAAU7B,OACLsM,EAAM6ikB,GAGXn5jB,EAAI,GAAKmtJ,EAAK,GAAKC,EAAK,EACnB92J,EAAM+qG,IAGG,kBAANrhG,GAAkC,kBAAPmtJ,GAAmC,kBAAPC,EAC1D92J,EAAMzS,MAGR,EAAI+o5B,EAAMmD,SAASxC,IAAIvt4B,EAAGmtJ,EAAIC,IAGvC9pK,EAAQggQ,EAAEkqpB,IAAM,SAASC,EAAatgvB,EAAIC,GAIxC,OAHAqgvB,EAAct8wB,EAAMqxwB,YAAYiL,GAChCtgvB,EAAKh8B,EAAMqxwB,YAAYr1uB,GACvBC,EAAKj8B,EAAMqxwB,YAAYp1uB,GACnBj8B,EAAM2xwB,WAAW2K,EAAatgvB,EAAIC,GAC7B92J,EAAMzS,MAEX4p5B,GAAe,GAAOA,EAAc,EAC/Bn34B,EAAM+qG,IAGRuryB,EAAMmD,SAAS5zW,IAAIsxW,EAAatgvB,EAAIC,IAG7C9pK,EAAQggQ,EAAEkqpB,IAAIh8E,GAAK,SAAS5zvB,EAAGuvF,EAAIC,GACjC,OAAyB,IAArBvhK,UAAU7B,OACLsM,EAAM6ikB,GAGXv7f,EAAI,GAAKA,EAAI,GAAKuvF,EAAK,GAAKA,EAAKjoK,KAAKy1O,IAAI,GAAI,KAAOvtE,EAAK,GAAKA,EAAKloK,KAAKy1O,IAAI,GAAI,IAC5ErkO,EAAM+qG,IAGG,kBAANzjC,GAAkC,kBAAPuvF,GAAmC,kBAAPC,EAC1D92J,EAAMzS,MAGR+o5B,EAAMmD,SAAS5zW,IAAI,EAAMv+d,EAAGuvF,EAAIC,IAGzC9pK,EAAQggQ,EAAEo+P,KAAO,SAASxtQ,EAAQC,GAChC,IAAKD,IAAWC,EACd,OAAO79O,EAAM6ikB,GAGf,KAAMjlV,aAAkBtqP,UAAYuqP,aAAkBvqP,OACpD,OAAO0M,EAAM6ikB,GAGf,GAAIjlV,EAAOlqP,OAAS,GAAKmqP,EAAOnqP,OAAS,EACvC,OAAOsM,EAAMyr4B,KAGf,IAAIiO,EAAe,SAAS184B,EAAQ+sQ,GAElC,IADA,IAAItsQ,EAAM,EACD5I,EAAI,EAAGA,EAAImI,EAAOtJ,OAAQmB,IACjC4I,GAAM7O,KAAKy1O,IAAKrnO,EAAOnI,GAAKk1Q,EAAK,GAEnC,OAAOtsQ,GAGLssQ,EAAKssoB,EAAS/H,IAAI1wpB,GAAUA,EAAOlqP,OACnCu2Q,EAAKosoB,EAAS/H,IAAIzwpB,GAAUA,EAAOnqP,OAIvC,OAHWgm5B,EAAa97pB,EAAQmsB,IAAOnsB,EAAOlqP,OAAS,IAC5Cgm5B,EAAa77pB,EAAQosB,IAAOpsB,EAAOnqP,OAAS,KAKzD1G,EAAQ2s5B,OAAS,SAASjw4B,GAExB,OADAA,EAAImxH,EAAMqxwB,YAAYxi4B,cACLjQ,MACRiQ,EAEF9a,KAAKkuG,KAAK,EAAIpzF,IAAM,EAAIA,IAAM,GAGvC1c,EAAQ4s5B,UAAY,SAASv82B,GAE3B,IADAA,EAAIw9F,EAAMqxwB,YAAY7u2B,cACL5jC,MACf,OAAO4jC,EAET,IAAIw82B,EAAMjr5B,KAAKmkG,IAAI,EAAI11D,GACvB,OAAQw82B,EAAM,IAAMA,EAAM,IAG5B7s5B,EAAQ8s5B,SAAW,SAASpw4B,EAAGqw4B,EAAQC,GAIrC,GAHAtw4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBqw4B,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAW9i4B,EAAGqw4B,EAAQC,GAC9B,OAAOh64B,EAAMzS,MAOf,IALA,IAAI0s5B,EAAQ3D,EAAMnptB,KAAK6stB,GACnBE,EAAQ5D,EAAMnptB,KAAK4stB,GACnB9h5B,EAAI+h5B,EAAOtm5B,OACXq3G,EAAM,EACNovyB,EAAM,EACDtl5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBk2G,IAAQivyB,EAAOnl5B,GAAKol5B,IAAUF,EAAOll5B,GAAKql5B,GAC1CC,GAAOvr5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAKol5B,EAAO,GAErC,IAAIxi5B,EAAIszG,EAAMovyB,EAEd,OADQD,EAAQzi5B,EAAIwi5B,EACTxi5B,EAAIiS,GAGjB1c,EAAQot5B,UAAY,SAASvt2B,EAAMwt2B,GAGjC,GAFAxt2B,EAAOguF,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQsvC,IAC5Cwt2B,EAAOx/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ884B,IACxCx/wB,EAAM2xwB,WAAW3/1B,EAAMwt2B,GACzB,OAAOr64B,EAAMzS,MAKf,IAHA,IAAI0K,EAAI40C,EAAKn5C,OACT+D,EAAI4i5B,EAAK3m5B,OACTs1E,EAAI,GACCn0E,EAAI,EAAGA,GAAK4C,EAAG5C,IAAK,CAC3Bm0E,EAAEn0E,GAAK,EACP,IAAK,IAAIw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACX,IAANx0E,EACEg4C,EAAKw8B,IAAMgx0B,EAAK,KAClBrx0B,EAAE,IAAM,GAEDn0E,EAAI4C,EACTo1C,EAAKw8B,GAAKgx0B,EAAKxl5B,EAAI,IAAMg4C,EAAKw8B,IAAMgx0B,EAAKxl5B,KAC3Cm0E,EAAEn0E,IAAM,GAEDA,IAAM4C,GACXo1C,EAAKw8B,GAAKgx0B,EAAK5i5B,EAAI,KACrBuxE,EAAEvxE,IAAM,GAKhB,OAAOuxE,GAITh8E,EAAQst5B,MAAQ,SAASjuuB,GAEvB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAGM,IAAXA,GAIA5+H,SAAS4+H,EAAQ,MAAQA,GAAUA,EAAS,EAHvCrsK,EAAM+qG,IAORuryB,EAAMiE,QAAQluuB,IAGvBr/K,EAAQst5B,MAAMvD,KAAO,SAASxp5B,EAAOg3f,EAAO2uQ,EAAM8jJ,GAChD,OAAyB,IAArBzh5B,UAAU7B,OACLsM,EAAM6ikB,GAGXt1kB,EAAQ,GAAKg3f,GAAS,GAAK2uQ,GAAQ,GAIjB,kBAAV3lwB,GAAyC,kBAAVg3f,GAAwC,kBAAT2uQ,EAHjElzvB,EAAMzS,MAORyp5B,EAAaV,EAAMkE,MAAMvD,IAAI1p5B,EAAOg3f,EAAO2uQ,GAAM,GAAQojJ,EAAMkE,MAAM/kM,IAAIlotB,EAAOg3f,EAAO2uQ,GAAM,IAGtGlmwB,EAAQst5B,MAAMpD,IAAM,SAASC,EAAa5yZ,EAAO2uQ,GAC/C,OAAyB,IAArB39vB,UAAU7B,OACLsM,EAAM6ikB,GAGXs0U,EAAc,GAAKA,EAAc,GAAK5yZ,GAAS,GAAK2uQ,GAAQ,EACvDlzvB,EAAM+qG,IAGa,kBAAhBosyB,GAA+C,kBAAV5yZ,GAAwC,kBAAT2uQ,EACvElzvB,EAAMzS,MAGR+o5B,EAAMkE,MAAM30W,IAAIsxW,EAAa5yZ,EAAO2uQ,IAG7ClmwB,EAAQyt5B,QAAU,SAASpuuB,GAEzB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEFiquB,EAAMoE,QAAQruuB,IAGvBr/K,EAAQyt5B,QAAQnK,QAAU,SAAS5m4B,GACjC,OAAyB,IAArBnU,UAAU7B,OACLsM,EAAM6ikB,GAGXn5jB,GAAK,EACA1J,EAAM+qG,IAGE,kBAANrhG,EACF1J,EAAMzS,MAGR+o5B,EAAMoE,QAAQhx4B,IAGvB1c,EAAQ2t5B,MAAQ,SAAShuvB,GAEvB,OADAA,EAAI9xB,EAAMqxwB,YAAYv/uB,cACLlzJ,MACRkzJ,EAEF2pvB,EAAMsE,OAAO3D,IAAItqvB,EAAG,EAAG,GAAK,IAGrC3/J,EAAQ6t5B,QAAU,WAChB,IAAIh+3B,EAAOg+G,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YAChD,OAAIsnB,aAAgBpjB,MACXojB,EAEFy53B,EAAMwE,QAAQj+3B,IAGvB7vB,EAAQ+t5B,OAAS,SAASC,EAASC,EAASC,EAAOC,GAIjD,IADAH,EAAUngxB,EAAMsxwB,iBAAiB6O,cACVvh5B,MACrB,OAAOuh5B,EAIT,IAAInm5B,EACJ,QAAgBlH,IAAZst5B,EAEF,IADAA,EAAU,GACLpm5B,EAAI,EAAGA,GAAKmm5B,EAAQtn5B,OAAQmB,IAC/Bom5B,EAAQh94B,KAAKpJ,GAGjB,QAAclH,IAAVut5B,EAEF,IADAA,EAAQ,GACHrm5B,EAAI,EAAGA,GAAKmm5B,EAAQtn5B,OAAQmB,IAC/Bqm5B,EAAMj94B,KAAKpJ,GAMf,GAFAom5B,EAAUpgxB,EAAMsxwB,iBAAiB8O,GACjCC,EAAQrgxB,EAAMsxwB,iBAAiB+O,GAC3BrgxB,EAAM2xwB,WAAWyO,EAASC,GAC5B,OAAOl74B,EAAMzS,WAIGI,IAAdwt5B,IACFA,GAAY,GAId,IAmBIjoJ,EACA3uQ,EApBAtsf,EAAI+i5B,EAAQtn5B,OACZ0n5B,EAAQ,EACRC,EAAQ,EACRC,EAAS,EACTC,EAAS,EACb,IAAK1m5B,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CACtB,IAAI6U,EAAIux4B,EAAQpm5B,GACZwoC,EAAIzuC,KAAKkuG,IAAIk+yB,EAAQnm5B,IACzBum5B,GAAS1x4B,EACT2x4B,GAASh+2B,EACTi+2B,GAAU5x4B,EAAI2zB,EACdk+2B,GAAU7x4B,EAAIA,EAEhB0x4B,GAASnj5B,EACToj5B,GAASpj5B,EACTqj5B,GAAUrj5B,EACVsj5B,GAAUtj5B,EAKNkj5B,EAEF52Z,EAAQ82Z,GADRnoJ,GAAQooJ,EAASF,EAAQC,IAAUE,EAASH,EAAQA,IAC7BA,GAEvBloJ,EAAOooJ,EAASC,EAChBh3Z,EAAQ,GAIV,IAAIi3Z,EAAQ,GACZ,IAAK3m5B,EAAI,EAAGA,EAAIqm5B,EAAMxn5B,OAAQmB,IAC5B2m5B,EAAMv94B,KAAKrP,KAAKmkG,IAAIwxZ,EAAQ2uQ,EAAOgoJ,EAAMrm5B,KAE3C,OAAO2m5B,GAGTxu5B,EAAQyu5B,QAAU,WAChB,IAAIn0tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAIT,IAFA,IAAIrvL,EAAIqvL,EAAM5zL,OACVym5B,EAAM,EACDtl5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBsl5B,GAAO,EAAI7ytB,EAAMzyL,GAEnB,OAAOoD,EAAIki5B,GAGbnt5B,EAAQ0u5B,QAAU,GAElB1u5B,EAAQ0u5B,QAAQ3E,KAAO,SAASrt4B,EAAGzR,EAAGm0J,EAAGV,EAAGsrvB,GAK1C,GAJAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GACtBm0J,EAAIvxB,EAAMqxwB,YAAY9/uB,GACtBV,EAAI7wB,EAAMqxwB,YAAYxgvB,GAClB7wB,EAAM2xwB,WAAW9i4B,EAAGzR,EAAGm0J,EAAGV,GAC5B,OAAO1rJ,EAAMzS,MAGf,SAASkotB,EAAI/rsB,EAAGzR,EAAGm0J,EAAGV,GACpB,OAAO2qvB,EAAS9F,OAAOnkvB,EAAG1iJ,GAAK2s4B,EAAS9F,OAAO7kvB,EAAIU,EAAGn0J,EAAIyR,GAAK2s4B,EAAS9F,OAAO7kvB,EAAGzzJ,GAWpF,OAAQ++4B,EARR,SAAatt4B,EAAGzR,EAAGm0J,EAAGV,GAEpB,IADA,IAAIjmJ,EAAS,EACJ5Q,EAAI,EAAGA,GAAK6U,EAAG7U,IACtB4Q,GAAUgwsB,EAAI5gtB,EAAGoD,EAAGm0J,EAAGV,GAEzB,OAAOjmJ,EAGawx4B,CAAIvt4B,EAAGzR,EAAGm0J,EAAGV,GAAK+pjB,EAAI/rsB,EAAGzR,EAAGm0J,EAAGV,IAGvD1+J,EAAQ2u5B,UAAY,SAASX,EAASC,GAGpC,OAFAD,EAAUngxB,EAAMsxwB,iBAAiB6O,GACjCC,EAAUpgxB,EAAMsxwB,iBAAiB8O,GAC7BpgxB,EAAM2xwB,WAAWwO,EAASC,GACrBj74B,EAAMzS,MAEXyt5B,EAAQtn5B,SAAWun5B,EAAQvn5B,OACtBsM,EAAM6ikB,GAER71kB,EAAQ8s5B,SAAS,EAAGkB,EAASC,IAGtCju5B,EAAQ4u5B,KAAO,WACb,IAAIt0tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAKT,IAHA,IAAI6F,EAAOmptB,EAAMnptB,KAAK7F,GAClBrvL,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACHhn5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBgn5B,GAASjt5B,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAGrC,OAASl1L,GAAKA,EAAI,KAAQA,EAAI,IAAMA,EAAI,IAAMA,EAAI,KADlD4j5B,GAAgBjt5B,KAAKy1O,IAAIiyqB,EAAMwF,MAAMx0tB,GAAO,GAAO,IACc,GAAKrvL,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,KAG3GjL,EAAQ2h5B,MAAQ,SAASrntB,EAAOt1L,GAG9B,OAFAs1L,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7Ct1L,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAWlltB,EAAOt1L,GACnBs1L,EAEFA,EAAMhpL,MAAK,SAAS9G,EAAGC,GAC5B,OAAOA,EAAID,KACVxF,EAAI,IAGThF,EAAQ+u5B,OAAS,SAAShC,EAAQC,GAGhC,GAFAD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAWuN,EAAQC,GAC3B,OAAOh64B,EAAMzS,MAOf,IALA,IAAI2s5B,EAAQ5D,EAAMnptB,KAAK4stB,GACnBE,EAAQ3D,EAAMnptB,KAAK6stB,GACnB/h5B,EAAI+h5B,EAAOtm5B,OACXq3G,EAAM,EACNovyB,EAAM,EACDtl5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBk2G,IAAQivyB,EAAOnl5B,GAAKol5B,IAAUF,EAAOll5B,GAAKql5B,GAC1CC,GAAOvr5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAKol5B,EAAO,GAErC,IAAIh24B,EAAI8mG,EAAMovyB,EAEd,MAAO,CAACl24B,EADAi24B,EAAQj24B,EAAIg24B,IAQtBjt5B,EAAQgv5B,OAAS,SAASjC,EAAQC,GAGhC,GAFAD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAWuN,EAAQC,GAC3B,OAAOh64B,EAAMzS,MAEf,IAAK,IAAIsH,EAAI,EAAGA,EAAIkl5B,EAAOrm5B,OAAQmB,IACjCkl5B,EAAOll5B,GAAKjG,KAAKkuG,IAAIi9yB,EAAOll5B,IAG9B,IAAI4Q,EAASzY,EAAQ+u5B,OAAOhC,EAAQC,GAGpC,OAFAv04B,EAAO,GAAK7W,KAAKo/E,MAA0B,IAApBp/E,KAAKmkG,IAAIttF,EAAO,KAAa,IACpDA,EAAO,GAAK7W,KAAKo/E,MAA0B,IAApBp/E,KAAKmkG,IAAIttF,EAAO,KAAa,IAC7CA,GAGTzY,EAAQiv5B,QAAU,GAElBjv5B,EAAQiv5B,QAAQlF,KAAO,SAASrt4B,EAAGyjL,EAAMkrtB,EAAIrB,GAI3C,OAHAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtByjL,EAAOtyD,EAAMqxwB,YAAY/+sB,GACzBkrtB,EAAKx9wB,EAAMqxwB,YAAYmM,GACnBx9wB,EAAM2xwB,WAAW9i4B,EAAGyjL,EAAMkrtB,GACrBr44B,EAAMzS,MAEPyp5B,EAAcV,EAAM4F,UAAUjF,IAAIvt4B,EAAGyjL,EAAMkrtB,GAAM/B,EAAM4F,UAAUzmM,IAAI/rsB,EAAGyjL,EAAMkrtB,IAGxFrr5B,EAAQiv5B,QAAQ/E,IAAM,SAASC,EAAahqtB,EAAMkrtB,GAIhD,OAHAlB,EAAct8wB,EAAMqxwB,YAAYiL,GAChChqtB,EAAOtyD,EAAMqxwB,YAAY/+sB,GACzBkrtB,EAAKx9wB,EAAMqxwB,YAAYmM,GACnBx9wB,EAAM2xwB,WAAW2K,EAAahqtB,EAAMkrtB,GAC/Br44B,EAAMzS,MAER+o5B,EAAM4F,UAAUr2W,IAAIsxW,EAAahqtB,EAAMkrtB,IAGhDrr5B,EAAQmh5B,IAAM,WACZ,IAAI7mtB,EAAQzsD,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YACxC,OAAyB,IAAjB+xL,EAAM5zL,OAAgB,EAAI9E,KAAKC,IAAIiL,MAAMlL,KAAM04L,IAGzDt6L,EAAQmv5B,KAAO,WACb,IAAI70tB,EAAQzsD,EAAM4xwB,qBAAqB5xwB,EAAMt9H,QAAQhI,YACrD,OAAyB,IAAjB+xL,EAAM5zL,OAAgB,EAAI9E,KAAKC,IAAIiL,MAAMlL,KAAM04L,IAGzDt6L,EAAQwh5B,OAAS,WACf,IAAIlntB,EAAQzsD,EAAM4xwB,qBAAqB5xwB,EAAMt9H,QAAQhI,YACjDkQ,EAAS6w4B,EAAM8F,OAAO90tB,GAM1B,OAJIr5I,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQoh5B,IAAM,WACZ,IAAI9mtB,EAAQzsD,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YACxC,OAAyB,IAAjB+xL,EAAM5zL,OAAgB,EAAI9E,KAAKE,IAAIgL,MAAMlL,KAAM04L,IAGzDt6L,EAAQqv5B,KAAO,WACb,IAAI/0tB,EAAQzsD,EAAM4xwB,qBAAqB5xwB,EAAMt9H,QAAQhI,YACrD,OAAyB,IAAjB+xL,EAAM5zL,OAAgB,EAAI9E,KAAKE,IAAIgL,MAAMlL,KAAM04L,IAGzDt6L,EAAQyh5B,KAAO,GAEfzh5B,EAAQyh5B,KAAK6N,KAAO,WAElB,IAAIh1tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAQT,IANA,IAIIi1tB,EAJAtk5B,EAAIqvL,EAAM5zL,OACVuT,EAAQ,GACRu14B,EAAW,GACX3t5B,EAAM,EAGDgG,EAAI,EAAGA,EAAIoD,EAAGpD,IAErBoS,EADAs14B,EAAcj1tB,EAAMzyL,IACCoS,EAAMs14B,GAAet14B,EAAMs14B,GAAe,EAAI,EAC/Dt14B,EAAMs14B,GAAe1t5B,IACvBA,EAAMoY,EAAMs14B,GACZC,EAAW,IAETv14B,EAAMs14B,KAAiB1t5B,IACzB2t5B,EAASA,EAAS9o5B,QAAU6o5B,GAGhC,OAAOC,GAGTxv5B,EAAQyh5B,KAAKC,KAAO,WAClB,IAAIpntB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,OAAI+xL,aAAiB7tL,MACZ6tL,EAEFt6L,EAAQyh5B,KAAK6N,KAAKh1tB,GAAOhpL,MAAK,SAAS9G,EAAGC,GAC/C,OAAOD,EAAIC,KACV,IAGLzK,EAAQyv5B,SAAW,GAEnBzv5B,EAAQyv5B,SAAS1F,KAAO,SAAS/k5B,EAAGg3E,EAAG1B,EAAG0v0B,GAIxC,OAHAhl5B,EAAI6oI,EAAMqxwB,YAAYl64B,GACtBg3E,EAAI6xD,EAAMqxwB,YAAYlj0B,GACtB1B,EAAIuzD,EAAMqxwB,YAAY5k0B,GAClBuzD,EAAM2xwB,WAAWx64B,EAAGg3E,EAAG1B,GAClBtnE,EAAMzS,MAEPyp5B,EAAcV,EAAMoG,OAAOzF,IAAIjl5B,EAAGg3E,EAAG1B,GAAKgv0B,EAAMoG,OAAOjnM,IAAIzjtB,EAAGg3E,EAAG1B,IAG3Et6E,EAAQor5B,KAAO,GAEfpr5B,EAAQor5B,KAAKrB,KAAO,SAASrt4B,EAAGyjL,EAAMkrtB,EAAIrB,GAIxC,OAHAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtByjL,EAAOtyD,EAAMqxwB,YAAY/+sB,GACzBkrtB,EAAKx9wB,EAAMqxwB,YAAYmM,GACnBx9wB,EAAM2xwB,WAAW9i4B,EAAGyjL,EAAMkrtB,GACrBr44B,EAAMzS,MAEX8q5B,GAAM,EACDr44B,EAAM+qG,IAIPisyB,EAAcV,EAAMsE,OAAO3D,IAAIvt4B,EAAGyjL,EAAMkrtB,GAAM/B,EAAMsE,OAAOnlM,IAAI/rsB,EAAGyjL,EAAMkrtB,IAGlFrr5B,EAAQor5B,KAAKlB,IAAM,SAASC,EAAahqtB,EAAMkrtB,GAI7C,OAHAlB,EAAct8wB,EAAMqxwB,YAAYiL,GAChChqtB,EAAOtyD,EAAMqxwB,YAAY/+sB,GACzBkrtB,EAAKx9wB,EAAMqxwB,YAAYmM,GACnBx9wB,EAAM2xwB,WAAW2K,EAAahqtB,EAAMkrtB,GAC/Br44B,EAAMzS,MAER+o5B,EAAMsE,OAAO/0W,IAAIsxW,EAAahqtB,EAAMkrtB,IAG7Crr5B,EAAQor5B,KAAK5rvB,EAAI,GAEjBx/J,EAAQor5B,KAAK5rvB,EAAEuqvB,KAAO,SAASpqvB,EAAGqqvB,GAEhC,OADArqvB,EAAI9xB,EAAMqxwB,YAAYv/uB,cACLlzJ,MACRuG,EAAMzS,MAEPyp5B,EAAcV,EAAMsE,OAAO3D,IAAItqvB,EAAG,EAAG,GAAK2pvB,EAAMsE,OAAOnlM,IAAI9ojB,EAAG,EAAG,IAG3E3/J,EAAQor5B,KAAK5rvB,EAAE0qvB,IAAM,SAASC,GAE5B,OADAA,EAAct8wB,EAAMqxwB,YAAYiL,cACL194B,MAClBuG,EAAMzS,MAER+o5B,EAAMsE,OAAO/0W,IAAIsxW,EAAa,EAAG,IAG1Cnq5B,EAAQ2v5B,QAAU,SAAS3C,EAAQD,GAGjC,GAFAA,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAWuN,EAAQC,GAC3B,OAAOh64B,EAAMzS,MAQf,IANA,IAAI0s5B,EAAQ3D,EAAMnptB,KAAK6stB,GACnBE,EAAQ5D,EAAMnptB,KAAK4stB,GACnB9h5B,EAAI+h5B,EAAOtm5B,OACXq3G,EAAM,EACN6xyB,EAAO,EACPC,EAAO,EACFho5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBk2G,IAAQivyB,EAAOnl5B,GAAKol5B,IAAUF,EAAOll5B,GAAKql5B,GAC1C0C,GAAQhu5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAKol5B,EAAO,GACpC4C,GAAQju5B,KAAKy1O,IAAI01qB,EAAOll5B,GAAKql5B,EAAO,GAEtC,OAAOnvyB,EAAMn8G,KAAK8oK,KAAKklvB,EAAOC,IAGhC7v5B,EAAQ6h5B,WAAa,GAErB7h5B,EAAQ6h5B,WAAWG,IAAM,SAASt54B,EAAO1D,GAGvC,GAFA0D,EAAQmlI,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ7H,IAC7C1D,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAW924B,EAAO1D,GAC1B,OAAOgO,EAAMzS,MAOf,IAAI0K,GALJvC,EAAQA,EAAM4I,MAAK,SAAS9G,EAAGC,GAE3B,OAAOD,EAAIC,MAGD/D,OACd,GAAI1B,EAAI,GAAKiG,EAAI,IAAMjG,EAAI,EAAI,GAAKiG,EAAI,GACtC,OAAO+H,EAAM+qG,IAEf,IAAI7wF,EAAIloB,GAAKiG,EAAI,GAAK,EAClB6k5B,EAAKlu5B,KAAKwjB,MAAM8H,GACpB,OAAO2gH,EAAMkxwB,WAAY7x3B,IAAM4i4B,EAAMpn5B,EAAMwkB,GAAKxkB,EAAMon5B,IAAO5i4B,EAAI4i4B,IAAOpn5B,EAAMon5B,EAAK,GAAKpn5B,EAAMon5B,MAGhG9v5B,EAAQ6h5B,WAAWC,IAAM,SAASp54B,EAAO1D,GAGvC,GAFA0D,EAAQmlI,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ7H,IAC7C1D,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAW924B,EAAO1D,GAC1B,OAAOgO,EAAMzS,MAKf,IACI2sB,EAAIloB,IAJR0D,EAAQA,EAAM4I,MAAK,SAAS9G,EAAGC,GAC7B,OAAOD,EAAIC,MAEC/D,OACG,GACbop5B,EAAKlu5B,KAAKwjB,MAAM8H,GACpB,OAAO2gH,EAAMkxwB,WAAY7x3B,IAAM4i4B,EAAMpn5B,EAAMwkB,GAAKxkB,EAAMon5B,IAAO5i4B,EAAI4i4B,IAAOpn5B,EAAMon5B,EAAK,GAAKpn5B,EAAMon5B,MAGhG9v5B,EAAQ+v5B,YAAc,GAEtB/v5B,EAAQ+v5B,YAAY/N,IAAM,SAASt54B,EAAOgU,EAAGym4B,GAK3C,GAJAA,OAAiCxi5B,IAAjBwi5B,EAA8B,EAAIA,EAClDz64B,EAAQmlI,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ7H,IAC7CgU,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBym4B,EAAet1wB,EAAMqxwB,YAAYiE,GAC7Bt1wB,EAAM2xwB,WAAW924B,EAAOgU,EAAGym4B,GAC7B,OAAOnw4B,EAAMzS,MAEfmI,EAAQA,EAAM4I,MAAK,SAAS9G,EAAGC,GAC7B,OAAOD,EAAIC,KASb,IAPA,IAAIul5B,EAAU1rI,EAAK0nI,OAAOl/4B,MAAM,KAAMpE,GAClCuC,EAAIvC,EAAMhC,OACVuQ,EAAI+44B,EAAQtp5B,OACZs44B,EAAQp94B,KAAKy1O,IAAI,GAAI8rqB,GACrB1q4B,EAAS,EACT26B,GAAQ,EACRvrC,EAAI,GACAurC,GAASvrC,EAAIoP,GACfyF,IAAMsz4B,EAAQno5B,IAChB4Q,GAAU/P,EAAM2c,QAAQ2q4B,EAAQno5B,IAAM,IAAMoD,EAAI,GAChDmoC,GAAQ,GACC12B,GAAKsz4B,EAAQno5B,KAAO6U,EAAIsz4B,EAAQno5B,EAAI,IAAMA,IAAMoP,EAAI,KAC7DwB,GAAU/P,EAAM2c,QAAQ2q4B,EAAQno5B,IAAM,GAAK6U,EAAIsz4B,EAAQno5B,KAAOmo5B,EAAQno5B,EAAI,GAAKmo5B,EAAQno5B,MAAQoD,EAAI,GACnGmoC,GAAQ,GAEVvrC,IAEF,OAAOjG,KAAKwjB,MAAM3M,EAASum4B,GAASA,GAGtCh/4B,EAAQ+v5B,YAAYjO,IAAM,SAASp54B,EAAOgU,EAAGym4B,GAK3C,GAJAA,OAAiCxi5B,IAAjBwi5B,EAA8B,EAAIA,EAClDz64B,EAAQmlI,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ7H,IAC7CgU,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBym4B,EAAet1wB,EAAMqxwB,YAAYiE,GAC7Bt1wB,EAAM2xwB,WAAW924B,EAAOgU,EAAGym4B,GAC7B,OAAOnw4B,EAAMzS,MAEfmI,EAAQA,EAAM4I,MAAK,SAAS9G,EAAGC,GAC7B,OAAOD,EAAIC,KASb,IAPA,IAAIul5B,EAAU1rI,EAAK0nI,OAAOl/4B,MAAM,KAAMpE,GAClCuC,EAAIvC,EAAMhC,OACVuQ,EAAI+44B,EAAQtp5B,OACZs44B,EAAQp94B,KAAKy1O,IAAI,GAAI8rqB,GACrB1q4B,EAAS,EACT26B,GAAQ,EACRvrC,EAAI,GACAurC,GAASvrC,EAAIoP,GACfyF,IAAMsz4B,EAAQno5B,IAChB4Q,EAAS/P,EAAM2c,QAAQ2q4B,EAAQno5B,KAAOoD,EAAI,GAC1CmoC,GAAQ,GACC12B,GAAKsz4B,EAAQno5B,KAAO6U,EAAIsz4B,EAAQno5B,EAAI,IAAMA,IAAMoP,EAAI,KAC7DwB,GAAU/P,EAAM2c,QAAQ2q4B,EAAQno5B,KAAO6U,EAAIsz4B,EAAQno5B,KAAOmo5B,EAAQno5B,EAAI,GAAKmo5B,EAAQno5B,MAAQoD,EAAI,GAC/FmoC,GAAQ,GAEVvrC,IAEF,OAAOjG,KAAKwjB,MAAM3M,EAASum4B,GAASA,GAGtCh/4B,EAAQiw5B,OAAS,SAAS5wuB,EAAQmkuB,GAGhC,OAFAnkuB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3BmkuB,EAAgB31wB,EAAMqxwB,YAAYsE,GAC9B31wB,EAAM2xwB,WAAWnguB,EAAQmkuB,GACpBxw4B,EAAMzS,MAER8o5B,EAAS5F,KAAKpkuB,GAAUgquB,EAAS5F,KAAKpkuB,EAASmkuB,IAGxDxj5B,EAAQkw5B,aAAe,SAAS7wuB,EAAQmkuB,GAGtC,OAFAnkuB,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3BmkuB,EAAgB31wB,EAAMqxwB,YAAYsE,GAC9B31wB,EAAM2xwB,WAAWnguB,EAAQmkuB,GACpBxw4B,EAAMzS,MAERqB,KAAKy1O,IAAIh4D,EAAQmkuB,IAG1Bxj5B,EAAQmw5B,IAAM,SAASzz4B,GAErB,OADAA,EAAImxH,EAAMqxwB,YAAYxi4B,cACLjQ,MACRuG,EAAMzS,MAERqB,KAAKmkG,KAAK,GAAMrpF,EAAIA,GA9wCf,oBAixCd1c,EAAQow5B,QAAU,GAElBpw5B,EAAQow5B,QAAQrG,KAAO,SAASrt4B,EAAGyjL,EAAM6ptB,GAGvC,OAFAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtByjL,EAAOtyD,EAAMqxwB,YAAY/+sB,GACrBtyD,EAAM2xwB,WAAW9i4B,EAAGyjL,GACfntL,EAAMzS,MAEPyp5B,EAAcV,EAAM+G,QAAQpG,IAAIvt4B,EAAGyjL,GAAQmptB,EAAM+G,QAAQ5nM,IAAI/rsB,EAAGyjL,IAG1EngM,EAAQsw5B,KAAO,SAASh2tB,EAAO6vtB,EAAa7quB,EAAOC,GACjD,QAAc5+K,IAAV2+K,EACF,OAAO,EAQT,GANAC,OAAmB5+K,IAAV4+K,EAAuBD,EAAQC,EAExC+a,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7C6vtB,EAAct8wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ454B,IACnD7quB,EAAQzxC,EAAMqxwB,YAAY5/tB,GAC1BC,EAAQ1xC,EAAMqxwB,YAAY3/tB,GACtB1xC,EAAM2xwB,WAAWlltB,EAAO6vtB,EAAa7quB,EAAOC,GAC9C,OAAOvsK,EAAMzS,MAGf,GAAI++K,IAAUC,EACZ,OAAQ+a,EAAMj1K,QAAQi6J,IAAU,EAAK6quB,EAAY7vtB,EAAMj1K,QAAQi6J,IAAU,EAQ3E,IALA,IAAIivH,EAASj0G,EAAMhpL,MAAK,SAAS9G,EAAGC,GAClC,OAAOD,EAAIC,KAETQ,EAAIsjS,EAAO7nS,OACX+R,EAAS,EACJ5Q,EAAI,EAAGA,EAAIoD,EAAGpD,IACjB0mS,EAAO1mS,IAAMy3K,GAASivH,EAAO1mS,IAAM03K,IACrC9mK,GAAU0x4B,EAAY7vtB,EAAMj1K,QAAQkpR,EAAO1mS,MAG/C,OAAO4Q,GAGTzY,EAAQ+h5B,SAAW,GAEnB/h5B,EAAQ+h5B,SAASC,IAAM,SAAS1ntB,EAAOi2tB,GAGrC,GAFAj2tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7Ci2tB,EAAQ1ixB,EAAMqxwB,YAAYqR,GACtB1ixB,EAAM2xwB,WAAWlltB,EAAOi2tB,GAC1B,OAAOv94B,EAAMzS,MAEf,OAAQgw5B,GACN,KAAK,EACH,OAAOvw5B,EAAQ6h5B,WAAWG,IAAI1ntB,EAAO,KACvC,KAAK,EACH,OAAOt6L,EAAQ6h5B,WAAWG,IAAI1ntB,EAAO,IACvC,KAAK,EACH,OAAOt6L,EAAQ6h5B,WAAWG,IAAI1ntB,EAAO,KACvC,QACE,OAAOtnL,EAAM+qG,MAInB/9G,EAAQ+h5B,SAASD,IAAM,SAASxntB,EAAOi2tB,GAGrC,GAFAj2tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7Ci2tB,EAAQ1ixB,EAAMqxwB,YAAYqR,GACtB1ixB,EAAM2xwB,WAAWlltB,EAAOi2tB,GAC1B,OAAOv94B,EAAMzS,MAEf,OAAQgw5B,GACN,KAAK,EACH,OAAOvw5B,EAAQ6h5B,WAAWC,IAAIxntB,EAAO,KACvC,KAAK,EACH,OAAOt6L,EAAQ6h5B,WAAWC,IAAIxntB,EAAO,IACvC,KAAK,EACH,OAAOt6L,EAAQ6h5B,WAAWC,IAAIxntB,EAAO,KACvC,QACE,OAAOtnL,EAAM+qG,MAInB/9G,EAAQww5B,KAAO,GAEfxw5B,EAAQww5B,KAAKC,IAAM,SAASpxuB,EAAQib,EAAO03C,GAGzC,GAFA3yD,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3Bib,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IACzCzsD,EAAM2xwB,WAAWnguB,EAAQib,GAC3B,OAAOtnL,EAAMzS,MAaf,IATA,IAAI+Q,GADJ0gO,EAAQA,IAAS,GACI,SAASxnO,EAAGC,GAC/B,OAAOD,EAAIC,GACT,SAASD,EAAGC,GACd,OAAOA,EAAID,GAIT9D,GAFJ4zL,GAPAA,EAAQzsD,EAAMt9H,QAAQ+pL,IAORhpL,KAAKA,IAEA5K,OACfuT,EAAQ,EACHpS,EAAI,EAAGA,EAAInB,EAAQmB,IACtByyL,EAAMzyL,KAAOw3K,GACfplK,IAIJ,OAAQA,EAAQ,GAAM,EAAIqgL,EAAMj1K,QAAQg6J,GAAUplK,EAAQ,GAAK,EAAIqgL,EAAMj1K,QAAQg6J,GAAU,GAG7Fr/K,EAAQww5B,KAAKhJ,GAAK,SAASnouB,EAAQib,EAAO03C,GAGxC,GAFA3yD,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3Bib,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IACzCzsD,EAAM2xwB,WAAWnguB,EAAQib,GAC3B,OAAOtnL,EAAMzS,MAGf,IAAI+Q,GADJ0gO,EAAQA,IAAS,GACI,SAASxnO,EAAGC,GAC/B,OAAOD,EAAIC,GACT,SAASD,EAAGC,GACd,OAAOA,EAAID,GAGb,OADA8vL,EAAQA,EAAMhpL,KAAKA,IACN+T,QAAQg6J,GAAU,GAGjCr/K,EAAQ0w5B,IAAM,SAASh4W,EAAQ13iB,GAC7B,OAAyB,IAArBuH,UAAU7B,OACLsM,EAAM6ikB,GAGX70kB,EAAQ,EACHgS,EAAM+qG,IAGT26b,aAAkBpyiB,OAA4B,kBAAVtF,EAIpB,IAAlB03iB,EAAOhyiB,OAIJ4i5B,EAAMzovB,IAAI63Y,EAAQ13iB,QAJzB,EAHSgS,EAAMzS,OAUjBP,EAAQ2w5B,KAAO,SAASj4W,GACtB,OAAyB,IAArBnwiB,UAAU7B,OACLsM,EAAM6ikB,GAGTn9B,aAAkBpyiB,MAIF,IAAlBoyiB,EAAOhyiB,OACF,EAGF4i5B,EAAMjglB,KAAKqvO,GAPT1liB,EAAMzS,OAUjBP,EAAQ4w5B,IAAM,SAAS5D,EAAQD,GAG7B,OAFAC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC9CD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC1Cl/wB,EAAM2xwB,WAAWwN,EAAQD,GACpB/54B,EAAMzS,MAERqB,KAAKy1O,IAAIr3O,EAAQ2v5B,QAAQ3C,EAAQD,GAAS,IAGnD/s5B,EAAQ6w5B,KAAO,WACb,IAAIv2tB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAKT,IAHA,IAAI6F,EAAOmptB,EAAMnptB,KAAK7F,GAClBrvL,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACHhn5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBgn5B,GAASjt5B,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAErC,OAAOl1L,EAAI4j5B,IAAU5j5B,EAAI,IAAMA,EAAI,GAAKrJ,KAAKy1O,IAAIiyqB,EAAMwF,MAAMx0tB,GAAO,GAAO,KAG7Et6L,EAAQ6w5B,KAAK/10B,EAAI,WACf,IAAIw/G,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YACjD,GAAI+xL,aAAiB7tL,MACnB,OAAO6tL,EAMT,IAJA,IAAI6F,EAAOmptB,EAAMnptB,KAAK7F,GAClBrvL,EAAIqvL,EAAM5zL,OACVyjK,EAAK,EACLC,EAAK,EACAviK,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBuiK,GAAMxoK,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAChCh2B,GAAMvoK,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAIlC,OADAh2B,GAAUl/J,GADVm/J,GAAUn/J,GAEErJ,KAAKy1O,IAAIltE,EAAI,MAG3BnqK,EAAQ8w5B,MAAQ,SAAS/D,EAAQC,GAG/B,GAFAD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAWuN,EAAQC,GAC3B,OAAOh64B,EAAMzS,MAOf,IALA,IAAI0s5B,EAAQ3D,EAAMnptB,KAAK6stB,GACnBE,EAAQ5D,EAAMnptB,KAAK4stB,GACnB9h5B,EAAI+h5B,EAAOtm5B,OACXq3G,EAAM,EACNovyB,EAAM,EACDtl5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBk2G,IAAQivyB,EAAOnl5B,GAAKol5B,IAAUF,EAAOll5B,GAAKql5B,GAC1CC,GAAOvr5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAKol5B,EAAO,GAErC,OAAOlvyB,EAAMovyB,GAGfnt5B,EAAQ4h5B,MAAQ,SAAStntB,EAAOt1L,GAG9B,OAFAs1L,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7Ct1L,EAAI6oI,EAAMqxwB,YAAYl64B,GAClB6oI,EAAM2xwB,WAAWlltB,EAAOt1L,GACnBs1L,EAEFA,EAAMhpL,MAAK,SAAS9G,EAAGC,GAC5B,OAAOD,EAAIC,KACVzF,EAAI,IAGThF,EAAQ+w5B,YAAc,SAASr04B,EAAGyjL,EAAMkrtB,GAItC,OAHA3u4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtByjL,EAAOtyD,EAAMqxwB,YAAY/+sB,GACzBkrtB,EAAKx9wB,EAAMqxwB,YAAYmM,GACnBx9wB,EAAM2xwB,WAAW9i4B,EAAGyjL,EAAMkrtB,GACrBr44B,EAAMzS,OAEPmc,EAAIyjL,GAAQkrtB,GAGtBrr5B,EAAQqh5B,MAAQ,GAEhBrh5B,EAAQqh5B,MAAMvm0B,EAAI,WAChB,IAAI71E,EAAIjF,EAAQuh5B,IAAIzm0B,EAAEhuE,MAAMjI,KAAM0D,WAC9BkQ,EAAS7W,KAAK8oK,KAAKzlK,GAMvB,OAJIg8C,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQqh5B,MAAM7hvB,EAAI,WAChB,IAAIv6J,EAAIjF,EAAQuh5B,IAAI/hvB,EAAE1yJ,MAAMjI,KAAM0D,WAC9BkQ,EAAS7W,KAAK8oK,KAAKzlK,GAEvB,OAAOwT,GAGTzY,EAAQgx5B,OAAS,WACf,IAAI/r5B,EAAIjF,EAAQix5B,KAAKnk5B,MAAMjI,KAAM0D,WAC7BkQ,EAAS7W,KAAK8oK,KAAKzlK,GAEvB,OAAOwT,GAGTzY,EAAQkx5B,QAAU,WAChB,IAAIjs5B,EAAIjF,EAAQmx5B,MAAMrk5B,MAAMjI,KAAM0D,WAC9BkQ,EAAS7W,KAAK8oK,KAAKzlK,GAMvB,OAJIg8C,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAITzY,EAAQox5B,MAAQ,SAASrE,EAAQC,GAG/B,GAFAD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC1Cn/wB,EAAM2xwB,WAAWuN,EAAQC,GAC3B,OAAOh64B,EAAMzS,MAQf,IANA,IAAI0s5B,EAAQ3D,EAAMnptB,KAAK6stB,GACnBE,EAAQ5D,EAAMnptB,KAAK4stB,GACnB9h5B,EAAI+h5B,EAAOtm5B,OACX2q5B,EAAM,EACNtzyB,EAAM,EACNovyB,EAAM,EACDtl5B,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBwp5B,GAAOzv5B,KAAKy1O,IAAI01qB,EAAOll5B,GAAKql5B,EAAO,GACnCnvyB,IAAQivyB,EAAOnl5B,GAAKol5B,IAAUF,EAAOll5B,GAAKql5B,GAC1CC,GAAOvr5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAKol5B,EAAO,GAErC,OAAOrr5B,KAAK8oK,MAAM2mvB,EAAMtzyB,EAAMA,EAAMovyB,IAAQli5B,EAAI,KAGlDjL,EAAQsx5B,UAAY,SAAS54W,GAC3B,OAAKA,EAGE4wW,EAAM58Z,UAAUgsD,GAFd1liB,EAAM6ikB,IAKjB71kB,EAAQ0/J,EAAIhvC,EAAKgvC,EAEjB1/J,EAAQ0/J,EAAEqqvB,KAAO,SAASrt4B,EAAG604B,EAAIvH,GAG/B,OAFAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtB604B,EAAK1jxB,EAAMqxwB,YAAYqS,GACnB1jxB,EAAM2xwB,WAAW9i4B,EAAG604B,GACfv+4B,EAAMzS,MAEPyp5B,EAAcV,EAAMkI,SAASvH,IAAIvt4B,EAAG604B,GAAMjI,EAAMkI,SAAS/oM,IAAI/rsB,EAAG604B,IAG1Evx5B,EAAQ0/J,EAAEqqvB,KAAK,MAAQ,SAASrt4B,EAAG604B,GACjC,OAAyB,IAArBhp5B,UAAU7B,OACLsM,EAAM6ikB,GAGXn5jB,EAAI,GAAK604B,EAAK,EACTv+4B,EAAM+qG,IAGG,kBAANrhG,GAAkC,kBAAP604B,EAC9Bv+4B,EAAMzS,MAG2B,GAAlC,EAAI+o5B,EAAMkI,SAASvH,IAAIvt4B,EAAI604B,KAGrCvx5B,EAAQ0/J,EAAEqqvB,KAAK77E,GAAK,SAASxxzB,EAAG604B,GAC9B,OAAyB,IAArBhp5B,UAAU7B,OACLsM,EAAM6ikB,GAGXn5jB,EAAI,GAAK604B,EAAK,EACTv+4B,EAAM+qG,IAGG,kBAANrhG,GAAkC,kBAAP604B,EAC9Bv+4B,EAAMzS,MAGR,EAAI+o5B,EAAMkI,SAASvH,IAAIvt4B,EAAI604B,IAGpCvx5B,EAAQ0/J,EAAEwqvB,IAAM,SAASC,EAAaoH,GAGpC,OAFApH,EAAct8wB,EAAMqxwB,YAAYiL,GAChCoH,EAAK1jxB,EAAMqxwB,YAAYqS,GACnB1jxB,EAAM2xwB,WAAW2K,EAAaoH,GACzBv+4B,EAAMzS,MAER+o5B,EAAMkI,SAAS34W,IAAIsxW,EAAaoH,IAGzCvx5B,EAAQ0/J,EAAEwqvB,IAAI,MAAQ,SAASC,EAAaoH,GAG1C,OAFApH,EAAct8wB,EAAMqxwB,YAAYiL,GAChCoH,EAAK1jxB,EAAMqxwB,YAAYqS,GACnBpH,GAAe,GAAKA,EAAc,GAAKoH,EAAK,EACvCv+4B,EAAM+qG,IAEX8vB,EAAM2xwB,WAAW2K,EAAaoH,GACzBv+4B,EAAMzS,MAERqB,KAAKijB,IAAIyk4B,EAAMkI,SAAS34W,IAAIsxW,EAAY,EAAGoH,KAKpDvx5B,EAAQ0/J,EAAE0+V,KAAO,SAAS4uZ,EAAQD,GAGhC,GAFAC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC9CD,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC1Cl/wB,EAAM2xwB,WAAWwN,EAAQD,GAC3B,OAAO/54B,EAAMzS,MAGf,IAIIsH,EAJA4p5B,EAASnI,EAAMnptB,KAAK6stB,GACpB0E,EAASpI,EAAMnptB,KAAK4stB,GACpB4E,EAAM,EACNC,EAAM,EAGV,IAAK/p5B,EAAI,EAAGA,EAAIml5B,EAAOtm5B,OAAQmB,IAC7B8p5B,GAAO/v5B,KAAKy1O,IAAI21qB,EAAOnl5B,GAAK4p5B,EAAQ,GAEtC,IAAK5p5B,EAAI,EAAGA,EAAIkl5B,EAAOrm5B,OAAQmB,IAC7B+p5B,GAAOhw5B,KAAKy1O,IAAI01qB,EAAOll5B,GAAK6p5B,EAAQ,GAGtCC,GAAa3E,EAAOtm5B,OAAO,EAC3Bkr5B,GAAa7E,EAAOrm5B,OAAO,EAE3B,IAAIkqB,EAAIhvB,KAAKijB,IAAI4s4B,EAASC,GAAU9v5B,KAAK8oK,KAAKinvB,EAAI3E,EAAOtm5B,OAASkr5B,EAAI7E,EAAOrm5B,QAE7E,OAAO1G,EAAQ0/J,EAAEqqvB,KAAK,MAAMn53B,EAAGo83B,EAAOtm5B,OAAOqm5B,EAAOrm5B,OAAO,IAG7D1G,EAAQ6x5B,MAAQ,SAAS9E,EAAQC,EAAQ8E,GAIvC,GAHA/E,EAASl/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQw84B,IAC9CC,EAASn/wB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQy84B,IAC9C8E,EAAajkxB,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQuh5B,IAC9CjkxB,EAAM2xwB,WAAWuN,EAAQC,EAAQ8E,GACnC,OAAO9+4B,EAAMzS,MAEf,IAAIwx5B,EAAS/x5B,EAAQ+u5B,OAAOhC,EAAQC,GAChC/14B,EAAI864B,EAAO,GACXtn5B,EAAIsn5B,EAAO,GACXt54B,EAAS,GAMb,OAJAq54B,EAAWvg5B,SAAQ,SAASmL,GAC1BjE,EAAOxH,KAAKgG,EAAIyF,EAAIjS,MAGfgO,GAGTzY,EAAQgy5B,SAAW,SAAS13tB,EAAOsrJ,GAGjC,GAFAtrJ,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7CsrJ,EAAU/3M,EAAMqxwB,YAAYt5jB,GACxB/3M,EAAM2xwB,WAAWlltB,EAAOsrJ,GAC1B,OAAO5yU,EAAMzS,MAEf,IAAI8iI,EAAOgmxB,EAAS9E,MAAMjqtB,EAAM5zL,OAASk/U,EAAS,GAAK,EACvD,OAAO0jkB,EAAMnptB,KAAKtyD,EAAM0uD,QAAQ1uD,EAAM1kH,KAAKmxK,EAAMhpL,MAAK,SAAS9G,EAAGC,GAChE,OAAOD,EAAIC,KACT44H,GAAOA,KAGbrjI,EAAQuh5B,IAAM,GAEdvh5B,EAAQuh5B,IAAIzm0B,EAAI,WAMd,IALA,IAIIriE,EAJA6hL,EAAQzsD,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YACpC0C,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACR1utB,EAAOngM,EAAQgh5B,QAAQ1mtB,GAElBzyL,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBgn5B,GAASjt5B,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAQrC,OANA1nL,EAASo24B,EAAQ5j5B,EAEbg2C,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQuh5B,IAAI/hvB,EAAI,WAKd,IAJA,IAAI86B,EAAQzsD,EAAM4gB,QAAQ5gB,EAAMt9H,QAAQhI,YACpC0C,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACR1utB,EAAOngM,EAAQgh5B,QAAQ1mtB,GAClBzyL,EAAI,EAAGA,EAAIoD,EAAGpD,IACrBgn5B,GAASjt5B,KAAKy1O,IAAI/8C,EAAMzyL,GAAKs4L,EAAM,GAErC,OAAO0utB,GAAS5j5B,EAAI,IAGtBjL,EAAQix5B,KAAO,WAMb,IALA,IAAI32tB,EAAQzsD,EAAMt9H,QAAQhI,WACtB0C,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACR504B,EAAQ,EACRkmL,EAAOngM,EAAQwp5B,SAASlvtB,GACnBzyL,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CAC1B,IAAIg3R,EAAKvkG,EAAMzyL,GAEbgn5B,GADgB,kBAAPhwnB,EACAj9R,KAAKy1O,IAAIwnD,EAAK1+F,EAAM,IACb,IAAP0+F,EACAj9R,KAAKy1O,IAAI,EAAIl3C,EAAM,GAEnBv+L,KAAKy1O,IAAI,EAAIl3C,EAAM,GAGnB,OAAP0+F,GACF5kR,IAGJ,OAAO404B,GAAS504B,EAAQ,IAG1Bja,EAAQmx5B,MAAQ,WAOd,IANA,IAKI144B,EALA6hL,EAAQzsD,EAAMt9H,QAAQhI,WACtB0C,EAAIqvL,EAAM5zL,OACVmo5B,EAAQ,EACR504B,EAAQ,EACRkmL,EAAOngM,EAAQwp5B,SAASlvtB,GAEnBzyL,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CAC1B,IAAIg3R,EAAKvkG,EAAMzyL,GAEbgn5B,GADgB,kBAAPhwnB,EACAj9R,KAAKy1O,IAAIwnD,EAAK1+F,EAAM,IACb,IAAP0+F,EACAj9R,KAAKy1O,IAAI,EAAIl3C,EAAM,GAEnBv+L,KAAKy1O,IAAI,EAAIl3C,EAAM,GAGnB,OAAP0+F,GACF5kR,IASJ,OANAxB,EAASo24B,EAAQ504B,EAEbgnC,MAAMxoC,KACRA,EAASzF,EAAM+qG,KAGVtlG,GAGTzY,EAAQiy5B,QAAU,GAElBjy5B,EAAQiy5B,QAAQlI,KAAO,SAASrt4B,EAAG66e,EAAO2uQ,EAAM8jJ,GAI9C,OAHAtt4B,EAAImxH,EAAMqxwB,YAAYxi4B,GACtB66e,EAAQ1pX,EAAMqxwB,YAAY3nZ,GAC1B2uQ,EAAOr4nB,EAAMqxwB,YAAYh5I,GACrBr4nB,EAAM2xwB,WAAW9i4B,EAAG66e,EAAO2uQ,GACtBlzvB,EAAMzS,MAEPyp5B,EAAc,EAAIpo5B,KAAKmkG,KAAKnkG,KAAKy1O,IAAI36N,EAAIwpvB,EAAM3uQ,IAAU31f,KAAKy1O,IAAI36N,EAAG66e,EAAQ,GAAK31f,KAAKmkG,KAAKnkG,KAAKy1O,IAAI36N,EAAIwpvB,EAAM3uQ,IAAUA,EAAQ31f,KAAKy1O,IAAI6uhB,EAAM3uQ,IAG1Jv3f,EAAQs/J,EAAI,GAEZt/J,EAAQs/J,EAAE8+V,KAAO,SAAS9jU,EAAO59K,EAAG2u4B,GAGlC,GAFA/wtB,EAAQzsD,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ+pL,IAC7C59K,EAAImxH,EAAMqxwB,YAAYxi4B,GAClBmxH,EAAM2xwB,WAAWlltB,EAAO59K,GAC1B,OAAO1J,EAAMzS,MAGf8q5B,EAAKA,GAAMrr5B,EAAQqh5B,MAAM7hvB,EAAE86B,GAC3B,IAAIrvL,EAAIqvL,EAAM5zL,OACd,OAAO,EAAI1G,EAAQor5B,KAAK5rvB,EAAEuqvB,MAAM/p5B,EAAQgh5B,QAAQ1mtB,GAAS59K,IAAM2u4B,EAAKzp5B,KAAK8oK,KAAKz/J,KAAK,KAM9E,SAASlL,EAAQC,EAASu+4B,GAEjC,IAAI1wwB,EAAQ0wwB,EAAoB,GAC5Bvr4B,EAAQur4B,EAAoB,GAGhCv+4B,EAAQg+d,IAAM,WACZ,MAAM,IAAIvxd,MAAM,2BAIlBzM,EAAQky5B,SAAW,WACjB,MAAM,IAAIzl5B,MAAM,gCAGlBzM,EAAQmy5B,KAAO,SAAS9yuB,GAEtB,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF3rK,OAAO6tJ,aAAa8d,IAG7Br/K,EAAQoy5B,MAAQ,SAAS1hyB,GAGvB,OAFAA,EAAOA,GAAQ,IAEHjzC,QADH,aACe,KAG1Bz9E,EAAQqy5B,KAAO,SAAS3hyB,GAEtB,IAAIj4G,GADJi4G,EAAOA,GAAQ,IACG1jH,WAAW,GAK7B,OAHIi0C,MAAMxoC,KACRA,EAASzF,EAAM6ikB,IAEVp9jB,GAGTzY,EAAQsy5B,YAAc,WAIpB,IAHA,IAAIzi4B,EAAOg+G,EAAMt9H,QAAQhI,WAErBgq5B,EAAY,GACRA,EAAY1i4B,EAAKxK,SAAQ,KAAU,GACzCwK,EAAK0i4B,GAAa,OAIpB,IADA,IAAIC,EAAa,GACTA,EAAa3i4B,EAAKxK,SAAQ,KAAW,GAC3CwK,EAAK2i4B,GAAc,QAGrB,OAAO3i4B,EAAKvJ,KAAK,KAInBtmB,EAAQyy5B,KAAO,WACb,MAAM,IAAIhm5B,MAAM,4BAIlBzM,EAAQ0y5B,OAAS,WACf,MAAM,IAAIjm5B,MAAM,8BAGlBzM,EAAQ2y5B,MAAQ,SAASC,EAAOC,GAC9B,OAAyB,IAArBtq5B,UAAU7B,OACLsM,EAAM6ikB,GAER+8U,IAAUC,GAGnB7y5B,EAAQ8y5B,KAAO,SAASC,EAAWC,EAAalxyB,GAC9C,OAAIv5G,UAAU7B,OAAS,EACdsM,EAAM6ikB,IAEf/zd,OAAyBnhH,IAAbmhH,EAA0B,EAAIA,EACnCkxyB,EAAcA,EAAY3t4B,QAAQ0t4B,EAAWjxyB,EAAW,GAAK,EAAI,OAI1E9hH,EAAQiz5B,MAAQ,WACd,MAAM,IAAIxm5B,MAAM,6BAGlBzM,EAAQkz5B,UAAY,SAAU3y5B,GAC5B,IAAIkY,EAAS,GAeb,OAbIlY,IACEA,aAAiB+F,MACnB/F,EAAMgR,SAAQ,SAAU2vR,GACP,KAAXzoR,IACFA,GAAU,MAEZA,GAAWyoR,EAAKzjN,QAAQ,iBAAkB,OAG5ChlE,EAASlY,EAAMk9E,QAAQ,iBAAkB,KAItChlE,GAGTzY,EAAQyhqB,KAAO,SAAS/wiB,EAAM2uD,GAG5B,OAFAA,OAAqB1+K,IAAX0+K,EAAwB,EAAIA,GACtCA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,OAAyB,kBAATikH,EAC7B19G,EAAMzS,MAERmwH,EAAOA,EAAKp5C,UAAU,EAAG+nG,GAAU,MAG5Cr/K,EAAQmz5B,IAAM,SAASziyB,GACrB,OAAyB,IAArBnoH,UAAU7B,OACLsM,EAAMA,MAGK,kBAAT09G,EACFA,EAAOA,EAAKhqH,OAAS,EAG1BgqH,EAAKhqH,OACAgqH,EAAKhqH,OAGPsM,EAAMzS,OAGfP,EAAQoz5B,MAAQ,SAAS1iyB,GACvB,MAAoB,kBAATA,EACF19G,EAAMzS,MAERmwH,EAAOA,EAAKzyE,cAAgByyE,GAGrC1wH,EAAQqz5B,IAAM,SAAS3iyB,EAAM9rG,EAAOy6J,GAGlC,GAFAz6J,EAAQipH,EAAMqxwB,YAAYt63B,GAC1By6J,EAASxxC,EAAMqxwB,YAAY7/tB,GACvBxxC,EAAM2xwB,WAAW563B,EAAOy6J,IAA2B,kBAAT3uD,EAC5C,OAAO2uD,EAGT,IAAIj+K,EAAQwjB,EAAQ,EAChBvjB,EAAMD,EAAQi+K,EAElB,OAAO3uD,EAAKp5C,UAAUl2E,EAAOC,IAI/BrB,EAAQsz5B,YAAc,SAAU5iyB,EAAM6iyB,EAAmBC,GAGvD,OAFAD,EAAkD,qBAAtBA,EAAqC,IAAMA,EACvEC,EAA8C,qBAApBA,EAAmC,IAAMA,EAC5Dht5B,OAAOkqH,EAAKjzC,QAAQ810B,EAAmB,KAAK910B,QAAQ+10B,EAAiB,MAI9Exz5B,EAAQyz5B,SAAW,WACjB,MAAM,IAAIhn5B,MAAM,gCAGlBzM,EAAQqzf,OAAS,SAAS3iY,GACxB,YAAa/vH,IAAT+vH,GAAsC,IAAhBA,EAAKhqH,OACtBsM,EAAMzS,QAEF,IAATmwH,IACFA,EAAO,SAEI,IAATA,IACFA,EAAO,SAELzvE,MAAMyvE,IAAyB,kBAATA,EACjB19G,EAAMzS,OAEK,kBAATmwH,IACTA,EAAO,GAAKA,GAGPA,EAAKjzC,QAAQ,UAAU,SAASi20B,GACrC,OAAOA,EAAIvmwB,OAAO,GAAGje,cAAgBwkxB,EAAIlgyB,OAAO,GAAGv1E,oBAIvDj+C,EAAQ2z5B,aAAe,SAAUjjyB,EAAMkjyB,GACrC,GAAIrr5B,UAAU7B,OAAS,EACrB,OAAOsM,EAAM6ikB,GAEf,IAAIziiB,EAAQs9E,EAAKt9E,MAAM,IAAIuM,OAAOi02B,IAClC,OAAOxg3B,EAASA,EAAMA,EAAM1sC,OAAS,EAAI0sC,EAAM1sC,OAAS,EAAI,GAAM,MAGpE1G,EAAQ6z5B,WAAa,SAAUnjyB,EAAMkjyB,EAAoBE,GACvD,GAAIvr5B,UAAU7B,OAAS,EACrB,OAAOsM,EAAM6ikB,GAEf,IAAIziiB,EAAQs9E,EAAKt9E,MAAM,IAAIuM,OAAOi02B,IAClC,OAAOE,EAAO1g3B,IAAUA,GAG1BpzC,EAAQ+z5B,aAAe,SAAUrjyB,EAAMkjyB,EAAoB1nsB,GACzD,OAAI3jN,UAAU7B,OAAS,EACdsM,EAAM6ikB,GAERnld,EAAKjzC,QAAQ,IAAI99B,OAAOi02B,GAAqB1nsB,IAGtDlsN,EAAQw3E,QAAU,SAASk5C,EAAM5O,EAAUp7G,EAAQst5B,GAGjD,OAFAlyyB,EAAW+rB,EAAMqxwB,YAAYp9xB,GAC7Bp7G,EAASmnI,EAAMqxwB,YAAYx44B,GACvBmnI,EAAM2xwB,WAAW19xB,EAAUp7G,IACb,kBAATgqH,GACa,kBAAbsjyB,EACAhh5B,EAAMzS,MAERmwH,EAAK8C,OAAO,EAAG1R,EAAW,GAAKkyyB,EAAWtjyB,EAAK8C,OAAO1R,EAAW,EAAIp7G,IAG9E1G,EAAQi05B,KAAO,SAASvjyB,EAAM2uD,GAE5B,OADAA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF,IAAI/4K,MAAM+4K,EAAS,GAAG/4J,KAAKoqG,IAGpC1wH,EAAQ2hqB,MAAQ,SAASjxiB,EAAM2uD,GAG7B,OAFAA,OAAqB1+K,IAAX0+K,EAAwB,EAAIA,GACtCA,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACb4yK,EAEF3uD,EAAOA,EAAKp5C,UAAUo5C,EAAKhqH,OAAS24K,GAAUrsK,EAAM6ikB,IAG7D71kB,EAAQk05B,OAAS,SAASnB,EAAWC,EAAalxyB,GAChD,IAAIqyyB,EACJ,MAAyB,kBAAdpB,GAAiD,kBAAhBC,EACnChg5B,EAAMzS,OAEfuhH,OAAyBnhH,IAAbmhH,EAA0B,EAAIA,EAEtB,KADpBqyyB,EAAUnB,EAAY/02B,cAAc54B,QAAQ0t4B,EAAU902B,cAAe6jE,EAAW,GAAG,GAC5D9uG,EAAMzS,MAAM4z5B,IAGrCn05B,EAAQo05B,MAAQ,SAAU1jyB,EAAM9pG,GAC9B,OAAO8pG,EAAK9sE,MAAMh9B,IAGpB5mB,EAAQq05B,WAAa,SAAS3jyB,EAAM4jyB,EAAUN,EAAUO,GACtD,GAAIhs5B,UAAU7B,OAAS,EACrB,OAAOsM,EAAM6ikB,GAEf,KAAKnld,GAAS4jyB,GAAaN,GACzB,OAAOtjyB,EACF,QAAmB/vH,IAAf4z5B,EACT,OAAO7jyB,EAAKjzC,QAAQ,IAAI99B,OAAO202B,EAAU,KAAMN,GAI/C,IAFA,IAAIhz5B,EAAQ,EACR6G,EAAI,EACD6oH,EAAKrrG,QAAQiv4B,EAAUtz5B,GAAS,GAGrC,GAFAA,EAAQ0vH,EAAKrrG,QAAQiv4B,EAAUtz5B,EAAQ,KACvC6G,IACU0s5B,EACR,OAAO7jyB,EAAKp5C,UAAU,EAAGt2E,GAASgz5B,EAAWtjyB,EAAKp5C,UAAUt2E,EAAQsz5B,EAAS5t5B,SAMrF1G,EAAQ0/J,EAAI,SAASn/J,GACnB,MAAyB,kBAAVA,EAAsBA,EAAQ,IAI/CP,EAAQ2+e,KAAO,WACb,MAAM,IAAIlye,MAAM,4BAGlBzM,EAAQw05B,KAAO,SAAS9jyB,GACtB,MAAoB,kBAATA,EACF19G,EAAMzS,MAERmwH,EAAKjzC,QAAQ,MAAO,KAAK4lD,QAGlCrjI,EAAQy05B,QAAUz05B,EAAQmy5B,KAE1Bny5B,EAAQ005B,QAAU105B,EAAQqy5B,KAE1Bry5B,EAAQ205B,MAAQ,SAASjkyB,GACvB,MAAoB,kBAATA,EACF19G,EAAMzS,MAERmwH,EAAKwe,eAIdlvI,EAAQ405B,MAAQ,WACd,MAAM,IAAIno5B,MAAM,8BAMX,SAAS1M,EAAQC,GAExB,IACI605B,EAAe,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,MAC3CC,EAAsB,WACtB5M,EAAqB,UACrB6M,EAAmB,CAACD,EAAqB5M,GAY7C,SAASD,EAAY1n5B,EAAOwE,GAC1B,IAAwC,IAApCgw5B,EAAiB1v4B,QAAQtgB,GAC3B,MAAM,IAAI0H,MAAM,2BAA6B1H,GAG/C,MAAO,CACLxE,MAAOA,EACPwE,KAAMA,GA6EV,SAASiw5B,EAAcv3qB,GAIrB,IAHA,IAAIw3qB,EAAe,GACfC,EAAiB,GAEZrt5B,EAAI,EAAGA,EAAI41O,EAAO/2O,OAAQmB,IAAK,CACtC,IAAIi9F,EAAQ24I,EAAO51O,GAET,IAANA,GAAWgt5B,EAAaxv4B,QAAQy/E,IAAU,EAC5CowzB,EAAejk5B,KAAKg34B,EAAYnjzB,EAAOgwzB,IAEvCG,GAAgBnwzB,EAYpB,OARImwzB,EAAavu5B,OAAS,GACxBwu5B,EAAejk5B,KAAKg34B,EAlFxB,SAAgC1n5B,GAC9B,MAAqB,kBAAVA,GAIP,gBAAgBq/C,KAAKr/C,KACvBA,GAAgC,IAAxBA,EAAM8kB,QAAQ,KAAco7B,SAASlgD,EAAO,IAAMi9E,WAAWj9E,IAJ9DA,EAgFyB405B,CAAuBF,GAAe/M,IAGpEgN,EAAexu5B,OAAS,GAAKwu5B,EAAe,GAAGnw5B,OAAS+v5B,GAC1DI,EAAeh34B,QAAQ+p4B,EAvHL,IAuHkC6M,IAG/CI,EApHTl15B,EAAQ805B,oBAAsBA,EAC9B905B,EAAQko5B,mBAAqBA,EAkL7Blo5B,EAAQqhD,MAAQ,SAAS6igB,GACvB,OAAO8wW,EAvIT,SAA4B9wW,GAO1B,IANA,IAAIkxW,EAAmBlxW,EAAWx9iB,OAC9B+2O,EAAS,GACTy4d,EAAc,EACdvkS,EAAiB,GACjB0jf,EAAkB,GAEfn/M,EAAck/M,GAAkB,CACrC,IAAI/4F,EAAOn4Q,EAAW/2Z,OAAO+ojB,GAE7B,OAAQmmH,GACN,IAAK,IACL,IAAK,IACL,IAAK,IACHg5F,GAAoCh5F,EAEhC1qZ,EAAejra,OAAS,IAC1B+2O,EAAOxsO,KAAK0ga,GACZA,EAAiB,IAErB,MACA,QACM0jf,EAAgB3u5B,OAAS,IAC3B+2O,EAAOxsO,KAAKok5B,GACZA,EAAkB,IAGpB1jf,GAAkC0qZ,EAGtCnmH,IAUF,OAPIvkS,EAAejra,OAAS,GAC1B+2O,EAAOxsO,KAAK0ga,GAEV0jf,EAAgB3u5B,OAAS,GAC3B+2O,EAAOxsO,KAAKok5B,GAGP53qB,EA+Fc63qB,CAAmBpxW,KAE1ClkjB,EAAQio5B,YAAcA,EACtBjo5B,EAAQmo5B,QA1DR,SAA2B1qqB,GAIzB,IAHA,IACIvtD,EADAlgL,EAAS,GAGJnI,EAAI,EAAGA,EAAI41O,EAAO/2O,OAAQmB,IAAK,CACtC,IAAIi9F,EAAQ24I,EAAO51O,GAEnB,OAAQi9F,EAAM//F,MACZ,KAAK+v5B,EACH5kuB,EAAWprF,EAAMvkG,MACnB,MACA,KAAK2n5B,EACHl44B,EAAOiB,KAAK6zF,EAAMvkG,QAKxB,OAUF,SAAkByP,EAAQkgL,GACxB,IAAIz3K,GAAS,EAEb,OAAQy3K,GACN,IAAK,IACHz3K,EAASzI,EAAO,GAAKA,EAAO,GAC5B,MACF,IAAK,KACHyI,EAASzI,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,IACHyI,EAASzI,EAAO,GAAKA,EAAO,GAC5B,MACF,IAAK,KACHyI,EAASzI,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,IACHyI,EAASzI,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,KACHyI,EAASzI,EAAO,IAAMA,EAAO,GAIjC,OAAOyI,EAlCAwpL,CAASjyL,EAAQkgL,KA8CnB,SAASnwL,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAGhCv+4B,EAAQu15B,KAAO,WACb,MAAM,IAAI9o5B,MAAM,4BAGlBzM,EAAQwoV,MAAQ,GAChBxoV,EAAQwoV,MAAM2qK,KAAO,SAASqia,GAC5B,OAAQA,GACN,KAAKxi5B,EAAMwr4B,IAAK,OAAO,EACvB,KAAKxr4B,EAAMyr4B,KAAM,OAAO,EACxB,KAAKzr4B,EAAMzS,MAAO,OAAO,EACzB,KAAKyS,EAAM1S,IAAK,OAAO,EACvB,KAAK0S,EAAMK,KAAM,OAAO,EACxB,KAAKL,EAAM+qG,IAAK,OAAO,EACvB,KAAK/qG,EAAM6ikB,GAAI,OAAO,EACtB,KAAK7ikB,EAAM6sC,KAAM,OAAO,EAE1B,OAAO7sC,EAAM6ikB,IAIf71kB,EAAQy15B,KAAO,WACb,MAAM,IAAIhp5B,MAAM,4BAGlBzM,EAAQ015B,QAAU,SAASn15B,GACzB,OAAiB,OAAVA,GAGTP,EAAQ215B,SAAW,SAAUt2uB,GAC3B,MAAQ,eAAgBz/H,KAAKy/H,IAG/Br/K,EAAQ415B,MAAQ,SAASr15B,GACvB,MAAQ,CAACyS,EAAMzS,MAAOyS,EAAM1S,IAAK0S,EAAMyr4B,KAAMzr4B,EAAM+qG,IAAK/qG,EAAMK,KAAML,EAAMwr4B,KAAMn53B,QAAQ9kB,IAAU,GAC9E,kBAAVA,IAAuB0gD,MAAM1gD,KAAW0lG,SAAS1lG,KAG7DP,EAAQ615B,QAAU,SAASt15B,GACzB,OAAOP,EAAQ415B,MAAMr15B,IAAUA,IAAUyS,EAAM6ikB,IAGjD71kB,EAAQ815B,OAAS,SAASz2uB,GACxB,QAAuC,EAA/Bz9K,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,MAI9Br/K,EAAQ+15B,UAAY,WAClB,MAAM,IAAItp5B,MAAM,iCAGlBzM,EAAQg25B,UAAY,SAASz15B,GAC3B,OAAiB,IAAVA,IAA4B,IAAVA,GAG3BP,EAAQi25B,KAAO,SAAS115B,GACtB,OAAOA,IAAUyS,EAAM6ikB,IAGzB71kB,EAAQk25B,UAAY,SAAS315B,GAC3B,MAAyB,kBAAXA,GAGhBP,EAAQ4o5B,SAAW,SAASro5B,GAC1B,MAAyB,kBAAXA,IAAwB0gD,MAAM1gD,IAAU0lG,SAAS1lG,IAGjEP,EAAQm25B,MAAQ,SAAS92uB,GACvB,SAAuC,EAA/Bz9K,KAAKwjB,MAAMxjB,KAAKijB,IAAIw6J,MAI9Br/K,EAAQo25B,MAAQ,WACd,MAAM,IAAI3p5B,MAAM,6BAGlBzM,EAAQq25B,OAAS,SAAS915B,GACxB,MAAyB,kBAAXA,GAGhBP,EAAQ0+J,EAAI,SAASn+J,GACnB,OAAIsE,KAAK+j5B,SAASro5B,GACTA,EAELA,aAAiBqyB,KACZryB,EAAMsyB,WAED,IAAVtyB,EACK,GAEK,IAAVA,EACK,EAELsE,KAAKgx5B,QAAQt15B,GACRA,EAEF,GAGTP,EAAQs25B,GAAK,WACX,OAAOtj5B,EAAM6ikB,IAKf71kB,EAAQu25B,MAAQ,WACd,MAAM,IAAI9p5B,MAAM,6BAIlBzM,EAAQw25B,OAAS,WACf,MAAM,IAAI/p5B,MAAM,8BAGlBzM,EAAQmzf,KAAO,SAAS5yf,GACtB,OAAIsE,KAAK+j5B,SAASro5B,GACT,EAELsE,KAAKwx5B,OAAO915B,GACP,EAELsE,KAAKmx5B,UAAUz15B,GACV,EAELsE,KAAKgx5B,QAAQt15B,GACR,GAEL+F,MAAMC,QAAQhG,GACT,QADT,IAQK,SAASR,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5B1wwB,EAAQ0wwB,EAAoB,GAE5Be,EAAQ,IAAI1s3B,KAAKA,KAAK6uN,IAAI,KAAM,EAAG,IACnCg1qB,EAAc,MAChB915B,EACA,EACA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEE+15B,EAAa,CACf,GACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAEjBC,EAAgB,CAClB,GACA,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,QACJh25B,OACAA,OACAA,EAAW,CAAC,EAAG,GACf,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,IA+ZN,SAASo6O,EAAWC,GAClB,OAA4C,IAArC,IAAIpoN,KAAKooN,EAAM,EAAG,IAAIwR,WAI/B,SAASoqqB,EAAYC,EAAYC,GAC/B,OAAOl15B,KAAKqjB,MAAM6x4B,EAAWD,GAAc,IAAO,GAAK,GAAK,IAsE9D,SAASE,EAAOnmyB,GACd,IAAIomyB,EAASpmyB,GAAQ,WAAiB,EAAI,EAE1C,OAAOhvH,KAAKqjB,MAAM2rG,EAAO0uxB,GAAS,OAAY0X,EA3ehDh35B,EAAQk+O,KAAO,SAASlD,EAAMQ,EAAO8I,GAiBnC,OAdAtJ,EAAOntG,EAAMqxwB,YAAYlkqB,GACzBQ,EAAQ3tG,EAAMqxwB,YAAY1jqB,GAC1B8I,EAAMz2G,EAAMqxwB,YAAY56pB,GAEpBz2G,EAAM2xwB,WAAWxkqB,EAAMQ,EAAO8I,GACvBtxO,EAAMzS,MAENy6O,EAAO,GAAKQ,EAAQ,GAAK8I,EAAM,EAC/BtxO,EAAM+qG,IAGN,IAAInrF,KAAKooN,EAAMQ,EAAQ,EAAG8I,IAMvCtkP,EAAQi35B,UAAY,SAASC,GAC3B,IACItmyB,EADAy7N,EAAW,EAGf,MAAyB,kBAAd6qkB,EACFlk5B,EAAMzS,OAGfqwH,EAAOh+F,KAAKyuB,MAAM612B,GAEdj22B,MAAM2vE,GACD59G,EAAMzS,OAGXqwH,IAAS,aACXy7N,EAAW,GAGNzqV,KAAKqjB,MAAM2rG,EAAO0uxB,GAAS,OAAYjzjB,KAGhDrsV,EAAQm35B,IAAM,SAASC,GACrB,IAAIxmyB,EAAOid,EAAMvuB,UAAU83yB,GAC3B,OAAIxmyB,aAAgBnkH,MACXmkH,EAGFA,EAAK67H,WAGdzsP,EAAQq35B,KAAO,SAASP,EAAUD,GAIhC,OAHAC,EAAWjpxB,EAAMvuB,UAAUw3yB,GAC3BD,EAAahpxB,EAAMvuB,UAAUu3yB,GAEzBC,aAAoBrq5B,MACfqq5B,EAELD,aAAsBpq5B,MACjBoq5B,EAGFE,EAAOD,GAAYC,EAAOF,IAGnC725B,EAAQs35B,QAAU,SAAST,EAAYC,EAAU5qzB,GAK/C,GAJAA,EAAS2hC,EAAMoxwB,UAAU/yyB,GACzB2qzB,EAAahpxB,EAAMvuB,UAAUu3yB,GAC7BC,EAAWjpxB,EAAMvuB,UAAUw3yB,GAEvBD,aAAsBpq5B,MACxB,OAAOoq5B,EAET,GAAIC,aAAoBrq5B,MACtB,OAAOqq5B,EAET,GAAI5qzB,aAAkBz/F,MACpB,OAAOy/F,EAET,IAEIm/yB,EAAIkM,EAFJt40B,EAAK430B,EAAWrqqB,WAChBgrqB,EAAKV,EAAStqqB,WAGlB,GAAItgJ,EACFm/yB,EAA8B,KAAzBwL,EAAWpqqB,UAAmB,GAAKoqqB,EAAWpqqB,UACnD8qqB,EAA4B,KAAvBT,EAASrqqB,UAAmB,GAAKqqqB,EAASrqqB,cAC1C,CACL,IAAIgrqB,EAAM,IAAI7k4B,KAAKik4B,EAAWv1qB,cAAeriK,EAAK,EAAG,GAAGwtK,UACpDirqB,EAAM,IAAI9k4B,KAAKkk4B,EAASx1qB,cAAek2qB,EAAK,EAAG,GAAG/qqB,UACtD4+pB,EAAKwL,EAAWpqqB,YAAcgrqB,EAAM,GAAKZ,EAAWpqqB,UAChDqqqB,EAASrqqB,YAAcirqB,EACrBrM,EAAK,IACPmM,IACAD,EAAK,GAELA,EAAK,GAGPA,EAAKT,EAASrqqB,UAIlB,OAAO,KAAOqqqB,EAASx1qB,cAAgBu1qB,EAAWv1qB,eAChD,IAAMk2qB,EAAKv40B,IAAOs40B,EAAKlM,IAG3Brr5B,EAAQ235B,MAAQ,SAASd,EAAYj4qB,GAGnC,OAFAi4qB,EAAahpxB,EAAMvuB,UAAUu3yB,cAEHpq5B,MACjBoq5B,EAEL512B,MAAM29L,GACD5rO,EAAMzS,OAEfq+O,EAASn+L,SAASm+L,EAAQ,IAC1Bi4qB,EAAW12qB,SAAS02qB,EAAWrqqB,WAAa5N,GAErCm4qB,EAAOF,KAGhB725B,EAAQ435B,QAAU,SAASf,EAAYj4qB,GAGrC,OAFAi4qB,EAAahpxB,EAAMvuB,UAAUu3yB,cAEHpq5B,MACjBoq5B,EAEL512B,MAAM29L,GACD5rO,EAAMzS,OAEfq+O,EAASn+L,SAASm+L,EAAQ,IAEnBm4qB,EAAO,IAAInk4B,KAAKik4B,EAAWv1qB,cAAeu1qB,EAAWrqqB,WAAa5N,EAAS,EAAG,MAGvF5+O,EAAQm+O,KAAO,SAASi5qB,GAGtB,OAFAA,EAAgBvpxB,EAAMvuB,UAAU83yB,cAEH3q5B,MACpB2q5B,EAGFA,EAAcjwoB,YAGvBnnR,EAAQs1X,SAAW,SAAUzmI,GAC3B,GAAsB,kBAAXA,GAAyC,kBAAXA,EACvC,OAAO77O,EAAMzS,MAEbsuP,EAASpuM,SAASouM,EAAQ,IAG5B,IAAI7T,EAAQp5O,KAAKwjB,MAAMypO,EAAO,SAC9BA,GAAmB,QACnB,IAAIrT,EAAQ55O,KAAKwjB,MAAMypO,EAAO,QAC9BA,GAAmB,OACnB,IAAIvK,EAAQ1iP,KAAKwjB,MAAMypO,EAAO,OAC9BA,GAAmB,MAEnB,IAAIf,EAAQlsP,KAAKwjB,MAAMypO,EAAO,MAC9BA,GAAmB,KACnB,IAAI/sP,EAAQF,KAAKwjB,MAAMypO,EAAO,IAE1B+/H,EADJ//H,GAAmB,GAUnB,MAAO,KAPP7T,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KACpCQ,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KACpC8I,EAASA,EAAQ,EAAKA,EAAQ,IAAM,IAKF,KAJlCwJ,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KACpChsP,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KACpC8sX,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KAKtC5uX,EAAQ635B,WAAa,SAASjnyB,GAG5B,IAFAA,EAAOid,EAAMvuB,UAAUsR,cAEHnkH,MAClB,OAAOmkH,EAGTA,EAAKo5E,SAAS,EAAG,EAAG,GACpBp5E,EAAKknyB,QAAQlnyB,EAAK67H,UAAY,GAAK77H,EAAKw0H,UAAY,IACpD,IAAI2yqB,EAAY,IAAInl4B,KAAKg+F,EAAK0wH,cAAe,EAAG,GAEhD,OAAO1/O,KAAKqjB,OAAQ2rG,EAAOmnyB,GAAa,MAAY,GAAK,IAG3D/35B,EAAQo+O,OAAS,SAASg5qB,GAGxB,OAFAA,EAAgBvpxB,EAAMvuB,UAAU83yB,cAEH3q5B,MACpB2q5B,EAGFA,EAAchwoB,cAGvBpnR,EAAQi+O,MAAQ,SAASm5qB,GAGvB,OAFAA,EAAgBvpxB,EAAMvuB,UAAU83yB,cAEH3q5B,MACpB2q5B,EAGFA,EAAc5qqB,WAAa,GAGpCxsP,EAAQg45B,YAAc,SAASnB,EAAYC,EAAUmB,GACnD,OAAOpz5B,KAAKmz5B,YAAYE,KAAKrB,EAAYC,EAAU,EAAGmB,IAGxDj45B,EAAQg45B,YAAYE,KAAO,SAASrB,EAAYC,EAAUqB,EAASF,GAGjE,IAFApB,EAAahpxB,EAAMvuB,UAAUu3yB,cAEHpq5B,MACxB,OAAOoq5B,EAIT,IAFAC,EAAWjpxB,EAAMvuB,UAAUw3yB,cAEHrq5B,MACtB,OAAOqq5B,EAOT,MAJEqB,OADcx35B,IAAZw35B,EACQxB,EAAc,GAEdA,EAAcwB,cAED7x5B,OACvB,OAAO0M,EAAMzS,WAEEI,IAAbs35B,EACFA,EAAW,GACAA,aAAoB3x5B,QAC/B2x5B,EAAW,CAACA,IAGd,IAAK,IAAIpw5B,EAAI,EAAGA,EAAIow5B,EAASvx5B,OAAQmB,IAAK,CACxC,IAAIqiB,EAAI2jH,EAAMvuB,UAAU24yB,EAASpw5B,IACjC,GAAIqiB,aAAazd,MACf,OAAOyd,EAET+t4B,EAASpw5B,GAAKqiB,EAEhB,IAAIkmO,GAAQ0mqB,EAAWD,GAAZ,MAAkD,EACzD73pB,EAAQ5O,EACR9L,EAAMuyqB,EACV,IAAKhv5B,EAAI,EAAGA,EAAIuoP,EAAMvoP,IAAK,CACzB,IAAI8C,GAAK,IAAIioB,MAAO89B,oBAAsB,EAAK4zL,EAAItC,YAAcsC,EAAIc,SACjEgzqB,GAAM,EACNzt5B,IAAMwt5B,EAAQ,IAAMxt5B,IAAMwt5B,EAAQ,KACpCC,GAAM,GAER,IAAK,IAAI/70B,EAAI,EAAGA,EAAI470B,EAASvx5B,OAAQ21E,IAAK,CACxC,IAAIg80B,EAAUJ,EAAS570B,GACvB,GAAIg80B,EAAQ5rqB,YAAcnI,EAAImI,WAC5B4rqB,EAAQ7rqB,aAAelI,EAAIkI,YAC3B6rqB,EAAQ/2qB,gBAAkBgD,EAAIhD,cAAe,CAC7C82qB,GAAM,EACN,OAGAA,GACFp5pB,IAEF1a,EAAIwzqB,QAAQxzqB,EAAImI,UAAY,GAG9B,OAAOuS,GAGTh/P,EAAQs45B,IAAM,WACZ,OAAO,IAAI1l4B,MAGb5yB,EAAQq+O,OAAS,SAAS+4qB,GAExB,OADAA,EAAgBvpxB,EAAMvuB,UAAU83yB,cACH3q5B,MACpB2q5B,EAGFA,EAAc/voB,cAGvBrnR,EAAQ0/P,KAAO,SAAS5R,EAAMc,EAAQC,GAIpC,OAHAf,EAAOjgH,EAAMqxwB,YAAYpxpB,GACzBc,EAAS/gH,EAAMqxwB,YAAYtwpB,GAC3BC,EAAShhH,EAAMqxwB,YAAYrwpB,GACvBhhH,EAAM2xwB,WAAW1xpB,EAAMc,EAAQC,GAC1B77O,EAAMzS,MAEXutP,EAAO,GAAKc,EAAS,GAAKC,EAAS,EAC9B77O,EAAM+qG,KAGP,KAAO+vI,EAAO,GAAKc,EAASC,GAAU,OAGhD7uP,EAAQu45B,UAAY,SAASC,GAG3B,OAFAA,EAAY3qxB,EAAMvuB,UAAUk5yB,cAEH/r5B,MAChB+r5B,GAGD,KAAOA,EAAUrxoB,WAAa,GAAKqxoB,EAAUpxoB,aAAeoxoB,EAAUnxoB,cAAgB,OAGhGrnR,EAAQsgH,MAAQ,WACd,OAAO,IAAI1tF,MAGb5yB,EAAQw+O,QAAU,SAAS44qB,EAAeqB,GAExC,IADArB,EAAgBvpxB,EAAMvuB,UAAU83yB,cACH3q5B,MAC3B,OAAO2q5B,OAEWz25B,IAAhB835B,IACFA,EAAc,GAEhB,IAAIn0qB,EAAM8yqB,EAAchyqB,SAExB,OAAOsxqB,EAAW+B,GAAan0qB,IAGjCtkP,EAAQ045B,QAAU,SAAStB,EAAeqB,GAExC,IADArB,EAAgBvpxB,EAAMvuB,UAAU83yB,cACH3q5B,MAC3B,OAAO2q5B,EAKT,QAHoBz25B,IAAhB835B,IACFA,EAAc,GAEI,KAAhBA,EACF,OAAO5z5B,KAAKgz5B,WAAWT,GAEzB,IAAIuB,EAAalC,EAAYgC,GACzBG,EAAM,IAAIhm4B,KAAKwk4B,EAAc91qB,cAAe,EAAG,GAC/Cu3qB,EAAMD,EAAIxzqB,SAAWuzqB,EAAa,EAAI,EAG1C,OAFAC,GAA6C,GAAtCh35B,KAAKijB,IAAI+z4B,EAAIxzqB,SAAWuzqB,GAAmB,GAAK,GAAK,IAErD/25B,KAAKwjB,OAAQgy4B,EAAgBwB,GAAjB,MAAiD,EAAI,GAAKC,GAG/E745B,EAAQ845B,QAAU,SAASjC,EAAYzmqB,EAAM6nqB,GAC3C,OAAOpz5B,KAAKi05B,QAAQZ,KAAKrB,EAAYzmqB,EAAM,EAAG6nqB,IAGhDj45B,EAAQ845B,QAAQZ,KAAO,SAASrB,EAAYzmqB,EAAM+nqB,EAASF,GAEzD,IADApB,EAAahpxB,EAAMvuB,UAAUu3yB,cACHpq5B,MACxB,OAAOoq5B,EAGT,IADAzmqB,EAAOviH,EAAMqxwB,YAAY9upB,cACL3jP,MAClB,OAAO2jP,EAET,GAAIA,EAAO,EACT,OAAOp9O,EAAM+qG,IAOf,MAJEo6yB,OADcx35B,IAAZw35B,EACQxB,EAAc,GAEdA,EAAcwB,cAED7x5B,OACvB,OAAO0M,EAAMzS,WAEEI,IAAbs35B,EACFA,EAAW,GACAA,aAAoB3x5B,QAC/B2x5B,EAAW,CAACA,IAEd,IAAK,IAAIpw5B,EAAI,EAAGA,EAAIow5B,EAASvx5B,OAAQmB,IAAK,CACxC,IAAIqiB,EAAI2jH,EAAMvuB,UAAU24yB,EAASpw5B,IACjC,GAAIqiB,aAAazd,MACf,OAAOyd,EAET+t4B,EAASpw5B,GAAKqiB,EAGhB,IADA,IAAIvf,EAAI,EACDA,EAAIylP,GAAM,CACfymqB,EAAWiB,QAAQjB,EAAWpqqB,UAAY,GAC1C,IAAInI,EAAMuyqB,EAAWzxqB,SACrB,GAAId,IAAQ6zqB,EAAQ,IAAM7zqB,IAAQ6zqB,EAAQ,GAA1C,CAGA,IAAK,IAAI970B,EAAI,EAAGA,EAAI470B,EAASvx5B,OAAQ21E,IAAK,CACxC,IAAIg80B,EAAUJ,EAAS570B,GACvB,GAAIg80B,EAAQ5rqB,YAAcoqqB,EAAWpqqB,WACnC4rqB,EAAQ7rqB,aAAeqqqB,EAAWrqqB,YAClC6rqB,EAAQ/2qB,gBAAkBu1qB,EAAWv1qB,cAAe,CACpD32O,IACA,OAGJA,KAGF,OAAOks5B,GAGT725B,EAAQg+O,KAAO,SAASo5qB,GAGtB,OAFAA,EAAgBvpxB,EAAMvuB,UAAU83yB,cAEH3q5B,MACpB2q5B,EAGFA,EAAc91qB,eAYvBthP,EAAQ+45B,SAAW,SAASlC,EAAYC,EAAUkC,GAEhD,IADAnC,EAAahpxB,EAAMvuB,UAAUu3yB,cACHpq5B,MACxB,OAAOoq5B,EAGT,IADAC,EAAWjpxB,EAAMvuB,UAAUw3yB,cACHrq5B,MACtB,OAAOqq5B,EAGTkC,EAAQA,GAAS,EACjB,IAAI3N,EAAKwL,EAAWpqqB,UAChBxtK,EAAK430B,EAAWrqqB,WAAa,EAC7BogQ,EAAKiqa,EAAWv1qB,cAChBi2qB,EAAKT,EAASrqqB,UACd+qqB,EAAKV,EAAStqqB,WAAa,EAC3BysqB,EAAKnC,EAASx1qB,cAElB,OAAQ03qB,GACN,KAAK,EAUH,OARW,KAAP3N,GAAoB,KAAPkM,GACflM,EAAK,GACLkM,EAAK,IACW,KAAPlM,EACTA,EAAK,GACW,KAAPA,GAAoB,KAAPkM,IACtBA,EAAK,KAEEA,EAAU,GAALC,EAAe,IAALyB,GAAa5N,EAAU,GAALps0B,EAAe,IAAL2ta,IAAa,IACnE,KAAK,EAEH,IAUIssa,EAAU,IACd,GAAItsa,IAAOqsa,GAAQrsa,EAAK,IAAOqsa,IAASh60B,EAAKu40B,GAASv40B,IAAOu40B,GAAQnM,GAAMkM,GAMzE,OALK3qa,IAAOqsa,GAAMl+qB,EAAW6xQ,IAZZ,SAASusa,EAAOC,GACjC,IAAIC,EAAQF,EAAM73qB,cACdg4qB,EAAY,IAAI1m4B,KAAKym4B,EAAO,EAAG,GACnC,GAAIt+qB,EAAWs+qB,IAAUF,EAAQG,GAAaF,GAASE,EACrD,OAAO,EAET,IAAIC,EAAQH,EAAM93qB,cACdk4qB,EAAY,IAAI5m4B,KAAK2m4B,EAAO,EAAG,GACnC,OAAQx+qB,EAAWw+qB,IAAUH,GAASI,GAAaL,EAAQK,EAKzDC,CAAa5C,EAAYC,IACjB,IAAPU,GAAmB,KAAPD,KACb2B,EAAU,KAELtC,EAAYC,EAAYC,GAAYoC,EAE7C,IAAInpqB,EAASkpqB,EAAKrsa,EAAM,EAEpBi9Z,GADQ,IAAIj33B,KAAKqm4B,EAAK,EAAG,EAAG,GAAK,IAAIrm4B,KAAKg6d,EAAI,EAAG,IAAM,IAAO,GAAK,GAAK,GACvD78P,EACrB,OAAO6mqB,EAAYC,EAAYC,GAAYjN,EAC7C,KAAK,EAEH,OAAO+M,EAAYC,EAAYC,GAAY,IAC7C,KAAK,EAEH,OAAOF,EAAYC,EAAYC,GAAY,IAC7C,KAAK,EAEH,OAASS,EAAU,GAALC,EAAe,IAALyB,GAAa5N,EAAU,GAALps0B,EAAe,IAAL2ta,IAAa,OAahE,SAAS7sf,EAAQC,EAASu+4B,GAYd,qBAATtquB,MAAuBA,KARzBl0K,EAAOC,QAQ+B,WAC9C,IAAIsp5B,EAAS,SAAS1n5B,EAAMjB,GAG5B,IAAIwP,EAAS7J,MAAMtD,UAAUmN,OACzBwE,EAAQrO,MAAMtD,UAAU2R,MACxB7O,EAAW7C,OAAOD,UAAU8C,SAIhC,SAAS4z5B,EAAQzu5B,EAAGgM,GAClB,IAAI6D,EAAM7P,EAAIgM,EAAIhM,EAAIgM,EACtB,OAAOrV,EAAKy1O,IAAI,GACA,MAAQz1O,EAAKkuG,IAAMh1F,EAAM,EAAKA,GAAOA,GAAQlZ,EAAKmj5B,SAIpE,IAAIx+4B,EAAUD,MAAMC,SAAW,SAAiBgpB,GAC9C,MAA8B,mBAAvBzpB,EAASD,KAAK0pB,IAIvB,SAAS0zJ,EAAW1zJ,GAClB,MAA8B,sBAAvBzpB,EAASD,KAAK0pB,GAIvB,SAASw1F,EAASx1F,GAChB,MAAsB,kBAARA,GAAoBA,IAAQA,EAK5C,SAASoq4B,EAASjn5B,GAChB,OAAOvC,EAAOrD,MAAM,GAAI4F,GAK1B,SAAS424B,IACP,OAAO,IAAIA,EAAM71sB,MAAMlrM,WA8QzB,SAASqx5B,IAAY,OAAO,EAW5B,SAASC,IAAW,OAAO,EAmB3B,SAASC,EAASjy5B,EAAGw0E,GAAK,OAAOx0E,IAAMw0E,EAAI,EAAI,EAvS/Cit0B,EAAM5h5B,GAAK4h5B,EAAMtm5B,UAKjBsm5B,EAAM71sB,MAAQ,SAAe5jL,GAI3B,GAAItpB,EAAQspB,EAAK,IAEf,GAAItpB,EAAQspB,EAAK,GAAG,IAAK,CAEnBozJ,EAAWpzJ,EAAK,MAClBA,EAAK,GAAKy53B,EAAMz74B,IAAIgiB,EAAK,GAAIA,EAAK,KAEpC,IAAK,IAAIhoB,EAAI,EAAGA,EAAIgoB,EAAK,GAAGnpB,OAAQmB,IAClChD,KAAKgD,GAAKgoB,EAAK,GAAGhoB,GACpBhD,KAAK6B,OAASmpB,EAAK,GAAGnpB,YAItB7B,KAAK,GAAKo+K,EAAWpzJ,EAAK,IAAMy53B,EAAMz74B,IAAIgiB,EAAK,GAAIA,EAAK,IAAMA,EAAK,GACnEhrB,KAAK6B,OAAS,OAIX,GAAIq+G,EAASl1F,EAAK,IACvBhrB,KAAK,GAAKyk5B,EAAMvi5B,IAAI+F,MAAM,KAAM+iB,GAChChrB,KAAK6B,OAAS,MAGT,IAAImpB,EAAK,aAAcy53B,EAE5B,OAAOA,EAAMz53B,EAAK,GAAGpoB,WAMrB5C,KAAK,GAAK,GACVA,KAAK6B,OAAS,EAGhB,OAAO7B,MAETyk5B,EAAM71sB,MAAMzwM,UAAYsm5B,EAAMtm5B,UAC9Bsm5B,EAAM71sB,MAAMtwM,YAAcmm5B,EAK1BA,EAAMz7wB,MAAQ,CACZ6rxB,QAASA,EACTnz5B,QAASA,EACT08K,WAAYA,EACZl+D,SAAUA,EACV40yB,SAAUA,GAMZrQ,EAAM/qtB,OAAS,SAAgB5yL,GAC7B,IAAO0wE,EAEP,GAAyB,IAArB9zE,UAAU7B,OAAc,CAC1B,IAAK21E,KAAK1wE,EACR294B,EAAMjt0B,GAAK1wE,EAAI0wE,GACjB,OAAOx3E,KAGT,IAAK,IAAIgD,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IACpC,IAAKw0E,KAAK9zE,UAAUV,GAClB8D,EAAI0wE,GAAK9zE,UAAUV,GAAGw0E,GAG1B,OAAO1wE,GAKT294B,EAAMjglB,KAAO,SAAc32T,GACzB,OAAOA,EAAIhM,QAAU,GAKvB4i5B,EAAMtqW,KAAO,SAActsiB,GACzB,OAAOA,EAAI,GAAGhM,QAAU,GAK1B4i5B,EAAMj8mB,WAAa,SAAoB36R,GACrC,MAAO,CACL22T,KAAMiglB,EAAMjglB,KAAK32T,GACjBssiB,KAAMsqW,EAAMtqW,KAAKtsiB,KAMrB424B,EAAMzovB,IAAM,SAAanuJ,EAAK1R,GAC5B,OAAIuF,EAAQvF,GACHA,EAAM6M,KAAI,SAAShG,GACxB,OAAOyh5B,EAAMzovB,IAAInuJ,EAAK7K,MAGnB6K,EAAI1R,IAMbso5B,EAAMyQ,KAAO,SAAcrn5B,EAAK7K,GAC9B,OAAOyh5B,EAAMzovB,IAAInuJ,EAAK7K,IAMxByh5B,EAAMxovB,IAAM,SAAapuJ,EAAK1R,GAC5B,GAAIuF,EAAQvF,GAAQ,CAClB,IAAIg55B,EAAS1Q,EAAM2Q,OAAOvn5B,EAAIhM,QAAQmH,KAAI,SAAShG,GACjD,OAAO,IAAIvB,MAAMtF,EAAM0F,WAOzB,OALA1F,EAAMuQ,SAAQ,SAASq0J,EAAK/9J,GAC1Byh5B,EAAM2Q,OAAOvn5B,EAAIhM,QAAQ6K,SAAQ,SAAS8qE,GACxC290B,EAAO390B,GAAGx0E,GAAK6K,EAAI2pE,GAAGupF,SAGnBo0vB,EAGT,IADA,IAAIpigB,EAAS,IAAItxZ,MAAMoM,EAAIhM,QAClBmB,EAAI,EAAGA,EAAI6K,EAAIhM,OAAQmB,IAC9B+vZ,EAAO/vZ,GAAK,CAAC6K,EAAI7K,GAAG7G,IACtB,OAAO42Z,GAMT0xf,EAAM4Q,KAAO,SAAcxn5B,EAAK7K,GAC9B,OAAOyh5B,EAAMxovB,IAAIpuJ,EAAK7K,GAAGgG,KAAI,SAASrD,GAAI,OAAOA,EAAE,OAKrD8+4B,EAAM6Q,KAAO,SAAczn5B,GAGzB,IAFA,IAAI0n5B,EAAO9Q,EAAMjglB,KAAK32T,GAClBi0I,EAAM,IAAIrgJ,MAAM8z5B,GACXv5vB,EAAM,EAAGA,EAAMu5vB,EAAMv5vB,IAC5Bla,EAAIka,GAAO,CAACnuJ,EAAImuJ,GAAKA,IACvB,OAAOla,GAKT2iwB,EAAM+Q,SAAW,SAAkB3n5B,GAGjC,IAFA,IAAI0n5B,EAAO9Q,EAAMjglB,KAAK32T,GAAO,EACzBi0I,EAAM,IAAIrgJ,MAAM8z5B,GACXvy5B,EAAI,EAAGuy5B,GAAQ,EAAGA,IAAQvy5B,IACjC8+I,EAAI9+I,GAAK,CAAC6K,EAAI7K,GAAGuy5B,IACnB,OAAOzzwB,GAIT2iwB,EAAM58Z,UAAY,SAAmBh6e,GACnC,IACI4n5B,EAAQjxlB,EAAM21O,EAAM3ie,EADpB1wE,EAAM,GAILpF,EAAQmM,EAAI,MACfA,EAAM,CAACA,IAET22T,EAAO32T,EAAIhM,OACXs4iB,EAAOtsiB,EAAI,GAAGhM,OAEd,IAAK,IAAImB,EAAI,EAAGA,EAAIm3iB,EAAMn3iB,IAAK,CAE7B,IADAyy5B,EAAS,IAAIh05B,MAAM+iU,GACdhtP,EAAI,EAAGA,EAAIgtP,EAAMhtP,IACpBi+0B,EAAOj+0B,GAAK3pE,EAAI2pE,GAAGx0E,GACrB8D,EAAIsF,KAAKqp5B,GAIX,OAAsB,IAAf3u5B,EAAIjF,OAAeiF,EAAI,GAAKA,GAMrC294B,EAAMz74B,IAAM,SAAa6E,EAAKqc,EAAMwr4B,GAClC,IAAI15vB,EAAKu5vB,EAAMI,EAAM7zwB,EAAKma,EAS1B,IAPKv6J,EAAQmM,EAAI,MACfA,EAAM,CAACA,IAET0n5B,EAAO1n5B,EAAIhM,OACX8z5B,EAAO9n5B,EAAI,GAAGhM,OACdigJ,EAAM4zwB,EAAU7n5B,EAAM,IAAIpM,MAAM8z5B,GAE3Bv5vB,EAAM,EAAGA,EAAMu5vB,EAAMv5vB,IAIxB,IAFKla,EAAIka,KACPla,EAAIka,GAAO,IAAIv6J,MAAMk05B,IAClB15vB,EAAM,EAAGA,EAAM05vB,EAAM15vB,IACxBna,EAAIka,GAAKC,GAAO/xI,EAAKrc,EAAImuJ,GAAKC,GAAMD,EAAKC,GAG7C,OAAsB,IAAfna,EAAIjgJ,OAAeigJ,EAAI,GAAKA,GAKrC2iwB,EAAMmR,UAAY,SAAmB/n5B,EAAKqc,EAAMwr4B,GAC9C,IAAI15vB,EAAKu5vB,EAAMI,EAAM7zwB,EAAKma,EAS1B,IAPKv6J,EAAQmM,EAAI,MACfA,EAAM,CAACA,IAET0n5B,EAAO1n5B,EAAIhM,OACX8z5B,EAAO9n5B,EAAI,GAAGhM,OACdigJ,EAAM4zwB,EAAU7n5B,EAAM,IAAIpM,MAAM8z5B,GAE3Bv5vB,EAAM,EAAGA,EAAMu5vB,EAAMv5vB,IAMxB,IAJKla,EAAIka,KACPla,EAAIka,GAAO,IAAIv6J,MAAMk05B,IACnBA,EAAO,IACT7zwB,EAAIka,GAAK,GAAKnuJ,EAAImuJ,GAAK,IACpBC,EAAM,EAAGA,EAAM05vB,EAAM15vB,IACxBna,EAAIka,GAAKC,GAAO/xI,EAAK43H,EAAIka,GAAKC,EAAI,GAAIpuJ,EAAImuJ,GAAKC,IAEnD,OAAsB,IAAfna,EAAIjgJ,OAAeigJ,EAAI,GAAKA,GAKrC2iwB,EAAMoR,MAAQ,SAAeho5B,EAAKqc,GAChC,OAAOu63B,EAAMz74B,IAAI6E,EAAKqc,GAAM,IAK9Bu63B,EAAMpm5B,OAAS,SAAiBmmU,EAAM21O,EAAMjwhB,GAC1C,IACOstD,EADHsqE,EAAM,IAAIrgJ,MAAM+iU,GAGhBpmJ,EAAW+7X,KACbjwhB,EAAOiwhB,EACPA,EAAO31O,GAGT,IAAK,IAAIxhU,EAAI,EAAGA,EAAIwhU,EAAMxhU,IAExB,IADA8+I,EAAI9+I,GAAK,IAAIvB,MAAM04iB,GACd3ie,EAAI,EAAGA,EAAI2ie,EAAM3ie,IACpBsqE,EAAI9+I,GAAGw0E,GAAKttD,EAAKlnB,EAAGw0E,GAGxB,OAAOsqE,GAQT2iwB,EAAMqR,MAAQ,SAAetxlB,EAAM21O,GAGjC,OAFKj6b,EAASi6b,KACZA,EAAO31O,GACFiglB,EAAMpm5B,OAAOmmU,EAAM21O,EAAM46W,IAQlCtQ,EAAMsR,KAAO,SAAcvxlB,EAAM21O,GAG/B,OAFKj6b,EAASi6b,KACZA,EAAO31O,GACFiglB,EAAMpm5B,OAAOmmU,EAAM21O,EAAM66W,IAKlCvQ,EAAM31tB,KAAO,SAAc01I,EAAM21O,GAG/B,OAFKj6b,EAASi6b,KACZA,EAAO31O,GACFiglB,EAAMpm5B,OAAOmmU,EAAM21O,EAAMp9iB,EAAKy1E,SAQvCiy0B,EAAM5j2B,SAAW,SAAkB2jR,EAAM21O,GAGvC,OAFKj6b,EAASi6b,KACZA,EAAO31O,GACFiglB,EAAMpm5B,OAAOmmU,EAAM21O,EAAM86W,IAKlCxQ,EAAMuR,UAAY,SAAmBno5B,GACnC,IAEImuJ,EAAKC,EADLlgK,EAAO8R,EAAIhM,OAGf,GAAIgM,EAAIhM,SAAWgM,EAAI,GAAGhM,OACxB,OAAO,EAET,IAAKm6J,EAAM,EAAGA,EAAMjgK,EAAMigK,IACxB,IAAKC,EAAM,EAAGA,EAAMlgK,EAAMkgK,IACxB,GAAIpuJ,EAAIouJ,GAAKD,KAASnuJ,EAAImuJ,GAAKC,GAC7B,OAAO,EAGb,OAAO,GAKTwovB,EAAMvx4B,MAAQ,SAAerF,GAC3B,OAAO424B,EAAMoR,MAAMho5B,EAAKkn5B,IAK1BtQ,EAAMvi5B,IAAM,SAAajF,EAAKD,EAAK6E,EAAQqoB,GACpCk0J,EAAWl0J,KACdA,GAAO,GAET,IAII6g3B,EAJAl93B,EAAM,GACNoo5B,EAAQpB,EAAQ535B,EAAKD,GACrB4H,GAAQ5H,EAAMi55B,EAAQh55B,EAAMg55B,KAAWp05B,EAAS,GAAKo05B,GACrDnu3B,EAAU7qC,EAKd,IAAK8t4B,EAAM,EACNjj2B,GAAW9qC,GAAO+t4B,EAAMlp4B,EACjBimC,GAAW7qC,EAAMg55B,EAAQrx5B,EAAOqx5B,IAAvClrB,GAAsDkrB,EACzDpo5B,EAAIzB,KAAM8d,EAAOA,EAAK4d,EAASij2B,GAAOjj2B,GAGxC,OAAOj6B,GAOT424B,EAAM2Q,OAAS,SAAgBr14B,EAAOvjB,EAAKoI,GACzC,IAAIsx5B,EAAK,GAMT,GALAtx5B,EAAOA,GAAQ,EACXpI,IAAQV,IACVU,EAAMujB,EACNA,EAAQ,GAENA,IAAUvjB,GAAgB,IAAToI,EACnB,MAAO,GAET,GAAImb,EAAQvjB,GAAOoI,EAAO,EACxB,MAAO,GAET,GAAImb,EAAQvjB,GAAOoI,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAK5B,EAAI+c,EAAO/c,EAAIxG,EAAKwG,GAAK4B,EAC5Bsx5B,EAAG9p5B,KAAKpJ,QAGV,IAAKA,EAAI+c,EAAO/c,EAAIxG,EAAKwG,GAAK4B,EAC5Bsx5B,EAAG9p5B,KAAKpJ,GAGZ,OAAOkz5B,GAQTzR,EAAM304B,MAAS,WACb,SAASqm5B,EAAO594B,EAAMwH,EAAOvjB,EAAKoI,GAEhC,IAAI5B,EACAkz5B,EAAK,GACLr05B,EAAS0W,EAAK1W,OAClB,GAAIke,IAAUjkB,GAAaU,IAAQV,GAAa8I,IAAS9I,EACvD,OAAO2o5B,EAAMviwB,KAAK3pI,GAQpB,GADA3T,EAAOA,GAAQ,GAFfmb,GAFAA,EAAQA,GAAS,IAEA,EAAIA,EAAQle,EAASke,MACtCvjB,GAFAA,EAAMA,GAAO+b,EAAK1W,SAEL,EAAIrF,EAAMqF,EAASrF,IAEF,IAAToI,EACnB,MAAO,GAET,GAAImb,EAAQvjB,GAAOoI,EAAO,EACxB,MAAO,GAET,GAAImb,EAAQvjB,GAAOoI,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAK5B,EAAI+c,EAAO/c,EAAIxG,EAAKwG,GAAK4B,EAC5Bsx5B,EAAG9p5B,KAAKmM,EAAKvV,SAGf,IAAKA,EAAI+c,EAAO/c,EAAIxG,EAAIwG,GAAK4B,EAC3Bsx5B,EAAG9p5B,KAAKmM,EAAKvV,IAGjB,OAAOkz5B,EAGT,SAASpm5B,EAAMyI,EAAM694B,GAEnB,GAAIl2yB,GADJk2yB,EAAUA,GAAW,IACAp6vB,KACnB,OAAI97C,EAASk2yB,EAAQn6vB,KACZ1jJ,EAAK694B,EAAQp6vB,KAAKo6vB,EAAQn6vB,KAG5Bk6vB,EAFG1R,EAAMyQ,KAAK384B,EAAM694B,EAAQp6vB,MAC/Bq6vB,EAAWD,EAAQn6vB,KAAO,IACFl8I,MAAOs24B,EAAS755B,IAAK655B,EAASzx5B,MAG5D,GAAIs7G,EAASk2yB,EAAQn6vB,KAGnB,OAAOk6vB,EAFG1R,EAAM4Q,KAAK984B,EAAM694B,EAAQn6vB,MAC/Bq6vB,EAAWF,EAAQp6vB,KAAO,IACFj8I,MAAOu24B,EAAS955B,IAAK855B,EAAS1x5B,MAG5D,IAAI0x5B,EAAWF,EAAQp6vB,KAAO,GAC1Bq6vB,EAAWD,EAAQn6vB,KAAO,GAE9B,OADWk6vB,EAAO594B,EAAM+94B,EAASv24B,MAAOu24B,EAAS955B,IAAK855B,EAAS1x5B,MACnDoE,KAAI,SAASgzJ,GACvB,OAAOm6vB,EAAOn6vB,EAAKq6vB,EAASt24B,MAAOs24B,EAAS755B,IAAK655B,EAASzx5B,SAI9D,OAAOkL,EA5DM,GAmEf204B,EAAM8R,YAAc,SAAqBj8vB,EAAG87vB,EAAS39V,GACnD,GAAIv4c,EAASk2yB,EAAQp6vB,KAAM,CACzB,GAAI97C,EAASk2yB,EAAQn6vB,KACnB,OAAO3B,EAAE87vB,EAAQp6vB,KAAKo6vB,EAAQn6vB,KAAOw8Z,EACvC29V,EAAQn6vB,IAAMm6vB,EAAQn6vB,KAAO,GAC7Bm6vB,EAAQn6vB,IAAIl8I,MAAQq24B,EAAQn6vB,IAAIl8I,OAAS,EACzCq24B,EAAQn6vB,IAAIz/J,IAAM455B,EAAQn6vB,IAAIz/J,KAAO89J,EAAE,GAAGz4J,OAC1Cu05B,EAAQn6vB,IAAIr3J,KAAOwx5B,EAAQn6vB,IAAIr3J,MAAQ,EACvC,IAAI4x5B,EAAK/R,EAAM2Q,OAAOgB,EAAQn6vB,IAAIl8I,MACZhjB,EAAKE,IAAIq9J,EAAEz4J,OAAQu05B,EAAQn6vB,IAAIz/J,KAC/B455B,EAAQn6vB,IAAIr3J,MAC9BwN,EAAIgk5B,EAAQp6vB,IAIhB,OAHAw6vB,EAAG9p5B,SAAQ,SAAStG,EAAGpD,GACrBs3J,EAAEloJ,GAAGhM,GAAKqyjB,EAAEz1jB,MAEPs3J,EAGT,GAAIp6C,EAASk2yB,EAAQn6vB,KAAM,CACzBm6vB,EAAQp6vB,IAAMo6vB,EAAQp6vB,KAAO,GAC7Bo6vB,EAAQp6vB,IAAIj8I,MAAQq24B,EAAQp6vB,IAAIj8I,OAAS,EACzCq24B,EAAQp6vB,IAAIx/J,IAAM455B,EAAQp6vB,IAAIx/J,KAAO89J,EAAEz4J,OACvCu05B,EAAQp6vB,IAAIp3J,KAAOwx5B,EAAQp6vB,IAAIp3J,MAAQ,EACvC,IAAIwh3B,EAAKq+B,EAAM2Q,OAAOgB,EAAQp6vB,IAAIj8I,MACZhjB,EAAKE,IAAIq9J,EAAE,GAAGz4J,OAAQu05B,EAAQp6vB,IAAIx/J,KAClC455B,EAAQp6vB,IAAIp3J,MAC9BwB,EAAIgw5B,EAAQn6vB,IAIhB,OAHAmqtB,EAAG152B,SAAQ,SAAS0F,EAAGolE,GACrB8iF,EAAEloJ,GAAGhM,GAAKqyjB,EAAEjhf,MAEP8iF,EAuBT,OApBIm+Z,EAAE,GAAG52jB,SAAW/F,IAClB28jB,EAAI,CAACA,IAEP29V,EAAQp6vB,IAAIj8I,MAAQq24B,EAAQp6vB,IAAIj8I,OAAS,EACzCq24B,EAAQp6vB,IAAIx/J,IAAM455B,EAAQp6vB,IAAIx/J,KAAO89J,EAAEz4J,OACvCu05B,EAAQp6vB,IAAIp3J,KAAOwx5B,EAAQp6vB,IAAIp3J,MAAQ,EACvCwx5B,EAAQn6vB,IAAIl8I,MAAQq24B,EAAQn6vB,IAAIl8I,OAAS,EACzCq24B,EAAQn6vB,IAAIz/J,IAAM455B,EAAQn6vB,IAAIz/J,KAAO89J,EAAE,GAAGz4J,OAC1Cu05B,EAAQn6vB,IAAIr3J,KAAOwx5B,EAAQn6vB,IAAIr3J,MAAQ,EACnCwh3B,EAAKq+B,EAAM2Q,OAAOgB,EAAQp6vB,IAAIj8I,MACZhjB,EAAKE,IAAIq9J,EAAEz4J,OAAQu05B,EAAQp6vB,IAAIx/J,KAC/B455B,EAAQp6vB,IAAIp3J,MAC9B4x5B,EAAK/R,EAAM2Q,OAAOgB,EAAQn6vB,IAAIl8I,MACZhjB,EAAKE,IAAIq9J,EAAE,GAAGz4J,OAAQu05B,EAAQn6vB,IAAIz/J,KAClC455B,EAAQn6vB,IAAIr3J,MAClCwh3B,EAAG152B,SAAQ,SAAS0F,EAAGpP,GACrBwz5B,EAAG9p5B,SAAQ,SAAStG,EAAGoxE,GACrB8iF,EAAEloJ,GAAGhM,GAAKqyjB,EAAEz1jB,GAAGw0E,SAGZ8iF,GAMTmqvB,EAAMgS,SAAW,SAAkBC,GACjC,IAAIC,EAAMlS,EAAMqR,MAAMY,EAAU705B,OAAQ605B,EAAU705B,QAIlD,OAHA605B,EAAUhq5B,SAAQ,SAASqf,EAAG/oB,GAC5B2z5B,EAAI3z5B,GAAGA,GAAK+oB,KAEP4q4B,GAKTlS,EAAMviwB,KAAO,SAAcoY,GACzB,OAAOA,EAAEtxJ,KAAI,SAASgzJ,GACpB,OAAI97C,EAAS87C,GACJA,EACFA,EAAIhzJ,KAAI,SAAS+iB,GACtB,OAAOA,SAWb,IAAI6q4B,EAASnS,EAAMtm5B,UAwFnB,OArFAy45B,EAAO/05B,OAAS,EAKhB+05B,EAAOxq5B,KAAO3K,MAAMtD,UAAUiO,KAC9Bwq5B,EAAOnq5B,KAAOhL,MAAMtD,UAAUsO,KAC9Bmq5B,EAAOxn5B,OAAS3N,MAAMtD,UAAUiR,OAChCwn5B,EAAO9m5B,MAAQrO,MAAMtD,UAAU2R,MAI/B8m5B,EAAOh05B,QAAU,WACf,OAAO5C,KAAK6B,OAAS,EAAIiO,EAAM9O,KAAKhB,MAAQ8P,EAAM9O,KAAKhB,MAAM,IAK/D425B,EAAO5t5B,IAAM,SAAakhB,EAAMwr4B,GAC9B,OAAOjR,EAAMA,EAAMz74B,IAAIhJ,KAAMkqB,EAAMwr4B,KAKrCkB,EAAOhB,UAAY,SAAmB1r4B,EAAMwr4B,GAC1C,OAAOjR,EAAMA,EAAMmR,UAAU515B,KAAMkqB,EAAMwr4B,KAK3CkB,EAAOf,MAAQ,SAAe3r4B,GAE5B,OADAu63B,EAAMoR,MAAM715B,KAAMkqB,GACXlqB,MAKT,SAAUkyC,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CD,EAAOC,GAAY,SAAS3s4B,GAC1B,IACAi8O,EADI/2F,EAAOpvK,KAGX,OAAIkqB,GACF2uB,YAAW,WACT3uB,EAAKlpB,KAAKouK,EAAMwnvB,EAAOC,GAAU715B,KAAKouK,OAEjCpvK,OAETmmQ,EAAUs+oB,EAAMoS,GAAU725B,MACnB0B,EAAQykQ,GAAWs+oB,EAAMt+oB,GAAWA,IAZR,CAcpCj0N,EAAMlvC,IAfX,CAgBG,+DAA+D+7C,MAAM,MAIxE,SAAU7M,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CD,EAAOC,GAAY,SAAS165B,EAAO+tB,GACjC,IAAIklJ,EAAOpvK,KAEX,OAAIkqB,GACF2uB,YAAW,WACT3uB,EAAKlpB,KAAKouK,EAAMwnvB,EAAOC,GAAU715B,KAAKouK,EAAMjzK,OAEvC6D,MAEFyk5B,EAAMA,EAAMoS,GAAU725B,KAAM7D,KAVA,CAYpC+1C,EAAMlvC,IAbX,CAcG,UAAU+7C,MAAM,MAInB,SAAU7M,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CD,EAAOC,GAAY,WACjB,OAAOpS,EAAMA,EAAMoS,GAAU5u5B,MAAM,KAAMvE,aAFN,CAIpCwuC,EAAMlvC,IALX,CAMG,kCAAkC+7C,MAAM,MAIpC0l2B,EAlqBM,CAoqBX1n5B,MAw6HA,OAv6HD,SAAS0n5B,EAAO1n5B,GAEjB,IAAIqhL,EAAaqmuB,EAAMz7wB,MAAMo1C,WAG7B,SAAS04uB,EAAOnx5B,EAAGC,GAAK,OAAOD,EAAIC,EAEnC,SAAS4zQ,EAAK9uP,EAAKztB,EAAKD,GACtB,OAAOD,EAAKC,IAAIC,EAAKF,EAAKE,IAAIytB,EAAK1tB,IAKrCyn5B,EAAM744B,IAAM,SAAaiC,GAGvB,IAFA,IAAIjC,EAAM,EACN5I,EAAI6K,EAAIhM,SACHmB,GAAK,GACZ4I,GAAOiC,EAAI7K,GACb,OAAO4I,GAKT644B,EAAMsS,QAAU,SAAiBlp5B,GAG/B,IAFA,IAAIjC,EAAM,EACN5I,EAAI6K,EAAIhM,SACHmB,GAAK,GACZ4I,GAAOiC,EAAI7K,GAAK6K,EAAI7K,GACtB,OAAO4I,GAKT644B,EAAMuS,SAAW,SAAkBnp5B,GAKjC,IAJA,IAGIkyL,EAHAzE,EAAOmptB,EAAMnptB,KAAKztL,GAClBjC,EAAM,EACN5I,EAAI6K,EAAIhM,SAEHmB,GAAK,GAEZ4I,IADAm0L,EAAMlyL,EAAI7K,GAAKs4L,GACFyE,EAEf,OAAOn0L,GAIT644B,EAAMwS,OAAS,SAAgBpp5B,GAG7B,IAFA,IAAIjC,EAAM,EACN5I,EAAI6K,EAAIhM,SACHmB,GAAK,GACZ4I,GAAOiC,EAAI7K,GACb,OAAO4I,GAIT644B,EAAMztxB,QAAU,SAAiBnpH,GAG/B,IAFA,IAAI4htB,EAAO,EACPzstB,EAAI6K,EAAIhM,SACHmB,GAAK,GACZystB,GAAQ5htB,EAAI7K,GACd,OAAOystB,GAKTg1L,EAAMxn5B,IAAM,SAAa4Q,GAGvB,IAFA,IAAI03K,EAAM13K,EAAI,GACV7K,EAAI,IACCA,EAAI6K,EAAIhM,QACXgM,EAAI7K,GAAKuiL,IACXA,EAAM13K,EAAI7K,IACd,OAAOuiL,GAKTk/tB,EAAMzn5B,IAAM,SAAa6Q,GAGvB,IAFA,IAAI23K,EAAO33K,EAAI,GACX7K,EAAI,IACCA,EAAI6K,EAAIhM,QACXgM,EAAI7K,GAAKwiL,IACXA,EAAO33K,EAAI7K,IACf,OAAOwiL,GAKTi/tB,EAAMrxI,OAAS,SAAgBvlwB,GAE7B,IADA,IAAI3H,EAAO,GAAI+re,EAAO,GACdjve,EAAI,EAAGA,EAAI6K,EAAIhM,OAAQmB,IACxBkD,EAAK2H,EAAI7K,MACZkD,EAAK2H,EAAI7K,KAAM,EACfive,EAAK7le,KAAKyB,EAAI7K,KAGlB,OAAOive,GAKTwya,EAAMnptB,KAAO,SAAcztL,GACzB,OAAO424B,EAAM744B,IAAIiC,GAAOA,EAAIhM,QAK9B4i5B,EAAMyS,UAAY,SAAmBrp5B,GACnC,OAAO424B,EAAMuS,SAASnp5B,GAAOA,EAAIhM,QAKnC4i5B,EAAMwE,QAAU,SAAiBp74B,GAC/B,OAAO9Q,EAAKy1O,IAAIiyqB,EAAMztxB,QAAQnpH,GAAM,EAAIA,EAAIhM,SAK9C4i5B,EAAM8F,OAAS,SAAgB184B,GAC7B,IAAIsp5B,EAAStp5B,EAAIhM,OACbowe,EAAOpke,EAAIiC,QAAQrD,KAAKqq5B,GAE5B,OAAkB,EAATK,EAELllb,EAAMklb,EAAS,EAAK,IADnBllb,EAAMklb,EAAS,EAAK,GAAMllb,EAAMklb,EAAS,IAAO,GAMvD1S,EAAM2S,OAAS,SAAgBvp5B,GAC7B,OAAO424B,EAAMmR,UAAU/n5B,GAAK,SAAUlI,EAAGC,GAAK,OAAOD,EAAIC,MAK3D6+4B,EAAM4S,QAAU,SAAiBxp5B,GAC/B,OAAO424B,EAAMmR,UAAU/n5B,GAAK,SAAUlI,EAAGC,GAAK,OAAOD,EAAIC,MAK3D6+4B,EAAMrvqB,KAAO,SAAcvnO,GAIzB,IAHA,IAAIs+O,EAAQ,GACRxe,EAAS9/N,EAAIhM,OAERmB,EAAI,EAAGA,EAAI2qO,EAAQ3qO,IAC1BmpP,EAAM//O,KAAKyB,EAAI7K,GAAK6K,EAAI7K,EAAI,IAC9B,OAAOmpP,GAKTs4pB,EAAM33qB,KAAO,SAAUj/N,GAIrB,IAHA,IAAIsp5B,EAAStp5B,EAAIhM,OACb6nS,EAAS77R,EAAIiC,QAAQrD,KAAKqq5B,GAC1BQ,EAAQ,IAAI715B,MAAM015B,GACbn05B,EAAI,EAAGA,EAAIm05B,EAAQn05B,IAAK,CAC/B,IAAIogB,EAAQsmR,EAAOlpR,QAAQ3S,EAAI7K,IAC3BghB,EAAO0lR,EAAOhpR,YAAY7S,EAAI7K,IAClC,GAAIogB,IAAUY,EACZ,IAAI/N,EAAMmN,OAENnN,GAAOmN,EAAQY,GAAQ,EAE7Bsz4B,EAAMt05B,GAAKiT,EAAM,EAEnB,OAAOqh5B,GAOT7S,EAAMzpxB,KAAO,SAAcntH,GASzB,IARA,IAAI8/N,EAAS9/N,EAAIhM,OACbowe,EAAOpke,EAAIiC,QAAQrD,KAAKqq5B,GACxB1h5B,EAAQ,EACRmi5B,EAAW,EACXC,EAAc,EACdC,EAAW,GAGNz05B,EAAI,EAAGA,EAAI2qO,EAAQ3qO,IACtBive,EAAKjve,KAAOive,EAAKjve,EAAI,GACvBoS,KAEIA,EAAQmi5B,GACVE,EAAW,CAACxlb,EAAKjve,IACjBu05B,EAAWni5B,EACXoi5B,EAAc,GAGPpi5B,IAAUmi5B,IACjBE,EAASrr5B,KAAK6le,EAAKjve,IACnBw05B,KAGFpi5B,EAAQ,GAIZ,OAAuB,IAAhBoi5B,EAAoBC,EAAS,GAAKA,GAK3ChT,EAAMhvtB,MAAQ,SAAe5nL,GAC3B,OAAO424B,EAAMzn5B,IAAI6Q,GAAO424B,EAAMxn5B,IAAI4Q,IAKpC424B,EAAMiT,SAAW,SAAkB7p5B,EAAKmkb,GACtC,OAAOyyd,EAAMuS,SAASnp5B,IAAQA,EAAIhM,QAAUmwb,EAAO,EAAI,KAIzDyyd,EAAMkT,eAAiB,SAAwB9p5B,GAG7C,OAFeA,EAAIlC,QAAO,SAAUhG,EAAGiy5B,GAAU,OAAOjy5B,EAAI8+4B,EAAMuS,SAASY,KAAY,IAC3E/p5B,EAAIlC,QAAO,SAAUhG,EAAGiy5B,GAAU,OAAOjy5B,EAAIiy5B,EAAQ/15B,SAAU,GAChDgM,EAAIhM,SAIjC4i5B,EAAMoT,UAAY,SAAUhq5B,GAI1B,IAHA,IAAIytL,EAAOmptB,EAAMnptB,KAAKztL,GAClBsp5B,EAAStp5B,EAAIhM,OACbi25B,EAAM,IAAIr25B,MAAM015B,GACXn05B,EAAI,EAAGA,EAAIm05B,EAAQn05B,IAC1B805B,EAAI905B,GAAK6K,EAAI7K,GAAKs4L,EAEpB,OAAOw8tB,GAKTrT,EAAMwF,MAAQ,SAAep84B,EAAKmkb,GAChC,OAAOj1b,EAAK8oK,KAAK4+uB,EAAMiT,SAAS7p5B,EAAKmkb,KAIvCyyd,EAAMsT,YAAc,SAAqBlq5B,GACvC,OAAO9Q,EAAK8oK,KAAK4+uB,EAAMkT,eAAe9p5B,KAIxC424B,EAAMuT,QAAU,SAAiBnq5B,GAG/B,IAFA,IAAIytL,EAAOmptB,EAAMnptB,KAAKztL,GAClBlI,EAAI,GACC3C,EAAI6K,EAAIhM,OAAS,EAAGmB,GAAK,EAAGA,IACnC2C,EAAEyG,KAAKrP,EAAKijB,IAAInS,EAAI7K,GAAKs4L,IAE3B,OAAOmptB,EAAMnptB,KAAK31L,IAKpB8+4B,EAAMwT,OAAS,SAAgBpq5B,GAG7B,IAFA,IAAI084B,EAAS9F,EAAM8F,OAAO184B,GACtBlI,EAAI,GACC3C,EAAI6K,EAAIhM,OAAS,EAAGmB,GAAK,EAAGA,IACnC2C,EAAEyG,KAAKrP,EAAKijB,IAAInS,EAAI7K,GAAKun5B,IAE3B,OAAO9F,EAAM8F,OAAO5k5B,IAKtB8+4B,EAAMyT,SAAW,SAAkBrq5B,GACjC,OAAO424B,EAAMwF,MAAMp84B,GAAO424B,EAAMnptB,KAAKztL,IAKvC424B,EAAM0T,UAAY,SAAmBtq5B,GACnC,IAAIsp5B,EAAStp5B,EAAIhM,OACbowe,EAAOpke,EAAIiC,QAAQrD,KAAKqq5B,GAC5B,MAAO,CACL7kb,EAAMl1e,EAAKo/E,MAAOg70B,EAAU,GAAK,GACjCllb,EAAMl1e,EAAKo/E,MAAOg70B,EAAU,GAAK,GACjCllb,EAAMl1e,EAAKo/E,MAAiB,EAAVg70B,EAAc,GAAK,KAOzC1S,EAAM2T,UAAY,SAAmBvq5B,EAAKwq5B,EAAgBC,EAAQC,GAChE,IAGO9i1B,EAAM+i1B,EAAOr45B,EAAGwo5B,EAHnB8P,EAAc5q5B,EAAIiC,QAAQrD,KAAKqq5B,GAC/B4B,EAAe,CAACL,EAAex25B,QAC/BuE,EAAIyH,EAAIhM,OAGU,qBAAXy25B,IACTA,EAAS,EAAI,GACM,qBAAVC,IACTA,EAAQ,EAAI,GAEd,IAAK,IAAIv15B,EAAI,EAAGA,EAAIq15B,EAAex25B,OAAQmB,IAGzCw15B,EAAQpy5B,GAFRqvE,EAAI4i1B,EAAer15B,KACfs15B,EAAS7i1B,GAAK,EAAI6i1B,EAASC,IAE/Bp45B,EAAIpD,EAAKwjB,MAAMi5P,EAAKg/oB,EAAO,EAAGpy5B,EAAI,IAClCui5B,EAAQnvoB,EAAKg/oB,EAAQr45B,EAAG,EAAG,GAC3Bu45B,EAAa115B,IAAM,EAAI2l5B,GAAS8P,EAAYt45B,EAAI,GAAKwo5B,EAAQ8P,EAAYt45B,GAG3E,OAAOu45B,GAKTjU,EAAMkU,WAAa,SAAoB9q5B,EAAK1N,GAC1C,IAAI8xe,EAAOpke,EAAIiC,QAAQrD,KAAKqq5B,GACxB8B,EAAYz45B,GAAK8xe,EAAKpwe,OAAS,GAC/B1F,EAAQy/C,SAASg92B,GACjBC,EAAOD,EAAYz85B,EAEvB,OAAIA,EAAQ,EAAI81e,EAAKpwe,OACZowe,EAAK91e,IAAU,EAAI085B,GAAQ5mb,EAAK91e,EAAQ,GAAK085B,EAE7C5mb,EAAK91e,IAQhBso5B,EAAMqU,kBAAoB,SAA2Bjr5B,EAAK+7O,EAAOw3J,GAC/D,IAGI1lZ,EAHAkwa,EAAU,EACV79Z,EAAMF,EAAIhM,OACV8lN,GAAS,EAGA,WAATy5L,IACFz5L,GAAS,GAEX,IAAK,IAAI3kN,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBtH,EAAQmS,EAAI7K,IACP2kN,GAAUjsN,EAAQkuP,IACjBjiC,GAAUjsN,GAASkuP,IACvBgiL,IAIJ,OAAOA,EAAU79Z,GAKnB024B,EAAMsU,UAAY,SAAmBlr5B,EAAK264B,GAQxC,IAPA,IAAIpl4B,EAAQqh4B,EAAMxn5B,IAAI4Q,GAClBmr5B,EAASxQ,GAAQ,EACjByQ,GAAYxU,EAAMzn5B,IAAI6Q,GAAOuV,GAAS414B,EACtCjr5B,EAAMF,EAAIhM,OAILmB,GAHLwl5B,EAAO,GAGE,GAAGxl5B,EAAIg25B,EAAQh25B,IAC1Bwl5B,EAAKxl5B,GAAK,EACZ,IAASA,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBwl5B,EAAKzr5B,EAAKE,IAAIF,EAAKwjB,OAAQ1S,EAAI7K,GAAKogB,GAAS614B,GAAYD,EAAS,KAAO,EAE3E,OAAOxQ,GAKT/D,EAAM8C,WAAa,SAAoBxkqB,EAAMC,GAO3C,IANA,IAAI5oF,EAAIqqvB,EAAMnptB,KAAKynD,GACf3iP,EAAIqk5B,EAAMnptB,KAAK0nD,GACfk2qB,EAAUn2qB,EAAKlhP,OACfs35B,EAAS,IAAI135B,MAAMy35B,GAGdl25B,EAAI,EAAGA,EAAIk25B,EAASl25B,IAC3Bm25B,EAAOn25B,IAAM+/O,EAAK//O,GAAKo3J,IAAM4oF,EAAKhgP,GAAK5C,GAEzC,OAAOqk5B,EAAM744B,IAAIut5B,IAAWD,EAAU,IAKxCzU,EAAMmC,UAAY,SAAmB7jqB,EAAMC,GACzC,OAAOyhqB,EAAM8C,WAAWxkqB,EAAMC,GAC1ByhqB,EAAMwF,MAAMlnqB,EAAM,GAClB0hqB,EAAMwF,MAAMjnqB,EAAM,IAIxByhqB,EAAM2U,cAAiB,SAAUr2qB,EAAMC,GAIrC,OAHAD,EAAO0hqB,EAAM33qB,KAAKiW,GAClBC,EAAOyhqB,EAAM33qB,KAAKkW,GAEXyhqB,EAAMmC,UAAU7jqB,EAAMC,IAK/ByhqB,EAAM4U,WAAa,SAAoBxr5B,EAAKzH,GAM1C,IALA,IAAIkz5B,EAAK7U,EAAMnptB,KAAKztL,GAChBm84B,EAAQvF,EAAMwF,MAAMp84B,GACpBE,EAAMF,EAAIhM,OACV035B,EAAU,EAELv25B,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBu25B,GAAWx85B,EAAKy1O,KAAK3kO,EAAI7K,GAAKs25B,GAAMtP,EAAO5j5B,GAE7C,OAAOmz5B,EAAU1r5B,EAAIhM,QAIvB4i5B,EAAM+U,SAAW,SAAkB3r5B,GACjC,OAAO424B,EAAM4U,WAAWxr5B,EAAK,IAI/B424B,EAAMgV,SAAW,SAAkB5r5B,GACjC,OAAO424B,EAAM4U,WAAWxr5B,EAAK,GAAK,GAIpC,IAAI+o5B,EAASnS,EAAMtm5B,WAQnB,SAAU+zC,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAG/CD,EAAOC,GAAY,SAAS6C,EAAUxv4B,GACpC,IAAIrc,EAAM,GACN7K,EAAI,EACJ225B,EAAU355B,KAOd,GALIo+K,EAAWs7uB,KACbxv4B,EAAOwv4B,EACPA,GAAW,GAGTxv4B,EAIF,OAHA2uB,YAAW,WACT3uB,EAAKlpB,KAAK245B,EAAS/C,EAAOC,GAAU715B,KAAK245B,EAASD,OAE7C155B,KAGT,GAAIA,KAAK6B,OAAS,EAAG,CAEnB,IADA835B,GAAuB,IAAbD,EAAoB155B,KAAOA,KAAK6nf,YACnC7kf,EAAI225B,EAAQ935B,OAAQmB,IACzB6K,EAAI7K,GAAKyh5B,EAAMoS,GAAU8C,EAAQ325B,IACnC,OAAO6K,EAGT,OAAO424B,EAAMoS,GAAU725B,KAAK,GAAI055B,IA3BG,CA6BpCxn3B,EAAMlvC,IA9BX,CA+BI,iBAAkB+7C,MAAM,MAI5B,SAAU7M,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAG/CD,EAAOC,GAAY,SAAS6C,EAAUxv4B,GACpC,IAAIrc,EAAM,GACN7K,EAAI,EACJ225B,EAAU355B,KAOd,GALIo+K,EAAWs7uB,KACbxv4B,EAAOwv4B,EACPA,GAAW,GAGTxv4B,EAIF,OAHA2uB,YAAW,WACT3uB,EAAKlpB,KAAK245B,EAAS/C,EAAOC,GAAU715B,KAAK245B,EAASD,OAE7C155B,KAGT,GAAIA,KAAK6B,OAAS,EAAG,CAGnB,IAFiB,WAAbg15B,IACF8C,GAAuB,IAAbD,EAAoB155B,KAAOA,KAAK6nf,aACrC7kf,EAAI225B,EAAQ935B,OAAQmB,IACzB6K,EAAI7K,GAAKyh5B,EAAMoS,GAAU8C,EAAQ325B,IACnC,OAAoB,IAAb025B,EACDjV,EAAMoS,GAAUpS,EAAMz7wB,MAAM8rxB,SAASjn5B,IACrCA,EAGR,OAAO424B,EAAMoS,GAAU725B,KAAK,GAAI055B,IA9BG,CAgCpCxn3B,EAAMlvC,IAjCX,CAkCG,+LAE0D+7C,MAAM,MAKnE,SAAU7M,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CD,EAAOC,GAAY,WACjB,IAAIhp5B,EAAM,GACN7K,EAAI,EACJ225B,EAAU355B,KACVgrB,EAAOvpB,MAAMtD,UAAU2R,MAAM9O,KAAK0C,WAItC,GAAI06K,EAAWpzJ,EAAKA,EAAKnpB,OAAS,IAAK,CACrC,IAAIy7uB,EAAmBtytB,EAAKA,EAAKnpB,OAAS,GACtC+35B,EAAa5u4B,EAAKlb,MAAM,EAAGkb,EAAKnpB,OAAS,GAM7C,OAJAg3C,YAAW,WACTyksB,EAAiBt8uB,KAAK245B,EACA/C,EAAOC,GAAU5u5B,MAAM0x5B,EAASC,OAEjD555B,KAIHs9uB,OAAmBxhvB,EAAvB,IACI+95B,EAAkB,SAAyBhmd,GAC7C,OAAO4wc,EAAMoS,GAAU5u5B,MAAM0x5B,EAAS,CAAC9ld,GAAQvoc,OAAO0f,KAK1D,GAAIhrB,KAAK6B,OAAS,EAAG,CAEnB,IADA835B,EAAUA,EAAQ9xa,YACX7kf,EAAI225B,EAAQ935B,OAAQmB,IACzB6K,EAAI7K,GAAK625B,EAAgBF,EAAQ325B,IACnC,OAAO6K,EAIT,OAAOgs5B,EAAgB755B,KAAK,KApCO,CAsCpCkyC,EAAMlvC,IAvCX,CAwCG,8BAA8B+7C,MAAM,MAniBtC,CAqiBC0l2B,EAAO1n5B,MAER,SAAS0n5B,EAAO1n5B,GAGjB0n5B,EAAMoE,QAAU,SAAiBhx4B,GAC/B,IAMIii5B,EAAItu3B,EAAGu0J,EANPvoH,EAAI,EACJipF,EAAM,CACR,mBAAoB,kBAAmB,mBACtC,kBAAmB,qBAAwB,mBAE1Cs5vB,EAAM,kBAIV,IAFAh6tB,GAAOv0J,EAAIsu3B,EAAKji5B,GAAK,IACrBkoL,IAAQ+5tB,EAAK,IAAO/85B,EAAKkuG,IAAI80F,GACtBvoH,EAAI,EAAGA,IACZui1B,GAAOt5vB,EAAIjpF,KAAOhsC,EACpB,OAAOzuC,EAAKkuG,IAAI,mBAAqB8uzB,EAAMD,GAAM/5tB,GAKnD0ktB,EAAMiE,QAAU,SAAiB7w4B,GAC/B,IAYOijJ,EAAGk/vB,EAAIl4wB,EAZVrsE,EAAI,EAAE,kBAAmB,mBAAoB,mBACxC,kBAAmB,mBAAoB,oBACtC,mBAAoB,mBAE1B03E,EAAI,EAAE,iBAAkB,oBAAqB,oBACvC,kBAAmB,kBAAoB,mBACvC,mBAAoB,mBAC1B8swB,GAAO,EACP7z5B,EAAI,EACJ8z5B,EAAO,EACPC,EAAO,EACP3u3B,EAAI3zB,EAER,GAAI2zB,GAAK,EAAG,CAEV,KADAs2G,EAAMt2G,EAAI,EAAI,QAKZ,OAAO1uC,IAHPm95B,GAAc,EAAJzu3B,GAAc,EAAL,GAAUzuC,EAAKqhf,GAAKrhf,EAAKq1f,IAAIr1f,EAAKqhf,GAAKt8V,GAC1Dt2G,EAAI,EAAIA,EAKZwu3B,EAAKxu3B,EAEHsvH,EADEtvH,EAAI,EACFA,KAECA,GAAKplC,GAAS,EAAJolC,GAAS,GAAK,EAE/B,IAAK,IAAIxoC,EAAI,EAAGA,EAAI,IAAKA,EACvBm35B,GAAQA,EAAO1k1B,EAAEzyE,IAAM83J,EACvBo/vB,EAAOA,EAAOp/vB,EAAI3N,EAAEnqJ,GAGtB,GADA8+I,EAAMq4wB,EAAOD,EAAO,EAChBF,EAAKxu3B,EACPs2G,GAAOk4wB,OACF,GAAIA,EAAKxu3B,EACd,IAASxoC,EAAI,EAAGA,EAAIoD,IAAKpD,EACvB8+I,GAAOt2G,EACPA,IAMJ,OAHIyu3B,IACFn4wB,EAAMm4wB,EAAOn4wB,GAERA,GAMT2iwB,EAAM2V,OAAS,SAAgBz05B,EAAGkS,GAChC,OAAO4s4B,EAAM4V,YAAY105B,EAAGkS,GAAK4s4B,EAAMiE,QAAQ/i5B,IAKjD8+4B,EAAM4V,YAAc,SAAqB105B,EAAGkS,GAC1C,IAWIyi5B,EAXAC,EAAM9V,EAAMoE,QAAQlj5B,GACpB2xJ,EAAK3xJ,EACLiG,EAAM,EAAIjG,EACVozJ,EAAMntJ,EACNhG,EAAIiS,EAAI,EAAIlS,EACZE,EAAI,EAAI,MACRC,EAAI,EAAIF,EACRyf,EAAIvf,EACJ9C,EAAI,EAEJw35B,KAA4C,IAAjCz95B,EAAKkuG,IAAKtlG,GAAK,EAAKA,EAAI,EAAIA,GAAe,GAAJA,EAAU,IAGhE,GAAIkS,EAAI,GAAKlS,GAAK,EAChB,OAAOtJ,IACF,GAAIwb,EAAIlS,EAAI,EAAG,CACpB,KAAO3C,GAAKw35B,EAAOx35B,IACjB4I,GAAOmtJ,GAAOlhJ,IAAMy/I,EAEtB,OAAQ1rJ,EAAM7O,EAAKmkG,KAAKrpF,EAAIlS,EAAI5I,EAAKkuG,IAAIpzF,GAAM0i5B,GAGjD,KAAOv35B,GAAKw35B,EAAOx35B,IAMjBqiB,IADAvf,EAAI,GAFJA,GAFAw05B,GAAMt35B,GAAKA,EAAI2C,IAENG,GADTF,GAAK,MAELC,EAAID,EAAI005B,EAAKz05B,GAKf,OAAQ,EAAIwf,EAAItoB,EAAKmkG,KAAKrpF,EAAIlS,EAAI5I,EAAKkuG,IAAIpzF,GAAM0i5B,IAInD9V,EAAMgW,YAAc,SAAqBr05B,GACvC,OAAOA,EAAI,EAAI/J,IAAMoo5B,EAAMoE,QAAQzi5B,EAAI,IAIzCq+4B,EAAMiW,UAAY,SAAmBt05B,GACnC,OAAOA,EAAI,EAAI/J,IAAMoo5B,EAAMiE,QAAQti5B,EAAI,IAIzCq+4B,EAAMkW,YAAc,SAAqBv05B,EAAGgM,GAE1C,OAAQhM,EAAI,KAAOgM,EAAI,IACjBrV,EAAKmkG,IAAIujzB,EAAMmW,cAAcx05B,EAAGgM,IAC/Bqy4B,EAAMiW,UAAUt05B,GAAKq+4B,EAAMiW,UAAUto5B,GAAMqy4B,EAAMiW,UAAUt05B,EAAIgM,IAIxEqy4B,EAAMmW,cAAgB,SAAuBx05B,EAAGgM,GAC9C,OAAOqy4B,EAAMgW,YAAYr05B,GAAKq+4B,EAAMgW,YAAYro5B,GAAKqy4B,EAAMgW,YAAYr05B,EAAIgM,IAK7Eqy4B,EAAMoW,YAAc,SAAqBz05B,EAAGgM,GAC1C,OAAOqy4B,EAAMiW,UAAUt05B,GAAKq+4B,EAAMiW,UAAUt05B,EAAIgM,IAKlDqy4B,EAAMqW,OAAS,SAAgBjj5B,EAAG2zB,GAEhC,KAAI3zB,GAAK,GAAK2zB,GAAK,GAGnB,OAAQ3zB,EAAI2zB,EAAI,IACVzuC,EAAKmkG,IAAIujzB,EAAMsW,OAAOlj5B,EAAG2zB,IACzBi52B,EAAMiE,QAAQ7w4B,GAAK4s4B,EAAMiE,QAAQl92B,GAAKi52B,EAAMiE,QAAQ7w4B,EAAI2zB,IAKhEi52B,EAAMsW,OAAS,SAAgBlj5B,EAAG2zB,GAChC,OAAOi52B,EAAMoE,QAAQhx4B,GAAK4s4B,EAAMoE,QAAQr92B,GAAKi52B,EAAMoE,QAAQhx4B,EAAI2zB,IAMjEi52B,EAAMuW,OAAS,SAAgBnj5B,EAAGlS,EAAGC,GACnC,IAOI0/J,EAAIulpB,EAAI9xpB,EAAK1zI,EAPb414B,EAAQ,MACR7o5B,EAAI,EACJ8o5B,EAAMv15B,EAAIC,EACVu15B,EAAMx15B,EAAI,EACVy15B,EAAMz15B,EAAI,EACVE,EAAI,EACJC,EAAI,EAAIo15B,EAAMrj5B,EAAIsj5B,EAStB,IALIp+5B,EAAKijB,IAAIla,GAAKm15B,IAChBn15B,EAAIm15B,GAEN514B,EADAvf,EAAI,EAAIA,EAGDsM,GAAK,MAIVtM,EAAI,GAFJ+kzB,EAAKz4yB,GAAKxM,EAAIwM,GAAKyF,IAAMuj5B,GADzB91vB,EAAK,EAAIlzJ,KAC6BzM,EAAI2/J,KAE7Bx/J,EACT/I,EAAKijB,IAAIla,GAAKm15B,IAChBn15B,EAAIm15B,GACNp15B,EAAI,EAAIglzB,EAAKhlzB,EACT9I,EAAKijB,IAAIna,GAAKo15B,IAChBp15B,EAAIo15B,GAEN514B,IADAvf,EAAI,EAAIA,GACCD,EAGTC,EAAI,GAFJ+kzB,IAAOllzB,EAAIyM,IAAM8o5B,EAAM9o5B,GAAKyF,IAAMlS,EAAI2/J,IAAO61vB,EAAM71vB,KAEtCx/J,EACT/I,EAAKijB,IAAIla,GAAKm15B,IAChBn15B,EAAIm15B,GACNp15B,EAAI,EAAIglzB,EAAKhlzB,EACT9I,EAAKijB,IAAIna,GAAKo15B,IAChBp15B,EAAIo15B,GAGN514B,GADA0zI,GADAjzJ,EAAI,EAAIA,GACED,IAEN9I,EAAKijB,IAAI+4I,EAAM,GAAO,OAvBX3mJ,KA2BjB,OAAOiT,GAKTo/3B,EAAM4W,UAAY,SAAmB5l1B,EAAG9vE,GACtC,IAIIkS,EAAQkU,EAAGquI,EAAG27Y,EAAIulX,EAAMC,EAJxB/j1B,EAAI,EACJgk1B,EAAK715B,EAAI,EACT815B,EAAM,KACNC,EAAMjX,EAAMoE,QAAQlj5B,GAGxB,GAAI8vE,GAAK,EACP,OAAO14E,EAAKC,IAAI,IAAK2I,EAAI,IAAM5I,EAAK8oK,KAAKlgK,IAC3C,GAAI8vE,GAAK,EACP,OAAO,EAmBT,IAlBI9vE,EAAI,GACN215B,EAAOv+5B,EAAKkuG,IAAIuwzB,GAChBD,EAAOx+5B,EAAKmkG,IAAIs6zB,GAAMF,EAAO,GAAKI,GAClC3lX,EAAMtge,EAAI,GAAOA,EAAI,EAAIA,EAEzB59D,GAAK,QAAc,QADnBkU,EAAIhvB,EAAK8oK,MAAM,EAAI9oK,EAAKkuG,IAAI8qc,OACG,EAAIhqhB,GAAK,OAAc,OAAJA,IAAgBA,EAC9D0pD,EAAI,KACN59D,GAAKA,GACPA,EAAI9a,EAAKC,IAAI,KACA2I,EAAI5I,EAAKy1O,IAAI,EAAI,GAAK,EAAI7sO,GAAKkS,GAAK,EAAI9a,EAAK8oK,KAAKlgK,IAAK,KAIlEkS,EADE49D,GADJ1pD,EAAI,EAAIpmB,GAAK,KAAY,IAAJA,IAEf5I,EAAKy1O,IAAI/8J,EAAI1pD,EAAG,EAAIpmB,GAEpB,EAAI5I,EAAKkuG,IAAI,GAAKx1B,EAAI1pD,IAAM,EAAIA,IAGlCyrD,EAAI,GAAIA,IAAK,CACjB,GAAI3/D,GAAK,EACP,OAAO,EAUT,IAHAA,GAAMkU,GADNquI,GALMqqvB,EAAM4V,YAAY105B,EAAGkS,GAAK49D,IAE9B1pD,EADEpmB,EAAI,EACF415B,EAAOx+5B,EAAKmkG,MAAMrpF,EAAI2j5B,GAAMA,GAAMz+5B,EAAKkuG,IAAIpzF,GAAKyj5B,IAEhDv+5B,EAAKmkG,KAAKrpF,EAAI2j5B,EAAKz+5B,EAAKkuG,IAAIpzF,GAAK6j5B,MAExB,EAAI,GAAM3+5B,EAAKE,IAAI,EAAGm9J,IAAMz0J,EAAI,GAAKkS,EAAI,OAC/C,IACPA,EAAI,IAAOA,EAAIkU,IACbhvB,EAAKijB,IAAI+L,GAAK0v4B,EAAM5j5B,EACtB,MAGJ,OAAOA,GAKT4s4B,EAAMkX,IAAM,SAAa9j5B,GACvB,IAcIkU,EAAGqosB,EAAIr0hB,EAAKj+C,EAdZ2e,EAAM,EAAE,mBAAoB,kBAAuB,qBAC3C,oBAAuB,oBAAqB,oBAC7C,oBAAqB,oBAAqB,kBAC1C,iBAAmB,iBAAkB,gBACrC,eAAgB,gBAAiB,gBAChC,eAAgB,aAAe,aAC/B,YAAc,WAAa,YAC3B,WAAa,QAAU,UACvB,UAAY,OAAS,SACrB,QACRjpF,EAAIipF,EAAI5+J,OAAS,EACjB+55B,GAAQ,EACR915B,EAAI,EACJsyJ,EAAK,EAWT,IARIvgJ,EAAI,IACNA,GAAKA,EACL+j5B,GAAQ,GAIVxnM,EAAK,GADLrosB,EAAI,GAAK,EAAIlU,IACA,EAEP2/D,EAAI,EAAGA,IACXuoH,EAAMj6L,EACNA,EAAIsutB,EAAKtutB,EAAIsyJ,EAAKqI,EAAIjpF,GACtB4gF,EAAK2nC,EAIP,OADAj+C,EAAM/1H,EAAIhvB,EAAKmkG,KAAKrpF,EAAIA,EAAI,IAAO4oJ,EAAI,GAAK2zjB,EAAKtutB,GAAKsyJ,GAC/CwjwB,EAAQ95wB,EAAM,EAAI,EAAIA,GAK/B2iwB,EAAMoX,KAAO,SAAchk5B,GACzB,OAAO,EAAI4s4B,EAAMkX,IAAI9j5B,IAKvB4s4B,EAAMqX,QAAU,SAAiBrm1B,GAC/B,IACI59D,EAAGu5B,EAAKrlB,EAAGgqhB,EADXv+d,EAAI,EAER,GAAI/B,GAAK,EACP,OAAQ,IACV,GAAIA,GAAK,EACP,OAAO,IAKT,IAJAsge,EAAMtge,EAAI,EAAKA,EAAI,EAAIA,EAEvB59D,GAAK,SAAY,QAAc,QAD/BkU,EAAIhvB,EAAK8oK,MAAM,EAAI9oK,EAAKkuG,IAAI8qc,EAAK,OAEhB,EAAIhqhB,GAAK,OAAc,OAAJA,IAAgBA,GAC7CyrD,EAAI,EAAGA,IAEZ3/D,IADAu5B,EAAMqz2B,EAAMoX,KAAKhk5B,GAAKk+hB,IACV,mBAAsBh5iB,EAAKmkG,KAAKrpF,EAAIA,GAAKA,EAAIu5B,GAE3D,OAAQqkC,EAAI,EAAK59D,GAAKA,GAKxB4s4B,EAAMsX,SAAW,SAAkBtm1B,EAAG9vE,EAAGC,GACvC,IAIIo25B,EAAKC,EAAKlmX,EAAIhqhB,EAAGquI,EAAQviJ,EAAGggJ,EAAIxyI,EAAG2vI,EAAGumwB,EAJtCE,EAAM,KACND,EAAK715B,EAAI,EACTwve,EAAKvve,EAAI,EACT4xE,EAAI,EAER,GAAI/B,GAAK,EACP,OAAO,EACT,GAAIA,GAAK,EACP,OAAO,EAwBT,IAvBI9vE,GAAK,GAAKC,GAAK,GACjBmwiB,EAAMtge,EAAI,GAAOA,EAAI,EAAIA,EAEzB59D,GAAK,QAAc,QADnBkU,EAAIhvB,EAAK8oK,MAAM,EAAI9oK,EAAKkuG,IAAI8qc,OACG,EAAIhqhB,GAAI,OAAc,OAAJA,IAAgBA,EAC7D0pD,EAAI,KACN59D,GAAKA,GACPggJ,GAAMhgJ,EAAIA,EAAI,GAAK,EACnBwN,EAAI,GAAK,GAAK,EAAI1f,EAAI,GAAM,GAAK,EAAIC,EAAI,IACzCovJ,EAAKn9I,EAAI9a,EAAK8oK,KAAKhO,EAAKxyI,GAAKA,GAAM,GAAK,EAAIzf,EAAI,GAAK,GAAK,EAAID,EAAI,KAC7DkyJ,EAAK,EAAI,EAAI,GAAK,EAAIxyI,IAC3BxN,EAAIlS,GAAKA,EAAIC,EAAI7I,EAAKmkG,IAAI,EAAI8zD,MAE9BgnwB,EAAMj/5B,EAAKkuG,IAAItlG,GAAKA,EAAIC,IACxBq25B,EAAMl/5B,EAAKkuG,IAAIrlG,GAAKD,EAAIC,IAKtBiS,EADE49D,GAHJ1pD,EAAIhvB,EAAKmkG,IAAIv7F,EAAIq25B,GAAOr25B,IAExBqvJ,EAAIjpI,GADJquI,EAAIr9J,EAAKmkG,IAAIt7F,EAAIq25B,GAAOr25B,IAGlB7I,EAAKy1O,IAAI7sO,EAAIqvJ,EAAIv/E,EAAG,EAAI9vE,GAExB,EAAI5I,EAAKy1O,IAAI5sO,EAAIovJ,GAAK,EAAIv/E,GAAI,EAAI7vE,IAE1C215B,GAAQ9W,EAAMoE,QAAQlj5B,GAAK8+4B,EAAMoE,QAAQjj5B,GAAK6+4B,EAAMoE,QAAQlj5B,EAAIC,GAC1D4xE,EAAI,GAAIA,IAAK,CACjB,GAAU,IAAN3/D,GAAiB,IAANA,EACb,OAAOA,EAST,IALAA,GAAMkU,GADNquI,GAFMqqvB,EAAMyX,MAAMrk5B,EAAGlS,EAAGC,GAAK6vE,IAC7B1pD,EAAIhvB,EAAKmkG,IAAIs6zB,EAAKz+5B,EAAKkuG,IAAIpzF,GAAKs9d,EAAKp4e,EAAKkuG,IAAI,EAAIpzF,GAAK0j5B,MAExC,EAAI,GAAMx+5B,EAAKE,IAAI,EAAGm9J,GAAKohwB,EAAK3j5B,EAAIs9d,GAAM,EAAIt9d,QACpD,IACPA,EAAI,IAAOA,EAAIkU,IACblU,GAAK,IACPA,EAAI,IAAOA,EAAIkU,EAAI,IACjBhvB,EAAKijB,IAAI+L,GAAK0v4B,EAAM5j5B,GAAK2/D,EAAI,EAC/B,MAEJ,OAAO3/D,GAKT4s4B,EAAMyX,MAAQ,SAAerk5B,EAAGlS,EAAGC,GAEjC,IAAIu25B,EAAY,IAANtk5B,GAAiB,IAANA,EAAY,EAC/B9a,EAAKmkG,IAAIujzB,EAAMoE,QAAQlj5B,EAAIC,GAAK6+4B,EAAMoE,QAAQlj5B,GACrC8+4B,EAAMoE,QAAQjj5B,GAAKD,EAAI5I,EAAKkuG,IAAIpzF,GAAKjS,EACrC7I,EAAKkuG,IAAI,EAAIpzF,IACxB,QAAIA,EAAI,GAAKA,EAAI,KAEbA,GAAKlS,EAAI,IAAMA,EAAIC,EAAI,GAElBu25B,EAAK1X,EAAMuW,OAAOnj5B,EAAGlS,EAAGC,GAAKD,EAE/B,EAAIw25B,EAAK1X,EAAMuW,OAAO,EAAInj5B,EAAGjS,EAAGD,GAAKC,IAM9C6+4B,EAAM2X,MAAQ,SAAeh25B,EAAGgM,GAC9B,IAAIgoJ,EAAGh6J,EAAGyX,EAAG2zB,EAAG2hH,EAGhB,GAFK/6I,IACHA,EAAIhM,GACFA,EACF,OAAOq+4B,EAAMpm5B,OAAO+H,EAAGgM,GAAG,WAAa,OAAOqy4B,EAAM2X,WACtD,GACEhiwB,EAAIr9J,EAAKy1E,SACTpyE,EAAI,QAAUrD,EAAKy1E,SAAW,IAG9B26E,GAFAt1I,EAAIuiJ,EAAI,SAEAviJ,GADR2zB,EAAIzuC,EAAKijB,IAAI5f,GAAK,UACD,KAAUorC,EAAI,OAAU3zB,SAClCs1I,EAAI,SAAYA,EAAI,QAAW/sJ,EAAIA,GAAK,EAAIrD,EAAKkuG,IAAImvD,GAAKA,EAAIA,IACvE,OAAOh6J,EAAIg6J,GAKbqqvB,EAAM4X,MAAQ,SAAevhyB,EAAO10H,EAAGgM,GACrC,IACIop5B,EAAIc,EAAIliwB,EAAGh6J,EAAGyX,EAAG8+4B,EADjB4F,EAAQzhyB,EAMZ,GAJK1oH,IACHA,EAAIhM,GACD00H,IACHA,EAAQ,GACN10H,EAGF,OAFAuw5B,EAAMlS,EAAMqR,MAAM1v5B,EAAEgM,IAChByj5B,OAAM,WAAa,OAAOpR,EAAM4X,MAAMvhyB,MACnC67xB,EAEL77xB,EAAQ,IACVA,GAAS,GACX0gyB,EAAK1gyB,EAAQ,EAAI,EACjBwhyB,EAAK,EAAIv/5B,EAAK8oK,KAAK,EAAI21vB,GACvB,EAAG,CACD,GAEEp75B,EAAI,EAAIk85B,GADRzk5B,EAAI4s4B,EAAM2X,eAEJh85B,GAAK,GACbA,GAAIA,EAAIA,EACRg6J,EAAIr9J,EAAKy1E,eACH4nF,EAAI,EAAI,KAAQr9J,EAAKy1O,IAAI36N,EAAG,IAC5B9a,EAAKkuG,IAAImvD,GAAK,GAAMviJ,EAAEA,EAAI2j5B,GAAM,EAAIp75B,EAAIrD,EAAKkuG,IAAI7qG,KAEzD,GAAI06H,GAASyhyB,EACX,OAAOf,EAAKp75B,EAEd,GACEg6J,EAAIr9J,EAAKy1E,eACG,IAAN4nF,GACR,OAAOr9J,EAAKy1O,IAAIp4E,EAAG,EAAImiwB,GAASf,EAAKp75B,GAKvC,SAAU8xC,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CpS,EAAM5h5B,GAAGg05B,GAAY,WACnB,OAAOpS,EACHA,EAAMz74B,IAAIhJ,MAAM,SAAStE,GAAS,OAAO+o5B,EAAMoS,GAAUn75B,QAH1B,CAKpCw2C,EAAMlvC,IANX,CAOG,wCAAwC+7C,MAAM,MAGjD,SAAU7M,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAK,SAAU6z5B,GAC/CpS,EAAM5h5B,GAAGg05B,GAAY,WACnB,OAAOpS,EAAMA,EAAMoS,GAAU5u5B,MAAM,KAAMvE,aAFN,CAIpCwuC,EAAMlvC,IALX,CAMG,QAAQ+7C,MAAM,MAhdhB,CAkdC0l2B,EAAO1n5B,MACR,SAAS0n5B,EAAO1n5B,GAgmCjB,SAASy/5B,EAAY3k5B,GAAK,OAAOA,EAAI9a,EAAKijB,IAAInI,GAwC9C,SAAS4k5B,EAAWznwB,EAAG0nwB,EAAI5gwB,GACzB,IAAI6gwB,EAAO,GACPC,EAAQ,EAERC,GAAM,GACNC,GAAM,GACNC,EAAK,GACLr/vB,EAAO,EACPs/vB,EAAO,EACPC,EAAS,EACTC,EAAS,EACTC,EAAO,CACT,kBACA,kBACA,kBACA,kBACA,kBACA,mBAEEC,EAAO,CACT,mBACA,mBACA,mBACA,mBACA,kBACA,oBAGEC,EAAW,GAAJrowB,EAKX,GAAIqowB,GAAQ3/vB,EACV,OAAO,EAKT,IAUI4/vB,EAVAC,EAAO,EAAI9Y,EAAMsE,OAAO3D,IAAIiY,EAAM,EAAG,EAAG,EAAG,GAAK,EAGlDE,EADEA,GAAQxg6B,EAAKmkG,IAAI47zB,EAAKhhwB,GACjB/+J,EAAKy1O,IAAI+qrB,EAAMzhwB,GAEf,EA2BT,IARA,IAAI0hwB,EAAMH,EACNI,GAAQ//vB,EAAK2/vB,IAbfC,EADEtowB,EAAIgowB,EACEC,EAEAC,GAYNQ,EAAMF,EAAMC,EACZE,EAAS,EAITC,EAAM9hwB,EAAK,EACN+hwB,EAAK,EAAGA,GAAMP,EAAOO,IAAM,CAQlC,IAPA,IAAIC,EAAQ,EACRn45B,EAAI,IAAO+35B,EAAMF,GAIjB535B,EAAI,IAAO835B,EAAMF,GAEZxgW,EAAK,EAAGA,GAAM2/V,EAAM3/V,IAAM,CACjC,IAAIxlf,EASAnsD,EAAK1lB,EADDC,GAPJg35B,EAAQ5/V,EAELmgW,GADL3l1B,EAAKml1B,EAAO3/V,EAAM,GACN,IAGNmgW,GADN3l1B,EAAIwlf,GACS,IAQX+gW,EAAQ1y4B,EAAKA,EACjB,GAAI0y4B,EAAQhB,EACV,MAEF,IAMIiB,EANQ,EAAIvZ,EAAMsE,OAAO3D,IAAI/53B,EAAI,EAAG,EAAG,EAAG,GAMxB,GALV,EAAIo53B,EAAMsE,OAAO3D,IAAI/53B,EAAI2pI,EAAG,EAAG,EAAG,GAKP,GACnCgpwB,GAAUjh6B,EAAKmkG,IAAI27zB,EAAKe,KAE1BE,GADAE,EAAUZ,EAAK5l1B,EAAE,GAAKz6E,EAAKmkG,KAAM,GAAM68zB,GAAWhh6B,EAAKy1O,IAAIwrrB,EAAQJ,IAKvED,GADAG,GAAY,EAAMl45B,EAAKk2J,EAAM/+J,EAAK8oK,KAAK,EAAI9oK,EAAKqhf,IAEhDo/a,EAAME,EACNA,GAAOD,EAKT,OADAF,GAAQI,IACI5g6B,EAAKmkG,IAAI27zB,EAAKH,GACjB,GAETa,EAAOxg6B,EAAKy1O,IAAI+qrB,EAAMb,KACV,EACH,EACFa,EAGT,SAASU,EAAUxo1B,EAAG5vE,EAAGzF,GACvB,IAAI01iB,EAAK,cACLooX,EAAK,cACL1lrB,GAAM,EACNhtN,EAAK,cACLitN,GAAM,cACNhtN,EAAK,cACLitN,GAAM,cACN1sN,EAAK,aACL2sN,GAAM,iBACNwlrB,EAAK,eACL3lX,EAAK,MACLC,EAAK,MACLC,EAAK,MACL0lX,EAAK,MACLC,EAAK,OACLC,EAAO,IAEPtgwB,EAAK,GAAM,GAAMvoF,EACjBuk1B,EAAKj95B,EAAK8oK,KAAK9oK,EAAKkuG,IAAI,GAAO+yD,EAAKA,KACpCjyI,EAAIiu4B,MAAUA,EAAKrhrB,EAAKD,GAAMshrB,EAAKvhrB,GAAMuhrB,EAAKxhrB,GAAMwhrB,EAAKlkX,OACnDkkX,EAAKmE,EAAKny4B,GAAMgu4B,EAAKvu4B,GAAMuu4B,EAAKxu4B,GAAMwu4B,EAAKkE,GACjD995B,EAAIk+5B,IAAMvy4B,IAAMA,EAAIA,EAAIA,EAAIA,GAAK3rB,EAAI,GACzC,IAAI+sJ,EAAIqrZ,EAAKC,EAAK1shB,EAElB,OADI3rB,EAAIk+5B,IAAMnxwB,IAAMurZ,EAAKt4iB,EAAIg+5B,EAAKry4B,EAAI3rB,GAC/B2rB,GAAKohI,EAAIpwJ,EAAKkuG,IAAIplG,EAAI,GAAOw45B,IA7xCtC,SAAU9l5B,GACR,IAAK,IAAIvV,EAAI,EAAGA,EAAIuV,EAAK1W,OAAQmB,KAAK,SAAUknB,GAE9Cu63B,EAAMv63B,GAAQ,SAASvkB,EAAGC,EAAGC,GAC3B,OAAM7F,gBAAgB0D,UAAU63W,QAEhCv7W,KAAKk5O,GAAKvzO,EACV3F,KAAK6+a,GAAKj5a,EACV5F,KAAKwztB,GAAK3ttB,EACH7F,MAJE,IAAI0D,UAAU63W,OAAO51W,EAAGC,EAAGC,IAOtC4+4B,EAAM5h5B,GAAGqnB,GAAQ,SAASvkB,EAAGC,EAAGC,GAC9B,IAAI045B,EAAU9Z,EAAMv63B,GAAMvkB,EAAGC,EAAGC,GAEhC,OADA045B,EAAQvj3B,KAAOh7C,KACRu+5B,GAGT9Z,EAAMv63B,GAAM/rB,UAAUg+L,OAAS,SAAStuL,GACtC,IAAIlI,EAAI3F,KAAKk5O,GACTtzO,EAAI5F,KAAK6+a,GACTh5a,EAAI7F,KAAKwztB,GACb,OAAI3ltB,EACK424B,EAAMoR,MAAMho5B,GAAK,WACtB,OAAO424B,EAAMv63B,GAAMiyK,OAAOx2L,EAAGC,EAAGC,MAG3B4+4B,EAAMv63B,GAAMiyK,OAAOx2L,EAAGC,EAAGC,IAGpC,SAAUs1rB,GACR,IAAK,IAAIn4rB,EAAI,EAAGA,EAAIm4rB,EAAKt5rB,OAAQmB,KAAK,SAAUw75B,GAC9C/Z,EAAMv63B,GAAM/rB,UAAUqg6B,GAAU,SAAS3m5B,GACvC,IAAIlS,EAAI3F,KAAKk5O,GACTtzO,EAAI5F,KAAK6+a,GACTh5a,EAAI7F,KAAKwztB,GAGb,OAFK37sB,GAAW,IAANA,IACRA,EAAI7X,KAAKg7C,MACM,kBAANnjC,EACF4s4B,EAAM5h5B,GAAGmG,IAAIhI,KAAK6W,GAAG,SAASA,GACnC,OAAO4s4B,EAAMv63B,GAAMs04B,GAAQ3m5B,EAAGlS,EAAGC,EAAGC,MAGjC4+4B,EAAMv63B,GAAMs04B,GAAQ3m5B,EAAGlS,EAAGC,EAAGC,IAZF,CAcnCs1rB,EAAKn4rB,IAfV,CAgBG,cAAc+7C,MAAM,MAEvB,SAAUo8oB,GACR,IAAK,IAAIn4rB,EAAI,EAAGA,EAAIm4rB,EAAKt5rB,OAAQmB,KAAK,SAAUw75B,GAC9C/Z,EAAMv63B,GAAM/rB,UAAUqg6B,GAAU,WAC9B,OAAO/Z,EAAMv63B,GAAMs04B,GAAQx+5B,KAAKk5O,GAAIl5O,KAAK6+a,GAAI7+a,KAAKwztB,KAFhB,CAInCr4B,EAAKn4rB,IALV,CAMG,4BAA4B+7C,MAAM,MArDD,CAsDnCxmC,EAAKvV,IAvDV,CAwDG,sMAID+7C,MAAM,MAKR0l2B,EAAM/qtB,OAAO+qtB,EAAMpjJ,KAAM,CACvBz9C,IAAK,SAAa/rsB,EAAG66e,EAAO2uQ,GAE1B,OAAIxpvB,EAAI,GAAKA,EAAI,EACR,EAEI,GAAT66e,GAAsB,GAAR2uQ,EACT,EAEL3uQ,EAAQ,KAAO2uQ,EAAO,IAChBtkwB,EAAKy1O,IAAI36N,EAAG66e,EAAQ,GAAK31f,EAAKy1O,IAAI,EAAI36N,EAAGwpvB,EAAO,GACpDojJ,EAAMqW,OAAOpoa,EAAO2uQ,GAEjBtkwB,EAAKmkG,KAAKwxZ,EAAQ,GAAK31f,EAAKkuG,IAAIpzF,IACtBwpvB,EAAO,GAAKtkwB,EAAKkuG,IAAI,EAAIpzF,GAC1B4s4B,EAAMsW,OAAOroa,EAAO2uQ,KAIxC+jJ,IAAK,SAAavt4B,EAAG66e,EAAO2uQ,GAC1B,OAAQxpvB,EAAI,GAAKA,EAAI,EAAe,GAATA,EAAI,GAAS4s4B,EAAMyX,MAAMrk5B,EAAG66e,EAAO2uQ,IAGhErtN,IAAK,SAAan8hB,EAAG66e,EAAO2uQ,GAC1B,OAAOojJ,EAAMsX,SAASlk5B,EAAG66e,EAAO2uQ,IAGlC/lkB,KAAM,SAAco3T,EAAO2uQ,GACzB,OAAO3uQ,GAASA,EAAQ2uQ,IAG1BkpJ,OAAQ,SAAgB73Z,EAAO2uQ,GAC7B,OAAOojJ,EAAMsX,SAAS,GAAKrpa,EAAO2uQ,IAGpCrmoB,KAAM,SAAc03X,EAAO2uQ,GACzB,OAAQ3uQ,EAAQ,IAAQA,EAAQ2uQ,EAAO,IAIzCllkB,OAAQ,SAAgBu2T,EAAO2uQ,GAC7B,IAAIjnmB,EAAIqqvB,EAAM4X,MAAM3pa,GACpB,OAAOt4V,GAAKA,EAAIqqvB,EAAM4X,MAAMh7J,KAG9Bq2J,SAAU,SAAkBhla,EAAO2uQ,GACjC,OAAQ3uQ,EAAQ2uQ,GAAStkwB,EAAKy1O,IAAIkgR,EAAQ2uQ,EAAM,IAAM3uQ,EAAQ2uQ,EAAO,OAKzEojJ,EAAM/qtB,OAAO+qtB,EAAMmD,SAAU,CAI3BhkM,IAAK,SAAa/rsB,EAAG4m5B,EAAKC,GACxB,IAAIjp1B,EAEJ,OAAI59D,EAAI,EACC,EAEL4m5B,GAAO,EACC,IAAN5m5B,GAAW4m5B,EAAM,EACZ3h6B,IAEC,IAAN+a,GAAmB,IAAR4m5B,EACN,EAED,EAAIha,EAAMqW,OAAO2D,EAAM,EAAGC,EAAM,GAChC3h6B,EAAKy1O,IAAIisrB,EAAMC,EAAKD,EAAM,GAC1B1h6B,EAAKy1O,IAAI36N,EAAI4m5B,EAAI,EAAK,GACtB1h6B,EAAKy1O,IAAK,EAAKisrB,EAAMC,EAAO7m5B,IAAM4m5B,EAAMC,GAAO,IAGzDjp1B,EAAKgp1B,EAAM5m5B,GAAM6m5B,EAAM7m5B,EAAI4m5B,GAEvBA,GADAC,GAAOA,EAAM7m5B,EAAI4m5B,IACP,EACHha,EAAMiB,SAAS9hM,KAAK66M,EAAM,GAAK,GAAIA,EAAMC,EAAM,GAAK,EAAGjp1B,KAGpE2v0B,IAAK,SAAavt4B,EAAG4m5B,EAAKC,GACxB,OAAI7m5B,EAAI,EACC,EACF4s4B,EAAMyX,MAAOuC,EAAM5m5B,GAAM4m5B,EAAM5m5B,EAAI6m5B,GAAMD,EAAM,EAAGC,EAAM,IAGjE1qX,IAAK,SAAan8hB,EAAG4m5B,EAAKC,GACxB,OAAOA,GAAOD,GAAO,EAAIha,EAAMsX,SAASlk5B,EAAG4m5B,EAAM,EAAGC,EAAM,GAAK,KAGjEpjuB,KAAM,SAAcmjuB,EAAKC,GACvB,OAAQA,EAAM,EAAKA,GAAOA,EAAM,QAAK5i6B,GAGvCk/H,KAAM,SAAcyjyB,EAAKC,GACvB,OAAQD,EAAM,EAAMC,GAAOD,EAAM,IAAOA,GAAOC,EAAM,SAAM5i6B,GAI7DqgM,OAAQ,SAAgBsiuB,EAAKC,GAG3B,OAFgC,EAAvBja,EAAM4X,MAAMoC,EAAM,GAEdA,GADmB,EAAvBha,EAAM4X,MAAMqC,EAAM,GACDA,IAG5BhH,SAAU,SAAkB+G,EAAKC,GAC/B,KAAIA,GAAO,GAEX,OAAO,EAAIA,EAAMA,GAAOD,EAAMC,EAAM,IAC/BD,GAAOC,EAAM,IAAMA,EAAM,IAAMA,EAAM,OAM9Cja,EAAM/qtB,OAAO+qtB,EAAMka,OAAQ,CACzB/6M,IAAK,SAAa/rsB,EAAG60O,EAAOm/D,GAC1B,OAAIA,EAAQ,EAAY,EAEhBA,GAAS9uT,EAAKy1O,IAAI36N,EAAI60O,EAAO,GAAK3vP,EAAKy1O,IAAIq5E,EAAO,IAAO9uT,EAAKqhf,IAGxEgna,IAAK,SAAavt4B,EAAG60O,EAAOm/D,GAC1B,OAAO9uT,EAAK8+4B,MAAMhk4B,EAAI60O,GAASm/D,GAAS9uT,EAAKqhf,GAAK,IAGpD41D,IAAK,SAASv+d,EAAGi3K,EAAOm/D,GACtB,OAAOn/D,EAAQm/D,EAAQ9uT,EAAKm2f,IAAIn2f,EAAKqhf,IAAM3oa,EAAI,MAGjD800B,OAAQ,SAAgB79pB,EAAOm/D,GAC7B,OAAOn/D,GAGT1xH,KAAM,SAAc0xH,EAAOm/D,GACzB,OAAOn/D,GAGTvwD,OAAQ,SAAgBuwD,EAAOm/D,GAC7B,OAAO44lB,EAAM2X,QACTr/5B,EAAK8oK,KAAK,GAAK,EAAI4+uB,EAAM4X,MAAM,MAASxwmB,EAAQn/D,KAOxD+3pB,EAAM/qtB,OAAO+qtB,EAAMqB,UAAW,CAC5BliM,IAAK,SAAa/rsB,EAAGmu4B,GACnB,OAAInu4B,EAAI,EACC,EACK,IAANA,GAAmB,IAARmu4B,EAAa,GAC5Bjp5B,EAAKmkG,KAAK8kzB,EAAM,EAAI,GAAKjp5B,EAAKkuG,IAAIpzF,GAAKA,EAAI,EAAKmu4B,EAAM,EAC7Cjp5B,EAAKkuG,IAAI,GAAKw5yB,EAAMoE,QAAQ7C,EAAM,KAGjDZ,IAAK,SAAavt4B,EAAGmu4B,GACnB,OAAInu4B,EAAI,EACC,EACF4s4B,EAAM4V,YAAYrU,EAAM,EAAGnu4B,EAAI,IAGxCm8hB,IAAK,SAASv+d,EAAGuw0B,GACf,OAAO,EAAIvB,EAAM4W,UAAU5l1B,EAAG,GAAMuw0B,IAGtC1qtB,KAAO,SAAS0qtB,GACd,OAAOA,GAITuE,OAAQ,SAAgBvE,GACtB,OAAOA,EAAMjp5B,EAAKy1O,IAAI,EAAK,GAAK,EAAIwzqB,GAAO,IAG7ChrxB,KAAM,SAAcgrxB,GAClB,OAAQA,EAAM,EAAI,EAAKA,EAAM,EAAI,GAGnC7ptB,OAAQ,SAAgB6ptB,GACtB,OAA8B,EAAvBvB,EAAM4X,MAAMrW,EAAM,IAG3B0R,SAAU,SAAkB1R,GAC1B,OAAO,EAAIA,KAOfvB,EAAM/qtB,OAAO+qtB,EAAMkD,YAAa,CAC9B/jM,IAAK,SAAa/rsB,EAAG+m5B,GACnB,OAAO/m5B,EAAI,EAAI,EAAI+m5B,EAAO7h6B,EAAKmkG,KAAK09zB,EAAO/m5B,IAG7Cut4B,IAAK,SAAavt4B,EAAG+m5B,GACnB,OAAO/m5B,EAAI,EAAI,EAAI,EAAI9a,EAAKmkG,KAAK09zB,EAAO/m5B,IAG1Cm8hB,IAAK,SAASv+d,EAAGmp1B,GACf,OAAQ7h6B,EAAKkuG,IAAI,EAAIx1B,GAAKmp1B,GAG5BtjuB,KAAO,SAASsjuB,GACd,OAAO,EAAIA,GAGbrU,OAAQ,SAAUqU,GAChB,OAAQ,EAAIA,EAAQ7h6B,EAAKkuG,IAAI,IAG/B+vB,KAAM,SAAc4jyB,GAClB,OAAO,GAGTziuB,OAAQ,SAAgByiuB,GACtB,OAAQ,EAAIA,EAAO7h6B,EAAKkuG,IAAIluG,EAAKy1E,WAGnCkl1B,SAAW,SAASkH,GAClB,OAAO7h6B,EAAKy1O,IAAIosrB,GAAO,MAO3Bna,EAAM/qtB,OAAO+qtB,EAAMkE,MAAO,CACxB/kM,IAAK,SAAa/rsB,EAAGijH,EAAO+wL,GAC1B,OAAIh0S,EAAI,EACC,EACK,IAANA,GAAqB,IAAVijH,EAAe,EAAI+wL,EAC9B9uT,EAAKmkG,KAAK45B,EAAQ,GAAK/9H,EAAKkuG,IAAIpzF,GAAKA,EAAIg0S,EACjC44lB,EAAMoE,QAAQ/txB,GAASA,EAAQ/9H,EAAKkuG,IAAI4gN,KAG1Du5lB,IAAK,SAAavt4B,EAAGijH,EAAO+wL,GAC1B,OAAIh0S,EAAI,EACC,EACF4s4B,EAAM4V,YAAYv/xB,EAAOjjH,EAAIg0S,IAGtCmoP,IAAK,SAASv+d,EAAGqlD,EAAO+wL,GACtB,OAAO44lB,EAAM4W,UAAU5l1B,EAAGqlD,GAAS+wL,GAGrCvwH,KAAO,SAASxgE,EAAO+wL,GACrB,OAAO/wL,EAAQ+wL,GAGjB7wL,KAAM,SAAcF,EAAO+wL,GACzB,GAAG/wL,EAAQ,EAAG,OAAQA,EAAQ,GAAK+wL,GAIrC1vH,OAAQ,SAAgBrhE,EAAO+wL,GAC7B,OAAO44lB,EAAM4X,MAAMvhyB,GAAS+wL,GAG9B6rmB,SAAU,SAAkB58xB,EAAO+wL,GACjC,OAAO/wL,EAAQ+wL,EAAQA,KAK3B44lB,EAAM/qtB,OAAO+qtB,EAAMoa,SAAU,CAC3Bj7M,IAAK,SAAa/rsB,EAAGijH,EAAO+wL,GAC1B,OAAIh0S,GAAK,EACA,EACF9a,EAAKmkG,MAAM45B,EAAQ,GAAK/9H,EAAKkuG,IAAIpzF,GAAKg0S,EAAQh0S,EACrC4s4B,EAAMoE,QAAQ/txB,GAASA,EAAQ/9H,EAAKkuG,IAAI4gN,KAG1Du5lB,IAAK,SAAavt4B,EAAGijH,EAAO+wL,GAC1B,OAAIh0S,GAAK,EACA,EACF,EAAI4s4B,EAAM4V,YAAYv/xB,EAAO+wL,EAAQh0S,IAG9Cm8hB,IAAK,SAASv+d,EAAGqlD,EAAO+wL,GACtB,OAAOA,EAAQ44lB,EAAM4W,UAAU,EAAI5l1B,EAAGqlD,IAGxCwgE,KAAO,SAASxgE,EAAO+wL,GACrB,OAAQ/wL,EAAQ,EAAK+wL,GAAS/wL,EAAQ,QAAKh/H,GAG7Ck/H,KAAM,SAAcF,EAAO+wL,GACzB,OAAOA,GAAS/wL,EAAQ,IAG1BqhE,OAAQ,SAAgBrhE,EAAO+wL,GAC7B,OAAOA,EAAQ44lB,EAAM4X,MAAMvhyB,IAG7B48xB,SAAU,SAAkB58xB,EAAO+wL,GACjC,KAAI/wL,GAAS,GAEb,OAAO+wL,EAAQA,IAAU/wL,EAAQ,IAAMA,EAAQ,IAAMA,EAAQ,OAMjE2pxB,EAAM/qtB,OAAO+qtB,EAAMqa,YAAa,CAC9Bl7M,IAAK,SAAa/rsB,EAAG66e,EAAO2uQ,GAC1B,OAAU,IAANxpvB,GAAqB,IAAV66e,EACN2uQ,EACM,IAANxpvB,GAAoB,IAATwpvB,EACX3uQ,EACF31f,EAAKmkG,IAAInkG,EAAKkuG,IAAIynZ,GAAS31f,EAAKkuG,IAAIo2pB,IAAS3uQ,EAAQ,GAC5C31f,EAAKkuG,IAAIpzF,IAAMwpvB,EAAO,GACtBtkwB,EAAKkuG,IAAI,EAAIluG,EAAKy1O,IAAI36N,EAAG66e,MAG3C0yZ,IAAK,SAAavt4B,EAAG66e,EAAO2uQ,GAC1B,OAAIxpvB,EAAI,EACC,EACAA,EAAI,EACJ,EACD,EAAI9a,EAAKy1O,IAAI,EAAIz1O,EAAKy1O,IAAI36N,EAAG66e,GAAQ2uQ,IAG/CrtN,IAAK,SAAav+d,EAAGi9a,EAAO2uQ,GAC1B,OAAOtkwB,EAAKy1O,IAAI,EAAIz1O,EAAKy1O,IAAI,EAAI/8J,EAAG,EAAI4rrB,GAAO,EAAI3uQ,IAGrDp3T,KAAO,SAASo3T,EAAO2uQ,GACrB,OAAQA,EAAOojJ,EAAMiE,QAAQ,EAAI,EAAIh2Z,GAC7B+xZ,EAAMiE,QAAQrnJ,GAAUojJ,EAAMiE,QAAQ,EAAI,EAAIh2Z,EAAQ2uQ,IAGhEkpJ,OAAQ,SAAgB73Z,EAAO2uQ,GAC7B,OAAOtkwB,EAAKy1O,IAAI,EAAIz1O,EAAKy1O,IAAI,GAAI,EAAI6uhB,GAAO,EAAI3uQ,IAGlD13X,KAAM,SAAc03X,EAAO2uQ,GACzB,GAAM3uQ,GAAS,GAAK2uQ,GAAQ,GAAgB,IAAV3uQ,GAAwB,IAAT2uQ,EAEjD,OAAOtkwB,EAAKy1O,KAAKkgR,EAAQ,IAAMA,EAAQ2uQ,EAAO,GAAI,EAAI3uQ,IAGxDgla,SAAU,SAAkBhla,EAAO2uQ,GACjC,MAAM,IAAIz5vB,MAAM,mCAQpB684B,EAAM/qtB,OAAO+qtB,EAAM4F,UAAW,CAC5BzmM,IAAK,SAAa/rsB,EAAGyh5B,EAAItP,GACvB,OAAIny4B,GAAK,EACA,EACF9a,EAAKmkG,KAAKnkG,EAAKkuG,IAAIpzF,GAAK,GAAM9a,EAAKkuG,IAAI,EAAIluG,EAAKqhf,IACvCrhf,EAAKkuG,IAAI++yB,GAASjt5B,EAAKy1O,IAAIz1O,EAAKkuG,IAAIpzF,GAAKyh5B,EAAI,IAC5C,EAAItP,EAAQA,KAG/B5E,IAAK,SAAavt4B,EAAGyh5B,EAAItP,GACvB,OAAIny4B,EAAI,EACC,EACF,GACF,GAAM4s4B,EAAMkX,KAAK5+5B,EAAKkuG,IAAIpzF,GAAKyh5B,GAAMv85B,EAAK8oK,KAAK,EAAImkvB,EAAQA,KAGlEh2W,IAAK,SAASv+d,EAAG6j1B,EAAItP,GACnB,OAAOjt5B,EAAKmkG,KAAK,mBAAsB8ozB,EAAQvF,EAAMqX,QAAQ,EAAIrm1B,GAAK6j1B,IAGxEh+tB,KAAM,SAAcg+tB,EAAItP,GACtB,OAAOjt5B,EAAKmkG,IAAIo4zB,EAAKtP,EAAQA,EAAQ,IAGvCO,OAAQ,SAAgB+O,EAAItP,GAC1B,OAAOjt5B,EAAKmkG,IAAIo4zB,IAGlBt+xB,KAAM,SAAcs+xB,EAAItP,GACtB,OAAOjt5B,EAAKmkG,IAAIo4zB,EAAKtP,EAAQA,IAG/B7ttB,OAAQ,SAAgBm9tB,EAAItP,GAC1B,OAAOjt5B,EAAKmkG,IAAIujzB,EAAM2X,QAAUpS,EAAQsP,IAG1C5B,SAAU,SAAkB4B,EAAItP,GAC9B,OAAQjt5B,EAAKmkG,IAAI8ozB,EAAQA,GAAS,GAAKjt5B,EAAKmkG,IAAI,EAAIo4zB,EAAKtP,EAAQA,MAOrEvF,EAAM/qtB,OAAO+qtB,EAAMsa,YAAa,CAC9Bn7M,IAAK,SAAa/rsB,EAAGmu4B,EAAKgZ,GACxB,IAAIC,EAAM,MACV,OAAIli6B,EAAKijB,IAAIg/4B,GAAOC,EACXxa,EAAMkI,SAAS/oM,IAAI/rsB,EAAGmu4B,GAE3Bjp5B,EAAKijB,IAAInI,GAAKon5B,EACTli6B,EAAKmkG,IAAIujzB,EAAMoE,SAAS7C,EAAM,GAAK,GAAKgZ,EAAMA,EAAM,EAC3C,GAAMji6B,EAAKkuG,IAAIluG,EAAKqhf,GAAK4na,GAAOvB,EAAMoE,QAAQ7C,EAAM,IAI/DA,EAAMnu4B,GACR4s4B,EAAMsa,YAAY3Z,IAAIvt4B,EAAI9a,EAAK8oK,KAAK,EAAI,EAAImgvB,GAAMA,EAAI,EAAGgZ,GACzDva,EAAMsa,YAAY3Z,IAAIvt4B,EAAGmu4B,EAAKgZ,KAGrC5Z,IAAK,SAAavt4B,EAAGmu4B,EAAKgZ,GACxB,IAAIC,EAAM,MACNC,EAAiB,IAErB,GAAIni6B,EAAKijB,IAAIg/4B,GAAOC,EAClB,OAAOxa,EAAMkI,SAASvH,IAAIvt4B,EAAGmu4B,GAG/B,IAAI/74B,GAAO,EACP4N,EAAI,IACN5N,GAAO,EACP+05B,GAAOA,GAYT,IATA,IAAIG,EAAO1a,EAAMsE,OAAO3D,KAAK4Z,EAAK,EAAG,GACjCtj6B,EAAQuj6B,EAAM,EAEdG,EAAY1j6B,EACZ8vC,EAAI3zB,EAAIA,GAAKA,EAAIA,EAAImu4B,GACrBxu0B,EAAI,EACJ/B,EAAI14E,EAAKmkG,KAAK89zB,EAAMA,EAAM,GAC1B7xwB,EAAIpwJ,EAAKmkG,KAAK89zB,EAAMA,EAAM,EAAI,GAAMji6B,EAAKkuG,IAAI,GAChCw5yB,EAAMoE,QAAQ,MAAUmW,EAClCxn1B,EAAI0n1B,GAAkBE,EAAYH,GAAOvj6B,EAAQuj6B,GACtDG,EAAY1j6B,EACR87E,EAAI,IACN/B,GAAMup1B,EAAMA,GAAQ,EAAIxn1B,GACxB21E,GAAM6xwB,EAAMA,GAAQ,GAAKxn1B,EAAI,MAI/B2n1B,GAAQ,IAFRzj6B,EAAQ+5E,EAAIgv0B,EAAMpjJ,KAAK+jJ,IAAI552B,EAAGgsC,EAAI,GAAKwu0B,EAAM,GACzC74vB,EAAIs3vB,EAAMpjJ,KAAK+jJ,IAAI552B,EAAGgsC,EAAE,EAAGwu0B,EAAI,IAEnCxu0B,IAGF,OAAOvtE,EAAQ,EAAIk15B,EAAQA,KAM/B1a,EAAM/qtB,OAAO+qtB,EAAMsE,OAAQ,CACzBnlM,IAAK,SAAa/rsB,EAAGyjL,EAAM+juB,GACzB,OAAOti6B,EAAKmkG,KAAK,GAAMnkG,EAAKkuG,IAAI,EAAIluG,EAAKqhf,IACzBrhf,EAAKkuG,IAAIo0zB,GAAOti6B,EAAKy1O,IAAI36N,EAAIyjL,EAAM,IAAM,EAAI+juB,EAAMA,KAGrEja,IAAK,SAAavt4B,EAAGyjL,EAAM+juB,GACzB,MAAO,IAAO,EAAI5a,EAAMkX,KAAK9j5B,EAAIyjL,GAAQv+L,EAAK8oK,KAAK,EAAIw5vB,EAAMA,MAG/DrrX,IAAK,SAASv+d,EAAG6lH,EAAM+juB,GACrB,OAAQ,mBAAsBA,EAAM5a,EAAMqX,QAAQ,EAAIrm1B,GAAK6lH,GAG7DA,KAAO,SAASA,EAAM+juB,GACpB,OAAO/juB,GAGTivtB,OAAQ,SAAgBjvtB,EAAM+juB,GAC5B,OAAO/juB,GAGTtgE,KAAM,SAAUsgE,EAAM+juB,GACpB,OAAO/juB,GAGTa,OAAQ,SAAgBb,EAAM+juB,GAC5B,OAAO5a,EAAM2X,QAAUiD,EAAM/juB,GAG/Bo8tB,SAAW,SAASp8tB,EAAM+juB,GACxB,OAAOA,EAAMA,KAOjB5a,EAAM/qtB,OAAO+qtB,EAAM6a,OAAQ,CACzB17M,IAAK,SAAa/rsB,EAAGg0S,EAAO/wL,GAC1B,OAAIjjH,EAAIg0S,EACC,EACD/wL,EAAQ/9H,EAAKy1O,IAAIq5E,EAAO/wL,GAAU/9H,EAAKy1O,IAAI36N,EAAGijH,EAAQ,IAGhEsqxB,IAAK,SAAavt4B,EAAGg0S,EAAO/wL,GAC1B,OAAIjjH,EAAIg0S,EACC,EACF,EAAI9uT,EAAKy1O,IAAIq5E,EAAQh0S,EAAGijH,IAGjCk5a,IAAK,SAAav+d,EAAGo2O,EAAO/wL,GAC1B,OAAO+wL,EAAQ9uT,EAAKy1O,IAAI,EAAI/8J,EAAG,EAAIqlD,IAGrCwgE,KAAM,SAAcuwH,EAAO/wL,GACzB,KAAIA,GAAS,GAEb,OAAQA,EAAQ/9H,EAAKy1O,IAAIq5E,EAAO/wL,IAAWA,EAAQ,IAGrDyvxB,OAAQ,SAAgB1+lB,EAAO/wL,GAC7B,OAAO+wL,GAAS/wL,EAAQ/9H,EAAKgl5B,QAG/B/mxB,KAAM,SAAc6wL,EAAO/wL,GACzB,OAAO+wL,GAGT6rmB,SAAW,SAAS7rmB,EAAO/wL,GACzB,KAAIA,GAAS,GAEb,OAAQ+wL,EAAMA,EAAQ/wL,GAAU/9H,EAAKy1O,IAAI13G,EAAQ,EAAG,IAAMA,EAAQ,OAOtE2pxB,EAAM/qtB,OAAO+qtB,EAAMkI,SAAU,CAC3B/oM,IAAK,SAAa/rsB,EAAGmu4B,GAEnB,OADAA,EAAMA,EAAM,MAAQ,MAAQA,EACpB,GAAGjp5B,EAAK8oK,KAAKmgvB,GAAOvB,EAAMqW,OAAO,GAAK9U,EAAI,IAC9Cjp5B,EAAKy1O,IAAI,EAAM36N,EAAIA,EAAKmu4B,IAASA,EAAM,GAAK,IAGlDZ,IAAK,SAAavt4B,EAAGmu4B,GACnB,IAAIuZ,EAAOvZ,EAAM,EACjB,OAAOvB,EAAMyX,OAAOrk5B,EAAI9a,EAAK8oK,KAAKhuJ,EAAIA,EAAImu4B,KACtB,EAAIjp5B,EAAK8oK,KAAKhuJ,EAAIA,EAAImu4B,IAAOuZ,EAAMA,IAGzDvrX,IAAK,SAASv+d,EAAGuw0B,GACf,IAAInu4B,EAAI4s4B,EAAMsX,SAAS,EAAIh/5B,EAAKE,IAAIw4E,EAAG,EAAIA,GAAI,GAAMuw0B,EAAK,IAE1D,OADAnu4B,EAAI9a,EAAK8oK,KAAKmgvB,GAAO,EAAInu4B,GAAKA,GACtB49D,EAAI,GAAO59D,GAAKA,GAG1ByjL,KAAM,SAAc0qtB,GAClB,OAAQA,EAAM,EAAK,OAAIlq5B,GAGzByu5B,OAAQ,SAAgBvE,GACtB,OAAO,GAGThrxB,KAAM,SAAcgrxB,GAClB,OAAO,GAGT7ptB,OAAQ,SAAgB6ptB,GACtB,OAAOvB,EAAM2X,QAAUr/5B,EAAK8oK,KAAKmgvB,GAAO,EAAIvB,EAAM4X,MAAMrW,EAAM,MAGhE0R,SAAU,SAAkB1R,GAC1B,OAAQA,EAAO,EAAKA,GAAOA,EAAM,GAAMA,EAAM,EAAKlp5B,SAAWhB,KAOjE2o5B,EAAM/qtB,OAAO+qtB,EAAM+a,QAAS,CAC1B57M,IAAK,SAAa/rsB,EAAGg0S,EAAO/wL,GAC1B,OAAIjjH,EAAI,GAAKg0S,EAAQ,GAAK/wL,EAAQ,EACzB,EACDA,EAAQ+wL,EAAS9uT,EAAKy1O,IAAK36N,EAAIg0S,EAAS/wL,EAAQ,GACpD/9H,EAAKmkG,KAAMnkG,EAAKy1O,IAAK36N,EAAIg0S,EAAQ/wL,KAGvCsqxB,IAAK,SAAavt4B,EAAGg0S,EAAO/wL,GAC1B,OAAOjjH,EAAI,EAAI,EAAI,EAAI9a,EAAKmkG,KAAKnkG,EAAKy1O,IAAK36N,EAAIg0S,EAAQ/wL,KAGzDk5a,IAAK,SAASv+d,EAAGo2O,EAAO/wL,GACtB,OAAO+wL,EAAQ9uT,EAAKy1O,KAAKz1O,EAAKkuG,IAAI,EAAIx1B,GAAI,EAAIqlD,IAGhDwgE,KAAO,SAASuwH,EAAO/wL,GACrB,OAAO+wL,EAAQ44lB,EAAMiE,QAAQ,EAAI,EAAI5txB,IAGvCyvxB,OAAQ,SAAgB1+lB,EAAO/wL,GAC7B,OAAO+wL,EAAQ9uT,EAAKy1O,IAAIz1O,EAAKkuG,IAAI,GAAI,EAAI6vB,IAG3CE,KAAM,SAAc6wL,EAAO/wL,GACzB,OAAIA,GAAS,EACJ,EACF+wL,EAAQ9uT,EAAKy1O,KAAK13G,EAAQ,GAAKA,EAAO,EAAIA,IAGnDqhE,OAAQ,SAAgB0vH,EAAO/wL,GAC7B,OAAO+wL,EAAQ9uT,EAAKy1O,KAAKz1O,EAAKkuG,IAAIluG,EAAKy1E,UAAW,EAAIsoD,IAGxD48xB,SAAU,SAAkB7rmB,EAAO/wL,GACjC,OAAO+wL,EAAQA,EAAQ44lB,EAAMiE,QAAQ,EAAI,EAAI5txB,GACzC/9H,EAAKy1O,IAAIiyqB,EAAM+a,QAAQlkuB,KAAKuwH,EAAO/wL,GAAQ,MAOnD2pxB,EAAM/qtB,OAAO+qtB,EAAMgb,QAAS,CAC1B77M,IAAK,SAAa/rsB,EAAGlS,EAAGC,GACtB,OAAQiS,EAAIlS,GAAKkS,EAAIjS,EAAK,EAAI,GAAKA,EAAID,IAGzCy/4B,IAAK,SAAavt4B,EAAGlS,EAAGC,GACtB,OAAIiS,EAAIlS,EACC,EACAkS,EAAIjS,GACHiS,EAAIlS,IAAMC,EAAID,GACjB,GAGTquiB,IAAK,SAASv+d,EAAG9vE,EAAGC,GAClB,OAAOD,EAAK8vE,GAAK7vE,EAAID,IAGvB21L,KAAM,SAAc31L,EAAGC,GACrB,MAAO,IAAOD,EAAIC,IAGpB2k5B,OAAQ,SAAgB5k5B,EAAGC,GACzB,OAAO6+4B,EAAMnptB,KAAK31L,EAAGC,IAGvBo1H,KAAM,SAAcr1H,EAAGC,GACrB,MAAM,IAAIgC,MAAM,gCAGlBu0L,OAAQ,SAAgBx2L,EAAGC,GACzB,OAAQD,EAAI,EAAIC,EAAI,GAAMA,EAAI,EAAID,EAAI,IAAM,EAAI5I,EAAKy1E,SAAW,IAGlEkl1B,SAAU,SAAkB/x5B,EAAGC,GAC7B,OAAO7I,EAAKy1O,IAAI5sO,EAAID,EAAG,GAAK,MAOhC8+4B,EAAM/qtB,OAAO+qtB,EAAMiB,SAAU,CAC3B9hM,IAAK,SAAazjtB,EAAGiG,EAAGqvE,GACtB,OAAc,IAANA,GAAiB,IAANA,EACfrvE,EAAIqvE,IAAOt1E,EAAI,EAAI,EACrBsk5B,EAAMkW,YAAYv05B,EAAGjG,GAAKpD,EAAKy1O,IAAI/8J,EAAGt1E,GAAKpD,EAAKy1O,IAAI,EAAI/8J,EAAGrvE,EAAIjG,IAGnEil5B,IAAK,SAAavt4B,EAAGzR,EAAGqvE,GACtB,IAAIiq1B,EAAW,GACfv/5B,EAAI,EACJ,GAAI0X,EAAI,EACN,OAAO,EAET,GAAIA,EAAIzR,EAAG,CACT,KAAOjG,GAAK0X,EAAG1X,IACbu/5B,EAAUv/5B,GAAMsk5B,EAAMiB,SAAS9hM,IAAIzjtB,EAAGiG,EAAGqvE,GAE3C,OAAOgv0B,EAAM744B,IAAI8z5B,GAEnB,OAAO,KAOXjb,EAAM/qtB,OAAO+qtB,EAAMoG,OAAQ,CACzBjnM,IAAK,SAAazjtB,EAAGg3E,EAAG1B,GACtB,OAAIt1E,IAAMA,IAAM,IAEZA,EAAI,EACC,EACFsk5B,EAAMkW,YAAYx65B,EAAIg3E,EAAI,EAAGA,EAAI,GACpCp6E,EAAKy1O,IAAI,EAAI/8J,EAAGt1E,GAAKpD,EAAKy1O,IAAI/8J,EAAG0B,KAGvCiu0B,IAAK,SAAavt4B,EAAGs/D,EAAG1B,GACtB,IAAI7pE,EAAM,EACVzL,EAAI,EACJ,GAAI0X,EAAI,EAAG,OAAO,EAClB,KAAO1X,GAAK0X,EAAG1X,IACbyL,GAAO644B,EAAMoG,OAAOjnM,IAAIzjtB,EAAGg3E,EAAG1B,GAEhC,OAAO7pE,KAOX644B,EAAM/qtB,OAAO+qtB,EAAMkb,QAAS,CAC1B/7M,IAAK,SAAazjtB,EAAG05J,EAAGznJ,EAAGhM,GAUzB,GAAGjG,IAAMA,EAAI,EACX,OAAO,EACF,GAAGA,EAAI,GAAKA,EAAIiS,GAAKynJ,EAAIzzJ,GAE9B,OAAO,EACF,GAAGjG,EAAIiG,GAAKjG,EAAIiS,EAErB,OAAO,EACF,GAAQ,EAAJA,EAAQynJ,EAGjB,OAAO,EAAJzzJ,EAAQyzJ,EAGF4qvB,EAAMkb,QAAQ/7M,IAAI/pjB,EAAIznJ,EAAIhM,EAAIjG,EAAG05J,EAAGA,EAAIznJ,EAAGynJ,EAAIzzJ,GAI/Cq+4B,EAAMkb,QAAQ/7M,IAAIx9sB,EAAIjG,EAAG05J,EAAGA,EAAIznJ,EAAGhM,GAGvC,GAAO,EAAJA,EAAQyzJ,EAGhB,OAAO4qvB,EAAMkb,QAAQ/7M,IAAIxxsB,EAAIjS,EAAG05J,EAAGznJ,EAAGynJ,EAAIzzJ,GAErC,GAAGgM,EAAIhM,EAGZ,OAAOq+4B,EAAMkb,QAAQ/7M,IAAIzjtB,EAAG05J,EAAGzzJ,EAAGgM,GAkBlC,IALA,IAAIwt5B,EAAY,EAGZC,EAAc,EAEV785B,EAAI,EAAGA,EAAI7C,EAAG6C,IAAK,CAGzB,KAAM485B,EAAY,GAAKC,EAAcz55B,GAInCw55B,GAAa,EAAKxt5B,GAAKynJ,EAAIgmwB,GAG3BA,IAKFD,IAAcx55B,EAAIpD,IAAMoP,EAAIpP,KAAOA,EAAI,IAAM62J,EAAIznJ,EAAIhM,EAAIpD,EAAI,IAG/D,KAAM685B,EAAcz55B,EAAGy55B,IAErBD,GAAa,EAAKxt5B,GAAKynJ,EAAIgmwB,GAI7B,OAAO9i6B,EAAKE,IAAI,EAAGF,EAAKC,IAAI,EAAG4i6B,KAInCxa,IAAK,SAAavt4B,EAAGgiJ,EAAGznJ,EAAGhM,GAYzB,GAAGyR,EAAI,GAAKA,EAAIzF,GAAKynJ,EAAIzzJ,GAEvB,OAAO,EACF,GAAGyR,GAAKzR,GAAKyR,GAAKzF,EAEvB,OAAO,EACF,GAAQ,EAAJA,EAAQynJ,EAGjB,OAAO,EAAJzzJ,EAAQyzJ,EAGF4qvB,EAAMkb,QAAQva,IAAIvrvB,EAAIznJ,EAAIhM,EAAIyR,EAAGgiJ,EAAGA,EAAIznJ,EAAGynJ,EAAIzzJ,GAI/C,EAAIq+4B,EAAMkb,QAAQva,IAAIh/4B,EAAIyR,EAAI,EAAGgiJ,EAAGA,EAAIznJ,EAAGhM,GAG/C,GAAO,EAAJA,EAAQyzJ,EAGhB,OAAO,EAAI4qvB,EAAMkb,QAAQva,IAAIhz4B,EAAIyF,EAAI,EAAGgiJ,EAAGznJ,EAAGynJ,EAAIzzJ,GAE7C,GAAGgM,EAAIhM,EAGZ,OAAOq+4B,EAAMkb,QAAQva,IAAIvt4B,EAAGgiJ,EAAGzzJ,EAAGgM,GAqBlC,IATA,IAAI0t5B,EAAY,EAIZF,EAAY,EAGZC,EAAc,EAEV785B,EAAI,EAAGA,EAAI6U,EAAG7U,IAAK,CAGzB,KAAM885B,EAAY,GAAKD,EAAcz55B,GAAG,CAItC,IAAIumX,EAAS,EAAKv6W,GAAKynJ,EAAIgmwB,GAE3BD,GAAajziB,EACbmziB,GAAanziB,EAGbkziB,IAQFC,GAHAF,IAAcx55B,EAAIpD,IAAMoP,EAAIpP,KAAOA,EAAI,IAAM62J,EAAIznJ,EAAIhM,EAAIpD,EAAI,IAM/D,KAAM685B,EAAcz55B,EAAGy55B,IAErBC,GAAa,EAAK1t5B,GAAKynJ,EAAIgmwB,GAI7B,OAAO9i6B,EAAKE,IAAI,EAAGF,EAAKC,IAAI,EAAG8i6B,OAQrCrb,EAAM/qtB,OAAO+qtB,EAAM+G,QAAS,CAC1B5nM,IAAK,SAAazjtB,EAAGkoB,GACnB,OAAIA,EAAI,GAAMloB,EAAI,IAAO,GAAKA,EAAI,EACzB,EAGFpD,EAAKy1O,IAAInqN,EAAGloB,GAAKpD,EAAKmkG,KAAK74E,GAAKo83B,EAAMiW,UAAUv65B,IAGzDil5B,IAAK,SAAavt4B,EAAGwQ,GACnB,IAAI034B,EAAS,GACb5/5B,EAAI,EACJ,GAAI0X,EAAI,EAAG,OAAO,EAClB,KAAO1X,GAAK0X,EAAG1X,IACb4/5B,EAAO3z5B,KAAKq44B,EAAM+G,QAAQ5nM,IAAIzjtB,EAAGkoB,IAEnC,OAAOo83B,EAAM744B,IAAIm05B,IAGnBzkuB,KAAO,SAASjzK,GACd,OAAOA,GAGTqv4B,SAAW,SAASrv4B,GAClB,OAAOA,GAGT8zK,OAAQ,SAAgB9zK,GACtB,IAAIotD,EAAI,EAAGt1E,EAAI,EAAGmkK,EAAIvnK,EAAKmkG,KAAK74E,GAChC,GACEloB,IACAs1E,GAAK14E,EAAKy1E,eACHiD,EAAI6uF,GACb,OAAOnkK,EAAI,KAKfsk5B,EAAM/qtB,OAAO+qtB,EAAMub,WAAY,CAC7Bp8M,IAAK,SAAa/rsB,EAAGlS,EAAGC,EAAGC,GACzB,OAAID,GAAKD,GAAKE,EAAIF,GAAKE,EAAID,EAClBvJ,IAEHwb,EAAIlS,GAAKkS,EAAIjS,EACR,EACEiS,EAAIhS,EACH,GAAKgS,EAAIlS,KAAQC,EAAID,IAAME,EAAIF,IAChCkS,IAAMhS,EACL,GAAKD,EAAID,GAET,GAAKC,EAAIiS,KAAQjS,EAAID,IAAMC,EAAIC,KAK/Cu/4B,IAAK,SAAavt4B,EAAGlS,EAAGC,EAAGC,GACzB,OAAID,GAAKD,GAAKE,EAAIF,GAAKE,EAAID,EAClBvJ,IACLwb,GAAKlS,EACA,EACAkS,GAAKjS,EACL,EACLiS,GAAKhS,EACA9I,EAAKy1O,IAAI36N,EAAIlS,EAAG,KAAOC,EAAID,IAAME,EAAIF,IAErC,EAAI5I,EAAKy1O,IAAI5sO,EAAIiS,EAAG,KAAOjS,EAAID,IAAMC,EAAIC,KAGpDmuiB,IAAK,SAAav+d,EAAG9vE,EAAGC,EAAGC,GACzB,OAAID,GAAKD,GAAKE,EAAIF,GAAKE,EAAID,EAClBvJ,IAEHo5E,IAAO5vE,EAAIF,IAAMC,EAAID,GAChBA,GAAKC,EAAID,GAAK5I,EAAK8oK,KAAKpwF,IAAM5vE,EAAIF,IAAMC,EAAID,KAE5CA,GAAKC,EAAID,IAAM,EAAI5I,EAAK8oK,MAAM,EAAIpwF,IAAM,GAAM5vE,EAAIF,IAAMC,EAAID,OAKzE21L,KAAM,SAAc31L,EAAGC,EAAGC,GACxB,OAAQF,EAAIC,EAAIC,GAAK,GAGvB0k5B,OAAQ,SAAgB5k5B,EAAGC,EAAGC,GAC5B,OAAIA,IAAMF,EAAIC,GAAK,EACVA,EAAI7I,EAAK8oK,MAAMjgK,EAAID,IAAMC,EAAIC,IAAM9I,EAAK8oK,KAAK,GAC3ChgK,GAAKF,EAAIC,GAAK,EAChBD,EAAI5I,EAAK8oK,MAAMjgK,EAAID,IAAME,EAAIF,IAAM5I,EAAK8oK,KAAK,QAD/C,GAKT7qC,KAAM,SAAcr1H,EAAGC,EAAGC,GACxB,OAAOA,GAGTs2L,OAAQ,SAAgBx2L,EAAGC,EAAGC,GAC5B,IAAIu0J,EAAIr9J,EAAKy1E,SACb,OAAI4nF,GAAMv0J,EAAIF,IAAMC,EAAID,GACfA,EAAI5I,EAAK8oK,KAAKzL,GAAKx0J,EAAID,IAAME,EAAIF,IACnCC,EAAI7I,EAAK8oK,MAAM,EAAIzL,IAAMx0J,EAAID,IAAMC,EAAIC,KAGhD6x5B,SAAU,SAAkB/x5B,EAAGC,EAAGC,GAChC,OAAQF,EAAIA,EAAIC,EAAIA,EAAIC,EAAIA,EAAIF,EAAIC,EAAID,EAAIE,EAAID,EAAIC,GAAK,MAM7D4+4B,EAAM/qtB,OAAO+qtB,EAAMwb,QAAS,CAC1Br8M,IAAK,SAAa/rsB,EAAGlS,EAAGC,GACtB,OAAIA,GAAKD,EAAUtJ,IAEXwb,GAAKlS,GAAKkS,GAAKjS,EAAK,EACzB,EAAI7I,EAAKqhf,GACRrhf,EAAKy1O,IAAIz1O,EAAKy1O,IAAI5sO,EAAID,EAAG,GACf5I,EAAKy1O,IAAI,EAAI36N,EAAIlS,EAAIC,EAAG,IAAK,KAG7Cw/4B,IAAK,SAAavt4B,EAAGlS,EAAGC,GACtB,OAAIiS,EAAIlS,EACC,EACAkS,EAAIjS,EACH,EAAI7I,EAAKqhf,GAAMrhf,EAAK6g5B,KAAK7g5B,EAAK8oK,MAAMhuJ,EAAIlS,IAAIC,EAAID,KACnD,GAGTquiB,IAAK,SAASv+d,EAAG9vE,EAAGC,GAClB,OAAOD,GAAK,GAAM,GAAM5I,EAAKm1f,IAAIn1f,EAAKqhf,GAAK3oa,KAAO7vE,EAAID,IAGxD21L,KAAM,SAAc31L,EAAGC,GACrB,OAAIA,GAAKD,EAAUtJ,KACXsJ,EAAIC,GAAK,GAGnB2k5B,OAAQ,SAAgB5k5B,EAAGC,GACzB,OAAIA,GAAKD,EAAUtJ,KACXsJ,EAAIC,GAAK,GAGnBo1H,KAAM,SAAcr1H,EAAGC,GACrB,MAAM,IAAIgC,MAAM,gCAGlBu0L,OAAQ,SAAgBx2L,EAAGC,GACzB,OAASD,EAAIC,GAAK,GAAOA,EAAID,GAAK,EAChC5I,EAAKq1f,IAAI,EAAIr1f,EAAKqhf,GAAKqma,EAAMgb,QAAQtjuB,OAAO,EAAG,KAGnDu7tB,SAAU,SAAkB/x5B,EAAGC,GAC7B,OAAIA,GAAKD,EAAUtJ,IACZU,EAAKy1O,IAAI5sO,EAAID,EAAG,GAAK,KAOhC8+4B,EAAM/qtB,OAAO+qtB,EAAMyb,QAAS,CAC1Bt8M,IAAK,SAAa/rsB,EAAGyh5B,EAAI1z5B,GACvB,OAAQA,GAAK,EAAK,EAAK7I,EAAKmkG,KAAKnkG,EAAKijB,IAAInI,EAAIyh5B,GAAM1z5B,IAAO,EAAIA,IAGjEw/4B,IAAK,SAAavt4B,EAAGyh5B,EAAI1z5B,GACvB,OAAIA,GAAK,EAAY,EAElBiS,EAAIyh5B,EACE,GAAMv85B,EAAKmkG,KAAKrpF,EAAIyh5B,GAAM1z5B,GAE1B,EAAI,GAAM7I,EAAKmkG,MAAOrpF,EAAIyh5B,GAAM1z5B,IAI3C01L,KAAM,SAASg+tB,EAAI1z5B,GACjB,OAAO0z5B,GAGT/O,OAAQ,SAAS+O,EAAI1z5B,GACnB,OAAO0z5B,GAGTt+xB,KAAM,SAASs+xB,EAAI1z5B,GACjB,OAAO0z5B,GAGT5B,SAAU,SAAS4B,EAAI1z5B,GACrB,OAAO,EAAIA,EAAIA,GAGjBu2L,OAAQ,SAAgBm9tB,EAAI1z5B,GAC1B,IAAIw0J,EAAIr9J,EAAKy1E,SAAW,GAExB,OAAO8m1B,EAAM1z5B,EAAI425B,EAAYpiwB,GAAKr9J,EAAKkuG,IAAI,EAAK,EAAIluG,EAAKijB,IAAIo6I,OA+JjEqqvB,EAAM/qtB,OAAO+qtB,EAAM0b,MAAO,CACxB/a,IAAK,SAAaj4vB,EAAGizwB,EAAQ1T,GAE3B,IAAIgQ,EAAK,EACL5gwB,EAAKskwB,EAELC,EAAQ,GACRC,EAAS,EAETC,GAAQ,GACRC,EAAO,MACPC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,EACRC,EAAQ,GACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,CACV,kBACA,kBACA,kBACA,iBACA,kBACA,mBACA,kBACA,oBAEEC,EAAQ,CACV,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBAGF,GAAI/zwB,GAAK,EACP,OAAO,EAKT,GAAIu/vB,EAAK,GAAKgQ,EAAK,GAAK5gwB,EAAK,EAAG,OAAOz/J,IAEvC,IAAKsF,OAAOy/F,SAAS+rD,GACnB,OAAO,EAET,GAAIu/vB,EAAKkU,EACP,OAAOnE,EAAWtvwB,EAAGuvwB,EAAI5gwB,GAI3B,IASIqlwB,EATAC,EAAU,GAAL1U,EACL2U,EAASD,EAAKrk6B,EAAKkuG,IAAIyhzB,GAAQA,EAAK3v5B,EAAKkuG,IAAI,GAAOw5yB,EAAMoE,QAAQuY,GAClEE,EAAMF,EAAK,EAMXG,EAAW,IAAL7U,EAEYyU,EAAbzU,GAAM+T,EAAcI,EACpBnU,GAAMgU,EAAcI,EACpBpU,GAAMiU,EAAcI,EACAC,EAE7BK,GAAQtk6B,EAAKkuG,IAAIk2zB,GAMjB,IAFA,IAAIK,EAAM,EAEDx+5B,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAQ5B,IAPA,IAAIy+5B,EAAQ,EAKRC,GAAQ,EAAI1+5B,EAAI,GAAKm+5B,EAEhBnkW,EAAK,EAAGA,GAAMqjW,EAAOrjW,IAAM,CAClC,IAAIxlf,EAAGuyZ,EACHu2b,EAAStjW,GACXxlf,EAAIwlf,EAAKsjW,EAAS,EAClBv2b,EAAMs3b,EAAQC,EAAMvk6B,EAAKkuG,IAAIy2zB,EAAQT,EAAMzp1B,GAAK2p1B,IACvCF,EAAMzp1B,GAAK2p1B,EAAQO,GAAQH,IAEpC/p1B,EAAIwlf,EAAK,EACTjzF,EAAMs3b,EAAQC,EAAMvk6B,EAAKkuG,IAAIy2zB,EAAQT,EAAMzp1B,GAAK2p1B,IACvCF,EAAMzp1B,GAAK2p1B,EAAQO,GAAQH,GAKlCx3b,GAAMw2b,IAWRkB,GAFWhF,EARP6D,EAAStjW,EACJ7va,EAAIpwJ,EAAK8oK,KAAkC,IAA3Bo7vB,EAAMzp1B,GAAK2p1B,EAAQO,IAEnCv0wB,EAAIpwJ,EAAK8oK,KAAqC,KAA5Bo7vB,EAAMzp1B,GAAK2p1B,EAASO,IAKnBhF,EAAI5gwB,GACXolwB,EAAM1p1B,GAAMz6E,EAAKmkG,IAAI6oY,IAU9C,GAAI/me,EAAIm+5B,GAAQ,GAAOM,GAASjB,EAC9B,MAKFgB,GAAOC,EAGT,GAAIA,EAAQjB,EACV,MAAM,IAAI545B,MAAM,gCAIlB,OAFI455B,EAAM,IACRA,EAAM,GACDA,GAGTxtX,IAAK,SAASv+d,EAAG2q1B,EAAQ1T,GAEvB,IAGIiV,EAAM,KACNC,EAAU,GAGd,GAAIlV,EAAK,GANA0T,EAMoB,EAAG,OAAO/j6B,IAEvC,GAAIo5E,EAAI,GAAKA,EAAI,EAAG,OAAOp5E,IAC3B,GAAU,IAANo5E,EAAS,OAAO,EACpB,GAAU,IAANA,EAAS,OAAO34E,IAIpB,IAWIo7Q,EAXAiwO,EAAK81a,EAAUxo1B,EAdV2q1B,EAciB1T,GAItBmV,EAAQpd,EAAM0b,MAAM/a,IAAIj9Z,EAAIi4a,EAAQ1T,GAAMj30B,EAS5CyiM,EADE2ppB,EAAQ,EACL9k6B,EAAKC,IAAI,EAAKmrf,EAAK,GAEnBA,EAAK,EAMZ,IALA,IAIIq5a,EAJAM,EAAQrd,EAAM0b,MAAM/a,IAAIltoB,EAAIkopB,EAAQ1T,GAAMj30B,EAKtC55E,EAAO,EAAGA,EAAO+l6B,EAAS/l6B,IAoBhC,GAnBA2l6B,EAAMtppB,EAAO4ppB,GAAS5ppB,EAAKiwO,IAAQ25a,EAAQD,GAC3CA,EAAQC,EAIR35a,EAAKjwO,EACDsppB,EAAM,IACRA,EAAM,EACNM,GAASrs1B,GAIXqs1B,EAAQrd,EAAM0b,MAAM/a,IAAIoc,EAAKpB,EAAQ1T,GAAMj30B,EAC3CyiM,EAAKsppB,EAKMzk6B,EAAKijB,IAAIk4P,EAAKiwO,GACdw5a,EACT,OAAOH,EAGX,MAAM,IAAI555B,MAAM,mCAz+CnB,CA6+CC684B,EAAO1n5B,MAIR,SAAS0n5B,EAAO1n5B,GAEjB,IAAIqP,EAAO3K,MAAMtD,UAAUiO,KACvB1K,EAAU+i5B,EAAMz7wB,MAAMtnI,QAE1B,SAASqg6B,EAASr34B,GAChB,OAAOhpB,EAAQgpB,IAAQA,aAAe+53B,EAGxCA,EAAM/qtB,OAAO,CAGX/6K,IAAK,SAAa9Q,EAAK6c,GAErB,OAAIq34B,EAASr34B,IACNq34B,EAASr34B,EAAI,MAAKA,EAAM,CAAEA,IACxB+53B,EAAMz74B,IAAI6E,GAAK,SAASnS,EAAOsgK,EAAKC,GACzC,OAAOvgK,EAAQgvB,EAAIsxI,GAAKC,OAGrBwovB,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOA,EAAQgvB,MAIzDnL,SAAU,SAAkB1R,EAAK6c,GAE/B,OAAIq34B,EAASr34B,IACNq34B,EAASr34B,EAAI,MAAKA,EAAM,CAAEA,IACxB+53B,EAAMz74B,IAAI6E,GAAK,SAASnS,EAAOsgK,EAAKC,GACzC,OAAOvgK,EAAQgvB,EAAIsxI,GAAKC,IAAQ,MAG7BwovB,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOA,EAAQgvB,MAIzDmrK,OAAQ,SAAgBhoL,EAAK6c,GAC3B,OAAIq34B,EAASr34B,IACNq34B,EAASr34B,EAAI,MAAKA,EAAM,CAAEA,IACxB+53B,EAAMzutB,SAASnoL,EAAK424B,EAAMzwW,IAAItphB,KAEhC+53B,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOA,EAAQgvB,MAIzDsrK,SAAU,SAAkBnoL,EAAK6c,GAC/B,IAAIsxI,EAAKC,EAAK+lwB,EAAUp25B,EAAK2p5B,EAAMI,EAAM7zwB,EAAKmgxB,EAE9C,QAAmBnm6B,IAAf+R,EAAIhM,aAAuC/F,IAAf4uB,EAAI7oB,OAClC,OAAOgM,EAAM6c,EAMf,GAJA6q4B,EAAO1n5B,EAAIhM,OACX8z5B,EAAO9n5B,EAAI,GAAGhM,OACdigJ,EAAM2iwB,EAAMqR,MAAMP,EAAMyM,EAAYD,EAASr34B,GAAQA,EAAI,GAAG7oB,OAAS8z5B,GACrEsM,EAAU,EACNF,EAASr34B,GAAM,CACjB,KAAOu34B,EAAUD,EAAUC,IACzB,IAAKjmwB,EAAM,EAAGA,EAAMu5vB,EAAMv5vB,IAAO,CAE/B,IADApwJ,EAAM,EACDqwJ,EAAM,EAAGA,EAAM05vB,EAAM15vB,IAC1BrwJ,GAAOiC,EAAImuJ,GAAKC,GAAOvxI,EAAIuxI,GAAKgmwB,GAChCngxB,EAAIka,GAAKimwB,GAAWr25B,EAGxB,OAAiB,IAAT2p5B,GAA0B,IAAZ0M,EAAiBngxB,EAAI,GAAG,GAAKA,EAErD,OAAO2iwB,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOA,EAAQgvB,MAQzDoyJ,MAAM,SAAexiB,EAAGm+Z,GACtB,OAAOgsV,EAAMzutB,SAAS17B,EAAEtxJ,KAAI,SAAS+iB,GAAI,MAAO,CAACA,MAAO,CAAC0siB,KAK3D3yZ,IAAK,SAAaj4J,EAAK6c,GAChBq34B,EAASl05B,EAAI,MAAKA,EAAM,CAAEA,IAC1Bk05B,EAASr34B,EAAI,MAAKA,EAAM,CAAEA,IAS/B,IAPA,IAMA9e,EAAKqwJ,EAND1hJ,EAA0B,IAAlB1M,EAAI,GAAGhM,QAA+B,IAAfgM,EAAIhM,OAAgB4i5B,EAAM58Z,UAAUh6e,GAAOA,EAC9E2M,EAA2B,IAAlBkQ,EAAI,GAAG7oB,QAA+B,IAAf6oB,EAAI7oB,OAAgB4i5B,EAAM58Z,UAAUn9d,GAAOA,EAC3Eo3H,EAAM,GACNka,EAAM,EACNu5vB,EAAOh74B,EAAK1Y,OACZ8z5B,EAAOp74B,EAAK,GAAG1Y,OAERm6J,EAAMu5vB,EAAMv5vB,IAAO,CAGxB,IAFAla,EAAIka,GAAO,GACXpwJ,EAAM,EACDqwJ,EAAM,EAAGA,EAAM05vB,EAAM15vB,IAC1BrwJ,GAAO2O,EAAKyhJ,GAAKC,GAAOzhJ,EAAMwhJ,GAAKC,GACnCna,EAAIka,GAAOpwJ,EAEb,OAAuB,IAAfk2I,EAAIjgJ,OAAgBigJ,EAAI,GAAKA,GAIvC0wF,IAAK,SAAa3kO,EAAK6c,GACrB,OAAO+53B,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOqB,EAAKy1O,IAAI92O,EAAOgvB,OAIjEw2E,IAAK,SAAarzF,GAChB,OAAO424B,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOqB,EAAKmkG,IAAIxlG,OAI1DuvG,IAAK,SAAap9F,GAChB,OAAO424B,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOqB,EAAKkuG,IAAIvvG,OAI1DskB,IAAK,SAAanS,GAChB,OAAO424B,EAAMz74B,IAAI6E,GAAK,SAASnS,GAAS,OAAOqB,EAAKijB,IAAItkB,OAK1Dwm6B,KAAM,SAAcr05B,EAAK4nE,GACvB,IAAI0s1B,EAAQ,EACZn/5B,EAAI,EAMJ,IAJIo5C,MAAMq5B,KAAIA,EAAI,GAEdss1B,EAASl05B,EAAI,MAAKA,EAAMA,EAAI,IAEzB7K,EAAI6K,EAAIhM,OAAQmB,IACrBm/5B,GAASpl6B,EAAKy1O,IAAIz1O,EAAKijB,IAAInS,EAAI7K,IAAKyyE,GAEtC,OAAO14E,EAAKy1O,IAAI2vrB,EAAO,EAAI1s1B,IAK7Bk9a,MAAO,SAAe9kf,EAAK6c,GACzB,OAAO3tB,EAAKkikB,KAAKwlV,EAAM3+uB,IAAIj4J,EAAK6c,IAAQ+53B,EAAMyd,KAAKr05B,GAAO424B,EAAMyd,KAAKx34B,MAKvE034B,IAAK,SAAaz85B,EAAGC,GAEnB,IADA,IAAIy85B,EAAS,GACJr/5B,EAAI,EAAGA,EAAI2C,EAAE9D,OAAQmB,IAC5Bq/5B,EAAOj25B,KAAKzG,EAAE3C,GAAG8M,SAEnB,IAAS9M,EAAI,EAAGA,EAAIq/5B,EAAOxg6B,OAAQmB,IACjCoJ,EAAKnE,MAAMo65B,EAAOr/5B,GAAI4C,EAAE5C,IAE1B,OAAOq/5B,GAMTruX,IAAK,SAAaruiB,GAUhB,IATA,IAMI6xE,EANAgtP,EAAO7+T,EAAE9D,OACTs4iB,EAAOx0iB,EAAE,GAAG9D,OACZ+D,EAAI6+4B,EAAM5j2B,SAAS2jR,EAAM21O,GACzBt0iB,EAAI4+4B,EAAM6d,aAAa385B,EAAGC,GAC1BgO,EAAS,GACT5Q,EAAI,EAIDA,EAAIwhU,EAAMxhU,IAEf,IADA4Q,EAAO5Q,GAAK,GACPw0E,EAAI2ie,EAAM3ie,EAAI3xE,EAAE,GAAGhE,OAAQ21E,IAC9B5jE,EAAO5Q,GAAGw0E,EAAI2ie,GAAQt0iB,EAAE7C,GAAGw0E,GAE/B,OAAO5jE,GAIT2u5B,IAAK,SAAa585B,GAChB,IASA6xE,EATIgr1B,EAAO785B,EAAE9D,OACb4g6B,EAAe,EAAPD,EACRrnO,EAAO,IAAI15rB,MAAMgh6B,GACjBC,EAAWF,EAAO,EAClBG,EAAWF,EAAQ,EACnBG,EAAOF,EAAWF,EAAO,EACzBK,EAAOF,EACP3/5B,EAAI,EACJ4Q,EAAS,EAGT,GAAa,IAAT4u5B,EACF,OAAO785B,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAE5C,KAAO3C,EAAIy/5B,EAAOz/5B,IAChBm4rB,EAAKn4rB,GAAK,EAEZ,IAASA,EAAI,EAAGA,EAAIw/5B,EAAMx/5B,IAAK,CAC7B,IAAKw0E,EAAI,EAAGA,EAAIgr1B,EAAMhr1B,IACpB2jnB,EAAMynO,EAAO,EAAKA,EAAOJ,EAAOI,IAAUj95B,EAAE3C,GAAGw0E,GAC/C2jnB,EAAM0nO,EAAOL,EAAQK,EAAOL,EAAOK,IAAUl95B,EAAE3C,GAAGw0E,GAClDor1B,IACAC,IAEFD,IAASF,EAAWF,EAAO,EAC3BK,IAASF,EAEX,IAAS3/5B,EAAI,EAAGA,EAAIw/5B,EAAMx/5B,IACxB4Q,GAAUunrB,EAAKn4rB,GAEjB,KAAOA,EAAIy/5B,EAAOz/5B,IAChB4Q,GAAUunrB,EAAKn4rB,GAEjB,OAAO4Q,GAGTkv5B,kBAAmB,SAA2Bn95B,EAAGC,GAC/C,IAOAm95B,EAAMC,EAAO/2wB,EAAM9rJ,EAPf6C,EAAI,EACRw0E,EAAI,EACJpxE,EAAIT,EAAE9D,OACNuQ,EAAIzM,EAAE,GAAG9D,OACT8qX,EAAS,EACT/gX,EAAM,EACNiM,EAAI,GAIJ,IADAkr5B,GADAp95B,EAAI8+4B,EAAM2d,IAAIz85B,EAAGC,IACR,GAAG/D,OACJmB,EAAI,EAAGA,EAAIoD,EAAGpD,IAAK,CAGzB,IAFAgg6B,EAAQr95B,EAAE3C,GAAGA,GACbw0E,EAAIx0E,EACC7C,EAAI6C,EAAI,EAAG7C,EAAIiS,EAAGjS,IACjB6i6B,EAAQjm6B,EAAKijB,IAAIra,EAAExF,GAAG6C,MACxBgg6B,EAAQr95B,EAAExF,GAAG6C,GACbw0E,EAAIr3E,GAGR,GAAIq3E,GAAKx0E,EACP,IAAI7C,EAAI,EAAGA,EAAI4i6B,EAAM5i6B,IACnB8rJ,EAAOtmJ,EAAE3C,GAAG7C,GACZwF,EAAE3C,GAAG7C,GAAKwF,EAAE6xE,GAAGr3E,GACfwF,EAAE6xE,GAAGr3E,GAAK8rJ,EAGd,IAAKz0E,EAAIx0E,EAAI,EAAGw0E,EAAIpxE,EAAGoxE,IAErB,IADAm1S,EAAShnX,EAAE6xE,GAAGx0E,GAAK2C,EAAE3C,GAAGA,GACpB7C,EAAI6C,EAAG7C,EAAI4i6B,EAAM5i6B,IACnBwF,EAAE6xE,GAAGr3E,GAAKwF,EAAE6xE,GAAGr3E,GAAKwsX,EAAShnX,EAAE3C,GAAG7C,GAIxC,IAAS6C,EAAIoD,EAAI,EAAGpD,GAAK,EAAGA,IAAK,CAE/B,IADA4I,EAAM,EACD4rE,EAAIx0E,EAAI,EAAGw0E,GAAIpxE,EAAI,EAAGoxE,IACzB5rE,GAAYiM,EAAE2/D,GAAK7xE,EAAE3C,GAAGw0E,GAE1B3/D,EAAE7U,IAAK2C,EAAE3C,GAAG+/5B,EAAO,GAAKn35B,GAAOjG,EAAE3C,GAAGA,GAEtC,OAAO6U,GAGTyq5B,aAAc,SAAsB385B,EAAGC,GAMrC,IALA,IAAIwM,EAAIqy4B,EAAM2d,IAAIz85B,EAAGC,GACrByf,EAAIjT,EAAEvQ,OACNmzJ,EAAI5iJ,EAAE,GAAGvQ,OACLgE,EAAI,EAEC2lC,EAAI,EAAGA,EAAInmB,EAAGmmB,IAAK,CAE1B,IADA,IAAIy33B,EAASz33B,EACJ6sO,EAAK7sO,EAAE,EAAG6sO,EAAKhzP,EAAGgzP,IACrBt7Q,EAAKijB,IAAI5N,EAAEimQ,GAAI7sO,IAAMzuC,EAAKijB,IAAI5N,EAAE6w5B,GAAQz33B,MAC1Cy33B,EAAS5qpB,GAEb,IAAIt4E,EAAM3tL,EAAEo5B,GAGZ,IAFAp5B,EAAEo5B,GAAKp5B,EAAE6w5B,GACT7w5B,EAAE6w5B,GAAUljuB,EACHs4E,EAAK7sO,EAAE,EAAG6sO,EAAKhzP,EAAGgzP,IAAM,CAC/BxyQ,EAAIuM,EAAEimQ,GAAI7sO,GAAKp5B,EAAEo5B,GAAGA,GACpB,IAAK,IAAI3zB,EAAI2zB,EAAG3zB,EAAIm9I,EAAGn9I,IACrBzF,EAAEimQ,GAAIxgQ,IAAMzF,EAAEo5B,GAAG3zB,GAAKhS,GAK5B,IAAS2lC,EAAInmB,EAAE,EAAGmmB,GAAK,EAAGA,IAAK,CAE7B,IADA3lC,EAAIuM,EAAEo5B,GAAGA,GACA6sO,EAAK,EAAGA,EAAK7sO,EAAG6sO,IACvB,IAASxgQ,EAAIm9I,EAAE,EAAGn9I,EAAI2zB,EAAE,EAAG3zB,IACzBzF,EAAEimQ,GAAIxgQ,IAAMzF,EAAEo5B,GAAG3zB,GAAKzF,EAAEimQ,GAAI7sO,GAAK3lC,EAIrC,IADAuM,EAAEo5B,GAAGA,IAAM3lC,EACFgS,EAAIwN,EAAGxN,EAAIm9I,EAAGn9I,IACrBzF,EAAEo5B,GAAG3zB,IAAMhS,EAGf,OAAOuM,GAaT8w5B,YAAa,SAAqB5owB,EAAG10J,GACnC,IAEIy+I,EAFAtoJ,EAAOu+J,EAAE,GAAGz4J,OACZgW,EAAI4s4B,EAAMqR,MAAM,EAAG/55B,GAAM,GAEzBon6B,GAAc,EAclB,YAZmBrn6B,GAAf8J,EAAE,GAAG/D,SACP+D,EAAIA,EAAEoD,KAAI,SAAShG,GAAI,OAAOA,EAAE,MAChCmg6B,GAAc,GAGhB1e,EAAM2Q,OAAOr55B,EAAO,GAAI,GAAI,GAAG2Q,SAAQ,SAAS1J,GAC9CqhJ,EAAQogwB,EAAM2Q,OAAOpy5B,EAAI,EAAGjH,GAAMiN,KAAI,SAASwuE,GAC7C,OAAO3/D,EAAE2/D,GAAK8iF,EAAEt3J,GAAGw0E,MAErB3/D,EAAE7U,IAAM4C,EAAE5C,GAAKyh5B,EAAM744B,IAAIy4I,IAAUiW,EAAEt3J,GAAGA,MAGtCmg6B,EACKtr5B,EAAE7O,KAAI,SAAShG,GAAI,MAAO,CAACA,MAC7B6U,GAGTur5B,aAAc,SAAsB9owB,EAAG10J,GAErC,IAEIy+I,EAFAtoJ,EAAOu+J,EAAE,GAAGz4J,OACZgW,EAAI4s4B,EAAMqR,MAAM,EAAG/55B,GAAM,GAGzBon6B,GAAY,EAahB,YAZmBrn6B,GAAf8J,EAAE,GAAG/D,SACP+D,EAAIA,EAAEoD,KAAI,SAAShG,GAAI,OAAOA,EAAE,MAChCmg6B,GAAc,GAGhB1e,EAAM2Q,OAAOr55B,GAAM2Q,SAAQ,SAAS1J,GAClCqhJ,EAAQogwB,EAAM2Q,OAAOpy5B,GAAGgG,KAAI,SAASwuE,GACnC,OAAO8iF,EAAEt3J,GAAGw0E,GAAK3/D,EAAE2/D,MAErB3/D,EAAE7U,IAAM4C,EAAE5C,GAAKyh5B,EAAM744B,IAAIy4I,IAAUiW,EAAEt3J,GAAGA,MAGtCmg6B,EACKtr5B,EAAE7O,KAAI,SAAShG,GAAI,MAAO,CAACA,MAC7B6U,GAQTm3I,GAAI,SAAYsL,GACd,IAIIjW,EAJAtoJ,EAAOu+J,EAAEz4J,OAETyiK,EAAImgvB,EAAM5j2B,SAAS9kD,GACnBi+J,EAAIyqvB,EAAMqR,MAAMx7vB,EAAEz4J,OAAQy4J,EAAE,GAAGz4J,QAmBnC,OAjBA4i5B,EAAM2Q,OAAOr55B,GAAM2Q,SAAQ,SAASqf,GAClCiuI,EAAE,GAAGjuI,GAAKuuI,EAAE,GAAGvuI,MAEjB043B,EAAM2Q,OAAO,EAAGr55B,GAAM2Q,SAAQ,SAAS2b,GACrCo83B,EAAM2Q,OAAO/s4B,GAAG3b,SAAQ,SAAS1J,GAC/BqhJ,EAAQogwB,EAAM2Q,OAAOpy5B,GAAGgG,KAAI,SAASg0jB,GACnC,OAAO14Z,EAAEj8I,GAAG20iB,GAAMhja,EAAEgja,GAAIh6jB,MAE1BshK,EAAEj8I,GAAGrlB,IAAMs3J,EAAEjyI,GAAGrlB,GAAKyh5B,EAAM744B,IAAIy4I,IAAU2V,EAAEh3J,GAAGA,MAEhDyh5B,EAAM2Q,OAAO/s4B,EAAGtsB,GAAM2Q,SAAQ,SAAS8qE,GACrC6sE,EAAQogwB,EAAM2Q,OAAO/s4B,GAAGrf,KAAI,SAASg0jB,GACnC,OAAO14Z,EAAEj8I,GAAG20iB,GAAMhja,EAAEgja,GAAIxlf,MAE1BwiF,EAAE3xI,GAAGmvD,GAAK8iF,EAAEt3J,GAAGw0E,GAAKit0B,EAAM744B,IAAIy4I,SAG3B,CAACigB,EAAGtK,IAMbqpwB,SAAU,SAAkB/owB,GAC1B,IAEIjW,EAFAtoJ,EAAOu+J,EAAEz4J,OACTg5J,EAAI4pvB,EAAMqR,MAAMx7vB,EAAEz4J,OAAQy4J,EAAE,GAAGz4J,QAcnC,OAZA4i5B,EAAM2Q,OAAOr55B,GAAM2Q,SAAQ,SAAS1J,GAClCqhJ,EAAQogwB,EAAM2Q,OAAOpy5B,GAAGgG,KAAI,SAAS+iB,GACnC,OAAOhvB,EAAKy1O,IAAI33E,EAAE73J,GAAG+oB,GAAG,MAE1B8uI,EAAE73J,GAAGA,GAAKjG,EAAK8oK,KAAKvL,EAAEt3J,GAAGA,GAAKyh5B,EAAM744B,IAAIy4I,IACxCogwB,EAAM2Q,OAAOpy5B,EAAI,EAAGjH,GAAM2Q,SAAQ,SAAS8qE,GACzC6sE,EAAQogwB,EAAM2Q,OAAOpy5B,GAAGgG,KAAI,SAAS+iB,GACnC,OAAO8uI,EAAE73J,GAAG+oB,GAAK8uI,EAAErjF,GAAGzrD,MAExB8uI,EAAErjF,GAAGx0E,IAAMs3J,EAAEt3J,GAAGw0E,GAAKit0B,EAAM744B,IAAIy4I,IAAUwW,EAAE73J,GAAGA,SAG3C63J,GAITyowB,aAAc,SAAsB395B,EAAGC,EAAGiS,EAAGs/D,GAQ3C,IAPA,IAMIos1B,EAAI195B,EAAGwf,EAAGm+4B,EANVxg6B,EAAI,EACJw0E,EAAI,EACJpxE,EAAIT,EAAE9D,OACNwmB,EAAI,GACJ+xI,EAAI,GACJt0J,EAAI,GAED9C,EAAIoD,EAAGpD,IAIZ,IAHAqlB,EAAErlB,GAAK,GACPo3J,EAAEp3J,GAAK,GACP8C,EAAE9C,GAAK,GACFw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,EAAIw0E,GACNnvD,EAAErlB,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACf4iF,EAAEp3J,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,GACXx0E,EAAIw0E,GACb4iF,EAAEp3J,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,IAEpB1xE,EAAE9C,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK4iF,EAAEp3J,GAAGw0E,GAAK,GAS1B,IALAnyD,EAAIo/3B,EAAMzutB,SAASyutB,EAAMzutB,SAASyutB,EAAMzwW,IAAIluiB,GAAI2+4B,EAAM9l4B,IAAI0J,EAAG+xI,KAAM,GACnEv0J,EAAI4+4B,EAAMzutB,SAASyutB,EAAMzwW,IAAIluiB,GAAIF,GACjC295B,EAAK1r5B,EACL2r5B,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGxN,GAAIhS,GACrC7C,EAAI,EACGjG,EAAKijB,IAAIyk4B,EAAMyd,KAAKzd,EAAMll4B,SAASik5B,EAAGD,KAAQps1B,GACnDos1B,EAAKC,EACLA,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGk+4B,GAAK195B,GACtC7C,IAEF,OAAOwg6B,GAGTC,aAAc,SAAsB995B,EAAGC,EAAGiS,EAAGs/D,GAO3C,IANA,IAKIK,EAAG+r1B,EAAI195B,EAAGwf,EAAGm+4B,EALbxg6B,EAAI,EACJoD,EAAIT,EAAE9D,OACNwmB,EAAI,GACJ+xI,EAAI,GACJt0J,EAAI,GAED9C,EAAIoD,EAAGpD,IAIZ,IAHAqlB,EAAErlB,GAAK,GACPo3J,EAAEp3J,GAAK,GACP8C,EAAE9C,GAAK,GACFw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,EAAIw0E,GACNnvD,EAAErlB,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACf4iF,EAAEp3J,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,GACXx0E,EAAIw0E,GACb4iF,EAAEp3J,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,IAEpB1xE,EAAE9C,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK4iF,EAAEp3J,GAAGw0E,GAAK,GAS1B,IALAnyD,EAAIo/3B,EAAMzutB,SAASyutB,EAAMzutB,SAASyutB,EAAMzwW,IAAIywW,EAAM9l4B,IAAI7Y,EAAGuiB,IAAK+xI,IAAK,GACnEv0J,EAAI4+4B,EAAMzutB,SAASyutB,EAAMzwW,IAAIywW,EAAM9l4B,IAAI7Y,EAAGuiB,IAAKziB,GAC/C295B,EAAK1r5B,EACL2r5B,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGxN,GAAIhS,GACrC7C,EAAI,EACGjG,EAAKijB,IAAIyk4B,EAAMyd,KAAKzd,EAAMll4B,SAASik5B,EAAID,KAAQps1B,GACpDos1B,EAAKC,EACLA,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGk+4B,GAAK195B,GACtC7C,GAAQ,EAEV,OAAOwg6B,GAGTE,IAAK,SAAa/95B,EAAGC,EAAGiS,EAAGs/D,EAAG69E,GAO5B,IANA,IAKIx9E,EAAG+r1B,EAAI195B,EAAGwf,EAAGm+4B,EALbxg6B,EAAI,EACJoD,EAAIT,EAAE9D,OACNwmB,EAAI,GACJ+xI,EAAI,GACJt0J,EAAI,GAED9C,EAAIoD,EAAGpD,IAIZ,IAHAqlB,EAAErlB,GAAK,GACPo3J,EAAEp3J,GAAK,GACP8C,EAAE9C,GAAK,GACFw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,EAAIw0E,GACNnvD,EAAErlB,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACf4iF,EAAEp3J,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,GACXx0E,EAAIw0E,GACb4iF,EAAEp3J,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK1xE,EAAE9C,GAAGw0E,GAAK,IAEpB1xE,EAAE9C,GAAGw0E,GAAK7xE,EAAE3C,GAAGw0E,GACfnvD,EAAErlB,GAAGw0E,GAAK4iF,EAAEp3J,GAAGw0E,GAAK,GAY1B,IARAnyD,EAAIo/3B,EAAMzutB,SAASyutB,EAAMzwW,IAAIywW,EAAM9l4B,IAAI7Y,EAAG2+4B,EAAMzutB,SAAS3tK,EAAG2sI,KACzCyvvB,EAAMll4B,SAASkl4B,EAAMzutB,SAASlwL,EAAG,EAAIkvJ,GACtByvvB,EAAMzutB,SAAS57B,EAAGpF,KACpDnvJ,EAAI4+4B,EAAMzutB,SAASyutB,EAAMzutB,SAASyutB,EAAMzwW,IAAIywW,EAAM9l4B,IAAI7Y,EAClD2+4B,EAAMzutB,SAAS3tK,EAAG2sI,KAAMpvJ,GAAIovJ,GAChCuuwB,EAAK1r5B,EACL2r5B,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGxN,GAAIhS,GACrC7C,EAAI,EACGjG,EAAKijB,IAAIyk4B,EAAMyd,KAAKzd,EAAMll4B,SAASik5B,EAAID,KAAQps1B,GACpDos1B,EAAKC,EACLA,EAAK/e,EAAM9l4B,IAAI8l4B,EAAMzutB,SAAS3wK,EAAGk+4B,GAAK195B,GACtC7C,IAEF,OAAOwg6B,GAGTG,YAAa,SAAqBh+5B,GAOhC,IANA,IAKI+sf,EAAOv7a,EAAGh3E,EAAGq3E,EALbplE,EAAIzM,EAAE9D,OACNuE,EAAIT,EAAE,GAAG9D,OACTmB,EAAI,EACJgyJ,EAAI,GACJv/E,EAAI,GAEDzyE,EAAIoP,EAAI,EAAGpP,IAAK,CAErB,IADA0vf,EAAQ,EACHl7a,EAAIx0E,EAAI,EAAGw0E,EAAIpxE,EAAGoxE,IACvBk7a,GAAU/sf,EAAE6xE,GAAGx0E,GAAK2C,EAAE6xE,GAAGx0E,GAMzB,IAJA0vf,GADU/sf,EAAE3C,EAAI,GAAGA,GAAK,GAAM,EAAI,GACjBjG,EAAK8oK,KAAK6sV,GAC3Bv7a,EAAIp6E,EAAK8oK,MAAQ6sV,EAAQA,EAAS/sf,EAAE3C,EAAI,GAAGA,GAAK0vf,GAAS,IACzD19V,EAAIyvvB,EAAMqR,MAAM1j5B,EAAG,IACjBpP,EAAI,GAAG,IAAM2C,EAAE3C,EAAI,GAAGA,GAAK0vf,IAAU,EAAIv7a,GACtCh3E,EAAI6C,EAAI,EAAG7C,EAAIiS,EAAGjS,IAAK60J,EAAE70J,GAAG,GAAKwF,EAAExF,GAAG6C,IAAM,EAAIm0E,GACrD1B,EAAIgv0B,EAAMll4B,SAASkl4B,EAAM5j2B,SAASzuC,EAAGhM,GACjCq+4B,EAAMzutB,SAASyutB,EAAMzutB,SAAShhC,EAAGyvvB,EAAM58Z,UAAU7yV,IAAK,IAC1DrvJ,EAAI8+4B,EAAMzutB,SAASvgH,EAAGgv0B,EAAMzutB,SAASrwL,EAAG8vE,IAE1C,OAAO9vE,GAMTi+5B,GAAK,WAOH,IAAIh45B,EAAQ644B,EAAM744B,IACd6pL,EAAQgvtB,EAAM2Q,OA+BlB,SAASyO,EAAIhs5B,GAIX,IAMI7U,EAAEw0E,EAAEr3E,EANJiG,EAAIyR,EAAEhW,OACN4zE,EAAI59D,EAAE,GAAGhW,OAMb,IAJAgW,EAAI4s4B,EAAMviwB,KAAKrqI,GACfs/D,EAAIst0B,EAAMqR,MAAMrg1B,EAAGA,GAGf+B,EAAI,EAAGA,EAAI/B,EAAG+B,IAAI,CAIpB,IAHAL,EAAEK,GAAGA,GAAKz6E,EAAK8oK,KAAKj6J,EAAI6pL,EAAMrvL,GAAG4C,KAAI,SAAShG,GAC5C,OAAO6U,EAAE7U,GAAGw0E,GAAK3/D,EAAE7U,GAAGw0E,QAEpBx0E,EAAI,EAAGA,EAAIoD,EAAGpD,IAChB6U,EAAE7U,GAAGw0E,GAAK3/D,EAAE7U,GAAGw0E,GAAKL,EAAEK,GAAGA,GAE3B,IAAIr3E,EAAIq3E,EAAE,EAAGr3E,EAAIs1E,EAAGt1E,IAIlB,IAHAg3E,EAAEK,GAAGr3E,GAAKyL,EAAI6pL,EAAMrvL,GAAG4C,KAAI,SAAShG,GAClC,OAAO6U,EAAE7U,GAAGw0E,GAAK3/D,EAAE7U,GAAG7C,OAEpB6C,EAAI,EAAGA,EAAIoD,EAAGpD,IAChB6U,EAAE7U,GAAG7C,GAAK0X,EAAE7U,GAAG7C,GAAK0X,EAAE7U,GAAGw0E,GAAGL,EAAEK,GAAGr3E,GAIvC,MAAO,CAAC0X,EAAGs/D,GAGb,OAAO0s1B,EArEJ,GAwELC,MAAQ,SAASxpwB,EAAG10J,GAIlB,SAASm+5B,EAAIzpwB,GAEX,IAAIv+J,GADJu+J,EAAImqvB,EAAMviwB,KAAKoY,IACFz4J,OACT24J,EAAIiqvB,EAAM5j2B,SAAS9kD,GAgBvB,OAfA0o5B,EAAM2Q,OAAOr55B,EAAO,GAAI,GAAI,GAAG2Q,SAAQ,SAAS1J,GAC9Cyh5B,EAAM8R,YACF/7vB,EAAG,CAAEwB,IAAKh5J,GAAKyh5B,EAAM5utB,OAAO4utB,EAAM304B,MAAM0qJ,EAAG,CAAEwB,IAAKh5J,IAAMs3J,EAAEt3J,GAAGA,KACjEyh5B,EAAM8R,YACFj8vB,EAAG,CAAE0B,IAAKh5J,GAAKyh5B,EAAM5utB,OAAO4utB,EAAM304B,MAAMwqJ,EAAG,CAAE0B,IAAKh5J,IAAMs3J,EAAEt3J,GAAGA,KACjEyh5B,EAAM2Q,OAAOpy5B,GAAG0J,SAAQ,SAAS8qE,GAC/B,IAAI3xE,EAAI4+4B,EAAMzutB,SAAS17B,EAAE9iF,GAAGx0E,IAAK,GAC7Bgh6B,EAAKvf,EAAM304B,MAAMwqJ,EAAG,CAAE0B,IAAKxkF,IAC3Bys1B,EAAMxf,EAAMzutB,SAASyutB,EAAM304B,MAAMwqJ,EAAG,CAAE0B,IAAKh5J,IAAM6C,GACrD4+4B,EAAM8R,YAAYj8vB,EAAG,CAAE0B,IAAKxkF,GAAKit0B,EAAM9l4B,IAAIql5B,EAAIC,IAC/C,IAAIC,EAAKzf,EAAM304B,MAAM0qJ,EAAG,CAAEwB,IAAKxkF,IAC3B2s1B,EAAM1f,EAAMzutB,SAASyutB,EAAM304B,MAAM0qJ,EAAG,CAAEwB,IAAKh5J,IAAM6C,GACrD4+4B,EAAM8R,YAAY/7vB,EAAG,CAAEwB,IAAKxkF,GAAKit0B,EAAM9l4B,IAAIul5B,EAAIC,UAG5C3pwB,EAGT,SAAS4pwB,EAAS9pwB,EAAG10J,GACnB,IAAIy+5B,GAAa,OACGvo6B,IAAhB8J,EAAE,GAAG/D,SAEP+D,EAAIA,EAAEoD,KAAI,SAAS6O,GAAI,MAAO,CAACA,MAC/Bws5B,GAAa,GAEf,IAAIT,EAAKnf,EAAMmf,GAAGtpwB,GACdJ,EAAI0pwB,EAAG,GACP5pwB,EAAI4pwB,EAAG,GACPzkpB,EAAQ7kH,EAAE,GAAGz4J,OACbyi6B,EAAK7f,EAAM304B,MAAMoqJ,EAAE,CAAC+B,IAAI,CAACz/J,IAAI2iR,KAE7BolpB,EAAKR,EADAtf,EAAM304B,MAAMkqJ,EAAE,CAACgC,IAAI,CAACx/J,IAAI2iR,MAEhCqlpB,EAAK/f,EAAM58Z,UAAUy8a,QAELxo6B,IAAjB0o6B,EAAG,GAAG3i6B,SACR2i6B,EAAK,CAACA,IAGJ,IAAI3s5B,EAAI4s4B,EAAMzutB,SAASyutB,EAAMzutB,SAASuuuB,EAAIC,GAAK5+5B,GAO/C,YALa9J,IAAb+b,EAAEhW,SACJgW,EAAI,CAAC,CAACA,KAIAws5B,EACKxs5B,EAAE7O,KAAI,SAAShG,GAAI,OAAOA,EAAE,MAC9B6U,EAGT,OAAOus5B,EA1DD,GA6DRK,OAAQ,SAAgB9+5B,GAQtB,IAPA,IAKU6xE,EAAG/B,EAAG03E,EAAGu3wB,EAAOC,EAAOn35B,EAL7BU,EAAY,EAEZ9H,EAAIT,EAAE9D,OACNuG,EAAIq84B,EAAM5j2B,SAASz6C,EAAGA,GACtBgv4B,EAAK,GAGY,IAAdln4B,GAAiB,CAEtBw25B,EAAQ/+5B,EAAE,GAAG,GACb8vE,EAAI,EACJ03E,EAAI,EACJ,IAAK,IAAInqJ,EAAI,EAAGA,EAAIoD,EAAGpD,IACrB,IAAKw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,GAAKw0E,GACHkt1B,EAAQ3n6B,EAAKijB,IAAIra,EAAE3C,GAAGw0E,MACxBkt1B,EAAQ3n6B,EAAKijB,IAAIra,EAAE3C,GAAGw0E,IACtB/B,EAAIzyE,EACJmqJ,EAAI31E,GAmBZ,IAbEmt1B,EADEh/5B,EAAE8vE,GAAGA,KAAO9vE,EAAEwnJ,GAAGA,GACVxnJ,EAAE8vE,GAAG03E,GAAK,EAAKpwJ,EAAKqhf,GAAK,GAAKrhf,EAAKqhf,GAAK,EAEzCrhf,EAAK8+4B,KAAK,EAAIl24B,EAAE8vE,GAAG03E,IAAMxnJ,EAAE8vE,GAAGA,GAAK9vE,EAAEwnJ,GAAGA,KAAO,GACzD3/I,EAAIi34B,EAAM5j2B,SAASz6C,EAAGA,IACpBqvE,GAAGA,GAAK14E,EAAKm1f,IAAIyya,GACnBn35B,EAAEioE,GAAG03E,IAAMpwJ,EAAKq1f,IAAIuya,GACpBn35B,EAAE2/I,GAAG13E,GAAK14E,EAAKq1f,IAAIuya,GACnBn35B,EAAE2/I,GAAGA,GAAKpwJ,EAAKm1f,IAAIyya,GAEnBv85B,EAAIq84B,EAAMzutB,SAAS5tL,EAAGoF,GAEtB7H,EADI8+4B,EAAMzutB,SAASyutB,EAAMzutB,SAASyutB,EAAMzwW,IAAIxmiB,GAAI7H,GAAI6H,GAEpDU,EAAY,EACHlL,EAAI,EAAGA,EAAIoD,EAAGpD,IACrB,IAAKw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,GAAKw0E,GAAKz6E,EAAKijB,IAAIra,EAAE3C,GAAGw0E,IAAM,OAChCtpE,EAAY,GAKpB,IAASlL,EAAI,EAAGA,EAAIoD,EAAGpD,IAAKoy4B,EAAGhp4B,KAAKzG,EAAE3C,GAAGA,IAEzC,MAAO,CAACoF,EAAGgt4B,IAGbwvB,WAAY,SAAoBlu1B,EAAGrxD,EAAGowD,EAAGov1B,EAAKC,EAAK33rB,GACjD,IAAI43rB,EAAIC,EAAUC,EAClB,GAAc,IAAV93rB,EACF,KAAO03rB,GAAOpv1B,GAIZqv1B,KAHAC,EAAK1/4B,EAAIqxD,EAAEmu1B,EAAKC,KAChBE,EAAK3/4B,EAAIqxD,EAAEmu1B,EAAMx/4B,EAAGy/4B,EAAMC,KACD,EAEzBF,GAAYx/4B,EAGhB,GAAc,IAAV8nN,EACF,KAAO03rB,GAAOpv1B,GAMZqv1B,KALAC,EAAK1/4B,EAAIqxD,EAAEmu1B,EAAKC,IAIG,GAHnBE,EAAK3/4B,EAAIqxD,EAAEmu1B,EAAMx/4B,EAAI,EAAGy/4B,EAAMC,EAAK,IAGP,GAF5BE,EAAK5/4B,EAAIqxD,EAAEmu1B,EAAMx/4B,EAAI,EAAGy/4B,EAAME,EAAK,IAC9B3/4B,EAAIqxD,EAAEmu1B,EAAKx/4B,EAAGy/4B,EAAMG,IACkB,EAE3CJ,GAAYx/4B,EAGhB,OAAOy/4B,GAGTI,QAAS,SAAiBxu1B,EAAG/wE,EAAGC,EAAGunO,GAOjC,IANA,IAKI/6N,EAAGop5B,EAAIhk1B,EAAGr3E,EAAGq6J,EALbx3J,EAAI,EACJqiB,GAAKzf,EAAID,GAAK,EACdkS,EAAI,GACJm5I,EAAK,GACLr6E,EAAI,GAED3zE,EAAImqO,EAAQ,GAAG,CAEpB,IADA3yE,EAAI9jF,EAAE/wE,GACD6xE,EAAI7xE,EAAGxF,EAAI,EAAGq3E,GAAK5xE,EAAG4xE,GAAQnyD,EAAGllB,IAAK0X,EAAE1X,GAAKq3E,EAElD,IADAplE,EAAIyF,EAAEhW,OACD21E,EAAI,EAAGA,EAAIplE,EAAI,EAAGolE,IACrBgjF,IAAQhjF,EAAI,IAAO,EAAK,EAAI,GAAKd,EAAE7+D,EAAE2/D,IAEvCgjF,EAAKn1I,EAAI,GAAMm1I,EAAI9jF,EAAE9wE,IACrB+wE,EAAE3zE,GAAKw3J,EACPn1I,GAAK,EACLriB,IAIF,IAFAw45B,EAAK7k1B,EAAE90E,OACPuQ,EAAI,EACU,IAAPop5B,GAAU,CACf,IAAKhk1B,EAAI,EAAGA,EAAIgk1B,EAAK,EAAGhk1B,IACxBw5E,EAAGx5E,IAAOz6E,EAAKy1O,IAAI,EAAGpgO,GAAMukE,EAAEa,EAAI,GAAKb,EAAEa,KAAOz6E,EAAKy1O,IAAI,EAAGpgO,GAAK,GACjEop5B,EAAKxqwB,EAAGnvJ,OACR80E,EAAIq6E,EACJA,EAAK,GACL5+I,IAEF,OAAOukE,GAGTwu1B,WAAY,SAAoBhrwB,EAAGzjF,EAAG7+D,EAAGwN,GACvC,SAASwvI,EAAIsF,EAAGtiJ,GAId,IAHA,IAEI49D,EAFAzyE,EAAI,EACJoD,EAAI+zJ,EAAEt4J,OAEHmB,EAAIoD,EAAGpD,IACRm3J,EAAEn3J,KAAO6U,IAAG49D,EAAIzyE,GACtB,OAAOyyE,EAED0kF,EAAEt4J,OAMV,IANA,IAKAs2Q,EAAIE,EAAIjmQ,EAAGzM,EAAG6xE,EAJd4t1B,EAAQro6B,EAAKijB,IAAInI,EAAIsiJ,EAAEtF,EAAIsF,EAAGtiJ,GAAK,IACnC7U,EAAI,EACJ2zE,EAAI,GACJq6E,EAAK,GAEE3rI,GAAK+/4B,GACVjtpB,EAAKtjH,EAAIsF,EAAGtiJ,EAAIwN,GAChBgzP,EAAKxjH,EAAIsF,EAAGtiJ,GACZ8+D,EAAE3zE,IAAM0zE,EAAEyhM,GAAM,EAAIzhM,EAAE2hM,GAAM3hM,EAAE,EAAI2hM,EAAKF,KAAQ9yP,EAAIA,GACnDA,GAAK,EACLriB,IAIF,IAFA2C,EAAIgxE,EAAE90E,OACNuQ,EAAI,EACQ,GAALzM,GAAQ,CACb,IAAK6xE,EAAI,EAAGA,EAAI7xE,EAAI,EAAG6xE,IACvBw5E,EAAGx5E,IAAOz6E,EAAKy1O,IAAI,EAAGpgO,GAAMukE,EAAEa,EAAI,GAAKb,EAAEa,KAAOz6E,EAAKy1O,IAAI,EAAGpgO,GAAK,GACjEzM,EAAIqrJ,EAAGnvJ,OACP80E,EAAIq6E,EACJA,EAAK,GACL5+I,IAEF,OAAOukE,GAGT0u1B,QAAS,SAAiB3u1B,EAAG/wE,EAAGC,EAAGQ,GAQjC,IAPA,IAMIgM,EANAiT,GAAKzf,EAAID,GAAKS,EACdo0J,EAAI9jF,EAAE/wE,GACNkS,EAAI,GACJ2/D,EAAI7xE,EACJxF,EAAI,EACJ6C,EAAI,EAEDw0E,GAAK5xE,EAAG4xE,GAAQnyD,EAAGllB,IACxB0X,EAAE1X,GAAKq3E,EAET,IADAplE,EAAIyF,EAAEhW,OACCmB,EAAIoP,EAAI,EAAGpP,IAChBw3J,IAAOx3J,EAAI,IAAM,EAAK,EAAI,GAAK0zE,EAAE7+D,EAAE7U,IAErC,OAAQqiB,EAAI,GAAMm1I,EAAI9jF,EAAE9wE,KAG1B0/5B,QAAS,SAAiBnrwB,EAAGghG,EAAGoqqB,EAAI7p6B,GASlC,IARA,IAOI87E,EAPApxE,EAAI+zJ,EAAEt4J,OACN4zE,EAAI,EACJzyE,EAAI,EACJqlB,EAAI,GACJ22I,EAAK,GACL1E,EAAI,GACJm+Z,EAAI,GAEDz1jB,EAAIoD,EAAGpD,IAAK,CAEjB,IADAqlB,EAAErlB,GAAK,EACFw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,GAAKw0E,IAAGnvD,EAAErlB,KAAOtH,EAAQy+J,EAAE3iF,KAAO2iF,EAAEn3J,GAAKm3J,EAAE3iF,KAGjD,IADAwnF,EAAGh8J,GAAK,EACHw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IACbx0E,GAAKw0E,IAAGwnF,EAAGh8J,IAAM,GAAKm3J,EAAGn3J,GAAKm3J,EAAE3iF,KAEtC8iF,EAAEt3J,IAAM,EAAI,GAAKtH,EAAQy+J,EAAEn3J,IAAMg8J,EAAGh8J,KAAOqlB,EAAErlB,GAAKqlB,EAAErlB,IACpDy1jB,EAAEz1jB,IAAMtH,EAAQy+J,EAAEn3J,KAAOqlB,EAAErlB,GAAKqlB,EAAErlB,IAClCyyE,GAAM6kF,EAAEt3J,GAAKm4P,EAAEn4P,GAAKy1jB,EAAEz1jB,GAAKui6B,EAAGvi6B,GAEhC,OAAOyyE,GAGT+v1B,SAAU,SAAkBrrwB,EAAGghG,EAAGz/P,GAKhC,IAJA,IAEI87E,EAAGnvD,EAFHotD,EAAI,EACJzyE,EAAI,EAEJoD,EAAI+zJ,EAAEt4J,OACHmB,EAAIoD,EAAGpD,IAAK,CAEjB,IADAqlB,EAAI8yO,EAAEn4P,GACDw0E,EAAI,EAAGA,EAAIpxE,EAAGoxE,IAEbx0E,GAAKw0E,IAAGnvD,IAAM3sB,EAAQy+J,EAAE3iF,KAAO2iF,EAAEn3J,GAAKm3J,EAAE3iF,KAG9C/B,GAAKptD,EAEP,OAAOotD,GAGTgw1B,aAAc,SAAsBtrwB,EAAGghG,EAAGz/P,GAUxC,IATA,IACW87E,EADPpxE,EAAI+zJ,EAAEt4J,OACNmB,EAAI,EACJs3J,EAAI,GACJm+Z,EAAI,GACJ/lE,EAAQ,GACR7sf,EAAI,GACJwf,EAAI,GACJzf,EAAI,GACJE,EAAI,GACD9C,EAAIoD,EAAI,EAAGpD,IAChBqiB,EAAEriB,GAAKm3J,EAAEn3J,EAAI,GAAKm3J,EAAEn3J,GAEtB,IADA0vf,EAAM,GAAK,EACF1vf,EAAI,EAAGA,EAAIoD,EAAI,EAAGpD,IACzB0vf,EAAM1vf,GAAM,EAAIqiB,EAAEriB,IAAOm4P,EAAEn4P,EAAI,GAAKm4P,EAAEn4P,IACjC,EAAIqiB,EAAEriB,EAAE,IAAOm4P,EAAEn4P,GAAKm4P,EAAEn4P,EAAE,IAEjC,IAASA,EAAI,EAAGA,EAAIoD,EAAI,EAAGpD,IACzBs3J,EAAEt3J,GAAK,GACPy1jB,EAAEz1jB,GAAK,GACPs3J,EAAEt3J,GAAGA,EAAE,GAAKqiB,EAAEriB,EAAE,GAChBs3J,EAAEt3J,GAAGA,GAAK,GAAKqiB,EAAEriB,EAAI,GAAKqiB,EAAEriB,IAC5Bs3J,EAAEt3J,GAAGA,EAAE,GAAKqiB,EAAEriB,GACdy1jB,EAAEz1jB,GAAG,GAAK0vf,EAAM1vf,GAGlB,IADA6C,EAAI4+4B,EAAMzutB,SAASyutB,EAAMzwW,IAAI15Y,GAAIm+Z,GAC5Bjhf,EAAI,EAAGA,EAAIpxE,EAAI,EAAGoxE,IACrB5xE,EAAE4xE,IAAM2jL,EAAE3jL,EAAI,GAAK2jL,EAAE3jL,IAAMnyD,EAAEmyD,GAAKnyD,EAAEmyD,IAAM3xE,EAAE2xE,EAAI,GAAG,GAAK,EAAI3xE,EAAE2xE,GAAG,IAAM,EACvE1xE,EAAE0xE,IAAM3xE,EAAE2xE,EAAI,GAAG,GAAK3xE,EAAE2xE,GAAG,KAAO,EAAInyD,EAAEmyD,IAE1C,IAAKA,EAAI,EAAGA,EAAIpxE,KACV+zJ,EAAE3iF,GAAK97E,GADM87E,KAInB,OAAO2jL,EADP3jL,GAAK,IACU97E,EAAQy+J,EAAE3iF,IAAM5xE,EAAE4xE,GAAKit0B,EAAMihB,GAAGhq6B,EAAMy+J,EAAE3iF,IACnD3xE,EAAE2xE,IAAM97E,EAAQy+J,EAAE3iF,IAAMit0B,EAAMihB,GAAGhq6B,EAAQy+J,EAAE3iF,IAAM1xE,EAAE0xE,IAGzDmu1B,iBAAkB,WAChB,MAAM,IAAI/95B,MAAM,yCAGlBg+5B,IAAK,SAAazrwB,GAChB,IAII3iF,EAAGqu1B,EAJHzz5B,EAAI+nJ,EAAEt4J,OACNuE,EAAI+zJ,EAAE,GAAGt4J,OAETmB,EAAI,EAEJo3J,EAAI,GACJQ,EAAI,GACJhnJ,EAAS,GACTky5B,EAAQ,GACR9qwB,EAAI,GACJ+qwB,EAAK,GACLttW,EAAI,GACJ1+Z,EAAI,GACJM,EAAI,GACJ2rwB,EAAK,GACT,IAAShj6B,EAAI,EAAGA,EAAIoP,EAAGpP,IACrBo3J,EAAEp3J,GAAKyh5B,EAAM744B,IAAIuuJ,EAAEn3J,IAAMoD,EAE3B,IAASpD,EAAI,EAAGA,EAAIoD,EAAGpD,IAErB,IADAy1jB,EAAEz1jB,GAAK,GACHw0E,EAAI,EAAGA,EAAIplE,EAAGolE,IAChBihf,EAAEz1jB,GAAGw0E,GAAK2iF,EAAE3iF,GAAGx0E,GAAKo3J,EAAE5iF,GAI1B,IADAihf,EAAIgsV,EAAM58Z,UAAU4wE,GACXz1jB,EAAI,EAAGA,EAAIoP,EAAGpP,IAErB,IADA+2J,EAAE/2J,GAAK,GACFw0E,EAAI,EAAGA,EAAIplE,EAAGolE,IACjBuiF,EAAE/2J,GAAGw0E,GAAMit0B,EAAM3+uB,IAAI,CAAC2yZ,EAAEz1jB,IAAK,CAACy1jB,EAAEjhf,MAASpxE,EAAI,GAOjD,IAHAi0J,GADAzmJ,EAAS6w4B,EAAMggB,OAAO1qwB,IACX,GACXa,EAAIhnJ,EAAO,GACXoy5B,EAAKvhB,EAAM58Z,UAAUxtV,GACZr3J,EAAI,EAAGA,EAAI43J,EAAE/4J,OAAQmB,IAC5B,IAAKw0E,EAAIx0E,EAAGw0E,EAAIojF,EAAE/4J,OAAQ21E,IACrBojF,EAAE53J,GAAK43J,EAAEpjF,KACVqu1B,EAAQjrwB,EAAE53J,GACV43J,EAAE53J,GAAK43J,EAAEpjF,GACTojF,EAAEpjF,GAAKqu1B,EACPC,EAAQE,EAAGhj6B,GACXgj6B,EAAGhj6B,GAAKgj6B,EAAGxu1B,GACXwu1B,EAAGxu1B,GAAKsu1B,GAKd,IADAC,EAAKthB,EAAM58Z,UAAU4wE,GACZz1jB,EAAI,EAAGA,EAAIoP,EAAGpP,IAErB,IADAg4J,EAAEh4J,GAAK,GACFw0E,EAAI,EAAGA,EAAIuu1B,EAAGlk6B,OAAQ21E,IACzBwjF,EAAEh4J,GAAGw0E,GAAKit0B,EAAM3+uB,IAAI,CAACkgwB,EAAGhj6B,IAAK,CAAC+i6B,EAAGvu1B,KAGrC,MAAO,CAAC2iF,EAAGS,EAAGorwB,EAAIhrwB,MAKrB,SAAS9oH,GACR,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkvC,EAAMrwC,OAAQmB,KAAM,SAAS6z5B,GAC/CpS,EAAM5h5B,GAAGg05B,GAAY,SAASns4B,EAAKR,GACjC,IAAIyv4B,EAAU355B,KAEd,OAAIkqB,GACF2uB,YAAW,WACT3uB,EAAKlpB,KAAK245B,EAASlV,EAAM5h5B,GAAGg05B,GAAU715B,KAAK245B,EAASjv4B,MACnD,IACI1qB,MAEiC,kBAA/Byk5B,EAAMoS,GAAU725B,KAAM0qB,GACxB+53B,EAAMoS,GAAU725B,KAAM0qB,GAEtB+53B,EAAMA,EAAMoS,GAAU725B,KAAM0qB,KAbD,CAetCwnB,EAAMlvC,IAhBT,CAiBC,8DAA8D+7C,MAAM,MA5+BrE,CA8+BC0l2B,EAAO1n5B,MACR,SAAS0n5B,EAAO1n5B,GAEjB,IAAI+S,EAAQ,GAAGA,MACXowG,EAAWukyB,EAAMz7wB,MAAM9oB,SACvBx+G,EAAU+i5B,EAAMz7wB,MAAMtnI,QA4T1B,SAASuk6B,EAAwBztrB,EAAIgimB,EAAI/hmB,EAAIytrB,GAC3C,GAAI1trB,EAAK,GAAKC,EAAK,GAAKD,GAAM,GAAKC,GAAM,EACvC,MAAM,IAAI7wO,MAAM,wDAElB,IAAIu+5B,GAAU3trB,EAAKgimB,EAAK/hmB,EAAKytrB,IAAO1rF,EAAK0rF,GAEzC,OAAQ1trB,EAAKC,GADJ17O,EAAK8oK,KAAKsgwB,GAAU,EAAIA,IAAY,EAAE3rF,EAAO,EAAE0rF,IA7T1DzhB,EAAM/qtB,OAAO,CAIX0suB,OAAQ,WACN,IAAIp74B,EAAOlb,EAAM9O,KAAK0C,WACtB,OAAIw8G,EAASl1F,EAAK,KACRA,EAAK,GAAKA,EAAK,IAAMA,EAAK,IAE5BA,EAAK,GAAKy53B,EAAMnptB,KAAKtwK,EAAK,KAAOy53B,EAAMwF,MAAMj/3B,EAAK,GAAIA,EAAK,KAOrEq74B,MAAO,WACL,IACIvrwB,EADA9vI,EAAOlb,EAAM9O,KAAK0C,WAEtB,OAAIhC,EAAQspB,EAAK,KAEf8vI,EAAI2pvB,EAAM2hB,OAAOp74B,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACVy53B,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAI,EAAG,GACG,EAArC2pvB,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAI,EAAG,IAEjC9vI,EAAKnpB,OAAS,GAEhBi5J,EAAI2pvB,EAAM2hB,OAAOp74B,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACVy53B,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAG,EAAE,GACI,EAApC2pvB,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAG,EAAE,KAGnCA,EAAI9vI,EAAK,GACW,IAAZA,EAAK,GACVy53B,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAG,EAAE,GACG,EAAnC2pvB,EAAMsE,OAAO3D,KAAKro5B,EAAKijB,IAAI86I,GAAG,EAAE,OAM3C2pvB,EAAM/qtB,OAAO+qtB,EAAM5h5B,GAAI,CACrBuj6B,OAAQ,SAAgB1q6B,EAAOs2b,GAC7B,OAAQt2b,EAAQsE,KAAKs7L,QAAUt7L,KAAKiq5B,MAAMj4d,IAG5Cq0e,MAAO,SAAe3q6B,EAAO4q6B,EAAOt0e,GAClC,IAAIo0e,EAASrp6B,EAAKijB,IAAIhgB,KAAKom6B,OAAO1q6B,EAAOs2b,IACzC,OAAkB,IAAVs0e,EACL7hB,EAAMsE,OAAO3D,KAAKghB,EAAQ,EAAG,GACK,EAAlC3hB,EAAMsE,OAAO3D,KAAKghB,EAAQ,EAAG,MAKpC3hB,EAAM/qtB,OAAO,CAIX6suB,OAAQ,WACN,IAAIv74B,EAAOlb,EAAM9O,KAAK0C,WACtB,OAAwB,IAAhBsnB,EAAKnpB,QACTmpB,EAAK,GAAKA,EAAK,KAAOA,EAAK,GAAKjuB,EAAK8oK,KAAK76I,EAAK,MAC/CA,EAAK,GAAKy53B,EAAMnptB,KAAKtwK,EAAK,MAC1By53B,EAAMwF,MAAMj/3B,EAAK,IAAI,GAAQjuB,EAAK8oK,KAAK76I,EAAK,GAAGnpB,UAOrD2k6B,MAAO,WACL,IACID,EADAv74B,EAAOlb,EAAM9O,KAAK0C,WAEtB,OAAoB,IAAhBsnB,EAAKnpB,QACP0k6B,EAASxp6B,EAAKijB,IAAIyk4B,EAAM8hB,OAAOv74B,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAC3C,IAAZA,EAAK,GACVy53B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAG,GACG,EAAvCy53B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAG,IAErCk1F,EAASl1F,EAAK,KAChBu74B,EAASxp6B,EAAKijB,IAAIgL,EAAK,IACJ,GAAXA,EAAK,GACVy53B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAG,GACK,EAAzCy53B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAG,KAEzCu74B,EAASxp6B,EAAKijB,IAAIyk4B,EAAM8hB,OAAOv74B,EAAK,GAAIA,EAAK,KAC1B,GAAXA,EAAK,GACVy53B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAGnpB,OAAO,GACK,EAAhD4i5B,EAAMkI,SAASvH,KAAKmhB,EAAQv74B,EAAK,GAAGnpB,OAAO,OAIlD4i5B,EAAM/qtB,OAAO+qtB,EAAM5h5B,GAAI,CACrB0j6B,OAAQ,SAAgB7q6B,GACtB,OAAQA,EAAQsE,KAAKs7L,SAAWt7L,KAAKiq5B,OAAM,GAAQlt5B,EAAK8oK,KAAK7lK,KAAKm6iB,UAGpEqsX,MAAO,SAAe9q6B,EAAO4q6B,GAC3B,OAAkB,IAAVA,EACL,EAAI7hB,EAAMkI,SAASvH,IAAIro5B,EAAKijB,IAAIhgB,KAAKum6B,OAAO7q6B,IAASsE,KAAKm6iB,OAAO,GACA,EAAjEsqW,EAAMkI,SAASvH,KAAKro5B,EAAKijB,IAAIhgB,KAAKum6B,OAAO7q6B,IAASsE,KAAKm6iB,OAAO,MAKrEsqW,EAAM/qtB,OAAO,CAKX+suB,YAAa,WACX,IACAC,EAAQvquB,EAAQwquB,EAAUC,EAAcC,EAASC,EAAatv1B,EAD1DxsD,EAAOlb,EAAM9O,KAAK0C,WAEtB,GAAoB,IAAhBsnB,EAAKnpB,OAAc,CACrBgl6B,EAAU,IAAIpl6B,MAAMupB,EAAK,GAAGnpB,QAC5B,IAAK,IAAImB,EAAI,EAAGA,EAAIgoB,EAAK,GAAGnpB,OAAQmB,IAClC6j6B,EAAQ7j6B,GAAKgoB,EAAK,GAAGhoB,GAEvBgoB,EAAO674B,EAGT,GAAoB,IAAhB774B,EAAKnpB,OACP,OAAO4i5B,EAAMiT,SAAS1s4B,EAAK,IAAMy53B,EAAMiT,SAAS1s4B,EAAK,IAIvD,IADAmxK,EAAS,IAAI16L,MACJuB,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/Bm5L,EAASA,EAAO7wL,OAAO0f,EAAKhoB,IAK9B,IAHA2j6B,EAAWliB,EAAMnptB,KAAKa,GAEtBuquB,EAAS,EACA1j6B,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/B0j6B,GAAkB174B,EAAKhoB,GAAGnB,OAAS9E,EAAKy1O,IAAIiyqB,EAAMnptB,KAAKtwK,EAAKhoB,IAAM2j6B,EAAU,GAK9E,IAHAD,GAAW174B,EAAKnpB,OAAS,EAEzBil6B,EAAW,EACF9j6B,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAE/B,IADA4j6B,EAAeniB,EAAMnptB,KAAKtwK,EAAKhoB,IAC1Bw0E,EAAI,EAAGA,EAAIxsD,EAAKhoB,GAAGnB,OAAQ21E,IAC9Bsv1B,GAAY/p6B,EAAKy1O,IAAIxnN,EAAKhoB,GAAGw0E,GAAKov1B,EAAc,GAIpD,OAAOF,GADPI,GAAa3quB,EAAOt6L,OAASmpB,EAAKnpB,SAOpCkl6B,WAAY,WACV,IACAtI,EAAKC,EAAKt45B,EADN4kB,EAAOlb,EAAM9O,KAAK0C,WAEtB,GAAIw8G,EAASl1F,EAAK,IAChB,OAAO,EAAIy53B,EAAMmD,SAASxC,IAAIp63B,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAEvDy74B,YAAchiB,EAAMgiB,YAAYz74B,GAChCyz4B,EAAMzz4B,EAAKnpB,OAAS,EACpBuE,EAAI,EACJ,IAAK,IAAIpD,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC/BoD,GAAQ4kB,EAAKhoB,GAAGnB,OAGlB,OADA685B,EAAMt45B,EAAIq45B,EAAM,EACT,EAAIha,EAAMmD,SAASxC,IAAIqhB,YAAahI,EAAKC,IAGlDsI,MAAO,SAAeC,EAAQxI,EAAKC,GACjC,OAAO,EAAIja,EAAMmD,SAASxC,IAAI6hB,EAAQxI,EAAKC,MAI/Cja,EAAM/qtB,OAAO+qtB,EAAM5h5B,GAAI,CACrB4j6B,YAAa,WACX,OAAOhiB,EAAMgiB,YAAYzm6B,KAAK4C,YAGhCsk6B,UAAW,WAGT,IAFA,IAAI9g6B,EAAI,EAECpD,EAAI,EAAGA,EAAIhD,KAAK6B,OAAQmB,IAC/BoD,GAAQpG,KAAKgD,GAAGnB,OAElB,OAAO4i5B,EAAMuiB,MAAMhn6B,KAAKym6B,cAAezm6B,KAAK6B,OAAS,EAAGuE,EAAIpG,KAAK6B,WAKrE4i5B,EAAM/qtB,OAAO,CAIXytuB,OAAQ,WACN,IACI9f,EAAOC,EAAO9sE,EAAI0rF,EAAI1f,EADtBx73B,EAAOlb,EAAM9O,KAAK0C,WAetB,OAbIw8G,EAASl1F,EAAK,KACdq83B,EAAQr83B,EAAK,GACbs83B,EAAQt83B,EAAK,GACbwvzB,EAAKxvzB,EAAK,GACVk74B,EAAKl74B,EAAK,GACVw73B,EAAKx73B,EAAK,KAEVq83B,EAAQ5C,EAAMnptB,KAAKtwK,EAAK,IACxBs83B,EAAQ7C,EAAMnptB,KAAKtwK,EAAK,IACxBwvzB,EAAKxvzB,EAAK,GAAGnpB,OACbqk6B,EAAKl74B,EAAK,GAAGnpB,OACb2k5B,EAAKx73B,EAAK,IAEPjuB,EAAKijB,IAAIqn4B,EAAQC,IAAUd,EAAKzp5B,EAAK8oK,MAAM,EAAI20qB,EAAK,EAAI0rF,GAAM,KAOvEkB,MAAO,WACL,IAEID,EAFAn84B,EAAOlb,EAAM9O,KAAK0C,WAGF,IAAhBsnB,EAAKnpB,QACPsl6B,EAASn84B,EAAK,GACdA,EAAOA,EAAKlb,MAAM,IACO,IAAhBkb,EAAKnpB,QACdsl6B,EAAS1iB,EAAM0iB,OAAOn84B,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/DA,EAAOA,EAAKlb,MAAM,KAElBq35B,EAAS1iB,EAAM0iB,OAAOn84B,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC7CA,EAAOA,EAAKlb,MAAM,IAGpB,IAAI1J,EAAI4kB,EAAK,GACT7qB,EAAI6qB,EAAK,GAEb,OAAO,EAAIy53B,EAAM0b,MAAM/a,IAAI+hB,EAAQhn6B,EAAGiG,EAAIjG,IAG5Ckn6B,SAAU,SAAkBjovB,GAM1B,IALA,IAAIonuB,EAAK/B,EAAMsT,YAAY34uB,GACvBkovB,EAAQlovB,EAAOp2K,KAAI,SAAU6E,GAAM,OAAO424B,EAAMnptB,KAAKztL,MACrDzH,EAAIg5K,EAAOzzK,QAAO,SAAUvF,EAAGyH,GAAM,OAAOzH,EAAIyH,EAAIhM,SAAU,GAE9DskQ,EAAU,GACLnjQ,EAAI,EAAGA,EAAIo8K,EAAOv9K,SAAUmB,EACjC,IAAK,IAAIw0E,EAAIx0E,EAAI,EAAGw0E,EAAI4nG,EAAOv9K,SAAU21E,EAAG,CACxC,IAAI/B,EAAIgv0B,EAAM2iB,MAAME,EAAMtk6B,GAAIsk6B,EAAM9v1B,GAAI4nG,EAAOp8K,GAAGnB,OAAQu9K,EAAO5nG,GAAG31E,OAAQ2k5B,EAAIpg5B,EAAGg5K,EAAOv9K,QAC1FskQ,EAAQ/5P,KAAK,CAAC,CAACpJ,EAAGw0E,GAAI/B,IAI9B,OAAO0wL,KAKXs+oB,EAAM/qtB,OAAO,CAIX+stB,SAAU,WACR,IAEAv80B,EAFIl/C,EAAOlb,EAAM9O,KAAK0C,WACtB895B,EAAM,IAAI//5B,MAAM,GAWhB,OAREyoE,EADkB,IAAhBl/C,EAAKnpB,OACE9E,EAAKijB,IAAIyk4B,EAAMsE,OAAO/0W,IAAIhphB,EAAK,GAAK,EAAG,EAAG,GACjCA,EAAK,GAAKjuB,EAAK8oK,KAAK76I,EAAK,KAElCjuB,EAAKijB,IAAIyk4B,EAAMsE,OAAO/0W,IAAIhphB,EAAK,GAAK,EAAG,EAAG,GACjCy53B,EAAMwF,MAAMj/3B,EAAK,IAAMjuB,EAAK8oK,KAAK76I,EAAK,GAAGnpB,SAE7D2/5B,EAAI,GAAKx24B,EAAK,GAAKk/C,EACnBs31B,EAAI,GAAKx24B,EAAK,GAAKk/C,EACZs31B,GAMT9a,IAAK,WACH,IAEAx80B,EAFIl/C,EAAOlb,EAAM9O,KAAK0C,WACtB895B,EAAM,IAAI//5B,MAAM,GAWhB,OAREyoE,EADkB,IAAhBl/C,EAAKnpB,OACE9E,EAAKijB,IAAIyk4B,EAAMkI,SAAS34W,IAAIhphB,EAAK,GAAK,EAAGA,EAAK,GAAK,GAC1CA,EAAK,GAAKjuB,EAAK8oK,KAAK76I,EAAK,KAElCjuB,EAAKijB,IAAIyk4B,EAAMkI,SAAS34W,IAAIhphB,EAAK,GAAK,EAAGA,EAAK,GAAGnpB,OAAS,GACjD4i5B,EAAMwF,MAAMj/3B,EAAK,IAAI,GAAQjuB,EAAK8oK,KAAK76I,EAAK,GAAGnpB,SAEnE2/5B,EAAI,GAAKx24B,EAAK,GAAKk/C,EACnBs31B,EAAI,GAAKx24B,EAAK,GAAKk/C,EACZs31B,GAGT+F,YAAa,SAAqBC,EAAQ90a,GACxC,OAAO80a,EAAS90a,KAIpB+xZ,EAAM/qtB,OAAO+qtB,EAAM5h5B,GAAI,CACrB4j5B,SAAU,SAAkB/q5B,EAAOg3f,GACjC,OAAO+xZ,EAAMgC,SAAS/q5B,EAAOg3f,EAAO1yf,KAAK4C,YAG3C8j5B,IAAK,SAAahr5B,EAAOg3f,GACvB,OAAO+xZ,EAAMiC,IAAIhr5B,EAAOg3f,EAAO1yf,KAAK4C,cAexC6h5B,EAAM/qtB,OAAO+qtB,EAAM5h5B,GAAI,CACrB4k6B,gCAAiC,SAAyCjvrB,EAAIgimB,EAAI/hmB,EAAIytrB,GACpF,IAAIprwB,EAAImrwB,EAAwBztrB,EAAIgimB,EAAI/hmB,EAAIytrB,GAC5C,OAAOzhB,EAAM4hB,MAAMvrwB,EAAG,IAGxB4swB,gCAAiC,SAAyClvrB,EAAIgimB,EAAI/hmB,EAAIytrB,GACpF,IAAIprwB,EAAImrwB,EAAwBztrB,EAAIgimB,EAAI/hmB,EAAIytrB,GAC5C,OAAOzhB,EAAM4hB,MAAMvrwB,EAAG,MAlVzB,CAsVC2pvB,EAAO1n5B,MACT0n5B,EAAMkjB,OAAU,WAEd,SAASC,EAAYC,EAAOC,GAC1B,OAAOC,EAAIF,EAAOC,GAGpB,SAASF,EAAYE,GACnB,IAAIE,EAAYF,EAAK,GAAGjm6B,OAOxB,OANgB4i5B,EAAM2Q,OAAO4S,GAAWh/5B,KAAI,SAASi/5B,GACnD,IAAIC,EACAzjB,EAAM2Q,OAAO4S,GAAWz85B,QAAO,SAASvI,GAAG,OAAOA,IAAIil6B,KAC1D,OAAOF,EAAItjB,EAAMxovB,IAAI6rwB,EAAMG,GAAaj/5B,KAAI,SAAS6O,GAAI,OAAOA,EAAE,MACvD4s4B,EAAMxovB,IAAI6rwB,EAAMI,OAS/B,SAASH,EAAIF,EAAOC,GAClB,IAAIK,EAAON,EAAMhm6B,OACbum6B,EAAWN,EAAK,GAAGjm6B,OAAS,EAC5Bwm6B,EAAWF,EAAKC,EAAW,EAC3BE,EAAO7jB,EAAMqf,MAAMgE,EAAMD,GACzBU,EACA9jB,EAAMzutB,SAAS8xuB,EAAMQ,EAAKt/5B,KAAI,SAAS6O,GAAK,MAAO,CAACA,OAC/C7O,KAAI,SAASysE,GAAK,OAAOA,EAAE,MAChC+y1B,EAAQ/jB,EAAMll4B,SAASso5B,EAAOU,GAC9BE,EAAOhkB,EAAMnptB,KAAKusuB,GAKlBa,EAAMjkB,EAAM744B,IAAI285B,EAAQv/5B,KAAI,SAAS0tE,GACvC,OAAO35E,KAAKy1O,IAAI97J,EAAI+x1B,EAAM,OAExB77K,EAAM63J,EAAM744B,IAAIi85B,EAAM7+5B,KAAI,SAASwiC,EAAGxoC,GACxC,OAAOjG,KAAKy1O,IAAIhnM,EAAI+83B,EAAQvl6B,GAAI,OAE9B2l6B,EAAMD,EAAM97K,EAEhB,MAAO,CACHk7K,KAAKA,EACLD,MAAMA,EACNM,KAAKA,EACLC,SAASA,EACTC,SAASA,EACTC,KAAKA,EACLC,QAAQA,EACRC,MAAMA,EACNC,KAAKA,EACLE,IAAIA,EACJD,IAAIA,EACJ97K,IAAIA,EACJg8K,GAdMF,EAAMC,GAoBlB,SAASE,EAAO11sB,GACd,IAAI21sB,EAAelB,EAAYz0sB,EAAM20sB,MAEjCiB,EAAWhs6B,KAAK8oK,KAAKstD,EAAMy5hB,IAAOz5hB,EAAMk1sB,UACxCW,EAAYF,EAAa9/5B,KAAI,SAAS4wO,GACxC,IAAI+urB,EAAM/urB,EAAI+urB,IACVC,EAAKhvrB,EAAIgvrB,GACb,OAAOG,EAAWhs6B,KAAK8oK,KAAK8iwB,GAAO,EAAIC,OAErCK,EAAa91sB,EAAMm1sB,KAAKt/5B,KAAI,SAASs/5B,EAAMtl6B,GAC7C,OAAQsl6B,EAAO,GAAKU,EAAUhm6B,MAE5Bkm6B,EAASD,EAAWjg6B,KAAI,SAAS+iB,GACnC,IAAIo94B,EAAU1kB,EAAMkI,SAASvH,IAAIr53B,EAAGonM,EAAMk1sB,UAC1C,OAAiD,GAAzCc,EAAU,GAAM,EAAIA,EAAUA,MAEpCtj6B,EAAI4+4B,EAAMkI,SAAS34W,IAAI,KAAO7gV,EAAMk1sB,UACpCe,EAAaj2sB,EAAMm1sB,KAAKt/5B,KAAI,SAASs/5B,EAAMtl6B,GAC7C,IAAI8C,EAAID,EAAImj6B,EAAUhm6B,GACtB,MAAO,CAACsl6B,EAAOxi6B,EAAGwi6B,EAAOxi6B,MAE3B,MAAO,CACHuj6B,GAAIL,EACJj94B,EAAGk94B,EACHxz1B,EAAGyz1B,EACHH,SAAUA,EACVK,WAAYA,GAIlB,SAASE,EAAOn2sB,GACd,IAEoBt7M,EAAG2i0B,EAAI0rF,EAFvBqD,EACCp2sB,EAAMy1sB,GAAKz1sB,EAAMi1sB,WAAc,EAAIj1sB,EAAMy1sB,IAAMz1sB,EAAMk1sB,UAK1D,MAAO,CAAEkB,YAAaA,EAAa/B,OADtB,GAHO3v5B,EAGE0x5B,EAHC/uF,EAGYrnnB,EAAMi1sB,SAHdlC,EAGwB/ysB,EAAMk1sB,SAFhD5jB,EAAMpjJ,KAAK+jJ,IAAIvt4B,GAAKqu5B,EAAK1rF,EAAK3i0B,GAAI2i0B,EAAK,EAAG0rF,EAAK,KAM1D,SAASsD,EAAS3B,EAAOC,GACvB,IAAI30sB,EAAQ40sB,EAAIF,EAAMC,GAClBtB,EAAQqC,EAAO11sB,GACf6zsB,EAAQsC,EAAOn2sB,GAGfs2sB,EACA,GAAK,EAAIt2sB,EAAMy1sB,MAAQz1sB,EAAMg1sB,KAAO,GAAMh1sB,EAAMk1sB,UAIpD,OAHAl1sB,EAAMpnM,EAAIy64B,EACVrzsB,EAAMz8I,EAAIsw1B,EACV7zsB,EAAMs2sB,UAAYA,EACXt2sB,EAGT,MAAO,CAAE40sB,IAAKyB,GApHA,GAsHP/kB,EArlJgBzppB,IA2lJlB,SAAS9/P,EAAQC,EAASu+4B,GAEjC,IAAI1wwB,EAAQ0wwB,EAAoB,GAC5Bvr4B,EAAQur4B,EAAoB,GAEhCv+4B,EAAQgs5B,OAAS,WAEf,IADA,IAAIvz4B,EAAS,GACJ5Q,EAAI,EAAGA,EAAIU,UAAU7B,SAAUmB,EAAG,CAKzC,IAJA,IAAI0m6B,GAAa,EACb5huB,EAAapkM,UAAUV,GAGlBw0E,EAAI,EAAGA,EAAI5jE,EAAO/R,UACzB6n6B,EAAa915B,EAAO4jE,KAAOswH,KADQtwH,GAMhCky1B,GACH915B,EAAOxH,KAAK07L,GAGhB,OAAOl0L,GAGTzY,EAAQwu6B,QAAU3gyB,EAAMt9H,QAExBvQ,EAAQyu6B,WAAa,WACnB,OAAOno6B,MAAMtD,UAAU2R,MAAM9O,KAAK0C,UAAW,IAG/CvI,EAAQ0u6B,UAAY,SAAU3g6B,EAASolL,GACrC,IAAK5qL,UAAU7B,OACb,OAAOsM,EAAMA,MAEf,IAGE,IAFA,IAAI47G,EAAOukE,EAAUvvI,MAAM,KACvBnrC,EAAS1K,EACJlG,EAAI,EAAGA,EAAI+mH,EAAKloH,SAAUmB,EAAG,CACpC,IAAI4B,EAAOmlH,EAAK/mH,GAChB,GAA8B,MAA1B4B,EAAKA,EAAK/C,OAAS,GAAY,CACjC,IAAIio6B,EAAUll6B,EAAK4b,QAAQ,KACvBrkB,EAAQyI,EAAK6tE,UAAUq31B,EAAU,EAAGll6B,EAAK/C,OAAS,GACtD+R,EAASA,EAAOhP,EAAK6tE,UAAU,EAAGq31B,IAAU3t6B,QAE5CyX,EAASA,EAAOhP,GAGpB,OAAOgP,EACP,MAAOzF,MAGXhT,EAAQ0sQ,KAAO,SAAUhkQ,EAAOke,GAC9B,OAAOle,EAAM4d,KAAKM,IAGpB5mB,EAAQ4u6B,QAAU,WAChB,IAAI9vB,EAAkBjxwB,EAAMt9H,QAAQhI,WACpC,OAAOu24B,EAAgB1u4B,QAAO,SAAUyuR,GACtC,MAAqB,kBAAPA,OAOX,SAAS9+R,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5B+K,EAAQ/K,EAAoB,IAC5B7txB,EAAO6txB,EAAoB,GAC3B1wwB,EAAQ0wwB,EAAoB,GAC5BswB,EAAStwB,EAAoB,IAEjC,SAASuwB,EAAoBzvvB,GAC3B,MAAQ,eAAgBz/H,KAAKy/H,GAG/Br/K,EAAQ+u6B,QAAU,SAASry5B,EAAGzR,GAG5B,OAFAyR,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAW9i4B,EAAGzR,GACf+H,EAAMzS,MAGRsu6B,EAAOG,QAAQty5B,EAAGzR,IAG3BjL,EAAQiv6B,QAAU,SAASvy5B,EAAGzR,GAG5B,OAFAyR,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAW9i4B,EAAGzR,GACf+H,EAAMzS,MAGRsu6B,EAAOK,QAAQxy5B,EAAGzR,IAG3BjL,EAAQmv6B,QAAU,SAASzy5B,EAAGzR,GAG5B,OAFAyR,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAW9i4B,EAAGzR,GACf+H,EAAMzS,MAGRsu6B,EAAOO,QAAQ1y5B,EAAGzR,IAG3BjL,EAAQqv6B,QAAU,SAAS3y5B,EAAGzR,GAG5B,OAFAyR,EAAImxH,EAAMqxwB,YAAYxi4B,GACtBzR,EAAI4iI,EAAMqxwB,YAAYj04B,GAClB4iI,EAAM2xwB,WAAW9i4B,EAAGzR,GACf+H,EAAMzS,MAGRsu6B,EAAOS,QAAQ5y5B,EAAGzR,IAG3BjL,EAAQuv6B,QAAU,SAASlwvB,GAEzB,IAAKyvvB,EAAoBzvvB,GACvB,OAAOrsK,EAAM+qG,IAIf,IAAItlG,EAASgoC,SAAS4+H,EAAQ,GAG1BqtkB,EAAcrtkB,EAAOv5K,WACzB,OAA2B,KAAvB4mvB,EAAYhmvB,QAAiD,MAAhCgmvB,EAAYp1qB,UAAU,EAAG,GACjD72B,SAASissB,EAAYp1qB,UAAU,GAAI,GAAK,IAExC7+D,GAKXzY,EAAQwv6B,QAAU,SAASnwvB,EAAQowvB,GAEjC,IAAKX,EAAoBzvvB,GACvB,OAAOrsK,EAAM+qG,IAIf,IAAI2uoB,EAAcrtkB,EAAOv5K,WACzB,GAA2B,KAAvB4mvB,EAAYhmvB,QAAiD,MAAhCgmvB,EAAYp1qB,UAAU,EAAG,GACxD,OAAQ,aAAgB72B,SAASissB,EAAYp1qB,UAAU,GAAI,IAAIxxE,SAAS,IAI1E,IAAI2S,EAASgoC,SAAS4+H,EAAQ,GAAGv5K,SAAS,IAG1C,YAAenF,IAAX8u6B,EACKh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQ0v6B,QAAU,SAASrwvB,EAAQowvB,GAEjC,IAAKX,EAAoBzvvB,GACvB,OAAOrsK,EAAM+qG,IAIf,IAAI2uoB,EAAcrtkB,EAAOv5K,WACzB,GAA2B,KAAvB4mvB,EAAYhmvB,QAAiD,MAAhCgmvB,EAAYp1qB,UAAU,EAAG,GACxD,OAAQ,WAAa72B,SAASissB,EAAYp1qB,UAAU,GAAI,IAAIxxE,SAAS,GAIvE,IAAI2S,EAASgoC,SAAS4+H,EAAQ,GAAGv5K,SAAS,GAG1C,YAAenF,IAAX8u6B,EACKh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQ2v6B,OAAS,SAASC,EAASC,GAIjC,OAFAD,EAAU/hyB,EAAMqxwB,YAAY0wB,GAC5BC,EAAUhiyB,EAAMqxwB,YAAY2wB,GACxBhiyB,EAAM2xwB,WAAWowB,EAASC,GACrB785B,EAAMzS,MAIXqv6B,EAAU,GAAKC,EAAU,GAKzBju6B,KAAKwjB,MAAMwq5B,KAAaA,GAAWhu6B,KAAKwjB,MAAMyq5B,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlC785B,EAAM+qG,IAcR6xzB,EAAUC,GAGnB7v6B,EAAQ8v6B,UAAY,SAASzwvB,EAAQ1mK,GAGnC,OAFA0mK,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B1mK,EAAQk1H,EAAMqxwB,YAAYvm4B,GACtBk1H,EAAM2xwB,WAAWnguB,EAAQ1mK,GACpB3F,EAAMzS,MAIX8+K,EAAS,GAKTz9K,KAAKwjB,MAAMi6J,KAAYA,GAKvBA,EAAS,gBAKTz9K,KAAKijB,IAAIlM,GAAS,GAdb3F,EAAM+qG,IAmBPplG,GAAS,EAAK0mK,GAAU1mK,EAAQ0mK,IAAW1mK,GAGrD3Y,EAAQ+v6B,MAAQ,SAASH,EAASC,GAGhC,OAFAD,EAAU/hyB,EAAMqxwB,YAAY0wB,GAC5BC,EAAUhiyB,EAAMqxwB,YAAY2wB,GACxBhiyB,EAAM2xwB,WAAWowB,EAASC,GACrB785B,EAAMzS,MAIXqv6B,EAAU,GAAKC,EAAU,GAKzBju6B,KAAKwjB,MAAMwq5B,KAAaA,GAAWhu6B,KAAKwjB,MAAMyq5B,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlC785B,EAAM+qG,IAcR6xzB,EAAUC,GAGnB7v6B,EAAQgw6B,UAAY,SAAS3wvB,EAAQ1mK,GAGnC,OAFA0mK,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B1mK,EAAQk1H,EAAMqxwB,YAAYvm4B,GACtBk1H,EAAM2xwB,WAAWnguB,EAAQ1mK,GACpB3F,EAAMzS,MAIX8+K,EAAS,GAKTz9K,KAAKwjB,MAAMi6J,KAAYA,GAKvBA,EAAS,gBAKTz9K,KAAKijB,IAAIlM,GAAS,GAdb3F,EAAM+qG,IAmBPplG,GAAS,EAAK0mK,GAAU1mK,EAAQ0mK,IAAW1mK,GAGrD3Y,EAAQiw6B,OAAS,SAASL,EAASC,GAGjC,OAFAD,EAAU/hyB,EAAMqxwB,YAAY0wB,GAC5BC,EAAUhiyB,EAAMqxwB,YAAY2wB,GACxBhiyB,EAAM2xwB,WAAWowB,EAASC,GACrB785B,EAAMzS,MAIXqv6B,EAAU,GAAKC,EAAU,GAKzBju6B,KAAKwjB,MAAMwq5B,KAAaA,GAAWhu6B,KAAKwjB,MAAMyq5B,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlC785B,EAAM+qG,IAcR6xzB,EAAUC,GAGnB7v6B,EAAQkw6B,QAAU,SAASrra,EAAMsra,EAAW1t3B,GAG1C,GAFAoid,EAAOh3X,EAAMqxwB,YAAYr6Y,GACzBsra,EAAYtiyB,EAAMqxwB,YAAYixB,GAC1BtiyB,EAAM2xwB,WAAW36Y,EAAMsra,GACzB,OAAOtra,EAOT,GAAe,OAHfpid,OAAqB9hD,IAAX8hD,EAAwB,IAAMA,IAGP,MAAXA,EACpB,OAAOzvC,EAAMzS,MAIf,GAAa,IAATskgB,GAA4B,IAAdsra,EAChB,OAAO,EACF,GAAa,IAATtra,EACT,OAAsB,IAAdsra,EAAmB1t3B,EAAS0t3B,EAAUrq6B,WAAa28C,EACtD,GAAkB,IAAd0t3B,EACT,OAAOtra,EAAK/+f,WAEZ,IAAIorP,EAAQi/qB,EAAY,EAAK,IAAM,GACnC,OAAOtra,EAAK/+f,WAAaorP,GAAuB,IAAdi/qB,EAAmB1t3B,EAAS0t3B,EAAUrq6B,WAAa28C,IAIzFziD,EAAQow6B,QAAU,SAAS/wvB,EAAQgxvB,EAAWC,GAE5C,IADAjxvB,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EA0MT,IArMA,IAkMInxC,EAlMAosG,EAAQ,CACV,CAAC,iBAAkB,IAAK,KAAM,UAAU,GAAO,EAAO,qBACtD,CAAC,iBAAkB,IAAK,KAAM,mBAAmB,GAAO,EAAO,qBAC/D,CAAC,iBAAkB,KAAM,KAAM,UAAU,GAAO,EAAO,qBACvD,CAAC,iBAAkB,KAAM,KAAM,UAAU,GAAO,EAAO,qBACvD,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAO,EAAO,qBACnD,CAAC,eAAgB,OAAQ,KAAM,QAAQ,GAAO,EAAO,qBACrD,CAAC,iBAAkB,QAAS,KAAM,SAAS,GAAO,EAAM,YACxD,CAAC,SAAU,IAAK,KAAM,oBAAoB,GAAM,EAAO,GACvD,CAAC,mBAAoB,MAAO,KAAM,4BAA4B,GAAM,EAAO,GAC3E,CAAC,iBAAY,OAAK,CAAC,OAAQ,UAAU,GAAO,EAAM,OAClD,CAAC,MAAO,KAAM,KAAM,QAAQ,GAAO,EAAM,KACzC,CAAC,oBAAqB,KAAM,KAAM,UAAU,GAAO,EAAO,qBAC1D,CAAC,MAAO,MAAO,KAAM,YAAY,GAAO,EAAO,KAC/C,CAAC,OAAQ,IAAK,KAAM,QAAQ,GAAO,EAAO,OAC1C,CAAC,YAAa,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACxD,CAAC,MAAO,MAAO,CAAC,KAAM,eAAe,GAAO,EAAM,GAClD,CAAC,MAAO,MAAO,CAAC,OAAQ,UAAU,GAAO,EAAM,eAC/C,CAAC,OAAQ,OAAQ,KAAM,eAAe,GAAO,EAAM,GACnD,CAAC,UAAW,KAAM,KAAM,sBAAsB,GAAM,EAAO,GAC3D,CAAC,2BAA4B,QAAS,KAAM,aAAa,GAAM,EAAO,GACtE,CAAC,UAAW,IAAK,KAAM,mBAAmB,GAAM,EAAO,GACvD,CAAC,uBAAkB,OAAQ,CAAC,SAAU,UAAU,GAAO,EAAM,OAC7D,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,eACvD,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,cACvD,CAAC,mBAAoB,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,qBAC7D,CAAC,cAAe,KAAM,KAAM,UAAU,GAAM,EAAM,GAClD,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,kBACvD,CAAC,sBAAuB,OAAQ,CAAC,SAAU,UAAU,GAAO,EAAM,YAClE,CAAC,aAAc,QAAS,CAAC,UAAW,SAAU,YAAa,UAAU,GAAO,EAAM,qBAClF,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,eACvD,CAAC,MAAO,MAAO,KAAM,UAAU,GAAO,EAAM,gBAC5C,CAAC,SAAU,KAAM,CAAC,KAAM,QAAQ,GAAO,EAAO,qBAC9C,CAAC,MAAO,IAAK,CAAC,OAAQ,QAAQ,GAAO,EAAM,OAC3C,CAAC,SAAU,OAAK,KAAM,SAAS,GAAO,EAAO,mBAC7C,CAAC,kBAAmB,OAAQ,KAAM,eAAe,GAAO,EAAM,kBAC9D,CAAC,OAAQ,MAAO,CAAC,MAAO,SAAS,GAAO,EAAM,MAC9C,CAAC,eAAgB,KAAM,CAAC,MAAO,UAAU,GAAO,EAAM,kBACtD,CAAC,MAAO,MAAO,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,MAAO,MAAO,CAAC,KAAM,UAAU,GAAO,EAAM,MAC7C,CAAC,QAAS,IAAK,KAAM,wBAAwB,GAAM,EAAO,GAC1D,CAAC,cAAe,KAAM,KAAM,UAAU,GAAO,EAAM,kBACnD,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,iBACnD,CAAC,MAAO,MAAO,KAAM,gBAAgB,GAAO,EAAO,KACnD,CAAC,SAAU,MAAO,KAAM,UAAU,GAAO,EAAM,eAC/C,CAAC,QAAS,IAAK,CAAC,MAAO,yBAAyB,GAAO,EAAM,GAC7D,CAAC,QAAS,QAAS,KAAM,QAAQ,GAAO,EAAM,YAC9C,CAAC,OAAQ,IAAK,KAAM,QAAQ,GAAO,EAAM,MACzC,CAAC,OAAQ,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACnD,CAAC,uBAAwB,MAAO,CAAC,UAAW,UAAU,GAAO,EAAM,cACnE,CAAC,UAAW,KAAM,KAAM,QAAQ,GAAO,EAAM,KAC7C,CAAC,QAAS,IAAK,KAAM,cAAc,GAAM,EAAO,GAChD,CAAC,QAAS,KAAM,KAAM,aAAa,GAAM,EAAO,GAChD,CAAC,aAAc,KAAM,CAAC,KAAM,SAAS,GAAO,EAAM,iBAClD,CAAC,kBAAmB,MAAO,CAAC,KAAM,OAAQ,UAAU,GAAO,EAAM,aACjE,CAAC,OAAQ,IAAK,CAAC,MAAO,QAAQ,GAAO,EAAM,MAC3C,CAAC,yBAA0B,SAAU,KAAM,UAAU,GAAO,EAAM,WAClE,CAAC,yBAA0B,OAAQ,CAAC,SAAU,WAAY,QAAQ,GAAO,EAAM,WAC/E,CAAC,uBAAwB,QAAS,KAAM,UAAU,GAAO,EAAM,aAC/D,CAAC,eAAgB,QAAS,CAAC,SAAU,QAAS,QAAQ,GAAO,EAAM,aACnE,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,qBAAsB,UAAW,KAAM,QAAQ,GAAO,EAAM,cAC7D,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,QACnD,CAAC,QAAS,IAAK,KAAM,UAAU,GAAM,EAAM,GAC3C,CAAC,QAAS,MAAO,KAAM,sBAAsB,GAAM,EAAO,GAC1D,CAAC,SAAU,IAAK,CAAC,OAAQ,eAAe,GAAM,EAAM,GACpD,CAAC,WAAY,KAAM,KAAM,QAAQ,GAAM,EAAM,GAC7C,CAAC,OAAQ,KAAM,KAAM,SAAS,GAAO,EAAM,kBAC3C,CAAC,aAAc,KAAM,KAAM,UAAU,GAAO,EAAM,kBAClD,CAAC,QAAS,IAAK,CAAC,IAAK,MAAO,UAAU,GAAO,EAAM,MACnD,CAAC,QAAS,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACpD,CAAC,MAAO,KAAM,KAAM,eAAe,GAAM,EAAO,GAChD,CAAC,UAAW,KAAM,KAAM,iBAAiB,GAAO,EAAO,OACvD,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,eACzD,CAAC,iBAAkB,MAAO,CAAC,QAAS,SAAS,GAAO,EAAM,oBAC1D,CAAC,mBAAoB,MAAO,CAAC,SAAU,SAAS,GAAM,EAAM,GAC5D,CAAC,2BAA4B,QAAS,KAAM,gBAAgB,GAAM,EAAO,GACzE,CAAC,SAAU,KAAM,CAAC,UAAW,UAAU,GAAO,EAAM,kBACpD,CAAC,2BAA4B,OAAQ,KAAM,uBAAuB,GAAM,EAAO,GAC/E,CAAC,QAAS,IAAK,KAAM,UAAU,GAAM,EAAM,GAC3C,CAAC,iBAAkB,MAAO,KAAM,SAAS,GAAO,EAAM,QACtD,CAAC,wBAAyB,OAAQ,KAAM,YAAY,GAAO,EAAO,SAClE,CAAC,SAAU,IAAK,KAAM,SAAS,GAAO,EAAO,qBAC7C,CAAC,SAAU,MAAO,CAAC,MAAO,QAAQ,GAAO,EAAM,IAC/C,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,MACzD,CAAC,OAAQ,MAAO,KAAM,uBAAuB,GAAM,EAAO,GAC1D,CAAC,SAAU,SAAU,KAAM,QAAQ,GAAO,EAAM,MAChD,CAAC,iBAAkB,IAAK,KAAM,UAAU,GAAO,EAAO,qBACtD,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAO,EAAO,qBACnD,CAAC,gBAAiB,KAAM,KAAM,SAAS,GAAO,EAAO,WACrD,CAAC,eAAgB,aAAc,KAAM,QAAQ,GAAO,EAAO,qBAC3D,CAAC,gBAAiB,IAAK,CAAC,OAAQ,UAAU,GAAO,EAAM,MACvD,CAAC,SAAU,IAAK,KAAM,SAAS,GAAM,EAAM,GAC3C,CAAC,cAAU,MAAO,KAAM,4BAA4B,GAAO,EAAO,kBAClE,CAAC,MAAO,SAAK,KAAM,uBAAuB,GAAM,EAAO,GACvD,CAAC,aAAc,MAAO,KAAM,QAAQ,GAAO,EAAM,eACjD,CAAC,SAAU,KAAM,KAAM,YAAY,GAAM,EAAO,GAChD,CAAC,gBAAiB,OAAQ,KAAM,qBAAqB,GAAM,EAAO,GAClE,CAAC,kBAAgB,KAAM,KAAM,SAAS,GAAO,EAAM,WACnD,CAAC,OAAQ,KAAM,KAAM,eAAe,GAAO,EAAO,MAClD,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,oBACzD,CAAC,mBAAoB,OAAQ,CAAC,UAAW,UAAU,GAAO,EAAM,oBAChE,CAAC,QAAS,IAAK,KAAM,qBAAqB,GAAO,EAAO,IACxD,CAAC,OAAQ,OAAQ,KAAM,SAAS,GAAO,EAAM,WAC7C,CAAC,cAAe,MAAO,KAAM,SAAS,GAAO,EAAM,iBACnD,CAAC,aAAc,MAAO,KAAM,QAAQ,GAAO,EAAM,WACjD,CAAC,QAAS,KAAM,KAAM,UAAU,GAAO,EAAM,eAC7C,CAAC,SAAU,MAAO,KAAM,SAAS,GAAM,EAAO,GAC9C,CAAC,SAAU,IAAK,KAAM,SAAS,GAAO,EAAO,qBAC7C,CAAC,SAAU,IAAK,CAAC,OAAQ,QAAQ,GAAM,EAAM,GAC7C,CAAC,sBAAuB,MAAO,CAAC,YAAa,QAAQ,GAAO,EAAM,WAClE,CAAC,UAAW,IAAK,KAAM,0BAA0B,GAAM,EAAO,GAC9D,CAAC,UAAW,KAAM,KAAM,mBAAmB,GAAM,EAAO,GACxD,CAAC,OAAQ,KAAM,KAAM,QAAQ,GAAO,EAAM,aAC1C,CAAC,wBAAmB,OAAQ,CAAC,SAAU,QAAQ,GAAO,EAAM,OAC5D,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,WACtD,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,UACtD,CAAC,oBAAqB,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,oBAC5D,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAM,EAAM,GACjD,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,gBACtD,CAAC,uBAAwB,OAAQ,CAAC,SAAU,QAAQ,GAAO,EAAM,SACjE,CAAC,cAAe,QAAS,CAAC,UAAW,SAAU,YAAa,QAAQ,GAAO,EAAM,mBACjF,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,WACtD,CAAC,eAAgB,KAAM,KAAM,UAAU,GAAO,EAAM,UACpD,CAAC,YAAa,KAAM,KAAM,eAAe,GAAM,EAAO,GACtD,CAAC,QAAS,KAAM,KAAM,aAAa,GAAO,EAAO,MACjD,CAAC,SAAU,KAAM,KAAM,uBAAuB,GAAO,EAAO,MAC5D,CAAC,QAAS,QAAS,KAAM,QAAQ,GAAO,EAAM,YAC9C,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,YACnD,CAAC,WAAY,MAAO,KAAM,UAAU,GAAO,EAAM,YACjD,CAAC,QAAS,IAAK,KAAM,yBAAyB,GAAM,EAAM,GAC1D,CAAC,wBAAyB,IAAK,KAAM,UAAU,GAAO,EAAM,OAC5D,CAAC,MAAO,MAAO,KAAM,QAAQ,GAAO,EAAM,WAC1C,CAAC,QAAS,IAAK,KAAM,QAAQ,GAAO,EAAO,KAC3C,CAAC,YAAa,QAAS,KAAM,UAAU,GAAO,EAAM,cACpD,CAAC,cAAe,SAAU,KAAM,UAAU,GAAO,EAAM,WACvD,CAAC,kBAAmB,SAAU,KAAM,UAAU,GAAO,EAAM,YAC3D,CAAC,YAAa,KAAM,CAAC,SAAU,UAAU,GAAO,EAAM,eACtD,CAAC,mBAAoB,YAAa,KAAM,UAAU,GAAO,EAAM,aAC/D,CAAC,2BAA4B,UAAW,KAAM,QAAQ,GAAO,EAAM,YACnE,CAAC,OAAQ,IAAK,KAAM,WAAW,GAAM,EAAO,GAC5C,CAAC,OAAQ,IAAK,KAAM,SAAS,GAAM,EAAM,GACzC,CAAC,YAAa,KAAM,CAAC,MAAO,UAAU,GAAO,EAAM,MACnD,CAAC,QAAS,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACpD,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,OAAQ,KAAM,KAAM,QAAQ,GAAO,EAAM,WAKxCi2rB,EAAkB,CACpBC,GAAI,CAAC,OAAQ,GAAI,oBAA2B,KAAM,SAClDC,GAAI,CAAC,OAAQ,GAAI,oBAAwB,KAAM,SAC/CC,GAAI,CAAC,OAAQ,GAAI,mBAAqB,KAAM,OAC5C3lB,GAAI,CAAC,OAAQ,GAAI,gBAAkB,KAAM,QACzC4lB,GAAI,CAAC,OAAQ,GAAI,cAAe,KAAM,QACtCC,GAAI,CAAC,OAAQ,GAAI,WAAY,KAAM,QACnCC,GAAI,CAAC,OAAQ,GAAI,QAAS,KAAM,QAChCC,GAAI,CAAC,OAAQ,GAAI,KAAM,KAAM,SAK3BC,EAAgB,CAClBlxwB,EAAG,CAAC,QAAS,KAAO,KACpBP,EAAG,CAAC,QAAS,KAAO,KACpB+tF,EAAG,CAAC,MAAO,KAAO,KAClBvyK,EAAG,CAAC,OAAQ,KAAO,KACnB4kF,EAAG,CAAC,OAAQ,KAAO,KACnB29Z,EAAG,CAAC,OAAQ,IAAO,KACnBj+Z,EAAG,CAAC,OAAQ,IAAO,KACnBp6J,EAAG,CAAC,OAAQ,IAAO,KACnBklB,EAAG,CAAC,QAAS,IAAO,KACpBjd,EAAG,CAAC,QAAS,GAAO,KACpBtC,EAAG,CAAC,OAAQ,GAAO,KACnBD,EAAG,CAAC,QAAS,IAAO,KACpBuM,EAAG,CAAC,QAAS,KAAO,KACpBgoJ,EAAG,CAAC,QAAS,KAAO,KACpBh0J,EAAG,CAAC,OAAQ,KAAO,KACnBqvE,EAAG,CAAC,OAAQ,MAAO,KACnBiB,EAAG,CAAC,QAAS,MAAO,KACpB/wE,EAAG,CAAC,OAAQ,MAAO,KACnBm1J,EAAG,CAAC,QAAS,MAAO,KACpBtvH,EAAG,CAAC,QAAS,MAAO,MAIlBx8B,EAAO,KACPC,EAAK,KACLk95B,EAAiBX,EACjBY,EAAeX,EACfY,EAAkB,EAClBC,EAAgB,EAIXtp6B,EAAI,EAAGA,EAAIyyO,EAAM5zO,OAAQmB,IAChCqmI,EAAuB,OAAhBosG,EAAMzyO,GAAG,GAAe,GAAKyyO,EAAMzyO,GAAG,IACzCyyO,EAAMzyO,GAAG,KAAOmp6B,GAAkB9iyB,EAAI7oH,QAAQ2r5B,IAAmB,KACnEn95B,EAAOymO,EAAMzyO,KAEXyyO,EAAMzyO,GAAG,KAAOop6B,GAAgB/iyB,EAAI7oH,QAAQ4r5B,IAAiB,KAC/Dn95B,EAAKwmO,EAAMzyO,IAKf,GAAa,OAATgM,EAAe,CACjB,IAAIu95B,EAAqBb,EAAgBF,EAAU/41B,UAAU,EAAG,IAC5D+51B,EAAmBN,EAAcV,EAAU/41B,UAAU,EAAG,IAG1B,OAA9B+41B,EAAU/41B,UAAU,EAAG,KACzB+51B,EAAmB,CAAC,QAAS,GAAO,OAIlCD,GACFF,EAAkBE,EAAmB,GACrCJ,EAAiBX,EAAU/41B,UAAU,IAC5B+51B,IACTH,EAAkBG,EAAiB,GACnCL,EAAiBX,EAAU/41B,UAAU+51B,EAAiB,GAAG3q6B,SAI3D,IAAK,IAAI21E,EAAI,EAAGA,EAAIi+J,EAAM5zO,OAAQ21E,IAChC6xD,EAAuB,OAAhBosG,EAAMj+J,GAAG,GAAe,GAAKi+J,EAAMj+J,GAAG,IACzCi+J,EAAMj+J,GAAG,KAAO201B,GAAkB9iyB,EAAI7oH,QAAQ2r5B,IAAmB,KACnEn95B,EAAOymO,EAAMj+J,IAMnB,GAAW,OAAPvoE,EAAa,CACf,IAAIw95B,EAAmBf,EAAgBD,EAAQh51B,UAAU,EAAG,IACxDi61B,EAAiBR,EAAcT,EAAQh51B,UAAU,EAAG,IAGxB,OAA5Bg51B,EAAQh51B,UAAU,EAAG,KACvBi61B,EAAiB,CAAC,QAAS,GAAO,OAIhCD,GACFH,EAAgBG,EAAiB,GACjCL,EAAeX,EAAQh51B,UAAU,IACxBi61B,IACTJ,EAAgBI,EAAe,GAC/BN,EAAeX,EAAQh51B,UAAUi61B,EAAe,GAAG7q6B,SAIrD,IAAK,IAAI1B,EAAI,EAAGA,EAAIs1O,EAAM5zO,OAAQ1B,IAChCkpI,EAAuB,OAAhBosG,EAAMt1O,GAAG,GAAe,GAAKs1O,EAAMt1O,GAAG,IACzCs1O,EAAMt1O,GAAG,KAAOis6B,GAAgB/iyB,EAAI7oH,QAAQ4r5B,IAAiB,KAC/Dn95B,EAAKwmO,EAAMt1O,IAMjB,OAAa,OAAT6O,GAAwB,OAAPC,GAKjBD,EAAK,KAAOC,EAAG,GAJVd,EAAM6ikB,GASRx2Z,EAASxrK,EAAK,GAAKq95B,GAAmBp95B,EAAG,GAAKq95B,IAGvDnx6B,EAAQwx6B,QAAU,SAASnyvB,EAAQowvB,GAEjC,IADApwvB,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAIT,IAAK,iBAAiBz/H,KAAKy/H,IAAWA,GAAU,KAAOA,EAAS,IAC9D,OAAOrsK,EAAM+qG,IAIf,GAAIshE,EAAS,EACX,MAAO,IAAM3uD,EAAKujyB,KAAK,IAAK,GAAK,IAAM50uB,GAAQv5K,SAAS,GAAGY,SAAW,IAAM24K,GAAQv5K,SAAS,GAI/F,IAAI2S,EAASgoC,SAAS4+H,EAAQ,IAAIv5K,SAAS,GAG3C,MAAsB,qBAAX2p6B,EACFh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQyx6B,QAAU,SAASpyvB,EAAQowvB,GAEjC,IADApwvB,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAIT,IAAK,kBAAkBz/H,KAAKy/H,IAAWA,GAAU,cAAgBA,EAAS,aACxE,OAAOrsK,EAAM+qG,IAIf,GAAIshE,EAAS,EACX,OAAQ,cAAgBA,GAAQv5K,SAAS,IAI3C,IAAI2S,EAASgoC,SAAS4+H,EAAQ,IAAIv5K,SAAS,IAG3C,MAAsB,qBAAX2p6B,EACFh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQ0x6B,QAAU,SAASryvB,EAAQowvB,GAEjC,IADApwvB,EAASxxC,EAAMqxwB,YAAY7/tB,cACL5yK,MACpB,OAAO4yK,EAIT,IAAK,iBAAiBz/H,KAAKy/H,IAAWA,GAAU,WAAaA,EAAS,UACpE,OAAOrsK,EAAM+qG,IAIf,GAAIshE,EAAS,EACX,OAAQ,WAAaA,GAAQv5K,SAAS,GAIxC,IAAI2S,EAASgoC,SAAS4+H,EAAQ,IAAIv5K,SAAS,GAG3C,MAAsB,qBAAX2p6B,EACFh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQ2x6B,MAAQ,SAAS/B,EAASC,GAKhC,OAHAA,OAAuBlv6B,IAAZkv6B,EAAyB,EAAIA,EACxCD,EAAU/hyB,EAAMqxwB,YAAY0wB,GAC5BC,EAAUhiyB,EAAMqxwB,YAAY2wB,GACxBhiyB,EAAM2xwB,WAAWowB,EAASC,GACrB785B,EAAMzS,MAIPqv6B,IAAYC,EAAW,EAAI,GAIrC7v6B,EAAQ4x6B,IAAM,SAASC,EAAaC,GAMlC,OAJAA,OAA+Bnx6B,IAAhBmx6B,EAA6B,EAAIA,EAEhDD,EAAchkyB,EAAMqxwB,YAAY2yB,GAChCC,EAAcjkyB,EAAMqxwB,YAAY4yB,GAC5BjkyB,EAAM2xwB,WAAWqyB,EAAaC,GACzB9+5B,EAAMzS,MAGR+o5B,EAAMkX,IAAIqR,IAInB7x6B,EAAQ4x6B,IAAItuB,QAAU,WACpB,MAAM,IAAI724B,MAAM,mCAGlBzM,EAAQ+x6B,KAAO,SAASr15B,GAEtB,OAAIukC,MAAMvkC,GACD1J,EAAMzS,MAGR+o5B,EAAMoX,KAAKhk5B,IAIpB1c,EAAQ+x6B,KAAKzuB,QAAU,WACrB,MAAM,IAAI724B,MAAM,oCAGlBzM,EAAQgy6B,OAAS,SAAS3yvB,EAAQ51K,GAGhC,OAFAA,EAAOA,GAAQ,EACf41K,EAASxxC,EAAMqxwB,YAAY7/tB,GACvBxxC,EAAM2xwB,WAAW/14B,EAAM41K,GAClBA,EAIDA,GAAU51K,EAAQ,EAAI,GAGhCzJ,EAAQiy6B,QAAU,SAAS5yvB,EAAQowvB,GAEjC,IAAK,sBAAsB7v3B,KAAKy/H,GAC9B,OAAOrsK,EAAM+qG,IAIf,IAAIm0zB,EAA8B,KAAlB7yvB,EAAO34K,QAA0D,MAAzC24K,EAAO/nG,UAAU,EAAG,GAAGr5B,cAG3DmxpB,EAAW8iO,EAAYzx3B,SAAS4+H,EAAQ,IAAM,cAAgB5+H,SAAS4+H,EAAQ,IAGnF,GAAI+vhB,GAAW,KAAOA,EAAU,IAC9B,OAAOp8rB,EAAM+qG,IAIf,GAAIm0zB,EACF,MAAO,IAAMxhzB,EAAKujyB,KAAK,IAAK,GAAK,IAAM7kN,GAAStpsB,SAAS,GAAGY,SAAW,IAAM0osB,GAAStpsB,SAAS,GAIjG,IAAI2S,EAAS22rB,EAAQtpsB,SAAS,GAG9B,YAAenF,IAAX8u6B,EACKh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQmy6B,QAAU,SAAS9yvB,GAEzB,IAAK,sBAAsBz/H,KAAKy/H,GAC9B,OAAOrsK,EAAM+qG,IAIf,IAAIqxlB,EAAU3upB,SAAS4+H,EAAQ,IAG/B,OAAQ+vhB,GAAW,aAAgBA,EAAU,cAAgBA,GAG/DpvsB,EAAQoy6B,QAAU,SAAS/yvB,EAAQowvB,GAEjC,IAAK,sBAAsB7v3B,KAAKy/H,GAC9B,OAAOrsK,EAAM+qG,IAIf,IAAIqxlB,EAAU3upB,SAAS4+H,EAAQ,IAG/B,GAAI+vhB,EAAU,WAAaA,EAAU,aACnC,OAAOp8rB,EAAM+qG,IAIf,GAAIqxlB,GAAW,aACb,OAAQA,EAAU,cAAetpsB,SAAS,GAI5C,IAAI2S,EAAS22rB,EAAQtpsB,SAAS,GAG9B,YAAenF,IAAX8u6B,EACKh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQqy6B,MAAQ,SAASC,GAEvB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAG1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIRqB,KAAK8oK,KAAK9oK,KAAKy1O,IAAI36N,EAAG,GAAK9a,KAAKy1O,IAAIhnM,EAAG,KAGhDrwC,EAAQwy6B,UAAY,SAASF,GAC3B,QAAgB3x6B,IAAZ2x6B,IAAqC,IAAZA,IAAgC,IAAZA,EAC/C,OAAOt/5B,EAAMzS,MAIf,GAAgB,IAAZ+x6B,GAA6B,MAAZA,EACnB,OAAO,EAIT,GAAI,CAAC,IAAK,KAAKjt5B,QAAQit5B,IAAY,EACjC,OAAO,EAOT,IAAIG,GAHJH,EAAUA,EAAQ701B,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,QAG5Ep4D,QAAQ,KACvBqt5B,EAAQJ,EAAQjt5B,QAAQ,KACf,IAATot5B,IACFA,EAAOH,EAAQjt5B,QAAQ,IAAK,IAGhB,IAAVqt5B,IACFA,EAAQJ,EAAQjt5B,QAAQ,IAAK,IAI/B,IAAIwD,EAAOyp5B,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,EAAG4r6B,EAAQ5r6B,QACrD+vN,EAAiB,MAAT5tM,GAAyB,MAATA,EAE5B,OAAI4p5B,GAAQ,GAAKC,GAAS,EAEnBj8sB,EAKDg8sB,GAAQ,EACFxx3B,MAAMqx3B,EAAQh71B,UAAU,EAAGm71B,KAAUxx3B,MAAMqx3B,EAAQh71B,UAAUm71B,EAAO,EAAGH,EAAQ5r6B,OAAS,IAC9FsM,EAAM+qG,IACNv3G,OAAO8r6B,EAAQh71B,UAAUm71B,EAAO,EAAGH,EAAQ5r6B,OAAS,IAE9Cu6C,MAAMqx3B,EAAQh71B,UAAU,EAAGo71B,KAAWzx3B,MAAMqx3B,EAAQh71B,UAAUo71B,EAAQ,EAAGJ,EAAQ5r6B,OAAS,IAChGsM,EAAM+qG,KACLv3G,OAAO8r6B,EAAQh71B,UAAUo71B,EAAQ,EAAGJ,EAAQ5r6B,OAAS,IAXjDsM,EAAM+qG,IAcX04G,EACMx1K,MAAMqx3B,EAAQh71B,UAAU,EAAGg71B,EAAQ5r6B,OAAS,IAAOsM,EAAM+qG,IAAMu0zB,EAAQh71B,UAAU,EAAGg71B,EAAQ5r6B,OAAS,GAErGu6C,MAAMqx3B,GAAYt/5B,EAAM+qG,IAAM,GAK5C/9G,EAAQ2y6B,WAAa,SAASL,GAE5B,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAG1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIL,IAANmc,GAAiB,IAAN2zB,EACNr9B,EAAMyr4B,KAIL,IAAN/h4B,GAAW2zB,EAAI,EACVzuC,KAAKqhf,GAAK,EAIT,IAANvme,GAAW2zB,EAAI,GACTzuC,KAAKqhf,GAAK,EAIV,IAAN5yc,GAAW3zB,EAAI,EACV,EAIC,IAAN2zB,GAAW3zB,EAAI,GACT9a,KAAKqhf,GAIXvme,EAAI,EACC9a,KAAK8+4B,KAAKrw2B,EAAI3zB,GACZA,EAAI,GAAK2zB,GAAK,EAChBzuC,KAAK8+4B,KAAKrw2B,EAAI3zB,GAAK9a,KAAKqhf,GAExBrhf,KAAK8+4B,KAAKrw2B,EAAI3zB,GAAK9a,KAAKqhf,IAInCjjf,EAAQ4y6B,YAAc,SAASN,GAE7B,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGjC,IAANpmL,EAAWrwC,EAAQkw6B,QAAQxz5B,GAAI2zB,EAAGomL,GAAQ67sB,GAGpDty6B,EAAQ6y6B,MAAQ,SAASP,GAEvB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKm1f,IAAIr6e,IAAM9a,KAAKmkG,IAAI11D,GAAKzuC,KAAKmkG,KAAK11D,IAAM,GAAIzuC,KAAKq1f,IAAIv6e,IAAM9a,KAAKmkG,IAAI11D,GAAKzuC,KAAKmkG,KAAK11D,IAAM,EAAGomL,IAG1Hz2N,EAAQ8y6B,OAAS,SAASR,GAExB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKm1f,IAAI1md,IAAMzuC,KAAKmkG,IAAIrpF,GAAK9a,KAAKmkG,KAAKrpF,IAAM,EAAG9a,KAAKq1f,IAAI5md,IAAMzuC,KAAKmkG,IAAIrpF,GAAK9a,KAAKmkG,KAAKrpF,IAAM,EAAG+5M,IAGzHz2N,EAAQ+y6B,MAAQ,SAAST,GAEvB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIRP,EAAQgz6B,MAAMhz6B,EAAQ6y6B,MAAMP,GAAUty6B,EAAQiz6B,MAAMX,KAG7Dty6B,EAAQgz6B,MAAQ,SAASE,EAAUC,GAEjC,IAAI3o6B,EAAIxK,EAAQuy6B,OAAOW,GACnBzo6B,EAAIzK,EAAQwy6B,UAAUU,GACtBxo6B,EAAI1K,EAAQuy6B,OAAOY,GACnBxo6B,EAAI3K,EAAQwy6B,UAAUW,GAE1B,GAAItlyB,EAAM2xwB,WAAWh14B,EAAGC,EAAGC,EAAGC,GAC5B,OAAOqI,EAAMzS,MAIf,IAAI6y6B,EAAQF,EAAS571B,UAAU471B,EAASxs6B,OAAS,GAC7C2s6B,EAAQF,EAAS771B,UAAU671B,EAASzs6B,OAAS,GAC7C+vN,EAAO,IAQX,IAPc,MAAV28sB,GAEiB,MAAVC,KADT58sB,EAAO,KAMC,IAAN/rN,GAAiB,IAANC,EACb,OAAOqI,EAAM+qG,IAIf,IAAIovyB,EAAMzi5B,EAAIA,EAAIC,EAAIA,EACtB,OAAO3K,EAAQkw6B,SAAS1l6B,EAAIE,EAAID,EAAIE,GAAKwi5B,GAAM1i5B,EAAIC,EAAIF,EAAIG,GAAKwi5B,EAAK12rB,IAGvEz2N,EAAQsz6B,MAAQ,SAAShB,GAEvB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAC9C+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAIxpN,EAAIrL,KAAKmkG,IAAIrpF,GACjB,OAAO1c,EAAQkw6B,QAAQjj6B,EAAIrL,KAAKm1f,IAAI1md,GAAIpjC,EAAIrL,KAAKq1f,IAAI5md,GAAIomL,IAG3Dz2N,EAAQuz6B,KAAO,SAASjB,GAEtB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKkuG,IAAIluG,KAAK8oK,KAAKhuJ,EAAIA,EAAI2zB,EAAIA,IAAKzuC,KAAK8+4B,KAAKrw2B,EAAI3zB,GAAI+5M,IAG/Ez2N,EAAQwz6B,QAAU,SAASlB,GAEzB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKkuG,IAAIluG,KAAK8oK,KAAKhuJ,EAAIA,EAAI2zB,EAAIA,IAAMzuC,KAAKkuG,IAAI,IAAKluG,KAAK8+4B,KAAKrw2B,EAAI3zB,GAAK9a,KAAKkuG,IAAI,IAAK2mH,IAG7Gz2N,EAAQyz6B,OAAS,SAASnB,GAExB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKkuG,IAAIluG,KAAK8oK,KAAKhuJ,EAAIA,EAAI2zB,EAAIA,IAAMzuC,KAAKkuG,IAAI,GAAIluG,KAAK8+4B,KAAKrw2B,EAAI3zB,GAAK9a,KAAKkuG,IAAI,GAAI2mH,IAG3Gz2N,EAAQ0z6B,QAAU,SAASpB,EAASjzvB,GAClCA,EAASxxC,EAAMqxwB,YAAY7/tB,GAC3B,IAAI3iK,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAC1B,GAAIzkyB,EAAM2xwB,WAAWnguB,EAAQ3iK,EAAG2zB,GAC9B,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAC9C+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAIn8I,EAAI14E,KAAKy1O,IAAIr3O,EAAQqy6B,MAAMC,GAAUjzvB,GAGrCzuJ,EAAI5wB,EAAQ2y6B,WAAWL,GAG3B,OAAOty6B,EAAQkw6B,QAAQ511B,EAAI14E,KAAKm1f,IAAI13U,EAASzuJ,GAAI0pD,EAAI14E,KAAKq1f,IAAI53U,EAASzuJ,GAAI6lM,IAG7Ez2N,EAAQ2z6B,UAAY,WAElB,IAAIl75B,EAASlQ,UAAU,GAEvB,IAAKA,UAAU7B,OACb,OAAOsM,EAAMzS,MAIf,IAAK,IAAIsH,EAAI,EAAGA,EAAIU,UAAU7B,OAAQmB,IAAK,CAEzC,IAAI2C,EAAIxK,EAAQuy6B,OAAO955B,GACnBhO,EAAIzK,EAAQwy6B,UAAU/55B,GACtB/N,EAAI1K,EAAQuy6B,OAAOhq6B,UAAUV,IAC7B8C,EAAI3K,EAAQwy6B,UAAUjq6B,UAAUV,IAEpC,GAAIgmI,EAAM2xwB,WAAWh14B,EAAGC,EAAGC,EAAGC,GAC5B,OAAOqI,EAAMzS,MAIfkY,EAASzY,EAAQkw6B,QAAQ1l6B,EAAIE,EAAID,EAAIE,EAAGH,EAAIG,EAAIF,EAAIC,GAItD,OAAO+N,GAGTzY,EAAQuy6B,OAAS,SAASD,GACxB,QAAgB3x6B,IAAZ2x6B,IAAqC,IAAZA,IAAgC,IAAZA,EAC/C,OAAOt/5B,EAAMzS,MAIf,GAAgB,IAAZ+x6B,GAA6B,MAAZA,EACnB,OAAO,EAIT,GAAI,CAAC,IAAK,KAAM,KAAM,MAAO,KAAM,MAAO,IAAK,KAAM,KAAM,MAAO,KAAM,OAAOjt5B,QAAQit5B,IAAY,EACjG,OAAO,EAIT,IAAIG,EAAOH,EAAQjt5B,QAAQ,KACvBqt5B,EAAQJ,EAAQjt5B,QAAQ,KACf,IAATot5B,IACFA,EAAOH,EAAQjt5B,QAAQ,IAAK,IAEhB,IAAVqt5B,IACFA,EAAQJ,EAAQjt5B,QAAQ,IAAK,IAI/B,IAAIwD,EAAOyp5B,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,EAAG4r6B,EAAQ5r6B,QACrD+vN,EAAiB,MAAT5tM,GAAyB,MAATA,EAE5B,OAAI4p5B,GAAQ,GAAKC,GAAS,EAEnBj8sB,EAKDg8sB,GAAQ,EACFxx3B,MAAMqx3B,EAAQh71B,UAAU,EAAGm71B,KAAUxx3B,MAAMqx3B,EAAQh71B,UAAUm71B,EAAO,EAAGH,EAAQ5r6B,OAAS,IAC9FsM,EAAM+qG,IACNv3G,OAAO8r6B,EAAQh71B,UAAU,EAAGm71B,IAEtBxx3B,MAAMqx3B,EAAQh71B,UAAU,EAAGo71B,KAAWzx3B,MAAMqx3B,EAAQh71B,UAAUo71B,EAAQ,EAAGJ,EAAQ5r6B,OAAS,IAChGsM,EAAM+qG,IACNv3G,OAAO8r6B,EAAQh71B,UAAU,EAAGo71B,IAXvB1/5B,EAAM+qG,IAcX04G,EACMx1K,MAAMqx3B,EAAQh71B,UAAU,EAAGg71B,EAAQ5r6B,OAAS,IAAOsM,EAAM+qG,IAAM,EAE/D98D,MAAMqx3B,GAAYt/5B,EAAM+qG,IAAMu0zB,GAK5Cty6B,EAAQ4z6B,MAAQ,SAAStB,GAEvB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOt/5B,EAAMzS,MAIf,IAAImc,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIRP,EAAQgz6B,MAAM,IAAKhz6B,EAAQ6y6B,MAAMP,KAG1Cty6B,EAAQ6z6B,OAAS,SAASvB,GAExB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIRP,EAAQgz6B,MAAM,IAAKhz6B,EAAQ8y6B,OAAOR,KAG3Cty6B,EAAQiz6B,MAAQ,SAASX,GAEvB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKq1f,IAAIv6e,IAAM9a,KAAKmkG,IAAI11D,GAAKzuC,KAAKmkG,KAAK11D,IAAM,EAAGzuC,KAAKm1f,IAAIr6e,IAAM9a,KAAKmkG,IAAI11D,GAAKzuC,KAAKmkG,KAAK11D,IAAM,EAAGomL,IAGzHz2N,EAAQ8z6B,OAAS,SAASxB,GAExB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAI9C,OAHA+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxCz2N,EAAQkw6B,QAAQtu6B,KAAKm1f,IAAI1md,IAAMzuC,KAAKmkG,IAAIrpF,GAAK9a,KAAKmkG,KAAKrpF,IAAM,EAAG9a,KAAKq1f,IAAI5md,IAAMzuC,KAAKmkG,IAAIrpF,GAAK9a,KAAKmkG,KAAKrpF,IAAM,EAAG+5M,IAGzHz2N,EAAQ+z6B,OAAS,SAASzB,GAExB,IAAI515B,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,GAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACtB,OAAOr9B,EAAMzS,MAIf,IAAIk2N,EAAO67sB,EAAQh71B,UAAUg71B,EAAQ5r6B,OAAS,GAC9C+vN,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAIpkN,EAAIzQ,KAAK8oK,KAAK1qK,EAAQqy6B,MAAMC,IAG5B1h5B,EAAI5wB,EAAQ2y6B,WAAWL,GAG3B,OAAOty6B,EAAQkw6B,QAAQ795B,EAAIzQ,KAAKm1f,IAAInme,EAAI,GAAIve,EAAIzQ,KAAKq1f,IAAIrme,EAAI,GAAI6lM,IAGnEz2N,EAAQg06B,MAAQ,SAAU1B,GAExB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOt/5B,EAAMzS,MAIf,IAAImc,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAG1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAM+qG,IAIR/9G,EAAQgz6B,MAAM,IAAKhz6B,EAAQiz6B,MAAMX,KAG1Cty6B,EAAQi06B,OAAS,SAAU3B,GAEzB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOt/5B,EAAMzS,MAIf,IAAImc,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAG1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAM+qG,IAIR/9G,EAAQgz6B,MAAM,IAAKhz6B,EAAQ8z6B,OAAOxB,KAG3Cty6B,EAAQk06B,MAAQ,SAAShB,EAAUC,GAEjC,IAAI3o6B,EAAI3F,KAAK0t6B,OAAOW,GAChBzo6B,EAAI5F,KAAK2t6B,UAAUU,GACnBxo6B,EAAI7F,KAAK0t6B,OAAOY,GAChBxo6B,EAAI9F,KAAK2t6B,UAAUW,GAEvB,GAAItlyB,EAAM2xwB,WAAWh14B,EAAGC,EAAGC,EAAGC,GAC5B,OAAOqI,EAAMzS,MAIf,IAAI6y6B,EAAQF,EAAS571B,UAAU471B,EAASxs6B,OAAS,GAC7C2s6B,EAAQF,EAAS771B,UAAU671B,EAASzs6B,OAAS,GAC7C+vN,EAAO,IAQX,OAPc,MAAV28sB,GAEiB,MAAVC,KADT58sB,EAAO,KAMF5xN,KAAKqr6B,QAAQ1l6B,EAAIE,EAAGD,EAAIE,EAAG8rN,IAGpCz2N,EAAQm06B,MAAQ,WACd,IAAK5r6B,UAAU7B,OACb,OAAOsM,EAAMzS,MAQf,IANA,IAAIsvB,EAAOg+G,EAAMt9H,QAAQhI,WAGrBkQ,EAASoX,EAAK,GAGThoB,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAAK,CAEpC,IAAI2C,EAAI3F,KAAK0t6B,OAAO955B,GAChBhO,EAAI5F,KAAK2t6B,UAAU/55B,GACnB/N,EAAI7F,KAAK0t6B,OAAO1i5B,EAAKhoB,IACrB8C,EAAI9F,KAAK2t6B,UAAU3i5B,EAAKhoB,IAE5B,GAAIgmI,EAAM2xwB,WAAWh14B,EAAGC,EAAGC,EAAGC,GAC5B,OAAOqI,EAAMzS,MAIfkY,EAAS5T,KAAKqr6B,QAAQ1l6B,EAAIE,EAAGD,EAAIE,GAInC,OAAO8N,GAGTzY,EAAQo06B,MAAQ,SAAS9B,GAEvB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOt/5B,EAAMzS,MAIf,IAAImc,EAAI1c,EAAQuy6B,OAAOD,GACnBji4B,EAAIrwC,EAAQwy6B,UAAUF,GAE1B,OAAIzkyB,EAAM2xwB,WAAW9i4B,EAAG2zB,GACfr9B,EAAMzS,MAIRsE,KAAKmu6B,MAAMnu6B,KAAKou6B,MAAMX,GAAUzt6B,KAAKgu6B,MAAMP,KAGpDty6B,EAAQq06B,QAAU,SAASh1vB,EAAQowvB,GAEjC,IAAK,gBAAgB7v3B,KAAKy/H,GACxB,OAAOrsK,EAAM+qG,IAIf,IAAIm0zB,EAA8B,KAAlB7yvB,EAAO34K,QAA4C,MAA3B24K,EAAO/nG,UAAU,EAAG,GAGxD83nB,EAAW8iO,EAAYzx3B,SAAS4+H,EAAQ,GAAK,WAAa5+H,SAAS4+H,EAAQ,GAG/E,GAAI+vhB,GAAW,KAAOA,EAAU,IAC9B,OAAOp8rB,EAAM+qG,IAIf,GAAIm0zB,EACF,MAAO,IAAMxhzB,EAAKujyB,KAAK,IAAK,GAAK,IAAM7kN,GAAStpsB,SAAS,GAAGY,SAAW,IAAM0osB,GAAStpsB,SAAS,GAIjG,IAAI2S,EAAS22rB,EAAQtpsB,SAAS,GAG9B,MAAsB,qBAAX2p6B,EACFh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,KAI/F/9G,EAAQs06B,QAAU,SAASj1vB,GAEzB,IAAK,gBAAgBz/H,KAAKy/H,GACxB,OAAOrsK,EAAM+qG,IAIf,IAAIqxlB,EAAU3upB,SAAS4+H,EAAQ,GAG/B,OAAQ+vhB,GAAW,UAAaA,EAAU,WAAaA,GAGzDpvsB,EAAQu06B,QAAU,SAASl1vB,EAAQowvB,GAEjC,IAAK,gBAAgB7v3B,KAAKy/H,GACxB,OAAOrsK,EAAM+qG,IAIf,IAAIqxlB,EAAU3upB,SAAS4+H,EAAQ,GAG/B,GAAI+vhB,GAAW,UACb,MAAO,MAAQA,EAAU,YAAYtpsB,SAAS,IAIhD,IAAI2S,EAAS22rB,EAAQtpsB,SAAS,IAG9B,YAAenF,IAAX8u6B,EACKh35B,EAGHwoC,MAAMwu3B,GACDz85B,EAAMzS,MAIXkv6B,EAAS,EACJz85B,EAAM+qG,KAIf0xzB,EAAS7t6B,KAAKwjB,MAAMqq5B,KAGFh35B,EAAO/R,OAAUgqH,EAAKujyB,KAAK,IAAKwb,EAASh35B,EAAO/R,QAAU+R,EAASzF,EAAM+qG,MAOxF,SAASh+G,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EAGrBvhN,EAAO,QAFkB,CAAC,MAAO,UAAW,OAAQ,QAAS,OAAQ,QAAS,MAAO,YAAa,MAAO,SAAU,aAAc,OAAQ,QAAS,OAAQ,QAAS,QAAS,SAAU,UAAW,WAAY,YAAa,aAAc,OAAQ,UAAW,UAAW,UAAW,UAAW,YAAa,WAAY,WAAY,UAAW,UAAW,UAAW,UAAW,aAAc,mBAAoB,YAAa,YAAa,SAAU,YAAa,QAAS,YAAa,SAAU,UAAW,cAAe,iBAAkB,OAAQ,aAAc,gBAAiB,YAAa,eAAgB,SAAU,SAAU,QAAS,OAAQ,SAAU,UAAW,SAAU,UAAW,UAAW,cAAe,aAAc,kBAAmB,eAAgB,UAAW,SAAU,MAAO,OAAQ,MAAO,OAAQ,QAAS,SAAU,aAAc,UAAW,WAAY,UAAW,cAAe,eAAgB,eAAgB,MAAO,OAAQ,UAAW,WAAY,OAAQ,YAAa,MAAO,OAAQ,UAAW,KAAM,MAAO,UAAW,UAAW,UAAW,UAAW,UAAW,QAAS,QAAS,SAAU,WAAY,WAAY,IAAK,QAAS,SAAU,UAAW,KAAM,MAAO,OAAQ,OAAQ,QAAS,MAAO,aAAc,YAAa,SAAU,YAAa,QAAS,WAAY,OAAQ,aAAc,QAAS,QAAS,UAAW,OAAQ,OAAQ,SAAU,SAAU,YAAa,UAAW,QAAS,WAAY,YAAa,KAAM,aAAc,QAAS,aAAc,YAAa,YAAa,WAAY,UAAW,kBAAmB,QAAS,MAAO,UAAW,SAAU,SAAU,MAAO,UAAW,UAAW,UAAW,UAAW,OAAQ,YAAa,eAAgB,cAAe,KAAM,QAAS,YAAa,aAAc,cAAe,QAAS,SAAU,QAAS,QAAS,SAAU,QAAS,QAAS,OAAQ,UAAW,SAAU,UAAW,YAAa,SAAU,QAAS,SAAU,QAAS,SAAU,SAAU,QAAS,QAAS,QAAS,MAAO,YAAa,WAAY,OAAQ,MAAO,WAAY,UAAW,SAAU,YAAa,YAAa,WAAY,QAAS,QAAS,aAAc,QAAS,SAAU,OAAQ,OAAQ,QAAS,MAAO,OAAQ,MAAO,SAAU,KAAM,MAAO,QAAS,SAAU,eAAgB,cAAe,cAAe,aAAc,QAAS,KAAM,MAAO,QAAS,MAAO,OAAQ,SAAU,MAAO,MAAO,OAAQ,QAAS,SAAU,OAAQ,MAAO,YAAa,YAAa,WAAY,WAAY,QAAS,SAAU,cAAe,WAAY,KAAM,gBAAiB,eAAgB,cAAe,UAAW,YAAa,WAAY,cAAe,aAAc,WAAY,UAAW,YAAa,WAAY,MAAO,MAAO,OAAQ,MAAO,UAAW,UAAW,UAAW,UAAW,MAAO,KAAM,YAAa,UAAW,gBAAiB,gBAAiB,iBAAkB,iBAAkB,SAAU,eAAgB,MAAO,KAAM,MAAO,eAAgB,cAAe,MAAO,QAAS,OAAQ,OAAQ,UAAW,SAAU,KAAM,eAAgB,eAAgB,cAAe,cAAe,WAAY,UAAW,OAAQ,cAAe,WAAY,UAAW,UAAW,SAAU,OAAQ,YAAa,eAAgB,aAAc,eAAgB,UAAW,OAAQ,QAAS,QAAS,QAAS,YAAa,UAAW,MAAO,OAAQ,MAAO,MAAO,SAAU,MAAO,OAAQ,SAAU,YAAa,OAAQ,MAAO,OAAQ,OAAQ,SAAU,QAAS,MAAO,QAAS,QAAS,QAAS,QAAS,OAAQ,SAAU,cAAe,UAAW,UAAW,SAAU,SAAU,UAAW,SAAU,QAAS,aAAc,WAAY,MAAO,QAAS,SAAU,aAAc,QAAS,WAAY,WAAY,UAAW,SAAU,MAAO,IAAK,SAAU,YAAa,YAAa,QAAS,WAAY,MAAO,OAAQ,UAAW,aAAc,aAAc,QAAS,UAAW,UAAW,OAAQ,YAAa,OAAQ,SAAU,QAAS,YAAa,QAAS,OAAQ,WAAY,OAAQ,QAAS,UAAW,UAAW,SAAU,QAAS,QAAS,QAAS,OAAQ,OAAQ,QAAS,OAAQ,UAAW,UAAW,eAAgB,cAAe,UAAW,OAAQ,OAAQ,MAAO,OAAQ,aAMn+H,SAASD,EAAQC,EAASu+4B,GAEjC,aAgBA,SAASi2B,EAAgB7u4B,GACvB,IAAIltB,EAASgoC,SAAS9a,EAAO,IAQ7B,OALEltB,EADEwoC,MAAMxoC,IACE,EAED7W,KAAKC,IAAI4W,EAAS,GAAI,GAYnC,SAASg85B,EAAgB5zwB,GACvB,IAAIpoJ,EAAS,GAMb,OAJIooJ,GAAO,IACTpoJ,EAAS,IAAMooJ,EAAM,IAGhBpoJ,EAtCTzY,EAAQuhN,YAAa,EACrBvhN,EAAQw06B,gBAAkBA,EAC1Bx06B,EAAQy06B,gBAAkBA,EAC1Bz06B,EAAQ006B,mBAAqBA,EAC7B106B,EAAQ206B,mBAAqBA,EAC7B306B,EAAQ406B,aAqFR,SAAsBjv4B,GACpB,GAAqB,kBAAVA,IAAuBkv4B,EAAqBj13B,KAAKja,GAC1D,MAAO,GAGT,IAAImv4B,EAAwBnv4B,EAAMupG,cAAc97F,MAAMyh4B,GAClDE,EAAYD,EAAsB,GAClCl9gB,EAASk9gB,EAAsB,GAC/BE,EAASF,EAAsB,GAC/Bj0wB,EAAMi0wB,EAAsB,GAEhC,MAAO,CAAC,CACN9z6B,MAAOwz6B,EAAgB3zwB,GACvBl7H,MAAOk7H,EACPwiS,WAAuB,MAAX2xe,GACX,CACDh06B,MAAO0z6B,EAAmB98gB,GAC1BjyX,MAAOiyX,EACPyrC,WAA0B,MAAd0xe,KAtGhB/06B,EAAQi16B,QAiHR,SAAiBp0wB,EAAK+2P,GACpB,IAAIs9gB,GAAYr0wB,EAAIwiS,WAAa,IAAM,IAAMoxe,EAAgB5zwB,EAAI7/J,OAGjE,OAFmB42Z,EAAOyrC,WAAa,IAAM,IAAMsxe,EAAmB/8gB,EAAO52Z,OAExDk06B,GAlFvB,IAAIC,EAAoB,6BACpBC,EAA2BD,EAAkBzu6B,OAQjD,SAASgu6B,EAAmB/u4B,GAC1B,IAAIltB,EAAS,EAEb,GAAqB,kBAAVktB,EAGT,IAAK,IAAI99B,EAAI,EAAGw0E,GAFhB12C,EAAQA,EAAMupG,eAEYxoI,OAAS,EAAGmB,EAAI89B,EAAMj/B,OAAQmB,GAAK,EAAGw0E,GAAK,EACnE5jE,GAAU7W,KAAKy1O,IAAI+9rB,EAA0B/41B,IAAM841B,EAAkB9v5B,QAAQsgB,EAAM99B,IAAM,GAK7F,QAFE4Q,EAWJ,SAASk85B,EAAmB/8gB,GAG1B,IAFA,IAAIn/Y,EAAS,GAENm/Y,GAAU,GACfn/Y,EAAS/E,OAAO6tJ,aAAaq2P,EAASw9gB,EAA2B,IAAM385B,EACvEm/Y,EAASh2Z,KAAKwjB,MAAMwyY,EAASw9gB,GAA4B,EAG3D,OAAO385B,EAAOy2H,cAGhB,IAAI2lyB,EAAuB,qCA8CpB,SAAS906B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQw06B,gBAAkBx06B,EAAQy06B,gBAAkBz06B,EAAQ006B,mBAAqB106B,EAAQ206B,mBAAqB306B,EAAQi16B,QAAUj16B,EAAQ406B,aAAe506B,EAAQgT,MAAQhT,EAAQq16B,OAASr16B,EAAQig5B,YAAcjg5B,EAAQgg5B,UAAYhg5B,EAAQ+/4B,UAAY//4B,EAAQ8/4B,WAAa9/4B,EAAQ6/4B,oBAAsB7/4B,EAAQ4/4B,WAAa5/4B,EAAQ2/4B,eAAiB3/4B,EAAQwoV,MAAQxoV,EAAQs16B,wBAAqB306B,EAEpY,IAEI406B,EAAW/ptB,EAFD+yrB,EAAoB,KAM9Bi3B,EAAsBhqtB,EAFD+yrB,EAAoB,KAIzC7oe,EAAS6oe,EAAoB,GAE7Bk3B,EAAUjqtB,EAAuBkqN,GAEjCgggB,EAAQn3B,EAAoB,IAEhC,SAAS/yrB,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAEzF3L,EAAQs16B,mBAAqBE,EAAmB,QAChDx16B,EAAQwoV,MAAQktF,EAAOltF,MACvBxoV,EAAQ2/4B,eAAiBjqe,EAAOiqe,eAChC3/4B,EAAQ4/4B,WAAalqe,EAAOkqe,WAC5B5/4B,EAAQ6/4B,oBAAsBnqe,EAAOmqe,oBACrC7/4B,EAAQ8/4B,WAAapqe,EAAOoqe,WAC5B9/4B,EAAQ+/4B,UAAYrqe,EAAOqqe,UAC3B//4B,EAAQgg5B,UAAYtqe,EAAOsqe,UAC3Bhg5B,EAAQig5B,YAAcvqe,EAAOuqe,YAC7Bjg5B,EAAQq16B,OAASE,EAAQ,QACzBv16B,EAAQgT,MAAQyi6B,EAAO,QACvBz16B,EAAQ406B,aAAec,EAAMd,aAC7B506B,EAAQi16B,QAAUS,EAAMT,QACxBj16B,EAAQ206B,mBAAqBe,EAAMf,mBACnC306B,EAAQ006B,mBAAqBgB,EAAMhB,mBACnC106B,EAAQy06B,gBAAkBiB,EAAMjB,gBAChCz06B,EAAQw06B,gBAAkBkB,EAAMlB,iBAIzB,SAASz06B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EAErB,IAEIo0tB,EAAgBnqtB,EAFD+yrB,EAAoB,KAMnCq3B,EAAuBpqtB,EAFD+yrB,EAAoB,KAI1Cs3B,EAAiBt3B,EAAoB,IAErCu3B,EAAUv3B,EAAoB,IAE9Bw3B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bk3B,EAAUjqtB,EAAuBkqN,GAEjCgggB,EAAQn3B,EAAoB,IAEhC,SAAS/yrB,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAWzF,IAAI0p6B,EAAS,SAAUW,GAGrB,SAASX,KAZX,SAAyBnj5B,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIjrB,UAAU,qCAa5G+qB,CAAgBptB,KAAMww6B,GAEtB,IAAI743B,EAbR,SAAoCy3H,EAAMpuK,GAAQ,IAAKouK,EAAQ,MAAM,IAAIutC,eAAe,6DAAgE,OAAO37M,GAAyB,kBAATA,GAAqC,oBAATA,EAA8BouK,EAAPpuK,EAalNmhH,CAA2BniH,KAAMmx6B,EAASnw6B,KAAKhB,OA4B3D,OA1BA23C,EAAMqyU,OAAS,IAAIgnjB,EAAeR,OAClC743B,EAAMqyU,OAAOl1I,GAAK,CAChB70H,SAAUixzB,EAAQjxzB,SAClBmxzB,UAAWH,EAAQG,UACnB/1B,aAAc61B,EAAQ71B,aACtBg2B,WAAY,SAAoBC,GAC9B,OAAO353B,EAAM453B,YAAYD,IAE3BE,aAAc,SAAsB/zuB,GAClC,OAAO9lJ,EAAM853B,cAAch0uB,IAE7Bi0uB,mBAAoBX,EAAoB,QACxCY,aAAc,SAAsBnj6B,EAAMmkC,GACxC,OAAOgF,EAAMi63B,cAAcpj6B,EAAMmkC,IAEnCk/3B,UAAW,SAAmBn26B,GAC5B,OAAOi8C,EAAMm63B,eAAep26B,IAE9B8h2B,WAAY,SAAoBz90B,EAAOvjB,GACrC,OAAOm7C,EAAMo63B,gBAAgBhy5B,EAAOvjB,KAGxCm7C,EAAMq63B,UAAY5z6B,OAAOC,OAAO,MAChCs5C,EAAM6/I,UAAYp5L,OAAOC,OAAO,MAEhCs5C,EAAMw0U,YAAY,QAAQ,GAAMA,YAAY,SAAS,GAAOA,YAAY,OAAQ,MACzEx0U,EAuPT,OA9RF,SAAmBmgC,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI11E,UAAU,kEAAoE01E,GAAeD,EAAS35E,UAAYC,OAAOC,OAAO05E,GAAcA,EAAW55E,UAAW,CAAEG,YAAa,CAAE5C,MAAOo8E,EAAUhwE,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAegwE,IAAY35E,OAAOo3E,eAAiBp3E,OAAOo3E,eAAesC,EAAUC,GAAcD,EAAS55E,UAAY65E,GAM/dF,CAAU241B,EAAQW,GA4ClBX,EAAOry6B,UAAUq+C,MAAQ,SAAe6igB,GACtC,IAAIzriB,EAAS,KACTzF,EAAQ,KAEZ,IAEIyF,EADiB,KAAfyriB,EACO,GAEAr/iB,KAAKgqX,OAAOxtU,MAAM6igB,GAE7B,MAAOvuO,GACP,IAAIz/R,GAAU,EAAIu/3B,EAAO,SAAa9/lB,EAAGz/R,SAGvCljC,EADEkjC,IAGM,EAAIu/3B,EAAO,SAAa//f,EAAOltF,OAS3C,OALI/vU,aAAkBhM,QACpBuG,GAAQ,EAAIyi6B,EAAO,SAAah95B,EAAOy9B,WAAY,EAAIu/3B,EAAO,SAAa//f,EAAOltF,OAClF/vU,EAAS,MAGJ,CACLzF,MAAOA,EACPyF,OAAQA,IAaZ485B,EAAOry6B,UAAUguX,YAAc,SAAqB39W,EAAM9S,GAGxD,OAFAsE,KAAKgy6B,UAAUxj6B,GAAQ9S,EAEhBsE,MAWTww6B,EAAOry6B,UAAU8z6B,YAAc,SAAqBzj6B,GAClD,OAAOxO,KAAKgy6B,UAAUxj6B,IAYxBgi6B,EAAOry6B,UAAUsz6B,cAAgB,SAAuBjj6B,GACtD,IAAI9S,EAAQsE,KAAKiy6B,YAAYzj6B,GAQ7B,GANAxO,KAAK4oG,KAAK,eAAgBp6F,GAAM,SAAUqB,QACvB,IAAbA,IACFnU,EAAQmU,WAIE,IAAVnU,EACF,MAAMkM,MAAMipa,EAAOkqe,YAGrB,OAAOr/4B,GAYT806B,EAAOry6B,UAAU+z6B,YAAc,SAAqB1j6B,EAAM3L,GAGxD,OAFA7C,KAAKw3L,UAAUhpL,GAAQ3L,EAEhB7C,MAWTww6B,EAAOry6B,UAAUg06B,YAAc,SAAqB3j6B,GAClD,OAAOxO,KAAKw3L,UAAUhpL,IAaxBgi6B,EAAOry6B,UAAUyz6B,cAAgB,SAAuBpj6B,GACtD,IAAImkC,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAE7Eb,EAAK7C,KAAKmy6B,YAAY3j6B,GACtB9S,OAAQ,EAYZ,OAVImH,IACFnH,EAAQmH,EAAG8vC,IAGb3yC,KAAK4oG,KAAK,eAAgBp6F,EAAMmkC,GAAQ,SAAU9iC,QAC/B,IAAbA,IACFnU,EAAQmU,WAIK,IAAVnU,GAAmB,EAAIq16B,EAAoB,SAAavi6B,EAAMmkC,GAAUj3C,GAYjF806B,EAAOry6B,UAAU2z6B,eAAiB,SAAwBhx4B,GACxDA,EAAQA,EAAMupG,cAEd,IAAI+nyB,GAAgB,EAAIvB,EAAMd,cAAcjv4B,GACxCk7H,EAAMo2wB,EAAc,GACpBr/gB,EAASq/gB,EAAc,GAEvB126B,OAAQ,EAMZ,OAJAsE,KAAK4oG,KAAK,gBAAiB,CAAE9nE,MAAOA,EAAOk7H,IAAKA,EAAK+2P,OAAQA,IAAU,SAAU5pY,GAC/EztB,EAAQytB,KAGHztB,GAaT806B,EAAOry6B,UAAU4z6B,gBAAkB,SAAyBM,EAAYC,GACtED,EAAaA,EAAWhoyB,cACxBioyB,EAAWA,EAASjoyB,cAEpB,IAAIkoyB,GAAiB,EAAI1B,EAAMd,cAAcsC,GACzCG,EAAWD,EAAe,GAC1BE,EAAcF,EAAe,GAE7BG,GAAiB,EAAI7B,EAAMd,cAAcuC,GACzCK,EAASD,EAAe,GACxBE,EAAYF,EAAe,GAE3BG,EAAY,GACZC,EAAU,GAEVN,EAASr26B,OAASw26B,EAAOx26B,OAC3B026B,EAAU72wB,IAAMw2wB,EAChBM,EAAQ92wB,IAAM22wB,IAEdE,EAAU72wB,IAAM22wB,EAChBG,EAAQ92wB,IAAMw2wB,GAGZC,EAAYt26B,OAASy26B,EAAUz26B,OACjC026B,EAAU9/gB,OAAS0/gB,EACnBK,EAAQ//gB,OAAS6/gB,IAEjBC,EAAU9/gB,OAAS6/gB,EACnBE,EAAQ//gB,OAAS0/gB,GAGnBI,EAAU/x4B,OAAQ,EAAI+v4B,EAAMT,SAASyC,EAAU72wB,IAAK62wB,EAAU9/gB,QAC9D+/gB,EAAQhy4B,OAAQ,EAAI+v4B,EAAMT,SAAS0C,EAAQ92wB,IAAK82wB,EAAQ//gB,QAExD,IAAIr3Z,EAAQ,GAQZ,OANAsE,KAAK4oG,KAAK,iBAAkBiq0B,EAAWC,GAAS,WAC9C,IAAI3p5B,EAASzlB,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAEjFhI,EAAQytB,KAGHztB,GAYT806B,EAAOry6B,UAAUoz6B,YAAc,SAAqBD,GAClD,IAAI,EAAIzggB,EAAOgqe,eAAey2B,GAC5B,MAAM1p6B,MAAM0p6B,GAGd,MAAM1p6B,MAAMipa,EAAOltF,QAGd6slB,EAzRI,CA0RXM,EAAa,SAEf316B,EAAO,QAAcq16B,GAId,SAASt16B,EAAQC,GAExB,SAASqtP,KAKTA,EAAErqP,UAAY,CACZw6C,GAAI,SAAUnqC,EAAMo2B,EAAU68O,GAC5B,IAAIr5Q,EAAIpI,KAAKoI,IAAMpI,KAAKoI,EAAI,IAO5B,OALCA,EAAEoG,KAAUpG,EAAEoG,GAAQ,KAAKpC,KAAK,CAC/BvJ,GAAI+hC,EACJ68O,IAAKA,IAGAzhR,MAGTg4L,KAAM,SAAUxpL,EAAMo2B,EAAU68O,GAC9B,IAAIryG,EAAOpvK,KACX,SAASglC,IACPoqI,EAAKt2H,IAAItqC,EAAMw2B,GACfJ,EAAS38B,MAAMw5Q,EAAK/9Q,WAItB,OADAshC,EAASjnB,EAAI6mB,EACN5kC,KAAK24C,GAAGnqC,EAAMw2B,EAAUy8O,IAGjC74K,KAAM,SAAUp6F,GAMd,IALA,IAAIwsC,EAAO,GAAGlrC,MAAM9O,KAAK0C,UAAW,GAChCqv6B,IAAW/y6B,KAAKoI,IAAMpI,KAAKoI,EAAI,KAAKoG,IAAS,IAAIsB,QACjD9M,EAAI,EACJ+K,EAAMgl6B,EAAOlx6B,OAETmB,EAAI+K,EAAK/K,IACf+v6B,EAAO/v6B,GAAGH,GAAGoF,MAAM8q6B,EAAO/v6B,GAAGy+Q,IAAKzmO,GAGpC,OAAOh7C,MAGT84C,IAAK,SAAUtqC,EAAMo2B,GACnB,IAAIx8B,EAAIpI,KAAKoI,IAAMpI,KAAKoI,EAAI,IACxB4q6B,EAAO5q6B,EAAEoG,GACTyk6B,EAAa,GAEjB,GAAID,GAAQpu4B,EACV,IAAK,IAAI5hC,EAAI,EAAG+K,EAAMil6B,EAAKnx6B,OAAQmB,EAAI+K,EAAK/K,IACtCgw6B,EAAKhw6B,GAAGH,KAAO+hC,GAAYou4B,EAAKhw6B,GAAGH,GAAGkb,IAAM6mB,GAC9Cqu4B,EAAW7m6B,KAAK4m6B,EAAKhw6B,IAY3B,OAJCiw6B,EAAWpx6B,OACRuG,EAAEoG,GAAQyk6B,SACH7q6B,EAAEoG,GAENxO,OAIX9E,EAAOC,QAAUqtP,GAKV,SAASttP,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAqEP,SAA4BkwL,GAC1B,IAAI14I,EAASjvC,UAAU7B,OAAS,QAAsB/F,IAAjB4H,UAAU,GAAmBA,UAAU,GAAK,GAIjF,GAFA2nL,EAAWA,EAAShhD,eAEf6oyB,EAAmB7nvB,GACtB,MAAMzjL,MAAMipa,EAAOkqe,YAGrB,OAAOm4B,EAAmB7nvB,GAAUpjL,MAAMir6B,EAAoBvg4B,IA7EhEx3C,EAAQg46B,kBAAoBA,EAE5B,IAEIC,EAAQzstB,EAFD+yrB,EAAoB,KAM3B25B,EAAc1stB,EAFD+yrB,EAAoB,KAMjC45B,EAAW3stB,EAFD+yrB,EAAoB,KAM9B65B,EAAU5stB,EAFD+yrB,EAAoB,KAM7B85B,EAAoB7stB,EAFD+yrB,EAAoB,KAMvC+5B,EAAgB9stB,EAFD+yrB,EAAoB,KAMnCg6B,EAAuB/stB,EAFD+yrB,EAAoB,KAM1Ci6B,EAAahttB,EAFD+yrB,EAAoB,KAMhCk6B,EAAoBjttB,EAFD+yrB,EAAoB,KAMvCm6B,EAAUlttB,EAFD+yrB,EAAoB,KAM7Bo6B,EAAanttB,EAFD+yrB,EAAoB,KAMhCq6B,EAAapttB,EAFD+yrB,EAAoB,KAMhCs6B,EAAUrttB,EAFD+yrB,EAAoB,KAI7B7oe,EAAS6oe,EAAoB,GAEjC,SAAS/yrB,EAAuB7/M,GAAO,OAAOA,GAAOA,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAGzF,IAAIos6B,EAAqB906B,OAAOC,OAAO,MA2BvC,SAAS806B,EAAkBh3vB,EAAQjyJ,GAC5BzoB,MAAMC,QAAQy6K,KACjBA,EAAS,CAACA,EAAO9xC,gBAEnB8xC,EAAOzvK,SAAQ,SAAUc,GACnB0c,EAAK+p5B,UACPf,EAAmB1l6B,GAAK0c,EAAK1c,GAE7B0l6B,EAAmB1l6B,GAAK0c,KAK9Bip5B,EAAkBC,EAAK,QAAYc,OAAQd,EAAK,SAChDD,EAAkBE,EAAW,QAAYa,OAAQb,EAAW,SAC5DF,EAAkBG,EAAQ,QAAYY,OAAQZ,EAAQ,SACtDH,EAAkBI,EAAO,QAAYW,OAAQX,EAAO,SACpDJ,EAAkBa,EAAO,QAAYE,OAAQF,EAAO,SACpDb,EAAkBK,EAAiB,QAAYU,OAAQV,EAAiB,SACxEL,EAAkBM,EAAa,QAAYS,OAAQT,EAAa,SAChEN,EAAkBO,EAAoB,QAAYQ,OAAQR,EAAoB,SAC9EP,EAAkBQ,EAAU,QAAYO,OAAQP,EAAU,SAC1DR,EAAkBS,EAAiB,QAAYM,OAAQN,EAAiB,SACxET,EAAkBW,EAAU,QAAYI,OAAQJ,EAAU,SAC1DX,EAAkBY,EAAU,QAAYG,OAAQH,EAAU,SAC1DZ,EAAkBU,EAAO,QAAYK,OAAQL,EAAO,UAI7C,SAAS346B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAAIgn5B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bw6B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAK9G,GACZ,IAAK,IAAI2H,EAAOrnB,UAAU7B,OAAQyiB,EAAO7iB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAC9F3G,EAAK2G,EAAO,GAAKvnB,UAAUunB,GAG7B,IAAIrX,EAAS0Q,EAAK3Y,QAAO,SAAUutI,EAAKx9I,GACtC,OAAOw9I,GAAM,EAAIg4xB,EAAQjxzB,UAAUvkH,MAClC,EAAIw16B,EAAQjxzB,UAAU78F,IAEzB,GAAIg5B,MAAMxoC,GACR,MAAMhM,MAAMipa,EAAOuqe,aAGrB,OAAOxn4B,EAGTsW,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,IACP,IAAK,IAAIa,EAAOrnB,UAAU7B,OAAQ8wC,EAASlxC,MAAMspB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC7E0nB,EAAO1nB,GAAQvnB,UAAUunB,GAG3B,OAAO0nB,EAAOhnC,QAAO,SAAUutI,EAAKx9I,GAClC,OAAOw9I,EAAMx9I,EAAMuF,aAClB,IAGLipB,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAAIgn5B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bw6B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAK9G,GACZ,IAAK,IAAI2H,EAAOrnB,UAAU7B,OAAQyiB,EAAO7iB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAC9F3G,EAAK2G,EAAO,GAAKvnB,UAAUunB,GAG7B,IAAIrX,EAAS0Q,EAAK3Y,QAAO,SAAUutI,EAAKx9I,GACtC,OAAOw9I,GAAM,EAAIg4xB,EAAQjxzB,UAAUvkH,MAClC,EAAIw16B,EAAQjxzB,UAAU78F,IAEzB,GAAIxP,IAAW9W,IACb,MAAM8K,MAAMipa,EAAOiqe,gBAErB,GAAI1+1B,MAAMxoC,GACR,MAAMhM,MAAMipa,EAAOuqe,aAGrB,OAAOxn4B,EAGTsW,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,IAASC,EAGlBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAUgCpjB,EAR5But6B,EAUJ,SAAiCvt6B,GAAO,GAAIA,GAAOA,EAAI41M,WAAc,OAAO51M,EAAc,IAAIutZ,EAAS,GAAI,GAAW,MAAPvtZ,EAAe,IAAK,IAAIxC,KAAOwC,EAAW1I,OAAOD,UAAUoD,eAAeP,KAAK8F,EAAKxC,KAAM+vZ,EAAO/vZ,GAAOwC,EAAIxC,IAAmC,OAAzB+vZ,EAAM,QAAcvtZ,EAAYutZ,EAVrPF,CAFCulf,EAAoB,KAIjC46B,EAAqB56B,EAAoB,IAEzCi3B,GAI4B7p6B,EAJiBwt6B,IAIIxt6B,EAAI41M,WAAa51M,EAAM,CAAE,QAAWA,GAFrF+pa,EAAS6oe,EAAoB,GAM7Bw6B,EAAS/46B,EAAQ+46B,OAASvD,EAAmB,QAEjD,SAASzm5B,EAAKiyJ,GACZ,OAAO,WAGL,IAAIo4vB,GAFJp4vB,EAASA,EAAO9xC,eAEStrF,MAAM,KAC3By13B,GAAe,EACf5g6B,OAAS,EAEb,GAA2B,IAAvB2g6B,EAAY1y6B,OACVwy6B,EAAUE,EAAY,MACxBC,GAAe,EACf5g6B,EAASyg6B,EAAUE,EAAY,IAAIts6B,MAAMos6B,EAAW3w6B,gBAEjD,CAKL,IAJA,IAAI7B,EAAS0y6B,EAAY1y6B,OACrB1F,EAAQ,EACRs46B,EAAgBJ,EAEbl46B,EAAQ0F,GAIb,GAHA4y6B,EAAgBA,EAAcF,EAAYp46B,IAC1CA,KAEKs46B,EAAe,CAClBA,EAAgB,KAChB,MAGAA,IACFD,GAAe,EACf5g6B,EAAS6g6B,EAAcxs6B,WAAMnM,EAAW4H,YAI5C,IAAK8w6B,EACH,MAAM5s6B,MAAMipa,EAAOkqe,YAGrB,OAAOnn4B,GAIXsW,EAAK+p5B,WAAY,EACjB/p5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,IAAIt8wB,EAAa,CACfs8wB,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,GACpBA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,IACpBA,EAAoB,GACpBA,EAAoB,KAGtB,IAAK,IAAI7z4B,KAAKu3H,EAAY,CACxB,IAAIhG,EAAWgG,EAAWv3H,GAC1B,IAAK,IAAI6wE,KAAK0gD,EACZj8H,EAAQu7E,GAAKv7E,EAAQu7E,IAAM0gD,EAAS1gD,KAOjC,SAASx7E,EAAQC,EAASu+4B,GAEjC,IAAI8K,EAAW9K,EAAoB,GAC/B4B,EAAc5B,EAAoB,GAClCg7B,EAAch7B,EAAoB,IAClC53nB,EAAW43nB,EAAoB,GAEnC,SAAShy4B,EAAI7E,EAAI0U,GACf,GAAIA,EACF,IAAK,IAAIvU,KAAKuU,EACZ1U,EAAGG,GAAKuU,EAAKvU,GAIjB,OAAOH,EAGT1H,EAAQw56B,SAAWr5B,EAAY2J,KAAKC,KACpC/p5B,EAAQy56B,QAAUt5B,EAAY2J,KAAKI,IACnClq5B,EAAQ056B,UAAYv5B,EAAYiK,MAAML,KACtC/p5B,EAAQkj5B,QAAUlj5B,EAAQ256B,WAAapt6B,EAAI884B,EAASnG,QAAQG,KAAMgG,EAASnG,SAC3Elj5B,EAAQ456B,YAAcvwB,EAASnG,QAAQG,KACvCrj5B,EAAQ656B,eAAiBxwB,EAASnG,QAAQI,QAC1Ctj5B,EAAQ856B,QAAU35B,EAAYuK,MAAMX,KACpC/p5B,EAAQ+56B,UAAY55B,EAAYuK,MAAMX,KAAK77E,GAC3Clu0B,EAAQg66B,OAAS75B,EAAYuK,MAAMR,IACnClq5B,EAAQi66B,SAAW95B,EAAYuK,MAAMR,IAAIh8E,GACzClu0B,EAAQk66B,QAAU/5B,EAAYuK,MAAMtsZ,KACpCp+f,EAAQmr5B,WAAa5+4B,EAAI4z4B,EAAYgL,WAAWC,KAAMjL,EAAYgL,YAClEnr5B,EAAQm66B,MAAQh6B,EAAY8L,WAAWnx0B,EACvC96E,EAAQo66B,YAAcj6B,EAAY8L,WAAWnx0B,EAC7C96E,EAAQq66B,YAAcl6B,EAAY8L,WAAWzsvB,EAC7Cx/J,EAAQs66B,UAAYn6B,EAAYiK,MAAMF,IACtClq5B,EAAQu66B,UAAYp6B,EAAYmM,MAAMvC,KACtC/p5B,EAAQw66B,YAAcjB,EAAYxH,KAAKzuB,QACvCtj5B,EAAQy66B,WAAalB,EAAY3H,IAAItuB,QACrCtj5B,EAAQ066B,MAAQv6B,EAAYngpB,EAAE+ppB,KAC9B/p5B,EAAQ266B,QAAUx6B,EAAYngpB,EAAE+ppB,KAAK77E,GACrClu0B,EAAQ466B,OAASz6B,EAAYngpB,EAAEkqpB,IAAIh8E,GACnClu0B,EAAQ666B,KAAO16B,EAAYngpB,EAAEkqpB,IAC7Blq5B,EAAQuk5B,MAAQh44B,EAAI884B,EAAS9E,MAAMlB,KAAMgG,EAAS9E,OAClDvk5B,EAAQ866B,UAAYzxB,EAAS9E,MAAMlB,KACnCrj5B,EAAQ+66B,aAAe1xB,EAAS9E,MAAMjB,QACtCtj5B,EAAQg76B,MAAQ76B,EAAYngpB,EAAEo+P,KAC9Bp+f,EAAQi76B,UAAY96B,EAAYmN,MAAMvD,KACtC/p5B,EAAQk76B,SAAW/6B,EAAYmN,MAAMpD,IACrClq5B,EAAQm76B,eAAiBh7B,EAAYsN,QAAQnK,QAC7Ctj5B,EAAQo76B,YAAcj7B,EAAYuO,QAAQ3E,KAC1C/p5B,EAAQq76B,OAASl7B,EAAY8O,QAAQ/E,IACrClq5B,EAAQs76B,WAAan7B,EAAY8O,QAAQ/E,IACzClq5B,EAAQu76B,YAAcp7B,EAAY8O,QAAQlF,KAC1C/p5B,EAAQyh5B,KAAOl14B,EAAI4z4B,EAAYsB,KAAKC,KAAMvB,EAAYsB,MACtDzh5B,EAAQw76B,SAAWr7B,EAAYsB,KAAK6N,KACpCtv5B,EAAQy76B,SAAWt7B,EAAYsB,KAAKC,KACpC1h5B,EAAQ076B,aAAev7B,EAAYsP,SAAS1F,KAC5C/p5B,EAAQ276B,gBAAkBh1pB,EAASqxoB,YAAYE,KAC/Cl45B,EAAQ476B,SAAWz7B,EAAYiL,KAAKrB,KACpC/p5B,EAAQ676B,QAAU17B,EAAYiL,KAAKlB,IACnClq5B,EAAQ876B,UAAY37B,EAAYiL,KAAK5rvB,EAAEuqvB,KACvC/p5B,EAAQ+76B,SAAW57B,EAAYiL,KAAK5rvB,EAAE0qvB,IACtClq5B,EAAQ6h5B,WAAat14B,EAAI4z4B,EAAY0B,WAAWG,IAAK7B,EAAY0B,YACjE7h5B,EAAQg86B,cAAgB77B,EAAY0B,WAAWG,IAC/Chi5B,EAAQi86B,cAAgB97B,EAAY0B,WAAWC,IAC/C9h5B,EAAQ+v5B,YAAcxj5B,EAAI4z4B,EAAY4P,YAAYjO,IAAK3B,EAAY4P,aACnE/v5B,EAAQk86B,eAAiB/7B,EAAY4P,YAAY/N,IACjDhi5B,EAAQm86B,eAAiBh8B,EAAY4P,YAAYjO,IACjD9h5B,EAAQow5B,QAAU7j5B,EAAI4z4B,EAAYiQ,QAAQrG,KAAM5J,EAAYiQ,SAC5Dpw5B,EAAQo86B,YAAcj8B,EAAYiQ,QAAQrG,KAC1C/p5B,EAAQ+h5B,SAAWx14B,EAAI4z4B,EAAY4B,SAASD,IAAK3B,EAAY4B,UAC7D/h5B,EAAQq86B,YAAcl8B,EAAY4B,SAASC,IAC3Chi5B,EAAQs86B,YAAcn8B,EAAY4B,SAASD,IAC3C9h5B,EAAQww5B,KAAOjk5B,EAAI4z4B,EAAYqQ,KAAKhJ,GAAIrH,EAAYqQ,MACpDxw5B,EAAQu86B,QAAUp8B,EAAYqQ,KAAKC,IACnCzw5B,EAAQw86B,OAASr8B,EAAYqQ,KAAKhJ,GAClCxn5B,EAAQy86B,MAAQt8B,EAAY0Q,KAAK/10B,EACjC96E,EAAQqh5B,MAAQ904B,EAAI4z4B,EAAYkB,MAAM7hvB,EAAG2gvB,EAAYkB,OACrDrh5B,EAAQ086B,OAASv8B,EAAYkB,MAAMvm0B,EACnC96E,EAAQ286B,OAASx8B,EAAYkB,MAAM7hvB,EACnCx/J,EAAQ486B,MAAQz8B,EAAYzgvB,EAAEqqvB,KAC9B/p5B,EAAQ686B,QAAU18B,EAAYzgvB,EAAEqqvB,KAAK77E,GACrClu0B,EAAQ886B,KAAO38B,EAAYzgvB,EAAEwqvB,IAC7Blq5B,EAAQ+86B,MAAQ58B,EAAYzgvB,EAAE0+V,KAC9Bp+f,EAAQuh5B,IAAMh14B,EAAI4z4B,EAAYoB,IAAI/hvB,EAAG2gvB,EAAYoB,KACjDvh5B,EAAQg96B,KAAO78B,EAAYoB,IAAIzm0B,EAC/B96E,EAAQi96B,KAAO98B,EAAYoB,IAAI/hvB,EAC/Bx/J,EAAQiy5B,QAAU1l5B,EAAI4z4B,EAAY8R,QAAQlI,KAAM5J,EAAY8R,SAC5Djy5B,EAAQk96B,YAAc/8B,EAAY8R,QAAQlI,KAC1C/p5B,EAAQm96B,YAAcx2pB,EAASmyoB,QAAQZ,KACvCl45B,EAAQo96B,MAAQj9B,EAAY7gvB,EAAE8+V,MAKvB,SAASr+f,EAAQC,EAASu+4B,GAEjC,IAAIn/uB,EAAIx9J,KACR,SAASy76B,EAAQ3q6B,EAAKzN,GAAK,OAAOyN,EAAIlC,QAAO,SAASmvJ,EAAE9F,GAAG,OAAO50J,EAAI06J,EAAI9F,IAAI,GAC9E,SAASyjxB,EAAa5g6B,EAAGzR,EAAGsy6B,EAAIC,EAAItsrB,GAC9BA,IAAMA,GAAQ,GAClB,IAAiB+0qB,EAAbwX,EAAM,EAAI/g6B,EACd,GAAS,IAANzR,EAAS,OAAOsy6B,EACnB,GAAS,IAANty6B,EAAS,OAAOuy6B,EACnB,IAAI,IAAIxy6B,EAAI,EAAGA,GAAKC,IAAKD,EACvBi75B,EAAKuX,EAAKxy6B,EAAIyy6B,EAAMvsrB,EAAOqsrB,EAC3BA,EAAKC,EAAIA,EAAKvX,EAEhB,OAAOuX,EAET,SAASE,EAAaC,EAASC,EAASvq6B,EAAMwq6B,EAAS3srB,GACrD,OAAO,SAAgBx0O,EAAEzR,GACvB,GAAS,IAANA,EAAS,OAAO0y6B,EAAQjh6B,GAC3B,GAAS,IAANzR,EAAS,OAAO2y6B,EAAQlh6B,GAC3B,GAAGzR,EAAI,EAAG,MAAMoI,EAAO,YAAcpI,EAAI,wBACzC,GAAc,GAAX4y6B,GAAsB,IAANnh6B,EAAS,MAAMrJ,EAAO,0BACzC,GAAc,GAAXwq6B,GAAgBnh6B,GAAK,EAAG,MAAMrJ,EAAO,0BAExC,OAAOiq6B,EAAa5g6B,EAAGzR,EADd0y6B,EAAQjh6B,GAASkh6B,EAAQlh6B,GACAw0O,IAGtC,IAAIg+qB,EAAW,WACb,IAAI4O,EAAS,CAAC,aAAe,YAAc,aAAa,YAAY,aAAa,aAAan26B,UAC1Fo26B,EAAS,CAAC,YAAc,WAAa,YAAY,YAAY,YAAY,GAAKp26B,UAC9Eq26B,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiBr26B,UACrFs26B,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBt26B,UACjGg3J,EAAI,WAER,SAASg/wB,EAAQjh6B,GACf,IAAIlS,EAAG615B,EAAIc,EAAI9w3B,EAAI3zB,EAAIA,EAAGii5B,EAAKv/vB,EAAEv6I,IAAInI,GAAK,WAY1C,OAXG0iJ,EAAEv6I,IAAInI,GAAK,EAGZlS,GAFA615B,EAAKgd,EAAQS,EAAQzt4B,KACrB8w3B,EAAKkc,EAAQU,EAAQ1t4B,KAKrBgw3B,EAAKgd,EAAQW,EADb3t4B,EAAI,GAAKA,GAET8w3B,EAAKkc,EAAQY,EAAQ5t4B,GACrB7lC,EAAI40J,EAAEsL,KAAK/L,EAAES,EAAEv6I,IAAInI,KAAK0iJ,EAAE23V,IAAI4na,GAAI0B,EAAGjhwB,EAAE63V,IAAI0na,GAAIwC,EAAG,EAAE/hwB,EAAEv6I,IAAInI,KAErDlS,EAET,IAAI0z6B,EAAS,CAAC,aAAe,WAAa,aAAa,YAAa,YAAc,aAAav26B,UAC3Fw26B,EAAS,CAAC,aAAgB,WAAc,YAAa,YAAa,YAAa,GAAKx26B,UACpFy26B,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBz26B,UAChF026B,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgB126B,UAChG,SAASi26B,EAAQlh6B,GACf,IAAIlS,EAAG615B,EAAIc,EAAI9w3B,EAAI3zB,EAAEA,EAAGii5B,EAAKv/vB,EAAEv6I,IAAInI,GAAK,YAYxC,OAXG9a,KAAKijB,IAAInI,GAAI,EAGdlS,GAFA615B,EAAK3j5B,EAAE2g6B,EAAQa,EAAQ7t4B,KACvB8w3B,EAAKkc,EAAQc,EAAQ9t4B,KAIrBgw3B,EAAGgd,EAAQe,EADX/t4B,EAAI,GAAKA,GAET8w3B,EAAGkc,EAAQgB,EAAQhu4B,GACnB7lC,EAAE40J,EAAEsL,KAAK/L,EAAES,EAAEv6I,IAAInI,KAAK0iJ,EAAE23V,IAAI4na,GAAI0B,EAAGjhwB,EAAE63V,IAAI0na,GAAIwC,EAAG,EAAE/hwB,EAAEv6I,IAAInI,IACrDA,EAAI,IAAGlS,GAAKA,IAEVA,EAET,OAAO,SAAiBkS,EAAGzR,GAEzB,GAAS,KADTA,EAAIrJ,KAAKo/E,MAAM/1E,IACH,OAAO0y6B,EAAQv+wB,EAAEv6I,IAAInI,IACjC,GAAS,IAANzR,EAAS,OAAO2y6B,EAAQx+wB,EAAEv6I,IAAInI,IACjC,GAAGzR,EAAI,EAAG,KAAM,mBAAqBA,EAAI,wBACzC,GAAgB,IAAbm0J,EAAEv6I,IAAInI,GAAU,OAAO,EAE1B,IAAImnC,EAAKw4B,EAA0Bii2B,EAAM7t6B,EAAK8t6B,EAAKC,EAAIC,EAA3CC,EAAM,EAAIt/wB,EAAEv6I,IAAInI,GAC5B,GAAG0iJ,EAAEv6I,IAAInI,GAAKzR,EACZ44C,EAAMy53B,EAAa5g6B,EAAGzR,EAAG0y6B,EAAQv+wB,EAAEv6I,IAAInI,IAAKkh6B,EAAQx+wB,EAAEv6I,IAAInI,KAAK,OAC1D,CAKL,IAHA4h6B,EAAK,EACLC,EAAI163B,EAAIpzC,EAAI,EACZ+t6B,EAAG,EACEni2B,EAJH,EAAE+iF,EAAEh6I,OAAOna,EAAEm0J,EAAEh6I,MAAMg6I,EAAEsL,KAAK,GAAGz/J,KAAK,GAI7BoxE,EAAE,EAAEA,IACXoi2B,EAAIpi2B,EAAEqi2B,EAAIF,EAAGD,EACbA,EAAIC,EACJA,EAAGC,EACCr/wB,EAAEv6I,IAAI255B,GAAM,OACdA,GAAM,MACND,GAAO,MACP163B,GAAO,MACPpzC,GAAO,OAEL6t6B,IAAM7t6B,GAAO+t6B,GACjBF,GAAMA,EACFji2B,GAAKpxE,IAAG44C,EAAI063B,GAGlB163B,GADApzC,EAAI,EAAIA,EAAI+t6B,EAGd,OAAO9h6B,EAAI,GAAMzR,EAAE,GAAM44C,EAAMA,GAzEpB,GA4EXyr3B,EAAW,WACb,IAAIwO,EAAS,EAAE,WAAc,YAAe,YAAa,aAAc,YAAa,aAAan26B,UAC7Fo26B,EAAS,CAAC,YAAe,YAAa,YAAa,WAAa,YAAa,GAAKp26B,UAClFq26B,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiBr26B,UACrFs26B,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBt26B,UAEjGg3J,EAAI,WAgBJu/wB,EAAS,EAAE,aAAiB,aAAkB,YAAiB,aAAiB,YAAgB,aAAgBv26B,UAChHw26B,EAAS,CAAC,YAAiB,aAAiB,WAAiB,YAAgB,WAAgB,YAAgB,GAAGx26B,UAChHy26B,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBz26B,UAChF026B,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgB126B,UAgBhG,OAAO+16B,GAlCP,SAAiBhh6B,GACf,IAAIlS,EAAG615B,EAAIc,EAAI9w3B,EAAI3zB,EAAIA,EAAGii5B,EAAKji5B,EAAI,WAWnC,OAVGA,EAAI,EAGLlS,GAFA615B,EAAKgd,EAAQS,EAAQzt4B,KACrB8w3B,EAAKkc,EAAQU,EAAQ1t4B,IACTsuH,EAAIuwwB,EAAQxy5B,EAAE,GAAK0iJ,EAAEtvD,IAAIpzF,IAGrC2j5B,EAAKgd,EAAQW,EADb3t4B,EAAI,GAAKA,GAET8w3B,EAAKkc,EAAQY,EAAQ5t4B,GACrB7lC,EAAI40J,EAAEsL,KAAK/L,EAAEjiJ,IAAI0iJ,EAAE63V,IAAI0na,GAAI0B,EAAGjhwB,EAAE23V,IAAI4na,GAAIwC,EAAG,EAAEzk5B,IAExClS,KAOT,SAAiBkS,GACf,IAAIlS,EAAG615B,EAAIc,EAAI9w3B,EAAI3zB,EAAEA,EAAGii5B,EAAKji5B,EAAI,YAWjC,OAVGA,EAAI,EAGLlS,GAFA615B,EAAK3j5B,EAAE2g6B,EAAQa,EAAQ7t4B,KACvB8w3B,EAAKkc,EAAQc,EAAQ9t4B,IACTsuH,GAAKuwwB,EAAQxy5B,EAAE,GAAK0iJ,EAAEtvD,IAAIpzF,GAAK,EAAIA,IAG/C2j5B,EAAGgd,EAAQe,EADX/t4B,EAAI,GAAKA,GAET8w3B,EAAGkc,EAAQgB,EAAQhu4B,GACnB7lC,EAAE40J,EAAEsL,KAAK/L,EAAEjiJ,IAAI0iJ,EAAE63V,IAAI0na,GAAI0B,EAAGjhwB,EAAE23V,IAAI4na,GAAIwC,EAAG,EAAEzk5B,IAEtClS,IAG6B,UAAW,GAAI,GAzCxC,GA2CXwk6B,EAAW,WACb,IAAI2P,EAAO,CAAC,EAAK,UAAW,UAAW,UAAW,SAAW,SAAa,UAAYh36B,UAClFi36B,EAAO,CAAC,UAAY,UAAc,WAAc,UAAa,WAAc,UAAc,WAAe,UAAc,WAAaj36B,UAMnIk36B,EAAO,CAAC,GAAK,UAAY,UAAY,UAAY,UAAc,UAAa,UAAYl36B,UACxFm36B,EAAO,CAAC,WAAa,WAAe,UAAa,WAAc,UAAc,WAAe,UAAc,WAAe,WAAan36B,UAM1I,OAAO,SAASqn6B,EAAQty5B,EAAGzR,GAEzB,GAAS,KADTA,EAAIrJ,KAAKo/E,MAAM/1E,IACH,OAdd,SAAiByR,GACf,OAAGA,GAAK,KAAa2g6B,EAAQsB,EAAMji6B,EAAEA,EAAF,SAC5B0iJ,EAAEr5D,IAAIq5D,EAAEv6I,IAAInI,IAAI0iJ,EAAEsL,KAAKtL,EAAEv6I,IAAInI,IAAI2g6B,EAAQuB,EAAM,KAAKx/wB,EAAEv6I,IAAInI,IAY9Cih6B,CAAQjh6B,GAC3B,GAAQ,GAALzR,EAAQ,OARb,SAAiByR,GACf,OAAGA,EAAI,KAAaA,EAAI2g6B,EAAQwB,EAAMni6B,EAAEA,EAAF,UAC9BA,EAAI,GAAK,EAAI,GAAK0iJ,EAAEr5D,IAAIq5D,EAAEv6I,IAAInI,IAAI0iJ,EAAEsL,KAAKtL,EAAEv6I,IAAInI,IAAI2g6B,EAAQyB,EAAM,KAAK1/wB,EAAEv6I,IAAInI,IAMlEkh6B,CAAQlh6B,GAC1B,GAAGzR,EAAI,EAAG,KAAM,kBAAoBA,EAAI,wBACxC,GAAgB,IAAbm0J,EAAEv6I,IAAInI,GAAU,OAAO,EAE1B,IAAImnC,EAAKw4B,EAA0B0i2B,EAAKC,EAAIz50B,EAAhCm50B,EAAM,EAAIt/wB,EAAEv6I,IAAInI,GAI5B,IAFAqi6B,EAAIl73B,EAAI,EACRm73B,EAAG,EACE3i2B,EAHH,EAAE+iF,EAAEp+E,OAAO/1E,EAAEm0J,EAAEp+E,MAAMo+E,EAAEsL,KAAK,GAAGz/J,KAAK,GAG7BoxE,EAAE,EAAEA,IACXkpB,EAAIlpB,EAAEqi2B,EAAIM,EAAKD,EACfA,EAAIC,EAAIA,EAAGz50B,EACP65D,EAAEv6I,IAAIm65B,GAAM,OACdA,GAAM,MACND,GAAO,MACPl73B,GAAO,OAENw4B,GAAKpxE,IAAG44C,EAAMk73B,GAGnB,OADAl73B,GAAOmr3B,EAAQty5B,EAAG,GAAKsi6B,EAChBti6B,EAAI,GAAMzR,EAAE,GAAM44C,EAAMA,GArCpB,GA0CXur3B,EAAW,WACb,IAAIuP,EAAO,EAAE,UAAY,SAAY,UAAY,SAAc,UAAa,QAAY,OAASh36B,UAC7Fi36B,EAAO,CAAC,YAAa,UAAc,WAAe,UAAc,WAAc,SAAa,UAAYj36B,UAMvGk36B,EAAO,CAAC,EAAK,WAAa,WAAa,WAAa,WAAe,WAAc,SAAWl36B,UAC5Fm36B,EAAO,CAAC,WAAY,WAAa,SAAc,WAAe,UAAa,WAAc,UAAYn36B,UAMzG,OAAO+16B,GAZP,SAAiBhh6B,GACf,OAAGA,GAAK,GAAW0iJ,EAAEtvD,IAAIpzF,EAAE,GAAGsy5B,EAAQty5B,EAAE,GAAK2g6B,EAAQsB,EAAMji6B,EAAEA,EAAE,GACxD0iJ,EAAEr5D,KAAKrpF,GAAG0iJ,EAAEsL,KAAKhuJ,GAAG2g6B,EAAQuB,EAAM,EAAEli6B,MAK7C,SAAiBA,GACf,OAAGA,GAAK,EAAU0iJ,EAAEtvD,IAAIpzF,EAAE,GAAGsy5B,EAAQty5B,EAAE,GAAM,EAAEA,EAAG2g6B,EAAQwB,EAAMni6B,EAAEA,EAAE,GAC7D0iJ,EAAEr5D,KAAKrpF,GAAG0iJ,EAAEsL,KAAKhuJ,GAAG2g6B,EAAQyB,EAAM,EAAEpi6B,KAGP,UAAW,EAAG,GAfvC,GAkBb1c,EAAQkv6B,QAAUA,EAClBlv6B,EAAQsv6B,QAAUA,EAClBtv6B,EAAQgv6B,QAAUA,EAClBhv6B,EAAQov6B,QAAUA,GAOb,SAASrv6B,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5Bx1uB,EAAQw1uB,EAAoB,GAC5B0gC,EAAQ1gC,EAAoB,GAC5B1wwB,EAAQ0wwB,EAAoB,GAC5B8B,EAAiB9B,EAAoB,GAEzC,SAASnjtB,EAAQ1yL,GACf,IAAI+P,EAAS,GAQb,OANAo1H,EAAM0nC,UAAU7sK,GAAO,SAASnI,GAC1BA,GACFkY,EAAOxH,KAAK1Q,MAITkY,EAqBT,SAASym6B,EAAgBC,EAAUr2I,GAEjC,IADA,IAAIrsmB,EAAU,GACL50L,EAAI,EAAGA,EAAIs36B,EAAS,GAAGz46B,SAAUmB,EACxC40L,EAAQ50L,IAAK,EAEf,IAAIu36B,EAAoBt2I,EAAU,GAAGpiyB,OACrC,IAAKmB,EAAI,EAAGA,EAAIihyB,EAAUpiyB,SAAUmB,EAC9BihyB,EAAUjhyB,GAAGnB,OAAS046B,IACxBA,EAAoBt2I,EAAUjhyB,GAAGnB,QAIrC,IAAK,IAAI1B,EAAI,EAAGA,EAAIm66B,EAASz46B,SAAU1B,EACrC,IAAK,IAAIkoB,EAAI,EAAGA,EAAIiy5B,EAASn66B,GAAG0B,SAAUwmB,EAAG,CAG3C,IAFA,IAAImy5B,GAAwB,EACxBC,GAAwB,EACnBjj2B,EAAI,EAAGA,EAAIystB,EAAUpiyB,SAAU21E,EAAG,CACzC,IAAIksG,EAAWugnB,EAAUzstB,GACzB,KAAIksG,EAAS7hL,OAAS046B,GAAtB,CAIA,IAAIG,EAAgBh3vB,EAAS,GAC7B,GAAI42vB,EAASn66B,GAAG,KAAOu66B,EAAvB,CAGAD,GAAsB,EACtB,IAAK,IAAIhl2B,EAAI,EAAGA,EAAIiuG,EAAS7hL,SAAU4zE,EACrC,IAAK+k2B,EAGH,QAFiC,IAAhB92vB,EAASjuG,IAAiC,MAAhBiuG,EAASjuG,GAGlD+k2B,GAAwB,MACnB,CACL,IAAIr3B,EAAoB3H,EAAeh/1B,MAAMknI,EAASjuG,GAAK,IACvDmjK,EAAS,CAAC4iqB,EAAe4H,YAAYk3B,EAASn66B,GAAGkoB,GAAImz3B,EAAe6H,qBAAqB/34B,OAAO634B,GAEpGq3B,EAAwBh/B,EAAe8H,QAAQ1qqB,MAKnD6hsB,IACF7ivB,EAAQvvK,GAAKuvK,EAAQvvK,IAAMmy5B,GAMjC,IADA,IAAI5m6B,EAAS,GACJxN,EAAI,EAAGA,EAAIk06B,EAAS,GAAGz46B,SAAUuE,EACpCwxL,EAAQxxL,IACVwN,EAAOxH,KAAKhG,EAAI,GAIpB,OAAOwN,EAzETzY,EAAQw/6B,UAAY,SAASL,EAAUpwzB,GACrC,IAAI/tH,EAAQ,KAUZ,OARA6sI,EAAM0nC,UAAU4pwB,GAAU,SAAS5+6B,EAAOsH,GACxC,GAAItH,EAAM,KAAOwuH,EAEf,OADA/tH,EAAQ6G,GACD,KAKE,MAAT7G,EACKgS,EAAMzS,MAGRS,GA8DThB,EAAQy/6B,SAAW,SAASN,EAAUzjrB,EAAOnzE,GAE3C,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAErC,IAAIjrP,EAAM,EAMV,OAJAo9H,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCkQ,GAAOkv6B,EAAap/6B,MAGU,IAAzBm/6B,EAAch56B,OAAesM,EAAMyr4B,KAAOhu4B,EAAMiv6B,EAAch56B,QAGvE1G,EAAQ4/6B,OAAS,SAAST,EAAUzjrB,EAAOnzE,GAEzC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAImkrB,EAAe,GAMnB,OAJAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAG1BwoK,EAAMk4uB,MAAM4+B,IAGrB7/6B,EAAQ8/6B,QAAU,SAASX,EAAUzjrB,EAAOnzE,GAE1C,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAGf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAImkrB,EAAe,GAMnB,OAJAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAG1BwoK,EAAMm4uB,OAAO2+B,IAGtB7/6B,EAAQ+/6B,KAAO,SAASZ,EAAUzjrB,EAAOnzE,GAEvC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAGf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAIrC,OAA6B,IAAzBgkrB,EAAch56B,OACTsM,EAAMzS,MAIXm/6B,EAAch56B,OAAS,EAClBsM,EAAM+qG,IAGR4h0B,EAAaD,EAAc,KAGpC1/6B,EAAQgg7B,KAAO,SAASb,EAAUzjrB,EAAOnzE,GAEvC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAIukrB,EAAWN,EAAaD,EAAc,IAQ1C,OANA7xyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GAClC0/6B,EAAWN,EAAap/6B,KAC1B0/6B,EAAWN,EAAap/6B,OAIrB0/6B,GAGTjg7B,EAAQkg7B,KAAO,SAASf,EAAUzjrB,EAAOnzE,GAEvC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAGf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAIykrB,EAAWR,EAAaD,EAAc,IAQ1C,OANA7xyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GAClC4/6B,EAAWR,EAAap/6B,KAC1B4/6B,EAAWR,EAAap/6B,OAIrB4/6B,GAGTng7B,EAAQog7B,SAAW,SAASjB,EAAUzjrB,EAAOnzE,GAE3C,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAGf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAImkrB,EAAe,GAEnBhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAEjCs/6B,EAAezkvB,EAAQykvB,GAEvB,IAAIpn6B,EAAS,EAMb,OAJAo1H,EAAM0nC,UAAUsqwB,GAAc,SAASt/6B,GACrCkY,GAAUlY,KAGLkY,GAGTzY,EAAQqg7B,OAAS,SAASlB,EAAUzjrB,EAAOnzE,GAEzC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAErC,IAAImkrB,EAAe,GAOnB,OALAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAEjCs/6B,EAAezkvB,EAAQykvB,GAEhB92wB,EAAMs4uB,MAAM7hvB,EAAEqgxB,IAGvB7/6B,EAAQsg7B,QAAU,SAASnB,EAAUzjrB,EAAOnzE,GAE1C,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAImkrB,EAAe,GAOnB,OALAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAEjCs/6B,EAAezkvB,EAAQykvB,GAEhB92wB,EAAMs4uB,MAAMvm0B,EAAE+k2B,IAGvB7/6B,EAAQug7B,KAAO,SAASpB,EAAUzjrB,EAAOnzE,GAEvC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAGrC,IAAImkrB,EAAe,GAMnB,OAJAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAG1B0+6B,EAAM39B,IAAIu+B,IAGnB7/6B,EAAQwg7B,KAAO,SAASrB,EAAUzjrB,EAAOnzE,GAEvC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAErC,IAAImkrB,EAAe,GAMnB,OAJAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAG1BwoK,EAAMw4uB,IAAI/hvB,EAAEqgxB,IAGrB7/6B,EAAQyg7B,MAAQ,SAAStB,EAAUzjrB,EAAOnzE,GAExC,GAAItnI,MAAMy6M,IAA4B,kBAAVA,EAC1B,OAAO1oP,EAAMzS,MAEf,IAAIm/6B,EAAgBR,EAAgBC,EAAU52vB,GAC1Co3vB,EAAe,GAEnB,GAAqB,kBAAVjkrB,EAAoB,CAC7B,IAAI16P,EAAQhB,EAAQw/6B,UAAUL,EAAUzjrB,GACxCikrB,EAAe9xyB,EAAM1kH,KAAKg25B,EAASn+6B,SAEnC2+6B,EAAe9xyB,EAAM1kH,KAAKg25B,EAASzjrB,IAErC,IAAImkrB,EAAe,GAMnB,OAJAhyyB,EAAM0nC,UAAUmqwB,GAAe,SAASn/6B,GACtCs/6B,EAAa5u6B,KAAK0u6B,EAAap/6B,OAG1BwoK,EAAMw4uB,IAAIzm0B,EAAE+k2B,KAMd,SAAS9/6B,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5B1wwB,EAAQ0wwB,EAAoB,GAC5B6B,EAAc7B,EAAoB,GAEtCv+4B,EAAQ0g7B,IAAM,WAGZ,IAFA,IAAI7w5B,EAAOg+G,EAAMt9H,QAAQhI,WACrBkQ,GAAS,EACJ5Q,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC1BgoB,EAAKhoB,KACR4Q,GAAS,GAGb,OAAOA,GAGTzY,EAAQ2g7B,OAAS,WACf,GAAIp46B,UAAU7B,OAAS,EACrB,OAAOsM,EAAM6ikB,GAGf,IAAI70kB,EAAQuH,UAAU,GACtB,OAAIvH,EAAQ,GAAKA,EAAQ,KAIrBuH,UAAU7B,OAAS1F,EAAQ,EAHtBgS,EAAMzS,MAORgI,UAAUvH,IAGnBhB,EAAQ4g7B,MAAQ,WACd,OAAO,GAGT5g7B,EAAQ6g7B,GAAK,SAASjh4B,EAAMkh4B,EAAYC,GACtC,OAAOnh4B,EAAOkh4B,EAAaC,GAG7B/g7B,EAAQgh7B,QAAU,SAASzg7B,EAAO0g7B,GAChC,OAAI7gC,EAAYyV,QAAQt15B,GACf0g7B,EAEF1g7B,GAGTP,EAAQkh7B,KAAO,SAAS3g7B,EAAO4g7B,GAC7B,OAAO5g7B,IAAUyS,EAAM6ikB,GAAKsrW,EAAc5g7B,GAG5CP,EAAQoh7B,IAAM,SAASC,GACrB,OAAQA,GAGVrh7B,EAAQsh7B,GAAK,WAGX,IAFA,IAAIzx5B,EAAOg+G,EAAMt9H,QAAQhI,WACrBkQ,GAAS,EACJ5Q,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC3BgoB,EAAKhoB,KACP4Q,GAAS,GAGb,OAAOA,GAGTzY,EAAQuh7B,KAAO,WACb,OAAO,GAGTvh7B,EAAQwh7B,IAAM,WAGZ,IAFA,IAAI3x5B,EAAOg+G,EAAMt9H,QAAQhI,WACrBkQ,EAAS,EACJ5Q,EAAI,EAAGA,EAAIgoB,EAAKnpB,OAAQmB,IAC3BgoB,EAAKhoB,IACP4Q,IAGJ,SAAuC,EAA/B7W,KAAKwjB,MAAMxjB,KAAKijB,IAAIpM,MAG9BzY,EAAQyh7B,OAAS,WACf,IAAIhp6B,EAEJ,GAAIlQ,UAAU7B,OAAS,EAAI,CACzB,IAAIg76B,EAAcn56B,UAAU,GACxBo56B,EAAOp56B,UAAU7B,OAAS,EAC1Bk76B,EAAchg7B,KAAKwjB,MAAMu85B,EAAO,GAChCE,GAAkB,EAClBC,EAAmBH,EAAO,IAAM,EAChCI,EAAgBJ,EAAO,IAAM,EAAI,KAAOp56B,UAAUA,UAAU7B,OAAS,GAEzE,GAAIk76B,EACF,IAAK,IAAI5g7B,EAAQ,EAAGA,EAAQ4g7B,EAAa5g7B,IACvC,GAAI0g7B,IAAgBn56B,UAAkB,EAARvH,EAAY,GAAI,CAC5CyX,EAASlQ,UAAkB,EAARvH,EAAY,GAC/B6g7B,GAAkB,EAClB,MAKDA,IACHpp6B,EAASqp6B,EAAmBC,EAAgB/u6B,EAAM6ikB,SAGpDp9jB,EAASzF,EAAMzS,MAGjB,OAAOkY,IAMF,SAAS1Y,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5B53nB,EAAW43nB,EAAoB,GAC/B1wwB,EAAQ0wwB,EAAoB,GAEhC,SAAS1hF,EAAUlyzB,GACjB,OAAOA,GAAKA,EAAEkoB,UAAYouB,MAAMt2C,EAAEkoB,WAGpC,SAASmv5B,EAAWr36B,GAClB,OAAQA,aAAaioB,KAAMjoB,EAAE,IAAIioB,KAAKjoB,GAGxC3K,EAAQii7B,QAAU,SAASC,EAAOj65B,EAAOk65B,EAAY1e,EAAM2e,EAAKxwlB,EAAWonkB,GAKzE,OAHAkpB,EAAaF,EAAWE,GACxBj65B,EAAa+55B,EAAW/55B,GACxBk65B,EAAaH,EAAWG,GACnBtlH,EAAUqlH,IAAWrlH,EAAU50yB,IAAW40yB,EAAUslH,GAKrD1e,GAAQ,GAAK2e,GAAO,IAKc,IAAlC,CAAC,EAAG,EAAG,GAAG/85B,QAAQusU,KAKkB,IAApC,CAAC,EAAG,EAAG,EAAG,EAAG,GAAGvsU,QAAQ2z4B,IAKxBmpB,GAAcD,EAdTlv6B,EAAM+qG,KAoBfi7yB,EAAQA,GAAS,GADjBopB,EAAQA,GAAS,GAIJ3e,EAAO98oB,EAASoyoB,SAASmpB,EAAOC,EAAYnpB,IA5BhDhm5B,EAAMzS,OAgCjBP,EAAQqi7B,SAAW,WACjB,MAAM,IAAI516B,MAAM,gCAIlBzM,EAAQsi7B,UAAY,WAClB,MAAM,IAAI716B,MAAM,iCAIlBzM,EAAQui7B,SAAW,WACjB,MAAM,IAAI916B,MAAM,gCAIlBzM,EAAQwi7B,UAAY,WAClB,MAAM,IAAI/16B,MAAM,iCAIlBzM,EAAQyi7B,SAAW,WACjB,MAAM,IAAIh26B,MAAM,gCAIlBzM,EAAQ0i7B,WAAa,WACnB,MAAM,IAAIj26B,MAAM,kCAIlBzM,EAAQ2i7B,QAAU,WAChB,MAAM,IAAIl26B,MAAM,+BAIlBzM,EAAQ4i7B,QAAU,WAChB,MAAM,IAAIn26B,MAAM,+BAIlBzM,EAAQ6i7B,QAAU,WAChB,MAAM,IAAIp26B,MAAM,+BAGlBzM,EAAQ8i7B,QAAU,SAASrf,EAAMvyD,EAAS3w2B,EAAOqkB,EAAOvjB,EAAK0D,GAQ3D,GAHA0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B3w2B,EAAQstI,EAAMqxwB,YAAY3+4B,GACtBstI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS3w2B,GAClC,OAAOyS,EAAMzS,MAIf,GAAIkj6B,GAAQ,GAAKvyD,GAAW,GAAK3w2B,GAAS,EACxC,OAAOyS,EAAM+qG,IAIf,GAAIn5F,EAAQ,GAAKvjB,EAAM,GAAKujB,EAAQvjB,EAClC,OAAO2R,EAAM+qG,IAIf,GAAa,IAATh5G,GAAuB,IAATA,EAChB,OAAOiO,EAAM+qG,IAIf,IAAIgl0B,EAAU/i7B,EAAQgj7B,IAAIvf,EAAMvyD,EAAS3w2B,EAAO,EAAGwE,GAC/Ck+6B,EAAW,EAED,IAAVr+5B,GACW,IAAT7f,IACFk+6B,GAAY1i7B,EACZqkB,KAIJ,IAAK,IAAI/c,EAAI+c,EAAO/c,GAAKxG,EAAKwG,IAE1Bo76B,GADW,IAATl+6B,EACU/E,EAAQkj7B,GAAGzf,EAAM575B,EAAI,EAAGk76B,EAASxi7B,EAAO,GAAKwi7B,EAE7C/i7B,EAAQkj7B,GAAGzf,EAAM575B,EAAI,EAAGk76B,EAASxi7B,EAAO,GAMxD,OAHA0i7B,GAAYxf,GAMdzj6B,EAAQmj7B,SAAW,SAAS1f,EAAMvyD,EAAS3w2B,EAAOqkB,EAAOvjB,EAAK0D,GAO5D,GAHA0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B3w2B,EAAQstI,EAAMqxwB,YAAY3+4B,GACtBstI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS3w2B,GAClC,OAAOyS,EAAMzS,MAIf,GAAIkj6B,GAAQ,GAAKvyD,GAAW,GAAK3w2B,GAAS,EACxC,OAAOyS,EAAM+qG,IAIf,GAAIn5F,EAAQ,GAAKvjB,EAAM,GAAKujB,EAAQvjB,EAClC,OAAO2R,EAAM+qG,IAIf,GAAa,IAATh5G,GAAuB,IAATA,EAChB,OAAOiO,EAAM+qG,IAIf,IAAIgl0B,EAAU/i7B,EAAQgj7B,IAAIvf,EAAMvyD,EAAS3w2B,EAAO,EAAGwE,GAC/Cq+6B,EAAY,EACF,IAAVx+5B,IAEAw+5B,EADW,IAATr+6B,EACUg+6B,EAAUxi7B,EAAQkj6B,EAElBsf,EAEdn+5B,KAEF,IAAK,IAAI/c,EAAI+c,EAAO/c,GAAKxG,EAAKwG,IAE1Bu76B,GADEr+6B,EAAO,EACIg+6B,GAAW/i7B,EAAQkj7B,GAAGzf,EAAM575B,EAAI,EAAGk76B,EAASxi7B,EAAO,GAAKwi7B,GAAWtf,EAEnEsf,EAAU/i7B,EAAQkj7B,GAAGzf,EAAM575B,EAAI,EAAGk76B,EAASxi7B,EAAO,GAAKkj6B,EAKxE,OAAO2f,GAGTpj7B,EAAQqj7B,GAAK,SAAShjnB,EAAMijnB,EAASC,EAAMjwrB,EAAQ9X,GASjD,GAPAA,OAAmB76O,IAAV66O,EAAuB,GAAKA,EAErC6kF,EAAOxyL,EAAMqxwB,YAAY7+kB,GACzBijnB,EAAUz1yB,EAAMqxwB,YAAYokC,GAC5BC,EAAO11yB,EAAMqxwB,YAAYqkC,GACzBjwrB,EAASzlH,EAAMqxwB,YAAY5rpB,GAC3B9X,EAAQ3tG,EAAMqxwB,YAAY1jqB,GACtB3tG,EAAM2xwB,WAAWn/kB,EAAMijnB,EAASC,EAAMjwrB,EAAQ9X,GAChD,OAAOxoO,EAAMzS,MAIf,GAAI8/T,EAAO,GAAKijnB,EAAU,GAAKC,EAAO,GAAKjwrB,EAAS,EAClD,OAAOtgP,EAAM+qG,IAIf,IAAgE,IAA5D,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAI14F,QAAQm2N,GAClD,OAAOxoO,EAAM+qG,IAIf,GAAIu1I,EAASiwrB,EACX,OAAOvw6B,EAAM+qG,IAIf,GAAIul0B,GAAWjjnB,EACb,OAAO,EAaT,IATA,IAAIojmB,GAAQ,EAAI7h6B,KAAKy1O,IAAIissB,EAAUjjnB,EAAM,EAAIkjnB,IAAOtkrB,QAAQ,GAGxD1iE,EAAU8jI,EAAOojmB,EAAOjorB,EAAQ,GAGhCwjB,EAAQziE,EACR5vJ,EAAU,EACV624B,EAAWlwrB,IAAWiwrB,EAAQA,EAAO,EAAIjwrB,EACpCzrP,EAAI,EAAGA,GAAK276B,EAAS376B,IAE5Bm3P,GADAryN,GAAW0zR,EAAOrhE,GAASykqB,EAK7B,OAAe,IAAXnwqB,EAEK/2D,EACE+2D,IAAWiwrB,GAEZljnB,EAAOrhE,GAASykqB,EAEjB923B,GAIX3sC,EAAQyj7B,IAAM,SAASpjnB,EAAMijnB,EAASC,EAAMjwrB,EAAQk+H,GASlD,GAPAA,OAAqB7wX,IAAX6wX,EAAwB,EAAIA,EAEtCnxD,EAAOxyL,EAAMqxwB,YAAY7+kB,GACzBijnB,EAAUz1yB,EAAMqxwB,YAAYokC,GAC5BC,EAAO11yB,EAAMqxwB,YAAYqkC,GACzBjwrB,EAASzlH,EAAMqxwB,YAAY5rpB,GAC3Bk+H,EAAS3jP,EAAMqxwB,YAAY1thB,GACvB3jP,EAAM2xwB,WAAWn/kB,EAAMijnB,EAASC,EAAMjwrB,EAAQk+H,GAChD,OAAOx+W,EAAMzS,MAIf,GAAI8/T,EAAO,GAAKijnB,EAAU,GAAKC,EAAO,GAAKjwrB,EAAS,GAAKk+H,GAAU,EACjE,OAAOx+W,EAAM+qG,IAIf,GAAIu1I,EAASiwrB,EACX,OAAOvw6B,EAAM+qG,IAIf,GAAIul0B,GAAWjjnB,EACb,OAAO,EAMT,IAFA,IAAIrhE,EAAQ,EACRryN,EAAU,EACL9kC,EAAI,EAAGA,GAAKyrP,EAAQzrP,IAE3Bm3P,GADAryN,EAAU/qC,KAAKE,IAAsB0vX,EAAS+xjB,GAA1BljnB,EAAOrhE,GAA2BqhE,EAAOijnB,EAAUtkrB,GAKzE,OAAOryN,GAIT3sC,EAAQ0j7B,KAAO,WACb,MAAM,IAAIj36B,MAAM,4BAGlBzM,EAAQ2j7B,SAAW,SAASC,EAAQC,GAKlC,GAFAD,EAAS/1yB,EAAMqxwB,YAAY0kC,GAC3BC,EAAWh2yB,EAAMqxwB,YAAY2kC,GACzBh2yB,EAAM2xwB,WAAWokC,EAAQC,GAC3B,OAAO7w6B,EAAMzS,MAIf,GAAIsj7B,EAAW,EACb,OAAO7w6B,EAAM+qG,IAIf,GAAI8l0B,GAAY,GAAKA,EAAW,EAC9B,OAAO7w6B,EAAMyr4B,KAIfolC,EAAWpj4B,SAASoj4B,EAAU,IAG9B,IAAIpr6B,EAASgoC,SAASmj4B,EAAQ,IAG9Bnr6B,GAAWmr6B,EAAS,EAAKhi7B,KAAKy1O,IAAI,GAAIz1O,KAAKqjB,KAAKrjB,KAAKkuG,IAAI+z0B,GAAYji7B,KAAKij5B,OAASg/B,EAGnF,IAAI7kC,EAAQp94B,KAAKy1O,IAAI,GAAIz1O,KAAKqjB,KAAKrjB,KAAKkuG,IAAI+z0B,GAAYji7B,KAAKkj5B,KAAO,GAIpE,OAHArs4B,EAAS7W,KAAKo/E,MAAMvoE,EAASum4B,GAASA,GAMxCh/4B,EAAQ8j7B,SAAW,SAASF,EAAQC,GAKlC,GAFAD,EAAS/1yB,EAAMqxwB,YAAY0kC,GAC3BC,EAAWh2yB,EAAMqxwB,YAAY2kC,GACzBh2yB,EAAM2xwB,WAAWokC,EAAQC,GAC3B,OAAO7w6B,EAAMzS,MAIf,GAAIsj7B,EAAW,EACb,OAAO7w6B,EAAM+qG,IAIf,GAAI8l0B,GAAY,GAAKA,EAAW,EAC9B,OAAO7w6B,EAAMyr4B,KAIfolC,EAAWpj4B,SAASoj4B,EAAU,IAG9B,IAAIpr6B,EAASgoC,SAASmj4B,EAAQ,IAM9B,OAHAnr6B,GAAWmr6B,EAAS,EAAKhi7B,KAAKy1O,IAAI,IAAKz1O,KAAKqjB,KAAKrjB,KAAKkuG,IAAI+z0B,GAAYji7B,KAAKij5B,OAASg/B,GAOtF7j7B,EAAQ+j7B,SAAW,WACjB,MAAM,IAAIt36B,MAAM,gCAGlBzM,EAAQgk7B,OAAS,SAASvgB,EAAMvyD,GAG9B,OAFAuyD,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GACxBrjuB,EAAM2xwB,WAAWikB,EAAMvyD,GAClBl+1B,EAAMzS,MAIXkj6B,GAAQ,GAAKvyD,EAAU,EAClBl+1B,EAAM+qG,KAIfmzvB,EAAUzwzB,SAASywzB,EAAS,IAGrBtv2B,KAAKy1O,IAAI,EAAIosrB,EAAOvyD,EAASA,GAAW,IAGjDlx2B,EAAQkj7B,GAAK,SAASzf,EAAMvyD,EAAS6xE,EAASxi7B,EAAOwE,GAWnD,GARAxE,EAAQA,GAAS,EACjBwE,EAAOA,GAAQ,EAEf0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B6xE,EAAUl1yB,EAAMqxwB,YAAY6jC,GAC5Bxi7B,EAAQstI,EAAMqxwB,YAAY3+4B,GAC1BwE,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS6xE,EAASxi7B,EAAOwE,GAClD,OAAOiO,EAAMzS,MAIf,IAAIkY,EACJ,GAAa,IAATgr5B,EACFhr5B,EAASlY,EAAQwi7B,EAAU7xE,MACtB,CACL,IAAI32C,EAAO34zB,KAAKy1O,IAAI,EAAIosrB,EAAMvyD,GAE5Bz41B,EADW,IAAT1T,EACOxE,EAAQg6zB,EAAOwoH,GAAW,EAAItf,IAASlpG,EAAO,GAAKkpG,EAEnDlj6B,EAAQg6zB,EAAOwoH,GAAWxoH,EAAO,GAAKkpG,EAGnD,OAAQhr5B,GAGVzY,EAAQik7B,WAAa,SAASb,EAAWn3uB,GAGvC,GAFAm3uB,EAAYv1yB,EAAMqxwB,YAAYkkC,GAC9Bn3uB,EAAWp+D,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQ07L,IAC5Cp+D,EAAM2xwB,WAAW4jC,EAAWn3uB,GAC9B,OAAOj5L,EAAMzS,MAOf,IAJA,IAAI0K,EAAIghM,EAASvlM,OACb0yO,EAASgqsB,EAGJv76B,EAAI,EAAGA,EAAIoD,EAAGpD,IAErBuxO,GAAU,EAAIntC,EAASpkM,GAIzB,OAAOuxO,GAITp5O,EAAQkk7B,QAAU,WAChB,MAAM,IAAIz36B,MAAM,+BAGlBzM,EAAQmk7B,KAAO,SAAS1gB,EAAMnwqB,EAAQ49mB,EAAS08B,EAASx0pB,EAAQr0O,GAY9D,GATAq0O,EAASA,GAAU,EACnBr0O,EAAOA,GAAQ,EAEf0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBnwqB,EAASzlH,EAAMqxwB,YAAY5rpB,GAC3B49mB,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B08B,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMnwqB,EAAQ49mB,EAAS08B,EAASx0pB,EAAQr0O,GAC3D,OAAOiO,EAAMzS,MAIf,IAAIwi7B,EAAU/i7B,EAAQgj7B,IAAIvf,EAAMvyD,EAAS08B,EAASx0pB,EAAQr0O,GAmB1D,OAfe,IAAXuuP,EACW,IAATvuP,EACS,GAEC6o4B,EAGD,IAAT7o4B,EACS/E,EAAQkj7B,GAAGzf,EAAMnwqB,EAAS,EAAGyvrB,EAASn1C,EAAS,GAAKm1C,EAEpD/i7B,EAAQkj7B,GAAGzf,EAAMnwqB,EAAS,EAAGyvrB,EAASn1C,EAAS,IAK5C61B,GAGpBzj6B,EAAQok7B,IAAM,SAASp06B,EAAQq06B,GAO7B,GAJAA,EAAQA,GAAS,EAEjBr06B,EAAS69H,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQP,IAC9Cq06B,EAAQx2yB,EAAMqxwB,YAAYmlC,GACtBx2yB,EAAM2xwB,WAAWxv4B,EAAQq06B,GAC3B,OAAOrx6B,EAAMzS,MA4Bf,IAxBA,IAAI+j7B,EAAY,SAASt06B,EAAQsrP,EAAOmoqB,GAGtC,IAFA,IAAIzn1B,EAAIyn1B,EAAO,EACXhr5B,EAASzI,EAAO,GACXnI,EAAI,EAAGA,EAAImI,EAAOtJ,OAAQmB,IACjC4Q,GAAUzI,EAAOnI,GAAKjG,KAAKy1O,IAAIr7J,GAAIs/K,EAAMzzP,GAAKyzP,EAAM,IAAM,KAE5D,OAAO7iP,GAIL8r6B,EAAiB,SAASv06B,EAAQsrP,EAAOmoqB,GAG3C,IAFA,IAAIzn1B,EAAIyn1B,EAAO,EACXhr5B,EAAS,EACJ5Q,EAAI,EAAGA,EAAImI,EAAOtJ,OAAQmB,IAAK,CACtC,IAAI615B,GAAQpiqB,EAAMzzP,GAAKyzP,EAAM,IAAM,IACnC7iP,GAAUil5B,EAAO1t5B,EAAOnI,GAAKjG,KAAKy1O,IAAIr7J,EAAG0h1B,EAAO,GAElD,OAAOjl5B,GAIL6iP,EAAQ,GACRkprB,GAAW,EACXtS,GAAW,EACNrq6B,EAAI,EAAGA,EAAImI,EAAOtJ,OAAQmB,IACjCyzP,EAAMzzP,GAAY,IAANA,EAAW,EAAIyzP,EAAMzzP,EAAI,GAAK,IACtCmI,EAAOnI,GAAK,IACd286B,GAAW,GAETx06B,EAAOnI,GAAK,IACdqq6B,GAAW,GAKf,IAAKsS,IAAatS,EAChB,OAAOl/5B,EAAM+qG,IAKf,IAMI0m0B,EAASC,EAASC,EANlBC,EADJP,OAAmB1j7B,IAAV0j7B,EAAuB,GAAMA,EAQlCQ,GAAW,EACf,GAEEJ,EAAUG,GADVD,EAAcL,EAAUt06B,EAAQsrP,EAAOsprB,IACFL,EAAev06B,EAAQsrP,EAAOsprB,GACnEF,EAAU9i7B,KAAKijB,IAAI4/5B,EAAUG,GAC7BA,EAAaH,EACbI,EAAYH,EAVD,OAUuB9i7B,KAAKijB,IAAI8/5B,GAVhC,YAWJE,GAGT,OAAOD,GAGT5k7B,EAAQ8k7B,MAAQ,SAASrhB,EAAMnwqB,EAAQ49mB,EAAS3w2B,GAK9C,OAJAkj6B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBnwqB,EAASzlH,EAAMqxwB,YAAY5rpB,GAC3B49mB,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B3w2B,EAAQstI,EAAMqxwB,YAAY3+4B,GACtBstI,EAAM2xwB,WAAWikB,EAAMnwqB,EAAQ49mB,EAAS3w2B,GACnCyS,EAAMzS,MAIRA,EAAQkj6B,GAAQnwqB,EAAS49mB,EAAU,IAI5Clx2B,EAAQ+k7B,UAAY,WAClB,MAAM,IAAIt46B,MAAM,iCAGlBzM,EAAQgl7B,KAAO,SAASh16B,EAAQi16B,EAAcC,GAI5C,GAHAl16B,EAAS69H,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQP,IAC9Ci16B,EAAep3yB,EAAMqxwB,YAAY+lC,GACjCC,EAAgBr3yB,EAAMqxwB,YAAYgmC,GAC9Br3yB,EAAM2xwB,WAAWxv4B,EAAQi16B,EAAcC,GACzC,OAAOly6B,EAAMzS,MASf,IALA,IAAI0K,EAAI+E,EAAOtJ,OAGXy+6B,EAAW,GACXC,EAAU,GACLv96B,EAAI,EAAGA,EAAIoD,EAAGpD,IACjBmI,EAAOnI,GAAK,EACds96B,EAASl06B,KAAKjB,EAAOnI,IAErBu96B,EAAQn06B,KAAKjB,EAAOnI,IAKxB,IAAIk2G,GAAO/9G,EAAQql7B,IAAIH,EAAeE,GAAWxj7B,KAAKy1O,IAAI,EAAI6tsB,EAAej66B,EAAI,GAC7Eki5B,EAAMnt5B,EAAQql7B,IAAIJ,EAAcE,IAAa,EAAIF,GACrD,OAAOrj7B,KAAKy1O,IAAIt5H,EAAMovyB,EAAK,GAAKli5B,EAAI,IAAM,GAG5CjL,EAAQsl7B,QAAU,SAAS7hB,EAAMvyD,GAG/B,OAFAuyD,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GACxBrjuB,EAAM2xwB,WAAWikB,EAAMvyD,GAClBl+1B,EAAMzS,MAIXkj6B,GAAQ,GAAKvyD,EAAU,EAClBl+1B,EAAM+qG,KAIfmzvB,EAAUzwzB,SAASywzB,EAAS,KAGpBtv2B,KAAKy1O,IAAIosrB,EAAO,EAAG,EAAIvyD,GAAW,GAAKA,IAGjDlx2B,EAAQul7B,KAAO,SAAS9hB,EAAMsf,EAASn1C,EAASx0pB,EAAQr0O,GAStD,GARAA,OAAiBpE,IAAToE,EAAsB,EAAIA,EAClCq0O,OAAqBz4O,IAAXy4O,EAAwB,EAAIA,EAEtCqqrB,EAAO51xB,EAAMqxwB,YAAYukB,GACzBsf,EAAUl1yB,EAAMqxwB,YAAY6jC,GAC5Bn1C,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMsf,EAASn1C,EAASx0pB,EAAQr0O,GACnD,OAAOiO,EAAMzS,MAIf,IAAIw9G,EAAMgl0B,GAAW,EAAItf,EAAO1+5B,GAAQq0O,EAASqqrB,EAC7CtW,EAAOvf,EAAU61B,EAAOsf,GAAW,EAAItf,EAAO1+5B,GAClD,OAAOnD,KAAKkuG,IAAIiO,EAAMovyB,GAAOvr5B,KAAKkuG,IAAI,EAAI2zzB,IAG5Czj6B,EAAQql7B,IAAM,WACZ,IAAIx15B,EAAOg+G,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQhI,YAChD,GAAIsnB,aAAgBpjB,MAClB,OAAOojB,EAUT,IANA,IAAI4z4B,EAAO5z4B,EAAK,GAGZtvB,EAAQ,EAGH87E,EAAI,EAAGA,EAAIxsD,EAAKnpB,OAAQ21E,IAC/B97E,GAASsvB,EAAKwsD,GAAKz6E,KAAKy1O,IAAI,EAAIosrB,EAAMpn1B,GAIxC,OAAO97E,GAITP,EAAQwl7B,UAAY,WAClB,MAAM,IAAI/46B,MAAM,iCAIlBzM,EAAQyl7B,UAAY,WAClB,MAAM,IAAIh56B,MAAM,iCAIlBzM,EAAQ0l7B,UAAY,WAClB,MAAM,IAAIj56B,MAAM,iCAIlBzM,EAAQ2l7B,UAAY,WAClB,MAAM,IAAIl56B,MAAM,iCAGlBzM,EAAQ4l7B,UAAY,SAASniB,EAAM71B,EAASx0pB,GAI1C,OAHAqqrB,EAAO51xB,EAAMqxwB,YAAYukB,GACzB71B,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GACvBvrG,EAAM2xwB,WAAWikB,EAAM71B,EAASx0pB,GAC3BpmO,EAAMzS,MAIXkj6B,GAAQ,EACHzw5B,EAAM+qG,KAIPn8G,KAAKkuG,IAAIspI,GAAUx3O,KAAKkuG,IAAI89xB,IAAYhs4B,KAAKkuG,IAAI,EAAI2zzB,IAG/Dzj6B,EAAQgj7B,IAAM,SAASvf,EAAMvyD,EAAS08B,EAASx0pB,EAAQr0O,GAWrD,GARAq0O,EAASA,GAAU,EACnBr0O,EAAOA,GAAQ,EAEf0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B08B,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS08B,EAASx0pB,EAAQr0O,GACnD,OAAOiO,EAAMzS,MAIf,IAAIkY,EACJ,GAAa,IAATgr5B,EACFhr5B,GAAUm13B,EAAUx0pB,GAAU83nB,MACzB,CACL,IAAI32C,EAAO34zB,KAAKy1O,IAAI,EAAIosrB,EAAMvyD,GAE5Bz41B,EADW,IAAT1T,GACQq0O,EAASqqrB,GAAQlpG,EAAO,GAAKqzE,EAAU61B,GAAQ,EAAI,EAAIlpG,KAAU,EAAIkpG,GAEtErqrB,EAASqqrB,GAAQlpG,EAAO,GAAKqzE,EAAU61B,GAAQ,EAAI,EAAIlpG,GAGpE,OAAQ9hzB,GAGVzY,EAAQ6l7B,KAAO,SAASpiB,EAAMnwqB,EAAQ49mB,EAAS08B,EAASx0pB,EAAQr0O,GAS9D,OARAq0O,EAASA,GAAU,EACnBr0O,EAAOA,GAAQ,EAEf0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B08B,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS08B,EAASx0pB,EAAQr0O,GAC5CiO,EAAMzS,MAGRP,EAAQgj7B,IAAIvf,EAAMvyD,EAAS08B,EAASx0pB,EAAQr0O,GAAQ/E,EAAQmk7B,KAAK1gB,EAAMnwqB,EAAQ49mB,EAAS08B,EAASx0pB,EAAQr0O,IAIlH/E,EAAQ8l7B,MAAQ,WACd,MAAM,IAAIr56B,MAAM,6BAIlBzM,EAAQ+l7B,UAAY,WAClB,MAAM,IAAIt56B,MAAM,iCAIlBzM,EAAQgm7B,SAAW,WACjB,MAAM,IAAIv56B,MAAM,gCAGlBzM,EAAQgjf,GAAK,SAASygb,EAAMvyD,EAAS6xE,EAAS3psB,EAAQr0O,GASpD,OARAq0O,EAASA,GAAU,EACnBr0O,EAAOA,GAAQ,EAEf0+5B,EAAO51xB,EAAMqxwB,YAAYukB,GACzBvyD,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B6xE,EAAUl1yB,EAAMqxwB,YAAY6jC,GAC5B3psB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACrB8oI,EAAM2xwB,WAAWikB,EAAMvyD,EAAS6xE,EAAS3psB,EAAQr0O,GAC5CiO,EAAMzS,MAIF,IAATkj6B,GACMsf,EAAU7xE,EAAU93nB,IAElB,EAAIx3O,KAAKy1O,IAAI,EAAIosrB,EAAMvyD,IAAYuyD,EAAQsf,GAAW,EAAItf,EAAO1+5B,GAAQq0O,GAAUx3O,KAAKy1O,IAAI,EAAIosrB,EAAMvyD,IAIpHlx2B,EAAQim7B,KAAO,SAAS/0E,EAAS6xE,EAASn1C,EAASx0pB,EAAQr0O,EAAMs/6B,GAa/D,GAVAA,OAAmB1j7B,IAAV0j7B,EAAuB,IAAOA,EACvCjrsB,OAAqBz4O,IAAXy4O,EAAwB,EAAIA,EACtCr0O,OAAiBpE,IAAToE,EAAsB,EAAIA,EAElCms2B,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B6xE,EAAUl1yB,EAAMqxwB,YAAY6jC,GAC5Bn1C,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GAC3Br0O,EAAO8oI,EAAMqxwB,YAAYn64B,GACzBs/6B,EAAQx2yB,EAAMqxwB,YAAYmlC,GACtBx2yB,EAAM2xwB,WAAWtuC,EAAS6xE,EAASn1C,EAASx0pB,EAAQr0O,EAAMs/6B,GAC5D,OAAOrx6B,EAAMzS,MAIf,IAMO0sf,EAAIjwO,EAAIgwO,EANXk5b,EAAS,MAMMnpqB,EAAK,EACtBxhM,EAAI,EACJ1zE,EAAI,EACF475B,EAAO4gB,EAWX,IAVIzi7B,KAAKijB,IAAI4+4B,GAAQyiB,IAGnB3q2B,EAAI35E,KAAKmkG,IAAImrwB,EAAUtv2B,KAAKkuG,IAAI,EAAI2zzB,KAGtCx2a,EAAK2gZ,EAAUm1C,EAAU7xE,EAAU93nB,EACnC4jC,EAAK4wnB,EAAUryzB,EAAIwn2B,GAAW,EAAItf,EAAO1+5B,IAASw2E,EAAI,GAAK69J,EAC3DvxO,EAAImlf,EAAK,EACTjwO,EAAK0mpB,EACG7h6B,KAAKijB,IAAIooe,EAAKjwO,GAAMkpqB,GAAYr+6B,EAjB1B,IAkBZ475B,GAAQzmpB,EAAKgwO,EAAKC,EAAKlwO,IAAOC,EAAKiwO,GACnCD,EAAKjwO,EACLA,EAAK0mpB,EAOLx2a,EAAKjwO,EACLA,EAPIp7Q,KAAKijB,IAAI4+4B,GAAQyiB,EACft4C,GAAW,EAAI18B,EAAUuyD,GAAQsf,GAAW,EAAItf,EAAO1+5B,GAAQms2B,EAAU93nB,EAGzEw0pB,GADJryzB,EAAI35E,KAAKmkG,IAAImrwB,EAAUtv2B,KAAKkuG,IAAI,EAAI2zzB,KAClBsf,GAAW,EAAItf,EAAO1+5B,IAASw2E,EAAI,GAAK69J,IAI1DvxO,EAEJ,OAAO475B,GAITzj6B,EAAQmm7B,SAAW,WACjB,MAAM,IAAI156B,MAAM,gCAGlBzM,EAAQom7B,IAAM,SAASl1E,EAAS08B,EAASx0pB,GAIvC,OAHA83nB,EAAUrjuB,EAAMqxwB,YAAYhuC,GAC5B08B,EAAU//vB,EAAMqxwB,YAAYtR,GAC5Bx0pB,EAASvrG,EAAMqxwB,YAAY9lqB,GACvBvrG,EAAM2xwB,WAAWtuC,EAAS08B,EAASx0pB,GAC9BpmO,EAAMzS,MAIC,IAAZ2w2B,GAA6B,IAAZ08B,EACZ563B,EAAM+qG,IAIRn8G,KAAKy1O,IAAI+B,EAASw0pB,EAAS,EAAI18B,GAAW,GAGnDlx2B,EAAQqm7B,IAAM,SAAShmnB,EAAMijnB,EAASC,GAIpC,OAHAljnB,EAAOxyL,EAAMqxwB,YAAY7+kB,GACzBijnB,EAAUz1yB,EAAMqxwB,YAAYokC,GAC5BC,EAAO11yB,EAAMqxwB,YAAYqkC,GACrB11yB,EAAM2xwB,WAAWn/kB,EAAMijnB,EAASC,GAC3Bvw6B,EAAMzS,MAIF,IAATgj7B,EACKvw6B,EAAM+qG,KAIPsiN,EAAOijnB,GAAWC,GAG5Bvj7B,EAAQsm7B,IAAM,SAASjmnB,EAAMijnB,EAASC,EAAMjwrB,GAM1C,OAJA+sE,EAAOxyL,EAAMqxwB,YAAY7+kB,GACzBijnB,EAAUz1yB,EAAMqxwB,YAAYokC,GAC5BC,EAAO11yB,EAAMqxwB,YAAYqkC,GACzBjwrB,EAASzlH,EAAMqxwB,YAAY5rpB,GACvBzlH,EAAM2xwB,WAAWn/kB,EAAMijnB,EAASC,EAAMjwrB,GACjCtgP,EAAMzS,MAIF,IAATgj7B,GAKAjwrB,EAAS,GAAKA,EAASiwrB,EAJlBvw6B,EAAM+qG,KAYNsiN,EAAOijnB,IAAYC,GAH5BjwrB,EAAS7yM,SAAS6yM,EAAQ,KAGkB,GAAK,GAAMiwrB,GAAQA,EAAO,KAGxEvj7B,EAAQum7B,QAAU,SAASpE,EAAYqE,EAAU19zB,GAI/C,OAHAq5zB,EAAat0yB,EAAMvuB,UAAU6i0B,GAC7BqE,EAAW34yB,EAAMvuB,UAAUkn0B,GAC3B19zB,EAAW+kB,EAAMqxwB,YAAYp2xB,GACzB+kB,EAAM2xwB,WAAW2iC,EAAYqE,EAAU19zB,GAClC91G,EAAMzS,MAIXuoH,GAAY,GAKZq5zB,EAAaqE,GAKbA,EAAWrE,EAAa,QATnBnv6B,EAAM+qG,IAcP,IAAM+K,GAAa,IAAMA,EAAW69J,EAAS2woB,QAAQ6qB,EAAYqE,GAAU,KAGrFxm7B,EAAQym7B,WAAa,SAAStE,EAAYqE,EAAU19zB,GAIlD,OAHAq5zB,EAAat0yB,EAAMvuB,UAAU6i0B,GAC7BqE,EAAW34yB,EAAMvuB,UAAUkn0B,GAC3B19zB,EAAW+kB,EAAMqxwB,YAAYp2xB,GACzB+kB,EAAM2xwB,WAAW2iC,EAAYqE,EAAU19zB,GAClC91G,EAAMzS,MAIXuoH,GAAY,GAKZq5zB,EAAaqE,GAKbA,EAAWrE,EAAa,QATnBnv6B,EAAM+qG,IAcR,KAAO,EAAI+K,EAAW69J,EAAS2woB,QAAQ6qB,EAAYqE,GAAU,GAAS,MAG/Exm7B,EAAQ0m7B,WAAa,SAASvE,EAAYqE,EAAUv1uB,GAIlD,OAHAkxuB,EAAat0yB,EAAMvuB,UAAU6i0B,GAC7BqE,EAAW34yB,EAAMvuB,UAAUkn0B,GAC3Bv1uB,EAAQpjE,EAAMqxwB,YAAYjusB,GACtBpjE,EAAM2xwB,WAAW2iC,EAAYqE,EAAUv1uB,GAClCj+L,EAAMzS,MAIX0wM,GAAS,GAKTkxuB,EAAaqE,GAKbA,EAAWrE,EAAa,QATnBnv6B,EAAM+qG,IAcQ,KAAf,IAAMkzF,IAAgBA,EAAQ01E,EAAS2woB,QAAQ6qB,EAAYqE,GAAU,KAI/Exm7B,EAAQ2m7B,IAAM,WACZ,MAAM,IAAIl66B,MAAM,2BA2ElBzM,EAAQ4m7B,KAAO,SAASnjB,EAAMzz5B,EAAQsrP,GAIpC,GAHAmoqB,EAAO51xB,EAAMqxwB,YAAYukB,GACzBzz5B,EAAS69H,EAAMsxwB,iBAAiBtxwB,EAAMt9H,QAAQP,IAC9CsrP,EAAQztH,EAAM0xwB,eAAe1xwB,EAAMt9H,QAAQ+qP,IACvCztH,EAAM2xwB,WAAWikB,EAAMzz5B,EAAQsrP,GACjC,OAAOtoP,EAAMzS,MAIf,IADA,IAAIkY,EAAS,EACJ5Q,EAAI,EAAGA,EAAImI,EAAOtJ,OAAQmB,IACjC4Q,GAAUzI,EAAOnI,GAAKjG,KAAKy1O,IAAI,EAAIosrB,EAAM98oB,EAAS0woB,KAAK/7pB,EAAMzzP,GAAIyzP,EAAM,IAAM,KAE/E,OAAO7iP,GAITzY,EAAQ6m7B,MAAQ,WACd,MAAM,IAAIp66B,MAAM,6BAIlBzM,EAAQ8m7B,UAAY,WAClB,MAAM,IAAIr66B,MAAM,iCAIlBzM,EAAQ+m7B,SAAW,WACjB,MAAM,IAAIt66B,MAAM,iCAMX,SAAS1M,EAAQC,EAASu+4B,GAEjC,IAAIvr4B,EAAQur4B,EAAoB,GAC5B1wwB,EAAQ0wwB,EAAoB,GAEhCv+4B,EAAQ0+W,MAAQ,SAASsokB,EAAaC,EAAaC,GACjD,IAAKF,IAAgBC,EACnB,OAAOj06B,EAAM6ikB,GAMf,GAHyB,IAArBttkB,UAAU7B,SACZwg7B,EAAY,KAERD,aAAuB3g7B,OAC3B,OAAO0M,EAAM6ikB,GAGf,IAAmB,IAAfqxW,GAAkC,IAAdA,GAAiC,IAAdA,EACzC,OAAOl06B,EAAM6ikB,GAIf,IAFA,IAAI70kB,EACAmm7B,EACKnu6B,EAAM,EAAGA,EAAMiu6B,EAAYvg7B,OAAQsS,IAC1C,GAAkB,IAAdku6B,EAAiB,CACnB,GAAID,EAAYju6B,KAASgu6B,EACvB,OAAOhu6B,EAAM,EACJiu6B,EAAYju6B,GAAOgu6B,IACvBG,EAGMF,EAAYju6B,GAAOmu6B,IAC5Bnm7B,EAAQgY,EAAM,EACdmu6B,EAAaF,EAAYju6B,KAJzBhY,EAAQgY,EAAM,EACdmu6B,EAAaF,EAAYju6B,UAMxB,GAAkB,IAAdku6B,GACT,GAA2B,kBAAhBF,GAET,GADAA,EAAcA,EAAYvp2B,QAAQ,MAAO,KACrCwp2B,EAAYju6B,GAAKilC,cAAc7K,MAAM4z4B,EAAY/o4B,eACnD,OAAOjlC,EAAM,OAGf,GAAIiu6B,EAAYju6B,KAASgu6B,EACvB,OAAOhu6B,EAAM,OAGZ,IAAmB,IAAfku6B,EAAkB,CAC3B,GAAID,EAAYju6B,KAASgu6B,EACvB,OAAOhu6B,EAAM,EACJiu6B,EAAYju6B,GAAOgu6B,IACvBG,EAGMF,EAAYju6B,GAAOmu6B,IAC5Bnm7B,EAAQgY,EAAM,EACdmu6B,EAAaF,EAAYju6B,KAJzBhY,EAAQgY,EAAM,EACdmu6B,EAAaF,EAAYju6B,KASjC,OAAOhY,GAAgBgS,EAAM6ikB,IAG/B71kB,EAAQon7B,QAAU,SAAUC,EAAQr/wB,EAAOhnK,EAAOsm7B,GAChD,IAAKD,IAAWr/wB,IAAUhnK,EACxB,OAAOgS,EAAM6ikB,GAGfyxW,EAAcA,IAAe,EAC7B,IAAK,IAAIz/6B,EAAI,EAAGA,EAAImgK,EAAMthK,OAAQmB,IAAK,CACrC,IAAIg5J,EAAMmH,EAAMngK,GAChB,IAAMy/6B,GAAezmxB,EAAI,KAAOwmxB,GAC5BxmxB,EAAI,KAAOwmxB,GACVC,GAAiC,kBAAXzmxB,EAAI,KAA2E,IAAxDA,EAAI,GAAG5iH,cAAc54B,QAAQgi6B,EAAOpp4B,eACpF,OAAQj9C,EAAS6/J,EAAIn6J,OAAS,EAAKm6J,EAAI7/J,EAAQ,GAAKgS,EAAM1S,IAI9D,OAAO0S,EAAM6ikB,IAGf71kB,EAAQun7B,QAAU,SAAUF,EAAQr/wB,EAAOhnK,EAAOsm7B,GAChD,IAAKD,IAAWr/wB,IAAUhnK,EACxB,OAAOgS,EAAM6ikB,GAGfyxW,EAAcA,IAAe,EAI7B,IAFA,IAAIE,EAAkB35yB,EAAM6+W,UAAU1kV,GAE7BngK,EAAI,EAAGA,EAAI2/6B,EAAgB9g7B,OAAQmB,IAAK,CAC/C,IAAIg5J,EAAM2mxB,EAAgB3/6B,GAC1B,IAAMy/6B,GAAezmxB,EAAI,KAAOwmxB,GAC5BxmxB,EAAI,KAAOwmxB,GACVC,GAAiC,kBAAXzmxB,EAAI,KAA2E,IAAxDA,EAAI,GAAG5iH,cAAc54B,QAAQgi6B,EAAOpp4B,eACpF,OAAQj9C,EAAS6/J,EAAIn6J,OAAS,EAAKm6J,EAAI7/J,EAAQ,GAAKgS,EAAM1S,IAI9D,OAAO0S,EAAM6ikB,KAMR,SAAS91kB,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,EAAOC,EAGhBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,KAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,GAAQC,EAGjBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,EAAOC,EAGhBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,KAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,GAAQC,EAGjBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAAIgn5B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bw6B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAK9G,GACZ,IAAK,IAAI2H,EAAOrnB,UAAU7B,OAAQyiB,EAAO7iB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAC9F3G,EAAK2G,EAAO,GAAKvnB,UAAUunB,GAG7B,IAAIrX,EAAS0Q,EAAK3Y,QAAO,SAAUutI,EAAKx9I,GACtC,OAAOw9I,GAAM,EAAIg4xB,EAAQjxzB,UAAUvkH,MAClC,EAAIw16B,EAAQjxzB,UAAU78F,IAEzB,GAAIg5B,MAAMxoC,GACR,MAAMhM,MAAMipa,EAAOuqe,aAGrB,OAAOxn4B,EAGTsW,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAAIgn5B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bw6B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAK9G,GACZ,IAAK,IAAI2H,EAAOrnB,UAAU7B,OAAQyiB,EAAO7iB,MAAMspB,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAC9F3G,EAAK2G,EAAO,GAAKvnB,UAAUunB,GAG7B,IAAIrX,EAAS0Q,EAAK3Y,QAAO,SAAUutI,EAAKx9I,GACtC,OAAOw9I,GAAM,EAAIg4xB,EAAQjxzB,UAAUvkH,MAClC,EAAIw16B,EAAQjxzB,UAAU78F,IAEzB,GAAIg5B,MAAMxoC,GACR,MAAMhM,MAAMipa,EAAOuqe,aAGrB,OAAOxn4B,EAGTsW,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAO,QAAc+uB,EACrB,IAAIgq5B,EAAS/46B,EAAQ+46B,OAAS,KAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,OAAOD,IAASC,EAGlBlq5B,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GAEjC,aAGAv+4B,EAAQuhN,YAAa,EACrBvhN,EAAQ+46B,YAASp46B,EACjBX,EAAO,QAAc+uB,EAErB,IAAIgn5B,EAAUx3B,EAAoB,GAE9B7oe,EAAS6oe,EAAoB,GAE7Bw6B,EAAS/46B,EAAQ+46B,OAAS,IAE9B,SAAShq5B,EAAKiq5B,EAAMC,GAClB,IAAIxg6B,EAAS7W,KAAKy1O,KAAI,EAAI0+rB,EAAQjxzB,UAAUk0zB,IAAO,EAAIjD,EAAQjxzB,UAAUm0zB,IAEzE,GAAIh43B,MAAMxoC,GACR,MAAMhM,MAAMipa,EAAOuqe,aAGrB,OAAOxn4B,EAGTsW,EAAKgq5B,OAASA,GAIP,SAASh56B,EAAQC,EAASu+4B,GA2EjC,IAAIkpC,EAAiB,WACrB,IAAIz86B,EAAE,SAAShG,EAAEC,EAAE+F,EAAEkiB,GAAG,IAAIliB,EAAEA,GAAG,GAAGkiB,EAAEloB,EAAE0B,OAAOwmB,IAAIliB,EAAEhG,EAAEkoB,IAAIjoB,GAAG,OAAO+F,GAAG086B,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,GAAG,IAC1iBx6jB,EAAS,CAACqnb,MAAO,aACrBv8jB,GAAI,GACJ2vsB,SAAU,CAAC,MAAQ,EAAE,YAAc,EAAE,WAAa,EAAE,IAAM,EAAE,iBAAmB,EAAE,OAAS,EAAE,OAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAW,GAAG,OAAS,GAAG,KAAO,GAAG,cAAgB,GAAG,cAAgB,GAAG,WAAa,GAAG,IAAI,GAAG,MAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,SAAW,GAAG,QAAU,GAAG,OAAS,GAAG,IAAI,GAAG,MAAQ,GAAG,QAAU,EAAE,KAAO,GAClYC,WAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,SAC1QC,aAAc,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IACxTC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUjwsB,EAAIkwsB,EAAyBC,EAAiBC,GAG1G,IAAIl8tB,EAAKi8tB,EAAGpj7B,OAAS,EACrB,OAAQmj7B,GACR,KAAK,EAEC,OAAOC,EAAGj8tB,EAAG,GAGnB,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG08rB,aAAayT,EAAGj8tB,GAAI,IAEtC,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG70H,SAASgl0B,EAAGj8tB,IAE9B,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAGs8rB,UAAU6T,EAAGj8tB,IAE/B,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,EAEChpN,KAAK+6J,EAAIkqxB,EAAGj8tB,EAAG,GAErB,MACA,KAAK,EAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,KAAM,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAEzD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,KAAM,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAEzD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,KAAM,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAEzD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,MAAO,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAE1D,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG48rB,mBAAmB,IAAK,CAACuT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,KAExD,MACA,KAAK,GAEC,IAAIwxnB,EAAK1lmB,EAAGumqB,aAAa4pC,EAAGj8tB,IAE5BhpN,KAAK+6J,EAAIy/qB,EAELp+xB,MAAMp8C,KAAK+6J,KACX/6J,KAAK+6J,EAAI,GAGnB,MACA,KAAK,GAEKy/qB,EAAK1lmB,EAAG70H,SAASgl0B,EAAGj8tB,IAExBhpN,KAAK+6J,EAAIy/qB,EAELp+xB,MAAMp8C,KAAK+6J,KACX/6J,KAAK+6J,EAAI,GAGnB,MACA,KAAK,GAEC/6J,KAAK+6J,EAAI+5E,EAAG68rB,aAAasT,EAAGj8tB,EAAG,IAErC,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAG68rB,aAAasT,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,EAAG,IAE/C,MACA,KAAK,GAAI,KAAK,GAAI,KAAK,GAEjBhpN,KAAK+6J,EAAI+5E,EAAG+8rB,UAAUoT,EAAGj8tB,IAE/B,MACA,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAEvEhpN,KAAK+6J,EAAI+5E,EAAG0onB,WAAWynF,EAAGj8tB,EAAG,GAAIi8tB,EAAGj8tB,IAE1C,MACA,KAAK,GAAI,KAAK,GAERhpN,KAAK+6J,EAAI,CAACkqxB,EAAGj8tB,IAEnB,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAGs8rB,UAAUyT,GAAQ9l4B,MAAM,KAE1C,MACA,KAAK,GAAI,KAAK,GAERkm4B,EAAGj8tB,EAAG,GAAG58M,KAAK646B,EAAGj8tB,IACjBhpN,KAAK+6J,EAAIkqxB,EAAGj8tB,EAAG,GAErB,MACA,KAAK,GAEChpN,KAAK+6J,EAAKt5J,MAAMC,QAAQuj7B,EAAGj8tB,EAAG,IAAMi8tB,EAAGj8tB,EAAG,GAAK,CAACi8tB,EAAGj8tB,EAAG,IACtDhpN,KAAK+6J,EAAE3uJ,KAAK646B,EAAGj8tB,IAErB,MACA,KAAK,GAEChpN,KAAK+6J,EAAIkqxB,EAAGj8tB,GAElB,MACA,KAAK,GAEChpN,KAAK+6J,EAAgC,GAA3BkqxB,EAAGj8tB,EAAG,GAAK,IAAMi8tB,EAAGj8tB,IAEpC,MACA,KAAK,GAEChpN,KAAK+6J,EAAe,IAAXkqxB,EAAGj8tB,EAAG,GAErB,MACA,KAAK,GAEChpN,KAAK+6J,EAAI+5E,EAAGu8rB,WAAW4T,EAAGj8tB,MAKhC7lD,MAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE0/wB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK996B,EAAE+96B,EAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM/96B,EAAE+96B,EAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM/96B,EAAE+96B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAErB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,GAAG,CAAC,EAAE,KAAKp96B,EAAE+96B,EAAI,CAAC,EAAE,KAAK/96B,EAAE+96B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,GAAGX,IAAMp96B,EAAEg+6B,EAAI,CAAC,EAAE,KAAKh+6B,EAAEi+6B,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAMj+6B,EAAE+96B,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM/96B,EAAE+96B,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM/96B,EAAE+96B,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM/96B,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE086B,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEV,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG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,MAA4B,SAArBphZ,KAAKgnC,MAAMo6W,IACdphZ,KAAKgnC,MAAMmyP,SAASioH,KAAU1pY,GACR,qBAAds96B,GAA2C,SAAdA,EAEnCt96B,EADA,QAGVy86B,EAAUh27B,UAAUs37B,4BAA8B,SAAUn52B,EAAUw6L,GAClE,IAII4+qB,EACAC,EALAC,EAAoB517B,KAAKkqC,MAAM0r5B,kBAC/Bl82B,EAAY15E,KAAKgnC,MAAM0yC,UACvBm82B,EAAmBD,GAAqBnC,GAAa,OAAQ/52B,GAC7Do82B,EAAoBF,GAAqBnC,GAAa,MAAO/52B,GAGjE,GAA0B,WAAtB15E,KAAKkqC,MAAM8lb,OAAqB,CAChC,IAAI+le,EAAW/17B,KAAK8ta,WAChBiohB,IACAL,EAAaG,EACP717B,KAAKw07B,eAAiBx07B,KAAKq07B,WAC3B0B,EAASlsmB,aAAe7pV,KAAKq07B,WAAar07B,KAAKu07B,eACrDoB,EAAcG,EACR917B,KAAK007B,gBAAkB107B,KAAKs07B,UAC5ByB,EAASjsmB,cAAgB9pV,KAAKs07B,UAAYt07B,KAAKy07B,mBAG9B,WAAtBz07B,KAAKkqC,MAAM8lb,OACZhwd,KAAK0uB,SACLgn6B,EAAaG,EAAmB717B,KAAKw07B,eAAiBx07B,KAAK0uB,OAAOyvc,WAAan+d,KAAKu07B,cACpFoB,EAAcG,EAAoB917B,KAAK007B,gBAAkB107B,KAAK0uB,OAAO86T,YAAcxpV,KAAKy07B,cAGvFz07B,KAAKkqC,MAAM8lb,SAChB0le,EAAaG,EACP717B,KAAKw07B,eAAiBx07B,KAAK207B,WAC3B307B,KAAKkqC,MAAM8lb,OAAOnmI,aAAe7pV,KAAK207B,WAAa307B,KAAKu07B,eAC9DoB,EAAcG,EACR917B,KAAK007B,gBAAkB107B,KAAK407B,UAC5B507B,KAAKkqC,MAAM8lb,OAAOlmI,cAAgB9pV,KAAK407B,UAAY507B,KAAKy07B,eAQlE,OANIiB,GAAc/z7B,OAAOy/F,SAASs01B,KAC9Bp52B,EAAWA,GAAYA,EAAWo52B,EAAap52B,EAAWo52B,GAE1DC,GAAeh07B,OA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G,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa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AIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAIA,EAAa,EAA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EhL,EAAWykmC,GAAQl2tC,EAAMyxH,UAEzBmjP,EAAoB,CACxBl3O,YAAa,aAAiB19H,EAAM+pB,QACpCgqD,GAAI,kBAAF,OAAoB/zE,EAAMuL,MACK,iCACA,iBACA,kBAGA,yBACA,IACA,sCAIA,kBA1BsB,kCAmCtB,YACA,EACA,GAGA,GADA,MACA,KACA,MAgGA,SACA,EACA,GAEA,gDACA,qBAGA,sBACA,gEAEA,gBACA,SAGA,iBACA,iBAEA,sBACA,cACA,OACA,8CACA,eAGA,gFACA,gDAEA,qCACA,SACA,iBACA,iBACA,+BACA,4BACA,gDACA,kBACA,0BACA,oBACA,gCACA,8BACA,wBAEA,sBACA,cACA,0CAKA,EA8YA,SACA,EACA,EACA,GAEA,SACA,SAEA,MAEA,OADA,2CACA,iBACA,qBACA,YACA,8BACA,sCAEA,QACA,cAEA,8BAEA,0BACA,UACA,wCACA,mBAEA,EAEA,SAEA,OADA,yFACA,EAEA,UACA,SACA,UACA,SAEA,WAnbA,QAEA,KAIA,oBACA,QF7SpC,SAA4Bqq4B,EAAeksE,GAChD,IAAM7zpB,EAA2B,CAC/B835B,SAAS,IAAIj7rC,MAAO+9B,eAGlBi55B,IACF7zpB,EAAQ6zpB,IAAM,aAAYA,IAG5B,IAAM/9sB,EAAQ6xoB,EAAM7v4B,IAAIgwtC,IACxB,OAAO,aAA6B9n6B,EAASlqD,GEmSJ,wBACA,sBACA,MACA,iCACA,qEA5JA,MAEA,kBACA,KAIA,oBA2DA,QACA,cACA,oBACA,kBACA,kBACA,gBACA,mBACA,iBACA,kBACA,iBACA,mBACA,mBACA,oBACA,mBACA,qBACA,qBACA,iBACA,eACA,YACA,iBACA,iBACA,gBACA,YACA,gBACA,cACA,iBACA,eAyEA,eACA,WACA,wCAKA,0EACA,cAEA,iBAEA,4CAmDA,GAhDA,iCACA,sBACA,iBAGA,oBAAA2lf,EAAA,IAAAote,GAAA,IAAAA,GAIA,oBACA,kBAqHA,gBACA,8FACA,eAEA,oDACA,8CACA,+BA8BA,gBACA,gBAKA,MACA,aACA,sCACA,sBACA,oBAAA92tC,EAAA,cACA,mCAGA,MACA,aACA,sCACA,uBACA,oBAAAA,EAAA,eACA,oCAhDA,QA3HA,QACA,MAEA,WACA,YACA,eAuFA,SACA,EAEA,EACA,EACA,EACA,GAEA,UACA,MAEA,MACA,mBACA,eACA,eACA,uCACA,mBAtGA,YAGA,qBAEA,gCAEA,4BACA,0CACA,8CAEA,uCACA,2CACA,+CAEA,MAEA,gBAkKA,SACA,EACA,EACA,EACA,EACA,EACA,GAIA,iEACA,OAGA,sBAGA,KACA,qDACA,yDACA,iEAEA,6BACA,6DAEA,aACA,6CAGA,SACA,4BAGA,sDAEA,UACA,MAEA,MACA,+CACA,eACA,wEACA,uCACA,iBACA,SA7MA,uBAQA,0BA4MA,YACA,qBACA,MACA,OAIA,mBACA,IACA,iBAGA,oDAGA,QAGA,0BAAAyolB,EAAA,MAGA,YACA,wDAIA,oBAGA,yDAGA,2BAGA,8DA7OA,IAGA,iBAySA,SAAA0ooB,GACA,qBACA,MACA,OAGA,uCAEA,OACA,yDACA,uBACA,UACA,qBApTA,KAEA,wCACA,sBAMA,YAAA14tC,MACA,UAGA,sBACA,MAEA,6GACA,kBAGA,qBACA,YAEA,MACA,gCACA,sCACA,eACA,iCACA,gCAIA,gBAKA,mBACA,OAGA,sCCnapC,SAAwB8S,EAAc9S,EAAek2N,GAE1D,IAAM+6hB,EAAc6qe,IAChB7qe,GAEFA,EAAYqte,eAAexrtC,EAAM9S,EAAOk2N,GD+ZD,8BAoMA,YACA,KACA,gDAIA,YAGA,iDAGA,OAGA,yBAGA,QAIA,+CAKA,8BAIA,iBACA,gDACA,yCAGA,6DArOA,IAGA,UACA,UACA,OAuCA,YACA,EAEA,EACA,EACA,EACA,EACA,GAEA,mCACA,0BACA,MAGA,MACA,aACA,sCACA,iBACA,uBACA,uBA2KA,YACA,EACA,EACA,EACA,GAEA,WACA,WA5nBlB,aA6nBkB,Q,wDEjjB5B,YACA,EACA,EACA,EACA,EAOA,GAGA,MAAAqogC,GAAA,YAEA,gBAEA,6BACA,2BACA,2BAFA,2CAKA,sCAEA,eACA,IACA,sCAGA,EACA,YACA,uEAEA,KAEA,0DACA,qBAUA,OARA,EAAAxqkC,OAAA,kBAEA,GAGA,iBAGA,EACA,qBACA,sDAQA,OANA,GAGA,iBAGA,EAEA,qCACA,KAYA,OAVA,iBACA,gCACAyqkC,GACA,UAGA,GACA,UAGA,2BACA,GADA,IAEA,iBACA,QAAAC,EAAA,SAAAA,EAAA,mBAxCA,mCA6CA,eACA,IAEA,OADA,WACA,KACA,SACA,QAIA,iBACA,eACA,uBAEA,MACA,yEAEA,MACA,kBACA,KACA,uDAGA,SACA,8BAEA,Q,ICzLFC,GAAoC,CAAC,YAAa,aAoDlDC,GAAsE,CACjFC,YAAY,EACZC,UAAU,EACVC,mBAAmB,EAEnBC,eAAgBL,GAChBM,wBAAyBN,IAIpB,SAASO,GAA2B3xmC,GACzC,mBAUEsxmC,WAAYD,GAAqCC,WACjDC,SAAUF,GAAqCE,UAC5CvxmC,GAXHsxmC,EADF,EACEA,WACAC,EAFF,EAEEA,SAEAG,EAJF,EAIEA,wBAEAD,EANF,EAMEA,eACAG,EAPF,EAOEA,2BACAJ,EARF,EAQEA,kBAOIK,EACkC,oBAA/BD,EAA4CA,EAA6B,SAAC78sC,GAAD,OAAe,GAK3F+8sC,EAAiC,SAACt5nC,GAAD,OAwIlC,SAA6BA,EAAak5nC,GAC/C,OAAO,OAAAn0tC,GAAA,GAAyBi7F,EAAKk5nC,GAA2BN,IAxI9D,CAAoB54nC,EAAKk5nC,GAA2BD,IAEhD5hV,EAA8B,GAEhCyhV,GACF,cAA+B,SAAAnpC,GAC7B,IAAM4pC,EDrFL,SACL5pC,EACA0pC,EACAG,EACAniV,GAEkB,IADlBoiV,EACkB,uDADO,oBAEzB,GAAKpJ,KAAwB1gC,EAAYt9wB,UAAzC,CAIA,IAAMqnzB,EAAyBL,EAAiB1pC,EAAYt9wB,UAAUryU,KAEtE,IAAI2vlC,EAAYC,eAAgB8pC,EAAhC,CAaA,IAAMli4B,EAAQ,cACR5rJ,EAAS,cAEf,EAAwB+j/B,EAAYt9wB,UAA5BxsU,EAAR,EAAQA,OAAQ7F,EAAhB,EAAgBA,IAEV25nC,EAAUC,GAAW55nC,GACrBk9Z,EAAOy8tB,EAAU,aAASA,GAASz8tB,UAAO5igB,EAE1C+7W,EAAOqj3B,EACTlJ,EAAkB,CAChBxjtC,KAAM,GAAF,OAAG,EAAH,YAAG,GACA,gBACA,wBACA,MACA,aACA,gBACA,aACA,oBACA,OAEA,wBAEA,EAOA,GALA,IACA,0CACA,EAAAqpW,EAAAC,cAAA,QAAAD,GAGA,uBACA,gBAGA,wBAGA,gBAGA,wBAGA,SAtDX,IAAMG,EAASm50B,EAAYt9wB,UAAUwnzB,OACrC,IAAKrj3B,EAAQ,OAEb,IAAM,EAAO6giB,EAAM7giB,GACf,IACFsj3B,GAAQ,EAAMnqC,UAEPt4S,EAAM7giB,KCgEOuj3B,CAAuBpqC,EAAa0pC,EAAkBC,EAAgCjiV,GAI1G,GAAIkiV,EAAa,CACf,IAAMI,EAAU,GAAWhqC,EAAYt9wB,UAAUryU,KAC3Ck9Z,EAAOy8tB,EAAU,aAASA,GAASz8tB,UAAO5igB,EAChDi/tC,EAAY3hqB,cAAc,CACxB,WAAY+hqB,EACZ,iBAAkBz8tB,IAIlB87tB,GAAqBO,GACvBS,GAAeT,MAKjBR,GACF,cAA6B,SAAAppC,GAC3B,IAAM4pC,EAsHL,SACL5pC,EACA0pC,EACAG,EACAniV,GAEA,IAAMrksB,EAAM28+B,EAAY38+B,IAClBg9+B,EAAgBh9+B,GAAOA,EAAI,MAEjC,IAAKq9gC,MAAwBr9gC,GAAOA,EAAIu8+B,yBAA2BS,EACjE,OAGF,IAAM0pC,EAAyBL,EAAiBrpC,EAAchwlC,KAG9D,GAAI2vlC,EAAYC,cAAgB8pC,EAAwB,CACtD,IAAMlj3B,EAASxjK,EAAIinhC,uBACnB,IAAKzj3B,EAAQ,OAEb,IAAM,EAAO6giB,EAAM7giB,GAQnB,YAPI,QAAsCl8W,IAA9B01rC,EAAcN,cACxB,EAAc,EAAMM,EAAcN,aAClC,EAAK10rC,aAGEq84B,EAAM7giB,KAKjB,IAAMhf,EAAQ,cACRC,EAAiB,cAEjBki4B,EAAU,GAAW3pC,EAAchwlC,KACnCk9Z,EAAOy8tB,EAAU,aAASA,GAASz8tB,UAAO5igB,EAE1C+7W,EAAOqj3B,EACTlJ,EAAkB,CAChBxjtC,KAAM,GAAF,OAAG,SAAH,YAAG,OACA,gBACA,wBACA,WACA,uBACA,aACA,IAAAgjrC,EAAA,IACA,oBACA,yBAEA,wBAEA,EAEA,IACA,gDACA,+BAGA,oBAEA,oCACA,iCACA,2BACA,EAAAmhC,yBAFA,4CAkBA,SACA,EACA,EACA,GAEA,IAEA,qCACA,GAKA,2BAEA,WArBA,GAPA,oCAEA,aACA,IACA,uCAMA,SAlMW+I,CAAYvqC,EAAa0pC,EAAkBC,EAAgCjiV,GAC3F2hV,GAAqBO,GACvBS,GAAeT,MAqBvB,SAASS,GAAe3j3B,GACtB,IAAQr2Q,GAAQ,YAAWq2Q,GAAM78T,MAAQ,IAAjCwmD,IAER,GAAKA,GAAsB,kBAARA,EAInB,IAAMwgN,EAAU,aAAqC,YAAY,YAAiB,EAAdr4S,QAC1D+C,SAAQ,SAAAzJ,IAvBpB,SAAqCA,GACnC,MACsB,aAApBA,EAAMswlB,WACN,kBAAmBtwlB,GAC6C,kBAAxDA,EAAoC04tC,kBACnB,UAAxB14tC,EAAM24tC,eAAqD,mBAAxB34tC,EAAM24tC,gBAmBpCC,CAA4B54tC,IAAUA,EAAMuL,KAAKyrL,SAASz4F,KA8CpE,SAAuCs6nC,GACrC,MA9BK,SAAgCH,GACrC,IADiG,EAC7FnttC,EAAO,UACPkb,EAAU,UACV7B,EAAQ,GAHqF,cAI9E8zsC,GAJ8E,IAIjG,2BAAoC,KAAzBnka,EAAyB,QAElC,GAAa,MAATA,EAAc,OACEmka,EAAgB58qC,MAAM,KADxB,mBACfvwC,EADe,KACTkb,EADS,KAEhB,MAGF,IAAK0yB,MAAMz6C,OAAO61zB,IAAQ,CACxBhpzB,EAAiB,MAAVqZ,EAAgB,OAASA,EAChC6B,EAAUiysC,EAAgB58qC,MAAMl3B,GAAO,GACvC,MAEFA,GAAS2vyB,GAhBsF,8BAkB7F3vyB,IAAU8zsC,IAEZnttC,EAAOqZ,GAET,MAAO,CAAErZ,OAAMkb,WAQWqysC,CAAuBD,EAAeH,iBAAxDnttC,EAAR,EAAQA,KAAMkb,EAAd,EAAcA,QAERsysC,EAA8C,GAIpD,GAFAA,EAAe5vtC,KAAK,CAAC,2BAA4Bsd,GAAU,CAAC,wBAAyBlb,KAEhF,IACH,OAAOwttC,EAET,gBACKA,EADL,CAEE,CAAC,8BAA+BC,GAAgBH,EAAeI,gBAC/D,CAAC,2BAA4BD,GAAgBH,EAAeK,aAC5D,CAAC,mCAAoCF,GAAgBH,EAAeM,oBACpE,CAAC,iCAAkCH,GAAgBH,EAAeO,kBAClE,CAAC,6BAA8BJ,GAAgBH,EAAeQ,eAC9D,CAAC,uCAAwCL,GAAgBH,EAAeS,wBACxE,CAAC,8BAA+BN,GAAgBH,EAAeU,aAC/D,CAAC,6BAA8BP,GAAgBH,EAAeW,eAC9D,CAAC,8BAA+BR,GAAgBH,EAAe/noB,gBAC/D,CAAC,4BAA6BkooB,GAAgBH,EAAeY,gBAlExCC,CAA8B15tC,GACtCyJ,SAAQ,SAAAsuC,GAAK,OAAG68T,EAAK17D,aAAL,MAAA07D,EAAI,aAAiB78T,OAG9CnC,WAAWmpQ,UAqCnB,SAASi66B,KAA0C,IAA1BhwqC,EAA0B,uDAAX,EACtC,QAAS,KAAgCymiB,YAAYktC,YAAc3zkB,GAAQ,IA8I9D,eACA,IAIA,OADA,gCACA,KACA,SACA,QClUR,IAAM2wqC,GAAiC,iBAiHxCC,GAA+B,2BAChC1G,GADgC,IAEnC2G,sBAAsB,EACtBC,oBAAoB,EACpBC,oBAAoB,EACpBC,gBAAgB,EAChBC,WAAW,EACXC,uBAAwB,EACxBzE,aAAc,IACX2B,IAYQ,GAA6B,WAAmD,IAAlDrxmC,EAAkD,uDAAP,GAC9Eo0mC,IAAiC,SAGhCp0mC,EAAS0xmC,0BAA2B1xmC,EAASyxmC,gBAIpD3B,MAMK9vmC,EAAS0xmC,yBAA2B1xmC,EAASyxmC,iBAEhDzxmC,EAAS0xmC,wBAA0B1xmC,EAASyxmC,gBAG9C,IAAMzurC,EAAU,OAAV,IAAU,CAAV,eACD6wrC,IACA7zmC,GAGCq0mC,EAAoB7D,KAGpB8D,EAA+D,GACjEtxrC,EAAQkxrC,WACVK,GAAiBD,EAAiCtxrC,EAAQmxrC,wBAGxDnxrC,EAAQixrC,gBACVpD,KAEE7trC,EAAQ0srC,aAAa8E,oBACvB1D,KAGF,IAAM2D,EAGF,CACFjvtC,UAAM1S,EACNoN,aAASpN,GAIX,SAAS4huC,EAAwBx0tC,GAE/B,IAMIy0tC,EANEhh4B,EAAM,cAEJih4B,EAAkE5xrC,EAAlE4xrC,gBAAiBxH,EAAiDpqrC,EAAjDoqrC,YAAaC,EAAoCrqrC,EAApCqqrC,aAAcC,EAAsBtqrC,EAAtBsqrC,kBAE9CuH,EAAuC,aAAf30tC,EAAQ8tE,GAGtC,GAAI6mpC,EAAuB,CACzB,IAAMtqD,EAAcsqD,EAAwBC,GAAe,gBAAkB,GACvEtqD,EAAUqqD,EAAwBC,GAAe,gBAAahiuC,EACpE,EAAgD,YAA8By3qC,EAAaC,GAAnFt7zB,EAAR,EAAQA,QAASi3S,EAAjB,EAAiBA,IAAKkkhB,EAAtB,EAAsBA,aAAc/6zB,EAApC,EAAoCA,QACpCql3B,EAAA,yBACEzl3B,UACAm7zB,eACAD,cAAe96zB,GACZpvW,GAJL,IAKEglf,SAAU,2BAELhlf,EAAQglf,UAFL,IAGNqjT,uBAAwBpiJ,IAE1Btxd,SAAS,SAGX8/hC,EAAA,aACE9/hC,SAAS,GACN30L,GAIP,IAAM60tC,EAAeH,EAAkBA,EAAgBD,GAAmBA,EAI1EI,EAAa7vuB,SACX6vuB,EAAavvtC,OAASmvtC,EAAgBnvtC,KAAtC,2BAESuvtC,EAAa7vuB,UAFtB,IAEgCjhe,OAAQ,WAEpC8wsC,EAAa7vuB,SAEnBuvuB,EAAYjvtC,KAAOuvtC,EAAavvtC,KAChCivtC,EAAYv0tC,QAAU60tC,GAEO,IAAzBA,EAAazl3B,SACf,MAAet3N,EAAA,EAAO/1C,IAAP,kCAAsC8ynC,EAAa/mpC,GAAnD,4CAGjB,MAAegqE,EAAA,EAAO/1C,IAAP,6BAAiC8ynC,EAAa/mpC,GAA9C,0BAEf,IAEMgnpC,EAAkBpF,GACtBj83B,EACAoh4B,EACA3H,EACAC,GACA,EACA,CAAE5sqC,SARiB,KAAbA,UASN6sqC,EACAuH,GAoBF,OAjBIA,GAAyB,KAAO73rC,WAClC,KAAOA,SAASgjE,iBAAiB,oBAAoB,WAC/C,CAAC,cAAe,YAAYz/F,SAAS,KAAOy8B,SAAU0uK,aACxDsphC,EAAgBC,0BAIhB,CAAC,cAAe,YAAY10tC,SAAS,KAAOy8B,SAAS0uK,aACvDsphC,EAAgBC,wBAIpBD,EAAgBE,8BAA6B,SAAAvxe,GAC3C0we,IACAc,GAAsBxxe,MAGjBqxe,EAGT,MAAO,CACLxvtC,KAAMoutC,GAENzW,UAAW,aACXhinB,cAJK,SAIS/2Z,GACZ,IAwBIgxhC,EAxBE9X,EAAgBl5gC,EAAOotJ,aAErBwi4B,EACNhxrC,EADMgxrC,mBAAoB1C,EAC1BturC,EAD0BsurC,WAAYC,EACtCvurC,EADsCuurC,SAAUK,EAChD5urC,EADgD4urC,2BAA4BJ,EAC5ExurC,EAD4EwurC,kBAAmB9B,EAC/F1srC,EAD+F0srC,aAG3F2F,EAAuC/X,GAAiBA,EAAcoU,wBAYtEA,EAA0B2D,GAAwCryrC,EAAQ0urC,wBAC5E,MAAe0C,GAAkCiB,GACnDr9kC,EAAA,EAAO/4H,KACL,0KAKJ,IAAIq2sC,EAAkC,KAAO70qC,UAAY,KAAOA,SAAS2jE,KA4BqC,GA1B1GggF,EAAOz0J,KACTy0J,EAAOz0J,GAAG,uBAAuB,SAACzvC,GAC5Bk1tC,IACF,MAAep9kC,EAAA,EAAO/1C,IAAP,2DAA+D,YAAWmznC,GAAYpnpC,KAEG,SAEA,iBACA,iBACA,OAIA,sCACA,IACA,6FAEA,SAEA,iBACA,eACA,QAKA,6CACA,OACA,4BAEA,kCACA,+BACA,0BACA,YAGA,QAGA,+CACA,8CAUA,oCACA,cAIA,UACA,SACA,OACA,4BACA,iCACA,0BACA,YAIA,YAKA,GACA,KAGA,sBACA,QAGA,aACA,QAGA,IACA,aACA,WACA,0BACA,6BACA,uBAKA,YAQA,iBACA,WAIA,8BAEA,UAEA,oBADA,sBACA,UAOA,iBACA,WAIA,gCAEA,UAEA,sBADA,sBACA,UAIA,eAIA,+CAEA,0CAIA,YACA,EACA,GAKA,MACA,aACA,2DACA,oBAGA,MACA,qDACA,MACA,4CACA,EADA,mFAYA,GANA,IACA,4CACA,QACA,UAGA,QAKA,oBAEA,GACA,YACA,KACA,WACA,oBACA,oCAIA,KAEA,cACA,EACA,EACA,GACA,EACA,aACA,QAvBA,2GA2BA,+BACA,eACA,8CAaA,YACA,EACA,GAKA,kCACA,gBAGA,OACA,uCACA,sCACA,EACA,oCAEA,MACA,gBACA,gCACA,uBACA,GA7BA,YACA,qBA4BA,KACA,sBACA,cACA,OAEA,WACA,aACA,cACA,iBACA,EACA,WACA,wBACA,mCACA,EACA,UAEA,EAGA,+BAMA,GALA,EACA,gCACA,kBACA,0CAGA,OAIA,MACA,OAGA,KACA,uCACA,GACA,SA7DA,SA8DA,OACA,gBACA,CAEA,aACA,YACA,OACA,0BArEA,WAuEA,KAEA,MACA,YACA,WACA,gBACA,OACA,oBACA,WACA,oBAOA,wBACA,8BAGA,eACA,sCAEA,sBAEA,gCAEA,iB,mKCrmB7G,SAASunpC,EAAeznpC,GAI7B,IAHA,IAAI0npC,OAAyB1iuC,EACzBJ,EAAQo7E,EAAI,GACZ9zE,EAAI,EACDA,EAAI8zE,EAAIj1E,QAAQ,CACrB,IAAMm1E,EAAKF,EAAI9zE,GACTH,EAAKi0E,EAAI9zE,EAAI,GAGnB,GAFAA,GAAK,GAEO,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAExD,OAES,WAAPs7E,GAA0B,mBAAPA,GACrBwnpC,EAAgB9iuC,EAChBA,EAAQmH,EAAGnH,IACK,SAAPs7E,GAAwB,iBAAPA,IAC1Bt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAyB,EAAAtvB,GAA0BsF,KAA3B,SAAgCw9tC,GAAhC,OAAkDxzsC,OACrFwzsC,OAAgB1iuC,GAGpB,OAAOJ,E,aChDF,SAAS+iuC,EAAmBj9nC,EAAak9nC,GAC9C,IAAMtxhC,EACJsxhC,GA2BJ,SAAeA,GAEb,YAA0C5iuC,IAAlC4iuC,EAAoBz26B,UA7BX026B,CAAMD,GAEjBA,EAAYz26B,YACZy26B,EACA35Q,EAAM33wB,GAAUA,EAAO2hd,SACvBg6jB,EAAS37gC,GAAUA,EAAOotJ,aAAauu3B,OAE7C,OAWF,SAAkBvnnC,EAAauj3B,GAC7B,QAAOA,GAAMvj3B,EAAIj4F,SAASw78B,EAAIrmd,MAZvBkguB,CAASp9nC,EAAKuj3B,IAGvB,SAAqBvj3B,EAAaunnC,GAChC,IAAKA,EACH,OAAO,EAGT,OAAO8V,EAAoBr9nC,KAASq9nC,EAAoB9V,GAR3B+V,CAAYt9nC,EAAKunnC,GAehD,SAAS8V,EAAoBr2sC,GAC3B,MAA+B,MAAxBA,EAAIA,EAAI3mB,OAAS,GAAa2mB,EAAI1Y,MAAM,GAAI,GAAK0Y,E,iMC5BnD,SAAS20Z,IAEd,MAAyB,qBAAXzuZ,UAA4B,oBASR5yB,IAA/B,IAAmBoyB,SAAmF,aAAxD,IAAmBA,QAA4BhuB,M,ICsC4gB6+tC,E,SA9CxmB9t5B,EAASkL,IAET6i5B,EAAqB,sBACrBC,EAAoB,eACpBC,EAAwB,wBAiBxBC,EAAsB,IAItBC,EAAwB,KAGxBC,EAAuB,IAQvBC,EAA+B,IAQ/BC,EAAsB,KAEyE,SAASC,EAAiB1opC,GAAqE,IAA9D,IAAI0npC,OAAgB1iuC,EAAeJ,EAAQo7E,EAAI,GAAQ9zE,EAAI,EAAUA,EAAI8zE,EAAIj1E,QAAQ,CAAE,IAAMm1E,EAAKF,EAAI9zE,GAAUH,EAAKi0E,EAAI9zE,EAAI,GAAY,GAARA,GAAK,GAAe,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAAiB,OAA+B,WAAPs7E,GAA0B,mBAAPA,GAA2BwnpC,EAAgB9iuC,EAAOA,EAAQmH,EAAGnH,IAA0B,SAAPs7E,GAAwB,iBAAPA,IAAyBt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAa,EAAAtvB,GAAMsF,KAAN,SAAWw9tC,GAAX,OAA6BxzsC,OAAQwzsC,OAAgB1iuC,GAAe,OAAOJ,EAalmB,SAASu8rC,EAAa7xrC,GAClB,IAAMs4f,EAAO8guB,EAAiB,CAACp5tC,EAAG,iBAAkB,SAAA2X,GAAC,OAAIA,EAAE2gf,QAC3D,OAAOrhgB,QAAQmiuC,EAAiB,CAAC9guB,EAAM,iBAAkB,SAAA2sF,GAAE,OAAIA,EAAG6smB,gBAAiB9xrC,GAEvF,SAAS+xrC,EAAkBD,GACvB,MAAsD,wBAA/C95rC,OAAOD,UAAU8C,SAASD,KAAKk3rC,GA4B1C,SAASE,GAAoB5qrC,GACzB,IACI,IAAMm8I,EAAQn8I,EAAEm8I,OAASn8I,EAAEgha,SAC3B,OAAO7kR,IA7B6B+hyB,EA8BKjq7B,MAAMuN,KAAK26I,EAAO0uiC,IAAe52qC,KAAK,KA7BvElY,SAAS,6BAChBmi7B,EAAQni7B,SAAS,qCAClBmi7B,EAAUA,EAAQ9y2B,QAAQ,0BAA2B,2DAElD8y2B,GA0BG,KAEV,MAAOv96B,GACH,OAAO,KAlCf,IAA4Cu96B,EAqC5C,SAAS2sQ,GAActuiC,GACnB,IAAIuuiC,EACJ,GAkBJ,SAAyBvuiC,GACrB,MAAO,eAAgBA,EAnBnBwuiC,CAAgBxuiC,GAChB,IACIuuiC,EACIF,GAAoBruiC,EAAKgzY,aAnCzC,SAA+BhzY,GAC3B,IAAQ2hyB,EAAY3hyB,EAAZ2hyB,QACR,GAAIA,EAAQ3s4B,MAAM,KAAKl9C,OAAS,EAC5B,OAAO6p7B,EACX,IAAM8sQ,EAAY,CAAC,UAAD,cAAmB7prC,KAAKC,UAAUm7I,EAAK38B,MAAvC,MAalB,MAZuB,KAAnB28B,EAAK0uiC,UACLD,EAAUpsrC,KAAV,SAEK29I,EAAK0uiC,WACVD,EAAUpsrC,KAAV,gBAAwB29I,EAAK0uiC,UAA7B,MAEA1uiC,EAAK2uiC,cACLF,EAAUpsrC,KAAV,mBAA2B29I,EAAK2uiC,aAAhC,MAEA3uiC,EAAK9zB,MAAMp0H,QACX22rC,EAAUpsrC,KAAK29I,EAAK9zB,MAAM0ikC,WAEvBH,EAAU/2qC,KAAK,KAAO,IAmBbm3qC,CAAsB7uiC,GAElC,MAAO57I,SAGN,GAYT,SAAwB47I,GACpB,MAAO,iBAAkBA,EAbhB8uiC,CAAe9uiC,IAASA,EAAKw/Q,aAAahga,SAAS,KACxD,OAIR,SAAyBuvrC,GACrB,IAAM1g9B,EAAQ,uCACd,OAAO0g9B,EAAelgnC,QAAQw/J,EAAO,UAN1B2g9B,CAAgBhviC,EAAK2hyB,SAEhC,OAAO4sQ,GAAqBvuiC,EAAK2hyB,SAtErC,SAAW1uR,GACPA,EAASA,EAAQ,SAAe,GAAK,WACrCA,EAASA,EAAQ,aAAmB,GAAK,eACzCA,EAASA,EAAQ,QAAc,GAAK,UACpCA,EAASA,EAAQ,KAAW,GAAK,OACjCA,EAASA,EAAQ,MAAY,GAAK,QAClCA,EAASA,EAAQ,QAAc,GAAK,UANxC,CAOG+hkB,IAAeA,EAAa,K,IA2EzB/lC,G,WACF,aAAc,oBACVh5rC,KAAKi5rC,UAAY,IAAIrmrC,IACrB5S,KAAKk5rC,YAAc,IAAI7wrC,Q,yCAE3B,SAAMjC,GACF,IAAKA,EACD,OAAQ,EACZ,IA3FoBq5tC,EAAKC,EA2FnBz+rC,EAAKu+rC,EAAiB,CAACx/tC,KAAM,SAAU,SAAAsrlB,GAAE,OAAIA,EAAG6tmB,SAAS,OAAQ,SAAA5tmB,GAAE,OAAIA,EAAGnllB,IAAI,iBAAkB,SAAAollB,GAAE,OAAIA,EAAGvqjB,MAC/G,OA5FyBy+rC,EA4FK,kBAAS,GA5FM,OAAzBD,EA4FMx+rC,GA5FkCw+rC,EAAqBC,M,qBA8FrF,SAAQz+rC,GACJ,OAAOjhC,KAAKi5rC,UAAUl1rC,IAAIk9B,IAAO,O,oBAErC,WACI,OAAOx/B,MAAMuN,KAAKhP,KAAKi5rC,UAAUn3rC,U,qBAErC,SAAQsE,GACJ,OAAOpG,KAAKk5rC,YAAYn1rC,IAAIqC,IAAM,O,+BAEtC,SAAkBA,GAAG,WACX66B,EAAKjhC,KAAKylT,MAAMr/S,GACtBpG,KAAKi5rC,UAAUzwkC,OAAOvnF,GAClB76B,EAAE8na,YACF9na,EAAE8na,WAAWxha,SAAQ,SAAC86Q,GAAD,OAAe,EAAK8x6B,kBAAkB9x6B,Q,iBAGnE,SAAIvmP,GACA,OAAOjhC,KAAKi5rC,UAAUh1rC,IAAIg9B,K,qBAE9B,SAAQ75B,GACJ,OAAOpH,KAAKk5rC,YAAYj1rC,IAAImD,K,iBAEhC,SAAIhB,EAAGigG,GACH,IAAMplE,EAAKolE,EAAKplE,GAChBjhC,KAAKi5rC,UAAUvxrC,IAAIu5B,EAAI76B,GACvBpG,KAAKk5rC,YAAYxxrC,IAAItB,EAAGigG,K,qBAE5B,SAAQplE,EAAI76B,GACR,IAAMozrC,EAAUx5rC,KAAKo5rC,QAAQn4pC,GAC7B,GAAIu4pC,EAAS,CACT,IAAMnzlC,EAAOrmG,KAAKk5rC,YAAYn1rC,IAAIy1rC,GAC9BnzlC,GACArmG,KAAKk5rC,YAAYxxrC,IAAItB,EAAGigG,GAEhCrmG,KAAKi5rC,UAAUvxrC,IAAIu5B,EAAI76B,K,mBAE3B,WACIpG,KAAKi5rC,UAAY,IAAIrmrC,IACrB5S,KAAKk5rC,YAAc,IAAI7wrC,Y,KAM/B,SAASs3tC,GAAT,GAA+D,IAApCjmC,EAAoC,EAApCA,iBAAkBt54B,EAAkB,EAAlBA,QAASlgT,EAAS,EAATA,KAIlD,MAHgB,WAAZkgT,IACAA,EAAU,UAEP/iT,QAAQq8rC,EAAiBt54B,EAAQhnQ,gBACnCl5C,GAAQw5rC,EAAiBx5rC,IACjB,aAATA,GACa,UAAZkgT,IAAwBlgT,GAAQw5rC,EAAgB,MAEzD,SAASD,GAAT,GAAoE,IAA1C13Y,EAA0C,EAA1CA,SAAUj6mB,EAAgC,EAAhCA,QAASpsM,EAAuB,EAAvBA,MAAOi+rC,EAAgB,EAAhBA,YAC5C9tkC,EAAOnwH,GAAS,GACpB,OAAKqmzB,GAGD43Y,IACA9tkC,EAAO8tkC,EAAY9tkC,EAAMi8E,IAEtB,IAAI5L,OAAOrwE,EAAKhqH,SALZgqH,EAOf,SAASzyE,GAAY5wB,GACjB,OAAOA,EAAI4wB,cAEf,SAASixF,GAAY7hH,GACjB,OAAOA,EAAI6hH,cAEf,IAAMwvjC,GAA0B,qBAmBhC,SAASC,GAAahy/B,GAClB,IAAM5nM,EAAO4nM,EAAQ5nM,KACrB,OAAO4nM,EAAQy1pB,aAAa,uBACtB,WACAr91B,EAEMk5C,GAAYl5C,GACd,KAEd,SAAS0/tC,GAAc5l8B,EAAIomB,EAASlgT,GAChC,MAAgB,UAAZkgT,GAAiC,UAATlgT,GAA6B,aAATA,EAGzC85R,EAAGt+R,MAFCs+R,EAAG2jB,aAAa,UAAY,GAK3C,IA2BIo84B,GACAxwpB,GA5BAj7P,GAAM,EACJ0r5B,GAAe,IAAIl/oC,OAAO,gBAEhC,SAASgj5B,KACL,OAAOxvpB,KAyBX,IAAM2r5B,GAAiB,6CACjBC,GAAqB,sBACrBC,GAAgB,YAChBC,GAAW,wBACjB,SAASC,GAAqB3uQ,EAASt+zB,GACnC,OAAQs+zB,GAAW,IAAI9y2B,QAAQqhnC,IAAgB,SAACn/qC,EAAQw/qC,EAAQC,EAAOC,EAAQC,EAAOC,GAClF,IAnBel5lC,EAmBTm5lC,EAAWJ,GAASE,GAASC,EAC7BE,EAAaN,GAAUE,GAAU,GACvC,IAAKG,EACD,OAAO7/qC,EAEX,GAAIo/qC,GAAmBn/oC,KAAK4/oC,IAAaR,GAAcp/oC,KAAK4/oC,GACxD,oBAAcC,GAAd,OAA2BD,GAA3B,OAAsCC,EAAtC,KAEJ,GAAIR,GAASr/oC,KAAK4/oC,GACd,oBAAcC,GAAd,OAA2BD,GAA3B,OAAsCC,EAAtC,KAEJ,GAAoB,MAAhBD,EAAS,GACT,oBAAcC,GAAd,QA/BWp5lC,EA+B8B4rB,GA7B7C5rB,EAAIhhF,QAAQ,OAAS,EACZghF,EAAIziD,MAAM,KAAKjvC,MAAM,EAAG,GAAG2R,KAAK,KAGhC+/E,EAAIziD,MAAM,KAAK,IAEZA,MAAM,KAAK,GAuB8B47oC,IAAjD,OAA4DC,EAA5D,KAEJ,IAAMzurC,EAAQihH,EAAKruE,MAAM,KACnBslG,EAAQs2iC,EAAS57oC,MAAM,KAC7B5yC,EAAME,MAjBsF,oBAkBzEg4I,GAlByE,IAkB5F,2BAA0B,KAAfuE,EAAe,QACT,MAATA,IAGc,OAATA,EACLz8I,EAAME,MAGNF,EAAMC,KAAKw8I,KA1ByE,8BA6B5F,oBAAcgyiC,GAAd,OAA2BzurC,EAAMsV,KAAK,MAAtC,OAA6Cm5qC,EAA7C,QAGR,IAAME,GAAoB,qBACpBC,GAA0B,qBA2DhC,SAASC,GAAcjl5B,EAAKpkF,GACxB,IAAKA,GAA4C,KAA1BA,EAAenzF,OAClC,OAAOmzF,EAEX,IAAMhsN,EAAIowS,EAAI9vQ,cAAc,KAE5B,OADAtgC,EAAEynH,KAAOukG,EACFhsN,EAAEynH,KAEb,SAAS6tkC,GAAajh6B,GAClB,OAAO38R,QAAuB,QAAf28R,EAAGomB,SAAqBpmB,EAAGkh6B,iBAE9C,SAASC,KACL,IAAMx1rC,EAAIqgC,SAASC,cAAc,KAEjC,OADAtgC,EAAEynH,KAAO,GACFznH,EAAEynH,KAEb,SAASgukC,GAAmBrl5B,EAAKqK,EAAS5xS,EAAM9S,EAAOosM,EAAS+3hC,GAC5D,OAAKnkuC,EAGQ,QAAT8S,GACU,SAATA,IAAiC,QAAZ4xS,GAAkC,MAAb1kT,EAAM,KAGnC,eAAT8S,GAAsC,MAAb9S,EAAM,GAF7Bs/rC,GAAcjl5B,EAAKr6S,GAKZ,eAAT8S,GACQ,UAAZ4xS,GAAmC,OAAZA,GAAgC,OAAZA,EAG9B,WAAT5xS,EAzFb,SAAiCunS,EAAKpkF,GAClC,GAA8B,KAA1BA,EAAenzF,OACf,OAAOmzF,EAEX,IAAI98D,EAAM,EACV,SAASwmiC,EAAkBC,GACvB,IAAI7vgC,EACEl9I,EAAQ+spC,EAAMvviC,KAAK4lE,EAAel/I,UAAUoiF,IAClD,OAAItmH,GACAk9I,EAAQl9I,EAAM,GACdsmH,GAAO42B,EAAM5pL,OACN4pL,GAEJ,GAGX,IADA,IAAM5qC,EAAS,GAEXw6iC,EAAkBN,MACdlmiC,GAAO88D,EAAe9vN,SAFjB,CAKT,IAAI2/F,EAAM65lC,EAAkBP,IAC5B,GAAsB,MAAlBt5lC,EAAI1xF,OAAO,GACX0xF,EAAMw5lC,GAAcjl5B,EAAKv0M,EAAI/uB,UAAU,EAAG+uB,EAAI3/F,OAAS,IACvDg/I,EAAOz0I,KAAKo1F,OAEX,CACD,IAAI+5lC,EAAiB,GACrB/5lC,EAAMw5lC,GAAcjl5B,EAAKv0M,GAEzB,IADA,IAAIg6lC,GAAW,IACF,CACT,IAAM31rC,EAAI8rN,EAAerpE,OAAOuM,GAChC,GAAU,KAANhvJ,EAAU,CACVg7I,EAAOz0I,MAAMo1F,EAAM+5lC,GAAgB/8jC,QACnC,MAEC,GAAKg9jC,EAWI,MAAN31rC,IACA21rC,GAAW,OAZC,CAChB,GAAU,MAAN31rC,EAAW,CACXgvJ,GAAO,EACPhU,EAAOz0I,MAAMo1F,EAAM+5lC,GAAgB/8jC,QACnC,MAEW,MAAN34H,IACL21rC,GAAW,GAQnBD,GAAkB11rC,EAClBgvJ,GAAO,IAInB,OAAOhU,EAAOp/H,KAAK,MAkCRg6qC,CAAwB1l5B,EAAKr6S,GAEtB,UAAT8S,EACE6rrC,GAAqB3+rC,EAAOy/rC,MAElB,WAAZ/64B,GAAiC,SAAT5xS,EACtBwsrC,GAAcjl5B,EAAKr6S,GAEC,oBAApBmkuC,EACAA,EAAgBrxtC,EAAM9S,EAAOosM,GAEjCpsM,EAdIs/rC,GAAcjl5B,EAAKr6S,GAXnBA,EA2Bf,SAASggsC,GAAgBt74B,EAAS5xS,EAAM2a,GACpC,OAAoB,UAAZi3R,GAAmC,UAAZA,IAAiC,aAAT5xS,EAqC3D,SAASsxtC,GAAgB14tC,EAAM24tC,GAAgD,IAAhCt2mC,EAAgC,uDAAxB3sH,IAAUy/R,EAAc,uDAAH,EACxE,OAAKn1R,EAEDA,EAAKC,WAAaD,EAAK4wrC,cAEvBz75B,EAAW9yK,GADH,EAGRs2mC,EAAe34tC,GACRm1R,EACJuj8B,GAAgB14tC,EAAK0ma,WAAYiyzB,EAAgBt2mC,EAAO8yK,EAAW,IAP9D,EAShB,SAASyj8B,GAAqB5mpC,EAAW3oC,GACrC,OAAO,SAACrpC,GACJ,IAAM4yR,EAAK5yR,EACX,GAAW,OAAP4yR,EACA,OAAO,EACX,IACI,GAAI5gN,EACA,GAAyB,kBAAdA,GACP,GAAI4gN,EAAGpiG,QAAH,WAAex+G,IACf,OAAO,OAEV,GA/BrB,SAAkC4gN,EAAI5hD,GAClC,IAAK,IAAIyj9B,EAAS7h6B,EAAGvb,UAAU58Q,OAAQg6rC,KAAW,CAC9C,IAAMzinC,EAAY4gN,EAAGvb,UAAUo96B,GAC/B,GAAIzj9B,EAAMr9L,KAAKq+B,GACX,OAAO,EAGf,OAAO,EAwBc6mpC,CAAyBjm8B,EAAI5gN,GAClC,OAAO,EAGf,SAAI3oC,IAAYupP,EAAGpiG,QAAQnnJ,IAI/B,MAAOyu2B,GACH,OAAO,IAInB,SAAS48S,GAAgB10rC,EAAM20rC,EAAeC,EAAkBkkC,EAAiBC,EAAoBC,GACjG,IACI,IAAMpm8B,EAAK5yR,EAAKC,WAAaD,EAAK4wrC,aAC5B5wrC,EACAA,EAAKi5S,cACX,GAAW,OAAPrmB,EACA,OAAO,EACX,GAAmB,UAAfA,EAAGomB,QAAqB,CACxB,IAAMig7B,EAAerm8B,EAAG2jB,aAAa,gBAUrC,GATqC,CACjC,mBACA,eACA,YACA,SACA,eACA,cACA,UAE6Bp0S,SAAS82tC,GACtC,OAAO,EAGf,IAAIC,GAAgB,EAChBC,GAAkB,EACtB,GAAIH,EAAa,CAEb,IADAG,EAAiBT,GAAgB9l8B,EAAIgm8B,GAAqBE,EAAiBC,KACtD,EACjB,OAAO,EAEXG,EAAeR,GAAgB9l8B,EAAIgm8B,GAAqBjkC,EAAeC,GAAmBukC,GAAkB,EAAIA,EAAiBzjuC,SAEhI,CAED,IADAwjuC,EAAeR,GAAgB9l8B,EAAIgm8B,GAAqBjkC,EAAeC,KACpD,EACf,OAAO,EAEXukC,EAAiBT,GAAgB9l8B,EAAIgm8B,GAAqBE,EAAiBC,GAAqBG,GAAgB,EAAIA,EAAexjuC,KAEvI,OAAOwjuC,GAAgB,IACjBC,GAAkB,IACdD,GAAgBC,IAEpBA,GAAkB,MAEZH,EAEhB,MAAOh4tC,IAEP,QAASg4tC,EA6Db,SAASnkC,GAAc71rC,EAAG4lC,GACtB,IAAQ+pQ,EAAgU/pQ,EAAhU+pQ,IAAKmm5B,EAA2TlwpC,EAA3TkwpC,OAAQC,EAAmTnwpC,EAAnTmwpC,WAAYC,EAAuSpwpC,EAAvSowpC,cAAeokC,EAAwRx0rC,EAAxRw0rC,gBAAiBJ,EAAuQp0rC,EAAvQo0rC,YAAaP,EAA0P7zrC,EAA1P6zrC,gBAAiB9jC,EAAyO/vpC,EAAzO+vpC,cAAemkC,EAA0Nl0rC,EAA1Nk0rC,gBAAiBlkC,EAAyMhwpC,EAAzMgwpC,iBAAkBmkC,EAAuLn0rC,EAAvLm0rC,mBAAoB9jC,EAAmKrwpC,EAAnKqwpC,iBAArK,EAAwUrwpC,EAAjJ0tpC,wBAAvL,MAA0M,GAA1M,EAA8M4C,EAA0HtwpC,EAA1HswpC,WAAY3C,EAA8G3tpC,EAA9G2tpC,YAA1N,EAAwU3tpC,EAAjGuwpC,sBAAvO,MAAwP,GAAxP,EAA4PC,EAA4ExwpC,EAA5EwwpC,aAAcC,EAA8DzwpC,EAA9DywpC,aAAcC,EAAgD1wpC,EAAhD0wpC,gBAAxR,EAAwU1wpC,EAA/B2wpC,yBAAzS,SACMC,EA0EV,SAAmB7m5B,EAAKmm5B,GACpB,IAAKA,EAAO3C,QAAQxj5B,GAChB,OACJ,IAAM2uO,EAAQw3qB,EAAOz24B,MAAM1P,GAC3B,OAAiB,IAAV2uO,OAAc5ohB,EAAY4ohB,EA9ElBm4qB,CAAU9m5B,EAAKmm5B,GAC9B,OAAQ91rC,EAAEiB,UACN,KAAKjB,EAAE02rC,cACH,MAAqB,eAAjB12rC,EAAE22rC,WACK,CACH78rC,KAAM6+tC,EAAWp7gB,SACjBz1S,WAAY,GACZ6uxB,WAAY32rC,EAAE22rC,YAIX,CACH78rC,KAAM6+tC,EAAWp7gB,SACjBz1S,WAAY,IAGxB,KAAK9na,EAAE42rC,mBACH,MAAO,CACH98rC,KAAM6+tC,EAAW9hC,aACjBzurC,KAAMpI,EAAEoI,KACR0urC,SAAU92rC,EAAE82rC,SACZC,SAAU/2rC,EAAE+2rC,SACZP,UAER,KAAKx2rC,EAAE4xrC,aACH,OA6GZ,SAA8B5xrC,EAAG4lC,GAM7B,IALA,IA2IIy0rC,EA3II1q7B,EAAoT/pQ,EAApT+pQ,IAAKom5B,EAA+SnwpC,EAA/SmwpC,WAAYC,EAAmSpwpC,EAAnSowpC,cAAeokC,EAAoRx0rC,EAApRw0rC,gBAAiBnkC,EAAmQrwpC,EAAnQqwpC,iBAAzD,EAA4TrwpC,EAAjP0tpC,wBAA3E,MAA8F,GAA9F,EAAkGmmC,EAA0N7zrC,EAA1N6zrC,gBAAiBlmC,EAAyM3tpC,EAAzM2tpC,YAAnH,EAA4T3tpC,EAA5LuwpC,sBAAhI,MAAiJ,GAAjJ,EAAqJC,EAAuKxwpC,EAAvKwwpC,aAAcC,EAAyJzwpC,EAAzJywpC,aAAcC,EAA2I1wpC,EAA3I0wpC,gBAAjL,EAA4T1wpC,EAA1H2wpC,yBAAlM,SAA6NC,EAA+F5wpC,EAA/F4wpC,OAAqBb,GAA0E/vpC,EAAvFo0rC,YAAuFp0rC,EAA1E+vpC,eAAemkC,EAA2Dl0rC,EAA3Dk0rC,gBAAiBlkC,EAA0ChwpC,EAA1CgwpC,iBAAkBmkC,EAAwBn0rC,EAAxBm0rC,mBAC9R/iC,EA7TV,SAA2Bt1/B,EAASq0/B,EAAYC,EAAeokC,GAC3D,IACI,GAAIA,GAAmB14hC,EAAQlQ,QAAQ4oiC,GACnC,OAAO,EAEX,GAA0B,kBAAfrkC,GACP,GAAIr0/B,EAAQ22E,UAAU74P,SAASu2qC,GAC3B,OAAO,OAIX,IAAK,IAAIN,EAAS/z/B,EAAQ22E,UAAU58Q,OAAQg6rC,KAAW,CACnD,IAAMzinC,EAAY0uH,EAAQ22E,UAAUo96B,GACpC,GAAIM,EAAWphpC,KAAKq+B,GAChB,OAAO,EAInB,GAAIgjnC,EACA,OAAOt0/B,EAAQlQ,QAAQwkgC,GAG/B,MAAOh0rC,IAEP,OAAO,EAqSWi1rC,CAAkBj3rC,EAAG+1rC,EAAYC,EAAeokC,GAC5Dpg7B,EAteV,SAAyBt4G,GACrB,GAAIA,aAAmBw1/B,gBACnB,MAAO,OAEX,IAAMC,EAAmBnkpC,GAAY0uJ,EAAQs4G,SAC7C,OAAI454B,GAAaj/oC,KAAKwipC,GACX,MAEJA,EA8dSC,CAAgBp3rC,GAC5BorN,EAAa,GACXzjN,EAAM3H,EAAEorN,WAAW3vN,OAChBmB,EAAI,EAAGA,EAAI+K,EAAK/K,IAAK,CAC1B,IAAMikZ,EAAO7gZ,EAAEorN,WAAWxuN,GACtBikZ,EAAKz4Y,OAASktrC,GAAgBt74B,EAAS6mG,EAAKz4Y,KAAMy4Y,EAAKvrZ,SACvD81N,EAAWy1L,EAAKz4Y,MAAQ4srC,GAAmBrl5B,EAAKqK,EAAShnQ,GAAY6tW,EAAKz4Y,MAAOy4Y,EAAKvrZ,MAAO0K,EAAGy5tC,IAGxG,GAAgB,SAAZz/6B,GAAsBi84B,EAAkB,CACxC,IAAMoB,EAAah8rC,MAAMuN,KAAK+mS,EAAI8yoB,aAAaln6B,MAAK,SAACnU,GACjD,OAAOA,EAAE4/G,OAAShnH,EAAEgnH,QAEpBs+zB,EAAU,KACV+xQ,IACA/xQ,EAAU0sQ,GAAoBqF,IAE9B/xQ,WACOl6tB,EAAWw9G,WACXx9G,EAAWpkG,KAClBokG,EAAWks+B,SAAWrD,GAAqB3uQ,EAAS+xQ,EAAWrwkC,OAGvE,GAAgB,UAAZgzL,GACAh6S,EAAEsrU,SACAtrU,EAAEi4uB,WAAaj4uB,EAAE22S,aAAe,IAAIv+K,OAAO38H,OAAQ,CACrD,IAAM6p7B,EAAU0sQ,GAAoBhyrC,EAAEsrU,OAClCg6mB,IACAl6tB,EAAWks+B,SAAWrD,GAAqB3uQ,EAASyvQ,OAG5D,GAAgB,UAAZ/64B,GACY,aAAZA,GACY,WAAZA,GACY,WAAZA,EAAsB,CACtB,IAAMpmB,EAAK5zR,EACLlG,EAAO45rC,GAAa9/5B,GACpBt+R,EAAQkkuC,GAAc5l8B,EAAI3vJ,GAAY+1K,GAAUlgT,GAChD87H,EAAUg+J,EAAGh+J,QACnB,GAAa,WAAT97H,GAA8B,WAATA,GAAqBxE,EAAO,CACjD,IAAMgluC,EAAY5kC,GAAgB9h6B,EAAI+h6B,EAAeC,EAAkBkkC,EAAiBC,EAAoBR,GAAgB,CACxHz/tC,OACAkgT,QAAS/1K,GAAY+1K,GACrBs54B,sBAEJlo+B,EAAW91N,MAAQ+9rC,GAAe,CAC9B13Y,SAAU2+a,EACV54hC,QAASkyF,EACTt+R,QACAi+rC,gBAGJ39jC,IACAw1F,EAAWx1F,QAAUA,GAGb,WAAZokL,IACIh6S,EAAEk/G,WAAao0kC,EAAgB,OAC/Blo+B,EAAWlsG,UAAW,SAGfksG,EAAWlsG,UAG1B,GAAgB,WAAZ86L,GAAwBq84B,EACxB,GAAoB,OAAhBr2rC,EAAEu3rC,WA/kBd,SAAyBv0tB,GACrB,IAAM3nN,EAAM2nN,EAAO42C,WAAW,MAC9B,IAAKv+P,EACD,OAAO,EAEX,IADA,IACS5pQ,EAAI,EAAGA,EAAIuxd,EAAO9tZ,MAAOzjE,GADhB,GAEd,IAAK,IAAI2zB,EAAI,EAAGA,EAAI49b,EAAO73W,OAAQ/lF,GAFrB,GAEqC,CAC/C,IAAMszf,EAAer9Q,EAAIq9Q,aACnB8+pB,EAAuB/D,MAA2B/6pB,EAClDA,EAAY,mBACZA,EAEN,GADoB,IAAIpoY,YAAYkniC,EAAqB58rC,KAAKygR,EAAK5pQ,EAAG2zB,EAAGzuC,KAAKE,IAPpE,GAOmFmse,EAAO9tZ,MAAQzjE,GAAI9a,KAAKE,IAP3G,GAO0Hmse,EAAO73W,OAAS/lF,IAAIwP,KAAKk4G,QAC7IzlJ,MAAK,SAACowrC,GAAD,OAAqB,IAAVA,KAC5B,OAAO,EAGnB,OAAO,GAgkBMC,CAAgB13rC,KACjBorN,EAAWus+B,WAAa33rC,EAAE6qpC,UAAUsrC,EAAer8rC,KAAMq8rC,EAAeyB,eAG3E,KAAM,cAAe53rC,GAAI,CAC1B,IAAM63rC,EAAgB73rC,EAAE6qpC,UAAUsrC,EAAer8rC,KAAMq8rC,EAAeyB,SAChEE,EAAcl4pC,SAASC,cAAc,UAC3Ci4pC,EAAY5inC,MAAQl1E,EAAEk1E,MACtB4inC,EAAY3skC,OAASnrH,EAAEmrH,OAEnB0skC,IADuBC,EAAYjtC,UAAUsrC,EAAer8rC,KAAMq8rC,EAAeyB,WAEjFxs+B,EAAWus+B,WAAaE,GAIpC,GAAgB,QAAZ794B,GAAqBo84B,EAAc,CAC9BzC,KACDA,GAAgBhk5B,EAAI9vQ,cAAc,UAClCsjgB,GAAYwwpB,GAAc/5qB,WAAW,OAEzC,IAAM5lK,EAAQh0W,EACRuL,EAAWyoW,EAAMik1B,YACvBjk1B,EAAMik1B,YAAc,YACpB,IAAMsiC,EAAoB,SAApBA,IACFvm3B,EAAMnxQ,oBAAoB,OAAQ03nC,GAClC,IACI5mC,GAAcz+mC,MAAQ8+R,EAAMmk1B,aAC5BxE,GAAcxokC,OAAS6oP,EAAMok1B,cAC7Bj1pB,GAAUT,UAAU1uL,EAAO,EAAG,GAC9B5oJ,EAAWus+B,WAAahE,GAAc9oC,UAAUsrC,EAAer8rC,KAAMq8rC,EAAeyB,SAExF,MAAO5spC,GACHppB,QAAQC,KAAR,gCAAsCmyV,EAAMqk1B,WAA5C,oBAAkErtpC,IAEtEz/B,EACO6/M,EAAW6s+B,YAAc1srC,EAC1ByoW,EAAMtxF,gBAAgB,gBAE5BsxF,EAAMq3H,UAAmC,IAAvBr3H,EAAMmk1B,aACxBoiC,IAEAvm3B,EAAMpxQ,iBAAiB,OAAQ23nC,GAEvB,UAAZvg7B,GAAmC,UAAZA,IACvB5uF,EAAWkt+B,cAAgBt4rC,EAAEu4rC,OACvB,SACA,SACNnt+B,EAAWot+B,oBAAsBx4rC,EAAEq2M,aAElCkg/B,IACGv2rC,EAAEuhT,aACFn2F,EAAWqt+B,cAAgBz4rC,EAAEuhT,YAE7BvhT,EAAEwhT,YACFp2F,EAAWst+B,aAAe14rC,EAAEwhT,YAGpC,GAAIw14B,EAAW,CACX,MAA0Bh3rC,EAAE6zR,wBAApB3+M,EAAR,EAAQA,MAAOi2C,EAAf,EAAeA,OACfigG,EAAa,CACTophB,MAAOpphB,EAAWophB,MAClBmkd,SAAU,GAAF,OAAKzjnC,EAAL,MACR0jnC,UAAW,GAAF,OAAKztkC,EAAL,OAGD,WAAZ6uL,GAAyBs84B,EAAgBlr+B,EAAWhrG,OAC/CpgH,EAAEk9pC,kBACH9x8B,EAAWyt+B,OAASzt+B,EAAWhrG,YAE5BgrG,EAAWhrG,KAGtB,IACQo6mC,eAAe78tC,IAAIq8S,KACnBqg7B,GAAkB,GAE1B,MAAOr4tC,IAEP,MAAO,CACHlI,KAAM6+tC,EAAWt+6B,QACjBL,UACA5uF,aACA08M,WAAY,GACZgxxB,MAAOjE,GAAa70rC,SAAMtK,EAC1BshsC,YACAR,SACA/4O,SAAU48Q,GAxQCthC,CAAqB/4rC,EAAG,CAC3B2vS,MACAom5B,aACAC,gBACAokC,kBACAnkC,mBACAwjC,kBACAnmC,mBACAC,cACA4C,iBACAC,eACAC,eACAC,kBACAC,oBACAC,SACAwjC,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,uBAER,KAAK/5tC,EAAEg5rC,UACH,OAiCZ,SAA2Bh5rC,EAAG4lC,GAC1B,IAAQo0rC,EAA0Ip0rC,EAA1Io0rC,YAAarkC,EAA6H/vpC,EAA7H+vpC,cAAemkC,EAA8Gl0rC,EAA9Gk0rC,gBAAiBlkC,EAA6FhwpC,EAA7FgwpC,iBAAkBmkC,EAA2En0rC,EAA3Em0rC,mBAAoB7jC,EAAuDtwpC,EAAvDswpC,WAAY5C,EAA2C1tpC,EAA3C0tpC,iBAAkBC,EAAyB3tpC,EAAzB2tpC,YAAaiD,EAAY5wpC,EAAZ4wpC,OAChIyC,EAAgBj5rC,EAAE0na,YAAc1na,EAAE0na,WAAW1tH,QAC/CrD,EAAc32S,EAAE22S,YACdui5B,EAA4B,UAAlBD,QAAmCvjsC,EAC7CyjsC,EAA6B,WAAlBF,QAAoCvjsC,EAC/C+kuC,EAA+B,aAAlBxhC,QAAsCvjsC,EACzD,GAAIwjsC,GAAWvi5B,EAAa,CACxB,IACQ32S,EAAE4na,aAAe5na,EAAE0lmC,iBAEd0zH,EAAiB,CAACp5tC,EAAG,SAAU,SAAA06tC,GAAE,OAAIA,EAAGhzzB,YAAY,SAAU,SAAAizzB,GAAE,OAAIA,EAAGrv5B,OAAO,iBAAkB,SAAAsv5B,GAAE,OAAIA,EAAGxyzB,cAC9GzxH,EAAcq74B,GAAoBhyrC,EAAE0na,WAAWp8F,QAGvD,MAAOtgS,GACHppB,QAAQC,KAAR,+DAAqEmpB,GAAOhrC,GAEhF22S,EAAcs94B,GAAqBt94B,EAAao+4B,MAEhDoE,IACAxi5B,EAAc,sBAElB,IAAM2j7B,EAAY5kC,GAAgB11rC,EAAG21rC,EAAeC,EAAkBkkC,EAAiBC,EAAoBC,GACtG9gC,GAAYC,GAAashC,IAAc9j7B,IAAe2j7B,IACvD3j7B,EAAcu/4B,EACRA,EAAWv/4B,EAAa32S,EAAEi6S,eAC1BtD,EAAYnkO,QAAQ,QAAS,MAEnCiopC,GAAc9j7B,IAAgB284B,EAAiB354B,UAAY2g7B,KAC3D3j7B,EAAc484B,EACRA,EAAY584B,EAAa32S,EAAE0na,YAC3B/wH,EAAYnkO,QAAQ,QAAS,MAEvC,GAAsB,WAAlBymnC,GAA8Bti5B,EAAa,CAM3CA,EAAc084B,GAAe,CACzB13Y,SAAU+5Y,GAAgB11rC,EAAG21rC,EAAeC,EAAkBkkC,EAAiBC,EAN7DR,GAAgB,CAClCz/tC,KAAM,KACNkgT,QAASi/4B,EACT3F,sBAIA5x/B,QAAS1hM,EACT1K,MAAOqhT,EACP484B,gBAGR,MAAO,CACHz5rC,KAAM6+tC,EAAWv/B,KACjBzi5B,YAAaA,GAAe,GAC5Bui5B,UACA1C,UApFW6C,CAAkBr5rC,EAAG,CACxBg6tC,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACA7jC,aACA5C,mBACAC,cACAiD,WAER,KAAKx2rC,EAAEs5rC,mBACH,MAAO,CACHx/rC,KAAM6+tC,EAAWp/B,MACjB5i5B,YAAa,GACb6/4B,UAER,KAAKx2rC,EAAEw5rC,aACH,MAAO,CACH1/rC,KAAM6+tC,EAAWl/B,QACjB9i5B,YAAa32S,EAAE22S,aAAe,GAC9B6/4B,UAER,QACI,OAAO,GA6NnB,SAASkD,GAAcC,GACnB,YAAkBjksC,IAAdiksC,GAAyC,OAAdA,EACpB,GAGAA,EAAU3mpC,cA2EzB,SAAS4mpC,GAAoB55rC,EAAG4lC,GAC5B,IA4BI/K,EA5BI80Q,EAA6e/pQ,EAA7e+pQ,IAAKmm5B,EAAwelwpC,EAAxekwpC,OAAQC,EAAgenwpC,EAAhemwpC,WAAYC,EAAodpwpC,EAApdowpC,cAAeokC,EAAqcx0rC,EAArcw0rC,gBAAiBJ,EAAobp0rC,EAApbo0rC,YAAarkC,EAAua/vpC,EAAva+vpC,cAAemkC,EAAwZl0rC,EAAxZk0rC,gBAAiBlkC,EAAuYhwpC,EAAvYgwpC,iBAAkBmkC,EAAqXn0rC,EAArXm0rC,mBAAhI,EAAqfn0rC,EAAjWi0pC,iBAApJ,WAAqfj0pC,EAA9UqwpC,wBAAvK,WAAqfrwpC,EAArT0tpC,wBAAhM,MAAmN,GAAnN,EAAuNmmC,EAA8R7zrC,EAA9R6zrC,gBAAiBvjC,EAA6QtwpC,EAA7QswpC,WAAY3C,EAAiQ3tpC,EAAjQ2tpC,YAAauG,EAAoPl0pC,EAApPk0pC,eAAjQ,EAAqfl0pC,EAApOuwpC,sBAAjR,MAAkS,GAAlS,IAAqfvwpC,EAA/MwwpC,oBAAtS,WAAqfxwpC,EAAzLywpC,oBAA5T,SAAkV0D,EAAmKn0pC,EAAnKm0pC,YAAaC,EAAsJp0pC,EAAtJo0pC,aAA/V,EAAqfp0pC,EAAxIq0pC,yBAA7W,MAAiY,IAAjY,EAAuYC,EAA8Gt0pC,EAA9Gs0pC,iBAAvY,EAAqft0pC,EAA5Fu0pC,6BAAzZ,MAAib,IAAjb,IAAqfv0pC,EAA9D0wpC,uBAAvb,MAAyc,kBAAM,GAA/c,IAAqf1wpC,EAA/B2wpC,yBAAtd,SACA,EAAoC3wpC,EAA9By0pC,0BAAN,SACMC,EAAkBzE,GAAc71rC,EAAG,CACrC2vS,MACAmm5B,SACAC,aACAC,gBACAgkC,cACAI,kBACAzkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACA9jC,mBACA3C,mBACAmmC,kBACAvjC,aACA3C,cACA4C,iBACAC,eACAC,eACAC,kBACAC,sBAEJ,IAAK+D,EAED,OADA14qC,QAAQC,KAAK7hB,EAAG,kBACT,KAIP66B,EADAi7pC,EAAO3C,QAAQnzrC,GACV81rC,EAAOz24B,MAAMr/S,IAvG1B,SAAyBu6rC,EAAIT,GACzB,GAAIA,EAAejyxB,SAAW0yxB,EAAGzgsC,OAAS6+tC,EAAWl/B,QACjD,OAAO,EAEN,GAAIc,EAAGzgsC,OAAS6+tC,EAAWt+6B,QAAS,CACrC,GAAIy/4B,EAAe73tB,SACC,WAAfs4tB,EAAGvg5B,SACgB,SAAfug5B,EAAGvg5B,UACuB,YAAtBug5B,EAAGnv+B,WAAWw9G,KACW,kBAAtB2x3B,EAAGnv+B,WAAWw9G,MACG,WAArB2x3B,EAAGnv+B,WAAW0mC,IACF,SAAfyo8B,EAAGvg5B,SACsB,aAAtBug5B,EAAGnv+B,WAAWw9G,KACgB,kBAAvB2x3B,EAAGnv+B,WAAWpkG,MACrBuzkC,EAAGnv+B,WAAWpkG,KAAK6sE,SAAS,QACpC,OAAO,EAEN,GAAIimgC,EAAeU,cACH,SAAfD,EAAGvg5B,SAA4C,kBAAtBug5B,EAAGnv+B,WAAWw9G,KACrB,SAAf2x3B,EAAGvg5B,UACC0/4B,GAAca,EAAGnv+B,WAAWhjN,MAAM+/B,MAAM,sCACC,qBAAtCuxpC,GAAca,EAAGnv+B,WAAWhjN,OACS,SAArCsxrC,GAAca,EAAGnv+B,WAAWw9G,MACS,qBAArC8w3B,GAAca,EAAGnv+B,WAAWw9G,MACS,kBAArC8w3B,GAAca,EAAGnv+B,WAAWw9G,OACxC,OAAO,EAEN,GAAmB,SAAf2x3B,EAAGvg5B,QAAoB,CAC5B,GAAI8/4B,EAAeW,sBACff,GAAca,EAAGnv+B,WAAWhjN,MAAM+/B,MAAM,0BACxC,OAAO,EAEN,GAAI2xpC,EAAeY,iBACnBhB,GAAca,EAAGnv+B,WAAWvvC,UAAU1zI,MAAM,sBACzCuxpC,GAAca,EAAGnv+B,WAAWhjN,MAAM+/B,MAAM,mBACF,cAAtCuxpC,GAAca,EAAGnv+B,WAAWhjN,OAChC,OAAO,EAEN,GAAI0xrC,EAAea,iBACmB,WAAtCjB,GAAca,EAAGnv+B,WAAWhjN,OACa,cAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,YAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OAChC,OAAO,EAEN,GAAI0xrC,EAAec,wBACYllsC,IAAhC6ksC,EAAGnv+B,WAAW,cACd,OAAO,EAEN,GAAI0u+B,EAAee,qBACmB,WAAtCnB,GAAca,EAAGnv+B,WAAWhjN,OACa,cAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,cAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,cAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,WAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OAC5BsxrC,GAAca,EAAGnv+B,WAAWvvC,UAAU1zI,MAAM,cAC5CuxpC,GAAca,EAAGnv+B,WAAWvvC,UAAU1zI,MAAM,cAChD,OAAO,EAEN,GAAI2xpC,EAAegB,uBACmB,6BAAtCpB,GAAca,EAAGnv+B,WAAWhjN,OACa,wBAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,eAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,oBAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,cAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,iBAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OACU,+BAAtCsxrC,GAAca,EAAGnv+B,WAAWhjN,OAChC,OAAO,GAInB,OAAO,EAmCE2yrC,CAAgBT,EAAiBR,KACpCO,GACEC,EAAgBxgsC,OAAS6+tC,EAAWv/B,MACnCkB,EAAgBpB,SAChBoB,EAAgB3j5B,YAAYnkO,QAAQ,cAAe,IAAI/2E,QAIvDi87B,MA9vBQ,EAgwBjB,IAAMsjQ,EAAiBhjsC,OAAO+8C,OAAOulpC,EAAiB,CAAEz/pC,OAExD,GADAi7pC,EAAOv9qC,IAAIvY,EAAGg7rC,IAjwBG,IAkwBbngqC,EACA,OAAO,KAEPk/pC,GACAA,EAAY/5rC,GAEhB,IAAIi7rC,GAAepB,EACnB,GAAImB,EAAelhsC,OAAS6+tC,EAAWt+6B,QAAS,CAC5C4g5B,EAAcA,IAAgBD,EAAehE,iBACtCgE,EAAehE,UACtB,IAAMlF,EAAa9xrC,EAAE8xrC,WACjBA,GAAcC,EAAkBD,KAChCkJ,EAAeE,cAAe,GAEtC,IAAKF,EAAelhsC,OAAS6+tC,EAAWp7gB,UACpCy9e,EAAelhsC,OAAS6+tC,EAAWt+6B,UACnC4g5B,EAAa,CACTnB,EAAeqB,gBACfH,EAAelhsC,OAAS6+tC,EAAWt+6B,SACR,SAA3B2g5B,EAAehh5B,UACfqg5B,GAAqB,GA+BzB,IA7BA,IAAMe,EAAgB,CAClBzr5B,MACAmm5B,SACAC,aACAC,gBACAgkC,cACAI,kBACAzkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACAlgC,YACA5D,mBACA3C,mBACAmmC,kBACAvjC,aACA3C,cACAuG,iBACA3D,iBACAC,eACAC,eACAgE,qBACAN,cACAC,eACAC,oBACAC,mBACAC,wBACA7D,mBAEJ,MAAqBj7rC,MAAMuN,KAAK5I,EAAE8na,YAAlC,eAA+C,CAA1C,IACKwzxB,EAAsB1B,GADf,KAC2CwB,GACpDE,GACAN,EAAelzxB,WAAW9ha,KAAKs1rC,GAGvC,GAz/BR,SAAqBt7rC,GACjB,OAAOA,EAAEiB,WAAajB,EAAE4xrC,aAw/BhBipC,CAAY76tC,IAAMA,EAAE8xrC,WACpB,eAAqBz2rC,MAAMuN,KAAK5I,EAAE8xrC,WAAWhqxB,YAA7C,gBAA0D,CAArD,IACKwzxB,GAAsB1B,GADf,MAC2CwB,GACpDE,KACAvJ,EAAkB/xrC,EAAE8xrC,cACfwJ,GAAoBG,UAAW,GACpCT,EAAelzxB,WAAW9ha,KAAKs1rC,MA0F/C,OArFIt7rC,EAAE0na,YACFmqxB,EAAa7xrC,EAAE0na,aACfqqxB,EAAkB/xrC,EAAE0na,cACpBszxB,EAAeS,UAAW,GAE1BT,EAAelhsC,OAAS6+tC,EAAWt+6B,SACR,WAA3B2g5B,EAAehh5B,SAxiBvB,SAA0B0h5B,EAAU98pC,EAAUq7pC,GAC1C,IAAM/ovB,EAAMwqvB,EAASvssB,cACrB,GAAKj+C,EAAL,CAGA,IACI5iQ,EADAqt/B,GAAQ,EAEZ,IACIrt/B,EAAa4iQ,EAAItxa,SAAS0uK,WAE9B,MAAOvmM,GACH,OAEJ,GAAmB,aAAfumM,EAAJ,CAcA,IAAMst/B,EAAW,cACjB,GAAI1qvB,EAAI7tZ,SAAS2jE,OAAS40kC,GACtBF,EAASt7kC,MAAQw7kC,GACA,KAAjBF,EAASt7kC,IAET,OADA3tE,WAAW7T,EAAU,GACd88pC,EAAS94lC,iBAAiB,OAAQhkE,GAE7C88pC,EAAS94lC,iBAAiB,OAAQhkE,OArBlC,CACI,IAAM24uB,EAAQ9kuB,YAAW,WAChBkppC,IACD/8pC,IACA+8pC,GAAQ,KAEb1B,GACHyB,EAAS94lC,iBAAiB,QAAQ,WAC9Bu9B,aAAao3oB,GACbokb,GAAQ,EACR/8pC,SAkhBJk9pC,CAAiB97rC,GAAG,WAChB,IAAM+7rC,EAAY/7rC,EAAEk9pC,gBACpB,GAAI6+B,GAAa/B,EAAc,CAC3B,IAAMgC,EAAuBpC,GAAoBmC,EAAW,CACxDps5B,IAAKos5B,EACLjG,SACAC,aACAC,gBACAokC,kBACAJ,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACAlgC,WAAW,EACX5D,mBACA3C,mBACAmmC,kBACAvjC,aACA3C,cACAuG,iBACA3D,iBACAC,eACAC,eACAgE,qBACAN,cACAC,eACAC,oBACAC,mBACAC,wBACA7D,oBAEA0F,GACAhC,EAAah6rC,EAAGg8rC,MAGzB/B,GAEHe,EAAelhsC,OAAS6+tC,EAAWt+6B,SACR,SAA3B2g5B,EAAehh5B,SACmB,eAAlCgh5B,EAAe5v+B,WAAWw9G,KA7iBlC,SAA8B/kO,EAAMjlE,EAAUq9pC,GAC1C,IACIC,EADAP,GAAQ,EAEZ,IACIO,EAAmBr4lC,EAAKynO,MAE5B,MAAOvjU,GACH,OAEJ,IAAIm0rC,EAAJ,CAEA,IAAM3kb,EAAQ9kuB,YAAW,WAChBkppC,IACD/8pC,IACA+8pC,GAAQ,KAEbM,GACHp4lC,EAAKjB,iBAAiB,QAAQ,WAC1Bu9B,aAAao3oB,GACbokb,GAAQ,EACR/8pC,QA0hBAu9pC,CAAqBn8rC,GAAG,WACpB,GAAIk6rC,EAAkB,CAClB,IAAMkC,EAAqBxC,GAAoB55rC,EAAG,CAC9C2vS,MACAmm5B,SACAC,aACAC,gBACAokC,kBACAJ,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACAlgC,WAAW,EACX5D,mBACA3C,mBACAmmC,kBACAvjC,aACA3C,cACAuG,iBACA3D,iBACAC,eACAC,eACAgE,qBACAN,cACAC,eACAC,oBACAC,mBACAC,wBACA7D,oBAEA8F,GACAlC,EAAiBl6rC,EAAGo8rC,MAG7BjC,GAEAa,EAEX,SAASj24B,GAAS/kT,EAAG4lC,GACjB,MAAuhBA,GAAW,GAAliB,IAAQkwpC,cAAR,MAAiB,IAAIlD,GAArB,MAA+BmD,kBAA/B,MAA4C,WAA5C,MAAwDC,qBAAxD,MAAwE,KAAxE,MAA8EokC,uBAA9E,MAAgG,KAAhG,MAAsGJ,mBAAtG,aAA2HrkC,qBAA3H,MAA2I,UAA3I,MAAsJmkC,uBAAtJ,MAAwK,KAAxK,MAA8KlkC,wBAA9K,MAAiM,KAAjM,MAAuMmkC,0BAAvM,MAA4N,KAA5N,MAAkO9jC,wBAAlO,aAA2PG,oBAA3P,aAAiRC,oBAAjR,aAAuSgG,qBAAvS,SAA8To9B,EAA9T,EAA8TA,gBAAiBvjC,EAA/U,EAA+UA,WAAY3C,EAA3V,EAA2VA,YAA3V,IAAwW+I,eAAxW,SAAyXnG,EAAzX,EAAyXA,eAAgBkE,EAAzY,EAAyYA,mBAAoBN,EAA7Z,EAA6ZA,YAAaC,EAA1a,EAA0aA,aAAcC,EAAxb,EAAwbA,kBAAmBC,EAA3c,EAA2cA,iBAAkBC,EAA7d,EAA6dA,sBAA7d,IAAof7D,gBAuCpf,OAAOsD,GAAoB55rC,EAAG,CAC1B2vS,IAAK3vS,EACL81rC,SACAC,aACAC,gBACAokC,kBACAJ,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACAlgC,WAAW,EACX5D,mBACA3C,kBAnDuC,IAAlB+I,EACnB,CACEx8lC,OAAO,EACP8lB,MAAM,EACN,kBAAkB,EAClB3/D,OAAO,EACPuqL,OAAO,EACPn8D,QAAQ,EACRib,OAAO,EACPwI,QAAQ,EACRsve,KAAK,EACL1hjB,MAAM,EACN5/D,MAAM,EACNu1C,KAAK,EACL67I,MAAM,EACN0iE,UAAU,EACVhgN,QAAQ,IAEQ,IAAlB0imC,EACI,GACAA,EAgCNo9B,kBACAvjC,aACA3C,cACAuG,gBAlC+B,IAAZwC,GAAgC,QAAZA,EAEnC,CACIr6tB,QAAQ,EACRp6D,SAAS,EACT2yxB,aAAa,EACbW,gBAAgB,EAChBV,qBAAkC,QAAZ6B,EACtB5B,gBAAgB,EAChBC,gBAAgB,EAChBC,mBAAmB,EACnBC,oBAAoB,EACpBC,sBAAsB,IAEhB,IAAZwB,EACI,GACAA,EAmBNnG,iBACAC,eACAC,eACAgE,qBACAN,cACAC,eACAC,oBACAC,mBACAC,wBACA7D,qBAlEJ,MAAsgB,kBAAM,GAA5gB,EAmEIC,mBAAmB,IAI3B,SAASukC,GAAiBpqpC,GAAqE,IAA9D,IAAI0npC,OAAgB1iuC,EAAeJ,EAAQo7E,EAAI,GAAQ9zE,EAAI,EAAUA,EAAI8zE,EAAIj1E,QAAQ,CAAE,IAAMm1E,EAAKF,EAAI9zE,GAAUH,EAAKi0E,EAAI9zE,EAAI,GAAY,GAARA,GAAK,GAAe,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAAiB,OAA+B,WAAPs7E,GAA0B,mBAAPA,GAA2BwnpC,EAAgB9iuC,EAAOA,EAAQmH,EAAGnH,IAA0B,SAAPs7E,GAAwB,iBAAPA,IAAyBt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAa,EAAAtvB,GAAMsF,KAAN,SAAWw9tC,GAAX,OAA6BxzsC,OAAQwzsC,OAAgB1iuC,GAAe,OAAOJ,EAC7f,SAASi9C,GAAGz4C,EAAM2C,GAAuB,IAAnBmqB,EAAmB,uDAAVgZ,SACrBgG,EAAU,CAAEylQ,SAAS,EAAMD,SAAS,GAE1C,OADAxkR,EAAOg8E,iBAAiB9oG,EAAM2C,EAAImpC,GAC3B,kBAAMhf,EAAOi8E,oBAAoB/oG,EAAM2C,EAAImpC,IAEtD,IAAMs3pC,GAAiC,4NAKnCC,GAAU,CACVv6rC,IAAK,GACLy8S,MAFU,WAIN,OADAz9R,QAAQ7Z,MAAMm1rC,KACN,GAEZlK,QANU,WAQN,OADApxqC,QAAQ7Z,MAAMm1rC,IACP,MAEXhK,kBAVU,WAWNtxqC,QAAQ7Z,MAAMm1rC,KAElBr/rC,IAbU,WAeN,OADA+jB,QAAQ7Z,MAAMm1rC,KACP,GAEX34nC,MAjBU,WAkBN3iD,QAAQ7Z,MAAMm1rC,MAatB,SAAS69B,GAAWj3sC,EAAMsjI,GAAoB,IAAdxhH,EAAc,uDAAJ,GAClCy4D,EAAU,KACV8/E,EAAW,EACf,OAAO,WAAmB,2BAANv5J,EAAM,yBAANA,EAAM,gBACtB,IAAM80B,EAAM/xB,KAAK+xB,MACZykI,IAAgC,IAApBv4I,EAAQklJ,UACrB3M,EAAWzkI,GAEf,IAAM+uI,EAAYrhC,GAAQ1tG,EAAMykI,GAC1Br7K,EAAUlJ,KACZ6uL,GAAa,GAAKA,EAAYrhC,GAC1B/oD,IACA28nC,GAAe38nC,GACfA,EAAU,MAEd8/E,EAAWzkI,EACX51B,EAAKjiB,MAAMiB,EAAS8hB,IAEdy5E,IAAgC,IAArBz4D,EAAQi9I,WACzBxkF,EAAU48nC,IAAa,WACnB98iC,GAA+B,IAApBv4I,EAAQklJ,QAAoB,EAAInjK,KAAK+xB,MAChD2kD,EAAU,KACVv6E,EAAKjiB,MAAMiB,EAAS8hB,KACrB6jK,KAIf,SAAS20gC,GAAWx2qC,EAAQ1oB,EAAKwB,EAAG29rC,GAAyB,IAAdnsvB,EAAc,uDAAR5ob,OAC3CyqQ,EAAWm+K,EAAIl5c,OAAO0uB,yBAAyBE,EAAQ1oB,GAa7D,OAZAgzc,EAAIl5c,OAAOyJ,eAAemlB,EAAQ1oB,EAAKm/rC,EACjC39rC,EACA,CACE4B,IADF,SACMhM,GAAO,WACP2luC,IAAa,WACTv7tC,EAAE4B,IAAI1G,KAAK,EAAMtF,KAClB,GACCy9R,GAAYA,EAASzxR,KACrByxR,EAASzxR,IAAI1G,KAAKhB,KAAMtE,MAIjC,kBAAM8nsC,GAAWx2qC,EAAQ1oB,EAAK60R,GAAY,IAAI,IAEzD,SAASiD,GAAMnvQ,EAAQze,EAAM64M,GACzB,IACI,KAAM74M,KAAQye,GACV,OAAO,aAGX,IAAMksQ,EAAWlsQ,EAAOze,GAClBoxL,EAAUynB,EAAY8xE,GAW5B,MAVuB,oBAAZv5F,IACPA,EAAQzhM,UAAYyhM,EAAQzhM,WAAa,GACzCC,OAAO+uB,iBAAiByyK,EAAS,CAC7B8jgC,mBAAoB,CAChB57rC,YAAY,EACZpM,MAAOy9R,MAInBlsQ,EAAOze,GAAQoxL,EACR,WACH3yK,EAAOze,GAAQ2qR,GAGvB,MAAO+lnB,GACH,OAAO,cA5EO,qBAAXxw3B,QAA0BA,OAAO+pL,OAAS/pL,OAAO2pD,UACxDkrnC,GAAU,IAAI9q/B,MAAM8q/B,GAAS,CACzBx/rC,IADyB,SACrBipB,EAAQ61H,EAAM2/X,GAId,MAHa,QAAT3/X,GACA76H,QAAQ7Z,MAAMm1rC,IAEXjrnC,QAAQt0E,IAAIipB,EAAQ61H,EAAM2/X,OA0E7C,IAAImhrB,GAAe51qC,KAAK+xB,IAIxB,SAASuxP,GAAgBimK,GACrB,IAAMvhK,EAAMuhK,EAAItxa,SAChB,MAAO,CACHzrB,KAAMw7R,EAAIq9C,iBACJr9C,EAAIq9C,iBAAiBzrC,gBACD7rT,IAApBw7c,EAAI99K,YACA89K,EAAI99K,YACJ0n8B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAAh4R,GAAC,OAAIA,EAAExW,iBAAiB,SAAU,SAAA8jlB,GAAE,OAAIA,EAAG1jS,eAClFu56B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAAu1S,GAAE,OAAIA,EAAG70gB,MAAM,iBAAkB,SAAA80gB,GAAE,OAAIA,EAAGlrS,eAAe,iBAAkB,SAAAmrS,GAAE,OAAIA,EAAG7jS,eAC7Hu56B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAA+q7B,GAAE,OAAIA,EAAGrqpC,MAAM,iBAAkB,SAAAsqpC,GAAE,OAAIA,EAAGp56B,eACnF,EACZrzL,IAAKyhL,EAAIq9C,iBACHr9C,EAAIq9C,iBAAiBxrC,eACD9rT,IAApBw7c,EAAI79K,YACA69K,EAAI79K,YACJyn8B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAAir7B,GAAE,OAAIA,EAAGz5tC,iBAAiB,SAAU,SAAA+5tC,GAAE,OAAIA,EAAG156B,cACpFs56B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAAwr7B,GAAG,OAAIA,EAAI9qpC,MAAM,iBAAkB,SAAA+qpC,GAAG,OAAIA,EAAInh7B,eAAe,iBAAkB,SAAAoh7B,GAAG,OAAIA,EAAI756B,cACnIs56B,GAAiB,CAACnr7B,EAAK,iBAAkB,SAAA2r7B,GAAG,OAAIA,EAAIjrpC,MAAM,iBAAkB,SAAAkrpC,GAAG,OAAIA,EAAI/56B,cACvF,GAGpB,SAASg84B,KACL,OAAQl1qC,OAAO86T,aACVxjT,SAASz+B,iBAAmBy+B,SAASz+B,gBAAgB0uS,cACrDjwQ,SAASywC,MAAQzwC,SAASywC,KAAKw/N,aAExC,SAAS4t5B,KACL,OAAQn1qC,OAAOyvc,YACVn4b,SAASz+B,iBAAmBy+B,SAASz+B,gBAAgB63H,aACrDp5F,SAASywC,MAAQzwC,SAASywC,KAAK2oD,YAExC,SAAS0kkC,GAAqB18rC,GAC1B,OAAKA,EAGMA,EAAKC,WAAaD,EAAK4wrC,aAC5B5wrC,EACAA,EAAKi5S,cAJA,KAOf,SAASmiJ,GAAUp7b,EAAM+0rC,EAAYC,EAAeokC,EAAiB5kC,GACjE,IAAKx0rC,EACD,OAAO,EAEX,IAAM4yR,EAAK8p6B,GAAqB18rC,GAChC,IAAK4yR,EACD,OAAO,EAEX,IAAM4n8B,EAAmB5B,GAAqB7jC,EAAYC,GAC1D,IAAKR,EAAgB,CACjB,IAAMimC,EAAcrB,GAAmBxm8B,EAAGpiG,QAAQ4oiC,GAClD,OAAOoB,EAAiB5n8B,KAAQ6n8B,EAEpC,IAAMn6N,EAAgBo4N,GAAgB9l8B,EAAI4n8B,GACtCE,GAAmB,EACvB,QAAIp6N,EAAgB,KAGhB84N,IACAsB,EAAkBhC,GAAgB9l8B,EAAIgm8B,GAAqB,KAAMQ,KAEjE94N,GAAiB,GAAKo6N,EAAkB,GAGrCp6N,EAAgBo6N,GAK3B,SAAS/9B,GAAU39rC,EAAG81rC,GAClB,OA/pCiB,IA+pCVA,EAAOz24B,MAAMr/S,GAExB,SAAS49rC,GAAkBh3qC,EAAQkvqC,GAC/B,GAAIjE,EAAajrqC,GACb,OAAO,EAEX,IAAMiU,EAAKi7pC,EAAOz24B,MAAMz4R,GACxB,OAAKkvqC,EAAOj4rC,IAAIg9B,MAGZjU,EAAO8gZ,YACP9gZ,EAAO8gZ,WAAWzma,WAAa2lB,EAAO8vqC,kBAGrC9vqC,EAAO8gZ,YAGLk2xB,GAAkBh3qC,EAAO8gZ,WAAYouxB,IAEhD,SAAS+H,GAAoB98jC,GACzB,OAAO9pI,QAAQ8pI,EAAMm+f,gBAEzB,SAASzwN,KAAuB,WAAdyiC,EAAc,uDAAR5ob,OAChB,aAAc4ob,IAAQA,EAAI4svB,SAAS/lsC,UAAUuO,UAC7C4qc,EAAI4svB,SAAS/lsC,UAAUuO,QAAUjL,MAAMtD,UAClCuO,SAEL,iBAAkB4qc,IAAQA,EAAI6svB,aAAahmsC,UAAUuO,UACrD4qc,EAAI6svB,aAAahmsC,UAAUuO,QAAUjL,MAAMtD,UACtCuO,SAEJgu0B,KAAKv80B,UAAUynB,WAChB80zB,KAAKv80B,UAAUynB,SAAW,WAAa,2BAAToF,EAAS,yBAATA,EAAS,gBACnC,IAAI5jB,EAAO4jB,EAAK,GAChB,KAAM,KAAKA,GACP,MAAM,IAAI3oB,UAAU,0BAExB,GACI,GAAI,IAAS+E,EACT,OAAO,QAELA,EAAOA,GAAQA,EAAK0ma,YAC9B,OAAO,IAInB,SAASs2xB,GAAmBh+rC,EAAG81rC,GAC3B,OAAO7+rC,QAAuB,WAAf+I,EAAE2zM,UAAyBmi/B,EAAO/C,QAAQ/yrC,IAE7D,SAASi+rC,GAAuBj+rC,EAAG81rC,GAC/B,OAAO7+rC,QAAuB,SAAf+I,EAAE2zM,UACb3zM,EAAEiB,WAAajB,EAAE4xrC,cACjB5xrC,EAAEu3S,cACwB,eAA1Bv3S,EAAEu3S,aAAa,QACfu+4B,EAAO/C,QAAQ/yrC,IAEvB,SAASk+rC,GAAcl+rC,GACnB,OAAO/I,QAAQ6juC,GAAiB,CAAC96tC,EAAG,iBAAkB,SAAA27tC,GAAG,OAAIA,EAAI7pC,eAlI/D,iBAAiBn9oC,KAAKhtB,KAAK+xB,MAAM7+C,cACnC0isC,GAAe,kBAAM,IAAI51qC,MAAOC,Y,IAmI9Bw2qC,G,WACF,aAAc,oBACVxksC,KAAKihC,GAAK,EACVjhC,KAAKyksC,WAAa,IAAIp8rC,QACtBrI,KAAK0ksC,WAAa,IAAI9xrC,I,yCAE1B,SAAM6qrC,GACF,OC57CyBgiC,ED47CDz/tC,KAAKyksC,WAAW1gsC,IAAI05rC,GC57CLiiC,ED47CkB,kBAAS,GC17C1D,MAAPD,EAAcA,EAAMC,IAFtB,IAA0BD,EAAcC,I,iBD87C3C,SAAIjiC,GACA,OAAOz9rC,KAAKyksC,WAAWxgsC,IAAIw5rC,K,iBAE/B,SAAIA,EAAYx8pC,GACZ,OAAIjhC,KAAKiE,IAAIw5rC,GACFz9rC,KAAKylT,MAAMg44B,IAGlBpswB,OADOv1b,IAAPmlC,EACQjhC,KAAKihC,KAGLA,EACZjhC,KAAKyksC,WAAW/8rC,IAAI+1rC,EAAYpswB,GAChCrxb,KAAK0ksC,WAAWh9rC,IAAI2pb,EAAOoswB,GACpBpswB,GARP,IAAIA,I,sBAUR,SAASpwZ,GACL,OAAOjhC,KAAK0ksC,WAAW3gsC,IAAIk9B,IAAO,O,mBAEtC,WACIjhC,KAAKyksC,WAAa,IAAIp8rC,QACtBrI,KAAK0ksC,WAAa,IAAI9xrC,IACtB5S,KAAKihC,GAAK,I,wBAEd,WACI,OAAOjhC,KAAKihC,S,KAGpB,SAAS0jqC,GAAcv+rC,GACnB,IAAIw+rC,EAAa,KAIjB,OAHIs8B,GAAiB,CAAC96tC,EAAG,SAAU,SAAA47tC,GAAG,OAAIA,EAAIx6D,aAAa,eAAgB,SAAAy6D,GAAG,OAAIA,KAAO,iBAAkB,SAAAC,GAAG,OAAIA,EAAI76tC,cAAeqz0B,KAAKmqX,wBACtIz+rC,EAAEohqC,cAAc9oqB,OAChBkmsB,EAAax+rC,EAAEohqC,cAAc9oqB,MAC1BkmsB,EASX,SAASE,GAAgB1+rC,GACrB,IAAM2vS,EAAM3vS,EAAEi3S,cACd,IAAKtH,EACD,OAAO,EACX,IAAM6u5B,EAXV,SAA2Bx+rC,GAGvB,IAFA,IACIw+rC,EADAG,EAAiB3+rC,EAEbw+rC,EAAaD,GAAcI,IAC/BA,EAAiBH,EACrB,OAAOG,EAMYC,CAAkB5+rC,GACrC,OAAO2vS,EAAInwR,SAASg/qC,GAExB,SAASK,GAAM7+rC,GACX,IAAM2vS,EAAM3vS,EAAEi3S,cACd,QAAKtH,IAEEA,EAAInwR,SAASxf,IAAM0+rC,GAAgB1+rC,IAE9C,IAAM+7tC,GAAwB,GAC9B,SAASC,GAAkB5ztC,GACvB,IAAM6kuB,EAAS8uf,GAAsB3ztC,GACrC,GAAI6kuB,EACA,OAAOA,EAEX,IAAMrtsB,EAAWtX,OAAOsX,SACpB21e,EAAOjtf,OAAOlgB,GAClB,GAAIw3B,GAA8C,oBAA3BA,EAASC,cAC5B,IACI,IAAM0jzB,EAAU3jzB,EAASC,cAAc,UACvC0jzB,EAAQlktB,QAAS,EACjBz/F,EAAShpB,KAAKkgS,YAAYysiB,GAC1B,IAAMp0V,EAAgBo0V,EAAQp0V,cAC1BA,GAAiBA,EAAc/mf,KAC/BmtgB,EACIpmB,EAAc/mf,IAEtBw3B,EAAShpB,KAAKmgS,YAAYwsiB,GAE9B,MAAOvh1B,IAGX,OAAQ+5tC,GAAsB3ztC,GAAQmtgB,EAAK75f,KAAK4M,QAKpD,SAAS2ysC,KACL,OAAOe,GAAkB,cAAlB,wBAEX,SAAShB,KACL,OAAOgB,GAAkB,gBAAlB,wBAGX,IAAIx/B,GAA6B,SAACC,GAQhC,OAPAA,EAAWA,EAAU,iBAAuB,GAAK,mBACjDA,EAAWA,EAAU,KAAW,GAAK,OACrCA,EAAWA,EAAU,aAAmB,GAAK,eAC7CA,EAAWA,EAAU,oBAA0B,GAAK,sBACpDA,EAAWA,EAAU,KAAW,GAAK,OACrCA,EAAWA,EAAU,OAAa,GAAK,SACvCA,EAAWA,EAAU,OAAa,GAAK,SAChCA,EARwB,CAS9BD,IAAa,IACZE,GAAqC,SAACC,GAkBxC,OAjBAA,EAAmBA,EAAkB,SAAe,GAAK,WACzDA,EAAmBA,EAAkB,UAAgB,GAAK,YAC1DA,EAAmBA,EAAkB,iBAAuB,GAAK,mBACjEA,EAAmBA,EAAkB,OAAa,GAAK,SACvDA,EAAmBA,EAAkB,eAAqB,GAAK,iBAC/DA,EAAmBA,EAAkB,MAAY,GAAK,QACtDA,EAAmBA,EAAkB,UAAgB,GAAK,YAC1DA,EAAmBA,EAAkB,iBAAuB,GAAK,mBACjEA,EAAmBA,EAAkB,eAAqB,GAAK,iBAC/DA,EAAmBA,EAAkB,eAAqB,GAAK,iBAC/DA,EAAmBA,EAAkB,KAAW,IAAM,OACtDA,EAAmBA,EAAkB,IAAU,IAAM,MACrDA,EAAmBA,EAAkB,KAAW,IAAM,OACtDA,EAAmBA,EAAkB,iBAAuB,IAAM,mBAClEA,EAAmBA,EAAkB,UAAgB,IAAM,YAC3DA,EAAmBA,EAAkB,kBAAwB,IAAM,oBACnEA,EAAmBA,EAAkB,cAAoB,IAAM,gBACxDA,EAlBgC,CAmBtCD,IAAqB,IACpBE,GAAqC,SAACC,GAYxC,OAXAA,EAAmBA,EAAkB,QAAc,GAAK,UACxDA,EAAmBA,EAAkB,UAAgB,GAAK,YAC1DA,EAAmBA,EAAkB,MAAY,GAAK,QACtDA,EAAmBA,EAAkB,YAAkB,GAAK,cAC5DA,EAAmBA,EAAkB,SAAe,GAAK,WACzDA,EAAmBA,EAAkB,MAAY,GAAK,QACtDA,EAAmBA,EAAkB,KAAW,GAAK,OACrDA,EAAmBA,EAAkB,WAAiB,GAAK,aAC3DA,EAAmBA,EAAkB,mBAAyB,GAAK,qBACnEA,EAAmBA,EAAkB,SAAe,GAAK,WACzDA,EAAmBA,EAAkB,YAAkB,IAAM,cACtDA,EAZgC,CAatCD,IAAqB,IACpBE,GAAgC,SAACC,GAInC,OAHAA,EAAcA,EAAa,MAAY,GAAK,QAC5CA,EAAcA,EAAa,IAAU,GAAK,MAC1CA,EAAcA,EAAa,MAAY,GAAK,QACrCA,EAJ2B,CAKjCD,IAAgB,IAEnB,SAASm/B,GAAiBvrpC,GAAqE,IAA9D,IAAI0npC,OAAgB1iuC,EAAeJ,EAAQo7E,EAAI,GAAQ9zE,EAAI,EAAUA,EAAI8zE,EAAIj1E,QAAQ,CAAE,IAAMm1E,EAAKF,EAAI9zE,GAAUH,EAAKi0E,EAAI9zE,EAAI,GAAY,GAARA,GAAK,GAAe,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAAiB,OAA+B,WAAPs7E,GAA0B,mBAAPA,GAA2BwnpC,EAAgB9iuC,EAAOA,EAAQmH,EAAGnH,IAA0B,SAAPs7E,GAAwB,iBAAPA,IAAyBt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAa,EAAAtvB,GAAMsF,KAAN,SAAWw9tC,GAAX,OAA6BxzsC,OAAQwzsC,OAAgB1iuC,GAAe,OAAOJ,EAC7f,SAASmtsC,GAAmBzisC,GACxB,MAAO,SAAUA,E,IAokBjBm+rC,GAlkBEuE,G,WACF,aAAc,oBACV9osC,KAAK6B,OAAS,EACd7B,KAAKgd,KAAO,KACZhd,KAAK0a,KAAO,K,uCAEhB,SAAIuiG,GACA,GAAIA,GAAYj9G,KAAK6B,OACjB,MAAM,IAAI+F,MAAM,kCAGpB,IADA,IAAIkgC,EAAU9nC,KAAKgd,KACV7gB,EAAQ,EAAGA,EAAQ8gH,EAAU9gH,IAClC2rC,EAAUu6rC,GAAiB,CAACv6rC,EAAS,iBAAkB,SAAA/pB,GAAC,OAAIA,EAAEhe,SAAU,KAE5E,OAAO+nC,I,qBAEX,SAAQ1hC,GACJ,IAAMgB,EAAO,CACT1L,MAAO0K,EACPm+K,SAAU,KACVxkL,KAAM,MAGV,GADAqG,EAAE2isC,KAAO3hsC,EACLhB,EAAE0lmC,iBAAmB+8F,GAAmBzisC,EAAE0lmC,iBAAkB,CAC5D,IAAMhkkC,EAAU1hC,EAAE0lmC,gBAAgBi9F,KAAKhpsC,KACvCqH,EAAKrH,KAAO+nC,EACZ1gC,EAAKm9K,SAAWn+K,EAAE0lmC,gBAAgBi9F,KAClC3isC,EAAE0lmC,gBAAgBi9F,KAAKhpsC,KAAOqH,EAC1B0gC,IACAA,EAAQy8I,SAAWn9K,QAGtB,GAAIhB,EAAE4na,aACP66xB,GAAmBzisC,EAAE4na,cACrB5na,EAAE4na,YAAY+6xB,KAAKxkhC,SAAU,CAC7B,IAAMz8I,EAAU1hC,EAAE4na,YAAY+6xB,KAAKxkhC,SACnCn9K,EAAKm9K,SAAWz8I,EAChB1gC,EAAKrH,KAAOqG,EAAE4na,YAAY+6xB,KAC1B3isC,EAAE4na,YAAY+6xB,KAAKxkhC,SAAWn9K,EAC1B0gC,IACAA,EAAQ/nC,KAAOqH,QAIfpH,KAAKgd,OACLhd,KAAKgd,KAAKunK,SAAWn9K,GAEzBA,EAAKrH,KAAOC,KAAKgd,KACjBhd,KAAKgd,KAAO5V,EAEE,OAAdA,EAAKrH,OACLC,KAAK0a,KAAOtT,GAEhBpH,KAAK6B,W,wBAET,SAAWuE,GACP,IAAM0hC,EAAU1hC,EAAE2isC,KACb/osC,KAAKgd,OAGL8qB,EAAQy8I,UAUTz8I,EAAQy8I,SAASxkL,KAAO+nC,EAAQ/nC,KAC5B+nC,EAAQ/nC,KACR+nC,EAAQ/nC,KAAKwkL,SAAWz8I,EAAQy8I,SAGhCvkL,KAAK0a,KAAOotB,EAAQy8I,WAdxBvkL,KAAKgd,KAAO8qB,EAAQ/nC,KAChBC,KAAKgd,KACLhd,KAAKgd,KAAKunK,SAAW,KAGrBvkL,KAAK0a,KAAO,MAYhBtU,EAAE2isC,aACK3isC,EAAE2isC,KAEb/osC,KAAK6B,c,KAGPmnsC,GAAU,SAAC/nqC,EAAI04W,GAAL,gBAAqB14W,EAArB,YAA2B04W,IACrCsvzB,G,WACF,aAAc,+BACVjpsC,KAAKkpsC,QAAS,EACdlpsC,KAAK+1N,QAAS,EACd/1N,KAAK23a,MAAQ,GACb33a,KAAKwxN,WAAa,GAClBxxN,KAAKurO,aAAe,IAAIljO,QACxBrI,KAAKmf,QAAU,GACfnf,KAAKmpsC,WAAa,GAClBnpsC,KAAKopsC,SAAW,GAChBppsC,KAAKqpsC,SAAW,IAAIxqsC,IACpBmB,KAAKspsC,SAAW,IAAIzqsC,IACpBmB,KAAKupsC,WAAa,IAAI1qsC,IACtBmB,KAAKwpsC,iBAAmB,SAAC5v/B,GACrBA,EAAUltM,QAAQ,EAAK+8rC,iBACvB,EAAK7gmC,QAET5oG,KAAK4oG,KAAO,WACR,IAAI,EAAKsgmC,SAAU,EAAKnz+B,OAAxB,CA4EA,IAzEA,IAAM32M,EAAO,GACPsqrC,EAAW,IAAI7qsC,IACf8qsC,EAAU,IAAIb,GACdc,EAAY,SAACxjsC,GAGf,IAFA,IAAIwxC,EAAKxxC,EACL4gmB,GAn+CC,OAo+CEA,GAEHA,GADApvjB,EAAKA,GAAMA,EAAGo2X,cACC,EAAKkuxB,OAAOz24B,MAAM7tQ,GAErC,OAAOovjB,GAEL6imB,EAAU,SAACzjsC,GACb,GAAKA,EAAE0na,YAAem3xB,GAAM7+rC,GAA5B,CAGA,IAAMuzY,EAAWs+yB,EAAa7xrC,EAAE0na,YAC1B,EAAKouxB,OAAOz24B,MAAMk/4B,GAAcv+rC,IAChC,EAAK81rC,OAAOz24B,MAAMr/S,EAAE0na,YACpBk5L,EAAS4imB,EAAUxjsC,GACzB,IAAkB,IAAduzY,IAA+B,IAAZqtN,EACnB,OAAO2imB,EAAQG,QAAQ1jsC,GAE3B,IAAMu6rC,EAAKX,GAAoB55rC,EAAG,CAC9B2vS,IAAK,EAAKA,IACVmm5B,OAAQ,EAAKA,OACbC,WAAY,EAAKA,WACjBC,cAAe,EAAKA,cACpBgkC,YAAa,EAAKA,YAClBI,gBAAiB,EAAKA,gBACtBzkC,cAAe,EAAKA,cACpBmkC,gBAAiB,EAAKA,gBACtBlkC,iBAAkB,EAAKA,iBACvBmkC,mBAAoB,EAAKA,mBACzBlgC,WAAW,EACXtD,mBAAmB,EACnBN,iBAAkB,EAAKA,iBACvB3C,iBAAkB,EAAKA,iBACvBmmC,gBAAiB,EAAKA,gBACtBvjC,WAAY,EAAKA,WACjB3C,YAAa,EAAKA,YAClBuG,eAAgB,EAAKA,eACrB3D,eAAgB,EAAKA,eACrBE,aAAc,EAAKA,aACnBD,aAAc,EAAKA,aACnB2D,YAAa,SAAC4J,GACN3F,GAAmB2F,EAAU,EAAK7N,SAClC,EAAK8N,cAAcC,UAAUF,GAE7B1F,GAAuB0F,EAAU,EAAK7N,SACtC,EAAKsK,kBAAkB0D,iBAAiBH,GAExCzF,GAAcl+rC,IACd,EAAK+jsC,iBAAiBC,cAAchksC,EAAE8xrC,WAAY,EAAKni5B,MAG/Dqq5B,aAAc,SAAC9qsB,EAAQwxsB,GACnB,EAAKkD,cAAcK,aAAa/0sB,EAAQwxsB,GACxC,EAAKqD,iBAAiBG,oBAAoBh1sB,IAE9CgrsB,iBAAkB,SAACr2lC,EAAM68lC,GACrB,EAAKN,kBAAkB+D,kBAAkBtgmC,EAAM68lC,MAGnDnG,IACAvhrC,EAAKhT,KAAK,CACNutY,WACAqtN,SACA5/lB,KAAMu5rC,IAEV+I,EAAS/qrC,IAAIgirC,EAAG1/pC,OAGjB,EAAKkoqC,WAAWtnsC,QACnB,EAAKq6rC,OAAO5C,kBAAkB,EAAK6P,WAAWr1rC,SA9EpC,oBAgFE,EAAKw1rC,UAhFP,IAgFd,2BAA+B,KAApBljsC,EAAoB,QACvBoksC,GAAgB,EAAKrrrC,QAAS/Y,EAAG,EAAK81rC,UACrC,EAAKoN,SAASrlsC,IAAImC,EAAE0na,aAGzB+7xB,EAAQzjsC,IArFE,kDAuFE,EAAKijsC,UAvFP,IAuFd,2BAA+B,KAApBjjsC,EAAoB,QACtBqksC,GAAgB,EAAKlB,WAAYnjsC,IACjCoksC,GAAgB,EAAKrrrC,QAAS/Y,EAAG,EAAK81rC,QAGlCuO,GAAgB,EAAKnB,SAAUljsC,GACpCyjsC,EAAQzjsC,GAGR,EAAKmjsC,WAAW5qrC,IAAIvY,GANpByjsC,EAAQzjsC,IA1FF,8BAoGd,IADA,IAAIojN,EAAY,KACTmg/B,EAAQ9nsC,QAAQ,CACnB,IAAIuF,EAAO,KACX,GAAIoiN,EAAW,CACX,IAAMmwL,EAAW,EAAKuizB,OAAOz24B,MAAMj8F,EAAU9tN,MAAMoya,YAC7Ck5L,EAAS4imB,EAAUpg/B,EAAU9tN,QACjB,IAAdi+Y,IAA+B,IAAZqtN,IACnB5/lB,EAAOoiN,GAGf,IAAKpiN,EAED,IADA,IAAIsjsC,EAAWf,EAAQjvrC,KAChBgwrC,GAAU,CACb,IAAMjxoB,EAAQixoB,EAEd,GADAA,EAAWA,EAASnmhC,SAChBk1Y,EAAO,CACP,IAAM9/K,EAAW,EAAKuizB,OAAOz24B,MAAMg0Q,EAAM/9jB,MAAMoya,YAE/C,IAAgB,IADD87xB,EAAUnwoB,EAAM/9jB,OAE3B,SACC,IAAkB,IAAdi+Y,EAAiB,CACtBvyY,EAAOqyjB,EACP,MAGA,IAAMkxoB,EAAgBlxoB,EAAM/9jB,MAC5B,GAAIivsC,EAAc78xB,YACd68xB,EAAc78xB,WAAWzma,WACrBqz0B,KAAKmqX,uBAAwB,CACjC,IAAMD,EAAa+F,EAAc78xB,WAC5B4wF,KAEL,IAAkB,IADD,EAAKw9rB,OAAOz24B,MAAMm/4B,GACd,CACjBx9rC,EAAOqyjB,EACP,SAOxB,IAAKryjB,EAAM,CACP,KAAOuisC,EAAQ3srC,MACX2srC,EAAQiB,WAAWjB,EAAQ3srC,KAAKthB,OAEpC,MAEJ8tN,EAAYpiN,EAAKm9K,SACjBolhC,EAAQiB,WAAWxjsC,EAAK1L,OACxBmusC,EAAQzisC,EAAK1L,OAEjB,IAAMwrC,EAAU,CACZywY,MAAO,EAAKA,MACP3ua,KAAI,SAAC6iH,GAAD,MAAW,CAChB5qF,GAAI,EAAKi7pC,OAAOz24B,MAAM55L,EAAKzkH,MAC3B1L,MAAOmwH,EAAKnwH,UAEX6P,QAAO,SAACsgH,GAAD,OAAW69kC,EAASzlsC,IAAI4nH,EAAK5qF,OACpC11B,QAAO,SAACsgH,GAAD,OAAU,EAAKqwkC,OAAOj4rC,IAAI4nH,EAAK5qF,OAC3CuwL,WAAY,EAAKA,WACZxoN,KAAI,SAAC0oN,GACN,IAAQF,EAAeE,EAAfF,WACR,GAAgC,kBAArBA,EAAWl2G,MAAoB,CACtC,IAAMuvlC,EAAYl8rC,KAAKC,UAAU8iN,EAAUo5+B,WACrCC,EAAiBp8rC,KAAKC,UAAU8iN,EAAUs5+B,kBAC5CH,EAAUhpsC,OAAS2vN,EAAWl2G,MAAMz5G,SAC/BgpsC,EAAYE,GAAgBhspC,MAAM,QAAQl9C,SAC3C2vN,EAAWl2G,MAAMv8D,MAAM,QAAQl9C,SAC/B2vN,EAAWl2G,MAAQo2G,EAAUo5+B,WAIzC,MAAO,CACH7pqC,GAAI,EAAKi7pC,OAAOz24B,MAAM/zF,EAAUtqN,MAChCoqN,WAAYA,MAGfjmN,QAAO,SAACmmN,GAAD,OAAgBg4+B,EAASzlsC,IAAIytN,EAAUzwL,OAC9C11B,QAAO,SAACmmN,GAAD,OAAe,EAAKwq+B,OAAOj4rC,IAAIytN,EAAUzwL,OACrD9hB,QAAS,EAAKA,QACdC,SAEC8nB,EAAQywY,MAAM91a,QACdqlC,EAAQsqL,WAAW3vN,QACnBqlC,EAAQ/nB,QAAQtd,QAChBqlC,EAAQ9nB,KAAKvd,UAGlB,EAAK81a,MAAQ,GACb,EAAKnmN,WAAa,GAClB,EAAK+Z,aAAe,IAAIljO,QACxB,EAAK8W,QAAU,GACf,EAAKkqrC,SAAW,IAAIxqsC,IACpB,EAAKyqsC,SAAW,IAAIzqsC,IACpB,EAAK0qsC,WAAa,IAAI1qsC,IACtB,EAAKuqsC,SAAW,GAChB,EAAK9C,WAAWp/pC,MAEpBlnC,KAAKypsC,gBAAkB,SAACr3rC,GACpB,IAAI2xrC,GAAU3xrC,EAAE4a,OAAQ,EAAKkvqC,QAG7B,OAAQ9prC,EAAElS,MACN,IAAK,gBACD,IAAMxE,EAAQ0W,EAAE4a,OAAO+vR,YAClBylJ,GAAUpwb,EAAE4a,OAAQ,EAAKmvqC,WAAY,EAAKC,cAAe,EAAKokC,iBAAiB,IAChF9kuC,IAAU0W,EAAET,UACZ,EAAKgma,MAAMvra,KAAK,CACZ1Q,MAAOogsC,GAAgB1prC,EAAE4a,OAAQ,EAAK+uqC,cAAe,EAAKC,iBAAkB,EAAKkkC,gBAAiB,EAAKC,mBAAoB,EAAKC,cAAgB1kuC,EAC1I,EAAK4gsC,WACD,EAAKA,WAAW5gsC,EAAOoosC,GAAqB1xrC,EAAE4a,SAC9CtxB,EAAMk9E,QAAQ,QAAS,KAC3Bl9E,EACN0L,KAAMgL,EAAE4a,SAGhB,MAEJ,IAAK,aACD,IAAMA,EAAS5a,EAAE4a,OACbsoa,EAAgBljb,EAAEkjb,cAClB55b,EAAQ0W,EAAE4a,OAAO2wR,aAAa23I,GAClC,GAAsB,UAAlBA,EAA2B,CAC3B,IAAMp1b,EAAO45rC,GAAa9sqC,GACpBozR,EAAUpzR,EAAOozR,QACvB1kT,EAAQkkuC,GAAc5ysC,EAAQozR,EAASlgT,GACvC,IAAMoiuC,EAAgB3C,GAAgB,CAClCjmC,iBAAkB,EAAKA,iBACvBt54B,UACAlgT,SAGJxE,EAAQ+9rC,GAAe,CACnB13Y,SAFc+5Y,GAAgB1prC,EAAE4a,OAAQ,EAAK+uqC,cAAe,EAAKC,iBAAkB,EAAKkkC,gBAAiB,EAAKC,mBAAoBmC,GAGlIx6hC,QAAS96K,EACTtxB,QACAi+rC,YAAa,EAAKA,cAG1B,GAAIn3vB,GAAUpwb,EAAE4a,OAAQ,EAAKmvqC,WAAY,EAAKC,cAAe,EAAKokC,iBAAiB,IAC/E9kuC,IAAU0W,EAAET,SACZ,OAEJ,IAAIioE,EAAO,EAAK2xJ,aAAaxnO,IAAIqO,EAAE4a,QACnC,GAAuB,WAAnBA,EAAOozR,SACW,QAAlBk1I,IACC,EAAKonwB,gBAAgBhhsC,GAAQ,CAC9B,GAAKsxB,EAAOs2oC,gBAIR,OAHAhuuB,EAAgB,SAqBxB,GAfK17W,IACDA,EAAO,CACHxyE,KAAMgL,EAAE4a,OACRwkM,WAAY,GACZs5+B,UAAW,GACXE,iBAAkB,IAEtB,EAAKx5+B,WAAWplN,KAAKwtE,GACrB,EAAK2xJ,aAAa7jO,IAAI0K,EAAE4a,OAAQ4sD,IAEd,SAAlB07W,GACmB,UAAnBtoa,EAAOozR,SAC8B,cAApChuS,EAAET,UAAY,IAAIynC,eACnBpsB,EAAOmvR,aAAa,sBAAuB,SAE1Cu/4B,GAAgB1uqC,EAAOozR,QAASk1I,KACjC17W,EAAK43I,WAAW8jO,GAAiB8lwB,GAAmB,EAAKrl5B,IAAK38P,GAAYpsB,EAAOozR,SAAUhnQ,GAAYk8Y,GAAgB55b,EAAOsxB,EAAQ,EAAK6ysC,iBACrH,UAAlBvqyB,GAA2B,CAC3B,IAAK,EAAK21wB,cACN,IACI,EAAKA,cACDjlqC,SAASkw8B,eAAeg1N,qBAEhC,MAAO9isC,GACH,EAAK6isC,cAAgB,EAAKl15B,IAGlC,IAAM+rP,EAAM,EAAKmpqB,cAAchlqC,cAAc,QACzC7zB,EAAET,UACFmwhB,EAAI3lP,aAAa,QAAS/pS,EAAET,UAEhC,cAAoBlQ,MAAMuN,KAAKge,EAAOsuF,OAAtC,eAA8C,CAAzC,IAAM6vlC,EAAK,KACNt7rC,EAAWmd,EAAOsuF,MAAMkyT,iBAAiB29xB,GACzCC,EAAcp+qC,EAAOsuF,MAAM+vlC,oBAAoBF,GACjDt7rC,IAAaiyhB,EAAIxmb,MAAMkyT,iBAAiB29xB,IACxCC,IAAgBtpqB,EAAIxmb,MAAM+vlC,oBAAoBF,GAE1CvxnC,EAAKkxnC,UAAUK,GADC,KAAhBC,EACwBv7rC,EAGA,CAACA,EAAUu7rC,GAIvCxxnC,EAAKoxnC,iBAAiBG,GAAS,CAACt7rC,EAAUu7rC,GAGlD,cAAoB3psC,MAAMuN,KAAK8yhB,EAAIxmb,OAAnC,eAA2C,CAAtC,IAAM6vlC,EAAK,KACiC,KAAzCn+qC,EAAOsuF,MAAMkyT,iBAAiB29xB,KAC9BvxnC,EAAKkxnC,UAAUK,IAAS,IAKxC,MAEJ,IAAK,YACD,GAAI3owB,GAAUpwb,EAAE4a,OAAQ,EAAKmvqC,WAAY,EAAKC,cAAe,EAAKokC,iBAAiB,GAC/E,OAEJputC,EAAE0nM,WAAWptM,SAAQ,SAACtG,GAAD,OAAO,EAAKklsC,QAAQllsC,EAAGgM,EAAE4a,WAC9C5a,EAAEm5rC,aAAa7+rC,SAAQ,SAACtG,GACpB,IAAMolsC,EAAS,EAAKtP,OAAOz24B,MAAMr/S,GAC3BuzY,EAAWs+yB,EAAa7lrC,EAAE4a,QAC1B,EAAKkvqC,OAAOz24B,MAAMrzS,EAAE4a,OAAO0xe,MAC3B,EAAKw9rB,OAAOz24B,MAAMrzS,EAAE4a,QACtBw1a,GAAUpwb,EAAE4a,OAAQ,EAAKmvqC,WAAY,EAAKC,cAAe,EAAKokC,iBAAiB,IAC/Ez8B,GAAU39rC,EAAG,EAAK81rC,UA/nB9C,SAAsB91rC,EAAG81rC,GACrB,OAA4B,IAArBA,EAAOz24B,MAAMr/S,GA+nBKqlsC,CAAarlsC,EAAG,EAAK81rC,UAGtB,EAAKmN,SAASplsC,IAAImC,IAClBslsC,GAAW,EAAKrC,SAAUjjsC,GAC1B,EAAKmjsC,WAAW5qrC,IAAIvY,IAEf,EAAKijsC,SAASplsC,IAAImO,EAAE4a,UAAuB,IAAZw+qC,GAC/BxH,GAAkB5xrC,EAAE4a,OAAQ,EAAKkvqC,UACjC,EAAKoN,SAASrlsC,IAAImC,IACvB,EAAKgjsC,SAASJ,GAAQwC,EAAQ7xzB,IAC9B+xzB,GAAW,EAAKpC,SAAUljsC,GAG1B,EAAK+Y,QAAQ/S,KAAK,CACdutY,WACA14W,GAAIuqqC,EACJ3J,YAAU5J,EAAa7lrC,EAAE4a,UAAWmrqC,EAAkB/lrC,EAAE4a,eAElDlxB,KAGd,EAAKqtsC,WAAW/8rC,KAAKhG,SAMrCpG,KAAKsrsC,QAAU,SAACllsC,EAAG4mB,GACf,IAAI,EAAK2+qC,qBAAqBC,cAAcxlsC,EAAG,KAE3C,EAAKijsC,SAASplsC,IAAImC,KAAM,EAAKkjsC,SAASrlsC,IAAImC,GAA9C,CAEA,GAAI,EAAK81rC,OAAO3C,QAAQnzrC,GAAI,CACxB,GAAI29rC,GAAU39rC,EAAG,EAAK81rC,QAClB,OAEJ,EAAKoN,SAAS3qrC,IAAIvY,GAClB,IAAIuttB,EAAW,KACX3msB,GAAU,EAAKkvqC,OAAO3C,QAAQvsqC,KAC9B2msB,EAAW,EAAKuoe,OAAOz24B,MAAMz4R,IAE7B2msB,IAA0B,IAAdA,IACZ,EAAKy1e,SAASJ,GAAQ,EAAK9M,OAAOz24B,MAAMr/S,GAAIuttB,KAAa,QAI7D,EAAK01e,SAAS1qrC,IAAIvY,GAClB,EAAKmjsC,WAAW/glC,OAAOpiH,GAEtBo8b,GAAUp8b,EAAG,EAAK+1rC,WAAY,EAAKC,cAAe,EAAKokC,iBAAiB,KACzEp6tC,EAAE8na,WAAWxha,SAAQ,SAACm/rC,GAAD,OAAY,EAAKP,QAAQO,MAC1CvH,GAAcl+rC,IACdA,EAAE8xrC,WAAWhqxB,WAAWxha,SAAQ,SAACm/rC,GAC7B,EAAKF,qBAAqBhtrC,IAAIktrC,EAAQ,GACtC,EAAKP,QAAQO,EAAQzlsC,S,wCAMzC,SAAK4lC,GAAS,WACV,CACI,aACA,aACA,gBACA,kBACA,cACA,gBACA,kBACA,mBACA,qBACA,mBACA,mBACA,kBACA,aACA,cACA,kBACA,eACA,eACA,iBACA,iBACA,MACA,SACA,gBACA,oBACA,mBACA,gBACA,wBACFt/B,SAAQ,SAACpI,GACP,EAAKA,GAAO0nC,EAAQ1nC,Q,oBAG5B,WACItE,KAAKkpsC,QAAS,EACdlpsC,KAAK8rsC,cAAc3r3B,W,sBAEvB,WACIngV,KAAKkpsC,QAAS,EACdlpsC,KAAK8rsC,cAAcC,WACnB/rsC,KAAK4oG,S,sBAET,WACI,OAAO5oG,KAAKkpsC,S,kBAEhB,WACIlpsC,KAAK+1N,QAAS,EACd/1N,KAAK8rsC,cAAcpq5B,S,oBAEvB,WACI1hT,KAAK+1N,QAAS,EACd/1N,KAAK8rsC,cAAcE,SACnBhssC,KAAK4oG,S,mBAET,WACI5oG,KAAKmqsC,iBAAiBx/nC,QACtB3qE,KAAK8rsC,cAAcnhoC,Y,KAG3B,SAAS+goC,GAAWO,EAAS7lsC,GACzB6lsC,EAAQzjlC,OAAOpiH,GACfA,EAAE8na,WAAWxha,SAAQ,SAACm/rC,GAAD,OAAYH,GAAWO,EAASJ,MAEzD,SAASrB,GAAgBrrrC,EAAS/Y,EAAG81rC,GACjC,OAAuB,IAAnB/8qC,EAAQtd,QAELqqsC,GAAiB/srC,EAAS/Y,EAAG81rC,GAExC,SAASgQ,GAAiB/srC,EAAS/Y,EAAG81rC,GAClC,IAAQpuxB,EAAe1na,EAAf0na,WACR,IAAKA,EACD,OAAO,EAEX,IAAMn0B,EAAWuizB,EAAOz24B,MAAMqoH,GAC9B,QAAI3uZ,EAAQ1R,MAAK,SAAC0pE,GAAD,OAAOA,EAAEl2C,KAAO04W,MAG1BuyzB,GAAiB/srC,EAAS2uZ,EAAYouxB,GAEjD,SAASuO,GAAgB/isC,EAAKtB,GAC1B,OAAiB,IAAbsB,EAAI3L,MAEDowsC,GAAiBzksC,EAAKtB,GAEjC,SAAS+lsC,GAAiBzksC,EAAKtB,GAC3B,IAAQ0na,EAAe1na,EAAf0na,WACR,QAAKA,MAGDpma,EAAIzD,IAAI6pa,IAGLq+xB,GAAiBzksC,EAAKoma,IAIjC,SAASo3xB,GAAqBjs/B,GAC1Bsr/B,GAAetr/B,EAEnB,SAASks/B,KACLZ,QAAezosC,EAEnB,IAAMspsC,GAAkB,SAAC3spC,GACrB,IAAK8rpC,GACD,OAAO9rpC,EAcX,OAZsB,WAClB,IACI,OAAOA,EAAE,WAAF,aAEX,MAAOtqC,GACH,GAAIo2rC,KAAwC,IAAxBA,GAAap2rC,GAC7B,OAAO,aAGX,MAAMA,KAMlB,SAASo0tC,GAAiBzrpC,GAAqE,IAA9D,IAAI0npC,OAAgB1iuC,EAAeJ,EAAQo7E,EAAI,GAAQ9zE,EAAI,EAAUA,EAAI8zE,EAAIj1E,QAAQ,CAAE,IAAMm1E,EAAKF,EAAI9zE,GAAUH,EAAKi0E,EAAI9zE,EAAI,GAAY,GAARA,GAAK,GAAe,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAAiB,OAA+B,WAAPs7E,GAA0B,mBAAPA,GAA2BwnpC,EAAgB9iuC,EAAOA,EAAQmH,EAAGnH,IAA0B,SAAPs7E,GAAwB,iBAAPA,IAAyBt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAa,EAAAtvB,GAAMsF,KAAN,SAAWw9tC,GAAX,OAA6BxzsC,OAAQwzsC,OAAgB1iuC,GAAe,OAAOJ,EAC7f,IAAM0wsC,GAAkB,GACxB,SAAS7b,GAAeppjC,GACpB,IACI,GAAI,iBAAkBA,EAAO,CACzB,IAAMpd,EAAOod,EAAMklkC,eACnB,GAAItilC,EAAKloH,OACL,OAAOkoH,EAAK,QAGf,GAAI,SAAUod,GAASA,EAAMpd,KAAKloH,OACnC,OAAOslI,EAAMpd,KAAK,GAG1B,MAAOm1xB,IAEP,OAAO/3wB,GAASA,EAAMn6G,OAE1B,SAASs/qC,GAAqBtgqC,EAASg/kC,GACnC,IAAMuhF,EAAiB,IAAItD,GAC3BmD,GAAgBhgsC,KAAKmgsC,GACrBA,EAAex0pC,KAAK/L,GACpB,IAAIwgqC,EAAuB99qC,OAAOirL,kBAC9BjrL,OAAO+9qC,qBACLC,EAAoB61B,GAAiB,CAAC7zsC,OAAQ,iBAAkB,SAAA3Q,GAAC,OAAIA,EAAEwinC,MAAM,iBAAkB,SAAAl1iB,GAAE,OAAIA,EAAGshnB,YAAY,eAAgB,SAAArhnB,GAAE,OAAIA,EAAG,uBAC/IohnB,GACAh+qC,OAAOg+qC,KACPF,EAAuB99qC,OAAOg+qC,IAElC,IAAM/4nC,EAAW,IAAI64nC,EAAqBpH,IAAgB,SAACxr/B,GACnD5tK,EAAQw2rC,aAAgD,IAAlCx2rC,EAAQw2rC,WAAW5ohC,IAG7C2y/B,EAAe/C,iBAAiB1nrC,KAAKyqrC,EAArCA,CAAqD3y/B,OAUzD,OARAjmI,EAASsrD,QAAQ+r/B,EAAQ,CACrBx55B,YAAY,EACZo7+B,mBAAmB,EACnBhuxB,eAAe,EACfiuxB,uBAAuB,EACvB3y/B,WAAW,EACXD,SAAS,IAENtmI,EAEX,SAASm5nC,GAAT,GAAmE,IAAvCC,EAAuC,EAAvCA,YAAaC,EAA0B,EAA1BA,SAAUj35B,EAAgB,EAAhBA,IAAKmm5B,EAAW,EAAXA,OACpD,IAA2B,IAAvB8Q,EAASC,UACT,OAAO,aAGX,IAKIC,EALEzz8B,EAA0C,kBAAvBuz8B,EAASC,UAAyBD,EAASC,UAAY,GAC1EE,EAA0D,kBAA/BH,EAASI,kBACpCJ,EAASI,kBACT,IACF9txB,EAAY,GAEV+txB,EAAY8zB,GAAW/7B,IAAgB,SAACn4qC,GAC1C,IAAMqgrC,EAAcv/qC,KAAK+xB,MAAQotpC,EACjCH,EAAYztxB,EAAUt2a,KAAI,SAACysE,GAEvB,OADAA,EAAE83nC,YAAcD,EACT73nC,KACPxoD,GACJqyZ,EAAY,GACZ4txB,EAAe,QACfC,GACEjuuB,EAAiBkmuB,GAAgB+7B,GAAW/7B,IAAgB,SAACh0kC,GAC/D,IAAMpkG,EAASujqC,GAAen/jC,GAC9B,EAA6B6ykC,GAAoB7ykC,GAC3CA,EAAIk0gB,eAAe,GACnBl0gB,EAFEiuL,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,QAGZ4t5B,IACDA,EAAevJ,MAEnBrkxB,EAAUlza,KAAK,CACXyL,EAAGwnS,EACH7zQ,EAAG8zQ,EACHr+Q,GAAIi7pC,EAAOz24B,MAAMz4R,GACjBugrC,WAAY5J,KAAiBuJ,IAEjCG,EAA+B,qBAAdG,WAA6Bp8kC,aAAeo8kC,UACvD1K,GAAkBkF,KAClB52kC,aAAegrhC,WACX0mD,GAAkBoF,UAClBpF,GAAkBmF,cAC5Bxu8B,EAAW,CACXxwE,UAAU,KAERmkM,EAAW,CACbz0U,GAAG,YAAaumb,EAAgBnpL,GAChCp9P,GAAG,YAAaumb,EAAgBnpL,GAChCp9P,GAAG,OAAQumb,EAAgBnpL,IAE/B,OAAOqv5B,IAAgB,WACnBh40B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,UAGhC,SAASoorC,GAAT,GAAkI,IAA1FC,EAA0F,EAA1FA,mBAAoB335B,EAAsE,EAAtEA,IAAKmm5B,EAAiE,EAAjEA,OAAQC,EAAyD,EAAzDA,WAAYC,EAA6C,EAA7CA,cAAeokC,EAA8B,EAA9BA,gBAAiBxzB,EAAa,EAAbA,SACjH,IAAkC,IAA9BA,EAASW,iBACT,OAAO,aAGX,IAAMC,GAA2C,IAA9BZ,EAASW,uBACM7xsC,IAA9BkxsC,EAASW,iBACP,GACAX,EAASW,iBACTvg1B,EAAW,GACbyg1B,EAAqB,KAkFzB,OApBAzvsC,OAAO0D,KAAKkhsC,IACPz3rC,QAAO,SAACjH,GAAD,OAAS3C,OAAOy6C,MAAMz6C,OAAO2C,MACpCA,EAAI21L,SAAS,eACM,IAApB2zgC,EAAWtpsC,MACVoI,SAAQ,SAACohsC,GACV,IAAIhz6B,EAAY1hP,GAAY00pC,GACtB70/B,EAnES,SAAC60/B,GAChB,OAAO,SAAC3mkC,GACJ,IAAMn6G,EAASujqC,GAAeppjC,GAC9B,IAAIq7T,GAAUx1a,EAAQmvqC,EAAYC,EAAeokC,GAAiB,GAAlE,CAGA,IAAIhvH,EAAc,KACdu8F,EAAeD,EACnB,GAAI,gBAAiB3mkC,EAAO,CACxB,OAAQA,EAAMqq+B,aACV,IAAK,QACDA,EAAc0xF,GAAa8K,MAC3B,MACJ,IAAK,QACDx8F,EAAc0xF,GAAa+K,MAC3B,MACJ,IAAK,MACDz8F,EAAc0xF,GAAagL,IAG/B18F,IAAgB0xF,GAAa+K,MACzBjL,GAAkB8K,KAAc9K,GAAkBmL,UAClDJ,EAAe,aAEV/K,GAAkB8K,KAAc9K,GAAkBoL,UACvDL,EAAe,YAGE7K,GAAagL,SAEjCjK,GAAoB98jC,KACzBqq+B,EAAc0xF,GAAa+K,OAEX,OAAhBz8F,GACAq8F,EAAqBr8F,GAChBu8F,EAAarxgC,WAAW,UACzB806B,IAAgB0xF,GAAa+K,OAC5BF,EAAarxgC,WAAW,UACrB806B,IAAgB0xF,GAAa8K,SACjCx8F,EAAc,OAGbwxF,GAAkB8K,KAAc9K,GAAkBqL,QACvD78F,EAAcq8F,EACdA,EAAqB,MAEzB,IAAMzlsC,EAAI67rC,GAAoB98jC,GAASA,EAAMm+f,eAAe,GAAKn+f,EACjE,GAAK/+H,EAAL,CAGA,IAAM64B,EAAKi7pC,EAAOz24B,MAAMz4R,GAChBqyR,EAAqBj3S,EAArBi3S,QAASC,EAAYl3S,EAAZk3S,QACjB8l5B,GAAgBsI,EAAhBtI,CAAA,aACIllsC,KAAM8isC,GAAkB+K,GACxB9sqC,KACAppB,EAAGwnS,EACH7zQ,EAAG8zQ,GACiB,OAAhBkyzB,GAAwB,CAAEA,oBAUtB88F,CAAWR,GAC3B,GAAIp/qC,OAAO6/qC,aACP,OAAQvL,GAAkB8K,IACtB,KAAK9K,GAAkBmL,UACvB,KAAKnL,GAAkBoL,QACnBtz6B,EAAYA,EAAUliN,QAAQ,QAAS,WACvC,MACJ,KAAKoqnC,GAAkBwL,WACvB,KAAKxL,GAAkByL,SACnB,OAGZrh1B,EAAShhX,KAAKusC,GAAGmiP,EAAW7hF,EAAS88F,OAElCqv5B,IAAgB,WACnBh40B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,UAGhC,SAASqprC,GAAT,GAA8G,IAAhFC,EAAgF,EAAhFA,SAAU545B,EAAsE,EAAtEA,IAAKmm5B,EAAiE,EAAjEA,OAAQC,EAAyD,EAAzDA,WAAYC,EAA6C,EAA7CA,cAAeokC,EAA8B,EAA9BA,gBAAiBxzB,EAAa,EAAbA,SAwB7F,OAAOr0pC,GAAG,SAvBayspC,GAAgB+7B,GAAW/7B,IAAgB,SAACh0kC,GAC/D,IAAMpkG,EAASujqC,GAAen/jC,GAC9B,GAAKpkG,IACDw1a,GAAUx1a,EAAQmvqC,EAAYC,EAAeokC,GAAiB,GADlE,CAIA,IAAMv/rC,EAAKi7pC,EAAOz24B,MAAMz4R,GACxB,GAAIA,IAAW+oR,GAAOA,EAAIuH,YAAa,CACnC,IAAMsx5B,EAAgBv95B,GAAgB0E,EAAIuH,aAC1Cqx5B,EAAS,CACL1tqC,KACAppB,EAAG+2rC,EAAcr0rC,KACjBixB,EAAGojqC,EAAct6kC,WAIrBq6kC,EAAS,CACL1tqC,KACAppB,EAAGmV,EAAO26R,WACVn8Q,EAAGxe,EAAO46R,gBAGlBol5B,EAASzz6B,QAAU,MACawc,GAExC,SAAS845B,GAAT,KAAmE,IAA7BC,EAA6B,EAA7BA,iBAAsBx3vB,EAAO,EAAPA,IACpDy3vB,GAAS,EACTC,GAAS,EAab,OAAOr2pC,GAAG,SAZcyspC,GAAgB+7B,GAAW/7B,IAAgB,WAC/D,IAAM7zkC,EAASqykC,KACTtonC,EAAQuonC,KACVkL,IAAUx9kC,GAAUy9kC,IAAU1znC,IAC9BwznC,EAAiB,CACbxznC,MAAO35E,OAAO25E,GACdi2C,OAAQ5vH,OAAO4vH,KAEnBw9kC,EAAQx9kC,EACRy9kC,EAAQ1znC,MAEZ,MACiCg8X,GAEzC,IAAM63vB,GAAa,CAAC,QAAS,WAAY,UACnCC,GAAoB,IAAI/msC,QAC9B,SAASgnsC,GAAT,GAAoQ,IAAvOC,EAAuO,EAAvOA,QAASv55B,EAA8N,EAA9NA,IAAKmm5B,EAAyN,EAAzNA,OAAQC,EAAiN,EAAjNA,WAAYC,EAAqM,EAArMA,cAAeokC,EAAsL,EAAtLA,gBAAiBjxB,EAAqK,EAArKA,YAAaC,EAAwJ,EAAxJA,eAAgB9V,EAAwI,EAAxIA,iBAAkBC,EAAsH,EAAtHA,YAAaqT,EAAyG,EAAzGA,SAAUyC,EAA+F,EAA/FA,qBAAsB1T,EAAyE,EAAzEA,cAAemkC,EAA0D,EAA1DA,gBAAiBlkC,EAAyC,EAAzCA,iBAAkBmkC,EAAuB,EAAvBA,mBACzO,SAASt/gB,EAAa15kB,GAClB,IAAIn6G,EAASujqC,GAAeppjC,GACtB+nkC,EAAgB/nkC,EAAM0m+B,UACtBztzB,EAAUpzR,GAAUq9G,GAAYr9G,EAAOozR,SAG7C,GAFgB,WAAZA,IACApzR,EAASA,EAAOqzR,eACfrzR,GACAozR,KACD+u5B,GAAW3urC,QAAQ4/R,GAAW,KAC9BoiJ,GAAUx1a,EAAQmvqC,EAAYC,EAAeokC,GAAiB,GAHlE,CAMA,IAAMxm8B,EAAKhtQ,EACX,KAAIgtQ,EAAGvb,UAAU74P,SAAS2prC,IACrBC,GAAkBx16B,EAAGpiG,QAAQ43gC,IADlC,CAIA,IAAMtvsC,EAAO45rC,GAAa9sqC,GACtB6+F,EAAO+zmC,GAAc5l8B,EAAIomB,EAASlgT,GAClCuksB,GAAY,EACV69hB,EAAgB3C,GAAgB,CAClCjmC,mBACAt54B,UACAlgT,SAEEwguC,EAAY5kC,GAAgB9uqC,EAAQ+uqC,EAAeC,EAAkBkkC,EAAiBC,EAAoBmC,GACnG,UAATpiuC,GAA6B,aAATA,IACpBuksB,EAAYz3qB,EAAOgvG,SAEvBnQ,EAAO4tkC,GAAe,CAClB13Y,SAAU2+a,EACV54hC,QAAS96K,EACTtxB,MAAOmwH,EACP8tkC,gBAEJ+V,EAAY1irC,EAAQyirC,EACd,CAAE5jlC,OAAM44kB,YAAWyqgB,iBACnB,CAAErjlC,OAAM44kB,cACd,IAAMj2rB,EAAOwe,EAAOxe,KACP,UAATtO,GAAoBsO,GAAQi2rB,GAC5B1uZ,EACK/7F,iBADL,oCACmDxrM,EADnD,OAEK9B,SAAQ,SAACstR,GACV,GAAIA,IAAOhtQ,EAAQ,CACf,IAAM6+F,EAAO4tkC,GAAe,CACxB13Y,SAAU2+a,EACV54hC,QAASkyF,EACTt+R,MAAOkkuC,GAAc5l8B,EAAIomB,EAASlgT,GAClCy5rC,gBAEJ+V,EAAY116B,EAAIy16B,EACV,CAAE5jlC,OAAM44kB,WAAYA,EAAWyqgB,eAAe,GAC9C,CAAErjlC,OAAM44kB,WAAYA,UAK1C,SAASirgB,EAAY1irC,EAAQ5sB,GACzB,IAAMuvsC,EAAiBP,GAAkBrrsC,IAAIipB,GAC7C,IAAK2irC,GACDA,EAAe9jlC,OAASzrH,EAAEyrH,MAC1B8jlC,EAAelrgB,YAAcrksB,EAAEqksB,UAAW,CAC1C2qgB,GAAkB1nsC,IAAIslB,EAAQ5sB,GAC9B,IAAM6gC,EAAKi7pC,EAAOz24B,MAAMz4R,GACxBo4qC,GAAgBkK,EAAhBlK,CAAA,2BACOhlsC,GADP,IAEI6gC,SAIZ,IACMmsV,GAD4B,SAAnB4/0B,EAASvolC,MAAmB,CAAC,UAAY,CAAC,QAAS,WAC1Cz7G,KAAI,SAAC8xR,GAAD,OAAeniP,GAAGmiP,EAAWsq6B,GAAgBvkf,GAAe9qa,MAClF655B,EAAgB755B,EAAIuH,YAC1B,IAAKsy5B,EACD,OAAO,WACHxi1B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,QAGhC,IAAMwqrC,EAAqBD,EAAcxxsC,OAAO0uB,yBAAyB8irC,EAAc38f,iBAAiB90sB,UAAW,SAC7G2xsC,EAAiB,CACnB,CAACF,EAAc38f,iBAAiB90sB,UAAW,SAC3C,CAACyxsC,EAAc38f,iBAAiB90sB,UAAW,WAC3C,CAACyxsC,EAAcG,kBAAkB5xsC,UAAW,SAC5C,CAACyxsC,EAAc58f,oBAAoB70sB,UAAW,SAC9C,CAACyxsC,EAAcG,kBAAkB5xsC,UAAW,iBAC5C,CAACyxsC,EAAcI,kBAAkB7xsC,UAAW,aAYhD,OAVI0xsC,GAAsBA,EAAmBnosC,KACzC0lX,EAAShhX,KAAT,MAAAghX,EAAQ,YAAS0i1B,EAAe9msC,KAAI,SAACysE,GAAD,OAAO+tnC,GAAW/tnC,EAAE,GAAIA,EAAE,GAAI,CAC9D/tE,IAD8D,WAE1D09rC,GAAgBvkf,EAAhBukf,CAA8B,CAC1Bp4qC,OAAQhtB,KACR6tmC,WAAW,OAGpB,EAAO+hG,QAEPxK,IAAgB,WACnBh40B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,UAGhC,SAAS4qrC,GAA0BlmjC,GAsB/B,OApBA,SAAiBmmjC,EAAWr7iC,GACxB,GAAKs7iC,GAAiB,oBAClBD,EAAUE,sBAAsBC,iBAC/BF,GAAiB,iBACdD,EAAUE,sBAAsBE,cACnCH,GAAiB,oBACdD,EAAUE,sBAAsBG,iBACnCJ,GAAiB,qBACdD,EAAUE,sBAAsBI,iBAAmB,CACvD,IACMr0sC,EADQsF,MAAMuN,KAAKkhsC,EAAUE,WAAW5hyB,UAC1BhuZ,QAAQ0vrC,GAC5Br7iC,EAAIx7I,QAAQld,QAEX,GAAI+zsC,EAAUO,iBAAkB,CACjC,IACMt0sC,EADQsF,MAAMuN,KAAKkhsC,EAAUO,iBAAiBjiyB,UAChChuZ,QAAQ0vrC,GAC5Br7iC,EAAIx7I,QAAQld,GAEhB,OAAO04J,EAEJ67iC,CAAQ3mjC,EArBG,IAuBtB,SAAS4mjC,GAAgBj/3B,EAAOwq3B,EAAQyK,GACpC,IAAI1lqC,EAAIgjoC,EACR,OAAKvy1B,GAEDA,EAAMo3mB,UACN7n5B,EAAKi7pC,EAAOz24B,MAAMisB,EAAMo3mB,WAExBm7O,EAAU0iC,EAAYlh5B,MAAMisB,GACzB,CACHuy1B,UACAhjoC,OAPO,GAUf,SAAS2vqC,GAAT,KAA0F,IAAxDC,EAAwD,EAAxDA,iBAAkB3U,EAAsC,EAAtCA,OAAQsK,EAA8B,EAA9BA,kBAAuBlvvB,EAAO,EAAPA,IAC/E,IAAKA,EAAIw5vB,gBAAkBx5vB,EAAIw5vB,cAAc3ysC,UACzC,OAAO,aAGX,IAAMoua,EAAa+qC,EAAIw5vB,cAAc3ysC,UAAUoua,WAC/C+qC,EAAIw5vB,cAAc3ysC,UAAUoua,WAAa,IAAI9zN,MAAM8zN,EAAY,CAC3Dtka,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,kBAAsBA,EAAtB,GAAOhnjC,EAAP,KAAa5tJ,EAAb,KACA,EAAwBw0sC,GAAgB56nC,EAASmmnC,EAAQsK,EAAkBG,aAAnE1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAQZ,OAPKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACA7kpC,KAAM,CAAC,CAAE2qI,OAAM5tJ,YAGhB6wB,EAAO/kB,MAAM8tE,EAASg7nC,QAGrC,IAeIn4nC,EAkBAo4nC,EAjCEvkyB,EAAa6qC,EAAIw5vB,cAAc3ysC,UAAUsua,WAC/C6qC,EAAIw5vB,cAAc3ysC,UAAUsua,WAAa,IAAIh0N,MAAMg0N,EAAY,CAC3Dxka,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,IAAO50sC,EAAP,YAAgB40sC,EAAhB,MACA,EAAwBJ,GAAgB56nC,EAASmmnC,EAAQsK,EAAkBG,aAAnE1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAQZ,OAPKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACA9kpC,QAAS,CAAC,CAAEhjB,YAGb6wB,EAAO/kB,MAAM8tE,EAASg7nC,QAIjCz5vB,EAAIw5vB,cAAc3ysC,UAAUy6E,UAC5BA,EAAU0+X,EAAIw5vB,cAAc3ysC,UAAUy6E,QACtC0+X,EAAIw5vB,cAAc3ysC,UAAUy6E,QAAU,IAAI6/H,MAAM7/H,EAAS,CACrD3wE,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,IAAOlllC,EAAP,YAAekllC,EAAf,MACA,EAAwBJ,GAAgB56nC,EAASmmnC,EAAQsK,EAAkBG,aAAnE1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAQZ,OAPKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACArrlC,QAASizC,IAGV7+F,EAAO/kB,MAAM8tE,EAASg7nC,SAKrCz5vB,EAAIw5vB,cAAc3ysC,UAAU6ysC,cAC5BA,EAAc15vB,EAAIw5vB,cAAc3ysC,UAAU6ysC,YAC1C15vB,EAAIw5vB,cAAc3ysC,UAAU6ysC,YAAc,IAAIv4/B,MAAMu4/B,EAAa,CAC7D/osC,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,IAAOlllC,EAAP,YAAekllC,EAAf,MACA,EAAwBJ,GAAgB56nC,EAASmmnC,EAAQsK,EAAkBG,aAAnE1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAQZ,OAPKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACA+sC,YAAanllC,IAGd7+F,EAAO/kB,MAAM8tE,EAASg7nC,SAIzC,IAAME,EAA8B,GAChCC,GAA4B,mBAC5BD,EAA4BZ,gBAAkB/4vB,EAAI+4vB,iBAG9Ca,GAA4B,kBAC5BD,EAA4BX,aAAeh5vB,EAAIg5vB,cAE/CY,GAA4B,sBAC5BD,EAA4BT,iBAAmBl5vB,EAAIk5vB,kBAEnDU,GAA4B,qBAC5BD,EAA4BV,gBAAkBj5vB,EAAIi5vB,kBAG1D,IAAMY,EAAsB,GA6C5B,OA5CA/ysC,OAAOuL,QAAQsnsC,GAA6BvksC,SAAQ,YAAqB,uBAAnBsrhC,EAAmB,KAAV93hC,EAAU,KACrEixsC,EAAoBn5K,GAAW,CAC3BzrnB,WAAYrsa,EAAK/B,UAAUoua,WAC3BE,WAAYvsa,EAAK/B,UAAUsua,YAE/Bvsa,EAAK/B,UAAUoua,WAAa,IAAI9zN,MAAM04/B,EAAoBn5K,GAASzrnB,WAAY,CAC3Etka,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,kBAAsBA,EAAtB,GAAOhnjC,EAAP,KAAa5tJ,EAAb,KACA,EAAwBw0sC,GAAgB56nC,EAAQ06nC,iBAAkBvU,EAAQsK,EAAkBG,aAApF1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAgBZ,OAfKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACA7kpC,KAAM,CACF,CACI2qI,OACA5tJ,MAAO,GAAF,mBACE8zsC,GAA0Bl6nC,IAD5B,CAED55E,GAAS,QAMtB6wB,EAAO/kB,MAAM8tE,EAASg7nC,QAGrC7wsC,EAAK/B,UAAUsua,WAAa,IAAIh0N,MAAM04/B,EAAoBn5K,GAASvrnB,WAAY,CAC3Exka,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,IAAO50sC,EAAP,YAAgB40sC,EAAhB,MACA,EAAwBJ,GAAgB56nC,EAAQ06nC,iBAAkBvU,EAAQsK,EAAkBG,aAApF1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAUZ,OATKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjC4sC,EAAiB,CACb5vqC,KACAgjoC,UACA9kpC,QAAS,CACL,CAAEhjB,MAAO,GAAF,mBAAM8zsC,GAA0Bl6nC,IAAhC,CAA0C55E,QAItD6wB,EAAO/kB,MAAM8tE,EAASg7nC,WAIlC3L,IAAgB,WACnB9tvB,EAAIw5vB,cAAc3ysC,UAAUoua,WAAaA,EACzC+qC,EAAIw5vB,cAAc3ysC,UAAUsua,WAAaA,EACzC7zV,IAAY0+X,EAAIw5vB,cAAc3ysC,UAAUy6E,QAAUA,GAClDo4nC,IAAgB15vB,EAAIw5vB,cAAc3ysC,UAAU6ysC,YAAcA,GAC1D5ysC,OAAOuL,QAAQsnsC,GAA6BvksC,SAAQ,YAAqB,uBAAnBsrhC,EAAmB,KAAV93hC,EAAU,KACrEA,EAAK/B,UAAUoua,WAAa4kyB,EAAoBn5K,GAASzrnB,WACzDrsa,EAAK/B,UAAUsua,WAAa0kyB,EAAoBn5K,GAASvrnB,iBAIrE,SAAS2kyB,GAAT,EAAuE1ysB,GAAM,IAApCw9rB,EAAoC,EAApCA,OAAQsK,EAA4B,EAA5BA,kBACzC6K,EAAS,KAETA,EADkB,cAAlB3ysB,EAAK3kT,SACImi/B,EAAOz24B,MAAMi5M,GAEbw9rB,EAAOz24B,MAAMi5M,EAAKA,MAC/B,IAAM4ysB,EAAgC,cAAlB5ysB,EAAK3kT,SACnBwohC,GAAiB,CAAC7juB,EAAM,SAAU,SAAA6sF,GAAE,OAAIA,EAAGjuS,aAAa,iBAAkB,SAAAkuS,GAAE,OAAIA,EAAGm4H,YACnF4+gB,GAAiB,CAAC7juB,EAAM,SAAU,SAAAoiuB,GAAE,OAAIA,EAAGzj7B,eAAe,iBAAkB,SAAA0j7B,GAAE,OAAIA,EAAGzj7B,aAAa,iBAAkB,SAAA0j7B,GAAE,OAAIA,EAAGzvB,cAC7HC,EAA6B+wB,GAAiB,CAACjxB,EAAa,iBAAkB,SAAAgwB,GAAE,OAAIA,EAAGnjuC,aACvFC,OAAO0uB,yBAAyBy1sC,GAAiB,CAACjxB,EAAa,iBAAkB,SAAAiwB,GAAG,OAAIA,EAAIpjuC,aAAa,2BACzGrC,EACN,OAAe,OAAXu1sC,IACY,IAAZA,GACCC,GACAE,GAGLpzsC,OAAOyJ,eAAe62f,EAAM,qBAAsB,CAC9C32f,aAAcypsC,EAA2BzpsC,aACzCD,WAAY0psC,EAA2B1psC,WACvC/D,IAH8C,WAGxC,WACF,OAAOw+tC,GAAiB,CAAC/wB,EAA4B,SAAU,SAAAgwB,GAAG,OAAIA,EAAIz9tC,KAAK,iBAAkB,SAAA09tC,GAAG,OAAIA,EAAIzguC,MAAM,OAAQ,SAAA0guC,GAAG,OAAIA,EAAI,OAEzIh6tC,IAN8C,SAM1Csla,GAAQ,WACFp5Z,EAAS2utC,GAAiB,CAAC/wB,EAA4B,SAAU,SAAAmwB,GAAG,OAAIA,EAAIj6tC,KAAK,iBAAkB,SAAA+6tC,GAAG,OAAIA,EAAIzhuC,MAAM,OAAQ,SAAA0huC,GAAG,OAAIA,EAAI,EAAM11zB,MACnJ,GAAe,OAAXqkyB,IAA+B,IAAZA,EACnB,IACI7K,EAAkBS,iBAAiBj6xB,EAAQqkyB,GAE/C,MAAOjpsC,IAGX,OAAOwL,KAGRwxrC,IAAgB,WACnBhnsC,OAAOyJ,eAAe62f,EAAM,qBAAsB,CAC9C32f,aAAcypsC,EAA2BzpsC,aACzCD,WAAY0psC,EAA2B1psC,WACvC/D,IAAKytsC,EAA2BztsC,IAChC2D,IAAK8psC,EAA2B9psC,UAzB7B,aA6Bf,SAAS+psC,GAAT,KAAwH,IAAhFC,EAAgF,EAAhFA,mBAAoBxV,EAA4D,EAA5DA,OAAQyV,EAAoD,EAApDA,oBAAqBnL,EAA+B,EAA/BA,kBAAwBlvvB,EAAO,EAAPA,IACvGruC,EAAcquC,EAAIs6vB,oBAAoBzzsC,UAAU8qa,YACtDquC,EAAIs6vB,oBAAoBzzsC,UAAU8qa,YAAc,IAAIxwN,MAAMwwN,EAAa,CACnEhha,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,kBAAoCA,EAApC,GAAO9uhC,EAAP,KAAiBvmL,EAAjB,KAAwBqlC,EAAxB,KACA,GAAI4wqC,EAAoB1tsC,IAAIg+K,GACxB,OAAOgnP,EAAYhha,MAAM8tE,EAAS,CAACksG,EAAUvmL,EAAOqlC,IAExD,MAAwB4vqC,GAAgB4xB,GAAiB,CAACxspC,EAAS,SAAU,SAAA4spC,GAAG,OAAIA,EAAIvyB,YAAY,iBAAkB,SAAA2xB,GAAG,OAAIA,EAAItxB,oBAAoBvU,EAAQsK,EAAkBG,aAAvK1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAaZ,OAZKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjCytC,EAAmB,CACfzwqC,KACAgjoC,UACAv8pC,IAAK,CACDu6K,WACAvmL,QACAqlC,YAEJ5kC,MAAO8zsC,GAA0Bl6nC,EAAQq6nC,cAG1CpjrC,EAAO/kB,MAAM8tE,EAASg7nC,QAGrC,IAAM/nyB,EAAiBsuC,EAAIs6vB,oBAAoBzzsC,UAAU6qa,eAqBzD,OApBAsuC,EAAIs6vB,oBAAoBzzsC,UAAU6qa,eAAiB,IAAIvwN,MAAMuwN,EAAgB,CACzE/ga,MAAOm9rC,IAAgB,SAACp4qC,EAAQ+oD,EAASg7nC,GACrC,IAAO9uhC,EAAP,YAAmB8uhC,EAAnB,MACA,GAAIY,EAAoB1tsC,IAAIg+K,GACxB,OAAO+mP,EAAe/ga,MAAM8tE,EAAS,CAACksG,IAE1C,MAAwB0uhC,GAAgB4xB,GAAiB,CAACxspC,EAAS,SAAU,SAAAispC,GAAG,OAAIA,EAAI5xB,YAAY,iBAAkB,SAAA6xB,GAAG,OAAIA,EAAIxxB,oBAAoBvU,EAAQsK,EAAkBG,aAAvK1lqC,EAAR,EAAQA,GAAIgjoC,EAAZ,EAAYA,QAWZ,OAVKhjoC,IAAc,IAARA,GAAegjoC,IAAwB,IAAbA,IACjCytC,EAAmB,CACfzwqC,KACAgjoC,UACA/0pC,OAAQ,CACJ+yK,YAEJ9lL,MAAO8zsC,GAA0Bl6nC,EAAQq6nC,cAG1CpjrC,EAAO/kB,MAAM8tE,EAASg7nC,QAG9B3L,IAAgB,WACnB9tvB,EAAIs6vB,oBAAoBzzsC,UAAU8qa,YAAcA,EAChDquC,EAAIs6vB,oBAAoBzzsC,UAAU6qa,eAAiBA,KAG3D,SAAS6oyB,GAAT,GAAkI,IAA1FC,EAA0F,EAA1FA,mBAAoB3V,EAAsE,EAAtEA,WAAYC,EAA0D,EAA1DA,cAAeokC,EAA2C,EAA3CA,gBAAiBtkC,EAA0B,EAA1BA,OAAQ8Q,EAAkB,EAAlBA,SAAUj35B,EAAQ,EAARA,IAChH98F,EAAUms/B,IAAgB,SAACllsC,GAAD,OAAUihuC,GAAW/7B,IAAgB,SAACj+jC,GAClE,IAAMn6G,EAASujqC,GAAeppjC,GAC9B,GAAKn6G,IACDw1a,GAAUx1a,EAAQmvqC,EAAYC,EAAeokC,GAAiB,GADlE,CAIA,IAAQ/jhC,EAA6CzvL,EAA7CyvL,YAAas1/B,EAAgC/krC,EAAhC+krC,OAAQC,EAAwBhlrC,EAAxBglrC,MAAOC,EAAiBjlrC,EAAjBilrC,aACpCH,EAAmB,CACf5xsC,OACA+gC,GAAIi7pC,EAAOz24B,MAAMz4R,GACjByvL,cACAs1/B,SACAC,QACAC,qBAEJjF,EAAS/2kC,OAAS,QAChBm3P,EAAW,CACbz0U,GAAG,OAAQsgK,EAAQ,GAAI88F,GACvBp9P,GAAG,QAASsgK,EAAQ,GAAI88F,GACxBp9P,GAAG,SAAUsgK,EAAQ,GAAI88F,GACzBp9P,GAAG,eAAgBsgK,EAAQ,GAAI88F,GAC/Bp9P,GAAG,aAAcsgK,EAAQ,GAAI88F,IAEjC,OAAOqv5B,IAAgB,WACnBh40B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,UAGhC,SAAS6srC,GAAT,GAA2C,IAAfC,EAAe,EAAfA,OAAQp85B,EAAO,EAAPA,IAC1BuhK,EAAMvhK,EAAIuH,YAChB,IAAKg6J,EACD,OAAO,aAGX,IAAMlqF,EAAW,GACXgl1B,EAAU,IAAI/psC,QACdgqsC,EAAmB/6vB,EAAIioF,SAC7BjoF,EAAIioF,SAAW,SAAkBlC,EAAQpwgB,EAAQqlrC,GAC7C,IAAMC,EAAW,IAAIF,EAAiBh1qB,EAAQpwgB,EAAQqlrC,GAStD,OARAF,EAAQ1qsC,IAAI6qsC,EAAU,CAClBl1qB,SACAnqY,OAA0B,kBAAXjmI,EACfqlrC,cACAE,WAA8B,kBAAXvlrC,EACbA,EACAte,KAAKC,UAAUnN,MAAMuN,KAAK,IAAIwmJ,WAAWvoI,OAE5CslrC,GAEX,IAAME,EAAiBr26B,GAAM2Z,EAAI+mP,MAAO,OAAO,SAAU3jQ,GACrD,OAAO,SAAUo56B,GAQb,OAPA8uB,GAAaj8B,IAAgB,WACzB,IAAM3vnC,EAAI28nC,EAAQrusC,IAAIwusC,GAClB98nC,IACA08nC,EAAO18nC,GACP28nC,EAAQ5plC,OAAO+plC,OAEnB,GACGp56B,EAASlxR,MAAMjI,KAAM,CAACuysC,QAOrC,OAJAnl1B,EAAShhX,MAAK,WACVkrc,EAAIioF,SAAW8yqB,KAEnBjl1B,EAAShhX,KAAKqmsC,GACPrN,IAAgB,WACnBh40B,EAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,UAGhC,SAASqtrC,GAAsBvy0B,GAC3B,IAAQpqF,EAA0EoqF,EAA1EpqF,IAAKmm5B,EAAqE/7zB,EAArE+7zB,OAAQC,EAA6Dh8zB,EAA7Dg8zB,WAAYC,EAAiDj8zB,EAAjDi8zB,cAAeokC,EAAkCrg2B,EAAlCqg2B,gBAAiB7tB,EAAiBxy0B,EAAjBwy0B,YAC7DC,GAAY,EACVC,EAAkBzN,IAAgB,WACpC,IAAMr85B,EAAYgN,EAAIw0pB,eACtB,MAAKxhqB,GAAc6p6B,GAAa2vB,GAAiB,CAACx57B,EAAW,iBAAkB,SAAAm57B,GAAG,OAAIA,EAAIl1a,gBAA1F,CAEA4lZ,EAAY7p6B,EAAUikhB,cAAe,EAGrC,IAFA,IAAMg5H,EAAS,GACT5w6B,EAAQ2zR,EAAUmiqB,YAAc,EAC7Blo8B,EAAI,EAAGA,EAAIoS,EAAOpS,IAAK,CAC5B,IAAMyyL,EAAQszG,EAAUoiqB,WAAWno8B,GAC3B8vsC,EAAyDr9gC,EAAzDq9gC,eAAgBC,EAAyCt9gC,EAAzCs9gC,YAAaC,EAA4Bv9gC,EAA5Bu9gC,aAAcC,EAAcx9gC,EAAdw9gC,UACnCzwwB,GAAUswwB,EAAgB3W,EAAYC,EAAeokC,GAAiB,IAClFh+xB,GAAUwwwB,EAAc7W,EAAYC,EAAeokC,GAAiB,IAGxEx6S,EAAO556B,KAAK,CACR2T,MAAOm8qC,EAAOz24B,MAAMqt5B,GACpBC,cACAv2sC,IAAK0/rC,EAAOz24B,MAAMut5B,GAClBC,cAGRN,EAAY,CAAE3sR,eAGlB,OADA6sR,IACOl6pC,GAAG,kBAAmBk6pC,GAEjC,SAAS+vB,GAAT,GAA8D,IAAzB7s7B,EAAyB,EAAzBA,IAAK8s7B,EAAoB,EAApBA,gBAChCvrxB,EAAMvhK,EAAIuH,YAChB,OAAKg6J,GAAQA,EAAIspxB,eAEMxk8B,GAAMk7K,EAAIspxB,eAAgB,UAAU,SAAUzn8B,GACjE,OAAO,SAAU3qR,EAAMlQ,EAAa0tC,GAChC,IACI62rC,EAAgB,CACZhjiC,OAAQ,CACJrxL,UAIZ,MAAOpG,IAEP,OAAO+wR,EAASlxR,MAAMjI,KAAM,CAACwO,EAAMlQ,EAAa0tC,QAZ7C,aAiBf,SAASynqC,GAActtsC,GAAgB,IAC7BypsC,EAAgBzpsC,EAAE4vS,IAAIuH,YAC5B,IAAKsy5B,EACD,OAAO,aAGX,IANmC,EAM7B8D,EAAmBpH,GAAqBnmsC,EAAGA,EAAE4vS,KAC7C695B,EAAmB9G,GAAiB3msC,GACpC0tsC,EAA0BpG,GAA6BtnsC,GACvD2tsC,EAAgBpF,GAAmBvosC,GACnC4tsC,EAAwBlF,GAA2B1osC,EAAG,CACxDmxc,IAAKs4vB,IAEHoE,EAAe3E,GAAkBlpsC,GACjC8tsC,EAA0BpC,GAA6B1rsC,GACvD+tsC,EAAqBtD,GAAuBzqsC,EAAG,CAAEmxc,IAAKs4vB,IACtDuE,EAA4B/C,GAA8BjrsC,EAAGA,EAAE4vS,KAC/Dq+5B,EAA2B3C,GAA6BtrsC,EAAG,CAC7Dmxc,IAAKs4vB,IAEHyE,EAAelusC,EAAEmusC,aACjBpC,GAAiB/rsC,GACjB,aAEAousC,EAAoB7B,GAAsBvssC,GAC1C28tC,EAAwBF,GAA0Bz8tC,GAClDqusC,EAAiB,GA1BY,cA2BdrusC,EAAEmnM,SA3BY,IA2BnC,2BAAgC,KAArBE,EAAqB,QAC5BgngC,EAAeposC,KAAKohM,EAAO75H,SAAS65H,EAAO5oK,SAAUgrqC,EAAepigC,EAAOxhK,WA5B5C,8BA8BnC,OAAOo5pC,IAAgB,WACnBgH,GAAgB1/rC,SAAQ,SAAC9G,GAAD,OAAOA,EAAE+kE,WACjC+ooC,EAAiBv5/B,aACjBy5/B,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAE,IACAuuB,IACAtuB,EAAe9nsC,SAAQ,SAAC2Y,GAAD,OAAOA,UAGtC,SAAS8qrC,GAAiBttjC,GACtB,MAA+B,qBAAjBn0H,OAAOm0H,GAEzB,SAASqujC,GAA4BrujC,GACjC,OAAOxlJ,QAAgC,qBAAjBqxB,OAAOm0H,IACzBn0H,OAAOm0H,GAAM1kJ,WACb,eAAgBuwB,OAAOm0H,GAAM1kJ,WAC7B,eAAgBuwB,OAAOm0H,GAAM1kJ,W,IAG/BknsC,G,WACF,WAAYC,GAAc,oBACtBtlsC,KAAKslsC,aAAeA,EACpBtlsC,KAAKulsC,sBAAwB,IAAIl9rC,QACjCrI,KAAKwlsC,sBAAwB,IAAIn9rC,Q,yCAErC,SAAMitf,EAAQmwsB,EAAUC,EAAeC,GACnC,IAAMC,EAAkBF,GAAiB1lsC,KAAK6lsC,mBAAmBvwsB,GAC3DwwsB,EAAkBH,GAAiB3lsC,KAAK+lsC,mBAAmBzwsB,GAC7Dr0d,EAAK2kqC,EAAgB7hsC,IAAI0hsC,GAM7B,OALKxkqC,IACDA,EAAKjhC,KAAKslsC,eACVM,EAAgBl+rC,IAAI+9rC,EAAUxkqC,GAC9B6kqC,EAAgBp+rC,IAAIu5B,EAAIwkqC,IAErBxkqC,I,oBAEX,SAAOq0d,EAAQmwsB,GAAU,WACfG,EAAkB5lsC,KAAK6lsC,mBAAmBvwsB,GAC1CwwsB,EAAkB9lsC,KAAK+lsC,mBAAmBzwsB,GAChD,OAAOmwsB,EAASz8rC,KAAI,SAACi4B,GAAD,OAAQ,EAAKwkR,MAAM6vM,EAAQr0d,EAAI2kqC,EAAiBE,Q,yBAExE,SAAYxwsB,EAAQr0d,EAAIj4B,GACpB,IAAM88rC,EAAkB98rC,GAAOhJ,KAAK+lsC,mBAAmBzwsB,GACvD,GAAkB,kBAAPr0d,EACP,OAAOA,EACX,IAAMwkqC,EAAWK,EAAgB/hsC,IAAIk9B,GACrC,OAAKwkqC,IACO,I,0BAGhB,SAAanwsB,EAAQ/wN,GAAK,WAChBuh6B,EAAkB9lsC,KAAK+lsC,mBAAmBzwsB,GAChD,OAAO/wN,EAAIv7R,KAAI,SAACi4B,GAAD,OAAQ,EAAK+kqC,YAAY1wsB,EAAQr0d,EAAI6kqC,Q,mBAExD,SAAMxwsB,GACF,IAAKA,EAGD,OAFAt1f,KAAKulsC,sBAAwB,IAAIl9rC,aACjCrI,KAAKwlsC,sBAAwB,IAAIn9rC,SAGrCrI,KAAKulsC,sBAAsB/8kC,OAAO8sY,GAClCt1f,KAAKwlsC,sBAAsBh9kC,OAAO8sY,K,gCAEtC,SAAmBA,GACf,IAAIswsB,EAAkB5lsC,KAAKulsC,sBAAsBxhsC,IAAIuxf,GAKrD,OAJKswsB,IACDA,EAAkB,IAAIhzrC,IACtB5S,KAAKulsC,sBAAsB79rC,IAAI4tf,EAAQswsB,IAEpCA,I,gCAEX,SAAmBtwsB,GACf,IAAIwwsB,EAAkB9lsC,KAAKwlsC,sBAAsBzhsC,IAAIuxf,GAKrD,OAJKwwsB,IACDA,EAAkB,IAAIlzrC,IACtB5S,KAAKwlsC,sBAAsB99rC,IAAI4tf,EAAQwwsB,IAEpCA,M,KAIf,SAASi9B,GAAiBjspC,GAAqE,IAA9D,IAAI0npC,OAAgB1iuC,EAAeJ,EAAQo7E,EAAI,GAAQ9zE,EAAI,EAAUA,EAAI8zE,EAAIj1E,QAAQ,CAAE,IAAMm1E,EAAKF,EAAI9zE,GAAUH,EAAKi0E,EAAI9zE,EAAI,GAAY,GAARA,GAAK,GAAe,mBAAPg0E,GAAkC,iBAAPA,IAAmC,MAATt7E,EAAiB,OAA+B,WAAPs7E,GAA0B,mBAAPA,GAA2BwnpC,EAAgB9iuC,EAAOA,EAAQmH,EAAGnH,IAA0B,SAAPs7E,GAAwB,iBAAPA,IAAyBt7E,EAAQmH,GAAG,wCAAImoB,EAAJ,yBAAIA,EAAJ,uBAAa,EAAAtvB,GAAMsF,KAAN,SAAWw9tC,GAAX,OAA6BxzsC,OAAQwzsC,OAAgB1iuC,GAAe,OAAOJ,E,IA4Zzf6qsC,GACAy8B,GA5ZEC,G,WACF,aAAc,oBACVjjuC,KAAKomsC,wBAA0B,IAAIf,GAAwBvnQ,IAC3D997B,KAAKqmsC,2BAA6B,IAAIh+rC,Q,6CAE1C,c,6BAEA,c,0BAEA,gB,KAGE49rC,G,WACF,WAAYj6pC,GAAS,oBACjBhsC,KAAKkmsC,QAAU,IAAI79rC,QACnBrI,KAAKmmsC,qBAAuB,IAAI99rC,QAChCrI,KAAKomsC,wBAA0B,IAAIf,GAAwBvnQ,IAC3D997B,KAAKqmsC,2BAA6B,IAAIh+rC,QACtCrI,KAAKsmsC,WAAat6pC,EAAQs6pC,WAC1BtmsC,KAAKumsC,YAAcv6pC,EAAQu6pC,YAC3BvmsC,KAAKwmsC,kBAAoBx6pC,EAAQw6pC,kBACjCxmsC,KAAKymsC,yBAA2Bz6pC,EAAQy6pC,yBACxCzmsC,KAAK0msC,6BAA+B,IAAIrB,GAAwBrlsC,KAAKwmsC,kBAAkBG,YAAYr9xB,WAAWxnZ,KAAK9hB,KAAKwmsC,kBAAkBG,cAC1I3msC,KAAKk8rC,OAASlwpC,EAAQkwpC,OAClBl8rC,KAAKymsC,0BACL/3qC,OAAOs6E,iBAAiB,UAAWhpG,KAAK4msC,cAAc9krC,KAAK9hB,O,6CAGnE,SAAU8hsC,GACN9hsC,KAAKkmsC,QAAQx+rC,IAAIo6rC,GAAU,GACvBA,EAASvssB,eACTv1f,KAAKmmsC,qBAAqBz+rC,IAAIo6rC,EAASvssB,cAAeussB,K,6BAE9D,SAAgBrppC,GACZz4C,KAAK6msC,aAAepupC,I,0BAExB,SAAaqppC,EAAUgF,GACnB9msC,KAAKsmsC,WAAW,CACZlnrC,KAAM,CACF,CACIu6X,SAAU35Y,KAAKk8rC,OAAOz24B,MAAMq84B,GAC5B96lB,OAAQ,KACR5/lB,KAAM0/rC,IAGd3nrC,QAAS,GACTw4Z,MAAO,GACPnmN,WAAY,GACZu1+B,gBAAgB,IAEpBg8B,GAAiB,CAAC/iuC,KAAM,SAAU,SAAA+d,GAAC,OAAIA,EAAE8orC,cAAc,eAAgB,SAAAx7mB,GAAE,OAAIA,EAAGy2mB,MAC5EA,EAASx+B,iBACTw+B,EAASx+B,gBAAgB0jC,oBACzBlF,EAASx+B,gBAAgB0jC,mBAAmBnlsC,OAAS,GACrD7B,KAAKwmsC,kBAAkBS,iBAAiBnF,EAASx+B,gBAAgB0jC,mBAAoBhnsC,KAAKk8rC,OAAOz24B,MAAMq84B,EAASx+B,oB,2BAExH,SAAcjynC,GACV,IAAM61pC,EAA0B71pC,EAChC,GAA0C,UAAtC61pC,EAAwBlspC,KAAK96C,MAC7BgnsC,EAAwBpsrC,SAAWosrC,EAAwBlspC,KAAKlgC,QAEzCu2B,EAAQpkB,OACnC,CAEA,IAAM60qC,EAAW9hsC,KAAKmmsC,qBAAqBpisC,IAAIstC,EAAQpkB,QACvD,GAAK60qC,EAAL,CAEA,IAAMqF,EAAmBnnsC,KAAKonsC,0BAA0BtF,EAAUoF,EAAwBlspC,KAAKmsF,OAC3FggkC,GACAnnsC,KAAKumsC,YAAYY,EAAkBD,EAAwBlspC,KAAKqspC,gB,uCAExE,SAA0BvF,EAAU15rC,GAAG,WACnC,OAAQA,EAAElI,MACN,KAAK0isC,GAAU0E,aACXtnsC,KAAKomsC,wBAAwBz7nC,MAAMm3nC,GACnC9hsC,KAAK0msC,6BAA6B/7nC,MAAMm3nC,GACxC9hsC,KAAKunsC,gBAAgBn/rC,EAAE4yC,KAAK5zC,KAAM06rC,GAClC,IAAMlF,EAASx0rC,EAAE4yC,KAAK5zC,KAAK65B,GAG3B,OAFAjhC,KAAKqmsC,2BAA2B3+rC,IAAIo6rC,EAAUlF,GAC9C58rC,KAAKwnsC,kBAAkBp/rC,EAAE4yC,KAAK5zC,KAAMw1rC,GAC7B,CACHji2B,UAAWvyV,EAAEuyV,UACbz6V,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,CACF/tB,OAAQ61qC,GAAkB4E,SAC1BtorC,KAAM,CACF,CACIu6X,SAAU35Y,KAAKk8rC,OAAOz24B,MAAMq84B,GAC5B96lB,OAAQ,KACR5/lB,KAAMgB,EAAE4yC,KAAK5zC,OAGrB+X,QAAS,GACTw4Z,MAAO,GACPnmN,WAAY,GACZu1+B,gBAAgB,IAI5B,KAAKnE,GAAU1yF,KACf,KAAK0yF,GAAU+E,KACf,KAAK/E,GAAUgF,iBACX,OAAO,EAEX,KAAKhF,GAAUiF,OACX,OAAOz/rC,EAEX,KAAKw6rC,GAAUkF,OAEX,OADA9nsC,KAAK+nsC,WAAW3/rC,EAAE4yC,KAAK9T,QAAS46pC,EAAU,CAAC,KAAM,WAAY,aAAc,WACpE15rC,EAEX,KAAKw6rC,GAAU6E,oBACX,OAAQr/rC,EAAE4yC,KAAK/tB,QACX,KAAK61qC,GAAkB4E,SAoBnB,OAnBAt/rC,EAAE4yC,KAAK57B,KAAK1S,SAAQ,SAACtG,GACjB,EAAK2hsC,WAAW3hsC,EAAG07rC,EAAU,CACzB,WACA,SACA,eAEJ,EAAKyF,gBAAgBnhsC,EAAEgB,KAAM06rC,GAC7B,IAAMlF,EAAS,EAAKyJ,2BAA2BtisC,IAAI+9rC,GACnDlF,GAAU,EAAK4K,kBAAkBphsC,EAAEgB,KAAMw1rC,MAE7Cx0rC,EAAE4yC,KAAK77B,QAAQzS,SAAQ,SAACtG,GACpB,EAAK2hsC,WAAW3hsC,EAAG07rC,EAAU,CAAC,WAAY,UAE9C15rC,EAAE4yC,KAAKw2K,WAAW9kN,SAAQ,SAACtG,GACvB,EAAK2hsC,WAAW3hsC,EAAG07rC,EAAU,CAAC,UAElC15rC,EAAE4yC,KAAK28X,MAAMjra,SAAQ,SAACtG,GAClB,EAAK2hsC,WAAW3hsC,EAAG07rC,EAAU,CAAC,UAE3B15rC,EAEX,KAAK06rC,GAAkBkF,KACvB,KAAKlF,GAAkBmF,UACvB,KAAKnF,GAAkBoF,UAInB,OAHA9/rC,EAAE4yC,KAAKskY,UAAU5ya,SAAQ,SAAC+oE,GACtB,EAAKsynC,WAAWtynC,EAAGqsnC,EAAU,CAAC,UAE3B15rC,EAEX,KAAK06rC,GAAkBqF,eACnB,OAAO,EAEX,KAAKrF,GAAkBsF,iBACvB,KAAKtF,GAAkBuF,iBACvB,KAAKvF,GAAkBpvF,OACvB,KAAKovF,GAAkBwF,eACvB,KAAKxF,GAAkBt+kC,MAEnB,OADAxkH,KAAK+nsC,WAAW3/rC,EAAE4yC,KAAM8mpC,EAAU,CAAC,OAC5B15rC,EAEX,KAAK06rC,GAAkByF,eACvB,KAAKzF,GAAkB0F,iBAGnB,OAFAxosC,KAAK+nsC,WAAW3/rC,EAAE4yC,KAAM8mpC,EAAU,CAAC,OACnC9hsC,KAAKyosC,gBAAgBrgsC,EAAE4yC,KAAM8mpC,EAAU,CAAC,YACjC15rC,EAEX,KAAK06rC,GAAkBrlkB,KACnB,OAAOr1nB,EAEX,KAAK06rC,GAAkB4F,UAInB,OAHAtgsC,EAAE4yC,KAAKgr4B,OAAOt56B,SAAQ,SAAC+oL,GACnB,EAAKsygC,WAAWtygC,EAAOqsgC,EAAU,CAAC,QAAS,WAExC15rC,EAEX,KAAK06rC,GAAkB6F,kBAMnB,OALA3osC,KAAK+nsC,WAAW3/rC,EAAE4yC,KAAM8mpC,EAAU,CAAC,OACnC9hsC,KAAKyosC,gBAAgBrgsC,EAAE4yC,KAAM8mpC,EAAU,CAAC,aACxCihC,GAAiB,CAAC36tC,EAAG,SAAU,SAAAkjlB,GAAE,OAAIA,EAAGtwiB,MAAM,SAAU,SAAAuwiB,GAAE,OAAIA,EAAG3vgB,QAAQ,iBAAkB,SAAA4vgB,GAAE,OAAIA,EAAG9+kB,SAAS,OAAQ,SAAAo0tC,GAAE,OAAIA,GAAG,SAACxlnC,GAC3H,EAAKmtlC,gBAAgBntlC,EAAOwmlC,EAAU,CAAC,kBAEpC15rC,GAKvB,OAAO,I,qBAEX,SAAQwgsC,EAAc9hsC,EAAKg7rC,EAAUhgsC,GAAM,oBACrBA,GADqB,IACvC,2BAAwB,KAAbwC,EAAa,SACf7C,MAAMC,QAAQoF,EAAIxC,KAA6B,kBAAbwC,EAAIxC,MAEvC7C,MAAMC,QAAQoF,EAAIxC,IAClBwC,EAAIxC,GAAOsksC,EAAavP,OAAOyI,EAAUh7rC,EAAIxC,IAG7CwC,EAAIxC,GAAOsksC,EAAanj5B,MAAMq84B,EAAUh7rC,EAAIxC,MARb,8BAWvC,OAAOwC,I,wBAEX,SAAWA,EAAKg7rC,EAAUhgsC,GACtB,OAAO9B,KAAK44E,QAAQ54E,KAAKomsC,wBAAyBt/rC,EAAKg7rC,EAAUhgsC,K,6BAErE,SAAgBgF,EAAKg7rC,EAAUhgsC,GAC3B,OAAO9B,KAAK44E,QAAQ54E,KAAK0msC,6BAA8B5/rC,EAAKg7rC,EAAUhgsC,K,6BAE1E,SAAgBsF,EAAM06rC,GAAU,WAC5B9hsC,KAAK+nsC,WAAW3gsC,EAAM06rC,EAAU,CAAC,KAAM,WACnC,eAAgB16rC,GAChBA,EAAK8ma,WAAWxha,SAAQ,SAACwtC,GACrB,EAAKqtpC,gBAAgBrtpC,EAAO4npC,Q,+BAIxC,SAAkB16rC,EAAMw1rC,GAAQ,WACxBx1rC,EAAKlH,OAAS6+tC,EAAWp7gB,UAAav8sB,EAAKw1rC,SAC3Cx1rC,EAAKw1rC,OAASA,GACd,eAAgBx1rC,GAChBA,EAAK8ma,WAAWxha,SAAQ,SAACwtC,GACrB,EAAKstpC,kBAAkBttpC,EAAO0ipC,U,KAMxCsmC,G,oFACF,c,2BAEA,c,iCAEA,c,mBAEA,gB,KAGE3pB,G,WACF,WAAYvtqC,GAAS,oBACjBhsC,KAAKw5sC,WAAa,IAAI98qB,QACtB18hB,KAAKy5sC,gBAAkB,GACvBz5sC,KAAKsmsC,WAAat6pC,EAAQs6pC,WAC1BtmsC,KAAK2usC,SAAW3iqC,EAAQ2iqC,SACxB3usC,KAAKwhsC,cAAgBx1pC,EAAQw1pC,cAC7BxhsC,KAAKk8rC,OAASlwpC,EAAQkwpC,OACtBl8rC,KAAK+3C,O,wCAET,WACI/3C,KAAK2qE,QACL3qE,KAAK05sC,kBAAkBj55B,QAASz6Q,Y,2BAEpC,SAAckypC,EAAYni5B,GAAK,WAC3B,GAAKoi5B,EAAkBD,KAEnBl4rC,KAAKw5sC,WAAWv1sC,IAAIi0rC,GAAxB,CAEAl4rC,KAAKw5sC,WAAW76rC,IAAIu5qC,GACpB,IAAMvknC,EAAW24nC,GAAqB,2BAC/BtssC,KAAKwhsC,eADyB,IAEjCzr5B,MACAuw5B,WAAYtmsC,KAAKsmsC,WACjBpK,OAAQl8rC,KAAKk8rC,OACbiO,iBAAkBnqsC,OACnBk4rC,GACHl4rC,KAAKy5sC,gBAAgBrtsC,MAAK,kBAAMunE,EAASwmI,gBACzCn6M,KAAKy5sC,gBAAgBrtsC,KAAKsisC,GAAmB,2BACtC1usC,KAAKwhsC,eADgC,IAExCmN,SAAU3usC,KAAK2usC,SACf545B,IAAKmi5B,EACLgE,OAAQl8rC,KAAKk8rC,WAEjBmlC,IAAa,WACLnpC,EAAW8O,oBACX9O,EAAW8O,mBAAmBnlsC,OAAS,GACvC,EAAK2/rC,cAAcgF,kBAAkBS,iBAAiB/O,EAAW8O,mBAAoB,EAAK9K,OAAOz24B,MAAMyy4B,EAAWx5rB,OACtH,EAAK+6sB,gBAAgBrtsC,KAAKglsC,GAA8B,CACpDlV,OAAQ,EAAKA,OACbsK,kBAAmB,EAAKhF,cAAcgF,mBACvCtO,MACJ,M,iCAEP,SAAoByhB,GACXA,EAAcpktB,eAAkBoktB,EAAcr2C,iBAEnDtjqC,KAAK05sC,kBAAkBC,EAAcpktB,cAAc90M,QAASk55B,EAAcr2C,mB,+BAE9E,SAAkBx79B,EAASiuG,GACvB,IAAMk1R,EAAUjrkB,KAChBA,KAAKy5sC,gBAAgBrtsC,KAAKgwR,GAAMt0F,EAAQ3pM,UAAW,gBAAgB,SAAUg7R,GACzE,OAAO,SAAU34K,GACb,IAAM03kC,EAAa/+5B,EAASn4R,KAAKhB,KAAMwgH,GAGvC,OAFIxgH,KAAKk4rC,YAAc+M,GAAMjlsC,OACzBirkB,EAAQm/nB,cAAcpqsC,KAAKk4rC,WAAYni5B,GACpCmi5B,S,mBAInB,WACIl4rC,KAAKy5sC,gBAAgB/ssC,SAAQ,SAACusM,GAC1B,IACIA,IAEJ,MAAO7wM,QAGXpI,KAAKy5sC,gBAAkB,GACvBz5sC,KAAKw5sC,WAAa,IAAI98qB,Y,KAIxBymsB,G,qFACF,c,oBAEA,c,sBAEA,c,kBAEA,c,oBAEA,c,sBAEA,gB,KAIEvpB,G,WACF,WAAY5tqC,GAAS,oBACjBhsC,KAAK65sC,oBAAsB,IAAIn9qB,QAC/B18hB,KAAK2msC,YAAc,IAAInC,GACvBxksC,KAAKsmsC,WAAat6pC,EAAQs6pC,WAC1BtmsC,KAAK85sC,oBAAsB9tqC,EAAQ8tqC,oB,qDAEvC,SAAkBC,EAAQjT,GAClB,aAAcA,EAAQt1+B,YACtBxxN,KAAKsmsC,WAAW,CACZlnrC,KAAM,GACND,QAAS,GACTw4Z,MAAO,GACPnmN,WAAY,CACR,CACIvwL,GAAI6lqC,EAAQ7lqC,GACZuwL,WAAYs1+B,EACPt1+B,eAIrBxxN,KAAKkqsC,iBAAiB6P,K,8BAE1B,SAAiBA,GACT/5sC,KAAK65sC,oBAAoB51sC,IAAI81sC,KAEjC/5sC,KAAK65sC,oBAAoBl7rC,IAAIo7rC,GAC7B/5sC,KAAKg6sC,6BAA6BD,M,8BAEtC,SAAiB/syB,EAAQqkyB,GACrB,GAAsB,IAAlBrkyB,EAAOnra,OAAX,CAEA,IAH6B,EAGvBo4sC,EAAwB,CAC1Bh5qC,GAAIowqC,EACJ6I,SAAU,IAERt+nC,EAAS,GAPc,cAQToxV,GARS,IAQ7B,2BAA4B,KAAjBt7F,EAAiB,QACpBuy1B,OAAO,EACNjkqC,KAAK2msC,YAAY1isC,IAAIytU,GAWtBuy1B,EAAUjkqC,KAAK2msC,YAAYlh5B,MAAMisB,IAVjCuy1B,EAAUjkqC,KAAK2msC,YAAYhorC,IAAI+yT,GAC/B91P,EAAOxvE,KAAK,CACR63pC,UACAt6gC,MAAOloJ,MAAMuN,KAAK0iU,EAAM/nL,OAASwwjC,SAAS,SAAChjoC,EAAGh7E,GAAJ,MAAe,CACrD4tJ,KAAMsuiC,GAAclhnC,GACpBh7E,eAMZ89sC,EAAsBC,SAAS9tsC,KAAK63pC,IAtBX,8BAwBzBrolC,EAAO/5E,OAAS,IAChBo4sC,EAAsBr+nC,OAASA,GACnC57E,KAAK85sC,oBAAoBG,M,mBAE7B,WACIj6sC,KAAK2msC,YAAYh8nC,QACjB3qE,KAAK65sC,oBAAsB,IAAIn9qB,U,0CAEnC,SAA6Bq9qB,Q,KAI3Bb,G,WACF,aAAc,oBACVl5sC,KAAKm5sC,QAAU,IAAI9wsC,QACnBrI,KAAKq9V,MAAO,EACZr9V,KAAKo5sC,oB,qDAET,WAAoB,YAt3DxB,WACWgpB,GAAkB,yBAAlB,wBAs3DHgB,EAAwB,WACpB,EAAKlwtC,QACD,EAAKmqV,MACL,EAAK+72B,yB,2BAGjB,SAAchysC,EAAMiysC,GAChB,IAAMC,EAAUt5sC,KAAKm5sC,QAAQp1sC,IAAIqD,GACjC,OAAQkysC,GAAW73sC,MAAMuN,KAAKsqsC,GAAS7rsC,MAAK,SAACylJ,GAAD,OAAYA,IAAWmmjC,O,iBAEvE,SAAIjysC,EAAM8rJ,GACNlzJ,KAAKm5sC,QAAQzxsC,IAAIN,GAAOpH,KAAKm5sC,QAAQp1sC,IAAIqD,IAAS,IAAIvI,KAAO8f,IAAIu0I,M,mBAErE,WACIlzJ,KAAKm5sC,QAAU,IAAI9wsC,U,qBAEvB,WACIrI,KAAKq9V,MAAO,M,KAMd6+1B,GAjwGK,IAAIlD,GAkwGf,SAASlwqC,KAAqB,IAAdkjB,EAAc,uDAAJ,GACd48D,EAE2M58D,EAF3M48D,KAAM0xmC,EAEqMtuqC,EAFrMsuqC,iBAAkBC,EAEmLvuqC,EAFnLuuqC,iBAAhC,EAEmNvuqC,EAFjKmwpC,kBAAlD,MAA+D,WAA/D,IAEmNnwpC,EAFxIowpC,qBAA3E,MAA2F,KAA3F,IAEmNpwpC,EAFlHw0rC,uBAAjG,MAAmH,KAAnH,IAEmNx0rC,EAF1FujqC,mBAAzH,MAAuI,YAAvI,IAEmNvjqC,EAF/DwjqC,sBAApJ,MAAqK,KAArK,IAEmNxjqC,EAFxCo0rC,mBAA3K,WAEmNp0rC,EAFnB+vpC,qBAAhM,MAAgN,UAAhN,IAEmN/vpC,EAFQk0rC,uBAA3N,MAA6O,KAA7O,IAEmNl0rC,EAFgCgwpC,wBAAnP,MAAsQ,KAAtQ,IAEmNhwpC,EAFyDm0rC,0BAA5Q,MAAiS,KAAjS,IAEmNn0rC,EAFoFqwpC,wBAAvS,SAAgUoG,EAE7Gz2pC,EAF6Gy2pC,cAAiC+X,EAE9IxuqC,EAF4H0tpC,iBAAqD+gB,EAEjLzuqC,EAFiKk0pC,eAAiC2/B,EAElM7zrC,EAFkM6zrC,gBAAiBlmC,EAEnN3tpC,EAFmN2tpC,YAAa2C,EAEhOtwpC,EAFgOswpC,WAAnb,EAEmNtwpC,EAF4Oq3rC,qBAA/b,MAA+c,KAA/c,EAAqd3oB,EAElQ1uqC,EAFkQ0uqC,OAArd,EAEmN1uqC,EAF0QghqC,gBAA7d,MAAwe,GAAxe,IAEmNhhqC,EAFyRuwpC,sBAA5e,MAA6f,GAA7f,EAAigBoe,EAE9S3uqC,EAF8S2uqC,cAAjgB,EAEmN3uqC,EAF6TywpC,oBAAhhB,WAEmNzwpC,EAFmVy6pC,gCAAtiB,WAEmNz6pC,EAFqX4uqC,mBAAxkB,MAA8mB,qBAAxB5uqC,EAAQ4uqC,YACxlB5uqC,EAAQ4uqC,YACR,OAFN,IAEmN5uqC,EAArMyjqC,4BAFd,WAEmNzjqC,EAAvKsoqC,oBAF5C,WAEmNtoqC,EAAjJwwpC,qBAFlE,SAEwFlv/B,GAA2HthK,EAA3HshK,QAFxF,GAEmNthK,EAAlH0wpC,wBAFjG,OAEmH,kBAAM,GAFzH,MAEmN1wpC,EAAnF2lqC,4BAFhI,OAEsJ,IAAI9ysC,IAAI,IAF9J,GAEmK0lsC,GAAgDv4pC,EAAhDu4pC,aAAci+B,GAAkCx2rC,EAAlCw2rC,WAAYc,GAAsBt3rC,EAAtBs3rC,iBAC7Lp+B,GAAqBX,IACrB,IAAMsW,IAAkBpU,GAClB/3qC,OAAOguB,SAAWhuB,OAEpBosrC,IAAoB,EACxB,IAAKD,GACD,IACQnsrC,OAAOguB,OAAO1W,WACd80qC,IAAoB,GAG5B,MAAO1ysC,IACH0ysC,IAAoB,EAG5B,GAAID,KAAoBjymC,EACpB,MAAM,IAAIhhG,MAAM,kCAEE9L,IAAlB6+sC,QAAsD7+sC,IAAvBkxsC,EAASC,YACxCD,EAASC,UAAY0N,GAEzBze,GAAOvxnC,QACP,IAwCIowoC,GAxCErhB,IAAqC,IAAlB+I,EACnB,CACEx8lC,OAAO,EACP8lB,MAAM,EACN,kBAAkB,EAClB3/D,OAAO,EACPuqL,OAAO,EACPn8D,QAAQ,EACRib,OAAO,EACPwI,QAAQ,EACRsve,KAAK,EACL1hjB,MAAM,EACN5/D,MAAM,EACNu1C,KAAK,EACL67I,MAAM,EACN0iE,UAAU,EACVhgN,QAAQ,EACRyud,OAAO,EACPl3P,UAAU,QAEUx7T,IAAtB0+sC,EACIA,EACA,GACJta,IAAqC,IAApBua,GAAgD,QAApBA,EAC7C,CACEpyuB,QAAQ,EACRp6D,SAAS,EACT2yxB,aAAa,EACbW,gBAAgB,EAChBT,gBAAgB,EAChBC,gBAAgB,EAChBC,mBAAmB,EACnBE,sBAAsB,EACtBD,mBAAwC,QAApBwZ,EACpB5Z,qBAA0C,QAApB4Z,GAExBA,GAEI,GACV5lyB,KAEA,IAAImmyB,GAA2B,EACzBC,GAAiB,SAAC7ysC,GAAM,oBACLklM,IAAW,IADN,IAC1B,2BAAoC,KAAzBE,EAAyB,QAC5BA,EAAOytgC,iBACP7ysC,EAAIolM,EAAOytgC,eAAe7ysC,KAHR,8BAU1B,OAJIsysC,IACCI,KACD1ysC,EAAIsysC,EAAOtysC,IAERA,GAEXm+rC,GAAc,SAACpvnC,EAAGkwnC,GACd,IAAMj/rC,EAAI+uE,EAQV,GAPA/uE,EAAEuyV,UAAYgp2B,MACV46B,EAAe,CAACnyB,GAAiB,SAAU,SAAArurC,GAAC,OAAIA,EAAE,IAAI,iBAAkB,SAAAstkB,GAAE,OAAIA,EAAG77W,UAAU,OAAQ,SAAA87W,GAAE,OAAIA,QACzGljlB,EAAElI,OAAS0isC,GAAU0E,cACnBl/rC,EAAElI,OAAS0isC,GAAU6E,qBACnBr/rC,EAAE4yC,KAAK/tB,SAAW61qC,GAAkB4E,UACxC0E,GAAgB1/rC,SAAQ,SAAC22J,GAAD,OAASA,EAAI0oiC,cAErC8O,GACA0jB,EAAe,CAAC31nC,EAAM,eAAgB,SAAA2if,GAAE,OAAIA,EAAG0vnB,GAAe7ysC,GAAIi/rC,WAEjE,GAAIyT,GAAmB,CACxB,IAAMzpqC,EAAU,CACZnxC,KAAM,QACNinI,MAAO8zkC,GAAe7ysC,GACtB0S,OAAQ4T,OAAO+6B,SAAS3uC,OACxBusrC,cAEJ34qC,OAAOguB,OAAO+hd,YAAYptd,EAAS,KAEvC,GAAIjpC,EAAElI,OAAS0isC,GAAU0E,aACrByT,GAAwB3ysC,EACxB4ysC,GAA2B,OAE1B,GAAI5ysC,EAAElI,OAAS0isC,GAAU6E,oBAAqB,CAC/C,GAAIr/rC,EAAE4yC,KAAK/tB,SAAW61qC,GAAkB4E,UACpCt/rC,EAAE4yC,KAAK+rpC,eACP,OAEJiU,KACA,IAAME,EAAcX,GAAoBS,IAA4BT,EAC9DY,EAAab,GACfS,IACA3ysC,EAAEuyV,UAAYog3B,GAAsBpg3B,UAAY2/2B,GAChDY,GAAeC,IACfrE,IAAiB,KAI7B,IAxH0B,GAwHpBsE,GAAsB,SAAChpsC,GACzBm0rC,GAAY,CACRrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkB4E,UACvBt1rC,MAITipsC,GAAoB,SAAC5loC,GAAD,OAAO8wnC,GAAY,CACzCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBpvF,QACvBj+hC,MAGL6loC,GAA4B,SAAC7loC,GAAD,OAAO8wnC,GAAY,CACjDrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBwF,gBACvB7ynC,MAGL8loC,GAA+B,SAAC51sC,GAAD,OAAO4gsC,GAAY,CACpDrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkB6F,mBACvBhjsC,MAGL6gsC,GAAoB,IAAIoT,GAAkB,CAC5CtT,WAAY8U,GACZtB,oBAAqByB,KAEnBvR,GAAoD,mBAA7Bu5B,0BAA0CA,yBACjE,IAAIN,GACJ,IAAIh9B,GAAc,CAChB/J,UACAoK,WAAY8U,GACZ5U,kBAAmBA,GACnBC,2BACAF,iBAjKkB,eAmKLj5/B,IAAW,IAnKN,IAmK1B,8BAAoC,KAAzBE,GAAyB,SAC5BA,GAAOgugC,WACPhugC,GAAOgugC,UAAU,CACbC,WAAYvf,GACZkK,wBAAyB4D,GAAc5D,wBACvCM,6BAA8BsD,GAActD,gCAxK9B,kCA2K1B,IAAMiF,GAAuB,IAAIuN,GAC3BpN,GAAgB03B,GAAkBF,GAAkB,CACtDpnC,UACA5kvB,IAAK5ob,OACL43qC,WAAY,SAAC7wnC,GAAD,OAAO8wnC,GAAY,CAC3BrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBwF,gBACvB7ynC,MAGXgnnC,eACAN,aACAC,gBACAokC,kBACA6C,gBACAr2B,SAAUA,EAAQ,OAClBzQ,iBACAgI,kBAEE4F,GAA2D,mBAAjCs5B,8BAC5BA,6BACE,IAAIP,GACJ,IAAI3pB,GAAiB,CACnBjT,WAAY8U,GACZzM,SAAU0M,GACV7Z,cAAe,CACXghC,cACArmC,aACAC,gBACAokC,kBACAJ,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACA9jC,mBACA3C,oBACA6C,iBACAsjC,kBACAvjC,aACA3C,cACA8C,eACAD,gBACAwQ,WACA9M,kBACA8J,iBACAxD,qBACAsF,iBACApP,mBACAiP,yBAEJzP,YAEF4a,GAAmB,WAAwB,IAAvBzP,EAAuB,wDAC7Cd,GAAY,CACRrmsC,KAAM0isC,GAAU1yF,KAChBl1jC,KAAM,CACFoyE,KAAM1+F,OAAO+6B,SAAS2jE,KACtB9xC,MAAOuonC,KACPtykC,OAAQqykC,OAEbyD,GACHb,GAAkB77nC,QAClBw/nC,GAAiBpypC,OACjBq0pC,GAAgB1/rC,SAAQ,SAAC22J,GAAD,OAASA,EAAIq+I,UACrC,IAAMt6S,EAAO+jT,GAASnlR,SAAU,CAC5Bk2pC,UACAC,aACAC,gBACAokC,kBACAJ,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACA9jC,mBACAoG,cAAe/I,GACfmmC,kBACAlmC,cACA2C,aACAoG,QAASxC,GACT3D,iBACAE,eACAD,gBACA2D,YAAa,SAAC/5rC,GACNg+rC,GAAmBh+rC,EAAG81rC,KACtB8N,GAAcC,UAAU7jsC,GAExBi+rC,GAAuBj+rC,EAAG81rC,KAC1BsK,GAAkB0D,iBAAiB9jsC,GAEnCk+rC,GAAcl+rC,IACd+jsC,GAAiBC,cAAchksC,EAAE8xrC,WAAYlypC,WAGrDo6pC,aAAc,SAAC9qsB,EAAQwxsB,GACnBkD,GAAcK,aAAa/0sB,EAAQwxsB,GACnCqD,GAAiBG,oBAAoBh1sB,IAEzCgrsB,iBAAkB,SAACyZ,EAAQjT,GACvBN,GAAkB+D,kBAAkBwP,EAAQjT,IAEhDpK,qBAEJ,IAAKt1rC,EACD,OAAO4gB,QAAQC,KAAK,mCAExBs+qC,GAAY,CACRrmsC,KAAM0isC,GAAU0E,aAChBtspC,KAAM,CACF5zC,OACAw5pB,cAAevvX,GAAgB3iR,WAGvC09qC,GAAgB1/rC,SAAQ,SAAC22J,GAAD,OAASA,EAAI2oiC,YACjChmqC,SAASghqC,oBAAsBhhqC,SAASghqC,mBAAmBnlsC,OAAS,GACpE2ksC,GAAkBS,iBAAiBjhqC,SAASghqC,mBAAoB9K,GAAOz24B,MAAMz/Q,YAErFg9rC,GAAoBlsB,GACpB,IACI,IAAM1p1B,GAAW,GACXnuP,GAAU,SAAC82K,GACb,OAAOqv5B,GAAgBqO,GAAhBrO,CAA+B,CAClCo9B,cACAl8B,WAAY8U,GACZrO,YAAa,SAACztxB,EAAWryZ,GAAZ,OAAuBs5qC,GAAY,CAC5CrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,CACF/tB,SACAqyZ,gBAGRouxB,mBAAoB,SAAC5nsC,GAAD,OAAOygsC,GAAY,CACnCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBuF,kBACvBvisC,MAGX6osC,SAAU0M,GACVvM,iBAAkB,SAAChpsC,GAAD,OAAOygsC,GAAY,CACjCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBqF,gBACvBrisC,MAGXwpsC,QAAS,SAAClvsC,GAAD,OAAOmmsC,GAAY,CACxBrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBt+kC,OACvBpkH,MAGX0xsC,mBAAoB,SAACr8nC,GAAD,OAAO8wnC,GAAY,CACnCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBsF,kBACvB3ynC,MAGXo7nC,iBAAkB,SAAC15nC,GAAD,OAAOovnC,GAAY,CACjCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkByF,gBACvBpxnC,MAGXu6nC,mBAAoB,SAACv6nC,GAAD,OAAOovnC,GAAY,CACnCrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkB0F,kBACvBrxnC,MAGXg8nC,iBAAkBmI,GAClBnJ,OAAQ,SAAC18nC,GAAD,OAAO8wnC,GAAY,CACvBrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkBrlkB,MACvBhojB,MAGXk9nC,YAAa,SAACl9nC,GACV8wnC,GAAY,CACRrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkB4F,WACvBjznC,MAIfotpC,gBAAiB,SAACh9tC,GACd0gsC,GAAY,CACRrmsC,KAAM0isC,GAAU6E,oBAChBzspC,KAAM,aACF/tB,OAAQ61qC,GAAkB4gC,eACvB79tC,MAIfs2rC,aACAoT,cACAC,iBACA4wB,cACArkC,gBACAmkC,kBACAlkC,mBACAmkC,qBACAzmC,oBACA2C,mBACA2Q,WACAvQ,eACAD,gBACAiT,uBACA6E,eACAv+5B,MACA8p7B,kBACAlmC,cACA2C,aACAI,mBACAN,gBACAokC,kBACAtgC,kBACA3D,iBACAL,UACA8N,iBACAxD,qBACA2D,oBACAwB,wBACAG,iBACA6F,uBACArkgC,QAASixhC,EAAe,CAACjxhC,GACvC,iBAAkB,SAAAk+Y,GAAE,OAAIA,EAAGjglB,QAAQ,OAAQ,SAAAu1tC,GAAE,OAAIA,GAAG,SAACrrpC,GAAD,OAAOA,EAAE9B,aAC7D,iBAAkB,SAAAotpC,GAAE,OAAIA,EAAG/3tC,KAAK,OAAQ,SAAAg4tC,GAAE,OAAIA,GAAG,SAACvrpC,GAAD,MAAQ,CACvC9B,SAAU8B,EAAE9B,SACZ3nC,QAASypC,EAAEzpC,QACXpH,SAAU,SAACsC,GAAD,OAAaq/pC,GAAY,CAC/BrmsC,KAAM0isC,GAAUiF,OAChB7spC,KAAM,CACFwyJ,OAAQ/3H,EAAEjnE,KACV04B,sBAGH,IACV,KAEP8iqC,GAAc0R,iBAAgB,SAAC5Z,GAC3B,IACI100B,GAAShhX,KAAK6yH,GAAQ6ikC,EAASx+B,kBAEnC,MAAOn1pC,GACH6Z,QAAQC,KAAK9Z,OAGrB,IAAM4pC,GAAO,WACT++pC,KACA1p1B,GAAShhX,KAAK6yH,GAAQj5F,YAwB1B,MAtB4B,gBAAxBA,SAAS0uK,YACe,aAAxB1uK,SAAS0uK,WACT38J,MAGAq1U,GAAShhX,KAAKusC,GAAG,oBAAoB,WACjC4tpC,GAAY,CACRrmsC,KAAM0isC,GAAUgF,iBAChB5spC,KAAM,KAEU,qBAAhB4/pC,GACA7iqC,SAERq1U,GAAShhX,KAAKusC,GAAG,QAAQ,WACrB4tpC,GAAY,CACRrmsC,KAAM0isC,GAAU+E,KAChB3spC,KAAM,KAEU,SAAhB4/pC,GACA7iqC,OACLrpB,UAEA,WACH0+V,GAAS1gX,SAAQ,SAAC2Y,GAAD,OAAOA,OACxBsmrC,GAAqBnhoC,UACrBw4pC,QAAoBlnuC,EACpBqpsC,MAGR,MAAOh3rC,IACH6Z,QAAQC,KAAK9Z,KAWrB,SAASq1tC,GAAkBG,EAAoB33rC,GAC3C,IACI,OAAO23rC,EACDA,EAAmB33rC,GACnB,IAAIm3rC,GAEd,MAAOjkV,GAEH,OADAl33B,QAAQC,KAAK,sCACN,IAAIk7sC,IAVnBr6sC,GAAOozqC,OAASA,GAChBpzqC,GAAOgurC,iBAPP,SAA0BzP,GACtB,IAAK27B,GACD,MAAM,IAAIp7tC,MAAM,mDAEpBo7tC,GAAkB37B,IAsBtB,SAASu8B,GAAcjp4B,GAErB,OADaA,EAAY,WACXA,EAAwB,IAAZA,EAM5B,SAASkp4B,GAAalp4B,GAEpB,OADaA,EAAY,WACXA,EAAY,IAAOA,EAMnC,SAASmp4B,GAAmBC,EAAQxp4B,GACN,uBAAxBA,EAAWnjO,WAIX,CAAC,WAAY,YAAY7tH,SAASgxV,EAAWnjO,UAC/C2smC,EAAOC,sBAEPD,EAAOE,+BAGTF,EAAOG,WAAU,WAgBf,OAbAH,EAAOI,kBAAkB,CACvBjkuC,KAAM0isC,GAAUkF,OAGhBnt2B,UAAyC,KAA7BJ,EAAWI,WAAa,GACpC3/S,KAAM,CACJkgI,IAAK,aAELh0I,QAAS8iL,YAAUuwI,EAAY,GAAI,QAKR,YAAxBA,EAAWnjO,aAItB,IAqCIg2P,GAlCJ,SAASg32B,GAAsBt8hC,GAE7B,OAD2BA,EAAQ00F,QAJR,aAKE10F,EAS/B,SAASu8hC,GAAmBl9lC,GAC1B,IAAMn6G,EAASs3sC,GAAcn9lC,GAE7B,OAAKn6G,GAAYA,aAAkByzR,QAI5B2j7B,GAAsBp3sC,GAHpBA,EAOX,SAASs3sC,GAAcn9lC,GACrB,OAOF,SAA2BA,GACzB,MAAwB,kBAAVA,KAAwBA,GAAS,WAAYA,EARvDo9lC,CAAkBp9lC,GACbA,EAAMn6G,OAGRm6G,EAaT,SAASq9lC,GAAa/rrC,GASpB,OAPK20U,KACHA,GAAW,GAebvkP,YAAKooM,EAAQ,QAAQ,SAAUwz5B,GAC7B,OAAO,WACL,GAAIr32B,GACF,IACEA,GAAS1gX,SAAQ,SAAAusM,GAAO,OAAIA,OAC5B,MAAO7wM,IAJa,2BAAN4iB,EAAM,yBAANA,EAAM,gBASxB,OAAOy5sC,EAAmBx8tC,MAAMgpU,EAAQjmT,QArB5CoiW,GAAShhX,KAAKqsC,GAEP,WACL,IAAMo8G,EAAMu4N,GAAWA,GAAS5sW,QAAQi4B,IAAO,EAC3Co8G,GAAO,GACRu4N,GAAWh+W,OAAOylJ,EAAK,I,IA+U1BmogB,GApTE0nkB,G,WAGH,WACCX,EACAY,GAGA,IADAC,EACA,uDADsBd,GACtB,oBACA9juC,KAAK6kuC,cAAgB,EACrB7kuC,KAAK8kuC,YAAc,EACnB9kuC,KAAK+kuC,QAAU,GAGf/kuC,KAAKgluC,SAAWL,EAAgBlgoC,QAAU,IAC1CzkG,KAAKiluC,WAAaN,EAAgBlr+B,UAAY,IAC9Cz5P,KAAKkluC,cAAgBP,EAAgBhyb,cAAgB,IACrD3yyB,KAAKmluC,QAAUpB,EACf/juC,KAAKoluC,gBAAkBT,EAAgBn1B,eACvCxvsC,KAAK4kuC,oBAAsBA,E,gDAI5B,WAAe,WACRS,EAAoBb,IAAa,WAErC,EAAKK,cAAgBS,QAGvBtluC,KAAKuluC,UAAY,WACfF,IAEA,EAAKN,QAAU,GACf,EAAKF,cAAgB,EACrB,EAAKC,YAAc,K,6BAKtB,WACK9kuC,KAAKuluC,WACPvluC,KAAKuluC,YAGHvluC,KAAKwluC,oBACPj/lC,aAAavmI,KAAKwluC,sB,yBAKrB,SAAYjr4B,EAAYnzV,GACvB,IAiKJ,SAAuBA,EAAMoosC,GAC3B,IAAKi2B,GAAgBl8tC,SAASnC,EAAKg5S,SACjC,OAAO,EAIT,GAAqB,UAAjBh5S,EAAKg5S,UAAwB,CAAC,SAAU,UAAU72S,SAASnC,EAAKu2S,aAAa,SAAW,IAC1F,OAAO,EAMT,GACmB,MAAjBv2S,EAAKg5S,UACJh5S,EAAKm21B,aAAa,aAAgBn21B,EAAKm21B,aAAa,WAA6C,UAAhCn21B,EAAKu2S,aAAa,WAEpF,OAAO,EAGT,GAAI6x5B,GAAkBposC,EAAKwwL,QAAQ43gC,GACjC,OAAO,EAGT,OAAO,EAzLDk2B,CAAct+tC,EAAMpH,KAAKoluC,kBA4LjC,SAA2B7q4B,GACzB,SAAUA,EAAWv/S,MAA0C,kBAA3Bu/S,EAAWv/S,KAAKwwpC,SAAuBjx2B,EAAWI,WA7LlCgr4B,CAAkBpr4B,GAApE,CAIA,IAAMqr4B,EAAW,CACfjr4B,UAAWkp4B,GAAatp4B,EAAWI,WACnCkr4B,gBAAiBtr4B,EAEjBur4B,WAAY,EACZ1+tC,QAKApH,KAAK+kuC,QAAQt3tC,MAAK,SAAA+gmB,GAAK,OAAIA,EAAMpnmB,OAASw+tC,EAASx+tC,MAAQrK,KAAKijB,IAAIwulB,EAAM7zQ,UAAYir4B,EAASjr4B,WAAa,OAK9G36V,KAAK+kuC,QAAQ34tC,KAAKw5tC,GAGU,IAAxB5luC,KAAK+kuC,QAAQljuC,QACf7B,KAAK+luC,2B,8BAKR,WAAyC,IAAxBpr4B,EAAwB,uDAAZ5sU,KAAK+xB,MACjC9/C,KAAK6kuC,cAAgBhB,GAAalp4B,K,4BAInC,WAAuC,IAAxBA,EAAwB,uDAAZ5sU,KAAK+xB,MAC/B9/C,KAAK8kuC,YAAcjB,GAAalp4B,K,2BAIjC,SAAc7yJ,GACb,IAAM1gM,EAAOg9tC,GAAsBt8hC,GACnC9nM,KAAKgmuC,kBAAkB5+tC,K,+BAIxB,SAAkBA,GACjBpH,KAAKimuC,WAAW7+tC,GAAMsF,SAAQ,SAAA8hmB,GAC5BA,EAAMs3nB,kB,wBAKT,SAAW1+tC,GACV,OAAOpH,KAAK+kuC,QAAQx5tC,QAAO,SAAAijmB,GAAK,OAAIA,EAAMpnmB,OAASA,O,0BAIpD,WAAe,WACR8+tC,EAAiB,GAEjBpmrC,EAAMwlrC,KAEZtluC,KAAK+kuC,QAAQr4tC,SAAQ,SAAA8hmB,IACdA,EAAM23nB,eAAiB,EAAKtB,gBAC/Br2nB,EAAM23nB,cAAgB33nB,EAAM7zQ,WAAa,EAAKkq4B,cAAgB,EAAKA,cAAgBr2nB,EAAM7zQ,eAAY7+V,IAElG0ymB,EAAM43nB,aAAe,EAAKtB,cAC7Bt2nB,EAAM43nB,YAAc53nB,EAAM7zQ,WAAa,EAAKmq4B,YAAc,EAAKA,YAAct2nB,EAAM7zQ,eAAY7+V,GAI7F0ymB,EAAM7zQ,UAAY,EAAKqq4B,UAAYllrC,GACrComrC,EAAe95tC,KAAKoimB,MAKxB,cAAoB03nB,EAApB,eAAoC,CAA/B,IAAM13nB,EAAK,KACR35c,EAAM70J,KAAK+kuC,QAAQvktC,QAAQgulB,GAE7B35c,GAAO,IACT70J,KAAKqmuC,qBAAqB73nB,GAC1BxumB,KAAK+kuC,QAAQ31tC,OAAOylJ,EAAK,IAKzB70J,KAAK+kuC,QAAQljuC,QACf7B,KAAK+luC,yB,kCAKR,SAAqBv3nB,GACpB,IAAMu1nB,EAAS/juC,KAAKmluC,QACdmB,EAAY93nB,EAAM43nB,aAAe53nB,EAAM43nB,aAAepmuC,KAAKkluC,cAC3DqB,EAAc/3nB,EAAM23nB,eAAiB33nB,EAAM23nB,eAAiBnmuC,KAAKiluC,WAEjEuB,GAAeF,IAAcC,EAC3BT,EAAgCt3nB,EAAhCs3nB,WAAYD,EAAoBr3nB,EAApBq3nB,gBAGpB,GAAIW,EAAJ,CAGE,IAAMC,EAAmF,IAAhE1puC,KAAKE,IAAIuxmB,EAAM23nB,eAAiBnmuC,KAAKgluC,SAAUhluC,KAAKgluC,UACvE0B,EAAYD,EAAmC,IAAhBzmuC,KAAKgluC,SAAkB,WAAa,UAEnEzq4B,EAAa,CACjBr6V,KAAM,UACNmxC,QAASw0rC,EAAgBx0rC,QACzBspT,UAAWkr4B,EAAgBlr4B,UAC3BvjO,SAAU,uBACVp8E,KAAM,2BACD6qrC,EAAgB7qrC,MADjB,IAEFwmD,IAAKyvO,EAAOxnR,SAAS2jE,KACrBi/rB,MAAO03a,EAAO4C,kBACdF,mBACAC,YAGAZ,WAAYA,GAAc,KAI9B9luC,KAAK4kuC,oBAAoBb,EAAQxp4B,QAKnC,GAAIur4B,EAAa,EAAG,CAClB,IAAMvr4B,EAAa,CACjBr6V,KAAM,UACNmxC,QAASw0rC,EAAgBx0rC,QACzBspT,UAAWkr4B,EAAgBlr4B,UAC3BvjO,SAAU,gBACVp8E,KAAM,2BACD6qrC,EAAgB7qrC,MADjB,IAEFwmD,IAAKyvO,EAAOxnR,SAAS2jE,KACrBi/rB,MAAO03a,EAAO4C,kBACdb,aACAx0oB,QAAQ,KAIZtxlB,KAAK4kuC,oBAAoBb,EAAQxp4B,M,kCAKpC,WAAuB,WAClBv6V,KAAKwluC,oBACPj/lC,aAAavmI,KAAKwluC,oBAGpBxluC,KAAKwluC,mBAAqB3srC,YAAW,kBAAM,EAAK+trC,iBAAgB,S,KAI9DnB,GAAkB,CAAC,IAAK,SAAU,SAmCxC,SAASH,KACP,OAAOv3sC,KAAK+xB,MAAQ,IAItB,SAAS+mrC,GAAqCC,EAAe3/lC,GAC3D,IASE,IA0BJ,SAA4BA,GAC1B,OArayC,IAqalCA,EAAMjnI,KA3BN6muC,CAAmB5/lC,GACtB,OAGF,IAAQl6G,EAAWk6G,EAAMnsF,KAAjB/tB,OASR,GARIA,IAAW61qC,GAAkB4E,UAC/Bo/B,EAAcE,iBAAiB7/lC,EAAMwzN,WAGnC1tU,IAAW61qC,GAAkBpvF,QAC/BozH,EAAcG,eAAe9/lC,EAAMwzN,WAoBzC,SACExzN,GAEA,OAAOA,EAAMnsF,KAAK/tB,SAAW61qC,GAAkBuF,iBApBzC6+B,CAA8B//lC,GAAQ,CACxC,MAAqBA,EAAMnsF,KAAnB96C,EAAR,EAAQA,KAAM+gC,EAAd,EAAcA,GACR75B,EAAO0hB,GAAOozqC,OAAO9C,QAAQn4pC,GAE/B75B,aAAgBo2S,aAAet9S,IAAS8isC,GAAkBqL,OAC5Dy4B,EAAcK,cAAc//tC,IAGhC,MAAOgB,KAkBX,SAASg/tC,GACP7s4B,GAEA,oBACEI,UAAW5sU,KAAK+xB,MAAQ,IACxB5/C,KAAM,WACHq6V,IAKP,SAAWyiU,GACPA,EAASA,EAAQ,SAAe,GAAK,WACrCA,EAASA,EAAQ,aAAmB,GAAK,eACzCA,EAASA,EAAQ,QAAc,GAAK,UACpCA,EAASA,EAAQ,KAAW,GAAK,OACjCA,EAASA,EAAQ,MAAY,GAAK,QAClCA,EAASA,EAAQ,QAAc,GAAK,UANxC,CAOGA,KAAaA,GAAW,KAI3B,IAAMqqkB,GAAuB,IAAIxouC,IAAI,CACnC,KACA,QACA,aACA,OACA,OACA,MACA,QACA,eACA,cACA,WACA,gBACA,0BAMF,SAASyouC,GAAsB91gC,GAC7B,IAAM1qN,EAAM,GACZ,IAAK,IAAMxC,KAAOktN,EAChB,GAAI61gC,GAAqBpjuC,IAAIK,GAAM,CACjC,IAAIijuC,EAAgBjjuC,EAER,gBAARA,GAAiC,iBAARA,IAC3BijuC,EAAgB,UAGlBzguC,EAAIyguC,GAAiB/1gC,EAAWltN,GAIpC,OAAOwC,EAGT,IAAM0guC,GAAoB,SACxBzD,GAEA,OAAO,SAAC5yC,GACN,GAAK4yC,EAAOpxhC,YAAZ,CAIA,IAAM/+L,EA6DV,SAAmBu9qC,GACjB,MAQF,SAAsBA,GACpB,IAEI9/oC,EAFEo2rC,EAA+B,UAArBt2C,EAAY3irC,KAGxBwe,EAAS,KAGb,IACEA,EAASy6sC,EAAUpD,GAAmBlzC,EAAYhqjC,OAAUm9lC,GAAcnzC,EAAYhqjC,OACtF91F,EAAU2i9B,YAAiBhn+B,EAAQ,CAAEu4K,gBAAiB,OAAU,YAChE,MAAOn9L,GACPipC,EAAU,YAGZ,MAAO,CAAErkB,SAAQqkB,WAtBWq2rC,CAAav2C,GAAjCnkqC,EAAR,EAAQA,OAAQqkB,EAAhB,EAAgBA,QAEhB,OAAO+1rC,GAAiB,aACtBhwmC,SAAU,MAAF,OAAQ+5jC,EAAY3irC,OACzBm5tC,GAAqB36sC,EAAQqkB,KAlEjBu2rC,CAAUz2C,GAEzB,GAAKv9qC,EAAL,CAIA,IAtXiBkztC,EAAejB,EAAiBz+tC,EAsX3CqguC,EAA+B,UAArBt2C,EAAY3irC,KACtB24H,EAAQsgmC,EAAWt2C,EAAYhqjC,WAAUrrI,IAG7C2ruC,GACA1D,EAAO+C,eACP3/lC,GACAA,EAAMn6G,SACLm6G,EAAM27K,QACN37K,EAAMy7K,SACNz7K,EAAMw7K,SACNx7K,EAAM07K,WAjYQik7B,EAoYb/C,EAAO+C,cApYqBjB,EAqY5BjytC,EArY6CxM,EAsY7Ci9tC,GAAmBlzC,EAAYhqjC,OArYrC2/lC,EAAczwmC,YAAYwvmC,EAAiBz+tC,IAyYzC08tC,GAAmBC,EAAQnwtC,OAK/B,SAAS+ztC,GAAqB36sC,EAAQqkB,GACpC,IAAMm6pC,EAAS1irC,GAAOozqC,OAAOz24B,MAAMz4R,GAC7B5lB,EAAOoksC,GAAU1irC,GAAOozqC,OAAO9C,QAAQoS,GACvCnlmC,EAAOj/F,GAAQ0hB,GAAOozqC,OAAO/C,QAAQ/xrC,GACrC0gM,EAAUzhG,GAoDlB,SAAmBj/F,GACjB,OAAOA,EAAKlH,OAAS88pB,GAASv8W,QArDN5kQ,CAAUwqD,GAAQA,EAAO,KAEjD,MAAO,CACLh1D,UACA2J,KAAM8sJ,EACF,CACE0jgC,SACApksC,KAAM,CACJ65B,GAAIuqqC,EACJpr5B,QAASt4G,EAAQs4G,QACjBrD,YAAat7S,MAAMuN,KAAK84L,EAAQomO,YAC7Blla,KAAI,SAAC5B,GAAD,OAAUA,EAAKlH,OAAS88pB,GAASwiiB,MAAQp4rC,EAAK21S,eAClDxxS,OAAOlO,SACP2L,KAAI,SAAA6iH,GAAI,OAAKA,EAAO2S,UACpB/8G,KAAK,IACR+vM,WAAY81gC,GAAsBx/hC,EAAQ0pB,cAG9C,IAuCR,SAASq2gC,GAAoB9D,EAAQ58lC,GACnC,GAAK48lC,EAAOpxhC,YAAZ,CAOAoxhC,EAAO+D,qBAEP,IAAMvt4B,EAUR,SAA+BpzN,GAC7B,IAAQy7K,EAAoDz7K,EAApDy7K,QAASC,EAA2C17K,EAA3C07K,SAAUF,EAAiCx7K,EAAjCw7K,QAASG,EAAwB37K,EAAxB27K,OAAQx+S,EAAgB6iI,EAAhB7iI,IAAK0oB,EAAWm6G,EAAXn6G,OAGjD,IAAKA,GA+BP,SAAwBA,GACtB,MAA0B,UAAnBA,EAAOozR,SAA0C,aAAnBpzR,EAAOozR,SAA0BpzR,EAAO0gpB,kBAhC9Dq6jB,CAAe/6sC,KAAa1oB,EACzC,OAAO,KAIT,IAAM0juC,EAAiBpl7B,GAAWD,GAAWG,EACvCml7B,EAAgC,IAAf3juC,EAAIzC,OAI3B,IAAKmmuC,GAAkBC,EACrB,OAAO,KAGT,IAAM52rC,EAAU2i9B,YAAiBhn+B,EAAQ,CAAEu4K,gBAAiB,OAAU,YAChE2iiC,EAAiBP,GAAqB36sC,EAASqkB,GAErD,OAAO+1rC,GAAiB,CACtBhwmC,SAAU,aACV/lF,UACA2J,KAAM,2BACDktrC,EAAeltrC,MADhB,IAEF4nQ,UACAC,WACAF,UACAG,SACAx+S,UAxCe6juC,CAAsBhhmC,GAEpCozN,GAILup4B,GAAmBC,EAAQxp4B,IA4C7B,IAAM6t4B,GAEH,CAEDxqZ,SAuFF,SACE360B,GAEA,IACEswlB,EASEtwlB,EATFswlB,UACAqooB,EAQE34tC,EARF24tC,cACApttC,EAOEvL,EAPFuL,KACAkutC,EAMEz5tC,EANFy5tC,YACAh9lC,EAKEz8H,EALFy8H,UACA2omC,EAIEpluC,EAJFoluC,gBACAC,EAGErluC,EAHFqluC,gBACAC,EAEEtluC,EAFFsluC,eACAC,EACEvluC,EADFuluC,aAIF,GAAI,CAAC,QAAS,kBAAkBj/tC,SAASqytC,GACvC,OAAO,KAGT,MAAO,CACL17tC,KAAM,GAAF,OAAKqzlB,EAAL,YAAkBqooB,GACtB77sC,MAAOk8sC,GAAgBv8lC,GACvBljI,IAAKy/tC,GAAgBS,GACrBlutC,OACAwsC,KAAM,CACJj/C,KAAMysuC,EACN9/hC,WAAY6/hC,EACZF,kBACAC,qBAnHJG,MA4BF,SAA0BxluC,GACxB,IAAQyxH,EAAyCzxH,EAAzCyxH,SAAU6+d,EAA+BtwlB,EAA/BswlB,UAAW/klB,EAAoBvL,EAApBuL,KAEvBuR,EAAQk8sC,GAFmCh5tC,EAAdy8H,WAGnC,MAAO,CACLx/H,KAAMqzlB,EACN/klB,OACAuR,QACAvjB,IAAKujB,EAAQ20G,EACb15E,UAAMl/C,IAnCRgxqB,WAuCF,SAA+B7pqB,GAC7B,IACEswlB,EAeEtwlB,EAfFswlB,UACA/klB,EAcEvL,EAdFuL,KACA65tC,EAaEpluC,EAbFoluC,gBACA3zmC,EAYEzxH,EAZFyxH,SACAg0mC,EAWEzluC,EAXFyluC,YACAJ,EAUErluC,EAVFqluC,gBACAK,EASE1luC,EATF0luC,2BACAC,EAQE3luC,EARF2luC,yBACAC,EAOE5luC,EAPF4luC,eACAC,EAME7luC,EANF6luC,eACAC,EAKE9luC,EALF8luC,aACAC,EAIE/luC,EAJF+luC,cACAtpmC,EAGEz8H,EAHFy8H,UACA8omC,EAEEvluC,EAFFuluC,aACAtouC,EACE+C,EADF/C,KAIF,GAAiB,IAAbw0H,EACF,OAAO,KAGT,MAAO,CACLx0H,KAAM,GAAF,OAAKqzlB,EAAL,YAAkBrzlB,GACtB6f,MAAOk8sC,GAAgBv8lC,GACvBljI,IAAKy/tC,GAAgByM,GACrBl6tC,OACAwsC,KAAM,CACJj/C,KAAMysuC,EACNH,kBACAC,kBACA5zmC,WACAm0mC,iBACAF,6BACAC,2BACAE,iBACAC,eACAL,cACAM,oBAnEN,SAASC,GAAuBhmuC,GAC9B,OAAKmluC,GAAYnluC,EAAMswlB,WAIhB60oB,GAAYnluC,EAAMswlB,WAAWtwlB,GAH3B,KAMX,SAASg5tC,GAAgBhwqC,GAGvB,QAAS6zkB,KAAgC7uT,EAAOyhR,YAAYktC,YAAc3zkB,GAAQ,IAgIpF,SAASi9qC,GAAyBnF,GAChC,SAASoF,EAAoBlmuC,GAEtB8guC,EAAOqF,mBAAmB7/tC,SAAStG,IACtC8guC,EAAOqF,mBAAmBh9tC,KAAKnJ,GAInC,SAASomuC,EAAT,GAAgC,EAAX1/tC,QACX+C,QAAQy8tC,GAGlB,IAAMG,EAAiB,GAavB,MAXC,CAAC,aAAc,QAAS,YAAc58tC,SAAQ,SAAAxM,GAC7CopuC,EAAel9tC,KAAKwolB,YAAqC10lB,EAAMmpuC,OAGjEC,EAAel9tC,KACbgolB,aAA6B,YAAgB,IAAb9C,EAAa,EAAbA,OAC9ByyoB,EAAOwF,yBAAyBn9tC,KAlDtC,SAAmCkllB,GAGjC,IAAM3nlB,EAAU2nlB,EAAO3nlB,QACjB+rlB,EAAY/rlB,EAAQA,EAAQ9H,OAAS,GACrCimM,EAAU4tZ,EAAYA,EAAU5tZ,aAAUhsM,EAE1CJ,EAAQ41lB,EAAO51lB,MAEfc,EAAMy/tC,GAAgBvguC,GAc5B,MAZa,CACXwE,KAAM,2BACNsO,KAAM,2BACNuR,MAAOvjB,EACPA,MACAw+C,KAAM,CACJt/C,QACAK,KAAML,EACN8vsC,OAAQ1jgC,EAAUh/K,GAAOozqC,OAAOz24B,MAAM39G,QAAWhsM,IA+BZ0tuC,CAA0Bl4oB,QAK5D,WACLg4oB,EAAe58tC,SAAQ,SAAA+8tC,GAAa,OAAIA,QAS5C,IAAMn+8B,GAA2C,qBAArBo+8B,kBAAoCA,iBAShE,SAASC,GAAQt4rC,EAASu4rC,GACnBt+8B,KAILtqI,IAAOm8D,KAAK9rK,GAERu4rC,GACFC,GAAiBx4rC,IAQrB,SAASy4rC,GAAgBz4rC,EAASu4rC,GAC3Bt+8B,KAILtqI,IAAOm8D,KAAK9rK,GAERu4rC,GAGF/wrC,YAAW,WACTgxrC,GAAiBx4rC,KAChB,IAIP,SAASw4rC,GAAiBx4rC,GACxBypT,YACE,CACE1jO,SAAU,UACVp8E,KAAM,CACJgmG,OAAQ,UAEVnnI,MAAO,OACPw3B,WAEF,CAAEx3B,MAAO,S,IAKPkwtC,G,kDACH,aAAc,uFACkCzK,EADlC,M,sBAD0B13tC,QAUrCoiuC,G,WAKH,aAAc,oBACbhquC,KAAK0hJ,OAAS,GACd1hJ,KAAKiquC,WAAa,EAClBjquC,KAAKkquC,aAAc,E,2CAIpB,WACC,OAAOlquC,KAAK0hJ,OAAO7/I,OAAS,I,gBAI7B,WACC,MAAO,S,qBAIR,WACC7B,KAAK0hJ,OAAS,K,6DAIf,WAAeva,GAAf,eAAAxhI,EAAA,yDACOwkuC,EAAYx7tC,KAAKC,UAAUu4H,GAAOtlI,OACxC7B,KAAKiquC,YAAcE,IACfnquC,KAAKiquC,WAAa3K,GAHvB,sBAIS,IAAIyK,GAJb,OAOC/puC,KAAK0hJ,OAAOt1I,KAAK+6H,GAPlB,gD,2EAWA,WAAS,WACR,OAAO,IAAIloF,SAAQ,SAAAC,GAIjB,IAAMkrrC,EAAY,EAAK1olC,OACvB,EAAKxuI,QACLgsC,EAAQvwC,KAAKC,UAAUw7tC,S,mBAK1B,WACCpquC,KAAK0hJ,OAAS,GACd1hJ,KAAKiquC,WAAa,EAClBjquC,KAAKkquC,aAAc,I,kCAIpB,WACC,IAAMvv4B,EAAY36V,KAAK0hJ,OAAO14I,KAAI,SAAAm+H,GAAK,OAAIA,EAAMwzN,aAAWluV,OAAO,GAEnE,OAAKkuV,EAIEip4B,GAAcjp4B,GAHZ,S,KAWP0v4B,G,WAEH,WAAYv/sC,GAAQ,oBACnB9qB,KAAKykhB,QAAU35f,EACf9qB,KAAKsuS,IAAM,E,+CAOZ,WAAc,WAEb,OAAItuS,KAAKsquC,sBAITtquC,KAAKsquC,oBAAsB,IAAIrrrC,SAAQ,SAACC,EAASi3B,GAC/C,EAAKsuc,QAAQz7a,iBACX,WACA,YAAc,EAAXhuD,KACWs2Q,QACVpyQ,IAEAi3B,MAGJ,CAAE6hH,MAAM,IAGV,EAAKysV,QAAQz7a,iBACX,SACA,SAAA76F,GACEgoE,EAAOhoE,KAET,CAAE6pL,MAAM,QArBHh4L,KAAKsquC,sB,qBA+Bf,WACCX,GAAQ,0CACR3puC,KAAKykhB,QAAQ9E,c,yBAMd,SAAYt4a,EAAQ38E,GAAK,WAClBuW,EAAKjhC,KAAKuquC,qBAEhB,OAAO,IAAItrrC,SAAQ,SAACC,EAASi3B,GA6B3B,EAAKsuc,QAAQz7a,iBAAiB,WA5Bb,SAAXhkE,EAAY,GAAa,IACvB+jF,EADuB,EAAX/tE,KAElB,GAAI+tE,EAAS1hB,SAAWA,GAMpB0hB,EAAS9nF,KAAOA,EAApB,CAOA,GAFA,EAAKwjf,QAAQx7a,oBAAoB,UAAWjkE,IAEvC+jF,EAASuoM,QAKZ,OAHAhmC,IAAetqI,IAAO7yI,MAAM,WAAY46G,EAASA,eAEjD5yC,EAAO,IAAIvuE,MAAM,gCAInBs3C,EAAQ6pE,EAASA,cAMnB,EAAK07Z,QAAQhmB,YAAY,CAAEx9d,KAAIomE,SAAQ38E,a,gCAK1C,WACC,OAAO1qB,KAAKsuS,U,KAQVk87B,G,WAGH,WAAY1/sC,GAAQ,oBACnB9qB,KAAKykhB,QAAU,IAAI4ltB,GAAcv/sC,GACjC9qB,KAAKyquC,mBAAqB,KAC1BzquC,KAAKiquC,WAAa,EAClBjquC,KAAKkquC,aAAc,E,2CAIpB,WACC,QAASlquC,KAAKyquC,qB,gBAIf,WACC,MAAO,W,yBAOR,WACC,OAAOzquC,KAAKykhB,QAAQimtB,gB,qBAMrB,WACC1quC,KAAKykhB,QAAQj6c,Y,sBAQd,SAAS28D,GACR,IAAMwzN,EAAYip4B,GAAcz8lC,EAAMwzN,aACjC36V,KAAKyquC,oBAAsB9v4B,EAAY36V,KAAKyquC,sBAC/CzquC,KAAKyquC,mBAAqB9v4B,GAG5B,IAAM3/S,EAAOrsC,KAAKC,UAAUu4H,GAG5B,OAFAnnI,KAAKiquC,YAAcjvrC,EAAKn5C,OAEpB7B,KAAKiquC,WAAa3K,EACbrgrC,QAAQk3B,OAAO,IAAI4zpC,IAGrB/puC,KAAK2quC,mBAAmB3vrC,K,oBAMhC,WACC,OAAOh7C,KAAK4quC,mB,mBAIb,WACC5quC,KAAKyquC,mBAAqB,KAC1BzquC,KAAKiquC,WAAa,EAClBjquC,KAAKkquC,aAAc,EAGnBlquC,KAAKykhB,QAAQhmB,YAAY,SAASlob,KAAK,MAAM,SAAAnuE,GAC3CkjR,IAAetqI,IAAO/4H,KAAK,oDAAqD7f,Q,kCAKnF,WACC,OAAOpI,KAAKyquC,qB,gCAMb,SAAmBzvrC,GAClB,OAAOh7C,KAAKykhB,QAAQhmB,YAAY,WAAYzjd,K,mEAM7C,4BAAAr1C,EAAA,sEACwB3F,KAAKykhB,QAAQhmB,YAAY,UADjD,cACO11Y,EADP,OAGC/oH,KAAKyquC,mBAAqB,KAC1BzquC,KAAKiquC,WAAa,EAJnB,kBAMQlhnC,GANR,gD,6DAeG8hnC,G,WAEH,WAAY//sC,GAAQ,oBACnB9qB,KAAK8quC,UAAY,IAAId,GACrBhquC,KAAK+quC,aAAe,IAAIP,GAA6B1/sC,GACrD9qB,KAAKgruC,MAAQhruC,KAAK8quC,UAElB9quC,KAAKiruC,6BAA+BjruC,KAAKkruC,wB,sCAI1C,WACC,OAAOlruC,KAAKgruC,MAAM9quC,O,qBAInB,WACC,OAAOF,KAAKgruC,MAAMG,Y,uBAInB,WACC,OAAOnruC,KAAKgruC,MAAMd,a,IAGnB,SAAgBxuuC,GACfsE,KAAKgruC,MAAMd,YAAcxuuC,I,qBAI1B,WACCsE,KAAK8quC,UAAUtgqC,UACfxqE,KAAK+quC,aAAavgqC,Y,mBAInB,WACC,OAAOxqE,KAAKgruC,MAAM93tC,U,kCAInB,WACC,OAAOlT,KAAKgruC,MAAMI,yB,sBAQnB,SAASjkmC,GACR,OAAOnnI,KAAKgruC,MAAM32Q,SAASlt1B,K,2DAI5B,sBAAAxhI,EAAA,sEAEO3F,KAAKqruC,uBAFZ,gCAIQrruC,KAAKgruC,MAAMjp7B,UAJnB,gD,wFAQA,WACC,OAAO/hT,KAAKiruC,+B,0EAIb,sBAAAtluC,EAAA,+EAES3F,KAAK+quC,aAAaL,cAF3B,6DAMGf,GAAQ,iFANX,2CAWO3puC,KAAKsruC,6BAXZ,yD,qIAeA,wCAAA3luC,EAAA,wDACiC3F,KAAK8quC,UAA7BpplC,EADT,EACSA,OAAQwolC,EADjB,EACiBA,YAEVqB,EAAmB,GAH1B,cAIqB7plC,GAJrB,IAIC,2BAAWva,EAAiB,QAC1BokmC,EAAiBn/tC,KAAKpM,KAAK+quC,aAAa12Q,SAASlt1B,IALpD,qCAQCnnI,KAAK+quC,aAAab,YAAcA,EAIhClquC,KAAKgruC,MAAQhruC,KAAK+quC,aAZnB,kBAgBS9rrC,QAAQwnJ,IAAI8kiC,GAhBrB,yDAkBGjg9B,IAAetqI,IAAO/4H,KAAK,wDAAZ,MAlBlB,0D,6DA0BH,SAASujtC,GAAT,GAGG,IAFDC,EAEC,EAFDA,eACWC,EACV,EADDC,UAEA,GACEF,GAEA/8sC,OAAO8kgB,OACP,CACA,IAAM1ogB,EAWV,SAAqB4gtC,GACnB,IACE,IAAMC,EAAYD,GAetB,WACE,GAAgD,qBAArCE,mCAAqDA,iCAC9D,OAveJ,WAAa,IAAMxjuC,EAAE,IAAI6se,KAAK,CAFpB,kjUAEyB,OAAO56R,IAAIm2J,gBAAgBpoW,GAuenDA,GAGT,MAAO,GApBgCyjuC,GAErC,IAAKF,EACH,OAGFhC,GAAQ,oCAAD,OAAqC+B,EAAkB,SAAH,OAAYA,GAAoB,KAC3F,IAAM5gtC,EAAS,IAAI0ogB,OAAOm4sB,GAC1B,OAAO,IAAId,GAAiB//sC,GAC5B,MAAO3c,GACPw7tC,GAAQ,iDAvBOmC,CAAYJ,GAE3B,GAAI5gtC,EACF,OAAOA,EAKX,OADA6+sC,GAAQ,gCACD,IAAIK,GA6Bb,SAAS+B,KACP,IAEE,MAAO,mBAAoB965B,KAAYA,EAAO38H,eAC9C,MAAOlsM,GACP,OAAO,GAOX,SAAS4juC,GAAajI,IAQtB,WACE,IAAKgI,KACH,OAGF,IACE965B,EAAO38H,eAAejvG,WAAW25nC,GACjC,MAAO52tC,KAdT6juC,GACAlI,EAAO15nC,aAAUvuG,EAwBnB,SAASowuC,GAAUz8kB,GACjB,YAAmB3zpB,IAAf2zpB,GAKG1ypB,KAAKy1E,SAAWi9kB,EAMzB,SAAS7rE,GAAYv5e,GACnB,IAAMvqD,EAAM/xB,KAAK+xB,MASjB,MAAO,CACL7e,GATSopE,EAAQppE,IAAM2vV,cAUvBm8G,QARc1iY,EAAQ0iY,SAAWjtb,EASjCqsrC,aARmB9hoC,EAAQ8hoC,cAAgBrsrC,EAS3CssrC,UARgB/hoC,EAAQ+hoC,WAAa,EASrC9z3B,QARcjuQ,EAAQiuQ,QAStBr8J,kBARwB5xG,EAAQ4xG,mBAepC,SAASowhC,GAAYhioC,GACnB,GAAK0hoC,KAIL,IACE965B,EAAO38H,eAAelvG,QAAQ45nC,EAAoBrwtC,KAAKC,UAAUy7F,IACjE,MAAOjiG,KAQX,SAASkkuC,GAAqBC,EAAmBC,GAC/C,OAAON,GAAUK,GAAqB,YAAYC,GAAiB,SAQrE,SAASC,GAAT,GAGE,IAFEF,EAEF,EAFEA,kBAAmBC,EAErB,EAFqBA,eAErB,IAFqCE,qBAErC,kEADwB,GAAtBzwhC,EACF,EADEA,kBAEIq8J,EAAUg03B,GAAqBC,EAAmBC,GAClDnioC,EAAUu5e,GAAY,CAC1BtrO,UACAr8J,sBAOF,OAJIywhC,GACFL,GAAYhioC,GAGPA,EAiCT,SAASkoM,GACPo67B,EACAxroC,GAEA,IADAyroC,EACA,wDADc,IAAI7+sC,KAGlB,OAAoB,OAAhB4+sC,QAAmC7wuC,IAAXqlG,GAAwBA,EAAS,GAK9C,IAAXA,GAIGwroC,EAAcxroC,GAAUyroC,EAMjC,SAASC,GACPxioC,EADF,GAOE,IAJEyioC,EAIF,EAJEA,kBACAC,EAGF,EAHEA,kBAGF,IAFEH,kBAEF,MAFe7+sC,KAAK+xB,MAEpB,EACA,OAEEyyP,GAAUloM,EAAQ0iY,QAAS+/vB,EAAmBF,IAG9Cr67B,GAAUloM,EAAQ8hoC,aAAcY,EAAmBH,GAKvD,SAASI,GACP3ioC,EADF,GAKE,QAAKwioC,GAAiBxioC,EAAS,CAAE0ioC,kBAFjC,EADEA,kBAGkDD,kBAFpD,EADqBA,sBAQG,WAApBzioC,EAAQiuQ,SAA8C,IAAtBjuQ,EAAQ+hoC,WAW9C,SAASa,GAAT,EASEC,GACA,IAREC,EAQF,EAREA,eACAJ,EAOF,EAPEA,kBACAD,EAMF,EANEA,kBACA7whC,EAKF,EALEA,kBAMImxhC,EAAkBF,EAAeR,eAlGzC,SAAsBS,GACpB,IAAKpB,KACH,OAAO,KAGT,IAEE,IAAMsB,EAA2Bp85B,EAAO38H,eAAepvG,QAAQ85nC,GAE/D,IAAKqO,EACH,OAAO,KAGT,IAAMC,EAAa3+tC,KAAK6tC,MAAM6wrC,GAI9B,OAFAvD,GAAgB,oCAAqCqD,GAE9CvppB,GAAY0ppB,GACnB,MAAOlluC,GACP,OAAO,MA+E+CmluC,CAAaJ,GAGrE,OAAKC,EAKAJ,GAAqBI,EAAiB,CAAEL,oBAAmBD,uBAIhEhD,GAAgB,sEACT2C,GAAcS,EAAgB,CAAEjxhC,kBAAmBmxhC,EAAgBnssC,MAJjEmssC,GALPtD,GAAgB,gCAAiCqD,GAC1CV,GAAcS,EAAgB,CAAEjxhC,uBAuB3C,SAASuxhC,GAAazJ,EAAQ58lC,EAAOkgkC,GACnC,QAAKomC,GAAe1J,EAAQ58lC,KAM5BummC,GAAU3J,EAAQ58lC,EAAOkgkC,IAElB,G,SAqBMqmC,G,qFAAf,WACE3J,EACA58lC,EACAkgkC,GAHF,qBAAA1hsC,EAAA,yDAKOo+tC,EAAO4J,YALd,yCAMW,MANX,mBAUQtmC,GAAuC,WAAzB08B,EAAO6J,eACvB7J,EAAO4J,YAAYz6tC,QAGjBm0rC,IACF08B,EAAO4J,YAAYzD,aAAc,GAG7B2D,EAAgB9J,EAAOvp4B,aAEvBsz4B,EAA6BC,GAAmB5mmC,EAAO0mmC,EAAcG,yBApB/E,kEA0BiBjK,EAAO4J,YAAYt5Q,SAASy5Q,GA1B7C,kFA4BUvinC,EAAS,MAAS,gBAAiBw+mC,GAA+B,uBAAyB,WAEjGz+8B,IAAetqI,IAAO7yI,MAAP,MA9BnB,UA+BU41tC,EAAOpy7B,KAAK,CAAEpmL,WA/BxB,SAiCU6hF,EAAS66G,gBAGb76G,EAAOgjhC,mBAAmB,qBAAsB,UApCtD,2D,sBA0CA,SAASqd,GAAe1J,EAAQ58lC,GAC9B,IAAK48lC,EAAO4J,aAAe5J,EAAOkK,aAAelK,EAAOpxhC,YACtD,OAAO,EAGT,IAAMu7hC,EAAgBtK,GAAcz8lC,EAAMwzN,WAM1C,QAAIuz4B,EAAgBnK,EAAO/te,SAASm4e,iBAAmBpgtC,KAAK+xB,WAKxDourC,EAAgBnK,EAAO/jtB,aAAaoutB,iBAAmBrK,EAAOvp4B,aAAasy4B,qBAC7EnD,GAAQ,0CAAD,OACqCuE,EADrC,0CAELnK,EAAOvp4B,aAAak+3B,aAAayU,iBAE5B,IAMX,SAASY,GACP5mmC,EACAviG,GAEA,IACE,GAAwB,oBAAbA,GApHf,SAAuBuiG,GACrB,OAAOA,EAAMjnI,OAAS0isC,GAAUkF,OAmHQumC,CAAclnmC,GAClD,OAAOviG,EAASuiG,GAElB,MAAOh5H,GAGP,OAFAm9Q,IACEtqI,IAAO7yI,MAAM,6FAA8FA,GACtG,KAGT,OAAOg5H,EAIT,SAAS6xO,GAAa7xO,GACpB,OAAQA,EAAMjnI,KAIhB,SAASouuC,GAAmBnnmC,GAC1B,MAAsB,gBAAfA,EAAMjnI,KAIf,SAASquuC,GAAcpnmC,GACrB,MAAsB,iBAAfA,EAAMjnI,KAIf,SAASsuuC,GAAgBrnmC,GACvB,MAAsB,aAAfA,EAAMjnI,KAMf,SAASuuuC,GAAqB1K,GAG5B,IAAM2K,EAoER,WACE,IAAMthiC,EAAS66G,cACf,IAAK76G,EACH,OAAO,EAGT,IAAMoP,EAAYpP,EAAOuhiC,eACzB,IAAKnyhC,EACH,OAAO,EAGT,OACGA,EAAUj2D,KAAOiqkC,4BAA6B,EAhFvBoe,GAE1B,OAAO,SAACznmC,EAAO0nmC,GACb,GAAK9K,EAAOpxhC,cAAiBqmK,GAAa7xO,IAAWmnmC,GAAmBnnmC,IAAxE,CAIA,IAAMuhE,EAAammiC,GAAgBA,EAAanmiC,WAK5CgmiC,KAAuBhmiC,GAAcA,EAAa,KAAOA,GAAc,OAIvE4liC,GAAmBnnmC,GAS3B,SAAgC48lC,EAAQ58lC,GACtC,IAAM2nmC,EAAgB/K,EAAO/jtB,aAKzB74Y,EAAM2qnB,UAAY3qnB,EAAM2qnB,SAASu/C,OAASlqqB,EAAM2qnB,SAASu/C,MAAMp5b,UAAY623B,EAAcC,SAAShzuC,KAAO,KAC3G+yuC,EAAcC,SAASpwtC,IAAIwoH,EAAM2qnB,SAASu/C,MAAMp5b,UAf9C+23B,CAAuBjL,EAAQ58lC,GAmBrC,SAA0B48lC,EAAQ58lC,GAChC,IAAM2nmC,EAAgB/K,EAAO/jtB,aAQzB74Y,EAAMmqE,UAAYw9hC,EAAcG,SAASlzuC,KAAO,KAClD+yuC,EAAcG,SAAStwtC,IAAIwoH,EAAMmqE,UAKnC,GAA6B,WAAzByyhC,EAAO6J,gBAA+BzmmC,EAAMwtF,OAASxtF,EAAMwtF,KAAKu6gC,SAClE,OAGF,IAAQC,EAAwBpL,EAAOvp4B,aAA/B204B,oBACR,GAAmC,oBAAxBA,IAAuCA,EAAoBhomC,GACpE,OAGFtuF,YAAW,WAITkrrC,EAAOqL,+BA3CPC,CAAiBtL,EAAQ58lC,MAkE7B,SAASmomC,GAAsBvL,GAC7B,OAAO,SAAC58lC,GACD48lC,EAAOpxhC,aAAgBqmK,GAAa7xO,IAQ7C,SAA8B48lC,EAAQ58lC,GACpC,IAAMoomC,EAAiBpomC,EAAM4yN,WAAa5yN,EAAM4yN,UAAU5uV,QAAUg8H,EAAM4yN,UAAU5uV,OAAO,GAAGzP,MAC9F,GAA8B,kBAAnB6zuC,EACT,OAGF,GAGEA,EAAehhsC,MAAM,6EAIrBghsC,EAAehhsC,MAAM,mEACrB,CAIAu1rC,GAAmBC,EAHAqD,GAAiB,CAClChwmC,SAAU,2BApBZo4mC,CAAqBzL,EAAQ58lC,IA6BjC,SAASsomC,GAAatomC,EAAOw9M,GAC3B,QAAIx9M,EAAMjnI,OAASinI,EAAM4yN,YAAc5yN,EAAM4yN,UAAU5uV,SAAWg8H,EAAM4yN,UAAU5uV,OAAOtJ,YAKrF8iV,EAAKyV,oBAAqBzV,EAAKyV,kBAAkBs14B,WAUvD,SAASC,GAAsB5L,EAAQ58lC,GACrC48lC,EAAOC,sBACPD,EAAOG,WAAU,WACf,OAAK/8lC,EAAMwzN,YAQXop4B,EAAOI,kBAAkB,CACvBjkuC,KAAM0isC,GAAUkF,OAChBnt2B,UAA6B,IAAlBxzN,EAAMwzN,UACjB3/S,KAAM,CACJkgI,IAAK,aACLh0I,QAAS,CACPyzT,UAAWxzN,EAAMwzN,UACjBz6V,KAAM,UACNk3H,SAAU,kBACVp8E,KAAM,CACJ40rC,WAAYzomC,EAAMmqE,eAMnB,MASX,SAASu+hC,GAA2B9L,EAAQ58lC,GAC1C,MAA6B,WAAzB48lC,EAAO6J,gBAMPzmmC,EAAM91F,UAAY6trC,OAKjB/3lC,EAAM4yN,WAAa5yN,EAAMjnI,OAIvBgsuC,GAAUnI,EAAOvp4B,aAAas14B,mBAmFvC,SAASC,GACPhM,EACAp6tC,GAEA,OAAOA,EAAQX,KAAI,YAAsC,IAAnC9I,EAAmC,EAAnCA,KAAM6f,EAA6B,EAA7BA,MAAOvjB,EAAsB,EAAtBA,IAAKgS,EAAiB,EAAjBA,KAAMwsC,EAAW,EAAXA,KACtC+tE,EAAWg7mC,EAAOI,kBAAkB,CACxCjkuC,KAAM0isC,GAAUkF,OAChBnt2B,UAAW56U,EACXi7B,KAAM,CACJkgI,IAAK,kBACLh0I,QAAS,CACP8vC,GAAI92E,EACJygI,YAAanyH,EACbqirC,eAAgB9wqC,EAChBqxqC,aAAc50rC,EACdw+C,WAMN,MAA2B,kBAAb+tE,EAAwB9pE,QAAQC,QAAQ,MAAQ6pE,KAuBlE,SAASinnC,GAA0BjM,GACjC,OAAO,SAAC5yC,GACN,GAAK4yC,EAAOpxhC,YAAZ,CAIA,IAAM/+L,EAzBV,SAAuBu9qC,GACrB,IAAQnirC,EAAamirC,EAAbnirC,KAAMC,EAAOkirC,EAAPlirC,GAER6wC,EAAM/xB,KAAK+xB,MAAQ,IAEzB,MAAO,CACL5/C,KAAM,kBACN6f,MAAO+/B,EACPtjD,IAAKsjD,EACLtxC,KAAMS,EACN+rC,KAAM,CACJupI,SAAUv1K,IAcGihuC,CAAc9+C,GAEd,OAAXv9qC,IAKJmwtC,EAAO/jtB,aAAakwtB,KAAK9juC,KAAKwH,EAAOpF,MACrCu1tC,EAAOC,sBAEPD,EAAOG,WAAU,WAGf,OAFA6L,GAAuBhM,EAAQ,CAACnwtC,KAEzB,QAmBb,SAASu8tC,GACPpM,EACAnwtC,GAEKmwtC,EAAOpxhC,aAIG,OAAX/+L,IAlBN,SAA6BmwtC,EAAQvioC,GAEnC,QAAI8pL,KAAey48B,EAAOvp4B,aAAak+3B,aAAayU,iBAI7C1O,EAAmBj9nC,EAAKymN,eAgB3Bmo7B,CAAoBrM,EAAQnwtC,EAAOpF,OAIvCu1tC,EAAOG,WAAU,WAKf,OAJA6L,GAAuBhM,EAAQ,CAACnwtC,KAIzB,MA0EX,SAASy8tC,GAAsBtM,GAC7B,OAAO,SAAC5yC,GACN,GAAK4yC,EAAOpxhC,YAAZ,CAIA,IAAM/+L,EArCV,SAAmBu9qC,GACjB,IAAQN,EAAsCM,EAAtCN,eAAgBO,EAAsBD,EAAtBC,aAElBI,EAFwCL,EAAR38+B,IAEZg8+B,KAE1B,IAAKK,IAAmBO,IAAiBI,EACvC,OAAO,KAIT,IAAQnqlC,EAAyCmqlC,EAAzCnqlC,OAAQ7F,EAAiCgwlC,EAAjChwlC,IAAkBknG,EAAe8o/B,EAA5BN,YAErB,YAAYp1rC,IAAR0lG,EACK,KAGF,CACLthG,KAAM,eACNsO,KAAMgzF,EACNzhF,MAAO8wqC,EAAiB,IACxBr0rC,IAAK40rC,EAAe,IACpBp2oC,KAAM,CACJqsD,SACAqhG,eAca4niC,CAAUn/C,GAEzBg/C,GAAqBpM,EAAQnwtC,KAKjC,SAAS28tC,GACP95pC,EACA85oC,GAEA,GAAK95oC,EAIL,IACE,GAAoB,kBAATA,EACT,OAAO85oC,EAAYzyjC,OAAOrnF,GAAM50E,OAGlC,GAAI40E,aAAgB+okB,gBAClB,OAAO+wkB,EAAYzyjC,OAAOrnF,EAAKx1E,YAAYY,OAG7C,GAAI40E,aAAgBoqQ,SAAU,CAC5B,IAAM2v5B,EAAcC,GAAmBh6pC,GACvC,OAAO85oC,EAAYzyjC,OAAO0ykC,GAAa3uuC,OAGzC,GAAI40E,aAAgBw+Z,KAClB,OAAOx+Z,EAAK16E,KAGd,GAAI06E,aAAgBs3G,YAClB,OAAOt3G,EAAKyvF,WAId,MAAO99J,KAQX,SAASsouC,GAAyBhnmC,GAChC,GAAKA,EAAL,CAIA,IAAM3tI,EAAO6/C,SAAS8tF,EAAQ,IAC9B,OAAOttF,MAAMrgD,QAAQD,EAAYC,GAInC,SAAS40uC,GAAcl6pC,GACrB,IACE,GAAoB,kBAATA,EACT,MAAO,CAACA,GAGV,GAAIA,aAAgB+okB,gBAClB,MAAO,CAAC/okB,EAAKx1E,YAGf,GAAIw1E,aAAgBoqQ,SAClB,MAAO,CAAC4v5B,GAAmBh6pC,IAG7B,IAAKA,EACH,MAAO,MAAC36E,GAEV,MAAOoj5B,GAEP,OADA5znB,IAAetqI,IAAO/4H,KAAK,oCAAqCwuD,GACzD,MAAC36E,EAAW,oBAKrB,OAFAwvR,IAAetqI,IAAOm8D,KAAK,sDAAuD1mI,GAE3E,MAAC36E,EAAW,yBAIrB,SAAS80uC,GACPzzhC,EACAmjD,GAEA,IAAKnjD,EACH,MAAO,CACL+zG,QAAS,GACTn1T,UAAMD,EACNg5kC,MAAO,CACLlqE,SAAU,CAACtqwB,KAKjB,IAAMuw+B,EAAU,eAAK1zhC,EAAK233B,OACpBg8J,EAAmBD,EAAQjmO,UAAY,GAI7C,OAHAimO,EAAQjmO,SAAR,sBAAuBkmO,GAAvB,CAAyCxw+B,IAEzCnjD,EAAK233B,MAAQ+7J,EACN1zhC,EAIT,SAAS4zhC,GACP7wuC,EACA86C,GAEA,IAAKA,EACH,OAAO,KAGT,IAAQ61oC,EAA6E71oC,EAA7E61oC,eAAgBO,EAA6Dp2oC,EAA7Do2oC,aAAc5vlC,EAA+CxmD,EAA/CwmD,IAAK6F,EAA0CrsD,EAA1CqsD,OAAQqhG,EAAkC1tJ,EAAlC0tJ,WAAYnnG,EAAsBvmD,EAAtBumD,QAASwnB,EAAa/tE,EAAb+tE,SAexE,MAbe,CACb7oH,OACA6f,MAAO8wqC,EAAiB,IACxBr0rC,IAAK40rC,EAAe,IACpB5irC,KAAMgzF,EACNxmD,KAAMg2rC,YAAkB,CACtB3poC,SACAqhG,aACAnnG,UACAwnB,cAQN,SAASkonC,GAAqCC,GAC5C,MAAO,CACLhg7B,QAAS,GACTn1T,KAAMm1uC,EACNp8J,MAAO,CACLlqE,SAAU,CAAC,iBAMjB,SAASumO,GACPjg7B,EACAgg7B,EACAz6pC,GAEA,GAAKy6pC,GAA4C,IAAhC9yuC,OAAO0D,KAAKovT,GAASrvT,OAAtC,CAIA,IAAKqvuC,EACH,MAAO,CACLhg7B,WAIJ,IAAKz6O,EACH,MAAO,CACLy6O,UACAn1T,KAAMm1uC,GAIV,IAAM/zhC,EAAO,CACX+zG,UACAn1T,KAAMm1uC,GAGR,EA8BF,SAA8Bz6pC,GAG5B,IAAKA,GAAwB,kBAATA,EAClB,MAAO,CACLA,QAIJ,IAAM26pC,EAAmB36pC,EAAK50E,OAASu9tC,EACjCiS,EAkCR,SAA4B7otC,GAC1B,IAAMpF,EAAQoF,EAAI,GACZxE,EAAOwE,EAAIA,EAAI3mB,OAAS,GAG9B,MAAkB,MAAVuhB,GAA0B,MAATY,GAA4B,MAAVZ,GAA0B,MAATY,EAvCrCsttC,CAAmB76pC,GAE1C,GAAI26pC,EAAkB,CACpB,IAAMG,EAAgB96pC,EAAK3mE,MAAM,EAAGsvtC,GAEpC,OAAIiS,EACK,CACL56pC,KAAM86pC,EACN3mO,SAAU,CAAC,yBAIR,CACLn07B,KAAM,GAAF,OAAK86pC,EAAL,UACJ3mO,SAAU,CAAC,mBAIf,GAAIymO,EACF,IAEE,MAAO,CACL56pC,KAFe9nE,KAAK6tC,MAAMi6B,IAI5B,MAAO+6pC,IAKX,MAAO,CACL/6pC,QAtEyCg7pC,CAAqBh7pC,GAAlDi7pC,EAAd,EAAQj7pC,KAAsBm07B,EAA9B,EAA8BA,SAQ9B,OAPAztzB,EAAK1mI,KAAOi7pC,EACR9mO,GAAYA,EAAS/ogC,OAAS,IAChCs7M,EAAK233B,MAAQ,CACXlqE,aAIGztzB,GAIT,SAASw0hC,GAAkBzg7B,EAAS0g7B,GAClC,OAAOxzuC,OAAO0D,KAAKovT,GAASvlT,QAAO,SAACkmuC,EAAiBvtuC,GACnD,IAAMijuC,EAAgBjjuC,EAAI80C,cAK1B,OAHIw4rC,EAAerouC,SAASg+tC,IAAkBr26B,EAAQ5sT,KACpDutuC,EAAgBtK,GAAiBr26B,EAAQ5sT,IAEpCutuC,IACN,IAGL,SAASpB,GAAmB/6kB,GAI1B,OAAO,IAAIlW,gBAAgBkW,GAAUz0pB,WAwDvC,SAASqtlC,GAAW9s/B,EAAK0uoC,GACvB,IAAM/U,EAMR,SAAoB35nC,GAAwC,IAAnCqoY,EAAmC,uDAAzB54J,EAAOjrS,SAAS6jc,QAEjD,GAAIroY,EAAIk7F,WAAW,YAAcl7F,EAAIk7F,WAAW,aAAel7F,EAAIk7F,WAAWu0I,EAAOxnR,SAAS3uC,QAC5F,OAAO0mF,EAET,IAAMswoC,EAAW,IAAIz3hC,IAAI74G,EAAKqoY,GAG9B,GAAIiowB,EAASh3tC,SAAW,IAAIu/L,IAAIwvR,GAAS/ud,OACvC,OAAO0mF,EAGT,IAAM25nC,EAAU2W,EAAS1knC,KAGzB,IAAK5rB,EAAIy4F,SAAS,MAAQkhiC,EAAQlhiC,SAAS,KACzC,OAAOkhiC,EAAQrrtC,MAAM,GAAI,GAG3B,OAAOqrtC,EAzBS4W,CAAWvwoC,GAE3B,OAAOwwoC,YAAyB7W,EAAS+U,G,8CA8B3C,WACE314B,EACA5V,EACA34S,GAHF,iBAAArmC,EAAA,+EAQuBssuC,GAAkB134B,EAAY5V,EAAM34S,GAR3D,OAQUgP,EARV,OAWUpnC,EAASm9tC,GAA4B,iBAAkB/1rC,GAC7Dm1rC,GAAqBnksC,EAAQ+3rC,OAAQnwtC,GAZzC,gDAcI03Q,IAAetqI,IAAO7yI,MAAM,8CAAb,MAdnB,0D,+BA2Ce8juC,G,qFAAf,WACE134B,EACA5V,EACA34S,GAHF,2CAAArmC,EAAA,6DAOQm6C,EAAM/xB,KAAK+xB,MAPnB,EAQuD6kS,EAA7Cks2B,sBARV,MAQ2B/woC,EAR3B,IAQuD6kS,EAAvBys2B,oBARhC,MAQ+CtxoC,EAR/C,IAgBMy6S,EAAWv/S,KALbwmD,EAXJ,EAWIA,IACA6F,EAZJ,EAYIA,OAZJ,IAaI6plC,YAAaxo/B,OAbjB,MAa8B,EAb9B,EAcuBwpiC,EAdvB,EAcIC,kBACoBC,EAfxB,EAeIC,mBAGIC,EACJhkJ,GAAW9s/B,EAAKx1D,EAAQumsC,0BAA4BjkJ,GAAW9s/B,EAAKx1D,EAAQwmsC,uBAExEjxoC,EAAU+woC,EACZG,GAAgBzmsC,EAAS24S,EAAKlgO,MAAOytnC,GACrCjB,GAAqCiB,GAvB3C,SAwByBQ,GAAiBJ,EAAgBtmsC,EAAS24S,EAAK57N,SAAUqpnC,GAxBlF,cAwBQrpnC,EAxBR,yBA0BS,CACL8nkC,iBACAO,eACA5vlC,MACA6F,SACAqhG,aACAnnG,UACAwnB,aAjCJ,4C,sBAqCA,SAAS0pnC,GAAT,EAEEhunC,EACAytnC,GACA,IAHES,EAGF,EAHEA,qBAAsBC,EAGxB,EAHwBA,sBAIlB1h7B,EAAUzsM,EAgIlB,SAA2ButkC,EAAW4/C,GACpC,GAAyB,IAArB5/C,EAAUnwrC,QAAwC,kBAAjBmwrC,EAAU,GAC7C,OAAO6gD,GAAsB7gD,EAAU,GAAK4/C,GAG9C,GAAyB,IAArB5/C,EAAUnwrC,OACZ,OAAOgxuC,GAAsB7gD,EAAU,GAAK4/C,GAG9C,MAAO,GAzIiBkB,CAAkBrunC,EAAOmunC,GAAyB,GAE1E,IAAKD,EACH,OAAOxB,GAA8Bjg7B,EAASgh7B,OAAiBp2uC,GAIjE,IACA,EAA2B60uC,GADPoC,GAAwBtunC,IAC5C,mBAAOuunC,EAAP,KAAgB1y+B,EAAhB,KACMtlN,EAAOm2rC,GAA8Bjg7B,EAASgh7B,EAAiBc,GAErE,OAAI1y+B,EACKsw+B,GAAa51rC,EAAMslN,GAGrBtlN,E,SAIM03rC,G,uFAAf,WACEJ,EADF,EASEvpnC,EACAqpnC,GAVF,+BAAAzsuC,EAAA,yDAGIgtuC,EAHJ,EAGIA,qBACApiB,EAJJ,EAIIA,YACA0iB,EALJ,EAKIA,uBAOGX,QAAuCx2uC,IAArBs2uC,EAZzB,yCAaWnB,GAAqCmB,IAbhD,UAgBQlh7B,EAAUnoM,EAAWmqnC,GAAcnqnC,EAASmoM,QAAS+h7B,GAA0B,GAEhFlqnC,IAAc4pnC,QAA6C72uC,IAArBs2uC,GAlB7C,yCAmBWjB,GAA8Bjg7B,EAASkh7B,OAAkBt2uC,IAnBpE,uBAsBoCq3uC,GAAwBpqnC,GAtB5D,sCAsBSqqnC,EAtBT,KAsBmB9y+B,EAtBnB,KAuBQ1sP,EAASy/tC,GAAgBD,EAAU,CACvCT,uBACApiB,cACA6hB,mBACAE,iBACAph7B,aAGE5wD,EA/BN,0CAgCWsw+B,GAAah9tC,EAAQ0sP,IAhChC,iCAmCS1sP,GAnCT,6C,sBAsCA,SAASy/tC,GACPD,EADF,GAWE,IARET,EAQF,EAREA,qBACApiB,EAOF,EAPEA,YACA6hB,EAMF,EANEA,iBACAE,EAKF,EALEA,eACAph7B,EAIF,EAJEA,QAKF,IACE,IAAMn1T,EACJq3uC,GAAYA,EAASvxuC,aAA+B/F,IAArBs2uC,EAC3B7B,GAAY6C,EAAU7iB,GACtB6hB,EAEN,OAAKE,EAKInB,GAA8Bjg7B,EAASn1T,EAD5C42uC,EACkDS,OAGFt3uC,GAP3Cm1uC,GAAqCl1uC,GAQ9C,MAAOoS,GAGP,OAFAm9Q,IAAetqI,IAAO/4H,KAAK,6CAA8C9Z,GAElEgjuC,GAA8Bjg7B,EAASkh7B,OAAkBt2uC,I,SAIrDq3uC,G,iFAAf,WAAuCpqnC,GAAvC,iBAAApjH,EAAA,yDACQm8I,EAAMwxlC,GAAkBvqnC,GADhC,yCAIW,MAACjtH,EAAW,qBAJvB,gCAQuBy3uC,GAAoBzxlC,GAR3C,cAQUj2B,EARV,yBASW,CAACA,IATZ,yCAWIy/J,IAAetqI,IAAO/4H,KAAK,iDAAZ,MAXnB,kBAYW,MAACnsB,EAAW,qBAZvB,2D,sBAgBA,SAASi3uC,KAAwC,IAAhB/gD,EAAgB,uDAAJ,GAE3C,GAAyB,IAArBA,EAAUnwrC,QAAwC,kBAAjBmwrC,EAAU,GAI/C,OAAQA,EAAU,GAAKv7mC,KAGzB,SAASy8pC,GAAchi7B,EAAS0g7B,GAC9B,IAAM4B,EAAa,GAQnB,OANA5B,EAAelluC,SAAQ,SAAAg9H,GACjBwnL,EAAQntT,IAAI2lI,KACd8pmC,EAAW9pmC,GAAUwnL,EAAQntT,IAAI2lI,OAI9B8pmC,EAeT,SAASX,GACPpunC,EACAmtnC,GAEA,IAAKntnC,EACH,MAAO,GAGT,IAAMysM,EAAUzsM,EAAMysM,QAEtB,OAAKA,EAIDA,aAAmBu7Q,QACdymqB,GAAchi7B,EAAS0g7B,GAI5BnwuC,MAAMC,QAAQwvT,GACT,GAGFyg7B,GAAkBzg7B,EAAS0g7B,GAZzB,GAeX,SAAS0B,GAAkBvqnC,GACzB,IAEE,OAAOA,EAASvuE,QAChB,MAAOrsC,GAEPm9Q,IAAetqI,IAAO/4H,KAAK,yCAA0C9Z,IASzE,SAASoluC,GAAoBxqnC,GAC3B,OAAO,IAAI9pE,SAAQ,SAACC,EAASi3B,GAC3B,IAAMsuB,EAAU5rD,YAAW,kBAAMs9B,EAAO,IAAIvuE,MAAM,iDAAgD,M,6CAElG6ruC,CAAiB1qnC,GACdxyC,MACC,SAAAs40B,GAAG,OAAI3v2B,EAAQ2v2B,MACf,SAAAtjyB,GAAM,OAAIp1C,EAAOo1C,MAElBg+Q,SAAQ,kBAAMhjQ,aAAa9hC,S,8CAIlC,WAAgCskB,GAAhC,SAAApjH,EAAA,sEAGeojH,EAAS8C,OAHxB,oF,oEAUA,WACE0uO,EACA5V,EACA34S,GAHF,iBAAArmC,EAAA,sDAKE,IACQq1C,EAAO04rC,GAAgBn54B,EAAY5V,EAAM34S,GAGzCp4B,EAASm9tC,GAA4B,eAAgB/1rC,GAC3Dm1rC,GAAqBnksC,EAAQ+3rC,OAAQnwtC,GACrC,MAAOzF,GACPm9Q,IAAetqI,IAAO7yI,MAAM,4CAA6CA,GAZ7E,4C,sBAqBA,SAASwluC,GACPp54B,EACA5V,EACA34S,GAEA,IAAQwoK,EAAemwI,EAAfnwI,IAAK/vF,EAAUkgO,EAAVlgO,MAEb,GAAK+vF,EAAL,CAIA,IAAMo/hC,EAAUrD,GAAY9rnC,EAAOz4E,EAAQukrC,aACrCsjB,EAAUr/hC,EAAImyX,kBAAkB,kBAClC+pqB,GAAyBl8hC,EAAImyX,kBAAkB,mBAiJrD,SACElwf,EACA4zZ,EACAkmvB,GAEA,IAEE,OAAOggB,GAD0B,SAAjBlmwB,GAA2B5zZ,GAAwB,kBAATA,EAAoB9nE,KAAKC,UAAU6nE,GAAQA,EACzE85oC,GAC5B,MAAOihB,GACP,QAzJEsC,CAAat/hC,EAAIzrF,SAAUyrF,EAAI61R,aAAcr+b,EAAQukrC,kBAEzCz0tC,IAAZ83uC,IACFr54B,EAAWv/S,KAAKm3rC,kBAAoByB,QAEtB93uC,IAAZ+3uC,IACFt54B,EAAWv/S,KAAKq3rC,mBAAqBwB,IAIzC,SAASH,GACPn54B,EACA5V,EACA34S,GAEA,IAAM8T,EAAM/xB,KAAK+xB,MACjB,EAAiE6kS,EAAzDks2B,sBAAR,MAAyB/woC,EAAzB,IAAiE6kS,EAAnCys2B,oBAA9B,MAA6CtxoC,EAA7C,EAAkD2kE,EAAekgO,EAAflgO,MAAO+vF,EAAQmwI,EAARnwI,IAEzD,EAMI+lJ,EAAWv/S,KALbwmD,EADF,EACEA,IACA6F,EAFF,EAEEA,OAFF,IAGE6plC,YAAaxo/B,OAHf,MAG4B,EAH5B,EAIqBwpiC,EAJrB,EAIEC,kBACoBC,EALtB,EAKEC,mBAGF,IAAK7woC,EACH,OAAO,KAGT,IAAKgzG,IAAQ854B,GAAW9s/B,EAAKx1D,EAAQumsC,yBAA2BjkJ,GAAW9s/B,EAAKx1D,EAAQwmsC,uBAGtF,MAAO,CACL3hD,iBACAO,eACA5vlC,MACA6F,SACAqhG,aACAnnG,QARc0voC,GAAqCiB,GASnDnpnC,SARekonC,GAAqCmB,IAYxD,IAAMnhD,EAAUz8+B,EAAIg8+B,KACdoiD,EAAwB3hD,EAC1B0gD,GAAkB1gD,EAAQH,gBAAiB9kpC,EAAQ4msC,uBACnD,GACEK,EAAyBtB,GAmBjC,SAA4Bn9hC,GAC1B,IAAM08G,EAAU18G,EAAIqqyB,wBAEpB,IAAK3trB,EACH,MAAO,GAGT,OAAOA,EAAQnyQ,MAAM,QAAQpzC,QAAO,SAACutI,EAAKmjJ,GACxC,MAAqBA,EAAKt9O,MAAM,MAAhC,mBAAOz6C,EAAP,KAAY5I,EAAZ,KAEA,OADAw9I,EAAI50I,EAAI80C,eAAiB19C,EAClBw9I,IACN,IA9B8C66lC,CAAmBv/hC,GAAMxoK,EAAQinsC,wBAElF,EAAsCjnsC,EAAQ2msC,qBAAuBhC,GAAclsnC,GAAS,MAAC3oH,GAA7F,mBAAOyinB,EAAP,KAAoBy1nB,EAApB,KACA,EAAwChosC,EAAQ2msC,qBA8BlD,SAA6Bn+hC,GAE3B,IAAMznD,EAAS,GAEf,IACE,MAAO,CAACynD,EAAII,cACZ,MAAOxsM,GACP2kJ,EAAO3gJ,KAAKhE,GAId,IACE,OAqBJ,SACEquE,EACA4zZ,GAEA,IACE,GAAoB,kBAAT5zZ,EACT,MAAO,CAACA,GAGV,GAAIA,aAAgBktoB,SAClB,MAAO,CAACltoB,EAAKA,KAAKsmqB,WAGpB,GAAqB,SAAjB1yQ,GAA2B5zZ,GAAwB,kBAATA,EAC5C,MAAO,CAAC9nE,KAAKC,UAAU6nE,IAGzB,IAAKA,EACH,MAAO,MAAC36E,GAEV,MAAOoj5B,GAEP,OADA5znB,IAAetqI,IAAO/4H,KAAK,oCAAqCwuD,GACzD,MAAC36E,EAAW,oBAKrB,OAFAwvR,IAAetqI,IAAOm8D,KAAK,sDAAuD1mI,GAE3E,MAAC36E,EAAW,yBAhDVm4uC,CAAkBz/hC,EAAIzrF,SAAUyrF,EAAI61R,cAC3C,MAAOjie,GACP2kJ,EAAO3gJ,KAAKhE,GAKd,OAFAkjR,IAAetqI,IAAO/4H,KAAP,MAAA+4H,IAAM,CAAM,4CAAN,OAAqD+L,IAEnE,MAACjxJ,GAjD+Do4uC,CAAoB1/hC,GAAO,MAAC14M,GAAnG,mBAAOmotC,EAAP,KAAqBkwB,EAArB,KAEM5yoC,EAAU4voC,GAA8ByB,EAAuBV,EAAiB3znB,GAChFx1f,EAAWoonC,GAA8B8B,EAAwBb,EAAkBnuB,GAEzF,MAAO,CACLpzB,iBACAO,eACA5vlC,MACA6F,SACAqhG,aACAnnG,QAASyyoC,EAAiBpD,GAAarvoC,EAASyyoC,GAAkBzyoC,EAClEwnB,SAAUornC,EAAkBvD,GAAa7nnC,EAAUornC,GAAmBprnC,GAoG1E,SAASqrnC,GAAyBrQ,GAChC,IAAM32hC,EAAS66G,cAEf,IACE,IAAMso6B,EAAc,IAAIlP,YAExB,EAMI0iB,EAAOvp4B,aAELxuT,EAAU,CACd+3rC,SACAxT,cACAgiB,uBAXF,EACEA,uBAWAC,sBAZF,EAEEA,sBAWAG,qBAbF,EAGEA,qBAWAC,sBAdF,EAIEA,sBAWAK,uBAfF,EAKEA,wBAaE7liC,GAAUA,EAAOz0J,GACnBy0J,EAAOz0J,GAAG,uBAAuB,SAAC4hT,EAAY5V,GAAb,OAYvC,SACE34S,EACAuuT,EACA5V,GAEA,IAAK4V,EAAWv/S,KACd,OAGF,KA2BF,SAA0Bu/S,GACxB,MAA+B,QAAxBA,EAAWnjO,UA3BZi9mC,CAAiB954B,IAkCzB,SAAoB5V,GAClB,OAAOA,GAAQA,EAAKnwI,IAnCkB8/hC,CAAW3v5B,KAI7Cgv5B,GAAoBp54B,EAAY5V,EAAM34S,G,yCAItCuosC,CAA6Bh64B,EAAY5V,EAAM34S,IAsBrD,SAA4BuuT,GAC1B,MAA+B,UAAxBA,EAAWnjO,SApBZo9mC,CAAmBj64B,IA2B3B,SAAsB5V,GACpB,OAAOA,GAAQA,EAAK57N,SA5BoB0rnC,CAAa9v5B,KA1gBvD,SACE4V,EACA5V,EACA34S,GAEA,IAAQy4E,EAAoBkgO,EAApBlgO,MAAOsE,EAAa47N,EAAb57N,SAGT6qnC,EAAUrD,GADH9rnC,EAAQsunC,GAAwBtunC,QAAS3oH,EACpBkwC,EAAQukrC,aAEpCsjB,EAAU9qnC,EAAW2nnC,GAAyB3nnC,EAASmoM,QAAQntT,IAAI,wBAAqBjI,OAE9EA,IAAZ83uC,IACFr54B,EAAWv/S,KAAKm3rC,kBAAoByB,QAEtB93uC,IAAZ+3uC,IACFt54B,EAAWv/S,KAAKq3rC,mBAAqBwB,GA8fnCa,CAAsBn64B,EAAY5V,EAAM34S,G,yCAIxC2osC,CAA+Bp64B,EAAY5V,EAAM34S,IAEnD,MAAO5jC,GACPkjR,IAAetqI,IAAO/4H,KAAK,4CA5C8B2stC,CAA2B5osC,EAASuuT,EAAY5V,OAGvG8s2B,YAr1BN,SAAiCsyC,GAC/B,OAAO,SAAC5yC,GACN,GAAK4yC,EAAOpxhC,YAAZ,CAIA,IAAM/+L,EA/BV,SAAqBu9qC,GACnB,IAAQN,EAAsDM,EAAtDN,eAAgBO,EAAsCD,EAAtCC,aAAcv9wB,EAAwBs9wB,EAAxBt9wB,UAAW9qT,EAAaookC,EAAbpokC,SAEjD,IAAKqokC,EACH,OAAO,KAIT,IAAQ/plC,EAAgBwsU,EAAhBxsU,OAER,MAAO,CACLnnG,KAAM,iBACN6f,MAAO8wqC,EAAiB,IACxBr0rC,IAAK40rC,EAAe,IACpB5irC,KANsBqla,EAARryU,IAOdxmD,KAAM,CACJqsD,SACAqhG,WAAY3/E,EAAYA,EAAWtjB,YAAS3pG,IAc/B+4uC,CAAY1jD,GAE3Bg/C,GAAqBpM,EAAQnwtC,KA60BIkhuC,CAAwB/Q,IACvDtzC,YAA6B4/C,GAAsBtM,KAErD,MAAO7kV,KA0DX,IAAI61V,GAAmB,KAMvB,IAAMC,GACJ,SAACjR,GAAD,OACA,SAAC/q4B,GACC,GAAK+q4B,EAAOpxhC,YAAZ,CAIA,IAAM/+L,EAYV,SAAqBolV,GAKnB,IAAMi84B,EAAgBj84B,EAAMk84B,mBAAqBl84B,EAAMk84B,oBAIvD,GAAIH,KAAqBE,IAAkBA,EACzC,OAAO,KAKT,GAFAF,GAAmBE,GApCrB,SAAkC164B,GAChC,QAASA,EAAWnjO,SAsCjB+9mC,CAAyBF,IAC1B,CAAC,QAAS,MAAO,eAAgB,sBAAsB1ruC,SAAS0ruC,EAAc79mC,WAC9E69mC,EAAc79mC,SAASslE,WAAW,OAElC,OAAO,KAGT,GAA+B,YAA3Bu4iC,EAAc79mC,SAChB,OAOJ,SACEmjO,GAEA,IAAMvvU,EAAOuvU,EAAWv/S,MAAQu/S,EAAWv/S,KAAKt3C,UAEhD,IAAKjC,MAAMC,QAAQspB,IAAyB,IAAhBA,EAAKnpB,OAC/B,OAAOuluC,GAAiB7s4B,GAG1B,IAAI664B,GAAc,EAGZC,EAAiBrqtC,EAAKhiB,KAAI,SAAA0hB,GAC9B,IAAKA,EACH,OAAOA,EAET,GAAmB,kBAARA,EACT,OAAIA,EAAI7oB,OAASw9tC,GACf+V,GAAc,EACd,UAAU1qtC,EAAI5a,MAAM,EAAGuvtC,GAAvB,WAGK30sC,EAET,GAAmB,kBAARA,EACT,IACE,IAAM4qtC,EAAgBtrhC,YAAUt/L,EAAK,GAErC,OADoB/b,KAAKC,UAAU0muC,GACnBzzuC,OAASw9tC,GACvB+V,GAAc,EAEd,UAAUzmuC,KAAKC,UAAU0muC,EAAe,KAAM,GAAGxluC,MAAM,EAAGuvtC,GAA1D,WAEKiW,EACP,MAAOltuC,IAKX,OAAOsiB,KAGT,OAAO08sC,GAAiB,2BACnB7s4B,GADkB,IAErBv/S,KAAM,2BACDu/S,EAAWv/S,MADZ,IAEFt3C,UAAW2xuC,GACPD,EAAc,CAAEtgK,MAAO,CAAElqE,SAAU,CAAC,2BAA+B,OAtDlE2qO,CAA2BN,GAGpC,OAAO7N,GAAiB6N,GAvCPO,CAAYx84B,GAEtBplV,GAILkwtC,GAAmBC,EAAQnwtC,MA4F/B,SAAS6huC,GAAmB1R,GAE1B,IAAM/q4B,EAAQm3E,cACR/iO,EAAS66G,cAEf+wC,EAAM084B,iBAAiBV,GAAoBjR,IAC3Ct0C,YAAuC+3C,GAAkBzD,IACzD4R,YAAiC3F,GAA0BjM,IAC3DqQ,GAAyBrQ,GAIzB,IAAM9oB,EA/tCR,SACE8oB,GAEA,IACM6R,EADN,wDACyDnH,GAAqB1K,QAAUjouC,EAExF,OAAOsC,OAAO+8C,QACZ,SAACgsF,EAAOw9M,GAEN,OAAKo/4B,EAAOpxhC,YAIR47hC,GAAcpnmC,WAGTA,EAAMi4d,YACNj4d,IAIJ6xO,GAAa7xO,IAAWmnmC,GAAmBnnmC,IAAWqnmC,GAAgBrnmC,KAKnD48lC,EAAOE,+BAK3BuK,GAAgBrnmC,IAGlB48lC,EAAOjyiC,QACP3qD,EAAM2qnB,SAAStN,SAASqxf,UAAY9R,EAAO/nhC,eAE3C2zhC,GAAsB5L,EAAQ58lC,GACvBA,GAKLsomC,GAAatomC,EAAOw9M,KAAUo/4B,EAAOvp4B,aAAak+3B,aAAaod,mBACjExq9B,IAAetqI,IAAO/1C,IAAI,+CAAgDk8B,GACnE,QAMmB0omC,GAA2B9L,EAAQ58lC,IAIW,YAAzB48lC,EAAO6J,iBAGtDzmmC,EAAMwtF,KAAN,2BAAkBxtF,EAAMwtF,MAAxB,IAA8Bu6gC,SAAUnL,EAAO/nhC,kBAK7C45hC,GAEFA,EAAiBzumC,EAAO,CAAEuhE,WAAY,MAGjCvhE,GA9CEA,EAZAA,IA4DX,CAAElmG,GAAI,WAypCe80sC,CAA0BhS,GAASiS,GAAS5oiC,IAC/DA,GAAUA,EAAOs7gC,kBACnBt7gC,EAAOs7gC,kBAAkBzN,GAEzByN,YAAkBzN,GAIhB+6B,GAAS5oiC,KACXA,EAAOz0J,GAAG,kBAAmB22rC,GAAsBvL,IACnD32hC,EAAOz0J,GAAG,iBAAkB81rC,GAAqB1K,IACjD32hC,EAAOz0J,GAAG,aAAa,SAACw2mB,GACtB,IAAM+/kB,EAAWnL,EAAO/nhC,eAEpBkzhC,GAAYnL,EAAOpxhC,aAAwC,YAAzBoxhC,EAAO6J,gBAEnB7J,EAAOE,iCAE7B90kB,EAAI0mlB,UAAY3G,OAKtB9hiC,EAAOz0J,GAAG,oBAAoB,SAAAg0sB,GAC5Bo3e,EAAOkS,gBAAkBtpf,KAK3Bv/iB,EAAOz0J,GAAG,qBAAqB,SAAAg0sB,GAC7Bo3e,EAAOkS,gBAAkBtpf,KAI3Bv/iB,EAAOz0J,GAAG,sBAAsB,SAACu9rC,EAAelqsC,GAC9C,IAAMkjsC,EAAWnL,EAAO/nhC,eACpBhwK,GAAWA,EAAQmqsC,eAAiBpS,EAAOpxhC,aAAeu8hC,GAExDgH,EAAcpkf,UAAYokf,EAAcpkf,SAAStN,WACnD0xf,EAAcpkf,SAAStN,SAASqxf,UAAY3G,OAQtD,SAAS8G,GAAS5oiC,GAChB,SAAUA,IAAUA,EAAOz0J,I,SAOdy9rC,G,iFAAf,WAA8BrS,GAA9B,SAAAp+tC,EAAA,wFAGWs5C,QAAQwnJ,IACbspiC,GAAuBhM,EAAQ,CAE7BsS,GAAkBpl6B,EAAOyhR,YAAYpxM,YAN7C,yDAWW,IAXX,yD,sBAeA,SAAS+01B,GAAkBC,GACzB,IAAQC,EAAqDD,EAArDC,gBAAiBC,EAAoCF,EAApCE,gBAAiBC,EAAmBH,EAAnBG,eAGpCxqrC,EAAOl+B,KAAK+xB,MAAQ,IAC1B,MAAO,CACL5/C,KAAM,SACNsO,KAAM,SACNuR,MAAOksC,EACPzvD,IAAKyvD,EACLjR,KAAM,CACJsmW,OAAQ,CACNi11B,kBACAC,kBACAC,oBA0ER,SAASC,GAAuB3S,GAC9B,IAAI4S,GAAgB,EAEpB,OAAO,SAACxvmC,EAAOyvmC,GAEb,GAAK7S,EAAOE,+BAAZ,CAQA,IAAM58B,EAAauvC,IAAgBD,EACnCA,GAAgB,EAEZ5S,EAAO+C,eACTD,GAAqC9C,EAAO+C,cAAe3/lC,GAI7D48lC,EAAOG,WAAU,WAYf,GAN6B,WAAzBH,EAAO6J,eAA8BvmC,GACvC08B,EAAO8S,mBAKJrJ,GAAazJ,EAAQ58lC,EAAOkgkC,GAE/B,OAAO,EAKT,IAAKA,EACH,OAAO,EAiBT,GAsEN,SAA0B08B,EAAQ18B,GAEhC,IAAKA,IAAe08B,EAAO15nC,SAAwC,IAA7B05nC,EAAO15nC,QAAQ+hoC,UACnD,OAGFoB,GAAazJ,EAnCf,SAA4BA,GAC1B,IAAM/3rC,EAAU+3rC,EAAOvp4B,aACvB,MAAO,CACLt6V,KAAM0isC,GAAUkF,OAChBnt2B,UAAW5sU,KAAK+xB,MAChB9E,KAAM,CACJkgI,IAAK,UACLh0I,QAAS,CACP4vsC,mBAAoB/S,EAAOgT,oBAC3BxK,kBAAmBvgsC,EAAQugsC,kBAC3BuD,gBAAiB9jsC,EAAQ8jsC,gBACzBkH,qBAAsBhrsC,EAAQy/rC,eAC9BwL,cAAejrsC,EAAQirsC,cACvB7W,YAAap0rC,EAAQo0rC,YACrB39B,cAAez2pC,EAAQy2pC,cACvBgpC,iBAAgB1H,EAAO4J,aAA0C,WAA5B5J,EAAO4J,YAAYztuC,KACxDg3uC,qBAAsBlrsC,EAAQumsC,uBAAuB1wuC,OAAS,EAC9D8wuC,qBAAsB3msC,EAAQ2msC,qBAC9BwE,yBAA0BnrsC,EAAQ4msC,sBAAsB/wuC,OAAS,EACjEu1uC,0BAA2BprsC,EAAQinsC,uBAAuBpxuC,OAAS,KAgBpDw1uC,CAAmBtT,IAAS,GApF7CuT,CAAiBvT,EAAQ18B,GAQrB08B,EAAO15nC,SAAW05nC,EAAO15nC,QAAQ4xG,kBACnC,OAAO,EAKT,GAA6B,WAAzB8nhC,EAAO6J,eAA8B7J,EAAO15nC,SAAW05nC,EAAO4J,YAAa,CAC7E,IAAM4J,EAAgBxT,EAAO4J,YAAYvC,uBACrCmM,IACF5N,GAAQ,uEAAD,OACkE,IAAI57sC,KAAKwptC,IAChFxT,EAAOvp4B,aAAak+3B,aAAayU,gBAGnCpJ,EAAO15nC,QAAQ0iY,QAAUwqwB,EAErBxT,EAAOvp4B,aAAaky4B,eACtBL,GAAYtI,EAAO15nC,UAgBzB,MAX6B,YAAzB05nC,EAAO6J,eAQJ7J,EAAOjyiC,SAGP,UArFPw5F,IAAetqI,IAAO/4H,KAAK,0DAuIjC,SAASuvtC,GACPC,EACAC,EACA3yR,EACAgkQ,GAEA,OAAO4uB,YACLC,YAA2BH,EAAaI,YAAgCJ,GAAc1uB,EAAQhkQ,GAC9F,CACE,CAAC,CAAE7k9B,KAAM,gBAAkBu3uC,GAC3B,CACE,CACEv3uC,KAAM,mBAIN2B,OAC2B,kBAAlB61uC,GAA6B,IAAIr2B,aAAcvjjC,OAAO45kC,GAAe71uC,OAAS61uC,EAAc71uC,QAEvG61uC,KASR,SAASI,GAAT,GAKE,IACIC,EALJL,EAIA,EAJAA,cACAxm7B,EAGA,EAHAA,QAOM8m7B,EAAgB,GAAH,OAAMrpuC,KAAKC,UAAUsiT,GAArB,MAGnB,GAA6B,kBAAlBwm7B,EACTK,EAAsB,GAAH,OAAMC,GAAN,OAAsBN,OACpC,CACL,IAEMz0B,GAFM,IAAI5B,aAEKvjjC,OAAOk6kC,IAE5BD,EAAsB,IAAIvilC,WAAWytjC,EAASphtC,OAAS61uC,EAAc71uC,SACjD6F,IAAIu7sC,GACxB80B,EAAoBrwuC,IAAIgwuC,EAAez0B,EAASphtC,QAGlD,OAAOk2uC,E,SAMME,G,iFAAf,iDAAAtyuC,EAAA,6DACEynM,EADF,EACEA,OACA4rJ,EAFF,EAEEA,MACU1nJ,EAHZ,EAGE49hC,SACA/nmC,EAJF,EAIEA,MAIMo8d,EAC4B,kBAAzBn2Z,EAAO8qiC,eAAuD,OAAzB9qiC,EAAO8qiC,eAA2Bz2uC,MAAMC,QAAQ0rM,EAAO8qiC,oBAE/Fp8uC,EADAsC,OAAO0D,KAAKsrM,EAAO8qiC,eAGnBC,EAAY,CAAE7miC,WAAUiyZ,gBAE1Bn2Z,EAAOxkG,MACTwkG,EAAOxkG,KAAK,kBAAmBu+B,EAAOgxmC,GAhB1C,SAmB+BzhW,YAC3BtpsB,EAAOotJ,aACPrzN,EACAgxmC,EACAn/4B,EACA5rJ,EACA4tJ,eAzBJ,UAmBQo94B,EAnBR,gDA8BW,MA9BX,cAoCEA,EAAcvmiC,SAAWumiC,EAAcvmiC,UAAY,aAG7Cq8S,EAAW9gT,EAAO+7gC,gBAAkB/7gC,EAAO+7gC,iBAvCnD,EAwC6Bj7tB,GAAYA,EAAS+oZ,KAAQ,GAAhDzo4B,EAxCV,EAwCUA,KAAMkb,EAxChB,EAwCgBA,QAEd0utC,EAAcnhW,IAAd,2BACKmhW,EAAcnhW,KADnB,IAEEzo4B,KAAMA,GAAQ,4BACdkb,QAASA,GAAW,UA7CxB,kBAgDS0utC,GAhDT,6C,+BAsDeC,G,iFAAf,qEAAA1yuC,EAAA,yDACE+xuC,EADF,EACEA,cACAxI,EAFF,EAEEA,SACWoJ,EAHb,EAGElM,UACAmM,EAJF,EAIEA,aACA594B,EALF,EAKEA,UACAtwP,EANF,EAMEA,QAEMmuoC,EAAwBV,GAAqB,CACjDJ,gBACAxm7B,QAAS,CACPon7B,gBAIIpI,EAA+CqI,EAA/CrI,KAAMjB,EAAyCsJ,EAAzCtJ,SAAUF,EAA+BwJ,EAA/BxJ,SAAUX,EAAqBmK,EAArBnK,iBAE5BhhiC,EAAS66G,cACT+wC,EAAQm3E,cACR3zN,EAAYpP,GAAUA,EAAOuhiC,eAC7B5pR,EAAM33wB,GAAUA,EAAO2hd,SAExB3hd,GAAWoP,GAAcuowB,GAAQ162B,EAAQiuQ,QAtBhD,wDA0BQppK,EAAY,CAChBhvM,KAAM++tC,EACNwZ,uBAAwBrK,EAAmB,IAC3Czz4B,UAAWA,EAAY,IACvB+94B,UAAWzJ,EACX0J,UAAW5J,EACXmB,OACA2F,UAAW3G,EACXoJ,aACAM,YAAavuoC,EAAQiuQ,SAnCzB,UAsC4B2/3B,GAAmB,CAAEj/4B,QAAO5rJ,SAAQ8hiC,WAAU/nmC,MAAO+nE,IAtCjF,WAsCQuoiC,EAtCR,+BA0CIrqiC,EAAOgjhC,mBAAmB,kBAAmB,SAAUlhhC,GACvDy6hC,GAAQ,4DA3CZ,yCAqFS8N,EAAYrlf,sBAEbt/T,EAAW0kzB,GAAqBC,EAAae,EAAuBzzR,EAAK33wB,EAAOotJ,aAAauu3B,QAvFrG,oBA4FqBvsgC,EAAUj2D,KAAKusS,GA5FpC,QA4FI/pU,EA5FJ,0DA8FU56G,EAAQ,IAAIvG,MAAMs3tC,GAExB,IAGE/wtC,EAAM0rf,MAAN,KACA,MAAOzxf,IApGb,MAuGU+F,EAvGV,WA2GO46G,EA3GP,0CA4GWA,GA5GX,WAgHqC,kBAAxBA,EAAS2/E,cAA4B3/E,EAAS2/E,WAAa,KAAO3/E,EAAS2/E,YAAc,KAhHtG,uBAiHU,IAAImwiC,GAAyB9vnC,EAAS2/E,YAjHhD,WAoHQsnhC,EAAa8oB,YAAiB,GAAI/vnC,IACpCgwnC,YAAc/oB,EAAY,UArHhC,uBAsHU,IAAIgpB,GAAehpB,GAtH7B,iCAyHSjnmC,GAzHT,4D,0BA+HM8vnC,G,kDACH,WAAYnwiC,GAAY,gFACiBA,I,sBAFL9gM,QASjCoxuC,G,kDAEH,WAAYhpB,GAAY,kCACvB,cAAM,mBACDA,WAAaA,EAFK,E,sBAFEpotC,Q,SAWdqxuC,G,iFAAf,WACEC,GADF,iCAAAvzuC,EAAA,yDAEEwzuC,EAFF,+BAEgB,CACZ/juC,MAAO,EACPimG,SAAU8jnC,GAGJuY,EAA2BwB,EAA3BxB,cAAe1rsC,EAAYktsC,EAAZltsC,QAGlB0rsC,EAAc71uC,OAVrB,0EAeUw2uC,GAAkBa,GAf5B,iCAgBW,GAhBX,uCAkBQ,gBAAeL,IAA4B,gBAAeG,IAlBlE,uCAuBI194B,YAAW,UAAW,CACpB894B,YAAaD,EAAY/juC,QAGvBk2Q,IAAet/O,EAAQ0srC,cAAgB1srC,EAAQ0srC,aAAaod,mBAC9D374B,YAAiB,EAAD,MAKdg/4B,EAAY/juC,OAtjPI,GAqhPxB,iBAkCYjH,EAAQ,IAAIvG,MAAJ,UAAas3tC,EAAb,4BAEd,IAGE/wtC,EAAM0rf,MAAN,KACA,MAAOzxf,IAxCf,MA4CY+F,EA5CZ,eAgDIgruC,EAAY99nC,YAAc89nC,EAAY/juC,MAhD1C,kBAkDW,IAAI6pC,SAAQ,SAACC,EAASi3B,GAC3Bt9B,WAAU,sBAAC,sBAAAlzC,EAAA,+EAEDszuC,GAAWC,EAAYC,GAFtB,OAGPj6rC,GAAQ,GAHD,+CAKPi3B,EAAO,EAAD,IALC,wDAORgjqC,EAAY99nC,cA1DrB,0D,yBA+DA,IAAMg+nC,GAAY,cACZC,GAAU,Y,IA4DVC,G,WAmDH,cAKD,WAJEvtsC,EAIF,EAJEA,QACAwtsC,EAGF,EAHEA,iBAGF,oBAACD,EAAgBp7uC,UAAUs7uC,OAAOz4uC,KAAKhB,MAAMu5uC,EAAgBp7uC,UAAUu7uC,QAAQ14uC,KAAKhB,MAAMu5uC,EAAgBp7uC,UAAUw7uC,QAAQ34uC,KAAKhB,MAAMu5uC,EAAgBp7uC,UAAUy7uC,QAAQ54uC,KAAKhB,MAAMu5uC,EAAgBp7uC,UAAU07uC,QAAQ74uC,KAAKhB,MAAMu5uC,EAAgBp7uC,UAAU27uC,QAAQ94uC,KAAKhB,MACtQA,KAAK2tuC,YAAc,KACnB3tuC,KAAKopuC,mBAAqB,GAC1BppuC,KAAKupuC,yBAA2B,GAChCvpuC,KAAK4tuC,cAAgB,UACrB5tuC,KAAKg2vB,SAAW,CACdm4e,iBA9tP8B,IA+tP9BpB,kBA5tP+B,KA8tPjC/suC,KAAK+5uC,cAAgBhstC,KAAK+xB,MAC1B9/C,KAAK8otC,YAAa,EAClB9otC,KAAKg6uC,WAAY,EACjBh6uC,KAAKi6uC,8BAA+B,EACpCj6uC,KAAK4pe,SAAW,CACdqlwB,SAAU,IAAIpwuC,IACdkwuC,SAAU,IAAIlwuC,IACdqxuC,KAAM,GACN9B,iBAAkBrgtC,KAAK+xB,MACvBo6rC,WAAY,IAGdl6uC,KAAKm6uC,kBAAoBX,EACzBx5uC,KAAKgpH,SAAWh9E,EAEhBhsC,KAAKo6uC,gBA9oBT,SAAkBlwtC,EAAMsjI,EAAMxhH,GAC5B,IAAIqusC,EAEAtpjC,EACAupjC,EAEExpjC,EAAU9kJ,GAAWA,EAAQ8kJ,QAAU/zL,KAAKC,IAAIgvC,EAAQ8kJ,QAAStjC,GAAQ,EAE/E,SAAS4jC,IAGP,OAFAmpjC,IACAF,EAAsBnwtC,IAIxB,SAASqwtC,SACKz+uC,IAAZi1L,GAAyBxqD,aAAawqD,QACvBj1L,IAAfw+uC,GAA4B/zmC,aAAa+zmC,GACzCvpjC,EAAUupjC,OAAax+uC,EAUzB,SAAS81L,IAUP,OATIb,GACFxqD,aAAawqD,GAEfA,EAAUl4I,WAAWu4I,EAAY5jC,GAE7BsjC,QAA0Bh1L,IAAfw+uC,IACbA,EAAazhsC,WAAWu4I,EAAYN,IAG/BupjC,EAKT,OAFAzojC,EAAU/lK,OAAS0utC,EACnB3ojC,EAAUE,MArBV,WACE,YAAgBh2L,IAAZi1L,QAAwCj1L,IAAfw+uC,EACpBlpjC,IAEFipjC,GAkBFzojC,EAomBkBhB,EAAS,kBAAM,EAAK09pB,WAAUtu1B,KAAKgpH,SAASwxnC,cAAe,CAChF1pjC,QAAS9wL,KAAKgpH,SAASyxnC,gBAGzBz6uC,KAAK06uC,mBArIT,SACE73uC,EACA005B,EACAojV,GAEA,IAAM/u0B,EAAU,IAAIh5Z,IAEdgouC,EAAW,SAAC96rC,GAChB,IAAM25M,EAAY35M,EAAM66rC,EACxB/u0B,EAAQl/Z,SAAQ,SAACyc,EAAQ7kB,GACnBA,EAAMm1P,GACRmyK,EAAQpjT,OAAOlkH,OAKfu2uC,EAAiB,WACrB,OAAO,YAAIjv0B,EAAQzga,UAAUQ,QAAO,SAAChG,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,IAGnDk1uC,GAAc,EAElB,OAAO,WAEL,IAAMh7rC,EAAM/iD,KAAKwjB,MAAMwN,KAAK+xB,MAAQ,KAMpC,GAHA86rC,EAAS96rC,GAGL+6rC,KAAoBtjV,EAAU,CAChC,IAAMwjV,EAAeD,EAErB,OADAA,GAAc,EACPC,EAAezB,GAAUD,GAGlCyB,GAAc,EACd,IAAM1luC,EAAQw2Z,EAAQ7na,IAAI+7C,IAAQ,EAGlC,OAFA8rX,EAAQlka,IAAIo4C,EAAK1qC,EAAQ,GAElBvS,EAAE,WAAF,cA6FmBi2L,EACxB,SAAC3xD,EAAOkgkC,GAAR,OA9xEN,SACE08B,EACA58lC,EACAkgkC,GAEA,OAAKomC,GAAe1J,EAAQ58lC,GAIrBummC,GAAU3J,EAAQ58lC,EAAOkgkC,GAHvBpopC,QAAQC,QAAQ,MAwxEEm16B,CAAS,EAAMlt1B,EAAOkgkC,KAE7C,IAEA,GAGF,MAAuDrnsC,KAAKw6V,aAApDwg5B,EAAR,EAAQA,iBAAkBC,EAA1B,EAA0BA,yBAEpBtW,EAAkBqW,EACpB,CACEvh/B,UAAW18P,KAAKE,IAxuPG,IAwuPuB+9uC,GAC1Cv2oC,QAASu2oC,EACTroc,cAxuPwB,IAyuPxB68Z,eAAgByrC,EAA2BA,EAAyBx5tC,KAAK,KAAO,SAElF3lB,EAEA6ouC,IACF3kuC,KAAK8muC,cAAgB,IAAIpC,GAAc1kuC,KAAM2kuC,I,8CAKhD,WACC,OAAO3kuC,KAAK4pe,W,uBAIb,WACC,OAAO5pe,KAAK8otC,a,sBAIb,WACC,OAAO9otC,KAAKg6uC,Y,+BAMb,WACC,OAAO38uC,QAAQ2C,KAAK4hhB,W,wBAIrB,WACC,OAAO5hhB,KAAKgpH,W,gCAOb,SAAmBizF,GAClB,MAA+Cj8M,KAAKgpH,SAA5C8mnC,EAAR,EAAQA,gBAAiBvD,EAAzB,EAAyBA,kBAIrBuD,GAAmB,GAAKvD,GAAqB,IAMjDvsuC,KAAKk7uC,8BAA8Bj/hC,GAE9Bj8M,KAAKqqG,SAMmB,IAAzBrqG,KAAKqqG,QAAQiuQ,UAQjBt4W,KAAK4tuC,cAAyC,WAAzB5tuC,KAAKqqG,QAAQiuQ,SAAmD,IAA3Bt4W,KAAKqqG,QAAQ+hoC,UAAkB,SAAW,UAEpGtC,GAAgB,+BAAD,OACkB9puC,KAAK4tuC,cADvB,SAEb5tuC,KAAKgpH,SAAS0vmC,aAAayU,gBAG7BntuC,KAAKm7uC,wBAnBHn7uC,KAAKo7uC,iBAAiB,IAAIxzuC,MAAM,+C,mBA6BnC,WACC,GAAI5H,KAAK8otC,YAAqC,YAAvB9otC,KAAK4tuC,cAC1B,MAAM,IAAIhmuC,MAAM,2CAGlB,GAAI5H,KAAK8otC,YAAqC,WAAvB9otC,KAAK4tuC,cAC1B,MAAM,IAAIhmuC,MAAM,sEAGlBkiuC,GAAgB,2CAA4C9puC,KAAKgpH,SAAS0vmC,aAAayU,gBAMvFntuC,KAAKq7uC,sBAEL,IAAMhxoC,EAAU4ioC,GACd,CACEH,kBAAmB9suC,KAAKgpH,SAAS8jnC,kBACjCC,kBAAmB/suC,KAAKg2vB,SAAS+2e,kBACjCI,eAAgBntuC,KAAKgpH,SAAS0vmC,aAAayU,gBAE7C,CACET,cAAe1suC,KAAKgpH,SAAS0jnC,cAE7BH,kBAAmB,EACnBC,gBAAgB,IAIpBxsuC,KAAKqqG,QAAUA,EAEfrqG,KAAKm7uC,yB,4BAON,WACC,GAAIn7uC,KAAK8otC,WACP,MAAM,IAAIlhtC,MAAM,2CAGlBkiuC,GAAgB,0CAA2C9puC,KAAKgpH,SAAS0vmC,aAAayU,gBAEtF,IAAM9ioC,EAAU4ioC,GACd,CACEF,kBAAmB/suC,KAAKg2vB,SAAS+2e,kBACjCD,kBAAmB9suC,KAAKgpH,SAAS8jnC,kBACjCK,eAAgBntuC,KAAKgpH,SAAS0vmC,aAAayU,gBAE7C,CACET,cAAe1suC,KAAKgpH,SAAS0jnC,cAC7BH,kBAAmB,EACnBC,gBAAgB,IAIpBxsuC,KAAKqqG,QAAUA,EAEfrqG,KAAK4tuC,cAAgB,SACrB5tuC,KAAKm7uC,yB,4BAQN,WACC,IACE,IAAMG,EAAgBt7uC,KAAK4hhB,QAE3B5hhB,KAAKu7uC,eAAiBzytC,GAAO,uCACxB9oB,KAAKm6uC,mBAImB,WAAvBn6uC,KAAK4tuC,eAA8B,CAAEtzB,iBA35PpB,MAs5PK,IAM1B1xmC,KAAM8toC,GAAuB12uC,MAC7BwiuC,WAAYxiuC,KAAKw7uC,oBACbF,EACA,CACE7+C,aAAc6+C,EAAc7+C,aAC5B6mC,iBAAkBgY,EAAchY,iBAChCt2B,SAAUsuC,EAActuC,SACxBzQ,eAAgB++C,EAAc/+C,gBAEhC,KAEN,MAAOnrpC,GACPpxC,KAAKo7uC,iBAAiBhqsC,M,2BAUzB,WACC,IAME,OALIpxC,KAAKu7uC,iBACPv7uC,KAAKu7uC,iBACLv7uC,KAAKu7uC,oBAAiBz/uC,IAGjB,EACP,MAAOs1C,GAEP,OADApxC,KAAKo7uC,iBAAiBhqsC,IACf,K,yDAQV,8CAAAzrC,EAAA,0FAA4C,GAA5C,IAAa81uC,kBAAb,SAAiClwnC,EAAjC,EAAiCA,OAC3BvrH,KAAK8otC,WADX,oDAOC9otC,KAAK8otC,YAAa,EAPnB,SAUG6gB,GAAQ,2BAAD,OACsBp+mC,EAAS,iBAAH,OAAoBA,GAAW,IAChEvrH,KAAKgpH,SAAS0vmC,aAAayU,gBAG7BntuC,KAAK07uC,mBACL17uC,KAAK27uC,gBAEL37uC,KAAKo6uC,gBAAgBvutC,UAGjB4vtC,EArBP,kCAsBWz7uC,KAAKsu1B,OAAO,CAAExqiB,OAAO,IAtBhC,QA0BG9jT,KAAK2tuC,aAAe3tuC,KAAK2tuC,YAAYnjqC,UACrCxqE,KAAK2tuC,YAAc,KAInB3B,GAAahsuC,MA/BhB,kDAiCGA,KAAKo7uC,iBAAL,MAjCH,0D,yEA0CA,WACKp7uC,KAAKg6uC,YAITh6uC,KAAKg6uC,WAAY,EACjBh6uC,KAAK27uC,gBAELhS,GAAQ,0BAA2B3puC,KAAKgpH,SAAS0vmC,aAAayU,mB,oBAS/D,WACMntuC,KAAKg6uC,WAAch6uC,KAAK47uC,kBAI7B57uC,KAAKg6uC,WAAY,EACjBh6uC,KAAK67uC,iBAELlS,GAAQ,2BAA4B3puC,KAAKgpH,SAAS0vmC,aAAayU,mB,8EAUhE,gDAAAxnuC,EAAA,0FAA+D,GAA/D,IAAkCm2uC,yBAAlC,SAC4B,YAAvB97uC,KAAK4tuC,cADV,yCAEU5tuC,KAAK+7uC,kBAFf,cAKOC,EAAejutC,KAAK+xB,MAE1B6prC,GAAQ,wCAAyC3puC,KAAKgpH,SAAS0vmC,aAAayU,gBAP7E,SAaOntuC,KAAK+7uC,iBAbZ,UAeOE,EAAsBj8uC,KAAK27uC,gBAE5BG,GAAsBG,EAjB5B,sDAsB+B,YAAzBj8uC,KAAK4tuC,cAtBX,mDA2BC5tuC,KAAK4tuC,cAAgB,UAGjB5tuC,KAAKqqG,UACPrqG,KAAKq7uC,oBAAoBW,GACzBh8uC,KAAKk8uC,uBAAuBF,GAC5Bh8uC,KAAKm8uC,qBAGPn8uC,KAAK67uC,iBApCN,iD,6EA+CA,SAAUpjsC,GAET,IAAM2jsC,EAAW3jsC,IAIU,WAAvBz4C,KAAK4tuC,gBAMQ,IAAbwO,GAMJp8uC,KAAKo6uC,oB,iCAQN,WAKC,GAJAp6uC,KAAKq7uC,sBAIAr7uC,KAAKu7uC,eAaVv7uC,KAAKikuC,+BAELjkuC,KAAKk8uC,6BAfL,CAGE,IAAKl8uC,KAAK47uC,gBACR,OAIF57uC,KAAKq8uC,Y,gCAiBR,WACCr8uC,KAAKq7uC,sBACLr7uC,KAAKk8uC,2B,8BAMN,WACC,MAA2B,WAAvBl8uC,KAAK4tuC,cACA3urC,QAAQC,UAGVl/C,KAAK+7uC,mB,mBAMb,WACC,OAAO/7uC,KAAKo6uC,oB,4BAQb,WAGC,OAFAp6uC,KAAKo6uC,kBAEEp6uC,KAAKo6uC,gBAAgBtojC,U,yBAM7B,WACC9xL,KAAKo6uC,gBAAgBvutC,W,0BAItB,WACC,OAAO7rB,KAAKqqG,SAAWrqG,KAAKqqG,QAAQppE,K,0CAWrC,WAKC,KACEjhC,KAAK+5uC,eACLxn8B,GAAUvyS,KAAK+5uC,cAAe/5uC,KAAKg2vB,SAASm4e,mBAC5CnuuC,KAAKqqG,SACoB,YAAzBrqG,KAAKqqG,QAAQiuQ,SAYf,QAAKt4W,KAAK47uC,gBANR57uC,KAAKs8uC,U,6BAmBR,WACC,IAAMC,EAAU,GAAH,OAAMtr6B,EAAOxnR,SAAS0C,UAAtB,OAAiC8kR,EAAOxnR,SAASvjD,MAAjD,OAAwD+qU,EAAOxnR,SAASw0I,QAC/Ez8F,EAAM,GAAH,OAAMyvO,EAAOxnR,SAAS3uC,QAAtB,OAA+ByhuC,GAExCv8uC,KAAKopuC,mBAAqB,GAC1BppuC,KAAKupuC,yBAA2B,GAGhCvpuC,KAAKw8uC,gBAELx8uC,KAAK4pe,SAASswwB,WAAa14oC,EAC3BxhG,KAAK4pe,SAASwkwB,iBAAmBrgtC,KAAK+xB,MACtC9/C,KAAK4pe,SAASsmwB,KAAK9juC,KAAKo1F,K,+BAOzB,SACC2lC,EACAkgkC,GACA,WACMvljC,EAAM9hJ,KAAK06uC,mBAAmBvzmC,EAAOkgkC,GAI3C,GAAIvljC,IAAQu3lC,GAAW,CACrB,IAAM9+4B,EAAa6s4B,GAAiB,CAClChwmC,SAAU,qBAGZp3H,KAAKkkuC,WAAU,WAEb,OAAQsJ,GAAa,EAAM,CACzBttuC,KAz2IoB,EA02IpBy6V,UAAWJ,EAAWI,WAAa,EACnC3/S,KAAM,CACJkgI,IAAK,aACLh0I,QAASqzT,EACT+2P,QAAQ,QAMhB,OAAOxvc,I,6BAOR,WAEC,IAAMm0lC,EAAkBj2uC,KAAKi2uC,iBAAmB9l0B,cAAkBunzB,iBAG5DzqsC,GADcgptC,GAAmB993B,YAAW893B,GAAiBj7rC,MAAS,IAClDypX,KAC1B,GAAKwx0B,GAAoBhptC,GAAW,CAAC,QAAS,UAAU1jB,SAAS0jB,GAIjE,OAAOkrV,YAAW893B,GAAiBt1mC,c,kCAOpC,WACC3gI,KAAK62uC,kBAIL72uC,KAAKk8uC,yBAELl8uC,KAAK2tuC,YAAcnC,GAAkB,CACnCC,eAAgBzruC,KAAKgpH,SAASyinC,eAC9BE,UAAW3ruC,KAAKgpH,SAAS2inC,YAG3B3ruC,KAAK07uC,mBACL17uC,KAAKy8uC,gBAGLz8uC,KAAK8otC,YAAa,EAClB9otC,KAAKg6uC,WAAY,EAEjBh6uC,KAAK67uC,mB,8BAIN,SAAiB1tuC,GAChBm9Q,IAAetqI,IAAO7yI,MAAM,WAAYA,GAEpCm9Q,IAAetrR,KAAKgpH,SAAS0vmC,cAAgB14tC,KAAKgpH,SAAS0vmC,aAAaod,mBAC1E374B,YAAiBhsV,K,2CAOpB,SAA8B8tM,GAG7B,IAAMuwhC,EAAiBxsuC,KAAKgpH,SAAS8mnC,gBAAkB,EAEjDzloC,EAAU4ioC,GACd,CACEF,kBAAmB/suC,KAAKg2vB,SAAS+2e,kBACjCD,kBAAmB9suC,KAAKgpH,SAAS8jnC,kBACjCK,eAAgBntuC,KAAKgpH,SAAS0vmC,aAAayU,eAC3ClxhC,qBAEF,CACEywhC,cAAe1suC,KAAKgpH,SAAS0jnC,cAC7BH,kBAAmBvsuC,KAAKgpH,SAASujnC,kBACjCC,mBAIJxsuC,KAAKqqG,QAAUA,I,2BAOhB,WAGC,IAAKrqG,KAAKqqG,QACR,OAAO,EAGT,IAAM+xP,EAAiBp8V,KAAKqqG,QAE5B,OACE2ioC,GAAqB5w4B,EAAgB,CACnC2w4B,kBAAmB/suC,KAAKg2vB,SAAS+2e,kBACjCD,kBAAmB9suC,KAAKgpH,SAAS8jnC,sBAKnC9suC,KAAK08uC,gBAAgBtg5B,IACd,K,oEAWV,WAAsB/xP,GAAtB,SAAA1kG,EAAA,yDACM3F,KAAK8otC,WADX,iEAIO9otC,KAAK2xS,KAAK,CAAEpmL,OAAQ,oBAJ3B,OAKCvrH,KAAK28uC,mBAAmBtyoC,EAAQppE,IALjC,gD,kFAWA,WACC,IACEgwS,EAAOjrS,SAASgjE,iBAAiB,mBAAoBhpG,KAAK48uC,yBAC1D3r6B,EAAOjoO,iBAAiB,OAAQhpG,KAAK68uC,mBACrC5r6B,EAAOjoO,iBAAiB,QAAShpG,KAAK88uC,oBACtC7r6B,EAAOjoO,iBAAiB,UAAWhpG,KAAK+8uC,sBAEpC/8uC,KAAK8muC,eACP9muC,KAAK8muC,cAAckW,eAIhBh9uC,KAAKi6uC,+BACRxE,GAAmBz1uC,MAEnBA,KAAKi6uC,8BAA+B,GAEtC,MAAO7osC,GACPpxC,KAAKo7uC,iBAAiBhqsC,GAGxBpxC,KAAKi9uC,4BAA8B/T,GAAyBlpuC,Q,8BAM7D,WACC,IACEixU,EAAOjrS,SAASijE,oBAAoB,mBAAoBjpG,KAAK48uC,yBAE7D3r6B,EAAOhoO,oBAAoB,OAAQjpG,KAAK68uC,mBACxC5r6B,EAAOhoO,oBAAoB,QAASjpG,KAAK88uC,oBACzC7r6B,EAAOhoO,oBAAoB,UAAWjpG,KAAK+8uC,sBAEvC/8uC,KAAK8muC,eACP9muC,KAAK8muC,cAAcoW,kBAGjBl9uC,KAAKi9uC,6BACPj9uC,KAAKi9uC,8BAEP,MAAO7rsC,GACPpxC,KAAKo7uC,iBAAiBhqsC,M,oBAUzB,WAAS,WAACpxC,KAAK48uC,wBAA0B,WACA,YAApC3r6B,EAAOjrS,SAAS8iE,gBAClB,EAAKq0oC,6BAEL,EAAKC,gC,qBAOR,WAAU,WAACp9uC,KAAK68uC,kBAAoB,WACnC,IAAMti5B,EAAa6s4B,GAAiB,CAClChwmC,SAAU,YAKZ,EAAKgmnC,2BAA2B7i5B,M,qBAMjC,WAAU,WAACv6V,KAAK88uC,mBAAqB,WACpC,IAAMvi5B,EAAa6s4B,GAAiB,CAClChwmC,SAAU,aAKZ,EAAK+lnC,2BAA2B5i5B,M,qBAIjC,WAAU,WAACv6V,KAAK+8uC,qBAAuB,SAAC51mC,GACvC0gmC,GAAoB,EAAM1gmC,M,wCAM3B,SAA2BozN,GACrBv6V,KAAKqqG,UAIMwioC,GAAiB7suC,KAAKqqG,QAAS,CAC7CyioC,kBAAmB9suC,KAAKgpH,SAAS8jnC,kBACjCC,kBAAmB/suC,KAAKg2vB,SAAS+2e,sBAO/Bxy4B,GACFv6V,KAAKq9uC,wBAAwB9i5B,GAQ1Bv6V,KAAKs9uC,uB,wCAMX,SAA2B/i5B,GACrBv6V,KAAKqqG,UAIcrqG,KAAKikuC,+BAUzB1p4B,GACFv6V,KAAKq9uC,wBAAwB9i5B,GAL7Bov4B,GAAQ,mE,iCAYX,WAAgD,IAA5BoQ,EAA4B,uDAAZhstC,KAAK+xB,MACxC9/C,KAAK+5uC,cAAgBA,I,oCAMtB,WAAmD,IAA5BA,EAA4B,uDAAZhstC,KAAK+xB,MACvC9/C,KAAKqqG,UACPrqG,KAAKqqG,QAAQ8hoC,aAAe4N,EAC5B/5uC,KAAKm8uC,uB,qCAOR,SAAwB5h5B,GAAY,WACnCv6V,KAAKkkuC,WAAU,WAGb,EAAKC,kBAAkB,CACrBjkuC,KAAM0isC,GAAUkF,OAChBnt2B,UAAWJ,EAAWI,WAAa,EACnC3/S,KAAM,CACJkgI,IAAK,aACLh0I,QAASqzT,U,oCAUhB,WACC,IAjhIF5wV,EAihIQy/tC,GAjhIRz/tC,EAihIsD3J,KAAKopuC,mBA/gIpDz/tC,EAAQX,IAAIiguC,IAAwB19tC,OAAOlO,UA+gI6BiO,OAAOtL,KAAKupuC,0BAKzF,OAHAvpuC,KAAKopuC,mBAAqB,GAC1BppuC,KAAKupuC,yBAA2B,GAEzBtqrC,QAAQwnJ,IAAIspiC,GAAuB/vuC,KAAMopuC,M,2BAMjD,WAECppuC,KAAK4pe,SAASqlwB,SAAS/7tC,QACvBlT,KAAK4pe,SAASmlwB,SAAS77tC,QACvBlT,KAAK4pe,SAASsmwB,KAAO,K,oDAItB,WACC,IAAQ7loC,EAAyBrqG,KAAzBqqG,QAASsjoC,EAAgB3tuC,KAAhB2tuC,YACjB,GAAKtjoC,GAAYsjoC,IAKbtjoC,EAAQ+hoC,UAAZ,CAIA,IAAMmL,EAAgB5J,EAAYvC,uBAC9BmM,GAAiBA,EAAgBv3uC,KAAK4pe,SAASwkwB,mBACjDpuuC,KAAK4pe,SAASwkwB,iBAAmBmJ,M,8BAOpC,WACC,IAAM3twB,EAAW,CACfwkwB,iBAAkBpuuC,KAAK4pe,SAASwkwB,iBAChC8L,WAAYl6uC,KAAK4pe,SAASswwB,WAC1BjL,SAAUxtuC,MAAMuN,KAAKhP,KAAK4pe,SAASqlwB,UACnCF,SAAUttuC,MAAMuN,KAAKhP,KAAK4pe,SAASmlwB,UACnCmB,KAAMlwuC,KAAK4pe,SAASsmwB,MAKtB,OAFAlwuC,KAAKw8uC,gBAEE5ywB,I,8DAWR,sCAAAjke,EAAA,yDACOupuC,EAAWlvuC,KAAKg8M,eAEjBh8M,KAAKqqG,SAAYrqG,KAAK2tuC,aAAgBuB,EAH5C,uBAIG5j9B,IAAetqI,IAAO7yI,MAAM,sDAJ/B,0CAQOnO,KAAKu9uC,yBARZ,UAWMv9uC,KAAK2tuC,aAAgB3tuC,KAAK2tuC,YAAYxC,UAX5C,kEAgBOiL,GAAep2uC,MAhBtB,WAmBMA,KAAK2tuC,YAnBX,sDAwBKuB,IAAalvuC,KAAKg8M,eAxBvB,gEA8BGh8M,KAAKw9uC,4CAEC7i5B,EAAY5sU,KAAK+xB,OAKP9/C,KAAK4pe,SAASwkwB,iBAAmBpuuC,KAAKgpH,SAAS8jnC,kBAAoB,KArCtF,uBAsCW,IAAIlluC,MAAM,2CAtCrB,eAyCS2wuC,EAAev4uC,KAAKy9uC,mBAEpBrR,EAAYpsuC,KAAKqqG,QAAQ+hoC,YAC/BpsuC,KAAKm8uC,oBA5CR,UA+C+Bn8uC,KAAK2tuC,YAAY5r7B,SA/ChD,eA+CS217B,EA/CT,iBAiDSuB,GAAW,CACf/J,WACAwI,gBACAtL,YACAmM,eACAluoC,QAASrqG,KAAKqqG,QACdr+D,QAAShsC,KAAKw6V,aACdG,cAxDL,2DA2DG36V,KAAKo7uC,iBAAL,MAOAp7uC,KAAK2xS,KAAK,CAAEpmL,OAAQ,gBAEd6hF,EAAS66G,gBAGb76G,EAAOgjhC,mBAAmB,aAAc,UAvE7C,2D,2EAgFA,WAAU,WAACpwtC,KAAKsu1B,OAAL,sBAAc,wDAAA3o1B,EAAA,0FAIzB,GAJyB,IACxBm+S,aADwB,SAKnB,EAAKgl6B,YAAehl6B,EALD,oDAUnB,EAAKmg7B,+BAVc,uBAWtB348B,IAAetqI,IAAO7yI,MAAM,qEAXN,6BAenB,EAAKk8F,QAfc,oDAoBlBtqF,EAAQ,EAAKsqF,QAAQ0iY,QACrBjtb,EAAM/xB,KAAK+xB,MACX40E,EAAW50E,EAAM//B,EAGvB,EAAKq6tC,gBAAgBvutC,SAIf6xtC,EAAWhpnC,EAAW,EAAK1L,SAAS20nC,kBACpCC,EAAUlpnC,EAAW,EAAK1L,SAAS8jnC,kBAAoB,KACzD4Q,IAAYE,EA/BQ,wBAgCtBjU,GAAQ,8BAAD,OACyB5suC,KAAKwjB,MAAMm0G,EAAW,KAD/C,qBAEHgpnC,EAAW,QAAU,OAFlB,yBAIL,EAAK10nC,SAAS0vmC,aAAayU,gBAGzBuQ,GACF,EAAKtD,kBAxCe,+BA6ClBzM,EAAc,EAAKA,cACqB,IAA3B,EAAKtjoC,QAAQ+hoC,YAAoBuB,EAAYzD,aAC9DP,GAAQ,sDAAuD,EAAK3gnC,SAAS0vmC,aAAayU,gBAMvF,EAAK0Q,WArDc,wBAsDtB,EAAKA,WAAa,EAAKC,YAtDD,UAuDhB,EAAKD,WAvDW,eAwDtB,EAAKA,gBAAa/hvC,EAxDI,sDAmEhB,EAAK+hvC,WAnEW,2DAqEtBvy9B,IAAetqI,IAAO7yI,MAAP,MArEO,yBAuEtB,EAAKisuC,kBAvEiB,gF,+BA4EzB,WACKp6uC,KAAKqqG,SAAWrqG,KAAKgpH,SAAS0jnC,eAChCL,GAAYrsuC,KAAKqqG,W,qBAKpB,WAAU,WAACrqG,KAAKw7uC,mBAAqB,SAAC5hiC,GACrC,IAAMxkM,EAAQwkM,EAAU/3M,OAElBk8uC,EAAgB,EAAK/0nC,SAAS+0nC,cAE9BC,EAAoBD,GAAiB3ouC,EAAQ2ouC,EAInD,GAAI3ouC,EAL4B,EAAK4zG,SAASi1nC,yBAKPD,EAAmB,CACxD,IAAMzj5B,EAAa6s4B,GAAiB,CAClChwmC,SAAU,mBACVp8E,KAAM,CACJ5lC,QACAq0G,MAAOu0nC,KAGX,EAAKX,wBAAwB9i5B,GAI/B,OAAIyj5B,IAGF,EAAKrs8B,KAAK,CAAEpmL,OAAQ,gBAAiBkwnC,WAAmC,YAAvB,EAAK7N,iBAC/C,Q,KAQb,SAAS3tE,GACPltnC,EACAmrsC,EACAC,EACAC,GAEA,IAAMC,EAA0D,kBAA7BD,EAAwCA,EAAyBr/rC,MAAM,KAAO,GAE3Gu/rC,EAAe,GAAH,mBACbvrsC,GADa,YAGbsrsC,GAHa,YAMbH,IAkBL,MAdqC,qBAA1BC,IAE4B,kBAA1BA,GACTG,EAAalyuC,KAAb,WAAsB+xuC,IAGxBI,aAAe,WAEbv2tC,QAAQC,KACN,+IAKCq2tC,EAAa78tC,KAAK,KAM3B,SAAS+8tC,GAAT,GAiBG,IAhBDll+B,EAgBC,EAhBDA,KACAml+B,EAeC,EAfDA,OACAnr+B,EAcC,EAdDA,MACAqvL,EAaC,EAbDA,QACA+7yB,EAYC,EAZDA,OAGAviD,EASC,EATDA,WAEAC,EAOC,EAPDA,cAEAL,EAKC,EALDA,cAEAC,EAGC,EAHDA,iBAEAuT,EACC,EADDA,YAOMvjqC,EAAU,CAEdgwpC,iBALmB/7B,GAAU3m5B,EAAM,CAAC,eAAgB,sBAAuByi7B,EAAeC,GAM1FmkC,mBALqBlgE,GAAUw+E,EAAQ,CAAC,iBAAkB,yBAO1DriD,cAAen8B,GACb3s5B,EADsB,CAErB,gBAAiB,uBAFI,OAVK,CAAC,mBAa5B6o7B,EACAC,GAEFokC,gBAAiBvgE,GAAUt9tB,EAAS,CAAC,kBAAmB,0BACxD6swB,eAAgBvvC,GAAUy+E,EAAQ,CAAC,iBAAkB,uBAAwB,sBAAuBnvC,IAWtG,OARIpT,aAAsBrhpC,SACxB9O,EAAQmwpC,WAAaA,GAGnBJ,aAAyBjhpC,SAC3B9O,EAAQ+vpC,cAAgBA,GAGnB/vpC,EAMT,SAAS2ysC,GAAT,GAOG,IAND3k9B,EAMC,EANDA,GACA11R,EAKC,EALDA,IACAs6uC,EAIC,EAJDA,eACAxe,EAGC,EAHDA,YACAye,EAEC,EAFDA,eACAnjvC,EACC,EADDA,MAGA,OAAK0kuC,EAKDye,EAAe1e,oBAAsBnm8B,EAAGpiG,QAAQinjC,EAAe1e,oBAC1DzkuC,EAIPkjvC,EAAer1uC,SAASjF,IAGf,UAARA,GAAkC,UAAf01R,EAAGomB,SAAuB,CAAC,SAAU,UAAU72S,SAASywR,EAAG2jB,aAAa,SAAW,IAEhGjiT,EAAMk9E,QAAQ,QAAS,KAGzBl9E,EAjBEA,EAoBX,IAAMojvC,GACJ,mGAEIC,GAA0B,CAAC,iBAAkB,eAAgB,UAE/Dl5Z,IAAe,EAEbm5Z,GAAuB,SAAChzsC,GAE5B,OAAO,IAAIizsC,GAASjzsC,IAOhBizsC,G,WAsBH,aAkDO,6DAAJ,GAAI,IAjDNzE,qBAiDM,MAzgSsB,IAygStB,MAhDNC,qBAgDM,MAtgSsB,KAsgStB,MA/CNkD,yBA+CM,MA/+RkB,KA++RlB,MA9CN7Q,yBA8CM,MA9CcvN,EA8Cd,MA7CNmN,qBA6CM,aA5CNjB,sBA4CM,SA3CNE,EA2CM,EA3CNA,UA2CM,IA1CNjT,oBA0CM,MA1CS,GA0CT,EAzCN6T,EAyCM,EAzCNA,kBACAuD,EAwCM,EAxCNA,gBAwCM,IAvCN1P,mBAuCM,aAtCN39B,qBAsCM,aArCNw0C,qBAqCM,aAnCNgH,+BAmCM,MAnCoB,IAmCpB,MAlCNF,qBAkCM,MAlCU,IAkCV,MAhCN/C,wBAgCM,MAhCa,IAgCb,MA/BNC,gCA+BM,MA/BqB,GA+BrB,MA7BN1I,8BA6BM,MA7BmB,GA6BnB,MA5BNC,6BA4BM,MA5BkB,GA4BlB,MA3BNG,4BA2BM,aA1BNC,6BA0BM,MA1BkB,GA0BlB,MAzBNK,8BAyBM,MAzBmB,GAyBnB,MAvBN359B,YAuBM,MAvBC,GAuBD,MAtBNsl+B,sBAsBM,MAtBW,CAAC,QAAS,eAsBrB,MArBNH,cAqBM,MArBG,GAqBH,MApBNnr+B,cAoBM,MApBE,GAoBF,OAnBNqvL,gBAmBM,OAnBI,GAmBJ,QAlBN+7yB,eAkBM,OAlBG,GAkBH,GAjBNQ,GAiBM,EAjBNA,OAEAlR,GAeM,EAfNA,wBACAmB,GAcM,EAdNA,oBAGAhzC,GAWM,EAXNA,WAEAC,GASM,EATNA,cAEA1C,GAOM,EAPNA,iBAEAqC,GAKM,EALNA,cAEAC,GAGM,EAHNA,iBAEAuT,GACM,EADNA,YACM,oBAENvvsC,KAAKwO,KAAOywuC,EAASh+sC,GAErB,IAAM49sC,GAAiBL,GAAkB,CACvCll+B,OACAml+B,SACAnr+B,SACAqvL,WACA+7yB,UACAviD,cACAC,iBACAL,iBACAC,oBACAuT,iBAmGF,GAhGAvvsC,KAAKm6uC,kBAAL,yBACE13C,gBACA29B,cACA1mC,iBAAkB,2BAAMA,IAAoB,IAA5B,IAAiCn0lC,UAAU,IAC3D+2lC,WAAY4iD,GACZvlD,YAAaulD,GACbrf,gBAAiB,SAACv7tC,EAAK5I,EAAOs+R,GAAb,OACf2k9B,GAAc,CACZC,iBACAxe,cACAye,kBACAv6uC,MACA5I,QACAs+R,SAGD6k9B,IAhBL,IAmBE3+C,eAAgB,MAChB7D,kBAAkB,EAElBG,cAAc,EAGd8X,cAAc,EACd/P,aAAc,SAACnzpC,GACb,IACEA,EAAIs+rC,WAAY,EAChB,MAAOvhuC,QAObnO,KAAKm/uC,gBAAkB,CACrB3E,gBACAC,gBACAkD,kBAAmB5gvC,KAAKE,IAAI0gvC,EAriSA,MAsiS5B7Q,kBAAmB/vuC,KAAKE,IAAI6vuC,EAAmBvN,GAC/CmN,gBACAH,oBACAuD,kBACArE,iBACAE,YACAsL,gBACAx0C,gBACA29B,cACA6d,0BACAF,gBACA/C,mBACAC,2BACA1I,yBACAC,wBACAG,uBACAC,sBAAuBwM,GAAyBxM,GAChDK,uBAAwBmM,GAAyBnM,GACjDjF,2BACAmB,uBAEAzW,gBAG+B,kBAAtB6T,IAETvktC,QAAQC,KAAR,uQAIoCsktC,EAJpC,QAOAvsuC,KAAKm/uC,gBAAgB5S,kBAAoBA,GAGZ,kBAApBuD,IAET9ntC,QAAQC,KAAR,qQAIoC6ntC,EAJpC,QAOA9vuC,KAAKm/uC,gBAAgBrP,gBAAkBA,GAGrC9vuC,KAAKm/uC,gBAAgBlI,gBAGvBj3uC,KAAKm6uC,kBAAkB/9C,cAAiBp8rC,KAAKm6uC,kBAAkB/9C,cAAxB,UAEhCp8rC,KAAKm6uC,kBAAkB/9C,cAFS,YAEQ0iD,IAD3CA,IAIF9+uC,KAAKq/uC,gBAAkBli0B,IACzB,MAAM,IAAIv1a,MAAM,8DAGlB5H,KAAKq/uC,gBAAiB,E,gDAIvB,WACC,OAAOx5Z,I,IAIR,SAAmBnq1B,GAClBmq1B,GAAenq1B,I,uBAMhB,WAAY,WACNyhb,MAILn9a,KAAKs/uC,SAULzmsC,YAAW,kBAAM,EAAKy6e,oB,mBAUvB,WACMtzhB,KAAKmluC,SAIVnluC,KAAKmluC,QAAQpltC,U,4BAOd,WACM/f,KAAKmluC,SAIVnluC,KAAKmluC,QAAQoa,mB,kBAOd,WACC,OAAKv/uC,KAAKmluC,QAIHnluC,KAAKmluC,QAAQxz7B,KAAK,CAAE8p8B,WAA2C,YAA/Bz7uC,KAAKmluC,QAAQyI,gBAH3C3urC,QAAQC,Y,mBAalB,SAAMlT,GACL,OAAKhsC,KAAKmluC,SAAYnluC,KAAKmluC,QAAQxyhC,YAI5B3yM,KAAKmluC,QAAQiK,0BAA0BpjsC,GAHrCiT,QAAQC,Y,yBASlB,WACC,GAAKl/C,KAAKmluC,SAAYnluC,KAAKmluC,QAAQxyhC,YAInC,OAAO3yM,KAAKmluC,QAAQnphC,iB,yBAMrB,WACMh8M,KAAKmluC,UAQVnluC,KAAKw/uC,wCAELx/uC,KAAKmluC,QAAQwX,wB,oBAId,WAEC,IAAM8C,EA+BV,SAAqCC,GACnC,IAAMtyiC,EAAS66G,cACT3mL,EAAM8rE,GAAWA,EAAOotJ,aAExBil5B,EAAe,aAAElT,kBAAmB,EAAGuD,gBAAiB,GAAMkB,YAAkB0O,IAEtF,IAAKp+mC,EAKH,OAJAi9mC,aAAe,WAEbv2tC,QAAQC,KAAK,mCAERw3tC,EAI6B,MAApCC,EAAenT,mBACmB,MAAlCmT,EAAe5P,iBACiB,MAAhCxumC,EAAIq+mC,0BAC4B,MAAhCr+mC,EAAIs+mC,0BAEJrB,aAAe,WAEbv2tC,QAAQC,KACN,4GAKsC,kBAAjCq5G,EAAIq+mC,2BACbF,EAAalT,kBAAoBjrmC,EAAIq+mC,0BAGK,kBAAjCr+mC,EAAIs+mC,2BACbH,EAAa3P,gBAAkBxumC,EAAIs+mC,0BAGrC,OAAOH,EAnEgBI,CAA4B7/uC,KAAKm/uC,iBAEtDn/uC,KAAKmluC,QAAU,IAAIoU,GAAgB,CACjCvtsC,QAASyzsC,EACTjG,iBAAkBx5uC,KAAKm6uC,sB,mDAK1B,WAIC,IACE,IACM2F,EADS737B,cACkB837B,qBAAqB,gBAGtD,IAAKD,EACH,OAGF9/uC,KAAKmluC,QAAL,QAA0B2a,EAAkBtl5B,aAC5C,MAAOpyV,Q,2BAvUV,WAAuBpI,KAAKihC,GAAK,a,KAsXpC,SAASm+sC,GAAyBlu7B,GAChC,gBAAW6t7B,GAAX,YAAuC7t7B,EAAQloT,KAAI,SAAA0gI,GAAM,OAAIA,EAAOtwF,mBA3CrE6lsC,GAASe,gB,4GEjySKr8nC,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,8OACD,mBCFW69G,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,qFACD,yBCFW69G,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,4KACD,gBCFW69G,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,8MACD,gB,0BC+IAm6uC,EAAqB,CACvB3u7B,QAAS7sR,IAAMwB,cAAci6sC,EAAqB,CAChD/4nC,SAAU,YAEZm5I,QAAS77N,IAAMwB,cAAck6sC,EAA2B,CACtDh5nC,SAAU,YAEZh5G,MAAOs2B,IAAMwB,cAAcm6sC,EAAkB,CAC3Cj5nC,SAAU,YAEZg2F,KAAM14K,IAAMwB,cAAco6sC,EAAkB,CAC1Cl5nC,SAAU,aAIV9gF,EAAO5B,IAAMwB,cAAc+4zB,IAAW,CACxC73uB,SAAU,UAGRyl3B,EAAQno8B,IAAM8E,YAAW,SAAeW,EAAOzuC,GACjD,IAAIyvB,EAASgf,EAAMhf,OACfob,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBmmxB,EAAmBr1zB,EAAMixX,UACzBA,OAAiC,IAArBokc,EAA8B,QAAUA,EACpDt5vB,EAAQ/7D,EAAM+7D,MACd2rB,EAAO1nF,EAAM0nF,KACb0unC,EAAqBp2sC,EAAMq2sC,YAC3BA,OAAqC,IAAvBD,EAAgCL,EAAqBK,EACnE37mC,EAAUz6F,EAAMy6F,QAChB0lQ,EAAcngW,EAAMwX,KACpBA,OAAuB,IAAhB2oV,EAAyB,QAAUA,EAC1Cm22B,EAAkBt2sC,EAAM07D,SACxBA,OAA+B,IAApB46oC,EAA6B,UAAYA,EACpDxulC,EAAiB9nH,EAAMwvE,QACvBA,OAA6B,IAAnBs4C,EAA4B,WAAaA,EACnDrxI,EAAQu8B,YAAyBhT,EAAO,CAAC,SAAU,WAAY,UAAW,YAAa,YAAa,QAAS,OAAQ,cAAe,UAAW,OAAQ,WAAY,YAEvK,OAAOzF,IAAMwB,cAAc4rF,IAAO/nF,YAAS,CACzC4X,KAAMA,EACNw8R,QAAQ,EACRjtN,UAAW,EACX73C,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ,GAAG5tE,OAAOouG,GAASpuG,OAAOk5H,YAAWv+B,GAASL,KAAaxsB,GACjG39E,IAAKA,GACJklB,IAAiB,IAATixG,EAAiBntF,IAAMwB,cAAc,MAAO,CACrDmzC,UAAWF,EAAQ04C,MAClBA,GAAQ2unC,EAAY36oC,IAAaq6oC,EAAmBr6oC,IAAa,KAAMnhE,IAAMwB,cAAc,MAAO,CACnGmzC,UAAWF,EAAQ7nC,SAClB/K,GAAqB,MAAVpb,EAAiBuZ,IAAMwB,cAAc,MAAO,CACxDmzC,UAAWF,EAAQhuD,QAClBA,GAAU,KAAgB,MAAVA,GAAkBy5G,EAAUlgG,IAAMwB,cAAc,MAAO,CACxEmzC,UAAWF,EAAQhuD,QAClBuZ,IAAMwB,cAAcy0F,IAAY,CACjC3+H,KAAM,QACN,aAAco/Z,EACdjxS,MAAOixS,EACPl1T,MAAO,UACP4e,QAAS8f,GACRt+F,IAAS,SAmFC40C,iBAvRK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAMuyB,YAAS,GAAIoxC,EAAM82C,WAAWu/B,MAAO,CACzC9pC,aAAcvsC,EAAM4/C,MAAMrT,aAC1BzC,gBAAiB,cACjB5pC,QAAS,OACTU,QAAS,aAIX2kqC,gBAAiB,CACfx6oC,MAAO2pL,YAAO10M,EAAM+pC,QAAQqsM,QAAQhvR,KAAM,IAC1C0iF,gBAAiB6qK,YAAQ30M,EAAM+pC,QAAQqsM,QAAQhvR,KAAM,IACrD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQqsM,QAAQhvR,OAKjCo+sC,aAAc,CACZz6oC,MAAO2pL,YAAO10M,EAAM+pC,QAAQk4F,KAAK76K,KAAM,IACvC0iF,gBAAiB6qK,YAAQ30M,EAAM+pC,QAAQk4F,KAAK76K,KAAM,IAClD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQk4F,KAAK76K,OAK9Bq+sC,gBAAiB,CACf16oC,MAAO2pL,YAAO10M,EAAM+pC,QAAQq7I,QAAQh+N,KAAM,IAC1C0iF,gBAAiB6qK,YAAQ30M,EAAM+pC,QAAQq7I,QAAQh+N,KAAM,IACrD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,OAKjCs+sC,cAAe,CACb36oC,MAAO2pL,YAAO10M,EAAM+pC,QAAQ92G,MAAMm0B,KAAM,IACxC0iF,gBAAiB6qK,YAAQ30M,EAAM+pC,QAAQ92G,MAAMm0B,KAAM,IACnD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,OAK/Bu+sC,gBAAiB,CACf56oC,MAA8B,UAAvB/qB,EAAM+pC,QAAQ/kH,KAAmB0vR,YAAO10M,EAAM+pC,QAAQqsM,QAAQhvR,KAAM,IAAOutP,YAAQ30M,EAAM+pC,QAAQqsM,QAAQhvR,KAAM,IACtHu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQqsM,QAAQhvR,MAClD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQqsM,QAAQhvR,OAKjCw+sC,aAAc,CACZ76oC,MAA8B,UAAvB/qB,EAAM+pC,QAAQ/kH,KAAmB0vR,YAAO10M,EAAM+pC,QAAQk4F,KAAK76K,KAAM,IAAOutP,YAAQ30M,EAAM+pC,QAAQk4F,KAAK76K,KAAM,IAChHu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQk4F,KAAK76K,MAC/C,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQk4F,KAAK76K,OAK9By+sC,gBAAiB,CACf96oC,MAA8B,UAAvB/qB,EAAM+pC,QAAQ/kH,KAAmB0vR,YAAO10M,EAAM+pC,QAAQq7I,QAAQh+N,KAAM,IAAOutP,YAAQ30M,EAAM+pC,QAAQq7I,QAAQh+N,KAAM,IACtHu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQq7I,QAAQh+N,MAClD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQq7I,QAAQh+N,OAKjC0+sC,cAAe,CACb/6oC,MAA8B,UAAvB/qB,EAAM+pC,QAAQ/kH,KAAmB0vR,YAAO10M,EAAM+pC,QAAQ92G,MAAMm0B,KAAM,IAAOutP,YAAQ30M,EAAM+pC,QAAQ92G,MAAMm0B,KAAM,IAClHu4F,OAAQ,aAAavvH,OAAO4vE,EAAM+pC,QAAQ92G,MAAMm0B,MAChD,UAAW,CACT2jE,MAAO/qB,EAAM+pC,QAAQ92G,MAAMm0B,OAK/B2+sC,cAAe,CACbh7oC,MAAO,OACPs2B,WAAYrhD,EAAM82C,WAAW+4J,iBAC7B/lK,gBAAiB9pC,EAAM+pC,QAAQqsM,QAAQhvR,MAIzC4+sC,WAAY,CACVj7oC,MAAO,OACPs2B,WAAYrhD,EAAM82C,WAAW+4J,iBAC7B/lK,gBAAiB9pC,EAAM+pC,QAAQk4F,KAAK76K,MAItC6+sC,cAAe,CACbl7oC,MAAO,OACPs2B,WAAYrhD,EAAM82C,WAAW+4J,iBAC7B/lK,gBAAiB9pC,EAAM+pC,QAAQq7I,QAAQh+N,MAIzC8+sC,YAAa,CACXn7oC,MAAO,OACPs2B,WAAYrhD,EAAM82C,WAAW+4J,iBAC7B/lK,gBAAiB9pC,EAAM+pC,QAAQ92G,MAAMm0B,MAIvCsvF,KAAM,CACJpQ,YAAa,GACb1lC,QAAS,QACTV,QAAS,OACT+rC,SAAU,GACV+F,QAAS,IAIX77E,QAAS,CACPyqC,QAAS,QACTV,QAAS,OACTK,cAAe,SACfC,eAAgB,UAIlBxwD,OAAQ,CACNkwD,QAAS,OACTnC,WAAY,SACZivC,WAAY,OACZwgB,YAAa,GACblnB,aAAc,MAkJc,CAChChzG,KAAM,YADOysE,CAEZ2x5B,I,sO7+B7OI,SAASy0Q,EACdl6mC,EACA490B,EACA72d,EACA66tB,GAEA,IAAMu4B,EAAU,YAAgCpzvB,GAS1C39S,EAAYppE,EAAMjnI,MAAuB,iBAAfinI,EAAMjnI,KAA0BinI,EAAMjnI,KAAO,SAlD/E,SAAiCinI,EAAcm6mC,GACxCA,IAGLn6mC,EAAM8vwB,IAAM9vwB,EAAM8vwB,KAAO,GACzB9vwB,EAAM8vwB,IAAIzo4B,KAAO24H,EAAM8vwB,IAAIzo4B,MAAQ8yuC,EAAQ9yuC,KAC3C24H,EAAM8vwB,IAAIvt3B,QAAUy9G,EAAM8vwB,IAAIvt3B,SAAW43tC,EAAQ53tC,QACjDy9G,EAAM8vwB,IAAI1zS,aAAV,sBAA8Bp8d,EAAM8vwB,IAAI1zS,cAAgB,IAAxD,YAAiE+9oB,EAAQ/9oB,cAAgB,KACzFp8d,EAAM8vwB,IAAI0tI,SAAV,sBAA0Bx94B,EAAM8vwB,IAAI0tI,UAAY,IAAhD,YAAyD28N,EAAQ38N,UAAY,MA4C7E48N,CAAwBp6mC,EAAO+mX,GAAYA,EAAS+oZ,KAEpD,IAAMuqW,EAAkB,YAA2Br6mC,EAAOm6mC,EAASv4B,EAAQhkQ,UAMpE590B,EAAMirnB,sBAEb,IAAMqvf,EAAuB,CAAC,CAAEvhvC,KAAMqwM,GAAappE,GACnD,OAAO,YAA8Bq6mC,EAAiB,CAACC,I,sC8+B/ElD,SAASC,EACdC,EACA58R,EACA72d,EACA66tB,GAEA,IAAM735B,EAA6B,CACjC835B,SAAS,IAAIj7rC,MAAO+9B,eAGlBoic,GAAYA,EAAS+oZ,MACvB/llB,EAAQ+llB,IAAM,CACZzo4B,KAAM0/e,EAAS+oZ,IAAIzo4B,KACnBkb,QAASwke,EAAS+oZ,IAAIvt3B,UAIpBq/rC,GAAUhkQ,IACd7zpB,EAAQ6zpB,IAAM,YAAYA,IAG5B,IAAMnr4B,EAIR,SAAkC+nqC,GAChC,IAAMz6sC,ECYE,YACA,IADA,EACA,KADA,cAEA,GAFA,IAEA,MAAA15B,MAAA,8BACAo0uC,EAAA,uBACAC,EAAA,iIACA,+HALA,8BAOA,SDnBQC,CAAuBH,GAKvC,MAAO,CAJ8B,CACnCzhvC,KAAM,SACN2B,OAAQqlC,EAAQrlC,QAEKqlC,GAVV66sC,CAAyBJ,GACtC,OAAO,YAA+Bzw7B,EAAS,CAACt3O,I,+BEkC5CooqC,EAAqB,8DAiCL,E,WAsCV,WAAYh2sC,GAepB,GAfgC,oBAChChsC,KAAKgpH,SAAWh9E,EAChBhsC,KAAKk4uC,cAAgB,GACrBl4uC,KAAKiivC,0BAA2B,EAChCjivC,KAAKkivC,eAAiB,EACtBlivC,KAAKmivC,UAAY,GACjBnivC,KAAKoivC,OAAS,GACdpivC,KAAKwwvB,iBAAmB,GAEpBxktB,EAAQ+46B,IACV/k9B,KAAKuptC,KAAO,YAAQv9qC,EAAQ+46B,KAE5B,KAAe/j0B,EAAA,EAAO/4H,KAAK,iDAGzBjoB,KAAKuptC,KAAM,CACb,IAAM/nnC,EAAM,YAAsCxhG,KAAKuptC,KAAMv9qC,GAC7DhsC,KAAKylhB,WAAaz5e,EAAQwwK,UAAR,yBAChBusgC,OAAQ/otC,KAAKgpH,SAAS+/lC,OACtBqH,mBAAoBpwtC,KAAKowtC,mBAAmBtusC,KAAK9hB,OAC9CgsC,EAAQq2sC,kBAHK,IAIhB7gpC,U,oDASC,SAAiBu4P,EAAgBpV,EAAkBqU,GAAmC,WAE3F,IAAI,YAAwBe,GAA5B,CAKA,IAAIC,EAA8BrV,GAAQA,EAAKrzI,SAU/C,OARAtxM,KAAKsivC,SACHtivC,KAAKuivC,mBAAmBxo5B,EAAWpV,GAChCpuQ,MAAK,SAAA4wD,GAAA,OAAS,EAAKq7mC,cAAcr7mC,EAAOw9M,EAAMqU,MAC9CziR,MAAK,SAAA3iE,GACJomV,EAAUpmV,MAITomV,EAdL,KAAeh5M,EAAA,EAAO/1C,IAAI+2oC,K,4BAoBvB,SACL3wsC,EAEAx3B,EACA8qU,EACAqU,GACoB,WAChBgB,EAA8BrV,GAAQA,EAAKrzI,SAEzCmxiC,EAAe,OAAAn9uC,EAAA,GAAsB+rC,GAAWA,EAAUxiC,OAAOwiC,GAEjEqxsC,EAAgB,OAAAp9uC,EAAA,GAAY+rC,GAC9BrxC,KAAK2ivC,iBAAiBF,EAAc5ouC,EAAO8qU,GAC3C3kV,KAAKuivC,mBAAmBlxsC,EAASszS,GAUrC,OARA3kV,KAAKsivC,SACHI,EACGnsqC,MAAK,SAAA4wD,GAAA,OAAS,EAAKq7mC,cAAcr7mC,EAAOw9M,EAAMqU,MAC9CziR,MAAK,SAAA3iE,GACJomV,EAAUpmV,MAITomV,I,0BAMF,SAAa7yN,EAAcw9M,EAAkBqU,GAElD,KAAIrU,GAAQA,EAAKyV,mBAAqB,YAAwBzV,EAAKyV,oBAAnE,CAKA,IAAIJ,EAA8BrV,GAAQA,EAAKrzI,SAGzCykhC,GADwB5ulC,EAAMirnB,uBAAyB,IACM2je,kBAQnE,OANA/1tC,KAAKsivC,SACHtivC,KAAKwivC,cAAcr7mC,EAAOw9M,EAAMox4B,GAAqB/83B,GAAOziR,MAAK,SAAA3iE,GAC/DomV,EAAUpmV,MAIPomV,EAfL,KAAeh5M,EAAA,EAAO/1C,IAAI+2oC,K,4BAqBvB,SAAe33oC,GACa,kBAApBA,EAAQkpK,QACnB,KAAevyH,EAAA,EAAO/4H,KAAK,+DAE3BjoB,KAAK4ivC,YAAYv4oC,GAEjB,YAAcA,EAAS,CAAEtyD,MAAM,O,oBAO5B,WACL,OAAO/3C,KAAKuptC,O,wBAMP,WACL,OAAOvptC,KAAKgpH,W,4BAQP,WACL,OAAOhpH,KAAKgpH,SAAS+4Z,Y,0BAMhB,WACL,OAAO/hhB,KAAKylhB,a,mBAMP,SAAMhhb,GACX,IAAM+3G,EAAYx8M,KAAKylhB,WACvB,OAAIjpU,GACEx8M,KAAK6ivC,mBACP7ivC,KAAK6ivC,kBAAkB/wjC,QAElB9xL,KAAK8ivC,wBAAwBr+oC,GAASluB,MAAK,SAAAwsqC,GAChD,OAAOvmiC,EAAU1qB,MAAMrtF,GAASluB,MAAK,SAAAysqC,GAAiB,OAAGD,GAAkBC,SAGtE,aAAoB,K,mBAOxB,SAAMv+oC,GAAwC,WACnD,OAAOzkG,KAAK8xL,MAAMrtF,GAASluB,MAAK,SAAA3iE,GAK9B,OAJA,EAAK4mV,aAAalwE,SAAU,EACxB,EAAKu49B,mBACP,EAAKA,kBAAkBp5oC,QAElB71F,O,gCAKJ,WACL,OAAO5T,KAAKwwvB,mB,+BAIP,SAAkByqd,GACvBj7sC,KAAKwwvB,iBAAiBpkvB,KAAK6usC,K,+BAOtB,SAAkBgoC,IAClBA,IAAoBjjvC,KAAKiivC,0BAA8BjivC,KAAK8otC,eAAiB9otC,KAAKiivC,2BACrFjivC,KAAKkjvC,uB,kBAKF,WACDljvC,KAAK8otC,cACP9otC,KAAKkjvC,uB,gCAUF,SAAmBC,GACxB,OAAOnjvC,KAAK+/uC,qBAAqBoD,K,kCAQ5B,SAA0DC,GAC/D,OAAOpjvC,KAAKk4uC,cAAckL,K,4BAOrB,SAAsC3n5B,GAC3C,IACE,OAAQz7V,KAAKk4uC,cAAcz84B,EAAYx6T,KAAa,KACpD,MAAO06T,GAEP,OADA,KAAe36M,EAAA,EAAO/4H,KAAP,sCAA2CwzU,EAAYx6T,GAAvD,6BACR,Q,4BAOJ,SAAew6T,GACpB,IAAM4n5B,EAAqBrjvC,KAAKk4uC,cAAcz84B,EAAYjtV,MAG1D,YAAiBxO,KAAMy7V,EAAaz7V,KAAKk4uC,eAEpCmL,GACH,YAAuBrjvC,KAAM,CAACy7V,M,uBAO3B,SAAUt0N,GAA0C,WAA5Bw9M,EAA4B,uDAAV,GAC/C3kV,KAAK4oG,KAAK,kBAAmBu+B,EAAOw9M,GAEpC,IAHyD,EAGrDr9O,EAAM+5oC,EAAoBl6mC,EAAOnnI,KAAKuptC,KAAMvptC,KAAKgpH,SAAS+4Z,UAAW/hhB,KAAKgpH,SAAS+/lC,QAH9B,cAKhCpk4B,EAAKgnH,aAAe,IALY,IAKzD,2BAAiD,KAAtC0vL,EAAsC,QAC/C/zhB,EAAM,YACJA,EACA,YACE+zhB,EACAr7nB,KAAKgpH,SAASq5nC,kBAAoBrivC,KAAKgpH,SAASq5nC,iBAAiB9xB,eAVd,8BAezD,IAAMvukC,EAAUhiJ,KAAKoptC,cAAc9hnC,GAC/B06C,GACFA,EAAQzrE,MAAK,SAAAs4pC,GAAa,OAAG,EAAKjmoC,KAAK,iBAAkBu+B,EAAO0nmC,KAAe,Q,yBAO5E,SAAYxkoC,GACjB,IAAM/C,Eh/BvXH,SACL+C,EACA062B,EACA72d,EACA66tB,GAEA,IAAMu4B,EAAU,YAAgCpzvB,GAC1CszvB,EAAkB,OAAlB,IAAkB,CAAlB,aACJx4B,SAAS,IAAIj7rC,MAAO+9B,eAChBw1rC,GAAW,CAAErqW,IAAKqqW,MAChBv4B,GAAUhkQ,GAAO,CAAEA,IAAK,YAAYA,KAGtCu+R,EACJ,eAAgBj5oC,EAAU,CAAC,CAAEnqG,KAAM,YAAcmqG,GAAW,CAAC,CAAEnqG,KAAM,WAAamqG,EAAQ3kF,UAE5F,OAAO,YAAgC87tC,EAAiB,CAAC8B,Ig/BuW3CC,CAAsBl5oC,EAASrqG,KAAKuptC,KAAMvptC,KAAKgpH,SAAS+4Z,UAAW/hhB,KAAKgpH,SAAS+/lC,QAI7F/otC,KAAKoptC,cAAc9hnC,K,gCAMd,SAAmBikB,EAAyB6L,EAAwBosnC,GACzE,GAAIxjvC,KAAKgpH,SAAS4/lC,kBAAmB,CAGnC,IAAMxzsC,EAAgC,kBAAjBouuC,EAA4BA,EAAe,EAQ1Dl/uC,EAAM,GAAN,OAAO,EAAP,YAAO,GACA,2FACA,8C,qCAOA,YACA,KAAA08I,EAAA,EAAA/1C,IAAA,qEACA,QACA,EACA,UACA,wBACA,sBAKA,wB,gBAiDA,cACA,iBACA,mBAIA,yB,kBAwCA,8FACA,gBACA,kE,gCAOA,WACA,iCACA,uCACA,oBAGA,mC,qCAIA,cACA,SACA,KACA,kCAEA,MACA,KADA,oBAGA,GAHA,IAGA,gCACA,EADA,QACA,UACA,sBACA,KACA,QAPA,+BAeA,uBACA,yBAGA,0BAAC,eACD,uBADA,IAEA,iCAEA,0B,qCAcA,uBACA,4BACA,QAGA,0BACA,qBACA,iBACA,QAEA,GAPA,EAQA,UACA,iBACA,UAVA,Q,wBAkBA,WACA,iE,2BAiBA,SACA,EACA,EACA,GAEA,WADA,EACA,uDADA,cAEA,oBACA,kCAOA,OANA,6BACA,kBAGA,iCAEA,8CACA,YACA,SAGA,iCACA,2BACA,oCAIA,KADA,+BACA,GACA,oDACA,wBACA,OACA,WACA,UACA,mBAEA,YAGA,4BAEA,qCACA,0BACA,yBAGA,c,2BAUA,qHACA,uCACA,YACA,qBAEA,YACA,QAGA,QACA,mBACA,IAAAA,IAAA,WAEA,IAAAhjF,KAAA,S,2BAqBA,2BACA,oBACA,eAEA,OACA,OACA,kBACA,yCAKA,2CAEA,OADA,iDACA,YACA,mGACA,EADA,KAEA,QAKA,oCAGA,GADA,6BACA,2BAEA,mCACA,kBACA,YAEA,MADA,4CACA,0EAIA,GADA,+BAEA,SAGA,MA8JA,SACA,EACA,EACA,GAEA,6CAEA,KAAAk/G,IAAA,EACA,cAGA,YACA,YAGA,qBACA,mDACA,yBADA,IAEA,8BAGA,cAGA,SAtLA,QACA,OAmIA,SACA,EACA,GAEA,2DACA,kBACA,eACA,YACA,6BACA,iBAEA,YAEA,YACA,oDAAA/+H,OAGA,6BACA,iBAEA,SAvJA,SAEA,kBACA,aAEA,GADA,wCACA,GACA,IAEA,KAFA,aAEA,OACA,6CAEA,2EAGA,wBAKA,IAJA,MACA,+BAGA,GACA,IAKA,GAJA,4EACA,IACA,0BAGA,KACA,6CAOA,yBACA,wCAEA,8CACA,GADA,IAEA,OAHA,WAQA,OADA,iBACA,KAEA,uBACA,oBACA,QASA,MANA,sBACA,MACA,eAEA,sBAEA,6IACA,S,sBAQA,uBACA,sBACA,QACA,YAEA,OADA,mBACA,KAEA,YAEA,OADA,mBACA,O,2BAQA,YAGA,GAFA,8BAEA,mCACA,sDACA,kDAGA,uC,4BAOA,WACA,qBAEA,OADA,kBACA,gCACA,sCACA,OACA,OAFA,KAGA,SAHA,KAIA,sB,KA8EA,cACA,uBAGA,cACA,6BAOA,cACA,oBAEA,wBAIA,yB,qFCx7Bb6oU,EAAS,c,ICbXwy6B,E,SAFE,EAAS,IAYR,SAAS9N,EAAiC18hC,GAC/C,IAAM/4M,EAAO,UACb,YAAWA,EAAM+4M,GACjB,YAAgB/4M,EAAMwjvC,GAGxB,SAASA,IACP,GDIK,WAML,IAAMC,EAAa1y6B,EAAe+jI,OAC5B4uyB,EAAsBD,GAAaA,EAAUE,KAAOF,EAAUE,IAAIj2wB,QAElEk2wB,EAAgB,YAAa7y6B,KAAYA,EAAO3gN,QAAQwnF,aAAem5H,EAAO3gN,QAAQohU,aAE5F,OAAQkyzB,GAAuBE,ECf1B9izB,GAAL,CAIA,IAAM+izB,EAAgB,EAAOC,WAC7B,EAAOA,WAAa,WAClB,IAAM/0uC,EAAK,EAAOw6C,SAAS2jE,KAErBp+G,EAAOy0uC,EACbA,EAAWx0uC,EACX,IAAMkirC,EAAkC,CAAEnirC,OAAMC,MAEhD,GADA,YAAgB,UAAWkirC,GACvB4yD,EAIF,IAAI,2BAXoD/4tC,EAWpD,yBAXoDA,EAWpD,gBACF,OAAO+4tC,EAAc97uC,MAAMjI,KAAMgrB,GACjC,MAAO2wU,MAsBb,YAAK,EAAOrrO,QAAS,YAAa2znC,GAClC,YAAK,EAAO3znC,QAAS,eAAgB2znC,GAjBrC,SAASA,EAA2BC,GAClC,OAAO,WAA+C,2BAAnBl5tC,EAAmB,yBAAnBA,EAAmB,gBACpD,IAAMw2E,EAAMx2E,EAAKnpB,OAAS,EAAImpB,EAAK,QAAKlvB,EACxC,GAAI0lG,EAAK,CAEP,IAAMxyF,EAAOy0uC,EACPx0uC,EAAKJ,OAAO2yF,GAElBiipC,EAAWx0uC,EACX,IAAMkirC,EAAkC,CAAEnirC,OAAMC,MAChD,YAAgB,UAAWkirC,GAE7B,OAAO+yD,EAAwBj8uC,MAAMjI,KAAMgrB,O,4KCtD7Cqb,EAAO5B,IAAMwB,cAAcwz6B,IAAoB,MAE/C9w6B,EAAQlE,IAAMwB,cAAcqr/B,IAAmB,MAE/C7h/B,EAAQhL,IAAMwB,cAAcqr/B,IAAmB,MAE/CjtuB,EAAQ5/Q,IAAMwB,cAAcwz6B,IAAoB,MAmErC9/gB,EAjEcl1Z,IAAM8E,YAAW,SAAgCW,EAAOzuC,GACnF,IAAIytmB,EAAsBh/jB,EAAMg/jB,oBAC5B9zlB,EAAQ80B,EAAM90B,MACd+zlB,EAAsBj/jB,EAAMi/jB,oBAC5B7vK,EAAepvZ,EAAMovZ,aACrB1tL,EAAO1hO,EAAM0hO,KACb6tL,EAAcvvZ,EAAMuvZ,YACpB94a,EAAQu8B,YAAyBhT,EAAO,CAAC,sBAAuB,QAAS,sBAAuB,eAAgB,OAAQ,gBAExHgxC,EAAQwjD,cAUZ,OAAOj6F,IAAMwB,cAAc,MAAO6D,YAAS,CACzCruC,IAAKA,GACJklB,GAAQ8jB,IAAMwB,cAAcy0F,IAAY5wF,YAAS,CAClD+6E,QAX0B,SAA+BsiB,GACzDmyT,EAAanyT,EAAOykI,EAAO,IAW3B1uJ,SAAmB,IAAT0uJ,EACV3lK,MAAO,WACNijgB,GAA0C,QAApBhuhB,EAAMxB,UAAsBrzC,EAAOsC,GAAQlE,IAAMwB,cAAcy0F,IAAY5wF,YAAS,CAC3G+6E,QAX0B,SAA+BsiB,GACzDmyT,EAAanyT,EAAOykI,EAAO,IAW3B1uJ,SAAU0uJ,GAAQ7uQ,KAAKqjB,KAAKhL,EAAQqkb,GAAe,EACnDxzV,MAAO,WACNkjgB,GAA0C,QAApBjuhB,EAAMxB,UAAsBjqC,EAAQ40Q,OCiC3D8/7B,EAA4B,SAAmC99sC,GACjE,IAAIr3B,EAAOq3B,EAAKr3B,KACZC,EAAKo3B,EAAKp3B,GACVmG,EAAQixB,EAAKjxB,MACjB,MAAO,GAAG9J,OAAO0D,EAAM,KAAK1D,QAAe,IAAR2D,EAAYmG,EAAQnG,EAAI,QAAQ3D,OAAO8J,IAGxEgvuC,EAA4B,CAAC,GAAI,GAAI,GAAI,KAKzCjrzB,EAAkB10Z,IAAM8E,YAAW,SAAyBW,EAAOzuC,GACrE,IA4BIy4xB,EA5BAmwd,EAAwBn6sC,EAAMwvZ,iBAC9BA,OAA6C,IAA1B2qzB,EAAmC1qzB,EAAyB0qzB,EAC/En7oB,EAAsBh/jB,EAAMg/jB,oBAC5Bo7oB,EAAwBp6sC,EAAMq6sC,mBAC9BA,OAA+C,IAA1BD,EAAmC,gBAAkBA,EAC1EprqC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBorqC,EAAct6sC,EAAMgqvB,QACpB76sB,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B22M,IAAY32M,EACtDjkE,EAAQ80B,EAAM90B,MACdqvuC,EAAwBv6sC,EAAMk/jB,mBAC9BA,OAA+C,IAA1Bq7oB,EAAmCN,EAA4BM,EACpFC,EAAwBx6sC,EAAMmvZ,iBAC9BA,OAA6C,IAA1BqrzB,EAAmC,iBAAmBA,EACzEv7oB,EAAsBj/jB,EAAMi/jB,oBAC5Bw7oB,EAAwBz6sC,EAAM06sC,mBAC9BA,OAA+C,IAA1BD,EAAmC,YAAcA,EACtErrzB,EAAepvZ,EAAMovZ,aACrBE,EAAsBtvZ,EAAMsvZ,oBAC5B5tL,EAAO1hO,EAAM0hO,KACb6tL,EAAcvvZ,EAAMuvZ,YACpBorzB,EAAwB36sC,EAAMqvZ,mBAC9BA,OAA+C,IAA1BsrzB,EAAmCT,EAA4BS,EACpFC,EAAqB56sC,EAAM4yjB,YAC3BA,OAAqC,IAAvBgopB,EAAgC,GAAKA,EACnDnkuC,EAAQu8B,YAAyBhT,EAAO,CAAC,mBAAoB,sBAAuB,qBAAsB,UAAW,YAAa,UAAW,YAAa,QAAS,qBAAsB,mBAAoB,sBAAuB,qBAAsB,eAAgB,sBAAuB,OAAQ,cAAe,qBAAsB,gBAI9UyP,IAAcq2O,KAA2B,OAAdr2O,IAC7Bu6uB,EAAUswd,GAAe,KAG3B,IAAIO,EAAoBjopB,EAAYG,OAAS,SAAW1gf,IACxD,OAAO93E,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,GAC9B86sB,QAASA,EACTz4xB,IAAKA,GACJklB,GAAQ8jB,IAAMwB,cAAc4sZ,IAAS,CACtCz5W,UAAWF,EAAQ0gX,SAClBn1Z,IAAMwB,cAAc,MAAO,CAC5BmzC,UAAWF,EAAQ0vU,SACjB2wC,EAAmB13b,OAAS,GAAK4iC,IAAMwB,cAAcuzE,IAAY,CACnEvT,MAAO,UACPyT,QAAS,QACTtgC,UAAWF,EAAQi5E,SAClBknS,GAAmBE,EAAmB13b,OAAS,GAAK4iC,IAAMwB,cAAc67E,IAAQh4E,YAAS,CAC1FovC,QAAS,CACP6mB,OAAQ7mB,EAAQ6mB,OAChB6xB,KAAM14C,EAAQ8rqC,YAEhBvgoC,MAAOhgF,IAAMwB,cAAc2m7B,IAAW,CACpCxz4B,UAAW2B,kBAAK7B,EAAQurC,MAAOvrC,EAAQqoU,cAEzC7lZ,MAAO+9b,EACPj+U,SAAUg+U,GACTsjK,GAAcvjK,EAAmBvwb,KAAI,SAAUi8uC,GAChD,OAAOxgtC,IAAMwB,cAAc8+sC,EAAmB,CAC5C3rqC,UAAWF,EAAQ65C,SACnBzuH,IAAK2gvC,EAAkBvpvC,MAAQupvC,EAAkBvpvC,MAAQupvC,EACzDvpvC,MAAOupvC,EAAkBvpvC,MAAQupvC,EAAkBvpvC,MAAQupvC,GAC1DA,EAAkBnktC,MAAQmktC,EAAkBnktC,MAAQmktC,OACpDxgtC,IAAMwB,cAAcuzE,IAAY,CACnCvT,MAAO,UACPyT,QAAS,QACTtgC,UAAWF,EAAQi5E,SAClBi3c,EAAmB,CACpBp6lB,KAAgB,IAAVoG,EAAc,EAAIw2P,EAAO6tL,EAAc,EAC7Cxqb,GAAIlS,KAAKE,IAAImY,GAAQw2P,EAAO,GAAK6tL,GACjCrkb,MAAOA,EACPw2P,KAAMA,KACHnnO,IAAMwB,cAAcyzZ,EAAkB,CACzCtgX,UAAWF,EAAQ3P,QACnB2/hB,oBAAqBp/jB,YAAS,CAC5BogF,MAAOq6nC,EACP,aAAcA,GACbr7oB,GACH9zlB,MAAOA,EACP+zlB,oBAAqBr/jB,YAAS,CAC5BogF,MAAO06nC,EACP,aAAcA,GACbz7oB,GACH7vK,aAAcA,EACd1tL,KAAMA,EACN6tL,YAAaA,SA2HFx+W,iBAjSK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ0uF,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAC1BgC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnC/6J,SAAU,OAEV,eAAgB,CACdvuC,QAAS,IAKb89W,QAAS,CACPhmU,UAAW,GACXC,aAAc,GAIhB+0R,OAAQ,CACN5mR,KAAM,YAIRmwB,QAAS,CACP62J,WAAY,GAIdu4F,WAAY,CAEV//R,YAAa,GACb0G,WAAY,GAIdnoB,OAAQ,CACN2oC,YAAa,EACb7U,aAAc,GACd5G,UAAW,QACXi4nC,cAAe,SAKjBF,WAAY,CACV1wnC,IAAK,GAIP7P,MAAO,CACLxe,MAAO,UACPkhB,SAAU,UACV6hM,WAAY,GAIdj2L,SAAU,GAGVxpD,QAAS,CACPy/O,WAAY,EACZ9gM,WAAY,OAkOgB,CAChC15G,KAAM,sBADOysE,CAEZk+W,I,kFC3SYx1U,cAAcl/E,IAAMwB,cAAc,OAAQ,CACvDngC,EAAG,mEACD,iB,yBC2DA4rxB,EAAiBjtvB,IAAM8E,YAAW,SAAwBW,EAAOzuC,GACnE,IAAI++lC,EAAgBtwjC,EAAM+4O,OACtBA,OAA2B,IAAlBu30B,GAAmCA,EAC5Cl0jC,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBK,EAAmBvvC,EAAMwvC,UACzBA,OAAiC,IAArBD,EAA8B,MAAQA,EAClD0rqC,EAAsBj7sC,EAAMk7sC,aAC5BA,OAAuC,IAAxBD,GAAyCA,EACxDx+kB,EAAuBz8nB,EAAM+tnB,cAC7BA,OAAyC,IAAzB0O,EAAkC0+kB,EAAoB1+kB,EACtEhmpB,EAAQu8B,YAAyBhT,EAAO,CAAC,SAAU,WAAY,UAAW,YAAa,YAAa,eAAgB,kBAExH,OAAOzF,IAAMwB,cAAcguF,IAAYnqF,YAAS,CAC9CsvC,UAAW2B,kBAAK7B,EAAQ3hE,KAAM6hE,EAAW6pM,GAAU/pM,EAAQ+pM,QAC3D3pM,UAAW,OACX+pT,eAAe,EACf5nY,IAAKA,GACJklB,GAAQ2lB,EAAU8+sC,IAAiBni+B,EAAS,KAAOx+O,IAAMwB,cAAcgynB,EAAe,CACvF7+kB,UAAW2B,kBAAK7B,EAAQ04C,KAAM14C,EAAQ,gBAAgB5tE,OAAOk5H,YAAW9qD,YAwC7DuB,iBAtHK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJ8tG,OAAQ,UACRjqC,QAAS,cACTM,eAAgB,aAChBD,cAAe,UACfxC,WAAY,SACZ,UAAW,CACTgtB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,WAE5B,UAAW,CACT/8B,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B,UAAW,CACT9V,QAAS,KAGb,WAAY,CACVjnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,QAE1B,WAAY,CACV+H,QAAS,EACTjnB,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,aAMhCigJ,OAAQ,GAGRrxJ,KAAM,CACJzK,SAAU,GACV3F,YAAa,EACb0G,WAAY,EACZgF,QAAS,EACTsH,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,UAAW,aAAc,CAC7Dq2H,SAAUx5C,EAAMu5C,YAAYC,SAASoQ,UAEvCqlO,WAAY,QAIdm74B,kBAAmB,CACjBjpnC,UAAW,gBAIbkpnC,iBAAkB,CAChBlpnC,UAAW,qBAoEiB,CAChC7tH,KAAM,qBADOysE,CAEZy2sB,I,0KCzDYz2sB,mBAnEF,SAAgBC,GAC3B,MAAO,CACLo04B,MAAO,CACL,SAAU,CACR,YAAa,CACXjz1B,UAAW,gCAIjB1xB,KAAM,GACN78F,OAAQg8B,YAAS,CACfk3F,OAAQ,GACP9lD,EAAM82C,WAAWu/B,MAAO,CACzBpqC,SAAUjsC,EAAM82C,WAAWozJ,QAAQ,IACnC1rJ,WAAY,IACZlF,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,aAAc,CAClDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,WAEvCj1J,KAAM,GACN2Q,gBAAiB,gBACjB5I,UAAW,WACXpf,SAAU,aAEZ+1c,OAAQ,CACN53e,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChBJ,MAAO,GACPi2C,OAAQ,GACR9J,aAAc,gBACdzC,gBAAiB,eACjBqX,UAAW,kBAEbv7F,MAAO,CACLmlE,MAAO/qB,EAAM+pC,QAAQE,QAAQqO,aAC7B6I,UAAW,oBAgCiB,CAChC7tH,KAAM,qBADOysE,EAvBf,SAAoB/wC,GAClB,IAAI5D,EAAW4D,EAAM5D,SACjB4yC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBuxB,EAAOzgE,EAAMygE,KACbjvG,EAAQwuC,EAAMxuC,MACd8pvC,EAAoBt7sC,EAAMs7sC,kBAE9B,MAA0B,QAAtBA,EACKl/sC,EAGF7B,IAAMyX,aAAa5V,EAAU,CAClC8yC,UAAW2B,kBAAKz0C,EAAS4D,MAAMkvC,WAAYuxB,GAA8B,OAAtB66oC,IAA+BtsqC,EAAQyxB,KAAMzxB,EAAQo24B,QACvG7q7B,IAAMwB,cAAc,OAAQ,CAC7BmzC,UAAW2B,kBAAK7B,EAAQprE,OAAQsrE,IAC/B30C,IAAMwB,cAAc,OAAQ,CAC7BmzC,UAAWF,EAAQ85e,QAClBvuhB,IAAMwB,cAAc,OAAQ,CAC7BmzC,UAAWF,EAAQp4C,OAClBplC,SClDL,SAAS+pvC,EAAI9/uC,EAAGC,GACd,OAAOD,EAAIC,EAGb,SAASmiI,EAAMrsI,EAAOuB,EAAKD,GACzB,OAAOD,KAAKE,IAAIF,KAAKC,IAAIC,EAAKvB,GAAQsB,GAGxC,SAAS0ovC,EAAYv6uC,EAAQgvyB,GAe3B,OAdqBhvyB,EAAOQ,QAAO,SAAUutI,EAAKx9I,EAAOS,GACvD,IAAIogS,EAAWx/R,KAAKijB,IAAIm6xB,EAAez+yB,GAEvC,OAAY,OAARw9I,GAAgBqjJ,EAAWrjJ,EAAIqjJ,UAAYA,IAAarjJ,EAAIqjJ,SACvD,CACLA,SAAUA,EACVpgS,MAAOA,GAIJ+8I,IACN,MAC+B/8I,MAKpC,SAASwpvC,EAAYx+mC,EAAOy+mC,GAC1B,QAAwB9pvC,IAApB8pvC,EAAQ99sC,SAAyBq/F,EAAMm+f,eAAgB,CACzD,IAAK,IAAItioB,EAAI,EAAGA,EAAImkI,EAAMm+f,eAAezjoB,OAAQmB,GAAK,EAAG,CACvD,IAAIqoE,EAAQ87D,EAAMm+f,eAAetioB,GAEjC,GAAIqoE,EAAM2p5B,aAAe4wR,EAAQ99sC,QAC/B,MAAO,CACLjwB,EAAGwzD,EAAMg0O,QACT7zQ,EAAG6/B,EAAMi0O,SAKf,OAAO,EAGT,MAAO,CACLznS,EAAGsvH,EAAMk4K,QACT7zQ,EAAG27F,EAAMm4K,SAIb,SAASum8B,EAAenqvC,EAAOuB,EAAKD,GAClC,OAAuB,KAAftB,EAAQuB,IAAcD,EAAMC,GAoBtC,SAAS6ovC,EAAiBpqvC,EAAOkJ,EAAM3H,GACrC,IAAI8twB,EAAUhuwB,KAAKo/E,OAAOzgF,EAAQuB,GAAO2H,GAAQA,EAAO3H,EACxD,OAAO0E,OAAOopwB,EAAQ3wgB,QAfxB,SAA6BlhJ,GAG3B,GAAIn8G,KAAKijB,IAAIk5F,GAAO,EAAG,CACrB,IAAImrC,EAAQnrC,EAAI6soC,gBAAgBhnsC,MAAM,MAClCinsC,EAAqB3hmC,EAAM,GAAGtlG,MAAM,KAAK,GAC7C,OAAQinsC,EAAqBA,EAAmBnkvC,OAAS,GAAK+5C,SAASyoG,EAAM,GAAI,IAGnF,IAAI2mnB,EAAc9xpB,EAAIj4G,WAAW89C,MAAM,KAAK,GAC5C,OAAOistB,EAAcA,EAAYnpwB,OAAS,EAKZopwB,CAAoBrmwB,KAGpD,SAASqhvC,EAAc5/sC,GACrB,IAAIl7B,EAASk7B,EAAKl7B,OACd8hB,EAASoZ,EAAKpZ,OACdpd,EAAWw2B,EAAKx2B,SAChB1T,EAAQkqC,EAAKlqC,MAGjB,GAAIgP,EAAOhP,KAAW0T,EACpB,OAAOod,EAGT,IAAI4zH,EAASlhD,YAAmBx0F,GAGhC,OADA01I,EAAO1kJ,GAAS0T,EACTgxI,EAGT,SAASqlmC,EAAWv9sC,GAClB,IAAIw9sC,EAAYx9sC,EAAMw9sC,UAClBt3yB,EAAclma,EAAMkma,YACpBu3yB,EAAYz9sC,EAAMy9sC,UAEjBD,EAAUr+sC,QAAQliB,SAASogB,SAASwgR,gBAAkB7kT,OAAOqkC,SAASwgR,cAAc7I,aAAa,iBAAmBkxJ,GACvHs3yB,EAAUr+sC,QAAQk0Q,cAAc,gBAAiB1wS,OAAOujc,EAAa,OAAQnkY,QAG3E07qC,GACFA,EAAUv3yB,GAId,IAAIw3yB,EAAY,CACdjm9B,WAAY,CACVtyR,OAAQ,SAAgBizU,GACtB,MAAO,CACLxmU,KAAM,GAAGjP,OAAOy1U,EAAS,OAG7Bul6B,KAAM,SAAcvl6B,GAClB,MAAO,CACLzlQ,MAAO,GAAGhwE,OAAOy1U,EAAS,QAIhC,qBAAsB,CACpBjzU,OAAQ,SAAgBizU,GACtB,MAAO,CACLvmU,MAAO,GAAGlP,OAAOy1U,EAAS,OAG9Bul6B,KAAM,SAAcvl6B,GAClB,MAAO,CACLzlQ,MAAO,GAAGhwE,OAAOy1U,EAAS,QAIhChhD,SAAU,CACRjyR,OAAQ,SAAgBizU,GACtB,MAAO,CACLxsN,OAAQ,GAAGjpH,OAAOy1U,EAAS,OAG/Bul6B,KAAM,SAAcvl6B,GAClB,MAAO,CACLxvN,OAAQ,GAAGjmH,OAAOy1U,EAAS,SAK/Bwl6B,EAAe,GAEfC,EAAW,SAAkB3uuC,GAC/B,OAAOA,GAiOLoutB,EAASxhsB,IAAM8E,YAAW,SAAgBW,EAAOzuC,GACnD,IAAI4pI,EAAYn7F,EAAM,cAClByujB,EAAiBzujB,EAAM,mBACvBu8sC,EAAgBv8sC,EAAM,kBACtBgvC,EAAUhvC,EAAMgvC,QAChBE,EAAYlvC,EAAMkvC,UAClBq4E,EAAevnH,EAAM+7D,MACrBA,OAAyB,IAAjBwrD,EAA0B,UAAYA,EAC9Cp4E,EAAmBnvC,EAAMovC,UACzB3/B,OAAiC,IAArB0/B,EAA8B,OAASA,EACnD97B,EAAerT,EAAMqT,aACrBomO,EAAkBz5O,EAAMgzE,SACxBA,OAA+B,IAApBymK,GAAqCA,EAChDkrwB,EAAe3k/B,EAAM2k/B,aACrBC,EAAmB5k/B,EAAM4k/B,iBACzB43N,EAAex8sC,EAAMy8sC,MACrBC,OAA6B,IAAjBF,EAA0BH,EAAeG,EACrD56e,EAAa5huB,EAAMltC,IACnBA,OAAqB,IAAf8uwB,EAAwB,IAAMA,EACpC+6e,EAAa38sC,EAAMjtC,IACnBA,OAAqB,IAAf4pvC,EAAwB,EAAIA,EAClCr4uC,EAAO07B,EAAM17B,KACbgtG,EAAWtxE,EAAMsxE,SACjBoz1B,EAAoB1k6B,EAAM0k6B,kBAC1BptoB,EAAct3R,EAAMs3R,YACpBqnb,EAAqB3+sB,EAAMqsV,YAC3BA,OAAqC,IAAvBsyX,EAAgC,aAAeA,EAC7Di+f,EAAe58sC,EAAM2hR,MACrBA,QAAyB,IAAjBi77B,EAA0BN,EAAWM,EAC7CC,GAAc78sC,EAAMtlC,KACpBA,QAAuB,IAAhBmivC,GAAyB,EAAIA,GACpCC,GAAwB98sC,EAAM+8sC,eAC9BA,QAA2C,IAA1BD,GAAmC,OAASA,GAC7DE,GAAeh9sC,EAAMwkK,MACrBA,QAAyB,IAAjBw4iC,GAA0B,SAAWA,GAC7C7hlB,GAAYn7nB,EAAMxuC,MAClByrvC,GAAwBj9sC,EAAMk9sC,oBAC9BA,QAAgD,IAA1BD,GAAmCE,EAAaF,GACtEG,GAAwBp9sC,EAAMs7sC,kBAC9BA,QAA8C,IAA1B8B,GAAmC,MAAQA,GAC/DC,GAAwBr9sC,EAAMs9sC,iBAC9BA,QAA6C,IAA1BD,GAAmCf,EAAWe,GACjE5muC,GAAQu8B,YAAyBhT,EAAO,CAAC,aAAc,kBAAmB,iBAAkB,UAAW,YAAa,QAAS,YAAa,eAAgB,WAAY,eAAgB,mBAAoB,QAAS,MAAO,MAAO,OAAQ,WAAY,oBAAqB,cAAe,cAAe,QAAS,OAAQ,iBAAkB,QAAS,QAAS,sBAAuB,oBAAqB,qBAEzYgxC,GAAQwjD,cACRknnC,GAAUnhtC,IAAMyG,SAIhB64F,GAAkBt/F,IAAMia,UAAU,GAClCukO,GAASl/I,GAAgB,GACzBqinC,GAAYrinC,GAAgB,GAE5B2jJ,GAAmBjjP,IAAMia,UAAU,GACnCisD,GAAO+8K,GAAiB,GACxBn3J,GAAUm3J,GAAiB,GAE3BQ,GAAiBC,YAAc,CACjCC,WAAYi9Y,GACZz5iB,QAASruE,EACT/uC,KAAM,WAEJ65Q,GAAkBl1O,YAAe+0O,GAAgB,GACjDu/9B,GAAep/9B,GAAgB,GAC/Bgkf,GAAgBhkf,GAAgB,GAEhC5yF,GAAQh0L,MAAMC,QAAQ+lvC,IACtBC,GAAcjjtC,IAAMyG,SACpB//B,GAASsqL,GAAQ91F,YAAmB8npC,IAAch7uC,KAAKg5uC,GAAO,CAACgC,IACnEt8uC,GAASA,GAAOnC,KAAI,SAAUtN,GAC5B,OAAOqsI,EAAMrsI,EAAOuB,EAAKD,MAE3B,IAAI2pvC,IAAsB,IAAdC,GAA+B,OAAThivC,GAAgB+6F,YAAmBl+F,MAAM1E,KAAKwjB,OAAOvjB,EAAMC,GAAO2H,IAAQ,IAAIoE,KAAI,SAAU+U,EAAG5hB,GAC/H,MAAO,CACLT,MAAOuB,EAAM2H,GAAOzI,MAEnByqvC,EACLc,GAAY5/sC,QAAU,CACpB7a,OAAQw6tC,IAIV,IAAI1+9B,GAAqBC,cACrBC,GAAiBF,GAAmBE,eACpCC,GAAgBH,GAAmBG,cACnCC,GAAkBJ,GAAmBttR,IAErC+sR,GAAmB/jP,IAAMia,UAAU,GACnCw1E,GAAes0J,GAAiB,GAChCkyJ,GAAkBlyJ,GAAiB,GAEnC299B,GAAY1htC,IAAMyG,SAClBw+O,GAAiB7iJ,YAAWsiJ,GAAiBg99B,IAC7Cp89B,GAAYljJ,YAAWprI,EAAKiuR,IAC5B+if,GAAc9+Y,aAAiB,SAAUxmP,GAC3C,IAAIhrI,EAAQwF,OAAOwlI,EAAMziB,cAAci5L,aAAa,eAEhD10B,GAAe9hJ,IACjBuzS,GAAgBv+a,GAGlBo0H,GAAQp0H,MAEN2mR,GAAa6qG,aAAiB,YACV,IAAlBz5P,KACFwmT,IAAiB,GACjBxxJ,MAGF34J,IAAS,MAEPggiC,GAAkB5iyB,aAAiB,SAAUxmP,GAC/C,IAAIhrI,EAAQwF,OAAOwlI,EAAMziB,cAAci5L,aAAa,eACpDptL,GAAQp0H,MAEN2kzB,GAAmBnzb,aAAiB,WACtCp9P,IAAS,MAEPk+N,GAAgBk/B,aAAiB,SAAUxmP,GAC7C,IAOIt3H,EAPA1T,EAAQwF,OAAOwlI,EAAMziB,cAAci5L,aAAa,eAChDjiT,EAAQyP,GAAOhP,GACfwrvC,GAAe3qvC,EAAMC,GAAO,GAC5B2qvC,EAAcjB,GAAM39uC,KAAI,SAAUwge,GACpC,OAAOA,EAAK9te,SAEVmsvC,EAAaD,EAAYpnuC,QAAQ9kB,GAGrC,OAAQyrI,EAAM7iI,KACZ,IAAK,OACHuL,EAAW5S,EACX,MAEF,IAAK,MACH4S,EAAW7S,EACX,MAEF,IAAK,SACC4H,KACFiL,EAAWnU,EAAQisvC,GAGrB,MAEF,IAAK,WACC/ivC,KACFiL,EAAWnU,EAAQisvC,GAGrB,MAEF,IAAK,aACL,IAAK,UAED93uC,EADEjL,GACSlJ,EAAQkJ,GAERgjvC,EAAYC,EAAa,IAAMD,EAAYA,EAAY/lvC,OAAS,GAG7E,MAEF,IAAK,YACL,IAAK,YAEDgO,EADEjL,GACSlJ,EAAQkJ,GAERgjvC,EAAYC,EAAa,IAAMD,EAAY,GAGxD,MAEF,QACE,OAYJ,GARAzgnC,EAAM/F,iBAEFx8H,KACFiL,EAAWi2uC,EAAiBj2uC,EAAUjL,GAAM3H,IAG9C4S,EAAWk4H,EAAMl4H,EAAU5S,EAAKD,GAE5By4L,GAAO,CACT,IAAIo3J,EAAgBh9U,EACpBA,EAAWo2uC,EAAc,CACvB96uC,OAAQA,GACR8hB,OAAQw6tC,GACR53uC,SAAUA,EACV1T,MAAOA,IACNsQ,KAAKg5uC,GACRS,EAAW,CACTC,UAAWA,GACXt3yB,YAAah/b,EAAS2Q,QAAQqsU,KAIlCw/a,GAAcx8vB,GACd6qa,GAAgBv+a,GAEZq/G,GACFA,EAAS2rB,EAAOt3H,GAGd++7B,GACFA,EAAkBzn0B,EAAOt3H,MAGzBi4uC,GAAgBrjtC,IAAMyG,SACtBgyP,GAAOq5F,EAEa,QAApBr7S,GAAMxB,WAAuC,aAAhB68S,IAC/Br5F,IAAQ,YAGV,IAAI6q9B,GAAoBtjtC,IAAMykF,aAAY,SAAUz5E,GAClD,IAaIsxS,EAYAlxU,EAzBAm4uC,EAASv4sC,EAAMu4sC,OACfC,EAAax4sC,EAAM8/P,KACnBA,OAAsB,IAAf048B,GAAgCA,EACvCC,EAAUz4sC,EAAMtkC,OAChB8hB,EAASwiB,EAAMxiB,OAGfk7tC,EAFShC,GAAUr+sC,QAEYmyP,wBAC/B3+M,EAAQ6sqC,EAAsB7sqC,MAC9Bi2C,EAAS42nC,EAAsB52nC,OAC/BgD,EAAS4znC,EAAsB5znC,OAC/Bh6G,EAAO4tuC,EAAsB5tuC,KAiBjC,GAZEwmU,EAD+B,IAA7B7jD,GAAK18Q,QAAQ,aACJ+zG,EAASyznC,EAAOx8sC,GAAK+lF,GAErBy2nC,EAAOnwuC,EAAI0C,GAAQ+gE,GAGE,IAA9B4hN,GAAK18Q,QAAQ,cACfugU,EAAU,EAAIA,GAIhBlxU,EAljBJ,SAAwBkxU,EAAS9jV,EAAKD,GACpC,OAAQA,EAAMC,GAAO8jV,EAAU9jV,EAijBlBmrvC,CAAern6B,EAAS9jV,EAAKD,GAEpC4H,GACFiL,EAAWi2uC,EAAiBj2uC,EAAUjL,GAAM3H,OACvC,CACL,IAAI2qvC,EAAcjB,GAAM39uC,KAAI,SAAUwge,GACpC,OAAOA,EAAK9te,SAGdmU,EAAW+3uC,EADQlC,EAAYkC,EAAa/3uC,IAI9CA,EAAWk4H,EAAMl4H,EAAU5S,EAAKD,GAChC,IAAI6xc,EAAc,EAElB,GAAIp5Q,GAAO,CAOT,IAAIo3J,EAAgBh9U,EAOpBg/b,GANAh/b,EAAWo2uC,EAAc,CACvB96uC,OAAQ+8uC,EACRj7tC,OAAQA,EACRpd,SAAUA,EACV1T,MARA0yc,EAHGt/J,EAGWu48B,GAAchgtC,QAFd49sC,EAAYwC,EAASr4uC,KAWlCpD,KAAKg5uC,IACejluC,QAAQqsU,GAC/Bi75B,GAAchgtC,QAAU+ma,EAG1B,MAAO,CACLh/b,SAAUA,EACVg/b,YAAaA,KAEd,CAAC7xc,EAAKC,EAAKigS,GAAMznG,GAAO7wL,GAAM+hvC,KAC7B1lc,GAAkBtzb,aAAiB,SAAUxmP,GAC/C,IAAI6gnC,EAASrC,EAAYx+mC,EAAOy+mC,IAEhC,GAAKoC,EAAL,CAIA,IAAIK,EAAqBN,GAAkB,CACzCC,OAAQA,EACRz48B,MAAM,EACNpkS,OAAQA,GACR8hB,OAAQw6tC,KAEN53uC,EAAWw4uC,EAAmBx4uC,SAC9Bg/b,EAAcw5yB,EAAmBx5yB,YAErCq3yB,EAAW,CACTC,UAAWA,GACXt3yB,YAAaA,EACbu3yB,UAAWA,KAEb/5e,GAAcx8vB,GAEV2rG,GACFA,EAAS2rB,EAAOt3H,OAGhBmxyB,GAAiBrzb,aAAiB,SAAUxmP,GAC9C,IAAI6gnC,EAASrC,EAAYx+mC,EAAOy+mC,IAEhC,GAAKoC,EAAL,CAIA,IAKIn4uC,EALsBk4uC,GAAkB,CAC1CC,OAAQA,EACR78uC,OAAQA,GACR8hB,OAAQw6tC,KAEyB53uC,SAEnCu2uC,IAAW,GAEQ,aAAfj/mC,EAAMjnI,MACRqwH,IAAS,GAGPq+0B,GACFA,EAAkBzn0B,EAAOt3H,GAG3B+1uC,GAAQ99sC,aAAUhsC,EAClB,IAAIi6S,EAAMsH,YAAc8o8B,GAAUr+sC,SAClCiuQ,EAAI9sM,oBAAoB,YAAag4sB,IACrClrgB,EAAI9sM,oBAAoB,UAAW+3sB,IACnCjrgB,EAAI9sM,oBAAoB,YAAag4sB,IACrClrgB,EAAI9sM,oBAAoB,WAAY+3sB,QAElCD,GAAmBpzb,aAAiB,SAAUxmP,GAEhDA,EAAM/F,iBACN,IAAI/1D,EAAQ87D,EAAMm+f,eAAe,GAEpB,MAATj6jB,IAEFu6qC,GAAQ99sC,QAAUujC,EAAM2p5B,YAG1B,IAAIgzR,EAASrC,EAAYx+mC,EAAOy+mC,IAE5B0C,EAAsBP,GAAkB,CAC1CC,OAAQA,EACR78uC,OAAQA,GACR8hB,OAAQw6tC,KAEN53uC,EAAWy4uC,EAAoBz4uC,SAC/Bg/b,EAAcy5yB,EAAoBz5yB,YAEtCq3yB,EAAW,CACTC,UAAWA,GACXt3yB,YAAaA,EACbu3yB,UAAWA,KAEb/5e,GAAcx8vB,GAEV2rG,GACFA,EAAS2rB,EAAOt3H,GAGlB,IAAIkmS,EAAMsH,YAAc8o8B,GAAUr+sC,SAClCiuQ,EAAI/sM,iBAAiB,YAAai4sB,IAClClrgB,EAAI/sM,iBAAiB,WAAYg4sB,OAEnCv8wB,IAAM0B,WAAU,WACd,IAAIg/rB,EAASghhB,GAAUr+sC,QACvBq9rB,EAAOn8nB,iBAAiB,aAAc+3sB,IACtC,IAAIhrgB,EAAMsH,YAAc8nb,GACxB,OAAO,WACLA,EAAOl8nB,oBAAoB,aAAc83sB,IACzChrgB,EAAI9sM,oBAAoB,YAAag4sB,IACrClrgB,EAAI9sM,oBAAoB,UAAW+3sB,IACnCjrgB,EAAI9sM,oBAAoB,YAAag4sB,IACrClrgB,EAAI9sM,oBAAoB,WAAY+3sB,OAErC,CAACA,GAAgBC,GAAiBF,KACrC,IAAIJ,GAAkBhzb,aAAiB,SAAUxmP,GAC3Cq6L,GACFA,EAAYr6L,GAGdA,EAAM/F,iBACN,IAAI4mnC,EAASrC,EAAYx+mC,EAAOy+mC,IAE5B2C,EAAsBR,GAAkB,CAC1CC,OAAQA,EACR78uC,OAAQA,GACR8hB,OAAQw6tC,KAEN53uC,EAAW04uC,EAAoB14uC,SAC/Bg/b,EAAc05yB,EAAoB15yB,YAEtCq3yB,EAAW,CACTC,UAAWA,GACXt3yB,YAAaA,EACbu3yB,UAAWA,KAEb/5e,GAAcx8vB,GAEV2rG,GACFA,EAAS2rB,EAAOt3H,GAGlB,IAAIkmS,EAAMsH,YAAc8o8B,GAAUr+sC,SAClCiuQ,EAAI/sM,iBAAiB,YAAai4sB,IAClClrgB,EAAI/sM,iBAAiB,UAAWg4sB,OAE9Bwnc,GAAc3C,EAAepwjC,GAAQtqL,GAAO,GAAKlO,EAAKA,EAAKD,GAC3DyrvC,GAAY5C,EAAe16uC,GAAOA,GAAOtJ,OAAS,GAAI5E,EAAKD,GAAOwrvC,GAElEE,GAAa5+sC,YAAS,GAAIu8sC,EAAUnp9B,IAAMpvR,OAAO06uC,IAAc,GAAInC,EAAUnp9B,IAAMop9B,KAAKmC,KAE5F,OAAOhktC,IAAMwB,cAAc0T,EAAW7P,YAAS,CAC7CruC,IAAKsuR,GACL3wM,UAAW2B,kBAAK7B,EAAQ3hE,KAAM2hE,EAAQ,QAAQ5tE,OAAOk5H,YAAWv+B,KAAU7sB,EAAW8jC,GAAYhkC,EAAQgkC,SAAUypoC,GAAM9kvC,OAAS,GAAK8kvC,GAAMl5uC,MAAK,SAAU+7d,GAC1J,OAAOA,EAAK1oc,UACRo4C,EAAQyvqC,QAAkB,IAAVj6iC,IAAmBx1H,EAAQ0vqC,WAAY,CAC3D7o9B,SAAU7mN,EAAQ6mN,UAClBw2F,GAAc,CACdsy3B,SAAU3vqC,EAAQ4vqC,eAClBp6iC,KACF8yH,YAAam/e,IACZhgyB,IAAQ8jB,IAAMwB,cAAc,OAAQ,CACrCmzC,UAAWF,EAAQ6vqC,OACjBtktC,IAAMwB,cAAc,OAAQ,CAC9BmzC,UAAWF,EAAQw1H,MACnBpzF,MAAOotoC,KACLjktC,IAAMwB,cAAc,QAAS,CAC/BvqC,MAAOyP,GAAOsW,KAAK,KACnBjT,KAAMA,EACNtO,KAAM,WACJymvC,GAAM39uC,KAAI,SAAUwge,GACtB,IAEIw/wB,EAFAjo6B,EAAU8k6B,EAAer8wB,EAAK9te,MAAOuB,EAAKD,GAC1Cs+G,EAAQ+qoC,EAAUnp9B,IAAMpvR,OAAOizU,GASnC,OALEio6B,GADY,IAAVt6iC,IAC2C,IAAhCvjM,GAAOqV,QAAQgpd,EAAK9te,OAEV,WAAVgzM,KAAuBjZ,GAAQ+zS,EAAK9te,OAASyP,GAAO,IAAMq+d,EAAK9te,OAASyP,GAAOA,GAAOtJ,OAAS,GAAK2ne,EAAK9te,OAASyP,GAAO,KAAiB,aAAVujM,KAAyBjZ,GAAQ+zS,EAAK9te,OAASyP,GAAO,IAAMq+d,EAAK9te,OAASyP,GAAOA,GAAOtJ,OAAS,GAAK2ne,EAAK9te,OAASyP,GAAO,IAGnQs5B,IAAMwB,cAAcxB,IAAM8lP,SAAU,CACzCjmR,IAAKkle,EAAK9te,OACT+oC,IAAMwB,cAAc,OAAQ,CAC7Bq1E,MAAOA,EACPliC,UAAW2B,kBAAK7B,EAAQswZ,KAAMw/wB,GAAc9vqC,EAAQ8vqC,cAClDvktC,IAAMwB,cAAc,OAAQ,CAC9B,eAAe,EACfq1E,MAAOA,EACPliC,UAAW2B,kBAAK7B,EAAQ+vqC,UAAWD,GAAc9vqC,EAAQgwqC,kBACxD1/wB,EAAK1oc,WACN31B,GAAOnC,KAAI,SAAUtN,EAAOS,GAC9B,IAAI4kV,EAAU8k6B,EAAenqvC,EAAOuB,EAAKD,GACrCs+G,EAAQ+qoC,EAAUnp9B,IAAMpvR,OAAOizU,GACnC,OAAOt8S,IAAMwB,cAAcmhtC,GAAqB,CAC9C9ivC,IAAKnI,EACLqrvC,iBAAkBA,GAClBhC,kBAAmBA,GACnBpsqC,UAAWF,EAAQ8guB,WACnBt+yB,MAAmC,oBAArB8rvC,GAAkCA,GAAiB377B,GAAMnwT,GAAQS,GAASqrvC,GACxFrrvC,MAAOA,EACPwuG,KAAMA,KAASxuG,GAAS8mR,KAAW9mR,GAA+B,OAAtBqpvC,GAC5CtooC,SAAUA,GACTz4E,IAAMwB,cAAcghtC,GAAgB,CACrC7tqC,UAAW2B,kBAAK7B,EAAQo24B,MAAOp24B,EAAQ,aAAa5tE,OAAOk5H,YAAWv+B,KAAUg9K,KAAW9mR,GAAS+8E,EAAQ+pM,OAAQ/lK,GAAYhkC,EAAQgkC,SAAUgX,KAAiB/3H,GAAS+8E,EAAQg7C,cACpLoQ,SAAUpnB,EAAW,KAAO,EAC5Bx7D,KAAM,SACN45D,MAAOA,EACP,aAAcn/G,EACd,aAAc0yhC,EAAeA,EAAa1yhC,GAASkpI,EACnD,kBAAmBszd,EACnB,mBAAoBpiO,EACpB,gBAAiB1qE,GAAM7uT,GACvB,gBAAiB6uT,GAAM5uT,GACvB,gBAAiB4uT,GAAMnwT,GACvB,iBAAkBozhC,EAAmBA,EAAiBjjuB,GAAMnwT,GAAQS,GAASsqvC,EAC7EtlnC,UAAWstN,GACX1lP,QAAS0jqB,GACT/moB,OAAQo9I,GACR+F,YAAa0n4B,GACbj7hC,aAAcwrrB,aAiML7luB,iBA14BK,SAAgBC,GAClC,MAAO,CAEL3jE,KAAM,CACJg6G,OAAQ,EACRj2C,MAAO,OACPH,UAAW,cACXW,QAAS,SACTV,QAAS,eACT6hC,SAAU,WACVoI,OAAQ,UACR0xO,YAAa,OACb9wP,MAAO/qB,EAAM+pC,QAAQE,QAAQ7iF,KAC7B8nU,wBAAyB,cACzB,aAAc,CACZ/1O,cAAe,OACfhP,OAAQ,UACRpf,MAAO/qB,EAAM+pC,QAAQC,KAAK,MAE5B,aAAc,CACZ5pC,MAAO,EACPi2C,OAAQ,OACRz1C,QAAS,UAGX,2BAA4B,CAE1BA,QAAS,SACT,aAAc,CACZA,QAAS,YAMf62E,aAAc,GAIdC,eAAgB,CACd3sD,MAAO/qB,EAAM+pC,QAAQ+d,UAAU1gG,MAIjCqmtC,OAAQ,CACNt1nC,aAAc,GACd,aAAc,CACZA,aAAc,OACd7R,YAAa,KAKjBu+K,SAAU,GAGV7iL,SAAU,GAGV6roC,KAAM,CACJ3tqC,QAAS,QACT6hC,SAAU,WACV3hC,MAAO,OACPi2C,OAAQ,EACR9J,aAAc,EACdzC,gBAAiB,eACjBkI,QAAS,IACT,cAAe,CACbqE,OAAQ,OACRj2C,MAAO,IAKXozH,MAAO,CACLtzH,QAAS,QACT6hC,SAAU,WACVsU,OAAQ,EACR9J,aAAc,EACdzC,gBAAiB,eACjB,cAAe,CACb1pC,MAAO,IAKXstqC,WAAY,CACV,WAAY,CACVxtqC,QAAS,SAKb0tqC,cAAe,CACb,WAAY,CACV9joC,gBACuB,UAAvB9pC,EAAM+pC,QAAQ/kH,KAAmB2vR,YAAQ30M,EAAM+pC,QAAQE,QAAQ7iF,KAAM,KAAQstP,YAAO10M,EAAM+pC,QAAQE,QAAQ7iF,KAAM,KAElH,UAAW,CACT4qF,QAAS,IAKboi2B,MAAO,CACLry2B,SAAU,WACV3hC,MAAO,GACPi2C,OAAQ,GACRrJ,YAAa,EACb5L,WAAY,EACZnhC,UAAW,aACXssC,aAAc,MACdkhP,QAAS,EACT3jP,gBAAiB,eACjB5pC,QAAS,OACTnC,WAAY,SACZyC,eAAgB,SAChB84C,WAAYt5C,EAAMu5C,YAAYp2H,OAAO,CAAC,cAAe,CACnDq2H,SAAUx5C,EAAMu5C,YAAYC,SAAS60J,WAEvC,WAAY,CACVtsK,SAAU,WACVthE,QAAS,KACT8rE,aAAc,MAEdltG,MAAO,GACP+5G,KAAM,GACN95G,OAAQ,GACR+5G,QAAS,IAEX,yBAA0B,CACxB1M,UAAW,mBAAmBv8G,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM,MACtE,uBAAwB,CACtBulF,UAAW,SAGf,WAAY,CACVA,UAAW,oBAAoBv8G,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQE,QAAQ7iF,KAAM,OAEzE,aAAc,CACZg5C,MAAO,EACPi2C,OAAQ,EACRrJ,YAAa,EACb5L,WAAY,EACZ,UAAW,CACTuL,UAAW,SAGf,cAAe,CACbK,YAAa,EACbmL,cAAe,GAEjB,uBAAwB,CACtBnL,YAAa,EACbmL,cAAe,IAKnB81nC,kBAAmB,GAInBC,oBAAqB,CACnB,yBAA0B,CACxBvhoC,UAAW,mBAAmBv8G,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM,OAE1E,WAAY,CACVulF,UAAW,oBAAoBv8G,OAAOi5Q,YAAKrpM,EAAM+pC,QAAQ+d,UAAU1gG,KAAM,QAK7E2gP,OAAQ,GAGR/uJ,aAAc,GAGd8lrB,WAAY,GAGZxwU,KAAM,CACJvsX,SAAU,WACV3hC,MAAO,EACPi2C,OAAQ,EACR9J,aAAc,EACdzC,gBAAiB,gBAInBgkoC,WAAY,CACVhkoC,gBAAiB9pC,EAAM+pC,QAAQ8V,WAAWhJ,MAC1C7E,QAAS,IAIX+7nC,UAAWn/sC,YAAS,GAAIoxC,EAAM82C,WAAWu/B,MAAO,CAC9CtrD,MAAO/qB,EAAM+pC,QAAQ4G,KAAKmX,UAC1B/lB,SAAU,WACVqX,IAAK,GACL+H,UAAW,mBACX5F,WAAY,SACZ,cAAe,CACbnC,IAAK,OACL/5G,KAAM,GACN8hH,UAAW,mBAEb,2BAA4B,CAC1B/H,IAAK,GACL,cAAe,CACb/5G,KAAM,OAMZ2uuC,gBAAiB,CACfjjpC,MAAO/qB,EAAM+pC,QAAQ4G,KAAK1G,YAgrBE,CAChC32G,KAAM,aADOysE,CAEZgrpB,I,4FC5iCI,SAASojhB,EAAgB/itC,EAAUgjtC,GACxC,IAII11uC,EAASxV,OAAOC,OAAO,MAO3B,OANIioC,GAAUkhG,WAASx+H,IAAIs9B,GAAU,SAAUzgC,GAC7C,OAAOA,KACN6G,SAAQ,SAAUwtC,GAEnBtmC,EAAOsmC,EAAM51C,KATF,SAAgB41C,GAC3B,OAAOovsC,GAAShvsC,yBAAeJ,GAASovsC,EAAMpvsC,GAASA,EAQnCjxC,CAAOixC,MAEtBtmC,EAkET,SAASw16B,EAAQlv4B,EAAO2oG,EAAM34G,GAC5B,OAAsB,MAAfA,EAAM24G,GAAgB34G,EAAM24G,GAAQ3oG,EAAMhQ,MAAM24G,GAclD,SAAS0mmC,EAAoBlmoC,EAAWmmoC,EAAkBn7zB,GAC/D,IAAIo7zB,EAAmBJ,EAAgBhmoC,EAAU/8E,UAC7CA,EA/DC,SAA4BhvB,EAAMvX,GAIvC,SAAS2pvC,EAAeplvC,GACtB,OAAOA,KAAOvE,EAAOA,EAAKuE,GAAOgT,EAAKhT,GAJxCgT,EAAOA,GAAQ,GACfvX,EAAOA,GAAQ,GAQf,IAcIiD,EAdA2mvC,EAAkBvrvC,OAAOC,OAAO,MAChCurvC,EAAc,GAElB,IAAK,IAAIC,KAAWvyuC,EACduyuC,KAAW9pvC,EACT6pvC,EAAY/nvC,SACd8nvC,EAAgBE,GAAWD,EAC3BA,EAAc,IAGhBA,EAAYx9uC,KAAKy9uC,GAKrB,IAAIC,EAAe,GAEnB,IAAK,IAAI/qc,KAAWh/yB,EAAM,CACxB,GAAI4pvC,EAAgB5qc,GAClB,IAAK/7yB,EAAI,EAAGA,EAAI2mvC,EAAgB5qc,GAASl9yB,OAAQmB,IAAK,CACpD,IAAI+mvC,EAAiBJ,EAAgB5qc,GAAS/7yB,GAC9C8mvC,EAAaH,EAAgB5qc,GAAS/7yB,IAAM0mvC,EAAeK,GAI/DD,EAAa/qc,GAAW2qc,EAAe3qc,GAIzC,IAAK/7yB,EAAI,EAAGA,EAAI4mvC,EAAY/nvC,OAAQmB,IAClC8mvC,EAAaF,EAAY5mvC,IAAM0mvC,EAAeE,EAAY5mvC,IAG5D,OAAO8mvC,EAoBQE,CAAmBR,EAAkBC,GAmCpD,OAlCArrvC,OAAO0D,KAAKwkC,GAAU55B,SAAQ,SAAUpI,GACtC,IAAI41C,EAAQ5T,EAAShiC,GACrB,GAAKg2C,yBAAeJ,GAApB,CACA,IAAI+vsC,EAAW3lvC,KAAOklvC,EAClBU,EAAW5lvC,KAAOmlvC,EAClBU,EAAYX,EAAiBllvC,GAC7B8lvC,EAAY9vsC,yBAAe6vsC,KAAeA,EAAUjgtC,MAAM89F,IAE1DkinC,GAAaD,IAAWG,EAQhBF,IAAWD,GAAYG,EAMxBF,GAAWD,GAAW3vsC,yBAAe6vsC,KAI9C7jtC,EAAShiC,GAAO43C,uBAAahC,EAAO,CAClCm0Y,SAAUA,EAASvsa,KAAK,KAAMo4B,GAC9B8tF,GAAIminC,EAAUjgtC,MAAM89F,GACpB7B,KAAMijzB,EAAQlv4B,EAAO,OAAQmpE,GAC7B4iB,MAAOmjzB,EAAQlv4B,EAAO,QAASmpE,MAXjC/8E,EAAShiC,GAAO43C,uBAAahC,EAAO,CAClC8tF,IAAI,IAVN1hG,EAAShiC,GAAO43C,uBAAahC,EAAO,CAClCm0Y,SAAUA,EAASvsa,KAAK,KAAMo4B,GAC9B8tF,IAAI,EACJ7B,KAAMijzB,EAAQlv4B,EAAO,OAAQmpE,GAC7B4iB,MAAOmjzB,EAAQlv4B,EAAO,QAASmpE,SAoB9B/8E,ECjIT,IAAIn7B,EAAS/M,OAAO+M,QAAU,SAAUrE,GACtC,OAAO1I,OAAO0D,KAAKgF,GAAKkC,KAAI,SAAU7I,GACpC,OAAO2G,EAAI3G,OAyBXy/yB,EAA+B,SAAUzviB,GAG3C,SAASyviB,EAAgB11wB,EAAOhhC,GAC9B,IAAIyuC,EAIA8mwB,GAFJ9mwB,EAAQw4N,EAAiBnvQ,KAAKhB,KAAMkqC,EAAOhhC,IAAYlJ,MAE9By+yB,aAAa38xB,KAAKugG,YAAuB1qE,IAUlE,OAPAA,EAAM3Q,MAAQ,CACZT,aAAc,CACZ4utB,YAAY,GAEdspD,aAAcA,EACd4rc,aAAa,GAER1ysC,EAjBTg5N,YAAeiviB,EAAiBzviB,GAoBhC,IAAI1qO,EAASm6wB,EAAgBzhzB,UAqE7B,OAnEAsnC,EAAOorO,kBAAoB,WACzB7wQ,KAAKmjH,SAAU,EACfnjH,KAAK4iH,SAAS,CACZr8E,aAAc,CACZ4utB,YAAY,MAKlB1vtB,EAAOyrO,qBAAuB,WAC5BlxQ,KAAKmjH,SAAU,GAGjBy8rB,EAAgBhviB,yBAA2B,SAAkCvtJ,EAAWh9E,GACtF,IDiBmC6D,EAAOmkZ,ECjBtCm7zB,EAAmBnjtC,EAAKC,SACxBm4wB,EAAep4wB,EAAKo4wB,aAExB,MAAO,CACLn4wB,SAFgBD,EAAKgktC,aDeYngtC,ECbcm5E,EDaPgrU,ECbkBowX,EDcvD4qc,EAAgBn/sC,EAAM5D,UAAU,SAAU4T,GAC/C,OAAOgC,uBAAahC,EAAO,CACzBm0Y,SAAUA,EAASvsa,KAAK,KAAMo4B,GAC9B8tF,IAAI,EACJgxd,OAAQowV,EAAQlv4B,EAAO,SAAUhQ,GACjC+7F,MAAOmjzB,EAAQlv4B,EAAO,QAAShQ,GAC/Bi8F,KAAMijzB,EAAQlv4B,EAAO,OAAQhQ,SCpB6Cq/sC,EAAoBlmoC,EAAWmmoC,EAAkB/qc,GAC3H4rc,aAAa,IAKjB5ktC,EAAOg5wB,aAAe,SAAsBvkwB,EAAO9yC,GACjD,IAAIkjvC,EAAsBjB,EAAgBrpvC,KAAKkqC,MAAM5D,UACjD4T,EAAM51C,OAAOgmvC,IAEbpwsC,EAAMhQ,MAAMmkZ,UACdn0Y,EAAMhQ,MAAMmkZ,SAASjnb,GAGnBpH,KAAKmjH,SACPnjH,KAAK4iH,UAAS,SAAU57E,GACtB,IAAIV,EAAWwD,YAAS,GAAI9C,EAAMV,UAGlC,cADOA,EAAS4T,EAAM51C,KACf,CACLgiC,SAAUA,QAMlBb,EAAO28F,OAAS,WACd,IAAI7f,EAAcviH,KAAKkqC,MACnByP,EAAY4oE,EAAYjpC,UACxBglmC,EAAe/7jC,EAAY+7jC,aAC3Bp0oC,EAAQR,YAA8B64E,EAAa,CAAC,YAAa,iBAEjEh8E,EAAevmC,KAAKgnC,MAAMT,aAC1BD,EAAWn7B,EAAOnL,KAAKgnC,MAAMV,UAAUt9B,IAAIs1qC,GAK/C,cAJOp0oC,EAAM8ujB,cACN9ujB,EAAM+7F,aACN/7F,EAAMi8F,KAEK,OAAdxsF,EACkBlV,IAAMwB,cAAcswtB,IAAuBnwtB,SAAU,CACvE1qC,MAAO6qC,GACND,GAGe7B,IAAMwB,cAAcswtB,IAAuBnwtB,SAAU,CACvE1qC,MAAO6qC,GACO9B,IAAMwB,cAAc0T,EAAWzP,EAAO5D,KAGjDs5wB,EA1F0B,CA2FjCn7wB,IAAMkV,WAERimwB,EAAgB9giB,UAyDZ,GACJ8giB,EAAgBn+rB,aA5KG,CACjBnoC,UAAW,MACXglmC,aAAc,SAAsBpkoC,GAClC,OAAOA,IA0KI0lwB","debug_id":"2416a425-3db2-54ab-a31c-fa0a64ae2431"}